context-2013.05.28.20130704/0000755000175000017500000000000012165205647014417 5ustar norbertnorbertcontext-2013.05.28.20130704/bin/0000755000175000017500000000000012165205647015167 5ustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/0000755000175000017500000000000012165205647017015 5ustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/texmfstart0000777000175000017500000000000012130566422033263 2../../texmf-dist/scripts/context/stubs/unix/texmfstartustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/ctxtools0000777000175000017500000000000012130566421032416 2../../texmf-dist/scripts/context/stubs/unix/ctxtoolsustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/texexec0000777000175000017500000000000012130566422031773 2../../texmf-dist/scripts/context/stubs/unix/texexecustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/mtxrun0000777000175000017500000000000012130566421031552 2../../texmf-dist/scripts/context/stubs/unix/mtxrunustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/luatools0000777000175000017500000000000012130566421032364 2../../texmf-dist/scripts/context/stubs/unix/luatoolsustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/context0000777000175000017500000000000012130566422032031 2../../texmf-dist/scripts/context/stubs/unix/contextustar norbertnorbertcontext-2013.05.28.20130704/bin/i386-linux/pstopdf0000777000175000017500000000000012130566421032016 2../../texmf-dist/scripts/context/stubs/unix/pstopdfustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/0000755000175000017500000000000012165205647016503 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/0000755000175000017500000000000012165205647020172 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/0000755000175000017500000000000012165205647021656 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/0000755000175000017500000000000012165205647023016 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/0000755000175000017500000000000012165205647024153 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/ctxtools.exe0000755000175000017500000001100012134352503026516 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/texexec.exe0000755000175000017500000001100012134352503026304 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/mtxrun.exe0000755000175000017500000001100012134352503026174 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/context.exe0000755000175000017500000001100012134352503026323 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/luatools.exe0000755000175000017500000001100012134352503026501 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/metatex.exe0000755000175000017500000001100012134352503026306 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/mtxworks.exe0000755000175000017500000001100012134352503026535 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/mtxrun.dll0000755000175000017500000001700012134352503026174 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ# 8  Xf JLL.text   P`.data @0.rdata\0@0@.bss@@.edataJ@0@.idataL@0.relocL@0BU Eh@Xfh@XfP? Ðt&U Uh@Xfh@XfR Í'US@Xft> @XfA9wYCtЋ@Xf؃9v R@Xf j] UVS] t3PEPSuVۉYu@Xftd_e[^] t& h+@XftD@XfREPjEPXte[^] 1e[^] 1 념U Xft; h0Xf ƒ tPPh 0XfRZYt h XfЃÍt&U]Ít&'U XftС Xf XfuÐ&UVS Xfte[^]ËXf XfEt/t4Xft&Ku hXfe[^]1ÍCXfu뻐UWVSxh$0XfSShh(XfPt=u# XfQ@QSh/0XfXZSh80XfWWj\h(Xfu6 XfV@VSh/0Xf_ h(Xfha0XfS|@E 1эAHtJ/tJ\uQQPh8XfXZj.h8XftPPh(XfhHXf1ҿ8Xfوуqп(XfэD=v* XfP@PSh/0Xfh8Xfh(Xfh0XfPPh0Xfh8Xf/uPPh8XfhHXfg^_h0Xf[SSh0Xfh8Xfu$QQh0XfhHXf5XZh0Xfh8XfCPPh0Xfh8XfuPPh0XfhHXfEPPh0XfhHXfE$HXf @u( XfW@WSh/0Xf hHXfh0Xf, h0Xf[]^ShXXfhjh0XfPZYuGWWShXXfhjh0Xfh(Xf[^u# XfQ@QSh/0XfXZSh0XfPPh1Xfu$XXfL @XfWWh*1XfP[^u  XfQ@QSh/0XfXZSh81Xf:U PlÅu( XfW@WSh/0XfuY^Sho1Xfh Xf@HXf}t@~1Xf@ 8Xff1 E 11A;M|@RRSP׉$VVh0Xfu Y[h1Xfh(@XfXZhXXfh(@Xf^_h1Xfh(@XfY[hHXfh(@XfXZh1Xfh(@Xf}t%WWh1Xfh(@Xf[^h8Xfh(@Xf1u: XfQ@QSh/0XfNXZfSh1Xf="uFt t uuރ1(@XfʉэD =v4 XfP@PSh/0XfVh(@Xfh1XfS APPVh(@Xf ]jDjSEDE$EjEjU܉E؉1 RSjjjjjjh(@Xfju( XfW@WSh/0Xf( h(@Xfh1Xf Eu juut j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/pstopdf.exe0000755000175000017500000001100012134352503026316 0ustar norbertnorbertMZ@ !L!This program cannot be run in DOS mode. $PEL mQ 80 @`' P4.text P`.data  @0.rdata$0 @0@.bss4@0.idata4P@0U P@]t&U P@]t&US hP@?  EEPE @SPh@@h@@@@ uD @SQ@@R@@P$P@ @QQPSR{tPP@@PC0PbtPP@@PCPPIk'UjP@'UjP@'USE=w;=rKPPjj1]&=tI=t=u=t9=uPPjjtZt jЃ말t&1zPPjj Vt>t j Ѓr jЃ`PPjjJPPjj 4PPjjU @t; h0@ƒ tPPh 0@RZYt h @ЃÍt&U]Ít&'U @tС @ @uÐ&UVS @te[^]Ë@ @Et/t4@t&Ku h@e[^]1ÍC@u뻐L$qUVSQ 1YcPPSVP@eY[^]aÐUSZЁ RZ1Щ 1t @@ @@fy @@ @@t @@ @@t @@ @@t @@ @@t @@ @@t @@@ @@ t @@ˀ @@=v x@t @@ @@[]Ë @@ @@אU]ÐU$0@$0@sQ@$0@r]Ð%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@libgcj_s.dll_Jv_RegisterClassesTPQPlPRPP(RPPPQ$QBQRQbQpQQQQQQQQPPQ$QBQRQbQpQQQQQQQQExitProcessQGetModuleHandleAlGetProcAddressSetUnhandledExceptionFilter7__getmainargsM__p__environO__p__fmodec__set_app_type_cexit _iob_onexit_setmodeNatexitsignaldllrunscriptPPPPKERNEL32.dllPPPPPPPPPPmsvcrt.dll(Pmtxrun.dllcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua0000644000175000017500000165611112161703335026217 0ustar norbertnorbert#!/usr/bin/env texlua -- for k, v in next, _G.string do -- local tv = type(v) -- if tv == "table" then -- for kk, vv in next, v do -- print(k,kk,vv) -- end -- else -- print(tv,k,v) -- end -- end if not modules then modules = { } end modules ['mtxrun'] = { version = 1.001, comment = "runner, lua replacement for texmfstart.rb", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- one can make a stub: -- -- #!/bin/sh -- env LUATEXDIR=/....../texmf/scripts/context/lua luatex --luaonly mtxrun.lua "$@" -- filename : mtxrun.lua -- comment : companion to context.tex -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL -- copyright: PRAGMA ADE / ConTeXt Development Team -- license : see context related readme files -- This script is based on texmfstart.rb but does not use kpsewhich to -- locate files. Although kpse is a library it never came to opening up -- its interface to other programs (esp scripting languages) and so we -- do it ourselves. The lua variant evolved out of an experimental ruby -- one. Interesting is that using a scripting language instead of c does -- not have a speed penalty. Actually the lua variant is more efficient, -- especially when multiple calls to kpsewhich are involved. The lua -- library also gives way more control. -- to be done / considered -- -- support for --exec or make it default -- support for jar files (or maybe not, never used, too messy) -- support for $RUBYINPUTS cum suis (if still needed) -- remember for subruns: _CTX_K_V_#{original}_ -- remember for subruns: _CTX_K_S_#{original}_ -- remember for subruns: TEXMFSTART.#{original} [tex.rb texmfstart.rb] -- begin library merge do -- create closure to overcome 200 locals limit package.loaded["l-lua"] = package.loaded["l-lua"] or true -- original size: 3123, stripped down to: 1694 if not modules then modules={} end modules ['l-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$") _MAJORVERSION=tonumber(major) or 5 _MINORVERSION=tonumber(minor) or 1 _LUAVERSION=_MAJORVERSION+_MINORVERSION/10 if not lpeg then lpeg=require("lpeg") end if loadstring then local loadnormal=load function load(first,...) if type(first)=="string" then return loadstring(first,...) else return loadnormal(first,...) end end else loadstring=load end if not ipairs then local function iterate(a,i) i=i+1 local v=a[i] if v~=nil then return i,v end end function ipairs(a) return iterate,a,0 end end if not pairs then function pairs(t) return next,t end end if not table.unpack then table.unpack=_G.unpack elseif not unpack then _G.unpack=table.unpack end if not package.loaders then package.loaders=package.searchers end local print,select,tostring=print,select,tostring local inspectors={} function setinspector(inspector) inspectors[#inspectors+1]=inspector end function inspect(...) for s=1,select("#",...) do local value=select(s,...) local done=false for i=1,#inspectors do done=inspectors[i](value) if done then break end end if not done then print(tostring(value)) end end end local dummy=function() end function optionalrequire(...) local ok,result=xpcall(require,dummy,...) if ok then return result end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true -- original size: 9893, stripped down to: 7253 if not modules then modules={} end modules ['l-package']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type=type local gsub,format=string.gsub,string.format local P,S,Cs,lpegmatch=lpeg.P,lpeg.S,lpeg.Cs,lpeg.match local package=package local searchers=package.searchers or package.loaders local filejoin=file and file.join or function(path,name) return path.."/"..name end local isreadable=file and file.is_readable or function(name) local f=io.open(name) if f then f:close() return true end end local addsuffix=file and file.addsuffix or function(name,suffix) return name.."."..suffix end local function cleanpath(path) return path end local pattern=Cs((((1-S("\\/"))^0*(S("\\/")^1/"/"))^0*(P(".")^1/"/"+P(1))^1)*-1) local function lualibfile(name) return lpegmatch(pattern,name) or name end local offset=luarocks and 1 or 0 local helpers=package.helpers or { cleanpath=cleanpath, lualibfile=lualibfile, trace=false, report=function(...) print(format(...)) end, builtin={ ["preload table"]=searchers[1+offset], ["path specification"]=searchers[2+offset], ["cpath specification"]=searchers[3+offset], ["all in one fallback"]=searchers[4+offset], }, methods={}, sequence={ "already loaded", "preload table", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } } package.helpers=helpers local methods=helpers.methods local builtin=helpers.builtin local extraluapaths={} local extralibpaths={} local luapaths=nil local libpaths=nil local oldluapath=nil local oldlibpath=nil local nofextralua=-1 local nofextralib=-1 local nofpathlua=-1 local nofpathlib=-1 local function listpaths(what,paths) local nofpaths=#paths if nofpaths>0 then for i=1,nofpaths do helpers.report("using %s path %i: %s",what,i,paths[i]) end else helpers.report("no %s paths defined",what) end return nofpaths end local function getextraluapaths() if helpers.trace and #extraluapaths~=nofextralua then nofextralua=listpaths("extra lua",extraluapaths) end return extraluapaths end local function getextralibpaths() if helpers.trace and #extralibpaths~=nofextralib then nofextralib=listpaths("extra lib",extralibpaths) end return extralibpaths end local function getluapaths() local luapath=package.path or "" if oldluapath~=luapath then luapaths=file.splitpath(luapath,";") oldluapath=luapath nofpathlua=-1 end if helpers.trace and #luapaths~=nofpathlua then nofpathlua=listpaths("builtin lua",luapaths) end return luapaths end local function getlibpaths() local libpath=package.cpath or "" if oldlibpath~=libpath then libpaths=file.splitpath(libpath,";") oldlibpath=libpath nofpathlib=-1 end if helpers.trace and #libpaths~=nofpathlib then nofpathlib=listpaths("builtin lib",libpaths) end return libpaths end package.luapaths=getluapaths package.libpaths=getlibpaths package.extraluapaths=getextraluapaths package.extralibpaths=getextralibpaths local hashes={ lua={}, lib={}, } local function registerpath(tag,what,target,...) local pathlist={... } local cleanpath=helpers.cleanpath local trace=helpers.trace local report=helpers.report local hash=hashes[what] local function add(path) local path=cleanpath(path) if not hash[path] then target[#target+1]=path hash[path]=true if trace then report("registered %s path %s: %s",tag,#target,path) end else if trace then report("duplicate %s path: %s",tag,path) end end end for p=1,#pathlist do local path=pathlist[p] if type(path)=="table" then for i=1,#path do add(path[i]) end else add(path) end end return paths end helpers.registerpath=registerpath function package.extraluapath(...) registerpath("extra lua","lua",extraluapaths,...) end function package.extralibpath(...) registerpath("extra lib","lib",extralibpaths,...) end local function loadedaslib(resolved,rawname) local base=gsub(rawname,"%.","_") local init="luaopen_"..gsub(base,"%.","_") if helpers.trace then helpers.report("calling loadlib with '%s' with init '%s'",resolved,init) end return package.loadlib(resolved,init) end helpers.loadedaslib=loadedaslib local function loadedbypath(name,rawname,paths,islib,what) local trace=helpers.trace for p=1,#paths do local path=paths[p] local resolved=filejoin(path,name) if trace then helpers.report("%s path, identifying '%s' on '%s'",what,name,path) end if isreadable(resolved) then if trace then helpers.report("%s path, '%s' found on '%s'",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbypath=loadedbypath methods["already loaded"]=function(name) return package.loaded[name] end methods["preload table"]=function(name) return builtin["preload table"](name) end methods["lua extra list"]=function(name) return loadedbypath(addsuffix(lualibfile(name),"lua" ),name,getextraluapaths(),false,"lua") end methods["lib extra list"]=function(name) return loadedbypath(addsuffix(lualibfile(name),os.libsuffix),name,getextralibpaths(),true,"lib") end methods["path specification"]=function(name) getluapaths() return builtin["path specification"](name) end methods["cpath specification"]=function(name) getlibpaths() return builtin["cpath specification"](name) end methods["all in one fallback"]=function(name) return builtin["all in one fallback"](name) end methods["not loaded"]=function(name) if helpers.trace then helpers.report("unable to locate '%s'",name or "?") end return nil end local level=0 local used={} helpers.traceused=false function helpers.loaded(name) local sequence=helpers.sequence level=level+1 for i=1,#sequence do local method=sequence[i] if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end local result,rest=methods[method](name) if type(result)=="function" then if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) end if helpers.traceused then used[#used+1]={ level=level,name=name } end level=level-1 return result,rest end end level=level-1 return nil end function helpers.showused() local n=#used if n>0 then helpers.report("%s libraries loaded:",n) helpers.report() for i=1,n do local u=used[i] helpers.report("%i %a",u.level,u.name) end helpers.report() end end function helpers.unload(name) if helpers.trace then if package.loaded[name] then helpers.report("unloading, name '%s', %s",name,"done") else helpers.report("unloading, name '%s', %s",name,"not loaded") end end package.loaded[name]=nil end table.insert(searchers,1,helpers.loaded) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true -- original size: 26252, stripped down to: 14371 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } lpeg=require("lpeg") local type,next,tostring=type,next,tostring local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format local floor=math.floor local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end) lpeg.patterns=lpeg.patterns or {} local patterns=lpeg.patterns local anything=P(1) local endofstring=P(-1) local alwaysmatched=P(true) patterns.anything=anything patterns.endofstring=endofstring patterns.beginofstring=alwaysmatched patterns.alwaysmatched=alwaysmatched local digit,sign=R('09'),S('+-') local cr,lf,crlf=P("\r"),P("\n"),P("\r\n") local newline=crlf+S("\r\n") local escaped=P("\\")*anything local squote=P("'") local dquote=P('"') local space=P(" ") local utfbom_32_be=P('\000\000\254\255') local utfbom_32_le=P('\255\254\000\000') local utfbom_16_be=P('\255\254') local utfbom_16_le=P('\254\255') local utfbom_8=P('\239\187\191') local utfbom=utfbom_32_be+utfbom_32_le+utfbom_16_be+utfbom_16_le+utfbom_8 local utftype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")+alwaysmatched*Cc("utf-8") local utfoffset=utfbom_32_be*Cc(4)+utfbom_32_le*Cc(4)+utfbom_16_be*Cc(2)+utfbom_16_le*Cc(2)+utfbom_8*Cc(3)+Cc(0) local utf8next=R("\128\191") patterns.utf8one=R("\000\127") patterns.utf8two=R("\194\223")*utf8next patterns.utf8three=R("\224\239")*utf8next*utf8next patterns.utf8four=R("\240\244")*utf8next*utf8next*utf8next patterns.utfbom=utfbom patterns.utftype=utftype patterns.utfoffset=utfoffset local utf8char=patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four local validutf8char=utf8char^0*endofstring*Cc(true)+Cc(false) local utf8character=P(1)*R("\128\191")^0 patterns.utf8=utf8char patterns.utf8char=utf8char patterns.utf8character=utf8character patterns.validutf8=validutf8char patterns.validutf8char=validutf8char local eol=S("\n\r") local spacer=S(" \t\f\v") local whitespace=eol+spacer local nonspacer=1-spacer local nonwhitespace=1-whitespace patterns.eol=eol patterns.spacer=spacer patterns.whitespace=whitespace patterns.nonspacer=nonspacer patterns.nonwhitespace=nonwhitespace local stripper=spacer^0*C((spacer^0*nonspacer^1)^0) local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0)) patterns.stripper=stripper patterns.collapser=collapser patterns.digit=digit patterns.sign=sign patterns.cardinal=sign^0*digit^1 patterns.integer=sign^0*digit^1 patterns.unsigned=digit^0*P('.')*digit^1 patterns.float=sign^0*patterns.unsigned patterns.cunsigned=digit^0*P(',')*digit^1 patterns.cfloat=sign^0*patterns.cunsigned patterns.number=patterns.float+patterns.integer patterns.cnumber=patterns.cfloat+patterns.integer patterns.oct=P("0")*R("07")^1 patterns.octal=patterns.oct patterns.HEX=P("0x")*R("09","AF")^1 patterns.hex=P("0x")*R("09","af")^1 patterns.hexadecimal=P("0x")*R("09","AF","af")^1 patterns.lowercase=R("az") patterns.uppercase=R("AZ") patterns.letter=patterns.lowercase+patterns.uppercase patterns.space=space patterns.tab=P("\t") patterns.spaceortab=patterns.space+patterns.tab patterns.newline=newline patterns.emptyline=newline^1 patterns.equal=P("=") patterns.comma=P(",") patterns.commaspacer=P(",")*spacer^0 patterns.period=P(".") patterns.colon=P(":") patterns.semicolon=P(";") patterns.underscore=P("_") patterns.escaped=escaped patterns.squote=squote patterns.dquote=dquote patterns.nosquote=(escaped+(1-squote))^0 patterns.nodquote=(escaped+(1-dquote))^0 patterns.unsingle=(squote/"")*patterns.nosquote*(squote/"") patterns.undouble=(dquote/"")*patterns.nodquote*(dquote/"") patterns.unquoted=patterns.undouble+patterns.unsingle patterns.unspacer=((patterns.spacer^1)/"")^0 patterns.singlequoted=squote*patterns.nosquote*squote patterns.doublequoted=dquote*patterns.nodquote*dquote patterns.quoted=patterns.doublequoted+patterns.singlequoted patterns.propername=R("AZ","az","__")*R("09","AZ","az","__")^0*P(-1) patterns.somecontent=(anything-newline-space)^1 patterns.beginline=#(1-newline) patterns.longtostring=Cs(whitespace^0/""*nonwhitespace^0*((whitespace^0/" "*(patterns.quoted+nonwhitespace)^1)^0)) local function anywhere(pattern) return P { P(pattern)+1*V(1) } end lpeg.anywhere=anywhere function lpeg.instringchecker(p) p=anywhere(p) return function(str) return lpegmatch(p,str) and true or false end end function lpeg.splitter(pattern,action) return (((1-P(pattern))^1)/action+1)^0 end function lpeg.tsplitter(pattern,action) return Ct((((1-P(pattern))^1)/action+1)^0) end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) local splitter=(single and splitters_s[separator]) or splitters_m[separator] if not splitter then separator=P(separator) local other=C((1-separator)^0) if single then local any=anything splitter=other*(separator*C(any^0)+"") splitters_s[separator]=splitter else splitter=other*(separator*other)^0 splitters_m[separator]=splitter end end return splitter end local function tsplitat(separator) local splitter=splitters_t[separator] if not splitter then splitter=Ct(splitat(separator)) splitters_t[separator]=splitter end return splitter end lpeg.splitat=splitat lpeg.tsplitat=tsplitat function string.splitup(str,separator) if not separator then separator="," end return lpegmatch(splitters_m[separator] or splitat(separator),str) end local cache={} function lpeg.split(separator,str) local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) end function string.split(str,separator) if separator then local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) else return { str } end end local spacing=patterns.spacer^0*newline local empty=spacing*Cc("") local nonempty=Cs((1-spacing)^1)*spacing^-1 local content=(empty+nonempty)^1 patterns.textline=content local linesplitter=tsplitat(newline) patterns.linesplitter=linesplitter function string.splitlines(str) return lpegmatch(linesplitter,str) end local cache={} function lpeg.checkedsplit(separator,str) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end function string.checkedsplit(str,separator) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end local function f2(s) local c1,c2=byte(s,1,2) return c1*64+c2-12416 end local function f3(s) local c1,c2,c3=byte(s,1,3) return (c1*64+c2)*64+c3-925824 end local function f4(s) local c1,c2,c3,c4=byte(s,1,4) return ((c1*64+c2)*64+c3)*64+c4-63447168 end local utf8byte=patterns.utf8one/byte+patterns.utf8two/f2+patterns.utf8three/f3+patterns.utf8four/f4 patterns.utf8byte=utf8byte local cache={} function lpeg.stripper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs(((S(str)^1)/""+1)^0) cache[str]=s end return s else return Cs(((str^1)/""+1)^0) end end local cache={} function lpeg.keeper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs((((1-S(str))^1)/""+1)^0) cache[str]=s end return s else return Cs((((1-str)^1)/""+1)^0) end end function lpeg.frontstripper(str) return (P(str)+P(true))*Cs(anything^0) end function lpeg.endstripper(str) return Cs((1-P(str)*endofstring)^0) end function lpeg.replacer(one,two,makefunction,isutf) local pattern local u=isutf and utf8char or 1 if type(one)=="table" then local no=#one local p=P(false) if no==0 then for k,v in next,one do p=p+P(k)/v end pattern=Cs((p+u)^0) elseif no==1 then local o=one[1] one,two=P(o[1]),o[2] pattern=Cs((one/two+u)^0) else for i=1,no do local o=one[i] p=p+P(o[1])/o[2] end pattern=Cs((p+u)^0) end else pattern=Cs((P(one)/(two or "")+u)^0) end if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end function lpeg.finder(lst,makefunction) local pattern if type(lst)=="table" then pattern=P(false) if #lst==0 then for k,v in next,lst do pattern=pattern+P(k) end else for i=1,#lst do pattern=pattern+P(lst[i]) end end else pattern=P(lst) end pattern=(1-pattern)^0*pattern if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end local splitters_f,splitters_s={},{} function lpeg.firstofsplit(separator) local splitter=splitters_f[separator] if not splitter then separator=P(separator) splitter=C((1-separator)^0) splitters_f[separator]=splitter end return splitter end function lpeg.secondofsplit(separator) local splitter=splitters_s[separator] if not splitter then separator=P(separator) splitter=(1-separator)^0*separator*C(anything^0) splitters_s[separator]=splitter end return splitter end function lpeg.balancer(left,right) left,right=P(left),P(right) return P { left*((1-left-right)+V(1))^0*right } end local nany=utf8char/"" function lpeg.counter(pattern) pattern=Cs((P(pattern)/" "+nany)^0) return function(str) return #lpegmatch(pattern,str) end end utf=utf or (unicode and unicode.utf8) or {} local utfcharacters=utf and utf.characters or string.utfcharacters local utfgmatch=utf and utf.gmatch local utfchar=utf and utf.char lpeg.UP=lpeg.P if utfcharacters then function lpeg.US(str) local p=P(false) for uc in utfcharacters(str) do p=p+P(uc) end return p end elseif utfgmatch then function lpeg.US(str) local p=P(false) for uc in utfgmatch(str,".") do p=p+P(uc) end return p end else function lpeg.US(str) local p=P(false) local f=function(uc) p=p+P(uc) end lpegmatch((utf8char/f)^0,str) return p end end local range=utf8byte*utf8byte+Cc(false) function lpeg.UR(str,more) local first,last if type(str)=="number" then first=str last=more or first else first,last=lpegmatch(range,str) if not last then return P(str) end end if first==last then return P(str) elseif utfchar and (last-first<8) then local p=P(false) for i=first,last do p=p+P(utfchar(i)) end return p else local f=function(b) return b>=first and b<=last end return utf8byte/f end end function lpeg.is_lpeg(p) return p and lpegtype(p)=="pattern" end function lpeg.oneof(list,...) if type(list)~="table" then list={ list,... } end local p=P(list[1]) for l=2,#list do p=p+P(list[l]) end return p end local sort=table.sort local function copyindexed(old) local new={} for i=1,#old do new[i]=old end return new end local function sortedkeys(tab) local keys,s={},0 for key,_ in next,tab do s=s+1 keys[s]=key end sort(keys) return keys end function lpeg.append(list,pp,delayed,checked) local p=pp if #list>0 then local keys=copyindexed(list) sort(keys) for i=#keys,1,-1 do local k=keys[i] if p then p=P(k)+p else p=P(k) end end elseif delayed then local keys=sortedkeys(list) if p then for i=1,#keys,1 do local k=keys[i] local v=list[k] p=P(k)/list+p end else for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)+p else p=P(k) end end if p then p=p/list end end elseif checked then local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then if k==v then p=P(k)+p else p=P(k)/v+p end else if k==v then p=P(k) else p=P(k)/v end end end else local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)/v+p else p=P(k)/v end end end return p end local function make(t) local p local keys=sortedkeys(t) for i=1,#keys do local k=keys[i] local v=t[k] if not p then if next(v) then p=P(k)*make(v) else p=P(k) end else if next(v) then p=p+P(k)*make(v) else p=p+P(k) end end end return p end function lpeg.utfchartabletopattern(list) local tree={} for i=1,#list do local t=tree for c in gmatch(list[i],".") do if not t[c] then t[c]={} end t=t[c] end end return make(tree) end patterns.containseol=lpeg.finder(eol) local function nextstep(n,step,result) local m=n%step local d=floor(n/step) if d>0 then local v=V(tostring(step)) local s=result.start for i=1,d do if s then s=v*s else s=v end end result.start=s end if step>1 and result.start then local v=V(tostring(step/2)) result[tostring(step)]=v*v end if step>0 then return nextstep(m,step/2,result) else return result end end function lpeg.times(pattern,n) return P(nextstep(n,2^16,{ "start",["1"]=pattern })) end local digit=R("09") local period=P(".") local zero=P("0") local trailingzeros=zero^0*-digit local case_1=period*trailingzeros/"" local case_2=period*(digit-trailingzeros)^1*(trailingzeros/"") local number=digit^1*(case_1+case_2) local stripper=Cs((number+1)^0) lpeg.patterns.stripzeros=stripper end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-function"] = package.loaded["l-function"] or true -- original size: 361, stripped down to: 322 if not modules then modules={} end modules ['l-functions']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } functions=functions or {} function functions.dummy() end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-string"] = package.loaded["l-string"] or true -- original size: 5513, stripped down to: 2708 if not modules then modules={} end modules ['l-string']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local string=string local sub,gmatch,format,char,byte,rep,lower=string.sub,string.gmatch,string.format,string.char,string.byte,string.rep,string.lower local lpegmatch,patterns=lpeg.match,lpeg.patterns local P,S,C,Ct,Cc,Cs=lpeg.P,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.Cs local unquoted=patterns.squote*C(patterns.nosquote)*patterns.squote+patterns.dquote*C(patterns.nodquote)*patterns.dquote function string.unquoted(str) return lpegmatch(unquoted,str) or str end function string.quoted(str) return format("%q",str) end function string.count(str,pattern) local n=0 for _ in gmatch(str,pattern) do n=n+1 end return n end function string.limit(str,n,sentinel) if #str>n then sentinel=sentinel or "..." return sub(str,1,(n-#sentinel))..sentinel else return str end end local stripper=patterns.stripper local collapser=patterns.collapser local longtostring=patterns.longtostring function string.strip(str) return lpegmatch(stripper,str) or "" end function string.collapsespaces(str) return lpegmatch(collapser,str) or "" end function string.longtostring(str) return lpegmatch(longtostring,str) or "" end local pattern=P(" ")^0*P(-1) function string.is_empty(str) if str=="" then return true else return lpegmatch(pattern,str) and true or false end end local anything=patterns.anything local allescapes=Cc("%")*S(".-+%?()[]*") local someescapes=Cc("%")*S(".-+%()[]") local matchescapes=Cc(".")*S("*?") local pattern_a=Cs ((allescapes+anything )^0 ) local pattern_b=Cs ((someescapes+matchescapes+anything )^0 ) local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") ) function string.escapedpattern(str,simple) return lpegmatch(simple and pattern_b or pattern_a,str) end function string.topattern(str,lowercase,strict) if str=="" or type(str)~="string" then return ".*" elseif strict then str=lpegmatch(pattern_c,str) else str=lpegmatch(pattern_b,str) end if lowercase then return lower(str) else return str end end function string.valid(str,default) return (type(str)=="string" and str~="" and str) or default or nil end string.itself=function(s) return s end local pattern=Ct(C(1)^0) function string.totable(str) return lpegmatch(pattern,str) end local replacer=lpeg.replacer("@","%%") function string.tformat(fmt,...) return format(lpegmatch(replacer,fmt),...) end string.quote=string.quoted string.unquote=string.unquoted end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-table"] = package.loaded["l-table"] or true -- original size: 44626, stripped down to: 19688 if not modules then modules={} end modules ['l-table']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring,tonumber,ipairs,select=type,next,tostring,tonumber,ipairs,select local table,string=table,string local concat,sort,insert,remove=table.concat,table.sort,table.insert,table.remove local format,lower,dump=string.format,string.lower,string.dump local getmetatable,setmetatable=getmetatable,setmetatable local getinfo=debug.getinfo local lpegmatch,patterns=lpeg.match,lpeg.patterns local floor=math.floor local stripper=patterns.stripper function table.strip(tab) local lst,l={},0 for i=1,#tab do local s=lpegmatch(stripper,tab[i]) or "" if s=="" then else l=l+1 lst[l]=s end end return lst end function table.keys(t) if t then local keys,k={},0 for key,_ in next,t do k=k+1 keys[k]=key end return keys else return {} end end local function compare(a,b) local ta,tb=type(a),type(b) if ta==tb then return a0 then local n=0 for _,v in next,t do n=n+1 end if n==#t then local tt,nt={},0 for i=1,#t do local v=t[i] local tv=type(v) if tv=="number" then nt=nt+1 if hexify then tt[nt]=format("0x%04X",v) else tt[nt]=tostring(v) end elseif tv=="boolean" then nt=nt+1 tt[nt]=tostring(v) elseif tv=="string" then nt=nt+1 tt[nt]=format("%q",v) else tt=nil break end end return tt end end return nil end local propername=patterns.propername local function dummy() end local function do_serialize(root,name,depth,level,indexed) if level>0 then depth=depth.." " if indexed then handle(format("%s{",depth)) else local tn=type(name) if tn=="number" then if hexify then handle(format("%s[0x%04X]={",depth,name)) else handle(format("%s[%s]={",depth,name)) end elseif tn=="string" then if noquotes and not reserved[name] and lpegmatch(propername,name) then handle(format("%s%s={",depth,name)) else handle(format("%s[%q]={",depth,name)) end elseif tn=="boolean" then handle(format("%s[%s]={",depth,tostring(name))) else handle(format("%s{",depth)) end end end if root and next(root) then local first,last=nil,0 if compact then last=#root for k=1,last do if root[k]==nil then last=k-1 break end end if last>0 then first=1 end end local sk=sortedkeys(root) for i=1,#sk do local k=sk[i] local v=root[k] local t,tk=type(v),type(k) if compact and first and tk=="number" and k>=first and k<=last then if t=="number" then if hexify then handle(format("%s 0x%04X,",depth,v)) else handle(format("%s %s,",depth,v)) end elseif t=="string" then if reduce and tonumber(v) then handle(format("%s %s,",depth,v)) else handle(format("%s %q,",depth,v)) end elseif t=="table" then if not next(v) then handle(format("%s {},",depth)) elseif inline then local st=simple_table(v) if st then handle(format("%s { %s },",depth,concat(st,", "))) else do_serialize(v,k,depth,level+1,true) end else do_serialize(v,k,depth,level+1,true) end elseif t=="boolean" then handle(format("%s %s,",depth,tostring(v))) elseif t=="function" then if functions then handle(format('%s load(%q),',depth,dump(v))) else handle(format('%s "function",',depth)) end else handle(format("%s %q,",depth,tostring(v))) end elseif k=="__p__" then if false then handle(format("%s __p__=nil,",depth)) end elseif t=="number" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=0x%04X,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then if hexify then handle(format("%s [%s]=0x%04X,",depth,tostring(k),v)) else handle(format("%s [%s]=%s,",depth,tostring(k),v)) end elseif noquotes and not reserved[k] and lpegmatch(propername,k) then if hexify then handle(format("%s %s=0x%04X,",depth,k,v)) else handle(format("%s %s=%s,",depth,k,v)) end else if hexify then handle(format("%s [%q]=0x%04X,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end end elseif t=="string" then if reduce and tonumber(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,v)) else handle(format("%s [%s]=%q,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,v)) else handle(format("%s [%q]=%q,",depth,k,v)) end end elseif t=="table" then if not next(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]={},",depth,k)) else handle(format("%s [%s]={},",depth,k)) end elseif tk=="boolean" then handle(format("%s [%s]={},",depth,tostring(k))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={},",depth,k)) else handle(format("%s [%q]={},",depth,k)) end elseif inline then local st=simple_table(v) if st then if tk=="number" then if hexify then handle(format("%s [0x%04X]={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%s]={ %s },",depth,k,concat(st,", "))) end elseif tk=="boolean" then handle(format("%s [%s]={ %s },",depth,tostring(k),concat(st,", "))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%q]={ %s },",depth,k,concat(st,", "))) end else do_serialize(v,k,depth,level+1) end else do_serialize(v,k,depth,level+1) end elseif t=="boolean" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,tostring(v))) else handle(format("%s [%s]=%s,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,tostring(v))) else handle(format("%s [%q]=%s,",depth,k,tostring(v))) end elseif t=="function" then if functions then local f=getinfo(v).what=="C" and dump(dummy) or dump(v) if tk=="number" then if hexify then handle(format("%s [0x%04X]=load(%q),",depth,k,f)) else handle(format("%s [%s]=load(%q),",depth,k,f)) end elseif tk=="boolean" then handle(format("%s [%s]=load(%q),",depth,tostring(k),f)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=load(%q),",depth,k,f)) else handle(format("%s [%q]=load(%q),",depth,k,f)) end end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,tostring(v))) else handle(format("%s [%s]=%q,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,tostring(v))) else handle(format("%s [%q]=%q,",depth,k,tostring(v))) end end end end if level>0 then handle(format("%s},",depth)) end end local function serialize(_handle,root,name,specification) local tname=type(name) if type(specification)=="table" then noquotes=specification.noquotes hexify=specification.hexify handle=_handle or specification.handle or print reduce=specification.reduce or false functions=specification.functions compact=specification.compact inline=specification.inline and compact if functions==nil then functions=true end if compact==nil then compact=true end if inline==nil then inline=compact end else noquotes=false hexify=false handle=_handle or print reduce=false compact=true inline=true functions=true end if tname=="string" then if name=="return" then handle("return {") else handle(name.."={") end elseif tname=="number" then if hexify then handle(format("[0x%04X]={",name)) else handle("["..name.."]={") end elseif tname=="boolean" then if name then handle("return {") else handle("{") end else handle("t={") end if root then if getmetatable(root) then local dummy=root._w_h_a_t_e_v_e_r_ root._w_h_a_t_e_v_e_r_=nil end if next(root) then do_serialize(root,name,"",0) end end handle("}") end function table.serialize(root,name,specification) local t,n={},0 local function flush(s) n=n+1 t[n]=s end serialize(flush,root,name,specification) return concat(t,"\n") end table.tohandle=serialize local maxtab=2*1024 function table.tofile(filename,root,name,specification) local f=io.open(filename,'w') if f then if maxtab>1 then local t,n={},0 local function flush(s) n=n+1 t[n]=s if n>maxtab then f:write(concat(t,"\n"),"\n") t,n={},0 end end serialize(flush,root,name,specification) f:write(concat(t,"\n"),"\n") else local function flush(s) f:write(s,"\n") end serialize(flush,root,name,specification) end f:close() io.flush() end end local function flattened(t,f,depth) if f==nil then f={} depth=0xFFFF elseif tonumber(f) then depth=f f={} elseif not depth then depth=0xFFFF end for k,v in next,t do if type(k)~="number" then if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end end for k=1,#t do local v=t[k] if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end return f end table.flattened=flattened local function unnest(t,f) if not f then f={} end for i=1,#t do local v=t[i] if type(v)=="table" then if type(v[1])=="table" then unnest(v,f) else f[#f+1]=v end else f[#f+1]=v end end return f end function table.unnest(t) return unnest(t) end local function are_equal(a,b,n,m) if a and b and #a==#b then n=n or 1 m=m or #a for i=n,m do local ai,bi=a[i],b[i] if ai==bi then elseif type(ai)=="table" and type(bi)=="table" then if not are_equal(ai,bi) then return false end else return false end end return true else return false end end local function identical(a,b) for ka,va in next,a do local vb=b[ka] if va==vb then elseif type(va)=="table" and type(vb)=="table" then if not identical(va,vb) then return false end else return false end end return true end table.identical=identical table.are_equal=are_equal function table.compact(t) if t then for k,v in next,t do if not next(v) then t[k]=nil end end end end function table.contains(t,v) if t then for i=1,#t do if t[i]==v then return i end end end return false end function table.count(t) local n=0 for k,v in next,t do n=n+1 end return n end function table.swapped(t,s) local n={} if s then for k,v in next,s do n[k]=v end end for k,v in next,t do n[v]=k end return n end function table.mirrored(t) local n={} for k,v in next,t do n[v]=k n[k]=v end return n end function table.reversed(t) if t then local tt,tn={},#t if tn>0 then local ttn=0 for i=tn,1,-1 do ttn=ttn+1 tt[ttn]=t[i] end end return tt end end function table.reverse(t) if t then local n=#t for i=1,floor(n/2) do local j=n-i+1 t[i],t[j]=t[j],t[i] end return t end end function table.sequenced(t,sep,simple) if not t then return "" end local n=#t local s={} if n>0 then for i=1,n do s[i]=tostring(t[i]) end else n=0 for k,v in sortedhash(t) do if simple then if v==true then n=n+1 s[n]=k elseif v and v~="" then n=n+1 s[n]=k.."="..tostring(v) end else n=n+1 s[n]=k.."="..tostring(v) end end end return concat(s,sep or " | ") end function table.print(t,...) if type(t)~="table" then print(tostring(t)) else serialize(print,t,...) end end setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end) function table.sub(t,i,j) return { unpack(t,i,j) } end function table.is_empty(t) return not t or not next(t) end function table.has_one_entry(t) return t and not next(t,next(t)) end function table.loweredkeys(t) local l={} for k,v in next,t do l[lower(k)]=v end return l end function table.unique(old) local hash={} local new={} local n=0 for i=1,#old do local oi=old[i] if not hash[oi] then n=n+1 new[n]=oi hash[oi]=true end end return new end function table.sorted(t,...) sort(t,...) return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-io"] = package.loaded["l-io"] or true -- original size: 8799, stripped down to: 6325 if not modules then modules={} end modules ['l-io']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local io=io local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format local concat=table.concat local floor=math.floor local type=type if string.find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator="\\",";" else io.fileseparator,io.pathseparator="/",":" end local function readall(f) return f:read("*all") end local function readall(f) local size=f:seek("end") if size==0 then return "" elseif size<1024*1024 then f:seek("set",0) return f:read('*all') else local done=f:seek("set",0) if size<1024*1024 then step=1024*1024 elseif size>16*1024*1024 then step=16*1024*1024 else step=floor(size/(1024*1024))*1024*1024/8 end local data={} while true do local r=f:read(step) if not r then return concat(data) else data[#data+1]=r end end end end io.readall=readall function io.loaddata(filename,textmode) local f=io.open(filename,(textmode and 'r') or 'rb') if f then local data=readall(f) f:close() if #data>0 then return data end end end function io.savedata(filename,data,joiner) local f=io.open(filename,"wb") if f then if type(data)=="table" then f:write(concat(data,joiner or "")) elseif type(data)=="function" then data(f) else f:write(data or "") end f:close() io.flush() return true else return false end end function io.loadlines(filename,n) local f=io.open(filename,'r') if not f then elseif n then local lines={} for i=1,n do local line=f:read("*lines") if line then lines[#lines+1]=line else break end end f:close() lines=concat(lines,"\n") if #lines>0 then return lines end else local line=f:read("*line") or "" f:close() if #line>0 then return line end end end function io.loadchunk(filename,n) local f=io.open(filename,'rb') if f then local data=f:read(n or 1024) f:close() if #data>0 then return data end end end function io.exists(filename) local f=io.open(filename) if f==nil then return false else f:close() return true end end function io.size(filename) local f=io.open(filename) if f==nil then return 0 else local s=f:seek("end") f:close() return s end end function io.noflines(f) if type(f)=="string" then local f=io.open(filename) if f then local n=f and io.noflines(f) or 0 f:close() return n else return 0 end else local n=0 for _ in f:lines() do n=n+1 end f:seek('set',0) return n end end local nextchar={ [ 4]=function(f) return f:read(1,1,1,1) end, [ 2]=function(f) return f:read(1,1) end, [ 1]=function(f) return f:read(1) end, [-2]=function(f) local a,b=f:read(1,1) return b,a end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) return d,c,b,a end } function io.characters(f,n) if f then return nextchar[n or 1],f end end local nextbyte={ [4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(a),byte(b),byte(c),byte(d) end end, [3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(a),byte(b),byte(c) end end, [2]=function(f) local a,b=f:read(1,1) if b then return byte(a),byte(b) end end, [1]=function (f) local a=f:read(1) if a then return byte(a) end end, [-2]=function (f) local a,b=f:read(1,1) if b then return byte(b),byte(a) end end, [-3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(c),byte(b),byte(a) end end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(d),byte(c),byte(b),byte(a) end end } function io.bytes(f,n) if f then return nextbyte[n or 1],f else return nil,nil end end function io.ask(question,default,options) while true do io.write(question) if options then io.write(format(" [%s]",concat(options,"|"))) end if default then io.write(format(" [%s]",default)) end io.write(format(" ")) io.flush() local answer=io.read() answer=gsub(answer,"^%s*(.*)%s*$","%1") if answer=="" and default then return default elseif not options then return answer else for k=1,#options do if options[k]==answer then return answer end end local pattern="^"..answer for k=1,#options do local v=options[k] if find(v,pattern) then return v end end end end end local function readnumber(f,n,m) if m then f:seek("set",n) n=m end if n==1 then return byte(f:read(1)) elseif n==2 then local a,b=byte(f:read(2),1,2) return 256*a+b elseif n==3 then local a,b,c=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==4 then local a,b,c,d=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==8 then local a,b=readnumber(f,4),readnumber(f,4) return 256*a+b elseif n==12 then local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4) return 256*256*a+256*b+c elseif n==-2 then local b,a=byte(f:read(2),1,2) return 256*a+b elseif n==-3 then local c,b,a=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==-4 then local d,c,b,a=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==-8 then local h,g,f,e,d,c,b,a=byte(f:read(8),1,8) return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h else return 0 end end io.readnumber=readnumber function io.readstring(f,n,m) if m then f:seek("set",n) n=m end local str=gsub(f:read(n),"\000","") return str end if not io.i_limiter then function io.i_limiter() end end if not io.o_limiter then function io.o_limiter() end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-number"] = package.loaded["l-number"] or true -- original size: 4939, stripped down to: 2830 if not modules then modules={} end modules ['l-number']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local tostring,tonumber=tostring,tonumber local format,floor,match,rep=string.format,math.floor,string.match,string.rep local concat,insert=table.concat,table.insert local lpegmatch=lpeg.match number=number or {} local number=number if bit32 then local btest,bor=bit32.btest,bit32.bor function number.bit(p) return 2^(p-1) end number.hasbit=btest number.setbit=bor function number.setbit(x,p) return btest(x,p) and x or x+p end function number.clearbit(x,p) return btest(x,p) and x-p or x end else function number.bit(p) return 2^(p-1) end function number.hasbit(x,p) return x%(p+p)>=p end function number.setbit(x,p) return (x%(p+p)>=p) and x or x+p end function number.clearbit(x,p) return (x%(p+p)>=p) and x-p or x end end if bit32 then local bextract=bit32.extract local t={ "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", } function number.tobitstring(b,m) local n=32 for i=0,31 do local v=bextract(b,i) local k=32-i if v==1 then n=k t[k]="1" else t[k]="0" end end if m then m=33-m*8 if m<1 then m=1 end return concat(t,"",m) elseif n<8 then return concat(t) elseif n<16 then return concat(t,"",9) elseif n<24 then return concat(t,"",17) else return concat(t,"",25) end end else function number.tobitstring(n,m) if n>0 then local t={} while n>0 do insert(t,1,n%2>0 and 1 or 0) n=floor(n/2) end local nn=8-#t%8 if nn>0 and nn<8 then for i=1,nn do insert(t,1,0) end end if m then m=m*8-#t if m>0 then insert(t,1,rep("0",m)) end end return concat(t) elseif m then rep("00000000",m) else return "00000000" end end end function number.valid(str,default) return tonumber(str) or default or nil end function number.toevenhex(n) local s=format("%X",n) if #s%2==0 then return s else return "0"..s end end local one=lpeg.C(1-lpeg.S('')/tonumber)^1 function number.toset(n) return lpegmatch(one,tostring(n)) end local function bits(n,i,...) if n>0 then local m=n%2 local n=floor(n/2) if m>0 then return bits(n,i+1,i,...) else return bits(n,i+1,...) end else return... end end function number.bits(n) return { bits(n,1) } end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-set"] = package.loaded["l-set"] or true -- original size: 1923, stripped down to: 1133 if not modules then modules={} end modules ['l-set']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } set=set or {} local nums={} local tabs={} local concat=table.concat local next,type=next,type set.create=table.tohash function set.tonumber(t) if next(t) then local s="" for k,v in next,t do if v then s=s.." "..k end end local n=nums[s] if not n then n=#tabs+1 tabs[n]=t nums[s]=n end return n else return 0 end end function set.totable(n) if n==0 then return {} else return tabs[n] or {} end end function set.tolist(n) if n==0 or not tabs[n] then return "" else local t,n={},0 for k,v in next,tabs[n] do if v then n=n+1 t[n]=k end end return concat(t," ") end end function set.contains(n,s) if type(n)=="table" then return n[s] elseif n==0 then return false else local t=tabs[n] return t and t[s] end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-os"] = package.loaded["l-os"] or true -- original size: 14017, stripped down to: 8504 if not modules then modules={} end modules ['l-os']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local os=os local date,time=os.date,os.time local find,format,gsub,upper,gmatch=string.find,string.format,string.gsub,string.upper,string.gmatch local concat=table.concat local random,ceil,randomseed=math.random,math.ceil,math.randomseed local rawget,rawset,type,getmetatable,setmetatable,tonumber,tostring=rawget,rawset,type,getmetatable,setmetatable,tonumber,tostring math.initialseed=tonumber(string.sub(string.reverse(tostring(ceil(socket and socket.gettime()*10000 or time()))),1,6)) randomseed(math.initialseed) if not os.__getenv__ then os.__getenv__=os.getenv os.__setenv__=os.setenv if os.env then local osgetenv=os.getenv local ossetenv=os.setenv local osenv=os.env local _=osenv.PATH function os.setenv(k,v) if v==nil then v="" end local K=upper(k) osenv[K]=v if type(v)=="table" then v=concat(v,";") end ossetenv(K,v) end function os.getenv(k) local K=upper(k) local v=osenv[K] or osenv[k] or osgetenv(K) or osgetenv(k) if v=="" then return nil else return v end end else local ossetenv=os.setenv local osgetenv=os.getenv local osenv={} function os.setenv(k,v) if v==nil then v="" end local K=upper(k) osenv[K]=v end function os.getenv(k) local K=upper(k) local v=osenv[K] or osgetenv(K) or osgetenv(k) if v=="" then return nil else return v end end local function __index(t,k) return os.getenv(k) end local function __newindex(t,k,v) os.setenv(k,v) end os.env={} setmetatable(os.env,{ __index=__index,__newindex=__newindex } ) end end local execute,spawn,exec,iopopen,ioflush=os.execute,os.spawn or os.execute,os.exec or os.execute,io.popen,io.flush function os.execute(...) ioflush() return execute(...) end function os.spawn (...) ioflush() return spawn (...) end function os.exec (...) ioflush() return exec (...) end function io.popen (...) ioflush() return iopopen(...) end function os.resultof(command) local handle=io.popen(command,"r") return handle and handle:read("*all") or "" end if not io.fileseparator then if find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin" else io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix" end end os.type=os.type or (io.pathseparator==";" and "windows") or "unix" os.name=os.name or (os.type=="windows" and "mswin" ) or "linux" if os.type=="windows" then os.libsuffix,os.binsuffix,os.binsuffixes='dll','exe',{ 'exe','cmd','bat' } else os.libsuffix,os.binsuffix,os.binsuffixes='so','',{ '' } end local launchers={ windows="start %s", macosx="open %s", unix="$BROWSER %s &> /dev/null &", } function os.launch(str) os.execute(format(launchers[os.name] or launchers.unix,str)) end if not os.times then function os.times() return { utime=os.gettimeofday(), stime=0, cutime=0, cstime=0, } end end os.gettimeofday=os.gettimeofday or os.clock local startuptime=os.gettimeofday() function os.runtime() return os.gettimeofday()-startuptime end os.resolvers=os.resolvers or {} local resolvers=os.resolvers setmetatable(os,{ __index=function(t,k) local r=resolvers[k] return r and r(t,k) or nil end }) local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or "" local function guess() local architecture=os.resultof("uname -m") or "" if architecture~="" then return architecture end architecture=os.getenv("HOSTTYPE") or "" if architecture~="" then return architecture end return os.resultof("echo $HOSTTYPE") or "" end if platform~="" then os.platform=platform elseif os.type=="windows" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("PROCESSOR_ARCHITECTURE") or "" if find(architecture,"AMD64") then platform="mswin-64" else platform="mswin" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="linux" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform="linux-64" elseif find(architecture,"ppc") then platform="linux-ppc" else platform="linux" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="macosx" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("echo $HOSTTYPE") or "" if architecture=="" then platform="osx-intel" elseif find(architecture,"i386") then platform="osx-intel" elseif find(architecture,"x86_64") then platform="osx-64" else platform="osx-ppc" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="sunos" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("uname -m") or "" if find(architecture,"sparc") then platform="solaris-sparc" else platform="solaris-intel" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="freebsd" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("uname -m") or "" if find(architecture,"amd64") then platform="freebsd-amd64" else platform="freebsd" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="kfreebsd" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform="kfreebsd-amd64" else platform="kfreebsd-i386" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end else function os.resolvers.platform(t,k) local platform="linux" os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end end local t={ 8,9,"a","b" } function os.uuid() return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x", random(0xFFFF),random(0xFFFF), random(0x0FFF), t[ceil(random(4))] or 8,random(0x0FFF), random(0xFFFF), random(0xFFFF),random(0xFFFF),random(0xFFFF) ) end local d function os.timezone(delta) d=d or tonumber(tonumber(date("%H")-date("!%H"))) if delta then if d>0 then return format("+%02i:00",d) else return format("-%02i:00",-d) end else return 1 end end local timeformat=format("%%s%s",os.timezone(true)) local dateformat="!%Y-%m-%d %H:%M:%S" function os.fulltime(t,default) t=tonumber(t) or 0 if t>0 then elseif default then return default else t=nil end return format(timeformat,date(dateformat,t)) end local dateformat="%Y-%m-%d %H:%M:%S" function os.localtime(t,default) t=tonumber(t) or 0 if t>0 then elseif default then return default else t=nil end return date(dateformat,t) end function os.converttime(t,default) local t=tonumber(t) if t and t>0 then return date(dateformat,t) else return default or "-" end end local memory={} local function which(filename) local fullname=memory[filename] if fullname==nil then local suffix=file.suffix(filename) local suffixes=suffix=="" and os.binsuffixes or { suffix } for directory in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do local df=file.join(directory,filename) for i=1,#suffixes do local dfs=file.addsuffix(df,suffixes[i]) if io.exists(dfs) then fullname=dfs break end end end if not fullname then fullname=false end memory[filename]=fullname end return fullname end os.which=which os.where=which function os.today() return date("!*t") end function os.now() return date("!%Y-%m-%d %H:%M:%S") end if not os.sleep then local socket=socket function os.sleep(n) if not socket then socket=require("socket") end socket.sleep(n) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-file"] = package.loaded["l-file"] or true -- original size: 17777, stripped down to: 9653 if not modules then modules={} end modules ['l-file']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } file=file or {} local file=file if not lfs then lfs=optionalrequire("lfs") end if not lfs then lfs={ getcurrentdir=function() return "." end, attributes=function() return nil end, isfile=function(name) local f=io.open(name,'rb') if f then f:close() return true end end, isdir=function(name) print("you need to load lfs") return false end } elseif not lfs.isfile then local attributes=lfs.attributes function lfs.isdir(name) return attributes(name,"mode")=="directory" end function lfs.isfile(name) return attributes(name,"mode")=="file" end end local insert,concat=table.insert,table.concat local match,find,gmatch=string.match,string.find,string.gmatch local lpegmatch=lpeg.match local getcurrentdir,attributes=lfs.currentdir,lfs.attributes local checkedsplit=string.checkedsplit local P,R,S,C,Cs,Cp,Cc,Ct=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cp,lpeg.Cc,lpeg.Ct local colon=P(":") local period=P(".") local periods=P("..") local fwslash=P("/") local bwslash=P("\\") local slashes=S("\\/") local noperiod=1-period local noslashes=1-slashes local name=noperiod^1 local suffix=period/""*(1-period-slashes)^1*-1 local pattern=C((1-(slashes^1*noslashes^1*-1))^1)*P(1) local function pathpart(name,default) return name and lpegmatch(pattern,name) or default or "" end local pattern=(noslashes^0*slashes)^1*C(noslashes^1)*-1 local function basename(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes^1)^0*Cs((1-suffix)^1)*suffix^0 local function nameonly(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1 local function suffixonly(name) return name and lpegmatch(pattern,name) or "" end local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("") local function suffixesonly(name) if name then return lpegmatch(pattern,name) else return "" end end file.pathpart=pathpart file.basename=basename file.nameonly=nameonly file.suffixonly=suffixonly file.suffix=suffixonly file.suffixesonly=suffixesonly file.suffixes=suffixesonly file.dirname=pathpart file.extname=suffixonly local drive=C(R("az","AZ"))*colon local path=C((noslashes^0*slashes)^0) local suffix=period*C(P(1-period)^0*P(-1)) local base=C((1-suffix)^0) local rest=C(P(1)^0) drive=drive+Cc("") path=path+Cc("") base=base+Cc("") suffix=suffix+Cc("") local pattern_a=drive*path*base*suffix local pattern_b=path*base*suffix local pattern_c=C(drive*path)*C(base*suffix) local pattern_d=path*rest function file.splitname(str,splitdrive) if not str then elseif splitdrive then return lpegmatch(pattern_a,str) else return lpegmatch(pattern_b,str) end end function file.splitbase(str) if str then return lpegmatch(pattern_d,str) else return "",str end end function file.nametotable(str,splitdrive) if str then local path,drive,subpath,name,base,suffix=lpegmatch(pattern_c,str) if splitdrive then return { path=path, drive=drive, subpath=subpath, name=name, base=base, suffix=suffix, } else return { path=path, name=name, base=base, suffix=suffix, } end end end local pattern=Cs(((period*(1-period-slashes)^1*-1)/""+1)^1) function file.removesuffix(name) return name and lpegmatch(pattern,name) end local suffix=period/""*(1-period-slashes)^1*-1 local pattern=Cs((noslashes^0*slashes^1)^0*((1-suffix)^1))*Cs(suffix) function file.addsuffix(filename,suffix,criterium) if not filename or not suffix or suffix=="" then return filename elseif criterium==true then return filename.."."..suffix elseif not criterium then local n,s=lpegmatch(pattern,filename) if not s or s=="" then return filename.."."..suffix else return filename end else local n,s=lpegmatch(pattern,filename) if s and s~="" then local t=type(criterium) if t=="table" then for i=1,#criterium do if s==criterium[i] then return filename end end elseif t=="string" then if s==criterium then return filename end end end return (n or filename).."."..suffix end end local suffix=period*(1-period-slashes)^1*-1 local pattern=Cs((1-suffix)^0) function file.replacesuffix(name,suffix) if name and suffix and suffix~="" then return lpegmatch(pattern,name).."."..suffix else return name end end local reslasher=lpeg.replacer(P("\\"),"/") function file.reslash(str) return str and lpegmatch(reslasher,str) end function file.is_writable(name) if not name then elseif lfs.isdir(name) then name=name.."/m_t_x_t_e_s_t.tmp" local f=io.open(name,"wb") if f then f:close() os.remove(name) return true end elseif lfs.isfile(name) then local f=io.open(name,"ab") if f then f:close() return true end else local f=io.open(name,"ab") if f then f:close() os.remove(name) return true end end return false end local readable=P("r")*Cc(true) function file.is_readable(name) if name then local a=attributes(name) return a and lpegmatch(readable,a.permissions) or false else return false end end file.isreadable=file.is_readable file.iswritable=file.is_writable function file.size(name) if name then local a=attributes(name) return a and a.size or 0 else return 0 end end function file.splitpath(str,separator) return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator) end function file.joinpath(tab,separator) return tab and concat(tab,separator or io.pathseparator) end local stripper=Cs(P(fwslash)^0/""*reslasher) local isnetwork=fwslash*fwslash*(1-fwslash)+(1-fwslash-colon)^1*colon local isroot=fwslash^1*-1 local hasroot=fwslash^1 local deslasher=lpeg.replacer(S("\\/")^1,"/") function file.join(...) local lst={... } local one=lst[1] if lpegmatch(isnetwork,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) return one.."/"..two elseif lpegmatch(isroot,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) if lpegmatch(hasroot,two) then return two else return "/"..two end elseif one=="" then return lpegmatch(stripper,concat(lst,"/",2)) else return lpegmatch(deslasher,concat(lst,"/")) end end local drivespec=R("az","AZ")^1*colon local anchors=fwslash+drivespec local untouched=periods+(1-period)^1*P(-1) local splitstarter=(Cs(drivespec*(bwslash/"/"+fwslash)^0)+Cc(false))*Ct(lpeg.splitat(S("/\\")^1)) local absolute=fwslash function file.collapsepath(str,anchor) if not str then return end if anchor==true and not lpegmatch(anchors,str) then str=getcurrentdir().."/"..str end if str=="" or str=="." then return "." elseif lpegmatch(untouched,str) then return lpegmatch(reslasher,str) end local starter,oldelements=lpegmatch(splitstarter,str) local newelements={} local i=#oldelements while i>0 do local element=oldelements[i] if element=='.' then elseif element=='..' then local n=i-1 while n>0 do local element=oldelements[n] if element~='..' and element~='.' then oldelements[n]='.' break else n=n-1 end end if n<1 then insert(newelements,1,'..') end elseif element~="" then insert(newelements,1,element) end i=i-1 end if #newelements==0 then return starter or "." elseif starter then return starter..concat(newelements,'/') elseif lpegmatch(absolute,str) then return "/"..concat(newelements,'/') else newelements=concat(newelements,'/') if anchor=="." and find(str,"^%./") then return "./"..newelements else return newelements end end end local validchars=R("az","09","AZ","--","..") local pattern_a=lpeg.replacer(1-validchars) local pattern_a=Cs((validchars+P(1)/"-")^1) local whatever=P("-")^0/"" local pattern_b=Cs(whatever*(1-whatever*-1)^1) function file.robustname(str,strict) if str then str=lpegmatch(pattern_a,str) or str if strict then return lpegmatch(pattern_b,str) or str else return str end end end file.readdata=io.loaddata file.savedata=io.savedata function file.copy(oldname,newname) if oldname and newname then local data=io.loaddata(oldname) if data and data~="" then file.savedata(newname,data) end end end local letter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=period^0*fwslash+letter*colon+letter^1*separator+letter^1*fwslash local rootbased=fwslash+letter*colon lpeg.patterns.qualified=qualified lpeg.patterns.rootbased=rootbased function file.is_qualified_path(filename) return filename and lpegmatch(qualified,filename)~=nil end function file.is_rootbased_path(filename) return filename and lpegmatch(rootbased,filename)~=nil end function file.strip(name,dir) if name then local b,a=match(name,"^(.-)"..dir.."(.*)$") return a~="" and a or name end end function lfs.mkdirs(path) local full="" for sub in gmatch(path,"(/*[^\\/]+)") do full=full..sub lfs.mkdir(full) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-gzip"] = package.loaded["l-gzip"] or true -- original size: 1211, stripped down to: 1002 if not modules then modules={} end modules ['l-gzip']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if not gzip then return end local suffix,suffixes=file.suffix,file.suffixes function gzip.load(filename) local f=io.open(filename,"rb") if not f then elseif suffix(filename)=="gz" then f:close() local g=gzip.open(filename,"rb") if g then local str=g:read("*all") g:close() return str end else local str=f:read("*all") f:close() return str end end function gzip.save(filename,data) if suffix(filename)~="gz" then filename=filename..".gz" end local f=io.open(filename,"wb") if f then local s=zlib.compress(data or "",9,nil,15+16) f:write(s) f:close() return #s end end function gzip.suffix(filename) local suffix,extra=suffixes(filename) local gzipped=extra=="gz" return suffix,gzipped end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-md5"] = package.loaded["l-md5"] or true -- original size: 3760, stripped down to: 2088 if not modules then modules={} end modules ['l-md5']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if not md5 then md5=optionalrequire("md5") end if not md5 then md5={ sum=function(str) print("error: md5 is not loaded (sum ignored)") return str end, sumhexa=function(str) print("error: md5 is not loaded (sumhexa ignored)") return str end, } end local md5,file=md5,file local gsub,format,byte=string.gsub,string.format,string.byte local md5sum=md5.sum local function convert(str,fmt) return (gsub(md5sum(str),".",function(chr) return format(fmt,byte(chr)) end)) end if not md5.HEX then function md5.HEX(str) return convert(str,"%02X") end end if not md5.hex then function md5.hex(str) return convert(str,"%02x") end end if not md5.dec then function md5.dec(str) return convert(str,"%03i") end end function file.needsupdating(oldname,newname,threshold) local oldtime=lfs.attributes(oldname,"modification") if oldtime then local newtime=lfs.attributes(newname,"modification") if not newtime then return true elseif newtime>=oldtime then return false elseif oldtime-newtime<(threshold or 1) then return false else return true end else return false end end file.needs_updating=file.needsupdating function file.syncmtimes(oldname,newname) local oldtime=lfs.attributes(oldname,"modification") if oldtime and lfs.isfile(newname) then lfs.touch(newname,oldtime,oldtime) end end function file.checksum(name) if md5 then local data=io.loaddata(name) if data then return md5.HEX(data) end end return nil end function file.loadchecksum(name) if md5 then local data=io.loaddata(name..".md5") return data and (gsub(data,"%s","")) end return nil end function file.savechecksum(name,checksum) if not checksum then checksum=file.checksum(name) end if checksum then io.savedata(name..".md5",checksum) return checksum end return nil end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-url"] = package.loaded["l-url"] or true -- original size: 11806, stripped down to: 5417 if not modules then modules={} end modules ['l-url']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local char,format,byte=string.char,string.format,string.byte local concat=table.concat local tonumber,type=tonumber,type local P,C,R,S,Cs,Cc,Ct,Cf,Cg,V=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Cf,lpeg.Cg,lpeg.V local lpegmatch,lpegpatterns,replacer=lpeg.match,lpeg.patterns,lpeg.replacer url=url or {} local url=url local tochar=function(s) return char(tonumber(s,16)) end local colon=P(":") local qmark=P("?") local hash=P("#") local slash=P("/") local percent=P("%") local endofstring=P(-1) local hexdigit=R("09","AF","af") local plus=P("+") local nothing=Cc("") local escapedchar=(percent*C(hexdigit*hexdigit))/tochar local escaped=(plus/" ")+escapedchar local noslash=P("/")/"" local schemestr=Cs((escaped+(1-colon-slash-qmark-hash))^2) local authoritystr=Cs((escaped+(1- slash-qmark-hash))^0) local pathstr=Cs((escaped+(1- qmark-hash))^0) local querystr=Cs(((1- hash))^0) local fragmentstr=Cs((escaped+(1- endofstring))^0) local scheme=schemestr*colon+nothing local authority=slash*slash*authoritystr+nothing local path=slash*pathstr+nothing local query=qmark*querystr+nothing local fragment=hash*fragmentstr+nothing local validurl=scheme*authority*path*query*fragment local parser=Ct(validurl) lpegpatterns.url=validurl lpegpatterns.urlsplitter=parser local escapes={} setmetatable(escapes,{ __index=function(t,k) local v=format("%%%02X",byte(k)) t[k]=v return v end }) local escaper=Cs((R("09","AZ","az")^1+P(" ")/"%%20"+S("-./_")^1+P(1)/escapes)^0) local unescaper=Cs((escapedchar+1)^0) lpegpatterns.urlunescaped=escapedchar lpegpatterns.urlescaper=escaper lpegpatterns.urlunescaper=unescaper local function split(str) return (type(str)=="string" and lpegmatch(parser,str)) or str end local isscheme=schemestr*colon*slash*slash local function hasscheme(str) if str then local scheme=lpegmatch(isscheme,str) return scheme~="" and scheme or false else return false end end local rootletter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=P(".")^0*P("/")+rootletter*P(":")+rootletter^1*separator+rootletter^1*P("/") local rootbased=P("/")+rootletter*P(":") local barswapper=replacer("|",":") local backslashswapper=replacer("\\","/") local equal=P("=") local amp=P("&") local key=Cs(((escapedchar+1)-equal )^0) local value=Cs(((escapedchar+1)-amp -endofstring)^0) local splitquery=Cf (Ct("")*P { "sequence", sequence=V("pair")*(amp*V("pair"))^0, pair=Cg(key*equal*value), },rawset) local function hashed(str) if str=="" then return { scheme="invalid", original=str, } end local s=split(str) local rawscheme=s[1] local rawquery=s[4] local somescheme=rawscheme~="" local somequery=rawquery~="" if not somescheme and not somequery then s={ scheme="file", authority="", path=str, query="", fragment="", original=str, noscheme=true, filename=str, } else local authority,path,filename=s[2],s[3] if authority=="" then filename=path elseif path=="" then filename="" else filename=authority.."/"..path end s={ scheme=rawscheme, authority=authority, path=path, query=lpegmatch(unescaper,rawquery), queries=lpegmatch(splitquery,rawquery), fragment=s[5], original=str, noscheme=false, filename=filename, } end return s end url.split=split url.hasscheme=hasscheme url.hashed=hashed function url.addscheme(str,scheme) if hasscheme(str) then return str elseif not scheme then return "file:///"..str else return scheme..":///"..str end end function url.construct(hash) local fullurl,f={},0 local scheme,authority,path,query,fragment=hash.scheme,hash.authority,hash.path,hash.query,hash.fragment if scheme and scheme~="" then f=f+1;fullurl[f]=scheme.."://" end if authority and authority~="" then f=f+1;fullurl[f]=authority end if path and path~="" then f=f+1;fullurl[f]="/"..path end if query and query~="" then f=f+1;fullurl[f]="?"..query end if fragment and fragment~="" then f=f+1;fullurl[f]="#"..fragment end return lpegmatch(escaper,concat(fullurl)) end local pattern=Cs(noslash*R("az","AZ")*(S(":|")/":")*noslash*P(1)^0) function url.filename(filename) local spec=hashed(filename) local path=spec.path return (spec.scheme=="file" and path and lpegmatch(pattern,path)) or filename end local function escapestring(str) return lpegmatch(escaper,str) end url.escape=escapestring function url.query(str) if type(str)=="string" then return lpegmatch(splitquery,str) or "" else return str end end function url.toquery(data) local td=type(data) if td=="string" then return #str and escape(data) or nil elseif td=="table" then if next(data) then local t={} for k,v in next,data do t[#t+1]=format("%s=%s",k,escapestring(v)) end return concat(t,"&") end else end end local pattern=Cs(noslash^0*(1-noslash*P(-1))^0) function url.barepath(path) if not path or path=="" then return "" else return lpegmatch(pattern,path) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-dir"] = package.loaded["l-dir"] or true -- original size: 13738, stripped down to: 8560 if not modules then modules={} end modules ['l-dir']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,select=type,select local find,gmatch,match,gsub=string.find,string.gmatch,string.match,string.gsub local concat,insert,remove,unpack=table.concat,table.insert,table.remove,table.unpack local lpegmatch=lpeg.match local P,S,R,C,Cc,Cs,Ct,Cv,V=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Cv,lpeg.V dir=dir or {} local dir=dir local lfs=lfs local attributes=lfs.attributes local walkdir=lfs.dir local isdir=lfs.isdir local isfile=lfs.isfile local currentdir=lfs.currentdir local chdir=lfs.chdir if not isdir then function isdir(name) local a=attributes(name) return a and a.mode=="directory" end lfs.isdir=isdir end if not isfile then function isfile(name) local a=attributes(name) return a and a.mode=="file" end lfs.isfile=isfile end function dir.current() return (gsub(currentdir(),"\\","/")) end local lfsisdir=isdir local function isdir(path) path=gsub(path,"[/\\]+$","") return lfsisdir(path) end lfs.isdir=isdir local function globpattern(path,patt,recurse,action) if path=="/" then path=path.."." elseif not find(path,"/$") then path=path..'/' end if isdir(path) then for name in walkdir(path) do local full=path..name local mode=attributes(full,'mode') if mode=='file' then if find(full,patt) then action(full) end elseif recurse and (mode=="directory") and (name~='.') and (name~="..") then globpattern(full,patt,recurse,action) end end end end dir.globpattern=globpattern local function collectpattern(path,patt,recurse,result) local ok,scanner result=result or {} if path=="/" then ok,scanner,first=xpcall(function() return walkdir(path..".") end,function() end) else ok,scanner,first=xpcall(function() return walkdir(path) end,function() end) end if ok and type(scanner)=="function" then if not find(path,"/$") then path=path..'/' end for name in scanner,first do local full=path..name local attr=attributes(full) local mode=attr.mode if mode=='file' then if find(full,patt) then result[name]=attr end elseif recurse and (mode=="directory") and (name~='.') and (name~="..") then attr.list=collectpattern(full,patt,recurse) result[name]=attr end end end return result end dir.collectpattern=collectpattern local pattern=Ct { [1]=(C(P(".")+P("/")^1)+C(R("az","AZ")*P(":")*P("/")^0)+Cc("./"))*V(2)*V(3), [2]=C(((1-S("*?/"))^0*P("/"))^0), [3]=C(P(1)^0) } local filter=Cs (( P("**")/".*"+P("*")/"[^/]*"+P("?")/"[^/]"+P(".")/"%%."+P("+")/"%%+"+P("-")/"%%-"+P(1) )^0 ) local function glob(str,t) if type(t)=="function" then if type(str)=="table" then for s=1,#str do glob(str[s],t) end elseif isfile(str) then t(str) else local split=lpegmatch(pattern,str) if split then local root,path,base=split[1],split[2],split[3] local recurse=find(base,"%*%*") local start=root..path local result=lpegmatch(filter,start..base) globpattern(start,result,recurse,t) end end else if type(str)=="table" then local t=t or {} for s=1,#str do glob(str[s],t) end return t elseif isfile(str) then if t then t[#t+1]=str return t else return { str } end else local split=lpegmatch(pattern,str) if split then local t=t or {} local action=action or function(name) t[#t+1]=name end local root,path,base=split[1],split[2],split[3] local recurse=find(base,"%*%*") local start=root..path local result=lpegmatch(filter,start..base) globpattern(start,result,recurse,action) return t else return {} end end end end dir.glob=glob local function globfiles(path,recurse,func,files) if type(func)=="string" then local s=func func=function(name) return find(name,s) end end files=files or {} local noffiles=#files for name in walkdir(path) do if find(name,"^%.") then else local mode=attributes(name,'mode') if mode=="directory" then if recurse then globfiles(path.."/"..name,recurse,func,files) end elseif mode=="file" then if not func or func(name) then noffiles=noffiles+1 files[noffiles]=path.."/"..name end end end end return files end dir.globfiles=globfiles function dir.ls(pattern) return concat(glob(pattern),"\n") end local make_indeed=true local onwindows=os.type=="windows" or find(os.getenv("PATH"),";") if onwindows then function dir.mkdirs(...) local str,pth="","" for i=1,select("#",...) do local s=select(i,...) if s=="" then elseif str=="" then str=s else str=str.."/"..s end end local first,middle,last local drive=false first,middle,last=match(str,"^(//)(//*)(.*)$") if first then else first,last=match(str,"^(//)/*(.-)$") if first then middle,last=match(str,"([^/]+)/+(.-)$") if middle then pth="//"..middle else pth="//"..last last="" end else first,middle,last=match(str,"^([a-zA-Z]:)(/*)(.-)$") if first then pth,drive=first..middle,true else middle,last=match(str,"^(/*)(.-)$") if not middle then last=str end end end end for s in gmatch(last,"[^/]+") do if pth=="" then pth=s elseif drive then pth,drive=pth..s,false else pth=pth.."/"..s end if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end return pth,(isdir(pth)==true) end else function dir.mkdirs(...) local str,pth="","" for i=1,select("#",...) do local s=select(i,...) if s and s~="" then if str~="" then str=str.."/"..s else str=s end end end str=gsub(str,"/+","/") if find(str,"^/") then pth="/" for s in gmatch(str,"[^/]+") do local first=(pth=="/") if first then pth=pth..s else pth=pth.."/"..s end if make_indeed and not first and not isdir(pth) then lfs.mkdir(pth) end end else pth="." for s in gmatch(str,"[^/]+") do pth=pth.."/"..s if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end end return pth,(isdir(pth)==true) end end dir.makedirs=dir.mkdirs if onwindows then function dir.expandname(str) local first,nothing,last=match(str,"^(//)(//*)(.*)$") if first then first=dir.current().."/" end if not first then first,last=match(str,"^(//)/*(.*)$") end if not first then first,last=match(str,"^([a-zA-Z]:)(.*)$") if first and not find(last,"^/") then local d=currentdir() if chdir(first) then first=dir.current() end chdir(d) end end if not first then first,last=dir.current(),str end last=gsub(last,"//","/") last=gsub(last,"/%./","/") last=gsub(last,"^/*","") first=gsub(first,"/*$","") if last=="" or last=="." then return first else return first.."/"..last end end else function dir.expandname(str) if not find(str,"^/") then str=currentdir().."/"..str end str=gsub(str,"//","/") str=gsub(str,"/%./","/") str=gsub(str,"(.)/%.$","%1") return str end end file.expandname=dir.expandname local stack={} function dir.push(newdir) insert(stack,currentdir()) if newdir and newdir~="" then chdir(newdir) end end function dir.pop() local d=remove(stack) if d then chdir(d) end return d end local function found(...) for i=1,select("#",...) do local path=select(i,...) local kind=type(path) if kind=="string" then if isdir(path) then return path end elseif kind=="table" then local path=found(unpack(path)) if path then return path end end end end dir.found=found end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-boolean"] = package.loaded["l-boolean"] or true -- original size: 1781, stripped down to: 1503 if not modules then modules={} end modules ['l-boolean']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber boolean=boolean or {} local boolean=boolean function boolean.tonumber(b) if b then return 1 else return 0 end end function toboolean(str,tolerant) if str==nil then return false elseif str==false then return false elseif str==true then return true elseif str=="true" then return true elseif str=="false" then return false elseif not tolerant then return false elseif str==0 then return false elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end string.toboolean=toboolean function string.booleanstring(str) if str=="0" then return false elseif str=="1" then return true elseif str=="" then return false elseif str=="false" then return false elseif str=="true" then return true elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end function string.is_boolean(str,default) if type(str)=="string" then if str=="true" or str=="yes" or str=="on" or str=="t" then return true elseif str=="false" or str=="no" or str=="off" or str=="f" then return false end end return default end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-unicode"] = package.loaded["l-unicode"] or true -- original size: 26810, stripped down to: 11943 if not modules then modules={} end modules ['l-unicode']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utf=utf or (unicode and unicode.utf8) or {} utf.characters=utf.characters or string.utfcharacters utf.values=utf.values or string.utfvalues local type=type local char,byte,format,sub=string.char,string.byte,string.format,string.sub local concat=table.concat local P,C,R,Cs,Ct,Cmt,Cc,Carg,Cp=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Ct,lpeg.Cmt,lpeg.Cc,lpeg.Carg,lpeg.Cp local lpegmatch,patterns=lpeg.match,lpeg.patterns local bytepairs=string.bytepairs local finder=lpeg.finder local replacer=lpeg.replacer local utfvalues=utf.values local utfgmatch=utf.gmatch local p_utftype=patterns.utftype local p_utfoffset=patterns.utfoffset local p_utf8char=patterns.utf8char local p_utf8byte=patterns.utf8byte local p_utfbom=patterns.utfbom local p_newline=patterns.newline local p_whitespace=patterns.whitespace if not unicode then unicode={ utf=utf } end if not utf.char then local floor,char=math.floor,string.char function utf.char(n) if n<0x80 then return char(n) elseif n<0x800 then return char( 0xC0+floor(n/0x40), 0x80+(n%0x40) ) elseif n<0x10000 then return char( 0xE0+floor(n/0x1000), 0x80+(floor(n/0x40)%0x40), 0x80+(n%0x40) ) elseif n<0x200000 then return char( 0xF0+floor(n/0x40000), 0x80+(floor(n/0x1000)%0x40), 0x80+(floor(n/0x40)%0x40), 0x80+(n%0x40) ) else return "" end end end if not utf.byte then local utf8byte=patterns.utf8byte function utf.byte(c) return lpegmatch(utf8byte,c) end end local utfchar,utfbyte=utf.char,utf.byte function utf.filetype(data) return data and lpegmatch(p_utftype,data) or "unknown" end local toentities=Cs ( ( patterns.utf8one+( patterns.utf8two+patterns.utf8three+patterns.utf8four )/function(s) local b=utfbyte(s) if b<127 then return s else return format("&#%X;",b) end end )^0 ) patterns.toentities=toentities function utf.toentities(str) return lpegmatch(toentities,str) end local one=P(1) local two=C(1)*C(1) local four=C(R(utfchar(0xD8),utfchar(0xFF)))*C(1)*C(1)*C(1) local pattern=P("\254\255")*Cs(( four/function(a,b,c,d) local ab=0xFF*byte(a)+byte(b) local cd=0xFF*byte(c)+byte(d) return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000) end+two/function(a,b) return utfchar(byte(a)*256+byte(b)) end+one )^1 )+P("\255\254")*Cs(( four/function(b,a,d,c) local ab=0xFF*byte(a)+byte(b) local cd=0xFF*byte(c)+byte(d) return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000) end+two/function(b,a) return utfchar(byte(a)*256+byte(b)) end+one )^1 ) function string.toutf(s) return lpegmatch(pattern,s) or s end local validatedutf=Cs ( ( patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four+P(1)/"�" )^0 ) patterns.validatedutf=validatedutf function utf.is_valid(str) return type(str)=="string" and lpegmatch(validatedutf,str) or false end if not utf.len then local n,f=0,1 local utfcharcounter=patterns.utfbom^-1*Cmt ( Cc(1)*patterns.utf8one^1+Cc(2)*patterns.utf8two^1+Cc(3)*patterns.utf8three^1+Cc(4)*patterns.utf8four^1, function(_,t,d) n=n+(t-f)/d f=t return true end )^0 function utf.len(str) n,f=0,1 lpegmatch(utfcharcounter,str or "") return n end end utf.length=utf.len if not utf.sub then local utflength=utf.length local b,e,n,first,last=0,0,0,0,0 local function slide_zero(s,p) n=n+1 if n>=last then e=p-1 else return p end end local function slide_one(s,p) n=n+1 if n==first then b=p end if n>=last then e=p-1 else return p end end local function slide_two(s,p) n=n+1 if n==first then b=p else return true end end local pattern_zero=Cmt(p_utf8char,slide_zero)^0 local pattern_one=Cmt(p_utf8char,slide_one )^0 local pattern_two=Cmt(p_utf8char,slide_two )^0 function utf.sub(str,start,stop) if not start then return str end if start==0 then start=1 end if not stop then if start<0 then local l=utflength(str) start=l+start else start=start-1 end b,n,first=0,0,start lpegmatch(pattern_two,str) if n>=first then return sub(str,b) else return "" end end if start<0 or stop<0 then local l=utf.length(str) if start<0 then start=l+start if start<=0 then start=1 else start=start+1 end end if stop<0 then stop=l+stop if stop==0 then stop=1 else stop=stop+1 end end end if start>stop then return "" elseif start>1 then b,e,n,first,last=0,0,0,start-1,stop lpegmatch(pattern_one,str) if n>=first and e==0 then e=#str end return sub(str,b,e) else b,e,n,last=1,0,0,stop lpegmatch(pattern_zero,str) if e==0 then e=#str end return sub(str,b,e) end end end function utf.remapper(mapping) local pattern=Cs((p_utf8char/mapping)^0) return function(str) if not str or str=="" then return "" else return lpegmatch(pattern,str) end end,pattern end function utf.replacer(t) local r=replacer(t,false,false,true) return function(str) return lpegmatch(r,str) end end function utf.subtituter(t) local f=finder (t) local r=replacer(t,false,false,true) return function(str) local i=lpegmatch(f,str) if not i then return str elseif i>#str then return str else return lpegmatch(r,str) end end end local utflinesplitter=p_utfbom^-1*lpeg.tsplitat(p_newline) local utfcharsplitter_ows=p_utfbom^-1*Ct(C(p_utf8char)^0) local utfcharsplitter_iws=p_utfbom^-1*Ct((p_whitespace^1+C(p_utf8char))^0) local utfcharsplitter_raw=Ct(C(p_utf8char)^0) patterns.utflinesplitter=utflinesplitter function utf.splitlines(str) return lpegmatch(utflinesplitter,str or "") end function utf.split(str,ignorewhitespace) if ignorewhitespace then return lpegmatch(utfcharsplitter_iws,str or "") else return lpegmatch(utfcharsplitter_ows,str or "") end end function utf.totable(str) return lpegmatch(utfcharsplitter_raw,str) end function utf.magic(f) local str=f:read(4) or "" local off=lpegmatch(p_utfoffset,str) if off<4 then f:seek('set',off) end return lpegmatch(p_utftype,str) end local function utf16_to_utf8_be(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,0 for left,right in bytepairs(t[i]) do if right then local now=256*left+right if more>0 then now=(more-0xD800)*0x400+(now-0xDC00)+0x10000 more=0 r=r+1 result[r]=utfchar(now) elseif now>=0xD800 and now<=0xDBFF then more=now else r=r+1 result[r]=utfchar(now) end end end t[i]=concat(result,"",1,r) end return t end local function utf16_to_utf8_le(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,0 for left,right in bytepairs(t[i]) do if right then local now=256*right+left if more>0 then now=(more-0xD800)*0x400+(now-0xDC00)+0x10000 more=0 r=r+1 result[r]=utfchar(now) elseif now>=0xD800 and now<=0xDBFF then more=now else r=r+1 result[r]=utfchar(now) end end end t[i]=concat(result,"",1,r) end return t end local function utf32_to_utf8_be(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,-1 for a,b in bytepairs(t[i]) do if a and b then if more<0 then more=256*256*256*a+256*256*b else r=r+1 result[t]=utfchar(more+256*a+b) more=-1 end else break end end t[i]=concat(result,"",1,r) end return t end local function utf32_to_utf8_le(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,-1 for a,b in bytepairs(t[i]) do if a and b then if more<0 then more=256*b+a else r=r+1 result[t]=utfchar(more+256*256*256*b+256*256*a) more=-1 end else break end end t[i]=concat(result,"",1,r) end return t end utf.utf32_to_utf8_be=utf32_to_utf8_be utf.utf32_to_utf8_le=utf32_to_utf8_le utf.utf16_to_utf8_be=utf16_to_utf8_be utf.utf16_to_utf8_le=utf16_to_utf8_le function utf.utf8_to_utf8(t) return type(t)=="string" and lpegmatch(utflinesplitter,t) or t end function utf.utf16_to_utf8(t,endian) return endian and utf16_to_utf8_be(t) or utf16_to_utf8_le(t) or t end function utf.utf32_to_utf8(t,endian) return endian and utf32_to_utf8_be(t) or utf32_to_utf8_le(t) or t end local function little(c) local b=byte(c) if b<0x10000 then return char(b%256,b/256) else b=b-0x10000 local b1,b2=b/1024+0xD800,b%1024+0xDC00 return char(b1%256,b1/256,b2%256,b2/256) end end local function big(c) local b=byte(c) if b<0x10000 then return char(b/256,b%256) else b=b-0x10000 local b1,b2=b/1024+0xD800,b%1024+0xDC00 return char(b1/256,b1%256,b2/256,b2%256) end end local _,l_remap=utf.remapper(little) local _,b_remap=utf.remapper(big) function utf.utf8_to_utf16(str,littleendian) if littleendian then return char(255,254)..lpegmatch(l_remap,str) else return char(254,255)..lpegmatch(b_remap,str) end end local pattern=Cs ( (p_utf8byte/function(unicode ) return format("0x%04X",unicode) end)*(p_utf8byte*Carg(1)/function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0 ) function utf.tocodes(str,separator) return lpegmatch(pattern,str,1,separator or " ") end function utf.ustring(s) return format("U+%05X",type(s)=="number" and s or utfbyte(s)) end function utf.xstring(s) return format("0x%05X",type(s)=="number" and s or utfbyte(s)) end local p_nany=p_utf8char/"" if utfgmatch then function utf.count(str,what) if type(what)=="string" then local n=0 for _ in utfgmatch(str,what) do n=n+1 end return n else return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str) end end else local cache={} function utf.count(str,what) if type(what)=="string" then local p=cache[what] if not p then p=Cs((P(what)/" "+p_nany)^0) cache[p]=p end return #lpegmatch(p,str) else return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str) end end end if not utf.characters then function utf.characters(str) return gmatch(str,".[\128-\191]*") end string.utfcharacters=utf.characters end if not utf.values then local find=string.find local dummy=function() end function utf.values(str) local n=#str if n==0 then return dummy elseif n==1 then return function() return utfbyte(str) end else local p=1 return function() local b,e=find(str,".[\128-\191]*",p) if b then p=e+1 return utfbyte(sub(str,b,e)) end end end end string.utfvalues=utf.values end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true -- original size: 915, stripped down to: 836 if not modules then modules={} end modules ['l-math']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local floor,sin,cos,tan=math.floor,math.sin,math.cos,math.tan if not math.round then function math.round(x) return floor(x+0.5) end end if not math.div then function math.div(n,m) return floor(n/m) end end if not math.mod then function math.mod(n,m) return n%m end end local pipi=2*math.pi/360 if not math.sind then function math.sind(d) return sin(d*pipi) end function math.cosd(d) return cos(d*pipi) end function math.tand(d) return tan(d*pipi) end end if not math.odd then function math.odd (n) return n%2~=0 end function math.even(n) return n%2==0 end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-str"] = package.loaded["util-str"] or true -- original size: 22834, stripped down to: 12570 if not modules then modules={} end modules ['util-str']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.strings=utilities.strings or {} local strings=utilities.strings local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub local load,dump=load,string.dump local tonumber,type,tostring=tonumber,type,tostring local unpack,concat=table.unpack,table.concat local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc local patterns,lpegmatch=lpeg.patterns,lpeg.match local utfchar,utfbyte=utf.char,utf.byte local loadstripped=_LUAVERSION<5.2 and load or function(str) return load(dump(load(str),true)) end if not number then number={} end local stripper=patterns.stripzeros local function points(n) return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536)) end local function basepoints(n) return (not n or n==0) and "0bp" or lpegmatch(stripper,format("%.5fbp",n*(7200/7227)/65536)) end number.points=points number.basepoints=basepoints local rubish=patterns.spaceortab^0*patterns.newline local anyrubish=patterns.spaceortab+patterns.newline local anything=patterns.anything local stripped=(patterns.spaceortab^1/"")*patterns.newline local leading=rubish^0/"" local trailing=(anyrubish^1*patterns.endofstring)/"" local redundant=rubish^3/"\n" local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0) function strings.collapsecrlf(str) return lpegmatch(pattern,str) end local repeaters={} function strings.newrepeater(str,offset) offset=offset or 0 local s=repeaters[str] if not s then s={} repeaters[str]=s end local t=s[offset] if t then return t end t={} setmetatable(t,{ __index=function(t,k) if not k then return "" end local n=k+offset local s=n>0 and rep(str,n) or "" t[k]=s return s end }) s[offset]=t return t end local extra,tab,start=0,0,4,0 local nspaces=strings.newrepeater(" ") string.nspaces=nspaces local pattern=Carg(1)/function(t) extra,tab,start=0,t or 7,1 end*Cs(( Cp()*patterns.tab/function(position) local current=(position-start+1)+extra local spaces=tab-(current-1)%tab if spaces>0 then extra=extra+spaces-1 return nspaces[spaces] else return "" end end+patterns.newline*Cp()/function(position) extra,start=0,position end+patterns.anything )^1) function strings.tabtospace(str,tab) return lpegmatch(pattern,str,1,tab or 7) end function strings.striplong(str) str=gsub(str,"^%s*","") str=gsub(str,"[\n\r]+ *","\n") return str end function strings.nice(str) str=gsub(str,"[:%-+_]+"," ") return str end local n=0 local sequenced=table.sequenced function string.autodouble(s,sep) if s==nil then return '""' end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ('"'..sequenced(s,sep or ",")..'"') end return ('"'..tostring(s)..'"') end function string.autosingle(s,sep) if s==nil then return "''" end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ("'"..sequenced(s,sep or ",").."'") end return ("'"..tostring(s).."'") end local tracedchars={} string.tracedchars=tracedchars strings.tracers=tracedchars function string.tracedchar(b) if type(b)=="number" then return tracedchars[b] or (utfchar(b).." (U+"..format('%05X',b)..")") else local c=utfbyte(b) return tracedchars[c] or (b.." (U+"..format('%05X',c)..")") end end function number.signed(i) if i>0 then return "+",i else return "-",-i end end local preamble=[[ local type = type local tostring = tostring local tonumber = tonumber local format = string.format local concat = table.concat local signed = number.signed local points = number.points local basepoints = number.basepoints local utfchar = utf.char local utfbyte = utf.byte local lpegmatch = lpeg.match local nspaces = string.nspaces local tracedchar = string.tracedchar local autosingle = string.autosingle local autodouble = string.autodouble local sequenced = table.sequenced ]] local template=[[ %s %s return function(%s) return %s end ]] local arguments={ "a1" } setmetatable(arguments,{ __index=function(t,k) local v=t[k-1]..",a"..k t[k]=v return v end }) local prefix_any=C((S("+- .")+R("09"))^0) local prefix_tab=C((1-R("az","AZ","09","%%"))^0) local format_s=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',a%s)",f,n) else return format("(a%s or '')",n) end end local format_S=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',tostring(a%s))",f,n) else return format("tostring(a%s)",n) end end local format_q=function() n=n+1 return format("(a%s and format('%%q',a%s) or '')",n,n) end local format_Q=function() n=n+1 return format("format('%%q',tostring(a%s))",n) end local format_i=function(f) n=n+1 if f and f~="" then return format("format('%%%si',a%s)",f,n) else return format("a%s",n) end end local format_d=format_i local format_I=function(f) n=n+1 return format("format('%%s%%%si',signed(a%s))",f,n) end local format_f=function(f) n=n+1 return format("format('%%%sf',a%s)",f,n) end local format_g=function(f) n=n+1 return format("format('%%%sg',a%s)",f,n) end local format_G=function(f) n=n+1 return format("format('%%%sG',a%s)",f,n) end local format_e=function(f) n=n+1 return format("format('%%%se',a%s)",f,n) end local format_E=function(f) n=n+1 return format("format('%%%sE',a%s)",f,n) end local format_x=function(f) n=n+1 return format("format('%%%sx',a%s)",f,n) end local format_X=function(f) n=n+1 return format("format('%%%sX',a%s)",f,n) end local format_o=function(f) n=n+1 return format("format('%%%so',a%s)",f,n) end local format_c=function() n=n+1 return format("utfchar(a%s)",n) end local format_C=function() n=n+1 return format("tracedchar(a%s)",n) end local format_r=function(f) n=n+1 return format("format('%%%s.0f',a%s)",f,n) end local format_h=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_H=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_u=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_U=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_p=function() n=n+1 return format("points(a%s)",n) end local format_b=function() n=n+1 return format("basepoints(a%s)",n) end local format_t=function(f) n=n+1 if f and f~="" then return format("concat(a%s,%q)",n,f) else return format("concat(a%s)",n) end end local format_T=function(f) n=n+1 if f and f~="" then return format("sequenced(a%s,%q)",n,f) else return format("sequenced(a%s)",n) end end local format_l=function() n=n+1 return format("(a%s and 'true' or 'false')",n) end local format_L=function() n=n+1 return format("(a%s and 'TRUE' or 'FALSE')",n) end local format_N=function() n=n+1 return format("tostring(tonumber(a%s) or a%s)",n,n) end local format_a=function(f) n=n+1 if f and f~="" then return format("autosingle(a%s,%q)",n,f) else return format("autosingle(a%s)",n) end end local format_A=function(f) n=n+1 if f and f~="" then return format("autodouble(a%s,%q)",n,f) else return format("autodouble(a%s)",n) end end local format_w=function(f) n=n+1 f=tonumber(f) if f then return format("nspaces[%s+a%s]",f,n) else return format("nspaces[a%s]",n) end end local format_W=function(f) return format("nspaces[%s]",tonumber(f) or 0) end local format_rest=function(s) return format("%q",s) end local format_extension=function(extensions,f,name) local extension=extensions[name] or "tostring(%s)" local f=tonumber(f) or 1 if f==0 then return extension elseif f==1 then n=n+1 local a="a"..n return format(extension,a,a) elseif f<0 then local a="a"..(n+f+1) return format(extension,a,a) else local t={} for i=1,f do n=n+1 t[#t+1]="a"..n end return format(extension,unpack(t)) end end local builder=Cs { "start", start=( ( P("%")/""*( V("!") +V("s")+V("q")+V("i")+V("d")+V("f")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o") +V("c")+V("C")+V("S") +V("Q") +V("N") +V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("h") +V("w") +V("W") +V("a") +V("A") +V("*") )+V("*") )*(P(-1)+Carg(1)) )^0, ["s"]=(prefix_any*P("s"))/format_s, ["q"]=(prefix_any*P("q"))/format_q, ["i"]=(prefix_any*P("i"))/format_i, ["d"]=(prefix_any*P("d"))/format_d, ["f"]=(prefix_any*P("f"))/format_f, ["g"]=(prefix_any*P("g"))/format_g, ["G"]=(prefix_any*P("G"))/format_G, ["e"]=(prefix_any*P("e"))/format_e, ["E"]=(prefix_any*P("E"))/format_E, ["x"]=(prefix_any*P("x"))/format_x, ["X"]=(prefix_any*P("X"))/format_X, ["o"]=(prefix_any*P("o"))/format_o, ["S"]=(prefix_any*P("S"))/format_S, ["Q"]=(prefix_any*P("Q"))/format_S, ["N"]=(prefix_any*P("N"))/format_N, ["c"]=(prefix_any*P("c"))/format_c, ["C"]=(prefix_any*P("C"))/format_C, ["r"]=(prefix_any*P("r"))/format_r, ["h"]=(prefix_any*P("h"))/format_h, ["H"]=(prefix_any*P("H"))/format_H, ["u"]=(prefix_any*P("u"))/format_u, ["U"]=(prefix_any*P("U"))/format_U, ["p"]=(prefix_any*P("p"))/format_p, ["b"]=(prefix_any*P("b"))/format_b, ["t"]=(prefix_tab*P("t"))/format_t, ["T"]=(prefix_tab*P("T"))/format_T, ["l"]=(prefix_tab*P("l"))/format_l, ["L"]=(prefix_tab*P("L"))/format_L, ["I"]=(prefix_any*P("I"))/format_I, ["w"]=(prefix_any*P("w"))/format_w, ["W"]=(prefix_any*P("W"))/format_W, ["a"]=(prefix_any*P("a"))/format_a, ["A"]=(prefix_any*P("A"))/format_A, ["*"]=Cs(((1-P("%"))^1+P("%%")/"%%%%")^1)/format_rest, ["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension, } local direct=Cs ( P("%")/""*Cc([[local format = string.format return function(str) return format("%]])*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*Cc([[",str) end]])*P(-1) ) local function make(t,str) local f local p local p=lpegmatch(direct,str) if p then f=loadstripped(p)() else n=0 p=lpegmatch(builder,str,1,"..",t._extensions_) if n>0 then p=format(template,preamble,t._preamble_,arguments[n],p) f=loadstripped(p)() else f=function() return str end end end t[str]=f return f end local function use(t,fmt,...) return t[fmt](...) end strings.formatters={} function strings.formatters.new() local t={ _extensions_={},_preamble_="",_type_="formatter" } setmetatable(t,{ __index=make,__call=use }) return t end local formatters=strings.formatters.new() string.formatters=formatters string.formatter=function(str,...) return formatters[str](...) end local function add(t,name,template,preamble) if type(t)=="table" and t._type_=="formatter" then t._extensions_[name]=template or "%s" if preamble then t._preamble_=preamble.."\n"..t._preamble_ end end end strings.formatters.add=add lpeg.patterns.xmlescape=Cs((P("<")/"<"+P(">")/">"+P("&")/"&"+P('"')/"""+P(1))^0) lpeg.patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0) add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],[[local xmlescape = lpeg.patterns.xmlescape]]) add(formatters,"tex",[[lpegmatch(texescape,%s)]],[[local texescape = lpeg.patterns.texescape]]) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-tab"] = package.loaded["util-tab"] or true -- original size: 14510, stripped down to: 8531 if not modules then modules={} end modules ['util-tab']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.tables=utilities.tables or {} local tables=utilities.tables local format,gmatch,gsub=string.format,string.gmatch,string.gsub local concat,insert,remove=table.concat,table.insert,table.remove local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc local serialize,sortedkeys,sortedpairs=table.serialize,table.sortedkeys,table.sortedpairs local formatters=string.formatters local splitter=lpeg.tsplitat(".") function tables.definetable(target,nofirst,nolast) local composed,shortcut,t=nil,nil,{} local snippets=lpegmatch(splitter,target) for i=1,#snippets-(nolast and 1 or 0) do local name=snippets[i] if composed then composed=shortcut.."."..name shortcut=shortcut.."_"..name t[#t+1]=formatters["local %s = %s if not %s then %s = { } %s = %s end"](shortcut,composed,shortcut,shortcut,composed,shortcut) else composed=name shortcut=name if not nofirst then t[#t+1]=formatters["%s = %s or { }"](composed,composed) end end end if nolast then composed=shortcut.."."..snippets[#snippets] end return concat(t,"\n"),composed end function tables.definedtable(...) local t=_G for i=1,select("#",...) do local li=select(i,...) local tl=t[li] if not tl then tl={} t[li]=tl end t=tl end return t end function tables.accesstable(target,root) local t=root or _G for name in gmatch(target,"([^%.]+)") do t=t[name] if not t then return end end return t end function tables.migratetable(target,v,root) local t=root or _G local names=string.split(target,".") for i=1,#names-1 do local name=names[i] t[name]=t[name] or {} t=t[name] if not t then return end end t[names[#names]]=v end function tables.removevalue(t,value) if value then for i=1,#t do if t[i]==value then remove(t,i) end end end end function tables.insertbeforevalue(t,value,extra) for i=1,#t do if t[i]==extra then remove(t,i) end end for i=1,#t do if t[i]==value then insert(t,i,extra) return end end insert(t,1,extra) end function tables.insertaftervalue(t,value,extra) for i=1,#t do if t[i]==extra then remove(t,i) end end for i=1,#t do if t[i]==value then insert(t,i+1,extra) return end end insert(t,#t+1,extra) end local escape=Cs(Cc('"')*((P('"')/'""'+P(1))^0)*Cc('"')) function table.tocsv(t,specification) if t and #t>0 then local result={} local r={} specification=specification or {} local fields=specification.fields if type(fields)~="string" then fields=sortedkeys(t[1]) end local separator=specification.separator or "," if specification.preamble==true then for f=1,#fields do r[f]=lpegmatch(escape,tostring(fields[f])) end result[1]=concat(r,separator) end for i=1,#t do local ti=t[i] for f=1,#fields do local field=ti[fields[f]] if type(field)=="string" then r[f]=lpegmatch(escape,field) else r[f]=tostring(field) end end result[#result+1]=concat(r,separator) end return concat(result,"\n") else return "" end end local nspaces=utilities.strings.newrepeater(" ") local function toxml(t,d,result,step) for k,v in sortedpairs(t) do local s=nspaces[d] local tk=type(k) local tv=type(v) if tv=="table" then if tk=="number" then result[#result+1]=formatters["%s"](s,k) toxml(v,d+step,result,step) result[#result+1]=formatters["%s"](s,k) else result[#result+1]=formatters["%s<%s>"](s,k) toxml(v,d+step,result,step) result[#result+1]=formatters["%s"](s,k) end elseif tv=="string" then if tk=="number" then result[#result+1]=formatters["%s%!xml!"](s,k,v,k) else result[#result+1]=formatters["%s<%s>%!xml!"](s,k,v,k) end elseif tk=="number" then result[#result+1]=formatters["%s%S"](s,k,v,k) else result[#result+1]=formatters["%s<%s>%S"](s,k,v,k) end end end function table.toxml(t,specification) specification=specification or {} local name=specification.name local noroot=name==false local result=(specification.nobanner or noroot) and {} or { "" } local indent=specification.indent or 0 local spaces=specification.spaces or 1 if noroot then toxml(t,indent,result,spaces) else toxml({ [name or "data"]=t },indent,result,spaces) end return concat(result,"\n") end function tables.encapsulate(core,capsule,protect) if type(capsule)~="table" then protect=true capsule={} end for key,value in next,core do if capsule[key] then print(formatters["\ninvalid %s %a in %a"]("inheritance",key,core)) os.exit() else capsule[key]=value end end if protect then for key,value in next,core do core[key]=nil end setmetatable(core,{ __index=capsule, __newindex=function(t,key,value) if capsule[key] then print(formatters["\ninvalid %s %a' in %a"]("overload",key,core)) os.exit() else rawset(t,key,value) end end } ) end end local function fastserialize(t,r,outer) r[#r+1]="{" local n=#t if n>0 then for i=1,n do local v=t[i] local tv=type(v) if tv=="string" then r[#r+1]=formatters["%q,"](v) elseif tv=="number" then r[#r+1]=formatters["%s,"](v) elseif tv=="table" then fastserialize(v,r) elseif tv=="boolean" then r[#r+1]=formatters["%S,"](v) end end else for k,v in next,t do local tv=type(v) if tv=="string" then r[#r+1]=formatters["[%q]=%q,"](k,v) elseif tv=="number" then r[#r+1]=formatters["[%q]=%s,"](k,v) elseif tv=="table" then r[#r+1]=formatters["[%q]="](k) fastserialize(v,r) elseif tv=="boolean" then r[#r+1]=formatters["[%q]=%S,"](k,v) end end end if outer then r[#r+1]="}" else r[#r+1]="}," end return r end function table.fastserialize(t,prefix) return concat(fastserialize(t,{ prefix or "return" },true)) end function table.deserialize(str) if not str or str=="" then return end local code=load(str) if not code then return end code=code() if not code then return end return code end function table.load(filename,loader) if filename then local t=(loader or io.loaddata)(filename) if t and t~="" then t=load(t) if type(t)=="function" then t=t() if type(t)=="table" then return t end end end end end function table.save(filename,t,n,...) io.savedata(filename,serialize(t,n==nil and true or n,...)) end local function slowdrop(t) local r={} local l={} for i=1,#t do local ti=t[i] local j=0 for k,v in next,ti do j=j+1 l[j]=formatters["%s=%q"](k,v) end r[i]=formatters[" {%t},\n"](l) end return formatters["return {\n%st}"](r) end local function fastdrop(t) local r={ "return {\n" } for i=1,#t do local ti=t[i] r[#r+1]=" {" for k,v in next,ti do r[#r+1]=formatters["%s=%q"](k,v) end r[#r+1]="},\n" end r[#r+1]="}" return concat(r) end function table.drop(t,slow) if #t==0 then return "return { }" elseif slow==true then return slowdrop(t) else return fastdrop(t) end end function table.autokey(t,k) local v={} t[k]=v return v end local selfmapper={ __index=function(t,k) t[k]=k return k end } function table.twowaymapper(t) if not t then t={} else for i=0,#t do local ti=t[i] if ti then local i=tostring(i) t[i]=ti t[ti]=i end end t[""]=t[0] or "" end setmetatable(t,selfmapper) return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-sto"] = package.loaded["util-sto"] or true -- original size: 4432, stripped down to: 3123 if not modules then modules={} end modules ['util-sto']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local setmetatable,getmetatable,type=setmetatable,getmetatable,type utilities=utilities or {} utilities.storage=utilities.storage or {} local storage=utilities.storage function storage.mark(t) if not t then print("\nfatal error: storage cannot be marked\n") os.exit() return end local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m.__storage__=true return t end function storage.allocate(t) t=t or {} local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m.__storage__=true return t end function storage.marked(t) local m=getmetatable(t) return m and m.__storage__ end function storage.checked(t) if not t then report("\nfatal error: storage has not been allocated\n") os.exit() return end return t end function storage.setinitializer(data,initialize) local m=getmetatable(data) or {} m.__index=function(data,k) m.__index=nil initialize() return data[k] end setmetatable(data,m) end local keyisvalue={ __index=function(t,k) t[k]=k return k end } function storage.sparse(t) t=t or {} setmetatable(t,keyisvalue) return t end local function f_empty () return "" end local function f_self (t,k) t[k]=k return k end local function f_table (t,k) local v={} t[k]=v return v end local function f_ignore() end local t_empty={ __index=f_empty } local t_self={ __index=f_self } local t_table={ __index=f_table } local t_ignore={ __newindex=f_ignore } function table.setmetatableindex(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then if f=="empty" then m.__index=f_empty elseif f=="key" then m.__index=f_self elseif f=="table" then m.__index=f_table else m.__index=f end else if f=="empty" then setmetatable(t,t_empty) elseif f=="key" then setmetatable(t,t_self) elseif f=="table" then setmetatable(t,t_table) else setmetatable(t,{ __index=f }) end end return t end function table.setmetatablenewindex(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then if f=="ignore" then m.__newindex=f_ignore else m.__newindex=f end else if f=="ignore" then setmetatable(t,t_ignore) else setmetatable(t,{ __newindex=f }) end end return t end function table.setmetatablecall(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then m.__call=f else setmetatable(t,{ __call=f }) end return t end function table.setmetatablekey(t,key,value) local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m[key]=value return t end function table.getmetatablekey(t,key,value) local m=getmetatable(t) return m and m[key] end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true -- original size: 17827, stripped down to: 12722 if not modules then modules={} end modules ['util-prs']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local lpeg,table,string=lpeg,table,string local P,R,V,S,C,Ct,Cs,Carg,Cc,Cg,Cf,Cp=lpeg.P,lpeg.R,lpeg.V,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cc,lpeg.Cg,lpeg.Cf,lpeg.Cp local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local concat,format,gmatch,find=table.concat,string.format,string.gmatch,string.find local tostring,type,next,rawset=tostring,type,next,rawset utilities=utilities or {} local parsers=utilities.parsers or {} utilities.parsers=parsers local patterns=parsers.patterns or {} parsers.patterns=patterns local setmetatableindex=table.setmetatableindex local sortedhash=table.sortedhash local digit=R("09") local space=P(' ') local equal=P("=") local comma=P(",") local lbrace=P("{") local rbrace=P("}") local lparent=P("(") local rparent=P(")") local period=S(".") local punctuation=S(".,:;") local spacer=lpegpatterns.spacer local whitespace=lpegpatterns.whitespace local newline=lpegpatterns.newline local anything=lpegpatterns.anything local endofstring=lpegpatterns.endofstring local nobrace=1-(lbrace+rbrace ) local noparent=1-(lparent+rparent) local escape,left,right=P("\\"),P('{'),P('}') lpegpatterns.balanced=P { [1]=((escape*(left+right))+(1-(left+right))+V(2))^0, [2]=left*V(1)*right } local nestedbraces=P { lbrace*(nobrace+V(1))^0*rbrace } local nestedparents=P { lparent*(noparent+V(1))^0*rparent } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 lpegpatterns.nestedbraces=nestedbraces lpegpatterns.nestedparents=nestedparents lpegpatterns.nested=nestedbraces lpegpatterns.argument=argument lpegpatterns.content=content local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) local pattern_c=(space+comma)^0*(key*equal*value) local key=C((1-space-equal-comma)^1) local pattern_b=spaces*comma^0*spaces*(key*((spaces*equal*spaces*value)+C(""))) local hash={} local function set(key,value) hash[key]=value end local pattern_a_s=(pattern_a/set)^1 local pattern_b_s=(pattern_b/set)^1 local pattern_c_s=(pattern_c/set)^1 patterns.settings_to_hash_a=pattern_a_s patterns.settings_to_hash_b=pattern_b_s patterns.settings_to_hash_c=pattern_c_s function parsers.make_settings_to_hash_pattern(set,how) if type(str)=="table" then return set elseif how=="strict" then return (pattern_c/set)^1 elseif how=="tolerant" then return (pattern_b/set)^1 else return (pattern_a/set)^1 end end function parsers.settings_to_hash(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_a_s,str) return hash else return {} end end function parsers.settings_to_hash_tolerant(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_b_s,str) return hash else return {} end end function parsers.settings_to_hash_strict(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_c_s,str) return next(hash) and hash else return nil end end local separator=comma*space^0 local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+(1-comma))^0) local pattern=spaces*Ct(value*(separator*value)^0) patterns.settings_to_array=pattern function parsers.settings_to_array(str,strict) if type(str)=="table" then return str elseif not str or str=="" then return {} elseif strict then if find(str,"{") then return lpegmatch(pattern,str) else return { str } end else return lpegmatch(pattern,str) end end local function set(t,v) t[#t+1]=v end local value=P(Carg(1)*value)/set local pattern=value*(separator*value)^0*Carg(1) function parsers.add_settings_to_array(t,str) return lpegmatch(pattern,str,nil,t) end function parsers.hash_to_string(h,separator,yes,no,strict,omit) if h then local t,tn,s={},0,table.sortedkeys(h) omit=omit and table.tohash(omit) for i=1,#s do local key=s[i] if not omit or not omit[key] then local value=h[key] if type(value)=="boolean" then if yes and no then if value then tn=tn+1 t[tn]=key..'='..yes elseif not strict then tn=tn+1 t[tn]=key..'='..no end elseif value or not strict then tn=tn+1 t[tn]=key..'='..tostring(value) end else tn=tn+1 t[tn]=key..'='..value end end end return concat(t,separator or ",") else return "" end end function parsers.array_to_string(a,separator) if a then return concat(a,separator or ",") else return "" end end function parsers.settings_to_set(str,t) t=t or {} for s in gmatch(str,"[^, ]+") do t[s]=true end return t end function parsers.simple_hash_to_string(h,separator) local t,tn={},0 for k,v in sortedhash(h) do if v then tn=tn+1 t[tn]=k end end return concat(t,separator or ",") end local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C(digit^1*lparent*(noparent+nestedparents)^1*rparent)+C((nestedbraces+(1-comma))^1) local pattern_a=spaces*Ct(value*(separator*value)^0) local function repeater(n,str) if not n then return str else local s=lpegmatch(pattern_a,str) if n==1 then return unpack(s) else local t,tn={},0 for i=1,n do for j=1,#s do tn=tn+1 t[tn]=s[j] end end return unpack(t) end end end local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+(C(digit^1)/tonumber*lparent*Cs((noparent+nestedparents)^1)*rparent)/repeater+C((nestedbraces+(1-comma))^1) local pattern_b=spaces*Ct(value*(separator*value)^0) function parsers.settings_to_array_with_repeat(str,expand) if expand then return lpegmatch(pattern_b,str) or {} else return lpegmatch(pattern_a,str) or {} end end local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace local pattern=Ct((space+value)^0) function parsers.arguments_to_table(str) return lpegmatch(pattern,str) end function parsers.getparameters(self,class,parentclass,settings) local sc=self[class] if not sc then sc={} self[class]=sc if parentclass then local sp=self[parentclass] if not sp then sp={} self[parentclass]=sp end setmetatableindex(sc,sp) end end parsers.settings_to_hash(settings,sc) end function parsers.listitem(str) return gmatch(str,"[^, ]+") end local pattern=Cs { "start", start=V("one")+V("two")+V("three"), rest=(Cc(",")*V("thousand"))^0*(P(".")+endofstring)*anything^0, thousand=digit*digit*digit, one=digit*V("rest"), two=digit*digit*V("rest"), three=V("thousand")*V("rest"), } lpegpatterns.splitthousands=pattern function parsers.splitthousands(str) return lpegmatch(pattern,str) or str end local optionalwhitespace=whitespace^0 lpegpatterns.words=Ct((Cs((1-punctuation-whitespace)^1)+anything)^1) lpegpatterns.sentences=Ct((optionalwhitespace*Cs((1-period)^0*period))^1) lpegpatterns.paragraphs=Ct((optionalwhitespace*Cs((whitespace^1*endofstring/""+1-(spacer^0*newline*newline))^1))^1) local dquote=P('"') local equal=P('=') local escape=P('\\') local separator=S(' ,') local key=C((1-equal)^1) local value=dquote*C((1-dquote-escape*dquote)^0)*dquote local pattern=Cf(Ct("")*(Cg(key*equal*value)*separator^0)^1,rawset)^0*P(-1) function parsers.keq_to_hash(str) if str and str~="" then return lpegmatch(pattern,str) else return {} end end local defaultspecification={ separator=",",quote='"' } function parsers.csvsplitter(specification) specification=specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator=specification.separator local quotechar=specification.quote local separator=S(separator~="" and separator or ",") local whatever=C((1-separator-newline)^0) if quotechar and quotechar~="" then local quotedata=nil for chr in gmatch(quotechar,".") do local quotechar=P(chr) local quoteword=quotechar*C((1-quotechar)^0)*quotechar if quotedata then quotedata=quotedata+quoteword else quotedata=quoteword end end whatever=quotedata+whatever end local parser=Ct((Ct(whatever*(separator*whatever)^0)*S("\n\r"))^0 ) return function(data) return lpegmatch(parser,data) end end function parsers.rfc4180splitter(specification) specification=specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator=specification.separator local quotechar=P(specification.quote) local dquotechar=quotechar*quotechar /specification.quote local separator=S(separator~="" and separator or ",") local escaped=quotechar*Cs((dquotechar+(1-quotechar))^0)*quotechar local non_escaped=C((1-quotechar-newline-separator)^1) local field=escaped+non_escaped local record=Ct((field*separator^-1)^1) local headerline=record*Cp() local wholeblob=Ct((newline^-1*record)^0) return function(data,getheader) if getheader then local header,position=lpegmatch(headerline,data) local data=lpegmatch(wholeblob,data,position) return data,header else return lpegmatch(wholeblob,data) end end end local function ranger(first,last,n,action) if not first then elseif last==true then for i=first,n or first do action(i) end elseif last then for i=first,last do action(i) end else action(first) end end local cardinal=lpegpatterns.cardinal/tonumber local spacers=lpegpatterns.spacer^0 local endofstring=lpegpatterns.endofstring local stepper=spacers*(C(cardinal)*(spacers*S(":-")*spacers*(C(cardinal)+Cc(true) )+Cc(false) )*Carg(1)*Carg(2)/ranger*S(", ")^0 )^1 local stepper=spacers*(C(cardinal)*(spacers*S(":-")*spacers*(C(cardinal)+(P("*")+endofstring)*Cc(true) )+Cc(false) )*Carg(1)*Carg(2)/ranger*S(", ")^0 )^1*endofstring function parsers.stepper(str,n,action) if type(n)=="function" then lpegmatch(stepper,str,1,false,n or print) else lpegmatch(stepper,str,1,n,action or print) end end local pattern_math=Cs((P("%")/"\\percent "+P("^")*Cc("{")*lpegpatterns.integer*Cc("}")+P(1))^0) local pattern_text=Cs((P("%")/"\\percent "+(P("^")/"\\high")*Cc("{")*lpegpatterns.integer*Cc("}")+P(1))^0) patterns.unittotex=pattern function parsers.unittotex(str,textmode) return lpegmatch(textmode and pattern_text or pattern_math,str) end local pattern=Cs((P("^")/""*lpegpatterns.integer*Cc("")+P(1))^0) function parsers.unittoxml(str) return lpegmatch(pattern,str) end local cache={} local spaces=lpeg.patterns.space^0 local dummy=function() end table.setmetatableindex(cache,function(t,k) local separator=P(k) local value=(1-separator)^0 local pattern=spaces*C(value)*separator^0*Cp() t[k]=pattern return pattern end) local commalistiterator=cache[","] function utilities.parsers.iterator(str,separator) local n=#str if n==0 then return dummy else local pattern=separator and cache[separator] or commalistiterator local p=1 return function() if p<=n then local s,e=lpegmatch(pattern,str,p) if e then p=e return s end end end end end local function initialize(t,name) local source=t[name] if source then local result={} for k,v in next,t[name] do result[k]=v end return result else return {} end end local function fetch(t,name) return t[name] or {} end function process(result,more) for k,v in next,more do result[k]=v end return result end local name=C((1-S(", "))^1) local parser=(Carg(1)*name/initialize)*(S(", ")^1*(Carg(1)*name/fetch))^0 local merge=Cf(parser,process) function utilities.parsers.mergehashes(hash,list) return lpegmatch(merge,list,1,hash) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-fmt"] = package.loaded["util-fmt"] or true -- original size: 2274, stripped down to: 1781 if not modules then modules={} end modules ['util-fmt']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.formatters=utilities.formatters or {} local formatters=utilities.formatters local concat,format=table.concat,string.format local tostring,type=tostring,type local strip=string.strip local lpegmatch=lpeg.match local stripper=lpeg.patterns.stripzeros function formatters.stripzeros(str) return lpegmatch(stripper,str) end function formatters.formatcolumns(result,between) if result and #result>0 then between=between or " " local widths,numbers={},{} local first=result[1] local n=#first for i=1,n do widths[i]=0 end for i=1,#result do local r=result[i] for j=1,n do local rj=r[j] local tj=type(rj) if tj=="number" then numbers[j]=true end if tj~="string" then rj=tostring(rj) r[j]=rj end local w=#rj if w>widths[j] then widths[j]=w end end end for i=1,n do local w=widths[i] if numbers[i] then if w>80 then widths[i]="%s"..between else widths[i]="%0"..w.."i"..between end else if w>80 then widths[i]="%s"..between elseif w>0 then widths[i]="%-"..w.."s"..between else widths[i]="%s" end end end local template=strip(concat(widths)) for i=1,#result do local str=format(template,unpack(result[i])) result[i]=strip(str) end end return result end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true -- original size: 12365, stripped down to: 8799 if not modules then modules={} end modules ['trac-set']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring=type,next,tostring local concat=table.concat local format,find,lower,gsub,topattern=string.format,string.find,string.lower,string.gsub,string.topattern local is_boolean=string.is_boolean local settings_to_hash=utilities.parsers.settings_to_hash local allocate=utilities.storage.allocate utilities=utilities or {} local utilities=utilities local setters=utilities.setters or {} utilities.setters=setters local data={} local trace_initialize=false function setters.initialize(filename,name,values) local setter=data[name] if setter then frozen=true local data=setter.data if data then for key,newvalue in next,values do local newvalue=is_boolean(newvalue,newvalue) local functions=data[key] if functions then local oldvalue=functions.value if functions.frozen then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"frozen",oldvalue) end elseif #functions>0 and not oldvalue then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"set",newvalue) end for i=1,#functions do functions[i](newvalue) end functions.value=newvalue functions.frozen=functions.frozen or frozen else if trace_initialize then setter.report("%s: %a is %s as %a",filename,key,"kept",oldvalue) end end else functions={ default=newvalue,frozen=frozen } data[key]=functions if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"defaulted",newvalue) end end end return true end end end local function set(t,what,newvalue) local data=t.data if not data.frozen then local done=t.done if type(what)=="string" then what=settings_to_hash(what) end if type(what)~="table" then return end if not done then done={} t.done=done end for w,value in next,what do if value=="" then value=newvalue elseif not value then value=false else value=is_boolean(value,value) end w=topattern(w,true,true) for name,functions in next,data do if done[name] then elseif find(name,w) then done[name]=true for i=1,#functions do functions[i](value) end functions.value=value end end end end end local function reset(t) local data=t.data if not data.frozen then for name,functions in next,data do for i=1,#functions do functions[i](false) end functions.value=false end end end local function enable(t,what) set(t,what,true) end local function disable(t,what) local data=t.data if not what or what=="" then t.done={} reset(t) else set(t,what,false) end end function setters.register(t,what,...) local data=t.data what=lower(what) local functions=data[what] if not functions then functions={} data[what]=functions if trace_initialize then t.report("defining %a",what) end end local default=functions.default for i=1,select("#",...) do local fnc=select(i,...) local typ=type(fnc) if typ=="string" then if trace_initialize then t.report("coupling %a to %a",what,fnc) end local s=fnc fnc=function(value) set(t,s,value) end elseif typ~="function" then fnc=nil end if fnc then functions[#functions+1]=fnc local value=functions.value or default if value~=nil then fnc(value) functions.value=value end end end return false end function setters.enable(t,what) local e=t.enable t.enable,t.done=enable,{} enable(t,what) t.enable,t.done=e,{} end function setters.disable(t,what) local e=t.disable t.disable,t.done=disable,{} disable(t,what) t.disable,t.done=e,{} end function setters.reset(t) t.done={} reset(t) end function setters.list(t) local list=table.sortedkeys(t.data) local user,system={},{} for l=1,#list do local what=list[l] if find(what,"^%*") then system[#system+1]=what else user[#user+1]=what end end return user,system end function setters.show(t) local category=t.name local list=setters.list(t) t.report() for k=1,#list do local name=list[k] local functions=t.data[name] if functions then local value,default,modules=functions.value,functions.default,#functions value=value==nil and "unset" or tostring(value) default=default==nil and "unset" or tostring(default) t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) end end t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) print(format("%-15s : %s\n",setter.name,format(...))) end local function default(setter,name) local d=setter.data[name] return d and d.default end local function value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end function setters.new(name) local setter setter={ data=allocate(), name=name, report=function(...) setters.report (setter,...) end, enable=function(...) enable (setter,...) end, disable=function(...) disable (setter,...) end, register=function(...) register(setter,...) end, list=function(...) list (setter,...) end, show=function(...) show (setter,...) end, default=function(...) return default (setter,...) end, value=function(...) return value (setter,...) end, } data[name]=setter return setter end trackers=setters.new("trackers") directives=setters.new("directives") experiments=setters.new("experiments") local t_enable,t_disable=trackers .enable,trackers .disable local d_enable,d_disable=directives .enable,directives .disable local e_enable,e_disable=experiments.enable,experiments.disable local trace_directives=false local trace_directives=false trackers.register("system.directives",function(v) trace_directives=v end) local trace_experiments=false local trace_experiments=false trackers.register("system.experiments",function(v) trace_experiments=v end) function directives.enable(...) if trace_directives then directives.report("enabling: % t",{...}) end d_enable(...) end function directives.disable(...) if trace_directives then directives.report("disabling: % t",{...}) end d_disable(...) end function experiments.enable(...) if trace_experiments then experiments.report("enabling: % t",{...}) end e_enable(...) end function experiments.disable(...) if trace_experiments then experiments.report("disabling: % t",{...}) end e_disable(...) end directives.register("system.nostatistics",function(v) if statistics then statistics.enable=not v else end end) directives.register("system.nolibraries",function(v) if libraries then libraries=nil else end end) if environment then local engineflags=environment.engineflags if engineflags then local list=engineflags["c:trackers"] or engineflags["trackers"] if type(list)=="string" then setters.initialize("commandline flags","trackers",settings_to_hash(list)) end local list=engineflags["c:directives"] or engineflags["directives"] if type(list)=="string" then setters.initialize("commandline flags","directives",settings_to_hash(list)) end end end if texconfig then local function set(k,v) v=tonumber(v) if v then texconfig[k]=v end end directives.register("luatex.expanddepth",function(v) set("expand_depth",v) end) directives.register("luatex.hashextra",function(v) set("hash_extra",v) end) directives.register("luatex.nestsize",function(v) set("nest_size",v) end) directives.register("luatex.maxinopen",function(v) set("max_in_open",v) end) directives.register("luatex.maxprintline",function(v) set("max_print_line",v) end) directives.register("luatex.maxstrings",function(v) set("max_strings",v) end) directives.register("luatex.paramsize",function(v) set("param_size",v) end) directives.register("luatex.savesize",function(v) set("save_size",v) end) directives.register("luatex.stacksize",function(v) set("stack_size",v) end) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-log"] = package.loaded["trac-log"] or true -- original size: 21914, stripped down to: 14287 if not modules then modules={} end modules ['trac-log']={ version=1.001, comment="companion to trac-log.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local write_nl,write=texio and texio.write_nl or print,texio and texio.write or io.write local format,gmatch,find=string.format,string.gmatch,string.find local concat,insert,remove=table.concat,table.insert,table.remove local topattern=string.topattern local texcount=tex and tex.count local next,type,select=next,type,select local utfchar=utf.char local setmetatableindex=table.setmetatableindex local formatters=string.formatters logs=logs or {} local logs=logs local moreinfo=[[ More information about ConTeXt and the tools that come with it can be found at: ]].."\n"..[[ maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net wiki : http://contextgarden.net ]] utilities.strings.formatters.add ( formatters,"unichr", [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] ) utilities.strings.formatters.add ( formatters,"chruni", [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] ) local function ignore() end setmetatableindex(logs,function(t,k) t[k]=ignore;return ignore end) local report,subreport,status,settarget,setformats,settranslations local direct,subdirect,writer,pushtarget,poptarget if tex and (tex.jobname or tex.formatname) then local valueiskey={ __index=function(t,k) t[k]=k return k end } local target="term and log" logs.flush=io.flush local formats={} setmetatable(formats,valueiskey) local translations={} setmetatable(translations,valueiskey) writer=function(...) write_nl(target,...) end newline=function() write_nl(target,"\n") end local f_one=formatters["%-15s > %s\n"] local f_two=formatters["%-15s >\n"] report=function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local f_one=formatters["%-15s > %s"] local f_two=formatters["%-15s >"] direct=function(a,b,c,...) if c then return f_one(translations[a],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],formats[b]) elseif a then return f_two(translations[a]) else return "" end end local f_one=formatters["%-15s > %s > %s\n"] local f_two=formatters["%-15s > %s >\n"] subreport=function(a,s,b,c,...) if c then write_nl(target,f_one(translations[a],translations[s],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],translations[s],formats[b])) elseif a then write_nl(target,f_two(translations[a],translations[s])) else write_nl(target,"\n") end end local f_one=formatters["%-15s > %s > %s"] local f_two=formatters["%-15s > %s >"] subdirect=function(a,s,b,c,...) if c then return f_one(translations[a],translations[s],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],translations[s],formats[b]) elseif a then return f_two(translations[a],translations[s]) else return "" end end local f_one=formatters["%-15s : %s\n"] local f_two=formatters["%-15s :\n"] status=function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local targets={ logfile="log", log="log", file="log", console="term", terminal="term", both="term and log", } settarget=function(whereto) target=targets[whereto or "both"] or targets.both if target=="term" or target=="term and log" then logs.flush=io.flush else logs.flush=ignore end end local stack={} pushtarget=function(newtarget) insert(stack,target) settarget(newtarget) end poptarget=function() if #stack>0 then settarget(remove(stack)) end end setformats=function(f) formats=f end settranslations=function(t) translations=t end else logs.flush=ignore writer=write_nl newline=function() write_nl("\n") end local f_one=formatters["%-15s | %s"] local f_two=formatters["%-15s |"] report=function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("") end end local f_one=formatters["%-15s | %s | %s"] local f_two=formatters["%-15s | %s |"] subreport=function(a,sub,b,c,...) if c then write_nl(f_one(a,sub,formatters[b](c,...))) elseif b then write_nl(f_one(a,sub,b)) elseif a then write_nl(f_two(a,sub)) else write_nl("") end end local f_one=formatters["%-15s : %s\n"] local f_two=formatters["%-15s :\n"] status=function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("\n") end end direct=ignore subdirect=ignore settarget=ignore pushtarget=ignore poptarget=ignore setformats=ignore settranslations=ignore end logs.report=report logs.subreport=subreport logs.status=status logs.settarget=settarget logs.pushtarget=pushtarget logs.poptarget=poptarget logs.setformats=setformats logs.settranslations=settranslations logs.direct=direct logs.subdirect=subdirect logs.writer=writer logs.newline=newline local data,states={},nil function logs.reporter(category,subcategory) local logger=data[category] if not logger then local state=false if states==true then state=true elseif type(states)=="table" then for c,_ in next,states do if find(category,c) then state=true break end end end logger={ reporters={}, state=state, } data[category]=logger end local reporter=logger.reporters[subcategory or "default"] if not reporter then if subcategory then reporter=function(...) if not logger.state then subreport(category,subcategory,...) end end logger.reporters[subcategory]=reporter else local tag=category reporter=function(...) if not logger.state then report(category,...) end end logger.reporters.default=reporter end end return reporter end logs.new=logs.reporter local ctxreport=logs.writer function logs.setmessenger(m) ctxreport=m end function logs.messenger(category,subcategory) if subcategory then return function(...) ctxreport(subdirect(category,subcategory,...)) end else return function(...) ctxreport(direct(category,...)) end end end local function setblocked(category,value) if category==true then category,value="*",true elseif category==false then category,value="*",false elseif value==nil then value=true end if category=="*" then states=value for k,v in next,data do v.state=value end else states=utilities.parsers.settings_to_hash(category) for c,_ in next,states do if data[c] then v.state=value else c=topattern(c,true,true) for k,v in next,data do if find(k,c) then v.state=value end end end end end end function logs.disable(category,value) setblocked(category,value==nil and true or value) end function logs.enable(category) setblocked(category,false) end function logs.categories() return table.sortedkeys(data) end function logs.show() local n,c,s,max=0,0,0,0 for category,v in table.sortedpairs(data) do n=n+1 local state=v.state local reporters=v.reporters local nc=#category if nc>c then c=nc end for subcategory,_ in next,reporters do local ns=#subcategory if ns>c then s=ns end local m=nc+ns if m>max then max=m end end local subcategories=concat(table.sortedkeys(reporters),", ") if state==true then state="disabled" elseif state==false then state="enabled" else state="unknown" end report("logging","category %a, subcategories %a, state %a",category,subcategories,state) end report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) end local delayed_reporters={} setmetatableindex(delayed_reporters,function(t,k) local v=logs.reporter(k.name) t[k]=v return v end) function utilities.setters.report(setter,...) delayed_reporters[setter](...) end directives.register("logs.blocked",function(v) setblocked(v,true) end) directives.register("logs.target",function(v) settarget(v) end) local report_pages=logs.reporter("pages") local real,user,sub function logs.start_page_number() real,user,sub=texcount.realpageno,texcount.userpageno,texcount.subpageno end local timing=false local starttime=nil local lasttime=nil trackers.register("pages.timing",function(v) starttime=os.clock() timing=true end) function logs.stop_page_number() if timing then local elapsed,average local stoptime=os.clock() if not lasttime or real<2 then elapsed=stoptime average=stoptime starttime=stoptime else elapsed=stoptime-lasttime average=(stoptime-starttime)/(real-1) end lasttime=stoptime if real<=0 then report_pages("flushing page, time %0.04f / %0.04f",elapsed,average) elseif user<=0 then report_pages("flushing realpage %s, time %0.04f / %0.04f",real,elapsed,average) elseif sub<=0 then report_pages("flushing realpage %s, userpage %s, time %0.04f / %0.04f",real,user,elapsed,average) else report_pages("flushing realpage %s, userpage %s, subpage %s, time %0.04f / %0.04f",real,user,sub,elapsed,average) end else if real<=0 then report_pages("flushing page") elseif user<=0 then report_pages("flushing realpage %s",real) elseif sub<=0 then report_pages("flushing realpage %s, userpage %s",real,user) else report_pages("flushing realpage %s, userpage %s, subpage %s",real,user,sub) end end logs.flush() end local report_files=logs.reporter("files") local nesting=0 local verbose=false local hasscheme=url.hasscheme function logs.show_open(name) end function logs.show_close(name) end function logs.show_load(name) end local simple=logs.reporter("comment") logs.simple=simple logs.simpleline=simple function logs.setprogram () end function logs.extendbanner() end function logs.reportlines () end function logs.reportbanner() end function logs.reportline () end function logs.simplelines () end function logs.help () end local Carg,C,lpegmatch=lpeg.Carg,lpeg.C,lpeg.match local p_newline=lpeg.patterns.newline local linewise=( Carg(1)*C((1-p_newline)^1)/function(t,s) t.report(s) end+Carg(1)*p_newline^2/function(t) t.report() end+p_newline )^1 local function reportlines(t,str) if str then lpegmatch(linewise,str,1,t) end end local function reportbanner(t) local banner=t.banner if banner then t.report(banner) t.report() end end local function reportversion(t) local banner=t.banner if banner then t.report(banner) end end local function reporthelp(t,...) local helpinfo=t.helpinfo if type(helpinfo)=="string" then reportlines(t,helpinfo) elseif type(helpinfo)=="table" then for i=1,select("#",...) do reportlines(t,t.helpinfo[select(i,...)]) if i %s => %s => %s\r"](os.date("%d/%m/%y %H:%m:%S"),process,jobname,category,format(...)) for i=1,10 do local f=io.open(whereto,"a") if f then f:write(message) f:close() break else sleep(0.1) end end end local report_system=logs.reporter("system","logs") function logs.obsolete(old,new) local o=loadstring("return "..new)() if type(o)=="function" then return function(...) report_system("function %a is obsolete, use %a",old,new) loadstring(old.."="..new.." return "..old)()(...) end elseif type(o)=="table" then local t,m={},{} m.__index=function(t,k) report_system("table %a is obsolete, use %a",old,new) m.__index,m.__newindex=o,o return o[k] end m.__newindex=function(t,k,v) report_system("table %a is obsolete, use %a",old,new) m.__index,m.__newindex=o,o o[k]=v end if libraries then libraries.obsolete[old]=t end setmetatable(t,m) return t end end if utilities then utilities.report=report_system end if tex and tex.error then function logs.texerrormessage(...) tex.error(format(...),{}) end else function logs.texerrormessage(...) print(format(...)) end end io.stdout:setvbuf('no') io.stderr:setvbuf('no') if package.helpers.report then package.helpers.report=logs.reporter("package loader") end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-inf"] = package.loaded["trac-inf"] or true -- original size: 5678, stripped down to: 4448 if not modules then modules={} end modules ['trac-inf']={ version=1.001, comment="companion to trac-inf.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber local format,lower=string.format,string.lower local concat=table.concat local clock=os.gettimeofday or os.clock statistics=statistics or {} local statistics=statistics statistics.enable=true statistics.threshold=0.01 local statusinfo,n,registered,timers={},0,{},{} table.setmetatableindex(timers,function(t,k) local v={ timing=0,loadtime=0 } t[k]=v return v end) local function hastiming(instance) return instance and timers[instance] end local function resettiming(instance) timers[instance or "notimer"]={ timing=0,loadtime=0 } end local function starttiming(instance) local timer=timers[instance or "notimer"] local it=timer.timing or 0 if it==0 then timer.starttime=clock() if not timer.loadtime then timer.loadtime=0 end end timer.timing=it+1 end local function stoptiming(instance) local timer=timers[instance or "notimer"] local it=timer.timing if it>1 then timer.timing=it-1 else local starttime=timer.starttime if starttime then local stoptime=clock() local loadtime=stoptime-starttime timer.stoptime=stoptime timer.loadtime=timer.loadtime+loadtime timer.timing=0 return loadtime end end return 0 end local function elapsed(instance) if type(instance)=="number" then return instance or 0 else local timer=timers[instance or "notimer"] return timer and timer.loadtime or 0 end end local function elapsedtime(instance) return format("%0.3f",elapsed(instance)) end local function elapsedindeed(instance) return elapsed(instance)>statistics.threshold end local function elapsedseconds(instance,rest) if elapsedindeed(instance) then return format("%0.3f seconds %s",elapsed(instance),rest or "") end end statistics.hastiming=hastiming statistics.resettiming=resettiming statistics.starttiming=starttiming statistics.stoptiming=stoptiming statistics.elapsed=elapsed statistics.elapsedtime=elapsedtime statistics.elapsedindeed=elapsedindeed statistics.elapsedseconds=elapsedseconds function statistics.register(tag,fnc) if statistics.enable and type(fnc)=="function" then local rt=registered[tag] or (#statusinfo+1) statusinfo[rt]={ tag,fnc } registered[tag]=rt if #tag>n then n=#tag end end end local report=logs.reporter("mkiv lua stats") function statistics.show() if statistics.enable then local register=statistics.register register("luatex banner",function() return lower(status.banner) end) register("control sequences",function() return format("%s of %s + %s",status.cs_count,status.hash_size,status.hash_extra) end) register("callbacks",function() local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0 return format("%s direct, %s indirect, %s total",total-indirect,indirect,total) end) if jit then local status={ jit.status() } if status[1] then register("luajit status",function() return concat(status," ",2) end) end end register("current memory usage",statistics.memused) register("runtime",statistics.runtime) logs.newline() for i=1,#statusinfo do local s=statusinfo[i] local r=s[2]() if r then report("%s: %s",s[1],r) end end statistics.enable=false end end function statistics.memused() local round=math.round or math.floor return format("%s MB (ctx: %s MB)",round(collectgarbage("count")/1000),round(status.luastate_bytes/1000000)) end starttiming(statistics) function statistics.formatruntime(runtime) return format("%s seconds",runtime) end function statistics.runtime() stoptiming(statistics) return statistics.formatruntime(elapsedtime(statistics)) end local report=logs.reporter("system") function statistics.timed(action) starttiming("run") action() stoptiming("run") report("total runtime: %s",elapsedtime("run")) end commands=commands or {} function commands.resettimer(name) resettiming(name or "whatever") starttiming(name or "whatever") end function commands.elapsedtime(name) stoptiming(name or "whatever") context(elapsedtime(name or "whatever")) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-pro"] = package.loaded["trac-pro"] or true -- original size: 5773, stripped down to: 3453 if not modules then modules={} end modules ['trac-pro']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local getmetatable,setmetatable,rawset,type=getmetatable,setmetatable,rawset,type local trace_namespaces=false trackers.register("system.namespaces",function(v) trace_namespaces=v end) local report_system=logs.reporter("system","protection") namespaces=namespaces or {} local namespaces=namespaces local registered={} local function report_index(k,name) if trace_namespaces then report_system("reference to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("reference to %a in protected namespace %a",k,name) end end local function report_newindex(k,name) if trace_namespaces then report_system("assignment to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("assignment to %a in protected namespace %a",k,name) end end local function register(name) local data=name=="global" and _G or _G[name] if not data then return end registered[name]=data local m=getmetatable(data) if not m then m={} setmetatable(data,m) end local index,newindex={},{} m.__saved__index=m.__index m.__no__index=function(t,k) if not index[k] then index[k]=true report_index(k,name) end return nil end m.__saved__newindex=m.__newindex m.__no__newindex=function(t,k,v) if not newindex[k] then newindex[k]=true report_newindex(k,name) end rawset(t,k,v) end m.__protection__depth=0 end local function private(name) local data=registered[name] if not data then data=_G[name] if not data then data={} _G[name]=data end register(name) end return data end local function protect(name) local data=registered[name] if not data then return end local m=getmetatable(data) local pd=m.__protection__depth if pd>0 then m.__protection__depth=pd+1 else m.__save_d_index,m.__saved__newindex=m.__index,m.__newindex m.__index,m.__newindex=m.__no__index,m.__no__newindex m.__protection__depth=1 end end local function unprotect(name) local data=registered[name] if not data then return end local m=getmetatable(data) local pd=m.__protection__depth if pd>1 then m.__protection__depth=pd-1 else m.__index,m.__newindex=m.__saved__index,m.__saved__newindex m.__protection__depth=0 end end local function protectall() for name,_ in next,registered do if name~="global" then protect(name) end end end local function unprotectall() for name,_ in next,registered do if name~="global" then unprotect(name) end end end namespaces.register=register namespaces.private=private namespaces.protect=protect namespaces.unprotect=unprotect namespaces.protectall=protectall namespaces.unprotectall=unprotectall namespaces.private("namespaces") registered={} register("global") directives.register("system.protect",function(v) if v then protectall() else unprotectall() end end) directives.register("system.checkglobals",function(v) if v then report_system("enabling global namespace guard") protect("global") else report_system("disabling global namespace guard") unprotect("global") end end) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-lua"] = package.loaded["util-lua"] or true -- original size: 12575, stripped down to: 8700 if not modules then modules={} end modules ['util-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", comment="the strip code is written by Peter Cawley", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local rep,sub,byte,dump,format=string.rep,string.sub,string.byte,string.dump,string.format local load,loadfile,type=load,loadfile,type utilities=utilities or {} utilities.lua=utilities.lua or {} local luautilities=utilities.lua local report_lua=logs.reporter("system","lua") local tracestripping=false local forcestupidcompile=true luautilities.stripcode=true luautilities.alwaysstripcode=false luautilities.nofstrippedchunks=0 luautilities.nofstrippedbytes=0 local strippedchunks={} luautilities.strippedchunks=strippedchunks luautilities.suffixes={ tma="tma", tmc=jit and "tmb" or "tmc", lua="lua", luc=jit and "lub" or "luc", lui="lui", luv="luv", luj="luj", tua="tua", tuc="tuc", } if jit or status.luatex_version>=74 then local function register(name) if tracestripping then report_lua("stripped bytecode from %a",name or "unknown") end strippedchunks[#strippedchunks+1]=name luautilities.nofstrippedchunks=luautilities.nofstrippedchunks+1 end local function stupidcompile(luafile,lucfile,strip) local code=io.loaddata(luafile) if code and code~="" then code=load(code) if code then code=dump(code,strip and luautilities.stripcode or luautilities.alwaysstripcode) if code and code~="" then register(name) io.savedata(lucfile,code) return true,0 end else report_lua("fatal error %a in file %a",1,luafile) end else report_lua("fatal error %a in file %a",2,luafile) end return false,0 end function luautilities.loadedluacode(fullname,forcestrip,name) name=name or fullname local code=environment.loadpreprocessedfile and environment.loadpreprocessedfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip)=="function" then forcestrip=forcestrip(fullname) end if forcestrip or luautilities.alwaysstripcode then register(name) return load(dump(code,true)),0 else return code,0 end elseif luautilities.alwaysstripcode then register(name) return load(dump(code,true)),0 else return code,0 end end function luautilities.strippedloadstring(code,forcestrip,name) if forcestrip and luautilities.stripcode or luautilities.alwaysstripcode then code=load(code) if not code then report_lua("fatal error %a in file %a",3,name) end register(name) code=dump(code,true) end return load(code),0 end function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done=stupidcompile(luafile,lucfile,strip~=false) if done then report_lua("dumping %a into %a stripped",luafile,lucfile) if cleanup==true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end end return done end function luautilities.loadstripped(...) local l=load(...) if l then return load(dump(l,true)) end end else local function register(name,before,after) local delta=before-after if tracestripping then report_lua("bytecodes stripped from %a, # before %s, # after %s, delta %s",name,before,after,delta) end strippedchunks[#strippedchunks+1]=name luautilities.nofstrippedchunks=luautilities.nofstrippedchunks+1 luautilities.nofstrippedbytes=luautilities.nofstrippedbytes+delta return delta end local strip_code_pc if _MAJORVERSION==5 and _MINORVERSION==1 then strip_code_pc=function(dump,name) local before=#dump local version,format,endian,int,size,ins,num=byte(dump,5,11) local subint if endian==1 then subint=function(dump,i,l) local val=0 for n=l,1,-1 do val=val*256+byte(dump,i+n-1) end return val,i+l end else subint=function(dump,i,l) local val=0 for n=1,l,1 do val=val*256+byte(dump,i+n-1) end return val,i+l end end local strip_function strip_function=function(dump) local count,offset=subint(dump,1,size) local stripped,dirty=rep("\0",size),offset+count offset=offset+count+int*2+4 offset=offset+int+subint(dump,offset,int)*ins count,offset=subint(dump,offset,int) for n=1,count do local t t,offset=subint(dump,offset,1) if t==1 then offset=offset+1 elseif t==4 then offset=offset+size+subint(dump,offset,size) elseif t==3 then offset=offset+num end end count,offset=subint(dump,offset,int) stripped=stripped..sub(dump,dirty,offset-1) for n=1,count do local proto,off=strip_function(sub(dump,offset,-1)) stripped,offset=stripped..proto,offset+off-1 end offset=offset+subint(dump,offset,int)*int+int count,offset=subint(dump,offset,int) for n=1,count do offset=offset+subint(dump,offset,size)+size+int*2 end count,offset=subint(dump,offset,int) for n=1,count do offset=offset+subint(dump,offset,size)+size end stripped=stripped..rep("\0",int*3) return stripped,offset end dump=sub(dump,1,12)..strip_function(sub(dump,13,-1)) local after=#dump local delta=register(name,before,after) return dump,delta end else strip_code_pc=function(dump,name) return dump,0 end end function luautilities.loadedluacode(fullname,forcestrip,name) local code=environment.loadpreprocessedfile and environment.preprocessedloadfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip)=="function" then forcestrip=forcestrip(fullname) end if forcestrip then local code,n=strip_code_pc(dump(code),name) return load(code),n elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code,0 end elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code,0 end end function luautilities.strippedloadstring(code,forcestrip,name) local n=0 if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then code=load(code) if not code then report_lua("fatal error in file %a",name) end code,n=strip_code_pc(dump(code),name) end return load(code),n end local function stupidcompile(luafile,lucfile,strip) local code=io.loaddata(luafile) local n=0 if code and code~="" then code=load(code) if not code then report_lua("fatal error in file %a",luafile) end code=dump(code) if strip then code,n=strip_code_pc(code,luautilities.stripcode or luautilities.alwaysstripcode,luafile) end if code and code~="" then io.savedata(lucfile,code) end end return n end local luac_normal="texluac -o %q %q" local luac_strip="texluac -s -o %q %q" function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done=false if strip~=false then strip=true end if forcestupidcompile then fallback=true elseif strip then done=os.spawn(format(luac_strip,lucfile,luafile))==0 else done=os.spawn(format(luac_normal,lucfile,luafile))==0 end if not done and fallback then local n=stupidcompile(luafile,lucfile,strip) if n>0 then report_lua("%a dumped into %a (%i bytes stripped)",luafile,lucfile,n) else report_lua("%a dumped into %a (unstripped)",luafile,lucfile) end cleanup=false done=true end if done and cleanup==true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end return done end luautilities.loadstripped=loadstring end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true -- original size: 3708, stripped down to: 2568 if not modules then modules={} end modules ['util-deb']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local debug=require "debug" local getinfo=debug.getinfo local type,next,tostring=type,next,tostring local format,find=string.format,string.find local is_boolean=string.is_boolean utilities=utilities or {} local debugger=utilities.debugger or {} utilities.debugger=debugger local counters={} local names={} local report=logs.reporter("debugger") local function hook() local f=getinfo(2) if f then local n="unknown" if f.what=="C" then n=f.name or '' if not names[n] then names[n]=format("%42s",n) end else n=f.name or f.namewhat or f.what if not n or n=="" then n="?" end if not names[n] then names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source") end end counters[n]=(counters[n] or 0)+1 end end function debugger.showstats(printer,threshold) printer=printer or report threshold=threshold or 0 local total,grandtotal,functions=0,0,0 local dataset={} for name,count in next,counters do dataset[#dataset+1]={ name,count } end table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end) for i=1,#dataset do local d=dataset[i] local name=d[1] local count=d[2] if count>threshold and not find(name,"for generator") then printer(format("%8i %s\n",count,names[name])) total=total+count end grandtotal=grandtotal+count functions=functions+1 end printer("\n") printer(format("functions : % 10i\n",functions)) printer(format("total : % 10i\n",total)) printer(format("grand total: % 10i\n",grandtotal)) printer(format("threshold : % 10i\n",threshold)) end function debugger.savestats(filename,threshold) local f=io.open(filename,'w') if f then debugger.showstats(function(str) f:write(str) end,threshold) f:close() end end function debugger.enable() debug.sethook(hook,"c") end function debugger.disable() debug.sethook() end function traceback() local level=1 while true do local info=debug.getinfo(level,"Sl") if not info then break elseif info.what=="C" then print(format("%3i : C function",level)) else print(format("%3i : [%s]:%d",level,info.short_src,info.currentline)) end level=level+1 end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-mrg"] = package.loaded["util-mrg"] or true -- original size: 7757, stripped down to: 6015 if not modules then modules={} end modules ['util-mrg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local gsub,format=string.gsub,string.format local concat=table.concat local type,next=type,next local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt,Cb,Cg=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt,lpeg.Cb,lpeg.Cg local lpegmatch,patterns=lpeg.match,lpeg.patterns utilities=utilities or {} local merger=utilities.merger or {} utilities.merger=merger merger.strip_comment=true local report=logs.reporter("system","merge") utilities.report=report local m_begin_merge="begin library merge" local m_end_merge="end library merge" local m_begin_closure="do -- create closure to overcome 200 locals limit" local m_end_closure="end -- of closure" local m_pattern="%c+".."%-%-%s+"..m_begin_merge.."%c+(.-)%c+".."%-%-%s+"..m_end_merge.."%c+" local m_format="\n\n-- "..m_begin_merge.."\n%s\n".."-- "..m_end_merge.."\n\n" local m_faked="-- ".."created merged file".."\n\n".."-- "..m_begin_merge.."\n\n".."-- "..m_end_merge.."\n\n" local m_report=[[ -- used libraries : %s -- skipped libraries : %s -- original bytes : %s -- stripped bytes : %s ]] local m_preloaded=[[package.loaded[%q] = package.loaded[%q] or true]] local function self_fake() return m_faked end local function self_nothing() return "" end local function self_load(name) local data=io.loaddata(name) or "" if data=="" then report("unknown file %a",name) else report("inserting file %a",name) end return data or "" end local space=patterns.space local eol=patterns.newline local equals=P("=")^0 local open=P("[")*Cg(equals,"init")*P("[")*P("\n")^-1 local close=P("]")*C(equals)*P("]") local closeeq=Cmt(close*Cb("init"),function(s,i,a,b) return a==b end) local longstring=open*(1-closeeq)^0*close local quoted=patterns.quoted local digit=patterns.digit local emptyline=space^0*eol local operator1=P("<=")+P(">=")+P("~=")+P("..")+S("/^<>=*+%%") local operator2=S("*+/") local operator3=S("-") local operator4=P("..") local separator=S(",;") local ignore=(P("]")*space^1*P("=")*space^1*P("]"))/"]=["+(P("=")*space^1*P("{"))/"={"+(P("(")*space^1)/"("+(P("{")*(space+eol)^1*P("}"))/"{}" local strings=quoted local longcmt=(emptyline^0*P("--")*longstring*emptyline^0)/"" local longstr=longstring local comment=emptyline^0*P("--")*P("-")^0*(1-eol)^0*emptyline^1/"\n" local optionalspaces=space^0/"" local mandatespaces=space^1/"" local optionalspacing=(eol+space)^0/"" local mandatespacing=(eol+space)^1/"" local pack=digit*space^1*operator4*optionalspacing+optionalspacing*operator1*optionalspacing+optionalspacing*operator2*optionalspaces+mandatespacing*operator3*mandatespaces+optionalspaces*separator*optionalspaces local lines=emptyline^2/"\n" local spaces=(space*space)/" " local compact=Cs (( ignore+strings+longcmt+longstr+comment+pack+lines+spaces+1 )^1 ) local strip=Cs((emptyline^2/"\n"+1)^0) local stripreturn=Cs((1-P("return")*space^1*P(1-space-eol)^1*(space+eol)^0*P(-1))^1) function merger.compact(data) return lpegmatch(strip,lpegmatch(compact,data)) end local function self_compact(data) local delta=0 if merger.strip_comment then local before=#data data=lpegmatch(compact,data) data=lpegmatch(strip,data) local after=#data delta=before-after report("original size %s, compacted to %s, stripped %s",before,after,delta) data=format("-- original size: %s, stripped down to: %s\n\n%s",before,after,data) end return lpegmatch(stripreturn,data) or data,delta end local function self_save(name,data) if data~="" then io.savedata(name,data) report("saving %s with size %s",name,#data) end end local function self_swap(data,code) return data~="" and (gsub(data,m_pattern,function() return format(m_format,code) end,1)) or "" end local function self_libs(libs,list) local result,f,frozen,foundpath={},nil,false,nil result[#result+1]="\n" if type(libs)=='string' then libs={ libs } end if type(list)=='string' then list={ list } end for i=1,#libs do local lib=libs[i] for j=1,#list do local pth=gsub(list[j],"\\","/") report("checking library path %a",pth) local name=pth.."/"..lib if lfs.isfile(name) then foundpath=pth end end if foundpath then break end end if foundpath then report("using library path %a",foundpath) local right,wrong,original,stripped={},{},0,0 for i=1,#libs do local lib=libs[i] local fullname=foundpath.."/"..lib if lfs.isfile(fullname) then report("using library %a",fullname) local preloaded=file.nameonly(lib) local data=io.loaddata(fullname,true) original=original+#data local data,delta=self_compact(data) right[#right+1]=lib result[#result+1]=m_begin_closure result[#result+1]=format(m_preloaded,preloaded,preloaded) result[#result+1]=data result[#result+1]=m_end_closure stripped=stripped+delta else report("skipping library %a",fullname) wrong[#wrong+1]=lib end end right=#right>0 and concat(right," ") or "-" wrong=#wrong>0 and concat(wrong," ") or "-" report("used libraries: %a",right) report("skipped libraries: %a",wrong) report("original bytes: %a",original) report("stripped bytes: %a",stripped) result[#result+1]=format(m_report,right,wrong,original,stripped) else report("no valid library path found") end return concat(result,"\n\n") end function merger.selfcreate(libs,list,target) if target then self_save(target,self_swap(self_fake(),self_libs(libs,list))) end end function merger.selfmerge(name,libs,list,target) self_save(target or name,self_swap(self_load(name),self_libs(libs,list))) end function merger.selfclean(name) self_save(name,self_swap(self_load(name),self_nothing())) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-tpl"] = package.loaded["util-tpl"] or true -- original size: 5655, stripped down to: 3242 if not modules then modules={} end modules ['util-tpl']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities.templates=utilities.templates or {} local templates=utilities.templates local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end) local report_template=logs.reporter("template") local tostring=tostring local format,sub=string.format,string.sub local P,C,Cs,Carg,lpegmatch=lpeg.P,lpeg.C,lpeg.Cs,lpeg.Carg,lpeg.match local replacer local function replacekey(k,t,how,recursive) local v=t[k] if not v then if trace_template then report_template("unknown key %a",k) end return "" else v=tostring(v) if trace_template then report_template("setting key %a to value %a",k,v) end if recursive then return lpegmatch(replacer,v,1,t,how,recursive) else return v end end end local sqlescape=lpeg.replacer { { "'","''" }, { "\\","\\\\" }, { "\r\n","\\n" }, { "\r","\\n" }, } local sqlquotedescape=lpeg.Cs(lpeg.Cc("'")*sqlescape*lpeg.Cc("'")) local escapers={ lua=function(s) return sub(format("%q",s),2,-2) end, sql=function(s) return lpegmatch(sqlescape,s) end, } local quotedescapers={ lua=function(s) return format("%q",s) end, sql=function(s) return lpegmatch(sqlquotedescape,s) end, } lpeg.patterns.sqlescape=sqlescape lpeg.patterns.sqlescape=sqlquotedescape local luaescaper=escapers.lua local quotedluaescaper=quotedescapers.lua local function replacekeyunquoted(s,t,how,recurse) local escaper=how and escapers[how] or luaescaper return escaper(replacekey(s,t,how,recurse)) end local function replacekeyquoted(s,t,how,recurse) local escaper=how and quotedescapers[how] or quotedluaescaper return escaper(replacekey(s,t,how,recurse)) end local single=P("%") local double=P("%%") local lquoted=P("%[") local rquoted=P("]%") local lquotedq=P("%(") local rquotedq=P(")%") local escape=double/'%%' local nosingle=single/'' local nodouble=double/'' local nolquoted=lquoted/'' local norquoted=rquoted/'' local nolquotedq=lquotedq/'' local norquotedq=rquotedq/'' local key=nosingle*((C((1-nosingle )^1)*Carg(1)*Carg(2)*Carg(3))/replacekey )*nosingle local quoted=nolquotedq*((C((1-norquotedq)^1)*Carg(1)*Carg(2)*Carg(3))/replacekeyquoted )*norquotedq local unquoted=nolquoted*((C((1-norquoted )^1)*Carg(1)*Carg(2)*Carg(3))/replacekeyunquoted)*norquoted local any=P(1) replacer=Cs((unquoted+quoted+escape+key+any)^0) local function replace(str,mapping,how,recurse) if mapping and str then return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str else return str end end templates.replace=replace function templates.load(filename,mapping,how,recurse) local data=io.loaddata(filename) or "" if mapping and next(mapping) then return replace(data,mapping,how,recurse) else return data end end function templates.resolve(t,mapping,how,recurse) if not mapping then mapping=t end for k,v in next,t do t[k]=replace(v,mapping,how,recurse) end return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-env"] = package.loaded["util-env"] or true -- original size: 8722, stripped down to: 5050 if not modules then modules={} end modules ['util-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate,mark=utilities.storage.allocate,utilities.storage.mark local format,sub,match,gsub,find=string.format,string.sub,string.match,string.gsub,string.find local unquoted,quoted=string.unquoted,string.quoted local concat,insert,remove=table.concat,table.insert,table.remove environment=environment or {} local environment=environment os.setlocale(nil,nil) function os.setlocale() end local validengines=allocate { ["luatex"]=true, ["luajittex"]=true, } local basicengines=allocate { ["luatex"]="luatex", ["texlua"]="luatex", ["texluac"]="luatex", ["luajittex"]="luajittex", ["texluajit"]="luajittex", } local luaengines=allocate { ["lua"]=true, ["luajit"]=true, } environment.validengines=validengines environment.basicengines=basicengines if not arg then elseif luaengines[file.removesuffix(arg[-1])] then elseif validengines[file.removesuffix(arg[0])] then if arg[1]=="--luaonly" then arg[-1]=arg[0] arg[ 0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end remove(arg) remove(arg) else end local originalzero=file.basename(arg[0]) local specialmapping={ luatools=="base" } if originalzero~="mtxrun" and originalzero~="mtxrun.lua" then arg[0]=specialmapping[originalzero] or originalzero insert(arg,0,"--script") insert(arg,0,"mtxrun") end end environment.arguments=allocate() environment.files=allocate() environment.sortedflags=nil function environment.initializearguments(arg) local arguments,files={},{} environment.arguments,environment.files,environment.sortedflags=arguments,files,nil for index=1,#arg do local argument=arg[index] if index>0 then local flag,value=match(argument,"^%-+(.-)=(.-)$") if flag then flag=gsub(flag,"^c:","") arguments[flag]=unquoted(value or "") else flag=match(argument,"^%-+(.+)") if flag then flag=gsub(flag,"^c:","") arguments[flag]=true else files[#files+1]=argument end end end end environment.ownname=file.reslash(environment.ownname or arg[0] or 'unknown.lua') end function environment.setargument(name,value) environment.arguments[name]=value end function environment.getargument(name,partial) local arguments,sortedflags=environment.arguments,environment.sortedflags if arguments[name] then return arguments[name] elseif partial then if not sortedflags then sortedflags=allocate(table.sortedkeys(arguments)) for k=1,#sortedflags do sortedflags[k]="^"..sortedflags[k] end environment.sortedflags=sortedflags end for k=1,#sortedflags do local v=sortedflags[k] if find(name,v) then return arguments[sub(v,2,#v)] end end end return nil end environment.argument=environment.getargument function environment.splitarguments(separator) local done,before,after=false,{},{} local originalarguments=environment.originalarguments for k=1,#originalarguments do local v=originalarguments[k] if not done and v==separator then done=true elseif done then after[#after+1]=v else before[#before+1]=v end end return before,after end function environment.reconstructcommandline(arg,noquote) arg=arg or environment.originalarguments if noquote and #arg==1 then local a=arg[1] a=resolvers.resolve(a) a=unquoted(a) return a elseif #arg>0 then local result={} for i=1,#arg do local a=arg[i] a=resolvers.resolve(a) a=unquoted(a) a=gsub(a,'"','\\"') if find(a," ") then result[#result+1]=quoted(a) else result[#result+1]=a end end return concat(result," ") else return "" end end function environment.relativepath(path,root) if not path then path="" end if not file.is_rootbased_path(path) then if not root then root=file.pathpart(environment.ownscript or environment.ownname or ".") end if root=="" then root="." end path=root.."/"..path end return file.collapsepath(path,true) end if arg then local newarg,instring={},false for index=1,#arg do local argument=arg[index] if find(argument,"^\"") then newarg[#newarg+1]=gsub(argument,"^\"","") if not find(argument,"\"$") then instring=true end elseif find(argument,"\"$") then newarg[#newarg]=newarg[#newarg].." "..gsub(argument,"\"$","") instring=false elseif instring then newarg[#newarg]=newarg[#newarg].." "..argument else newarg[#newarg+1]=argument end end for i=1,-5,-1 do newarg[i]=arg[i] end environment.initializearguments(newarg) environment.originalarguments=mark(newarg) environment.rawarguments=mark(arg) arg={} end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-env"] = package.loaded["luat-env"] or true -- original size: 5874, stripped down to: 4184 if not modules then modules={} end modules ['luat-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local rawset,rawget,loadfile,assert=rawset,rawget,loadfile,assert local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_lua=logs.reporter("resolvers","lua") local luautilities=utilities.lua local luasuffixes=luautilities.suffixes environment=environment or {} local environment=environment local mt={ __index=function(_,k) if k=="version" then local version=tex.toks and tex.toks.contextversiontoks if version and version~="" then rawset(environment,"version",version) return version else return "unknown" end elseif k=="kind" then local kind=tex.toks and tex.toks.contextkindtoks if kind and kind~="" then rawset(environment,"kind",kind) return kind else return "unknown" end elseif k=="jobname" or k=="formatname" then local name=tex and tex[k] if name or name=="" then rawset(environment,k,name) return name else return "unknown" end elseif k=="outputfilename" then local name=environment.jobname rawset(environment,k,name) return name end end } setmetatable(environment,mt) function environment.texfile(filename) return resolvers.findfile(filename,'tex') end function environment.luafile(filename) local resolved=resolvers.findfile(filename,'tex') or "" if resolved~="" then return resolved end resolved=resolvers.findfile(filename,'texmfscripts') or "" if resolved~="" then return resolved end return resolvers.findfile(filename,'luatexlibs') or "" end local stripindeed=false directives.register("system.compile.strip",function(v) stripindeed=v end) local function strippable(filename) if stripindeed then local modu=modules[file.nameonly(filename)] return modu and modu.dataonly else return false end end function environment.luafilechunk(filename,silent) filename=file.replacesuffix(filename,"lua") local fullname=environment.luafile(filename) if fullname and fullname~="" then local data=luautilities.loadedluacode(fullname,strippable,filename) if trace_locating then report_lua("loading file %a %s",fullname,not data and "failed" or "succeeded") elseif not silent then texio.write("<",data and "+ " or "- ",fullname,">") end return data else if trace_locating then report_lua("unknown file %a",filename) end return nil end end function environment.loadluafile(filename,version) local lucname,luaname,chunk local basename=file.removesuffix(filename) if basename==filename then luaname=file.addsuffix(basename,luasuffixes.lua) lucname=file.addsuffix(basename,luasuffixes.luc) else luaname=basename lucname=nil end local fullname=(lucname and environment.luafile(lucname)) or "" if fullname~="" then if trace_locating then report_lua("loading %a",fullname) end chunk=loadfile(fullname) end if chunk then assert(chunk)() if version then local v=version if modules and modules[filename] then v=modules[filename].version elseif versions and versions[filename] then v=versions[filename] end if v==version then return true else if trace_locating then report_lua("version mismatch for %a, lua version %a, luc version %a",filename,v,version) end environment.loadluafile(filename) end else return true end end fullname=(luaname and environment.luafile(luaname)) or "" if fullname~="" then if trace_locating then report_lua("loading %a",fullname) end chunk=loadfile(fullname) if not chunk then if trace_locating then report_lua("unknown file %a",filename) end else assert(chunk)() return true end end return false end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true -- original size: 42495, stripped down to: 26647 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end) local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end xml=xml or {} local xml=xml local concat,remove,insert=table.concat,table.remove,table.insert local type,next,setmetatable,getmetatable,tonumber=type,next,setmetatable,getmetatable,tonumber local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub local utfchar=utf.char local lpegmatch=lpeg.match local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs local formatters=string.formatters xml.xmlns=xml.xmlns or {} local check=P(false) local parse=check function xml.registerns(namespace,pattern) check=check+C(P(lower(pattern)))/namespace parse=P { P(check)+1*V(1) } end function xml.checkns(namespace,url) local ns=lpegmatch(parse,lower(url)) if ns and namespace~=ns then xml.xmlns[namespace]=ns end end function xml.resolvens(url) return lpegmatch(parse,lower(url)) or "" end local nsremap,resolvens=xml.xmlns,xml.resolvens local stack={} local top={} local dt={} local at={} local xmlns={} local errorstr=nil local entities={} local strip=false local cleanup=false local utfize=false local resolve_predefined=false local unify_predefined=false local dcache={} local hcache={} local acache={} local mt={} local function initialize_mt(root) mt={ __index=root } end function xml.setproperty(root,k,v) getmetatable(root).__index[k]=v end function xml.checkerror(top,toclose) return "" end local function add_attribute(namespace,tag,value) if cleanup and #value>0 then value=cleanup(value) end if tag=="xmlns" then xmlns[#xmlns+1]=resolvens(value) at[tag]=value elseif namespace=="" then at[tag]=value elseif namespace=="xmlns" then xml.checkns(tag,value) at["xmlns:"..tag]=value else at[namespace..":"..tag]=value end end local function add_empty(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace top=stack[#stack] dt=top.dt local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top } dt[#dt+1]=t setmetatable(t,mt) if at.xmlns then remove(xmlns) end at={} end local function add_begin(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] } setmetatable(top,mt) dt=top.dt stack[#stack+1]=top at={} end local function add_end(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local toclose=remove(stack) top=stack[#stack] if #stack<1 then errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "") elseif toclose.tg~=tag then errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "") end dt=top.dt dt[#dt+1]=toclose if toclose.at.xmlns then remove(xmlns) end end local function add_text(text) if cleanup and #text>0 then dt[#dt+1]=cleanup(text) else dt[#dt+1]=text end end local function add_special(what,spacing,text) if #spacing>0 then dt[#dt+1]=spacing end if strip and (what=="@cm@" or what=="@dt@") then else dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } } end end local function set_message(txt) errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","") end local reported_attribute_errors={} local function attribute_value_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute value %a",str) reported_attribute_errors[str]=true at._error_=str end return str end local function attribute_specification_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute specification %a",str) reported_attribute_errors[str]=true at._error_=str end return str end xml.placeholders={ unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end, unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end, unknown_any_entity=function(str) return formatters["&#x%s;"](str) end, } local placeholders=xml.placeholders local function fromhex(s) local n=tonumber(s,16) if n then return utfchar(n) else return formatters["h:%s"](s),true end end local function fromdec(s) local n=tonumber(s) if n then return utfchar(n) else return formatters["d:%s"](s),true end end local rest=(1-P(";"))^0 local many=P(1)^0 local parsedentity=P("&")*(P("#x")*(rest/fromhex)+P("#")*(rest/fromdec))*P(";")*P(-1)+(P("#x")*(many/fromhex)+P("#")*(many/fromdec)) local predefined_unified={ [38]="&", [42]=""", [47]="'", [74]="<", [76]=">", } local predefined_simplified={ [38]="&",amp="&", [42]='"',quot='"', [47]="'",apos="'", [74]="<",lt="<", [76]=">",gt=">", } local nofprivates=0xF0000 local privates_u={ [ [[&]] ]="&", [ [["]] ]=""", [ [[']] ]="'", [ [[<]] ]="<", [ [[>]] ]=">", } local privates_p={} local privates_n={ } local escaped=utf.remapper(privates_u) local function unescaped(s) local p=privates_n[s] if not p then nofprivates=nofprivates+1 p=utfchar(nofprivates) privates_n[s]=p s="&"..s..";" privates_u[p]=s privates_p[p]=s end return p end local unprivatized=utf.remapper(privates_p) xml.privatetoken=unescaped xml.unprivatized=unprivatized xml.privatecodes=privates_n local function handle_hex_entity(str) local h=hcache[str] if not h then local n=tonumber(str,16) h=unify_predefined and predefined_unified[n] if h then if trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end elseif utfize then h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or "" if not n then report_xml("utfize, ignoring hex entity &#x%s;",str) elseif trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end else if trace_entities then report_xml("found entity &#x%s;",str) end h="&#x"..str..";" end hcache[str]=h end return h end local function handle_dec_entity(str) local d=dcache[str] if not d then local n=tonumber(str) d=unify_predefined and predefined_unified[n] if d then if trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end elseif utfize then d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or "" if not n then report_xml("utfize, ignoring dec entity &#%s;",str) elseif trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end else if trace_entities then report_xml("found entity &#%s;",str) end d="&#"..str..";" end dcache[str]=d end return d end xml.parsedentitylpeg=parsedentity local function handle_any_entity(str) if resolve then local a=acache[str] if not a then a=resolve_predefined and predefined_simplified[str] if a then if trace_entities then report_xml("resolving entity &%s; to predefined %a",str,a) end else if type(resolve)=="function" then a=resolve(str) or entities[str] else a=entities[str] end if a then if type(a)=="function" then if trace_entities then report_xml("expanding entity &%s; to function call",str) end a=a(str) or "" end a=lpegmatch(parsedentity,a) or a if trace_entities then report_xml("resolving entity &%s; to internal %a",str,a) end else local unknown_any_entity=placeholders.unknown_any_entity if unknown_any_entity then a=unknown_any_entity(str) or "" end if a then if trace_entities then report_xml("resolving entity &%s; to external %s",str,a) end else if trace_entities then report_xml("keeping entity &%s;",str) end if str=="" then a="&error;" else a="&"..str..";" end end end end acache[str]=a elseif trace_entities then if not acache[str] then report_xml("converting entity &%s; to %a",str,a) acache[str]=a end end return a else local a=acache[str] if not a then a=resolve_predefined and predefined_simplified[str] if a then acache[str]=a if trace_entities then report_xml("entity &%s; becomes %a",str,a) end elseif str=="" then if trace_entities then report_xml("invalid entity &%s;",str) end a="&error;" acache[str]=a else if trace_entities then report_xml("entity &%s; is made private",str) end a=unescaped(str) acache[str]=a end end return a end end local function handle_end_entity(chr) report_xml("error in entity, %a found instead of %a",chr,";") end local space=S(' \r\n\t') local open=P('<') local close=P('>') local squote=S("'") local dquote=S('"') local equal=P('=') local slash=P('/') local colon=P(':') local semicolon=P(';') local ampersand=P('&') local valid=R('az','AZ','09')+S('_-.') local name_yes=C(valid^1)*colon*C(valid^1) local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpeg.patterns.utfbom local spacing=C(space^0) local anyentitycontent=(1-open-semicolon-space-close)^0 local hexentitycontent=R("AF","af","09")^0 local decentitycontent=R("09")^0 local parsedentity=P("#")/""*( P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) )+(anyentitycontent/handle_any_entity) local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity)) local text_unparsed=C((1-open)^1) local text_parsed=Cs(((1-open-ampersand)^1+entity)^1) local somespace=space^1 local optionalspace=space^0 local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) local endofattributes=slash*close+close local whatever=space*name*optionalspace*equal local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error local attributevalue=value+wrongvalue local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 local parsedtext=text_parsed/add_text local unparsedtext=text_unparsed/add_text local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin local endelement=(spacing*open*slash*name*optionalspace*close)/add_end local begincomment=open*P("!--") local endcomment=P("--")*close local begininstruction=open*P("?") local endinstruction=P("?")*close local begincdata=open*P("![CDATA[") local endcdata=P("]]")*close local someinstruction=C((1-endinstruction)^0) local somecomment=C((1-endcomment )^0) local somecdata=C((1-endcdata )^0) local function normalentity(k,v ) entities[k]=v end local function systementity(k,v,n) entities[k]=v end local function publicentity(k,v,n) entities[k]=v end local begindoctype=open*P("!DOCTYPE") local enddoctype=close local beginset=P("[") local endset=P("]") local doctypename=C((1-somespace-close)^0) local elementdoctype=optionalspace*P("1 and root) or root[1] else return data end end local function copy(old,tables) if old then tables=tables or {} local new={} if not tables[old] then tables[old]=new end for k,v in next,old do new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v end local mt=getmetatable(old) if mt then setmetatable(new,mt) end return new else return {} end end xml.copy=copy function xml.checkbom(root) if root.ri then local dt=root.dt for k=1,#dt do local v=dt[k] if type(v)=="table" and v.special and v.tg=="@pi@" and find(v.dt[1],"xml.*version=") then return end end insert(dt,1,{ special=true,ns="",tg="@pi@",dt={ "xml version='1.0' standalone='yes'" } } ) insert(dt,2,"\n" ) end end local function verbose_element(e,handlers) local handle=handlers.handle local serialize=handlers.serialize local ens,etg,eat,edt,ern=e.ns,e.tg,e.at,e.dt,e.rn local ats=eat and next(eat) and {} if ats then for k,v in next,eat do ats[#ats+1]=formatters['%s=%q'](k,escaped(v)) end end if ern and trace_entities and ern~=ens then ens=ern end if ens~="" then if edt and #edt>0 then if ats then handle("<",ens,":",etg," ",concat(ats," "),">") else handle("<",ens,":",etg,">") end for i=1,#edt do local e=edt[i] if type(e)=="string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",ens,":",etg," ",concat(ats," "),"/>") else handle("<",ens,":",etg,"/>") end end else if edt and #edt>0 then if ats then handle("<",etg," ",concat(ats," "),">") else handle("<",etg,">") end for i=1,#edt do local e=edt[i] if type(e)=="string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",etg," ",concat(ats," "),"/>") else handle("<",etg,"/>") end end end end local function verbose_pi(e,handlers) handlers.handle("") end local function verbose_comment(e,handlers) handlers.handle("") end local function verbose_cdata(e,handlers) handlers.handle("") end local function verbose_doctype(e,handlers) handlers.handle("") end local function verbose_root(e,handlers) handlers.serialize(e.dt,handlers) end local function verbose_text(e,handlers) handlers.handle(escaped(e)) end local function verbose_document(e,handlers) local serialize=handlers.serialize local functions=handlers.functions for i=1,#e do local ei=e[i] if type(ei)=="string" then functions["@tx@"](ei,handlers) else serialize(ei,handlers) end end end local function serialize(e,handlers,...) local initialize=handlers.initialize local finalize=handlers.finalize local functions=handlers.functions if initialize then local state=initialize(...) if not state==true then return state end end local etg=e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) else functions["@dc@"](e,handlers) end if finalize then return finalize() end end local function xserialize(e,handlers) local functions=handlers.functions local etg=e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) else functions["@dc@"](e,handlers) end end local handlers={} local function newhandlers(settings) local t=table.copy(handlers[settings and settings.parent or "verbose"] or {}) if settings then for k,v in next,settings do if type(v)=="table" then local tk=t[k] if not tk then tk={} t[k]=tk end for kk,vv in next,v do tk[kk]=vv end else t[k]=v end end if settings.name then handlers[settings.name]=t end end utilities.storage.mark(t) return t end local nofunction=function() end function xml.sethandlersfunction(handler,name,fnc) handler.functions[name]=fnc or nofunction end function xml.gethandlersfunction(handler,name) return handler.functions[name] end function xml.gethandlers(name) return handlers[name] end newhandlers { name="verbose", initialize=false, finalize=false, serialize=xserialize, handle=print, functions={ ["@dc@"]=verbose_document, ["@dt@"]=verbose_doctype, ["@rt@"]=verbose_root, ["@el@"]=verbose_element, ["@pi@"]=verbose_pi, ["@cm@"]=verbose_comment, ["@cd@"]=verbose_cdata, ["@tx@"]=verbose_text, } } local result local xmlfilehandler=newhandlers { name="file", initialize=function(name) result=io.open(name,"wb") return result end, finalize=function() result:close() return true end, handle=function(...) result:write(...) end, } function xml.save(root,name) serialize(root,xmlfilehandler,name) end local result local xmlstringhandler=newhandlers { name="string", initialize=function() result={} return result end, finalize=function() return concat(result) end, handle=function(...) result[#result+1]=concat {... } end, } local function xmltostring(root) if not root then return "" elseif type(root)=="string" then return root else return serialize(root,xmlstringhandler) or "" end end local function __tostring(root) return (root and xmltostring(root)) or "" end initialize_mt=function(root) mt={ __tostring=__tostring,__index=root } end xml.defaulthandlers=handlers xml.newhandlers=newhandlers xml.serialize=serialize xml.tostring=xmltostring local function xmlstring(e,handle) if not handle or (e.special and e.tg~="@rt@") then elseif e.tg then local edt=e.dt if edt then for i=1,#edt do xmlstring(edt[i],handle) end end else handle(e) end end xml.string=xmlstring function xml.settings(e) while e do local s=e.settings if s then return s else e=e.__p__ end end return nil end function xml.root(e) local r=e while e do e=e.__p__ if e then r=e end end return r end function xml.parent(root) return root.__p__ end function xml.body(root) return root.ri and root.dt[root.ri] or root end function xml.name(root) if not root then return "" end local ns=root.ns local tg=root.tg if ns=="" then return tg else return ns..":"..tg end end function xml.erase(dt,k) if dt then if k then dt[k]="" else for k=1,#dt do dt[1]={ "" } end end end end function xml.assign(dt,k,root) if dt and k then dt[k]=type(root)=="table" and xml.body(root) or root return dt[k] else return xml.body(root) end end function xml.tocdata(e,wrapper) local whatever=type(e)=="table" and xmltostring(e.dt) or e or "" if wrapper then whatever=formatters["<%s>%s"](wrapper,whatever,wrapper) end local t={ special=true,ns="",tg="@cd@",at={},rn="",dt={ whatever },__p__=e } setmetatable(t,getmetatable(e)) e.dt={ t } end function xml.makestandalone(root) if root.ri then local dt=root.dt for k=1,#dt do local v=dt[k] if type(v)=="table" and v.special and v.tg=="@pi@" then local txt=v.dt[1] if find(txt,"xml.*version=") then v.dt[1]=txt.." standalone='yes'" break end end end end return root end function xml.kind(e) local dt=e and e.dt if dt then local n=#dt if n==1 then local d=dt[1] if d.special then local tg=d.tg if tg=="@cd@" then return "cdata" elseif tg=="@cm" then return "comment" elseif tg=="@pi@" then return "instruction" elseif tg=="@dt@" then return "declaration" end elseif type(d)=="string" then return "text" end return "element" elseif n>0 then return "mixed" end end return "empty" end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true -- original size: 48956, stripped down to: 30516 if not modules then modules={} end modules ['lxml-lpt']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat,remove,insert=table.concat,table.remove,table.insert local type,next,tonumber,tostring,setmetatable,load,select=type,next,tonumber,tostring,setmetatable,load,select local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.lower,string.gmatch,string.gsub,string.find,string.rep local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local setmetatableindex=table.setmetatableindex local formatters=string.formatters local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end local report_lpath=logs.reporter("xml","lpath") local xml=xml local lpathcalls=0 function xml.lpathcalls () return lpathcalls end local lpathcached=0 function xml.lpathcached() return lpathcached end xml.functions=xml.functions or {} local functions=xml.functions xml.expressions=xml.expressions or {} local expressions=xml.expressions xml.finalizers=xml.finalizers or {} local finalizers=xml.finalizers xml.specialhandler=xml.specialhandler or {} local specialhandler=xml.specialhandler lpegpatterns.xml=lpegpatterns.xml or {} local xmlpatterns=lpegpatterns.xml finalizers.xml=finalizers.xml or {} finalizers.tex=finalizers.tex or {} local function fallback (t,name) local fn=finalizers[name] if fn then t[name]=fn else report_lpath("unknown sub finalizer %a",name) fn=function() end end return fn end setmetatableindex(finalizers.xml,fallback) setmetatableindex(finalizers.tex,fallback) xml.defaultprotocol="xml" local apply_axis={} apply_axis['root']=function(list) local collected={} for l=1,#list do local ll=list[l] local rt=ll while ll do ll=ll.__p__ if ll then rt=ll end end collected[l]=rt end return collected end apply_axis['self']=function(list) return list end apply_axis['child']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local dt=ll.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en end end ll.en=en end end return collected end local function collect(list,collected,c) local dt=list.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en c=collect(dk,collected,c) end end list.en=en end return c end apply_axis['descendant']=function(list) local collected,c={},0 for l=1,#list do c=collect(list[l],collected,c) end return collected end local function collect(list,collected,c) local dt=list.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en c=collect(dk,collected,c) end end list.en=en end return c end apply_axis['descendant-or-self']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] if ll.special~=true then c=c+1 collected[c]=ll end c=collect(ll,collected,c) end return collected end apply_axis['ancestor']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] while ll do ll=ll.__p__ if ll then c=c+1 collected[c]=ll end end end return collected end apply_axis['ancestor-or-self']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] c=c+1 collected[c]=ll while ll do ll=ll.__p__ if ll then c=c+1 collected[c]=ll end end end return collected end apply_axis['parent']=function(list) local collected,c={},0 for l=1,#list do local pl=list[l].__p__ if pl then c=c+1 collected[c]=pl end end return collected end apply_axis['attribute']=function(list) return {} end apply_axis['namespace']=function(list) return {} end apply_axis['following']=function(list) return {} end apply_axis['preceding']=function(list) return {} end apply_axis['following-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=ll.ni+1,#d do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['preceding-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=1,ll.ni-1 do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['reverse-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=ll.ni-1,1,-1 do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['auto-descendant-or-self']=apply_axis['descendant-or-self'] apply_axis['auto-descendant']=apply_axis['descendant'] apply_axis['auto-child']=apply_axis['child'] apply_axis['auto-self']=apply_axis['self'] apply_axis['initial-child']=apply_axis['child'] local function apply_nodes(list,directive,nodes) local maxn=#nodes if maxn==3 then local nns,ntg=nodes[2],nodes[3] if not nns and not ntg then if directive then return list else return {} end else local collected,c,m,p={},0,0,nil if not nns then for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then if directive then if ntg==ltg then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif ntg~=ltg then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end elseif not ntg then for l=1,#list do local ll=list[l] local lns=ll.rn or ll.ns if lns then if directive then if lns==nns then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif lns~=nns then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end else for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then local lns=ll.rn or ll.ns local ok=ltg==ntg and lns==nns if directive then if ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif not ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end end return collected end else local collected,c,m,p={},0,0,nil for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then local lns=ll.rn or ll.ns local ok=false for n=1,maxn,3 do local nns,ntg=nodes[n+1],nodes[n+2] ok=(not ntg or ltg==ntg) and (not nns or lns==nns) if ok then break end end if directive then if ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif not ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end return collected end end local quit_expression=false local function apply_expression(list,expression,order) local collected,c={},0 quit_expression=false for l=1,#list do local ll=list[l] if expression(list,ll,l,order) then c=c+1 collected[c]=ll end if quit_expression then break end end return collected end local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb local spaces=S(" \n\r\t\f")^0 local lp_space=S(" \n\r\t\f") local lp_any=P(1) local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==") local lp_doequal=P("=")/"==" local lp_or=P("|")/" or " local lp_and=P("&")/" and " local lp_builtin=P ( P("text")/"(ll.dt[1] or '')"+ P("content")/"ll.dt"+ P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+ P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+ P("ns")/"ll.ns" )*((spaces*P("(")*spaces*P(")"))/"") local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])") lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0" lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))" local lp_fastpos=lp_fastpos_n+lp_fastpos_p local lp_reserved=C("and")+C("or")+C("not")+C("div")+C("mod")+C("true")+C("false") local lp_lua_function=Cs((R("az","AZ","__")^1*(P(".")*R("az","AZ","__")^1)^1)*("("))/"%0" local lp_function=C(R("az","AZ","__")^1)*P("(")/function(t) if expressions[t] then return "expr."..t.."(" else return "expr.error(" end end local lparent=P("(") local rparent=P(")") local noparent=1-(lparent+rparent) local nested=P{lparent*(noparent+V(1))^0*rparent} local value=P(lparent*C((noparent+nested)^0)*rparent) local lp_child=Cc("expr.child(ll,'")*R("az","AZ","--","__")^1*Cc("')") local lp_number=S("+-")*R("09")^1 local lp_string=Cc("'")*R("az","AZ","--","__")^1*Cc("'") local lp_content=(P("'")*(1-P("'"))^0*P("'")+P('"')*(1-P('"'))^0*P('"')) local cleaner local lp_special=(C(P("name")+P("text")+P("tag")+P("count")+P("child")))*value/function(t,s) if expressions[t] then s=s and s~="" and lpegmatch(cleaner,s) if s and s~="" then return "expr."..t.."(ll,"..s..")" else return "expr."..t.."(ll)" end else return "expr.error("..t..")" end end local content=lp_builtin+lp_attribute+lp_special+lp_noequal+lp_doequal+lp_or+lp_and+lp_reserved+lp_lua_function+lp_function+lp_content+ lp_child+lp_any local converter=Cs ( lp_fastpos+(P { lparent*(V(1))^0*rparent+content } )^0 ) cleaner=Cs (( lp_reserved+lp_number+lp_string+1 )^1 ) local template_e=[[ local expr = xml.expressions return function(list,ll,l,order) return %s end ]] local template_f_y=[[ local finalizer = xml.finalizers['%s']['%s'] return function(collection) return finalizer(collection,%s) end ]] local template_f_n=[[ return xml.finalizers['%s']['%s'] ]] local register_self={ kind="axis",axis="self" } local register_parent={ kind="axis",axis="parent" } local register_descendant={ kind="axis",axis="descendant" } local register_child={ kind="axis",axis="child" } local register_descendant_or_self={ kind="axis",axis="descendant-or-self" } local register_root={ kind="axis",axis="root" } local register_ancestor={ kind="axis",axis="ancestor" } local register_ancestor_or_self={ kind="axis",axis="ancestor-or-self" } local register_attribute={ kind="axis",axis="attribute" } local register_namespace={ kind="axis",axis="namespace" } local register_following={ kind="axis",axis="following" } local register_following_sibling={ kind="axis",axis="following-sibling" } local register_preceding={ kind="axis",axis="preceding" } local register_preceding_sibling={ kind="axis",axis="preceding-sibling" } local register_reverse_sibling={ kind="axis",axis="reverse-sibling" } local register_auto_descendant_or_self={ kind="axis",axis="auto-descendant-or-self" } local register_auto_descendant={ kind="axis",axis="auto-descendant" } local register_auto_self={ kind="axis",axis="auto-self" } local register_auto_child={ kind="axis",axis="auto-child" } local register_initial_child={ kind="axis",axis="initial-child" } local register_all_nodes={ kind="nodes",nodetest=true,nodes={ true,false,false } } local skip={} local function errorrunner_e(str,cnv) if not skip[str] then report_lpath("error in expression: %s => %s",str,cnv) skip[str]=cnv or str end return false end local function errorrunner_f(str,arg) report_lpath("error in finalizer: %s(%s)",str,arg or "") return false end local function register_nodes(nodetest,nodes) return { kind="nodes",nodetest=nodetest,nodes=nodes } end local function register_expression(expression) local converted=lpegmatch(converter,expression) local runner=load(format(template_e,converted)) runner=(runner and runner()) or function() errorrunner_e(expression,converted) end return { kind="expression",expression=expression,converted=converted,evaluator=runner } end local function register_finalizer(protocol,name,arguments) local runner if arguments and arguments~="" then runner=load(format(template_f_y,protocol or xml.defaultprotocol,name,arguments)) else runner=load(format(template_f_n,protocol or xml.defaultprotocol,name)) end runner=(runner and runner()) or function() errorrunner_f(name,arguments) end return { kind="finalizer",name=name,arguments=arguments,finalizer=runner } end local expression=P { "ex", ex="["*C((V("sq")+V("dq")+(1-S("[]"))+V("ex"))^0)*"]", sq="'"*(1-S("'"))^0*"'", dq='"'*(1-S('"'))^0*'"', } local arguments=P { "ar", ar="("*Cs((V("sq")+V("dq")+V("nq")+P(1-P(")")))^0)*")", nq=((1-S("),'\""))^1)/function(s) return format("%q",s) end, sq=P("'")*(1-P("'"))^0*P("'"), dq=P('"')*(1-P('"'))^0*P('"'), } local function register_error(str) return { kind="error",error=format("unparsed: %s",str) } end local special_1=P("*")*Cc(register_auto_descendant)*Cc(register_all_nodes) local special_2=P("/")*Cc(register_auto_self) local special_3=P("")*Cc(register_auto_self) local no_nextcolon=P(-1)+#(1-P(":")) local no_nextlparent=P(-1)+#(1-P("(")) local pathparser=Ct { "patterns", patterns=spaces*V("protocol")*spaces*( (V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 ) ), protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"), step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0, axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child), special=special_1+special_2+special_3, initial=(P("/")*spaces*Cc(register_initial_child))^-1, error=(P(1)^1)/register_error, shortcuts_a=V("s_descendant_or_self")+V("s_descendant")+V("s_child")+V("s_parent")+V("s_self")+V("s_root")+V("s_ancestor"), shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0, s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self), s_descendant=P("**")*Cc(register_descendant), s_child=P("*")*no_nextcolon*Cc(register_child ), s_parent=P("..")*Cc(register_parent ), s_self=P("." )*Cc(register_self ), s_root=P("^^")*Cc(register_root ), s_ancestor=P("^")*Cc(register_ancestor ), descendant=P("descendant::")*Cc(register_descendant ), child=P("child::")*Cc(register_child ), parent=P("parent::")*Cc(register_parent ), self=P("self::")*Cc(register_self ), root=P('root::')*Cc(register_root ), ancestor=P('ancestor::')*Cc(register_ancestor ), descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ), ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ), following=P('following::')*Cc(register_following ), following_sibling=P('following-sibling::')*Cc(register_following_sibling ), preceding=P('preceding::')*Cc(register_preceding ), preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ), reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ), nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes, expressions=expression/register_expression, letters=R("az")^1, name=(1-S("/[]()|:*!"))^1, negate=P("!")*Cc(false), nodefunction=V("negate")+P("not")*Cc(false)+Cc(true), nodetest=V("negate")+Cc(true), nodename=(V("negate")+Cc(true))*spaces*((V("wildnodename")*P(":")*V("wildnodename"))+(Cc(false)*V("wildnodename"))), wildnodename=(C(V("name"))+P("*")*Cc(false))*no_nextlparent, nodeset=spaces*Ct(V("nodename")*(spaces*P("|")*spaces*V("nodename"))^0)*spaces, finalizer=(Cb("protocol")*P("/")^-1*C(V("name"))*arguments*P(-1))/register_finalizer, } xmlpatterns.pathparser=pathparser local cache={} local function nodesettostring(set,nodetest) local t={} for i=1,#set,3 do local directive,ns,tg=set[i],set[i+1],set[i+2] if not ns or ns=="" then ns="*" end if not tg or tg=="" then tg="*" end tg=(tg=="@rt@" and "[root]") or format("%s:%s",ns,tg) t[i]=(directive and tg) or format("not(%s)",tg) end if nodetest==false then return format("not(%s)",concat(t,"|")) else return concat(t,"|") end end local function tagstostring(list) if #list==0 then return "no elements" else local t={} for i=1,#list do local li=list[i] local ns,tg=li.ns,li.tg if not ns or ns=="" then ns="*" end if not tg or tg=="" then tg="*" end t[i]=(tg=="@rt@" and "[root]") or format("%s:%s",ns,tg) end return concat(t," ") end end xml.nodesettostring=nodesettostring local lpath local lshowoptions={ functions=false } local function lshow(parsed) if type(parsed)=="string" then parsed=lpath(parsed) end report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern, table.serialize(parsed,false,lshowoptions)) end xml.lshow=lshow local function add_comment(p,str) local pc=p.comment if not pc then p.comment={ str } else pc[#pc+1]=str end end lpath=function (pattern) lpathcalls=lpathcalls+1 if type(pattern)=="table" then return pattern else local parsed=cache[pattern] if parsed then lpathcached=lpathcached+1 else parsed=lpegmatch(pathparser,pattern) if parsed then parsed.pattern=pattern local np=#parsed if np==0 then parsed={ pattern=pattern,register_self,state="parsing error" } report_lpath("parsing error in pattern: %s",pattern) lshow(parsed) else local pi=parsed[1] if pi.axis=="auto-child" then if false then add_comment(parsed,"auto-child replaced by auto-descendant-or-self") parsed[1]=register_auto_descendant_or_self else add_comment(parsed,"auto-child replaced by auto-descendant") parsed[1]=register_auto_descendant end elseif pi.axis=="initial-child" and np>1 and parsed[2].axis then add_comment(parsed,"initial-child removed") remove(parsed,1) end local np=#parsed if np>1 then local pnp=parsed[np] if pnp.kind=="nodes" and pnp.nodetest==true then local nodes=pnp.nodes if nodes[1]==true and nodes[2]==false and nodes[3]==false then add_comment(parsed,"redundant final wildcard filter removed") remove(parsed,np) end end end end else parsed={ pattern=pattern } end cache[pattern]=parsed if trace_lparse and not trace_lprofile then lshow(parsed) end end return parsed end end xml.lpath=lpath local profiled={} xml.profiled=profiled local function profiled_apply(list,parsed,nofparsed,order) local p=profiled[parsed.pattern] if p then p.tested=p.tested+1 else p={ tested=1,matched=0,finalized=0 } profiled[parsed.pattern]=p end local collected=list for i=1,nofparsed do local pi=parsed[i] local kind=pi.kind if kind=="axis" then collected=apply_axis[pi.axis](collected) elseif kind=="nodes" then collected=apply_nodes(collected,pi.nodetest,pi.nodes) elseif kind=="expression" then collected=apply_expression(collected,pi.evaluator,order) elseif kind=="finalizer" then collected=pi.finalizer(collected) p.matched=p.matched+1 p.finalized=p.finalized+1 return collected end if not collected or #collected==0 then local pn=i %s",(collected and #collected) or 0,pi.expression,pi.converted) elseif kind=="finalizer" then collected=pi.finalizer(collected) report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "") return collected end if not collected or #collected==0 then local pn=i1 then c=c-1 local e=collected[c] local r=e.__p__ return r,r.dt,e.ni end end else local n,c=#collected,0 return function() if c1 then c=c-1 return collected[c] end end else local n,c=#collected,0 return function() if c"))^0 local special=P("<")/"<"+P(">")/">"+P("&")/"&" local escaped=Cs(normal*(special*normal)^0) local normal=(1-S"&")^0 local special=P("<")/"<"+P(">")/">"+P("&")/"&" local unescaped=Cs(normal*(special*normal)^0) local cleansed=Cs(((P("<")*(1-P(">"))^0*P(">"))/""+1)^0) xmlpatterns.escaped=escaped xmlpatterns.unescaped=unescaped xmlpatterns.cleansed=cleansed function xml.escaped (str) return lpegmatch(escaped,str) end function xml.unescaped(str) return lpegmatch(unescaped,str) end function xml.cleansed (str) return lpegmatch(cleansed,str) end function xml.fillin(root,pattern,str,check) local e=xml.first(root,pattern) if e then local n=#e.dt if not check or n==0 or (n==1 and e.dt[1]=="") then e.dt={ str } end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true -- original size: 23804, stripped down to: 16817 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_manipulations=false trackers.register("lxml.manipulations",function(v) trace_manipulations=v end) local report_xml=logs.reporter("xml") local xml=xml local xmlconvert,xmlcopy,xmlname=xml.convert,xml.copy,xml.name local xmlinheritedconvert=xml.inheritedconvert local xmlapplylpath=xml.applylpath local xmlfilter=xml.filter local type,setmetatable,getmetatable=type,setmetatable,getmetatable local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip local utfbyte=utf.byte local function report(what,pattern,c,e) report_xml("%s element %a, root %a, position %a, index %a, pattern %a",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern) end local function withelements(e,handle,depth) if e and handle then local edt=e.dt if edt then depth=depth or 0 for i=1,#edt do local e=edt[i] if type(e)=="table" then handle(e,depth) withelements(e,handle,depth+1) end end end end end xml.withelements=withelements function xml.withelement(e,n,handle) if e and n~=0 and handle then local edt=e.dt if edt then if n>0 then for i=1,#edt do local ei=edt[i] if type(ei)=="table" then if n==1 then handle(ei) return else n=n-1 end end end elseif n<0 then for i=#edt,1,-1 do local ei=edt[i] if type(ei)=="table" then if n==-1 then handle(ei) return else n=n+1 end end end end end end end function xml.each(root,pattern,handle,reverse) local collected=xmlapplylpath(root,pattern) if collected then if reverse then for c=#collected,1,-1 do handle(collected[c]) end else for c=1,#collected do handle(collected[c]) end end return collected end end function xml.processattributes(root,pattern,handle) local collected=xmlapplylpath(root,pattern) if collected and handle then for c=1,#collected do handle(collected[c].at) end end return collected end function xml.collect(root,pattern) return xmlapplylpath(root,pattern) end function xml.collecttexts(root,pattern,flatten) local collected=xmlapplylpath(root,pattern) if collected and flatten then local xmltostring=xml.tostring for c=1,#collected do collected[c]=xmltostring(collected[c].dt) end end return collected or {} end function xml.collect_tags(root,pattern,nonamespace) local collected=xmlapplylpath(root,pattern) if collected then local t,n={},0 for c=1,#collected do local e=collected[c] local ns,tg=e.ns,e.tg n=n+1 if nonamespace then t[n]=tg elseif ns=="" then t[n]=tg else t[n]=ns..":"..tg end end return t end end local no_root={ no_root=true } local function redo_ni(d) for k=1,#d do local dk=d[k] if type(dk)=="table" then dk.ni=k end end end local function xmltoelement(whatever,root) if not whatever then return nil end local element if type(whatever)=="string" then element=xmlinheritedconvert(whatever,root) else element=whatever end if element.error then return whatever end if element then end return element end xml.toelement=xmltoelement local function copiedelement(element,newparent) if type(element)=="string" then return element else element=xmlcopy(element).dt if newparent and type(element)=="table" then element.__p__=newparent end return element end end function xml.delete(root,pattern) if not pattern or pattern=="" then local p=root.__p__ if p then if trace_manipulations then report('deleting',"--",c,root) end local d=p.dt remove(d,root.ni) redo_ni(d) end else local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] local p=e.__p__ if p then if trace_manipulations then report('deleting',pattern,c,e) end local d=p.dt remove(d,e.ni) redo_ni(d) end end end end end function xml.replace(root,pattern,whatever) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] local p=e.__p__ if p then if trace_manipulations then report('replacing',pattern,c,e) end local d=p.dt d[e.ni]=copiedelement(element,p) redo_ni(d) end end end end local function wrap(e,wrapper) local t={ rn=e.rn, tg=e.tg, ns=e.ns, at=e.at, dt=e.dt, __p__=e, } setmetatable(t,getmetatable(e)) e.rn=wrapper.rn or e.rn or "" e.tg=wrapper.tg or e.tg or "" e.ns=wrapper.ns or e.ns or "" e.at=fastcopy(wrapper.at) e.dt={ t } end function xml.wrap(root,pattern,whatever) if whatever then local wrapper=xmltoelement(whatever,root) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] if trace_manipulations then report('wrapping',pattern,c,e) end wrap(e,wrapper) end end else wrap(root,xmltoelement(pattern)) end end local function inject_element(root,pattern,whatever,prepend) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) local function inject_e(e) local r=e.__p__ local d,k,rri=r.dt,e.ni,r.ri local edt=(rri and d[rri].dt) or (d and d[k] and d[k].dt) if edt then local be,af local cp=copiedelement(element,e) if prepend then be,af=cp,edt else be,af=edt,cp end local bn=#be for i=1,#af do bn=bn+1 be[bn]=af[i] end if rri then r.dt[rri].dt=be else d[k].dt=be end redo_ni(d) end end if not collected then elseif collected.tg then inject_e(collected) else for c=1,#collected do inject_e(collected[c]) end end end local function insert_element(root,pattern,whatever,before) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) local function insert_e(e) local r=e.__p__ local d,k=r.dt,e.ni if not before then k=k+1 end insert(d,k,copiedelement(element,r)) redo_ni(d) end if not collected then elseif collected.tg then insert_e(collected) else for c=1,#collected do insert_e(collected[c]) end end end xml.insert_element=insert_element xml.insertafter=insert_element xml.insertbefore=function(r,p,e) insert_element(r,p,e,true) end xml.injectafter=inject_element xml.injectbefore=function(r,p,e) inject_element(r,p,e,true) end local function include(xmldata,pattern,attribute,recursive,loaddata) pattern=pattern or 'include' loaddata=loaddata or io.loaddata local collected=xmlapplylpath(xmldata,pattern) if collected then for c=1,#collected do local ek=collected[c] local name=nil local ekdt=ek.dt local ekat=ek.at local epdt=ek.__p__.dt if not attribute or attribute=="" then name=(type(ekdt)=="table" and ekdt[1]) or ekdt end if not name then for a in gmatch(attribute or "href","([^|]+)") do name=ekat[a] if name then break end end end local data=(name and name~="" and loaddata(name)) or "" if data=="" then epdt[ek.ni]="" elseif ekat["parse"]=="text" then epdt[ek.ni]=xml.escaped(data) else local xi=xmlinheritedconvert(data,xmldata) if not xi then epdt[ek.ni]="" else if recursive then include(xi,pattern,attribute,recursive,loaddata) end epdt[ek.ni]=xml.body(xi) end end end end end xml.include=include local function stripelement(e,nolines,anywhere) local edt=e.dt if edt then if anywhere then local t,n={},0 for e=1,#edt do local str=edt[e] if type(str)~="string" then n=n+1 t[n]=str elseif str~="" then if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"^%s*(.-)%s*$","%1") if str~="" then n=n+1 t[n]=str end end end e.dt=t else if #edt>0 then local str=edt[1] if type(str)~="string" then elseif str=="" then remove(edt,1) else if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"^%s+","") if str=="" then remove(edt,1) else edt[1]=str end end end local nedt=#edt if nedt>0 then local str=edt[nedt] if type(str)~="string" then elseif str=="" then remove(edt) else if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"%s+$","") if str=="" then remove(edt) else edt[nedt]=str end end end end end return e end xml.stripelement=stripelement function xml.strip(root,pattern,nolines,anywhere) local collected=xmlapplylpath(root,pattern) if collected then for i=1,#collected do stripelement(collected[i],nolines,anywhere) end end end local function renamespace(root,oldspace,newspace) local ndt=#root.dt for i=1,ndt or 0 do local e=root[i] if type(e)=="table" then if e.ns==oldspace then e.ns=newspace if e.rn then e.rn=newspace end end local edt=e.dt if edt then renamespace(edt,oldspace,newspace) end end end end xml.renamespace=renamespace function xml.remaptag(root,pattern,newtg) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].tg=newtg end end end function xml.remapnamespace(root,pattern,newns) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].ns=newns end end end function xml.checknamespace(root,pattern,newns) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] if (not e.rn or e.rn=="") and e.ns=="" then e.rn=newns end end end end function xml.remapname(root,pattern,newtg,newns,newrn) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] e.tg,e.ns,e.rn=newtg,newns,newrn end end end function xml.cdatatotext(e) local dt=e.dt if #dt==1 then local first=dt[1] if first.tg=="@cd@" then e.dt=first.dt end else end end function xml.texttocdata(e) local dt=e.dt local s=xml.tostring(dt) e.tg="@cd@" e.special=true e.ns="" e.rn="" e.dt={ s } e.at=nil end function xml.elementtocdata(e) local dt=e.dt local s=xml.tostring(e) e.tg="@cd@" e.special=true e.ns="" e.rn="" e.dt={ s } e.at=nil end xml.builtinentities=table.tohash { "amp","quot","apos","lt","gt" } local entities=characters and characters.entities or nil local builtinentities=xml.builtinentities function xml.addentitiesdoctype(root,option) if not entities then require("char-ent") entities=characters.entities end if entities and root and root.tg=="@rt@" and root.statistics then local list={} local hexify=option=="hexadecimal" for k,v in table.sortedhash(root.statistics.entities.names) do if not builtinentities[k] then local e=entities[k] if not e then e=format("[%s]",k) elseif hexify then e=format("&#%05X;",utfbyte(k)) end list[#list+1]=format(" ",k,e) end end local dt=root.dt local n=dt[1].tg=="@pi@" and 2 or 1 if #list>0 then insert(dt,n,{ "\n" }) insert(dt,n,{ tg="@dt@", dt={ format("Something [\n%s\n] ",concat(list)) }, ns="", special=true, }) insert(dt,n,{ "\n\n" }) else end end end xml.all=xml.each xml.insert=xml.insertafter xml.inject=xml.injectafter xml.after=xml.insertafter xml.before=xml.insertbefore xml.process=xml.each xml.obsolete=xml.obsolete or {} local obsolete=xml.obsolete xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect xml.delete_element=xml.delete obsolete.delete_element=xml.delete xml.replace_element=xml.replace obsolete.replace_element=xml.replacet xml.each_element=xml.each obsolete.each_element=xml.each xml.process_elements=xml.process obsolete.process_elements=xml.process xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter xml.insert_element_before=xml.insertbefore obsolete.insert_element_before=xml.insertbefore xml.inject_element_after=xml.injectafter obsolete.inject_element_after=xml.injectafter xml.inject_element_before=xml.injectbefore obsolete.inject_element_before=xml.injectbefore xml.process_attributes=xml.processattributes obsolete.process_attributes=xml.processattributes xml.collect_texts=xml.collecttexts obsolete.collect_texts=xml.collecttexts xml.inject_element=xml.inject obsolete.inject_element=xml.inject xml.remap_tag=xml.remaptag obsolete.remap_tag=xml.remaptag xml.remap_name=xml.remapname obsolete.remap_name=xml.remapname xml.remap_namespace=xml.remapnamespace obsolete.remap_namespace=xml.remapnamespace function xml.cdata(e) if e then local dt=e.dt if dt and #dt==1 then local first=dt[1] return first.tg=="@cd@" and first.dt[1] or "" end end return "" end function xml.finalizers.xml.cdata(collected) if collected then local e=collected[1] if e then local dt=e.dt if dt and #dt==1 then local first=dt[1] return first.tg=="@cd@" and first.dt[1] or "" end end end return "" end function xml.insertcomment(e,str,n) table.insert(e.dt,n or 1,{ tg="@cm@", ns="", special=true, at={}, dt={ str }, }) end function xml.setcdata(e,str) e.dt={ { tg="@cd@", ns="", special=true, at={}, dt={ str }, } } end function xml.separate(x,pattern) local collected=xmlapplylpath(x,pattern) if collected then for c=1,#collected do local e=collected[c] local d=e.dt if d==x then report_xml("warning: xml.separate changes root") x=d end local t,n={ "\n" },1 local i,nd=1,#d while i<=nd do while i<=nd do local di=d[i] if type(di)=="string" then if di=="\n" or find(di,"^%s+$") then i=i+1 else d[i]=strip(di) break end else break end end if i>nd then break end t[n+1]="\n" t[n+2]=d[i] t[n+3]="\n" n=n+3 i=i+1 end t[n+1]="\n" setmetatable(t,getmetatable(d)) e.dt=t end end return x end local helpers=xml.helpers or {} xml.helpers=helpers local function normal(e,action) local edt=e.dt if edt then for i=1,#edt do local str=edt[i] if type(str)=="string" and str~="" then edt[i]=action(str) end end end end local function recurse(e,action) local edt=e.dt if edt then for i=1,#edt do local str=edt[i] if type(str)~="string" then recurse(str,action,recursive) elseif str~="" then edt[i]=action(str) end end end end function helpers.recursetext(collected,action,recursive) if recursive then for i=1,#collected do recurse(collected[i],action) end else for i=1,#collected do normal(collected[i],action) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true -- original size: 10274, stripped down to: 7538 if not modules then modules={} end modules ['lxml-xml']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat=table.concat local find,lower,upper=string.find,string.lower,string.upper local xml=xml local finalizers=xml.finalizers.xml local xmlfilter=xml.filter local xmltostring=xml.tostring local xmlserialize=xml.serialize local xmlcollected=xml.collected local xmlnewhandlers=xml.newhandlers local function first(collected) return collected and collected[1] end local function last(collected) return collected and collected[#collected] end local function all(collected) return collected end local reverse=table.reversed local function attribute(collected,name) if collected and #collected>0 then local at=collected[1].at return at and at[name] end end local function att(id,name) local at=id.at return at and at[name] end local function count(collected) return collected and #collected or 0 end local function position(collected,n) if not collected then return 0 end local nc=#collected if nc==0 then return 0 end n=tonumber(n) or 0 if n<0 then return collected[nc+n+1] elseif n>0 then return collected[n] else return collected[1].mi or 0 end end local function match(collected) return collected and #collected>0 and collected[1].mi or 0 end local function index(collected) return collected and #collected>0 and collected[1].ni or 0 end local function attributes(collected,arguments) if collected and #collected>0 then local at=collected[1].at if arguments then return at[arguments] elseif next(at) then return at end end end local function chainattribute(collected,arguments) if collected and #collected>0 then local e=collected[1] while e do local at=e.at if at then local a=at[arguments] if a then return a end else break end e=e.__p__ end end return "" end local function raw(collected) if collected and #collected>0 then local e=collected[1] or collected return e and xmltostring(e) or "" else return "" end end local xmltexthandler=xmlnewhandlers { name="string", initialize=function() result={} return result end, finalize=function() return concat(result) end, handle=function(...) result[#result+1]=concat {... } end, escape=false, } local function xmltotext(root) local dt=root.dt if not dt then return "" end local nt=#dt if nt==0 then return "" elseif nt==1 and type(dt[1])=="string" then return dt[1] else return xmlserialize(root,xmltexthandler) or "" end end local function text(collected) if collected then local e=collected[1] or collected return e and xmltotext(e) or "" else return "" end end local function texts(collected) if not collected then return {} end local nc=#collected if nc==0 then return {} end local t,n={},0 for c=1,nc do local e=collected[c] if e and e.dt then n=n+1 t[n]=e.dt end end return t end local function tag(collected,n) if not collected then return end local nc=#collected if nc==0 then return end local c if n==0 or not n then c=collected[1] elseif n>1 then c=collected[n] else c=collected[nc-n+1] end return c and c.tg end local function name(collected,n) if not collected then return end local nc=#collected if nc==0 then return end local c if n==0 or not n then c=collected[1] elseif n>1 then c=collected[n] else c=collected[nc-n+1] end if not c then elseif c.ns=="" then return c.tg else return c.ns..":"..c.tg end end local function tags(collected,nonamespace) if not collected then return end local nc=#collected if nc==0 then return end local t,n={},0 for c=1,nc do local e=collected[c] local ns,tg=e.ns,e.tg n=n+1 if nonamespace or ns=="" then t[n]=tg else t[n]=ns..":"..tg end end return t end local function empty(collected,spacesonly) if not collected then return true end local nc=#collected if nc==0 then return true end for c=1,nc do local e=collected[c] if e then local edt=e.dt if edt then local n=#edt if n==1 then local edk=edt[1] local typ=type(edk) if typ=="table" then return false elseif edk~="" then return false elseif spacesonly and not find(edk,"%S") then return false end elseif n>1 then return false end end end end return true end finalizers.first=first finalizers.last=last finalizers.all=all finalizers.reverse=reverse finalizers.elements=all finalizers.default=all finalizers.attribute=attribute finalizers.att=att finalizers.count=count finalizers.position=position finalizers.match=match finalizers.index=index finalizers.attributes=attributes finalizers.chainattribute=chainattribute finalizers.text=text finalizers.texts=texts finalizers.tag=tag finalizers.name=name finalizers.tags=tags finalizers.empty=empty function xml.first(id,pattern) return first(xmlfilter(id,pattern)) end function xml.last(id,pattern) return last(xmlfilter(id,pattern)) end function xml.count(id,pattern) return count(xmlfilter(id,pattern)) end function xml.attribute(id,pattern,a,default) return attribute(xmlfilter(id,pattern),a,default) end function xml.raw(id,pattern) if pattern then return raw(xmlfilter(id,pattern)) else return raw(id) end end function xml.text(id,pattern) if pattern then local collected=xmlfilter(id,pattern) return collected and #collected>0 and xmltotext(collected[1]) or "" elseif id then return xmltotext(id) or "" else return "" end end xml.content=text function xml.position(id,pattern,n) return position(xmlfilter(id,pattern),n) end function xml.match(id,pattern) return match(xmlfilter(id,pattern)) end function xml.empty(id,pattern,spacesonly) return empty(xmlfilter(id,pattern),spacesonly) end xml.all=xml.filter xml.index=xml.position xml.found=xml.filter local function totable(x) local t={} for e in xmlcollected(x[1] or x,"/*") do t[e.tg]=xmltostring(e.dt) or "" end return next(t) and t or nil end xml.table=totable finalizers.table=totable local function textonly(e,t) if e then local edt=e.dt if edt then for i=1,#edt do local e=edt[i] if type(e)=="table" then textonly(e,t) else t[#t+1]=e end end end end return t end function xml.textonly(e) return concat(textonly(e,{})) end function finalizers.lowerall(collected) for c=1,#collected do local e=collected[c] if not e.special then e.tg=lower(e.tg) local eat=e.at if eat then local t={} for k,v in next,eat do t[lower(k)]=v end e.at=t end end end end function finalizers.upperall(collected) for c=1,#collected do local e=collected[c] if not e.special then e.tg=upper(e.tg) local eat=e.at if eat then local t={} for k,v in next,eat do t[upper(k)]=v end e.at=t end end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-xml"] = package.loaded["trac-xml"] or true -- original size: 6351, stripped down to: 4919 if not modules then modules={} end modules ['trac-xml']={ version=1.001, comment="companion to trac-log.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local formatters=string.formatters local reporters=logs.reporters local xmlserialize=xml.serialize local xmlcollected=xml.collected local xmltext=xml.text local xmlfirst=xml.first local function showhelp(specification,...) local root=xml.convert(specification.helpinfo or "") if not root then return end local xs=xml.gethandlers("string") xml.sethandlersfunction(xs,"short",function(e,handler) xmlserialize(e.dt,handler) end) xml.sethandlersfunction(xs,"ref",function(e,handler) handler.handle("--"..e.at.name) end) local wantedcategories=select("#",...)==0 and true or table.tohash {... } local nofcategories=xml.count(root,"/application/flags/category") local report=specification.report for category in xmlcollected(root,"/application/flags/category") do local categoryname=category.at.name or "" if wantedcategories==true or wantedcategories[categoryname] then if nofcategories>1 then report("%s options:",categoryname) report() end for subcategory in xmlcollected(category,"/subcategory") do for flag in xmlcollected(subcategory,"/flag") do local name=flag.at.name local value=flag.at.value local short=xmltext(xmlfirst(flag,"/short")) if value then report("--%-20s %s",formatters["%s=%s"](name,value),short) else report("--%-20s %s",name,short) end end report() end end end for category in xmlcollected(root,"/application/examples/category") do local title=xmltext(xmlfirst(category,"/title")) if title and title~="" then report() report(title) report() end for subcategory in xmlcollected(category,"/subcategory") do for example in xmlcollected(subcategory,"/example") do local command=xmltext(xmlfirst(example,"/command")) local comment=xmltext(xmlfirst(example,"/comment")) report(command) end report() end end for comment in xmlcollected(root,"/application/comments/comment") do local comment=xmltext(comment) report() report(comment) report() end end local reporthelp=reporters.help local exporthelp=reporters.export local function xmlfound(t) local helpinfo=t.helpinfo if type(helpinfo)=="table" then return false end if type(helpinfo)~="string" then helpinfo="Warning: no helpinfo found." t.helpinfo=helpinfo return false end if string.find(helpinfo,".xml$") then local ownscript=environment.ownscript local helpdata=false if ownscript then local helpfile=file.join(file.pathpart(ownscript),helpinfo) helpdata=io.loaddata(helpfile) if helpdata=="" then helpdata=false end end if not helpdata then local helpfile=resolvers.findfile(helpinfo,"tex") helpdata=helpfile and io.loaddata(helpfile) end if helpdata and helpdata~="" then helpinfo=helpdata else helpinfo=formatters["Warning: help file %a is not found."](helpinfo) end end t.helpinfo=helpinfo return string.find(t.helpinfo,"^<%?xml") and true or false end function reporters.help(t,...) if xmlfound(t) then showhelp(t,...) else reporthelp(t,...) end end function reporters.export(t,methods,filename) if not xmlfound(t) then return exporthelp(t) end if not methods or methods=="" then methods=environment.arguments["exporthelp"] end if not filename or filename=="" then filename=environment.files[1] end dofile(resolvers.findfile("trac-exp.lua","tex")) local exporters=logs.exporters if not exporters or not methods then return exporthelp(t) end if methods=="all" then methods=table.keys(exporters) elseif type(methods)=="string" then methods=utilities.parsers.settings_to_array(methods) else return exporthelp(t) end if type(filename)~="string" or filename=="" then filename=false elseif file.pathpart(filename)=="" then t.report("export file %a will not be saved on the current path (safeguard)",filename) return end for i=1,#methods do local method=methods[i] local exporter=exporters[method] if exporter then local result=exporter(t,method) if result and result~="" then if filename then local fullname=file.replacesuffix(filename,method) t.report("saving export in %a",fullname) io.savedata(fullname,result) else reporters.lines(t,result) end else t.report("no output from exporter %a",method) end else t.report("unknown exporter %a",method) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-ini"] = package.loaded["data-ini"] or true -- original size: 7898, stripped down to: 5501 if not modules then modules={} end modules ['data-ini']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find,gmatch,char=string.gsub,string.find,string.gmatch,string.char local next,type=next,type local filedirname,filebasename,filejoin=file.dirname,file.basename,file.join local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_detail=false trackers.register("resolvers.details",function(v) trace_detail=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_initialization=logs.reporter("resolvers","initialization") local ostype,osname,ossetenv,osgetenv=os.type,os.name,os.setenv,os.getenv resolvers=resolvers or {} local resolvers=resolvers texconfig.kpse_init=false texconfig.shell_escape='t' if not (environment and environment.default_texmfcnf) and kpse and kpse.default_texmfcnf then local default_texmfcnf=kpse.default_texmfcnf() default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTOLOC","selfautoloc:") default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTODIR","selfautodir:") default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTOPARENT","selfautoparent:") default_texmfcnf=gsub(default_texmfcnf,"$HOME","home:") environment.default_texmfcnf=default_texmfcnf end kpse={ original=kpse } setmetatable(kpse,{ __index=function(kp,name) report_initialization("fatal error: kpse library is accessed (key: %s)",name) os.exit() end } ) do local osfontdir=osgetenv("OSFONTDIR") if osfontdir and osfontdir~="" then elseif osname=="windows" then ossetenv("OSFONTDIR","c:/windows/fonts//") elseif osname=="macosx" then ossetenv("OSFONTDIR","$HOME/Library/Fonts//;/Library/Fonts//;/System/Library/Fonts//") end end do local homedir=osgetenv(ostype=="windows" and 'USERPROFILE' or 'HOME') or '' if not homedir or homedir=="" then homedir=char(127) end homedir=file.collapsepath(homedir) ossetenv("HOME",homedir) ossetenv("USERPROFILE",homedir) environment.homedir=homedir end do local args=environment.originalarguments or arg if not environment.ownmain then environment.ownmain=status and string.match(string.lower(status.banner),"this is ([%a]+)") or "luatex" end local ownbin=environment.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex" local ownpath=environment.ownpath or os.selfdir ownbin=file.collapsepath(ownbin) ownpath=file.collapsepath(ownpath) if not ownpath or ownpath=="" or ownpath=="unset" then ownpath=args[-1] or arg[-1] ownpath=ownpath and filedirname(gsub(ownpath,"\\","/")) if not ownpath or ownpath=="" then ownpath=args[-0] or arg[-0] ownpath=ownpath and filedirname(gsub(ownpath,"\\","/")) end local binary=ownbin if not ownpath or ownpath=="" then ownpath=ownpath and filedirname(binary) end if not ownpath or ownpath=="" then if os.binsuffix~="" then binary=file.replacesuffix(binary,os.binsuffix) end local path=osgetenv("PATH") if path then for p in gmatch(path,"[^"..io.pathseparator.."]+") do local b=filejoin(p,binary) if lfs.isfile(b) then local olddir=lfs.currentdir() if lfs.chdir(p) then local pp=lfs.currentdir() if trace_locating and p~=pp then report_initialization("following symlink %a to %a",p,pp) end ownpath=pp lfs.chdir(olddir) else if trace_locating then report_initialization("unable to check path %a",p) end ownpath=p end break end end end end if not ownpath or ownpath=="" then ownpath="." report_initialization("forcing fallback to ownpath %a",ownpath) elseif trace_locating then report_initialization("using ownpath %a",ownpath) end end environment.ownbin=ownbin environment.ownpath=ownpath end resolvers.ownpath=environment.ownpath function resolvers.getownpath() return environment.ownpath end do local ownpath=environment.ownpath or dir.current() if ownpath then ossetenv('SELFAUTOLOC',file.collapsepath(ownpath)) ossetenv('SELFAUTODIR',file.collapsepath(ownpath.."/..")) ossetenv('SELFAUTOPARENT',file.collapsepath(ownpath.."/../..")) else report_initialization("error: unable to locate ownpath") os.exit() end end local texos=environment.texos or osgetenv("TEXOS") local texmfos=environment.texmfos or osgetenv('SELFAUTODIR') if not texos or texos=="" then texos=file.basename(texmfos) end ossetenv('TEXMFOS',texmfos) ossetenv('TEXOS',texos) ossetenv('SELFAUTOSYSTEM',os.platform) environment.texos=texos environment.texmfos=texmfos local texroot=environment.texroot or osgetenv("TEXROOT") if not texroot or texroot=="" then texroot=osgetenv('SELFAUTOPARENT') ossetenv('TEXROOT',texroot) end environment.texroot=file.collapsepath(texroot) if profiler then directives.register("system.profile",function() profiler.start("luatex-profile.log") end) end if not resolvers.resolve then function resolvers.resolve (s) return s end function resolvers.unresolve(s) return s end function resolvers.repath (s) return s end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-exp"] = package.loaded["data-exp"] or true -- original size: 14654, stripped down to: 9517 if not modules then modules={} end modules ['data-exp']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub local concat,sort=table.concat,table.sort local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local Ct,Cs,Cc,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.P,lpeg.C,lpeg.S local type,next=type,next local ostype=os.type local collapsepath=file.collapsepath local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_expansions=logs.reporter("resolvers","expansions") local resolvers=resolvers local function f_first(a,b) local t,n={},0 for s in gmatch(b,"[^,]+") do n=n+1;t[n]=a..s end return concat(t,",") end local function f_second(a,b) local t,n={},0 for s in gmatch(a,"[^,]+") do n=n+1;t[n]=s..b end return concat(t,",") end local function f_both(a,b) local t,n={},0 for sb in gmatch(b,"[^,]+") do for sa in gmatch(a,"[^,]+") do n=n+1;t[n]=sa..sb end end return concat(t,",") end local left=P("{") local right=P("}") local var=P((1-S("{}" ))^0) local set=P((1-S("{},"))^0) local other=P(1) local l_first=Cs((Cc("{")*(C(set)*left*C(var)*right/f_first)*Cc("}")+other )^0 ) local l_second=Cs((Cc("{")*(left*C(var)*right*C(set)/f_second)*Cc("}")+other )^0 ) local l_both=Cs((Cc("{")*(left*C(var)*right*left*C(var)*right/f_both)*Cc("}")+other )^0 ) local l_rest=Cs((left*var*(left/"")*var*(right/"")*var*right+other )^0 ) local stripper_1=lpeg.stripper ("{}@") local replacer_1=lpeg.replacer { { ",}",",@}" },{ "{,","{@," },} local function splitpathexpr(str,newlist,validate) if trace_expansions then report_expansions("expanding variable %a",str) end local t,ok,done=newlist or {},false,false local n=#t str=lpegmatch(replacer_1,str) repeat local old=str repeat local old=str str=lpegmatch(l_first,str) until old==str repeat local old=str str=lpegmatch(l_second,str) until old==str repeat local old=str str=lpegmatch(l_both,str) until old==str repeat local old=str str=lpegmatch(l_rest,str) until old==str until old==str str=lpegmatch(stripper_1,str) if validate then for s in gmatch(str,"[^,]+") do s=validate(s) if s then n=n+1 t[n]=s end end else for s in gmatch(str,"[^,]+") do n=n+1 t[n]=s end end if trace_expansions then for k=1,#t do report_expansions("% 4i: %s",k,t[k]) end end return t end local function validate(s) s=collapsepath(s) return s~="" and not find(s,"^!*unset/*$") and s end resolvers.validatedpath=validate function resolvers.expandedpathfromlist(pathlist) local newlist={} for k=1,#pathlist do splitpathexpr(pathlist[k],newlist,validate) end return newlist end local cleanup=lpeg.replacer { { "!","" }, { "\\","/" }, } function resolvers.cleanpath(str) local doslashes=(P("\\")/"/"+1)^0 local donegation=(P("!")/"" )^0 local homedir=lpegmatch(Cs(donegation*doslashes),environment.homedir or "") if homedir=="~" or homedir=="" or not lfs.isdir(homedir) then if trace_expansions then report_expansions("no home dir set, ignoring dependent paths") end function resolvers.cleanpath(str) if not str or find(str,"~") then return "" else return lpegmatch(cleanup,str) end end else local dohome=((P("~")+P("$HOME"))/homedir)^0 local cleanup=Cs(donegation*dohome*doslashes) function resolvers.cleanpath(str) return str and lpegmatch(cleanup,str) or "" end end return resolvers.cleanpath(str) end local expandhome=P("~")/"$HOME" local dodouble=P('"')/""*(expandhome+(1-P('"')))^0*P('"')/"" local dosingle=P("'")/""*(expandhome+(1-P("'")))^0*P("'")/"" local dostring=(expandhome+1 )^0 local stripper=Cs( lpegpatterns.unspacer*(dosingle+dodouble+dostring)*lpegpatterns.unspacer ) function resolvers.checkedvariable(str) return type(str)=="string" and lpegmatch(stripper,str) or str end local cache={} local splitter=lpeg.tsplitat(";") local backslashswapper=lpeg.replacer("\\","/") local function splitconfigurationpath(str) if str then local found=cache[str] if not found then if str=="" then found={} else local split=lpegmatch(splitter,lpegmatch(backslashswapper,str)) found={} local noffound=0 for i=1,#split do local s=split[i] if not find(s,"^{*unset}*") then noffound=noffound+1 found[noffound]=s end end if trace_expansions then report_expansions("splitting path specification %a",str) for k=1,noffound do report_expansions("% 4i: %s",k,found[k]) end end cache[str]=found end end return found end end resolvers.splitconfigurationpath=splitconfigurationpath function resolvers.splitpath(str) if type(str)=='table' then return str else return splitconfigurationpath(str) end end function resolvers.joinpath(str) if type(str)=='table' then return file.joinpath(str) else return str end end local attributes,directory=lfs.attributes,lfs.dir local weird=P(".")^1+lpeg.anywhere(S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t")) local timer={} local scanned={} local nofscans=0 local scancache={} local function scan(files,spec,path,n,m,r) local full=(path=="" and spec) or (spec..path..'/') local dirs={} local nofdirs=0 for name in directory(full) do if not lpegmatch(weird,name) then local mode=attributes(full..name,'mode') if mode=='file' then n=n+1 local f=files[name] if f then if type(f)=='string' then files[name]={ f,path } else f[#f+1]=path end else files[name]=path local lower=lower(name) if name~=lower then files["remap:"..lower]=name r=r+1 end end elseif mode=='directory' then m=m+1 nofdirs=nofdirs+1 if path~="" then dirs[nofdirs]=path..'/'..name else dirs[nofdirs]=name end end end end if nofdirs>0 then sort(dirs) for i=1,nofdirs do files,n,m,r=scan(files,spec,dirs[i],n,m,r) end end scancache[sub(full,1,-2)]=files return files,n,m,r end local fullcache={} function resolvers.scanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath=resolvers.resolve(path) if usecache then local files=fullcache[realpath] if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files,n,m,r=scan({},realpath..'/',"",0,0,0) files.__path__=path files.__files__=n files.__directories__=m files.__remappings__=r if trace_locating then report_expansions("%s files found on %s directories with %s uppercase remappings",n,m,r) end if usecache then scanned[#scanned+1]=realpath fullcache[realpath]=files end nofscans=nofscans+1 statistics.stoptiming(timer) return files end local function simplescan(files,spec,path) local full=(path=="" and spec) or (spec..path..'/') local dirs={} local nofdirs=0 for name in directory(full) do if not lpegmatch(weird,name) then local mode=attributes(full..name,'mode') if mode=='file' then if not files[name] then files[name]=path end elseif mode=='directory' then nofdirs=nofdirs+1 if path~="" then dirs[nofdirs]=path..'/'..name else dirs[nofdirs]=name end end end end if nofdirs>0 then sort(dirs) for i=1,nofdirs do files=simplescan(files,spec,dirs[i]) end end return files end local simplecache={} local nofsharedscans=0 function resolvers.simplescanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath=resolvers.resolve(path) if usecache then local files=simplecache[realpath] if not files then files=scancache[realpath] if files then nofsharedscans=nofsharedscans+1 end end if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files=simplescan({},realpath..'/',"") if trace_locating then report_expansions("%s files found",table.count(files)) end if usecache then scanned[#scanned+1]=realpath simplecache[realpath]=files end nofscans=nofscans+1 statistics.stoptiming(timer) return files end function resolvers.scandata() table.sort(scanned) return { n=nofscans, shared=nofsharedscans, time=statistics.elapsedtime(timer), paths=scanned, } end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true -- original size: 8762, stripped down to: 6484 if not modules then modules={} end modules ['data-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local lower,gsub=string.lower,string.gsub local resolvers=resolvers local allocate=utilities.storage.allocate local setmetatableindex=table.setmetatableindex local suffixonly=file.suffixonly local formats=allocate() local suffixes=allocate() local dangerous=allocate() local suffixmap=allocate() resolvers.formats=formats resolvers.suffixes=suffixes resolvers.dangerous=dangerous resolvers.suffixmap=suffixmap local luasuffixes=utilities.lua.suffixes local relations=allocate { core={ ofm={ names={ "ofm","omega font metric","omega font metrics" }, variable='OFMFONTS', suffixes={ 'ofm','tfm' }, }, ovf={ names={ "ovf","omega virtual font","omega virtual fonts" }, variable='OVFFONTS', suffixes={ 'ovf','vf' }, }, tfm={ names={ "tfm","tex font metric","tex font metrics" }, variable='TFMFONTS', suffixes={ 'tfm' }, }, vf={ names={ "vf","virtual font","virtual fonts" }, variable='VFFONTS', suffixes={ 'vf' }, }, otf={ names={ "otf","opentype","opentype font","opentype fonts"}, variable='OPENTYPEFONTS', suffixes={ 'otf' }, }, ttf={ names={ "ttf","truetype","truetype font","truetype fonts","truetype collection","truetype collections","truetype dictionary","truetype dictionaries" }, variable='TTFONTS', suffixes={ 'ttf','ttc','dfont' }, }, afm={ names={ "afm","adobe font metric","adobe font metrics" }, variable="AFMFONTS", suffixes={ "afm" }, }, pfb={ names={ "pfb","type1","type 1","type1 font","type 1 font","type1 fonts","type 1 fonts" }, variable='T1FONTS', suffixes={ 'pfb','pfa' }, }, fea={ names={ "fea","font feature","font features","font feature file","font feature files" }, variable='FONTFEATURES', suffixes={ 'fea' }, }, cid={ names={ "cid","cid map","cid maps","cid file","cid files" }, variable='FONTCIDMAPS', suffixes={ 'cid','cidmap' }, }, fmt={ names={ "fmt","format","tex format" }, variable='TEXFORMATS', suffixes={ 'fmt' }, }, mem={ names={ 'mem',"metapost format" }, variable='MPMEMS', suffixes={ 'mem' }, }, mp={ names={ "mp" }, variable='MPINPUTS', suffixes={ 'mp','mpvi','mpiv','mpii' }, }, tex={ names={ "tex" }, variable='TEXINPUTS', suffixes={ 'tex',"mkvi","mkiv","mkii" }, }, icc={ names={ "icc","icc profile","icc profiles" }, variable='ICCPROFILES', suffixes={ 'icc' }, }, texmfscripts={ names={ "texmfscript","texmfscripts","script","scripts" }, variable='TEXMFSCRIPTS', suffixes={ 'rb','pl','py' }, }, lua={ names={ "lua" }, variable='LUAINPUTS', suffixes={ luasuffixes.lua,luasuffixes.luc,luasuffixes.tma,luasuffixes.tmc }, }, lib={ names={ "lib" }, variable='CLUAINPUTS', suffixes=os.libsuffix and { os.libsuffix } or { 'dll','so' }, }, bib={ names={ 'bib' }, suffixes={ 'bib' }, }, bst={ names={ 'bst' }, suffixes={ 'bst' }, }, fontconfig={ names={ 'fontconfig','fontconfig file','fontconfig files' }, variable='FONTCONFIG_PATH', }, }, obsolete={ enc={ names={ "enc","enc files","enc file","encoding files","encoding file" }, variable='ENCFONTS', suffixes={ 'enc' }, }, map={ names={ "map","map files","map file" }, variable='TEXFONTMAPS', suffixes={ 'map' }, }, lig={ names={ "lig files","lig file","ligature file","ligature files" }, variable='LIGFONTS', suffixes={ 'lig' }, }, opl={ names={ "opl" }, variable='OPLFONTS', suffixes={ 'opl' }, }, ovp={ names={ "ovp" }, variable='OVPFONTS', suffixes={ 'ovp' }, }, }, kpse={ base={ names={ 'base',"metafont format" }, variable='MFBASES', suffixes={ 'base','bas' }, }, cmap={ names={ 'cmap','cmap files','cmap file' }, variable='CMAPFONTS', suffixes={ 'cmap' }, }, cnf={ names={ 'cnf' }, suffixes={ 'cnf' }, }, web={ names={ 'web' }, suffixes={ 'web','ch' } }, cweb={ names={ 'cweb' }, suffixes={ 'w','web','ch' }, }, gf={ names={ 'gf' }, suffixes={ 'gf' }, }, mf={ names={ 'mf' }, variable='MFINPUTS', suffixes={ 'mf' }, }, mft={ names={ 'mft' }, suffixes={ 'mft' }, }, pk={ names={ 'pk' }, suffixes={ 'pk' }, }, }, } resolvers.relations=relations function resolvers.updaterelations() for category,categories in next,relations do for name,relation in next,categories do local rn=relation.names local rv=relation.variable local rs=relation.suffixes if rn and rv then for i=1,#rn do local rni=lower(gsub(rn[i]," ","")) formats[rni]=rv if rs then suffixes[rni]=rs for i=1,#rs do local rsi=rs[i] suffixmap[rsi]=rni end end end end if rs then end end end end resolvers.updaterelations() local function simplified(t,k) return k and rawget(t,lower(gsub(k," ",""))) or nil end setmetatableindex(formats,simplified) setmetatableindex(suffixes,simplified) setmetatableindex(suffixmap,simplified) function resolvers.suffixofformat(str) local s=suffixes[str] return s and s[1] or "" end function resolvers.suffixofformat(str) return suffixes[str] or {} end for name,format in next,formats do dangerous[name]=true end dangerous.tex=nil function resolvers.formatofvariable(str) return formats[str] or '' end function resolvers.formatofsuffix(str) return suffixmap[suffixonly(str)] or 'tex' end function resolvers.variableofformat(str) return formats[str] or '' end function resolvers.variableofformatorsuffix(str) local v=formats[str] if v then return v end v=suffixmap[suffixonly(str)] if v then return formats[v] end return '' end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true -- original size: 14615, stripped down to: 11208 if not modules then modules={} end modules ['data-tmp']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub,concat=string.format,string.lower,string.gsub,table.concat local concat,serialize,serializetofile=table.concat,table.serialize,table.tofile local mkdirs,isdir,isfile=dir.mkdirs,lfs.isdir,lfs.isfile local addsuffix,is_writable,is_readable=file.addsuffix,file.is_writable,file.is_readable local formatters=string.formatters local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local report_caches=logs.reporter("resolvers","caches") local report_resolvers=logs.reporter("resolvers","caching") local resolvers=resolvers local directive_cleanup=false directives.register("system.compile.cleanup",function(v) directive_cleanup=v end) local directive_strip=false directives.register("system.compile.strip",function(v) directive_strip=v end) local compile=utilities.lua.compile function utilities.lua.compile(luafile,lucfile,cleanup,strip) if cleanup==nil then cleanup=directive_cleanup end if strip==nil then strip=directive_strip end return compile(luafile,lucfile,cleanup,strip) end caches=caches or {} local caches=caches local luasuffixes=utilities.lua.suffixes caches.base=caches.base or "luatex-cache" caches.more=caches.more or "context" caches.direct=false caches.tree=false caches.force=true caches.ask=false caches.relocate=false caches.defaults={ "TMPDIR","TEMPDIR","TMP","TEMP","HOME","HOMEPATH" } local writable,readables,usedreadables=nil,{},{} local function identify() local texmfcaches=resolvers.cleanpathlist("TEXMFCACHE") if texmfcaches then for k=1,#texmfcaches do local cachepath=texmfcaches[k] if cachepath~="" then cachepath=resolvers.resolve(cachepath) cachepath=resolvers.cleanpath(cachepath) cachepath=file.collapsepath(cachepath) local valid=isdir(cachepath) if valid then if is_readable(cachepath) then readables[#readables+1]=cachepath if not writable and is_writable(cachepath) then writable=cachepath end end elseif not writable and caches.force then local cacheparent=file.dirname(cachepath) if is_writable(cacheparent) and true then if not caches.ask or io.ask(format("\nShould I create the cache path %s?",cachepath),"no",{ "yes","no" })=="yes" then mkdirs(cachepath) if isdir(cachepath) and is_writable(cachepath) then report_caches("path %a created",cachepath) writable=cachepath readables[#readables+1]=cachepath end end end end end end end local texmfcaches=caches.defaults if texmfcaches then for k=1,#texmfcaches do local cachepath=texmfcaches[k] cachepath=resolvers.expansion(cachepath) if cachepath~="" then cachepath=resolvers.resolve(cachepath) cachepath=resolvers.cleanpath(cachepath) local valid=isdir(cachepath) if valid and is_readable(cachepath) then if not writable and is_writable(cachepath) then readables[#readables+1]=cachepath writable=cachepath break end end end end end if not writable then report_caches("fatal error: there is no valid writable cache path defined") os.exit() elseif #readables==0 then report_caches("fatal error: there is no valid readable cache path defined") os.exit() end writable=dir.expandname(resolvers.cleanpath(writable)) local base,more,tree=caches.base,caches.more,caches.tree or caches.treehash() if tree then caches.tree=tree writable=mkdirs(writable,base,more,tree) for i=1,#readables do readables[i]=file.join(readables[i],base,more,tree) end else writable=mkdirs(writable,base,more) for i=1,#readables do readables[i]=file.join(readables[i],base,more) end end if trace_cache then for i=1,#readables do report_caches("using readable path %a (order %s)",readables[i],i) end report_caches("using writable path %a",writable) end identify=function() return writable,readables end return writable,readables end function caches.usedpaths(separator) local writable,readables=identify() if #readables>1 then local result={} local done={} for i=1,#readables do local readable=readables[i] if readable==writable then done[readable]=true result[#result+1]=formatters["readable+writable: %a"](readable) elseif usedreadables[i] then done[readable]=true result[#result+1]=formatters["readable: %a"](readable) end end if not done[writable] then result[#result+1]=formatters["writable: %a"](writable) end return concat(result,separator or " | ") else return writable or "?" end end function caches.configfiles() return concat(resolvers.instance.specification,";") end function caches.hashed(tree) tree=gsub(tree,"[\\/]+$","") tree=lower(tree) local hash=md5.hex(tree) if trace_cache or trace_locating then report_caches("hashing tree %a, hash %a",tree,hash) end return hash end function caches.treehash() local tree=caches.configfiles() if not tree or tree=="" then return false else return caches.hashed(tree) end end local r_cache,w_cache={},{} local function getreadablepaths(...) local tags={... } local hash=concat(tags,"/") local done=r_cache[hash] if not done then local writable,readables=identify() if #tags>0 then done={} for i=1,#readables do done[i]=file.join(readables[i],...) end else done=readables end r_cache[hash]=done end return done end local function getwritablepath(...) local tags={... } local hash=concat(tags,"/") local done=w_cache[hash] if not done then local writable,readables=identify() if #tags>0 then done=mkdirs(writable,...) else done=writable end w_cache[hash]=done end return done end caches.getreadablepaths=getreadablepaths caches.getwritablepath=getwritablepath function caches.getfirstreadablefile(filename,...) local rd=getreadablepaths(...) for i=1,#rd do local path=rd[i] local fullname=file.join(path,filename) if is_readable(fullname) then usedreadables[i]=true return fullname,path end end return caches.setfirstwritablefile(filename,...) end function caches.setfirstwritablefile(filename,...) local wr=getwritablepath(...) local fullname=file.join(wr,filename) return fullname,wr end function caches.define(category,subcategory) return function() return getwritablepath(category,subcategory) end end function caches.setluanames(path,name) return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc) end function caches.loaddata(readables,name) if type(readables)=="string" then readables={ readables } end for i=1,#readables do local path=readables[i] local tmaname,tmcname=caches.setluanames(path,name) local loader=false if isfile(tmcname) then loader=loadfile(tmcname) end if not loader and isfile(tmaname) then utilities.lua.compile(tmaname,tmcname) if isfile(tmcname) then loader=loadfile(tmcname) end if not loader then loader=loadfile(tmaname) end end if loader then loader=loader() collectgarbage("step") return loader end end return false end function caches.is_writable(filepath,filename) local tmaname,tmcname=caches.setluanames(filepath,filename) return is_writable(tmaname) end local saveoptions={ compact=true } function caches.savedata(filepath,filename,data,raw) local tmaname,tmcname=caches.setluanames(filepath,filename) local reduce,simplify=true,true if raw then reduce,simplify=false,false end data.cache_uuid=os.uuid() if caches.direct then file.savedata(tmaname,serialize(data,true,saveoptions)) else serializetofile(tmaname,data,true,saveoptions) end utilities.lua.compile(tmaname,tmcname) end local content_state={} function caches.contentstate() return content_state or {} end function caches.loadcontent(cachename,dataname) local name=caches.hashed(cachename) local full,path=caches.getfirstreadablefile(addsuffix(name,luasuffixes.lua),"trees") local filename=file.join(path,name) local blob=loadfile(addsuffix(filename,luasuffixes.luc)) or loadfile(addsuffix(filename,luasuffixes.lua)) if blob then local data=blob() if data and data.content then if data.type==dataname then if data.version==resolvers.cacheversion then content_state[#content_state+1]=data.uuid if trace_locating then report_resolvers("loading %a for %a from %a",dataname,cachename,filename) end return data.content else report_resolvers("skipping %a for %a from %a (version mismatch)",dataname,cachename,filename) end else report_resolvers("skipping %a for %a from %a (datatype mismatch)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (no content)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (invalid file)",dataname,cachename,filename) end end function caches.collapsecontent(content) for k,v in next,content do if type(v)=="table" and #v==1 then content[k]=v[1] end end end function caches.savecontent(cachename,dataname,content) local name=caches.hashed(cachename) local full,path=caches.setfirstwritablefile(addsuffix(name,luasuffixes.lua),"trees") local filename=file.join(path,name) local luaname=addsuffix(filename,luasuffixes.lua) local lucname=addsuffix(filename,luasuffixes.luc) if trace_locating then report_resolvers("preparing %a for %a",dataname,cachename) end local data={ type=dataname, root=cachename, version=resolvers.cacheversion, date=os.date("%Y-%m-%d"), time=os.date("%H:%M:%S"), content=content, uuid=os.uuid(), } local ok=io.savedata(luaname,serialize(data,true)) if ok then if trace_locating then report_resolvers("category %a, cachename %a saved in %a",dataname,cachename,luaname) end if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("%a compiled to %a",dataname,lucname) end return true else if trace_locating then report_resolvers("compiling failed for %a, deleting file %a",dataname,lucname) end os.remove(lucname) end elseif trace_locating then report_resolvers("unable to save %a in %a (access error)",dataname,luaname) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-met"] = package.loaded["data-met"] or true -- original size: 5137, stripped down to: 4007 if not modules then modules={} end modules ['data-met']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,format=string.find,string.format local sequenced=table.sequenced local addurlscheme,urlhashed=url.addscheme,url.hashed local getcurrentdir=lfs.currentdir local trace_locating=false local trace_methods=false trackers.register("resolvers.locating",function(v) trace_methods=v end) trackers.register("resolvers.methods",function(v) trace_methods=v end) local report_methods=logs.reporter("resolvers","methods") local allocate=utilities.storage.allocate local resolvers=resolvers local registered={} local function splitmethod(filename) if not filename then return { scheme="unknown",original=filename } end if type(filename)=="table" then return filename end filename=file.collapsepath(filename,".") if not find(filename,"://") then return { scheme="file",path=filename,original=filename,filename=filename } end local specification=url.hashed(filename) if not specification.scheme or specification.scheme=="" then return { scheme="file",path=filename,original=filename,filename=filename } else return specification end end resolvers.splitmethod=splitmethod local function methodhandler(what,first,...) local method=registered[what] if method then local how,namespace=method.how,method.namespace if how=="uri" or how=="url" then local specification=splitmethod(first) local scheme=specification.scheme local resolver=namespace and namespace[scheme] if resolver then if trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,scheme,first) end return resolver(specification,...) else resolver=namespace.default or namespace.file if resolver then if trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,"default",first) end return resolver(specification,...) elseif trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,"unset") end end elseif how=="tag" then local resolver=namespace and namespace[first] if resolver then if trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,first) end return resolver(...) else resolver=namespace.default or namespace.file if resolver then if trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,"default") end return resolver(...) elseif trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,"unset") end end end else report_methods("resolving, invalid method %a") end end resolvers.methodhandler=methodhandler function resolvers.registermethod(name,namespace,how) registered[name]={ how=how or "tag",namespace=namespace } namespace["byscheme"]=function(scheme,filename,...) if scheme=="file" then return methodhandler(name,filename,...) else return methodhandler(name,addurlscheme(filename,scheme),...) end end end local concatinators=allocate { notfound=file.join } local locators=allocate { notfound=function() end } local hashers=allocate { notfound=function() end } local generators=allocate { notfound=function() end } resolvers.concatinators=concatinators resolvers.locators=locators resolvers.hashers=hashers resolvers.generators=generators local registermethod=resolvers.registermethod registermethod("concatinators",concatinators,"tag") registermethod("locators",locators,"uri") registermethod("hashers",hashers,"uri") registermethod("generators",generators,"uri") end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-res"] = package.loaded["data-res"] or true -- original size: 61759, stripped down to: 42959 if not modules then modules={} end modules ['data-res']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find,lower,upper,match,gmatch=string.gsub,string.find,string.lower,string.upper,string.match,string.gmatch local concat,insert,sortedkeys=table.concat,table.insert,table.sortedkeys local next,type,rawget=next,type,rawget local os=os local P,S,R,C,Cc,Cs,Ct,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Carg local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local formatters=string.formatters local filedirname=file.dirname local filebasename=file.basename local suffixonly=file.suffixonly local filejoin=file.join local collapsepath=file.collapsepath local joinpath=file.joinpath local allocate=utilities.storage.allocate local settings_to_array=utilities.parsers.settings_to_array local setmetatableindex=table.setmetatableindex local luasuffixes=utilities.lua.suffixes local getcurrentdir=lfs.currentdir local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_detail=false trackers.register("resolvers.details",function(v) trace_detail=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_resolving=logs.reporter("resolvers","resolving") local resolvers=resolvers local expandedpathfromlist=resolvers.expandedpathfromlist local checkedvariable=resolvers.checkedvariable local splitconfigurationpath=resolvers.splitconfigurationpath local methodhandler=resolvers.methodhandler local initializesetter=utilities.setters.initialize local ostype,osname,osenv,ossetenv,osgetenv=os.type,os.name,os.env,os.setenv,os.getenv resolvers.cacheversion='1.0.1' resolvers.configbanner='' resolvers.homedir=environment.homedir resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" } resolvers.luacnfname="texmfcnf.lua" resolvers.luacnfstate="unknown" if environment.default_texmfcnf then resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf else resolvers.luacnfspec=concat ({ "home:texmf/web2c", "selfautoparent:/texmf-local/web2c", "selfautoparent:/texmf-context/web2c", "selfautoparent:/texmf-dist/web2c", "selfautoparent:/texmf/web2c", },";") end local unset_variable="unset" local formats=resolvers.formats local suffixes=resolvers.suffixes local dangerous=resolvers.dangerous local suffixmap=resolvers.suffixmap resolvers.defaultsuffixes={ "tex" } resolvers.instance=resolvers.instance or nil local instance=resolvers.instance or nil function resolvers.setenv(key,value,raw) if instance then instance.environment[key]=value ossetenv(key,raw and value or resolvers.resolve(value)) end end local function getenv(key) local value=rawget(instance.environment,key) if value and value~="" then return value else local e=osgetenv(key) return e~=nil and e~="" and checkedvariable(e) or "" end end resolvers.getenv=getenv resolvers.env=getenv local function resolve(k) return instance.expansions[k] end local dollarstripper=lpeg.stripper("$") local inhibitstripper=P("!")^0*Cs(P(1)^0) local backslashswapper=lpeg.replacer("\\","/") local somevariable=P("$")/"" local somekey=C(R("az","AZ","09","__","--")^1) local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1) local variableexpander=Cs((somevariable*(somekey/resolve)+somethingelse)^1 ) local cleaner=P("\\")/"/"+P(";")*S("!{}/\\")^0*P(";")^1/";" local variablecleaner=Cs((cleaner+P(1))^0) local somevariable=R("az","AZ","09","__","--")^1/resolve local variable=(P("$")/"")*(somevariable+(P("{")/"")*somevariable*(P("}")/"")) local variableresolver=Cs((variable+P(1))^0) local function expandedvariable(var) return lpegmatch(variableexpander,var) or var end function resolvers.newinstance() if trace_locating then report_resolving("creating instance") end local environment,variables,expansions,order=allocate(),allocate(),allocate(),allocate() local newinstance={ environment=environment, variables=variables, expansions=expansions, order=order, files=allocate(), setups=allocate(), found=allocate(), foundintrees=allocate(), hashes=allocate(), hashed=allocate(), specification=allocate(), lists=allocate(), data=allocate(), fakepaths=allocate(), remember=true, diskcache=true, renewcache=false, renewtree=false, loaderror=false, savelists=true, pattern=nil, force_suffixes=true, } setmetatableindex(variables,function(t,k) local v for i=1,#order do v=order[i][k] if v~=nil then t[k]=v return v end end if v==nil then v="" end t[k]=v return v end) setmetatableindex(environment,function(t,k) local v=osgetenv(k) if v==nil then v=variables[k] end if v~=nil then v=checkedvariable(v) or "" end v=resolvers.repath(v) t[k]=v return v end) setmetatableindex(expansions,function(t,k) local v=environment[k] if type(v)=="string" then v=lpegmatch(variableresolver,v) v=lpegmatch(variablecleaner,v) end t[k]=v return v end) return newinstance end function resolvers.setinstance(someinstance) instance=someinstance resolvers.instance=someinstance return someinstance end function resolvers.reset() return resolvers.setinstance(resolvers.newinstance()) end local function reset_hashes() instance.lists={} instance.found={} end local slash=P("/") local pathexpressionpattern=Cs ( Cc("^")*( Cc("%")*S(".-")+slash^2*P(-1)/"/.*" +slash^2/"/"+(1-slash)*P(-1)*Cc("/")+P(1) )^1*Cc("$") ) local cache={} local function makepathexpression(str) if str=="." then return "^%./$" else local c=cache[str] if not c then c=lpegmatch(pathexpressionpattern,str) cache[str]=c end return c end end local function reportcriticalvariables(cnfspec) if trace_locating then for i=1,#resolvers.criticalvars do local k=resolvers.criticalvars[i] local v=resolvers.getenv(k) or "unknown" report_resolving("variable %a set to %a",k,v) end report_resolving() if cnfspec then report_resolving("using configuration specification %a",type(cnfspec)=="table" and concat(cnfspec,",") or cnfspec) end report_resolving() end reportcriticalvariables=function() end end local function identify_configuration_files() local specification=instance.specification if #specification==0 then local cnfspec=getenv("TEXMFCNF") if cnfspec=="" then cnfspec=resolvers.luacnfspec resolvers.luacnfstate="default" else resolvers.luacnfstate="environment" end reportcriticalvariables(cnfspec) local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec)) local luacnfname=resolvers.luacnfname for i=1,#cnfpaths do local filepath=cnfpaths[i] local filename=collapsepath(filejoin(filepath,luacnfname)) local realname=resolvers.resolve(filename) if trace_locating then local fullpath=gsub(resolvers.resolve(collapsepath(filepath)),"//","/") local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c") report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath) end if lfs.isfile(realname) then specification[#specification+1]=filename if trace_locating then report_resolving("found configuration file %a",realname) end end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("configuration files already identified") end end local function load_configuration_files() local specification=instance.specification if #specification>0 then local luacnfname=resolvers.luacnfname for i=1,#specification do local filename=specification[i] local pathname=filedirname(filename) local filename=filejoin(pathname,luacnfname) local realname=resolvers.resolve(filename) local blob=loadfile(realname) if blob then local setups=instance.setups local data=blob() local parent=data and data.parent if parent then local filename=filejoin(pathname,parent) local realname=resolvers.resolve(filename) local blob=loadfile(realname) if blob then local parentdata=blob() if parentdata then report_resolving("loading configuration file %a",filename) data=table.merged(parentdata,data) end end end data=data and data.content if data then if trace_locating then report_resolving("loading configuration file %a",filename) report_resolving() end local variables=data.variables or {} local warning=false for k,v in next,data do local variant=type(v) if variant=="table" then initializesetter(filename,k,v) elseif variables[k]==nil then if trace_locating and not warning then report_resolving("variables like %a in configuration file %a should move to the 'variables' subtable", k,resolvers.resolve(filename)) warning=true end variables[k]=v end end setups[pathname]=variables if resolvers.luacnfstate=="default" then local cnfspec=variables["TEXMFCNF"] if cnfspec then if trace_locating then report_resolving("reloading configuration due to TEXMF redefinition") end resolvers.setenv("TEXMFCNF",cnfspec) instance.specification={} identify_configuration_files() load_configuration_files() resolvers.luacnfstate="configuration" break end end else if trace_locating then report_resolving("skipping configuration file %a (no content)",filename) end setups[pathname]={} instance.loaderror=true end elseif trace_locating then report_resolving("skipping configuration file %a (no valid format)",filename) end instance.order[#instance.order+1]=instance.setups[pathname] if instance.loaderror then break end end elseif trace_locating then report_resolving("warning: no lua configuration files found") end end local function load_file_databases() instance.loaderror,instance.files=false,allocate() if not instance.renewcache then local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] resolvers.hashers.byscheme(hash.type,hash.name) if instance.loaderror then break end end end end local function locate_file_databases() local texmfpaths=resolvers.expandedpathlist("TEXMF") if #texmfpaths>0 then for i=1,#texmfpaths do local path=collapsepath(texmfpaths[i]) path=gsub(path,"/+$","") local stripped=lpegmatch(inhibitstripper,path) if stripped~="" then local runtime=stripped==path path=resolvers.cleanpath(path) local spec=resolvers.splitmethod(stripped) if runtime and (spec.noscheme or spec.scheme=="file") then stripped="tree:///"..stripped elseif spec.scheme=="cache" or spec.scheme=="file" then stripped=spec.path end if trace_locating then if runtime then report_resolving("locating list of %a (runtime) (%s)",path,stripped) else report_resolving("locating list of %a (cached)",path) end end methodhandler('locators',stripped) end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("no texmf paths are defined (using TEXMF)") end end local function generate_file_databases() local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] methodhandler('generators',hash.name) end if trace_locating then report_resolving() end end local function save_file_databases() for i=1,#instance.hashes do local hash=instance.hashes[i] local cachename=hash.name if hash.cache then local content=instance.files[cachename] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",cachename) end caches.savecontent(cachename,"files",content) elseif trace_locating then report_resolving("not saving runtime tree %a",cachename) end end end function resolvers.renew(hashname) if hashname and hashname~="" then local expanded=resolvers.expansion(hashname) or "" if expanded~="" then if trace_locating then report_resolving("identifying tree %a from %a",expanded,hashname) end hashname=expanded else if trace_locating then report_resolving("identifying tree %a",hashname) end end local realpath=resolvers.resolve(hashname) if lfs.isdir(realpath) then if trace_locating then report_resolving("using path %a",realpath) end methodhandler('generators',hashname) local content=instance.files[hashname] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",hashname) end caches.savecontent(hashname,"files",content) else report_resolving("invalid path %a",realpath) end end end local function load_databases() locate_file_databases() if instance.diskcache and not instance.renewcache then load_file_databases() if instance.loaderror then generate_file_databases() save_file_databases() end else generate_file_databases() if instance.renewcache then save_file_databases() end end end function resolvers.appendhash(type,name,cache) if not instance.hashed[name] then if trace_locating then report_resolving("hash %a appended",name) end insert(instance.hashes,{ type=type,name=name,cache=cache } ) instance.hashed[name]=cache end end function resolvers.prependhash(type,name,cache) if not instance.hashed[name] then if trace_locating then report_resolving("hash %a prepended",name) end insert(instance.hashes,1,{ type=type,name=name,cache=cache } ) instance.hashed[name]=cache end end function resolvers.extendtexmfvariable(specification) local t=resolvers.splitpath(getenv("TEXMF")) insert(t,1,specification) local newspec=concat(t,",") if instance.environment["TEXMF"] then instance.environment["TEXMF"]=newspec elseif instance.variables["TEXMF"] then instance.variables["TEXMF"]=newspec else end reset_hashes() end function resolvers.splitexpansions() local ie=instance.expansions for k,v in next,ie do local t,tn,h,p={},0,{},splitconfigurationpath(v) for kk=1,#p do local vv=p[kk] if vv~="" and not h[vv] then tn=tn+1 t[tn]=vv h[vv]=true end end if #t>1 then ie[k]=t else ie[k]=t[1] end end end function resolvers.datastate() return caches.contentstate() end function resolvers.variable(name) local name=name and lpegmatch(dollarstripper,name) local result=name and instance.variables[name] return result~=nil and result or "" end function resolvers.expansion(name) local name=name and lpegmatch(dollarstripper,name) local result=name and instance.expansions[name] return result~=nil and result or "" end function resolvers.unexpandedpathlist(str) local pth=resolvers.variable(str) local lst=resolvers.splitpath(pth) return expandedpathfromlist(lst) end function resolvers.unexpandedpath(str) return joinpath(resolvers.unexpandedpathlist(str)) end local done={} function resolvers.resetextrapath() local ep=instance.extra_paths if not ep then ep,done={},{} instance.extra_paths=ep elseif #ep>0 then instance.lists,done={},{} end end function resolvers.registerextrapath(paths,subpaths) paths=settings_to_array(paths) subpaths=settings_to_array(subpaths) local ep=instance.extra_paths or {} local oldn=#ep local newn=oldn local nofpaths=#paths local nofsubpaths=#subpaths if nofpaths>0 then if nofsubpaths>0 then for i=1,nofpaths do local p=paths[i] for j=1,nofsubpaths do local s=subpaths[j] local ps=p.."/"..s if not done[ps] then newn=newn+1 ep[newn]=resolvers.cleanpath(ps) done[ps]=true end end end else for i=1,nofpaths do local p=paths[i] if not done[p] then newn=newn+1 ep[newn]=resolvers.cleanpath(p) done[p]=true end end end elseif nofsubpaths>0 then for i=1,oldn do for j=1,nofsubpaths do local s=subpaths[j] local ps=ep[i].."/"..s if not done[ps] then newn=newn+1 ep[newn]=resolvers.cleanpath(ps) done[ps]=true end end end end if newn>0 then instance.extra_paths=ep end if newn>oldn then instance.lists={} end end local function made_list(instance,list) local ep=instance.extra_paths if not ep or #ep==0 then return list else local done,new,newn={},{},0 for k=1,#list do local v=list[k] if not done[v] then if find(v,"^[%.%/]$") then done[v]=true newn=newn+1 new[newn]=v else break end end end for k=1,#ep do local v=ep[k] if not done[v] then done[v]=true newn=newn+1 new[newn]=v end end for k=1,#list do local v=list[k] if not done[v] then done[v]=true newn=newn+1 new[newn]=v end end return new end end function resolvers.cleanpathlist(str) local t=resolvers.expandedpathlist(str) if t then for i=1,#t do t[i]=collapsepath(resolvers.cleanpath(t[i])) end end return t end function resolvers.expandpath(str) return joinpath(resolvers.expandedpathlist(str)) end function resolvers.expandedpathlist(str) if not str then return {} elseif instance.savelists then str=lpegmatch(dollarstripper,str) local lists=instance.lists local lst=lists[str] if not lst then local l=made_list(instance,resolvers.splitpath(resolvers.expansion(str))) lst=expandedpathfromlist(l) lists[str]=lst end return lst else local lst=resolvers.splitpath(resolvers.expansion(str)) return made_list(instance,expandedpathfromlist(lst)) end end function resolvers.expandedpathlistfromvariable(str) str=lpegmatch(dollarstripper,str) local tmp=resolvers.variableofformatorsuffix(str) return resolvers.expandedpathlist(tmp~="" and tmp or str) end function resolvers.expandpathfromvariable(str) return joinpath(resolvers.expandedpathlistfromvariable(str)) end function resolvers.expandbraces(str) local ori=str local pth=expandedpathfromlist(resolvers.splitpath(ori)) return joinpath(pth) end function resolvers.registerfilehash(name,content,someerror) if content then instance.files[name]=content else instance.files[name]={} if somerror==true then instance.loaderror=someerror end end end local function isreadable(name) local readable=lfs.isfile(name) if trace_detail then if readable then report_resolving("file %a is readable",name) else report_resolving("file %a is not readable",name) end end return readable end local function collect_files(names) local filelist,noffiles={},0 for k=1,#names do local fname=names[k] if trace_detail then report_resolving("checking name %a",fname) end local bname=filebasename(fname) local dname=filedirname(fname) if dname=="" or find(dname,"^%.") then dname=false else dname=gsub(dname,"%*",".*") dname="/"..dname.."$" end local hashes=instance.hashes for h=1,#hashes do local hash=hashes[h] local blobpath=hash.name local files=blobpath and instance.files[blobpath] if files then if trace_detail then report_resolving("deep checking %a, base %a, pattern %a",blobpath,bname,dname) end local blobfile=files[bname] if not blobfile then local rname="remap:"..bname blobfile=files[rname] if blobfile then bname=files[rname] blobfile=files[bname] end end if blobfile then local blobroot=files.__path__ or blobpath if type(blobfile)=='string' then if not dname or find(blobfile,dname) then local variant=hash.type local search=filejoin(blobroot,blobfile,bname) local result=methodhandler('concatinators',hash.type,blobroot,blobfile,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles=noffiles+1 filelist[noffiles]={ variant,search,result } end else for kk=1,#blobfile do local vv=blobfile[kk] if not dname or find(vv,dname) then local variant=hash.type local search=filejoin(blobroot,vv,bname) local result=methodhandler('concatinators',hash.type,blobroot,vv,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles=noffiles+1 filelist[noffiles]={ variant,search,result } end end end end elseif trace_locating then report_resolving("no match in %a (%s)",blobpath,bname) end end end return noffiles>0 and filelist or nil end local fit={} function resolvers.registerintrees(filename,format,filetype,usedmethod,foundname) local foundintrees=instance.foundintrees if usedmethod=="direct" and filename==foundname and fit[foundname] then else local t={ filename=filename, format=format~="" and format or nil, filetype=filetype~="" and filetype or nil, usedmethod=usedmethod, foundname=foundname, } fit[foundname]=t foundintrees[#foundintrees+1]=t end end local function can_be_dir(name) local fakepaths=instance.fakepaths if not fakepaths[name] then if lfs.isdir(name) then fakepaths[name]=1 else fakepaths[name]=2 end end return fakepaths[name]==1 end local preparetreepattern=Cs((P(".")/"%%."+P("-")/"%%-"+P(1))^0*Cc("$")) local collect_instance_files local function find_analyze(filename,askedformat,allresults) local filetype,wantedfiles,ext='',{},suffixonly(filename) wantedfiles[#wantedfiles+1]=filename if askedformat=="" then if ext=="" or not suffixmap[ext] then local defaultsuffixes=resolvers.defaultsuffixes for i=1,#defaultsuffixes do local forcedname=filename..'.'..defaultsuffixes[i] wantedfiles[#wantedfiles+1]=forcedname filetype=resolvers.formatofsuffix(forcedname) if trace_locating then report_resolving("forcing filetype %a",filetype) end end else filetype=resolvers.formatofsuffix(filename) if trace_locating then report_resolving("using suffix based filetype %a",filetype) end end else if ext=="" or not suffixmap[ext] then local format_suffixes=suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do wantedfiles[#wantedfiles+1]=filename.."."..format_suffixes[i] end end end filetype=askedformat if trace_locating then report_resolving("using given filetype %a",filetype) end end return filetype,wantedfiles end local function find_direct(filename,allresults) if not dangerous[askedformat] and isreadable(filename) then if trace_detail then report_resolving("file %a found directly",filename) end return "direct",{ filename } end end local function find_wildcard(filename,allresults) if find(filename,'%*') then if trace_locating then report_resolving("checking wildcard %a",filename) end local method,result=resolvers.findwildcardfiles(filename) if result then return "wildcard",result end end end local function find_qualified(filename,allresults,askedformat,alsostripped) if not file.is_qualified_path(filename) then return end if trace_locating then report_resolving("checking qualified name %a",filename) end if isreadable(filename) then if trace_detail then report_resolving("qualified file %a found",filename) end return "qualified",{ filename } end if trace_detail then report_resolving("locating qualified file %a",filename) end local forcedname,suffix="",suffixonly(filename) if suffix=="" then local format_suffixes=askedformat=="" and resolvers.defaultsuffixes or suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do local s=format_suffixes[i] forcedname=filename.."."..s if isreadable(forcedname) then if trace_locating then report_resolving("no suffix, forcing format filetype %a",s) end return "qualified",{ forcedname } end end end end if alsostripped and suffix and suffix~="" then local basename=filebasename(filename) local pattern=lpegmatch(preparetreepattern,filename) local savedformat=askedformat local format=savedformat or "" if format=="" then askedformat=resolvers.formatofsuffix(suffix) end if not format then askedformat="othertextfiles" end if basename~=filename then local resolved=collect_instance_files(basename,askedformat,allresults) if #resolved==0 then local lowered=lower(basename) if filename~=lowered then resolved=collect_instance_files(lowered,askedformat,allresults) end end resolvers.format=savedformat if #resolved>0 then local result={} for r=1,#resolved do local rr=resolved[r] if find(rr,pattern) then result[#result+1]=rr end end if #result>0 then return "qualified",result end end end end end local function check_subpath(fname) if isreadable(fname) then if trace_detail then report_resolving("found %a by deep scanning",fname) end return fname end end local function find_intree(filename,filetype,wantedfiles,allresults) local typespec=resolvers.variableofformat(filetype) local pathlist=resolvers.expandedpathlist(typespec) local method="intree" if pathlist and #pathlist>0 then local filelist=collect_files(wantedfiles) local dirlist={} if filelist then for i=1,#filelist do dirlist[i]=filedirname(filelist[i][3]).."/" end end if trace_detail then report_resolving("checking filename %a",filename) end local resolve=resolvers.resolve local result={} for k=1,#pathlist do local path=pathlist[k] local pathname=lpegmatch(inhibitstripper,path) local doscan=path==pathname if not find (pathname,'//$') then doscan=false end local done=false if filelist then local expression=makepathexpression(pathname) if trace_detail then report_resolving("using pattern %a for path %a",expression,pathname) end for k=1,#filelist do local fl=filelist[k] local f=fl[2] local d=dirlist[k] if find(d,expression) or find(resolve(d),expression) then result[#result+1]=resolve(fl[3]) done=true if allresults then if trace_detail then report_resolving("match to %a in hash for file %a and path %a, continue scanning",expression,f,d) end else if trace_detail then report_resolving("match to %a in hash for file %a and path %a, quit scanning",expression,f,d) end break end elseif trace_detail then report_resolving("no match to %a in hash for file %a and path %a",expression,f,d) end end end if done then method="database" else method="filesystem" pathname=gsub(pathname,"/+$","") pathname=resolve(pathname) local scheme=url.hasscheme(pathname) if not scheme or scheme=="file" then local pname=gsub(pathname,"%.%*$",'') if not find(pname,"%*") then if can_be_dir(pname) then for k=1,#wantedfiles do local w=wantedfiles[k] local fname=check_subpath(filejoin(pname,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end end if not done and doscan then local files=resolvers.simplescanfiles(pname,false,true) for k=1,#wantedfiles do local w=wantedfiles[k] local subpath=files[w] if not subpath or subpath=="" then elseif type(subpath)=="string" then local fname=check_subpath(filejoin(pname,subpath,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end else for i=1,#subpath do local sp=subpath[i] if sp=="" then else local fname=check_subpath(filejoin(pname,sp,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end end end if done and not allresults then break end end end end end else end end end if done and not allresults then break end end if #result>0 then return method,result end end end local function find_onpath(filename,filetype,wantedfiles,allresults) if trace_detail then report_resolving("checking filename %a, filetype %a, wanted files %a",filename,filetype,concat(wantedfiles," | ")) end local result={} for k=1,#wantedfiles do local fname=wantedfiles[k] if fname and isreadable(fname) then filename=fname result[#result+1]=filejoin('.',fname) if not allresults then break end end end if #result>0 then return "onpath",result end end local function find_otherwise(filename,filetype,wantedfiles,allresults) local filelist=collect_files(wantedfiles) local fl=filelist and filelist[1] if fl then return "otherwise",{ resolvers.resolve(fl[3]) } end end collect_instance_files=function(filename,askedformat,allresults) askedformat=askedformat or "" filename=collapsepath(filename,".") filename=gsub(filename,"^%./",getcurrentdir().."/") if allresults then local filetype,wantedfiles=find_analyze(filename,askedformat) local results={ { find_direct (filename,true) }, { find_wildcard (filename,true) }, { find_qualified(filename,true,askedformat) }, { find_intree (filename,filetype,wantedfiles,true) }, { find_onpath (filename,filetype,wantedfiles,true) }, { find_otherwise(filename,filetype,wantedfiles,true) }, } local result,status,done={},{},{} for k,r in next,results do local method,list=r[1],r[2] if method and list then for i=1,#list do local c=collapsepath(list[i]) if not done[c] then result[#result+1]=c done[c]=true end status[#status+1]=formatters["%-10s: %s"](method,c) end end end if trace_detail then report_resolving("lookup status: %s",table.serialize(status,filename)) end return result,status else local method,result,stamp,filetype,wantedfiles if instance.remember then stamp=formatters["%s--%s"](filename,askedformat) result=stamp and instance.found[stamp] if result then if trace_locating then report_resolving("remembered file %a",filename) end return result end end method,result=find_direct(filename) if not result then method,result=find_wildcard(filename) if not result then method,result=find_qualified(filename,false,askedformat) if not result then filetype,wantedfiles=find_analyze(filename,askedformat) method,result=find_intree(filename,filetype,wantedfiles) if not result then method,result=find_onpath(filename,filetype,wantedfiles) if not result then method,result=find_otherwise(filename,filetype,wantedfiles) end end end end end if result and #result>0 then local foundname=collapsepath(result[1]) resolvers.registerintrees(filename,askedformat,filetype,method,foundname) result={ foundname } else result={} end if stamp then if trace_locating then report_resolving("remembering file %a",filename) end instance.found[stamp]=result end return result end end local function findfiles(filename,filetype,allresults) local result,status=collect_instance_files(filename,filetype or "",allresults) if not result or #result==0 then local lowered=lower(filename) if filename~=lowered then result,status=collect_instance_files(lowered,filetype or "",allresults) end end return result or {},status end function resolvers.findfiles(filename,filetype) return findfiles(filename,filetype,true) end function resolvers.findfile(filename,filetype) return findfiles(filename,filetype,false)[1] or "" end function resolvers.findpath(filename,filetype) return filedirname(findfiles(filename,filetype,false)[1] or "") end local function findgivenfiles(filename,allresults) local bname,result=filebasename(filename),{} local hashes=instance.hashes local noffound=0 for k=1,#hashes do local hash=hashes[k] local files=instance.files[hash.name] or {} local blist=files[bname] if not blist then local rname="remap:"..bname blist=files[rname] if blist then bname=files[rname] blist=files[bname] end end if blist then if type(blist)=='string' then local found=methodhandler('concatinators',hash.type,hash.name,blist,bname) or "" if found~="" then noffound=noffound+1 result[noffound]=resolvers.resolve(found) if not allresults then break end end else for kk=1,#blist do local vv=blist[kk] local found=methodhandler('concatinators',hash.type,hash.name,vv,bname) or "" if found~="" then noffound=noffound+1 result[noffound]=resolvers.resolve(found) if not allresults then break end end end end end end return result end function resolvers.findgivenfiles(filename) return findgivenfiles(filename,true) end function resolvers.findgivenfile(filename) return findgivenfiles(filename,false)[1] or "" end local function doit(path,blist,bname,tag,variant,result,allresults) local done=false if blist and variant then local resolve=resolvers.resolve if type(blist)=='string' then if find(lower(blist),path) then local full=methodhandler('concatinators',variant,tag,blist,bname) or "" result[#result+1]=resolve(full) done=true end else for kk=1,#blist do local vv=blist[kk] if find(lower(vv),path) then local full=methodhandler('concatinators',variant,tag,vv,bname) or "" result[#result+1]=resolve(full) done=true if not allresults then break end end end end end return done end local makewildcard=Cs( (P("^")^0*P("/")*P(-1)+P(-1))/".*"+(P("^")^0*P("/")/"")^0*(P("*")/".*"+P("-")/"%%-"+P(".")/"%%."+P("?")/"."+P("\\")/"/"+P(1))^0 ) function resolvers.wildcardpattern(pattern) return lpegmatch(makewildcard,pattern) or pattern end local function findwildcardfiles(filename,allresults,result) result=result or {} local base=filebasename(filename) local dirn=filedirname(filename) local path=lower(lpegmatch(makewildcard,dirn) or dirn) local name=lower(lpegmatch(makewildcard,base) or base) local files,done=instance.files,false if find(name,"%*") then local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] local hashname,hashtype=hash.name,hash.type for kk,hh in next,files[hashname] do if not find(kk,"^remap:") then if find(lower(kk),name) then if doit(path,hh,kk,hashname,hashtype,result,allresults) then done=true end if done and not allresults then break end end end end end else local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] local hashname,hashtype=hash.name,hash.type if doit(path,files[hashname][bname],bname,hashname,hashtype,result,allresults) then done=true end if done and not allresults then break end end end return result end function resolvers.findwildcardfiles(filename,result) return findwildcardfiles(filename,true,result) end function resolvers.findwildcardfile(filename) return findwildcardfiles(filename,false)[1] or "" end function resolvers.automount() end function resolvers.load(option) statistics.starttiming(instance) identify_configuration_files() load_configuration_files() if option~="nofiles" then load_databases() resolvers.automount() end statistics.stoptiming(instance) local files=instance.files return files and next(files) and true end function resolvers.loadtime() return statistics.elapsedtime(instance) end local function report(str) if trace_locating then report_resolving(str) else print(str) end end function resolvers.dowithfilesandreport(command,files,...) if files and #files>0 then if trace_locating then report('') end if type(files)=="string" then files={ files } end for f=1,#files do local file=files[f] local result=command(file,...) if type(result)=='string' then report(result) else for i=1,#result do report(result[i]) end end end end end function resolvers.showpath(str) return joinpath(resolvers.expandedpathlist(resolvers.formatofvariable(str))) end function resolvers.registerfile(files,name,path) if files[name] then if type(files[name])=='string' then files[name]={ files[name],path } else files[name]=path end else files[name]=path end end function resolvers.dowithpath(name,func) local pathlist=resolvers.expandedpathlist(name) for i=1,#pathlist do func("^"..resolvers.cleanpath(pathlist[i])) end end function resolvers.dowithvariable(name,func) func(expandedvariable(name)) end function resolvers.locateformat(name) local engine=environment.ownmain or "luatex" local barename=file.removesuffix(name) local fullname=file.addsuffix(barename,"fmt") local fmtname=caches.getfirstreadablefile(fullname,"formats",engine) or "" if fmtname=="" then fmtname=resolvers.findfile(fullname) fmtname=resolvers.cleanpath(fmtname) end if fmtname~="" then local barename=file.removesuffix(fmtname) local luaname=file.addsuffix(barename,luasuffixes.lua) local lucname=file.addsuffix(barename,luasuffixes.luc) local luiname=file.addsuffix(barename,luasuffixes.lui) if lfs.isfile(luiname) then return barename,luiname elseif lfs.isfile(lucname) then return barename,lucname elseif lfs.isfile(luaname) then return barename,luaname end end return nil,nil end function resolvers.booleanvariable(str,default) local b=resolvers.expansion(str) if b=="" then return default else b=toboolean(b) return (b==nil and default) or b end end function resolvers.dowithfilesintree(pattern,handle,before,after) local instance=resolvers.instance local hashes=instance.hashes for i=1,#hashes do local hash=hashes[i] local blobtype=hash.type local blobpath=hash.name if blobpath then if before then before(blobtype,blobpath,pattern) end local files=instance.files[blobpath] local total,checked,done=0,0,0 if files then for k,v in table.sortedhash(files) do total=total+1 if find(k,"^remap:") then elseif find(k,pattern) then if type(v)=="string" then checked=checked+1 if handle(blobtype,blobpath,v,k) then done=done+1 end else checked=checked+#v for i=1,#v do if handle(blobtype,blobpath,v[i],k) then done=done+1 end end end end end end if after then after(blobtype,blobpath,pattern,total,checked,done) end end end end resolvers.obsolete=resolvers.obsolete or {} local obsolete=resolvers.obsolete resolvers.find_file=resolvers.findfile obsolete.find_file=resolvers.findfile resolvers.find_files=resolvers.findfiles obsolete.find_files=resolvers.findfiles end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-pre"] = package.loaded["data-pre"] or true -- original size: 6643, stripped down to: 4401 if not modules then modules={} end modules ['data-pre']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers=resolvers local prefixes=utilities.storage.allocate() resolvers.prefixes=prefixes local cleanpath,findgivenfile,expansion=resolvers.cleanpath,resolvers.findgivenfile,resolvers.expansion local getenv=resolvers.getenv local P,S,R,C,Cs,Cc,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.match local joinpath,basename,dirname=file.join,file.basename,file.dirname local getmetatable,rawset,type=getmetatable,rawset,type prefixes.environment=function(str) return cleanpath(expansion(str)) end prefixes.relative=function(str,n) if io.exists(str) then elseif io.exists("./"..str) then str="./"..str else local p="../" for i=1,n or 2 do if io.exists(p..str) then str=p..str break else p=p.."../" end end end return cleanpath(str) end prefixes.auto=function(str) local fullname=prefixes.relative(str) if not lfs.isfile(fullname) then fullname=prefixes.locate(str) end return fullname end prefixes.locate=function(str) local fullname=findgivenfile(str) or "" return cleanpath((fullname~="" and fullname) or str) end prefixes.filename=function(str) local fullname=findgivenfile(str) or "" return cleanpath(basename((fullname~="" and fullname) or str)) end prefixes.pathname=function(str) local fullname=findgivenfile(str) or "" return cleanpath(dirname((fullname~="" and fullname) or str)) end prefixes.selfautoloc=function(str) return cleanpath(joinpath(getenv('SELFAUTOLOC'),str)) end prefixes.selfautoparent=function(str) return cleanpath(joinpath(getenv('SELFAUTOPARENT'),str)) end prefixes.selfautodir=function(str) return cleanpath(joinpath(getenv('SELFAUTODIR'),str)) end prefixes.home=function(str) return cleanpath(joinpath(getenv('HOME'),str)) end local function toppath() local inputstack=resolvers.inputstack if not inputstack then return "." end local pathname=dirname(inputstack[#inputstack] or "") if pathname=="" then return "." else return pathname end end resolvers.toppath=toppath prefixes.toppath=function(str) return cleanpath(joinpath(toppath(),str)) end prefixes.env=prefixes.environment prefixes.rel=prefixes.relative prefixes.loc=prefixes.locate prefixes.kpse=prefixes.locate prefixes.full=prefixes.locate prefixes.file=prefixes.filename prefixes.path=prefixes.pathname function resolvers.allprefixes(separator) local all=table.sortedkeys(prefixes) if separator then for i=1,#all do all[i]=all[i]..":" end end return all end local function _resolve_(method,target) local action=prefixes[method] if action then return action(target) else return method..":"..target end end local resolved,abstract={},{} function resolvers.resetresolve(str) resolved,abstract={},{} end local pattern=Cs((C(R("az")^2)*P(":")*C((1-S(" \"\';,"))^1)/_resolve_+P(1))^0) local prefix=C(R("az")^2)*P(":") local target=C((1-S(" \"\';,"))^1) local notarget=(#S(";,")+P(-1))*Cc("") local pattern=Cs(((prefix*(target+notarget))/_resolve_+P(1))^0) local function resolve(str) if type(str)=="table" then local t={} for i=1,#str do t[i]=resolve(str[i]) end return t else local res=resolved[str] if not res then res=lpegmatch(pattern,str) resolved[str]=res abstract[res]=str end return res end end local function unresolve(str) return abstract[str] or str end resolvers.resolve=resolve resolvers.unresolve=unresolve if type(os.uname)=="function" then for k,v in next,os.uname() do if not prefixes[k] then prefixes[k]=function() return v end end end end if os.type=="unix" then local pattern local function makepattern(t,k,v) if t then rawset(t,k,v) end local colon=P(":") for k,v in table.sortedpairs(prefixes) do if p then p=P(k)+p else p=P(k) end end pattern=Cs((p*colon+colon/";"+P(1))^0) end makepattern() getmetatable(prefixes).__newindex=makepattern function resolvers.repath(str) return lpegmatch(pattern,str) end else function resolvers.repath(str) return str end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-inp"] = package.loaded["data-inp"] or true -- original size: 910, stripped down to: 823 if not modules then modules={} end modules ['data-inp']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local resolvers=resolvers local methodhandler=resolvers.methodhandler local registermethod=resolvers.registermethod local finders=allocate { helpers={},notfound=function() end } local openers=allocate { helpers={},notfound=function() end } local loaders=allocate { helpers={},notfound=function() return false,nil,0 end } registermethod("finders",finders,"uri") registermethod("openers",openers,"uri") registermethod("loaders",loaders,"uri") resolvers.finders=finders resolvers.openers=openers resolvers.loaders=loaders end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-out"] = package.loaded["data-out"] or true -- original size: 530, stripped down to: 475 if not modules then modules={} end modules ['data-out']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local resolvers=resolvers local registermethod=resolvers.registermethod local savers=allocate { helpers={} } resolvers.savers=savers registermethod("savers",savers,"uri") end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true -- original size: 3801, stripped down to: 3231 if not modules then modules={} end modules ['data-fil']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_files=logs.reporter("resolvers","files") local resolvers=resolvers local finders,openers,loaders,savers=resolvers.finders,resolvers.openers,resolvers.loaders,resolvers.savers local locators,hashers,generators,concatinators=resolvers.locators,resolvers.hashers,resolvers.generators,resolvers.concatinators local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function locators.file(specification) local name=specification.filename local realname=resolvers.resolve(name) if realname and realname~='' and lfs.isdir(realname) then if trace_locating then report_files("file locator %a found as %a",name,realname) end resolvers.appendhash('file',name,true) elseif trace_locating then report_files("file locator %a not found",name) end end function hashers.file(specification) local name=specification.filename local content=caches.loadcontent(name,'files') resolvers.registerfilehash(name,content,content==nil) end function generators.file(specification) local path=specification.filename local content=resolvers.scanfiles(path,false,true) resolvers.registerfilehash(path,content,true) end concatinators.file=file.join function finders.file(specification,filetype) local filename=specification.filename local foundname=resolvers.findfile(filename,filetype) if foundname and foundname~="" then if trace_locating then report_files("file finder: %a found",filename) end return foundname else if trace_locating then report_files("file finder: %a not found",filename) end return finders.notfound() end end function openers.helpers.textopener(tag,filename,f) return { reader=function() return f:read () end, close=function() logs.show_close(filename) return f:close() end, } end function openers.file(specification,filetype) local filename=specification.filename if filename and filename~="" then local f=io.open(filename,"r") if f then if trace_locating then report_files("file opener: %a opened",filename) end return openers.helpers.textopener("file",filename,f) end end if trace_locating then report_files("file opener: %a not found",filename) end return openers.notfound() end function loaders.file(specification,filetype) local filename=specification.filename if filename and filename~="" then local f=io.open(filename,"rb") if f then logs.show_load(filename) if trace_locating then report_files("file loader: %a loaded",filename) end local s=f:read("*a") if checkgarbage then checkgarbage(#s) end f:close() if s then return true,s,#s end end end if trace_locating then report_files("file loader: %a not found",filename) end return loaders.notfound() end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-con"] = package.loaded["data-con"] or true -- original size: 5010, stripped down to: 3588 if not modules then modules={} end modules ['data-con']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub=string.format,string.lower,string.gsub local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end) local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end) containers=containers or {} local containers=containers containers.usecache=true local report_containers=logs.reporter("resolvers","containers") local allocated={} local mt={ __index=function(t,k) if k=="writable" then local writable=caches.getwritablepath(t.category,t.subcategory) or { "." } t.writable=writable return writable elseif k=="readables" then local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." } t.readables=readables return readables end end, __storage__=true } function containers.define(category,subcategory,version,enabled) if category and subcategory then local c=allocated[category] if not c then c={} allocated[category]=c end local s=c[subcategory] if not s then s={ category=category, subcategory=subcategory, storage={}, enabled=enabled, version=version or math.pi, trace=false, } setmetatable(s,mt) c[subcategory]=s end return s end end function containers.is_usable(container,name) return container.enabled and caches and caches.is_writable(container.writable,name) end function containers.is_valid(container,name) if name and name~="" then local storage=container.storage[name] return storage and storage.cache_version==container.version else return false end end function containers.read(container,name) local storage=container.storage local stored=storage[name] if not stored and container.enabled and caches and containers.usecache then stored=caches.loaddata(container.readables,name) if stored and stored.cache_version==container.version then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","load",container.subcategory,name) end else stored=nil end storage[name]=stored elseif stored then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","reuse",container.subcategory,name) end end return stored end function containers.write(container,name,data) if data then data.cache_version=container.version if container.enabled and caches then local unique,shared=data.unique,data.shared data.unique,data.shared=nil,nil caches.savedata(container.writable,name,data) if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","save",container.subcategory,name) end data.unique,data.shared=unique,shared end if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","store",container.subcategory,name) end container.storage[name]=data end return data end function containers.content(container,name) return container.storage[name] end function containers.cleanname(name) return (gsub(lower(name),"[^%w\128-\255]+","-")) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-use"] = package.loaded["data-use"] or true -- original size: 3913, stripped down to: 2998 if not modules then modules={} end modules ['data-use']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub,find=string.format,string.lower,string.gsub,string.find local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_mounts=logs.reporter("resolvers","mounts") local resolvers=resolvers resolvers.automounted=resolvers.automounted or {} function resolvers.automount(usecache) local mountpaths=resolvers.cleanpathlist(resolvers.expansion('TEXMFMOUNT')) if (not mountpaths or #mountpaths==0) and usecache then mountpaths=caches.getreadablepaths("mount") end if mountpaths and #mountpaths>0 then statistics.starttiming(resolvers.instance) for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") if f then for line in f:lines() do if line then if find(line,"^[%%#%-]") then elseif find(line,"^zip://") then if trace_locating then report_mounts("mounting %a",line) end table.insert(resolvers.automounted,line) resolvers.usezipfile(line) end end end f:close() end end statistics.stoptiming(resolvers.instance) end end statistics.register("used config file",function() return caches.configfiles() end) statistics.register("used cache path",function() return caches.usedpaths() end) function statistics.savefmtstatus(texname,formatbanner,sourcefile) local enginebanner=status.list().banner if formatbanner and enginebanner and sourcefile then local luvname=file.replacesuffix(texname,"luv") local luvdata={ enginebanner=enginebanner, formatbanner=formatbanner, sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"), sourcefile=sourcefile, } io.savedata(luvname,table.serialize(luvdata,true)) end end function statistics.checkfmtstatus(texname) local enginebanner=status.list().banner if enginebanner and texname then local luvname=file.replacesuffix(texname,"luv") if lfs.isfile(luvname) then local luv=dofile(luvname) if luv and luv.sourcefile then local sourcehash=md5.hex(io.loaddata(resolvers.findfile(luv.sourcefile)) or "unknown") local luvbanner=luv.enginebanner or "?" if luvbanner~=enginebanner then return format("engine mismatch (luv: %s <> bin: %s)",luvbanner,enginebanner) end local luvhash=luv.sourcehash or "?" if luvhash~=sourcehash then return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash) end else return "invalid status file" end else return "missing status file" end end return true end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true -- original size: 8489, stripped down to: 6757 if not modules then modules={} end modules ['data-zip']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,find,match=string.format,string.find,string.match local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_zip=logs.reporter("resolvers","zip") local resolvers=resolvers zip=zip or {} local zip=zip zip.archives=zip.archives or {} local archives=zip.archives zip.registeredfiles=zip.registeredfiles or {} local registeredfiles=zip.registeredfiles local limited=false directives.register("system.inputmode",function(v) if not limited then local i_limiter=io.i_limiter(v) if i_limiter then zip.open=i_limiter.protect(zip.open) limited=true end end end) local function validzip(str) if not find(str,"^zip://") then return "zip:///"..str else return str end end function zip.openarchive(name) if not name or name=="" then return nil else local arch=archives[name] if not arch then local full=resolvers.findfile(name) or "" arch=(full~="" and zip.open(full)) or false archives[name]=arch end return arch end end function zip.closearchive(name) if not name or (name=="" and archives[name]) then zip.close(archives[name]) archives[name]=nil end end function resolvers.locators.zip(specification) local archive=specification.filename local zipfile=archive and archive~="" and zip.openarchive(archive) if trace_locating then if zipfile then report_zip("locator: archive %a found",archive) else report_zip("locator: archive %a not found",archive) end end end function resolvers.hashers.zip(specification) local archive=specification.filename if trace_locating then report_zip("loading file %a",archive) end resolvers.usezipfile(specification.original) end function resolvers.concatinators.zip(zipfile,path,name) if not path or path=="" then return format('%s?name=%s',zipfile,name) else return format('%s?name=%s/%s',zipfile,path,name) end end function resolvers.finders.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("finder: archive %a found",archive) end local dfile=zfile:open(queryname) if dfile then dfile=zfile:close() if trace_locating then report_zip("finder: file %a found",queryname) end return specification.original elseif trace_locating then report_zip("finder: file %a not found",queryname) end elseif trace_locating then report_zip("finder: unknown archive %a",archive) end end end if trace_locating then report_zip("finder: %a not found",original) end return resolvers.finders.notfound() end function resolvers.openers.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("opener; archive %a opened",archive) end local dfile=zfile:open(queryname) if dfile then if trace_locating then report_zip("opener: file %a found",queryname) end return resolvers.openers.helpers.textopener('zip',original,dfile) elseif trace_locating then report_zip("opener: file %a not found",queryname) end elseif trace_locating then report_zip("opener: unknown archive %a",archive) end end end if trace_locating then report_zip("opener: %a not found",original) end return resolvers.openers.notfound() end function resolvers.loaders.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("loader: archive %a opened",archive) end local dfile=zfile:open(queryname) if dfile then logs.show_load(original) if trace_locating then report_zip("loader; file %a loaded",original) end local s=dfile:read("*all") dfile:close() return true,s,#s elseif trace_locating then report_zip("loader: file %a not found",queryname) end elseif trace_locating then report_zip("loader; unknown archive %a",archive) end end end if trace_locating then report_zip("loader: %a not found",original) end return resolvers.openers.notfound() end function resolvers.usezipfile(archive) local specification=resolvers.splitmethod(archive) local archive=specification.filename if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end statistics.starttiming(instance) resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z instance.files[archive]=resolvers.registerzipfile(z,tree) statistics.stoptiming(instance) elseif trace_locating then report_zip("registering: unknown archive %a",archive) end elseif trace_locating then report_zip("registering: archive %a not found",archive) end end function resolvers.registerzipfile(z,tree) local files,filter={},"" if tree=="" then filter="^(.+)/(.-)$" else filter=format("^%s/(.+)/(.-)$",tree) end if trace_locating then report_zip("registering: using filter %a",filter) end local register,n=resolvers.registerfile,0 for i in z:files() do local path,name=match(i.filename,filter) if path then if name and name~='' then register(files,name,path) n=n+1 else end else register(files,i.filename,'') n=n+1 end end report_zip("registering: %s files registered",n) return files end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tre"] = package.loaded["data-tre"] or true -- original size: 2508, stripped down to: 2074 if not modules then modules={} end modules ['data-tre']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,gsub,format=string.find,string.gsub,string.format local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_trees=logs.reporter("resolvers","trees") local resolvers=resolvers local done,found,notfound={},{},resolvers.finders.notfound function resolvers.finders.tree(specification) local spec=specification.filename local fnd=found[spec] if fnd==nil then if spec~="" then local path,name=file.dirname(spec),file.basename(spec) if path=="" then path="." end local hash=done[path] if not hash then local pattern=path.."/*" hash=dir.glob(pattern) done[path]=hash end local pattern="/"..gsub(name,"([%.%-%+])","%%%1").."$" for k=1,#hash do local v=hash[k] if find(v,pattern) then found[spec]=v return v end end end fnd=notfound() found[spec]=fnd end return fnd end function resolvers.locators.tree(specification) local name=specification.filename local realname=resolvers.resolve(name) if realname and realname~='' and lfs.isdir(realname) then if trace_locating then report_trees("locator %a found",realname) end resolvers.appendhash('tree',name,false) elseif trace_locating then report_trees("locator %a not found",name) end end function resolvers.hashers.tree(specification) local name=specification.filename if trace_locating then report_trees("analysing %a",name) end resolvers.methodhandler("hashers",name) resolvers.generators.file(specification) end resolvers.concatinators.tree=resolvers.concatinators.file resolvers.generators.tree=resolvers.generators.file resolvers.openers.tree=resolvers.openers.file resolvers.loaders.tree=resolvers.loaders.file end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-sch"] = package.loaded["data-sch"] or true -- original size: 6202, stripped down to: 5149 if not modules then modules={} end modules ['data-sch']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local load=load local gsub,concat,format=string.gsub,table.concat,string.format local finders,openers,loaders=resolvers.finders,resolvers.openers,resolvers.loaders local trace_schemes=false trackers.register("resolvers.schemes",function(v) trace_schemes=v end) local report_schemes=logs.reporter("resolvers","schemes") local http=require("socket.http") local ltn12=require("ltn12") local resolvers=resolvers local schemes=resolvers.schemes or {} resolvers.schemes=schemes local cleaners={} schemes.cleaners=cleaners local threshold=24*60*60 directives.register("schemes.threshold",function(v) threshold=tonumber(v) or threshold end) function cleaners.none(specification) return specification.original end function cleaners.strip(specification) return (gsub(specification.original,"[^%a%d%.]+","-")) end function cleaners.md5(specification) return file.addsuffix(md5.hex(specification.original),file.suffix(specification.path)) end local cleaner=cleaners.strip directives.register("schemes.cleanmethod",function(v) cleaner=cleaners[v] or cleaners.strip end) function resolvers.schemes.cleanname(specification) local hash=cleaner(specification) if trace_schemes then report_schemes("hashing %a to %a",specification.original,hash) end return hash end local cached,loaded,reused,thresholds,handlers={},{},{},{},{} local function runcurl(name,cachename) local command="curl --silent --create-dirs --output "..cachename.." "..name os.spawn(command) end local function fetch(specification) local original=specification.original local scheme=specification.scheme local cleanname=schemes.cleanname(specification) local cachename=caches.setfirstwritablefile(cleanname,"schemes") if not cached[original] then statistics.starttiming(schemes) if not io.exists(cachename) or (os.difftime(os.time(),lfs.attributes(cachename).modification)>(thresholds[protocol] or threshold)) then cached[original]=cachename local handler=handlers[scheme] if handler then if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"built-in") end logs.flush() handler(specification,cachename) else if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl") end logs.flush() runcurl(original,cachename) end end if io.exists(cachename) then cached[original]=cachename if trace_schemes then report_schemes("using cached %a, protocol %a, cachename %a",original,scheme,cachename) end else cached[original]="" if trace_schemes then report_schemes("using missing %a, protocol %a",original,scheme) end end loaded[scheme]=loaded[scheme]+1 statistics.stoptiming(schemes) else if trace_schemes then report_schemes("reusing %a, protocol %a",original,scheme) end reused[scheme]=reused[scheme]+1 end return cached[original] end local function finder(specification,filetype) return resolvers.methodhandler("finders",fetch(specification),filetype) end local opener=openers.file local loader=loaders.file local function install(scheme,handler,newthreshold) handlers [scheme]=handler loaded [scheme]=0 reused [scheme]=0 finders [scheme]=finder openers [scheme]=opener loaders [scheme]=loader thresholds[scheme]=newthreshold or threshold end schemes.install=install local function http_handler(specification,cachename) local tempname=cachename..".tmp" local f=io.open(tempname,"wb") local status,message=http.request { url=specification.original, sink=ltn12.sink.file(f) } if not status then os.remove(tempname) else os.remove(cachename) os.rename(tempname,cachename) end return cachename end install('http',http_handler) install('https') install('ftp') statistics.register("scheme handling time",function() local l,r,nl,nr={},{},0,0 for k,v in table.sortedhash(loaded) do if v>0 then nl=nl+1 l[nl]=k..":"..v end end for k,v in table.sortedhash(reused) do if v>0 then nr=nr+1 r[nr]=k..":"..v end end local n=nl+nr if n>0 then l=nl>0 and concat(l) or "none" r=nr>0 and concat(r) or "none" return format("%s seconds, %s processed, threshold %s seconds, loaded: %s, reused: %s", statistics.elapsedtime(schemes),n,threshold,l,r) else return nil end end) local httprequest=http.request local toquery=url.toquery local function fetchstring(url,data) local q=data and toquery(data) if q then url=url.."?"..q end local reply=httprequest(url) return reply end schemes.fetchstring=fetchstring function schemes.fetchtable(url,data) local reply=fetchstring(url,data) if reply then local s=load("return "..reply) if s then return s() end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-lua"] = package.loaded["data-lua"] or true -- original size: 4237, stripped down to: 3177 if not modules then modules={} end modules ['data-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers,package=resolvers,package local gsub=string.gsub local concat=table.concat local addsuffix=file.addsuffix local P,S,Cs,lpegmatch=lpeg.P,lpeg.S,lpeg.Cs,lpeg.match local luasuffixes={ 'tex','lua' } local libsuffixes={ 'lib' } local luaformats={ 'TEXINPUTS','LUAINPUTS' } local libformats={ 'CLUAINPUTS' } local helpers=package.helpers or {} local methods=helpers.methods or {} trackers.register("resolvers.libraries",function(v) helpers.trace=v end) trackers.register("resolvers.locating",function(v) helpers.trace=v end) helpers.report=logs.reporter("resolvers","libraries") helpers.sequence={ "already loaded", "preload table", "lua variable format", "lib variable format", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } local pattern=Cs(P("!")^0/""*(P("/")*P(-1)/"/"+P("/")^1/"/"+1)^0) function helpers.cleanpath(path) return resolvers.resolve(lpegmatch(pattern,path)) end local loadedaslib=helpers.loadedaslib local getextraluapaths=package.extraluapaths local getextralibpaths=package.extralibpaths local registerpath=helpers.registerpath local lualibfile=helpers.lualibfile local luaformatpaths local libformatpaths local function getluaformatpaths() if not luaformatpaths then luaformatpaths={} for i=1,#luaformats do registerpath("lua format","lua",luaformatpaths,resolvers.expandedpathlistfromvariable(luaformats[i])) end end return luaformatpaths end local function getlibformatpaths() if not libformatpaths then libformatpaths={} for i=1,#libformats do registerpath("lib format","lib",libformatpaths,resolvers.expandedpathlistfromvariable(libformats[i])) end end return libformatpaths end local function loadedbyformat(name,rawname,suffixes,islib,what) local trace=helpers.trace local report=helpers.report for i=1,#suffixes do local format=suffixes[i] local resolved=resolvers.findfile(name,format) or "" if trace then report("%s format, identifying %a using format %a",what,name,format) end if resolved~="" then if trace then report("%s format, %a found on %a",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbyformat=loadedbyformat methods["lua variable format"]=function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lua",#getluaformatpaths()) end return loadedbyformat(addsuffix(lualibfile(name),"lua"),name,luasuffixes,false,"lua") end methods["lib variable format"]=function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lib",#getlibformatpaths()) end return loadedbyformat(addsuffix(lualibfile(name),os.libsuffix),name,libsuffixes,true,"lib") end resolvers.loadlualib=require end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-aux"] = package.loaded["data-aux"] or true -- original size: 2394, stripped down to: 2005 if not modules then modules={} end modules ['data-aux']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find=string.find local type,next=type,next local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local resolvers=resolvers local report_scripts=logs.reporter("resolvers","scripts") function resolvers.updatescript(oldname,newname) local scriptpath="scripts/context/lua" newname=file.addsuffix(newname,"lua") local oldscript=resolvers.cleanpath(oldname) if trace_locating then report_scripts("to be replaced old script %a",oldscript) end local newscripts=resolvers.findfiles(newname) or {} if #newscripts==0 then if trace_locating then report_scripts("unable to locate new script") end else for i=1,#newscripts do local newscript=resolvers.cleanpath(newscripts[i]) if trace_locating then report_scripts("checking new script %a",newscript) end if oldscript==newscript then if trace_locating then report_scripts("old and new script are the same") end elseif not find(newscript,scriptpath) then if trace_locating then report_scripts("new script should come from %a",scriptpath) end elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then if trace_locating then report_scripts("invalid new script name") end else local newdata=io.loaddata(newscript) if newdata then if trace_locating then report_scripts("old script content replaced by new content") end io.savedata(oldscript,newdata) break elseif trace_locating then report_scripts("unable to load new script") end end end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tmf"] = package.loaded["data-tmf"] or true -- original size: 2600, stripped down to: 1627 if not modules then modules={} end modules ['data-tmf']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers=resolvers local report_tds=logs.reporter("resolvers","tds") function resolvers.load_tree(tree,resolve) if type(tree)=="string" and tree~="" then local getenv,setenv=resolvers.getenv,resolvers.setenv local texos="texmf-"..os.platform local oldroot=environment.texroot local newroot=file.collapsepath(tree) local newtree=file.join(newroot,texos) local newpath=file.join(newtree,"bin") if not lfs.isdir(newtree) then report_tds("no %a under tree %a",texos,tree) os.exit() end if not lfs.isdir(newpath) then report_tds("no '%s/bin' under tree %a",texos,tree) os.exit() end local texmfos=newtree environment.texroot=newroot environment.texos=texos environment.texmfos=texmfos if resolve then resolvers.luacnfspec=resolvers.resolve(resolvers.luacnfspec) end setenv('SELFAUTOPARENT',newroot) setenv('SELFAUTODIR',newtree) setenv('SELFAUTOLOC',newpath) setenv('TEXROOT',newroot) setenv('TEXOS',texos) setenv('TEXMFOS',texmfos) setenv('TEXMFCNF',resolvers.luacnfspec,true) setenv('PATH',newpath..io.pathseparator..getenv('PATH')) report_tds("changing from root %a to %a",oldroot,newroot) report_tds("prepending %a to PATH",newpath) report_tds("setting TEXMFCNF to %a",resolvers.luacnfspec) report_tds() end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true -- original size: 2654, stripped down to: 2301 if not modules then modules={} end modules ['data-lst']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,concat,upper,format=string.find,table.concat,string.upper,string.format local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs resolvers.listers=resolvers.listers or {} local resolvers=resolvers local report_lists=logs.reporter("resolvers","lists") local function tabstr(str) if type(str)=='table' then return concat(str," | ") else return str end end function resolvers.listers.variables(pattern) local instance=resolvers.instance local environment=instance.environment local variables=instance.variables local expansions=instance.expansions local pattern=upper(pattern or "") local configured={} local order=instance.order for i=1,#order do for k,v in next,order[i] do if v~=nil and configured[k]==nil then configured[k]=v end end end local env=fastcopy(environment) local var=fastcopy(variables) local exp=fastcopy(expansions) for key,value in sortedpairs(configured) do if key~="" and (pattern=="" or find(upper(key),pattern)) then report_lists(key) report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") report_lists(" var: %s",tabstr(configured[key]) or "unset") report_lists(" exp: %s",tabstr(expansions[key]) or "unset") report_lists(" res: %s",tabstr(resolvers.resolve(expansions[key])) or "unset") end end instance.environment=fastcopy(env) instance.variables=fastcopy(var) instance.expansions=fastcopy(exp) end local report_resolved=logs.reporter("system","resolved") function resolvers.listers.configurations() local configurations=resolvers.instance.specification for i=1,#configurations do report_resolved("file : %s",resolvers.resolve(configurations[i])) end report_resolved("") local list=resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.luacnfspec)) for i=1,#list do local li=resolvers.resolve(list[i]) if lfs.isdir(li) then report_resolved("path - %s",li) else report_resolved("path + %s",li) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-lib"] = package.loaded["util-lib"] or true -- original size: 11136, stripped down to: 5549 if not modules then modules={} end modules ['util-lib']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find=string.gsub,string.find local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles local loaded=package.loaded local report_swiglib=logs.reporter("swiglib") local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end) local done=false local function requireswiglib(required,version) local trace_swiglib=trace_swiglib or package.helpers.trace local library=loaded[required] if library==nil then local required_full=gsub(required,"%.","/") local required_path=pathpart(required_full) local required_base=nameonly(required_full) local required_name=required_base.."."..os.libsuffix local version=type(version)=="string" and version~="" and version or false local engine=environment.ownmain or false if trace_swiglib and not done then local list=resolvers.expandedpathlistfromvariable("lib") for i=1,#list do report_swiglib("tds path %i: %s",i,list[i]) end end local function found(locate,asked_library,how,...) if trace_swiglib then report_swiglib("checking %s: %a",how,asked_library) end return locate(asked_library,...) end local function check(locate,...) local found=nil if version then local asked_library=joinfile(required_path,version,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found=locate(asked_library,...) end if not found or found=="" then local asked_library=joinfile(required_path,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found=locate(asked_library,...) end return found and found~="" and found or false end local function attempt(checkpattern) if trace_swiglib then report_swiglib("checking tds lib paths strictly") end local found=findfile and check(findfile,"lib") if found and (not checkpattern or find(found,checkpattern)) then return found end if trace_swiglib then report_swiglib("checking tds lib paths with wildcard") end local asked_library=joinfile(required_path,".*",required_name) if trace_swiglib then report_swiglib("checking %s: %a","latest version",asked_library) end local list=findfiles(asked_library,"lib",true) if list and #list>0 then table.sort(list) local found=list[#list] if found and (not checkpattern or find(found,checkpattern)) then return found end end if trace_swiglib then report_swiglib("checking lib paths") end package.extralibpath(environment.ownpath) local paths=package.libpaths() for i=1,#paths do local found=check(lfs.isfile) if found and (not checkpattern or find(found,checkpattern)) then return found end end return false end local found_library=nil if engine then if trace_swiglib then report_swiglib("attemp 1, engine %a",engine) end found_library=attempt("/"..engine.."/") if not found_library then if trace_swiglib then report_swiglib("attemp 2, no engine",asked_library) end found_library=attempt() end else found_library=attempt() end if not found_library then if trace_swiglib then report_swiglib("not found: %a",required) end library=false else local path=pathpart(found_library) local base=nameonly(found_library) dir.push(path) if trace_swiglib then report_swiglib("found: %a",found_library) end local message=nil local opener="luaopen_"..required_base library,message=package.loadlib(found_library,opener) local libtype=type(library) if libtype=="function" then library=library() else report_swiglib("load error: %a returns %a, message %a",opener,libtype,message or "no message") library=false end dir.pop() end if not library then report_swiglib("unknown: %a",required) elseif trace_swiglib then report_swiglib("stored: %a",required) end loaded[required]=library else report_swiglib("reused: %a",required) end return library end local savedrequire=require function require(name,version) if find(name,"^swiglib%.") then return requireswiglib(name,version) else return savedrequire(name) end end local swiglibs={} function swiglib(name,version) local library=swiglibs[name] if not library then statistics.starttiming(swiglibs) if trace_swiglib then report_swiglib("loading %a",name) end library=requireswiglib("swiglib."..name,version) swiglibs[name]=library statistics.stoptiming(swiglibs) end return library end statistics.register("used swiglibs",function() if next(swiglibs) then return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs)) end end) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-sta"] = package.loaded["luat-sta"] or true -- original size: 5703, stripped down to: 2507 if not modules then modules={} end modules ['luat-sta']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local gmatch,match=string.gmatch,string.match local type=type states=states or {} local states=states states.data=states.data or {} local data=states.data states.hash=states.hash or {} local hash=states.hash states.tag=states.tag or "" states.filename=states.filename or "" function states.save(filename,tag) tag=tag or states.tag filename=file.addsuffix(filename or states.filename,'lus') io.savedata(filename, "-- generator : luat-sta.lua\n".."-- state tag : "..tag.."\n\n"..table.serialize(data[tag or states.tag] or {},true) ) end function states.load(filename,tag) states.filename=filename states.tag=tag or "whatever" states.filename=file.addsuffix(states.filename,'lus') data[states.tag],hash[states.tag]=(io.exists(filename) and dofile(filename)) or {},{} end local function set_by_tag(tag,key,value,default,persistent) local d,h=data[tag],hash[tag] if d then if type(d)=="table" then local dkey,hkey=key,key local pre,post=match(key,"(.+)%.([^%.]+)$") if pre and post then for k in gmatch(pre,"[^%.]+") do local dk=d[k] if not dk then dk={} d[k]=dk elseif type(dk)=="string" then break end d=dk end dkey,hkey=post,key end if value==nil then value=default elseif value==false then elseif persistent then value=value or d[dkey] or default else value=value or default end d[dkey],h[hkey]=value,value elseif type(d)=="string" then data[tag],hash[tag]=value,value end end end local function get_by_tag(tag,key,default) local h=hash[tag] if h and h[key] then return h[key] else local d=data[tag] if d then for k in gmatch(key,"[^%.]+") do local dk=d[k] if dk~=nil then d=dk else return default end end if d==false then return false else return d or default end end end end states.set_by_tag=set_by_tag states.get_by_tag=get_by_tag function states.set(key,value,default,persistent) set_by_tag(states.tag,key,value,default,persistent) end function states.get(key,default) return get_by_tag(states.tag,key,default) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true -- original size: 5951, stripped down to: 4922 if not modules then modules={} end modules ['luat-fmt']={ version=1.001, comment="companion to mtxrun", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format=string.format local concat=table.concat local quoted=string.quoted local luasuffixes=utilities.lua.suffixes local report_format=logs.reporter("resolvers","formats") local function primaryflags() local trackers=environment.argument("trackers") local directives=environment.argument("directives") local flags={} if trackers and trackers~="" then flags={ "--trackers="..quoted(trackers) } end if directives and directives~="" then flags={ "--directives="..quoted(directives) } end if environment.argument("jit") then flags={ "--jiton" } end return concat(flags," ") end function environment.make_format(name) local engine=environment.ownmain or "luatex" local olddir=dir.current() local path=caches.getwritablepath("formats",engine) or "" if path~="" then lfs.chdir(path) end report_format("using format path %a",dir.current()) local texsourcename=file.addsuffix(name,"mkiv") local fulltexsourcename=resolvers.findfile(texsourcename,"tex") or "" if fulltexsourcename=="" then texsourcename=file.addsuffix(name,"tex") fulltexsourcename=resolvers.findfile(texsourcename,"tex") or "" end if fulltexsourcename=="" then report_format("no tex source file with name %a (mkiv or tex)",name) lfs.chdir(olddir) return else report_format("using tex source file %a",fulltexsourcename) end local texsourcepath=dir.expandname(file.dirname(fulltexsourcename)) local specificationname=file.replacesuffix(fulltexsourcename,"lus") local fullspecificationname=resolvers.findfile(specificationname,"tex") or "" if fullspecificationname=="" then specificationname=file.join(texsourcepath,"context.lus") fullspecificationname=resolvers.findfile(specificationname,"tex") or "" end if fullspecificationname=="" then report_format("unknown stub specification %a",specificationname) lfs.chdir(olddir) return end local specificationpath=file.dirname(fullspecificationname) local usedluastub=nil local usedlualibs=dofile(fullspecificationname) if type(usedlualibs)=="string" then usedluastub=file.join(file.dirname(fullspecificationname),usedlualibs) elseif type(usedlualibs)=="table" then report_format("using stub specification %a",fullspecificationname) local texbasename=file.basename(name) local luastubname=file.addsuffix(texbasename,luasuffixes.lua) local lucstubname=file.addsuffix(texbasename,luasuffixes.luc) report_format("creating initialization file %a",luastubname) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then report_format("using compiled initialization file %a",lucstubname) usedluastub=lucstubname else report_format("using uncompiled initialization file %a",luastubname) usedluastub=luastubname end else report_format("invalid stub specification %a",fullspecificationname) lfs.chdir(olddir) return end local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\") report_format("running command: %s\n",command) os.spawn(command) local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem" local mp=dir.glob(pattern) if mp then for i=1,#mp do local name=mp[i] report_format("removing related mplib format %a",file.basename(name)) os.remove(name) end end lfs.chdir(olddir) end function environment.run_format(name,data,more) if name and name~="" then local engine=environment.ownmain or "luatex" local barename=file.removesuffix(name) local fmtname=caches.getfirstreadablefile(file.addsuffix(barename,"fmt"),"formats",engine) if fmtname=="" then fmtname=resolvers.findfile(file.addsuffix(barename,"fmt")) or "" end fmtname=resolvers.cleanpath(fmtname) if fmtname=="" then report_format("no format with name %a",name) else local barename=file.removesuffix(name) local luaname=file.addsuffix(barename,"luc") if not lfs.isfile(luaname) then luaname=file.addsuffix(barename,"lua") end if not lfs.isfile(luaname) then report_format("using format name %a",fmtname) report_format("no luc/lua file with name %a",barename) else local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "") report_format("running command: %s",command) os.spawn(command) end end end end end -- of closure -- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - -- original bytes : 670212 -- stripped bytes : 245255 -- end library merge -- We need this hack till luatex is fixed. -- -- for k,v in pairs(arg) do print(k,v) end if arg and (arg[0] == 'luatex' or arg[0] == 'luatex.exe') and arg[1] == "--luaonly" then arg[-1]=arg[0] arg[0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end arg[#arg]=nil arg[#arg]=nil end -- End of hack. local format, gsub, gmatch, match, find = string.format, string.gsub, string.gmatch, string.match, string.find local concat = table.concat local ownname = environment and environment.ownname or arg[0] or 'mtxrun.lua' local ownpath = gsub(match(ownname,"^(.+)[\\/].-$") or ".","\\","/") local owntree = environment and environment.ownpath or ownpath local ownlibs = { -- order can be made better 'l-lua.lua', 'l-package.lua', 'l-lpeg.lua', 'l-function.lua', 'l-string.lua', 'l-table.lua', 'l-io.lua', 'l-number.lua', 'l-set.lua', 'l-os.lua', 'l-file.lua', 'l-gzip.lua', 'l-md5.lua', 'l-url.lua', 'l-dir.lua', 'l-boolean.lua', 'l-unicode.lua', 'l-math.lua', 'util-str.lua', -- code might move to l-string 'util-tab.lua', 'util-sto.lua', 'util-prs.lua', 'util-fmt.lua', 'trac-set.lua', 'trac-log.lua', 'trac-inf.lua', -- was before trac-set 'trac-pro.lua', -- not really needed 'util-lua.lua', -- indeed here? 'util-deb.lua', 'util-mrg.lua', 'util-tpl.lua', 'util-env.lua', 'luat-env.lua', -- can come before inf (as in mkiv) 'lxml-tab.lua', 'lxml-lpt.lua', -- 'lxml-ent.lua', 'lxml-mis.lua', 'lxml-aux.lua', 'lxml-xml.lua', 'trac-xml.lua', 'data-ini.lua', 'data-exp.lua', 'data-env.lua', 'data-tmp.lua', 'data-met.lua', 'data-res.lua', 'data-pre.lua', 'data-inp.lua', 'data-out.lua', 'data-fil.lua', 'data-con.lua', 'data-use.lua', -- 'data-tex.lua', -- 'data-bin.lua', 'data-zip.lua', 'data-tre.lua', 'data-sch.lua', 'data-lua.lua', 'data-aux.lua', -- updater 'data-tmf.lua', 'data-lst.lua', 'util-lib.lua', -- swiglib 'luat-sta.lua', 'luat-fmt.lua', } local ownlist = { '.', ownpath , ownpath .. "/../sources", -- HH's development path owntree .. "/../../texmf-local/tex/context/base", owntree .. "/../../texmf-context/tex/context/base", owntree .. "/../../texmf-dist/tex/context/base", owntree .. "/../../texmf/tex/context/base", owntree .. "/../../../texmf-local/tex/context/base", owntree .. "/../../../texmf-context/tex/context/base", owntree .. "/../../../texmf-dist/tex/context/base", owntree .. "/../../../texmf/tex/context/base", } if ownpath == "." then table.remove(ownlist,1) end own = { name = ownname, path = ownpath, tree = owntree, list = ownlist, libs = ownlibs, } local function locate_libs() for l=1,#ownlibs do local lib = ownlibs[l] for p =1,#ownlist do local pth = ownlist[p] local filename = pth .. "/" .. lib local found = lfs.isfile(filename) if found then package.path = package.path .. ";" .. pth .. "/?.lua" -- in case l-* does a require return pth end end end end local function load_libs() local found = locate_libs() if found then for l=1,#ownlibs do local filename = found .. "/" .. ownlibs[l] local codeblob = loadfile(filename) if codeblob then codeblob() end end else resolvers = nil end end if not resolvers then load_libs() end if not resolvers then print("") print("Mtxrun is unable to start up due to lack of libraries. You may") print("try to run 'lua mtxrun.lua --selfmerge' in the path where this") print("script is located (normally under ..../scripts/context/lua) which") print("will make this script library independent.") os.exit() end -- verbosity local e_verbose = environment.arguments["verbose"] if e_verbose then trackers.enable("resolvers.locating") end -- some common flags (also passed through environment) local e_silent = environment.argument("silent") local e_noconsole = environment.argument("noconsole") local e_trackers = environment.argument("trackers") local e_directives = environment.argument("directives") local e_experiments = environment.argument("experiments") if e_silent == true then e_silent = "*" end if type(e_silent) == "string" then if type(e_directives) == "string" then e_directives = format("%s,logs.blocked={%s}",e_directives,e_silent) else e_directives = format("logs.blocked={%s}",e_silent) end end if e_noconsole then if type(e_directives) == "string" then e_directives = format("%s,logs.target=file",e_directives) else e_directives = format("logs.target=file") end end if e_trackers then trackers .enable(e_trackers) end if e_directives then directives .enable(e_directives) end if e_experiments then experiments.enable(e_experiments) end if not environment.trackers then environment.trackers = e_trackers end if not environment.directives then environment.directives = e_directives end if not environment.experiments then environment.experiments = e_experiments end -- local instance = resolvers.reset() local helpinfo = [[ mtxrun ConTeXt TDS Runner Tool 1.31 run an mtx script (lua prefered method) (), no script gives list run a script or program (texmfstart method) () resolve prefixed arguments run internally (using preloaded libs) run script using built in libraries (same as ) locate given filename in database (default) or system ( ) use texmf tree cf. env texmfstart_tree or texmfstarttree use given texmf tree (default file: setuptex.tmf) use given (tmf) environment file go to given path before execution only execute when given file has changed (md checksum) only execute when given file has changed (time stamp) create stubs for (context related) scripts remove stubs (context related) scripts paths where stubs wil be written create windows (mswin) stubs create unix (linux) stubs give a bit more info enable given trackers format or backend launch editor with found file launch files like manuals, assumes os support () run a script and time its run regenerate databases if needed (handy when used to run context in an editor) use kpse as fallback (when no mkiv and cache installed, often slower) force using kpse (handy when no mkiv and cache installed but less functionality) show supported prefixes generate file database show configuration variables show configuration order show (known) directives show (known) trackers show (known) experiments expand complex variable expand variable (resolve paths) expand variable (resolve references) show path expansion of ... report value of variable report file location report path of file filter variables ]] local application = logs.application { name = "mtxrun", banner = "ConTeXt TDS Runner Tool 1.31", helpinfo = helpinfo, } local report = application.report messages = messages or { } -- for the moment runners = runners or { } -- global (might become local) runners.applications = { ["lua"] = "luatex --luaonly", ["luc"] = "luatex --luaonly", ["pl"] = "perl", ["py"] = "python", ["rb"] = "ruby", } runners.suffixes = { 'rb', 'lua', 'py', 'pl' } runners.registered = { texexec = { 'texexec.rb', false }, -- context mkii runner (only tool not to be luafied) texutil = { 'texutil.rb', true }, -- old perl based index sorter for mkii (old versions need it) texfont = { 'texfont.pl', true }, -- perl script that makes mkii font metric files texfind = { 'texfind.pl', false }, -- perltk based tex searching tool, mostly used at pragma texshow = { 'texshow.pl', false }, -- perltk based context help system, will be luafied -- texwork = { 'texwork.pl', false }, -- perltk based editing environment, only used at pragma makempy = { 'makempy.pl', true }, mptopdf = { 'mptopdf.pl', true }, pstopdf = { 'pstopdf.rb', true }, -- converts ps (and some more) images, does some cleaning (replaced) -- examplex = { 'examplex.rb', false }, concheck = { 'concheck.rb', false }, runtools = { 'runtools.rb', true }, textools = { 'textools.rb', true }, tmftools = { 'tmftools.rb', true }, ctxtools = { 'ctxtools.rb', true }, rlxtools = { 'rlxtools.rb', true }, pdftools = { 'pdftools.rb', true }, mpstools = { 'mpstools.rb', true }, -- exatools = { 'exatools.rb', true }, xmltools = { 'xmltools.rb', true }, -- luatools = { 'luatools.lua', true }, mtxtools = { 'mtxtools.rb', true }, pdftrimwhite = { 'pdftrimwhite.pl', false }, } runners.launchers = { windows = { }, unix = { }, } -- like runners.libpath("framework"): looks on script's subpath function runners.libpath(...) package.prepend_libpath(file.dirname(environment.ownscript),...) package.prepend_libpath(file.dirname(environment.ownname) ,...) end function runners.prepare() local checkname = environment.argument("ifchanged") if type(checkname) == "string" and checkname ~= "" then local oldchecksum = file.loadchecksum(checkname) local newchecksum = file.checksum(checkname) if oldchecksum == newchecksum then if e_verbose then report("file '%s' is unchanged",checkname) end return "skip" elseif e_verbose then report("file '%s' is changed, processing started",checkname) end file.savechecksum(checkname) end local touchname = environment.argument("iftouched") if type(touchname) == "string" and touchname ~= "" then local oldname, newname = string.splitup(touchname, ",") if oldname and newname and oldname ~= "" and newname ~= "" then if not file.needs_updating(oldname,newname) then if e_verbose then report("file '%s' and '%s' have same age",oldname,newname) end return "skip" elseif e_verbose then report("file '%s' is older than '%s'",oldname,newname) end end end local runpath = environment.argument("path") if type(runpath) == "string" and not lfs.chdir(runpath) then report("unable to change to path '%s'",runpath) return "error" end runners.prepare = function() end return "run" end function runners.execute_script(fullname,internal,nosplit) local noquote = environment.argument("noquotes") if fullname and fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then local path, name, suffix = file.splitname(fullname) local result = "" if path ~= "" then result = fullname elseif name then name = gsub(name,"^int[%a]*:",function() internal = true return "" end ) name = gsub(name,"^script:","") if suffix == "" and runners.registered[name] and runners.registered[name][1] then name = runners.registered[name][1] suffix = file.suffix(name) end if suffix == "" then -- loop over known suffixes for _,s in pairs(runners.suffixes) do result = resolvers.findfile(name .. "." .. s, 'texmfscripts') if result ~= "" then break end end elseif runners.applications[suffix] then result = resolvers.findfile(name, 'texmfscripts') else -- maybe look on path result = resolvers.findfile(name, 'other text files') end end if result and result ~= "" then if not no_split then local before, after = environment.splitarguments(fullname) -- already done environment.arguments_before, environment.arguments_after = before, after end if internal then arg = { } for _,v in pairs(environment.arguments_after) do arg[#arg+1] = v end environment.ownscript = result dofile(result) else local texmfcnf = resolvers.getenv("TEXMFCNF") if not texmfcnf or texmfcnf == "" then texmfcnf = resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.resolve(resolvers.luacnfspec))) resolvers.setenv("TEXMFCNF",table.concat(texmfcnf,";")) -- for running texexec etc (after tl change to texmf-dist) end local binary = runners.applications[file.suffix(result)] result = string.quoted(string.unquoted(result)) -- if string.match(result,' ') and not string.match(result,"^\".*\"$") then -- result = '"' .. result .. '"' -- end if binary and binary ~= "" then result = binary .. " " .. result end local command = result .. " " .. environment.reconstructcommandline(environment.arguments_after,noquote) if e_verbose then report() report("executing: %s",command) report() report() io.flush() end -- no os.exec because otherwise we get the wrong return value local code = os.execute(command) -- maybe spawn if code == 0 then return true else if binary then binary = file.addsuffix(binary,os.binsuffix) for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do if lfs.isfile(file.join(p,binary)) then return false end end report() report("This script needs '%s' which seems not to be installed.",binary) report() end return false end end end end end return false end function runners.execute_program(fullname) local noquote = environment.argument("noquotes") if fullname and fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then local before, after = environment.splitarguments(fullname) for k=1,#after do after[k] = resolvers.resolve(after[k]) end environment.initializearguments(after) fullname = gsub(fullname,"^bin:","") local command = fullname .. " " .. (environment.reconstructcommandline(after or "",noquote) or "") report() report("executing: %s",command) report() report() io.flush() local code = os.exec(command) -- (fullname,unpack(after)) does not work / maybe spawn return code == 0 end end return false end -- the --usekpse flag will fallback (not default) on kpse (hm, we can better update mtx-stubs) local windows_stub = '@echo off\013\010setlocal\013\010set ownpath=%%~dp0%%\013\010texlua "%%ownpath%%mtxrun.lua" --usekpse --execute %s %%*\013\010endlocal\013\010' local unix_stub = '#!/bin/sh\010mtxrun --usekpse --execute %s \"$@\"\010' function runners.handle_stubs(create) local stubpath = environment.argument('stubpath') or '.' -- 'auto' no longer subpathssupported local windows = environment.argument('windows') or environment.argument('mswin') or false local unix = environment.argument('unix') or environment.argument('linux') or false if not windows and not unix then if os.platform == "unix" then unix = true else windows = true end end for _,v in pairs(runners.registered) do local name, doit = v[1], v[2] if doit then local base = gsub(file.basename(name), "%.(.-)$", "") if create then if windows then io.savedata(file.join(stubpath,base..".bat"),format(windows_stub,name)) report("windows stub for '%s' created",base) end if unix then io.savedata(file.join(stubpath,base),format(unix_stub,name)) report("unix stub for '%s' created",base) end else if windows and (os.remove(file.join(stubpath,base..'.bat')) or os.remove(file.join(stubpath,base..'.cmd'))) then report("windows stub for '%s' removed", base) end if unix and (os.remove(file.join(stubpath,base)) or os.remove(file.join(stubpath,base..'.sh'))) then report("unix stub for '%s' removed",base) end end end end end function runners.resolve_string(filename) if filename and filename ~= "" then runners.report_location(resolvers.resolve(filename)) end end -- differs from texmfstart where locate appends .com .exe .bat ... todo function runners.locate_file(filename) -- was given file but only searches in tree if filename and filename ~= "" then if environment.argument("first") then runners.report_location(resolvers.findfile(filename)) -- resolvers.dowithfilesandreport(resolvers.findfile,filename) elseif environment.argument("all") then local result, status = resolvers.findfiles(filename) if status and environment.argument("detail") then runners.report_location(status) else runners.report_location(result) end else runners.report_location(resolvers.findgivenfile(filename)) -- resolvers.dowithfilesandreport(resolvers.findgivenfile,filename) end end end function runners.locate_platform() runners.report_location(os.platform) end function runners.report_location(result) if type(result) == "table" then for i=1,#result do if i > 1 then io.write("\n") end io.write(result[i]) end else io.write(result) end end function runners.edit_script(filename) -- we assume that gvim is present on most systems (todo: also in cnf file) local editor = os.getenv("MTXRUN_EDITOR") or os.getenv("TEXMFSTART_EDITOR") or os.getenv("EDITOR") or 'gvim' local rest = resolvers.resolve(filename) if rest ~= "" then local command = editor .. " " .. rest if e_verbose then report() report("starting editor: %s",command) report() report() end os.launch(command) end end function runners.save_script_session(filename, list) local t = { } for i=1,#list do local key = list[i] t[key] = environment.arguments[key] end io.savedata(filename,table.serialize(t,true)) end function runners.load_script_session(filename) if lfs.isfile(filename) then local t = io.loaddata(filename) if t then t = loadstring(t) if t then t = t() end for key, value in pairs(t) do environment.arguments[key] = value end end end end function resolvers.launch(str) -- maybe we also need to test on mtxrun.launcher.suffix environment -- variable or on windows consult the assoc and ftype vars and such local launchers = runners.launchers[os.platform] if launchers then local suffix = file.suffix(str) if suffix then local runner = launchers[suffix] if runner then str = runner .. " " .. str end end end os.launch(str) end function runners.launch_file(filename) trackers.enable("resolvers.locating") local allresults = environment.arguments["all"] local pattern = environment.arguments["pattern"] if not pattern or pattern == "" then pattern = filename end if not pattern or pattern == "" then report("provide name or --pattern=") else local t = resolvers.findfiles(pattern,nil,allresults) if not t or #t == 0 then t = resolvers.findfiles("*/" .. pattern,nil,allresults) end if not t or #t == 0 then t = resolvers.findfiles("*/" .. pattern .. "*",nil,allresults) end if t and #t > 0 then if allresults then for _, v in pairs(t) do report("launching %s", v) resolvers.launch(v) end else report("launching %s", t[1]) resolvers.launch(t[1]) end else report("no match for %s", pattern) end end end local mtxprefixes = { { "^mtx%-", "mtx-" }, { "^mtx%-t%-", "mtx-t-" }, } function runners.find_mtx_script(filename) local function found(name) local path = file.dirname(name) if path and path ~= "" then return false else local fullname = own and own.path and file.join(own.path,name) return io.exists(fullname) and fullname end end filename = file.addsuffix(filename,"lua") local basename = file.removesuffix(file.basename(filename)) local suffix = file.suffix(filename) -- qualified path, raw name local fullname = file.is_qualified_path(filename) and io.exists(filename) and filename if fullname and fullname ~= "" then return fullname end -- current path, raw name fullname = "./" .. filename fullname = io.exists(fullname) and fullname if fullname and fullname ~= "" then return fullname end -- mtx- prefix checking for i=1,#mtxprefixes do local mtxprefix = mtxprefixes[i] mtxprefix = find(filename,mtxprefix[1]) and "" or mtxprefix[2] -- context namespace, mtx- fullname = mtxprefix .. filename fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end -- context namespace, mtx-s fullname = mtxprefix .. basename .. "s" .. "." .. suffix fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end -- context namespace, mtx- fullname = mtxprefix .. gsub(basename,"s$","") .. "." .. suffix fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end end -- context namespace, just fullname = resolvers.findfile(filename) return fullname end function runners.register_arguments(...) local arguments = environment.arguments_after local passedon = { ... } for i=#passedon,1,-1 do local pi = passedon[i] if pi then table.insert(arguments,1,pi) end end end function runners.execute_ctx_script(filename,...) runners.register_arguments(...) local arguments = environment.arguments_after local fullname = runners.find_mtx_script(filename) or "" if file.suffix(fullname) == "cld" then -- handy in editors where we force --autopdf report("running cld script: %s",filename) table.insert(arguments,1,fullname) table.insert(arguments,"--autopdf") fullname = runners.find_mtx_script("context") or "" end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() -- fullname = runners.find_mtx_script(filename) or "" end -- that should do it if fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then -- load and save ... kind of undocumented arg = { } for _,v in pairs(arguments) do arg[#arg+1] = resolvers.resolve(v) end environment.initializearguments(arg) local loadname = environment.arguments['load'] if loadname then if type(loadname) ~= "string" then loadname = file.basename(fullname) end loadname = file.replacesuffix(loadname,"cfg") runners.load_script_session(loadname) end filename = environment.files[1] if e_verbose then report("using script: %s\n",fullname) end environment.ownscript = fullname dofile(fullname) local savename = environment.arguments['save'] if savename then local save_list = runners.save_list if save_list and next(save_list) then if type(savename) ~= "string" then savename = file.basename(fullname) end savename = file.replacesuffix(savename,"cfg") runners.save_script_session(savename,save_list) end end return true end else if filename == "" or filename == "help" then local context = resolvers.findfile("mtx-context.lua") trackers.enable("resolvers.locating") if context ~= "" then local result = dir.glob((gsub(context,"mtx%-context","mtx-*"))) -- () needed local valid = { } table.sort(result) for i=1,#result do local scriptname = result[i] local scriptbase = match(scriptname,".*mtx%-([^%-]-)%.lua") if scriptbase then local data = io.loaddata(scriptname) local banner, version = match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)") if banner then valid[#valid+1] = { scriptbase, version, banner } end end end if #valid > 0 then application.identify() report("no script name given, known scripts:") report() for k=1,#valid do local v = valid[k] report("%-12s %4s %s",v[1],v[2],v[3]) end end else report("no script name given") end else filename = file.addsuffix(filename,"lua") if file.is_qualified_path(filename) then report("unknown script '%s'",filename) else report("unknown script '%s' or 'mtx-%s'",filename,filename) end end return false end end function runners.prefixes() application.identify() report() report(concat(resolvers.allprefixes(true)," ")) end function runners.timedrun(filename) -- just for me if filename and filename ~= "" then runners.timed(function() os.execute(filename) end) end end function runners.timed(action) statistics.timed(action) end function runners.associate(filename) os.launch(filename) end function runners.gethelp(filename) local url = environment.argument("url") if url and url ~= "" then local command = string.gsub(environment.argument("command") or "unknown","^%s*\\*(.-)%s*$","%1") url = utilities.templates.replace(url,{ command = command }) os.launch(url) else report("no --url given") end end -- this is a bit dirty ... first we store the first filename and next we -- split the arguments so that we only see the ones meant for this script -- ... later we will use the second half local filename = environment.files[1] or "" local ok = true local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) instance.lsrmode = environment.argument("lsr") or false -- maybe the unset has to go to this level local is_mkii_stub = runners.registered[file.removesuffix(file.basename(filename))] local e_argument = environment.argument if e_argument("usekpse") or e_argument("forcekpse") or is_mkii_stub then resolvers.load_tree(e_argument('tree'),true) -- force resolve of TEXMFCNF os.setenv("engine","") os.setenv("progname","") local remapper = { otf = "opentype fonts", ttf = "truetype fonts", ttc = "truetype fonts", pfb = "type1 fonts", other = "other text files", } local progname = e_argument("progname") or 'context' local function kpse_initialized() texconfig.kpse_init = true local t = os.clock() local k = kpse.original.new("luatex",progname) local dummy = k:find_file("mtxrun.lua") -- so that we're initialized report("kpse fallback with progname '%s' initialized in %s seconds",progname,os.clock()-t) kpse_initialized = function() return k end return k end local findfile = resolvers.findfile local showpath = resolvers.showpath if e_argument("forcekpse") then function resolvers.findfile(name,kind) return (kpse_initialized():find_file(resolvers.cleanpath(name),(kind ~= "" and (remapper[kind] or kind)) or "tex") or "") or "" end function resolvers.showpath(name) return (kpse_initialized():show_path(name)) or "" end elseif e_argument("usekpse") or is_mkii_stub then resolvers.load() function resolvers.findfile(name,kind) local found = findfile(name,kind) or "" if found ~= "" then return found else return (kpse_initialized():find_file(resolvers.cleanpath(name),(kind ~= "" and (remapper[kind] or kind)) or "tex") or "") or "" end end function resolvers.showpath(name) local found = showpath(name) or "" if found ~= "" then return found else return (kpse_initialized():show_path(name)) or "" end end end function runners.loadbase() end else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") instance.renewcache = true trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") end end end resolvers.load_tree(e_argument('tree'),e_argument("resolve")) end if e_argument("script") or e_argument("scripts") then -- run a script by loading it (using libs), pass args runners.loadbase() if is_mkii_stub then ok = runners.execute_script(filename,false,true) else ok = runners.execute_ctx_script(filename) end elseif e_argument("selfmerge") then -- embed used libraries runners.loadbase() local found = locate_libs() if found then utilities.merger.selfmerge(own.name,own.libs,{ found }) end elseif e_argument("selfclean") then -- remove embedded libraries runners.loadbase() utilities.merger.selfclean(own.name) elseif e_argument("selfupdate") then runners.loadbase() trackers.enable("resolvers.locating") resolvers.updatescript(own.name,"mtxrun") elseif e_argument("ctxlua") or e_argument("internal") then -- run a script by loading it (using libs) runners.loadbase() ok = runners.execute_script(filename,true) elseif e_argument("execute") then -- execute script runners.loadbase() ok = runners.execute_script(filename) elseif e_argument("direct") then -- equals bin: runners.loadbase() ok = runners.execute_program(filename) elseif e_argument("edit") then -- edit file runners.loadbase() runners.edit_script(filename) elseif e_argument("launch") then runners.loadbase() runners.launch_file(filename) elseif e_argument("associate") then runners.associate(filename) elseif e_argument("gethelp") then runners.gethelp() elseif e_argument("makestubs") then -- make stubs (depricated) runners.handle_stubs(true) elseif e_argument("removestubs") then -- remove stub (depricated) runners.loadbase() runners.handle_stubs(false) elseif e_argument("resolve") then -- resolve string runners.loadbase() runners.resolve_string(filename) elseif e_argument("locate") then -- locate file (only database) runners.loadbase() runners.locate_file(filename) elseif e_argument("platform") or e_argument("show-platform") then -- locate platform runners.loadbase() runners.locate_platform() elseif e_argument("prefixes") then runners.loadbase() runners.prefixes() elseif e_argument("timedrun") then -- locate platform runners.loadbase() runners.timedrun(filename) elseif e_argument("variables") or e_argument("show-variables") or e_argument("expansions") or e_argument("show-expansions") then -- luatools: runners.execute_ctx_script("mtx-base","--expansions",filename) resolvers.load("nofiles") resolvers.listers.variables(e_argument("pattern")) elseif e_argument("configurations") or e_argument("show-configurations") then -- luatools: runners.execute_ctx_script("mtx-base","--configurations",filename) resolvers.load("nofiles") resolvers.listers.configurations() elseif e_argument("find-file") then -- luatools: runners.execute_ctx_script("mtx-base","--find-file",filename) resolvers.load() local e_all = e_argument("all") local e_pattern = e_argument("pattern") local e_format = e_argument("format") local finder = e_all and resolvers.findfiles or resolvers.findfile if not e_pattern then runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(finder,environment.files,e_format) elseif type(e_pattern) == "string" then resolvers.dowithfilesandreport(finder,{ e_pattern },e_format) end elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() local path = resolvers.findpath(filename, instance.my_format) if e_verbose then report(path) else print(path) end elseif e_argument("expand-braces") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-braces",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expandbraces, environment.files) elseif e_argument("expand-path") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-path",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expandpath, environment.files) elseif e_argument("expand-var") or e_argument("expand-variable") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expansion, environment.files) elseif e_argument("show-path") or e_argument("path-value") then -- luatools: runners.execute_ctx_script("mtx-base","--show-path",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.showpath, environment.files) elseif e_argument("var-value") or e_argument("show-value") then -- luatools: runners.execute_ctx_script("mtx-base","--show-value",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.variable,environment.files) elseif e_argument("format-path") then -- luatools: runners.execute_ctx_script("mtx-base","--format-path",filename) resolvers.load() report(caches.getwritablepath("format")) elseif e_argument("pattern") then -- luatools runners.execute_ctx_script("mtx-base","--pattern='" .. e_argument("pattern") .. "'",filename) elseif e_argument("generate") then -- luatools if filename and filename ~= "" then resolvers.load("nofiles") trackers.enable("resolvers.locating") resolvers.renew(filename) else instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() end e_verbose = true elseif e_argument("make") or e_argument("ini") or e_argument("compile") then -- luatools: runners.execute_ctx_script("mtx-base","--make",filename) resolvers.load() trackers.enable("resolvers.locating") environment.make_format(filename) elseif e_argument("run") then -- luatools runners.execute_ctx_script("mtx-base","--run",filename) elseif e_argument("fmt") then -- luatools runners.execute_ctx_script("mtx-base","--fmt",filename) elseif e_argument("help") and filename=='base' then -- luatools runners.execute_ctx_script("mtx-base","--help") elseif e_argument("version") then application.version() elseif e_argument("directives") then directives.show() elseif e_argument("trackers") then trackers.show() elseif e_argument("experiments") then experiments.show() elseif e_argument("exporthelp") then runners.loadbase() application.export(e_argument("exporthelp"),filename) elseif e_argument("help") or filename=='help' or filename == "" then application.help() elseif find(filename,"^bin:") then runners.loadbase() ok = runners.execute_program(filename) elseif is_mkii_stub then -- execute mkii script runners.loadbase() ok = runners.execute_script(filename,false,true) elseif false then runners.loadbase() ok = runners.execute_ctx_script(filename) if not ok then ok = runners.execute_script(filename) end elseif environment.files[1] == 'texmfcnf.lua' then -- so that we don't need to load mtx-base resolvers.load("nofiles") resolvers.listers.configurations() else runners.loadbase() runners.execute_ctx_script("mtx-base",filename) end if e_verbose then report() report("runtime: %0.3f seconds",os.runtime()) end if os.type ~= "windows" then texio.write("\n") -- is this still valid? end if ok == false then ok = 1 elseif ok == true or ok == nil then ok = 0 end -- os.exit(ok,true) -- true forces a cleanup in 5.2+ os.exit(ok) -- true forces a cleanup in 5.2+ but reports a wrong number then context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/mswin/setuptex.bat0000755000175000017500000000107012130411274026510 0ustar norbertnorbert@ECHO OFF REM author: Hans Hagen - PRAGMA ADE - Hasselt NL - www.pragma-ade.com :userpath if "%SETUPTEX%"=="done" goto done if "%~s1"=="" goto selftest set TEXMFOS=%~s1texmf-mswin if exist %TEXMFOS%\bin\mtxrun.exe goto start set TEXMFOS=%~s1\texmf-mswin if exist %TEXMFOS%\bin\mtxrun.exe goto start :selftest set TEXMFOS=%~d0%~p0texmf-mswin if exist %TEXMFOS%\bin\mtxrun.exe goto start set TEXMFOS=%~d0%~p0\texmf-mswin if exist %TEXMFOS%\bin\mtxrun.exe goto start :start set PATH=%TEXMFOS%\bin;%PATH% :register set SETUPTEX=done set CTXMINIMAL=yes :done context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/0000755000175000017500000000000012162137554023777 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/texmfstart0000755000175000017500000000004011376617116026123 0ustar norbertnorbert#!/bin/sh mtxrun --usekpse "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/ctxtools0000755000175000017500000000005012130471207025566 0ustar norbertnorbert#!/bin/sh mtxrun --script ctxtools "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/texexec0000755000175000017500000000006211376503616025372 0ustar norbertnorbert#!/bin/sh mtxrun --usekpse --execute texexec "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/mtxrun0000755000175000017500000165611112161703335025270 0ustar norbertnorbert#!/usr/bin/env texlua -- for k, v in next, _G.string do -- local tv = type(v) -- if tv == "table" then -- for kk, vv in next, v do -- print(k,kk,vv) -- end -- else -- print(tv,k,v) -- end -- end if not modules then modules = { } end modules ['mtxrun'] = { version = 1.001, comment = "runner, lua replacement for texmfstart.rb", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- one can make a stub: -- -- #!/bin/sh -- env LUATEXDIR=/....../texmf/scripts/context/lua luatex --luaonly mtxrun.lua "$@" -- filename : mtxrun.lua -- comment : companion to context.tex -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL -- copyright: PRAGMA ADE / ConTeXt Development Team -- license : see context related readme files -- This script is based on texmfstart.rb but does not use kpsewhich to -- locate files. Although kpse is a library it never came to opening up -- its interface to other programs (esp scripting languages) and so we -- do it ourselves. The lua variant evolved out of an experimental ruby -- one. Interesting is that using a scripting language instead of c does -- not have a speed penalty. Actually the lua variant is more efficient, -- especially when multiple calls to kpsewhich are involved. The lua -- library also gives way more control. -- to be done / considered -- -- support for --exec or make it default -- support for jar files (or maybe not, never used, too messy) -- support for $RUBYINPUTS cum suis (if still needed) -- remember for subruns: _CTX_K_V_#{original}_ -- remember for subruns: _CTX_K_S_#{original}_ -- remember for subruns: TEXMFSTART.#{original} [tex.rb texmfstart.rb] -- begin library merge do -- create closure to overcome 200 locals limit package.loaded["l-lua"] = package.loaded["l-lua"] or true -- original size: 3123, stripped down to: 1694 if not modules then modules={} end modules ['l-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$") _MAJORVERSION=tonumber(major) or 5 _MINORVERSION=tonumber(minor) or 1 _LUAVERSION=_MAJORVERSION+_MINORVERSION/10 if not lpeg then lpeg=require("lpeg") end if loadstring then local loadnormal=load function load(first,...) if type(first)=="string" then return loadstring(first,...) else return loadnormal(first,...) end end else loadstring=load end if not ipairs then local function iterate(a,i) i=i+1 local v=a[i] if v~=nil then return i,v end end function ipairs(a) return iterate,a,0 end end if not pairs then function pairs(t) return next,t end end if not table.unpack then table.unpack=_G.unpack elseif not unpack then _G.unpack=table.unpack end if not package.loaders then package.loaders=package.searchers end local print,select,tostring=print,select,tostring local inspectors={} function setinspector(inspector) inspectors[#inspectors+1]=inspector end function inspect(...) for s=1,select("#",...) do local value=select(s,...) local done=false for i=1,#inspectors do done=inspectors[i](value) if done then break end end if not done then print(tostring(value)) end end end local dummy=function() end function optionalrequire(...) local ok,result=xpcall(require,dummy,...) if ok then return result end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true -- original size: 9893, stripped down to: 7253 if not modules then modules={} end modules ['l-package']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type=type local gsub,format=string.gsub,string.format local P,S,Cs,lpegmatch=lpeg.P,lpeg.S,lpeg.Cs,lpeg.match local package=package local searchers=package.searchers or package.loaders local filejoin=file and file.join or function(path,name) return path.."/"..name end local isreadable=file and file.is_readable or function(name) local f=io.open(name) if f then f:close() return true end end local addsuffix=file and file.addsuffix or function(name,suffix) return name.."."..suffix end local function cleanpath(path) return path end local pattern=Cs((((1-S("\\/"))^0*(S("\\/")^1/"/"))^0*(P(".")^1/"/"+P(1))^1)*-1) local function lualibfile(name) return lpegmatch(pattern,name) or name end local offset=luarocks and 1 or 0 local helpers=package.helpers or { cleanpath=cleanpath, lualibfile=lualibfile, trace=false, report=function(...) print(format(...)) end, builtin={ ["preload table"]=searchers[1+offset], ["path specification"]=searchers[2+offset], ["cpath specification"]=searchers[3+offset], ["all in one fallback"]=searchers[4+offset], }, methods={}, sequence={ "already loaded", "preload table", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } } package.helpers=helpers local methods=helpers.methods local builtin=helpers.builtin local extraluapaths={} local extralibpaths={} local luapaths=nil local libpaths=nil local oldluapath=nil local oldlibpath=nil local nofextralua=-1 local nofextralib=-1 local nofpathlua=-1 local nofpathlib=-1 local function listpaths(what,paths) local nofpaths=#paths if nofpaths>0 then for i=1,nofpaths do helpers.report("using %s path %i: %s",what,i,paths[i]) end else helpers.report("no %s paths defined",what) end return nofpaths end local function getextraluapaths() if helpers.trace and #extraluapaths~=nofextralua then nofextralua=listpaths("extra lua",extraluapaths) end return extraluapaths end local function getextralibpaths() if helpers.trace and #extralibpaths~=nofextralib then nofextralib=listpaths("extra lib",extralibpaths) end return extralibpaths end local function getluapaths() local luapath=package.path or "" if oldluapath~=luapath then luapaths=file.splitpath(luapath,";") oldluapath=luapath nofpathlua=-1 end if helpers.trace and #luapaths~=nofpathlua then nofpathlua=listpaths("builtin lua",luapaths) end return luapaths end local function getlibpaths() local libpath=package.cpath or "" if oldlibpath~=libpath then libpaths=file.splitpath(libpath,";") oldlibpath=libpath nofpathlib=-1 end if helpers.trace and #libpaths~=nofpathlib then nofpathlib=listpaths("builtin lib",libpaths) end return libpaths end package.luapaths=getluapaths package.libpaths=getlibpaths package.extraluapaths=getextraluapaths package.extralibpaths=getextralibpaths local hashes={ lua={}, lib={}, } local function registerpath(tag,what,target,...) local pathlist={... } local cleanpath=helpers.cleanpath local trace=helpers.trace local report=helpers.report local hash=hashes[what] local function add(path) local path=cleanpath(path) if not hash[path] then target[#target+1]=path hash[path]=true if trace then report("registered %s path %s: %s",tag,#target,path) end else if trace then report("duplicate %s path: %s",tag,path) end end end for p=1,#pathlist do local path=pathlist[p] if type(path)=="table" then for i=1,#path do add(path[i]) end else add(path) end end return paths end helpers.registerpath=registerpath function package.extraluapath(...) registerpath("extra lua","lua",extraluapaths,...) end function package.extralibpath(...) registerpath("extra lib","lib",extralibpaths,...) end local function loadedaslib(resolved,rawname) local base=gsub(rawname,"%.","_") local init="luaopen_"..gsub(base,"%.","_") if helpers.trace then helpers.report("calling loadlib with '%s' with init '%s'",resolved,init) end return package.loadlib(resolved,init) end helpers.loadedaslib=loadedaslib local function loadedbypath(name,rawname,paths,islib,what) local trace=helpers.trace for p=1,#paths do local path=paths[p] local resolved=filejoin(path,name) if trace then helpers.report("%s path, identifying '%s' on '%s'",what,name,path) end if isreadable(resolved) then if trace then helpers.report("%s path, '%s' found on '%s'",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbypath=loadedbypath methods["already loaded"]=function(name) return package.loaded[name] end methods["preload table"]=function(name) return builtin["preload table"](name) end methods["lua extra list"]=function(name) return loadedbypath(addsuffix(lualibfile(name),"lua" ),name,getextraluapaths(),false,"lua") end methods["lib extra list"]=function(name) return loadedbypath(addsuffix(lualibfile(name),os.libsuffix),name,getextralibpaths(),true,"lib") end methods["path specification"]=function(name) getluapaths() return builtin["path specification"](name) end methods["cpath specification"]=function(name) getlibpaths() return builtin["cpath specification"](name) end methods["all in one fallback"]=function(name) return builtin["all in one fallback"](name) end methods["not loaded"]=function(name) if helpers.trace then helpers.report("unable to locate '%s'",name or "?") end return nil end local level=0 local used={} helpers.traceused=false function helpers.loaded(name) local sequence=helpers.sequence level=level+1 for i=1,#sequence do local method=sequence[i] if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end local result,rest=methods[method](name) if type(result)=="function" then if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) end if helpers.traceused then used[#used+1]={ level=level,name=name } end level=level-1 return result,rest end end level=level-1 return nil end function helpers.showused() local n=#used if n>0 then helpers.report("%s libraries loaded:",n) helpers.report() for i=1,n do local u=used[i] helpers.report("%i %a",u.level,u.name) end helpers.report() end end function helpers.unload(name) if helpers.trace then if package.loaded[name] then helpers.report("unloading, name '%s', %s",name,"done") else helpers.report("unloading, name '%s', %s",name,"not loaded") end end package.loaded[name]=nil end table.insert(searchers,1,helpers.loaded) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true -- original size: 26252, stripped down to: 14371 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } lpeg=require("lpeg") local type,next,tostring=type,next,tostring local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format local floor=math.floor local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end) lpeg.patterns=lpeg.patterns or {} local patterns=lpeg.patterns local anything=P(1) local endofstring=P(-1) local alwaysmatched=P(true) patterns.anything=anything patterns.endofstring=endofstring patterns.beginofstring=alwaysmatched patterns.alwaysmatched=alwaysmatched local digit,sign=R('09'),S('+-') local cr,lf,crlf=P("\r"),P("\n"),P("\r\n") local newline=crlf+S("\r\n") local escaped=P("\\")*anything local squote=P("'") local dquote=P('"') local space=P(" ") local utfbom_32_be=P('\000\000\254\255') local utfbom_32_le=P('\255\254\000\000') local utfbom_16_be=P('\255\254') local utfbom_16_le=P('\254\255') local utfbom_8=P('\239\187\191') local utfbom=utfbom_32_be+utfbom_32_le+utfbom_16_be+utfbom_16_le+utfbom_8 local utftype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")+alwaysmatched*Cc("utf-8") local utfoffset=utfbom_32_be*Cc(4)+utfbom_32_le*Cc(4)+utfbom_16_be*Cc(2)+utfbom_16_le*Cc(2)+utfbom_8*Cc(3)+Cc(0) local utf8next=R("\128\191") patterns.utf8one=R("\000\127") patterns.utf8two=R("\194\223")*utf8next patterns.utf8three=R("\224\239")*utf8next*utf8next patterns.utf8four=R("\240\244")*utf8next*utf8next*utf8next patterns.utfbom=utfbom patterns.utftype=utftype patterns.utfoffset=utfoffset local utf8char=patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four local validutf8char=utf8char^0*endofstring*Cc(true)+Cc(false) local utf8character=P(1)*R("\128\191")^0 patterns.utf8=utf8char patterns.utf8char=utf8char patterns.utf8character=utf8character patterns.validutf8=validutf8char patterns.validutf8char=validutf8char local eol=S("\n\r") local spacer=S(" \t\f\v") local whitespace=eol+spacer local nonspacer=1-spacer local nonwhitespace=1-whitespace patterns.eol=eol patterns.spacer=spacer patterns.whitespace=whitespace patterns.nonspacer=nonspacer patterns.nonwhitespace=nonwhitespace local stripper=spacer^0*C((spacer^0*nonspacer^1)^0) local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0)) patterns.stripper=stripper patterns.collapser=collapser patterns.digit=digit patterns.sign=sign patterns.cardinal=sign^0*digit^1 patterns.integer=sign^0*digit^1 patterns.unsigned=digit^0*P('.')*digit^1 patterns.float=sign^0*patterns.unsigned patterns.cunsigned=digit^0*P(',')*digit^1 patterns.cfloat=sign^0*patterns.cunsigned patterns.number=patterns.float+patterns.integer patterns.cnumber=patterns.cfloat+patterns.integer patterns.oct=P("0")*R("07")^1 patterns.octal=patterns.oct patterns.HEX=P("0x")*R("09","AF")^1 patterns.hex=P("0x")*R("09","af")^1 patterns.hexadecimal=P("0x")*R("09","AF","af")^1 patterns.lowercase=R("az") patterns.uppercase=R("AZ") patterns.letter=patterns.lowercase+patterns.uppercase patterns.space=space patterns.tab=P("\t") patterns.spaceortab=patterns.space+patterns.tab patterns.newline=newline patterns.emptyline=newline^1 patterns.equal=P("=") patterns.comma=P(",") patterns.commaspacer=P(",")*spacer^0 patterns.period=P(".") patterns.colon=P(":") patterns.semicolon=P(";") patterns.underscore=P("_") patterns.escaped=escaped patterns.squote=squote patterns.dquote=dquote patterns.nosquote=(escaped+(1-squote))^0 patterns.nodquote=(escaped+(1-dquote))^0 patterns.unsingle=(squote/"")*patterns.nosquote*(squote/"") patterns.undouble=(dquote/"")*patterns.nodquote*(dquote/"") patterns.unquoted=patterns.undouble+patterns.unsingle patterns.unspacer=((patterns.spacer^1)/"")^0 patterns.singlequoted=squote*patterns.nosquote*squote patterns.doublequoted=dquote*patterns.nodquote*dquote patterns.quoted=patterns.doublequoted+patterns.singlequoted patterns.propername=R("AZ","az","__")*R("09","AZ","az","__")^0*P(-1) patterns.somecontent=(anything-newline-space)^1 patterns.beginline=#(1-newline) patterns.longtostring=Cs(whitespace^0/""*nonwhitespace^0*((whitespace^0/" "*(patterns.quoted+nonwhitespace)^1)^0)) local function anywhere(pattern) return P { P(pattern)+1*V(1) } end lpeg.anywhere=anywhere function lpeg.instringchecker(p) p=anywhere(p) return function(str) return lpegmatch(p,str) and true or false end end function lpeg.splitter(pattern,action) return (((1-P(pattern))^1)/action+1)^0 end function lpeg.tsplitter(pattern,action) return Ct((((1-P(pattern))^1)/action+1)^0) end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) local splitter=(single and splitters_s[separator]) or splitters_m[separator] if not splitter then separator=P(separator) local other=C((1-separator)^0) if single then local any=anything splitter=other*(separator*C(any^0)+"") splitters_s[separator]=splitter else splitter=other*(separator*other)^0 splitters_m[separator]=splitter end end return splitter end local function tsplitat(separator) local splitter=splitters_t[separator] if not splitter then splitter=Ct(splitat(separator)) splitters_t[separator]=splitter end return splitter end lpeg.splitat=splitat lpeg.tsplitat=tsplitat function string.splitup(str,separator) if not separator then separator="," end return lpegmatch(splitters_m[separator] or splitat(separator),str) end local cache={} function lpeg.split(separator,str) local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) end function string.split(str,separator) if separator then local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) else return { str } end end local spacing=patterns.spacer^0*newline local empty=spacing*Cc("") local nonempty=Cs((1-spacing)^1)*spacing^-1 local content=(empty+nonempty)^1 patterns.textline=content local linesplitter=tsplitat(newline) patterns.linesplitter=linesplitter function string.splitlines(str) return lpegmatch(linesplitter,str) end local cache={} function lpeg.checkedsplit(separator,str) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end function string.checkedsplit(str,separator) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end local function f2(s) local c1,c2=byte(s,1,2) return c1*64+c2-12416 end local function f3(s) local c1,c2,c3=byte(s,1,3) return (c1*64+c2)*64+c3-925824 end local function f4(s) local c1,c2,c3,c4=byte(s,1,4) return ((c1*64+c2)*64+c3)*64+c4-63447168 end local utf8byte=patterns.utf8one/byte+patterns.utf8two/f2+patterns.utf8three/f3+patterns.utf8four/f4 patterns.utf8byte=utf8byte local cache={} function lpeg.stripper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs(((S(str)^1)/""+1)^0) cache[str]=s end return s else return Cs(((str^1)/""+1)^0) end end local cache={} function lpeg.keeper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs((((1-S(str))^1)/""+1)^0) cache[str]=s end return s else return Cs((((1-str)^1)/""+1)^0) end end function lpeg.frontstripper(str) return (P(str)+P(true))*Cs(anything^0) end function lpeg.endstripper(str) return Cs((1-P(str)*endofstring)^0) end function lpeg.replacer(one,two,makefunction,isutf) local pattern local u=isutf and utf8char or 1 if type(one)=="table" then local no=#one local p=P(false) if no==0 then for k,v in next,one do p=p+P(k)/v end pattern=Cs((p+u)^0) elseif no==1 then local o=one[1] one,two=P(o[1]),o[2] pattern=Cs((one/two+u)^0) else for i=1,no do local o=one[i] p=p+P(o[1])/o[2] end pattern=Cs((p+u)^0) end else pattern=Cs((P(one)/(two or "")+u)^0) end if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end function lpeg.finder(lst,makefunction) local pattern if type(lst)=="table" then pattern=P(false) if #lst==0 then for k,v in next,lst do pattern=pattern+P(k) end else for i=1,#lst do pattern=pattern+P(lst[i]) end end else pattern=P(lst) end pattern=(1-pattern)^0*pattern if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end local splitters_f,splitters_s={},{} function lpeg.firstofsplit(separator) local splitter=splitters_f[separator] if not splitter then separator=P(separator) splitter=C((1-separator)^0) splitters_f[separator]=splitter end return splitter end function lpeg.secondofsplit(separator) local splitter=splitters_s[separator] if not splitter then separator=P(separator) splitter=(1-separator)^0*separator*C(anything^0) splitters_s[separator]=splitter end return splitter end function lpeg.balancer(left,right) left,right=P(left),P(right) return P { left*((1-left-right)+V(1))^0*right } end local nany=utf8char/"" function lpeg.counter(pattern) pattern=Cs((P(pattern)/" "+nany)^0) return function(str) return #lpegmatch(pattern,str) end end utf=utf or (unicode and unicode.utf8) or {} local utfcharacters=utf and utf.characters or string.utfcharacters local utfgmatch=utf and utf.gmatch local utfchar=utf and utf.char lpeg.UP=lpeg.P if utfcharacters then function lpeg.US(str) local p=P(false) for uc in utfcharacters(str) do p=p+P(uc) end return p end elseif utfgmatch then function lpeg.US(str) local p=P(false) for uc in utfgmatch(str,".") do p=p+P(uc) end return p end else function lpeg.US(str) local p=P(false) local f=function(uc) p=p+P(uc) end lpegmatch((utf8char/f)^0,str) return p end end local range=utf8byte*utf8byte+Cc(false) function lpeg.UR(str,more) local first,last if type(str)=="number" then first=str last=more or first else first,last=lpegmatch(range,str) if not last then return P(str) end end if first==last then return P(str) elseif utfchar and (last-first<8) then local p=P(false) for i=first,last do p=p+P(utfchar(i)) end return p else local f=function(b) return b>=first and b<=last end return utf8byte/f end end function lpeg.is_lpeg(p) return p and lpegtype(p)=="pattern" end function lpeg.oneof(list,...) if type(list)~="table" then list={ list,... } end local p=P(list[1]) for l=2,#list do p=p+P(list[l]) end return p end local sort=table.sort local function copyindexed(old) local new={} for i=1,#old do new[i]=old end return new end local function sortedkeys(tab) local keys,s={},0 for key,_ in next,tab do s=s+1 keys[s]=key end sort(keys) return keys end function lpeg.append(list,pp,delayed,checked) local p=pp if #list>0 then local keys=copyindexed(list) sort(keys) for i=#keys,1,-1 do local k=keys[i] if p then p=P(k)+p else p=P(k) end end elseif delayed then local keys=sortedkeys(list) if p then for i=1,#keys,1 do local k=keys[i] local v=list[k] p=P(k)/list+p end else for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)+p else p=P(k) end end if p then p=p/list end end elseif checked then local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then if k==v then p=P(k)+p else p=P(k)/v+p end else if k==v then p=P(k) else p=P(k)/v end end end else local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)/v+p else p=P(k)/v end end end return p end local function make(t) local p local keys=sortedkeys(t) for i=1,#keys do local k=keys[i] local v=t[k] if not p then if next(v) then p=P(k)*make(v) else p=P(k) end else if next(v) then p=p+P(k)*make(v) else p=p+P(k) end end end return p end function lpeg.utfchartabletopattern(list) local tree={} for i=1,#list do local t=tree for c in gmatch(list[i],".") do if not t[c] then t[c]={} end t=t[c] end end return make(tree) end patterns.containseol=lpeg.finder(eol) local function nextstep(n,step,result) local m=n%step local d=floor(n/step) if d>0 then local v=V(tostring(step)) local s=result.start for i=1,d do if s then s=v*s else s=v end end result.start=s end if step>1 and result.start then local v=V(tostring(step/2)) result[tostring(step)]=v*v end if step>0 then return nextstep(m,step/2,result) else return result end end function lpeg.times(pattern,n) return P(nextstep(n,2^16,{ "start",["1"]=pattern })) end local digit=R("09") local period=P(".") local zero=P("0") local trailingzeros=zero^0*-digit local case_1=period*trailingzeros/"" local case_2=period*(digit-trailingzeros)^1*(trailingzeros/"") local number=digit^1*(case_1+case_2) local stripper=Cs((number+1)^0) lpeg.patterns.stripzeros=stripper end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-function"] = package.loaded["l-function"] or true -- original size: 361, stripped down to: 322 if not modules then modules={} end modules ['l-functions']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } functions=functions or {} function functions.dummy() end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-string"] = package.loaded["l-string"] or true -- original size: 5513, stripped down to: 2708 if not modules then modules={} end modules ['l-string']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local string=string local sub,gmatch,format,char,byte,rep,lower=string.sub,string.gmatch,string.format,string.char,string.byte,string.rep,string.lower local lpegmatch,patterns=lpeg.match,lpeg.patterns local P,S,C,Ct,Cc,Cs=lpeg.P,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.Cs local unquoted=patterns.squote*C(patterns.nosquote)*patterns.squote+patterns.dquote*C(patterns.nodquote)*patterns.dquote function string.unquoted(str) return lpegmatch(unquoted,str) or str end function string.quoted(str) return format("%q",str) end function string.count(str,pattern) local n=0 for _ in gmatch(str,pattern) do n=n+1 end return n end function string.limit(str,n,sentinel) if #str>n then sentinel=sentinel or "..." return sub(str,1,(n-#sentinel))..sentinel else return str end end local stripper=patterns.stripper local collapser=patterns.collapser local longtostring=patterns.longtostring function string.strip(str) return lpegmatch(stripper,str) or "" end function string.collapsespaces(str) return lpegmatch(collapser,str) or "" end function string.longtostring(str) return lpegmatch(longtostring,str) or "" end local pattern=P(" ")^0*P(-1) function string.is_empty(str) if str=="" then return true else return lpegmatch(pattern,str) and true or false end end local anything=patterns.anything local allescapes=Cc("%")*S(".-+%?()[]*") local someescapes=Cc("%")*S(".-+%()[]") local matchescapes=Cc(".")*S("*?") local pattern_a=Cs ((allescapes+anything )^0 ) local pattern_b=Cs ((someescapes+matchescapes+anything )^0 ) local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") ) function string.escapedpattern(str,simple) return lpegmatch(simple and pattern_b or pattern_a,str) end function string.topattern(str,lowercase,strict) if str=="" or type(str)~="string" then return ".*" elseif strict then str=lpegmatch(pattern_c,str) else str=lpegmatch(pattern_b,str) end if lowercase then return lower(str) else return str end end function string.valid(str,default) return (type(str)=="string" and str~="" and str) or default or nil end string.itself=function(s) return s end local pattern=Ct(C(1)^0) function string.totable(str) return lpegmatch(pattern,str) end local replacer=lpeg.replacer("@","%%") function string.tformat(fmt,...) return format(lpegmatch(replacer,fmt),...) end string.quote=string.quoted string.unquote=string.unquoted end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-table"] = package.loaded["l-table"] or true -- original size: 44626, stripped down to: 19688 if not modules then modules={} end modules ['l-table']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring,tonumber,ipairs,select=type,next,tostring,tonumber,ipairs,select local table,string=table,string local concat,sort,insert,remove=table.concat,table.sort,table.insert,table.remove local format,lower,dump=string.format,string.lower,string.dump local getmetatable,setmetatable=getmetatable,setmetatable local getinfo=debug.getinfo local lpegmatch,patterns=lpeg.match,lpeg.patterns local floor=math.floor local stripper=patterns.stripper function table.strip(tab) local lst,l={},0 for i=1,#tab do local s=lpegmatch(stripper,tab[i]) or "" if s=="" then else l=l+1 lst[l]=s end end return lst end function table.keys(t) if t then local keys,k={},0 for key,_ in next,t do k=k+1 keys[k]=key end return keys else return {} end end local function compare(a,b) local ta,tb=type(a),type(b) if ta==tb then return a0 then local n=0 for _,v in next,t do n=n+1 end if n==#t then local tt,nt={},0 for i=1,#t do local v=t[i] local tv=type(v) if tv=="number" then nt=nt+1 if hexify then tt[nt]=format("0x%04X",v) else tt[nt]=tostring(v) end elseif tv=="boolean" then nt=nt+1 tt[nt]=tostring(v) elseif tv=="string" then nt=nt+1 tt[nt]=format("%q",v) else tt=nil break end end return tt end end return nil end local propername=patterns.propername local function dummy() end local function do_serialize(root,name,depth,level,indexed) if level>0 then depth=depth.." " if indexed then handle(format("%s{",depth)) else local tn=type(name) if tn=="number" then if hexify then handle(format("%s[0x%04X]={",depth,name)) else handle(format("%s[%s]={",depth,name)) end elseif tn=="string" then if noquotes and not reserved[name] and lpegmatch(propername,name) then handle(format("%s%s={",depth,name)) else handle(format("%s[%q]={",depth,name)) end elseif tn=="boolean" then handle(format("%s[%s]={",depth,tostring(name))) else handle(format("%s{",depth)) end end end if root and next(root) then local first,last=nil,0 if compact then last=#root for k=1,last do if root[k]==nil then last=k-1 break end end if last>0 then first=1 end end local sk=sortedkeys(root) for i=1,#sk do local k=sk[i] local v=root[k] local t,tk=type(v),type(k) if compact and first and tk=="number" and k>=first and k<=last then if t=="number" then if hexify then handle(format("%s 0x%04X,",depth,v)) else handle(format("%s %s,",depth,v)) end elseif t=="string" then if reduce and tonumber(v) then handle(format("%s %s,",depth,v)) else handle(format("%s %q,",depth,v)) end elseif t=="table" then if not next(v) then handle(format("%s {},",depth)) elseif inline then local st=simple_table(v) if st then handle(format("%s { %s },",depth,concat(st,", "))) else do_serialize(v,k,depth,level+1,true) end else do_serialize(v,k,depth,level+1,true) end elseif t=="boolean" then handle(format("%s %s,",depth,tostring(v))) elseif t=="function" then if functions then handle(format('%s load(%q),',depth,dump(v))) else handle(format('%s "function",',depth)) end else handle(format("%s %q,",depth,tostring(v))) end elseif k=="__p__" then if false then handle(format("%s __p__=nil,",depth)) end elseif t=="number" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=0x%04X,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then if hexify then handle(format("%s [%s]=0x%04X,",depth,tostring(k),v)) else handle(format("%s [%s]=%s,",depth,tostring(k),v)) end elseif noquotes and not reserved[k] and lpegmatch(propername,k) then if hexify then handle(format("%s %s=0x%04X,",depth,k,v)) else handle(format("%s %s=%s,",depth,k,v)) end else if hexify then handle(format("%s [%q]=0x%04X,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end end elseif t=="string" then if reduce and tonumber(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,v)) else handle(format("%s [%s]=%q,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,v)) else handle(format("%s [%q]=%q,",depth,k,v)) end end elseif t=="table" then if not next(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]={},",depth,k)) else handle(format("%s [%s]={},",depth,k)) end elseif tk=="boolean" then handle(format("%s [%s]={},",depth,tostring(k))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={},",depth,k)) else handle(format("%s [%q]={},",depth,k)) end elseif inline then local st=simple_table(v) if st then if tk=="number" then if hexify then handle(format("%s [0x%04X]={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%s]={ %s },",depth,k,concat(st,", "))) end elseif tk=="boolean" then handle(format("%s [%s]={ %s },",depth,tostring(k),concat(st,", "))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%q]={ %s },",depth,k,concat(st,", "))) end else do_serialize(v,k,depth,level+1) end else do_serialize(v,k,depth,level+1) end elseif t=="boolean" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,tostring(v))) else handle(format("%s [%s]=%s,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,tostring(v))) else handle(format("%s [%q]=%s,",depth,k,tostring(v))) end elseif t=="function" then if functions then local f=getinfo(v).what=="C" and dump(dummy) or dump(v) if tk=="number" then if hexify then handle(format("%s [0x%04X]=load(%q),",depth,k,f)) else handle(format("%s [%s]=load(%q),",depth,k,f)) end elseif tk=="boolean" then handle(format("%s [%s]=load(%q),",depth,tostring(k),f)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=load(%q),",depth,k,f)) else handle(format("%s [%q]=load(%q),",depth,k,f)) end end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,tostring(v))) else handle(format("%s [%s]=%q,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,tostring(v))) else handle(format("%s [%q]=%q,",depth,k,tostring(v))) end end end end if level>0 then handle(format("%s},",depth)) end end local function serialize(_handle,root,name,specification) local tname=type(name) if type(specification)=="table" then noquotes=specification.noquotes hexify=specification.hexify handle=_handle or specification.handle or print reduce=specification.reduce or false functions=specification.functions compact=specification.compact inline=specification.inline and compact if functions==nil then functions=true end if compact==nil then compact=true end if inline==nil then inline=compact end else noquotes=false hexify=false handle=_handle or print reduce=false compact=true inline=true functions=true end if tname=="string" then if name=="return" then handle("return {") else handle(name.."={") end elseif tname=="number" then if hexify then handle(format("[0x%04X]={",name)) else handle("["..name.."]={") end elseif tname=="boolean" then if name then handle("return {") else handle("{") end else handle("t={") end if root then if getmetatable(root) then local dummy=root._w_h_a_t_e_v_e_r_ root._w_h_a_t_e_v_e_r_=nil end if next(root) then do_serialize(root,name,"",0) end end handle("}") end function table.serialize(root,name,specification) local t,n={},0 local function flush(s) n=n+1 t[n]=s end serialize(flush,root,name,specification) return concat(t,"\n") end table.tohandle=serialize local maxtab=2*1024 function table.tofile(filename,root,name,specification) local f=io.open(filename,'w') if f then if maxtab>1 then local t,n={},0 local function flush(s) n=n+1 t[n]=s if n>maxtab then f:write(concat(t,"\n"),"\n") t,n={},0 end end serialize(flush,root,name,specification) f:write(concat(t,"\n"),"\n") else local function flush(s) f:write(s,"\n") end serialize(flush,root,name,specification) end f:close() io.flush() end end local function flattened(t,f,depth) if f==nil then f={} depth=0xFFFF elseif tonumber(f) then depth=f f={} elseif not depth then depth=0xFFFF end for k,v in next,t do if type(k)~="number" then if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end end for k=1,#t do local v=t[k] if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end return f end table.flattened=flattened local function unnest(t,f) if not f then f={} end for i=1,#t do local v=t[i] if type(v)=="table" then if type(v[1])=="table" then unnest(v,f) else f[#f+1]=v end else f[#f+1]=v end end return f end function table.unnest(t) return unnest(t) end local function are_equal(a,b,n,m) if a and b and #a==#b then n=n or 1 m=m or #a for i=n,m do local ai,bi=a[i],b[i] if ai==bi then elseif type(ai)=="table" and type(bi)=="table" then if not are_equal(ai,bi) then return false end else return false end end return true else return false end end local function identical(a,b) for ka,va in next,a do local vb=b[ka] if va==vb then elseif type(va)=="table" and type(vb)=="table" then if not identical(va,vb) then return false end else return false end end return true end table.identical=identical table.are_equal=are_equal function table.compact(t) if t then for k,v in next,t do if not next(v) then t[k]=nil end end end end function table.contains(t,v) if t then for i=1,#t do if t[i]==v then return i end end end return false end function table.count(t) local n=0 for k,v in next,t do n=n+1 end return n end function table.swapped(t,s) local n={} if s then for k,v in next,s do n[k]=v end end for k,v in next,t do n[v]=k end return n end function table.mirrored(t) local n={} for k,v in next,t do n[v]=k n[k]=v end return n end function table.reversed(t) if t then local tt,tn={},#t if tn>0 then local ttn=0 for i=tn,1,-1 do ttn=ttn+1 tt[ttn]=t[i] end end return tt end end function table.reverse(t) if t then local n=#t for i=1,floor(n/2) do local j=n-i+1 t[i],t[j]=t[j],t[i] end return t end end function table.sequenced(t,sep,simple) if not t then return "" end local n=#t local s={} if n>0 then for i=1,n do s[i]=tostring(t[i]) end else n=0 for k,v in sortedhash(t) do if simple then if v==true then n=n+1 s[n]=k elseif v and v~="" then n=n+1 s[n]=k.."="..tostring(v) end else n=n+1 s[n]=k.."="..tostring(v) end end end return concat(s,sep or " | ") end function table.print(t,...) if type(t)~="table" then print(tostring(t)) else serialize(print,t,...) end end setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end) function table.sub(t,i,j) return { unpack(t,i,j) } end function table.is_empty(t) return not t or not next(t) end function table.has_one_entry(t) return t and not next(t,next(t)) end function table.loweredkeys(t) local l={} for k,v in next,t do l[lower(k)]=v end return l end function table.unique(old) local hash={} local new={} local n=0 for i=1,#old do local oi=old[i] if not hash[oi] then n=n+1 new[n]=oi hash[oi]=true end end return new end function table.sorted(t,...) sort(t,...) return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-io"] = package.loaded["l-io"] or true -- original size: 8799, stripped down to: 6325 if not modules then modules={} end modules ['l-io']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local io=io local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format local concat=table.concat local floor=math.floor local type=type if string.find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator="\\",";" else io.fileseparator,io.pathseparator="/",":" end local function readall(f) return f:read("*all") end local function readall(f) local size=f:seek("end") if size==0 then return "" elseif size<1024*1024 then f:seek("set",0) return f:read('*all') else local done=f:seek("set",0) if size<1024*1024 then step=1024*1024 elseif size>16*1024*1024 then step=16*1024*1024 else step=floor(size/(1024*1024))*1024*1024/8 end local data={} while true do local r=f:read(step) if not r then return concat(data) else data[#data+1]=r end end end end io.readall=readall function io.loaddata(filename,textmode) local f=io.open(filename,(textmode and 'r') or 'rb') if f then local data=readall(f) f:close() if #data>0 then return data end end end function io.savedata(filename,data,joiner) local f=io.open(filename,"wb") if f then if type(data)=="table" then f:write(concat(data,joiner or "")) elseif type(data)=="function" then data(f) else f:write(data or "") end f:close() io.flush() return true else return false end end function io.loadlines(filename,n) local f=io.open(filename,'r') if not f then elseif n then local lines={} for i=1,n do local line=f:read("*lines") if line then lines[#lines+1]=line else break end end f:close() lines=concat(lines,"\n") if #lines>0 then return lines end else local line=f:read("*line") or "" f:close() if #line>0 then return line end end end function io.loadchunk(filename,n) local f=io.open(filename,'rb') if f then local data=f:read(n or 1024) f:close() if #data>0 then return data end end end function io.exists(filename) local f=io.open(filename) if f==nil then return false else f:close() return true end end function io.size(filename) local f=io.open(filename) if f==nil then return 0 else local s=f:seek("end") f:close() return s end end function io.noflines(f) if type(f)=="string" then local f=io.open(filename) if f then local n=f and io.noflines(f) or 0 f:close() return n else return 0 end else local n=0 for _ in f:lines() do n=n+1 end f:seek('set',0) return n end end local nextchar={ [ 4]=function(f) return f:read(1,1,1,1) end, [ 2]=function(f) return f:read(1,1) end, [ 1]=function(f) return f:read(1) end, [-2]=function(f) local a,b=f:read(1,1) return b,a end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) return d,c,b,a end } function io.characters(f,n) if f then return nextchar[n or 1],f end end local nextbyte={ [4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(a),byte(b),byte(c),byte(d) end end, [3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(a),byte(b),byte(c) end end, [2]=function(f) local a,b=f:read(1,1) if b then return byte(a),byte(b) end end, [1]=function (f) local a=f:read(1) if a then return byte(a) end end, [-2]=function (f) local a,b=f:read(1,1) if b then return byte(b),byte(a) end end, [-3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(c),byte(b),byte(a) end end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(d),byte(c),byte(b),byte(a) end end } function io.bytes(f,n) if f then return nextbyte[n or 1],f else return nil,nil end end function io.ask(question,default,options) while true do io.write(question) if options then io.write(format(" [%s]",concat(options,"|"))) end if default then io.write(format(" [%s]",default)) end io.write(format(" ")) io.flush() local answer=io.read() answer=gsub(answer,"^%s*(.*)%s*$","%1") if answer=="" and default then return default elseif not options then return answer else for k=1,#options do if options[k]==answer then return answer end end local pattern="^"..answer for k=1,#options do local v=options[k] if find(v,pattern) then return v end end end end end local function readnumber(f,n,m) if m then f:seek("set",n) n=m end if n==1 then return byte(f:read(1)) elseif n==2 then local a,b=byte(f:read(2),1,2) return 256*a+b elseif n==3 then local a,b,c=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==4 then local a,b,c,d=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==8 then local a,b=readnumber(f,4),readnumber(f,4) return 256*a+b elseif n==12 then local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4) return 256*256*a+256*b+c elseif n==-2 then local b,a=byte(f:read(2),1,2) return 256*a+b elseif n==-3 then local c,b,a=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==-4 then local d,c,b,a=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==-8 then local h,g,f,e,d,c,b,a=byte(f:read(8),1,8) return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h else return 0 end end io.readnumber=readnumber function io.readstring(f,n,m) if m then f:seek("set",n) n=m end local str=gsub(f:read(n),"\000","") return str end if not io.i_limiter then function io.i_limiter() end end if not io.o_limiter then function io.o_limiter() end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-number"] = package.loaded["l-number"] or true -- original size: 4939, stripped down to: 2830 if not modules then modules={} end modules ['l-number']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local tostring,tonumber=tostring,tonumber local format,floor,match,rep=string.format,math.floor,string.match,string.rep local concat,insert=table.concat,table.insert local lpegmatch=lpeg.match number=number or {} local number=number if bit32 then local btest,bor=bit32.btest,bit32.bor function number.bit(p) return 2^(p-1) end number.hasbit=btest number.setbit=bor function number.setbit(x,p) return btest(x,p) and x or x+p end function number.clearbit(x,p) return btest(x,p) and x-p or x end else function number.bit(p) return 2^(p-1) end function number.hasbit(x,p) return x%(p+p)>=p end function number.setbit(x,p) return (x%(p+p)>=p) and x or x+p end function number.clearbit(x,p) return (x%(p+p)>=p) and x-p or x end end if bit32 then local bextract=bit32.extract local t={ "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", } function number.tobitstring(b,m) local n=32 for i=0,31 do local v=bextract(b,i) local k=32-i if v==1 then n=k t[k]="1" else t[k]="0" end end if m then m=33-m*8 if m<1 then m=1 end return concat(t,"",m) elseif n<8 then return concat(t) elseif n<16 then return concat(t,"",9) elseif n<24 then return concat(t,"",17) else return concat(t,"",25) end end else function number.tobitstring(n,m) if n>0 then local t={} while n>0 do insert(t,1,n%2>0 and 1 or 0) n=floor(n/2) end local nn=8-#t%8 if nn>0 and nn<8 then for i=1,nn do insert(t,1,0) end end if m then m=m*8-#t if m>0 then insert(t,1,rep("0",m)) end end return concat(t) elseif m then rep("00000000",m) else return "00000000" end end end function number.valid(str,default) return tonumber(str) or default or nil end function number.toevenhex(n) local s=format("%X",n) if #s%2==0 then return s else return "0"..s end end local one=lpeg.C(1-lpeg.S('')/tonumber)^1 function number.toset(n) return lpegmatch(one,tostring(n)) end local function bits(n,i,...) if n>0 then local m=n%2 local n=floor(n/2) if m>0 then return bits(n,i+1,i,...) else return bits(n,i+1,...) end else return... end end function number.bits(n) return { bits(n,1) } end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-set"] = package.loaded["l-set"] or true -- original size: 1923, stripped down to: 1133 if not modules then modules={} end modules ['l-set']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } set=set or {} local nums={} local tabs={} local concat=table.concat local next,type=next,type set.create=table.tohash function set.tonumber(t) if next(t) then local s="" for k,v in next,t do if v then s=s.." "..k end end local n=nums[s] if not n then n=#tabs+1 tabs[n]=t nums[s]=n end return n else return 0 end end function set.totable(n) if n==0 then return {} else return tabs[n] or {} end end function set.tolist(n) if n==0 or not tabs[n] then return "" else local t,n={},0 for k,v in next,tabs[n] do if v then n=n+1 t[n]=k end end return concat(t," ") end end function set.contains(n,s) if type(n)=="table" then return n[s] elseif n==0 then return false else local t=tabs[n] return t and t[s] end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-os"] = package.loaded["l-os"] or true -- original size: 14017, stripped down to: 8504 if not modules then modules={} end modules ['l-os']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local os=os local date,time=os.date,os.time local find,format,gsub,upper,gmatch=string.find,string.format,string.gsub,string.upper,string.gmatch local concat=table.concat local random,ceil,randomseed=math.random,math.ceil,math.randomseed local rawget,rawset,type,getmetatable,setmetatable,tonumber,tostring=rawget,rawset,type,getmetatable,setmetatable,tonumber,tostring math.initialseed=tonumber(string.sub(string.reverse(tostring(ceil(socket and socket.gettime()*10000 or time()))),1,6)) randomseed(math.initialseed) if not os.__getenv__ then os.__getenv__=os.getenv os.__setenv__=os.setenv if os.env then local osgetenv=os.getenv local ossetenv=os.setenv local osenv=os.env local _=osenv.PATH function os.setenv(k,v) if v==nil then v="" end local K=upper(k) osenv[K]=v if type(v)=="table" then v=concat(v,";") end ossetenv(K,v) end function os.getenv(k) local K=upper(k) local v=osenv[K] or osenv[k] or osgetenv(K) or osgetenv(k) if v=="" then return nil else return v end end else local ossetenv=os.setenv local osgetenv=os.getenv local osenv={} function os.setenv(k,v) if v==nil then v="" end local K=upper(k) osenv[K]=v end function os.getenv(k) local K=upper(k) local v=osenv[K] or osgetenv(K) or osgetenv(k) if v=="" then return nil else return v end end local function __index(t,k) return os.getenv(k) end local function __newindex(t,k,v) os.setenv(k,v) end os.env={} setmetatable(os.env,{ __index=__index,__newindex=__newindex } ) end end local execute,spawn,exec,iopopen,ioflush=os.execute,os.spawn or os.execute,os.exec or os.execute,io.popen,io.flush function os.execute(...) ioflush() return execute(...) end function os.spawn (...) ioflush() return spawn (...) end function os.exec (...) ioflush() return exec (...) end function io.popen (...) ioflush() return iopopen(...) end function os.resultof(command) local handle=io.popen(command,"r") return handle and handle:read("*all") or "" end if not io.fileseparator then if find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin" else io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix" end end os.type=os.type or (io.pathseparator==";" and "windows") or "unix" os.name=os.name or (os.type=="windows" and "mswin" ) or "linux" if os.type=="windows" then os.libsuffix,os.binsuffix,os.binsuffixes='dll','exe',{ 'exe','cmd','bat' } else os.libsuffix,os.binsuffix,os.binsuffixes='so','',{ '' } end local launchers={ windows="start %s", macosx="open %s", unix="$BROWSER %s &> /dev/null &", } function os.launch(str) os.execute(format(launchers[os.name] or launchers.unix,str)) end if not os.times then function os.times() return { utime=os.gettimeofday(), stime=0, cutime=0, cstime=0, } end end os.gettimeofday=os.gettimeofday or os.clock local startuptime=os.gettimeofday() function os.runtime() return os.gettimeofday()-startuptime end os.resolvers=os.resolvers or {} local resolvers=os.resolvers setmetatable(os,{ __index=function(t,k) local r=resolvers[k] return r and r(t,k) or nil end }) local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or "" local function guess() local architecture=os.resultof("uname -m") or "" if architecture~="" then return architecture end architecture=os.getenv("HOSTTYPE") or "" if architecture~="" then return architecture end return os.resultof("echo $HOSTTYPE") or "" end if platform~="" then os.platform=platform elseif os.type=="windows" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("PROCESSOR_ARCHITECTURE") or "" if find(architecture,"AMD64") then platform="mswin-64" else platform="mswin" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="linux" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform="linux-64" elseif find(architecture,"ppc") then platform="linux-ppc" else platform="linux" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="macosx" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("echo $HOSTTYPE") or "" if architecture=="" then platform="osx-intel" elseif find(architecture,"i386") then platform="osx-intel" elseif find(architecture,"x86_64") then platform="osx-64" else platform="osx-ppc" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="sunos" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("uname -m") or "" if find(architecture,"sparc") then platform="solaris-sparc" else platform="solaris-intel" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="freebsd" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("uname -m") or "" if find(architecture,"amd64") then platform="freebsd-amd64" else platform="freebsd" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="kfreebsd" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform="kfreebsd-amd64" else platform="kfreebsd-i386" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end else function os.resolvers.platform(t,k) local platform="linux" os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end end local t={ 8,9,"a","b" } function os.uuid() return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x", random(0xFFFF),random(0xFFFF), random(0x0FFF), t[ceil(random(4))] or 8,random(0x0FFF), random(0xFFFF), random(0xFFFF),random(0xFFFF),random(0xFFFF) ) end local d function os.timezone(delta) d=d or tonumber(tonumber(date("%H")-date("!%H"))) if delta then if d>0 then return format("+%02i:00",d) else return format("-%02i:00",-d) end else return 1 end end local timeformat=format("%%s%s",os.timezone(true)) local dateformat="!%Y-%m-%d %H:%M:%S" function os.fulltime(t,default) t=tonumber(t) or 0 if t>0 then elseif default then return default else t=nil end return format(timeformat,date(dateformat,t)) end local dateformat="%Y-%m-%d %H:%M:%S" function os.localtime(t,default) t=tonumber(t) or 0 if t>0 then elseif default then return default else t=nil end return date(dateformat,t) end function os.converttime(t,default) local t=tonumber(t) if t and t>0 then return date(dateformat,t) else return default or "-" end end local memory={} local function which(filename) local fullname=memory[filename] if fullname==nil then local suffix=file.suffix(filename) local suffixes=suffix=="" and os.binsuffixes or { suffix } for directory in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do local df=file.join(directory,filename) for i=1,#suffixes do local dfs=file.addsuffix(df,suffixes[i]) if io.exists(dfs) then fullname=dfs break end end end if not fullname then fullname=false end memory[filename]=fullname end return fullname end os.which=which os.where=which function os.today() return date("!*t") end function os.now() return date("!%Y-%m-%d %H:%M:%S") end if not os.sleep then local socket=socket function os.sleep(n) if not socket then socket=require("socket") end socket.sleep(n) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-file"] = package.loaded["l-file"] or true -- original size: 17777, stripped down to: 9653 if not modules then modules={} end modules ['l-file']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } file=file or {} local file=file if not lfs then lfs=optionalrequire("lfs") end if not lfs then lfs={ getcurrentdir=function() return "." end, attributes=function() return nil end, isfile=function(name) local f=io.open(name,'rb') if f then f:close() return true end end, isdir=function(name) print("you need to load lfs") return false end } elseif not lfs.isfile then local attributes=lfs.attributes function lfs.isdir(name) return attributes(name,"mode")=="directory" end function lfs.isfile(name) return attributes(name,"mode")=="file" end end local insert,concat=table.insert,table.concat local match,find,gmatch=string.match,string.find,string.gmatch local lpegmatch=lpeg.match local getcurrentdir,attributes=lfs.currentdir,lfs.attributes local checkedsplit=string.checkedsplit local P,R,S,C,Cs,Cp,Cc,Ct=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cp,lpeg.Cc,lpeg.Ct local colon=P(":") local period=P(".") local periods=P("..") local fwslash=P("/") local bwslash=P("\\") local slashes=S("\\/") local noperiod=1-period local noslashes=1-slashes local name=noperiod^1 local suffix=period/""*(1-period-slashes)^1*-1 local pattern=C((1-(slashes^1*noslashes^1*-1))^1)*P(1) local function pathpart(name,default) return name and lpegmatch(pattern,name) or default or "" end local pattern=(noslashes^0*slashes)^1*C(noslashes^1)*-1 local function basename(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes^1)^0*Cs((1-suffix)^1)*suffix^0 local function nameonly(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1 local function suffixonly(name) return name and lpegmatch(pattern,name) or "" end local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("") local function suffixesonly(name) if name then return lpegmatch(pattern,name) else return "" end end file.pathpart=pathpart file.basename=basename file.nameonly=nameonly file.suffixonly=suffixonly file.suffix=suffixonly file.suffixesonly=suffixesonly file.suffixes=suffixesonly file.dirname=pathpart file.extname=suffixonly local drive=C(R("az","AZ"))*colon local path=C((noslashes^0*slashes)^0) local suffix=period*C(P(1-period)^0*P(-1)) local base=C((1-suffix)^0) local rest=C(P(1)^0) drive=drive+Cc("") path=path+Cc("") base=base+Cc("") suffix=suffix+Cc("") local pattern_a=drive*path*base*suffix local pattern_b=path*base*suffix local pattern_c=C(drive*path)*C(base*suffix) local pattern_d=path*rest function file.splitname(str,splitdrive) if not str then elseif splitdrive then return lpegmatch(pattern_a,str) else return lpegmatch(pattern_b,str) end end function file.splitbase(str) if str then return lpegmatch(pattern_d,str) else return "",str end end function file.nametotable(str,splitdrive) if str then local path,drive,subpath,name,base,suffix=lpegmatch(pattern_c,str) if splitdrive then return { path=path, drive=drive, subpath=subpath, name=name, base=base, suffix=suffix, } else return { path=path, name=name, base=base, suffix=suffix, } end end end local pattern=Cs(((period*(1-period-slashes)^1*-1)/""+1)^1) function file.removesuffix(name) return name and lpegmatch(pattern,name) end local suffix=period/""*(1-period-slashes)^1*-1 local pattern=Cs((noslashes^0*slashes^1)^0*((1-suffix)^1))*Cs(suffix) function file.addsuffix(filename,suffix,criterium) if not filename or not suffix or suffix=="" then return filename elseif criterium==true then return filename.."."..suffix elseif not criterium then local n,s=lpegmatch(pattern,filename) if not s or s=="" then return filename.."."..suffix else return filename end else local n,s=lpegmatch(pattern,filename) if s and s~="" then local t=type(criterium) if t=="table" then for i=1,#criterium do if s==criterium[i] then return filename end end elseif t=="string" then if s==criterium then return filename end end end return (n or filename).."."..suffix end end local suffix=period*(1-period-slashes)^1*-1 local pattern=Cs((1-suffix)^0) function file.replacesuffix(name,suffix) if name and suffix and suffix~="" then return lpegmatch(pattern,name).."."..suffix else return name end end local reslasher=lpeg.replacer(P("\\"),"/") function file.reslash(str) return str and lpegmatch(reslasher,str) end function file.is_writable(name) if not name then elseif lfs.isdir(name) then name=name.."/m_t_x_t_e_s_t.tmp" local f=io.open(name,"wb") if f then f:close() os.remove(name) return true end elseif lfs.isfile(name) then local f=io.open(name,"ab") if f then f:close() return true end else local f=io.open(name,"ab") if f then f:close() os.remove(name) return true end end return false end local readable=P("r")*Cc(true) function file.is_readable(name) if name then local a=attributes(name) return a and lpegmatch(readable,a.permissions) or false else return false end end file.isreadable=file.is_readable file.iswritable=file.is_writable function file.size(name) if name then local a=attributes(name) return a and a.size or 0 else return 0 end end function file.splitpath(str,separator) return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator) end function file.joinpath(tab,separator) return tab and concat(tab,separator or io.pathseparator) end local stripper=Cs(P(fwslash)^0/""*reslasher) local isnetwork=fwslash*fwslash*(1-fwslash)+(1-fwslash-colon)^1*colon local isroot=fwslash^1*-1 local hasroot=fwslash^1 local deslasher=lpeg.replacer(S("\\/")^1,"/") function file.join(...) local lst={... } local one=lst[1] if lpegmatch(isnetwork,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) return one.."/"..two elseif lpegmatch(isroot,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) if lpegmatch(hasroot,two) then return two else return "/"..two end elseif one=="" then return lpegmatch(stripper,concat(lst,"/",2)) else return lpegmatch(deslasher,concat(lst,"/")) end end local drivespec=R("az","AZ")^1*colon local anchors=fwslash+drivespec local untouched=periods+(1-period)^1*P(-1) local splitstarter=(Cs(drivespec*(bwslash/"/"+fwslash)^0)+Cc(false))*Ct(lpeg.splitat(S("/\\")^1)) local absolute=fwslash function file.collapsepath(str,anchor) if not str then return end if anchor==true and not lpegmatch(anchors,str) then str=getcurrentdir().."/"..str end if str=="" or str=="." then return "." elseif lpegmatch(untouched,str) then return lpegmatch(reslasher,str) end local starter,oldelements=lpegmatch(splitstarter,str) local newelements={} local i=#oldelements while i>0 do local element=oldelements[i] if element=='.' then elseif element=='..' then local n=i-1 while n>0 do local element=oldelements[n] if element~='..' and element~='.' then oldelements[n]='.' break else n=n-1 end end if n<1 then insert(newelements,1,'..') end elseif element~="" then insert(newelements,1,element) end i=i-1 end if #newelements==0 then return starter or "." elseif starter then return starter..concat(newelements,'/') elseif lpegmatch(absolute,str) then return "/"..concat(newelements,'/') else newelements=concat(newelements,'/') if anchor=="." and find(str,"^%./") then return "./"..newelements else return newelements end end end local validchars=R("az","09","AZ","--","..") local pattern_a=lpeg.replacer(1-validchars) local pattern_a=Cs((validchars+P(1)/"-")^1) local whatever=P("-")^0/"" local pattern_b=Cs(whatever*(1-whatever*-1)^1) function file.robustname(str,strict) if str then str=lpegmatch(pattern_a,str) or str if strict then return lpegmatch(pattern_b,str) or str else return str end end end file.readdata=io.loaddata file.savedata=io.savedata function file.copy(oldname,newname) if oldname and newname then local data=io.loaddata(oldname) if data and data~="" then file.savedata(newname,data) end end end local letter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=period^0*fwslash+letter*colon+letter^1*separator+letter^1*fwslash local rootbased=fwslash+letter*colon lpeg.patterns.qualified=qualified lpeg.patterns.rootbased=rootbased function file.is_qualified_path(filename) return filename and lpegmatch(qualified,filename)~=nil end function file.is_rootbased_path(filename) return filename and lpegmatch(rootbased,filename)~=nil end function file.strip(name,dir) if name then local b,a=match(name,"^(.-)"..dir.."(.*)$") return a~="" and a or name end end function lfs.mkdirs(path) local full="" for sub in gmatch(path,"(/*[^\\/]+)") do full=full..sub lfs.mkdir(full) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-gzip"] = package.loaded["l-gzip"] or true -- original size: 1211, stripped down to: 1002 if not modules then modules={} end modules ['l-gzip']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if not gzip then return end local suffix,suffixes=file.suffix,file.suffixes function gzip.load(filename) local f=io.open(filename,"rb") if not f then elseif suffix(filename)=="gz" then f:close() local g=gzip.open(filename,"rb") if g then local str=g:read("*all") g:close() return str end else local str=f:read("*all") f:close() return str end end function gzip.save(filename,data) if suffix(filename)~="gz" then filename=filename..".gz" end local f=io.open(filename,"wb") if f then local s=zlib.compress(data or "",9,nil,15+16) f:write(s) f:close() return #s end end function gzip.suffix(filename) local suffix,extra=suffixes(filename) local gzipped=extra=="gz" return suffix,gzipped end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-md5"] = package.loaded["l-md5"] or true -- original size: 3760, stripped down to: 2088 if not modules then modules={} end modules ['l-md5']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if not md5 then md5=optionalrequire("md5") end if not md5 then md5={ sum=function(str) print("error: md5 is not loaded (sum ignored)") return str end, sumhexa=function(str) print("error: md5 is not loaded (sumhexa ignored)") return str end, } end local md5,file=md5,file local gsub,format,byte=string.gsub,string.format,string.byte local md5sum=md5.sum local function convert(str,fmt) return (gsub(md5sum(str),".",function(chr) return format(fmt,byte(chr)) end)) end if not md5.HEX then function md5.HEX(str) return convert(str,"%02X") end end if not md5.hex then function md5.hex(str) return convert(str,"%02x") end end if not md5.dec then function md5.dec(str) return convert(str,"%03i") end end function file.needsupdating(oldname,newname,threshold) local oldtime=lfs.attributes(oldname,"modification") if oldtime then local newtime=lfs.attributes(newname,"modification") if not newtime then return true elseif newtime>=oldtime then return false elseif oldtime-newtime<(threshold or 1) then return false else return true end else return false end end file.needs_updating=file.needsupdating function file.syncmtimes(oldname,newname) local oldtime=lfs.attributes(oldname,"modification") if oldtime and lfs.isfile(newname) then lfs.touch(newname,oldtime,oldtime) end end function file.checksum(name) if md5 then local data=io.loaddata(name) if data then return md5.HEX(data) end end return nil end function file.loadchecksum(name) if md5 then local data=io.loaddata(name..".md5") return data and (gsub(data,"%s","")) end return nil end function file.savechecksum(name,checksum) if not checksum then checksum=file.checksum(name) end if checksum then io.savedata(name..".md5",checksum) return checksum end return nil end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-url"] = package.loaded["l-url"] or true -- original size: 11806, stripped down to: 5417 if not modules then modules={} end modules ['l-url']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local char,format,byte=string.char,string.format,string.byte local concat=table.concat local tonumber,type=tonumber,type local P,C,R,S,Cs,Cc,Ct,Cf,Cg,V=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Cf,lpeg.Cg,lpeg.V local lpegmatch,lpegpatterns,replacer=lpeg.match,lpeg.patterns,lpeg.replacer url=url or {} local url=url local tochar=function(s) return char(tonumber(s,16)) end local colon=P(":") local qmark=P("?") local hash=P("#") local slash=P("/") local percent=P("%") local endofstring=P(-1) local hexdigit=R("09","AF","af") local plus=P("+") local nothing=Cc("") local escapedchar=(percent*C(hexdigit*hexdigit))/tochar local escaped=(plus/" ")+escapedchar local noslash=P("/")/"" local schemestr=Cs((escaped+(1-colon-slash-qmark-hash))^2) local authoritystr=Cs((escaped+(1- slash-qmark-hash))^0) local pathstr=Cs((escaped+(1- qmark-hash))^0) local querystr=Cs(((1- hash))^0) local fragmentstr=Cs((escaped+(1- endofstring))^0) local scheme=schemestr*colon+nothing local authority=slash*slash*authoritystr+nothing local path=slash*pathstr+nothing local query=qmark*querystr+nothing local fragment=hash*fragmentstr+nothing local validurl=scheme*authority*path*query*fragment local parser=Ct(validurl) lpegpatterns.url=validurl lpegpatterns.urlsplitter=parser local escapes={} setmetatable(escapes,{ __index=function(t,k) local v=format("%%%02X",byte(k)) t[k]=v return v end }) local escaper=Cs((R("09","AZ","az")^1+P(" ")/"%%20"+S("-./_")^1+P(1)/escapes)^0) local unescaper=Cs((escapedchar+1)^0) lpegpatterns.urlunescaped=escapedchar lpegpatterns.urlescaper=escaper lpegpatterns.urlunescaper=unescaper local function split(str) return (type(str)=="string" and lpegmatch(parser,str)) or str end local isscheme=schemestr*colon*slash*slash local function hasscheme(str) if str then local scheme=lpegmatch(isscheme,str) return scheme~="" and scheme or false else return false end end local rootletter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=P(".")^0*P("/")+rootletter*P(":")+rootletter^1*separator+rootletter^1*P("/") local rootbased=P("/")+rootletter*P(":") local barswapper=replacer("|",":") local backslashswapper=replacer("\\","/") local equal=P("=") local amp=P("&") local key=Cs(((escapedchar+1)-equal )^0) local value=Cs(((escapedchar+1)-amp -endofstring)^0) local splitquery=Cf (Ct("")*P { "sequence", sequence=V("pair")*(amp*V("pair"))^0, pair=Cg(key*equal*value), },rawset) local function hashed(str) if str=="" then return { scheme="invalid", original=str, } end local s=split(str) local rawscheme=s[1] local rawquery=s[4] local somescheme=rawscheme~="" local somequery=rawquery~="" if not somescheme and not somequery then s={ scheme="file", authority="", path=str, query="", fragment="", original=str, noscheme=true, filename=str, } else local authority,path,filename=s[2],s[3] if authority=="" then filename=path elseif path=="" then filename="" else filename=authority.."/"..path end s={ scheme=rawscheme, authority=authority, path=path, query=lpegmatch(unescaper,rawquery), queries=lpegmatch(splitquery,rawquery), fragment=s[5], original=str, noscheme=false, filename=filename, } end return s end url.split=split url.hasscheme=hasscheme url.hashed=hashed function url.addscheme(str,scheme) if hasscheme(str) then return str elseif not scheme then return "file:///"..str else return scheme..":///"..str end end function url.construct(hash) local fullurl,f={},0 local scheme,authority,path,query,fragment=hash.scheme,hash.authority,hash.path,hash.query,hash.fragment if scheme and scheme~="" then f=f+1;fullurl[f]=scheme.."://" end if authority and authority~="" then f=f+1;fullurl[f]=authority end if path and path~="" then f=f+1;fullurl[f]="/"..path end if query and query~="" then f=f+1;fullurl[f]="?"..query end if fragment and fragment~="" then f=f+1;fullurl[f]="#"..fragment end return lpegmatch(escaper,concat(fullurl)) end local pattern=Cs(noslash*R("az","AZ")*(S(":|")/":")*noslash*P(1)^0) function url.filename(filename) local spec=hashed(filename) local path=spec.path return (spec.scheme=="file" and path and lpegmatch(pattern,path)) or filename end local function escapestring(str) return lpegmatch(escaper,str) end url.escape=escapestring function url.query(str) if type(str)=="string" then return lpegmatch(splitquery,str) or "" else return str end end function url.toquery(data) local td=type(data) if td=="string" then return #str and escape(data) or nil elseif td=="table" then if next(data) then local t={} for k,v in next,data do t[#t+1]=format("%s=%s",k,escapestring(v)) end return concat(t,"&") end else end end local pattern=Cs(noslash^0*(1-noslash*P(-1))^0) function url.barepath(path) if not path or path=="" then return "" else return lpegmatch(pattern,path) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-dir"] = package.loaded["l-dir"] or true -- original size: 13738, stripped down to: 8560 if not modules then modules={} end modules ['l-dir']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,select=type,select local find,gmatch,match,gsub=string.find,string.gmatch,string.match,string.gsub local concat,insert,remove,unpack=table.concat,table.insert,table.remove,table.unpack local lpegmatch=lpeg.match local P,S,R,C,Cc,Cs,Ct,Cv,V=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Cv,lpeg.V dir=dir or {} local dir=dir local lfs=lfs local attributes=lfs.attributes local walkdir=lfs.dir local isdir=lfs.isdir local isfile=lfs.isfile local currentdir=lfs.currentdir local chdir=lfs.chdir if not isdir then function isdir(name) local a=attributes(name) return a and a.mode=="directory" end lfs.isdir=isdir end if not isfile then function isfile(name) local a=attributes(name) return a and a.mode=="file" end lfs.isfile=isfile end function dir.current() return (gsub(currentdir(),"\\","/")) end local lfsisdir=isdir local function isdir(path) path=gsub(path,"[/\\]+$","") return lfsisdir(path) end lfs.isdir=isdir local function globpattern(path,patt,recurse,action) if path=="/" then path=path.."." elseif not find(path,"/$") then path=path..'/' end if isdir(path) then for name in walkdir(path) do local full=path..name local mode=attributes(full,'mode') if mode=='file' then if find(full,patt) then action(full) end elseif recurse and (mode=="directory") and (name~='.') and (name~="..") then globpattern(full,patt,recurse,action) end end end end dir.globpattern=globpattern local function collectpattern(path,patt,recurse,result) local ok,scanner result=result or {} if path=="/" then ok,scanner,first=xpcall(function() return walkdir(path..".") end,function() end) else ok,scanner,first=xpcall(function() return walkdir(path) end,function() end) end if ok and type(scanner)=="function" then if not find(path,"/$") then path=path..'/' end for name in scanner,first do local full=path..name local attr=attributes(full) local mode=attr.mode if mode=='file' then if find(full,patt) then result[name]=attr end elseif recurse and (mode=="directory") and (name~='.') and (name~="..") then attr.list=collectpattern(full,patt,recurse) result[name]=attr end end end return result end dir.collectpattern=collectpattern local pattern=Ct { [1]=(C(P(".")+P("/")^1)+C(R("az","AZ")*P(":")*P("/")^0)+Cc("./"))*V(2)*V(3), [2]=C(((1-S("*?/"))^0*P("/"))^0), [3]=C(P(1)^0) } local filter=Cs (( P("**")/".*"+P("*")/"[^/]*"+P("?")/"[^/]"+P(".")/"%%."+P("+")/"%%+"+P("-")/"%%-"+P(1) )^0 ) local function glob(str,t) if type(t)=="function" then if type(str)=="table" then for s=1,#str do glob(str[s],t) end elseif isfile(str) then t(str) else local split=lpegmatch(pattern,str) if split then local root,path,base=split[1],split[2],split[3] local recurse=find(base,"%*%*") local start=root..path local result=lpegmatch(filter,start..base) globpattern(start,result,recurse,t) end end else if type(str)=="table" then local t=t or {} for s=1,#str do glob(str[s],t) end return t elseif isfile(str) then if t then t[#t+1]=str return t else return { str } end else local split=lpegmatch(pattern,str) if split then local t=t or {} local action=action or function(name) t[#t+1]=name end local root,path,base=split[1],split[2],split[3] local recurse=find(base,"%*%*") local start=root..path local result=lpegmatch(filter,start..base) globpattern(start,result,recurse,action) return t else return {} end end end end dir.glob=glob local function globfiles(path,recurse,func,files) if type(func)=="string" then local s=func func=function(name) return find(name,s) end end files=files or {} local noffiles=#files for name in walkdir(path) do if find(name,"^%.") then else local mode=attributes(name,'mode') if mode=="directory" then if recurse then globfiles(path.."/"..name,recurse,func,files) end elseif mode=="file" then if not func or func(name) then noffiles=noffiles+1 files[noffiles]=path.."/"..name end end end end return files end dir.globfiles=globfiles function dir.ls(pattern) return concat(glob(pattern),"\n") end local make_indeed=true local onwindows=os.type=="windows" or find(os.getenv("PATH"),";") if onwindows then function dir.mkdirs(...) local str,pth="","" for i=1,select("#",...) do local s=select(i,...) if s=="" then elseif str=="" then str=s else str=str.."/"..s end end local first,middle,last local drive=false first,middle,last=match(str,"^(//)(//*)(.*)$") if first then else first,last=match(str,"^(//)/*(.-)$") if first then middle,last=match(str,"([^/]+)/+(.-)$") if middle then pth="//"..middle else pth="//"..last last="" end else first,middle,last=match(str,"^([a-zA-Z]:)(/*)(.-)$") if first then pth,drive=first..middle,true else middle,last=match(str,"^(/*)(.-)$") if not middle then last=str end end end end for s in gmatch(last,"[^/]+") do if pth=="" then pth=s elseif drive then pth,drive=pth..s,false else pth=pth.."/"..s end if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end return pth,(isdir(pth)==true) end else function dir.mkdirs(...) local str,pth="","" for i=1,select("#",...) do local s=select(i,...) if s and s~="" then if str~="" then str=str.."/"..s else str=s end end end str=gsub(str,"/+","/") if find(str,"^/") then pth="/" for s in gmatch(str,"[^/]+") do local first=(pth=="/") if first then pth=pth..s else pth=pth.."/"..s end if make_indeed and not first and not isdir(pth) then lfs.mkdir(pth) end end else pth="." for s in gmatch(str,"[^/]+") do pth=pth.."/"..s if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end end return pth,(isdir(pth)==true) end end dir.makedirs=dir.mkdirs if onwindows then function dir.expandname(str) local first,nothing,last=match(str,"^(//)(//*)(.*)$") if first then first=dir.current().."/" end if not first then first,last=match(str,"^(//)/*(.*)$") end if not first then first,last=match(str,"^([a-zA-Z]:)(.*)$") if first and not find(last,"^/") then local d=currentdir() if chdir(first) then first=dir.current() end chdir(d) end end if not first then first,last=dir.current(),str end last=gsub(last,"//","/") last=gsub(last,"/%./","/") last=gsub(last,"^/*","") first=gsub(first,"/*$","") if last=="" or last=="." then return first else return first.."/"..last end end else function dir.expandname(str) if not find(str,"^/") then str=currentdir().."/"..str end str=gsub(str,"//","/") str=gsub(str,"/%./","/") str=gsub(str,"(.)/%.$","%1") return str end end file.expandname=dir.expandname local stack={} function dir.push(newdir) insert(stack,currentdir()) if newdir and newdir~="" then chdir(newdir) end end function dir.pop() local d=remove(stack) if d then chdir(d) end return d end local function found(...) for i=1,select("#",...) do local path=select(i,...) local kind=type(path) if kind=="string" then if isdir(path) then return path end elseif kind=="table" then local path=found(unpack(path)) if path then return path end end end end dir.found=found end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-boolean"] = package.loaded["l-boolean"] or true -- original size: 1781, stripped down to: 1503 if not modules then modules={} end modules ['l-boolean']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber boolean=boolean or {} local boolean=boolean function boolean.tonumber(b) if b then return 1 else return 0 end end function toboolean(str,tolerant) if str==nil then return false elseif str==false then return false elseif str==true then return true elseif str=="true" then return true elseif str=="false" then return false elseif not tolerant then return false elseif str==0 then return false elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end string.toboolean=toboolean function string.booleanstring(str) if str=="0" then return false elseif str=="1" then return true elseif str=="" then return false elseif str=="false" then return false elseif str=="true" then return true elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end function string.is_boolean(str,default) if type(str)=="string" then if str=="true" or str=="yes" or str=="on" or str=="t" then return true elseif str=="false" or str=="no" or str=="off" or str=="f" then return false end end return default end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-unicode"] = package.loaded["l-unicode"] or true -- original size: 26810, stripped down to: 11943 if not modules then modules={} end modules ['l-unicode']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utf=utf or (unicode and unicode.utf8) or {} utf.characters=utf.characters or string.utfcharacters utf.values=utf.values or string.utfvalues local type=type local char,byte,format,sub=string.char,string.byte,string.format,string.sub local concat=table.concat local P,C,R,Cs,Ct,Cmt,Cc,Carg,Cp=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Ct,lpeg.Cmt,lpeg.Cc,lpeg.Carg,lpeg.Cp local lpegmatch,patterns=lpeg.match,lpeg.patterns local bytepairs=string.bytepairs local finder=lpeg.finder local replacer=lpeg.replacer local utfvalues=utf.values local utfgmatch=utf.gmatch local p_utftype=patterns.utftype local p_utfoffset=patterns.utfoffset local p_utf8char=patterns.utf8char local p_utf8byte=patterns.utf8byte local p_utfbom=patterns.utfbom local p_newline=patterns.newline local p_whitespace=patterns.whitespace if not unicode then unicode={ utf=utf } end if not utf.char then local floor,char=math.floor,string.char function utf.char(n) if n<0x80 then return char(n) elseif n<0x800 then return char( 0xC0+floor(n/0x40), 0x80+(n%0x40) ) elseif n<0x10000 then return char( 0xE0+floor(n/0x1000), 0x80+(floor(n/0x40)%0x40), 0x80+(n%0x40) ) elseif n<0x200000 then return char( 0xF0+floor(n/0x40000), 0x80+(floor(n/0x1000)%0x40), 0x80+(floor(n/0x40)%0x40), 0x80+(n%0x40) ) else return "" end end end if not utf.byte then local utf8byte=patterns.utf8byte function utf.byte(c) return lpegmatch(utf8byte,c) end end local utfchar,utfbyte=utf.char,utf.byte function utf.filetype(data) return data and lpegmatch(p_utftype,data) or "unknown" end local toentities=Cs ( ( patterns.utf8one+( patterns.utf8two+patterns.utf8three+patterns.utf8four )/function(s) local b=utfbyte(s) if b<127 then return s else return format("&#%X;",b) end end )^0 ) patterns.toentities=toentities function utf.toentities(str) return lpegmatch(toentities,str) end local one=P(1) local two=C(1)*C(1) local four=C(R(utfchar(0xD8),utfchar(0xFF)))*C(1)*C(1)*C(1) local pattern=P("\254\255")*Cs(( four/function(a,b,c,d) local ab=0xFF*byte(a)+byte(b) local cd=0xFF*byte(c)+byte(d) return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000) end+two/function(a,b) return utfchar(byte(a)*256+byte(b)) end+one )^1 )+P("\255\254")*Cs(( four/function(b,a,d,c) local ab=0xFF*byte(a)+byte(b) local cd=0xFF*byte(c)+byte(d) return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000) end+two/function(b,a) return utfchar(byte(a)*256+byte(b)) end+one )^1 ) function string.toutf(s) return lpegmatch(pattern,s) or s end local validatedutf=Cs ( ( patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four+P(1)/"�" )^0 ) patterns.validatedutf=validatedutf function utf.is_valid(str) return type(str)=="string" and lpegmatch(validatedutf,str) or false end if not utf.len then local n,f=0,1 local utfcharcounter=patterns.utfbom^-1*Cmt ( Cc(1)*patterns.utf8one^1+Cc(2)*patterns.utf8two^1+Cc(3)*patterns.utf8three^1+Cc(4)*patterns.utf8four^1, function(_,t,d) n=n+(t-f)/d f=t return true end )^0 function utf.len(str) n,f=0,1 lpegmatch(utfcharcounter,str or "") return n end end utf.length=utf.len if not utf.sub then local utflength=utf.length local b,e,n,first,last=0,0,0,0,0 local function slide_zero(s,p) n=n+1 if n>=last then e=p-1 else return p end end local function slide_one(s,p) n=n+1 if n==first then b=p end if n>=last then e=p-1 else return p end end local function slide_two(s,p) n=n+1 if n==first then b=p else return true end end local pattern_zero=Cmt(p_utf8char,slide_zero)^0 local pattern_one=Cmt(p_utf8char,slide_one )^0 local pattern_two=Cmt(p_utf8char,slide_two )^0 function utf.sub(str,start,stop) if not start then return str end if start==0 then start=1 end if not stop then if start<0 then local l=utflength(str) start=l+start else start=start-1 end b,n,first=0,0,start lpegmatch(pattern_two,str) if n>=first then return sub(str,b) else return "" end end if start<0 or stop<0 then local l=utf.length(str) if start<0 then start=l+start if start<=0 then start=1 else start=start+1 end end if stop<0 then stop=l+stop if stop==0 then stop=1 else stop=stop+1 end end end if start>stop then return "" elseif start>1 then b,e,n,first,last=0,0,0,start-1,stop lpegmatch(pattern_one,str) if n>=first and e==0 then e=#str end return sub(str,b,e) else b,e,n,last=1,0,0,stop lpegmatch(pattern_zero,str) if e==0 then e=#str end return sub(str,b,e) end end end function utf.remapper(mapping) local pattern=Cs((p_utf8char/mapping)^0) return function(str) if not str or str=="" then return "" else return lpegmatch(pattern,str) end end,pattern end function utf.replacer(t) local r=replacer(t,false,false,true) return function(str) return lpegmatch(r,str) end end function utf.subtituter(t) local f=finder (t) local r=replacer(t,false,false,true) return function(str) local i=lpegmatch(f,str) if not i then return str elseif i>#str then return str else return lpegmatch(r,str) end end end local utflinesplitter=p_utfbom^-1*lpeg.tsplitat(p_newline) local utfcharsplitter_ows=p_utfbom^-1*Ct(C(p_utf8char)^0) local utfcharsplitter_iws=p_utfbom^-1*Ct((p_whitespace^1+C(p_utf8char))^0) local utfcharsplitter_raw=Ct(C(p_utf8char)^0) patterns.utflinesplitter=utflinesplitter function utf.splitlines(str) return lpegmatch(utflinesplitter,str or "") end function utf.split(str,ignorewhitespace) if ignorewhitespace then return lpegmatch(utfcharsplitter_iws,str or "") else return lpegmatch(utfcharsplitter_ows,str or "") end end function utf.totable(str) return lpegmatch(utfcharsplitter_raw,str) end function utf.magic(f) local str=f:read(4) or "" local off=lpegmatch(p_utfoffset,str) if off<4 then f:seek('set',off) end return lpegmatch(p_utftype,str) end local function utf16_to_utf8_be(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,0 for left,right in bytepairs(t[i]) do if right then local now=256*left+right if more>0 then now=(more-0xD800)*0x400+(now-0xDC00)+0x10000 more=0 r=r+1 result[r]=utfchar(now) elseif now>=0xD800 and now<=0xDBFF then more=now else r=r+1 result[r]=utfchar(now) end end end t[i]=concat(result,"",1,r) end return t end local function utf16_to_utf8_le(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,0 for left,right in bytepairs(t[i]) do if right then local now=256*right+left if more>0 then now=(more-0xD800)*0x400+(now-0xDC00)+0x10000 more=0 r=r+1 result[r]=utfchar(now) elseif now>=0xD800 and now<=0xDBFF then more=now else r=r+1 result[r]=utfchar(now) end end end t[i]=concat(result,"",1,r) end return t end local function utf32_to_utf8_be(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,-1 for a,b in bytepairs(t[i]) do if a and b then if more<0 then more=256*256*256*a+256*256*b else r=r+1 result[t]=utfchar(more+256*a+b) more=-1 end else break end end t[i]=concat(result,"",1,r) end return t end local function utf32_to_utf8_le(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,-1 for a,b in bytepairs(t[i]) do if a and b then if more<0 then more=256*b+a else r=r+1 result[t]=utfchar(more+256*256*256*b+256*256*a) more=-1 end else break end end t[i]=concat(result,"",1,r) end return t end utf.utf32_to_utf8_be=utf32_to_utf8_be utf.utf32_to_utf8_le=utf32_to_utf8_le utf.utf16_to_utf8_be=utf16_to_utf8_be utf.utf16_to_utf8_le=utf16_to_utf8_le function utf.utf8_to_utf8(t) return type(t)=="string" and lpegmatch(utflinesplitter,t) or t end function utf.utf16_to_utf8(t,endian) return endian and utf16_to_utf8_be(t) or utf16_to_utf8_le(t) or t end function utf.utf32_to_utf8(t,endian) return endian and utf32_to_utf8_be(t) or utf32_to_utf8_le(t) or t end local function little(c) local b=byte(c) if b<0x10000 then return char(b%256,b/256) else b=b-0x10000 local b1,b2=b/1024+0xD800,b%1024+0xDC00 return char(b1%256,b1/256,b2%256,b2/256) end end local function big(c) local b=byte(c) if b<0x10000 then return char(b/256,b%256) else b=b-0x10000 local b1,b2=b/1024+0xD800,b%1024+0xDC00 return char(b1/256,b1%256,b2/256,b2%256) end end local _,l_remap=utf.remapper(little) local _,b_remap=utf.remapper(big) function utf.utf8_to_utf16(str,littleendian) if littleendian then return char(255,254)..lpegmatch(l_remap,str) else return char(254,255)..lpegmatch(b_remap,str) end end local pattern=Cs ( (p_utf8byte/function(unicode ) return format("0x%04X",unicode) end)*(p_utf8byte*Carg(1)/function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0 ) function utf.tocodes(str,separator) return lpegmatch(pattern,str,1,separator or " ") end function utf.ustring(s) return format("U+%05X",type(s)=="number" and s or utfbyte(s)) end function utf.xstring(s) return format("0x%05X",type(s)=="number" and s or utfbyte(s)) end local p_nany=p_utf8char/"" if utfgmatch then function utf.count(str,what) if type(what)=="string" then local n=0 for _ in utfgmatch(str,what) do n=n+1 end return n else return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str) end end else local cache={} function utf.count(str,what) if type(what)=="string" then local p=cache[what] if not p then p=Cs((P(what)/" "+p_nany)^0) cache[p]=p end return #lpegmatch(p,str) else return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str) end end end if not utf.characters then function utf.characters(str) return gmatch(str,".[\128-\191]*") end string.utfcharacters=utf.characters end if not utf.values then local find=string.find local dummy=function() end function utf.values(str) local n=#str if n==0 then return dummy elseif n==1 then return function() return utfbyte(str) end else local p=1 return function() local b,e=find(str,".[\128-\191]*",p) if b then p=e+1 return utfbyte(sub(str,b,e)) end end end end string.utfvalues=utf.values end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true -- original size: 915, stripped down to: 836 if not modules then modules={} end modules ['l-math']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local floor,sin,cos,tan=math.floor,math.sin,math.cos,math.tan if not math.round then function math.round(x) return floor(x+0.5) end end if not math.div then function math.div(n,m) return floor(n/m) end end if not math.mod then function math.mod(n,m) return n%m end end local pipi=2*math.pi/360 if not math.sind then function math.sind(d) return sin(d*pipi) end function math.cosd(d) return cos(d*pipi) end function math.tand(d) return tan(d*pipi) end end if not math.odd then function math.odd (n) return n%2~=0 end function math.even(n) return n%2==0 end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-str"] = package.loaded["util-str"] or true -- original size: 22834, stripped down to: 12570 if not modules then modules={} end modules ['util-str']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.strings=utilities.strings or {} local strings=utilities.strings local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub local load,dump=load,string.dump local tonumber,type,tostring=tonumber,type,tostring local unpack,concat=table.unpack,table.concat local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc local patterns,lpegmatch=lpeg.patterns,lpeg.match local utfchar,utfbyte=utf.char,utf.byte local loadstripped=_LUAVERSION<5.2 and load or function(str) return load(dump(load(str),true)) end if not number then number={} end local stripper=patterns.stripzeros local function points(n) return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536)) end local function basepoints(n) return (not n or n==0) and "0bp" or lpegmatch(stripper,format("%.5fbp",n*(7200/7227)/65536)) end number.points=points number.basepoints=basepoints local rubish=patterns.spaceortab^0*patterns.newline local anyrubish=patterns.spaceortab+patterns.newline local anything=patterns.anything local stripped=(patterns.spaceortab^1/"")*patterns.newline local leading=rubish^0/"" local trailing=(anyrubish^1*patterns.endofstring)/"" local redundant=rubish^3/"\n" local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0) function strings.collapsecrlf(str) return lpegmatch(pattern,str) end local repeaters={} function strings.newrepeater(str,offset) offset=offset or 0 local s=repeaters[str] if not s then s={} repeaters[str]=s end local t=s[offset] if t then return t end t={} setmetatable(t,{ __index=function(t,k) if not k then return "" end local n=k+offset local s=n>0 and rep(str,n) or "" t[k]=s return s end }) s[offset]=t return t end local extra,tab,start=0,0,4,0 local nspaces=strings.newrepeater(" ") string.nspaces=nspaces local pattern=Carg(1)/function(t) extra,tab,start=0,t or 7,1 end*Cs(( Cp()*patterns.tab/function(position) local current=(position-start+1)+extra local spaces=tab-(current-1)%tab if spaces>0 then extra=extra+spaces-1 return nspaces[spaces] else return "" end end+patterns.newline*Cp()/function(position) extra,start=0,position end+patterns.anything )^1) function strings.tabtospace(str,tab) return lpegmatch(pattern,str,1,tab or 7) end function strings.striplong(str) str=gsub(str,"^%s*","") str=gsub(str,"[\n\r]+ *","\n") return str end function strings.nice(str) str=gsub(str,"[:%-+_]+"," ") return str end local n=0 local sequenced=table.sequenced function string.autodouble(s,sep) if s==nil then return '""' end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ('"'..sequenced(s,sep or ",")..'"') end return ('"'..tostring(s)..'"') end function string.autosingle(s,sep) if s==nil then return "''" end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ("'"..sequenced(s,sep or ",").."'") end return ("'"..tostring(s).."'") end local tracedchars={} string.tracedchars=tracedchars strings.tracers=tracedchars function string.tracedchar(b) if type(b)=="number" then return tracedchars[b] or (utfchar(b).." (U+"..format('%05X',b)..")") else local c=utfbyte(b) return tracedchars[c] or (b.." (U+"..format('%05X',c)..")") end end function number.signed(i) if i>0 then return "+",i else return "-",-i end end local preamble=[[ local type = type local tostring = tostring local tonumber = tonumber local format = string.format local concat = table.concat local signed = number.signed local points = number.points local basepoints = number.basepoints local utfchar = utf.char local utfbyte = utf.byte local lpegmatch = lpeg.match local nspaces = string.nspaces local tracedchar = string.tracedchar local autosingle = string.autosingle local autodouble = string.autodouble local sequenced = table.sequenced ]] local template=[[ %s %s return function(%s) return %s end ]] local arguments={ "a1" } setmetatable(arguments,{ __index=function(t,k) local v=t[k-1]..",a"..k t[k]=v return v end }) local prefix_any=C((S("+- .")+R("09"))^0) local prefix_tab=C((1-R("az","AZ","09","%%"))^0) local format_s=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',a%s)",f,n) else return format("(a%s or '')",n) end end local format_S=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',tostring(a%s))",f,n) else return format("tostring(a%s)",n) end end local format_q=function() n=n+1 return format("(a%s and format('%%q',a%s) or '')",n,n) end local format_Q=function() n=n+1 return format("format('%%q',tostring(a%s))",n) end local format_i=function(f) n=n+1 if f and f~="" then return format("format('%%%si',a%s)",f,n) else return format("a%s",n) end end local format_d=format_i local format_I=function(f) n=n+1 return format("format('%%s%%%si',signed(a%s))",f,n) end local format_f=function(f) n=n+1 return format("format('%%%sf',a%s)",f,n) end local format_g=function(f) n=n+1 return format("format('%%%sg',a%s)",f,n) end local format_G=function(f) n=n+1 return format("format('%%%sG',a%s)",f,n) end local format_e=function(f) n=n+1 return format("format('%%%se',a%s)",f,n) end local format_E=function(f) n=n+1 return format("format('%%%sE',a%s)",f,n) end local format_x=function(f) n=n+1 return format("format('%%%sx',a%s)",f,n) end local format_X=function(f) n=n+1 return format("format('%%%sX',a%s)",f,n) end local format_o=function(f) n=n+1 return format("format('%%%so',a%s)",f,n) end local format_c=function() n=n+1 return format("utfchar(a%s)",n) end local format_C=function() n=n+1 return format("tracedchar(a%s)",n) end local format_r=function(f) n=n+1 return format("format('%%%s.0f',a%s)",f,n) end local format_h=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_H=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_u=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_U=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_p=function() n=n+1 return format("points(a%s)",n) end local format_b=function() n=n+1 return format("basepoints(a%s)",n) end local format_t=function(f) n=n+1 if f and f~="" then return format("concat(a%s,%q)",n,f) else return format("concat(a%s)",n) end end local format_T=function(f) n=n+1 if f and f~="" then return format("sequenced(a%s,%q)",n,f) else return format("sequenced(a%s)",n) end end local format_l=function() n=n+1 return format("(a%s and 'true' or 'false')",n) end local format_L=function() n=n+1 return format("(a%s and 'TRUE' or 'FALSE')",n) end local format_N=function() n=n+1 return format("tostring(tonumber(a%s) or a%s)",n,n) end local format_a=function(f) n=n+1 if f and f~="" then return format("autosingle(a%s,%q)",n,f) else return format("autosingle(a%s)",n) end end local format_A=function(f) n=n+1 if f and f~="" then return format("autodouble(a%s,%q)",n,f) else return format("autodouble(a%s)",n) end end local format_w=function(f) n=n+1 f=tonumber(f) if f then return format("nspaces[%s+a%s]",f,n) else return format("nspaces[a%s]",n) end end local format_W=function(f) return format("nspaces[%s]",tonumber(f) or 0) end local format_rest=function(s) return format("%q",s) end local format_extension=function(extensions,f,name) local extension=extensions[name] or "tostring(%s)" local f=tonumber(f) or 1 if f==0 then return extension elseif f==1 then n=n+1 local a="a"..n return format(extension,a,a) elseif f<0 then local a="a"..(n+f+1) return format(extension,a,a) else local t={} for i=1,f do n=n+1 t[#t+1]="a"..n end return format(extension,unpack(t)) end end local builder=Cs { "start", start=( ( P("%")/""*( V("!") +V("s")+V("q")+V("i")+V("d")+V("f")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o") +V("c")+V("C")+V("S") +V("Q") +V("N") +V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("h") +V("w") +V("W") +V("a") +V("A") +V("*") )+V("*") )*(P(-1)+Carg(1)) )^0, ["s"]=(prefix_any*P("s"))/format_s, ["q"]=(prefix_any*P("q"))/format_q, ["i"]=(prefix_any*P("i"))/format_i, ["d"]=(prefix_any*P("d"))/format_d, ["f"]=(prefix_any*P("f"))/format_f, ["g"]=(prefix_any*P("g"))/format_g, ["G"]=(prefix_any*P("G"))/format_G, ["e"]=(prefix_any*P("e"))/format_e, ["E"]=(prefix_any*P("E"))/format_E, ["x"]=(prefix_any*P("x"))/format_x, ["X"]=(prefix_any*P("X"))/format_X, ["o"]=(prefix_any*P("o"))/format_o, ["S"]=(prefix_any*P("S"))/format_S, ["Q"]=(prefix_any*P("Q"))/format_S, ["N"]=(prefix_any*P("N"))/format_N, ["c"]=(prefix_any*P("c"))/format_c, ["C"]=(prefix_any*P("C"))/format_C, ["r"]=(prefix_any*P("r"))/format_r, ["h"]=(prefix_any*P("h"))/format_h, ["H"]=(prefix_any*P("H"))/format_H, ["u"]=(prefix_any*P("u"))/format_u, ["U"]=(prefix_any*P("U"))/format_U, ["p"]=(prefix_any*P("p"))/format_p, ["b"]=(prefix_any*P("b"))/format_b, ["t"]=(prefix_tab*P("t"))/format_t, ["T"]=(prefix_tab*P("T"))/format_T, ["l"]=(prefix_tab*P("l"))/format_l, ["L"]=(prefix_tab*P("L"))/format_L, ["I"]=(prefix_any*P("I"))/format_I, ["w"]=(prefix_any*P("w"))/format_w, ["W"]=(prefix_any*P("W"))/format_W, ["a"]=(prefix_any*P("a"))/format_a, ["A"]=(prefix_any*P("A"))/format_A, ["*"]=Cs(((1-P("%"))^1+P("%%")/"%%%%")^1)/format_rest, ["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension, } local direct=Cs ( P("%")/""*Cc([[local format = string.format return function(str) return format("%]])*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*Cc([[",str) end]])*P(-1) ) local function make(t,str) local f local p local p=lpegmatch(direct,str) if p then f=loadstripped(p)() else n=0 p=lpegmatch(builder,str,1,"..",t._extensions_) if n>0 then p=format(template,preamble,t._preamble_,arguments[n],p) f=loadstripped(p)() else f=function() return str end end end t[str]=f return f end local function use(t,fmt,...) return t[fmt](...) end strings.formatters={} function strings.formatters.new() local t={ _extensions_={},_preamble_="",_type_="formatter" } setmetatable(t,{ __index=make,__call=use }) return t end local formatters=strings.formatters.new() string.formatters=formatters string.formatter=function(str,...) return formatters[str](...) end local function add(t,name,template,preamble) if type(t)=="table" and t._type_=="formatter" then t._extensions_[name]=template or "%s" if preamble then t._preamble_=preamble.."\n"..t._preamble_ end end end strings.formatters.add=add lpeg.patterns.xmlescape=Cs((P("<")/"<"+P(">")/">"+P("&")/"&"+P('"')/"""+P(1))^0) lpeg.patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0) add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],[[local xmlescape = lpeg.patterns.xmlescape]]) add(formatters,"tex",[[lpegmatch(texescape,%s)]],[[local texescape = lpeg.patterns.texescape]]) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-tab"] = package.loaded["util-tab"] or true -- original size: 14510, stripped down to: 8531 if not modules then modules={} end modules ['util-tab']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.tables=utilities.tables or {} local tables=utilities.tables local format,gmatch,gsub=string.format,string.gmatch,string.gsub local concat,insert,remove=table.concat,table.insert,table.remove local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc local serialize,sortedkeys,sortedpairs=table.serialize,table.sortedkeys,table.sortedpairs local formatters=string.formatters local splitter=lpeg.tsplitat(".") function tables.definetable(target,nofirst,nolast) local composed,shortcut,t=nil,nil,{} local snippets=lpegmatch(splitter,target) for i=1,#snippets-(nolast and 1 or 0) do local name=snippets[i] if composed then composed=shortcut.."."..name shortcut=shortcut.."_"..name t[#t+1]=formatters["local %s = %s if not %s then %s = { } %s = %s end"](shortcut,composed,shortcut,shortcut,composed,shortcut) else composed=name shortcut=name if not nofirst then t[#t+1]=formatters["%s = %s or { }"](composed,composed) end end end if nolast then composed=shortcut.."."..snippets[#snippets] end return concat(t,"\n"),composed end function tables.definedtable(...) local t=_G for i=1,select("#",...) do local li=select(i,...) local tl=t[li] if not tl then tl={} t[li]=tl end t=tl end return t end function tables.accesstable(target,root) local t=root or _G for name in gmatch(target,"([^%.]+)") do t=t[name] if not t then return end end return t end function tables.migratetable(target,v,root) local t=root or _G local names=string.split(target,".") for i=1,#names-1 do local name=names[i] t[name]=t[name] or {} t=t[name] if not t then return end end t[names[#names]]=v end function tables.removevalue(t,value) if value then for i=1,#t do if t[i]==value then remove(t,i) end end end end function tables.insertbeforevalue(t,value,extra) for i=1,#t do if t[i]==extra then remove(t,i) end end for i=1,#t do if t[i]==value then insert(t,i,extra) return end end insert(t,1,extra) end function tables.insertaftervalue(t,value,extra) for i=1,#t do if t[i]==extra then remove(t,i) end end for i=1,#t do if t[i]==value then insert(t,i+1,extra) return end end insert(t,#t+1,extra) end local escape=Cs(Cc('"')*((P('"')/'""'+P(1))^0)*Cc('"')) function table.tocsv(t,specification) if t and #t>0 then local result={} local r={} specification=specification or {} local fields=specification.fields if type(fields)~="string" then fields=sortedkeys(t[1]) end local separator=specification.separator or "," if specification.preamble==true then for f=1,#fields do r[f]=lpegmatch(escape,tostring(fields[f])) end result[1]=concat(r,separator) end for i=1,#t do local ti=t[i] for f=1,#fields do local field=ti[fields[f]] if type(field)=="string" then r[f]=lpegmatch(escape,field) else r[f]=tostring(field) end end result[#result+1]=concat(r,separator) end return concat(result,"\n") else return "" end end local nspaces=utilities.strings.newrepeater(" ") local function toxml(t,d,result,step) for k,v in sortedpairs(t) do local s=nspaces[d] local tk=type(k) local tv=type(v) if tv=="table" then if tk=="number" then result[#result+1]=formatters["%s"](s,k) toxml(v,d+step,result,step) result[#result+1]=formatters["%s"](s,k) else result[#result+1]=formatters["%s<%s>"](s,k) toxml(v,d+step,result,step) result[#result+1]=formatters["%s"](s,k) end elseif tv=="string" then if tk=="number" then result[#result+1]=formatters["%s%!xml!"](s,k,v,k) else result[#result+1]=formatters["%s<%s>%!xml!"](s,k,v,k) end elseif tk=="number" then result[#result+1]=formatters["%s%S"](s,k,v,k) else result[#result+1]=formatters["%s<%s>%S"](s,k,v,k) end end end function table.toxml(t,specification) specification=specification or {} local name=specification.name local noroot=name==false local result=(specification.nobanner or noroot) and {} or { "" } local indent=specification.indent or 0 local spaces=specification.spaces or 1 if noroot then toxml(t,indent,result,spaces) else toxml({ [name or "data"]=t },indent,result,spaces) end return concat(result,"\n") end function tables.encapsulate(core,capsule,protect) if type(capsule)~="table" then protect=true capsule={} end for key,value in next,core do if capsule[key] then print(formatters["\ninvalid %s %a in %a"]("inheritance",key,core)) os.exit() else capsule[key]=value end end if protect then for key,value in next,core do core[key]=nil end setmetatable(core,{ __index=capsule, __newindex=function(t,key,value) if capsule[key] then print(formatters["\ninvalid %s %a' in %a"]("overload",key,core)) os.exit() else rawset(t,key,value) end end } ) end end local function fastserialize(t,r,outer) r[#r+1]="{" local n=#t if n>0 then for i=1,n do local v=t[i] local tv=type(v) if tv=="string" then r[#r+1]=formatters["%q,"](v) elseif tv=="number" then r[#r+1]=formatters["%s,"](v) elseif tv=="table" then fastserialize(v,r) elseif tv=="boolean" then r[#r+1]=formatters["%S,"](v) end end else for k,v in next,t do local tv=type(v) if tv=="string" then r[#r+1]=formatters["[%q]=%q,"](k,v) elseif tv=="number" then r[#r+1]=formatters["[%q]=%s,"](k,v) elseif tv=="table" then r[#r+1]=formatters["[%q]="](k) fastserialize(v,r) elseif tv=="boolean" then r[#r+1]=formatters["[%q]=%S,"](k,v) end end end if outer then r[#r+1]="}" else r[#r+1]="}," end return r end function table.fastserialize(t,prefix) return concat(fastserialize(t,{ prefix or "return" },true)) end function table.deserialize(str) if not str or str=="" then return end local code=load(str) if not code then return end code=code() if not code then return end return code end function table.load(filename,loader) if filename then local t=(loader or io.loaddata)(filename) if t and t~="" then t=load(t) if type(t)=="function" then t=t() if type(t)=="table" then return t end end end end end function table.save(filename,t,n,...) io.savedata(filename,serialize(t,n==nil and true or n,...)) end local function slowdrop(t) local r={} local l={} for i=1,#t do local ti=t[i] local j=0 for k,v in next,ti do j=j+1 l[j]=formatters["%s=%q"](k,v) end r[i]=formatters[" {%t},\n"](l) end return formatters["return {\n%st}"](r) end local function fastdrop(t) local r={ "return {\n" } for i=1,#t do local ti=t[i] r[#r+1]=" {" for k,v in next,ti do r[#r+1]=formatters["%s=%q"](k,v) end r[#r+1]="},\n" end r[#r+1]="}" return concat(r) end function table.drop(t,slow) if #t==0 then return "return { }" elseif slow==true then return slowdrop(t) else return fastdrop(t) end end function table.autokey(t,k) local v={} t[k]=v return v end local selfmapper={ __index=function(t,k) t[k]=k return k end } function table.twowaymapper(t) if not t then t={} else for i=0,#t do local ti=t[i] if ti then local i=tostring(i) t[i]=ti t[ti]=i end end t[""]=t[0] or "" end setmetatable(t,selfmapper) return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-sto"] = package.loaded["util-sto"] or true -- original size: 4432, stripped down to: 3123 if not modules then modules={} end modules ['util-sto']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local setmetatable,getmetatable,type=setmetatable,getmetatable,type utilities=utilities or {} utilities.storage=utilities.storage or {} local storage=utilities.storage function storage.mark(t) if not t then print("\nfatal error: storage cannot be marked\n") os.exit() return end local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m.__storage__=true return t end function storage.allocate(t) t=t or {} local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m.__storage__=true return t end function storage.marked(t) local m=getmetatable(t) return m and m.__storage__ end function storage.checked(t) if not t then report("\nfatal error: storage has not been allocated\n") os.exit() return end return t end function storage.setinitializer(data,initialize) local m=getmetatable(data) or {} m.__index=function(data,k) m.__index=nil initialize() return data[k] end setmetatable(data,m) end local keyisvalue={ __index=function(t,k) t[k]=k return k end } function storage.sparse(t) t=t or {} setmetatable(t,keyisvalue) return t end local function f_empty () return "" end local function f_self (t,k) t[k]=k return k end local function f_table (t,k) local v={} t[k]=v return v end local function f_ignore() end local t_empty={ __index=f_empty } local t_self={ __index=f_self } local t_table={ __index=f_table } local t_ignore={ __newindex=f_ignore } function table.setmetatableindex(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then if f=="empty" then m.__index=f_empty elseif f=="key" then m.__index=f_self elseif f=="table" then m.__index=f_table else m.__index=f end else if f=="empty" then setmetatable(t,t_empty) elseif f=="key" then setmetatable(t,t_self) elseif f=="table" then setmetatable(t,t_table) else setmetatable(t,{ __index=f }) end end return t end function table.setmetatablenewindex(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then if f=="ignore" then m.__newindex=f_ignore else m.__newindex=f end else if f=="ignore" then setmetatable(t,t_ignore) else setmetatable(t,{ __newindex=f }) end end return t end function table.setmetatablecall(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then m.__call=f else setmetatable(t,{ __call=f }) end return t end function table.setmetatablekey(t,key,value) local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m[key]=value return t end function table.getmetatablekey(t,key,value) local m=getmetatable(t) return m and m[key] end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true -- original size: 17827, stripped down to: 12722 if not modules then modules={} end modules ['util-prs']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local lpeg,table,string=lpeg,table,string local P,R,V,S,C,Ct,Cs,Carg,Cc,Cg,Cf,Cp=lpeg.P,lpeg.R,lpeg.V,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cc,lpeg.Cg,lpeg.Cf,lpeg.Cp local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local concat,format,gmatch,find=table.concat,string.format,string.gmatch,string.find local tostring,type,next,rawset=tostring,type,next,rawset utilities=utilities or {} local parsers=utilities.parsers or {} utilities.parsers=parsers local patterns=parsers.patterns or {} parsers.patterns=patterns local setmetatableindex=table.setmetatableindex local sortedhash=table.sortedhash local digit=R("09") local space=P(' ') local equal=P("=") local comma=P(",") local lbrace=P("{") local rbrace=P("}") local lparent=P("(") local rparent=P(")") local period=S(".") local punctuation=S(".,:;") local spacer=lpegpatterns.spacer local whitespace=lpegpatterns.whitespace local newline=lpegpatterns.newline local anything=lpegpatterns.anything local endofstring=lpegpatterns.endofstring local nobrace=1-(lbrace+rbrace ) local noparent=1-(lparent+rparent) local escape,left,right=P("\\"),P('{'),P('}') lpegpatterns.balanced=P { [1]=((escape*(left+right))+(1-(left+right))+V(2))^0, [2]=left*V(1)*right } local nestedbraces=P { lbrace*(nobrace+V(1))^0*rbrace } local nestedparents=P { lparent*(noparent+V(1))^0*rparent } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 lpegpatterns.nestedbraces=nestedbraces lpegpatterns.nestedparents=nestedparents lpegpatterns.nested=nestedbraces lpegpatterns.argument=argument lpegpatterns.content=content local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) local pattern_c=(space+comma)^0*(key*equal*value) local key=C((1-space-equal-comma)^1) local pattern_b=spaces*comma^0*spaces*(key*((spaces*equal*spaces*value)+C(""))) local hash={} local function set(key,value) hash[key]=value end local pattern_a_s=(pattern_a/set)^1 local pattern_b_s=(pattern_b/set)^1 local pattern_c_s=(pattern_c/set)^1 patterns.settings_to_hash_a=pattern_a_s patterns.settings_to_hash_b=pattern_b_s patterns.settings_to_hash_c=pattern_c_s function parsers.make_settings_to_hash_pattern(set,how) if type(str)=="table" then return set elseif how=="strict" then return (pattern_c/set)^1 elseif how=="tolerant" then return (pattern_b/set)^1 else return (pattern_a/set)^1 end end function parsers.settings_to_hash(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_a_s,str) return hash else return {} end end function parsers.settings_to_hash_tolerant(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_b_s,str) return hash else return {} end end function parsers.settings_to_hash_strict(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_c_s,str) return next(hash) and hash else return nil end end local separator=comma*space^0 local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+(1-comma))^0) local pattern=spaces*Ct(value*(separator*value)^0) patterns.settings_to_array=pattern function parsers.settings_to_array(str,strict) if type(str)=="table" then return str elseif not str or str=="" then return {} elseif strict then if find(str,"{") then return lpegmatch(pattern,str) else return { str } end else return lpegmatch(pattern,str) end end local function set(t,v) t[#t+1]=v end local value=P(Carg(1)*value)/set local pattern=value*(separator*value)^0*Carg(1) function parsers.add_settings_to_array(t,str) return lpegmatch(pattern,str,nil,t) end function parsers.hash_to_string(h,separator,yes,no,strict,omit) if h then local t,tn,s={},0,table.sortedkeys(h) omit=omit and table.tohash(omit) for i=1,#s do local key=s[i] if not omit or not omit[key] then local value=h[key] if type(value)=="boolean" then if yes and no then if value then tn=tn+1 t[tn]=key..'='..yes elseif not strict then tn=tn+1 t[tn]=key..'='..no end elseif value or not strict then tn=tn+1 t[tn]=key..'='..tostring(value) end else tn=tn+1 t[tn]=key..'='..value end end end return concat(t,separator or ",") else return "" end end function parsers.array_to_string(a,separator) if a then return concat(a,separator or ",") else return "" end end function parsers.settings_to_set(str,t) t=t or {} for s in gmatch(str,"[^, ]+") do t[s]=true end return t end function parsers.simple_hash_to_string(h,separator) local t,tn={},0 for k,v in sortedhash(h) do if v then tn=tn+1 t[tn]=k end end return concat(t,separator or ",") end local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C(digit^1*lparent*(noparent+nestedparents)^1*rparent)+C((nestedbraces+(1-comma))^1) local pattern_a=spaces*Ct(value*(separator*value)^0) local function repeater(n,str) if not n then return str else local s=lpegmatch(pattern_a,str) if n==1 then return unpack(s) else local t,tn={},0 for i=1,n do for j=1,#s do tn=tn+1 t[tn]=s[j] end end return unpack(t) end end end local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+(C(digit^1)/tonumber*lparent*Cs((noparent+nestedparents)^1)*rparent)/repeater+C((nestedbraces+(1-comma))^1) local pattern_b=spaces*Ct(value*(separator*value)^0) function parsers.settings_to_array_with_repeat(str,expand) if expand then return lpegmatch(pattern_b,str) or {} else return lpegmatch(pattern_a,str) or {} end end local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace local pattern=Ct((space+value)^0) function parsers.arguments_to_table(str) return lpegmatch(pattern,str) end function parsers.getparameters(self,class,parentclass,settings) local sc=self[class] if not sc then sc={} self[class]=sc if parentclass then local sp=self[parentclass] if not sp then sp={} self[parentclass]=sp end setmetatableindex(sc,sp) end end parsers.settings_to_hash(settings,sc) end function parsers.listitem(str) return gmatch(str,"[^, ]+") end local pattern=Cs { "start", start=V("one")+V("two")+V("three"), rest=(Cc(",")*V("thousand"))^0*(P(".")+endofstring)*anything^0, thousand=digit*digit*digit, one=digit*V("rest"), two=digit*digit*V("rest"), three=V("thousand")*V("rest"), } lpegpatterns.splitthousands=pattern function parsers.splitthousands(str) return lpegmatch(pattern,str) or str end local optionalwhitespace=whitespace^0 lpegpatterns.words=Ct((Cs((1-punctuation-whitespace)^1)+anything)^1) lpegpatterns.sentences=Ct((optionalwhitespace*Cs((1-period)^0*period))^1) lpegpatterns.paragraphs=Ct((optionalwhitespace*Cs((whitespace^1*endofstring/""+1-(spacer^0*newline*newline))^1))^1) local dquote=P('"') local equal=P('=') local escape=P('\\') local separator=S(' ,') local key=C((1-equal)^1) local value=dquote*C((1-dquote-escape*dquote)^0)*dquote local pattern=Cf(Ct("")*(Cg(key*equal*value)*separator^0)^1,rawset)^0*P(-1) function parsers.keq_to_hash(str) if str and str~="" then return lpegmatch(pattern,str) else return {} end end local defaultspecification={ separator=",",quote='"' } function parsers.csvsplitter(specification) specification=specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator=specification.separator local quotechar=specification.quote local separator=S(separator~="" and separator or ",") local whatever=C((1-separator-newline)^0) if quotechar and quotechar~="" then local quotedata=nil for chr in gmatch(quotechar,".") do local quotechar=P(chr) local quoteword=quotechar*C((1-quotechar)^0)*quotechar if quotedata then quotedata=quotedata+quoteword else quotedata=quoteword end end whatever=quotedata+whatever end local parser=Ct((Ct(whatever*(separator*whatever)^0)*S("\n\r"))^0 ) return function(data) return lpegmatch(parser,data) end end function parsers.rfc4180splitter(specification) specification=specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator=specification.separator local quotechar=P(specification.quote) local dquotechar=quotechar*quotechar /specification.quote local separator=S(separator~="" and separator or ",") local escaped=quotechar*Cs((dquotechar+(1-quotechar))^0)*quotechar local non_escaped=C((1-quotechar-newline-separator)^1) local field=escaped+non_escaped local record=Ct((field*separator^-1)^1) local headerline=record*Cp() local wholeblob=Ct((newline^-1*record)^0) return function(data,getheader) if getheader then local header,position=lpegmatch(headerline,data) local data=lpegmatch(wholeblob,data,position) return data,header else return lpegmatch(wholeblob,data) end end end local function ranger(first,last,n,action) if not first then elseif last==true then for i=first,n or first do action(i) end elseif last then for i=first,last do action(i) end else action(first) end end local cardinal=lpegpatterns.cardinal/tonumber local spacers=lpegpatterns.spacer^0 local endofstring=lpegpatterns.endofstring local stepper=spacers*(C(cardinal)*(spacers*S(":-")*spacers*(C(cardinal)+Cc(true) )+Cc(false) )*Carg(1)*Carg(2)/ranger*S(", ")^0 )^1 local stepper=spacers*(C(cardinal)*(spacers*S(":-")*spacers*(C(cardinal)+(P("*")+endofstring)*Cc(true) )+Cc(false) )*Carg(1)*Carg(2)/ranger*S(", ")^0 )^1*endofstring function parsers.stepper(str,n,action) if type(n)=="function" then lpegmatch(stepper,str,1,false,n or print) else lpegmatch(stepper,str,1,n,action or print) end end local pattern_math=Cs((P("%")/"\\percent "+P("^")*Cc("{")*lpegpatterns.integer*Cc("}")+P(1))^0) local pattern_text=Cs((P("%")/"\\percent "+(P("^")/"\\high")*Cc("{")*lpegpatterns.integer*Cc("}")+P(1))^0) patterns.unittotex=pattern function parsers.unittotex(str,textmode) return lpegmatch(textmode and pattern_text or pattern_math,str) end local pattern=Cs((P("^")/""*lpegpatterns.integer*Cc("")+P(1))^0) function parsers.unittoxml(str) return lpegmatch(pattern,str) end local cache={} local spaces=lpeg.patterns.space^0 local dummy=function() end table.setmetatableindex(cache,function(t,k) local separator=P(k) local value=(1-separator)^0 local pattern=spaces*C(value)*separator^0*Cp() t[k]=pattern return pattern end) local commalistiterator=cache[","] function utilities.parsers.iterator(str,separator) local n=#str if n==0 then return dummy else local pattern=separator and cache[separator] or commalistiterator local p=1 return function() if p<=n then local s,e=lpegmatch(pattern,str,p) if e then p=e return s end end end end end local function initialize(t,name) local source=t[name] if source then local result={} for k,v in next,t[name] do result[k]=v end return result else return {} end end local function fetch(t,name) return t[name] or {} end function process(result,more) for k,v in next,more do result[k]=v end return result end local name=C((1-S(", "))^1) local parser=(Carg(1)*name/initialize)*(S(", ")^1*(Carg(1)*name/fetch))^0 local merge=Cf(parser,process) function utilities.parsers.mergehashes(hash,list) return lpegmatch(merge,list,1,hash) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-fmt"] = package.loaded["util-fmt"] or true -- original size: 2274, stripped down to: 1781 if not modules then modules={} end modules ['util-fmt']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.formatters=utilities.formatters or {} local formatters=utilities.formatters local concat,format=table.concat,string.format local tostring,type=tostring,type local strip=string.strip local lpegmatch=lpeg.match local stripper=lpeg.patterns.stripzeros function formatters.stripzeros(str) return lpegmatch(stripper,str) end function formatters.formatcolumns(result,between) if result and #result>0 then between=between or " " local widths,numbers={},{} local first=result[1] local n=#first for i=1,n do widths[i]=0 end for i=1,#result do local r=result[i] for j=1,n do local rj=r[j] local tj=type(rj) if tj=="number" then numbers[j]=true end if tj~="string" then rj=tostring(rj) r[j]=rj end local w=#rj if w>widths[j] then widths[j]=w end end end for i=1,n do local w=widths[i] if numbers[i] then if w>80 then widths[i]="%s"..between else widths[i]="%0"..w.."i"..between end else if w>80 then widths[i]="%s"..between elseif w>0 then widths[i]="%-"..w.."s"..between else widths[i]="%s" end end end local template=strip(concat(widths)) for i=1,#result do local str=format(template,unpack(result[i])) result[i]=strip(str) end end return result end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true -- original size: 12365, stripped down to: 8799 if not modules then modules={} end modules ['trac-set']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring=type,next,tostring local concat=table.concat local format,find,lower,gsub,topattern=string.format,string.find,string.lower,string.gsub,string.topattern local is_boolean=string.is_boolean local settings_to_hash=utilities.parsers.settings_to_hash local allocate=utilities.storage.allocate utilities=utilities or {} local utilities=utilities local setters=utilities.setters or {} utilities.setters=setters local data={} local trace_initialize=false function setters.initialize(filename,name,values) local setter=data[name] if setter then frozen=true local data=setter.data if data then for key,newvalue in next,values do local newvalue=is_boolean(newvalue,newvalue) local functions=data[key] if functions then local oldvalue=functions.value if functions.frozen then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"frozen",oldvalue) end elseif #functions>0 and not oldvalue then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"set",newvalue) end for i=1,#functions do functions[i](newvalue) end functions.value=newvalue functions.frozen=functions.frozen or frozen else if trace_initialize then setter.report("%s: %a is %s as %a",filename,key,"kept",oldvalue) end end else functions={ default=newvalue,frozen=frozen } data[key]=functions if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"defaulted",newvalue) end end end return true end end end local function set(t,what,newvalue) local data=t.data if not data.frozen then local done=t.done if type(what)=="string" then what=settings_to_hash(what) end if type(what)~="table" then return end if not done then done={} t.done=done end for w,value in next,what do if value=="" then value=newvalue elseif not value then value=false else value=is_boolean(value,value) end w=topattern(w,true,true) for name,functions in next,data do if done[name] then elseif find(name,w) then done[name]=true for i=1,#functions do functions[i](value) end functions.value=value end end end end end local function reset(t) local data=t.data if not data.frozen then for name,functions in next,data do for i=1,#functions do functions[i](false) end functions.value=false end end end local function enable(t,what) set(t,what,true) end local function disable(t,what) local data=t.data if not what or what=="" then t.done={} reset(t) else set(t,what,false) end end function setters.register(t,what,...) local data=t.data what=lower(what) local functions=data[what] if not functions then functions={} data[what]=functions if trace_initialize then t.report("defining %a",what) end end local default=functions.default for i=1,select("#",...) do local fnc=select(i,...) local typ=type(fnc) if typ=="string" then if trace_initialize then t.report("coupling %a to %a",what,fnc) end local s=fnc fnc=function(value) set(t,s,value) end elseif typ~="function" then fnc=nil end if fnc then functions[#functions+1]=fnc local value=functions.value or default if value~=nil then fnc(value) functions.value=value end end end return false end function setters.enable(t,what) local e=t.enable t.enable,t.done=enable,{} enable(t,what) t.enable,t.done=e,{} end function setters.disable(t,what) local e=t.disable t.disable,t.done=disable,{} disable(t,what) t.disable,t.done=e,{} end function setters.reset(t) t.done={} reset(t) end function setters.list(t) local list=table.sortedkeys(t.data) local user,system={},{} for l=1,#list do local what=list[l] if find(what,"^%*") then system[#system+1]=what else user[#user+1]=what end end return user,system end function setters.show(t) local category=t.name local list=setters.list(t) t.report() for k=1,#list do local name=list[k] local functions=t.data[name] if functions then local value,default,modules=functions.value,functions.default,#functions value=value==nil and "unset" or tostring(value) default=default==nil and "unset" or tostring(default) t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) end end t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) print(format("%-15s : %s\n",setter.name,format(...))) end local function default(setter,name) local d=setter.data[name] return d and d.default end local function value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end function setters.new(name) local setter setter={ data=allocate(), name=name, report=function(...) setters.report (setter,...) end, enable=function(...) enable (setter,...) end, disable=function(...) disable (setter,...) end, register=function(...) register(setter,...) end, list=function(...) list (setter,...) end, show=function(...) show (setter,...) end, default=function(...) return default (setter,...) end, value=function(...) return value (setter,...) end, } data[name]=setter return setter end trackers=setters.new("trackers") directives=setters.new("directives") experiments=setters.new("experiments") local t_enable,t_disable=trackers .enable,trackers .disable local d_enable,d_disable=directives .enable,directives .disable local e_enable,e_disable=experiments.enable,experiments.disable local trace_directives=false local trace_directives=false trackers.register("system.directives",function(v) trace_directives=v end) local trace_experiments=false local trace_experiments=false trackers.register("system.experiments",function(v) trace_experiments=v end) function directives.enable(...) if trace_directives then directives.report("enabling: % t",{...}) end d_enable(...) end function directives.disable(...) if trace_directives then directives.report("disabling: % t",{...}) end d_disable(...) end function experiments.enable(...) if trace_experiments then experiments.report("enabling: % t",{...}) end e_enable(...) end function experiments.disable(...) if trace_experiments then experiments.report("disabling: % t",{...}) end e_disable(...) end directives.register("system.nostatistics",function(v) if statistics then statistics.enable=not v else end end) directives.register("system.nolibraries",function(v) if libraries then libraries=nil else end end) if environment then local engineflags=environment.engineflags if engineflags then local list=engineflags["c:trackers"] or engineflags["trackers"] if type(list)=="string" then setters.initialize("commandline flags","trackers",settings_to_hash(list)) end local list=engineflags["c:directives"] or engineflags["directives"] if type(list)=="string" then setters.initialize("commandline flags","directives",settings_to_hash(list)) end end end if texconfig then local function set(k,v) v=tonumber(v) if v then texconfig[k]=v end end directives.register("luatex.expanddepth",function(v) set("expand_depth",v) end) directives.register("luatex.hashextra",function(v) set("hash_extra",v) end) directives.register("luatex.nestsize",function(v) set("nest_size",v) end) directives.register("luatex.maxinopen",function(v) set("max_in_open",v) end) directives.register("luatex.maxprintline",function(v) set("max_print_line",v) end) directives.register("luatex.maxstrings",function(v) set("max_strings",v) end) directives.register("luatex.paramsize",function(v) set("param_size",v) end) directives.register("luatex.savesize",function(v) set("save_size",v) end) directives.register("luatex.stacksize",function(v) set("stack_size",v) end) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-log"] = package.loaded["trac-log"] or true -- original size: 21914, stripped down to: 14287 if not modules then modules={} end modules ['trac-log']={ version=1.001, comment="companion to trac-log.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local write_nl,write=texio and texio.write_nl or print,texio and texio.write or io.write local format,gmatch,find=string.format,string.gmatch,string.find local concat,insert,remove=table.concat,table.insert,table.remove local topattern=string.topattern local texcount=tex and tex.count local next,type,select=next,type,select local utfchar=utf.char local setmetatableindex=table.setmetatableindex local formatters=string.formatters logs=logs or {} local logs=logs local moreinfo=[[ More information about ConTeXt and the tools that come with it can be found at: ]].."\n"..[[ maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net wiki : http://contextgarden.net ]] utilities.strings.formatters.add ( formatters,"unichr", [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] ) utilities.strings.formatters.add ( formatters,"chruni", [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] ) local function ignore() end setmetatableindex(logs,function(t,k) t[k]=ignore;return ignore end) local report,subreport,status,settarget,setformats,settranslations local direct,subdirect,writer,pushtarget,poptarget if tex and (tex.jobname or tex.formatname) then local valueiskey={ __index=function(t,k) t[k]=k return k end } local target="term and log" logs.flush=io.flush local formats={} setmetatable(formats,valueiskey) local translations={} setmetatable(translations,valueiskey) writer=function(...) write_nl(target,...) end newline=function() write_nl(target,"\n") end local f_one=formatters["%-15s > %s\n"] local f_two=formatters["%-15s >\n"] report=function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local f_one=formatters["%-15s > %s"] local f_two=formatters["%-15s >"] direct=function(a,b,c,...) if c then return f_one(translations[a],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],formats[b]) elseif a then return f_two(translations[a]) else return "" end end local f_one=formatters["%-15s > %s > %s\n"] local f_two=formatters["%-15s > %s >\n"] subreport=function(a,s,b,c,...) if c then write_nl(target,f_one(translations[a],translations[s],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],translations[s],formats[b])) elseif a then write_nl(target,f_two(translations[a],translations[s])) else write_nl(target,"\n") end end local f_one=formatters["%-15s > %s > %s"] local f_two=formatters["%-15s > %s >"] subdirect=function(a,s,b,c,...) if c then return f_one(translations[a],translations[s],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],translations[s],formats[b]) elseif a then return f_two(translations[a],translations[s]) else return "" end end local f_one=formatters["%-15s : %s\n"] local f_two=formatters["%-15s :\n"] status=function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local targets={ logfile="log", log="log", file="log", console="term", terminal="term", both="term and log", } settarget=function(whereto) target=targets[whereto or "both"] or targets.both if target=="term" or target=="term and log" then logs.flush=io.flush else logs.flush=ignore end end local stack={} pushtarget=function(newtarget) insert(stack,target) settarget(newtarget) end poptarget=function() if #stack>0 then settarget(remove(stack)) end end setformats=function(f) formats=f end settranslations=function(t) translations=t end else logs.flush=ignore writer=write_nl newline=function() write_nl("\n") end local f_one=formatters["%-15s | %s"] local f_two=formatters["%-15s |"] report=function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("") end end local f_one=formatters["%-15s | %s | %s"] local f_two=formatters["%-15s | %s |"] subreport=function(a,sub,b,c,...) if c then write_nl(f_one(a,sub,formatters[b](c,...))) elseif b then write_nl(f_one(a,sub,b)) elseif a then write_nl(f_two(a,sub)) else write_nl("") end end local f_one=formatters["%-15s : %s\n"] local f_two=formatters["%-15s :\n"] status=function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("\n") end end direct=ignore subdirect=ignore settarget=ignore pushtarget=ignore poptarget=ignore setformats=ignore settranslations=ignore end logs.report=report logs.subreport=subreport logs.status=status logs.settarget=settarget logs.pushtarget=pushtarget logs.poptarget=poptarget logs.setformats=setformats logs.settranslations=settranslations logs.direct=direct logs.subdirect=subdirect logs.writer=writer logs.newline=newline local data,states={},nil function logs.reporter(category,subcategory) local logger=data[category] if not logger then local state=false if states==true then state=true elseif type(states)=="table" then for c,_ in next,states do if find(category,c) then state=true break end end end logger={ reporters={}, state=state, } data[category]=logger end local reporter=logger.reporters[subcategory or "default"] if not reporter then if subcategory then reporter=function(...) if not logger.state then subreport(category,subcategory,...) end end logger.reporters[subcategory]=reporter else local tag=category reporter=function(...) if not logger.state then report(category,...) end end logger.reporters.default=reporter end end return reporter end logs.new=logs.reporter local ctxreport=logs.writer function logs.setmessenger(m) ctxreport=m end function logs.messenger(category,subcategory) if subcategory then return function(...) ctxreport(subdirect(category,subcategory,...)) end else return function(...) ctxreport(direct(category,...)) end end end local function setblocked(category,value) if category==true then category,value="*",true elseif category==false then category,value="*",false elseif value==nil then value=true end if category=="*" then states=value for k,v in next,data do v.state=value end else states=utilities.parsers.settings_to_hash(category) for c,_ in next,states do if data[c] then v.state=value else c=topattern(c,true,true) for k,v in next,data do if find(k,c) then v.state=value end end end end end end function logs.disable(category,value) setblocked(category,value==nil and true or value) end function logs.enable(category) setblocked(category,false) end function logs.categories() return table.sortedkeys(data) end function logs.show() local n,c,s,max=0,0,0,0 for category,v in table.sortedpairs(data) do n=n+1 local state=v.state local reporters=v.reporters local nc=#category if nc>c then c=nc end for subcategory,_ in next,reporters do local ns=#subcategory if ns>c then s=ns end local m=nc+ns if m>max then max=m end end local subcategories=concat(table.sortedkeys(reporters),", ") if state==true then state="disabled" elseif state==false then state="enabled" else state="unknown" end report("logging","category %a, subcategories %a, state %a",category,subcategories,state) end report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) end local delayed_reporters={} setmetatableindex(delayed_reporters,function(t,k) local v=logs.reporter(k.name) t[k]=v return v end) function utilities.setters.report(setter,...) delayed_reporters[setter](...) end directives.register("logs.blocked",function(v) setblocked(v,true) end) directives.register("logs.target",function(v) settarget(v) end) local report_pages=logs.reporter("pages") local real,user,sub function logs.start_page_number() real,user,sub=texcount.realpageno,texcount.userpageno,texcount.subpageno end local timing=false local starttime=nil local lasttime=nil trackers.register("pages.timing",function(v) starttime=os.clock() timing=true end) function logs.stop_page_number() if timing then local elapsed,average local stoptime=os.clock() if not lasttime or real<2 then elapsed=stoptime average=stoptime starttime=stoptime else elapsed=stoptime-lasttime average=(stoptime-starttime)/(real-1) end lasttime=stoptime if real<=0 then report_pages("flushing page, time %0.04f / %0.04f",elapsed,average) elseif user<=0 then report_pages("flushing realpage %s, time %0.04f / %0.04f",real,elapsed,average) elseif sub<=0 then report_pages("flushing realpage %s, userpage %s, time %0.04f / %0.04f",real,user,elapsed,average) else report_pages("flushing realpage %s, userpage %s, subpage %s, time %0.04f / %0.04f",real,user,sub,elapsed,average) end else if real<=0 then report_pages("flushing page") elseif user<=0 then report_pages("flushing realpage %s",real) elseif sub<=0 then report_pages("flushing realpage %s, userpage %s",real,user) else report_pages("flushing realpage %s, userpage %s, subpage %s",real,user,sub) end end logs.flush() end local report_files=logs.reporter("files") local nesting=0 local verbose=false local hasscheme=url.hasscheme function logs.show_open(name) end function logs.show_close(name) end function logs.show_load(name) end local simple=logs.reporter("comment") logs.simple=simple logs.simpleline=simple function logs.setprogram () end function logs.extendbanner() end function logs.reportlines () end function logs.reportbanner() end function logs.reportline () end function logs.simplelines () end function logs.help () end local Carg,C,lpegmatch=lpeg.Carg,lpeg.C,lpeg.match local p_newline=lpeg.patterns.newline local linewise=( Carg(1)*C((1-p_newline)^1)/function(t,s) t.report(s) end+Carg(1)*p_newline^2/function(t) t.report() end+p_newline )^1 local function reportlines(t,str) if str then lpegmatch(linewise,str,1,t) end end local function reportbanner(t) local banner=t.banner if banner then t.report(banner) t.report() end end local function reportversion(t) local banner=t.banner if banner then t.report(banner) end end local function reporthelp(t,...) local helpinfo=t.helpinfo if type(helpinfo)=="string" then reportlines(t,helpinfo) elseif type(helpinfo)=="table" then for i=1,select("#",...) do reportlines(t,t.helpinfo[select(i,...)]) if i %s => %s => %s\r"](os.date("%d/%m/%y %H:%m:%S"),process,jobname,category,format(...)) for i=1,10 do local f=io.open(whereto,"a") if f then f:write(message) f:close() break else sleep(0.1) end end end local report_system=logs.reporter("system","logs") function logs.obsolete(old,new) local o=loadstring("return "..new)() if type(o)=="function" then return function(...) report_system("function %a is obsolete, use %a",old,new) loadstring(old.."="..new.." return "..old)()(...) end elseif type(o)=="table" then local t,m={},{} m.__index=function(t,k) report_system("table %a is obsolete, use %a",old,new) m.__index,m.__newindex=o,o return o[k] end m.__newindex=function(t,k,v) report_system("table %a is obsolete, use %a",old,new) m.__index,m.__newindex=o,o o[k]=v end if libraries then libraries.obsolete[old]=t end setmetatable(t,m) return t end end if utilities then utilities.report=report_system end if tex and tex.error then function logs.texerrormessage(...) tex.error(format(...),{}) end else function logs.texerrormessage(...) print(format(...)) end end io.stdout:setvbuf('no') io.stderr:setvbuf('no') if package.helpers.report then package.helpers.report=logs.reporter("package loader") end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-inf"] = package.loaded["trac-inf"] or true -- original size: 5678, stripped down to: 4448 if not modules then modules={} end modules ['trac-inf']={ version=1.001, comment="companion to trac-inf.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber local format,lower=string.format,string.lower local concat=table.concat local clock=os.gettimeofday or os.clock statistics=statistics or {} local statistics=statistics statistics.enable=true statistics.threshold=0.01 local statusinfo,n,registered,timers={},0,{},{} table.setmetatableindex(timers,function(t,k) local v={ timing=0,loadtime=0 } t[k]=v return v end) local function hastiming(instance) return instance and timers[instance] end local function resettiming(instance) timers[instance or "notimer"]={ timing=0,loadtime=0 } end local function starttiming(instance) local timer=timers[instance or "notimer"] local it=timer.timing or 0 if it==0 then timer.starttime=clock() if not timer.loadtime then timer.loadtime=0 end end timer.timing=it+1 end local function stoptiming(instance) local timer=timers[instance or "notimer"] local it=timer.timing if it>1 then timer.timing=it-1 else local starttime=timer.starttime if starttime then local stoptime=clock() local loadtime=stoptime-starttime timer.stoptime=stoptime timer.loadtime=timer.loadtime+loadtime timer.timing=0 return loadtime end end return 0 end local function elapsed(instance) if type(instance)=="number" then return instance or 0 else local timer=timers[instance or "notimer"] return timer and timer.loadtime or 0 end end local function elapsedtime(instance) return format("%0.3f",elapsed(instance)) end local function elapsedindeed(instance) return elapsed(instance)>statistics.threshold end local function elapsedseconds(instance,rest) if elapsedindeed(instance) then return format("%0.3f seconds %s",elapsed(instance),rest or "") end end statistics.hastiming=hastiming statistics.resettiming=resettiming statistics.starttiming=starttiming statistics.stoptiming=stoptiming statistics.elapsed=elapsed statistics.elapsedtime=elapsedtime statistics.elapsedindeed=elapsedindeed statistics.elapsedseconds=elapsedseconds function statistics.register(tag,fnc) if statistics.enable and type(fnc)=="function" then local rt=registered[tag] or (#statusinfo+1) statusinfo[rt]={ tag,fnc } registered[tag]=rt if #tag>n then n=#tag end end end local report=logs.reporter("mkiv lua stats") function statistics.show() if statistics.enable then local register=statistics.register register("luatex banner",function() return lower(status.banner) end) register("control sequences",function() return format("%s of %s + %s",status.cs_count,status.hash_size,status.hash_extra) end) register("callbacks",function() local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0 return format("%s direct, %s indirect, %s total",total-indirect,indirect,total) end) if jit then local status={ jit.status() } if status[1] then register("luajit status",function() return concat(status," ",2) end) end end register("current memory usage",statistics.memused) register("runtime",statistics.runtime) logs.newline() for i=1,#statusinfo do local s=statusinfo[i] local r=s[2]() if r then report("%s: %s",s[1],r) end end statistics.enable=false end end function statistics.memused() local round=math.round or math.floor return format("%s MB (ctx: %s MB)",round(collectgarbage("count")/1000),round(status.luastate_bytes/1000000)) end starttiming(statistics) function statistics.formatruntime(runtime) return format("%s seconds",runtime) end function statistics.runtime() stoptiming(statistics) return statistics.formatruntime(elapsedtime(statistics)) end local report=logs.reporter("system") function statistics.timed(action) starttiming("run") action() stoptiming("run") report("total runtime: %s",elapsedtime("run")) end commands=commands or {} function commands.resettimer(name) resettiming(name or "whatever") starttiming(name or "whatever") end function commands.elapsedtime(name) stoptiming(name or "whatever") context(elapsedtime(name or "whatever")) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-pro"] = package.loaded["trac-pro"] or true -- original size: 5773, stripped down to: 3453 if not modules then modules={} end modules ['trac-pro']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local getmetatable,setmetatable,rawset,type=getmetatable,setmetatable,rawset,type local trace_namespaces=false trackers.register("system.namespaces",function(v) trace_namespaces=v end) local report_system=logs.reporter("system","protection") namespaces=namespaces or {} local namespaces=namespaces local registered={} local function report_index(k,name) if trace_namespaces then report_system("reference to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("reference to %a in protected namespace %a",k,name) end end local function report_newindex(k,name) if trace_namespaces then report_system("assignment to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("assignment to %a in protected namespace %a",k,name) end end local function register(name) local data=name=="global" and _G or _G[name] if not data then return end registered[name]=data local m=getmetatable(data) if not m then m={} setmetatable(data,m) end local index,newindex={},{} m.__saved__index=m.__index m.__no__index=function(t,k) if not index[k] then index[k]=true report_index(k,name) end return nil end m.__saved__newindex=m.__newindex m.__no__newindex=function(t,k,v) if not newindex[k] then newindex[k]=true report_newindex(k,name) end rawset(t,k,v) end m.__protection__depth=0 end local function private(name) local data=registered[name] if not data then data=_G[name] if not data then data={} _G[name]=data end register(name) end return data end local function protect(name) local data=registered[name] if not data then return end local m=getmetatable(data) local pd=m.__protection__depth if pd>0 then m.__protection__depth=pd+1 else m.__save_d_index,m.__saved__newindex=m.__index,m.__newindex m.__index,m.__newindex=m.__no__index,m.__no__newindex m.__protection__depth=1 end end local function unprotect(name) local data=registered[name] if not data then return end local m=getmetatable(data) local pd=m.__protection__depth if pd>1 then m.__protection__depth=pd-1 else m.__index,m.__newindex=m.__saved__index,m.__saved__newindex m.__protection__depth=0 end end local function protectall() for name,_ in next,registered do if name~="global" then protect(name) end end end local function unprotectall() for name,_ in next,registered do if name~="global" then unprotect(name) end end end namespaces.register=register namespaces.private=private namespaces.protect=protect namespaces.unprotect=unprotect namespaces.protectall=protectall namespaces.unprotectall=unprotectall namespaces.private("namespaces") registered={} register("global") directives.register("system.protect",function(v) if v then protectall() else unprotectall() end end) directives.register("system.checkglobals",function(v) if v then report_system("enabling global namespace guard") protect("global") else report_system("disabling global namespace guard") unprotect("global") end end) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-lua"] = package.loaded["util-lua"] or true -- original size: 12575, stripped down to: 8700 if not modules then modules={} end modules ['util-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", comment="the strip code is written by Peter Cawley", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local rep,sub,byte,dump,format=string.rep,string.sub,string.byte,string.dump,string.format local load,loadfile,type=load,loadfile,type utilities=utilities or {} utilities.lua=utilities.lua or {} local luautilities=utilities.lua local report_lua=logs.reporter("system","lua") local tracestripping=false local forcestupidcompile=true luautilities.stripcode=true luautilities.alwaysstripcode=false luautilities.nofstrippedchunks=0 luautilities.nofstrippedbytes=0 local strippedchunks={} luautilities.strippedchunks=strippedchunks luautilities.suffixes={ tma="tma", tmc=jit and "tmb" or "tmc", lua="lua", luc=jit and "lub" or "luc", lui="lui", luv="luv", luj="luj", tua="tua", tuc="tuc", } if jit or status.luatex_version>=74 then local function register(name) if tracestripping then report_lua("stripped bytecode from %a",name or "unknown") end strippedchunks[#strippedchunks+1]=name luautilities.nofstrippedchunks=luautilities.nofstrippedchunks+1 end local function stupidcompile(luafile,lucfile,strip) local code=io.loaddata(luafile) if code and code~="" then code=load(code) if code then code=dump(code,strip and luautilities.stripcode or luautilities.alwaysstripcode) if code and code~="" then register(name) io.savedata(lucfile,code) return true,0 end else report_lua("fatal error %a in file %a",1,luafile) end else report_lua("fatal error %a in file %a",2,luafile) end return false,0 end function luautilities.loadedluacode(fullname,forcestrip,name) name=name or fullname local code=environment.loadpreprocessedfile and environment.loadpreprocessedfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip)=="function" then forcestrip=forcestrip(fullname) end if forcestrip or luautilities.alwaysstripcode then register(name) return load(dump(code,true)),0 else return code,0 end elseif luautilities.alwaysstripcode then register(name) return load(dump(code,true)),0 else return code,0 end end function luautilities.strippedloadstring(code,forcestrip,name) if forcestrip and luautilities.stripcode or luautilities.alwaysstripcode then code=load(code) if not code then report_lua("fatal error %a in file %a",3,name) end register(name) code=dump(code,true) end return load(code),0 end function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done=stupidcompile(luafile,lucfile,strip~=false) if done then report_lua("dumping %a into %a stripped",luafile,lucfile) if cleanup==true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end end return done end function luautilities.loadstripped(...) local l=load(...) if l then return load(dump(l,true)) end end else local function register(name,before,after) local delta=before-after if tracestripping then report_lua("bytecodes stripped from %a, # before %s, # after %s, delta %s",name,before,after,delta) end strippedchunks[#strippedchunks+1]=name luautilities.nofstrippedchunks=luautilities.nofstrippedchunks+1 luautilities.nofstrippedbytes=luautilities.nofstrippedbytes+delta return delta end local strip_code_pc if _MAJORVERSION==5 and _MINORVERSION==1 then strip_code_pc=function(dump,name) local before=#dump local version,format,endian,int,size,ins,num=byte(dump,5,11) local subint if endian==1 then subint=function(dump,i,l) local val=0 for n=l,1,-1 do val=val*256+byte(dump,i+n-1) end return val,i+l end else subint=function(dump,i,l) local val=0 for n=1,l,1 do val=val*256+byte(dump,i+n-1) end return val,i+l end end local strip_function strip_function=function(dump) local count,offset=subint(dump,1,size) local stripped,dirty=rep("\0",size),offset+count offset=offset+count+int*2+4 offset=offset+int+subint(dump,offset,int)*ins count,offset=subint(dump,offset,int) for n=1,count do local t t,offset=subint(dump,offset,1) if t==1 then offset=offset+1 elseif t==4 then offset=offset+size+subint(dump,offset,size) elseif t==3 then offset=offset+num end end count,offset=subint(dump,offset,int) stripped=stripped..sub(dump,dirty,offset-1) for n=1,count do local proto,off=strip_function(sub(dump,offset,-1)) stripped,offset=stripped..proto,offset+off-1 end offset=offset+subint(dump,offset,int)*int+int count,offset=subint(dump,offset,int) for n=1,count do offset=offset+subint(dump,offset,size)+size+int*2 end count,offset=subint(dump,offset,int) for n=1,count do offset=offset+subint(dump,offset,size)+size end stripped=stripped..rep("\0",int*3) return stripped,offset end dump=sub(dump,1,12)..strip_function(sub(dump,13,-1)) local after=#dump local delta=register(name,before,after) return dump,delta end else strip_code_pc=function(dump,name) return dump,0 end end function luautilities.loadedluacode(fullname,forcestrip,name) local code=environment.loadpreprocessedfile and environment.preprocessedloadfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip)=="function" then forcestrip=forcestrip(fullname) end if forcestrip then local code,n=strip_code_pc(dump(code),name) return load(code),n elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code,0 end elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code,0 end end function luautilities.strippedloadstring(code,forcestrip,name) local n=0 if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then code=load(code) if not code then report_lua("fatal error in file %a",name) end code,n=strip_code_pc(dump(code),name) end return load(code),n end local function stupidcompile(luafile,lucfile,strip) local code=io.loaddata(luafile) local n=0 if code and code~="" then code=load(code) if not code then report_lua("fatal error in file %a",luafile) end code=dump(code) if strip then code,n=strip_code_pc(code,luautilities.stripcode or luautilities.alwaysstripcode,luafile) end if code and code~="" then io.savedata(lucfile,code) end end return n end local luac_normal="texluac -o %q %q" local luac_strip="texluac -s -o %q %q" function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done=false if strip~=false then strip=true end if forcestupidcompile then fallback=true elseif strip then done=os.spawn(format(luac_strip,lucfile,luafile))==0 else done=os.spawn(format(luac_normal,lucfile,luafile))==0 end if not done and fallback then local n=stupidcompile(luafile,lucfile,strip) if n>0 then report_lua("%a dumped into %a (%i bytes stripped)",luafile,lucfile,n) else report_lua("%a dumped into %a (unstripped)",luafile,lucfile) end cleanup=false done=true end if done and cleanup==true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end return done end luautilities.loadstripped=loadstring end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true -- original size: 3708, stripped down to: 2568 if not modules then modules={} end modules ['util-deb']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local debug=require "debug" local getinfo=debug.getinfo local type,next,tostring=type,next,tostring local format,find=string.format,string.find local is_boolean=string.is_boolean utilities=utilities or {} local debugger=utilities.debugger or {} utilities.debugger=debugger local counters={} local names={} local report=logs.reporter("debugger") local function hook() local f=getinfo(2) if f then local n="unknown" if f.what=="C" then n=f.name or '' if not names[n] then names[n]=format("%42s",n) end else n=f.name or f.namewhat or f.what if not n or n=="" then n="?" end if not names[n] then names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source") end end counters[n]=(counters[n] or 0)+1 end end function debugger.showstats(printer,threshold) printer=printer or report threshold=threshold or 0 local total,grandtotal,functions=0,0,0 local dataset={} for name,count in next,counters do dataset[#dataset+1]={ name,count } end table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end) for i=1,#dataset do local d=dataset[i] local name=d[1] local count=d[2] if count>threshold and not find(name,"for generator") then printer(format("%8i %s\n",count,names[name])) total=total+count end grandtotal=grandtotal+count functions=functions+1 end printer("\n") printer(format("functions : % 10i\n",functions)) printer(format("total : % 10i\n",total)) printer(format("grand total: % 10i\n",grandtotal)) printer(format("threshold : % 10i\n",threshold)) end function debugger.savestats(filename,threshold) local f=io.open(filename,'w') if f then debugger.showstats(function(str) f:write(str) end,threshold) f:close() end end function debugger.enable() debug.sethook(hook,"c") end function debugger.disable() debug.sethook() end function traceback() local level=1 while true do local info=debug.getinfo(level,"Sl") if not info then break elseif info.what=="C" then print(format("%3i : C function",level)) else print(format("%3i : [%s]:%d",level,info.short_src,info.currentline)) end level=level+1 end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-mrg"] = package.loaded["util-mrg"] or true -- original size: 7757, stripped down to: 6015 if not modules then modules={} end modules ['util-mrg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local gsub,format=string.gsub,string.format local concat=table.concat local type,next=type,next local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt,Cb,Cg=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt,lpeg.Cb,lpeg.Cg local lpegmatch,patterns=lpeg.match,lpeg.patterns utilities=utilities or {} local merger=utilities.merger or {} utilities.merger=merger merger.strip_comment=true local report=logs.reporter("system","merge") utilities.report=report local m_begin_merge="begin library merge" local m_end_merge="end library merge" local m_begin_closure="do -- create closure to overcome 200 locals limit" local m_end_closure="end -- of closure" local m_pattern="%c+".."%-%-%s+"..m_begin_merge.."%c+(.-)%c+".."%-%-%s+"..m_end_merge.."%c+" local m_format="\n\n-- "..m_begin_merge.."\n%s\n".."-- "..m_end_merge.."\n\n" local m_faked="-- ".."created merged file".."\n\n".."-- "..m_begin_merge.."\n\n".."-- "..m_end_merge.."\n\n" local m_report=[[ -- used libraries : %s -- skipped libraries : %s -- original bytes : %s -- stripped bytes : %s ]] local m_preloaded=[[package.loaded[%q] = package.loaded[%q] or true]] local function self_fake() return m_faked end local function self_nothing() return "" end local function self_load(name) local data=io.loaddata(name) or "" if data=="" then report("unknown file %a",name) else report("inserting file %a",name) end return data or "" end local space=patterns.space local eol=patterns.newline local equals=P("=")^0 local open=P("[")*Cg(equals,"init")*P("[")*P("\n")^-1 local close=P("]")*C(equals)*P("]") local closeeq=Cmt(close*Cb("init"),function(s,i,a,b) return a==b end) local longstring=open*(1-closeeq)^0*close local quoted=patterns.quoted local digit=patterns.digit local emptyline=space^0*eol local operator1=P("<=")+P(">=")+P("~=")+P("..")+S("/^<>=*+%%") local operator2=S("*+/") local operator3=S("-") local operator4=P("..") local separator=S(",;") local ignore=(P("]")*space^1*P("=")*space^1*P("]"))/"]=["+(P("=")*space^1*P("{"))/"={"+(P("(")*space^1)/"("+(P("{")*(space+eol)^1*P("}"))/"{}" local strings=quoted local longcmt=(emptyline^0*P("--")*longstring*emptyline^0)/"" local longstr=longstring local comment=emptyline^0*P("--")*P("-")^0*(1-eol)^0*emptyline^1/"\n" local optionalspaces=space^0/"" local mandatespaces=space^1/"" local optionalspacing=(eol+space)^0/"" local mandatespacing=(eol+space)^1/"" local pack=digit*space^1*operator4*optionalspacing+optionalspacing*operator1*optionalspacing+optionalspacing*operator2*optionalspaces+mandatespacing*operator3*mandatespaces+optionalspaces*separator*optionalspaces local lines=emptyline^2/"\n" local spaces=(space*space)/" " local compact=Cs (( ignore+strings+longcmt+longstr+comment+pack+lines+spaces+1 )^1 ) local strip=Cs((emptyline^2/"\n"+1)^0) local stripreturn=Cs((1-P("return")*space^1*P(1-space-eol)^1*(space+eol)^0*P(-1))^1) function merger.compact(data) return lpegmatch(strip,lpegmatch(compact,data)) end local function self_compact(data) local delta=0 if merger.strip_comment then local before=#data data=lpegmatch(compact,data) data=lpegmatch(strip,data) local after=#data delta=before-after report("original size %s, compacted to %s, stripped %s",before,after,delta) data=format("-- original size: %s, stripped down to: %s\n\n%s",before,after,data) end return lpegmatch(stripreturn,data) or data,delta end local function self_save(name,data) if data~="" then io.savedata(name,data) report("saving %s with size %s",name,#data) end end local function self_swap(data,code) return data~="" and (gsub(data,m_pattern,function() return format(m_format,code) end,1)) or "" end local function self_libs(libs,list) local result,f,frozen,foundpath={},nil,false,nil result[#result+1]="\n" if type(libs)=='string' then libs={ libs } end if type(list)=='string' then list={ list } end for i=1,#libs do local lib=libs[i] for j=1,#list do local pth=gsub(list[j],"\\","/") report("checking library path %a",pth) local name=pth.."/"..lib if lfs.isfile(name) then foundpath=pth end end if foundpath then break end end if foundpath then report("using library path %a",foundpath) local right,wrong,original,stripped={},{},0,0 for i=1,#libs do local lib=libs[i] local fullname=foundpath.."/"..lib if lfs.isfile(fullname) then report("using library %a",fullname) local preloaded=file.nameonly(lib) local data=io.loaddata(fullname,true) original=original+#data local data,delta=self_compact(data) right[#right+1]=lib result[#result+1]=m_begin_closure result[#result+1]=format(m_preloaded,preloaded,preloaded) result[#result+1]=data result[#result+1]=m_end_closure stripped=stripped+delta else report("skipping library %a",fullname) wrong[#wrong+1]=lib end end right=#right>0 and concat(right," ") or "-" wrong=#wrong>0 and concat(wrong," ") or "-" report("used libraries: %a",right) report("skipped libraries: %a",wrong) report("original bytes: %a",original) report("stripped bytes: %a",stripped) result[#result+1]=format(m_report,right,wrong,original,stripped) else report("no valid library path found") end return concat(result,"\n\n") end function merger.selfcreate(libs,list,target) if target then self_save(target,self_swap(self_fake(),self_libs(libs,list))) end end function merger.selfmerge(name,libs,list,target) self_save(target or name,self_swap(self_load(name),self_libs(libs,list))) end function merger.selfclean(name) self_save(name,self_swap(self_load(name),self_nothing())) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-tpl"] = package.loaded["util-tpl"] or true -- original size: 5655, stripped down to: 3242 if not modules then modules={} end modules ['util-tpl']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities.templates=utilities.templates or {} local templates=utilities.templates local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end) local report_template=logs.reporter("template") local tostring=tostring local format,sub=string.format,string.sub local P,C,Cs,Carg,lpegmatch=lpeg.P,lpeg.C,lpeg.Cs,lpeg.Carg,lpeg.match local replacer local function replacekey(k,t,how,recursive) local v=t[k] if not v then if trace_template then report_template("unknown key %a",k) end return "" else v=tostring(v) if trace_template then report_template("setting key %a to value %a",k,v) end if recursive then return lpegmatch(replacer,v,1,t,how,recursive) else return v end end end local sqlescape=lpeg.replacer { { "'","''" }, { "\\","\\\\" }, { "\r\n","\\n" }, { "\r","\\n" }, } local sqlquotedescape=lpeg.Cs(lpeg.Cc("'")*sqlescape*lpeg.Cc("'")) local escapers={ lua=function(s) return sub(format("%q",s),2,-2) end, sql=function(s) return lpegmatch(sqlescape,s) end, } local quotedescapers={ lua=function(s) return format("%q",s) end, sql=function(s) return lpegmatch(sqlquotedescape,s) end, } lpeg.patterns.sqlescape=sqlescape lpeg.patterns.sqlescape=sqlquotedescape local luaescaper=escapers.lua local quotedluaescaper=quotedescapers.lua local function replacekeyunquoted(s,t,how,recurse) local escaper=how and escapers[how] or luaescaper return escaper(replacekey(s,t,how,recurse)) end local function replacekeyquoted(s,t,how,recurse) local escaper=how and quotedescapers[how] or quotedluaescaper return escaper(replacekey(s,t,how,recurse)) end local single=P("%") local double=P("%%") local lquoted=P("%[") local rquoted=P("]%") local lquotedq=P("%(") local rquotedq=P(")%") local escape=double/'%%' local nosingle=single/'' local nodouble=double/'' local nolquoted=lquoted/'' local norquoted=rquoted/'' local nolquotedq=lquotedq/'' local norquotedq=rquotedq/'' local key=nosingle*((C((1-nosingle )^1)*Carg(1)*Carg(2)*Carg(3))/replacekey )*nosingle local quoted=nolquotedq*((C((1-norquotedq)^1)*Carg(1)*Carg(2)*Carg(3))/replacekeyquoted )*norquotedq local unquoted=nolquoted*((C((1-norquoted )^1)*Carg(1)*Carg(2)*Carg(3))/replacekeyunquoted)*norquoted local any=P(1) replacer=Cs((unquoted+quoted+escape+key+any)^0) local function replace(str,mapping,how,recurse) if mapping and str then return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str else return str end end templates.replace=replace function templates.load(filename,mapping,how,recurse) local data=io.loaddata(filename) or "" if mapping and next(mapping) then return replace(data,mapping,how,recurse) else return data end end function templates.resolve(t,mapping,how,recurse) if not mapping then mapping=t end for k,v in next,t do t[k]=replace(v,mapping,how,recurse) end return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-env"] = package.loaded["util-env"] or true -- original size: 8722, stripped down to: 5050 if not modules then modules={} end modules ['util-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate,mark=utilities.storage.allocate,utilities.storage.mark local format,sub,match,gsub,find=string.format,string.sub,string.match,string.gsub,string.find local unquoted,quoted=string.unquoted,string.quoted local concat,insert,remove=table.concat,table.insert,table.remove environment=environment or {} local environment=environment os.setlocale(nil,nil) function os.setlocale() end local validengines=allocate { ["luatex"]=true, ["luajittex"]=true, } local basicengines=allocate { ["luatex"]="luatex", ["texlua"]="luatex", ["texluac"]="luatex", ["luajittex"]="luajittex", ["texluajit"]="luajittex", } local luaengines=allocate { ["lua"]=true, ["luajit"]=true, } environment.validengines=validengines environment.basicengines=basicengines if not arg then elseif luaengines[file.removesuffix(arg[-1])] then elseif validengines[file.removesuffix(arg[0])] then if arg[1]=="--luaonly" then arg[-1]=arg[0] arg[ 0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end remove(arg) remove(arg) else end local originalzero=file.basename(arg[0]) local specialmapping={ luatools=="base" } if originalzero~="mtxrun" and originalzero~="mtxrun.lua" then arg[0]=specialmapping[originalzero] or originalzero insert(arg,0,"--script") insert(arg,0,"mtxrun") end end environment.arguments=allocate() environment.files=allocate() environment.sortedflags=nil function environment.initializearguments(arg) local arguments,files={},{} environment.arguments,environment.files,environment.sortedflags=arguments,files,nil for index=1,#arg do local argument=arg[index] if index>0 then local flag,value=match(argument,"^%-+(.-)=(.-)$") if flag then flag=gsub(flag,"^c:","") arguments[flag]=unquoted(value or "") else flag=match(argument,"^%-+(.+)") if flag then flag=gsub(flag,"^c:","") arguments[flag]=true else files[#files+1]=argument end end end end environment.ownname=file.reslash(environment.ownname or arg[0] or 'unknown.lua') end function environment.setargument(name,value) environment.arguments[name]=value end function environment.getargument(name,partial) local arguments,sortedflags=environment.arguments,environment.sortedflags if arguments[name] then return arguments[name] elseif partial then if not sortedflags then sortedflags=allocate(table.sortedkeys(arguments)) for k=1,#sortedflags do sortedflags[k]="^"..sortedflags[k] end environment.sortedflags=sortedflags end for k=1,#sortedflags do local v=sortedflags[k] if find(name,v) then return arguments[sub(v,2,#v)] end end end return nil end environment.argument=environment.getargument function environment.splitarguments(separator) local done,before,after=false,{},{} local originalarguments=environment.originalarguments for k=1,#originalarguments do local v=originalarguments[k] if not done and v==separator then done=true elseif done then after[#after+1]=v else before[#before+1]=v end end return before,after end function environment.reconstructcommandline(arg,noquote) arg=arg or environment.originalarguments if noquote and #arg==1 then local a=arg[1] a=resolvers.resolve(a) a=unquoted(a) return a elseif #arg>0 then local result={} for i=1,#arg do local a=arg[i] a=resolvers.resolve(a) a=unquoted(a) a=gsub(a,'"','\\"') if find(a," ") then result[#result+1]=quoted(a) else result[#result+1]=a end end return concat(result," ") else return "" end end function environment.relativepath(path,root) if not path then path="" end if not file.is_rootbased_path(path) then if not root then root=file.pathpart(environment.ownscript or environment.ownname or ".") end if root=="" then root="." end path=root.."/"..path end return file.collapsepath(path,true) end if arg then local newarg,instring={},false for index=1,#arg do local argument=arg[index] if find(argument,"^\"") then newarg[#newarg+1]=gsub(argument,"^\"","") if not find(argument,"\"$") then instring=true end elseif find(argument,"\"$") then newarg[#newarg]=newarg[#newarg].." "..gsub(argument,"\"$","") instring=false elseif instring then newarg[#newarg]=newarg[#newarg].." "..argument else newarg[#newarg+1]=argument end end for i=1,-5,-1 do newarg[i]=arg[i] end environment.initializearguments(newarg) environment.originalarguments=mark(newarg) environment.rawarguments=mark(arg) arg={} end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-env"] = package.loaded["luat-env"] or true -- original size: 5874, stripped down to: 4184 if not modules then modules={} end modules ['luat-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local rawset,rawget,loadfile,assert=rawset,rawget,loadfile,assert local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_lua=logs.reporter("resolvers","lua") local luautilities=utilities.lua local luasuffixes=luautilities.suffixes environment=environment or {} local environment=environment local mt={ __index=function(_,k) if k=="version" then local version=tex.toks and tex.toks.contextversiontoks if version and version~="" then rawset(environment,"version",version) return version else return "unknown" end elseif k=="kind" then local kind=tex.toks and tex.toks.contextkindtoks if kind and kind~="" then rawset(environment,"kind",kind) return kind else return "unknown" end elseif k=="jobname" or k=="formatname" then local name=tex and tex[k] if name or name=="" then rawset(environment,k,name) return name else return "unknown" end elseif k=="outputfilename" then local name=environment.jobname rawset(environment,k,name) return name end end } setmetatable(environment,mt) function environment.texfile(filename) return resolvers.findfile(filename,'tex') end function environment.luafile(filename) local resolved=resolvers.findfile(filename,'tex') or "" if resolved~="" then return resolved end resolved=resolvers.findfile(filename,'texmfscripts') or "" if resolved~="" then return resolved end return resolvers.findfile(filename,'luatexlibs') or "" end local stripindeed=false directives.register("system.compile.strip",function(v) stripindeed=v end) local function strippable(filename) if stripindeed then local modu=modules[file.nameonly(filename)] return modu and modu.dataonly else return false end end function environment.luafilechunk(filename,silent) filename=file.replacesuffix(filename,"lua") local fullname=environment.luafile(filename) if fullname and fullname~="" then local data=luautilities.loadedluacode(fullname,strippable,filename) if trace_locating then report_lua("loading file %a %s",fullname,not data and "failed" or "succeeded") elseif not silent then texio.write("<",data and "+ " or "- ",fullname,">") end return data else if trace_locating then report_lua("unknown file %a",filename) end return nil end end function environment.loadluafile(filename,version) local lucname,luaname,chunk local basename=file.removesuffix(filename) if basename==filename then luaname=file.addsuffix(basename,luasuffixes.lua) lucname=file.addsuffix(basename,luasuffixes.luc) else luaname=basename lucname=nil end local fullname=(lucname and environment.luafile(lucname)) or "" if fullname~="" then if trace_locating then report_lua("loading %a",fullname) end chunk=loadfile(fullname) end if chunk then assert(chunk)() if version then local v=version if modules and modules[filename] then v=modules[filename].version elseif versions and versions[filename] then v=versions[filename] end if v==version then return true else if trace_locating then report_lua("version mismatch for %a, lua version %a, luc version %a",filename,v,version) end environment.loadluafile(filename) end else return true end end fullname=(luaname and environment.luafile(luaname)) or "" if fullname~="" then if trace_locating then report_lua("loading %a",fullname) end chunk=loadfile(fullname) if not chunk then if trace_locating then report_lua("unknown file %a",filename) end else assert(chunk)() return true end end return false end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true -- original size: 42495, stripped down to: 26647 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end) local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end xml=xml or {} local xml=xml local concat,remove,insert=table.concat,table.remove,table.insert local type,next,setmetatable,getmetatable,tonumber=type,next,setmetatable,getmetatable,tonumber local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub local utfchar=utf.char local lpegmatch=lpeg.match local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs local formatters=string.formatters xml.xmlns=xml.xmlns or {} local check=P(false) local parse=check function xml.registerns(namespace,pattern) check=check+C(P(lower(pattern)))/namespace parse=P { P(check)+1*V(1) } end function xml.checkns(namespace,url) local ns=lpegmatch(parse,lower(url)) if ns and namespace~=ns then xml.xmlns[namespace]=ns end end function xml.resolvens(url) return lpegmatch(parse,lower(url)) or "" end local nsremap,resolvens=xml.xmlns,xml.resolvens local stack={} local top={} local dt={} local at={} local xmlns={} local errorstr=nil local entities={} local strip=false local cleanup=false local utfize=false local resolve_predefined=false local unify_predefined=false local dcache={} local hcache={} local acache={} local mt={} local function initialize_mt(root) mt={ __index=root } end function xml.setproperty(root,k,v) getmetatable(root).__index[k]=v end function xml.checkerror(top,toclose) return "" end local function add_attribute(namespace,tag,value) if cleanup and #value>0 then value=cleanup(value) end if tag=="xmlns" then xmlns[#xmlns+1]=resolvens(value) at[tag]=value elseif namespace=="" then at[tag]=value elseif namespace=="xmlns" then xml.checkns(tag,value) at["xmlns:"..tag]=value else at[namespace..":"..tag]=value end end local function add_empty(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace top=stack[#stack] dt=top.dt local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top } dt[#dt+1]=t setmetatable(t,mt) if at.xmlns then remove(xmlns) end at={} end local function add_begin(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] } setmetatable(top,mt) dt=top.dt stack[#stack+1]=top at={} end local function add_end(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local toclose=remove(stack) top=stack[#stack] if #stack<1 then errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "") elseif toclose.tg~=tag then errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "") end dt=top.dt dt[#dt+1]=toclose if toclose.at.xmlns then remove(xmlns) end end local function add_text(text) if cleanup and #text>0 then dt[#dt+1]=cleanup(text) else dt[#dt+1]=text end end local function add_special(what,spacing,text) if #spacing>0 then dt[#dt+1]=spacing end if strip and (what=="@cm@" or what=="@dt@") then else dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } } end end local function set_message(txt) errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","") end local reported_attribute_errors={} local function attribute_value_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute value %a",str) reported_attribute_errors[str]=true at._error_=str end return str end local function attribute_specification_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute specification %a",str) reported_attribute_errors[str]=true at._error_=str end return str end xml.placeholders={ unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end, unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end, unknown_any_entity=function(str) return formatters["&#x%s;"](str) end, } local placeholders=xml.placeholders local function fromhex(s) local n=tonumber(s,16) if n then return utfchar(n) else return formatters["h:%s"](s),true end end local function fromdec(s) local n=tonumber(s) if n then return utfchar(n) else return formatters["d:%s"](s),true end end local rest=(1-P(";"))^0 local many=P(1)^0 local parsedentity=P("&")*(P("#x")*(rest/fromhex)+P("#")*(rest/fromdec))*P(";")*P(-1)+(P("#x")*(many/fromhex)+P("#")*(many/fromdec)) local predefined_unified={ [38]="&", [42]=""", [47]="'", [74]="<", [76]=">", } local predefined_simplified={ [38]="&",amp="&", [42]='"',quot='"', [47]="'",apos="'", [74]="<",lt="<", [76]=">",gt=">", } local nofprivates=0xF0000 local privates_u={ [ [[&]] ]="&", [ [["]] ]=""", [ [[']] ]="'", [ [[<]] ]="<", [ [[>]] ]=">", } local privates_p={} local privates_n={ } local escaped=utf.remapper(privates_u) local function unescaped(s) local p=privates_n[s] if not p then nofprivates=nofprivates+1 p=utfchar(nofprivates) privates_n[s]=p s="&"..s..";" privates_u[p]=s privates_p[p]=s end return p end local unprivatized=utf.remapper(privates_p) xml.privatetoken=unescaped xml.unprivatized=unprivatized xml.privatecodes=privates_n local function handle_hex_entity(str) local h=hcache[str] if not h then local n=tonumber(str,16) h=unify_predefined and predefined_unified[n] if h then if trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end elseif utfize then h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or "" if not n then report_xml("utfize, ignoring hex entity &#x%s;",str) elseif trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end else if trace_entities then report_xml("found entity &#x%s;",str) end h="&#x"..str..";" end hcache[str]=h end return h end local function handle_dec_entity(str) local d=dcache[str] if not d then local n=tonumber(str) d=unify_predefined and predefined_unified[n] if d then if trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end elseif utfize then d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or "" if not n then report_xml("utfize, ignoring dec entity &#%s;",str) elseif trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end else if trace_entities then report_xml("found entity &#%s;",str) end d="&#"..str..";" end dcache[str]=d end return d end xml.parsedentitylpeg=parsedentity local function handle_any_entity(str) if resolve then local a=acache[str] if not a then a=resolve_predefined and predefined_simplified[str] if a then if trace_entities then report_xml("resolving entity &%s; to predefined %a",str,a) end else if type(resolve)=="function" then a=resolve(str) or entities[str] else a=entities[str] end if a then if type(a)=="function" then if trace_entities then report_xml("expanding entity &%s; to function call",str) end a=a(str) or "" end a=lpegmatch(parsedentity,a) or a if trace_entities then report_xml("resolving entity &%s; to internal %a",str,a) end else local unknown_any_entity=placeholders.unknown_any_entity if unknown_any_entity then a=unknown_any_entity(str) or "" end if a then if trace_entities then report_xml("resolving entity &%s; to external %s",str,a) end else if trace_entities then report_xml("keeping entity &%s;",str) end if str=="" then a="&error;" else a="&"..str..";" end end end end acache[str]=a elseif trace_entities then if not acache[str] then report_xml("converting entity &%s; to %a",str,a) acache[str]=a end end return a else local a=acache[str] if not a then a=resolve_predefined and predefined_simplified[str] if a then acache[str]=a if trace_entities then report_xml("entity &%s; becomes %a",str,a) end elseif str=="" then if trace_entities then report_xml("invalid entity &%s;",str) end a="&error;" acache[str]=a else if trace_entities then report_xml("entity &%s; is made private",str) end a=unescaped(str) acache[str]=a end end return a end end local function handle_end_entity(chr) report_xml("error in entity, %a found instead of %a",chr,";") end local space=S(' \r\n\t') local open=P('<') local close=P('>') local squote=S("'") local dquote=S('"') local equal=P('=') local slash=P('/') local colon=P(':') local semicolon=P(';') local ampersand=P('&') local valid=R('az','AZ','09')+S('_-.') local name_yes=C(valid^1)*colon*C(valid^1) local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpeg.patterns.utfbom local spacing=C(space^0) local anyentitycontent=(1-open-semicolon-space-close)^0 local hexentitycontent=R("AF","af","09")^0 local decentitycontent=R("09")^0 local parsedentity=P("#")/""*( P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) )+(anyentitycontent/handle_any_entity) local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity)) local text_unparsed=C((1-open)^1) local text_parsed=Cs(((1-open-ampersand)^1+entity)^1) local somespace=space^1 local optionalspace=space^0 local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) local endofattributes=slash*close+close local whatever=space*name*optionalspace*equal local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error local attributevalue=value+wrongvalue local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 local parsedtext=text_parsed/add_text local unparsedtext=text_unparsed/add_text local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin local endelement=(spacing*open*slash*name*optionalspace*close)/add_end local begincomment=open*P("!--") local endcomment=P("--")*close local begininstruction=open*P("?") local endinstruction=P("?")*close local begincdata=open*P("![CDATA[") local endcdata=P("]]")*close local someinstruction=C((1-endinstruction)^0) local somecomment=C((1-endcomment )^0) local somecdata=C((1-endcdata )^0) local function normalentity(k,v ) entities[k]=v end local function systementity(k,v,n) entities[k]=v end local function publicentity(k,v,n) entities[k]=v end local begindoctype=open*P("!DOCTYPE") local enddoctype=close local beginset=P("[") local endset=P("]") local doctypename=C((1-somespace-close)^0) local elementdoctype=optionalspace*P("1 and root) or root[1] else return data end end local function copy(old,tables) if old then tables=tables or {} local new={} if not tables[old] then tables[old]=new end for k,v in next,old do new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v end local mt=getmetatable(old) if mt then setmetatable(new,mt) end return new else return {} end end xml.copy=copy function xml.checkbom(root) if root.ri then local dt=root.dt for k=1,#dt do local v=dt[k] if type(v)=="table" and v.special and v.tg=="@pi@" and find(v.dt[1],"xml.*version=") then return end end insert(dt,1,{ special=true,ns="",tg="@pi@",dt={ "xml version='1.0' standalone='yes'" } } ) insert(dt,2,"\n" ) end end local function verbose_element(e,handlers) local handle=handlers.handle local serialize=handlers.serialize local ens,etg,eat,edt,ern=e.ns,e.tg,e.at,e.dt,e.rn local ats=eat and next(eat) and {} if ats then for k,v in next,eat do ats[#ats+1]=formatters['%s=%q'](k,escaped(v)) end end if ern and trace_entities and ern~=ens then ens=ern end if ens~="" then if edt and #edt>0 then if ats then handle("<",ens,":",etg," ",concat(ats," "),">") else handle("<",ens,":",etg,">") end for i=1,#edt do local e=edt[i] if type(e)=="string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",ens,":",etg," ",concat(ats," "),"/>") else handle("<",ens,":",etg,"/>") end end else if edt and #edt>0 then if ats then handle("<",etg," ",concat(ats," "),">") else handle("<",etg,">") end for i=1,#edt do local e=edt[i] if type(e)=="string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",etg," ",concat(ats," "),"/>") else handle("<",etg,"/>") end end end end local function verbose_pi(e,handlers) handlers.handle("") end local function verbose_comment(e,handlers) handlers.handle("") end local function verbose_cdata(e,handlers) handlers.handle("") end local function verbose_doctype(e,handlers) handlers.handle("") end local function verbose_root(e,handlers) handlers.serialize(e.dt,handlers) end local function verbose_text(e,handlers) handlers.handle(escaped(e)) end local function verbose_document(e,handlers) local serialize=handlers.serialize local functions=handlers.functions for i=1,#e do local ei=e[i] if type(ei)=="string" then functions["@tx@"](ei,handlers) else serialize(ei,handlers) end end end local function serialize(e,handlers,...) local initialize=handlers.initialize local finalize=handlers.finalize local functions=handlers.functions if initialize then local state=initialize(...) if not state==true then return state end end local etg=e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) else functions["@dc@"](e,handlers) end if finalize then return finalize() end end local function xserialize(e,handlers) local functions=handlers.functions local etg=e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) else functions["@dc@"](e,handlers) end end local handlers={} local function newhandlers(settings) local t=table.copy(handlers[settings and settings.parent or "verbose"] or {}) if settings then for k,v in next,settings do if type(v)=="table" then local tk=t[k] if not tk then tk={} t[k]=tk end for kk,vv in next,v do tk[kk]=vv end else t[k]=v end end if settings.name then handlers[settings.name]=t end end utilities.storage.mark(t) return t end local nofunction=function() end function xml.sethandlersfunction(handler,name,fnc) handler.functions[name]=fnc or nofunction end function xml.gethandlersfunction(handler,name) return handler.functions[name] end function xml.gethandlers(name) return handlers[name] end newhandlers { name="verbose", initialize=false, finalize=false, serialize=xserialize, handle=print, functions={ ["@dc@"]=verbose_document, ["@dt@"]=verbose_doctype, ["@rt@"]=verbose_root, ["@el@"]=verbose_element, ["@pi@"]=verbose_pi, ["@cm@"]=verbose_comment, ["@cd@"]=verbose_cdata, ["@tx@"]=verbose_text, } } local result local xmlfilehandler=newhandlers { name="file", initialize=function(name) result=io.open(name,"wb") return result end, finalize=function() result:close() return true end, handle=function(...) result:write(...) end, } function xml.save(root,name) serialize(root,xmlfilehandler,name) end local result local xmlstringhandler=newhandlers { name="string", initialize=function() result={} return result end, finalize=function() return concat(result) end, handle=function(...) result[#result+1]=concat {... } end, } local function xmltostring(root) if not root then return "" elseif type(root)=="string" then return root else return serialize(root,xmlstringhandler) or "" end end local function __tostring(root) return (root and xmltostring(root)) or "" end initialize_mt=function(root) mt={ __tostring=__tostring,__index=root } end xml.defaulthandlers=handlers xml.newhandlers=newhandlers xml.serialize=serialize xml.tostring=xmltostring local function xmlstring(e,handle) if not handle or (e.special and e.tg~="@rt@") then elseif e.tg then local edt=e.dt if edt then for i=1,#edt do xmlstring(edt[i],handle) end end else handle(e) end end xml.string=xmlstring function xml.settings(e) while e do local s=e.settings if s then return s else e=e.__p__ end end return nil end function xml.root(e) local r=e while e do e=e.__p__ if e then r=e end end return r end function xml.parent(root) return root.__p__ end function xml.body(root) return root.ri and root.dt[root.ri] or root end function xml.name(root) if not root then return "" end local ns=root.ns local tg=root.tg if ns=="" then return tg else return ns..":"..tg end end function xml.erase(dt,k) if dt then if k then dt[k]="" else for k=1,#dt do dt[1]={ "" } end end end end function xml.assign(dt,k,root) if dt and k then dt[k]=type(root)=="table" and xml.body(root) or root return dt[k] else return xml.body(root) end end function xml.tocdata(e,wrapper) local whatever=type(e)=="table" and xmltostring(e.dt) or e or "" if wrapper then whatever=formatters["<%s>%s"](wrapper,whatever,wrapper) end local t={ special=true,ns="",tg="@cd@",at={},rn="",dt={ whatever },__p__=e } setmetatable(t,getmetatable(e)) e.dt={ t } end function xml.makestandalone(root) if root.ri then local dt=root.dt for k=1,#dt do local v=dt[k] if type(v)=="table" and v.special and v.tg=="@pi@" then local txt=v.dt[1] if find(txt,"xml.*version=") then v.dt[1]=txt.." standalone='yes'" break end end end end return root end function xml.kind(e) local dt=e and e.dt if dt then local n=#dt if n==1 then local d=dt[1] if d.special then local tg=d.tg if tg=="@cd@" then return "cdata" elseif tg=="@cm" then return "comment" elseif tg=="@pi@" then return "instruction" elseif tg=="@dt@" then return "declaration" end elseif type(d)=="string" then return "text" end return "element" elseif n>0 then return "mixed" end end return "empty" end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true -- original size: 48956, stripped down to: 30516 if not modules then modules={} end modules ['lxml-lpt']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat,remove,insert=table.concat,table.remove,table.insert local type,next,tonumber,tostring,setmetatable,load,select=type,next,tonumber,tostring,setmetatable,load,select local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.lower,string.gmatch,string.gsub,string.find,string.rep local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local setmetatableindex=table.setmetatableindex local formatters=string.formatters local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end local report_lpath=logs.reporter("xml","lpath") local xml=xml local lpathcalls=0 function xml.lpathcalls () return lpathcalls end local lpathcached=0 function xml.lpathcached() return lpathcached end xml.functions=xml.functions or {} local functions=xml.functions xml.expressions=xml.expressions or {} local expressions=xml.expressions xml.finalizers=xml.finalizers or {} local finalizers=xml.finalizers xml.specialhandler=xml.specialhandler or {} local specialhandler=xml.specialhandler lpegpatterns.xml=lpegpatterns.xml or {} local xmlpatterns=lpegpatterns.xml finalizers.xml=finalizers.xml or {} finalizers.tex=finalizers.tex or {} local function fallback (t,name) local fn=finalizers[name] if fn then t[name]=fn else report_lpath("unknown sub finalizer %a",name) fn=function() end end return fn end setmetatableindex(finalizers.xml,fallback) setmetatableindex(finalizers.tex,fallback) xml.defaultprotocol="xml" local apply_axis={} apply_axis['root']=function(list) local collected={} for l=1,#list do local ll=list[l] local rt=ll while ll do ll=ll.__p__ if ll then rt=ll end end collected[l]=rt end return collected end apply_axis['self']=function(list) return list end apply_axis['child']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local dt=ll.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en end end ll.en=en end end return collected end local function collect(list,collected,c) local dt=list.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en c=collect(dk,collected,c) end end list.en=en end return c end apply_axis['descendant']=function(list) local collected,c={},0 for l=1,#list do c=collect(list[l],collected,c) end return collected end local function collect(list,collected,c) local dt=list.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en c=collect(dk,collected,c) end end list.en=en end return c end apply_axis['descendant-or-self']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] if ll.special~=true then c=c+1 collected[c]=ll end c=collect(ll,collected,c) end return collected end apply_axis['ancestor']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] while ll do ll=ll.__p__ if ll then c=c+1 collected[c]=ll end end end return collected end apply_axis['ancestor-or-self']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] c=c+1 collected[c]=ll while ll do ll=ll.__p__ if ll then c=c+1 collected[c]=ll end end end return collected end apply_axis['parent']=function(list) local collected,c={},0 for l=1,#list do local pl=list[l].__p__ if pl then c=c+1 collected[c]=pl end end return collected end apply_axis['attribute']=function(list) return {} end apply_axis['namespace']=function(list) return {} end apply_axis['following']=function(list) return {} end apply_axis['preceding']=function(list) return {} end apply_axis['following-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=ll.ni+1,#d do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['preceding-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=1,ll.ni-1 do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['reverse-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=ll.ni-1,1,-1 do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['auto-descendant-or-self']=apply_axis['descendant-or-self'] apply_axis['auto-descendant']=apply_axis['descendant'] apply_axis['auto-child']=apply_axis['child'] apply_axis['auto-self']=apply_axis['self'] apply_axis['initial-child']=apply_axis['child'] local function apply_nodes(list,directive,nodes) local maxn=#nodes if maxn==3 then local nns,ntg=nodes[2],nodes[3] if not nns and not ntg then if directive then return list else return {} end else local collected,c,m,p={},0,0,nil if not nns then for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then if directive then if ntg==ltg then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif ntg~=ltg then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end elseif not ntg then for l=1,#list do local ll=list[l] local lns=ll.rn or ll.ns if lns then if directive then if lns==nns then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif lns~=nns then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end else for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then local lns=ll.rn or ll.ns local ok=ltg==ntg and lns==nns if directive then if ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif not ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end end return collected end else local collected,c,m,p={},0,0,nil for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then local lns=ll.rn or ll.ns local ok=false for n=1,maxn,3 do local nns,ntg=nodes[n+1],nodes[n+2] ok=(not ntg or ltg==ntg) and (not nns or lns==nns) if ok then break end end if directive then if ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif not ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end return collected end end local quit_expression=false local function apply_expression(list,expression,order) local collected,c={},0 quit_expression=false for l=1,#list do local ll=list[l] if expression(list,ll,l,order) then c=c+1 collected[c]=ll end if quit_expression then break end end return collected end local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb local spaces=S(" \n\r\t\f")^0 local lp_space=S(" \n\r\t\f") local lp_any=P(1) local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==") local lp_doequal=P("=")/"==" local lp_or=P("|")/" or " local lp_and=P("&")/" and " local lp_builtin=P ( P("text")/"(ll.dt[1] or '')"+ P("content")/"ll.dt"+ P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+ P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+ P("ns")/"ll.ns" )*((spaces*P("(")*spaces*P(")"))/"") local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])") lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0" lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))" local lp_fastpos=lp_fastpos_n+lp_fastpos_p local lp_reserved=C("and")+C("or")+C("not")+C("div")+C("mod")+C("true")+C("false") local lp_lua_function=Cs((R("az","AZ","__")^1*(P(".")*R("az","AZ","__")^1)^1)*("("))/"%0" local lp_function=C(R("az","AZ","__")^1)*P("(")/function(t) if expressions[t] then return "expr."..t.."(" else return "expr.error(" end end local lparent=P("(") local rparent=P(")") local noparent=1-(lparent+rparent) local nested=P{lparent*(noparent+V(1))^0*rparent} local value=P(lparent*C((noparent+nested)^0)*rparent) local lp_child=Cc("expr.child(ll,'")*R("az","AZ","--","__")^1*Cc("')") local lp_number=S("+-")*R("09")^1 local lp_string=Cc("'")*R("az","AZ","--","__")^1*Cc("'") local lp_content=(P("'")*(1-P("'"))^0*P("'")+P('"')*(1-P('"'))^0*P('"')) local cleaner local lp_special=(C(P("name")+P("text")+P("tag")+P("count")+P("child")))*value/function(t,s) if expressions[t] then s=s and s~="" and lpegmatch(cleaner,s) if s and s~="" then return "expr."..t.."(ll,"..s..")" else return "expr."..t.."(ll)" end else return "expr.error("..t..")" end end local content=lp_builtin+lp_attribute+lp_special+lp_noequal+lp_doequal+lp_or+lp_and+lp_reserved+lp_lua_function+lp_function+lp_content+ lp_child+lp_any local converter=Cs ( lp_fastpos+(P { lparent*(V(1))^0*rparent+content } )^0 ) cleaner=Cs (( lp_reserved+lp_number+lp_string+1 )^1 ) local template_e=[[ local expr = xml.expressions return function(list,ll,l,order) return %s end ]] local template_f_y=[[ local finalizer = xml.finalizers['%s']['%s'] return function(collection) return finalizer(collection,%s) end ]] local template_f_n=[[ return xml.finalizers['%s']['%s'] ]] local register_self={ kind="axis",axis="self" } local register_parent={ kind="axis",axis="parent" } local register_descendant={ kind="axis",axis="descendant" } local register_child={ kind="axis",axis="child" } local register_descendant_or_self={ kind="axis",axis="descendant-or-self" } local register_root={ kind="axis",axis="root" } local register_ancestor={ kind="axis",axis="ancestor" } local register_ancestor_or_self={ kind="axis",axis="ancestor-or-self" } local register_attribute={ kind="axis",axis="attribute" } local register_namespace={ kind="axis",axis="namespace" } local register_following={ kind="axis",axis="following" } local register_following_sibling={ kind="axis",axis="following-sibling" } local register_preceding={ kind="axis",axis="preceding" } local register_preceding_sibling={ kind="axis",axis="preceding-sibling" } local register_reverse_sibling={ kind="axis",axis="reverse-sibling" } local register_auto_descendant_or_self={ kind="axis",axis="auto-descendant-or-self" } local register_auto_descendant={ kind="axis",axis="auto-descendant" } local register_auto_self={ kind="axis",axis="auto-self" } local register_auto_child={ kind="axis",axis="auto-child" } local register_initial_child={ kind="axis",axis="initial-child" } local register_all_nodes={ kind="nodes",nodetest=true,nodes={ true,false,false } } local skip={} local function errorrunner_e(str,cnv) if not skip[str] then report_lpath("error in expression: %s => %s",str,cnv) skip[str]=cnv or str end return false end local function errorrunner_f(str,arg) report_lpath("error in finalizer: %s(%s)",str,arg or "") return false end local function register_nodes(nodetest,nodes) return { kind="nodes",nodetest=nodetest,nodes=nodes } end local function register_expression(expression) local converted=lpegmatch(converter,expression) local runner=load(format(template_e,converted)) runner=(runner and runner()) or function() errorrunner_e(expression,converted) end return { kind="expression",expression=expression,converted=converted,evaluator=runner } end local function register_finalizer(protocol,name,arguments) local runner if arguments and arguments~="" then runner=load(format(template_f_y,protocol or xml.defaultprotocol,name,arguments)) else runner=load(format(template_f_n,protocol or xml.defaultprotocol,name)) end runner=(runner and runner()) or function() errorrunner_f(name,arguments) end return { kind="finalizer",name=name,arguments=arguments,finalizer=runner } end local expression=P { "ex", ex="["*C((V("sq")+V("dq")+(1-S("[]"))+V("ex"))^0)*"]", sq="'"*(1-S("'"))^0*"'", dq='"'*(1-S('"'))^0*'"', } local arguments=P { "ar", ar="("*Cs((V("sq")+V("dq")+V("nq")+P(1-P(")")))^0)*")", nq=((1-S("),'\""))^1)/function(s) return format("%q",s) end, sq=P("'")*(1-P("'"))^0*P("'"), dq=P('"')*(1-P('"'))^0*P('"'), } local function register_error(str) return { kind="error",error=format("unparsed: %s",str) } end local special_1=P("*")*Cc(register_auto_descendant)*Cc(register_all_nodes) local special_2=P("/")*Cc(register_auto_self) local special_3=P("")*Cc(register_auto_self) local no_nextcolon=P(-1)+#(1-P(":")) local no_nextlparent=P(-1)+#(1-P("(")) local pathparser=Ct { "patterns", patterns=spaces*V("protocol")*spaces*( (V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 ) ), protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"), step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0, axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child), special=special_1+special_2+special_3, initial=(P("/")*spaces*Cc(register_initial_child))^-1, error=(P(1)^1)/register_error, shortcuts_a=V("s_descendant_or_self")+V("s_descendant")+V("s_child")+V("s_parent")+V("s_self")+V("s_root")+V("s_ancestor"), shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0, s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self), s_descendant=P("**")*Cc(register_descendant), s_child=P("*")*no_nextcolon*Cc(register_child ), s_parent=P("..")*Cc(register_parent ), s_self=P("." )*Cc(register_self ), s_root=P("^^")*Cc(register_root ), s_ancestor=P("^")*Cc(register_ancestor ), descendant=P("descendant::")*Cc(register_descendant ), child=P("child::")*Cc(register_child ), parent=P("parent::")*Cc(register_parent ), self=P("self::")*Cc(register_self ), root=P('root::')*Cc(register_root ), ancestor=P('ancestor::')*Cc(register_ancestor ), descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ), ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ), following=P('following::')*Cc(register_following ), following_sibling=P('following-sibling::')*Cc(register_following_sibling ), preceding=P('preceding::')*Cc(register_preceding ), preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ), reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ), nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes, expressions=expression/register_expression, letters=R("az")^1, name=(1-S("/[]()|:*!"))^1, negate=P("!")*Cc(false), nodefunction=V("negate")+P("not")*Cc(false)+Cc(true), nodetest=V("negate")+Cc(true), nodename=(V("negate")+Cc(true))*spaces*((V("wildnodename")*P(":")*V("wildnodename"))+(Cc(false)*V("wildnodename"))), wildnodename=(C(V("name"))+P("*")*Cc(false))*no_nextlparent, nodeset=spaces*Ct(V("nodename")*(spaces*P("|")*spaces*V("nodename"))^0)*spaces, finalizer=(Cb("protocol")*P("/")^-1*C(V("name"))*arguments*P(-1))/register_finalizer, } xmlpatterns.pathparser=pathparser local cache={} local function nodesettostring(set,nodetest) local t={} for i=1,#set,3 do local directive,ns,tg=set[i],set[i+1],set[i+2] if not ns or ns=="" then ns="*" end if not tg or tg=="" then tg="*" end tg=(tg=="@rt@" and "[root]") or format("%s:%s",ns,tg) t[i]=(directive and tg) or format("not(%s)",tg) end if nodetest==false then return format("not(%s)",concat(t,"|")) else return concat(t,"|") end end local function tagstostring(list) if #list==0 then return "no elements" else local t={} for i=1,#list do local li=list[i] local ns,tg=li.ns,li.tg if not ns or ns=="" then ns="*" end if not tg or tg=="" then tg="*" end t[i]=(tg=="@rt@" and "[root]") or format("%s:%s",ns,tg) end return concat(t," ") end end xml.nodesettostring=nodesettostring local lpath local lshowoptions={ functions=false } local function lshow(parsed) if type(parsed)=="string" then parsed=lpath(parsed) end report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern, table.serialize(parsed,false,lshowoptions)) end xml.lshow=lshow local function add_comment(p,str) local pc=p.comment if not pc then p.comment={ str } else pc[#pc+1]=str end end lpath=function (pattern) lpathcalls=lpathcalls+1 if type(pattern)=="table" then return pattern else local parsed=cache[pattern] if parsed then lpathcached=lpathcached+1 else parsed=lpegmatch(pathparser,pattern) if parsed then parsed.pattern=pattern local np=#parsed if np==0 then parsed={ pattern=pattern,register_self,state="parsing error" } report_lpath("parsing error in pattern: %s",pattern) lshow(parsed) else local pi=parsed[1] if pi.axis=="auto-child" then if false then add_comment(parsed,"auto-child replaced by auto-descendant-or-self") parsed[1]=register_auto_descendant_or_self else add_comment(parsed,"auto-child replaced by auto-descendant") parsed[1]=register_auto_descendant end elseif pi.axis=="initial-child" and np>1 and parsed[2].axis then add_comment(parsed,"initial-child removed") remove(parsed,1) end local np=#parsed if np>1 then local pnp=parsed[np] if pnp.kind=="nodes" and pnp.nodetest==true then local nodes=pnp.nodes if nodes[1]==true and nodes[2]==false and nodes[3]==false then add_comment(parsed,"redundant final wildcard filter removed") remove(parsed,np) end end end end else parsed={ pattern=pattern } end cache[pattern]=parsed if trace_lparse and not trace_lprofile then lshow(parsed) end end return parsed end end xml.lpath=lpath local profiled={} xml.profiled=profiled local function profiled_apply(list,parsed,nofparsed,order) local p=profiled[parsed.pattern] if p then p.tested=p.tested+1 else p={ tested=1,matched=0,finalized=0 } profiled[parsed.pattern]=p end local collected=list for i=1,nofparsed do local pi=parsed[i] local kind=pi.kind if kind=="axis" then collected=apply_axis[pi.axis](collected) elseif kind=="nodes" then collected=apply_nodes(collected,pi.nodetest,pi.nodes) elseif kind=="expression" then collected=apply_expression(collected,pi.evaluator,order) elseif kind=="finalizer" then collected=pi.finalizer(collected) p.matched=p.matched+1 p.finalized=p.finalized+1 return collected end if not collected or #collected==0 then local pn=i %s",(collected and #collected) or 0,pi.expression,pi.converted) elseif kind=="finalizer" then collected=pi.finalizer(collected) report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "") return collected end if not collected or #collected==0 then local pn=i1 then c=c-1 local e=collected[c] local r=e.__p__ return r,r.dt,e.ni end end else local n,c=#collected,0 return function() if c1 then c=c-1 return collected[c] end end else local n,c=#collected,0 return function() if c"))^0 local special=P("<")/"<"+P(">")/">"+P("&")/"&" local escaped=Cs(normal*(special*normal)^0) local normal=(1-S"&")^0 local special=P("<")/"<"+P(">")/">"+P("&")/"&" local unescaped=Cs(normal*(special*normal)^0) local cleansed=Cs(((P("<")*(1-P(">"))^0*P(">"))/""+1)^0) xmlpatterns.escaped=escaped xmlpatterns.unescaped=unescaped xmlpatterns.cleansed=cleansed function xml.escaped (str) return lpegmatch(escaped,str) end function xml.unescaped(str) return lpegmatch(unescaped,str) end function xml.cleansed (str) return lpegmatch(cleansed,str) end function xml.fillin(root,pattern,str,check) local e=xml.first(root,pattern) if e then local n=#e.dt if not check or n==0 or (n==1 and e.dt[1]=="") then e.dt={ str } end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true -- original size: 23804, stripped down to: 16817 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_manipulations=false trackers.register("lxml.manipulations",function(v) trace_manipulations=v end) local report_xml=logs.reporter("xml") local xml=xml local xmlconvert,xmlcopy,xmlname=xml.convert,xml.copy,xml.name local xmlinheritedconvert=xml.inheritedconvert local xmlapplylpath=xml.applylpath local xmlfilter=xml.filter local type,setmetatable,getmetatable=type,setmetatable,getmetatable local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip local utfbyte=utf.byte local function report(what,pattern,c,e) report_xml("%s element %a, root %a, position %a, index %a, pattern %a",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern) end local function withelements(e,handle,depth) if e and handle then local edt=e.dt if edt then depth=depth or 0 for i=1,#edt do local e=edt[i] if type(e)=="table" then handle(e,depth) withelements(e,handle,depth+1) end end end end end xml.withelements=withelements function xml.withelement(e,n,handle) if e and n~=0 and handle then local edt=e.dt if edt then if n>0 then for i=1,#edt do local ei=edt[i] if type(ei)=="table" then if n==1 then handle(ei) return else n=n-1 end end end elseif n<0 then for i=#edt,1,-1 do local ei=edt[i] if type(ei)=="table" then if n==-1 then handle(ei) return else n=n+1 end end end end end end end function xml.each(root,pattern,handle,reverse) local collected=xmlapplylpath(root,pattern) if collected then if reverse then for c=#collected,1,-1 do handle(collected[c]) end else for c=1,#collected do handle(collected[c]) end end return collected end end function xml.processattributes(root,pattern,handle) local collected=xmlapplylpath(root,pattern) if collected and handle then for c=1,#collected do handle(collected[c].at) end end return collected end function xml.collect(root,pattern) return xmlapplylpath(root,pattern) end function xml.collecttexts(root,pattern,flatten) local collected=xmlapplylpath(root,pattern) if collected and flatten then local xmltostring=xml.tostring for c=1,#collected do collected[c]=xmltostring(collected[c].dt) end end return collected or {} end function xml.collect_tags(root,pattern,nonamespace) local collected=xmlapplylpath(root,pattern) if collected then local t,n={},0 for c=1,#collected do local e=collected[c] local ns,tg=e.ns,e.tg n=n+1 if nonamespace then t[n]=tg elseif ns=="" then t[n]=tg else t[n]=ns..":"..tg end end return t end end local no_root={ no_root=true } local function redo_ni(d) for k=1,#d do local dk=d[k] if type(dk)=="table" then dk.ni=k end end end local function xmltoelement(whatever,root) if not whatever then return nil end local element if type(whatever)=="string" then element=xmlinheritedconvert(whatever,root) else element=whatever end if element.error then return whatever end if element then end return element end xml.toelement=xmltoelement local function copiedelement(element,newparent) if type(element)=="string" then return element else element=xmlcopy(element).dt if newparent and type(element)=="table" then element.__p__=newparent end return element end end function xml.delete(root,pattern) if not pattern or pattern=="" then local p=root.__p__ if p then if trace_manipulations then report('deleting',"--",c,root) end local d=p.dt remove(d,root.ni) redo_ni(d) end else local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] local p=e.__p__ if p then if trace_manipulations then report('deleting',pattern,c,e) end local d=p.dt remove(d,e.ni) redo_ni(d) end end end end end function xml.replace(root,pattern,whatever) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] local p=e.__p__ if p then if trace_manipulations then report('replacing',pattern,c,e) end local d=p.dt d[e.ni]=copiedelement(element,p) redo_ni(d) end end end end local function wrap(e,wrapper) local t={ rn=e.rn, tg=e.tg, ns=e.ns, at=e.at, dt=e.dt, __p__=e, } setmetatable(t,getmetatable(e)) e.rn=wrapper.rn or e.rn or "" e.tg=wrapper.tg or e.tg or "" e.ns=wrapper.ns or e.ns or "" e.at=fastcopy(wrapper.at) e.dt={ t } end function xml.wrap(root,pattern,whatever) if whatever then local wrapper=xmltoelement(whatever,root) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] if trace_manipulations then report('wrapping',pattern,c,e) end wrap(e,wrapper) end end else wrap(root,xmltoelement(pattern)) end end local function inject_element(root,pattern,whatever,prepend) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) local function inject_e(e) local r=e.__p__ local d,k,rri=r.dt,e.ni,r.ri local edt=(rri and d[rri].dt) or (d and d[k] and d[k].dt) if edt then local be,af local cp=copiedelement(element,e) if prepend then be,af=cp,edt else be,af=edt,cp end local bn=#be for i=1,#af do bn=bn+1 be[bn]=af[i] end if rri then r.dt[rri].dt=be else d[k].dt=be end redo_ni(d) end end if not collected then elseif collected.tg then inject_e(collected) else for c=1,#collected do inject_e(collected[c]) end end end local function insert_element(root,pattern,whatever,before) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) local function insert_e(e) local r=e.__p__ local d,k=r.dt,e.ni if not before then k=k+1 end insert(d,k,copiedelement(element,r)) redo_ni(d) end if not collected then elseif collected.tg then insert_e(collected) else for c=1,#collected do insert_e(collected[c]) end end end xml.insert_element=insert_element xml.insertafter=insert_element xml.insertbefore=function(r,p,e) insert_element(r,p,e,true) end xml.injectafter=inject_element xml.injectbefore=function(r,p,e) inject_element(r,p,e,true) end local function include(xmldata,pattern,attribute,recursive,loaddata) pattern=pattern or 'include' loaddata=loaddata or io.loaddata local collected=xmlapplylpath(xmldata,pattern) if collected then for c=1,#collected do local ek=collected[c] local name=nil local ekdt=ek.dt local ekat=ek.at local epdt=ek.__p__.dt if not attribute or attribute=="" then name=(type(ekdt)=="table" and ekdt[1]) or ekdt end if not name then for a in gmatch(attribute or "href","([^|]+)") do name=ekat[a] if name then break end end end local data=(name and name~="" and loaddata(name)) or "" if data=="" then epdt[ek.ni]="" elseif ekat["parse"]=="text" then epdt[ek.ni]=xml.escaped(data) else local xi=xmlinheritedconvert(data,xmldata) if not xi then epdt[ek.ni]="" else if recursive then include(xi,pattern,attribute,recursive,loaddata) end epdt[ek.ni]=xml.body(xi) end end end end end xml.include=include local function stripelement(e,nolines,anywhere) local edt=e.dt if edt then if anywhere then local t,n={},0 for e=1,#edt do local str=edt[e] if type(str)~="string" then n=n+1 t[n]=str elseif str~="" then if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"^%s*(.-)%s*$","%1") if str~="" then n=n+1 t[n]=str end end end e.dt=t else if #edt>0 then local str=edt[1] if type(str)~="string" then elseif str=="" then remove(edt,1) else if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"^%s+","") if str=="" then remove(edt,1) else edt[1]=str end end end local nedt=#edt if nedt>0 then local str=edt[nedt] if type(str)~="string" then elseif str=="" then remove(edt) else if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"%s+$","") if str=="" then remove(edt) else edt[nedt]=str end end end end end return e end xml.stripelement=stripelement function xml.strip(root,pattern,nolines,anywhere) local collected=xmlapplylpath(root,pattern) if collected then for i=1,#collected do stripelement(collected[i],nolines,anywhere) end end end local function renamespace(root,oldspace,newspace) local ndt=#root.dt for i=1,ndt or 0 do local e=root[i] if type(e)=="table" then if e.ns==oldspace then e.ns=newspace if e.rn then e.rn=newspace end end local edt=e.dt if edt then renamespace(edt,oldspace,newspace) end end end end xml.renamespace=renamespace function xml.remaptag(root,pattern,newtg) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].tg=newtg end end end function xml.remapnamespace(root,pattern,newns) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].ns=newns end end end function xml.checknamespace(root,pattern,newns) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] if (not e.rn or e.rn=="") and e.ns=="" then e.rn=newns end end end end function xml.remapname(root,pattern,newtg,newns,newrn) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] e.tg,e.ns,e.rn=newtg,newns,newrn end end end function xml.cdatatotext(e) local dt=e.dt if #dt==1 then local first=dt[1] if first.tg=="@cd@" then e.dt=first.dt end else end end function xml.texttocdata(e) local dt=e.dt local s=xml.tostring(dt) e.tg="@cd@" e.special=true e.ns="" e.rn="" e.dt={ s } e.at=nil end function xml.elementtocdata(e) local dt=e.dt local s=xml.tostring(e) e.tg="@cd@" e.special=true e.ns="" e.rn="" e.dt={ s } e.at=nil end xml.builtinentities=table.tohash { "amp","quot","apos","lt","gt" } local entities=characters and characters.entities or nil local builtinentities=xml.builtinentities function xml.addentitiesdoctype(root,option) if not entities then require("char-ent") entities=characters.entities end if entities and root and root.tg=="@rt@" and root.statistics then local list={} local hexify=option=="hexadecimal" for k,v in table.sortedhash(root.statistics.entities.names) do if not builtinentities[k] then local e=entities[k] if not e then e=format("[%s]",k) elseif hexify then e=format("&#%05X;",utfbyte(k)) end list[#list+1]=format(" ",k,e) end end local dt=root.dt local n=dt[1].tg=="@pi@" and 2 or 1 if #list>0 then insert(dt,n,{ "\n" }) insert(dt,n,{ tg="@dt@", dt={ format("Something [\n%s\n] ",concat(list)) }, ns="", special=true, }) insert(dt,n,{ "\n\n" }) else end end end xml.all=xml.each xml.insert=xml.insertafter xml.inject=xml.injectafter xml.after=xml.insertafter xml.before=xml.insertbefore xml.process=xml.each xml.obsolete=xml.obsolete or {} local obsolete=xml.obsolete xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect xml.delete_element=xml.delete obsolete.delete_element=xml.delete xml.replace_element=xml.replace obsolete.replace_element=xml.replacet xml.each_element=xml.each obsolete.each_element=xml.each xml.process_elements=xml.process obsolete.process_elements=xml.process xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter xml.insert_element_before=xml.insertbefore obsolete.insert_element_before=xml.insertbefore xml.inject_element_after=xml.injectafter obsolete.inject_element_after=xml.injectafter xml.inject_element_before=xml.injectbefore obsolete.inject_element_before=xml.injectbefore xml.process_attributes=xml.processattributes obsolete.process_attributes=xml.processattributes xml.collect_texts=xml.collecttexts obsolete.collect_texts=xml.collecttexts xml.inject_element=xml.inject obsolete.inject_element=xml.inject xml.remap_tag=xml.remaptag obsolete.remap_tag=xml.remaptag xml.remap_name=xml.remapname obsolete.remap_name=xml.remapname xml.remap_namespace=xml.remapnamespace obsolete.remap_namespace=xml.remapnamespace function xml.cdata(e) if e then local dt=e.dt if dt and #dt==1 then local first=dt[1] return first.tg=="@cd@" and first.dt[1] or "" end end return "" end function xml.finalizers.xml.cdata(collected) if collected then local e=collected[1] if e then local dt=e.dt if dt and #dt==1 then local first=dt[1] return first.tg=="@cd@" and first.dt[1] or "" end end end return "" end function xml.insertcomment(e,str,n) table.insert(e.dt,n or 1,{ tg="@cm@", ns="", special=true, at={}, dt={ str }, }) end function xml.setcdata(e,str) e.dt={ { tg="@cd@", ns="", special=true, at={}, dt={ str }, } } end function xml.separate(x,pattern) local collected=xmlapplylpath(x,pattern) if collected then for c=1,#collected do local e=collected[c] local d=e.dt if d==x then report_xml("warning: xml.separate changes root") x=d end local t,n={ "\n" },1 local i,nd=1,#d while i<=nd do while i<=nd do local di=d[i] if type(di)=="string" then if di=="\n" or find(di,"^%s+$") then i=i+1 else d[i]=strip(di) break end else break end end if i>nd then break end t[n+1]="\n" t[n+2]=d[i] t[n+3]="\n" n=n+3 i=i+1 end t[n+1]="\n" setmetatable(t,getmetatable(d)) e.dt=t end end return x end local helpers=xml.helpers or {} xml.helpers=helpers local function normal(e,action) local edt=e.dt if edt then for i=1,#edt do local str=edt[i] if type(str)=="string" and str~="" then edt[i]=action(str) end end end end local function recurse(e,action) local edt=e.dt if edt then for i=1,#edt do local str=edt[i] if type(str)~="string" then recurse(str,action,recursive) elseif str~="" then edt[i]=action(str) end end end end function helpers.recursetext(collected,action,recursive) if recursive then for i=1,#collected do recurse(collected[i],action) end else for i=1,#collected do normal(collected[i],action) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true -- original size: 10274, stripped down to: 7538 if not modules then modules={} end modules ['lxml-xml']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat=table.concat local find,lower,upper=string.find,string.lower,string.upper local xml=xml local finalizers=xml.finalizers.xml local xmlfilter=xml.filter local xmltostring=xml.tostring local xmlserialize=xml.serialize local xmlcollected=xml.collected local xmlnewhandlers=xml.newhandlers local function first(collected) return collected and collected[1] end local function last(collected) return collected and collected[#collected] end local function all(collected) return collected end local reverse=table.reversed local function attribute(collected,name) if collected and #collected>0 then local at=collected[1].at return at and at[name] end end local function att(id,name) local at=id.at return at and at[name] end local function count(collected) return collected and #collected or 0 end local function position(collected,n) if not collected then return 0 end local nc=#collected if nc==0 then return 0 end n=tonumber(n) or 0 if n<0 then return collected[nc+n+1] elseif n>0 then return collected[n] else return collected[1].mi or 0 end end local function match(collected) return collected and #collected>0 and collected[1].mi or 0 end local function index(collected) return collected and #collected>0 and collected[1].ni or 0 end local function attributes(collected,arguments) if collected and #collected>0 then local at=collected[1].at if arguments then return at[arguments] elseif next(at) then return at end end end local function chainattribute(collected,arguments) if collected and #collected>0 then local e=collected[1] while e do local at=e.at if at then local a=at[arguments] if a then return a end else break end e=e.__p__ end end return "" end local function raw(collected) if collected and #collected>0 then local e=collected[1] or collected return e and xmltostring(e) or "" else return "" end end local xmltexthandler=xmlnewhandlers { name="string", initialize=function() result={} return result end, finalize=function() return concat(result) end, handle=function(...) result[#result+1]=concat {... } end, escape=false, } local function xmltotext(root) local dt=root.dt if not dt then return "" end local nt=#dt if nt==0 then return "" elseif nt==1 and type(dt[1])=="string" then return dt[1] else return xmlserialize(root,xmltexthandler) or "" end end local function text(collected) if collected then local e=collected[1] or collected return e and xmltotext(e) or "" else return "" end end local function texts(collected) if not collected then return {} end local nc=#collected if nc==0 then return {} end local t,n={},0 for c=1,nc do local e=collected[c] if e and e.dt then n=n+1 t[n]=e.dt end end return t end local function tag(collected,n) if not collected then return end local nc=#collected if nc==0 then return end local c if n==0 or not n then c=collected[1] elseif n>1 then c=collected[n] else c=collected[nc-n+1] end return c and c.tg end local function name(collected,n) if not collected then return end local nc=#collected if nc==0 then return end local c if n==0 or not n then c=collected[1] elseif n>1 then c=collected[n] else c=collected[nc-n+1] end if not c then elseif c.ns=="" then return c.tg else return c.ns..":"..c.tg end end local function tags(collected,nonamespace) if not collected then return end local nc=#collected if nc==0 then return end local t,n={},0 for c=1,nc do local e=collected[c] local ns,tg=e.ns,e.tg n=n+1 if nonamespace or ns=="" then t[n]=tg else t[n]=ns..":"..tg end end return t end local function empty(collected,spacesonly) if not collected then return true end local nc=#collected if nc==0 then return true end for c=1,nc do local e=collected[c] if e then local edt=e.dt if edt then local n=#edt if n==1 then local edk=edt[1] local typ=type(edk) if typ=="table" then return false elseif edk~="" then return false elseif spacesonly and not find(edk,"%S") then return false end elseif n>1 then return false end end end end return true end finalizers.first=first finalizers.last=last finalizers.all=all finalizers.reverse=reverse finalizers.elements=all finalizers.default=all finalizers.attribute=attribute finalizers.att=att finalizers.count=count finalizers.position=position finalizers.match=match finalizers.index=index finalizers.attributes=attributes finalizers.chainattribute=chainattribute finalizers.text=text finalizers.texts=texts finalizers.tag=tag finalizers.name=name finalizers.tags=tags finalizers.empty=empty function xml.first(id,pattern) return first(xmlfilter(id,pattern)) end function xml.last(id,pattern) return last(xmlfilter(id,pattern)) end function xml.count(id,pattern) return count(xmlfilter(id,pattern)) end function xml.attribute(id,pattern,a,default) return attribute(xmlfilter(id,pattern),a,default) end function xml.raw(id,pattern) if pattern then return raw(xmlfilter(id,pattern)) else return raw(id) end end function xml.text(id,pattern) if pattern then local collected=xmlfilter(id,pattern) return collected and #collected>0 and xmltotext(collected[1]) or "" elseif id then return xmltotext(id) or "" else return "" end end xml.content=text function xml.position(id,pattern,n) return position(xmlfilter(id,pattern),n) end function xml.match(id,pattern) return match(xmlfilter(id,pattern)) end function xml.empty(id,pattern,spacesonly) return empty(xmlfilter(id,pattern),spacesonly) end xml.all=xml.filter xml.index=xml.position xml.found=xml.filter local function totable(x) local t={} for e in xmlcollected(x[1] or x,"/*") do t[e.tg]=xmltostring(e.dt) or "" end return next(t) and t or nil end xml.table=totable finalizers.table=totable local function textonly(e,t) if e then local edt=e.dt if edt then for i=1,#edt do local e=edt[i] if type(e)=="table" then textonly(e,t) else t[#t+1]=e end end end end return t end function xml.textonly(e) return concat(textonly(e,{})) end function finalizers.lowerall(collected) for c=1,#collected do local e=collected[c] if not e.special then e.tg=lower(e.tg) local eat=e.at if eat then local t={} for k,v in next,eat do t[lower(k)]=v end e.at=t end end end end function finalizers.upperall(collected) for c=1,#collected do local e=collected[c] if not e.special then e.tg=upper(e.tg) local eat=e.at if eat then local t={} for k,v in next,eat do t[upper(k)]=v end e.at=t end end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-xml"] = package.loaded["trac-xml"] or true -- original size: 6351, stripped down to: 4919 if not modules then modules={} end modules ['trac-xml']={ version=1.001, comment="companion to trac-log.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local formatters=string.formatters local reporters=logs.reporters local xmlserialize=xml.serialize local xmlcollected=xml.collected local xmltext=xml.text local xmlfirst=xml.first local function showhelp(specification,...) local root=xml.convert(specification.helpinfo or "") if not root then return end local xs=xml.gethandlers("string") xml.sethandlersfunction(xs,"short",function(e,handler) xmlserialize(e.dt,handler) end) xml.sethandlersfunction(xs,"ref",function(e,handler) handler.handle("--"..e.at.name) end) local wantedcategories=select("#",...)==0 and true or table.tohash {... } local nofcategories=xml.count(root,"/application/flags/category") local report=specification.report for category in xmlcollected(root,"/application/flags/category") do local categoryname=category.at.name or "" if wantedcategories==true or wantedcategories[categoryname] then if nofcategories>1 then report("%s options:",categoryname) report() end for subcategory in xmlcollected(category,"/subcategory") do for flag in xmlcollected(subcategory,"/flag") do local name=flag.at.name local value=flag.at.value local short=xmltext(xmlfirst(flag,"/short")) if value then report("--%-20s %s",formatters["%s=%s"](name,value),short) else report("--%-20s %s",name,short) end end report() end end end for category in xmlcollected(root,"/application/examples/category") do local title=xmltext(xmlfirst(category,"/title")) if title and title~="" then report() report(title) report() end for subcategory in xmlcollected(category,"/subcategory") do for example in xmlcollected(subcategory,"/example") do local command=xmltext(xmlfirst(example,"/command")) local comment=xmltext(xmlfirst(example,"/comment")) report(command) end report() end end for comment in xmlcollected(root,"/application/comments/comment") do local comment=xmltext(comment) report() report(comment) report() end end local reporthelp=reporters.help local exporthelp=reporters.export local function xmlfound(t) local helpinfo=t.helpinfo if type(helpinfo)=="table" then return false end if type(helpinfo)~="string" then helpinfo="Warning: no helpinfo found." t.helpinfo=helpinfo return false end if string.find(helpinfo,".xml$") then local ownscript=environment.ownscript local helpdata=false if ownscript then local helpfile=file.join(file.pathpart(ownscript),helpinfo) helpdata=io.loaddata(helpfile) if helpdata=="" then helpdata=false end end if not helpdata then local helpfile=resolvers.findfile(helpinfo,"tex") helpdata=helpfile and io.loaddata(helpfile) end if helpdata and helpdata~="" then helpinfo=helpdata else helpinfo=formatters["Warning: help file %a is not found."](helpinfo) end end t.helpinfo=helpinfo return string.find(t.helpinfo,"^<%?xml") and true or false end function reporters.help(t,...) if xmlfound(t) then showhelp(t,...) else reporthelp(t,...) end end function reporters.export(t,methods,filename) if not xmlfound(t) then return exporthelp(t) end if not methods or methods=="" then methods=environment.arguments["exporthelp"] end if not filename or filename=="" then filename=environment.files[1] end dofile(resolvers.findfile("trac-exp.lua","tex")) local exporters=logs.exporters if not exporters or not methods then return exporthelp(t) end if methods=="all" then methods=table.keys(exporters) elseif type(methods)=="string" then methods=utilities.parsers.settings_to_array(methods) else return exporthelp(t) end if type(filename)~="string" or filename=="" then filename=false elseif file.pathpart(filename)=="" then t.report("export file %a will not be saved on the current path (safeguard)",filename) return end for i=1,#methods do local method=methods[i] local exporter=exporters[method] if exporter then local result=exporter(t,method) if result and result~="" then if filename then local fullname=file.replacesuffix(filename,method) t.report("saving export in %a",fullname) io.savedata(fullname,result) else reporters.lines(t,result) end else t.report("no output from exporter %a",method) end else t.report("unknown exporter %a",method) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-ini"] = package.loaded["data-ini"] or true -- original size: 7898, stripped down to: 5501 if not modules then modules={} end modules ['data-ini']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find,gmatch,char=string.gsub,string.find,string.gmatch,string.char local next,type=next,type local filedirname,filebasename,filejoin=file.dirname,file.basename,file.join local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_detail=false trackers.register("resolvers.details",function(v) trace_detail=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_initialization=logs.reporter("resolvers","initialization") local ostype,osname,ossetenv,osgetenv=os.type,os.name,os.setenv,os.getenv resolvers=resolvers or {} local resolvers=resolvers texconfig.kpse_init=false texconfig.shell_escape='t' if not (environment and environment.default_texmfcnf) and kpse and kpse.default_texmfcnf then local default_texmfcnf=kpse.default_texmfcnf() default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTOLOC","selfautoloc:") default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTODIR","selfautodir:") default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTOPARENT","selfautoparent:") default_texmfcnf=gsub(default_texmfcnf,"$HOME","home:") environment.default_texmfcnf=default_texmfcnf end kpse={ original=kpse } setmetatable(kpse,{ __index=function(kp,name) report_initialization("fatal error: kpse library is accessed (key: %s)",name) os.exit() end } ) do local osfontdir=osgetenv("OSFONTDIR") if osfontdir and osfontdir~="" then elseif osname=="windows" then ossetenv("OSFONTDIR","c:/windows/fonts//") elseif osname=="macosx" then ossetenv("OSFONTDIR","$HOME/Library/Fonts//;/Library/Fonts//;/System/Library/Fonts//") end end do local homedir=osgetenv(ostype=="windows" and 'USERPROFILE' or 'HOME') or '' if not homedir or homedir=="" then homedir=char(127) end homedir=file.collapsepath(homedir) ossetenv("HOME",homedir) ossetenv("USERPROFILE",homedir) environment.homedir=homedir end do local args=environment.originalarguments or arg if not environment.ownmain then environment.ownmain=status and string.match(string.lower(status.banner),"this is ([%a]+)") or "luatex" end local ownbin=environment.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex" local ownpath=environment.ownpath or os.selfdir ownbin=file.collapsepath(ownbin) ownpath=file.collapsepath(ownpath) if not ownpath or ownpath=="" or ownpath=="unset" then ownpath=args[-1] or arg[-1] ownpath=ownpath and filedirname(gsub(ownpath,"\\","/")) if not ownpath or ownpath=="" then ownpath=args[-0] or arg[-0] ownpath=ownpath and filedirname(gsub(ownpath,"\\","/")) end local binary=ownbin if not ownpath or ownpath=="" then ownpath=ownpath and filedirname(binary) end if not ownpath or ownpath=="" then if os.binsuffix~="" then binary=file.replacesuffix(binary,os.binsuffix) end local path=osgetenv("PATH") if path then for p in gmatch(path,"[^"..io.pathseparator.."]+") do local b=filejoin(p,binary) if lfs.isfile(b) then local olddir=lfs.currentdir() if lfs.chdir(p) then local pp=lfs.currentdir() if trace_locating and p~=pp then report_initialization("following symlink %a to %a",p,pp) end ownpath=pp lfs.chdir(olddir) else if trace_locating then report_initialization("unable to check path %a",p) end ownpath=p end break end end end end if not ownpath or ownpath=="" then ownpath="." report_initialization("forcing fallback to ownpath %a",ownpath) elseif trace_locating then report_initialization("using ownpath %a",ownpath) end end environment.ownbin=ownbin environment.ownpath=ownpath end resolvers.ownpath=environment.ownpath function resolvers.getownpath() return environment.ownpath end do local ownpath=environment.ownpath or dir.current() if ownpath then ossetenv('SELFAUTOLOC',file.collapsepath(ownpath)) ossetenv('SELFAUTODIR',file.collapsepath(ownpath.."/..")) ossetenv('SELFAUTOPARENT',file.collapsepath(ownpath.."/../..")) else report_initialization("error: unable to locate ownpath") os.exit() end end local texos=environment.texos or osgetenv("TEXOS") local texmfos=environment.texmfos or osgetenv('SELFAUTODIR') if not texos or texos=="" then texos=file.basename(texmfos) end ossetenv('TEXMFOS',texmfos) ossetenv('TEXOS',texos) ossetenv('SELFAUTOSYSTEM',os.platform) environment.texos=texos environment.texmfos=texmfos local texroot=environment.texroot or osgetenv("TEXROOT") if not texroot or texroot=="" then texroot=osgetenv('SELFAUTOPARENT') ossetenv('TEXROOT',texroot) end environment.texroot=file.collapsepath(texroot) if profiler then directives.register("system.profile",function() profiler.start("luatex-profile.log") end) end if not resolvers.resolve then function resolvers.resolve (s) return s end function resolvers.unresolve(s) return s end function resolvers.repath (s) return s end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-exp"] = package.loaded["data-exp"] or true -- original size: 14654, stripped down to: 9517 if not modules then modules={} end modules ['data-exp']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub local concat,sort=table.concat,table.sort local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local Ct,Cs,Cc,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.P,lpeg.C,lpeg.S local type,next=type,next local ostype=os.type local collapsepath=file.collapsepath local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_expansions=logs.reporter("resolvers","expansions") local resolvers=resolvers local function f_first(a,b) local t,n={},0 for s in gmatch(b,"[^,]+") do n=n+1;t[n]=a..s end return concat(t,",") end local function f_second(a,b) local t,n={},0 for s in gmatch(a,"[^,]+") do n=n+1;t[n]=s..b end return concat(t,",") end local function f_both(a,b) local t,n={},0 for sb in gmatch(b,"[^,]+") do for sa in gmatch(a,"[^,]+") do n=n+1;t[n]=sa..sb end end return concat(t,",") end local left=P("{") local right=P("}") local var=P((1-S("{}" ))^0) local set=P((1-S("{},"))^0) local other=P(1) local l_first=Cs((Cc("{")*(C(set)*left*C(var)*right/f_first)*Cc("}")+other )^0 ) local l_second=Cs((Cc("{")*(left*C(var)*right*C(set)/f_second)*Cc("}")+other )^0 ) local l_both=Cs((Cc("{")*(left*C(var)*right*left*C(var)*right/f_both)*Cc("}")+other )^0 ) local l_rest=Cs((left*var*(left/"")*var*(right/"")*var*right+other )^0 ) local stripper_1=lpeg.stripper ("{}@") local replacer_1=lpeg.replacer { { ",}",",@}" },{ "{,","{@," },} local function splitpathexpr(str,newlist,validate) if trace_expansions then report_expansions("expanding variable %a",str) end local t,ok,done=newlist or {},false,false local n=#t str=lpegmatch(replacer_1,str) repeat local old=str repeat local old=str str=lpegmatch(l_first,str) until old==str repeat local old=str str=lpegmatch(l_second,str) until old==str repeat local old=str str=lpegmatch(l_both,str) until old==str repeat local old=str str=lpegmatch(l_rest,str) until old==str until old==str str=lpegmatch(stripper_1,str) if validate then for s in gmatch(str,"[^,]+") do s=validate(s) if s then n=n+1 t[n]=s end end else for s in gmatch(str,"[^,]+") do n=n+1 t[n]=s end end if trace_expansions then for k=1,#t do report_expansions("% 4i: %s",k,t[k]) end end return t end local function validate(s) s=collapsepath(s) return s~="" and not find(s,"^!*unset/*$") and s end resolvers.validatedpath=validate function resolvers.expandedpathfromlist(pathlist) local newlist={} for k=1,#pathlist do splitpathexpr(pathlist[k],newlist,validate) end return newlist end local cleanup=lpeg.replacer { { "!","" }, { "\\","/" }, } function resolvers.cleanpath(str) local doslashes=(P("\\")/"/"+1)^0 local donegation=(P("!")/"" )^0 local homedir=lpegmatch(Cs(donegation*doslashes),environment.homedir or "") if homedir=="~" or homedir=="" or not lfs.isdir(homedir) then if trace_expansions then report_expansions("no home dir set, ignoring dependent paths") end function resolvers.cleanpath(str) if not str or find(str,"~") then return "" else return lpegmatch(cleanup,str) end end else local dohome=((P("~")+P("$HOME"))/homedir)^0 local cleanup=Cs(donegation*dohome*doslashes) function resolvers.cleanpath(str) return str and lpegmatch(cleanup,str) or "" end end return resolvers.cleanpath(str) end local expandhome=P("~")/"$HOME" local dodouble=P('"')/""*(expandhome+(1-P('"')))^0*P('"')/"" local dosingle=P("'")/""*(expandhome+(1-P("'")))^0*P("'")/"" local dostring=(expandhome+1 )^0 local stripper=Cs( lpegpatterns.unspacer*(dosingle+dodouble+dostring)*lpegpatterns.unspacer ) function resolvers.checkedvariable(str) return type(str)=="string" and lpegmatch(stripper,str) or str end local cache={} local splitter=lpeg.tsplitat(";") local backslashswapper=lpeg.replacer("\\","/") local function splitconfigurationpath(str) if str then local found=cache[str] if not found then if str=="" then found={} else local split=lpegmatch(splitter,lpegmatch(backslashswapper,str)) found={} local noffound=0 for i=1,#split do local s=split[i] if not find(s,"^{*unset}*") then noffound=noffound+1 found[noffound]=s end end if trace_expansions then report_expansions("splitting path specification %a",str) for k=1,noffound do report_expansions("% 4i: %s",k,found[k]) end end cache[str]=found end end return found end end resolvers.splitconfigurationpath=splitconfigurationpath function resolvers.splitpath(str) if type(str)=='table' then return str else return splitconfigurationpath(str) end end function resolvers.joinpath(str) if type(str)=='table' then return file.joinpath(str) else return str end end local attributes,directory=lfs.attributes,lfs.dir local weird=P(".")^1+lpeg.anywhere(S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t")) local timer={} local scanned={} local nofscans=0 local scancache={} local function scan(files,spec,path,n,m,r) local full=(path=="" and spec) or (spec..path..'/') local dirs={} local nofdirs=0 for name in directory(full) do if not lpegmatch(weird,name) then local mode=attributes(full..name,'mode') if mode=='file' then n=n+1 local f=files[name] if f then if type(f)=='string' then files[name]={ f,path } else f[#f+1]=path end else files[name]=path local lower=lower(name) if name~=lower then files["remap:"..lower]=name r=r+1 end end elseif mode=='directory' then m=m+1 nofdirs=nofdirs+1 if path~="" then dirs[nofdirs]=path..'/'..name else dirs[nofdirs]=name end end end end if nofdirs>0 then sort(dirs) for i=1,nofdirs do files,n,m,r=scan(files,spec,dirs[i],n,m,r) end end scancache[sub(full,1,-2)]=files return files,n,m,r end local fullcache={} function resolvers.scanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath=resolvers.resolve(path) if usecache then local files=fullcache[realpath] if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files,n,m,r=scan({},realpath..'/',"",0,0,0) files.__path__=path files.__files__=n files.__directories__=m files.__remappings__=r if trace_locating then report_expansions("%s files found on %s directories with %s uppercase remappings",n,m,r) end if usecache then scanned[#scanned+1]=realpath fullcache[realpath]=files end nofscans=nofscans+1 statistics.stoptiming(timer) return files end local function simplescan(files,spec,path) local full=(path=="" and spec) or (spec..path..'/') local dirs={} local nofdirs=0 for name in directory(full) do if not lpegmatch(weird,name) then local mode=attributes(full..name,'mode') if mode=='file' then if not files[name] then files[name]=path end elseif mode=='directory' then nofdirs=nofdirs+1 if path~="" then dirs[nofdirs]=path..'/'..name else dirs[nofdirs]=name end end end end if nofdirs>0 then sort(dirs) for i=1,nofdirs do files=simplescan(files,spec,dirs[i]) end end return files end local simplecache={} local nofsharedscans=0 function resolvers.simplescanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath=resolvers.resolve(path) if usecache then local files=simplecache[realpath] if not files then files=scancache[realpath] if files then nofsharedscans=nofsharedscans+1 end end if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files=simplescan({},realpath..'/',"") if trace_locating then report_expansions("%s files found",table.count(files)) end if usecache then scanned[#scanned+1]=realpath simplecache[realpath]=files end nofscans=nofscans+1 statistics.stoptiming(timer) return files end function resolvers.scandata() table.sort(scanned) return { n=nofscans, shared=nofsharedscans, time=statistics.elapsedtime(timer), paths=scanned, } end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true -- original size: 8762, stripped down to: 6484 if not modules then modules={} end modules ['data-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local lower,gsub=string.lower,string.gsub local resolvers=resolvers local allocate=utilities.storage.allocate local setmetatableindex=table.setmetatableindex local suffixonly=file.suffixonly local formats=allocate() local suffixes=allocate() local dangerous=allocate() local suffixmap=allocate() resolvers.formats=formats resolvers.suffixes=suffixes resolvers.dangerous=dangerous resolvers.suffixmap=suffixmap local luasuffixes=utilities.lua.suffixes local relations=allocate { core={ ofm={ names={ "ofm","omega font metric","omega font metrics" }, variable='OFMFONTS', suffixes={ 'ofm','tfm' }, }, ovf={ names={ "ovf","omega virtual font","omega virtual fonts" }, variable='OVFFONTS', suffixes={ 'ovf','vf' }, }, tfm={ names={ "tfm","tex font metric","tex font metrics" }, variable='TFMFONTS', suffixes={ 'tfm' }, }, vf={ names={ "vf","virtual font","virtual fonts" }, variable='VFFONTS', suffixes={ 'vf' }, }, otf={ names={ "otf","opentype","opentype font","opentype fonts"}, variable='OPENTYPEFONTS', suffixes={ 'otf' }, }, ttf={ names={ "ttf","truetype","truetype font","truetype fonts","truetype collection","truetype collections","truetype dictionary","truetype dictionaries" }, variable='TTFONTS', suffixes={ 'ttf','ttc','dfont' }, }, afm={ names={ "afm","adobe font metric","adobe font metrics" }, variable="AFMFONTS", suffixes={ "afm" }, }, pfb={ names={ "pfb","type1","type 1","type1 font","type 1 font","type1 fonts","type 1 fonts" }, variable='T1FONTS', suffixes={ 'pfb','pfa' }, }, fea={ names={ "fea","font feature","font features","font feature file","font feature files" }, variable='FONTFEATURES', suffixes={ 'fea' }, }, cid={ names={ "cid","cid map","cid maps","cid file","cid files" }, variable='FONTCIDMAPS', suffixes={ 'cid','cidmap' }, }, fmt={ names={ "fmt","format","tex format" }, variable='TEXFORMATS', suffixes={ 'fmt' }, }, mem={ names={ 'mem',"metapost format" }, variable='MPMEMS', suffixes={ 'mem' }, }, mp={ names={ "mp" }, variable='MPINPUTS', suffixes={ 'mp','mpvi','mpiv','mpii' }, }, tex={ names={ "tex" }, variable='TEXINPUTS', suffixes={ 'tex',"mkvi","mkiv","mkii" }, }, icc={ names={ "icc","icc profile","icc profiles" }, variable='ICCPROFILES', suffixes={ 'icc' }, }, texmfscripts={ names={ "texmfscript","texmfscripts","script","scripts" }, variable='TEXMFSCRIPTS', suffixes={ 'rb','pl','py' }, }, lua={ names={ "lua" }, variable='LUAINPUTS', suffixes={ luasuffixes.lua,luasuffixes.luc,luasuffixes.tma,luasuffixes.tmc }, }, lib={ names={ "lib" }, variable='CLUAINPUTS', suffixes=os.libsuffix and { os.libsuffix } or { 'dll','so' }, }, bib={ names={ 'bib' }, suffixes={ 'bib' }, }, bst={ names={ 'bst' }, suffixes={ 'bst' }, }, fontconfig={ names={ 'fontconfig','fontconfig file','fontconfig files' }, variable='FONTCONFIG_PATH', }, }, obsolete={ enc={ names={ "enc","enc files","enc file","encoding files","encoding file" }, variable='ENCFONTS', suffixes={ 'enc' }, }, map={ names={ "map","map files","map file" }, variable='TEXFONTMAPS', suffixes={ 'map' }, }, lig={ names={ "lig files","lig file","ligature file","ligature files" }, variable='LIGFONTS', suffixes={ 'lig' }, }, opl={ names={ "opl" }, variable='OPLFONTS', suffixes={ 'opl' }, }, ovp={ names={ "ovp" }, variable='OVPFONTS', suffixes={ 'ovp' }, }, }, kpse={ base={ names={ 'base',"metafont format" }, variable='MFBASES', suffixes={ 'base','bas' }, }, cmap={ names={ 'cmap','cmap files','cmap file' }, variable='CMAPFONTS', suffixes={ 'cmap' }, }, cnf={ names={ 'cnf' }, suffixes={ 'cnf' }, }, web={ names={ 'web' }, suffixes={ 'web','ch' } }, cweb={ names={ 'cweb' }, suffixes={ 'w','web','ch' }, }, gf={ names={ 'gf' }, suffixes={ 'gf' }, }, mf={ names={ 'mf' }, variable='MFINPUTS', suffixes={ 'mf' }, }, mft={ names={ 'mft' }, suffixes={ 'mft' }, }, pk={ names={ 'pk' }, suffixes={ 'pk' }, }, }, } resolvers.relations=relations function resolvers.updaterelations() for category,categories in next,relations do for name,relation in next,categories do local rn=relation.names local rv=relation.variable local rs=relation.suffixes if rn and rv then for i=1,#rn do local rni=lower(gsub(rn[i]," ","")) formats[rni]=rv if rs then suffixes[rni]=rs for i=1,#rs do local rsi=rs[i] suffixmap[rsi]=rni end end end end if rs then end end end end resolvers.updaterelations() local function simplified(t,k) return k and rawget(t,lower(gsub(k," ",""))) or nil end setmetatableindex(formats,simplified) setmetatableindex(suffixes,simplified) setmetatableindex(suffixmap,simplified) function resolvers.suffixofformat(str) local s=suffixes[str] return s and s[1] or "" end function resolvers.suffixofformat(str) return suffixes[str] or {} end for name,format in next,formats do dangerous[name]=true end dangerous.tex=nil function resolvers.formatofvariable(str) return formats[str] or '' end function resolvers.formatofsuffix(str) return suffixmap[suffixonly(str)] or 'tex' end function resolvers.variableofformat(str) return formats[str] or '' end function resolvers.variableofformatorsuffix(str) local v=formats[str] if v then return v end v=suffixmap[suffixonly(str)] if v then return formats[v] end return '' end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true -- original size: 14615, stripped down to: 11208 if not modules then modules={} end modules ['data-tmp']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub,concat=string.format,string.lower,string.gsub,table.concat local concat,serialize,serializetofile=table.concat,table.serialize,table.tofile local mkdirs,isdir,isfile=dir.mkdirs,lfs.isdir,lfs.isfile local addsuffix,is_writable,is_readable=file.addsuffix,file.is_writable,file.is_readable local formatters=string.formatters local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local report_caches=logs.reporter("resolvers","caches") local report_resolvers=logs.reporter("resolvers","caching") local resolvers=resolvers local directive_cleanup=false directives.register("system.compile.cleanup",function(v) directive_cleanup=v end) local directive_strip=false directives.register("system.compile.strip",function(v) directive_strip=v end) local compile=utilities.lua.compile function utilities.lua.compile(luafile,lucfile,cleanup,strip) if cleanup==nil then cleanup=directive_cleanup end if strip==nil then strip=directive_strip end return compile(luafile,lucfile,cleanup,strip) end caches=caches or {} local caches=caches local luasuffixes=utilities.lua.suffixes caches.base=caches.base or "luatex-cache" caches.more=caches.more or "context" caches.direct=false caches.tree=false caches.force=true caches.ask=false caches.relocate=false caches.defaults={ "TMPDIR","TEMPDIR","TMP","TEMP","HOME","HOMEPATH" } local writable,readables,usedreadables=nil,{},{} local function identify() local texmfcaches=resolvers.cleanpathlist("TEXMFCACHE") if texmfcaches then for k=1,#texmfcaches do local cachepath=texmfcaches[k] if cachepath~="" then cachepath=resolvers.resolve(cachepath) cachepath=resolvers.cleanpath(cachepath) cachepath=file.collapsepath(cachepath) local valid=isdir(cachepath) if valid then if is_readable(cachepath) then readables[#readables+1]=cachepath if not writable and is_writable(cachepath) then writable=cachepath end end elseif not writable and caches.force then local cacheparent=file.dirname(cachepath) if is_writable(cacheparent) and true then if not caches.ask or io.ask(format("\nShould I create the cache path %s?",cachepath),"no",{ "yes","no" })=="yes" then mkdirs(cachepath) if isdir(cachepath) and is_writable(cachepath) then report_caches("path %a created",cachepath) writable=cachepath readables[#readables+1]=cachepath end end end end end end end local texmfcaches=caches.defaults if texmfcaches then for k=1,#texmfcaches do local cachepath=texmfcaches[k] cachepath=resolvers.expansion(cachepath) if cachepath~="" then cachepath=resolvers.resolve(cachepath) cachepath=resolvers.cleanpath(cachepath) local valid=isdir(cachepath) if valid and is_readable(cachepath) then if not writable and is_writable(cachepath) then readables[#readables+1]=cachepath writable=cachepath break end end end end end if not writable then report_caches("fatal error: there is no valid writable cache path defined") os.exit() elseif #readables==0 then report_caches("fatal error: there is no valid readable cache path defined") os.exit() end writable=dir.expandname(resolvers.cleanpath(writable)) local base,more,tree=caches.base,caches.more,caches.tree or caches.treehash() if tree then caches.tree=tree writable=mkdirs(writable,base,more,tree) for i=1,#readables do readables[i]=file.join(readables[i],base,more,tree) end else writable=mkdirs(writable,base,more) for i=1,#readables do readables[i]=file.join(readables[i],base,more) end end if trace_cache then for i=1,#readables do report_caches("using readable path %a (order %s)",readables[i],i) end report_caches("using writable path %a",writable) end identify=function() return writable,readables end return writable,readables end function caches.usedpaths(separator) local writable,readables=identify() if #readables>1 then local result={} local done={} for i=1,#readables do local readable=readables[i] if readable==writable then done[readable]=true result[#result+1]=formatters["readable+writable: %a"](readable) elseif usedreadables[i] then done[readable]=true result[#result+1]=formatters["readable: %a"](readable) end end if not done[writable] then result[#result+1]=formatters["writable: %a"](writable) end return concat(result,separator or " | ") else return writable or "?" end end function caches.configfiles() return concat(resolvers.instance.specification,";") end function caches.hashed(tree) tree=gsub(tree,"[\\/]+$","") tree=lower(tree) local hash=md5.hex(tree) if trace_cache or trace_locating then report_caches("hashing tree %a, hash %a",tree,hash) end return hash end function caches.treehash() local tree=caches.configfiles() if not tree or tree=="" then return false else return caches.hashed(tree) end end local r_cache,w_cache={},{} local function getreadablepaths(...) local tags={... } local hash=concat(tags,"/") local done=r_cache[hash] if not done then local writable,readables=identify() if #tags>0 then done={} for i=1,#readables do done[i]=file.join(readables[i],...) end else done=readables end r_cache[hash]=done end return done end local function getwritablepath(...) local tags={... } local hash=concat(tags,"/") local done=w_cache[hash] if not done then local writable,readables=identify() if #tags>0 then done=mkdirs(writable,...) else done=writable end w_cache[hash]=done end return done end caches.getreadablepaths=getreadablepaths caches.getwritablepath=getwritablepath function caches.getfirstreadablefile(filename,...) local rd=getreadablepaths(...) for i=1,#rd do local path=rd[i] local fullname=file.join(path,filename) if is_readable(fullname) then usedreadables[i]=true return fullname,path end end return caches.setfirstwritablefile(filename,...) end function caches.setfirstwritablefile(filename,...) local wr=getwritablepath(...) local fullname=file.join(wr,filename) return fullname,wr end function caches.define(category,subcategory) return function() return getwritablepath(category,subcategory) end end function caches.setluanames(path,name) return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc) end function caches.loaddata(readables,name) if type(readables)=="string" then readables={ readables } end for i=1,#readables do local path=readables[i] local tmaname,tmcname=caches.setluanames(path,name) local loader=false if isfile(tmcname) then loader=loadfile(tmcname) end if not loader and isfile(tmaname) then utilities.lua.compile(tmaname,tmcname) if isfile(tmcname) then loader=loadfile(tmcname) end if not loader then loader=loadfile(tmaname) end end if loader then loader=loader() collectgarbage("step") return loader end end return false end function caches.is_writable(filepath,filename) local tmaname,tmcname=caches.setluanames(filepath,filename) return is_writable(tmaname) end local saveoptions={ compact=true } function caches.savedata(filepath,filename,data,raw) local tmaname,tmcname=caches.setluanames(filepath,filename) local reduce,simplify=true,true if raw then reduce,simplify=false,false end data.cache_uuid=os.uuid() if caches.direct then file.savedata(tmaname,serialize(data,true,saveoptions)) else serializetofile(tmaname,data,true,saveoptions) end utilities.lua.compile(tmaname,tmcname) end local content_state={} function caches.contentstate() return content_state or {} end function caches.loadcontent(cachename,dataname) local name=caches.hashed(cachename) local full,path=caches.getfirstreadablefile(addsuffix(name,luasuffixes.lua),"trees") local filename=file.join(path,name) local blob=loadfile(addsuffix(filename,luasuffixes.luc)) or loadfile(addsuffix(filename,luasuffixes.lua)) if blob then local data=blob() if data and data.content then if data.type==dataname then if data.version==resolvers.cacheversion then content_state[#content_state+1]=data.uuid if trace_locating then report_resolvers("loading %a for %a from %a",dataname,cachename,filename) end return data.content else report_resolvers("skipping %a for %a from %a (version mismatch)",dataname,cachename,filename) end else report_resolvers("skipping %a for %a from %a (datatype mismatch)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (no content)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (invalid file)",dataname,cachename,filename) end end function caches.collapsecontent(content) for k,v in next,content do if type(v)=="table" and #v==1 then content[k]=v[1] end end end function caches.savecontent(cachename,dataname,content) local name=caches.hashed(cachename) local full,path=caches.setfirstwritablefile(addsuffix(name,luasuffixes.lua),"trees") local filename=file.join(path,name) local luaname=addsuffix(filename,luasuffixes.lua) local lucname=addsuffix(filename,luasuffixes.luc) if trace_locating then report_resolvers("preparing %a for %a",dataname,cachename) end local data={ type=dataname, root=cachename, version=resolvers.cacheversion, date=os.date("%Y-%m-%d"), time=os.date("%H:%M:%S"), content=content, uuid=os.uuid(), } local ok=io.savedata(luaname,serialize(data,true)) if ok then if trace_locating then report_resolvers("category %a, cachename %a saved in %a",dataname,cachename,luaname) end if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("%a compiled to %a",dataname,lucname) end return true else if trace_locating then report_resolvers("compiling failed for %a, deleting file %a",dataname,lucname) end os.remove(lucname) end elseif trace_locating then report_resolvers("unable to save %a in %a (access error)",dataname,luaname) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-met"] = package.loaded["data-met"] or true -- original size: 5137, stripped down to: 4007 if not modules then modules={} end modules ['data-met']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,format=string.find,string.format local sequenced=table.sequenced local addurlscheme,urlhashed=url.addscheme,url.hashed local getcurrentdir=lfs.currentdir local trace_locating=false local trace_methods=false trackers.register("resolvers.locating",function(v) trace_methods=v end) trackers.register("resolvers.methods",function(v) trace_methods=v end) local report_methods=logs.reporter("resolvers","methods") local allocate=utilities.storage.allocate local resolvers=resolvers local registered={} local function splitmethod(filename) if not filename then return { scheme="unknown",original=filename } end if type(filename)=="table" then return filename end filename=file.collapsepath(filename,".") if not find(filename,"://") then return { scheme="file",path=filename,original=filename,filename=filename } end local specification=url.hashed(filename) if not specification.scheme or specification.scheme=="" then return { scheme="file",path=filename,original=filename,filename=filename } else return specification end end resolvers.splitmethod=splitmethod local function methodhandler(what,first,...) local method=registered[what] if method then local how,namespace=method.how,method.namespace if how=="uri" or how=="url" then local specification=splitmethod(first) local scheme=specification.scheme local resolver=namespace and namespace[scheme] if resolver then if trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,scheme,first) end return resolver(specification,...) else resolver=namespace.default or namespace.file if resolver then if trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,"default",first) end return resolver(specification,...) elseif trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,"unset") end end elseif how=="tag" then local resolver=namespace and namespace[first] if resolver then if trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,first) end return resolver(...) else resolver=namespace.default or namespace.file if resolver then if trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,"default") end return resolver(...) elseif trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,"unset") end end end else report_methods("resolving, invalid method %a") end end resolvers.methodhandler=methodhandler function resolvers.registermethod(name,namespace,how) registered[name]={ how=how or "tag",namespace=namespace } namespace["byscheme"]=function(scheme,filename,...) if scheme=="file" then return methodhandler(name,filename,...) else return methodhandler(name,addurlscheme(filename,scheme),...) end end end local concatinators=allocate { notfound=file.join } local locators=allocate { notfound=function() end } local hashers=allocate { notfound=function() end } local generators=allocate { notfound=function() end } resolvers.concatinators=concatinators resolvers.locators=locators resolvers.hashers=hashers resolvers.generators=generators local registermethod=resolvers.registermethod registermethod("concatinators",concatinators,"tag") registermethod("locators",locators,"uri") registermethod("hashers",hashers,"uri") registermethod("generators",generators,"uri") end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-res"] = package.loaded["data-res"] or true -- original size: 61759, stripped down to: 42959 if not modules then modules={} end modules ['data-res']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find,lower,upper,match,gmatch=string.gsub,string.find,string.lower,string.upper,string.match,string.gmatch local concat,insert,sortedkeys=table.concat,table.insert,table.sortedkeys local next,type,rawget=next,type,rawget local os=os local P,S,R,C,Cc,Cs,Ct,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Carg local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local formatters=string.formatters local filedirname=file.dirname local filebasename=file.basename local suffixonly=file.suffixonly local filejoin=file.join local collapsepath=file.collapsepath local joinpath=file.joinpath local allocate=utilities.storage.allocate local settings_to_array=utilities.parsers.settings_to_array local setmetatableindex=table.setmetatableindex local luasuffixes=utilities.lua.suffixes local getcurrentdir=lfs.currentdir local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_detail=false trackers.register("resolvers.details",function(v) trace_detail=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_resolving=logs.reporter("resolvers","resolving") local resolvers=resolvers local expandedpathfromlist=resolvers.expandedpathfromlist local checkedvariable=resolvers.checkedvariable local splitconfigurationpath=resolvers.splitconfigurationpath local methodhandler=resolvers.methodhandler local initializesetter=utilities.setters.initialize local ostype,osname,osenv,ossetenv,osgetenv=os.type,os.name,os.env,os.setenv,os.getenv resolvers.cacheversion='1.0.1' resolvers.configbanner='' resolvers.homedir=environment.homedir resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" } resolvers.luacnfname="texmfcnf.lua" resolvers.luacnfstate="unknown" if environment.default_texmfcnf then resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf else resolvers.luacnfspec=concat ({ "home:texmf/web2c", "selfautoparent:/texmf-local/web2c", "selfautoparent:/texmf-context/web2c", "selfautoparent:/texmf-dist/web2c", "selfautoparent:/texmf/web2c", },";") end local unset_variable="unset" local formats=resolvers.formats local suffixes=resolvers.suffixes local dangerous=resolvers.dangerous local suffixmap=resolvers.suffixmap resolvers.defaultsuffixes={ "tex" } resolvers.instance=resolvers.instance or nil local instance=resolvers.instance or nil function resolvers.setenv(key,value,raw) if instance then instance.environment[key]=value ossetenv(key,raw and value or resolvers.resolve(value)) end end local function getenv(key) local value=rawget(instance.environment,key) if value and value~="" then return value else local e=osgetenv(key) return e~=nil and e~="" and checkedvariable(e) or "" end end resolvers.getenv=getenv resolvers.env=getenv local function resolve(k) return instance.expansions[k] end local dollarstripper=lpeg.stripper("$") local inhibitstripper=P("!")^0*Cs(P(1)^0) local backslashswapper=lpeg.replacer("\\","/") local somevariable=P("$")/"" local somekey=C(R("az","AZ","09","__","--")^1) local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1) local variableexpander=Cs((somevariable*(somekey/resolve)+somethingelse)^1 ) local cleaner=P("\\")/"/"+P(";")*S("!{}/\\")^0*P(";")^1/";" local variablecleaner=Cs((cleaner+P(1))^0) local somevariable=R("az","AZ","09","__","--")^1/resolve local variable=(P("$")/"")*(somevariable+(P("{")/"")*somevariable*(P("}")/"")) local variableresolver=Cs((variable+P(1))^0) local function expandedvariable(var) return lpegmatch(variableexpander,var) or var end function resolvers.newinstance() if trace_locating then report_resolving("creating instance") end local environment,variables,expansions,order=allocate(),allocate(),allocate(),allocate() local newinstance={ environment=environment, variables=variables, expansions=expansions, order=order, files=allocate(), setups=allocate(), found=allocate(), foundintrees=allocate(), hashes=allocate(), hashed=allocate(), specification=allocate(), lists=allocate(), data=allocate(), fakepaths=allocate(), remember=true, diskcache=true, renewcache=false, renewtree=false, loaderror=false, savelists=true, pattern=nil, force_suffixes=true, } setmetatableindex(variables,function(t,k) local v for i=1,#order do v=order[i][k] if v~=nil then t[k]=v return v end end if v==nil then v="" end t[k]=v return v end) setmetatableindex(environment,function(t,k) local v=osgetenv(k) if v==nil then v=variables[k] end if v~=nil then v=checkedvariable(v) or "" end v=resolvers.repath(v) t[k]=v return v end) setmetatableindex(expansions,function(t,k) local v=environment[k] if type(v)=="string" then v=lpegmatch(variableresolver,v) v=lpegmatch(variablecleaner,v) end t[k]=v return v end) return newinstance end function resolvers.setinstance(someinstance) instance=someinstance resolvers.instance=someinstance return someinstance end function resolvers.reset() return resolvers.setinstance(resolvers.newinstance()) end local function reset_hashes() instance.lists={} instance.found={} end local slash=P("/") local pathexpressionpattern=Cs ( Cc("^")*( Cc("%")*S(".-")+slash^2*P(-1)/"/.*" +slash^2/"/"+(1-slash)*P(-1)*Cc("/")+P(1) )^1*Cc("$") ) local cache={} local function makepathexpression(str) if str=="." then return "^%./$" else local c=cache[str] if not c then c=lpegmatch(pathexpressionpattern,str) cache[str]=c end return c end end local function reportcriticalvariables(cnfspec) if trace_locating then for i=1,#resolvers.criticalvars do local k=resolvers.criticalvars[i] local v=resolvers.getenv(k) or "unknown" report_resolving("variable %a set to %a",k,v) end report_resolving() if cnfspec then report_resolving("using configuration specification %a",type(cnfspec)=="table" and concat(cnfspec,",") or cnfspec) end report_resolving() end reportcriticalvariables=function() end end local function identify_configuration_files() local specification=instance.specification if #specification==0 then local cnfspec=getenv("TEXMFCNF") if cnfspec=="" then cnfspec=resolvers.luacnfspec resolvers.luacnfstate="default" else resolvers.luacnfstate="environment" end reportcriticalvariables(cnfspec) local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec)) local luacnfname=resolvers.luacnfname for i=1,#cnfpaths do local filepath=cnfpaths[i] local filename=collapsepath(filejoin(filepath,luacnfname)) local realname=resolvers.resolve(filename) if trace_locating then local fullpath=gsub(resolvers.resolve(collapsepath(filepath)),"//","/") local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c") report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath) end if lfs.isfile(realname) then specification[#specification+1]=filename if trace_locating then report_resolving("found configuration file %a",realname) end end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("configuration files already identified") end end local function load_configuration_files() local specification=instance.specification if #specification>0 then local luacnfname=resolvers.luacnfname for i=1,#specification do local filename=specification[i] local pathname=filedirname(filename) local filename=filejoin(pathname,luacnfname) local realname=resolvers.resolve(filename) local blob=loadfile(realname) if blob then local setups=instance.setups local data=blob() local parent=data and data.parent if parent then local filename=filejoin(pathname,parent) local realname=resolvers.resolve(filename) local blob=loadfile(realname) if blob then local parentdata=blob() if parentdata then report_resolving("loading configuration file %a",filename) data=table.merged(parentdata,data) end end end data=data and data.content if data then if trace_locating then report_resolving("loading configuration file %a",filename) report_resolving() end local variables=data.variables or {} local warning=false for k,v in next,data do local variant=type(v) if variant=="table" then initializesetter(filename,k,v) elseif variables[k]==nil then if trace_locating and not warning then report_resolving("variables like %a in configuration file %a should move to the 'variables' subtable", k,resolvers.resolve(filename)) warning=true end variables[k]=v end end setups[pathname]=variables if resolvers.luacnfstate=="default" then local cnfspec=variables["TEXMFCNF"] if cnfspec then if trace_locating then report_resolving("reloading configuration due to TEXMF redefinition") end resolvers.setenv("TEXMFCNF",cnfspec) instance.specification={} identify_configuration_files() load_configuration_files() resolvers.luacnfstate="configuration" break end end else if trace_locating then report_resolving("skipping configuration file %a (no content)",filename) end setups[pathname]={} instance.loaderror=true end elseif trace_locating then report_resolving("skipping configuration file %a (no valid format)",filename) end instance.order[#instance.order+1]=instance.setups[pathname] if instance.loaderror then break end end elseif trace_locating then report_resolving("warning: no lua configuration files found") end end local function load_file_databases() instance.loaderror,instance.files=false,allocate() if not instance.renewcache then local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] resolvers.hashers.byscheme(hash.type,hash.name) if instance.loaderror then break end end end end local function locate_file_databases() local texmfpaths=resolvers.expandedpathlist("TEXMF") if #texmfpaths>0 then for i=1,#texmfpaths do local path=collapsepath(texmfpaths[i]) path=gsub(path,"/+$","") local stripped=lpegmatch(inhibitstripper,path) if stripped~="" then local runtime=stripped==path path=resolvers.cleanpath(path) local spec=resolvers.splitmethod(stripped) if runtime and (spec.noscheme or spec.scheme=="file") then stripped="tree:///"..stripped elseif spec.scheme=="cache" or spec.scheme=="file" then stripped=spec.path end if trace_locating then if runtime then report_resolving("locating list of %a (runtime) (%s)",path,stripped) else report_resolving("locating list of %a (cached)",path) end end methodhandler('locators',stripped) end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("no texmf paths are defined (using TEXMF)") end end local function generate_file_databases() local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] methodhandler('generators',hash.name) end if trace_locating then report_resolving() end end local function save_file_databases() for i=1,#instance.hashes do local hash=instance.hashes[i] local cachename=hash.name if hash.cache then local content=instance.files[cachename] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",cachename) end caches.savecontent(cachename,"files",content) elseif trace_locating then report_resolving("not saving runtime tree %a",cachename) end end end function resolvers.renew(hashname) if hashname and hashname~="" then local expanded=resolvers.expansion(hashname) or "" if expanded~="" then if trace_locating then report_resolving("identifying tree %a from %a",expanded,hashname) end hashname=expanded else if trace_locating then report_resolving("identifying tree %a",hashname) end end local realpath=resolvers.resolve(hashname) if lfs.isdir(realpath) then if trace_locating then report_resolving("using path %a",realpath) end methodhandler('generators',hashname) local content=instance.files[hashname] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",hashname) end caches.savecontent(hashname,"files",content) else report_resolving("invalid path %a",realpath) end end end local function load_databases() locate_file_databases() if instance.diskcache and not instance.renewcache then load_file_databases() if instance.loaderror then generate_file_databases() save_file_databases() end else generate_file_databases() if instance.renewcache then save_file_databases() end end end function resolvers.appendhash(type,name,cache) if not instance.hashed[name] then if trace_locating then report_resolving("hash %a appended",name) end insert(instance.hashes,{ type=type,name=name,cache=cache } ) instance.hashed[name]=cache end end function resolvers.prependhash(type,name,cache) if not instance.hashed[name] then if trace_locating then report_resolving("hash %a prepended",name) end insert(instance.hashes,1,{ type=type,name=name,cache=cache } ) instance.hashed[name]=cache end end function resolvers.extendtexmfvariable(specification) local t=resolvers.splitpath(getenv("TEXMF")) insert(t,1,specification) local newspec=concat(t,",") if instance.environment["TEXMF"] then instance.environment["TEXMF"]=newspec elseif instance.variables["TEXMF"] then instance.variables["TEXMF"]=newspec else end reset_hashes() end function resolvers.splitexpansions() local ie=instance.expansions for k,v in next,ie do local t,tn,h,p={},0,{},splitconfigurationpath(v) for kk=1,#p do local vv=p[kk] if vv~="" and not h[vv] then tn=tn+1 t[tn]=vv h[vv]=true end end if #t>1 then ie[k]=t else ie[k]=t[1] end end end function resolvers.datastate() return caches.contentstate() end function resolvers.variable(name) local name=name and lpegmatch(dollarstripper,name) local result=name and instance.variables[name] return result~=nil and result or "" end function resolvers.expansion(name) local name=name and lpegmatch(dollarstripper,name) local result=name and instance.expansions[name] return result~=nil and result or "" end function resolvers.unexpandedpathlist(str) local pth=resolvers.variable(str) local lst=resolvers.splitpath(pth) return expandedpathfromlist(lst) end function resolvers.unexpandedpath(str) return joinpath(resolvers.unexpandedpathlist(str)) end local done={} function resolvers.resetextrapath() local ep=instance.extra_paths if not ep then ep,done={},{} instance.extra_paths=ep elseif #ep>0 then instance.lists,done={},{} end end function resolvers.registerextrapath(paths,subpaths) paths=settings_to_array(paths) subpaths=settings_to_array(subpaths) local ep=instance.extra_paths or {} local oldn=#ep local newn=oldn local nofpaths=#paths local nofsubpaths=#subpaths if nofpaths>0 then if nofsubpaths>0 then for i=1,nofpaths do local p=paths[i] for j=1,nofsubpaths do local s=subpaths[j] local ps=p.."/"..s if not done[ps] then newn=newn+1 ep[newn]=resolvers.cleanpath(ps) done[ps]=true end end end else for i=1,nofpaths do local p=paths[i] if not done[p] then newn=newn+1 ep[newn]=resolvers.cleanpath(p) done[p]=true end end end elseif nofsubpaths>0 then for i=1,oldn do for j=1,nofsubpaths do local s=subpaths[j] local ps=ep[i].."/"..s if not done[ps] then newn=newn+1 ep[newn]=resolvers.cleanpath(ps) done[ps]=true end end end end if newn>0 then instance.extra_paths=ep end if newn>oldn then instance.lists={} end end local function made_list(instance,list) local ep=instance.extra_paths if not ep or #ep==0 then return list else local done,new,newn={},{},0 for k=1,#list do local v=list[k] if not done[v] then if find(v,"^[%.%/]$") then done[v]=true newn=newn+1 new[newn]=v else break end end end for k=1,#ep do local v=ep[k] if not done[v] then done[v]=true newn=newn+1 new[newn]=v end end for k=1,#list do local v=list[k] if not done[v] then done[v]=true newn=newn+1 new[newn]=v end end return new end end function resolvers.cleanpathlist(str) local t=resolvers.expandedpathlist(str) if t then for i=1,#t do t[i]=collapsepath(resolvers.cleanpath(t[i])) end end return t end function resolvers.expandpath(str) return joinpath(resolvers.expandedpathlist(str)) end function resolvers.expandedpathlist(str) if not str then return {} elseif instance.savelists then str=lpegmatch(dollarstripper,str) local lists=instance.lists local lst=lists[str] if not lst then local l=made_list(instance,resolvers.splitpath(resolvers.expansion(str))) lst=expandedpathfromlist(l) lists[str]=lst end return lst else local lst=resolvers.splitpath(resolvers.expansion(str)) return made_list(instance,expandedpathfromlist(lst)) end end function resolvers.expandedpathlistfromvariable(str) str=lpegmatch(dollarstripper,str) local tmp=resolvers.variableofformatorsuffix(str) return resolvers.expandedpathlist(tmp~="" and tmp or str) end function resolvers.expandpathfromvariable(str) return joinpath(resolvers.expandedpathlistfromvariable(str)) end function resolvers.expandbraces(str) local ori=str local pth=expandedpathfromlist(resolvers.splitpath(ori)) return joinpath(pth) end function resolvers.registerfilehash(name,content,someerror) if content then instance.files[name]=content else instance.files[name]={} if somerror==true then instance.loaderror=someerror end end end local function isreadable(name) local readable=lfs.isfile(name) if trace_detail then if readable then report_resolving("file %a is readable",name) else report_resolving("file %a is not readable",name) end end return readable end local function collect_files(names) local filelist,noffiles={},0 for k=1,#names do local fname=names[k] if trace_detail then report_resolving("checking name %a",fname) end local bname=filebasename(fname) local dname=filedirname(fname) if dname=="" or find(dname,"^%.") then dname=false else dname=gsub(dname,"%*",".*") dname="/"..dname.."$" end local hashes=instance.hashes for h=1,#hashes do local hash=hashes[h] local blobpath=hash.name local files=blobpath and instance.files[blobpath] if files then if trace_detail then report_resolving("deep checking %a, base %a, pattern %a",blobpath,bname,dname) end local blobfile=files[bname] if not blobfile then local rname="remap:"..bname blobfile=files[rname] if blobfile then bname=files[rname] blobfile=files[bname] end end if blobfile then local blobroot=files.__path__ or blobpath if type(blobfile)=='string' then if not dname or find(blobfile,dname) then local variant=hash.type local search=filejoin(blobroot,blobfile,bname) local result=methodhandler('concatinators',hash.type,blobroot,blobfile,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles=noffiles+1 filelist[noffiles]={ variant,search,result } end else for kk=1,#blobfile do local vv=blobfile[kk] if not dname or find(vv,dname) then local variant=hash.type local search=filejoin(blobroot,vv,bname) local result=methodhandler('concatinators',hash.type,blobroot,vv,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles=noffiles+1 filelist[noffiles]={ variant,search,result } end end end end elseif trace_locating then report_resolving("no match in %a (%s)",blobpath,bname) end end end return noffiles>0 and filelist or nil end local fit={} function resolvers.registerintrees(filename,format,filetype,usedmethod,foundname) local foundintrees=instance.foundintrees if usedmethod=="direct" and filename==foundname and fit[foundname] then else local t={ filename=filename, format=format~="" and format or nil, filetype=filetype~="" and filetype or nil, usedmethod=usedmethod, foundname=foundname, } fit[foundname]=t foundintrees[#foundintrees+1]=t end end local function can_be_dir(name) local fakepaths=instance.fakepaths if not fakepaths[name] then if lfs.isdir(name) then fakepaths[name]=1 else fakepaths[name]=2 end end return fakepaths[name]==1 end local preparetreepattern=Cs((P(".")/"%%."+P("-")/"%%-"+P(1))^0*Cc("$")) local collect_instance_files local function find_analyze(filename,askedformat,allresults) local filetype,wantedfiles,ext='',{},suffixonly(filename) wantedfiles[#wantedfiles+1]=filename if askedformat=="" then if ext=="" or not suffixmap[ext] then local defaultsuffixes=resolvers.defaultsuffixes for i=1,#defaultsuffixes do local forcedname=filename..'.'..defaultsuffixes[i] wantedfiles[#wantedfiles+1]=forcedname filetype=resolvers.formatofsuffix(forcedname) if trace_locating then report_resolving("forcing filetype %a",filetype) end end else filetype=resolvers.formatofsuffix(filename) if trace_locating then report_resolving("using suffix based filetype %a",filetype) end end else if ext=="" or not suffixmap[ext] then local format_suffixes=suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do wantedfiles[#wantedfiles+1]=filename.."."..format_suffixes[i] end end end filetype=askedformat if trace_locating then report_resolving("using given filetype %a",filetype) end end return filetype,wantedfiles end local function find_direct(filename,allresults) if not dangerous[askedformat] and isreadable(filename) then if trace_detail then report_resolving("file %a found directly",filename) end return "direct",{ filename } end end local function find_wildcard(filename,allresults) if find(filename,'%*') then if trace_locating then report_resolving("checking wildcard %a",filename) end local method,result=resolvers.findwildcardfiles(filename) if result then return "wildcard",result end end end local function find_qualified(filename,allresults,askedformat,alsostripped) if not file.is_qualified_path(filename) then return end if trace_locating then report_resolving("checking qualified name %a",filename) end if isreadable(filename) then if trace_detail then report_resolving("qualified file %a found",filename) end return "qualified",{ filename } end if trace_detail then report_resolving("locating qualified file %a",filename) end local forcedname,suffix="",suffixonly(filename) if suffix=="" then local format_suffixes=askedformat=="" and resolvers.defaultsuffixes or suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do local s=format_suffixes[i] forcedname=filename.."."..s if isreadable(forcedname) then if trace_locating then report_resolving("no suffix, forcing format filetype %a",s) end return "qualified",{ forcedname } end end end end if alsostripped and suffix and suffix~="" then local basename=filebasename(filename) local pattern=lpegmatch(preparetreepattern,filename) local savedformat=askedformat local format=savedformat or "" if format=="" then askedformat=resolvers.formatofsuffix(suffix) end if not format then askedformat="othertextfiles" end if basename~=filename then local resolved=collect_instance_files(basename,askedformat,allresults) if #resolved==0 then local lowered=lower(basename) if filename~=lowered then resolved=collect_instance_files(lowered,askedformat,allresults) end end resolvers.format=savedformat if #resolved>0 then local result={} for r=1,#resolved do local rr=resolved[r] if find(rr,pattern) then result[#result+1]=rr end end if #result>0 then return "qualified",result end end end end end local function check_subpath(fname) if isreadable(fname) then if trace_detail then report_resolving("found %a by deep scanning",fname) end return fname end end local function find_intree(filename,filetype,wantedfiles,allresults) local typespec=resolvers.variableofformat(filetype) local pathlist=resolvers.expandedpathlist(typespec) local method="intree" if pathlist and #pathlist>0 then local filelist=collect_files(wantedfiles) local dirlist={} if filelist then for i=1,#filelist do dirlist[i]=filedirname(filelist[i][3]).."/" end end if trace_detail then report_resolving("checking filename %a",filename) end local resolve=resolvers.resolve local result={} for k=1,#pathlist do local path=pathlist[k] local pathname=lpegmatch(inhibitstripper,path) local doscan=path==pathname if not find (pathname,'//$') then doscan=false end local done=false if filelist then local expression=makepathexpression(pathname) if trace_detail then report_resolving("using pattern %a for path %a",expression,pathname) end for k=1,#filelist do local fl=filelist[k] local f=fl[2] local d=dirlist[k] if find(d,expression) or find(resolve(d),expression) then result[#result+1]=resolve(fl[3]) done=true if allresults then if trace_detail then report_resolving("match to %a in hash for file %a and path %a, continue scanning",expression,f,d) end else if trace_detail then report_resolving("match to %a in hash for file %a and path %a, quit scanning",expression,f,d) end break end elseif trace_detail then report_resolving("no match to %a in hash for file %a and path %a",expression,f,d) end end end if done then method="database" else method="filesystem" pathname=gsub(pathname,"/+$","") pathname=resolve(pathname) local scheme=url.hasscheme(pathname) if not scheme or scheme=="file" then local pname=gsub(pathname,"%.%*$",'') if not find(pname,"%*") then if can_be_dir(pname) then for k=1,#wantedfiles do local w=wantedfiles[k] local fname=check_subpath(filejoin(pname,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end end if not done and doscan then local files=resolvers.simplescanfiles(pname,false,true) for k=1,#wantedfiles do local w=wantedfiles[k] local subpath=files[w] if not subpath or subpath=="" then elseif type(subpath)=="string" then local fname=check_subpath(filejoin(pname,subpath,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end else for i=1,#subpath do local sp=subpath[i] if sp=="" then else local fname=check_subpath(filejoin(pname,sp,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end end end if done and not allresults then break end end end end end else end end end if done and not allresults then break end end if #result>0 then return method,result end end end local function find_onpath(filename,filetype,wantedfiles,allresults) if trace_detail then report_resolving("checking filename %a, filetype %a, wanted files %a",filename,filetype,concat(wantedfiles," | ")) end local result={} for k=1,#wantedfiles do local fname=wantedfiles[k] if fname and isreadable(fname) then filename=fname result[#result+1]=filejoin('.',fname) if not allresults then break end end end if #result>0 then return "onpath",result end end local function find_otherwise(filename,filetype,wantedfiles,allresults) local filelist=collect_files(wantedfiles) local fl=filelist and filelist[1] if fl then return "otherwise",{ resolvers.resolve(fl[3]) } end end collect_instance_files=function(filename,askedformat,allresults) askedformat=askedformat or "" filename=collapsepath(filename,".") filename=gsub(filename,"^%./",getcurrentdir().."/") if allresults then local filetype,wantedfiles=find_analyze(filename,askedformat) local results={ { find_direct (filename,true) }, { find_wildcard (filename,true) }, { find_qualified(filename,true,askedformat) }, { find_intree (filename,filetype,wantedfiles,true) }, { find_onpath (filename,filetype,wantedfiles,true) }, { find_otherwise(filename,filetype,wantedfiles,true) }, } local result,status,done={},{},{} for k,r in next,results do local method,list=r[1],r[2] if method and list then for i=1,#list do local c=collapsepath(list[i]) if not done[c] then result[#result+1]=c done[c]=true end status[#status+1]=formatters["%-10s: %s"](method,c) end end end if trace_detail then report_resolving("lookup status: %s",table.serialize(status,filename)) end return result,status else local method,result,stamp,filetype,wantedfiles if instance.remember then stamp=formatters["%s--%s"](filename,askedformat) result=stamp and instance.found[stamp] if result then if trace_locating then report_resolving("remembered file %a",filename) end return result end end method,result=find_direct(filename) if not result then method,result=find_wildcard(filename) if not result then method,result=find_qualified(filename,false,askedformat) if not result then filetype,wantedfiles=find_analyze(filename,askedformat) method,result=find_intree(filename,filetype,wantedfiles) if not result then method,result=find_onpath(filename,filetype,wantedfiles) if not result then method,result=find_otherwise(filename,filetype,wantedfiles) end end end end end if result and #result>0 then local foundname=collapsepath(result[1]) resolvers.registerintrees(filename,askedformat,filetype,method,foundname) result={ foundname } else result={} end if stamp then if trace_locating then report_resolving("remembering file %a",filename) end instance.found[stamp]=result end return result end end local function findfiles(filename,filetype,allresults) local result,status=collect_instance_files(filename,filetype or "",allresults) if not result or #result==0 then local lowered=lower(filename) if filename~=lowered then result,status=collect_instance_files(lowered,filetype or "",allresults) end end return result or {},status end function resolvers.findfiles(filename,filetype) return findfiles(filename,filetype,true) end function resolvers.findfile(filename,filetype) return findfiles(filename,filetype,false)[1] or "" end function resolvers.findpath(filename,filetype) return filedirname(findfiles(filename,filetype,false)[1] or "") end local function findgivenfiles(filename,allresults) local bname,result=filebasename(filename),{} local hashes=instance.hashes local noffound=0 for k=1,#hashes do local hash=hashes[k] local files=instance.files[hash.name] or {} local blist=files[bname] if not blist then local rname="remap:"..bname blist=files[rname] if blist then bname=files[rname] blist=files[bname] end end if blist then if type(blist)=='string' then local found=methodhandler('concatinators',hash.type,hash.name,blist,bname) or "" if found~="" then noffound=noffound+1 result[noffound]=resolvers.resolve(found) if not allresults then break end end else for kk=1,#blist do local vv=blist[kk] local found=methodhandler('concatinators',hash.type,hash.name,vv,bname) or "" if found~="" then noffound=noffound+1 result[noffound]=resolvers.resolve(found) if not allresults then break end end end end end end return result end function resolvers.findgivenfiles(filename) return findgivenfiles(filename,true) end function resolvers.findgivenfile(filename) return findgivenfiles(filename,false)[1] or "" end local function doit(path,blist,bname,tag,variant,result,allresults) local done=false if blist and variant then local resolve=resolvers.resolve if type(blist)=='string' then if find(lower(blist),path) then local full=methodhandler('concatinators',variant,tag,blist,bname) or "" result[#result+1]=resolve(full) done=true end else for kk=1,#blist do local vv=blist[kk] if find(lower(vv),path) then local full=methodhandler('concatinators',variant,tag,vv,bname) or "" result[#result+1]=resolve(full) done=true if not allresults then break end end end end end return done end local makewildcard=Cs( (P("^")^0*P("/")*P(-1)+P(-1))/".*"+(P("^")^0*P("/")/"")^0*(P("*")/".*"+P("-")/"%%-"+P(".")/"%%."+P("?")/"."+P("\\")/"/"+P(1))^0 ) function resolvers.wildcardpattern(pattern) return lpegmatch(makewildcard,pattern) or pattern end local function findwildcardfiles(filename,allresults,result) result=result or {} local base=filebasename(filename) local dirn=filedirname(filename) local path=lower(lpegmatch(makewildcard,dirn) or dirn) local name=lower(lpegmatch(makewildcard,base) or base) local files,done=instance.files,false if find(name,"%*") then local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] local hashname,hashtype=hash.name,hash.type for kk,hh in next,files[hashname] do if not find(kk,"^remap:") then if find(lower(kk),name) then if doit(path,hh,kk,hashname,hashtype,result,allresults) then done=true end if done and not allresults then break end end end end end else local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] local hashname,hashtype=hash.name,hash.type if doit(path,files[hashname][bname],bname,hashname,hashtype,result,allresults) then done=true end if done and not allresults then break end end end return result end function resolvers.findwildcardfiles(filename,result) return findwildcardfiles(filename,true,result) end function resolvers.findwildcardfile(filename) return findwildcardfiles(filename,false)[1] or "" end function resolvers.automount() end function resolvers.load(option) statistics.starttiming(instance) identify_configuration_files() load_configuration_files() if option~="nofiles" then load_databases() resolvers.automount() end statistics.stoptiming(instance) local files=instance.files return files and next(files) and true end function resolvers.loadtime() return statistics.elapsedtime(instance) end local function report(str) if trace_locating then report_resolving(str) else print(str) end end function resolvers.dowithfilesandreport(command,files,...) if files and #files>0 then if trace_locating then report('') end if type(files)=="string" then files={ files } end for f=1,#files do local file=files[f] local result=command(file,...) if type(result)=='string' then report(result) else for i=1,#result do report(result[i]) end end end end end function resolvers.showpath(str) return joinpath(resolvers.expandedpathlist(resolvers.formatofvariable(str))) end function resolvers.registerfile(files,name,path) if files[name] then if type(files[name])=='string' then files[name]={ files[name],path } else files[name]=path end else files[name]=path end end function resolvers.dowithpath(name,func) local pathlist=resolvers.expandedpathlist(name) for i=1,#pathlist do func("^"..resolvers.cleanpath(pathlist[i])) end end function resolvers.dowithvariable(name,func) func(expandedvariable(name)) end function resolvers.locateformat(name) local engine=environment.ownmain or "luatex" local barename=file.removesuffix(name) local fullname=file.addsuffix(barename,"fmt") local fmtname=caches.getfirstreadablefile(fullname,"formats",engine) or "" if fmtname=="" then fmtname=resolvers.findfile(fullname) fmtname=resolvers.cleanpath(fmtname) end if fmtname~="" then local barename=file.removesuffix(fmtname) local luaname=file.addsuffix(barename,luasuffixes.lua) local lucname=file.addsuffix(barename,luasuffixes.luc) local luiname=file.addsuffix(barename,luasuffixes.lui) if lfs.isfile(luiname) then return barename,luiname elseif lfs.isfile(lucname) then return barename,lucname elseif lfs.isfile(luaname) then return barename,luaname end end return nil,nil end function resolvers.booleanvariable(str,default) local b=resolvers.expansion(str) if b=="" then return default else b=toboolean(b) return (b==nil and default) or b end end function resolvers.dowithfilesintree(pattern,handle,before,after) local instance=resolvers.instance local hashes=instance.hashes for i=1,#hashes do local hash=hashes[i] local blobtype=hash.type local blobpath=hash.name if blobpath then if before then before(blobtype,blobpath,pattern) end local files=instance.files[blobpath] local total,checked,done=0,0,0 if files then for k,v in table.sortedhash(files) do total=total+1 if find(k,"^remap:") then elseif find(k,pattern) then if type(v)=="string" then checked=checked+1 if handle(blobtype,blobpath,v,k) then done=done+1 end else checked=checked+#v for i=1,#v do if handle(blobtype,blobpath,v[i],k) then done=done+1 end end end end end end if after then after(blobtype,blobpath,pattern,total,checked,done) end end end end resolvers.obsolete=resolvers.obsolete or {} local obsolete=resolvers.obsolete resolvers.find_file=resolvers.findfile obsolete.find_file=resolvers.findfile resolvers.find_files=resolvers.findfiles obsolete.find_files=resolvers.findfiles end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-pre"] = package.loaded["data-pre"] or true -- original size: 6643, stripped down to: 4401 if not modules then modules={} end modules ['data-pre']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers=resolvers local prefixes=utilities.storage.allocate() resolvers.prefixes=prefixes local cleanpath,findgivenfile,expansion=resolvers.cleanpath,resolvers.findgivenfile,resolvers.expansion local getenv=resolvers.getenv local P,S,R,C,Cs,Cc,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.match local joinpath,basename,dirname=file.join,file.basename,file.dirname local getmetatable,rawset,type=getmetatable,rawset,type prefixes.environment=function(str) return cleanpath(expansion(str)) end prefixes.relative=function(str,n) if io.exists(str) then elseif io.exists("./"..str) then str="./"..str else local p="../" for i=1,n or 2 do if io.exists(p..str) then str=p..str break else p=p.."../" end end end return cleanpath(str) end prefixes.auto=function(str) local fullname=prefixes.relative(str) if not lfs.isfile(fullname) then fullname=prefixes.locate(str) end return fullname end prefixes.locate=function(str) local fullname=findgivenfile(str) or "" return cleanpath((fullname~="" and fullname) or str) end prefixes.filename=function(str) local fullname=findgivenfile(str) or "" return cleanpath(basename((fullname~="" and fullname) or str)) end prefixes.pathname=function(str) local fullname=findgivenfile(str) or "" return cleanpath(dirname((fullname~="" and fullname) or str)) end prefixes.selfautoloc=function(str) return cleanpath(joinpath(getenv('SELFAUTOLOC'),str)) end prefixes.selfautoparent=function(str) return cleanpath(joinpath(getenv('SELFAUTOPARENT'),str)) end prefixes.selfautodir=function(str) return cleanpath(joinpath(getenv('SELFAUTODIR'),str)) end prefixes.home=function(str) return cleanpath(joinpath(getenv('HOME'),str)) end local function toppath() local inputstack=resolvers.inputstack if not inputstack then return "." end local pathname=dirname(inputstack[#inputstack] or "") if pathname=="" then return "." else return pathname end end resolvers.toppath=toppath prefixes.toppath=function(str) return cleanpath(joinpath(toppath(),str)) end prefixes.env=prefixes.environment prefixes.rel=prefixes.relative prefixes.loc=prefixes.locate prefixes.kpse=prefixes.locate prefixes.full=prefixes.locate prefixes.file=prefixes.filename prefixes.path=prefixes.pathname function resolvers.allprefixes(separator) local all=table.sortedkeys(prefixes) if separator then for i=1,#all do all[i]=all[i]..":" end end return all end local function _resolve_(method,target) local action=prefixes[method] if action then return action(target) else return method..":"..target end end local resolved,abstract={},{} function resolvers.resetresolve(str) resolved,abstract={},{} end local pattern=Cs((C(R("az")^2)*P(":")*C((1-S(" \"\';,"))^1)/_resolve_+P(1))^0) local prefix=C(R("az")^2)*P(":") local target=C((1-S(" \"\';,"))^1) local notarget=(#S(";,")+P(-1))*Cc("") local pattern=Cs(((prefix*(target+notarget))/_resolve_+P(1))^0) local function resolve(str) if type(str)=="table" then local t={} for i=1,#str do t[i]=resolve(str[i]) end return t else local res=resolved[str] if not res then res=lpegmatch(pattern,str) resolved[str]=res abstract[res]=str end return res end end local function unresolve(str) return abstract[str] or str end resolvers.resolve=resolve resolvers.unresolve=unresolve if type(os.uname)=="function" then for k,v in next,os.uname() do if not prefixes[k] then prefixes[k]=function() return v end end end end if os.type=="unix" then local pattern local function makepattern(t,k,v) if t then rawset(t,k,v) end local colon=P(":") for k,v in table.sortedpairs(prefixes) do if p then p=P(k)+p else p=P(k) end end pattern=Cs((p*colon+colon/";"+P(1))^0) end makepattern() getmetatable(prefixes).__newindex=makepattern function resolvers.repath(str) return lpegmatch(pattern,str) end else function resolvers.repath(str) return str end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-inp"] = package.loaded["data-inp"] or true -- original size: 910, stripped down to: 823 if not modules then modules={} end modules ['data-inp']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local resolvers=resolvers local methodhandler=resolvers.methodhandler local registermethod=resolvers.registermethod local finders=allocate { helpers={},notfound=function() end } local openers=allocate { helpers={},notfound=function() end } local loaders=allocate { helpers={},notfound=function() return false,nil,0 end } registermethod("finders",finders,"uri") registermethod("openers",openers,"uri") registermethod("loaders",loaders,"uri") resolvers.finders=finders resolvers.openers=openers resolvers.loaders=loaders end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-out"] = package.loaded["data-out"] or true -- original size: 530, stripped down to: 475 if not modules then modules={} end modules ['data-out']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local resolvers=resolvers local registermethod=resolvers.registermethod local savers=allocate { helpers={} } resolvers.savers=savers registermethod("savers",savers,"uri") end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true -- original size: 3801, stripped down to: 3231 if not modules then modules={} end modules ['data-fil']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_files=logs.reporter("resolvers","files") local resolvers=resolvers local finders,openers,loaders,savers=resolvers.finders,resolvers.openers,resolvers.loaders,resolvers.savers local locators,hashers,generators,concatinators=resolvers.locators,resolvers.hashers,resolvers.generators,resolvers.concatinators local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function locators.file(specification) local name=specification.filename local realname=resolvers.resolve(name) if realname and realname~='' and lfs.isdir(realname) then if trace_locating then report_files("file locator %a found as %a",name,realname) end resolvers.appendhash('file',name,true) elseif trace_locating then report_files("file locator %a not found",name) end end function hashers.file(specification) local name=specification.filename local content=caches.loadcontent(name,'files') resolvers.registerfilehash(name,content,content==nil) end function generators.file(specification) local path=specification.filename local content=resolvers.scanfiles(path,false,true) resolvers.registerfilehash(path,content,true) end concatinators.file=file.join function finders.file(specification,filetype) local filename=specification.filename local foundname=resolvers.findfile(filename,filetype) if foundname and foundname~="" then if trace_locating then report_files("file finder: %a found",filename) end return foundname else if trace_locating then report_files("file finder: %a not found",filename) end return finders.notfound() end end function openers.helpers.textopener(tag,filename,f) return { reader=function() return f:read () end, close=function() logs.show_close(filename) return f:close() end, } end function openers.file(specification,filetype) local filename=specification.filename if filename and filename~="" then local f=io.open(filename,"r") if f then if trace_locating then report_files("file opener: %a opened",filename) end return openers.helpers.textopener("file",filename,f) end end if trace_locating then report_files("file opener: %a not found",filename) end return openers.notfound() end function loaders.file(specification,filetype) local filename=specification.filename if filename and filename~="" then local f=io.open(filename,"rb") if f then logs.show_load(filename) if trace_locating then report_files("file loader: %a loaded",filename) end local s=f:read("*a") if checkgarbage then checkgarbage(#s) end f:close() if s then return true,s,#s end end end if trace_locating then report_files("file loader: %a not found",filename) end return loaders.notfound() end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-con"] = package.loaded["data-con"] or true -- original size: 5010, stripped down to: 3588 if not modules then modules={} end modules ['data-con']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub=string.format,string.lower,string.gsub local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end) local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end) containers=containers or {} local containers=containers containers.usecache=true local report_containers=logs.reporter("resolvers","containers") local allocated={} local mt={ __index=function(t,k) if k=="writable" then local writable=caches.getwritablepath(t.category,t.subcategory) or { "." } t.writable=writable return writable elseif k=="readables" then local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." } t.readables=readables return readables end end, __storage__=true } function containers.define(category,subcategory,version,enabled) if category and subcategory then local c=allocated[category] if not c then c={} allocated[category]=c end local s=c[subcategory] if not s then s={ category=category, subcategory=subcategory, storage={}, enabled=enabled, version=version or math.pi, trace=false, } setmetatable(s,mt) c[subcategory]=s end return s end end function containers.is_usable(container,name) return container.enabled and caches and caches.is_writable(container.writable,name) end function containers.is_valid(container,name) if name and name~="" then local storage=container.storage[name] return storage and storage.cache_version==container.version else return false end end function containers.read(container,name) local storage=container.storage local stored=storage[name] if not stored and container.enabled and caches and containers.usecache then stored=caches.loaddata(container.readables,name) if stored and stored.cache_version==container.version then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","load",container.subcategory,name) end else stored=nil end storage[name]=stored elseif stored then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","reuse",container.subcategory,name) end end return stored end function containers.write(container,name,data) if data then data.cache_version=container.version if container.enabled and caches then local unique,shared=data.unique,data.shared data.unique,data.shared=nil,nil caches.savedata(container.writable,name,data) if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","save",container.subcategory,name) end data.unique,data.shared=unique,shared end if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","store",container.subcategory,name) end container.storage[name]=data end return data end function containers.content(container,name) return container.storage[name] end function containers.cleanname(name) return (gsub(lower(name),"[^%w\128-\255]+","-")) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-use"] = package.loaded["data-use"] or true -- original size: 3913, stripped down to: 2998 if not modules then modules={} end modules ['data-use']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub,find=string.format,string.lower,string.gsub,string.find local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_mounts=logs.reporter("resolvers","mounts") local resolvers=resolvers resolvers.automounted=resolvers.automounted or {} function resolvers.automount(usecache) local mountpaths=resolvers.cleanpathlist(resolvers.expansion('TEXMFMOUNT')) if (not mountpaths or #mountpaths==0) and usecache then mountpaths=caches.getreadablepaths("mount") end if mountpaths and #mountpaths>0 then statistics.starttiming(resolvers.instance) for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") if f then for line in f:lines() do if line then if find(line,"^[%%#%-]") then elseif find(line,"^zip://") then if trace_locating then report_mounts("mounting %a",line) end table.insert(resolvers.automounted,line) resolvers.usezipfile(line) end end end f:close() end end statistics.stoptiming(resolvers.instance) end end statistics.register("used config file",function() return caches.configfiles() end) statistics.register("used cache path",function() return caches.usedpaths() end) function statistics.savefmtstatus(texname,formatbanner,sourcefile) local enginebanner=status.list().banner if formatbanner and enginebanner and sourcefile then local luvname=file.replacesuffix(texname,"luv") local luvdata={ enginebanner=enginebanner, formatbanner=formatbanner, sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"), sourcefile=sourcefile, } io.savedata(luvname,table.serialize(luvdata,true)) end end function statistics.checkfmtstatus(texname) local enginebanner=status.list().banner if enginebanner and texname then local luvname=file.replacesuffix(texname,"luv") if lfs.isfile(luvname) then local luv=dofile(luvname) if luv and luv.sourcefile then local sourcehash=md5.hex(io.loaddata(resolvers.findfile(luv.sourcefile)) or "unknown") local luvbanner=luv.enginebanner or "?" if luvbanner~=enginebanner then return format("engine mismatch (luv: %s <> bin: %s)",luvbanner,enginebanner) end local luvhash=luv.sourcehash or "?" if luvhash~=sourcehash then return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash) end else return "invalid status file" end else return "missing status file" end end return true end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true -- original size: 8489, stripped down to: 6757 if not modules then modules={} end modules ['data-zip']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,find,match=string.format,string.find,string.match local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_zip=logs.reporter("resolvers","zip") local resolvers=resolvers zip=zip or {} local zip=zip zip.archives=zip.archives or {} local archives=zip.archives zip.registeredfiles=zip.registeredfiles or {} local registeredfiles=zip.registeredfiles local limited=false directives.register("system.inputmode",function(v) if not limited then local i_limiter=io.i_limiter(v) if i_limiter then zip.open=i_limiter.protect(zip.open) limited=true end end end) local function validzip(str) if not find(str,"^zip://") then return "zip:///"..str else return str end end function zip.openarchive(name) if not name or name=="" then return nil else local arch=archives[name] if not arch then local full=resolvers.findfile(name) or "" arch=(full~="" and zip.open(full)) or false archives[name]=arch end return arch end end function zip.closearchive(name) if not name or (name=="" and archives[name]) then zip.close(archives[name]) archives[name]=nil end end function resolvers.locators.zip(specification) local archive=specification.filename local zipfile=archive and archive~="" and zip.openarchive(archive) if trace_locating then if zipfile then report_zip("locator: archive %a found",archive) else report_zip("locator: archive %a not found",archive) end end end function resolvers.hashers.zip(specification) local archive=specification.filename if trace_locating then report_zip("loading file %a",archive) end resolvers.usezipfile(specification.original) end function resolvers.concatinators.zip(zipfile,path,name) if not path or path=="" then return format('%s?name=%s',zipfile,name) else return format('%s?name=%s/%s',zipfile,path,name) end end function resolvers.finders.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("finder: archive %a found",archive) end local dfile=zfile:open(queryname) if dfile then dfile=zfile:close() if trace_locating then report_zip("finder: file %a found",queryname) end return specification.original elseif trace_locating then report_zip("finder: file %a not found",queryname) end elseif trace_locating then report_zip("finder: unknown archive %a",archive) end end end if trace_locating then report_zip("finder: %a not found",original) end return resolvers.finders.notfound() end function resolvers.openers.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("opener; archive %a opened",archive) end local dfile=zfile:open(queryname) if dfile then if trace_locating then report_zip("opener: file %a found",queryname) end return resolvers.openers.helpers.textopener('zip',original,dfile) elseif trace_locating then report_zip("opener: file %a not found",queryname) end elseif trace_locating then report_zip("opener: unknown archive %a",archive) end end end if trace_locating then report_zip("opener: %a not found",original) end return resolvers.openers.notfound() end function resolvers.loaders.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("loader: archive %a opened",archive) end local dfile=zfile:open(queryname) if dfile then logs.show_load(original) if trace_locating then report_zip("loader; file %a loaded",original) end local s=dfile:read("*all") dfile:close() return true,s,#s elseif trace_locating then report_zip("loader: file %a not found",queryname) end elseif trace_locating then report_zip("loader; unknown archive %a",archive) end end end if trace_locating then report_zip("loader: %a not found",original) end return resolvers.openers.notfound() end function resolvers.usezipfile(archive) local specification=resolvers.splitmethod(archive) local archive=specification.filename if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end statistics.starttiming(instance) resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z instance.files[archive]=resolvers.registerzipfile(z,tree) statistics.stoptiming(instance) elseif trace_locating then report_zip("registering: unknown archive %a",archive) end elseif trace_locating then report_zip("registering: archive %a not found",archive) end end function resolvers.registerzipfile(z,tree) local files,filter={},"" if tree=="" then filter="^(.+)/(.-)$" else filter=format("^%s/(.+)/(.-)$",tree) end if trace_locating then report_zip("registering: using filter %a",filter) end local register,n=resolvers.registerfile,0 for i in z:files() do local path,name=match(i.filename,filter) if path then if name and name~='' then register(files,name,path) n=n+1 else end else register(files,i.filename,'') n=n+1 end end report_zip("registering: %s files registered",n) return files end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tre"] = package.loaded["data-tre"] or true -- original size: 2508, stripped down to: 2074 if not modules then modules={} end modules ['data-tre']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,gsub,format=string.find,string.gsub,string.format local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_trees=logs.reporter("resolvers","trees") local resolvers=resolvers local done,found,notfound={},{},resolvers.finders.notfound function resolvers.finders.tree(specification) local spec=specification.filename local fnd=found[spec] if fnd==nil then if spec~="" then local path,name=file.dirname(spec),file.basename(spec) if path=="" then path="." end local hash=done[path] if not hash then local pattern=path.."/*" hash=dir.glob(pattern) done[path]=hash end local pattern="/"..gsub(name,"([%.%-%+])","%%%1").."$" for k=1,#hash do local v=hash[k] if find(v,pattern) then found[spec]=v return v end end end fnd=notfound() found[spec]=fnd end return fnd end function resolvers.locators.tree(specification) local name=specification.filename local realname=resolvers.resolve(name) if realname and realname~='' and lfs.isdir(realname) then if trace_locating then report_trees("locator %a found",realname) end resolvers.appendhash('tree',name,false) elseif trace_locating then report_trees("locator %a not found",name) end end function resolvers.hashers.tree(specification) local name=specification.filename if trace_locating then report_trees("analysing %a",name) end resolvers.methodhandler("hashers",name) resolvers.generators.file(specification) end resolvers.concatinators.tree=resolvers.concatinators.file resolvers.generators.tree=resolvers.generators.file resolvers.openers.tree=resolvers.openers.file resolvers.loaders.tree=resolvers.loaders.file end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-sch"] = package.loaded["data-sch"] or true -- original size: 6202, stripped down to: 5149 if not modules then modules={} end modules ['data-sch']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local load=load local gsub,concat,format=string.gsub,table.concat,string.format local finders,openers,loaders=resolvers.finders,resolvers.openers,resolvers.loaders local trace_schemes=false trackers.register("resolvers.schemes",function(v) trace_schemes=v end) local report_schemes=logs.reporter("resolvers","schemes") local http=require("socket.http") local ltn12=require("ltn12") local resolvers=resolvers local schemes=resolvers.schemes or {} resolvers.schemes=schemes local cleaners={} schemes.cleaners=cleaners local threshold=24*60*60 directives.register("schemes.threshold",function(v) threshold=tonumber(v) or threshold end) function cleaners.none(specification) return specification.original end function cleaners.strip(specification) return (gsub(specification.original,"[^%a%d%.]+","-")) end function cleaners.md5(specification) return file.addsuffix(md5.hex(specification.original),file.suffix(specification.path)) end local cleaner=cleaners.strip directives.register("schemes.cleanmethod",function(v) cleaner=cleaners[v] or cleaners.strip end) function resolvers.schemes.cleanname(specification) local hash=cleaner(specification) if trace_schemes then report_schemes("hashing %a to %a",specification.original,hash) end return hash end local cached,loaded,reused,thresholds,handlers={},{},{},{},{} local function runcurl(name,cachename) local command="curl --silent --create-dirs --output "..cachename.." "..name os.spawn(command) end local function fetch(specification) local original=specification.original local scheme=specification.scheme local cleanname=schemes.cleanname(specification) local cachename=caches.setfirstwritablefile(cleanname,"schemes") if not cached[original] then statistics.starttiming(schemes) if not io.exists(cachename) or (os.difftime(os.time(),lfs.attributes(cachename).modification)>(thresholds[protocol] or threshold)) then cached[original]=cachename local handler=handlers[scheme] if handler then if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"built-in") end logs.flush() handler(specification,cachename) else if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl") end logs.flush() runcurl(original,cachename) end end if io.exists(cachename) then cached[original]=cachename if trace_schemes then report_schemes("using cached %a, protocol %a, cachename %a",original,scheme,cachename) end else cached[original]="" if trace_schemes then report_schemes("using missing %a, protocol %a",original,scheme) end end loaded[scheme]=loaded[scheme]+1 statistics.stoptiming(schemes) else if trace_schemes then report_schemes("reusing %a, protocol %a",original,scheme) end reused[scheme]=reused[scheme]+1 end return cached[original] end local function finder(specification,filetype) return resolvers.methodhandler("finders",fetch(specification),filetype) end local opener=openers.file local loader=loaders.file local function install(scheme,handler,newthreshold) handlers [scheme]=handler loaded [scheme]=0 reused [scheme]=0 finders [scheme]=finder openers [scheme]=opener loaders [scheme]=loader thresholds[scheme]=newthreshold or threshold end schemes.install=install local function http_handler(specification,cachename) local tempname=cachename..".tmp" local f=io.open(tempname,"wb") local status,message=http.request { url=specification.original, sink=ltn12.sink.file(f) } if not status then os.remove(tempname) else os.remove(cachename) os.rename(tempname,cachename) end return cachename end install('http',http_handler) install('https') install('ftp') statistics.register("scheme handling time",function() local l,r,nl,nr={},{},0,0 for k,v in table.sortedhash(loaded) do if v>0 then nl=nl+1 l[nl]=k..":"..v end end for k,v in table.sortedhash(reused) do if v>0 then nr=nr+1 r[nr]=k..":"..v end end local n=nl+nr if n>0 then l=nl>0 and concat(l) or "none" r=nr>0 and concat(r) or "none" return format("%s seconds, %s processed, threshold %s seconds, loaded: %s, reused: %s", statistics.elapsedtime(schemes),n,threshold,l,r) else return nil end end) local httprequest=http.request local toquery=url.toquery local function fetchstring(url,data) local q=data and toquery(data) if q then url=url.."?"..q end local reply=httprequest(url) return reply end schemes.fetchstring=fetchstring function schemes.fetchtable(url,data) local reply=fetchstring(url,data) if reply then local s=load("return "..reply) if s then return s() end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-lua"] = package.loaded["data-lua"] or true -- original size: 4237, stripped down to: 3177 if not modules then modules={} end modules ['data-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers,package=resolvers,package local gsub=string.gsub local concat=table.concat local addsuffix=file.addsuffix local P,S,Cs,lpegmatch=lpeg.P,lpeg.S,lpeg.Cs,lpeg.match local luasuffixes={ 'tex','lua' } local libsuffixes={ 'lib' } local luaformats={ 'TEXINPUTS','LUAINPUTS' } local libformats={ 'CLUAINPUTS' } local helpers=package.helpers or {} local methods=helpers.methods or {} trackers.register("resolvers.libraries",function(v) helpers.trace=v end) trackers.register("resolvers.locating",function(v) helpers.trace=v end) helpers.report=logs.reporter("resolvers","libraries") helpers.sequence={ "already loaded", "preload table", "lua variable format", "lib variable format", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } local pattern=Cs(P("!")^0/""*(P("/")*P(-1)/"/"+P("/")^1/"/"+1)^0) function helpers.cleanpath(path) return resolvers.resolve(lpegmatch(pattern,path)) end local loadedaslib=helpers.loadedaslib local getextraluapaths=package.extraluapaths local getextralibpaths=package.extralibpaths local registerpath=helpers.registerpath local lualibfile=helpers.lualibfile local luaformatpaths local libformatpaths local function getluaformatpaths() if not luaformatpaths then luaformatpaths={} for i=1,#luaformats do registerpath("lua format","lua",luaformatpaths,resolvers.expandedpathlistfromvariable(luaformats[i])) end end return luaformatpaths end local function getlibformatpaths() if not libformatpaths then libformatpaths={} for i=1,#libformats do registerpath("lib format","lib",libformatpaths,resolvers.expandedpathlistfromvariable(libformats[i])) end end return libformatpaths end local function loadedbyformat(name,rawname,suffixes,islib,what) local trace=helpers.trace local report=helpers.report for i=1,#suffixes do local format=suffixes[i] local resolved=resolvers.findfile(name,format) or "" if trace then report("%s format, identifying %a using format %a",what,name,format) end if resolved~="" then if trace then report("%s format, %a found on %a",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbyformat=loadedbyformat methods["lua variable format"]=function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lua",#getluaformatpaths()) end return loadedbyformat(addsuffix(lualibfile(name),"lua"),name,luasuffixes,false,"lua") end methods["lib variable format"]=function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lib",#getlibformatpaths()) end return loadedbyformat(addsuffix(lualibfile(name),os.libsuffix),name,libsuffixes,true,"lib") end resolvers.loadlualib=require end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-aux"] = package.loaded["data-aux"] or true -- original size: 2394, stripped down to: 2005 if not modules then modules={} end modules ['data-aux']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find=string.find local type,next=type,next local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local resolvers=resolvers local report_scripts=logs.reporter("resolvers","scripts") function resolvers.updatescript(oldname,newname) local scriptpath="scripts/context/lua" newname=file.addsuffix(newname,"lua") local oldscript=resolvers.cleanpath(oldname) if trace_locating then report_scripts("to be replaced old script %a",oldscript) end local newscripts=resolvers.findfiles(newname) or {} if #newscripts==0 then if trace_locating then report_scripts("unable to locate new script") end else for i=1,#newscripts do local newscript=resolvers.cleanpath(newscripts[i]) if trace_locating then report_scripts("checking new script %a",newscript) end if oldscript==newscript then if trace_locating then report_scripts("old and new script are the same") end elseif not find(newscript,scriptpath) then if trace_locating then report_scripts("new script should come from %a",scriptpath) end elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then if trace_locating then report_scripts("invalid new script name") end else local newdata=io.loaddata(newscript) if newdata then if trace_locating then report_scripts("old script content replaced by new content") end io.savedata(oldscript,newdata) break elseif trace_locating then report_scripts("unable to load new script") end end end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tmf"] = package.loaded["data-tmf"] or true -- original size: 2600, stripped down to: 1627 if not modules then modules={} end modules ['data-tmf']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers=resolvers local report_tds=logs.reporter("resolvers","tds") function resolvers.load_tree(tree,resolve) if type(tree)=="string" and tree~="" then local getenv,setenv=resolvers.getenv,resolvers.setenv local texos="texmf-"..os.platform local oldroot=environment.texroot local newroot=file.collapsepath(tree) local newtree=file.join(newroot,texos) local newpath=file.join(newtree,"bin") if not lfs.isdir(newtree) then report_tds("no %a under tree %a",texos,tree) os.exit() end if not lfs.isdir(newpath) then report_tds("no '%s/bin' under tree %a",texos,tree) os.exit() end local texmfos=newtree environment.texroot=newroot environment.texos=texos environment.texmfos=texmfos if resolve then resolvers.luacnfspec=resolvers.resolve(resolvers.luacnfspec) end setenv('SELFAUTOPARENT',newroot) setenv('SELFAUTODIR',newtree) setenv('SELFAUTOLOC',newpath) setenv('TEXROOT',newroot) setenv('TEXOS',texos) setenv('TEXMFOS',texmfos) setenv('TEXMFCNF',resolvers.luacnfspec,true) setenv('PATH',newpath..io.pathseparator..getenv('PATH')) report_tds("changing from root %a to %a",oldroot,newroot) report_tds("prepending %a to PATH",newpath) report_tds("setting TEXMFCNF to %a",resolvers.luacnfspec) report_tds() end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true -- original size: 2654, stripped down to: 2301 if not modules then modules={} end modules ['data-lst']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,concat,upper,format=string.find,table.concat,string.upper,string.format local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs resolvers.listers=resolvers.listers or {} local resolvers=resolvers local report_lists=logs.reporter("resolvers","lists") local function tabstr(str) if type(str)=='table' then return concat(str," | ") else return str end end function resolvers.listers.variables(pattern) local instance=resolvers.instance local environment=instance.environment local variables=instance.variables local expansions=instance.expansions local pattern=upper(pattern or "") local configured={} local order=instance.order for i=1,#order do for k,v in next,order[i] do if v~=nil and configured[k]==nil then configured[k]=v end end end local env=fastcopy(environment) local var=fastcopy(variables) local exp=fastcopy(expansions) for key,value in sortedpairs(configured) do if key~="" and (pattern=="" or find(upper(key),pattern)) then report_lists(key) report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") report_lists(" var: %s",tabstr(configured[key]) or "unset") report_lists(" exp: %s",tabstr(expansions[key]) or "unset") report_lists(" res: %s",tabstr(resolvers.resolve(expansions[key])) or "unset") end end instance.environment=fastcopy(env) instance.variables=fastcopy(var) instance.expansions=fastcopy(exp) end local report_resolved=logs.reporter("system","resolved") function resolvers.listers.configurations() local configurations=resolvers.instance.specification for i=1,#configurations do report_resolved("file : %s",resolvers.resolve(configurations[i])) end report_resolved("") local list=resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.luacnfspec)) for i=1,#list do local li=resolvers.resolve(list[i]) if lfs.isdir(li) then report_resolved("path - %s",li) else report_resolved("path + %s",li) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-lib"] = package.loaded["util-lib"] or true -- original size: 11136, stripped down to: 5549 if not modules then modules={} end modules ['util-lib']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find=string.gsub,string.find local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles local loaded=package.loaded local report_swiglib=logs.reporter("swiglib") local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end) local done=false local function requireswiglib(required,version) local trace_swiglib=trace_swiglib or package.helpers.trace local library=loaded[required] if library==nil then local required_full=gsub(required,"%.","/") local required_path=pathpart(required_full) local required_base=nameonly(required_full) local required_name=required_base.."."..os.libsuffix local version=type(version)=="string" and version~="" and version or false local engine=environment.ownmain or false if trace_swiglib and not done then local list=resolvers.expandedpathlistfromvariable("lib") for i=1,#list do report_swiglib("tds path %i: %s",i,list[i]) end end local function found(locate,asked_library,how,...) if trace_swiglib then report_swiglib("checking %s: %a",how,asked_library) end return locate(asked_library,...) end local function check(locate,...) local found=nil if version then local asked_library=joinfile(required_path,version,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found=locate(asked_library,...) end if not found or found=="" then local asked_library=joinfile(required_path,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found=locate(asked_library,...) end return found and found~="" and found or false end local function attempt(checkpattern) if trace_swiglib then report_swiglib("checking tds lib paths strictly") end local found=findfile and check(findfile,"lib") if found and (not checkpattern or find(found,checkpattern)) then return found end if trace_swiglib then report_swiglib("checking tds lib paths with wildcard") end local asked_library=joinfile(required_path,".*",required_name) if trace_swiglib then report_swiglib("checking %s: %a","latest version",asked_library) end local list=findfiles(asked_library,"lib",true) if list and #list>0 then table.sort(list) local found=list[#list] if found and (not checkpattern or find(found,checkpattern)) then return found end end if trace_swiglib then report_swiglib("checking lib paths") end package.extralibpath(environment.ownpath) local paths=package.libpaths() for i=1,#paths do local found=check(lfs.isfile) if found and (not checkpattern or find(found,checkpattern)) then return found end end return false end local found_library=nil if engine then if trace_swiglib then report_swiglib("attemp 1, engine %a",engine) end found_library=attempt("/"..engine.."/") if not found_library then if trace_swiglib then report_swiglib("attemp 2, no engine",asked_library) end found_library=attempt() end else found_library=attempt() end if not found_library then if trace_swiglib then report_swiglib("not found: %a",required) end library=false else local path=pathpart(found_library) local base=nameonly(found_library) dir.push(path) if trace_swiglib then report_swiglib("found: %a",found_library) end local message=nil local opener="luaopen_"..required_base library,message=package.loadlib(found_library,opener) local libtype=type(library) if libtype=="function" then library=library() else report_swiglib("load error: %a returns %a, message %a",opener,libtype,message or "no message") library=false end dir.pop() end if not library then report_swiglib("unknown: %a",required) elseif trace_swiglib then report_swiglib("stored: %a",required) end loaded[required]=library else report_swiglib("reused: %a",required) end return library end local savedrequire=require function require(name,version) if find(name,"^swiglib%.") then return requireswiglib(name,version) else return savedrequire(name) end end local swiglibs={} function swiglib(name,version) local library=swiglibs[name] if not library then statistics.starttiming(swiglibs) if trace_swiglib then report_swiglib("loading %a",name) end library=requireswiglib("swiglib."..name,version) swiglibs[name]=library statistics.stoptiming(swiglibs) end return library end statistics.register("used swiglibs",function() if next(swiglibs) then return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs)) end end) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-sta"] = package.loaded["luat-sta"] or true -- original size: 5703, stripped down to: 2507 if not modules then modules={} end modules ['luat-sta']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local gmatch,match=string.gmatch,string.match local type=type states=states or {} local states=states states.data=states.data or {} local data=states.data states.hash=states.hash or {} local hash=states.hash states.tag=states.tag or "" states.filename=states.filename or "" function states.save(filename,tag) tag=tag or states.tag filename=file.addsuffix(filename or states.filename,'lus') io.savedata(filename, "-- generator : luat-sta.lua\n".."-- state tag : "..tag.."\n\n"..table.serialize(data[tag or states.tag] or {},true) ) end function states.load(filename,tag) states.filename=filename states.tag=tag or "whatever" states.filename=file.addsuffix(states.filename,'lus') data[states.tag],hash[states.tag]=(io.exists(filename) and dofile(filename)) or {},{} end local function set_by_tag(tag,key,value,default,persistent) local d,h=data[tag],hash[tag] if d then if type(d)=="table" then local dkey,hkey=key,key local pre,post=match(key,"(.+)%.([^%.]+)$") if pre and post then for k in gmatch(pre,"[^%.]+") do local dk=d[k] if not dk then dk={} d[k]=dk elseif type(dk)=="string" then break end d=dk end dkey,hkey=post,key end if value==nil then value=default elseif value==false then elseif persistent then value=value or d[dkey] or default else value=value or default end d[dkey],h[hkey]=value,value elseif type(d)=="string" then data[tag],hash[tag]=value,value end end end local function get_by_tag(tag,key,default) local h=hash[tag] if h and h[key] then return h[key] else local d=data[tag] if d then for k in gmatch(key,"[^%.]+") do local dk=d[k] if dk~=nil then d=dk else return default end end if d==false then return false else return d or default end end end end states.set_by_tag=set_by_tag states.get_by_tag=get_by_tag function states.set(key,value,default,persistent) set_by_tag(states.tag,key,value,default,persistent) end function states.get(key,default) return get_by_tag(states.tag,key,default) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true -- original size: 5951, stripped down to: 4922 if not modules then modules={} end modules ['luat-fmt']={ version=1.001, comment="companion to mtxrun", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format=string.format local concat=table.concat local quoted=string.quoted local luasuffixes=utilities.lua.suffixes local report_format=logs.reporter("resolvers","formats") local function primaryflags() local trackers=environment.argument("trackers") local directives=environment.argument("directives") local flags={} if trackers and trackers~="" then flags={ "--trackers="..quoted(trackers) } end if directives and directives~="" then flags={ "--directives="..quoted(directives) } end if environment.argument("jit") then flags={ "--jiton" } end return concat(flags," ") end function environment.make_format(name) local engine=environment.ownmain or "luatex" local olddir=dir.current() local path=caches.getwritablepath("formats",engine) or "" if path~="" then lfs.chdir(path) end report_format("using format path %a",dir.current()) local texsourcename=file.addsuffix(name,"mkiv") local fulltexsourcename=resolvers.findfile(texsourcename,"tex") or "" if fulltexsourcename=="" then texsourcename=file.addsuffix(name,"tex") fulltexsourcename=resolvers.findfile(texsourcename,"tex") or "" end if fulltexsourcename=="" then report_format("no tex source file with name %a (mkiv or tex)",name) lfs.chdir(olddir) return else report_format("using tex source file %a",fulltexsourcename) end local texsourcepath=dir.expandname(file.dirname(fulltexsourcename)) local specificationname=file.replacesuffix(fulltexsourcename,"lus") local fullspecificationname=resolvers.findfile(specificationname,"tex") or "" if fullspecificationname=="" then specificationname=file.join(texsourcepath,"context.lus") fullspecificationname=resolvers.findfile(specificationname,"tex") or "" end if fullspecificationname=="" then report_format("unknown stub specification %a",specificationname) lfs.chdir(olddir) return end local specificationpath=file.dirname(fullspecificationname) local usedluastub=nil local usedlualibs=dofile(fullspecificationname) if type(usedlualibs)=="string" then usedluastub=file.join(file.dirname(fullspecificationname),usedlualibs) elseif type(usedlualibs)=="table" then report_format("using stub specification %a",fullspecificationname) local texbasename=file.basename(name) local luastubname=file.addsuffix(texbasename,luasuffixes.lua) local lucstubname=file.addsuffix(texbasename,luasuffixes.luc) report_format("creating initialization file %a",luastubname) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then report_format("using compiled initialization file %a",lucstubname) usedluastub=lucstubname else report_format("using uncompiled initialization file %a",luastubname) usedluastub=luastubname end else report_format("invalid stub specification %a",fullspecificationname) lfs.chdir(olddir) return end local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\") report_format("running command: %s\n",command) os.spawn(command) local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem" local mp=dir.glob(pattern) if mp then for i=1,#mp do local name=mp[i] report_format("removing related mplib format %a",file.basename(name)) os.remove(name) end end lfs.chdir(olddir) end function environment.run_format(name,data,more) if name and name~="" then local engine=environment.ownmain or "luatex" local barename=file.removesuffix(name) local fmtname=caches.getfirstreadablefile(file.addsuffix(barename,"fmt"),"formats",engine) if fmtname=="" then fmtname=resolvers.findfile(file.addsuffix(barename,"fmt")) or "" end fmtname=resolvers.cleanpath(fmtname) if fmtname=="" then report_format("no format with name %a",name) else local barename=file.removesuffix(name) local luaname=file.addsuffix(barename,"luc") if not lfs.isfile(luaname) then luaname=file.addsuffix(barename,"lua") end if not lfs.isfile(luaname) then report_format("using format name %a",fmtname) report_format("no luc/lua file with name %a",barename) else local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "") report_format("running command: %s",command) os.spawn(command) end end end end end -- of closure -- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - -- original bytes : 670212 -- stripped bytes : 245255 -- end library merge -- We need this hack till luatex is fixed. -- -- for k,v in pairs(arg) do print(k,v) end if arg and (arg[0] == 'luatex' or arg[0] == 'luatex.exe') and arg[1] == "--luaonly" then arg[-1]=arg[0] arg[0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end arg[#arg]=nil arg[#arg]=nil end -- End of hack. local format, gsub, gmatch, match, find = string.format, string.gsub, string.gmatch, string.match, string.find local concat = table.concat local ownname = environment and environment.ownname or arg[0] or 'mtxrun.lua' local ownpath = gsub(match(ownname,"^(.+)[\\/].-$") or ".","\\","/") local owntree = environment and environment.ownpath or ownpath local ownlibs = { -- order can be made better 'l-lua.lua', 'l-package.lua', 'l-lpeg.lua', 'l-function.lua', 'l-string.lua', 'l-table.lua', 'l-io.lua', 'l-number.lua', 'l-set.lua', 'l-os.lua', 'l-file.lua', 'l-gzip.lua', 'l-md5.lua', 'l-url.lua', 'l-dir.lua', 'l-boolean.lua', 'l-unicode.lua', 'l-math.lua', 'util-str.lua', -- code might move to l-string 'util-tab.lua', 'util-sto.lua', 'util-prs.lua', 'util-fmt.lua', 'trac-set.lua', 'trac-log.lua', 'trac-inf.lua', -- was before trac-set 'trac-pro.lua', -- not really needed 'util-lua.lua', -- indeed here? 'util-deb.lua', 'util-mrg.lua', 'util-tpl.lua', 'util-env.lua', 'luat-env.lua', -- can come before inf (as in mkiv) 'lxml-tab.lua', 'lxml-lpt.lua', -- 'lxml-ent.lua', 'lxml-mis.lua', 'lxml-aux.lua', 'lxml-xml.lua', 'trac-xml.lua', 'data-ini.lua', 'data-exp.lua', 'data-env.lua', 'data-tmp.lua', 'data-met.lua', 'data-res.lua', 'data-pre.lua', 'data-inp.lua', 'data-out.lua', 'data-fil.lua', 'data-con.lua', 'data-use.lua', -- 'data-tex.lua', -- 'data-bin.lua', 'data-zip.lua', 'data-tre.lua', 'data-sch.lua', 'data-lua.lua', 'data-aux.lua', -- updater 'data-tmf.lua', 'data-lst.lua', 'util-lib.lua', -- swiglib 'luat-sta.lua', 'luat-fmt.lua', } local ownlist = { '.', ownpath , ownpath .. "/../sources", -- HH's development path owntree .. "/../../texmf-local/tex/context/base", owntree .. "/../../texmf-context/tex/context/base", owntree .. "/../../texmf-dist/tex/context/base", owntree .. "/../../texmf/tex/context/base", owntree .. "/../../../texmf-local/tex/context/base", owntree .. "/../../../texmf-context/tex/context/base", owntree .. "/../../../texmf-dist/tex/context/base", owntree .. "/../../../texmf/tex/context/base", } if ownpath == "." then table.remove(ownlist,1) end own = { name = ownname, path = ownpath, tree = owntree, list = ownlist, libs = ownlibs, } local function locate_libs() for l=1,#ownlibs do local lib = ownlibs[l] for p =1,#ownlist do local pth = ownlist[p] local filename = pth .. "/" .. lib local found = lfs.isfile(filename) if found then package.path = package.path .. ";" .. pth .. "/?.lua" -- in case l-* does a require return pth end end end end local function load_libs() local found = locate_libs() if found then for l=1,#ownlibs do local filename = found .. "/" .. ownlibs[l] local codeblob = loadfile(filename) if codeblob then codeblob() end end else resolvers = nil end end if not resolvers then load_libs() end if not resolvers then print("") print("Mtxrun is unable to start up due to lack of libraries. You may") print("try to run 'lua mtxrun.lua --selfmerge' in the path where this") print("script is located (normally under ..../scripts/context/lua) which") print("will make this script library independent.") os.exit() end -- verbosity local e_verbose = environment.arguments["verbose"] if e_verbose then trackers.enable("resolvers.locating") end -- some common flags (also passed through environment) local e_silent = environment.argument("silent") local e_noconsole = environment.argument("noconsole") local e_trackers = environment.argument("trackers") local e_directives = environment.argument("directives") local e_experiments = environment.argument("experiments") if e_silent == true then e_silent = "*" end if type(e_silent) == "string" then if type(e_directives) == "string" then e_directives = format("%s,logs.blocked={%s}",e_directives,e_silent) else e_directives = format("logs.blocked={%s}",e_silent) end end if e_noconsole then if type(e_directives) == "string" then e_directives = format("%s,logs.target=file",e_directives) else e_directives = format("logs.target=file") end end if e_trackers then trackers .enable(e_trackers) end if e_directives then directives .enable(e_directives) end if e_experiments then experiments.enable(e_experiments) end if not environment.trackers then environment.trackers = e_trackers end if not environment.directives then environment.directives = e_directives end if not environment.experiments then environment.experiments = e_experiments end -- local instance = resolvers.reset() local helpinfo = [[ mtxrun ConTeXt TDS Runner Tool 1.31 run an mtx script (lua prefered method) (), no script gives list run a script or program (texmfstart method) () resolve prefixed arguments run internally (using preloaded libs) run script using built in libraries (same as ) locate given filename in database (default) or system ( ) use texmf tree cf. env texmfstart_tree or texmfstarttree use given texmf tree (default file: setuptex.tmf) use given (tmf) environment file go to given path before execution only execute when given file has changed (md checksum) only execute when given file has changed (time stamp) create stubs for (context related) scripts remove stubs (context related) scripts paths where stubs wil be written create windows (mswin) stubs create unix (linux) stubs give a bit more info enable given trackers format or backend launch editor with found file launch files like manuals, assumes os support () run a script and time its run regenerate databases if needed (handy when used to run context in an editor) use kpse as fallback (when no mkiv and cache installed, often slower) force using kpse (handy when no mkiv and cache installed but less functionality) show supported prefixes generate file database show configuration variables show configuration order show (known) directives show (known) trackers show (known) experiments expand complex variable expand variable (resolve paths) expand variable (resolve references) show path expansion of ... report value of variable report file location report path of file filter variables ]] local application = logs.application { name = "mtxrun", banner = "ConTeXt TDS Runner Tool 1.31", helpinfo = helpinfo, } local report = application.report messages = messages or { } -- for the moment runners = runners or { } -- global (might become local) runners.applications = { ["lua"] = "luatex --luaonly", ["luc"] = "luatex --luaonly", ["pl"] = "perl", ["py"] = "python", ["rb"] = "ruby", } runners.suffixes = { 'rb', 'lua', 'py', 'pl' } runners.registered = { texexec = { 'texexec.rb', false }, -- context mkii runner (only tool not to be luafied) texutil = { 'texutil.rb', true }, -- old perl based index sorter for mkii (old versions need it) texfont = { 'texfont.pl', true }, -- perl script that makes mkii font metric files texfind = { 'texfind.pl', false }, -- perltk based tex searching tool, mostly used at pragma texshow = { 'texshow.pl', false }, -- perltk based context help system, will be luafied -- texwork = { 'texwork.pl', false }, -- perltk based editing environment, only used at pragma makempy = { 'makempy.pl', true }, mptopdf = { 'mptopdf.pl', true }, pstopdf = { 'pstopdf.rb', true }, -- converts ps (and some more) images, does some cleaning (replaced) -- examplex = { 'examplex.rb', false }, concheck = { 'concheck.rb', false }, runtools = { 'runtools.rb', true }, textools = { 'textools.rb', true }, tmftools = { 'tmftools.rb', true }, ctxtools = { 'ctxtools.rb', true }, rlxtools = { 'rlxtools.rb', true }, pdftools = { 'pdftools.rb', true }, mpstools = { 'mpstools.rb', true }, -- exatools = { 'exatools.rb', true }, xmltools = { 'xmltools.rb', true }, -- luatools = { 'luatools.lua', true }, mtxtools = { 'mtxtools.rb', true }, pdftrimwhite = { 'pdftrimwhite.pl', false }, } runners.launchers = { windows = { }, unix = { }, } -- like runners.libpath("framework"): looks on script's subpath function runners.libpath(...) package.prepend_libpath(file.dirname(environment.ownscript),...) package.prepend_libpath(file.dirname(environment.ownname) ,...) end function runners.prepare() local checkname = environment.argument("ifchanged") if type(checkname) == "string" and checkname ~= "" then local oldchecksum = file.loadchecksum(checkname) local newchecksum = file.checksum(checkname) if oldchecksum == newchecksum then if e_verbose then report("file '%s' is unchanged",checkname) end return "skip" elseif e_verbose then report("file '%s' is changed, processing started",checkname) end file.savechecksum(checkname) end local touchname = environment.argument("iftouched") if type(touchname) == "string" and touchname ~= "" then local oldname, newname = string.splitup(touchname, ",") if oldname and newname and oldname ~= "" and newname ~= "" then if not file.needs_updating(oldname,newname) then if e_verbose then report("file '%s' and '%s' have same age",oldname,newname) end return "skip" elseif e_verbose then report("file '%s' is older than '%s'",oldname,newname) end end end local runpath = environment.argument("path") if type(runpath) == "string" and not lfs.chdir(runpath) then report("unable to change to path '%s'",runpath) return "error" end runners.prepare = function() end return "run" end function runners.execute_script(fullname,internal,nosplit) local noquote = environment.argument("noquotes") if fullname and fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then local path, name, suffix = file.splitname(fullname) local result = "" if path ~= "" then result = fullname elseif name then name = gsub(name,"^int[%a]*:",function() internal = true return "" end ) name = gsub(name,"^script:","") if suffix == "" and runners.registered[name] and runners.registered[name][1] then name = runners.registered[name][1] suffix = file.suffix(name) end if suffix == "" then -- loop over known suffixes for _,s in pairs(runners.suffixes) do result = resolvers.findfile(name .. "." .. s, 'texmfscripts') if result ~= "" then break end end elseif runners.applications[suffix] then result = resolvers.findfile(name, 'texmfscripts') else -- maybe look on path result = resolvers.findfile(name, 'other text files') end end if result and result ~= "" then if not no_split then local before, after = environment.splitarguments(fullname) -- already done environment.arguments_before, environment.arguments_after = before, after end if internal then arg = { } for _,v in pairs(environment.arguments_after) do arg[#arg+1] = v end environment.ownscript = result dofile(result) else local texmfcnf = resolvers.getenv("TEXMFCNF") if not texmfcnf or texmfcnf == "" then texmfcnf = resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.resolve(resolvers.luacnfspec))) resolvers.setenv("TEXMFCNF",table.concat(texmfcnf,";")) -- for running texexec etc (after tl change to texmf-dist) end local binary = runners.applications[file.suffix(result)] result = string.quoted(string.unquoted(result)) -- if string.match(result,' ') and not string.match(result,"^\".*\"$") then -- result = '"' .. result .. '"' -- end if binary and binary ~= "" then result = binary .. " " .. result end local command = result .. " " .. environment.reconstructcommandline(environment.arguments_after,noquote) if e_verbose then report() report("executing: %s",command) report() report() io.flush() end -- no os.exec because otherwise we get the wrong return value local code = os.execute(command) -- maybe spawn if code == 0 then return true else if binary then binary = file.addsuffix(binary,os.binsuffix) for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do if lfs.isfile(file.join(p,binary)) then return false end end report() report("This script needs '%s' which seems not to be installed.",binary) report() end return false end end end end end return false end function runners.execute_program(fullname) local noquote = environment.argument("noquotes") if fullname and fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then local before, after = environment.splitarguments(fullname) for k=1,#after do after[k] = resolvers.resolve(after[k]) end environment.initializearguments(after) fullname = gsub(fullname,"^bin:","") local command = fullname .. " " .. (environment.reconstructcommandline(after or "",noquote) or "") report() report("executing: %s",command) report() report() io.flush() local code = os.exec(command) -- (fullname,unpack(after)) does not work / maybe spawn return code == 0 end end return false end -- the --usekpse flag will fallback (not default) on kpse (hm, we can better update mtx-stubs) local windows_stub = '@echo off\013\010setlocal\013\010set ownpath=%%~dp0%%\013\010texlua "%%ownpath%%mtxrun.lua" --usekpse --execute %s %%*\013\010endlocal\013\010' local unix_stub = '#!/bin/sh\010mtxrun --usekpse --execute %s \"$@\"\010' function runners.handle_stubs(create) local stubpath = environment.argument('stubpath') or '.' -- 'auto' no longer subpathssupported local windows = environment.argument('windows') or environment.argument('mswin') or false local unix = environment.argument('unix') or environment.argument('linux') or false if not windows and not unix then if os.platform == "unix" then unix = true else windows = true end end for _,v in pairs(runners.registered) do local name, doit = v[1], v[2] if doit then local base = gsub(file.basename(name), "%.(.-)$", "") if create then if windows then io.savedata(file.join(stubpath,base..".bat"),format(windows_stub,name)) report("windows stub for '%s' created",base) end if unix then io.savedata(file.join(stubpath,base),format(unix_stub,name)) report("unix stub for '%s' created",base) end else if windows and (os.remove(file.join(stubpath,base..'.bat')) or os.remove(file.join(stubpath,base..'.cmd'))) then report("windows stub for '%s' removed", base) end if unix and (os.remove(file.join(stubpath,base)) or os.remove(file.join(stubpath,base..'.sh'))) then report("unix stub for '%s' removed",base) end end end end end function runners.resolve_string(filename) if filename and filename ~= "" then runners.report_location(resolvers.resolve(filename)) end end -- differs from texmfstart where locate appends .com .exe .bat ... todo function runners.locate_file(filename) -- was given file but only searches in tree if filename and filename ~= "" then if environment.argument("first") then runners.report_location(resolvers.findfile(filename)) -- resolvers.dowithfilesandreport(resolvers.findfile,filename) elseif environment.argument("all") then local result, status = resolvers.findfiles(filename) if status and environment.argument("detail") then runners.report_location(status) else runners.report_location(result) end else runners.report_location(resolvers.findgivenfile(filename)) -- resolvers.dowithfilesandreport(resolvers.findgivenfile,filename) end end end function runners.locate_platform() runners.report_location(os.platform) end function runners.report_location(result) if type(result) == "table" then for i=1,#result do if i > 1 then io.write("\n") end io.write(result[i]) end else io.write(result) end end function runners.edit_script(filename) -- we assume that gvim is present on most systems (todo: also in cnf file) local editor = os.getenv("MTXRUN_EDITOR") or os.getenv("TEXMFSTART_EDITOR") or os.getenv("EDITOR") or 'gvim' local rest = resolvers.resolve(filename) if rest ~= "" then local command = editor .. " " .. rest if e_verbose then report() report("starting editor: %s",command) report() report() end os.launch(command) end end function runners.save_script_session(filename, list) local t = { } for i=1,#list do local key = list[i] t[key] = environment.arguments[key] end io.savedata(filename,table.serialize(t,true)) end function runners.load_script_session(filename) if lfs.isfile(filename) then local t = io.loaddata(filename) if t then t = loadstring(t) if t then t = t() end for key, value in pairs(t) do environment.arguments[key] = value end end end end function resolvers.launch(str) -- maybe we also need to test on mtxrun.launcher.suffix environment -- variable or on windows consult the assoc and ftype vars and such local launchers = runners.launchers[os.platform] if launchers then local suffix = file.suffix(str) if suffix then local runner = launchers[suffix] if runner then str = runner .. " " .. str end end end os.launch(str) end function runners.launch_file(filename) trackers.enable("resolvers.locating") local allresults = environment.arguments["all"] local pattern = environment.arguments["pattern"] if not pattern or pattern == "" then pattern = filename end if not pattern or pattern == "" then report("provide name or --pattern=") else local t = resolvers.findfiles(pattern,nil,allresults) if not t or #t == 0 then t = resolvers.findfiles("*/" .. pattern,nil,allresults) end if not t or #t == 0 then t = resolvers.findfiles("*/" .. pattern .. "*",nil,allresults) end if t and #t > 0 then if allresults then for _, v in pairs(t) do report("launching %s", v) resolvers.launch(v) end else report("launching %s", t[1]) resolvers.launch(t[1]) end else report("no match for %s", pattern) end end end local mtxprefixes = { { "^mtx%-", "mtx-" }, { "^mtx%-t%-", "mtx-t-" }, } function runners.find_mtx_script(filename) local function found(name) local path = file.dirname(name) if path and path ~= "" then return false else local fullname = own and own.path and file.join(own.path,name) return io.exists(fullname) and fullname end end filename = file.addsuffix(filename,"lua") local basename = file.removesuffix(file.basename(filename)) local suffix = file.suffix(filename) -- qualified path, raw name local fullname = file.is_qualified_path(filename) and io.exists(filename) and filename if fullname and fullname ~= "" then return fullname end -- current path, raw name fullname = "./" .. filename fullname = io.exists(fullname) and fullname if fullname and fullname ~= "" then return fullname end -- mtx- prefix checking for i=1,#mtxprefixes do local mtxprefix = mtxprefixes[i] mtxprefix = find(filename,mtxprefix[1]) and "" or mtxprefix[2] -- context namespace, mtx- fullname = mtxprefix .. filename fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end -- context namespace, mtx-s fullname = mtxprefix .. basename .. "s" .. "." .. suffix fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end -- context namespace, mtx- fullname = mtxprefix .. gsub(basename,"s$","") .. "." .. suffix fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end end -- context namespace, just fullname = resolvers.findfile(filename) return fullname end function runners.register_arguments(...) local arguments = environment.arguments_after local passedon = { ... } for i=#passedon,1,-1 do local pi = passedon[i] if pi then table.insert(arguments,1,pi) end end end function runners.execute_ctx_script(filename,...) runners.register_arguments(...) local arguments = environment.arguments_after local fullname = runners.find_mtx_script(filename) or "" if file.suffix(fullname) == "cld" then -- handy in editors where we force --autopdf report("running cld script: %s",filename) table.insert(arguments,1,fullname) table.insert(arguments,"--autopdf") fullname = runners.find_mtx_script("context") or "" end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() -- fullname = runners.find_mtx_script(filename) or "" end -- that should do it if fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then -- load and save ... kind of undocumented arg = { } for _,v in pairs(arguments) do arg[#arg+1] = resolvers.resolve(v) end environment.initializearguments(arg) local loadname = environment.arguments['load'] if loadname then if type(loadname) ~= "string" then loadname = file.basename(fullname) end loadname = file.replacesuffix(loadname,"cfg") runners.load_script_session(loadname) end filename = environment.files[1] if e_verbose then report("using script: %s\n",fullname) end environment.ownscript = fullname dofile(fullname) local savename = environment.arguments['save'] if savename then local save_list = runners.save_list if save_list and next(save_list) then if type(savename) ~= "string" then savename = file.basename(fullname) end savename = file.replacesuffix(savename,"cfg") runners.save_script_session(savename,save_list) end end return true end else if filename == "" or filename == "help" then local context = resolvers.findfile("mtx-context.lua") trackers.enable("resolvers.locating") if context ~= "" then local result = dir.glob((gsub(context,"mtx%-context","mtx-*"))) -- () needed local valid = { } table.sort(result) for i=1,#result do local scriptname = result[i] local scriptbase = match(scriptname,".*mtx%-([^%-]-)%.lua") if scriptbase then local data = io.loaddata(scriptname) local banner, version = match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)") if banner then valid[#valid+1] = { scriptbase, version, banner } end end end if #valid > 0 then application.identify() report("no script name given, known scripts:") report() for k=1,#valid do local v = valid[k] report("%-12s %4s %s",v[1],v[2],v[3]) end end else report("no script name given") end else filename = file.addsuffix(filename,"lua") if file.is_qualified_path(filename) then report("unknown script '%s'",filename) else report("unknown script '%s' or 'mtx-%s'",filename,filename) end end return false end end function runners.prefixes() application.identify() report() report(concat(resolvers.allprefixes(true)," ")) end function runners.timedrun(filename) -- just for me if filename and filename ~= "" then runners.timed(function() os.execute(filename) end) end end function runners.timed(action) statistics.timed(action) end function runners.associate(filename) os.launch(filename) end function runners.gethelp(filename) local url = environment.argument("url") if url and url ~= "" then local command = string.gsub(environment.argument("command") or "unknown","^%s*\\*(.-)%s*$","%1") url = utilities.templates.replace(url,{ command = command }) os.launch(url) else report("no --url given") end end -- this is a bit dirty ... first we store the first filename and next we -- split the arguments so that we only see the ones meant for this script -- ... later we will use the second half local filename = environment.files[1] or "" local ok = true local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) instance.lsrmode = environment.argument("lsr") or false -- maybe the unset has to go to this level local is_mkii_stub = runners.registered[file.removesuffix(file.basename(filename))] local e_argument = environment.argument if e_argument("usekpse") or e_argument("forcekpse") or is_mkii_stub then resolvers.load_tree(e_argument('tree'),true) -- force resolve of TEXMFCNF os.setenv("engine","") os.setenv("progname","") local remapper = { otf = "opentype fonts", ttf = "truetype fonts", ttc = "truetype fonts", pfb = "type1 fonts", other = "other text files", } local progname = e_argument("progname") or 'context' local function kpse_initialized() texconfig.kpse_init = true local t = os.clock() local k = kpse.original.new("luatex",progname) local dummy = k:find_file("mtxrun.lua") -- so that we're initialized report("kpse fallback with progname '%s' initialized in %s seconds",progname,os.clock()-t) kpse_initialized = function() return k end return k end local findfile = resolvers.findfile local showpath = resolvers.showpath if e_argument("forcekpse") then function resolvers.findfile(name,kind) return (kpse_initialized():find_file(resolvers.cleanpath(name),(kind ~= "" and (remapper[kind] or kind)) or "tex") or "") or "" end function resolvers.showpath(name) return (kpse_initialized():show_path(name)) or "" end elseif e_argument("usekpse") or is_mkii_stub then resolvers.load() function resolvers.findfile(name,kind) local found = findfile(name,kind) or "" if found ~= "" then return found else return (kpse_initialized():find_file(resolvers.cleanpath(name),(kind ~= "" and (remapper[kind] or kind)) or "tex") or "") or "" end end function resolvers.showpath(name) local found = showpath(name) or "" if found ~= "" then return found else return (kpse_initialized():show_path(name)) or "" end end end function runners.loadbase() end else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") instance.renewcache = true trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") end end end resolvers.load_tree(e_argument('tree'),e_argument("resolve")) end if e_argument("script") or e_argument("scripts") then -- run a script by loading it (using libs), pass args runners.loadbase() if is_mkii_stub then ok = runners.execute_script(filename,false,true) else ok = runners.execute_ctx_script(filename) end elseif e_argument("selfmerge") then -- embed used libraries runners.loadbase() local found = locate_libs() if found then utilities.merger.selfmerge(own.name,own.libs,{ found }) end elseif e_argument("selfclean") then -- remove embedded libraries runners.loadbase() utilities.merger.selfclean(own.name) elseif e_argument("selfupdate") then runners.loadbase() trackers.enable("resolvers.locating") resolvers.updatescript(own.name,"mtxrun") elseif e_argument("ctxlua") or e_argument("internal") then -- run a script by loading it (using libs) runners.loadbase() ok = runners.execute_script(filename,true) elseif e_argument("execute") then -- execute script runners.loadbase() ok = runners.execute_script(filename) elseif e_argument("direct") then -- equals bin: runners.loadbase() ok = runners.execute_program(filename) elseif e_argument("edit") then -- edit file runners.loadbase() runners.edit_script(filename) elseif e_argument("launch") then runners.loadbase() runners.launch_file(filename) elseif e_argument("associate") then runners.associate(filename) elseif e_argument("gethelp") then runners.gethelp() elseif e_argument("makestubs") then -- make stubs (depricated) runners.handle_stubs(true) elseif e_argument("removestubs") then -- remove stub (depricated) runners.loadbase() runners.handle_stubs(false) elseif e_argument("resolve") then -- resolve string runners.loadbase() runners.resolve_string(filename) elseif e_argument("locate") then -- locate file (only database) runners.loadbase() runners.locate_file(filename) elseif e_argument("platform") or e_argument("show-platform") then -- locate platform runners.loadbase() runners.locate_platform() elseif e_argument("prefixes") then runners.loadbase() runners.prefixes() elseif e_argument("timedrun") then -- locate platform runners.loadbase() runners.timedrun(filename) elseif e_argument("variables") or e_argument("show-variables") or e_argument("expansions") or e_argument("show-expansions") then -- luatools: runners.execute_ctx_script("mtx-base","--expansions",filename) resolvers.load("nofiles") resolvers.listers.variables(e_argument("pattern")) elseif e_argument("configurations") or e_argument("show-configurations") then -- luatools: runners.execute_ctx_script("mtx-base","--configurations",filename) resolvers.load("nofiles") resolvers.listers.configurations() elseif e_argument("find-file") then -- luatools: runners.execute_ctx_script("mtx-base","--find-file",filename) resolvers.load() local e_all = e_argument("all") local e_pattern = e_argument("pattern") local e_format = e_argument("format") local finder = e_all and resolvers.findfiles or resolvers.findfile if not e_pattern then runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(finder,environment.files,e_format) elseif type(e_pattern) == "string" then resolvers.dowithfilesandreport(finder,{ e_pattern },e_format) end elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() local path = resolvers.findpath(filename, instance.my_format) if e_verbose then report(path) else print(path) end elseif e_argument("expand-braces") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-braces",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expandbraces, environment.files) elseif e_argument("expand-path") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-path",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expandpath, environment.files) elseif e_argument("expand-var") or e_argument("expand-variable") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expansion, environment.files) elseif e_argument("show-path") or e_argument("path-value") then -- luatools: runners.execute_ctx_script("mtx-base","--show-path",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.showpath, environment.files) elseif e_argument("var-value") or e_argument("show-value") then -- luatools: runners.execute_ctx_script("mtx-base","--show-value",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.variable,environment.files) elseif e_argument("format-path") then -- luatools: runners.execute_ctx_script("mtx-base","--format-path",filename) resolvers.load() report(caches.getwritablepath("format")) elseif e_argument("pattern") then -- luatools runners.execute_ctx_script("mtx-base","--pattern='" .. e_argument("pattern") .. "'",filename) elseif e_argument("generate") then -- luatools if filename and filename ~= "" then resolvers.load("nofiles") trackers.enable("resolvers.locating") resolvers.renew(filename) else instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() end e_verbose = true elseif e_argument("make") or e_argument("ini") or e_argument("compile") then -- luatools: runners.execute_ctx_script("mtx-base","--make",filename) resolvers.load() trackers.enable("resolvers.locating") environment.make_format(filename) elseif e_argument("run") then -- luatools runners.execute_ctx_script("mtx-base","--run",filename) elseif e_argument("fmt") then -- luatools runners.execute_ctx_script("mtx-base","--fmt",filename) elseif e_argument("help") and filename=='base' then -- luatools runners.execute_ctx_script("mtx-base","--help") elseif e_argument("version") then application.version() elseif e_argument("directives") then directives.show() elseif e_argument("trackers") then trackers.show() elseif e_argument("experiments") then experiments.show() elseif e_argument("exporthelp") then runners.loadbase() application.export(e_argument("exporthelp"),filename) elseif e_argument("help") or filename=='help' or filename == "" then application.help() elseif find(filename,"^bin:") then runners.loadbase() ok = runners.execute_program(filename) elseif is_mkii_stub then -- execute mkii script runners.loadbase() ok = runners.execute_script(filename,false,true) elseif false then runners.loadbase() ok = runners.execute_ctx_script(filename) if not ok then ok = runners.execute_script(filename) end elseif environment.files[1] == 'texmfcnf.lua' then -- so that we don't need to load mtx-base resolvers.load("nofiles") resolvers.listers.configurations() else runners.loadbase() runners.execute_ctx_script("mtx-base",filename) end if e_verbose then report() report("runtime: %0.3f seconds",os.runtime()) end if os.type ~= "windows" then texio.write("\n") -- is this still valid? end if ok == false then ok = 1 elseif ok == true or ok == nil then ok = 0 end -- os.exit(ok,true) -- true forces a cleanup in 5.2+ os.exit(ok) -- true forces a cleanup in 5.2+ but reports a wrong number then context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/mptopdf0000755000175000017500000000004711754241457025403 0ustar norbertnorbert#!/bin/sh mtxrun --script mptopdf "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/mtxworks0000755000175000017500000000005311754241457025625 0ustar norbertnorbert#!/bin/sh mtxrun --script texworks --start context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/luatools0000755000175000017500000000004411571377075025574 0ustar norbertnorbert#!/bin/sh mtxrun --script base "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/metatex0000755000175000017500000000004711754241457025401 0ustar norbertnorbert#!/bin/sh mtxrun --script metatex "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/context0000755000175000017500000000004711244221744025405 0ustar norbertnorbert#!/bin/sh mtxrun --script context "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/unix/pstopdf0000755000175000017500000000004712130471207025374 0ustar norbertnorbert#!/bin/sh mtxrun --script pstopdf "$@" context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/source/0000755000175000017500000000000012162137554024314 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/stubs/source/mtxrun_dll.c0000644000175000017500000001763111571377075026667 0ustar norbertnorbert/************************************************************************ Copyright: Public Domain Originally written in 2010 by Tomasz M. Trzeciak and Hans Hagen This program is derived from the 'runscript' program originally written in 2009 by T.M. Trzeciak. It has been adapted for use in ConTeXt MkIV. Comment: In ConTeXt MkIV we have two core scripts: luatools.lua and mtxrun.lua where the second one is used to launch other scripts. Normally a user will use a call like: mtxrun --script font --reload Here mtxrun is a lua script. In order to avoid the usage of a cmd file on windows this runner will start texlua directly. If the shared library luatex.dll is available, texlua will be started in the same process avoiding thus any additional overhead. Otherwise it will be spawned in a new proces. We also don't want to use other runners, like those that use kpse to locate the script as this is exactly what mtxrun itself is doing already. Therefore the runscript program is adapted to a more direct approach suitable for mtxrun. Compilation: with gcc (size optimized): gcc -Os -s -shared -o mtxrun.dll mtxrun_dll.c gcc -Os -s -o mtxrun.exe mtxrun_exe.c -L./ -lmtxrun with tcc (extra small size): tcc -shared -o mtxrun.dll mtxrun_dll.c tcc -o mtxrun.exe mtxrun_exe.c mtxrun.def ************************************************************************/ #include #include #include //#define STATIC #define IS_WHITESPACE(c) ((c == ' ') || (c == '\t')) #define MAX_CMD 32768 #define DIE(...) { \ fprintf( stderr, "mtxrun: " ); \ fprintf( stderr, __VA_ARGS__ ); \ return 1; \ } char texlua_name[] = "texlua"; // just a bare name, luatex strips the rest anyway static char cmdline[MAX_CMD]; static char dirpath[MAX_PATH]; static char progname[MAX_PATH]; static char scriptpath[MAX_PATH]; static char luatexpath[MAX_PATH]; HMODULE dllluatex = NULL; typedef int ( *mainlikeproc )( int, char ** ); #ifdef STATIC int main( int argc, char *argv[] ) #else __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) #endif { char *s, *luatexfname, *argstr, **lua_argv; int k, quoted, lua_argc; int passprogname = 0; // directory of this module/executable HMODULE module_handle = GetModuleHandle( "mtxrun.dll" ); // if ( module_handle == NULL ) exe path will be used, which is OK too k = (int) GetModuleFileName( module_handle, dirpath, MAX_PATH ); if ( !k || ( k == MAX_PATH ) ) DIE( "unable to determine a valid module name\n" ); s = strrchr(dirpath, '\\'); if ( s == NULL ) DIE( "no directory part in module path: %s\n", dirpath ); *(++s) = '\0'; //remove file name, leave trailing backslash // program name k = strlen(argv[0]); while ( k && (argv[0][k-1] != '/') && (argv[0][k-1] != '\\') ) k--; strcpy(progname, &argv[0][k]); s = progname; if ( s = strrchr(s, '.') ) *s = '\0'; // remove file extension part // script path strcpy( scriptpath, dirpath ); k = strlen(progname); if ( k < 6 ) k = 6; // in case the program name is shorter than "mtxrun" if ( strlen(dirpath) + k + 4 >= MAX_PATH ) DIE( "path too long: %s%s\n", dirpath, progname ); if ( strcmpi(progname,"mtxrun") == 0 ) { strcat( scriptpath, progname ); strcat( scriptpath, ".lua" ); } else if ( strcmpi(progname,"luatools") == 0 ) { strcat( scriptpath, "mtxrun.lua" ); strcpy( progname, "base" ); passprogname = 1; } else if ( strcmpi(progname,"texmfstart") == 0 ) { strcat( scriptpath, "mtxrun.lua" ); } else { strcat( scriptpath, "mtxrun.lua" ); passprogname = 1; } if ( GetFileAttributes(scriptpath) == INVALID_FILE_ATTRIBUTES ) DIE( "file not found: %s\n", scriptpath ); // find texlua.exe if ( !SearchPath( getenv( "PATH" ), // path to search (optional) "texlua.exe", // file name to search NULL, // file extension to add (optional) MAX_PATH, // output buffer size luatexpath, // output buffer pointer &luatexfname ) // pointer to a file part in the output buffer (optional) ) if ( !SearchPath( dirpath, // path to search (optional) "texlua.exe", // file name to search NULL, // file extension to add (optional) MAX_PATH, // output buffer size luatexpath, // output buffer pointer &luatexfname ) // pointer to a file part in the output buffer (optional) ) DIE( "unable to locate texlua.exe on the search path" ); // link directly with luatex.dll if available in texlua's dir strcpy( luatexfname, "luatex.dll" ); if ( dllluatex = LoadLibrary(luatexpath) ) { mainlikeproc dllluatexmain = (mainlikeproc) GetProcAddress( dllluatex, "dllluatexmain" ); if ( dllluatexmain == NULL ) DIE( "unable to locate dllluatexmain procedure in luatex.dll" ); // set up argument list for texlua script lua_argv = (char **)malloc( (argc + 4) * sizeof(char *) ); if ( lua_argv == NULL ) DIE( "out of memory\n" ); lua_argv[lua_argc=0] = texlua_name; lua_argv[++lua_argc] = scriptpath; // script to execute if (passprogname) { lua_argv[++lua_argc] = "--script"; lua_argv[++lua_argc] = progname; } for ( k = 1; k < argc; k++ ) lua_argv[++lua_argc] = argv[k]; lua_argv[++lua_argc] = NULL; // call texlua interpreter // dllluatexmain never returns, but we pretend that it does k = dllluatexmain( lua_argc, lua_argv ); if (lua_argv) free( lua_argv ); return k; } // we are still here, so no luatex.dll; spawn texlua.exe instead strcpy( luatexfname, "texlua.exe" ); strcpy( cmdline, "\"" ); strcat( cmdline, luatexpath ); strcat( cmdline, "\" \"" ); strcat( cmdline, scriptpath ); strcat( cmdline, "\"" ); if (passprogname) { strcat( cmdline, " --script " ); strcat( cmdline, progname ); } argstr = GetCommandLine(); // get the command line of this process if ( argstr == NULL ) DIE( "unable to retrieve the command line string\n" ); // skip over argv[0] in the argument string // (it can contain embedded double quotes if launched from cmd.exe!) for ( quoted = 0; (*argstr) && ( !IS_WHITESPACE(*argstr) || quoted ); argstr++ ) if (*argstr == '"') quoted = !quoted; // pass through all the arguments if ( strlen(cmdline) + strlen(argstr) >= MAX_CMD ) DIE( "command line string too long:\n%s%s\n", cmdline, argstr ); strcat( cmdline, argstr ); // create child process STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES;// | STARTF_USESHOWWINDOW; //si.dwFlags = STARTF_USESHOWWINDOW; //si.wShowWindow = SW_HIDE ; // can be used to hide console window (requires STARTF_USESHOWWINDOW flag) si.hStdInput = GetStdHandle( STD_INPUT_HANDLE ); si.hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE ); si.hStdError = GetStdHandle( STD_ERROR_HANDLE ); ZeroMemory( &pi, sizeof(pi) ); if( !CreateProcess( NULL, // module name (uses command line if NULL) cmdline, // command line NULL, // process security atrributes NULL, // thread security atrributes TRUE, // handle inheritance 0, // creation flags, e.g. CREATE_NEW_CONSOLE, CREATE_NO_WINDOW, DETACHED_PROCESS NULL, // pointer to environment block (uses parent if NULL) NULL, // starting directory (uses parent if NULL) &si, // STARTUPINFO structure &pi ) // PROCESS_INFORMATION structure ) DIE( "command execution failed: %s\n", cmdline ); DWORD ret = 0; CloseHandle( pi.hThread ); // thread handle is not needed if ( WaitForSingleObject( pi.hProcess, INFINITE ) == WAIT_OBJECT_0 ) { if ( !GetExitCodeProcess( pi.hProcess, &ret) ) DIE( "unable to retrieve process exit code: %s\n", cmdline ); } else DIE( "failed to wait for process termination: %s\n", cmdline ); CloseHandle( pi.hProcess ); // propagate exit code from the child process return ret; } context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/source/mtxrun_exe.c0000644000175000017500000000037211376503616026662 0ustar norbertnorbert// This is the .exe part of the mtxrun program, see mtxrun_dll.c // for more details. #include __declspec(dllimport) int dllrunscript( int argc, char *argv[] ); int main( int argc, char *argv[] ) { return dllrunscript( argc, argv ); } context-2013.05.28.20130704/texmf-dist/scripts/context/stubs/source/readme.txt0000644000175000017500000000226211376503616026316 0ustar norbertnorbertCopyright: The originally 'runscript' program was written by in 2009 by T.M.Trzeciak and is public domain. This derived mtxrun program is an adapted version by Hans Hagen. Comment: In ConTeXt MkIV we have two core scripts: luatools.lua and mtxrun.lua where the second one is used to launch other scripts. Normally a user will use a call like: mtxrun --script font --reload Here mtxrun is a lua script. In order to avoid the usage of a cmd file on windows this runner will start texlua directly. In TeXlive a runner is added for each cmd file but we don't want that overhead (and extra files). By using an exe we can call these scripts in batch files without the need for using call. We also don't want to use other runners, like those that use kpse to locate the script as this is exactly what mtxrun itself is doing already. Therefore the runscript program is adapted to a more direct approach suitable for mtxrun. Compilation: with gcc (size optimized): gcc -Os -s -shared -o mtxrun.dll mtxrun_dll.c gcc -Os -s -o mtxrun.exe mtxrun_exe.c -L./ -lmtxrun with tcc (ver. 0.9.24), extra small size tcc -shared -o runscript.dll runscript_dll.c tcc -o runscript.exe runscript_exe.c runscript.def context-2013.05.28.20130704/texmf-dist/scripts/context/perl/0000755000175000017500000000000012165205647022620 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/perl/path_tre.pm0000644000175000017500000000152310360341101024742 0ustar norbertnorbert#D \module #D [ file=path\_tre.pm, #D version=1999.05.05, #D title=Path modules, #D subtitle=selecting a path, #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 licen-en.pdf for #C details. #D Not yet documented, source will be cleaned up. package Tk::path_tre ; use Tk; require Tk::DirTree ; use base qw(Tk::DirTree); use strict; Construct Tk::Widget 'PathTree'; sub ClassInit { my ($class,$mw) = @_ ; return $class -> SUPER::ClassInit ($mw) } sub dirnames { my ( $w, $dir ) = @_ ; unless ($dir=~/\//) { $dir .= '/' } my @names = $w->Callback("-dircmd", $dir, $w->cget("-showhidden")); return( @names ) } __END__ context-2013.05.28.20130704/texmf-dist/scripts/context/perl/makempy.pl0000644000175000017500000002466711024176655024636 0ustar norbertnorberteval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' if 0; #D \module #D [ file=makempy.pl, #D version=2000.12.14, #D title=\METAFUN, #D subtitle=\METAPOST\ Text Graphics, #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 licen-en.pdf for #C details. # Tobias Burnus provided the code needed to proper testing # of binaries on UNIX as well as did some usefull suggestions # to improve the functionality. # This script uses GhostScript and PStoEdit as well as # pdfTeX, and if requested TeXEdit and ConTeXt. # todo: we can nowadays do without the intermediate step, because GS # can now handle PDF quite good use Getopt::Long ; use Config ; use strict ; $Getopt::Long::passthrough = 1 ; # no error message $Getopt::Long::autoabbrev = 1 ; # partial switch accepted my $help = 0 ; my $silent = 0 ; my $force = 0 ; my $noclean = 0 ; my $amethod = my $pmethod = my $gmethod = 0 ; my $format = "plain" ; # can be "context" for plain users too &GetOptions ( "help" => \$help , "silent" => \$silent , "force" => \$force , "pdftops" => \$pmethod , "xpdf" => \$pmethod , "gs" => \$gmethod , "ghostscript" => \$gmethod , "noclean" => \$noclean ) ; my $mpochecksum = 0 ; my %tex ; my %start ; my %stop ; $tex{plain} = "pdftex" ; $tex{latex} = "pdflatex" ; $tex{context} = "texexec --batch --once --interface=en --pdf" ; $start{plain} = '' ; $stop{plain} = '\end' ; $start{latex} = '\begin{document}' ; $stop{latex} = '\end{document}' ; $start{context} = '\starttext' ; $stop{context} = '\stoptext' ; my $ghostscript = "" ; my $pstoedit = "" ; my $pdftops = "" ; my $acroread = "" ; my $wereondos = ($Config{'osname'} =~ /dos|mswin/io) ; # Unix only: assume that "gs" in the path. We could also # use $ghostscipt = system "which gs" but this would require # that which is installedd on the system. sub checkenv { my ($var, $env) = @_ ; if ($var) { return $var } elsif ($ENV{$env}) { return $ENV{$env} } else { return $var } } $ghostscript = checkenv ($ghostscript, "GS_PROG" ) ; $ghostscript = checkenv ($ghostscript, "GS" ) ; $pstoedit = checkenv ($pstoedit , "PSTOEDIT") ; $pdftops = checkenv ($pdftops , "PDFTOPS" ) ; $acroread = checkenv ($acroread , "ACROREAD") ; sub setenv { my ($var, $unix, $win) = @_ ; if ($var) { return $var } elsif ($wereondos) { return $win } else { return $unix } } $ghostscript = setenv($ghostscript, "gs" , "gswin32c") ; $pstoedit = setenv($pstoedit , "pstoedit", "pstoedit") ; $pdftops = setenv($pdftops , "pdftops" , "pdftops" ) ; $acroread = setenv($acroread , "acroread", "" ) ; # Force a method if unknown. unless ($pmethod||$amethod||$gmethod) { if ($wereondos) { $pmethod = 1 } else { $amethod = 1 } } # Set the error redirection used under Unix: # stderr -> stdout my $logredirection = '>>' ; # This unfortunally doesn't work with the ksh and simple sh # # if (!$wereondos) # { $logredirection = '2>&1 >>' ; # Bash # $logredirection = '>>&' ; # tcsh, Bash # default $logredirection. } # Some TeX Code Snippets. my $macros = ' % auxiliary macros \input supp-mis.tex \def\startTEXpage[scale=#1]% {\output{} \batchmode \pdfoutput=1 \pdfcompresslevel=9 \hoffset=-1in \voffset=\hoffset \scratchcounter=#1 \divide\scratchcounter1000 \edef\TEXscale{\the\scratchcounter\space} \forgetall \setbox0=\vbox\bgroup} \def\stopTEXpage {\egroup \dimen0=\ht0 \advance\dimen0 \dp0 \setbox2=\vbox to 10\dimen0 {\pdfliteral{\TEXscale 0 0 \TEXscale 0 0 cm} \copy0 \pdfliteral{1 0 0 1 0 0 cm} \vfill} \wd2=10\wd0 \pdfpageheight=\ht2 \pdfpagewidth=\wd2 \ScaledPointsToBigPoints{\number\pdfpageheight}\pdfcropheight \ScaledPointsToBigPoints{\number\pdfpagewidth }\pdfcropwidth \expanded{\pdfpageattr{/CropBox [0 0 \pdfcropwidth \space \pdfcropheight]}} \shipout\hbox{\box2}} % end of auxiliary macros' ; sub report { return if $silent ; my $str = shift ; if ($str =~ /(.*?)\s+([\:\/])\s+(.*)/o) { if ($1 eq "") { $str = " " } else { $str = $2 } print sprintf("%22s $str %s\n",$1,$3) } } sub error { report("processing aborted : " . shift) ; exit } sub process { report("generating : " . shift) } sub banner { return if $silent ; print "\n" ; report ("MakeMPY 1.1 - MetaFun / PRAGMA ADE 2000-2004") ; print "\n" } my $metfile = "" ; # main metapost file my $mpofile = "" ; # metapost text specifiation file (provided) my $mpyfile = "" ; # metapost text picture file (generated) my $texfile = "" ; # temporary tex file my $pdffile = "" ; # temporary pdf file my $tmpfile = "" ; # temporary metapost file my $posfile = "" ; # temporary postscript file my $logfile = "" ; # temporary log file my $errfile = "" ; # final log file (with suffix log) sub show_help_info { banner ; report ("--help : this message" ) ; report ("--noclean : don't remove temporary files" ) ; report ("--force : force processing (ignore checksum)" ) ; report ("--silent : don't show messages" ) ; print "\n" ; report ("--pdftops : use pdftops (xpdf) pdf->ps") ; report ("--ghostscript : use ghostscript (gs) for pdf->ps") ; print "\n" ; report ("input file : metapost file with graphics") ; report ("programs needed : texexec and english context") ; report (" : pdftops from the xpdf suite, or") ; # page size buggy report (" : pdf2ps and ghostscript, and") ; report (" : pstoedit and ghostscript") ; report ("output file : metapost file with pictures") ; exit } sub check_input_file { my $file = $ARGV[0] ; if ((!defined($file))||($file eq "")) { banner ; error("no filename given") } else { $file =~ s/\.mp.*$//o ; $metfile = "$file.mp" ; $mpofile = "$file.mpo" ; $mpyfile = "$file.mpy" ; $logfile = "$file.log" ; $texfile = "mpy-$file.tex" ; $pdffile = "mpy-$file.pdf" ; $posfile = "mpy-$file.pos" ; $tmpfile = "mpy-$file.tmp" ; $errfile = "mpy-$file.log" ; if (! -f $metfile) { banner ; error("$metfile is empty") } elsif (-s $mpofile < 32) { unlink $mpofile ; # may exist with zero length unlink $mpyfile ; # get rid of left overs exit } else { banner ; report("processing file : $mpofile") } } } sub verify_check_sum # checksum calculation from perl documentation { return unless (open (MPO,"$mpofile")) ; $mpochecksum = do { local $/ ; unpack("%32C*",) % 65535 } ; close (MPO) ; return unless open (MPY,"$mpyfile") ; my $str = ; chomp $str ; close (MPY) ; if ($str =~ /^\%\s*mpochecksum\s*\:\s*(\d+)/o) { if ($mpochecksum eq $1) { report("mpo checksum : $mpochecksum / unchanged") ; exit unless $force } else { report("mpo checksum : $mpochecksum / changed") } } } sub cleanup_files { my @files = ; foreach (@files) { unless (/\.log/o) { unlink $_ } } } sub construct_tex_file { my $n = 0 ; unless (open (MPO, "<$mpofile")) { error("unable to open $mpofile") } unless (open (TEX, ">$texfile")) { error("unable to open $texfile") } my $textext = "" ; while () { s/\s*$//mois ; if (/\%\s*format=(\w+)/) { $format = $1 } else # if (!/^\%/) { if (/startTEXpage/o) { ++$n ; $textext .= "$start{$format}\n" ; $start{$format} = "" } $textext .= "$_\n" } } unless (defined($tex{$format})) { $format = "plain" } if ($format eq "context") { $macros = "" } # print TEX "$start{$format}\n$macros\n$textext\n$stop{$format}\n" ; print TEX "$start{$format}\n\n" if $start{$format} ; print TEX "$macros\n" if $macros ; print TEX "$textext\n" if $textext ; print TEX "$stop{$format}\n" if $stop{$format} ; close (MPO) ; close (TEX) ; report("tex format : $format") ; report("requested texts : $n") } sub construct_mpy_file { unless (open (TMP, "<$tmpfile")) { error("unable to open $tmpfile file") } unless (open (MPY, ">$mpyfile")) { error("unable to open $mpyfile file") } print MPY "% mpochecksum : $mpochecksum\n" ; my $copying = my $n = 0 ; while () # a simple sub is faster { if (s/beginfig/begingraphictextfig/o) { print MPY $_ ; $copying = 1 ; ++$n } elsif (s/endfig/endgraphictextfig/o) { print MPY $_ ; $copying = 0 } elsif ($copying) { print MPY $_ } } close (TMP) ; close (MPY) ; report("processed texts : $n") ; report("produced file : $mpyfile") } sub run { my ($resultfile, $program,$arguments) = @_ ; my $result = system("$program $arguments $logredirection $logfile") ; unless (-f $resultfile) { error("invalid `$program' run") } } sub make_pdf_pages { process ("pdf file") ; run ($pdffile, "$tex{$format}", "$texfile") } sub make_mp_figures { process ("postscript file") ; if ($pmethod) { run($posfile, "$pdftops", "-paper match $pdffile $posfile") } if ($gmethod) { run($posfile, "$ghostscript", "-q -sOutputFile=$posfile -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite $pdffile") } if ($amethod) { run($posfile, "$acroread", "-toPostScript -pairs $pdffile $posfile") } } sub make_mp_pictures_ps { process ("metapost file") ; run ($tmpfile, "$pstoedit", "-ssp -dt -f mpost $posfile $tmpfile") } sub make_mp_pictures_pdf { process ("metapost file") ; run ($tmpfile, "$pstoedit", "-ssp -dt -f mpost $pdffile $tmpfile") } if ($help) { show_help_info } check_input_file ; verify_check_sum ; cleanup_files ; construct_tex_file ; make_pdf_pages ; if (1) { make_mp_pictures_pdf ; } else { make_mp_figures ; make_mp_pictures_ps ; } construct_mpy_file ; # less save : rename $tmpfile, $mpyfile ; unless ($noclean) { cleanup_files } # a simple test file (needs context) # # % output=pdftex # # \starttext # # \startMPpage # graphictext # "\bf MAKE" # scaled 8 # zscaled (1,2) # withdrawcolor \MPcolor{blue} # withfillcolor \MPcolor{gray} # withpen pencircle scaled 5pt ; # \stopMPpage # # \stoptext context-2013.05.28.20130704/texmf-dist/scripts/context/perl/texfont.pl0000644000175000017500000013732410542457731024656 0ustar norbertnorberteval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' if 0; # This is an example of a crappy unstructured file but once # I know what should happen exactly, I will clean it up. # once it works all right, afmpl will be default # todo : ttf (partially doen already) # added: $pattern in order to avoid fuzzy shelle expansion of # filenames (not consistent over perl and shells); i hate that # kind of out of control features. #D \module #D [ file=texfont.pl, #D version=2004.02.06, % 2000.12.14 #D title=Font Handling, #D subtitle=installing and generating, #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 licen-en.pdf for #C details. #D For usage information, see \type {mfonts.pdf}. #D Todo : copy afm/pfb from main to local files to ensure metrics #D Todo : Wybo's help system #D Todo : list of encodings [texnansi, ec, textext] #D Thanks to George N. White III for solving a couple of bugs. #D Thanks to Adam T. Lindsay for adding Open Type support (and more). use strict ; my $savedoptions = join (" ",@ARGV) ; use Config ; use FindBin ; use File::Copy ; use Getopt::Long ; use Data::Dumper; $Getopt::Long::passthrough = 1 ; # no error message $Getopt::Long::autoabbrev = 1 ; # partial switch accepted # Unless a user has specified an installation path, we take # the dedicated font path or the local path. ## $dosish = ($Config{'osname'} =~ /dos|mswin/i) ; my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i) ; my $IsWin32 = ($^O =~ /MSWin32/i); my $SpacyPath = 0 ; # great, the win32api is not present in all perls BEGIN { $IsWin32 = ($^O =~ /MSWin32/i) ; $SpacyPath = 0 ; if ($IsWin32) { my $str = `kpsewhich -expand-path=\$TEXMF` ; $SpacyPath = ($str =~ / /) ; if ($SpacyPath) { require Win32::API; import Win32::API; } } } # great, glob changed to bsd glob in an incompatible way ... sigh, we now # have to catch a failed glob returning the pattern # # to stupid either: # # sub validglob { # my @globbed = glob(shift) ; # if ((@globbed) && (! -e $globbed[0])) { # return () ; # } else { # return @globbed ; # } # } # # so now we have: sub validglob { my @globbed = glob(shift) ; my @globout = () ; foreach my $file (@globbed) { push (@globout,$file) if (-e $file) ; } return @globout ; } sub GetShortPathName { my ($filename) = @_ ; return $filename unless (($IsWin32)&&($SpacyPath)) ; my $GetShortPathName = new Win32::API('kernel32', 'GetShortPathName', 'PPN', 'N') ; if(not defined $GetShortPathName) { die "Can't import API GetShortPathName: $!\n" ; } my $buffer = " " x 260; my $len = $GetShortPathName->Call($filename, $buffer, 260) ; return substr($buffer, 0, $len) ; } my $installpath = "" ; if (defined($ENV{TEXMFLOCAL})) { $installpath = "TEXMFLOCAL" ; } if (defined($ENV{TEXMFFONTS})) { $installpath = "TEXMFFONTS" ; } if ($installpath eq "") { $installpath = "TEXMFLOCAL" ; # redundant } my $encoding = "texnansi" ; my $vendor = "" ; my $collection = "" ; my $fontroot = "" ; #/usr/people/gwhite/texmf-fonts" ; my $help = 0 ; my $makepath = 0 ; my $show = 0 ; my $install = 0 ; my $sourcepath = "." ; my $passon = "" ; my $extend = "" ; my $narrow = "" ; my $slant = "" ; my $spaced = "" ; my $caps = "" ; my $noligs = 0 ; my $nofligs = 0 ; my $test = 0 ; my $virtual = 0 ; my $novirtual = 0 ; my $listing = 0 ; my $remove = 0 ; my $expert = 0 ; my $trace = 0 ; my $afmpl = 0 ; my $trees = 'TEXMFFONTS,TEXMFLOCAL,TEXMFEXTRA,TEXMFMAIN,TEXMFDIST' ; my $pattern = '' ; my $uselmencodings = 0 ; my $fontsuffix = "" ; my $namesuffix = "" ; my $batch = "" ; my $weight = "" ; my $width = "" ; my $preproc = 0 ; # atl: formerly OpenType switch my $variant = "" ; # atl: encoding variant my $extension = "pfb" ; # atl: default font extension my $lcdf = "" ; # atl: trigger for lcdf otftotfm my @cleanup = () ; # atl: build list of generated files to delete # todo: parse name for style, take face from command line # # @Faces = ("Serif","Sans","Mono") ; # @Styles = ("Slanted","Spaced", "Italic","Bold","BoldSlanted","BoldItalic") ; # # for $fac (@Faces) { for $sty (@Styles) { $FacSty{"$fac$sty"} = "" } } &GetOptions ( "help" => \$help, "makepath" => \$makepath, "noligs" => \$noligs, "nofligs" => \$nofligs, "show" => \$show, "install" => \$install, "encoding=s" => \$encoding, "variant=s" => \$variant, # atl: used as a suffix to $encfile only "vendor=s" => \$vendor, "collection=s" => \$collection, "fontroot=s" => \$fontroot, "sourcepath=s" => \$sourcepath, "passon=s" => \$passon, "slant=s" => \$slant, "spaced=s" => \$spaced, "extend=s" => \$extend, "narrow=s" => \$narrow, "listing" => \$listing, "remove" => \$remove, "test" => \$test, "virtual" => \$virtual, "novirtual" => \$novirtual, "caps=s" => \$caps, "batch" => \$batch, "weight=s" => \$weight, "width=s" => \$width, "expert" => \$expert, "afmpl" => \$afmpl, "afm2pl" => \$afmpl, "lm" => \$uselmencodings, "rootlist=s" => \$trees, "pattern=s" => \$pattern, "trace" => \$trace, # --verbose conflicts with --ve "preproc" => \$preproc, # atl: trigger conversion to pfb "lcdf" => \$lcdf ) ; # atl: trigger use of lcdf fonttoools # for/from Fabrice: my $own_path = "$FindBin::Bin/" ; $FindBin::RealScript =~ m/([^\.]*)(\.pl|\.bat|\.exe|)/io ; my $own_name = $1 ; my $own_type = $2 ; my $own_stub = "" ; if ($own_type =~ /pl/oi) { $own_stub = "perl " } if ($caps) { $afmpl = 0 } # for the moment # so we can use both combined if ($lcdf) { $novirtual = 1 ; } if (!$novirtual) { $virtual = 1 ; } # A couple of routines. sub report { my $str = shift ; $str =~ s/ / /goi ; if ($str =~ /(.*?)\s+([\:\/])\s+(.*)/o) { if ($1 eq "") { $str = " " ; } else { $str = $2 ; } print sprintf("%22s $str %s\n",$1,$3) ; } } sub error { report("processing aborted : " . shift) ; print "\n" ; report "--help : show some more info" ; exit ; } # The banner. print "\n" ; report ("TeXFont 2.2.1 - ConTeXt / PRAGMA ADE 2000-2004") ; print "\n" ; # Handy for scripts: one can provide a preferred path, if it # does not exist, the current path is taken. if (!(-d $sourcepath)&&($sourcepath ne 'auto')) { $sourcepath = "." } # Let's make multiple masters if requested. sub create_mm_font { my ($name,$weight,$width) = @_ ; my $flag = my $args = my $tags = "" ; my $ok ; if ($name ne "") { report ("mm source file : $name") } else { error ("missing mm source file") } if ($weight ne "") { report ("weight : $weight") ; $flag .= " --weight=$weight " ; $tags .= "-weight-$weight" } if ($width ne "") { report ("width : $width") ; $flag .= " --width=$width " ; $tags .= "-width-$width" } error ("no specification given") if ($tags eq "") ; error ("no amfm file found") unless (-f "$sourcepath/$name.amfm") ; error ("no pfb file found") unless (-f "$sourcepath/$name.pfb") ; $args = "$flag --precision=5 --kern-precision=0 --output=$sourcepath/$name$tags.afm" ; my $command = "mmafm $args $sourcepath/$name.amfm" ; print "$command\n" if $trace ; $ok = `$command` ; chomp $ok ; if ($ok ne "") { report ("warning $ok") } $args = "$flag --precision=5 --output=$sourcepath/$name$tags.pfb" ; $command = "mmpfb $args $sourcepath/$name.pfb" ; print "$command\n" if $trace ; $ok = `$command` ; chomp $ok ; if ($ok ne "") { report ("warning $ok") } report ("mm result file : $name$tags") } if (($weight ne "")||($width ne "")) { create_mm_font($ARGV[0],$weight,$width) ; exit } # go on if (($listing||$remove)&&($sourcepath eq ".")) { $sourcepath = "auto" } if ($fontroot eq "") { if ($dosish) { $fontroot = `kpsewhich -expand-path=\$$installpath` } else { $fontroot = `kpsewhich -expand-path=\\\$$installpath` } chomp $fontroot } if ($fontroot =~ /\s+/) # needed for windows, spaces in name { $fontroot = &GetShortPathName($fontroot) } # but ugly when not needed if ($test) { $vendor = $collection = "test" ; $install = 1 } if (($spaced ne "") && ($spaced !~ /\d/)) { $spaced = "50" } if (($slant ne "") && ($slant !~ /\d/)) { $slant = "0.167" } if (($extend ne "") && ($extend !~ /\d/)) { $extend = "1.200" } if (($narrow ne "") && ($narrow !~ /\d/)) { $narrow = "0.800" } if (($caps ne "") && ($caps !~ /\d/)) { $caps = "0.800" } $encoding = lc $encoding ; $vendor = lc $vendor ; $collection = lc $collection ; if ($encoding =~ /default/oi) { $encoding = "texnansi" } my $lcfontroot = lc $fontroot ; # Auto search paths my @trees = split(/\,/,$trees) ; # Test for help asked. if ($help) { report "--fontroot=path : texmf destination font root (default: $lcfontroot)" ; report "--rootlist=paths : texmf source roots (default: $trees)" ; report "--sourcepath=path : when installing, copy from this path (default: $sourcepath)" ; report "--sourcepath=auto : locate and use vendor/collection" ; print "\n" ; report "--vendor=name : vendor name/directory" ; report "--collection=name : font collection" ; report "--encoding=name : encoding vector (default: $encoding)" ; report "--variant=name : encoding variant (.enc file or otftotfm features)" ; print "\n" ; report "--spaced=s : space glyphs in font by promille of em (0 - 1000)" ; report "--slant=s : slant glyphs in font by factor (0.0 - 1.5)" ; report "--extend=s : extend glyphs in font by factor (0.0 - 1.5)" ; report "--caps=s : capitalize lowercase chars by factor (0.5 - 1.0)" ; report "--noligs --nofligs : remove ligatures" ; print "\n" ; report "--install : copy files from source to font tree" ; report "--listing : list files on auto sourcepath" ; report "--remove : remove files on auto sourcepath" ; report "--makepath : when needed, create the paths" ; print "\n" ; report "--test : use test paths for vendor/collection" ; report "--show : run tex on texfont.tex" ; print "\n" ; report "--batch : process given batch file" ; print "\n" ; report "--weight : multiple master weight" ; report "--width : multiple master width" ; print "\n" ; report "--expert : also handle expert fonts" ; print "\n" ; report "--afmpl : use afm2pl instead of afm2tfm" ; report "--preproc : pre-process ttf/otf, converting them to pfb" ; report "--lcdf : use lcdf fonttools to create virtual encoding" ; exit } if (($batch)||(($ARGV[0]) && ($ARGV[0] =~ /.+\.dat$/io))) { my $batchfile = $ARGV[0] ; unless (-f $batchfile) { if ($batchfile !~ /\.dat$/io) { $batchfile .= ".dat" } } unless (-f $batchfile) { report ("trying to locate : $batchfile") ; $batchfile = `kpsewhich -format="other text files" -progname=context $batchfile` ; chomp $batchfile } error ("unknown batch file $batchfile") unless -e $batchfile ; report ("processing batch file : $batchfile") ; my $select = (($vendor ne "")||($collection ne "")) ; my $selecting = 0 ; if (open(BAT, $batchfile)) { while () { chomp ; s/(.+)\#.*/$1/o ; next if (/^\s*$/io) ; if ($select) { if ($selecting) { if (/^\s*[\#\%]/io) { if (!/\-\-/o) { last } else { next } } } elsif ((/^\s*[\#\%]/io)&&(/$vendor/i)&&(/$collection/i)) { $selecting = 1 ; next } else { next } } else { next if (/^\s*[\#\%]/io) ; next unless (/\-\-/oi) } s/\s+/ /gio ; s/(--en.*\=)\?/$1$encoding/io ; report ("batch line : $_") ; # system ("perl $0 --fontroot=$fontroot $_") } my $own_quote = ( $own_path =~ m/^[^\"].* / ? "\"" : "" ); my $switches = '' ; $switches .= "--afmpl " if $afmpl ; system ("$own_stub$own_quote$own_path$own_name$own_type$own_quote $switches --fontroot=$fontroot $_") } close (BAT) } exit } error ("unknown vendor $vendor") unless $vendor ; error ("unknown collection $collection") unless $collection ; error ("unknown tex root $lcfontroot") unless -d $fontroot ; my $varlabel = $variant ; if ($lcdf) { $varlabel =~ s/,/-/goi ; $varlabel =~ tr/a-z/A-Z/ } if ($varlabel ne "") { $varlabel = "-$varlabel" } my $identifier = "$encoding$varlabel-$vendor-$collection" ; my $outlinepath = $sourcepath ; my $path = "" ; my $shape = "" ; if ($noligs||$nofligs) { report ("ligatures : removed") ; $fontsuffix .= "-unligatured" ; $namesuffix .= "-NoLigs" } if ($caps ne "") { if ($caps <0.5) { $caps = 0.5 } elsif ($caps >1.0) { $caps = 1.0 } $shape .= " -c $caps " ; report ("caps factor : $caps") ; $fontsuffix .= "-capitalized-" . int(1000*$caps) ; $namesuffix .= "-Caps" } if ($extend ne "") { if ($extend<0.0) { $extend = 0.0 } elsif ($extend>1.5) { $extend = 1.5 } report ("extend factor : $extend") ; if ($lcdf) { $shape .= " -E $extend " } else { $shape .= " -e $extend " } $fontsuffix .= "-extended-" . int(1000*$extend) ; $namesuffix .= "-Extended" } if ($narrow ne "") # goodie { $extend = $narrow ; if ($extend<0.0) { $extend = 0.0 } elsif ($extend>1.5) { $extend = 1.5 } report ("narrow factor : $extend") ; if ($lcdf) { $shape .= " -E $extend " } else { $shape .= " -e $extend " } $fontsuffix .= "-narrowed-" . int(1000*$extend) ; $namesuffix .= "-Narrowed" } if ($slant ne "") { if ($slant <0.0) { $slant = 0.0 } elsif ($slant >1.5) { $slant = 1.5 } report ("slant factor : $slant") ; if ($lcdf) { $shape .= " -S $slant " } else { $shape .= " -s $slant " } $fontsuffix .= "-slanted-" . int(1000*$slant) ; $namesuffix .= "-Slanted" } if ($spaced ne "") { if ($spaced < 0) { $spaced = 0 } elsif ($spaced >1000) { $spaced = 1000 } report ("space factor : $spaced") ; if ($lcdf) { $shape .= " -L $spaced " } else { $shape .= " -m $spaced " } $fontsuffix .= "-spaced-" . $spaced ; $namesuffix .= "-Spaced" } if ($sourcepath eq "auto") # todo uppercase root { foreach my $root (@trees) { if ($dosish) { $path = `kpsewhich -expand-path=\$$root` } else { $path = `kpsewhich -expand-path=\\\$$root` } chomp $path ; $path = $ENV{$root} if (($path eq '') && defined($ENV{$root})) ; report ("checking root : $root") ; if ($preproc) { $sourcepath = "$path/fonts/truetype/$vendor/$collection" } else { $sourcepath = "$path/fonts/afm/$vendor/$collection" } unless (-d $sourcepath) { my $ven = $vendor ; $ven =~ s/(........).*/$1/ ; my $col = $collection ; $col =~ s/(........).*/$1/ ; $sourcepath = "$path/fonts/afm/$ven/$col" ; if (-d $sourcepath) { $vendor = $ven ; $collection = $col } } $outlinepath = "$path/fonts/type1/$vendor/$collection" ; if (-d $sourcepath) { # $install = 0 ; # no copy needed $makepath = 1 ; # make on local if needed my @files = validglob("$sourcepath/*.afm") ; if ($preproc) { @files = validglob("$sourcepath/*.otf") ; report("locating : otf files") } unless (@files) { @files = validglob("$sourcepath/*.ttf") ; report("locating : ttf files") } if (@files) { if ($listing) { report ("fontpath : $sourcepath" ) ; print "\n" ; foreach my $file (@files) { if (open(AFM,$file)) { my $name = "unknown name" ; while () { chomp ; if (/^fontname\s+(.*?)$/oi) { $name = $1 ; last } } close (AFM) ; if ($preproc) { $file =~ s/.*\/(.*)\..tf/$1/io } else { $file =~ s/.*\/(.*)\.afm/$1/io } report ("$file : $name") } } exit } elsif ($remove) { error ("no removal from : $root") if ($root eq 'TEXMFMAIN') ; foreach my $file (@files) { if ($preproc) { $file =~ s/.*\/(.*)\..tf/$1/io } else { $file =~ s/.*\/(.*)\.afm/$1/io } foreach my $sub ("tfm","vf") { foreach my $typ ("","-raw") { my $nam = "$path/fonts/$sub/$vendor/$collection/$encoding$varlabel$typ-$file.$sub" ; if (-s $nam) { report ("removing : $encoding$varlabel$typ-$file.$sub") ; unlink $nam } } } } my $nam = "$encoding$varlabel-$vendor-$collection.tex" ; if (-e $nam) { report ("removing : $nam") ; unlink "$nam" } my $mapfile = "$encoding$varlabel-$vendor-$collection" ; foreach my $map ("pdftex","dvips", "dvipdfm") { my $maproot = "$fontroot/fonts/map/$map/context/"; if (-e "$maproot$mapfile.map") { report ("renaming : $mapfile.map -> $mapfile.bak") ; unlink "$maproot$mapfile.bak" ; rename "$maproot$mapfile.map", "$maproot$mapfile.bak" } } exit } else { last } } } } error ("unknown subpath ../fonts/afm/$vendor/$collection") unless -d $sourcepath } error ("unknown source path $sourcepath") unless -d $sourcepath ; error ("unknown option $ARGV[0]") if (($ARGV[0]||'') =~ /\-\-/) ; my $afmpath = "$fontroot/fonts/afm/$vendor/$collection" ; my $tfmpath = "$fontroot/fonts/tfm/$vendor/$collection" ; my $vfpath = "$fontroot/fonts/vf/$vendor/$collection" ; my $pfbpath = "$fontroot/fonts/type1/$vendor/$collection" ; my $ttfpath = "$fontroot/fonts/truetype/$vendor/$collection" ; my $otfpath = "$fontroot/fonts/opentype/$vendor/$collection" ; my $encpath = "$fontroot/fonts/enc/dvips/context" ; sub mappath { my $str = shift ; return "$fontroot/fonts/map/$str/context" } # are not on local path ! ! ! ! foreach my $path ($afmpath, $pfbpath) { my @gzipped = <$path/*.gz> ; foreach my $file (@gzipped) { print "file = $file\n"; system ("gzip -d $file") } } # For gerben, we only generate a new database when an lsr file is present but for # myself we force this when texmf-fonts is used (else I get compatibility problems). if (($fontroot =~ /texmf\-fonts/o) || (-e "$fontroot/ls-R") || (-e "$fontroot/ls-r") || (-e "$fontroot/LS-R")) { system ("mktexlsr $fontroot") ; } sub do_make_path { my $str = shift ; if ($str =~ /^(.*)\/.*?$/) { do_make_path($1); } mkdir $str, 0755 unless -d $str } sub make_path { my $str = shift ; do_make_path("$fontroot/fonts/$str/$vendor/$collection") } if ($makepath&&$install) { make_path ("afm") ; make_path ("type1") } do_make_path(mappath("pdftex")) ; do_make_path(mappath("dvips")) ; do_make_path(mappath("dvipdfm")) ; do_make_path($encpath) ; # now fonts/map and fonts/enc make_path ("vf") ; make_path ("tfm") ; if ($install) { error ("unknown afm path $afmpath") unless -d $afmpath ; error ("unknown pfb path $pfbpath") unless -d $pfbpath } error ("unknown tfm path $tfmpath") unless -d $tfmpath ; error ("unknown vf path $vfpath" ) unless -d $vfpath ; error ("unknown map path " . mappath("pdftex")) unless -d mappath("pdftex"); error ("unknown map path " . mappath("dvips")) unless -d mappath("dvips"); error ("unknown map path " . mappath("dvipdfm")) unless -d mappath("dvipdfm"); my $mapfile = "$identifier.map" ; my $bakfile = "$identifier.bak" ; my $texfile = "$identifier.tex" ; report "encoding vector : $encoding" ; if ($variant) { report "encoding variant : $variant" } report "vendor name : $vendor" ; report " source path : $sourcepath" ; report "font collection : $collection" ; report "texmf font root : $lcfontroot" ; report " map file name : $mapfile" ; if ($install) { report "source path : $sourcepath" } my $fntlist = "" ; my $runpath = $sourcepath ; my @files ; sub UnLink { foreach my $f (@_) { if (unlink $f) { report "deleted : $f" if $trace } } } sub globafmfiles { my ($runpath, $pattern) = @_ ; my @files = validglob("$runpath/$pattern.afm") ; report("locating afm files : using pattern $runpath/$pattern.afm"); if ($preproc && !$lcdf) { @files = validglob("$runpath/$pattern.*tf") ; report("locating otf files : using pattern $runpath/$pattern.*tf"); unless (@files) { @files = validglob("$sourcepath/$pattern.ttf") ; report("locating ttf files : using pattern $sourcepath/$pattern.ttf") } } if (@files) # also elsewhere { report("locating afm files : using pattern $pattern") } else { @files = validglob("$runpath/$pattern.ttf") ; if (@files) { report("locating afm files : using ttf files") ; $extension = "ttf" ; foreach my $file (@files) { $file =~ s/\.ttf$//io ; report ("generating afm file : $file.afm") ; my $command = "ttf2afm \"$file.ttf\" -o \"$file.afm\"" ; system($command) ; print "$command\n" if $trace ; push(@cleanup, "$file.afm") } @files = validglob("$runpath/$pattern.afm") } else # try doing the pre-processing earlier { report("locating afm files : using otf files") ; $extension = "otf" ; @files = validglob("$runpath/$pattern.otf") ; foreach my $file (@files) { $file =~ s/\.otf$//io ; if (!$lcdf) { report ("generating afm file : $file.afm") ; preprocess_font("$file.otf", "$file.bdf") ; push(@cleanup,"$file.afm") } if ($preproc) { my $command = "cfftot1 --output=$file.pfb $file.otf" ; print "$command\n" if $trace ; report("converting : $file.otf to $file.pfb") ; system($command) ; push(@cleanup, "$file.pfb") ; } } if ($lcdf) { @files = validglob("$runpath/$pattern.otf") } else { @files = validglob("$runpath/$pattern.afm") } } } return @files } if ($pattern eq '') { if ($ARGV[0]) { $pattern = $ARGV[0] } } if ($pattern ne '') { report ("processing files : all in pattern $pattern") ; @files = globafmfiles($runpath,$pattern) } elsif ("$extend$narrow$slant$spaced$caps" ne "") { error ("transformation needs file spec") } else { $pattern = "*" ; report ("processing files : all on afm path") ; @files = globafmfiles($runpath,$pattern) } sub copy_files { my ($suffix,$sourcepath,$topath) = @_ ; my @files = validglob("$sourcepath/$pattern.$suffix") ; return if ($topath eq $sourcepath) ; report ("copying files : $suffix") ; foreach my $file (@files) { my $ok = $file =~ /(.*)\/(.+?)\.(.*)/ ; my ($path,$name,$suffix) = ($1,$2,$3) ; UnLink "$topath/$name.$suffix" ; report ("copying : $name.$suffix") ; copy ($file,"$topath/$name.$suffix") } } if ($install) { copy_files("afm",$sourcepath,$afmpath) ; # copy_files("tfm",$sourcepath,$tfmpath) ; # raw supplied names copy_files("pfb",$outlinepath,$pfbpath) ; if ($extension eq "ttf") { make_path("truetype") ; copy_files("ttf",$sourcepath,$ttfpath) } if ($extension eq "otf") { make_path("truetype") ; copy_files("otf",$sourcepath,$ttfpath) } } error ("no afm files found") unless @files ; sub open_mapfile { my $type = shift; my $mappath = mappath($type); my $mapdata = ""; my $mapptr = undef; my $fullmapfile = $mapfile; $fullmapfile = "$type-$fullmapfile" unless $type eq "pdftex"; if ($install) { copy ("$mappath/$mapfile","$mappath/$bakfile") ; } if (open ($mapptr,"<$mappath/$mapfile")) { report ("extending map file : $mappath/$mapfile") ; while (<$mapptr>) { unless (/^\%/o) { $mapdata .= $_ } } close ($mapptr) } else { report ("no map file at : $mappath/$mapfile") } #~ unless (open ($mapptr,">$fullmapfile") ) do_make_path($mappath) ; unless (open ($mapptr,">$mappath/$fullmapfile") ) { report "warning : can't open $fullmapfile" } else { if ($type eq "pdftex") { print $mapptr "% This file is generated by the TeXFont Perl script.\n"; print $mapptr "%\n" ; print $mapptr "% You need to add the following line to your file:\n" ; print $mapptr "%\n" ; print $mapptr "% \\pdfmapfile{+$mapfile}\n" ; print $mapptr "%\n" ; print $mapptr "% In ConTeXt you can best use:\n" ; print $mapptr "%\n" ; print $mapptr "% \\loadmapfile\[$mapfile\]\n\n" } } return ($mapptr,$mapdata) ; } sub finish_mapfile { my ($type, $mapptr, $mapdata ) = @_; my $fullmapfile = $mapfile; $fullmapfile = "$type-$fullmapfile" unless $type eq "pdftex"; if (defined $mapptr) { report ("updating map file : $mapfile (for $type)") ; while ($mapdata =~ s/\n\n+/\n/mois) {} ; $mapdata =~ s/^\s*//gmois ; print $mapptr $mapdata ; close ($mapptr) ; if ($install) { copy ("$fullmapfile", mappath($type) . "/$mapfile") ; } } } my ($PDFTEXMAP,$pdftexmapdata) = open_mapfile("pdftex"); my ($DVIPSMAP,$dvipsmapdata) = open_mapfile("dvips"); my ($DVIPDFMMAP,$dvipdfmmapdata) = open_mapfile("dvipdfm"); my $tex = 0 ; my $texdata = "" ; if (open (TEX,"<$texfile")) { while () { unless (/stoptext/o) { $texdata .= $_ } } close (TEX) } $tex = open (TEX,">$texfile") ; unless ($tex) { report "warning : can't open $texfile" } if ($tex) { if ($texdata eq "") { print TEX "% interface=en\n" ; print TEX "\n" ; print TEX "\\usemodule[fnt-01]\n" ; print TEX "\n" ; print TEX "\\loadmapfile[$mapfile]\n" ; print TEX "\n" ; print TEX "\\starttext\n\n" } else { print TEX "$texdata" ; print TEX "\n\%appended section\n\n\\page\n\n" } } sub removeligatures { my $filename = shift ; my $skip = 0 ; copy ("$filename.vpl","$filename.tmp") ; if ((open(TMP,"<$filename.tmp"))&&(open(VPL,">$filename.vpl"))) { report "removing ligatures : $filename" ; while () { chomp ; if ($skip) { if (/^\s*\)\s*$/o) { $skip = 0 ; print VPL "$_\n" } } elsif (/\(LIGTABLE/o) { $skip = 1 ; print VPL "$_\n" } else { print VPL "$_\n" } } close(TMP) ; close(VPL) } UnLink ("$filename.tmp") } my $raw = my $use = my $maplist = my $texlist = my $report = "" ; $use = "$encoding$varlabel-" ; $raw = $use . "raw-" ; my $encfil = "" ; if ($encoding ne "") # evt -progname=context { $encfil = `kpsewhich -progname=pdftex $encoding$varlabel.enc` ; chomp $encfil ; if ($encfil eq "") { $encfil = "$encoding$varlabel.enc" } } sub build_pdftex_mapline { my ($option, $usename, $fontname, $rawname, $cleanfont, $encoding, $varlabel, $strange) = @_; my $cleanname = $fontname; $cleanname =~ s/\_//gio ; $option =~ s/^\s+(.*)/$1/o ; $option =~ s/(.*)\s+$/$1/o ; $option =~ s/ / /g ; if ($option ne "") { $option = "\"$option\" 4" } else { $option = "4" } # adding cleanfont is kind of dangerous my $thename = ""; my $str = ""; my $theencoding = "" ; if ($strange ne "") { $thename = $cleanname ; $theencoding = "" ; } elsif ($lcdf) { $thename = $usename ; $theencoding = " $encoding$varlabel-$cleanname.enc" } elsif ($afmpl) { $thename = $usename ; $theencoding = " $encoding$varlabel.enc" } elsif ($virtual) { $thename = $rawname ; $theencoding = " $encoding$varlabel.enc" } else { $thename = $usename ; $theencoding = " $encoding$varlabel.enc" } if ($uselmencodings) { $theencoding =~ s/^(ec)\.enc/lm\-$1.enc/ ; } # quit rest if no type 1 file my $pfb_sourcepath = $sourcepath ; $pfb_sourcepath =~ s@/afm/@/type1/@ ; unless ((-e "$pfbpath/$fontname.$extension")|| (-e "$pfb_sourcepath/$fontname.$extension")|| (-e "$sourcepath/$fontname.$extension")|| (-e "$ttfpath/$fontname.$extension")) { if ($tex) { $report .= "missing file: \\type \{$fontname.pfb\}\n" } report ("missing pfb file : $fontname.pfb") } # now add entry to map if ($strange eq "") { if ($extension eq "otf") { if ($lcdf) { my $mapline = "" ; if (open(ALTMAP,"texfont.map")) { while () { chomp ; # atl: we assume this b/c we always force otftotfm --no-type1 if (/<<(.*)\.otf$/oi) { $mapline = $_ ; last ; } } close(ALTMAP) ; } else { report("no mapfile from otftotfm : texfont.map") ; } if ($preproc) { $mapline =~ s/<\[/) { if (/^\/([^ ]+)\s*\[/) { $encname = $1; last; } } close ENC; } } if ($strange ne "") { $thename = $cleanname ; $optionencoding = "\"$option\"" if length($option)>1; } elsif ($lcdf) { $thename = $usename ; $optionencoding = "\"$option $encname ReEncodeFont\" <$encoding$varlabel-$cleanname.enc" } elsif ($afmpl) { $thename = $usename ; $optionencoding = "\"$option $encname ReEncodeFont\" <$encoding$varlabel.enc" } elsif ($virtual) { $thename = $rawname ; $optionencoding = "\"$option $encname ReEncodeFont\" <$encoding$varlabel.enc" } else { $thename = $usename ; $optionencoding = "\"$option $encname ReEncodeFont\" <$encoding$varlabel.enc" } if ($uselmencodings) { $theencoding =~ s/^(ec)\.enc/lm\-$1.enc/ ; } # quit rest if no type 1 file my $pfb_sourcepath = $sourcepath ; $pfb_sourcepath =~ s@/afm/@/type1/@ ; unless ((-e "$pfbpath/$fontname.$extension")|| (-e "$pfb_sourcepath/$fontname.$extension")|| (-e "$sourcepath/$fontname.$extension")|| (-e "$ttfpath/$fontname.$extension")) { if ($tex) { $report .= "missing file: \\type \{$fontname.pfb\}\n" } report ("missing pfb file : $fontname.pfb") } # now add entry to map if ($strange eq "") { if ($extension eq "otf") { if ($lcdf) { my $mapline = "" ; if (open(ALTMAP,"texfont.map")) { while () { chomp ; # atl: we assume this b/c we always force otftotfm --no-type1 if (/<<(.*)\.otf$/oi) { $mapline = $_ ; last ; } } close(ALTMAP) ; } else { report("no mapfile from otftotfm : texfont.map") ; } if ($preproc) { $mapline =~ s/<\[/ $strange -> tfm") } elsif ($strange ne "") { report ("font identifier : $cleanfont$namesuffix -> $strange -> skipping") } elsif ($afmpl) { report ("font identifier : $cleanfont$namesuffix -> text -> tfm") } elsif ($virtual) { report ("font identifier : $cleanfont$namesuffix -> text -> tfm + vf") } else { report ("font identifier : $cleanfont$namesuffix -> text -> tfm") } # don't handle strange fonts if ($strange eq "") { # atl: support for lcdf otftotfm if ($lcdf && $extension eq "otf") { # no vf, bypass afm, use otftotfm to get encoding and tfm my $varstr = my $encout = my $tfmout = "" ; report "processing files : otf -> tfm + enc" ; if ($encoding ne "") { $encfil = `kpsewhich -progname=pdftex $encoding.enc` ; chomp $encfil ; if ($encfil eq "") { $encfil = "$encoding.enc" } $encstr = " -e $encfil " } if ($variant ne "") { ( $varstr = $variant ) =~ s/,/ -f /goi ; $varstr = " -f $varstr" } $encout = "$encpath/$use$cleanfont.enc" ; if (-e $encout) { report ("renaming : $encout -> $use$cleanfont.bak") ; UnLink "$encpath/$use$cleanfont.bak" ; rename $encout, "$encpath/$use$cleanfont.bak" } UnLink "texfont.map" ; $tfmout = "$use$cleanfont$fontsuffix" ; my $otfcommand = "otftotfm -a $varstr $encstr $passon $shape --name=\"$tfmout\" --encoding-dir=\"$encpath/\" --tfm-dir=\"$tfmpath/\" --vf-dir=\"$vfpath/\" --no-type1 --map-file=./texfont.map \"$file\"" ; print "$otfcommand\n" if $trace ; system("$otfcommand") ; $encfil = $encout } else { # generate tfm and vpl, $file is on afm path my $font = '' ; if ($afmpl) { report " generating pl : $cleanname$fontsuffix (from $cleanname)" ; $encstr = " -p $encfil" ; if ($uselmencodings) { $encstr =~ s/(ec)\.enc$/lm\-$1\.enc/ ; } my $command = "afm2pl -f afm2tfm $shape $passon $encstr $file $cleanname$fontsuffix.vpl" ; print "$command\n" if $trace ; my $ok = `$command` ; if (open (TMP,"$cleanname$fontsuffix.map")) { $font = ; close(TMP) ; UnLink "$cleanname$fontsuffix.map" } } else { report "generating raw tfm/vpl : $raw$cleanname$fontsuffix (from $cleanname)" ; my $command = "afm2tfm $file $shape $passon $encstr $vfstr $raw$cleanname$fontsuffix" ; print "$command\n" if $trace ; $font = `$command` } # generate vf file if needed chomp $font ; if ($font =~ /.*?([\d\.]+)\s*ExtendFont/io) { $extend = $1 } if ($font =~ /.*?([\d\.]+)\s*SlantFont/io) { $slant = $1 } if ($extend ne "") { $option .= " $extend ExtendFont " } if ($slant ne "") { $option .= " $slant SlantFont " } if ($afmpl) { if ($noligs||$nofligs) { removeligatures("$cleanname$fontsuffix") } report "generating new tfm : $use$cleanname$fontsuffix" ; my $command = "pltotf $cleanname$fontsuffix.vpl $use$cleanname$fontsuffix.tfm" ; print "$command\n" if $trace ; my $ok = `$command` } elsif ($virtual) { if ($noligs||$nofligs) { removeligatures("$use$cleanname$fontsuffix") } report "generating new vf : $use$cleanname$fontsuffix (from $use$cleanname)" ; my $command = "vptovf $use$cleanname$fontsuffix.vpl $use$cleanname$fontsuffix.vf $use$cleanname$fontsuffix.tfm" ; print "$command\n" if $trace ; my $ok = `$command` } else { if ($noligs||$nofligs) { removeligatures("$raw$cleanname$fontsuffix") } report "generating new tfm : $use$cleanname$fontsuffix (from $raw$cleanname)" ; my $command = "pltotf $raw$cleanname$fontsuffix.vpl $use$cleanname$fontsuffix.tfm" ; print "$command\n" if $trace ; my $ok = `$command` } } } elsif (-e "$sourcepath/$cleanname.tfm" ) { report "using existing tfm : $cleanname.tfm" } elsif (($strange eq "expert")&&($expert)) { report "creating tfm file : $cleanname.tfm" ; my $command = "afm2tfm $file $cleanname.tfm" ; print "$command\n" if $trace ; my $font = `$command` } else { report "use supplied tfm : $cleanname" } # report results if (!$lcdf) { ($rawfont,$cleanfont,$restfont) = split(/\s/,$font) } $cleanfont =~ s/\_/\-/goi ; $cleanfont =~ s/\-+$//goi ; # copy files my $usename = "$use$cleanname$fontsuffix" ; my $rawname = "$raw$cleanname$fontsuffix" ; if ($lcdf eq "") { if ($strange ne "") { UnLink ("$vfpath/$cleanname.vf", "$tfmpath/$cleanname.tfm") ; copy ("$cleanname.tfm","$tfmpath/$cleanname.tfm") ; copy ("$usename.tfm","$tfmpath/$usename.tfm") ; # or when available, use vendor one : copy ("$sourcepath/$cleanname.tfm","$tfmpath/$cleanname.tfm") } elsif ($virtual) { UnLink ("$vfpath/$rawname.vf", "$vfpath/$usename.vf") ; UnLink ("$tfmpath/$rawname.tfm", "$tfmpath/$usename.tfm") ; copy ("$usename.vf" ,"$vfpath/$usename.vf") ; copy ("$rawname.tfm","$tfmpath/$rawname.tfm") ; copy ("$usename.tfm","$tfmpath/$usename.tfm") } elsif ($afmpl) { UnLink ("$vfpath/$rawname.vf", "$vfpath/$usename.vf", "$vfpath/$cleanname.vf") ; UnLink ("$tfmpath/$rawname.tfm", "$tfmpath/$usename.tfm", "$tfmpath/$cleanname.tfm") ; copy ("$usename.tfm","$tfmpath/$usename.tfm") } else { UnLink ("$vfpath/$usename.vf", "$tfmpath/$usename.tfm") ; # slow but prevents conflicting vf's my $rubish = `kpsewhich $usename.vf` ; chomp $rubish ; if ($rubish ne "") { UnLink $rubish } # copy ("$usename.tfm","$tfmpath/$usename.tfm") } } # cleanup foreach my $suf ("tfm", "vf", "vpl") { UnLink ("$rawname.$suf", "$usename.$suf") ; UnLink ("$cleanname.$suf", "$fontname.$suf") ; UnLink ("$cleanname$fontsuffix.$suf", "$fontname$fontsuffix.$suf") } # add line to map files my $str = my $thename = ""; ($str, $thename) = build_pdftex_mapline($option, $usename, $fontname, $rawname, $cleanfont, $encoding, $varlabel, $strange); # check for redundant entries if (defined $PDFTEXMAP) { $pdftexmapdata =~ s/^$thename\s.*?$//gmis ; if ($afmpl) { if ($pdftexmapdata =~ s/^$rawname\s.*?$//gmis) { report ("removing raw file : $rawname") ; } } $maplist .= $str ; $pdftexmapdata .= $str ; } ($str, $thename) = build_dvips_mapline($option, $usename, $fontname, $rawname, $cleanfont, $encoding, $varlabel, $strange); # check for redundant entries if (defined $DVIPSMAP) { $dvipsmapdata =~ s/^$thename\s.*?$//gmis ; if ($afmpl) { if ($dvipsmapdata =~ s/^$rawname\s.*?$//gmis) { report ("removing raw file : $rawname") ; } } $dvipsmapdata .= $str ; } ($str, $thename) = build_dvipdfm_mapline($option, $usename, $fontname, $rawname, $cleanfont, $encoding, $varlabel, $strange); # check for redundant entries if (defined $DVIPDFMMAP) { $dvipdfmmapdata =~ s/^$thename\s.*?$//gmis ; if ($afmpl) { if ($dvipdfmmapdata =~ s/^$rawname\s.*?$//gmis) { report ("removing raw file : $rawname") ; } } $dvipdfmmapdata .= $str ; } # write lines to tex file if (($strange eq "expert")&&($expert)) { $fntlist .= "\\definefontsynonym[$cleanfont$namesuffix][$cleanname] \% expert\n" ; } elsif ($strange ne "") { $fntlist .= "\%definefontsynonym[$cleanfont$namesuffix][$cleanname]\n" ; } else { $fntlist .= "\\definefontsynonym[$cleanfont$namesuffix][$usename][encoding=$encoding]\n" ; } next unless $tex ; if (($strange eq "expert")&&($expert)) { $texlist .= "\\ShowFont[$cleanfont$namesuffix][$cleanname]\n" ; } elsif ($strange ne "") { $texlist .= "\%ShowFont[$cleanfont$namesuffix][$cleanname]\n" ; } else { $texlist .= "\\ShowFont[$cleanfont$namesuffix][$usename][$encoding]\n" } } finish_mapfile("pdftex", $PDFTEXMAP, $pdftexmapdata); finish_mapfile("dvipdfm", $DVIPDFMMAP, $dvipdfmmapdata); finish_mapfile("dvips", $DVIPSMAP, $dvipsmapdata); if ($tex) { my $mappath = mappath("pdftex"); $mappath =~ s/\\/\//go ; $savedoptions =~ s/^\s+//gmois ; $savedoptions =~ s/\s+$//gmois ; $fntlist =~ s/^\s+//gmois ; $fntlist =~ s/\s+$//gmois ; $maplist =~ s/^\s+//gmois ; $maplist =~ s/\s+$//gmois ; print TEX "$texlist" ; print TEX "\n" ; print TEX "\\setupheadertexts[\\tttf example definitions]\n" ; print TEX "\n" ; print TEX "\\starttyping\n" ; print TEX "texfont $savedoptions\n" ; print TEX "\\stoptyping\n" ; print TEX "\n" ; print TEX "\\starttyping\n" ; print TEX "$mappath/$mapfile\n" ; print TEX "\\stoptyping\n" ; print TEX "\n" ; print TEX "\\starttyping\n" ; print TEX "$fntlist\n" ; print TEX "\\stoptyping\n" ; print TEX "\n" ; print TEX "\\page\n" ; print TEX "\n" ; print TEX "\\setupheadertexts[\\tttf $mapfile]\n" ; print TEX "\n" ; print TEX "\\starttyping\n" ; print TEX "$maplist\n" ; print TEX "\\stoptyping\n" ; print TEX "\n" ; print TEX "\\stoptext\n" } if ($tex) { close (TEX) } # atl: global cleanup with generated files (afm & ttf don't mix) UnLink(@cleanup) ; print "\n" ; report ("generating : ls-r databases") ; # Refresh database. print "\n" ; system ("mktexlsr $fontroot") ; print "\n" ; # Process the test file. if ($show) { system ("texexec --once --silent $texfile") } @files = validglob("$identifier.* *-$identifier.map") ; foreach my $file (@files) { unless ($file =~ /(tex|pdf|log|mp|tmp)$/io) { UnLink ($file) } } exit ; context-2013.05.28.20130704/texmf-dist/scripts/context/perl/pdftrimwhite.pl0000644000175000017500000003523610542457731025674 0ustar norbertnorberteval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' if 0; #D \module #D [ file=pdftrimwhite.pl, #D version=2000.07.13, #D title=PDF postprocessing, #D subtitle=cropping whitespace from pdf files, #D author=Hans Hagen, #D date=\currentdate, #D copyright=PRAGMA ADE] #C This module is part of the \CONTEXT\ macro||package and is #C therefore copyrighted by \PRAGMA. See readme.pdf for #C details. #D This script can be used to crop margins that contain #D useless information from a \PDF\ image. It does so by: #D #D \startitemize[packed,n] #D \som cropping the image into an alternative file #D \som determining the boundingbox of the alternative #D \som cropping the image into a resulting file #D \stoppacked #D #D In the process, some checks are carried out. Step~1 is #D taken care of by \PDFTEX, step~2 by \GHOSTSCRIPT, using a #D file generated by \PDFTOPS, and \PDFTEX\ is responsible #D for step~3. #D #D \startuseMPgraphic{original} #D numeric n ; n = 1cm ; #D path p ; p := fullsquare xyscaled (8n,12n) ; #D path q ; q := fullsquare xyscaled (2n,3n) shifted (n,n) ; #D path r ; r := ((0,0)--(3n,0)) shifted (0, 5.5n) ; #D path s ; s := ((0,0)--(3n,0)) shifted (0,-5.5n) ; #D path t ; t := (-2n,-4n) ; #D path u ; u := p enlarged -.75n ; #D path v ; v := p enlarged (-1.75n,-2n) shifted (n,1.25n) ; #D path w ; w := q enlarged .25n ; #D fill p withcolor .7white ; #D fill q withcolor .7green ; #D draw r withpen pencircle scaled .25n withcolor .7green ; #D draw s withpen pencircle scaled .25n withcolor .7green ; #D draw t withpen pencircle scaled .50n withcolor .7green ; #D draw u withpen pencircle scaled .10n withcolor white ; #D draw v withpen pencircle scaled .10n withcolor .7red ; #D draw w withpen pencircle scaled .10n ; #D verbatimtex \tttf \setupframed[frame=off,align=left] etex ; #D label (btex \framed{crap} etex, center r) ; #D label (btex \framed{crap} etex, center s) ; #D label (btex \framed{crap} etex, center t) ; #D label (btex \framed{graphic} etex, center q) ; #D label.urt(btex \framed{page} etex, llcorner p) ; #D label.urt(btex \framed{crop} etex, llcorner u) ; #D label.lft(btex \framed{leftcrop\\ #D rightcrop\\ #D topcrop\\ #D bottomcrop} etex, .5[ulcorner v,llcorner v]) ; #D label.bot(btex \framed{offset} etex, .5[llcorner w,lrcorner w]) ; #D \stopuseMPgraphic #D #D \placefigure #D [here][fig:pdftrimwhite] #D {Crops and offsets.} #D {\useMPgraphic{original}} #D #D The \TEX\ part has two alternatives, one using \CONTEXT, and #D another using plain \TEX. The \CONTEXT\ method is slower but #D can be extended more easily. #D #D The script is executed as follows: #D #D \starttyping #D pdftrimwhite [] [] #D \stoptyping #D #D The next call crops \type {test.pdf} to its natural #D boundingbox. #D #D \starttyping #D pdftrimwhite test #D \stoptyping #D #D If the file has some crap at the bottom, you can say: #D #D \starttyping #D pdftrimwhite test --bottomcrop=2cm #D \stoptyping #D #D This clips 2cm from the bottom. You can clip on all sides #D individually, in combination or at once, like in: #D #D \starttyping #D pdftrimwhite test --bottomcrop=2cm --crop=1cm #D \stoptyping #D #D The final result is a tightly cropped image. In order to get #D a 5mm margin around this image, you can say: #D #D \starttyping #D pdftrimwhite test --bottomcrop=2cm --offset=5mm #D \stoptyping #D #D By default, the script intercepts logging messages and #D writes them to a logfile with the same name as the #D resulting image and the prefix \type {log}. If no name is #D given, the name \type {pdftrimwhite} is used for all resulting #D files. #D #D By default, \CONTEXT\ is used. When installed properly, you #D can also use plain \TEX, by adding a switch \type #D {--plain}. Partial switched are accepted, so the next call #D is valid: #D #D \starttyping #D pdftrimwhite test result --bot=2cm --off=5mm --plain #D \stoptyping #D #D The current implementation uses an intermediate \POSTSCRIPT\ #D file. This may change as \GHOSTSCRIPT\ gets more clever with #D \PDF\ files. #D #D In \in {figure} [fig:pdftrimwhite] the green rectangle is the #D picture we want to keep. Around this picture, we want a #D margin, represented by the black rectangle, and specified by #D \type {--offset}. The white rectangle is the cropbox #D defined by \type {--crop}. That way we get rid of header #D and footerlines. The red rectangle results from an #D additional \type {--leftcrop} and \type {-bottomcrop} and #D takes care of some content, as represented by the green #D dot. #D #D The \type {--verbose} switch can be used to disable the #D interception of log messages. #D We load a few \PERL\ modules \unknown\ use Config ; use Getopt::Long ; use strict ; #D \unknown\ and initialize them. Getopt::Long::Configure ("auto_abbrev", "ignore_case", "pass_through") ; #D Before fetching the switches, we initialize the #D variables. my $Crop = "0cm" ; my $LeftCrop = "0cm" ; my $RightCrop = "0cm" ; my $TopCrop = "0cm" ; my $BottomCrop = "0cm" ; my $Offset = "0cm" ; my $GSbin = "" ; my $Verbose = 0 ; my $Help = 0 ; my $UsePlain = 0 ; my $Page = 1 ; #D On \MSWINDOWS\ and \UNIX\ the following defaults, combined #D with the check later, should work out okay. my $pdfps = "pdftops" ; my $gs = "gs" ; my $thisisunix = $Config{'osname'} !~ /dos|mswin/i ; #D When no resulting file is given, we use \type {pdftrimwhite} #D as name (checked later). my $figurefile = "" ; my $resultfile = "" ; my $tempfile = "" ; my $programname = "pdftrimwhite" ; #D Messages are temporarily saved and written to a log file #D afterwards. my $results = "" ; my $pipe = "" ; my $result = "" ; #D Unfortunately we need this information, first since #D \PDFTOPS\ does not honor the cropbox, and second because #D the vertical coordinated are swapped. my $pwidth = 597 ; my $pheight = 847 ; my $hoffset = 0 ; my $voffset = 0 ; #D A few more variables. my $width = my $height = my $llx = my $lly = my $urx = my $ury = 0 ; #D Here are the switches we accept. The \type {--gsbin} switch #D is a bonus one, and the \type {--help} switch comes #D naturally. &GetOptions ( "leftcrop=s" => \$LeftCrop , "rightcrop=s" => \$RightCrop , "topcrop=s" => \$TopCrop , "bottomcrop=s" => \$BottomCrop, "crop=s" => \$Crop , "offset=s" => \$Offset , "verbose" => \$Verbose , "gsbin=s" => \$GSbin , "plain" => \$UsePlain , "page=i" => \$Page , "help" => \$Help ) ; #D If asked for, or if no file is given, we provide some #D help information. sub PrintHelp { print "This is PdfTrimWhite\n\n" . "usage:\n\n" . "pdftrimwhite [switches] filename result\n\n" . "switches:\n\n" . "--crop=\n" . "--offset=\n" . "--leftcrop=\n" . "--rightcrop=\n" . "--topcrop=\n" . "--bottomcrop=\n" . "--gsbin=\n" . "--page=\n" . "--plain\n" . "--verbose\n" } #D The preparations: sub GetItRight { if ($Help) { PrintHelp() ; exit } $figurefile = $ARGV[0] ; $figurefile =~ s/\.pdf$//oi ; $resultfile = $ARGV[1] ; $resultfile =~ s/\.pdf$//oi ; $tempfile = "pdftrimwhite-$resultfile" ; if ($figurefile eq '') { PrintHelp() ; exit } unless ($thisisunix) { $gs = "gswin32c" } if ($GSbin ne '') { $gs = $GSbin } unless (-e "$figurefile.pdf") { print "Something is terribly wrong: no file found\n" ; exit } if (($resultfile eq '')||($resultfile=~/(^\-|\.)/io)) { $resultfile = $programname } $pipe = "2>&1" ; if ($thisisunix) { $pipe = "2>&1" } } #D Something common. sub SavePageData { return "% saving page data \\immediate\\openout\\scratchwrite=$figurefile.tmp \\immediate\\write\\scratchwrite {\\HOffsetBP\\space\\VOffsetBP\\space \\FigureWidthBP\\space\\FigureHeightBP} \\immediate\\closeout\\scratchwrite\n" } sub MakePageConTeXt { return "% the real work \\definepapersize [Crap] [width=\\FigureWidth, height=\\FigureHeight] \\setuppapersize [Crap][Crap] \\setuplayout [topspace=0cm,backspace=0pt, height=middle,width=middle, header=0pt,footer=0pt] \\starttext \\startstandardmakeup \\clip [voffset=\\VOffset, hoffset=\\HOffset, width=\\FigureWidth, height=\\FigureHeight] {\\externalfigure[$figurefile.pdf][page=$Page]\\hss} \\stopstandardmakeup \\stoptext\n" } sub MakePagePlainTeX { return "% the real work \\output{} \\hoffset=-1in \\voffset=\\hoffset \\pdfpageheight=\\FigureHeight \\pdfpagewidth=\\FigureWidth \\vbox to \\pdfpageheight {\\offinterlineskip \\vskip-\\VOffset \\hbox to \\pdfpagewidth{\\hskip-\\HOffset\\box0\\hss} \\vss} \\end\n" } sub CalculateClip { return "% some calculations \\dimen0=\\figurewidth \\dimen2=\\figureheight \\dimen4=$Crop \\dimen6=$Crop \\advance\\dimen4 by $LeftCrop \\advance\\dimen6 by $TopCrop \\advance\\dimen0 by -\\dimen4 \\advance\\dimen0 by -$Crop \\advance\\dimen0 by -$RightCrop \\advance\\dimen2 by -\\dimen6 \\advance\\dimen2 by -$Crop \\advance\\dimen2 by -$BottomCrop \\edef\\FigureWidth {\\the\\dimen0} \\edef\\FigureHeight{\\the\\dimen2} \\edef\\HOffset {\\the\\dimen4} \\edef\\VOffset {\\the\\dimen6} \\ScaledPointsToWholeBigPoints{\\number\\dimen0}\\FigureWidthBP \\ScaledPointsToWholeBigPoints{\\number\\dimen2}\\FigureHeightBP \\ScaledPointsToWholeBigPoints{\\number\\dimen4}\\HOffsetBP \\ScaledPointsToWholeBigPoints{\\number\\dimen6}\\VOffsetBP\n" } sub RecalculateClip { return "% some calculations \\dimen0=${width}bp \\dimen2=${height}bp \\dimen4=${hoffset}bp \\dimen6=${pheight}bp \\advance\\dimen0 by $Offset \\advance\\dimen0 by $Offset \\advance\\dimen2 by $Offset \\advance\\dimen2 by $Offset \\advance\\dimen4 by ${llx}bp \\advance\\dimen4 by -$Offset \\advance\\dimen6 by -${lly}bp \\advance\\dimen6 by $Offset \\advance\\dimen6 by -\\dimen2 \\advance\\dimen6 by $TopCrop \\edef\\FigureWidth {\\the\\dimen0} \\edef\\FigureHeight{\\the\\dimen2} \\edef\\HOffset {\\the\\dimen4} \\edef\\VOffset {\\the\\dimen6}\n" } #D The previous scripts could be more sparse, but for the #D moment we prefer readability. Both scripts save some #D information in temporary file. We choose between them with #D the following sub routine. #D The first pass: sub PrepareConTeXt { return "% interface=en \\setupoutput[pdftex] \\getfiguredimensions[$figurefile.pdf][page=$Page]\n" } sub PreparePlainTeX { return "% plain tex alternative, needs recent supp-mis \\input supp-mis \\pdfoutput=1 \\newdimen\\figurewidth \\newdimen\\figureheight \\setbox0=\\hbox {\\immediate\\pdfximage page $Page {$figurefile.pdf}\\pdfrefximage\\pdflastximage} \\figurewidth=\\wd0 \\figureheight=\\ht0\n" } sub PrepareFirstPass { open (TEX, ">$tempfile.tex") ; if ($UsePlain) { print TEX PreparePlainTeX . CalculateClip . SavePageData . MakePagePlainTeX } else { print TEX PrepareConTeXt . CalculateClip . SavePageData . MakePageConTeXt } close TEX } #D The second pass looks much like the first one, but this #D time we don't save information, use the natural #D boundingbox, and provide the offset. sub SetupConTeXt { return "% interface=en \\setupoutput[pdftex]\n" } sub SetupPlainTeX { return "% plain tex alternative \\pdfoutput=1 \\setbox0=\\hbox {\\immediate\\pdfximage page $Page {$figurefile.pdf}\\pdfrefximage\\pdflastximage}\n" } sub PrepareSecondPass { open (TEX, ">$tempfile.tex") ; if ($UsePlain) { print TEX SetupPlainTeX . RecalculateClip . MakePagePlainTeX } else { print TEX SetupConTeXt . RecalculateClip . MakePageConTeXt } close TEX } #D The information we save in the first pass, is loaded here. sub FetchPaperSize { open (TMP,"$figurefile.tmp") ; while () { chomp ; if (/^(\d+) (\d+) (\d+) (\d+) *$/oi) { $hoffset = $1 ; $voffset = $2 ; $pwidth = $3 ; $pheight = $4 ; last } } close (TMP) } #D Here we try to find the natural boundingbox. We need to #D pick up the page dimensions here. sub RunTeX { if ($UsePlain) { $result = `pdftex -prog=pdftex -fmt=plain -int=batchmode $tempfile` } else { $result = `texexec --batch --once --purge $tempfile` } print $result if $Verbose ; $results .= "$result\n" } sub FindBoundingBox { $result = `$gs -sDEVICE=bbox -dNOPAUSE -dBATCH $tempfile.pdf $pipe` ; print $result if $Verbose ; $results .= "$result\n" } sub IdentifyCropBox { RunTeX() ; FetchPaperSize () ; FindBoundingBox() } #D Just to be sure, we check if there is some image data, so #D that we can retry if something went wrong. Unfortunately we cannot #D safely check on a high res boundingbox. my $digits = '([\-\d\.]+)' ; sub ValidatedCropBox { if ($result =~ /BoundingBox:\s*$digits\s+$digits\s+$digits\s+$digits\s*/mois) { $llx = $1 ; $lly = $2 ; $urx = $3 ; $ury = $4 } else { print "Something is terribly wrong: no boundingbox:\n$result\n" ; exit } $width = abs($urx - $llx) ; $height = abs($ury - $lly) ; if ($width&&$height) { return 1 } else { unless ($width) { print "Something seems wrong: no width\n" ; $LeftCrop = "0cm" ; $RightCrop = "0cm" ; $Crop = "0cm" } unless ($height) { print "Something seems wrong: no height\n" ; $TopCrop = "0cm" ; $BottomCrop = "0cm" ; $Crop = "0cm" } return 0 } } #D This is the main cropping routine. sub FixCropBox { RunTeX() } #D For error tracing we save the log information in a file. sub RenameResult { unlink "$resultfile.pdf" ; rename "$tempfile.pdf", "$resultfile.pdf" } sub SaveLogInfo { open (LOG, ">$resultfile.log") ; print LOG $results ; close (LOG) } #D We remove all temporary files. sub CleanUp { unless ($Verbose) { unlink "$tempfile.tex" ; unlink "$tempfile.tuo" ; unlink "$tempfile.tui" ; unlink "$figurefile.tmp" } } #D Here it all comes together. GetItRight() ; PrepareFirstPass() ; IdentifyCropBox () ; unless (ValidatedCropBox()) { PrepareFirstPass() ; IdentifyCropBox () } if (ValidatedCropBox()) { PrepareSecondPass() ; FixCropBox() } RenameResult() ; SaveLogInfo() ; CleanUp () ; context-2013.05.28.20130704/texmf-dist/scripts/context/perl/texfind.pl0000644000175000017500000002256510360341101024605 0ustar norbertnorberteval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' if 0; #D \module #D [ file=texfind.pl, #D version=1998.05.10, #D title=\TEXFIND, #D subtitle=searching files, #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 licen-en.pdf for #C details. # test with "doif(un|)defined" use strict ; use Getopt::Long ; use File::Find ; use Cwd ; use Tk ; use Tk::widgets ; use Tk::ROText ; use FindBin ; use lib $FindBin::Bin ; use path_tre ; my $FileSuffix = 'tex' ; my $SearchString = '' ; my $Recurse = 0 ; my $NumberOfHits = 0 ; my $QuitSearch = 0 ; my $Location = '' ; my $currentpath = '.' ; my @FileList ; my ($dw, $mw, $log, $sea, $fil, $num, $but, $dir, $loc) ; $mw = MainWindow -> new () ; $dw = MainWindow -> new () ; $mw -> protocol( 'WM_DELETE_WINDOW' => sub { exit } ) ; $dw -> protocol( 'WM_DELETE_WINDOW' => sub { exit } ) ; $log = $mw -> Scrolled ( 'ROText' , -scrollbars => 'se' , -font => 'courier' , -wrap => 'none' , -width => 65 , -height => 22 ) -> pack ( -side => 'bottom' , -padx => 2 , -pady => 2 , -expand => 1 , -fill => 'both' ) ; $sea = $mw -> Entry ( -textvariable => \$SearchString , -font => 'courier' , -width => 20 ) -> pack ( -side => 'left' , -padx => 2 , -pady => 2 ) ; $fil = $mw -> Entry ( -textvariable => \$FileSuffix , -font => 'courier' , -width => 5 ) -> pack ( -side => 'left' , -padx => 2 , -pady => 2 ) ; $but = $mw -> Checkbutton ( -variable => \$Recurse , -text => 'recurse' ) -> pack ( -side => 'left' ) ; $num = $mw -> Entry ( -textvariable => \$NumberOfHits , -font => 'courier' , -justify => 'right' , -width => 5 ) -> pack ( -side => 'right' , -padx => 2 , -pady => 2 ) ; $loc = $mw -> Entry ( -textvariable => \$Location , -font => 'courier' , -width => 8 ) -> pack ( -side => 'right' , -padx => 2 , -pady => 2 ) ; sub BuildDir { if (Exists($dir)) { $dir -> destroy } ; $dir = $dw -> Scrolled ( 'PathTree' , -scrollbars => 'se' ) -> pack ( -expand => 1 , -fill => 'both' , -padx => 2 , -pady => 2 ) ; $dir -> configure ( -font => 'courier' , -height => 24 , -width => 65 , -selectbackground => 'blue3' , -browsecmd => \&ChangePath ) ; $dir -> bind ('' , \&ShowFile ) ; $dir -> bind ('' , \&ShowFile ) } BuildDir ; sub ShowFile { $mw -> raise ; $sea -> focusForce } sub ShowPath { $dw -> raise ; $dir -> focusForce } $log -> tagConfigure ( 'found', -foreground => 'green3' ) ; $log -> tagConfigure ( 'title', -foreground => 'blue3' ) ; $sea -> bind ('' , \&LocateStrings ) ; $fil -> bind ('' , \&LocateStrings ) ; $loc -> bind ('' , \&ChangeLocation ) ; $log -> bind ('' , \&ShowPath ) ; $sea -> bind ('' , \&QuitSearch ) ; $fil -> bind ('' , \&QuitSearch ) ; $loc -> bind ('' , \&QuitSearch ) ; $sea -> bind ('' , \&QuitSearch ) ; $fil -> bind ('' , \&QuitSearch ) ; $loc -> bind ('' , \&QuitSearch ) ; $log -> bind ('' , \&QuitSearch ) ; $sea -> bind ('' , \&LocateStrings ) ; $fil -> bind ('' , \&LocateStrings ) ; $loc -> bind ('' , \&ChangeLocation ) ; $log -> bind ('' , \&ShowPath ) ; sub ChangePath { my $currentpath = shift ; chdir($currentpath) ; $QuitSearch = 1 ; $log -> delete ('1.0', 'end') ; $log -> insert ('end', "$currentpath\n\n", 'title') } sub ChangeLocation { $QuitSearch = 1 ; $log -> delete ('1.0', 'end') ; $Location =~ s/^\s*//o ; $Location =~ s/\s*$//o ; $Location =~ s/(\\|\/\/)/\//go ; unless (-d $Location) { unless ($Location =~ /\//) { $Location .= '/' } } if (-d $Location) { $log -> insert ('end', "changed to location '$Location'\n\n", 'title') ; $currentpath = $Location ; chdir ($currentpath) ; $dir -> destroy ; BuildDir ; $dw -> raise ; $dw -> focusForce } else { $log -> insert ('end', "unknown location '$Location'\n\n", 'title') ; $Location = '' } } sub QuitSearch { $QuitSearch = 1 } sub SearchFile { my ($FileName, $SearchString) = @_ ; my $Ok = 0 ; my $len ; open (TEX, $FileName) ; my $LineNumber = 0 ; while () { ++$LineNumber ; if ($QuitSearch) { if ($Ok) { $log -> see ('end') } last } if (/$SearchString/i) { ++$NumberOfHits ; $num -> update ; unless ($Ok) { $Ok = 1 ; $log -> insert ('end', "$FileName\n\n",'title') } $log -> insert ('end', sprintf("%5i : ",$LineNumber), 'title') ; s/^\s*//o ; # $len = 0 ; while (/(.*?)($SearchString)/gi) { $len += length($1) + length($2) ; $log -> insert ('end', "$1") ; $log -> insert ('end', "$2", 'found' ) } $_ = substr($_,$len) ; $log -> insert ('end', "$_") ; # $log -> update ; $log -> see ('end') } } if ($Ok) { $log -> insert ('end', "\n") } close (TEX) } sub DoLocateFiles { @FileList = () ; $NumberOfHits = 0 ; if ($FileSuffix ne "") { $log -> delete ('1.0', 'end') ; if ($Recurse) { $log -> insert ('end', "recursively identifying files\n", 'title') ; $log -> see ('end') ; find (\&wanted, $currentpath) ; sub wanted { if ($QuitSearch) { last ; return } if (/.*\.$FileSuffix/i) { ++$NumberOfHits ; $num -> update ; push @FileList, $File::Find::name } } } else { $log -> insert ('end', "identifying files\n", 'title') ; $log -> see ('end') ; opendir(DIR, $currentpath) ; my @TEMPLIST = readdir(DIR) ; closedir(DIR) ; foreach my $FileName (@TEMPLIST) { if ($FileName =~ /.*\.$FileSuffix/i) { ++$NumberOfHits ; $num -> update ; if ($QuitSearch) { last } push @FileList, $FileName } } } @FileList = sort @FileList } } sub DoLocateStrings { $log -> delete ('1.0', 'end') ; $log -> update ; $log -> see ('end') ; $NumberOfHits = 0 ; if ($SearchString ne "") { foreach my $FileName (@FileList) { if ($QuitSearch) { $log -> insert ('end', "search aborted\n", 'title') ; $log -> see ('end') ; last } SearchFile($FileName,$SearchString) } } unless ($QuitSearch) { $log -> insert ('end', "done\n", 'title') ; $log -> see ('end') } } sub LocateStrings { $QuitSearch = 0 ; DoLocateFiles() ; DoLocateStrings() } $log -> insert ('end', "data fields\n\n" , '' , "string :", 'title', " regular expression to search for\n" , '' , "suffix :", 'title', " type of file to search in\n" , '' , "recurse :", 'title', " enable searching subpaths\n" , '' , "location :", 'title', " drive of root path\n" , '' , "counter :", 'title', " file/hit counter\n\n" , '' , "key bindings\n\n" , '' , "double 1 :", 'title', " directory window <-> search window\n" , '' , "enter :", 'title', " start searching\n" , '' , "escape :", 'title', " quit searching\n\n" , '' , "current path\n\n" , '' , cwd(), 'title', "\n\n" , 'title' ) ; $log -> update ; ShowPath ; MainLoop() ; context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/0000755000175000017500000000000012162137554022635 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/ruby/texutil.rb0000644000175000017500000000467510527461760024676 0ustar norbertnorbertbanner = ['TeXUtil ', 'version 9.1.0', '1997-2005', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' require 'base/file' require 'base/texutil' class Commands include CommandBase def references filename = @commandline.argument('first') if not filename.empty? and FileTest.file?(File.suffixed(filename,'tuo')) then if tu = TeXUtil::Converter.new(logger) and tu.loaded(filename) then tu.saved if tu.processed end end end def main if @commandline.arguments.length>0 then references else help end end def purgefiles system("texmfstart ctxtools --purge #{@commandline.arguments.join(' ')}") end def purgeallfiles system("texmfstart ctxtools --purge --all #{@commandline.arguments.join(' ')}") end def documentation system("texmfstart ctxtools --document #{@commandline.arguments.join(' ')}") end def analyzefile system("texmfstart pdftools --analyze #{@commandline.arguments.join(' ')}") end def filterpages # obsolete system("texmfstart ctxtools --purge #{@commandline.arguments.join(' ')}") end def figures report("this code is not yet converted from perl to ruby") end def logfile report("this code is not yet converted from perl to ruby") end end logger = Logger.new(banner.shift) commandline = CommandLine.new # main feature commandline.registeraction('references', 'convert tui file into tuo file') # todo features commandline.registeraction('figures', 'generate figure dimensions file') commandline.registeraction('logfile', 'filter essential log messages') # backward compatibility features commandline.registeraction('purgefiles', 'remove most temporary files') commandline.registeraction('purgeallfiles', 'remove all temporary files') commandline.registeraction('documentation', 'generate documentation file from source') commandline.registeraction('analyzefile', 'analyze pdf file') # old feature, not needed any longer due to extension of pdftex commandline.registeraction('filterpages') # generic features commandline.registeraction('help') commandline.registeraction('version') commandline.registerflag('verbose') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'main') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/tmftools.rb0000644000175000017500000001160610527461760025037 0ustar norbertnorbert#!/usr/bin/env ruby # program : tmftools # copyright : PRAGMA Advanced Document Engineering # version : 2005 # author : Hans Hagen # # project : ConTeXt # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # The script based alternative is not slower than the kpse one. # Loading is a bit faster when the log file is used. # todo: create database # tmftools [some of the kpsewhich switches] # tmftools --analyze # tmftools --analyze > kpsewhat.log # tmftools --analyze --strict > kpsewhat.log # tmftools --analyze --delete --force "texmf-local/fonts/.*/somename" # tmftools --serve # the real thing banner = ['TMFTools', 'version 1.1.0 (experimental, no help yet)', '2005/2006', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' class Commands include CommandBase def init_kpse # require 'base/kpseremote' # if KpseRemote::available? then if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then require 'base/kpseremote' k = KpseRemote.new else k = nil end if k && k.okay? then k.progname = @commandline.option('progname') k.engine = @commandline.option('engine') k.format = @commandline.option('format') else require 'base/kpsefast' k = KpseFast.new k.rootpath = @commandline.option('rootpath') k.treepath = @commandline.option('treepath') k.progname = @commandline.option('progname') k.engine = @commandline.option('engine') k.format = @commandline.option('format') k.diskcache = @commandline.option('diskcache') k.renewcache = @commandline.option('renewcache') k.load_cnf k.expand_variables k.load_lsr end return k end def serve if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then require 'base/kpseremote' begin KpseRemote::start_server rescue end end end def reload begin init_kpse.load rescue end end def main if option = @commandline.option('expand-braces') and not option.empty? then puts init_kpse.expand_braces(option) elsif option = @commandline.option('expand-path') and not option.empty? then puts init_kpse.expand_path(option) elsif option = @commandline.option('expand-var') and not option.empty? then if option == '*' then init_kpse.list_expansions() else puts init_kpse.expand_var(option) end elsif option = @commandline.option('show-path') and not option.empty? then puts init_kpse.show_path(option) elsif option = @commandline.option('var-value') and not option.empty? then if option == '*' then init_kpse.list_variables() else puts init_kpse.expand_var(option) end elsif @commandline.arguments.size > 0 then kpse = init_kpse @commandline.arguments.each do |option| puts kpse.find_file(option) end else help end end def analyze pattern = @commandline.argument('first') strict = @commandline.option('strict') sort = @commandline.option('sort') delete = @commandline.option('delete') and @commandline.option('force') init_kpse.analyze_files(pattern, strict, sort, delete) end end logger = Logger.new(banner.shift) commandline = CommandLine.new # kpsewhich compatible options commandline.registervalue('expand-braces','') commandline.registervalue('expand-path','') commandline.registervalue('expand-var','') commandline.registervalue('show-path','') commandline.registervalue('var-value','') commandline.registervalue('engine','') commandline.registervalue('progname','') commandline.registervalue('format','') # additional goodies commandline.registervalue('rootpath','') commandline.registervalue('treepath','') commandline.registervalue('sort','') commandline.registerflag('diskcache') commandline.registerflag('renewcache') commandline.registerflag('strict') commandline.registerflag('delete') commandline.registerflag('force') commandline.registeraction('analyze', "[--strict --sort --rootpath --treepath]\n[--delete [--force]] [pattern]") # general purpose options commandline.registerflag('verbose') commandline.registeraction('help') commandline.registeraction('version') commandline.registeraction('reload', 'reload file database') commandline.registeraction('serve', 'act as kpse server') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'main') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/graphics/0000755000175000017500000000000012162137554024435 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/ruby/graphics/inkscape.rb0000644000175000017500000000617111024176655026565 0ustar norbertnorbert# module : graphics/inkscape # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # ['base/variables','variables'].each do |r| begin require r ; rescue Exception ; else break ; end ; end # ['graphics/gs','gs'].each do |r| begin require r ; rescue Exception ; else break ; end ; end require 'base/variables' require 'base/system' require 'graphics/gs' class InkScape include Variables def initialize(logger=nil) unless logger then puts('inkscape class needs a logger') exit end @variables = Hash.new @logger = logger reset end def reset # nothing yet end def supported?(filename) filename =~ /.*\.(svg|svgz)/io end def convert(logfile=System.null) directpdf = false logfile = logfile.gsub(/\/+$/,"") inpfilename = getvariable('inputfile').dup outfilename = getvariable('outputfile').dup outfilename = inpfilename.dup if outfilename.empty? outfilename.gsub!(/(\.[^\.]*?)$/, ".pdf") tmpfilename = outfilename.gsub(/(\.[^\.]*?)$/, ".ps") if inpfilename.empty? || outfilename.empty? then report("no filenames given") return false end if inpfilename == outfilename then report("filenames must differ (#{inpfilename} #{outfilename})") return false end unless FileTest.file?(inpfilename) then report("unknown file #{inpfilename}") return false end # we need to redirect the error info else we get a pop up console if directpdf then report("converting #{inpfilename} to #{outfilename}") resultpipe = "--without-gui --export-pdf=\"#{outfilename}\" 2>#{logfile}" else report("converting #{inpfilename} to #{tmpfilename}") resultpipe = "--without-gui --print=\">#{tmpfilename}\" 2>#{logfile}" end arguments = [resultpipe,inpfilename].join(' ').gsub(/\s+/,' ') ok = true begin debug("inkscape: #{arguments}") # should work # ok = System.run('inkscape',arguments) # does not work here # but 0.40 only works with this: command = "inkscape #{arguments}" report(command) ok = system(command) # and 0.41 fails with everything # and 0.45 is better rescue report("aborted due to error") return false else return false unless ok end if not directpdf then ghostscript = GhostScript.new(@logger) ghostscript.setvariable('inputfile',tmpfilename) ghostscript.setvariable('outputfile',outfilename) report("converting #{tmpfilename} to #{outfilename}") ghostscript.convert begin File.delete(tmpfilename) rescue end end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/graphics/gs.rb0000644000175000017500000004774411244221744025406 0ustar norbertnorbert# module : graphics/gs # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # ['base/variables','../variables','variables'].each do |r| begin require r ; rescue Exception ; else break ; end ; end # ['base/system', '../system', 'system' ].each do |r| begin require r ; rescue Exception ; else break ; end ; end require 'base/variables' require 'base/system' require 'fileutils' # Require 'ftools' class GhostScript include Variables @@pdftrimwhite = 'pdftrimwhite.pl' @@pstopdfoptions = [ 'AntiAliasColorImages', 'AntiAliasGrayImages', 'AntiAliasMonoImages', 'ASCII85EncodePages', 'AutoFilterColorImages', 'AutoFilterGrayImages', 'AutoPositionEPSFiles', 'AutoRotatePages', 'Binding', 'ColorConversionStrategy', 'ColorImageDepth', 'ColorImageDownsampleThreshold', 'ColorImageDownsampleType', 'ColorImageFilter', 'ColorImageResolution', 'CompatibilityLevel', 'CompressPages', #'ConvertCMYKImagesToRGB', # buggy #'ConvertImagesToIndexed', # buggy 'CreateJobTicket', 'DetectBlends', 'DoThumbnails', 'DownsampleColorImages', 'DownsampleGrayImages', 'DownsampleMonoImages', 'EmbedAllFonts', 'EncodeColorImages', 'EncodeGrayImages', 'EncodeMonoImages', 'EndPage', 'FirstPage', 'GrayImageDepth', 'GrayImageDownsampleThreshold', 'GrayImageDownsampleType', 'GrayImageFilter', 'GrayImageResolution', 'MaxSubsetPct', 'MonoImageDepth', 'MonoImageDownsampleThreshold', 'MonoImageDownsampleType', 'MonoImageFilter', 'MonoImageResolution', 'Optimize', 'ParseDCSComments', 'ParseDCSCommentsForDocInfo', 'PreserveCopyPage', 'PreserveEPSInfo', 'PreserveHalftoneInfo', 'PreserveOPIComments', 'PreserveOverprintSettings', 'SubsetFonts', 'UseFlateCompression' ] @@methods = Hash.new @@methods['raw'] = '1' @@methods['bound'] = '2' @@methods['bounded'] = '2' @@methods['crop'] = '3' @@methods['cropped'] = '3' @@methods['down'] = '4' @@methods['downsample'] = '4' @@methods['downsampled'] = '4' @@methods['simplify'] = '5' @@methods['simplified'] = '5' @@tempfile = 'gstemp' @@pstempfile = @@tempfile + '.ps' @@pdftempfile = @@tempfile + '.pdf' @@bboxspec = '\s*([\-\d\.]+)' + '\s+([\-\d\.]+)'*3 def initialize(logger=nil) unless logger then puts('gs class needs a logger') exit end @variables = Hash.new @psoptions = Hash.new @logger = logger setvariable('profile', 'gsprofile.ini') setvariable('pipe', true) setvariable('method', 2) setvariable('force', false) setvariable('colormodel', 'cmyk') setvariable('inputfile', '') setvariable('outputfile', '') @@pstopdfoptions.each do |key| @psoptions[key] = '' end reset end def reset @llx = @lly = @ulx = @uly = 0 @oldbbox = [@llx,@lly,@urx,@ury] @width = @height = @xoffset = @yoffset = @offset = 0 @rs = Tool.default_line_separator end def supported?(filename) psfile?(filename) || pdffile?(filename) end def psfile?(filename) filename =~ /\.(eps|epsf|ps|ai\d*)$/io end def pdffile?(filename) filename =~ /\.(pdf)$/io end def setpsoption(key,value) @psoptions[key] = value unless value.empty? end def setdimensions (llx,lly,urx,ury) @oldbbox = [llx,lly,urx,ury] @llx, @lly = llx.to_f-@offset, lly.to_f-@offset @urx, @ury = urx.to_f+@offset, ury.to_f+@offset @width, @height = @urx - @llx, @ury - @lly @xoffset, @yoffset = 0 - @llx, 0 - @lly end def setoffset (offset=0) @offset = offset.to_f setdimensions(@llx,@lly,@urx,@ury) if dimensions? end def resetdimensions setdimensions(0,0,0,0) end def dimensions? (@width>0) && (@height>0) end def convert inpfile = getvariable('inputfile') if inpfile.empty? then report('no inputfile specified') return false end unless FileTest.file?(inpfile) then report("unknown input file #{inpfile}") return false end outfile = getvariable('outputfile') if outfile.empty? then outfile = inpfile outfile = outfile.sub(/^.*[\\\/]/,'') end outfile = outfile.sub(/\.(pdf|eps|ps|ai)/i, "") resultfile = outfile + '.pdf' setvariable('outputfile', resultfile) # flags saveprofile(getvariable('profile')) begin gsmethod = method(getvariable('method')).to_i report("conversion method #{gsmethod}") rescue gsmethod = 1 report("fallback conversion method #{gsmethod}") end debug('piping data') if getvariable('pipe') ok = false begin case gsmethod when 0, 1 then ok = convertasis(inpfile,resultfile) when 2 then ok = convertbounded(inpfile,resultfile) when 3 then ok = convertcropped(inpfile,resultfile) when 4 then ok = downsample(inpfile,resultfile,'screen') when 5 then ok = downsample(inpfile,resultfile,'prepress') else report("invalid conversion method #{gsmethod}") end rescue report("job aborted due to some error: #{$!}") begin File.delete(resultfile) if FileTest.file?(resultfile) rescue report("unable to delete faulty #{resultfile}") end ok = false ensure deleteprofile(getvariable('profile')) File.delete(@@pstempfile) if FileTest.file?(@@pstempfile) File.delete(@@pdftempfile) if FileTest.file?(@@pdftempfile) end return ok end # private def method (str) if @@methods.key?(str) then @@methods[str] else str end end def pdfmethod? (str) case method(str).to_i when 1, 3, 4, 5 then return true end return false end def pdfprefix (str) case method(str).to_i when 1 then return 'raw-' when 4 then return 'lowres-' when 5 then return 'normal-' end return '' end def psmethod? (str) ! pdfmethod?(str) end def insertprofile (flags) for key in flags.keys do replacevariable("flag.#{key}", flags[key]) end end def deleteprofile (filename) begin File.delete(filename) if FileTest.file?(filename) rescue end end def saveprofile (filename) return if filename.empty? || ! (ini = open(filename,"w")) @@pstopdfoptions.each do |k| str = @psoptions[k] # beware, booleans are translated, but so are yes/no which is dangerous if str.class == String then if ! str.empty? && (str != 'empty') then str.sub!(/(.+)\-/io, '') str = "/" + str unless str =~ /^(true|false|none|[\d\.\-\+]+)$/ ini.puts("-d#{k}=#{str}\n") end end end ini.close debug("gs profile #{filename} saved") end def gsstream # private if getvariable('pipe') then '-' else @@pstempfile end end def gscolorswitch case getvariable('colormodel') when 'cmyk' then '-dProcessColorModel=/DeviceCMYK -dColorConversionStrategy=/CMYK ' when 'rgb' then '-dProcessColorModel=/DeviceRGB -dColorConversionStrategy=/RGB ' when 'gray' then '-dProcessColorModel=/DeviceGRAY -dColorConversionStrategy=/GRAY ' else '' end end def gsdefaults defaults = '' begin defaults << '-dAutoRotatePages=/None ' if @psoptions['AutoRotatePages'].empty? rescue defaults << '-dAutoRotatePages=/None ' end return defaults end def convertasis (inpfile, outfile) report("converting #{inpfile} as-is") @rs = Tool.line_separator(inpfile) debug("platform mac") if @rs == "\r" arguments = '' arguments << "\@gsprofile.ini " arguments << "-q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH " arguments << "#{gsdefaults} " arguments << "#{gscolorswitch} " arguments << "-sOutputFile=#{outfile} #{inpfile} -c quit " debug("ghostscript: #{arguments}") unless ok = System.run('ghostscript',arguments) then begin report("removing file #{outfile}") File.delete(outfile) if FileTest.file?(outfile) rescue debug("file #{outfile} may be invalid") end end return ok end def convertbounded(inpfile, outfile) report("converting #{inpfile} bounded") do_convertbounded(inpfile, outfile) end def do_convertbounded(inpfile, outfile) begin return false if FileTest.file?(outfile) && (! File.delete(outfile)) rescue return false end arguments = '' arguments << "\@gsprofile.ini " arguments << "-q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH -dSAFER " arguments << "#{gscolorswitch} " arguments << "#{gsdefaults} " arguments << "-sOutputFile=#{outfile} #{gsstream} -c quit " debug("ghostscript: #{arguments}") debug('opening input file') @rs = Tool.line_separator(inpfile) debug("platform mac") if @rs == "\r" if FileTest.file?(outfile) and not File.writable?(outfile) then report("output file cannot be written") return false elsif not tmp = open(inpfile, 'rb') then report("input file cannot be opened") return false end debug('opening pipe/file') if getvariable('pipe') then return false unless eps = IO.popen(System.command('ghostscript',arguments),'wb') debug('piping data') unless pipebounded(tmp,eps) then debug('something went wrong in the pipe') File.delete(outfile) if FileTest.file?(outfile) end debug('closing pipe') eps.close_write else return false unless eps = File.open(@@pstempfile, 'wb') debug('copying data') if pipebounded(tmp,eps) then eps.close debug('processing temp file') begin ok = System.run('ghostscript',arguments) rescue ok = false # debug("fatal error: #{$!}") ensure end else eps.close ok = false end unless ok then begin report('no output file due to error') File.delete(outfile) if FileTest.file?(outfile) rescue # debug("fatal error: #{$!}") debug('file',outfile,'may be invalid') end end debug('deleting temp file') begin File.delete(@@pstempfile) if FileTest.file?(@@pstempfile) rescue end end tmp.close return FileTest.file?(outfile) end # hm, strange, no execute here, todo ! ! ! def getdimensions (inpfile) # -dEPSFitPage and -dEPSCrop behave weird (don't work) arguments = "-sDEVICE=bbox -dSAFER -dNOPAUSE -dBATCH #{inpfile} " debug("ghostscript: #{arguments}") begin bbox = System.run('ghostscript',arguments,true,true) rescue bbox = '' end resetdimensions debug('bbox spec', bbox) if bbox =~ /(Exact|HiRes)BoundingBox:#{@@bboxspec}/moi then debug("high res bbox #{$2} #{$3} #{$4} #{$5}") setdimensions($2,$3,$4,$5) elsif bbox =~ /BoundingBox:#{@@bboxspec}/moi debug("low res bbox #{$1} #{$2} #{$3} #{$4}") setdimensions($1,$2,$3,$4) end return dimensions? end # def convertcropped (inpfile, outfile) # report("converting #{inpfile} cropped") # do_convertbounded(inpfile, @@pdftempfile) # return unless FileTest.file?(@@pdftempfile) # arguments = " --offset=#{@offset} #{@@pdftempfile} #{outfile}" # report("calling #{@@pdftrimwhite}") # unless ok = System.run(@@pdftrimwhite,arguments) then # report('cropping failed') # begin # File.delete(outfile) # rescue # end # begin # File.move(@@pdftempfile,outfile) # rescue # File.copy(@@pdftempfile,outfile) # File.delete(@@pdftempfile) # end # end # return ok # end def convertcropped (inpfile, outfile) report("converting #{inpfile} cropped") if File.expand_path(inpfile) == File.expand_path(outfile) then report("output filename must be different") elsif inpfile =~ /\.pdf$/io then System.run("pdftops -eps #{inpfile} #{@@pstempfile}") if getdimensions(@@pstempfile) then report("tight boundingbox found") end do_convertbounded(@@pstempfile, outfile) File.delete(@@pstempfile) if FileTest.file?(@@pstempfile) else if getdimensions(inpfile) then report("tight boundingbox found") end do_convertbounded(inpfile, outfile) end resetdimensions return true end def pipebounded (eps, out) epsbbox, skip, buffer = false, false, '' while str = eps.gets(rs=@rs) do if str =~ /^%!PS/oi then debug("looks like a valid ps file") break elsif str =~ /%PDF\-\d+\.\d+/oi then debug("looks like a pdf file, so let\'s quit") return false end end # why no BeginData check eps.rewind if dimensions? then debug('using found boundingbox') else debug('locating boundingbox') while str = eps.gets(rs=@rs) do case str when /^%%Page:/io then break when /^%%(Crop|HiResBounding|ExactBounding)Box:#{@@bboxspec}/moi then debug('high res boundingbox found') setdimensions($2,$3,$4,$5) break when /^%%BoundingBox:#{@@bboxspec}/moi then debug('low res boundingbox found') setdimensions($1,$2,$3,$4) end end debug('no boundingbox found') if @width == 0 end eps.rewind while str = eps.gets(rs=@rs) do if str.sub!(/^(.*)%!PS/moi, "%!PS") then debug("removing pre banner data") out.puts(str) break end end while str = eps.gets(rs=@rs) do if skip then skip = false if str =~ /^%+(EndData|EndPhotoshop|BeginProlog).*$/o out.puts(str) if $1 == "BeginProlog" elsif str =~ /^%(BeginPhotoshop)\:\s*\d+.*$/o then skip = true elsif str =~ /^%%/mos then if ! epsbbox && str =~ /^%%(Page:|EndProlog)/io then out.puts(str) if $1 == "EndProlog" debug('faking papersize') # out.puts("<< /PageSize [#{@width} #{@height}] >> setpagedevice\n") if ! dimensions? then out.puts("<< /PageSize [1 1] >> setpagedevice\n") else out.puts("<< /PageSize [#{@width} #{@height}] >> setpagedevice\n") end out.puts("gsave #{@xoffset} #{@yoffset} translate\n") epsbbox = true elsif str =~ /^%%BeginBinary\:\s*\d+\s*$/o then debug('copying binary data') out.puts(str) while str = eps.gets(rs=@rs) if str =~ /^%%EndBinary\s*$/o then out.puts(str) else out.write(str) end end elsif str =~ /^%AI9\_PrivateDataBegin/o then debug('ignore private ai crap') break elsif str =~ /^%%EOF/o then debug('ignore post eof crap') break # elsif str =~ /^%%PageTrailer/o then # debug('ignoring post page trailer crap') # break elsif str =~ /^%%Trailer/o then debug('ignoring post trailer crap') break elsif str =~ /^%%Creator.*Illustrator.*$/io then debug('getting rid of problematic creator spec') str = "% Creator: Adobe Illustrator ..." out.puts(str) elsif str =~ /^%%AI.*(PaperRect|Margin)/io then debug('removing AI paper crap') elsif str =~ /^%%AI.*Version.*$/io then debug('removing dangerous version info') elsif str =~ /^(%+AI.*Thumbnail.*)$/o then debug('skipping AI thumbnail') skip = true else out.puts(str) end else out.puts(str) end end debug('done, sending EOF') out.puts "grestore\n%%EOF\n" # ok = $? == 0 # report('process aborted, broken pipe, fatal error') unless ok # return ok resetdimensions return true end def downsample (inpfile, outfile, method='screen') # gs <= 8.50 report("downsampling #{inpfile}") doit = true unless getvariable('force') then begin if f = File.open(inpfile) then f.binmode while doit && (data = f.gets) do if data =~ /\/ArtBox\s*\[\s*[\d\.]+\s+[\d\.]+\s+[\d\.]+\s+[\d\.]+\s*\]/io then doit = false end end f.close end rescue end end if doit then arguments = '' arguments << "-dPDFSETTINGS=/#{method} -dEmbedAllFonts=true " arguments << "#{gscolorswitch} " arguments << "#{gsdefaults} " arguments << "-q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH -dSAFER " arguments << "-sOutputFile=#{outfile} #{inpfile} -c quit " unless ok = System.run('ghostscript',arguments) then begin File.delete(outfile) if FileTest.file?(outfile) report("removing file #{outfile}") rescue debug("file #{outfile} may be invalid") end end return ok else report("crop problem, straight copying #{inpfile}") File.copy(inpfile,outfile) return false end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/graphics/magick.rb0000644000175000017500000001054210360341101026176 0ustar norbertnorbert# module : graphics/inkscape # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # ['base/variables','variables'].each do |r| begin require r ; rescue Exception ; else break ; end ; end require 'base/variables' class ImageMagick include Variables def initialize(logger=nil) unless logger then puts('magick class needs a logger') exit end @variables = Hash.new @logger = logger reset end def reset ['compression','depth','colorspace','quality'].each do |key| setvariable(key) end end def supported?(filename) # ? pdf filename =~ /.*\.(png|gif|tif|tiff|jpg|jpeg|eps|ai\d*)/io end def convert(suffix='pdf') inpfilename = getvariable('inputfile').dup outfilename = getvariable('outputfile').dup outfilename = inpfilename.dup if outfilename.empty? outfilename.gsub!(/(\.[^\.]*?)$/, ".#{suffix}") if inpfilename.empty? || outfilename.empty? then report("no filenames given") return false end if inpfilename == outfilename then report("filenames must differ (#{inpfilename} #{outfilename})") return false end unless FileTest.file?(inpfilename) then report("unknown file #{inpfilename}") return false end if inpfilename =~ /\.tif+$/io then tmpfilename = 'temp.png' arguments = "#{inpfilename} #{tmpfilename}" begin debug("imagemagick: #{arguments}") ok = System.run('imagemagick',arguments) rescue report("aborted due to error") return false else return false unless ok end inpfilename = tmpfilename end compression = depth = colorspace = quality = '' if getvariable('compression') =~ /(zip|jpeg)/o then compression = " -compress #{$1}" end if getvariable('depth') =~ /(8|16)/o then depth = "-depth #{$1}" end if getvariable('colorspace') =~ /(gray|rgb|cmyk)/o then colorspace = "-colorspace #{$1}" end case getvariable('quality') when 'low' then quality = '-quality 0' when 'medium' then quality = '-quality 75' when 'high' then quality = '-quality 100' end report("converting #{inpfilename} to #{outfilename}") arguments = [compression,depth,colorspace,quality,inpfilename,outfilename].join(' ').gsub(/\s+/,' ') begin debug("imagemagick: #{arguments}") ok = System.run('imagemagick',arguments) rescue report("aborted due to error") return false else return ok end end def autoconvert inpfilename = getvariable('inputfile') outfilename = getvariable('outputfile') if inpfilename.empty? || ! FileTest.file?(inpfilename) then report("missing file #{inpfilename}") return end outfilename = inpfilename.dup if outfilename.empty? tmpfilename = 'temp.jpg' reset megabyte = 1024*1024 ok = false if FileTest.size(inpfilename)>2*megabyte setvariable('compression','zip') ok = convert else setvariable('compression','jpeg') if FileTest.size(inpfilename)>10*megabyte then setvariable('quality',85) elsif FileTest.size(inpfilename)>5*megabyte then setvariable('quality',90) else setvariable('quality',95) end report("auto quality #{getvariable('quality')}") setvariable('outputfile', tmpfilename) ok = convert('jpg') setvariable('inputfile', tmpfilename) setvariable('outputfile', outfilename) ok = convert begin File.delete(tmpfilename) rescue report("#{tmpfilename} cannot be deleted") end end reset return ok end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/textools.rb0000644000175000017500000010667511244221744025055 0ustar norbertnorbert#!/usr/bin/env ruby # program : textools # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # This script will harbor some handy manipulations on tex # related files. banner = ['TeXTools', 'version 1.3.1', '2002/2006', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' require 'fileutils' # require 'ftools' # Remark # # The fixtexmftrees feature does not realy belong in textools, but # since it looks like no measures will be taken to make texlive (and # tetex) downward compatible with respect to fonts installed by # users, we provide this fixer. This option also moves script files # to their new location (only for context) in the TDS. Beware: when # locating scripts, the --format switch in kpsewhich should now use # 'texmfscripts' instead of 'other text files' (texmfstart is already # aware of this). Files will only be moved when --force is given. Let # me know if more fixes need to be made. class Commands include CommandBase def tpmmake if filename = @commandline.argument('first') then filename = File.join('tpm',filename) unless filename =~ /^tpm[\/\\]/ filename += '.tpm' unless filename =~ /\.tpm$/ if FileTest.file?(filename) then data = IO.read(filename) rescue '' data, fn, n = calculate_tpm(data,"TPM:RunFiles") data, fm, m = calculate_tpm(data,"TPM:DocFiles") data = replace_tpm(data,"TPM:Size",n+m) report("total size #{n+m}") begin File.open(filename, 'w') do |f| f << data end rescue report("unable to save '#{filename}'") else report("file '#{filename}' is updated") filename = File.basename(filename).sub(/\..*$/,'') zipname = sprintf("%s-%04i.%02i.%02i%s",filename,Time.now.year,Time.now.month,Time.now.day,'.zip') File.delete(zipname) rescue true report("zipping file '#{zipname}'") system("zip -r -9 -q #{zipname} #{[fn,fm].flatten.join(' ')}") end else report("no file '#{filename}'") end end end def calculate_tpm(data, tag='') size, ok = 0, Array.new data.gsub!(/<#{tag}.*>(.*?)<\/#{tag}>/m) do content = $1 files = content.split(/\s+/) files.each do |file| unless file =~ /^\s*$/ then if FileTest.file?(file) then report("found file #{file}") size += FileTest.size(file) rescue 0 ok << file else report("missing file #{file}") end end end "<#{tag} size=\"#{size}\">#{content}" end [data, ok, size] end def replace_tpm(data, tag='', txt='') data.gsub(/(<#{tag}.*>)(.*?)(<\/#{tag}>)/m) do $1 + txt.to_s + $3 end end end class Commands include CommandBase def hidemapnames report('hiding FontNames in map files') xidemapnames(true) end def videmapnames report('unhiding FontNames in map files') xidemapnames(false) end def removemapnames report('removing FontNames from map files') if files = findfiles('map') then report files.sort.each do |fn| gn = fn # + '.nonames' hn = fn + '.original' begin if FileTest.file?(fn) && ! FileTest.file?(hn) then if File.rename(fn,hn) then if (fh = File.open(hn,'r')) && (gh = File.open(gn,'w')) then report("processing #{fn}") while str = fh.gets do str.sub!(/^([^\%]+?)(\s+)([^\"\<\s]*?)(\s)/) do $1 + $2 + " "*$3.length + $4 end gh.puts(str) end fh.close gh.close else report("no permissions to handle #{fn}") end else report("unable to rename #{fn} to #{hn}") end else report("not processing #{fn} due to presence of #{hn}") end rescue report("error in handling #{fn}") end end end end def restoremapnames report('restoring FontNames in map files') if files = findfiles('map') then report files.sort.each do |fn| hn = fn + '.original' begin if FileTest.file?(hn) then File.delete(fn) if FileTest.file?(fn) report("#{fn} restored") if File.rename(hn,fn) else report("no original found for #{fn}") end rescue report("error in restoring #{fn}") end end end end def findfile report('locating file in texmf tree') # ! not in tree # ? fuzzy # . in tree # > in tree and used if filename = @commandline.argument('first') then if filename && ! filename.empty? then report used = kpsefile(filename) || pathfile(filename) if paths = texmfroots then found, prefered = false, false paths.each do |p| if files = texmffiles(p,filename) then found = true files.each do |f| # unreadable: report("#{if f == used then '>' else '.' end} #{f}") if f == used then prefered = true report("> #{f}") else report(". #{f}") end end end end if prefered then report("! #{used}") unless found else report("> #{used}") end elsif used then report("? #{used}") else report('no file found') end else report('no file specified') end else report('no file specified') end end def unzipfiles report('g-unzipping files') if files = findfiles('gz') then report files.each do |f| begin system("gunzip -d #{f}") rescue report("unable to unzip file #{f}") else report("file #{f} is unzipped") end end end end def fixafmfiles report('fixing afm files') if files = findfiles('afm') then report ok = false files.each do |filename| if filename =~ /\.afm$/io then if f = File.open(filename) then result = '' done = false while str = f.gets do str.chomp! str.strip! if str.empty? then # skip elsif (str.length > 200) && (str =~ /^(comment|notice)\s(.*)\s*$/io) then done = true tag, words, len = $1, $2.split(' '), 0 result += tag while words.size > 0 do str = words.shift len += str.length + 1 result += ' ' + str if len > (70 - tag.length) then result += "\n" result += tag if words.size > 0 len = 0 end end result += "\n" if len>0 else result += str + "\n" end end f.close if done then ok = true begin if File.rename(filename,filename+'.original') then if FileTest.file?(filename) then report("something to fix in #{filename} but error in renaming (3)") elsif f = File.open(filename,'w') then f.puts(result) f.close report('file', filename, 'has been fixed') else report("something to fix in #{filename} but error in opening (4)") File.rename(filename+'.original',filename) # gamble end else report("something to fix in #{filename} but error in renaming (2)") end rescue report("something to fix in #{filename} but error in renaming (1)") end else report("nothing to fix in #{filename}") end else report("error in opening #{filename}") end end end report('no files match the pattern') unless ok end end def mactodos report('fixing mac newlines') if files = findfiles('tex') then report files.each do |filename| begin report("converting file #{filename}") tmpfilename = filename + '.tmp' if f = File.open(filename) then if g = File.open(tmpfilename, 'w') while str = f.gets do g.puts(str.gsub(/\r/,"\n")) end if f.close && g.close && FileTest.file?(tmpfilename) then File.delete(filename) File.rename(tmpfilename,filename) end else report("unable to open temporary file #{tmpfilename}") end else report("unable to open #{filename}") end rescue report("problems with fixing #{filename}") end end end end def fixtexmftrees if paths = @commandline.argument('first') then paths = [paths] if ! paths.empty? end paths = texmfroots if paths.empty? if paths then moved = 0 force = @commandline.option('force') report report("checking TDS 2003 => TDS 2004 : map files") # report # move [map,enc] files from /texmf/[dvips,pdftex,dvipdfmx] -> /texmf/fonts/[*] ['map','enc'].each do |suffix| paths.each do |path| ['dvips','pdftex','dvipdfmx'].each do |program| report report("checking #{suffix} files for #{program} on #{path}") report moved += movefiles("#{path}/#{program}","#{path}/fonts/#{suffix}/#{program}",suffix) do # nothing end end end end report report("checking TDS 2003 => TDS 2004 : scripts") # report # move [rb,pl,py] files from /texmf/someplace -> /texmf/scripts/someplace ['rb','pl','py'].each do |suffix| paths.each do |path| ['context'].each do |program| report report("checking #{suffix} files for #{program} on #{path}") report moved += movefiles("#{path}/#{program}","#{path}/scripts/#{program}",suffix) do |f| f.gsub!(/\/(perl|ruby|python)tk\//o) do "/#{$1}/" end end end end end begin if moved>0 then report if force then system('mktexlsr') report report("#{moved} files moved") else report("#{moved} files will be moved") end else report('no files need to be moved') end rescue report('you need to run mktexlsr') end end end def replacefile report('replace file') if newname = @commandline.argument('first') then if newname && ! newname.empty? then report report("replacing #{newname}") report oldname = kpsefile(File.basename(newname)) force = @commandline.option('force') if oldname && ! oldname.empty? then oldname = File.expand_path(oldname) newname = File.expand_path(newname) report("old: #{oldname}") report("new: #{newname}") report if newname == oldname then report('unable to replace itself') elsif force then begin File.copy(newname,oldname) rescue report('error in replacing the old file') end else report('the old file will be replaced (use --force)') end else report('nothing to replace') end else report('no file specified') end else report('no file specified') end end private # general def texmfroots begin paths = `kpsewhich -expand-path=\$TEXMF`.chomp rescue else return paths.split(/#{File::PATH_SEPARATOR}/) if paths && ! paths.empty? end return nil end def texmffiles(root, filename) begin files = Dir.glob("#{root}/**/#{filename}") rescue else return files if files && files.length>0 end return nil end def pathfile(filename) used = nil begin if ! filename || filename.empty? then return nil else ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| if FileTest.file?(File.join(path,filename)) then used = File.join(path,filename) break end end end rescue used = nil else used = nil if used && used.empty? end return used end def kpsefile(filename) used = nil begin if ! filename || filename.empty? then return nil else used = `kpsewhich #{filename}`.chomp end if used && used.empty? then used = `kpsewhich -progname=context #{filename}`.chomp end if used && used.empty? then used = `kpsewhich -format=texmfscripts #{filename}`.chomp end if used && used.empty? then used = `kpsewhich -progname=context -format=texmfscripts #{filename}`.chomp end if used && used.empty? then used = `kpsewhich -format="other text files" #{filename}`.chomp end if used && used.empty? then used = `kpsewhich -progname=context -format="other text files" #{filename}`.chomp end rescue used = nil else used = nil if used && used.empty? end return used end def downcasefilenames report('downcase filenames') force = @commandline.option('force') # if @commandline.option('recurse') then # files = Dir.glob('**/*') # else # files = Dir.glob('*') # end # if files && files.length>0 then if files = findfiles() then files.each do |oldname| if FileTest.file?(oldname) then newname = oldname.downcase if oldname != newname then if force then begin File.rename(oldname,newname) rescue report("#{oldname} == #{oldname}\n") else report("#{oldname} => #{newname}\n") end else report("(#{oldname} => #{newname})\n") end end end end end end def stripformfeeds report('strip formfeeds') force = @commandline.option('force') if files = findfiles() then files.each do |filename| if FileTest.file?(filename) then begin data = IO.readlines(filename).join('') rescue else if data.gsub!(/\n*\f\n*/io,"\n\n") then if force then if f = open(filename,'w') then report("#{filename} is stripped\n") f.puts(data) f.close else report("#{filename} cannot be stripped\n") end else report("#{filename} will be stripped\n") end end end end end end end public def showfont file = @commandline.argument('first') if file.empty? then report('provide filename') else file.sub!(/\.afm$/,'') begin report("analyzing afm file #{file}.afm") file = `kpsewhich #{file}.afm`.chomp rescue report('unable to run kpsewhich') return end names = Array.new if FileTest.file?(file) then File.new(file).each do |line| if line.match(/^C\s*([\-\d]+)\s*\;.*?\s*N\s*(.+?)\s*\;/o) then names.push($2) end end ranges = names.size report("number of glyphs: #{ranges}") ranges = ranges/256 + 1 report("number of subsets: #{ranges}") file = File.basename(file).sub(/\.afm$/,'') tex = File.open("textools.tex",'w') map = File.open("textools.map",'w') tex.puts("\\starttext\n") tex.puts("\\loadmapfile[textools.map]\n") for i in 1..ranges do rfile = "#{file}-range-#{i}" report("generating enc file #{rfile}.enc") flushencoding("#{rfile}", (i-1)*256, i*256-1, names) # catch console output report("generating tfm file #{rfile}.tfm") mapline = `afm2tfm #{file}.afm -T #{rfile}.enc #{rfile}.tfm` # more robust replacement mapline = "#{rfile} <#{rfile}.enc <#{file}.pfb" # final entry in map file mapline = "#{mapline} <#{file}.pfb" map.puts("#{mapline}\n") tex.puts("\\showfont[#{rfile}][unknown]\n") end tex.puts("\\stoptext\n") report("generating map file textools.map") report("generating tex file textools.tex") map.close tex.close else report("invalid file #{file}") end end end @@knownchars = Hash.new @@knownchars['ae'] = 'aeligature' ; @@knownchars['oe'] = 'oeligature' @@knownchars['AE'] = 'AEligature' ; @@knownchars['OE'] = 'OEligature' @@knownchars['acute' ] = 'textacute' @@knownchars['breve' ] = 'textbreve' @@knownchars['caron' ] = 'textcaron' @@knownchars['cedilla' ] = 'textcedilla' @@knownchars['circumflex' ] = 'textcircumflex' @@knownchars['diaeresis' ] = 'textdiaeresis' @@knownchars['dotaccent' ] = 'textdotaccent' @@knownchars['grave' ] = 'textgrave' @@knownchars['hungarumlaut'] = 'texthungarumlaut' @@knownchars['macron' ] = 'textmacron' @@knownchars['ogonek' ] = 'textogonek' @@knownchars['ring' ] = 'textring' @@knownchars['tilde' ] = 'texttilde' @@knownchars['cent' ] = 'textcent' @@knownchars['currency'] = 'textcurrency' @@knownchars['euro' ] = 'texteuro' @@knownchars['florin' ] = 'textflorin' @@knownchars['sterling'] = 'textsterling' @@knownchars['yen' ] = 'textyen' @@knownchars['brokenbar'] = 'textbrokenbar' @@knownchars['bullet' ] = 'textbullet' @@knownchars['dag' ] = 'textdag' @@knownchars['ddag' ] = 'textddag' @@knownchars['degree' ] = 'textdegree' @@knownchars['div' ] = 'textdiv' @@knownchars['ellipsis' ] = 'textellipsis' @@knownchars['fraction' ] = 'textfraction' @@knownchars['lognot' ] = 'textlognot' @@knownchars['minus' ] = 'textminus' @@knownchars['mu' ] = 'textmu' @@knownchars['multiply' ] = 'textmultiply' @@knownchars['pm' ] = 'textpm' def encmake afmfile = @commandline.argument('first') encoding = @commandline.argument('second') || 'dummy' if afmfile && FileTest.file?(afmfile) then chars = Array.new IO.readlines(afmfile).each do |line| if line =~ /C\s+(\d+).*?N\s+([a-zA-Z\-\.]+?)\s*;/ then chars[$1.to_i] = $2 end end if f = File.open(encoding+'.enc','w') then f << "% Encoding file, generated by textools.rb from #{afmfile}\n" f << "\n" f << "/#{encoding.gsub(/[^a-zA-Z]/,'')}encoding [\n" 256.times do |i| f << " /#{chars[i] || '.notdef'} % #{i}\n" end f << "] def\n" f.close end if f = File.open('enco-'+encoding+'.tex','w') then f << "% ConTeXt file, generated by textools.rb from #{afmfile}\n" f << "\n" f << "\\startencoding[#{encoding}]\n\n" 256.times do |i| if str = chars[i] then tmp = str.gsub(/dieresis/,'diaeresis') if chr = @@knownchars[tmp] then f << " \\definecharacter #{chr} #{i}\n" elsif tmp.length > 5 then f << " \\definecharacter #{tmp} #{i}\n" end end end f << "\n\\stopencoding\n" f << "\n\\endinput\n" f.close end end end private def flushencoding (file, from, to, names) n = 0 out = File.open("#{file}.enc",'w') out.puts("/#{file.gsub(/\-/,'')} [\n") for i in from..to do if names[i] then n += 1 out.puts("/#{names[i]}\n") else out.puts("/.notdef\n") end end out.puts("] def\n") out.close return n end private # specific def movefiles(from_path,to_path,suffix,&block) obsolete = 'obsolete' force = @commandline.option('force') moved = 0 if files = texmffiles(from_path, "*.#{suffix}") then files.each do |filename| newfilename = filename.sub(/^#{from_path}/, to_path) yield(newfilename) if block if FileTest.file?(newfilename) then begin File.rename(filename,filename+'.obsolete') if force rescue report("#{filename} cannot be made obsolete") if force else if force then report("#{filename} is made obsolete") else report("#{filename} will become obsolete") end end else begin File.makedirs(File.dirname(newfilename)) if force rescue end begin File.copy(filename,newfilename) if force rescue report("#{filename} cannot be copied to #{newfilename}") else begin File.delete(filename) if force rescue report("#{filename} cannot be deleted") if force else if force then report("#{filename} is moved to #{newfilename}") moved += 1 else report("#{filename} will be moved to #{newfilename}") end end end end end else report('no matches found') end return moved end def xidemapnames(hide) filter = /^([^\%]+?)(\s+)([^\"\<\s]*?)(\s)/ banner = '% textools:nn ' if files = findfiles('map') then report files.sort.each do |fn| if fn.has_suffix?('map') then begin lines = IO.read(fn) report("processing #{fn}") if f = File.open(fn,'w') then skip = false if hide then lines.each do |str| if skip then skip = false elsif str =~ /#{banner}/ then skip = true elsif str =~ filter then f.puts(banner+str) str.sub!(filter) do $1 + $2 + " "*$3.length + $4 end end f.puts(str) end else lines.each do |str| if skip then skip = false elsif str.sub!(/#{banner}/, '') then f.puts(str) skip = true else f.puts(str) end end end f.close end rescue report("error in handling #{fn}") end end end end end public def updatetree nocheck = @commandline.option('nocheck') merge = @commandline.option('merge') delete = @commandline.option('delete') force = @commandline.option('force') root = @commandline.argument('first').gsub(/\\/,'/') path = @commandline.argument('second').gsub(/\\/,'/') if FileTest.directory?(root) then report("scanning #{root}") rootfiles = Dir.glob("#{root}/**/*") else report("provide source root") return end if rootfiles.size > 0 then report("#{rootfiles.size} files") else report("no files") return end rootfiles.collect! do |rf| rf.gsub(/\\/o, '/').sub(/#{root}\//o, '') end rootfiles = rootfiles.delete_if do |rf| FileTest.directory?(File.join(root,rf)) end if FileTest.directory?(path) then report("scanning #{path}") pathfiles = Dir.glob("#{path}/**/*") else report("provide destination root") return end if pathfiles.size > 0 then report("#{pathfiles.size} files") else report("no files") return end pathfiles.collect! do |pf| pf.gsub(/\\/o, '/').sub(/#{path}\//o, '') end pathfiles = pathfiles.delete_if do |pf| FileTest.directory?(File.join(path,pf)) end root = File.expand_path(root) path = File.expand_path(path) donepaths = Hash.new copiedfiles = Hash.new # update existing files, assume similar paths report("") pathfiles.each do |f| # destination p = File.join(path,f) if rootfiles.include?(f) then r = File.join(root,f) if p != r then if nocheck or File.mtime(p) < File.mtime(r) then copiedfiles[File.expand_path(p)] = true report("updating '#{r}' to '#{p}'") begin begin File.makedirs(File.dirname(p)) if force ; rescue ; end File.copy(r,p) if force rescue report("updating failed") end else report("not updating '#{r}'") end end end end # merging non existing files report("") rootfiles.each do |f| donepaths[File.dirname(f)] = true r = File.join(root,f) if not pathfiles.include?(f) then p = File.join(path,f) if p != r then if merge then copiedfiles[File.expand_path(p)] = true report("merging '#{r}' to '#{p}'") begin begin File.makedirs(File.dirname(p)) if force ; rescue ; end File.copy(r,p) if force rescue report("merging failed") end else report("not merging '#{r}'") end end end end # deleting obsolete files report("") donepaths.keys.sort.each do |d| pathfiles = Dir.glob("#{path}/#{d}/**/*") pathfiles.each do |p| # puts(File.dirname(p)) # if donepaths[File.dirname(p)] then r = File.join(root,d,File.basename(p)) if FileTest.file?(p) and not FileTest.file?(r) and not copiedfiles.key?(File.expand_path(p)) then if delete then report("deleting '#{p}'") begin File.delete(p) if force rescue report("deleting failed") end else report("not deleting '#{p}'") end end end # end end end end logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registeraction('removemapnames' , '[pattern] [--recurse]') commandline.registeraction('restoremapnames' , '[pattern] [--recurse]') commandline.registeraction('hidemapnames' , '[pattern] [--recurse]') commandline.registeraction('videmapnames' , '[pattern] [--recurse]') commandline.registeraction('findfile' , 'filename [--recurse]') commandline.registeraction('unzipfiles' , '[pattern] [--recurse]') commandline.registeraction('fixafmfiles' , '[pattern] [--recurse]') commandline.registeraction('mactodos' , '[pattern] [--recurse]') commandline.registeraction('fixtexmftrees' , '[texmfroot] [--force]') commandline.registeraction('replacefile' , 'filename [--force]') commandline.registeraction('updatetree' , 'fromroot toroot [--force --nocheck --merge --delete]') commandline.registeraction('downcasefilenames', '[--recurse] [--force]') # not yet documented commandline.registeraction('stripformfeeds' , '[--recurse] [--force]') # not yet documented commandline.registeraction('showfont' , 'filename') commandline.registeraction('encmake' , 'afmfile encodingname') commandline.registeraction('tpmmake' , 'tpm file (run in texmf root)') commandline.registeraction('help') commandline.registeraction('version') commandline.registerflag('recurse') commandline.registerflag('force') commandline.registerflag('merge') commandline.registerflag('delete') commandline.registerflag('nocheck') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'help') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/runtools.rb0000644000175000017500000003262012073425545025053 0ustar norbertnorbertrequire 'timeout' require 'fileutils' # require 'ftools' require 'rbconfig' class File # we don't want a/b//c # # puts File.join('a','b','c') # puts File.join('/a','b','c') # puts File.join('a:','b','c') # puts File.join('a/','/b/','c') # puts File.join('/a','/b/','c') # puts File.join('//a/','/b/','c') def File.join(*list) path, prefix = [*list].flatten.join(File::SEPARATOR), '' path.sub!(/^([\/]+)/) do prefix = $1 '' end path.gsub!(/([\\\/]+)/) do File::SEPARATOR end prefix + path end end class Job $ownfile, $ownpath = '', '' def Job::set_own_path(file) $ownfile, $ownpath = File.basename(file), File.expand_path(File.dirname(file)) $: << $ownpath end def Job::ownfile $ownfile end def Job::ownpath $ownpath end end class Job def initialize @startuppath = Dir.getwd @log = Array.new @testmode = false @ownpath = $ownpath @paths = Array.new end def exit(showlog=false) Dir.chdir(@startuppath) show_log if showlog Kernel::exit end def platform case RbConfig::CONFIG['host_os'] when /mswin/ then :windows else :unix end end def path(*components) File.join([*components].flatten) end def found(name) FileTest.file?(path(name)) || FileTest.directory?(path(name)) end def binary(name) if platform == :windows then name.sub(/\.[^\/]+$/o,'') + '.exe' else name end end def suffixed(name,suffix) if name =~ /\.[^\/]+$/o then name else name + '.' + suffix end end def expanded(*name) File.expand_path(File.join(*name)) end def argument(n,default=nil) ARGV[n] || default end def variable(name,default='') ENV[name] || default end def change_dir(*dir) dir, old = expanded(path(*dir)), expanded(Dir.getwd) unless old == dir then begin Dir.chdir(dir) rescue error("unable to change to path #{dir}") else if old == dir then error("error in changing to path #{dir}") else message("changed to path #{dir}") end end end # return File.expand_path(Dir.getwd) end def delete_dir(*dir) begin dir = path(*dir) pattern = "#{dir}/**/*" puts("analyzing dir #{pattern}") files = Dir.glob(pattern).sort.reverse files.each do |f| begin # FileTest.file?(f) fails on .whatever files File.delete(f) rescue # probably directory else puts("deleting file #{f}") end end files.each do |f| begin Dir.rmdir(f) rescue # strange else message("deleting path #{f}") end end begin Dir.rmdir(dir) rescue # strange else message("deleting parent #{dir}") end Dir.glob(pattern).sort.each do |f| warning("unable to delete #{f}") end rescue warning("unable to delete path #{File.expand_path(dir)} (#{$!})") else message("path #{File.expand_path(dir)} removed") end end def create_dir(*dir) begin dir = path(*dir) unless FileTest.directory?(dir) then File.makedirs(dir) else return end rescue error("unable to create path #{File.expand_path(dir)}") else message("path #{File.expand_path(dir)} created") end end def show_dir(delay=0) _puts_("\n") print Dir.getwd + ' ' begin timeout(delay) do loop do print '.' sleep(1) end end rescue TimeoutError # ok end _puts_("\n\n") end def copy_file(from,to='.',exclude=[]) to, ex = path(to), [exclude].flatten Dir.glob(path(from)).each do |file| tofile = to.sub(/[\.\*]$/o) do File.basename(file) end _do_copy_(file,tofile) unless ex.include?(File.extname(file)) end end def clone_file(from,to) if from and to then to = File.join(File.basename(from),to) if File.basename(to).empty? _do_copy_(from,to) end end def copy_dir(from,to,pattern='*',exclude=[]) # recursive pattern = '*' if ! pattern or pattern.empty? if from and to and File.expand_path(from) != File.expand_path(to) then ex = [exclude].flatten Dir.glob("#{from}/**/#{pattern}").each do |file| unless ex.include?(File.extname(file)) then _do_copy_(file,File.join(to,file.sub(/^#{from}/, ''))) end end end end def copy_path(from,to,pattern='*',exclude=[]) # non-recursive pattern = '*' if ! pattern or pattern.empty? if from and to and File.expand_path(from) != File.expand_path(to) then ex = [exclude].flatten Dir.glob("#{from}/#{pattern}").each do |file| unless ex.include?(File.extname(file)) then _do_copy_(file,File.join(to,file.sub(/^#{from}/, ''))) end end end end def _do_copy_(file,tofile) if FileTest.file?(file) and File.expand_path(file) != File.expand_path(tofile) then begin create_dir(File.dirname(tofile)) File.copy(file,tofile) rescue error("unable to copy #{file} to #{tofile}") else message("file #{file} copied to #{tofile}") end else puts("file #{file} is not copied") end end def rename_file(from,to) from, to = path(from), path(to) begin File.move(from,to) rescue error("unable to rename #{from} to #{to}") else message("#{from} renamed to #{to}") end end def delete_file(pattern) Dir.glob(path(pattern)).each do |file| _do_delete_(file) end end def delete_files(*files) [*files].flatten.each do |file| _do_delete_(file) end end def _do_delete_(file) if FileTest.file?(file) then begin File.delete(file) rescue error("unable to delete file #{file}") else message("file #{file} deleted") end else message("no file #{File.expand_path(file)}") end end def show_log(filename=nil) if filename then begin if f = File.open(filename,'w') then @log.each do |line| f.puts(line) end f.close end message("log data written to #{filename}") rescue error("unable to write log to #{filename}") end else @log.each do |line| _puts_(line) end end end def _puts_(str) begin STDOUT.puts( str) rescue STDERR.puts("error while writing '#{str}' to terminal") end end def puts(message) @log << message _puts_(message) end def error(message) puts("! #{message}") exit end def warning(message) puts("- #{message}") end def message(message) puts("+ #{message}") end def export_variable(variable,value) value = path(value) if value.class == Array ENV[variable] = value message("environment variable #{variable} set to #{value}") return value end def execute_command(*command) begin command = [*command].flatten.join(' ') message("running '#{command}'") _puts_("\n") ok = system(command) _puts_("\n") if true then # ok then message("finished '#{command}'") else error("error in running #{command}") end rescue error("unable to run #{command}") end end def pipe_command(*command) begin command = [*command].flatten.join(' ') message("running '#{command}'") result = `#{command}` _puts_("\n") _puts_(result) _puts_("\n") rescue error("unable to run #{command}") end end def execute_script(script) script = suffixed(script,'rb') script = path(script_path,File.basename(script)) unless found(script) if found(script) then begin message("loading script #{script}") load(script) rescue error("error in loading script #{script} (#{$!})") else message("script #{script} finished") end else warning("no script #{script}") end end def execute_binary(*command) command = [*command].flatten.join(' ').split(' ') command[0] = binary(command[0]) execute_command(command) end def extend_path(pth) export_variable('PATH',"#{path(pth)}#{File::PATH_SEPARATOR}#{ENV['PATH']}") end def startup_path @startuppath end def current_path Dir.getwd end def script_path @ownpath end def push_path(newpath) newpath = File.expand_path(newpath) @paths.push(newpath) change_dir(newpath) end def pop_path change_dir(if @paths.length > 0 then @paths.pop else @startuppath end) end # runner = Runner.new # runner.texmfstart('texexec','--help') def texmfstart(name,args,verbose=false) command = ['texmfstart',"#{'--verbose' if verbose}",name,args].flatten.join(' ') system(command) end end class Job # copied from texmfstart and patched (message/error), different name def use_tree(tree) unless tree.empty? then begin setuptex = File.join(tree,'setuptex.tmf') if FileTest.file?(setuptex) then message("tex tree : #{setuptex}") ENV['TEXPATH'] = tree.sub(/\/+$/,'') # + '/' ENV['TMP'] = ENV['TMP'] || ENV['TEMP'] || ENV['TMPDIR'] || ENV['HOME'] case RUBY_PLATFORM when /(mswin|bccwin|mingw|cygwin)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-mswin' when /(linux)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-linux' when /(darwin|rhapsody|nextstep)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-macosx' # when /(netbsd|unix)/i then # todo else # todo end ENV['TEXMFOS'] = "#{ENV['TEXPATH']}/#{ENV['TEXOS']}" message("preset : TEXPATH => #{ENV['TEXPATH']}") message("preset : TEXOS => #{ENV['TEXOS']}") message("preset : TEXMFOS => #{ENV['TEXMFOS']}") message("preset : TMP => #{ENV['TMP']}") IO.readlines(File.join(tree,'setuptex.tmf')).each do |line| case line when /^[\#\%]/ then # comment when /^(.*?)\s+\=\s+(.*)\s*$/ then k, v = $1, $2 ENV[k] = v.gsub(/\%(.*?)\%/) do ENV[$1] || '' end message("user set : #{k} => #{ENV[k]}") end end else warning("no setup file '#{setuptex}', tree not initialized") # no error end rescue warning("error in setup: #{$!}") end end end end Job::set_own_path($0) if Job::ownfile == 'runtools.rb' then begin script = ARGV.shift if script then script += '.rb' if File.extname(script).empty? fullname = File.expand_path(script) fullname = File.join(Job::ownpath,script) unless FileTest.file?(fullname) if FileTest.file?(fullname) then puts("loading script #{fullname}") Job::set_own_path(fullname) load(fullname) else puts("unknown script #{fullname}") end else puts("provide script name") end rescue puts("fatal error: #{$!}") end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/pdftools.rb0000644000175000017500000007725111244221744025023 0ustar norbertnorbert#!/usr/bin/env ruby # program : pdftools # copyright : PRAGMA Advanced Document Engineering # version : 2003-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # This script will harbor some handy manipulations on tex # related files. banner = ['PDFTools', 'version 1.2.1', '2003/2005', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' require 'fileutils' # require 'ftools' class File def File.deletefiles(*filenames) filenames.flatten.each do |filename| begin delete(filename) if FileTest.file?(filename) rescue end end end def File.needsupdate(oldname,newname) begin return File.stat(oldname).mtime != File.stat(newname).mtime rescue return true end end def File.syncmtimes(oldname,newname) begin t = Time.now # i'm not sure if the time is frozen, so we do it here File.utime(0,t,oldname,newname) rescue end end def File.replacesuffix(oldname,subpath='') newname = File.expand_path(oldname.sub(/\.\w+?$/,'.pdf')) File.join(File.dirname(newname),subpath,File.basename(newname)) end end class ImageMagick def initialize begin version = `convert -version` rescue @binary = nil ensure if (version) && (! version.empty?) && (version =~ /ImageMagick/mo) && (version =~ /version/mio) then @binary = 'convert' else @binary = 'imagemagick' end end end def process(arguments) begin @binary && system("#{@binary} #{arguments}") rescue false end end end class TexExec def initialize @binary = 'texmfstart texexec.pl --pdf --batch --silent --purge' end def process(arguments,once=true) begin if once then @binary && system("#{@binary} --once #{arguments}") else @binary && system("#{@binary} #{arguments}") end rescue false end end end class PdfImages def initialize @binary = "pdfimages" end def process(arguments) begin @binary && system("#{@binary} #{arguments}") rescue false end end end class ConvertImage def initialize(command=nil) @command = command end def convertimage(filename) return if filename =~ /\.(pdf)$/io retain = @command.option('retain') subpath = @command.option('subpath') if filename =~ /\s/ then @command.report("skipping strange filename '#{filename}'") else newname = File.replacesuffix(filename,subpath) # newname.gsub!(s/[^a-zA-Z0-9\_-\.]/o, '-') begin File.makedirs(File.dirname(newname)) rescue end if ! retain || File.needsupdate(filename,newname) then imagemagick = ImageMagick.new if imagemagick then ok = imagemagick.process("-compress zip -quality 99 #{filename} #{newname}") File.syncmtimes(oldname,newname) if retain end end end end end class DownsampleImage def initialize(command=nil) @command = command end def convertimage(filename) return if filename =~ /\.(pdf)$/io retain = @command.option('retain') subpath = @command.option('subpath') if @command.option('lowres') then method = '4' elsif @command.option('medres') || @command.option('normal') then method = '5' else method = '4' end if filename =~ /\s/ then @command.report("skipping strange filename '#{filename}'") else newname = File.replacesuffix(filename,subpath) begin File.makedirs(File.dirname(newname)) rescue end if ! retain || File.needsupdate(filename,newname) then ok = system("texmfstart pstopdf.rb --method=#{method} #{filename} #{newname}") File.syncmtimes(oldname,newname) if retain end end end end class ColorImage def initialize(command=nil,tmpname='pdftools') @command = command @tmpname = tmpname @colorname = nil @colorspec = nil @colorspace = nil end def registercolor(spec='.5',name='c') name = name || 'c' spec = spec.split(',') case spec.length when 4 @colorname, @colorspec, @colorspace = name, spec.join('/'), 'cmyk' when 3 @colorname, @colorspec, @colorspace = name, spec.join('/'), 'rgb' when 1 @colorname, @colorspec, @colorspace = name, spec.join('/'), 'gray' else @colorname, @colorspec, @colorspace = nil, nil, nil end end def convertimage(filename) invert = @command.option('invert') retain = @command.option('retain') subpath = @command.option('subpath') subpath += '/' unless subpath.empty? if @colorname && ! @colorname.empty? && @colorspec && ! @colorspec.empty? then basename = filename.sub(/\.\w+?$/,'') oldname = filename ppmname = @tmpname + '-000.ppm' jpgname = @tmpname + '-000.jpg' newname = File.expand_path(oldname) newname = File.dirname(newname) + '/' + subpath + @colorname + '-' + File.basename(newname) newname.sub!(/\.\w+?$/, '.pdf') begin File.makedirs(File.dirname(newname)) rescue end if ! retain || File.needsupdate(filename,newname) then pdfimages = PdfImages.new imagemagick = ImageMagick.new if pdfimages && imagemagick then File.deletefiles(ppmname,jpgname,newname) if filename =~ /\.(pdf)$/io then ok = pdfimages.process("-j -f 1 -l 1 #{filename} #{@tmpname}") if ok then if FileTest.file?(ppmname) then inpname = ppmname elsif FileTest.file?(jpgname) then inpname = jpgname else ok = false end if ok then switch = if ! invert then '-negate' else '' end # make sure that we keep the format tmpname = File.basename(inpname) tmpname = tmpname.sub(/(.*)\..*?$/,@tmpname) # somehow sub! fails here ok = imagemagick.process("-colorspace gray #{switch} #{inpname} #{tmpname}") if ! ok || ! FileTest.file?(tmpname) then # problems else ok = imagemagick.process("-colorspace #{switch} #{@colorspace} -colorize #{@colorspec} -compress zip #{tmpname} #{newname}") if ! ok || ! FileTest.file?(newname) then # unable to colorize image else # conversion done end end end end else # make sure that we keep the format tmpname = File.basename(basename) tmpname = tmpname.sub(/(.*)\..*?$/,@tmpname) # somehow sub! fails here ok = imagemagick.process("-colorspace gray #{oldname} #{tmpname}") if ! ok || ! FileTest.file?(tmpname) then # unable to convert color to gray else ok = imagemagick.process("-colorspace #{@colorspace} -colorize #{@colorspec} -compress zip #{tmpname} #{newname}") if ! ok || ! FileTest.file?(newname) then # unable to colorize image else # conversion done end end end File.deletefiles(ppmname,jpgname,tmpname) File.syncmtimes(filename,newname) if retain end end end end end class SpotColorImage def initialize(command=nil, tmpname='pdftools') @command = command @tmpname = tmpname @colorname = nil @colorspec = nil @colorspace = nil @colorfile = nil end def registercolor(spec='.5',name='unknown') name = name || 'unknown' if spec =~ /^[\d\.\,]+$/ then spec = spec.split(',') case spec.length when 4 @colorname, @colorspec, @colorspace = name, ["c=#{spec[0]}","m=#{spec[1]}","y=#{spec[2]}","k=#{spec[3]}"].join(','), 'cmyk' when 3 @colorname, @colorspec, @colorspace = name, ["r=#{spec[0]}","g=#{spec[1]}","b=#{spec[2]}"].join(','), 'rgb' when 1 @colorname, @colorspec, @colorspace = name, ["s=#{spec[0]}"].join(','), 'gray' else @colorname, @colorspec, @colorspace = nil, nil, nil end else @colorname, @colorfile = name, spec end end def convertgrayimage(filename) invert = @command.option('invert') retain = @command.option('retain') subpath = @command.option('subpath') subpath += '/' unless subpath.empty? if @colorname && ! @colorname.empty? && ((@colorspec && ! @colorspec.empty?) || (@colorfile && ! @colorfile.empty?)) then basename = filename.sub(/\.\w+?$/,'') oldname = filename # png jpg pdf newname = File.expand_path(oldname) ppmname = @tmpname + '-000.ppm' jpgname = @tmpname + '-000.jpg' outname = @tmpname + '-000.pdf' texname = @tmpname + '-temp.tex' pdfname = @tmpname + '-temp.pdf' newname = File.dirname(newname) + '/' + subpath + @colorname + '-' + File.basename(newname) newname.sub!(/\.\w+?$/, '.pdf') begin File.makedirs(File.dirname(newname)) rescue end if ! retain || File.needsupdate(filename,newname) then pdfimages = PdfImages.new imagemagick = ImageMagick.new texexec = TexExec.new if pdfimages && imagemagick && texexec then if filename =~ /\.(jpg|png|pdf)$/io then @command.report("processing #{basename}") File.deletefiles(ppmname,jpgname,newname) switch = if ! invert then '-negate' else '' end if filename =~ /\.(pdf)$/io then ok = pdfimages.process("-j -f 1 -l 1 #{oldname} #{@tmpname}") if ok then if FileTest.file?(ppmname) then inpname = ppmname elsif FileTest.file?(jpgname) then inpname = jpgname else ok = false end if ok then ok = imagemagick.process("-colorspace gray #{switch} -compress zip #{inpname} #{outname}") end end else ok = imagemagick.process("-colorspace gray #{switch} -compress zip #{oldname} #{outname}") end if ok then ok = false unless FileTest.file?(outname) end if ok then if f = File.open(texname, 'w') then f.puts(conversionfile(filename,outname,newname)) f.close ok = texexec.process(texname) else ok = false end @command.report("error in processing #{newname}") unless ok if FileTest.file?(pdfname) then if f = File.open(pdfname,'r') then f.binmode begin if g = File.open(newname,'w') then g.binmode data = f.read # pdftex (direct) & imagemagick (indirect) if data =~ /(\d+)\s+0\s+obj\s+\[\/Separation\s+\/#{@colorname}/mos then @command.report("replacing separation color") object = $1 data.gsub!(/(\/Type\s+\/XObject.*?)(\/ColorSpace\s*(\/DeviceGray|\/DeviceCMYK|\/DeviceRGB|\d+\s+\d+\s+R))/moi) do $1 + "/ColorSpace #{object} 0 R".ljust($2.length) end elsif data =~ /(\d+)\s+0\s+obj\s+\[\/Indexed\s*\[/mos then @command.report("replacing indexed color") # todo: more precise check on color object = $1 data.gsub!(/(\/Type\s+\/XObject.*?)(\/ColorSpace\s*(\/DeviceGray|\/DeviceCMYK|\/DeviceRGB|\d+\s+\d+\s+R))/moi) do $1 + "/ColorSpace #{object} 0 R".ljust($2.length) end elsif data =~ /(\d+)\s+0\s+obj\s+\[\/Separation/mos then @command.report("replacing separation color") object = $1 data.gsub!(/(\/Type\s+\/XObject.*?)(\/ColorSpace\s*(\/DeviceGray|\/DeviceCMYK|\/DeviceRGB|\d+\s+\d+\s+R))/moi) do $1 + "/ColorSpace #{object} 0 R".ljust($2.length) end end g.write(data) g.close end rescue @command.report("error in converting #{newname}") else @command.report("#{newname} is converted") end f.close end else @command.report("error in writing #{newname}") end else @command.report("error in producing #{newname}") end File.deletefiles(ppmname,jpgname,outname) # File.deletefiles(texname,pdfname) File.syncmtimes(filename,newname) if retain end else @command.report("error in locating binaries") end else @command.report("#{newname} is not changed") end end end private # % example colorfile: # # \definecolor [darkblue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m # \definecolor [darkyellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m # # % \definecolor [darkblue-100] [darkblue] [p=1] # % \definecolor [darkyellow-100] [darkyellow] [p=1] # # \definecolorcombination [pdftoolscolor] [darkblue=.12,darkyellow=.28] [c=.1,m=.1,y=.3,k=.1] def conversionfile(originalname,filename,finalname) tex = "\\setupcolors[state=start]\n" if @colorfile then tex += "\\readfile{#{@colorfile}}{}{}\n" tex += "\\starttext\n" # tex += "\\predefineindexcolor[pdftoolscolor]\n" tex += "\\startTEXpage\n" tex += "\\pdfimage{#{filename}}\n" tex += "\\stopTEXpage\n" tex += "\\stoptext\n" else tex += "\\definecolor[#{@colorname}][#{@colorspec}]\n" tex += "\\definecolor[pdftoolscolor][#{@colorname}][p=1]\n" tex += "\\starttext\n" tex += "\\startTEXpage\n" tex += "\\hbox{\\color[pdftoolscolor]{\\pdfimage{#{filename}}}}\n" tex += "\\stopTEXpage\n" tex += "\\stoptext\n" end tex += "\n" tex += "% old: #{originalname}\n" tex += "% new: #{finalname}\n" return tex end end module XML def XML::version "" end def XML::start(element, attributes='') if attributes.empty? then "<#{element}>" else "<#{element} #{attributes}>" end end def XML::end(element) "" end def XML::empty(element, attributes='') if attributes && attributes.empty? then "<#{element}/>" else "<#{element} #{attributes}/>" end end def XML::element(element, attributes='', content='') if content && ! content.empty? then XML::start(element,attributes) + content + XML::end(element) else XML::empty(element,attributes) end end def XML::box(tag, rect, type=1) case type when 1 if rect && ! rect.empty? then rect = rect.split(' ') XML::element("#{tag}box", '', XML::element("llx", '', rect[0]) + XML::element("lly", '', rect[1]) + XML::element("ulx", '', rect[2]) + XML::element("uly", '', rect[3]) ) else XML::empty("#{tag}box") end when 2 if rect && ! rect.empty? then rect = rect.split(' ') XML::element("box", "type='#{tag}'", XML::element("llx", '', rect[0]) + XML::element("lly", '', rect[1]) + XML::element("ulx", '', rect[2]) + XML::element("uly", '', rect[3]) ) else XML::empty("box", "type='#{tag}'") end when 3 if rect && ! rect.empty? then rect = rect.split(' ') XML::element("box", "type='#{tag}' llx='#{rect[0]}' lly='#{rect[1]}' ulx='#{rect[2]}' uly='#{rect[3]}'") else XML::empty("box", "type='#{tag}'") end else '' end end def XML::crlf "\n" end def XML::skip(n=1) ' '*n end end class Commands include CommandBase # alias savedhelp :help # def help # savedhelp # report("under construction (still separate tools)") # end # filename.pdf --spotimage --colorname=darkblue --colorspec=1,0.38,0,0.64 def spotimage if ! @commandline.argument('first').empty? && files = findfiles() then colorname = @commandline.option('colorname') colorspec = @commandline.option('colorspec') if colorname && ! colorname.empty? && colorspec && ! colorspec.empty? then files.each do |filename| s = SpotColorImage.new(self) s.registercolor(colorspec,colorname) s.convertgrayimage(filename) end else report("provide --colorname=somename --colorspec=c,m,y,k") end else report("provide filename (png, jpg, pdf)") end end def colorimage if ! @commandline.argument('first').empty? && files = findfiles() then colorname = @commandline.option('colorname') colorspec = @commandline.option('colorspec') if colorspec && ! colorspec.empty? then files.each do |filename| s = ColorImage.new(self) s.registercolor(colorspec,colorname) # name optional s.convertimage(filename) end else report("provide --colorspec=c,m,y,k") end else report("provide filename") end end def convertimage if ! @commandline.argument('first').empty? && files = findfiles() then files.each do |filename| s = ConvertImage.new(self) s.convertimage(filename) end else report("provide filename") end end def downsampleimage if ! @commandline.argument('first').empty? && files = findfiles() then files.each do |filename| s = DownsampleImage.new(self) s.convertimage(filename) end else report("provide filename") end end def info if files = findfiles() then print(XML.version + XML.crlf) print(XML.start('pdfinfo', "xmlns='http://www.pragma-ade.com/schemas/pdfinfo.rng'") + XML.crlf) files.each do |filename| if filename =~ /\.pdf$/io then begin data = `pdfinfo -box #{filename}`.chomp.split("\n") rescue data = nil end if data then pairs = Hash.new data.each do |d| if (d =~ /^\s*(.*?)\s*\:\s*(.*?)\s*$/moi) then key, val = $1, $2 pairs[key.downcase.sub(/ /,'')] = val end end print(XML.skip(1) + XML.start('pdffile', "filename='#{filename}'") + XML.crlf) print(XML.skip(2) + XML.element('path', '', File.expand_path(filename)) + XML.crlf) if pairs.key?('error') then print(XML.skip(2) + XML.element('comment', '', pairs['error']) + XML.crlf) else print(XML.skip(2) + XML.element('version', '', pairs['pdfversion']) + XML.crlf) print(XML.skip(2) + XML.element('pages', '', pairs['pages' ]) + XML.crlf) print(XML.skip(2) + XML.element('title', '', pairs['title' ]) + XML.crlf) print(XML.skip(2) + XML.element('subject', '', pairs['subject' ]) + XML.crlf) print(XML.skip(2) + XML.element('author', '', pairs['author' ]) + XML.crlf) print(XML.skip(2) + XML.element('producer', '', pairs['producer' ]) + XML.crlf) if pairs.key?('creationdate') then pairs['creationdate'].sub!(/(\d\d)\/(\d\d)\/(\d\d)/) do '20' + $3 + '-' + $1 + '-' +$2 end pairs['creationdate'].sub!(/(\d\d)\/(\d\d)\/(\d\d\d\d)/) do $3 + '-' + $1 + '-' + $2 end print(XML.skip(2) + XML.element('creationdate', '', pairs['creationdate']) + XML.crlf) end if pairs.key?('moddate') then if pairs['moddate'] =~ /(\d\d\d\d)(\d\d)(\d\d)/ then pairs['moddate'] = "#{$1}-#{$2}-#{$3}" end print(XML.skip(2) + XML.element('modificationdate', '', pairs['moddate']) + XML.crlf) end print(XML.skip(2) + XML.element('tagged', '', pairs['tagged' ]) + XML.crlf) print(XML.skip(2) + XML.element('encrypted', '', pairs['encrypted']) + XML.crlf) print(XML.skip(2) + XML.element('optimized', '', pairs['optimized']) + XML.crlf) if pairs.key?('PageSize') then print(XML.skip(2) + XML.element('width', '', pairs['pagesize'].sub(/\s*(.*?)\s+(.*?)\s+.*/, $1)) + XML.crlf) print(XML.skip(2) + XML.element('height', '', pairs['pagesize'].sub(/\s*(.*?)\s+(.*?)\s+.*/, $2)) + XML.crlf) end if pairs.key?('FileSize') then print(XML.skip(2) + XML.element('size', '', pairs['filesize'].sub(/\s*(.*?)\s+.*/, $1)) + XML.crlf) end print(XML.skip(2) + XML.box('media', pairs['mediabox']) + XML.crlf) print(XML.skip(2) + XML.box('crop' , pairs['cropbox' ]) + XML.crlf) print(XML.skip(2) + XML.box('bleed', pairs['bleedbox']) + XML.crlf) print(XML.skip(2) + XML.box('trim' , pairs['trimBox' ]) + XML.crlf) print(XML.skip(2) + XML.box('art' , pairs['artbox' ]) + XML.crlf) end print(XML.skip(1) + XML.end('pdffile') + XML.crlf) end end end print(XML.end('pdfinfo') + XML.crlf) end end # name type emb sub uni object ID # ------------------------------------ ------------ --- --- --- --------- # EOPLBP+TimesNewRomanPSMT TrueType yes yes no 167 0 # Times-Roman TrueType no no no 95 0 # EPBAAB+Helvetica Type 1C yes yes yes 108 0 # EPBMLE+Helvetica-Oblique Type 1C yes yes yes 111 0 # Helvetica TrueType no no no 112 0 def checkembedded $stderr = $stdout $stdout.flush if @commandline.option('pattern') then # **/*.pdf filenames, n = globfiles(@commandline.option('pattern'),'pdf'), 0 else filenames, n = findfiles('pdf'), 0 end filenames.sort.each do |file| report("= checking #{File.expand_path(file)}") result = `pdffonts #{file}`.chomp lines = result.split(/\n/) if result =~ /emb\s+sub\s+uni/io then lines.each do |line| report("! #{line}") if line =~ /no\s+(no|yes)\s+(no|yes)/io end else lines.each do |line| report("? #{line}") end end report("") end end def countpages if @commandline.option('pattern') then filenames, n = globfiles(@commandline.option('pattern'),'pdf'), 0 else filenames, n = findfiles('pdf'), 0 end threshold = @commandline.option('threshold').to_i rescue 0 filenames.each do |filename| if `pdfinfo #{filename}`.chomp =~ /^pages\s*\:\s*(\d+)/moi then p = $1 m = p.to_i rescue 0 if threshold == 0 or m > threshold then report("#{p.rjust(4)} pages found in #{filename}") n += m end end end report("") report("#{n.to_s.rjust(4)} pages in total") end def analyzefile # needs an update filenames = @commandline.arguments filenames.each do |filename| if filename && FileTest.file?(filename) && filename =~ /\.pdf/io then filesize = FileTest.size(filename) report("analyzing file : #{filename}") report("file size : #{filesize}") if pdf = File.open(filename) then pdf.binmode nofobject, nofxform, nofannot, noflink, nofwidget, nofnamed, nofscript, nofcross = 0, 0, 0, 0, 0, 0, 0, 0 while data = pdf.gets do data.scan(/\d+\s+\d+\s+obj/o) do nofobject += 1 end data.scan(/\/Type\s*\/XObject/o) do nofxform += 1 end data.scan(/\/Type\s*\/Annot/o) do nofannot += 1 end data.scan(/\/GoToR\s*\/F/o) do nofcross += 1 end data.scan(/\/Subtype\s*\/Link/o) do noflink += 1 end data.scan(/\/Subtype\s*\/Widget/o) do nofwidget += 1 end data.scan(/\/S\s*\/Named/o) do nofnamed += 1 end data.scan(/\/S\s*\/JavaScript/o) do nofscript += 1 end end pdf.close report("objects : #{nofobject}") report("xforms : #{nofxform}") report("annotations : #{nofannot}") report("links : #{noflink} (#{nofnamed} named / #{nofscript} scripts / #{nofcross} files)") report("widgets : #{nofwidget}") end end end end end logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registeraction('spotimage' , 'filename --colorspec= --colorname= [--retain --invert --subpath=]') commandline.registeraction('colorimage', 'filename --colorspec= [--retain --invert --colorname= ]') commandline.registeraction('convertimage', 'filename [--retain --subpath]') commandline.registeraction('downsampleimage', 'filename [--retain --subpath --lowres --normal]') commandline.registeraction('info', 'filename') commandline.registeraction('countpages', '[--pattern --threshold]') commandline.registeraction('checkembedded', '[--pattern]') commandline.registeraction('analyzefile' , 'filename') commandline.registeraction('help') commandline.registeraction('version') commandline.registervalue('colorname') commandline.registervalue('colorspec') commandline.registervalue('subpath') commandline.registervalue('pattern') commandline.registervalue('threshold',0) commandline.registerflag('lowres') commandline.registerflag('medres') commandline.registerflag('normal') commandline.registerflag('invert') commandline.registerflag('retain') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'help') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/xmltools.rb0000644000175000017500000006210411024176655025047 0ustar norbertnorbert#!/usr/bin/env ruby # program : xmltools # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # todo : use kpse lib # This script will harbor some handy manipulations on tex # related files. banner = ['XMLTools', 'version 1.2.2', '2002/2007', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' class String def astring(n=10) gsub(/(\d+)/o) do $1.to_s.rjust(n) end.gsub(/ /o, '0') end def xstring if self =~ /\'/o then "\"#{self.gsub(/\"/, '"')}\"" else "\'#{self}\'" end end end class Array def asort(n=10) sort {|x,y| x.astring(n) <=> y.astring(n)} end end class Commands include CommandBase def dir @xmlns = "xmlns='http://www.pragma-ade.com/rlg/xmldir.rng'" pattern = @commandline.option('pattern') recurse = @commandline.option('recurse') stripname = @commandline.option('stripname') longname = @commandline.option('longname') url = @commandline.option('url') outputfile = @commandline.option('output') root = @commandline.option('root') def generate(output,files,url,root,longname) class << output def xputs(str,n=0) puts("#{' '*n}#{str}") end end dirname = '' output.xputs("\n\n") if ! root || root.empty? then rootatt = @xmlns else rootatt = " #{@xmlns} root='#{root}'" end rootatt += " timestamp='#{Time.now}'" if url.empty? then output.xputs("\n") else output.xputs("\n") end files.each do |f| bn, dn = File.basename(f), File.dirname(f) if dirname != dn then output.xputs("\n", 2) if dirname != '' output.xputs("\n", 2) dirname = dn end if longname && dn != '.' then output.xputs("\n", 4) else output.xputs("\n", 4) end output.xputs("#{bn.sub(/\..*$/,'')}\n", 6) if File.stat(f).file? then bt = bn.sub(/^.*\./,'') if bt != bn then output.xputs("#{bt}\n", 6) end output.xputs("#{File.stat(f).size}\n", 6) permissions = '' permissions << 'r' if File.readable?(f) permissions << 'w' if File.writable?(f) permissions << 'x' if File.executable?(f) output.xputs("#{permissions}\n", 6) unless permissions.empty? end output.xputs("#{File.stat(f).mtime.strftime("%Y-%m-%d %H:%M")}\n", 6) output.xputs("\n", 4) end output.xputs("\n", 2) if dirname != '' output.xputs("\n") end if pattern.empty? then report('provide --pattern=') return end unless outputfile.empty? then begin output = File.open(outputfile,'w') rescue report("unable to open #{outputfile}") return end else report('provide --output') return end if stripname && pattern.class == String && ! pattern.empty? then pattern = File.dirname(pattern) end pattern = '*' if pattern.empty? unless root.empty? then unless FileTest.directory?(root) then report("unknown root #{root}") return end begin Dir.chdir(root) rescue report("unable to change to root #{root}") return end end generate(output, globbed(pattern, recurse), url, root, longname) output.close if output end alias ls :dir def mmlpages file = @commandline.argument('first') eps = @commandline.option('eps') jpg = @commandline.option('jpg') png = @commandline.option('png') style = @commandline.option('style') modes = @commandline.option('modes') file = file.sub(/\.xml/io, '') long = "#{file}-mmlpages" if FileTest.file?(file+'.xml') then style = "--arg=\"style=#{style}\"" unless style.empty? modes = "--mode=#{modes}" unless modes.empty? if system("texmfstart texexec --batch --pdf --once --result=#{long} --use=mmlpag #{style} #{modes} #{file}.xml") then if eps then if f = open("#{file}-mmlpages.txt") then while line = f.gets do data = Hash.new if fields = line.split then fields.each do |fld| key, value = fld.split('=') data[key] = value if key && value end if data.key?('p') then page = data['p'] name = "#{long}-#{page.to_i-1}" if eps then report("generating eps file #{name}") if system("pdftops -eps -f #{page} -l #{page} #{long}.pdf #{name}.eps") then if data.key?('d') then if epsfile = IO.read("#{name}.eps") then epsfile.sub!(/^(\%\%BoundingBox:.*?$)/i) do newline = $1 + "\n%%Baseline: #{data['d']}\n" if data.key?('w') && data.key?('h') then newline += "%%PositionWidth: #{data['w']}\n" newline += "%%PositionHeight: #{data['h']}\n" newline += "%%PositionDepth: #{data['d']}" end newline end if g = File.open("#{name}.eps",'wb') then g.write(epsfile) g.close end end end else report("error in generating eps from #{name}") end end end end end f.close else report("missing data log file #{file}") end end if png then report("generating png file for #{long}") system("imagemagick #{long}.pdf #{long}-%d.png") end if jpg then report("generating jpg files for #{long}") system("imagemagick #{long}.pdf #{long}-%d.jpg") end else report("error in processing file #{file}") end system("texmfstart ctxtools --purge") else report("error in processing file #{file}") end end def analyze file = @commandline.argument('first') result = @commandline.option('output') utf = @commandline.option('utf') process = @commandline.option('process') if FileTest.file?(file) then if data = IO.read(file) then if data =~ /\s\/\!\?]+)([^>]*?)>/o) do element, attributelist = $1, $2 if elements.key?(element) then elements[element] += 1 else elements[element] = 1 end attributelist.scan(/\s*([^\=]+)\=([\"\'])(.*?)(\2)/) do key, value = $1, $3 attributes[element] = Hash.new unless attributes.key?(element) attributes[element][key] = Hash.new unless attributes[element].key?(key) if attributes[element][key].key?(value) then attributes[element][key][value] += 1 else attributes[element][key][value] = 1 end end end data.scan(/\&([^\;]+)\;/o) do entity = $1 if entities.key?(entity) then entities[entity] += 1 else entities[entity] = 1 end end if utf then data.scan(/(\w)/u) do chars[$1] = (chars[$1] || 0) + 1 end if chars.size > 0 then begin # todo : use kpse lib filename, ownpath, foundpath = 'contextnames.txt', File.dirname($0), '' begin foundpath = File.dirname(`kpsewhich -progname=context -format=\"other text files\" #{filename}`.chomp) rescue foundpath = '.' else foundpath = '.' if foundpath.empty? end [foundpath,ownpath,File.join(ownpath,'../../../context/data')].each do |path| fullname = File.join(path,filename) if FileTest.file?(fullname) then report("loading '#{fullname}'") # rough scan, we assume no valid lines after comments IO.read(fullname).scan(/^([0-9A-F][0-9A-F][0-9A-F][0-9A-F])\s*\;\s*(.*?)\s*\;\s*(.*?)\s*\;\s*(.*?)\s*$/) do names[$1.hex.to_i.to_s] = [$2,$3,$4] end break end end rescue end end end result = file.gsub(/\..*?$/, '') + '.xlg' if result.empty? if f = File.open(result,'w') then report("saving report in #{result}") f.puts "\n" f.puts "\n" if entities.length>0 then total = 0 entities.each do |k,v| total += v end f.puts " \n" entities.keys.asort.each do |entity| f.puts " \n" end f.puts " \n" end if utf && (chars.size > 0) then total = 0 chars.each do |k,v| total += v end f.puts " \n" chars.each do |k,v| if k.length > 1 then begin u = k.unpack('U') unicodes[u] = (unicodes[u] || 0) + v rescue report("invalid utf codes") end end end unicodes.keys.sort.each do |u| ustr = u.to_s if names[ustr] then f.puts " \n" else f.puts " \n" end end f.puts " \n" end if elements.length>0 then f.puts " \n" elements.keys.sort.each do |element| if attributes.key?(element) then f.puts " \n" if attributes.key?(element) then attributes[element].keys.asort.each do |attribute| f.puts " \n" if attribute =~ /id$/o then nn = 0 attributes[element][attribute].keys.asort.each do |value| nn += attributes[element][attribute][value].to_i end f.puts " \n" else attributes[element][attribute].keys.asort.each do |value| f.puts " \n" end end f.puts " \n" end end f.puts " \n" else f.puts " \n" end end f.puts " \n" end f.puts "\n" f.close if process then system("texmfstart texexec --purge --pdf --use=xml-analyze #{result}") end else report("unable to open file '#{result}'") end else report("invalid xml file '#{file}'") end else report("unable to load file '#{file}'") end else report("unknown file '#{file}'") end end def filter require "rexml/document" element = @commandline.option('element') files = @commandline.arguments result = "xmltools.xlg" if element.empty? then report("provide element using --element") elsif files.length == 0 then report("provide filename(s)") else begin File.open(result,'w') do |f| f << "\n\n" f << "\n\n" total = 0 files.sort.each do |file| begin report("loading: #{file}") data = REXML::Document.new(IO.read(file)) rescue report("error: invalid xml") else found = 0 report("filtering: #{element}") REXML::XPath.each(data,"//#{element}") do |table| str = table.to_s if str.length > 0 then total += 1 found += 1 report("found: #{total} / #{found} / #{str.length} bytes") f << "\n\n" unless found > 1 f << "" f << "#{str.gsub(/^\s*/m,'').gsub(/\s*$/m,'')}" f << "\n\n" end end f << "\n\n" if found > 0 end end f << "\n" end report("result: #{result}") rescue report("error in opening #{result}") end end end def enhance oldname = @commandline.argument('first') newname = @commandline.argument('second') verbose = @commandline.option('verbose') # todo: options, maybe a config file if ! newname || newname.empty? then newname = oldname + ".prep" end if FileTest.file?(oldname) then report("") if verbose data = IO.read(oldname) elements = Array.new preamble = "" done = false data.sub!(/^(.*?)\s*(<[a-z])/moi) do preamble = $1 $2 end # hide elements data.gsub!(/<([^>]*?)>/moi) do elements << $1 "<#{elements.length}>" end # abc[-/]def data.gsub!(/([a-z]{3,})([\/\-\(\)]+)([a-z]{3,})/moi) do done = true report("compound: #{$1}#{$2}#{$3}") if verbose "#{$1}#{$3}" end # (abcd # data.gsub!(/(\()([a-z]{4,})/moi) do # done = true # report("compound: #{$1}#{$2}") if verbose # "#{$2}" # end # abcd) # data.gsub!(/(\()([a-z]{4,})/moi) do # done = true # report("compound: #{$1}#{$2}") if verbose # "#{$2}" # end # roll back elements data.gsub!(/<(\d+)>/moi) do "<#{elements.shift}>" end File.open(newname,'wb') do |f| f << preamble f << "\n" f << data end if verbose then if done then report("") report(oldname," converted to ",newname) else report(oldname," copied to ",newname) end end end end def cleanup # todo, share loading/saving with previous file = @commandline.argument('first') force = @commandline.option('force') verbose = @commandline.option('verbose') if FileTest.file?(file) then if data = IO.read(file) then if data =~ /" data.gsub!(/\<(\/*\w+)\s*(\/*)>/o) do "<#{$1}#{$2}>" end # remove funny ampersands # # data = " B&W " data.gsub!(/\&([^\<\>\&]*?)\;/mo) do "" end data.gsub!(/\&/o) do doxmlreport("&",verbose) end data.gsub!(/\/o) do doxmlreport("&#{$1};",verbose) end # remove funny < > # # data = " < 5% " data.gsub!(/<([^>].*?)>/o) do tag = $1 case tag when /^\//o then "<#{tag}>" # funny tag but ok when /\/$/o then "<#{tag}>" # funny tag but ok when /",verbose) else "<#{tag}>" end end # remove funny < > # # data = " > 5% " data.gsub!(/<([^>].*?)>([^\>\<]*?)>/o) do doxmlreport("<#{$1}>#{$2}>",verbose) end return data end # puts doxmlcleanup("") # puts doxmlcleanup(" B&W ") # puts doxmlcleanup(" < 5% ") # puts doxmlcleanup(" > 5% ") end logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registeraction('dir', 'generate directory listing') commandline.registeraction('mmlpages','generate graphic from mathml') commandline.registeraction('analyze', 'report entities and elements [--utf --process]') commandline.registeraction('cleanup', 'cleanup xml file [--force]') commandline.registeraction('enhance', 'enhance xml file (partial)') commandline.registeraction('filter', 'filter elements from xml file [element=]') # commandline.registeraction('dir', 'filename --pattern= --output= [--recurse --stripname --longname --url --root]') # commandline.registeraction('mmlpages','filename [--eps --jpg --png --style= --mode=]') commandline.registeraction('ls') commandline.registeraction('help') commandline.registeraction('version') commandline.registerflag('stripname') commandline.registerflag('longname') commandline.registerflag('recurse') commandline.registerflag('verbose') commandline.registervalue('pattern') commandline.registervalue('element') commandline.registervalue('url') commandline.registervalue('output') commandline.registervalue('root') commandline.registerflag('eps') commandline.registerflag('png') commandline.registerflag('jpg') commandline.registerflag('utf') commandline.registerflag('process') commandline.registervalue('style') commandline.registervalue('modes') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'help') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/pstopdf.rb0000644000175000017500000004170711024176655024653 0ustar norbertnorbert#!/usr/bin/env ruby # program : pstopdf # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com banner = ['PsToPdf', 'version 2.0.1', '2002-2006', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! # todo: paden/prefix in magick and inkscape # todo: clean up method handling (pass strings, no numbers) # --method=crop|bounded|raw|... # --resolution=low|normal|medium|high|printer|print|screen|ebook|default # + downward compatible flag handling require 'base/switch' require 'base/tool' require 'base/logger' require 'graphics/gs' require 'graphics/magick' require 'graphics/inkscape' require 'rexml/document' exit if defined?(REQUIRE2LIB) class Commands include CommandBase # nowadays we would force a directive, but # for old times sake we handle default usage def main filename = @commandline.argument('first') pattern = @commandline.option('pattern') if filename.empty? && ! pattern.empty? then pattern = "**/#{pattern}" if @commandline.option('recurse') globfiles(pattern) end filename = @commandline.argument('first') if filename.empty? then help elsif filename =~ /\.exa$/ then request else convert end end # actions def convert ghostscript = GhostScript.new(logger) magick = ImageMagick.new(logger) inkscape = InkScape.new(logger) outpath = @commandline.option('outputpath') unless outpath.empty? then begin File.expand_path(outpath) outpath = File.makedirs(outpath) unless FileTest.directory?(outpath) rescue # sorry end end @commandline.arguments.each do |filename| filename = Tool.cleanfilename(filename,@commandline) # brrrr inppath = @commandline.option('inputpath') if inppath.empty? then inppath = '.' fullname = filename # avoid duplicate './' else fullname = File.join(inppath,filename) end if FileTest.file?(fullname) then handle_whatever(ghostscript,inkscape,magick,filename) else report("file #{fullname} does not exist") end end end def request # # # pstopdf # E:/tmp/demo.ps # # # false # -1 # # ghostscript = GhostScript.new(logger) magick = ImageMagick.new(logger) inkscape = InkScape.new(logger) dataname = @commandline.argument('first') || '' filename = @commandline.argument('second') || '' if dataname.empty? || ! FileTest.file?(dataname) then report('provide valid exa file') return else begin request = REXML::Document.new(File.new(dataname)) rescue report('provide valid exa file (xml error)') return end end if filename.empty? then begin if filename = REXML::XPath.first(request.root,"exa:request/exa:application/exa:filename/text()") then filename = filename.to_s else report('no filename found in exa file') return end rescue filename = '' end end if filename.empty? then report('provide valid filename') return elsif ! FileTest.file?(filename) then report("invalid filename #{filename}") return end [ghostscript,inkscape,magick].each do |i| i.setvariable('inputfile',filename) end # set ghostscript variables REXML::XPath.each(request.root,"/exa:request/exa:data/exa:variable") do |v| begin if (key = v.attributes['label']) and (value = v.text.to_s) then case key when /gs[\:\.](var[\:\.])*(offset)/io then ghostscript.setoffset(value) when /gs[\:\.](var[\:\.])*(method)/io then ghostscript.setvariable('method',value) when /gs[\:\.](var[\:\.])*(.*)/io then ghostscript.setpsoption($2,value) end end rescue end end # no inkscape and magick variables (yet) handle_whatever(ghostscript,inkscape,magick,filename) end def watch ghostscript = GhostScript.new(logger) magick = ImageMagick.new(logger) inkscape = InkScape.new(logger) pathname = commandline.option('watch') unless pathname and not pathname.empty? then report('empty watchpath is not supported') exit end if pathname == '.' then report("watchpath #{pathname} is not supported") exit end if FileTest.directory?(pathname) then if Dir.chdir(pathname) then report("watching path #{pathname}") else report("unable to change to path #{pathname}") exit end else report("invalid path #{pathname}") exit end waiting = false loop do if waiting then report("waiting #{getvariable('delay')}") waiting = false sleep(getvariable('delay').to_i) end files = Dir.glob("**/*.*") if files and files.length > 0 then files.each do |fullname| next unless fullname if FileTest.directory?(fullname) then debug('skipping path', fullname) next end unless magick.supported(fullname) then debug('not supported', fullname) next end if (! FileTest.file?(fullname)) || (FileTest.size(fullname) < 100) then debug("skipping small crap file #{fullname}") next end debug("handling file #{fullname}") begin next unless File.rename(fullname,fullname) # access trick rescue next # being written end fullname = Tool.cleanfilename(fullname,@commandline) fullname.gsub!(/\\/io, '/') filename = File.basename(fullname) filepath = File.dirname(fullname) next if filename =~ /gstemp.*/io if filepath !~ /(result|done|raw|crop|bound|bitmap)/io then begin File.makedirs(filepath+'/raw') File.makedirs(filepath+'/bound') File.makedirs(filepath+'/crop') File.makedirs(filepath+'/bitmap') debug("creating prefered input paths on #{filepath}") rescue debug("creating input paths on #{filepath} failed") end end if filepath =~ /^(.*\/|)(done|result)$/io then debug("skipping file #{fullname}") else report("start processing file #{fullname}") if filepath =~ /^(.*\/*)(raw|crop|bound)$/io then donepath = $1 + 'done' resultpath = $1 + 'result' case $2 when 'raw' then method = 1 when 'bound' then method = 2 when 'crop' then method = 3 else method = 2 end report("forcing method #{method}") else method = 2 donepath = filepath + '/done' resultpath = filepath + '/result' report("default method #{method}") end begin File.makedirs(donepath) File.makedirs(resultpath) rescue report('result path creation fails') end if FileTest.directory?(donepath) && FileTest.directory?(resultpath) then resultname = resultpath + '/' + filename.sub(/\.[^\.]*$/,'') + '.pdf' @commandline.setoption('inputpath', filepath) @commandline.setoption('outputpath', resultpath) @commandline.setoption('method', method) if ghostscript.psfile?(fullname) then handle_ghostscript(ghostscript,filename) else handle_magick(magick,filename) end sleep(1) # calm down if FileTest.file?(fullname) then begin File.copy(fullname,donepath + '/' + filename) File.delete(fullname) rescue report('cleanup fails') end end end end end end waiting = true end end private def handle_whatever(ghostscript,inkscape,magick,filename) if ghostscript.psfile?(filename) then # report("processing ps file #{filename}") ghostscript.setvariable('pipe',false) if @commandline.option('nopipe') # ghostscript.setvariable('pipe',not @commandline.option('nopipe')) ghostscript.setvariable('colormodel',@commandline.option('colormodel')) ghostscript.setvariable('offset',@commandline.option('offset')) handle_ghostscript(ghostscript,filename) elsif ghostscript.pdffile?(filename) && ghostscript.pdfmethod?(@commandline.option('method')) then # report("processing pdf file #{filename}") handle_ghostscript(ghostscript,filename) elsif inkscape.supported?(filename) then # report("processing non ps/pdf file #{filename}") handle_inkscape(inkscape,filename) elsif magick.supported?(filename) then # report("processing non ps/pdf file #{filename}") handle_magick(magick,filename) else report("option not supported for #{filename}") end end def handle_magick(magick,filename) report("converting non-ps file #{filename} into pdf") inppath = @commandline.option('inputpath') outpath = @commandline.option('outputpath') inppath = inppath + '/' if not inppath.empty? outpath = outpath + '/' if not outpath.empty? prefix = @commandline.option('prefix') suffix = @commandline.option('suffix') inpfilename = "#{inppath}#{filename}" outfilename = "#{outpath}#{prefix}#{filename.sub(/\.([^\.]*?)$/, '')}#{suffix}.pdf" magick.setvariable('inputfile' , inpfilename) magick.setvariable('outputfile', outfilename) magick.autoconvert end def handle_inkscape(inkscape,filename) report("converting svg(z) file #{filename} into pdf") inppath = @commandline.option('inputpath') outpath = @commandline.option('outputpath') inppath = inppath + '/' if not inppath.empty? outpath = outpath + '/' if not outpath.empty? prefix = @commandline.option('prefix') suffix = @commandline.option('suffix') inpfilename = "#{inppath}#{filename}" outfilename = "#{outpath}#{prefix}#{filename.sub(/\.([^\.]*?)$/, '')}#{suffix}.pdf" inkscape.setvariable('inputfile' , inpfilename) inkscape.setvariable('outputfile', outfilename) if @commandline.option('verbose') || @commandline.option('debug') then logname = filename.gsub(/\.[^\.]*?$/, '.log') report("log info saved in #{logname}") inkscape.convert(logname) # logname ook doorgeven else inkscape.convert end end def handle_ghostscript(ghostscript,filename) ghostscript.reset method = ghostscript.method(@commandline.option('method')) force = ghostscript.method(@commandline.option('force')) ghostscript.setvariable('method', method) ghostscript.setvariable('force', force) # report("conversion method #{method}") inppath = @commandline.option('inputpath') outpath = @commandline.option('outputpath') inppath = inppath + '/' if not inppath.empty? outpath = outpath + '/' if not outpath.empty? prefix = @commandline.option('prefix') suffix = @commandline.option('suffix') ok = false if ghostscript.pdfmethod?(method) then report("converting pdf file #{filename} into pdf") if prefix.empty? && suffix.empty? && inppath.empty? && outpath.empty? then prefix = ghostscript.pdfprefix(method) end if ghostscript.pdffile?(filename) then filename = filename.sub(/\.pdf$/, '') inpfilename = "#{inppath}#{filename}.pdf" outfilename = "#{outpath}#{prefix}#{filename}#{suffix}.pdf" ghostscript.setvariable('inputfile' ,inpfilename) ghostscript.setvariable('outputfile',outfilename) if FileTest.file?(inpfilename) then ok = ghostscript.convert else report("no file found #{filename}") end else report("no pdf file #{filename}") end elsif ghostscript.psfile?(filename) then if filename =~ /(.*)\.([^\.]*?)$/io then filename, filesuffix = $1, $2 else filesuffix = 'eps' end report("converting #{filesuffix} (ps) into pdf") inpfilename = "#{inppath}#{filename}.#{filesuffix}" outfilename = "#{outpath}#{prefix}#{filename}#{suffix}.pdf" ghostscript.setvariable('inputfile' , inpfilename) ghostscript.setvariable('outputfile', outfilename) if FileTest.file?(inpfilename) then ok = ghostscript.convert if ! ok && FileTest.file?(outfilename) then begin File.delete(outfilename) rescue end end else report("no file with name #{filename} found") end else report('file must be of type eps/ps/ai/pdf') end return ok end end # ook pdf -> pdf onder optie 0, andere kleurruimte logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registerflag('debug') commandline.registerflag('verbose') commandline.registerflag('nopipe') commandline.registervalue('method',2) commandline.registervalue('offset',0) commandline.registervalue('prefix') commandline.registervalue('suffix') commandline.registervalue('inputpath') commandline.registervalue('outputpath') commandline.registerflag('watch') commandline.registerflag('force') commandline.registerflag('recurse') commandline.registervalue('delay',2) commandline.registervalue('colormodel','cmyk') commandline.registervalue('pattern','') commandline.registeraction('help') commandline.registeraction('version') commandline.registeraction('convert', 'convert ps into pdf') commandline.registeraction('request', 'handles exa request file') commandline.registeraction('watch', 'watch folders for conversions (untested)') commandline.expand logger.verbose if (commandline.option('verbose') || commandline.option('debug')) Commands.new(commandline,logger,banner).send(commandline.action || 'main') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/concheck.rb0000644000175000017500000003624211024176655024747 0ustar norbertnorbert# Program : concheck (tex & context syntax checker) # Copyright : PRAGMA ADE / Hasselt NL / www.pragma-ade.com # Author : Hans Hagen # Version : 1.1 / 2003.08.18 # remarks: # # - the error messages are formatted like tex's messages so that scite can see them # - begin and end tags are only tested on a per line basis because we assume clean sources # - maybe i'll add begin{something} ... end{something} checking # # example validation file # # begin interface en # # 1 text # 4 Question # 0 endinput # 0 setupsomething # 0 chapter # # end interface en # nicer # class Interface # def initialize (language = 'unknown') # @valid = Array.new # @language = language # end # def register (left, right) # @valid.push([left,right]) # end # end # $interfaces = Hash.new # $interfaces['en'] = Interface.new('english') # $interfaces['nl'] = Interface.new('dutch') # $interfaces['en'].add('\\\\start','\\\\stop') # $interfaces['en'].add('\\\\begin','\\\\end') # $interfaces['en'].add('\\\\Start','\\\\Stop') # $interfaces['en'].add('\\\\Begin','\\\\End') # $interfaces['nl'].add('\\\\start','\\\\stop') # $interfaces['nl'].add('\\\\beginvan','\\\\eindvan') # $interfaces['nl'].add('\\\\Start','\\\\Stop') # $interfaces['nl'].add('\\\\BeginVan','\\\\Eindvan') # rest todo $valid = Hash.new $valid['en'] = Array.new $valid['nl'] = Array.new #$valid['en'].push(['','']) $valid['en'].push(['\\\\start','\\\\stop']) $valid['en'].push(['\\\\begin','\\\\end']) $valid['en'].push(['\\\\Start','\\\\Stop']) $valid['en'].push(['\\\\Begin','\\\\End']) #$valid['nl'].push(['','']) $valid['nl'].push(['\\\\start','\\\\stop']) $valid['nl'].push(['\\\\beginvan','\\\\eindvan']) $valid['nl'].push(['\\\\Start','\\\\Stop']) $valid['nl'].push(['\\\\BeginVan','\\\\Eindvan']) $valid_tex = "\\\\end\(input|insert|csname|linechar|graf|buffer|strut\)" $valid_mp = "(enddef||end||endinput)" $start_verbatim = Hash.new $stop_verbatim = Hash.new $start_verbatim['en'] = '\\\\starttyping' $start_verbatim['nl'] = '\\\\starttypen' $stop_verbatim['en'] = '\\\\stoptyping' $stop_verbatim['nl'] = '\\\\stoptypen' def message(str, filename=nil, line=nil, column=nil) if filename then if line then if column then puts("error in file #{filename} at line #{line} in column #{column}: #{str}\n") else puts("error in file #{filename} at line #{line}: #{str}\n") end else puts("file #{filename}: #{str}\n") end else puts(str+"\n") end end def load_file (filename='') begin data = IO.readlines(filename) data.collect! do |d| if d =~ /^\s*%/o then '' elsif d =~ /(.*?[^\\])%.*$/o then $1 else d end end rescue message("provide proper filename") return nil end # print data.to_s + "\n" return data end def guess_interface(data) if data.first =~ /^%.*interface\=(.*)\s*/ then return $1 else data.each do |line| case line when /\\(starttekst|stoptekst|startonderdeel|startdocument|startoverzicht)/o then return 'nl' when /\\(stelle|verwende|umgebung|benutze)/o then return 'de' when /\\(stel|gebruik|omgeving)/ then return 'nl' when /\\(use|setup|environment)/ then return 'en' when /\\(usa|imposta|ambiente)/ then return 'it' when /(height|width|style)=/ then return 'en' when /(hoehe|breite|schrift)=/ then return 'de' when /(hoogte|breedte|letter)=/ then return 'nl' when /(altezza|ampiezza|stile)=/ then return 'it' when /externfiguur/ then return 'nl' when /externalfigure/ then return 'en' when /externeabbildung/ then return 'de' when /figuraesterna/ then return 'it' end end return 'en' end end def cleanup_data(data, interface='en') verbatim = 0 re_start = /^\s*#{$start_verbatim[interface]}/ re_stop = /^\s*#{$stop_verbatim[interface]}/ data.collect! do |d| if d =~ re_start then verbatim += 1 if verbatim>1 then '' else d end elsif d =~ re_stop then verbatim -= 1 if verbatim>0 then '' else d end elsif verbatim > 0 then '' else d end end return data end def load_valid(data, interface=nil) if data && (data.first =~ /^%.*valid\=(.*)\s*/) filename = $1 filename = '../' + filename unless test(?f,filename) filename = '../' + filename unless test(?f,filename) if test(?f,filename) then interface = guess_interface(data) unless interface if $valid.has_key?(interface) then interface = $valid[interface] else interface = $valid['en'] end begin message("loading validation file",filename) validkeys = Hash.new line = 1 IO.readlines(filename).each do |l| if l =~ /\s+[\#\%]/io then # ignore line elsif l =~ /^\s*(begin|end)\s+interface\s+([a-z][a-z])/o then # not yet supported elsif l =~ /^\s*(\d+)\s+([a-zA-Z]*)$/o then type, key = $1.to_i, $2.strip if interface[type] then validkeys[interface[type].first+key] = true validkeys[interface[type].last+key] = true else error_message(filename,line,nil,'wrong definition') end end line += 1 end if validkeys then message("#{validkeys.length} validation keys loaded",filename) end return validkeys rescue message("invalid validation file",filename) end else message("unknown validation file", filename) end else message("no extra validation file specified") end return nil end def some_chr_error(data, filename, left, right) levels = Array.new for line in 0..data.length-1 do str = data[line] # str = data[line].gsub(/\\[\#{left}\#{right}]/,'') column = 0 while column0 then levels.each do |l| column = l.pop line = l.pop message("missing #{right} for #{left}",filename,line+1,column+1) end return true else return false end end def some_wrd_error(data, filename, start, stop, ignore) levels = Array.new len = 0 re_start = /[^\%]*(#{start})([a-zA-Z]*)/ re_stop = /[^\%]*(#{stop})([a-zA-Z]*)/ re_ignore = /#{ignore}.*/ str_start = start.gsub(/\\+/,'\\') str_stop = stop.gsub(/\\+/,'\\') line = 0 while line0 then # todo: more on one line dataline.each do |dataword| case dataword when re_ignore then # just go on when re_start then levels.push([line,$2]) # print ' '*levels.length + '>' + $2 + "\n" when re_stop then # print ' '*levels.length + '<' + $2 + "\n" if levels && levels.last && (levels.last[1] == $2) then levels.pop elsif levels && levels.last then message("#{str_stop}#{levels.last[1]} expected instead of #{str_stop}#{$2}",filename,line+1) return true else message("missing #{str_start}#{$2} for #{str_stop}#{$2}",filename,line+1) return true end else # just go on end end end line += 1 end if levels && levels.length>0 then levels.each do |l| text = l.pop line = l.pop message("missing #{str_stop}#{text} for #{str_start}#{text}",filename,line+1) end return true else return false end end def some_sym_error (data, filename, symbol, template=false) saved = Array.new inside = false level = 0 for line in 0..data.length-1 do str = data[line] column = 0 while column 0 when "\%" then break when "\\" then column += 1 when symbol then if level == 0 then inside = ! inside saved = [line,column] else # we're in some kind of template or so end else # go on end column += 1 end end if inside && saved && level == 0 then column = saved.pop line = saved.pop message("missing #{symbol} for #{symbol}",filename,line+1) return true else return false end end def some_key_error(data, filename, valid) return if (! valid) || (valid.length == 0) error = false # data.foreach do |line| ... end for line in 0..data.length-1 do data[line].scan(/\\([a-zA-Z]+)/io) do unless valid.has_key?($1) then message("unknown command \\#{$1}",filename,line+1) error = true end end end return error end # todo : language dependent def check_file_tex (filename) error = false if data = load_file(filename) then message("checking tex file", filename) interface = guess_interface(data) valid = load_valid(data,interface) data = cleanup_data(data,interface) # data.each do |d| print d end $valid[interface].each do |v| if some_wrd_error(data, filename, v[0], v[1] ,$valid_tex) then error = true break end end # return false if some_wrd_error(data, filename, '\\\\start' , '\\\\stop' , $valid_tex) # return false if some_wrd_error(data, filename, '\\\\Start' , '\\\\Stop' , $valid_tex) # return false if some_wrd_error(data, filename, '\\\\beginvan', '\\\\eindvan', $valid_tex) # return false if some_wrd_error(data, filename, '\\\\begin' , '\\\\end|\\\\eind', $valid_tex) error = true if some_sym_error(data, filename, '$', false) error = true if some_sym_error(data, filename, '|', true) error = true if some_chr_error(data, filename, '{', '}') error = true if some_chr_error(data, filename, '[', ']') error = true if some_chr_error(data, filename, '(', ')') error = true if some_key_error(data, filename, valid) message("no errors in tex code", filename) unless error return error else return false end end def check_file_mp (filename) error = false if data = load_file(filename) then message("checking metapost file", filename) interface = guess_interface(data) valid = load_valid(data,interface) $valid[interface].each do |v| if some_wrd_error(data, filename, v[0], v[1] ,$valid_tex) then error = true break end end # return false if some_wrd_error(data, filename, '', 'begin', 'end', $valid_mp) error = true if some_chr_error(data, filename, '{', '}') error = true if some_chr_error(data, filename, '[', ']') error = true if some_chr_error(data, filename, '(', ')') error = true if some_key_error(data, filename, valid) message("no errors in metapost code", filename) unless error return error else return false end end def check_file_text(filename='') if data = load_file(filename) then for line in 0..data.length-1 do # case data[line] # when /\s([\:\;\,\.\?\!])/ then # message("space before #{$1}",filename,line+1) # when /\D([\:\;\,\.\?\!])\S/ then # message("no space after #{$1}",filename,line+1) # end if data[line] =~ /\s([\:\;\,\.\?\!])/ then message("space before #{$1}",filename,line+1) else data[line].gsub!(/\[.*?\]/o, '') data[line].gsub!(/\(.*?\)/o, '') data[line].gsub!(/\[.*?$/o, '') data[line].gsub!(/^.*?\]/o, '') if data[line] =~ /\D([\:\;\,\.\?\!])\S/ then message("no space after #{$1}",filename,line+1) end end end end end def check_file(filename='') case filename when '' then message("provide filename") return false when /\.(tex|mk.+)$/i then return check_file_tex(filename) # && check_file_text(filename) when /\.mp$/i then return check_file_mp(filename) else message("only tex and metapost files are checked") return false end end if ARGV.size > 0 then someerror = false ARGV.each do |filename| somerror = true if check_file(filename) end exit (if someerror then 1 else 0 end) else exit 1 end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/texmfstart.rb0000755000175000017500000012444412073425545025400 0ustar norbertnorbert#!/usr/bin/env ruby #encoding: ASCII-8BIT # We have removed the fast, server and client variants and no longer # provide the distributed 'serve trees' option. After all, we're now # using luatex. # program : texmfstart # copyright : PRAGMA Advanced Document Engineering # version : 1.9.0 - 2003/2006 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # info : j.hagen@xs4all.nl # www : www.pragma-pod.com / www.pragma-ade.com # no special requirements, i.e. no exa modules/classes used # texmfstart [switches] filename [optional arguments] # # ruby2exe texmfstart --help -> avoids stub test # # Of couse I can make this into a nice class, which i'll undoubtely will # do when I feel the need. In that case it will be part of a bigger game. # --locate => provides location # --exec => exec instead of system # --iftouched=a,b => only if timestamp a<>b # --ifchanged=a,b => only if checksum changed # # file: path: bin: # texmfstart --exec bin:scite *.tex # we don't depend on other libs $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require "rbconfig" require "fileutils" require "digest/md5" # kpse_merge_start class File def File::makedirs(*x) FileUtils.makedirs(x) end end class String def split_path if self =~ /\;/o || self =~ /^[a-z]\:/io then self.split(";") else self.split(":") end end end class Array def join_path self.join(File::PATH_SEPARATOR) end end class File def File.locate_file(path,name) begin files = Dir.entries(path) if files.include?(name) then fullname = File.join(path,name) return fullname if FileTest.file?(fullname) end files.each do |p| fullname = File.join(path,p) if p != '.' and p != '..' and FileTest.directory?(fullname) and result = locate_file(fullname,name) then return result end end rescue # bad path end return nil end def File.glob_file(pattern) return Dir.glob(pattern).first end end # kpse_merge_file: 't:/ruby/base/kpsedirect.rb' class KpseDirect attr_accessor :progname, :format, :engine def initialize @progname, @format, @engine = '', '', '' end def expand_path(str) clean_name(`kpsewhich -expand-path=#{str}`.chomp) end def expand_var(str) clean_name(`kpsewhich -expand-var=#{str}`.chomp) end def find_file(str) clean_name(`kpsewhich #{_progname_} #{_format_} #{str}`.chomp) end def _progname_ if @progname.empty? then '' else "-progname=#{@progname}" end end def _format_ if @format.empty? then '' else "-format=\"#{@format}\"" end end private def clean_name(str) str.gsub(/\\/,'/') end end # kpse_merge_stop $mswindows = RbConfig::CONFIG['host_os'] =~ /mswin/ $separator = File::PATH_SEPARATOR $version = "2.1.0" $ownpath = File.dirname($0) if $mswindows then require "win32ole" require "Win32API" end # exit if defined?(REQUIRE2LIB) $stdout.sync = true $stderr.sync = true $applications = Hash.new $suffixinputs = Hash.new $predefined = Hash.new $runners = Hash.new $suffixinputs['pl'] = 'PERLINPUTS' $suffixinputs['rb'] = 'RUBYINPUTS' $suffixinputs['py'] = 'PYTHONINPUTS' $suffixinputs['jar'] = 'JAVAINPUTS' $suffixinputs['pdf'] = 'PDFINPUTS' $predefined['texexec'] = 'texexec.rb' $predefined['texutil'] = 'texutil.rb' $predefined['texfont'] = 'texfont.pl' $predefined['texshow'] = 'texshow.pl' $predefined['makempy'] = 'makempy.pl' $predefined['mptopdf'] = 'mptopdf.pl' $predefined['pstopdf'] = 'pstopdf.rb' $predefined['examplex'] = 'examplex.rb' $predefined['concheck'] = 'concheck.rb' $predefined['runtools'] = 'runtools.rb' $predefined['textools'] = 'textools.rb' $predefined['tmftools'] = 'tmftools.rb' $predefined['ctxtools'] = 'ctxtools.rb' $predefined['rlxtools'] = 'rlxtools.rb' $predefined['pdftools'] = 'pdftools.rb' $predefined['mpstools'] = 'mpstools.rb' # $predefined['exatools'] = 'exatools.rb' $predefined['xmltools'] = 'xmltools.rb' # $predefined['mtxtools'] = 'mtxtools.rb' $predefined['newpstopdf'] = 'pstopdf.rb' $predefined['newtexexec'] = 'texexec.rb' $predefined['pdftrimwhite'] = 'pdftrimwhite.pl' $makelist = [ # context 'texexec', 'texutil', 'texfont', # mp/ps 'pstopdf', 'mptopdf', 'makempy', # misc 'ctxtools', 'pdftools', 'xmltools', 'textools', 'mpstools', 'tmftools', 'exatools', 'runtools', 'rlxtools', 'pdftrimwhite', 'texfind', 'texshow' # # no 'mtxtools', # no, 'texmfstart' ] $scriptlist = 'rb|pl|py|jar' $documentlist = 'pdf|ps|eps|htm|html' $editor = ENV['TEXMFSTART_EDITOR'] || ENV['EDITOR'] || ENV['editor'] || 'scite' $crossover = true # to other tex tools, else only local $kpse = nil def set_applications(page=1) $applications['unknown'] = '' $applications['ruby'] = $applications['rb'] = 'ruby' $applications['perl'] = $applications['pl'] = 'perl' $applications['python'] = $applications['py'] = 'python' $applications['java'] = $applications['jar'] = 'java' if $mswindows then $applications['pdf'] = ['',"pdfopen --page #{page} --file",'acroread'] $applications['html'] = ['','netscape','mozilla','opera','iexplore'] $applications['ps'] = ['','gview32','gv','gswin32','gs'] else $applications['pdf'] = ["pdfopen --page #{page} --file",'acroread'] $applications['html'] = ['netscape','mozilla','opera'] $applications['ps'] = ['gview','gv','gs'] end $applications['htm'] = $applications['html'] $applications['eps'] = $applications['ps'] end set_applications() def check_kpse if $kpse then # already done else $kpse = KpseDirect.new end end if $mswindows then GetShortPathName = Win32API.new('kernel32', 'GetShortPathName', ['P','P','N'], 'N') GetLongPathName = Win32API.new('kernel32', 'GetLongPathName', ['P','P','N'], 'N') def dowith_pathname (filename,filemethod) filename = filename.gsub(/\\/o,'/') # no gsub! because filename can be frozen case filename when /\;/o then # could be a path spec return filename when /\s+/o then # danger lurking buffer = ' ' * 260 length = filemethod.call(filename,buffer,buffer.size) if length>0 then return buffer.slice(0..length-1) else # when the path or file does not exist, nothing is returned # so we try to handle the path separately from the basename basename = File.basename(filename) pathname = File.dirname(filename) length = filemethod.call(pathname,buffer,260) if length>0 then return buffer.slice(0..length-1) + '/' + basename else return filename end end else # no danger return filename end end def longpathname (filename) dowith_pathname(filename,GetLongPathName) end def shortpathname (filename) dowith_pathname(filename,GetShortPathName) end else def longpathname (filename) filename end def shortpathname (filename) filename end end class File @@update_eps = 1 def File.needsupdate(oldname,newname) begin oldtime = File.stat(oldname).mtime.to_i newtime = File.stat(newname).mtime.to_i if newtime >= oldtime then return false elsif oldtime-newtime < @@update_eps then return false else return true end rescue return true end end def File.syncmtimes(oldname,newname) return begin if $mswindows then # does not work (yet) / gives future timestamp # t = File.mtime(oldname) # i'm not sure if the time is frozen, so we do it here # File.utime(0,t,oldname,newname) else t = File.mtime(oldname) # i'm not sure if the time is frozen, so we do it here File.utime(0,t,oldname,newname) end rescue end end def File.timestamp(name) begin "#{File.stat(name).mtime}" rescue return 'unknown' end end end def hashed (arr=[]) arg = if arr.class == String then arr.split(' ') else arr.dup end hsh = Hash.new if arg.length > 0 hsh['arguments'] = '' done = false arg.each do |s| if done then if s =~ /\s/ then kvl = s.split('=') if kvl[1] and kvl[1] !~ /^[\"\']/ then hsh['arguments'] += ' ' + kvl[0] + "=" + '"' + kvl[1] + '"' elsif s =~ /\s/ then hsh['arguments'] += ' "' + s + '"' else hsh['arguments'] += ' ' + s end else hsh['arguments'] += ' ' + s end else kvl = s.split('=') if kvl[0].sub!(/^\-+/,'') then hsh[kvl[0]] = if kvl.length > 1 then kvl[1] else true end else hsh['file'] = s done = true end end end end return hsh end def launch(filename) if $browser && $mswindows then filename = filename.gsub(/\.[\/\\]/) do Dir.getwd + '/' end report("launching #{filename}") ie = WIN32OLE.new("InternetExplorer.Application") ie.visible = true ie.navigate(filename) return true else return false end end # env|environment # rel|relative # loc|locate|kpse|path|file def quoted(str) if str =~ /^\"/ then return str elsif str =~ / / then return "\"#{str}\"" else return str end end def expanded(arg) # no "other text files", too restricted arg.gsub(/(env|environment)\:([a-zA-Z\-\_\.0-9]+)/o) do method, original, resolved = $1, $2, '' if resolved = ENV[original] then report("environment variable #{original} expands to #{resolved}") unless $report quoted(resolved) else report("environment variable #{original} cannot be resolved") unless $report quoted(original) end end . gsub(/(rel|relative)\:([a-zA-Z\-\_\.0-9]+)/o) do method, original, resolved = $1, $2, '' ['.','..','../..'].each do |r| if FileTest.file?(File.join(r,original)) then resolved = File.join(r,original) break end end if resolved.empty? then quoted(original) else quoted(resolved) end end . gsub(/(kpse|loc|locate|file|path)\:([a-zA-Z\-\_\.0-9]+)/o) do method, original, resolved = $1, $2, '' if $program && ! $program.empty? then # pstrings = ["-progname=#{$program}"] pstrings = [$program] else # pstrings = ['','-progname=context'] pstrings = ['','context'] end # auto suffix with texinputs as fall back if ENV["_CTX_K_V_#{original}_"] then resolved = ENV["_CTX_K_V_#{original}_"] report("environment provides #{original} as #{resolved}") unless $report quoted(resolved) else check_kpse pstrings.each do |pstr| if resolved.empty? then # command = "kpsewhich #{pstr} #{original}" # report("running #{command}") report("locating '#{original}' in program space '#{pstr}'") begin # resolved = `#{command}`.chomp $kpse.progname = pstr $kpse.format = '' resolved = $kpse.find_file(original).gsub(/\\/,'/') rescue resolved = '' end end # elsewhere in the tree if resolved.empty? then # command = "kpsewhich #{pstr} -format=\"other text files\" #{original}" # report("running #{command}") report("locating '#{original}' in program space '#{pstr}' using format 'other text files'") begin # resolved = `#{command}`.chomp $kpse.progname = pstr $kpse.format = 'other text files' resolved = $kpse.find_file(original).gsub(/\\/,'/') rescue resolved = '' end end end if resolved.empty? then original = File.dirname(original) if method =~ /path/ report("#{original} is not resolved") unless $report ENV["_CTX_K_V_#{original}_"] = original if $crossover quoted(original) else resolved = File.dirname(resolved) if method =~ /path/ report("#{original} is resolved to #{resolved}") unless $report ENV["_CTX_K_V_#{original}_"] = resolved if $crossover quoted(resolved) end end end end def changeddir?(path) if path.empty? then return true else oldpath = File.expand_path(path) begin Dir.chdir(path) if not path.empty? rescue report("unable to change to directory: #{path}") else report("changed to directory: #{path}") end newpath = File.expand_path(Dir.getwd) return oldpath == newpath end end def runcommand(command) if $locate then command = command.split(' ').collect do |c| if c =~ /\//o then begin cc = File.expand_path(c) c = cc if FileTest.file?(cc) rescue end end c end . join(' ') print command # to stdout and no newline elsif $execute then report("using 'exec' instead of 'system' call: #{command}") exec(command) if changeddir?($path) else report("using 'system' call: #{command}") system(command) if changeddir?($path) end end def join_command(args) args[0] = $runners[args[0]] || args[0] [args].join(' ') end def runoneof(application,fullname,browserpermitted) if browserpermitted && launch(fullname) then return true else fullname = quoted(fullname) # added because MM ran into problems report("starting #{$filename}") unless $report output("\n") if $report && $verbose applications = $applications[application.downcase] if ! applications then output("problems with determining application type") return true elsif applications.class == Array then if $report then output(join_command([fullname,expanded($arguments)])) return true else applications.each do |a| return true if runcommand(join_command([a,fullname,expanded($arguments)])) end end elsif applications.empty? then if $report then output(join_command([fullname,expanded($arguments)])) return true else return runcommand(join_command([fullname,expanded($arguments)])) end else if $report then output(join_command([applications,fullname,expanded($arguments)])) return true else return runcommand(join_command([applications,fullname,expanded($arguments)])) end end return false end end def report(str) $stdout.puts(str) if $verbose end def output(str) $stdout.puts(str) end def usage print "version : #{$version} - 2003/2006 - www.pragma-ade.com\n" print("\n") print("usage : texmfstart [switches] filename [optional arguments]\n") print("\n") print("switches : --verbose --report --browser --direct --execute --locate --iftouched --ifchanged\n") print(" --program --file --page --arguments --batch --edit --report --clear\n") print(" --make --lmake --wmake --path --stubpath --indirect --before --after\n") print(" --tree --autotree --environment --showenv\n") print("\n") print("example : texmfstart pstopdf.rb cow.eps\n") print(" texmfstart --locate examplex.rb\n") print(" texmfstart --execute examplex.rb\n") print(" texmfstart --browser examplap.pdf\n") print(" texmfstart showcase.pdf\n") print(" texmfstart --page=2 --file=showcase.pdf\n") print(" texmfstart --program=yourtex yourscript.rb arg-1 arg-2\n") print(" texmfstart --direct xsltproc kpse:somefile.xsl somefile.xml\n") print(" texmfstart --direct ruby rel:wn-cleanup-1.rb oldfile.xml newfile.xml\n") print(" texmfstart bin:xsltproc env:somepreset path:somefile.xsl somefile.xml\n") print(" texmfstart --iftouched=normal,lowres downsample.rb normal lowres\n") print(" texmfstart --ifchanged=somefile.dat --direct processit somefile.dat\n") print(" texmfstart bin:scite kpse:texmf.cnf\n") print(" texmfstart --exec bin:scite *.tex\n") print(" texmfstart --edit texmf.cnf\n") print(" texmfstart --edit kpse:texmf.cnf\n") print(" texmfstart --serve\n") print("\n") print(" texmfstart --stubpath=/usr/local/bin [--make --remove] --verbose all\n") print(" texmfstart --stubpath=auto [--make --remove] all\n") print("\n") check_kpse end # somehow registration does not work out (at least not under windows) # the . is also not accepted by unix as seperator def tag(name) if $crossover then "_CTX_K_S_#{name}_" else "TEXMFSTART.#{name}" end end def registered?(filename) return ENV[tag(filename)] != nil end def registered(filename) return ENV[tag(filename)] || 'unknown' end def register(filename,fullname) if fullname && ! fullname.empty? then # && FileTest.file?(fullname) ENV[tag(filename)] = fullname report("registering '#{filename}' as '#{fullname}'") return true else return false end end def find(filename,program) begin filename = filename.sub(/script:/o, '') # so we have bin: and script: and nothing if $predefined.key?(filename) then report("expanding '#{filename}' to '#{$predefined[filename]}'") filename = $predefined[filename] end if registered?(filename) then report("already located '#{filename}'") return registered(filename) end # create suffix list if filename =~ /^(.*)\.(.+)$/ then filename = $1 suffixlist = [$2] else suffixlist = [$scriptlist.split('|'),$documentlist.split('|')].flatten end # first we honor a given path if filename =~ /[\\\/]/ then report("trying to honor '#{filename}'") suffixlist.each do |suffix| fullname = filename+'.'+suffix if FileTest.file?(fullname) && register(filename,fullname) return shortpathname(fullname) end end end filename.sub!(/^.*[\\\/]/, '') # next we look at the current path and the callerpath pathlist = [ ] progpath = $applications[suffixlist[0]] threadok = registered("THREAD") !~ /unknown/ pathlist << ['.','current'] pathlist << [$ownpath,'caller'] if $ownpath != '.' pathlist << ["#{$ownpath}/../#{progpath}",'caller'] if progpath pathlist << [registered("THREAD"),'thread'] if threadok pathlist << ["#{registered("THREAD")}/../#{progpath}",'thread'] if progpath && threadok pathlist.each do |p| if p && ! p.empty? && ! (p[0] == 'unknown') then suffixlist.each do |suffix| fname = "#{filename}.#{suffix}" fullname = File.expand_path(File.join(p[0],fname)) report("locating '#{fname}' in #{p[1]} path '#{p[0]}'") if FileTest.file?(fullname) && register(filename,fullname) then report("'#{fname}' located in #{p[1]} path") return shortpathname(fullname) end end end end # now we consult environment settings fullname = nil check_kpse $kpse.progname = program suffixlist.each do |suffix| begin break unless $suffixinputs[suffix] environment = ENV[$suffixinputs[suffix]] || ENV[$suffixinputs[suffix]+".#{$program}"] if ! environment || environment.empty? then begin # environment = `kpsewhich -expand-path=\$#{$suffixinputs[suffix]}`.chomp environment = $kpse.expand_path("\$#{$suffixinputs[suffix]}") rescue environment = nil else if environment && ! environment.empty? then report("using kpsewhich variable #{$suffixinputs[suffix]}") end end elsif environment && ! environment.empty? then report("using environment variable #{$suffixinputs[suffix]}") end if environment && ! environment.empty? then environment.split($separator).each do |e| e.strip! e = '.' if e == '\.' # somehow . gets escaped e += '/' unless e =~ /[\\\/]$/ fullname = e + filename + '.' + suffix report("testing '#{fullname}'") if FileTest.file?(fullname) then break else fullname = nil end end end rescue report("environment string '#{$suffixinputs[suffix]}' cannot be used to locate '#{filename}'") fullname = nil else return shortpathname(fullname) if register(filename,fullname) end end return shortpathname(fullname) if register(filename,fullname) # then we fall back on kpsewhich suffixlist.each do |suffix| # TDS script scripts location as per 2004 if suffix =~ /(#{$scriptlist})/ then begin report("using 'kpsewhich' to locate '#{filename}' in suffix space '#{suffix}' (1)") # fullname = `kpsewhich -progname=#{program} -format=texmfscripts #{filename}.#{suffix}`.chomp $kpse.format = 'texmfscripts' fullname = $kpse.find_file("#{filename}.#{suffix}").gsub(/\\/,'/') rescue report("kpsewhich cannot locate '#{filename}' in suffix space '#{suffix}' (1)") fullname = nil else return shortpathname(fullname) if register(filename,fullname) end end # old TDS location: .../texmf/context/... begin report("using 'kpsewhich' to locate '#{filename}' in suffix space '#{suffix}' (2)") # fullname = `kpsewhich -progname=#{program} -format="other text files" #{filename}.#{suffix}`.chomp $kpse.format = 'other text files' fullname = $kpse.find_file("#{filename}.#{suffix}").gsub(/\\/,'/') rescue report("kpsewhich cannot locate '#{filename}' in suffix space '#{suffix}' (2)") fullname = nil else return shortpathname(fullname) if register(filename,fullname) end end return shortpathname(fullname) if register(filename,fullname) # let's take a look at the path paths = ENV['PATH'].split($separator) suffixlist.each do |s| paths.each do |p| suffixedname = "#{filename}.#{s}" report("checking #{p} for #{filename}") if FileTest.file?(File.join(p,suffixedname)) then fullname = File.join(p,suffixedname) return shortpathname(fullname) if register(filename,fullname) end end end # bad luck, we need to search the tree ourselves if (suffixlist.length == 1) && (suffixlist.first =~ /(#{$documentlist})/) then report("aggressively locating '#{filename}' in document trees") begin # texroot = `kpsewhich -expand-var=$SELFAUTOPARENT`.chomp texroot = $kpse.expand_var("$SELFAUTOPARENT") rescue texroot = '' else texroot.sub!(/[\\\/][^\\\/]*?$/, '') end if not texroot.empty? then sffxlst = suffixlist.join(',') begin report("locating '#{filename}' in document tree '#{texroot}/doc*'") if (result = Dir.glob("#{texroot}/doc*/**/#{filename}.{#{sffxlst}}")) && result && result[0] && FileTest.file?(result[0]) then fullname = result[0] end rescue report("locating '#{filename}.#{suffixlist.join('|')}' in tree '#{texroot}' aborted") end end return shortpathname(fullname) if register(filename,fullname) end report("aggressively locating '#{filename}' in tex trees") begin # textrees = `kpsewhich -expand-var=$TEXMF`.chomp textrees = $kpse.expand_var("$TEXMF") rescue textrees = '' end if not textrees.empty? then textrees.gsub!(/[\{\}\!]/, '') textrees = textrees.split(',') if (suffixlist.length == 1) && (suffixlist.first =~ /(#{$documentlist})/) then speedup = ['doc**','**'] else speedup = ['**'] end sffxlst = suffixlist.join(',') speedup.each do |speed| textrees.each do |tt| tt.gsub!(/[\\\/]$/, '') if FileTest.directory?(tt) then begin report("locating '#{filename}' in tree '#{tt}/#{speed}/#{filename}.{#{sffxlst}}'") if (result = Dir.glob("#{tt}/#{speed}/#{filename}.{#{sffxlst}}")) && result && result[0] && FileTest.file?(result[0]) then fullname = result[0] break end rescue report("locating '#{filename}' in tree '#{tt}' aborted") next end end end break if fullname && ! fullname.empty? end end if register(filename,fullname) then return shortpathname(fullname) else return '' end rescue error, trace = $!, $@.join("\n") report("fatal error: #{error}\n#{trace}") # report("fatal error") end end def run(fullname) if ! fullname || fullname.empty? then output("the file '#{$filename}' is not found") elsif FileTest.file?(fullname) then begin case fullname when /\.(#{$scriptlist})$/i then return runoneof($1,fullname,false) when /\.(#{$documentlist})$/i then return runoneof($1,fullname,true) else return runoneof('unknown',fullname,false) end rescue report("starting '#{$filename}' in program space '#{$program}' fails (#{$!})") end else report("the file '#{$filename}' in program space '#{$program}' is not accessible") end return false end def direct(fullname) begin return runcommand([fullname.sub(/^(bin|binary)\:/, ''),expanded($arguments)].join(' ')) rescue return false end end def edit(filename) begin return runcommand([$editor,expanded(filename),expanded($arguments)].join(' ')) rescue return false end end def make(filename,windows=false,linux=false,remove=false) basename = File.basename(filename).gsub(/\.[^.]+?$/, '') if $stubpath == 'auto' then basename = File.dirname($0) + '/' + basename else basename = $stubpath + '/' + basename unless $stubpath.empty? end if filename == 'texmfstart' then program = 'ruby' command = 'kpsewhich --format=texmfscripts --progname=context texmfstart.rb' filename = `#{command}`.chomp.gsub(/\\/, '/') if filename.empty? then report("failure: #{command}") return elsif not remove then if windows then ['bat','cmd','exe'].each do |suffix| if FileTest.file?("#{basename}.#{suffix}") then report("windows stub '#{basename}.#{suffix}' skipped (already present)") return end end elsif linux && FileTest.file?(basename) then report("unix stub '#{basename}' skipped (already present)") return end end else program = nil if filename =~ /[\\\/]/ && filename =~ /\.(#{$scriptlist})$/ then program = $applications[$1] end filename = "\"#{filename}\"" if filename =~ /\s/ program = 'texmfstart' if $indirect || ! program || program.empty? end begin callname = $predefined[filename.sub(/\.*?$/,'')] || filename if remove then if windows && (File.delete(basename+'.bat') rescue false) then report("windows stub '#{basename}.bat' removed (calls #{callname})") elsif linux && (File.delete(basename) rescue false) then report("unix stub '#{basename}' removed (calls #{callname})") end else if windows && f = open(basename+'.bat','w') then f.binmode f.write("@echo off\015\012") f.write("#{program} #{callname} %*\015\012") f.close report("windows stub '#{basename}.bat' made (calls #{callname})") elsif linux && f = open(basename,'w') then f.binmode f.write("#!/bin/sh\012") f.write("#{program} #{callname} \"$@\"\012") f.close report("unix stub '#{basename}' made (calls #{callname})") end end rescue report("failed to make stub '#{basename}' #{$!}") return false else return true end end def process(&block) if $iftouched then files = $directives['iftouched'].split(',') oldname, newname = files[0], files[1] if oldname && newname && File.needsupdate(oldname,newname) then report("file #{oldname}: #{File.timestamp(oldname)}") report("file #{newname}: #{File.timestamp(newname)}") report("file is touched, processing started") yield File.syncmtimes(oldname,newname) else report("file #{oldname} is untouched") end elsif $ifchanged then filename = $directives['ifchanged'] checkname = filename + ".md5" oldchecksum, newchecksum = "old", "new" begin newchecksum = Digest::MD5.hexdigest(IO.read(filename)).upcase rescue newchecksum = "new" else begin oldchecksum = IO.read(checkname).chomp rescue oldchecksum = "old" end end if $verbose then report("old checksum #{filename}: #{oldchecksum}") report("new checksum #{filename}: #{newchecksum}") end if oldchecksum != newchecksum then report("file is changed, processing started") begin File.open(checkname,'w') do |f| f << newchecksum end rescue end yield else report("file #{filename} is unchanged") end else yield end end def checkenvironment(tree) report('') ENV['TMP'] = ENV['TMP'] || ENV['TEMP'] || ENV['TMPDIR'] || ENV['HOME'] case RUBY_PLATFORM when /(mswin|bccwin|mingw|cygwin)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-mswin' when /(linux)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-linux' when /(darwin|rhapsody|nextstep)/i then ENV['TEXOS'] = ENV['TEXOS'] || 'texmf-macosx' # when /(netbsd|unix)/i then # todo else # todo end ENV['TEXOS'] = "#{ENV['TEXOS'].sub(/^[\\\/]*/, '').sub(/[\\\/]*$/, '')}" ENV['TEXPATH'] = tree.sub(/\/+$/,'') # + '/' ENV['TEXMFOS'] = "#{ENV['TEXPATH']}/#{ENV['TEXOS']}" report('') report("preset : TEXPATH => #{ENV['TEXPATH']}") report("preset : TEXOS => #{ENV['TEXOS']}") report("preset : TEXMFOS => #{ENV['TEXMFOS']}") report("preset : TMP => #{ENV['TMP']}") report('') end def loadfile(filename) begin IO.readlines(filename).each do |line| case line.chomp when /^[\#\%]/ then # comment when /^(.*?)\s*(\>|\=|\<)\s*(.*)\s*$/ then # = assign | > prepend | < append key, how, value = $1, $2, $3 begin # $SAFE = 0 value.gsub!(/\%(.*?)\%/) do ENV[$1] || '' end # value.gsub!(/\;/,$separator) if key =~ /PATH/i then case how when '=', '<<' then ENV[key] = value when '?', '??' then ENV[key] = ENV[key] || value when '<', '+=' then ENV[key] = (ENV[key] || '') + $separator + value when '>', '=+' then ENV[key] = value + $separator + (ENV[key] ||'') end rescue report("user set failed : #{key} (#{$!})") else report("user set : #{key} => #{ENV[key]}") end end end rescue report("error in reading file '#{filename}'") end end def loadtree(tree) begin unless tree.empty? then if File.directory?(tree) then setuptex = File.join(tree,'setuptex.tmf') else setuptex = tree.dup end if FileTest.file?(setuptex) then report("tex tree definition: #{setuptex}") checkenvironment(File.dirname(setuptex)) loadfile(setuptex) else report("no setup file '#{setuptex}'") end end rescue # maybe tree is empty or boolean (no arg given) end end def loadenvironment(environment) begin unless environment.empty? then filename = if $path.empty? then environment else File.expand_path(File.join($path,environment)) end if FileTest.file?(filename) then report("environment : #{environment}") loadfile(filename) else report("no environment file '#{environment}'") end end rescue report("problem while loading '#{environment}'") end end def show_environment if $showenv then keys = ENV.keys.sort size = 0 keys.each do |k| size = k.size if k.size > size end report('') keys.each do |k| report("#{k.rjust(size)} => #{ENV[k]}") end report('') end end def execute(arguments) # br global arguments = arguments.split(/\s+/) if arguments.class == String $directives = hashed(arguments) $help = $directives['help'] || false $batch = $directives['batch'] || false $filename = $directives['file'] || '' $program = $directives['program'] || 'context' $direct = $directives['direct'] || false $edit = $directives['edit'] || false $page = $directives['page'] || 1 $browser = $directives['browser'] || false $report = $directives['report'] || false $verbose = $directives['verbose'] || false $arguments = $directives['arguments'] || '' $execute = $directives['execute'] || $directives['exec'] || false $locate = $directives['locate'] || false $autotree = if $directives['autotree'] then (ENV['TEXMFSTART_TREE'] || ENV['TEXMFSTARTTREE'] || '') else '' end $path = $directives['path'] || '' $tree = $directives['tree'] || $autotree || '' $environment = $directives['environment'] || '' $make = $directives['make'] || false $remove = $directives['remove'] || $directives['delete'] || false $unix = $directives['unix'] || false $windows = $directives['windows'] || $directives['mswin'] || false $stubpath = $directives['stubpath'] || '' $indirect = $directives['indirect'] || false $before = $directives['before'] || '' $after = $directives['after'] || '' $iftouched = $directives['iftouched'] || false $ifchanged = $directives['ifchanged'] || false $openoffice = $directives['oo'] || false $crossover = false if $directives['clear'] $showenv = $directives['showenv'] || false $verbose = true if $showenv $serve = $directives['serve'] || false $verbose = true if (ENV['_CTX_VERBOSE_'] =~ /(y|yes|t|true|on)/io) && ! $locate && ! $report set_applications($page) # private: $selfmerge = $directives['selfmerge'] || false $selfcleanup = $directives['selfclean'] || $directives['selfcleanup'] || false ENV['_CTX_VERBOSE_'] = 'yes' if $verbose if $openoffice then if ENV['OOPATH'] then if FileTest.directory?(ENV['OOPATH']) then report("using open office python") if $mswindows then $applications['python'] = $applications['py'] = "\"#{File.join(ENV['OOPATH'],'program','python.bat')}\"" else $applications['python'] = $applications['py'] = File.join(ENV['OOPATH'],'python') end report("python path #{$applications['python']}") else report("environment variable 'OOPATH' does not exist") end else report("environment variable 'OOPATH' is not set") end end if $selfmerge then output("ruby libraries are cleaned up") if SelfMerge::cleanup output("ruby libraries are merged") if SelfMerge::merge return true elsif $selfcleanup then output("ruby libraries are cleaned up") if SelfMerge::cleanup return true elsif $help || ! $filename || $filename.empty? then usage loadtree($tree) loadenvironment($environment) show_environment() return true elsif $batch && $filename && ! $filename.empty? then # todo, take commands from file and avoid multiple starts and checks return false else report("texmfstart version #{$version}") loadtree($tree) loadenvironment($environment) show_environment() if $make || $remove then if $filename == 'all' then makelist = $makelist else makelist = [$filename] end makelist.each do |filename| if $windows then make(filename,true,false,$remove) elsif $unix then make(filename,false,true,$remove) else make(filename,$mswindows,!$mswindows,$remove) end end return true # guess elsif $browser && $filename =~ /^http\:\/\// then return launch($filename) else begin process do if $direct || $filename =~ /^bin\:/ then return direct($filename) elsif $edit && ! $editor.empty? then return edit($filename) else # script: or no prefix command = find(shortpathname($filename),$program) if command then register("THREAD",File.dirname(File.expand_path(command))) return run(command) else report('unable to locate program') return false end end end rescue report('fatal error in starting process') return false end end end end if execute(ARGV) then report("\nexecution was successful") if $verbose exit(0) else report("\nexecution failed") if $verbose exit(1) end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/rscortool.rb0000644000175000017500000000304610526734267025221 0ustar norbertnorbert# program : rscortool # copyright : PRAGMA Publishing On Demand # version : 1.00 - 2002 # author : Hans Hagen # # project : eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-pod.com / www.pragma-ade.com require 'rexml/document.rb' class Array def downcase self.collect { |l| l.to_s.downcase } end end class SortedXML def initialize (filename) return nil if not filename or filename.empty? or not test(?e,filename) @data = REXML::Document.new(File.new(filename), {:ignore_whitespace_nodes => :all, :compress_whitespace => :all}) end def save (filename) # filename += '.xml' unless filename.match(/\..*?$/) filename += '.xml' unless filename =~ /\..*?$/ if not filename.empty? and f = open(filename,'w') @data.write(f,0) f.close end end def sort keys = REXML::XPath.match(@data.root,"/contacts/contact/@label") return unless keys keys = keys.downcase records = @data.elements.to_a("/contacts/contact") @data.elements.delete_all("/contacts/contact") keys = keys.collect do |l| # prepare numbers l.gsub(/(\d+)/) do |d| sprintf('%05d', d) end end keys.sort.each do |s| @data.root.add_element(records[keys.index(s)]) end end end def sortfile (filename) c = SortedXML.new(filename) c.sort c.save('test.xml') end exit if ARGV[0] == nil or ARGV[0].empty? sortfile(ARGV[0]) context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/rsfiltool.rb0000644000175000017500000002231011244221744025170 0ustar norbertnorbert# program : rsfiltool # copyright : PRAGMA Publishing On Demand # version : 1.01 - 2002 # author : Hans Hagen # # project : eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-pod.com / www.pragma-ade.com unless defined? ownpath ownpath = $0.sub(/[\\\/]\w*?\.rb/i,'') $: << ownpath end # --name=a,b,c.xml wordt names [a.xml, b.xml, c.xml] # --path=x/y/z/a,b,c.xml wordt [x/y/z/a.xml, x/y/z/b.xml, x/y/z/c.xml] # todo : split session stuff from xmpl/base into an xmpl/session module and "include xmpl/session" into base and here and ... require 'fileutils' # require 'ftools' require 'xmpl/base' require 'xmpl/switch' require 'xmpl/request' session = Example.new('rsfiltool', '1.01', 'PRAGMA POD') filterprefix = 'rsfil-' commandline = CommandLine.new commandline.registerflag('submit') commandline.registerflag('fetch') commandline.registerflag('report') #commandline.registerflag('split') commandline.registerflag('stamp') commandline.registerflag('silent') commandline.registerflag('request') commandline.registerflag('nobackup') commandline.registervalue('filter') commandline.registervalue('root') commandline.registervalue('path') commandline.registervalue('name') commandline.expand session.set('log.silent',true) if commandline.option('silent') session.inherit(commandline) session.identify # session.exit unless session.loadenvironment def prepare (session) # Normally the system provides the file, but a user can provide the rest; in # order to prevent problems with keying in names, we force lowercase names. session.set('option.file',session.get('argument.first')) if session.get('option.file').empty? root = session.get('option.root').downcase path = session.get('option.path').downcase name = session.get('option.name').downcase file = session.get('option.file').downcase session.error('provide file') if file.empty? session.error('provide root') if root.empty? filter = session.get('option.filter').downcase trash = session.get('option.trash').downcase trash = '' unless FileTest.directory?(trash) if not filter.empty? then begin require filter rescue Exception begin require filterprefix + filter rescue Exception session.error('invalid filter') end end begin if RSFIL::valid?(file) then split = RSFIL::split(file,name) path = if split[0].downcase then split[0] else '' end file = if split[1].downcase then split[1] else '' end name = if split[2].downcase then split[2] else '' end session.report('split result',split.inspect) session.error('unable to split off path') if path.empty? session.error('unable to split off file') if file.empty? session.error('unable to split off name') if name.empty? session.set('option.path',path) if path session.set('option.file',file) if file session.set('option.name',name) if name else session.error('invalid filename', file) unless trash.empty? then File.copy(file,trash + '/' + file) end end rescue session.error('unable to split',file,'with filter',filter) end end session.error('provide path') if path.empty? session.error('invalid root') unless test(?d,root) exit if session.error? session.set('fb.filename',file) path.gsub!(/\\/o, '/') path.gsub!(/\s/o, '') path = root + '/' + path # multiple paths if path =~ /^(.*)\/(.*?)$/o then prepath = $1 postpath = $2 paths = postpath.split(/\,/) paths.collect! do |p| prepath + '/' + p end else paths = Array.new paths.push(path) end paths.collect! do |p| p.gsub(/[^a-zA-Z0-9\s\-\_\/\.\:]/o, '-') end file.gsub!(/\\/o, '/') file.gsub!(/[^a-zA-Z0-9\s\-\_\/\.\:]/o, '-') # if session.get('option.split') # if file =~ /(.*)\.(.*?)$/o # path = path + '/' + $1 # else # session.error('nothing to split in filename') # end # end paths.each do |p| begin session.report('creating path', p) File.makedirs(p) rescue session.error('unable to create path', p) end end name.gsub!(/\s+/,'') # can be a,b,c.exa.saved => a.exa.saved,b.exa.saved,c.exa.saved if name =~ /(.*?)\.(.*)$/ name = $1 suffix = $2 names = name.split(/\,/) names.collect! do |n| n + '.' + suffix end name = names.join(',') else names = name.split(/\,/) end session.set('fb.path',path) session.set('fb.paths',paths) session.set('fb.name',name) session.set('fb.names',names) end def thefullname(path,file,name='') filename = file.gsub(/.*?\//, '') if name.empty? path + '/' + filename else unless name =~ /\..+$/o # unless name.match(/\..+$/o) if filename =~ /(\..+)$/o # if file.match(/(\..+)$/o) name = name + $1 end end path + '/' + name end end def submitfile (session) filename = session.get('fb.filename') paths = session.get('fb.paths') names = session.get('fb.names') paths.each do |path| session.report('submitting path',path) names.each do |name| session.report('submitting file',filename,'to',name) submit(session,path,filename,name) end end end def submitlist (session) requestname = session.get('fb.filename') paths = session.get('fb.paths') if test(?e,requestname) session.report('loading request file', requestname) if request = ExaRequest.new(requestname) filelist = request.files if filelist && (filelist.size > 0) filelist.each do |filename| paths.each do |path| session.report('submitting file from list', filename) submit(session,path,filename,request.naturalname(filename)) end end else session.warning('no filelist in', requestname) end else session.warning('unable to load', requestname) end else session.warning('no file', requestname) end end def submit (session, path, filename, newname) fullname = thefullname(path,newname) unless test(?e,filename) session.warning('no file to submit', filename) return end begin File.copy(fullname,fullname+'.old') if ! session.get('nobackup') && test(?e,fullname) if test(?e,filename) File.copy(filename,fullname) session.report('submit', filename, 'in', fullname) if session.get('option.stamp') f = open(fullname+'.tim','w') f.puts(Time.now.gmtime.strftime("%a %b %d %H:%M:%S %Y")) f.close end else session.error('unable to locate', filename) end rescue session.error('unable to move', filename, 'to', fullname) end end def fetch (session) filename = session.get('fb.filename') paths = session.get('fb.paths') name = session.get('fb.name') begin File.copy(filename,filename+'.old') if ! session.get('nobackup') && test(?e,filename) paths.each do |path| # fullname = thefullname(path,request.naturalname(filename)) # fullname = thefullname(path,filename) fullname = thefullname(path,name) if test(?e,fullname) File.copy(fullname,filename) session.report('fetch', filename, 'from', fullname) return else session.report('file',fullname, 'is not present') end end rescue session.error('unable to fetch file from path') end session.error('no file',filename, 'fetched') unless test(?e,filename) end def report (session) filename = session.get('fb.filename') paths = session.get('fb.paths') paths.each do |path| fullname = thefullname(path,request.naturalname(filename)) if test(?e,fullname) begin session.report('file', fullname) session.report('size', test(?s,fullname)) if test(?e,fullname+'.tim') str = IO.readlines(fullname+'.tim') # str = IO.read(fullname+'.tim') session.report('time', str) end rescue session.error('unable to report about', fullname) end end end end if session.get('option.submit') prepare(session) if session.get('option.request') submitlist(session) else submitfile(session) end elsif session.get('option.fetch') prepare(session) fetch(session) elsif session.get('option.report') prepare(session) report(session) else session.report('provide action') end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/0000755000175000017500000000000012162137554023547 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/texutil.rb0000644000175000017500000011572411244221744025577 0ustar norbertnorbertrequire "base/file" require "base/logger" class String # real dirty, but inspect does a pretty good escaping but # unfortunately puts quotes around the string so we need # to strip these # def escaped # self.inspect[1,self.inspect.size-2] # end def escaped str = self.inspect ; str[1,str.size-2] end def splitdata if self =~ /^\s*(.*?)\s*\{(.*)\}\s*$/o then first, second = $1, $2 if first.empty? then [second.split(/\} \{/o)].flatten else [first.split(/\s+/o)] + [second.split(/\} \{/o)] end else [] end end end class Logger def banner(str) report(str) return "%\n% #{str}\n%\n" end end class TeXUtil class Plugin # we need to reset module data for each run; persistent data is # possible, just don't reinitialize the data structures that need # to be persistent; we reset afterwards becausethen we know what # plugins are defined def initialize(logger) @plugins = Array.new @logger = logger end def report(str) @logger.report("fatal error in plugin (#{str}): #{$!}") puts("\n") $@.each do |line| puts(" #{line}") end puts("\n") end def reset(name) if @plugins.include?(name) then begin eval("#{name}").reset(@logger) rescue Exception report("resetting") end else @logger.report("no plugin #{name}") end end def resets @plugins.each do |p| reset(p) end end def register(name, file=nil) # maybe also priority if file then begin require("#{file.downcase.sub(/\.rb$/,'')}.rb") rescue Exception @logger.report("no plugin file #{file} for #{name}") else @plugins.push(name) end else @plugins.push(name) end return self end def reader(name, data=[]) if @plugins.include?(name) then begin eval("#{name}").reader(@logger,data.flatten) rescue Exception report("reading") end else @logger.report("no plugin #{name}") end end def readers(data=[]) @plugins.each do |p| reader(p,data.flatten) end end def writers(handle) @plugins.each do |p| begin eval("#{p}").writer(@logger,handle) rescue Exception report("writing") end end end def processors @plugins.each do |p| begin eval("#{p}").processor(@logger) rescue Exception report("processing") end end end def finalizers @plugins.each do |p| begin eval("#{p}").finalizer(@logger) rescue Exception report("finalizing") end end end end class Sorter @@downcase = true def initialize(max=12) @rep, @map, @exp, @div = Hash.new, Hash.new, Hash.new, Hash.new @max = max @rexa, @rexb = nil, nil end def replacer(from,to='') # and expand @max = [@max,to.length+1].max if to @rep[from.escaped] = to || '' end # sorter.reducer('ch', 'c') # sorter.reducer('ij', 'y') def reducer(from,to='') @max = [@max,to.length+1].max if to @map[from] = to || '' end # sorter.expander('aeligature', 'ae') # sorter.expander('ijligature', 'y') def expander(from,to=nil) to = converted(to) # not from !!! @max = [@max,to.length+1].max if to @exp[from] = to || from || '' end def division(from,to=nil) from, to = converted(from), converted(to) @max = [@max,to.length+1].max if to @div[from] = to || from || '' end # shortcut("\\ab\\cd\\e\\f", 'iacute') # shortcut("\\\'\\i", 'iacute') # shortcut("\\\'i", 'iacute') # shortcut("\\\"e", 'ediaeresis') # shortcut("\\\'o", 'oacute') def hextoutf(str) str.gsub(/^(0x[A-F\d]+)$/) do [$1.hex()].pack("U") end end def shortcut(from,to) from = hextoutf(from) replacer(from,to) expander(to) end def prepare if @rep.size > 0 then @rexa = /(#{@rep.keys.join('|')})/ # o else @rexa = nil end if @map.size > 0 then # watch out, order of match matters if @@downcase then @rexb = /(\\[a-zA-Z]+|#{@map.keys.join('|')}|.)\s*/i # o else @rexb = /(\\[a-zA-Z]+|#{@map.keys.join('|')}|.)\s*/ # o end else if @@downcase then @rexb = /(\\[a-zA-Z]+|.)\s*/io else @rexb = /(\\[a-zA-Z]+|.)\s*/o end end if false then @exp.keys.each do |e| @exp[e].downcase! end end end def replace(str) if @rexa then str.gsub(@rexa) do @rep[$1.escaped] end else str end end def normalize(str) # replace(str).gsub(/ +/,' ') replace(str).gsub(/\s\s+/," \\space") end def tokenize(str) if str then str.gsub(/\\strchr\{(.*?)\}/o) do "\\#{$1}" end else "" end end def remap(str) s = str.dup if true then # numbers are treated special s.gsub!(/(\d+)/o) do $1.rjust(10,'a') # rest is b .. k end end if @rexa then s.gsub!(@rexa) do @rep[$1.escaped] end end if @rexb then s.gsub!(@rexb) do token = $1.sub(/\\/o, '') if @@downcase then token.downcase! end if @exp.key?(token) then @exp[token].ljust(@max,' ') elsif @map.key?(token) then @map[token].ljust(@max,' ') else '' end end end s end def preset(shortcuts=[],expansions=[],reductions=[],divisions=[],language='') 'a'.upto('z') do |c| expander(c) ; division(c) end 'A'.upto('Z') do |c| expander(c) ; division(c) end expander('1','b') ; expander('2','c') ; expander('3','e') ; expander('4','f') expander('5','g') ; expander('6','h') ; expander('7','i') ; expander('8','i') expander('9','j') ; expander('0','a') ; expander('-','-') ; shortcuts.each do |s| shortcut(s[1],s[2]) if s[0] == '' || s[0] == language end expansions.each do |e| expander(e[1],e[2]) if e[0] == '' || e[0] == language end reductions.each do |r| reducer(r[1],r[2]) if r[0] == '' || r[0] == language end divisions.each do |d| division(d[1],d[2]) if d[0] == '' || d[0] == language end end def simplify(str) s = str.dup # ^^ # s.gsub!(/\^\^([a-f0-9][a-f0-9])/o, $1.hex.chr) # \- || s.gsub!(/(\\\-|\|\|)/o) do '-' end # {} s.gsub!(/\{\}/o) do '' end # <*..> (internal xml entity) s.gsub!(/<\*(.*?)>/o) do $1 end # entities s.gsub!(/\\getXMLentity\s*\{(.*?)\}/o) do $1 end # elements s.gsub!(/\<.*?>/o) do '' end # what to do with xml and utf-8 # \"e etc # unknown \cs s.gsub!(/\\[a-zA-Z][a-zA-Z]+\s*\{(.*?)\}/o) do $1 end return s end def getdivision(str) @div[str] || str end def division?(str) @div.key?(str) end private def converted(str) if str then # puts str str.gsub(/([\+\-]*\d+)/o) do n = $1.to_i if n > 0 then 'z'*n elsif n < 0 then '-'*(-n) # '-' precedes 'a' else '' end end else nil end end end class Plugin module MyFiles @@files, @@temps = Hash.new, Hash.new def MyFiles::reset(logger) @@files, @@temps = Hash.new, Hash.new end def MyFiles::reader(logger,data) case data[0] when 'b', 'e' then @@files[data[1]] = (@@files[data[1]] ||0) + 1 when 't' then # temporary file @@temps[data[1]] = (@@temps[data[1]] ||0) + 1 end end def MyFiles::writer(logger,handle) handle << logger.banner("loaded files: #{@@files.size}") @@files.keys.sort.each do |k| handle << "% > #{k} #{@@files[k]/2}\n" end handle << logger.banner("temporary files: #{@@temps.size}") @@temps.keys.sort.each do |k| handle << "% > #{k} #{@@temps[k]}\n" end end def MyFiles::processor(logger) @@files.keys.sort.each do |k| unless (@@files[k] % 2) == 0 then logger.report("check loading of file '#{k}', begin/end problem") end end @@temps.keys.sort.each do |k| # logger.report("temporary file '#{k}' can be deleted") end end def MyFiles::finalizer(logger) end end end class Plugin module MyCommands @@commands = [] def MyCommands::reset(logger) @@commands = [] end def MyCommands::reader(logger,data) @@commands.push(data.shift+data.collect do |d| "\{#{d}\}" end.join) end def MyCommands::writer(logger,handle) handle << logger.banner("commands: #{@@commands.size}") @@commands.each do |c| handle << "#{c}%\n" end end def MyCommands::processor(logger) end def MyCommands::finalizer(logger) end end end class Plugin module MyExtras @@programs = [] def MyExtras::reset(logger) @@programs = [] end def MyExtras::reader(logger,data) case data[0] when 'p' then @@programs.push(data[1]) if data[0] end end def MyExtras::writer(logger,handle) handle << logger.banner("programs: #{@@programs.size}") @@programs.each_with_index do |cmd, p| handle << "% #{p+1} (#{cmd})\n" end end def MyExtras::processor(logger) @@programs.each do |p| # cmd = @@programs[p.to_i] # logger.report("running #{cmd}") # system(cmd) end end def MyExtras::finalizer(logger) unless (ENV["CTX.TEXUTIL.EXTRAS"] =~ /^(no|off|false|0)$/io) || (ENV["CTX_TEXUTIL_EXTRAS"] =~ /^(no|off|false|0)$/io) then @@programs.each do |cmd| logger.report("running #{cmd}") system(cmd) end end end end end class Plugin module MySynonyms class Synonym @@debug = false def initialize(t, c, k, d) @type, @command, @key, @sortkey, @data = t, c, k, c, d end attr_reader :type, :command, :key, :data attr_reader :sortkey attr_writer :sortkey # def build(sorter) # if @key then # @sortkey = sorter.normalize(sorter.tokenize(@sortkey)) # @sortkey = sorter.remap(sorter.simplify(@key.downcase)) # ?? # if @sortkey.empty? then # @sortkey = sorter.remap(@command.downcase) # end # else # @key = "" # @sortkey = "" # end # end def build(sorter) if @sortkey and not @sortkey.empty? then @sortkey = sorter.normalize(sorter.tokenize(@sortkey)) @sortkey = sorter.remap(sorter.simplify(@sortkey.downcase)) # ?? end if not @sortkey or @sortkey.empty? then @sortkey = sorter.normalize(sorter.tokenize(@key)) @sortkey = sorter.remap(sorter.simplify(@sortkey.downcase)) # ?? end if not @sortkey or @sortkey.empty? then @sortkey = @key.dup end end def <=> (other) @sortkey <=> other.sortkey end def Synonym.flush(list,handle) if @@debug then list.each do |entry| handle << "% [#{entry.sortkey}]\n" end end list.each do |entry| handle << "\\synonymentry{#{entry.type}}{#{entry.command}}{#{entry.key}}{#{entry.data}}%\n" end end end @@synonyms = Hash.new @@sorter = Hash.new @@languages = Hash.new def MySynonyms::reset(logger) @@synonyms = Hash.new @@sorter = Hash.new @@languages = Hash.new end def MySynonyms::reader(logger,data) case data[0] when 'e' then @@synonyms[data[1]] = Array.new unless @@synonyms.key?(data[1]) @@synonyms[data[1]].push(Synonym.new(data[1],data[2],data[3],data[4])) when 'l' then @@languages[data[1]] = data[2] || '' end end def MySynonyms::writer(logger,handle) if @@synonyms.size > 0 then @@synonyms.keys.sort.each do |s| handle << logger.banner("synonyms: #{s} #{@@synonyms[s].size}") Synonym.flush(@@synonyms[s],handle) end end end def MySynonyms::processor(logger) @@synonyms.keys.each do |s| @@sorter[s] = Sorter.new @@sorter[s].preset( eval("MyKeys").shortcuts, eval("MyKeys").expansions, eval("MyKeys").reductions, eval("MyKeys").divisions, @@languages[s] || '') @@sorter[s].prepare @@synonyms[s].each_index do |i| @@synonyms[s][i].build(@@sorter[s]) end @@synonyms[s] = @@synonyms[s].sort end end def MySynonyms::finalizer(logger) end end end class Plugin module MyRegisters class Register @@specialsymbol = "\000" @@specialbanner = "" # \\relax" @@debug = false @@howto = /^(.*?)\:\:(.*)$/o @@split = ' && ' def initialize(state, t, l, k, e, s, p, r) @state, @type, @location, @key, @entry, @seetoo, @page, @realpage = state, t, l, k, e, s, p, r if @key =~ @@howto then @pagehowto, @key = $1, $2 else @pagehowto = '' end if @entry =~ @@howto then @texthowto, @entry = $1, $2 else @texthowto = '' end @key = @entry.dup if @key.empty? @sortkey = @key.dup @nofentries, @nofpages = 0, 0 @normalizeentry = false end attr_reader :state, :type, :location, :key, :entry, :seetoo, :page, :realpage, :texthowto, :pagehowto attr_reader :sortkey attr_writer :sortkey def build(sorter) # @entry, @key = sorter.normalize(@entry), sorter.normalize(sorter.tokenize(@key)) @entry = sorter.normalize(sorter.tokenize(@entry)) if @normalizeentry @key = sorter.normalize(sorter.tokenize(@key)) if false then @entry, @key = [@entry, @key].collect do |target| # +a+b+c &a&b&c a+b+c a&b&c case target[0,1] when '&' then target = target.sub(/^./o,'').gsub(/([^\\])\&/o) do "#{$1}#{@@split}" end when '+' then target = target.sub(/^./o,'').gsub(/([^\\])\+/o) do "#{$1}#{@@split}" end else target = target .gsub(/([^\\])[\&\+]/o) do "#{$1}#{@@split}" end end # {a}{b}{c} # if target =~ /^\{(.*)\}$/o then # $1.split(/\} \{/o).join(@@split) # space between } { is mandate # else target # end end else # @entry, @key = cleanupsplit(@entry), cleanupsplit(@key) @entry, @key = cleanupsplit(@entry), xcleanupsplit(@key) end @sortkey = sorter.simplify(@key) # special = @sortkey =~ /^([^a-zA-Z\\])/o special = @sortkey =~ /^([\`\~\!\@\#\$\%\^\&\*\(\)\_\-\+\=\{\}\[\]\:\;\"\'\|\<\,\>\.\?\/\d])/o @sortkey = @sortkey.split(@@split).collect do |c| sorter.remap(c) end.join(@@split) if special then @sortkey = "#{@@specialsymbol}#{@sortkey}" end if @realpage == 0 then @realpage = 999999 end @sortkey = [ @sortkey.downcase, @sortkey, @entry, @texthowto.ljust(10,' '), # @state, # no, messes up things (@realpage.to_s || '').rjust(6,' ').gsub(/0/,' '), # (@realpage ||'').rjust(6,' '), @pagehowto ].join(@@split) end def cleanupsplit(target) # +a+b+c &a&b&c a+b+c a&b&c case target[0,1] when '&' then target.sub(/^./o,'').gsub(/([^\\])\&/o) do "#{$1}#{@@split}" end when '+' then target.sub(/^./o,'').gsub(/([^\\])\+/o) do "#{$1}#{@@split}" end else target .gsub(/([^\\])[\&\+]/o) do "#{$1}#{@@split}" end end end def xcleanupsplit(target) # +a+b+c &a&b&c a+b+c a&b&c t = Array.new case target[0,1] when '&' then t = target.sub(/^./o,'').split(/([^\\])\&/o) when '+' then t = target.sub(/^./o,'').split(/([^\\])\+/o) else # t = target.split(/([^\\])[\&\+]/o) # t = target.split(/[\&\+]/o) t = target.split(/(?!\\)[\&\+]/o) # lookahead end if not t[1] then t[1] = " " end # we need some entry else we get subentries first if not t[2] then t[2] = " " end # we need some entry else we get subentries first if not t[3] then t[3] = " " end # we need some entry else we get subentries first return t.join(@@split) end def <=> (other) @sortkey <=> other.sortkey end # more module like @@savedhowto, @@savedfrom, @@savedto, @@savedentry = '', '', '', '', '' @@collapse = false def Register.flushsavedline(handle) if @@collapse && ! @@savedfrom.empty? then if ! @@savedto.empty? then handle << "\\registerfrom#{@@savedfrom}%" handle << "\\registerto#{@@savedto}%" else handle << "\\registerpage#{@@savedfrom}%" end end @@savedhowto, @@savedfrom, @@savedto, @@savedentry = '', '', '', '' end def Register.flush(list,handle,sorter) # a bit messy, quite old mechanism, maybe some day ... # alphaclass can go, now flushed per class if list.size > 0 then @nofentries, @nofpages = 0, 0 current, previous, howto = Array.new, Array.new, Array.new lastpage, lastrealpage = '', '' alphaclass, alpha = '', '' @@savedhowto, @@savedfrom, @@savedto, @@savedentry = '', '', '', '' if @@debug then list.each do |entry| handle << "% [#{entry.sortkey.gsub(/#{@@split}/o,'] [')}]\n" end end list.each do |entry| # puts(entry.sortkey.gsub(/\s+/,"")) if entry.sortkey =~ /^(\S+)/o then if sorter.division?($1) then testalpha = sorter.getdivision($1) else testalpha = entry.sortkey[0,1].downcase end else testalpha = entry.sortkey[0,1].downcase end if (testalpha != alpha.downcase) || (alphaclass != entry.class) then alpha = testalpha alphaclass = entry.class if alpha != ' ' then flushsavedline(handle) if alpha =~ /^[a-zA-Z]$/o then character = alpha.dup elsif alpha == @@specialsymbol then character = @@specialbanner elsif alpha.length > 1 then # character = "\\getvalue\{#{alpha}\}" character = "\\#{alpha}" else character = "\\unknown" end handle << "\\registerentry{#{entry.type}}{#{character}}%\n" end end current = [entry.entry.split(@@split),'','','',''].flatten howto = current.collect do |e| e + '::' + entry.texthowto end if howto[0] == previous[0] then current[0] = '' else previous[0] = howto[0].dup previous[1] = '' previous[2] = '' previous[3] = '' end if howto[1] == previous[1] then current[1] = '' else previous[1] = howto[1].dup previous[2] = '' previous[3] = '' end if howto[2] == previous[2] then current[2] = '' else previous[2] = howto[2].dup previous[3] = '' end if howto[3] == previous[3] then current[3] = '' else previous[3] = howto[3].dup end copied = false unless current[0].empty? then Register.flushsavedline(handle) handle << "\\registerentrya{#{entry.type}}{#{current[0]}}%\n" copied = true end unless current[1].empty? then Register.flushsavedline(handle) handle << "\\registerentryb{#{entry.type}}{#{current[1]}}%\n" copied = true end unless current[2].empty? then Register.flushsavedline(handle) handle << "\\registerentryc{#{entry.type}}{#{current[2]}}%\n" copied = true end unless current[3].empty? then Register.flushsavedline(handle) handle << "\\registerentryd{#{entry.type}}{#{current[3]}}%\n" copied = true end @nofentries += 1 if copied # if entry.realpage.to_i == 0 then if entry.realpage.to_i == 999999 then Register.flushsavedline(handle) handle << "\\registersee{#{entry.type}}{#{entry.pagehowto},#{entry.texthowto}}{#{entry.seetoo}}{#{entry.page}}%\n" ; lastpage, lastrealpage = entry.page, entry.realpage copied = false # no page ! elsif @@savedhowto != entry.pagehowto and ! entry.pagehowto.empty? then @@savedhowto = entry.pagehowto end # beware, we keep multiple page entries per realpage because of possible prefix usage if copied || ! ((lastpage == entry.page) && (lastrealpage == entry.realpage)) then nextentry = "{#{entry.type}}{#{previous[0]}}{#{previous[1]}}{#{previous[2]}}{#{previous[3]}}{#{entry.pagehowto},#{entry.texthowto}}" savedline = "{#{entry.type}}{#{@@savedhowto},#{entry.texthowto}}{#{entry.location}}{#{entry.page}}{#{entry.realpage}}" if entry.state == 1 then # from Register.flushsavedline(handle) handle << "\\registerfrom#{savedline}%\n" elsif entry.state == 3 then # to Register.flushsavedline(handle) handle << "\\registerto#{savedline}%\n" @@savedhowto = '' # test elsif @@collapse then if savedentry != nextentry then savedFrom = savedline else savedTo, savedentry = savedline, nextentry end else handle << "\\registerpage#{savedline}%\n" @@savedhowto = '' # test end @nofpages += 1 lastpage, lastrealpage = entry.page, entry.realpage end end Register.flushsavedline(handle) end end end @@registers = Hash.new @@sorter = Hash.new @@languages = Hash.new def MyRegisters::reset(logger) @@registers = Hash.new @@sorter = Hash.new @@languages = Hash.new end def MyRegisters::reader(logger,data) case data[0] when 'f' then @@registers[data[1]] = Array.new unless @@registers.key?(data[1]) @@registers[data[1]].push(Register.new(1,data[1],data[2],data[3],data[4],nil,data[5],data[6])) when 'e' then @@registers[data[1]] = Array.new unless @@registers.key?(data[1]) @@registers[data[1]].push(Register.new(2,data[1],data[2],data[3],data[4],nil,data[5],data[6])) when 't' then @@registers[data[1]] = Array.new unless @@registers.key?(data[1]) @@registers[data[1]].push(Register.new(3,data[1],data[2],data[3],data[4],nil,data[5],data[6])) when 's' then @@registers[data[1]] = Array.new unless @@registers.key?(data[1]) # was this but wrong sort order (4,data[1],data[2],data[3],data[4],data[5],data[6],nil)) @@registers[data[1]].push(Register.new(4,data[1],data[2],data[3],data[4],data[5],data[6],0)) when 'l' then @@languages[data[1]] = data[2] || '' end end def MyRegisters::writer(logger,handle) if @@registers.size > 0 then @@registers.keys.sort.each do |s| handle << logger.banner("registers: #{s} #{@@registers[s].size}") Register.flush(@@registers[s],handle,@@sorter[s]) # report("register #{@@registers[s].class}: #{@@registers[s].@nofentries} entries and #{@@registers[s].@nofpages} pages") end end end def MyRegisters::processor(logger) @@registers.keys.each do |s| @@sorter[s] = Sorter.new @@sorter[s].preset( eval("MyKeys").shortcuts, eval("MyKeys").expansions, eval("MyKeys").reductions, eval("MyKeys").divisions, @@languages[s] || '') @@sorter[s].prepare @@registers[s].each_index do |i| @@registers[s][i].build(@@sorter[s]) end # @@registers[s].uniq! @@registers[s] = @@registers[s].sort end end def MyRegisters::finalizer(logger) end end end class Plugin module MyPlugins @@plugins = nil def MyPlugins::reset(logger) @@plugins = nil end def MyPlugins::reader(logger,data) @@plugins = Plugin.new(logger) unless @@plugins case data[0] when 'r' then logger.report("registering plugin #{data[1]}") @@plugins.register(data[1],data[2]) when 'd' then begin @@plugins.reader(data[1],data[2,data.length-1]) rescue @@plugins.reader(data[1],['error']) end end end def MyPlugins::writer(logger,handle) @@plugins.writers(handle) if @@plugins end def MyPlugins::processor(logger) @@plugins.processors if @@plugins end def MyPlugins::finalizer(logger) @@plugins.finalizers if @@plugins end end end class Plugin module MyKeys @@shortcuts = Array.new @@expansions = Array.new @@reductions = Array.new @@divisions = Array.new def MyKeys::shortcuts @@shortcuts end def MyKeys::expansions @@expansions end def MyKeys::reductions @@reductions end def MyKeys::divisions @@divisions end def MyKeys::reset(logger) @@shortcuts = Array.new @@expansions = Array.new @@reductions = Array.new end def MyKeys::reader(logger,data) key = data.shift # grp = data.shift # language code, todo case key when 's' then @@shortcuts.push(data) when 'e' then @@expansions.push(data) when 'r' then @@reductions.push(data) when 'd' then @@divisions.push(data) end end def MyKeys::writer(logger,handle) end def MyKeys::processor(logger) logger.report("shortcuts : #{@@shortcuts.size}") # logger.report(@@shortcuts.inspect) logger.report("expansions: #{@@expansions.size}") # logger.report(@@expansions.inspect) logger.report("reductions: #{@@reductions.size}") # logger.report(@@reductions.inspect) logger.report("divisions : #{@@divisions.size}") # logger.report(@@divisions.inspect) end def MyKeys::finalizer(logger) end end end class Converter def initialize(logger=nil) if @logger = logger then def report(str) @logger.report(str) end def banner(str) @logger.banner(str) end else @logger = self def report(str) puts(str) end def banner(str) puts(str) end end @filename = 'texutil' @fatalerror = false @plugins = Plugin.new(@logger) ['MyFiles', 'MyCommands', 'MySynonyms', 'MyRegisters', 'MyExtras', 'MyPlugins', 'MyKeys'].each do |p| @plugins.register(p) end end def loaded(filename) begin tuifile = File.suffixed(filename,'tui') if FileTest.file?(tuifile) then report("parsing file #{tuifile}") if f = File.open(tuifile,'rb') then f.each do |line| case line.chomp when /^f (.*)$/o then @plugins.reader('MyFiles', $1.splitdata) when /^c (.*)$/o then @plugins.reader('MyCommands', [$1]) when /^e (.*)$/o then @plugins.reader('MyExtras', $1.splitdata) when /^s (.*)$/o then @plugins.reader('MySynonyms', $1.splitdata) when /^r (.*)$/o then @plugins.reader('MyRegisters',$1.splitdata) when /^p (.*)$/o then @plugins.reader('MyPlugins', $1.splitdata) when /^x (.*)$/o then @plugins.reader('MyKeys', $1.splitdata) when /^r (.*)$/o then # nothing, not handled here else # report("unknown entry #{line[0,1]} in line #{line.chomp}") end end f.close end else report("unable to locate #{tuifile}") end rescue report("fatal error in parsing #{tuifile}") @filename = 'texutil' else @filename = filename end end def processed @plugins.processors return true # for the moment end def saved(filename=@filename) if @fatalerror then report("fatal error, no tuo file saved") return false else begin if f = File.open(File.suffixed(filename,'tuo'),'w') then @plugins.writers(f) f << "\\endinput\n" f.close end rescue report("fatal error when saving file (#{$!})") return false else report("tuo file saved") return true end end end def finalized @plugins.finalizers @plugins.resets return true # for the moment end def reset @plugins.resets end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpse.rb0000644000175000017500000003251312073425545025043 0ustar norbertnorbert# module : base/kpse # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # rename this one to environment # # todo: web2c vs miktex module and include in kpse require 'rbconfig' require 'fileutils' # beware $engine is lowercase in kpse # # miktex has mem|fmt|base paths class String def split_path if self =~ /\;/o || self =~ /^[a-z]\:/io then self.split(";") else self.split(":") end end def sane_path self.gsub(/\\/,'/') end end class Array def join_path self.join(File::PATH_SEPARATOR) end def non_empty self.delete_if do |i| (i == nil || i.empty?) rescue false end end end module Kpse @@located = Hash.new @@paths = Hash.new @@scripts = Hash.new @@formats = ['tex','texmfscripts','other text files'] @@progname = 'context' @@ownpath = $0.sub(/[\\\/][a-z0-9\-]*?\.rb/i,'') @@problems = false @@tracing = false @@distribution = 'web2c' @@crossover = true @@mswindows = RbConfig::CONFIG['host_os'] =~ /mswin/ # @@distribution = 'miktex' if ENV['PATH'] =~ /miktex[\\\/]bin/o # if ENV['PATH'] =~ /(.*?)miktex[\\\/]bin/i then # @@distribution = 'miktex' unless $1 =~ /(texmf\-mswin[\/\\]bin|bin[\/\\]win32)/i # end if @@mswindows && (ENV['PATH'] =~ /(.*?)miktex[\\\/]bin/i) then @@distribution = 'miktex' unless $1 =~ /(texmf\-mswin[\/\\]bin|bin[\/\\]win32)/i end @@re_true = /yes|on|true|1/i if (ENV['KPSEFAST'] =~ @@re_true) || (ENV['CTXMINIMAL'] =~ @@re_true) then @@usekpserunner = true require 'base/kpsefast' require 'base/kpserunner' else @@usekpserunner = false end if @@crossover then ENV.keys.each do |k| case k when /\_CTX\_KPSE\_V\_(.*?)\_/io then @@located[$1] = ENV[k].dup when /\_CTX\_KPSE\_P\_(.*?)\_/io then @@paths [$1] = ENV[k].dup.split(';') when /\_CTX\_KPSE\_S\_(.*?)\_/io then @@scripts[$1] = ENV[k].dup end end end def Kpse.distribution @@distribution end def Kpse.miktex? @@distribution == 'miktex' end def Kpse.web2c? @@distribution == 'web2c' end def Kpse.inspect @@located.keys.sort.each do |k| puts("located : #{k} -> #{@@located[k]}\n") end @@paths .keys.sort.each do |k| puts("paths : #{k} -> #{@@paths [k]}\n") end @@scripts.keys.sort.each do |k| puts("scripts : #{k} -> #{@@scripts[k]}\n") end end def Kpse.used_path(varname) begin if @@mswindows then path = run("--expand-path=\$#{varname}") rescue '' else path = run("--expand-path='$#{varname}'") rescue '' end rescue path = '' end return path.sane_path end def Kpse.found(filename, progname=nil, format=nil) begin tag = Kpse.key(filename) # all if @@located.key?(tag) then return @@located[tag].sane_path elsif FileTest.file?(filename) then setvariable(tag,filename) return filename elsif FileTest.file?(File.join(@@ownpath,filename)) then setvariable(tag,File.join(@@ownpath,filename)) return @@located[tag].sane_path else [progname,@@progname].flatten.compact.uniq.each do |prg| [format,@@formats].flatten.compact.uniq.each do |fmt| begin tag = Kpse.key(filename,prg,fmt) if @@located.key?(tag) then return @@located[tag].sane_path elsif p = Kpse.kpsewhich(filename,prg,fmt) then setvariable(tag,p.chomp) return @@located[tag].sane_path end rescue end end end setvariable(tag,filename) return filename.sane_path end rescue filename.sane_path end end def Kpse.kpsewhich(filename,progname,format) p = if progname && ! progname.empty? then "-progname=#{progname}" else '' end f = if format && ! format.empty? then "-format=\"#{format}\"" else '' end Kpse.run("#{p} #{f} #{filename}") end def Kpse.which Kpse.kpsewhich end def Kpse.run(arguments) puts arguments if @@tracing begin if @@problems then results = '' elsif @@usekpserunner then results = KpseRunner.kpsewhich(arguments).chomp else results = `kpsewhich #{arguments}`.chomp end rescue puts "unable to run kpsewhich" if @@tracing @@problems, results = true, '' end puts results if @@tracing return results end def Kpse.formatpaths # maybe we should check for writeability unless @@paths.key?('formatpaths') then begin setpath('formatpaths',run("--show-path=fmt").sane_path.split_path) rescue setpath('formatpaths',[]) end end return @@paths['formatpaths'] end def Kpse.key(filename='',progname='all',format='all') [progname,format,filename].join('-') end def Kpse.formatpath(engine='pdftex',enginepath=true) # because engine support in distributions is not always # as we expect, we need to check for it; # todo: miktex if miktex? then return '.' else unless @@paths.key?(engine) then # savedengine = ENV['engine'] if ENV['TEXFORMATS'] && ! ENV['TEXFORMATS'].empty? then # make sure that we have a lowercase entry ENV['TEXFORMATS'] = ENV['TEXFORMATS'].sub(/\$engine/io,"\$engine") # well, we will append anyway, so we could also strip it # ENV['TEXFORMATS'] = ENV['TEXFORMATS'].sub(/\$engine/io,"") end # use modern method if enginepath then formatpath = run("--engine=#{engine} --show-path=fmt") else # ENV['engine'] = engine if engine formatpath = run("--show-path=fmt") end # use ancient method if formatpath.empty? then if enginepath then if @@mswindows then formatpath = run("--engine=#{engine} --expand-path=\$TEXFORMATS") else formatpath = run("--engine=#{engine} --expand-path=\\\$TEXFORMATS") end end # either no enginepath or failed run if formatpath.empty? then if @@mswindows then formatpath = run("--expand-path=\$TEXFORMATS") else formatpath = run("--expand-path=\\\$TEXFORMATS") end end end # locate writable path if ! formatpath.empty? then formatpaths, done = formatpath.split_path, false formatpaths.collect! do |fp| fp.gsub!(/\\/o,'/') fp.gsub!(/\/\/$/o,'/') # remove funny patterns fp.sub!(/^!!/o,'') fp.sub!(/\/+$/o,'') fp.sub!(/(unsetengine|unset)/o,if enginepath then engine else '' end) fp end formatpaths.delete_if do |fp| fp.empty? || fp == '.' end # the engine path may not yet be present, find first writable formatpaths.each do |fp| # strip (possible engine) and test for writeability fpp = fp.sub(/#{engine}\/*$/o,'') if FileTest.directory?(fpp) && FileTest.writable?(fpp) then # use this path formatpath, done = fp.dup, true break end end unless done then formatpaths.each do |fp| fpp = fp.sub(/#{engine}\/*$/o,'') FileUtils.makedirs(fpp) rescue false # maybe we don't have an path yet if FileTest.directory?(fpp) && FileTest.writable?(fpp) then # use this path formatpath, done = fp.dup, true break end end end unless done then formatpath = '.' end end # needed ! FileUtils.makedirs(formatpath) rescue false # fall back to current path formatpath = '.' if formatpath.empty? || ! FileTest.writable?(formatpath) # append engine but prevent duplicates formatpath = File.join(formatpath.sub(/\/*#{engine}\/*$/,''), engine) if enginepath FileUtils.makedirs(formatpath) rescue false setpath(engine,formatpath) # ENV['engine'] = savedengine end return @@paths[engine].first end end def Kpse.update system('initexmf -u') if Kpse.miktex? system('mktexlsr') end # engine support is either broken of not implemented in some # distributions, so we need to take care of it ourselves (without # delays due to kpse calls); there can be many paths in the string # # in a year or so, i will drop this check def Kpse.fixtexmfvars(engine=nil) ENV['ENGINE'] = engine if engine texformats = if ENV['TEXFORMATS'] then ENV['TEXFORMATS'].dup else '' end if texformats.empty? then if engine then if @@mswindows then texformats = `kpsewhich --engine=#{engine} --expand-var=\$TEXFORMATS`.chomp else texformats = `kpsewhich --engine=#{engine} --expand-var=\\\$TEXFORMATS`.chomp end else if @@mswindows then texformats = `kpsewhich --expand-var=\$TEXFORMATS`.chomp else texformats = `kpsewhich --expand-var=\\\$TEXFORMATS`.chomp end end end if engine then texformats.sub!(/unsetengine/,engine) else texformats.sub!(/unsetengine/,"\$engine") end if engine && (texformats =~ /web2c[\/\\].*#{engine}/o) then # ok, engine is seen return false elsif texformats =~ /web2c[\/\\].*\$engine/io then # shouldn't happen return false else ENV['TEXFORMATS'] = texformats.gsub(/(web2c\/\{)(,\})/o) do "#{$1}\$engine#{$2}" end if texformats !~ /web2c[\/\\].*\$engine/io then ENV['TEXFORMATS'] = texformats.gsub(/web2c\/*/, "web2c/{\$engine,}") end return true end end # def Kpse.runscript(name,filename=[],options=[]) # setscript(name,`texmfstart --locate #{name}`) unless @@scripts.key?(name) # cmd = "#{@@scripts[name]} #{[options].flatten.join(' ')} #{[filename].flatten.join(' ')}" # system(cmd) # end # def Kpse.pipescript(name,filename=[],options=[]) # setscript(name,`texmfstart --locate #{name}`) unless @@scripts.key?(name) # cmd = "#{@@scripts[name]} #{[options].flatten.join(' ')} #{[filename].flatten.join(' ')}" # `#{cmd}` # end def Kpse.runscript(name,filename=[],options=[]) cmd = "mtxrun --script #{name} #{[options].flatten.join(' ')} #{[filename].flatten.join(' ')}" system(cmd) end def Kpse.pipescript(name,filename=[],options=[]) cmd = "mtxrun --script #{name} #{[options].flatten.join(' ')} #{[filename].flatten.join(' ')}" `#{cmd}` end def Kpse.searchmethod if @@usekpserunner then 'kpsefast' else 'kpsewhich' end end private def Kpse.setvariable(key,value) @@located[key] = value ENV["_CTX_K_V_#{key}_"] = @@located[key] if @@crossover end def Kpse.setscript(key,value) @@scripts[key] = value ENV["_CTX_K_S_#{key}_"] = @@scripts[key] if @@crossover end def Kpse.setpath(key,value) @@paths[key] = [value].flatten.uniq.collect do |p| p.sub(/^!!/,'').sub(/\/*$/,'') end ENV["_CTX_K_P_#{key}_"] = @@paths[key].join(';') if @@crossover end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/switch.rb0000644000175000017500000003605112161703335025375 0ustar norbertnorbert#encoding: ASCII-8BIT # module : base/switch # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # we cannot use getoptlong because we want to be more # tolerant; also we want to be case insensitive (2002). # we could make each option a class itself, but this is # simpler; also we can put more in the array # beware: regexps/o in methods are optimized globally require "rbconfig" $mswindows = RbConfig::CONFIG['host_os'] =~ /mswin/ $separator = File::PATH_SEPARATOR class String def has_suffix?(suffix) self =~ /\.#{suffix}$/i end end # may move to another module class File @@update_eps = 1 def File.needsupdate(oldname,newname) begin oldtime = File.stat(oldname).mtime.to_i newtime = File.stat(newname).mtime.to_i if newtime >= oldtime then return false elsif oldtime-newtime < @@update_eps then return false else return true end rescue return true end end def File.syncmtimes(oldname,newname) return begin if $mswindows then # does not work (yet) / gives future timestamp # t = File.mtime(oldname) # i'm not sure if the time is frozen, so we do it here # File.utime(0,t,oldname,newname) else t = File.mtime(oldname) # i'm not sure if the time is frozen, so we do it here File.utime(0,t,oldname,newname) end rescue end end def File.timestamp(name) begin "#{File.stat(name).mtime}" rescue return 'unknown' end end end # main thing module CommandBase # this module can be used as a mixin in a command handler $stdout.sync = true def initialize(commandline,logger,banner) @commandline, @logger, @banner = commandline, logger, banner @forcenewline, @versiondone, @error = false, false, false version if @commandline.option('version') end def reportlines(*str) @logger.reportlines(str) end # only works in 1.8 # # def report(*str) # @logger.report(str) # end # # def version # just a bit of playing with defs # report(@banner.join(' - ')) # def report(*str) # @logger.report # @logger.report(str) # def report(*str) # @logger.report(str) # end # end # def version # end # end def report(*str) initlogger ; @logger.report(str) end def seterror @error = true end def error? return @error end def exit if @error then Kernel.exit(1) else Kernel.exit(0) end end def execute(str=nil) send(str || action || 'main') exit end def debug(*str) initlogger ; @logger.debug(str) end def error(*str) initlogger ; @logger.error(str) end def initlogger if @forcenewline then @logger.report @forcenewline = false end end def logger @logger end def version # just a bit of playing with defs unless @versiondone then report(@banner.join(' - ')) @forcenewline = true @versiondone = true end end def help version # is nilled when already given @commandline.helpkeys.each do |k| if @commandline.help?(k) then kstr = ('--'+k).ljust(@commandline.helplength+2) message = @commandline.helptext(k) message = '' if message == CommandLine::NOHELP message = message.split(/\s*\n\s*/) loop do report("#{kstr} #{message.shift}") kstr = ' '*kstr.length break if message.length == 0 end end end end def option(key) @commandline.option(key) end def oneof(*key) @commandline.oneof(*key) end def globfiles(pattern='*',suffix=nil) @commandline.setarguments([pattern].flatten) if files = findfiles(suffix) then @commandline.setarguments(files) else @commandline.setarguments end end private def findfiles(suffix=nil) if @commandline.arguments.length>1 then return @commandline.arguments else pattern = @commandline.argument('first') pattern = '*' if pattern.empty? if suffix && ! pattern.match(/\..+$/o) then suffix = '.' + suffix pattern += suffix unless pattern =~ /#{suffix}$/ end # not {} safe pattern = '**/' + pattern if @commandline.option('recurse') files = Dir[pattern] if files && files.length>0 then return files else pattern = @commandline.argument('first') if FileTest.file?(pattern) then return [pattern] else report("no files match pattern #{pattern}") return nil end end end end def globbed(pattern,recurse=false) files = Array.new pattern.split(' ').each do |p| if recurse then if p =~ /^(.*)(\/.*?)$/i then p = $1 + '/**' + $2 else p = '**/' + p end p.gsub!(/[\\\/]+/, '/') end files.push(Dir.glob(p)) end files.flatten.sort do |a,b| pathcompare(a,b) end end def pathcompare(a,b) aa, bb = a.split('/'), b.split('/') if aa.length == bb.length then aa.each_index do |i| if aa[i]bb[i] then return +1 end end return 0 else return aa.length <=> bb.length end end end class CommandLine VALUE, FLAG = 1, 2 NOHELP = 'no arguments' def initialize(prefix='-') @registered = Array.new @options = Hash.new @unchecked = Hash.new @arguments = Array.new @original = ARGV.join(' ') @helptext = Hash.new @mandated = Hash.new @provided = Hash.new @prefix = prefix @actions = Array.new # The quotes in --switch="some value" get lost in ARGV, so we need to do some trickery here. @original = '' ARGV.each do |a| aa = a.strip.gsub(/^([#{@prefix}]+\w+\=)([^\"].*?\s+.*[^\"])$/) do $1 + "\"" + $2 + "\"" end @original += if @original.empty? then '' else ' ' end + aa end end def setarguments(args=[]) @arguments = if args then args else [] end end def register(option,shortcut,kind,default=false,action=false,helptext='') if kind == FLAG then @options[option] = default elsif not default then @options[option] = '' else @options[option] = default end @registered.push([option,shortcut,kind]) @mandated[option] = false # @provided[option] = false @helptext[option] = helptext @actions.push(option) if action end def registerflag(option,default=false,helptext='') if default.class == String then register(option,'',FLAG,false,false,default) else register(option,'',FLAG,false,false,helptext) end end def registervalue(option,default='',helptext='') register(option,'',VALUE,default,false,helptext) end def registeraction(option,helptext='') register(option,'',FLAG,false,true,helptext) end def registermandate(*option) [*option].each do |o| [o].each do |oo| @mandated[oo] = true end end end def actions a = @actions.delete_if do |t| ! option(t) end if a && a.length>0 then return a else return nil end end def action @actions.each do |t| return t if option(t) end return nil end def forgotten @mandated.keys.sort - @provided.keys.sort end def registerhelp(option,text='') @helptext['unknown'] = if text.empty? then option else text end end def helpkeys(option='.*') @helptext.keys.sort.grep(/#{option}/) end def helptext(option) @helptext.fetch(option,'') end def help?(option) @helptext[option] && ! @helptext[option].empty? end def helplength n = 0 @helptext.keys.each do |h| n = h.length if h.length>n end return n end def expand # todo : '' or false, depending on type # @options.clear # @arguments.clear dirtyvalue(@original).split(' ').each do |arg| case arg when /^[#{@prefix}][#{@prefix}](.+?)\=(.*?)$/ then locatedouble($1,$2) when /^[#{@prefix}][#{@prefix}](.+?)$/ then locatedouble($1,false) when /^[#{@prefix}](.)\=(.)$/ then locatesingle($1,$2) when /^[#{@prefix}](.+?)$/ then locateseries($1,false) when /^[\+\-]+/o then # do nothing else arguments.push(arg) end end @options or @unchecked or @arguments end def extend (str) @original = @original + ' ' + str end def replace (str) @original = str end def show # print "-- options --\n" @options.keys.sort.each do |key| print "option: #{key} -> #{@options[key]}\n" end # print "-- arguments --\n" @arguments.each_index do |key| print "argument: #{key} -> #{@arguments[key]}\n" end end def option(str,default=nil) if @options.key?(str) then @options[str] elsif default then default else @options[str] end end def checkedoption(str,default='') if @options.key?(str) then if @options[str].empty? then default else @options[str] end else default end end def foundoption(str,default='') str = str.split(',') if str.class == String str.each do |s| return str if @options.key?(str) end return default end def oneof(*key) [*key].flatten.compact.each do |k| return true if @options.key?(k) && @options[k] end return false end def setoption(str,value) @options[str] = value end def getoption(str,value='') # value ? @options[str] end def argument(n=0) if n.class == String then case n when 'first' then argument(0) when 'second' then argument(1) when 'third' then argument(2) else argument(0) end elsif @arguments[n] then @arguments[n] else '' end end # a few local methods, cannot be defined nested (yet) private def dirtyvalue(value) if value then value.gsub(/([\"\'])(.*?)\1/) do $2.gsub(/\s+/o, "\xFF") end else '' end end def cleanvalue(value) if value then # value.sub(/^([\"\'])(.*?)\1$/) { $2.gsub(/\xFF/o, ' ') } value.gsub(/\xFF/o, ' ') else '' end end def locatedouble(key, value) foundkey, foundkind = nil, nil @registered.each do |option, shortcut, kind| if option == key then foundkey, foundkind = option, kind break end end unless foundkey then @registered.each do |option, shortcut, kind| n = 0 begin re = /^#{key}/i rescue key = key.inspect.sub(/^\"(.*)\"$/) do $1 end re = /^#{key}/i ensure if option =~ re then case n when 0 foundkey, foundkind, n = option, kind, 1 when 1 # ambiguous matches, like --fix => --fixme --fixyou foundkey, foundkind = nil, nil break end end end end end if foundkey then @provided[foundkey] = true if foundkind == VALUE then @options[foundkey] = cleanvalue(value) else @options[foundkey] = true end else if value.class == FalseClass then @unchecked[key] = true else @unchecked[key] = cleanvalue(value) end end end def locatesingle(key, value) @registered.each do |option, shortcut, kind| if shortcut == key then @provided[option] = true @options[option] = if kind == VALUE then '' else cleanvalue(value) end break end end end def locateseries(series, value) series.each do |key| locatesingle(key,cleanvalue(value)) end end public attr_reader :arguments, :options, :original, :unchecked end # options = CommandLine.new # # options.register("filename", "f", CommandLine::VALUE) # options.register("request" , "r", CommandLine::VALUE) # options.register("verbose" , "v", CommandLine::FLAG) # # options.expand # options.extend(str) # options.show # # c = CommandLine.new # # c.registervalue('aaaa') # c.registervalue('test') # c.registervalue('zzzz') # # c.registerhelp('aaaa','some aaaa to enter') # c.registerhelp('test','some text to enter') # c.registerhelp('zzzz','some zzzz to enter') # # c.registermandate('test') # # c.expand # # class CommandLine # # def showhelp (banner,*str) # if helpkeys(*str).length>0 # print banner # helpkeys(*str).each do |h| # print helptext(h) + "\n" # end # true # else # false # end # end # # def showmandate(banner) # if forgotten.length>0 # print banner # forgotten.each do |f| # print helptext(f) + "\n" # end # true # else # false # end # end # # end # # c.showhelp("you can provide:\n\n") # c.showmandate("you also need to provide:\n\n") context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/state.rb0000644000175000017500000000332611244221744025213 0ustar norbertnorbertrequire 'digest/md5' # todo: register omissions per file class FileState def initialize @states = Hash.new @omiter = Hash.new end def reset @states.clear @omiter.clear end def register(filename,omit=nil) unless @states.key?(filename) then @states[filename] = Array.new @omiter[filename] = omit end @states[filename] << checksum(filename,@omiter[filename]) end def update(filename=nil) [filename,@states.keys].flatten.compact.uniq.each do |fn| register(fn) end end def inspect(filename=nil) result = '' [filename,@states.keys].flatten.compact.uniq.sort.each do |fn| if @states.key?(fn) then result += "#{fn}: #{@states[fn].inspect}\n" end end result end def changed?(filename) if @states.key?(filename) then n = @states[filename].length if n>1 then changed = @states[filename][n-1] != @states[filename][n-2] else changed = true end else changed = true end return changed end def checksum(filename,omit=nil) sum = '' begin if FileTest.file?(filename) && (data = IO.read(filename)) then data.gsub!(/\n.*?(#{[omit].flatten.join('|')}).*?\n/) do "\n" end if omit sum = Digest::MD5.hexdigest(data).upcase end rescue sum = '' end return sum end def stable? @states.keys.each do |s| return false if changed?(s) end return true end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpseremote.rb0000644000175000017500000000533710526734267026270 0ustar norbertnorbertrequire 'base/kpsefast' case ENV['KPSEMETHOD'] when /soap/o then require 'base/kpse/soap' when /drb/o then require 'base/kpse/drb' else require 'base/kpse/drb' end class KpseRemote @@port = ENV['KPSEPORT'] || 7000 @@method = ENV['KPSEMETHOD'] || 'drb' def KpseRemote::available? @@method && @@port end def KpseRemote::start_server(port=nil) kpse = KpseServer.new(port || @@port) kpse.start end def KpseRemote::start_client(port=nil) # keeps object in server kpseclient = KpseClient.new(port || @@port) kpseclient.start kpse = kpseclient.object tree = kpse.choose(KpseUtil::identify, KpseUtil::environment) [kpse, tree] end def KpseRemote::fetch(port=nil) # no need for defining methods but slower, send whole object kpseclient = KpseClient.new(port || @@port) kpseclient.start kpseclient.object.fetch(KpseUtil::identify, KpseUtil::environment) rescue nil end def initialize(port=nil) if KpseRemote::available? then begin @kpse, @tree = KpseRemote::start_client(port) rescue @kpse, @tree = nil, nil end else @kpse, @tree = nil, nil end end def progname=(value) @kpse.set(@tree,'progname',value) end def format=(value) @kpse.set(@tree,'format',value) end def engine=(value) @kpse.set(@tree,'engine',value) end def progname @kpse.get(@tree,'progname') end def format @kpse.get(@tree,'format') end def engine @kpse.get(@tree,'engine') end def load @kpse.load(KpseUtil::identify, KpseUtil::environment) end def okay? @kpse && @tree end def set(key,value) @kpse.set(@tree,key,value) end def load_cnf @kpse.load_cnf(@tree) end def load_lsr @kpse.load_lsr(@tree) end def expand_variables @kpse.expand_variables(@tree) end def expand_braces(str) clean_name(@kpse.expand_braces(@tree,str)) end def expand_path(str) clean_name(@kpse.expand_path(@tree,str)) end def expand_var(str) clean_name(@kpse.expand_var(@tree,str)) end def show_path(str) clean_name(@kpse.show_path(@tree,str)) end def var_value(str) clean_name(@kpse.var_value(@tree,str)) end def find_file(filename) clean_name(@kpse.find_file(@tree,filename)) end def find_files(filename,first=false) # dodo: each filename @kpse.find_files(@tree,filename,first) end private def clean_name(str) str.gsub(/\\/,'/') end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/tex.rb0000644000175000017500000025123512161703335024677 0ustar norbertnorbert#encoding: ASCII-8BIT # module : base/tex # copyright : PRAGMA Advanced Document Engineering # version : 2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # todo: # # - write systemcall for mpost to file so that it can be run faster # - use -8bit and -progname # # report ? require 'fileutils' require 'base/variables' require 'base/kpse' require 'base/system' require 'base/state' require 'base/pdf' require 'base/file' require 'base/ctx' require 'base/mp' class String def standard? begin self == 'standard' rescue false end end end # class String # def utf_bom? # self.match(/^\357\273\277/o).length>0 rescue false # end # end class Array def standard? begin self.include?('standard') rescue false end end def join_path self.join(File::PATH_SEPARATOR) end end class TEX # The make-part of this class was made on a rainy day while listening # to "10.000 clowns on a rainy day" by Jan Akkerman. Unfortunately the # make method is not as swinging as this live cd. include Variables @@texengines = Hash.new @@mpsengines = Hash.new @@backends = Hash.new @@mappaths = Hash.new @@runoptions = Hash.new @@draftoptions = Hash.new @@synctexcoptions = Hash.new @@texformats = Hash.new @@mpsformats = Hash.new @@prognames = Hash.new @@texmakestr = Hash.new @@texprocstr = Hash.new @@mpsmakestr = Hash.new @@mpsprocstr = Hash.new @@texmethods = Hash.new @@mpsmethods = Hash.new @@pdftex = 'pdftex' @@platformslash = if System.unix? then "\\\\" else "\\" end ['tex','etex','pdftex','standard'] .each do |e| @@texengines[e] = 'pdftex' end ['aleph','omega'] .each do |e| @@texengines[e] = 'aleph' end ['xetex'] .each do |e| @@texengines[e] = 'xetex' end ['petex'] .each do |e| @@texengines[e] = 'petex' end ['metapost','mpost', 'standard'] .each do |e| @@mpsengines[e] = 'mpost' end ['pdftex','pdf','pdftex','standard'] .each do |b| @@backends[b] = 'pdftex' end ['dvipdfmx','dvipdfm','dpx','dpm'] .each do |b| @@backends[b] = 'dvipdfmx' end ['xetex','xtx'] .each do |b| @@backends[b] = 'xetex' end ['petex'] .each do |b| @@backends[b] = 'dvipdfmx' end ['aleph'] .each do |b| @@backends[b] = 'dvipdfmx' end ['dvips','ps','dvi'] .each do |b| @@backends[b] = 'dvips' end ['dvipsone'] .each do |b| @@backends[b] = 'dvipsone' end ['acrobat','adobe','distiller'] .each do |b| @@backends[b] = 'acrobat' end ['xdv','xdv2pdf'] .each do |b| @@backends[b] = 'xdv2pdf' end ['tex','standard'] .each do |b| @@mappaths[b] = 'dvips' end ['pdftex'] .each do |b| @@mappaths[b] = 'pdftex' end ['aleph','omega','xetex','petex'] .each do |b| @@mappaths[b] = 'dvipdfmx' end ['dvipdfm', 'dvipdfmx', 'xdvipdfmx'] .each do |b| @@mappaths[b] = 'dvipdfmx' end ['xdv','xdv2pdf'] .each do |b| @@mappaths[b] = 'dvips' end # todo norwegian (no) ['plain'] .each do |f| @@texformats[f] = 'plain' end ['cont-en','en','english','context','standard'].each do |f| @@texformats[f] = 'cont-en.mkii' end ['cont-nl','nl','dutch'] .each do |f| @@texformats[f] = 'cont-nl.mkii' end ['cont-de','de','german'] .each do |f| @@texformats[f] = 'cont-de.mkii' end ['cont-it','it','italian'] .each do |f| @@texformats[f] = 'cont-it.mkii' end ['cont-fr','fr','french'] .each do |f| @@texformats[f] = 'cont-fr.mkii' end ['cont-cs','cs','cont-cz','cz','czech'] .each do |f| @@texformats[f] = 'cont-cs.mkii' end ['cont-ro','ro','romanian'] .each do |f| @@texformats[f] = 'cont-ro.mkii' end ['cont-gb','gb','cont-uk','uk','british'] .each do |f| @@texformats[f] = 'cont-gb.mkii' end ['mptopdf'] .each do |f| @@texformats[f] = 'mptopdf' end ['latex'] .each do |f| @@texformats[f] = 'latex.ltx' end ['plain','mpost'] .each do |f| @@mpsformats[f] = 'mpost' end ['metafun','context','standard'] .each do |f| @@mpsformats[f] = 'metafun' end ['pdftex','aleph','omega','petex','xetex'] .each do |p| @@prognames[p] = 'context' end ['mpost'] .each do |p| @@prognames[p] = 'metafun' end ['latex','pdflatex'] .each do |p| @@prognames[p] = 'latex' end ['plain','default','standard','mptopdf'] .each do |f| @@texmethods[f] = 'plain' end ['cont-en','cont-en.mkii', 'cont-nl','cont-nl.mkii', 'cont-de','cont-de.mkii', 'cont-it','cont-it.mkii', 'cont-fr','cont-fr.mkii', 'cont-cs','cont-cs.mkii', 'cont-ro','cont-ro.mkii', 'cont-gb','cont-gb.mkii'] .each do |f| @@texmethods[f] = 'context' end ['latex','latex.ltx','pdflatex'] .each do |f| @@texmethods[f] = 'latex' end # untested ['plain','default','standard'] .each do |f| @@mpsmethods[f] = 'plain' end ['metafun'] .each do |f| @@mpsmethods[f] = 'metafun' end @@texmakestr['plain'] = @@platformslash + "dump" @@mpsmakestr['plain'] = @@platformslash + "dump" ['cont-en','cont-nl','cont-de','cont-it', 'cont-fr','cont-cs','cont-ro','cont-gb', 'cont-pe','cont-xp'] .each do |f| @@texprocstr[f] = @@platformslash + "emergencyend" end @@runoptions['aleph'] = ['--8bit'] @@runoptions['mpost'] = ['--8bit'] @@runoptions['pdftex'] = ['--8bit'] # @@runoptions['petex'] = [] @@runoptions['xetex'] = ['--8bit','-output-driver="xdvipdfmx -E -d 4 -V 5"'] @@draftoptions['pdftex'] = ['--draftmode'] @@synctexcoptions['pdftex'] = ['--synctex=1'] @@synctexcoptions['xetex'] = ['--synctex=1'] @@mainbooleanvars = [ 'batchmode', 'nonstopmode', 'fast', 'final', 'paranoid', 'notparanoid', 'nobanner', 'once', 'allpatterns', 'draft', 'nompmode', 'nomprun', 'automprun', 'combine', 'nomapfiles', 'local', 'arrange', 'noarrange', 'forcexml', 'foxet', 'alpha', 'beta', 'mpyforce', 'forcempy', 'forcetexutil', 'texutil', 'globalfile', 'autopath', 'purge', 'purgeall', 'keep', 'autopdf', 'xpdf', 'simplerun', 'verbose', 'nooptionfile', 'nobackend', 'noctx', 'utfbom', 'mkii','mkiv', 'synctex', ] @@mainstringvars = [ 'modefile', 'result', 'suffix', 'response', 'path', 'filters', 'usemodules', 'environments', 'separation', 'setuppath', 'arguments', 'input', 'output', 'randomseed', 'modes', 'mode', 'filename', 'ctxfile', 'printformat', 'paperformat', 'paperoffset', 'timeout', 'passon', 'pdftitle' ] @@mainstandardvars = [ 'mainlanguage', 'bodyfont', 'language' ] @@mainknownvars = [ 'engine', 'distribution', 'texformats', 'mpsformats', 'progname', 'interface', 'runs', 'backend' ] @@extrabooleanvars = [] @@extrastringvars = [] def booleanvars [@@mainbooleanvars,@@extrabooleanvars].flatten.uniq end def stringvars [@@mainstringvars,@@extrastringvars].flatten.uniq end def standardvars [@@mainstandardvars].flatten.uniq end def knownvars [@@mainknownvars].flatten.uniq end def allbooleanvars [@@mainbooleanvars,@@extrabooleanvars].flatten.uniq end def allstringvars [@@mainstringvars,@@extrastringvars,@@mainstandardvars,@@mainknownvars].flatten.uniq end def setextrastringvars(vars) # @@extrastringvars << vars -- problems in 1.9 @@extrastringvars = [@@extrastringvars,vars].flatten end def setextrabooleanvars(vars) # @@extrabooleanvars << vars -- problems in 1.9 @@extrabooleanvars = [@@extrabooleanvars,vars].flatten end # def jobvariables(names=nil) # if [names ||[]].flatten.size == 0 then # names = [allbooleanvars,allstringvars].flatten # end # data = Hash.new # names.each do |name| # if allbooleanvars.include?(name) then # data[name] = if getvariable(name) then "yes" else "no" end # else # data[name] = getvariable(name) # end # end # data # end # def setjobvariables(names=nil) # assignments = Array.new # jobvariables(names).each do |k,v| # assignments << "#{k}=\{#{v}\}" # end # "\setvariables[exe][#{assignments.join(", ")}]" # end @@temprunfile = 'texexec' @@temptexfile = 'texexec.tex' def initialize(logger=nil) if @logger = logger then def report(str='') @logger.report(str) end else def report(str='') puts(str) end end @cleanups = Array.new @variables = Hash.new @startuptime = Time.now # options booleanvars.each do |k| setvariable(k,false) end stringvars.each do |k| setvariable(k,'') end standardvars.each do |k| setvariable(k,'standard') end setvariable('distribution', Kpse.distribution) setvariable('texformats', defaulttexformats) setvariable('mpsformats', defaultmpsformats) setvariable('progname', 'standard') # or '' setvariable('interface', 'standard') setvariable('engine', 'standard') # replaced by tex/mpsengine setvariable('backend', 'pdftex') setvariable('runs', '8') setvariable('randomseed', rand(1440).to_s) # we want the same seed for one run # files setvariable('files', []) # defaults setvariable('texengine', 'standard') setvariable('mpsengine', 'standard') setvariable('backend', 'standard') setvariable('error', '') end def error? not getvariable('error').empty? end def runtime Time.now - @startuptime end def reportruntime report("runtime: #{runtime}") end def runcommand(something) command = [something].flatten.join(' ') report("running: #{command}") if getvariable('verbose') system(command) end def inspect(name=nil) if ! name || name.empty? then name = [booleanvars,stringvars,standardvars,knownvars] end str = '' # allocate [name].flatten.each do |n| if str = getvariable(n) then str = str.join(" ") if str.class == Array unless (str.class == String) && str.empty? then report("option '#{n}' is set to '#{str}'") end end end end def tempfilename(suffix='') @@temprunfile + if suffix.empty? then '' else ".#{suffix}" end end def cleanup @cleanups.each do |name| begin File.delete(name) if FileTest.file?(name) rescue report("unable to delete #{name}") end end end def cleanuptemprunfiles begin Dir.glob("#{@@temprunfile}*").each do |name| if File.file?(name) && (File.splitname(name)[1] !~ /(pdf|dvi)/o) then File.delete(name) rescue false end end rescue end # ['mpgraph.mp'].each do |file| # (File.delete(file) if (FileTest.size?(file) rescue 10) < 10) rescue false # end end def backends() @@backends.keys.sort end def texengines() @@texengines.keys.sort end def mpsengines() @@mpsengines.keys.sort end def texformats() @@texformats.keys.sort end def mpsformats() @@mpsformats.keys.sort end def defaulttexformats() ['en','nl','mptopdf'] end # def defaultmpsformats() ['metafun'] end # no longer formats def defaultmpsformats() [] end def texmakeextras(format) @@texmakestr[format] || '' end def mpsmakeextras(format) @@mpsmakestr[format] || '' end def texprocextras(format) @@texprocstr[format] || '' end def mpsprocextras(format) @@mpsprocstr[format] || '' end def texmethod(format) @@texmethods[str] || @@texmethods['standard'] end def mpsmethod(format) @@mpsmethods[str] || @@mpsmethods['standard'] end def runoptions(engine) options = if getvariable('draft') then @@draftoptions[engine] else [] end options = if getvariable('synctex') then @@synctexcoptions[engine] else [] end begin if str = getvariable('passon') then options = [options,str.split(' ')].flatten end rescue end if @@runoptions.key?(engine) then [options,@@runoptions[engine]].flatten.join(' ') else options.join(' ') end end # private def cleanuplater(name) begin @cleanups.push(File.expand_path(name)) rescue @cleanups.push(name) end end def openedfile(name) begin f = File.open(name,'w') rescue report("file '#{File.expand_path(name)}' cannot be opened for writing") return nil else cleanuplater(name) if f return f end end def prefixed(format,engine) # format case engine when /etex|pdftex|aleph|xetex/io then "*#{format}" else format end end def quoted(str) if str =~ /^[^\"].* / then "\"#{str}\"" else str end end def getarrayvariable(str='') str = getvariable(str) if str.class == String then str.split(',') else str.flatten end end def validsomething(str,something,type=nil) if str then list = [str].flatten.collect do |s| if something[s] then something[s] elsif type && s =~ /\.#{type}$/ then s else nil end end .compact.uniq if list.length>0 then if str.class == String then list.first else list end else false end else false end end def validtexformat(str) validsomething(str,@@texformats,'tex') || validsomething(str,@@texformats,'mkii') end def validmpsformat(str) validsomething(str,@@mpsformats,'mp' ) end def validtexengine(str) validsomething(str,@@texengines,'pdftex') end def validmpsengine(str) validsomething(str,@@mpsengines,'mpost' ) end def validtexmethod(str) [validsomething(str,@@texmethods)].flatten.first end def validmpsmethod(str) [validsomething(str,@@mpsmethods)].flatten.first end def validbackend(str) if str && @@backends.key?(str) then @@backends[str] else @@backends['standard'] end end def validprogname(str) if str then [str].flatten.each do |s| s = s.sub(/\.\S*/,"") return @@prognames[s] if @@prognames.key?(s) end return str[0].sub(/\.\S*/,"") else return nil end end # we no longer support the & syntax def formatflag(engine=nil,format=nil) case getvariable('distribution') when 'standard' then prefix = "--fmt" when /web2c/io then prefix = web2cformatflag(engine) when /miktex/io then prefix = "--undump" else return "" end if format then "#{prefix}=#{format.sub(/\.\S+$/,"")}" else prefix end end def web2cformatflag(engine=nil) # funny that we've standardized on the fmt suffix (at the cost of # upward compatibility problems) but stuck to the bas/mem/fmt flags if engine then case validmpsengine(engine) when /mpost/ then "-mem" when /mfont/ then "-bas" else "-fmt" end else "-fmt" end end def prognameflag(progname=nil) case getvariable('distribution') when 'standard' then prefix = "-progname" when /web2c/io then prefix = "-progname" when /miktex/io then prefix = "-alias" else return "" end if progname and not progname.empty? then "#{prefix}=#{progname}" else prefix end end def iniflag() # should go to kpse and kpse should become texenv if Kpse.miktex? then "-initialize" else "--ini" end end # # obsolete # # def tcxflag(engine) # if @@tcxflag[engine] then # file = "natural.tcx" # if Kpse.miktex? then # "-tcx=#{file}" # else # "-translate-file=#{file}" # end # else # "" # end # end def filestate(file) File.mtime(file).strftime("%d/%m/%Y %H:%M:%S") end # will go to context/process context/listing etc def contextversion # ook elders gebruiken filename = Kpse.found('context.mkii') version = 'unknown' begin if FileTest.file?(filename) && IO.read(filename).match(/\\contextversion\{(\d+\.\d+\.\d+.*?)\}/) then version = $1 end rescue end return version end # we need engine methods def makeformats checktestversion report("using search method '#{Kpse.searchmethod}'") if getvariable('fast') then report('using existing database') else report('updating file database') Kpse.update # obsolete here end # goody if getvariable('texformats') == 'standard' then setvariable('texformats',[getvariable('interface')]) unless getvariable('interface').empty? end # prepare texformats = validtexformat(getarrayvariable('texformats')) mpsformats = validmpsformat(getarrayvariable('mpsformats')) texengine = validtexengine(getvariable('texengine')) mpsengine = validmpsengine(getvariable('mpsengine')) # save current path savedpath = Dir.getwd # generate tex formats unless texformats || mpsformats then report('provide valid format (name.tex, name.mp, ...) or format id (metafun, en, nl, ...)') setvariable('error','no format specified') end if texformats && texengine then report("using tex engine #{texengine}") texformatpath = if getvariable('local') then '.' else Kpse.formatpath(texengine,true) end # can be empty, to do report("using tex format path #{texformatpath}") Dir.chdir(texformatpath) rescue false if FileTest.writable?(texformatpath) then # from now on we no longer support this; we load # all patterns and if someone wants another # interface language ... cook up a fmt or usr file # # if texformats.length > 0 then # makeuserfile # makeresponsefile # end texformats.each do |texformat| report("generating tex format #{texformat}") progname = validprogname([getvariable('progname'),texformat,texengine]) runcommand([quoted(texengine),prognameflag(progname),iniflag,prefixed(texformat,texengine),texmakeextras(texformat)]) end else report("unable to make format due to lack of permissions") texformatpath = '' setvariable('error','no permissions to write') end if not mpsformats then # we want metafun to be in sync setvariable('mpsformats',defaultmpsformats) mpsformats = validmpsformat(getarrayvariable('mpsformats')) end else texformatpath = '' end # generate mps formats if mpsformats && mpsengine then report("using mp engine #{mpsengine}") mpsformatpath = if getvariable('local') then '.' else Kpse.formatpath(mpsengine,false) end report("using mps format path #{mpsformatpath}") Dir.chdir(mpsformatpath) rescue false if FileTest.writable?(mpsformatpath) then mpsformats.each do |mpsformat| report("generating mps format #{mpsformat}") progname = validprogname([getvariable('progname'),mpsformat,mpsengine]) if not runcommand([quoted(mpsengine),prognameflag(progname),iniflag,runoptions(mpsengine),mpsformat,mpsmakeextras(mpsformat)]) then setvariable('error','no format made') end end else report("unable to make format due to lack of permissions") mpsformatpath = '' setvariable('error','file permission problem') end else mpsformatpath = '' end # check for problems report("") report("tex engine path: #{texformatpath}") unless texformatpath.empty? report("mps engine path: #{mpsformatpath}") unless mpsformatpath.empty? report("") [['fmt','tex'],['mem','mps']].each do |f| [[texformatpath,'global'],[mpsformatpath,'global'],[savedpath,'current']].each do |p| begin Dir.chdir(p[0]) rescue else Dir.glob("*.#{f[0]}").each do |file| report("#{f[1]}: #{filestate(file)} > #{File.expand_path(file)} (#{File.size(file)})") end end end end # to be sure, go back to current path begin Dir.chdir(savedpath) rescue end # finalize cleanup report("") reportruntime end def checkcontext # todo : report texmf.cnf en problems # basics report("current distribution: #{Kpse.distribution}") report("context source date: #{contextversion}") formatpaths = Kpse.formatpaths globpattern = "**/{#{formatpaths.join(',')}}/*/*.{fmt,efmt,ofmt,xfmt,mem}" report("format path: #{formatpaths.join(' ')}") # utilities report('start of analysis') results = Array.new # ['texexec','texutil','ctxtools'].each do |program| ['texexec'].each do |program| result = `texmfstart #{program} --help` result.sub!(/.*?(#{program}[^\n]+)\n.*/mi) do $1 end results.push("#{result}") end # formats cleanuptemprunfiles if formats = Dir.glob(globpattern) then formats.sort.each do |name| cleanuptemprunfiles if f = open(tempfilename('tex'),'w') then # kind of aleph-run-out-of-par safe f << "\\starttext\n" f << " \\relax test \\relax\n" f << "\\stoptext\n" f << "\\endinput\n" f.close if FileTest.file?(tempfilename('tex')) then format = File.basename(name) engine = if name =~ /(pdftex|aleph|xetex)[\/\\]#{format}/ then $1 else '' end if engine.empty? then engineflag = "" else engineflag = "--engine=#{$1}" end case format when /cont\-([a-z]+)/ then interface = $1.sub(/cont\-/,'') results.push('') results.push("testing interface #{interface}") flags = ['--noctx','--process','--batch','--once',"--interface=#{interface}",engineflag] # result = Kpse.pipescript('texexec',tempfilename,flags) result = runtexexec([tempfilename], flags, 1) if FileTest.file?("#{@@temprunfile}.log") then logdata = IO.read("#{@@temprunfile}.log") if logdata =~ /^\s*This is (.*?)[\s\,]+(.*?)$/moi then if validtexengine($1.downcase) then results.push("#{$1} #{$2.gsub(/\(format.*$/,'')}".strip) end end if logdata =~ /^\s*(ConTeXt)\s+(.*int:\s+[a-z]+.*?)\s*$/moi then results.push("#{$1} #{$2}".gsub(/\s+/,' ').strip) end else results.push("format #{format} does not work") end when /metafun/ then # todo when /mptopdf/ then # todo end else results.push("error in creating #{tempfilename('tex')}") end end cleanuptemprunfiles end end report('end of analysis') report results.each do |line| report(line) end cleanuptemprunfiles end private def makeuserfile language = getvariable('language') mainlanguage = getvariable('mainlanguage') bodyfont = getvariable('bodyfont') if f = openedfile("cont-fmt.tex") then f << "\\unprotect\n" case language when 'all' then f << "\\preloadallpatterns\n" when '' then f << "% no language presets\n" when 'standard' f << "% using defaults\n" else languages = language.split(',') languages.each do |l| f << "\\installlanguage[\\s!#{l}][\\c!state=\\v!start]\n" end mainlanguage = languages.first end unless mainlanguage == 'standard' then f << "\\setupcurrentlanguage[\\s!#{mainlanguage}]\n"; end unless bodyfont == 'standard' then # ~ will become obsolete when lmr is used f << "\\definetypescriptsynonym[cmr][#{bodyfont}]" # ~ is already obsolete for some years now f << "\\definefilesynonym[font-cmr][font-#{bodyfont}]\n" end f << "\\protect\n" f << "\\endinput\n" f.close end end def makeresponsefile interface = getvariable('interface') if f = openedfile("mult-def.tex") then case interface when 'standard' then f << "% using default response interface" else f << "\\def\\currentresponses\{#{interface}\}\n" end f << "\\endinput\n" f.close end end private # will become base/context @@preamblekeys = [ ['tex','texengine'], ['engine','texengine'], ['program','texengine'], # ['translate','tcxfilter'], # ['tcx','tcxfilter'], ['output','backend'], ['mode','mode'], ['ctx','ctxfile'], ['version','contextversion'], ['format','texformats'], ['interface','texformats'], ] @@re_utf_bom = /^\357\273\277/o def scantexpreamble(filename) begin if FileTest.file?(filename) and tex = File.open(filename,'rb') then bomdone = false while str = tex.gets and str.chomp! do unless bomdone then if str.sub!(@@re_utf_bom, '') report("utf mode forced (bom found)") setvariable('utfbom',true) end bomdone = true end if str =~ /^\%\s*(.*)/o then # we only accept lines with key=value pairs vars, ok = Hash.new, true $1.split(/\s+/o).each do |s| k, v = s.split('=') if k && v then vars[k] = v else ok = false break end end if ok then # we have a valid line @@preamblekeys.each do |v| setvariable(v[1],vars[v[0]]) if vars.key?(v[0]) && vars[v[0]] end if getvariable('given.backend') == "standard" or getvariable('given.backend') == "" then setvariable('backend',@@backends[getvariable('texengine')] || 'standard') end break end else break end end tex.close end rescue # well, let's not worry too much end end def scantexcontent(filename) if FileTest.file?(filename) and tex = File.open(filename,'rb') then while str = tex.gets do case str.chomp when /^\%/o then # next # when /\\(starttekst|stoptekst|startonderdeel|startdocument|startoverzicht)/o then when /\\(starttekst|stoptekst|startonderdeel|startoverzicht)/o then setvariable('texformats','nl') ; break when /\\(stelle|verwende|umgebung|benutze)/o then setvariable('texformats','de') ; break when /\\(stel|gebruik|omgeving)/o then setvariable('texformats','nl') ; break when /\\(use|setup|environment)/o then setvariable('texformats','en') ; break when /\\(usa|imposta|ambiente)/o then setvariable('texformats','it') ; break when /(height|width|style)=/o then setvariable('texformats','en') ; break when /(hoehe|breite|schrift)=/o then setvariable('texformats','de') ; break when /(hoogte|breedte|letter)=/o then setvariable('texformats','nl') ; break when /(altezza|ampiezza|stile)=/o then setvariable('texformats','it') ; break when /externfiguur/o then setvariable('texformats','nl') ; break when /externalfigure/o then setvariable('texformats','en') ; break when /externeabbildung/o then setvariable('texformats','de') ; break when /figuraesterna/o then setvariable('texformats','it') ; break end end tex.close end end private # will become base/context def pushresult(filename,resultname) fname = File.unsuffixed(filename) rname = File.unsuffixed(resultname) if ! rname.empty? && (rname != fname) then report("outputfile #{rname}") ['tuo','tuc','log','dvi','pdf'].each do |s| File.silentrename(File.suffixed(fname,s),File.suffixed('texexec',s)) end ['tuo','tuc'].each do |s| File.silentrename(File.suffixed(rname,s),File.suffixed(fname,s)) if FileTest.file?(File.suffixed(rname,s)) end end end def popresult(filename,resultname) fname = File.unsuffixed(filename) rname = File.unsuffixed(resultname) if ! rname.empty? && (rname != fname) then report("renaming #{fname} to #{rname}") ['tuo','tuc','log','dvi','pdf'].each do |s| File.silentrename(File.suffixed(fname,s),File.suffixed(rname,s)) end report("restoring #{fname}") unless $fname == 'texexec' then ['tuo','tuc','log','dvi','pdf'].each do |s| File.silentrename(File.suffixed('texexec',s),File.suffixed(fname,s)) end end end end def makestubfile(rawname,rawbase,forcexml=false) if tmp = openedfile(File.suffixed(rawbase,'run')) then tmp << "\\starttext\n" if forcexml then # tmp << checkxmlfile(rawname) if getvariable('mkiv') then tmp << "\\xmlprocess{\\xmldocument}{#{rawname}}{}\n" else tmp << "\\processXMLfilegrouped{#{rawname}}\n" end else tmp << "\\processfile{#{rawname}}\n" end tmp << "\\stoptext\n" tmp.close return "run" else return File.splitname(rawname)[1] end end # def checkxmlfile(rawname) # tmp = '' # if FileTest.file?(rawname) && (xml = File.open(rawname)) then # xml.each do |line| # case line # when /<\?context\-directive\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*?)\s*\?>/o then # category, key, value, rest = $1, $2, $3, $4 # case category # when 'job' then # case key # when 'control' then # setvariable(value,if rest.empty? then true else rest end) # when 'mode', 'modes' then # tmp << "\\enablemode[#{value}]\n" # when 'stylefile', 'environment' then # tmp << "\\environment #{value}\n" # when 'module' then # tmp << "\\usemodule[#{value}]\n" # when 'interface' then # contextinterface = value # when 'ctxfile' then # setvariable('ctxfile', value) # report("using source driven ctxfile #{value}") # end # end # when /<[a-z]+/io then # beware of order, first pi test # break # end # end # xml.close # end # return tmp # end def extendvariable(name,value) set = getvariable(name).split(',') set << value str = set.uniq.join(',') setvariable(name,str) end def checkxmlfile(rawname) if FileTest.file?(rawname) && (xml = File.open(rawname,'rb')) then xml.each do |line| case line when /<\?context\-directive\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*?)\s*\?>/o then category, key, value, rest = $1, $2, $3, $4 case category when 'job' then case key when 'control' then setvariable(value,if rest.empty? then true else rest end) when /^(mode)(s|)$/ then extendvariable('modes',value) when /^(stylefile|environment)(s|)$/ then extendvariable('environments',value) when /^(use|)(module)(s|)$/ then extendvariable('usemodules',value) when /^(filter)(s|)$/ then extendvariable('filters',value) when 'interface' then contextinterface = value when 'ctxfile' then setvariable('ctxfile', value) report("using source driven ctxfile #{value}") end end when /<[a-z]+/io then # beware of order, first pi test break end end xml.close end end end class TEX def timedrun(delay, &block) delay = delay.to_i rescue 0 if delay > 0 then begin report("job started with timeout '#{delay}'") timeout(delay) do yield block end rescue TimeoutError report("job aborted due to timeout '#{delay}'") setvariable('error','timeout') rescue report("job aborted due to error") setvariable('error','fatal error') else report("job finished within timeout '#{delay}'") end else yield block end end def processtex # much to do: mp, xml, runs etc setvariable('texformats',[getvariable('interface')]) unless getvariable('interface').empty? getarrayvariable('files').each do |filename| setvariable('filename',filename) report("processing document '#{filename}'") timedrun(getvariable('timeout')) do processfile end end reportruntime end def processmptex getarrayvariable('files').each do |filename| setvariable('filename',filename) report("processing graphic '#{filename}'") runtexmp(filename) end reportruntime end private def load_map_files(filename) # tui basename # c \usedmapfile{=}{lm-texnansi} begin str = "" IO.read(filename).scan(/^c\s+\\usedmapfile\{(.*?)\}\{(.*?)\}\s*$/o) do str << "\\loadmapfile[#{$2}.map]\n" end rescue return "" else return str end end public def processmpgraphic getarrayvariable('files').each do |filename| setvariable('filename',filename) report("processing graphic '#{filename}'") runtexmp(filename,'',false) # no purge mapspecs = load_map_files(File.suffixed(filename,'temp','tui')) unless getvariable('keep') then # not enough: purge_mpx_files(filename) Dir.glob(File.suffixed(filename,'temp*','*')).each do |fname| File.delete(fname) unless File.basename(filename) == File.basename(fname) end end begin data = IO.read(File.suffixed(filename,'log')) basename = filename.sub(/\.mp$/, '') if data =~ /output files* written\:\s*(.*)$/moi then files, number, range, list = $1.split(/\s+/), 0, false, [] files.each do |fname| if fname =~ /^.*\.(\d+)$/ then if range then (number+1 .. $1.to_i).each do |i| list << i end range = false else number = $1.to_i list << number end elsif fname =~ /\.\./ then range = true else range = false next end end begin if getvariable('combine') then fullname = "#{basename}.#{number}" File.open("texexec.tex",'w') do |f| f << "\\setupoutput[pdftex]\n" f << "\\setupcolors[state=start]\n" f << mapspecs f << "\\starttext\n" list.each do |number| f << "\\startTEXpage\n" f << "\\convertMPtoPDF{#{fullname}}{1}{1}" f << "\\stopTEXpage\n" end f << "\\stoptext\n" end report("converting graphic '#{fullname}'") runtex("texexec.tex") pdffile = File.suffixed(basename,'pdf') File.silentrename("texexec.pdf",pdffile) report ("#{basename}.* converted to #{pdffile}") else list.each do |number| begin fullname = "#{basename}.#{number}" File.open("texexec.tex",'w') do |f| f << "\\setupoutput[pdftex]\n" f << "\\setupcolors[state=start]\n" f << mapspecs f << "\\starttext\n" f << "\\startTEXpage\n" f << "\\convertMPtoPDF{#{fullname}}{1}{1}" f << "\\stopTEXpage\n" f << "\\stoptext\n" end report("converting graphic '#{fullname}'") runtex("texexec.tex") if files.length>1 then pdffile = File.suffixed(basename,number.to_s,'pdf') else pdffile = File.suffixed(basename,'pdf') end File.silentrename("texexec.pdf",pdffile) report ("#{fullname} converted to #{pdffile}") end end end rescue report ("error when converting #{fullname} (#{$!})") end end rescue report("error in converting #{filename}") end end reportruntime end def processmpstatic if filename = getvariable('filename') then filename += ".mp" unless filename =~ /\..+?$/ if FileTest.file?(filename) then begin data = IO.read(filename) File.open("texexec.tex",'w') do |f| f << "\\setupoutput[pdftex]\n" f << "\\setupcolors[state=start]\n" data.sub!(/^%mpenvironment\:\s*(.*?)$/moi) do f << $1 "\n" end f << "\\starttext\n" f << "\\startMPpage\n" f << data.gsub(/end\.*\s*$/m, '') # a bit of a hack f << "\\stopMPpage\n" f << "\\stoptext\n" end report("converting static '#{filename}'") runtex("texexec.tex") pdffile = File.suffixed(filename,'pdf') File.silentrename("texexec.pdf",pdffile) report ("#{filename} converted to #{pdffile}") rescue report("error in converting #{filename} (#{$!}") end end end reportruntime end def processmpxtex getarrayvariable('files').each do |filename| setvariable('filename',filename) report("processing text of graphic '#{filename}'") processmpx(filename,false,true,true) end reportruntime end def deleteoptionfile(rawname) ['top','top.keep'].each do |suffix| begin File.delete(File.suffixed(rawname,suffix)) rescue end end end def makeoptionfile(rawname, jobname, jobsuffix, finalrun, fastdisabled, kindofrun, currentrun=1) begin # jobsuffix = orisuffix if topname = File.suffixed(rawname,'top') and opt = File.open(topname,'w') then report("writing option file #{topname}") # local handies opt << "\% #{topname}\n" opt << "\\unprotect\n" # # feedback and basic control # if getvariable('batchmode') then opt << "\\batchmode\n" end if getvariable('nonstopmode') then opt << "\\nonstopmode\n" end if getvariable('paranoid') then opt << "\\def\\maxreadlevel{1}\n" end if getvariable('nomapfiles') then opt << "\\disablemapfiles\n" end if getvariable('nompmode') || getvariable('nomprun') || getvariable('automprun') then opt << "\\runMPgraphicsfalse\n" end if getvariable('utfbom') then opt << "\\enableregime[utf]" end progname = validprogname(['metafun']) # [getvariable('progname'),mpsformat,mpsengine] opt << "\\def\\MPOSTformatswitch\{#{prognameflag(progname)} #{formatflag('mpost')}=\}\n" # # process info # opt << "\\setupsystem[\\c!n=#{kindofrun},\\c!m=#{currentrun}]\n" if (str = File.unixfied(getvariable('modefile'))) && ! str.empty? then opt << "\\readlocfile{#{str}}{}{}\n" end if (str = File.unixfied(getvariable('result'))) && ! str.empty? then opt << "\\setupsystem[file=#{str}]\n" elsif (str = getvariable('suffix')) && ! str.empty? then opt << "\\setupsystem[file=#{jobname}.#{str}]\n" end opt << "\\setupsystem[\\c!method=2]\n" # 1=oldtexexec 2=newtexexec (obsolete) opt << "\\setupsystem[\\c!type=#{Tool.ruby_platform()}]\n" if (str = File.unixfied(getvariable('path'))) && ! str.empty? then opt << "\\usepath[#{str}]\n" unless str.empty? end if (str = getvariable('mainlanguage').downcase) && ! str.empty? && ! str.standard? then opt << "\\setuplanguage[#{str}]\n" end if (str = getvariable('arguments')) && ! str.empty? then opt << "\\setupenv[#{str}]\n" end if (str = getvariable('setuppath')) && ! str.empty? then opt << "\\setupsystem[\\c!directory=\{#{str}\}]\n" end if (str = getvariable('randomseed')) && ! str.empty? then report("using randomseed #{str}") opt << "\\setupsystem[\\c!random=#{str}]\n" end if (str = getvariable('input')) && ! str.empty? then opt << "\\setupsystem[inputfile=#{str}]\n" else opt << "\\setupsystem[inputfile=#{rawname}]\n" end # # modes # # we handle both "--mode" and "--modes", else "--mode" is mapped onto "--modefile" if (str = getvariable('modes')) && ! str.empty? then opt << "\\enablemode[#{str}]\n" end if (str = getvariable('mode')) && ! str.empty? then opt << "\\enablemode[#{str}]\n" end # # options # opt << "\\startsetups *runtime:options\n" if str = validbackend(getvariable('backend')) then opt << "\\setupoutput[#{str}]\n" elsif str = validbackend(getvariable('output')) then opt << "\\setupoutput[#{str}]\n" end if getvariable('color') then opt << "\\setupcolors[\\c!state=\\v!start]\n" end if (str = getvariable('separation')) && ! str.empty? then opt << "\\setupcolors[\\c!split=#{str}]\n" end if (str = getvariable('paperformat')) && ! str.empty? && ! str.standard? then if str =~ /^([a-z]+\d+)([a-z]+\d+)$/io then # A5A4 A4A3 A2A1 ... opt << "\\setuppapersize[#{$1.upcase}][#{$2.upcase}]\n" else # ...*... pf = str.upcase.split(/[x\*]/o) pf << pf[0] if pf.size == 1 opt << "\\setuppapersize[#{pf[0]}][#{pf[1]}]\n" end end if (str = getvariable('background')) && ! str.empty? then opt << "\\defineoverlay[whatever][{\\externalfigure[#{str}][\\c!factor=\\v!max]}]\n" opt << "\\setupbackgrounds[\\v!page][\\c!background=whatever]\n" end if getvariable('centerpage') then opt << "\\setuplayout[\\c!location=\\v!middle,\\c!marking=\\v!on]\n" end if getvariable('noarrange') then opt << "\\setuparranging[\\v!disable]\n" elsif getvariable('arrange') then arrangement = Array.new if finalrun then arrangement << "\\v!doublesided" unless getvariable('noduplex') case getvariable('printformat') when '' then arrangement << "\\v!normal" when /.*up/oi then arrangement << ["2UP","\\v!rotated"] when /.*down/oi then arrangement << ["2DOWN","\\v!rotated"] when /.*side/oi then arrangement << ["2SIDE","\\v!rotated"] end else arrangement << "\\v!disable" end opt << "\\setuparranging[#{arrangement.flatten.join(',')}]\n" if arrangement.size > 0 end if (str = getvariable('pages')) && ! str.empty? then if str.downcase == 'odd' then opt << "\\chardef\\whichpagetoshipout=1\n" elsif str.downcase == 'even' then opt << "\\chardef\\whichpagetoshipout=2\n" else pagelist = Array.new str.split(/\,/).each do |page| pagerange = page.split(/\D+/o) if pagerange.size > 1 then pagerange.first.to_i.upto(pagerange.last.to_i) do |p| pagelist << p.to_s end else pagelist << page end end opt << "\\def\\pagestoshipout\{#{pagelist.join(',')}\}\n"; end end opt << "\\stopsetups\n" # # styles and modules # opt << "\\startsetups *runtime:modules\n" begin getvariable('filters' ).split(',').uniq.each do |f| opt << "\\useXMLfilter[#{f}]\n" end ; rescue ; end begin getvariable('usemodules' ).split(',').uniq.each do |m| opt << "\\usemodule [#{m}]\n" end ; rescue ; end begin getvariable('environments').split(',').uniq.each do |e| opt << "\\environment #{e} \n" end ; rescue ; end opt << "\\stopsetups\n" # opt << "\\protect \\endinput\n" # opt.close else report("unable to write option file #{topname}") end rescue report("fatal error in writing option file #{topname} (#{$!})") end end def takeprecautions ENV['MPXCOMAND'] = '0' # else loop if getvariable('paranoid') then ENV['SHELL_ESCAPE'] = ENV['SHELL_ESCAPE'] || 'f' ENV['OPENOUT_ANY'] = ENV['OPENOUT_ANY'] || 'p' ENV['OPENIN_ANY'] = ENV['OPENIN_ANY'] || 'p' elsif getvariable('notparanoid') then ENV['SHELL_ESCAPE'] = ENV['SHELL_ESCAPE'] || 't' ENV['OPENOUT_ANY'] = ENV['OPENOUT_ANY'] || 'a' ENV['OPENIN_ANY'] = ENV['OPENIN_ANY'] || 'a' end if ENV['OPENIN_ANY'] && (ENV['OPENIN_ANY'] == 'p') then # first test redundant setvariable('paranoid', true) end if ENV.key?('SHELL_ESCAPE') && (ENV['SHELL_ESCAPE'] == 'f') then setvariable('automprun',true) end done = false ['TXRESOURCES','MPRESOURCES','MFRESOURCES'].each do |res| [getvariable('runpath'),getvariable('path')].each do |pat| unless pat.empty? then if ENV.key?(res) then # ENV[res] = if ENV[res].empty? then pat else pat + ":" + ENV[res] end if ENV[res].empty? then ENV[res] = pat elsif ENV[res] == pat || ENV[res] =~ /^#{pat}\:/ || ENV[res] =~ /\:#{pat}\:/ then # skip else ENV[res] = pat + ":" + ENV[res] end else ENV[res] = pat end report("setting #{res} to #{ENV[res]}") unless done end end done = true end end def checktestversion # # one can set TEXMFALPHA and TEXMFBETA for test versions # but keep in mind that the format as well as the test files # then need the --alpha or --beta flag # done, tree = false, '' ['alpha', 'beta'].each do |what| if getvariable(what) then if ENV["TEXMF#{what.upcase}"] then done, tree = true, ENV["TEXMF#{what.upcase}"] elsif ENV["TEXMFLOCAL"] then done, tree = true, File.join(File.dirname(ENV['TEXMFLOCAL']), "texmf-#{what}") end end break if done end if done then tree = tree.strip ENV['TEXMFPROJECT'] = tree report("using test tree '#{tree}'") ['MP', 'MF', 'TX'].each do |ctx| ENV['CTXDEV#{ctx}PATH'] = '' end unless (FileTest.file?(File.join(tree,'ls-r')) || FileTest.file?(File.join(tree,'ls-R'))) then report("no ls-r/ls-R file for tree '#{tree}' (run: mktexlsr #{tree})") end end # puts `kpsewhich --expand-path=$TEXMF` # exit end def runtex(filename) checktestversion texengine = validtexengine(getvariable('texengine')) texformat = validtexformat(getarrayvariable('texformats').first) report("tex engine: #{texengine}") report("tex format: #{texformat}") if texengine && texformat then fixbackendvars(@@mappaths[texengine]) progname = validprogname([getvariable('progname'),texformat,texengine]) runcommand([quoted(texengine),prognameflag(progname),formatflag(texengine,texformat),runoptions(texengine),filename,texprocextras(texformat)]) else false end end def runmp(mpname,mpx=false) checktestversion mpsengine = validmpsengine(getvariable('mpsengine')) mpsformat = validmpsformat(getarrayvariable('mpsformats').first) if mpsengine && mpsformat then ENV["MPXCOMMAND"] = "0" unless mpx progname = validprogname([getvariable('progname'),mpsformat,mpsengine]) mpname.gsub!(/\.mp$/,"") # temp bug in mp runcommand([quoted(mpsengine),prognameflag(progname),formatflag(mpsengine,mpsformat),runoptions(mpsengine),mpname,mpsprocextras(mpsformat)]) true else false end end def runtexmp(filename,filetype='',purge=true) checktestversion mpname = File.suffixed(filename,filetype,'mp') if File.atleast?(mpname,10) then # first run needed File.silentdelete(File.suffixed(mpname,'mpt')) doruntexmp(mpname,nil,true,purge) mpgraphics = checkmpgraphics(mpname) mplabels = checkmplabels(mpname) if mpgraphics || mplabels then # second run needed doruntexmp(mpname,mplabels,true,purge) else # no labels end end end def runtexmpjob(filename,filetype='') checktestversion mpname = File.suffixed(filename,filetype,'mp') if File.atleast?(mpname,25) && (data = File.silentread(mpname)) then textranslation = if data =~ /^\%\s+translate.*?\=([\w\d\-]+)/io then $1 else '' end mpjobname = if data =~ /collected graphics of job \"(.+?)\"/io then $1 else '' end if ! mpjobname.empty? and File.unsuffixed(filename) =~ /#{mpjobname}/ then # don't optimize options = Array.new options.push("--mptex") options.push("--nomp") options.push("--mpyforce") if getvariable('forcempy') || getvariable('mpyforce') options.push("--translate=#{textranslation}") unless textranslation.empty? options.push("--batch") if getvariable('batchmode') options.push("--nonstop") if getvariable('nonstopmode') options.push("--output=ps") # options.push("--dvi") options.push("--nobackend") return runtexexec(mpname,options,2) end end return false end def runtexutil(filename=[], options=['--ref','--ij','--high'], old=false) [filename].flatten.each do |fname| if old then Kpse.runscript('texutil',fname,options) else begin logger = Logger.new('TeXUtil') if tu = TeXUtil::Converter.new(logger) and tu.loaded(fname) then ok = tu.processed && tu.saved && tu.finalized end rescue Kpse.runscript('texutil',fname,options) end end end end # 1=tex 2=mptex 3=mpxtex 4=mpgraphic 5=mpstatic def runtexexec(filename=[], options=[], mode=nil) begin if mode and job = TEX.new(@logger) then options.each do |option| case option when /^\-*(.*?)\=(.*)$/o then job.setvariable($1,$2) when /^\-*(.*?)$/o then job.setvariable($1,true) end end job.setvariable("files",filename) case mode when 1 then job.processtex when 2 then job.processmptex when 3 then job.processmpxtex when 4 then job.processmpgraphic when 5 then job.processmpstatic end job.inspect && Kpse.inspect if getvariable('verbose') return true else Kpse.runscript('texexec',filename,options) end rescue Kpse.runscript('texexec',filename,options) end end def fixbackendvars(backend) if backend then ENV['backend'] = backend ; ENV['progname'] = backend unless validtexengine(backend) ENV['TEXFONTMAPS'] = ['.',"\$TEXMF/fonts/{data,map}/{#{backend},pdftex,dvips,}//",'./fonts//'].join_path report("fixing backend map path for #{backend}: #{ENV['TEXFONTMAPS']}") if getvariable('verbose') else report("unable to fix backend map path") if getvariable('verbose') end end def runbackend(rawname) unless getvariable('nobackend') then case validbackend(getvariable('backend')) when 'dvipdfmx' then fixbackendvars('dvipdfm') runcommand("dvipdfmx -d 4 -V 5 #{File.unsuffixed(rawname)}") when 'xetex' then # xetex now runs its own backend xdvfile = File.suffixed(rawname,'xdv') if FileTest.file?(xdvfile) then fixbackendvars('dvipdfm') runcommand("xdvipdfmx -q -d 4 -V 5 -E #{xdvfile}") end when 'xdv2pdf' then xdvfile = File.suffixed(rawname,'xdv') if FileTest.file?(xdvfile) then fixbackendvars('xdv2pdf') runcommand("xdv2pdf #{xdvfile}") end when 'dvips' then fixbackendvars('dvips') mapfiles = '' begin if tuifile = File.suffixed(rawname,'tui') and FileTest.file?(tuifile) then IO.read(tuifile).scan(/^c \\usedmapfile\{.\}\{(.*?)\}\s*$/o) do mapfiles += "-u +#{$1} " ; end end rescue mapfiles = '' end runcommand("dvips #{mapfiles} #{File.unsuffixed(rawname)}") when 'pdftex' then # no need for postprocessing else report("no postprocessing needed") end end end def processfile takeprecautions report("using search method '#{Kpse.searchmethod}'") if getvariable('verbose') rawname = getvariable('filename') jobname = getvariable('filename') if getvariable('autopath') then jobname = File.basename(jobname) inppath = File.dirname(jobname) else inppath = '' end jobname, jobsuffix = File.splitname(jobname,'tex') jobname = File.unixfied(jobname) inppath = File.unixfied(inppath) orisuffix = jobsuffix # still needed ? if jobsuffix =~ /^(htm|html|xhtml|xml|fo|fox|rlg|exa)$/io then setvariable('forcexml',true) end dummyfile = false # fuzzy code snippet: (we kunnen kpse: prefix gebruiken) unless FileTest.file?(File.suffixed(jobname,jobsuffix)) then if FileTest.file?(rawname + '.tex') then jobname = rawname.dup jobsuffix = 'tex' end end # we can have funny names, like 2005.10.10 (given without suffix) rawname = jobname + '.' + jobsuffix rawpath = File.dirname(rawname) rawbase = File.basename(rawname) unless FileTest.file?(rawname) then inppath.split(',').each do |ip| break if dummyfile = FileTest.file?(File.join(ip,rawname)) end end forcexml = getvariable('forcexml') if dummyfile || forcexml then # after ctx? jobsuffix = makestubfile(rawname,rawbase,forcexml) checkxmlfile(rawname) end # preprocess files unless getvariable('noctx') then ctx = CtxRunner.new(rawname,@logger) if pth = getvariable('path') then pth.split(',').each do |p| ctx.register_path(p) end end if getvariable('ctxfile').empty? then if rawname == rawbase then ctx.manipulate(File.suffixed(rawname,'ctx'),'jobname.ctx') else ctx.manipulate(File.suffixed(rawname,'ctx'),File.join(rawpath,'jobname.ctx')) end else ctx.manipulate(File.suffixed(getvariable('ctxfile'),'ctx')) end ctx.savelog(File.suffixed(rawbase,'ctl')) envs = ctx.environments mods = ctx.modules flags = ctx.flags mdes = ctx.modes flags.each do |f| f.sub!(/^\-+/,'') if f =~ /^(.*?)=(.*)$/ then setvariable($1,$2) else setvariable(f,true) end end report("using flags #{flags.join(' ')}") if flags.size > 0 # merge environment and module specs envs << getvariable('environments') unless getvariable('environments').empty? mods << getvariable('usemodules') unless getvariable('usemodules') .empty? mdes << getvariable('modes') unless getvariable('modes') .empty? envs = envs.uniq.join(',') mods = mods.uniq.join(',') mdes = mdes.uniq.join(',') report("using search method '#{Kpse.searchmethod}'") if getvariable('verbose') report("using environments #{envs}") if envs.length > 0 report("using modules #{mods}") if mods.length > 0 report("using modes #{mdes}") if mdes.length > 0 setvariable('environments', envs) setvariable('usemodules', mods) setvariable('modes', mdes) end # end of preprocessing and merging setvariable('nomprun',true) if orisuffix == 'mpx' # else cylic run PDFview.setmethod('xpdf') if getvariable('xpdf') PDFview.closeall if getvariable('autopdf') runonce = getvariable('once') finalrun = getvariable('final') || (getvariable('arrange') && ! getvariable('noarrange')) suffix = getvariable('suffix') result = getvariable('result') globalfile = getvariable('globalfile') forcexml = getvariable('forcexml') # can be set in ctx file if dummyfile || forcexml then # after ctx? jobsuffix = makestubfile(rawname,rawbase,forcexml) checkxmlfile(rawname) end result = File.unixfied(result) if globalfile || FileTest.file?(rawname) then if not dummyfile and not globalfile and not forcexml then scantexpreamble(rawname) scantexcontent(rawname) if getvariable('texformats').standard? end result = File.suffixed(rawname,suffix) unless suffix.empty? pushresult(rawbase,result) method = validtexmethod(validtexformat(getvariable('texformats'))) report("tex processing method: #{method}") case method when 'context' then if getvariable('simplerun') || runonce then makeoptionfile(rawbase,jobname,orisuffix,true,true,3,1) unless getvariable('nooptionfile') ok = runtex(if dummyfile || forcexml then rawbase else rawname end) if ok then ok = runtexutil(rawbase) if getvariable('texutil') || getvariable('forcetexutil') runbackend(rawbase) popresult(rawbase,result) end if getvariable('keep') then ['top','log','run'].each do |suffix| File.silentrename(File.suffixed(rawbase,suffix),File.suffixed(rawbase,suffix+'.keep')) end end else # goto tmp/jobname when present mprundone, ok, stoprunning = false, true, false texruns, nofruns = 0, getvariable('runs').to_i state = FileState.new ['tub','tuo','tuc'].each do |s| state.register(File.suffixed(rawbase,s)) end if getvariable('automprun') then # check this ['mprun','mpgraph'].each do |s| state.register(File.suffixed(rawbase,s,'mp'),'randomseed') end end while ! stoprunning && (texruns < nofruns) && ok do texruns += 1 report("TeX run #{texruns}") unless getvariable('nooptionfile') then if texruns == nofruns then makeoptionfile(rawbase,jobname,orisuffix,false,false,4,texruns) # last elsif texruns == 1 then makeoptionfile(rawbase,jobname,orisuffix,false,false,1,texruns) # first else makeoptionfile(rawbase,jobname,orisuffix,false,false,2,texruns) # unknown end end # goto . ok = runtex(File.suffixed(if dummyfile || forcexml then rawbase else rawname end,jobsuffix)) if getvariable('texengine') == "xetex" then ok = true end ############################ # goto tmp/jobname when present if ok && (nofruns > 1) then unless getvariable('nompmode') then mprundone = runtexmpjob(rawbase, "mpgraph") mprundone = runtexmpjob(rawbase, "mprun") end ok = runtexutil(rawbase) state.update stoprunning = state.stable? end end if not ok then setvariable('error','error in tex file') end if (nofruns == 1) && getvariable('texutil') then ok = runtexutil(rawbase) end if ok && finalrun && (nofruns > 1) then makeoptionfile(rawbase,jobname,orisuffix,true,finalrun,4,texruns) unless getvariable('nooptionfile') report("final TeX run #{texruns}") # goto . ok = runtex(File.suffixed(if dummyfile || forcexml then rawbase else rawname end,jobsuffix)) # goto tmp/jobname when present end if getvariable('keep') then ['top','log','run'].each do |suffix| File.silentrename(File.suffixed(rawbase,suffix),File.suffixed(rawbase,suffix+'.keep')) end else File.silentrename(File.suffixed(rawbase,'top'),File.suffixed(rawbase,'tmp')) end # ['tmp','top','log'].each do |s| # previous tuo file / runtime option file / log file # File.silentdelete(File.suffixed(rawbase,s)) # end if ok then # goto . runbackend(rawbase) popresult(rawbase,result) # goto tmp/jobname when present # skip next end if true then # autopurge begin File.open(File.suffixed(rawbase, 'tuo'),'rb') do |f| ok = 0 f.each do |line| case ok when 1 then # next line is empty ok = 2 when 2 then if line =~ /^\%\s+\>\s+(.*?)\s+(\d+)/moi then filename, n = $1, $2 done = File.delete(filename) rescue false if done && getvariable('verbose') then report("deleting #{filename} (#{n} times used)") end else break end else if line =~ /^\%\s+temporary files\:\s+(\d+)/moi then if $1.to_i == 0 then break else ok = 1 end end end end end rescue # report("fatal error #{$!}") end end end Kpse.runscript('ctxtools',rawbase,'--purge') if getvariable('purge') Kpse.runscript('ctxtools',rawbase,'--purge --all') if getvariable('purgeall') # runcommand('mtxrun','--script','ctxtools',rawbase,'--purge') if getvariable('purge') # runcommand('mtxrun','--script','ctxtools',rawbase,'--purge --all') if getvariable('purgeall') when 'latex' then ok = runtex(rawname) else ok = runtex(rawname) end if (dummyfile or forcexml) and FileTest.file?(rawbase) then begin File.delete(File.suffixed(rawbase,'run')) rescue report("unable to delete stub file") end end if ok and getvariable('autopdf') then PDFview.open(File.suffixed(if result.empty? then rawbase else result end,'pdf')) end else report("nothing to process") end end # The labels are collected in the mergebe hash. Here we merge the relevant labels # into beginfig/endfig. We could as well do this in metafun itself. Maybe some # day ... (it may cost a bit of string space but that is cheap nowadays). def doruntexmp(mpname,mergebe=nil,context=true,purge=true) texfound = false mpname = File.suffixed(mpname,'mp') mpcopy = File.suffixed(mpname,'mp.copy') mpkeep = File.suffixed(mpname,'mp.keep') setvariable('mp.file',mpname) setvariable('mp.line','') setvariable('mp.error','') if mpdata = File.silentread(mpname) then # mpdata.gsub!(/^\%.*\n/o,'') File.silentrename(mpname,mpcopy) texfound = mergebe || (mpdata =~ /btex .*? etex/mo) if mp = openedfile(mpname) then if mergebe then mpdata.gsub!(/beginfig\s*\((\d+)\)\s*\;(.+?)endfig\s*\;/mo) do n, str = $1, $2 if str =~ /^(.*?)(verbatimtex.*?etex)\s*\;(.*)$/mo then "beginfig(#{n})\;\n#{$1}#{$2}\;\n#{mergebe[n]}\n#{$3}\;endfig\;\n" else "beginfig(#{n})\;\n#{mergebe[n]}\n#{str}\;endfig\;\n" end end unless mpdata =~ /beginfig\s*\(\s*0\s*\)/o then mp << mergebe['0'] if mergebe.key?('0') end end # mp << MPTools::splitmplines(mpdata) mp << mpdata mp << "\n" # mp << "end" # mp << "\n" mp.close end processmpx(mpname,true,true,purge) if texfound if getvariable('batchmode') then options = ' --interaction=batch' elsif getvariable('nonstopmode') then options = ' --interaction=nonstop' else options = '' end # todo plain|mpost|metafun begin ok = runmp(mpname) rescue end if f = File.silentopen(File.suffixed(mpname,'log')) then while str = f.gets do if str =~ /^l\.(\d+)\s(.*?)\n/o then setvariable('mp.line',$1) setvariable('mp.error',$2) break end end f.close end File.silentrename(mpname, mpkeep) File.silentrename(mpcopy, mpname) end end # todo: use internal mptotext function and/or turn all btex/etex into textexts def processmpx(mpname,force=false,context=true,purge=true) unless force then mpname = File.suffixed(mpname,'mp') if File.atleast?(mpname,10) && (data = File.silentread(mpname)) then if data =~ /(btex|etex|verbatimtex|textext)/o then force = true end end end if force then begin mptex = File.suffixed(mpname,'temp','tex') mpdvi = File.suffixed(mpname,'temp','dvi') mplog = File.suffixed(mpname,'temp','log') mpmpx = File.suffixed(mpname,'mpx') File.silentdelete(mptex) if true then report("using internal mptotex converter") ok = MPTools::mptotex(mpname,mptex,'context') else command = "mpto #{mpname} > #{mptex}" report(command) if getvariable('verbose') ok = system(command) end # not "ok && ..." because of potential problem with return code and redirect (>) if FileTest.file?(mptex) && File.appended(mptex, "\\end\n") then # to be replaced by runtexexec([filenames],options,1) if localjob = TEX.new(@logger) then localjob.setvariable('files',mptex) localjob.setvariable('backend','dvips') localjob.setvariable('engine',getvariable('engine')) unless getvariable('engine').empty? localjob.setvariable('once',true) localjob.setvariable('nobackend',true) if context then localjob.setvariable('texformats',[getvariable('interface')]) unless getvariable('interface').empty? elsif getvariable('interface').empty? then localjob.setvariable('texformats',['plain']) else localjob.setvariable('texformats',[getvariable('interface')]) end localjob.processtex ok = true # todo else ok = false end # so far command = "dvitomp #{mpdvi} #{mpmpx}" report(command) if getvariable('verbose') ok = ok && FileTest.file?(mpdvi) && system(command) purge_mpx_files(mpname) if purge end rescue # error in processing mpx file end end end def purge_mpx_files(mpname) unless getvariable('keep') then ['tex', 'log', 'tui', 'tuo', 'tuc', 'top'].each do |suffix| File.silentdelete(File.suffixed(mpname,'temp',suffix)) end end end def checkmpgraphics(mpname) # in practice the checksums will differ because of multiple instances # ok, we could save the mpy/mpo files by number, but not now mpoptions = '' if getvariable('makempy') then mpoptions += " --makempy " end mponame = File.suffixed(mpname,'mpo') mpyname = File.suffixed(mpname,'mpy') pdfname = File.suffixed(mpname,'pdf') tmpname = File.suffixed(mpname,'tmp') if getvariable('mpyforce') || getvariable('forcempy') then mpoptions += " --force " else return false unless File.atleast?(mponame,32) mpochecksum = FileState.new.checksum(mponame) return false if mpochecksum.empty? # where does the checksum get into the file? # maybe let texexec do it? # solution: add one if not present or update when different begin mpydata = IO.read(mpyname) if mpydata then if mpydata =~ /^\%\s*mpochecksum\s*\:\s*([A-Z0-9]+)$/mo then checksum = $1 if mpochecksum == checksum then return false end end end rescue # no file end end # return Kpse.runscript('makempy',mpname) # only pdftex flags = ['--noctx','--process','--batch','--once'] result = runtexexec([mponame], flags, 1) runcommand(["pstoedit","-ssp -dt -f mpost", pdfname,tmpname]) tmpdata = IO.read(tmpname) if tmpdata then if mpy = openedfile(mpyname) then mpy << "% mpochecksum: #{mpochecksum}\n" tmpdata.scan(/beginfig(.*?)endfig/mo) do |s| mpy << "begingraphictextfig#{s}endgraphictextfig\n" end mpy.close() end end File.silentdelete(tmpname) File.silentdelete(pdfname) return true end def checkmplabels(mpname) mpname = File.suffixed(mpname,'mpt') if File.atleast?(mpname,10) && (mp = File.silentopen(mpname)) then labels = Hash.new while str = mp.gets do t = if str =~ /^%\s*setup\s*:\s*(.*)$/o then $1 else '' end if str =~ /^%\s*figure\s*(\d+)\s*:\s*(.*)$/o then labels[$1] = labels[$1] || '' unless t.empty? then labels[$1] += "#{t}\n" t = '' end labels[$1] += "#{$2}\n" end end mp.close if labels.size>0 then return labels else return nil end end return nil end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpsedirect.rb0000644000175000017500000000127110526734267026240 0ustar norbertnorbertclass KpseDirect attr_accessor :progname, :format, :engine def initialize @progname, @format, @engine = '', '', '' end def expand_path(str) clean_name(`kpsewhich -expand-path=#{str}`.chomp) end def expand_var(str) clean_name(`kpsewhich -expand-var=#{str}`.chomp) end def find_file(str) clean_name(`kpsewhich #{_progname_} #{_format_} #{str}`.chomp) end def _progname_ if @progname.empty? then '' else "-progname=#{@progname}" end end def _format_ if @format.empty? then '' else "-format=\"#{@format}\"" end end private def clean_name(str) str.gsub(/\\/,'/') end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/file.rb0000644000175000017500000000642111244221744025011 0ustar norbertnorbert# module : base/file # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com require 'fileutils' # require 'ftools' class File def File.suffixed(name,sufa,sufb=nil) if sufb then if sufa.empty? then unsuffixed(name) + ".#{sufb}" else unsuffixed(name) + "-#{sufa}.#{sufb}" end else unsuffixed(name) + ".#{sufa}" end end def File.unsuffixed(name) name.sub(/\.[^\.]*?$/o, '') end def File.suffix(name,default='') if name =~ /\.([^\.]*?)$/o then $1 else default end end def File.splitname(name,suffix='') if name =~ /^(.*)\.([^\.]*?)$/o then [$1, $2] else [name, suffix] end end end class File def File.silentopen(name,method='r') begin f = File.open(name,method) rescue return nil else return f end end def File.silentread(name) begin data = IO.read(name) rescue return nil else return data end end def File.atleast?(name,n=0) begin size = FileTest.size(name) rescue return false else return size > n end end def File.appended(name,str='') if FileTest.file?(name) then begin if f = File.open(name,'a') then f << str f.close return true end rescue end end return false end def File.written(name,str='') begin if f = File.open(name,'w') then f << str f.close return true end rescue end return false end def File.silentdelete(filename) File.delete(filename) rescue false end def File.silentcopy(oldname,newname) return if File.expand_path(oldname) == File.expand_path(newname) FileUtils.makedirs(File.dirname(newname)) rescue false File.copy(oldname,newname) rescue false end def File.silentrename(oldname,newname) # in case of troubles, we just copy the file; we # maybe working over multiple file systems or # apps may have mildly locked files (like gs does) return if File.expand_path(oldname) == File.expand_path(newname) File.delete(newname) rescue false begin File.rename(oldname,newname) rescue FileUtils.makedirs(File.dirname(newname)) rescue false File.copy(oldname,newname) rescue false end end end class File # handles "c:\tmp\test.tex" as well as "/${TEMP}/test.tex") def File.unixfied(filename) begin str = filename.gsub(/\$\{*([a-z0-9\_]+)\}*/oi) do if ENV.key?($1) then ENV[$1] else $1 end end str.gsub(/[\/\\]+/o, '/') rescue filename end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpserunner.rb0000644000175000017500000000532010526734267026276 0ustar norbertnorbertrequire 'base/kpsefast' module KpseRunner @@kpse = nil def KpseRunner.kpsewhich(arg='') options, arguments = split_args(arg) unless @@kpse then if ENV['KPSEMETHOD'] && ENV['KPSEPORT'] then require 'base/kpseremote' @@kpse = KpseRemote.new else @@kpse = nil end if @@kpse && @@kpse.okay? then @@kpse.progname = options['progname'] || '' @@kpse.engine = options['engine'] || '' @@kpse.format = options['format'] || '' else require 'base/kpsefast' @@kpse = KpseFast.new @@kpse.load_cnf @@kpse.progname = options['progname'] || '' @@kpse.engine = options['engine'] || '' @@kpse.format = options['format'] || '' @@kpse.expand_variables @@kpse.load_lsr end else @@kpse.progname = options['progname'] || '' @@kpse.engine = options['engine'] || '' @@kpse.format = options['format'] || '' @@kpse.expand_variables end if option = options['expand-braces'] and not option.empty? then @@kpse.expand_braces(option) elsif option = options['expand-path'] and not option.empty? then @@kpse.expand_path(option) elsif option = options['expand-var'] and not option.empty? then @@kpse.expand_var(option) elsif option = options['show-path'] and not option.empty? then @@kpse.show_path(option) elsif option = options['var-value'] and not option.empty? then @@kpse.expand_var(option) elsif arguments.size > 0 then files = Array.new arguments.each do |option| if file = @@kpse.find_file(option) and not file.empty? then files << file end end files.join("\n") else '' end end def KpseRunner.kpsereset @@kpse = nil end private def KpseRunner.split_args(arg) vars, args = Hash.new, Array.new arg.gsub!(/([\"\'])(.*?)\1/o) do $2.gsub(' ','') end arg = arg.split(/\s+/o) arg.collect! do |a| a.gsub('',' ') end arg.each do |a| if a =~ /^(.*?)\=(.*?)$/o then k, v = $1, $2 vars[k.sub(/^\-+/,'')] = v else args << a end end # puts vars.inspect # puts args.inspect return vars, args end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpsefast.rb0000644000175000017500000010076310551672217025723 0ustar norbertnorbert# module : base/kpsefast # copyright : PRAGMA Advanced Document Engineering # version : 2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # todo: multiple cnf files # # todo: cleanup, string or table store (as in lua variant) class String def split_path if self =~ /\;/o || self =~ /^[a-z]\:/io then self.split(";") else self.split(":") end end end class Array def join_path self.join(File::PATH_SEPARATOR) end end class File def File.locate_file(path,name) begin files = Dir.entries(path) if files.include?(name) then fullname = File.join(path,name) return fullname if FileTest.file?(fullname) end files.each do |p| fullname = File.join(path,p) if p != '.' and p != '..' and FileTest.directory?(fullname) and result = locate_file(fullname,name) then return result end end rescue # bad path end return nil end def File.glob_file(pattern) return Dir.glob(pattern).first end end module KpseUtil # to be adapted, see loading cnf file @@texmftrees = ['texmf-local','texmf.local','../..','texmf'] # '../..' is for gwtex @@texmfcnf = 'texmf.cnf' def KpseUtil::identify # we mainly need to identify the local tex stuff and wse assume that # the texmfcnf variable is set; otherwise we need to expand the # TEXMF variable and that takes time since it may involve more ownpath = File.expand_path($0) if ownpath.gsub!(/texmf.*?$/o, '') then ENV['SELFAUTOPARENT'] = ownpath else ENV['SELFAUTOPARENT'] = '.' # fall back # may be too tricky: # # (ENV['PATH'] ||'').split_path.each do |p| # if p.gsub!(/texmf.*?$/o, '') then # ENV['SELFAUTOPARENT'] = p # break # end # end end filenames = Array.new if ENV['TEXMFCNF'] && ! ENV['TEXMFCNF'].empty? then ENV['TEXMFCNF'].to_s.split_path.each do |path| filenames << File.join(path,@@texmfcnf) end elsif ENV['SELFAUTOPARENT'] == '.' then filenames << File.join('.',@@texmfcnf) else @@texmftrees.each do |tree| filenames << File.join(ENV['SELFAUTOPARENT'],tree,'web2c',@@texmfcnf) end end loop do busy = false filenames.collect! do |f| f.gsub(/\$([a-zA-Z0-9\_\-]+)/o) do if (! ENV[$1]) || (ENV[$1] == $1) then "$#{$1}" else busy = true ENV[$1] end end end break unless busy end filenames.delete_if do |f| ! FileTest.file?(f) end return filenames end def KpseUtil::environment Hash.new.merge(ENV) end end class KpseFast # formats are an incredible inconsistent mess @@suffixes = Hash.new @@formats = Hash.new @@suffixmap = Hash.new @@texmfcnf = 'texmf.cnf' @@suffixes['gf'] = ['.gf'] # todo @@suffixes['pk'] = ['.pk'] # todo @@suffixes['tfm'] = ['.tfm'] @@suffixes['afm'] = ['.afm'] @@suffixes['base'] = ['.base'] @@suffixes['bib'] = ['.bib'] @@suffixes['bst'] = ['.bst'] @@suffixes['cnf'] = ['.cnf'] @@suffixes['ls-R'] = ['ls-R', 'ls-r'] @@suffixes['fmt'] = ['.fmt', '.efmt', '.efm', '.ofmt', '.ofm', '.oft', '.eofmt', '.eoft', '.eof', '.pfmt', '.pfm', '.epfmt', '.epf', '.xpfmt', '.xpf', '.afmt', '.afm'] @@suffixes['map'] = ['.map'] @@suffixes['mem'] = ['.mem'] @@suffixes['mf'] = ['.mf'] @@suffixes['mfpool'] = ['.pool'] @@suffixes['mft'] = ['.mft'] @@suffixes['mp'] = ['.mp'] @@suffixes['mppool'] = ['.pool'] @@suffixes['ocp'] = ['.ocp'] @@suffixes['ofm'] = ['.ofm', '.tfm'] @@suffixes['opl'] = ['.opl'] @@suffixes['otp'] = ['.otp'] @@suffixes['ovf'] = ['.ovf'] @@suffixes['ovp'] = ['.ovp'] @@suffixes['graphic/figure'] = ['.eps', '.epsi'] @@suffixes['tex'] = ['.tex'] @@suffixes['texpool'] = ['.pool'] @@suffixes['PostScript header'] = ['.pro'] @@suffixes['type1 fonts'] = ['.pfa', '.pfb'] @@suffixes['vf'] = ['.vf'] @@suffixes['ist'] = ['.ist'] @@suffixes['truetype fonts'] = ['.ttf', '.ttc'] @@suffixes['web'] = ['.web', '.ch'] @@suffixes['cweb'] = ['.w', '.web', '.ch'] @@suffixes['enc files'] = ['.enc'] @@suffixes['cmap files'] = ['.cmap'] @@suffixes['subfont definition files'] = ['.sfd'] @@suffixes['lig files'] = ['.lig'] @@suffixes['bitmap font'] = [] @@suffixes['MetaPost support'] = [] @@suffixes['TeX system documentation'] = [] @@suffixes['TeX system sources'] = [] @@suffixes['Troff fonts'] = [] @@suffixes['dvips config'] = [] @@suffixes['type42 fonts'] = [] @@suffixes['web2c files'] = [] @@suffixes['other text files'] = [] @@suffixes['other binary files'] = [] @@suffixes['misc fonts'] = [] @@suffixes['opentype fonts'] = [] @@suffixes['pdftex config'] = [] @@suffixes['texmfscripts'] = [] # replacements @@suffixes['fmt'] = ['.fmt'] @@suffixes['type1 fonts'] = ['.pfa', '.pfb', '.pfm'] @@suffixes['tex'] = ['.tex', '.xml'] @@suffixes['texmfscripts'] = ['rb','lua','py','pl'] @@suffixes.keys.each do |k| @@suffixes[k].each do |s| @@suffixmap[s] = k end end # TTF2TFMINPUTS # MISCFONTS # TEXCONFIG # DVIPDFMINPUTS # OTFFONTS @@formats['gf'] = '' @@formats['pk'] = '' @@formats['tfm'] = 'TFMFONTS' @@formats['afm'] = 'AFMFONTS' @@formats['base'] = 'MFBASES' @@formats['bib'] = '' @@formats['bst'] = '' @@formats['cnf'] = '' @@formats['ls-R'] = '' @@formats['fmt'] = 'TEXFORMATS' @@formats['map'] = 'TEXFONTMAPS' @@formats['mem'] = 'MPMEMS' @@formats['mf'] = 'MFINPUTS' @@formats['mfpool'] = 'MFPOOL' @@formats['mft'] = '' @@formats['mp'] = 'MPINPUTS' @@formats['mppool'] = 'MPPOOL' @@formats['ocp'] = 'OCPINPUTS' @@formats['ofm'] = 'OFMFONTS' @@formats['opl'] = 'OPLFONTS' @@formats['otp'] = 'OTPINPUTS' @@formats['ovf'] = 'OVFFONTS' @@formats['ovp'] = 'OVPFONTS' @@formats['graphic/figure'] = '' @@formats['tex'] = 'TEXINPUTS' @@formats['texpool'] = 'TEXPOOL' @@formats['PostScript header'] = 'TEXPSHEADERS' @@formats['type1 fonts'] = 'T1FONTS' @@formats['vf'] = 'VFFONTS' @@formats['ist'] = '' @@formats['truetype fonts'] = 'TTFONTS' @@formats['web'] = '' @@formats['cweb'] = '' @@formats['enc files'] = 'ENCFONTS' @@formats['cmap files'] = 'CMAPFONTS' @@formats['subfont definition files'] = 'SFDFONTS' @@formats['lig files'] = 'LIGFONTS' @@formats['bitmap font'] = '' @@formats['MetaPost support'] = '' @@formats['TeX system documentation'] = '' @@formats['TeX system sources'] = '' @@formats['Troff fonts'] = '' @@formats['dvips config'] = '' @@formats['type42 fonts'] = 'T42FONTS' @@formats['web2c files'] = 'WEB2C' @@formats['other text files'] = '' @@formats['other binary files'] = '' @@formats['misc fonts'] = '' @@formats['opentype fonts'] = 'OPENTYPEFONTS' @@formats['pdftex config'] = 'PDFTEXCONFIG' @@formats['texmfscripts'] = 'TEXMFSCRIPTS' attr_accessor :progname, :engine, :format, :rootpath, :treepath, :verbose, :remember, :scandisk, :diskcache, :renewcache @@cacheversion = '1' def initialize @rootpath = '' @treepath = '' @progname = 'kpsewhich' @engine = 'pdftex' @variables = Hash.new @expansions = Hash.new @files = Hash.new @found = Hash.new @kpsevars = Hash.new @lsrfiles = Array.new @cnffiles = Array.new @verbose = true @remember = true @scandisk = true @diskcache = true @renewcache = false @isolate = false @diskcache = false @cachepath = nil @cachefile = 'tmftools.log' @environment = ENV end def set(key,value) case key when 'progname' then @progname = value when 'engine' then @engine = value when 'format' then @format = value end end def push_environment(env) @environment = env end # {$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c} # # $SELFAUTOLOC : /usr/tex/bin/platform # $SELFAUTODIR : /usr/tex/bin # $SELFAUTOPARENT : /usr/tex # # since we live in scriptpath we need a slightly different method def load_cnf(filenames=nil) unless filenames then ownpath = File.expand_path($0) if ownpath.gsub!(/texmf.*?$/o, '') then @environment['SELFAUTOPARENT'] = ownpath else @environment['SELFAUTOPARENT'] = '.' end unless @treepath.empty? then unless @rootpath.empty? then @treepath = @treepath.split(',').collect do |p| File.join(@rootpath,p) end.join(',') end @environment['TEXMF'] = @treepath # only the first one @environment['TEXMFCNF'] = File.join(@treepath.split(',').first,'texmf/web2c') end unless @rootpath.empty? then @environment['TEXMFCNF'] = File.join(@rootpath,'texmf/web2c') @environment['SELFAUTOPARENT'] = @rootpath @isolate = true end filenames = Array.new if @environment['TEXMFCNF'] and not @environment['TEXMFCNF'].empty? then @environment['TEXMFCNF'].to_s.split_path.each do |path| filenames << File.join(path,@@texmfcnf) end elsif @environment['SELFAUTOPARENT'] == '.' then filenames << File.join('.',@@texmfcnf) else ['texmf-local','texmf'].each do |tree| filenames << File.join(@environment['SELFAUTOPARENT'],tree,'web2c',@@texmfcnf) end end end # /texmf/web2c/texmf.cnf filenames = _expanded_path_(filenames) @rootpath = filenames.first 3.times do @rootpath = File.dirname(@rootpath) end filenames.collect! do |f| f.gsub("\\", '/') end filenames.each do |fname| if FileTest.file?(fname) and f = File.open(fname) then @cnffiles << fname while line = f.gets do loop do # concatenate lines ending with \ break unless line.sub!(/\\\s*$/o) do f.gets || '' end end case line when /^[\%\#]/o then # comment when /^\s*(.*?)\s*\=\s*(.*?)\s*$/o then key, value = $1, $2 unless @variables.key?(key) then value.sub!(/\%.*$/,'') value.sub!(/\~/, "$HOME") @variables[key] = value end @kpsevars[key] = true end end f.close end end end def load_lsr @lsrfiles = [] simplified_list(expansion('TEXMF')).each do |p| ['ls-R','ls-r'].each do |f| filename = File.join(p,f) if FileTest.file?(filename) then @lsrfiles << [filename,File.size(filename)] break end end end @files = Hash.new if @diskcache then ['HOME','TEMP','TMP','TMPDIR'].each do |key| if @environment[key] then if FileTest.directory?(@environment[key]) then @cachepath = @environment[key] @cachefile = [@rootpath.gsub(/[^A-Z0-9]/io, '-').gsub(/\-+/,'-'),File.basename(@cachefile)].join('-') break end end end if @cachepath and not @renewcache and FileTest.file?(File.join(@cachepath,@cachefile)) then begin if f = File.open(File.join(@cachepath,@cachefile)) then cacheversion = Marshal.load(f) if cacheversion == @@cacheversion then lsrfiles = Marshal.load(f) if lsrfiles == @lsrfiles then @files = Marshal.load(f) end end f.close end rescue @files = Hash.new end end end return if @files.size > 0 @lsrfiles.each do |filedata| filename, filesize = filedata filepath = File.dirname(filename) begin path = '.' data = IO.readlines(filename) if data[0].chomp =~ /% ls\-R \-\- filename database for kpathsea\; do not change this line\./io then data.each do |line| case line when /^[a-zA-Z0-9]/o then line.chomp! if @files[line] then @files[line] << path else @files[line] = [path] end when /^\.\/(.*?)\:$/o then path = File.join(filepath,$1) end end end rescue # sorry end end if @diskcache and @cachepath and f = File.open(File.join(@cachepath,@cachefile),'wb') then f << Marshal.dump(@@cacheversion) f << Marshal.dump(@lsrfiles) f << Marshal.dump(@files) f.close end end def expand_variables @expansions = Hash.new if @isolate then @variables['TEXMFCNF'] = @environment['TEXMFCNF'].dup @variables['SELFAUTOPARENT'] = @environment['SELFAUTOPARENT'].dup else @environment.keys.each do |e| if e =~ /^([a-zA-Z]+)\_(.*)\s*$/o then @expansions["#{$1}.#{$2}"] = (@environment[e] ||'').dup else @expansions[e] = (@environment[e] ||'').dup end end end @variables.keys.each do |k| @expansions[k] = @variables[k].dup unless @expansions[k] end loop do busy = false @expansions.keys.each do |k| @expansions[k].gsub!(/\$([a-zA-Z0-9\_\-]*)/o) do busy = true @expansions[$1] || '' end @expansions[k].gsub!(/\$\{([a-zA-Z0-9\_\-]*)\}/o) do busy = true @expansions[$1] || '' end end break unless busy end @expansions.keys.each do |k| @expansions[k] = @expansions[k].gsub("\\", '/') end end def variable(name='') (name and not name.empty? and @variables[name.sub('$','')]) or '' end def expansion(name='') (name and not name.empty? and @expansions[name.sub('$','')]) or '' end def variable?(name='') name and not name.empty? and @variables.key?(name.sub('$','')) end def expansion?(name='') name and not name.empty? and @expansions.key?(name.sub('$','')) end def simplified_list(str) lst = str.gsub(/^\{/o,'').gsub(/\}$/o,'').split(",") lst.collect do |l| l.sub(/^[\!]*/,'').sub(/[\/\\]*$/o,'') end end def original_variable(variable) if variable?("#{@progname}.#{variable}") then variable("#{@progname}.#{variable}") elsif variable?(variable) then variable(variable) else '' end end def expanded_variable(variable) if expansion?("#{variable}.#{@progname}") then expansion("#{variable}.#{@progname}") elsif expansion?(variable) then expansion(variable) else '' end end def original_path(filename='') _expanded_path_(original_variable(var_of_format_or_suffix(filename)).split(";")) end def expanded_path(filename='') _expanded_path_(expanded_variable(var_of_format_or_suffix(filename)).split(";")) end def _expanded_path_(pathlist) i, n = 0, 0 pathlist.collect! do |mainpath| mainpath.gsub(/([\{\}])/o) do if $1 == "{" then i += 1 ; n = i if i > n ; "<#{i}>" else i -= 1 ; "" end end end n.times do |i| loop do more = false newlist = [] pathlist.each do |path| unless path.sub!(/^(.*?)<(#{n-i})>(.*?)<\/\2>(.*?)$/) do pre, mid, post = $1, $3, $4 mid.gsub!(/\,$/,',.') mid.split(',').each do |m| more = true if m == '.' then newlist << "#{pre}#{post}" else newlist << "#{pre}#{m}#{post}" end end end then newlist << path end end if more then pathlist = [newlist].flatten # copy -) else break end end end pathlist = pathlist.uniq.collect do |path| p = path # p.gsub(/^\/+/o) do '' end # p.gsub!(/(.)\/\/(.)/o) do "#{$1}/#{$2}" end # p.gsub!(/\/\/+$/o) do '//' end p.gsub!(/\/\/+/o) do '//' end p end pathlist end # todo: ignore case def var_of_format(str) @@formats[str] || '' end def var_of_suffix(str) # includes . if @@suffixmap.key?(str) then @@formats[@@suffixmap[str]] else '' end end def var_of_format_or_suffix(str) if @@formats.key?(str) then @@formats[str] elsif @@suffixmap.key?(File.extname(str)) then # extname includes . @@formats[@@suffixmap[File.extname(str)]] # extname includes . else '' end end end class KpseFast # test things def list_variables(kpseonly=true) @variables.keys.sort.each do |k| if kpseonly then puts("#{k} = #{@variables[k]}") if @kpsevars[k] else puts("#{if @kpsevars[k] then 'K' else 'E' end} #{k} = #{@variables[k]}") end end end def list_expansions(kpseonly=true) @expansions.keys.sort.each do |k| if kpseonly then puts("#{k} = #{@expansions[k]}") if @kpsevars[k] else puts("#{if @kpsevars[k] then 'K' else 'E' end} #{k} = #{@expansions[k]}") end end end def list_lsr puts("files = #{@files.size}") end def set_test_patterns @variables["KPSE_TEST_PATTERN_A"] = "foo/{1,2}/bar//" @variables["KPSE_TEST_PATTERN_B"] = "!!x{A,B{1,2}}y" @variables["KPSE_TEST_PATTERN_C"] = "x{A,B//{1,2}}y" @variables["KPSE_TEST_PATTERN_D"] = "x{A,B//{1,2,}}//y" end def show_test_patterns ['A','B','D'].each do |i| puts "" puts @variables ["KPSE_TEST_PATTERN_#{i}"] puts "" puts expand_path("KPSE_TEST_PATTERN_#{i}").split_path puts "" end end end class KpseFast # kpse stuff def expand_braces(str) # output variable and brace expansion of STRING. _expanded_path_(original_variable(str).split_path).join_path end def expand_path(str) # output complete path expansion of STRING. _expanded_path_(expanded_variable(str).split_path).join_path end def expand_var(str) # output variable expansion of STRING. expanded_variable(str) end def show_path(str) # output search path for file type NAME expanded_path(str).join_path end def var_value(str) # output the value of variable $STRING. original_variable(str) end end class KpseFast def _is_cnf_?(filename) filename == File.basename((@cnffiles.first rescue @@texmfcnf) || @@texmfcnf) end def find_file(filename) if _is_cnf_?(filename) then @cnffiles.first rescue '' else [find_files(filename,true)].flatten.first || '' end end def find_files(filename,first=false) if _is_cnf_?(filename) then result = @cnffiles.dup else if @remember then # stamp = "#{filename}--#{@format}--#{@engine}--#{@progname}" stamp = "#{filename}--#{@engine}--#{@progname}" return @found[stamp] if @found.key?(stamp) end pathlist = expanded_path(filename) result = [] filelist = if @files.key?(filename) then @files[filename].uniq else nil end done = false if pathlist.size == 0 then if FileTest.file?(filename) then done = true result << '.' end else pathlist.each do |path| doscan = if path =~ /^\!\!/o then false else true end recurse = if path =~ /\/\/$/o then true else false end pathname = path.dup pathname.gsub!(/^\!+/o, '') done = false if not done and filelist then # checking for exact match if filelist.include?(pathname) then result << pathname done = true end if not done and recurse then # checking for fuzzy // pathname.gsub!(/\/+$/o, '/.*') # pathname.gsub!(/\/\//o,'/[\/]*/') pathname.gsub!(/\/\//o,'/.*?/') re = /^#{pathname}/ filelist.each do |f| if re =~ f then result << f # duplicates will be filtered later done = true end break if done end end end if not done and doscan then # checking for path itself pname = pathname.sub(/\.\*$/,'') if not pname =~ /\*/o and FileTest.file?(File.join(pname,filename)) then result << pname done = true end end break if done and first end end if not done and @scandisk then pathlist.each do |path| pathname = path.dup unless pathname.gsub!(/^\!+/o, '') then # !! prevents scan recurse = pathname.gsub!(/\/+$/o, '') complex = pathname.gsub!(/\/\//o,'/*/') if recurse then if complex then if ok = File.glob_file("#{pathname}/**/#{filename}") then result << File.dirname(ok) done = true end elsif ok = File.locate_file(pathname,filename) then result << File.dirname(ok) done = true end elsif complex then if ok = File.glob_file("#{pathname}/#{filename}") then result << File.dirname(ok) done = true end elsif FileTest.file?(File.join(pathname,filename)) then result << pathname done = true end break if done and first end end end result = result.uniq.collect do |pathname| File.join(pathname,filename) end @found[stamp] = result if @remember end return result # redundant end end class KpseFast class FileData attr_accessor :tag, :name, :size, :date def initialize(tag=0,name=nil,size=nil,date=nil) @tag, @name, @size, @date = tag, name, size, date end def FileData.sizes(a) a.collect do |aa| aa.size end end def report case @tag when 1 then "deleted | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" when 2 then "present | #{@size.to_s.rjust(8)} | #{@date.strftime('%m/%d/%Y %I:%M')} | #{@name}" when 3 then "obsolete | #{' '*8} | #{' '*16} | #{@name}" end end end def analyze_files(filter='',strict=false,sort='',delete=false) puts("command line = #{ARGV.join(' ')}") puts("number of files = #{@files.size}") puts("filter pattern = #{filter}") puts("loaded cnf files = #{@cnffiles.join(' ')}") puts('') if filter.gsub!(/^not:/,'') then def the_same(filter,filename) not filter or filter.empty? or /#{filter}/ !~ filename end else def the_same(filter,filename) not filter or filter.empty? or /#{filter}/ =~ filename end end @files.keys.each do |name| if @files[name].size > 1 then data = Array.new @files[name].each do |path| filename = File.join(path,name) # if not filter or filter.empty? or /#{filter}/ =~ filename then if the_same(filter,filename) then if FileTest.file?(filename) then if delete then data << FileData.new(1,filename,File.size(filename),File.mtime(filename)) begin File.delete(filename) if delete rescue end else data << FileData.new(2,filename,File.size(filename),File.mtime(filename)) end else # data << FileData.new(3,filename) end end end if data.length > 1 then if strict then # if data.collect do |d| d.size end.uniq! then # data.sort! do |a,b| b.size <=> a.size end # data.each do |d| puts d.report end # puts '' # end data.sort! do |a,b| if a.size and b.size then b.size <=> a.size else 0 end end bunch = Array.new done = false data.each do |d| if bunch.size == 0 then bunch << d elsif bunch[0].size == d.size then bunch << d else if bunch.size > 1 then bunch.each do |b| puts b.report end done = true end bunch = [d] end end puts '' if done else case sort when 'size' then data.sort! do |a,b| a.size <=> b.size end when 'revsize' then data.sort! do |a,b| b.size <=> a.size end when 'date' then data.sort! do |a,b| a.date <=> b.date end when 'revdate' then data.sort! do |a,b| b.date <=> a.date end end data.each do |d| puts d.report end puts '' end end end end end end # if false then # k = KpseFast.new # (root) # k.set_test_patterns # k.load_cnf # k.expand_variables # k.load_lsr # k.show_test_patterns # puts k.list_variables # puts k.list_expansions # k.list_lsr # puts k.expansion("$TEXMF") # puts k.expanded_path("TEXINPUTS","context") # k.progname, k.engine, k.format = 'context', 'pdftex', 'tfm' # k.scandisk = false # == must_exist # k.expand_variables # 10.times do |i| puts k.find_file('texnansi-lmr10.tfm') end # puts "expand braces $TEXMF" # puts k.expand_braces("$TEXMF") # puts "expand path $TEXMF" # puts k.expand_path("$TEXMF") # puts "expand var $TEXMF" # puts k.expand_var("$TEXMF") # puts "expand path $TEXMF" # puts k.show_path('tfm') # puts "expand value $TEXINPUTS" # puts k.var_value("$TEXINPUTS") # puts "expand value $TEXINPUTS.context" # puts k.var_value("$TEXINPUTS.context") # exit # end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/system.rb0000644000175000017500000000704712073425545025431 0ustar norbertnorbert# module : base/system # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com require "rbconfig" module System @@mswindows = RbConfig::CONFIG['host_os'] =~ /mswin/ @@binpaths = ENV['PATH'].split(File::PATH_SEPARATOR) @@binsuffixes = if $mswindows then ['.exe','.com','.bat'] else ['','.sh','.csh'] end @@located = Hash.new @@binnames = Hash.new if @@mswindows then @@binnames['ghostscript'] = ['gswin32c.exe','gs.cmd','gs.bat'] @@binnames['imagemagick'] = ['imagemagick.exe','convert.exe'] @@binnames['inkscape'] = ['inkscape.exe'] else @@binnames['ghostscript'] = ['gs'] @@binnames['imagemagick'] = ['convert'] @@binnames['inkscape'] = ['inkscape'] end def System.null if @@mswindows then 'nul' else '/dev/null' end end def System.unix? not @@mswindows end def System.mswin? @@mswindows end def System.binnames(str) if @@binnames.key?(str) then @@binnames[str] else [str] end end def System.prependengine(str) if str =~ /^\S+\.(pl|rb|lua|py)/io then case $1 when 'pl' then return "perl #{str}" when 'rb' then return "ruby #{str}" when 'lua' then return "lua #{str}" when 'py' then return "python #{str}" end end return str end def System.locatedprogram(program) if @@located.key?(program) then return @@located[program] else System.binnames(program).each do |binname| if binname =~ /\..*$/io then @@binpaths.each do |path| if FileTest.file?(str = File.join(path,binname)) then return @@located[program] = System.prependengine(str) end end end binname.gsub!(/\..*$/io, '') @@binpaths.each do |path| @@binsuffixes.each do |suffix| if FileTest.file?(str = File.join(path,"#{binname}#{suffix}")) then return @@located[program] = System.prependengine(str) end end end end end return @@located[program] = "texmfstart #{program}" end def System.command(program,arguments='') if program =~ /^(.*?) (.*)$/ then program = System.locatedprogram($1) + ' ' + $2 else program = System.locatedprogram(program) end program = program + ' ' + arguments if ! arguments.empty? program.gsub!(/\s+/io, ' ') #program.gsub!(/(\/\.\/)+/io, '/') program.gsub!(/\\/io, '/') return program end def System.run(program,arguments='',pipe=false,collect=false) if pipe then if collect then `#{System.command(program,arguments)} 2>&1` else `#{System.command(program,arguments)}` end else system(System.command(program,arguments)) end end def System.pipe(program,arguments='',collect=false) System.run(program,arguments,true) end def System.safepath(path) if path.match(/ /o) then "\"#{path}\"" else path end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/merge.rb0000644000175000017500000001020611024176655025173 0ustar norbertnorbert# module : base/merge # copyright : PRAGMA Advanced Document Engineering # version : 2006 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # --selfmerg ewill create stand alone script (--selfcleanup does the opposite) # this module will package all the used modules in the file itself # so that we can relocate the file at wish, usage: # # merge: # # unless SelfMerge::ok? && SelfMerge::merge then # puts("merging should happen on the path were the base inserts reside") # end # # cleanup: # # unless SelfMerge::cleanup then # puts("merging should happen on the path were the base inserts reside") # end module SelfMerge @@kpsemergestart = "\# kpse_merge_start" @@kpsemergestop = "\# kpse_merge_stop" @@kpsemergefile = "\# kpse_merge_file: " @@kpsemergedone = "\# kpse_merge_done: " @@filename = File.basename($0) @@ownpath = File.expand_path(File.dirname($0)) @@modroot = '(base|graphics|rslb|www)' # needed in regex in order not to mess up SelfMerge @@modules = $".collect do |file| File.expand_path(file) end @@modules.delete_if do |file| file !~ /^#{@@ownpath}\/#{@@modroot}.*$/i end def SelfMerge::ok? begin @@modules.each do |file| return false unless FileTest.file?(file) end rescue return false else return true end end def SelfMerge::merge begin if SelfMerge::ok? && rbfile = IO.read(@@filename) then begin inserts = "#{@@kpsemergestart}\n\n" @@modules.each do |file| inserts << "#{@@kpsemergefile}'#{file}'\n\n" inserts << IO.read(file).gsub(/^#.*?\n$/,'') inserts << "\n\n" end inserts << "#{@@kpsemergestop}\n\n" # no gsub! else we end up in SelfMerge rbfile.sub!(/#{@@kpsemergestart}\s*#{@@kpsemergestop}/moi) do inserts end rbfile.gsub!(/^(.*)(require [\"\'].*?#{@@modroot}.*)$/) do pre, post = $1, $2 if pre =~ /#{@@kpsemergedone}/ then "#{pre}#{post}" else "#{pre}#{@@kpsemergedone}#{post}" end end rescue return false else begin File.open(@@filename,'w') do |f| f << rbfile end rescue return false end end end rescue return false else return true end end def SelfMerge::cleanup begin if rbfile = IO.read(@@filename) then begin rbfile.sub!(/#{@@kpsemergestart}(.*)#{@@kpsemergestop}\s*/moi) do "#{@@kpsemergestart}\n\n#{@@kpsemergestop}\n\n" end rbfile.gsub!(/^(.*#{@@kpsemergedone}.*)$/) do str = $1 if str =~ /require [\"\']/ then str.gsub(/#{@@kpsemergedone}/, '') else str end end rescue return false else begin File.open(@@filename,'w') do |f| f << rbfile end rescue return false end end end rescue return false else return true end end def SelfMerge::replace if SelfMerge::ok? then SelfMerge::cleanup SelfMerge::merge end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/logger.rb0000644000175000017500000000502312130411274025340 0ustar norbertnorbert# module : base/logger # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com require 'thread' # The next calls are valid: # @log.report('a','b','c', 'd') # @log.report('a','b',"c #{d}") # @log.report("a b c #{d}") # Keep in mind that "whatever #{something}" is two times faster than # 'whatever ' + something or ['whatever',something].join and that # when verbosity is not needed the following is much faster too: # @log.report('a','b','c', 'd') if @log.verbose? # @log.report('a','b',"c #{d}") if @log.verbose? # @log.report("a b c #{d}") if @log.verbose? # The last three cases are equally fast when verbosity is turned off. # Under consideration: verbose per instance class Logger @@length = 0 @@verbose = false def initialize(tag=nil,length=0,verbose=false) @tag = tag || '' @@verbose = @@verbose || verbose @@length = @tag.length if @tag.length > @@length @@length = length if length > @@length end def report(*str) begin case str.length when 0 print("\n") return true when 1 # message = str.first message = str.first.join(' ') else message = [str].flatten.collect{|s| s.to_s}.join(' ').chomp end if @tag.empty? then print("#{message}\n") else # try to avoid too many adjustments @tag = @tag.ljust(@@length) unless @tag.length == @@length print("#{@tag} | #{message}\n") end rescue end return true end def reportlines(*str) unless @tag.empty? then @tag = @tag.ljust(@@length) unless @tag.length == @@length end report([str].flatten.collect{|s| s.gsub(/\n/,"\n#{@tag} | ")}.join(' ')) end def debug(*str) report(str) if @@verbose end def error(*str) if ! $! || $!.to_s.empty? then report(str) else report(str,$!) end end def verbose @@verbose = true end def silent @@verbose = false end def verbose? @@verbose end # attr_reader :tag # alias fatal error # alias info debug # alias warn debug # alias debug? :verbose? end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/ctx.rb0000644000175000017500000004355711376503616024712 0ustar norbertnorbert# module : base/ctx # copyright : PRAGMA Advanced Document Engineering # version : 2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # todo: write systemcall for mpost to file so that it can be run # faster # report ? require 'base/system' require 'base/file' require 'base/switch' # has needsupdate, bad place require 'rexml/document' class CtxRunner attr_reader :environments, :modules, :filters, :flags, :modes @@suffix = 'prep' def initialize(jobname=nil,logger=nil) if @logger = logger then def report(str='') @logger.report(str) end else def report(str='') puts(str) end end @jobname = jobname @ctxname = nil @xmldata = nil @prepfiles = Hash.new @environments = Array.new @modules = Array.new @filters = Array.new @flags = Array.new @modes = Array.new @local = false @paths = Array.new end def register_path(str) @paths << str end def manipulate(ctxname=nil,defaultname=nil) if ctxname then @ctxname = ctxname @jobname = File.suffixed(@ctxname,'tex') unless @jobname else @ctxname = File.suffixed(@jobname,'ctx') if @jobname end if not @ctxname then report('no ctx file specified') return end if @ctxname !~ /\.[a-z]+$/ then @ctxname += ".ctx" end # name can be kpse:res-make.ctx if not FileTest.file?(@ctxname) then fullname, done = '', false if @ctxname =~ /^kpse:/ then begin if fullname = Kpse.found(@ctxname.sub(/^kpse:/,'')) then @ctxname, done = fullname, true end rescue # should not happen end else ['..','../..'].each do |path| begin fullname = File.join(path,@ctxname) if FileTest.file?(fullname) then @ctxname, done = fullname, true end rescue # probably strange join end break if done end if ! done then fullname = Kpse.found(@ctxname) if FileTest.file?(fullname) then @ctxname, done = fullname, true end end end if ! done && defaultname && FileTest.file?(defaultname) then report("using default ctxfile #{defaultname}") @ctxname, done = defaultname, true end if not done then report('no ctx file found') return false end end if FileTest.file?(@ctxname) then @xmldata = IO.read(@ctxname) else report('no ctx file found') return false end unless @xmldata =~ /^.*<\?xml.*?\?>/moi then report("ctx file #{@ctxname} is no xml file, skipping") return else report("loading ctx file #{@ctxname}") end if @xmldata then # out if a sudden rexml started to be picky about namespaces @xmldata.gsub!(//,"") end begin @xmldata = REXML::Document.new(@xmldata) rescue report('provide valid ctx file (xml error)') return else include(@xmldata,'ctx:include','name') end begin variables = Hash.new if @jobname then variables['job'] = @jobname end root = @xmldata.root REXML::XPath.each(root,"/ctx:job//ctx:flags/ctx:flag") do |flg| @flags << justtext(flg) end REXML::XPath.each(root,"/ctx:job//ctx:resources/ctx:environment") do |sty| @environments << justtext(sty) end REXML::XPath.each(root,"/ctx:job//ctx:resources/ctx:module") do |mod| @modules << justtext(mod) end REXML::XPath.each(root,"/ctx:job//ctx:resources/ctx:filter") do |fil| @filters << justtext(fil) end REXML::XPath.each(root,"/ctx:job//ctx:resources/ctx:mode") do |fil| @modes << justtext(fil) end begin REXML::XPath.each(root,"//ctx:block") do |blk| if @jobname && blk.attributes['pattern'] then root.delete(blk) unless @jobname =~ /#{blk.attributes['pattern']}/ else root.delete(blk) end end rescue end REXML::XPath.each(root,"//ctx:value[@name='job']") do |val| substititute(val,variables['job']) end REXML::XPath.each(root,"/ctx:job//ctx:message") do |mes| report("preprocessing: #{justtext(mes)}") end REXML::XPath.each(root,"/ctx:job//ctx:process/ctx:resources/ctx:environment") do |sty| @environments << justtext(sty) end REXML::XPath.each(root,"/ctx:job//ctx:process/ctx:resources/ctx:module") do |mod| @modules << justtext(mod) end REXML::XPath.each(root,"/ctx:job//ctx:process/ctx:resources/ctx:filter") do |fil| @filters << justtext(fil) end REXML::XPath.each(root,"/ctx:job//ctx:process/ctx:resources/ctx:mode") do |fil| @modes << justtext(fil) end REXML::XPath.each(root,"/ctx:job//ctx:process/ctx:flags/ctx:flag") do |flg| @flags << justtext(flg) end commands = Hash.new REXML::XPath.each(root,"/ctx:job//ctx:preprocess/ctx:processors/ctx:processor") do |pre| begin commands[pre.attributes['name']] = pre rescue end end suffix = @@suffix begin suffix = REXML::XPath.match(root,"/ctx:job//ctx:preprocess/@suffix").to_s rescue suffix = @@suffix else if suffix && suffix.empty? then suffix = @@suffix end end if (REXML::XPath.first(root,"/ctx:job//ctx:preprocess/ctx:processors/@local").to_s =~ /(yes|true)/io rescue false) then @local = true else @local = false end REXML::XPath.each(root,"/ctx:job//ctx:preprocess/ctx:files") do |files| REXML::XPath.each(files,"ctx:file") do |pattern| suffix = @@suffix begin suffix = REXML::XPath.match(root,"/ctx:job//ctx:preprocess/@suffix").to_s rescue suffix = @@suffix else if suffix && suffix.empty? then suffix = @@suffix end end preprocessor = pattern.attributes['processor'] if preprocessor and not preprocessor.empty? then begin variables['old'] = @jobname variables['new'] = "" REXML::XPath.each(pattern,"ctx:value") do |value| if name = value.attributes['name'] then substititute(value,variables[name.to_s]) end end rescue report('unable to resolve file pattern') return end pattern = justtext(pattern) oldfiles = Dir.glob(pattern) pluspath = false if oldfiles.length == 0 then report("no files match #{pattern}") if @paths.length > 0 then @paths.each do |p| oldfiles = Dir.glob("#{p}/#{pattern}") if oldfiles.length > 0 then pluspath = true break end end if oldfiles.length == 0 then report("no files match #{pattern} on path") end end end oldfiles.each do |oldfile| newfile = "#{oldfile}.#{suffix}" newfile = File.basename(newfile) if @local # or pluspath if File.expand_path(oldfile) != File.expand_path(newfile) && File.needsupdate(oldfile,newfile) then report("#{oldfile} needs preprocessing") begin File.delete(newfile) rescue # hope for the best end # there can be a sequence of processors preprocessor.split(',').each do |pp| if command = commands[pp] then # a lie: no command = REXML::Document.new(command.to_s) # don't infect original # command = command.deep_clone() # don't infect original command = command.elements["ctx:processor"] if suf = command.attributes['suffix'] then newfile = "#{oldfile}.#{suf}" end begin newfile = File.basename(newfile) if @local rescue end REXML::XPath.each(command,"ctx:old") do |value| replace(value,oldfile) end REXML::XPath.each(command,"ctx:new") do |value| replace(value,newfile) end report("preprocessing #{oldfile} into #{newfile} using #{pp}") variables['old'] = oldfile variables['new'] = newfile REXML::XPath.each(command,"ctx:value") do |value| if name = value.attributes['name'] then substititute(value,variables[name.to_s]) end end command = justtext(command) report(command) unless ok = System.run(command) then report("error in preprocessing file #{oldfile}") end begin oldfile = File.basename(oldfile) if @local rescue end end end if FileTest.file?(newfile) then File.syncmtimes(oldfile,newfile) else report("check target location of #{newfile}") end else report("#{oldfile} needs no preprocessing (same file)") end @prepfiles[oldfile] = FileTest.file?(newfile) end end end end rescue report("fatal error in preprocessing #{@ctxname}: #{$!}") end end def savelog(ctlname=nil) unless ctlname then if @jobname then ctlname = File.suffixed(@jobname,'ctl') elsif @ctxname then ctlname = File.suffixed(@ctxname,'ctl') else return end end if @prepfiles.length > 0 then if log = File.open(ctlname,'w') then log << "\n\n" if @local then log << "\n" else log << "\n" end @prepfiles.keys.sort.each do |prep| # log << "\t#{File.basename(prep)}\n" log << "\t#{prep}\n" end log << "\n" log.close end else begin File.delete(ctlname) rescue end end end private def include(xmldata,element='ctx:include',attribute='name') loop do begin more = false REXML::XPath.each(xmldata.root,element) do |e| begin name = e.attributes.get_attribute(attribute).to_s name = e.text.to_s if name.empty? name.strip! if name done = false if name and not name.empty? then ['.',File.dirname(@ctxname),'..','../..'].each do |path| begin fullname = if path == '.' then name else File.join(path,name) end if FileTest.file?(fullname) then if f = File.open(fullname,'r') and i = REXML::Document.new(f) then report("including ctx file #{name}") REXML::XPath.each(i.root,"*") do |ii| xmldata.root.insert_before(e,ii) more = true end end done = true end rescue end break if done end end report("no valid ctx inclusion file #{name}") unless done rescue Exception # skip this file ensure xmldata.root.delete(e) end end break unless more rescue Exception break # forget about inclusion end end end private def yes_or_no(b) if b then 'yes' else 'no' end end private # copied from rlxtools.rb def justtext(str) str = str.to_s str.gsub!(/<[^>]*?>/o, '') str.gsub!(/\s+/o, ' ') str.gsub!(/</o, '<') str.gsub!(/>/o, '>') str.gsub!(/&/o, '&') str.gsub!(/"/o, '"') str.gsub!(/[\/\\]+/o, '/') return str.strip end def substititute(value,str) if str then begin if value.attributes.key?('method') then str = filtered(str.to_s,value.attributes['method'].to_s) end if str.empty? && value.attributes.key?('default') then str = value.attributes['default'].to_s end value.insert_after(value,REXML::Text.new(str.to_s)) rescue Exception end end end def replace(value,str) if str then begin value.insert_after(value,REXML::Text.new(str.to_s)) rescue Exception end end end def filtered(str,method) str = str.to_s # to be sure case method when 'name' then # no path, no suffix case str when /^.*[\\\/](.+?)\..*?$/o then $1 when /^.*[\\\/](.+?)$/o then $1 when /^(.*)\..*?$/o then $1 else str end when 'path' then if str =~ /^(.+)([\\\/])(.*?)$/o then $1 else '' end when 'suffix' then if str =~ /^.*\.(.*?)$/o then $1 else '' end when 'nosuffix' then if str =~ /^(.*)\..*?$/o then $1 else str end when 'nopath' then if str =~ /^.*[\\\/](.*?)$/o then $1 else str end when 'base' then if str =~ /^.*[\\\/](.*?)$/o then $1 else str end when 'full' then str when 'complete' then str when 'expand' then File.expand_path(str).gsub(/\\/,"/") else str end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpse/0000755000175000017500000000000012162137554024511 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpse/drb.rb0000644000175000017500000000211010526734267025605 0ustar norbertnorbertrequire 'drb' require 'base/kpse/trees' class KpseServer attr_accessor :port def initialize(port=7000) @port = port end def start puts "starting drb service at port #{@port}" DRb.start_service("druby://localhost:#{@port}", KpseTrees.new) trap(:INT) do DRb.stop_service end DRb.thread.join end def stop # todo end end class KpseClient attr_accessor :port def initialize(port=7000) @port = port @kpse = nil end def start # only needed when callbacks are used / slow, due to Socket::getaddrinfo # DRb.start_service end def object @kpse = DRbObject.new(nil,"druby://localhost:#{@port}") end end # SERVER_URI="druby://localhost:8787" # # # Start a local DRbServer to handle callbacks. # # # # Not necessary for this small example, but will be required # # as soon as we pass a non-marshallable object as an argument # # to a dRuby call. # DRb.start_service # # timeserver = DRbObject.new_with_uri(SERVER_URI) context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpse/soap.rb0000644000175000017500000000413510526734267026011 0ustar norbertnorbertrequire 'soap/rpc/standaloneServer' require 'soap/rpc/driver' require 'base/kpse/trees' class KpseService < SOAP::RPC::StandaloneServer def on_init kpse = KpseTrees.new add_method(kpse, 'choose', 'files', 'environment') add_method(kpse, 'load', 'files', 'environment') add_method(kpse, 'expand_variables', 'tree') add_method(kpse, 'expand_braces', 'tree', 'str') add_method(kpse, 'expand_path', 'tree', 'str') add_method(kpse, 'expand_var', 'tree', 'str') add_method(kpse, 'show_path', 'tree', 'str') add_method(kpse, 'var_value', 'tree', 'str') add_method(kpse, 'find_file', 'tree', 'filename') add_method(kpse, 'find_files', 'tree', 'filename', 'first') end end class KpseServer @@url = 'http://kpse.thismachine.org/KpseService' attr_accessor :port def initialize(port=7000) @port = port @server = nil end def start puts "starting soap service at port #{@port}" @server = KpseService.new('KpseServer', @@url, '0.0.0.0', @port.to_i) trap(:INT) do @server.shutdown end status = @server.start end def stop @server.shutdown rescue false end end class KpseClient @@url = 'http://kpse.thismachine.org/KpseService' attr_accessor :port def initialize(port=7000) @port = port @kpse = nil end def start @kpse = SOAP::RPC::Driver.new("http://localhost:#{port}/", @@url) @kpse.add_method('choose','files', 'environment') @kpse.add_method('load','files', 'environment') @kpse.add_method('expand_variables', 'tree') @kpse.add_method('expand_braces', 'tree', 'str') @kpse.add_method('expand_path', 'tree', 'str') @kpse.add_method('expand_var', 'tree', 'str') @kpse.add_method('show_path', 'tree', 'str') @kpse.add_method('var_value', 'tree', 'str') @kpse.add_method('find_file', 'tree', 'filename') @kpse.add_method('find_files', 'tree', 'filename', 'first') end def object @kpse end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/kpse/trees.rb0000644000175000017500000000424110526734267026167 0ustar norbertnorbertrequire 'monitor' require 'base/kpsefast' class KpseTrees < Monitor def initialize @trees = Hash.new end def pattern(filenames) filenames.join('|').gsub(/\\+/o,'/').downcase end def choose(filenames,environment) current = pattern(filenames) load(filenames,environment) unless @trees[current] puts "enabling tree #{current}" current end def fetch(filenames,environment) # will send whole object ! current = pattern(filenames) load(filenames,environment) unless @trees[current] puts "fetching tree #{current}" @trees[current] end def load(filenames,environment) current = pattern(filenames) puts "loading tree #{current}" @trees[current] = KpseFast.new @trees[current].push_environment(environment) @trees[current].load_cnf(filenames) @trees[current].expand_variables @trees[current].load_lsr end def set(tree,key,value) case key when 'progname' then @trees[tree].progname = value when 'engine' then @trees[tree].engine = value when 'format' then @trees[tree].format = value end end def get(tree,key) case key when 'progname' then @trees[tree].progname when 'engine' then @trees[tree].engine when 'format' then @trees[tree].format end end def load_cnf(tree) @trees[tree].load_cnf end def load_lsr(tree) @trees[tree].load_lsr end def expand_variables(tree) @trees[tree].expand_variables end def expand_braces(tree,str) @trees[tree].expand_braces(str) end def expand_path(tree,str) @trees[tree].expand_path(str) end def expand_var(tree,str) @trees[tree].expand_var(str) end def show_path(tree,str) @trees[tree].show_path(str) end def var_value(tree,str) @trees[tree].var_value(str) end def find_file(tree,filename) @trees[tree].find_file(filename) end def find_files(tree,filename,first) @trees[tree].find_files(filename,first) end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/exa.rb0000644000175000017500000003355011244221744024652 0ustar norbertnorbert# \setuplayout[width=3cm] # # tex.setup.setuplayout.width.[integer|real|dimension|string|key] # tex.[mp]var.whatever.width.[integer|real|dimension|string|key] require 'fileutils' # require 'ftools' require 'digest/md5' # this can become a lua thing # no .*? but 0-9a-z\:\. because other too slow (and greedy) class Hash def subset(pattern) h = Hash.new r = /^#{pattern.gsub('.','\.')}/ self.keys.each do |k| h[k] = self[k].dup if k =~ r end return h end end module ExaEncrypt def ExaEncrypt.encrypt_base(logger, oldfilename, newfilename) if FileTest.file?(oldfilename) then logger.report("checking #{oldfilename}") if logger if data = IO.read(oldfilename) then done = false # cfg file: # # banner : exa configuration file # user : domain, name = password, projectlist # if data =~ /^\s*banner\s*\:\s*exa\s*configuration\s*file/ then data.gsub!(/^(\s*user\s*\:\s*.+?\s*\,\s*.+?\s*\=\s*)(.+?)(\s*\,\s*.+\s*)$/) do pre, password, post = $1, $2, $3 unless password =~ /MD5:/i then done = true password = "MD5:" + Digest::MD5.hexdigest(password).upcase end "#{pre}#{password}#{post}" end else data.gsub!(/]*?)>(.*?)<\/exa:password>/moi) do attributes, password = $1, $2 unless password =~ /^([0-9A-F][0-9A-F])+$/ then done = true password = Digest::MD5.hexdigest(password).upcase attributes = " encryption='md5'#{attributes}" end "#{password}" end end begin File.open(newfilename,'w') do |f| f.puts(data) end rescue logger.report("#{newfilename} cannot be written") if logger else logger.report("#{oldfilename} encrypted into #{newfilename}") if done and logger end end end end end module ExaModes @@modefile = 'examodes.tex' @@request = /(.*?<\/exa:request>)/mo @@redone = /]*?texified=([\'\"])yes\1.*?>/mo @@reload = /<(exa:variable)([^>]+?label\=)([\"\'])([0-9A-Za-z\-\.\:]+?)(\3[^\/]*?)>(.*?)<(\/exa:variable)>/mo @@recalc = /<(exa:variable)([^>]+?label\=)([\"\'])([0-9A-Za-z\-\.\:]+?)([\.\:]calcmath)(\3[^\/]*?)>(.*?)<(\/exa:variable)>/mo @@rename = /<(exa:variable)([^>]+?label\=)([\"\'])([0-9A-Za-z\-\.\:]+?)(\3[^\/]*?)>(.*?)<(\/exa:variable)>/mo @@refile = /<(exa:filename|exa:filelist)>(.*?)<(\/\1)>/mo def ExaModes.cleanup_request(logger,filename='request.exa',modefile=@@modefile) begin File.delete(filename+'.raw') ; rescue ; end begin File.delete(modefile) ; rescue ; end if FileTest.file?(filename) then data, done = nil, false begin data = IO.read(filename) rescue data = nil end if data =~ @@request and data !~ @@redone then data.gsub!(@@rename) do done = true '<' + $1 + $2 + $3 + $4 + $5 + '>' + texifiedstr($4,$6) + '<' + $7 + '>' end data.gsub!(@@refile) do done = true '<' + $1 + '>' + cleanpath($2) + '<' + $3 + '>' end data.gsub!(@@recalc) do done = true '<' + $1 + $2 + $3 + $4 + ":raw" + $6 + '>' + $7 + '<' + $8 + '>' + '<' + $1 + $2 + $3 + $4 + $6 + '>' + calculatortexmath($7,false) + '<' + $8 + '>' end if done then data.gsub!(@@request) do $1 + " texified='yes'" + $2 end begin File.copy(filename, filename+'.raw') ; rescue ; end begin logger.report("rewriting #{filename}") if logger File.open(filename,'w') do |f| f.puts(data) end rescue logger.report("#{filename} cannot be rewritten") if logger end end else logger.report("#{filename} is already ok") if logger end @variables = Hash.new data.scan(@@reload) do @variables[$4] = $5 end vars = @variables.subset('data.tex.var') mpvars = @variables.subset('data.tex.mpvar') modes = @variables.subset('data.tex.mode') setups = @variables.subset('data.tex.setup') if not (modes.empty? and setups.empty? and vars.empty? and mpvars.empty?) then begin File.open(modefile,'w') do |mod| logger.report("saving modes and setups in #{modefile}") if logger if not modes.empty? then for key in modes.keys do k = key.dup k.gsub!(/\./,'-') mod.puts("\\enablemode[#{k}-#{modes[key]}]\n") if modes[key] =~ /(on|yes|start)/o then # ! ! ! ! ! mod.puts("\\enablemode[#{k}]\n") end end mod.puts("\n\\readfile{cont-mod}{}{}\n") end if not setups.empty? then for key in setups.keys if key =~ /^(.+?)\.(.+?)\.(.+?)$/o then command, key, type, value = $1, $2, $3, setups[key] value = cleanedup(key,type,value) mod.puts("\\#{$1}[#{key}=#{value}]\n") elsif key =~ /^(.+?)\.(.+?)$/o then command, type, value = $1, $2, setups[key] mod.puts("\\#{$1}[#{value}]\n") end end end savevaroptions(vars, 'setvariables', mod) savevaroptions(mpvars,'setMPvariables',mod) end rescue logger.report("#{modefile} cannot be saved") if logger end else logger.report("#{modefile} is not created") if logger end end end private def ExaModes.autoparenthesis(str) if str =~ /[\+\-]/o then '[1]' + str + '[1]' else str end end def ExaModes.cleanedup(key,type,value) if type == 'dimension' then unless value =~ /(cm|mm|in|bp|sp|pt|dd|em|ex)/o value + 'pt' else value end elsif type == 'calcmath' then '{' + calculatortexmath(value,true) + '}' elsif type =~ /^filename|filelist$/ or key =~ /^filename|filelist$/ then cleanpath(value) else value end end def ExaModes.cleanpath(str) (str ||'').gsub(/\\/o,'/') end def ExaModes.texifiedstr(key,val) case key when 'filename' then cleanpath(val) when 'filelist' then cleanpath(val) else val end end def ExaModes.savevaroptions(vars,setvariables,mod) if not vars.empty? then for key in vars.keys do # var.whatever.width.dimension.value if key =~ /^(.+?)\.(.+?)\.(.+?)$/o then tag, key, type, value = $1, $2, $3, vars[key] value = cleanedup(key,type,value) mod.puts("\\#{setvariables}[#{tag}][#{key}=#{value}]\n") elsif key =~ /^(.+?)\.(.+?)$/o then tag, key, value = $1, $2, vars[key] mod.puts("\\#{setvariables}[#{tag}][#{key}=#{value}]\n") end end end end def ExaModes.calculatortexmath(str,tx=true) if tx then bdisp, edisp = "\\displaymath\{", "\}" binln, einln = "\\inlinemath\{" , "\}" egraf = "\\endgraf" else bdisp, edisp = "", "" binln, einln = "" , "" egraf = "

" end str.gsub!(/\n\s*\n+/moi, "\\ENDGRAF ") str.gsub!(/(\[\[)\s*(.*?)\s*(\]\])/mos) do $1 + docalculatortexmath($2) + $3 end str.gsub!(/(\\ENDGRAF)+\s*(\[\[)\s*(.*?)\s*(\]\])/moi) do $1 + bdisp + $3 + edisp end str.gsub!(/(\[\[)\s*(.*?)\s*(\]\])/o) do binln + $2 + einln end str.gsub!(/\\ENDGRAF/mos, egraf) str end def ExaModes.docalculatortexmath(str) str.gsub!(/\n/o) { ' ' } str.gsub!(/\s+/o) { ' ' } str.gsub!(/>/o) { '>' } str.gsub!(/</o) { '<' } str.gsub!(/&.*?;/o) { } level = 0 str.gsub!(/([\(\)])/o) do |chr| if chr == '(' then level = level + 1 chr = '[' + level.to_s + ']' elsif chr == ')' then chr = '[' + level.to_s + ']' level = level - 1 end chr end # ...E... loop do break unless str.gsub!(/([\d\.]+)E([\-\+]{0,1}[\d\.]+)/o) do "\{\\SCINOT\{#{$1}\}\{#{$2}\}\}" end end # ^-.. loop do break unless str.gsub!(/\^([\-\+]*\d+)/o) do "\^\{#{$1}\}" end end # ^(...) loop do break unless str.gsub!(/\^(\[\d+\])(.*?)\1/o) do "\^\{#{$2}\}" end end # 1/x^2 loop do break unless str.gsub!(/([\d\w\.]+)\/([\d\w\.]+)\^([\d\w\.]+)/o) do "@\{#{$1}\}\{#{$2}\^\{#{$3}\}\}" end end # int(a,b,c) loop do break unless str.gsub!(/(int|sum|prod)(\[\d+\])(.*?),(.*?),(.*?)\2/o) do "\\#{$1.upcase}\^\{#{$4}\}\_\{#{$5}\}\{#{autoparenthesis($3)}\}" end end # int(a,b) loop do break unless str.gsub!(/(int|sum|prod)(\[\d+\])(.*?),(.*?)\2/o) do "\\#{$1.upcase}\_\{#{$4}\}\{#{autoparenthesis($3)}\}" end end # int(a) loop do break unless str.gsub!(/(int|sum|prod)(\[\d+\])(.*?)\2/o) do "\\#{$1.upcase}\{#{autoparenthesis($3)}\}" end end # sin(x) => {\sin(x)} loop do break unless str.gsub!(/(median|min|max|round|sqrt|sin|cos|tan|sinh|cosh|tanh|ln|log)\s*(\[\d+\])(.*?)\2/o) do "\{\\#{$1.upcase}\{#{$2}#{$3}#{$2}\}\}" end end # mean str.gsub!(/(mean)(\[\d+\])(.*?)\2/o) do "\{\\OVERLINE\{#{$3}\}\}" end # sin x => {\sin(x)} # ... # (1+x)/(1+x) => \frac{1+x}{1+x} loop do break unless str.gsub!(/(\[\d+\])(.*?)\1\/(\[\d+\])(.*?)\3/o) do "@\{#{$2}\}\{#{$4}\}" end end # (1+x)/x => \frac{1+x}{x} loop do break unless str.gsub!(/(\[\d+\])(.*?)\1\/([a-zA-Z0-9]+)/o) do "@\{#{$2}\}\{#{$3}\}" end end # 1/(1+x) => \frac{1}{1+x} loop do break unless str.gsub!(/([a-zA-Z0-9]+)\/(\[\d+\])(.*?)\2/o) do "@\{#{$1}\}\{#{$3}\}" end end # 1/x => \frac{1}{x} loop do break unless str.gsub!(/([a-zA-Z0-9]+)\/([a-zA-Z0-9]+)/o) do "@\{#{$1}\}\{#{$2}\}" end end # str.gsub!(/\@/o) do "\\FRAC " end str.gsub!(/\*/o) do " " end str.gsub!(/\<\=/o) do "\\LE " end str.gsub!(/\>\=/o) do "\\GE " end str.gsub!(/\=/o) do "\\EQ " end str.gsub!(/\/) do "\\GT " end str.gsub!(/(D)(\[\d+\])(.*?)\2/o) do "\{\\FRAC\{\\MBOX{d}\}\{\\MBOX{d}x\}\{#{$2}#{$3}#{$2}\}\}" end str.gsub!(/(exp)(\[\d+\])(.*?)\2/o) do "\{e^\{#{$3}\}\}" end str.gsub!(/(abs)(\[\d+\])(.*?)\2/o) do "\{\\left\|#{$3}\\right\|\}" end str.gsub!(/D([x|y])/o) do "\\FRAC\{\{\\rm d\}#{$1}\}\{\{\\rm d\}x\}" end str.gsub!(/D([f|g])(\[\d+\])(.*?)\2/o) do "\{\\rm #{$1}\}'#{$2}#{$3}#{$2}" end str.gsub!(/([f|g])(\[\d+\])(.*?)\2/o) do "\{\\rm #{$1}\}#{$2}#{$3}#{$2}" end str.gsub!(/(pi|inf)/io) do "\\#{$1} " end loop do break unless str.gsub!(/(\[\d+?\])(.*?)\1/o) do "\\left(#{$2}\\right)" end end str.gsub!(/\\([A-Z]+?)([\s\{\^\_\\])/io) do "\\#{$1.downcase}#{$2}" end str end end # ExaModes.cleanup_request() context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/variables.rb0000644000175000017500000000537410526734267026063 0ustar norbertnorbert# module : base/variables # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # ['base/tool','tool'].each do |r| begin require r ; rescue Exception ; else break ; end ; end require 'base/tool' class Hash def nothing?(id) ! self[id] || self[id].empty? end def subset(pattern) h = Hash.new p = pattern.gsub(/([\.\:\-])/) do "\\#{$1}" end r = /^#{p}/ self.keys.each do |k| h[k] = self[k].dup if k =~ r end return h end end class ExtendedHash < Hash @@re_var_a = /\%(.*?)\%/ @@re_var_b = /\$\((.*?)\)/ def set(key,value='',resolve=true) if value then self[key] = if resolve then resolved(value.to_s) else value.to_s end else self[key] = '' end end def replace(key,value='') self[key] = value if self?(key) end def get(key,default='') if self.key?(key) then self[key] else default end end def true?(key) self[key] =~ /^(yes|on|true|enable|enabled|y|start)$/io rescue false end def resolved(str) begin str.to_s.gsub(@@re_var_a) do self[$1] || '' end.gsub(@@re_var_b) do self[$1] || '' end rescue str.to_s rescue '' end end def check(key,default='') if self.key?(key) then if self[key].empty? then self[key] = (default || '') end else self[key] = (default || '') end end def checked(key,default='') if self.key?(key) then if self[key].empty? then default else self[key] end else default end end def empty?(key) self[key].empty? end # def downcase(key) # self[key].downcase! # end end # the next one is obsolete so we need to replace things module Variables def setvariable(key,value='') @variables[key] = value end def replacevariable(key,value='') @variables[key] = value if @variables.key?(key) end def getvariable(key,default='') if @variables.key?(key) then @variables[key] else default end end def truevariable(key) @variables[key] =~ /^(yes|on|true)$/io rescue false end def checkedvariable(str,default='') if @variables.key?(key) then if @variables[key].empty? then default else @variables[key] end else default end end def report(*str) @logger.report(*str) end def debug(*str) @logger.debug(str) end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/mp.rb0000644000175000017500000001114011024176655024506 0ustar norbertnorbert# module : base/mp # copyright : PRAGMA Advanced Document Engineering # version : 2005-2006 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com module MPTools @@definitions, @@start, @@stop, @@before, @@after = Hash.new, Hash.new, Hash.new, Hash.new, Hash.new @@definitions['plain'] = <0 \\vrule width1sp height\\dimen1 depth\\dimen2 \\else \\vrule width1sp height1sp depth0sp\\relax \\fi\\egroup \\ht0=0pt \\dp0=0pt \\box0 \\egroup} EOT @@start ['plain'] = "" @@before['plain'] = "\\mpxshipout" @@after ['plain'] = "\\stopmpxshipout" @@stop ['plain'] = "\\end{document}" @@definitions['context'] = <0 \\vrule width 1sp height \\dimen1 depth \\dimen2 \\else \\vrule width 1sp height 1sp depth 0sp \\relax \\fi \\egroup \\ht0=0pt \\dp0=0pt \\loadallfontmapfiles \\box0 \\egroup} \\fi \\ifx\\starttext\\undefined \\let\\starttext\\relax \\def\\stoptext{\\end{document}} \\fi EOT @@start ['context'] = "\\starttext" @@before['context'] = "\\startMPXpage" @@after ['context'] = "\\stopMPXpage" @@stop ['context'] = "\\stoptext" # todo: \usemodule[m-mpx ] and test fo defined def MPTools::mptotex(from,to=nil,method='plain') begin if from && data = IO.read(from) then f = if to then File.open(to,'w') else $stdout end f.puts("% file: #{from}") f.puts("") f.puts(@@definitions[method]) unless @@start[method].empty? then f.puts("") f.puts(@@start[method]) end data.gsub!(/([^\\])%.*?$/mo) do $1 end data.scan(/(verbatim|b)tex\s*(.*?)\s*etex/mo) do tag, text = $1, $2 f.puts("") if tag == 'b' then f.puts(@@before[method]) f.puts("#{text}%") f.puts(@@after [method]) else f.puts("#{text}") end f.puts("") end f.puts("") f.puts(@@stop[method]) f.close else return false end rescue File.delete(to) rescue false return false else return true end end @@splitMPlines = false def MPTools::splitmplines(str) if @@splitMPlines then btex, verbatimtex, strings, result = Array.new, Array.new, Array.new, str.dup # protect texts result.gsub!(/btex\s*(.*?)\s*etex/) do btex << $1 "btex(#{btex.length-1})" end result.gsub!(/verbatimtex\s*(.*?)\s*etex/) do verbatimtex << $1 "verbatimtex(#{verbatimtex.length-1})" end result.gsub!(/\"(.*?)\"/) do strings << $1 "\"#{strings.length-1}\"" end result.gsub!(/\;/) do ";\n" end result.gsub!(/(.{80,})(\-\-\-|\-\-|\.\.\.|\.\.)/) do "#{$1}#{$2}\n" end result.gsub!(/\n[\s\n]+/moi) do "\n" end result.gsub!(/btex\((\d+)\)/) do "btex #{btex[$1.to_i]} etex" end result.gsub!(/verbatimtex\((\d+)\)/) do "verbatimtex #{verbatimtex[$1.to_i]} etex" end result.gsub!(/\"(\d+)\"/) do "\"#{strings[$1.to_i]}\"" end # return result # let's catch xetex bug return result.gsub(/\^\^(M|J)/o, "\n") else # return str # let's catch xetex bug return str.gsub(/\^\^(M|J)/o, "\n") end end end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/tool.rb0000644000175000017500000001743312073425545025062 0ustar norbertnorbert# module : base/tool # copyright : PRAGMA Advanced Document Engineering # version : 2002-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com require 'timeout' require 'socket' require 'rbconfig' module Tool $constructedtempdir = '' def Tool.constructtempdir(create,mainpath='',fallback='') begin mainpath += '/' unless mainpath.empty? timeout(5) do begin t = Time.now u = t.usec.to_s % [1..2] [0..3] pth = t.strftime("#{mainpath}%Y%m%d-%H%M%S-#{u}-#{Process.pid}") # # problems with 1.9 # # if pth == $constructedtempdir # # sleep(0.01) # retry # end pth == $constructedtempdir # Dir.mkdir(pth) if create $constructedtempdir = pth return pth rescue # sleep(0.01) retry end end rescue TimeoutError # ok rescue # ok end unless fallback.empty? begin pth = "#{mainpath}#{fallback}" mkdir(pth) if create $constructedtempdir = path return pth rescue return '.' end else return '.' end end def Tool.findtempdir(*vars) constructtempdir(false,*vars) end def Tool.maketempdir(*vars) constructtempdir(true,*vars) end # print maketempdir + "\n" # print maketempdir + "\n" # print maketempdir + "\n" # print maketempdir + "\n" # print maketempdir + "\n" def Tool.ruby_platform case RUBY_PLATFORM when /(mswin|bccwin|mingw|cygwin)/i then 'mswin' when /(linux)/i then 'linux' when /(netbsd|unix)/i then 'unix' when /(darwin|rhapsody|nextstep)/i then 'macosx' else 'unix' end end $defaultlineseparator = $/ # $RS in require 'English' def Tool.file_platform(filename) begin if f = open(filename,'rb') then str = f.read(4000) str.gsub!(/(.*?)\%\!PS/mo, "%!PS") # don't look into preamble crap f.close nn = str.count("\n") nr = str.count("\r") if nn>nr then return 2 elsif nn0 then return buffer.slice(0..length-1) else # when the path or file does not exist, nothing is returned # so we try to handle the path separately from the basename basename = File.basename(filename) pathname = File.dirname(filename) length = filemethod.call(pathname,buffer,260) if length>0 then return buffer.slice(0..length-1) + '/' + basename else return filename end end else # no danger return filename end end def Tool.shortpathname(filename) dowith_pathname(filename,GetShortPathName) end def Tool.longpathname(filename) dowith_pathname(filename,GetLongPathName) end else def Tool.shortpathname(filename) filename end def Tool.longpathname(filename) filename end end # print shortpathname("C:/Program Files/ABBYY FineReader 6.0/matrix.str")+ "!\n" # print shortpathname("C:/Program Files/ABBYY FineReader 6.0/matrix.strx")+ "!\n" def Tool.checksuffix(old) return old unless FileTest.file?(old) new = old unless new =~ /\./io # no suffix f = open(filename,'rb') if str = f.gets case str when /^\%\!PS/io # logging.report(filename, 'analyzed as EPS') new = new + '.eps' when /^\%PDF/io # logging.report(filename, 'analyzed as PDF') new = new + '.pdf' else # logging.report(filename, 'fallback as TIF') new = new + '.tif' end end f.close end new.sub!(/\.jpeg$/io) do '.jpg' end new.sub!(/\.tiff$/io) do '.tif' end new.sub!(/\.ai$/io) do '.eps' end new.sub!(/\.ai([a-z0-9]*)$/io) do '-' + $1 + '.eps' end new end def Tool.cleanfilename(old,logging=nil) return old if not FileTest.file?(old) new = checksuffix(simplefilename(old)) unless new == old begin # bugged, should only be name, not path File.rename(old,new) logging.report("renaming fuzzy name #{old} to #{new}") unless logging return old rescue logging.report("unable to rename fuzzy name #{old} to #{new}") unless logging end end return new end def Tool.servername host = Socket::gethostname begin Socket::gethostbyname(host)[0] rescue host end end # print file_platform(ARGV[0]) end context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/base/pdf.rb0000644000175000017500000000362411024176655024653 0ustar norbertnorbertmodule PDFview @files = Hash.new @opencalls = Hash.new @closecalls = Hash.new @allcalls = Hash.new @method = 'default' # 'xpdf' @opencalls['default'] = "pdfopen --file" # "pdfopen --back --file" @opencalls['xpdf'] = "xpdfopen" @closecalls['default'] = "pdfclose --file" @closecalls['xpdf'] = nil @allcalls['default'] = "pdfclose --all" @allcalls['xpdf'] = nil def PDFview.setmethod(method) @method = method end def PDFview.open(*list) begin [*list].flatten.each do |file| filename = fullname(file) if FileTest.file?(filename) then if @opencalls[@method] then result = `#{@opencalls[@method]} #{filename} 2>&1` @files[filename] = true end end end rescue end end def PDFview.close(*list) [*list].flatten.each do |file| filename = fullname(file) begin if @files.key?(filename) then if @closecalls[@method] then result = `#{@closecalls[@method]} #{filename} 2>&1` end else closeall return end rescue end @files.delete(filename) end end def PDFview.closeall begin if @allcalls[@method] then result = `#{@allcalls[@method]} 2>&1` end rescue end @files.clear end def PDFview.fullname(name) name + if name =~ /\.pdf$/ then '' else '.pdf' end end end # PDFview.open("t:/document/show-exa.pdf") # PDFview.open("t:/document/show-gra.pdf") # PDFview.close("t:/document/show-exa.pdf") # PDFview.close("t:/document/show-gra.pdf") context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/texexec.rb0000644000175000017500000010032012130411274024610 0ustar norbertnorbert#!/usr/bin/env ruby #encoding: ASCII-8BIT banner = ['TeXExec', 'version 6.2.1', '1997-2009', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'fileutils' # require 'ftools' # needed ? require 'base/switch' require 'base/logger' require 'base/variables' require 'base/system' require 'base/state' # needed ? require 'base/file' # needed ? require 'base/tex' require 'base/texutil' require 'base/kpse' class Commands include CommandBase def make if job = TEX.new(logger) then prepare(job) # bonus, overloads language switch ! job.setvariable('language','all') if @commandline.option('all') if @commandline.arguments.length > 0 then if @commandline.arguments.first == 'all' then job.setvariable('texformats',job.defaulttexformats) job.setvariable('mpsformats',job.defaultmpsformats) else job.setvariable('texformats',@commandline.arguments) job.setvariable('mpsformats',@commandline.arguments) end end job.makeformats job.inspect && Kpse.inspect if @commandline.option('verbose') seterror if job.error? end end def check if job = TEX.new(logger) then job.checkcontext job.inspect && Kpse.inspect if @commandline.option('verbose') end end def main if @commandline.arguments.length>0 then process else help end end def process if job = TEX.new(logger) then job.setvariable('files',@commandline.arguments) prepare(job) job.processtex job.inspect && Kpse.inspect if @commandline.option('verbose') seterror if job.error? end end def mptex if job = TEX.new(logger) then job.setvariable('files',@commandline.arguments) prepare(job) job.processmptex job.inspect && Kpse.inspect if @commandline.option('verbose') seterror if job.error? end end def mpxtex if job = TEX.new(logger) then job.setvariable('files',@commandline.arguments) prepare(job) job.processmpxtex job.inspect && Kpse.inspect if @commandline.option('verbose') seterror if job.error? end end def mpgraphic if job = TEX.new(logger) then job.setvariable('files',@commandline.arguments) prepare(job) job.processmpgraphic job.inspect && Kpse.inspect if @commandline.option('verbose') seterror if job.error? end end def mpstatic if job = TEX.new(logger) then job.setvariable('filename',@commandline.arguments.first) prepare(job) job.processmpstatic job.inspect && Kpse.inspect if @commandline.option('verbose') seterror if job.error? end end # hard coded goodies # to be redone as s-ctx-.. with vars passed as such def listing if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end if files.length > 0 then if f = File.open(job.tempfilename('tex'),'w') then backspace = @commandline.checkedoption('backspace', '1.5cm') topspace = @commandline.checkedoption('topspace', '1.5cm') pretty = @commandline.option('pretty') f << "% interface=english\n" f << "\\setupbodyfont[11pt,tt]\n" f << "\\setuplayout\n" f << " [topspace=#{topspace},backspace=#{backspace},\n" f << " header=0cm,footer=1.5cm,\n" f << " width=middle,height=middle]\n" f << "\\setuptyping[lines=yes]\n" f << "\\setuptyping[option=color]\n" if pretty f << "\\starttext\n"; files.each do |filename| report("list file: #{filename}") cleanname = cleantexfilename(filename).downcase f << "\\page\n" f << "\\setupfootertexts[\\tttf #{cleanname}][\\tttf \\pagenumber]\n" f << "\\typefile{#{filename}}\n" end f << "\\stoptext\n" f.close job.setvariable('interface','english') job.setvariable('simplerun',true) # job.setvariable('nooptionfile',true) job.setvariable('files',[job.tempfilename]) job.processtex else report('no files to list') end else report('no files to list') end job.cleanuptemprunfiles end end def figures # we replaced "texutil --figures ..." if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles fast = @commandline.option('fast') files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end if fast or (files.length > 0) then if f = File.open(job.tempfilename('tex'),'w') then files.delete("texexec.pdf") # Kpse.runscript('rlxtools', ['--identify','--collect'], files.join(' ')) unless fast system("texmfstart rlxtools --identify --collect #{files.join(' ')}") figures = @commandline.checkedoption('method', 'a').downcase paperoffset = @commandline.checkedoption('paperoffset', '0pt') backspace = @commandline.checkedoption('backspace', '1.5cm') topspace = @commandline.checkedoption('topspace', '1.5cm') boxtype = @commandline.checkedoption('boxtype','') f << "% format=english\n"; f << "\\usemodule[res-20]\n" f << "\\setuplayout\n"; f << " [topspace=#{topspace},backspace=#{backspace},\n" f << " header=1.5cm,footer=0pt,\n"; f << " width=middle,height=middle]\n"; if @commandline.option('fullscreen') then f << "\\setupinteraction\n"; f << " [state=start]\n"; f << "\\setupinteractionscreen\n"; f << " [option=max]\n"; end boxtype += "box" unless boxtype.empty? || (boxtype =~ /box$/io) f << "\\starttext\n"; f << "\\showexternalfigures[alternative=#{figures},offset=#{paperoffset},size=#{boxtype}]\n"; f << "\\stoptext\n"; f.close job.setvariable('interface','english') job.setvariable('simplerun',true) job.setvariable('files',[job.tempfilename]) job.processtex # File.silentdelete('rlxtools.rli') unless job.getvariable('keep') else report('no figures to show') end else report('no figures to show') end job.cleanuptemprunfiles end end def modules if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end msuffixes = ['tex','mkii','mkiv','mp','pl','pm','rb'] if files.length > 0 then files.each do |fname| fnames = Array.new if FileTest.file?(fname) then fnames << fname else msuffixes.each do |fsuffix| fnames << File.suffixed(fname,fsuffix) end end fnames.each do |ffname| if msuffixes.include?(File.splitname(ffname)[1]) && FileTest.file?(ffname) then if mod = File.open(job.tempfilename('tex'),'w') then if File.suffix(ffname) =~ /^(mkii|mkiv)$/o then markfile = $1 else markfile = nil end # Kpse.runscript('ctxtools',['--document'],ffname) system("texmfstart ctxtools --document #{ffname}") if ted = File.silentopen(File.suffixed(ffname,'ted')) then firstline = ted.gets if firstline =~ /interface=/o then mod << firstline else mod << "% interface=en\n" end ted.close else mod << "% interface=en\n" end mod << "\\usemodule[mod-01]\n" mod << "\\def\\ModuleNumber{1}\n" mod << "\\starttext\n" # todo: global file too mod << "\\readlocfile{#{File.suffixed(ffname,'ted')}}{}{}\n" mod << "\\stoptext\n" mod.close job.setvariable('interface','english') # redundant # job.setvariable('simplerun',true) # job.setvariable('nooptionfile',true) job.setvariable('files',[job.tempfilename]) result = File.unsuffixed(File.basename(ffname)) if markfile then result = result+'-'+markfile end job.setvariable('result',result) job.processtex # ["dvi", "pdf","ps"].each do |s| # File.silentrename(job.tempfilename(s),File.suffixed(ffname,s)); # end end end end end else report('no modules to process') end job.cleanuptemprunfiles end end def pdfsplit if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles filename = File.expand_path(@commandline.arguments.first) if FileTest.file?(filename) then basename = filename.sub(/\..*?$/,'') tempfile = File.suffixed(job.tempfilename,'tex') if basename != filename then info = `pdfinfo #{filename}` if info =~ /Pages:\s*(\d+)/ then nofpages = $1.to_i result = @commandline.checkedoption('result','texexec') nofpages.times do |i| if f = File.open(tempfile,"w") then n = i + 1 report("extracting page #{n}") f << "\\starttext\\startTEXpage\n" f << "\\externalfigure[#{filename}][object=no,page=#{n}]\n" f << "\\stopTEXpage\\stoptext\n" f.close job.setvariable('result',"#{result}-#{n}") job.setvariable('interface','english') # redundant job.setvariable('simplerun',true) job.setvariable('purge',true) job.setvariable('files',[tempfile]) job.processtex end end end end end job.cleanuptemprunfiles end end def arrangeoutput if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end if files.length > 0 then if f = File.open(job.tempfilename('tex'),'w') then emptypages = @commandline.checkedoption('addempty', '') paperoffset = @commandline.checkedoption('paperoffset', '0cm') textwidth = @commandline.checkedoption('textwidth', '0cm') backspace = @commandline.checkedoption('backspace', '0cm') topspace = @commandline.checkedoption('topspace', '0cm') f << "\\definepapersize\n" f << " [offset=#{paperoffset}]\n" f << "\\setuplayout\n" f << " [backspace=#{backspace},\n" f << " topspace=#{topspace},\n" f << " marking=on,\n" if @commandline.option('marking') f << " width=middle,\n" f << " height=middle,\n" f << " location=middle,\n" f << " header=0pt,\n" f << " footer=0pt]\n" unless @commandline.option('noduplex') then f << "\\setuppagenumbering\n" f << " [alternative=doublesided]\n" end f << "\\starttext\n" files.each do |filename| report("arranging file #{filename}") f << "\\insertpages\n" f << " [#{filename}]\n" f << " [#{emptypages}]\n" unless emptypages.empty? f << " [width=#{textwidth}]\n" end f << "\\stoptext\n" f.close job.setvariable('interface','english') job.setvariable('simplerun',true) job.setvariable('arrange',true) # job.setvariable('nooptionfile',true) job.setvariable('files',[job.tempfilename]) job.processtex else report('no files to arrange') end else report('no files to arrange') end job.cleanuptemprunfiles end end def selectoutput if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end if files.length > 0 then if f = File.open(job.tempfilename('tex'),'w') then selection = @commandline.checkedoption('selection', '') paperoffset = @commandline.checkedoption('paperoffset', '0cm') textwidth = @commandline.checkedoption('textwidth', '0cm') backspace = @commandline.checkedoption('backspace', '0cm') topspace = @commandline.checkedoption('topspace', '0cm') paperformat = @commandline.checkedoption('paperformat', 'A4*A4').split(/[\*x]/o) from, to = paperformat[0] || 'A4', paperformat[1] || paperformat[0] || 'A4' if from == 'fit' or to == 'fit' then f << "\\getfiguredimensions[#{files.first}]\n" if from == 'fit' then f << "\\expanded{\\definepapersize[from-fit][width=\\figurewidth,height=\\figureheight]}\n" from = 'from-fit' end if to == 'fit' then f << "\\expanded{\\definepapersize[to-fit][width=\\figurewidth,height=\\figureheight]}\n" to = 'to-fit' end end job.setvariable('paperformat','') # else overloaded later on f << "\\setuppapersize[#{from}][#{to}]\n" f << "\\definepapersize\n"; f << " [offset=#{paperoffset}]\n"; f << "\\setuplayout\n"; f << " [backspace=#{backspace},\n"; f << " topspace=#{topspace},\n"; f << " marking=on,\n" if @commandline.option('marking') f << " width=middle,\n"; f << " height=middle,\n"; f << " location=middle,\n"; f << " header=0pt,\n"; f << " footer=0pt]\n"; f << "\\setupexternalfigures\n"; f << " [directory=]\n"; f << "\\starttext\n"; unless selection.empty? then f << "\\filterpages\n" f << " [#{files.first}][#{selection}][width=#{textwidth}]\n" end f << "\\stoptext\n" f.close job.setvariable('interface','english') job.setvariable('simplerun',true) # job.setvariable('nooptionfile',true) job.setvariable('files',[job.tempfilename]) job.processtex else report('no files to selectt') end else report('no files to select') end job.cleanuptemprunfiles end end def copyoutput copyortrim(false,'copy') end def trimoutput copyortrim(true,'trim') end def copyortrim(trim=false,what='unknown') if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end if files.length > 0 then if f = File.open(job.tempfilename('tex'),'w') then scale = @commandline.checkedoption('scale') begin scale = (scale.to_f * 1000.0).to_i if scale.to_i < 10 rescue scale = 1000 end scale = scale.to_i paperoffset = @commandline.checkedoption('paperoffset', '0cm') f << "\\starttext\n" files.each do |filename| result = @commandline.checkedoption('result','texexec') begin if (filename !~ /^texexec/io) && (filename !~ /^#{result}/) then report("copying file: #{filename}") f << "\\getfiguredimensions\n" f << " [#{filename}]\n" f << " [scale=#{scale},\n" f << " page=1,\n" f << " size=trimbox\n" if trim f << "]\n" f << "\\definepapersize\n" f << " [copy]\n" f << " [width=\\figurewidth,\n" f << " height=\\figureheight]\n" f << "\\setuppapersize\n" f << " [copy][copy]\n" f << "\\setuplayout\n" f << " [page]\n" f << "\\setupexternalfigures\n" f << " [directory=]\n" f << "\\copypages\n" f << " [#{filename}]\n" f << " [scale=#{scale},\n" f << " marking=on,\n" if @commandline.option('markings') f << " size=trimbox,\n" if trim f << " offset=#{paperoffset}]\n" end rescue report("wrong specification") end end f << "\\stoptext\n" f.close job.setvariable('interface','english') job.setvariable('simplerun',true) # job.setvariable('nooptionfile',true) job.setvariable('files',[job.tempfilename]) job.processtex else report("no files to #{what}") end else report("no files to #{what}") end job.cleanuptemprunfiles end end # todo: make this styles def combineoutput if job = TEX.new(logger) then prepare(job) job.cleanuptemprunfiles files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end if files.length > 0 then if f = File.open(job.tempfilename('tex'),'w') then paperoffset = @commandline.checkedoption('paperoffset', '0cm') combination = @commandline.checkedoption('combination','2*2').split(/[\*x]/o) paperformat = @commandline.checkedoption('paperformat', 'A4*A4').split(/[\*x]/o) bannerheight = @commandline.checkedoption('bannerheight', '') pdftitle = @commandline.checkedoption('pdftitle', '') nx, ny = combination[0] || '2', combination[1] || combination[0] || '2' from, to = paperformat[0] || 'A4', paperformat[1] || paperformat[0] || 'A4' f << "\\setuppapersize[#{from}][#{to}]\n" f << "\\setuplayout\n" f << " [topspace=#{paperoffset},backspace=#{paperoffset},\n" f << " header=0pt,footer=0pt,\n" f << " width=middle,height=middle]\n" if bannerheight.empty? then f << "\\setuplayout[footer=1cm]\n" else f << "\\definelayer[page][width=\\paperwidth,height=\\paperheight]\n" f << "\\setupbackgrounds[page][background=page]\n" end if @commandline.option('nobanner') then f << "\\setuplayout[footer=0cm]\n" f << "\\setupbackgrounds[page][background=]\n" end f << "\\setupexternalfigures[directory=]\n" if not pdftitle.empty? then f << "\\setupinteraction[state=start,title={#{pdftitle}}]\n" end f << "\\starttext\n" files.each do |filename| result = @commandline.checkedoption('result','texexec') if (filename !~ /^texexec/io) && (filename !~ /^#{result}/) then report("combination file: #{filename}") cleanname = cleantexfilename(filename).downcase bannerstring = "\\tttf #{cleanname}\\quad\\quad\\currentdate\\quad\\quad\\pagenumber" if bannerheight.empty? then f << "\\setupfootertexts\n" f << " [#{bannerstring}]\n" else # for the moment we lack a better hook f << "\\setuptexttexts\n" f << " [{\\setlayerframed[page][preset=middlebottom][frame=off,height=#{bannerheight}]{#{bannerstring}}}]\n" end f << "\\combinepages[#{filename}][nx=#{nx},ny=#{ny}]\n" f << "\\page\n" end end f << "\\stoptext\n" f.close job.setvariable('interface','english') job.setvariable('simplerun',true) # job.setvariable('nooptionfile',true) job.setvariable('files',[job.tempfilename]) job.processtex else report('no files to list') end else report('no files to list') end job.cleanuptemprunfiles end end private def prepare(job) job.booleanvars.each do |k| job.setvariable(k,@commandline.option(k)) end job.stringvars.each do |k| job.setvariable(k,@commandline.option(k)) unless @commandline.option(k).empty? end job.standardvars.each do |k| job.setvariable(k,@commandline.option(k)) unless @commandline.option(k).empty? end job.knownvars.each do |k| job.setvariable(k,@commandline.option(k)) unless @commandline.option(k).empty? end job.setvariable('given.backend',job.getvariable('backend')) if (str = @commandline.option('engine')) && ! str.standard? && ! str.empty? then job.setvariable('texengine',str) elsif @commandline.oneof('pdfetex','pdftex','pdf') then job.setvariable('texengine','pdftex') elsif @commandline.oneof('xetex','xtx') then job.setvariable('texengine','xetex') elsif @commandline.oneof('aleph') then job.setvariable('texengine','aleph') elsif @commandline.oneof('petex') then job.setvariable('texengine','petex') else job.setvariable('texengine','standard') end if (str = @commandline.option('backend')) && ! str.standard? && ! str.empty? then job.setvariable('backend',str) elsif @commandline.oneof('pdfetex','pdftex','pdf') then job.setvariable('backend','pdftex') elsif @commandline.oneof('dvipdfmx','dvipdfm','dpx','dpm') then job.setvariable('backend','dvipdfmx') elsif @commandline.oneof('xetex','xtx') then job.setvariable('backend','xetex') elsif @commandline.oneof('aleph') then job.setvariable('backend','dvipdfmx') elsif @commandline.oneof('petex') then job.setvariable('backend','dvipdfmx') elsif @commandline.oneof('dvips','ps') then job.setvariable('backend','dvips') elsif @commandline.oneof('xdv') then job.setvariable('backend','xdv') else case job.getvariable('texengine') when 'pdfetex' then job.setvariable('backend','pdftex') when 'pdftex' then job.setvariable('backend','pdftex') when 'xetex' then job.setvariable('backend','xetex') when 'petex' then job.setvariable('backend','dvipdfmx') when 'aleph' then job.setvariable('backend','dvipdfmx') else job.setvariable('backend','standard') end end if (str = @commandline.option('engine')) && ! str.standard? && ! str.empty? then job.setvariable('mpsengine',@commandline.option('engine')) else job.setvariable('mpsengine','standard') end end def cleantexfilename(filename) filename.gsub(/([\$\_\#])/) do "\\$1" end.gsub(/([\~])/) do "\\string$1" end end end # we will make this pluggable, i.e. load plugins from base/tex that # extend the class and may even add switches # # commandline.load_plugins('base/tex') # # maybe it's too slow so for a while keep the --pdf* in here logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registeraction('make', 'make formats') commandline.registeraction('check', 'check versions') commandline.registeraction('process', 'process file') commandline.registeraction('mptex', 'process mp file') commandline.registeraction('mpxtex', 'process mpx file') commandline.registeraction('mpgraphic', 'process mp file to stand-alone graphics') commandline.registeraction('mpstatic', 'process mp/ctx file to stand-alone graphics') commandline.registeraction('listing', 'list of file content') commandline.registeraction('figures', 'generate overview of figures') commandline.registeraction('modules', 'generate module documentation') commandline.registeraction('pdfarrange', 'impose pages (booklets)') commandline.registeraction('pdfselect', 'select pages from file(s)') commandline.registeraction('pdfcopy', 'copy pages from file(s)') commandline.registeraction('pdftrim', 'trim pages from file(s)') commandline.registeraction('pdfcombine', 'combine multiple pages') commandline.registeraction('pdfsplit', 'split file in pages') # compatibility switch class Commands include CommandBase alias pdfarrange :arrangeoutput alias pdfselect :selectoutput alias pdfcopy :copyoutput alias pdftrim :trimoutput alias pdfcombine :combineoutput end # so far for compatibility, will move to tex @@extrastringvars = [ 'pages', 'background', 'backspace', 'topspace', 'boxtype', 'tempdir','bannerheight', 'printformat', 'method', 'scale', 'selection', 'combination', 'textwidth', 'addempty', 'logfile', 'startline', 'endline', 'startcolumn', 'endcolumn', 'scale' ] @@extrabooleanvars = [ 'centerpage', 'noduplex', 'color', 'pretty', 'fullscreen', 'screensaver', 'markings' ] if job = TEX.new(logger) then job.setextrastringvars(@@extrastringvars) job.setextrabooleanvars(@@extrabooleanvars) job.booleanvars.each do |k| commandline.registerflag(k) end job.stringvars.each do |k| commandline.registervalue(k,'') end job.standardvars.each do |k| commandline.registervalue(k,'standard') end job.knownvars.each do |k| commandline.registervalue(k,'') end end class Commands alias saved_help help def wrap_help(title, vars) report("") report(title) report("") r, n = '', 0 vars.sort.each do |s| if n == 5 then report(r) r, n = '', 1 else n += 1 end r << ' ' + s.to_s end report(r) unless r.empty? end def help saved_help if @commandline.option('all') then if job = TEX.new(logger) then wrap_help("boolean switches:", job.allbooleanvars) wrap_help("string switches:", job.allstringvars) end else report('') report('--help --all shows all switches') end end end # todo: register flags -> first one true commandline.registerflag('pdf') commandline.registerflag('pdftex') commandline.registerflag('pdfetex') commandline.registerflag('dvipdfmx') commandline.registerflag('dvipdfm') commandline.registerflag('dpx') commandline.registerflag('dpm') commandline.registerflag('dvips') commandline.registerflag('ps') commandline.registerflag('xetex') commandline.registerflag('xtx') commandline.registerflag('xdv') commandline.registerflag('aleph') commandline.registerflag('petex') commandline.registerflag('all') commandline.registerflag('fast') commandline.registerflag('sort') # generic commandline.registeraction('help') commandline.registeraction('version') commandline.registerflag('verbose') commandline.expand Commands.new(commandline,logger,banner).execute(commandline.action || 'main') # or just execute() context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/rlxtools.rb0000644000175000017500000003450211244221744025047 0ustar norbertnorbert#!/usr/bin/env ruby # program : rlxtools # copyright : PRAGMA Advanced Document Engineering # version : 2004-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com banner = ['RlxTools', 'version 1.0.1', '2004/2005', 'PRAGMA ADE/POD'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' require 'base/system' require 'base/kpse' require 'fileutils' # require 'ftools' require 'rexml/document' class Commands include CommandBase # # # # # texmfstart # --verbose # --iftouched=/,/ # pstopdf # --method=5 # --inputpath= # --outputpath=/ # # # # # # # # # figure # found # cow.pdf # pdf # . # lowres # lowres/ # 276.03125pt # 200.75pt # # def manipulate procname = @commandline.argument('first') || '' filename = @commandline.argument('second') || '' procname = Kpse.found(procname) if procname.empty? || ! FileTest.file?(procname) then report('provide valid manipulator file') elsif filename.empty? || ! FileTest.file?(filename) then report('provide valid resource log file') else begin data = REXML::Document.new(File.new(filename)) rescue report('provide valid resource log file (xml error)') return end begin proc = REXML::Document.new(File.new(procname)) rescue report('provide valid manipulator file (xml error)') return end report("manipulator file: #{procname}") report("resourcelog file: #{filename}") begin nofrecords, nofdone = 0, 0 REXML::XPath.each(data.root,"/rl:library/rl:usage") do |usage| nofrecords += 1 variables = Hash.new usage.elements.each do |e| variables[e.name] = e.text.to_s end report("processing record #{nofrecords} (#{variables['file'] || 'noname'}: #{variables.size} entries)") if conversion = variables['conversion'] then report("testing for conversion #{conversion}") if suffix = variables['suffix'] then suffix.downcase! if ! suffix.empty? && variables['file'] && variables['file'] !~ /\.([a-z]+)$/i then variables['file'] += ".#{suffix}" end if file = variables['file'] then report("conversion #{conversion} for suffix #{suffix} for file #{file}") else report("conversion #{conversion} for suffix #{suffix}") end pattern = "@name='#{conversion}' and @suffix='#{suffix}'" if steps = REXML::XPath.first(proc.root,"/rl:manipulators/rl:manipulator[#{pattern}]") then localsteps = steps.deep_clone ['rl:old','rl:new'].each do |tag| REXML::XPath.each(localsteps,tag) do |extras| REXML::XPath.each(extras,"rl:value") do |value| if name = value.attributes['name'] then substitute(value,variables[name.to_s] || '') end end end end old = REXML::XPath.first(localsteps,"rl:old") new = REXML::XPath.first(localsteps,"rl:new") if old && new then old, new = justtext(old.to_s), justtext(new.to_s) variables['old'], variables['new'] = old, new begin [old,new].each do |d| File.makedirs(File.dirname(d)) end rescue report("error during path creation") end report("old file #{old}") report("new file #{new}") level = if File.needsupdate(old,new) then 2 else 0 end else level = 1 end if level>0 then REXML::XPath.each(localsteps,"rl:step") do |command| REXML::XPath.each(command,"rl:old") do |value| replace(value,old) end REXML::XPath.each(command,"rl:new") do |value| replace(value,new) end REXML::XPath.each(command,"rl:value") do |value| if name = value.attributes['name'] then substitute(value,variables[name.to_s]) end end str = justtext(command.to_s) # str.gsub!(/(\.\/)+/io, '') report("command #{str}") System.run(str) unless @commandline.option('test') report("synchronizing #{old} and #{new}") File.syncmtimes(old,new) if level > 1 nofdone += 1 end else report("no need for a manipulation") end else report("no manipulator found") end else report("no suffix specified") end else report("no conversion needed") end end if nofdone > 0 then jobname = filename.gsub(/\.(.*?)$/,'') # not 'tuo' here tuoname = jobname + '.tuo' if FileTest.file?(tuoname) && (f = File.open(tuoname,'a')) then f.puts("%\n% number of rlx manipulations: #{nofdone}\n") f.close end end rescue report("error in manipulating files: #{$!}") end begin logname = "#{filename}.log" File.delete(logname) if FileTest.file?(logname) File.copy(filename,logname) rescue end end end private def justtext(str) str = str.to_s str.gsub!(/<[^>]*?>/o, '') str.gsub!(/\s+/o, ' ') str.gsub!(/</o, '<') str.gsub!(/>/o, '>') str.gsub!(/&/o, '&') str.gsub!(/"/o, '"') str.gsub!(/[\/\\]+/o, '/') return str.strip end def substitute(value,str='') if str then begin if value.attributes.key?('method') then str = filtered(str.to_s,value.attributes['method'].to_s) end if str.empty? && value.attributes.key?('default') then str = value.attributes['default'].to_s end value.insert_after(value,REXML::Text.new(str.to_s)) rescue Exception end end end def replace(value,str) if str then begin value.insert_after(value,REXML::Text.new(str.to_s)) rescue Exception end end end def filtered(str,method) str = str.to_s # to be sure case method when 'name' then # no path, no suffix case str when /^.*[\\\/](.+?)\..*?$/o then $1 when /^.*[\\\/](.+?)$/o then $1 when /^(.*)\..*?$/o then $1 else str end when 'path' then if str =~ /^(.+)([\\\/])(.*?)$/o then $1 else '' end when 'suffix' then if str =~ /^.*\.(.*?)$/o then $1 else '' end when 'nosuffix' then if str =~ /^(.*)\..*?$/o then $1 else str end when 'nopath' then if str =~ /^.*[\\\/](.*?)$/o then $1 else str end else str end end end class Commands include CommandBase @@xmlbanner = "" def identify(resultfile='rlxtools.rli') if @commandline.option('collect') then begin File.open(resultfile,'w') do |f| f << "#{@@xmlbanner}\n" f << "\n" @commandline.arguments.each do |filename| if state = do_identify(filename) then report("#{filename} is identified") f << state else report("unable to identify #{filename}") end end f << "\n" report("result saved in #{resultfile}") end rescue report("error in writing result") end else @commandline.arguments.each do |filename| if state = do_identify(filename) then begin File.open(filename+'.rli','w') do |f| f << "#{@@xmlbanner}\n" f << state end rescue report("error in identifying #{filename}") else report("#{filename} is identified") end else report("unable to identify #{filename}") end end end end private def do_identify(filename,centimeters=false) begin str = nil if FileTest.file?(filename) then # todo: use pdfinto for pdf files, identify is bugged if centimeters then result = `identify -units PixelsPerCentimeter -format \"x=%x,y=%y,w=%w,h=%h,b=%b\" #{filename}`.chomp.split(',') else result = `identify -units PixelsPerInch -format \"x=%x,y=%y,w=%w,h=%h,b=%b\" #{filename}`.chomp.split(',') end tags = Hash.new result.each do |r| if rr = r.split("=") then tags[rr[0]] = rr[1] end end size = (tags['b']||0).to_i width = unified(tags['w']||0,tags['x']||'1') height = unified(tags['h']||0,tags['y']||'1') if size > 0 then str = '' str << "\n" str << " #{size}\n" str << " #{File.dirname(filename).sub(/\\/o,'/')}\n" str << " #{width}\n" str << " #{height}\n" str << "\n" end else str = nil end rescue str = nil end return str end def unified(dim,res) case res when /([\d\.]+)\s*PixelsPerInch/io then sprintf("%.4fin",dim.to_f/$1.to_f) when /([\d\.]+)\s*PixelsPerCentimeter/io then sprintf("%.4fcm",dim.to_f/$1.to_f) when /([\d\.]+)\s*PixelsPerMillimeter/io then sprintf("%.4fmm",dim.to_f/$1.to_f) when /([\d\.]+)\s*PixelsPerPoint/io then sprintf("%.4fbp",dim.to_f/$1.to_f) else sprintf("%.4fbp",dim.to_f) end end end logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registeraction('manipulate', '[--test] manipulatorfile resourselog') commandline.registeraction('identify' , '[--collect] filename') commandline.registeraction('help') commandline.registeraction('version') commandline.registerflag('test') commandline.registerflag('collect') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'help') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/ctxtools.rb0000644000175000017500000032344711754241457025062 0ustar norbertnorbert#!/usr/bin/env ruby #encoding: ASCII-8BIT # program : ctxtools # copyright : PRAGMA Advanced Document Engineering # version : 2004-2005 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com # This script will harbor some handy manipulations on context # related files. # todo: move scite here # # todo: move kpse call to kpse class/module, faster and better # Taco Hoekwater on patterns and lig building (see 'agr'): # # Any direct use of a ligature (as accessed by \char or through active # characters) is wrong and will create faulty hyphenation. Normally, # when TeX sees "office", it has six tokens, and it knows from the # patterns that it can hyphenate between the "ff". It will build an # internal list of four nodes, like this: # # [char, o , ffi ] # [lig , ffi, c ,[f,f,i]] # [char, c , e ] # [char, e , NULL] # # as you can see from the ffi line, it has remembered the original # characters. While hyphenating, it temporarily changes back to # that, then re-instates the ligature afterwards. # # If you feed it the ligature directly, like so: # # [char, o , ffi ] # [char, ffi , c ] # [char, c , e ] # [char, e , NULL] # # it cannot do that (it tries to hyphenate as if the "ffi" was a # character), and the result is wrong hyphenation. banner = ['CtxTools', 'version 1.3.5', '2004/2008', 'PRAGMA ADE'] $: << File.expand_path(File.dirname($0)) ; $: << File.join($:.last,'lib') ; $:.uniq! require 'base/switch' require 'base/logger' require 'base/system' require 'base/kpse' require 'base/file' require 'rexml/document' require 'net/http' require 'fileutils' # require 'ftools' require 'kconv' exit if defined?(REQUIRE2LIB) class String def i_translate(element, attribute, category) self.gsub!(/(<#{element}.*?#{attribute}=)([\"\'])(.*?)\2/) do if category.key?($3) then # puts "#{element} #{$3} -> #{category[$3]}\n" if element == 'cd:inherit' # puts "#{element} #{$3} => #{category[$3]}\n" if element == 'cd:command' "#{$1}#{$2}#{category[$3]}#{$2}" else # puts "#{element} #{$3} -> ?\n" if element == 'cd:inherit' # puts "#{element} #{$3} => ?\n" if element == 'cd:command' "#{$1}#{$2}#{$3}#{$2}" # unchanged end end end def i_load(element, category) self.scan(/<#{element}.*?name=([\"\'])(.*?)\1.*?value=\1(.*?)\1/) do category[$2] = $3 end end def nosuffix(suffix) self.sub(/\.#{suffix}/,'') # no /o end end class Commands include CommandBase public def touchcontextfile dowithcontextfile(1) end def contextversion dowithcontextfile(2) end private def dowithcontextfile(action) maincontextfile = 'context.tex' unless FileTest.file?(maincontextfile) then begin maincontextfile = Kpse.found(maincontextfile,'context') rescue maincontextfile = '' end end unless maincontextfile.empty? then nextcontextfile = maincontextfile.sub(/context\.tex$/,"cont-new.tex") case action when 1 then touchfile(maincontextfile) touchfile(nextcontextfile,@@newcontextversion) when 2 then reportversion(maincontextfile) reportversion(nextcontextfile,@@newcontextversion) end end end @@contextversion = "\\\\contextversion" @@newcontextversion = "\\\\newcontextversion" def touchfile(filename,command=@@contextversion) if FileTest.file?(filename) then if data = IO.read(filename) then timestamp = Time.now.strftime('%Y.%m.%d %H:%M') prevstamp = '' begin data.gsub!(/#{command}\{(\d+\.\d+\.\d+.*?)\}/) do prevstamp = $1 "#{command.sub(/(\\)+/,"\\")}{#{timestamp}}" end rescue else begin File.delete(filename+'.old') rescue end begin File.copy(filename,filename+'.old') rescue end begin if f = File.open(filename,'w') then f.puts(data) f.close end rescue end end if prevstamp.empty? then report("#{filename} is not updated, no timestamp found") else report("#{filename} is updated from #{prevstamp} to #{timestamp}") end end else report("#{filename} is not found") end end def reportversion(filename,command=@@contextversion) version = 'unknown' begin if FileTest.file?(filename) && IO.read(filename).match(/#{command}\{(\d+\.\d+\.\d+.*?)\}/) then version = $1 end rescue end if @commandline.option("pipe") then print version else report("context version: #{version} (#{filename})") end end end class Commands include CommandBase public def jeditinterface editinterface('jedit') end def bbeditinterface editinterface('bbedit') end def sciteinterface editinterface('scite') end def rawinterface editinterface('raw') end private def editinterface(type='raw') return unless FileTest.file?("cont-en.xml") interfaces = @commandline.arguments if interfaces.empty? then interfaces = ['en','cs','de','it','nl','ro','fr'] end interfaces.each do |interface| begin collection = Hash.new mappings = Hash.new if f = open("keys-#{interface}.xml") then while str = f.gets do if str =~ /\/o then mappings[$1] = $2 end end f.close if f = open("cont-en.xml") then while str = f.gets do if str =~ /\/o then collection["start#{mappings[$1]}"] = '' collection["stop#{mappings[$1]}"] = '' elsif str =~ /\/o then collection["#{mappings[$1]}"] = '' end end f.close case type when 'jedit' then if f = open("context-jedit-#{interface}.xml", 'w') then f.puts("\n\n") f.puts("\n\n") f.puts("\n") f.puts(" \n") f.puts(" \n") collection.keys.sort.each do |name| f.puts(" \\#{name}\n") unless name.empty? end f.puts(" \n") f.puts(" \n") f.puts("\n") f.close end when 'bbedit' then if f = open("context-bbedit-#{interface}.xml", 'w') then f.puts("\n\n") f.puts("BBLMKeywordList\n") f.puts("\n") collection.keys.sort.each do |name| f.puts(" \\#{name}\n") unless name.empty? end f.puts("\n") f.close end when 'scite' then if f = open("cont-#{interface}-scite.properties", 'w') then i = 0 f.write("keywordclass.macros.context.#{interface}=") collection.keys.sort.each do |name| unless name.empty? then if i==0 then f.write("\\\n ") i = 5 else i = i - 1 end f.write("#{name} ") end end f.write("\n") f.close end else # raw collection.keys.sort.each do |name| puts("\\#{name}\n") unless name.empty? end end end end end end end end # class Commands # # include CommandBase # # public # # def translateinterface # # # since we know what kind of file we're dealing with, # # we do it quick and dirty instead of using rexml or # # xslt # # interfaces = @commandline.arguments # # if interfaces.empty? then # interfaces = ['cs','de','it','nl','ro','fr'] # else # interfaces.delete('en') # end # # interfaces.flatten.each do |interface| # # variables, constants, strings, list, data = Hash.new, Hash.new, Hash.new, '', '' # # keyfile, intfile, outfile = "keys-#{interface}.xml", "cont-en.xml", "cont-#{interface}.xml" # # report("generating #{keyfile}") # # begin # one = "texexec --make --all #{interface}" # two = "texexec --batch --silent --interface=#{interface} x-set-01" # if @commandline.option("force") then # system(one) # system(two) # elsif not system(two) then # system(one) # system(two) # end # rescue # end # # unless File.file?(keyfile) then # report("no #{keyfile} generated") # next # end # # report("loading #{keyfile}") # # begin # list = IO.read(keyfile) # rescue # list = empty # end # # if list.empty? then # report("error in loading #{keyfile}") # next # end # # list.i_load('cd:variable', variables) # list.i_load('cd:constant', constants) # list.i_load('cd:command' , strings) # # list.i_load('cd:element' , strings) # # report("loading #{intfile}") # # begin # data = IO.read(intfile) # rescue # data = empty # end # # if data.empty? then # report("error in loading #{intfile}") # next # end # # report("translating interface en to #{interface}") # # data.i_translate('cd:string' , 'value', strings) # data.i_translate('cd:variable' , 'value', variables) # data.i_translate('cd:parameter', 'name' , constants) # data.i_translate('cd:constant' , 'type' , variables) # data.i_translate('cd:variable' , 'type' , variables) # data.i_translate('cd:inherit' , 'name' , strings) # # data.i_translate('cd:command' , 'name' , strings) # # data.gsub!(/(\]*?language=")en(")/) do # $1 + interface + $2 # end # # report("saving #{outfile}") # # begin # if f = File.open(outfile, 'w') then # f.write(data) # f.close # end # rescue # end # # end # # end # # end class Commands include CommandBase public # faster is to glob the whole dir and regexp over that list def purgefiles pattern = @commandline.arguments purgeall = @commandline.option("all") recurse = @commandline.option("recurse") $dontaskprefixes.push(Dir.glob("mpx-*")) if purgeall then $dontaskprefixes.push(Dir.glob("*.tex.prep")) $dontaskprefixes.push(Dir.glob("*.xml.prep")) end $dontaskprefixes.flatten! $dontaskprefixes.sort! if purgeall then $forsuresuffixes.push($texnonesuffixes) $texnonesuffixes = [] $forsuresuffixes.flatten! end if ! pattern || pattern.empty? then globbed = if recurse then "**/*.*" else "*.*" end files = Dir.glob(globbed) report("purging#{if purgeall then ' all' end} temporary files : #{globbed}") else report("purging#{if purgeall then ' all' end} temporary files : #{pattern.join(' ')}") pattern.each do |pat| nosuf = File.unsuffixed(pat) globbed = if recurse then "**/#{nosuf}-*.*" else "#{nosuf}-*.*" end report("checking files that match '#{globbed}'") files = Dir.glob(globbed) globbed = if recurse then "**/#{nosuf}.*" else "#{nosuf}.*" end report("checking files that match '#{globbed}'") files.push(Dir.glob(globbed)) end end files.flatten! files.sort! $dontaskprefixes.each do |file| removecontextfile(file) end $dontasksuffixes.each do |suffix| files.each do |file| removecontextfile(file) if file =~ /#{suffix}$/i end end $forsuresuffixes.each do |suffix| files.each do |file| removecontextfile(file) if file =~ /\.#{suffix}$/i end end files.each do |file| if file =~ /(.*?)\.\d+$/o then basename = $1 if file =~ /mp(graph|run)/o || FileTest.file?("#{basename}.mp") then removecontextfile($file) end end end $dummyfiles.each do |file| (File.delete(file) if (FileTest.size?(file) rescue 10) < 10) rescue false end $texnonesuffixes.each do |suffix| files.each do |file| if file =~ /(.*)\.#{suffix}$/i then if FileTest.file?("#{$1}.tex") || FileTest.file?("#{$1}.xml") || FileTest.file?("#{$1}.fo") then keepcontextfile(file) else strippedname = $1.gsub(/\-[a-z]$/io, '') if FileTest.file?("#{strippedname}.tex") || FileTest.file?("#{strippedname}.xml") then keepcontextfile("#{file} (potential result file)") else removecontextfile(file) end end end end end files = Dir.glob("*.*") $dontasksuffixes.each do |suffix| files.each do |file| removecontextfile(file) if file =~ /^#{suffix}$/i end end if $removedfiles || $keptfiles || $persistentfiles then report("removed files : #{$removedfiles}") report("kept files : #{$keptfiles}") report("persistent files : #{$persistentfiles}") report("reclaimed bytes : #{$reclaimedbytes}") end end private $removedfiles = 0 $keptfiles = 0 $persistentfiles = 0 $reclaimedbytes = 0 $dontaskprefixes = [ # "tex-form.tex", "tex-edit.tex", "tex-temp.tex", "texexec.tex", "texexec.tui", "texexec.tuo", "texexec.tuc", "texexec.tua", "texexec.ps", "texexec.pdf", "texexec.dvi", "cont-opt.tex", "cont-opt.bak" ] $dontasksuffixes = [ "mp(graph|run)\\.mp", "mp(graph|run)\\.mpd", "mp(graph|run)\\.mpo", "mp(graph|run)\\.mpy", "mp(graph|run)\\.\\d+", "mp(graph|run)\\.mp.keep", "xlscript\\.xsl" ] $forsuresuffixes = [ "tui", "tua", "tup", "ted", "tes", "top", "log", "tmp", "run", "bck", "rlg", "mpt", "mpx", "mpd", "mpo", "mpb", "ctl", "pgf", "synctex.gz", "tmp.md5", "tmp.out" ] $texonlysuffixes = [ "dvi", "ps", "pdf" ] $texnonesuffixes = [ "tuo", "tub", "top", "tuc" ] $dummyfiles = [ # "mpgraph" ] def removecontextfile (filename) if filename && FileTest.file?(filename) then begin filesize = FileTest.size(filename) File.delete(filename) rescue report("problematic : #{filename}") else if FileTest.file?(filename) then $persistentfiles += 1 report("persistent : #{filename}") else $removedfiles += 1 $reclaimedbytes += filesize report("removed : #{filename}") end end end end def keepcontextfile (filename) if filename && FileTest.file?(filename) then $keptfiles += 1 report("not removed : #{filename}") end end end #D Documentation can be woven into a source file. The next #D routine generates a new, \TEX\ ready file with the #D documentation and source fragments properly tagged. The #D documentation is included as comment: #D #D \starttypen #D %D ...... some kind of documentation #D %M ...... macros needed for documenation #D %S B begin skipping #D %S E end skipping #D \stoptypen #D #D The most important tag is \type {%D}. Both \TEX\ and \METAPOST\ #D files use \type{%} as a comment chacacter, while \PERL, \RUBY\ #D and alike use \type{#}. Therefore \type{#D} is also handled. #D #D The generated file gets the suffix \type{ted} and is #D structured as: #D #D \starttypen #D \startmoduledocumentation[type=suffix] #D \startdocumentation #D \stopdocumentation #D \startdefinition #D \stopdefinition #D \stopmoduledocumentation #D \stoptypen #D #D Macro definitions specific to the documentation are not #D surrounded by start||stop commands. The suffix specifaction #D can be overruled at runtime, but defaults to the file #D extension. This specification can be used for language #D depended verbatim typesetting. class Commands include CommandBase public def documentation files = @commandline.arguments processtype = @commandline.option("type") files.each do |fullname| if fullname =~ /(.*)\.(.+?)$/o then filename, filesuffix = $1, $2 else filename, filesuffix = fullname, 'tex' end filesuffix = 'tex' if filesuffix.empty? fullname, resultname = "#{filename}.#{filesuffix}", "#{filename}.ted" if ! FileTest.file?(fullname) report("empty input file #{fullname}") elsif ! tex = File.open(fullname) report("invalid input file #{fullname}") elsif ! ted = File.open(resultname,'w') then report("unable to openresult file #{resultname}") else report("input file : #{fullname}") report("output file : #{resultname}") nofdocuments, nofdefinitions, nofskips = 0, 0, 0 skiplevel, indocument, indefinition, skippingbang = 0, false, false, false if processtype.empty? then filetype = filesuffix.downcase.sub(/^mk.+$/,'tex') # make sure that mkii and mkiv files are handled else filetype = processtype.downcase end report("filetype : #{filetype}") # we need to signal to texexec what interface to use firstline = tex.gets if firstline =~ /^\%.*interface\=/ then ted.puts(firstline) else tex.rewind # seek(0) end ted.puts("\\startmoduledocumentation[type=#{filetype}]\n") while str = tex.gets do if skippingbang then skippingbang = false else str.chomp! str.sub!(/\s*$/o, '') case str when /^[%\#]D($| )/io then if skiplevel == 0 then someline = if str.length < 3 then "" else str[3,str.length-1] end if indocument then ted.puts("#{someline}\n") else if indefinition then ted.puts("\\stopdefinition\n") indefinition = false end unless indocument then ted.puts("\n\\startdocumentation\n") end ted.puts("#{someline}\n") indocument = true nofdocuments += 1 end end when /^[%\#]M($| )/io then if skiplevel == 0 then someline = if str.length < 3 then "" else str[3,str.length-1] end ted.puts("#{someline}\n") end when /^[%\%]S B/io then skiplevel += 1 nofskips += 1 when /^[%\%]S E/io then skiplevel -= 1 when /^[%\#]/io then #nothing when /^eval \'\(exit \$\?0\)\' \&\& eval \'exec perl/o then skippingbang = true else if skiplevel == 0 then inlocaldocument = indocument inlocaldocument = false # else first line skipped when not empty someline = str if indocument then ted.puts("\\stopdocumentation\n") indocument = false end if indefinition then if someline.empty? then ted.puts("\\stopdefinition\n") indefinition = false else ted.puts("#{someline}\n") end elsif ! someline.empty? then ted.puts("\n\\startdefinition\n") indefinition = true if inlocaldocument then # nothing else nofdefinitions += 1 ted.puts("#{someline}\n") end end end end end end if indocument then ted.puts("\\stopdocumentation\n") end if indefinition then ted.puts("\\stopdefinition\n") end ted.puts("\\stopmoduledocumentation\n") ted.close if nofdocuments == 0 && nofdefinitions == 0 then begin File.delete(resultname) rescue end end report("documentation sections : #{nofdocuments}") report("definition sections : #{nofdefinitions}") report("skipped sections : #{nofskips}") end end end end #D This feature was needed when \PDFTEX\ could not yet access page object #D numbers (versions prior to 1.11). class Commands include CommandBase public def filterpages # temp feature / no reporting filename = @commandline.argument('first') filename.sub!(/\.([a-z]+?)$/io,'') pdffile = "#{filename}.pdf" tuofile = "#{filename}.tuo" if FileTest.file?(pdffile) then begin prevline, n = '', 0 if (pdf = File.open(pdffile)) && (tuo = File.open(tuofile,'a')) then report('filtering page object numbers') pdf.binmode while line = pdf.gets do line.chomp # typical pdftex search if (line =~ /\/Type \/Page/o) && (prevline =~ /^(\d+)\s+0\s+obj/o) then p = $1 n += 1 tuo.puts("\\objectreference{PDFP}{#{n}}{#{p}}{#{n}}\n") else prevline = line end end end pdf.close tuo.close report("number of pages : #{n}") rescue report("fatal error in filtering pages") end end end end # This script is used to generate hyphenation pattern files # that suit ConTeXt. One reason for independent files is that # over the years too many uncommunicated changes took place # as well that inconsistency in content, naming, and location # in the texmf tree takes more time than I'm willing to spend # on it. Pattern files are normally shipped for LaTeX (and # partially plain). A side effect of independent files is that # we can make them encoding independent. # # Maybe I'll make this hyptools.tex class String def markbraces level = 0 self.gsub(/([\{\}])/o) do |chr| if chr == '{' then level = level + 1 chr = "((+#{level}))" elsif chr == '}' then chr = "((-#{level}))" level = level - 1 end chr end end def unmarkbraces self.gsub(/\(\(\+\d+?\)\)/o) do "{" end .gsub(/\(\(\-\d+?\)\)/o) do "}" end end def getargument(pattern) if self =~ /(#{pattern})\s*\(\(\+(\d+)\)\)(.*?)\(\(\-\2\)\)/m then # no /o return $3 else return "" end end def withargument(pattern, &block) if self.markbraces =~ /^(.*)(#{pattern}\s*)\(\(\+(\d+)\)\)(.*?)\(\(\-\3\)\)(.*)$/m then # no /o "#{$1.unmarkbraces}#{$2}{#{yield($4.unmarkbraces)}}#{$5.unmarkbraces}" else self end end def filterargument(pattern, &block) if self.markbraces =~ /^(.*)(#{pattern}\s*)\(\(\+(\d+)\)\)(.*?)\(\(\-\3\)\)(.*)$/m then # no /o yield($4.unmarkbraces) else self end end end class Language include CommandBase def initialize(commandline=nil, language='en', filenames=nil, encoding='ec') @commandline= commandline @language = language @filenames = filenames @remapping = Array.new @demapping = Array.new @cloning = Array.new @unicode = Hash.new @encoding = encoding @data = '' @read = '' preload_accents() preload_unicode() if @commandline.option('utf8') case @encoding.downcase when 't1', 'ec', 'cork' then preload_vector('ec', 'enco-ec.tex') when 'y', 'texnansi' then preload_vector('texnansi', 'enco-ans.tex') when 'agr', 'agreek' then preload_vector('agr', 'enco-agr.tex') when 't2a' then preload_vector('t2a', 'enco-cyr.tex') when 'cyr' then preload_vector() # somehow loading t2a does not work out well end end def report(str) if @commandline then @commandline.report(str) else puts("#{str}\n") end end def remap(from, to) @remapping.push([from,to]) end def demap(from, to) @demapping.push([from,to]) end def clone(from, to) @cloning.push([from,to]) end def load(filenames=@filenames) found = false begin if filenames then @filenames.each do |fileset| [fileset].flatten.each do |filename| begin if fname = located(filename) then data = IO.read(fname) @data += data.gsub(/\%.*$/, '').gsub(/\\message\{.*?\}/, '') data.gsub!(/(\\patterns|\\hyphenation)\s*\{.*/mo) do '' end @read += "\n% preamble of file #{fname}\n\n#{data}\n" @data.gsub!(/^[\s\n]+$/moi, '') report("file #{fname} is loaded") found = true break # next fileset end rescue report("file #{filename} is not readable") end end end end rescue end return found end def valid? ! @data.empty? end def convert if @data then n = 0 if true then report("") ["\\patterns","\\hyphenation"].each do |what| @data = @data.withargument(what) do |content| report("converting #{what}") report("") @demapping.each_index do |i| content.gsub!(@demapping[i][0], @demapping[i][1]) end content.gsub!(/\\delete\{.*?\}/o) do '' end content.gsub!(/\\keep\{(.*?)\}/o) do $1 end done = false @remapping.each_index do |i| from, to, m = @remapping[i][0], @remapping[i][1], 0 content.gsub!(from) do done = true m += 1 "[#{i}]" end report("#{m.to_s.rjust(5)} entries remapped to #{to}") unless m == 0 n += m end content.gsub!(/\[(\d+)\]/o) do @remapping[$1.to_i][1] end report(" nothing remapped") unless done @cloning.each_index do |i| c = 0 f, s = @cloning[i][0], @cloning[i][1] str = "#{f}|#{s}" str.gsub!(/([\[\]])/) do "\\" + "#{$1}" end reg = /(#{str})/ content.gsub!(/(\S*(#{str})\S*)/) do a, b = $1, $1 a.gsub!(reg, f) b.gsub!(reg, s) c = c + 1 "#{a} #{b}" end report("#{c.to_s.rjust(5)} times #{f} cloned to #{s}") n += c end report("") content.to_s end end else @remapping.each do |k| from, to, m = k[0], k[1], 0 @data.gsub!(from) do m += 1 to end report("#{m.to_s.rjust(5)} entries remapped to #{to}") unless m == 0 n += m end end report("#{n} changes in patterns and exceptions") if @commandline.option('utf8') then n = 0 @data.gsub!(/\[(.*?)\]/o) do n += 1 @unicode[$1] || $1 end report("#{n} unicode utf8 entries") end return true else return false end end def comment(str) str.gsub!(/^\n/o, '') str.chomp! if @commandline.option('xml') then "\n\n" else "% #{str.strip}\n\n" end end def content(tag, str) lst = str.split(/\s+/) lst.collect! do |l| l.strip end if lst.length>0 then lst = "\n#{lst.join("\n")}\n" else lst = "" end if @commandline.option('xml') then lst.gsub!(/\[(.*?)\]/o) do "&#{$1};" end "<#{tag}>#{lst}\n\n" else "\\#{tag} \{#{lst}\}\n\n" end end def banner if @commandline.option('xml') then "\n\n" end end def triggerunicode return if @commandline.option('utf8') then "% xetex needs utf8 encoded patterns and for patterns\n" + "% coded as such we need to enable this regime when\n" + "% not in xetex; this code will be moved into context\n" + "% as soon as we've spread the generic patterns\n" + "\n" + "\\ifx\\XeTeXversion\\undefined \\else\n" + " \\ifx\\enableregime\\undefined \\else\n" + " \\enableregime[utf]\n" + " \\fi\n" + "\\fi\n" + "\n" end end def save xml = @commandline.option("xml") patname = "lang-#{@language}.pat" hypname = "lang-#{@language}.hyp" rmename = "lang-#{@language}.rme" logname = "lang-#{@language}.log" desname = "lang-all.xml" @data.gsub!(/\\[nc]\{(.+?)\}/) do $1 end @data.gsub!(/\{\}/) do '' end @data.gsub!(/\n+/mo) do "\n" end @read.gsub!(/\n+/mo) do "\n" end description = '' commentfile = rmename.dup begin desfile = Kpse.found(desname,'context') if f = File.new(desfile) then if doc = REXML::Document.new(f) then if e = REXML::XPath.first(doc.root,"/descriptions/description[@language='#{@language}']") then description = e.to_s end end end rescue description = '' else unless description.empty? then commentfile = desname.dup str = "\n" str.gsub!(/^/io, "% ") unless @commandline.option('xml') description = comment("begin description data") description << str + "\n" description << comment("end description data") report("description found for language #{@language}") end end begin if description.empty? || @commandline.option('log') then if f = File.open(logname,'w') then report("saving #{@remapping.length} remap patterns in #{logname}") @remapping.each do |m| f.puts("#{m[0].inspect} => #{m[1]}\n") end f.close end else File.delete(logname) if FileTest.file?(logname) end rescue end begin if description.empty? || @commandline.option('log') then if f = File.open(rmename,'w') then data = @read.dup data.gsub!(/(\s*\n\s*)+/mo, "\n") f << comment("comment copied from public hyphenation files}") f << comment("source of data: #{@filenames.join(' ')}") f << comment("begin original comment") f << "#{data}\n" f << comment("end original comment") f.close report("comment saved in file #{rmename}") else report("file #{rmename} is not writable") end else File.delete(rmename) if FileTest.file?(rmename) end rescue end begin if f = File.open(patname,'w') then data = '' @data.filterargument('\\patterns') do |content| report("merging patterns") data += content.strip end data.gsub!(/(\s*\n\s*)+/mo, "\n") f << banner f << comment("context pattern file, see #{commentfile} for original comment") f << comment("source of data: #{@filenames.join(' ')}") f << description f << comment("begin pattern data") f << triggerunicode f << content('patterns', data) f << comment("end pattern data") f.close report("patterns saved in file #{patname}") else report("file #{patname} is not writable") end rescue report("problems with file #{patname}") end begin if f = File.open(hypname,'w') then data = '' @data.filterargument('\\hyphenation') do |content| report("merging exceptions") data += content.strip end data.gsub!(/(\s*\n\s*)+/mo, "\n") f << banner f << comment("context hyphenation file, see #{commentfile} for original comment") f << comment("source of data: #{@filenames.join(' ')}") f << description f << comment("begin hyphenation data") f << triggerunicode f << content('hyphenation', data) f << comment("end hyphenation data") f.close report("exceptions saved in file #{hypname}") else report("file #{hypname} is not writable") end rescue report("problems with file #{hypname}") end end def process load if valid? then convert save else report("aborted due to missing files") end end def Language::generate(commandline, language='', filenames='', encoding='ec') if ! language.empty? && ! filenames.empty? then commandline.report("processing language #{language}") commandline.report("") language = Language.new(commandline,language,filenames,encoding) if language.load then language.convert language.save commandline.report("") end end end private def located(filename) begin ["context","plain","latex"].each do |name| # fallbacks needed for czech patterns fname = Kpse.found(filename, name) if FileTest.file?(fname) then report("using file #{fname}") return fname end end report("file #{filename} is not present") return nil rescue report("file #{filename} cannot be located using kpsewhich") return nil end end def preload_accents begin if filename = located("enco-acc.tex") then if data = IO.read(filename) then report("preloading accent conversions") data.scan(/\\defineaccent\s*\\*(.+?)\s*\{*(.+?)\}*\s*\{\\(.+?)\}/o) do one, two, three = $1, $2, $3 one.gsub!(/[\`\~\!\^\*\_\-\+\=\:\;\"\'\,\.\?]/o) do "\\#{one}" end remap(/\\#{one} #{two}/, "[#{three}]") remap(/\\#{one}#{two}/, "[#{three}]") unless one =~ /[a-zA-Z]/o remap(/\\#{one}\{#{two}\}/, "[#{three}]") end end end rescue end end def preload_unicode # \definecharacter Agrave {\uchar0{192}} begin if filename = located("enco-uc.tex") then if data = IO.read(filename) then report("preloading unicode conversions") data.scan(/\\definecharacter\s*(.+?)\s*\{\\uchar\{*(\d+)\}*\s*\{(\d+)\}/o) do one, two, three = $1, $2.to_i, $3.to_i @unicode[one] = [(two*256 + three)].pack("U") end end end rescue report("error in loading unicode mapping (#{$!})") end end def preload_vector(encoding='', filename='') # funny polish case @language when 'pl' then remap(/\/a/, "[aogonek]") ; remap(/\/A/, "[Aogonek]") remap(/\/c/, "[cacute]") ; remap(/\/C/, "[Cacute]") remap(/\/e/, "[eogonek]") ; remap(/\/E/, "[Eogonek]") remap(/\/l/, "[lstroke]") ; remap(/\/L/, "[Lstroke]") remap(/\/n/, "[nacute]") ; remap(/\/N/, "[Nacute]") remap(/\/o/, "[oacute]") ; remap(/\/O/, "[Oacute]") remap(/\/s/, "[sacute]") ; remap(/\/S/, "[Sacute]") remap(/\/x/, "[zacute]") ; remap(/\/X/, "[Zacute]") remap(/\/z/, "[zdotaccent]") ; remap(/\/Z/, "[Zdotaccent]") when 'sl' then remap(/\"c/,"[ccaron]") ; remap(/\"C/,"[Ccaron]") remap(/\"s/,"[scaron]") ; remap(/\"S/,"[Scaron]") remap(/\"z/,"[zcaron]") ; remap(/\"Z/,"[Zcaron]") when 'da' then remap(/X/, "[aeligature]") remap(/Y/, "[ostroke]") remap(/Z/, "[aring]") when 'hu' then # nothing when 'ca' then demap(/\\c\{/, "\\delete{") when 'de', 'deo' then demap(/\\c\{/, "\\delete{") demap(/\\n\{/, "\\keep{") remap(/\\3/, "[ssharp]") remap(/\\9/, "[ssharp]") remap(/\"a/, "[adiaeresis]") remap(/\"o/, "[odiaeresis]") remap(/\"u/, "[udiaeresis]") when 'fr' then demap(/\\n\{/, "\\delete{") remap(/\\ae/, "[aeligature]") remap(/\\oe/, "[oeligature]") when 'la' then # \lccode`'=`' somewhere else, todo demap(/\\c\{/, "\\delete{") remap(/\\a\s*/, "[aeligature]") remap(/\\o\s*/, "[oeligature]") when 'agr' then # bug fix remap("a2|", "[greekalphaiotasub]") remap("h2|", "[greeketaiotasub]") remap("w2|", "[greekomegaiotasub]") remap(">2r1<2r", "[2ῤ1ῥ]") remap(">a2n1wdu'", "[ἀ2ν1ωδύ]") remap(">e3s2ou'", "[ἐ3σ2ού]") # main conversion remap(/\<\'a\|/, "[greekalphaiotasubdasiatonos]") # remap(/\<\'a\|/, "[greekdasiatonos][greekAlpha][greekiota]") remap(/\>\'a\|/, "[greekalphaiotasubpsilitonos]") remap(/\<\`a\|/, "[greekalphaiotasubdasiavaria]") remap(/\>\`a\|/, "[greekalphaiotasubpsilivaria]") remap(/\<\~a\|/, "[greekalphaiotasubdasiaperispomeni]") remap(/\>\~a\|/, "[greekalphaiotasubpsiliperispomeni]") remap(/\'a\|/, "[greekalphaiotasubtonos]") remap(/\`a\|/, "[greekalphaiotasubvaria]") remap(/\~a\|/, "[greekalphaiotasubperispomeni]") remap(/\a\|/, "[greekalphaiotasubpsili]") remap(/a\|/, "[greekalphaiotasub]") remap(/\<\'h\|/, "[greeketaiotasubdasiatonos]") remap(/\>\'h\|/, "[greeketaiotasubpsilitonos]") remap(/\<\`h\|/, "[greeketaiotasubdasiavaria]") remap(/\>\`h\|/, "[greeketaiotasubpsilivaria]") remap(/\<\~h\|/, "[greeketaiotasubdasiaperispomeni]") remap(/\>\~h\|/, "[greeketaiotasubpsiliperispomeni]") remap(/\'h\|/, "[greeketaiotasubtonos]") remap(/\`h\|/, "[greeketaiotasubvaria]") remap(/\~h\|/, "[greeketaiotasubperispomeni]") remap(/\h\|/, "[greeketaiotasubpsili]") remap(/h\|/, "[greeketaiotasub]") remap(/\<'w\|/, "[greekomegaiotasubdasiatonos]") remap(/\>'w\|/, "[greekomegaiotasubpsilitonos]") remap(/\<`w\|/, "[greekomegaiotasubdasiavaria]") remap(/\>`w\|/, "[greekomegaiotasubpsilivaria]") remap(/\<~w\|/, "[greekomegaiotasubdasiaperispomeni]") remap(/\>~w\|/, "[greekomegaiotasubpsiliperispomeni]") remap(/\w\|/, "[greekomegaiotasubpsili]") remap(/\'w\|/, "[greekomegaiotasubtonos]") remap(/\`w\|/, "[greekomegaiotasubvaria]") remap(/\~w\|/, "[greekomegaiotasubperispomeni]") remap(/w\|/, "[greekomegaiotasub]") remap(/\<\'i/, "[greekiotadasiatonos]") remap(/\>\'i/, "[greekiotapsilitonos]") remap(/\<\`i/, "[greekiotadasiavaria]") remap(/\>\`i/, "[greekiotapsilivaria]") remap(/\<\~i/, "[greekiotadasiaperispomeni]") remap(/\>\~i/, "[greekiotapsiliperispomeni]") remap(/\"\'i/, "[greekiotadialytikatonos]") remap(/\"\`i/, "[greekiotadialytikavaria]") remap(/\"\~i/, "[greekiotadialytikaperispomeni]") remap(/\i/, "[greekiotapsili]") remap(/\'i/, "[greekiotaoxia]") remap(/\`i/, "[greekiotavaria]") remap(/\~i/, "[greekiotaperispomeni]") remap(/\"i/, "[greekiotadialytika]") remap(/\>\~e/, "[greekepsilonpsiliperispomeni]") remap(/\<\~e/, "[greekepsilondasiaperispomeni]") remap(/\<\'e/, "[greekepsilondasiatonos]") remap(/\>\'e/, "[greekepsilonpsilitonos]") remap(/\<\`e/, "[greekepsilondasiavaria]") remap(/\>\`e/, "[greekepsilonpsilivaria]") remap(/\e/, "[greekepsilonpsili]") remap(/\'e/, "[greekepsilonoxia]") remap(/\`e/, "[greekepsilonvaria]") remap(/\~e/, "[greekepsilonperispomeni]") remap(/\<\'a/, "[greekalphadasiatonos]") remap(/\>\'a/, "[greekalphapsilitonos]") remap(/\<\`a/, "[greekalphadasiavaria]") remap(/\>\`a/, "[greekalphapsilivaria]") remap(/\<\~a/, "[greekalphadasiaperispomeni]") remap(/\>\~a/, "[greekalphapsiliperispomeni]") remap(/\a/, "[greekalphapsili]") remap(/\'a/, "[greekalphaoxia]") remap(/\`a/, "[greekalphavaria]") remap(/\~a/, "[greekalphaperispomeni]") remap(/\<\'h/, "[greeketadasiatonos]") remap(/\>\'h/, "[greeketapsilitonos]") remap(/\<\`h/, "[greeketadasiavaria]") remap(/\>\`h/, "[greeketapsilivaria]") remap(/\<\~h/, "[greeketadasiaperispomeni]") remap(/\>\~h/, "[greeketapsiliperispomeni]") remap(/\h/, "[greeketapsili]") remap(/\'h/, "[greeketaoxia]") remap(/\`h/, "[greeketavaria]") remap(/\~h/, "[greeketaperispomeni]") remap(/\<\~o/, "[greekomicrondasiaperispomeni]") remap(/\>\~o/, "[greekomicronpsiliperispomeni]") remap(/\<\'o/, "[greekomicrondasiatonos]") remap(/\>\'o/, "[greekomicronpsilitonos]") remap(/\<\`o/, "[greekomicrondasiavaria]") remap(/\>\`o/, "[greekomicronpsilivaria]") remap(/\o/, "[greekomicronpsili]") remap(/\'o/, "[greekomicronoxia]") remap(/\`o/, "[greekomicronvaria]") remap(/\~o/, "[greekomicronperispomeni]") remap(/\<\'u/, "[greekupsilondasiatonos]") remap(/\>\'u/, "[greekupsilonpsilitonos]") remap(/\<\`u/, "[greekupsilondasiavaria]") remap(/\>\`u/, "[greekupsilonpsilivaria]") remap(/\<\~u/, "[greekupsilondasiaperispomeni]") remap(/\>\~u/, "[greekupsilonpsiliperispomeni]") remap(/\"\'u/, "[greekupsilondialytikatonos]") remap(/\"\`u/, "[greekupsilondialytikavaria]") remap(/\"\~u/, "[greekupsilondialytikaperispomeni]") remap(/\u/, "[greekupsilonpsili]") remap(/\'u/, "[greekupsilonoxia]") remap(/\`u/, "[greekupsilonvaria]") remap(/\~u/, "[greekupsilonperispomeni]") remap(/\"u/, "[greekupsilondiaeresis]") remap(/\<\'w/, "[greekomegadasiatonos]") remap(/\>\'w/, "[greekomegapsilitonos]") remap(/\<\`w/, "[greekomegadasiavaria]") remap(/\>\`w/, "[greekomegapsilivaria]") remap(/\<\~w/, "[greekomegadasiaperispomeni]") remap(/\>\~w/, "[greekomegapsiliperispomeni]") remap(/\w/, "[greekomegapsili]") remap(/\'w/, "[greekomegaoxia]") remap(/\`w/, "[greekomegavaria]") remap(/\~w/, "[greekomegaperispomeni]") remap(/\r/, "[greekrhopsili]") remap(/\<\~/, "[greekdasiaperispomeni]") remap(/\>\~/, "[greekpsiliperispomeni]") remap(/\<\'/, "[greekdasiatonos]") remap(/\>\'/, "[greekpsilitonos]") remap(/\<\`/, "[greekdasiavaria]") remap(/\>\`/, "[greekpsilivaria]") remap(/\"\'/, "[greekdialytikatonos]") remap(/\"\`/, "[greekdialytikavaria]") remap(/\"\~/, "[greekdialytikaperispomeni]") remap(/\/, "[greekpsili]") remap(/\d.{0,2}''/, "") remap(/\'/, "[greekoxia]") remap(/\`/, "[greekvaria]") remap(/\~/, "[perispomeni]") remap(/\"/, "[greekdialytika]") # unknown # remap(/\|/, "[greekIotadialytika]") # next remap(/A/, "[greekAlpha]") remap(/B/, "[greekBeta]") remap(/D/, "[greekDelta]") remap(/E/, "[greekEpsilon]") remap(/F/, "[greekPhi]") remap(/G/, "[greekGamma]") remap(/H/, "[greekEta]") remap(/I/, "[greekIota]") remap(/J/, "[greekTheta]") remap(/K/, "[greekKappa]") remap(/L/, "[greekLambda]") remap(/M/, "[greekMu]") remap(/N/, "[greekNu]") remap(/O/, "[greekOmicron]") remap(/P/, "[greekPi]") remap(/Q/, "[greekChi]") remap(/R/, "[greekRho]") remap(/S/, "[greekSigma]") remap(/T/, "[greekTau]") remap(/U/, "[greekUpsilon]") remap(/W/, "[greekOmega]") remap(/X/, "[greekXi]") remap(/Y/, "[greekPsi]") remap(/Z/, "[greekZeta]") remap(/a/, "[greekalpha]") remap(/b/, "[greekbeta]") remap(/c/, "[greekfinalsigma]") remap(/d/, "[greekdelta]") remap(/e/, "[greekepsilon]") remap(/f/, "[greekphi]") remap(/g/, "[greekgamma]") remap(/h/, "[greeketa]") remap(/i/, "[greekiota]") remap(/j/, "[greektheta]") remap(/k/, "[greekkappa]") remap(/l/, "[greeklambda]") remap(/m/, "[greekmu]") remap(/n/, "[greeknu]") remap(/o/, "[greekomicron]") remap(/p/, "[greekpi]") remap(/q/, "[greekchi]") remap(/r/, "[greekrho]") remap(/s/, "[greeksigma]") remap(/t/, "[greektau]") remap(/u/, "[greekupsilon]") remap(/w/, "[greekomega]") remap(/x/, "[greekxi]") remap(/y/, "[greekpsi]") remap(/z/, "[greekzeta]") clone("[greekalphatonos]", "[greekalphaoxia]") clone("[greekepsilontonos]", "[greekepsilonoxia]") clone("[greeketatonos]", "[greeketaoxia]") clone("[greekiotatonos]", "[greekiotaoxia]") clone("[greekomicrontonos]", "[greekomicronoxia]") clone("[greekupsilontonos]", "[greekupsilonoxia]") clone("[greekomegatonos]", "[greekomegaoxia]") when 'ru' then remap(/\xC1/, "[cyrillica]") remap(/\xC2/, "[cyrillicb]") remap(/\xD7/, "[cyrillicv]") remap(/\xC7/, "[cyrillicg]") remap(/\xC4/, "[cyrillicd]") remap(/\xC5/, "[cyrillice]") remap(/\xD6/, "[cyrilliczh]") remap(/\xDA/, "[cyrillicz]") remap(/\xC9/, "[cyrillici]") remap(/\xCA/, "[cyrillicishrt]") remap(/\xCB/, "[cyrillick]") remap(/\xCC/, "[cyrillicl]") remap(/\xCD/, "[cyrillicm]") remap(/\xCE/, "[cyrillicn]") remap(/\xCF/, "[cyrillico]") remap(/\xD0/, "[cyrillicp]") remap(/\xD2/, "[cyrillicr]") remap(/\xD3/, "[cyrillics]") remap(/\xD4/, "[cyrillict]") remap(/\xD5/, "[cyrillicu]") remap(/\xC6/, "[cyrillicf]") remap(/\xC8/, "[cyrillich]") remap(/\xC3/, "[cyrillicc]") remap(/\xDE/, "[cyrillicch]") remap(/\xDB/, "[cyrillicsh]") remap(/\xDD/, "[cyrillicshch]") remap(/\xDF/, "[cyrillichrdsn]") remap(/\xD9/, "[cyrillicery]") remap(/\xD8/, "[cyrillicsftsn]") remap(/\xDC/, "[cyrillicerev]") remap(/\xC0/, "[cyrillicyu]") remap(/\xD1/, "[cyrillicya]") remap(/\xA3/, "[cyrillicyo]") when 'tr' then remap(/\^\^11/, "[dotlessi]") else end if ! encoding.empty? then begin filename = Kpse.found(filename, 'context') if data = IO.readlines(filename.chomp) then report("preloading #{encoding} character mappings") accept = false data.each do |line| case line.chomp when /\\start(en|)coding\s*\[(.*?)\]/io then enc = $2 if accept = (enc == encoding) then report("accepting vector #{enc}") else report("skipping vector #{enc}") end when /\\stop(en|)coding/io then accept = false when accept && /\\definecharacter\s*([a-zA-Z]+)\s*(\d+)\s*/o then name, number = $1, $2 remap(/\^\^#{sprintf("%02x",number)}/, "[#{name}]") if number.to_i > 127 then remap(/#{sprintf("\\%03o",number)}/, "[#{name}]") end end end end rescue end end end end class Commands include CommandBase public @@languagedata = Hash.new def patternfiles language = @commandline.argument('first') if (language == 'all') || language.empty? then languages = @@languagedata.keys.sort elsif @@languagedata.key?(language) then languages = [language] else languages = [] end languages.each do |language| encoding = @@languagedata[language][0] || '' files = @@languagedata[language][1] || [] Language::generate(self,language,files,encoding) end end private # todo: filter the fallback list from context # The first entry in the array is the encoding which will be used # when interpreting the raw patterns. The second entry is a list of # filesets (string|aray), each first match of a set is taken. @@languagedata['ba' ] = [ 'ec' , ['bahyph.tex'] ] @@languagedata['ca' ] = [ 'ec' , ['cahyph.tex'] ] @@languagedata['cy' ] = [ 'ec' , ['cyhyph.tex'] ] @@languagedata['cs' ] = [ 'ec' , ['czhyphen.tex','czhyphen.ex'] ] @@languagedata['de' ] = [ 'ec' , ['dehyphn.tex'] ] @@languagedata['deo'] = [ 'ec' , ['dehypht.tex'] ] @@languagedata['da' ] = [ 'ec' , ['dkspecial.tex','dkcommon.tex'] ] # elhyph.tex @@languagedata['es' ] = [ 'ec' , ['eshyph.tex'] ] @@languagedata['et' ] = [ 'ec' , ['ethyph.tex'] ] @@languagedata['fi' ] = [ 'ec' , ['fihyph.tex'] ] @@languagedata['fr' ] = [ 'ec' , ['frhyph.tex'] ] # ghyphen.readme ghyph31.readme grphyph @@languagedata['hr' ] = [ 'ec' , ['hrhyph.tex'] ] @@languagedata['hu' ] = [ 'ec' , ['huhyphn.tex'] ] @@languagedata['us' ] = [ 'default' , [['ushyphmax.tex'],['ushyph.tex'],['hyphen.tex']] ] @@languagedata['us' ] = [ 'default' , [['ushyphmax.tex'],['ushyph.tex'],['hyphen.tex']] ] # inhyph.tex @@languagedata['is' ] = [ 'ec' , ['ishyph.tex'] ] @@languagedata['it' ] = [ 'ec' , ['ithyph.tex'] ] @@languagedata['la' ] = [ 'ec' , ['lahyph.tex'] ] # mnhyph @@languagedata['nl' ] = [ 'ec' , ['nehyph96.tex'] ] # @@languagedata['no' ] = [ 'ec' , ['nohyphbx.tex'],['nohyphb.tex'],['nohyph2.tex'],['nohyph1.tex'],['nohyph.tex'] ] @@languagedata['no' ] = [ 'ec' , [['asxsx.tex','nohyphbx.tex'],['nohyphb.tex'],['nohyph2.tex'],['nohyph1.tex'],['nohyph.tex']] ] @@languagedata['agr'] = [ 'agr' , [['grahyph4.tex'], ['oldgrhyph.tex']] ] # new, todo @@languagedata['pl' ] = [ 'ec' , ['plhyph.tex'] ] @@languagedata['pt' ] = [ 'ec' , ['pthyph.tex'] ] @@languagedata['ro' ] = [ 'ec' , ['rohyph.tex'] ] @@languagedata['sl' ] = [ 'ec' , [['slhyph.tex'], ['sihyph.tex']] ] @@languagedata['sk' ] = [ 'ec' , ['skhyphen.tex','skhyphen.ex'] ] # sorhyph.tex / upper sorbian # srhyphc.tex / cyrillic @@languagedata['sv' ] = [ 'ec' , ['svhyph.tex'] ] @@languagedata['tr' ] = [ 'ec' , ['tkhyph.tex'] ] @@languagedata['gb' ] = [ 'default' , [['ukhyphen.tex'],['ukhyph.tex']] ] # @@languagedata['ru' ] = [ 't2a' , ['ruhyphal.tex'] ] # t2a does not work @@languagedata['ru' ] = [ 'cyr' , ['ruhyphal.tex'] ] end class Commands include CommandBase def dpxmapfiles force = @commandline.option("force") texmfroot = @commandline.argument('first') texmfroot = '.' if texmfroot.empty? if @commandline.option('maproot') != "" then maproot = @commandline.option('maproot') else maproot = "#{texmfroot.gsub(/\\/,'/')}/fonts/map/pdftex/context" end if File.directory?(maproot) then files = Dir.glob("#{maproot}/*.map") if files.size > 0 then files.each do |pdffile| next if File.basename(pdffile) == 'pdftex.map' pdffile = File.expand_path(pdffile) dpxfile = File.expand_path(pdffile.sub(/(dvips|pdftex)/i,'dvipdfm')) unless pdffile == dpxfile then begin if data = File.read(pdffile) then report("< #{File.basename(pdffile)} - pdf(e)tex") n = 0 data = data.collect do |line| if line =~ /^[\%\#]+/mo then '' else encoding = if line =~ /([a-z0-9\-]+)\.enc/io then $1 else '' end fontfile = if line =~ /([a-z0-9\-]+)\.(pfb|ttf)/io then $1 else nil end metrics = if line =~ /^([a-z0-9\-]+)[\s\<]+/io then $1 else nil end slant = if line =~ /\"([\d\.]+)\s+SlantFont\"/io then "-s #{$1}" else '' end if metrics && encoding && fontfile then n += 1 "#{metrics} #{encoding} #{fontfile} #{slant}" else '' end end end data.delete_if do |line| line.gsub(/\s+/,'').empty? end data.collect! do |line| # remove line with "name name" lines line.gsub(/^(\S+)\s+\1\s*$/) do $1 end end begin if force then if n > 0 then File.makedirs(File.dirname(dpxfile)) if f = File.open(dpxfile,'w') then report("> #{File.basename(dpxfile)} - dvipdfm(x) - #{n}") f.puts(data) f.close else report("? #{File.basename(dpxfile)} - dvipdfm(x)") end else report("- #{File.basename(dpxfile)} - dvipdfm(x) - no entries") # begin File.delete(dpxname) ; rescue ; end if f = File.open(dpxfile,'w') then f.puts("% no map entries") f.close end end else report(". #{File.basename(dpxfile)} - dvipdfm(x) - #{n}") end rescue report("error in saving dvipdfm file") end else report("error in loading pdftex file") end rescue report("error in processing pdftex file") end end end if force then begin report("regenerating database for #{texmfroot}") system("mktexlsr #{texmfroot}") rescue end end else report("no mapfiles found in #{maproot}") end else report("provide proper texmfroot") end end end class Array def add_shebang(filename,program) unless self[0] =~ /^\#/ then self.insert(0,"\#!/usr/bin/env #{program}") end unless self[2] =~ /^\#.*?copyright\=/ then self.insert(1,"\#") self.insert(2,"\# copyright=pragma-ade readme=readme.pdf licence=cc-gpl") self.insert(3,"") unless self[3].chomp.strip.empty? self[2].gsub!(/ +/, ' ') return true else return false end end def add_directive(filename,program) unless self[0] =~ /^\%/ then self.insert(0,"\% content=#{program}") end unless self[2] =~ /^\%.*?copyright\=/ then self.insert(1,"\%") if File.expand_path(filename) =~ /[\\\/](doc|manuals)[\\\/]/ then self.insert(2,"\% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa") else self.insert(2,"\% copyright=pragma-ade readme=readme.pdf licence=cc-gpl") end self.insert(3,"") unless self[3].chomp.strip.empty? self[0].gsub!(/ +/, ' ') return true else return false end end def add_comment(filename) if self[0] =~ /<\?xml.*?\?>/ && self[2] !~ /^<\!\-\-.*?copyright\=.*?\-\->/ then self.insert(1,"") if File.expand_path(filename) =~ /[\\\/](doc|manuals)[\\\/]/ then self.insert(2,"") else self.insert(2,"") end self.insert(3,"") unless self[3].chomp.strip.empty? return true else return false end end end class Commands include CommandBase def brandfiles force = @commandline.option("force") files = @commandline.arguments # Dir.glob("**/*.*") done = false files.each do |filename| if FileTest.file?(filename) then ok = false begin data = IO.readlines(filename) case filename when /\.rb$/ then ok = data.add_shebang(filename,'ruby') when /\.pl$/ then ok = data.add_shebang(filename,'perl') when /\.py$/ then ok = data.add_shebang(filename,'python') when /\.tex$/ then ok = data.add_directive(filename,'tex') when /\.mp$/ then ok = data.add_directive(filename,'metapost') when /\.mf$/ then ok = data.add_directive(filename,'metafont') when /\.(xml|xsl|fo|fx|rlx|rng|exa)$/ then ok = data.add_comment(filename) end rescue report("fatal error in processing #{filename}") # maybe this catches the mac problem taco reported else if ok then report() report(filename) report() for i in 0..4 do report(' ' + data[i].chomp) end if force && f = File.open(filename,'w') then f.puts data f.close end done = true end end else report("no file named #{filename}") end end report() if done end end class Commands include CommandBase # usage : ctxtools --listentities entities.xml # document: def flushentities(handle,entities,doctype=nil) # 'stylesheet' if doctype then tab = "\t" handle << "\n\n" handle << "\n\n" handle << "\n" end if doctype then handle << "]>\n" end end def listentities filenames = ['enco-uc.tex','contextnames.txt'] outputname = @commandline.argument('first') doctype = @commandline.option('doctype') entities = Hash.new filenames.each do |filename| filename = Kpse.found(filename, 'context') if filename and not filename.empty? and FileTest.file?(filename) then report("loading #{filename.gsub(/\\/,'/')}") unless outputname.empty? IO.readlines(filename).each do |line| case line when /^[\#\%]/io then # skip comment line when /\\definecharacter\s+([a-z]+)\s+\{\\uchar\{*(\d+)\}*\{(\d+)\}\}/io then name, code = $1, sprintf("%04X",$2.to_i*256 + $3.to_i) entities[name] = code.rjust(4,'0') unless entities.key?(name) when /^([A-F0-9]+)\;([a-z][a-z]+)\;(.*?)\;(.*?)\s*$/io then code, name, adobe, comment = $1, $2, $3, $4 entities[name] = code.rjust(4,'0') unless entities.key?(name) end end end end if outputname and not outputname.empty? then if f = File.open(outputname,'w') then report("saving #{entities.size} entities in #{outputname}") flushentities(f,entities,doctype) f.close else flushentities($stdout,entities,doctype) end else flushentities($stdout,entities,doctype) end end end class Commands include CommandBase def platformize pattern = if @commandline.arguments.empty? then "*.{rb,pl,py}" else @commandline.arguments end recurse = @commandline.option("recurse") force = @commandline.option("force") pattern = "#{if recurse then '**/' else '' end}#{pattern}" Dir.glob(pattern).each do |file| if File.file?(file) then size = File.size(file) data = IO.readlines(file) if force then if f = File.open(file,'w') data.each do |line| f.puts(line.chomp) end f.close end if File.size(file) == size then # not robust report("file '#{file}' is unchanged") else report("file '#{file}' is platformized") end else report("file '#{file}' is a candidate") end end end end end class TexDeps @@cs_tex = %q/ above abovedisplayshortskip abovedisplayskip abovewithdelims accent adjdemerits advance afterassignment aftergroup atop atopwithdelims badness baselineskip batchmode begingroup belowdisplayshortskip belowdisplayskip binoppenalty botmark box boxmaxdepth brokenpenalty catcode char chardef cleaders closein closeout clubpenalty copy count countdef cr crcr csname day deadcycles def defaulthyphenchar defaultskewchar delcode delimiter delimiterfactor delimeters delimitershortfall delimeters dimen dimendef discretionary displayindent displaylimits displaystyle displaywidowpenalty displaywidth divide doublehyphendemerits dp dump edef else emergencystretch end endcsname endgroup endinput endlinechar eqno errhelp errmessage errorcontextlines errorstopmode escapechar everycr everydisplay everyhbox everyjob everymath everypar everyvbox exhyphenpenalty expandafter fam fi finalhyphendemerits firstmark floatingpenalty font fontdimen fontname futurelet gdef global group globaldefs halign hangafter hangindent hbadness hbox hfil horizontal hfill horizontal hfilneg hfuzz hoffset holdinginserts hrule hsize hskip hss horizontal ht hyphenation hyphenchar hyphenpenalty hyphen if ifcase ifcat ifdim ifeof iffalse ifhbox ifhmode ifinner ifmmode ifnum ifodd iftrue ifvbox ifvmode ifvoid ifx ignorespaces immediate indent input inputlineno input insert insertpenalties interlinepenalty jobname kern language lastbox lastkern lastpenalty lastskip lccode leaders left lefthyphenmin leftskip leqno let limits linepenalty line lineskip lineskiplimit long looseness lower lowercase mag mark mathaccent mathbin mathchar mathchardef mathchoice mathclose mathcode mathinner mathop mathopen mathord mathpunct mathrel mathsurround maxdeadcycles maxdepth meaning medmuskip message mkern month moveleft moveright mskip multiply muskip muskipdef newlinechar noalign noboundary noexpand noindent nolimits nonscript scriptscript nonstopmode nulldelimiterspace nullfont number omit openin openout or outer output outputpenalty over overfullrule overline overwithdelims pagedepth pagefilllstretch pagefillstretch pagefilstretch pagegoal pageshrink pagestretch pagetotal par parfillskip parindent parshape parskip patterns pausing penalty postdisplaypenalty predisplaypenalty predisplaysize pretolerance prevdepth prevgraf radical raise read relax relpenalty right righthyphenmin rightskip romannumeral scriptfont scriptscriptfont scriptscriptstyle scriptspace scriptstyle scrollmode setbox setlanguage sfcode shipout show showbox showboxbreadth showboxdepth showlists showthe skewchar skip skipdef spacefactor spaceskip span special splitbotmark splitfirstmark splitmaxdepth splittopskip string tabskip textfont textstyle the thickmuskip thinmuskip time toks toksdef tolerance topmark topskip tracingcommands tracinglostchars tracingmacros tracingonline tracingoutput tracingpages tracingparagraphs tracingrestores tracingstats uccode uchyph underline unhbox unhcopy unkern unpenalty unskip unvbox unvcopy uppercase vadjust valign vbadness vbox vcenter vfil vfill vfilneg vfuzz voffset vrule vsize vskip vsplit vss vtop wd widowpenalty write xdef xleaders xspaceskip year /.split @@cs_etex = %q/ beginL beginR botmarks clubpenalties currentgrouplevel currentgrouptype currentifbranch currentiflevel currentiftype detokenize dimexpr displaywidowpenalties endL endR eTeXrevision eTeXversion everyeof firstmarks fontchardp fontcharht fontcharic fontcharwd glueexpr glueshrink glueshrinkorder gluestretch gluestretchorder gluetomu ifcsname ifdefined iffontchar interactionmode interactionmode interlinepenalties lastlinefit lastnodetype marks topmarks middle muexpr mutoglue numexpr pagediscards parshapedimen parshapeindent parshapelength predisplaydirection savinghyphcodes savingvdiscards scantokens showgroups showifs showtokens splitdiscards splitfirstmarks TeXXeTstate tracingassigns tracinggroups tracingifs tracingnesting tracingscantokens unexpanded unless widowpenalties /.split @@cs_pdftex = %q/ pdfadjustspacing pdfannot pdfavoidoverfull pdfcatalog pdfcompresslevel pdfdecimaldigits pdfdest pdfdestmargin pdfendlink pdfendthread pdffontattr pdffontexpand pdffontname pdffontobjnum pdffontsize pdfhorigin pdfimageresolution pdfincludechars pdfinfo pdflastannot pdflastdemerits pdflastobj pdflastvbreakpenalty pdflastxform pdflastximage pdflastximagepages pdflastxpos pdflastypos pdflinesnapx pdflinesnapy pdflinkmargin pdfliteral pdfmapfile pdfmaxpenalty pdfminpenalty pdfmovechars pdfnames pdfobj pdfoptionpdfminorversion pdfoutline pdfoutput pdfpageattr pdfpageheight pdfpageresources pdfpagesattr pdfpagewidth pdfpkresolution pdfprotrudechars pdfrefobj pdfrefxform pdfrefximage pdfsavepos pdfsnaprefpoint pdfsnapx pdfsnapy pdfstartlink pdfstartthread pdftexrevision pdftexversion pdfthread pdfthreadmargin pdfuniqueresname pdfvorigin pdfxform pdfximage /.split @@cs_omega = %q/ odelimiter omathaccent omathchar oradical omathchardef omathcode odelcode leftghost rightghost charwd charht chardp charit localleftbox localrightbox localinterlinepenalty localbrokenpenalty pagedir bodydir pardir textdir mathdir boxdir nextfakemath pagewidth pageheight pagerightoffset pagebottomoffset nullocp nullocplist ocp externalocp ocplist pushocplist popocplist clearocplists ocptracelevel addbeforeocplist addafterocplist removebeforeocplist removeafterocplist OmegaVersion InputTranslation OutputTranslation DefaultInputTranslation DefaultOutputTranslation noInputTranslation noOutputTranslation InputMode OutputMode DefaultInputMode DefaultOutputMode noInputMode noOutputMode noDefaultInputMode noDefaultOutputMode /.split @@cs_metatex = %q/ /.split @@cs_xetex = %q/ /.split @@cs_skip = %q/ v\! c\! s\! e\! m\! f\! \!tf \!tt \!tq \!ta \?\? csname endcsname relax \!\!string[a-f] \!\!dimen[a-k] \!\!count[a-f] \!\!toks[a-e] \!\!box[a-e] \!\!width[a-c] \!\!height[a-c] \!\!depth[a-c] \!\!done[a-f] if\!\!done[a-f] if\:\!\!done[a-f] scratch globalscratch ascii[a-d] globalascii @@expanded @@globalexpanded @EA @EAEA @EAEAEA bgroup egroup par next nextnext docommand dodocommand dododocommand \!\!width \!\!height \!\!depth \!\!plus \!\!minus \!\!to /.split @@cs_skip = %q/ [vcsemf]\! \?\? \!t[ftqa] csname endcsname relax \!\!string[a-f] \!\!dimen[a-k] \!\!count[a-f] \!\!toks[a-e] \!\!box[a-e] \!\!width[a-c] \!\!height[a-c] \!\!depth[a-c] \!\!done[a-f] if\!\!done[a-f] if\:\!\!done[a-f] scratch globalscratch ascii[a-d] globalascii @@expanded @@globalexpanded @(EA)+ [be]group par next nextnext (do)+command \!\!(width|height|depth|plus|minus|to) /.split # let's ignore \dimendef etc @@primitives_def = %q/ def edef xdef gdef let newcount newdimen newskip newbox newtoks newmarks newif newinsert newmuskip chardef mathchardef dimendef countdef toksdef newconditional definecomplexorsimple definecomplexorsimpleempty newcounter newpersistentmark installinsertion installspecial\s*\\[* installoutput\s*\\[* /.split @@types = [['invalid','*'],['okay','='],['forward','>'],['backward','<'],['unknown','?']] @@skips = /^(#{@@cs_skip.join('|')})/o def initialize(logger=nil,compact=false) @defined = Hash.new @definitive = Hash.new @used_before = Hash.new @used_after = Hash.new @dependencies = Hash.new @fineorder = Hash.new @forward = Hash.new @backward = Hash.new @disorder = Hash.new @disordercs = Hash.new @type = Hash.new @filename = 'context.tex' @files = Array.new # keep load order ! @order = Hash.new @logger = logger @filefilter = nil @namefilter = nil @compact = compact # @@cs_tex.each do |cs| @defined[cs] = ['-tex--------'] end @@cs_etex.each do |cs| @defined[cs] = ['-etex-------'] end @@cs_pdftex.each do |cs| @defined[cs] = ['-pdftex-----'] end @@cs_omega.each do |cs| @defined[cs] = ['-omega------'] end @@cs_xetex.each do |cs| @defined[cs] = ['-xetex------'] end @@cs_metatex.each do |cs| @defined[cs] = ['-metatex----'] end end def report(str) @logger.report(str) rescue false end def setfilter(data) data.split(/\s*\,\s*/).each do |d| if d =~ /\.tex$/ then @filefilter = Array.new unless @filefilter @filefilter << d else @namefilter = Array.new unless @namefilter @namefilter << d end end end def load(filename='context.tex') begin @filename = filename n = 0 File.open(filename) do |f| f.each do |line| if line =~ /^(\\input\s+|\\load[a-z]+\{)([a-z\-\.]+)(\}*)/ then ante, name, post = $1, $2, $3 @files.push(name) @order[name] = n += 1 end end end rescue @files = Array.new @order = Hash.new end end def save(filename='context.tex') unless @filefilter || @namefilter then begin data = IO.readlines(filename).each do |line| line.gsub!(/^(\\input\s+|\\load[a-z]+\{)([a-z\-\.]+)(\}*)\s*$/) do ante, name, post = $1, $2, $3 fin = (@fineorder[name] || [])-[name] dep = (@dependencies[name] || [])-[name] dis = (@disorder[name] || [])-[name] fin = if fin.size > 0 then " B[#{fin.join(' ')}]" else "" end dep = if dep.size > 0 then " A[#{dep.join(' ')}]" else "" end dis = if dis.size > 0 then " D[#{dis.join(' ')}]" else "" end "#{ante}#{name}#{post} %#{fin}#{dep}#{dis}\n" end end rescue report("error: #{$!}") else begin newname = filename.sub(/\..*$/,'.log') report("") report("writing to #{newname}") report("") File.open(newname,'w') do |f| f << data end rescue report("error: #{$!}") end end end end def analyze report('') report("loading files") report('') n = 0 # try tex and mkiv @files.each do |filename| if File.file?(filename) and f = File.open(filename) then defs, uses, l = 0, 0, 0 n += 1 report("#{n.to_s.rjust(5,' ')} #{filename}") f.each do |line| l += 1 line.chomp! line.sub!(/\%.*$/, '') line.gsub!(/\\(unexpanded|unprotected|global|protected|long)\s*(\\)/, "\\") # the superseded, overloaded, forwarded, and predefined macros # are at the outer level anyway, so there we may ignore leading # spaces (could be inside an \if); other definitions are only # accepted when they start at the beginning of a line case line when /^\\ifx\s*\\[a-zA-Z\@\!\?]+\s*\\undefined\s*(\\else)*(.*?)$/ then if $2 =~ /^\s*\\(#{@@primitives_def.join('|')})\s*\\([a-zA-Z\@\?\!]{3,})/o then pushdef(filename,l,$2,5) # kind of auto-predefined end when /^\s*\\superseded\s*\\(#{@@primitives_def.join('|')})\s*\\([a-zA-Z\@\?\!]{3,})(.*)$/o name, rest = $2, $3 pushdef(filename,l,name,1) moreuse(filename,l,rest) when /^\s*\\overloaded\s*\\(#{@@primitives_def.join('|')})\s*\\([a-zA-Z\@\?\!]{3,})(.*)$/o name, rest = $2, $3 pushdef(filename,l,name,2) moreuse(filename,l,rest) when /^\s*\\forwarded\s*\\(#{@@primitives_def.join('|')})\s*\\([a-zA-Z\@\?\!]{3,})(.*)$/o name, rest = $2, $3 pushdef(filename,l,name,3) moreuse(filename,l,rest) when /^\s*\\predefined\s*\\(#{@@primitives_def.join('|')})\s*\\([a-zA-Z\@\?\!]{3,})(.*)$/o name, rest = $2, $3 pushdef(filename,l,name,4) moreuse(filename,l,rest) when /^\\(#{@@primitives_def.join('|')})[\=\s]*\\([a-zA-Z\@\?\!]{3,})(.*)$/o name, rest = $2, $3 # \=* catches the \let \a = \b pushdef(filename,l,name,0) moreuse(filename,l,rest) when /\\newevery\s*\\([a-zA-Z\@\?\!]+)\s*\\([a-zA-Z\@\?\!]+)/ then a, b = $1, $2 pushdef(filename,l,a,0) pushdef(filename,l,b,0) else moreuse(filename,l,line) end end f.close end end @used_after.each do |cs,files| (@defined[cs] || []).each do |name| @dependencies[name] = Array.new unless @dependencies[name] files.each do |file| @dependencies[name] << file unless @dependencies[name].include?(file) end end end @used_before.each do |cs,files| (@defined[cs] || []).each do |name| @disorder[name] = Array.new unless @disorder[name] @disordercs[name] = Array.new unless @disordercs[name] @fineorder[name] = Array.new unless @fineorder[name] files.each do |file| unless @disorder[name].include?(file) || name == file then unless @defined[cs].include?(file) then if @order[name] > @order[file] then @disorder[name] << file @disordercs[name] << "#{file}:#{cs}" end end end @fineorder[name] << file unless @fineorder[name].include?(file) || name == file end end end end def moreuse(filename,l,line) line.scan(/\\if([a-zA-Z@\?\!]{3,})/) do |name, rest| # rest, else array pushuse(filename,l,"if#{name}") unless name =~ /^(true|false)$/ end line.scan(/\\([a-zA-Z@\?\!]{3,})/) do |name, rest| # rest, else array if name =~ /(true|false)$/ then pushuse(filename,l,"if#{name}") unless name =~ /^(if|set)$/ else pushuse(filename,l,name) end end end def feedback begin # get max length l = 0 list = @defined.keys.sort list.each do |cs| l = cs.length if cs.length > l end if ! @compact then n = 0 report('') report("defined: #{@defined.size}") report('') @defined.keys.sort.each do |cs| next if @namefilter && ! @namefilter.include?(cs) next if @filefilter && ! @defined[cs].include?(cs) if @defined[cs].size > 1 then dlist = @defined[cs].collect do |d| if d == @definitive[cs] then d else "[#{d}]" end end else dlist = @defined[cs] end report("#{(n += 1).to_s.rjust(5,' ')} #{cs.ljust(l,' ')} == #{dlist.join(' ')}") end end if true then n = 0 report('') report("used before defined: #{@used_before.size}") report('') @used_before.keys.sort.each do |cs| next if @namefilter && ! @namefilter.include?(cs) next if @filefilter && (@used_before[cs] & @filefilter).size == 0 used = @used_before[cs] - (@defined[cs] || []) defined = (@defined[cs] || []).join(' ') defined = "[ ? ]" if defined.empty? if used.size > 0 then report("#{(n += 1).to_s.rjust(5,' ')} #{cs.ljust(l,' ')} == #{defined} -> #{used.join(' ')}") else report("#{(n += 1).to_s.rjust(5,' ')} #{cs.ljust(l,' ')} == #{defined}") end end report(' none') if n == 0 end if ! @compact then n = 0 report('') report("used after defined: #{@used_after.size}") report('') @used_after.keys.sort.each do |cs| next if @namefilter && ! @namefilter.include?(cs) next if @filefilter && (@used_after[cs] & @filefilter).size == 0 used = @used_after[cs] - (@defined[cs] || []) defined = (@defined[cs] || []).join(' ') if used.size > 0 then report("#{(n += 1).to_s.rjust(5,' ')} #{cs.ljust(l,' ')} == #{defined} <- #{used.join(' ')}") else report("#{(n += 1).to_s.rjust(5,' ')} #{cs.ljust(l,' ')} == #{defined}") end end report(' none') if n == 0 end if ! @compact then unless @filefilter || @namefilter then [false,true].each do |mode| n = 0 report("") report("file dependecies #{if mode then '(critical)' end}") [@dependencies].each do |dependencies| report("") dependencies.keys.sort.each do |f| if dependencies[f].size > 0 then dependencies[f].delete(f) end if mode then dep = dependencies[f].delete_if do |d| f[0..3] == d[0..3] # same xxxx- prefix end else dep = dependencies[f] end if dep.size > 0 then name = f.nosuffix('tex').ljust(8,' ') list = dep.sort.collect do |k| k.nosuffix('tex') end report("#{(n += 1).to_s.rjust(5,' ')} #{name} !! #{list.join(' ')}") end end end report(' none') if n == 0 end end end if true then unless @filefilter || @namefilter then [false,true].each do |mode| [@disorder,@disordercs].each do |disorder| n = 0 report("") report("file disorder #{if mode then '(critical)' end}") report("") disorder.keys.sort.each do |f| if disorder[f].size > 0 then disorder[f].delete(f) end if mode then dis = disorder[f].delete_if do |d| f[0..3] == d[0..3] # same xxxx- prefix end else dis = disorder[f] end if dis.size > 0 then name = f.nosuffix('tex').ljust(8,' ') list = dis.sort.collect do |k| k.nosuffix('tex') end report("#{(n += 1).to_s.rjust(3,' ')} #{name} ?? #{list.join(' ')}") end end end report(' none') if n == 0 end end end rescue puts("fatal error: #{$!} #{$@.join("\n")}") end end private def csdefined?(cs,filename) @defined[cs] && @defined[cs].include?(filename) end def csbefore?(cs,filename) @used_before[cs] && @used_before[cs].include?(filename) end def csafter?(cs,filename) @used_after[cs] && @used_after[cs].include?(filename) end def csignored?(cs) cs.to_s =~ @@skips end def pushdef(filename,n,cs,type) if csignored?(cs) then # nothing elsif @defined[cs] then case type when 5 then # if test, no definition done else @definitive[cs] = filename unless @filefilter || @namefilter then report("#{cs} is redefined") unless csdefined?(cs,filename) || @compact end end @defined[cs] << filename unless @defined[cs].include?(filename) else @defined[cs] = Array.new @defined[cs] << filename @definitive[cs] = filename @type[cs] = type end end def pushuse(filename,n,cs) if csignored?(cs) then # nothing elsif @defined[cs] then @used_after[cs] = Array.new unless @used_after[cs] @used_after[cs] << filename unless csafter?(cs,filename) else @used_before[cs] = Array.new unless @used_before[cs] @used_before[cs] << filename unless csbefore?(cs,filename) end end end class Commands include CommandBase def dependencies filename = if @commandline.arguments.empty? then 'context.tex' else @commandline.arguments.first end compact = @commandline.option('compact') ['context',''].each do |progname| unless FileTest.file?(filename) then name = Kpse.found(filename, progname) if FileTest.file?(name) then filename = name break end end end if FileTest.file?(filename) && deps = TexDeps.new(logger,compact) then deps.setfilter(@commandline.option('filter')) deps.load deps.analyze deps.feedback deps.save if @commandline.option('save') else report("unknown file #{filename}") end end end class Commands @@re_utf_bom = /^\357\273\277/o # just utf-8 def disarmutfbom if @commandline.arguments.empty? then report("provide filename") else @commandline.arguments.each do |filename| report("checking '#{filename}'") if FileTest.file?(filename) then begin data = IO.read(filename) if data.sub!(@@re_utf_bom,'') then if @commandline.option('force') then if f = File.open(filename,'wb') then f << data f.close report("bom found and removed") else report("bom found and removed, but saving file fails") end else report("bom found, use '--force' to remove it") end else report("no bom found") end rescue report("bom found, but removing it fails") end else report("provide valid filename") end end end end end class Commands include CommandBase def updatecontext def fetchfile(site, name, target=nil) begin proxy = @commandline.option('proxy') if proxy && ! proxy.empty? then address, port = proxy.split(":") if address && port then http = Net::HTTP::Proxy(address, port).new(site) else http = Net::HTTP::Proxy(proxy, 80).new(site) end else http = Net::HTTP.new(site) end resp, data = http.get(name.gsub(/^\/*/, '/')) rescue return false else begin if data then name = File.basename(name) File.open(target || name, 'wb') do |f| f << data end else return false end rescue return false else return true end end end def locatedlocaltree tree = Kpse.used_path('TEXMFLOCAL') unless tree && FileTest.directory?(tree) then tree = Kpse.used_path('TEXMF') end return tree end def extractarchive(archive) unless FileTest.file?(archive) then report("fatal error, '#{archive}' has not been downloaded") return false end # unless system("unzip -uo #{archive}") then unless system("unzip -o #{archive}") then report("fatal error, make sure that you have 'unzip' in your path") return false end stubs = "scripts/context/stubs/unix/*" if System.unix? and not system("chmod +x #{stubs}") then report("change x-permissions of '#{stubs}' manually") end return true end def remakeformats system("mktexlsr") system("texmfstart texexec --make --all --fast --pdftex") system("texmfstart texexec --make --all --fast --xetex") return true end if localtree = locatedlocaltree then report("updating #{localtree}") begin Dir.chdir(localtree) rescue report("unable to change to #{localtree}") else archive = 'cont-tmf.zip' report("fetching #{archive}") unless fetchfile("www.pragma-ade.com","/context/latest/#{archive}") then report("unable to fetch #{archive}") return end report("extracting #{archive}") unless extractarchive(archive) then report("unable to extract #{archive}") return end report("remaking formats") unless remakeformats then report("unable to remak formats") end end else report("unable to locate local tree") end end end logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registeraction('touchcontextfile' , 'update context version') commandline.registeraction('contextversion' , 'report context version') commandline.registeraction('jeditinterface' , 'generate jedit syntax files [--pipe]') commandline.registeraction('bbeditinterface' , 'generate bbedit syntax files [--pipe]') commandline.registeraction('sciteinterface' , 'generate scite syntax files [--pipe]') commandline.registeraction('rawinterface' , 'generate raw syntax files [--pipe]') # commandline.registeraction('translateinterface', 'generate interface files (xml) [nl de ..]') commandline.registeraction('purgefiles' , 'remove temporary files [--all --recurse] [basename]') commandline.registeraction('documentation' , 'generate documentation [--type=] [filename]') commandline.registeraction('filterpages' ) # no help, hidden temporary feature commandline.registeraction('patternfiles' , 'generate pattern files [--all --xml --utf8] [languagecode]') commandline.registeraction('dpxmapfiles' , 'convert pdftex mapfiles to dvipdfmx [--force] [texmfroot]') commandline.registeraction('listentities' , 'create doctype entity definition from enco-uc.tex') commandline.registeraction('brandfiles' , 'add context copyright notice [--force]') commandline.registeraction('platformize' , 'replace line-endings [--recurse --force] [pattern]') commandline.registeraction('dependencies' , 'analyze depedencies within context [--save --compact --filter=[macros|filenames]] [filename]') commandline.registeraction('updatecontext' , 'download latest version and remake formats [--proxy]') commandline.registeraction('disarmutfbom' , 'remove utf bom [--force]') commandline.registervalue('type','') commandline.registervalue('filter','') commandline.registervalue('maproot','') commandline.registervalue('proxy','') commandline.registerflag('recurse') commandline.registerflag('force') commandline.registerflag('compact') commandline.registerflag('pipe') commandline.registerflag('save') commandline.registerflag('all') commandline.registerflag('xml') commandline.registerflag('log') commandline.registerflag('utf8') commandline.registerflag('doctype') # general commandline.registeraction('help') commandline.registeraction('version') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'help') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/imgtopdf.rb0000644000175000017500000000366010526734267025006 0ustar norbertnorbert#!/usr/bin/env ruby # program : newimgtopdf # copyright : PRAGMA Advanced Document Engineering # version : 2002-2006 # author : Hans Hagen # # project : ConTeXt / eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-ade.com unless defined? ownpath ownpath = $0.sub(/[\\\/]\w*?\.rb/i,'') $: << ownpath end require 'base/switch' require 'base/logger' require 'graphics/magick' banner = ['ImgToPdf', 'version 1.1.2', '2002-2006', 'PRAGMA ADE/POD'] class Commands include CommandBase # nowadays we would force a directive, but # for old times sake we handle default usage def main filename = @commandline.argument('first') if filename.empty? then help else convert end end # actions def convert magick = Magick.new(session) ['compression','depth','colorspace','quality','inputpath','outputpath'].each do |v| magick.setvariable(v,@commandline.option(v)) end @commandline.arguments.each do |fullname| magick.setvariable('inputfile',fullname) magick.setvariable('outputfile',fullname.gsub(/(\..*?$)/io, '.pdf')) if @commandline.option('auto') then magick.autoconvert else magick.convert end end end end logger = Logger.new(banner.shift) commandline = CommandLine.new commandline.registerflag('auto') commandline.registervalue('compression') commandline.registervalue('depth') commandline.registervalue('colorspace') commandline.registervalue('quality') commandline.registervalue('inputpath') commandline.registervalue('outputpath') commandline.registeraction('help') commandline.registeraction('version') commandline.registeraction('convert', 'convert image into pdf') commandline.expand Commands.new(commandline,logger,banner).send(commandline.action || 'main') context-2013.05.28.20130704/texmf-dist/scripts/context/ruby/rslibtool.rb0000644000175000017500000000515511571377075025210 0ustar norbertnorbert# program : rslibtool # copyright : PRAGMA Publishing On Demand # version : 1.00 - 2002 # author : Hans Hagen # # project : eXaMpLe # concept : Hans Hagen # info : j.hagen@xs4all.nl # www : www.pragma-pod.com / www.pragma-ade.com # --add --base=filename --path=directory pattern # --remove --base=filename --path=directory label # --sort --base=filename --path=directory # --purge --base=filename --path=directory # --dummy --base=filename # --namespace # rewrite unless defined? ownpath ownpath = $0.sub(/[\\\/]\w*?\.rb/i,'') $: << ownpath end require 'rslb/base' require 'xmpl/base' require 'xmpl/switch' session = Example.new('rslbtool', '1.0', 'PRAGMA POD') session.identify commandline = CommandLine.new commandline.registerflag('add') commandline.registerflag('remove') commandline.registerflag('delete') commandline.registerflag('sort') commandline.registerflag('purge') commandline.registerflag('dummy') commandline.registerflag('process') commandline.registerflag('namespace') commandline.registervalue('prefix') commandline.registervalue('base') commandline.registervalue('path') commandline.registervalue('result') commandline.registervalue('texexec') commandline.registervalue('zipalso') commandline.expand session.inherit(commandline) base = session.get('option.base') path = session.get('option.path') base = 'rslbtool.xml' if base.empty? # when path is given, assume that arg list is list of # suffixes, else assume it is a list of globbed filespec if path.empty? base += '.xml' unless base =~ /\..+$/ list = commandline.arguments else Dir.chdir(File.dirname(path)) list = Dir.glob("*.{#{commandline.arguments.join(',')}}") end begin reslib = Resource.new(base,session.get('option.namespace')) reslib.load(base) rescue session.error('problems with loading base') exit end unless session.get('option.texexec').empty? reslib.set_texexec(session.get('option.texexec')) end if session.get('option.add') session.report('adding records', list) reslib.add_figures(list,session.get('option.prefix')) elsif session.get('option.remove') or session.get('option.delete') session.report('removing records') reslib.delete_figures(list) elsif session.get('option.sort') session.report('sorting records') reslib.sort_figures() elsif session.get('option.purge') session.report('purging records') reslib.purge_figures() elsif session.get('option.dummy') session.report('creating dummy records') reslib.create_dummies(session.get('option.process'),session.get('option.result'),session.get('option.zipalso')) else session.warning('provide action') end reslib.save(base) context-2013.05.28.20130704/texmf-dist/scripts/context/lua/0000755000175000017500000000000012165205647022437 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-patterns.lua0000644000175000017500000006456612161703335025622 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-patterns'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, find, concat, gsub, match, gmatch = string.format, string.find, table.concat, string.gsub, string.match, string.gmatch local byte, char = utf.byte, utf.char local addsuffix = file.addsuffix local lpegmatch, validutf8 = lpeg.match, lpeg.patterns.validutf8 local helpinfo = [[ mtx-patterns ConTeXt Pattern File Management 0.20 generate context language files (mnemonic driven, if not given then all) check pattern file (or those used by context when no file given) source path where hyph-foo.tex files are stored destination path additional patterns: e.g.: =cy,hyph-cy,welsh compress data update words in given file Examples mtxrun --script pattern --check hyph-*.tex mtxrun --script pattern --check --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns/tex --destination=e:/tmp/patterns mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns/txt --destination=e:/tmp/patterns ]] local application = logs.application { name = "mtx-patterns", banner = "ConTeXt Pattern File Management 0.20", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.patterns = scripts.patterns or { } local permitted_characters = table.tohash { 0x0009, -- tab 0x0027, -- apostrofe 0x02BC, -- modifier apostrofe (used in greek) 0x002D, -- hyphen 0x200C, -- zwnj 0x2019, -- quote right 0x1FBD, -- greek, but no letter: symbol modifier 0x1FBF, -- greek, but no letter: symbol modifier } local ignored_ancient_greek = table.tohash { 0x1FD3, -- greekiotadialytikatonos (also 0x0390) 0x1FE3, -- greekupsilondialytikatonos (also 0x03B0) 0x1FBD, -- greek, but no letter: symbol modifier 0x1FBF, -- greek, but no letter: symbol modifier 0x03F2, -- greeksigmalunate 0x02BC, -- modifier apostrofe) } local ignored_french = table.tohash { 0x02BC, -- modifier apostrofe } local replaced_whatever = { [char(0x2019)] = char(0x0027) } scripts.patterns.list = { { "af", "hyph-af", "afrikaans" }, -- { "ar", "hyph-ar", "arabic" }, -- { "as", "hyph-as", "assamese" }, { "bg", "hyph-bg", "bulgarian" }, -- { "bn", "hyph-bn", "bengali" }, { "ca", "hyph-ca", "catalan" }, -- { "??", "hyph-cop", "coptic" }, { "cs", "hyph-cs", "czech" }, { "cy", "hyph-cy", "welsh" }, { "da", "hyph-da", "danish" }, { "deo", "hyph-de-1901", "german, old spelling" }, { "de", "hyph-de-1996", "german, new spelling" }, -- { "??", "hyph-de-ch-1901", "swiss german" }, -- { "??", "hyph-el-monoton", "greek" }, -- { "gr", "hyph-el-polyton", "greek" }, { "agr", "hyph-grc", "ancient greek", ignored_ancient_greek }, { "gb", "hyph-en-gb", "british english" }, { "us", "hyph-en-us", "american english" }, -- { "eo", "hyph-eo", "esperanto" }, { "es", "hyph-es", "spanish" }, { "et", "hyph-et", "estonian" }, { "eu", "hyph-eu", "basque" }, -- { "fa", "hyph-fa", "farsi" }, { "fi", "hyph-fi", "finnish" }, { "fr", "hyph-fr", "french", ignored_french }, -- { "??", "hyph-ga", "irish" }, -- { "??", "hyph-gl", "galician" }, -- { "gu", "hyph-gu", "gujarati" }, -- { "hi", "hyph-hi", "hindi" }, { "hr", "hyph-hr", "croatian" }, -- { "??", "hyph-hsb", "upper sorbian" }, { "hu", "hyph-hu", "hungarian" }, -- { "hy", "hyph-hy", "armenian" }, -- { "??", "hyph-ia", "interlingua" }, -- { "??", "hyph-id", "indonesian" }, { "is", "hyph-is", "icelandic" }, { "it", "hyph-it", "italian" }, -- { "??", "hyph-kmr", "kurmanji" }, -- { "kn", "hyph-kn", "kannada" }, { "la", "hyph-la", "latin" }, -- { "lo", "hyph-lo", "lao" }, { "lt", "hyph-lt", "lithuanian" }, { "lv", "hyph-lv", "latvian" }, -- { "ml", "hyph-ml", "..." }, { "mn", "hyph-mn-cyrl", "mongolian, cyrillic script" }, -- { "mr", "hyph-mr", "..." }, { "nb", "hyph-nb", "norwegian bokmål" }, { "nl", "hyph-nl", "dutch" }, { "nn", "hyph-nn", "norwegian nynorsk" }, -- { "or", "hyph-or", "oriya" }, -- { "pa", "hyph-pa", "panjabi" }, -- { "", "hyph-", "" }, { "pl", "hyph-pl", "polish" }, { "pt", "hyph-pt", "portuguese" }, { "ro", "hyph-ro", "romanian" }, { "ru", "hyph-ru", "russian" }, -- { "sa", "hyph-sa", "sanskrit" }, { "sk", "hyph-sk", "slovak" }, { "sl", "hyph-sl", "slovenian" }, { "sr", "hyph-sr-cyrl", "serbian" }, -- { "sr", "hyph-sr-latn", "serbian" }, { "sv", "hyph-sv", "swedish" }, -- { "ta", "hyph-ta", "tamil" }, -- { "te", "hyph-te", "telugu" }, { "th", "hyph-th", "thai" }, { "tk", "hyph-tk", "turkmen" }, { "tr", "hyph-tr", "turkish" }, { "uk", "hyph-uk", "ukrainian" }, { "zh", "hyph-zh-latn-pinyin","zh-latn, chinese pinyin" }, } -- stripped down from lpeg example: local utf = unicode.utf8 function utf.check(str) return lpeg.match(lpeg.patterns.validutf8,str) end -- *.tex -- *.hyp.txt *.pat.txt *.lic.txt *.chr.txt function scripts.patterns.load(path,name,mnemonic,ignored) local basename = name local fullname = file.join(path,name) local texfile = addsuffix(fullname,"tex") local hypfile = addsuffix(fullname,"hyp.txt") local patfile = addsuffix(fullname,"pat.txt") local licfile = addsuffix(fullname,"lic.txt") -- local chrfile = addsuffix(fullname,"chr.txt") local okay = true local hyphenations, patterns, comment, stripset = "", "", "", "" local splitpatternsnew, splithyphenationsnew = { }, { } local splitpatternsold, splithyphenationsold = { }, { } local usedpatterncharactersnew, usedhyphenationcharactersnew = { }, { } if lfs.isfile(patfile) then report("using txt files %s.[hyp|pat|lic].txt",name) comment, patterns, hyphenations = io.loaddata(licfile) or "", io.loaddata(patfile) or "", io.loaddata(hypfile) or "" hypfile, patfile, licfile = hypfile, patfile, licfile elseif lfs.isfile(texfile) then report("using tex file %s.txt",name) local data = io.loaddata(texfile) or "" if data ~= "" then data = gsub(data,"([\n\r])\\input ([^ \n\r]+)", function(previous,subname) local subname = addsuffix(subname,"tex") local subfull = file.join(file.dirname(texfile),subname) local subdata = io.loaddata(subfull) or "" if subdata == "" then report("%s: no subfile %s",basename,subname) end return previous .. subdata end) data = gsub(data,"%%.-[\n\r]","") data = gsub(data," *[\n\r]+","\n") patterns = match(data,"\\patterns[%s]*{[%s]*(.-)[%s]*}") or "" hyphenations = match(data,"\\hyphenation[%s]*{[%s]*(.-)[%s]*}") or "" comment = match(data,"^(.-)[\n\r]\\patterns") or "" else okay = false end else okay = false end if okay then -- split into lines local how = lpeg.patterns.whitespace^1 splitpatternsnew = lpeg.split(how,patterns) splithyphenationsnew = lpeg.split(how,hyphenations) end if okay then -- remove comments local function check(data,splitdata,name) if find(data,"%%") then for i=1,#splitdata do local line = splitdata[i] if find(line,"%%") then splitdata[i] = gsub(line,"%%.*$","") report("%s: removing comment: %s",basename,line) end end end end check(patterns,splitpatternsnew,patfile) check(hyphenations,splithyphenationsnew,hypfile) end if okay then -- remove lines with commands local function check(data,splitdata,name) if find(data,"\\") then for i=1,#splitdata do local line = splitdata[i] if find(line,"\\") then splitdata[i] = "" report("%s: removing line with command: %s",basename,line) end end end end check(patterns,splitpatternsnew,patfile) check(hyphenations,splithyphenationsnew,hypfile) end if okay then -- check for valid utf local function check(data,splitdata,name) for i=1,#splitdata do local line = splitdata[i] local ok = lpegmatch(validutf8,line) if not ok then splitdata[i] = "" report("%s: removing line with invalid utf: %s",basename,line) end end -- check for commands being used in comments end check(patterns,splitpatternsnew,patfile) check(hyphenations,splithyphenationsnew,hypfile) end if okay then -- remove funny lines local cd = characters.data local stripped = { } local function check(splitdata,special,name) local used = { } for i=1,#splitdata do local line = splitdata[i] for b in line:utfvalues() do -- could be an lpeg if b == special then -- not registered elseif permitted_characters[b] then used[char(b)] = true else local cdb = cd[b] if not cdb then report("%s: no entry in chardata for character %C",basename,b) else local ct = cdb.category if ct == "lu" or ct == "ll" or ct == "lo" or ct == "mn" then -- hm, really mn ? used[char(b)] = true elseif ct == "nd" then -- number else report("%s: removing line with suspected utf character %C, category %s: %s",basename,b,ct,line) splitdata[i] = "" break end end end end end return used end usedpatterncharactersnew = check(splitpatternsnew,byte(".")) usedhyphenationcharactersnew = check(splithyphenationsnew,byte("-")) for k, v in next, stripped do report("%s: entries that contain character %C have been omitted",basename,k) end end if okay then local function stripped(what,ignored) -- ignored (per language) local p = nil if ignored then for k, v in next, ignored do if p then p = p + lpeg.P(char(k)) else p = lpeg.P(char(k)) end end p = lpeg.P{ p + 1 * lpeg.V(1) } -- anywhere end -- replaced (all languages) local r = nil for k, v in next, replaced_whatever do if r then r = r + lpeg.P(k)/v else r = lpeg.P(k)/v end end r = lpeg.Cs((r + 1)^0) local result = { } for i=1,#what do local line = what[i] if p and lpegmatch(p,line) then report("%s: discarding conflicting pattern: %s",basename,line) else -- we can speed this up by testing for replacements in the string local l = lpegmatch(r,line) if l ~= line then report("%s: sanitizing pattern: %s -> %s (for old patterns)",basename,line,l) end result[#result+1] = l end end return result end splitpatternsold = stripped(splitpatternsnew,ignored) splithyphenationsold = stripped(splithyphenationsnew,ignored) end if okay then -- discarding duplicates local function check(data,splitdata,name) local used, collected = { }, { } for i=1,#splitdata do local line = splitdata[i] if line == "" then -- discard elseif used[line] then -- discard report("%s: discarding duplicate pattern: %s",basename,line) else used[line] = true collected[#collected+1] = line end end return collected end splitpatternsnew = check(patterns,splitpatternsnew,patfile) splithyphenationsnew = check(hyphenations,splithyphenationsnew,hypfile) splitpatternsold = check(patterns,splitpatternsold,patfile) splithyphenationsold = check(hyphenations,splithyphenationsold,hypfile) end if not okay then report("no valid file %s.*",name) end local function getused(t) local u = { } for k, v in next, t do if ignored and ignored[k] then elseif replaced_whatever[k] then else u[k] = v end end return u end local usedpatterncharactersold = getused(usedpatterncharactersnew) local usedhyphenationcharactersold = getused(usedhyphenationcharactersnew) return okay, splitpatternsnew, splithyphenationsnew, splitpatternsold, splithyphenationsold, comment, stripset, usedpatterncharactersnew, usedhyphenationcharactersnew, usedpatterncharactersold, usedhyphenationcharactersold end function scripts.patterns.save(destination,mnemonic,name,patternsnew,hyphenationsnew,patternsold,hyphenationsold,comment,stripped, pusednew,husednew,pusedold,husedold,ignored) local nofpatternsnew, nofhyphenationsnew = #patternsnew, #hyphenationsnew local nofpatternsold, nofhyphenationsold = #patternsold, #hyphenationsold report("language %s has %s old and %s new patterns and %s old and %s new exceptions",mnemonic,nofpatternsold,nofpatternsnew,nofhyphenationsold,nofhyphenationsnew) if mnemonic ~= "??" then local punew = concat(table.sortedkeys(pusednew), " ") local hunew = concat(table.sortedkeys(husednew), " ") local puold = concat(table.sortedkeys(pusedold), " ") local huold = concat(table.sortedkeys(husedold), " ") local rmefile = file.join(destination,"lang-"..mnemonic..".rme") local patfile = file.join(destination,"lang-"..mnemonic..".pat") local hypfile = file.join(destination,"lang-"..mnemonic..".hyp") local luafile = file.join(destination,"lang-"..mnemonic..".lua") -- suffix might change to llg local topline = "% generated by mtxrun --script pattern --convert" local banner = "% for comment and copyright, see " .. file.basename(rmefile) report("saving language data for %s",mnemonic) if not comment or comment == "" then comment = "% no comment" end if not type(destination) == "string" then destination = "." end local compression = environment.arguments.compress and "zlib" or nil local lines = string.splitlines(comment) for i=1,#lines do if not find(lines[i],"^%%") then lines[i] = "% " .. lines[i] end end local metadata = { -- texcomment = comment, texcomment = concat(lines,"\n"), source = name, mnemonic = mnemonic, } local patterndata, hyphenationdata if nofpatternsnew > 0 then local data = concat(patternsnew," ") patterndata = { n = nofpatternsnew, compression = compression, length = #data, data = compression and zlib.compress(data,9) or data, characters = concat(table.sortedkeys(pusednew),""), minhyphenmin = 1, -- determined by pattern author minhyphenmax = 1, -- determined by pattern author } else patterndata = { n = 0, } end if nofhyphenationsnew > 0 then local data = concat(hyphenationsnew," ") hyphenationdata = { n = nofhyphenationsnew, compression = compression, length = #data, data = compression and zlib.compress(data,9) or data, characters = concat(table.sortedkeys(husednew),""), } else hyphenationdata = { n = 0, } end local data = { -- a prelude to language goodies, like we have font goodies and in -- mkiv we can use this file directly version = "1.001", comment = topline, metadata = metadata, patterns = patterndata, exceptions = hyphenationdata, } os.remove(rmefile) os.remove(patfile) os.remove(hypfile) os.remove(luafile) io.savedata(rmefile,format("%s\n\n%s",topline,comment)) io.savedata(patfile,format("%s\n\n%s\n\n%% used: %s\n\n\\patterns{\n%s}",topline,banner,puold,concat(patternsold,"\n"))) io.savedata(hypfile,format("%s\n\n%s\n\n%% used: %s\n\n\\hyphenation{\n%s}",topline,banner,huold,concat(hyphenationsold,"\n"))) io.savedata(luafile,table.serialize(data,true)) end end function scripts.patterns.prepare() -- dofile(resolvers.findfile("char-def.lua")) -- local specification = environment.argument("specification") if specification then local components = utilities.parsers.settings_to_array(specification) if #components == 3 then table.insert(scripts.patterns.list,1,components) report("specification added: %s %s %s",table.unpack(components)) else report('invalid specification: %q, "xx,lang-yy,zzzz" expected',specification) end end end function scripts.patterns.check() local path = environment.argument("path") or "." local files = environment.files local only = false if #files > 0 then only = table.tohash(files) end for k, v in next, scripts.patterns.list do local mnemonic, name, ignored = v[1], v[2], v[4] if not only or only[mnemonic] then report("checking language %s, file %s", mnemonic, name) local okay = scripts.patterns.load(path,name,mnemonic,ignored) if not okay then report("there are errors that need to be fixed") end report() end end end function scripts.patterns.convert() local path = environment.argument("path") or "." if path == "" then report("provide sourcepath using --path ") else local destination = environment.argument("destination") or "." if path == destination then report("source path and destination path should differ (use --path and/or --destination)") else local files = environment.files local only = false if #files > 0 then only = table.tohash(files) end for k, v in next, scripts.patterns.list do local mnemonic, name, ignored = v[1], v[2], v[4] if not only or only[mnemonic] then report("converting language %s, file %s", mnemonic, name) local okay, patternsnew, hyphenationsnew, patternsold, hyphenationsold, comment, stripped, pusednew, husednew, pusedold, husedold = scripts.patterns.load(path,name,mnemonic,ignored) if okay then scripts.patterns.save(destination,mnemonic,name,patternsnew,hyphenationsnew,patternsold,hyphenationsold,comment,stripped, pusednew,husednew,pusedold,husedold,ignored) else report("convertion aborted due to error(s)") end report() end end end end end local function valid(filename) local specification = table.load(filename) if not specification then return false end local lists = specification.lists if not lists then return false end return specification, lists end function scripts.patterns.words() if environment.arguments.update then local compress = environment.arguments.compress for i=1,#environment.files do local filename = environment.files[i] local fullname = resolvers.findfile(filename) if fullname and fullname ~= "" then report("checking file %a",fullname) local specification, lists = valid(fullname) if specification and #lists> 0 then report("updating %a of language %a",filename,specification.language) for i=1,#lists do local entry = lists[i] local filename = entry.filename if filename then local fullname = resolvers.findfile(filename) if fullname then report("adding words from %a",fullname) local data = io.loaddata(fullname) or "" data = string.strip(data) data = string.gsub(data,"%s+"," ") if compress then entry.data = zlib.compress(data,9) entry.compression = "zlib" entry.length = #data else entry.data = data entry.compression = nil entry.length = #data end else entry.data = "" entry.compression = nil entry.length = 0 end else entry.data = "" entry.compression = nil entry.length = 0 end end specification.version = "1.00" specification.timestamp = os.localtime() report("updated file %a is saved",filename) table.save(filename,specification) else report("no file %a",filename) end else report("nothing done") end end else report("provide --update") end end if environment.argument("check") then scripts.patterns.prepare() scripts.patterns.check() elseif environment.argument("convert") then scripts.patterns.prepare() scripts.patterns.convert() elseif environment.argument("words") then scripts.patterns.words() -- for the moment here elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end -- mtxrun --script pattern --check hyph-*.tex -- mtxrun --script pattern --check --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns -- mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns/tex --destination=e:/tmp/patterns -- mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns/txt --destination=e:/tmp/patterns -- copy /Y *.hyp e:\tex-context\tex\texmf-context\tex\context\patterns -- copy /Y *.pat e:\tex-context\tex\texmf-context\tex\context\patterns -- copy /Y *.rme e:\tex-context\tex\texmf-context\tex\context\patterns -- copy /Y *.lua e:\tex-context\tex\texmf-context\tex\context\patterns -- move /Y *.hyp e:\tex-context\tex\texmf-mine\tex\context\patterns -- move /Y *.pat e:\tex-context\tex\texmf-mine\tex\context\patterns -- move /Y *.rme e:\tex-context\tex\texmf-mine\tex\context\patterns -- move /Y *.lua e:\tex-context\tex\texmf-mine\tex\context\patterns -- mtxrun --script pattern --words --update word-th.lua --compress context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-modules.lua0000644000175000017500000001566712134352503025425 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-modules'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } scripts = scripts or { } scripts.modules = scripts.modules or { } local helpinfo = [[ mtx-modules ConTeXt Module Documentation Generators 1.00 convert source files (tex, mkii, mkiv, mp) to 'ted' files process source files (tex, mkii, mkiv, mp) to 'pdf' files use original name with suffix 'prep' appended ]] local application = logs.application { name = "mtx-modules", banner = "ConTeXt Module Documentation Generators 1.00", helpinfo = helpinfo, } local report = application.report -- Documentation can be woven into a source file. This script can generates -- a file with the documentation and source fragments properly tagged. The -- documentation is included as comment: -- -- %D ...... some kind of documentation -- %M ...... macros needed for documenation -- %S B begin skipping -- %S E end skipping -- -- The generated file is structured as: -- -- \starttypen -- \startmodule[type=suffix] -- \startdocumentation -- \stopdocumentation -- \startdefinition -- \stopdefinition -- \stopmodule -- \stoptypen -- -- Macro definitions specific to the documentation are not surrounded by -- start-stop commands. The suffix specificaction can be overruled at runtime, -- but defaults to the file extension. This specification can be used for language -- depended verbatim typesetting. -- -- In the mkiv variant we filter the \module settings so that we don't have -- to mess with global document settings. local find, format, sub, is_empty, strip, gsub = string.find, string.format, string.sub, string.is_empty, string.strip, string.gsub local function source_to_ted(inpname,outname,filetype) local data = io.loaddata(inpname) if not data or data == "" then report("invalid module name '%s'",inpname) return end report("converting '%s' to '%s'",inpname,outname) local skiplevel, indocument, indefinition = 0, false, false local started = false local settings = format("type=%s",filetype or file.suffix(inpname)) local preamble, n = lpeg.match(lpeg.Cs((1-lpeg.patterns.newline^2)^1) * lpeg.Cp(),data) if preamble then preamble = string.match(preamble,"\\module.-%[(.-)%]") if preamble then preamble = gsub(preamble,"%%D *","") preamble = gsub(preamble,"%%(.-)[\n\r]","") preamble = gsub(preamble,"[\n\r]","") preamble = strip(preamble) settings = format("%s,%s",settings,preamble) data = string.sub(data,n,#data) end end local lines = string.splitlines(data) local result = { } result[#result+1] = format("\\startmoduledocumentation[%s]",settings) for i=1,#lines do local line = lines[i] if find(line,"^%%D ") or find(line,"^%%D$") then if skiplevel == 0 then local someline = #line < 3 and "" or sub(line,4,#line) if indocument then result[#result+1] = someline else if indefinition then result[#result+1] = "\\stopdefinition" indefinition = false end if not indocument then result[#result+1] = "\\startdocumentation" end result[#result+1] = someline indocument = true end end elseif find(line,"^%%M ") or find(line,"^%%M$") then if skiplevel == 0 then local someline = (#line < 3 and "") or sub(line,4,#line) result[#result+1] = someline end elseif find(line,"^%%S B") then skiplevel = skiplevel + 1 elseif find(line,"^%%S E") then skiplevel = skiplevel - 1 elseif find(line,"^%%") then -- nothing elseif skiplevel == 0 then inlocaldocument = indocument inlocaldocument = false local someline = line if indocument then result[#result+1] = "\\stopdocumentation" indocument = false end if indefinition then if is_empty(someline) then result[#result+1] = "\\stopdefinition" indefinition = false else result[#result+1] = someline end elseif not is_empty(someline) then result[#result+1] = "\n" result[#result+1] = "\\startdefinition" indefinition = true if inlocaldocument then -- nothing else result[#result+1] = someline end end end end if indocument then result[#result+1] = "\\stopdocumentation" end if indefinition then result[#result+1] = "\\stopdefinition" end result[#result+1] = "\\stopmoduledocumentation" io.savedata(outname,table.concat(result,"\n")) return true end local suffixes = table.tohash { 'tex','mkii','mkiv', 'mkvi', 'mp' } function scripts.modules.process(runtex) local processed = { } local prep = environment.argument("prep") local files = environment.files for i=1,#files do local shortname = files[i] local suffix = file.suffix(shortname) if suffixes[suffix] then local longname if prep then longname = shortname .. ".prep" else longname = file.removesuffix(shortname) .. "-" .. suffix .. ".ted" end local done = source_to_ted(shortname,longname) if done and runtex then os.execute(format("mtxrun --script context --usemodule=mod-01 --purge %s",longname)) processed[#processed+1] = longname end end end for i=1,#processed do local name = processed[i] report("modules","processed: %s",name) end end -- context --ctx=m-modules.ctx xxx.mkiv if environment.argument("process") then scripts.modules.process(true) elseif environment.argument("convert") then scripts.modules.process(false) elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-unzip.lua0000644000175000017500000000771012130411274025105 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-unzip'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- maybe --pattern local format = string.format local helpinfo = [[ mtx-unzip Simple Unzipper 0.10 list files in archive flatten unzipped directory structure extract files ]] local application = logs.application { name = "mtx-unzip", banner = "Simple Unzipper 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.unzipper = scripts.unzipper or { } function scripts.unzipper.opened() local filename = environment.files[1] if filename and filename ~= "" then filename = file.addsuffix(filename,'zip') local zipfile = zip.open(filename) if zipfile then return zipfile end end report("no zip file: %s",filename) return false end function scripts.unzipper.list() local zipfile = scripts.unzipper.opened() if zipfile then local n = 0 for k in zipfile:files() do if #k.filename > n then n = #k.filename end end local files, paths, compressed, uncompressed = 0, 0, 0, 0 local template_a = "%-"..n.."s" local template_b = "%-"..n.."s % 9i % 9i" local template_c = "\n%-"..n.."s % 9i % 9i" for k in zipfile:files() do if k.filename:find("/$") then paths = paths + 1 print(format(template_a, k.filename)) else files = files + 1 local cs, us = k.compressed_size, k.uncompressed_size if cs > compressed then compressed = cs end if us > uncompressed then uncompressed = us end print(format(template_b,k.filename,cs,us)) end end -- check following pattern, n is not enough print(format(template_c,files .. " files, " .. paths .. " directories",compressed,uncompressed)) end end function zip.loaddata(zipfile,filename) local f = zipfile:open(filename) if f then local data = f:read("*a") f:close() return data end return nil end function scripts.unzipper.extract() local zipfile = scripts.unzipper.opened() if zipfile then local junk = environment.arguments["j"] or environment.arguments["junk"] for k in zipfile:files() do local filename = k.filename if filename:find("/$") then if not junk then lfs.mkdir(filename) end else local data = zip.loaddata(zipfile,filename) if data then if junk then filename = file.basename(filename) end io.savedata(filename,data) print(filename) end end end end end if environment.arguments["h"] or environment.arguments["help"] then application.help() elseif environment.arguments["l"] or environment.arguments["list"] then scripts.unzipper.list(zipfile) elseif environment.arguments["exporthelp"] then application.export(environment.arguments["exporthelp"],environment.files[1]) elseif environment.files[1] then -- implicit --extract scripts.unzipper.extract(zipfile) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-server-ctx-fonttest.lua0000644000175000017500000006654312130411274027717 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-server-ctx-fonttest'] = { version = 1.001, comment = "Font Feature Tester", author = "Hans Hagen", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- probably too much but who cares dofile(resolvers.findfile("trac-lmx.lua","tex")) dofile(resolvers.findfile("font-ini.lua","tex")) dofile(resolvers.findfile("font-con.lua","tex")) dofile(resolvers.findfile("font-oti.lua","tex")) dofile(resolvers.findfile("font-otf.lua","tex")) dofile(resolvers.findfile("font-otp.lua","tex")) dofile(resolvers.findfile("font-ott.lua","tex")) dofile(resolvers.findfile("font-syn.lua","tex")) dofile(resolvers.findfile("font-mis.lua","tex")) local format, gsub, concat, match, find = string.format, string.gsub, table.concat, string.match, string.find local report = logs.reporter("ctx-fonttest") local sample_line = "This is a sample line!" local tempname = "mtx-server-ctx-fonttest-temp" local temppath = caches.setfirstwritablefile("temp","mtx-server-ctx-fonttest") local basename = "mtx-server-ctx-fonttest-data.lua" local basepath = temppath local remove_suffixes = { "tex", "pdf", "log" } local what_options = { "trace", "basemode" } for i=1,#remove_suffixes do os.remove(file.join(temppath,file.addsuffix(tempname,remove_suffixes[i]))) end local process_templates = { } process_templates.default = [[ \starttext \setupdirections[bidi=global] \definefontfeature[sample][analyze=yes,%s] \definedfont[name:%s*sample] \startTEXpage[offset=3pt] \detokenize{%s} \stopTEXpage \stoptext ]] process_templates.cache = [[ \starttext \definedfont[name:%s] \startTEXpage[offset=3pt] cached: \detokenize{%s} \stopTEXpage \stoptext ]] process_templates.trace = [[ \usemodule[fnt-20] \definefontfeature[sample][%s] \setupcolors[state=start] \setupdirections[bidi=global] \setvariables [otftracker] [title=Test Run, font=name:%s, direction=0, features=sample, sample={‍\detokenize{%s}}] ]] local javascripts = [[ function selected_radio(name) { var form = document.forms["main-form"] ; var script = form.elements[name] ; if (script) { var n = script.length ; if (n) { for (var i=0; i safe name     family name     style-variant-weight-width     font name     weight     filename ]] local template_d = [[ %s     %s     %s-%s-%s-%s     %s     %s     %s ]] local function select_font() local t = fonts.names.list(".*",false,true) if t then local listoffonts = { } listoffonts[#listoffonts+1] = "" listoffonts[#listoffonts+1] = template_h for k, v in table.sortedhash(t) do local kind = v.format if kind == "otf" or kind == "ttf" or kind == "ttc" then local fontname = v.fontname listoffonts[#listoffonts+1] = format(template_d, fontname, fontname, v.familyname or "", t.variant or "normal", t.weight or "normal", t.width or "normal", t.style or "normal", v.rawname or fontname, v.fontweight or "", v.filename or "" ) end end listoffonts[#listoffonts+1] = "
" return concat(listoffonts,"\n") end return "no fonts" end local edit_template = [[

name:    title: 

scripts: %s

languages: %s

features: %s

options: %s ]] -- local result_template = [[



results: tex file pdf file

]] scripts.webserver.registerpath(temppath) local function get_specification(name) return fonts.names.resolvedspecification(name or "") end local function edit_font(currentfont,detail,tempname) report("entering edit mode for '%s'",currentfont) local specification = get_specification(currentfont) if specification then local htmldata = showfeatures(specification.filename) if htmldata then local features, languages, scripts, options = { }, { }, { }, { } local sorted = table.sortedkeys(htmldata.scripts) for k=1,#sorted do local v = sorted[k] local s = fonts.handlers.otf.tables.scripts[v] or v if detail and v == detail.script then scripts[#scripts+1] = format(" %s",s,v,v,v,v) else scripts[#scripts+1] = format(" %s",s,v,v,v,v) end end local sorted = table.sortedkeys(htmldata.languages) for k=1,#sorted do local v = sorted[k] local l = fonts.handlers.otf.tables.languages[v] or v if detail and v == detail.language then languages[#languages+1] = format(" %s",l,v,v,v,v) else languages[#languages+1] = format(" %s",l,v,v,v,v) end end local sorted = table.sortedkeys(htmldata.features) for k=1,#sorted do local v = sorted[k] local f = fonts.handlers.otf.tables.features[v] or v if detail and detail["f-"..v] then features[#features+1] = format(" %s",f,v,v,v,v) else features[#features+1] = format(" %s",f,v,v,v,v) end end for k=1,#what_options do local v = what_options[k] if detail and detail["o-"..v] then options[#options+1] = format(" %s",v,v,v) else options[#options+1] = format(" %s",v,v,v) end end local e = format(edit_template, (detail and detail.sampletext) or sample_line,(detail and detail.name) or "no name",(detail and detail.title) or "", concat(scripts," "),concat(languages," "),concat(features," "),concat(options," ")) if tempname then local pdffile, texfile = file.addsuffix(tempname,"pdf"), file.addsuffix(tempname,"tex") local r = format(result_template,pdffile,texfile,pdffile) return e .. r, htmldata.javascript or "" else return e, htmldata.javascript or "" end else return "error, nothing set up yet" end else return "error, no info about font" end end local function process_font(currentfont,detail) -- maybe just fontname local features = { "mode=node", format("language=%s",detail.language or "dflt"), format("script=%s",detail.script or "dflt"), } for k,v in next, detail do local f = match(k,"^f%-(.*)$") if f then features[#features+1] = format("%s=yes",f) end end local variant = process_templates.default if detail["o-trace"] then variant = process_templates.trace end local sample = string.strip(detail.sampletext or "") if sample == "" then sample = sample_line end report("sample text: %s",sample) dir.mkdirs(temppath) local fullname = file.join(temppath,file.addsuffix(tempname,"tex")) local data = format(variant,concat(features,","),currentfont,sample) local command = format("mtxrun --path=%q --script context --once --batchmode %q",temppath,tempname) report("filename: %s",fullname) report("command: %s",command) io.savedata(fullname,data) os.execute(command) return edit_font(currentfont,detail,tempname) end local tex_template = [[


%s
]] local function show_source(currentfont,detail) if tempname and tempname ~= "" then local data = io.loaddata(file.join(temppath,file.addsuffix(tempname,"tex"))) or "no source yet" return format(tex_template,data) else return "no source file" end end local function show_log(currentfont,detail) if tempname and tempname ~= "" then local data = io.loaddata(file.join(temppath,file.addsuffix(tempname,'log'))) or "no log file yet" data = gsub(data,"[%s%%]*begin of optionfile.-end of optionfile[%s%%]*","\n") return format(tex_template,data) else return "no log file" end end local function show_font(currentfont,detail) local specification = get_specification(currentfont) local features = fonts.helpers.getfeatures(specification.filename) local result = { } result[#result+1] = format("

names

",what) result[#result+1] = "" result[#result+1] = format("",currentfont) result[#result+1] = format("",specification.fontname or "-") result[#result+1] = format("",specification.fontfile or "-") result[#result+1] = format("",specification.familyname or "-") result[#result+1] = format("",specification.fontweight or "-") result[#result+1] = format("",specification.format or "-") result[#result+1] = format("",specification.fullname or "-") result[#result+1] = format("",specification.subfamily or "-") result[#result+1] = format("",specification.rawname or "-") result[#result+1] = format("",specification.designsize or "-") result[#result+1] = format("",specification.minsize or "-") result[#result+1] = format("",specification.maxsize or "-") result[#result+1] = format("",specification.style ~= "" and specification.style or "normal") result[#result+1] = format("",specification.variant ~= "" and specification.variant or "normal") result[#result+1] = format("",specification.weight ~= "" and specification.weight or "normal") result[#result+1] = format("",specification.width ~= "" and specification.width or "normal") result[#result+1] = "
fontname: %s
fullname: %s
filename: %s
familyname: %s
fontweight: %s
format: %s
fullname: %s
subfamily: %s
rawname: %s
designsize: %s
minimumsize:%s
maximumsize:%s
style: %s
variant: %s
weight: %s
width: %s
" if features then for what, v in table.sortedhash(features) do local data = features[what] if data and next(data) then result[#result+1] = format("

%s features

",what) result[#result+1] = "" result[#result+1] = "" for f,ff in table.sortedhash(data) do local done = false for s, ss in table.sortedhash(ff) do if s == "*" then s = "all" end if ss ["*"] then ss["*"] = nil ss.all = true end if done then f = "" else done = true end local title = fonts.handlers.otf.tables.features[f] or "" result[#result+1] = format("",title,f,s,concat(table.sortedkeys(ss)," ")) end end result[#result+1] = "
featuretag script languages 
%s  %s  %s  %s  
" end end else result[#result+1] = "

This font has no features." end return concat(result,"\n") end local info_template = [[

version   : %s
comment   : %s
author    : %s
copyright : %s

maillist  : ntg-context at ntg.nl
webpage   : www.pragma-ade.nl
wiki      : contextgarden.net
]] local function info_about() local m = modules ['mtx-server-ctx-fonttest'] return format(info_template,m.version,m.comment,m.author,m.copyright) end local save_template = [[ the current setup has been saved:

name  %s
title  %s
font  %s
script  %s
language  %s
features  %s
options  %s
sampletext %s
]] local function loadbase() local datafile = file.join(basepath,basename) local storage = io.loaddata(datafile) or "" if storage == "" then storage = { } else report("loading '%s'",datafile) storage = loadstring(storage) storage = (storage and storage()) or { } end return storage end local function loadstored(detail,currentfont,name) local storage = loadbase() storage = storage and storage[name] if storage then currentfont = storage.font detail.script = storage.script or detail.script detail.language = storage.language or detail.language detail.title = storage.title or detail.title detail.sampletext = storage.text or detail.sampletext detail.name = name or "no name" for k,v in next, storage.features do detail["f-"..k] = v end for k,v in next, storage.options do detail["o-"..k] = v end end detail.loadname = nil return detail, currentfont end local function savebase(storage,name) local datafile = file.join(basepath,basename) report("saving '%s' in '%s'",name or "data",datafile) io.savedata(datafile,table.serialize(storage,true)) end local function deletestored(detail,currentfont,name) local storage = loadbase() if storage and name and storage[name] then report("deleting '%s' from base",name) storage[name] = nil savebase(storage) end detail.deletename = nil return detail, "" end local function save_font(currentfont,detail) local specification = get_specification(currentfont) local name, title, script, language, features, options, text = currentfont, "", "dflt", "dflt", { }, { }, "" if detail then local htmldata = showfeatures(specification.filename) script = detail.script or script language = detail.language or language text = string.strip(detail.sampletext or text) name = string.strip(detail.name or name) title = string.strip(detail.title or title) for k,v in next, htmldata.features do if detail["f-"..k] then features[k] = true end end for k=1,#what_options do local v = what_options[k] if detail["o-"..v] then options[k] = true end end end if name == "" then name = "no name" end local storage = loadbase() storage[name] = { font = currentfont, title = title, script = script, language = language, features = features, options = options, text = text, } savebase(storage,name) return format(save_template,name,title,currentfont,script,language,concat(table.sortedkeys(features)," "),concat(table.sortedkeys(options)," "),text) end local function load_font(currentfont) local datafile = file.join(basepath,basename) local storage = loadbase(datafile) local result = {} result[#result+1] = format("del name font fontname script language features title sampletext ") for k,v in table.sortedhash(storage) do local fontname, fontfile = get_specification(v.font) result[#result+1] = format("x %s %s %s %s %s %s %s %s ", k,k,k,v.font,fontname,v.script,v.language,concat(table.sortedkeys(v.features)," "),v.title or "no title",v.text or "") end if #result == 1 then return "nothing saved yet" else return format("%s
",concat(result,"\n")) end end local function reset_font(currentfont) return edit_font(currentfont) end local extras_template = [[ remake font database (take some time)

]] local function do_extras(detail,currentfont,extra) return extras_template end local extras = { } local function do_extra(detail,currentfont,extra) local e = extras[extra] if e then e(detail,currentfont,extra) end return do_extras(detail,currentfont,extra) end function extras.reload() local command = "mtxrun --script font --reload" report("run command: %s",command) os.execute(command) return do_extras() end local status_template = [[ ]] local variables = { ['color-background-one'] = lmx.get('color-background-green'), ['color-background-two'] = lmx.get('color-background-blue'), ['title'] = 'ConTeXt Font Tester', ['formaction'] = "mtx-server-ctx-fonttest.lua", } function doit(configuration,filename,hashed) local start = os.clock() local detail = url.query(hashed.query or "") local currentfont = detail.currentfont local action = detail.action local selection = detail.selection local loadname = detail.loadname local deletename = detail.deletename local extra = detail.extra if loadname and loadname ~= "" then detail, currentfont = loadstored(detail,currentfont,loadname) action = "process" elseif deletename and deletename ~= "" then detail, currentfont = deletestored(detail,currentfont,deletename) action = "load" elseif selection and selection ~= "" then currentfont = selection elseif extra and extra ~= "" then do_extra(detail,currentfont,extra) action = "extras" end local fontname, fontfile = get_specification(currentfont) if fontfile then variables.title = format('ConTeXt Font Tester: %s (%s)',fontname,fontfile) else variables.title = 'ConTeXt Font Tester' end -- lua table and adapt local buttons = { 'process', 'select', 'save', 'load', 'edit', 'reset', 'features', 'source', 'log', 'info', 'extras'} local menu = { } for i=1,#buttons do local button = buttons[i] menu[#menu+1] = format("",button,button) end variables.menu = concat(menu," ") variables.status = format(status_template,currentfont or "") variables.maintext = "" variables.javascriptdata = "" variables.javascripts = "" variables.javascriptinit = "" report("action: %s",action or "no action") local result if action == "select" then variables.maintext = select_font() elseif action == "info" then variables.maintext = info_about() elseif action == "extras" then variables.maintext = do_extras() elseif currentfont and currentfont ~= "" then if action == "save" then variables.maintext = save_font(currentfont,detail) elseif action == "load" then variables.maintext = load_font(currentfont,detail) elseif action == "source" then variables.maintext = show_source(currentfont,detail) elseif action == "log" then variables.maintext = show_log(currentfont,detail) elseif action == "features" then variables.maintext = show_font(currentfont,detail) else local e, s if action == "process" then e, s = process_font(currentfont,detail) elseif action == "reset" then e, s = reset_font(currentfont) elseif action == "edit" then e, s = edit_font(currentfont,detail) else e, s = process_font(currentfont,detail) end variables.maintext = e variables.javascriptdata = s variables.javascripts = javascripts variables.javascriptinit = "check_form()" end else variables.maintext = select_font() end result = { content = lmx.convert('context-fonttest.lmx',false,variables) } report("time spent on page: %0.03f seconds",os.clock()-start) return result end return doit, true --~ make_lmx_page("test") context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-base.lua0000644000175000017500000001412612130411274024651 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-base'] = { version = 1.001, comment = "formerly known as luatools", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-base ConTeXt TDS Management Tool (aka luatools) 1.35 generate file database show configuration variables show configuration order expand complex variable expand variable (resolve paths) expand variable (resolve references) show path expansion of ... report value of variable report file location report path of file [or ] make luatex format [or ] run luatex format assemble and compile lua inifile give a bit more info show all found files filter cf format specification (default 'tex', use 'any' for any match) filter variables enable given trackers ]] local application = logs.application { name = "mtx-base", banner = "ConTeXt TDS Management Tool (aka luatools) 1.35", helpinfo = helpinfo, } local report = application.report -- private option --noluc for testing errors in the stub local instance = resolvers.instance local pattern = environment.arguments["pattern"] or nil local fileformat = environment.arguments["format"] or "" -- nil ? local allresults = environment.arguments["all"] or false local trace = environment.arguments["trace"] if type(pattern) == 'boolean' then report("invalid pattern specification") pattern = nil end if trace then resolvers.settrace(trace) -- move to mtxrun ? end if environment.arguments["find-file"] then resolvers.load() if pattern then resolvers.dowithfilesandreport(resolvers.findfiles, { pattern }, fileformat, allresults) else resolvers.dowithfilesandreport(resolvers.findfiles, environment.files, fileformat, allresults) end elseif environment.arguments["find-path"] then resolvers.load() local path = resolvers.findpath(environment.files[1], fileformat) print(path) -- quite basic, wil become function in logs elseif environment.arguments["run"] then resolvers.load("nofiles") -- ! no need for loading databases trackers.enable("resolvers.locating") environment.run_format(environment.files[1] or "",environment.files[2] or "",environment.files[3] or "") elseif environment.arguments["fmt"] then resolvers.load("nofiles") -- ! no need for loading databases trackers.enable("resolvers.locating") environment.run_format(environment.arguments["fmt"], environment.files[1] or "",environment.files[2] or "") elseif environment.arguments["expand-braces"] then resolvers.load("nofiles") resolvers.dowithfilesandreport(resolvers.expandbraces, environment.files) elseif environment.arguments["expand-path"] then resolvers.load("nofiles") resolvers.dowithfilesandreport(resolvers.expandpath, environment.files) elseif environment.arguments["expand-var"] or environment.arguments["expand-variable"] then resolvers.load("nofiles") resolvers.dowithfilesandreport(resolvers.expansion, environment.files) elseif environment.arguments["show-path"] or environment.arguments["path-value"] then resolvers.load("nofiles") resolvers.dowithfilesandreport(resolvers.showpath, environment.files) elseif environment.arguments["var-value"] or environment.arguments["show-value"] then resolvers.load("nofiles") resolvers.dowithfilesandreport(resolvers.variable, environment.files) elseif environment.arguments["format-path"] then resolvers.load() report(caches.getwritablepath("format")) elseif pattern then -- brrr resolvers.load() resolvers.dowithfilesandreport(resolvers.findfiles, { pattern }, fileformat, allresults) elseif environment.arguments["generate"] then instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() elseif environment.arguments["make"] or environment.arguments["ini"] or environment.arguments["compile"] then resolvers.load() trackers.enable("resolvers.locating") environment.make_format(environment.files[1] or "") elseif environment.arguments["variables"] or environment.arguments["show-variables"] or environment.arguments["expansions"] or environment.arguments["show-expansions"] then resolvers.load("nofiles") resolvers.listers.variables(pattern) elseif environment.arguments["configurations"] or environment.arguments["show-configurations"] then resolvers.load("nofiles") resolvers.listers.configurations() elseif environment.arguments["exporthelp"] then application.export(environment.arguments["exporthelp"],environment.files[1]) elseif environment.arguments["help"] or (environment.files[1]=='help') or (#environment.files==0) then application.help() elseif environment.files[1] == 'texmfcnf.lua' then resolvers.load("nofiles") resolvers.listers.configurations() else resolvers.load() resolvers.dowithfilesandreport(resolvers.findfiles, environment.files, fileformat, allresults) end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-pdf.lua0000644000175000017500000002401712161703335024516 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-pdf'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local tonumber = tonumber local format, gmatch = string.format, string.gmatch local utfchar = utf.char local concat = table.concat local setmetatableindex, sortedhash, sortedkeys = table.setmetatableindex, table.sortedhash, table.sortedkeys local helpinfo = [[ mtx-pdf ConTeXt PDF Helpers 0.10 show some info about the given file show metadata xml blob show used fonts ( linearize given file ]] local application = logs.application { name = "mtx-pdf", banner = "ConTeXt PDF Helpers 0.10", helpinfo = helpinfo, } local report = application.report dofile(resolvers.findfile("lpdf-epd.lua","tex")) scripts = scripts or { } scripts.pdf = scripts.pdf or { } local function loadpdffile(filename) if not filename or filename == "" then report("no filename given") elseif not lfs.isfile(filename) then report("unknown file '%s'",filename) else local pdffile = lpdf.epdf.load(filename) if pdffile then return pdffile else report("no valid pdf file '%s'",filename) end end end function scripts.pdf.info(filename) local pdffile = loadpdffile(filename) if pdffile then local catalog = pdffile.Catalog local info = pdffile.Info local pages = pdffile.pages local nofpages = pages.n -- no # yet. will be in 5.2 report("filename > %s",filename) report("pdf version > %s",catalog.Version) report("number of pages > %s",nofpages) report("title > %s",info.Title) report("creator > %s",info.Creator) report("producer > %s",info.Producer) report("creation date > %s",info.CreationDate) report("modification date > %s",info.ModDate) local width, height, start for i=1, nofpages do local page = pages[i] local bbox = page.CropBox or page.MediaBox local w, h = bbox[4]-bbox[2],bbox[3]-bbox[1] if w ~= width or h ~= height then if start then report("cropbox > pages: %s-%s, width: %s, height: %s",start,i-1,width,height) end width, height, start = w, h, i end end report("cropbox > pages: %s-%s, width: %s, height: %s",start,nofpages,width,height) end end function scripts.pdf.metadata(filename) local pdffile = loadpdffile(filename) if pdffile then local catalog = pdffile.Catalog local metadata = catalog.Metadata if metadata then report("metadata > \n\n%s\n",metadata()) else report("no metadata") end end end local function getfonts(pdffile) local usedfonts = { } for i=1,pdffile.pages.n do local page = pdffile.pages[i] local fontlist = page.Resources.Font for k, v in next, lpdf.epdf.expand(fontlist) do usedfonts[k] = lpdf.epdf.expand(v) end end return usedfonts end local function getunicodes(font) local cid = font.ToUnicode if cid then cid = cid() local counts = { } -- for s in gmatch(cid,"begincodespacerange%s*(.-)%s*endcodespacerange") do -- for a, b in gmatch(s,"<([^>]+)>%s+<([^>]+)>") do -- print(a,b) -- end -- end setmetatableindex(counts, function(t,k) t[k] = 0 return 0 end) for s in gmatch(cid,"beginbfrange%s*(.-)%s*endbfrange") do for first, last, offset in gmatch(s,"<([^>]+)>%s+<([^>]+)>%s+<([^>]+)>") do first = tonumber(first,16) last = tonumber(last,16) offset = tonumber(offset,16) offset = offset - first for i=first,last do local c = i + offset counts[c] = counts[c] + 1 end end end for s in gmatch(cid,"beginbfchar%s*(.-)%s*endbfchar") do for old, new in gmatch(s,"<([^>]+)>%s+<([^>]+)>") do for n in gmatch(new,"....") do local c = tonumber(n,16) counts[c] = counts[c] + 1 end end end return counts end end function scripts.pdf.fonts(filename) local pdffile = loadpdffile(filename) if pdffile then local usedfonts = getfonts(pdffile) local found = { } for k, v in table.sortedhash(usedfonts) do local counts = getunicodes(v) local codes = { } local chars = { } local freqs = { } if counts then codes = sortedkeys(counts) for i=1,#codes do local k = codes[i] local c = utfchar(k) chars[i] = c freqs[i] = format("U+%05X %s %s",k,counts[k] > 1 and "+" or " ", c) end for i=1,#codes do codes[i] = format("U+%05X",codes[i]) end end found[k] = { basefont = v.BaseFont or "no basefont", encoding = v.Encoding or "no encoding", subtype = v.Subtype or "no subtype", unicode = v.ToUnicode and "unicode" or "no unicode", chars = chars, codes = codes, freqs = freqs, } end if environment.argument("detail") then for k, v in sortedhash(found) do report("id : %s",k) report("basefont : %s",v.basefont) report("encoding : %s",v.encoding) report("subtype : %s",v.subtype) report("unicode : %s",v.unicode) report("characters : %s", concat(v.chars," ")) report("codepoints : %s", concat(v.codes," ")) report("") end else local results = { { "id", "basefont", "encoding", "subtype", "unicode", "characters" } } for k, v in sortedhash(found) do results[#results+1] = { k, v.basefont, v.encoding, v.subtype, v.unicode, concat(v.chars," ") } end utilities.formatters.formatcolumns(results) report(results[1]) report("") for i=2,#results do report(results[i]) end report("") end end end -- this is a quick hack ... proof of concept .. will change (derived from luigi's example) ... -- i will make a ctx wrapper local qpdf function scripts.pdf.linearize(filename) qpdf = qpdf or swiglib("qpdf.core") local oldfile = filename or environment.files[1] if not oldfile then return end file.addsuffix(oldfile,"pdf") if not lfs.isfile(oldfile) then return end local newfile = environment.files[2] if not newfile or file.removesuffix(oldfile) == file.removesuffix(newfile)then newfile = file.addsuffix(file.removesuffix(oldfile) .. "-linearized","pdf") end local password = environment.arguments.password local instance = qpdf.qpdf_init() if bit32.band(qpdf.qpdf_read(instance,oldfile,password),qpdf.QPDF_ERRORS) ~= 0 then report("unable to open input file") elseif bit32.band(qpdf.qpdf_init_write(instance,newfile),qpdf.QPDF_ERRORS) ~= 0 then report("unable to open output file") else report("linearizing %a into %a",oldfile,newfile) qpdf.qpdf_set_static_ID(instance,qpdf.QPDF_TRUE) qpdf.qpdf_set_linearization(instance,qpdf.QPDF_TRUE) qpdf.qpdf_write(instance) end while qpdf.qpdf_more_warnings(instance) ~= 0 do report("warning: %s",qpdf.qpdf_get_error_full_text(instance,qpdf.qpdf_next_warning(qpdf))) end if qpdf.qpdf_has_error(instance) ~= 0 then report("error: %s",qpdf.qpdf_get_error_full_text(instance,qpdf.qpdf_get_error(qpdf))) end qpdf.qpdf_cleanup_p(instance) end -- scripts.pdf.info("e:/tmp/oeps.pdf") -- scripts.pdf.metadata("e:/tmp/oeps.pdf") -- scripts.pdf.fonts("e:/tmp/oeps.pdf") -- scripts.pdf.linearize("e:/tmp/oeps.pdf") local filename = environment.files[1] or "" if filename == "" then application.help() elseif environment.argument("info") then scripts.pdf.info(filename) elseif environment.argument("metadata") then scripts.pdf.metadata(filename) elseif environment.argument("fonts") then scripts.pdf.fonts(filename) elseif environment.argument("linearize") then scripts.pdf.linearize(filename) elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),filename) else application.help() end -- a variant on an experiment by hartmut --~ function downloadlinks(filename) --~ local document = lpdf.epdf.load(filename) --~ if document then --~ local pages = document.pages --~ for p = 1,#pages do --~ local annotations = pages[p].Annots --~ if annotations then --~ for a=1,#annotations do --~ local annotation = annotations[a] --~ local uri = annotation.Subtype == "Link" and annotation.A and annotation.A.URI --~ if uri and string.find(uri,"^http") then --~ os.execute("wget " .. uri) --~ end --~ end --~ end --~ end --~ end --~ end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-watch.lua0000644000175000017500000004014112130411274025041 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-watch'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-watch ConTeXt Request Watchdog 1.00 optional path for log files watch given path [ use pipe instead of execute delay between sweeps replace /machine/ in path /servername/ condense log files remove files in given path [ show log data ]] local application = logs.application { name = "mtx-watch", banner = "ConTeXt Request Watchdog 1.00", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.watch = scripts.watch or { } local format, concat, difftime, time = string.format, table.concat, os.difftime, os.time local next, type = next, type local basename, dirname, joinname = file.basename, file.dirname, file.join local lfsdir, lfsattributes = lfs.dir, lfs.attributes -- the machine/instance matches the server app we use local machine = socket.dns.gethostname() or "unknown-machine" local instance = string.match(machine,"(%d+)$") or "0" function scripts.watch.save_exa_modes(joblog,ctmname) local values = joblog and joblog.values if values then local t= { } t[#t+1] = "\n" t[#t+1] = "" for k, v in next, joblog.values do t[#t+1] = format("\t%s", k, tostring(v)) end t[#t+1] = "" io.savedata(ctmname,concat(t,"\n")) else os.remove(ctmname) end end local function toset(t) if type(t) == "table" then return concat(t,",") else return t end end local function noset(t) if type(t) == "table" then return t[1] else return t end end -- todo: split order (o-name.luj) and combine with atime to determine sort order. local function glob(files,path) -- some day: sort by name (order prefix) and atime for name in lfsdir(path) do if name:find("^%.") then -- skip . and .. else name = path .. "/" .. name local a = lfsattributes(name) if not a then -- weird elseif a.mode == "directory" then if name:find("graphics$") or name:find("figures$") or name:find("resources$") then -- skip these too else glob(files,name) end elseif name:find(".%luj$") then local bname = basename(name) local dname = dirname(name) local order = tonumber(bname:match("^(%d+)")) or 0 files[#files+1] = { dname, bname, order } end end end end local clock = os.gettimeofday or (socket and socket.gettime) or os.time -- we cannot trust os.clock on linux -- local function filenamesort(a,b) -- local fa, da = a[1], a[2] -- local fb, db = b[1], b[2] -- if da == db then -- return fa < fb -- else -- return da < db -- end -- end local function filenamesort(a,b) local fa, oa = a[2], a[3] local fb, ob = b[2], b[3] if fa == fb then if oa == ob then return a[1] < b[1] -- order file dir else return oa < ob -- order file end else if oa == ob then return fa < fb -- order file else return oa < ob -- order file end end end function scripts.watch.watch() local delay = tonumber(environment.argument("delay") or 5) or 5 if delay == 0 then delay = .25 end local logpath = environment.argument("logpath") or "" local pipe = environment.argument("pipe") or false local watcher = "mtxwatch.run" local paths = environment.files if #paths > 0 then if environment.argument("automachine") then logpath = string.gsub(logpath,"/machine/","/"..machine.."/") for i=1,#paths do paths[i] = string.gsub(paths[i],"/machine/","/"..machine.."/") end end for i=1,#paths do report("watching path %s",paths[i]) end local function process() local done = false for i=1,#paths do local path = paths[i] lfs.chdir(path) local files = { } glob(files,path) table.sort(files,filenamesort) -- for name, time in next, files do for i=1,#files do local f = files[i] local dirname = f[1] local basename = f[2] -- we can use that later on local name = joinname(dirname,basename) --~ local ok, joblog = xpcall(function() return dofile(name) end, function() end ) local ok, joblog = pcall(dofile,name) if ok and joblog then if joblog.status == "processing" then report("aborted job, %s added to queue",name) joblog.status = "queued" io.savedata(name, table.serialize(joblog,true)) elseif joblog.status == "queued" then local command = joblog.command if command then local replacements = { inputpath = toset((joblog.paths and joblog.paths.input ) or "."), outputpath = noset((joblog.paths and joblog.paths.output) or "."), filename = joblog.filename or "", } -- todo: revision path etc command = command:gsub("%%(.-)%%", replacements) if command ~= "" then joblog.status = "processing" joblog.runtime = clock() io.savedata(name, table.serialize(joblog,true)) report("running: %s", command) local newpath = file.dirname(name) io.flush() local result = "" local ctmname = file.basename(replacements.filename) if ctmname == "" then ctmname = name end -- use self as fallback ctmname = file.replacesuffix(ctmname,"ctm") if newpath ~= "" and newpath ~= "." then local oldpath = lfs.currentdir() lfs.chdir(newpath) scripts.watch.save_exa_modes(joblog,ctmname) if pipe then result = os.resultof(command) else result = os.spawn(command) end lfs.chdir(oldpath) else scripts.watch.save_exa_modes(joblog,ctmname) if pipe then result = os.resultof(command) else result = os.spawn(command) end end report("return value: %s", result) done = true local path, base = replacements.outputpath, file.basename(replacements.filename) joblog.runtime = clock() - joblog.runtime if base ~= "" then joblog.result = file.replacesuffix(file.join(path,base),"pdf") joblog.size = lfs.attributes(joblog.result,"size") end joblog.status = "finished" else joblog.status = "invalid command" end else joblog.status = "no command" end -- pcall, when error sleep + again -- todo: just one log file and append io.savedata(name, table.serialize(joblog,true)) if logpath and logpath ~= "" then local name = file.join(logpath,os.uuid() .. ".lua") io.savedata(name, table.serialize(joblog,true)) report("saving joblog in %s",name) end end end end end end local n, start = 0, time() local wtime = 0 local function wait() io.flush() if not done then n = n + 1 if n >= 10 then report("run time: %i seconds, memory usage: %0.3g MB", difftime(time(),start), (status.luastate_bytes/1024)/1000) n = 0 end local ttime = 0 while ttime <= delay do local wt = lfs.attributes(watcher,"mtime") if wt and wt ~= wtime then -- fast signal that there is a request wtime = wt break end ttime = ttime + 0.2 os.sleep(0.2) end end end local cleanupdelay, cleanup = environment.argument("cleanup"), false if cleanupdelay then local lasttime = time() cleanup = function() local currenttime = time() local delta = difftime(currenttime,lasttime) if delta > cleanupdelay then lasttime = currenttime for i=1,#paths do local path = paths[i] if string.find(path,"%.") then -- safeguard, we want a fully qualified path else local files = dir.glob(file.join(path,"*")) for i=1,#files do local name = files[i] local filetime = lfs.attributes(name,"modification") local delta = difftime(currenttime,filetime) if delta > cleanupdelay then -- report("cleaning up '%s'",name) os.remove(name) end end end end end end else cleanup = function() -- nothing end end while true do if false then --~ if true then process() cleanup() wait() else pcall(process) pcall(cleanup) pcall(wait) end end else report("no paths to watch") end end function scripts.watch.collect_logs(path) -- clean 'm up too path = path or environment.argument("logpath") or "" path = (path == "" and ".") or path local files = dir.globfiles(path,false,"^%d+%.lua$") local collection = { } local valid = table.tohash({"filename","result","runtime","size","status"}) for i=1,#files do local name = files[i] local t = dofile(name) if t and type(t) == "table" and t.status then for k, v in next, t do if not valid[k] then t[k] = nil end end collection[name:gsub("[^%d]","")] = t end end return collection end function scripts.watch.save_logs(collection,path) -- play safe if collection and next(collection) then path = path or environment.argument("logpath") or "" path = (path == "" and ".") or path local filename = format("%s/collected-%s.lua",path,tostring(time())) io.savedata(filename,table.serialize(collection,true)) local check = dofile(filename) for k,v in next, check do if not collection[k] then report("error in saving file") os.remove(filename) return false end end for k,v in next, check do os.remove(format("%s.lua",k)) end return true else return false end end function scripts.watch.collect_collections(path) -- removes duplicates path = path or environment.argument("logpath") or "" path = (path == "" and ".") or path local files = dir.globfiles(path,false,"^collected%-%d+%.lua$") local collection = { } for i=1,#files do local name = files[i] local t = dofile(name) if t and type(t) == "table" then for k, v in next, t do collection[k] = v end end end return collection end function scripts.watch.show_logs(path) -- removes duplicates local collection = scripts.watch.collect_collections(path) or { } local max = 0 for k,v in next, collection do v = v.filename or "?" if #v > max then max = #v end end -- print(max) local sorted = table.sortedkeys(collection) for k=1,#sorted do local v = sorted[k] local c = collection[v] local f, s, r, n = c.filename or "?", c.status or "?", c.runtime or 0, c.size or 0 report("%s %s %3i %8i %s",string.padd(f,max," "),string.padd(s,10," "),r,n,v) end end function scripts.watch.cleanup_stale_files() -- removes duplicates local path = environment.files[1] local delay = tonumber(environment.argument("cleanup")) local force = environment.argument("force") if not path or path == "." then report("provide qualified path") elseif not delay then report("missing --cleanup=delay") else report("dryrun, use --force for real cleanup") local files = dir.glob(file.join(path,"*")) local rtime = time() for i=1,#files do local name = files[i] local mtime = lfs.attributes(name,"modification") local delta = difftime(rtime,mtime) if delta > delay then report("cleaning up '%s'",name) if force then os.remove(name) end end end end end if environment.argument("watch") then scripts.watch.watch() elseif environment.argument("collect") then scripts.watch.save_logs(scripts.watch.collect_logs()) elseif environment.argument("cleanup") then scripts.watch.save_logs(scripts.watch.cleanup_stale_files()) elseif environment.argument("showlog") then scripts.watch.show_logs() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-fcd.lua0000644000175000017500000002400712130411274024472 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-fcd'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", comment = "based on the ruby version from 2005", } -- This is a kind of variant of the good old ncd (norton change directory) program. This -- script uses the same indirect cmd trick as Erwin Waterlander's wcd program. -- -- The program is called via the stubs fcd.cmd or fcd.sh. On unix one should probably source -- the file: ". fcd args" in order to make the chdir persistent. -- -- You need to create a stub with: -- -- mtxrun --script fcd --stub > fcd.cmd -- mtxrun --script fcd --stub > fcd.sh -- -- The stub starts this script and afterwards runs the created directory change script as -- part if the same run, so that indeed we change. local helpinfo = [[ mtx-fcd Fast Directory Change 1.00 clear the cache [entry] clear the history clear the cache and add given path(s) add given path(s) find given path (can be substring) find given path (can be substring) but don't use history print platform stub file show roots of cached dirs show history of chosen dirs show this help Example fcd --scan t:\ fcd --add f:\project fcd [--find] whatever fcd --list ]] local application = logs.application { name = "mtx-fcd", banner = "Fast Directory Change 1.00", helpinfo = helpinfo, } local report = application.report local writeln = print -- texio.write_nl local find, char, byte, lower, gsub, format = string.find, string.char, string.byte, string.lower, string.gsub, string.format local mswinstub = [[@echo off rem this is: fcd.cmd @echo off if not exist "%HOME%" goto homepath :home mtxrun --script mtx-fcd.lua %1 %2 %3 %4 %5 %6 %7 %8 %9 if exist "%HOME%\mtx-fcd-goto.cmd" call "%HOME%\mtx-fcd-goto.cmd" goto end :homepath if not exist "%HOMEDRIVE%\%HOMEPATH%" goto end mtxrun --script mtx-fcd.lua %1 %2 %3 %4 %5 %6 %7 %8 %9 if exist "%HOMEDRIVE%\%HOMEPATH%\mtx-fcd-goto.cmd" call "%HOMEDRIVE%\%HOMEPATH%\mtx-fcd-goto.cmd" goto end :end ]] local unixstub = [[#!/usr/bin/env sh # this is: fcd.sh # mv fcd.sh fcd # chmod fcd 755 # . fcd [args] ruby -S fcd_start.rb $1 $2 $3 $4 $5 $6 $7 $8 $9 if test -f "$HOME/fcd_stage.sh" ; then . $HOME/fcd_stage.sh ; fi; ]] local gotofile local datafile local stubfile local stubdata local stubdummy local stubchdir if os.platform == 'mswin' then gotofile = 'mtx-fcd-goto.cmd' datafile = 'mtx-fcd-data.lua' stubfile = 'fcd.cmd' stubdata = mswinstub stubdummy = 'rem no dir to change to' stubchdir = 'cd /d "%s"' else gotofile = 'mtx-fcd-goto.sh' datafile = 'mtx-fcd-data.lua' stubfile = 'fcd.sh' stubdata = unixstub stubdummy = '# no dir to change to' stubchdir = '# cd "%s"' end local homedir = os.env["HOME"] or "" -- no longer TMP etc if homedir == "" then homedir = format("%s/%s",os.env["HOMEDRIVE"] or "",os.env["HOMEPATH"] or "") end if homedir == "/" or not lfs.isdir(homedir) then os.exit() end local datafile = file.join(homedir,datafile) local gotofile = file.join(homedir,gotofile) local hash = nil local found = { } local pattern = "" local version = modules['mtx-fcd'].version io.savedata(gotofile,stubdummy) if not lfs.isfile(gotofile) then -- write error os.exit() end local function fcd_clear(onlyhistory,what) if onlyhistory and hash and hash.history then if what and what ~= "" then hash.history[what] = nil else hash.history = { } end else hash = { name = "fcd cache", comment = "generated by mtx-fcd.lua", created = os.date(), version = version, paths = { }, history = { }, } end end local function fcd_changeto(dir) if dir and dir ~= "" then io.savedata(gotofile,format(stubchdir,dir)) end end local function fcd_load(forcecreate) if lfs.isfile(datafile) then hash = dofile(datafile) end if not hash or hash.version ~= version then if forcecache then fcd_clear() else writeln("empty dir cache") fcd_clear() os.exit() end end end local function fcd_save() if hash then io.savedata(datafile,table.serialize(hash,true)) end end local function fcd_list(onlyhistory) if hash then writeln("") if onlyhistory then if next(hash.history) then for k, v in table.sortedhash(hash.history) do writeln(format("%s => %s",k,v)) end else writeln("no history") end else local paths = hash.paths if #paths > 0 then for i=1,#paths do local path = paths[i] writeln(format("%4i %s",#path[2],path[1])) end else writeln("empty cache") end end end end local function fcd_find() found = { } pattern = environment.files[1] or "" if pattern ~= "" then pattern = string.escapedpattern(pattern) local paths = hash.paths for i=1,#paths do local paths = paths[i][2] for i=1,#paths do local path = paths[i] if find(path,pattern) then found[#found+1] = path end end end end end local function fcd_choose(new) if pattern == "" then writeln(format("staying in dir %q",(gsub(lfs.currentdir(),"\\","/")))) return end if #found == 0 then writeln(format("dir %q not found",pattern)) return end local okay = #found == 1 and found[1] or (not new and hash.history[pattern]) if okay then writeln(format("changing to %q",okay)) fcd_changeto(okay) return end local offset = 0 while true do if not found[offset] then offset = 0 end io.write("\n") for i=1,26 do local v = found[i+offset] if v then writeln(format("%s %3i %s",char(i+96),offset+i,v)) else break end end offset = offset + 26 if found[offset+1] then io.write("\n[press enter for more or select letter]\n\n>> ") else io.write("\n[select letter]\n\n>> ") end local answer = lower(io.read() or "") if not answer or answer == 'quit' then break elseif #answer > 0 then local choice = tonumber(answer) if not choice then if answer >= "a" and answer <= "z" then choice = byte(answer) - 96 + offset - 26 end end local newdir = found[choice] if newdir then hash.history[pattern] = newdir writeln(format("changing to %q",newdir)) fcd_changeto(newdir) fcd_save() return end else -- try again end end end local function globdirs(path,dirs) local dirs = dirs or { } for name in lfs.dir(path) do if not find(name,"%.$") then local fullname = path .. "/" .. name if lfs.isdir(fullname) and not find(fullname,"/%.") then dirs[#dirs+1] = fullname globdirs(fullname,dirs) end end end return dirs end local function fcd_scan() if hash then local paths = hash.paths for i=1,#environment.files do local name = environment.files[i] local name = gsub(name,"\\","/") local name = gsub(name,"/$","") local list = globdirs(name) local done = false for i=1,#paths do if paths[i][1] == name then paths[i][2] = list done = true break end end if not done then paths[#paths+1] = { name, list } end end end end local argument = environment.argument if argument("clear") then if argument("history") then fcd_load() fcd_clear(true) else fcd_clear() end fcd_save() elseif argument("scan") then fcd_clear() fcd_scan() fcd_save() elseif argument("add") then fcd_load(true) fcd_scan() fcd_save() elseif argument("stub") then writeln(stubdata) elseif argument("list") then fcd_load() if argument("history") then fcd_list(true) else fcd_list() end elseif argument("help") then application.help() elseif argument("exporthelp") then application.export(argument("exporthelp"),environment.files[1]) else -- also argument("find") fcd_load() fcd_find() fcd_choose(argument("nohistory")) end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-server.lua0000644000175000017500000003462012130411274025246 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-server'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen & Taco Hoekwater", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-server Simple Webserver For Helpers 0.10 start server port to listen to server root scripts sub path index file start on own path ]] local application = logs.application { name = "mtx-server", banner = "Simple Webserver For Helpers 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.webserver = scripts.webserver or { } dofile(resolvers.findfile("luat-soc.lua","tex")) local socket = socket or require("socket") local http = http or require("socket.http") -- not needed local format = string.format -- The following two lists are taken from webrick (ruby) and -- extended with a few extra suffixes. local mimetypes = { ai = 'application/postscript', asc = 'text/plain', avi = 'video/x-msvideo', bin = 'application/octet-stream', bmp = 'image/bmp', bz2 = 'application/x-bzip2', cer = 'application/pkix-cert', class = 'application/octet-stream', crl = 'application/pkix-crl', crt = 'application/x-x509-ca-cert', css = 'text/css', dms = 'application/octet-stream', doc = 'application/msword', dvi = 'application/x-dvi', eps = 'application/postscript', etx = 'text/x-setext', exe = 'application/octet-stream', gif = 'image/gif', gz = 'application/x-tar', hqx = 'application/mac-binhex40', htm = 'text/html', html = 'text/html', jpe = 'image/jpeg', jpeg = 'image/jpeg', jpg = 'image/jpeg', lha = 'application/octet-stream', lzh = 'application/octet-stream', mov = 'video/quicktime', mpe = 'video/mpeg', mpeg = 'video/mpeg', mpg = 'video/mpeg', pbm = 'image/x-portable-bitmap', pdf = 'application/pdf', pgm = 'image/x-portable-graymap', png = 'image/png', pnm = 'image/x-portable-anymap', ppm = 'image/x-portable-pixmap', ppt = 'application/vnd.ms-powerpoint', ps = 'application/postscript', qt = 'video/quicktime', ras = 'image/x-cmu-raster', rb = 'text/plain', rd = 'text/plain', rgb = 'image/x-rgb', rtf = 'application/rtf', sgm = 'text/sgml', sgml = 'text/sgml', snd = 'audio/basic', tar = 'application/x-tar', tgz = 'application/x-tar', tif = 'image/tiff', tiff = 'image/tiff', txt = 'text/plain', xbm = 'image/x-xbitmap', xls = 'application/vnd.ms-excel', xml = 'text/xml', xpm = 'image/x-xpixmap', xwd = 'image/x-xwindowdump', zip = 'application/zip', } local messages = { [100] = 'Continue', [101] = 'Switching Protocols', [200] = 'OK', [201] = 'Created', [202] = 'Accepted', [203] = 'Non-Authoritative Information', [204] = 'No Content', [205] = 'Reset Content', [206] = 'Partial Content', [300] = 'Multiple Choices', [301] = 'Moved Permanently', [302] = 'Found', [303] = 'See Other', [304] = 'Not Modified', [305] = 'Use Proxy', [307] = 'Temporary Redirect', [400] = 'Bad Request', [401] = 'Unauthorized', [402] = 'Payment Required', [403] = 'Forbidden', [404] = 'Not Found', [405] = 'Method Not Allowed', [406] = 'Not Acceptable', [407] = 'Proxy Authentication Required', [408] = 'Request Timeout', [409] = 'Conflict', [410] = 'Gone', [411] = 'Length Required', [412] = 'Precondition Failed', [413] = 'Request Entity Too Large', [414] = 'Request-URI Too Large', [415] = 'Unsupported Media Type', [416] = 'Request Range Not Satisfiable', [417] = 'Expectation Failed', [500] = 'Internal Server Error', [501] = 'Not Implemented', [502] = 'Bad Gateway', [503] = 'Service Unavailable', [504] = 'Gateway Timeout', [505] = 'HTTP Version Not Supported', } local handlers = { } local function errormessage(client,configuration,n) local data = format("%s %s

%s %s

",n,messages[n],n,messages[n]) report("handling error %s: %s",n,messages[n]) handlers.generic(client,configuration,data,nil,true) end local validpaths, registered = { }, { } function scripts.webserver.registerpath(name) if not registered[name] then local cleanname = string.gsub(name,"%.%.","deleted-parent") report("registering path '%s'",cleanname) validpaths[#validpaths+1] = cleanname registered[name] = true end end function handlers.generic(client,configuration,data,suffix,iscontent) if not iscontent then local name = data report("requested file '%s'",name) local fullname = file.join(configuration.root,name) data = io.loaddata(fullname) or "" if data == "" then for n=1,#validpaths do local fullname = file.join(validpaths[n],name) data = io.loaddata(fullname) or "" if data ~= "" then report("sending generic file '%s'",fullname) break end end else report("sending generic file '%s'",fullname) end end if data and data ~= "" then client:send("HTTP/1.1 200 OK\r\n") client:send("Connection: close\r\n") client:send(format("Content-Length: %s\r\n",#data)) client:send(format("Content-Type: %s\r\n",(suffix and mimetypes[suffix]) or "text/html")) client:send("\r\n") client:send(data) client:send("\r\n") else errormessage(client,configuration,404) end end -- return os.date() -- return { content = "crap" } -- return function(configuration,filename) -- return { content = filename } -- end local loaded = { } function handlers.lua(client,configuration,filename,suffix,iscontent,hashed) -- filename will disappear, and become hashed.filename local filename = file.join(configuration.scripts,filename) if not file.is_qualified_path(filename) then filename = file.join(configuration.root,filename) end -- todo: split url in components, see l-url; rather trivial local result, keep = loaded[filename], false if result then report("reusing script: %s",filename) else report("locating script: %s",filename) if lfs.isfile(filename) then report("loading script: %s",filename) result = loadfile(filename) report("return type: %s",type(result)) if result and type(result) == "function" then -- result() should return a table { [type=,] [length=,] content= }, function or string result, keep = result() if keep then report("saving script: %s",type(result)) loaded[filename] = result end end else report("problematic script: %s",filename) errormessage(client,configuration,404) end end if result then if type(result) == "function" then report("running script: %s",filename) result = result(configuration,filename,hashed) -- second argument will become query end if result and type(result) == "string" then result = { content = result } end if result and type(result) == "table" then if result.content then local suffix = result.type or "text/html" local action = handlers[suffix] or handlers.generic action(client,configuration,result.content,suffix,true) -- content elseif result.filename then local suffix = file.suffix(result.filename) or "text/html" local action = handlers[suffix] or handlers.generic action(client,configuration,result.filename,suffix,false) -- filename else errormessage(client,configuration,404) end else errormessage(client,configuration,500) end else errormessage(client,configuration,404) end end handlers.luc = handlers.lua handlers.html = handlers.htm local indices = { "index.htm", "index.html" } local portnumber = 31415 -- pi suits tex function scripts.webserver.run(configuration) -- check configuration configuration.port = tonumber(configuration.port or os.getenv("MTX_SERVER_PORT") or portnumber) or portnumber if not configuration.root or not lfs.isdir(configuration.root) then configuration.root = os.getenv("MTX_SERVER_ROOT") or "." end -- locate root and index file in tex tree if not lfs.isdir(configuration.root) then for i=1,#indices do local name = indices[i] local root = resolvers.resolve("path:" .. name) or "" if root ~= "" then configuration.root = root configuration.index = configuration.index or name break end end end configuration.root = dir.expandname(configuration.root) if not configuration.index then for i=1,#indices do local name = indices[i] if lfs.isfile(file.join(configuration.root,name)) then configuration.index = name -- we will prepend the rootpath later break end end configuration.index = configuration.index or "unknown" end if not configuration.scripts or configuration.scripts == "" then configuration.scripts = dir.expandname(file.join(configuration.root or ".",configuration.scripts or ".")) end -- so far for checks report("running at port: %s",configuration.port) report("document root: %s",configuration.root or resolvers.ownpath) report("main index file: %s",configuration.index) report("scripts subpath: %s",configuration.scripts) report("context services: http://localhost:%s/mtx-server-ctx-startup.lua",configuration.port) local server = assert(socket.bind("*", configuration.port)) local script = configuration.script while true do -- blocking local start = os.clock() local client = server:accept() client:settimeout(configuration.timeout or 60) local request, e = client:receive() if e then errormessage(client,configuration,404) else local from = client:getpeername() report("request from: %s",tostring(from)) report("request data: %s",tostring(request)) local fullurl = string.match(request,"GET (.+) HTTP/.*$") or "" -- todo: more clever / post if fullurl == "" then report("no url") errormessage(client,configuration,404) else report("requested url: %s",fullurl) fullurl = socket.url.unescape(fullurl) -- still needed? local hashed = url.hashed(fullurl) local query = url.query(hashed.query) local filename = hashed.path -- hm, not query? if script then filename = script report("forced script: %s",filename) local suffix = file.suffix(filename) local action = handlers[suffix] or handlers.generic if action then report("performing action: %s",filename) action(client,configuration,filename,suffix,false,hashed) -- filename and no content else errormessage(client,configuration,404) end elseif filename then filename = socket.url.unescape(filename) report("requested action: %s",filename) if string.find(filename,"%.%.") then filename = nil -- invalid path end if filename == nil or filename == "" or filename == "/" then filename = configuration.index report("invalid filename, forcing: %s",filename) end local suffix = file.suffix(filename) local action = handlers[suffix] or handlers.generic if action then report("performing action: %s",filename) action(client,configuration,filename,suffix,false,hashed) -- filename and no content else errormessage(client,configuration,404) end else errormessage(client,configuration,404) end end end client:close() report("time spent with client: %0.03f seconds",os.clock()-start) end end if environment.argument("auto") then local path = resolvers.findfile("mtx-server.lua") or "." scripts.webserver.run { port = environment.argument("port"), root = environment.argument("root") or file.dirname(path) or ".", scripts = environment.argument("scripts") or file.dirname(path) or ".", script = environment.argument("script"), } elseif environment.argument("start") then scripts.webserver.run { port = environment.argument("port"), root = environment.argument("root") or ".", -- "e:/websites/www.pragma-ade.com", index = environment.argument("index"), scripts = environment.argument("scripts"), script = environment.argument("script"), } elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end -- mtxrun --script server --start => http://localhost:31415/mtx-server-ctx-startup.lua context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-server-ctx-startup.lua0000644000175000017500000000266511571377075027570 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-server-ctx-startup'] = { version = 1.001, comment = "Overview Of Goodies", author = "Hans Hagen", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } dofile(resolvers.findfile("trac-lmx.lua","tex")) function doit(configuration,filename,hashed) local list = { } local root = file.dirname(resolvers.findfile("mtx-server.lua") or ".") if root == "" then root = "." end local pattern = root .. "/mtx-server-ctx-*.lua" local files = dir.glob(pattern) for i=1,#files do local filename = file.basename(files[i]) local name = string.match(filename,"mtx%-server%-ctx%-(.-)%.lua$") if name and name ~= "startup" then list[#list+1] = string.format("%s

",filename,name,name) end end local variables = { ['color-background-one'] = lmx.get('color-background-green'), ['color-background-two'] = lmx.get('color-background-blue'), ['title'] = "Overview Of Goodies", ['color-background-one'] = lmx.get('color-background-green'), ['color-background-two'] = lmx.get('color-background-blue'), ['maintext'] = table.concat(list,"\n"), } return { content = lmx.convert('context-base.lmx',false,variables) } end return doit, true context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-babel.lua0000644000175000017500000002562312130411274025010 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-babel'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- data tables by Thomas A. Schmitz local helpinfo = [[ mtx-babel Babel Input To UTF Conversion 1.20 conversion language (e.g. greek) obey given structure (e.g. 'document', default: 'context') convert babel codes into utf ]] local application = logs.application { name = "mtx-babel", banner = "Babel Input To UTF Conversion 1.20", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.babel = scripts.babel or { } do local converters = { } -- greek local replace_01 = { -- <' * | a = "ᾅ", h = "ᾕ", w = "ᾥ", } local replace_02 = { -- >' * | a = "ᾄ", h = "ᾔ", w = "ᾤ", } local replace_03 = { -- <` * | a = "ᾃ", h = "ᾓ", w = "ᾣ", } local replace_04 = { -- >` * | a = "ᾂ", h = "ᾒ", w = "ᾢ", } local replace_05 = { -- <~ * | a = "ᾇ", h = "ᾗ", w = "ᾧ", } local replace_06 = { -- >~ * | a = "ᾆ", h = "ᾖ", w = "ᾦ" } local replace_07 = { -- "' * i = "ΐ", u = "ΰ", } local replace_08 = { -- "` * i = "ῒ", u = "ῢ", } local replace_09 = { -- "~ * i = "ῗ", u = "ῧ", } local replace_10 = { -- <' * a = "ἅ", e = "ἕ", h = "ἥ", i = "ἵ", o = "ὅ", u = "ὕ", w = "ὥ", A = "Ἅ", E = "Ἕ", H = "Ἥ", I = "Ἵ", O = "Ὅ", U = "Ὕ", W = "Ὥ", } local replace_11 = { -- >' * a = "ἄ", e = "ἔ", h = "ἤ", i = "ἴ", o = "ὄ", u = "ὔ", w = "ὤ", A = "Ἄ", E = "Ἔ", H = "Ἤ", I = "Ἴ", O = "Ὄ", U = "῎Υ", W = "Ὤ", } local replace_12 = { -- <` * a = "ἃ", e = "ἓ", h = "ἣ", i = "ἳ", o = "ὃ", u = "ὓ", w = "ὣ", A = "Ἃ", E = "Ἒ", H = "Ἣ", I = "Ἳ", O = "Ὃ", U = "Ὓ", W = "Ὣ", } local replace_13 = { -- >` * a = "ἂ", e = "ἒ", h = "ἢ", i = "ἲ", o = "ὂ", u = "ὒ", w = "ὢ", A = "Ἂ", E = "Ἒ", H = "Ἢ", I = "Ἲ", O = "Ὂ", U = "῍Υ", W = "Ὢ", } local replace_14 = { -- <~ * a = "ἇ", h = "ἧ", i = "ἷ", u = "ὗ", w = "ὧ", A = "Ἇ", H = "Ἧ", I = "Ἷ", U = "Ὗ", W = "Ὧ", } local replace_15 = { -- >~ * a = "ἆ", h = "ἦ", i = "ἶ", u = "ὖ", w = "ὦ", A = "Ἆ", H = "Ἦ", I = "Ἶ", U = "῏Υ", W = "Ὦ", } local replace_16 = { -- ' * | a = "ᾴ", h = "ῄ", w = "ῴ", } local replace_17 = { -- ` * | a = "ᾲ", h = "ῂ", w = "ῲ", } local replace_18 = { -- ~ * | a = "ᾷ", h = "ῇ", w = "ῷ" } local replace_19 = { -- ' * a = "ά", e = "έ", h = "ή", i = "ί", o = "ό", u = "ύ", w = "ώ", ["'"] = "’", } local replace_20 = { -- ` * a = "ὰ", e = "ὲ", h = "ὴ", i = "ὶ", o = "ὸ", u = "ὺ", w = "ὼ", } local replace_21 = { -- ~ * a = "ᾶ", h = "ῆ", i = "ῖ", u = "ῦ", w = "ῶ", } local replace_22 = { -- < * a = "ἁ", e = "ἑ", h = "ἡ", i = "ἱ", o = "ὁ", u = "ὑ", w = "ὡ", r = "ῥ", A = "Ἁ", E = "Ἑ", H = "Ἡ", I = "Ἱ", O = "Ὁ", U = "Ὑ", W = "Ὡ", R = "Ῥ", } local replace_23 = { -- > * a = "ἀ", e = "ἐ", h = "ἠ", i = "ἰ", o = "ὀ", u = "ὐ", w = "ὠ", A = "Ἀ", E = "Ἐ", H = "Ἠ", I = "Ἰ", O = "Ὀ", U = "᾿Υ", W = "Ὠ", } local replace_24 = { -- * | a = "ᾳ", h = "ῃ", w = "ῳ", } local replace_25 = { -- " * i = "ϊ", u = "ϋ", } local replace_26 = { -- * a = "α", b = "β", g = "γ", d = "δ", e = "ε", z = "ζ", h = "η", j = "θ", i = "ι", k = "κ", l = "λ", m = "μ", n = "ν", x = "ξ", o = "ο", p = "π", r = "ρ", s = "σ", c = "ς", t = "τ", u = "υ", f = "φ", q = "χ", y = "ψ", w = "ω", A = "Α", B = "Β", G = "Γ", D = "Δ", E = "Ε", Z = "Ζ", H = "Η", J = "Θ", I = "Ι", K = "Κ", L = "Λ", M = "Μ", N = "Ν", X = "Ξ", O = "Ο", P = "Π", R = "Ρ", S = "Σ", T = "Τ", U = "Υ", F = "Φ", Q = "Χ", Y = "Ψ", W = "Ω", [";"] = "·", ["?"] = ";", } local P, R, S, V, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.Cs local skips_01 = P("\\") * R("az", "AZ")^1 local skips_02 = P("[") * (1- S("[]"))^1 * P("]") local greek_01 = (P("<'") * Cs(1) * P('|')) / replace_01 local greek_02 = (P(">'") * Cs(1) * P('|')) / replace_02 local greek_03 = (P("<`") * Cs(1) * P('|')) / replace_03 local greek_04 = (P(">`") * Cs(1) * P('|')) / replace_04 local greek_05 = (P("<~") * Cs(1) * P('|')) / replace_05 local greek_06 = (P(">~") * Cs(1) * P('|')) / replace_06 local greek_07 = (P('"\'') * Cs(1) ) / replace_07 local greek_08 = (P('"`') * Cs(1) ) / replace_08 local greek_09 = (P('"~') * Cs(1) ) / replace_09 local greek_10 = (P("<'") * Cs(1) ) / replace_10 local greek_11 = (P(">'") * Cs(1) ) / replace_11 local greek_12 = (P("<`") * Cs(1) ) / replace_12 local greek_13 = (P(">`") * Cs(1) ) / replace_13 local greek_14 = (P("<~") * Cs(1) ) / replace_14 local greek_15 = (P(">~") * Cs(1) ) / replace_15 local greek_16 = (P("'") * Cs(1) * P('|')) / replace_16 local greek_17 = (P("`") * Cs(1) * P('|')) / replace_17 local greek_18 = (P("~") * Cs(1) * P('|')) / replace_18 local greek_19 = (P("'") * Cs(1) ) / replace_19 local greek_20 = (P("`") * Cs(1) ) / replace_20 local greek_21 = (P("~") * Cs(1) ) / replace_21 local greek_22 = (P("<") * Cs(1) ) / replace_22 local greek_23 = (P(">") * Cs(1) ) / replace_23 local greek_24 = (Cs(1) * P('|') ) / replace_24 local greek_25 = (P('"') * Cs(1) ) / replace_25 local greek_26 = (Cs(1) ) / replace_26 local skips = skips_01 + skips_02 local greek = greek_01 + greek_02 + greek_03 + greek_04 + greek_05 + greek_06 + greek_07 + greek_08 + greek_09 + greek_10 + greek_11 + greek_12 + greek_13 + greek_14 + greek_15 + greek_16 + greek_17 + greek_18 + greek_19 + greek_20 + greek_21 + greek_22 + greek_23 + greek_24 + greek_25 + greek_26 local spacing = S(" \n\r\t") local startgreek = P("\\startgreek") local stopgreek = P("\\stopgreek") local localgreek = P("\\localgreek") local lbrace = P("{") local rbrace = P("}") local documentparser = Cs((skips + greek + 1)^0) local contextgrammar = Cs ( P { "scan", ["scan"] = (V("global") + V("local") + skips + 1)^0, ["global"] = startgreek * ((skips + greek + 1)-stopgreek )^0 , ["local"] = localgreek * V("grouped"), ["grouped"] = spacing^0 * lbrace * (V("grouped") + skips + (greek - rbrace))^0 * rbrace, } ) converters['greek'] = { document = documentparser, context = contextgrammar, } -- lpeg.print(parser): 254 lines function scripts.babel.convert(filename) if filename and filename ~= empty then local data = io.loaddata(filename) or "" if data ~= "" then local language = environment.argument("language") or "" if language ~= "" then local converter = converters[language] if converter then local structure = environment.argument("structure") or "document" converter = converter[structure] if converter then report("converting '%s' using language '%s' with structure '%s'", filename, language, structure) data = converter:match(data) local newfilename = filename .. ".utf" io.savedata(newfilename, data) report("converted data saved in '%s'", newfilename) else report("unknown structure '%s' language '%s'", structure, language) end else report("no converter for language '%s'", language) end else report("provide language") end else report("no data in '%s'",filename) end end end --~ print(contextgrammar:match [[ --~ oeps abg \localgreek{a} --~ \startgreek abg \stopgreek \oeps --~ oeps abg \localgreek{a{b}\oeps g} --~ ]]) end if environment.argument("convert") then scripts.babel.convert(environment.files[1] or "") elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-grep.lua0000644000175000017500000001403512130411274024673 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-babel'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-grep Simple Grepper 0.10 search for pattern (optional) count matches only skip lines that start with %% or # pattern is lpath expression patterns are lua patterns and need to be escaped accordingly ]] local application = logs.application { name = "mtx-grep", banner = "Simple Grepper 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.grep = scripts.grep or { } local find, format = string.find, string.format local cr = lpeg.P("\r") local lf = lpeg.P("\n") local crlf = cr * lf local newline = crlf + cr + lf local content = lpeg.C((1-newline)^0) * newline + lpeg.C(lpeg.P(1)^1) local write_nl = texio.write_nl -- local pattern = "LIJST[@TYPE='BULLET']/LIJSTITEM[contains(text(),'Kern')]" function scripts.grep.find(pattern, files, offset) if pattern and pattern ~= "" then statistics.starttiming(scripts.grep) local nofmatches, noffiles, nofmatchedfiles = 0, 0, 0 local n, m, name, check = 0, 0, "", nil local count, nocomment = environment.argument("count"), environment.argument("nocomment") if environment.argument("xml") then for i=offset or 1, #files do local globbed = dir.glob(files[i]) for i=1,#globbed do local nam = globbed[i] name = nam local data = xml.load(name) if data and not data.error then n, m, noffiles = 0, 0, noffiles + 1 if count then for c in xml.collected(data,pattern) do m = m + 1 end if m > 0 then nofmatches = nofmatches + m nofmatchedfiles = nofmatchedfiles + 1 write_nl(format("%5i %s",m,name)) io.flush() end else for c in xml.collected(data,pattern) do m = m + 1 write_nl(format("%s: %s",name,xml.tostring(c))) end end end end end else if nocomment then if count then check = function(line) n = n + 1 if find(line,"^[%%#]") then -- skip elseif find(line,pattern) then m = m + 1 end end else check = function(line) n = n + 1 if find(line,"^[%%#]") then -- skip elseif find(line,pattern) then m = m + 1 write_nl(format("%s %6i: %s",name,n,line)) io.flush() end end end else if count then check = function(line) n = n + 1 if find(line,pattern) then m = m + 1 end end else check = function(line) n = n + 1 if find(line,pattern) then m = m + 1 write_nl(format("%s %6i: %s",name,n,line)) io.flush() end end end end local capture = (content/check)^0 for i=offset or 1, #files do local globbed = dir.glob(files[i]) for i=1,#globbed do local nam = globbed[i] name = nam local data = io.loaddata(name) if data then n, m, noffiles = 0, 0, noffiles + 1 capture:match(data) if count and m > 0 then nofmatches = nofmatches + m nofmatchedfiles = nofmatchedfiles + 1 write_nl(format("%5i %s",m,name)) io.flush() end end end end end statistics.stoptiming(scripts.grep) if count and nofmatches > 0 then write_nl(format("\nfiles: %s, matches: %s, matched files: %s, runtime: %0.3f seconds",noffiles,nofmatches,nofmatchedfiles,statistics.elapsedtime(scripts.grep))) end end end local pattern = environment.argument("pattern") local files = environment.files and #environment.files > 0 and environment.files if environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),files[1]) elseif pattern and files then scripts.grep.find(pattern, files) elseif files then scripts.grep.find(files[1], files, 2) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-interface.lua0000644000175000017500000006277512130411274025714 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-cache'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local concat, sort, insert = table.concat, table.sort, table.insert local gsub, format, gmatch, find = string.gsub, string.format, string.gmatch, string.find local utfchar, utfgsub = utf.char, utf.gsub local helpinfo = [[ mtx-interface ConTeXt Interface Related Goodies 0.13 generate context interface files generate context message files generate context label files equals generate scite interface generate bbedit interface files generate jedit interface files generate textpad interface files create text files for commands and environments report commands to the console generate check file replace named characters by utf preprocess mkvi files to tex files [force,suffix] use given suffix for output files force action even when in doubt ]] local application = logs.application { name = "mtx-interface", banner = "ConTeXt Interface Related Goodies 0.13", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.interface = scripts.interface or { } local flushers = { } local userinterfaces = { 'en','cs','de','it','nl','ro','fr','pe' } local messageinterfaces = { 'en','cs','de','it','nl','ro','fr','pe','no' } local function collect(filename,class,data) if data then local result = { } for name, list in table.sortedhash(data) do result[#result+1] = format("keywordclass.%s.%s=\\\n",class,name) for i=1,#list do if i%5 == 0 then result[#result+1] = "\\\n" end result[#result+1] = format("%s ",list[i]) end result[#result+1] = "\n\n" end io.savedata(file.addsuffix(filename,"properties"),concat(result)) io.savedata(file.addsuffix(filename,"lua"), table.serialize(data,true)) else os.remove(filename) end end function flushers.scite(collected) local data = { } for interface, whatever in next, collected do data[interface] = whatever.commands end collect("scite-context-data-interfaces", "context", data) collect("scite-context-data-metapost", "metapost", dofile(resolvers.findfile("mult-mps.lua"))) collect("scite-context-data-metafun", "metafun", dofile(resolvers.findfile("mult-fun.lua"))) collect("scite-context-data-context", "context", dofile(resolvers.findfile("mult-low.lua"))) collect("scite-context-data-tex", "tex", dofile(resolvers.findfile("mult-prm.lua"))) end function flushers.jedit(collected) for interface, whatever in next, collected do local commands = whatever.commands local environments = whatever.environments local result = { } result[#result+1] = "" result[#result+1] = "\n" result[#result+1] = "" result[#result+1] = "\t" result[#result+1] = "\t\t" for i=1,#commands do result[#result+1] = format("\t\t\t%s",commands[i]) end result[#result+1] = "\t\t" result[#result+1] = "\t" result[#result+1] = "" io.savedata(format("context-jedit-%s.xml",interface), concat(result),"\n") end end function flushers.bbedit(collected) for interface, whatever in next, collected do local commands = whatever.commands local environments = whatever.environments local result = {} result[#result+1] = "" result[#result+1] = "BBLMKeywordList" result[#result+1] = "" for i=1,#commands do result[#result+1] = format("\t\\%s",commands[i]) end result[#result+1] = "" io.savedata(format("context-bbedit-%s.xml",interface), concat(result),"\n") end end function flushers.raw(collected) for interface, whatever in next, collected do local commands = whatever.commands local environments = whatever.environments for i=1,#commands do report(commands[i]) end end end local textpadcreator = "mtx-interface-textpad.lua" function flushers.text(collected) for interface, whatever in next, collected do local commands = whatever.commands local environments = whatever.environments local c, cname = { }, format("context-commands-%s.txt",interface) local e, ename = { }, format("context-environments-%s.txt",interface) report("saving '%s'",cname) for i=1,#commands do c[#c+1] = format("\\%s",commands[i]) end io.savedata(cname,concat(c,"\n")) report("saving '%s'",ename) for i=1,#environments do e[#e+1] = format("\\start%s",environments[i]) e[#e+1] = format("\\stop%s", environments[i]) end io.savedata(format("context-environments-%s.txt",interface),concat(e,"\n")) end end function flushers.textpad(collected) flushers.text(collected) for interface, whatever in next, collected do local commands = whatever.commands local environments = whatever.environments -- -- plugin, this is a rewrite of a file provided by Lukas Prochazka -- local function merge(templatedata,destinationdata,categories) report("loading '%s'",templatedata) local data = io.loaddata(templatedata) local done = 0 for i=1,#categories do local category = categories[i] local cpattern = ";%s*category:%s*(" .. category .. ")%s*[\n\r]+" local fpattern = ";%s*filename:%s*(" .. "%S+" .. ")%s*[\n\r]+" data = gsub(data,cpattern..fpattern,function(category,filename) local found = resolvers.findfile(filename) or "" local blob = found ~= "" and io.loaddata(found) or "" if blob == "" then report("category: %s, filename: %s, not found",category,filename) else done = done + 1 report("category: %s, filename: %s, merged",category,filename) end return format("; category: %s\n; filename: %s\n%s\n\n",category,filename,blob) end) end if done > 0 then report("saving '%s' (%s files merged)",destinationdata,done) io.savedata(destinationdata,data) else report("skipping '%s' (no files merged)",destinationdata) end end local templatename = "textpad-context-template.txt" local templatedata = resolvers.findfile(templatename) or "" if templatedata == "" then report("unable to locate template '%s'",templatename) else merge(templatedata, "context.syn", { "tex commands","context commands" }) if environment.argument("textpad") == "latex" then merge(templatedata, "context-latex.syn", { "tex commands","context commands", "latex commands" }) end end local r = { } local c = io.loaddata("context-commands-en.txt") or "" -- sits on the same path local e = io.loaddata("context-environments-en.txt") or "" -- sits on the same path for s in gmatch(c,"\\(.-)%s") do r[#r+1] = format("\n!TEXT=%s\n\\%s\n!",s,s) end for s in gmatch(e,"\\start(.-)%s+\\stop(.-)") do r[#r+1] = format("\n!TEXT=%s (start/stop)\n\\start%s \\^\\stop%s\n!",s,s,s) end sort(r) insert(r,1,"!TCL=597,\n!TITLE=ConTeXt\n!SORT=N\n!CHARSET=DEFAULT") io.savedata("context.tcl",concat(r,"\n")) -- cleanup os.remove("context-commands-en.txt") os.remove("context-environments-en.txt") end end function scripts.interface.editor(editor,split,forcedinterfaces) local interfaces= forcedinterfaces or environment.files if #interfaces == 0 then interfaces= userinterfaces end local xmlfile = resolvers.findfile("cont-en.xml") or "" if xmlfile == "" then report("unable to locate cont-en.xml") end local collected = { } for i=1,#interfaces do local interface = interfaces[i] local keyfile = resolvers.findfile(format("keys-%s.xml",interface)) or "" if keyfile == "" then report("unable to locate keys-*.xml") else local commands = { } local mappings = { } local environments = { } local x = xml.load(keyfile) for e, d, k in xml.elements(x,"cd:command") do local at = d[k].at local name, value = at.name, at.value if name and value then mappings[name] = value end end local x = xml.load(xmlfile) for e, d, k in xml.elements(x,"cd:command") do local at = d[k].at local name, type = at.name, at["type"] if name and name ~= "" then local remapped = mappings[name] or name if type == "environment" then if split then environments[#environments+1] = remapped else commands[#commands+1] = "start" .. remapped commands[#commands+1] = "stop" .. remapped end else commands[#commands+1] = remapped end end end if #commands > 0 then sort(commands) sort(environments) collected[interface] = { commands = commands, environments = environments, } end end end -- awaiting completion of the xml file local definitions = dofile(resolvers.findfile("mult-def.lua")) if definitions then local commands = { en = { } } for command, languages in next, definitions.commands do commands.en[languages.en or command] = true for language, command in next, languages do local c = commands[language] if c then c[command] = true else commands[language] = { [command] = true } end end end for language, data in next, commands do local fromlua = data local fromxml = collected[language].commands for i=1,#fromxml do local c = fromxml[i] if not fromlua[c] then -- print(language,c) fromlua[c] = true end end collected[language].commands = table.sortedkeys(fromlua) end end -- flushers[editor](collected) end function scripts.interface.check() local xmlfile = resolvers.findfile("cont-en.xml") or "" if xmlfile ~= "" then local f = io.open("cont-en-check.tex","w") if f then f:write("\\starttext\n") local x = xml.load(xmlfile) for e, d, k in xml.elements(x,"cd:command") do local dk = d[k] local at = dk.at if at then local name = xml.filter(dk,"cd:sequence/cd:string/attribute(value)") if name and name ~= "" then if at.type == "environment" then name = "start" .. name end f:write(format("\\doifundefined{%s}{\\writestatus{check}{command '%s' is undefined}}\n",name,name)) end end end f:write("\\stoptext\n") f:close() end end end function scripts.interface.interfaces() local filename = resolvers.findfile(environment.files[1] or "mult-def.lua") or "" if filename ~= "" then local interface = dofile(filename) if interface and next(interface) then local variables, constants, commands, elements = interface.variables, interface.constants, interface.commands, interface.elements local filename = resolvers.findfile("cont-en.xml") or "" local xmldata = filename ~= "" and (io.loaddata(filename) or "") local function flush(texresult,xmlresult,language,what,tag) local t = interface[what] texresult[#texresult+1] = format("%% definitions for interface %s for language %s\n%%",what,language) xmlresult[#xmlresult+1] = format("\t\n",what,language) xmlresult[#xmlresult+1] = format("\t",what) local sorted = table.sortedkeys(t) for i=1,#sorted do local key = sorted[i] local v = t[key] local value = v[language] or v["en"] if not value then report("warning, no value for key '%s' for language '%s'",key,language) else local value = t[key][language] or t[key].en texresult[#texresult+1] = format("\\setinterface%s{%s}{%s}",tag,key,value) xmlresult[#xmlresult+1] = format("\t\t",tag,key,value) end end xmlresult[#xmlresult+1] = format("\t\n",tag) end local function replace(str, element, attribute, category, othercategory, language) return str:gsub(format("(<%s[^>]-%s=)([\"\'])([^\"\']-)([\"\'])",element,attribute), function(a,b,c) local cc = category[c] if not cc and othercategory then cc = othercategory[c] end if cc then ccl = cc[language] if ccl then return a .. b .. ccl .. b end end return a .. b .. c .. b end) end for language, _ in next, commands.setuplayout do local texresult, xmlresult = { }, { } texresult[#texresult+1] = format("%% this file is auto-generated, don't edit this file\n%%") xmlresult[#xmlresult+1] = format("\n",tag) xmlresult[#xmlresult+1] = format("\n",language) flush(texresult,xmlresult,language,"variables","variable") flush(texresult,xmlresult,language,"constants","constant") flush(texresult,xmlresult,language,"elements", "element") flush(texresult,xmlresult,language,"commands", "command") texresult[#texresult+1] = format("%%\n\\endinput") xmlresult[#xmlresult+1] = format("") local texfilename = format("mult-%s.mkii",language) local xmlfilename = format("keys-%s.xml",language) io.savedata(texfilename,concat(texresult,"\n")) report("saving interface definitions '%s'",texfilename) io.savedata(xmlfilename,concat(xmlresult,"\n")) report("saving interface translations '%s'",xmlfilename) if language ~= "en" and xmldata ~= "" then local newdata = xmldata:gsub("( 0 then report("+ %5i : %s => %s",v,k,contextnames[k]) else report("- %5i : %s",-v,k,contextnames[k]) end end filename = filename .. ".toutf" report("saving '%s'",filename) io.savedata(filename,str) end end -- function scripts.interface.labels() -- require("char-def.lua") -- require("lang-txt.lua") -- local interfaces = require("mult-def.lua") -- local variables = interfaces.variables -- local contextnames = { } -- for unicode, data in next, characters.data do -- local contextname = data.contextname -- if contextname then -- contextnames[utfchar(unicode)] = "\\" .. contextname .. " " -- end -- end -- contextnames["i"] = nil -- contextnames["'"] = nil -- contextnames["\\"] = nil -- local function flush(f,kind,what,expand,namespace,prefix) -- local whatdata = languages.data.labels[what] -- f:write("\n") -- f:write(format("%% %s => %s\n",what,kind)) -- for tag, data in table.sortedpairs(whatdata) do -- if not data.hidden then -- f:write("\n") -- for language, text in table.sortedpairs(data.labels) do -- if text ~= "" then -- if expand then -- text = utfgsub(text,".",contextnames) -- text = gsub(text," ", "\ ") -- end -- if namespace and namespace[tag] then -- tag = prefix .. tag -- end -- if find(text,",") then -- text = "{" .. text .. "}" -- end -- if text == "" then -- -- skip -- else -- if type(text) == "table" then -- f:write(format("\\setup%stext[\\s!%s][%s={{%s},}]\n",kind,language,tag,text)) -- else -- f:write(format("\\setup%stext[\\s!%s][%s={{%s},{%s}}]\n",kind,language,tag,text[1],text[2])) -- end -- end -- end -- end -- end -- end -- end -- function flushall(txtname,expand) -- local f = io.open(txtname,"w") -- if f then -- report("saving '%s'",txtname) -- f:write("% this file is auto-generated, don't edit this file\n") -- flush(f,"head","titles",expand,variables,"\\v!") -- flush(f,"label","texts",expand,variables,"\\v!") -- flush(f,"mathlabel","functions",expand) -- flush(f,"taglabel","tags",expand) -- f:write("\n") -- f:write("\\endinput\n") -- f:close() -- end -- end -- flushall("lang-txt.mkii",true) -- flushall("lang-txt.mkiv",false) -- end local ea = environment.argument if ea("context") then scripts.interface.interfaces() -- scripts.interface.messages() -- scripts.interface.labels() elseif ea("interfaces") or ea("messages") or ea("labels") then if ea("interfaces") then scripts.interface.interfaces() end -- if ea("messages") then -- scripts.interface.messages() -- end -- if ea("labels") then -- scripts.interface.labels() -- end elseif ea("preprocess") then scripts.interface.preprocess() elseif ea("toutf") then scripts.interface.toutf() elseif ea("check") then scripts.interface.check() elseif ea("scite") or ea("bbedit") or ea("jedit") or ea("textpad") or ea("text") or ea("raw") then if ea("scite") then scripts.interface.editor("scite") end if ea("bbedit") then scripts.interface.editor("bbedit") end if ea("jedit") then scripts.interface.editor("jedit") end if ea("textpad") then scripts.interface.editor("textpad",true, { "en" }) end if ea("text") then scripts.interface.editor("text") end if ea("raw") then scripts.interface.editor("raw") end elseif ea("exporthelp") then application.export(ea("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-flac.lua0000644000175000017500000001760712130411274024653 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-flac'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local sub, match, byte, lower = string.sub, string.match, string.byte, string.lower local readstring, readnumber = io.readstring, io.readnumber local concat, sortedpairs = table.concat, table.sortedpairs local tonumber = tonumber local tobitstring = number.tobitstring local lpegmatch = lpeg.match local p_escaped = lpeg.patterns.xml.escaped -- rather silly: pack info in bits while a flac file is large anyway flac = flac or { } flac.report = string.format local splitter = lpeg.splitat("=") local readers = { } readers[0] = function(f,size,target) -- not yet ok .. todo: use bit32 lib local info = { } target.info = info info.minimum_block_size = readnumber(f,-2) info.maximum_block_size = readnumber(f,-2) info.minimum_frame_size = readnumber(f,-3) info.maximum_frame_size = readnumber(f,-3) local buffer = { } for i=1,8 do buffer[i] = tobitstring(readnumber(f,1)) end local bytes = concat(buffer) info.sample_rate_in_hz = tonumber(sub(bytes, 1,20),2) -- 20 info.number_of_channels = tonumber(sub(bytes,21,23),2) -- 3 info.bits_per_sample = tonumber(sub(bytes,24,28),2) -- 5 info.samples_in_stream = tonumber(sub(bytes,29,64),2) -- 36 info.md5_signature = readstring(f,16) -- 128 end readers[4] = function(f,size,target,banner) local tags = { } target.tags = tags target.vendor = readstring(f,readnumber(f,-4)) for i=1,readnumber(f,-4) do local key, value = lpeg.match(splitter,readstring(f,readnumber(f,-4))) tags[lower(key)] = value end end readers.default = function(f,size,target) f:seek("cur",size) end function flac.getmetadata(filename) local f = io.open(filename, "rb") if f then local banner = readstring(f,4) if banner == "fLaC" then local data = { banner = banner, filename = filename, filesize = lfs.attributes(filename,"size"), } while true do local flag = readnumber(f,1) local size = readnumber(f,3) local last = flag > 127 if last then flag = flag - 128 end local reader = readers[flag] or readers.default reader(f,size,data,banner) if last then f:close() return data end end else flac.report("no flac file: %s (%s)",filename,banner) end f:close() else flac.report("no file: %s",filename) end end function flac.savecollection(pattern,filename) pattern = (pattern ~= "" and pattern) or "**/*.flac" filename = (filename ~= "" and filename) or "music-collection.xml" flac.report("identifying files using pattern %q" ,pattern) local files = dir.glob(pattern) flac.report("%s files found, analyzing files",#files) local music = { } for i=1,#files do local data = flac.getmetadata(files[i]) if data then local tags = data.tags local info = data.info local artist = tags.artist local album = tags.album local albums = music[artist] if not albums then albums = { } music[artist] = albums end local albumx = albums[album] if not albumx then albumx = { year = tags.date, tracks = { }, } albums[album] = albumx end albumx.tracks[tonumber(tags.tracknumber) or 0] = { title = tags.title, length = math.round((info.samples_in_stream/info.sample_rate_in_hz)), } end end -- inspect(music) local nofartists, nofalbums, noftracks, noferrors = 0, 0, 0, 0 local f = io.open(filename,"wb") if f then flac.report("saving data in file %q",filename) f:write("\n\n") f:write("\n") for artist, albums in sortedpairs(music) do nofartists = nofartists + 1 f:write("\t\n") f:write("\t\t",lpegmatch(p_escaped,artist),"\n") f:write("\t\t\n") for album, data in sortedpairs(albums) do nofalbums = nofalbums + 1 f:write("\t\t\t\n") f:write("\t\t\t\t",lpegmatch(p_escaped,album),"\n") f:write("\t\t\t\t\n") local tracks = data.tracks for i=1,#tracks do local track = tracks[i] if track then noftracks = noftracks + 1 f:write("\t\t\t\t\t",lpegmatch(p_escaped,track.title),"\n") else noferrors = noferrors + 1 flac.report("error in album: %q of %q, no track %s",album,artist,i) f:write("\t\t\t\t\t\n") end end f:write("\t\t\t\t\n") f:write("\t\t\t\n") end f:write("\t\t\n") f:write("\t\n") end f:write("\n") f:close() flac.report("%s tracks of %s albums of %s artists saved in %q (%s errors)",noftracks,nofalbums,nofartists,filename,noferrors) else flac.report("unable to save data in file %q",filename) end end -- local helpinfo = [[ mtx-flac ConTeXt Flac Helpers 0.10 collect albums in xml file Example mtxrun --script flac --collect somename.flac mtxrun --script flac --collect --pattern="m:/music/**") ]] local application = logs.application { name = "mtx-flac", banner = "ConTeXt Flac Helpers 0.10", helpinfo = helpinfo, } flac.report = application.report -- script code scripts = scripts or { } scripts.flac = scripts.flac or { } function scripts.flac.collect() local files = environment.files local pattern = environment.arguments.pattern if #files > 0 then for i=1,#files do local filename = files[1] if file.suffix(filename) == "flac" then flac.savecollection(filename,file.replacesuffix(filename,"xml")) elseif lfs.isdir(filename) then local pattern = filename .. "/**.flac" flac.savecollection(pattern,file.addsuffix(file.basename(filename),"xml")) else flac.savecollection(file.replacesuffix(filename,"flac"),file.replacesuffix(filename,"xml")) end end elseif pattern then flac.savecollection(file.addsuffix(pattern,"flac"),"music-collection.xml") else flac.report("no file(s) or pattern given" ) end end if environment.argument("collect") then scripts.flac.collect() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtxlibs.lua0000644000175000017500000001573612161703335024631 0ustar norbertnorbertif not modules then modules = { } end modules ['mtxlibs'] = { version = 1.001, comment = "a reasonable subset of mtxrun preloaded libraries", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This file can be used to load a the (relevant) helper libraries that are also used -- in ConTeXt. You can use it as: -- -- -- if needed (outside texlua): -- -- -- require("lpeg") -- mandate -- -- require("md5") -- handy -- -- require("lfs") -- recommended -- -- require("slunicode") -- sort of obsolete -- -- -- the library: -- -- require("mtxlibs") -- -- An alternative is to merge all libraries into this one so that you don't have to -- distribute them. -- -- mtxlibs --selfmerge -- -- If you need additional libraries, you can do something like this: -- -- lua mtxlibs.lua --selfmerge my-web-project.lua trac-lmx util-jsn -- lua mtxlibs.lua --selfmerge my-sql-project.lua util-sql util-sql-imp-library util-sql-imp-client -- -- That way you only need to update one file in a project and are not dependent on changes -- in the core ConTeXT libraries. The libraries are maintained as part of ConTeXt and used -- in projects so relative stable. The code works in Lua 5.1 as well as in 5.2. Not all -- functionality makes sense for users who are not familiar with ConTeXt but for instance -- trackers and loggers are included because that way we have can provide users with a -- consistent ecosystem. -- -- Much of the provided functionality is described in cld-mkiv.pdf and related manuals, on -- contextgarden.net as well in articles. The XML subsystem is described in its own manual. -- Templates and SQL (not preloaded) is also has its own manual. -- -- The next section contains the merged code, with each block ending uop in its own -- closure. The code gets somewhat compacted to save space and speed up loading. -- -- There are some dependencies between the several modules. Also, quite some functions are added -- to the regular Lua namespaces. In due time I'll isolate them in their own namespaces but with -- the for context handy option to expose them in the normal ones. I might make the dependencies -- less but it probably makes no sense to waste time on them. xpcall(function() local _, t = require("lpeg") return end,function() end) if t then lpeg = t end xpcall(function() local _, t = require("md5") return end,function() end) if t then md5 = t end xpcall(function() local _, t = require("lfs") return end,function() end) if t then lfs = t end xpcall(function() local _, t = require("slunicode") return end,function() end) if t then unicode = t end -- begin library merge -- end library merge local gsub, gmatch, match, find = string.gsub, string.gmatch, string.match, string.find local concat = table.concat local ownname = arg and arg[0] or 'mtxlibs.lua' local ownpath = gsub(match(ownname,"^(.+)[\\/].-$") or ".","\\","/") local owntree = ownpath local ownlibs = { "l-lua.lua", "l-package.lua", "l-lpeg.lua", "l-function.lua", "l-string.lua", "l-table.lua", "l-io.lua", "l-number.lua", "l-set.lua", "l-os.lua", "l-file.lua", -- limited functionality when no lfs -- "l-gzip.lua", "l-md5.lua", -- not loaded when no md5 library "l-url.lua", "l-dir.lua", -- limited functionality when no lfs "l-boolean.lua", "l-unicode.lua", -- nowadays independent of slunicode "l-math.lua", "util-str.lua", "util-tab.lua", "util-sto.lua", -- "util-lua.lua", -- no need for compiling "util-prs.lua", -- "util-fmt.lua", -- no need for table formatters -- "util-deb.lua", -- no need for debugging (and tracing) "trac-set.lua", "trac-log.lua", -- "trac-pro.lua", -- not relevant outside context "trac-inf.lua", "util-mrg.lua", "util-tpl.lua", "util-env.lua", -- "luat-env.lua", -- not relevant outside context "lxml-tab.lua", "lxml-lpt.lua", "lxml-mis.lua", "lxml-aux.lua", "lxml-xml.lua", } package.path = "t:/sources/?.lua;t:/sources/?;" .. package.path local ownlist = { '.', ownpath , ownpath .. "/../sources", -- HH's development path owntree .. "/../../texmf-local/tex/context/base", owntree .. "/../../texmf-context/tex/context/base", owntree .. "/../../texmf-dist/tex/context/base", owntree .. "/../../texmf/tex/context/base", owntree .. "/../../../texmf-local/tex/context/base", owntree .. "/../../../texmf-context/tex/context/base", owntree .. "/../../../texmf-dist/tex/context/base", owntree .. "/../../../texmf/tex/context/base", } if ownpath == "." then table.remove(ownlist,1) end own = { name = ownname, path = ownpath, tree = owntree, list = ownlist, libs = ownlibs, } local function locate_libs() local name = ownlibs[1] local done = false for i=1,#ownlist do local path = ownlist[i] local filename = path .. "/" .. name local f = io.open(filename) if f then f:close() package.path = package.path .. ";" .. path .. "/?.lua" -- in case l-* does a require done = path break end end locate_libs = function() return done end return done end local function load_libs() local found = locate_libs() if found then for i=1,#ownlibs do local basename = ownlibs[i] local filename = found .. "/" .. basename local codeblob = loadfile(filename) if codeblob then package.preload[basename] = codeblob() or true end end end end if not unicode then load_libs() end local merger = utilities and utilities.merger if not merger then return end local arguments = environment.arguments local files = environment.files if environment.ownname ~= "mtxlibs.lua" then return end local helpinfo = [[ usage: mtxlibs [options] --merge --merge targetfile extralibs --selfclean and in a lua file: require("mtxlibs") ]] local application = logs.application { name = "mtxlibs", banner = "ConTeXt Basic Lua Libraries 1.00", helpinfo = helpinfo, } local report = application.report if arguments.selfmerge then report("merging libraries") local found = locate_libs() if found then local target = files[1] if target == ownname then report("target cannot be this file") return elseif target then report("target: %s",target) for i=1,#files do ownlibs[#ownlibs+1] = file.addsuffix(files[i],"lua") end end merger.selfmerge(ownname,ownlibs,{ found },target) report("done") else report("no libraries found") end elseif arguments.selfclean then report("cleaning libraries") merger.selfclean(ownname) report("done") elseif arguments.help or files[1] == "help" then application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua0000644000175000017500000005704612130411274026777 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-server-ctx-help'] = { version = 1.001, comment = "Basic Definition Browser", author = "Hans Hagen", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo in lua interface: noargument, oneargument, twoarguments, threearguments -- todo: pickup translations from mult file dofile(resolvers.findfile("trac-lmx.lua","tex")) -- problem ... serialize parent stack local format, match, gsub, find = string.format, string.match, string.gsub, string.find local concat = table.concat local report = logs.reporter("ctx-help") -- -- -- make this a module: cont-xx.lua document = document or { } document.setups = document.setups or { } document.setups.div = { pe = "
%s
" } document.setups.span = { pe = "%s" } document.setups.translations = document.setups.translations or { nl = { ["title"] = "setup", ["formula"] = "formule", ["number"] = "getal", ["list"] = "lijst", ["dimension"] = "maat", ["mark"] = "markering", ["reference"] = "verwijzing", ["command"] = "commando", ["file"] = "file", ["name"] = "naam", ["identifier"] = "naam", ["text"] = "tekst", ["section"] = "sectie", ["singular"] = "naam enkelvoud", ["plural"] = "naam meervoud", ["matrix"] = "n*m", ["see"] = "zie", ["inherits"] = "erft van", ["optional"] = "optioneel", ["displaymath"] = "formule", ["index"] = "ingang", ["math"] = "formule", ["nothing"] = "leeg", ["file"] = "file", ["position"] = "positie", ["reference"] = "verwijzing", ["csname"] = "naam", ["destination"] = "bestemming", ["triplet"] = "triplet", ["word"] = "woord", ["content"] = "tekst", }, en = { ["title"] = "setup", ["formula"] = "formula", ["number"] = "number", ["list"] = "list", ["dimension"] = "dimension", ["mark"] = "mark", ["reference"] = "reference", ["command"] = "command", ["file"] = "file", ["name"] = "name", ["identifier"] = "identifier", ["text"] = "text", ["section"] = "section", ["singular"] = "singular name", ["plural"] = "plural name", ["matrix"] = "n*m", ["see"] = "see", ["inherits"] = "inherits from", ["optional"] = "optional", ["displaymath"] = "formula", ["index"] = "entry", ["math"] = "formula", ["nothing"] = "empty", ["file"] = "file", ["position"] = "position", ["reference"] = "reference", ["csname"] = "name", ["destination"] = "destination", ["triplet"] = "triplet", ["word"] = "word", ["content"] = "text", ["noargument"] = "\\cs", ["oneargument"] = "\\cs#1{..}", ["twoarguments"] = "\\cs#1#2{..}{..}", ["threearguments"] = "\\cs#1#2#3{..}{..}{..}", }, de = { ["title"] = "Setup", ["formula"] = "Formel", ["number"] = "Nummer", ["list"] = "Liste", ["dimension"] = "Dimension", ["mark"] = "Beschriftung", ["reference"] = "Referenz", ["command"] = "Befehl", ["file"] = "Datei", ["name"] = "Name", ["identifier"] = "Name", ["text"] = "Text", ["section"] = "Abschnitt", ["singular"] = "singular", ["plural"] = "plural", ["matrix"] = "n*m", ["see"] = "siehe", ["inherits"] = "inherits from", ["optional"] = "optioneel", ["displaymath"] = "formula", ["index"] = "entry", ["math"] = "formula", ["nothing"] = "empty", ["file"] = "file", ["position"] = "position", ["reference"] = "reference", ["csname"] = "name", ["destination"] = "destination", ["triplet"] = "triplet", ["word"] = "word", ["content"] = "text", }, cz = { ["title"] = "setup", ["formula"] = "rovnice", ["number"] = "cislo", ["list"] = "seznam", ["dimension"] = "dimenze", ["mark"] = "znacka", ["reference"] = "reference", ["command"] = "prikaz", ["file"] = "soubor", ["name"] = "jmeno", ["identifier"] = "jmeno", ["text"] = "text", ["section"] = "sekce", ["singular"] = "jmeno v singularu", ["plural"] = "jmeno v pluralu", ["matrix"] = "n*m", ["see"] = "viz", ["inherits"] = "inherits from", ["optional"] = "optioneel", ["displaymath"] = "formula", ["index"] = "entry", ["math"] = "formula", ["nothing"] = "empty", ["file"] = "file", ["position"] = "position", ["reference"] = "reference", ["csname"] = "name", ["destination"] = "destination", ["triplet"] = "triplet", ["word"] = "word", ["content"] = "text", }, it = { ["title"] = "setup", ["formula"] = "formula", ["number"] = "number", ["list"] = "list", ["dimension"] = "dimension", ["mark"] = "mark", ["reference"] = "reference", ["command"] = "command", ["file"] = "file", ["name"] = "name", ["identifier"] = "name", ["text"] = "text", ["section"] = "section", ["singular"] = "singular name", ["plural"] = "plural name", ["matrix"] = "n*m", ["see"] = "see", ["inherits"] = "inherits from", ["optional"] = "optioneel", ["displaymath"] = "formula", ["index"] = "entry", ["math"] = "formula", ["nothing"] = "empty", ["file"] = "file", ["position"] = "position", ["reference"] = "reference", ["csname"] = "name", ["destination"] = "destination", ["triplet"] = "triplet", ["word"] = "word", ["content"] = "text", }, ro = { ["title"] = "setari", ["formula"] = "formula", ["number"] = "numar", ["list"] = "lista", ["dimension"] = "dimensiune", ["mark"] = "marcaj", ["reference"] = "referinta", ["command"] = "comanda", ["file"] = "fisier", ["name"] = "nume", ["identifier"] = "nume", ["text"] = "text", ["section"] = "sectiune", ["singular"] = "nume singular", ["plural"] = "nume pluram", ["matrix"] = "n*m", ["see"] = "vezi", ["inherits"] = "inherits from", ["optional"] = "optioneel", ["displaymath"] = "formula", ["index"] = "entry", ["math"] = "formula", ["nothing"] = "empty", ["file"] = "file", ["position"] = "position", ["reference"] = "reference", ["csname"] = "name", ["destination"] = "destination", ["triplet"] = "triplet", ["word"] = "word", ["content"] = "text", }, fr = { ["title"] = "réglage", ["formula"] = "formule", ["number"] = "numéro", ["list"] = "liste", ["dimension"] = "dimension", ["mark"] = "marquage", ["reference"] = "reference", ["command"] = "commande", ["file"] = "fichier", ["name"] = "nom", ["identifier"] = "identificateur", ["text"] = "texte", ["section"] = "section", ["singular"] = "nom singulier", ["plural"] = "nom pluriel", ["matrix"] = "n*m", ["see"] = "vois", ["inherits"] = "herite de", ["optional"] = "optionel", ["displaymath"] = "formule", ["index"] = "entrée", ["math"] = "formule", ["nothing"] = "vide", ["file"] = "fichier", ["position"] = "position", ["reference"] = "réference", ["csname"] = "nom", ["destination"] = "destination", ["triplet"] = "triplet", ["word"] = "mot", ["content"] = "texte", } } document.setups.formats = { open_command = { tex = [[\%s]], lua = [[context.%s (]], }, close_command = { tex = [[]], lua = [[ )]], }, connector = { tex = [[]], lua = [[, ]], }, href_in_list = { tex = [[%s]], lua = [[%s]], }, href_as_command = { tex = [[\%s]], lua = [[context.%s]], }, modes = { tex = [[lua mode]], lua = [[tex mode]], }, optional_single = { tex = "[optional string %s]", lua = "{optional string %s}", }, optional_list = { tex = "[optional list %s]", lua = "{optional table %s}" , } , mandate_single = { tex = "[mandate string %s]", lua = "{mandate string %s}", }, mandate_list = { tex = "[mandate list %s]", lua = "{mandate list %s}", }, interface = [[%s]], source = [[%s]], parameter = [[%s%s%s]], parameters = [[%s
]], listing = [[
%s]],
    special         = [[%s]],
    default         = [[%s]],
}

local function translate(tag,int,noformat)
    local t = document.setups.translations
    local te = t["en"]
    local ti = t[int] or te
    if noformat then
        return ti[tag] or te[tag] or tag
    else
        return format(document.setups.formats.special,ti[tag] or te[tag] or tag)
    end
end

local function translated(e,int)
    local attributes = e.at
    local s = attributes.type or "?"
    local tag = match(s,"^cd:(.*)$")
    if attributes.default == "yes" then
        return format(document.setups.formats.default,tag or "?")
    elseif tag then
        return translate(tag,int)
    else
        return s
    end
end

document.setups.loaded = document.setups.loaded or { }

document.setups.current = { }
document.setups.showsources = true
document.setups.mode = "tex"

function document.setups.load(filename)
    filename = resolvers.findfile(filename) or ""
    if filename ~= "" then
        local current = document.setups.loaded[filename]
        if not current then
            local loaded = xml.load(filename)
            if loaded then
                -- xml.inject(document.setups.root,"/",loaded)
                current = {
                    file = filename,
                    root = loaded,
                    names = { },
                    used = { },
                }
                document.setups.loaded[filename] = current
            end
        end
        document.setups.current = current or { }
    end
end

function document.setups.name(ek)
    local at = ek.at
    local name = at.name
    if at.type == 'environment' then
        name = "start" .. name
    end
    if at.variant then
        name = name .. ":" .. at.variant
    end
    if at.generated == "yes" then
        name = name .. "*"
    end
    return name:lower()
end

function document.setups.csname(ek,int)
    local cs = ""
    local at = ek.at or { }
    if at.type == 'environment' then
        cs = translate("start",int,true) .. cs
    end
    for e in xml.collected(ek,'cd:sequence/(cd:string|variable)') do
        if e.tg == "string" then
            cs = cs .. e.at.value
        else
            cs = cs .. e.at.value -- to be translated
        end
    end
    return cs
end

function document.setups.names()
    local current = document.setups.current
    local names = current.names
    if not names or #names == 0 then
        names = { }
        local name = document.setups.name
        local csname = document.setups.csname
        for e in xml.collected(current.root,'cd:command') do
            names[#names+1] = { e.at.name, csname(e,int) }
        end
        table.sort(names, function(a,b) return a[2]:lower() < b[2]:lower() end)
        current.names = names
    end
    return names
end

function document.setups.show(name)
    local current = document.setups.current
    if current.root then
        local name = gsub(name,"[<>]","")
        local setup = xml.first(current.root,"cd:command[@name='" .. name .. "']")
        current.used[#current.used+1] = setup
        xml.sprint(setup)
    end
end

function document.setups.showused()
    local current = document.setups.current
    if current.root and next(current.used) then
        local sorted = table.sortedkeys(current.used)
        for i=1,#sorted do
            xml.sprint(current.used[sorted[i]])
        end
    end
end
function document.setups.showall()
    local current = document.setups.current
    if current.root then
        local list = { }
        for e in xml.collected(current.root,"cd:command") do
            list[document.setups.name(e)] = e
        end
        local sorted = table.sortedkeys(list)
        for i=1,#sorted do
            xml.sprint(list[sorted[i]])
        end
    end
end
function document.setups.resolve(name)
    local current = document.setups.current
    if current.root then
        local e = xml.filter(current.root,format("cd:define[@name='%s']/text()",name))
        if e then
            xml.sprint(e)
        end
    end
end

function document.setups.collect(name,int,lastmode)
    local current = document.setups.current
    local formats = document.setups.formats
    local command = xml.filter(current.root,format("cd:command[@name='%s']/first()",name))
    if command then
        local attributes = command.at or { }
        local data = {
            command = command,
            category = attributes.category or "",
        }
        if document.setups.showsources then
            data.source = (attributes.file and format(formats.source,attributes.file,lastmode,attributes.file)) or ""
        else
            data.source = attributes.file or ""
        end
        local n, sequence, tags = 0, { }, { }
        sequence[#sequence+1] = format(formats.open_command[lastmode],document.setups.csname(command,int))
        local arguments, tag = { }, ""
        for r, d, k in xml.elements(command,"(cd:keywords|cd:assignments)") do
            n = n + 1
            local attributes = d[k].at
            if #sequence > 1 then
                local c = formats.connector[lastmode]
                if c ~= "" then
                    sequence[#sequence+1] = c
                end
            end
            if attributes.optional == 'yes' then
                if attributes.list == 'yes' then
                    tag = format(formats.optional_list[lastmode],n)
                else
                    tag = format(formats.optional_single[lastmode],n)
                end
            else
                if attributes.list == 'yes' then
                    tag = format(formats.mandate_list[lastmode],n)
                else
                    tag = format(formats.mandate_single[lastmode],n)
                end
            end
            sequence[#sequence+1] = tag
            tags[#tags+1] = tag
        end
        sequence[#sequence+1] = formats.close_command[lastmode]
        data.sequence = concat(sequence, " ")
        local parameters, n = { }, 0
        for r, d, k in xml.elements(command,"(cd:keywords|cd:assignments)") do
            n = n + 1
            if d[k].tg == "keywords" then
                local left = tags[n]
                local right = { }
                for r, d, k in xml.elements(d[k],"(cd:constant|cd:resolve)") do
                    local tag = d[k].tg
                    if tag == "resolve" then
                        local name = d[k].at.name or ""
                        if name ~= "" then
                            local resolved = xml.filter(current.root,format("cd:define[@name='%s']",name))
                            for r, d, k in xml.elements(resolved,"cd:constant") do
                                right[#right+1] = translated(d[k],int)
                            end
                        end
                    else
                        right[#right+1] = translated(d[k],int)
                    end
                end
                parameters[#parameters+1] = format(formats.parameter,left,"",concat(right, ", "))
            else
                local what = tags[n]
                for r, d, k in xml.elements(d[k],"(cd:parameter|cd:inherit)") do
                    local tag = d[k].tg
                    local left, right = d[k].at.name or "?", { }
                    if tag == "inherit" then
                        local name = d[k].at.name or "?"
                        local goto = format(document.setups.formats.href_as_command[lastmode],name,lastmode,name)
                        if #parameters > 0 and not find(parameters[#parameters],"
") then parameters[#parameters+1] = format(formats.parameter,"
","","") end parameters[#parameters+1] = format(formats.parameter,what,format(formats.special,translate("inherits",int)),goto) else for r, d, k in xml.elements(d[k],"(cd:constant|cd:resolve)") do local tag = d[k].tg if tag == "resolve" then local name = d[k].at.name or "" if name ~= "" then local resolved = xml.filter(current.root,format("cd:define[@name='%s']",name)) for r, d, k in xml.elements(resolved,"cd:constant") do right[#right+1] = translated(d[k],int) end end else right[#right+1] = translated(d[k],int) end end parameters[#parameters+1] = format(formats.parameter,what,left,concat(right, ", ")) end what = "" end end parameters[#parameters+1] = format(formats.parameter,"
","","") end data.parameters = parameters or { } data.mode = formats.modes[lastmode or "tex"] return data else return nil end end -- -- -- tex = tex or { } -- -- -- local interfaces = { czech = 'cz', dutch = 'nl', english = 'en', french = 'fr', german = 'de', italian = 'it', persian = 'pe', romanian = 'ro', } local lastinterface, lastcommand, lastsource, lastmode = "en", "", "", "tex" local variables = { ['color-background-main-left'] = '#3F3F3F', ['color-background-main-right'] = '#5F5F5F', ['color-background-one'] = lmx.get('color-background-green'), ['color-background-two'] = lmx.get('color-background-blue'), ['title'] = 'ConTeXt Help Information', } --~ function lmx.loadedfile(filename) --~ return io.loaddata(resolvers.findfile(filename)) -- return resolvers.texdatablob(filename) --~ end local function doit(configuration,filename,hashed) local formats = document.setups.formats local start = os.clock() local detail = hashed.queries or { } if detail then lastinterface = detail.interface or lastinterface lastcommand = detail.command or lastcommand lastsource = detail.source or lastsource lastmode = detail.mode or lastmode or "tex" lastcommand = gsub(lastcommand,"%s*^\\*(.+)%s*","%1") if lastinterface then report("checking interface: %s",lastinterface) document.setups.load(format("cont-%s.xml",lastinterface)) end local div = document.setups.div [lastinterface] local span = document.setups.span[lastinterface] local names, refs, ints = document.setups.names(lastinterface), { }, { } for k=1,#names do local v = names[k] refs[k] = format(formats.href_in_list[lastmode],v[1],lastmode,v[2]) end if lastmode ~= "lua" then local sorted = table.sortedkeys(interfaces) for k=1,#sorted do local v = sorted[k] ints[k] = format(formats.interface,interfaces[v],lastmode,v) end end local n = concat(refs,"
") local i = concat(ints,"

") if div then variables.names = format(div,n) variables.interfaces = format(div,i) else variables.names = n variables.interfaces = i end -- first we need to add information about mkii/mkiv variables.maintitle = "no definition" variables.maintext = "" variables.extra = "" if document.setups.showsources and lastsource and lastsource ~= "" then -- todo: mkii, mkiv, tex (can be different) local data = io.loaddata(resolvers.findfile(lastsource)) variables.maintitle = lastsource variables.maintext = format(formats.listing,data) lastsource = "" elseif lastcommand and lastcommand ~= "" then local data = document.setups.collect(lastcommand,lastinterface,lastmode) if data then local what, extra = { "environment", "category", "source", "mode" }, { } for k=1,#what do local v = what[k] if data[v] and data[v] ~= "" then lmx.set(v, data[v]) extra[#extra+1] = v .. ": " .. data[v] end end variables.maintitle = data.sequence variables.maintext = format(formats.parameters,concat(data.parameters)) variables.extra = concat(extra,"   ") else variables.maintext = "select command" end end else variables.maintitle = "no definition" variables.maintext = "some error" variables.extra = "" end local content = lmx.convert('context-help.lmx',false,variables) report("time spent on page: %0.03f seconds",os.clock()-start) return { content = content } end return doit, true context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-context.xml0000644000175000017500000002006112132111075025433 0ustar norbertnorbert mtx-context ConTeXt Process Management 0.60 external helpinfo file process (one or more) files (default action) create context formats use ctx file (process management specification) use specified user interface (default: en) close pdf file in viewer and start pdf viewer afterwards purge files either or not after a run (=...) purge all files either or not after a run (=...) load the given module or style, normally part of the distribution load the given environment file first (document styles) enable given the modes (conditional processing in styles) also consult the given paths when files are looked for set variables that can be consulted during a run (key/value pairs) set the randomseed rename the resulting output to the given name set tracker variables (show list with ) set directive variables (show list with ) disable logcatgories (show list with ) disable logging to the console (logfile only) purge result file before run force xml stub force cld (context lua document) stub force lua stub (like texlua) force mp stub run extra imposition pass, given that the style sets up imposition ignore imposition specifications in the style use luajittex with jit turned off (only use the faster virtual machine) use luajittex with jit turned on (in most cases not faster, even slower) only run once (no multipass data file is produced) run without stopping and do not show messages on the console run without stopping run with synctex enabled (optional value: zipped, unzipped, 1, -1) generate file database etc. (as luatools does) do not descend to .. and ../.. report installed context version assume given file present elsewhere use dummy file as jobname update context version number (also provide , optionally provide ) omit runtime statistics at the end of the run update context from website (not to be confused with contextgarden) profile job (use: mtxrun profile ) generate timing and statistics overview process extra (mtx-context-... in distribution) show extras process file with texexec using pdftex process file with texexec using xetex process file with texexec do not check for file and enter scroll mode (=whatever.tmp) context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-epub.lua0000644000175000017500000002600112130411274024665 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-epub'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The epub specification is far from beautiful. Especially the id related -- part is messy and devices/programs react differently on them (so an id is not -- really an id but has some special property). Then there is this ncx suffix -- thing. Somehow it give the impression of a reversed engineered application -- format so it will probably take a few cycles to let it become a real -- clean standard. Thanks to Adam Reviczky, Luigi Scarso and Andy Thomas for -- helping to figure out all the puzzling details. -- This is preliminary code. At some point we will deal with images as well but -- first we need a decent strategy to export them. More information will be -- available on the wiki. local format, gsub = string.format, string.gsub local concat = table.concat local helpinfo = [[ mtx-epub ConTeXt EPUB Helpers 0.12 create epub zip file Example mtxrun --script epub --make mydocument ]] local application = logs.application { name = "mtx-epub", banner = "ConTeXt EPUB Helpers 0.12", helpinfo = helpinfo, } -- script code scripts = scripts or { } scripts.epub = scripts.epub or { } local mimetype = "application/epub+zip" local container = [[ ]] local package = [[ %s %s urn:uuid:%s %s %s %s ]] local item = [[ ]] local toc = [[ %s start ]] local coverxhtml = [[ cover.xhtml
The cover image
]] -- We need to figure out what is permitted. Numbers only seem to give -- problems is some applications as do names with dashes. Also the -- optional toc is supposed to be there and although id's are by -- concept neutral, there are sometimes hard requirements with respect -- to their name like ncx and toc.ncx). Maybe we should stick to 3.0 -- only. local function dumbid(filename) -- return (string.gsub(os.uuid(),"%-%","")) -- to be tested return file.nameonly(filename) .. "-" .. file.suffix(filename) end local mimetypes = { xhtml = "application/xhtml+xml", xml = "application/xhtml+xml", css = "text/css", svg = "image/svg+xml", png = "image/png", jpg = "image/jpeg", ncx = "application/x-dtbncx+xml", gif = "image/gif", -- default = "text/plain", } local idmakers = { ncx = function(filename) return "ncx" end, -- css = function(filename) return "stylesheet" end, default = function(filename) return dumbid(filename) end, } -- specification = { -- name = "document", -- identifier = "123", -- root = "a.xhtml", -- files = { -- "a.xhtml", -- "b.css", -- "c.png", -- } -- } local function locateimages(oldname,newname,subpath) local data = io.loaddata(oldname) local images = { } local done = gsub(data,"(background%-image *: * url%()(.-)(%))", function(before,name,after) if subpath then name = file.join(subpath,name) end images[#images+1] = name return before .. name .. after end) if newname then io.savedata(done,newname) end return images end local zippers = { { name = "zip", uncompressed = "zip %s -X -0 %s", compressed = "zip %s -X -9 -r %s", }, { name = "7zip (7z)", uncompressed = "7z a -tzip -mx0 %s %s", compressed = "7z a -tzip %s %s", }, } function scripts.epub.make() local filename = environment.files[1] if filename and filename ~= "" and type(filename) == "string" then filename = file.basename(filename) local specfile = file.replacesuffix(filename,"specification") local specification = lfs.isfile(specfile) and dofile(specfile) or { } -- inspect(specification) local name = specification.name or file.removesuffix(filename) local identifier = specification.identifier or os.uuid(true) local files = specification.files or { file.addsuffix(filename,"xhtml") } local images = specification.images or { } local root = specification.root or files[1] local language = specification.language or "en" local creator = specification.author or "My Self" local title = specification.title or "My Title" local firstpage = specification.firstpage or "" local lastpage = specification.lastpage or "" -- identifier = gsub(identifier,"[^a-zA-z0-9]","") if firstpage ~= "" then images[firstpage] = firstpage end if lastpage ~= "" then images[lastpage] = lastpage end identifier = "BookId" -- weird requirement local epubname = name local epubpath = file.replacesuffix(name,"tree") local epubfile = file.replacesuffix(name,"epub") local epubroot = file.replacesuffix(name,"opf") local epubtoc = "toc.ncx" local epubcover = "cover.xhtml" application.report("creating paths in tree %s",epubpath) lfs.mkdir(epubpath) lfs.mkdir(file.join(epubpath,"META-INF")) lfs.mkdir(file.join(epubpath,"OEBPS")) local used = { } local function copyone(filename) local suffix = file.suffix(filename) local mime = mimetypes[suffix] if mime then local idmaker = idmakers[suffix] or idmakers.default local target = file.join(epubpath,"OEBPS",filename) file.copy(filename,target) application.report("copying %s to %s",filename,target) used[#used+1] = format(item,idmaker(filename),filename,mime) end end copyone("cover.xhtml") copyone("toc.ncx") local function copythem(files) for i=1,#files do local filename = files[i] if type(filename) == "string" then copyone(filename) end end end copythem(files) local theimages = { } for k, v in table.sortedpairs(images) do theimages[#theimages+1] = k if not lfs.isfile(k) and file.suffix(k) == "svg" and file.suffix(v) == "pdf" then local command = format("inkscape --export-plain-svg=%s %s",k,v) application.report("running command '%s'\n\n",command) os.execute(command) end end copythem(theimages) local idmaker = idmakers[file.suffix(root)] or idmakers.default container = format(container, epubroot ) package = format(package, identifier, title, language, identifier, os.uuid(), creator, os.date("!%Y-%m-%dT%H:%M:%SZ"), idmaker(firstpage), concat(used,"\n"), idmaker(root) ) toc = format(toc, identifier, title, root ) coverxhtml = format(coverxhtml, firstpage ) io.savedata(file.join(epubpath,"mimetype"),mimetype) io.savedata(file.join(epubpath,"META-INF","container.xml"),container) io.savedata(file.join(epubpath,"OEBPS",epubroot),package) io.savedata(file.join(epubpath,"OEBPS",epubtoc),toc) io.savedata(file.join(epubpath,"OEBPS",epubcover),coverxhtml) application.report("creating archive\n\n") lfs.chdir(epubpath) os.remove(epubfile) local done = false for i=1,#zippers do local zipper = zippers[i] if os.execute(format(zipper.uncompressed,epubfile,"mimetype")) then os.execute(format(zipper.compressed,epubfile,"META-INF")) os.execute(format(zipper.compressed,epubfile,"OEBPS")) done = zipper.name break end end lfs.chdir("..") if done then application.report("epub archive made using %s: %s",done,file.join(epubpath,epubfile)) else local list = { } for i=1,#zippers do list[#list+1] = zipper.name end application.report("no epub archive made, install one of: %s",concat(list," ")) end end end -- if environment.argument("make") then scripts.epub.make() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-metapost.lua0000644000175000017500000001620412130411274025572 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-metapost'] = { -- this was mtx-mptopdf version = 0.100, comment = "companion to mtxrun.lua", author = "Taco Hoekwater & Hans Hagen", copyright = "ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-metapost MetaPost to PDF processor 0.10 raw metapost run use metafun instead of plain force force texexec usage (mkii) split single result file into pages Examples mtxrun --script metapost yourfile.mp mtxrun --script metapost --split yourfile.mp mtxrun --script metapost yourfile.123 myfile.mps other usage resembles mptopdf.pl ]] local application = logs.application { name = "mtx-metapost", banner = "MetaPost to PDF processor 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.mptopdf = scripts.mptopdf or { } scripts.mptopdf.aux = scripts.mptopdf.aux or { } local format, find, gsub = string.format, string.find, string.gsub local function assumes_latex(filename) local d = io.loaddata(filename) or "" return find(d,"\\documentstyle") or find(d,"\\documentclass") or find(d,"\\begin{document}") end local template = "\\startTEXpage\n\\convertMPtoPDF{%s}{1}{1}\n\\stopTEXpage" local texified = "\\starttext\n%s\n\\stoptext" local splitter = "\\startTEXpage\\externalfigure[%s][page=%s]\\stopTEXpage" local tempname = "mptopdf-temp.tex" local function do_convert(filename) if find(filename,".%d+$") or find(filename,"%.mps$") then io.savedata(tempname,format(template,filename)) local resultname = format("%s-%s.pdf",file.nameonly(filename),file.suffix(filename)) local result = os.execute(format([[context --once --batch --purge --result=%s "%s"]],resultname,tempname)) return lfs.isfile(resultname) and resultname end end local function do_split(filename,numbers) local name = file.nameonly(filename) for i=1,#numbers do io.savedata(tempname,format(splitter,file.addsuffix(name,"pdf"),i)) local resultname = format("%s-%s.pdf",name,numbers[i]) local result = os.execute(format([[context --once --batch --purge --result=%s "%s"]],resultname,tempname)) end end local function do_texify(str) -- This only works for flat mp files i.e. outer beginfigs. Normally a -- context user will directly make a tex file. Of course we can make -- this script more clever, but why should we as better methods exist. local numbers = { } str = "\\startMPinclusions\n".. str .. "\n\\stopMPinclusions" str = gsub(str,"beginfig%s*%(%s*(.-)%s*%)%s*;%s*",function(s) numbers[#numbers+1] = tonumber(s) or 0 return "\n\\stopMPinclusions\n\\startMPpage\n" end) str = gsub(str,"%s*endfig%s*;%s*","\n\\stopMPpage\n\\startMPinclusions\n") str = gsub(str,"\\startMPinclusions%s*\\stopMPinclusions","") str = gsub(str,"[\n\r]+","\n") return format(texified,str), numbers end local function do_convert_all(filename) local results = dir.glob(file.nameonly(filename) .. ".*") -- reset local report = { } for i=1,#results do local filename = results[i] local resultname = do_convert(filename) if resultname then report[#report+1] = { filename, resultname } end end if #report > 0 then report("number of converted files: %i", #report) report() for i=1,#report do local r = report[i] report("%s => %s", r[1], r[2]) end else report("no files are converted for '%s'",filename) end end local function do_convert_one(filename) local resultname = do_convert(filename) if resultname then report("%s => %s", filename,resultname) else report("no result for '%s'",filename) end end function scripts.mptopdf.convertall() local rawmp = environment.arguments.rawmp or false local metafun = environment.arguments.metafun or false local latex = environment.arguments.latex or false local pattern = environment.arguments.pattern or false local split = environment.arguments.split or false local files if pattern then files = dir.glob(file.nameonly(filename)) else files = environment.files end if #files > 0 then for i=1,#files do local filename = files[i] if file.suffix(filename) == "mp" then local command, convert, texdata, numbers if rawmp then if metafun then command, convert = format("mpost --progname=mpost --mem=metafun %s",filename), true else command, convert = format("mpost --mem=mpost %s",filename), true end else if latex or assumes_latex(filename) then command, convert = format("mpost --mem=mpost --tex=latex %s",filename), true elseif texexec then command, convert = format("texexec --mptex %s",filename), true else texdata, numbers = do_texify(io.loaddata(filename) or "") io.savedata(tempname,texdata) command, convert = format("context --result=%s --purge --once %s",file.nameonly(filename),tempname), false end end report("running: %s",command) local done = os.execute(command) if done then if convert then do_convert_all(filename) elseif split then do_split(filename,numbers) -- already pdf, maybe optionally split end else report("error while processing mp file '%s'", filename) end else do_convert_one(filename) end end else report("no files match to process") end end if environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) elseif environment.files[1] then scripts.mptopdf.convertall() else if not environment.argument("help") then report("provide MP output file (or pattern)") report() end application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-fonts.lua0000644000175000017500000004257312161703335025105 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-fonts'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local getargument = environment.getargument local setargument = environment.setargument local givenfiles = environment.files local helpinfo = [[ mtx-fonts ConTeXt Font Database Management 0.21 save open type font in raw table save a tma file in a more readable format generate new font database (use when in doubt) :generate luatex-fonts-names.lua (not for context!) : list installed fonts, filter by name [] : list installed fonts, filter by spec [] : list installed fonts, filter by file [] filter files using pattern key-value pairs show all found instances (combined with other flags) give more details enable trackers some info about the database Examples mtxrun --script font --list somename (== --pattern=*somename*) mtxrun --script font --list --name somename mtxrun --script font --list --name --pattern=*somename* mtxrun --script font --list --spec somename mtxrun --script font --list --spec somename-bold-italic mtxrun --script font --list --spec --pattern=*somename* mtxrun --script font --list --spec --filter="fontname=somename" mtxrun --script font --list --spec --filter="familyname=somename,weight=bold,style=italic,width=condensed" mtxrun --script font --list --spec --filter="familyname=crap*,weight=bold,style=italic" mtxrun --script font --list --all mtxrun --script font --list --file somename mtxrun --script font --list --file --all somename mtxrun --script font --list --file --pattern=*somename* ]] local application = logs.application { name = "mtx-fonts", banner = "ConTeXt Font Database Management 0.21", helpinfo = helpinfo, } local report = application.report -- todo: fc-cache -v en check dirs, or better is: fc-cat -v | grep Directory if not fontloader then fontloader = fontforge end dofile(resolvers.findfile("font-otp.lua","tex")) -- we need to unpack the font for analysis dofile(resolvers.findfile("font-trt.lua","tex")) dofile(resolvers.findfile("font-syn.lua","tex")) dofile(resolvers.findfile("font-mis.lua","tex")) scripts = scripts or { } scripts.fonts = scripts.fonts or { } function fonts.names.statistics() fonts.names.load() local data = fonts.names.data local statistics = data.statistics local function counted(t) local n = { } for k, v in next, t do n[k] = table.count(v) end return table.sequenced(n) end report("cache uuid : %s", data.cache_uuid) report("cache version : %s", data.cache_version) report("number of trees : %s", #data.datastate) report() report("number of fonts : %s", statistics.fonts or 0) report("used files : %s", statistics.readfiles or 0) report("skipped files : %s", statistics.skippedfiles or 0) report("duplicate files : %s", statistics.duplicatefiles or 0) report("specifications : %s", #data.specifications) report("families : %s", table.count(data.families)) report() report("mappings : %s", counted(data.mappings)) report("fallbacks : %s", counted(data.fallbacks)) report() report("used styles : %s", table.sequenced(statistics.used_styles)) report("used variants : %s", table.sequenced(statistics.used_variants)) report("used weights : %s", table.sequenced(statistics.used_weights)) report("used widths : %s", table.sequenced(statistics.used_widths)) report() report("found styles : %s", table.sequenced(statistics.styles)) report("found variants : %s", table.sequenced(statistics.variants)) report("found weights : %s", table.sequenced(statistics.weights)) report("found widths : %s", table.sequenced(statistics.widths)) end function fonts.names.simple() local simpleversion = 1.001 local simplelist = { "ttf", "otf", "ttc", "dfont" } local name = "luatex-fonts-names.lua" local path = file.collapsepath(caches.getwritablepath("..","..","generic","fonts","data")) fonts.names.filters.list = simplelist fonts.names.version = simpleversion -- this number is the same as in font-dum.lua report("generating font database for 'luatex-fonts' version %s",fonts.names.version) fonts.names.identify(true) local data = fonts.names.data if data then local simplemappings = { } local simplified = { mappings = simplemappings, version = simpleversion, cache_version = simpleversion, } local specifications = data.specifications for i=1,#simplelist do local format = simplelist[i] for tag, index in next, data.mappings[format] do local s = specifications[index] simplemappings[tag] = { s.rawname, s.filename, s.subfont } end end if environment.arguments.nocache then report("not using cache path %a",path) else dir.mkdirs(path) if lfs.isdir(path) then report("saving names on cache path %a",path) name = file.join(path,name) else report("invalid cache path %a",path) end end report("saving names in %a",name) io.savedata(name,table.serialize(simplified,true)) local data = io.loaddata(resolvers.findfile("luatex-fonts-syn.lua","tex")) or "" local dummy = string.match(data,"fonts%.names%.version%s*=%s*([%d%.]+)") if tonumber(dummy) ~= simpleversion then report("warning: version number %s in 'font-dum' does not match database version number %s",dummy or "?",simpleversion) end elseif lfs.isfile(name) then os.remove(name) end end function scripts.fonts.reload() if getargument("simple") then fonts.names.simple() else fonts.names.load(true,getargument("force")) end end local function subfont(sf) if sf then return string.format("index: % 2s", sf) else return "" end end local function fontweight(fw) if fw then return string.format("conflict: %s", fw) else return "" end end local function showfeatures(tag,specification) report() report("mapping : %s",tag) report("fontname: %s",specification.fontname) report("fullname: %s",specification.fullname) report("filename: %s",specification.filename) report("family : %s",specification.familyname or "") report("weight : %s",specification.weight or "") report("style : %s",specification.style or "") report("width : %s",specification.width or "") report("variant : %s",specification.variant or "") report("subfont : %s",subfont(specification.subfont)) report("fweight : %s",fontweight(specification.fontweight)) -- maybe more local features = fonts.helpers.getfeatures(specification.filename,specification.format) if features then for what, v in table.sortedhash(features) do local data = features[what] if data and next(data) then report() report("%s features:",what) report() report("feature script languages") report() for f,ff in table.sortedhash(data) do local done = false for s, ss in table.sortedhash(ff) do if s == "*" then s = "all" end if ss ["*"] then ss["*"] = nil ss.all = true end if done then f = "" else done = true end report("% -8s % -8s % -8s",f,s,table.concat(table.sortedkeys(ss), " ")) -- todo: padd 4 end end end end else report("no features") end report() end local function reloadbase(reload) if reload then report("fontnames, reloading font database") names.load(true,getargument("force")) report("fontnames, done\n\n") end end local function list_specifications(t,info) if t then local s = table.sortedkeys(t) if info then for k=1,#s do local v = s[k] showfeatures(v,t[v]) end else for k=1,#s do local v = s[k] local entry = t[v] s[k] = { entry.familyname or "", entry.weight or "", entry.style or "", entry.width or "", entry.variant or "", entry.fontname, entry.filename, subfont(entry.subfont), fontweight(entry.fontweight), } end utilities.formatters.formatcolumns(s) for k=1,#s do texio.write_nl(s[k]) end end end end local function list_matches(t,info) if t then local s, w = table.sortedkeys(t), { 0, 0, 0 } if info then for k=1,#s do local v = s[k] showfeatures(v,t[v]) end else for k=1,#s do local v = s[k] local entry = t[v] s[k] = { v, entry.fontname, entry.filename, subfont(entry.subfont) } end utilities.formatters.formatcolumns(s) for k=1,#s do texio.write_nl(s[k]) end end end end function scripts.fonts.list() local all = getargument("all") local info = getargument("info") local reload = getargument("reload") local pattern = getargument("pattern") local filter = getargument("filter") local given = givenfiles[1] reloadbase(reload) if getargument("name") then if pattern then --~ mtxrun --script font --list --name --pattern=*somename* list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info) elseif filter then report("not supported: --list --name --filter",name) elseif given then --~ mtxrun --script font --list --name somename list_matches(fonts.names.list(given,reload,all),info) else report("not supported: --list --name ",name) end elseif getargument("spec") then if pattern then --~ mtxrun --script font --list --spec --pattern=*somename* report("not supported: --list --spec --pattern",name) elseif filter then --~ mtxrun --script font --list --spec --filter="fontname=somename" list_specifications(fonts.names.getlookups(filter),info) elseif given then --~ mtxrun --script font --list --spec somename list_specifications(fonts.names.collectspec(given,reload,all),info) else report("not supported: --list --spec ",name) end elseif getargument("file") then if pattern then --~ mtxrun --script font --list --file --pattern=*somename* list_specifications(fonts.names.collectfiles(string.topattern(pattern,true),reload,all),info) elseif filter then report("not supported: --list --spec",name) elseif given then --~ mtxrun --script font --list --file somename list_specifications(fonts.names.collectfiles(given,reload,all),info) else report("not supported: --list --file ",name) end elseif pattern then --~ mtxrun --script font --list --pattern=*somename* list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info) elseif given then --~ mtxrun --script font --list somename list_matches(fonts.names.list(given,reload,all),info) elseif all then pattern = "*" list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info) else report("not supported: --list ",name) end end function scripts.fonts.justload() local fullname = environment.files[1] if fullname then local result = fontloader.open(fullname) if type(result) == "table" then report("loading %s: %s","succeeded",fullname) end end report("loading %s: %s","failed",fullname) end function scripts.fonts.unpack() local name = file.removesuffix(file.basename(givenfiles[1] or "")) if name and name ~= "" then local cache = containers.define("fonts", "otf", 2.742, true) local cleanname = containers.cleanname(name) local data = containers.read(cache,cleanname) if data then local savename = file.addsuffix(cleanname .. "-unpacked","tma") report("fontsave, saving data in %s",savename) fonts.handlers.otf.enhancers.unpack(data) io.savedata(savename,table.serialize(data,true)) else report("unknown file %a",name) end end end function scripts.fonts.save() local name = givenfiles[1] or "" local sub = givenfiles[2] or "" local function save(savename,fontblob) if fontblob then savename = file.addsuffix(string.lower(savename),"lua") report("fontsave, saving data in %s",savename) table.tofile(savename,fontloader.to_table(fontblob),"return") fontloader.close(fontblob) end end if name and name ~= "" then local filename = resolvers.findfile(name) -- maybe also search for opentype if filename and filename ~= "" then local suffix = string.lower(file.suffix(filename)) if suffix == 'ttf' or suffix == 'otf' or suffix == 'ttc' or suffix == "dfont" then local fontinfo = fontloader.info(filename) if fontinfo then report("font: %s located as %s",name,filename) if fontinfo[1] then for k=1,#fontinfo do local v = fontinfo[k] save(v.fontname,fontloader.open(filename,v.fullname)) end else save(fontinfo.fullname,fontloader.open(filename)) end else report("font: %s cannot be read",filename) end else report("font: %s not saved",filename) end else report("font: %s not found",name) end else report("font: no name given") end end if getargument("names") then setargument("reload",true) setargument("simple",true) end if getargument("list") then scripts.fonts.list() elseif getargument("reload") then scripts.fonts.reload() elseif getargument("save") then scripts.fonts.save() elseif getargument("justload") then scripts.fonts.justload() elseif getargument("unpack") then scripts.fonts.unpack() elseif getargument("statistics") then fonts.names.statistics() elseif getargument("exporthelp") then application.export(getargument("exporthelp"),givenfiles[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-mk-help.lua0000644000175000017500000004536012130411274025300 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-mk-help'] = { version = 1.001, comment = "a script for making help files", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ mtxrun --exporthelp=all %targetpath%\mkiv\mtxrun.tmp context --exporthelp=all %targetpath%\mkiv\context.tmp mtxrun --script context --exporthelp=all %targetpath%\mkiv\mtx-context.tmp mtxrun --script babel --exporthelp=all %targetpath%\mkiv\mtx-babel.tmp mtxrun --script base --exporthelp=all %targetpath%\mkiv\mtx-base.tmp mtxrun --script cache --exporthelp=all %targetpath%\mkiv\mtx-cache.tmp mtxrun --script chars --exporthelp=all %targetpath%\mkiv\mtx-chars.tmp mtxrun --script check --exporthelp=all %targetpath%\mkiv\mtx-check.tmp mtxrun --script colors --exporthelp=all %targetpath%\mkiv\mtx-colors.tmp mtxrun --script convert --exporthelp=all %targetpath%\mkiv\mtx-convert.tmp mtxrun --script epub --exporthelp=all %targetpath%\mkiv\mtx-epub.tmp mtxrun --script fcd --exporthelp=all %targetpath%\mkiv\mtx-fcd.tmp mtxrun --script flac --exporthelp=all %targetpath%\mkiv\mtx-flac.tmp mtxrun --script fonts --exporthelp=all %targetpath%\mkiv\mtx-fonts.tmp mtxrun --script grep --exporthelp=all %targetpath%\mkiv\mtx-grep.tmp mtxrun --script interface --exporthelp=all %targetpath%\mkiv\mtx-interface.tmp mtxrun --script metapost --exporthelp=all %targetpath%\mkiv\mtx-metapost.tmp mtxrun --script metatex --exporthelp=all %targetpath%\mkiv\mtx-metatex.tmp mtxrun --script modules --exporthelp=all %targetpath%\mkiv\mtx-modules.tmp mtxrun --script mtxworks --exporthelp=all %targetpath%\mkiv\mtx-mtxworks.tmp mtxrun --script package --exporthelp=all %targetpath%\mkiv\mtx-package.tmp mtxrun --script patterns --exporthelp=all %targetpath%\mkiv\mtx-patterns.tmp mtxrun --script pdf --exporthelp=all %targetpath%\mkiv\mtx-pdf.tmp mtxrun --script profile --exporthelp=all %targetpath%\mkiv\mtx-profile.tmp mtxrun --script rsync --exporthelp=all %targetpath%\mkiv\mtx-rsync.tmp mtxrun --script scite --exporthelp=all %targetpath%\mkiv\mtx-scite.tmp mtxrun --script server --exporthelp=all %targetpath%\mkiv\mtx-server.tmp mtxrun --script texworks --exporthelp=all %targetpath%\mkiv\mtx-texworks.tmp mtxrun --script timing --exporthelp=all %targetpath%\mkiv\mtx-timing.tmp mtxrun --script tools --exporthelp=all %targetpath%\mkiv\mtx-tools.tmp mtxrun --script unzip --exporthelp=all %targetpath%\mkiv\mtx-unzip.tmp mtxrun --script update --exporthelp=all %targetpath%\mkiv\mtx-update.tmp mtxrun --script watch --exporthelp=all %targetpath%\mkiv\mtx-watch.tmp mtxrun --script mk-help luatools --exporthelp=all %targetpath%\mkiv\luatools.tmp mtxrun --script mk-help texmfstart --exporthelp=all %targetpath%\mkii\texmfstart.tmp mtxrun --script mk-help texexec --exporthelp=all %targetpath%\mkii\texexec.tmp mtxrun --script mk-help texutil --exporthelp=all %targetpath%\mkii\texutil.tmp mtxrun --script mk-help ctxtools --exporthelp=all %targetpath%\mkii\ctxtools.tmp mtxrun --script mk-help textools --exporthelp=all %targetpath%\mkii\textools.tmp mtxrun --script mk-help pdftools --exporthelp=all %targetpath%\mkii\pdftools.tmp mtxrun --script mk-help tmftools --exporthelp=all %targetpath%\mkii\tmftools.tmp mtxrun --script mk-help xmltools --exporthelp=all %targetpath%\mkii\xmltools.tmp mtxrun --script mk-help pstopdf --exporthelp=all %targetpath%\mkii\pstopdf.tmp mtxrun --script mk-help rlxtools --exporthelp=all %targetpath%\mkii\rlxtools.tmp mtxrun --script mk-help imgtopdf --exporthelp=all %targetpath%\mkii\imgtopdf.tmp ]]-- local helpinfo = os.resultof("mtxrun --exporthelp") or "" local helpinfo = string.match(helpinfo,[[^.-(.-)]]) or [[]] local texmfstart = logs.application { name = "texmfstart", banner = "texmfstart 7.0.0", helpinfo = [[]] .. helpinfo, } -- let's also put luatools here: local helpinfo = os.resultof("luatools --exporthelp") or "" local helpinfo = string.match(helpinfo,[[^.-(.-)]]) or [[]] local helpinfo = string.gsub(helpinfo,"mtx%-base","luatools") local luatools = logs.application { name = "luatools", banner = "luatools 1.35", helpinfo = [[]] .. helpinfo, } -- local helpinfo = [[ texexec TeXExec 6.2.1 make formats check versions process file process mp file process mpx file process mp file to stand-alone graphics process mp/ctx file to stand-alone graphics list of file content generate overview of figures generate module documentation impose pages (booklets) select pages from file(s) copy pages from file(s) trim pages from file(s) combine multiple pages split file in pages ]] local texexec = logs.application { name = "texexec", banner = "TeXExec 6.2.1", helpinfo = helpinfo, } local helpinfo = [[ texutil TeXUtil 9.1.0 convert tui file into tuo file generate figure dimensions file filter essential log messages remove most temporary files remove all temporary files generate documentation file from source analyze pdf file ]] local texutil = logs.application { name = "texutil", banner = "TeXUtil 9.1.0", helpinfo = helpinfo, } local helpinfo = [[ ctxtools CtxTools 1.3.5 update context version report context version generate jedit syntax files [ generate bbedit syntax files [ generate scite syntax files [ generate raw syntax files [ generate interface files (xml) [nl de ..] remove temporary files [ [basename] [filename] ) # no help, hidden temporary feature convert pdftex mapfiles to dvipdfmx [ [texmfroot] create doctype entity definition from enco-uc.tex add context copyright notice [ replace line-endings [ [pattern] [filename] download latest version and remake formats [ remove utf bom [ ]] local ctxtools = logs.application { name = "ctxtools", banner = "CtxTools 1.3.5", helpinfo = helpinfo, } local helpinfo = [[ textools TeXTools 1.3.1 [pattern] [ [pattern] [ [pattern] [ [pattern] [ filename [ [pattern] [ [pattern] [ [pattern] [ [texmfroot] [ filename [ fromroot toroot [ [ [ [ [ filename afmfile encodingname tpm file (run in texmf root) ]] local textools = logs.application { name = "textools", banner = "TeXTools 1.3.1", helpinfo = helpinfo, } local helpinfo = [[ pdftools PDFTools 1.2.1 [ [ ] filename [ filename [ filename [ [ filename ]] local pdftools = logs.application { name = "pdftools", banner = "PDFTools 1.2.1", helpinfo = helpinfo, } local helpinfo = [[ tmftools TMFTools 1.1.0 [ ] [pattern] act as kpse server ]] local tmftools = logs.application { name = "tmftools", banner = "TMFTools 1.2.1", helpinfo = helpinfo, } local helpinfo = [[ xmltools XMLTools 1.2.2 generate directory listing generate graphic from mathml report entities and elements [ ] cleanup xml file [] enhance xml file (partial) filter elements from xml file [] generate ddirectory listing ]] local xmltools = logs.application { name = "xmltools", banner = "XMLTools 1.2.1", helpinfo = helpinfo, } local helpinfo = [[ pstopdf PStoPDF 2.0.1 handles exa request file watch folders for conversions (untested) ]] local pstopdf = logs.application { name = "pstopdf", banner = "PStoPDF 2.0.1", helpinfo = helpinfo, } local helpinfo = [[ rlxtools RlxTools 1.0.1 [ manipulatorfile resourselog [ filename ]] local rlxtools = logs.application { name = "rlxtools", banner = "RlxTools 1.0.1", helpinfo = helpinfo, } local helpinfo = [[ imgtopdf ImgToPdf 1.1.2 convert image into pdf level of compression in percent image depth in bits colorspace (rgb,cmyk,gray) quality in percent path where files are looked for path where files end up determine settings automatically ]] local imgtopdf = logs.application { name = "imgtopdf", banner = "ImgToPdf 1.1.2", helpinfo = helpinfo, } local helpinfo = [[ mptopdf convert MetaPost to PDF 1.4.1 use the metafun format to process the file (default is mpost) use texexec (context) to process text snippets use latex to process text snippets ]] local mptopdf = logs.application { name = "mptopdf", banner = "MPtoPDF 1.4.1", helpinfo = helpinfo, } -- texmfstart.rb is normally replaced by mtxrun -- runtools.rb is run from within context -- concheck.rb is run from within editors -- texsync.rb is no longer in the zip -- mpstools.rb is no longer in the zip -- rscortool.rb is only run indirectly -- rsfiltool.rb is only run indirectly -- rslibtool.rb is only run indirectly local application = logs.application { name = "mk-help", banner = "Mk Help generator 1.00", } local filename = environment.files[1] if not filename then application.report("no mk script given") return end local mkapplication if filename == "texmfstart" then mkapplication = texmfstart elseif filename == "luatools" then mkapplication = luatools elseif filename == "texexec" then mkapplication = texexec elseif filename == "texutil" then mkapplication = texutil elseif filename == "ctxtools" then mkapplication = ctxtools elseif filename == "textools" then mkapplication = textools elseif filename == "pdftools" then mkapplication = pdftools elseif filename == "tmftools" then mkapplication = tmftools elseif filename == "xmltools" then mkapplication = xmltools elseif filename == "pstopdf" then mkapplication = pstopdf elseif filename == "rlxtools" then mkapplication = rlxtools elseif filename == "imgtopdf" then mkapplication = imgtopdf elseif filename == "mptopdf" then mkapplication = mptopdf end if not mkapplication then application.report("no valid mk script given") return end if environment.argument("exporthelp") then mkapplication.export(environment.argument("exporthelp"),environment.files[2]) else mkapplication.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-cache.lua0000644000175000017500000000766512161703335025022 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-cache'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-cache ConTeXt & MetaTeX Cache Management 0.10 remove not used files completely remove cache show cache all (not yet implemented) ]] local application = logs.application { name = "mtx-cache", banner = "ConTeXt & MetaTeX Cache Management 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.cache = scripts.cache or { } local function collect(path) local all = dir.glob(path .. "/**/*") local tmas, tmcs, rest = { }, { }, { } for i=1,#all do local name = all[i] local suffix = file.suffix(name) if suffix == "tma" then tmas[#tmas+1] = name elseif suffix == "tmc" then tmcs[#tmcs+1] = name else rest[#rest+1] = name end end return tmas, tmcs, rest, all end local function list(banner,path,tmas,tmcs,rest) report("%s: %s",banner,path) report() report("tma : %4i",#tmas) report("tmc : %4i",#tmcs) report("rest : %4i",#rest) report("total : %4i",#tmas+#tmcs+#rest) report() end local function purge(banner,path,list,all) report("%s: %s",banner,path) report() local n = 0 for i=1,#list do local filename = list[i] if string.find(filename,"luatex%-cache") then -- safeguard if all then os.remove(filename) n = n + 1 else local suffix = file.suffix(filename) if suffix == "tma" then local checkname = file.replacesuffix(filename,"tma","tmc") if lfs.isfile(checkname) then os.remove(filename) n = n + 1 end end end end end report("removed tma files : %i",n) report() return n end function scripts.cache.purge() local writable = caches.getwritablepath() local tmas, tmcs, rest = collect(writable) list("writable path",writable,tmas,tmcs,rest) purge("writable path",writable,tmas) list("writable path",writable,tmas,tmcs,rest) end function scripts.cache.erase() local writable = caches.getwritablepath() local tmas, tmcs, rest, all = collect(writable) list("writable path",writable,tmas,tmcs,rest) purge("writable path",writable,all,true) list("writable path",writable,tmas,tmcs,rest) end function scripts.cache.list() local readables = caches.getreadablepaths() local writable = caches.getwritablepath() local tmas, tmcs, rest = collect(writable) list("writable path",writable,tmas,tmcs,rest) for i=1,#readables do local readable = readables[i] if readable ~= writable then local tmas, tmcs = collect(readable) list("readable path",readable,tmas,tmcs,rest) end end end if environment.argument("purge") then scripts.cache.purge() elseif environment.argument("erase") then scripts.cache.erase() elseif environment.argument("list") then scripts.cache.list() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-update.lua0000644000175000017500000006114412130411274025223 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-update'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This script is dedicated to Mojca Miklavec, who is the driving force behind -- moving minimal generation from our internal machines to the context garden. -- Together with Arthur Reutenauer she made sure that it worked well on all -- platforms that matter. local helpinfo = [[ mtx-update ConTeXt Minimals Updater 0.31 platform (windows, linux, linux-64, osx-intel, osx-ppc, linux-ppc) repository url (rsync://contextgarden.net) repository url (minimals) specify version (current, experimental) specify version (current, latest, beta, yyyy.mm.dd) rsync binary (rsync) installation directory (not guessed for the moment) tex engine (luatex, pdftex, xetex) extra modules (can be list or 'all') additional fonts (can be list or 'all') extra binaries (like scite and texworks) instead of a dryrun, do the real thing update minimal tree also make formats and generate file databases don't delete unused or obsolete files update tree using saved state adapt drive specs to cygwin assume mingw binaries being used ]] local application = logs.application { name = "mtx-update", banner = "ConTeXt Minimals Updater 0.31", helpinfo = helpinfo, } local report = application.report local format, concat, gmatch, gsub, find = string.format, table.concat, string.gmatch, string.gsub, string.find scripts = scripts or { } scripts.update = scripts.update or { } minimals = minimals or { } minimals.config = minimals.config or { } -- this is needed under windows -- else rsync fails to set the right chmod flags to files os.setenv("CYGWIN","nontsec") scripts.update.texformats = { "cont-en", "cont-nl", "cont-cz", "cont-de", "cont-fa", "cont-it", "cont-ro", "cont-uk", "cont-pe", -- "cont-xp", "mptopdf", "plain" } scripts.update.mpformats = { -- "metafun", -- "mpost", } -- experimental is not functional at the moment scripts.update.repositories = { "current", "experimental" } -- more options than just these two are available (no idea why this is here) scripts.update.versions = { "current", "latest" } -- list of basic folders that are needed to make a functional distribution scripts.update.base = { { "base/tex/", "texmf" }, { "base/metapost/", "texmf" }, { "fonts/common/", "texmf" }, { "fonts/other/", "texmf" }, -- not *really* needed, but helpful { "context//", "texmf-context" }, { "misc/setuptex/", "." }, { "misc/web2c", "texmf" }, { "bin/common//", "texmf-" }, { "bin/context//", "texmf-" }, { "bin/metapost//", "texmf-" }, { "bin/man/", "texmf-" }, } -- binaries and font-related files -- for pdftex we don't need OpenType fonts, for LuaTeX/XeTeX we don't need TFM files scripts.update.engines = { ["luatex"] = { { "fonts/new/", "texmf" }, { "bin/luatex//", "texmf-" }, { "bin/luajittex//","texmf-" }, }, ["xetex"] = { { "base/xetex/", "texmf" }, { "fonts/new/", "texmf" }, { "bin/luatex//", "texmf-" }, -- tools { "bin/xetex//", "texmf-" }, }, ["pdftex"] = { { "fonts/old/", "texmf" }, { "bin/luatex//", "texmf-" }, -- tools { "bin/pdftex//", "texmf-" }, }, ["all"] = { { "fonts/new/", "texmf" }, { "fonts/old/", "texmf" }, { "base/xetex/", "texmf" }, { "bin/luatex//", "texmf-" }, { "bin/luajittex//","texmf-" }, { "bin/xetex//", "texmf-" }, { "bin/pdftex//", "texmf-" }, }, } scripts.update.goodies = { ["scite"] = { { "bin//scite/", "texmf-" }, }, ["texworks"] = { { "bin//texworks/", "texmf-" }, }, } scripts.update.platforms = { ["mswin"] = "mswin", ["windows"] = "mswin", ["win32"] = "mswin", ["win"] = "mswin", ["linux"] = "linux", ["freebsd"] = "freebsd", ["freebsd-amd64"] = "freebsd-amd64", ["kfreebsd"] = "kfreebsd-i386", ["kfreebsd-i386"] = "kfreebsd-i386", ["kfreebsd-amd64"] = "kfreebsd-amd64", ["linux-32"] = "linux", ["linux-64"] = "linux-64", ["linux32"] = "linux", ["linux64"] = "linux-64", ["linux-ppc"] = "linux-ppc", ["ppc"] = "linux-ppc", ["osx"] = "osx-intel", ["macosx"] = "osx-intel", ["osx-intel"] = "osx-intel", ["osx-ppc"] = "osx-ppc", ["osx-powerpc"] = "osx-ppc", ["osx-64"] = "osx-64", ["osxintel"] = "osx-intel", ["osxppc"] = "osx-ppc", ["osxpowerpc"] = "osx-ppc", ["solaris-intel"] = "solaris-intel", ["solaris-sparc"] = "solaris-sparc", ["solaris"] = "solaris-sparc", } scripts.update.selfscripts = { "mtxrun", -- "luatools", } -- the list is filled up later (when we know what modules to download) scripts.update.modules = { } scripts.update.fonts = { } function scripts.update.run(str) -- important, otherwise formats fly to a weird place -- (texlua sets luatex as the engine, we need to reset that or to fix texexec :) os.setenv("engine",nil) if environment.argument("force") then report("run, %s",str) os.execute(str) else report("dry run, %s",str) end end function scripts.update.fullpath(path) if file.is_rootbased_path(path) then return path else return lfs.currentdir() .. "/" .. path end end local rsync_variant = "cygwin" -- will be come mingw local function drive(d) if rsync_variant == "cygwin" then d = gsub(d,[[([a-zA-Z]):/]], "/cygdrive/%1/") else d = gsub(d,[[([a-zA-Z]):/]], "/%1/") end return d end function scripts.update.synchronize() report("update, start") local texroot = scripts.update.fullpath(states.get("paths.root")) local engines = states.get('engines') or { } local platforms = states.get('platforms') or { } local repositories = states.get('repositories') -- minimals local bin = states.get("rsync.program") -- rsync local url = states.get("rsync.server") -- contextgarden.net local version = states.get("context.version") -- current (or beta) local modules = states.get("modules") -- modules (third party) local fonts = states.get("fonts") -- fonts (experimental or special) local goodies = states.get("goodies") -- goodies (like editors) local force = environment.argument("force") bin = gsub(bin,"\\","/") if not url:find("::$") then url = url .. "::" end local ok = lfs.attributes(texroot,"mode") == "directory" if not ok and force then dir.mkdirs(texroot) ok = lfs.attributes(texroot,"mode") == "directory" end if force then dir.mkdirs(format("%s/%s", texroot, "texmf-cache")) dir.mkdirs(format("%s/%s", texroot, "texmf-local")) dir.mkdirs(format("%s/%s", texroot, "texmf-project")) dir.mkdirs(format("%s/%s", texroot, "texmf-fonts")) dir.mkdirs(format("%s/%s", texroot, "texmf-modules")) end if ok or not force then local fetched, individual, osplatform = { }, { }, os.platform -- takes a collection as argument and returns a list of folders local function collection_to_list_of_folders(collection, platform) local archives = {} for i=1,#collection do local archive = collection[i][1] archive = gsub(archive,"",platform) archive = gsub(archive,"",version) archives[#archives+1] = archive end return archives end -- takes a list of folders as argument and returns a string for rsync -- sample input: -- {'bin/common', 'bin/context'} -- output: -- 'minimals/current/bin/common minimals/current/bin/context' local function list_of_folders_to_rsync_string(list_of_folders) local repository = 'current' local prefix = format("%s/%s/", states.get('rsync.module'), repository) -- minimals/current/ return prefix .. concat(list_of_folders, format(" %s", prefix)) end -- example of usage: print(list_of_folders_to_rsync_string(collection_to_list_of_folders(scripts.update.base, os.platform))) -- rename function and add some more functionality: -- * recursive/non-recursive (default: non-recursive) -- * filter folders or regular files only (default: no filter) -- * grep for size of included files (with --stats switch) local function get_list_of_files_from_rsync(list_of_folders) -- temporary file to store the output of rsync (could be a more random name; watch for overwrites) local temp_file = "rsync.tmp.txt" -- a set of folders local folders = {} local command = format("%s %s'%s' > %s", bin, url, list_of_folders_to_rsync_string(list_of_folders), temp_file) os.execute(command) -- read output of rsync local data = io.loaddata(temp_file) or "" -- for every line extract the filename for chmod, s in data:gmatch("([d%-][rwx%-]+).-(%S+)[\n\r]") do -- skip "current" folder if s ~= '.' and chmod:len() == 10 then folders[#folders+1] = s end end -- delete the file to which we have put output of rsync os.remove(temp_file) return folders end -- rsync://contextgarden.net/minimals/current/modules/ if modules and type(modules) == "table" then -- fetch the list of available modules from rsync server local available_modules = get_list_of_files_from_rsync({"modules/"}) -- hash of requested modules -- local h = table.tohash(modules:split(",")) local asked = table.copy(modules) asked.all = nil for i=1,#available_modules do local s = available_modules[i] if modules.all or modules[s] then scripts.update.modules[#scripts.update.modules+1] = { format("modules/%s/",s), "texmf-modules" } end asked[s] = nil end if next(asked) then report("skipping unknown modules: %s",table.concat(table.sortedkeys(asked),", ")) end end -- rsync://contextgarden.net/minimals/current/fonts/extra/ if fonts and type(fonts) == "table" then local available_fonts = get_list_of_files_from_rsync({"fonts/extra/"}) local asked = table.copy(fonts) asked.all = nil for i=1,#available_fonts do local s = available_fonts[i] if fonts.all or fonts[s] then scripts.update.fonts[#scripts.update.fonts+1] = { format("fonts/extra/%s/",s), "texmf" } end asked[s] = nil end if next(asked) then report("skipping unknown fonts: %s",table.concat(table.sortedkeys(asked),", ")) end end local function add_collection(collection,platform) if collection and platform then platform = scripts.update.platforms[platform] if platform then for i=1,#collection do local c = collection[i] local archive = gsub(c[1],"",platform) local destination = format("%s/%s", texroot, gsub(c[2],"", platform)) destination = gsub(destination,"\\","/") archive = gsub(archive,"",version) if osplatform == "windows" or osplatform == "mswin" then destination = drive(destination) end individual[#individual+1] = { archive, destination } end end end end for platform, _ in next, platforms do add_collection(scripts.update.base,platform) end for platform, _ in next, platforms do add_collection(scripts.update.modules,platform) end for platform, _ in next, platforms do add_collection(scripts.update.fonts,platform) end for engine, _ in next, engines do for platform, _ in next, platforms do add_collection(scripts.update.engines[engine],platform) end end if goodies and type(goodies) == "table" then for goodie, _ in next, goodies do for platform, _ in next, platforms do add_collection(scripts.update.goodies[goodie],platform) end end end local combined = { } local update_repositories = scripts.update.repositories for i=1,#update_repositories do local repository = update_repositories[i] if repositories[repository] then for _, v in next, individual do local archive, destination = v[1], v[2] local cd = combined[destination] if not cd then cd = { } combined[destination] = cd end cd[#cd+1] = format("%s/%s/%s",states.get('rsync.module'),repository,archive) end end end for destination, archive in next, combined do local archives, command = concat(archive," "), "" local normalflags, deleteflags = states.get("rsync.flags.normal"), "" if os.name == "windows" then normalflags = normalflags .. " -L" -- no symlinks end local dryrunflags = "" if not environment.argument("force") then dryrunflags = "--dry-run" end if (destination:find("texmf$") or destination:find("texmf%-context$") or destination:find("texmf%-modules$")) and (not environment.argument("keep")) then deleteflags = states.get("rsync.flags.delete") end command = format("%s %s %s %s %s'%s' '%s'", bin, normalflags, deleteflags, dryrunflags, url, archives, destination) -- report("running command: %s",command) if not fetched[command] then scripts.update.run(command,true) fetched[command] = command end end local function update_script(script, platform) local bin = gsub(bin,"\\","/") local texroot = gsub(texroot,"\\","/") platform = scripts.update.platforms[platform] if platform then local command if platform == 'mswin' then bin = drive(bin) texroot = drive(texroot) command = format([[%s -t "%s/texmf-context/scripts/context/lua/%s.lua" "%s/texmf-mswin/bin/"]], bin, texroot, script, texroot) else command = format([[%s -tgo --chmod=a+x '%s/texmf-context/scripts/context/lua/%s.lua' '%s/texmf-%s/bin/%s']], bin, texroot, script, texroot, platform, script) end report("updating %s for %s: %s", script, platform, command) scripts.update.run(command) end end for platform, _ in next, platforms do for i=1, #scripts.update.selfscripts do update_script(scripts.update.selfscripts[i],platform) end end else report("no valid texroot: %s",texroot) end if not force then report("use --force to really update files") end resolvers.load_tree(texroot) -- else we operate in the wrong tree -- update filename database for pdftex/xetex scripts.update.run(format('mtxrun --tree="%s" --direct --resolve mktexlsr',texroot)) -- update filename database for luatex scripts.update.run(format('mtxrun --tree="%s" --generate',texroot)) report("update, done") end function table.fromhash(t) local h = { } for k, v in next, t do -- not indexed if v then h[#h+1] = k end end return h end -- make the ConTeXt formats function scripts.update.make() report("make, start") local force = environment.argument("force") local texroot = scripts.update.fullpath(states.get("paths.root")) local engines = states.get('engines') local goodies = states.get('goodies') local platforms = states.get('platforms') local formats = states.get('formats') resolvers.load_tree(texroot) scripts.update.run(format('mtxrun --tree="%s" --direct --resolve mktexlsr',texroot)) scripts.update.run(format('mtxrun --tree="%s" --generate',texroot)) local askedformats = formats local texformats = table.tohash(scripts.update.texformats) local mpformats = table.tohash(scripts.update.mpformats) for k,v in next, texformats do if not askedformats[k] then texformats[k] = nil end end for k,v in next, mpformats do if not askedformats[k] then mpformats[k] = nil end end local formatlist = concat(table.fromhash(texformats), " ") if formatlist ~= "" then for engine in next, engines do if engine == "luatex" then scripts.update.run(format('mtxrun --tree="%s" --script context --autogenerate --make',texroot)) elseif engine == "luajittex" then scripts.update.run(format('mtxrun --tree="%s" --script context --autogenerate --make --engine=luajittex',texroot)) else scripts.update.run(format('mtxrun --tree="%s" --script texexec --make --all --%s %s',texroot,engine,formatlist)) end end end local formatlist = concat(table.fromhash(mpformats), " ") if formatlist ~= "" then scripts.update.run(format('mtxrun --tree="%s" --script texexec --make --all %s',texroot,formatlist)) end if not force then report("make, use --force to really make formats") end scripts.update.run(format('mtxrun --tree="%s" --direct --resolve mktexlsr',texroot)) -- needed for mpost scripts.update.run(format('mtxrun --tree="%s" --generate',texroot)) report("make, done") end scripts.savestate = true if scripts.savestate then states.load("status-of-update.lua") -- tag, value, default, persistent statistics.starttiming(states) states.set("info.version",0.1) -- ok states.set("info.count",(states.get("info.count") or 0) + 1,1,false) -- ok states.set("info.comment","this file contains the settings of the last 'mtxrun --script update' run",false) -- ok states.set("info.date",os.date("!%Y-%m-%d %H:%M:%S")) -- ok states.set("rsync.program", environment.argument("rsync"), "rsync", true) -- ok states.set("rsync.server", environment.argument("server"), "contextgarden.net::", true) -- ok states.set("rsync.module", environment.argument("module"), "minimals", true) -- ok states.set("rsync.flags.normal", environment.argument("flags"), "-rpztlv", true) -- ok states.set("rsync.flags.delete", nil, "--delete", true) -- ok states.set("paths.root", environment.argument("texroot"), "tex", true) -- ok states.set("context.version", environment.argument("context"), "current", true) -- ok local valid = table.tohash(scripts.update.repositories) for r in gmatch(environment.argument("repository") or "current","([^, ]+)") do if valid[r] then states.set("repositories." .. r, true) end end local valid = scripts.update.engines local engine = environment.argument("engine") or "" if engine == "" then local e = states.get("engines") if not e or not next(e) then engine = "all" end end if engine ~= "" then for r in gmatch(engine,"([^, ]+)") do if r == "all" then for k, v in next, valid do if k ~= "all" then states.set("engines." .. k, true) end end break elseif valid[r] then states.set("engines." .. r, true) end end end local valid = scripts.update.platforms for r in gmatch(environment.argument("platform") or os.platform,"([^, ]+)") do if valid[r] then states.set("platforms." .. r, true) end end local valid = table.tohash(scripts.update.texformats) for r in gmatch(environment.argument("formats") or "","([^, ]+)") do if valid[r] then states.set("formats." .. r, true) end end local valid = table.tohash(scripts.update.mpformats) for r in gmatch(environment.argument("formats") or "","([^, ]+)") do if valid[r] then states.set("formats." .. r, true) end end states.set("formats.cont-en", true) states.set("formats.cont-nl", true) states.set("formats.metafun", true) for r in gmatch(environment.argument("extras") or "","([^, ]+)") do -- for old times sake if r ~= "all" and not find(r,"^[a-z]%-") then r = "t-" .. r end states.set("modules." .. r, true) end for r in gmatch(environment.argument("modules") or "","([^, ]+)") do if r ~= "all" and not find(r,"^[a-z]%-") then r = "t-" .. r end states.set("modules." .. r, true) end for r in gmatch(environment.argument("fonts") or "","([^, ]+)") do states.set("fonts." .. r, true) end for r in gmatch(environment.argument("goodies") or "","([^, ]+)") do states.set("goodies." .. r, true) end report("state, loaded") report() end if environment.argument("state") then environment.setargument("update",true) environment.setargument("force",true) environment.setargument("make",true) end if environment.argument("mingw") then rsync_variant = "mingw" elseif environment.argument("cygwin") then rsync_variant = "cygwin" end if environment.argument("update") then scripts.update.synchronize() if environment.argument("make") then scripts.update.make() end elseif environment.argument("make") then scripts.update.make() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end if scripts.savestate then statistics.stoptiming(states) states.set("info.runtime",tonumber(statistics.elapsedtime(states))) if environment.argument("force") then states.save() report("state","saved") end end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-plain.lua0000644000175000017500000001034212161703335025044 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-plain'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- future version will use the texmf-cache/generic/formats/ path -- instead because then we can use some more of the generic context -- initializers ... in that case we will also use the regular database -- instead of kpse here, just like with the font database code (as that -- one also works with kpse runtime) local helpinfo = [[ mtx-plain Plain TeX Runner 1.00 create format file process file format name (default: luatex-plain) engine to use (default: luatex) use luajittex ]] local application = logs.application { name = "mtx-plain", banner = "Plain TeX Runner 1.00", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.plain = scripts.plain or { } local function execute(...) local command = string.format(...) report("running command %a\n",command) os.execute(command) end local function resultof(...) local command = string.format(...) report("running command %a",command) return string.strip(os.resultof(command) or "") end function scripts.plain.make(texengine,texformat) report("generating kpse file database") execute("mktexlsr") -- better play safe and use this one local fmtpathspec = resultof("kpsewhich --var-value=TEXFORMATS --engine=%s",texengine) if fmtpathspec ~= "" then report("using path specification %a",fmtpathspec) fmtpathspec = resultof('kpsewhich -expand-braces="%s"',fmtpathspec) end if fmtpathspec ~= "" then report("using path expansion %a",fmtpathspec) else report("no valid path reported, trying alternative") fmtpathspec = resultof("kpsewhich --show-path=fmt --engine=%s",texengine) if fmtpathspec ~= "" then report("using path expansion %a",fmtpathspec) else report("no valid path reported, falling back to current path") fmtpathspec = "." end end fmtpathspec = string.splitlines(fmtpathspec)[1] or fmtpathspec fmtpathspec = file.splitpath(fmtpathspec) local fmtpath = nil for i=1,#fmtpathspec do local path = fmtpathspec[i] if path ~= "." then dir.makedirs(path) if lfs.isdir(path) and file.is_writable(path) then fmtpath = path break end end end if not fmtpath or fmtpath == "" then fmtpath = "." else lfs.chdir(fmtpath) end execute('%s --ini %s \\dump',texengine,file.addsuffix(texformat,"tex")) report("generating kpse file database") execute("mktexlsr") report("format %a saved on path %a",texformat,fmtpath) end function scripts.plain.run(texengine,texformat,filename) execute('%s --fmt=%s "%s"',texengine,file.removesuffix(texformat),filename) end local texformat = environment.arguments.texformat or environment.arguments.format local texengine = environment.arguments.texengine or environment.arguments.engine if type(texengine) ~= "string" or texengine == "" then texengine = environment.arguments.jit and "luajittex" or"luatex" end if type(texformat) ~= "string" or texformat == "" then texformat = "luatex-plain" end local filename = environment.files[1] if environment.arguments.exporthelp then application.export(environment.arguments.exporthelp,filename) elseif environment.arguments.make then scripts.plain.make(texengine,texformat) elseif filename then scripts.plain.run(texengine,texformat,filename) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-check.lua0000644000175000017500000001773212130411274025022 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-check'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local P, R, S, V, C, CP, CC, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cp, lpeg.Cc, lpeg.match local gsub, sub, format = string.gsub, string.sub, string.format local insert, remove = table.insert, table.remove local helpinfo = [[ mtx-check Basic ConTeXt Syntax Checking 0.10 check tex file for errors ]] local application = logs.application { name = "mtx-check", banner = "Basic ConTeXt Syntax Checking 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.checker = scripts.checker or { } local validator = { } validator.n = 1 validator.errors = { } validator.trace = false validator.direct = false validator.printer = print validator.tracer = print local message = function(position, kind, extra) local ve = validator.errors ve[#ve+1] = { kind, position, validator.n, extra } if validator.direct then position = position or "eof" if extra then validator.printer(format("%s error at position %s (line %s) (%s)",kind,position,validator.n,extra)) else validator.printer(format("%s error at position %s (line %s)",kind,position,validator.n)) end end end local progress = function(position, data, kind) if validator.trace then validator.tracer(format("%s at position %s: %s", kind, position, data or "")) end end local i_m, d_m = P("$"), P("$$") local l_s, r_s = P("["), P("]") local l_g, r_g = P("{"), P("}") local okay = lpeg.P("{[}") + lpeg.P("{]}") local esc = P("\\") local cr = P("\r") local lf = P("\n") local crlf = P("\r\n") local space = S(" \t\f\v") local newline = crlf + cr + lf local line = newline / function() validator.n = validator.n + 1 end local startluacode = P("\\startluacode") local stopluacode = P("\\stopluacode") local somecode = startluacode * (1-stopluacode)^1 * stopluacode local stack = { } local function push(p,s) -- print("start",p,s) insert(stack,{ p, s, validator.n }) end local function pop(p,s) -- print("stop",p,s) local top = remove(stack) if not top then message(p,"missing start") elseif top[2] ~= s then message(p,"missing stop",format("see line %s",top[3])) else -- okay end end local cstoken = R("az","AZ","\127\255") local start = CP() * P("\\start") * C(cstoken^0) / push local stop = CP() * P("\\stop") * C(cstoken^0) / pop local contextgrammar = P { "tokens", ["tokens"] = (V("ignore") + V("start") + V("stop") + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + V("errors") + 1)^0, ["start"] = start, ["stop"] = stop, ["whatever"] = line + esc * 1 + C(P("%") * (1-line)^0), ["grouped"] = l_g * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_g - r_g))^0 * r_g, ["setup"] = l_s * (okay + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_s - r_s))^0 * r_s, ["display"] = d_m * (V("whatever") + V("grouped") + (1 - d_m))^0 * d_m, ["inline"] = i_m * (V("whatever") + V("grouped") + (1 - i_m))^0 * i_m, ["errors"] = V("gerror") + V("serror") + V("derror") + V("ierror"), ["gerror"] = CP() * (l_g + r_g) * CC("grouping error") / message, ["serror"] = CP() * (l_s + r_g) * CC("setup error") / message, ["derror"] = CP() * d_m * CC("display math error") / message, ["ierror"] = CP() * i_m * CC("inline math error") / message, ["ignore"] = somecode, } -- metafun variant local function push(p,s) insert(stack,{ p, s, validator.n }) end local function pop(p,s) local top = remove(stack) if not top then message(p,"missing def") end end local function finish(p) local bot = stack[1] if bot then message(false,format("missing enddef for %s",bot[2]),format("see line %s",bot[3])) end stack = { } end local l_b, r_b = P("["), P("]") local l_g, r_g = P("{"), P("}") local l_p, r_p = P("("), P(")") local start = CP() * C( P("vardef") + P("primarydef") + P("secondarydef") + P("tertiarydef") + P("def") ) / push local stop = CP() * C( P("enddef") ) / pop local dstring = P('"') * (1-P('"'))^0 * P('"') local semicolon = P(";") local separator = line + space + semicolon -- todo: start/stop also in () local metafungrammar = P { "tokens", ["tokens"] = (V("start") + V("stop") + V("string") + V("whatever") + V("braces") + V("brackets") + V("parentheses") + V("errors") + 1)^0 * (CP() / finish), ["start"] = separator * start * #separator, ["stop"] = separator * stop * #separator, ["string"] = dstring, ["whatever"] = line + C(P("%") * (1-line)^0), ["braces"] = l_g * (V("whatever") + V("string") + V("braces") + V("brackets") + V("parentheses") + (1 - l_g - r_g))^0 * r_g, ["brackets"] = l_b * (V("whatever") + V("string") + V("braces") + V("brackets") + V("parentheses") + (1 - l_b - r_b))^0 * r_b, ["parentheses"] = l_p * (V("whatever") + V("string") + V("braces") + V("brackets") + V("parentheses") + (1 - l_p - r_p))^0 * r_p, ["errors"] = V("gerror") + V("berror") + V("perror"), ["gerror"] = CP() * (l_g + r_g) * CC("braces error") / message, ["berror"] = CP() * (l_b + r_b) * CC("brackets error") / message, ["perror"] = CP() * (l_p + r_p) * CC("parentheses error") / message, } local grammars = { mp = metafungrammar, mpii = metafungrammar, mpiv = metafungrammar, tex = contextgrammar, mkii = contextgrammar, mkiv = contextgrammar, } function validator.check(str,filetype) validator.n = 1 validator.errors = { } local grammar = grammars[filetype] or grammars.tex lpegmatch(grammar,str) end --~ str = [[ --~ a{oeps {oe\{\}ps} } --~ test { oeps \} \[\] oeps \setupxxx[oeps=bla]} --~ test $$ \hbox{$ oeps \} \[\] oeps $} $$ --~ {$x\$xx$ $ --~ ]] --~ str = string.rep(str,10) local remapper = { ["\n"] = " ", ["\r"] = " ", ["\t"] = " ", } function scripts.checker.check(filename) local str = io.loaddata(filename) if str then validator.check(str,file.suffix(filename)) local errors = validator.errors if #errors > 0 then for k=1,#errors do local v = errors[k] local kind, position, line, extra = v[1], v[2], v[3], v[4] if not position then position = #str end local data = sub(str,position-30,position+30) data = gsub(data,".", remapper) data = gsub(data,"^ *","") if extra then print(format("% 5i %-10s %s (%s)", line, kind, data, extra)) else print(format("% 5i %-10s %s", line, kind, data)) end end else print("no error") end else print("no file") end end if environment.argument("check") then scripts.checker.check(environment.files[1]) elseif environment.argument("help") then application.help() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) elseif environment.files[1] then scripts.checker.check(environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-scite.lua0000644000175000017500000002211712130411274025045 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-scite'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local P, R, S, C, Ct, Cf, Cc, Cg = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cf, lpeg.Cc, lpeg.Cg local lpegmatch = lpeg.match local format, lower, gmatch = string.format, string.lower, string.gmatch local helpinfo = [[ mtx-scite Scite Helper Script 1.00 convert spell-*.txt into spell-*.lua ]] local application = logs.application { name = "mtx-scite", banner = "Scite Helper Script 1.00", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.scite = scripts.scite or { } -- todo: append to global properties else order of loading problem -- linux problem ... files are under root protection so we need --install -- -- local scitesignals = { "scite-context.rme", "context.properties" } -- local screenfont = "lmtypewriter10-regular.ttf" -- function scripts.scite.start(indeed) -- local usedsignal, datapath, fullname, workname, userpath, fontpath -- if os.type == "windows" then -- workname = "scite.exe" -- userpath = os.getenv("USERPROFILE") or "" -- fontpath = os.getenv("SYSTEMROOT") -- fontpath = (fontpath and file.join(fontpath,"fonts")) or "" -- else -- workname = "scite" -- userpath = os.getenv("HOME") or "" -- fontpath = "" -- end -- local binpaths = file.split_path(os.getenv("PATH")) or file.split_path(os.getenv("path")) -- for i=1,#scitesignals do -- local scitesignal = scitesignals[i] -- local scitepath = resolvers.findfile(scitesignal,"other text files") or "" -- if scitepath ~= "" then -- scitepath = file.dirname(scitepath) -- data -- if scitepath == "" then -- scitepath = resolvers.cleanpath(lfs.currentdir()) -- else -- usedsignal, datapath = scitesignal, scitepath -- break -- end -- end -- end -- if not datapath or datapath == "" then -- report("invalid datapath, maybe you need to regenerate the file database") -- return false -- end -- if not binpaths or #binpaths == 0 then -- report("invalid binpath") -- return false -- end -- for i=1,#binpaths do -- local p = file.join(binpaths[i],workname) -- if lfs.isfile(p) and lfs.attributes(p,"size") > 10000 then -- avoind stub -- fullname = p -- break -- end -- end -- if not fullname then -- report("unable to locate %s",workname) -- return false -- end -- local properties = dir.glob(file.join(datapath,"*.properties")) -- local luafiles = dir.glob(file.join(datapath,"*.lua")) -- local extrafont = resolvers.findfile(screenfont,"truetype font") or "" -- local pragmafound = dir.glob(file.join(datapath,"pragma.properties")) -- if userpath == "" then -- report("unable to figure out userpath") -- return false -- end -- local verbose = environment.argument("verbose") -- local tobecopied, logdata = { }, { } -- local function check_state(fullname,newpath) -- local basename = file.basename(fullname) -- local destination = file.join(newpath,basename) -- local pa, da = lfs.attributes(fullname), lfs.attributes(destination) -- if not da then -- logdata[#logdata+1] = { "new : %s", basename } -- tobecopied[#tobecopied+1] = { fullname, destination } -- elseif pa.modification > da.modification then -- logdata[#logdata+1] = { "outdated : %s", basename } -- tobecopied[#tobecopied+1] = { fullname, destination } -- else -- logdata[#logdata+1] = { "up to date : %s", basename } -- end -- end -- for i=1,#properties do -- check_state(properties[i],userpath) -- end -- for i=1,#luafiles do -- check_state(luafiles[i],userpath) -- end -- if fontpath ~= "" then -- check_state(extrafont,fontpath) -- end -- local userpropfile = "SciTEUser.properties" -- if os.name ~= "windows" then -- userpropfile = "." .. userpropfile -- end -- local fullpropfile = file.join(userpath,userpropfile) -- local userpropdata = io.loaddata(fullpropfile) or "" -- local propfiledone = false -- if pragmafound then -- if userpropdata == "" then -- logdata[#logdata+1] = { "error : no user properties found on '%s'", fullpropfile } -- elseif string.find(userpropdata,"import *pragma") then -- logdata[#logdata+1] = { "up to date : 'import pragma' in '%s'", userpropfile } -- else -- logdata[#logdata+1] = { "yet unset : 'import pragma' in '%s'", userpropfile } -- userproperties = userpropdata .. "\n\nimport pragma\n\n" -- propfiledone = true -- end -- else -- if string.find(userpropdata,"import *context") then -- logdata[#logdata+1] = { "up to date : 'import context' in '%s'", userpropfile } -- else -- logdata[#logdata+1] = { "yet unset : 'import context' in '%s'", userpropfile } -- userproperties = userpropdata .. "\n\nimport context\n\n" -- propfiledone = true -- end -- end -- if not indeed or verbose then -- report("used signal: %s", usedsignal) -- report("data path : %s", datapath) -- report("full name : %s", fullname) -- report("user path : %s", userpath) -- report("extra font : %s", extrafont) -- end -- if #logdata > 0 then -- report("") -- for k=1,#logdata do -- local v = logdata[k] -- report(v[1],v[2]) -- end -- end -- if indeed then -- if #tobecopied > 0 then -- report("warning : copying updated files") -- for i=1,#tobecopied do -- local what = tobecopied[i] -- report("copying : '%s' => '%s'",what[1],what[2]) -- file.copy(what[1],what[2]) -- end -- end -- if propfiledone then -- report("saving : '%s'",userpropfile) -- io.savedata(fullpropfile,userpropdata) -- end -- os.launch(fullname) -- end -- end -- local splitter = (Cf(Ct("") * (Cg(C(R("az","AZ","\127\255")^1) * Cc(true)) + P(1))^1,rawset) )^0 -- -- local function splitwords(words) -- return lpegmatch(splitter,words) -- or just split and tohash -- end local function splitwords(words) local w = { } for s in string.gmatch(words,"[a-zA-Z\127-255]+") do if #s > 2 then -- will become option w[lower(s)] = s end end return w end -- maybe: lowerkey = UpperWhatever function scripts.scite.words() for i=1,#environment.files do local tag = environment.files[i] local tag = string.match(tag,"spell%-(..)%.") or tag local txtname = format("spell-%s.txt",tag) local luaname = format("spell-%s.lua",tag) local lucname = format("spell-%s.luc",tag) if lfs.isfile(txtname) then report("loading %s",txtname) local olddata = io.loaddata(txtname) or "" local words = splitwords(olddata) local min, max, n = 100, 1, 0 for k, v in next, words do local l = #k if l < min then min = l end if l > max then max = l end n = n + 1 end if min > max then min = max end local newdata = { words = words, source = oldname, min = min, max = max, n = n, } report("saving %q, %s words, %s shortest, %s longest",luaname,n,min,max) io.savedata(luaname,table.serialize(newdata,true)) report("compiling %q",lucname) os.execute(format("luac -s -o %s %s",lucname,luaname)) else report("no data file %s",txtname) end end report("you need to move the lua files to lexers/data") end -- if environment.argument("start") then -- scripts.scite.start(true) -- elseif environment.argument("test") then -- scripts.scite.start() -- else -- application.help() -- end if environment.argument("words") then scripts.scite.words() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-timing.lua0000644000175000017500000001640212130411274025225 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-timing'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, gsub, concat = string.format, string.gsub, table.concat local helpinfo = [[ mtx-timing ConTeXt Timing Tools 0.10 make xhtml file launch after conversion remove after launching ]] local application = logs.application { name = "mtx-timing", banner = "ConTeXt Timing Tools 0.10", helpinfo = helpinfo, } local report = application.report dofile(resolvers.findfile("node-snp.lua","tex")) dofile(resolvers.findfile("trac-tim.lua","tex")) dofile(resolvers.findfile("trac-lmx.lua","tex")) local meta = [[ beginfig(%s) ; begingroup ; save p, q, b, h, w ; path p, q, b ; numeric h, w ; linecap := butt ; h := 100 ; w := 800pt ; p := %s ; q := %s ; p := p shifted -llcorner p ; q := q shifted -llcorner q ; q := q xstretched w ; p := p xstretched w ; b := boundingbox (llcorner p -- llcorner p shifted (w,h)) ; draw b withcolor white withpen pencircle scaled 4pt ; draw p withcolor red withpen pencircle scaled 4pt ; draw q withcolor blue withpen pencircle scaled 2pt ; endgroup ; endfig ; ]] local html_graphic = [[

%s (red) %s (blue)

%s   min: %s
  max: %s
  pages: %s
  average: %s

]] local html_menu = [[ %s ]] local directrun = true local what = { "parameters", "nodes" } plugins = plugins or { progress = { } } -- brrr, will become moduledata as well function plugins.progress.make_svg(filename,other) local metadata, menudata, c = { }, { }, 0 metadata[#metadata+1] = 'outputformat := "svg" ;' for i=1,#what do local kind, mdk = what[i], { } menudata[kind] = mdk for n, name in next, plugins.progress[kind](filename) do local first = plugins.progress.path(filename,name) local second = plugins.progress.path(filename,other) c = c + 1 metadata[#metadata+1] = format(meta,c,first,second) mdk[#mdk+1] = { name, c } end end metadata[#metadata+1] = "end ." metadata = concat(metadata,"\n\n") if directrun then dofile(resolvers.findfile("mlib-run.lua","tex")) commands = commands or { } commands.writestatus = report local result = metapost.directrun("metafun","timing data","svg",true,metadata) return menudata, result else local mpname = file.replacesuffix(filename,"mp") io.savedata(mpname,metadata) os.execute(format("mpost --progname=context --mem=metafun.mem %s",mpname)) os.remove(mpname) os.remove(file.removesuffix(filename).."-mpgraph.mpo") -- brr os.remove(file.removesuffix(filename)..".log") -- brr return menudata end end function plugins.progress.makehtml(filename,other,menudata,metadata) local graphics = { } local result = { graphics = graphics } for i=1,#what do local kind, menu = what[i], { } local md = menudata[kind] result[kind] = menu for k=1,#md do local v = md[k] local name, number = v[1], v[2] local min = plugins.progress.bot(filename,name) local max = plugins.progress.top(filename,name) local pages = plugins.progress.pages(filename) local average = math.round(max/pages) if directrun then local data = metadata[number] menu[#menu+1] = format(html_menu,name,name) graphics[#graphics+1] = format(html_graphic,name,name,other,data,min,max,pages,average) else local mpname = file.replacesuffix(filename,number) local data = io.loaddata(mpname) or "" -- data = gsub(data,"[\n\r]*","") data = gsub(data,"<%?xml.->","") menu[#menu+1] = format(html_menu,name,name) graphics[#graphics+1] = format(html_graphic,name,name,other,data,min,max,pages,average) os.remove(mpname) end end end return result end function plugins.progress.valid_file(name) return name and name ~= "" and lfs.isfile(name .. "-luatex-progress.lut") end function plugins.progress.make_lmx_page(name,launch,remove) local filename = name .. "-luatex-progress" local other = "elapsed_time" local template = 'context-timing.lmx' plugins.progress.convert(filename) local menudata, metadata = plugins.progress.make_svg(filename,other) local htmldata = plugins.progress.makehtml(filename,other,menudata,metadata) lmx.htmfile = function(name) return name .. "-timing.xhtml" end lmx.lmxfile = function(name) return resolvers.findfile(name,'tex') end local variables = { ['title-default'] = 'ConTeXt Timing Information', ['title'] = format('ConTeXt Timing Information: %s',file.basename(name)), ['parametersmenu'] = concat(htmldata.parameters, "  "), ['nodesmenu'] = concat(htmldata.nodes, "  "), ['graphics'] = concat(htmldata.graphics, "\n\n"), ['color-background-one'] = lmx.get('color-background-green'), ['color-background-two'] = lmx.get('color-background-blue'), } if launch then local htmfile = lmx.show(template,variables) if remove then os.sleep(1) -- give time to launch os.remove(htmfile) end else lmx.make(template,variables) end end scripts = scripts or { } scripts.timings = scripts.timings or { } function scripts.timings.xhtml(filename) if filename == "" then report("provide filename") elseif not plugins.progress.valid_file(filename) then report("first run context again with the --timing option") else local basename = file.removesuffix(filename) local launch = environment.argument("launch") local remove = environment.argument("remove") plugins.progress.make_lmx_page(basename,launch,remove) end end if environment.argument("xhtml") then scripts.timings.xhtml(environment.files[1] or "") elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-metatex.lua0000644000175000017500000000463612130411274025413 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-metatex'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- future versions will deal with specific variants of metatex local helpinfo = [[ mtx-metatex MetaTeX Process Management 0.10 process (one or more) files (default action) create metatex format(s) ]] local application = logs.application { name = "mtx-metatex", banner = "MetaTeX Process Management 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.metatex = scripts.metatex or { } -- metatex function scripts.metatex.make() environment.make_format("metatex") end function scripts.metatex.run(ctxdata,filename) local filename = environment.files[1] or "" if filename ~= "" then local formatfile, scriptfile = resolvers.locateformat("metatex") if formatfile and scriptfile then local command = string.format("luatex --fmt=%s --lua=%s %s", string.quote(formatfile), string.quote(scriptfile), string.quote(filename)) report("running command: %s",command) os.spawn(command) elseif formatname then report("error, no format found with name: %s",formatname) else report("error, no format found (provide formatname or interface)") end end end function scripts.metatex.timed(action) statistics.timed(action) end if environment.argument("run") then scripts.metatex.timed(scripts.metatex.run) elseif environment.argument("make") then scripts.metatex.timed(scripts.metatex.make) elseif environment.argument("help") then logs.help(messages.help,false) elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) elseif environment.files[1] then scripts.metatex.timed(scripts.metatex.run) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-colors.lua0000644000175000017500000000377312130411274025246 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-colors'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: fc-cache -v en check dirs, or better is: fc-cat -v | grep Directory local helpinfo = [[ mtx-colors ConTeXt Color Management 0.10 show icc table Example mtxrun --script color --table somename ]] local application = logs.application { name = "mtx-colors", banner = "ConTeXt Color Management 0.10", helpinfo = helpinfo, } local report = application.report if not fontloader then fontloader = fontforge end dofile(resolvers.findfile("colo-icc.lua","tex")) scripts = scripts or { } scripts.colors = scripts.colors or { } function scripts.colors.table() local files = environment.files if #files > 0 then for i=1,#files do local profile, okay, message = colors.iccprofile(files[i]) if not okay then report(message) else report(table.serialize(profile,"profile")) end end else report("no file(s) given" ) end end --~ local track = environment.argument("track") --~ if track then trackers.enable(track) end if environment.argument("table") then scripts.colors.table() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-chars.lua0000644000175000017500000003506412130411274025043 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-chars'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- obsolete: --stix convert stix table to math table local helpinfo = [[ mtx-chars MkII Character Table Generators 0.10 generate xetx-*.tex (used by xetex) generate pdfr-def.tex (used by pdftex) generate entities table ]] local application = logs.application { name = "mtx-chars", banner = "MkII Character Table Generators 0.10", helpinfo = helpinfo, } local report = application.report local format, gmatch, upper, lower = string.format, string.gmatch, string.upper, string.lower local tonumber = tonumber local concat = table.concat local utfchar = utf.char scripts = scripts or { } scripts.chars = scripts.chars or { } --~ local banner = [[ --~ -- filename : char-mth.lua --~ -- comment : companion to char-mth.tex (in ConTeXt) --~ -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL --~ -- license : see context related readme files --~ -- comment : generated from data file downloaded from STIX website --~ --~ if not versions then versions = { } end versions['char-mth'] = 1.001 --~ if not characters then characters = { } end --~ ]] --~ --~ function scripts.chars.stixtomkiv(inname,outname) --~ if inname == "" then --~ report("aquiring math data, invalid datafilename") --~ end --~ local f = io.open(inname) --~ if not f then --~ report("aquiring math data, invalid datafile") --~ else --~ report("aquiring math data, processing %s",inname) --~ if not outname or outname == "" then --~ outname = "char-mth.lua" --~ end --~ local classes = { --~ N = "normal", --~ A = "alphabetic", --~ D = "diacritic", --~ P = "punctuation", --~ B = "binary", --~ R = "relation", --~ L = "large", --~ O = "opening", --~ C = "closing", --~ F = "fence" --~ } --~ local valid, done = false, { } --~ local g = io.open(outname,'w') --~ g:write(banner) --~ g:write(format("\ncharacters.math = {\n")) --~ for l in f:lines() do --~ if not valid then --~ valid = l:find("AMS/TeX name") --~ end --~ if valid then --~ local unicode = l:sub(2,6) --~ if unicode:sub(1,1) ~= " " and unicode ~= "" and not done[unicode] then --~ local mathclass, adobename, texname = l:sub(57,57) or "", l:sub(13,36) or "", l:sub(84,109) or "" --~ texname, adobename = texname:gsub("[\\ ]",""), adobename:gsub("[\\ ]","") --~ local t = { } --~ if mathclass ~= "" then t[#t+1] = format("mathclass='%s'", classes[mathclass] or "unknown") end --~ if adobename ~= "" then t[#t+1] = format("adobename='%s'", adobename ) end --~ if texname ~= "" then t[#t+1] = format("texname='%s'" , texname ) end --~ if #t > 0 then --~ g:write(format("\t[0x%s] = { %s },\n",unicode, concat(t,", "))) --~ end --~ done[unicode] = true --~ end --~ end --~ end --~ if not valid then --~ g:write("\t-- The data file is corrupt, invalid or maybe the format has changed.\n") --~ report("aquiring math data, problems with data table") --~ else --~ report("aquiring math data, table saved in %s",outname) --~ end --~ g:write("}\n") --~ g:close() --~ f:close() --~ end --~ end function scripts.chars.stixtomkiv(inname,outname) report("we no longer use this options but use our own tables instead") end local banner_pdf_1 = [[ % filename : pdfr-def.tex % comment : generated by mtxrun --script chars --pdf % author : Hans Hagen, PRAGMA-ADE, Hasselt NL % copyright: PRAGMA ADE / ConTeXt Development Team % license : see context related readme files % ]] local banner_pdf_2 = [[ % \endinput ]] function scripts.chars.makepdfr() local chartable = resolvers.findfile("char-def.lua") or "" if chartable ~= "" then dofile(chartable) if characters and characters.data then local f = io.open("pdfr-def.tex", 'w') if f then f:write(banner_pdf_1) local cd = characters.data local sd = table.sortedkeys(cd) for i=1,#sd do local char = cd[sd[i]] if char.adobename then f:write(format("\\pdfglyphtounicode{%s}{%04X}%%\n",char.adobename,char.unicodeslot)) end end f:write(banner_pdf_2) f:close() end end end end local banner_utf_module = [[ %% filename : %s %% comment : generated by mtxrun --script chars --xtx %% author : Hans Hagen, PRAGMA-ADE, Hasselt NL %% copyright: PRAGMA ADE / ConTeXt Development Team %% license : see context related readme files ]] local banner_utf_mappings = [[ % lc/uc/catcode mappings ]] local banner_utf_patch = [[ % patch needed for turkish \setXTXcharcodes "201C "201C "201C \setXTXcharcodes "201D "201D "201D % patch needed for french \setXTXcharcodes "2019 "2019 "2019 ]] local banner_utf_names = [[ % named characters mapped onto utf (\\char is needed for accents) ]] local banner_utf_classes = [[ % some character classes for xetex; seems to be rather hard coded, these numbers % and also a mix of several classes; here we do linebreaks ]] local banner_utf_finish = [[ \endinput ]] local xtxclasses = { id = 1, ex = 3, is = 3, cm = 256, op = 2, ns = 3, cl = 3, } function scripts.chars.makeencoutf() local chartable = resolvers.findfile("char-def.lua") or "" if chartable ~= "" then dofile(chartable) local function open(name,banner) local f = io.open(name,'w') if f then report("writing '%s'",name) f:write(format(banner_utf_module,name)) f:write(banner) f:write() return f end end local function close(f) f:write(banner_utf_finish) f:close() end local data = characters and characters.data if data then local list = table.sortedkeys(characters.data) local f = open("xetx-utf.tex",banner_utf_mappings) if f then for i=1,#list do local code = list[i] if code <= 0xFFFF then local chr = data[code] local cc = chr.category if cc == 'll' or cc == 'lu' or cc == 'lt' then if not chr.lccode then chr.lccode = code end if not chr.uccode then chr.uccode = code end f:write(format('\\setXTXcharcodes "%05X "%05X "%05X %% %s\n',code,chr.lccode,chr.uccode,chr.description)) end end end f:write("\n") for i=1,#list do local code = list[i] local chr = data[code] if chr and chr.range then local cc = chr.category if cc == 'lo' then f:write(format('\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharcodes\\recurselevel\\recurselevel\\recurselevel}\n',code,chr.range)) end end end f:write(banner_utf_patch) close(f) end local f = open("xetx-chr.tex",banner_utf_names) if f then local length = 0 for i=1,#list do local code = list[i] if code > 0x5B and code <= 0xFFFF then local chr = data[code] if chr and #(chr.contextname or "") > length then length = #chr.contextname end end end local template = "\\def\\%-".. length .. "s{\\char\"%05X } %% %s: %s\n" for i=1,#list do local code = list[i] if code > 0x5B and code <= 0xFFFF then local chr = data[code] if chr and chr.contextname then local ch = utfchar(code) f:write(format(template, chr.contextname, code, chr.description, ch)) end end end close(f) end local f = open("xetx-cls.tex",banner_utf_classes) if f then for k, v in next, xtxclasses do f:write(format("\\defineXTXcharinjectionclass[lb:%s]\n",k)) end f:write("\n") local i_first, i_last, i_clb = nil, nil, nil local function flush() if i_first then if i_first == i_last then f:write(format('\\dosetXTXcharacterclass{"%05X}{lb:%s}\n',i_first,i_clb)) else f:write(format('\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharacterclass\\fastrecursecounter{lb:%s}}\n',i_first,i_last,i_clb)) end end i_first, i_last, i_clb = nil, nil, nil end for i=1,#list do local code = list[i] local code_next = list[i+1] local chr = data[code] local chr_next = data[code_next] local clb = chr and chr.linebreak local lbc = xtxclasses[clb] if not lbc then flush() elseif clb == i_clb then if i_first then i_last = code else i_first, i_last, i_clb = code, code, clb end else flush() i_first, i_last, i_clb = code, code, clb end end flush() f:write("\n") for i=1,#list do local code = list[i] local chr = data[code] if chr and chr.range then local lbc = chr.linebreak if xtxclasses[lbc] then f:write(format('\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharacterclass\\fastrecursecounter{lb:%s}}\n',code,chr.range,lbc)) end end end close(f) end end end end local entityfiles = { "http://www.w3.org/2003/entities/2007/w3centities-f.ent", "http://www.w3.org/2003/entities/2007/htmlmathml-f.ent", } function scripts.chars.xmlentities() local done = { } local entities = { "local entities = utilities.storage.allocate {" } for i=1,#entityfiles do local f = entityfiles[i] local s = url.hashed(f) local b = file.basename(s.path) local n = resolvers.findfile(b) local data = io.loaddata(n) for name, value in gmatch(data,'') do if not done[name] then done[name] = true local str, hex local low = lower(name) if name == "newline" then -- let's forget about that one elseif name == "lt" then str, hex = "<", format("%s %05X",hex,c) elseif name == "gt" then str, hex = ">", format("%s %05X",hex,c) elseif name == "amp" then str, hex = "&", format("%s %05X",hex,c) else for t, c in gmatch(value,"&#([x]*)([^;]+);") do if t == "x" then c = tonumber(c,16) else c = tonumber(c) end if str then str, hex = str .. utfchar(c), format("%s %05X",hex,c) else str, hex = utfchar(c), format("U+%05X",c) end end end if str and hex then entities[#entities+1] = format(' ["%s"] = %q, -- %s',name,str,hex) end end end end entities[#entities+1] = "}" io.savedata("xmlentities.tmp",concat(entities,"\n")) end if environment.argument("stix") then local inname = environment.files[1] or "" local outname = environment.files[2] or "" scripts.chars.stixtomkiv(inname,outname) elseif environment.argument("entities") then scripts.chars.xmlentities() elseif environment.argument("xtx") then scripts.chars.makeencoutf() elseif environment.argument("pdf") then scripts.chars.makepdfr() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end -- local http = require("socket.http") -- local ltn12 = require("ltn12") -- -- local t = { } -- local status, message = http.request { -- url = f, -- sink = ltn12.sink.table(t) -- } -- -- local template = [[ -- -- -- -- -- This is just a placeholder. -- ]] -- -- local e = string.format(template,io.loaddata(n)) -- local x = xml.convert(e, { utfize_entities = true } ) -- local entities = x.entities context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-context.lua0000644000175000017500000014776112161703335025445 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-context'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: more local functions -- todo: pass jobticket/ctxdata table around local type, next, tostring, tonumber = type, next, tostring, tonumber local format, gmatch, match, gsub, find = string.format, string.gmatch, string.match, string.gsub, string.find local quote, validstring = string.quote, string.valid local concat = table.concat local settings_to_array = utilities.parsers.settings_to_array local appendtable = table.append local lpegpatterns, lpegmatch, Cs, P = lpeg.patterns, lpeg.match, lpeg.Cs, lpeg.P local getargument = environment.getargument or environment.argument local setargument = environment.setargument local application = logs.application { name = "mtx-context", banner = "ConTeXt Process Management 0.60", -- helpinfo = helpinfo, -- table with { category_a = text_1, category_b = text_2 } or helpstring or xml_blob helpinfo = "mtx-context.xml", } -- local luatexflags = { -- ["8bit"] = true, -- ignored, input is assumed to be in UTF-8 encoding -- ["default-translate-file"] = true, -- ignored, input is assumed to be in UTF-8 encoding -- ["translate-file"] = true, -- ignored, input is assumed to be in UTF-8 encoding -- ["etex"] = true, -- ignored, the etex extensions are always active -- -- ["credits"] = true, -- display credits and exit -- ["debug-format"] = true, -- enable format debugging -- ["disable-write18"] = true, -- disable \write18{SHELL COMMAND} -- ["draftmode"] = true, -- switch on draft mode (generates no output PDF) -- ["enable-write18"] = true, -- enable \write18{SHELL COMMAND} -- ["file-line-error"] = true, -- enable file:line:error style messages -- ["file-line-error-style"] = true, -- aliases of --file-line-error -- ["no-file-line-error"] = true, -- disable file:line:error style messages -- ["no-file-line-error-style"] = true, -- aliases of --no-file-line-error -- ["fmt"] = true, -- load the format file FORMAT -- ["halt-on-error"] = true, -- stop processing at the first error -- ["help"] = true, -- display help and exit -- ["ini"] = true, -- be iniluatex, for dumping formats -- ["interaction"] = true, -- set interaction mode (STRING=batchmode/nonstopmode/scrollmode/errorstopmode) -- ["jobname"] = true, -- set the job name to STRING -- ["kpathsea-debug"] = true, -- set path searching debugging flags according to the bits of NUMBER -- ["lua"] = true, -- load and execute a lua initialization script -- ["mktex"] = true, -- enable mktexFMT generation (FMT=tex/tfm) -- ["no-mktex"] = true, -- disable mktexFMT generation (FMT=tex/tfm) -- ["nosocket"] = true, -- disable the lua socket library -- ["output-comment"] = true, -- use STRING for DVI file comment instead of date (no effect for PDF) -- ["output-directory"] = true, -- use existing DIR as the directory to write files in -- ["output-format"] = true, -- use FORMAT for job output; FORMAT is 'dvi' or 'pdf' -- ["parse-first-line"] = true, -- enable parsing of the first line of the input file -- ["no-parse-first-line"] = true, -- disable parsing of the first line of the input file -- ["progname"] = true, -- set the program name to STRING -- ["recorder"] = true, -- enable filename recorder -- ["safer"] = true, -- disable easily exploitable lua commands -- ["shell-escape"] = true, -- enable \write18{SHELL COMMAND} -- ["no-shell-escape"] = true, -- disable \write18{SHELL COMMAND} -- ["shell-restricted"] = true, -- restrict \write18 to a list of commands given in texmf.cnf -- ["synctex"] = true, -- enable synctex -- ["version"] = true, -- display version and exit -- ["luaonly"] = true, -- run a lua file, then exit -- ["luaconly"] = true, -- byte-compile a lua file, then exit -- ["jiton"] = false, -- } local report = application.report scripts = scripts or { } scripts.context = scripts.context or { } -- for the moment here if getargument("jit") or getargument("jiton") then -- bonus shortcut, we assume than --jit also indicates the engine -- although --jit and --engine=luajittex are independent setargument("engine","luajittex") end local engine_new = getargument("engine") or directives.value("system.engine") local engine_old = environment.ownbin local function restart(engine_old,engine_new) local command = format("%s --luaonly %q %s --redirected",engine_new,environment.ownname,environment.reconstructcommandline()) report(format("redirect %s -> %s: %s",engine_old,engine_new,command)) local result = os.execute(command) os.exit(result) end if getargument("redirected") then setargument("engine",engine_old) -- later on we need this elseif engine_new == engine_old then setargument("engine",engine_new) -- later on we need this elseif environment.validengines[engine_new] and engine_new ~= environment.basicengines[engine_old] then restart(engine_old,engine_new) else setargument("engine",engine_new) -- later on we need this end -- so far -- constants local usedfiles = { nop = "cont-nop.mkiv", yes = "cont-yes.mkiv", } local usedsuffixes = { before = { "tuc" }, after = { "pdf", "tuc", "log" }, keep = { "log" }, } local formatofinterface = { en = "cont-en", uk = "cont-uk", de = "cont-de", fr = "cont-fr", nl = "cont-nl", cs = "cont-cs", it = "cont-it", ro = "cont-ro", pe = "cont-pe", } local defaultformats = { "cont-en", "cont-nl", } -- process information local ctxrunner = { } -- namespace will go local ctx_locations = { '..', '../..' } function ctxrunner.new() return { ctxname = "", jobname = "", flags = { }, } end function ctxrunner.checkfile(ctxdata,ctxname,defaultname) if not ctxdata.jobname or ctxdata.jobname == "" then return end ctxdata.ctxname = ctxname or file.removesuffix(ctxdata.jobname) or "" if ctxdata.ctxname == "" then return end ctxdata.jobname = file.addsuffix(ctxdata.jobname,'tex') ctxdata.ctxname = file.addsuffix(ctxdata.ctxname,'ctx') report("jobname: %s",ctxdata.jobname) report("ctxname: %s",ctxdata.ctxname) -- mtxrun should resolve kpse: and file: local usedname = ctxdata.ctxname local found = lfs.isfile(usedname) -- no further test if qualified path if not found then for _, path in next, ctx_locations do local fullname = file.join(path,ctxdata.ctxname) if lfs.isfile(fullname) then usedname = fullname found = true break end end end if not found then usedname = resolvers.findfile(ctxdata.ctxname,"tex") found = usedname ~= "" end if not found and defaultname and defaultname ~= "" and lfs.isfile(defaultname) then usedname = defaultname found = true end if not found then return end local xmldata = xml.load(usedname) if not xmldata then return else -- test for valid, can be text file end local ctxpaths = table.append({'.', file.dirname(ctxdata.ctxname)}, ctx_locations) xml.include(xmldata,'ctx:include','name', ctxpaths) local flags = ctxdata.flags for e in xml.collected(xmldata,"/ctx:job/ctx:flags/ctx:flag") do local flag = xml.text(e) or "" local key, value = match(flag,"^(.-)=(.+)$") if key and value then flags[key] = value else flags[flag] = true end end end function ctxrunner.checkflags(ctxdata) if ctxdata then for k,v in next, ctxdata.flags do if getargument(k) == nil then setargument(k,v) end end end end -- multipass control local multipass_suffixes = { ".tuc" } local multipass_nofruns = 8 -- or 7 to test oscillation local function multipass_hashfiles(jobname) local hash = { } for i=1,#multipass_suffixes do local suffix = multipass_suffixes[i] local full = jobname .. suffix hash[full] = md5.hex(io.loaddata(full) or "unknown") end return hash end local function multipass_changed(oldhash, newhash) for k,v in next, oldhash do if v ~= newhash[k] then return true end end return false end local function multipass_copyluafile(jobname) local tuaname, tucname = jobname..".tua", jobname..".tuc" if lfs.isfile(tuaname) then os.remove(tucname) os.rename(tuaname,tucname) end end -- local pattern = lpegpatterns.utfbom^-1 * (P("%% ") + P("% ")) * Cs((1-lpegpatterns.newline)^1) local function preamble_analyze(filename) -- only files on current path local t = { } local line = io.loadlines(file.addsuffix(filename,"tex")) if line then local preamble = lpegmatch(pattern,line) if preamble then for key, value in gmatch(preamble,"(%S+)%s*=%s*(%S+)") do t[key] = value end t.type = "tex" elseif find(line,"^ 0 then -- the list of given files is processed using the stub file mainfile = usedfiles.yes filelist = files files = { } else return end -- local interface = validstring(getargument("interface")) or "en" local formatname = formatofinterface[interface] or "cont-en" local formatfile, scriptfile = resolvers.locateformat(formatname) -- regular engine ! if not formatfile or not scriptfile then report("warning: no format found, forcing remake (commandline driven)") scripts.context.make(formatname) formatfile, scriptfile = resolvers.locateformat(formatname) -- variant end if formatfile and scriptfile then -- okay elseif formatname then report("error, no format found with name: %s, aborting",formatname) return else report("error, no format found (provide formatname or interface)") return end -- local a_mkii = getargument("mkii") or getargument("pdftex") or getargument("xetex") local a_purge = getargument("purge") local a_purgeall = getargument("purgeall") local a_purgeresult = getargument("purgeresult") local a_global = getargument("global") local a_timing = getargument("timing") local a_profile = getargument("profile") local a_batchmode = getargument("batchmode") local a_nonstopmode = getargument("nonstopmode") local a_once = getargument("once") local a_synctex = getargument("synctex") local a_backend = getargument("backend") local a_arrange = getargument("arrange") local a_noarrange = getargument("noarrange") local a_jiton = getargument("jiton") local a_texformat = getargument("texformat") -- a_batchmode = (a_batchmode and "batchmode") or (a_nonstopmode and "nonstopmode") or nil a_synctex = tonumber(a_synctex) or (toboolean(a_synctex,true) and 1) or (a_synctex == "zipped" and 1) or (a_synctex == "unzipped" and -1) or nil -- for i=1,#filelist do -- local filename = filelist[i] local basename = file.basename(filename) -- use splitter local pathname = file.dirname(filename) -- if pathname == "" and not a_global and filename ~= usedfiles.nop then filename = "./" .. filename if not lfs.isfile(filename) then report("warning: no (local) file %a, proceeding",filename) end end -- local jobname = file.removesuffix(basename) -- local jobname = file.removesuffix(filename) local ctxname = ctxdata and ctxdata.ctxname -- local analysis = preamble_analyze(filename) -- if a_mkii or analysis.engine == 'pdftex' or analysis.engine == 'xetex' then run_texexec(filename,a_purge,a_purgeall) elseif plain_format(a_texformat or analysis.texformat) then run_plain(a_texformat or analysis.texformat,filename) else if analysis.interface and analysis.interface ~= interface then formatname = formatofinterface[analysis.interface] or formatname formatfile, scriptfile = resolvers.locateformat(formatname) end -- a_jiton = (a_jiton or toboolean(analysis.jiton,true)) and true or nil -- if not formatfile or not scriptfile then report("warning: no format found, forcing remake (source driven)") scripts.context.make(formatname,a_engine) formatfile, scriptfile = resolvers.locateformat(formatname) end if formatfile and scriptfile then local suffix = validstring(getargument("suffix")) local resultname = validstring(getargument("result")) if suffix then resultname = file.removesuffix(jobname) .. suffix end local oldbase = "" local newbase = "" if resultname then oldbase = file.removesuffix(jobname) newbase = file.removesuffix(resultname) if oldbase ~= newbase then if a_purgeresult then result_push_purge(oldbase,newbase) else result_push_keep(oldbase,newbase) end else resultname = nil end end -- local pdfview = getargument("autopdf") or getargument("closepdf") if pdfview then pdf_close(filename,pdfview) if resultname then pdf_close(resultname,pdfview) end end -- -- we could do this when locating the format and exit from luatex when -- there is a version mismatch .. that way we can use stock luatex -- plus mtxrun to run luajittex instead .. this saves a restart but is -- also cleaner as then mtxrun only has to check for a special return -- code (signaling a make + rerun) .. maybe some day -- local okay = statistics.checkfmtstatus(formatfile,a_engine) if okay ~= true then report("warning: %s, forcing remake",tostring(okay)) scripts.context.make(formatname) end -- local oldhash = multipass_hashfiles(jobname) local newhash = { } local maxnofruns = once and 1 or multipass_nofruns -- local c_flags = { directives = validstring(environment.directives), -- gets passed via mtxrun trackers = validstring(environment.trackers), -- gets passed via mtxrun experiments = validstring(environment.experiments), -- gets passed via mtxrun -- result = validstring(resultname), input = validstring(getargument("input") or filename), -- alternative input fulljobname = validstring(filename), files = concat(files,","), ctx = validstring(ctxname), } -- for k, v in next, environment.arguments do -- the raw arguments if c_flags[k] == nil then c_flags[k] = v end end -- -- local l_flags = { ["interaction"] = a_batchmode, ["synctex"] = a_synctex, ["no-parse-first-line"] = true, -- ["no-mktex"] = true, -- ["file-line-error-style"] = true, ["fmt"] = formatfile, ["lua"] = scriptfile, ["jobname"] = jobname, ["jiton"] = a_jiton, } -- if a_synctex then report("warning: synctex is enabled") -- can add upto 5% runtime end -- if not a_timing then -- okay elseif c_flags.usemodule then c_flags.usemodule = format("timing,%s",c_flags.usemodule) else c_flags.usemodule = "timing" end -- if not a_profile then -- okay elseif c_flags.directives then c_flags.directives = format("system.profile,%s",c_flags.directives) else c_flags.directives = "system.profile" end -- -- kindofrun: 1:first run, 2:successive run, 3:once, 4:last of maxruns -- for currentrun=1,maxnofruns do -- c_flags.final = false c_flags.kindofrun = (a_once and 3) or (currentrun==1 and 1) or (currentrun==maxnofruns and 4) or 2 c_flags.maxnofruns = maxnofruns c_flags.currentrun = currentrun c_flags.noarrange = a_noarrange or a_arrange or nil -- local command = luatex_command(l_flags,c_flags,mainfile,a_engine) -- report("run %s: %s",i,command) print("") -- cleaner, else continuation on same line local returncode, errorstring = os.spawn(command) if not returncode then report("fatal error: no return code, message: %s",errorstring or "?") if resultname then result_save_error(oldbase,newbase) end os.exit(1) break elseif returncode == 0 then multipass_copyluafile(jobname) newhash = multipass_hashfiles(jobname) if multipass_changed(oldhash,newhash) then oldhash = newhash else break end else report("fatal error: return code: %s",returncode or "?") if resultname then result_save_error(oldbase,newbase) end os.exit(1) -- (returncode) break end -- end -- if a_arrange then -- c_flags.final = true c_flags.kindofrun = 3 c_flags.currentrun = c_flags.currentrun + 1 c_flags.noarrange = nil -- local command = luatex_command(l_flags,c_flags,mainfile,a_engine) -- report("arrange run: %s",command) local returncode, errorstring = os.spawn(command) if not returncode then report("fatal error: no return code, message: %s",errorstring or "?") os.exit(1) elseif returncode > 0 then report("fatal error: return code: %s",returncode or "?") os.exit(returncode) end -- end -- if a_purge then scripts.context.purge_job(jobname) elseif a_purgeall then scripts.context.purge_job(jobname,true) end -- if resultname then if a_purgeresult then -- so, if there is no result then we don't get the old one, but -- related files (log etc) are still there for tracing purposes result_save_purge(oldbase,newbase) else result_save_keep(oldbase,newbase) end report("result renamed to: %s",newbase) end -- if purge then scripts.context.purge_job(resultname) elseif purgeall then scripts.context.purge_job(resultname,true) end -- local pdfview = getargument("autopdf") if pdfview then pdf_open(resultname or jobname,pdfview) end -- if a_timing then report() report("you can process (timing) statistics with:",jobname) report() report("context --extra=timing '%s'",jobname) report("mtxrun --script timing --xhtml [--launch --remove] '%s'",jobname) report() end else if formatname then report("error, no format found with name: %s, skipping",formatname) else report("error, no format found (provide formatname or interface)") end break end end end -- end function scripts.context.pipe() -- still used? -- context --pipe -- context --pipe --purge --dummyfile=whatever.tmp local interface = getargument("interface") interface = (type(interface) == "string" and interface) or "en" local formatname = formatofinterface[interface] or "cont-en" local formatfile, scriptfile = resolvers.locateformat(formatname) if not formatfile or not scriptfile then report("warning: no format found, forcing remake (commandline driven)") scripts.context.make(formatname) formatfile, scriptfile = resolvers.locateformat(formatname) end if formatfile and scriptfile then local okay = statistics.checkfmtstatus(formatfile) if okay ~= true then report("warning: %s, forcing remake",tostring(okay)) scripts.context.make(formatname) end local l_flags = { interaction = "scrollmode", fmt = formatfile, lua = scriptfile, } local c_flags = { backend = "pdf", final = false, kindofrun = 3, currentrun = 1, } local filename = getargument("dummyfile") or "" if filename == "" then filename = "\\relax" report("entering scrollmode, end job with \\end") else filename = file.addsuffix(filename,"tmp") io.savedata(filename,"\\relax") report("entering scrollmode using '%s' with optionfile, end job with \\end",filename) end local command = luatex_command(l_flags,c_flags,filename) os.spawn(command) if getargument("purge") then scripts.context.purge_job(filename) elseif getargument("purgeall") then scripts.context.purge_job(filename,true) os.remove(filename) end else if formatname then report("error, no format found with name: %s, aborting",formatname) else report("error, no format found (provide formatname or interface)") end end end local function make_mkiv_format(name,engine) environment.make_format(name) -- jit is picked up later end local function make_mkii_format(name,engine) local command = format("mtxrun texexec.rb --make --%s %s",name,engine) report("running command: %s",command) os.spawn(command) end function scripts.context.generate() resolvers.instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() end function scripts.context.make(name) if not getargument("fast") then -- as in texexec scripts.context.generate() end local list = (name and { name }) or (environment.files[1] and environment.files) or defaultformats local engine = getargument("engine") or "luatex" if getargument("jit") or getargument("jiton") then engine = "luajittex" end for i=1,#list do local name = list[i] name = formatofinterface[name] or name or "" if name == "" then -- nothing elseif engine == "luatex" or engine == "luajittex" then make_mkiv_format(name,engine) elseif engine == "pdftex" or engine == "xetex" then make_mkii_format(name,engine) end end end function scripts.context.ctx() local ctxdata = ctxrunner.new() ctxdata.jobname = environment.files[1] ctxrunner.checkfile(ctxdata,getargument("ctx")) ctxrunner.checkflags(ctxdata) scripts.context.run(ctxdata) end function scripts.context.autoctx() local ctxdata = nil local files = environment.files local firstfile = #files > 0 and files[1] if firstfile then local suffix = file.suffix(firstfile) if suffix == "xml" then local chunk = io.loadchunk(firstfile) -- 1024 if chunk then local ctxname = match(chunk,"<%?context%-directive%s+job%s+ctxfile%s+([^ ]-)%s*?>") if ctxname then ctxdata = ctxrunner.new() ctxdata.jobname = firstfile ctxrunner.checkfile(ctxdata,ctxname) ctxrunner.checkflags(ctxdata) end end elseif suffix == "tex" then -- maybe but we scan the preamble later too end end scripts.context.run(ctxdata) end -- no longer ok as mlib-run misses something: -- local template = [[ -- \starttext -- \directMPgraphic{%s}{input "%s"} -- \stoptext -- ]] -- -- local loaded = false -- -- function scripts.context.metapost() -- local filename = environment.files[1] or "" -- if not loaded then -- dofile(resolvers.findfile("mlib-run.lua")) -- loaded = true -- commands = commands or { } -- commands.writestatus = report -- no longer needed -- end -- local formatname = getargument("format") or "metafun" -- if formatname == "" or type(formatname) == "boolean" then -- formatname = "metafun" -- end -- if getargument("pdf") then -- local basename = file.removesuffix(filename) -- local resultname = getargument("result") or basename -- local jobname = "mtx-context-metapost" -- local tempname = file.addsuffix(jobname,"tex") -- io.savedata(tempname,format(template,"metafun",filename)) -- environment.files[1] = tempname -- setargument("result",resultname) -- setargument("once",true) -- scripts.context.run() -- scripts.context.purge_job(jobname,true) -- scripts.context.purge_job(resultname,true) -- elseif getargument("svg") then -- metapost.directrun(formatname,filename,"svg") -- else -- metapost.directrun(formatname,filename,"mps") -- end -- end -- -- function scripts.context.version() local name = resolvers.findfile("context.mkiv") if name ~= "" then report("main context file: %s",name) local data = io.loaddata(name) if data then local version = match(data,"\\edef\\contextversion{(.-)}") if version then report("current version: %s",version) else report("context version: unknown, no timestamp found") end else report("context version: unknown, load error") end else report("main context file: unknown, 'context.mkiv' not found") end end -- purging files local generic_files = { "texexec.tex", "texexec.tui", "texexec.tuo", "texexec.tuc", "texexec.tua", "texexec.ps", "texexec.pdf", "texexec.dvi", "cont-opt.tex", "cont-opt.bak" } local obsolete_results = { "dvi", } local temporary_runfiles = { "tui", "tua", "tup", "ted", "tes", "top", "log", "tmp", "run", "bck", "rlg", "mpt", "mpx", "mpd", "mpo", "mpb", "ctl", "synctex", "synctex.gz", "pgf", "prep", } local persistent_runfiles = { "tuo", "tub", "top", "tuc" } local special_runfiles = { "-mpgraph", "-mprun", "-temp-" } local function purge_file(dfile,cfile) if cfile and lfs.isfile(cfile) then if os.remove(dfile) then return file.basename(dfile) end elseif dfile then if os.remove(dfile) then return file.basename(dfile) end end end function scripts.context.purge_job(jobname,all,mkiitoo) if jobname and jobname ~= "" then jobname = file.basename(jobname) local filebase = file.removesuffix(jobname) if mkiitoo then scripts.context.purge(all,filebase,true) -- leading "./" else local deleted = { } for i=1,#obsolete_results do deleted[#deleted+1] = purge_file(filebase.."."..obsolete_results[i],filebase..".pdf") end for i=1,#temporary_runfiles do deleted[#deleted+1] = purge_file(filebase.."."..temporary_runfiles[i]) end if all then for i=1,#persistent_runfiles do deleted[#deleted+1] = purge_file(filebase.."."..persistent_runfiles[i]) end end if #deleted > 0 then report("purged files: %s", concat(deleted,", ")) end end end end function scripts.context.purge(all,pattern,mkiitoo) local all = all or getargument("all") local pattern = getargument("pattern") or (pattern and (pattern.."*")) or "*.*" local files = dir.glob(pattern) local obsolete = table.tohash(obsolete_results) local temporary = table.tohash(temporary_runfiles) local persistent = table.tohash(persistent_runfiles) local generic = table.tohash(generic_files) local deleted = { } for i=1,#files do local name = files[i] local suffix = file.suffix(name) local basename = file.basename(name) if obsolete[suffix] or temporary[suffix] or persistent[suffix] or generic[basename] then deleted[#deleted+1] = purge_file(name) elseif mkiitoo then for i=1,#special_runfiles do if find(name,special_runfiles[i]) then deleted[#deleted+1] = purge_file(name) end end end end if #deleted > 0 then report("purged files: %s", concat(deleted,", ")) end end -- touching files (signals regeneration of formats) local function touch(path,name,versionpattern,kind,kindpattern) if path and path ~= "" then name = file.join(path,name) print(name) else name = resolvers.findfile(name) end local olddata = io.loaddata(name) if olddata then local oldkind, newkind = "", kind or "" local oldversion, newversion = "", os.date("%Y.%m.%d %H:%M") local newdata if versionpattern then newdata = gsub(olddata,versionpattern,function(pre,mid,post) oldversion = mid return pre .. newversion .. post end) or olddata end if kind and kindpattern then newdata = gsub(newdata,kindpattern,function(pre,mid,post) oldkind = mid return pre .. newkind .. post end) or newdata end if newdata ~= "" and (oldversion ~= newversion or oldkind ~= newkind or newdata ~= olddata) then local backup = file.replacesuffix(name,"tmp") os.remove(backup) os.rename(name,backup) io.savedata(name,newdata) return name, oldversion, newversion, oldkind, newkind end end end local p_contextkind = "(\\edef\\contextkind%s*{)(.-)(})" local p_contextversion = "(\\edef\\contextversion%s*{)(.-)(})" local p_newcontextversion = "(\\newcontextversion%s*{)(.-)(})" local function touchfiles(suffix,kind,path) local foundname, oldversion, newversion, oldkind, newkind = touch(path,file.addsuffix("context",suffix),p_contextversion,kind,p_contextkind) if foundname then report("old version : %s (%s)",oldversion,oldkind) report("new version : %s (%s)",newversion,newkind) report("touched file : %s",foundname) local foundname = touch(path,file.addsuffix("cont-new",suffix),p_newcontextversion) if foundname then report("touched file : %s", foundname) end else report("nothing touched") end end function scripts.context.touch() if getargument("expert") then local touch = getargument("touch") local kind = getargument("kind") local path = getargument("basepath") if touch == "mkii" or touch == "mkiv" or touch == "mkvi" then -- mkix mkxi touchfiles(touch,kind,path) else touchfiles("mkii",kind,path) touchfiles("mkiv",kind,path) touchfiles("mkvi",kind,path) end else report("touching needs --expert") end end -- modules local labels = { "title", "comment", "status" } local cards = { "*.mkvi", "*.mkiv", "*.mkxi", "*.mkix", "*.tex" } function scripts.context.modules(pattern) local list = { } local found = resolvers.findfile("context.mkiv") if not pattern or pattern == "" then -- official files in the tree for i=1,#cards do resolvers.findwildcardfiles(cards[i],list) end -- my dev path for i=1,#cards do dir.glob(file.join(file.dirname(found),cards[i]),list) end else resolvers.findwildcardfiles(pattern,list) dir.glob(file.join(file.dirname(found,pattern)),list) end local done = { } -- todo : sort for i=1,#list do local v = list[i] local base = file.basename(v) if not done[base] then done[base] = true local suffix = file.suffix(base) if suffix == "tex" or suffix == "mkiv" or suffix == "mkvi" or suffix == "mkix" or suffix == "mkxi" then local prefix = match(base,"^([xmst])%-") if prefix then v = resolvers.findfile(base) -- so that files on my dev path are seen local data = io.loaddata(v) or "" data = match(data,"%% begin info(.-)%% end info") if data then local info = { } for label, text in gmatch(data,"%% +([^ ]+) *: *(.-)[\n\r]") do info[label] = text end report() report("%-7s : %s","module",base) report() for i=1,#labels do local l = labels[i] if info[l] then report("%-7s : %s",l,info[l]) end end report() end end end end end end -- extras function scripts.context.extras(pattern) -- only in base path, i.e. only official ones if type(pattern) ~= "string" then pattern = "*" end local found = resolvers.findfile("context.mkiv") if found ~= "" then pattern = file.join(dir.expandname(file.dirname(found)),format("mtx-context-%s.tex",pattern or "*")) local list = dir.glob(pattern) for i=1,#list do local v = list[i] local data = io.loaddata(v) or "" data = match(data,"%% begin help(.-)%% end help") if data then report() report("extra: %s (%s)",(gsub(v,"^.*mtx%-context%-(.-)%.tex$","%1")),v) for s in gmatch(data,"%% *(.-)[\n\r]") do report(s) end report() end end end end function scripts.context.extra() local extra = getargument("extra") if type(extra) ~= "string" then scripts.context.extras() elseif getargument("help") then scripts.context.extras(extra) else local fullextra = extra if not find(fullextra,"mtx%-context%-") then fullextra = "mtx-context-" .. extra end local foundextra = resolvers.findfile(fullextra) if foundextra == "" then scripts.context.extras() return else report("processing extra: %s", foundextra) end setargument("purgeall",true) local result = getargument("result") or "" if result == "" then setargument("result","context-extra") end scripts.context.run(nil,foundextra) end end -- todo: we need to do a dummy run function scripts.context.trackers() environment.files = { resolvers.findfile("m-trackers.mkiv") } multipass_nofruns = 1 setargument("purgeall",true) scripts.context.run() end function scripts.context.directives() environment.files = { resolvers.findfile("m-directives.mkiv") } multipass_nofruns = 1 setargument("purgeall",true) scripts.context.run() end function scripts.context.logcategories() environment.files = { resolvers.findfile("m-logcategories.mkiv") } multipass_nofruns = 1 setargument("purgeall",true) scripts.context.run() end -- updating (often one will use mtx-update instead) function scripts.context.timed(action) statistics.timed(action) end local zipname = "cont-tmf.zip" local mainzip = "http://www.pragma-ade.com/context/latest/" .. zipname local validtrees = { "texmf-local", "texmf-context" } local selfscripts = { "mtxrun.lua" } -- was: { "luatools.lua", "mtxrun.lua" } function zip.loaddata(zipfile,filename) -- should be in zip lib local f = zipfile:open(filename) if f then local data = f:read("*a") f:close() return data end return nil end function scripts.context.update() local force = getargument("force") local socket = require("socket") local http = require("socket.http") local basepath = resolvers.findfile("context.mkiv") or "" if basepath == "" then report("quiting, no 'context.mkiv' found") return end local basetree = basepath.match(basepath,"^(.-)tex/context/base/context.mkiv$") or "" if basetree == "" then report("quiting, no proper tds structure (%s)",basepath) return end local function is_okay(basetree) for _, tree in next, validtrees do local pattern = gsub(tree,"%-","%%-") if find(basetree,pattern) then return tree end end return false end local okay = is_okay(basetree) if not okay then report("quiting, tree '%s' is protected",okay) return else report("updating tree '%s'",okay) end if not lfs.chdir(basetree) then report("quiting, unable to change to '%s'",okay) return end report("fetching '%s'",mainzip) local latest = http.request(mainzip) if not latest then report("context tree '%s' can be updated, use --force",okay) return end io.savedata("cont-tmf.zip",latest) if false then -- variant 1 os.execute("mtxrun --script unzip cont-tmf.zip") else -- variant 2 local zipfile = zip.open(zipname) if not zipfile then report("quiting, unable to open '%s'",zipname) return end local newfile = zip.loaddata(zipfile,"tex/context/base/context.mkiv") if not newfile then report("quiting, unable to open '%s'","context.mkiv") return end local oldfile = io.loaddata(resolvers.findfile("context.mkiv")) or "" local function versiontonumber(what,str) local version = match(str,"\\edef\\contextversion{(.-)}") or "" local year, month, day, hour, minute = match(str,"\\edef\\contextversion{(%d+)%.(%d+)%.(%d+) *(%d+)%:(%d+)}") if year and minute then local time = os.time { year=year,month=month,day=day,hour=hour,minute=minute} report("%s version: %s (%s)",what,version,time) return time else report("%s version: %s (unknown)",what,version) return nil end end local oldversion = versiontonumber("old",oldfile) local newversion = versiontonumber("new",newfile) if not oldversion or not newversion then report("quiting, version cannot be determined") return elseif oldversion == newversion then report("quiting, your current version is up-to-date") return elseif oldversion > newversion then report("quiting, your current version is newer") return end for k in zipfile:files() do local filename = k.filename if find(filename,"/$") then lfs.mkdir(filename) else local data = zip.loaddata(zipfile,filename) if data then if force then io.savedata(filename,data) end report(filename) end end end for _, scriptname in next, selfscripts do local oldscript = resolvers.findfile(scriptname) or "" if oldscript ~= "" and is_okay(oldscript) then local newscript = "./scripts/context/lua/" .. scriptname local data = io.loaddata(newscript) or "" if data ~= "" then report("replacing script '%s' by '%s'",oldscript,newscript) if force then io.savedata(oldscript,data) end end else report("keeping script '%s'",oldscript) end end if force then scripts.context.make() end end if force then report("context tree '%s' has been updated",okay) else report("context tree '%s' can been updated (use --force)",okay) end end -- getting it done if getargument("nostats") then setargument("nostatistics",true) setargument("nostat",nil) end if getargument("batch") then setargument("batchmode",true) setargument("batch",nil) end if getargument("nonstop") then setargument("nonstopmode",true) setargument("nonstop",nil) end do local silent = getargument("silent") if type(silent) == "string" then directives.enable(format("logs.blocked={%s}",silent)) elseif silent then directives.enable("logs.blocked") end end if getargument("once") then multipass_nofruns = 1 elseif getargument("runs") then multipass_nofruns = tonumber(getargument("runs")) or nil end if getargument("run") then scripts.context.timed(scripts.context.autoctx) elseif getargument("make") then scripts.context.timed(function() scripts.context.make() end) elseif getargument("generate") then scripts.context.timed(function() scripts.context.generate() end) elseif getargument("ctx") then scripts.context.timed(scripts.context.ctx) -- elseif getargument("mp") or getargument("metapost") then -- scripts.context.timed(scripts.context.metapost) elseif getargument("version") then application.identify() scripts.context.version() elseif getargument("touch") then scripts.context.touch() elseif getargument("update") then scripts.context.update() elseif getargument("expert") then application.help("expert", "special") elseif getargument("modules") then scripts.context.modules() elseif getargument("extras") then scripts.context.extras(environment.files[1] or getargument("extras")) elseif getargument("extra") then scripts.context.extra() elseif getargument("exporthelp") then -- application.export(getargument("exporthelp"),environment.files[1]) application.export() elseif getargument("help") then if environment.files[1] == "extras" then scripts.context.extras() else application.help("basic") end elseif getargument("showtrackers") or getargument("trackers") == true then scripts.context.trackers() elseif getargument("showdirectives") or getargument("directives") == true then scripts.context.directives() elseif getargument("showlogcategories") then scripts.context.logcategories() elseif environment.files[1] or getargument("nofile") then scripts.context.timed(scripts.context.autoctx) elseif getargument("pipe") then scripts.context.timed(scripts.context.pipe) elseif getargument("purge") then -- only when no filename given, supports --pattern scripts.context.purge() elseif getargument("purgeall") then -- only when no filename given, supports --pattern scripts.context.purge(true,nil,true) else application.help("basic") end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-tools.lua0000644000175000017500000001550112130411274025075 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-tools'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local find, format, sub, rep, gsub, lower = string.find, string.format, string.sub, string.rep, string.gsub, string.lower local helpinfo = [[ mtx-tools Some File Related Goodies 1.01 remove utf bomb if present remove indeed glob directory into xml glob pattern (default: *) url attribute (no processing) the root of the globbed path (default: .) output filename (console by default) recurse into subdirecories take pathpart of given pattern set name attributes to full path name glob pattern (default: *) recurse into subdirecories downcase indeed ]] local application = logs.application { name = "mtx-tools", banner = "Some File Related Goodies 1.01", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.tools = scripts.tools or { } local bomb_1, bomb_2 = "^\254\255", "^\239\187\191" function scripts.tools.disarmutfbomb() local force, done = environment.argument("force"), false local files = environment.files for i=1,#files do local name = files[i] if lfs.isfile(name) then local data = io.loaddata(name) if not data then -- just skip elseif find(data,bomb_1) then report("file '%s' has a 2 character utf bomb",name) if force then io.savedata(name,(gsub(data,bomb_1,""))) end done = true elseif find(data,bomb_2) then report("file '%s' has a 3 character utf bomb",name) if force then io.savedata(name,(gsub(data,bomb_2,""))) end done = true else -- report("file '%s' has no utf bomb",name) end end end if done and not force then report("use --force to do a real disarming") end end function scripts.tools.downcase() local pattern = environment.argument('pattern') or "*" local recurse = environment.argument('recurse') local force = environment.argument('force') local n = 0 if recurse and not find(pattern,"^%*%*%/") then pattern = "**/*" .. pattern end dir.glob(pattern,function(name) local basename = file.basename(name) if lower(basename) ~= basename then n = n + 1 if force then os.rename(name,lower(name)) end end end) if n > 0 then if force then report("%s files renamed",n) else report("use --force to do a real rename (%s files involved)",n) end else report("nothing to do") end end function scripts.tools.dirtoxml() local join, removesuffix, suffixonly, date = file.join, file.removesuffix, file.suffixonly, os.date local xmlns = "http://www.pragma-ade.com/rlg/xmldir.rng" local timestamp = "%Y-%m-%d %H:%M" local pattern = environment.argument('pattern') or ".*" local url = environment.argument('url') or "no-url" local root = environment.argument('root') or "." local outputfile = environment.argument('output') local recurse = environment.argument('recurse') or false local stripname = environment.argument('stripname') local longname = environment.argument('longname') local function flush(list,result,n,path) n, result = n or 1, result or { } local d = rep(" ",n) for name, attr in table.sortedhash(list) do local mode = attr.mode if mode == "file" then result[#result+1] = format("%s",d,(longname and path and join(path,name)) or name) result[#result+1] = format("%s %s",d,removesuffix(name)) result[#result+1] = format("%s %s",d,suffixonly(name)) result[#result+1] = format("%s %s",d,attr.size) result[#result+1] = format("%s %s",d,sub(attr.permissions,7,9)) result[#result+1] = format("%s %s",d,date(timestamp,attr.modification)) result[#result+1] = format("%s",d) elseif mode == "directory" then result[#result+1] = format("%s",d,name) flush(attr.list,result,n+1,(path and join(path,name)) or name) result[#result+1] = format("%s",d) end end end if not pattern or pattern == "" then report('provide --pattern=') return end if stripname then pattern = file.dirname(pattern) end local luapattern = string.topattern(pattern,true) lfs.chdir(root) local list = dir.collectpattern(root,luapattern,recurse) if list[outputfile] then list[outputfile] = nil end local result = { "" } result[#result+1] = format("",url,root,pattern,luapattern,xmlns,date(timestamp)) flush(list,result) result[#result+1] = "" result = table.concat(result,"\n") if not outputfile or outputfile == "" then texio.write_nl(result) else io.savedata(outputfile,result) end end if environment.argument("disarmutfbomb") then scripts.tools.disarmutfbomb() elseif environment.argument("dirtoxml") then scripts.tools.dirtoxml() elseif environment.argument("downcase") then scripts.tools.downcase() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-rsync.lua0000644000175000017500000001230312130411274025070 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-rsync'] = { version = 1.000, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is an experimental script that will be extended over time and -- is used by myself. An example or a copy spec: -- -- -- local devdir = "m:/develop/services" -- local orgdir = "m:/pod/m4all" -- -- return { -- { -- origin = { devdir, "framework/scripts/d-dispatchers.lua"}, -- target = { orgdir, "framework/scripts" }, -- }, -- { -- origin = { devdir, "framework/scripts/common/*"}, -- target = { orgdir, "framework/scripts/common" }, -- }, -- { -- origin = { devdir, "framework/scripts/d-buildtool.lua" }, -- target = { orgdir, "framework/scripts" } -- }, -- { -- origin = { devdir, "framework/scripts/buildtool/*"}, -- target = { orgdir, "framework/scripts/buildtool" }, -- }, -- { -- origin = { devdir, "framework/m4all*" }, -- target = { orgdir, "framework" }, -- }, -- { -- origin = { devdir, "framework/configurations/*m4all*"}, -- target = { orgdir, "framework/configurations" }, -- }, -- { -- recurse = true, -- origin = { devdir, "context/tex/texmf-project/tex/context/user/m4all/*" }, -- target = { orgdir, "context/tex/texmf-project/tex/context/user/m4all" }, -- }, -- } local helpinfo = [[ mtx-rsync Rsync Helpers 0.10 use given file as specification show what would happen force run ]] local application = logs.application { name = "mtx-rsync", banner = "Rsync Helpers 0.10", helpinfo = helpinfo, } local format, gsub = string.format, string.gsub local concat = table.concat local report_message = logs.new("rsync message") local report_dryrun = logs.new("rsync dryrun") local report_normal = logs.new("rsync normal") local report_command = logs.new("rsync command") local cleanup if os.platform == "mswin" then os.setenv("CYGWIN","nontsec") cleanup = function(name) return (gsub(name,"([a-zA-Z]):/", "/cygdrive/%1/")) end else cleanup = function(name) return name end end function rsynccommand(dryrun,recurse,origin,target) local command = "rsync -ptlva " if dryrun then command = command .. "-n " end if recurse then command = command .. "-r " end return format('%s %s %s',command,origin,target) end scripts = scripts or { } scripts.rsync = scripts.rsync or { } local rsync = scripts.rsync rsync.mode = "command" function rsync.run(origin,target,message,recurse) if type(origin) == "table" then origin = concat(origin,"/") end if type(target) == "table" then target = concat(target,"/") end origin = cleanup(origin) target = cleanup(target) local path = gsub(target,"^/cygdrive/(.)","%1:") if not lfs.isdir(path) then report_message("creating target dir %s",path) dir.makedirs(path) -- as rsync only creates them when --recursive end if message then report_message(message) end if rsync.mode == "dryrun" then local command = rsynccommand(true,recurse,origin,target) report_dryrun(command.."\n") os.execute(command) elseif rsync.mode == "force" then local command = rsynccommand(false,recurse,origin,target) report_normal(command.."\n") os.execute(command) else local command = rsynccommand(true,recurse,origin,target) report_command(command) end end function rsync.job(list) if type(list) == "string" and lfs.isfile(list) then list = dofile(list) end if type(list) ~= "table" then report_message("invalid job specification") return end for i=1,#list do local li = list[i] local origin = li.origin local target = li.target local message = li.message local recurse = li.recurse if origin and #origin > 0 and target and #target > 0 then -- string or table rsync.run(origin,target,message,recurse) else report_message("invalid job specification at index %s",i) end end end if environment.ownscript then -- stand alone else report(application.banner) return rsync end local arguments = environment.arguments local files = environment.files if arguments.dryrun then rsync.mode = "dryrun" elseif arguments.force then rsync.mode = "force" end if arguments.exporthelp then application.export(arguments.exporthelp,environment.files[1]) elseif arguments.job then rsync.job(files[1]) elseif files[1] and files[2] then rsync.run(files[1],files[2]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-mtxworks.lua0000644000175000017500000000064611376503616025654 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-mtxworks'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this is a shortcut to "mtxrun --script texworks --start" environment.setargument("start",true) require "mtx-texworks" context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtxrun.lua0000755000175000017500000165611112161703335024506 0ustar norbertnorbert#!/usr/bin/env texlua -- for k, v in next, _G.string do -- local tv = type(v) -- if tv == "table" then -- for kk, vv in next, v do -- print(k,kk,vv) -- end -- else -- print(tv,k,v) -- end -- end if not modules then modules = { } end modules ['mtxrun'] = { version = 1.001, comment = "runner, lua replacement for texmfstart.rb", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- one can make a stub: -- -- #!/bin/sh -- env LUATEXDIR=/....../texmf/scripts/context/lua luatex --luaonly mtxrun.lua "$@" -- filename : mtxrun.lua -- comment : companion to context.tex -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL -- copyright: PRAGMA ADE / ConTeXt Development Team -- license : see context related readme files -- This script is based on texmfstart.rb but does not use kpsewhich to -- locate files. Although kpse is a library it never came to opening up -- its interface to other programs (esp scripting languages) and so we -- do it ourselves. The lua variant evolved out of an experimental ruby -- one. Interesting is that using a scripting language instead of c does -- not have a speed penalty. Actually the lua variant is more efficient, -- especially when multiple calls to kpsewhich are involved. The lua -- library also gives way more control. -- to be done / considered -- -- support for --exec or make it default -- support for jar files (or maybe not, never used, too messy) -- support for $RUBYINPUTS cum suis (if still needed) -- remember for subruns: _CTX_K_V_#{original}_ -- remember for subruns: _CTX_K_S_#{original}_ -- remember for subruns: TEXMFSTART.#{original} [tex.rb texmfstart.rb] -- begin library merge do -- create closure to overcome 200 locals limit package.loaded["l-lua"] = package.loaded["l-lua"] or true -- original size: 3123, stripped down to: 1694 if not modules then modules={} end modules ['l-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$") _MAJORVERSION=tonumber(major) or 5 _MINORVERSION=tonumber(minor) or 1 _LUAVERSION=_MAJORVERSION+_MINORVERSION/10 if not lpeg then lpeg=require("lpeg") end if loadstring then local loadnormal=load function load(first,...) if type(first)=="string" then return loadstring(first,...) else return loadnormal(first,...) end end else loadstring=load end if not ipairs then local function iterate(a,i) i=i+1 local v=a[i] if v~=nil then return i,v end end function ipairs(a) return iterate,a,0 end end if not pairs then function pairs(t) return next,t end end if not table.unpack then table.unpack=_G.unpack elseif not unpack then _G.unpack=table.unpack end if not package.loaders then package.loaders=package.searchers end local print,select,tostring=print,select,tostring local inspectors={} function setinspector(inspector) inspectors[#inspectors+1]=inspector end function inspect(...) for s=1,select("#",...) do local value=select(s,...) local done=false for i=1,#inspectors do done=inspectors[i](value) if done then break end end if not done then print(tostring(value)) end end end local dummy=function() end function optionalrequire(...) local ok,result=xpcall(require,dummy,...) if ok then return result end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true -- original size: 9893, stripped down to: 7253 if not modules then modules={} end modules ['l-package']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type=type local gsub,format=string.gsub,string.format local P,S,Cs,lpegmatch=lpeg.P,lpeg.S,lpeg.Cs,lpeg.match local package=package local searchers=package.searchers or package.loaders local filejoin=file and file.join or function(path,name) return path.."/"..name end local isreadable=file and file.is_readable or function(name) local f=io.open(name) if f then f:close() return true end end local addsuffix=file and file.addsuffix or function(name,suffix) return name.."."..suffix end local function cleanpath(path) return path end local pattern=Cs((((1-S("\\/"))^0*(S("\\/")^1/"/"))^0*(P(".")^1/"/"+P(1))^1)*-1) local function lualibfile(name) return lpegmatch(pattern,name) or name end local offset=luarocks and 1 or 0 local helpers=package.helpers or { cleanpath=cleanpath, lualibfile=lualibfile, trace=false, report=function(...) print(format(...)) end, builtin={ ["preload table"]=searchers[1+offset], ["path specification"]=searchers[2+offset], ["cpath specification"]=searchers[3+offset], ["all in one fallback"]=searchers[4+offset], }, methods={}, sequence={ "already loaded", "preload table", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } } package.helpers=helpers local methods=helpers.methods local builtin=helpers.builtin local extraluapaths={} local extralibpaths={} local luapaths=nil local libpaths=nil local oldluapath=nil local oldlibpath=nil local nofextralua=-1 local nofextralib=-1 local nofpathlua=-1 local nofpathlib=-1 local function listpaths(what,paths) local nofpaths=#paths if nofpaths>0 then for i=1,nofpaths do helpers.report("using %s path %i: %s",what,i,paths[i]) end else helpers.report("no %s paths defined",what) end return nofpaths end local function getextraluapaths() if helpers.trace and #extraluapaths~=nofextralua then nofextralua=listpaths("extra lua",extraluapaths) end return extraluapaths end local function getextralibpaths() if helpers.trace and #extralibpaths~=nofextralib then nofextralib=listpaths("extra lib",extralibpaths) end return extralibpaths end local function getluapaths() local luapath=package.path or "" if oldluapath~=luapath then luapaths=file.splitpath(luapath,";") oldluapath=luapath nofpathlua=-1 end if helpers.trace and #luapaths~=nofpathlua then nofpathlua=listpaths("builtin lua",luapaths) end return luapaths end local function getlibpaths() local libpath=package.cpath or "" if oldlibpath~=libpath then libpaths=file.splitpath(libpath,";") oldlibpath=libpath nofpathlib=-1 end if helpers.trace and #libpaths~=nofpathlib then nofpathlib=listpaths("builtin lib",libpaths) end return libpaths end package.luapaths=getluapaths package.libpaths=getlibpaths package.extraluapaths=getextraluapaths package.extralibpaths=getextralibpaths local hashes={ lua={}, lib={}, } local function registerpath(tag,what,target,...) local pathlist={... } local cleanpath=helpers.cleanpath local trace=helpers.trace local report=helpers.report local hash=hashes[what] local function add(path) local path=cleanpath(path) if not hash[path] then target[#target+1]=path hash[path]=true if trace then report("registered %s path %s: %s",tag,#target,path) end else if trace then report("duplicate %s path: %s",tag,path) end end end for p=1,#pathlist do local path=pathlist[p] if type(path)=="table" then for i=1,#path do add(path[i]) end else add(path) end end return paths end helpers.registerpath=registerpath function package.extraluapath(...) registerpath("extra lua","lua",extraluapaths,...) end function package.extralibpath(...) registerpath("extra lib","lib",extralibpaths,...) end local function loadedaslib(resolved,rawname) local base=gsub(rawname,"%.","_") local init="luaopen_"..gsub(base,"%.","_") if helpers.trace then helpers.report("calling loadlib with '%s' with init '%s'",resolved,init) end return package.loadlib(resolved,init) end helpers.loadedaslib=loadedaslib local function loadedbypath(name,rawname,paths,islib,what) local trace=helpers.trace for p=1,#paths do local path=paths[p] local resolved=filejoin(path,name) if trace then helpers.report("%s path, identifying '%s' on '%s'",what,name,path) end if isreadable(resolved) then if trace then helpers.report("%s path, '%s' found on '%s'",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbypath=loadedbypath methods["already loaded"]=function(name) return package.loaded[name] end methods["preload table"]=function(name) return builtin["preload table"](name) end methods["lua extra list"]=function(name) return loadedbypath(addsuffix(lualibfile(name),"lua" ),name,getextraluapaths(),false,"lua") end methods["lib extra list"]=function(name) return loadedbypath(addsuffix(lualibfile(name),os.libsuffix),name,getextralibpaths(),true,"lib") end methods["path specification"]=function(name) getluapaths() return builtin["path specification"](name) end methods["cpath specification"]=function(name) getlibpaths() return builtin["cpath specification"](name) end methods["all in one fallback"]=function(name) return builtin["all in one fallback"](name) end methods["not loaded"]=function(name) if helpers.trace then helpers.report("unable to locate '%s'",name or "?") end return nil end local level=0 local used={} helpers.traceused=false function helpers.loaded(name) local sequence=helpers.sequence level=level+1 for i=1,#sequence do local method=sequence[i] if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end local result,rest=methods[method](name) if type(result)=="function" then if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) end if helpers.traceused then used[#used+1]={ level=level,name=name } end level=level-1 return result,rest end end level=level-1 return nil end function helpers.showused() local n=#used if n>0 then helpers.report("%s libraries loaded:",n) helpers.report() for i=1,n do local u=used[i] helpers.report("%i %a",u.level,u.name) end helpers.report() end end function helpers.unload(name) if helpers.trace then if package.loaded[name] then helpers.report("unloading, name '%s', %s",name,"done") else helpers.report("unloading, name '%s', %s",name,"not loaded") end end package.loaded[name]=nil end table.insert(searchers,1,helpers.loaded) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true -- original size: 26252, stripped down to: 14371 if not modules then modules={} end modules ['l-lpeg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } lpeg=require("lpeg") local type,next,tostring=type,next,tostring local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format local floor=math.floor local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end) lpeg.patterns=lpeg.patterns or {} local patterns=lpeg.patterns local anything=P(1) local endofstring=P(-1) local alwaysmatched=P(true) patterns.anything=anything patterns.endofstring=endofstring patterns.beginofstring=alwaysmatched patterns.alwaysmatched=alwaysmatched local digit,sign=R('09'),S('+-') local cr,lf,crlf=P("\r"),P("\n"),P("\r\n") local newline=crlf+S("\r\n") local escaped=P("\\")*anything local squote=P("'") local dquote=P('"') local space=P(" ") local utfbom_32_be=P('\000\000\254\255') local utfbom_32_le=P('\255\254\000\000') local utfbom_16_be=P('\255\254') local utfbom_16_le=P('\254\255') local utfbom_8=P('\239\187\191') local utfbom=utfbom_32_be+utfbom_32_le+utfbom_16_be+utfbom_16_le+utfbom_8 local utftype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")+alwaysmatched*Cc("utf-8") local utfoffset=utfbom_32_be*Cc(4)+utfbom_32_le*Cc(4)+utfbom_16_be*Cc(2)+utfbom_16_le*Cc(2)+utfbom_8*Cc(3)+Cc(0) local utf8next=R("\128\191") patterns.utf8one=R("\000\127") patterns.utf8two=R("\194\223")*utf8next patterns.utf8three=R("\224\239")*utf8next*utf8next patterns.utf8four=R("\240\244")*utf8next*utf8next*utf8next patterns.utfbom=utfbom patterns.utftype=utftype patterns.utfoffset=utfoffset local utf8char=patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four local validutf8char=utf8char^0*endofstring*Cc(true)+Cc(false) local utf8character=P(1)*R("\128\191")^0 patterns.utf8=utf8char patterns.utf8char=utf8char patterns.utf8character=utf8character patterns.validutf8=validutf8char patterns.validutf8char=validutf8char local eol=S("\n\r") local spacer=S(" \t\f\v") local whitespace=eol+spacer local nonspacer=1-spacer local nonwhitespace=1-whitespace patterns.eol=eol patterns.spacer=spacer patterns.whitespace=whitespace patterns.nonspacer=nonspacer patterns.nonwhitespace=nonwhitespace local stripper=spacer^0*C((spacer^0*nonspacer^1)^0) local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0)) patterns.stripper=stripper patterns.collapser=collapser patterns.digit=digit patterns.sign=sign patterns.cardinal=sign^0*digit^1 patterns.integer=sign^0*digit^1 patterns.unsigned=digit^0*P('.')*digit^1 patterns.float=sign^0*patterns.unsigned patterns.cunsigned=digit^0*P(',')*digit^1 patterns.cfloat=sign^0*patterns.cunsigned patterns.number=patterns.float+patterns.integer patterns.cnumber=patterns.cfloat+patterns.integer patterns.oct=P("0")*R("07")^1 patterns.octal=patterns.oct patterns.HEX=P("0x")*R("09","AF")^1 patterns.hex=P("0x")*R("09","af")^1 patterns.hexadecimal=P("0x")*R("09","AF","af")^1 patterns.lowercase=R("az") patterns.uppercase=R("AZ") patterns.letter=patterns.lowercase+patterns.uppercase patterns.space=space patterns.tab=P("\t") patterns.spaceortab=patterns.space+patterns.tab patterns.newline=newline patterns.emptyline=newline^1 patterns.equal=P("=") patterns.comma=P(",") patterns.commaspacer=P(",")*spacer^0 patterns.period=P(".") patterns.colon=P(":") patterns.semicolon=P(";") patterns.underscore=P("_") patterns.escaped=escaped patterns.squote=squote patterns.dquote=dquote patterns.nosquote=(escaped+(1-squote))^0 patterns.nodquote=(escaped+(1-dquote))^0 patterns.unsingle=(squote/"")*patterns.nosquote*(squote/"") patterns.undouble=(dquote/"")*patterns.nodquote*(dquote/"") patterns.unquoted=patterns.undouble+patterns.unsingle patterns.unspacer=((patterns.spacer^1)/"")^0 patterns.singlequoted=squote*patterns.nosquote*squote patterns.doublequoted=dquote*patterns.nodquote*dquote patterns.quoted=patterns.doublequoted+patterns.singlequoted patterns.propername=R("AZ","az","__")*R("09","AZ","az","__")^0*P(-1) patterns.somecontent=(anything-newline-space)^1 patterns.beginline=#(1-newline) patterns.longtostring=Cs(whitespace^0/""*nonwhitespace^0*((whitespace^0/" "*(patterns.quoted+nonwhitespace)^1)^0)) local function anywhere(pattern) return P { P(pattern)+1*V(1) } end lpeg.anywhere=anywhere function lpeg.instringchecker(p) p=anywhere(p) return function(str) return lpegmatch(p,str) and true or false end end function lpeg.splitter(pattern,action) return (((1-P(pattern))^1)/action+1)^0 end function lpeg.tsplitter(pattern,action) return Ct((((1-P(pattern))^1)/action+1)^0) end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) local splitter=(single and splitters_s[separator]) or splitters_m[separator] if not splitter then separator=P(separator) local other=C((1-separator)^0) if single then local any=anything splitter=other*(separator*C(any^0)+"") splitters_s[separator]=splitter else splitter=other*(separator*other)^0 splitters_m[separator]=splitter end end return splitter end local function tsplitat(separator) local splitter=splitters_t[separator] if not splitter then splitter=Ct(splitat(separator)) splitters_t[separator]=splitter end return splitter end lpeg.splitat=splitat lpeg.tsplitat=tsplitat function string.splitup(str,separator) if not separator then separator="," end return lpegmatch(splitters_m[separator] or splitat(separator),str) end local cache={} function lpeg.split(separator,str) local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) end function string.split(str,separator) if separator then local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) else return { str } end end local spacing=patterns.spacer^0*newline local empty=spacing*Cc("") local nonempty=Cs((1-spacing)^1)*spacing^-1 local content=(empty+nonempty)^1 patterns.textline=content local linesplitter=tsplitat(newline) patterns.linesplitter=linesplitter function string.splitlines(str) return lpegmatch(linesplitter,str) end local cache={} function lpeg.checkedsplit(separator,str) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end function string.checkedsplit(str,separator) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end local function f2(s) local c1,c2=byte(s,1,2) return c1*64+c2-12416 end local function f3(s) local c1,c2,c3=byte(s,1,3) return (c1*64+c2)*64+c3-925824 end local function f4(s) local c1,c2,c3,c4=byte(s,1,4) return ((c1*64+c2)*64+c3)*64+c4-63447168 end local utf8byte=patterns.utf8one/byte+patterns.utf8two/f2+patterns.utf8three/f3+patterns.utf8four/f4 patterns.utf8byte=utf8byte local cache={} function lpeg.stripper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs(((S(str)^1)/""+1)^0) cache[str]=s end return s else return Cs(((str^1)/""+1)^0) end end local cache={} function lpeg.keeper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs((((1-S(str))^1)/""+1)^0) cache[str]=s end return s else return Cs((((1-str)^1)/""+1)^0) end end function lpeg.frontstripper(str) return (P(str)+P(true))*Cs(anything^0) end function lpeg.endstripper(str) return Cs((1-P(str)*endofstring)^0) end function lpeg.replacer(one,two,makefunction,isutf) local pattern local u=isutf and utf8char or 1 if type(one)=="table" then local no=#one local p=P(false) if no==0 then for k,v in next,one do p=p+P(k)/v end pattern=Cs((p+u)^0) elseif no==1 then local o=one[1] one,two=P(o[1]),o[2] pattern=Cs((one/two+u)^0) else for i=1,no do local o=one[i] p=p+P(o[1])/o[2] end pattern=Cs((p+u)^0) end else pattern=Cs((P(one)/(two or "")+u)^0) end if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end function lpeg.finder(lst,makefunction) local pattern if type(lst)=="table" then pattern=P(false) if #lst==0 then for k,v in next,lst do pattern=pattern+P(k) end else for i=1,#lst do pattern=pattern+P(lst[i]) end end else pattern=P(lst) end pattern=(1-pattern)^0*pattern if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end local splitters_f,splitters_s={},{} function lpeg.firstofsplit(separator) local splitter=splitters_f[separator] if not splitter then separator=P(separator) splitter=C((1-separator)^0) splitters_f[separator]=splitter end return splitter end function lpeg.secondofsplit(separator) local splitter=splitters_s[separator] if not splitter then separator=P(separator) splitter=(1-separator)^0*separator*C(anything^0) splitters_s[separator]=splitter end return splitter end function lpeg.balancer(left,right) left,right=P(left),P(right) return P { left*((1-left-right)+V(1))^0*right } end local nany=utf8char/"" function lpeg.counter(pattern) pattern=Cs((P(pattern)/" "+nany)^0) return function(str) return #lpegmatch(pattern,str) end end utf=utf or (unicode and unicode.utf8) or {} local utfcharacters=utf and utf.characters or string.utfcharacters local utfgmatch=utf and utf.gmatch local utfchar=utf and utf.char lpeg.UP=lpeg.P if utfcharacters then function lpeg.US(str) local p=P(false) for uc in utfcharacters(str) do p=p+P(uc) end return p end elseif utfgmatch then function lpeg.US(str) local p=P(false) for uc in utfgmatch(str,".") do p=p+P(uc) end return p end else function lpeg.US(str) local p=P(false) local f=function(uc) p=p+P(uc) end lpegmatch((utf8char/f)^0,str) return p end end local range=utf8byte*utf8byte+Cc(false) function lpeg.UR(str,more) local first,last if type(str)=="number" then first=str last=more or first else first,last=lpegmatch(range,str) if not last then return P(str) end end if first==last then return P(str) elseif utfchar and (last-first<8) then local p=P(false) for i=first,last do p=p+P(utfchar(i)) end return p else local f=function(b) return b>=first and b<=last end return utf8byte/f end end function lpeg.is_lpeg(p) return p and lpegtype(p)=="pattern" end function lpeg.oneof(list,...) if type(list)~="table" then list={ list,... } end local p=P(list[1]) for l=2,#list do p=p+P(list[l]) end return p end local sort=table.sort local function copyindexed(old) local new={} for i=1,#old do new[i]=old end return new end local function sortedkeys(tab) local keys,s={},0 for key,_ in next,tab do s=s+1 keys[s]=key end sort(keys) return keys end function lpeg.append(list,pp,delayed,checked) local p=pp if #list>0 then local keys=copyindexed(list) sort(keys) for i=#keys,1,-1 do local k=keys[i] if p then p=P(k)+p else p=P(k) end end elseif delayed then local keys=sortedkeys(list) if p then for i=1,#keys,1 do local k=keys[i] local v=list[k] p=P(k)/list+p end else for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)+p else p=P(k) end end if p then p=p/list end end elseif checked then local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then if k==v then p=P(k)+p else p=P(k)/v+p end else if k==v then p=P(k) else p=P(k)/v end end end else local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)/v+p else p=P(k)/v end end end return p end local function make(t) local p local keys=sortedkeys(t) for i=1,#keys do local k=keys[i] local v=t[k] if not p then if next(v) then p=P(k)*make(v) else p=P(k) end else if next(v) then p=p+P(k)*make(v) else p=p+P(k) end end end return p end function lpeg.utfchartabletopattern(list) local tree={} for i=1,#list do local t=tree for c in gmatch(list[i],".") do if not t[c] then t[c]={} end t=t[c] end end return make(tree) end patterns.containseol=lpeg.finder(eol) local function nextstep(n,step,result) local m=n%step local d=floor(n/step) if d>0 then local v=V(tostring(step)) local s=result.start for i=1,d do if s then s=v*s else s=v end end result.start=s end if step>1 and result.start then local v=V(tostring(step/2)) result[tostring(step)]=v*v end if step>0 then return nextstep(m,step/2,result) else return result end end function lpeg.times(pattern,n) return P(nextstep(n,2^16,{ "start",["1"]=pattern })) end local digit=R("09") local period=P(".") local zero=P("0") local trailingzeros=zero^0*-digit local case_1=period*trailingzeros/"" local case_2=period*(digit-trailingzeros)^1*(trailingzeros/"") local number=digit^1*(case_1+case_2) local stripper=Cs((number+1)^0) lpeg.patterns.stripzeros=stripper end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-function"] = package.loaded["l-function"] or true -- original size: 361, stripped down to: 322 if not modules then modules={} end modules ['l-functions']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } functions=functions or {} function functions.dummy() end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-string"] = package.loaded["l-string"] or true -- original size: 5513, stripped down to: 2708 if not modules then modules={} end modules ['l-string']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local string=string local sub,gmatch,format,char,byte,rep,lower=string.sub,string.gmatch,string.format,string.char,string.byte,string.rep,string.lower local lpegmatch,patterns=lpeg.match,lpeg.patterns local P,S,C,Ct,Cc,Cs=lpeg.P,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.Cs local unquoted=patterns.squote*C(patterns.nosquote)*patterns.squote+patterns.dquote*C(patterns.nodquote)*patterns.dquote function string.unquoted(str) return lpegmatch(unquoted,str) or str end function string.quoted(str) return format("%q",str) end function string.count(str,pattern) local n=0 for _ in gmatch(str,pattern) do n=n+1 end return n end function string.limit(str,n,sentinel) if #str>n then sentinel=sentinel or "..." return sub(str,1,(n-#sentinel))..sentinel else return str end end local stripper=patterns.stripper local collapser=patterns.collapser local longtostring=patterns.longtostring function string.strip(str) return lpegmatch(stripper,str) or "" end function string.collapsespaces(str) return lpegmatch(collapser,str) or "" end function string.longtostring(str) return lpegmatch(longtostring,str) or "" end local pattern=P(" ")^0*P(-1) function string.is_empty(str) if str=="" then return true else return lpegmatch(pattern,str) and true or false end end local anything=patterns.anything local allescapes=Cc("%")*S(".-+%?()[]*") local someescapes=Cc("%")*S(".-+%()[]") local matchescapes=Cc(".")*S("*?") local pattern_a=Cs ((allescapes+anything )^0 ) local pattern_b=Cs ((someescapes+matchescapes+anything )^0 ) local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") ) function string.escapedpattern(str,simple) return lpegmatch(simple and pattern_b or pattern_a,str) end function string.topattern(str,lowercase,strict) if str=="" or type(str)~="string" then return ".*" elseif strict then str=lpegmatch(pattern_c,str) else str=lpegmatch(pattern_b,str) end if lowercase then return lower(str) else return str end end function string.valid(str,default) return (type(str)=="string" and str~="" and str) or default or nil end string.itself=function(s) return s end local pattern=Ct(C(1)^0) function string.totable(str) return lpegmatch(pattern,str) end local replacer=lpeg.replacer("@","%%") function string.tformat(fmt,...) return format(lpegmatch(replacer,fmt),...) end string.quote=string.quoted string.unquote=string.unquoted end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-table"] = package.loaded["l-table"] or true -- original size: 44626, stripped down to: 19688 if not modules then modules={} end modules ['l-table']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring,tonumber,ipairs,select=type,next,tostring,tonumber,ipairs,select local table,string=table,string local concat,sort,insert,remove=table.concat,table.sort,table.insert,table.remove local format,lower,dump=string.format,string.lower,string.dump local getmetatable,setmetatable=getmetatable,setmetatable local getinfo=debug.getinfo local lpegmatch,patterns=lpeg.match,lpeg.patterns local floor=math.floor local stripper=patterns.stripper function table.strip(tab) local lst,l={},0 for i=1,#tab do local s=lpegmatch(stripper,tab[i]) or "" if s=="" then else l=l+1 lst[l]=s end end return lst end function table.keys(t) if t then local keys,k={},0 for key,_ in next,t do k=k+1 keys[k]=key end return keys else return {} end end local function compare(a,b) local ta,tb=type(a),type(b) if ta==tb then return a0 then local n=0 for _,v in next,t do n=n+1 end if n==#t then local tt,nt={},0 for i=1,#t do local v=t[i] local tv=type(v) if tv=="number" then nt=nt+1 if hexify then tt[nt]=format("0x%04X",v) else tt[nt]=tostring(v) end elseif tv=="boolean" then nt=nt+1 tt[nt]=tostring(v) elseif tv=="string" then nt=nt+1 tt[nt]=format("%q",v) else tt=nil break end end return tt end end return nil end local propername=patterns.propername local function dummy() end local function do_serialize(root,name,depth,level,indexed) if level>0 then depth=depth.." " if indexed then handle(format("%s{",depth)) else local tn=type(name) if tn=="number" then if hexify then handle(format("%s[0x%04X]={",depth,name)) else handle(format("%s[%s]={",depth,name)) end elseif tn=="string" then if noquotes and not reserved[name] and lpegmatch(propername,name) then handle(format("%s%s={",depth,name)) else handle(format("%s[%q]={",depth,name)) end elseif tn=="boolean" then handle(format("%s[%s]={",depth,tostring(name))) else handle(format("%s{",depth)) end end end if root and next(root) then local first,last=nil,0 if compact then last=#root for k=1,last do if root[k]==nil then last=k-1 break end end if last>0 then first=1 end end local sk=sortedkeys(root) for i=1,#sk do local k=sk[i] local v=root[k] local t,tk=type(v),type(k) if compact and first and tk=="number" and k>=first and k<=last then if t=="number" then if hexify then handle(format("%s 0x%04X,",depth,v)) else handle(format("%s %s,",depth,v)) end elseif t=="string" then if reduce and tonumber(v) then handle(format("%s %s,",depth,v)) else handle(format("%s %q,",depth,v)) end elseif t=="table" then if not next(v) then handle(format("%s {},",depth)) elseif inline then local st=simple_table(v) if st then handle(format("%s { %s },",depth,concat(st,", "))) else do_serialize(v,k,depth,level+1,true) end else do_serialize(v,k,depth,level+1,true) end elseif t=="boolean" then handle(format("%s %s,",depth,tostring(v))) elseif t=="function" then if functions then handle(format('%s load(%q),',depth,dump(v))) else handle(format('%s "function",',depth)) end else handle(format("%s %q,",depth,tostring(v))) end elseif k=="__p__" then if false then handle(format("%s __p__=nil,",depth)) end elseif t=="number" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=0x%04X,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then if hexify then handle(format("%s [%s]=0x%04X,",depth,tostring(k),v)) else handle(format("%s [%s]=%s,",depth,tostring(k),v)) end elseif noquotes and not reserved[k] and lpegmatch(propername,k) then if hexify then handle(format("%s %s=0x%04X,",depth,k,v)) else handle(format("%s %s=%s,",depth,k,v)) end else if hexify then handle(format("%s [%q]=0x%04X,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end end elseif t=="string" then if reduce and tonumber(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,v)) else handle(format("%s [%s]=%q,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,v)) else handle(format("%s [%q]=%q,",depth,k,v)) end end elseif t=="table" then if not next(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]={},",depth,k)) else handle(format("%s [%s]={},",depth,k)) end elseif tk=="boolean" then handle(format("%s [%s]={},",depth,tostring(k))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={},",depth,k)) else handle(format("%s [%q]={},",depth,k)) end elseif inline then local st=simple_table(v) if st then if tk=="number" then if hexify then handle(format("%s [0x%04X]={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%s]={ %s },",depth,k,concat(st,", "))) end elseif tk=="boolean" then handle(format("%s [%s]={ %s },",depth,tostring(k),concat(st,", "))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%q]={ %s },",depth,k,concat(st,", "))) end else do_serialize(v,k,depth,level+1) end else do_serialize(v,k,depth,level+1) end elseif t=="boolean" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,tostring(v))) else handle(format("%s [%s]=%s,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,tostring(v))) else handle(format("%s [%q]=%s,",depth,k,tostring(v))) end elseif t=="function" then if functions then local f=getinfo(v).what=="C" and dump(dummy) or dump(v) if tk=="number" then if hexify then handle(format("%s [0x%04X]=load(%q),",depth,k,f)) else handle(format("%s [%s]=load(%q),",depth,k,f)) end elseif tk=="boolean" then handle(format("%s [%s]=load(%q),",depth,tostring(k),f)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=load(%q),",depth,k,f)) else handle(format("%s [%q]=load(%q),",depth,k,f)) end end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,tostring(v))) else handle(format("%s [%s]=%q,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,tostring(v))) else handle(format("%s [%q]=%q,",depth,k,tostring(v))) end end end end if level>0 then handle(format("%s},",depth)) end end local function serialize(_handle,root,name,specification) local tname=type(name) if type(specification)=="table" then noquotes=specification.noquotes hexify=specification.hexify handle=_handle or specification.handle or print reduce=specification.reduce or false functions=specification.functions compact=specification.compact inline=specification.inline and compact if functions==nil then functions=true end if compact==nil then compact=true end if inline==nil then inline=compact end else noquotes=false hexify=false handle=_handle or print reduce=false compact=true inline=true functions=true end if tname=="string" then if name=="return" then handle("return {") else handle(name.."={") end elseif tname=="number" then if hexify then handle(format("[0x%04X]={",name)) else handle("["..name.."]={") end elseif tname=="boolean" then if name then handle("return {") else handle("{") end else handle("t={") end if root then if getmetatable(root) then local dummy=root._w_h_a_t_e_v_e_r_ root._w_h_a_t_e_v_e_r_=nil end if next(root) then do_serialize(root,name,"",0) end end handle("}") end function table.serialize(root,name,specification) local t,n={},0 local function flush(s) n=n+1 t[n]=s end serialize(flush,root,name,specification) return concat(t,"\n") end table.tohandle=serialize local maxtab=2*1024 function table.tofile(filename,root,name,specification) local f=io.open(filename,'w') if f then if maxtab>1 then local t,n={},0 local function flush(s) n=n+1 t[n]=s if n>maxtab then f:write(concat(t,"\n"),"\n") t,n={},0 end end serialize(flush,root,name,specification) f:write(concat(t,"\n"),"\n") else local function flush(s) f:write(s,"\n") end serialize(flush,root,name,specification) end f:close() io.flush() end end local function flattened(t,f,depth) if f==nil then f={} depth=0xFFFF elseif tonumber(f) then depth=f f={} elseif not depth then depth=0xFFFF end for k,v in next,t do if type(k)~="number" then if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end end for k=1,#t do local v=t[k] if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end return f end table.flattened=flattened local function unnest(t,f) if not f then f={} end for i=1,#t do local v=t[i] if type(v)=="table" then if type(v[1])=="table" then unnest(v,f) else f[#f+1]=v end else f[#f+1]=v end end return f end function table.unnest(t) return unnest(t) end local function are_equal(a,b,n,m) if a and b and #a==#b then n=n or 1 m=m or #a for i=n,m do local ai,bi=a[i],b[i] if ai==bi then elseif type(ai)=="table" and type(bi)=="table" then if not are_equal(ai,bi) then return false end else return false end end return true else return false end end local function identical(a,b) for ka,va in next,a do local vb=b[ka] if va==vb then elseif type(va)=="table" and type(vb)=="table" then if not identical(va,vb) then return false end else return false end end return true end table.identical=identical table.are_equal=are_equal function table.compact(t) if t then for k,v in next,t do if not next(v) then t[k]=nil end end end end function table.contains(t,v) if t then for i=1,#t do if t[i]==v then return i end end end return false end function table.count(t) local n=0 for k,v in next,t do n=n+1 end return n end function table.swapped(t,s) local n={} if s then for k,v in next,s do n[k]=v end end for k,v in next,t do n[v]=k end return n end function table.mirrored(t) local n={} for k,v in next,t do n[v]=k n[k]=v end return n end function table.reversed(t) if t then local tt,tn={},#t if tn>0 then local ttn=0 for i=tn,1,-1 do ttn=ttn+1 tt[ttn]=t[i] end end return tt end end function table.reverse(t) if t then local n=#t for i=1,floor(n/2) do local j=n-i+1 t[i],t[j]=t[j],t[i] end return t end end function table.sequenced(t,sep,simple) if not t then return "" end local n=#t local s={} if n>0 then for i=1,n do s[i]=tostring(t[i]) end else n=0 for k,v in sortedhash(t) do if simple then if v==true then n=n+1 s[n]=k elseif v and v~="" then n=n+1 s[n]=k.."="..tostring(v) end else n=n+1 s[n]=k.."="..tostring(v) end end end return concat(s,sep or " | ") end function table.print(t,...) if type(t)~="table" then print(tostring(t)) else serialize(print,t,...) end end setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end) function table.sub(t,i,j) return { unpack(t,i,j) } end function table.is_empty(t) return not t or not next(t) end function table.has_one_entry(t) return t and not next(t,next(t)) end function table.loweredkeys(t) local l={} for k,v in next,t do l[lower(k)]=v end return l end function table.unique(old) local hash={} local new={} local n=0 for i=1,#old do local oi=old[i] if not hash[oi] then n=n+1 new[n]=oi hash[oi]=true end end return new end function table.sorted(t,...) sort(t,...) return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-io"] = package.loaded["l-io"] or true -- original size: 8799, stripped down to: 6325 if not modules then modules={} end modules ['l-io']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local io=io local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format local concat=table.concat local floor=math.floor local type=type if string.find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator="\\",";" else io.fileseparator,io.pathseparator="/",":" end local function readall(f) return f:read("*all") end local function readall(f) local size=f:seek("end") if size==0 then return "" elseif size<1024*1024 then f:seek("set",0) return f:read('*all') else local done=f:seek("set",0) if size<1024*1024 then step=1024*1024 elseif size>16*1024*1024 then step=16*1024*1024 else step=floor(size/(1024*1024))*1024*1024/8 end local data={} while true do local r=f:read(step) if not r then return concat(data) else data[#data+1]=r end end end end io.readall=readall function io.loaddata(filename,textmode) local f=io.open(filename,(textmode and 'r') or 'rb') if f then local data=readall(f) f:close() if #data>0 then return data end end end function io.savedata(filename,data,joiner) local f=io.open(filename,"wb") if f then if type(data)=="table" then f:write(concat(data,joiner or "")) elseif type(data)=="function" then data(f) else f:write(data or "") end f:close() io.flush() return true else return false end end function io.loadlines(filename,n) local f=io.open(filename,'r') if not f then elseif n then local lines={} for i=1,n do local line=f:read("*lines") if line then lines[#lines+1]=line else break end end f:close() lines=concat(lines,"\n") if #lines>0 then return lines end else local line=f:read("*line") or "" f:close() if #line>0 then return line end end end function io.loadchunk(filename,n) local f=io.open(filename,'rb') if f then local data=f:read(n or 1024) f:close() if #data>0 then return data end end end function io.exists(filename) local f=io.open(filename) if f==nil then return false else f:close() return true end end function io.size(filename) local f=io.open(filename) if f==nil then return 0 else local s=f:seek("end") f:close() return s end end function io.noflines(f) if type(f)=="string" then local f=io.open(filename) if f then local n=f and io.noflines(f) or 0 f:close() return n else return 0 end else local n=0 for _ in f:lines() do n=n+1 end f:seek('set',0) return n end end local nextchar={ [ 4]=function(f) return f:read(1,1,1,1) end, [ 2]=function(f) return f:read(1,1) end, [ 1]=function(f) return f:read(1) end, [-2]=function(f) local a,b=f:read(1,1) return b,a end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) return d,c,b,a end } function io.characters(f,n) if f then return nextchar[n or 1],f end end local nextbyte={ [4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(a),byte(b),byte(c),byte(d) end end, [3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(a),byte(b),byte(c) end end, [2]=function(f) local a,b=f:read(1,1) if b then return byte(a),byte(b) end end, [1]=function (f) local a=f:read(1) if a then return byte(a) end end, [-2]=function (f) local a,b=f:read(1,1) if b then return byte(b),byte(a) end end, [-3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(c),byte(b),byte(a) end end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(d),byte(c),byte(b),byte(a) end end } function io.bytes(f,n) if f then return nextbyte[n or 1],f else return nil,nil end end function io.ask(question,default,options) while true do io.write(question) if options then io.write(format(" [%s]",concat(options,"|"))) end if default then io.write(format(" [%s]",default)) end io.write(format(" ")) io.flush() local answer=io.read() answer=gsub(answer,"^%s*(.*)%s*$","%1") if answer=="" and default then return default elseif not options then return answer else for k=1,#options do if options[k]==answer then return answer end end local pattern="^"..answer for k=1,#options do local v=options[k] if find(v,pattern) then return v end end end end end local function readnumber(f,n,m) if m then f:seek("set",n) n=m end if n==1 then return byte(f:read(1)) elseif n==2 then local a,b=byte(f:read(2),1,2) return 256*a+b elseif n==3 then local a,b,c=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==4 then local a,b,c,d=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==8 then local a,b=readnumber(f,4),readnumber(f,4) return 256*a+b elseif n==12 then local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4) return 256*256*a+256*b+c elseif n==-2 then local b,a=byte(f:read(2),1,2) return 256*a+b elseif n==-3 then local c,b,a=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==-4 then local d,c,b,a=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==-8 then local h,g,f,e,d,c,b,a=byte(f:read(8),1,8) return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h else return 0 end end io.readnumber=readnumber function io.readstring(f,n,m) if m then f:seek("set",n) n=m end local str=gsub(f:read(n),"\000","") return str end if not io.i_limiter then function io.i_limiter() end end if not io.o_limiter then function io.o_limiter() end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-number"] = package.loaded["l-number"] or true -- original size: 4939, stripped down to: 2830 if not modules then modules={} end modules ['l-number']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local tostring,tonumber=tostring,tonumber local format,floor,match,rep=string.format,math.floor,string.match,string.rep local concat,insert=table.concat,table.insert local lpegmatch=lpeg.match number=number or {} local number=number if bit32 then local btest,bor=bit32.btest,bit32.bor function number.bit(p) return 2^(p-1) end number.hasbit=btest number.setbit=bor function number.setbit(x,p) return btest(x,p) and x or x+p end function number.clearbit(x,p) return btest(x,p) and x-p or x end else function number.bit(p) return 2^(p-1) end function number.hasbit(x,p) return x%(p+p)>=p end function number.setbit(x,p) return (x%(p+p)>=p) and x or x+p end function number.clearbit(x,p) return (x%(p+p)>=p) and x-p or x end end if bit32 then local bextract=bit32.extract local t={ "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", "0","0","0","0","0","0","0","0", } function number.tobitstring(b,m) local n=32 for i=0,31 do local v=bextract(b,i) local k=32-i if v==1 then n=k t[k]="1" else t[k]="0" end end if m then m=33-m*8 if m<1 then m=1 end return concat(t,"",m) elseif n<8 then return concat(t) elseif n<16 then return concat(t,"",9) elseif n<24 then return concat(t,"",17) else return concat(t,"",25) end end else function number.tobitstring(n,m) if n>0 then local t={} while n>0 do insert(t,1,n%2>0 and 1 or 0) n=floor(n/2) end local nn=8-#t%8 if nn>0 and nn<8 then for i=1,nn do insert(t,1,0) end end if m then m=m*8-#t if m>0 then insert(t,1,rep("0",m)) end end return concat(t) elseif m then rep("00000000",m) else return "00000000" end end end function number.valid(str,default) return tonumber(str) or default or nil end function number.toevenhex(n) local s=format("%X",n) if #s%2==0 then return s else return "0"..s end end local one=lpeg.C(1-lpeg.S('')/tonumber)^1 function number.toset(n) return lpegmatch(one,tostring(n)) end local function bits(n,i,...) if n>0 then local m=n%2 local n=floor(n/2) if m>0 then return bits(n,i+1,i,...) else return bits(n,i+1,...) end else return... end end function number.bits(n) return { bits(n,1) } end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-set"] = package.loaded["l-set"] or true -- original size: 1923, stripped down to: 1133 if not modules then modules={} end modules ['l-set']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } set=set or {} local nums={} local tabs={} local concat=table.concat local next,type=next,type set.create=table.tohash function set.tonumber(t) if next(t) then local s="" for k,v in next,t do if v then s=s.." "..k end end local n=nums[s] if not n then n=#tabs+1 tabs[n]=t nums[s]=n end return n else return 0 end end function set.totable(n) if n==0 then return {} else return tabs[n] or {} end end function set.tolist(n) if n==0 or not tabs[n] then return "" else local t,n={},0 for k,v in next,tabs[n] do if v then n=n+1 t[n]=k end end return concat(t," ") end end function set.contains(n,s) if type(n)=="table" then return n[s] elseif n==0 then return false else local t=tabs[n] return t and t[s] end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-os"] = package.loaded["l-os"] or true -- original size: 14017, stripped down to: 8504 if not modules then modules={} end modules ['l-os']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local os=os local date,time=os.date,os.time local find,format,gsub,upper,gmatch=string.find,string.format,string.gsub,string.upper,string.gmatch local concat=table.concat local random,ceil,randomseed=math.random,math.ceil,math.randomseed local rawget,rawset,type,getmetatable,setmetatable,tonumber,tostring=rawget,rawset,type,getmetatable,setmetatable,tonumber,tostring math.initialseed=tonumber(string.sub(string.reverse(tostring(ceil(socket and socket.gettime()*10000 or time()))),1,6)) randomseed(math.initialseed) if not os.__getenv__ then os.__getenv__=os.getenv os.__setenv__=os.setenv if os.env then local osgetenv=os.getenv local ossetenv=os.setenv local osenv=os.env local _=osenv.PATH function os.setenv(k,v) if v==nil then v="" end local K=upper(k) osenv[K]=v if type(v)=="table" then v=concat(v,";") end ossetenv(K,v) end function os.getenv(k) local K=upper(k) local v=osenv[K] or osenv[k] or osgetenv(K) or osgetenv(k) if v=="" then return nil else return v end end else local ossetenv=os.setenv local osgetenv=os.getenv local osenv={} function os.setenv(k,v) if v==nil then v="" end local K=upper(k) osenv[K]=v end function os.getenv(k) local K=upper(k) local v=osenv[K] or osgetenv(K) or osgetenv(k) if v=="" then return nil else return v end end local function __index(t,k) return os.getenv(k) end local function __newindex(t,k,v) os.setenv(k,v) end os.env={} setmetatable(os.env,{ __index=__index,__newindex=__newindex } ) end end local execute,spawn,exec,iopopen,ioflush=os.execute,os.spawn or os.execute,os.exec or os.execute,io.popen,io.flush function os.execute(...) ioflush() return execute(...) end function os.spawn (...) ioflush() return spawn (...) end function os.exec (...) ioflush() return exec (...) end function io.popen (...) ioflush() return iopopen(...) end function os.resultof(command) local handle=io.popen(command,"r") return handle and handle:read("*all") or "" end if not io.fileseparator then if find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin" else io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix" end end os.type=os.type or (io.pathseparator==";" and "windows") or "unix" os.name=os.name or (os.type=="windows" and "mswin" ) or "linux" if os.type=="windows" then os.libsuffix,os.binsuffix,os.binsuffixes='dll','exe',{ 'exe','cmd','bat' } else os.libsuffix,os.binsuffix,os.binsuffixes='so','',{ '' } end local launchers={ windows="start %s", macosx="open %s", unix="$BROWSER %s &> /dev/null &", } function os.launch(str) os.execute(format(launchers[os.name] or launchers.unix,str)) end if not os.times then function os.times() return { utime=os.gettimeofday(), stime=0, cutime=0, cstime=0, } end end os.gettimeofday=os.gettimeofday or os.clock local startuptime=os.gettimeofday() function os.runtime() return os.gettimeofday()-startuptime end os.resolvers=os.resolvers or {} local resolvers=os.resolvers setmetatable(os,{ __index=function(t,k) local r=resolvers[k] return r and r(t,k) or nil end }) local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or "" local function guess() local architecture=os.resultof("uname -m") or "" if architecture~="" then return architecture end architecture=os.getenv("HOSTTYPE") or "" if architecture~="" then return architecture end return os.resultof("echo $HOSTTYPE") or "" end if platform~="" then os.platform=platform elseif os.type=="windows" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("PROCESSOR_ARCHITECTURE") or "" if find(architecture,"AMD64") then platform="mswin-64" else platform="mswin" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="linux" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform="linux-64" elseif find(architecture,"ppc") then platform="linux-ppc" else platform="linux" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="macosx" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("echo $HOSTTYPE") or "" if architecture=="" then platform="osx-intel" elseif find(architecture,"i386") then platform="osx-intel" elseif find(architecture,"x86_64") then platform="osx-64" else platform="osx-ppc" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="sunos" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("uname -m") or "" if find(architecture,"sparc") then platform="solaris-sparc" else platform="solaris-intel" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="freebsd" then function os.resolvers.platform(t,k) local platform,architecture="",os.resultof("uname -m") or "" if find(architecture,"amd64") then platform="freebsd-amd64" else platform="freebsd" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end elseif name=="kfreebsd" then function os.resolvers.platform(t,k) local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform="kfreebsd-amd64" else platform="kfreebsd-i386" end os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end else function os.resolvers.platform(t,k) local platform="linux" os.setenv("MTX_PLATFORM",platform) os.platform=platform return platform end end local t={ 8,9,"a","b" } function os.uuid() return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x", random(0xFFFF),random(0xFFFF), random(0x0FFF), t[ceil(random(4))] or 8,random(0x0FFF), random(0xFFFF), random(0xFFFF),random(0xFFFF),random(0xFFFF) ) end local d function os.timezone(delta) d=d or tonumber(tonumber(date("%H")-date("!%H"))) if delta then if d>0 then return format("+%02i:00",d) else return format("-%02i:00",-d) end else return 1 end end local timeformat=format("%%s%s",os.timezone(true)) local dateformat="!%Y-%m-%d %H:%M:%S" function os.fulltime(t,default) t=tonumber(t) or 0 if t>0 then elseif default then return default else t=nil end return format(timeformat,date(dateformat,t)) end local dateformat="%Y-%m-%d %H:%M:%S" function os.localtime(t,default) t=tonumber(t) or 0 if t>0 then elseif default then return default else t=nil end return date(dateformat,t) end function os.converttime(t,default) local t=tonumber(t) if t and t>0 then return date(dateformat,t) else return default or "-" end end local memory={} local function which(filename) local fullname=memory[filename] if fullname==nil then local suffix=file.suffix(filename) local suffixes=suffix=="" and os.binsuffixes or { suffix } for directory in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do local df=file.join(directory,filename) for i=1,#suffixes do local dfs=file.addsuffix(df,suffixes[i]) if io.exists(dfs) then fullname=dfs break end end end if not fullname then fullname=false end memory[filename]=fullname end return fullname end os.which=which os.where=which function os.today() return date("!*t") end function os.now() return date("!%Y-%m-%d %H:%M:%S") end if not os.sleep then local socket=socket function os.sleep(n) if not socket then socket=require("socket") end socket.sleep(n) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-file"] = package.loaded["l-file"] or true -- original size: 17777, stripped down to: 9653 if not modules then modules={} end modules ['l-file']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } file=file or {} local file=file if not lfs then lfs=optionalrequire("lfs") end if not lfs then lfs={ getcurrentdir=function() return "." end, attributes=function() return nil end, isfile=function(name) local f=io.open(name,'rb') if f then f:close() return true end end, isdir=function(name) print("you need to load lfs") return false end } elseif not lfs.isfile then local attributes=lfs.attributes function lfs.isdir(name) return attributes(name,"mode")=="directory" end function lfs.isfile(name) return attributes(name,"mode")=="file" end end local insert,concat=table.insert,table.concat local match,find,gmatch=string.match,string.find,string.gmatch local lpegmatch=lpeg.match local getcurrentdir,attributes=lfs.currentdir,lfs.attributes local checkedsplit=string.checkedsplit local P,R,S,C,Cs,Cp,Cc,Ct=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cp,lpeg.Cc,lpeg.Ct local colon=P(":") local period=P(".") local periods=P("..") local fwslash=P("/") local bwslash=P("\\") local slashes=S("\\/") local noperiod=1-period local noslashes=1-slashes local name=noperiod^1 local suffix=period/""*(1-period-slashes)^1*-1 local pattern=C((1-(slashes^1*noslashes^1*-1))^1)*P(1) local function pathpart(name,default) return name and lpegmatch(pattern,name) or default or "" end local pattern=(noslashes^0*slashes)^1*C(noslashes^1)*-1 local function basename(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes^1)^0*Cs((1-suffix)^1)*suffix^0 local function nameonly(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1 local function suffixonly(name) return name and lpegmatch(pattern,name) or "" end local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("") local function suffixesonly(name) if name then return lpegmatch(pattern,name) else return "" end end file.pathpart=pathpart file.basename=basename file.nameonly=nameonly file.suffixonly=suffixonly file.suffix=suffixonly file.suffixesonly=suffixesonly file.suffixes=suffixesonly file.dirname=pathpart file.extname=suffixonly local drive=C(R("az","AZ"))*colon local path=C((noslashes^0*slashes)^0) local suffix=period*C(P(1-period)^0*P(-1)) local base=C((1-suffix)^0) local rest=C(P(1)^0) drive=drive+Cc("") path=path+Cc("") base=base+Cc("") suffix=suffix+Cc("") local pattern_a=drive*path*base*suffix local pattern_b=path*base*suffix local pattern_c=C(drive*path)*C(base*suffix) local pattern_d=path*rest function file.splitname(str,splitdrive) if not str then elseif splitdrive then return lpegmatch(pattern_a,str) else return lpegmatch(pattern_b,str) end end function file.splitbase(str) if str then return lpegmatch(pattern_d,str) else return "",str end end function file.nametotable(str,splitdrive) if str then local path,drive,subpath,name,base,suffix=lpegmatch(pattern_c,str) if splitdrive then return { path=path, drive=drive, subpath=subpath, name=name, base=base, suffix=suffix, } else return { path=path, name=name, base=base, suffix=suffix, } end end end local pattern=Cs(((period*(1-period-slashes)^1*-1)/""+1)^1) function file.removesuffix(name) return name and lpegmatch(pattern,name) end local suffix=period/""*(1-period-slashes)^1*-1 local pattern=Cs((noslashes^0*slashes^1)^0*((1-suffix)^1))*Cs(suffix) function file.addsuffix(filename,suffix,criterium) if not filename or not suffix or suffix=="" then return filename elseif criterium==true then return filename.."."..suffix elseif not criterium then local n,s=lpegmatch(pattern,filename) if not s or s=="" then return filename.."."..suffix else return filename end else local n,s=lpegmatch(pattern,filename) if s and s~="" then local t=type(criterium) if t=="table" then for i=1,#criterium do if s==criterium[i] then return filename end end elseif t=="string" then if s==criterium then return filename end end end return (n or filename).."."..suffix end end local suffix=period*(1-period-slashes)^1*-1 local pattern=Cs((1-suffix)^0) function file.replacesuffix(name,suffix) if name and suffix and suffix~="" then return lpegmatch(pattern,name).."."..suffix else return name end end local reslasher=lpeg.replacer(P("\\"),"/") function file.reslash(str) return str and lpegmatch(reslasher,str) end function file.is_writable(name) if not name then elseif lfs.isdir(name) then name=name.."/m_t_x_t_e_s_t.tmp" local f=io.open(name,"wb") if f then f:close() os.remove(name) return true end elseif lfs.isfile(name) then local f=io.open(name,"ab") if f then f:close() return true end else local f=io.open(name,"ab") if f then f:close() os.remove(name) return true end end return false end local readable=P("r")*Cc(true) function file.is_readable(name) if name then local a=attributes(name) return a and lpegmatch(readable,a.permissions) or false else return false end end file.isreadable=file.is_readable file.iswritable=file.is_writable function file.size(name) if name then local a=attributes(name) return a and a.size or 0 else return 0 end end function file.splitpath(str,separator) return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator) end function file.joinpath(tab,separator) return tab and concat(tab,separator or io.pathseparator) end local stripper=Cs(P(fwslash)^0/""*reslasher) local isnetwork=fwslash*fwslash*(1-fwslash)+(1-fwslash-colon)^1*colon local isroot=fwslash^1*-1 local hasroot=fwslash^1 local deslasher=lpeg.replacer(S("\\/")^1,"/") function file.join(...) local lst={... } local one=lst[1] if lpegmatch(isnetwork,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) return one.."/"..two elseif lpegmatch(isroot,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) if lpegmatch(hasroot,two) then return two else return "/"..two end elseif one=="" then return lpegmatch(stripper,concat(lst,"/",2)) else return lpegmatch(deslasher,concat(lst,"/")) end end local drivespec=R("az","AZ")^1*colon local anchors=fwslash+drivespec local untouched=periods+(1-period)^1*P(-1) local splitstarter=(Cs(drivespec*(bwslash/"/"+fwslash)^0)+Cc(false))*Ct(lpeg.splitat(S("/\\")^1)) local absolute=fwslash function file.collapsepath(str,anchor) if not str then return end if anchor==true and not lpegmatch(anchors,str) then str=getcurrentdir().."/"..str end if str=="" or str=="." then return "." elseif lpegmatch(untouched,str) then return lpegmatch(reslasher,str) end local starter,oldelements=lpegmatch(splitstarter,str) local newelements={} local i=#oldelements while i>0 do local element=oldelements[i] if element=='.' then elseif element=='..' then local n=i-1 while n>0 do local element=oldelements[n] if element~='..' and element~='.' then oldelements[n]='.' break else n=n-1 end end if n<1 then insert(newelements,1,'..') end elseif element~="" then insert(newelements,1,element) end i=i-1 end if #newelements==0 then return starter or "." elseif starter then return starter..concat(newelements,'/') elseif lpegmatch(absolute,str) then return "/"..concat(newelements,'/') else newelements=concat(newelements,'/') if anchor=="." and find(str,"^%./") then return "./"..newelements else return newelements end end end local validchars=R("az","09","AZ","--","..") local pattern_a=lpeg.replacer(1-validchars) local pattern_a=Cs((validchars+P(1)/"-")^1) local whatever=P("-")^0/"" local pattern_b=Cs(whatever*(1-whatever*-1)^1) function file.robustname(str,strict) if str then str=lpegmatch(pattern_a,str) or str if strict then return lpegmatch(pattern_b,str) or str else return str end end end file.readdata=io.loaddata file.savedata=io.savedata function file.copy(oldname,newname) if oldname and newname then local data=io.loaddata(oldname) if data and data~="" then file.savedata(newname,data) end end end local letter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=period^0*fwslash+letter*colon+letter^1*separator+letter^1*fwslash local rootbased=fwslash+letter*colon lpeg.patterns.qualified=qualified lpeg.patterns.rootbased=rootbased function file.is_qualified_path(filename) return filename and lpegmatch(qualified,filename)~=nil end function file.is_rootbased_path(filename) return filename and lpegmatch(rootbased,filename)~=nil end function file.strip(name,dir) if name then local b,a=match(name,"^(.-)"..dir.."(.*)$") return a~="" and a or name end end function lfs.mkdirs(path) local full="" for sub in gmatch(path,"(/*[^\\/]+)") do full=full..sub lfs.mkdir(full) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-gzip"] = package.loaded["l-gzip"] or true -- original size: 1211, stripped down to: 1002 if not modules then modules={} end modules ['l-gzip']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if not gzip then return end local suffix,suffixes=file.suffix,file.suffixes function gzip.load(filename) local f=io.open(filename,"rb") if not f then elseif suffix(filename)=="gz" then f:close() local g=gzip.open(filename,"rb") if g then local str=g:read("*all") g:close() return str end else local str=f:read("*all") f:close() return str end end function gzip.save(filename,data) if suffix(filename)~="gz" then filename=filename..".gz" end local f=io.open(filename,"wb") if f then local s=zlib.compress(data or "",9,nil,15+16) f:write(s) f:close() return #s end end function gzip.suffix(filename) local suffix,extra=suffixes(filename) local gzipped=extra=="gz" return suffix,gzipped end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-md5"] = package.loaded["l-md5"] or true -- original size: 3760, stripped down to: 2088 if not modules then modules={} end modules ['l-md5']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if not md5 then md5=optionalrequire("md5") end if not md5 then md5={ sum=function(str) print("error: md5 is not loaded (sum ignored)") return str end, sumhexa=function(str) print("error: md5 is not loaded (sumhexa ignored)") return str end, } end local md5,file=md5,file local gsub,format,byte=string.gsub,string.format,string.byte local md5sum=md5.sum local function convert(str,fmt) return (gsub(md5sum(str),".",function(chr) return format(fmt,byte(chr)) end)) end if not md5.HEX then function md5.HEX(str) return convert(str,"%02X") end end if not md5.hex then function md5.hex(str) return convert(str,"%02x") end end if not md5.dec then function md5.dec(str) return convert(str,"%03i") end end function file.needsupdating(oldname,newname,threshold) local oldtime=lfs.attributes(oldname,"modification") if oldtime then local newtime=lfs.attributes(newname,"modification") if not newtime then return true elseif newtime>=oldtime then return false elseif oldtime-newtime<(threshold or 1) then return false else return true end else return false end end file.needs_updating=file.needsupdating function file.syncmtimes(oldname,newname) local oldtime=lfs.attributes(oldname,"modification") if oldtime and lfs.isfile(newname) then lfs.touch(newname,oldtime,oldtime) end end function file.checksum(name) if md5 then local data=io.loaddata(name) if data then return md5.HEX(data) end end return nil end function file.loadchecksum(name) if md5 then local data=io.loaddata(name..".md5") return data and (gsub(data,"%s","")) end return nil end function file.savechecksum(name,checksum) if not checksum then checksum=file.checksum(name) end if checksum then io.savedata(name..".md5",checksum) return checksum end return nil end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-url"] = package.loaded["l-url"] or true -- original size: 11806, stripped down to: 5417 if not modules then modules={} end modules ['l-url']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local char,format,byte=string.char,string.format,string.byte local concat=table.concat local tonumber,type=tonumber,type local P,C,R,S,Cs,Cc,Ct,Cf,Cg,V=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Cf,lpeg.Cg,lpeg.V local lpegmatch,lpegpatterns,replacer=lpeg.match,lpeg.patterns,lpeg.replacer url=url or {} local url=url local tochar=function(s) return char(tonumber(s,16)) end local colon=P(":") local qmark=P("?") local hash=P("#") local slash=P("/") local percent=P("%") local endofstring=P(-1) local hexdigit=R("09","AF","af") local plus=P("+") local nothing=Cc("") local escapedchar=(percent*C(hexdigit*hexdigit))/tochar local escaped=(plus/" ")+escapedchar local noslash=P("/")/"" local schemestr=Cs((escaped+(1-colon-slash-qmark-hash))^2) local authoritystr=Cs((escaped+(1- slash-qmark-hash))^0) local pathstr=Cs((escaped+(1- qmark-hash))^0) local querystr=Cs(((1- hash))^0) local fragmentstr=Cs((escaped+(1- endofstring))^0) local scheme=schemestr*colon+nothing local authority=slash*slash*authoritystr+nothing local path=slash*pathstr+nothing local query=qmark*querystr+nothing local fragment=hash*fragmentstr+nothing local validurl=scheme*authority*path*query*fragment local parser=Ct(validurl) lpegpatterns.url=validurl lpegpatterns.urlsplitter=parser local escapes={} setmetatable(escapes,{ __index=function(t,k) local v=format("%%%02X",byte(k)) t[k]=v return v end }) local escaper=Cs((R("09","AZ","az")^1+P(" ")/"%%20"+S("-./_")^1+P(1)/escapes)^0) local unescaper=Cs((escapedchar+1)^0) lpegpatterns.urlunescaped=escapedchar lpegpatterns.urlescaper=escaper lpegpatterns.urlunescaper=unescaper local function split(str) return (type(str)=="string" and lpegmatch(parser,str)) or str end local isscheme=schemestr*colon*slash*slash local function hasscheme(str) if str then local scheme=lpegmatch(isscheme,str) return scheme~="" and scheme or false else return false end end local rootletter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=P(".")^0*P("/")+rootletter*P(":")+rootletter^1*separator+rootletter^1*P("/") local rootbased=P("/")+rootletter*P(":") local barswapper=replacer("|",":") local backslashswapper=replacer("\\","/") local equal=P("=") local amp=P("&") local key=Cs(((escapedchar+1)-equal )^0) local value=Cs(((escapedchar+1)-amp -endofstring)^0) local splitquery=Cf (Ct("")*P { "sequence", sequence=V("pair")*(amp*V("pair"))^0, pair=Cg(key*equal*value), },rawset) local function hashed(str) if str=="" then return { scheme="invalid", original=str, } end local s=split(str) local rawscheme=s[1] local rawquery=s[4] local somescheme=rawscheme~="" local somequery=rawquery~="" if not somescheme and not somequery then s={ scheme="file", authority="", path=str, query="", fragment="", original=str, noscheme=true, filename=str, } else local authority,path,filename=s[2],s[3] if authority=="" then filename=path elseif path=="" then filename="" else filename=authority.."/"..path end s={ scheme=rawscheme, authority=authority, path=path, query=lpegmatch(unescaper,rawquery), queries=lpegmatch(splitquery,rawquery), fragment=s[5], original=str, noscheme=false, filename=filename, } end return s end url.split=split url.hasscheme=hasscheme url.hashed=hashed function url.addscheme(str,scheme) if hasscheme(str) then return str elseif not scheme then return "file:///"..str else return scheme..":///"..str end end function url.construct(hash) local fullurl,f={},0 local scheme,authority,path,query,fragment=hash.scheme,hash.authority,hash.path,hash.query,hash.fragment if scheme and scheme~="" then f=f+1;fullurl[f]=scheme.."://" end if authority and authority~="" then f=f+1;fullurl[f]=authority end if path and path~="" then f=f+1;fullurl[f]="/"..path end if query and query~="" then f=f+1;fullurl[f]="?"..query end if fragment and fragment~="" then f=f+1;fullurl[f]="#"..fragment end return lpegmatch(escaper,concat(fullurl)) end local pattern=Cs(noslash*R("az","AZ")*(S(":|")/":")*noslash*P(1)^0) function url.filename(filename) local spec=hashed(filename) local path=spec.path return (spec.scheme=="file" and path and lpegmatch(pattern,path)) or filename end local function escapestring(str) return lpegmatch(escaper,str) end url.escape=escapestring function url.query(str) if type(str)=="string" then return lpegmatch(splitquery,str) or "" else return str end end function url.toquery(data) local td=type(data) if td=="string" then return #str and escape(data) or nil elseif td=="table" then if next(data) then local t={} for k,v in next,data do t[#t+1]=format("%s=%s",k,escapestring(v)) end return concat(t,"&") end else end end local pattern=Cs(noslash^0*(1-noslash*P(-1))^0) function url.barepath(path) if not path or path=="" then return "" else return lpegmatch(pattern,path) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-dir"] = package.loaded["l-dir"] or true -- original size: 13738, stripped down to: 8560 if not modules then modules={} end modules ['l-dir']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,select=type,select local find,gmatch,match,gsub=string.find,string.gmatch,string.match,string.gsub local concat,insert,remove,unpack=table.concat,table.insert,table.remove,table.unpack local lpegmatch=lpeg.match local P,S,R,C,Cc,Cs,Ct,Cv,V=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Cv,lpeg.V dir=dir or {} local dir=dir local lfs=lfs local attributes=lfs.attributes local walkdir=lfs.dir local isdir=lfs.isdir local isfile=lfs.isfile local currentdir=lfs.currentdir local chdir=lfs.chdir if not isdir then function isdir(name) local a=attributes(name) return a and a.mode=="directory" end lfs.isdir=isdir end if not isfile then function isfile(name) local a=attributes(name) return a and a.mode=="file" end lfs.isfile=isfile end function dir.current() return (gsub(currentdir(),"\\","/")) end local lfsisdir=isdir local function isdir(path) path=gsub(path,"[/\\]+$","") return lfsisdir(path) end lfs.isdir=isdir local function globpattern(path,patt,recurse,action) if path=="/" then path=path.."." elseif not find(path,"/$") then path=path..'/' end if isdir(path) then for name in walkdir(path) do local full=path..name local mode=attributes(full,'mode') if mode=='file' then if find(full,patt) then action(full) end elseif recurse and (mode=="directory") and (name~='.') and (name~="..") then globpattern(full,patt,recurse,action) end end end end dir.globpattern=globpattern local function collectpattern(path,patt,recurse,result) local ok,scanner result=result or {} if path=="/" then ok,scanner,first=xpcall(function() return walkdir(path..".") end,function() end) else ok,scanner,first=xpcall(function() return walkdir(path) end,function() end) end if ok and type(scanner)=="function" then if not find(path,"/$") then path=path..'/' end for name in scanner,first do local full=path..name local attr=attributes(full) local mode=attr.mode if mode=='file' then if find(full,patt) then result[name]=attr end elseif recurse and (mode=="directory") and (name~='.') and (name~="..") then attr.list=collectpattern(full,patt,recurse) result[name]=attr end end end return result end dir.collectpattern=collectpattern local pattern=Ct { [1]=(C(P(".")+P("/")^1)+C(R("az","AZ")*P(":")*P("/")^0)+Cc("./"))*V(2)*V(3), [2]=C(((1-S("*?/"))^0*P("/"))^0), [3]=C(P(1)^0) } local filter=Cs (( P("**")/".*"+P("*")/"[^/]*"+P("?")/"[^/]"+P(".")/"%%."+P("+")/"%%+"+P("-")/"%%-"+P(1) )^0 ) local function glob(str,t) if type(t)=="function" then if type(str)=="table" then for s=1,#str do glob(str[s],t) end elseif isfile(str) then t(str) else local split=lpegmatch(pattern,str) if split then local root,path,base=split[1],split[2],split[3] local recurse=find(base,"%*%*") local start=root..path local result=lpegmatch(filter,start..base) globpattern(start,result,recurse,t) end end else if type(str)=="table" then local t=t or {} for s=1,#str do glob(str[s],t) end return t elseif isfile(str) then if t then t[#t+1]=str return t else return { str } end else local split=lpegmatch(pattern,str) if split then local t=t or {} local action=action or function(name) t[#t+1]=name end local root,path,base=split[1],split[2],split[3] local recurse=find(base,"%*%*") local start=root..path local result=lpegmatch(filter,start..base) globpattern(start,result,recurse,action) return t else return {} end end end end dir.glob=glob local function globfiles(path,recurse,func,files) if type(func)=="string" then local s=func func=function(name) return find(name,s) end end files=files or {} local noffiles=#files for name in walkdir(path) do if find(name,"^%.") then else local mode=attributes(name,'mode') if mode=="directory" then if recurse then globfiles(path.."/"..name,recurse,func,files) end elseif mode=="file" then if not func or func(name) then noffiles=noffiles+1 files[noffiles]=path.."/"..name end end end end return files end dir.globfiles=globfiles function dir.ls(pattern) return concat(glob(pattern),"\n") end local make_indeed=true local onwindows=os.type=="windows" or find(os.getenv("PATH"),";") if onwindows then function dir.mkdirs(...) local str,pth="","" for i=1,select("#",...) do local s=select(i,...) if s=="" then elseif str=="" then str=s else str=str.."/"..s end end local first,middle,last local drive=false first,middle,last=match(str,"^(//)(//*)(.*)$") if first then else first,last=match(str,"^(//)/*(.-)$") if first then middle,last=match(str,"([^/]+)/+(.-)$") if middle then pth="//"..middle else pth="//"..last last="" end else first,middle,last=match(str,"^([a-zA-Z]:)(/*)(.-)$") if first then pth,drive=first..middle,true else middle,last=match(str,"^(/*)(.-)$") if not middle then last=str end end end end for s in gmatch(last,"[^/]+") do if pth=="" then pth=s elseif drive then pth,drive=pth..s,false else pth=pth.."/"..s end if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end return pth,(isdir(pth)==true) end else function dir.mkdirs(...) local str,pth="","" for i=1,select("#",...) do local s=select(i,...) if s and s~="" then if str~="" then str=str.."/"..s else str=s end end end str=gsub(str,"/+","/") if find(str,"^/") then pth="/" for s in gmatch(str,"[^/]+") do local first=(pth=="/") if first then pth=pth..s else pth=pth.."/"..s end if make_indeed and not first and not isdir(pth) then lfs.mkdir(pth) end end else pth="." for s in gmatch(str,"[^/]+") do pth=pth.."/"..s if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end end return pth,(isdir(pth)==true) end end dir.makedirs=dir.mkdirs if onwindows then function dir.expandname(str) local first,nothing,last=match(str,"^(//)(//*)(.*)$") if first then first=dir.current().."/" end if not first then first,last=match(str,"^(//)/*(.*)$") end if not first then first,last=match(str,"^([a-zA-Z]:)(.*)$") if first and not find(last,"^/") then local d=currentdir() if chdir(first) then first=dir.current() end chdir(d) end end if not first then first,last=dir.current(),str end last=gsub(last,"//","/") last=gsub(last,"/%./","/") last=gsub(last,"^/*","") first=gsub(first,"/*$","") if last=="" or last=="." then return first else return first.."/"..last end end else function dir.expandname(str) if not find(str,"^/") then str=currentdir().."/"..str end str=gsub(str,"//","/") str=gsub(str,"/%./","/") str=gsub(str,"(.)/%.$","%1") return str end end file.expandname=dir.expandname local stack={} function dir.push(newdir) insert(stack,currentdir()) if newdir and newdir~="" then chdir(newdir) end end function dir.pop() local d=remove(stack) if d then chdir(d) end return d end local function found(...) for i=1,select("#",...) do local path=select(i,...) local kind=type(path) if kind=="string" then if isdir(path) then return path end elseif kind=="table" then local path=found(unpack(path)) if path then return path end end end end dir.found=found end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-boolean"] = package.loaded["l-boolean"] or true -- original size: 1781, stripped down to: 1503 if not modules then modules={} end modules ['l-boolean']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber boolean=boolean or {} local boolean=boolean function boolean.tonumber(b) if b then return 1 else return 0 end end function toboolean(str,tolerant) if str==nil then return false elseif str==false then return false elseif str==true then return true elseif str=="true" then return true elseif str=="false" then return false elseif not tolerant then return false elseif str==0 then return false elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end string.toboolean=toboolean function string.booleanstring(str) if str=="0" then return false elseif str=="1" then return true elseif str=="" then return false elseif str=="false" then return false elseif str=="true" then return true elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end function string.is_boolean(str,default) if type(str)=="string" then if str=="true" or str=="yes" or str=="on" or str=="t" then return true elseif str=="false" or str=="no" or str=="off" or str=="f" then return false end end return default end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-unicode"] = package.loaded["l-unicode"] or true -- original size: 26810, stripped down to: 11943 if not modules then modules={} end modules ['l-unicode']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utf=utf or (unicode and unicode.utf8) or {} utf.characters=utf.characters or string.utfcharacters utf.values=utf.values or string.utfvalues local type=type local char,byte,format,sub=string.char,string.byte,string.format,string.sub local concat=table.concat local P,C,R,Cs,Ct,Cmt,Cc,Carg,Cp=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Ct,lpeg.Cmt,lpeg.Cc,lpeg.Carg,lpeg.Cp local lpegmatch,patterns=lpeg.match,lpeg.patterns local bytepairs=string.bytepairs local finder=lpeg.finder local replacer=lpeg.replacer local utfvalues=utf.values local utfgmatch=utf.gmatch local p_utftype=patterns.utftype local p_utfoffset=patterns.utfoffset local p_utf8char=patterns.utf8char local p_utf8byte=patterns.utf8byte local p_utfbom=patterns.utfbom local p_newline=patterns.newline local p_whitespace=patterns.whitespace if not unicode then unicode={ utf=utf } end if not utf.char then local floor,char=math.floor,string.char function utf.char(n) if n<0x80 then return char(n) elseif n<0x800 then return char( 0xC0+floor(n/0x40), 0x80+(n%0x40) ) elseif n<0x10000 then return char( 0xE0+floor(n/0x1000), 0x80+(floor(n/0x40)%0x40), 0x80+(n%0x40) ) elseif n<0x200000 then return char( 0xF0+floor(n/0x40000), 0x80+(floor(n/0x1000)%0x40), 0x80+(floor(n/0x40)%0x40), 0x80+(n%0x40) ) else return "" end end end if not utf.byte then local utf8byte=patterns.utf8byte function utf.byte(c) return lpegmatch(utf8byte,c) end end local utfchar,utfbyte=utf.char,utf.byte function utf.filetype(data) return data and lpegmatch(p_utftype,data) or "unknown" end local toentities=Cs ( ( patterns.utf8one+( patterns.utf8two+patterns.utf8three+patterns.utf8four )/function(s) local b=utfbyte(s) if b<127 then return s else return format("&#%X;",b) end end )^0 ) patterns.toentities=toentities function utf.toentities(str) return lpegmatch(toentities,str) end local one=P(1) local two=C(1)*C(1) local four=C(R(utfchar(0xD8),utfchar(0xFF)))*C(1)*C(1)*C(1) local pattern=P("\254\255")*Cs(( four/function(a,b,c,d) local ab=0xFF*byte(a)+byte(b) local cd=0xFF*byte(c)+byte(d) return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000) end+two/function(a,b) return utfchar(byte(a)*256+byte(b)) end+one )^1 )+P("\255\254")*Cs(( four/function(b,a,d,c) local ab=0xFF*byte(a)+byte(b) local cd=0xFF*byte(c)+byte(d) return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000) end+two/function(b,a) return utfchar(byte(a)*256+byte(b)) end+one )^1 ) function string.toutf(s) return lpegmatch(pattern,s) or s end local validatedutf=Cs ( ( patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four+P(1)/"�" )^0 ) patterns.validatedutf=validatedutf function utf.is_valid(str) return type(str)=="string" and lpegmatch(validatedutf,str) or false end if not utf.len then local n,f=0,1 local utfcharcounter=patterns.utfbom^-1*Cmt ( Cc(1)*patterns.utf8one^1+Cc(2)*patterns.utf8two^1+Cc(3)*patterns.utf8three^1+Cc(4)*patterns.utf8four^1, function(_,t,d) n=n+(t-f)/d f=t return true end )^0 function utf.len(str) n,f=0,1 lpegmatch(utfcharcounter,str or "") return n end end utf.length=utf.len if not utf.sub then local utflength=utf.length local b,e,n,first,last=0,0,0,0,0 local function slide_zero(s,p) n=n+1 if n>=last then e=p-1 else return p end end local function slide_one(s,p) n=n+1 if n==first then b=p end if n>=last then e=p-1 else return p end end local function slide_two(s,p) n=n+1 if n==first then b=p else return true end end local pattern_zero=Cmt(p_utf8char,slide_zero)^0 local pattern_one=Cmt(p_utf8char,slide_one )^0 local pattern_two=Cmt(p_utf8char,slide_two )^0 function utf.sub(str,start,stop) if not start then return str end if start==0 then start=1 end if not stop then if start<0 then local l=utflength(str) start=l+start else start=start-1 end b,n,first=0,0,start lpegmatch(pattern_two,str) if n>=first then return sub(str,b) else return "" end end if start<0 or stop<0 then local l=utf.length(str) if start<0 then start=l+start if start<=0 then start=1 else start=start+1 end end if stop<0 then stop=l+stop if stop==0 then stop=1 else stop=stop+1 end end end if start>stop then return "" elseif start>1 then b,e,n,first,last=0,0,0,start-1,stop lpegmatch(pattern_one,str) if n>=first and e==0 then e=#str end return sub(str,b,e) else b,e,n,last=1,0,0,stop lpegmatch(pattern_zero,str) if e==0 then e=#str end return sub(str,b,e) end end end function utf.remapper(mapping) local pattern=Cs((p_utf8char/mapping)^0) return function(str) if not str or str=="" then return "" else return lpegmatch(pattern,str) end end,pattern end function utf.replacer(t) local r=replacer(t,false,false,true) return function(str) return lpegmatch(r,str) end end function utf.subtituter(t) local f=finder (t) local r=replacer(t,false,false,true) return function(str) local i=lpegmatch(f,str) if not i then return str elseif i>#str then return str else return lpegmatch(r,str) end end end local utflinesplitter=p_utfbom^-1*lpeg.tsplitat(p_newline) local utfcharsplitter_ows=p_utfbom^-1*Ct(C(p_utf8char)^0) local utfcharsplitter_iws=p_utfbom^-1*Ct((p_whitespace^1+C(p_utf8char))^0) local utfcharsplitter_raw=Ct(C(p_utf8char)^0) patterns.utflinesplitter=utflinesplitter function utf.splitlines(str) return lpegmatch(utflinesplitter,str or "") end function utf.split(str,ignorewhitespace) if ignorewhitespace then return lpegmatch(utfcharsplitter_iws,str or "") else return lpegmatch(utfcharsplitter_ows,str or "") end end function utf.totable(str) return lpegmatch(utfcharsplitter_raw,str) end function utf.magic(f) local str=f:read(4) or "" local off=lpegmatch(p_utfoffset,str) if off<4 then f:seek('set',off) end return lpegmatch(p_utftype,str) end local function utf16_to_utf8_be(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,0 for left,right in bytepairs(t[i]) do if right then local now=256*left+right if more>0 then now=(more-0xD800)*0x400+(now-0xDC00)+0x10000 more=0 r=r+1 result[r]=utfchar(now) elseif now>=0xD800 and now<=0xDBFF then more=now else r=r+1 result[r]=utfchar(now) end end end t[i]=concat(result,"",1,r) end return t end local function utf16_to_utf8_le(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,0 for left,right in bytepairs(t[i]) do if right then local now=256*right+left if more>0 then now=(more-0xD800)*0x400+(now-0xDC00)+0x10000 more=0 r=r+1 result[r]=utfchar(now) elseif now>=0xD800 and now<=0xDBFF then more=now else r=r+1 result[r]=utfchar(now) end end end t[i]=concat(result,"",1,r) end return t end local function utf32_to_utf8_be(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,-1 for a,b in bytepairs(t[i]) do if a and b then if more<0 then more=256*256*256*a+256*256*b else r=r+1 result[t]=utfchar(more+256*a+b) more=-1 end else break end end t[i]=concat(result,"",1,r) end return t end local function utf32_to_utf8_le(t) if type(t)=="string" then t=lpegmatch(utflinesplitter,t) end local result={} for i=1,#t do local r,more=0,-1 for a,b in bytepairs(t[i]) do if a and b then if more<0 then more=256*b+a else r=r+1 result[t]=utfchar(more+256*256*256*b+256*256*a) more=-1 end else break end end t[i]=concat(result,"",1,r) end return t end utf.utf32_to_utf8_be=utf32_to_utf8_be utf.utf32_to_utf8_le=utf32_to_utf8_le utf.utf16_to_utf8_be=utf16_to_utf8_be utf.utf16_to_utf8_le=utf16_to_utf8_le function utf.utf8_to_utf8(t) return type(t)=="string" and lpegmatch(utflinesplitter,t) or t end function utf.utf16_to_utf8(t,endian) return endian and utf16_to_utf8_be(t) or utf16_to_utf8_le(t) or t end function utf.utf32_to_utf8(t,endian) return endian and utf32_to_utf8_be(t) or utf32_to_utf8_le(t) or t end local function little(c) local b=byte(c) if b<0x10000 then return char(b%256,b/256) else b=b-0x10000 local b1,b2=b/1024+0xD800,b%1024+0xDC00 return char(b1%256,b1/256,b2%256,b2/256) end end local function big(c) local b=byte(c) if b<0x10000 then return char(b/256,b%256) else b=b-0x10000 local b1,b2=b/1024+0xD800,b%1024+0xDC00 return char(b1/256,b1%256,b2/256,b2%256) end end local _,l_remap=utf.remapper(little) local _,b_remap=utf.remapper(big) function utf.utf8_to_utf16(str,littleendian) if littleendian then return char(255,254)..lpegmatch(l_remap,str) else return char(254,255)..lpegmatch(b_remap,str) end end local pattern=Cs ( (p_utf8byte/function(unicode ) return format("0x%04X",unicode) end)*(p_utf8byte*Carg(1)/function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0 ) function utf.tocodes(str,separator) return lpegmatch(pattern,str,1,separator or " ") end function utf.ustring(s) return format("U+%05X",type(s)=="number" and s or utfbyte(s)) end function utf.xstring(s) return format("0x%05X",type(s)=="number" and s or utfbyte(s)) end local p_nany=p_utf8char/"" if utfgmatch then function utf.count(str,what) if type(what)=="string" then local n=0 for _ in utfgmatch(str,what) do n=n+1 end return n else return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str) end end else local cache={} function utf.count(str,what) if type(what)=="string" then local p=cache[what] if not p then p=Cs((P(what)/" "+p_nany)^0) cache[p]=p end return #lpegmatch(p,str) else return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str) end end end if not utf.characters then function utf.characters(str) return gmatch(str,".[\128-\191]*") end string.utfcharacters=utf.characters end if not utf.values then local find=string.find local dummy=function() end function utf.values(str) local n=#str if n==0 then return dummy elseif n==1 then return function() return utfbyte(str) end else local p=1 return function() local b,e=find(str,".[\128-\191]*",p) if b then p=e+1 return utfbyte(sub(str,b,e)) end end end end string.utfvalues=utf.values end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true -- original size: 915, stripped down to: 836 if not modules then modules={} end modules ['l-math']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local floor,sin,cos,tan=math.floor,math.sin,math.cos,math.tan if not math.round then function math.round(x) return floor(x+0.5) end end if not math.div then function math.div(n,m) return floor(n/m) end end if not math.mod then function math.mod(n,m) return n%m end end local pipi=2*math.pi/360 if not math.sind then function math.sind(d) return sin(d*pipi) end function math.cosd(d) return cos(d*pipi) end function math.tand(d) return tan(d*pipi) end end if not math.odd then function math.odd (n) return n%2~=0 end function math.even(n) return n%2==0 end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-str"] = package.loaded["util-str"] or true -- original size: 22834, stripped down to: 12570 if not modules then modules={} end modules ['util-str']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.strings=utilities.strings or {} local strings=utilities.strings local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub local load,dump=load,string.dump local tonumber,type,tostring=tonumber,type,tostring local unpack,concat=table.unpack,table.concat local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc local patterns,lpegmatch=lpeg.patterns,lpeg.match local utfchar,utfbyte=utf.char,utf.byte local loadstripped=_LUAVERSION<5.2 and load or function(str) return load(dump(load(str),true)) end if not number then number={} end local stripper=patterns.stripzeros local function points(n) return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536)) end local function basepoints(n) return (not n or n==0) and "0bp" or lpegmatch(stripper,format("%.5fbp",n*(7200/7227)/65536)) end number.points=points number.basepoints=basepoints local rubish=patterns.spaceortab^0*patterns.newline local anyrubish=patterns.spaceortab+patterns.newline local anything=patterns.anything local stripped=(patterns.spaceortab^1/"")*patterns.newline local leading=rubish^0/"" local trailing=(anyrubish^1*patterns.endofstring)/"" local redundant=rubish^3/"\n" local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0) function strings.collapsecrlf(str) return lpegmatch(pattern,str) end local repeaters={} function strings.newrepeater(str,offset) offset=offset or 0 local s=repeaters[str] if not s then s={} repeaters[str]=s end local t=s[offset] if t then return t end t={} setmetatable(t,{ __index=function(t,k) if not k then return "" end local n=k+offset local s=n>0 and rep(str,n) or "" t[k]=s return s end }) s[offset]=t return t end local extra,tab,start=0,0,4,0 local nspaces=strings.newrepeater(" ") string.nspaces=nspaces local pattern=Carg(1)/function(t) extra,tab,start=0,t or 7,1 end*Cs(( Cp()*patterns.tab/function(position) local current=(position-start+1)+extra local spaces=tab-(current-1)%tab if spaces>0 then extra=extra+spaces-1 return nspaces[spaces] else return "" end end+patterns.newline*Cp()/function(position) extra,start=0,position end+patterns.anything )^1) function strings.tabtospace(str,tab) return lpegmatch(pattern,str,1,tab or 7) end function strings.striplong(str) str=gsub(str,"^%s*","") str=gsub(str,"[\n\r]+ *","\n") return str end function strings.nice(str) str=gsub(str,"[:%-+_]+"," ") return str end local n=0 local sequenced=table.sequenced function string.autodouble(s,sep) if s==nil then return '""' end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ('"'..sequenced(s,sep or ",")..'"') end return ('"'..tostring(s)..'"') end function string.autosingle(s,sep) if s==nil then return "''" end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ("'"..sequenced(s,sep or ",").."'") end return ("'"..tostring(s).."'") end local tracedchars={} string.tracedchars=tracedchars strings.tracers=tracedchars function string.tracedchar(b) if type(b)=="number" then return tracedchars[b] or (utfchar(b).." (U+"..format('%05X',b)..")") else local c=utfbyte(b) return tracedchars[c] or (b.." (U+"..format('%05X',c)..")") end end function number.signed(i) if i>0 then return "+",i else return "-",-i end end local preamble=[[ local type = type local tostring = tostring local tonumber = tonumber local format = string.format local concat = table.concat local signed = number.signed local points = number.points local basepoints = number.basepoints local utfchar = utf.char local utfbyte = utf.byte local lpegmatch = lpeg.match local nspaces = string.nspaces local tracedchar = string.tracedchar local autosingle = string.autosingle local autodouble = string.autodouble local sequenced = table.sequenced ]] local template=[[ %s %s return function(%s) return %s end ]] local arguments={ "a1" } setmetatable(arguments,{ __index=function(t,k) local v=t[k-1]..",a"..k t[k]=v return v end }) local prefix_any=C((S("+- .")+R("09"))^0) local prefix_tab=C((1-R("az","AZ","09","%%"))^0) local format_s=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',a%s)",f,n) else return format("(a%s or '')",n) end end local format_S=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',tostring(a%s))",f,n) else return format("tostring(a%s)",n) end end local format_q=function() n=n+1 return format("(a%s and format('%%q',a%s) or '')",n,n) end local format_Q=function() n=n+1 return format("format('%%q',tostring(a%s))",n) end local format_i=function(f) n=n+1 if f and f~="" then return format("format('%%%si',a%s)",f,n) else return format("a%s",n) end end local format_d=format_i local format_I=function(f) n=n+1 return format("format('%%s%%%si',signed(a%s))",f,n) end local format_f=function(f) n=n+1 return format("format('%%%sf',a%s)",f,n) end local format_g=function(f) n=n+1 return format("format('%%%sg',a%s)",f,n) end local format_G=function(f) n=n+1 return format("format('%%%sG',a%s)",f,n) end local format_e=function(f) n=n+1 return format("format('%%%se',a%s)",f,n) end local format_E=function(f) n=n+1 return format("format('%%%sE',a%s)",f,n) end local format_x=function(f) n=n+1 return format("format('%%%sx',a%s)",f,n) end local format_X=function(f) n=n+1 return format("format('%%%sX',a%s)",f,n) end local format_o=function(f) n=n+1 return format("format('%%%so',a%s)",f,n) end local format_c=function() n=n+1 return format("utfchar(a%s)",n) end local format_C=function() n=n+1 return format("tracedchar(a%s)",n) end local format_r=function(f) n=n+1 return format("format('%%%s.0f',a%s)",f,n) end local format_h=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_H=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_u=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_U=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_p=function() n=n+1 return format("points(a%s)",n) end local format_b=function() n=n+1 return format("basepoints(a%s)",n) end local format_t=function(f) n=n+1 if f and f~="" then return format("concat(a%s,%q)",n,f) else return format("concat(a%s)",n) end end local format_T=function(f) n=n+1 if f and f~="" then return format("sequenced(a%s,%q)",n,f) else return format("sequenced(a%s)",n) end end local format_l=function() n=n+1 return format("(a%s and 'true' or 'false')",n) end local format_L=function() n=n+1 return format("(a%s and 'TRUE' or 'FALSE')",n) end local format_N=function() n=n+1 return format("tostring(tonumber(a%s) or a%s)",n,n) end local format_a=function(f) n=n+1 if f and f~="" then return format("autosingle(a%s,%q)",n,f) else return format("autosingle(a%s)",n) end end local format_A=function(f) n=n+1 if f and f~="" then return format("autodouble(a%s,%q)",n,f) else return format("autodouble(a%s)",n) end end local format_w=function(f) n=n+1 f=tonumber(f) if f then return format("nspaces[%s+a%s]",f,n) else return format("nspaces[a%s]",n) end end local format_W=function(f) return format("nspaces[%s]",tonumber(f) or 0) end local format_rest=function(s) return format("%q",s) end local format_extension=function(extensions,f,name) local extension=extensions[name] or "tostring(%s)" local f=tonumber(f) or 1 if f==0 then return extension elseif f==1 then n=n+1 local a="a"..n return format(extension,a,a) elseif f<0 then local a="a"..(n+f+1) return format(extension,a,a) else local t={} for i=1,f do n=n+1 t[#t+1]="a"..n end return format(extension,unpack(t)) end end local builder=Cs { "start", start=( ( P("%")/""*( V("!") +V("s")+V("q")+V("i")+V("d")+V("f")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o") +V("c")+V("C")+V("S") +V("Q") +V("N") +V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("h") +V("w") +V("W") +V("a") +V("A") +V("*") )+V("*") )*(P(-1)+Carg(1)) )^0, ["s"]=(prefix_any*P("s"))/format_s, ["q"]=(prefix_any*P("q"))/format_q, ["i"]=(prefix_any*P("i"))/format_i, ["d"]=(prefix_any*P("d"))/format_d, ["f"]=(prefix_any*P("f"))/format_f, ["g"]=(prefix_any*P("g"))/format_g, ["G"]=(prefix_any*P("G"))/format_G, ["e"]=(prefix_any*P("e"))/format_e, ["E"]=(prefix_any*P("E"))/format_E, ["x"]=(prefix_any*P("x"))/format_x, ["X"]=(prefix_any*P("X"))/format_X, ["o"]=(prefix_any*P("o"))/format_o, ["S"]=(prefix_any*P("S"))/format_S, ["Q"]=(prefix_any*P("Q"))/format_S, ["N"]=(prefix_any*P("N"))/format_N, ["c"]=(prefix_any*P("c"))/format_c, ["C"]=(prefix_any*P("C"))/format_C, ["r"]=(prefix_any*P("r"))/format_r, ["h"]=(prefix_any*P("h"))/format_h, ["H"]=(prefix_any*P("H"))/format_H, ["u"]=(prefix_any*P("u"))/format_u, ["U"]=(prefix_any*P("U"))/format_U, ["p"]=(prefix_any*P("p"))/format_p, ["b"]=(prefix_any*P("b"))/format_b, ["t"]=(prefix_tab*P("t"))/format_t, ["T"]=(prefix_tab*P("T"))/format_T, ["l"]=(prefix_tab*P("l"))/format_l, ["L"]=(prefix_tab*P("L"))/format_L, ["I"]=(prefix_any*P("I"))/format_I, ["w"]=(prefix_any*P("w"))/format_w, ["W"]=(prefix_any*P("W"))/format_W, ["a"]=(prefix_any*P("a"))/format_a, ["A"]=(prefix_any*P("A"))/format_A, ["*"]=Cs(((1-P("%"))^1+P("%%")/"%%%%")^1)/format_rest, ["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension, } local direct=Cs ( P("%")/""*Cc([[local format = string.format return function(str) return format("%]])*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*Cc([[",str) end]])*P(-1) ) local function make(t,str) local f local p local p=lpegmatch(direct,str) if p then f=loadstripped(p)() else n=0 p=lpegmatch(builder,str,1,"..",t._extensions_) if n>0 then p=format(template,preamble,t._preamble_,arguments[n],p) f=loadstripped(p)() else f=function() return str end end end t[str]=f return f end local function use(t,fmt,...) return t[fmt](...) end strings.formatters={} function strings.formatters.new() local t={ _extensions_={},_preamble_="",_type_="formatter" } setmetatable(t,{ __index=make,__call=use }) return t end local formatters=strings.formatters.new() string.formatters=formatters string.formatter=function(str,...) return formatters[str](...) end local function add(t,name,template,preamble) if type(t)=="table" and t._type_=="formatter" then t._extensions_[name]=template or "%s" if preamble then t._preamble_=preamble.."\n"..t._preamble_ end end end strings.formatters.add=add lpeg.patterns.xmlescape=Cs((P("<")/"<"+P(">")/">"+P("&")/"&"+P('"')/"""+P(1))^0) lpeg.patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0) add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],[[local xmlescape = lpeg.patterns.xmlescape]]) add(formatters,"tex",[[lpegmatch(texescape,%s)]],[[local texescape = lpeg.patterns.texescape]]) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-tab"] = package.loaded["util-tab"] or true -- original size: 14510, stripped down to: 8531 if not modules then modules={} end modules ['util-tab']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.tables=utilities.tables or {} local tables=utilities.tables local format,gmatch,gsub=string.format,string.gmatch,string.gsub local concat,insert,remove=table.concat,table.insert,table.remove local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc local serialize,sortedkeys,sortedpairs=table.serialize,table.sortedkeys,table.sortedpairs local formatters=string.formatters local splitter=lpeg.tsplitat(".") function tables.definetable(target,nofirst,nolast) local composed,shortcut,t=nil,nil,{} local snippets=lpegmatch(splitter,target) for i=1,#snippets-(nolast and 1 or 0) do local name=snippets[i] if composed then composed=shortcut.."."..name shortcut=shortcut.."_"..name t[#t+1]=formatters["local %s = %s if not %s then %s = { } %s = %s end"](shortcut,composed,shortcut,shortcut,composed,shortcut) else composed=name shortcut=name if not nofirst then t[#t+1]=formatters["%s = %s or { }"](composed,composed) end end end if nolast then composed=shortcut.."."..snippets[#snippets] end return concat(t,"\n"),composed end function tables.definedtable(...) local t=_G for i=1,select("#",...) do local li=select(i,...) local tl=t[li] if not tl then tl={} t[li]=tl end t=tl end return t end function tables.accesstable(target,root) local t=root or _G for name in gmatch(target,"([^%.]+)") do t=t[name] if not t then return end end return t end function tables.migratetable(target,v,root) local t=root or _G local names=string.split(target,".") for i=1,#names-1 do local name=names[i] t[name]=t[name] or {} t=t[name] if not t then return end end t[names[#names]]=v end function tables.removevalue(t,value) if value then for i=1,#t do if t[i]==value then remove(t,i) end end end end function tables.insertbeforevalue(t,value,extra) for i=1,#t do if t[i]==extra then remove(t,i) end end for i=1,#t do if t[i]==value then insert(t,i,extra) return end end insert(t,1,extra) end function tables.insertaftervalue(t,value,extra) for i=1,#t do if t[i]==extra then remove(t,i) end end for i=1,#t do if t[i]==value then insert(t,i+1,extra) return end end insert(t,#t+1,extra) end local escape=Cs(Cc('"')*((P('"')/'""'+P(1))^0)*Cc('"')) function table.tocsv(t,specification) if t and #t>0 then local result={} local r={} specification=specification or {} local fields=specification.fields if type(fields)~="string" then fields=sortedkeys(t[1]) end local separator=specification.separator or "," if specification.preamble==true then for f=1,#fields do r[f]=lpegmatch(escape,tostring(fields[f])) end result[1]=concat(r,separator) end for i=1,#t do local ti=t[i] for f=1,#fields do local field=ti[fields[f]] if type(field)=="string" then r[f]=lpegmatch(escape,field) else r[f]=tostring(field) end end result[#result+1]=concat(r,separator) end return concat(result,"\n") else return "" end end local nspaces=utilities.strings.newrepeater(" ") local function toxml(t,d,result,step) for k,v in sortedpairs(t) do local s=nspaces[d] local tk=type(k) local tv=type(v) if tv=="table" then if tk=="number" then result[#result+1]=formatters["%s"](s,k) toxml(v,d+step,result,step) result[#result+1]=formatters["%s"](s,k) else result[#result+1]=formatters["%s<%s>"](s,k) toxml(v,d+step,result,step) result[#result+1]=formatters["%s"](s,k) end elseif tv=="string" then if tk=="number" then result[#result+1]=formatters["%s%!xml!"](s,k,v,k) else result[#result+1]=formatters["%s<%s>%!xml!"](s,k,v,k) end elseif tk=="number" then result[#result+1]=formatters["%s%S"](s,k,v,k) else result[#result+1]=formatters["%s<%s>%S"](s,k,v,k) end end end function table.toxml(t,specification) specification=specification or {} local name=specification.name local noroot=name==false local result=(specification.nobanner or noroot) and {} or { "" } local indent=specification.indent or 0 local spaces=specification.spaces or 1 if noroot then toxml(t,indent,result,spaces) else toxml({ [name or "data"]=t },indent,result,spaces) end return concat(result,"\n") end function tables.encapsulate(core,capsule,protect) if type(capsule)~="table" then protect=true capsule={} end for key,value in next,core do if capsule[key] then print(formatters["\ninvalid %s %a in %a"]("inheritance",key,core)) os.exit() else capsule[key]=value end end if protect then for key,value in next,core do core[key]=nil end setmetatable(core,{ __index=capsule, __newindex=function(t,key,value) if capsule[key] then print(formatters["\ninvalid %s %a' in %a"]("overload",key,core)) os.exit() else rawset(t,key,value) end end } ) end end local function fastserialize(t,r,outer) r[#r+1]="{" local n=#t if n>0 then for i=1,n do local v=t[i] local tv=type(v) if tv=="string" then r[#r+1]=formatters["%q,"](v) elseif tv=="number" then r[#r+1]=formatters["%s,"](v) elseif tv=="table" then fastserialize(v,r) elseif tv=="boolean" then r[#r+1]=formatters["%S,"](v) end end else for k,v in next,t do local tv=type(v) if tv=="string" then r[#r+1]=formatters["[%q]=%q,"](k,v) elseif tv=="number" then r[#r+1]=formatters["[%q]=%s,"](k,v) elseif tv=="table" then r[#r+1]=formatters["[%q]="](k) fastserialize(v,r) elseif tv=="boolean" then r[#r+1]=formatters["[%q]=%S,"](k,v) end end end if outer then r[#r+1]="}" else r[#r+1]="}," end return r end function table.fastserialize(t,prefix) return concat(fastserialize(t,{ prefix or "return" },true)) end function table.deserialize(str) if not str or str=="" then return end local code=load(str) if not code then return end code=code() if not code then return end return code end function table.load(filename,loader) if filename then local t=(loader or io.loaddata)(filename) if t and t~="" then t=load(t) if type(t)=="function" then t=t() if type(t)=="table" then return t end end end end end function table.save(filename,t,n,...) io.savedata(filename,serialize(t,n==nil and true or n,...)) end local function slowdrop(t) local r={} local l={} for i=1,#t do local ti=t[i] local j=0 for k,v in next,ti do j=j+1 l[j]=formatters["%s=%q"](k,v) end r[i]=formatters[" {%t},\n"](l) end return formatters["return {\n%st}"](r) end local function fastdrop(t) local r={ "return {\n" } for i=1,#t do local ti=t[i] r[#r+1]=" {" for k,v in next,ti do r[#r+1]=formatters["%s=%q"](k,v) end r[#r+1]="},\n" end r[#r+1]="}" return concat(r) end function table.drop(t,slow) if #t==0 then return "return { }" elseif slow==true then return slowdrop(t) else return fastdrop(t) end end function table.autokey(t,k) local v={} t[k]=v return v end local selfmapper={ __index=function(t,k) t[k]=k return k end } function table.twowaymapper(t) if not t then t={} else for i=0,#t do local ti=t[i] if ti then local i=tostring(i) t[i]=ti t[ti]=i end end t[""]=t[0] or "" end setmetatable(t,selfmapper) return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-sto"] = package.loaded["util-sto"] or true -- original size: 4432, stripped down to: 3123 if not modules then modules={} end modules ['util-sto']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local setmetatable,getmetatable,type=setmetatable,getmetatable,type utilities=utilities or {} utilities.storage=utilities.storage or {} local storage=utilities.storage function storage.mark(t) if not t then print("\nfatal error: storage cannot be marked\n") os.exit() return end local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m.__storage__=true return t end function storage.allocate(t) t=t or {} local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m.__storage__=true return t end function storage.marked(t) local m=getmetatable(t) return m and m.__storage__ end function storage.checked(t) if not t then report("\nfatal error: storage has not been allocated\n") os.exit() return end return t end function storage.setinitializer(data,initialize) local m=getmetatable(data) or {} m.__index=function(data,k) m.__index=nil initialize() return data[k] end setmetatable(data,m) end local keyisvalue={ __index=function(t,k) t[k]=k return k end } function storage.sparse(t) t=t or {} setmetatable(t,keyisvalue) return t end local function f_empty () return "" end local function f_self (t,k) t[k]=k return k end local function f_table (t,k) local v={} t[k]=v return v end local function f_ignore() end local t_empty={ __index=f_empty } local t_self={ __index=f_self } local t_table={ __index=f_table } local t_ignore={ __newindex=f_ignore } function table.setmetatableindex(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then if f=="empty" then m.__index=f_empty elseif f=="key" then m.__index=f_self elseif f=="table" then m.__index=f_table else m.__index=f end else if f=="empty" then setmetatable(t,t_empty) elseif f=="key" then setmetatable(t,t_self) elseif f=="table" then setmetatable(t,t_table) else setmetatable(t,{ __index=f }) end end return t end function table.setmetatablenewindex(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then if f=="ignore" then m.__newindex=f_ignore else m.__newindex=f end else if f=="ignore" then setmetatable(t,t_ignore) else setmetatable(t,{ __newindex=f }) end end return t end function table.setmetatablecall(t,f) if type(t)~="table" then f,t=t,{} end local m=getmetatable(t) if m then m.__call=f else setmetatable(t,{ __call=f }) end return t end function table.setmetatablekey(t,key,value) local m=getmetatable(t) if not m then m={} setmetatable(t,m) end m[key]=value return t end function table.getmetatablekey(t,key,value) local m=getmetatable(t) return m and m[key] end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true -- original size: 17827, stripped down to: 12722 if not modules then modules={} end modules ['util-prs']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local lpeg,table,string=lpeg,table,string local P,R,V,S,C,Ct,Cs,Carg,Cc,Cg,Cf,Cp=lpeg.P,lpeg.R,lpeg.V,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cc,lpeg.Cg,lpeg.Cf,lpeg.Cp local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local concat,format,gmatch,find=table.concat,string.format,string.gmatch,string.find local tostring,type,next,rawset=tostring,type,next,rawset utilities=utilities or {} local parsers=utilities.parsers or {} utilities.parsers=parsers local patterns=parsers.patterns or {} parsers.patterns=patterns local setmetatableindex=table.setmetatableindex local sortedhash=table.sortedhash local digit=R("09") local space=P(' ') local equal=P("=") local comma=P(",") local lbrace=P("{") local rbrace=P("}") local lparent=P("(") local rparent=P(")") local period=S(".") local punctuation=S(".,:;") local spacer=lpegpatterns.spacer local whitespace=lpegpatterns.whitespace local newline=lpegpatterns.newline local anything=lpegpatterns.anything local endofstring=lpegpatterns.endofstring local nobrace=1-(lbrace+rbrace ) local noparent=1-(lparent+rparent) local escape,left,right=P("\\"),P('{'),P('}') lpegpatterns.balanced=P { [1]=((escape*(left+right))+(1-(left+right))+V(2))^0, [2]=left*V(1)*right } local nestedbraces=P { lbrace*(nobrace+V(1))^0*rbrace } local nestedparents=P { lparent*(noparent+V(1))^0*rparent } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 lpegpatterns.nestedbraces=nestedbraces lpegpatterns.nestedparents=nestedparents lpegpatterns.nested=nestedbraces lpegpatterns.argument=argument lpegpatterns.content=content local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) local pattern_c=(space+comma)^0*(key*equal*value) local key=C((1-space-equal-comma)^1) local pattern_b=spaces*comma^0*spaces*(key*((spaces*equal*spaces*value)+C(""))) local hash={} local function set(key,value) hash[key]=value end local pattern_a_s=(pattern_a/set)^1 local pattern_b_s=(pattern_b/set)^1 local pattern_c_s=(pattern_c/set)^1 patterns.settings_to_hash_a=pattern_a_s patterns.settings_to_hash_b=pattern_b_s patterns.settings_to_hash_c=pattern_c_s function parsers.make_settings_to_hash_pattern(set,how) if type(str)=="table" then return set elseif how=="strict" then return (pattern_c/set)^1 elseif how=="tolerant" then return (pattern_b/set)^1 else return (pattern_a/set)^1 end end function parsers.settings_to_hash(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_a_s,str) return hash else return {} end end function parsers.settings_to_hash_tolerant(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_b_s,str) return hash else return {} end end function parsers.settings_to_hash_strict(str,existing) if type(str)=="table" then if existing then for k,v in next,str do existing[k]=v end return exiting else return str end elseif str and str~="" then hash=existing or {} lpegmatch(pattern_c_s,str) return next(hash) and hash else return nil end end local separator=comma*space^0 local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+(1-comma))^0) local pattern=spaces*Ct(value*(separator*value)^0) patterns.settings_to_array=pattern function parsers.settings_to_array(str,strict) if type(str)=="table" then return str elseif not str or str=="" then return {} elseif strict then if find(str,"{") then return lpegmatch(pattern,str) else return { str } end else return lpegmatch(pattern,str) end end local function set(t,v) t[#t+1]=v end local value=P(Carg(1)*value)/set local pattern=value*(separator*value)^0*Carg(1) function parsers.add_settings_to_array(t,str) return lpegmatch(pattern,str,nil,t) end function parsers.hash_to_string(h,separator,yes,no,strict,omit) if h then local t,tn,s={},0,table.sortedkeys(h) omit=omit and table.tohash(omit) for i=1,#s do local key=s[i] if not omit or not omit[key] then local value=h[key] if type(value)=="boolean" then if yes and no then if value then tn=tn+1 t[tn]=key..'='..yes elseif not strict then tn=tn+1 t[tn]=key..'='..no end elseif value or not strict then tn=tn+1 t[tn]=key..'='..tostring(value) end else tn=tn+1 t[tn]=key..'='..value end end end return concat(t,separator or ",") else return "" end end function parsers.array_to_string(a,separator) if a then return concat(a,separator or ",") else return "" end end function parsers.settings_to_set(str,t) t=t or {} for s in gmatch(str,"[^, ]+") do t[s]=true end return t end function parsers.simple_hash_to_string(h,separator) local t,tn={},0 for k,v in sortedhash(h) do if v then tn=tn+1 t[tn]=k end end return concat(t,separator or ",") end local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C(digit^1*lparent*(noparent+nestedparents)^1*rparent)+C((nestedbraces+(1-comma))^1) local pattern_a=spaces*Ct(value*(separator*value)^0) local function repeater(n,str) if not n then return str else local s=lpegmatch(pattern_a,str) if n==1 then return unpack(s) else local t,tn={},0 for i=1,n do for j=1,#s do tn=tn+1 t[tn]=s[j] end end return unpack(t) end end end local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+(C(digit^1)/tonumber*lparent*Cs((noparent+nestedparents)^1)*rparent)/repeater+C((nestedbraces+(1-comma))^1) local pattern_b=spaces*Ct(value*(separator*value)^0) function parsers.settings_to_array_with_repeat(str,expand) if expand then return lpegmatch(pattern_b,str) or {} else return lpegmatch(pattern_a,str) or {} end end local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace local pattern=Ct((space+value)^0) function parsers.arguments_to_table(str) return lpegmatch(pattern,str) end function parsers.getparameters(self,class,parentclass,settings) local sc=self[class] if not sc then sc={} self[class]=sc if parentclass then local sp=self[parentclass] if not sp then sp={} self[parentclass]=sp end setmetatableindex(sc,sp) end end parsers.settings_to_hash(settings,sc) end function parsers.listitem(str) return gmatch(str,"[^, ]+") end local pattern=Cs { "start", start=V("one")+V("two")+V("three"), rest=(Cc(",")*V("thousand"))^0*(P(".")+endofstring)*anything^0, thousand=digit*digit*digit, one=digit*V("rest"), two=digit*digit*V("rest"), three=V("thousand")*V("rest"), } lpegpatterns.splitthousands=pattern function parsers.splitthousands(str) return lpegmatch(pattern,str) or str end local optionalwhitespace=whitespace^0 lpegpatterns.words=Ct((Cs((1-punctuation-whitespace)^1)+anything)^1) lpegpatterns.sentences=Ct((optionalwhitespace*Cs((1-period)^0*period))^1) lpegpatterns.paragraphs=Ct((optionalwhitespace*Cs((whitespace^1*endofstring/""+1-(spacer^0*newline*newline))^1))^1) local dquote=P('"') local equal=P('=') local escape=P('\\') local separator=S(' ,') local key=C((1-equal)^1) local value=dquote*C((1-dquote-escape*dquote)^0)*dquote local pattern=Cf(Ct("")*(Cg(key*equal*value)*separator^0)^1,rawset)^0*P(-1) function parsers.keq_to_hash(str) if str and str~="" then return lpegmatch(pattern,str) else return {} end end local defaultspecification={ separator=",",quote='"' } function parsers.csvsplitter(specification) specification=specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator=specification.separator local quotechar=specification.quote local separator=S(separator~="" and separator or ",") local whatever=C((1-separator-newline)^0) if quotechar and quotechar~="" then local quotedata=nil for chr in gmatch(quotechar,".") do local quotechar=P(chr) local quoteword=quotechar*C((1-quotechar)^0)*quotechar if quotedata then quotedata=quotedata+quoteword else quotedata=quoteword end end whatever=quotedata+whatever end local parser=Ct((Ct(whatever*(separator*whatever)^0)*S("\n\r"))^0 ) return function(data) return lpegmatch(parser,data) end end function parsers.rfc4180splitter(specification) specification=specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator=specification.separator local quotechar=P(specification.quote) local dquotechar=quotechar*quotechar /specification.quote local separator=S(separator~="" and separator or ",") local escaped=quotechar*Cs((dquotechar+(1-quotechar))^0)*quotechar local non_escaped=C((1-quotechar-newline-separator)^1) local field=escaped+non_escaped local record=Ct((field*separator^-1)^1) local headerline=record*Cp() local wholeblob=Ct((newline^-1*record)^0) return function(data,getheader) if getheader then local header,position=lpegmatch(headerline,data) local data=lpegmatch(wholeblob,data,position) return data,header else return lpegmatch(wholeblob,data) end end end local function ranger(first,last,n,action) if not first then elseif last==true then for i=first,n or first do action(i) end elseif last then for i=first,last do action(i) end else action(first) end end local cardinal=lpegpatterns.cardinal/tonumber local spacers=lpegpatterns.spacer^0 local endofstring=lpegpatterns.endofstring local stepper=spacers*(C(cardinal)*(spacers*S(":-")*spacers*(C(cardinal)+Cc(true) )+Cc(false) )*Carg(1)*Carg(2)/ranger*S(", ")^0 )^1 local stepper=spacers*(C(cardinal)*(spacers*S(":-")*spacers*(C(cardinal)+(P("*")+endofstring)*Cc(true) )+Cc(false) )*Carg(1)*Carg(2)/ranger*S(", ")^0 )^1*endofstring function parsers.stepper(str,n,action) if type(n)=="function" then lpegmatch(stepper,str,1,false,n or print) else lpegmatch(stepper,str,1,n,action or print) end end local pattern_math=Cs((P("%")/"\\percent "+P("^")*Cc("{")*lpegpatterns.integer*Cc("}")+P(1))^0) local pattern_text=Cs((P("%")/"\\percent "+(P("^")/"\\high")*Cc("{")*lpegpatterns.integer*Cc("}")+P(1))^0) patterns.unittotex=pattern function parsers.unittotex(str,textmode) return lpegmatch(textmode and pattern_text or pattern_math,str) end local pattern=Cs((P("^")/""*lpegpatterns.integer*Cc("")+P(1))^0) function parsers.unittoxml(str) return lpegmatch(pattern,str) end local cache={} local spaces=lpeg.patterns.space^0 local dummy=function() end table.setmetatableindex(cache,function(t,k) local separator=P(k) local value=(1-separator)^0 local pattern=spaces*C(value)*separator^0*Cp() t[k]=pattern return pattern end) local commalistiterator=cache[","] function utilities.parsers.iterator(str,separator) local n=#str if n==0 then return dummy else local pattern=separator and cache[separator] or commalistiterator local p=1 return function() if p<=n then local s,e=lpegmatch(pattern,str,p) if e then p=e return s end end end end end local function initialize(t,name) local source=t[name] if source then local result={} for k,v in next,t[name] do result[k]=v end return result else return {} end end local function fetch(t,name) return t[name] or {} end function process(result,more) for k,v in next,more do result[k]=v end return result end local name=C((1-S(", "))^1) local parser=(Carg(1)*name/initialize)*(S(", ")^1*(Carg(1)*name/fetch))^0 local merge=Cf(parser,process) function utilities.parsers.mergehashes(hash,list) return lpegmatch(merge,list,1,hash) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-fmt"] = package.loaded["util-fmt"] or true -- original size: 2274, stripped down to: 1781 if not modules then modules={} end modules ['util-fmt']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.formatters=utilities.formatters or {} local formatters=utilities.formatters local concat,format=table.concat,string.format local tostring,type=tostring,type local strip=string.strip local lpegmatch=lpeg.match local stripper=lpeg.patterns.stripzeros function formatters.stripzeros(str) return lpegmatch(stripper,str) end function formatters.formatcolumns(result,between) if result and #result>0 then between=between or " " local widths,numbers={},{} local first=result[1] local n=#first for i=1,n do widths[i]=0 end for i=1,#result do local r=result[i] for j=1,n do local rj=r[j] local tj=type(rj) if tj=="number" then numbers[j]=true end if tj~="string" then rj=tostring(rj) r[j]=rj end local w=#rj if w>widths[j] then widths[j]=w end end end for i=1,n do local w=widths[i] if numbers[i] then if w>80 then widths[i]="%s"..between else widths[i]="%0"..w.."i"..between end else if w>80 then widths[i]="%s"..between elseif w>0 then widths[i]="%-"..w.."s"..between else widths[i]="%s" end end end local template=strip(concat(widths)) for i=1,#result do local str=format(template,unpack(result[i])) result[i]=strip(str) end end return result end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true -- original size: 12365, stripped down to: 8799 if not modules then modules={} end modules ['trac-set']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring=type,next,tostring local concat=table.concat local format,find,lower,gsub,topattern=string.format,string.find,string.lower,string.gsub,string.topattern local is_boolean=string.is_boolean local settings_to_hash=utilities.parsers.settings_to_hash local allocate=utilities.storage.allocate utilities=utilities or {} local utilities=utilities local setters=utilities.setters or {} utilities.setters=setters local data={} local trace_initialize=false function setters.initialize(filename,name,values) local setter=data[name] if setter then frozen=true local data=setter.data if data then for key,newvalue in next,values do local newvalue=is_boolean(newvalue,newvalue) local functions=data[key] if functions then local oldvalue=functions.value if functions.frozen then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"frozen",oldvalue) end elseif #functions>0 and not oldvalue then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"set",newvalue) end for i=1,#functions do functions[i](newvalue) end functions.value=newvalue functions.frozen=functions.frozen or frozen else if trace_initialize then setter.report("%s: %a is %s as %a",filename,key,"kept",oldvalue) end end else functions={ default=newvalue,frozen=frozen } data[key]=functions if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"defaulted",newvalue) end end end return true end end end local function set(t,what,newvalue) local data=t.data if not data.frozen then local done=t.done if type(what)=="string" then what=settings_to_hash(what) end if type(what)~="table" then return end if not done then done={} t.done=done end for w,value in next,what do if value=="" then value=newvalue elseif not value then value=false else value=is_boolean(value,value) end w=topattern(w,true,true) for name,functions in next,data do if done[name] then elseif find(name,w) then done[name]=true for i=1,#functions do functions[i](value) end functions.value=value end end end end end local function reset(t) local data=t.data if not data.frozen then for name,functions in next,data do for i=1,#functions do functions[i](false) end functions.value=false end end end local function enable(t,what) set(t,what,true) end local function disable(t,what) local data=t.data if not what or what=="" then t.done={} reset(t) else set(t,what,false) end end function setters.register(t,what,...) local data=t.data what=lower(what) local functions=data[what] if not functions then functions={} data[what]=functions if trace_initialize then t.report("defining %a",what) end end local default=functions.default for i=1,select("#",...) do local fnc=select(i,...) local typ=type(fnc) if typ=="string" then if trace_initialize then t.report("coupling %a to %a",what,fnc) end local s=fnc fnc=function(value) set(t,s,value) end elseif typ~="function" then fnc=nil end if fnc then functions[#functions+1]=fnc local value=functions.value or default if value~=nil then fnc(value) functions.value=value end end end return false end function setters.enable(t,what) local e=t.enable t.enable,t.done=enable,{} enable(t,what) t.enable,t.done=e,{} end function setters.disable(t,what) local e=t.disable t.disable,t.done=disable,{} disable(t,what) t.disable,t.done=e,{} end function setters.reset(t) t.done={} reset(t) end function setters.list(t) local list=table.sortedkeys(t.data) local user,system={},{} for l=1,#list do local what=list[l] if find(what,"^%*") then system[#system+1]=what else user[#user+1]=what end end return user,system end function setters.show(t) local category=t.name local list=setters.list(t) t.report() for k=1,#list do local name=list[k] local functions=t.data[name] if functions then local value,default,modules=functions.value,functions.default,#functions value=value==nil and "unset" or tostring(value) default=default==nil and "unset" or tostring(default) t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) end end t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) print(format("%-15s : %s\n",setter.name,format(...))) end local function default(setter,name) local d=setter.data[name] return d and d.default end local function value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end function setters.new(name) local setter setter={ data=allocate(), name=name, report=function(...) setters.report (setter,...) end, enable=function(...) enable (setter,...) end, disable=function(...) disable (setter,...) end, register=function(...) register(setter,...) end, list=function(...) list (setter,...) end, show=function(...) show (setter,...) end, default=function(...) return default (setter,...) end, value=function(...) return value (setter,...) end, } data[name]=setter return setter end trackers=setters.new("trackers") directives=setters.new("directives") experiments=setters.new("experiments") local t_enable,t_disable=trackers .enable,trackers .disable local d_enable,d_disable=directives .enable,directives .disable local e_enable,e_disable=experiments.enable,experiments.disable local trace_directives=false local trace_directives=false trackers.register("system.directives",function(v) trace_directives=v end) local trace_experiments=false local trace_experiments=false trackers.register("system.experiments",function(v) trace_experiments=v end) function directives.enable(...) if trace_directives then directives.report("enabling: % t",{...}) end d_enable(...) end function directives.disable(...) if trace_directives then directives.report("disabling: % t",{...}) end d_disable(...) end function experiments.enable(...) if trace_experiments then experiments.report("enabling: % t",{...}) end e_enable(...) end function experiments.disable(...) if trace_experiments then experiments.report("disabling: % t",{...}) end e_disable(...) end directives.register("system.nostatistics",function(v) if statistics then statistics.enable=not v else end end) directives.register("system.nolibraries",function(v) if libraries then libraries=nil else end end) if environment then local engineflags=environment.engineflags if engineflags then local list=engineflags["c:trackers"] or engineflags["trackers"] if type(list)=="string" then setters.initialize("commandline flags","trackers",settings_to_hash(list)) end local list=engineflags["c:directives"] or engineflags["directives"] if type(list)=="string" then setters.initialize("commandline flags","directives",settings_to_hash(list)) end end end if texconfig then local function set(k,v) v=tonumber(v) if v then texconfig[k]=v end end directives.register("luatex.expanddepth",function(v) set("expand_depth",v) end) directives.register("luatex.hashextra",function(v) set("hash_extra",v) end) directives.register("luatex.nestsize",function(v) set("nest_size",v) end) directives.register("luatex.maxinopen",function(v) set("max_in_open",v) end) directives.register("luatex.maxprintline",function(v) set("max_print_line",v) end) directives.register("luatex.maxstrings",function(v) set("max_strings",v) end) directives.register("luatex.paramsize",function(v) set("param_size",v) end) directives.register("luatex.savesize",function(v) set("save_size",v) end) directives.register("luatex.stacksize",function(v) set("stack_size",v) end) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-log"] = package.loaded["trac-log"] or true -- original size: 21914, stripped down to: 14287 if not modules then modules={} end modules ['trac-log']={ version=1.001, comment="companion to trac-log.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local write_nl,write=texio and texio.write_nl or print,texio and texio.write or io.write local format,gmatch,find=string.format,string.gmatch,string.find local concat,insert,remove=table.concat,table.insert,table.remove local topattern=string.topattern local texcount=tex and tex.count local next,type,select=next,type,select local utfchar=utf.char local setmetatableindex=table.setmetatableindex local formatters=string.formatters logs=logs or {} local logs=logs local moreinfo=[[ More information about ConTeXt and the tools that come with it can be found at: ]].."\n"..[[ maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net wiki : http://contextgarden.net ]] utilities.strings.formatters.add ( formatters,"unichr", [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] ) utilities.strings.formatters.add ( formatters,"chruni", [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] ) local function ignore() end setmetatableindex(logs,function(t,k) t[k]=ignore;return ignore end) local report,subreport,status,settarget,setformats,settranslations local direct,subdirect,writer,pushtarget,poptarget if tex and (tex.jobname or tex.formatname) then local valueiskey={ __index=function(t,k) t[k]=k return k end } local target="term and log" logs.flush=io.flush local formats={} setmetatable(formats,valueiskey) local translations={} setmetatable(translations,valueiskey) writer=function(...) write_nl(target,...) end newline=function() write_nl(target,"\n") end local f_one=formatters["%-15s > %s\n"] local f_two=formatters["%-15s >\n"] report=function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local f_one=formatters["%-15s > %s"] local f_two=formatters["%-15s >"] direct=function(a,b,c,...) if c then return f_one(translations[a],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],formats[b]) elseif a then return f_two(translations[a]) else return "" end end local f_one=formatters["%-15s > %s > %s\n"] local f_two=formatters["%-15s > %s >\n"] subreport=function(a,s,b,c,...) if c then write_nl(target,f_one(translations[a],translations[s],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],translations[s],formats[b])) elseif a then write_nl(target,f_two(translations[a],translations[s])) else write_nl(target,"\n") end end local f_one=formatters["%-15s > %s > %s"] local f_two=formatters["%-15s > %s >"] subdirect=function(a,s,b,c,...) if c then return f_one(translations[a],translations[s],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],translations[s],formats[b]) elseif a then return f_two(translations[a],translations[s]) else return "" end end local f_one=formatters["%-15s : %s\n"] local f_two=formatters["%-15s :\n"] status=function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local targets={ logfile="log", log="log", file="log", console="term", terminal="term", both="term and log", } settarget=function(whereto) target=targets[whereto or "both"] or targets.both if target=="term" or target=="term and log" then logs.flush=io.flush else logs.flush=ignore end end local stack={} pushtarget=function(newtarget) insert(stack,target) settarget(newtarget) end poptarget=function() if #stack>0 then settarget(remove(stack)) end end setformats=function(f) formats=f end settranslations=function(t) translations=t end else logs.flush=ignore writer=write_nl newline=function() write_nl("\n") end local f_one=formatters["%-15s | %s"] local f_two=formatters["%-15s |"] report=function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("") end end local f_one=formatters["%-15s | %s | %s"] local f_two=formatters["%-15s | %s |"] subreport=function(a,sub,b,c,...) if c then write_nl(f_one(a,sub,formatters[b](c,...))) elseif b then write_nl(f_one(a,sub,b)) elseif a then write_nl(f_two(a,sub)) else write_nl("") end end local f_one=formatters["%-15s : %s\n"] local f_two=formatters["%-15s :\n"] status=function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("\n") end end direct=ignore subdirect=ignore settarget=ignore pushtarget=ignore poptarget=ignore setformats=ignore settranslations=ignore end logs.report=report logs.subreport=subreport logs.status=status logs.settarget=settarget logs.pushtarget=pushtarget logs.poptarget=poptarget logs.setformats=setformats logs.settranslations=settranslations logs.direct=direct logs.subdirect=subdirect logs.writer=writer logs.newline=newline local data,states={},nil function logs.reporter(category,subcategory) local logger=data[category] if not logger then local state=false if states==true then state=true elseif type(states)=="table" then for c,_ in next,states do if find(category,c) then state=true break end end end logger={ reporters={}, state=state, } data[category]=logger end local reporter=logger.reporters[subcategory or "default"] if not reporter then if subcategory then reporter=function(...) if not logger.state then subreport(category,subcategory,...) end end logger.reporters[subcategory]=reporter else local tag=category reporter=function(...) if not logger.state then report(category,...) end end logger.reporters.default=reporter end end return reporter end logs.new=logs.reporter local ctxreport=logs.writer function logs.setmessenger(m) ctxreport=m end function logs.messenger(category,subcategory) if subcategory then return function(...) ctxreport(subdirect(category,subcategory,...)) end else return function(...) ctxreport(direct(category,...)) end end end local function setblocked(category,value) if category==true then category,value="*",true elseif category==false then category,value="*",false elseif value==nil then value=true end if category=="*" then states=value for k,v in next,data do v.state=value end else states=utilities.parsers.settings_to_hash(category) for c,_ in next,states do if data[c] then v.state=value else c=topattern(c,true,true) for k,v in next,data do if find(k,c) then v.state=value end end end end end end function logs.disable(category,value) setblocked(category,value==nil and true or value) end function logs.enable(category) setblocked(category,false) end function logs.categories() return table.sortedkeys(data) end function logs.show() local n,c,s,max=0,0,0,0 for category,v in table.sortedpairs(data) do n=n+1 local state=v.state local reporters=v.reporters local nc=#category if nc>c then c=nc end for subcategory,_ in next,reporters do local ns=#subcategory if ns>c then s=ns end local m=nc+ns if m>max then max=m end end local subcategories=concat(table.sortedkeys(reporters),", ") if state==true then state="disabled" elseif state==false then state="enabled" else state="unknown" end report("logging","category %a, subcategories %a, state %a",category,subcategories,state) end report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) end local delayed_reporters={} setmetatableindex(delayed_reporters,function(t,k) local v=logs.reporter(k.name) t[k]=v return v end) function utilities.setters.report(setter,...) delayed_reporters[setter](...) end directives.register("logs.blocked",function(v) setblocked(v,true) end) directives.register("logs.target",function(v) settarget(v) end) local report_pages=logs.reporter("pages") local real,user,sub function logs.start_page_number() real,user,sub=texcount.realpageno,texcount.userpageno,texcount.subpageno end local timing=false local starttime=nil local lasttime=nil trackers.register("pages.timing",function(v) starttime=os.clock() timing=true end) function logs.stop_page_number() if timing then local elapsed,average local stoptime=os.clock() if not lasttime or real<2 then elapsed=stoptime average=stoptime starttime=stoptime else elapsed=stoptime-lasttime average=(stoptime-starttime)/(real-1) end lasttime=stoptime if real<=0 then report_pages("flushing page, time %0.04f / %0.04f",elapsed,average) elseif user<=0 then report_pages("flushing realpage %s, time %0.04f / %0.04f",real,elapsed,average) elseif sub<=0 then report_pages("flushing realpage %s, userpage %s, time %0.04f / %0.04f",real,user,elapsed,average) else report_pages("flushing realpage %s, userpage %s, subpage %s, time %0.04f / %0.04f",real,user,sub,elapsed,average) end else if real<=0 then report_pages("flushing page") elseif user<=0 then report_pages("flushing realpage %s",real) elseif sub<=0 then report_pages("flushing realpage %s, userpage %s",real,user) else report_pages("flushing realpage %s, userpage %s, subpage %s",real,user,sub) end end logs.flush() end local report_files=logs.reporter("files") local nesting=0 local verbose=false local hasscheme=url.hasscheme function logs.show_open(name) end function logs.show_close(name) end function logs.show_load(name) end local simple=logs.reporter("comment") logs.simple=simple logs.simpleline=simple function logs.setprogram () end function logs.extendbanner() end function logs.reportlines () end function logs.reportbanner() end function logs.reportline () end function logs.simplelines () end function logs.help () end local Carg,C,lpegmatch=lpeg.Carg,lpeg.C,lpeg.match local p_newline=lpeg.patterns.newline local linewise=( Carg(1)*C((1-p_newline)^1)/function(t,s) t.report(s) end+Carg(1)*p_newline^2/function(t) t.report() end+p_newline )^1 local function reportlines(t,str) if str then lpegmatch(linewise,str,1,t) end end local function reportbanner(t) local banner=t.banner if banner then t.report(banner) t.report() end end local function reportversion(t) local banner=t.banner if banner then t.report(banner) end end local function reporthelp(t,...) local helpinfo=t.helpinfo if type(helpinfo)=="string" then reportlines(t,helpinfo) elseif type(helpinfo)=="table" then for i=1,select("#",...) do reportlines(t,t.helpinfo[select(i,...)]) if i %s => %s => %s\r"](os.date("%d/%m/%y %H:%m:%S"),process,jobname,category,format(...)) for i=1,10 do local f=io.open(whereto,"a") if f then f:write(message) f:close() break else sleep(0.1) end end end local report_system=logs.reporter("system","logs") function logs.obsolete(old,new) local o=loadstring("return "..new)() if type(o)=="function" then return function(...) report_system("function %a is obsolete, use %a",old,new) loadstring(old.."="..new.." return "..old)()(...) end elseif type(o)=="table" then local t,m={},{} m.__index=function(t,k) report_system("table %a is obsolete, use %a",old,new) m.__index,m.__newindex=o,o return o[k] end m.__newindex=function(t,k,v) report_system("table %a is obsolete, use %a",old,new) m.__index,m.__newindex=o,o o[k]=v end if libraries then libraries.obsolete[old]=t end setmetatable(t,m) return t end end if utilities then utilities.report=report_system end if tex and tex.error then function logs.texerrormessage(...) tex.error(format(...),{}) end else function logs.texerrormessage(...) print(format(...)) end end io.stdout:setvbuf('no') io.stderr:setvbuf('no') if package.helpers.report then package.helpers.report=logs.reporter("package loader") end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-inf"] = package.loaded["trac-inf"] or true -- original size: 5678, stripped down to: 4448 if not modules then modules={} end modules ['trac-inf']={ version=1.001, comment="companion to trac-inf.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber local format,lower=string.format,string.lower local concat=table.concat local clock=os.gettimeofday or os.clock statistics=statistics or {} local statistics=statistics statistics.enable=true statistics.threshold=0.01 local statusinfo,n,registered,timers={},0,{},{} table.setmetatableindex(timers,function(t,k) local v={ timing=0,loadtime=0 } t[k]=v return v end) local function hastiming(instance) return instance and timers[instance] end local function resettiming(instance) timers[instance or "notimer"]={ timing=0,loadtime=0 } end local function starttiming(instance) local timer=timers[instance or "notimer"] local it=timer.timing or 0 if it==0 then timer.starttime=clock() if not timer.loadtime then timer.loadtime=0 end end timer.timing=it+1 end local function stoptiming(instance) local timer=timers[instance or "notimer"] local it=timer.timing if it>1 then timer.timing=it-1 else local starttime=timer.starttime if starttime then local stoptime=clock() local loadtime=stoptime-starttime timer.stoptime=stoptime timer.loadtime=timer.loadtime+loadtime timer.timing=0 return loadtime end end return 0 end local function elapsed(instance) if type(instance)=="number" then return instance or 0 else local timer=timers[instance or "notimer"] return timer and timer.loadtime or 0 end end local function elapsedtime(instance) return format("%0.3f",elapsed(instance)) end local function elapsedindeed(instance) return elapsed(instance)>statistics.threshold end local function elapsedseconds(instance,rest) if elapsedindeed(instance) then return format("%0.3f seconds %s",elapsed(instance),rest or "") end end statistics.hastiming=hastiming statistics.resettiming=resettiming statistics.starttiming=starttiming statistics.stoptiming=stoptiming statistics.elapsed=elapsed statistics.elapsedtime=elapsedtime statistics.elapsedindeed=elapsedindeed statistics.elapsedseconds=elapsedseconds function statistics.register(tag,fnc) if statistics.enable and type(fnc)=="function" then local rt=registered[tag] or (#statusinfo+1) statusinfo[rt]={ tag,fnc } registered[tag]=rt if #tag>n then n=#tag end end end local report=logs.reporter("mkiv lua stats") function statistics.show() if statistics.enable then local register=statistics.register register("luatex banner",function() return lower(status.banner) end) register("control sequences",function() return format("%s of %s + %s",status.cs_count,status.hash_size,status.hash_extra) end) register("callbacks",function() local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0 return format("%s direct, %s indirect, %s total",total-indirect,indirect,total) end) if jit then local status={ jit.status() } if status[1] then register("luajit status",function() return concat(status," ",2) end) end end register("current memory usage",statistics.memused) register("runtime",statistics.runtime) logs.newline() for i=1,#statusinfo do local s=statusinfo[i] local r=s[2]() if r then report("%s: %s",s[1],r) end end statistics.enable=false end end function statistics.memused() local round=math.round or math.floor return format("%s MB (ctx: %s MB)",round(collectgarbage("count")/1000),round(status.luastate_bytes/1000000)) end starttiming(statistics) function statistics.formatruntime(runtime) return format("%s seconds",runtime) end function statistics.runtime() stoptiming(statistics) return statistics.formatruntime(elapsedtime(statistics)) end local report=logs.reporter("system") function statistics.timed(action) starttiming("run") action() stoptiming("run") report("total runtime: %s",elapsedtime("run")) end commands=commands or {} function commands.resettimer(name) resettiming(name or "whatever") starttiming(name or "whatever") end function commands.elapsedtime(name) stoptiming(name or "whatever") context(elapsedtime(name or "whatever")) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-pro"] = package.loaded["trac-pro"] or true -- original size: 5773, stripped down to: 3453 if not modules then modules={} end modules ['trac-pro']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local getmetatable,setmetatable,rawset,type=getmetatable,setmetatable,rawset,type local trace_namespaces=false trackers.register("system.namespaces",function(v) trace_namespaces=v end) local report_system=logs.reporter("system","protection") namespaces=namespaces or {} local namespaces=namespaces local registered={} local function report_index(k,name) if trace_namespaces then report_system("reference to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("reference to %a in protected namespace %a",k,name) end end local function report_newindex(k,name) if trace_namespaces then report_system("assignment to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("assignment to %a in protected namespace %a",k,name) end end local function register(name) local data=name=="global" and _G or _G[name] if not data then return end registered[name]=data local m=getmetatable(data) if not m then m={} setmetatable(data,m) end local index,newindex={},{} m.__saved__index=m.__index m.__no__index=function(t,k) if not index[k] then index[k]=true report_index(k,name) end return nil end m.__saved__newindex=m.__newindex m.__no__newindex=function(t,k,v) if not newindex[k] then newindex[k]=true report_newindex(k,name) end rawset(t,k,v) end m.__protection__depth=0 end local function private(name) local data=registered[name] if not data then data=_G[name] if not data then data={} _G[name]=data end register(name) end return data end local function protect(name) local data=registered[name] if not data then return end local m=getmetatable(data) local pd=m.__protection__depth if pd>0 then m.__protection__depth=pd+1 else m.__save_d_index,m.__saved__newindex=m.__index,m.__newindex m.__index,m.__newindex=m.__no__index,m.__no__newindex m.__protection__depth=1 end end local function unprotect(name) local data=registered[name] if not data then return end local m=getmetatable(data) local pd=m.__protection__depth if pd>1 then m.__protection__depth=pd-1 else m.__index,m.__newindex=m.__saved__index,m.__saved__newindex m.__protection__depth=0 end end local function protectall() for name,_ in next,registered do if name~="global" then protect(name) end end end local function unprotectall() for name,_ in next,registered do if name~="global" then unprotect(name) end end end namespaces.register=register namespaces.private=private namespaces.protect=protect namespaces.unprotect=unprotect namespaces.protectall=protectall namespaces.unprotectall=unprotectall namespaces.private("namespaces") registered={} register("global") directives.register("system.protect",function(v) if v then protectall() else unprotectall() end end) directives.register("system.checkglobals",function(v) if v then report_system("enabling global namespace guard") protect("global") else report_system("disabling global namespace guard") unprotect("global") end end) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-lua"] = package.loaded["util-lua"] or true -- original size: 12575, stripped down to: 8700 if not modules then modules={} end modules ['util-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", comment="the strip code is written by Peter Cawley", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local rep,sub,byte,dump,format=string.rep,string.sub,string.byte,string.dump,string.format local load,loadfile,type=load,loadfile,type utilities=utilities or {} utilities.lua=utilities.lua or {} local luautilities=utilities.lua local report_lua=logs.reporter("system","lua") local tracestripping=false local forcestupidcompile=true luautilities.stripcode=true luautilities.alwaysstripcode=false luautilities.nofstrippedchunks=0 luautilities.nofstrippedbytes=0 local strippedchunks={} luautilities.strippedchunks=strippedchunks luautilities.suffixes={ tma="tma", tmc=jit and "tmb" or "tmc", lua="lua", luc=jit and "lub" or "luc", lui="lui", luv="luv", luj="luj", tua="tua", tuc="tuc", } if jit or status.luatex_version>=74 then local function register(name) if tracestripping then report_lua("stripped bytecode from %a",name or "unknown") end strippedchunks[#strippedchunks+1]=name luautilities.nofstrippedchunks=luautilities.nofstrippedchunks+1 end local function stupidcompile(luafile,lucfile,strip) local code=io.loaddata(luafile) if code and code~="" then code=load(code) if code then code=dump(code,strip and luautilities.stripcode or luautilities.alwaysstripcode) if code and code~="" then register(name) io.savedata(lucfile,code) return true,0 end else report_lua("fatal error %a in file %a",1,luafile) end else report_lua("fatal error %a in file %a",2,luafile) end return false,0 end function luautilities.loadedluacode(fullname,forcestrip,name) name=name or fullname local code=environment.loadpreprocessedfile and environment.loadpreprocessedfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip)=="function" then forcestrip=forcestrip(fullname) end if forcestrip or luautilities.alwaysstripcode then register(name) return load(dump(code,true)),0 else return code,0 end elseif luautilities.alwaysstripcode then register(name) return load(dump(code,true)),0 else return code,0 end end function luautilities.strippedloadstring(code,forcestrip,name) if forcestrip and luautilities.stripcode or luautilities.alwaysstripcode then code=load(code) if not code then report_lua("fatal error %a in file %a",3,name) end register(name) code=dump(code,true) end return load(code),0 end function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done=stupidcompile(luafile,lucfile,strip~=false) if done then report_lua("dumping %a into %a stripped",luafile,lucfile) if cleanup==true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end end return done end function luautilities.loadstripped(...) local l=load(...) if l then return load(dump(l,true)) end end else local function register(name,before,after) local delta=before-after if tracestripping then report_lua("bytecodes stripped from %a, # before %s, # after %s, delta %s",name,before,after,delta) end strippedchunks[#strippedchunks+1]=name luautilities.nofstrippedchunks=luautilities.nofstrippedchunks+1 luautilities.nofstrippedbytes=luautilities.nofstrippedbytes+delta return delta end local strip_code_pc if _MAJORVERSION==5 and _MINORVERSION==1 then strip_code_pc=function(dump,name) local before=#dump local version,format,endian,int,size,ins,num=byte(dump,5,11) local subint if endian==1 then subint=function(dump,i,l) local val=0 for n=l,1,-1 do val=val*256+byte(dump,i+n-1) end return val,i+l end else subint=function(dump,i,l) local val=0 for n=1,l,1 do val=val*256+byte(dump,i+n-1) end return val,i+l end end local strip_function strip_function=function(dump) local count,offset=subint(dump,1,size) local stripped,dirty=rep("\0",size),offset+count offset=offset+count+int*2+4 offset=offset+int+subint(dump,offset,int)*ins count,offset=subint(dump,offset,int) for n=1,count do local t t,offset=subint(dump,offset,1) if t==1 then offset=offset+1 elseif t==4 then offset=offset+size+subint(dump,offset,size) elseif t==3 then offset=offset+num end end count,offset=subint(dump,offset,int) stripped=stripped..sub(dump,dirty,offset-1) for n=1,count do local proto,off=strip_function(sub(dump,offset,-1)) stripped,offset=stripped..proto,offset+off-1 end offset=offset+subint(dump,offset,int)*int+int count,offset=subint(dump,offset,int) for n=1,count do offset=offset+subint(dump,offset,size)+size+int*2 end count,offset=subint(dump,offset,int) for n=1,count do offset=offset+subint(dump,offset,size)+size end stripped=stripped..rep("\0",int*3) return stripped,offset end dump=sub(dump,1,12)..strip_function(sub(dump,13,-1)) local after=#dump local delta=register(name,before,after) return dump,delta end else strip_code_pc=function(dump,name) return dump,0 end end function luautilities.loadedluacode(fullname,forcestrip,name) local code=environment.loadpreprocessedfile and environment.preprocessedloadfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip)=="function" then forcestrip=forcestrip(fullname) end if forcestrip then local code,n=strip_code_pc(dump(code),name) return load(code),n elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code,0 end elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code,0 end end function luautilities.strippedloadstring(code,forcestrip,name) local n=0 if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then code=load(code) if not code then report_lua("fatal error in file %a",name) end code,n=strip_code_pc(dump(code),name) end return load(code),n end local function stupidcompile(luafile,lucfile,strip) local code=io.loaddata(luafile) local n=0 if code and code~="" then code=load(code) if not code then report_lua("fatal error in file %a",luafile) end code=dump(code) if strip then code,n=strip_code_pc(code,luautilities.stripcode or luautilities.alwaysstripcode,luafile) end if code and code~="" then io.savedata(lucfile,code) end end return n end local luac_normal="texluac -o %q %q" local luac_strip="texluac -s -o %q %q" function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done=false if strip~=false then strip=true end if forcestupidcompile then fallback=true elseif strip then done=os.spawn(format(luac_strip,lucfile,luafile))==0 else done=os.spawn(format(luac_normal,lucfile,luafile))==0 end if not done and fallback then local n=stupidcompile(luafile,lucfile,strip) if n>0 then report_lua("%a dumped into %a (%i bytes stripped)",luafile,lucfile,n) else report_lua("%a dumped into %a (unstripped)",luafile,lucfile) end cleanup=false done=true end if done and cleanup==true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end return done end luautilities.loadstripped=loadstring end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true -- original size: 3708, stripped down to: 2568 if not modules then modules={} end modules ['util-deb']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local debug=require "debug" local getinfo=debug.getinfo local type,next,tostring=type,next,tostring local format,find=string.format,string.find local is_boolean=string.is_boolean utilities=utilities or {} local debugger=utilities.debugger or {} utilities.debugger=debugger local counters={} local names={} local report=logs.reporter("debugger") local function hook() local f=getinfo(2) if f then local n="unknown" if f.what=="C" then n=f.name or '' if not names[n] then names[n]=format("%42s",n) end else n=f.name or f.namewhat or f.what if not n or n=="" then n="?" end if not names[n] then names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source") end end counters[n]=(counters[n] or 0)+1 end end function debugger.showstats(printer,threshold) printer=printer or report threshold=threshold or 0 local total,grandtotal,functions=0,0,0 local dataset={} for name,count in next,counters do dataset[#dataset+1]={ name,count } end table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end) for i=1,#dataset do local d=dataset[i] local name=d[1] local count=d[2] if count>threshold and not find(name,"for generator") then printer(format("%8i %s\n",count,names[name])) total=total+count end grandtotal=grandtotal+count functions=functions+1 end printer("\n") printer(format("functions : % 10i\n",functions)) printer(format("total : % 10i\n",total)) printer(format("grand total: % 10i\n",grandtotal)) printer(format("threshold : % 10i\n",threshold)) end function debugger.savestats(filename,threshold) local f=io.open(filename,'w') if f then debugger.showstats(function(str) f:write(str) end,threshold) f:close() end end function debugger.enable() debug.sethook(hook,"c") end function debugger.disable() debug.sethook() end function traceback() local level=1 while true do local info=debug.getinfo(level,"Sl") if not info then break elseif info.what=="C" then print(format("%3i : C function",level)) else print(format("%3i : [%s]:%d",level,info.short_src,info.currentline)) end level=level+1 end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-mrg"] = package.loaded["util-mrg"] or true -- original size: 7757, stripped down to: 6015 if not modules then modules={} end modules ['util-mrg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local gsub,format=string.gsub,string.format local concat=table.concat local type,next=type,next local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt,Cb,Cg=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt,lpeg.Cb,lpeg.Cg local lpegmatch,patterns=lpeg.match,lpeg.patterns utilities=utilities or {} local merger=utilities.merger or {} utilities.merger=merger merger.strip_comment=true local report=logs.reporter("system","merge") utilities.report=report local m_begin_merge="begin library merge" local m_end_merge="end library merge" local m_begin_closure="do -- create closure to overcome 200 locals limit" local m_end_closure="end -- of closure" local m_pattern="%c+".."%-%-%s+"..m_begin_merge.."%c+(.-)%c+".."%-%-%s+"..m_end_merge.."%c+" local m_format="\n\n-- "..m_begin_merge.."\n%s\n".."-- "..m_end_merge.."\n\n" local m_faked="-- ".."created merged file".."\n\n".."-- "..m_begin_merge.."\n\n".."-- "..m_end_merge.."\n\n" local m_report=[[ -- used libraries : %s -- skipped libraries : %s -- original bytes : %s -- stripped bytes : %s ]] local m_preloaded=[[package.loaded[%q] = package.loaded[%q] or true]] local function self_fake() return m_faked end local function self_nothing() return "" end local function self_load(name) local data=io.loaddata(name) or "" if data=="" then report("unknown file %a",name) else report("inserting file %a",name) end return data or "" end local space=patterns.space local eol=patterns.newline local equals=P("=")^0 local open=P("[")*Cg(equals,"init")*P("[")*P("\n")^-1 local close=P("]")*C(equals)*P("]") local closeeq=Cmt(close*Cb("init"),function(s,i,a,b) return a==b end) local longstring=open*(1-closeeq)^0*close local quoted=patterns.quoted local digit=patterns.digit local emptyline=space^0*eol local operator1=P("<=")+P(">=")+P("~=")+P("..")+S("/^<>=*+%%") local operator2=S("*+/") local operator3=S("-") local operator4=P("..") local separator=S(",;") local ignore=(P("]")*space^1*P("=")*space^1*P("]"))/"]=["+(P("=")*space^1*P("{"))/"={"+(P("(")*space^1)/"("+(P("{")*(space+eol)^1*P("}"))/"{}" local strings=quoted local longcmt=(emptyline^0*P("--")*longstring*emptyline^0)/"" local longstr=longstring local comment=emptyline^0*P("--")*P("-")^0*(1-eol)^0*emptyline^1/"\n" local optionalspaces=space^0/"" local mandatespaces=space^1/"" local optionalspacing=(eol+space)^0/"" local mandatespacing=(eol+space)^1/"" local pack=digit*space^1*operator4*optionalspacing+optionalspacing*operator1*optionalspacing+optionalspacing*operator2*optionalspaces+mandatespacing*operator3*mandatespaces+optionalspaces*separator*optionalspaces local lines=emptyline^2/"\n" local spaces=(space*space)/" " local compact=Cs (( ignore+strings+longcmt+longstr+comment+pack+lines+spaces+1 )^1 ) local strip=Cs((emptyline^2/"\n"+1)^0) local stripreturn=Cs((1-P("return")*space^1*P(1-space-eol)^1*(space+eol)^0*P(-1))^1) function merger.compact(data) return lpegmatch(strip,lpegmatch(compact,data)) end local function self_compact(data) local delta=0 if merger.strip_comment then local before=#data data=lpegmatch(compact,data) data=lpegmatch(strip,data) local after=#data delta=before-after report("original size %s, compacted to %s, stripped %s",before,after,delta) data=format("-- original size: %s, stripped down to: %s\n\n%s",before,after,data) end return lpegmatch(stripreturn,data) or data,delta end local function self_save(name,data) if data~="" then io.savedata(name,data) report("saving %s with size %s",name,#data) end end local function self_swap(data,code) return data~="" and (gsub(data,m_pattern,function() return format(m_format,code) end,1)) or "" end local function self_libs(libs,list) local result,f,frozen,foundpath={},nil,false,nil result[#result+1]="\n" if type(libs)=='string' then libs={ libs } end if type(list)=='string' then list={ list } end for i=1,#libs do local lib=libs[i] for j=1,#list do local pth=gsub(list[j],"\\","/") report("checking library path %a",pth) local name=pth.."/"..lib if lfs.isfile(name) then foundpath=pth end end if foundpath then break end end if foundpath then report("using library path %a",foundpath) local right,wrong,original,stripped={},{},0,0 for i=1,#libs do local lib=libs[i] local fullname=foundpath.."/"..lib if lfs.isfile(fullname) then report("using library %a",fullname) local preloaded=file.nameonly(lib) local data=io.loaddata(fullname,true) original=original+#data local data,delta=self_compact(data) right[#right+1]=lib result[#result+1]=m_begin_closure result[#result+1]=format(m_preloaded,preloaded,preloaded) result[#result+1]=data result[#result+1]=m_end_closure stripped=stripped+delta else report("skipping library %a",fullname) wrong[#wrong+1]=lib end end right=#right>0 and concat(right," ") or "-" wrong=#wrong>0 and concat(wrong," ") or "-" report("used libraries: %a",right) report("skipped libraries: %a",wrong) report("original bytes: %a",original) report("stripped bytes: %a",stripped) result[#result+1]=format(m_report,right,wrong,original,stripped) else report("no valid library path found") end return concat(result,"\n\n") end function merger.selfcreate(libs,list,target) if target then self_save(target,self_swap(self_fake(),self_libs(libs,list))) end end function merger.selfmerge(name,libs,list,target) self_save(target or name,self_swap(self_load(name),self_libs(libs,list))) end function merger.selfclean(name) self_save(name,self_swap(self_load(name),self_nothing())) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-tpl"] = package.loaded["util-tpl"] or true -- original size: 5655, stripped down to: 3242 if not modules then modules={} end modules ['util-tpl']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities.templates=utilities.templates or {} local templates=utilities.templates local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end) local report_template=logs.reporter("template") local tostring=tostring local format,sub=string.format,string.sub local P,C,Cs,Carg,lpegmatch=lpeg.P,lpeg.C,lpeg.Cs,lpeg.Carg,lpeg.match local replacer local function replacekey(k,t,how,recursive) local v=t[k] if not v then if trace_template then report_template("unknown key %a",k) end return "" else v=tostring(v) if trace_template then report_template("setting key %a to value %a",k,v) end if recursive then return lpegmatch(replacer,v,1,t,how,recursive) else return v end end end local sqlescape=lpeg.replacer { { "'","''" }, { "\\","\\\\" }, { "\r\n","\\n" }, { "\r","\\n" }, } local sqlquotedescape=lpeg.Cs(lpeg.Cc("'")*sqlescape*lpeg.Cc("'")) local escapers={ lua=function(s) return sub(format("%q",s),2,-2) end, sql=function(s) return lpegmatch(sqlescape,s) end, } local quotedescapers={ lua=function(s) return format("%q",s) end, sql=function(s) return lpegmatch(sqlquotedescape,s) end, } lpeg.patterns.sqlescape=sqlescape lpeg.patterns.sqlescape=sqlquotedescape local luaescaper=escapers.lua local quotedluaescaper=quotedescapers.lua local function replacekeyunquoted(s,t,how,recurse) local escaper=how and escapers[how] or luaescaper return escaper(replacekey(s,t,how,recurse)) end local function replacekeyquoted(s,t,how,recurse) local escaper=how and quotedescapers[how] or quotedluaescaper return escaper(replacekey(s,t,how,recurse)) end local single=P("%") local double=P("%%") local lquoted=P("%[") local rquoted=P("]%") local lquotedq=P("%(") local rquotedq=P(")%") local escape=double/'%%' local nosingle=single/'' local nodouble=double/'' local nolquoted=lquoted/'' local norquoted=rquoted/'' local nolquotedq=lquotedq/'' local norquotedq=rquotedq/'' local key=nosingle*((C((1-nosingle )^1)*Carg(1)*Carg(2)*Carg(3))/replacekey )*nosingle local quoted=nolquotedq*((C((1-norquotedq)^1)*Carg(1)*Carg(2)*Carg(3))/replacekeyquoted )*norquotedq local unquoted=nolquoted*((C((1-norquoted )^1)*Carg(1)*Carg(2)*Carg(3))/replacekeyunquoted)*norquoted local any=P(1) replacer=Cs((unquoted+quoted+escape+key+any)^0) local function replace(str,mapping,how,recurse) if mapping and str then return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str else return str end end templates.replace=replace function templates.load(filename,mapping,how,recurse) local data=io.loaddata(filename) or "" if mapping and next(mapping) then return replace(data,mapping,how,recurse) else return data end end function templates.resolve(t,mapping,how,recurse) if not mapping then mapping=t end for k,v in next,t do t[k]=replace(v,mapping,how,recurse) end return t end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-env"] = package.loaded["util-env"] or true -- original size: 8722, stripped down to: 5050 if not modules then modules={} end modules ['util-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate,mark=utilities.storage.allocate,utilities.storage.mark local format,sub,match,gsub,find=string.format,string.sub,string.match,string.gsub,string.find local unquoted,quoted=string.unquoted,string.quoted local concat,insert,remove=table.concat,table.insert,table.remove environment=environment or {} local environment=environment os.setlocale(nil,nil) function os.setlocale() end local validengines=allocate { ["luatex"]=true, ["luajittex"]=true, } local basicengines=allocate { ["luatex"]="luatex", ["texlua"]="luatex", ["texluac"]="luatex", ["luajittex"]="luajittex", ["texluajit"]="luajittex", } local luaengines=allocate { ["lua"]=true, ["luajit"]=true, } environment.validengines=validengines environment.basicengines=basicengines if not arg then elseif luaengines[file.removesuffix(arg[-1])] then elseif validengines[file.removesuffix(arg[0])] then if arg[1]=="--luaonly" then arg[-1]=arg[0] arg[ 0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end remove(arg) remove(arg) else end local originalzero=file.basename(arg[0]) local specialmapping={ luatools=="base" } if originalzero~="mtxrun" and originalzero~="mtxrun.lua" then arg[0]=specialmapping[originalzero] or originalzero insert(arg,0,"--script") insert(arg,0,"mtxrun") end end environment.arguments=allocate() environment.files=allocate() environment.sortedflags=nil function environment.initializearguments(arg) local arguments,files={},{} environment.arguments,environment.files,environment.sortedflags=arguments,files,nil for index=1,#arg do local argument=arg[index] if index>0 then local flag,value=match(argument,"^%-+(.-)=(.-)$") if flag then flag=gsub(flag,"^c:","") arguments[flag]=unquoted(value or "") else flag=match(argument,"^%-+(.+)") if flag then flag=gsub(flag,"^c:","") arguments[flag]=true else files[#files+1]=argument end end end end environment.ownname=file.reslash(environment.ownname or arg[0] or 'unknown.lua') end function environment.setargument(name,value) environment.arguments[name]=value end function environment.getargument(name,partial) local arguments,sortedflags=environment.arguments,environment.sortedflags if arguments[name] then return arguments[name] elseif partial then if not sortedflags then sortedflags=allocate(table.sortedkeys(arguments)) for k=1,#sortedflags do sortedflags[k]="^"..sortedflags[k] end environment.sortedflags=sortedflags end for k=1,#sortedflags do local v=sortedflags[k] if find(name,v) then return arguments[sub(v,2,#v)] end end end return nil end environment.argument=environment.getargument function environment.splitarguments(separator) local done,before,after=false,{},{} local originalarguments=environment.originalarguments for k=1,#originalarguments do local v=originalarguments[k] if not done and v==separator then done=true elseif done then after[#after+1]=v else before[#before+1]=v end end return before,after end function environment.reconstructcommandline(arg,noquote) arg=arg or environment.originalarguments if noquote and #arg==1 then local a=arg[1] a=resolvers.resolve(a) a=unquoted(a) return a elseif #arg>0 then local result={} for i=1,#arg do local a=arg[i] a=resolvers.resolve(a) a=unquoted(a) a=gsub(a,'"','\\"') if find(a," ") then result[#result+1]=quoted(a) else result[#result+1]=a end end return concat(result," ") else return "" end end function environment.relativepath(path,root) if not path then path="" end if not file.is_rootbased_path(path) then if not root then root=file.pathpart(environment.ownscript or environment.ownname or ".") end if root=="" then root="." end path=root.."/"..path end return file.collapsepath(path,true) end if arg then local newarg,instring={},false for index=1,#arg do local argument=arg[index] if find(argument,"^\"") then newarg[#newarg+1]=gsub(argument,"^\"","") if not find(argument,"\"$") then instring=true end elseif find(argument,"\"$") then newarg[#newarg]=newarg[#newarg].." "..gsub(argument,"\"$","") instring=false elseif instring then newarg[#newarg]=newarg[#newarg].." "..argument else newarg[#newarg+1]=argument end end for i=1,-5,-1 do newarg[i]=arg[i] end environment.initializearguments(newarg) environment.originalarguments=mark(newarg) environment.rawarguments=mark(arg) arg={} end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-env"] = package.loaded["luat-env"] or true -- original size: 5874, stripped down to: 4184 if not modules then modules={} end modules ['luat-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local rawset,rawget,loadfile,assert=rawset,rawget,loadfile,assert local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_lua=logs.reporter("resolvers","lua") local luautilities=utilities.lua local luasuffixes=luautilities.suffixes environment=environment or {} local environment=environment local mt={ __index=function(_,k) if k=="version" then local version=tex.toks and tex.toks.contextversiontoks if version and version~="" then rawset(environment,"version",version) return version else return "unknown" end elseif k=="kind" then local kind=tex.toks and tex.toks.contextkindtoks if kind and kind~="" then rawset(environment,"kind",kind) return kind else return "unknown" end elseif k=="jobname" or k=="formatname" then local name=tex and tex[k] if name or name=="" then rawset(environment,k,name) return name else return "unknown" end elseif k=="outputfilename" then local name=environment.jobname rawset(environment,k,name) return name end end } setmetatable(environment,mt) function environment.texfile(filename) return resolvers.findfile(filename,'tex') end function environment.luafile(filename) local resolved=resolvers.findfile(filename,'tex') or "" if resolved~="" then return resolved end resolved=resolvers.findfile(filename,'texmfscripts') or "" if resolved~="" then return resolved end return resolvers.findfile(filename,'luatexlibs') or "" end local stripindeed=false directives.register("system.compile.strip",function(v) stripindeed=v end) local function strippable(filename) if stripindeed then local modu=modules[file.nameonly(filename)] return modu and modu.dataonly else return false end end function environment.luafilechunk(filename,silent) filename=file.replacesuffix(filename,"lua") local fullname=environment.luafile(filename) if fullname and fullname~="" then local data=luautilities.loadedluacode(fullname,strippable,filename) if trace_locating then report_lua("loading file %a %s",fullname,not data and "failed" or "succeeded") elseif not silent then texio.write("<",data and "+ " or "- ",fullname,">") end return data else if trace_locating then report_lua("unknown file %a",filename) end return nil end end function environment.loadluafile(filename,version) local lucname,luaname,chunk local basename=file.removesuffix(filename) if basename==filename then luaname=file.addsuffix(basename,luasuffixes.lua) lucname=file.addsuffix(basename,luasuffixes.luc) else luaname=basename lucname=nil end local fullname=(lucname and environment.luafile(lucname)) or "" if fullname~="" then if trace_locating then report_lua("loading %a",fullname) end chunk=loadfile(fullname) end if chunk then assert(chunk)() if version then local v=version if modules and modules[filename] then v=modules[filename].version elseif versions and versions[filename] then v=versions[filename] end if v==version then return true else if trace_locating then report_lua("version mismatch for %a, lua version %a, luc version %a",filename,v,version) end environment.loadluafile(filename) end else return true end end fullname=(luaname and environment.luafile(luaname)) or "" if fullname~="" then if trace_locating then report_lua("loading %a",fullname) end chunk=loadfile(fullname) if not chunk then if trace_locating then report_lua("unknown file %a",filename) end else assert(chunk)() return true end end return false end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true -- original size: 42495, stripped down to: 26647 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end) local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end xml=xml or {} local xml=xml local concat,remove,insert=table.concat,table.remove,table.insert local type,next,setmetatable,getmetatable,tonumber=type,next,setmetatable,getmetatable,tonumber local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub local utfchar=utf.char local lpegmatch=lpeg.match local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs local formatters=string.formatters xml.xmlns=xml.xmlns or {} local check=P(false) local parse=check function xml.registerns(namespace,pattern) check=check+C(P(lower(pattern)))/namespace parse=P { P(check)+1*V(1) } end function xml.checkns(namespace,url) local ns=lpegmatch(parse,lower(url)) if ns and namespace~=ns then xml.xmlns[namespace]=ns end end function xml.resolvens(url) return lpegmatch(parse,lower(url)) or "" end local nsremap,resolvens=xml.xmlns,xml.resolvens local stack={} local top={} local dt={} local at={} local xmlns={} local errorstr=nil local entities={} local strip=false local cleanup=false local utfize=false local resolve_predefined=false local unify_predefined=false local dcache={} local hcache={} local acache={} local mt={} local function initialize_mt(root) mt={ __index=root } end function xml.setproperty(root,k,v) getmetatable(root).__index[k]=v end function xml.checkerror(top,toclose) return "" end local function add_attribute(namespace,tag,value) if cleanup and #value>0 then value=cleanup(value) end if tag=="xmlns" then xmlns[#xmlns+1]=resolvens(value) at[tag]=value elseif namespace=="" then at[tag]=value elseif namespace=="xmlns" then xml.checkns(tag,value) at["xmlns:"..tag]=value else at[namespace..":"..tag]=value end end local function add_empty(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace top=stack[#stack] dt=top.dt local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top } dt[#dt+1]=t setmetatable(t,mt) if at.xmlns then remove(xmlns) end at={} end local function add_begin(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] } setmetatable(top,mt) dt=top.dt stack[#stack+1]=top at={} end local function add_end(spacing,namespace,tag) if #spacing>0 then dt[#dt+1]=spacing end local toclose=remove(stack) top=stack[#stack] if #stack<1 then errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "") elseif toclose.tg~=tag then errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "") end dt=top.dt dt[#dt+1]=toclose if toclose.at.xmlns then remove(xmlns) end end local function add_text(text) if cleanup and #text>0 then dt[#dt+1]=cleanup(text) else dt[#dt+1]=text end end local function add_special(what,spacing,text) if #spacing>0 then dt[#dt+1]=spacing end if strip and (what=="@cm@" or what=="@dt@") then else dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } } end end local function set_message(txt) errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","") end local reported_attribute_errors={} local function attribute_value_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute value %a",str) reported_attribute_errors[str]=true at._error_=str end return str end local function attribute_specification_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute specification %a",str) reported_attribute_errors[str]=true at._error_=str end return str end xml.placeholders={ unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end, unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end, unknown_any_entity=function(str) return formatters["&#x%s;"](str) end, } local placeholders=xml.placeholders local function fromhex(s) local n=tonumber(s,16) if n then return utfchar(n) else return formatters["h:%s"](s),true end end local function fromdec(s) local n=tonumber(s) if n then return utfchar(n) else return formatters["d:%s"](s),true end end local rest=(1-P(";"))^0 local many=P(1)^0 local parsedentity=P("&")*(P("#x")*(rest/fromhex)+P("#")*(rest/fromdec))*P(";")*P(-1)+(P("#x")*(many/fromhex)+P("#")*(many/fromdec)) local predefined_unified={ [38]="&", [42]=""", [47]="'", [74]="<", [76]=">", } local predefined_simplified={ [38]="&",amp="&", [42]='"',quot='"', [47]="'",apos="'", [74]="<",lt="<", [76]=">",gt=">", } local nofprivates=0xF0000 local privates_u={ [ [[&]] ]="&", [ [["]] ]=""", [ [[']] ]="'", [ [[<]] ]="<", [ [[>]] ]=">", } local privates_p={} local privates_n={ } local escaped=utf.remapper(privates_u) local function unescaped(s) local p=privates_n[s] if not p then nofprivates=nofprivates+1 p=utfchar(nofprivates) privates_n[s]=p s="&"..s..";" privates_u[p]=s privates_p[p]=s end return p end local unprivatized=utf.remapper(privates_p) xml.privatetoken=unescaped xml.unprivatized=unprivatized xml.privatecodes=privates_n local function handle_hex_entity(str) local h=hcache[str] if not h then local n=tonumber(str,16) h=unify_predefined and predefined_unified[n] if h then if trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end elseif utfize then h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or "" if not n then report_xml("utfize, ignoring hex entity &#x%s;",str) elseif trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end else if trace_entities then report_xml("found entity &#x%s;",str) end h="&#x"..str..";" end hcache[str]=h end return h end local function handle_dec_entity(str) local d=dcache[str] if not d then local n=tonumber(str) d=unify_predefined and predefined_unified[n] if d then if trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end elseif utfize then d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or "" if not n then report_xml("utfize, ignoring dec entity &#%s;",str) elseif trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end else if trace_entities then report_xml("found entity &#%s;",str) end d="&#"..str..";" end dcache[str]=d end return d end xml.parsedentitylpeg=parsedentity local function handle_any_entity(str) if resolve then local a=acache[str] if not a then a=resolve_predefined and predefined_simplified[str] if a then if trace_entities then report_xml("resolving entity &%s; to predefined %a",str,a) end else if type(resolve)=="function" then a=resolve(str) or entities[str] else a=entities[str] end if a then if type(a)=="function" then if trace_entities then report_xml("expanding entity &%s; to function call",str) end a=a(str) or "" end a=lpegmatch(parsedentity,a) or a if trace_entities then report_xml("resolving entity &%s; to internal %a",str,a) end else local unknown_any_entity=placeholders.unknown_any_entity if unknown_any_entity then a=unknown_any_entity(str) or "" end if a then if trace_entities then report_xml("resolving entity &%s; to external %s",str,a) end else if trace_entities then report_xml("keeping entity &%s;",str) end if str=="" then a="&error;" else a="&"..str..";" end end end end acache[str]=a elseif trace_entities then if not acache[str] then report_xml("converting entity &%s; to %a",str,a) acache[str]=a end end return a else local a=acache[str] if not a then a=resolve_predefined and predefined_simplified[str] if a then acache[str]=a if trace_entities then report_xml("entity &%s; becomes %a",str,a) end elseif str=="" then if trace_entities then report_xml("invalid entity &%s;",str) end a="&error;" acache[str]=a else if trace_entities then report_xml("entity &%s; is made private",str) end a=unescaped(str) acache[str]=a end end return a end end local function handle_end_entity(chr) report_xml("error in entity, %a found instead of %a",chr,";") end local space=S(' \r\n\t') local open=P('<') local close=P('>') local squote=S("'") local dquote=S('"') local equal=P('=') local slash=P('/') local colon=P(':') local semicolon=P(';') local ampersand=P('&') local valid=R('az','AZ','09')+S('_-.') local name_yes=C(valid^1)*colon*C(valid^1) local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpeg.patterns.utfbom local spacing=C(space^0) local anyentitycontent=(1-open-semicolon-space-close)^0 local hexentitycontent=R("AF","af","09")^0 local decentitycontent=R("09")^0 local parsedentity=P("#")/""*( P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) )+(anyentitycontent/handle_any_entity) local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity)) local text_unparsed=C((1-open)^1) local text_parsed=Cs(((1-open-ampersand)^1+entity)^1) local somespace=space^1 local optionalspace=space^0 local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) local endofattributes=slash*close+close local whatever=space*name*optionalspace*equal local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error local attributevalue=value+wrongvalue local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 local parsedtext=text_parsed/add_text local unparsedtext=text_unparsed/add_text local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin local endelement=(spacing*open*slash*name*optionalspace*close)/add_end local begincomment=open*P("!--") local endcomment=P("--")*close local begininstruction=open*P("?") local endinstruction=P("?")*close local begincdata=open*P("![CDATA[") local endcdata=P("]]")*close local someinstruction=C((1-endinstruction)^0) local somecomment=C((1-endcomment )^0) local somecdata=C((1-endcdata )^0) local function normalentity(k,v ) entities[k]=v end local function systementity(k,v,n) entities[k]=v end local function publicentity(k,v,n) entities[k]=v end local begindoctype=open*P("!DOCTYPE") local enddoctype=close local beginset=P("[") local endset=P("]") local doctypename=C((1-somespace-close)^0) local elementdoctype=optionalspace*P("1 and root) or root[1] else return data end end local function copy(old,tables) if old then tables=tables or {} local new={} if not tables[old] then tables[old]=new end for k,v in next,old do new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v end local mt=getmetatable(old) if mt then setmetatable(new,mt) end return new else return {} end end xml.copy=copy function xml.checkbom(root) if root.ri then local dt=root.dt for k=1,#dt do local v=dt[k] if type(v)=="table" and v.special and v.tg=="@pi@" and find(v.dt[1],"xml.*version=") then return end end insert(dt,1,{ special=true,ns="",tg="@pi@",dt={ "xml version='1.0' standalone='yes'" } } ) insert(dt,2,"\n" ) end end local function verbose_element(e,handlers) local handle=handlers.handle local serialize=handlers.serialize local ens,etg,eat,edt,ern=e.ns,e.tg,e.at,e.dt,e.rn local ats=eat and next(eat) and {} if ats then for k,v in next,eat do ats[#ats+1]=formatters['%s=%q'](k,escaped(v)) end end if ern and trace_entities and ern~=ens then ens=ern end if ens~="" then if edt and #edt>0 then if ats then handle("<",ens,":",etg," ",concat(ats," "),">") else handle("<",ens,":",etg,">") end for i=1,#edt do local e=edt[i] if type(e)=="string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",ens,":",etg," ",concat(ats," "),"/>") else handle("<",ens,":",etg,"/>") end end else if edt and #edt>0 then if ats then handle("<",etg," ",concat(ats," "),">") else handle("<",etg,">") end for i=1,#edt do local e=edt[i] if type(e)=="string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",etg," ",concat(ats," "),"/>") else handle("<",etg,"/>") end end end end local function verbose_pi(e,handlers) handlers.handle("") end local function verbose_comment(e,handlers) handlers.handle("") end local function verbose_cdata(e,handlers) handlers.handle("") end local function verbose_doctype(e,handlers) handlers.handle("") end local function verbose_root(e,handlers) handlers.serialize(e.dt,handlers) end local function verbose_text(e,handlers) handlers.handle(escaped(e)) end local function verbose_document(e,handlers) local serialize=handlers.serialize local functions=handlers.functions for i=1,#e do local ei=e[i] if type(ei)=="string" then functions["@tx@"](ei,handlers) else serialize(ei,handlers) end end end local function serialize(e,handlers,...) local initialize=handlers.initialize local finalize=handlers.finalize local functions=handlers.functions if initialize then local state=initialize(...) if not state==true then return state end end local etg=e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) else functions["@dc@"](e,handlers) end if finalize then return finalize() end end local function xserialize(e,handlers) local functions=handlers.functions local etg=e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) else functions["@dc@"](e,handlers) end end local handlers={} local function newhandlers(settings) local t=table.copy(handlers[settings and settings.parent or "verbose"] or {}) if settings then for k,v in next,settings do if type(v)=="table" then local tk=t[k] if not tk then tk={} t[k]=tk end for kk,vv in next,v do tk[kk]=vv end else t[k]=v end end if settings.name then handlers[settings.name]=t end end utilities.storage.mark(t) return t end local nofunction=function() end function xml.sethandlersfunction(handler,name,fnc) handler.functions[name]=fnc or nofunction end function xml.gethandlersfunction(handler,name) return handler.functions[name] end function xml.gethandlers(name) return handlers[name] end newhandlers { name="verbose", initialize=false, finalize=false, serialize=xserialize, handle=print, functions={ ["@dc@"]=verbose_document, ["@dt@"]=verbose_doctype, ["@rt@"]=verbose_root, ["@el@"]=verbose_element, ["@pi@"]=verbose_pi, ["@cm@"]=verbose_comment, ["@cd@"]=verbose_cdata, ["@tx@"]=verbose_text, } } local result local xmlfilehandler=newhandlers { name="file", initialize=function(name) result=io.open(name,"wb") return result end, finalize=function() result:close() return true end, handle=function(...) result:write(...) end, } function xml.save(root,name) serialize(root,xmlfilehandler,name) end local result local xmlstringhandler=newhandlers { name="string", initialize=function() result={} return result end, finalize=function() return concat(result) end, handle=function(...) result[#result+1]=concat {... } end, } local function xmltostring(root) if not root then return "" elseif type(root)=="string" then return root else return serialize(root,xmlstringhandler) or "" end end local function __tostring(root) return (root and xmltostring(root)) or "" end initialize_mt=function(root) mt={ __tostring=__tostring,__index=root } end xml.defaulthandlers=handlers xml.newhandlers=newhandlers xml.serialize=serialize xml.tostring=xmltostring local function xmlstring(e,handle) if not handle or (e.special and e.tg~="@rt@") then elseif e.tg then local edt=e.dt if edt then for i=1,#edt do xmlstring(edt[i],handle) end end else handle(e) end end xml.string=xmlstring function xml.settings(e) while e do local s=e.settings if s then return s else e=e.__p__ end end return nil end function xml.root(e) local r=e while e do e=e.__p__ if e then r=e end end return r end function xml.parent(root) return root.__p__ end function xml.body(root) return root.ri and root.dt[root.ri] or root end function xml.name(root) if not root then return "" end local ns=root.ns local tg=root.tg if ns=="" then return tg else return ns..":"..tg end end function xml.erase(dt,k) if dt then if k then dt[k]="" else for k=1,#dt do dt[1]={ "" } end end end end function xml.assign(dt,k,root) if dt and k then dt[k]=type(root)=="table" and xml.body(root) or root return dt[k] else return xml.body(root) end end function xml.tocdata(e,wrapper) local whatever=type(e)=="table" and xmltostring(e.dt) or e or "" if wrapper then whatever=formatters["<%s>%s"](wrapper,whatever,wrapper) end local t={ special=true,ns="",tg="@cd@",at={},rn="",dt={ whatever },__p__=e } setmetatable(t,getmetatable(e)) e.dt={ t } end function xml.makestandalone(root) if root.ri then local dt=root.dt for k=1,#dt do local v=dt[k] if type(v)=="table" and v.special and v.tg=="@pi@" then local txt=v.dt[1] if find(txt,"xml.*version=") then v.dt[1]=txt.." standalone='yes'" break end end end end return root end function xml.kind(e) local dt=e and e.dt if dt then local n=#dt if n==1 then local d=dt[1] if d.special then local tg=d.tg if tg=="@cd@" then return "cdata" elseif tg=="@cm" then return "comment" elseif tg=="@pi@" then return "instruction" elseif tg=="@dt@" then return "declaration" end elseif type(d)=="string" then return "text" end return "element" elseif n>0 then return "mixed" end end return "empty" end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true -- original size: 48956, stripped down to: 30516 if not modules then modules={} end modules ['lxml-lpt']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat,remove,insert=table.concat,table.remove,table.insert local type,next,tonumber,tostring,setmetatable,load,select=type,next,tonumber,tostring,setmetatable,load,select local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.lower,string.gmatch,string.gsub,string.find,string.rep local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local setmetatableindex=table.setmetatableindex local formatters=string.formatters local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end local report_lpath=logs.reporter("xml","lpath") local xml=xml local lpathcalls=0 function xml.lpathcalls () return lpathcalls end local lpathcached=0 function xml.lpathcached() return lpathcached end xml.functions=xml.functions or {} local functions=xml.functions xml.expressions=xml.expressions or {} local expressions=xml.expressions xml.finalizers=xml.finalizers or {} local finalizers=xml.finalizers xml.specialhandler=xml.specialhandler or {} local specialhandler=xml.specialhandler lpegpatterns.xml=lpegpatterns.xml or {} local xmlpatterns=lpegpatterns.xml finalizers.xml=finalizers.xml or {} finalizers.tex=finalizers.tex or {} local function fallback (t,name) local fn=finalizers[name] if fn then t[name]=fn else report_lpath("unknown sub finalizer %a",name) fn=function() end end return fn end setmetatableindex(finalizers.xml,fallback) setmetatableindex(finalizers.tex,fallback) xml.defaultprotocol="xml" local apply_axis={} apply_axis['root']=function(list) local collected={} for l=1,#list do local ll=list[l] local rt=ll while ll do ll=ll.__p__ if ll then rt=ll end end collected[l]=rt end return collected end apply_axis['self']=function(list) return list end apply_axis['child']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local dt=ll.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en end end ll.en=en end end return collected end local function collect(list,collected,c) local dt=list.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en c=collect(dk,collected,c) end end list.en=en end return c end apply_axis['descendant']=function(list) local collected,c={},0 for l=1,#list do c=collect(list[l],collected,c) end return collected end local function collect(list,collected,c) local dt=list.dt if dt then local en=0 for k=1,#dt do local dk=dt[k] if dk.tg then c=c+1 collected[c]=dk dk.ni=k en=en+1 dk.ei=en c=collect(dk,collected,c) end end list.en=en end return c end apply_axis['descendant-or-self']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] if ll.special~=true then c=c+1 collected[c]=ll end c=collect(ll,collected,c) end return collected end apply_axis['ancestor']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] while ll do ll=ll.__p__ if ll then c=c+1 collected[c]=ll end end end return collected end apply_axis['ancestor-or-self']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] c=c+1 collected[c]=ll while ll do ll=ll.__p__ if ll then c=c+1 collected[c]=ll end end end return collected end apply_axis['parent']=function(list) local collected,c={},0 for l=1,#list do local pl=list[l].__p__ if pl then c=c+1 collected[c]=pl end end return collected end apply_axis['attribute']=function(list) return {} end apply_axis['namespace']=function(list) return {} end apply_axis['following']=function(list) return {} end apply_axis['preceding']=function(list) return {} end apply_axis['following-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=ll.ni+1,#d do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['preceding-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=1,ll.ni-1 do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['reverse-sibling']=function(list) local collected,c={},0 for l=1,#list do local ll=list[l] local p=ll.__p__ local d=p.dt for i=ll.ni-1,1,-1 do local di=d[i] if type(di)=="table" then c=c+1 collected[c]=di end end end return collected end apply_axis['auto-descendant-or-self']=apply_axis['descendant-or-self'] apply_axis['auto-descendant']=apply_axis['descendant'] apply_axis['auto-child']=apply_axis['child'] apply_axis['auto-self']=apply_axis['self'] apply_axis['initial-child']=apply_axis['child'] local function apply_nodes(list,directive,nodes) local maxn=#nodes if maxn==3 then local nns,ntg=nodes[2],nodes[3] if not nns and not ntg then if directive then return list else return {} end else local collected,c,m,p={},0,0,nil if not nns then for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then if directive then if ntg==ltg then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif ntg~=ltg then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end elseif not ntg then for l=1,#list do local ll=list[l] local lns=ll.rn or ll.ns if lns then if directive then if lns==nns then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif lns~=nns then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end else for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then local lns=ll.rn or ll.ns local ok=ltg==ntg and lns==nns if directive then if ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif not ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end end return collected end else local collected,c,m,p={},0,0,nil for l=1,#list do local ll=list[l] local ltg=ll.tg if ltg then local lns=ll.rn or ll.ns local ok=false for n=1,maxn,3 do local nns,ntg=nodes[n+1],nodes[n+2] ok=(not ntg or ltg==ntg) and (not nns or lns==nns) if ok then break end end if directive then if ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end elseif not ok then local llp=ll.__p__;if llp~=p then p,m=llp,1 else m=m+1 end c=c+1 collected[c],ll.mi=ll,m end end end return collected end end local quit_expression=false local function apply_expression(list,expression,order) local collected,c={},0 quit_expression=false for l=1,#list do local ll=list[l] if expression(list,ll,l,order) then c=c+1 collected[c]=ll end if quit_expression then break end end return collected end local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb local spaces=S(" \n\r\t\f")^0 local lp_space=S(" \n\r\t\f") local lp_any=P(1) local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==") local lp_doequal=P("=")/"==" local lp_or=P("|")/" or " local lp_and=P("&")/" and " local lp_builtin=P ( P("text")/"(ll.dt[1] or '')"+ P("content")/"ll.dt"+ P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+ P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+ P("ns")/"ll.ns" )*((spaces*P("(")*spaces*P(")"))/"") local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])") lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0" lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))" local lp_fastpos=lp_fastpos_n+lp_fastpos_p local lp_reserved=C("and")+C("or")+C("not")+C("div")+C("mod")+C("true")+C("false") local lp_lua_function=Cs((R("az","AZ","__")^1*(P(".")*R("az","AZ","__")^1)^1)*("("))/"%0" local lp_function=C(R("az","AZ","__")^1)*P("(")/function(t) if expressions[t] then return "expr."..t.."(" else return "expr.error(" end end local lparent=P("(") local rparent=P(")") local noparent=1-(lparent+rparent) local nested=P{lparent*(noparent+V(1))^0*rparent} local value=P(lparent*C((noparent+nested)^0)*rparent) local lp_child=Cc("expr.child(ll,'")*R("az","AZ","--","__")^1*Cc("')") local lp_number=S("+-")*R("09")^1 local lp_string=Cc("'")*R("az","AZ","--","__")^1*Cc("'") local lp_content=(P("'")*(1-P("'"))^0*P("'")+P('"')*(1-P('"'))^0*P('"')) local cleaner local lp_special=(C(P("name")+P("text")+P("tag")+P("count")+P("child")))*value/function(t,s) if expressions[t] then s=s and s~="" and lpegmatch(cleaner,s) if s and s~="" then return "expr."..t.."(ll,"..s..")" else return "expr."..t.."(ll)" end else return "expr.error("..t..")" end end local content=lp_builtin+lp_attribute+lp_special+lp_noequal+lp_doequal+lp_or+lp_and+lp_reserved+lp_lua_function+lp_function+lp_content+ lp_child+lp_any local converter=Cs ( lp_fastpos+(P { lparent*(V(1))^0*rparent+content } )^0 ) cleaner=Cs (( lp_reserved+lp_number+lp_string+1 )^1 ) local template_e=[[ local expr = xml.expressions return function(list,ll,l,order) return %s end ]] local template_f_y=[[ local finalizer = xml.finalizers['%s']['%s'] return function(collection) return finalizer(collection,%s) end ]] local template_f_n=[[ return xml.finalizers['%s']['%s'] ]] local register_self={ kind="axis",axis="self" } local register_parent={ kind="axis",axis="parent" } local register_descendant={ kind="axis",axis="descendant" } local register_child={ kind="axis",axis="child" } local register_descendant_or_self={ kind="axis",axis="descendant-or-self" } local register_root={ kind="axis",axis="root" } local register_ancestor={ kind="axis",axis="ancestor" } local register_ancestor_or_self={ kind="axis",axis="ancestor-or-self" } local register_attribute={ kind="axis",axis="attribute" } local register_namespace={ kind="axis",axis="namespace" } local register_following={ kind="axis",axis="following" } local register_following_sibling={ kind="axis",axis="following-sibling" } local register_preceding={ kind="axis",axis="preceding" } local register_preceding_sibling={ kind="axis",axis="preceding-sibling" } local register_reverse_sibling={ kind="axis",axis="reverse-sibling" } local register_auto_descendant_or_self={ kind="axis",axis="auto-descendant-or-self" } local register_auto_descendant={ kind="axis",axis="auto-descendant" } local register_auto_self={ kind="axis",axis="auto-self" } local register_auto_child={ kind="axis",axis="auto-child" } local register_initial_child={ kind="axis",axis="initial-child" } local register_all_nodes={ kind="nodes",nodetest=true,nodes={ true,false,false } } local skip={} local function errorrunner_e(str,cnv) if not skip[str] then report_lpath("error in expression: %s => %s",str,cnv) skip[str]=cnv or str end return false end local function errorrunner_f(str,arg) report_lpath("error in finalizer: %s(%s)",str,arg or "") return false end local function register_nodes(nodetest,nodes) return { kind="nodes",nodetest=nodetest,nodes=nodes } end local function register_expression(expression) local converted=lpegmatch(converter,expression) local runner=load(format(template_e,converted)) runner=(runner and runner()) or function() errorrunner_e(expression,converted) end return { kind="expression",expression=expression,converted=converted,evaluator=runner } end local function register_finalizer(protocol,name,arguments) local runner if arguments and arguments~="" then runner=load(format(template_f_y,protocol or xml.defaultprotocol,name,arguments)) else runner=load(format(template_f_n,protocol or xml.defaultprotocol,name)) end runner=(runner and runner()) or function() errorrunner_f(name,arguments) end return { kind="finalizer",name=name,arguments=arguments,finalizer=runner } end local expression=P { "ex", ex="["*C((V("sq")+V("dq")+(1-S("[]"))+V("ex"))^0)*"]", sq="'"*(1-S("'"))^0*"'", dq='"'*(1-S('"'))^0*'"', } local arguments=P { "ar", ar="("*Cs((V("sq")+V("dq")+V("nq")+P(1-P(")")))^0)*")", nq=((1-S("),'\""))^1)/function(s) return format("%q",s) end, sq=P("'")*(1-P("'"))^0*P("'"), dq=P('"')*(1-P('"'))^0*P('"'), } local function register_error(str) return { kind="error",error=format("unparsed: %s",str) } end local special_1=P("*")*Cc(register_auto_descendant)*Cc(register_all_nodes) local special_2=P("/")*Cc(register_auto_self) local special_3=P("")*Cc(register_auto_self) local no_nextcolon=P(-1)+#(1-P(":")) local no_nextlparent=P(-1)+#(1-P("(")) local pathparser=Ct { "patterns", patterns=spaces*V("protocol")*spaces*( (V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 ) ), protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"), step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0, axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child), special=special_1+special_2+special_3, initial=(P("/")*spaces*Cc(register_initial_child))^-1, error=(P(1)^1)/register_error, shortcuts_a=V("s_descendant_or_self")+V("s_descendant")+V("s_child")+V("s_parent")+V("s_self")+V("s_root")+V("s_ancestor"), shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0, s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self), s_descendant=P("**")*Cc(register_descendant), s_child=P("*")*no_nextcolon*Cc(register_child ), s_parent=P("..")*Cc(register_parent ), s_self=P("." )*Cc(register_self ), s_root=P("^^")*Cc(register_root ), s_ancestor=P("^")*Cc(register_ancestor ), descendant=P("descendant::")*Cc(register_descendant ), child=P("child::")*Cc(register_child ), parent=P("parent::")*Cc(register_parent ), self=P("self::")*Cc(register_self ), root=P('root::')*Cc(register_root ), ancestor=P('ancestor::')*Cc(register_ancestor ), descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ), ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ), following=P('following::')*Cc(register_following ), following_sibling=P('following-sibling::')*Cc(register_following_sibling ), preceding=P('preceding::')*Cc(register_preceding ), preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ), reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ), nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes, expressions=expression/register_expression, letters=R("az")^1, name=(1-S("/[]()|:*!"))^1, negate=P("!")*Cc(false), nodefunction=V("negate")+P("not")*Cc(false)+Cc(true), nodetest=V("negate")+Cc(true), nodename=(V("negate")+Cc(true))*spaces*((V("wildnodename")*P(":")*V("wildnodename"))+(Cc(false)*V("wildnodename"))), wildnodename=(C(V("name"))+P("*")*Cc(false))*no_nextlparent, nodeset=spaces*Ct(V("nodename")*(spaces*P("|")*spaces*V("nodename"))^0)*spaces, finalizer=(Cb("protocol")*P("/")^-1*C(V("name"))*arguments*P(-1))/register_finalizer, } xmlpatterns.pathparser=pathparser local cache={} local function nodesettostring(set,nodetest) local t={} for i=1,#set,3 do local directive,ns,tg=set[i],set[i+1],set[i+2] if not ns or ns=="" then ns="*" end if not tg or tg=="" then tg="*" end tg=(tg=="@rt@" and "[root]") or format("%s:%s",ns,tg) t[i]=(directive and tg) or format("not(%s)",tg) end if nodetest==false then return format("not(%s)",concat(t,"|")) else return concat(t,"|") end end local function tagstostring(list) if #list==0 then return "no elements" else local t={} for i=1,#list do local li=list[i] local ns,tg=li.ns,li.tg if not ns or ns=="" then ns="*" end if not tg or tg=="" then tg="*" end t[i]=(tg=="@rt@" and "[root]") or format("%s:%s",ns,tg) end return concat(t," ") end end xml.nodesettostring=nodesettostring local lpath local lshowoptions={ functions=false } local function lshow(parsed) if type(parsed)=="string" then parsed=lpath(parsed) end report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern, table.serialize(parsed,false,lshowoptions)) end xml.lshow=lshow local function add_comment(p,str) local pc=p.comment if not pc then p.comment={ str } else pc[#pc+1]=str end end lpath=function (pattern) lpathcalls=lpathcalls+1 if type(pattern)=="table" then return pattern else local parsed=cache[pattern] if parsed then lpathcached=lpathcached+1 else parsed=lpegmatch(pathparser,pattern) if parsed then parsed.pattern=pattern local np=#parsed if np==0 then parsed={ pattern=pattern,register_self,state="parsing error" } report_lpath("parsing error in pattern: %s",pattern) lshow(parsed) else local pi=parsed[1] if pi.axis=="auto-child" then if false then add_comment(parsed,"auto-child replaced by auto-descendant-or-self") parsed[1]=register_auto_descendant_or_self else add_comment(parsed,"auto-child replaced by auto-descendant") parsed[1]=register_auto_descendant end elseif pi.axis=="initial-child" and np>1 and parsed[2].axis then add_comment(parsed,"initial-child removed") remove(parsed,1) end local np=#parsed if np>1 then local pnp=parsed[np] if pnp.kind=="nodes" and pnp.nodetest==true then local nodes=pnp.nodes if nodes[1]==true and nodes[2]==false and nodes[3]==false then add_comment(parsed,"redundant final wildcard filter removed") remove(parsed,np) end end end end else parsed={ pattern=pattern } end cache[pattern]=parsed if trace_lparse and not trace_lprofile then lshow(parsed) end end return parsed end end xml.lpath=lpath local profiled={} xml.profiled=profiled local function profiled_apply(list,parsed,nofparsed,order) local p=profiled[parsed.pattern] if p then p.tested=p.tested+1 else p={ tested=1,matched=0,finalized=0 } profiled[parsed.pattern]=p end local collected=list for i=1,nofparsed do local pi=parsed[i] local kind=pi.kind if kind=="axis" then collected=apply_axis[pi.axis](collected) elseif kind=="nodes" then collected=apply_nodes(collected,pi.nodetest,pi.nodes) elseif kind=="expression" then collected=apply_expression(collected,pi.evaluator,order) elseif kind=="finalizer" then collected=pi.finalizer(collected) p.matched=p.matched+1 p.finalized=p.finalized+1 return collected end if not collected or #collected==0 then local pn=i %s",(collected and #collected) or 0,pi.expression,pi.converted) elseif kind=="finalizer" then collected=pi.finalizer(collected) report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "") return collected end if not collected or #collected==0 then local pn=i1 then c=c-1 local e=collected[c] local r=e.__p__ return r,r.dt,e.ni end end else local n,c=#collected,0 return function() if c1 then c=c-1 return collected[c] end end else local n,c=#collected,0 return function() if c"))^0 local special=P("<")/"<"+P(">")/">"+P("&")/"&" local escaped=Cs(normal*(special*normal)^0) local normal=(1-S"&")^0 local special=P("<")/"<"+P(">")/">"+P("&")/"&" local unescaped=Cs(normal*(special*normal)^0) local cleansed=Cs(((P("<")*(1-P(">"))^0*P(">"))/""+1)^0) xmlpatterns.escaped=escaped xmlpatterns.unescaped=unescaped xmlpatterns.cleansed=cleansed function xml.escaped (str) return lpegmatch(escaped,str) end function xml.unescaped(str) return lpegmatch(unescaped,str) end function xml.cleansed (str) return lpegmatch(cleansed,str) end function xml.fillin(root,pattern,str,check) local e=xml.first(root,pattern) if e then local n=#e.dt if not check or n==0 or (n==1 and e.dt[1]=="") then e.dt={ str } end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true -- original size: 23804, stripped down to: 16817 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_manipulations=false trackers.register("lxml.manipulations",function(v) trace_manipulations=v end) local report_xml=logs.reporter("xml") local xml=xml local xmlconvert,xmlcopy,xmlname=xml.convert,xml.copy,xml.name local xmlinheritedconvert=xml.inheritedconvert local xmlapplylpath=xml.applylpath local xmlfilter=xml.filter local type,setmetatable,getmetatable=type,setmetatable,getmetatable local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip local utfbyte=utf.byte local function report(what,pattern,c,e) report_xml("%s element %a, root %a, position %a, index %a, pattern %a",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern) end local function withelements(e,handle,depth) if e and handle then local edt=e.dt if edt then depth=depth or 0 for i=1,#edt do local e=edt[i] if type(e)=="table" then handle(e,depth) withelements(e,handle,depth+1) end end end end end xml.withelements=withelements function xml.withelement(e,n,handle) if e and n~=0 and handle then local edt=e.dt if edt then if n>0 then for i=1,#edt do local ei=edt[i] if type(ei)=="table" then if n==1 then handle(ei) return else n=n-1 end end end elseif n<0 then for i=#edt,1,-1 do local ei=edt[i] if type(ei)=="table" then if n==-1 then handle(ei) return else n=n+1 end end end end end end end function xml.each(root,pattern,handle,reverse) local collected=xmlapplylpath(root,pattern) if collected then if reverse then for c=#collected,1,-1 do handle(collected[c]) end else for c=1,#collected do handle(collected[c]) end end return collected end end function xml.processattributes(root,pattern,handle) local collected=xmlapplylpath(root,pattern) if collected and handle then for c=1,#collected do handle(collected[c].at) end end return collected end function xml.collect(root,pattern) return xmlapplylpath(root,pattern) end function xml.collecttexts(root,pattern,flatten) local collected=xmlapplylpath(root,pattern) if collected and flatten then local xmltostring=xml.tostring for c=1,#collected do collected[c]=xmltostring(collected[c].dt) end end return collected or {} end function xml.collect_tags(root,pattern,nonamespace) local collected=xmlapplylpath(root,pattern) if collected then local t,n={},0 for c=1,#collected do local e=collected[c] local ns,tg=e.ns,e.tg n=n+1 if nonamespace then t[n]=tg elseif ns=="" then t[n]=tg else t[n]=ns..":"..tg end end return t end end local no_root={ no_root=true } local function redo_ni(d) for k=1,#d do local dk=d[k] if type(dk)=="table" then dk.ni=k end end end local function xmltoelement(whatever,root) if not whatever then return nil end local element if type(whatever)=="string" then element=xmlinheritedconvert(whatever,root) else element=whatever end if element.error then return whatever end if element then end return element end xml.toelement=xmltoelement local function copiedelement(element,newparent) if type(element)=="string" then return element else element=xmlcopy(element).dt if newparent and type(element)=="table" then element.__p__=newparent end return element end end function xml.delete(root,pattern) if not pattern or pattern=="" then local p=root.__p__ if p then if trace_manipulations then report('deleting',"--",c,root) end local d=p.dt remove(d,root.ni) redo_ni(d) end else local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] local p=e.__p__ if p then if trace_manipulations then report('deleting',pattern,c,e) end local d=p.dt remove(d,e.ni) redo_ni(d) end end end end end function xml.replace(root,pattern,whatever) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] local p=e.__p__ if p then if trace_manipulations then report('replacing',pattern,c,e) end local d=p.dt d[e.ni]=copiedelement(element,p) redo_ni(d) end end end end local function wrap(e,wrapper) local t={ rn=e.rn, tg=e.tg, ns=e.ns, at=e.at, dt=e.dt, __p__=e, } setmetatable(t,getmetatable(e)) e.rn=wrapper.rn or e.rn or "" e.tg=wrapper.tg or e.tg or "" e.ns=wrapper.ns or e.ns or "" e.at=fastcopy(wrapper.at) e.dt={ t } end function xml.wrap(root,pattern,whatever) if whatever then local wrapper=xmltoelement(whatever,root) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] if trace_manipulations then report('wrapping',pattern,c,e) end wrap(e,wrapper) end end else wrap(root,xmltoelement(pattern)) end end local function inject_element(root,pattern,whatever,prepend) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) local function inject_e(e) local r=e.__p__ local d,k,rri=r.dt,e.ni,r.ri local edt=(rri and d[rri].dt) or (d and d[k] and d[k].dt) if edt then local be,af local cp=copiedelement(element,e) if prepend then be,af=cp,edt else be,af=edt,cp end local bn=#be for i=1,#af do bn=bn+1 be[bn]=af[i] end if rri then r.dt[rri].dt=be else d[k].dt=be end redo_ni(d) end end if not collected then elseif collected.tg then inject_e(collected) else for c=1,#collected do inject_e(collected[c]) end end end local function insert_element(root,pattern,whatever,before) local element=root and xmltoelement(whatever,root) local collected=element and xmlapplylpath(root,pattern) local function insert_e(e) local r=e.__p__ local d,k=r.dt,e.ni if not before then k=k+1 end insert(d,k,copiedelement(element,r)) redo_ni(d) end if not collected then elseif collected.tg then insert_e(collected) else for c=1,#collected do insert_e(collected[c]) end end end xml.insert_element=insert_element xml.insertafter=insert_element xml.insertbefore=function(r,p,e) insert_element(r,p,e,true) end xml.injectafter=inject_element xml.injectbefore=function(r,p,e) inject_element(r,p,e,true) end local function include(xmldata,pattern,attribute,recursive,loaddata) pattern=pattern or 'include' loaddata=loaddata or io.loaddata local collected=xmlapplylpath(xmldata,pattern) if collected then for c=1,#collected do local ek=collected[c] local name=nil local ekdt=ek.dt local ekat=ek.at local epdt=ek.__p__.dt if not attribute or attribute=="" then name=(type(ekdt)=="table" and ekdt[1]) or ekdt end if not name then for a in gmatch(attribute or "href","([^|]+)") do name=ekat[a] if name then break end end end local data=(name and name~="" and loaddata(name)) or "" if data=="" then epdt[ek.ni]="" elseif ekat["parse"]=="text" then epdt[ek.ni]=xml.escaped(data) else local xi=xmlinheritedconvert(data,xmldata) if not xi then epdt[ek.ni]="" else if recursive then include(xi,pattern,attribute,recursive,loaddata) end epdt[ek.ni]=xml.body(xi) end end end end end xml.include=include local function stripelement(e,nolines,anywhere) local edt=e.dt if edt then if anywhere then local t,n={},0 for e=1,#edt do local str=edt[e] if type(str)~="string" then n=n+1 t[n]=str elseif str~="" then if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"^%s*(.-)%s*$","%1") if str~="" then n=n+1 t[n]=str end end end e.dt=t else if #edt>0 then local str=edt[1] if type(str)~="string" then elseif str=="" then remove(edt,1) else if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"^%s+","") if str=="" then remove(edt,1) else edt[1]=str end end end local nedt=#edt if nedt>0 then local str=edt[nedt] if type(str)~="string" then elseif str=="" then remove(edt) else if nolines then str=gsub(str,"%s+"," ") end str=gsub(str,"%s+$","") if str=="" then remove(edt) else edt[nedt]=str end end end end end return e end xml.stripelement=stripelement function xml.strip(root,pattern,nolines,anywhere) local collected=xmlapplylpath(root,pattern) if collected then for i=1,#collected do stripelement(collected[i],nolines,anywhere) end end end local function renamespace(root,oldspace,newspace) local ndt=#root.dt for i=1,ndt or 0 do local e=root[i] if type(e)=="table" then if e.ns==oldspace then e.ns=newspace if e.rn then e.rn=newspace end end local edt=e.dt if edt then renamespace(edt,oldspace,newspace) end end end end xml.renamespace=renamespace function xml.remaptag(root,pattern,newtg) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].tg=newtg end end end function xml.remapnamespace(root,pattern,newns) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].ns=newns end end end function xml.checknamespace(root,pattern,newns) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] if (not e.rn or e.rn=="") and e.ns=="" then e.rn=newns end end end end function xml.remapname(root,pattern,newtg,newns,newrn) local collected=xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e=collected[c] e.tg,e.ns,e.rn=newtg,newns,newrn end end end function xml.cdatatotext(e) local dt=e.dt if #dt==1 then local first=dt[1] if first.tg=="@cd@" then e.dt=first.dt end else end end function xml.texttocdata(e) local dt=e.dt local s=xml.tostring(dt) e.tg="@cd@" e.special=true e.ns="" e.rn="" e.dt={ s } e.at=nil end function xml.elementtocdata(e) local dt=e.dt local s=xml.tostring(e) e.tg="@cd@" e.special=true e.ns="" e.rn="" e.dt={ s } e.at=nil end xml.builtinentities=table.tohash { "amp","quot","apos","lt","gt" } local entities=characters and characters.entities or nil local builtinentities=xml.builtinentities function xml.addentitiesdoctype(root,option) if not entities then require("char-ent") entities=characters.entities end if entities and root and root.tg=="@rt@" and root.statistics then local list={} local hexify=option=="hexadecimal" for k,v in table.sortedhash(root.statistics.entities.names) do if not builtinentities[k] then local e=entities[k] if not e then e=format("[%s]",k) elseif hexify then e=format("&#%05X;",utfbyte(k)) end list[#list+1]=format(" ",k,e) end end local dt=root.dt local n=dt[1].tg=="@pi@" and 2 or 1 if #list>0 then insert(dt,n,{ "\n" }) insert(dt,n,{ tg="@dt@", dt={ format("Something [\n%s\n] ",concat(list)) }, ns="", special=true, }) insert(dt,n,{ "\n\n" }) else end end end xml.all=xml.each xml.insert=xml.insertafter xml.inject=xml.injectafter xml.after=xml.insertafter xml.before=xml.insertbefore xml.process=xml.each xml.obsolete=xml.obsolete or {} local obsolete=xml.obsolete xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect xml.delete_element=xml.delete obsolete.delete_element=xml.delete xml.replace_element=xml.replace obsolete.replace_element=xml.replacet xml.each_element=xml.each obsolete.each_element=xml.each xml.process_elements=xml.process obsolete.process_elements=xml.process xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter xml.insert_element_before=xml.insertbefore obsolete.insert_element_before=xml.insertbefore xml.inject_element_after=xml.injectafter obsolete.inject_element_after=xml.injectafter xml.inject_element_before=xml.injectbefore obsolete.inject_element_before=xml.injectbefore xml.process_attributes=xml.processattributes obsolete.process_attributes=xml.processattributes xml.collect_texts=xml.collecttexts obsolete.collect_texts=xml.collecttexts xml.inject_element=xml.inject obsolete.inject_element=xml.inject xml.remap_tag=xml.remaptag obsolete.remap_tag=xml.remaptag xml.remap_name=xml.remapname obsolete.remap_name=xml.remapname xml.remap_namespace=xml.remapnamespace obsolete.remap_namespace=xml.remapnamespace function xml.cdata(e) if e then local dt=e.dt if dt and #dt==1 then local first=dt[1] return first.tg=="@cd@" and first.dt[1] or "" end end return "" end function xml.finalizers.xml.cdata(collected) if collected then local e=collected[1] if e then local dt=e.dt if dt and #dt==1 then local first=dt[1] return first.tg=="@cd@" and first.dt[1] or "" end end end return "" end function xml.insertcomment(e,str,n) table.insert(e.dt,n or 1,{ tg="@cm@", ns="", special=true, at={}, dt={ str }, }) end function xml.setcdata(e,str) e.dt={ { tg="@cd@", ns="", special=true, at={}, dt={ str }, } } end function xml.separate(x,pattern) local collected=xmlapplylpath(x,pattern) if collected then for c=1,#collected do local e=collected[c] local d=e.dt if d==x then report_xml("warning: xml.separate changes root") x=d end local t,n={ "\n" },1 local i,nd=1,#d while i<=nd do while i<=nd do local di=d[i] if type(di)=="string" then if di=="\n" or find(di,"^%s+$") then i=i+1 else d[i]=strip(di) break end else break end end if i>nd then break end t[n+1]="\n" t[n+2]=d[i] t[n+3]="\n" n=n+3 i=i+1 end t[n+1]="\n" setmetatable(t,getmetatable(d)) e.dt=t end end return x end local helpers=xml.helpers or {} xml.helpers=helpers local function normal(e,action) local edt=e.dt if edt then for i=1,#edt do local str=edt[i] if type(str)=="string" and str~="" then edt[i]=action(str) end end end end local function recurse(e,action) local edt=e.dt if edt then for i=1,#edt do local str=edt[i] if type(str)~="string" then recurse(str,action,recursive) elseif str~="" then edt[i]=action(str) end end end end function helpers.recursetext(collected,action,recursive) if recursive then for i=1,#collected do recurse(collected[i],action) end else for i=1,#collected do normal(collected[i],action) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true -- original size: 10274, stripped down to: 7538 if not modules then modules={} end modules ['lxml-xml']={ version=1.001, comment="this module is the basis for the lxml-* ones", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat=table.concat local find,lower,upper=string.find,string.lower,string.upper local xml=xml local finalizers=xml.finalizers.xml local xmlfilter=xml.filter local xmltostring=xml.tostring local xmlserialize=xml.serialize local xmlcollected=xml.collected local xmlnewhandlers=xml.newhandlers local function first(collected) return collected and collected[1] end local function last(collected) return collected and collected[#collected] end local function all(collected) return collected end local reverse=table.reversed local function attribute(collected,name) if collected and #collected>0 then local at=collected[1].at return at and at[name] end end local function att(id,name) local at=id.at return at and at[name] end local function count(collected) return collected and #collected or 0 end local function position(collected,n) if not collected then return 0 end local nc=#collected if nc==0 then return 0 end n=tonumber(n) or 0 if n<0 then return collected[nc+n+1] elseif n>0 then return collected[n] else return collected[1].mi or 0 end end local function match(collected) return collected and #collected>0 and collected[1].mi or 0 end local function index(collected) return collected and #collected>0 and collected[1].ni or 0 end local function attributes(collected,arguments) if collected and #collected>0 then local at=collected[1].at if arguments then return at[arguments] elseif next(at) then return at end end end local function chainattribute(collected,arguments) if collected and #collected>0 then local e=collected[1] while e do local at=e.at if at then local a=at[arguments] if a then return a end else break end e=e.__p__ end end return "" end local function raw(collected) if collected and #collected>0 then local e=collected[1] or collected return e and xmltostring(e) or "" else return "" end end local xmltexthandler=xmlnewhandlers { name="string", initialize=function() result={} return result end, finalize=function() return concat(result) end, handle=function(...) result[#result+1]=concat {... } end, escape=false, } local function xmltotext(root) local dt=root.dt if not dt then return "" end local nt=#dt if nt==0 then return "" elseif nt==1 and type(dt[1])=="string" then return dt[1] else return xmlserialize(root,xmltexthandler) or "" end end local function text(collected) if collected then local e=collected[1] or collected return e and xmltotext(e) or "" else return "" end end local function texts(collected) if not collected then return {} end local nc=#collected if nc==0 then return {} end local t,n={},0 for c=1,nc do local e=collected[c] if e and e.dt then n=n+1 t[n]=e.dt end end return t end local function tag(collected,n) if not collected then return end local nc=#collected if nc==0 then return end local c if n==0 or not n then c=collected[1] elseif n>1 then c=collected[n] else c=collected[nc-n+1] end return c and c.tg end local function name(collected,n) if not collected then return end local nc=#collected if nc==0 then return end local c if n==0 or not n then c=collected[1] elseif n>1 then c=collected[n] else c=collected[nc-n+1] end if not c then elseif c.ns=="" then return c.tg else return c.ns..":"..c.tg end end local function tags(collected,nonamespace) if not collected then return end local nc=#collected if nc==0 then return end local t,n={},0 for c=1,nc do local e=collected[c] local ns,tg=e.ns,e.tg n=n+1 if nonamespace or ns=="" then t[n]=tg else t[n]=ns..":"..tg end end return t end local function empty(collected,spacesonly) if not collected then return true end local nc=#collected if nc==0 then return true end for c=1,nc do local e=collected[c] if e then local edt=e.dt if edt then local n=#edt if n==1 then local edk=edt[1] local typ=type(edk) if typ=="table" then return false elseif edk~="" then return false elseif spacesonly and not find(edk,"%S") then return false end elseif n>1 then return false end end end end return true end finalizers.first=first finalizers.last=last finalizers.all=all finalizers.reverse=reverse finalizers.elements=all finalizers.default=all finalizers.attribute=attribute finalizers.att=att finalizers.count=count finalizers.position=position finalizers.match=match finalizers.index=index finalizers.attributes=attributes finalizers.chainattribute=chainattribute finalizers.text=text finalizers.texts=texts finalizers.tag=tag finalizers.name=name finalizers.tags=tags finalizers.empty=empty function xml.first(id,pattern) return first(xmlfilter(id,pattern)) end function xml.last(id,pattern) return last(xmlfilter(id,pattern)) end function xml.count(id,pattern) return count(xmlfilter(id,pattern)) end function xml.attribute(id,pattern,a,default) return attribute(xmlfilter(id,pattern),a,default) end function xml.raw(id,pattern) if pattern then return raw(xmlfilter(id,pattern)) else return raw(id) end end function xml.text(id,pattern) if pattern then local collected=xmlfilter(id,pattern) return collected and #collected>0 and xmltotext(collected[1]) or "" elseif id then return xmltotext(id) or "" else return "" end end xml.content=text function xml.position(id,pattern,n) return position(xmlfilter(id,pattern),n) end function xml.match(id,pattern) return match(xmlfilter(id,pattern)) end function xml.empty(id,pattern,spacesonly) return empty(xmlfilter(id,pattern),spacesonly) end xml.all=xml.filter xml.index=xml.position xml.found=xml.filter local function totable(x) local t={} for e in xmlcollected(x[1] or x,"/*") do t[e.tg]=xmltostring(e.dt) or "" end return next(t) and t or nil end xml.table=totable finalizers.table=totable local function textonly(e,t) if e then local edt=e.dt if edt then for i=1,#edt do local e=edt[i] if type(e)=="table" then textonly(e,t) else t[#t+1]=e end end end end return t end function xml.textonly(e) return concat(textonly(e,{})) end function finalizers.lowerall(collected) for c=1,#collected do local e=collected[c] if not e.special then e.tg=lower(e.tg) local eat=e.at if eat then local t={} for k,v in next,eat do t[lower(k)]=v end e.at=t end end end end function finalizers.upperall(collected) for c=1,#collected do local e=collected[c] if not e.special then e.tg=upper(e.tg) local eat=e.at if eat then local t={} for k,v in next,eat do t[upper(k)]=v end e.at=t end end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["trac-xml"] = package.loaded["trac-xml"] or true -- original size: 6351, stripped down to: 4919 if not modules then modules={} end modules ['trac-xml']={ version=1.001, comment="companion to trac-log.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local formatters=string.formatters local reporters=logs.reporters local xmlserialize=xml.serialize local xmlcollected=xml.collected local xmltext=xml.text local xmlfirst=xml.first local function showhelp(specification,...) local root=xml.convert(specification.helpinfo or "") if not root then return end local xs=xml.gethandlers("string") xml.sethandlersfunction(xs,"short",function(e,handler) xmlserialize(e.dt,handler) end) xml.sethandlersfunction(xs,"ref",function(e,handler) handler.handle("--"..e.at.name) end) local wantedcategories=select("#",...)==0 and true or table.tohash {... } local nofcategories=xml.count(root,"/application/flags/category") local report=specification.report for category in xmlcollected(root,"/application/flags/category") do local categoryname=category.at.name or "" if wantedcategories==true or wantedcategories[categoryname] then if nofcategories>1 then report("%s options:",categoryname) report() end for subcategory in xmlcollected(category,"/subcategory") do for flag in xmlcollected(subcategory,"/flag") do local name=flag.at.name local value=flag.at.value local short=xmltext(xmlfirst(flag,"/short")) if value then report("--%-20s %s",formatters["%s=%s"](name,value),short) else report("--%-20s %s",name,short) end end report() end end end for category in xmlcollected(root,"/application/examples/category") do local title=xmltext(xmlfirst(category,"/title")) if title and title~="" then report() report(title) report() end for subcategory in xmlcollected(category,"/subcategory") do for example in xmlcollected(subcategory,"/example") do local command=xmltext(xmlfirst(example,"/command")) local comment=xmltext(xmlfirst(example,"/comment")) report(command) end report() end end for comment in xmlcollected(root,"/application/comments/comment") do local comment=xmltext(comment) report() report(comment) report() end end local reporthelp=reporters.help local exporthelp=reporters.export local function xmlfound(t) local helpinfo=t.helpinfo if type(helpinfo)=="table" then return false end if type(helpinfo)~="string" then helpinfo="Warning: no helpinfo found." t.helpinfo=helpinfo return false end if string.find(helpinfo,".xml$") then local ownscript=environment.ownscript local helpdata=false if ownscript then local helpfile=file.join(file.pathpart(ownscript),helpinfo) helpdata=io.loaddata(helpfile) if helpdata=="" then helpdata=false end end if not helpdata then local helpfile=resolvers.findfile(helpinfo,"tex") helpdata=helpfile and io.loaddata(helpfile) end if helpdata and helpdata~="" then helpinfo=helpdata else helpinfo=formatters["Warning: help file %a is not found."](helpinfo) end end t.helpinfo=helpinfo return string.find(t.helpinfo,"^<%?xml") and true or false end function reporters.help(t,...) if xmlfound(t) then showhelp(t,...) else reporthelp(t,...) end end function reporters.export(t,methods,filename) if not xmlfound(t) then return exporthelp(t) end if not methods or methods=="" then methods=environment.arguments["exporthelp"] end if not filename or filename=="" then filename=environment.files[1] end dofile(resolvers.findfile("trac-exp.lua","tex")) local exporters=logs.exporters if not exporters or not methods then return exporthelp(t) end if methods=="all" then methods=table.keys(exporters) elseif type(methods)=="string" then methods=utilities.parsers.settings_to_array(methods) else return exporthelp(t) end if type(filename)~="string" or filename=="" then filename=false elseif file.pathpart(filename)=="" then t.report("export file %a will not be saved on the current path (safeguard)",filename) return end for i=1,#methods do local method=methods[i] local exporter=exporters[method] if exporter then local result=exporter(t,method) if result and result~="" then if filename then local fullname=file.replacesuffix(filename,method) t.report("saving export in %a",fullname) io.savedata(fullname,result) else reporters.lines(t,result) end else t.report("no output from exporter %a",method) end else t.report("unknown exporter %a",method) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-ini"] = package.loaded["data-ini"] or true -- original size: 7898, stripped down to: 5501 if not modules then modules={} end modules ['data-ini']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find,gmatch,char=string.gsub,string.find,string.gmatch,string.char local next,type=next,type local filedirname,filebasename,filejoin=file.dirname,file.basename,file.join local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_detail=false trackers.register("resolvers.details",function(v) trace_detail=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_initialization=logs.reporter("resolvers","initialization") local ostype,osname,ossetenv,osgetenv=os.type,os.name,os.setenv,os.getenv resolvers=resolvers or {} local resolvers=resolvers texconfig.kpse_init=false texconfig.shell_escape='t' if not (environment and environment.default_texmfcnf) and kpse and kpse.default_texmfcnf then local default_texmfcnf=kpse.default_texmfcnf() default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTOLOC","selfautoloc:") default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTODIR","selfautodir:") default_texmfcnf=gsub(default_texmfcnf,"$SELFAUTOPARENT","selfautoparent:") default_texmfcnf=gsub(default_texmfcnf,"$HOME","home:") environment.default_texmfcnf=default_texmfcnf end kpse={ original=kpse } setmetatable(kpse,{ __index=function(kp,name) report_initialization("fatal error: kpse library is accessed (key: %s)",name) os.exit() end } ) do local osfontdir=osgetenv("OSFONTDIR") if osfontdir and osfontdir~="" then elseif osname=="windows" then ossetenv("OSFONTDIR","c:/windows/fonts//") elseif osname=="macosx" then ossetenv("OSFONTDIR","$HOME/Library/Fonts//;/Library/Fonts//;/System/Library/Fonts//") end end do local homedir=osgetenv(ostype=="windows" and 'USERPROFILE' or 'HOME') or '' if not homedir or homedir=="" then homedir=char(127) end homedir=file.collapsepath(homedir) ossetenv("HOME",homedir) ossetenv("USERPROFILE",homedir) environment.homedir=homedir end do local args=environment.originalarguments or arg if not environment.ownmain then environment.ownmain=status and string.match(string.lower(status.banner),"this is ([%a]+)") or "luatex" end local ownbin=environment.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex" local ownpath=environment.ownpath or os.selfdir ownbin=file.collapsepath(ownbin) ownpath=file.collapsepath(ownpath) if not ownpath or ownpath=="" or ownpath=="unset" then ownpath=args[-1] or arg[-1] ownpath=ownpath and filedirname(gsub(ownpath,"\\","/")) if not ownpath or ownpath=="" then ownpath=args[-0] or arg[-0] ownpath=ownpath and filedirname(gsub(ownpath,"\\","/")) end local binary=ownbin if not ownpath or ownpath=="" then ownpath=ownpath and filedirname(binary) end if not ownpath or ownpath=="" then if os.binsuffix~="" then binary=file.replacesuffix(binary,os.binsuffix) end local path=osgetenv("PATH") if path then for p in gmatch(path,"[^"..io.pathseparator.."]+") do local b=filejoin(p,binary) if lfs.isfile(b) then local olddir=lfs.currentdir() if lfs.chdir(p) then local pp=lfs.currentdir() if trace_locating and p~=pp then report_initialization("following symlink %a to %a",p,pp) end ownpath=pp lfs.chdir(olddir) else if trace_locating then report_initialization("unable to check path %a",p) end ownpath=p end break end end end end if not ownpath or ownpath=="" then ownpath="." report_initialization("forcing fallback to ownpath %a",ownpath) elseif trace_locating then report_initialization("using ownpath %a",ownpath) end end environment.ownbin=ownbin environment.ownpath=ownpath end resolvers.ownpath=environment.ownpath function resolvers.getownpath() return environment.ownpath end do local ownpath=environment.ownpath or dir.current() if ownpath then ossetenv('SELFAUTOLOC',file.collapsepath(ownpath)) ossetenv('SELFAUTODIR',file.collapsepath(ownpath.."/..")) ossetenv('SELFAUTOPARENT',file.collapsepath(ownpath.."/../..")) else report_initialization("error: unable to locate ownpath") os.exit() end end local texos=environment.texos or osgetenv("TEXOS") local texmfos=environment.texmfos or osgetenv('SELFAUTODIR') if not texos or texos=="" then texos=file.basename(texmfos) end ossetenv('TEXMFOS',texmfos) ossetenv('TEXOS',texos) ossetenv('SELFAUTOSYSTEM',os.platform) environment.texos=texos environment.texmfos=texmfos local texroot=environment.texroot or osgetenv("TEXROOT") if not texroot or texroot=="" then texroot=osgetenv('SELFAUTOPARENT') ossetenv('TEXROOT',texroot) end environment.texroot=file.collapsepath(texroot) if profiler then directives.register("system.profile",function() profiler.start("luatex-profile.log") end) end if not resolvers.resolve then function resolvers.resolve (s) return s end function resolvers.unresolve(s) return s end function resolvers.repath (s) return s end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-exp"] = package.loaded["data-exp"] or true -- original size: 14654, stripped down to: 9517 if not modules then modules={} end modules ['data-exp']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub local concat,sort=table.concat,table.sort local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local Ct,Cs,Cc,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.P,lpeg.C,lpeg.S local type,next=type,next local ostype=os.type local collapsepath=file.collapsepath local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_expansions=logs.reporter("resolvers","expansions") local resolvers=resolvers local function f_first(a,b) local t,n={},0 for s in gmatch(b,"[^,]+") do n=n+1;t[n]=a..s end return concat(t,",") end local function f_second(a,b) local t,n={},0 for s in gmatch(a,"[^,]+") do n=n+1;t[n]=s..b end return concat(t,",") end local function f_both(a,b) local t,n={},0 for sb in gmatch(b,"[^,]+") do for sa in gmatch(a,"[^,]+") do n=n+1;t[n]=sa..sb end end return concat(t,",") end local left=P("{") local right=P("}") local var=P((1-S("{}" ))^0) local set=P((1-S("{},"))^0) local other=P(1) local l_first=Cs((Cc("{")*(C(set)*left*C(var)*right/f_first)*Cc("}")+other )^0 ) local l_second=Cs((Cc("{")*(left*C(var)*right*C(set)/f_second)*Cc("}")+other )^0 ) local l_both=Cs((Cc("{")*(left*C(var)*right*left*C(var)*right/f_both)*Cc("}")+other )^0 ) local l_rest=Cs((left*var*(left/"")*var*(right/"")*var*right+other )^0 ) local stripper_1=lpeg.stripper ("{}@") local replacer_1=lpeg.replacer { { ",}",",@}" },{ "{,","{@," },} local function splitpathexpr(str,newlist,validate) if trace_expansions then report_expansions("expanding variable %a",str) end local t,ok,done=newlist or {},false,false local n=#t str=lpegmatch(replacer_1,str) repeat local old=str repeat local old=str str=lpegmatch(l_first,str) until old==str repeat local old=str str=lpegmatch(l_second,str) until old==str repeat local old=str str=lpegmatch(l_both,str) until old==str repeat local old=str str=lpegmatch(l_rest,str) until old==str until old==str str=lpegmatch(stripper_1,str) if validate then for s in gmatch(str,"[^,]+") do s=validate(s) if s then n=n+1 t[n]=s end end else for s in gmatch(str,"[^,]+") do n=n+1 t[n]=s end end if trace_expansions then for k=1,#t do report_expansions("% 4i: %s",k,t[k]) end end return t end local function validate(s) s=collapsepath(s) return s~="" and not find(s,"^!*unset/*$") and s end resolvers.validatedpath=validate function resolvers.expandedpathfromlist(pathlist) local newlist={} for k=1,#pathlist do splitpathexpr(pathlist[k],newlist,validate) end return newlist end local cleanup=lpeg.replacer { { "!","" }, { "\\","/" }, } function resolvers.cleanpath(str) local doslashes=(P("\\")/"/"+1)^0 local donegation=(P("!")/"" )^0 local homedir=lpegmatch(Cs(donegation*doslashes),environment.homedir or "") if homedir=="~" or homedir=="" or not lfs.isdir(homedir) then if trace_expansions then report_expansions("no home dir set, ignoring dependent paths") end function resolvers.cleanpath(str) if not str or find(str,"~") then return "" else return lpegmatch(cleanup,str) end end else local dohome=((P("~")+P("$HOME"))/homedir)^0 local cleanup=Cs(donegation*dohome*doslashes) function resolvers.cleanpath(str) return str and lpegmatch(cleanup,str) or "" end end return resolvers.cleanpath(str) end local expandhome=P("~")/"$HOME" local dodouble=P('"')/""*(expandhome+(1-P('"')))^0*P('"')/"" local dosingle=P("'")/""*(expandhome+(1-P("'")))^0*P("'")/"" local dostring=(expandhome+1 )^0 local stripper=Cs( lpegpatterns.unspacer*(dosingle+dodouble+dostring)*lpegpatterns.unspacer ) function resolvers.checkedvariable(str) return type(str)=="string" and lpegmatch(stripper,str) or str end local cache={} local splitter=lpeg.tsplitat(";") local backslashswapper=lpeg.replacer("\\","/") local function splitconfigurationpath(str) if str then local found=cache[str] if not found then if str=="" then found={} else local split=lpegmatch(splitter,lpegmatch(backslashswapper,str)) found={} local noffound=0 for i=1,#split do local s=split[i] if not find(s,"^{*unset}*") then noffound=noffound+1 found[noffound]=s end end if trace_expansions then report_expansions("splitting path specification %a",str) for k=1,noffound do report_expansions("% 4i: %s",k,found[k]) end end cache[str]=found end end return found end end resolvers.splitconfigurationpath=splitconfigurationpath function resolvers.splitpath(str) if type(str)=='table' then return str else return splitconfigurationpath(str) end end function resolvers.joinpath(str) if type(str)=='table' then return file.joinpath(str) else return str end end local attributes,directory=lfs.attributes,lfs.dir local weird=P(".")^1+lpeg.anywhere(S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t")) local timer={} local scanned={} local nofscans=0 local scancache={} local function scan(files,spec,path,n,m,r) local full=(path=="" and spec) or (spec..path..'/') local dirs={} local nofdirs=0 for name in directory(full) do if not lpegmatch(weird,name) then local mode=attributes(full..name,'mode') if mode=='file' then n=n+1 local f=files[name] if f then if type(f)=='string' then files[name]={ f,path } else f[#f+1]=path end else files[name]=path local lower=lower(name) if name~=lower then files["remap:"..lower]=name r=r+1 end end elseif mode=='directory' then m=m+1 nofdirs=nofdirs+1 if path~="" then dirs[nofdirs]=path..'/'..name else dirs[nofdirs]=name end end end end if nofdirs>0 then sort(dirs) for i=1,nofdirs do files,n,m,r=scan(files,spec,dirs[i],n,m,r) end end scancache[sub(full,1,-2)]=files return files,n,m,r end local fullcache={} function resolvers.scanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath=resolvers.resolve(path) if usecache then local files=fullcache[realpath] if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files,n,m,r=scan({},realpath..'/',"",0,0,0) files.__path__=path files.__files__=n files.__directories__=m files.__remappings__=r if trace_locating then report_expansions("%s files found on %s directories with %s uppercase remappings",n,m,r) end if usecache then scanned[#scanned+1]=realpath fullcache[realpath]=files end nofscans=nofscans+1 statistics.stoptiming(timer) return files end local function simplescan(files,spec,path) local full=(path=="" and spec) or (spec..path..'/') local dirs={} local nofdirs=0 for name in directory(full) do if not lpegmatch(weird,name) then local mode=attributes(full..name,'mode') if mode=='file' then if not files[name] then files[name]=path end elseif mode=='directory' then nofdirs=nofdirs+1 if path~="" then dirs[nofdirs]=path..'/'..name else dirs[nofdirs]=name end end end end if nofdirs>0 then sort(dirs) for i=1,nofdirs do files=simplescan(files,spec,dirs[i]) end end return files end local simplecache={} local nofsharedscans=0 function resolvers.simplescanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath=resolvers.resolve(path) if usecache then local files=simplecache[realpath] if not files then files=scancache[realpath] if files then nofsharedscans=nofsharedscans+1 end end if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files=simplescan({},realpath..'/',"") if trace_locating then report_expansions("%s files found",table.count(files)) end if usecache then scanned[#scanned+1]=realpath simplecache[realpath]=files end nofscans=nofscans+1 statistics.stoptiming(timer) return files end function resolvers.scandata() table.sort(scanned) return { n=nofscans, shared=nofsharedscans, time=statistics.elapsedtime(timer), paths=scanned, } end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true -- original size: 8762, stripped down to: 6484 if not modules then modules={} end modules ['data-env']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local lower,gsub=string.lower,string.gsub local resolvers=resolvers local allocate=utilities.storage.allocate local setmetatableindex=table.setmetatableindex local suffixonly=file.suffixonly local formats=allocate() local suffixes=allocate() local dangerous=allocate() local suffixmap=allocate() resolvers.formats=formats resolvers.suffixes=suffixes resolvers.dangerous=dangerous resolvers.suffixmap=suffixmap local luasuffixes=utilities.lua.suffixes local relations=allocate { core={ ofm={ names={ "ofm","omega font metric","omega font metrics" }, variable='OFMFONTS', suffixes={ 'ofm','tfm' }, }, ovf={ names={ "ovf","omega virtual font","omega virtual fonts" }, variable='OVFFONTS', suffixes={ 'ovf','vf' }, }, tfm={ names={ "tfm","tex font metric","tex font metrics" }, variable='TFMFONTS', suffixes={ 'tfm' }, }, vf={ names={ "vf","virtual font","virtual fonts" }, variable='VFFONTS', suffixes={ 'vf' }, }, otf={ names={ "otf","opentype","opentype font","opentype fonts"}, variable='OPENTYPEFONTS', suffixes={ 'otf' }, }, ttf={ names={ "ttf","truetype","truetype font","truetype fonts","truetype collection","truetype collections","truetype dictionary","truetype dictionaries" }, variable='TTFONTS', suffixes={ 'ttf','ttc','dfont' }, }, afm={ names={ "afm","adobe font metric","adobe font metrics" }, variable="AFMFONTS", suffixes={ "afm" }, }, pfb={ names={ "pfb","type1","type 1","type1 font","type 1 font","type1 fonts","type 1 fonts" }, variable='T1FONTS', suffixes={ 'pfb','pfa' }, }, fea={ names={ "fea","font feature","font features","font feature file","font feature files" }, variable='FONTFEATURES', suffixes={ 'fea' }, }, cid={ names={ "cid","cid map","cid maps","cid file","cid files" }, variable='FONTCIDMAPS', suffixes={ 'cid','cidmap' }, }, fmt={ names={ "fmt","format","tex format" }, variable='TEXFORMATS', suffixes={ 'fmt' }, }, mem={ names={ 'mem',"metapost format" }, variable='MPMEMS', suffixes={ 'mem' }, }, mp={ names={ "mp" }, variable='MPINPUTS', suffixes={ 'mp','mpvi','mpiv','mpii' }, }, tex={ names={ "tex" }, variable='TEXINPUTS', suffixes={ 'tex',"mkvi","mkiv","mkii" }, }, icc={ names={ "icc","icc profile","icc profiles" }, variable='ICCPROFILES', suffixes={ 'icc' }, }, texmfscripts={ names={ "texmfscript","texmfscripts","script","scripts" }, variable='TEXMFSCRIPTS', suffixes={ 'rb','pl','py' }, }, lua={ names={ "lua" }, variable='LUAINPUTS', suffixes={ luasuffixes.lua,luasuffixes.luc,luasuffixes.tma,luasuffixes.tmc }, }, lib={ names={ "lib" }, variable='CLUAINPUTS', suffixes=os.libsuffix and { os.libsuffix } or { 'dll','so' }, }, bib={ names={ 'bib' }, suffixes={ 'bib' }, }, bst={ names={ 'bst' }, suffixes={ 'bst' }, }, fontconfig={ names={ 'fontconfig','fontconfig file','fontconfig files' }, variable='FONTCONFIG_PATH', }, }, obsolete={ enc={ names={ "enc","enc files","enc file","encoding files","encoding file" }, variable='ENCFONTS', suffixes={ 'enc' }, }, map={ names={ "map","map files","map file" }, variable='TEXFONTMAPS', suffixes={ 'map' }, }, lig={ names={ "lig files","lig file","ligature file","ligature files" }, variable='LIGFONTS', suffixes={ 'lig' }, }, opl={ names={ "opl" }, variable='OPLFONTS', suffixes={ 'opl' }, }, ovp={ names={ "ovp" }, variable='OVPFONTS', suffixes={ 'ovp' }, }, }, kpse={ base={ names={ 'base',"metafont format" }, variable='MFBASES', suffixes={ 'base','bas' }, }, cmap={ names={ 'cmap','cmap files','cmap file' }, variable='CMAPFONTS', suffixes={ 'cmap' }, }, cnf={ names={ 'cnf' }, suffixes={ 'cnf' }, }, web={ names={ 'web' }, suffixes={ 'web','ch' } }, cweb={ names={ 'cweb' }, suffixes={ 'w','web','ch' }, }, gf={ names={ 'gf' }, suffixes={ 'gf' }, }, mf={ names={ 'mf' }, variable='MFINPUTS', suffixes={ 'mf' }, }, mft={ names={ 'mft' }, suffixes={ 'mft' }, }, pk={ names={ 'pk' }, suffixes={ 'pk' }, }, }, } resolvers.relations=relations function resolvers.updaterelations() for category,categories in next,relations do for name,relation in next,categories do local rn=relation.names local rv=relation.variable local rs=relation.suffixes if rn and rv then for i=1,#rn do local rni=lower(gsub(rn[i]," ","")) formats[rni]=rv if rs then suffixes[rni]=rs for i=1,#rs do local rsi=rs[i] suffixmap[rsi]=rni end end end end if rs then end end end end resolvers.updaterelations() local function simplified(t,k) return k and rawget(t,lower(gsub(k," ",""))) or nil end setmetatableindex(formats,simplified) setmetatableindex(suffixes,simplified) setmetatableindex(suffixmap,simplified) function resolvers.suffixofformat(str) local s=suffixes[str] return s and s[1] or "" end function resolvers.suffixofformat(str) return suffixes[str] or {} end for name,format in next,formats do dangerous[name]=true end dangerous.tex=nil function resolvers.formatofvariable(str) return formats[str] or '' end function resolvers.formatofsuffix(str) return suffixmap[suffixonly(str)] or 'tex' end function resolvers.variableofformat(str) return formats[str] or '' end function resolvers.variableofformatorsuffix(str) local v=formats[str] if v then return v end v=suffixmap[suffixonly(str)] if v then return formats[v] end return '' end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tmp"] = package.loaded["data-tmp"] or true -- original size: 14615, stripped down to: 11208 if not modules then modules={} end modules ['data-tmp']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub,concat=string.format,string.lower,string.gsub,table.concat local concat,serialize,serializetofile=table.concat,table.serialize,table.tofile local mkdirs,isdir,isfile=dir.mkdirs,lfs.isdir,lfs.isfile local addsuffix,is_writable,is_readable=file.addsuffix,file.is_writable,file.is_readable local formatters=string.formatters local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local report_caches=logs.reporter("resolvers","caches") local report_resolvers=logs.reporter("resolvers","caching") local resolvers=resolvers local directive_cleanup=false directives.register("system.compile.cleanup",function(v) directive_cleanup=v end) local directive_strip=false directives.register("system.compile.strip",function(v) directive_strip=v end) local compile=utilities.lua.compile function utilities.lua.compile(luafile,lucfile,cleanup,strip) if cleanup==nil then cleanup=directive_cleanup end if strip==nil then strip=directive_strip end return compile(luafile,lucfile,cleanup,strip) end caches=caches or {} local caches=caches local luasuffixes=utilities.lua.suffixes caches.base=caches.base or "luatex-cache" caches.more=caches.more or "context" caches.direct=false caches.tree=false caches.force=true caches.ask=false caches.relocate=false caches.defaults={ "TMPDIR","TEMPDIR","TMP","TEMP","HOME","HOMEPATH" } local writable,readables,usedreadables=nil,{},{} local function identify() local texmfcaches=resolvers.cleanpathlist("TEXMFCACHE") if texmfcaches then for k=1,#texmfcaches do local cachepath=texmfcaches[k] if cachepath~="" then cachepath=resolvers.resolve(cachepath) cachepath=resolvers.cleanpath(cachepath) cachepath=file.collapsepath(cachepath) local valid=isdir(cachepath) if valid then if is_readable(cachepath) then readables[#readables+1]=cachepath if not writable and is_writable(cachepath) then writable=cachepath end end elseif not writable and caches.force then local cacheparent=file.dirname(cachepath) if is_writable(cacheparent) and true then if not caches.ask or io.ask(format("\nShould I create the cache path %s?",cachepath),"no",{ "yes","no" })=="yes" then mkdirs(cachepath) if isdir(cachepath) and is_writable(cachepath) then report_caches("path %a created",cachepath) writable=cachepath readables[#readables+1]=cachepath end end end end end end end local texmfcaches=caches.defaults if texmfcaches then for k=1,#texmfcaches do local cachepath=texmfcaches[k] cachepath=resolvers.expansion(cachepath) if cachepath~="" then cachepath=resolvers.resolve(cachepath) cachepath=resolvers.cleanpath(cachepath) local valid=isdir(cachepath) if valid and is_readable(cachepath) then if not writable and is_writable(cachepath) then readables[#readables+1]=cachepath writable=cachepath break end end end end end if not writable then report_caches("fatal error: there is no valid writable cache path defined") os.exit() elseif #readables==0 then report_caches("fatal error: there is no valid readable cache path defined") os.exit() end writable=dir.expandname(resolvers.cleanpath(writable)) local base,more,tree=caches.base,caches.more,caches.tree or caches.treehash() if tree then caches.tree=tree writable=mkdirs(writable,base,more,tree) for i=1,#readables do readables[i]=file.join(readables[i],base,more,tree) end else writable=mkdirs(writable,base,more) for i=1,#readables do readables[i]=file.join(readables[i],base,more) end end if trace_cache then for i=1,#readables do report_caches("using readable path %a (order %s)",readables[i],i) end report_caches("using writable path %a",writable) end identify=function() return writable,readables end return writable,readables end function caches.usedpaths(separator) local writable,readables=identify() if #readables>1 then local result={} local done={} for i=1,#readables do local readable=readables[i] if readable==writable then done[readable]=true result[#result+1]=formatters["readable+writable: %a"](readable) elseif usedreadables[i] then done[readable]=true result[#result+1]=formatters["readable: %a"](readable) end end if not done[writable] then result[#result+1]=formatters["writable: %a"](writable) end return concat(result,separator or " | ") else return writable or "?" end end function caches.configfiles() return concat(resolvers.instance.specification,";") end function caches.hashed(tree) tree=gsub(tree,"[\\/]+$","") tree=lower(tree) local hash=md5.hex(tree) if trace_cache or trace_locating then report_caches("hashing tree %a, hash %a",tree,hash) end return hash end function caches.treehash() local tree=caches.configfiles() if not tree or tree=="" then return false else return caches.hashed(tree) end end local r_cache,w_cache={},{} local function getreadablepaths(...) local tags={... } local hash=concat(tags,"/") local done=r_cache[hash] if not done then local writable,readables=identify() if #tags>0 then done={} for i=1,#readables do done[i]=file.join(readables[i],...) end else done=readables end r_cache[hash]=done end return done end local function getwritablepath(...) local tags={... } local hash=concat(tags,"/") local done=w_cache[hash] if not done then local writable,readables=identify() if #tags>0 then done=mkdirs(writable,...) else done=writable end w_cache[hash]=done end return done end caches.getreadablepaths=getreadablepaths caches.getwritablepath=getwritablepath function caches.getfirstreadablefile(filename,...) local rd=getreadablepaths(...) for i=1,#rd do local path=rd[i] local fullname=file.join(path,filename) if is_readable(fullname) then usedreadables[i]=true return fullname,path end end return caches.setfirstwritablefile(filename,...) end function caches.setfirstwritablefile(filename,...) local wr=getwritablepath(...) local fullname=file.join(wr,filename) return fullname,wr end function caches.define(category,subcategory) return function() return getwritablepath(category,subcategory) end end function caches.setluanames(path,name) return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc) end function caches.loaddata(readables,name) if type(readables)=="string" then readables={ readables } end for i=1,#readables do local path=readables[i] local tmaname,tmcname=caches.setluanames(path,name) local loader=false if isfile(tmcname) then loader=loadfile(tmcname) end if not loader and isfile(tmaname) then utilities.lua.compile(tmaname,tmcname) if isfile(tmcname) then loader=loadfile(tmcname) end if not loader then loader=loadfile(tmaname) end end if loader then loader=loader() collectgarbage("step") return loader end end return false end function caches.is_writable(filepath,filename) local tmaname,tmcname=caches.setluanames(filepath,filename) return is_writable(tmaname) end local saveoptions={ compact=true } function caches.savedata(filepath,filename,data,raw) local tmaname,tmcname=caches.setluanames(filepath,filename) local reduce,simplify=true,true if raw then reduce,simplify=false,false end data.cache_uuid=os.uuid() if caches.direct then file.savedata(tmaname,serialize(data,true,saveoptions)) else serializetofile(tmaname,data,true,saveoptions) end utilities.lua.compile(tmaname,tmcname) end local content_state={} function caches.contentstate() return content_state or {} end function caches.loadcontent(cachename,dataname) local name=caches.hashed(cachename) local full,path=caches.getfirstreadablefile(addsuffix(name,luasuffixes.lua),"trees") local filename=file.join(path,name) local blob=loadfile(addsuffix(filename,luasuffixes.luc)) or loadfile(addsuffix(filename,luasuffixes.lua)) if blob then local data=blob() if data and data.content then if data.type==dataname then if data.version==resolvers.cacheversion then content_state[#content_state+1]=data.uuid if trace_locating then report_resolvers("loading %a for %a from %a",dataname,cachename,filename) end return data.content else report_resolvers("skipping %a for %a from %a (version mismatch)",dataname,cachename,filename) end else report_resolvers("skipping %a for %a from %a (datatype mismatch)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (no content)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (invalid file)",dataname,cachename,filename) end end function caches.collapsecontent(content) for k,v in next,content do if type(v)=="table" and #v==1 then content[k]=v[1] end end end function caches.savecontent(cachename,dataname,content) local name=caches.hashed(cachename) local full,path=caches.setfirstwritablefile(addsuffix(name,luasuffixes.lua),"trees") local filename=file.join(path,name) local luaname=addsuffix(filename,luasuffixes.lua) local lucname=addsuffix(filename,luasuffixes.luc) if trace_locating then report_resolvers("preparing %a for %a",dataname,cachename) end local data={ type=dataname, root=cachename, version=resolvers.cacheversion, date=os.date("%Y-%m-%d"), time=os.date("%H:%M:%S"), content=content, uuid=os.uuid(), } local ok=io.savedata(luaname,serialize(data,true)) if ok then if trace_locating then report_resolvers("category %a, cachename %a saved in %a",dataname,cachename,luaname) end if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("%a compiled to %a",dataname,lucname) end return true else if trace_locating then report_resolvers("compiling failed for %a, deleting file %a",dataname,lucname) end os.remove(lucname) end elseif trace_locating then report_resolvers("unable to save %a in %a (access error)",dataname,luaname) end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-met"] = package.loaded["data-met"] or true -- original size: 5137, stripped down to: 4007 if not modules then modules={} end modules ['data-met']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,format=string.find,string.format local sequenced=table.sequenced local addurlscheme,urlhashed=url.addscheme,url.hashed local getcurrentdir=lfs.currentdir local trace_locating=false local trace_methods=false trackers.register("resolvers.locating",function(v) trace_methods=v end) trackers.register("resolvers.methods",function(v) trace_methods=v end) local report_methods=logs.reporter("resolvers","methods") local allocate=utilities.storage.allocate local resolvers=resolvers local registered={} local function splitmethod(filename) if not filename then return { scheme="unknown",original=filename } end if type(filename)=="table" then return filename end filename=file.collapsepath(filename,".") if not find(filename,"://") then return { scheme="file",path=filename,original=filename,filename=filename } end local specification=url.hashed(filename) if not specification.scheme or specification.scheme=="" then return { scheme="file",path=filename,original=filename,filename=filename } else return specification end end resolvers.splitmethod=splitmethod local function methodhandler(what,first,...) local method=registered[what] if method then local how,namespace=method.how,method.namespace if how=="uri" or how=="url" then local specification=splitmethod(first) local scheme=specification.scheme local resolver=namespace and namespace[scheme] if resolver then if trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,scheme,first) end return resolver(specification,...) else resolver=namespace.default or namespace.file if resolver then if trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,"default",first) end return resolver(specification,...) elseif trace_methods then report_methods("resolving, method %a, how %a, handler %a, argument %a",what,how,"unset") end end elseif how=="tag" then local resolver=namespace and namespace[first] if resolver then if trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,first) end return resolver(...) else resolver=namespace.default or namespace.file if resolver then if trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,"default") end return resolver(...) elseif trace_methods then report_methods("resolving, method %a, how %a, tag %a",what,how,"unset") end end end else report_methods("resolving, invalid method %a") end end resolvers.methodhandler=methodhandler function resolvers.registermethod(name,namespace,how) registered[name]={ how=how or "tag",namespace=namespace } namespace["byscheme"]=function(scheme,filename,...) if scheme=="file" then return methodhandler(name,filename,...) else return methodhandler(name,addurlscheme(filename,scheme),...) end end end local concatinators=allocate { notfound=file.join } local locators=allocate { notfound=function() end } local hashers=allocate { notfound=function() end } local generators=allocate { notfound=function() end } resolvers.concatinators=concatinators resolvers.locators=locators resolvers.hashers=hashers resolvers.generators=generators local registermethod=resolvers.registermethod registermethod("concatinators",concatinators,"tag") registermethod("locators",locators,"uri") registermethod("hashers",hashers,"uri") registermethod("generators",generators,"uri") end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-res"] = package.loaded["data-res"] or true -- original size: 61759, stripped down to: 42959 if not modules then modules={} end modules ['data-res']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find,lower,upper,match,gmatch=string.gsub,string.find,string.lower,string.upper,string.match,string.gmatch local concat,insert,sortedkeys=table.concat,table.insert,table.sortedkeys local next,type,rawget=next,type,rawget local os=os local P,S,R,C,Cc,Cs,Ct,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Carg local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns local formatters=string.formatters local filedirname=file.dirname local filebasename=file.basename local suffixonly=file.suffixonly local filejoin=file.join local collapsepath=file.collapsepath local joinpath=file.joinpath local allocate=utilities.storage.allocate local settings_to_array=utilities.parsers.settings_to_array local setmetatableindex=table.setmetatableindex local luasuffixes=utilities.lua.suffixes local getcurrentdir=lfs.currentdir local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local trace_detail=false trackers.register("resolvers.details",function(v) trace_detail=v end) local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end) local report_resolving=logs.reporter("resolvers","resolving") local resolvers=resolvers local expandedpathfromlist=resolvers.expandedpathfromlist local checkedvariable=resolvers.checkedvariable local splitconfigurationpath=resolvers.splitconfigurationpath local methodhandler=resolvers.methodhandler local initializesetter=utilities.setters.initialize local ostype,osname,osenv,ossetenv,osgetenv=os.type,os.name,os.env,os.setenv,os.getenv resolvers.cacheversion='1.0.1' resolvers.configbanner='' resolvers.homedir=environment.homedir resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" } resolvers.luacnfname="texmfcnf.lua" resolvers.luacnfstate="unknown" if environment.default_texmfcnf then resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf else resolvers.luacnfspec=concat ({ "home:texmf/web2c", "selfautoparent:/texmf-local/web2c", "selfautoparent:/texmf-context/web2c", "selfautoparent:/texmf-dist/web2c", "selfautoparent:/texmf/web2c", },";") end local unset_variable="unset" local formats=resolvers.formats local suffixes=resolvers.suffixes local dangerous=resolvers.dangerous local suffixmap=resolvers.suffixmap resolvers.defaultsuffixes={ "tex" } resolvers.instance=resolvers.instance or nil local instance=resolvers.instance or nil function resolvers.setenv(key,value,raw) if instance then instance.environment[key]=value ossetenv(key,raw and value or resolvers.resolve(value)) end end local function getenv(key) local value=rawget(instance.environment,key) if value and value~="" then return value else local e=osgetenv(key) return e~=nil and e~="" and checkedvariable(e) or "" end end resolvers.getenv=getenv resolvers.env=getenv local function resolve(k) return instance.expansions[k] end local dollarstripper=lpeg.stripper("$") local inhibitstripper=P("!")^0*Cs(P(1)^0) local backslashswapper=lpeg.replacer("\\","/") local somevariable=P("$")/"" local somekey=C(R("az","AZ","09","__","--")^1) local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1) local variableexpander=Cs((somevariable*(somekey/resolve)+somethingelse)^1 ) local cleaner=P("\\")/"/"+P(";")*S("!{}/\\")^0*P(";")^1/";" local variablecleaner=Cs((cleaner+P(1))^0) local somevariable=R("az","AZ","09","__","--")^1/resolve local variable=(P("$")/"")*(somevariable+(P("{")/"")*somevariable*(P("}")/"")) local variableresolver=Cs((variable+P(1))^0) local function expandedvariable(var) return lpegmatch(variableexpander,var) or var end function resolvers.newinstance() if trace_locating then report_resolving("creating instance") end local environment,variables,expansions,order=allocate(),allocate(),allocate(),allocate() local newinstance={ environment=environment, variables=variables, expansions=expansions, order=order, files=allocate(), setups=allocate(), found=allocate(), foundintrees=allocate(), hashes=allocate(), hashed=allocate(), specification=allocate(), lists=allocate(), data=allocate(), fakepaths=allocate(), remember=true, diskcache=true, renewcache=false, renewtree=false, loaderror=false, savelists=true, pattern=nil, force_suffixes=true, } setmetatableindex(variables,function(t,k) local v for i=1,#order do v=order[i][k] if v~=nil then t[k]=v return v end end if v==nil then v="" end t[k]=v return v end) setmetatableindex(environment,function(t,k) local v=osgetenv(k) if v==nil then v=variables[k] end if v~=nil then v=checkedvariable(v) or "" end v=resolvers.repath(v) t[k]=v return v end) setmetatableindex(expansions,function(t,k) local v=environment[k] if type(v)=="string" then v=lpegmatch(variableresolver,v) v=lpegmatch(variablecleaner,v) end t[k]=v return v end) return newinstance end function resolvers.setinstance(someinstance) instance=someinstance resolvers.instance=someinstance return someinstance end function resolvers.reset() return resolvers.setinstance(resolvers.newinstance()) end local function reset_hashes() instance.lists={} instance.found={} end local slash=P("/") local pathexpressionpattern=Cs ( Cc("^")*( Cc("%")*S(".-")+slash^2*P(-1)/"/.*" +slash^2/"/"+(1-slash)*P(-1)*Cc("/")+P(1) )^1*Cc("$") ) local cache={} local function makepathexpression(str) if str=="." then return "^%./$" else local c=cache[str] if not c then c=lpegmatch(pathexpressionpattern,str) cache[str]=c end return c end end local function reportcriticalvariables(cnfspec) if trace_locating then for i=1,#resolvers.criticalvars do local k=resolvers.criticalvars[i] local v=resolvers.getenv(k) or "unknown" report_resolving("variable %a set to %a",k,v) end report_resolving() if cnfspec then report_resolving("using configuration specification %a",type(cnfspec)=="table" and concat(cnfspec,",") or cnfspec) end report_resolving() end reportcriticalvariables=function() end end local function identify_configuration_files() local specification=instance.specification if #specification==0 then local cnfspec=getenv("TEXMFCNF") if cnfspec=="" then cnfspec=resolvers.luacnfspec resolvers.luacnfstate="default" else resolvers.luacnfstate="environment" end reportcriticalvariables(cnfspec) local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec)) local luacnfname=resolvers.luacnfname for i=1,#cnfpaths do local filepath=cnfpaths[i] local filename=collapsepath(filejoin(filepath,luacnfname)) local realname=resolvers.resolve(filename) if trace_locating then local fullpath=gsub(resolvers.resolve(collapsepath(filepath)),"//","/") local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c") report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath) end if lfs.isfile(realname) then specification[#specification+1]=filename if trace_locating then report_resolving("found configuration file %a",realname) end end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("configuration files already identified") end end local function load_configuration_files() local specification=instance.specification if #specification>0 then local luacnfname=resolvers.luacnfname for i=1,#specification do local filename=specification[i] local pathname=filedirname(filename) local filename=filejoin(pathname,luacnfname) local realname=resolvers.resolve(filename) local blob=loadfile(realname) if blob then local setups=instance.setups local data=blob() local parent=data and data.parent if parent then local filename=filejoin(pathname,parent) local realname=resolvers.resolve(filename) local blob=loadfile(realname) if blob then local parentdata=blob() if parentdata then report_resolving("loading configuration file %a",filename) data=table.merged(parentdata,data) end end end data=data and data.content if data then if trace_locating then report_resolving("loading configuration file %a",filename) report_resolving() end local variables=data.variables or {} local warning=false for k,v in next,data do local variant=type(v) if variant=="table" then initializesetter(filename,k,v) elseif variables[k]==nil then if trace_locating and not warning then report_resolving("variables like %a in configuration file %a should move to the 'variables' subtable", k,resolvers.resolve(filename)) warning=true end variables[k]=v end end setups[pathname]=variables if resolvers.luacnfstate=="default" then local cnfspec=variables["TEXMFCNF"] if cnfspec then if trace_locating then report_resolving("reloading configuration due to TEXMF redefinition") end resolvers.setenv("TEXMFCNF",cnfspec) instance.specification={} identify_configuration_files() load_configuration_files() resolvers.luacnfstate="configuration" break end end else if trace_locating then report_resolving("skipping configuration file %a (no content)",filename) end setups[pathname]={} instance.loaderror=true end elseif trace_locating then report_resolving("skipping configuration file %a (no valid format)",filename) end instance.order[#instance.order+1]=instance.setups[pathname] if instance.loaderror then break end end elseif trace_locating then report_resolving("warning: no lua configuration files found") end end local function load_file_databases() instance.loaderror,instance.files=false,allocate() if not instance.renewcache then local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] resolvers.hashers.byscheme(hash.type,hash.name) if instance.loaderror then break end end end end local function locate_file_databases() local texmfpaths=resolvers.expandedpathlist("TEXMF") if #texmfpaths>0 then for i=1,#texmfpaths do local path=collapsepath(texmfpaths[i]) path=gsub(path,"/+$","") local stripped=lpegmatch(inhibitstripper,path) if stripped~="" then local runtime=stripped==path path=resolvers.cleanpath(path) local spec=resolvers.splitmethod(stripped) if runtime and (spec.noscheme or spec.scheme=="file") then stripped="tree:///"..stripped elseif spec.scheme=="cache" or spec.scheme=="file" then stripped=spec.path end if trace_locating then if runtime then report_resolving("locating list of %a (runtime) (%s)",path,stripped) else report_resolving("locating list of %a (cached)",path) end end methodhandler('locators',stripped) end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("no texmf paths are defined (using TEXMF)") end end local function generate_file_databases() local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] methodhandler('generators',hash.name) end if trace_locating then report_resolving() end end local function save_file_databases() for i=1,#instance.hashes do local hash=instance.hashes[i] local cachename=hash.name if hash.cache then local content=instance.files[cachename] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",cachename) end caches.savecontent(cachename,"files",content) elseif trace_locating then report_resolving("not saving runtime tree %a",cachename) end end end function resolvers.renew(hashname) if hashname and hashname~="" then local expanded=resolvers.expansion(hashname) or "" if expanded~="" then if trace_locating then report_resolving("identifying tree %a from %a",expanded,hashname) end hashname=expanded else if trace_locating then report_resolving("identifying tree %a",hashname) end end local realpath=resolvers.resolve(hashname) if lfs.isdir(realpath) then if trace_locating then report_resolving("using path %a",realpath) end methodhandler('generators',hashname) local content=instance.files[hashname] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",hashname) end caches.savecontent(hashname,"files",content) else report_resolving("invalid path %a",realpath) end end end local function load_databases() locate_file_databases() if instance.diskcache and not instance.renewcache then load_file_databases() if instance.loaderror then generate_file_databases() save_file_databases() end else generate_file_databases() if instance.renewcache then save_file_databases() end end end function resolvers.appendhash(type,name,cache) if not instance.hashed[name] then if trace_locating then report_resolving("hash %a appended",name) end insert(instance.hashes,{ type=type,name=name,cache=cache } ) instance.hashed[name]=cache end end function resolvers.prependhash(type,name,cache) if not instance.hashed[name] then if trace_locating then report_resolving("hash %a prepended",name) end insert(instance.hashes,1,{ type=type,name=name,cache=cache } ) instance.hashed[name]=cache end end function resolvers.extendtexmfvariable(specification) local t=resolvers.splitpath(getenv("TEXMF")) insert(t,1,specification) local newspec=concat(t,",") if instance.environment["TEXMF"] then instance.environment["TEXMF"]=newspec elseif instance.variables["TEXMF"] then instance.variables["TEXMF"]=newspec else end reset_hashes() end function resolvers.splitexpansions() local ie=instance.expansions for k,v in next,ie do local t,tn,h,p={},0,{},splitconfigurationpath(v) for kk=1,#p do local vv=p[kk] if vv~="" and not h[vv] then tn=tn+1 t[tn]=vv h[vv]=true end end if #t>1 then ie[k]=t else ie[k]=t[1] end end end function resolvers.datastate() return caches.contentstate() end function resolvers.variable(name) local name=name and lpegmatch(dollarstripper,name) local result=name and instance.variables[name] return result~=nil and result or "" end function resolvers.expansion(name) local name=name and lpegmatch(dollarstripper,name) local result=name and instance.expansions[name] return result~=nil and result or "" end function resolvers.unexpandedpathlist(str) local pth=resolvers.variable(str) local lst=resolvers.splitpath(pth) return expandedpathfromlist(lst) end function resolvers.unexpandedpath(str) return joinpath(resolvers.unexpandedpathlist(str)) end local done={} function resolvers.resetextrapath() local ep=instance.extra_paths if not ep then ep,done={},{} instance.extra_paths=ep elseif #ep>0 then instance.lists,done={},{} end end function resolvers.registerextrapath(paths,subpaths) paths=settings_to_array(paths) subpaths=settings_to_array(subpaths) local ep=instance.extra_paths or {} local oldn=#ep local newn=oldn local nofpaths=#paths local nofsubpaths=#subpaths if nofpaths>0 then if nofsubpaths>0 then for i=1,nofpaths do local p=paths[i] for j=1,nofsubpaths do local s=subpaths[j] local ps=p.."/"..s if not done[ps] then newn=newn+1 ep[newn]=resolvers.cleanpath(ps) done[ps]=true end end end else for i=1,nofpaths do local p=paths[i] if not done[p] then newn=newn+1 ep[newn]=resolvers.cleanpath(p) done[p]=true end end end elseif nofsubpaths>0 then for i=1,oldn do for j=1,nofsubpaths do local s=subpaths[j] local ps=ep[i].."/"..s if not done[ps] then newn=newn+1 ep[newn]=resolvers.cleanpath(ps) done[ps]=true end end end end if newn>0 then instance.extra_paths=ep end if newn>oldn then instance.lists={} end end local function made_list(instance,list) local ep=instance.extra_paths if not ep or #ep==0 then return list else local done,new,newn={},{},0 for k=1,#list do local v=list[k] if not done[v] then if find(v,"^[%.%/]$") then done[v]=true newn=newn+1 new[newn]=v else break end end end for k=1,#ep do local v=ep[k] if not done[v] then done[v]=true newn=newn+1 new[newn]=v end end for k=1,#list do local v=list[k] if not done[v] then done[v]=true newn=newn+1 new[newn]=v end end return new end end function resolvers.cleanpathlist(str) local t=resolvers.expandedpathlist(str) if t then for i=1,#t do t[i]=collapsepath(resolvers.cleanpath(t[i])) end end return t end function resolvers.expandpath(str) return joinpath(resolvers.expandedpathlist(str)) end function resolvers.expandedpathlist(str) if not str then return {} elseif instance.savelists then str=lpegmatch(dollarstripper,str) local lists=instance.lists local lst=lists[str] if not lst then local l=made_list(instance,resolvers.splitpath(resolvers.expansion(str))) lst=expandedpathfromlist(l) lists[str]=lst end return lst else local lst=resolvers.splitpath(resolvers.expansion(str)) return made_list(instance,expandedpathfromlist(lst)) end end function resolvers.expandedpathlistfromvariable(str) str=lpegmatch(dollarstripper,str) local tmp=resolvers.variableofformatorsuffix(str) return resolvers.expandedpathlist(tmp~="" and tmp or str) end function resolvers.expandpathfromvariable(str) return joinpath(resolvers.expandedpathlistfromvariable(str)) end function resolvers.expandbraces(str) local ori=str local pth=expandedpathfromlist(resolvers.splitpath(ori)) return joinpath(pth) end function resolvers.registerfilehash(name,content,someerror) if content then instance.files[name]=content else instance.files[name]={} if somerror==true then instance.loaderror=someerror end end end local function isreadable(name) local readable=lfs.isfile(name) if trace_detail then if readable then report_resolving("file %a is readable",name) else report_resolving("file %a is not readable",name) end end return readable end local function collect_files(names) local filelist,noffiles={},0 for k=1,#names do local fname=names[k] if trace_detail then report_resolving("checking name %a",fname) end local bname=filebasename(fname) local dname=filedirname(fname) if dname=="" or find(dname,"^%.") then dname=false else dname=gsub(dname,"%*",".*") dname="/"..dname.."$" end local hashes=instance.hashes for h=1,#hashes do local hash=hashes[h] local blobpath=hash.name local files=blobpath and instance.files[blobpath] if files then if trace_detail then report_resolving("deep checking %a, base %a, pattern %a",blobpath,bname,dname) end local blobfile=files[bname] if not blobfile then local rname="remap:"..bname blobfile=files[rname] if blobfile then bname=files[rname] blobfile=files[bname] end end if blobfile then local blobroot=files.__path__ or blobpath if type(blobfile)=='string' then if not dname or find(blobfile,dname) then local variant=hash.type local search=filejoin(blobroot,blobfile,bname) local result=methodhandler('concatinators',hash.type,blobroot,blobfile,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles=noffiles+1 filelist[noffiles]={ variant,search,result } end else for kk=1,#blobfile do local vv=blobfile[kk] if not dname or find(vv,dname) then local variant=hash.type local search=filejoin(blobroot,vv,bname) local result=methodhandler('concatinators',hash.type,blobroot,vv,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles=noffiles+1 filelist[noffiles]={ variant,search,result } end end end end elseif trace_locating then report_resolving("no match in %a (%s)",blobpath,bname) end end end return noffiles>0 and filelist or nil end local fit={} function resolvers.registerintrees(filename,format,filetype,usedmethod,foundname) local foundintrees=instance.foundintrees if usedmethod=="direct" and filename==foundname and fit[foundname] then else local t={ filename=filename, format=format~="" and format or nil, filetype=filetype~="" and filetype or nil, usedmethod=usedmethod, foundname=foundname, } fit[foundname]=t foundintrees[#foundintrees+1]=t end end local function can_be_dir(name) local fakepaths=instance.fakepaths if not fakepaths[name] then if lfs.isdir(name) then fakepaths[name]=1 else fakepaths[name]=2 end end return fakepaths[name]==1 end local preparetreepattern=Cs((P(".")/"%%."+P("-")/"%%-"+P(1))^0*Cc("$")) local collect_instance_files local function find_analyze(filename,askedformat,allresults) local filetype,wantedfiles,ext='',{},suffixonly(filename) wantedfiles[#wantedfiles+1]=filename if askedformat=="" then if ext=="" or not suffixmap[ext] then local defaultsuffixes=resolvers.defaultsuffixes for i=1,#defaultsuffixes do local forcedname=filename..'.'..defaultsuffixes[i] wantedfiles[#wantedfiles+1]=forcedname filetype=resolvers.formatofsuffix(forcedname) if trace_locating then report_resolving("forcing filetype %a",filetype) end end else filetype=resolvers.formatofsuffix(filename) if trace_locating then report_resolving("using suffix based filetype %a",filetype) end end else if ext=="" or not suffixmap[ext] then local format_suffixes=suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do wantedfiles[#wantedfiles+1]=filename.."."..format_suffixes[i] end end end filetype=askedformat if trace_locating then report_resolving("using given filetype %a",filetype) end end return filetype,wantedfiles end local function find_direct(filename,allresults) if not dangerous[askedformat] and isreadable(filename) then if trace_detail then report_resolving("file %a found directly",filename) end return "direct",{ filename } end end local function find_wildcard(filename,allresults) if find(filename,'%*') then if trace_locating then report_resolving("checking wildcard %a",filename) end local method,result=resolvers.findwildcardfiles(filename) if result then return "wildcard",result end end end local function find_qualified(filename,allresults,askedformat,alsostripped) if not file.is_qualified_path(filename) then return end if trace_locating then report_resolving("checking qualified name %a",filename) end if isreadable(filename) then if trace_detail then report_resolving("qualified file %a found",filename) end return "qualified",{ filename } end if trace_detail then report_resolving("locating qualified file %a",filename) end local forcedname,suffix="",suffixonly(filename) if suffix=="" then local format_suffixes=askedformat=="" and resolvers.defaultsuffixes or suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do local s=format_suffixes[i] forcedname=filename.."."..s if isreadable(forcedname) then if trace_locating then report_resolving("no suffix, forcing format filetype %a",s) end return "qualified",{ forcedname } end end end end if alsostripped and suffix and suffix~="" then local basename=filebasename(filename) local pattern=lpegmatch(preparetreepattern,filename) local savedformat=askedformat local format=savedformat or "" if format=="" then askedformat=resolvers.formatofsuffix(suffix) end if not format then askedformat="othertextfiles" end if basename~=filename then local resolved=collect_instance_files(basename,askedformat,allresults) if #resolved==0 then local lowered=lower(basename) if filename~=lowered then resolved=collect_instance_files(lowered,askedformat,allresults) end end resolvers.format=savedformat if #resolved>0 then local result={} for r=1,#resolved do local rr=resolved[r] if find(rr,pattern) then result[#result+1]=rr end end if #result>0 then return "qualified",result end end end end end local function check_subpath(fname) if isreadable(fname) then if trace_detail then report_resolving("found %a by deep scanning",fname) end return fname end end local function find_intree(filename,filetype,wantedfiles,allresults) local typespec=resolvers.variableofformat(filetype) local pathlist=resolvers.expandedpathlist(typespec) local method="intree" if pathlist and #pathlist>0 then local filelist=collect_files(wantedfiles) local dirlist={} if filelist then for i=1,#filelist do dirlist[i]=filedirname(filelist[i][3]).."/" end end if trace_detail then report_resolving("checking filename %a",filename) end local resolve=resolvers.resolve local result={} for k=1,#pathlist do local path=pathlist[k] local pathname=lpegmatch(inhibitstripper,path) local doscan=path==pathname if not find (pathname,'//$') then doscan=false end local done=false if filelist then local expression=makepathexpression(pathname) if trace_detail then report_resolving("using pattern %a for path %a",expression,pathname) end for k=1,#filelist do local fl=filelist[k] local f=fl[2] local d=dirlist[k] if find(d,expression) or find(resolve(d),expression) then result[#result+1]=resolve(fl[3]) done=true if allresults then if trace_detail then report_resolving("match to %a in hash for file %a and path %a, continue scanning",expression,f,d) end else if trace_detail then report_resolving("match to %a in hash for file %a and path %a, quit scanning",expression,f,d) end break end elseif trace_detail then report_resolving("no match to %a in hash for file %a and path %a",expression,f,d) end end end if done then method="database" else method="filesystem" pathname=gsub(pathname,"/+$","") pathname=resolve(pathname) local scheme=url.hasscheme(pathname) if not scheme or scheme=="file" then local pname=gsub(pathname,"%.%*$",'') if not find(pname,"%*") then if can_be_dir(pname) then for k=1,#wantedfiles do local w=wantedfiles[k] local fname=check_subpath(filejoin(pname,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end end if not done and doscan then local files=resolvers.simplescanfiles(pname,false,true) for k=1,#wantedfiles do local w=wantedfiles[k] local subpath=files[w] if not subpath or subpath=="" then elseif type(subpath)=="string" then local fname=check_subpath(filejoin(pname,subpath,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end else for i=1,#subpath do local sp=subpath[i] if sp=="" then else local fname=check_subpath(filejoin(pname,sp,w)) if fname then result[#result+1]=fname done=true if not allresults then break end end end end if done and not allresults then break end end end end end else end end end if done and not allresults then break end end if #result>0 then return method,result end end end local function find_onpath(filename,filetype,wantedfiles,allresults) if trace_detail then report_resolving("checking filename %a, filetype %a, wanted files %a",filename,filetype,concat(wantedfiles," | ")) end local result={} for k=1,#wantedfiles do local fname=wantedfiles[k] if fname and isreadable(fname) then filename=fname result[#result+1]=filejoin('.',fname) if not allresults then break end end end if #result>0 then return "onpath",result end end local function find_otherwise(filename,filetype,wantedfiles,allresults) local filelist=collect_files(wantedfiles) local fl=filelist and filelist[1] if fl then return "otherwise",{ resolvers.resolve(fl[3]) } end end collect_instance_files=function(filename,askedformat,allresults) askedformat=askedformat or "" filename=collapsepath(filename,".") filename=gsub(filename,"^%./",getcurrentdir().."/") if allresults then local filetype,wantedfiles=find_analyze(filename,askedformat) local results={ { find_direct (filename,true) }, { find_wildcard (filename,true) }, { find_qualified(filename,true,askedformat) }, { find_intree (filename,filetype,wantedfiles,true) }, { find_onpath (filename,filetype,wantedfiles,true) }, { find_otherwise(filename,filetype,wantedfiles,true) }, } local result,status,done={},{},{} for k,r in next,results do local method,list=r[1],r[2] if method and list then for i=1,#list do local c=collapsepath(list[i]) if not done[c] then result[#result+1]=c done[c]=true end status[#status+1]=formatters["%-10s: %s"](method,c) end end end if trace_detail then report_resolving("lookup status: %s",table.serialize(status,filename)) end return result,status else local method,result,stamp,filetype,wantedfiles if instance.remember then stamp=formatters["%s--%s"](filename,askedformat) result=stamp and instance.found[stamp] if result then if trace_locating then report_resolving("remembered file %a",filename) end return result end end method,result=find_direct(filename) if not result then method,result=find_wildcard(filename) if not result then method,result=find_qualified(filename,false,askedformat) if not result then filetype,wantedfiles=find_analyze(filename,askedformat) method,result=find_intree(filename,filetype,wantedfiles) if not result then method,result=find_onpath(filename,filetype,wantedfiles) if not result then method,result=find_otherwise(filename,filetype,wantedfiles) end end end end end if result and #result>0 then local foundname=collapsepath(result[1]) resolvers.registerintrees(filename,askedformat,filetype,method,foundname) result={ foundname } else result={} end if stamp then if trace_locating then report_resolving("remembering file %a",filename) end instance.found[stamp]=result end return result end end local function findfiles(filename,filetype,allresults) local result,status=collect_instance_files(filename,filetype or "",allresults) if not result or #result==0 then local lowered=lower(filename) if filename~=lowered then result,status=collect_instance_files(lowered,filetype or "",allresults) end end return result or {},status end function resolvers.findfiles(filename,filetype) return findfiles(filename,filetype,true) end function resolvers.findfile(filename,filetype) return findfiles(filename,filetype,false)[1] or "" end function resolvers.findpath(filename,filetype) return filedirname(findfiles(filename,filetype,false)[1] or "") end local function findgivenfiles(filename,allresults) local bname,result=filebasename(filename),{} local hashes=instance.hashes local noffound=0 for k=1,#hashes do local hash=hashes[k] local files=instance.files[hash.name] or {} local blist=files[bname] if not blist then local rname="remap:"..bname blist=files[rname] if blist then bname=files[rname] blist=files[bname] end end if blist then if type(blist)=='string' then local found=methodhandler('concatinators',hash.type,hash.name,blist,bname) or "" if found~="" then noffound=noffound+1 result[noffound]=resolvers.resolve(found) if not allresults then break end end else for kk=1,#blist do local vv=blist[kk] local found=methodhandler('concatinators',hash.type,hash.name,vv,bname) or "" if found~="" then noffound=noffound+1 result[noffound]=resolvers.resolve(found) if not allresults then break end end end end end end return result end function resolvers.findgivenfiles(filename) return findgivenfiles(filename,true) end function resolvers.findgivenfile(filename) return findgivenfiles(filename,false)[1] or "" end local function doit(path,blist,bname,tag,variant,result,allresults) local done=false if blist and variant then local resolve=resolvers.resolve if type(blist)=='string' then if find(lower(blist),path) then local full=methodhandler('concatinators',variant,tag,blist,bname) or "" result[#result+1]=resolve(full) done=true end else for kk=1,#blist do local vv=blist[kk] if find(lower(vv),path) then local full=methodhandler('concatinators',variant,tag,vv,bname) or "" result[#result+1]=resolve(full) done=true if not allresults then break end end end end end return done end local makewildcard=Cs( (P("^")^0*P("/")*P(-1)+P(-1))/".*"+(P("^")^0*P("/")/"")^0*(P("*")/".*"+P("-")/"%%-"+P(".")/"%%."+P("?")/"."+P("\\")/"/"+P(1))^0 ) function resolvers.wildcardpattern(pattern) return lpegmatch(makewildcard,pattern) or pattern end local function findwildcardfiles(filename,allresults,result) result=result or {} local base=filebasename(filename) local dirn=filedirname(filename) local path=lower(lpegmatch(makewildcard,dirn) or dirn) local name=lower(lpegmatch(makewildcard,base) or base) local files,done=instance.files,false if find(name,"%*") then local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] local hashname,hashtype=hash.name,hash.type for kk,hh in next,files[hashname] do if not find(kk,"^remap:") then if find(lower(kk),name) then if doit(path,hh,kk,hashname,hashtype,result,allresults) then done=true end if done and not allresults then break end end end end end else local hashes=instance.hashes for k=1,#hashes do local hash=hashes[k] local hashname,hashtype=hash.name,hash.type if doit(path,files[hashname][bname],bname,hashname,hashtype,result,allresults) then done=true end if done and not allresults then break end end end return result end function resolvers.findwildcardfiles(filename,result) return findwildcardfiles(filename,true,result) end function resolvers.findwildcardfile(filename) return findwildcardfiles(filename,false)[1] or "" end function resolvers.automount() end function resolvers.load(option) statistics.starttiming(instance) identify_configuration_files() load_configuration_files() if option~="nofiles" then load_databases() resolvers.automount() end statistics.stoptiming(instance) local files=instance.files return files and next(files) and true end function resolvers.loadtime() return statistics.elapsedtime(instance) end local function report(str) if trace_locating then report_resolving(str) else print(str) end end function resolvers.dowithfilesandreport(command,files,...) if files and #files>0 then if trace_locating then report('') end if type(files)=="string" then files={ files } end for f=1,#files do local file=files[f] local result=command(file,...) if type(result)=='string' then report(result) else for i=1,#result do report(result[i]) end end end end end function resolvers.showpath(str) return joinpath(resolvers.expandedpathlist(resolvers.formatofvariable(str))) end function resolvers.registerfile(files,name,path) if files[name] then if type(files[name])=='string' then files[name]={ files[name],path } else files[name]=path end else files[name]=path end end function resolvers.dowithpath(name,func) local pathlist=resolvers.expandedpathlist(name) for i=1,#pathlist do func("^"..resolvers.cleanpath(pathlist[i])) end end function resolvers.dowithvariable(name,func) func(expandedvariable(name)) end function resolvers.locateformat(name) local engine=environment.ownmain or "luatex" local barename=file.removesuffix(name) local fullname=file.addsuffix(barename,"fmt") local fmtname=caches.getfirstreadablefile(fullname,"formats",engine) or "" if fmtname=="" then fmtname=resolvers.findfile(fullname) fmtname=resolvers.cleanpath(fmtname) end if fmtname~="" then local barename=file.removesuffix(fmtname) local luaname=file.addsuffix(barename,luasuffixes.lua) local lucname=file.addsuffix(barename,luasuffixes.luc) local luiname=file.addsuffix(barename,luasuffixes.lui) if lfs.isfile(luiname) then return barename,luiname elseif lfs.isfile(lucname) then return barename,lucname elseif lfs.isfile(luaname) then return barename,luaname end end return nil,nil end function resolvers.booleanvariable(str,default) local b=resolvers.expansion(str) if b=="" then return default else b=toboolean(b) return (b==nil and default) or b end end function resolvers.dowithfilesintree(pattern,handle,before,after) local instance=resolvers.instance local hashes=instance.hashes for i=1,#hashes do local hash=hashes[i] local blobtype=hash.type local blobpath=hash.name if blobpath then if before then before(blobtype,blobpath,pattern) end local files=instance.files[blobpath] local total,checked,done=0,0,0 if files then for k,v in table.sortedhash(files) do total=total+1 if find(k,"^remap:") then elseif find(k,pattern) then if type(v)=="string" then checked=checked+1 if handle(blobtype,blobpath,v,k) then done=done+1 end else checked=checked+#v for i=1,#v do if handle(blobtype,blobpath,v[i],k) then done=done+1 end end end end end end if after then after(blobtype,blobpath,pattern,total,checked,done) end end end end resolvers.obsolete=resolvers.obsolete or {} local obsolete=resolvers.obsolete resolvers.find_file=resolvers.findfile obsolete.find_file=resolvers.findfile resolvers.find_files=resolvers.findfiles obsolete.find_files=resolvers.findfiles end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-pre"] = package.loaded["data-pre"] or true -- original size: 6643, stripped down to: 4401 if not modules then modules={} end modules ['data-pre']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers=resolvers local prefixes=utilities.storage.allocate() resolvers.prefixes=prefixes local cleanpath,findgivenfile,expansion=resolvers.cleanpath,resolvers.findgivenfile,resolvers.expansion local getenv=resolvers.getenv local P,S,R,C,Cs,Cc,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.match local joinpath,basename,dirname=file.join,file.basename,file.dirname local getmetatable,rawset,type=getmetatable,rawset,type prefixes.environment=function(str) return cleanpath(expansion(str)) end prefixes.relative=function(str,n) if io.exists(str) then elseif io.exists("./"..str) then str="./"..str else local p="../" for i=1,n or 2 do if io.exists(p..str) then str=p..str break else p=p.."../" end end end return cleanpath(str) end prefixes.auto=function(str) local fullname=prefixes.relative(str) if not lfs.isfile(fullname) then fullname=prefixes.locate(str) end return fullname end prefixes.locate=function(str) local fullname=findgivenfile(str) or "" return cleanpath((fullname~="" and fullname) or str) end prefixes.filename=function(str) local fullname=findgivenfile(str) or "" return cleanpath(basename((fullname~="" and fullname) or str)) end prefixes.pathname=function(str) local fullname=findgivenfile(str) or "" return cleanpath(dirname((fullname~="" and fullname) or str)) end prefixes.selfautoloc=function(str) return cleanpath(joinpath(getenv('SELFAUTOLOC'),str)) end prefixes.selfautoparent=function(str) return cleanpath(joinpath(getenv('SELFAUTOPARENT'),str)) end prefixes.selfautodir=function(str) return cleanpath(joinpath(getenv('SELFAUTODIR'),str)) end prefixes.home=function(str) return cleanpath(joinpath(getenv('HOME'),str)) end local function toppath() local inputstack=resolvers.inputstack if not inputstack then return "." end local pathname=dirname(inputstack[#inputstack] or "") if pathname=="" then return "." else return pathname end end resolvers.toppath=toppath prefixes.toppath=function(str) return cleanpath(joinpath(toppath(),str)) end prefixes.env=prefixes.environment prefixes.rel=prefixes.relative prefixes.loc=prefixes.locate prefixes.kpse=prefixes.locate prefixes.full=prefixes.locate prefixes.file=prefixes.filename prefixes.path=prefixes.pathname function resolvers.allprefixes(separator) local all=table.sortedkeys(prefixes) if separator then for i=1,#all do all[i]=all[i]..":" end end return all end local function _resolve_(method,target) local action=prefixes[method] if action then return action(target) else return method..":"..target end end local resolved,abstract={},{} function resolvers.resetresolve(str) resolved,abstract={},{} end local pattern=Cs((C(R("az")^2)*P(":")*C((1-S(" \"\';,"))^1)/_resolve_+P(1))^0) local prefix=C(R("az")^2)*P(":") local target=C((1-S(" \"\';,"))^1) local notarget=(#S(";,")+P(-1))*Cc("") local pattern=Cs(((prefix*(target+notarget))/_resolve_+P(1))^0) local function resolve(str) if type(str)=="table" then local t={} for i=1,#str do t[i]=resolve(str[i]) end return t else local res=resolved[str] if not res then res=lpegmatch(pattern,str) resolved[str]=res abstract[res]=str end return res end end local function unresolve(str) return abstract[str] or str end resolvers.resolve=resolve resolvers.unresolve=unresolve if type(os.uname)=="function" then for k,v in next,os.uname() do if not prefixes[k] then prefixes[k]=function() return v end end end end if os.type=="unix" then local pattern local function makepattern(t,k,v) if t then rawset(t,k,v) end local colon=P(":") for k,v in table.sortedpairs(prefixes) do if p then p=P(k)+p else p=P(k) end end pattern=Cs((p*colon+colon/";"+P(1))^0) end makepattern() getmetatable(prefixes).__newindex=makepattern function resolvers.repath(str) return lpegmatch(pattern,str) end else function resolvers.repath(str) return str end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-inp"] = package.loaded["data-inp"] or true -- original size: 910, stripped down to: 823 if not modules then modules={} end modules ['data-inp']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local resolvers=resolvers local methodhandler=resolvers.methodhandler local registermethod=resolvers.registermethod local finders=allocate { helpers={},notfound=function() end } local openers=allocate { helpers={},notfound=function() end } local loaders=allocate { helpers={},notfound=function() return false,nil,0 end } registermethod("finders",finders,"uri") registermethod("openers",openers,"uri") registermethod("loaders",loaders,"uri") resolvers.finders=finders resolvers.openers=openers resolvers.loaders=loaders end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-out"] = package.loaded["data-out"] or true -- original size: 530, stripped down to: 475 if not modules then modules={} end modules ['data-out']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local resolvers=resolvers local registermethod=resolvers.registermethod local savers=allocate { helpers={} } resolvers.savers=savers registermethod("savers",savers,"uri") end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-fil"] = package.loaded["data-fil"] or true -- original size: 3801, stripped down to: 3231 if not modules then modules={} end modules ['data-fil']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_files=logs.reporter("resolvers","files") local resolvers=resolvers local finders,openers,loaders,savers=resolvers.finders,resolvers.openers,resolvers.loaders,resolvers.savers local locators,hashers,generators,concatinators=resolvers.locators,resolvers.hashers,resolvers.generators,resolvers.concatinators local checkgarbage=utilities.garbagecollector and utilities.garbagecollector.check function locators.file(specification) local name=specification.filename local realname=resolvers.resolve(name) if realname and realname~='' and lfs.isdir(realname) then if trace_locating then report_files("file locator %a found as %a",name,realname) end resolvers.appendhash('file',name,true) elseif trace_locating then report_files("file locator %a not found",name) end end function hashers.file(specification) local name=specification.filename local content=caches.loadcontent(name,'files') resolvers.registerfilehash(name,content,content==nil) end function generators.file(specification) local path=specification.filename local content=resolvers.scanfiles(path,false,true) resolvers.registerfilehash(path,content,true) end concatinators.file=file.join function finders.file(specification,filetype) local filename=specification.filename local foundname=resolvers.findfile(filename,filetype) if foundname and foundname~="" then if trace_locating then report_files("file finder: %a found",filename) end return foundname else if trace_locating then report_files("file finder: %a not found",filename) end return finders.notfound() end end function openers.helpers.textopener(tag,filename,f) return { reader=function() return f:read () end, close=function() logs.show_close(filename) return f:close() end, } end function openers.file(specification,filetype) local filename=specification.filename if filename and filename~="" then local f=io.open(filename,"r") if f then if trace_locating then report_files("file opener: %a opened",filename) end return openers.helpers.textopener("file",filename,f) end end if trace_locating then report_files("file opener: %a not found",filename) end return openers.notfound() end function loaders.file(specification,filetype) local filename=specification.filename if filename and filename~="" then local f=io.open(filename,"rb") if f then logs.show_load(filename) if trace_locating then report_files("file loader: %a loaded",filename) end local s=f:read("*a") if checkgarbage then checkgarbage(#s) end f:close() if s then return true,s,#s end end end if trace_locating then report_files("file loader: %a not found",filename) end return loaders.notfound() end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-con"] = package.loaded["data-con"] or true -- original size: 5010, stripped down to: 3588 if not modules then modules={} end modules ['data-con']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub=string.format,string.lower,string.gsub local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end) local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end) containers=containers or {} local containers=containers containers.usecache=true local report_containers=logs.reporter("resolvers","containers") local allocated={} local mt={ __index=function(t,k) if k=="writable" then local writable=caches.getwritablepath(t.category,t.subcategory) or { "." } t.writable=writable return writable elseif k=="readables" then local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." } t.readables=readables return readables end end, __storage__=true } function containers.define(category,subcategory,version,enabled) if category and subcategory then local c=allocated[category] if not c then c={} allocated[category]=c end local s=c[subcategory] if not s then s={ category=category, subcategory=subcategory, storage={}, enabled=enabled, version=version or math.pi, trace=false, } setmetatable(s,mt) c[subcategory]=s end return s end end function containers.is_usable(container,name) return container.enabled and caches and caches.is_writable(container.writable,name) end function containers.is_valid(container,name) if name and name~="" then local storage=container.storage[name] return storage and storage.cache_version==container.version else return false end end function containers.read(container,name) local storage=container.storage local stored=storage[name] if not stored and container.enabled and caches and containers.usecache then stored=caches.loaddata(container.readables,name) if stored and stored.cache_version==container.version then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","load",container.subcategory,name) end else stored=nil end storage[name]=stored elseif stored then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","reuse",container.subcategory,name) end end return stored end function containers.write(container,name,data) if data then data.cache_version=container.version if container.enabled and caches then local unique,shared=data.unique,data.shared data.unique,data.shared=nil,nil caches.savedata(container.writable,name,data) if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","save",container.subcategory,name) end data.unique,data.shared=unique,shared end if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","store",container.subcategory,name) end container.storage[name]=data end return data end function containers.content(container,name) return container.storage[name] end function containers.cleanname(name) return (gsub(lower(name),"[^%w\128-\255]+","-")) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-use"] = package.loaded["data-use"] or true -- original size: 3913, stripped down to: 2998 if not modules then modules={} end modules ['data-use']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub,find=string.format,string.lower,string.gsub,string.find local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_mounts=logs.reporter("resolvers","mounts") local resolvers=resolvers resolvers.automounted=resolvers.automounted or {} function resolvers.automount(usecache) local mountpaths=resolvers.cleanpathlist(resolvers.expansion('TEXMFMOUNT')) if (not mountpaths or #mountpaths==0) and usecache then mountpaths=caches.getreadablepaths("mount") end if mountpaths and #mountpaths>0 then statistics.starttiming(resolvers.instance) for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") if f then for line in f:lines() do if line then if find(line,"^[%%#%-]") then elseif find(line,"^zip://") then if trace_locating then report_mounts("mounting %a",line) end table.insert(resolvers.automounted,line) resolvers.usezipfile(line) end end end f:close() end end statistics.stoptiming(resolvers.instance) end end statistics.register("used config file",function() return caches.configfiles() end) statistics.register("used cache path",function() return caches.usedpaths() end) function statistics.savefmtstatus(texname,formatbanner,sourcefile) local enginebanner=status.list().banner if formatbanner and enginebanner and sourcefile then local luvname=file.replacesuffix(texname,"luv") local luvdata={ enginebanner=enginebanner, formatbanner=formatbanner, sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"), sourcefile=sourcefile, } io.savedata(luvname,table.serialize(luvdata,true)) end end function statistics.checkfmtstatus(texname) local enginebanner=status.list().banner if enginebanner and texname then local luvname=file.replacesuffix(texname,"luv") if lfs.isfile(luvname) then local luv=dofile(luvname) if luv and luv.sourcefile then local sourcehash=md5.hex(io.loaddata(resolvers.findfile(luv.sourcefile)) or "unknown") local luvbanner=luv.enginebanner or "?" if luvbanner~=enginebanner then return format("engine mismatch (luv: %s <> bin: %s)",luvbanner,enginebanner) end local luvhash=luv.sourcehash or "?" if luvhash~=sourcehash then return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash) end else return "invalid status file" end else return "missing status file" end end return true end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true -- original size: 8489, stripped down to: 6757 if not modules then modules={} end modules ['data-zip']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,find,match=string.format,string.find,string.match local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_zip=logs.reporter("resolvers","zip") local resolvers=resolvers zip=zip or {} local zip=zip zip.archives=zip.archives or {} local archives=zip.archives zip.registeredfiles=zip.registeredfiles or {} local registeredfiles=zip.registeredfiles local limited=false directives.register("system.inputmode",function(v) if not limited then local i_limiter=io.i_limiter(v) if i_limiter then zip.open=i_limiter.protect(zip.open) limited=true end end end) local function validzip(str) if not find(str,"^zip://") then return "zip:///"..str else return str end end function zip.openarchive(name) if not name or name=="" then return nil else local arch=archives[name] if not arch then local full=resolvers.findfile(name) or "" arch=(full~="" and zip.open(full)) or false archives[name]=arch end return arch end end function zip.closearchive(name) if not name or (name=="" and archives[name]) then zip.close(archives[name]) archives[name]=nil end end function resolvers.locators.zip(specification) local archive=specification.filename local zipfile=archive and archive~="" and zip.openarchive(archive) if trace_locating then if zipfile then report_zip("locator: archive %a found",archive) else report_zip("locator: archive %a not found",archive) end end end function resolvers.hashers.zip(specification) local archive=specification.filename if trace_locating then report_zip("loading file %a",archive) end resolvers.usezipfile(specification.original) end function resolvers.concatinators.zip(zipfile,path,name) if not path or path=="" then return format('%s?name=%s',zipfile,name) else return format('%s?name=%s/%s',zipfile,path,name) end end function resolvers.finders.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("finder: archive %a found",archive) end local dfile=zfile:open(queryname) if dfile then dfile=zfile:close() if trace_locating then report_zip("finder: file %a found",queryname) end return specification.original elseif trace_locating then report_zip("finder: file %a not found",queryname) end elseif trace_locating then report_zip("finder: unknown archive %a",archive) end end end if trace_locating then report_zip("finder: %a not found",original) end return resolvers.finders.notfound() end function resolvers.openers.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("opener; archive %a opened",archive) end local dfile=zfile:open(queryname) if dfile then if trace_locating then report_zip("opener: file %a found",queryname) end return resolvers.openers.helpers.textopener('zip',original,dfile) elseif trace_locating then report_zip("opener: file %a not found",queryname) end elseif trace_locating then report_zip("opener: unknown archive %a",archive) end end end if trace_locating then report_zip("opener: %a not found",original) end return resolvers.openers.notfound() end function resolvers.loaders.zip(specification) local original=specification.original local archive=specification.filename if archive then local query=url.query(specification.query) local queryname=query.name if queryname then local zfile=zip.openarchive(archive) if zfile then if trace_locating then report_zip("loader: archive %a opened",archive) end local dfile=zfile:open(queryname) if dfile then logs.show_load(original) if trace_locating then report_zip("loader; file %a loaded",original) end local s=dfile:read("*all") dfile:close() return true,s,#s elseif trace_locating then report_zip("loader: file %a not found",queryname) end elseif trace_locating then report_zip("loader; unknown archive %a",archive) end end end if trace_locating then report_zip("loader: %a not found",original) end return resolvers.openers.notfound() end function resolvers.usezipfile(archive) local specification=resolvers.splitmethod(archive) local archive=specification.filename if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end statistics.starttiming(instance) resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z instance.files[archive]=resolvers.registerzipfile(z,tree) statistics.stoptiming(instance) elseif trace_locating then report_zip("registering: unknown archive %a",archive) end elseif trace_locating then report_zip("registering: archive %a not found",archive) end end function resolvers.registerzipfile(z,tree) local files,filter={},"" if tree=="" then filter="^(.+)/(.-)$" else filter=format("^%s/(.+)/(.-)$",tree) end if trace_locating then report_zip("registering: using filter %a",filter) end local register,n=resolvers.registerfile,0 for i in z:files() do local path,name=match(i.filename,filter) if path then if name and name~='' then register(files,name,path) n=n+1 else end else register(files,i.filename,'') n=n+1 end end report_zip("registering: %s files registered",n) return files end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tre"] = package.loaded["data-tre"] or true -- original size: 2508, stripped down to: 2074 if not modules then modules={} end modules ['data-tre']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,gsub,format=string.find,string.gsub,string.format local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local report_trees=logs.reporter("resolvers","trees") local resolvers=resolvers local done,found,notfound={},{},resolvers.finders.notfound function resolvers.finders.tree(specification) local spec=specification.filename local fnd=found[spec] if fnd==nil then if spec~="" then local path,name=file.dirname(spec),file.basename(spec) if path=="" then path="." end local hash=done[path] if not hash then local pattern=path.."/*" hash=dir.glob(pattern) done[path]=hash end local pattern="/"..gsub(name,"([%.%-%+])","%%%1").."$" for k=1,#hash do local v=hash[k] if find(v,pattern) then found[spec]=v return v end end end fnd=notfound() found[spec]=fnd end return fnd end function resolvers.locators.tree(specification) local name=specification.filename local realname=resolvers.resolve(name) if realname and realname~='' and lfs.isdir(realname) then if trace_locating then report_trees("locator %a found",realname) end resolvers.appendhash('tree',name,false) elseif trace_locating then report_trees("locator %a not found",name) end end function resolvers.hashers.tree(specification) local name=specification.filename if trace_locating then report_trees("analysing %a",name) end resolvers.methodhandler("hashers",name) resolvers.generators.file(specification) end resolvers.concatinators.tree=resolvers.concatinators.file resolvers.generators.tree=resolvers.generators.file resolvers.openers.tree=resolvers.openers.file resolvers.loaders.tree=resolvers.loaders.file end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-sch"] = package.loaded["data-sch"] or true -- original size: 6202, stripped down to: 5149 if not modules then modules={} end modules ['data-sch']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local load=load local gsub,concat,format=string.gsub,table.concat,string.format local finders,openers,loaders=resolvers.finders,resolvers.openers,resolvers.loaders local trace_schemes=false trackers.register("resolvers.schemes",function(v) trace_schemes=v end) local report_schemes=logs.reporter("resolvers","schemes") local http=require("socket.http") local ltn12=require("ltn12") local resolvers=resolvers local schemes=resolvers.schemes or {} resolvers.schemes=schemes local cleaners={} schemes.cleaners=cleaners local threshold=24*60*60 directives.register("schemes.threshold",function(v) threshold=tonumber(v) or threshold end) function cleaners.none(specification) return specification.original end function cleaners.strip(specification) return (gsub(specification.original,"[^%a%d%.]+","-")) end function cleaners.md5(specification) return file.addsuffix(md5.hex(specification.original),file.suffix(specification.path)) end local cleaner=cleaners.strip directives.register("schemes.cleanmethod",function(v) cleaner=cleaners[v] or cleaners.strip end) function resolvers.schemes.cleanname(specification) local hash=cleaner(specification) if trace_schemes then report_schemes("hashing %a to %a",specification.original,hash) end return hash end local cached,loaded,reused,thresholds,handlers={},{},{},{},{} local function runcurl(name,cachename) local command="curl --silent --create-dirs --output "..cachename.." "..name os.spawn(command) end local function fetch(specification) local original=specification.original local scheme=specification.scheme local cleanname=schemes.cleanname(specification) local cachename=caches.setfirstwritablefile(cleanname,"schemes") if not cached[original] then statistics.starttiming(schemes) if not io.exists(cachename) or (os.difftime(os.time(),lfs.attributes(cachename).modification)>(thresholds[protocol] or threshold)) then cached[original]=cachename local handler=handlers[scheme] if handler then if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"built-in") end logs.flush() handler(specification,cachename) else if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl") end logs.flush() runcurl(original,cachename) end end if io.exists(cachename) then cached[original]=cachename if trace_schemes then report_schemes("using cached %a, protocol %a, cachename %a",original,scheme,cachename) end else cached[original]="" if trace_schemes then report_schemes("using missing %a, protocol %a",original,scheme) end end loaded[scheme]=loaded[scheme]+1 statistics.stoptiming(schemes) else if trace_schemes then report_schemes("reusing %a, protocol %a",original,scheme) end reused[scheme]=reused[scheme]+1 end return cached[original] end local function finder(specification,filetype) return resolvers.methodhandler("finders",fetch(specification),filetype) end local opener=openers.file local loader=loaders.file local function install(scheme,handler,newthreshold) handlers [scheme]=handler loaded [scheme]=0 reused [scheme]=0 finders [scheme]=finder openers [scheme]=opener loaders [scheme]=loader thresholds[scheme]=newthreshold or threshold end schemes.install=install local function http_handler(specification,cachename) local tempname=cachename..".tmp" local f=io.open(tempname,"wb") local status,message=http.request { url=specification.original, sink=ltn12.sink.file(f) } if not status then os.remove(tempname) else os.remove(cachename) os.rename(tempname,cachename) end return cachename end install('http',http_handler) install('https') install('ftp') statistics.register("scheme handling time",function() local l,r,nl,nr={},{},0,0 for k,v in table.sortedhash(loaded) do if v>0 then nl=nl+1 l[nl]=k..":"..v end end for k,v in table.sortedhash(reused) do if v>0 then nr=nr+1 r[nr]=k..":"..v end end local n=nl+nr if n>0 then l=nl>0 and concat(l) or "none" r=nr>0 and concat(r) or "none" return format("%s seconds, %s processed, threshold %s seconds, loaded: %s, reused: %s", statistics.elapsedtime(schemes),n,threshold,l,r) else return nil end end) local httprequest=http.request local toquery=url.toquery local function fetchstring(url,data) local q=data and toquery(data) if q then url=url.."?"..q end local reply=httprequest(url) return reply end schemes.fetchstring=fetchstring function schemes.fetchtable(url,data) local reply=fetchstring(url,data) if reply then local s=load("return "..reply) if s then return s() end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-lua"] = package.loaded["data-lua"] or true -- original size: 4237, stripped down to: 3177 if not modules then modules={} end modules ['data-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers,package=resolvers,package local gsub=string.gsub local concat=table.concat local addsuffix=file.addsuffix local P,S,Cs,lpegmatch=lpeg.P,lpeg.S,lpeg.Cs,lpeg.match local luasuffixes={ 'tex','lua' } local libsuffixes={ 'lib' } local luaformats={ 'TEXINPUTS','LUAINPUTS' } local libformats={ 'CLUAINPUTS' } local helpers=package.helpers or {} local methods=helpers.methods or {} trackers.register("resolvers.libraries",function(v) helpers.trace=v end) trackers.register("resolvers.locating",function(v) helpers.trace=v end) helpers.report=logs.reporter("resolvers","libraries") helpers.sequence={ "already loaded", "preload table", "lua variable format", "lib variable format", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } local pattern=Cs(P("!")^0/""*(P("/")*P(-1)/"/"+P("/")^1/"/"+1)^0) function helpers.cleanpath(path) return resolvers.resolve(lpegmatch(pattern,path)) end local loadedaslib=helpers.loadedaslib local getextraluapaths=package.extraluapaths local getextralibpaths=package.extralibpaths local registerpath=helpers.registerpath local lualibfile=helpers.lualibfile local luaformatpaths local libformatpaths local function getluaformatpaths() if not luaformatpaths then luaformatpaths={} for i=1,#luaformats do registerpath("lua format","lua",luaformatpaths,resolvers.expandedpathlistfromvariable(luaformats[i])) end end return luaformatpaths end local function getlibformatpaths() if not libformatpaths then libformatpaths={} for i=1,#libformats do registerpath("lib format","lib",libformatpaths,resolvers.expandedpathlistfromvariable(libformats[i])) end end return libformatpaths end local function loadedbyformat(name,rawname,suffixes,islib,what) local trace=helpers.trace local report=helpers.report for i=1,#suffixes do local format=suffixes[i] local resolved=resolvers.findfile(name,format) or "" if trace then report("%s format, identifying %a using format %a",what,name,format) end if resolved~="" then if trace then report("%s format, %a found on %a",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbyformat=loadedbyformat methods["lua variable format"]=function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lua",#getluaformatpaths()) end return loadedbyformat(addsuffix(lualibfile(name),"lua"),name,luasuffixes,false,"lua") end methods["lib variable format"]=function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lib",#getlibformatpaths()) end return loadedbyformat(addsuffix(lualibfile(name),os.libsuffix),name,libsuffixes,true,"lib") end resolvers.loadlualib=require end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-aux"] = package.loaded["data-aux"] or true -- original size: 2394, stripped down to: 2005 if not modules then modules={} end modules ['data-aux']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find=string.find local type,next=type,next local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end) local resolvers=resolvers local report_scripts=logs.reporter("resolvers","scripts") function resolvers.updatescript(oldname,newname) local scriptpath="scripts/context/lua" newname=file.addsuffix(newname,"lua") local oldscript=resolvers.cleanpath(oldname) if trace_locating then report_scripts("to be replaced old script %a",oldscript) end local newscripts=resolvers.findfiles(newname) or {} if #newscripts==0 then if trace_locating then report_scripts("unable to locate new script") end else for i=1,#newscripts do local newscript=resolvers.cleanpath(newscripts[i]) if trace_locating then report_scripts("checking new script %a",newscript) end if oldscript==newscript then if trace_locating then report_scripts("old and new script are the same") end elseif not find(newscript,scriptpath) then if trace_locating then report_scripts("new script should come from %a",scriptpath) end elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then if trace_locating then report_scripts("invalid new script name") end else local newdata=io.loaddata(newscript) if newdata then if trace_locating then report_scripts("old script content replaced by new content") end io.savedata(oldscript,newdata) break elseif trace_locating then report_scripts("unable to load new script") end end end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-tmf"] = package.loaded["data-tmf"] or true -- original size: 2600, stripped down to: 1627 if not modules then modules={} end modules ['data-tmf']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local resolvers=resolvers local report_tds=logs.reporter("resolvers","tds") function resolvers.load_tree(tree,resolve) if type(tree)=="string" and tree~="" then local getenv,setenv=resolvers.getenv,resolvers.setenv local texos="texmf-"..os.platform local oldroot=environment.texroot local newroot=file.collapsepath(tree) local newtree=file.join(newroot,texos) local newpath=file.join(newtree,"bin") if not lfs.isdir(newtree) then report_tds("no %a under tree %a",texos,tree) os.exit() end if not lfs.isdir(newpath) then report_tds("no '%s/bin' under tree %a",texos,tree) os.exit() end local texmfos=newtree environment.texroot=newroot environment.texos=texos environment.texmfos=texmfos if resolve then resolvers.luacnfspec=resolvers.resolve(resolvers.luacnfspec) end setenv('SELFAUTOPARENT',newroot) setenv('SELFAUTODIR',newtree) setenv('SELFAUTOLOC',newpath) setenv('TEXROOT',newroot) setenv('TEXOS',texos) setenv('TEXMFOS',texmfos) setenv('TEXMFCNF',resolvers.luacnfspec,true) setenv('PATH',newpath..io.pathseparator..getenv('PATH')) report_tds("changing from root %a to %a",oldroot,newroot) report_tds("prepending %a to PATH",newpath) report_tds("setting TEXMFCNF to %a",resolvers.luacnfspec) report_tds() end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true -- original size: 2654, stripped down to: 2301 if not modules then modules={} end modules ['data-lst']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local find,concat,upper,format=string.find,table.concat,string.upper,string.format local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs resolvers.listers=resolvers.listers or {} local resolvers=resolvers local report_lists=logs.reporter("resolvers","lists") local function tabstr(str) if type(str)=='table' then return concat(str," | ") else return str end end function resolvers.listers.variables(pattern) local instance=resolvers.instance local environment=instance.environment local variables=instance.variables local expansions=instance.expansions local pattern=upper(pattern or "") local configured={} local order=instance.order for i=1,#order do for k,v in next,order[i] do if v~=nil and configured[k]==nil then configured[k]=v end end end local env=fastcopy(environment) local var=fastcopy(variables) local exp=fastcopy(expansions) for key,value in sortedpairs(configured) do if key~="" and (pattern=="" or find(upper(key),pattern)) then report_lists(key) report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") report_lists(" var: %s",tabstr(configured[key]) or "unset") report_lists(" exp: %s",tabstr(expansions[key]) or "unset") report_lists(" res: %s",tabstr(resolvers.resolve(expansions[key])) or "unset") end end instance.environment=fastcopy(env) instance.variables=fastcopy(var) instance.expansions=fastcopy(exp) end local report_resolved=logs.reporter("system","resolved") function resolvers.listers.configurations() local configurations=resolvers.instance.specification for i=1,#configurations do report_resolved("file : %s",resolvers.resolve(configurations[i])) end report_resolved("") local list=resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.luacnfspec)) for i=1,#list do local li=resolvers.resolve(list[i]) if lfs.isdir(li) then report_resolved("path - %s",li) else report_resolved("path + %s",li) end end end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["util-lib"] = package.loaded["util-lib"] or true -- original size: 11136, stripped down to: 5549 if not modules then modules={} end modules ['util-lib']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local gsub,find=string.gsub,string.find local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles local loaded=package.loaded local report_swiglib=logs.reporter("swiglib") local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end) local done=false local function requireswiglib(required,version) local trace_swiglib=trace_swiglib or package.helpers.trace local library=loaded[required] if library==nil then local required_full=gsub(required,"%.","/") local required_path=pathpart(required_full) local required_base=nameonly(required_full) local required_name=required_base.."."..os.libsuffix local version=type(version)=="string" and version~="" and version or false local engine=environment.ownmain or false if trace_swiglib and not done then local list=resolvers.expandedpathlistfromvariable("lib") for i=1,#list do report_swiglib("tds path %i: %s",i,list[i]) end end local function found(locate,asked_library,how,...) if trace_swiglib then report_swiglib("checking %s: %a",how,asked_library) end return locate(asked_library,...) end local function check(locate,...) local found=nil if version then local asked_library=joinfile(required_path,version,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found=locate(asked_library,...) end if not found or found=="" then local asked_library=joinfile(required_path,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found=locate(asked_library,...) end return found and found~="" and found or false end local function attempt(checkpattern) if trace_swiglib then report_swiglib("checking tds lib paths strictly") end local found=findfile and check(findfile,"lib") if found and (not checkpattern or find(found,checkpattern)) then return found end if trace_swiglib then report_swiglib("checking tds lib paths with wildcard") end local asked_library=joinfile(required_path,".*",required_name) if trace_swiglib then report_swiglib("checking %s: %a","latest version",asked_library) end local list=findfiles(asked_library,"lib",true) if list and #list>0 then table.sort(list) local found=list[#list] if found and (not checkpattern or find(found,checkpattern)) then return found end end if trace_swiglib then report_swiglib("checking lib paths") end package.extralibpath(environment.ownpath) local paths=package.libpaths() for i=1,#paths do local found=check(lfs.isfile) if found and (not checkpattern or find(found,checkpattern)) then return found end end return false end local found_library=nil if engine then if trace_swiglib then report_swiglib("attemp 1, engine %a",engine) end found_library=attempt("/"..engine.."/") if not found_library then if trace_swiglib then report_swiglib("attemp 2, no engine",asked_library) end found_library=attempt() end else found_library=attempt() end if not found_library then if trace_swiglib then report_swiglib("not found: %a",required) end library=false else local path=pathpart(found_library) local base=nameonly(found_library) dir.push(path) if trace_swiglib then report_swiglib("found: %a",found_library) end local message=nil local opener="luaopen_"..required_base library,message=package.loadlib(found_library,opener) local libtype=type(library) if libtype=="function" then library=library() else report_swiglib("load error: %a returns %a, message %a",opener,libtype,message or "no message") library=false end dir.pop() end if not library then report_swiglib("unknown: %a",required) elseif trace_swiglib then report_swiglib("stored: %a",required) end loaded[required]=library else report_swiglib("reused: %a",required) end return library end local savedrequire=require function require(name,version) if find(name,"^swiglib%.") then return requireswiglib(name,version) else return savedrequire(name) end end local swiglibs={} function swiglib(name,version) local library=swiglibs[name] if not library then statistics.starttiming(swiglibs) if trace_swiglib then report_swiglib("loading %a",name) end library=requireswiglib("swiglib."..name,version) swiglibs[name]=library statistics.stoptiming(swiglibs) end return library end statistics.register("used swiglibs",function() if next(swiglibs) then return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs)) end end) end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-sta"] = package.loaded["luat-sta"] or true -- original size: 5703, stripped down to: 2507 if not modules then modules={} end modules ['luat-sta']={ version=1.001, author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local gmatch,match=string.gmatch,string.match local type=type states=states or {} local states=states states.data=states.data or {} local data=states.data states.hash=states.hash or {} local hash=states.hash states.tag=states.tag or "" states.filename=states.filename or "" function states.save(filename,tag) tag=tag or states.tag filename=file.addsuffix(filename or states.filename,'lus') io.savedata(filename, "-- generator : luat-sta.lua\n".."-- state tag : "..tag.."\n\n"..table.serialize(data[tag or states.tag] or {},true) ) end function states.load(filename,tag) states.filename=filename states.tag=tag or "whatever" states.filename=file.addsuffix(states.filename,'lus') data[states.tag],hash[states.tag]=(io.exists(filename) and dofile(filename)) or {},{} end local function set_by_tag(tag,key,value,default,persistent) local d,h=data[tag],hash[tag] if d then if type(d)=="table" then local dkey,hkey=key,key local pre,post=match(key,"(.+)%.([^%.]+)$") if pre and post then for k in gmatch(pre,"[^%.]+") do local dk=d[k] if not dk then dk={} d[k]=dk elseif type(dk)=="string" then break end d=dk end dkey,hkey=post,key end if value==nil then value=default elseif value==false then elseif persistent then value=value or d[dkey] or default else value=value or default end d[dkey],h[hkey]=value,value elseif type(d)=="string" then data[tag],hash[tag]=value,value end end end local function get_by_tag(tag,key,default) local h=hash[tag] if h and h[key] then return h[key] else local d=data[tag] if d then for k in gmatch(key,"[^%.]+") do local dk=d[k] if dk~=nil then d=dk else return default end end if d==false then return false else return d or default end end end end states.set_by_tag=set_by_tag states.get_by_tag=get_by_tag function states.set(key,value,default,persistent) set_by_tag(states.tag,key,value,default,persistent) end function states.get(key,default) return get_by_tag(states.tag,key,default) end end -- of closure do -- create closure to overcome 200 locals limit package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true -- original size: 5951, stripped down to: 4922 if not modules then modules={} end modules ['luat-fmt']={ version=1.001, comment="companion to mtxrun", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format=string.format local concat=table.concat local quoted=string.quoted local luasuffixes=utilities.lua.suffixes local report_format=logs.reporter("resolvers","formats") local function primaryflags() local trackers=environment.argument("trackers") local directives=environment.argument("directives") local flags={} if trackers and trackers~="" then flags={ "--trackers="..quoted(trackers) } end if directives and directives~="" then flags={ "--directives="..quoted(directives) } end if environment.argument("jit") then flags={ "--jiton" } end return concat(flags," ") end function environment.make_format(name) local engine=environment.ownmain or "luatex" local olddir=dir.current() local path=caches.getwritablepath("formats",engine) or "" if path~="" then lfs.chdir(path) end report_format("using format path %a",dir.current()) local texsourcename=file.addsuffix(name,"mkiv") local fulltexsourcename=resolvers.findfile(texsourcename,"tex") or "" if fulltexsourcename=="" then texsourcename=file.addsuffix(name,"tex") fulltexsourcename=resolvers.findfile(texsourcename,"tex") or "" end if fulltexsourcename=="" then report_format("no tex source file with name %a (mkiv or tex)",name) lfs.chdir(olddir) return else report_format("using tex source file %a",fulltexsourcename) end local texsourcepath=dir.expandname(file.dirname(fulltexsourcename)) local specificationname=file.replacesuffix(fulltexsourcename,"lus") local fullspecificationname=resolvers.findfile(specificationname,"tex") or "" if fullspecificationname=="" then specificationname=file.join(texsourcepath,"context.lus") fullspecificationname=resolvers.findfile(specificationname,"tex") or "" end if fullspecificationname=="" then report_format("unknown stub specification %a",specificationname) lfs.chdir(olddir) return end local specificationpath=file.dirname(fullspecificationname) local usedluastub=nil local usedlualibs=dofile(fullspecificationname) if type(usedlualibs)=="string" then usedluastub=file.join(file.dirname(fullspecificationname),usedlualibs) elseif type(usedlualibs)=="table" then report_format("using stub specification %a",fullspecificationname) local texbasename=file.basename(name) local luastubname=file.addsuffix(texbasename,luasuffixes.lua) local lucstubname=file.addsuffix(texbasename,luasuffixes.luc) report_format("creating initialization file %a",luastubname) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then report_format("using compiled initialization file %a",lucstubname) usedluastub=lucstubname else report_format("using uncompiled initialization file %a",luastubname) usedluastub=luastubname end else report_format("invalid stub specification %a",fullspecificationname) lfs.chdir(olddir) return end local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\") report_format("running command: %s\n",command) os.spawn(command) local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem" local mp=dir.glob(pattern) if mp then for i=1,#mp do local name=mp[i] report_format("removing related mplib format %a",file.basename(name)) os.remove(name) end end lfs.chdir(olddir) end function environment.run_format(name,data,more) if name and name~="" then local engine=environment.ownmain or "luatex" local barename=file.removesuffix(name) local fmtname=caches.getfirstreadablefile(file.addsuffix(barename,"fmt"),"formats",engine) if fmtname=="" then fmtname=resolvers.findfile(file.addsuffix(barename,"fmt")) or "" end fmtname=resolvers.cleanpath(fmtname) if fmtname=="" then report_format("no format with name %a",name) else local barename=file.removesuffix(name) local luaname=file.addsuffix(barename,"luc") if not lfs.isfile(luaname) then luaname=file.addsuffix(barename,"lua") end if not lfs.isfile(luaname) then report_format("using format name %a",fmtname) report_format("no luc/lua file with name %a",barename) else local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "") report_format("running command: %s",command) os.spawn(command) end end end end end -- of closure -- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - -- original bytes : 670212 -- stripped bytes : 245255 -- end library merge -- We need this hack till luatex is fixed. -- -- for k,v in pairs(arg) do print(k,v) end if arg and (arg[0] == 'luatex' or arg[0] == 'luatex.exe') and arg[1] == "--luaonly" then arg[-1]=arg[0] arg[0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end arg[#arg]=nil arg[#arg]=nil end -- End of hack. local format, gsub, gmatch, match, find = string.format, string.gsub, string.gmatch, string.match, string.find local concat = table.concat local ownname = environment and environment.ownname or arg[0] or 'mtxrun.lua' local ownpath = gsub(match(ownname,"^(.+)[\\/].-$") or ".","\\","/") local owntree = environment and environment.ownpath or ownpath local ownlibs = { -- order can be made better 'l-lua.lua', 'l-package.lua', 'l-lpeg.lua', 'l-function.lua', 'l-string.lua', 'l-table.lua', 'l-io.lua', 'l-number.lua', 'l-set.lua', 'l-os.lua', 'l-file.lua', 'l-gzip.lua', 'l-md5.lua', 'l-url.lua', 'l-dir.lua', 'l-boolean.lua', 'l-unicode.lua', 'l-math.lua', 'util-str.lua', -- code might move to l-string 'util-tab.lua', 'util-sto.lua', 'util-prs.lua', 'util-fmt.lua', 'trac-set.lua', 'trac-log.lua', 'trac-inf.lua', -- was before trac-set 'trac-pro.lua', -- not really needed 'util-lua.lua', -- indeed here? 'util-deb.lua', 'util-mrg.lua', 'util-tpl.lua', 'util-env.lua', 'luat-env.lua', -- can come before inf (as in mkiv) 'lxml-tab.lua', 'lxml-lpt.lua', -- 'lxml-ent.lua', 'lxml-mis.lua', 'lxml-aux.lua', 'lxml-xml.lua', 'trac-xml.lua', 'data-ini.lua', 'data-exp.lua', 'data-env.lua', 'data-tmp.lua', 'data-met.lua', 'data-res.lua', 'data-pre.lua', 'data-inp.lua', 'data-out.lua', 'data-fil.lua', 'data-con.lua', 'data-use.lua', -- 'data-tex.lua', -- 'data-bin.lua', 'data-zip.lua', 'data-tre.lua', 'data-sch.lua', 'data-lua.lua', 'data-aux.lua', -- updater 'data-tmf.lua', 'data-lst.lua', 'util-lib.lua', -- swiglib 'luat-sta.lua', 'luat-fmt.lua', } local ownlist = { '.', ownpath , ownpath .. "/../sources", -- HH's development path owntree .. "/../../texmf-local/tex/context/base", owntree .. "/../../texmf-context/tex/context/base", owntree .. "/../../texmf-dist/tex/context/base", owntree .. "/../../texmf/tex/context/base", owntree .. "/../../../texmf-local/tex/context/base", owntree .. "/../../../texmf-context/tex/context/base", owntree .. "/../../../texmf-dist/tex/context/base", owntree .. "/../../../texmf/tex/context/base", } if ownpath == "." then table.remove(ownlist,1) end own = { name = ownname, path = ownpath, tree = owntree, list = ownlist, libs = ownlibs, } local function locate_libs() for l=1,#ownlibs do local lib = ownlibs[l] for p =1,#ownlist do local pth = ownlist[p] local filename = pth .. "/" .. lib local found = lfs.isfile(filename) if found then package.path = package.path .. ";" .. pth .. "/?.lua" -- in case l-* does a require return pth end end end end local function load_libs() local found = locate_libs() if found then for l=1,#ownlibs do local filename = found .. "/" .. ownlibs[l] local codeblob = loadfile(filename) if codeblob then codeblob() end end else resolvers = nil end end if not resolvers then load_libs() end if not resolvers then print("") print("Mtxrun is unable to start up due to lack of libraries. You may") print("try to run 'lua mtxrun.lua --selfmerge' in the path where this") print("script is located (normally under ..../scripts/context/lua) which") print("will make this script library independent.") os.exit() end -- verbosity local e_verbose = environment.arguments["verbose"] if e_verbose then trackers.enable("resolvers.locating") end -- some common flags (also passed through environment) local e_silent = environment.argument("silent") local e_noconsole = environment.argument("noconsole") local e_trackers = environment.argument("trackers") local e_directives = environment.argument("directives") local e_experiments = environment.argument("experiments") if e_silent == true then e_silent = "*" end if type(e_silent) == "string" then if type(e_directives) == "string" then e_directives = format("%s,logs.blocked={%s}",e_directives,e_silent) else e_directives = format("logs.blocked={%s}",e_silent) end end if e_noconsole then if type(e_directives) == "string" then e_directives = format("%s,logs.target=file",e_directives) else e_directives = format("logs.target=file") end end if e_trackers then trackers .enable(e_trackers) end if e_directives then directives .enable(e_directives) end if e_experiments then experiments.enable(e_experiments) end if not environment.trackers then environment.trackers = e_trackers end if not environment.directives then environment.directives = e_directives end if not environment.experiments then environment.experiments = e_experiments end -- local instance = resolvers.reset() local helpinfo = [[ mtxrun ConTeXt TDS Runner Tool 1.31 run an mtx script (lua prefered method) (), no script gives list run a script or program (texmfstart method) () resolve prefixed arguments run internally (using preloaded libs) run script using built in libraries (same as ) locate given filename in database (default) or system ( ) use texmf tree cf. env texmfstart_tree or texmfstarttree use given texmf tree (default file: setuptex.tmf) use given (tmf) environment file go to given path before execution only execute when given file has changed (md checksum) only execute when given file has changed (time stamp) create stubs for (context related) scripts remove stubs (context related) scripts paths where stubs wil be written create windows (mswin) stubs create unix (linux) stubs give a bit more info enable given trackers format or backend launch editor with found file launch files like manuals, assumes os support () run a script and time its run regenerate databases if needed (handy when used to run context in an editor) use kpse as fallback (when no mkiv and cache installed, often slower) force using kpse (handy when no mkiv and cache installed but less functionality) show supported prefixes generate file database show configuration variables show configuration order show (known) directives show (known) trackers show (known) experiments expand complex variable expand variable (resolve paths) expand variable (resolve references) show path expansion of ... report value of variable report file location report path of file filter variables ]] local application = logs.application { name = "mtxrun", banner = "ConTeXt TDS Runner Tool 1.31", helpinfo = helpinfo, } local report = application.report messages = messages or { } -- for the moment runners = runners or { } -- global (might become local) runners.applications = { ["lua"] = "luatex --luaonly", ["luc"] = "luatex --luaonly", ["pl"] = "perl", ["py"] = "python", ["rb"] = "ruby", } runners.suffixes = { 'rb', 'lua', 'py', 'pl' } runners.registered = { texexec = { 'texexec.rb', false }, -- context mkii runner (only tool not to be luafied) texutil = { 'texutil.rb', true }, -- old perl based index sorter for mkii (old versions need it) texfont = { 'texfont.pl', true }, -- perl script that makes mkii font metric files texfind = { 'texfind.pl', false }, -- perltk based tex searching tool, mostly used at pragma texshow = { 'texshow.pl', false }, -- perltk based context help system, will be luafied -- texwork = { 'texwork.pl', false }, -- perltk based editing environment, only used at pragma makempy = { 'makempy.pl', true }, mptopdf = { 'mptopdf.pl', true }, pstopdf = { 'pstopdf.rb', true }, -- converts ps (and some more) images, does some cleaning (replaced) -- examplex = { 'examplex.rb', false }, concheck = { 'concheck.rb', false }, runtools = { 'runtools.rb', true }, textools = { 'textools.rb', true }, tmftools = { 'tmftools.rb', true }, ctxtools = { 'ctxtools.rb', true }, rlxtools = { 'rlxtools.rb', true }, pdftools = { 'pdftools.rb', true }, mpstools = { 'mpstools.rb', true }, -- exatools = { 'exatools.rb', true }, xmltools = { 'xmltools.rb', true }, -- luatools = { 'luatools.lua', true }, mtxtools = { 'mtxtools.rb', true }, pdftrimwhite = { 'pdftrimwhite.pl', false }, } runners.launchers = { windows = { }, unix = { }, } -- like runners.libpath("framework"): looks on script's subpath function runners.libpath(...) package.prepend_libpath(file.dirname(environment.ownscript),...) package.prepend_libpath(file.dirname(environment.ownname) ,...) end function runners.prepare() local checkname = environment.argument("ifchanged") if type(checkname) == "string" and checkname ~= "" then local oldchecksum = file.loadchecksum(checkname) local newchecksum = file.checksum(checkname) if oldchecksum == newchecksum then if e_verbose then report("file '%s' is unchanged",checkname) end return "skip" elseif e_verbose then report("file '%s' is changed, processing started",checkname) end file.savechecksum(checkname) end local touchname = environment.argument("iftouched") if type(touchname) == "string" and touchname ~= "" then local oldname, newname = string.splitup(touchname, ",") if oldname and newname and oldname ~= "" and newname ~= "" then if not file.needs_updating(oldname,newname) then if e_verbose then report("file '%s' and '%s' have same age",oldname,newname) end return "skip" elseif e_verbose then report("file '%s' is older than '%s'",oldname,newname) end end end local runpath = environment.argument("path") if type(runpath) == "string" and not lfs.chdir(runpath) then report("unable to change to path '%s'",runpath) return "error" end runners.prepare = function() end return "run" end function runners.execute_script(fullname,internal,nosplit) local noquote = environment.argument("noquotes") if fullname and fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then local path, name, suffix = file.splitname(fullname) local result = "" if path ~= "" then result = fullname elseif name then name = gsub(name,"^int[%a]*:",function() internal = true return "" end ) name = gsub(name,"^script:","") if suffix == "" and runners.registered[name] and runners.registered[name][1] then name = runners.registered[name][1] suffix = file.suffix(name) end if suffix == "" then -- loop over known suffixes for _,s in pairs(runners.suffixes) do result = resolvers.findfile(name .. "." .. s, 'texmfscripts') if result ~= "" then break end end elseif runners.applications[suffix] then result = resolvers.findfile(name, 'texmfscripts') else -- maybe look on path result = resolvers.findfile(name, 'other text files') end end if result and result ~= "" then if not no_split then local before, after = environment.splitarguments(fullname) -- already done environment.arguments_before, environment.arguments_after = before, after end if internal then arg = { } for _,v in pairs(environment.arguments_after) do arg[#arg+1] = v end environment.ownscript = result dofile(result) else local texmfcnf = resolvers.getenv("TEXMFCNF") if not texmfcnf or texmfcnf == "" then texmfcnf = resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.resolve(resolvers.luacnfspec))) resolvers.setenv("TEXMFCNF",table.concat(texmfcnf,";")) -- for running texexec etc (after tl change to texmf-dist) end local binary = runners.applications[file.suffix(result)] result = string.quoted(string.unquoted(result)) -- if string.match(result,' ') and not string.match(result,"^\".*\"$") then -- result = '"' .. result .. '"' -- end if binary and binary ~= "" then result = binary .. " " .. result end local command = result .. " " .. environment.reconstructcommandline(environment.arguments_after,noquote) if e_verbose then report() report("executing: %s",command) report() report() io.flush() end -- no os.exec because otherwise we get the wrong return value local code = os.execute(command) -- maybe spawn if code == 0 then return true else if binary then binary = file.addsuffix(binary,os.binsuffix) for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do if lfs.isfile(file.join(p,binary)) then return false end end report() report("This script needs '%s' which seems not to be installed.",binary) report() end return false end end end end end return false end function runners.execute_program(fullname) local noquote = environment.argument("noquotes") if fullname and fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then local before, after = environment.splitarguments(fullname) for k=1,#after do after[k] = resolvers.resolve(after[k]) end environment.initializearguments(after) fullname = gsub(fullname,"^bin:","") local command = fullname .. " " .. (environment.reconstructcommandline(after or "",noquote) or "") report() report("executing: %s",command) report() report() io.flush() local code = os.exec(command) -- (fullname,unpack(after)) does not work / maybe spawn return code == 0 end end return false end -- the --usekpse flag will fallback (not default) on kpse (hm, we can better update mtx-stubs) local windows_stub = '@echo off\013\010setlocal\013\010set ownpath=%%~dp0%%\013\010texlua "%%ownpath%%mtxrun.lua" --usekpse --execute %s %%*\013\010endlocal\013\010' local unix_stub = '#!/bin/sh\010mtxrun --usekpse --execute %s \"$@\"\010' function runners.handle_stubs(create) local stubpath = environment.argument('stubpath') or '.' -- 'auto' no longer subpathssupported local windows = environment.argument('windows') or environment.argument('mswin') or false local unix = environment.argument('unix') or environment.argument('linux') or false if not windows and not unix then if os.platform == "unix" then unix = true else windows = true end end for _,v in pairs(runners.registered) do local name, doit = v[1], v[2] if doit then local base = gsub(file.basename(name), "%.(.-)$", "") if create then if windows then io.savedata(file.join(stubpath,base..".bat"),format(windows_stub,name)) report("windows stub for '%s' created",base) end if unix then io.savedata(file.join(stubpath,base),format(unix_stub,name)) report("unix stub for '%s' created",base) end else if windows and (os.remove(file.join(stubpath,base..'.bat')) or os.remove(file.join(stubpath,base..'.cmd'))) then report("windows stub for '%s' removed", base) end if unix and (os.remove(file.join(stubpath,base)) or os.remove(file.join(stubpath,base..'.sh'))) then report("unix stub for '%s' removed",base) end end end end end function runners.resolve_string(filename) if filename and filename ~= "" then runners.report_location(resolvers.resolve(filename)) end end -- differs from texmfstart where locate appends .com .exe .bat ... todo function runners.locate_file(filename) -- was given file but only searches in tree if filename and filename ~= "" then if environment.argument("first") then runners.report_location(resolvers.findfile(filename)) -- resolvers.dowithfilesandreport(resolvers.findfile,filename) elseif environment.argument("all") then local result, status = resolvers.findfiles(filename) if status and environment.argument("detail") then runners.report_location(status) else runners.report_location(result) end else runners.report_location(resolvers.findgivenfile(filename)) -- resolvers.dowithfilesandreport(resolvers.findgivenfile,filename) end end end function runners.locate_platform() runners.report_location(os.platform) end function runners.report_location(result) if type(result) == "table" then for i=1,#result do if i > 1 then io.write("\n") end io.write(result[i]) end else io.write(result) end end function runners.edit_script(filename) -- we assume that gvim is present on most systems (todo: also in cnf file) local editor = os.getenv("MTXRUN_EDITOR") or os.getenv("TEXMFSTART_EDITOR") or os.getenv("EDITOR") or 'gvim' local rest = resolvers.resolve(filename) if rest ~= "" then local command = editor .. " " .. rest if e_verbose then report() report("starting editor: %s",command) report() report() end os.launch(command) end end function runners.save_script_session(filename, list) local t = { } for i=1,#list do local key = list[i] t[key] = environment.arguments[key] end io.savedata(filename,table.serialize(t,true)) end function runners.load_script_session(filename) if lfs.isfile(filename) then local t = io.loaddata(filename) if t then t = loadstring(t) if t then t = t() end for key, value in pairs(t) do environment.arguments[key] = value end end end end function resolvers.launch(str) -- maybe we also need to test on mtxrun.launcher.suffix environment -- variable or on windows consult the assoc and ftype vars and such local launchers = runners.launchers[os.platform] if launchers then local suffix = file.suffix(str) if suffix then local runner = launchers[suffix] if runner then str = runner .. " " .. str end end end os.launch(str) end function runners.launch_file(filename) trackers.enable("resolvers.locating") local allresults = environment.arguments["all"] local pattern = environment.arguments["pattern"] if not pattern or pattern == "" then pattern = filename end if not pattern or pattern == "" then report("provide name or --pattern=") else local t = resolvers.findfiles(pattern,nil,allresults) if not t or #t == 0 then t = resolvers.findfiles("*/" .. pattern,nil,allresults) end if not t or #t == 0 then t = resolvers.findfiles("*/" .. pattern .. "*",nil,allresults) end if t and #t > 0 then if allresults then for _, v in pairs(t) do report("launching %s", v) resolvers.launch(v) end else report("launching %s", t[1]) resolvers.launch(t[1]) end else report("no match for %s", pattern) end end end local mtxprefixes = { { "^mtx%-", "mtx-" }, { "^mtx%-t%-", "mtx-t-" }, } function runners.find_mtx_script(filename) local function found(name) local path = file.dirname(name) if path and path ~= "" then return false else local fullname = own and own.path and file.join(own.path,name) return io.exists(fullname) and fullname end end filename = file.addsuffix(filename,"lua") local basename = file.removesuffix(file.basename(filename)) local suffix = file.suffix(filename) -- qualified path, raw name local fullname = file.is_qualified_path(filename) and io.exists(filename) and filename if fullname and fullname ~= "" then return fullname end -- current path, raw name fullname = "./" .. filename fullname = io.exists(fullname) and fullname if fullname and fullname ~= "" then return fullname end -- mtx- prefix checking for i=1,#mtxprefixes do local mtxprefix = mtxprefixes[i] mtxprefix = find(filename,mtxprefix[1]) and "" or mtxprefix[2] -- context namespace, mtx- fullname = mtxprefix .. filename fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end -- context namespace, mtx-s fullname = mtxprefix .. basename .. "s" .. "." .. suffix fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end -- context namespace, mtx- fullname = mtxprefix .. gsub(basename,"s$","") .. "." .. suffix fullname = found(fullname) or resolvers.findfile(fullname) if fullname and fullname ~= "" then return fullname end end -- context namespace, just fullname = resolvers.findfile(filename) return fullname end function runners.register_arguments(...) local arguments = environment.arguments_after local passedon = { ... } for i=#passedon,1,-1 do local pi = passedon[i] if pi then table.insert(arguments,1,pi) end end end function runners.execute_ctx_script(filename,...) runners.register_arguments(...) local arguments = environment.arguments_after local fullname = runners.find_mtx_script(filename) or "" if file.suffix(fullname) == "cld" then -- handy in editors where we force --autopdf report("running cld script: %s",filename) table.insert(arguments,1,fullname) table.insert(arguments,"--autopdf") fullname = runners.find_mtx_script("context") or "" end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() -- fullname = runners.find_mtx_script(filename) or "" end -- that should do it if fullname ~= "" then local state = runners.prepare() if state == 'error' then return false elseif state == 'skip' then return true elseif state == "run" then -- load and save ... kind of undocumented arg = { } for _,v in pairs(arguments) do arg[#arg+1] = resolvers.resolve(v) end environment.initializearguments(arg) local loadname = environment.arguments['load'] if loadname then if type(loadname) ~= "string" then loadname = file.basename(fullname) end loadname = file.replacesuffix(loadname,"cfg") runners.load_script_session(loadname) end filename = environment.files[1] if e_verbose then report("using script: %s\n",fullname) end environment.ownscript = fullname dofile(fullname) local savename = environment.arguments['save'] if savename then local save_list = runners.save_list if save_list and next(save_list) then if type(savename) ~= "string" then savename = file.basename(fullname) end savename = file.replacesuffix(savename,"cfg") runners.save_script_session(savename,save_list) end end return true end else if filename == "" or filename == "help" then local context = resolvers.findfile("mtx-context.lua") trackers.enable("resolvers.locating") if context ~= "" then local result = dir.glob((gsub(context,"mtx%-context","mtx-*"))) -- () needed local valid = { } table.sort(result) for i=1,#result do local scriptname = result[i] local scriptbase = match(scriptname,".*mtx%-([^%-]-)%.lua") if scriptbase then local data = io.loaddata(scriptname) local banner, version = match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)") if banner then valid[#valid+1] = { scriptbase, version, banner } end end end if #valid > 0 then application.identify() report("no script name given, known scripts:") report() for k=1,#valid do local v = valid[k] report("%-12s %4s %s",v[1],v[2],v[3]) end end else report("no script name given") end else filename = file.addsuffix(filename,"lua") if file.is_qualified_path(filename) then report("unknown script '%s'",filename) else report("unknown script '%s' or 'mtx-%s'",filename,filename) end end return false end end function runners.prefixes() application.identify() report() report(concat(resolvers.allprefixes(true)," ")) end function runners.timedrun(filename) -- just for me if filename and filename ~= "" then runners.timed(function() os.execute(filename) end) end end function runners.timed(action) statistics.timed(action) end function runners.associate(filename) os.launch(filename) end function runners.gethelp(filename) local url = environment.argument("url") if url and url ~= "" then local command = string.gsub(environment.argument("command") or "unknown","^%s*\\*(.-)%s*$","%1") url = utilities.templates.replace(url,{ command = command }) os.launch(url) else report("no --url given") end end -- this is a bit dirty ... first we store the first filename and next we -- split the arguments so that we only see the ones meant for this script -- ... later we will use the second half local filename = environment.files[1] or "" local ok = true local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) instance.lsrmode = environment.argument("lsr") or false -- maybe the unset has to go to this level local is_mkii_stub = runners.registered[file.removesuffix(file.basename(filename))] local e_argument = environment.argument if e_argument("usekpse") or e_argument("forcekpse") or is_mkii_stub then resolvers.load_tree(e_argument('tree'),true) -- force resolve of TEXMFCNF os.setenv("engine","") os.setenv("progname","") local remapper = { otf = "opentype fonts", ttf = "truetype fonts", ttc = "truetype fonts", pfb = "type1 fonts", other = "other text files", } local progname = e_argument("progname") or 'context' local function kpse_initialized() texconfig.kpse_init = true local t = os.clock() local k = kpse.original.new("luatex",progname) local dummy = k:find_file("mtxrun.lua") -- so that we're initialized report("kpse fallback with progname '%s' initialized in %s seconds",progname,os.clock()-t) kpse_initialized = function() return k end return k end local findfile = resolvers.findfile local showpath = resolvers.showpath if e_argument("forcekpse") then function resolvers.findfile(name,kind) return (kpse_initialized():find_file(resolvers.cleanpath(name),(kind ~= "" and (remapper[kind] or kind)) or "tex") or "") or "" end function resolvers.showpath(name) return (kpse_initialized():show_path(name)) or "" end elseif e_argument("usekpse") or is_mkii_stub then resolvers.load() function resolvers.findfile(name,kind) local found = findfile(name,kind) or "" if found ~= "" then return found else return (kpse_initialized():find_file(resolvers.cleanpath(name),(kind ~= "" and (remapper[kind] or kind)) or "tex") or "") or "" end end function resolvers.showpath(name) local found = showpath(name) or "" if found ~= "" then return found else return (kpse_initialized():show_path(name)) or "" end end end function runners.loadbase() end else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") instance.renewcache = true trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") end end end resolvers.load_tree(e_argument('tree'),e_argument("resolve")) end if e_argument("script") or e_argument("scripts") then -- run a script by loading it (using libs), pass args runners.loadbase() if is_mkii_stub then ok = runners.execute_script(filename,false,true) else ok = runners.execute_ctx_script(filename) end elseif e_argument("selfmerge") then -- embed used libraries runners.loadbase() local found = locate_libs() if found then utilities.merger.selfmerge(own.name,own.libs,{ found }) end elseif e_argument("selfclean") then -- remove embedded libraries runners.loadbase() utilities.merger.selfclean(own.name) elseif e_argument("selfupdate") then runners.loadbase() trackers.enable("resolvers.locating") resolvers.updatescript(own.name,"mtxrun") elseif e_argument("ctxlua") or e_argument("internal") then -- run a script by loading it (using libs) runners.loadbase() ok = runners.execute_script(filename,true) elseif e_argument("execute") then -- execute script runners.loadbase() ok = runners.execute_script(filename) elseif e_argument("direct") then -- equals bin: runners.loadbase() ok = runners.execute_program(filename) elseif e_argument("edit") then -- edit file runners.loadbase() runners.edit_script(filename) elseif e_argument("launch") then runners.loadbase() runners.launch_file(filename) elseif e_argument("associate") then runners.associate(filename) elseif e_argument("gethelp") then runners.gethelp() elseif e_argument("makestubs") then -- make stubs (depricated) runners.handle_stubs(true) elseif e_argument("removestubs") then -- remove stub (depricated) runners.loadbase() runners.handle_stubs(false) elseif e_argument("resolve") then -- resolve string runners.loadbase() runners.resolve_string(filename) elseif e_argument("locate") then -- locate file (only database) runners.loadbase() runners.locate_file(filename) elseif e_argument("platform") or e_argument("show-platform") then -- locate platform runners.loadbase() runners.locate_platform() elseif e_argument("prefixes") then runners.loadbase() runners.prefixes() elseif e_argument("timedrun") then -- locate platform runners.loadbase() runners.timedrun(filename) elseif e_argument("variables") or e_argument("show-variables") or e_argument("expansions") or e_argument("show-expansions") then -- luatools: runners.execute_ctx_script("mtx-base","--expansions",filename) resolvers.load("nofiles") resolvers.listers.variables(e_argument("pattern")) elseif e_argument("configurations") or e_argument("show-configurations") then -- luatools: runners.execute_ctx_script("mtx-base","--configurations",filename) resolvers.load("nofiles") resolvers.listers.configurations() elseif e_argument("find-file") then -- luatools: runners.execute_ctx_script("mtx-base","--find-file",filename) resolvers.load() local e_all = e_argument("all") local e_pattern = e_argument("pattern") local e_format = e_argument("format") local finder = e_all and resolvers.findfiles or resolvers.findfile if not e_pattern then runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(finder,environment.files,e_format) elseif type(e_pattern) == "string" then resolvers.dowithfilesandreport(finder,{ e_pattern },e_format) end elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() local path = resolvers.findpath(filename, instance.my_format) if e_verbose then report(path) else print(path) end elseif e_argument("expand-braces") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-braces",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expandbraces, environment.files) elseif e_argument("expand-path") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-path",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expandpath, environment.files) elseif e_argument("expand-var") or e_argument("expand-variable") then -- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.expansion, environment.files) elseif e_argument("show-path") or e_argument("path-value") then -- luatools: runners.execute_ctx_script("mtx-base","--show-path",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.showpath, environment.files) elseif e_argument("var-value") or e_argument("show-value") then -- luatools: runners.execute_ctx_script("mtx-base","--show-value",filename) resolvers.load("nofiles") runners.register_arguments(filename) environment.initializearguments(environment.arguments_after) resolvers.dowithfilesandreport(resolvers.variable,environment.files) elseif e_argument("format-path") then -- luatools: runners.execute_ctx_script("mtx-base","--format-path",filename) resolvers.load() report(caches.getwritablepath("format")) elseif e_argument("pattern") then -- luatools runners.execute_ctx_script("mtx-base","--pattern='" .. e_argument("pattern") .. "'",filename) elseif e_argument("generate") then -- luatools if filename and filename ~= "" then resolvers.load("nofiles") trackers.enable("resolvers.locating") resolvers.renew(filename) else instance.renewcache = true trackers.enable("resolvers.locating") resolvers.load() end e_verbose = true elseif e_argument("make") or e_argument("ini") or e_argument("compile") then -- luatools: runners.execute_ctx_script("mtx-base","--make",filename) resolvers.load() trackers.enable("resolvers.locating") environment.make_format(filename) elseif e_argument("run") then -- luatools runners.execute_ctx_script("mtx-base","--run",filename) elseif e_argument("fmt") then -- luatools runners.execute_ctx_script("mtx-base","--fmt",filename) elseif e_argument("help") and filename=='base' then -- luatools runners.execute_ctx_script("mtx-base","--help") elseif e_argument("version") then application.version() elseif e_argument("directives") then directives.show() elseif e_argument("trackers") then trackers.show() elseif e_argument("experiments") then experiments.show() elseif e_argument("exporthelp") then runners.loadbase() application.export(e_argument("exporthelp"),filename) elseif e_argument("help") or filename=='help' or filename == "" then application.help() elseif find(filename,"^bin:") then runners.loadbase() ok = runners.execute_program(filename) elseif is_mkii_stub then -- execute mkii script runners.loadbase() ok = runners.execute_script(filename,false,true) elseif false then runners.loadbase() ok = runners.execute_ctx_script(filename) if not ok then ok = runners.execute_script(filename) end elseif environment.files[1] == 'texmfcnf.lua' then -- so that we don't need to load mtx-base resolvers.load("nofiles") resolvers.listers.configurations() else runners.loadbase() runners.execute_ctx_script("mtx-base",filename) end if e_verbose then report() report("runtime: %0.3f seconds",os.runtime()) end if os.type ~= "windows" then texio.write("\n") -- is this still valid? end if ok == false then ok = 1 elseif ok == true or ok == nil then ok = 0 end -- os.exit(ok,true) -- true forces a cleanup in 5.2+ os.exit(ok) -- true forces a cleanup in 5.2+ but reports a wrong number then context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-texworks.lua0000644000175000017500000000725212130411274025627 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-texworks'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local helpinfo = [[ mtx-texworks TeXworks Startup Script 1.00 [ start texworks report what will happen ]] local application = logs.application { name = "mtx-texworks", banner = "TeXworks Startup Script 1.00", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.texworks = scripts.texworks or { } local texworkspaths = { "completion", "configuration", "dictionaries", "translations", "scripts", "templates", "TUG" } local texworkssignal = "texworks-context.rme" local texworkininame = "texworks.ini" function scripts.texworks.start(indeed) local workname = (os.type == "windows" and "texworks.exe") or "texworks" local fullname = nil local binpaths = file.splitpath(os.getenv("PATH")) or file.splitpath(os.getenv("path")) local usedsignal = texworkssignal local datapath = resolvers.findfile(usedsignal,"other text files") or "" if datapath ~= "" then datapath = file.dirname(datapath) -- data if datapath == "" then datapath = resolvers.cleanpath(lfs.currentdir()) end else usedsignal = texworkininame datapath = resolvers.findfile(usedsignal,"other text files") or "" if datapath == "" then usedsignal = string.lower(usedsignal) datapath = resolvers.findfile(usedsignal,"other text files") or "" end if datapath ~= "" and lfs.isfile(datapath) then datapath = file.dirname(datapath) -- TUG datapath = file.dirname(datapath) -- data if datapath == "" then datapath = resolvers.cleanpath(lfs.currentdir()) end end end if datapath == "" then report("invalid datapath, maybe you need to regenerate the file database") return false end if not binpaths or #binpaths == 0 then report("invalid binpath") return false end for i=1,#binpaths do local p = file.join(binpaths[i],workname) if lfs.isfile(p) and lfs.attributes(p,"size") > 10000 then -- avoind stub fullname = p break end end if not fullname then report("unable to locate %s",workname) return false end for i=1,#texworkspaths do dir.makedirs(file.join(datapath,texworkspaths[i])) end os.setenv("TW_INIPATH",datapath) os.setenv("TW_LIBPATH",datapath) if not indeed or environment.argument("verbose") then report("used signal: %s", usedsignal) report("data path : %s", datapath) report("full name : %s", fullname) report("set paths : TW_INIPATH TW_LIBPATH") end if indeed then os.launch(fullname) end end if environment.argument("start") then scripts.texworks.start(true) elseif environment.argument("test") then scripts.texworks.start() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-profile.lua0000644000175000017500000001517012130411274025377 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-profile'] = { version = 1.000, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: also line number -- todo: sort runtime as option local match, format, find = string.match, string.format, string.find local helpinfo = [[ mtx-profile ConTeXt MkIV LuaTeX Profiler 1.00 analyze lua calls analyze tex calls ]] local application = logs.application { name = "mtx-cache", banner = "ConTeXt MkIV LuaTeX Profiler 1.00", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } scripts.profiler = scripts.profiler or { } local timethreshold = 0 local callthreshold = 2500 local countthreshold = 2500 local functiontemplate = "%12s %03.4f %9i %s" local calltemplate = "%9i %s" local totaltemplate = "%i internal calls, %i function calls taking %3.4f seconds" local thresholdtemplate = "thresholds: %i internal calls, %i function calls, %i seconds" function scripts.profiler.analyze(filename) local f = io.open(filename) if f then local times, counts, calls = { }, { }, { } local totalruntime, totalcount, totalcalls = 0, 0, 0 for line in f:lines() do local stacklevel, filename, functionname, linenumber, currentline, localtime, totaltime = line:match("^(%d+)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)") if not filename then -- next elseif filename == "=[C]" then if not functionname:find("^%(") then calls[functionname] = (calls[functionname] or 0) + 1 end else local filename = filename:match("^@(.*)$") if filename then local fi = times[filename] if not fi then fi = { } times[filename] = fi end fi[functionname] = (fi[functionname] or 0) + tonumber(localtime) counts[functionname] = (counts[functionname] or 0) + 1 end end end f:close() print("") local loaded = { } local sorted = table.sortedkeys(times) for i=1,#sorted do local filename = sorted[i] local functions = times[filename] local sorted = table.sortedkeys(functions) for i=1,#sorted do local functionname = sorted[i] local totaltime = functions[functionname] local count = counts[functionname] totalcount = totalcount + count if totaltime > timethreshold or count > countthreshold then totalruntime = totalruntime + totaltime local functionfile, somenumber = functionname:match("^@(.+):(.-)$") if functionfile then local number = tonumber(somenumber) if number then if not loaded[functionfile] then loaded[functionfile] = string.splitlines(io.loaddata(functionfile) or "") end functionname = loaded[functionfile][number] or functionname functionname = functionname:gsub("^%s*","") functionname = functionname:gsub("%s*%-%-.*$","") functionname = number .. ": " .. functionname end end filename = file.basename(filename) print(functiontemplate:format(filename,totaltime,count,functionname)) end end end print("") local sorted = table.sortedkeys(calls) for i=1,#sorted do local call = sorted[i] local n = calls[call] totalcalls = totalcalls + n if n > callthreshold then print(calltemplate:format(n,call)) end end print("") print(totaltemplate:format(totalcalls,totalcount,totalruntime)) print("") print(thresholdtemplate:format(callthreshold,countthreshold,timethreshold)) end end function scripts.profiler.x_analyze(filename) local f = io.open(filename) local calls = { } local lines = 0 if f then while true do local line = f:read() if line then lines = lines + 1 local c = match(line,"\\([a-zA-Z%!%?@]+) *%->") if c then local cc = calls[c] if not cc then calls[c] = 1 else calls[c] = cc + 1 end end else break end end f:close() local noc = 0 local criterium = 100 for name, n in next, calls do if n > criterium then if find(name,"^@@[a-z][a-z]") then -- parameter elseif find(name,"^[cvserft]%!") then -- variables and constants elseif find(name,"^%?%?[a-z][a-z]$") then -- prefix elseif find(name,"^%!%!") then -- reserved elseif find(name,"^@.+@$") then -- weird else noc = noc + n print(format("%6i: %s",n,name)) end end end print("") print(format("number of lines: %s",lines)) print(format("number of calls: %s",noc)) print(format("criterium calls: %s",criterium)) end end --~ scripts.profiler.analyze("t:/manuals/mk/mk-fonts-profile.lua") --~ scripts.profiler.analyze("t:/manuals/mk/mk-introduction-profile.lua") if environment.argument("analyze") then scripts.profiler.analyze(environment.files[1] or "luatex-profile.log") elseif environment.argument("trace") then scripts.profiler.analyze(environment.files[1] or "temp.log") elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-package.lua0000644000175000017500000000571712130411274025340 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-package'] = { version = 1.002, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, gsub, gmatch = string.format, string.gsub, string.gmatch local helpinfo = [[ mtx-package Distribution Related Goodies 0.10 merge 'loadmodule' into merge file ]] local application = logs.application { name = "mtx-package", banner = "Distribution Related Goodies 0.10", helpinfo = helpinfo, } local report = application.report scripts = scripts or { } messages = messages or { } scripts.package = scripts.package or { } function scripts.package.merge_luatex_files(name) local oldname = resolvers.findfile(name) or "" oldname = file.replacesuffix(oldname,"lua") if oldname == "" then report("missing %q",name) else local newname = file.removesuffix(oldname) .. "-merged.lua" local data = io.loaddata(oldname) or "" if data == "" then report("missing %q",newname) else report("loading %q",oldname) local collected = { } collected[#collected+1] = format("-- merged file : %s\n",newname) collected[#collected+1] = format("-- parent file : %s\n",oldname) collected[#collected+1] = format("-- merge date : %s\n",os.date()) -- loadmodule can have extra arguments for lib in gmatch(data,"loadmodule *%([\'\"](.-)[\'\"]") do if file.basename(lib) ~= file.basename(newname) then local fullname = resolvers.findfile(lib) or "" if fullname == "" then report("missing %q",lib) else report("fetching %q",fullname) local data = io.loaddata(fullname) collected[#collected+1] = "\ndo -- begin closure to overcome local limits and interference\n\n" collected[#collected+1] = utilities.merger.compact(data) collected[#collected+1] = "\nend -- closure\n" end end end report("saving %q",newname) io.savedata(newname,table.concat(collected)) end end end if environment.argument("merge") then scripts.package.merge_luatex_files(environment.files[1] or "") elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/scripts/context/lua/mtx-convert.lua0000644000175000017500000001340312130411274025414 0ustar norbertnorbertif not modules then modules = { } end modules ['mtx-convert'] = { version = 1.001, comment = "companion to mtxrun.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: eps and svg local helpinfo = [[ mtx-convert ConTeXT Graphic Conversion Helpers 0.10 convert all graphics on path original graphics path converted graphics path watch folders force conversion (even if older) time between sweeps ]] local application = logs.application { name = "mtx-convert", banner = "ConTeXT Graphic Conversion Helpers 0.10", helpinfo = helpinfo, } local format, find = string.format, string.find local concat = table.concat local report = application.report scripts = scripts or { } scripts.convert = scripts.convert or { } local convert = scripts.convert convert.converters = convert.converters or { } local converters = convert.converters local gsprogram = os.type == "windows" and "gswin32c" or "gs" local gstemplate_eps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEPSCrop -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit" local gstemplate_ps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit" function converters.eps(oldname,newname) return format(gstemplate_eps,gsprogram,newname,oldname) end function converters.ps(oldname,newname) return format(gstemplate_ps,gsprogram,newname,oldname) end local improgram = "convert" local imtemplate = { low = "%s -quality 0 -compress zip %s pdf:%s", medium = "%s -quality 75 -compress zip %s pdf:%s", high = "%s -quality 100 -compress zip %s pdf:%s", } function converters.jpg(oldname,newname) local ea = environment.arguments local quality = (ea.high and 'high') or (ea.medium and 'medium') or (ea.low and 'low') or 'high' return format(imtemplate[quality],improgram,oldname,newname) end converters.gif = converters.jpg converters.tif = converters.jpg converters.tiff = converters.jpg converters.png = converters.jpg function converters.convertgraphic(kind,oldname,newname) if converters[kind] then -- extra test local tmpname = file.replacesuffix(newname,"tmp") local command = converters[kind](oldname,tmpname) report("command: %s",command) io.flush() os.spawn(command) os.remove(newname) os.rename(tmpname,newname) if lfs.attributes(newname,"size") == 0 then os.remove(newname) end end end function converters.convertpath(inputpath,outputpath) inputpath = inputpath or "." outputpath = outputpath or "." for name in lfs.dir(inputpath) do local suffix = file.suffix(name) if find(name,"%.$") then -- skip . and .. elseif converters[suffix] then local oldname = file.join(inputpath,name) local newname = file.join(outputpath,file.replacesuffix(name,"pdf")) local et = lfs.attributes(oldname,"modification") local pt = lfs.attributes(newname,"modification") if not pt or et > pt then dir.mkdirs(outputpath) converters.convertgraphic(suffix,oldname,newname) end elseif lfs.isdir(inputpath .. "/".. name) then converters.convertpath(inputpath .. "/".. name,outputpath .. "/".. name) end end end function converters.convertfile(oldname) local suffix = file.suffix(oldname) if converters[suffix] then local newname = file.replacesuffix(oldname,"pdf") if oldname == newname then -- todo: downsample, crop etc elseif environment.argument("force") then converters.convertgraphic(suffix,oldname,newname) else local et = lfs.attributes(oldname,"modification") local pt = lfs.attributes(newname,"modification") if not pt or et > pt then converters.convertgraphic(suffix,oldname,newname) end end end end if environment.ownscript then -- stand alone else report(application.banner) return convert end convert.delay = 5 * 60 -- 5 minutes function convert.convertall() local watch = environment.arguments.watch or false local delay = environment.arguments.delay or convert.delay local input = environment.arguments.inputpath or "." local output = environment.arguments.outputpath or "." while true do converters.convertpath(input, output) if watch then os.sleep(delay) else break end end end function convert.convertgiven() local files = environment.files for i=1,#files do converters.convertfile(files[i]) end end if environment.arguments.convertall then convert.convertall() elseif environment.files[1] then convert.convertgiven() elseif environment.argument("exporthelp") then application.export(environment.argument("exporthelp"),environment.files[1]) else application.help() end context-2013.05.28.20130704/texmf-dist/tex/0000755000175000017500000000000012165205647017303 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/generic/0000755000175000017500000000000012165205647020717 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/generic/context/0000755000175000017500000000000012165205647022403 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/0000755000175000017500000000000012162137706023702 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-math.tex0000644000175000017500000022155512161703335026663 0ustar norbertnorbert%D \module %D [ file=luatex-math, %D version=2013.04.29, %D title=\LUATEX\ Support Macros, %D subtitle=An exmaple of math, %D author=Hans Hagen, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D This module is in no way a complete plain math implementation. I made this file %D because I needed it for a tutorial for (mostly) plain \TEX\ users. There are %D several ways to support math in \LUATEX, and this is just one of them. It was the %D quickest hack I could come up with and it stays somewhat close to the traditional %D approach (and thereby far from the \CONTEXT\ way). This file is mainly meant for %D Boguslaw Jackowski. % we provide a remap feature \directlua{dofile(kpse.find_file('luatex-math.lua'))} % a bunch of fonts: \font\tenrm = file:lmroman10-regular.otf:+liga;+kern;+tlig;+trep at 10pt \font\sevenrm = file:lmroman7-regular.otf:+liga;+kern;+tlig;+trep at 7pt \font\fiverm = file:lmroman5-regular.otf:+liga;+kern;+tlig;+trep at 5pt \font\tentt = file:lmmono10-regular.otf at 10pt \font\tensl = file:lmromanslant10-regular.otf:+liga;+kern;+tlig;+trep at 10pt \font\tenit = file:lmroman10-italic.otf:+liga;+kern;+tlig;+trep at 10pt \font\tenbi = file:lmroman10-bolditalic.otf:+liga;+kern;+tlig;+trep at 10pt \let \teni = \relax \let \seveni = \relax \let \fivei = \relax \let \tensy = \relax \let \sevensy = \relax \let \fivesy = \relax \let \tenex = \relax \let \tenbf = \relax \let \sevenbf = \relax \let \fivebf = \relax \tenrm \font\mathfonttextupright = file:latinmodern-math.otf:ssty=0;fixmath=yes at 10pt \font\mathfontscriptupright = file:latinmodern-math.otf:ssty=1;fixmath=yes at 7pt \font\mathfontscriptscriptupright = file:latinmodern-math.otf:ssty=2;fixmath=yes at 5pt \textfont 0 = \mathfonttextupright \scriptfont 0 = \mathfontscriptupright \scriptscriptfont 0 = \mathfontscriptscriptupright \newtoks\everymathrm \newtoks\everymathmit \newtoks\everymathcal \newtoks\everymathit \newtoks\everymathsl \newtoks\everymathbf \newtoks\everymathbi \newtoks\everymathtt \def\rm{\fam0\relax\the\everymathmrm\relax\tenrm\relax} \def\it{\fam0\relax\the\everymathit \relax\tenit\relax} \def\sl{\fam0\relax\the\everymathsl \relax\tensl\relax} \def\bf{\fam0\relax\the\everymathbf \relax\tenbf\relax} \def\bi{\fam0\relax\the\everymathbi \relax\tenbi\relax} \def\tt{\fam0\relax\the\everymathtt \relax\tentt\relax} \let\mit \relax % use names or \Uchar or define a vector \let\cal \relax % idem, i'm not in the mood for this now \let\oldstyle\relax % no longer misuse of math mode % tex is fast enough for this kind of assignments: \everymathrm {% \Umathcode"0041="0"0"0041% \Umathcode"0042="0"0"0042% \Umathcode"0043="0"0"0043% \Umathcode"0044="0"0"0044% \Umathcode"0045="0"0"0045% \Umathcode"0046="0"0"0046% \Umathcode"0047="0"0"0047% \Umathcode"0048="0"0"0048% \Umathcode"0049="0"0"0049% \Umathcode"004A="0"0"004A% \Umathcode"004B="0"0"004B% \Umathcode"004C="0"0"004C% \Umathcode"004D="0"0"004D% \Umathcode"004E="0"0"004E% \Umathcode"004F="0"0"004F% \Umathcode"0050="0"0"0050% \Umathcode"0051="0"0"0051% \Umathcode"0052="0"0"0052% \Umathcode"0053="0"0"0053% \Umathcode"0054="0"0"0054% \Umathcode"0055="0"0"0055% \Umathcode"0056="0"0"0056% \Umathcode"0057="0"0"0057% \Umathcode"0058="0"0"0058% \Umathcode"0059="0"0"0059% \Umathcode"005A="0"0"005A% \Umathcode"0061="0"0"0061% \Umathcode"0062="0"0"0062% \Umathcode"0063="0"0"0063% \Umathcode"0064="0"0"0064% \Umathcode"0065="0"0"0065% \Umathcode"0066="0"0"0066% \Umathcode"0067="0"0"0067% \Umathcode"0068="0"0"0068% \Umathcode"0069="0"0"0069% \Umathcode"006A="0"0"006A% \Umathcode"006B="0"0"006B% \Umathcode"006C="0"0"006C% \Umathcode"006D="0"0"006D% \Umathcode"006E="0"0"006E% \Umathcode"006F="0"0"006F% \Umathcode"0070="0"0"0070% \Umathcode"0071="0"0"0071% \Umathcode"0072="0"0"0072% \Umathcode"0073="0"0"0073% \Umathcode"0074="0"0"0074% \Umathcode"0075="0"0"0075% \Umathcode"0076="0"0"0076% \Umathcode"0077="0"0"0077% \Umathcode"0078="0"0"0078% \Umathcode"0079="0"0"0079% \Umathcode"007A="0"0"007A% \Umathcode"0391="0"0"0391% \Umathcode"0392="0"0"0392% \Umathcode"0393="0"0"0393% \Umathcode"0394="0"0"0394% \Umathcode"0395="0"0"0395% \Umathcode"0396="0"0"0396% \Umathcode"0397="0"0"0397% \Umathcode"0398="0"0"0398% \Umathcode"0399="0"0"0399% \Umathcode"039A="0"0"039A% \Umathcode"039B="0"0"039B% \Umathcode"039C="0"0"039C% \Umathcode"039D="0"0"039D% \Umathcode"039E="0"0"039E% \Umathcode"039F="0"0"039F% \Umathcode"03A0="0"0"03A0% \Umathcode"03A1="0"0"03A1% \Umathcode"03A3="0"0"03A3% \Umathcode"03A4="0"0"03A4% \Umathcode"03A5="0"0"03A5% \Umathcode"03A6="0"0"03A6% \Umathcode"03A7="0"0"03A7% \Umathcode"03A8="0"0"03A8% \Umathcode"03A9="0"0"03A9% \Umathcode"03B1="0"0"03B1% \Umathcode"03B2="0"0"03B2% \Umathcode"03B3="0"0"03B3% \Umathcode"03B4="0"0"03B4% \Umathcode"03B5="0"0"03B5% \Umathcode"03B6="0"0"03B6% \Umathcode"03B7="0"0"03B7% \Umathcode"03B8="0"0"03B8% \Umathcode"03B9="0"0"03B9% \Umathcode"03BA="0"0"03BA% \Umathcode"03BB="0"0"03BB% \Umathcode"03BC="0"0"03BC% \Umathcode"03BD="0"0"03BD% \Umathcode"03BE="0"0"03BE% \Umathcode"03BF="0"0"03BF% \Umathcode"03C0="0"0"03C0% \Umathcode"03C1="0"0"03C1% \Umathcode"03C2="0"0"03C2% \Umathcode"03C3="0"0"03C3% \Umathcode"03C4="0"0"03C4% \Umathcode"03C5="0"0"03C5% \Umathcode"03C6="0"0"03C6% \Umathcode"03C7="0"0"03C7% \Umathcode"03C8="0"0"03C8% \Umathcode"03C9="0"0"03C9% \Umathcode"03D1="0"0"03D1% \Umathcode"03D5="0"0"03D5% \Umathcode"03D6="0"0"03D6% \Umathcode"03F0="0"0"03F0% \Umathcode"03F1="0"0"03F1% \Umathcode"03F4="0"0"03F4% \Umathcode"03F5="0"0"03F5% \Umathcode"2202="0"0"2202% \Umathcode"2207="0"0"2207% \relax } \everymathmit {% % not done } \everymathcal {% % not done } \everymathit {% \Umathcode"0041="0"0"1D434% \Umathcode"0042="0"0"1D435% \Umathcode"0043="0"0"1D436% \Umathcode"0044="0"0"1D437% \Umathcode"0045="0"0"1D438% \Umathcode"0046="0"0"1D439% \Umathcode"0047="0"0"1D43A% \Umathcode"0048="0"0"1D43B% \Umathcode"0049="0"0"1D43C% \Umathcode"004A="0"0"1D43D% \Umathcode"004B="0"0"1D43E% \Umathcode"004C="0"0"1D43F% \Umathcode"004D="0"0"1D440% \Umathcode"004E="0"0"1D441% \Umathcode"004F="0"0"1D442% \Umathcode"0050="0"0"1D443% \Umathcode"0051="0"0"1D444% \Umathcode"0052="0"0"1D445% \Umathcode"0053="0"0"1D446% \Umathcode"0054="0"0"1D447% \Umathcode"0055="0"0"1D448% \Umathcode"0056="0"0"1D449% \Umathcode"0057="0"0"1D44A% \Umathcode"0058="0"0"1D44B% \Umathcode"0059="0"0"1D44C% \Umathcode"005A="0"0"1D44D% \Umathcode"0061="0"0"1D44E% \Umathcode"0062="0"0"1D44F% \Umathcode"0063="0"0"1D450% \Umathcode"0064="0"0"1D451% \Umathcode"0065="0"0"1D452% \Umathcode"0066="0"0"1D453% \Umathcode"0067="0"0"1D454% \Umathcode"0068="0"0"0210E% \Umathcode"0069="0"0"1D456% \Umathcode"006A="0"0"1D457% \Umathcode"006B="0"0"1D458% \Umathcode"006C="0"0"1D459% \Umathcode"006D="0"0"1D45A% \Umathcode"006E="0"0"1D45B% \Umathcode"006F="0"0"1D45C% \Umathcode"0070="0"0"1D45D% \Umathcode"0071="0"0"1D45E% \Umathcode"0072="0"0"1D45F% \Umathcode"0073="0"0"1D460% \Umathcode"0074="0"0"1D461% \Umathcode"0075="0"0"1D462% \Umathcode"0076="0"0"1D463% \Umathcode"0077="0"0"1D464% \Umathcode"0078="0"0"1D465% \Umathcode"0079="0"0"1D466% \Umathcode"007A="0"0"1D467% \Umathcode"0391="0"0"1D6E2% \Umathcode"0392="0"0"1D6E3% \Umathcode"0393="0"0"1D6E4% \Umathcode"0394="0"0"1D6E5% \Umathcode"0395="0"0"1D6E6% \Umathcode"0396="0"0"1D6E7% \Umathcode"0397="0"0"1D6E8% \Umathcode"0398="0"0"1D6E9% \Umathcode"0399="0"0"1D6EA% \Umathcode"039A="0"0"1D6EB% \Umathcode"039B="0"0"1D6EC% \Umathcode"039C="0"0"1D6ED% \Umathcode"039D="0"0"1D6EE% \Umathcode"039E="0"0"1D6EF% \Umathcode"039F="0"0"1D6F0% \Umathcode"03A0="0"0"1D6F1% \Umathcode"03A1="0"0"1D6F2% \Umathcode"03A3="0"0"1D6F4% \Umathcode"03A4="0"0"1D6F5% \Umathcode"03A5="0"0"1D6F6% \Umathcode"03A6="0"0"1D6F7% \Umathcode"03A7="0"0"1D6F8% \Umathcode"03A8="0"0"1D6F9% \Umathcode"03A9="0"0"1D6FA% \Umathcode"03B1="0"0"1D6FC% \Umathcode"03B2="0"0"1D6FD% \Umathcode"03B3="0"0"1D6FE% \Umathcode"03B4="0"0"1D6FF% \Umathcode"03B5="0"0"1D700% \Umathcode"03B6="0"0"1D701% \Umathcode"03B7="0"0"1D702% \Umathcode"03B8="0"0"1D703% \Umathcode"03B9="0"0"1D704% \Umathcode"03BA="0"0"1D705% \Umathcode"03BB="0"0"1D706% \Umathcode"03BC="0"0"1D707% \Umathcode"03BD="0"0"1D708% \Umathcode"03BE="0"0"1D709% \Umathcode"03BF="0"0"1D70A% \Umathcode"03C0="0"0"1D70B% \Umathcode"03C1="0"0"1D70C% \Umathcode"03C2="0"0"1D70D% \Umathcode"03C3="0"0"1D70E% \Umathcode"03C4="0"0"1D70F% \Umathcode"03C5="0"0"1D710% \Umathcode"03C6="0"0"1D711% \Umathcode"03C7="0"0"1D712% \Umathcode"03C8="0"0"1D713% \Umathcode"03C9="0"0"1D714% \Umathcode"03D1="0"0"1D717% \Umathcode"03D5="0"0"1D719% \Umathcode"03D6="0"0"1D71B% \Umathcode"03F0="0"0"1D718% \Umathcode"03F1="0"0"1D71A% \Umathcode"03F4="0"0"1D6F3% \Umathcode"03F5="0"0"1D716% \Umathcode"2202="0"0"1D715% \Umathcode"2207="0"0"1D6FB% \relax } \everymathsl {% \the\everymathit } \everymathbf {% \Umathcode"0030="0"0"1D7CE% \Umathcode"0031="0"0"1D7CF% \Umathcode"0032="0"0"1D7D0% \Umathcode"0033="0"0"1D7D1% \Umathcode"0034="0"0"1D7D2% \Umathcode"0035="0"0"1D7D3% \Umathcode"0036="0"0"1D7D4% \Umathcode"0037="0"0"1D7D5% \Umathcode"0038="0"0"1D7D6% \Umathcode"0039="0"0"1D7D7% \Umathcode"0041="0"0"1D400% \Umathcode"0042="0"0"1D401% \Umathcode"0043="0"0"1D402% \Umathcode"0044="0"0"1D403% \Umathcode"0045="0"0"1D404% \Umathcode"0046="0"0"1D405% \Umathcode"0047="0"0"1D406% \Umathcode"0048="0"0"1D407% \Umathcode"0049="0"0"1D408% \Umathcode"004A="0"0"1D409% \Umathcode"004B="0"0"1D40A% \Umathcode"004C="0"0"1D40B% \Umathcode"004D="0"0"1D40C% \Umathcode"004E="0"0"1D40D% \Umathcode"004F="0"0"1D40E% \Umathcode"0050="0"0"1D40F% \Umathcode"0051="0"0"1D410% \Umathcode"0052="0"0"1D411% \Umathcode"0053="0"0"1D412% \Umathcode"0054="0"0"1D413% \Umathcode"0055="0"0"1D414% \Umathcode"0056="0"0"1D415% \Umathcode"0057="0"0"1D416% \Umathcode"0058="0"0"1D417% \Umathcode"0059="0"0"1D418% \Umathcode"005A="0"0"1D419% \Umathcode"0061="0"0"1D41A% \Umathcode"0062="0"0"1D41B% \Umathcode"0063="0"0"1D41C% \Umathcode"0064="0"0"1D41D% \Umathcode"0065="0"0"1D41E% \Umathcode"0066="0"0"1D41F% \Umathcode"0067="0"0"1D420% \Umathcode"0068="0"0"1D421% \Umathcode"0069="0"0"1D422% \Umathcode"006A="0"0"1D423% \Umathcode"006B="0"0"1D424% \Umathcode"006C="0"0"1D425% \Umathcode"006D="0"0"1D426% \Umathcode"006E="0"0"1D427% \Umathcode"006F="0"0"1D428% \Umathcode"0070="0"0"1D429% \Umathcode"0071="0"0"1D42A% \Umathcode"0072="0"0"1D42B% \Umathcode"0073="0"0"1D42C% \Umathcode"0074="0"0"1D42D% \Umathcode"0075="0"0"1D42E% \Umathcode"0076="0"0"1D42F% \Umathcode"0077="0"0"1D430% \Umathcode"0078="0"0"1D431% \Umathcode"0079="0"0"1D432% \Umathcode"007A="0"0"1D433% \Umathcode"0391="0"0"1D6A8% \Umathcode"0392="0"0"1D6A9% \Umathcode"0393="0"0"1D6AA% \Umathcode"0394="0"0"1D6AB% \Umathcode"0395="0"0"1D6AC% \Umathcode"0396="0"0"1D6AD% \Umathcode"0397="0"0"1D6AE% \Umathcode"0398="0"0"1D6AF% \Umathcode"0399="0"0"1D6B0% \Umathcode"039A="0"0"1D6B1% \Umathcode"039B="0"0"1D6B2% \Umathcode"039C="0"0"1D6B3% \Umathcode"039D="0"0"1D6B4% \Umathcode"039E="0"0"1D6B5% \Umathcode"039F="0"0"1D6B6% \Umathcode"03A0="0"0"1D6B7% \Umathcode"03A1="0"0"1D6B8% \Umathcode"03A3="0"0"1D6BA% \Umathcode"03A4="0"0"1D6BB% \Umathcode"03A5="0"0"1D6BC% \Umathcode"03A6="0"0"1D6BD% \Umathcode"03A7="0"0"1D6BE% \Umathcode"03A8="0"0"1D6BF% \Umathcode"03A9="0"0"1D6C0% \Umathcode"03B1="0"0"1D6C2% \Umathcode"03B2="0"0"1D6C3% \Umathcode"03B3="0"0"1D6C4% \Umathcode"03B4="0"0"1D6C5% \Umathcode"03B5="0"0"1D6C6% \Umathcode"03B6="0"0"1D6C7% \Umathcode"03B7="0"0"1D6C8% \Umathcode"03B8="0"0"1D6C9% \Umathcode"03B9="0"0"1D6CA% \Umathcode"03BA="0"0"1D6CB% \Umathcode"03BB="0"0"1D6CC% \Umathcode"03BC="0"0"1D6CD% \Umathcode"03BD="0"0"1D6CE% \Umathcode"03BE="0"0"1D6CF% \Umathcode"03BF="0"0"1D6D0% \Umathcode"03C0="0"0"1D6D1% \Umathcode"03C1="0"0"1D6D2% \Umathcode"03C2="0"0"1D6D3% \Umathcode"03C3="0"0"1D6D4% \Umathcode"03C4="0"0"1D6D5% \Umathcode"03C5="0"0"1D6D6% \Umathcode"03C6="0"0"1D6D7% \Umathcode"03C7="0"0"1D6D8% \Umathcode"03C8="0"0"1D6D9% \Umathcode"03C9="0"0"1D6DA% \Umathcode"03D1="0"0"1D6DD% \Umathcode"03D5="0"0"1D6DF% \Umathcode"03D6="0"0"1D6E1% \Umathcode"03F0="0"0"1D6DE% \Umathcode"03F1="0"0"1D6E0% \Umathcode"03F4="0"0"1D6B9% \Umathcode"03F5="0"0"1D6DC% \Umathcode"2202="0"0"1D6DB% \Umathcode"2207="0"0"1D6C1% \relax } \everymathbi {% \Umathcode"0030="0"0"1D7CE% \Umathcode"0031="0"0"1D7CF% \Umathcode"0032="0"0"1D7D0% \Umathcode"0033="0"0"1D7D1% \Umathcode"0034="0"0"1D7D2% \Umathcode"0035="0"0"1D7D3% \Umathcode"0036="0"0"1D7D4% \Umathcode"0037="0"0"1D7D5% \Umathcode"0038="0"0"1D7D6% \Umathcode"0039="0"0"1D7D7% \Umathcode"0041="0"0"1D468% \Umathcode"0042="0"0"1D469% \Umathcode"0043="0"0"1D46A% \Umathcode"0044="0"0"1D46B% \Umathcode"0045="0"0"1D46C% \Umathcode"0046="0"0"1D46D% \Umathcode"0047="0"0"1D46E% \Umathcode"0048="0"0"1D46F% \Umathcode"0049="0"0"1D470% \Umathcode"004A="0"0"1D471% \Umathcode"004B="0"0"1D472% \Umathcode"004C="0"0"1D473% \Umathcode"004D="0"0"1D474% \Umathcode"004E="0"0"1D475% \Umathcode"004F="0"0"1D476% \Umathcode"0050="0"0"1D477% \Umathcode"0051="0"0"1D478% \Umathcode"0052="0"0"1D479% \Umathcode"0053="0"0"1D47A% \Umathcode"0054="0"0"1D47B% \Umathcode"0055="0"0"1D47C% \Umathcode"0056="0"0"1D47D% \Umathcode"0057="0"0"1D47E% \Umathcode"0058="0"0"1D47F% \Umathcode"0059="0"0"1D480% \Umathcode"005A="0"0"1D481% \Umathcode"0061="0"0"1D482% \Umathcode"0062="0"0"1D483% \Umathcode"0063="0"0"1D484% \Umathcode"0064="0"0"1D485% \Umathcode"0065="0"0"1D486% \Umathcode"0066="0"0"1D487% \Umathcode"0067="0"0"1D488% \Umathcode"0068="0"0"1D489% \Umathcode"0069="0"0"1D48A% \Umathcode"006A="0"0"1D48B% \Umathcode"006B="0"0"1D48C% \Umathcode"006C="0"0"1D48D% \Umathcode"006D="0"0"1D48E% \Umathcode"006E="0"0"1D48F% \Umathcode"006F="0"0"1D490% \Umathcode"0070="0"0"1D491% \Umathcode"0071="0"0"1D492% \Umathcode"0072="0"0"1D493% \Umathcode"0073="0"0"1D494% \Umathcode"0074="0"0"1D495% \Umathcode"0075="0"0"1D496% \Umathcode"0076="0"0"1D497% \Umathcode"0077="0"0"1D498% \Umathcode"0078="0"0"1D499% \Umathcode"0079="0"0"1D49A% \Umathcode"007A="0"0"1D49B% \Umathcode"0391="0"0"1D71C% \Umathcode"0392="0"0"1D71D% \Umathcode"0393="0"0"1D71E% \Umathcode"0394="0"0"1D71F% \Umathcode"0395="0"0"1D720% \Umathcode"0396="0"0"1D721% \Umathcode"0397="0"0"1D722% \Umathcode"0398="0"0"1D723% \Umathcode"0399="0"0"1D724% \Umathcode"039A="0"0"1D725% \Umathcode"039B="0"0"1D726% \Umathcode"039C="0"0"1D727% \Umathcode"039D="0"0"1D728% \Umathcode"039E="0"0"1D729% \Umathcode"039F="0"0"1D72A% \Umathcode"03A0="0"0"1D72B% \Umathcode"03A1="0"0"1D72C% \Umathcode"03A3="0"0"1D72E% \Umathcode"03A4="0"0"1D72F% \Umathcode"03A5="0"0"1D730% \Umathcode"03A6="0"0"1D731% \Umathcode"03A7="0"0"1D732% \Umathcode"03A8="0"0"1D733% \Umathcode"03A9="0"0"1D734% \Umathcode"03B1="0"0"1D736% \Umathcode"03B2="0"0"1D737% \Umathcode"03B3="0"0"1D738% \Umathcode"03B4="0"0"1D739% \Umathcode"03B5="0"0"1D73A% \Umathcode"03B6="0"0"1D73B% \Umathcode"03B7="0"0"1D73C% \Umathcode"03B8="0"0"1D73D% \Umathcode"03B9="0"0"1D73E% \Umathcode"03BA="0"0"1D73F% \Umathcode"03BB="0"0"1D740% \Umathcode"03BC="0"0"1D741% \Umathcode"03BD="0"0"1D742% \Umathcode"03BE="0"0"1D743% \Umathcode"03BF="0"0"1D744% \Umathcode"03C0="0"0"1D745% \Umathcode"03C1="0"0"1D746% \Umathcode"03C2="0"0"1D747% \Umathcode"03C3="0"0"1D748% \Umathcode"03C4="0"0"1D749% \Umathcode"03C5="0"0"1D74A% \Umathcode"03C6="0"0"1D74B% \Umathcode"03C7="0"0"1D74C% \Umathcode"03C8="0"0"1D74D% \Umathcode"03C9="0"0"1D74E% \Umathcode"03D1="0"0"1D751% \Umathcode"03D5="0"0"1D753% \Umathcode"03D6="0"0"1D755% \Umathcode"03F0="0"0"1D752% \Umathcode"03F1="0"0"1D754% \Umathcode"03F4="0"0"1D72D% \Umathcode"03F5="0"0"1D750% \Umathcode"2202="0"0"1D74F% \Umathcode"2207="0"0"1D735% \relax } \everymathtt {% % not done } \Udelcode "00021 = "0 "00021 \Udelcode "00028 = "0 "00028 \Udelcode "00028 = "0 "00028 \Udelcode "00029 = "0 "00029 \Udelcode "00029 = "0 "00029 \Udelcode "0002F = "0 "0002F \Udelcode "0002F = "0 "0002F \Udelcode "0002F = "0 "02044 \Udelcode "0003F = "0 "0003F \Udelcode "0005B = "0 "0005B \Udelcode "0005B = "0 "0005B \Udelcode "0005D = "0 "0005D \Udelcode "0005D = "0 "0005D \Udelcode "0007B = "0 "0007B \Udelcode "0007B = "0 "0007B \Udelcode "0007C = "0 "0007C \Udelcode "0007C = "0 "0007C \Udelcode "0007C = "0 "0007C \Udelcode "0007C = "0 "0007C \Udelcode "0007C = "0 "0007C \Udelcode "0007D = "0 "0007D \Udelcode "0007D = "0 "0007D \Udelcode "02016 = "0 "02016 \Udelcode "02016 = "0 "02016 \Udelcode "02016 = "0 "02016 \Udelcode "02016 = "0 "02016 \Udelcode "02016 = "0 "02016 \Udelcode "02044 = "0 "02044 \Udelcode "02044 = "0 "02044 \Udelcode "02308 = "0 "02308 \Udelcode "02308 = "0 "02308 \Udelcode "02308 = "0 "02308 \Udelcode "02308 = "0 "02308 \Udelcode "02308 = "0 "02308 \Udelcode "02309 = "0 "02309 \Udelcode "02309 = "0 "02309 \Udelcode "02309 = "0 "02309 \Udelcode "02309 = "0 "02309 \Udelcode "02309 = "0 "02309 \Udelcode "0230A = "0 "0230A \Udelcode "0230A = "0 "0230A \Udelcode "0230B = "0 "0230B \Udelcode "0230B = "0 "0230B \Udelcode "0231C = "0 "0231C \Udelcode "0231C = "0 "0231C \Udelcode "0231D = "0 "0231D \Udelcode "0231D = "0 "0231D \Udelcode "0231E = "0 "0231E \Udelcode "0231E = "0 "0231E \Udelcode "0231F = "0 "0231F \Udelcode "0231F = "0 "0231F \Udelcode "023B0 = "0 "023B0 \Udelcode "023B0 = "0 "023B0 \Udelcode "023B1 = "0 "023B1 \Udelcode "023B1 = "0 "023B1 \Udelcode "027E6 = "0 "027E6 \Udelcode "027E6 = "0 "027E6 \Udelcode "027E7 = "0 "027E7 \Udelcode "027E7 = "0 "027E7 \Udelcode "027E8 = "0 "027E8 \Udelcode "027E8 = "0 "027E8 \Udelcode "027E9 = "0 "027E9 \Udelcode "027E9 = "0 "027E9 \Udelcode "027EA = "0 "027EA \Udelcode "027EA = "0 "027EA \Udelcode "027EB = "0 "027EB \Udelcode "027EB = "0 "027EB \Udelcode "027EE = "0 "027EE \Udelcode "027EE = "0 "027EE \Udelcode "027EF = "0 "027EF \Udelcode "027EF = "0 "027EF \Umathcode "00021 = "5 "0 "00021 \Umathcode "00022 = "0 "0 "00022 \Umathcode "00027 = "0 "0 "00027 \Umathcode "00028 = "4 "0 "00028 \Umathcode "00029 = "5 "0 "00029 \Umathcode "0002A = "2 "0 "02217 \Umathcode "0002B = "2 "0 "0002B \Umathcode "0002C = "6 "0 "0002C \Umathcode "0002D = "2 "0 "02212 \Umathcode "0002E = "6 "0 "0002E \Umathcode "0002F = "4 "0 "02044 \Umathcode "0003A = "3 "0 "0003A \Umathcode "0003B = "6 "0 "0003B \Umathcode "0003C = "3 "0 "0003C \Umathcode "0003D = "3 "0 "0003D \Umathcode "0003E = "3 "0 "0003E \Umathcode "0003F = "5 "0 "0003F \Umathcode "0005B = "4 "0 "0005B \Umathcode "0005C = "0 "0 "0005C \Umathcode "0005D = "5 "0 "0005D \Umathcode "0007B = "4 "0 "0007B \Umathcode "0007C = "0 "0 "0007C \Umathcode "0007D = "5 "0 "0007D \Umathcode "000A5 = "0 "0 "000A5 \Umathcode "000A7 = "0 "0 "000A7 \Umathcode "000AC = "0 "0 "000AC \Umathcode "000B1 = "2 "0 "000B1 \Umathcode "000B6 = "0 "0 "000B6 \Umathcode "000B7 = "2 "0 "000B7 \Umathcode "000D7 = "2 "0 "000D7 \Umathcode "000F0 = "0 "0 "000F0 \Umathcode "000F7 = "2 "0 "000F7 \Umathcode "00338 = "3 "0 "00338 \Umathcode "003F0 = "0 "0 "003F0 \Umathcode "02016 = "0 "0 "02016 \Umathcode "02020 = "2 "0 "02020 \Umathcode "02021 = "2 "0 "02021 \Umathcode "02022 = "2 "0 "02022 \Umathcode "02026 = "0 "0 "02026 \Umathcode "02032 = "0 "0 "02032 \Umathcode "02033 = "0 "0 "02033 \Umathcode "02034 = "0 "0 "02034 \Umathcode "02044 = "0 "0 "02044 \Umathcode "0207A = "2 "0 "0207A \Umathcode "0207B = "2 "0 "0207B \Umathcode "020DD = "0 "0 "020DD \Umathcode "020DE = "0 "0 "020DE \Umathcode "020DF = "0 "0 "020DF \Umathcode "02111 = "0 "0 "02111 \Umathcode "02113 = "0 "0 "02113 \Umathcode "02118 = "0 "0 "02118 \Umathcode "0211C = "0 "0 "0211C \Umathcode "02132 = "0 "0 "02132 \Umathcode "02135 = "0 "0 "02135 \Umathcode "02136 = "0 "0 "02136 \Umathcode "02137 = "0 "0 "02137 \Umathcode "02138 = "0 "0 "02138 \Umathcode "02141 = "0 "0 "02141 \Umathcode "02142 = "0 "0 "02142 \Umathcode "02143 = "0 "0 "02143 \Umathcode "02144 = "0 "0 "02144 \Umathcode "02145 = "0 "0 "02145 \Umathcode "02146 = "0 "0 "02146 \Umathcode "02147 = "0 "0 "02147 \Umathcode "02148 = "0 "0 "02148 \Umathcode "02149 = "0 "0 "02149 \Umathcode "0214A = "0 "0 "0214A \Umathcode "0214B = "2 "0 "0214B \Umathcode "02190 = "3 "0 "02190 \Umathcode "02191 = "3 "0 "02191 \Umathcode "02192 = "3 "0 "02192 \Umathcode "02193 = "3 "0 "02193 \Umathcode "02194 = "3 "0 "02194 \Umathcode "02195 = "3 "0 "02195 \Umathcode "02196 = "3 "0 "02196 \Umathcode "02197 = "3 "0 "02197 \Umathcode "02198 = "3 "0 "02198 \Umathcode "02199 = "3 "0 "02199 \Umathcode "0219A = "3 "0 "0219A \Umathcode "0219B = "3 "0 "0219B \Umathcode "0219C = "3 "0 "0219C \Umathcode "0219D = "3 "0 "0219D \Umathcode "0219E = "3 "0 "0219E \Umathcode "0219F = "3 "0 "0219F \Umathcode "021A0 = "3 "0 "021A0 \Umathcode "021A1 = "3 "0 "021A1 \Umathcode "021A2 = "3 "0 "021A2 \Umathcode "021A3 = "3 "0 "021A3 \Umathcode "021A4 = "3 "0 "021A4 \Umathcode "021A5 = "3 "0 "021A5 \Umathcode "021A6 = "3 "0 "021A6 \Umathcode "021A7 = "3 "0 "021A7 \Umathcode "021A8 = "0 "0 "021A8 \Umathcode "021A9 = "3 "0 "021A9 \Umathcode "021AA = "3 "0 "021AA \Umathcode "021AB = "3 "0 "021AB \Umathcode "021AC = "3 "0 "021AC \Umathcode "021AD = "3 "0 "021AD \Umathcode "021AE = "3 "0 "021AE \Umathcode "021AF = "3 "0 "021AF \Umathcode "021B0 = "3 "0 "021B0 \Umathcode "021B1 = "3 "0 "021B1 \Umathcode "021B2 = "3 "0 "021B2 \Umathcode "021B3 = "3 "0 "021B3 \Umathcode "021B4 = "0 "0 "021B4 \Umathcode "021B5 = "0 "0 "021B5 \Umathcode "021B6 = "3 "0 "021B6 \Umathcode "021B7 = "3 "0 "021B7 \Umathcode "021B8 = "3 "0 "021B8 \Umathcode "021B9 = "3 "0 "021B9 \Umathcode "021BA = "3 "0 "021BA \Umathcode "021BB = "3 "0 "021BB \Umathcode "021BC = "3 "0 "021BC \Umathcode "021BD = "3 "0 "021BD \Umathcode "021BE = "3 "0 "021BE \Umathcode "021BF = "3 "0 "021BF \Umathcode "021C0 = "3 "0 "021C0 \Umathcode "021C1 = "3 "0 "021C1 \Umathcode "021C2 = "3 "0 "021C2 \Umathcode "021C3 = "3 "0 "021C3 \Umathcode "021C4 = "3 "0 "021C4 \Umathcode "021C5 = "3 "0 "021C5 \Umathcode "021C6 = "3 "0 "021C6 \Umathcode "021C7 = "3 "0 "021C7 \Umathcode "021C8 = "3 "0 "021C8 \Umathcode "021C9 = "3 "0 "021C9 \Umathcode "021CA = "3 "0 "021CA \Umathcode "021CB = "3 "0 "021CB \Umathcode "021CC = "3 "0 "021CC \Umathcode "021CD = "3 "0 "021CD \Umathcode "021CE = "3 "0 "021CE \Umathcode "021CF = "3 "0 "021CF \Umathcode "021D0 = "3 "0 "021D0 \Umathcode "021D1 = "3 "0 "021D1 \Umathcode "021D2 = "3 "0 "021D2 \Umathcode "021D3 = "3 "0 "021D3 \Umathcode "021D4 = "3 "0 "021D4 \Umathcode "021D5 = "3 "0 "021D5 \Umathcode "021D6 = "3 "0 "021D6 \Umathcode "021D7 = "3 "0 "021D7 \Umathcode "021D8 = "3 "0 "021D8 \Umathcode "021D9 = "3 "0 "021D9 \Umathcode "021DA = "3 "0 "021DA \Umathcode "021DB = "3 "0 "021DB \Umathcode "021DC = "3 "0 "021DC \Umathcode "021DD = "3 "0 "021DD \Umathcode "021DE = "3 "0 "021DE \Umathcode "021DF = "3 "0 "021DF \Umathcode "021E0 = "3 "0 "021E0 \Umathcode "021E1 = "3 "0 "021E1 \Umathcode "021E2 = "3 "0 "021E2 \Umathcode "021E3 = "3 "0 "021E3 \Umathcode "021E4 = "3 "0 "021E4 \Umathcode "021E5 = "3 "0 "021E5 \Umathcode "021E6 = "0 "0 "021E6 \Umathcode "021E7 = "0 "0 "021E7 \Umathcode "021E8 = "0 "0 "021E8 \Umathcode "021E9 = "0 "0 "021E9 \Umathcode "021EB = "0 "0 "021EB \Umathcode "021F4 = "3 "0 "021F4 \Umathcode "021F5 = "3 "0 "021F5 \Umathcode "021F6 = "3 "0 "021F6 \Umathcode "021F7 = "3 "0 "021F7 \Umathcode "021F8 = "3 "0 "021F8 \Umathcode "021F9 = "3 "0 "021F9 \Umathcode "021FA = "3 "0 "021FA \Umathcode "021FB = "3 "0 "021FB \Umathcode "021FC = "3 "0 "021FC \Umathcode "021FD = "3 "0 "021FD \Umathcode "021FE = "3 "0 "021FE \Umathcode "021FF = "3 "0 "021FF \Umathcode "02200 = "0 "0 "02200 \Umathcode "02201 = "0 "0 "02201 \Umathcode "02202 = "0 "0 "02202 \Umathcode "02203 = "0 "0 "02203 \Umathcode "02204 = "0 "0 "02204 \Umathcode "02205 = "0 "0 "02205 \Umathcode "02208 = "3 "0 "02208 \Umathcode "02209 = "3 "0 "02209 \Umathcode "0220B = "3 "0 "0220B \Umathcode "0220C = "3 "0 "0220C \Umathcode "0220F = "1 "0 "0220F \Umathcode "02210 = "1 "0 "02210 \Umathcode "02211 = "1 "0 "02211 \Umathcode "02212 = "2 "0 "02212 \Umathcode "02213 = "2 "0 "02213 \Umathcode "02214 = "2 "0 "02214 \Umathcode "02216 = "2 "0 "02216 \Umathcode "02217 = "2 "0 "02217 \Umathcode "02218 = "2 "0 "02218 \Umathcode "02219 = "2 "0 "02219 \Umathcode "0221D = "3 "0 "0221D \Umathcode "0221E = "0 "0 "0221E \Umathcode "0221F = "0 "0 "0221F \Umathcode "02220 = "0 "0 "02220 \Umathcode "02221 = "0 "0 "02221 \Umathcode "02222 = "0 "0 "02222 \Umathcode "02223 = "2 "0 "02223 \Umathcode "02224 = "2 "0 "02224 \Umathcode "02225 = "3 "0 "02225 \Umathcode "02226 = "3 "0 "02226 \Umathcode "02227 = "2 "0 "02227 \Umathcode "02228 = "2 "0 "02228 \Umathcode "02229 = "2 "0 "02229 \Umathcode "0222A = "2 "0 "0222A \Umathcode "0222B = "1 "0 "0222B \Umathcode "0222C = "1 "0 "0222C \Umathcode "0222D = "1 "0 "0222D \Umathcode "0222E = "1 "0 "0222E \Umathcode "0222F = "1 "0 "0222F \Umathcode "02230 = "1 "0 "02230 \Umathcode "02231 = "1 "0 "02231 \Umathcode "02232 = "1 "0 "02232 \Umathcode "02233 = "1 "0 "02233 \Umathcode "02234 = "3 "0 "02234 \Umathcode "02235 = "3 "0 "02235 \Umathcode "02236 = "6 "0 "02236 \Umathcode "02237 = "3 "0 "02237 \Umathcode "02238 = "2 "0 "02238 \Umathcode "02239 = "3 "0 "02239 \Umathcode "0223C = "3 "0 "0223C \Umathcode "0223D = "3 "0 "0223D \Umathcode "02240 = "2 "0 "02240 \Umathcode "02241 = "3 "0 "02241 \Umathcode "02242 = "3 "0 "02242 \Umathcode "02243 = "3 "0 "02243 \Umathcode "02244 = "3 "0 "02244 \Umathcode "02245 = "3 "0 "02245 \Umathcode "02246 = "3 "0 "02246 \Umathcode "02247 = "3 "0 "02247 \Umathcode "02248 = "3 "0 "02248 \Umathcode "02249 = "3 "0 "02249 \Umathcode "0224A = "3 "0 "0224A \Umathcode "0224C = "3 "0 "0224C \Umathcode "0224D = "3 "0 "0224D \Umathcode "0224E = "3 "0 "0224E \Umathcode "02250 = "3 "0 "02250 \Umathcode "02251 = "3 "0 "02251 \Umathcode "02252 = "3 "0 "02252 \Umathcode "02253 = "3 "0 "02253 \Umathcode "02254 = "3 "0 "02254 \Umathcode "02255 = "3 "0 "02255 \Umathcode "02256 = "3 "0 "02256 \Umathcode "02257 = "3 "0 "02257 \Umathcode "02259 = "3 "0 "02259 \Umathcode "0225A = "3 "0 "0225A \Umathcode "0225B = "3 "0 "0225B \Umathcode "0225C = "3 "0 "0225C \Umathcode "0225D = "3 "0 "0225D \Umathcode "0225E = "3 "0 "0225E \Umathcode "0225F = "3 "0 "0225F \Umathcode "02260 = "3 "0 "02260 \Umathcode "02261 = "3 "0 "02261 \Umathcode "02262 = "3 "0 "02262 \Umathcode "02263 = "3 "0 "02263 \Umathcode "02264 = "3 "0 "02264 \Umathcode "02265 = "3 "0 "02265 \Umathcode "02266 = "3 "0 "02266 \Umathcode "02267 = "3 "0 "02267 \Umathcode "02268 = "3 "0 "02268 \Umathcode "02269 = "3 "0 "02269 \Umathcode "0226A = "3 "0 "0226A \Umathcode "0226B = "3 "0 "0226B \Umathcode "0226C = "3 "0 "0226C \Umathcode "0226D = "3 "0 "0226D \Umathcode "0226E = "3 "0 "0226E \Umathcode "0226F = "3 "0 "0226F \Umathcode "02270 = "3 "0 "02270 \Umathcode "02271 = "3 "0 "02271 \Umathcode "02272 = "3 "0 "02272 \Umathcode "02273 = "3 "0 "02273 \Umathcode "02274 = "3 "0 "02274 \Umathcode "02275 = "3 "0 "02275 \Umathcode "02276 = "3 "0 "02276 \Umathcode "02277 = "3 "0 "02277 \Umathcode "02278 = "3 "0 "02278 \Umathcode "02279 = "3 "0 "02279 \Umathcode "0227A = "3 "0 "0227A \Umathcode "0227B = "3 "0 "0227B \Umathcode "0227C = "3 "0 "0227C \Umathcode "0227D = "3 "0 "0227D \Umathcode "0227E = "3 "0 "0227E \Umathcode "0227F = "3 "0 "0227F \Umathcode "02280 = "3 "0 "02280 \Umathcode "02281 = "3 "0 "02281 \Umathcode "02282 = "3 "0 "02282 \Umathcode "02283 = "3 "0 "02283 \Umathcode "02284 = "3 "0 "02284 \Umathcode "02285 = "3 "0 "02285 \Umathcode "02286 = "3 "0 "02286 \Umathcode "02287 = "3 "0 "02287 \Umathcode "02288 = "3 "0 "02288 \Umathcode "02289 = "3 "0 "02289 \Umathcode "0228A = "3 "0 "0228A \Umathcode "0228B = "3 "0 "0228B \Umathcode "0228E = "2 "0 "0228E \Umathcode "0228F = "3 "0 "0228F \Umathcode "02290 = "3 "0 "02290 \Umathcode "02291 = "2 "0 "02291 \Umathcode "02292 = "2 "0 "02292 \Umathcode "02293 = "2 "0 "02293 \Umathcode "02294 = "2 "0 "02294 \Umathcode "02295 = "2 "0 "02295 \Umathcode "02296 = "2 "0 "02296 \Umathcode "02297 = "2 "0 "02297 \Umathcode "02298 = "2 "0 "02298 \Umathcode "02299 = "2 "0 "02299 \Umathcode "0229A = "2 "0 "0229A \Umathcode "0229B = "2 "0 "0229B \Umathcode "0229C = "2 "0 "0229C \Umathcode "0229D = "2 "0 "0229D \Umathcode "0229E = "2 "0 "0229E \Umathcode "0229F = "2 "0 "0229F \Umathcode "022A0 = "2 "0 "022A0 \Umathcode "022A1 = "2 "0 "022A1 \Umathcode "022A2 = "3 "0 "022A2 \Umathcode "022A3 = "3 "0 "022A3 \Umathcode "022A4 = "0 "0 "022A4 \Umathcode "022A5 = "0 "0 "022A5 \Umathcode "022A7 = "3 "0 "022A7 \Umathcode "022A8 = "3 "0 "022A8 \Umathcode "022A9 = "3 "0 "022A9 \Umathcode "022AA = "3 "0 "022AA \Umathcode "022AB = "3 "0 "022AB \Umathcode "022AC = "3 "0 "022AC \Umathcode "022AD = "3 "0 "022AD \Umathcode "022AE = "3 "0 "022AE \Umathcode "022AF = "3 "0 "022AF \Umathcode "022B2 = "2 "0 "022B2 \Umathcode "022B3 = "2 "0 "022B3 \Umathcode "022B8 = "3 "0 "022B8 \Umathcode "022BA = "2 "0 "022BA \Umathcode "022BB = "2 "0 "022BB \Umathcode "022BC = "2 "0 "022BC \Umathcode "022C0 = "1 "0 "022C0 \Umathcode "022C1 = "1 "0 "022C1 \Umathcode "022C2 = "1 "0 "022C2 \Umathcode "022C3 = "1 "0 "022C3 \Umathcode "022C4 = "2 "0 "022C4 \Umathcode "022C5 = "2 "0 "022C5 \Umathcode "022C6 = "2 "0 "022C6 \Umathcode "022C7 = "2 "0 "022C7 \Umathcode "022C8 = "3 "0 "022C8 \Umathcode "022C9 = "2 "0 "022C9 \Umathcode "022CA = "2 "0 "022CA \Umathcode "022CB = "2 "0 "022CB \Umathcode "022CC = "2 "0 "022CC \Umathcode "022CE = "2 "0 "022CE \Umathcode "022CF = "2 "0 "022CF \Umathcode "022D0 = "3 "0 "022D0 \Umathcode "022D1 = "3 "0 "022D1 \Umathcode "022D2 = "2 "0 "022D2 \Umathcode "022D3 = "2 "0 "022D3 \Umathcode "022D4 = "3 "0 "022D4 \Umathcode "022D6 = "2 "0 "022D6 \Umathcode "022D7 = "2 "0 "022D7 \Umathcode "022D8 = "3 "0 "022D8 \Umathcode "022D9 = "3 "0 "022D9 \Umathcode "022DA = "3 "0 "022DA \Umathcode "022DB = "3 "0 "022DB \Umathcode "022DC = "3 "0 "022DC \Umathcode "022DD = "3 "0 "022DD \Umathcode "022DE = "3 "0 "022DE \Umathcode "022DF = "3 "0 "022DF \Umathcode "022E0 = "3 "0 "022E0 \Umathcode "022E1 = "3 "0 "022E1 \Umathcode "022E2 = "3 "0 "022E2 \Umathcode "022E3 = "3 "0 "022E3 \Umathcode "022E4 = "3 "0 "022E4 \Umathcode "022E5 = "3 "0 "022E5 \Umathcode "022E6 = "3 "0 "022E6 \Umathcode "022E7 = "3 "0 "022E7 \Umathcode "022E8 = "3 "0 "022E8 \Umathcode "022E9 = "3 "0 "022E9 \Umathcode "022EA = "3 "0 "022EA \Umathcode "022EB = "3 "0 "022EB \Umathcode "022EC = "3 "0 "022EC \Umathcode "022ED = "3 "0 "022ED \Umathcode "022EE = "0 "0 "022EE \Umathcode "022EF = "0 "0 "022EF \Umathcode "022F0 = "0 "0 "022F0 \Umathcode "022F1 = "0 "0 "022F1 \Umathcode "02300 = "0 "0 "02300 \Umathcode "02308 = "4 "0 "02308 \Umathcode "02309 = "5 "0 "02309 \Umathcode "0230A = "4 "0 "0230A \Umathcode "0230B = "5 "0 "0230B \Umathcode "0231C = "4 "0 "0231C \Umathcode "0231D = "5 "0 "0231D \Umathcode "0231E = "4 "0 "0231E \Umathcode "0231F = "5 "0 "0231F \Umathcode "02322 = "3 "0 "02322 \Umathcode "02323 = "3 "0 "02323 \Umathcode "023B0 = "4 "0 "023B0 \Umathcode "023B1 = "5 "0 "023B1 \Umathcode "024C7 = "0 "0 "024C7 \Umathcode "024C8 = "0 "0 "024C8 \Umathcode "025A0 = "0 "0 "025A0 \Umathcode "025A1 = "0 "0 "025A1 \Umathcode "025A2 = "0 "0 "025A2 \Umathcode "025B2 = "2 "0 "025B2 \Umathcode "025B3 = "0 "0 "025B3 \Umathcode "025B6 = "2 "0 "025B6 \Umathcode "025B7 = "2 "0 "025B7 \Umathcode "025BC = "2 "0 "025BC \Umathcode "025BD = "2 "0 "025BD \Umathcode "025C0 = "2 "0 "025C0 \Umathcode "025C1 = "2 "0 "025C1 \Umathcode "025CA = "0 "0 "025CA \Umathcode "025EF = "2 "0 "025EF \Umathcode "02605 = "0 "0 "02605 \Umathcode "02660 = "0 "0 "02660 \Umathcode "02661 = "0 "0 "02661 \Umathcode "02662 = "0 "0 "02662 \Umathcode "02663 = "0 "0 "02663 \Umathcode "02666 = "0 "0 "02666 \Umathcode "0266D = "0 "0 "0266D \Umathcode "0266E = "0 "0 "0266E \Umathcode "0266F = "0 "0 "0266F \Umathcode "02713 = "0 "0 "02713 \Umathcode "02720 = "0 "0 "02720 \Umathcode "027E6 = "4 "0 "027E6 \Umathcode "027E7 = "5 "0 "027E7 \Umathcode "027E8 = "4 "0 "027E8 \Umathcode "027E9 = "5 "0 "027E9 \Umathcode "027EA = "4 "0 "027EA \Umathcode "027EB = "5 "0 "027EB \Umathcode "027EE = "4 "0 "027EE \Umathcode "027EF = "5 "0 "027EF \Umathcode "027F5 = "3 "0 "027F5 \Umathcode "027F6 = "3 "0 "027F6 \Umathcode "027F7 = "3 "0 "027F7 \Umathcode "027F8 = "3 "0 "027F8 \Umathcode "027F9 = "3 "0 "027F9 \Umathcode "027FA = "3 "0 "027FA \Umathcode "027FB = "3 "0 "027FB \Umathcode "027FC = "3 "0 "027FC \Umathcode "027FD = "3 "0 "027FD \Umathcode "027FE = "3 "0 "027FE \Umathcode "027FF = "3 "0 "027FF \Umathcode "02906 = "3 "0 "02906 \Umathcode "02907 = "3 "0 "02907 \Umathcode "0290A = "3 "0 "0290A \Umathcode "0290B = "3 "0 "0290B \Umathcode "0290C = "3 "0 "0290C \Umathcode "0290D = "3 "0 "0290D \Umathcode "02911 = "3 "0 "02911 \Umathcode "02916 = "3 "0 "02916 \Umathcode "02917 = "3 "0 "02917 \Umathcode "02921 = "3 "0 "02921 \Umathcode "02922 = "3 "0 "02922 \Umathcode "02923 = "3 "0 "02923 \Umathcode "02924 = "3 "0 "02924 \Umathcode "02925 = "3 "0 "02925 \Umathcode "02926 = "3 "0 "02926 \Umathcode "02A00 = "1 "0 "02A00 \Umathcode "02A01 = "1 "0 "02A01 \Umathcode "02A02 = "1 "0 "02A02 \Umathcode "02A03 = "1 "0 "02A03 \Umathcode "02A04 = "1 "0 "02A04 \Umathcode "02A05 = "1 "0 "02A05 \Umathcode "02A06 = "1 "0 "02A06 \Umathcode "02A09 = "1 "0 "02A09 \Umathcode "02A3F = "2 "0 "02A3F \Umathcode "02A7D = "3 "0 "02A7D \Umathcode "02A7E = "3 "0 "02A7E \Umathcode "02A85 = "3 "0 "02A85 \Umathcode "02A86 = "3 "0 "02A86 \Umathcode "02A87 = "3 "0 "02A87 \Umathcode "02A88 = "3 "0 "02A88 \Umathcode "02A89 = "3 "0 "02A89 \Umathcode "02A8A = "3 "0 "02A8A \Umathcode "02A8B = "3 "0 "02A8B \Umathcode "02A8C = "3 "0 "02A8C \Umathcode "02A95 = "3 "0 "02A95 \Umathcode "02A96 = "3 "0 "02A96 \Umathcode "02AAF = "3 "0 "02AAF \Umathcode "02AB0 = "3 "0 "02AB0 \Umathcode "02AB1 = "3 "0 "02AB1 \Umathcode "02AB2 = "3 "0 "02AB2 \Umathcode "02AB3 = "3 "0 "02AB3 \Umathcode "02AB4 = "3 "0 "02AB4 \Umathcode "02AB5 = "3 "0 "02AB5 \Umathcode "02AB6 = "3 "0 "02AB6 \Umathcode "02AB7 = "3 "0 "02AB7 \Umathcode "02AB8 = "3 "0 "02AB8 \Umathcode "02AB9 = "3 "0 "02AB9 \Umathcode "02ABA = "3 "0 "02ABA \Umathcode "02AC5 = "3 "0 "02AC5 \Umathcode "02AC6 = "3 "0 "02AC6 \Umathcode "02ACB = "3 "0 "02ACB \Umathcode "02ACC = "3 "0 "02ACC \Umathcode "12035 = "0 "0 "12035 \Umathcode "1D6A4 = "0 "0 "1D6A4 \Umathcode "1D6A5 = "0 "0 "1D6A5 \Umathcode "1D6FB = "0 "0 "1D6FB \Umathcode "1D717 = "0 "0 "1D717 \Umathcode "1D718 = "0 "0 "1D718 % gaps .. done in lua (as example) % \Umathcode "1D455 = "0 "0 "0210E % \Umathcode "1D49D = "0 "0 "0212C % \Umathcode "1D4A0 = "0 "0 "02130 % \Umathcode "1D4A1 = "0 "0 "02131 % \Umathcode "1D4A3 = "0 "0 "0210B % \Umathcode "1D4A4 = "0 "0 "02110 % \Umathcode "1D4A7 = "0 "0 "02112 % \Umathcode "1D4A8 = "0 "0 "02133 % \Umathcode "1D4AD = "0 "0 "0211B % \Umathcode "1D4BA = "0 "0 "0212F % \Umathcode "1D4BC = "0 "0 "0210A % \Umathcode "1D4C4 = "0 "0 "02134 % \Umathcode "1D506 = "0 "0 "0212D % \Umathcode "1D50B = "0 "0 "0210C % \Umathcode "1D50C = "0 "0 "02111 % \Umathcode "1D515 = "0 "0 "0211C % \Umathcode "1D51D = "0 "0 "02128 % \Umathcode "1D53A = "0 "0 "02102 % \Umathcode "1D53F = "0 "0 "0210D % \Umathcode "1D545 = "0 "0 "02115 % \Umathcode "1D547 = "0 "0 "02119 % \Umathcode "1D548 = "0 "0 "0211A % \Umathcode "1D549 = "0 "0 "0211D % \Umathcode "1D551 = "0 "0 "02124 % initialization \the\everymathit % a couple of definitions (we could also use \mathchardef): \def\acute {\Umathaccent"0"0"0000B4 } \def\acwopencirclearrow {\Umathchar "3"0"0021BA } \def\aleph {\Umathchar "0"0"002135 } \def\Alpha {\Umathchar "0"0"000391 } \def\alpha {\Umathchar "0"0"0003B1 } \def\amalg {\Umathchar "2"0"002A3F } \def\angle {\Umathchar "0"0"002220 } \def\Angstrom {\Umathchar "0"0"00212B } \def\approx {\Umathchar "3"0"002248 } \def\approxEq {\Umathchar "3"0"002245 } \def\approxeq {\Umathchar "3"0"00224A } \def\approxnEq {\Umathchar "3"0"002247 } \def\arrowvert {\Umathchar "0"0"00007C } \def\Arrowvert {\Umathchar "0"0"002016 } \def\ast {\Umathchar "2"0"002217 } \def\ast {\Umathchar "2"0"002217 } \def\asymp {\Umathchar "3"0"00224D } \def\backepsilon {\Umathchar "0"0"0003F6 } \def\backprime {\Umathchar "0"0"012035 } \def\backsim {\Umathchar "3"0"00223D } \def\backslash {\Umathchar "0"0"00005C } \def\bar {\Umathaccent"0"0"0000AF } \def\barleftarrow {\Umathchar "3"0"0021E4 } \def\barleftarrowrightarrowbar {\Umathchar "3"0"0021B9 } \def\barovernorthwestarrow {\Umathchar "3"0"0021B8 } \def\barwedge {\Umathchar "2"0"0022BC } \def\because {\Umathchar "3"0"002235 } \def\Beta {\Umathchar "0"0"000392 } \def\beta {\Umathchar "0"0"0003B2 } \def\beth {\Umathchar "0"0"002136 } \def\between {\Umathchar "3"0"00226C } \def\bigcap {\Umathchar "1"0"0022C2 } \def\bigcirc {\Umathchar "2"0"0025EF } \def\bigcircle {\Umathchar "2"0"0020DD } \def\bigcircle {\Umathchar "2"0"0020DD } \def\bigcup {\Umathchar "1"0"0022C3 } \def\bigdiamond {\Umathchar "0"0"0020DF } \def\bigodot {\Umathchar "1"0"002A00 } \def\bigoplus {\Umathchar "1"0"002A01 } \def\bigotimes {\Umathchar "1"0"002A02 } \def\bigsqcap {\Umathchar "1"0"002A05 } \def\bigsqcup {\Umathchar "1"0"002A06 } \def\bigsquare {\Umathchar "0"0"0020DE } \def\bigstar {\Umathchar "0"0"002605 } \def\bigtimes {\Umathchar "1"0"002A09 } \def\bigtriangledown {\Umathchar "2"0"0025BD } \def\bigtriangleup {\Umathchar "2"0"0025B3 } \def\bigudot {\Umathchar "1"0"002A03 } \def\biguplus {\Umathchar "1"0"002A04 } \def\bigvee {\Umathchar "1"0"0022C1 } \def\bigwedge {\Umathchar "1"0"0022C0 } \def\blacklozenge {\Umathchar "0"0"002666 } \def\blacksquare {\Umathchar "0"0"0025A0 } \def\blacktriangle {\Umathchar "2"0"0025B2 } \def\blacktriangledown {\Umathchar "2"0"0025BC } \def\blacktriangleleft {\Umathchar "2"0"0025C0 } \def\blacktriangleright {\Umathchar "2"0"0025B6 } \def\bot {\Umathchar "0"0"0022A5 } \def\bowtie {\Umathchar "3"0"0022C8 } \def\Box {\Umathchar "0"0"0025A1 } \def\boxdot {\Umathchar "2"0"0022A1 } \def\boxminus {\Umathchar "2"0"00229F } \def\boxplus {\Umathchar "2"0"00229E } \def\boxtimes {\Umathchar "2"0"0022A0 } %def\braceld {\Umathchar "0"0"000000 } %def\bracerd {\Umathchar "0"0"000000 } %def\bracelu {\Umathchar "0"0"000000 } %def\braceru {\Umathchar "0"0"000000 } \def\breve {\Umathaccent"0"0"0002D8 } \def\bullet {\Umathchar "2"0"002022 } \def\bullet {\Umathchar "2"0"002022 } \def\Bumpeq {\Umathchar "3"0"00224E } \def\cap {\Umathchar "2"0"002229 } \def\Cap {\Umathchar "2"0"0022D2 } \def\carriagereturn {\Umathchar "0"0"0021B5 } \def\cdot {\Umathchar "2"0"0022C5 } \def\cdotp {\Umathchar "6"0"0022C5 } \def\cdots {\Umathchar "0"0"0022EF } \def\centerdot {\Umathchar "2"0"0000B7 } \def\check {\Umathaccent"0"0"0002C7 } \def\checkmark {\Umathchar "0"0"002713 } \def\Chi {\Umathchar "0"0"0003A7 } \def\chi {\Umathchar "0"0"0003C7 } \def\circ {\Umathchar "2"0"002218 } \def\circeq {\Umathchar "3"0"002257 } \def\circlearrowleft {\Umathchar "3"0"0021BB } \def\circlearrowright {\Umathchar "3"0"0021BA } \def\circledast {\Umathchar "2"0"00229B } \def\circledcirc {\Umathchar "2"0"00229A } \def\circleddash {\Umathchar "2"0"00229D } \def\circledequals {\Umathchar "2"0"00229C } \def\circledR {\Umathchar "0"0"0024C7 } \def\circledS {\Umathchar "0"0"0024C8 } \def\circleonrightarrow {\Umathchar "3"0"0021F4 } \def\clubsuit {\Umathchar "0"0"002663 } \def\colon {\Umathchar "6"0"002236 } \def\colonequals {\Umathchar "3"0"002254 } \def\complement {\Umathchar "0"0"002201 } \def\complexes {\Umathchar "0"0"002102 } \def\cong {\Umathchar "3"0"002245 } \def\coprod {\Umathchar "1"0"002210 } \def\cup {\Umathchar "2"0"00222A } \def\Cup {\Umathchar "2"0"0022D3 } \def\curlyeqprec {\Umathchar "3"0"0022DE } \def\curlyeqsucc {\Umathchar "3"0"0022DF } \def\curlyvee {\Umathchar "2"0"0022CE } \def\curlywedge {\Umathchar "2"0"0022CF } \def\curvearrowleft {\Umathchar "3"0"0021B6 } \def\curvearrowright {\Umathchar "3"0"0021B7 } \def\cwopencirclearrow {\Umathchar "3"0"0021BB } \def\dag {\Umathchar "0"0"002020 } \def\dagger {\Umathchar "2"0"002020 } \def\daleth {\Umathchar "0"0"002138 } \def\dasharrow {\Umathchar "3"0"0021E2 } \def\dashedleftarrow {\Umathchar "3"0"00290C } \def\dashedrightarrow {\Umathchar "3"0"00290D } \def\dashv {\Umathchar "3"0"0022A3 } \def\ddag {\Umathchar "0"0"002021 } \def\ddagger {\Umathchar "2"0"002021 } \def\dddot {\Umathaccent"0"0"0020DB } \def\ddot {\Umathaccent"0"0"0000A8 } \def\ddots {\Umathchar "0"0"0022F1 } \def\Ddownarrow {\Umathchar "3"0"00290B } \def\definedeq {\Umathchar "3"0"00225D } \def\Delta {\Umathchar "0"0"000394 } \def\delta {\Umathchar "0"0"0003B4 } \def\diamond {\Umathchar "2"0"0022C4 } \def\diamondsuit {\Umathchar "0"0"002662 } \def\differentialD {\Umathchar "0"0"002145 } \def\differentiald {\Umathchar "0"0"002146 } \def\digamma {\Umathchar "0"0"0003DC } \def\div {\Umathchar "2"0"0000F7 } \def\divideontimes {\Umathchar "2"0"0022C7 } \def\divides {\Umathchar "2"0"002223 } \def\dot {\Umathaccent"0"0"0002D9 } \def\doteq {\Umathchar "3"0"002250 } \def\Doteq {\Umathchar "3"0"002251 } \def\doteqdot {\Umathchar "3"0"002251 } \def\dotminus {\Umathchar "2"0"002238 } \def\dotplus {\Umathchar "2"0"002214 } \def\dots {\Umathchar "0"0"002026 } \def\dottedrightarrow {\Umathchar "3"0"002911 } \def\doublecap {\Umathchar "2"0"0022D2 } \def\doublecup {\Umathchar "2"0"0022D3 } \def\doubleprime {\Umathchar "0"0"002033 } \def\downarrow {\Umathchar "3"0"002193 } \def\Downarrow {\Umathchar "3"0"0021D3 } \def\downdasharrow {\Umathchar "3"0"0021E3 } \def\downdownarrows {\Umathchar "3"0"0021CA } \def\downharpoonleft {\Umathchar "3"0"0021C3 } \def\downharpoonright {\Umathchar "3"0"0021C2 } \def\downuparrows {\Umathchar "3"0"0021F5 } \def\downwhitearrow {\Umathchar "0"0"0021E9 } \def\downzigzagarrow {\Umathchar "3"0"0021AF } \def\ell {\Umathchar "0"0"002113 } \def\emptyset {\Umathchar "0"0"002205 } \def\Epsilon {\Umathchar "0"0"000395 } \def\epsilon {\Umathchar "0"0"0003F5 } \def\eq {\Umathchar "3"0"00003D } \def\eqcirc {\Umathchar "3"0"002256 } \def\eqgtr {\Umathchar "3"0"0022DD } \def\eqless {\Umathchar "3"0"0022DC } \def\eqsim {\Umathchar "3"0"002242 } \def\eqslantgtr {\Umathchar "3"0"002A96 } \def\eqslantless {\Umathchar "3"0"002A95 } \def\equalscolon {\Umathchar "3"0"002255 } \def\equiv {\Umathchar "3"0"002261 } \def\Eta {\Umathchar "0"0"000397 } \def\eta {\Umathchar "0"0"0003B7 } \def\eth {\Umathchar "0"0"0000F0 } \def\Eulerconst {\Umathchar "0"0"002107 } \def\exists {\Umathchar "0"0"002203 } \def\exponentiale {\Umathchar "0"0"002147 } \def\fallingdotseq {\Umathchar "3"0"002252 } \def\Finv {\Umathchar "0"0"002132 } \def\flat {\Umathchar "0"0"00266D } \def\forall {\Umathchar "0"0"002200 } \def\frown {\Umathchar "3"0"002322 } \def\Game {\Umathchar "0"0"002141 } \def\Gamma {\Umathchar "0"0"000393 } \def\gamma {\Umathchar "0"0"0003B3 } \def\ge {\Umathchar "3"0"002265 } \def\geq {\Umathchar "3"0"002265 } \def\geqq {\Umathchar "3"0"002267 } \def\geqslant {\Umathchar "3"0"002A7E } \def\gets {\Umathchar "3"0"002190 } \def\gg {\Umathchar "3"0"00226B } \def\ggg {\Umathchar "3"0"0022D9 } \def\gggtr {\Umathchar "3"0"0022D9 } \def\gimel {\Umathchar "0"0"002137 } \def\gnapprox {\Umathchar "3"0"002A8A } \def\gneqq {\Umathchar "3"0"002269 } \def\gnsim {\Umathchar "3"0"0022E7 } \def\grave {\Umathaccent"0"0"000060 } \def\gt {\Umathchar "3"0"00003E } \def\gtrapprox {\Umathchar "3"0"002A86 } \def\gtrdot {\Umathchar "2"0"0022D7 } \def\gtreqless {\Umathchar "3"0"0022DB } \def\gtreqqless {\Umathchar "3"0"002A8C } \def\gtrless {\Umathchar "3"0"002277 } \def\gtrsim {\Umathchar "3"0"002273 } \def\hat {\Umathaccent"0"0"0002C6 } \def\hbar {\Umathchar "0"0"00210F } \def\heartsuit {\Umathchar "0"0"002661 } \def\hookleftarrow {\Umathchar "3"0"0021A9 } \def\hookrightarrow {\Umathchar "3"0"0021AA } \def\hslash {\Umathchar "0"0"00210F } \def\iiint {\Umathchar "1"0"00222D } \def\iiintop {\Umathchar "0"0"00222D } \def\iint {\Umathchar "1"0"00222C } \def\iintop {\Umathchar "0"0"00222C } \def\Im {\Umathchar "0"0"002111 } \def\imaginaryi {\Umathchar "0"0"002148 } \def\imaginaryj {\Umathchar "0"0"002149 } \def\imath {\Umathchar "0"0"01D6A4 } \def\imply {\Umathchar "3"0"0021D2 } \def\in {\Umathchar "0"0"002208 } \def\infty {\Umathchar "0"0"00221E } \def\int {\Umathchar "1"0"00222B } \def\intclockwise {\Umathchar "1"0"002231 } \def\integers {\Umathchar "0"0"002124 } \def\intercal {\Umathchar "2"0"0022BA } \def\intop {\Umathchar "0"0"00222B } \def\Iota {\Umathchar "0"0"000399 } \def\iota {\Umathchar "0"0"0003B9 } \def\jmath {\Umathchar "0"0"01D6A5 } \def\Join {\Umathchar "3"0"0022C8 } \def\Kappa {\Umathchar "0"0"00039A } \def\kappa {\Umathchar "0"0"0003BA } \def\Lambda {\Umathchar "0"0"00039B } \def\lambda {\Umathchar "0"0"0003BB } \def\land {\Umathchar "2"0"002227 } \def\langle {\Udelimiter "4"0"0027E8 } \def\lbrace {\Udelimiter "4"0"00007B } \def\lbrack {\Udelimiter "4"0"00005B } \def\lceil {\Udelimiter "4"0"002308 } \def\lceiling {\Udelimiter "4"0"002308 } \def\ldotp {\Umathchar "6"0"00002E } \def\ldots {\Umathchar "0"0"002026 } \def\Ldsh {\Umathchar "3"0"0021B2 } \def\le {\Umathchar "3"0"002264 } \def\leadsto {\Umathchar "3"0"0021DD } \def\leftarrow {\Umathchar "3"0"002190 } \def\Leftarrow {\Umathchar "3"0"0021D0 } \def\leftarrowtail {\Umathchar "3"0"0021A2 } \def\leftarrowtriangle {\Umathchar "3"0"0021FD } \def\leftdasharrow {\Umathchar "3"0"0021E0 } \def\leftharpoondown {\Umathchar "3"0"0021BD } \def\leftharpoonup {\Umathchar "3"0"0021BC } \def\leftleftarrows {\Umathchar "3"0"0021C7 } \def\leftrightarrow {\Umathchar "3"0"002194 } \def\Leftrightarrow {\Umathchar "3"0"0021D4 } \def\leftrightarrows {\Umathchar "3"0"0021C6 } \def\leftrightarrowtriangle {\Umathchar "3"0"0021FF } \def\leftrightharpoons {\Umathchar "3"0"0021CB } \def\leftrightsquigarrow {\Umathchar "3"0"0021AD } \def\leftsquigarrow {\Umathchar "3"0"0021DC } \def\leftthreetimes {\Umathchar "2"0"0022CB } \def\leftwavearrow {\Umathchar "3"0"00219C } \def\leftwhitearrow {\Umathchar "0"0"0021E6 } \def\leq {\Umathchar "3"0"002264 } \def\leqq {\Umathchar "3"0"002266 } \def\leqslant {\Umathchar "3"0"002A7D } \def\lessapprox {\Umathchar "3"0"002A85 } \def\lessdot {\Umathchar "2"0"0022D6 } \def\lesseqgtr {\Umathchar "3"0"0022DA } \def\lesseqqgtr {\Umathchar "3"0"002A8B } \def\lessgtr {\Umathchar "3"0"002276 } \def\lesssim {\Umathchar "3"0"002272 } \def\lfloor {\Udelimiter "4"0"00230A } \def\lgroup {\Udelimiter "4"0"0027EE } \def\lhook {\Umathchar "3"0"0FE322 } \def\lhooknwarrow {\Umathchar "3"0"002923 } \def\lhooksearrow {\Umathchar "3"0"002925 } \def\linefeed {\Umathchar "0"0"0021B4 } \def\ll {\Umathchar "3"0"00226A } \def\llangle {\Udelimiter "4"0"0027EA } \def\llbracket {\Udelimiter "4"0"0027E6 } \def\llcorner {\Udelimiter "4"0"00231E } \def\Lleftarrow {\Umathchar "3"0"0021DA } \def\lll {\Umathchar "3"0"0022D8 } \def\llless {\Umathchar "3"0"0022D8 } \def\lmoustache {\Udelimiter "4"0"0023B0 } \def\lnapprox {\Umathchar "3"0"002A89 } \def\lneq {\Umathchar "3"0"002A87 } \def\lneqq {\Umathchar "3"0"002268 } \def\lnot {\Umathchar "0"0"0000AC } \def\lnsim {\Umathchar "3"0"0022E6 } \def\longleftarrow {\Umathchar "3"0"0027F5 } \def\Longleftarrow {\Umathchar "3"0"0027F8 } \def\longleftrightarrow {\Umathchar "3"0"0027F7 } \def\Longleftrightarrow {\Umathchar "3"0"0027FA } \def\longmapsfrom {\Umathchar "3"0"0027FB } \def\Longmapsfrom {\Umathchar "3"0"0027FD } \def\longmapsto {\Umathchar "3"0"0027FC } \def\Longmapsto {\Umathchar "3"0"0027FE } \def\longrightarrow {\Umathchar "3"0"0027F6 } \def\Longrightarrow {\Umathchar "3"0"0027F9 } \def\longrightsquigarrow {\Umathchar "3"0"0027FF } \def\looparrowleft {\Umathchar "3"0"0021AB } \def\looparrowright {\Umathchar "3"0"0021AC } \def\lor {\Umathchar "2"0"002228 } \def\lozenge {\Umathchar "0"0"0025CA } \def\lparent {\Udelimiter "4"0"000028 } \def\lrcorner {\Udelimiter "5"0"00231F } \def\Lsh {\Umathchar "3"0"0021B0 } \def\lt {\Umathchar "3"0"00003C } \def\ltimes {\Umathchar "2"0"0022C9 } \def\lvert {\Udelimiter "4"0"00007C } \def\lVert {\Udelimiter "4"0"002016 } \def\maltese {\Umathchar "0"0"002720 } \def\mapsdown {\Umathchar "3"0"0021A7 } \def\mapsfrom {\Umathchar "3"0"0021A4 } \def\Mapsfrom {\Umathchar "3"0"002906 } \def\mapsfromchar {\Umathchar "3"0"0FE324 } \def\mapsto {\Umathchar "3"0"0021A6 } \def\Mapsto {\Umathchar "3"0"002907 } \def\mapstochar {\Umathchar "3"0"0FE321 } \def\mapsup {\Umathchar "3"0"0021A5 } \def\mathring {\Umathaccent"0"0"0002DA } \def\measuredangle {\Umathchar "0"0"002221 } \def\measuredeq {\Umathchar "3"0"00225E } \def\mho {\Umathchar "0"0"002127 } \def\mid {\Umathchar "3"0"00007C } \def\minus {\Umathchar "2"0"002212 } \def\minuscolon {\Umathchar "2"0"002239 } \def\models {\Umathchar "3"0"0022A7 } \def\mp {\Umathchar "2"0"002213 } \def\Mu {\Umathchar "0"0"00039C } \def\mu {\Umathchar "0"0"0003BC } \def\multimap {\Umathchar "3"0"0022B8 } \def\napprox {\Umathchar "3"0"002249 } \def\napproxEq {\Umathchar "3"0"002246 } \def\nasymp {\Umathchar "3"0"00226D } \def\natural {\Umathchar "0"0"00266E } \def\naturalnumbers {\Umathchar "0"0"002115 } \def\ncong {\Umathchar "3"0"002246 } \def\ndivides {\Umathchar "2"0"002224 } \def\ne {\Umathchar "3"0"002260 } \def\nearrow {\Umathchar "3"0"002197 } \def\Nearrow {\Umathchar "3"0"0021D7 } \def\neg {\Umathchar "0"0"0000AC } \def\negativesign {\Umathchar "2"0"00207B } \def\neq {\Umathchar "3"0"002260 } \def\nequiv {\Umathchar "3"0"002262 } \def\neswarrow {\Umathchar "3"0"002922 } \def\nexists {\Umathchar "0"0"002204 } \def\ngeq {\Umathchar "3"0"002271 } \def\ngtr {\Umathchar "3"0"00226F } \def\ngtrless {\Umathchar "3"0"002279 } \def\ngtrsim {\Umathchar "3"0"002275 } \def\nHdownarrow {\Umathchar "3"0"0021DF } \def\nHuparrow {\Umathchar "3"0"0021DE } \def\ni {\Umathchar "3"0"00220B } \def\nin {\Umathchar "3"0"002209 } \def\nleftarrow {\Umathchar "3"0"00219A } \def\nLeftarrow {\Umathchar "3"0"0021CD } \def\nleftrightarrow {\Umathchar "3"0"0021AE } \def\nLeftrightarrow {\Umathchar "3"0"0021CE } \def\nleq {\Umathchar "3"0"002270 } \def\nless {\Umathchar "3"0"00226E } \def\nlessgtr {\Umathchar "3"0"002278 } \def\nlesssim {\Umathchar "3"0"002274 } \def\nmid {\Umathchar "3"0"002224 } \def\nni {\Umathchar "3"0"00220C } \def\not {\Umathchar "3"0"000338 } \def\notin {\Umathchar "3"0"002209 } \def\nowns {\Umathchar "3"0"00220C } \def\nparallel {\Umathchar "3"0"002226 } \def\nprec {\Umathchar "3"0"002280 } \def\npreccurlyeq {\Umathchar "3"0"0022E0 } \def\nrightarrow {\Umathchar "3"0"00219B } \def\nRightarrow {\Umathchar "3"0"0021CF } \def\nsim {\Umathchar "3"0"002241 } \def\nsimeq {\Umathchar "3"0"002244 } \def\nsqsubseteq {\Umathchar "3"0"0022E2 } \def\nsqsupseteq {\Umathchar "3"0"0022E3 } \def\nsubset {\Umathchar "3"0"002284 } \def\nsubseteq {\Umathchar "3"0"002288 } \def\nsucc {\Umathchar "3"0"002281 } \def\nsucccurlyeq {\Umathchar "3"0"0022E1 } \def\nsupset {\Umathchar "3"0"002285 } \def\nsupseteq {\Umathchar "3"0"002289 } \def\ntriangleleft {\Umathchar "3"0"0022EB } \def\ntrianglelefteq {\Umathchar "3"0"0022EC } \def\ntriangleright {\Umathchar "3"0"0022EA } \def\ntrianglerighteq {\Umathchar "3"0"0022ED } \def\Nu {\Umathchar "0"0"00039D } \def\nu {\Umathchar "0"0"0003BD } \def\nvdash {\Umathchar "3"0"0022AC } \def\nvDash {\Umathchar "3"0"0022AD } \def\nVdash {\Umathchar "3"0"0022AE } \def\nVDash {\Umathchar "3"0"0022AF } \def\nvleftarrow {\Umathchar "3"0"0021F7 } \def\nVleftarrow {\Umathchar "3"0"0021FA } \def\nvleftrightarrow {\Umathchar "3"0"0021F9 } \def\nVleftrightarrow {\Umathchar "3"0"0021FC } \def\nvrightarrow {\Umathchar "3"0"0021F8 } \def\nVrightarrow {\Umathchar "3"0"0021FB } \def\nwarrow {\Umathchar "3"0"002196 } \def\Nwarrow {\Umathchar "3"0"0021D6 } \def\nwsearrow {\Umathchar "3"0"002921 } \def\odot {\Umathchar "2"0"002299 } \def\ohm {\Umathchar "0"0"002126 } \def\oiiint {\Umathchar "1"0"002230 } \def\oiint {\Umathchar "1"0"00222F } \def\oint {\Umathchar "1"0"00222E } \def\ointclockwise {\Umathchar "1"0"002232 } \def\ointctrclockwise {\Umathchar "1"0"002233 } \def\Omega {\Umathchar "0"0"0003A9 } \def\omega {\Umathchar "0"0"0003C9 } \def\Omicron {\Umathchar "0"0"00039F } \def\omicron {\Umathchar "0"0"0003BF } \def\ominus {\Umathchar "2"0"002296 } \def\oplus {\Umathchar "2"0"002295 } \def\oslash {\Umathchar "2"0"002298 } \def\otimes {\Umathchar "2"0"002297 } \def\overbar {\Umathaccent"0"0"00203E } \def\overbrace {\Umathaccent"0"0"0023DE } \def\overbracket {\Umathaccent"0"0"0023B4 } \def\overparent {\Umathaccent"0"0"0023DC } \def\owns {\Umathchar "3"0"00220B } \def\P {\Umathchar "0"0"0000B6 } \def\parallel {\Umathchar "3"0"002225 } \def\partial {\Umathchar "0"0"002202 } \def\perp {\Umathchar "3"0"0022A5 } \def\Phi {\Umathchar "0"0"0003A6 } \def\phi {\Umathchar "0"0"0003D5 } \def\Pi {\Umathchar "0"0"0003A0 } \def\pi {\Umathchar "0"0"0003C0 } \def\pitchfork {\Umathchar "3"0"0022D4 } \def\Plankconst {\Umathchar "0"0"00210E } \def\pm {\Umathchar "2"0"0000B1 } \def\positivesign {\Umathchar "2"0"00207A } \def\prec {\Umathchar "3"0"00227A } \def\precapprox {\Umathchar "3"0"002AB7 } \def\preccurlyeq {\Umathchar "3"0"00227C } \def\preceq {\Umathchar "3"0"002AAF } \def\preceqq {\Umathchar "3"0"002AB3 } \def\precnapprox {\Umathchar "3"0"002AB9 } \def\precneq {\Umathchar "3"0"002AB1 } \def\precneqq {\Umathchar "3"0"002AB5 } \def\precnsim {\Umathchar "3"0"0022E8 } \def\precsim {\Umathchar "3"0"00227E } \def\prime {\Umathchar "0"0"002032 } \def\primes {\Umathchar "0"0"002119 } \def\prod {\Umathchar "1"0"00220F } \def\PropertyLine {\Umathchar "0"0"00214A } \def\propto {\Umathchar "3"0"00221D } \def\Psi {\Umathchar "0"0"0003A8 } \def\psi {\Umathchar "0"0"0003C8 } \def\questionedeq {\Umathchar "3"0"00225F } \def\rangle {\Udelimiter "5"0"0027E9 } \def\rationals {\Umathchar "0"0"00211A } \def\rbrace {\Udelimiter "5"0"00007D } \def\rbrack {\Udelimiter "5"0"00005D } \def\rceil {\Udelimiter "5"0"002309 } \def\rceiling {\Udelimiter "5"0"002309 } \def\Rdsh {\Umathchar "3"0"0021B3 } \def\Re {\Umathchar "0"0"00211C } \def\reals {\Umathchar "0"0"00211D } \def\Relbar {\Umathchar "3"0"00003D } \def\relbar {\Umathchar "3"0"002212 } \def\restriction {\Umathchar "3"0"0021BE } \def\rfloor {\Udelimiter "5"0"00230B } \def\rgroup {\Udelimiter "5"0"0027EF } \def\Rho {\Umathchar "0"0"0003A1 } \def\rho {\Umathchar "0"0"0003C1 } \def\rhook {\Umathchar "3"0"0FE323 } \def\rhooknearrow {\Umathchar "3"0"002924 } \def\rhookswarrow {\Umathchar "3"0"002926 } \def\rightangle {\Umathchar "0"0"00221F } \def\rightarrow {\Umathchar "3"0"002192 } \def\Rightarrow {\Umathchar "3"0"0021D2 } \def\rightarrowbar {\Umathchar "3"0"0021E5 } \def\rightarrowtail {\Umathchar "3"0"0021A3 } \def\rightarrowtriangle {\Umathchar "3"0"0021FE } \def\rightdasharrow {\Umathchar "3"0"0021E2 } \def\rightharpoondown {\Umathchar "3"0"0021C1 } \def\rightharpoonup {\Umathchar "3"0"0021C0 } \def\rightleftarrows {\Umathchar "3"0"0021C4 } \def\rightleftharpoons {\Umathchar "3"0"0021CC } \def\rightrightarrows {\Umathchar "3"0"0021C9 } \def\rightsquigarrow {\Umathchar "3"0"0021DD } \def\rightthreearrows {\Umathchar "3"0"0021F6 } \def\rightthreetimes {\Umathchar "2"0"0022CC } \def\rightwavearrow {\Umathchar "3"0"00219D } \def\rightwhitearrow {\Umathchar "0"0"0021E8 } \def\risingdotseq {\Umathchar "3"0"002253 } \def\rmoustache {\Udelimiter "5"0"0023B1 } \def\rneq {\Umathchar "3"0"002A88 } \def\rparent {\Udelimiter "5"0"000029 } \def\rrangle {\Udelimiter "5"0"0027EB } \def\rrbracket {\Udelimiter "5"0"0027E7 } \def\Rrightarrow {\Umathchar "3"0"0021DB } \def\Rsh {\Umathchar "3"0"0021B1 } \def\rtimes {\Umathchar "2"0"0022CA } \def\rvert {\Udelimiter "5"0"00007C } \def\rVert {\Udelimiter "5"0"002016 } \def\S {\Umathchar "0"0"0000A7 } \def\searrow {\Umathchar "3"0"002198 } \def\Searrow {\Umathchar "3"0"0021D8 } \def\setminus {\Umathchar "2"0"002216 } \def\sharp {\Umathchar "0"0"00266F } \def\Sigma {\Umathchar "0"0"0003A3 } \def\sigma {\Umathchar "0"0"0003C3 } \def\sim {\Umathchar "3"0"00223C } \def\simeq {\Umathchar "3"0"002243 } \def\slash {\Umathchar "0"0"002044 } \def\smile {\Umathchar "3"0"002323 } \def\solidus {\Udelimiter "5"0"002044 } \def\spadesuit {\Umathchar "0"0"002660 } \def\sphericalangle {\Umathchar "0"0"002222 } \def\sqcap {\Umathchar "2"0"002293 } \def\sqcup {\Umathchar "2"0"002294 } \def\sqsubset {\Umathchar "3"0"00228F } \def\sqsubseteq {\Umathchar "2"0"002291 } \def\sqsubsetneq {\Umathchar "3"0"0022E4 } \def\sqsupset {\Umathchar "3"0"002290 } \def\sqsupseteq {\Umathchar "2"0"002292 } \def\sqsupsetneq {\Umathchar "3"0"0022E5 } \def\square {\Umathchar "0"0"0025A1 } \def\squaredots {\Umathchar "3"0"002237 } \def\star {\Umathchar "2"0"0022C6 } \def\stareq {\Umathchar "3"0"00225B } \def\subset {\Umathchar "3"0"002282 } \def\Subset {\Umathchar "3"0"0022D0 } \def\subseteq {\Umathchar "3"0"002286 } \def\subseteqq {\Umathchar "3"0"002AC5 } \def\subsetneq {\Umathchar "3"0"00228A } \def\subsetneqq {\Umathchar "3"0"002ACB } \def\succ {\Umathchar "3"0"00227B } \def\succapprox {\Umathchar "3"0"002AB8 } \def\succcurlyeq {\Umathchar "3"0"00227D } \def\succeq {\Umathchar "3"0"002AB0 } \def\succeqq {\Umathchar "3"0"002AB4 } \def\succnapprox {\Umathchar "3"0"002ABA } \def\succneq {\Umathchar "3"0"002AB2 } \def\succneqq {\Umathchar "3"0"002AB6 } \def\succnsim {\Umathchar "3"0"0022E9 } \def\succsim {\Umathchar "3"0"00227F } \def\sum {\Umathchar "1"0"002211 } \def\supset {\Umathchar "3"0"002283 } \def\Supset {\Umathchar "3"0"0022D1 } \def\supseteq {\Umathchar "3"0"002287 } \def\supseteqq {\Umathchar "3"0"002AC6 } \def\supsetneq {\Umathchar "3"0"00228B } \def\supsetneqq {\Umathchar "3"0"002ACC } \def\surd {\Umathchar "2"0"00221A } \def\swarrow {\Umathchar "3"0"002199 } \def\Swarrow {\Umathchar "3"0"0021D9 } \def\Tau {\Umathchar "0"0"0003A4 } \def\tau {\Umathchar "0"0"0003C4 } \def\therefore {\Umathchar "3"0"002234 } \def\Theta {\Umathchar "0"0"000398 } \def\theta {\Umathchar "0"0"0003B8 } \def\tilde {\Umathaccent"0"0"0002DC } \def\times {\Umathchar "2"0"0000D7 } \def\to {\Umathchar "3"0"002192 } \def\top {\Umathchar "0"0"0022A4 } \def\triangle {\Umathchar "0"0"0025B3 } \def\triangledown {\Umathchar "2"0"0025BD } \def\triangleleft {\Umathchar "2"0"0025C1 } \def\triangleq {\Umathchar "3"0"00225C } \def\triangleright {\Umathchar "2"0"0025B7 } \def\tripleprime {\Umathchar "0"0"002034 } \def\turnediota {\Umathchar "0"0"002129 } \def\twoheaddownarrow {\Umathchar "3"0"0021A1 } \def\twoheadleftarrow {\Umathchar "3"0"00219E } \def\twoheadrightarrow {\Umathchar "3"0"0021A0 } \def\twoheadrightarrowtail {\Umathchar "3"0"002916 } \def\twoheaduparrow {\Umathchar "3"0"00219F } \def\udots {\Umathchar "0"0"0022F0 } \def\ulcorner {\Udelimiter "4"0"00231C } \def\underbar {\Umathaccent bottom "0"0"00203E } \def\underbrace {\Umathaccent bottom "0"0"0023DF } \def\underbracket {\Umathaccent bottom "0"0"0023B5 } \def\underparent {\Umathaccent bottom "0"0"0023DD } \def\upand {\Umathchar "2"0"00214B } \def\uparrow {\Umathchar "3"0"002191 } \def\Uparrow {\Umathchar "3"0"0021D1 } \def\updasharrow {\Umathchar "3"0"0021E1 } \def\updownarrow {\Umathchar "3"0"002195 } \def\Updownarrow {\Umathchar "3"0"0021D5 } \def\updownarrowbar {\Umathchar "0"0"0021A8 } \def\updownarrows {\Umathchar "3"0"0021C5 } \def\upharpoonleft {\Umathchar "3"0"0021BF } \def\upharpoonright {\Umathchar "3"0"0021BE } \def\uplus {\Umathchar "2"0"00228E } \def\Upsilon {\Umathchar "0"0"0003A5 } \def\upsilon {\Umathchar "0"0"0003C5 } \def\upuparrows {\Umathchar "3"0"0021C8 } \def\upwhitearrow {\Umathchar "0"0"0021E7 } \def\urcorner {\Udelimiter "5"0"00231D } \def\Uuparrow {\Umathchar "3"0"00290A } \def\varepsilon {\Umathchar "0"0"0003B5 } \def\varkappa {\Umathchar "0"0"0003F0 } \def\varkappa {\Umathchar "0"0"0003F0 } \def\varnothing {\Umathchar "0"0"002300 } \def\varphi {\Umathchar "0"0"0003C6 } \def\varpi {\Umathchar "0"0"0003D6 } \def\varrho {\Umathchar "0"0"01D71A } \def\varsigma {\Umathchar "0"0"0003C2 } \def\vartheta {\Umathchar "0"0"01D717 } \def\varTheta {\Umathchar "0"0"0003D1 } \def\vdash {\Umathchar "3"0"0022A2 } \def\vDash {\Umathchar "3"0"0022A8 } \def\Vdash {\Umathchar "3"0"0022A9 } \def\VDash {\Umathchar "3"0"0022AB } \def\vdots {\Umathchar "0"0"0022EE } \def\vec {\Umathaccent"0"0"0020D7 } \def\vee {\Umathchar "2"0"002228 } \def\veebar {\Umathchar "2"0"0022BB } \def\veeeq {\Umathchar "3"0"00225A } \def\vert {\Udelimiter "0"0"00007C } \def\Vert {\Udelimiter "0"0"002016 } \def\Vvdash {\Umathchar "3"0"0022AA } \def\wedge {\Umathchar "2"0"002227 } \def\wedgeeq {\Umathchar "3"0"002259 } \def\whitearrowupfrombar {\Umathchar "0"0"0021EB } \def\widehat {\Umathaccent"0"0"000302 } \def\widetilde {\Umathaccent"0"0"000303 } \def\wp {\Umathchar "0"0"002118 } \def\wr {\Umathchar "2"0"002240 } \def\Xi {\Umathchar "0"0"00039E } \def\xi {\Umathchar "0"0"0003BE } \def\yen {\Umathchar "0"0"0000A5 } \def\Zeta {\Umathchar "0"0"000396 } \def\zeta {\Umathchar "0"0"0003B6 } % a few definitions: \def\sqrt{\Uroot "0 "221A } % \skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177 % \skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60 \chardef\% = "25 \chardef\& = "26 \chardef\# = "23 \chardef\$ = "24 \chardef\_ = "5F \let\ss ß \let\ae æ \let\oe œ \let\o ø \let\AE Æ \let\OE Œ \let\O Ø \let\i ı \let\aa å \let\l ł \let\L Ł \let\AA Å \let\copyright © % just use utf \def\`#1{\string\`\string{#1\string}} \def\'#1{\string\'\string{#1\string}} \def\v#1{\string\v\string{#1\string}} \def\u#1{\string\u\string{#1\string}} \def\=#1{\string\=\string{#1\string}} \def\^#1{\string\^\string{#1\string}} \def\.#1{\string\.\string{#1\string}} \def\H#1{\string\H\string{#1\string}} \def\~#1{\string\~\string{#1\string}} \def\"#1{\string\"\string{#1\string}} \def\d#1{\string\d\string{#1\string}} \def\b#1{\string\b\string{#1\string}} \def\c#1{\string\c\string{#1\string}} \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-languages.tex0000644000175000017500000000071312130411274027661 0ustar norbertnorbert%D \module %D [ file=luatex-fonts, %D version=2009.12.01, %D title=\LUATEX\ Support Macros, %D subtitle=Generic \OPENTYPE\ Font Handler, %D author=Hans Hagen, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D Cf. discussion on \CONTEXT\ list: \directlua { dofile(kpse.find_file("luatex-languages.lua","tex")) } \def\loadpatterns#1{\directlua{tex.language = languages.loadpatterns("#1")}} \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-preprocessor-test.tex0000644000175000017500000000125611754241457031440 0ustar norbertnorbert\ifdefined\inputpreprocessed \def\TestOne[#1]% {test one: [#1]\par} \def\TestTwo#some% {test two: #some\par} \def\TestThree[#whatever][#more]% {test three: [#more] and [#whatever]\par} \def\TestFour[#one]#two% {\def\TestFive[#alpha][#one]% {test four and five: [#one], [#two] and [#alpha]}\par} \def\TestSix[#{one}]#{two}% {test six: [#{one}] and #{two}\par} \TestOne [one] \TestTwo {one} \TestThree[one][two] \TestFour [one]{two} \TestFive [one][two] \TestSix [one]{two} \else \input{luatex-preprocessor.tex} \inputpreprocessed{luatex-preprocessor-test.tex} \expandafter \end \fi context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-plain.tex0000644000175000017500000000111112161703335027015 0ustar norbertnorbert%D \module %D [ file=luatex-plain, %D version=2009.12.01, %D title=\LUATEX\ Macros, %D subtitle=Plain Format, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] \input plain \directlua {tex.enableprimitives('', tex.extraprimitives())} \pdfoutput=1 \everyjob \expandafter {% \the\everyjob \input {luatex-basics}% \input {luatex-fonts}% \input {luatex-math}% \input {luatex-languages}% \input {luatex-mplib}% } \edef\fmtversion{\fmtversion+luatex} \dump context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-swiglib.lua0000644000175000017500000000422112130411274027332 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-swiglib'] = { version = 1.001, comment = "companion to luatex-swiglib.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local savedrequire = require local libsuffix = os.type == "windows" and ".dll" or ".so" function requireswiglib(required,version) local library = package.loaded[required] if library then return library else local name = string.gsub(required,"%.","/") .. libsuffix local list = kpse.show_path("clua") for root in string.gmatch(list,"([^;]+)") do local full = false if type(version) == "string" and version ~= "" then full = root .. "/" .. version .. "/" .. name full = lfs.isfile(full) and full end if not full then full = root .. "/" .. name full = lfs.isfile(full) and full end if full then local path, base = string.match(full,"^(.-)([^\\/]+)" .. libsuffix .."$") local savedlibrary = package.loaded[base] package.loaded[base] = nil local savedpath = lfs.currentdir() lfs.chdir(path) library = package.loadlib(full,"luaopen_" .. base) if type(library) == "function" then library = library() texio.write("") end lfs.chdir(savedpath) package.loaded[base] = savedlibrary package.loaded[required] = library return library end end texio.write("") end function require(name) if string.find(name,"^swiglib%.") then return requireswiglib(name) else return savedrequire(name) end end function swiglib(name,version) return requireswiglib("swiglib." .. name,version) end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-merged.lua0000644000175000017500000127260412161703335030307 0ustar norbertnorbert-- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua -- merge date : 05/28/13 00:34:00 do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-lua']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$") _MAJORVERSION=tonumber(major) or 5 _MINORVERSION=tonumber(minor) or 1 _LUAVERSION=_MAJORVERSION+_MINORVERSION/10 if not lpeg then lpeg=require("lpeg") end if loadstring then local loadnormal=load function load(first,...) if type(first)=="string" then return loadstring(first,...) else return loadnormal(first,...) end end else loadstring=load end if not ipairs then local function iterate(a,i) i=i+1 local v=a[i] if v~=nil then return i,v end end function ipairs(a) return iterate,a,0 end end if not pairs then function pairs(t) return next,t end end if not table.unpack then table.unpack=_G.unpack elseif not unpack then _G.unpack=table.unpack end if not package.loaders then package.loaders=package.searchers end local print,select,tostring=print,select,tostring local inspectors={} function setinspector(inspector) inspectors[#inspectors+1]=inspector end function inspect(...) for s=1,select("#",...) do local value=select(s,...) local done=false for i=1,#inspectors do done=inspectors[i](value) if done then break end end if not done then print(tostring(value)) end end end local dummy=function() end function optionalrequire(...) local ok,result=xpcall(require,dummy,...) if ok then return result end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-lpeg']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } lpeg=require("lpeg") local type,next,tostring=type,next,tostring local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format local floor=math.floor local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end) lpeg.patterns=lpeg.patterns or {} local patterns=lpeg.patterns local anything=P(1) local endofstring=P(-1) local alwaysmatched=P(true) patterns.anything=anything patterns.endofstring=endofstring patterns.beginofstring=alwaysmatched patterns.alwaysmatched=alwaysmatched local digit,sign=R('09'),S('+-') local cr,lf,crlf=P("\r"),P("\n"),P("\r\n") local newline=crlf+S("\r\n") local escaped=P("\\")*anything local squote=P("'") local dquote=P('"') local space=P(" ") local utfbom_32_be=P('\000\000\254\255') local utfbom_32_le=P('\255\254\000\000') local utfbom_16_be=P('\255\254') local utfbom_16_le=P('\254\255') local utfbom_8=P('\239\187\191') local utfbom=utfbom_32_be+utfbom_32_le+utfbom_16_be+utfbom_16_le+utfbom_8 local utftype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")+alwaysmatched*Cc("utf-8") local utfoffset=utfbom_32_be*Cc(4)+utfbom_32_le*Cc(4)+utfbom_16_be*Cc(2)+utfbom_16_le*Cc(2)+utfbom_8*Cc(3)+Cc(0) local utf8next=R("\128\191") patterns.utf8one=R("\000\127") patterns.utf8two=R("\194\223")*utf8next patterns.utf8three=R("\224\239")*utf8next*utf8next patterns.utf8four=R("\240\244")*utf8next*utf8next*utf8next patterns.utfbom=utfbom patterns.utftype=utftype patterns.utfoffset=utfoffset local utf8char=patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four local validutf8char=utf8char^0*endofstring*Cc(true)+Cc(false) local utf8character=P(1)*R("\128\191")^0 patterns.utf8=utf8char patterns.utf8char=utf8char patterns.utf8character=utf8character patterns.validutf8=validutf8char patterns.validutf8char=validutf8char local eol=S("\n\r") local spacer=S(" \t\f\v") local whitespace=eol+spacer local nonspacer=1-spacer local nonwhitespace=1-whitespace patterns.eol=eol patterns.spacer=spacer patterns.whitespace=whitespace patterns.nonspacer=nonspacer patterns.nonwhitespace=nonwhitespace local stripper=spacer^0*C((spacer^0*nonspacer^1)^0) local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0)) patterns.stripper=stripper patterns.collapser=collapser patterns.digit=digit patterns.sign=sign patterns.cardinal=sign^0*digit^1 patterns.integer=sign^0*digit^1 patterns.unsigned=digit^0*P('.')*digit^1 patterns.float=sign^0*patterns.unsigned patterns.cunsigned=digit^0*P(',')*digit^1 patterns.cfloat=sign^0*patterns.cunsigned patterns.number=patterns.float+patterns.integer patterns.cnumber=patterns.cfloat+patterns.integer patterns.oct=P("0")*R("07")^1 patterns.octal=patterns.oct patterns.HEX=P("0x")*R("09","AF")^1 patterns.hex=P("0x")*R("09","af")^1 patterns.hexadecimal=P("0x")*R("09","AF","af")^1 patterns.lowercase=R("az") patterns.uppercase=R("AZ") patterns.letter=patterns.lowercase+patterns.uppercase patterns.space=space patterns.tab=P("\t") patterns.spaceortab=patterns.space+patterns.tab patterns.newline=newline patterns.emptyline=newline^1 patterns.equal=P("=") patterns.comma=P(",") patterns.commaspacer=P(",")*spacer^0 patterns.period=P(".") patterns.colon=P(":") patterns.semicolon=P(";") patterns.underscore=P("_") patterns.escaped=escaped patterns.squote=squote patterns.dquote=dquote patterns.nosquote=(escaped+(1-squote))^0 patterns.nodquote=(escaped+(1-dquote))^0 patterns.unsingle=(squote/"")*patterns.nosquote*(squote/"") patterns.undouble=(dquote/"")*patterns.nodquote*(dquote/"") patterns.unquoted=patterns.undouble+patterns.unsingle patterns.unspacer=((patterns.spacer^1)/"")^0 patterns.singlequoted=squote*patterns.nosquote*squote patterns.doublequoted=dquote*patterns.nodquote*dquote patterns.quoted=patterns.doublequoted+patterns.singlequoted patterns.propername=R("AZ","az","__")*R("09","AZ","az","__")^0*P(-1) patterns.somecontent=(anything-newline-space)^1 patterns.beginline=#(1-newline) patterns.longtostring=Cs(whitespace^0/""*nonwhitespace^0*((whitespace^0/" "*(patterns.quoted+nonwhitespace)^1)^0)) local function anywhere(pattern) return P { P(pattern)+1*V(1) } end lpeg.anywhere=anywhere function lpeg.instringchecker(p) p=anywhere(p) return function(str) return lpegmatch(p,str) and true or false end end function lpeg.splitter(pattern,action) return (((1-P(pattern))^1)/action+1)^0 end function lpeg.tsplitter(pattern,action) return Ct((((1-P(pattern))^1)/action+1)^0) end local splitters_s,splitters_m,splitters_t={},{},{} local function splitat(separator,single) local splitter=(single and splitters_s[separator]) or splitters_m[separator] if not splitter then separator=P(separator) local other=C((1-separator)^0) if single then local any=anything splitter=other*(separator*C(any^0)+"") splitters_s[separator]=splitter else splitter=other*(separator*other)^0 splitters_m[separator]=splitter end end return splitter end local function tsplitat(separator) local splitter=splitters_t[separator] if not splitter then splitter=Ct(splitat(separator)) splitters_t[separator]=splitter end return splitter end lpeg.splitat=splitat lpeg.tsplitat=tsplitat function string.splitup(str,separator) if not separator then separator="," end return lpegmatch(splitters_m[separator] or splitat(separator),str) end local cache={} function lpeg.split(separator,str) local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) end function string.split(str,separator) if separator then local c=cache[separator] if not c then c=tsplitat(separator) cache[separator]=c end return lpegmatch(c,str) else return { str } end end local spacing=patterns.spacer^0*newline local empty=spacing*Cc("") local nonempty=Cs((1-spacing)^1)*spacing^-1 local content=(empty+nonempty)^1 patterns.textline=content local linesplitter=tsplitat(newline) patterns.linesplitter=linesplitter function string.splitlines(str) return lpegmatch(linesplitter,str) end local cache={} function lpeg.checkedsplit(separator,str) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end function string.checkedsplit(str,separator) local c=cache[separator] if not c then separator=P(separator) local other=C((1-separator)^1) c=Ct(separator^0*other*(separator^1*other)^0) cache[separator]=c end return lpegmatch(c,str) end local function f2(s) local c1,c2=byte(s,1,2) return c1*64+c2-12416 end local function f3(s) local c1,c2,c3=byte(s,1,3) return (c1*64+c2)*64+c3-925824 end local function f4(s) local c1,c2,c3,c4=byte(s,1,4) return ((c1*64+c2)*64+c3)*64+c4-63447168 end local utf8byte=patterns.utf8one/byte+patterns.utf8two/f2+patterns.utf8three/f3+patterns.utf8four/f4 patterns.utf8byte=utf8byte local cache={} function lpeg.stripper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs(((S(str)^1)/""+1)^0) cache[str]=s end return s else return Cs(((str^1)/""+1)^0) end end local cache={} function lpeg.keeper(str) if type(str)=="string" then local s=cache[str] if not s then s=Cs((((1-S(str))^1)/""+1)^0) cache[str]=s end return s else return Cs((((1-str)^1)/""+1)^0) end end function lpeg.frontstripper(str) return (P(str)+P(true))*Cs(anything^0) end function lpeg.endstripper(str) return Cs((1-P(str)*endofstring)^0) end function lpeg.replacer(one,two,makefunction,isutf) local pattern local u=isutf and utf8char or 1 if type(one)=="table" then local no=#one local p=P(false) if no==0 then for k,v in next,one do p=p+P(k)/v end pattern=Cs((p+u)^0) elseif no==1 then local o=one[1] one,two=P(o[1]),o[2] pattern=Cs((one/two+u)^0) else for i=1,no do local o=one[i] p=p+P(o[1])/o[2] end pattern=Cs((p+u)^0) end else pattern=Cs((P(one)/(two or "")+u)^0) end if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end function lpeg.finder(lst,makefunction) local pattern if type(lst)=="table" then pattern=P(false) if #lst==0 then for k,v in next,lst do pattern=pattern+P(k) end else for i=1,#lst do pattern=pattern+P(lst[i]) end end else pattern=P(lst) end pattern=(1-pattern)^0*pattern if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end local splitters_f,splitters_s={},{} function lpeg.firstofsplit(separator) local splitter=splitters_f[separator] if not splitter then separator=P(separator) splitter=C((1-separator)^0) splitters_f[separator]=splitter end return splitter end function lpeg.secondofsplit(separator) local splitter=splitters_s[separator] if not splitter then separator=P(separator) splitter=(1-separator)^0*separator*C(anything^0) splitters_s[separator]=splitter end return splitter end function lpeg.balancer(left,right) left,right=P(left),P(right) return P { left*((1-left-right)+V(1))^0*right } end local nany=utf8char/"" function lpeg.counter(pattern) pattern=Cs((P(pattern)/" "+nany)^0) return function(str) return #lpegmatch(pattern,str) end end utf=utf or (unicode and unicode.utf8) or {} local utfcharacters=utf and utf.characters or string.utfcharacters local utfgmatch=utf and utf.gmatch local utfchar=utf and utf.char lpeg.UP=lpeg.P if utfcharacters then function lpeg.US(str) local p=P(false) for uc in utfcharacters(str) do p=p+P(uc) end return p end elseif utfgmatch then function lpeg.US(str) local p=P(false) for uc in utfgmatch(str,".") do p=p+P(uc) end return p end else function lpeg.US(str) local p=P(false) local f=function(uc) p=p+P(uc) end lpegmatch((utf8char/f)^0,str) return p end end local range=utf8byte*utf8byte+Cc(false) function lpeg.UR(str,more) local first,last if type(str)=="number" then first=str last=more or first else first,last=lpegmatch(range,str) if not last then return P(str) end end if first==last then return P(str) elseif utfchar and (last-first<8) then local p=P(false) for i=first,last do p=p+P(utfchar(i)) end return p else local f=function(b) return b>=first and b<=last end return utf8byte/f end end function lpeg.is_lpeg(p) return p and lpegtype(p)=="pattern" end function lpeg.oneof(list,...) if type(list)~="table" then list={ list,... } end local p=P(list[1]) for l=2,#list do p=p+P(list[l]) end return p end local sort=table.sort local function copyindexed(old) local new={} for i=1,#old do new[i]=old end return new end local function sortedkeys(tab) local keys,s={},0 for key,_ in next,tab do s=s+1 keys[s]=key end sort(keys) return keys end function lpeg.append(list,pp,delayed,checked) local p=pp if #list>0 then local keys=copyindexed(list) sort(keys) for i=#keys,1,-1 do local k=keys[i] if p then p=P(k)+p else p=P(k) end end elseif delayed then local keys=sortedkeys(list) if p then for i=1,#keys,1 do local k=keys[i] local v=list[k] p=P(k)/list+p end else for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)+p else p=P(k) end end if p then p=p/list end end elseif checked then local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then if k==v then p=P(k)+p else p=P(k)/v+p end else if k==v then p=P(k) else p=P(k)/v end end end else local keys=sortedkeys(list) for i=1,#keys do local k=keys[i] local v=list[k] if p then p=P(k)/v+p else p=P(k)/v end end end return p end local function make(t) local p local keys=sortedkeys(t) for i=1,#keys do local k=keys[i] local v=t[k] if not p then if next(v) then p=P(k)*make(v) else p=P(k) end else if next(v) then p=p+P(k)*make(v) else p=p+P(k) end end end return p end function lpeg.utfchartabletopattern(list) local tree={} for i=1,#list do local t=tree for c in gmatch(list[i],".") do if not t[c] then t[c]={} end t=t[c] end end return make(tree) end patterns.containseol=lpeg.finder(eol) local function nextstep(n,step,result) local m=n%step local d=floor(n/step) if d>0 then local v=V(tostring(step)) local s=result.start for i=1,d do if s then s=v*s else s=v end end result.start=s end if step>1 and result.start then local v=V(tostring(step/2)) result[tostring(step)]=v*v end if step>0 then return nextstep(m,step/2,result) else return result end end function lpeg.times(pattern,n) return P(nextstep(n,2^16,{ "start",["1"]=pattern })) end local digit=R("09") local period=P(".") local zero=P("0") local trailingzeros=zero^0*-digit local case_1=period*trailingzeros/"" local case_2=period*(digit-trailingzeros)^1*(trailingzeros/"") local number=digit^1*(case_1+case_2) local stripper=Cs((number+1)^0) lpeg.patterns.stripzeros=stripper end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-functions']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } functions=functions or {} function functions.dummy() end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-string']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local string=string local sub,gmatch,format,char,byte,rep,lower=string.sub,string.gmatch,string.format,string.char,string.byte,string.rep,string.lower local lpegmatch,patterns=lpeg.match,lpeg.patterns local P,S,C,Ct,Cc,Cs=lpeg.P,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.Cs local unquoted=patterns.squote*C(patterns.nosquote)*patterns.squote+patterns.dquote*C(patterns.nodquote)*patterns.dquote function string.unquoted(str) return lpegmatch(unquoted,str) or str end function string.quoted(str) return format("%q",str) end function string.count(str,pattern) local n=0 for _ in gmatch(str,pattern) do n=n+1 end return n end function string.limit(str,n,sentinel) if #str>n then sentinel=sentinel or "..." return sub(str,1,(n-#sentinel))..sentinel else return str end end local stripper=patterns.stripper local collapser=patterns.collapser local longtostring=patterns.longtostring function string.strip(str) return lpegmatch(stripper,str) or "" end function string.collapsespaces(str) return lpegmatch(collapser,str) or "" end function string.longtostring(str) return lpegmatch(longtostring,str) or "" end local pattern=P(" ")^0*P(-1) function string.is_empty(str) if str=="" then return true else return lpegmatch(pattern,str) and true or false end end local anything=patterns.anything local allescapes=Cc("%")*S(".-+%?()[]*") local someescapes=Cc("%")*S(".-+%()[]") local matchescapes=Cc(".")*S("*?") local pattern_a=Cs ((allescapes+anything )^0 ) local pattern_b=Cs ((someescapes+matchescapes+anything )^0 ) local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") ) function string.escapedpattern(str,simple) return lpegmatch(simple and pattern_b or pattern_a,str) end function string.topattern(str,lowercase,strict) if str=="" or type(str)~="string" then return ".*" elseif strict then str=lpegmatch(pattern_c,str) else str=lpegmatch(pattern_b,str) end if lowercase then return lower(str) else return str end end function string.valid(str,default) return (type(str)=="string" and str~="" and str) or default or nil end string.itself=function(s) return s end local pattern=Ct(C(1)^0) function string.totable(str) return lpegmatch(pattern,str) end local replacer=lpeg.replacer("@","%%") function string.tformat(fmt,...) return format(lpegmatch(replacer,fmt),...) end string.quote=string.quoted string.unquote=string.unquoted end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-table']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,next,tostring,tonumber,ipairs,select=type,next,tostring,tonumber,ipairs,select local table,string=table,string local concat,sort,insert,remove=table.concat,table.sort,table.insert,table.remove local format,lower,dump=string.format,string.lower,string.dump local getmetatable,setmetatable=getmetatable,setmetatable local getinfo=debug.getinfo local lpegmatch,patterns=lpeg.match,lpeg.patterns local floor=math.floor local stripper=patterns.stripper function table.strip(tab) local lst,l={},0 for i=1,#tab do local s=lpegmatch(stripper,tab[i]) or "" if s=="" then else l=l+1 lst[l]=s end end return lst end function table.keys(t) if t then local keys,k={},0 for key,_ in next,t do k=k+1 keys[k]=key end return keys else return {} end end local function compare(a,b) local ta,tb=type(a),type(b) if ta==tb then return a0 then local n=0 for _,v in next,t do n=n+1 end if n==#t then local tt,nt={},0 for i=1,#t do local v=t[i] local tv=type(v) if tv=="number" then nt=nt+1 if hexify then tt[nt]=format("0x%04X",v) else tt[nt]=tostring(v) end elseif tv=="boolean" then nt=nt+1 tt[nt]=tostring(v) elseif tv=="string" then nt=nt+1 tt[nt]=format("%q",v) else tt=nil break end end return tt end end return nil end local propername=patterns.propername local function dummy() end local function do_serialize(root,name,depth,level,indexed) if level>0 then depth=depth.." " if indexed then handle(format("%s{",depth)) else local tn=type(name) if tn=="number" then if hexify then handle(format("%s[0x%04X]={",depth,name)) else handle(format("%s[%s]={",depth,name)) end elseif tn=="string" then if noquotes and not reserved[name] and lpegmatch(propername,name) then handle(format("%s%s={",depth,name)) else handle(format("%s[%q]={",depth,name)) end elseif tn=="boolean" then handle(format("%s[%s]={",depth,tostring(name))) else handle(format("%s{",depth)) end end end if root and next(root) then local first,last=nil,0 if compact then last=#root for k=1,last do if root[k]==nil then last=k-1 break end end if last>0 then first=1 end end local sk=sortedkeys(root) for i=1,#sk do local k=sk[i] local v=root[k] local t,tk=type(v),type(k) if compact and first and tk=="number" and k>=first and k<=last then if t=="number" then if hexify then handle(format("%s 0x%04X,",depth,v)) else handle(format("%s %s,",depth,v)) end elseif t=="string" then if reduce and tonumber(v) then handle(format("%s %s,",depth,v)) else handle(format("%s %q,",depth,v)) end elseif t=="table" then if not next(v) then handle(format("%s {},",depth)) elseif inline then local st=simple_table(v) if st then handle(format("%s { %s },",depth,concat(st,", "))) else do_serialize(v,k,depth,level+1,true) end else do_serialize(v,k,depth,level+1,true) end elseif t=="boolean" then handle(format("%s %s,",depth,tostring(v))) elseif t=="function" then if functions then handle(format('%s load(%q),',depth,dump(v))) else handle(format('%s "function",',depth)) end else handle(format("%s %q,",depth,tostring(v))) end elseif k=="__p__" then if false then handle(format("%s __p__=nil,",depth)) end elseif t=="number" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=0x%04X,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then if hexify then handle(format("%s [%s]=0x%04X,",depth,tostring(k),v)) else handle(format("%s [%s]=%s,",depth,tostring(k),v)) end elseif noquotes and not reserved[k] and lpegmatch(propername,k) then if hexify then handle(format("%s %s=0x%04X,",depth,k,v)) else handle(format("%s %s=%s,",depth,k,v)) end else if hexify then handle(format("%s [%q]=0x%04X,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end end elseif t=="string" then if reduce and tonumber(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,v)) else handle(format("%s [%s]=%q,",depth,k,v)) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,v)) else handle(format("%s [%q]=%q,",depth,k,v)) end end elseif t=="table" then if not next(v) then if tk=="number" then if hexify then handle(format("%s [0x%04X]={},",depth,k)) else handle(format("%s [%s]={},",depth,k)) end elseif tk=="boolean" then handle(format("%s [%s]={},",depth,tostring(k))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={},",depth,k)) else handle(format("%s [%q]={},",depth,k)) end elseif inline then local st=simple_table(v) if st then if tk=="number" then if hexify then handle(format("%s [0x%04X]={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%s]={ %s },",depth,k,concat(st,", "))) end elseif tk=="boolean" then handle(format("%s [%s]={ %s },",depth,tostring(k),concat(st,", "))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%q]={ %s },",depth,k,concat(st,", "))) end else do_serialize(v,k,depth,level+1) end else do_serialize(v,k,depth,level+1) end elseif t=="boolean" then if tk=="number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,tostring(v))) else handle(format("%s [%s]=%s,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,tostring(v))) else handle(format("%s [%q]=%s,",depth,k,tostring(v))) end elseif t=="function" then if functions then local f=getinfo(v).what=="C" and dump(dummy) or dump(v) if tk=="number" then if hexify then handle(format("%s [0x%04X]=load(%q),",depth,k,f)) else handle(format("%s [%s]=load(%q),",depth,k,f)) end elseif tk=="boolean" then handle(format("%s [%s]=load(%q),",depth,tostring(k),f)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=load(%q),",depth,k,f)) else handle(format("%s [%q]=load(%q),",depth,k,f)) end end else if tk=="number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,tostring(v))) else handle(format("%s [%s]=%q,",depth,k,tostring(v))) end elseif tk=="boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,tostring(v))) else handle(format("%s [%q]=%q,",depth,k,tostring(v))) end end end end if level>0 then handle(format("%s},",depth)) end end local function serialize(_handle,root,name,specification) local tname=type(name) if type(specification)=="table" then noquotes=specification.noquotes hexify=specification.hexify handle=_handle or specification.handle or print reduce=specification.reduce or false functions=specification.functions compact=specification.compact inline=specification.inline and compact if functions==nil then functions=true end if compact==nil then compact=true end if inline==nil then inline=compact end else noquotes=false hexify=false handle=_handle or print reduce=false compact=true inline=true functions=true end if tname=="string" then if name=="return" then handle("return {") else handle(name.."={") end elseif tname=="number" then if hexify then handle(format("[0x%04X]={",name)) else handle("["..name.."]={") end elseif tname=="boolean" then if name then handle("return {") else handle("{") end else handle("t={") end if root then if getmetatable(root) then local dummy=root._w_h_a_t_e_v_e_r_ root._w_h_a_t_e_v_e_r_=nil end if next(root) then do_serialize(root,name,"",0) end end handle("}") end function table.serialize(root,name,specification) local t,n={},0 local function flush(s) n=n+1 t[n]=s end serialize(flush,root,name,specification) return concat(t,"\n") end table.tohandle=serialize local maxtab=2*1024 function table.tofile(filename,root,name,specification) local f=io.open(filename,'w') if f then if maxtab>1 then local t,n={},0 local function flush(s) n=n+1 t[n]=s if n>maxtab then f:write(concat(t,"\n"),"\n") t,n={},0 end end serialize(flush,root,name,specification) f:write(concat(t,"\n"),"\n") else local function flush(s) f:write(s,"\n") end serialize(flush,root,name,specification) end f:close() io.flush() end end local function flattened(t,f,depth) if f==nil then f={} depth=0xFFFF elseif tonumber(f) then depth=f f={} elseif not depth then depth=0xFFFF end for k,v in next,t do if type(k)~="number" then if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end end for k=1,#t do local v=t[k] if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else f[#f+1]=v end end return f end table.flattened=flattened local function unnest(t,f) if not f then f={} end for i=1,#t do local v=t[i] if type(v)=="table" then if type(v[1])=="table" then unnest(v,f) else f[#f+1]=v end else f[#f+1]=v end end return f end function table.unnest(t) return unnest(t) end local function are_equal(a,b,n,m) if a and b and #a==#b then n=n or 1 m=m or #a for i=n,m do local ai,bi=a[i],b[i] if ai==bi then elseif type(ai)=="table" and type(bi)=="table" then if not are_equal(ai,bi) then return false end else return false end end return true else return false end end local function identical(a,b) for ka,va in next,a do local vb=b[ka] if va==vb then elseif type(va)=="table" and type(vb)=="table" then if not identical(va,vb) then return false end else return false end end return true end table.identical=identical table.are_equal=are_equal function table.compact(t) if t then for k,v in next,t do if not next(v) then t[k]=nil end end end end function table.contains(t,v) if t then for i=1,#t do if t[i]==v then return i end end end return false end function table.count(t) local n=0 for k,v in next,t do n=n+1 end return n end function table.swapped(t,s) local n={} if s then for k,v in next,s do n[k]=v end end for k,v in next,t do n[v]=k end return n end function table.mirrored(t) local n={} for k,v in next,t do n[v]=k n[k]=v end return n end function table.reversed(t) if t then local tt,tn={},#t if tn>0 then local ttn=0 for i=tn,1,-1 do ttn=ttn+1 tt[ttn]=t[i] end end return tt end end function table.reverse(t) if t then local n=#t for i=1,floor(n/2) do local j=n-i+1 t[i],t[j]=t[j],t[i] end return t end end function table.sequenced(t,sep,simple) if not t then return "" end local n=#t local s={} if n>0 then for i=1,n do s[i]=tostring(t[i]) end else n=0 for k,v in sortedhash(t) do if simple then if v==true then n=n+1 s[n]=k elseif v and v~="" then n=n+1 s[n]=k.."="..tostring(v) end else n=n+1 s[n]=k.."="..tostring(v) end end end return concat(s,sep or " | ") end function table.print(t,...) if type(t)~="table" then print(tostring(t)) else serialize(print,t,...) end end setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end) function table.sub(t,i,j) return { unpack(t,i,j) } end function table.is_empty(t) return not t or not next(t) end function table.has_one_entry(t) return t and not next(t,next(t)) end function table.loweredkeys(t) local l={} for k,v in next,t do l[lower(k)]=v end return l end function table.unique(old) local hash={} local new={} local n=0 for i=1,#old do local oi=old[i] if not hash[oi] then n=n+1 new[n]=oi hash[oi]=true end end return new end function table.sorted(t,...) sort(t,...) return t end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-io']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local io=io local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format local concat=table.concat local floor=math.floor local type=type if string.find(os.getenv("PATH"),";") then io.fileseparator,io.pathseparator="\\",";" else io.fileseparator,io.pathseparator="/",":" end local function readall(f) return f:read("*all") end local function readall(f) local size=f:seek("end") if size==0 then return "" elseif size<1024*1024 then f:seek("set",0) return f:read('*all') else local done=f:seek("set",0) if size<1024*1024 then step=1024*1024 elseif size>16*1024*1024 then step=16*1024*1024 else step=floor(size/(1024*1024))*1024*1024/8 end local data={} while true do local r=f:read(step) if not r then return concat(data) else data[#data+1]=r end end end end io.readall=readall function io.loaddata(filename,textmode) local f=io.open(filename,(textmode and 'r') or 'rb') if f then local data=readall(f) f:close() if #data>0 then return data end end end function io.savedata(filename,data,joiner) local f=io.open(filename,"wb") if f then if type(data)=="table" then f:write(concat(data,joiner or "")) elseif type(data)=="function" then data(f) else f:write(data or "") end f:close() io.flush() return true else return false end end function io.loadlines(filename,n) local f=io.open(filename,'r') if not f then elseif n then local lines={} for i=1,n do local line=f:read("*lines") if line then lines[#lines+1]=line else break end end f:close() lines=concat(lines,"\n") if #lines>0 then return lines end else local line=f:read("*line") or "" f:close() if #line>0 then return line end end end function io.loadchunk(filename,n) local f=io.open(filename,'rb') if f then local data=f:read(n or 1024) f:close() if #data>0 then return data end end end function io.exists(filename) local f=io.open(filename) if f==nil then return false else f:close() return true end end function io.size(filename) local f=io.open(filename) if f==nil then return 0 else local s=f:seek("end") f:close() return s end end function io.noflines(f) if type(f)=="string" then local f=io.open(filename) if f then local n=f and io.noflines(f) or 0 f:close() return n else return 0 end else local n=0 for _ in f:lines() do n=n+1 end f:seek('set',0) return n end end local nextchar={ [ 4]=function(f) return f:read(1,1,1,1) end, [ 2]=function(f) return f:read(1,1) end, [ 1]=function(f) return f:read(1) end, [-2]=function(f) local a,b=f:read(1,1) return b,a end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) return d,c,b,a end } function io.characters(f,n) if f then return nextchar[n or 1],f end end local nextbyte={ [4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(a),byte(b),byte(c),byte(d) end end, [3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(a),byte(b),byte(c) end end, [2]=function(f) local a,b=f:read(1,1) if b then return byte(a),byte(b) end end, [1]=function (f) local a=f:read(1) if a then return byte(a) end end, [-2]=function (f) local a,b=f:read(1,1) if b then return byte(b),byte(a) end end, [-3]=function(f) local a,b,c=f:read(1,1,1) if b then return byte(c),byte(b),byte(a) end end, [-4]=function(f) local a,b,c,d=f:read(1,1,1,1) if d then return byte(d),byte(c),byte(b),byte(a) end end } function io.bytes(f,n) if f then return nextbyte[n or 1],f else return nil,nil end end function io.ask(question,default,options) while true do io.write(question) if options then io.write(format(" [%s]",concat(options,"|"))) end if default then io.write(format(" [%s]",default)) end io.write(format(" ")) io.flush() local answer=io.read() answer=gsub(answer,"^%s*(.*)%s*$","%1") if answer=="" and default then return default elseif not options then return answer else for k=1,#options do if options[k]==answer then return answer end end local pattern="^"..answer for k=1,#options do local v=options[k] if find(v,pattern) then return v end end end end end local function readnumber(f,n,m) if m then f:seek("set",n) n=m end if n==1 then return byte(f:read(1)) elseif n==2 then local a,b=byte(f:read(2),1,2) return 256*a+b elseif n==3 then local a,b,c=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==4 then local a,b,c,d=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==8 then local a,b=readnumber(f,4),readnumber(f,4) return 256*a+b elseif n==12 then local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4) return 256*256*a+256*b+c elseif n==-2 then local b,a=byte(f:read(2),1,2) return 256*a+b elseif n==-3 then local c,b,a=byte(f:read(3),1,3) return 256*256*a+256*b+c elseif n==-4 then local d,c,b,a=byte(f:read(4),1,4) return 256*256*256*a+256*256*b+256*c+d elseif n==-8 then local h,g,f,e,d,c,b,a=byte(f:read(8),1,8) return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h else return 0 end end io.readnumber=readnumber function io.readstring(f,n,m) if m then f:seek("set",n) n=m end local str=gsub(f:read(n),"\000","") return str end if not io.i_limiter then function io.i_limiter() end end if not io.o_limiter then function io.o_limiter() end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-file']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } file=file or {} local file=file if not lfs then lfs=optionalrequire("lfs") end if not lfs then lfs={ getcurrentdir=function() return "." end, attributes=function() return nil end, isfile=function(name) local f=io.open(name,'rb') if f then f:close() return true end end, isdir=function(name) print("you need to load lfs") return false end } elseif not lfs.isfile then local attributes=lfs.attributes function lfs.isdir(name) return attributes(name,"mode")=="directory" end function lfs.isfile(name) return attributes(name,"mode")=="file" end end local insert,concat=table.insert,table.concat local match,find,gmatch=string.match,string.find,string.gmatch local lpegmatch=lpeg.match local getcurrentdir,attributes=lfs.currentdir,lfs.attributes local checkedsplit=string.checkedsplit local P,R,S,C,Cs,Cp,Cc,Ct=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cp,lpeg.Cc,lpeg.Ct local colon=P(":") local period=P(".") local periods=P("..") local fwslash=P("/") local bwslash=P("\\") local slashes=S("\\/") local noperiod=1-period local noslashes=1-slashes local name=noperiod^1 local suffix=period/""*(1-period-slashes)^1*-1 local pattern=C((1-(slashes^1*noslashes^1*-1))^1)*P(1) local function pathpart(name,default) return name and lpegmatch(pattern,name) or default or "" end local pattern=(noslashes^0*slashes)^1*C(noslashes^1)*-1 local function basename(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes^1)^0*Cs((1-suffix)^1)*suffix^0 local function nameonly(name) return name and lpegmatch(pattern,name) or name end local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1 local function suffixonly(name) return name and lpegmatch(pattern,name) or "" end local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("") local function suffixesonly(name) if name then return lpegmatch(pattern,name) else return "" end end file.pathpart=pathpart file.basename=basename file.nameonly=nameonly file.suffixonly=suffixonly file.suffix=suffixonly file.suffixesonly=suffixesonly file.suffixes=suffixesonly file.dirname=pathpart file.extname=suffixonly local drive=C(R("az","AZ"))*colon local path=C((noslashes^0*slashes)^0) local suffix=period*C(P(1-period)^0*P(-1)) local base=C((1-suffix)^0) local rest=C(P(1)^0) drive=drive+Cc("") path=path+Cc("") base=base+Cc("") suffix=suffix+Cc("") local pattern_a=drive*path*base*suffix local pattern_b=path*base*suffix local pattern_c=C(drive*path)*C(base*suffix) local pattern_d=path*rest function file.splitname(str,splitdrive) if not str then elseif splitdrive then return lpegmatch(pattern_a,str) else return lpegmatch(pattern_b,str) end end function file.splitbase(str) if str then return lpegmatch(pattern_d,str) else return "",str end end function file.nametotable(str,splitdrive) if str then local path,drive,subpath,name,base,suffix=lpegmatch(pattern_c,str) if splitdrive then return { path=path, drive=drive, subpath=subpath, name=name, base=base, suffix=suffix, } else return { path=path, name=name, base=base, suffix=suffix, } end end end local pattern=Cs(((period*(1-period-slashes)^1*-1)/""+1)^1) function file.removesuffix(name) return name and lpegmatch(pattern,name) end local suffix=period/""*(1-period-slashes)^1*-1 local pattern=Cs((noslashes^0*slashes^1)^0*((1-suffix)^1))*Cs(suffix) function file.addsuffix(filename,suffix,criterium) if not filename or not suffix or suffix=="" then return filename elseif criterium==true then return filename.."."..suffix elseif not criterium then local n,s=lpegmatch(pattern,filename) if not s or s=="" then return filename.."."..suffix else return filename end else local n,s=lpegmatch(pattern,filename) if s and s~="" then local t=type(criterium) if t=="table" then for i=1,#criterium do if s==criterium[i] then return filename end end elseif t=="string" then if s==criterium then return filename end end end return (n or filename).."."..suffix end end local suffix=period*(1-period-slashes)^1*-1 local pattern=Cs((1-suffix)^0) function file.replacesuffix(name,suffix) if name and suffix and suffix~="" then return lpegmatch(pattern,name).."."..suffix else return name end end local reslasher=lpeg.replacer(P("\\"),"/") function file.reslash(str) return str and lpegmatch(reslasher,str) end function file.is_writable(name) if not name then elseif lfs.isdir(name) then name=name.."/m_t_x_t_e_s_t.tmp" local f=io.open(name,"wb") if f then f:close() os.remove(name) return true end elseif lfs.isfile(name) then local f=io.open(name,"ab") if f then f:close() return true end else local f=io.open(name,"ab") if f then f:close() os.remove(name) return true end end return false end local readable=P("r")*Cc(true) function file.is_readable(name) if name then local a=attributes(name) return a and lpegmatch(readable,a.permissions) or false else return false end end file.isreadable=file.is_readable file.iswritable=file.is_writable function file.size(name) if name then local a=attributes(name) return a and a.size or 0 else return 0 end end function file.splitpath(str,separator) return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator) end function file.joinpath(tab,separator) return tab and concat(tab,separator or io.pathseparator) end local stripper=Cs(P(fwslash)^0/""*reslasher) local isnetwork=fwslash*fwslash*(1-fwslash)+(1-fwslash-colon)^1*colon local isroot=fwslash^1*-1 local hasroot=fwslash^1 local deslasher=lpeg.replacer(S("\\/")^1,"/") function file.join(...) local lst={... } local one=lst[1] if lpegmatch(isnetwork,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) return one.."/"..two elseif lpegmatch(isroot,one) then local two=lpegmatch(deslasher,concat(lst,"/",2)) if lpegmatch(hasroot,two) then return two else return "/"..two end elseif one=="" then return lpegmatch(stripper,concat(lst,"/",2)) else return lpegmatch(deslasher,concat(lst,"/")) end end local drivespec=R("az","AZ")^1*colon local anchors=fwslash+drivespec local untouched=periods+(1-period)^1*P(-1) local splitstarter=(Cs(drivespec*(bwslash/"/"+fwslash)^0)+Cc(false))*Ct(lpeg.splitat(S("/\\")^1)) local absolute=fwslash function file.collapsepath(str,anchor) if not str then return end if anchor==true and not lpegmatch(anchors,str) then str=getcurrentdir().."/"..str end if str=="" or str=="." then return "." elseif lpegmatch(untouched,str) then return lpegmatch(reslasher,str) end local starter,oldelements=lpegmatch(splitstarter,str) local newelements={} local i=#oldelements while i>0 do local element=oldelements[i] if element=='.' then elseif element=='..' then local n=i-1 while n>0 do local element=oldelements[n] if element~='..' and element~='.' then oldelements[n]='.' break else n=n-1 end end if n<1 then insert(newelements,1,'..') end elseif element~="" then insert(newelements,1,element) end i=i-1 end if #newelements==0 then return starter or "." elseif starter then return starter..concat(newelements,'/') elseif lpegmatch(absolute,str) then return "/"..concat(newelements,'/') else newelements=concat(newelements,'/') if anchor=="." and find(str,"^%./") then return "./"..newelements else return newelements end end end local validchars=R("az","09","AZ","--","..") local pattern_a=lpeg.replacer(1-validchars) local pattern_a=Cs((validchars+P(1)/"-")^1) local whatever=P("-")^0/"" local pattern_b=Cs(whatever*(1-whatever*-1)^1) function file.robustname(str,strict) if str then str=lpegmatch(pattern_a,str) or str if strict then return lpegmatch(pattern_b,str) or str else return str end end end file.readdata=io.loaddata file.savedata=io.savedata function file.copy(oldname,newname) if oldname and newname then local data=io.loaddata(oldname) if data and data~="" then file.savedata(newname,data) end end end local letter=R("az","AZ")+S("_-+") local separator=P("://") local qualified=period^0*fwslash+letter*colon+letter^1*separator+letter^1*fwslash local rootbased=fwslash+letter*colon lpeg.patterns.qualified=qualified lpeg.patterns.rootbased=rootbased function file.is_qualified_path(filename) return filename and lpegmatch(qualified,filename)~=nil end function file.is_rootbased_path(filename) return filename and lpegmatch(rootbased,filename)~=nil end function file.strip(name,dir) if name then local b,a=match(name,"^(.-)"..dir.."(.*)$") return a~="" and a or name end end function lfs.mkdirs(path) local full="" for sub in gmatch(path,"(/*[^\\/]+)") do full=full..sub lfs.mkdir(full) end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-boolean']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type,tonumber=type,tonumber boolean=boolean or {} local boolean=boolean function boolean.tonumber(b) if b then return 1 else return 0 end end function toboolean(str,tolerant) if str==nil then return false elseif str==false then return false elseif str==true then return true elseif str=="true" then return true elseif str=="false" then return false elseif not tolerant then return false elseif str==0 then return false elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end string.toboolean=toboolean function string.booleanstring(str) if str=="0" then return false elseif str=="1" then return true elseif str=="" then return false elseif str=="false" then return false elseif str=="true" then return true elseif (tonumber(str) or 0)>0 then return true else return str=="yes" or str=="on" or str=="t" end end function string.is_boolean(str,default) if type(str)=="string" then if str=="true" or str=="yes" or str=="on" or str=="t" then return true elseif str=="false" or str=="no" or str=="off" or str=="f" then return false end end return default end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['l-math']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local floor,sin,cos,tan=math.floor,math.sin,math.cos,math.tan if not math.round then function math.round(x) return floor(x+0.5) end end if not math.div then function math.div(n,m) return floor(n/m) end end if not math.mod then function math.mod(n,m) return n%m end end local pipi=2*math.pi/360 if not math.sind then function math.sind(d) return sin(d*pipi) end function math.cosd(d) return cos(d*pipi) end function math.tand(d) return tan(d*pipi) end end if not math.odd then function math.odd (n) return n%2~=0 end function math.even(n) return n%2==0 end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['util-str']={ version=1.001, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } utilities=utilities or {} utilities.strings=utilities.strings or {} local strings=utilities.strings local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub local load,dump=load,string.dump local tonumber,type,tostring=tonumber,type,tostring local unpack,concat=table.unpack,table.concat local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc local patterns,lpegmatch=lpeg.patterns,lpeg.match local utfchar,utfbyte=utf.char,utf.byte local loadstripped=_LUAVERSION<5.2 and load or function(str) return load(dump(load(str),true)) end if not number then number={} end local stripper=patterns.stripzeros local function points(n) return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536)) end local function basepoints(n) return (not n or n==0) and "0bp" or lpegmatch(stripper,format("%.5fbp",n*(7200/7227)/65536)) end number.points=points number.basepoints=basepoints local rubish=patterns.spaceortab^0*patterns.newline local anyrubish=patterns.spaceortab+patterns.newline local anything=patterns.anything local stripped=(patterns.spaceortab^1/"")*patterns.newline local leading=rubish^0/"" local trailing=(anyrubish^1*patterns.endofstring)/"" local redundant=rubish^3/"\n" local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0) function strings.collapsecrlf(str) return lpegmatch(pattern,str) end local repeaters={} function strings.newrepeater(str,offset) offset=offset or 0 local s=repeaters[str] if not s then s={} repeaters[str]=s end local t=s[offset] if t then return t end t={} setmetatable(t,{ __index=function(t,k) if not k then return "" end local n=k+offset local s=n>0 and rep(str,n) or "" t[k]=s return s end }) s[offset]=t return t end local extra,tab,start=0,0,4,0 local nspaces=strings.newrepeater(" ") string.nspaces=nspaces local pattern=Carg(1)/function(t) extra,tab,start=0,t or 7,1 end*Cs(( Cp()*patterns.tab/function(position) local current=(position-start+1)+extra local spaces=tab-(current-1)%tab if spaces>0 then extra=extra+spaces-1 return nspaces[spaces] else return "" end end+patterns.newline*Cp()/function(position) extra,start=0,position end+patterns.anything )^1) function strings.tabtospace(str,tab) return lpegmatch(pattern,str,1,tab or 7) end function strings.striplong(str) str=gsub(str,"^%s*","") str=gsub(str,"[\n\r]+ *","\n") return str end function strings.nice(str) str=gsub(str,"[:%-+_]+"," ") return str end local n=0 local sequenced=table.sequenced function string.autodouble(s,sep) if s==nil then return '""' end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ('"'..sequenced(s,sep or ",")..'"') end return ('"'..tostring(s)..'"') end function string.autosingle(s,sep) if s==nil then return "''" end local t=type(s) if t=="number" then return tostring(s) end if t=="table" then return ("'"..sequenced(s,sep or ",").."'") end return ("'"..tostring(s).."'") end local tracedchars={} string.tracedchars=tracedchars strings.tracers=tracedchars function string.tracedchar(b) if type(b)=="number" then return tracedchars[b] or (utfchar(b).." (U+"..format('%05X',b)..")") else local c=utfbyte(b) return tracedchars[c] or (b.." (U+"..format('%05X',c)..")") end end function number.signed(i) if i>0 then return "+",i else return "-",-i end end local preamble=[[ local type = type local tostring = tostring local tonumber = tonumber local format = string.format local concat = table.concat local signed = number.signed local points = number.points local basepoints = number.basepoints local utfchar = utf.char local utfbyte = utf.byte local lpegmatch = lpeg.match local nspaces = string.nspaces local tracedchar = string.tracedchar local autosingle = string.autosingle local autodouble = string.autodouble local sequenced = table.sequenced ]] local template=[[ %s %s return function(%s) return %s end ]] local arguments={ "a1" } setmetatable(arguments,{ __index=function(t,k) local v=t[k-1]..",a"..k t[k]=v return v end }) local prefix_any=C((S("+- .")+R("09"))^0) local prefix_tab=C((1-R("az","AZ","09","%%"))^0) local format_s=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',a%s)",f,n) else return format("(a%s or '')",n) end end local format_S=function(f) n=n+1 if f and f~="" then return format("format('%%%ss',tostring(a%s))",f,n) else return format("tostring(a%s)",n) end end local format_q=function() n=n+1 return format("(a%s and format('%%q',a%s) or '')",n,n) end local format_Q=function() n=n+1 return format("format('%%q',tostring(a%s))",n) end local format_i=function(f) n=n+1 if f and f~="" then return format("format('%%%si',a%s)",f,n) else return format("a%s",n) end end local format_d=format_i local format_I=function(f) n=n+1 return format("format('%%s%%%si',signed(a%s))",f,n) end local format_f=function(f) n=n+1 return format("format('%%%sf',a%s)",f,n) end local format_g=function(f) n=n+1 return format("format('%%%sg',a%s)",f,n) end local format_G=function(f) n=n+1 return format("format('%%%sG',a%s)",f,n) end local format_e=function(f) n=n+1 return format("format('%%%se',a%s)",f,n) end local format_E=function(f) n=n+1 return format("format('%%%sE',a%s)",f,n) end local format_x=function(f) n=n+1 return format("format('%%%sx',a%s)",f,n) end local format_X=function(f) n=n+1 return format("format('%%%sX',a%s)",f,n) end local format_o=function(f) n=n+1 return format("format('%%%so',a%s)",f,n) end local format_c=function() n=n+1 return format("utfchar(a%s)",n) end local format_C=function() n=n+1 return format("tracedchar(a%s)",n) end local format_r=function(f) n=n+1 return format("format('%%%s.0f',a%s)",f,n) end local format_h=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_H=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_u=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_U=function(f) n=n+1 if f=="-" then f=sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) else return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n) end end local format_p=function() n=n+1 return format("points(a%s)",n) end local format_b=function() n=n+1 return format("basepoints(a%s)",n) end local format_t=function(f) n=n+1 if f and f~="" then return format("concat(a%s,%q)",n,f) else return format("concat(a%s)",n) end end local format_T=function(f) n=n+1 if f and f~="" then return format("sequenced(a%s,%q)",n,f) else return format("sequenced(a%s)",n) end end local format_l=function() n=n+1 return format("(a%s and 'true' or 'false')",n) end local format_L=function() n=n+1 return format("(a%s and 'TRUE' or 'FALSE')",n) end local format_N=function() n=n+1 return format("tostring(tonumber(a%s) or a%s)",n,n) end local format_a=function(f) n=n+1 if f and f~="" then return format("autosingle(a%s,%q)",n,f) else return format("autosingle(a%s)",n) end end local format_A=function(f) n=n+1 if f and f~="" then return format("autodouble(a%s,%q)",n,f) else return format("autodouble(a%s)",n) end end local format_w=function(f) n=n+1 f=tonumber(f) if f then return format("nspaces[%s+a%s]",f,n) else return format("nspaces[a%s]",n) end end local format_W=function(f) return format("nspaces[%s]",tonumber(f) or 0) end local format_rest=function(s) return format("%q",s) end local format_extension=function(extensions,f,name) local extension=extensions[name] or "tostring(%s)" local f=tonumber(f) or 1 if f==0 then return extension elseif f==1 then n=n+1 local a="a"..n return format(extension,a,a) elseif f<0 then local a="a"..(n+f+1) return format(extension,a,a) else local t={} for i=1,f do n=n+1 t[#t+1]="a"..n end return format(extension,unpack(t)) end end local builder=Cs { "start", start=( ( P("%")/""*( V("!") +V("s")+V("q")+V("i")+V("d")+V("f")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o") +V("c")+V("C")+V("S") +V("Q") +V("N") +V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("h") +V("w") +V("W") +V("a") +V("A") +V("*") )+V("*") )*(P(-1)+Carg(1)) )^0, ["s"]=(prefix_any*P("s"))/format_s, ["q"]=(prefix_any*P("q"))/format_q, ["i"]=(prefix_any*P("i"))/format_i, ["d"]=(prefix_any*P("d"))/format_d, ["f"]=(prefix_any*P("f"))/format_f, ["g"]=(prefix_any*P("g"))/format_g, ["G"]=(prefix_any*P("G"))/format_G, ["e"]=(prefix_any*P("e"))/format_e, ["E"]=(prefix_any*P("E"))/format_E, ["x"]=(prefix_any*P("x"))/format_x, ["X"]=(prefix_any*P("X"))/format_X, ["o"]=(prefix_any*P("o"))/format_o, ["S"]=(prefix_any*P("S"))/format_S, ["Q"]=(prefix_any*P("Q"))/format_S, ["N"]=(prefix_any*P("N"))/format_N, ["c"]=(prefix_any*P("c"))/format_c, ["C"]=(prefix_any*P("C"))/format_C, ["r"]=(prefix_any*P("r"))/format_r, ["h"]=(prefix_any*P("h"))/format_h, ["H"]=(prefix_any*P("H"))/format_H, ["u"]=(prefix_any*P("u"))/format_u, ["U"]=(prefix_any*P("U"))/format_U, ["p"]=(prefix_any*P("p"))/format_p, ["b"]=(prefix_any*P("b"))/format_b, ["t"]=(prefix_tab*P("t"))/format_t, ["T"]=(prefix_tab*P("T"))/format_T, ["l"]=(prefix_tab*P("l"))/format_l, ["L"]=(prefix_tab*P("L"))/format_L, ["I"]=(prefix_any*P("I"))/format_I, ["w"]=(prefix_any*P("w"))/format_w, ["W"]=(prefix_any*P("W"))/format_W, ["a"]=(prefix_any*P("a"))/format_a, ["A"]=(prefix_any*P("A"))/format_A, ["*"]=Cs(((1-P("%"))^1+P("%%")/"%%%%")^1)/format_rest, ["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension, } local direct=Cs ( P("%")/""*Cc([[local format = string.format return function(str) return format("%]])*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*Cc([[",str) end]])*P(-1) ) local function make(t,str) local f local p local p=lpegmatch(direct,str) if p then f=loadstripped(p)() else n=0 p=lpegmatch(builder,str,1,"..",t._extensions_) if n>0 then p=format(template,preamble,t._preamble_,arguments[n],p) f=loadstripped(p)() else f=function() return str end end end t[str]=f return f end local function use(t,fmt,...) return t[fmt](...) end strings.formatters={} function strings.formatters.new() local t={ _extensions_={},_preamble_="",_type_="formatter" } setmetatable(t,{ __index=make,__call=use }) return t end local formatters=strings.formatters.new() string.formatters=formatters string.formatter=function(str,...) return formatters[str](...) end local function add(t,name,template,preamble) if type(t)=="table" and t._type_=="formatter" then t._extensions_[name]=template or "%s" if preamble then t._preamble_=preamble.."\n"..t._preamble_ end end end strings.formatters.add=add lpeg.patterns.xmlescape=Cs((P("<")/"<"+P(">")/">"+P("&")/"&"+P('"')/"""+P(1))^0) lpeg.patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0) add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],[[local xmlescape = lpeg.patterns.xmlescape]]) add(formatters,"tex",[[lpegmatch(texescape,%s)]],[[local texescape = lpeg.patterns.texescape]]) end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luat-basics-gen']={ version=1.100, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local dummyfunction=function() end local dummyreporter=function(c) return function(...) (texio.reporter or texio.write_nl)(c.." : "..string.formatters(...)) end end statistics={ register=dummyfunction, starttiming=dummyfunction, stoptiming=dummyfunction, elapsedtime=nil, } directives={ register=dummyfunction, enable=dummyfunction, disable=dummyfunction, } trackers={ register=dummyfunction, enable=dummyfunction, disable=dummyfunction, } experiments={ register=dummyfunction, enable=dummyfunction, disable=dummyfunction, } storage={ register=dummyfunction, shared={}, } logs={ new=dummyreporter, reporter=dummyreporter, messenger=dummyreporter, report=dummyfunction, } callbacks={ register=function(n,f) return callback.register(n,f) end, } utilities={ storage={ allocate=function(t) return t or {} end, mark=function(t) return t or {} end, }, } characters=characters or { data={} } texconfig.kpse_init=true resolvers=resolvers or {} local remapper={ otf="opentype fonts", ttf="truetype fonts", ttc="truetype fonts", dfont="truetype fonts", cid="cid maps", cidmap="cid maps", fea="font feature files", pfa="type1 fonts", pfb="type1 fonts", } function resolvers.findfile(name,fileformat) name=string.gsub(name,"\\","/") if not fileformat or fileformat=="" then fileformat=file.suffix(name) if fileformat=="" then fileformat="tex" end end fileformat=string.lower(fileformat) fileformat=remapper[fileformat] or fileformat local found=kpse.find_file(name,fileformat) if not found or found=="" then found=kpse.find_file(name,"other text files") end return found end resolvers.findbinfile=resolvers.findfile function resolvers.resolve(s) return s end function resolvers.unresolve(s) return s end caches={} local writable=nil local readables={} local usingjit=jit if not caches.namespace or caches.namespace=="" or caches.namespace=="context" then caches.namespace='generic' end do local cachepaths=kpse.expand_var('$TEXMFCACHE') or "" if cachepaths=="" then cachepaths=kpse.expand_var('$TEXMFVAR') or "" end if cachepaths=="" then cachepaths=kpse.expand_var('$VARTEXMF') or "" end if cachepaths=="" then cachepaths="." end cachepaths=string.split(cachepaths,os.type=="windows" and ";" or ":") for i=1,#cachepaths do local cachepath=cachepaths[i] if not lfs.isdir(cachepath) then lfs.mkdirs(cachepath) if lfs.isdir(cachepath) then texio.write(string.format("(created cache path: %s)",cachepath)) end end if file.is_writable(cachepath) then writable=file.join(cachepath,"luatex-cache") lfs.mkdir(writable) writable=file.join(writable,caches.namespace) lfs.mkdir(writable) break end end for i=1,#cachepaths do if file.is_readable(cachepaths[i]) then readables[#readables+1]=file.join(cachepaths[i],"luatex-cache",caches.namespace) end end if not writable then texio.write_nl("quiting: fix your writable cache path") os.exit() elseif #readables==0 then texio.write_nl("quiting: fix your readable cache path") os.exit() elseif #readables==1 and readables[1]==writable then texio.write(string.format("(using cache: %s)",writable)) else texio.write(string.format("(using write cache: %s)",writable)) texio.write(string.format("(using read cache: %s)",table.concat(readables," "))) end end function caches.getwritablepath(category,subcategory) local path=file.join(writable,category) lfs.mkdir(path) path=file.join(path,subcategory) lfs.mkdir(path) return path end function caches.getreadablepaths(category,subcategory) local t={} for i=1,#readables do t[i]=file.join(readables[i],category,subcategory) end return t end local function makefullname(path,name) if path and path~="" then return file.addsuffix(file.join(path,name),"lua"),file.addsuffix(file.join(path,name),usingjit and "lub" or "luc") end end function caches.is_writable(path,name) local fullname=makefullname(path,name) return fullname and file.is_writable(fullname) end function caches.loaddata(paths,name) for i=1,#paths do local data=false local luaname,lucname=makefullname(paths[i],name) if lucname and lfs.isfile(lucname) then texio.write(string.format("(load luc: %s)",lucname)) data=loadfile(lucname) if data then data=data() end if data then return data else texio.write(string.format("(loading failed: %s)",lucname)) end end if luaname and lfs.isfile(luaname) then texio.write(string.format("(load lua: %s)",luaname)) data=loadfile(luaname) if data then data=data() end if data then return data end end end end function caches.savedata(path,name,data) local luaname,lucname=makefullname(path,name) if luaname then texio.write(string.format("(save: %s)",luaname)) table.tofile(luaname,data,true,{ reduce=true }) if lucname and type(caches.compile)=="function" then os.remove(lucname) texio.write(string.format("(save: %s)",lucname)) caches.compile(data,luaname,lucname) end end end function caches.compile(data,luaname,lucname) local d=io.loaddata(luaname) if not d or d=="" then d=table.serialize(data,true) end if d and d~="" then local f=io.open(lucname,'wb') if f then local s=loadstring(d) if s then f:write(string.dump(s,true)) end f:close() end end end function table.setmetatableindex(t,f) setmetatable(t,{ __index=f }) end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['data-con']={ version=1.100, comment="companion to luat-lib.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,lower,gsub=string.format,string.lower,string.gsub local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end) local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end) local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end) containers=containers or {} local containers=containers containers.usecache=true local report_containers=logs.reporter("resolvers","containers") local allocated={} local mt={ __index=function(t,k) if k=="writable" then local writable=caches.getwritablepath(t.category,t.subcategory) or { "." } t.writable=writable return writable elseif k=="readables" then local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." } t.readables=readables return readables end end, __storage__=true } function containers.define(category,subcategory,version,enabled) if category and subcategory then local c=allocated[category] if not c then c={} allocated[category]=c end local s=c[subcategory] if not s then s={ category=category, subcategory=subcategory, storage={}, enabled=enabled, version=version or math.pi, trace=false, } setmetatable(s,mt) c[subcategory]=s end return s end end function containers.is_usable(container,name) return container.enabled and caches and caches.is_writable(container.writable,name) end function containers.is_valid(container,name) if name and name~="" then local storage=container.storage[name] return storage and storage.cache_version==container.version else return false end end function containers.read(container,name) local storage=container.storage local stored=storage[name] if not stored and container.enabled and caches and containers.usecache then stored=caches.loaddata(container.readables,name) if stored and stored.cache_version==container.version then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","load",container.subcategory,name) end else stored=nil end storage[name]=stored elseif stored then if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","reuse",container.subcategory,name) end end return stored end function containers.write(container,name,data) if data then data.cache_version=container.version if container.enabled and caches then local unique,shared=data.unique,data.shared data.unique,data.shared=nil,nil caches.savedata(container.writable,name,data) if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","save",container.subcategory,name) end data.unique,data.shared=unique,shared end if trace_cache or trace_containers then report_containers("action %a, category %a, name %a","store",container.subcategory,name) end container.storage[name]=data end return data end function containers.content(container,name) return container.storage[name] end function containers.cleanname(name) return (gsub(lower(name),"[^%w\128-\255]+","-")) end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-fonts-nod']={ version=1.001, comment="companion to luatex-fonts.lua", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end if tex.attribute[0]~=0 then texio.write_nl("log","!") texio.write_nl("log","! Attribute 0 is reserved for ConTeXt's font feature management and has to be") texio.write_nl("log","! set to zero. Also, some attributes in the range 1-255 are used for special") texio.write_nl("log","! purposes so setting them at the TeX end might break the font handler.") texio.write_nl("log","!") tex.attribute[0]=0 end attributes=attributes or {} attributes.unsetvalue=-0x7FFFFFFF local numbers,last={},127 attributes.private=attributes.private or function(name) local number=numbers[name] if not number then if last<255 then last=last+1 end number=last numbers[name]=number end return number end nodes={} nodes.pool={} nodes.handlers={} local nodecodes={} for k,v in next,node.types () do nodecodes[string.gsub(v,"_","")]=k end local whatcodes={} for k,v in next,node.whatsits() do whatcodes[string.gsub(v,"_","")]=k end local glyphcodes={ [0]="character","glyph","ligature","ghost","left","right" } nodes.nodecodes=nodecodes nodes.whatcodes=whatcodes nodes.whatsitcodes=whatcodes nodes.glyphcodes=glyphcodes local free_node=node.free local remove_node=node.remove local new_node=node.new local traverse_id=node.traverse_id local math_code=nodecodes.math nodes.handlers.protectglyphs=node.protect_glyphs nodes.handlers.unprotectglyphs=node.unprotect_glyphs function nodes.remove(head,current,free_too) local t=current head,current=remove_node(head,current) if t then if free_too then free_node(t) t=nil else t.next,t.prev=nil,nil end end return head,current,t end function nodes.delete(head,current) return nodes.remove(head,current,true) end nodes.before=node.insert_before nodes.after=node.insert_after function nodes.pool.kern(k) local n=new_node("kern",1) n.kern=k return n end function nodes.endofmath(n) for n in traverse_id(math_code,n.next) do return n end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-ini']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local allocate=utilities.storage.allocate local report_defining=logs.reporter("fonts","defining") fonts=fonts or {} local fonts=fonts fonts.hashes={ identifiers=allocate() } fonts.tables=fonts.tables or {} fonts.helpers=fonts.helpers or {} fonts.tracers=fonts.tracers or {} fonts.specifiers=fonts.specifiers or {} fonts.analyzers={} fonts.readers={} fonts.definers={ methods={} } fonts.loggers={ register=function() end } fontloader.totable=fontloader.to_table end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-con']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local next,tostring,rawget=next,tostring,rawget local format,match,lower,gsub=string.format,string.match,string.lower,string.gsub local utfbyte=utf.byte local sort,insert,concat,sortedkeys,serialize,fastcopy=table.sort,table.insert,table.concat,table.sortedkeys,table.serialize,table.fastcopy local derivetable=table.derive local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end) local trace_scaling=false trackers.register("fonts.scaling",function(v) trace_scaling=v end) local report_defining=logs.reporter("fonts","defining") local fonts=fonts local constructors=fonts.constructors or {} fonts.constructors=constructors local handlers=fonts.handlers or {} fonts.handlers=handlers local allocate=utilities.storage.allocate local setmetatableindex=table.setmetatableindex constructors.dontembed=allocate() constructors.autocleanup=true constructors.namemode="fullpath" constructors.version=1.01 constructors.cache=containers.define("fonts","constructors",constructors.version,false) constructors.privateoffset=0xF0000 constructors.keys={ properties={ encodingbytes="number", embedding="number", cidinfo={}, format="string", fontname="string", fullname="string", filename="filename", psname="string", name="string", virtualized="boolean", hasitalics="boolean", autoitalicamount="basepoints", nostackmath="boolean", noglyphnames="boolean", mode="string", hasmath="boolean", mathitalics="boolean", textitalics="boolean", finalized="boolean", }, parameters={ mathsize="number", scriptpercentage="float", scriptscriptpercentage="float", units="cardinal", designsize="scaledpoints", expansion={ stretch="integerscale", shrink="integerscale", step="integerscale", auto="boolean", }, protrusion={ auto="boolean", }, slantfactor="float", extendfactor="float", factor="float", hfactor="float", vfactor="float", size="scaledpoints", units="scaledpoints", scaledpoints="scaledpoints", slantperpoint="scaledpoints", spacing={ width="scaledpoints", stretch="scaledpoints", shrink="scaledpoints", extra="scaledpoints", }, xheight="scaledpoints", quad="scaledpoints", ascender="scaledpoints", descender="scaledpoints", synonyms={ space="spacing.width", spacestretch="spacing.stretch", spaceshrink="spacing.shrink", extraspace="spacing.extra", x_height="xheight", space_stretch="spacing.stretch", space_shrink="spacing.shrink", extra_space="spacing.extra", em="quad", ex="xheight", slant="slantperpoint", }, }, description={ width="basepoints", height="basepoints", depth="basepoints", boundingbox={}, }, character={ width="scaledpoints", height="scaledpoints", depth="scaledpoints", italic="scaledpoints", }, } local designsizes=allocate() constructors.designsizes=designsizes local loadedfonts=allocate() constructors.loadedfonts=loadedfonts local factors={ pt=65536.0, bp=65781.8, } function constructors.setfactor(f) constructors.factor=factors[f or 'pt'] or factors.pt end constructors.setfactor() function constructors.scaled(scaledpoints,designsize) if scaledpoints<0 then if designsize then local factor=constructors.factor if designsize>factor then return (- scaledpoints/1000)*designsize else return (- scaledpoints/1000)*designsize*factor end else return (- scaledpoints/1000)*10*factor end else return scaledpoints end end function constructors.cleanuptable(tfmdata) if constructors.autocleanup and tfmdata.properties.virtualized then for k,v in next,tfmdata.characters do if v.commands then v.commands=nil end end end end function constructors.calculatescale(tfmdata,scaledpoints) local parameters=tfmdata.parameters if scaledpoints<0 then scaledpoints=(- scaledpoints/1000)*(tfmdata.designsize or parameters.designsize) end return scaledpoints,scaledpoints/(parameters.units or 1000) end local unscaled={ ScriptPercentScaleDown=true, ScriptScriptPercentScaleDown=true, RadicalDegreeBottomRaisePercent=true } function constructors.assignmathparameters(target,original) local mathparameters=original.mathparameters if mathparameters and next(mathparameters) then local targetparameters=target.parameters local targetproperties=target.properties local targetmathparameters={} local factor=targetproperties.math_is_scaled and 1 or targetparameters.factor for name,value in next,mathparameters do if unscaled[name] then targetmathparameters[name]=value else targetmathparameters[name]=value*factor end end if not targetmathparameters.FractionDelimiterSize then targetmathparameters.FractionDelimiterSize=1.01*targetparameters.size end if not mathparameters.FractionDelimiterDisplayStyleSize then targetmathparameters.FractionDelimiterDisplayStyleSize=2.40*targetparameters.size end target.mathparameters=targetmathparameters end end function constructors.beforecopyingcharacters(target,original) end function constructors.aftercopyingcharacters(target,original) end function constructors.enhanceparameters(parameters) local xheight=parameters.x_height local quad=parameters.quad local space=parameters.space local stretch=parameters.space_stretch local shrink=parameters.space_shrink local extra=parameters.extra_space local slant=parameters.slant parameters.xheight=xheight parameters.spacestretch=stretch parameters.spaceshrink=shrink parameters.extraspace=extra parameters.em=quad parameters.ex=xheight parameters.slantperpoint=slant parameters.spacing={ width=space, stretch=stretch, shrink=shrink, extra=extra, } end function constructors.scale(tfmdata,specification) local target={} if tonumber(specification) then specification={ size=specification } end local scaledpoints=specification.size local relativeid=specification.relativeid local properties=tfmdata.properties or {} local goodies=tfmdata.goodies or {} local resources=tfmdata.resources or {} local descriptions=tfmdata.descriptions or {} local characters=tfmdata.characters or {} local changed=tfmdata.changed or {} local shared=tfmdata.shared or {} local parameters=tfmdata.parameters or {} local mathparameters=tfmdata.mathparameters or {} local targetcharacters={} local targetdescriptions=derivetable(descriptions) local targetparameters=derivetable(parameters) local targetproperties=derivetable(properties) local targetgoodies=goodies target.characters=targetcharacters target.descriptions=targetdescriptions target.parameters=targetparameters target.properties=targetproperties target.goodies=targetgoodies target.shared=shared target.resources=resources target.unscaled=tfmdata local mathsize=tonumber(specification.mathsize) or 0 local textsize=tonumber(specification.textsize) or scaledpoints local forcedsize=tonumber(parameters.mathsize ) or 0 local extrafactor=tonumber(specification.factor ) or 1 if (mathsize==2 or forcedsize==2) and parameters.scriptpercentage then scaledpoints=parameters.scriptpercentage*textsize/100 elseif (mathsize==3 or forcedsize==3) and parameters.scriptscriptpercentage then scaledpoints=parameters.scriptscriptpercentage*textsize/100 elseif forcedsize>1000 then scaledpoints=forcedsize end targetparameters.mathsize=mathsize targetparameters.textsize=textsize targetparameters.forcedsize=forcedsize targetparameters.extrafactor=extrafactor local tounicode=resources.tounicode local defaultwidth=resources.defaultwidth or 0 local defaultheight=resources.defaultheight or 0 local defaultdepth=resources.defaultdepth or 0 local units=parameters.units or 1000 if target.fonts then target.fonts=fastcopy(target.fonts) end targetproperties.language=properties.language or "dflt" targetproperties.script=properties.script or "dflt" targetproperties.mode=properties.mode or "base" local askedscaledpoints=scaledpoints local scaledpoints,delta=constructors.calculatescale(tfmdata,scaledpoints) local hdelta=delta local vdelta=delta target.designsize=parameters.designsize target.units_per_em=units local direction=properties.direction or tfmdata.direction or 0 target.direction=direction properties.direction=direction target.size=scaledpoints target.encodingbytes=properties.encodingbytes or 1 target.embedding=properties.embedding or "subset" target.tounicode=1 target.cidinfo=properties.cidinfo target.format=properties.format local fontname=properties.fontname or tfmdata.fontname local fullname=properties.fullname or tfmdata.fullname local filename=properties.filename or tfmdata.filename local psname=properties.psname or tfmdata.psname local name=properties.name or tfmdata.name if not psname or psname=="" then psname=fontname or (fullname and fonts.names.cleanname(fullname)) end target.fontname=fontname target.fullname=fullname target.filename=filename target.psname=psname target.name=name properties.fontname=fontname properties.fullname=fullname properties.filename=filename properties.psname=psname properties.name=name local expansion=parameters.expansion if expansion then target.stretch=expansion.stretch target.shrink=expansion.shrink target.step=expansion.step target.auto_expand=expansion.auto end local protrusion=parameters.protrusion if protrusion then target.auto_protrude=protrusion.auto end local extendfactor=parameters.extendfactor or 0 if extendfactor~=0 and extendfactor~=1 then hdelta=hdelta*extendfactor target.extend=extendfactor*1000 else target.extend=1000 end local slantfactor=parameters.slantfactor or 0 if slantfactor~=0 then target.slant=slantfactor*1000 else target.slant=0 end targetparameters.factor=delta targetparameters.hfactor=hdelta targetparameters.vfactor=vdelta targetparameters.size=scaledpoints targetparameters.units=units targetparameters.scaledpoints=askedscaledpoints local isvirtual=properties.virtualized or tfmdata.type=="virtual" local hasquality=target.auto_expand or target.auto_protrude local hasitalics=properties.hasitalics local autoitalicamount=properties.autoitalicamount local stackmath=not properties.nostackmath local nonames=properties.noglyphnames local nodemode=properties.mode=="node" if changed and not next(changed) then changed=false end target.type=isvirtual and "virtual" or "real" target.postprocessors=tfmdata.postprocessors local targetslant=(parameters.slant or parameters[1] or 0) local targetspace=(parameters.space or parameters[2] or 0)*hdelta local targetspace_stretch=(parameters.space_stretch or parameters[3] or 0)*hdelta local targetspace_shrink=(parameters.space_shrink or parameters[4] or 0)*hdelta local targetx_height=(parameters.x_height or parameters[5] or 0)*vdelta local targetquad=(parameters.quad or parameters[6] or 0)*hdelta local targetextra_space=(parameters.extra_space or parameters[7] or 0)*hdelta targetparameters.slant=targetslant targetparameters.space=targetspace targetparameters.space_stretch=targetspace_stretch targetparameters.space_shrink=targetspace_shrink targetparameters.x_height=targetx_height targetparameters.quad=targetquad targetparameters.extra_space=targetextra_space local ascender=parameters.ascender if ascender then targetparameters.ascender=delta*ascender end local descender=parameters.descender if descender then targetparameters.descender=delta*descender end constructors.enhanceparameters(targetparameters) local protrusionfactor=(targetquad~=0 and 1000/targetquad) or 0 local scaledwidth=defaultwidth*hdelta local scaledheight=defaultheight*vdelta local scaleddepth=defaultdepth*vdelta local hasmath=(properties.hasmath or next(mathparameters)) and true if hasmath then constructors.assignmathparameters(target,tfmdata) properties.hasmath=true target.nomath=false target.MathConstants=target.mathparameters else properties.hasmath=false target.nomath=true target.mathparameters=nil end local italickey="italic" local useitalics=true if hasmath then autoitalicamount=false elseif properties.textitalics then italickey="italic_correction" useitalics=false if properties.delaytextitalics then autoitalicamount=false end end if trace_defining then report_defining("defining tfm, name %a, fullname %a, filename %a, hscale %a, vscale %a, math %a, italics %a", name,fullname,filename,hdelta,vdelta, hasmath and "enabled" or "disabled",useitalics and "enabled" or "disabled") end constructors.beforecopyingcharacters(target,tfmdata) local sharedkerns={} for unicode,character in next,characters do local chr,description,index,touni if changed then local c=changed[unicode] if c then description=descriptions[c] or descriptions[unicode] or character character=characters[c] or character index=description.index or c if tounicode then touni=tounicode[index] if not touni then local d=descriptions[unicode] or characters[unicode] local i=d.index or unicode touni=tounicode[i] end end else description=descriptions[unicode] or character index=description.index or unicode if tounicode then touni=tounicode[index] end end else description=descriptions[unicode] or character index=description.index or unicode if tounicode then touni=tounicode[index] end end local width=description.width local height=description.height local depth=description.depth if width then width=hdelta*width else width=scaledwidth end if height then height=vdelta*height else height=scaledheight end if depth and depth~=0 then depth=delta*depth if nonames then chr={ index=index, height=height, depth=depth, width=width, } else chr={ name=description.name, index=index, height=height, depth=depth, width=width, } end else if nonames then chr={ index=index, height=height, width=width, } else chr={ name=description.name, index=index, height=height, width=width, } end end if touni then chr.tounicode=touni end if hasquality then local ve=character.expansion_factor if ve then chr.expansion_factor=ve*1000 end local vl=character.left_protruding if vl then chr.left_protruding=protrusionfactor*width*vl end local vr=character.right_protruding if vr then chr.right_protruding=protrusionfactor*width*vr end end if autoitalicamount then local vi=description.italic if not vi then local vi=description.boundingbox[3]-description.width+autoitalicamount if vi>0 then chr[italickey]=vi*hdelta end elseif vi~=0 then chr[italickey]=vi*hdelta end elseif hasitalics then local vi=description.italic if vi and vi~=0 then chr[italickey]=vi*hdelta end end if hasmath then local vn=character.next if vn then chr.next=vn else local vv=character.vert_variants if vv then local t={} for i=1,#vv do local vvi=vv[i] t[i]={ ["start"]=(vvi["start"] or 0)*vdelta, ["end"]=(vvi["end"] or 0)*vdelta, ["advance"]=(vvi["advance"] or 0)*vdelta, ["extender"]=vvi["extender"], ["glyph"]=vvi["glyph"], } end chr.vert_variants=t else local hv=character.horiz_variants if hv then local t={} for i=1,#hv do local hvi=hv[i] t[i]={ ["start"]=(hvi["start"] or 0)*hdelta, ["end"]=(hvi["end"] or 0)*hdelta, ["advance"]=(hvi["advance"] or 0)*hdelta, ["extender"]=hvi["extender"], ["glyph"]=hvi["glyph"], } end chr.horiz_variants=t end end end local va=character.top_accent if va then chr.top_accent=vdelta*va end if stackmath then local mk=character.mathkerns if mk then local kerns={} local v=mk.top_right if v then local k={} for i=1,#v do local vi=v[i] k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern } end kerns.top_right=k end local v=mk.top_left if v then local k={} for i=1,#v do local vi=v[i] k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern } end kerns.top_left=k end local v=mk.bottom_left if v then local k={} for i=1,#v do local vi=v[i] k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern } end kerns.bottom_left=k end local v=mk.bottom_right if v then local k={} for i=1,#v do local vi=v[i] k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern } end kerns.bottom_right=k end chr.mathkern=kerns end end end if not nodemode then local vk=character.kerns if vk then local s=sharedkerns[vk] if not s then s={} for k,v in next,vk do s[k]=v*hdelta end sharedkerns[vk]=s end chr.kerns=s end local vl=character.ligatures if vl then if true then chr.ligatures=vl else local tt={} for i,l in next,vl do tt[i]=l end chr.ligatures=tt end end end if isvirtual then local vc=character.commands if vc then local ok=false for i=1,#vc do local key=vc[i][1] if key=="right" or key=="down" then ok=true break end end if ok then local tt={} for i=1,#vc do local ivc=vc[i] local key=ivc[1] if key=="right" then tt[i]={ key,ivc[2]*hdelta } elseif key=="down" then tt[i]={ key,ivc[2]*vdelta } elseif key=="rule" then tt[i]={ key,ivc[2]*vdelta,ivc[3]*hdelta } else tt[i]=ivc end end chr.commands=tt else chr.commands=vc end chr.index=nil end end targetcharacters[unicode]=chr end constructors.aftercopyingcharacters(target,tfmdata) return target end function constructors.finalize(tfmdata) if tfmdata.properties and tfmdata.properties.finalized then return end if not tfmdata.characters then return nil end if not tfmdata.goodies then tfmdata.goodies={} end local parameters=tfmdata.parameters if not parameters then return nil end if not parameters.expansion then parameters.expansion={ stretch=tfmdata.stretch or 0, shrink=tfmdata.shrink or 0, step=tfmdata.step or 0, auto=tfmdata.auto_expand or false, } end if not parameters.protrusion then parameters.protrusion={ auto=auto_protrude } end if not parameters.size then parameters.size=tfmdata.size end if not parameters.extendfactor then parameters.extendfactor=tfmdata.extend or 0 end if not parameters.slantfactor then parameters.slantfactor=tfmdata.slant or 0 end if not parameters.designsize then parameters.designsize=tfmdata.designsize or 655360 end if not parameters.units then parameters.units=tfmdata.units_per_em or 1000 end if not tfmdata.descriptions then local descriptions={} setmetatableindex(descriptions,function(t,k) local v={} t[k]=v return v end) tfmdata.descriptions=descriptions end local properties=tfmdata.properties if not properties then properties={} tfmdata.properties=properties end if not properties.virtualized then properties.virtualized=tfmdata.type=="virtual" end if not tfmdata.properties then tfmdata.properties={ fontname=tfmdata.fontname, filename=tfmdata.filename, fullname=tfmdata.fullname, name=tfmdata.name, psname=tfmdata.psname, encodingbytes=tfmdata.encodingbytes or 1, embedding=tfmdata.embedding or "subset", tounicode=tfmdata.tounicode or 1, cidinfo=tfmdata.cidinfo or nil, format=tfmdata.format or "type1", direction=tfmdata.direction or 0, } end if not tfmdata.resources then tfmdata.resources={} end if not tfmdata.shared then tfmdata.shared={} end if not properties.hasmath then properties.hasmath=not tfmdata.nomath end tfmdata.MathConstants=nil tfmdata.postprocessors=nil tfmdata.fontname=nil tfmdata.filename=nil tfmdata.fullname=nil tfmdata.name=nil tfmdata.psname=nil tfmdata.encodingbytes=nil tfmdata.embedding=nil tfmdata.tounicode=nil tfmdata.cidinfo=nil tfmdata.format=nil tfmdata.direction=nil tfmdata.type=nil tfmdata.nomath=nil tfmdata.designsize=nil tfmdata.size=nil tfmdata.stretch=nil tfmdata.shrink=nil tfmdata.step=nil tfmdata.auto_expand=nil tfmdata.auto_protrude=nil tfmdata.extend=nil tfmdata.slant=nil tfmdata.units_per_em=nil properties.finalized=true return tfmdata end local hashmethods={} constructors.hashmethods=hashmethods function constructors.hashfeatures(specification) local features=specification.features if features then local t,tn={},0 for category,list in next,features do if next(list) then local hasher=hashmethods[category] if hasher then local hash=hasher(list) if hash then tn=tn+1 t[tn]=category..":"..hash end end end end if tn>0 then return concat(t," & ") end end return "unknown" end hashmethods.normal=function(list) local s={} local n=0 for k,v in next,list do if not k then elseif k=="number" or k=="features" then else n=n+1 s[n]=k end end if n>0 then sort(s) for i=1,n do local k=s[i] s[i]=k..'='..tostring(list[k]) end return concat(s,"+") end end function constructors.hashinstance(specification,force) local hash,size,fallbacks=specification.hash,specification.size,specification.fallbacks if force or not hash then hash=constructors.hashfeatures(specification) specification.hash=hash end if size<1000 and designsizes[hash] then size=math.round(constructors.scaled(size,designsizes[hash])) specification.size=size end if fallbacks then return hash..' @ '..tostring(size)..' @ '..fallbacks else return hash..' @ '..tostring(size) end end function constructors.setname(tfmdata,specification) if constructors.namemode=="specification" then local specname=specification.specification if specname then tfmdata.properties.name=specname if trace_defining then report_otf("overloaded fontname %a",specname) end end end end function constructors.checkedfilename(data) local foundfilename=data.foundfilename if not foundfilename then local askedfilename=data.filename or "" if askedfilename~="" then askedfilename=resolvers.resolve(askedfilename) foundfilename=resolvers.findbinfile(askedfilename,"") or "" if foundfilename=="" then report_defining("source file %a is not found",askedfilename) foundfilename=resolvers.findbinfile(file.basename(askedfilename),"") or "" if foundfilename~="" then report_defining("using source file %a due to cache mismatch",foundfilename) end end end data.foundfilename=foundfilename end return foundfilename end local formats=allocate() fonts.formats=formats setmetatableindex(formats,function(t,k) local l=lower(k) if rawget(t,k) then t[k]=l return l end return rawget(t,file.suffix(l)) end) local locations={} local function setindeed(mode,target,group,name,action,position) local t=target[mode] if not t then report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode) os.exit() elseif position then insert(t,position,{ name=name,action=action }) else for i=1,#t do local ti=t[i] if ti.name==name then ti.action=action return end end insert(t,{ name=name,action=action }) end end local function set(group,name,target,source) target=target[group] if not target then report_defining("fatal target error in setting feature %a, group %a",name,group) os.exit() end local source=source[group] if not source then report_defining("fatal source error in setting feature %a, group %a",name,group) os.exit() end local node=source.node local base=source.base local position=source.position if node then setindeed("node",target,group,name,node,position) end if base then setindeed("base",target,group,name,base,position) end end local function register(where,specification) local name=specification.name if name and name~="" then local default=specification.default local description=specification.description local initializers=specification.initializers local processors=specification.processors local manipulators=specification.manipulators local modechecker=specification.modechecker if default then where.defaults[name]=default end if description and description~="" then where.descriptions[name]=description end if initializers then set('initializers',name,where,specification) end if processors then set('processors',name,where,specification) end if manipulators then set('manipulators',name,where,specification) end if modechecker then where.modechecker=modechecker end end end constructors.registerfeature=register function constructors.getfeatureaction(what,where,mode,name) what=handlers[what].features if what then where=what[where] if where then mode=where[mode] if mode then for i=1,#mode do local m=mode[i] if m.name==name then return m.action end end end end end end function constructors.newhandler(what) local handler=handlers[what] if not handler then handler={} handlers[what]=handler end return handler end function constructors.newfeatures(what) local handler=handlers[what] local features=handler.features if not features then local tables=handler.tables local statistics=handler.statistics features=allocate { defaults={}, descriptions=tables and tables.features or {}, used=statistics and statistics.usedfeatures or {}, initializers={ base={},node={} }, processors={ base={},node={} }, manipulators={ base={},node={} }, } features.register=function(specification) return register(features,specification) end handler.features=features end return features end function constructors.checkedfeatures(what,features) local defaults=handlers[what].features.defaults if features and next(features) then features=fastcopy(features) for key,value in next,defaults do if features[key]==nil then features[key]=value end end return features else return fastcopy(defaults) end end function constructors.initializefeatures(what,tfmdata,features,trace,report) if features and next(features) then local properties=tfmdata.properties or {} local whathandler=handlers[what] local whatfeatures=whathandler.features local whatinitializers=whatfeatures.initializers local whatmodechecker=whatfeatures.modechecker local mode=properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base" properties.mode=mode features.mode=mode local done={} while true do local redo=false local initializers=whatfeatures.initializers[mode] if initializers then for i=1,#initializers do local step=initializers[i] local feature=step.name local value=features[feature] if not value then elseif done[feature] then else local action=step.action if trace then report("initializing feature %a to %a for mode %a for font %a",feature, value,mode,tfmdata.properties.fullname) end action(tfmdata,value,features) if mode~=properties.mode or mode~=features.mode then if whatmodechecker then properties.mode=whatmodechecker(tfmdata,features,properties.mode) features.mode=properties.mode end if mode~=properties.mode then mode=properties.mode redo=true end end done[feature]=true end if redo then break end end if not redo then break end else break end end properties.mode=mode return true else return false end end function constructors.collectprocessors(what,tfmdata,features,trace,report) local processes,nofprocesses={},0 if features and next(features) then local properties=tfmdata.properties local whathandler=handlers[what] local whatfeatures=whathandler.features local whatprocessors=whatfeatures.processors local processors=whatprocessors[properties.mode] if processors then for i=1,#processors do local step=processors[i] local feature=step.name if features[feature] then local action=step.action if trace then report("installing feature processor %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname) end if action then nofprocesses=nofprocesses+1 processes[nofprocesses]=action end end end elseif trace then report("no feature processors for mode %a for font %a",mode,tfmdata.properties.fullname) end end return processes end function constructors.applymanipulators(what,tfmdata,features,trace,report) if features and next(features) then local properties=tfmdata.properties local whathandler=handlers[what] local whatfeatures=whathandler.features local whatmanipulators=whatfeatures.manipulators local manipulators=whatmanipulators[properties.mode] if manipulators then for i=1,#manipulators do local step=manipulators[i] local feature=step.name local value=features[feature] if value then local action=step.action if trace then report("applying feature manipulator %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname) end if action then action(tfmdata,feature,value) end end end end end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-font-enc']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts fonts.encodings={} fonts.encodings.agl={} setmetatable(fonts.encodings.agl,{ __index=function(t,k) if k=="unicodes" then texio.write(" ") local unicodes=dofile(resolvers.findfile("font-age.lua")) fonts.encodings.agl={ unicodes=unicodes } return unicodes else return nil end end }) end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-cid']={ version=1.001, comment="companion to font-otf.lua (cidmaps)", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,match,lower=string.format,string.match,string.lower local tonumber=tonumber local P,S,R,C,V,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.match local fonts,logs,trackers=fonts,logs,trackers local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end) local report_otf=logs.reporter("fonts","otf loading") local cid={} fonts.cid=cid local cidmap={} local cidmax=10 local number=C(R("09","af","AF")^1) local space=S(" \n\r\t") local spaces=space^0 local period=P(".") local periods=period*period local name=P("/")*C((1-space)^1) local unicodes,names={},{} local function do_one(a,b) unicodes[tonumber(a)]=tonumber(b,16) end local function do_range(a,b,c) c=tonumber(c,16) for i=tonumber(a),tonumber(b) do unicodes[i]=c c=c+1 end end local function do_name(a,b) names[tonumber(a)]=b end local grammar=P { "start", start=number*spaces*number*V("series"), series=(spaces*(V("one")+V("range")+V("named")))^1, one=(number*spaces*number)/do_one, range=(number*periods*number*spaces*number)/do_range, named=(number*spaces*name)/do_name } local function loadcidfile(filename) local data=io.loaddata(filename) if data then unicodes,names={},{} lpegmatch(grammar,data) local supplement,registry,ordering=match(filename,"^(.-)%-(.-)%-()%.(.-)$") return { supplement=supplement, registry=registry, ordering=ordering, filename=filename, unicodes=unicodes, names=names } end end cid.loadfile=loadcidfile local template="%s-%s-%s.cidmap" local function locate(registry,ordering,supplement) local filename=format(template,registry,ordering,supplement) local hashname=lower(filename) local found=cidmap[hashname] if not found then if trace_loading then report_otf("checking cidmap, registry %a, ordering %a, supplement %a, filename %a",registry,ordering,supplement,filename) end local fullname=resolvers.findfile(filename,'cid') or "" if fullname~="" then found=loadcidfile(fullname) if found then if trace_loading then report_otf("using cidmap file %a",filename) end cidmap[hashname]=found found.usedname=file.basename(filename) end end end return found end function cid.getmap(specification) if not specification then report_otf("invalid cidinfo specification, table expected") return end local registry=specification.registry local ordering=specification.ordering local supplement=specification.supplement local filename=format(registry,ordering,supplement) local found=cidmap[lower(filename)] if found then return found end if trace_loading then report_otf("cidmap needed, registry %a, ordering %a, supplement %a",registry,ordering,supplement) end found=locate(registry,ordering,supplement) if not found then local supnum=tonumber(supplement) local cidnum=nil if supnum0 then for s=supnum-1,0,-1 do local c=locate(registry,ordering,s) if c then found,cidnum=c,s break end end end registry=lower(registry) ordering=lower(ordering) if found and cidnum>0 then for s=0,cidnum-1 do local filename=format(template,registry,ordering,s) if not cidmap[filename] then cidmap[filename]=found end end end end return found end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-map']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local tonumber=tonumber local match,format,find,concat,gsub,lower=string.match,string.format,string.find,table.concat,string.gsub,string.lower local P,R,S,C,Ct,Cc,lpegmatch=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.match local utfbyte=utf.byte local floor=math.floor local trace_loading=false trackers.register("fonts.loading",function(v) trace_loading=v end) local trace_mapping=false trackers.register("fonts.mapping",function(v) trace_unimapping=v end) local report_fonts=logs.reporter("fonts","loading") local fonts=fonts or {} local mappings=fonts.mappings or {} fonts.mappings=mappings local function loadlumtable(filename) local lumname=file.replacesuffix(file.basename(filename),"lum") local lumfile=resolvers.findfile(lumname,"map") or "" if lumfile~="" and lfs.isfile(lumfile) then if trace_loading or trace_mapping then report_fonts("loading map table %a",lumfile) end lumunic=dofile(lumfile) return lumunic,lumfile end end local hex=R("AF","09") local hexfour=(hex*hex*hex*hex)/function(s) return tonumber(s,16) end local hexsix=(hex*hex*hex*hex*hex*hex)/function(s) return tonumber(s,16) end local dec=(R("09")^1)/tonumber local period=P(".") local unicode=P("uni")*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true)) local ucode=P("u")*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true)) local index=P("index")*dec*Cc(false) local parser=unicode+ucode+index local parsers={} local function makenameparser(str) if not str or str=="" then return parser else local p=parsers[str] if not p then p=P(str)*period*dec*Cc(false) parsers[str]=p end return p end end local function tounicode16(unicode,name) if unicode<0x10000 then return format("%04X",unicode) elseif unicode<0x1FFFFFFFFF then return format("%04X%04X",floor(unicode/1024),unicode%1024+0xDC00) else report_fonts("can't convert %a in %a into tounicode",unicode,name) end end local function tounicode16sequence(unicodes,name) local t={} for l=1,#unicodes do local unicode=unicodes[l] if unicode<0x10000 then t[l]=format("%04X",unicode) elseif unicode<0x1FFFFFFFFF then t[l]=format("%04X%04X",floor(unicode/1024),unicode%1024+0xDC00) else report_fonts ("can't convert %a in %a into tounicode",unicode,name) end end return concat(t) end local function fromunicode16(str) if #str==4 then return tonumber(str,16) else local l,r=match(str,"(....)(....)") return (tonumber(l,16))*0x400+tonumber(r,16)-0xDC00 end end mappings.loadlumtable=loadlumtable mappings.makenameparser=makenameparser mappings.tounicode16=tounicode16 mappings.tounicode16sequence=tounicode16sequence mappings.fromunicode16=fromunicode16 local ligseparator=P("_") local varseparator=P(".") local namesplitter=Ct(C((1-ligseparator-varseparator)^1)*(ligseparator*C((1-ligseparator-varseparator)^1))^0) function mappings.addtounicode(data,filename) local resources=data.resources local properties=data.properties local descriptions=data.descriptions local unicodes=resources.unicodes if not unicodes then return end unicodes['space']=unicodes['space'] or 32 unicodes['hyphen']=unicodes['hyphen'] or 45 unicodes['zwj']=unicodes['zwj'] or 0x200D unicodes['zwnj']=unicodes['zwnj'] or 0x200C local private=fonts.constructors.privateoffset local unknown=format("%04X",utfbyte("?")) local unicodevector=fonts.encodings.agl.unicodes local tounicode={} local originals={} resources.tounicode=tounicode resources.originals=originals local lumunic,uparser,oparser local cidinfo,cidnames,cidcodes,usedmap if false then lumunic=loadlumtable(filename) lumunic=lumunic and lumunic.tounicode end cidinfo=properties.cidinfo usedmap=cidinfo and fonts.cid.getmap(cidinfo) if usedmap then oparser=usedmap and makenameparser(cidinfo.ordering) cidnames=usedmap.names cidcodes=usedmap.unicodes end uparser=makenameparser() local ns,nl=0,0 for unic,glyph in next,descriptions do local index=glyph.index local name=glyph.name if unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then local unicode=lumunic and lumunic[name] or unicodevector[name] if unicode then originals[index]=unicode tounicode[index]=tounicode16(unicode,name) ns=ns+1 end if (not unicode) and usedmap then local foundindex=lpegmatch(oparser,name) if foundindex then unicode=cidcodes[foundindex] if unicode then originals[index]=unicode tounicode[index]=tounicode16(unicode,name) ns=ns+1 else local reference=cidnames[foundindex] if reference then local foundindex=lpegmatch(oparser,reference) if foundindex then unicode=cidcodes[foundindex] if unicode then originals[index]=unicode tounicode[index]=tounicode16(unicode,name) ns=ns+1 end end if not unicode or unicode=="" then local foundcodes,multiple=lpegmatch(uparser,reference) if foundcodes then originals[index]=foundcodes if multiple then tounicode[index]=tounicode16sequence(foundcodes) nl=nl+1 unicode=true else tounicode[index]=tounicode16(foundcodes,name) ns=ns+1 unicode=foundcodes end end end end end end end if not unicode or unicode=="" then local split=lpegmatch(namesplitter,name) local nsplit=split and #split or 0 if nsplit>=2 then local t,n={},0 for l=1,nsplit do local base=split[l] local u=unicodes[base] or unicodevector[base] if not u then break elseif type(u)=="table" then n=n+1 t[n]=u[1] else n=n+1 t[n]=u end end if n==0 then elseif n==1 then originals[index]=t[1] tounicode[index]=tounicode16(t[1],name) else originals[index]=t tounicode[index]=tounicode16sequence(t) end nl=nl+1 unicode=true else end end if not unicode or unicode=="" then local foundcodes,multiple=lpegmatch(uparser,name) if foundcodes then if multiple then originals[index]=foundcodes tounicode[index]=tounicode16sequence(foundcodes,name) nl=nl+1 unicode=true else originals[index]=foundcodes tounicode[index]=tounicode16(foundcodes,name) ns=ns+1 unicode=foundcodes end end end end end if trace_mapping then for unic,glyph in table.sortedhash(descriptions) do local name=glyph.name local index=glyph.index local toun=tounicode[index] if toun then report_fonts("internal slot %U, name %a, unicode %U, tounicode %a",index,name,unic,toun) else report_fonts("internal slot %U, name %a, unicode %U",index,name,unic) end end end if trace_loading and (ns>0 or nl>0) then report_fonts("%s tounicode entries added, ligatures %s",nl+ns,ns) end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-fonts-syn']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts fonts.names=fonts.names or {} fonts.names.version=1.001 fonts.names.basename="luatex-fonts-names" fonts.names.new_to_old={} fonts.names.old_to_new={} fonts.names.cache=containers.define("fonts","data",fonts.names.version,true) local data,loaded=nil,false local fileformats={ "lua","tex","other text files" } function fonts.names.reportmissingbase() texio.write("") fonts.names.reportmissingbase=nil end function fonts.names.reportmissingname() texio.write("") fonts.names.reportmissingname=nil end function fonts.names.resolve(name,sub) if not loaded then local basename=fonts.names.basename if basename and basename~="" then data=containers.read(fonts.names.cache,basename) if not data then basename=file.addsuffix(basename,"lua") for i=1,#fileformats do local format=fileformats[i] local foundname=resolvers.findfile(basename,format) or "" if foundname~="" then data=dofile(foundname) texio.write("") break end end end end loaded=true end if type(data)=="table" and data.version==fonts.names.version then local condensed=string.gsub(string.lower(name),"[^%a%d]","") local found=data.mappings and data.mappings[condensed] if found then local fontname,filename,subfont=found[1],found[2],found[3] if subfont then return filename,fontname else return filename,false end elseif fonts.names.reportmissingname then fonts.names.reportmissingname() return name,false end elseif fonts.names.reportmissingbase then fonts.names.reportmissingbase() end end fonts.names.resolvespec=fonts.names.resolve function fonts.names.getfilename(askedname,suffix) return "" end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-fonts-tfm']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts local tfm={} fonts.handlers.tfm=tfm fonts.formats.tfm="type1" function fonts.readers.tfm(specification) local fullname=specification.filename or "" if fullname=="" then local forced=specification.forced or "" if forced~="" then fullname=specification.name.."."..forced else fullname=specification.name end end local foundname=resolvers.findbinfile(fullname,'tfm') or "" if foundname=="" then foundname=resolvers.findbinfile(fullname,'ofm') or "" end if foundname~="" then specification.filename=foundname specification.format="ofm" return font.read_tfm(specification.filename,specification.size) end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-oti']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local lower=string.lower local fonts=fonts local constructors=fonts.constructors local otf=constructors.newhandler("otf") local otffeatures=constructors.newfeatures("otf") local otftables=otf.tables local registerotffeature=otffeatures.register local allocate=utilities.storage.allocate registerotffeature { name="features", description="initialization of feature handler", default=true, } local function setmode(tfmdata,value) if value then tfmdata.properties.mode=lower(value) end end local function setlanguage(tfmdata,value) if value then local cleanvalue=lower(value) local languages=otftables and otftables.languages local properties=tfmdata.properties if not languages then properties.language=cleanvalue elseif languages[value] then properties.language=cleanvalue else properties.language="dflt" end end end local function setscript(tfmdata,value) if value then local cleanvalue=lower(value) local scripts=otftables and otftables.scripts local properties=tfmdata.properties if not scripts then properties.script=cleanvalue elseif scripts[value] then properties.script=cleanvalue else properties.script="dflt" end end end registerotffeature { name="mode", description="mode", initializers={ base=setmode, node=setmode, } } registerotffeature { name="language", description="language", initializers={ base=setlanguage, node=setlanguage, } } registerotffeature { name="script", description="script", initializers={ base=setscript, node=setscript, } } end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-otf']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local utfbyte=utf.byte local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip local type,next,tonumber,tostring=type,next,tonumber,tostring local abs=math.abs local getn=table.getn local lpegmatch=lpeg.match local reversed,concat,remove=table.reversed,table.concat,table.remove local ioflush=io.flush local fastcopy,tohash,derivetable=table.fastcopy,table.tohash,table.derive local formatters=string.formatters local allocate=utilities.storage.allocate local registertracker=trackers.register local registerdirective=directives.register local starttiming=statistics.starttiming local stoptiming=statistics.stoptiming local elapsedtime=statistics.elapsedtime local findbinfile=resolvers.findbinfile local trace_private=false registertracker("otf.private",function(v) trace_private=v end) local trace_loading=false registertracker("otf.loading",function(v) trace_loading=v end) local trace_features=false registertracker("otf.features",function(v) trace_features=v end) local trace_dynamics=false registertracker("otf.dynamics",function(v) trace_dynamics=v end) local trace_sequences=false registertracker("otf.sequences",function(v) trace_sequences=v end) local trace_markwidth=false registertracker("otf.markwidth",function(v) trace_markwidth=v end) local trace_defining=false registertracker("fonts.defining",function(v) trace_defining=v end) local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf otf.glists={ "gsub","gpos" } otf.version=2.743 otf.cache=containers.define("fonts","otf",otf.version,true) local fontdata=fonts.hashes.identifiers local chardata=characters and characters.data local otffeatures=fonts.constructors.newfeatures("otf") local registerotffeature=otffeatures.register local enhancers=allocate() otf.enhancers=enhancers local patches={} enhancers.patches=patches local definers=fonts.definers local readers=fonts.readers local constructors=fonts.constructors local forceload=false local cleanup=0 local usemetatables=false local packdata=true local syncspace=true local forcenotdef=false local includesubfonts=false local wildcard="*" local default="dflt" local fontloaderfields=fontloader.fields local mainfields=nil local glyphfields=nil registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or (v and 1) or 0 end) registerdirective("fonts.otf.loader.force",function(v) forceload=v end) registerdirective("fonts.otf.loader.usemetatables",function(v) usemetatables=v end) registerdirective("fonts.otf.loader.pack",function(v) packdata=v end) registerdirective("fonts.otf.loader.syncspace",function(v) syncspace=v end) registerdirective("fonts.otf.loader.forcenotdef",function(v) forcenotdef=v end) local function load_featurefile(raw,featurefile) if featurefile and featurefile~="" then if trace_loading then report_otf("using featurefile %a",featurefile) end fontloader.apply_featurefile(raw,featurefile) end end local function showfeatureorder(rawdata,filename) local sequences=rawdata.resources.sequences if sequences and #sequences>0 then if trace_loading then report_otf("font %a has %s sequences",filename,#sequences) report_otf(" ") end for nos=1,#sequences do local sequence=sequences[nos] local typ=sequence.type or "no-type" local name=sequence.name or "no-name" local subtables=sequence.subtables or { "no-subtables" } local features=sequence.features if trace_loading then report_otf("%3i %-15s %-20s [% t]",nos,name,typ,subtables) end if features then for feature,scripts in next,features do local tt={} if type(scripts)=="table" then for script,languages in next,scripts do local ttt={} for language,_ in next,languages do ttt[#ttt+1]=language end tt[#tt+1]=formatters["[%s: % t]"](script,ttt) end if trace_loading then report_otf(" %s: % t",feature,tt) end else if trace_loading then report_otf(" %s: %S",feature,scripts) end end end end end if trace_loading then report_otf("\n") end elseif trace_loading then report_otf("font %a has no sequences",filename) end end local valid_fields=table.tohash { "ascent", "cidinfo", "copyright", "descent", "design_range_bottom", "design_range_top", "design_size", "encodingchanged", "extrema_bound", "familyname", "fontname", "fontname", "fontstyle_id", "fontstyle_name", "fullname", "hasvmetrics", "horiz_base", "issans", "isserif", "italicangle", "macstyle", "onlybitmaps", "origname", "os2_version", "pfminfo", "serifcheck", "sfd_version", "strokedfont", "strokewidth", "table_version", "ttf_tables", "uni_interp", "uniqueid", "units_per_em", "upos", "use_typo_metrics", "uwidth", "version", "vert_base", "weight", "weight_width_slope_only", } local ordered_enhancers={ "prepare tables", "prepare glyphs", "prepare lookups", "analyze glyphs", "analyze math", "prepare tounicode", "reorganize lookups", "reorganize mark classes", "reorganize anchor classes", "reorganize glyph kerns", "reorganize glyph lookups", "reorganize glyph anchors", "merge kern classes", "reorganize features", "reorganize subtables", "check glyphs", "check metadata", "check extra features", "check encoding", "add duplicates", "cleanup tables", } local actions=allocate() local before=allocate() local after=allocate() patches.before=before patches.after=after local function enhance(name,data,filename,raw) local enhancer=actions[name] if enhancer then if trace_loading then report_otf("apply enhancement %a to file %a",name,filename) ioflush() end enhancer(data,filename,raw) else end end function enhancers.apply(data,filename,raw) local basename=file.basename(lower(filename)) if trace_loading then report_otf("%s enhancing file %a","start",filename) end ioflush() for e=1,#ordered_enhancers do local enhancer=ordered_enhancers[e] local b=before[enhancer] if b then for pattern,action in next,b do if find(basename,pattern) then action(data,filename,raw) end end end enhance(enhancer,data,filename,raw) local a=after[enhancer] if a then for pattern,action in next,a do if find(basename,pattern) then action(data,filename,raw) end end end ioflush() end if trace_loading then report_otf("%s enhancing file %a","stop",filename) end ioflush() end function patches.register(what,where,pattern,action) local pw=patches[what] if pw then local ww=pw[where] if ww then ww[pattern]=action else pw[where]={ [pattern]=action} end end end function patches.report(fmt,...) if trace_loading then report_otf("patching: %s",formatters[fmt](...)) end end function enhancers.register(what,action) actions[what]=action end function otf.load(filename,format,sub,featurefile) local base=file.basename(file.removesuffix(filename)) local name=file.removesuffix(base) local attr=lfs.attributes(filename) local size=attr and attr.size or 0 local time=attr and attr.modification or 0 if featurefile then name=name.."@"..file.removesuffix(file.basename(featurefile)) end if sub=="" then sub=false end local hash=name if sub then hash=hash.."-"..sub end hash=containers.cleanname(hash) local featurefiles if featurefile then featurefiles={} for s in gmatch(featurefile,"[^,]+") do local name=resolvers.findfile(file.addsuffix(s,'fea'),'fea') or "" if name=="" then report_otf("loading error, no featurefile %a",s) else local attr=lfs.attributes(name) featurefiles[#featurefiles+1]={ name=name, size=attr and attr.size or 0, time=attr and attr.modification or 0, } end end if #featurefiles==0 then featurefiles=nil end end local data=containers.read(otf.cache,hash) local reload=not data or data.size~=size or data.time~=time if forceload then report_otf("forced reload of %a due to hard coded flag",filename) reload=true end if not reload then local featuredata=data.featuredata if featurefiles then if not featuredata or #featuredata~=#featurefiles then reload=true else for i=1,#featurefiles do local fi,fd=featurefiles[i],featuredata[i] if fi.name~=fd.name or fi.size~=fd.size or fi.time~=fd.time then reload=true break end end end elseif featuredata then reload=true end if reload then report_otf("loading: forced reload due to changed featurefile specification %a",featurefile) end end if reload then report_otf("loading %a, hash %a",filename,hash) local fontdata,messages if sub then fontdata,messages=fontloader.open(filename,sub) else fontdata,messages=fontloader.open(filename) end if fontdata then mainfields=mainfields or (fontloaderfields and fontloaderfields(fontdata)) end if trace_loading and messages and #messages>0 then if type(messages)=="string" then report_otf("warning: %s",messages) else for m=1,#messages do report_otf("warning: %S",messages[m]) end end else report_otf("loading done") end if fontdata then if featurefiles then for i=1,#featurefiles do load_featurefile(fontdata,featurefiles[i].name) end end local unicodes={ } local splitter=lpeg.splitter(" ",unicodes) data={ size=size, time=time, format=format, featuredata=featurefiles, resources={ filename=resolvers.unresolve(filename), version=otf.version, creator="context mkiv", unicodes=unicodes, indices={ }, duplicates={ }, variants={ }, lookuptypes={}, }, metadata={ }, properties={ }, descriptions={}, goodies={}, helpers={ tounicodelist=splitter, tounicodetable=lpeg.Ct(splitter), }, } starttiming(data) report_otf("file size: %s",size) enhancers.apply(data,filename,fontdata) local packtime={} if packdata then if cleanup>0 then collectgarbage("collect") end starttiming(packtime) enhance("pack",data,filename,nil) stoptiming(packtime) end report_otf("saving %a in cache",filename) data=containers.write(otf.cache,hash,data) if cleanup>1 then collectgarbage("collect") end stoptiming(data) if elapsedtime then report_otf("preprocessing and caching time %s, packtime %s", elapsedtime(data),packdata and elapsedtime(packtime) or 0) end fontloader.close(fontdata) if cleanup>3 then collectgarbage("collect") end data=containers.read(otf.cache,hash) if cleanup>2 then collectgarbage("collect") end else data=nil report_otf("loading failed due to read error") end end if data then if trace_defining then report_otf("loading from cache using hash %a",hash) end enhance("unpack",data,filename,nil,false) enhance("add dimensions",data,filename,nil,false) if trace_sequences then showfeatureorder(data,filename) end end return data end local mt={ __index=function(t,k) if k=="height" then local ht=t.boundingbox[4] return ht<0 and 0 or ht elseif k=="depth" then local dp=-t.boundingbox[2] return dp<0 and 0 or dp elseif k=="width" then return 0 elseif k=="name" then return forcenotdef and ".notdef" end end } actions["prepare tables"]=function(data,filename,raw) data.properties.hasitalics=false end actions["add dimensions"]=function(data,filename) if data then local descriptions=data.descriptions local resources=data.resources local defaultwidth=resources.defaultwidth or 0 local defaultheight=resources.defaultheight or 0 local defaultdepth=resources.defaultdepth or 0 local basename=trace_markwidth and file.basename(filename) if usemetatables then for _,d in next,descriptions do local wd=d.width if not wd then d.width=defaultwidth elseif trace_markwidth and wd~=0 and d.class=="mark" then report_otf("mark %a with width %b found in %a",d.name or "",wd,basename) end setmetatable(d,mt) end else for _,d in next,descriptions do local bb,wd=d.boundingbox,d.width if not wd then d.width=defaultwidth elseif trace_markwidth and wd~=0 and d.class=="mark" then report_otf("mark %a with width %b found in %a",d.name or "",wd,basename) end if bb then local ht,dp=bb[4],-bb[2] if ht==0 or ht<0 then else d.height=ht end if dp==0 or dp<0 then else d.depth=dp end end end end end end local function somecopy(old) if old then local new={} if type(old)=="table" then for k,v in next,old do if k=="glyphs" then elseif type(v)=="table" then new[k]=somecopy(v) else new[k]=v end end else for i=1,#mainfields do local k=mainfields[i] local v=old[k] if k=="glyphs" then elseif type(v)=="table" then new[k]=somecopy(v) else new[k]=v end end end return new else return {} end end actions["prepare glyphs"]=function(data,filename,raw) local rawglyphs=raw.glyphs local rawsubfonts=raw.subfonts local rawcidinfo=raw.cidinfo local criterium=constructors.privateoffset local private=criterium local resources=data.resources local metadata=data.metadata local properties=data.properties local descriptions=data.descriptions local unicodes=resources.unicodes local indices=resources.indices local duplicates=resources.duplicates local variants=resources.variants if rawsubfonts then metadata.subfonts=includesubfonts and {} properties.cidinfo=rawcidinfo if rawcidinfo.registry then local cidmap=fonts.cid.getmap(rawcidinfo) if cidmap then rawcidinfo.usedname=cidmap.usedname local nofnames,nofunicodes=0,0 local cidunicodes,cidnames=cidmap.unicodes,cidmap.names for cidindex=1,#rawsubfonts do local subfont=rawsubfonts[cidindex] local cidglyphs=subfont.glyphs if includesubfonts then metadata.subfonts[cidindex]=somecopy(subfont) end for index=0,subfont.glyphcnt-1 do local glyph=cidglyphs[index] if glyph then local unicode=glyph.unicode local name=glyph.name or cidnames[index] if not unicode or unicode==-1 or unicode>=criterium then unicode=cidunicodes[index] end if unicode and descriptions[unicode] then report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode) unicode=-1 end if not unicode or unicode==-1 or unicode>=criterium then if not name then name=format("u%06X",private) end unicode=private unicodes[name]=private if trace_private then report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private) end private=private+1 nofnames=nofnames+1 else if not name then name=format("u%06X",unicode) end unicodes[name]=unicode nofunicodes=nofunicodes+1 end indices[index]=unicode local description={ boundingbox=glyph.boundingbox, name=glyph.name or name or "unknown", cidindex=cidindex, index=index, glyph=glyph, } descriptions[unicode]=description else end end end if trace_loading then report_otf("cid font remapped, %s unicode points, %s symbolic names, %s glyphs",nofunicodes,nofnames,nofunicodes+nofnames) end elseif trace_loading then report_otf("unable to remap cid font, missing cid file for %a",filename) end elseif trace_loading then report_otf("font %a has no glyphs",filename) end else for index=0,raw.glyphcnt-1 do local glyph=rawglyphs[index] if glyph then local unicode=glyph.unicode local name=glyph.name if not unicode or unicode==-1 or unicode>=criterium then unicode=private unicodes[name]=private if trace_private then report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private) end private=private+1 else unicodes[name]=unicode end indices[index]=unicode if not name then name=format("u%06X",unicode) end descriptions[unicode]={ boundingbox=glyph.boundingbox, name=name, index=index, glyph=glyph, } local altuni=glyph.altuni if altuni then local d for i=1,#altuni do local a=altuni[i] local u=a.unicode local v=a.variant if v then local vv=variants[v] if vv then vv[u]=unicode else vv={ [u]=unicode } variants[v]=vv end elseif d then d[#d+1]=u else d={ u } end end if d then duplicates[unicode]=d end end else report_otf("potential problem: glyph %U is used but empty",index) end end end resources.private=private end actions["check encoding"]=function(data,filename,raw) local descriptions=data.descriptions local resources=data.resources local properties=data.properties local unicodes=resources.unicodes local indices=resources.indices local duplicates=resources.duplicates local mapdata=raw.map or {} local unicodetoindex=mapdata and mapdata.map or {} local encname=lower(data.enc_name or mapdata.enc_name or "") local criterium=0xFFFF if find(encname,"unicode") then if trace_loading then report_otf("checking embedded unicode map %a",encname) end for unicode,index in next,unicodetoindex do if unicode<=criterium and not descriptions[unicode] then local parent=indices[index] if not parent then report_otf("weird, unicode %U points to nowhere with index %H",unicode,index) else local parentdescription=descriptions[parent] if parentdescription then local altuni=parentdescription.altuni if not altuni then altuni={ { unicode=parent } } parentdescription.altuni=altuni duplicates[parent]={ unicode } else local done=false for i=1,#altuni do if altuni[i].unicode==parent then done=true break end end if not done then altuni[#altuni+1]={ unicode=parent } table.insert(duplicates[parent],unicode) end end if trace_loading then report_otf("weird, unicode %U points to nowhere with index %H",unicode,index) end else report_otf("weird, unicode %U points to %U with index %H",unicode,index) end end end end elseif properties.cidinfo then report_otf("warning: no unicode map, used cidmap %a",properties.cidinfo.usedname) else report_otf("warning: non unicode map %a, only using glyph unicode data",encname or "whatever") end if mapdata then mapdata.map={} end end actions["add duplicates"]=function(data,filename,raw) local descriptions=data.descriptions local resources=data.resources local properties=data.properties local unicodes=resources.unicodes local indices=resources.indices local duplicates=resources.duplicates for unicode,d in next,duplicates do for i=1,#d do local u=d[i] if not descriptions[u] then local description=descriptions[unicode] local duplicate=table.copy(description) duplicate.comment=format("copy of U+%05X",unicode) descriptions[u]=duplicate local n=0 for _,description in next,descriptions do if kerns then local kerns=description.kerns for _,k in next,kerns do local ku=k[unicode] if ku then k[u]=ku n=n+1 end end end end if trace_loading then report_otf("duplicating %U to %U with index %H (%s kerns)",unicode,u,description.index,n) end end end end end actions["analyze glyphs"]=function(data,filename,raw) local descriptions=data.descriptions local resources=data.resources local metadata=data.metadata local properties=data.properties local hasitalics=false local widths={} local marks={} for unicode,description in next,descriptions do local glyph=description.glyph local italic=glyph.italic_correction if not italic then elseif italic==0 then else description.italic=italic hasitalics=true end local width=glyph.width widths[width]=(widths[width] or 0)+1 local class=glyph.class if class then if class=="mark" then marks[unicode]=true end description.class=class end end properties.hasitalics=hasitalics resources.marks=marks local wd,most=0,1 for k,v in next,widths do if v>most then wd,most=k,v end end if most>1000 then if trace_loading then report_otf("most common width: %s (%s times), sharing (cjk font)",wd,most) end for unicode,description in next,descriptions do if description.width==wd then else description.width=description.glyph.width end end resources.defaultwidth=wd else for unicode,description in next,descriptions do description.width=description.glyph.width end end end actions["reorganize mark classes"]=function(data,filename,raw) local mark_classes=raw.mark_classes if mark_classes then local resources=data.resources local unicodes=resources.unicodes local markclasses={} resources.markclasses=markclasses for name,class in next,mark_classes do local t={} for s in gmatch(class,"[^ ]+") do t[unicodes[s]]=true end markclasses[name]=t end end end actions["reorganize features"]=function(data,filename,raw) local features={} data.resources.features=features for k,what in next,otf.glists do local dw=raw[what] if dw then local f={} features[what]=f for i=1,#dw do local d=dw[i] local dfeatures=d.features if dfeatures then for i=1,#dfeatures do local df=dfeatures[i] local tag=strip(lower(df.tag)) local ft=f[tag] if not ft then ft={} f[tag]=ft end local dscripts=df.scripts for i=1,#dscripts do local d=dscripts[i] local languages=d.langs local script=strip(lower(d.script)) local fts=ft[script] if not fts then fts={} ft[script]=fts end for i=1,#languages do fts[strip(lower(languages[i]))]=true end end end end end end end end actions["reorganize anchor classes"]=function(data,filename,raw) local resources=data.resources local anchor_to_lookup={} local lookup_to_anchor={} resources.anchor_to_lookup=anchor_to_lookup resources.lookup_to_anchor=lookup_to_anchor local classes=raw.anchor_classes if classes then for c=1,#classes do local class=classes[c] local anchor=class.name local lookups=class.lookup if type(lookups)~="table" then lookups={ lookups } end local a=anchor_to_lookup[anchor] if not a then a={} anchor_to_lookup[anchor]=a end for l=1,#lookups do local lookup=lookups[l] local l=lookup_to_anchor[lookup] if l then l[anchor]=true else l={ [anchor]=true } lookup_to_anchor[lookup]=l end a[lookup]=true end end end end actions["prepare tounicode"]=function(data,filename,raw) fonts.mappings.addtounicode(data,filename) end local g_directions={ gsub_contextchain=1, gpos_contextchain=1, gsub_reversecontextchain=-1, gpos_reversecontextchain=-1, } local function supported(features) for i=1,#features do if features[i].ismac then return false end end return true end actions["reorganize subtables"]=function(data,filename,raw) local resources=data.resources local sequences={} local lookups={} local chainedfeatures={} resources.sequences=sequences resources.lookups=lookups for _,what in next,otf.glists do local dw=raw[what] if dw then for k=1,#dw do local gk=dw[k] local features=gk.features if not features or supported(features) then local typ=gk.type local chain=g_directions[typ] or 0 local subtables=gk.subtables if subtables then local t={} for s=1,#subtables do t[s]=subtables[s].name end subtables=t end local flags,markclass=gk.flags,nil if flags then local t={ (flags.ignorecombiningmarks and "mark") or false, (flags.ignoreligatures and "ligature") or false, (flags.ignorebaseglyphs and "base") or false, flags.r2l or false, } markclass=flags.mark_class if markclass then markclass=resources.markclasses[markclass] end flags=t end local name=gk.name if not name then report_otf("skipping weird lookup number %s",k) elseif features then local f={} for i=1,#features do local df=features[i] local tag=strip(lower(df.tag)) local ft=f[tag] if not ft then ft={} f[tag]=ft end local dscripts=df.scripts for i=1,#dscripts do local d=dscripts[i] local languages=d.langs local script=strip(lower(d.script)) local fts=ft[script] if not fts then fts={} ft[script]=fts end for i=1,#languages do fts[strip(lower(languages[i]))]=true end end end sequences[#sequences+1]={ type=typ, chain=chain, flags=flags, name=name, subtables=subtables, markclass=markclass, features=f, } else lookups[name]={ type=typ, chain=chain, flags=flags, subtables=subtables, markclass=markclass, } end end end end end end actions["prepare lookups"]=function(data,filename,raw) local lookups=raw.lookups if lookups then data.lookups=lookups end end local function t_uncover(splitter,cache,covers) local result={} for n=1,#covers do local cover=covers[n] local uncovered=cache[cover] if not uncovered then uncovered=lpegmatch(splitter,cover) cache[cover]=uncovered end result[n]=uncovered end return result end local function s_uncover(splitter,cache,cover) if cover=="" then return nil else local uncovered=cache[cover] if not uncovered then uncovered=lpegmatch(splitter,cover) cache[cover]=uncovered end return { uncovered } end end local function t_hashed(t,cache) if t then local ht={} for i=1,#t do local ti=t[i] local tih=cache[ti] if not tih then tih={} for i=1,#ti do tih[ti[i]]=true end cache[ti]=tih end ht[i]=tih end return ht else return nil end end local function s_hashed(t,cache) if t then local ht={} local tf=t[1] for i=1,#tf do ht[i]={ [tf[i]]=true } end return ht else return nil end end local function r_uncover(splitter,cache,cover,replacements) if cover=="" then return nil else local uncovered=cover[1] local replaced=cache[replacements] if not replaced then replaced=lpegmatch(splitter,replacements) cache[replacements]=replaced end local nu,nr=#uncovered,#replaced local r={} if nu==nr then for i=1,nu do r[uncovered[i]]=replaced[i] end end return r end end actions["reorganize lookups"]=function(data,filename,raw) if data.lookups then local splitter=data.helpers.tounicodetable local t_u_cache={} local s_u_cache=t_u_cache local t_h_cache={} local s_h_cache=t_h_cache local r_u_cache={} for _,lookup in next,data.lookups do local rules=lookup.rules if rules then local format=lookup.format if format=="class" then local before_class=lookup.before_class if before_class then before_class=t_uncover(splitter,t_u_cache,reversed(before_class)) end local current_class=lookup.current_class if current_class then current_class=t_uncover(splitter,t_u_cache,current_class) end local after_class=lookup.after_class if after_class then after_class=t_uncover(splitter,t_u_cache,after_class) end for i=1,#rules do local rule=rules[i] local class=rule.class local before=class.before if before then for i=1,#before do before[i]=before_class[before[i]] or {} end rule.before=t_hashed(before,t_h_cache) end local current=class.current local lookups=rule.lookups if current then for i=1,#current do current[i]=current_class[current[i]] or {} if lookups and not lookups[i] then lookups[i]="" end end rule.current=t_hashed(current,t_h_cache) end local after=class.after if after then for i=1,#after do after[i]=after_class[after[i]] or {} end rule.after=t_hashed(after,t_h_cache) end rule.class=nil end lookup.before_class=nil lookup.current_class=nil lookup.after_class=nil lookup.format="coverage" elseif format=="coverage" then for i=1,#rules do local rule=rules[i] local coverage=rule.coverage if coverage then local before=coverage.before if before then before=t_uncover(splitter,t_u_cache,reversed(before)) rule.before=t_hashed(before,t_h_cache) end local current=coverage.current if current then current=t_uncover(splitter,t_u_cache,current) local lookups=rule.lookups if lookups then for i=1,#current do if not lookups[i] then lookups[i]="" end end end rule.current=t_hashed(current,t_h_cache) end local after=coverage.after if after then after=t_uncover(splitter,t_u_cache,after) rule.after=t_hashed(after,t_h_cache) end rule.coverage=nil end end elseif format=="reversecoverage" then for i=1,#rules do local rule=rules[i] local reversecoverage=rule.reversecoverage if reversecoverage then local before=reversecoverage.before if before then before=t_uncover(splitter,t_u_cache,reversed(before)) rule.before=t_hashed(before,t_h_cache) end local current=reversecoverage.current if current then current=t_uncover(splitter,t_u_cache,current) rule.current=t_hashed(current,t_h_cache) end local after=reversecoverage.after if after then after=t_uncover(splitter,t_u_cache,after) rule.after=t_hashed(after,t_h_cache) end local replacements=reversecoverage.replacements if replacements then rule.replacements=r_uncover(splitter,r_u_cache,current,replacements) end rule.reversecoverage=nil end end elseif format=="glyphs" then for i=1,#rules do local rule=rules[i] local glyphs=rule.glyphs if glyphs then local fore=glyphs.fore if fore and fore~="" then fore=s_uncover(splitter,s_u_cache,fore) rule.before=s_hashed(fore,s_h_cache) end local back=glyphs.back if back then back=s_uncover(splitter,s_u_cache,back) rule.after=s_hashed(back,s_h_cache) end local names=glyphs.names if names then names=s_uncover(splitter,s_u_cache,names) rule.current=s_hashed(names,s_h_cache) end rule.glyphs=nil end end end end end end end local function check_variants(unicode,the_variants,splitter,unicodes) local variants=the_variants.variants if variants then local glyphs=lpegmatch(splitter,variants) local done={ [unicode]=true } local n=0 for i=1,#glyphs do local g=glyphs[i] if done[g] then report_otf("skipping cyclic reference %U in math variant %U",g,unicode) else if n==0 then n=1 variants={ g } else n=n+1 variants[n]=g end done[g]=true end end if n==0 then variants=nil end end local parts=the_variants.parts if parts then local p=#parts if p>0 then for i=1,p do local pi=parts[i] pi.glyph=unicodes[pi.component] or 0 pi.component=nil end else parts=nil end end local italic_correction=the_variants.italic_correction if italic_correction and italic_correction==0 then italic_correction=nil end return variants,parts,italic_correction end actions["analyze math"]=function(data,filename,raw) if raw.math then data.metadata.math=raw.math local unicodes=data.resources.unicodes local splitter=data.helpers.tounicodetable for unicode,description in next,data.descriptions do local glyph=description.glyph local mathkerns=glyph.mathkern local horiz_variants=glyph.horiz_variants local vert_variants=glyph.vert_variants local top_accent=glyph.top_accent if mathkerns or horiz_variants or vert_variants or top_accent then local math={} if top_accent then math.top_accent=top_accent end if mathkerns then for k,v in next,mathkerns do if not next(v) then mathkerns[k]=nil else for k,v in next,v do if v==0 then k[v]=nil end end end end math.kerns=mathkerns end if horiz_variants then math.horiz_variants,math.horiz_parts,math.horiz_italic_correction=check_variants(unicode,horiz_variants,splitter,unicodes) end if vert_variants then math.vert_variants,math.vert_parts,math.vert_italic_correction=check_variants(unicode,vert_variants,splitter,unicodes) end local italic_correction=description.italic if italic_correction and italic_correction~=0 then math.italic_correction=italic_correction end description.math=math end end end end actions["reorganize glyph kerns"]=function(data,filename,raw) local descriptions=data.descriptions local resources=data.resources local unicodes=resources.unicodes for unicode,description in next,descriptions do local kerns=description.glyph.kerns if kerns then local newkerns={} for k,kern in next,kerns do local name=kern.char local offset=kern.off local lookup=kern.lookup if name and offset and lookup then local unicode=unicodes[name] if unicode then if type(lookup)=="table" then for l=1,#lookup do local lookup=lookup[l] local lookupkerns=newkerns[lookup] if lookupkerns then lookupkerns[unicode]=offset else newkerns[lookup]={ [unicode]=offset } end end else local lookupkerns=newkerns[lookup] if lookupkerns then lookupkerns[unicode]=offset else newkerns[lookup]={ [unicode]=offset } end end elseif trace_loading then report_otf("problems with unicode %a of kern %a of glyph %U",name,k,unicode) end end end description.kerns=newkerns end end end actions["merge kern classes"]=function(data,filename,raw) local gposlist=raw.gpos if gposlist then local descriptions=data.descriptions local resources=data.resources local unicodes=resources.unicodes local splitter=data.helpers.tounicodetable for gp=1,#gposlist do local gpos=gposlist[gp] local subtables=gpos.subtables if subtables then for s=1,#subtables do local subtable=subtables[s] local kernclass=subtable.kernclass if kernclass then local split={} for k=1,#kernclass do local kcl=kernclass[k] local firsts=kcl.firsts local seconds=kcl.seconds local offsets=kcl.offsets local lookups=kcl.lookup if type(lookups)~="table" then lookups={ lookups } end for n,s in next,firsts do split[s]=split[s] or lpegmatch(splitter,s) end local maxseconds=0 for n,s in next,seconds do if n>maxseconds then maxseconds=n end split[s]=split[s] or lpegmatch(splitter,s) end for l=1,#lookups do local lookup=lookups[l] for fk=1,#firsts do local fv=firsts[fk] local splt=split[fv] if splt then local extrakerns={} local baseoffset=(fk-1)*maxseconds for sk=2,maxseconds do local sv=seconds[sk] local splt=split[sv] if splt then local offset=offsets[baseoffset+sk] if offset then for i=1,#splt do extrakerns[splt[i]]=offset end end end end for i=1,#splt do local first_unicode=splt[i] local description=descriptions[first_unicode] if description then local kerns=description.kerns if not kerns then kerns={} description.kerns=kerns end local lookupkerns=kerns[lookup] if not lookupkerns then lookupkerns={} kerns[lookup]=lookupkerns end for second_unicode,kern in next,extrakerns do lookupkerns[second_unicode]=kern end elseif trace_loading then report_otf("no glyph data for %U",first_unicode) end end end end end end subtable.kernclass={} end end end end end end actions["check glyphs"]=function(data,filename,raw) for unicode,description in next,data.descriptions do description.glyph=nil end end actions["check metadata"]=function(data,filename,raw) local metadata=data.metadata for _,k in next,mainfields do if valid_fields[k] then local v=raw[k] if not metadata[k] then metadata[k]=v end end end local ttftables=metadata.ttf_tables if ttftables then for i=1,#ttftables do ttftables[i].data="deleted" end end end actions["cleanup tables"]=function(data,filename,raw) data.resources.indices=nil data.helpers=nil end actions["reorganize glyph lookups"]=function(data,filename,raw) local resources=data.resources local unicodes=resources.unicodes local descriptions=data.descriptions local splitter=data.helpers.tounicodelist local lookuptypes=resources.lookuptypes for unicode,description in next,descriptions do local lookups=description.glyph.lookups if lookups then for tag,lookuplist in next,lookups do for l=1,#lookuplist do local lookup=lookuplist[l] local specification=lookup.specification local lookuptype=lookup.type local lt=lookuptypes[tag] if not lt then lookuptypes[tag]=lookuptype elseif lt~=lookuptype then report_otf("conflicting lookuptypes, %a points to %a and %a",tag,lt,lookuptype) end if lookuptype=="ligature" then lookuplist[l]={ lpegmatch(splitter,specification.components) } elseif lookuptype=="alternate" then lookuplist[l]={ lpegmatch(splitter,specification.components) } elseif lookuptype=="substitution" then lookuplist[l]=unicodes[specification.variant] elseif lookuptype=="multiple" then lookuplist[l]={ lpegmatch(splitter,specification.components) } elseif lookuptype=="position" then lookuplist[l]={ specification.x or 0, specification.y or 0, specification.h or 0, specification.v or 0 } elseif lookuptype=="pair" then local one=specification.offsets[1] local two=specification.offsets[2] local paired=unicodes[specification.paired] if one then if two then lookuplist[l]={ paired,{ one.x or 0,one.y or 0,one.h or 0,one.v or 0 },{ two.x or 0,two.y or 0,two.h or 0,two.v or 0 } } else lookuplist[l]={ paired,{ one.x or 0,one.y or 0,one.h or 0,one.v or 0 } } end else if two then lookuplist[l]={ paired,{},{ two.x or 0,two.y or 0,two.h or 0,two.v or 0} } else lookuplist[l]={ paired } end end end end end local slookups,mlookups for tag,lookuplist in next,lookups do if #lookuplist==1 then if slookups then slookups[tag]=lookuplist[1] else slookups={ [tag]=lookuplist[1] } end else if mlookups then mlookups[tag]=lookuplist else mlookups={ [tag]=lookuplist } end end end if slookups then description.slookups=slookups end if mlookups then description.mlookups=mlookups end end end end actions["reorganize glyph anchors"]=function(data,filename,raw) local descriptions=data.descriptions for unicode,description in next,descriptions do local anchors=description.glyph.anchors if anchors then for class,data in next,anchors do if class=="baselig" then for tag,specification in next,data do for i=1,#specification do local si=specification[i] specification[i]={ si.x or 0,si.y or 0 } end end else for tag,specification in next,data do data[tag]={ specification.x or 0,specification.y or 0 } end end end description.anchors=anchors end end end function otf.setfeatures(tfmdata,features) local okay=constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf) if okay then return constructors.collectprocessors("otf",tfmdata,features,trace_features,report_otf) else return {} end end local function copytotfm(data,cache_id) if data then local metadata=data.metadata local resources=data.resources local properties=derivetable(data.properties) local descriptions=derivetable(data.descriptions) local goodies=derivetable(data.goodies) local characters={} local parameters={} local mathparameters={} local pfminfo=metadata.pfminfo or {} local resources=data.resources local unicodes=resources.unicodes local spaceunits=500 local spacer="space" local designsize=metadata.designsize or metadata.design_size or 100 local mathspecs=metadata.math if designsize==0 then designsize=100 end if mathspecs then for name,value in next,mathspecs do mathparameters[name]=value end end for unicode,_ in next,data.descriptions do characters[unicode]={} end if mathspecs then for unicode,character in next,characters do local d=descriptions[unicode] local m=d.math if m then local variants=m.horiz_variants local parts=m.horiz_parts if variants then local c=character for i=1,#variants do local un=variants[i] c.next=un c=characters[un] end c.horiz_variants=parts elseif parts then character.horiz_variants=parts end local variants=m.vert_variants local parts=m.vert_parts if variants then local c=character for i=1,#variants do local un=variants[i] c.next=un c=characters[un] end c.vert_variants=parts elseif parts then character.vert_variants=parts end local italic_correction=m.vert_italic_correction if italic_correction then character.vert_italic_correction=italic_correction end local top_accent=m.top_accent if top_accent then character.top_accent=top_accent end local kerns=m.kerns if kerns then character.mathkerns=kerns end end end end local monospaced=metadata.isfixedpitch or (pfminfo.panose and pfminfo.panose.proportion=="Monospaced") local charwidth=pfminfo.avgwidth local italicangle=metadata.italicangle local charxheight=pfminfo.os2_xheight and pfminfo.os2_xheight>0 and pfminfo.os2_xheight properties.monospaced=monospaced parameters.italicangle=italicangle parameters.charwidth=charwidth parameters.charxheight=charxheight local space=0x0020 local emdash=0x2014 if monospaced then if descriptions[space] then spaceunits,spacer=descriptions[space].width,"space" end if not spaceunits and descriptions[emdash] then spaceunits,spacer=descriptions[emdash].width,"emdash" end if not spaceunits and charwidth then spaceunits,spacer=charwidth,"charwidth" end else if descriptions[space] then spaceunits,spacer=descriptions[space].width,"space" end if not spaceunits and descriptions[emdash] then spaceunits,spacer=descriptions[emdash].width/2,"emdash/2" end if not spaceunits and charwidth then spaceunits,spacer=charwidth,"charwidth" end end spaceunits=tonumber(spaceunits) or 500 local filename=constructors.checkedfilename(resources) local fontname=metadata.fontname local fullname=metadata.fullname or fontname local units=metadata.units_per_em or 1000 if units==0 then units=1000 metadata.units_per_em=1000 end parameters.slant=0 parameters.space=spaceunits parameters.space_stretch=units/2 parameters.space_shrink=1*units/3 parameters.x_height=2*units/5 parameters.quad=units if spaceunits<2*units/5 then end if italicangle then parameters.italicangle=italicangle parameters.italicfactor=math.cos(math.rad(90+italicangle)) parameters.slant=- math.round(math.tan(italicangle*math.pi/180)) end if monospaced then parameters.space_stretch=0 parameters.space_shrink=0 elseif syncspace then parameters.space_stretch=spaceunits/2 parameters.space_shrink=spaceunits/3 end parameters.extra_space=parameters.space_shrink if charxheight then parameters.x_height=charxheight else local x=0x78 if x then local x=descriptions[x] if x then parameters.x_height=x.height end end end parameters.designsize=(designsize/10)*65536 parameters.ascender=abs(metadata.ascent or 0) parameters.descender=abs(metadata.descent or 0) parameters.units=units properties.space=spacer properties.encodingbytes=2 properties.format=data.format or fonts.formats[filename] or "opentype" properties.noglyphnames=true properties.filename=filename properties.fontname=fontname properties.fullname=fullname properties.psname=fontname or fullname properties.name=filename or fullname return { characters=characters, descriptions=descriptions, parameters=parameters, mathparameters=mathparameters, resources=resources, properties=properties, goodies=goodies, } end end local function otftotfm(specification) local cache_id=specification.hash local tfmdata=containers.read(constructors.cache,cache_id) if not tfmdata then local name=specification.name local sub=specification.sub local filename=specification.filename local format=specification.format local features=specification.features.normal local rawdata=otf.load(filename,format,sub,features and features.featurefile) if rawdata and next(rawdata) then rawdata.lookuphash={} tfmdata=copytotfm(rawdata,cache_id) if tfmdata and next(tfmdata) then local features=constructors.checkedfeatures("otf",features) local shared=tfmdata.shared if not shared then shared={} tfmdata.shared=shared end shared.rawdata=rawdata shared.dynamics={} tfmdata.changed={} shared.features=features shared.processes=otf.setfeatures(tfmdata,features) end end containers.write(constructors.cache,cache_id,tfmdata) end return tfmdata end local function read_from_otf(specification) local tfmdata=otftotfm(specification) if tfmdata then tfmdata.properties.name=specification.name tfmdata.properties.sub=specification.sub tfmdata=constructors.scale(tfmdata,specification) local allfeatures=tfmdata.shared.features or specification.features.normal constructors.applymanipulators("otf",tfmdata,allfeatures,trace_features,report_otf) constructors.setname(tfmdata,specification) fonts.loggers.register(tfmdata,file.suffix(specification.filename),specification) end return tfmdata end local function checkmathsize(tfmdata,mathsize) local mathdata=tfmdata.shared.rawdata.metadata.math local mathsize=tonumber(mathsize) if mathdata then local parameters=tfmdata.parameters parameters.scriptpercentage=mathdata.ScriptPercentScaleDown parameters.scriptscriptpercentage=mathdata.ScriptScriptPercentScaleDown parameters.mathsize=mathsize end end registerotffeature { name="mathsize", description="apply mathsize specified in the font", initializers={ base=checkmathsize, node=checkmathsize, } } function otf.collectlookups(rawdata,kind,script,language) local sequences=rawdata.resources.sequences if sequences then local featuremap,featurelist={},{} for s=1,#sequences do local sequence=sequences[s] local features=sequence.features features=features and features[kind] features=features and (features[script] or features[default] or features[wildcard]) features=features and (features[language] or features[default] or features[wildcard]) if features then local subtables=sequence.subtables if subtables then for s=1,#subtables do local ss=subtables[s] if not featuremap[s] then featuremap[ss]=true featurelist[#featurelist+1]=ss end end end end end if #featurelist>0 then return featuremap,featurelist end end return nil,nil end local function check_otf(forced,specification,suffix,what) local name=specification.name if forced then name=file.addsuffix(name,suffix,true) end local fullname=findbinfile(name,suffix) or "" if fullname=="" then fullname=fonts.names.getfilename(name,suffix) or "" end if fullname~="" then specification.filename=fullname specification.format=what return read_from_otf(specification) end end local function opentypereader(specification,suffix,what) local forced=specification.forced or "" if forced=="otf" then return check_otf(true,specification,forced,"opentype") elseif forced=="ttf" or forced=="ttc" or forced=="dfont" then return check_otf(true,specification,forced,"truetype") else return check_otf(false,specification,suffix,what) end end readers.opentype=opentypereader local formats=fonts.formats formats.otf="opentype" formats.ttf="truetype" formats.ttc="truetype" formats.dfont="truetype" function readers.otf (specification) return opentypereader(specification,"otf",formats.otf ) end function readers.ttf (specification) return opentypereader(specification,"ttf",formats.ttf ) end function readers.ttc (specification) return opentypereader(specification,"ttf",formats.ttc ) end function readers.dfont(specification) return opentypereader(specification,"ttf",formats.dfont) end function otf.scriptandlanguage(tfmdata,attr) local properties=tfmdata.properties return properties.script or "dflt",properties.language or "dflt" end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-otb']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local concat=table.concat local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip local type,next,tonumber,tostring=type,next,tonumber,tostring local lpegmatch=lpeg.match local utfchar=utf.char local trace_baseinit=false trackers.register("otf.baseinit",function(v) trace_baseinit=v end) local trace_singles=false trackers.register("otf.singles",function(v) trace_singles=v end) local trace_multiples=false trackers.register("otf.multiples",function(v) trace_multiples=v end) local trace_alternatives=false trackers.register("otf.alternatives",function(v) trace_alternatives=v end) local trace_ligatures=false trackers.register("otf.ligatures",function(v) trace_ligatures=v end) local trace_ligatures_detail=false trackers.register("otf.ligatures.detail",function(v) trace_ligatures_detail=v end) local trace_kerns=false trackers.register("otf.kerns",function(v) trace_kerns=v end) local trace_preparing=false trackers.register("otf.preparing",function(v) trace_preparing=v end) local report_prepare=logs.reporter("fonts","otf prepare") local fonts=fonts local otf=fonts.handlers.otf local otffeatures=otf.features local registerotffeature=otffeatures.register otf.defaultbasealternate="none" local wildcard="*" local default="dflt" local formatters=string.formatters local f_unicode=formatters["%U"] local f_uniname=formatters["%U (%s)"] local f_unilist=formatters["% t (% t)"] local function gref(descriptions,n) if type(n)=="number" then local name=descriptions[n].name if name then return f_uniname(n,name) else return f_unicode(n) end elseif n then local num,nam={},{} for i=2,#n do local ni=n[i] if tonumber(ni) then local di=descriptions[ni] num[i]=f_unicode(ni) nam[i]=di and di.name or "-" end end return f_unilist(num,nam) else return "" end end local function cref(feature,lookupname) if lookupname then return formatters["feature %a, lookup %a"](feature,lookupname) else return formatters["feature %a"](feature) end end local function report_alternate(feature,lookupname,descriptions,unicode,replacement,value,comment) report_prepare("%s: base alternate %s => %s (%S => %S)", cref(feature,lookupname), gref(descriptions,unicode), replacement and gref(descriptions,replacement), value, comment) end local function report_substitution(feature,lookupname,descriptions,unicode,substitution) report_prepare("%s: base substitution %s => %S", cref(feature,lookupname), gref(descriptions,unicode), gref(descriptions,substitution)) end local function report_ligature(feature,lookupname,descriptions,unicode,ligature) report_prepare("%s: base ligature %s => %S", cref(feature,lookupname), gref(descriptions,ligature), gref(descriptions,unicode)) end local function report_kern(feature,lookupname,descriptions,unicode,otherunicode,value) report_prepare("%s: base kern %s + %s => %S", cref(feature,lookupname), gref(descriptions,unicode), gref(descriptions,otherunicode), value) end local basemethods={} local basemethod="" local function applybasemethod(what,...) local m=basemethods[basemethod][what] if m then return m(...) end end local basehash,basehashes,applied={},1,{} local function registerbasehash(tfmdata) local properties=tfmdata.properties local hash=concat(applied," ") local base=basehash[hash] if not base then basehashes=basehashes+1 base=basehashes basehash[hash]=base end properties.basehash=base properties.fullname=properties.fullname.."-"..base applied={} end local function registerbasefeature(feature,value) applied[#applied+1]=feature.."="..tostring(value) end local trace=false local function finalize_ligatures(tfmdata,ligatures) local nofligatures=#ligatures if nofligatures>0 then local characters=tfmdata.characters local descriptions=tfmdata.descriptions local resources=tfmdata.resources local unicodes=resources.unicodes local private=resources.private local alldone=false while not alldone do local done=0 for i=1,nofligatures do local ligature=ligatures[i] if ligature then local unicode,lookupdata=ligature[1],ligature[2] if trace then trace_ligatures_detail("building % a into %a",lookupdata,unicode) end local size=#lookupdata local firstcode=lookupdata[1] local firstdata=characters[firstcode] local okay=false if firstdata then local firstname="ctx_"..firstcode for i=1,size-1 do local firstdata=characters[firstcode] if not firstdata then firstcode=private if trace then trace_ligatures_detail("defining %a as %a",firstname,firstcode) end unicodes[firstname]=firstcode firstdata={ intermediate=true,ligatures={} } characters[firstcode]=firstdata descriptions[firstcode]={ name=firstname } private=private+1 end local target local secondcode=lookupdata[i+1] local secondname=firstname.."_"..secondcode if i==size-1 then target=unicode if not unicodes[secondname] then unicodes[secondname]=unicode end okay=true else target=unicodes[secondname] if not target then break end end if trace then trace_ligatures_detail("codes (%a,%a) + (%a,%a) -> %a",firstname,firstcode,secondname,secondcode,target) end local firstligs=firstdata.ligatures if firstligs then firstligs[secondcode]={ char=target } else firstdata.ligatures={ [secondcode]={ char=target } } end firstcode=target firstname=secondname end end if okay then ligatures[i]=false done=done+1 end end end alldone=done==0 end if trace then for k,v in next,characters do if v.ligatures then table.print(v,k) end end end tfmdata.resources.private=private end end local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist) local characters=tfmdata.characters local descriptions=tfmdata.descriptions local resources=tfmdata.resources local changed=tfmdata.changed local unicodes=resources.unicodes local lookuphash=resources.lookuphash local lookuptypes=resources.lookuptypes local ligatures={} local alternate=tonumber(value) local defaultalt=otf.defaultbasealternate local trace_singles=trace_baseinit and trace_singles local trace_alternatives=trace_baseinit and trace_alternatives local trace_ligatures=trace_baseinit and trace_ligatures local actions={ substitution=function(lookupdata,lookupname,description,unicode) if trace_singles then report_substitution(feature,lookupname,descriptions,unicode,lookupdata) end changed[unicode]=lookupdata end, alternate=function(lookupdata,lookupname,description,unicode) local replacement=lookupdata[alternate] if replacement then changed[unicode]=replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"normal") end elseif defaultalt=="first" then replacement=lookupdata[1] changed[unicode]=replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end elseif defaultalt=="last" then replacement=lookupdata[#data] if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end else if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"unknown") end end end, ligature=function(lookupdata,lookupname,description,unicode) if trace_ligatures then report_ligature(feature,lookupname,descriptions,unicode,lookupdata) end ligatures[#ligatures+1]={ unicode,lookupdata } end, } for unicode,character in next,characters do local description=descriptions[unicode] local lookups=description.slookups if lookups then for l=1,#lookuplist do local lookupname=lookuplist[l] local lookupdata=lookups[lookupname] if lookupdata then local lookuptype=lookuptypes[lookupname] local action=actions[lookuptype] if action then action(lookupdata,lookupname,description,unicode) end end end end local lookups=description.mlookups if lookups then for l=1,#lookuplist do local lookupname=lookuplist[l] local lookuplist=lookups[lookupname] if lookuplist then local lookuptype=lookuptypes[lookupname] local action=actions[lookuptype] if action then for i=1,#lookuplist do action(lookuplist[i],lookupname,description,unicode) end end end end end end finalize_ligatures(tfmdata,ligatures) end local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist) local characters=tfmdata.characters local descriptions=tfmdata.descriptions local resources=tfmdata.resources local unicodes=resources.unicodes local sharedkerns={} local traceindeed=trace_baseinit and trace_kerns for unicode,character in next,characters do local description=descriptions[unicode] local rawkerns=description.kerns if rawkerns then local s=sharedkerns[rawkerns] if s==false then elseif s then character.kerns=s else local newkerns=character.kerns local done=false for l=1,#lookuplist do local lookup=lookuplist[l] local kerns=rawkerns[lookup] if kerns then for otherunicode,value in next,kerns do if value==0 then elseif not newkerns then newkerns={ [otherunicode]=value } done=true if traceindeed then report_kern(feature,lookup,descriptions,unicode,otherunicode,value) end elseif not newkerns[otherunicode] then newkerns[otherunicode]=value done=true if traceindeed then report_kern(feature,lookup,descriptions,unicode,otherunicode,value) end end end end end if done then sharedkerns[rawkerns]=newkerns character.kerns=newkerns else sharedkerns[rawkerns]=false end end end end end basemethods.independent={ preparesubstitutions=preparesubstitutions, preparepositionings=preparepositionings, } local function makefake(tfmdata,name,present) local resources=tfmdata.resources local private=resources.private local character={ intermediate=true,ligatures={} } resources.unicodes[name]=private tfmdata.characters[private]=character tfmdata.descriptions[private]={ name=name } resources.private=private+1 present[name]=private return character end local function make_1(present,tree,name) for k,v in next,tree do if k=="ligature" then present[name]=v else make_1(present,v,name.."_"..k) end end end local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done,lookupname) for k,v in next,tree do if k=="ligature" then local character=characters[preceding] if not character then if trace_baseinit then report_prepare("weird ligature in lookup %a, current %C, preceding %C",lookupname,v,preceding) end character=makefake(tfmdata,name,present) end local ligatures=character.ligatures if ligatures then ligatures[unicode]={ char=v } else character.ligatures={ [unicode]={ char=v } } end if done then local d=done[lookupname] if not d then done[lookupname]={ "dummy",v } else d[#d+1]=v end end else local code=present[name] or unicode local name=name.."_"..k make_2(present,tfmdata,characters,v,name,code,k,done,lookupname) end end end local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist) local characters=tfmdata.characters local descriptions=tfmdata.descriptions local resources=tfmdata.resources local changed=tfmdata.changed local lookuphash=resources.lookuphash local lookuptypes=resources.lookuptypes local ligatures={} local alternate=tonumber(value) local defaultalt=otf.defaultbasealternate local trace_singles=trace_baseinit and trace_singles local trace_alternatives=trace_baseinit and trace_alternatives local trace_ligatures=trace_baseinit and trace_ligatures for l=1,#lookuplist do local lookupname=lookuplist[l] local lookupdata=lookuphash[lookupname] local lookuptype=lookuptypes[lookupname] for unicode,data in next,lookupdata do if lookuptype=="substitution" then if trace_singles then report_substitution(feature,lookupname,descriptions,unicode,data) end changed[unicode]=data elseif lookuptype=="alternate" then local replacement=data[alternate] if replacement then changed[unicode]=replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"normal") end elseif defaultalt=="first" then replacement=data[1] changed[unicode]=replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end elseif defaultalt=="last" then replacement=data[#data] if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end else if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"unknown") end end elseif lookuptype=="ligature" then ligatures[#ligatures+1]={ unicode,data,lookupname } if trace_ligatures then report_ligature(feature,lookupname,descriptions,unicode,data) end end end end local nofligatures=#ligatures if nofligatures>0 then local characters=tfmdata.characters local present={} local done=trace_baseinit and trace_ligatures and {} for i=1,nofligatures do local ligature=ligatures[i] local unicode,tree=ligature[1],ligature[2] make_1(present,tree,"ctx_"..unicode) end for i=1,nofligatures do local ligature=ligatures[i] local unicode,tree,lookupname=ligature[1],ligature[2],ligature[3] make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,lookupname) end end end local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist) local characters=tfmdata.characters local descriptions=tfmdata.descriptions local resources=tfmdata.resources local lookuphash=resources.lookuphash local traceindeed=trace_baseinit and trace_kerns for l=1,#lookuplist do local lookupname=lookuplist[l] local lookupdata=lookuphash[lookupname] for unicode,data in next,lookupdata do local character=characters[unicode] local kerns=character.kerns if not kerns then kerns={} character.kerns=kerns end if traceindeed then for otherunicode,kern in next,data do if not kerns[otherunicode] and kern~=0 then kerns[otherunicode]=kern report_kern(feature,lookup,descriptions,unicode,otherunicode,kern) end end else for otherunicode,kern in next,data do if not kerns[otherunicode] and kern~=0 then kerns[otherunicode]=kern end end end end end end local function initializehashes(tfmdata) nodeinitializers.features(tfmdata) end basemethods.shared={ initializehashes=initializehashes, preparesubstitutions=preparesubstitutions, preparepositionings=preparepositionings, } basemethod="independent" local function featuresinitializer(tfmdata,value) if true then local t=trace_preparing and os.clock() local features=tfmdata.shared.features if features then applybasemethod("initializehashes",tfmdata) local collectlookups=otf.collectlookups local rawdata=tfmdata.shared.rawdata local properties=tfmdata.properties local script=properties.script local language=properties.language local basesubstitutions=rawdata.resources.features.gsub local basepositionings=rawdata.resources.features.gpos if basesubstitutions then for feature,data in next,basesubstitutions do local value=features[feature] if value then local validlookups,lookuplist=collectlookups(rawdata,feature,script,language) if validlookups then applybasemethod("preparesubstitutions",tfmdata,feature,value,validlookups,lookuplist) registerbasefeature(feature,value) end end end end if basepositionings then for feature,data in next,basepositionings do local value=features[feature] if value then local validlookups,lookuplist=collectlookups(rawdata,feature,script,language) if validlookups then applybasemethod("preparepositionings",tfmdata,feature,features[feature],validlookups,lookuplist) registerbasefeature(feature,value) end end end end registerbasehash(tfmdata) end if trace_preparing then report_prepare("preparation time is %0.3f seconds for %a",os.clock()-t,tfmdata.properties.fullname) end end end registerotffeature { name="features", description="features", default=true, initializers={ base=featuresinitializer, } } directives.register("fonts.otf.loader.basemethod",function(v) if basemethods[v] then basemethod=v end end) end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['node-inj']={ version=1.001, comment="companion to node-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local next=next local utfchar=utf.char local trace_injections=false trackers.register("nodes.injections",function(v) trace_injections=v end) local report_injections=logs.reporter("nodes","injections") local attributes,nodes,node=attributes,nodes,node fonts=fonts local fontdata=fonts.hashes.identifiers nodes.injections=nodes.injections or {} local injections=nodes.injections local nodecodes=nodes.nodecodes local glyph_code=nodecodes.glyph local kern_code=nodecodes.kern local nodepool=nodes.pool local newkern=nodepool.kern local traverse_id=node.traverse_id local insert_node_before=node.insert_before local insert_node_after=node.insert_after local a_kernpair=attributes.private('kernpair') local a_ligacomp=attributes.private('ligacomp') local a_markbase=attributes.private('markbase') local a_markmark=attributes.private('markmark') local a_markdone=attributes.private('markdone') local a_cursbase=attributes.private('cursbase') local a_curscurs=attributes.private('curscurs') local a_cursdone=attributes.private('cursdone') function injections.installnewkern(nk) newkern=nk or newkern end local cursives={} local marks={} local kerns={} function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext) local dx,dy=factor*(exit[1]-entry[1]),factor*(exit[2]-entry[2]) local ws,wn=tfmstart.width,tfmnext.width local bound=#cursives+1 start[a_cursbase]=bound nxt[a_curscurs]=bound cursives[bound]={ rlmode,dx,dy,ws,wn } return dx,dy,bound end function injections.setpair(current,factor,rlmode,r2lflag,spec,tfmchr) local x,y,w,h=factor*spec[1],factor*spec[2],factor*spec[3],factor*spec[4] if x~=0 or w~=0 or y~=0 or h~=0 then local bound=current[a_kernpair] if bound then local kb=kerns[bound] kb[2],kb[3],kb[4],kb[5]=(kb[2] or 0)+x,(kb[3] or 0)+y,(kb[4] or 0)+w,(kb[5] or 0)+h else bound=#kerns+1 current[a_kernpair]=bound kerns[bound]={ rlmode,x,y,w,h,r2lflag,tfmchr.width } end return x,y,w,h,bound end return x,y,w,h end function injections.setkern(current,factor,rlmode,x,tfmchr) local dx=factor*x if dx~=0 then local bound=#kerns+1 current[a_kernpair]=bound kerns[bound]={ rlmode,dx } return dx,bound else return 0,0 end end function injections.setmark(start,base,factor,rlmode,ba,ma,index) local dx,dy=factor*(ba[1]-ma[1]),factor*(ba[2]-ma[2]) local bound=base[a_markbase] local index=1 if bound then local mb=marks[bound] if mb then index=#mb+1 mb[index]={ dx,dy,rlmode } start[a_markmark]=bound start[a_markdone]=index return dx,dy,bound else report_injections("possible problem, %U is base mark without data (id %a)",base.char,bound) end end index=index or 1 bound=#marks+1 base[a_markbase]=bound start[a_markmark]=bound start[a_markdone]=index marks[bound]={ [index]={ dx,dy,rlmode } } return dx,dy,bound end local function dir(n) return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset" end local function trace(head) report_injections("begin run") for n in traverse_id(glyph_code,head) do if n.subtype<256 then local kp=n[a_kernpair] local mb=n[a_markbase] local mm=n[a_markmark] local md=n[a_markdone] local cb=n[a_cursbase] local cc=n[a_curscurs] local char=n.char report_injections("font %s, char %U, glyph %c",n.font,char,char) if kp then local k=kerns[kp] if k[3] then report_injections(" pairkern: dir %a, x %p, y %p, w %p, h %p",dir(k[1]),k[2],k[3],k[4],k[5]) else report_injections(" kern: dir %a, dx %p",dir(k[1]),k[2]) end end if mb then report_injections(" markbase: bound %a",mb) end if mm then local m=marks[mm] if mb then local m=m[mb] if m then report_injections(" markmark: bound %a, index %a, dx %p, dy %p",mm,md,m[1],m[2]) else report_injections(" markmark: bound %a, missing index",mm) end else m=m[1] report_injections(" markmark: bound %a, dx %p, dy %p",mm,m and m[1],m and m[2]) end end if cb then report_injections(" cursbase: bound %a",cb) end if cc then local c=cursives[cc] report_injections(" curscurs: bound %a, dir %a, dx %p, dy %p",cc,dir(c[1]),c[2],c[3]) end end end report_injections("end run") end local function show_result(head) local current=head local skipping=false while current do local id=current.id if id==glyph_code then report_injections("char: %C, width %p, xoffset %p, yoffset %p",current.char,current.width,current.xoffset,current.yoffset) skipping=false elseif id==kern_code then report_injections("kern: %p",current.kern) skipping=false elseif not skipping then report_injections() skipping=true end current=current.next end end function injections.handler(head,where,keep) local has_marks,has_cursives,has_kerns=next(marks),next(cursives),next(kerns) if has_marks or has_cursives then if trace_injections then trace(head) end local done,ky,rl,valid,cx,wx,mk,nofvalid=false,{},{},{},{},{},{},0 if has_kerns then local nf,tm=nil,nil for n in traverse_id(glyph_code,head) do if n.subtype<256 then nofvalid=nofvalid+1 valid[nofvalid]=n if n.font~=nf then nf=n.font tm=fontdata[nf].resources.marks end if tm then mk[n]=tm[n.char] end local k=n[a_kernpair] if k then local kk=kerns[k] if kk then local x,y,w,h=kk[2] or 0,kk[3] or 0,kk[4] or 0,kk[5] or 0 local dy=y-h if dy~=0 then ky[n]=dy end if w~=0 or x~=0 then wx[n]=kk end rl[n]=kk[1] end end end end else local nf,tm=nil,nil for n in traverse_id(glyph_code,head) do if n.subtype<256 then nofvalid=nofvalid+1 valid[nofvalid]=n if n.font~=nf then nf=n.font tm=fontdata[nf].resources.marks end if tm then mk[n]=tm[n.char] end end end end if nofvalid>0 then local cx={} if has_kerns and next(ky) then for n,k in next,ky do n.yoffset=k end end if has_cursives then local p_cursbase,p=nil,nil local t,d,maxt={},{},0 for i=1,nofvalid do local n=valid[i] if not mk[n] then local n_cursbase=n[a_cursbase] if p_cursbase then local n_curscurs=n[a_curscurs] if p_cursbase==n_curscurs then local c=cursives[n_curscurs] if c then local rlmode,dx,dy,ws,wn=c[1],c[2],c[3],c[4],c[5] if rlmode>=0 then dx=dx-ws else dx=dx+wn end if dx~=0 then cx[n]=dx rl[n]=rlmode end dy=-dy maxt=maxt+1 t[maxt]=p d[maxt]=dy else maxt=0 end end elseif maxt>0 then local ny=n.yoffset for i=maxt,1,-1 do ny=ny+d[i] local ti=t[i] ti.yoffset=ti.yoffset+ny end maxt=0 end if not n_cursbase and maxt>0 then local ny=n.yoffset for i=maxt,1,-1 do ny=ny+d[i] local ti=t[i] ti.yoffset=ny end maxt=0 end p_cursbase,p=n_cursbase,n end end if maxt>0 then local ny=n.yoffset for i=maxt,1,-1 do ny=ny+d[i] local ti=t[i] ti.yoffset=ny end maxt=0 end if not keep then cursives={} end end if has_marks then for i=1,nofvalid do local p=valid[i] local p_markbase=p[a_markbase] if p_markbase then local mrks=marks[p_markbase] local nofmarks=#mrks for n in traverse_id(glyph_code,p.next) do local n_markmark=n[a_markmark] if p_markbase==n_markmark then local index=n[a_markdone] or 1 local d=mrks[index] if d then local rlmode=d[3] local k=wx[p] if k then local x=k[2] local w=k[4] if w then if rlmode and rlmode>=0 then n.xoffset=p.xoffset-p.width+d[1]-(w-x) else n.xoffset=p.xoffset-d[1]-x end else if rlmode and rlmode>=0 then n.xoffset=p.xoffset-p.width+d[1] else n.xoffset=p.xoffset-d[1]-x end end else if rlmode and rlmode>=0 then n.xoffset=p.xoffset-p.width+d[1] else n.xoffset=p.xoffset-d[1] end end if mk[p] then n.yoffset=p.yoffset+d[2] else n.yoffset=n.yoffset+p.yoffset+d[2] end if nofmarks==1 then break else nofmarks=nofmarks-1 end end else end end end end if not keep then marks={} end end if next(wx) then for n,k in next,wx do local x=k[2] local w=k[4] if w then local rl=k[1] local wx=w-x if rl<0 then if wx~=0 then insert_node_before(head,n,newkern(wx)) end if x~=0 then insert_node_after (head,n,newkern(x)) end else if x~=0 then insert_node_before(head,n,newkern(x)) end if wx~=0 then insert_node_after (head,n,newkern(wx)) end end elseif x~=0 then insert_node_before(head,n,newkern(x)) end end end if next(cx) then for n,k in next,cx do if k~=0 then local rln=rl[n] if rln and rln<0 then insert_node_before(head,n,newkern(-k)) else insert_node_before(head,n,newkern(k)) end end end end if not keep then kerns={} end return head,true elseif not keep then kerns,cursives,marks={},{},{} end elseif has_kerns then if trace_injections then trace(head) end for n in traverse_id(glyph_code,head) do if n.subtype<256 then local k=n[a_kernpair] if k then local kk=kerns[k] if kk then local rl,x,y,w=kk[1],kk[2] or 0,kk[3],kk[4] if y and y~=0 then n.yoffset=y end if w then local wx=w-x if rl<0 then if wx~=0 then insert_node_before(head,n,newkern(wx)) end if x~=0 then insert_node_after (head,n,newkern(x)) end else if x~=0 then insert_node_before(head,n,newkern(x)) end if wx~=0 then insert_node_after(head,n,newkern(wx)) end end else if x~=0 then insert_node_before(head,n,newkern(x)) end end end end end end if not keep then kerns={} end return head,true else end return head,false end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-ota']={ version=1.001, comment="companion to font-otf.lua (analysing)", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local type=type if not trackers then trackers={ register=function() end } end local fonts,nodes,node=fonts,nodes,node local allocate=utilities.storage.allocate local otf=fonts.handlers.otf local analyzers=fonts.analyzers local initializers=allocate() local methods=allocate() analyzers.initializers=initializers analyzers.methods=methods analyzers.useunicodemarks=false local a_state=attributes.private('state') local nodecodes=nodes.nodecodes local glyph_code=nodecodes.glyph local math_code=nodecodes.math local traverse_id=node.traverse_id local traverse_node_list=node.traverse local end_of_math=node.end_of_math local fontdata=fonts.hashes.identifiers local categories=characters and characters.categories or {} local otffeatures=fonts.constructors.newfeatures("otf") local registerotffeature=otffeatures.register local s_init=1 local s_rphf=7 local s_medi=2 local s_half=8 local s_fina=3 local s_pref=9 local s_isol=4 local s_blwf=10 local s_mark=5 local s_pstf=11 local s_rest=6 local states={ init=s_init, medi=s_medi, fina=s_fina, isol=s_isol, mark=s_mark, rest=s_rest, rphf=s_rphf, half=s_half, pref=s_pref, blwf=s_blwf, pstf=s_pstf, } local features={ init=s_init, medi=s_medi, fina=s_fina, isol=s_isol, } analyzers.states=states analyzers.features=features function analyzers.setstate(head,font) local useunicodemarks=analyzers.useunicodemarks local tfmdata=fontdata[font] local descriptions=tfmdata.descriptions local first,last,current,n,done=nil,nil,head,0,false while current do local id=current.id if id==glyph_code and current.font==font then done=true local char=current.char local d=descriptions[char] if d then if d.class=="mark" or (useunicodemarks and categories[char]=="mn") then done=true current[a_state]=s_mark elseif n==0 then first,last,n=current,current,1 current[a_state]=s_init else last,n=current,n+1 current[a_state]=s_medi end else if first and first==last then last[a_state]=s_isol elseif last then last[a_state]=s_fina end first,last,n=nil,nil,0 end elseif id==disc_code then current[a_state]=s_midi last=current else if first and first==last then last[a_state]=s_isol elseif last then last[a_state]=s_fina end first,last,n=nil,nil,0 if id==math_code then current=end_of_math(current) end end current=current.next end if first and first==last then last[a_state]=s_isol elseif last then last[a_state]=s_fina end return head,done end local function analyzeinitializer(tfmdata,value) local script,language=otf.scriptandlanguage(tfmdata) local action=initializers[script] if not action then elseif type(action)=="function" then return action(tfmdata,value) else local action=action[language] if action then return action(tfmdata,value) end end end local function analyzeprocessor(head,font,attr) local tfmdata=fontdata[font] local script,language=otf.scriptandlanguage(tfmdata,attr) local action=methods[script] if not action then elseif type(action)=="function" then return action(head,font,attr) else action=action[language] if action then return action(head,font,attr) end end return head,false end registerotffeature { name="analyze", description="analysis of (for instance) character classes", default=true, initializers={ node=analyzeinitializer, }, processors={ position=1, node=analyzeprocessor, } } methods.latn=analyzers.setstate local tatweel=0x0640 local zwnj=0x200C local zwj=0x200D local isolated={ [0x0600]=true,[0x0601]=true,[0x0602]=true,[0x0603]=true, [0x0604]=true, [0x0608]=true,[0x060B]=true,[0x0621]=true,[0x0674]=true, [0x06DD]=true, [0x0856]=true,[0x0858]=true,[0x0857]=true, [0x07FA]=true, [zwnj]=true, } local final={ [0x0622]=true,[0x0623]=true,[0x0624]=true,[0x0625]=true, [0x0627]=true,[0x0629]=true,[0x062F]=true,[0x0630]=true, [0x0631]=true,[0x0632]=true,[0x0648]=true,[0x0671]=true, [0x0672]=true,[0x0673]=true,[0x0675]=true,[0x0676]=true, [0x0677]=true,[0x0688]=true,[0x0689]=true,[0x068A]=true, [0x068B]=true,[0x068C]=true,[0x068D]=true,[0x068E]=true, [0x068F]=true,[0x0690]=true,[0x0691]=true,[0x0692]=true, [0x0693]=true,[0x0694]=true,[0x0695]=true,[0x0696]=true, [0x0697]=true,[0x0698]=true,[0x0699]=true,[0x06C0]=true, [0x06C3]=true,[0x06C4]=true,[0x06C5]=true,[0x06C6]=true, [0x06C7]=true,[0x06C8]=true,[0x06C9]=true,[0x06CA]=true, [0x06CB]=true,[0x06CD]=true,[0x06CF]=true,[0x06D2]=true, [0x06D3]=true,[0x06D5]=true,[0x06EE]=true,[0x06EF]=true, [0x0759]=true,[0x075A]=true,[0x075B]=true,[0x076B]=true, [0x076C]=true,[0x0771]=true,[0x0773]=true,[0x0774]=true, [0x0778]=true,[0x0779]=true, [0x08AA]=true,[0x08AB]=true,[0x08AC]=true, [0xFEF5]=true,[0xFEF7]=true,[0xFEF9]=true,[0xFEFB]=true, [0x0710]=true,[0x0715]=true,[0x0716]=true,[0x0717]=true, [0x0718]=true,[0x0719]=true,[0x0728]=true,[0x072A]=true, [0x072C]=true,[0x071E]=true, [0x072F]=true,[0x074D]=true, [0x0840]=true,[0x0849]=true,[0x0854]=true,[0x0846]=true, [0x084F]=true } local medial={ [0x0626]=true,[0x0628]=true,[0x062A]=true,[0x062B]=true, [0x062C]=true,[0x062D]=true,[0x062E]=true,[0x0633]=true, [0x0634]=true,[0x0635]=true,[0x0636]=true,[0x0637]=true, [0x0638]=true,[0x0639]=true,[0x063A]=true,[0x063B]=true, [0x063C]=true,[0x063D]=true,[0x063E]=true,[0x063F]=true, [0x0641]=true,[0x0642]=true,[0x0643]=true, [0x0644]=true,[0x0645]=true,[0x0646]=true,[0x0647]=true, [0x0649]=true,[0x064A]=true,[0x066E]=true,[0x066F]=true, [0x0678]=true,[0x0679]=true,[0x067A]=true,[0x067B]=true, [0x067C]=true,[0x067D]=true,[0x067E]=true,[0x067F]=true, [0x0680]=true,[0x0681]=true,[0x0682]=true,[0x0683]=true, [0x0684]=true,[0x0685]=true,[0x0686]=true,[0x0687]=true, [0x069A]=true,[0x069B]=true,[0x069C]=true,[0x069D]=true, [0x069E]=true,[0x069F]=true,[0x06A0]=true,[0x06A1]=true, [0x06A2]=true,[0x06A3]=true,[0x06A4]=true,[0x06A5]=true, [0x06A6]=true,[0x06A7]=true,[0x06A8]=true,[0x06A9]=true, [0x06AA]=true,[0x06AB]=true,[0x06AC]=true,[0x06AD]=true, [0x06AE]=true,[0x06AF]=true,[0x06B0]=true,[0x06B1]=true, [0x06B2]=true,[0x06B3]=true,[0x06B4]=true,[0x06B5]=true, [0x06B6]=true,[0x06B7]=true,[0x06B8]=true,[0x06B9]=true, [0x06BA]=true,[0x06BB]=true,[0x06BC]=true,[0x06BD]=true, [0x06BE]=true,[0x06BF]=true,[0x06C1]=true,[0x06C2]=true, [0x06CC]=true,[0x06CE]=true,[0x06D0]=true,[0x06D1]=true, [0x06FA]=true,[0x06FB]=true,[0x06FC]=true,[0x06FF]=true, [0x0750]=true,[0x0751]=true,[0x0752]=true,[0x0753]=true, [0x0754]=true,[0x0755]=true,[0x0756]=true,[0x0757]=true, [0x0758]=true,[0x075C]=true,[0x075D]=true,[0x075E]=true, [0x075F]=true,[0x0760]=true,[0x0761]=true,[0x0762]=true, [0x0763]=true,[0x0764]=true,[0x0765]=true,[0x0766]=true, [0x0767]=true,[0x0768]=true,[0x0769]=true,[0x076A]=true, [0x076D]=true,[0x076E]=true,[0x076F]=true,[0x0770]=true, [0x0772]=true,[0x0775]=true,[0x0776]=true,[0x0777]=true, [0x077A]=true,[0x077B]=true,[0x077C]=true,[0x077D]=true, [0x077E]=true,[0x077F]=true, [0x08A0]=true,[0x08A2]=true,[0x08A4]=true,[0x08A5]=true, [0x08A6]=true,[0x0620]=true,[0x08A8]=true,[0x08A9]=true, [0x08A7]=true,[0x08A3]=true, [0x0712]=true,[0x0713]=true,[0x0714]=true,[0x071A]=true, [0x071B]=true,[0x071C]=true,[0x071D]=true,[0x071F]=true, [0x0720]=true,[0x0721]=true,[0x0722]=true,[0x0723]=true, [0x0724]=true,[0x0725]=true,[0x0726]=true,[0x0727]=true, [0x0729]=true,[0x072B]=true,[0x072D]=true,[0x072E]=true, [0x074E]=true,[0x074F]=true, [0x0841]=true,[0x0842]=true,[0x0843]=true,[0x0844]=true, [0x0845]=true,[0x0847]=true,[0x0848]=true,[0x0855]=true, [0x0851]=true,[0x084E]=true,[0x084D]=true,[0x084A]=true, [0x084B]=true,[0x084C]=true,[0x0850]=true,[0x0852]=true, [0x0853]=true, [0x07D7]=true,[0x07E8]=true,[0x07D9]=true,[0x07EA]=true, [0x07CA]=true,[0x07DB]=true,[0x07CC]=true,[0x07DD]=true, [0x07CE]=true,[0x07DF]=true,[0x07D4]=true,[0x07E5]=true, [0x07E9]=true,[0x07E7]=true,[0x07E3]=true,[0x07E2]=true, [0x07E0]=true,[0x07E1]=true,[0x07DE]=true,[0x07DC]=true, [0x07D1]=true,[0x07DA]=true,[0x07D8]=true,[0x07D6]=true, [0x07D2]=true,[0x07D0]=true,[0x07CF]=true,[0x07CD]=true, [0x07CB]=true,[0x07D3]=true,[0x07E4]=true,[0x07D5]=true, [0x07E6]=true, [tatweel]=true, [zwj]=true, } local arab_warned={} local function warning(current,what) local char=current.char if not arab_warned[char] then log.report("analyze","arab: character %C has no %a class",char,what) arab_warned[char]=true end end local function finish(first,last) if last then if first==last then local fc=first.char if medial[fc] or final[fc] then first[a_state]=s_isol else warning(first,"isol") first[a_state]=s_error end else local lc=last.char if medial[lc] or final[lc] then last[a_state]=s_fina else warning(last,"fina") last[a_state]=s_error end end first,last=nil,nil elseif first then local fc=first.char if medial[fc] or final[fc] then first[a_state]=s_isol else warning(first,"isol") first[a_state]=s_error end first=nil end return first,last end function methods.arab(head,font,attr) local useunicodemarks=analyzers.useunicodemarks local tfmdata=fontdata[font] local marks=tfmdata.resources.marks local first,last,current,done=nil,nil,head,false while current do local id=current.id if id==glyph_code and current.font==font and current.subtype<256 and not current[a_state] then done=true local char=current.char if marks[char] or (useunicodemarks and categories[char]=="mn") then current[a_state]=s_mark elseif isolated[char] then first,last=finish(first,last) current[a_state]=s_isol first,last=nil,nil elseif not first then if medial[char] then current[a_state]=s_init first,last=first or current,current elseif final[char] then current[a_state]=s_isol first,last=nil,nil else first,last=finish(first,last) end elseif medial[char] then first,last=first or current,current current[a_state]=s_medi elseif final[char] then if not last[a_state]==s_init then last[a_state]=s_medi end current[a_state]=s_fina first,last=nil,nil elseif char>=0x0600 and char<=0x06FF then current[a_state]=s_rest first,last=finish(first,last) else first,last=finish(first,last) end else if first or last then first,last=finish(first,last) end if id==math_code then current=end_of_math(current) end end current=current.next end if first or last then finish(first,last) end return head,done end methods.syrc=methods.arab methods.mand=methods.arab methods.nko=methods.arab directives.register("otf.analyze.useunicodemarks",function(v) analyzers.useunicodemarks=v end) end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-otn']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files", } local concat,insert,remove=table.concat,table.insert,table.remove local gmatch,gsub,find,match,lower,strip=string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip local type,next,tonumber,tostring=type,next,tonumber,tostring local lpegmatch=lpeg.match local random=math.random local formatters=string.formatters local logs,trackers,nodes,attributes=logs,trackers,nodes,attributes local registertracker=trackers.register local fonts=fonts local otf=fonts.handlers.otf local trace_lookups=false registertracker("otf.lookups",function(v) trace_lookups=v end) local trace_singles=false registertracker("otf.singles",function(v) trace_singles=v end) local trace_multiples=false registertracker("otf.multiples",function(v) trace_multiples=v end) local trace_alternatives=false registertracker("otf.alternatives",function(v) trace_alternatives=v end) local trace_ligatures=false registertracker("otf.ligatures",function(v) trace_ligatures=v end) local trace_contexts=false registertracker("otf.contexts",function(v) trace_contexts=v end) local trace_marks=false registertracker("otf.marks",function(v) trace_marks=v end) local trace_kerns=false registertracker("otf.kerns",function(v) trace_kerns=v end) local trace_cursive=false registertracker("otf.cursive",function(v) trace_cursive=v end) local trace_preparing=false registertracker("otf.preparing",function(v) trace_preparing=v end) local trace_bugs=false registertracker("otf.bugs",function(v) trace_bugs=v end) local trace_details=false registertracker("otf.details",function(v) trace_details=v end) local trace_applied=false registertracker("otf.applied",function(v) trace_applied=v end) local trace_steps=false registertracker("otf.steps",function(v) trace_steps=v end) local trace_skips=false registertracker("otf.skips",function(v) trace_skips=v end) local trace_directions=false registertracker("otf.directions",function(v) trace_directions=v end) local report_direct=logs.reporter("fonts","otf direct") local report_subchain=logs.reporter("fonts","otf subchain") local report_chain=logs.reporter("fonts","otf chain") local report_process=logs.reporter("fonts","otf process") local report_prepare=logs.reporter("fonts","otf prepare") local report_warning=logs.reporter("fonts","otf warning") registertracker("otf.verbose_chain",function(v) otf.setcontextchain(v and "verbose") end) registertracker("otf.normal_chain",function(v) otf.setcontextchain(v and "normal") end) registertracker("otf.replacements","otf.singles,otf.multiples,otf.alternatives,otf.ligatures") registertracker("otf.positions","otf.marks,otf.kerns,otf.cursive") registertracker("otf.actions","otf.replacements,otf.positions") registertracker("otf.injections","nodes.injections") registertracker("*otf.sample","otf.steps,otf.actions,otf.analyzing") local insert_node_after=node.insert_after local delete_node=nodes.delete local copy_node=node.copy local find_node_tail=node.tail or node.slide local flush_node_list=node.flush_list local end_of_math=node.end_of_math local setmetatableindex=table.setmetatableindex local zwnj=0x200C local zwj=0x200D local wildcard="*" local default="dflt" local nodecodes=nodes.nodecodes local whatcodes=nodes.whatcodes local glyphcodes=nodes.glyphcodes local glyph_code=nodecodes.glyph local glue_code=nodecodes.glue local disc_code=nodecodes.disc local whatsit_code=nodecodes.whatsit local math_code=nodecodes.math local dir_code=whatcodes.dir local localpar_code=whatcodes.localpar local ligature_code=glyphcodes.ligature local privateattribute=attributes.private local a_state=privateattribute('state') local a_markbase=privateattribute('markbase') local a_markmark=privateattribute('markmark') local a_markdone=privateattribute('markdone') local a_cursbase=privateattribute('cursbase') local a_curscurs=privateattribute('curscurs') local a_cursdone=privateattribute('cursdone') local a_kernpair=privateattribute('kernpair') local a_ligacomp=privateattribute('ligacomp') local injections=nodes.injections local setmark=injections.setmark local setcursive=injections.setcursive local setkern=injections.setkern local setpair=injections.setpair local markonce=true local cursonce=true local kernonce=true local fonthashes=fonts.hashes local fontdata=fonthashes.identifiers local otffeatures=fonts.constructors.newfeatures("otf") local registerotffeature=otffeatures.register local onetimemessage=fonts.loggers.onetimemessage or function() end otf.defaultnodealternate="none" local tfmdata=false local characters=false local descriptions=false local resources=false local marks=false local currentfont=false local lookuptable=false local anchorlookups=false local lookuptypes=false local handlers={} local rlmode=0 local featurevalue=false local checkstep=(nodes and nodes.tracers and nodes.tracers.steppers.check) or function() end local registerstep=(nodes and nodes.tracers and nodes.tracers.steppers.register) or function() end local registermessage=(nodes and nodes.tracers and nodes.tracers.steppers.message) or function() end local function logprocess(...) if trace_steps then registermessage(...) end report_direct(...) end local function logwarning(...) report_direct(...) end local f_unicode=formatters["%U"] local f_uniname=formatters["%U (%s)"] local f_unilist=formatters["% t (% t)"] local function gref(n) if type(n)=="number" then local description=descriptions[n] local name=description and description.name if name then return f_uniname(n,name) else return f_unicode(n) end elseif n then local num,nam={},{} for i=1,#n do local ni=n[i] if tonumber(ni) then local di=descriptions[ni] num[i]=f_unicode(ni) nam[i]=di and di.name or "-" end end return f_unilist(num,nam) else return "" end end local function cref(kind,chainname,chainlookupname,lookupname,index) if index then return formatters["feature %a, chain %a, sub %a, lookup %a, index %a"](kind,chainname,chainlookupname,lookupname,index) elseif lookupname then return formatters["feature %a, chain %a, sub %a, lookup %a"](kind,chainname,chainlookupname,lookupname) elseif chainlookupname then return formatters["feature %a, chain %a, sub %a"](kind,chainname,chainlookupname) elseif chainname then return formatters["feature %a, chain %a"](kind,chainname) else return formatters["feature %a"](kind) end end local function pref(kind,lookupname) return formatters["feature %a, lookup %a"](kind,lookupname) end local function copy_glyph(g) local components=g.components if components then g.components=nil local n=copy_node(g) g.components=components return n else return copy_node(g) end end local function markstoligature(kind,lookupname,head,start,stop,char) if start==stop and start.char==char then return head,start else local prev=start.prev local next=stop.next start.prev=nil stop.next=nil local base=copy_glyph(start) if head==start then head=base end base.char=char base.subtype=ligature_code base.components=start if prev then prev.next=base end if next then next.prev=base end base.next=next base.prev=prev return head,base end end local function getcomponentindex(start) if start.id~=glyph_code then return 0 elseif start.subtype==ligature_code then local i=0 local components=start.components while components do i=i+getcomponentindex(components) components=components.next end return i elseif not marks[start.char] then return 1 else return 0 end end local function toligature(kind,lookupname,head,start,stop,char,markflag,discfound) if start==stop and start.char==char then start.char=char return head,start end local prev=start.prev local next=stop.next start.prev=nil stop.next=nil local base=copy_glyph(start) if start==head then head=base end base.char=char base.subtype=ligature_code base.components=start if prev then prev.next=base end if next then next.prev=base end base.next=next base.prev=prev if not discfound then local deletemarks=markflag~="mark" local components=start local baseindex=0 local componentindex=0 local head=base local current=base while start do local char=start.char if not marks[char] then baseindex=baseindex+componentindex componentindex=getcomponentindex(start) elseif not deletemarks then start[a_ligacomp]=baseindex+(start[a_ligacomp] or componentindex) if trace_marks then logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp]) end head,current=insert_node_after(head,current,copy_node(start)) elseif trace_marks then logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char)) end start=start.next end local start=current.next while start and start.id==glyph_code do local char=start.char if marks[char] then start[a_ligacomp]=baseindex+(start[a_ligacomp] or componentindex) if trace_marks then logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp]) end else break end start=start.next end end return head,base end function handlers.gsub_single(head,start,kind,lookupname,replacement) if trace_singles then logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(start.char),gref(replacement)) end start.char=replacement return head,start,true end local function get_alternative_glyph(start,alternatives,value,trace_alternatives) local n=#alternatives if value=="random" then local r=random(1,n) return alternatives[r],trace_alternatives and formatters["value %a, taking %a"](value,r) elseif value=="first" then return alternatives[1],trace_alternatives and formatters["value %a, taking %a"](value,1) elseif value=="last" then return alternatives[n],trace_alternatives and formatters["value %a, taking %a"](value,n) else value=tonumber(value) if type(value)~="number" then return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,1) elseif value>n then local defaultalt=otf.defaultnodealternate if defaultalt=="first" then return alternatives[n],trace_alternatives and formatters["invalid value %s, taking %a"](value,1) elseif defaultalt=="last" then return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,n) else return false,trace_alternatives and formatters["invalid value %a, %s"](value,"out of range") end elseif value==0 then return start.char,trace_alternatives and formatters["invalid value %a, %s"](value,"no change") elseif value<1 then return alternatives[1],trace_alternatives and formatters["invalid value %a, taking %a"](value,1) else return alternatives[value],trace_alternatives and formatters["value %a, taking %a"](value,value) end end end local function multiple_glyphs(head,start,multiple) local nofmultiples=#multiple if nofmultiples>0 then start.char=multiple[1] if nofmultiples>1 then local sn=start.next for k=2,nofmultiples do local n=copy_node(start) n.char=multiple[k] n.next=sn n.prev=start if sn then sn.prev=n end start.next=n start=n end end return head,start,true else if trace_multiples then logprocess("no multiple for %s",gref(start.char)) end return head,start,false end end function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence) local value=featurevalue==true and tfmdata.shared.features[kind] or featurevalue local choice,comment=get_alternative_glyph(start,alternative,value,trace_alternatives) if choice then if trace_alternatives then logprocess("%s: replacing %s by alternative %a to %s, %s",pref(kind,lookupname),gref(start.char),choice,gref(choice),comment) end start.char=choice else if trace_alternatives then logwarning("%s: no variant %a for %s, %s",pref(kind,lookupname),value,gref(start.char),comment) end end return head,start,true end function handlers.gsub_multiple(head,start,kind,lookupname,multiple) if trace_multiples then logprocess("%s: replacing %s by multiple %s",pref(kind,lookupname),gref(start.char),gref(multiple)) end return multiple_glyphs(head,start,multiple) end function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence) local s,stop,discfound=start.next,nil,false local startchar=start.char if marks[startchar] then while s do local id=s.id if id==glyph_code and s.font==currentfont and s.subtype<256 then local lg=ligature[s.char] if lg then stop=s ligature=lg s=s.next else break end else break end end if stop then local lig=ligature.ligature if lig then if trace_ligatures then local stopchar=stop.char head,start=markstoligature(kind,lookupname,head,start,stop,lig) logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char)) else head,start=markstoligature(kind,lookupname,head,start,stop,lig) end return head,start,true else end end else local skipmark=sequence.flags[1] while s do local id=s.id if id==glyph_code and s.subtype<256 then if s.font==currentfont then local char=s.char if skipmark and marks[char] then s=s.next else local lg=ligature[char] if lg then stop=s ligature=lg s=s.next else break end end else break end elseif id==disc_code then discfound=true s=s.next else break end end if stop then local lig=ligature.ligature if lig then if trace_ligatures then local stopchar=stop.char head,start=toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound) logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char)) else head,start=toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound) end return head,start,true else end end end return head,start,false end function handlers.gpos_mark2base(head,start,kind,lookupname,markanchors,sequence) local markchar=start.char if marks[markchar] then local base=start.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then local basechar=base.char if marks[basechar] then while true do base=base.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then basechar=base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar)) end return head,start,false end end end local baseanchors=descriptions[basechar] if baseanchors then baseanchors=baseanchors.anchors end if baseanchors then local baseanchors=baseanchors['basechar'] if baseanchors then local al=anchorlookups[lookupname] for anchor,ba in next,baseanchors do if al[anchor] then local ma=markanchors[anchor] if ma then local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)", pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head,start,true end end end if trace_bugs then logwarning("%s, no matching anchors for mark %s and base %s",pref(kind,lookupname),gref(markchar),gref(basechar)) end end elseif trace_bugs then onetimemessage(currentfont,basechar,"no base anchors",report_fonts) end elseif trace_bugs then logwarning("%s: prev node is no char",pref(kind,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar)) end return head,start,false end function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequence) local markchar=start.char if marks[markchar] then local base=start.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then local basechar=base.char if marks[basechar] then while true do base=base.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then basechar=base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar)) end return head,start,false end end end local index=start[a_ligacomp] local baseanchors=descriptions[basechar] if baseanchors then baseanchors=baseanchors.anchors if baseanchors then local baseanchors=baseanchors['baselig'] if baseanchors then local al=anchorlookups[lookupname] for anchor,ba in next,baseanchors do if al[anchor] then local ma=markanchors[anchor] if ma then ba=ba[index] if ba then local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)", pref(kind,lookupname),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy) end return head,start,true else if trace_bugs then logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(kind,lookupname),gref(markchar),gref(basechar),index) end end end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and baselig %s",pref(kind,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then onetimemessage(currentfont,basechar,"no base anchors",report_fonts) end elseif trace_bugs then logwarning("%s: prev node is no char",pref(kind,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar)) end return head,start,false end function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence) local markchar=start.char if marks[markchar] then local base=start.prev local slc=start[a_ligacomp] if slc then while base do local blc=base[a_ligacomp] if blc and blc~=slc then base=base.prev else break end end end if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then local basechar=base.char local baseanchors=descriptions[basechar] if baseanchors then baseanchors=baseanchors.anchors if baseanchors then baseanchors=baseanchors['basemark'] if baseanchors then local al=anchorlookups[lookupname] for anchor,ba in next,baseanchors do if al[anchor] then local ma=markanchors[anchor] if ma then local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)", pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head,start,true end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and basemark %s",pref(kind,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then onetimemessage(currentfont,basechar,"no base anchors",report_fonts) end elseif trace_bugs then logwarning("%s: prev node is no mark",pref(kind,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar)) end return head,start,false end function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence) local alreadydone=cursonce and start[a_cursbase] if not alreadydone then local done=false local startchar=start.char if marks[startchar] then if trace_cursive then logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar)) end else local nxt=start.next while not done and nxt and nxt.id==glyph_code and nxt.font==currentfont and nxt.subtype<256 do local nextchar=nxt.char if marks[nextchar] then nxt=nxt.next else local entryanchors=descriptions[nextchar] if entryanchors then entryanchors=entryanchors.anchors if entryanchors then entryanchors=entryanchors['centry'] if entryanchors then local al=anchorlookups[lookupname] for anchor,entry in next,entryanchors do if al[anchor] then local exit=exitanchors[anchor] if exit then local dx,dy,bound=setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar]) if trace_cursive then logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode) end done=true break end end end end end elseif trace_bugs then onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) end break end end end return head,start,done else if trace_cursive and trace_details then logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(start.char),alreadydone) end return head,start,false end end function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence) local startchar=start.char local dx,dy,w,h=setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar]) if trace_kerns then logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),dx,dy,w,h) end return head,start,false end function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence) local snext=start.next if not snext then return head,start,false else local prev,done=start,false local factor=tfmdata.parameters.factor local lookuptype=lookuptypes[lookupname] while snext and snext.id==glyph_code and snext.font==currentfont and snext.subtype<256 do local nextchar=snext.char local krn=kerns[nextchar] if not krn and marks[nextchar] then prev=snext snext=snext.next else local krn=kerns[nextchar] if not krn then elseif type(krn)=="table" then if lookuptype=="pair" then local a,b=krn[2],krn[3] if a and #a>0 then local startchar=start.char local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar]) if trace_kerns then logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h) end end if b and #b>0 then local startchar=start.char local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar]) if trace_kerns then logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h) end end else report_process("%s: check this out (old kern stuff)",pref(kind,lookupname)) end done=true elseif krn~=0 then local k=setkern(snext,factor,rlmode,krn) if trace_kerns then logprocess("%s: inserting kern %s between %s and %s",pref(kind,lookupname),k,gref(prev.char),gref(nextchar)) end done=true end break end end return head,start,done end end local chainmores={} local chainprocs={} local function logprocess(...) if trace_steps then registermessage(...) end report_subchain(...) end local logwarning=report_subchain local function logprocess(...) if trace_steps then registermessage(...) end report_chain(...) end local logwarning=report_chain function chainprocs.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname) logwarning("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname)) return head,start,false end function chainmores.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n) logprocess("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname)) return head,start,false end function chainprocs.reversesub(head,start,stop,kind,chainname,currentcontext,lookuphash,replacements) local char=start.char local replacement=replacements[char] if replacement then if trace_singles then logprocess("%s: single reverse replacement of %s by %s",cref(kind,chainname),gref(char),gref(replacement)) end start.char=replacement return head,start,true else return head,start,false end end local function delete_till_stop(start,stop,ignoremarks) local n=1 if start==stop then elseif ignoremarks then repeat local next=start.next if not marks[next.char] then local components=next.components if components then flush_node_list(components) end delete_node(start,next) end n=n+1 until next==stop else repeat local next=start.next local components=next.components if components then flush_node_list(components) end delete_node(start,next) n=n+1 until next==stop end return n end function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex) local current=start local subtables=currentlookup.subtables if #subtables>1 then logwarning("todo: check if we need to loop over the replacements: %s",concat(subtables," ")) end while current do if current.id==glyph_code then local currentchar=current.char local lookupname=subtables[1] local replacement=lookuphash[lookupname] if not replacement then if trace_bugs then logwarning("%s: no single hits",cref(kind,chainname,chainlookupname,lookupname,chainindex)) end else replacement=replacement[currentchar] if not replacement or replacement=="" then if trace_bugs then logwarning("%s: no single for %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar)) end else if trace_singles then logprocess("%s: replacing single %s by %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar),gref(replacement)) end current.char=replacement end end return head,start,true elseif current==stop then break else current=current.next end end return head,start,false end chainmores.gsub_single=chainprocs.gsub_single function chainprocs.gsub_multiple(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) delete_till_stop(start,stop) local startchar=start.char local subtables=currentlookup.subtables local lookupname=subtables[1] local replacements=lookuphash[lookupname] if not replacements then if trace_bugs then logwarning("%s: no multiple hits",cref(kind,chainname,chainlookupname,lookupname)) end else replacements=replacements[startchar] if not replacements or replacement=="" then if trace_bugs then logwarning("%s: no multiple for %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar)) end else if trace_multiples then logprocess("%s: replacing %s by multiple characters %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar),gref(replacements)) end return multiple_glyphs(head,start,replacements) end end return head,start,false end chainmores.gsub_multiple=chainprocs.gsub_multiple function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local current=start local subtables=currentlookup.subtables local value=featurevalue==true and tfmdata.shared.features[kind] or featurevalue while current do if current.id==glyph_code then local currentchar=current.char local lookupname=subtables[1] local alternatives=lookuphash[lookupname] if not alternatives then if trace_bugs then logwarning("%s: no alternative hit",cref(kind,chainname,chainlookupname,lookupname)) end else alternatives=alternatives[currentchar] if alternatives then local choice,comment=get_alternative_glyph(current,alternatives,value,trace_alternatives) if choice then if trace_alternatives then logprocess("%s: replacing %s by alternative %a to %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(char),choice,gref(choice),comment) end start.char=choice else if trace_alternatives then logwarning("%s: no variant %a for %s, %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(char),comment) end end elseif trace_bugs then logwarning("%s: no alternative for %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(currentchar),comment) end end return head,start,true elseif current==stop then break else current=current.next end end return head,start,false end chainmores.gsub_alternate=chainprocs.gsub_alternate function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex) local startchar=start.char local subtables=currentlookup.subtables local lookupname=subtables[1] local ligatures=lookuphash[lookupname] if not ligatures then if trace_bugs then logwarning("%s: no ligature hits",cref(kind,chainname,chainlookupname,lookupname,chainindex)) end else ligatures=ligatures[startchar] if not ligatures then if trace_bugs then logwarning("%s: no ligatures starting with %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar)) end else local s=start.next local discfound=false local last=stop local nofreplacements=0 local skipmark=currentlookup.flags[1] while s do local id=s.id if id==disc_code then s=s.next discfound=true else local schar=s.char if skipmark and marks[schar] then s=s.next else local lg=ligatures[schar] if lg then ligatures,last,nofreplacements=lg,s,nofreplacements+1 if s==stop then break else s=s.next end else break end end end end local l2=ligatures.ligature if l2 then if chainindex then stop=last end if trace_ligatures then if start==stop then logprocess("%s: replacing character %s by ligature %s case 3",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(l2)) else logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(stop.char),gref(l2)) end end head,start=toligature(kind,lookupname,head,start,stop,l2,currentlookup.flags[1],discfound) return head,start,true,nofreplacements elseif trace_bugs then if start==stop then logwarning("%s: replacing character %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar)) else logwarning("%s: replacing character %s upto %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(stop.char)) end end end end return head,start,false,0 end chainmores.gsub_ligature=chainprocs.gsub_ligature function chainprocs.gpos_mark2base(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local markchar=start.char if marks[markchar] then local subtables=currentlookup.subtables local lookupname=subtables[1] local markanchors=lookuphash[lookupname] if markanchors then markanchors=markanchors[markchar] end if markanchors then local base=start.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then local basechar=base.char if marks[basechar] then while true do base=base.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then basechar=base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar)) end return head,start,false end end end local baseanchors=descriptions[basechar].anchors if baseanchors then local baseanchors=baseanchors['basechar'] if baseanchors then local al=anchorlookups[lookupname] for anchor,ba in next,baseanchors do if al[anchor] then local ma=markanchors[anchor] if ma then local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)", cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head,start,true end end end if trace_bugs then logwarning("%s, no matching anchors for mark %s and base %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then logwarning("%s: prev node is no char",cref(kind,chainname,chainlookupname,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar)) end return head,start,false end function chainprocs.gpos_mark2ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local markchar=start.char if marks[markchar] then local subtables=currentlookup.subtables local lookupname=subtables[1] local markanchors=lookuphash[lookupname] if markanchors then markanchors=markanchors[markchar] end if markanchors then local base=start.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then local basechar=base.char if marks[basechar] then while true do base=base.prev if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then basechar=base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",cref(kind,chainname,chainlookupname,lookupname),markchar) end return head,start,false end end end local index=start[a_ligacomp] local baseanchors=descriptions[basechar].anchors if baseanchors then local baseanchors=baseanchors['baselig'] if baseanchors then local al=anchorlookups[lookupname] for anchor,ba in next,baseanchors do if al[anchor] then local ma=markanchors[anchor] if ma then ba=ba[index] if ba then local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)", cref(kind,chainname,chainlookupname,lookupname),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy) end return head,start,true end end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and baselig %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then logwarning("feature %s, lookup %s: prev node is no char",kind,lookupname) end elseif trace_bugs then logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar)) end return head,start,false end function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local markchar=start.char if marks[markchar] then local subtables=currentlookup.subtables local lookupname=subtables[1] local markanchors=lookuphash[lookupname] if markanchors then markanchors=markanchors[markchar] end if markanchors then local base=start.prev local slc=start[a_ligacomp] if slc then while base do local blc=base[a_ligacomp] if blc and blc~=slc then base=base.prev else break end end end if base and base.id==glyph_code and base.font==currentfont and base.subtype<256 then local basechar=base.char local baseanchors=descriptions[basechar].anchors if baseanchors then baseanchors=baseanchors['basemark'] if baseanchors then local al=anchorlookups[lookupname] for anchor,ba in next,baseanchors do if al[anchor] then local ma=markanchors[anchor] if ma then local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)", cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head,start,true end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and basemark %s",gref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then logwarning("%s: prev node is no mark",cref(kind,chainname,chainlookupname,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar)) end return head,start,false end function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local alreadydone=cursonce and start[a_cursbase] if not alreadydone then local startchar=start.char local subtables=currentlookup.subtables local lookupname=subtables[1] local exitanchors=lookuphash[lookupname] if exitanchors then exitanchors=exitanchors[startchar] end if exitanchors then local done=false if marks[startchar] then if trace_cursive then logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar)) end else local nxt=start.next while not done and nxt and nxt.id==glyph_code and nxt.font==currentfont and nxt.subtype<256 do local nextchar=nxt.char if marks[nextchar] then nxt=nxt.next else local entryanchors=descriptions[nextchar] if entryanchors then entryanchors=entryanchors.anchors if entryanchors then entryanchors=entryanchors['centry'] if entryanchors then local al=anchorlookups[lookupname] for anchor,entry in next,entryanchors do if al[anchor] then local exit=exitanchors[anchor] if exit then local dx,dy,bound=setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar]) if trace_cursive then logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode) end done=true break end end end end end elseif trace_bugs then onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) end break end end end return head,start,done else if trace_cursive and trace_details then logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(start.char),alreadydone) end return head,start,false end end return head,start,false end function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence) local startchar=start.char local subtables=currentlookup.subtables local lookupname=subtables[1] local kerns=lookuphash[lookupname] if kerns then kerns=kerns[startchar] if kerns then local dx,dy,w,h=setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar]) if trace_kerns then logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h) end end end return head,start,false end function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence) local snext=start.next if snext then local startchar=start.char local subtables=currentlookup.subtables local lookupname=subtables[1] local kerns=lookuphash[lookupname] if kerns then kerns=kerns[startchar] if kerns then local lookuptype=lookuptypes[lookupname] local prev,done=start,false local factor=tfmdata.parameters.factor while snext and snext.id==glyph_code and snext.font==currentfont and snext.subtype<256 do local nextchar=snext.char local krn=kerns[nextchar] if not krn and marks[nextchar] then prev=snext snext=snext.next else if not krn then elseif type(krn)=="table" then if lookuptype=="pair" then local a,b=krn[2],krn[3] if a and #a>0 then local startchar=start.char local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar]) if trace_kerns then logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h) end end if b and #b>0 then local startchar=start.char local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar]) if trace_kerns then logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h) end end else report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname)) local a,b=krn[2],krn[6] if a and a~=0 then local k=setkern(snext,factor,rlmode,a) if trace_kerns then logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(prev.char),gref(nextchar)) end end if b and b~=0 then logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor) end end done=true elseif krn~=0 then local k=setkern(snext,factor,rlmode,krn) if trace_kerns then logprocess("%s: inserting kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(prev.char),gref(nextchar)) end done=true end break end end return head,start,done end end end return head,start,false end local function show_skip(kind,chainname,char,ck,class) if ck[9] then logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a, %a => %a",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10]) else logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2]) end end local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash) local flags=sequence.flags local done=false local skipmark=flags[1] local skipligature=flags[2] local skipbase=flags[3] local someskip=skipmark or skipligature or skipbase local markclass=sequence.markclass local skipped=false for k=1,#contexts do local match=true local current=start local last=start local ck=contexts[k] local seq=ck[3] local s=#seq if s==1 then match=current.id==glyph_code and current.font==currentfont and current.subtype<256 and seq[1][current.char] else local f,l=ck[4],ck[5] if f==1 and f==l then else if f==l then else local n=f+1 last=last.next while n<=l do if last then local id=last.id if id==glyph_code then if last.font==currentfont and last.subtype<256 then local char=last.char local ccd=descriptions[char] if ccd then local class=ccd.class if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then skipped=true if trace_skips then show_skip(kind,chainname,char,ck,class) end last=last.next elseif seq[n][char] then if n1 then local prev=start.prev if prev then local n=f-1 while n>=1 do if prev then local id=prev.id if id==glyph_code then if prev.font==currentfont and prev.subtype<256 then local char=prev.char local ccd=descriptions[char] if ccd then local class=ccd.class if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then skipped=true if trace_skips then show_skip(kind,chainname,char,ck,class) end elseif seq[n][char] then n=n -1 else match=false break end else match=false break end else match=false break end elseif id==disc_code then elseif seq[n][32] then n=n -1 else match=false break end prev=prev.prev elseif seq[n][32] then n=n -1 else match=false break end end elseif f==2 then match=seq[1][32] else for n=f-1,1 do if not seq[n][32] then match=false break end end end end if match and s>l then local current=last and last.next if current then local n=l+1 while n<=s do if current then local id=current.id if id==glyph_code then if current.font==currentfont and current.subtype<256 then local char=current.char local ccd=descriptions[char] if ccd then local class=ccd.class if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then skipped=true if trace_skips then show_skip(kind,chainname,char,ck,class) end elseif seq[n][char] then n=n+1 else match=false break end else match=false break end else match=false break end elseif id==disc_code then elseif seq[n][32] then n=n+1 else match=false break end current=current.next elseif seq[n][32] then n=n+1 else match=false break end end elseif s-l==1 then match=seq[s][32] else for n=l+1,s do if not seq[n][32] then match=false break end end end end end if match then if trace_contexts then local rule,lookuptype,f,l=ck[1],ck[2],ck[4],ck[5] local char=start.char if ck[9] then logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a, %a => %a", cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype,ck[9],ck[10]) else logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a", cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype) end end local chainlookups=ck[6] if chainlookups then local nofchainlookups=#chainlookups if nofchainlookups==1 then local chainlookupname=chainlookups[1] local chainlookup=lookuptable[chainlookupname] if chainlookup then local cp=chainprocs[chainlookup.type] if cp then head,start,done=cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence) else logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type) end else logprocess("%s is not yet supported",cref(kind,chainname,chainlookupname)) end else local i=1 repeat if skipped then while true do local char=start.char local ccd=descriptions[char] if ccd then local class=ccd.class if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then start=start.next else break end else break end end end local chainlookupname=chainlookups[i] local chainlookup=lookuptable[chainlookupname] local cp=chainlookup and chainmores[chainlookup.type] if cp then local ok,n head,start,ok,n=cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence) if ok then done=true i=i+(n or 1) else i=i+1 end else i=i+1 end if start then start=start.next else end until i>nofchainlookups end else local replacements=ck[7] if replacements then head,start,done=chainprocs.reversesub(head,start,last,kind,chainname,ck,lookuphash,replacements) else done=true if trace_contexts then logprocess("%s: skipping match",cref(kind,chainname)) end end end end end return head,start,done end local verbose_handle_contextchain=function(font,...) logwarning("no verbose handler installed, reverting to 'normal'") otf.setcontextchain() return normal_handle_contextchain(...) end otf.chainhandlers={ normal=normal_handle_contextchain, verbose=verbose_handle_contextchain, } function otf.setcontextchain(method) if not method or method=="normal" or not otf.chainhandlers[method] then if handlers.contextchain then logwarning("installing normal contextchain handler") end handlers.contextchain=normal_handle_contextchain else logwarning("installing contextchain handler %a",method) local handler=otf.chainhandlers[method] handlers.contextchain=function(...) return handler(currentfont,...) end end handlers.gsub_context=handlers.contextchain handlers.gsub_contextchain=handlers.contextchain handlers.gsub_reversecontextchain=handlers.contextchain handlers.gpos_contextchain=handlers.contextchain handlers.gpos_context=handlers.contextchain end otf.setcontextchain() local missing={} local function logprocess(...) if trace_steps then registermessage(...) end report_process(...) end local logwarning=report_process local function report_missing_cache(typ,lookup) local f=missing[currentfont] if not f then f={} missing[currentfont]=f end local t=f[typ] if not t then t={} f[typ]=t end if not t[lookup] then t[lookup]=true logwarning("missing cache for lookup %a, type %a, font %a, name %a",lookup,typ,currentfont,tfmdata.properties.fullname) end end local resolved={} local lookuphashes={} setmetatableindex(lookuphashes,function(t,font) local lookuphash=fontdata[font].resources.lookuphash if not lookuphash or not next(lookuphash) then lookuphash=false end t[font]=lookuphash return lookuphash end) local autofeatures=fonts.analyzers.features local function initialize(sequence,script,language,enabled) local features=sequence.features if features then for kind,scripts in next,features do local valid=enabled[kind] if valid then local languages=scripts[script] or scripts[wildcard] if languages and (languages[language] or languages[wildcard]) then return { valid,autofeatures[kind] or false,sequence.chain or 0,kind,sequence } end end end end return false end function otf.dataset(tfmdata,font) local shared=tfmdata.shared local properties=tfmdata.properties local language=properties.language or "dflt" local script=properties.script or "dflt" local enabled=shared.features local res=resolved[font] if not res then res={} resolved[font]=res end local rs=res[script] if not rs then rs={} res[script]=rs end local rl=rs[language] if not rl then rl={ } rs[language]=rl local sequences=tfmdata.resources.sequences for s=1,#sequences do local v=enabled and initialize(sequences[s],script,language,enabled) if v then rl[#rl+1]=v end end end return rl end local function featuresprocessor(head,font,attr) local lookuphash=lookuphashes[font] if not lookuphash then return head,false end if trace_steps then checkstep(head) end tfmdata=fontdata[font] descriptions=tfmdata.descriptions characters=tfmdata.characters resources=tfmdata.resources marks=resources.marks anchorlookups=resources.lookup_to_anchor lookuptable=resources.lookups lookuptypes=resources.lookuptypes currentfont=font rlmode=0 local sequences=resources.sequences local done=false local datasets=otf.dataset(tfmdata,font,attr) local dirstack={} for s=1,#datasets do local dataset=datasets[s] featurevalue=dataset[1] local sequence=dataset[5] local rlparmode=0 local topstack=0 local success=false local attribute=dataset[2] local chain=dataset[3] local typ=sequence.type local subtables=sequence.subtables if chain<0 then local handler=handlers[typ] local start=find_node_tail(head) while start do local id=start.id if id==glyph_code then if start.font==font and start.subtype<256 then local a=start[0] if a then a=a==attr else a=true end if a then for i=1,#subtables do local lookupname=subtables[i] local lookupcache=lookuphash[lookupname] if lookupcache then local lookupmatch=lookupcache[start.char] if lookupmatch then head,start,success=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i) if success then break end end else report_missing_cache(typ,lookupname) end end if start then start=start.prev end else start=start.prev end else start=start.prev end else start=start.prev end end else local handler=handlers[typ] local ns=#subtables local start=head rlmode=0 if ns==1 then local lookupname=subtables[1] local lookupcache=lookuphash[lookupname] if not lookupcache then report_missing_cache(typ,lookupname) else while start do local id=start.id if id==glyph_code then if start.font==font and start.subtype<256 then local a=start[0] if a then a=(a==attr) and (not attribute or start[a_state]==attribute) else a=not attribute or start[a_state]==attribute end if a then local lookupmatch=lookupcache[start.char] if lookupmatch then local ok head,start,ok=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1) if ok then success=true end end if start then start=start.next end else start=start.next end elseif id==math_code then start=end_of_math(start).next else start=start.next end elseif id==whatsit_code then local subtype=start.subtype if subtype==dir_code then local dir=start.dir if dir=="+TRT" or dir=="+TLT" then topstack=topstack+1 dirstack[topstack]=dir elseif dir=="-TRT" or dir=="-TLT" then topstack=topstack-1 end local newdir=dirstack[topstack] if newdir=="+TRT" then rlmode=-1 elseif newdir=="+TLT" then rlmode=1 else rlmode=rlparmode end if trace_directions then report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir) end elseif subtype==localpar_code then local dir=start.dir if dir=="TRT" then rlparmode=-1 elseif dir=="TLT" then rlparmode=1 else rlparmode=0 end rlmode=rlparmode if trace_directions then report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode) end end start=start.next elseif id==math_code then start=end_of_math(start).next else start=start.next end end end else while start do local id=start.id if id==glyph_code then if start.font==font and start.subtype<256 then local a=start[0] if a then a=(a==attr) and (not attribute or start[a_state]==attribute) else a=not attribute or start[a_state]==attribute end if a then for i=1,ns do local lookupname=subtables[i] local lookupcache=lookuphash[lookupname] if lookupcache then local lookupmatch=lookupcache[start.char] if lookupmatch then local ok head,start,ok=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i) if ok then success=true break elseif not start then break end end else report_missing_cache(typ,lookupname) end end if start then start=start.next end else start=start.next end else start=start.next end elseif id==whatsit_code then local subtype=start.subtype if subtype==dir_code then local dir=start.dir if dir=="+TRT" or dir=="+TLT" then topstack=topstack+1 dirstack[topstack]=dir elseif dir=="-TRT" or dir=="-TLT" then topstack=topstack-1 end local newdir=dirstack[topstack] if newdir=="+TRT" then rlmode=-1 elseif newdir=="+TLT" then rlmode=1 else rlmode=rlparmode end if trace_directions then report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir) end elseif subtype==localpar_code then local dir=start.dir if dir=="TRT" then rlparmode=-1 elseif dir=="TLT" then rlparmode=1 else rlparmode=0 end rlmode=rlparmode if trace_directions then report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode) end end start=start.next elseif id==math_code then start=end_of_math(start).next else start=start.next end end end end if success then done=true end if trace_steps then registerstep(head) end end return head,done end local function generic(lookupdata,lookupname,unicode,lookuphash) local target=lookuphash[lookupname] if target then target[unicode]=lookupdata else lookuphash[lookupname]={ [unicode]=lookupdata } end end local action={ substitution=generic, multiple=generic, alternate=generic, position=generic, ligature=function(lookupdata,lookupname,unicode,lookuphash) local target=lookuphash[lookupname] if not target then target={} lookuphash[lookupname]=target end for i=1,#lookupdata do local li=lookupdata[i] local tu=target[li] if not tu then tu={} target[li]=tu end target=tu end target.ligature=unicode end, pair=function(lookupdata,lookupname,unicode,lookuphash) local target=lookuphash[lookupname] if not target then target={} lookuphash[lookupname]=target end local others=target[unicode] local paired=lookupdata[1] if others then others[paired]=lookupdata else others={ [paired]=lookupdata } target[unicode]=others end end, } local function prepare_lookups(tfmdata) local rawdata=tfmdata.shared.rawdata local resources=rawdata.resources local lookuphash=resources.lookuphash local anchor_to_lookup=resources.anchor_to_lookup local lookup_to_anchor=resources.lookup_to_anchor local lookuptypes=resources.lookuptypes local characters=tfmdata.characters local descriptions=tfmdata.descriptions for unicode,character in next,characters do local description=descriptions[unicode] if description then local lookups=description.slookups if lookups then for lookupname,lookupdata in next,lookups do action[lookuptypes[lookupname]](lookupdata,lookupname,unicode,lookuphash) end end local lookups=description.mlookups if lookups then for lookupname,lookuplist in next,lookups do local lookuptype=lookuptypes[lookupname] for l=1,#lookuplist do local lookupdata=lookuplist[l] action[lookuptype](lookupdata,lookupname,unicode,lookuphash) end end end local list=description.kerns if list then for lookup,krn in next,list do local target=lookuphash[lookup] if target then target[unicode]=krn else lookuphash[lookup]={ [unicode]=krn } end end end local list=description.anchors if list then for typ,anchors in next,list do if typ=="mark" or typ=="cexit" then for name,anchor in next,anchors do local lookups=anchor_to_lookup[name] if lookups then for lookup,_ in next,lookups do local target=lookuphash[lookup] if target then target[unicode]=anchors else lookuphash[lookup]={ [unicode]=anchors } end end end end end end end end end end local function split(replacement,original) local result={} for i=1,#replacement do result[original[i]]=replacement[i] end return result end local valid={ coverage={ chainsub=true,chainpos=true,contextsub=true }, reversecoverage={ reversesub=true }, glyphs={ chainsub=true,chainpos=true }, } local function prepare_contextchains(tfmdata) local rawdata=tfmdata.shared.rawdata local resources=rawdata.resources local lookuphash=resources.lookuphash local lookups=rawdata.lookups if lookups then for lookupname,lookupdata in next,rawdata.lookups do local lookuptype=lookupdata.type if lookuptype then local rules=lookupdata.rules if rules then local format=lookupdata.format local validformat=valid[format] if not validformat then report_prepare("unsupported format %a",format) elseif not validformat[lookuptype] then report_prepare("unsupported format %a, lookuptype %a, lookupname %a",format,lookuptype,lookupname) else local contexts=lookuphash[lookupname] if not contexts then contexts={} lookuphash[lookupname]=contexts end local t,nt={},0 for nofrules=1,#rules do local rule=rules[nofrules] local current=rule.current local before=rule.before local after=rule.after local replacements=rule.replacements local sequence={} local nofsequences=0 if before then for n=1,#before do nofsequences=nofsequences+1 sequence[nofsequences]=before[n] end end local start=nofsequences+1 for n=1,#current do nofsequences=nofsequences+1 sequence[nofsequences]=current[n] end local stop=nofsequences if after then for n=1,#after do nofsequences=nofsequences+1 sequence[nofsequences]=after[n] end end if sequence[1] then nt=nt+1 t[nt]={ nofrules,lookuptype,sequence,start,stop,rule.lookups,replacements } for unic,_ in next,sequence[start] do local cu=contexts[unic] if not cu then contexts[unic]=t end end end end end else end else report_prepare("missing lookuptype for lookupname %a",lookupname) end end end end local function featuresinitializer(tfmdata,value) if true then local rawdata=tfmdata.shared.rawdata local properties=rawdata.properties if not properties.initialized then local starttime=trace_preparing and os.clock() local resources=rawdata.resources resources.lookuphash=resources.lookuphash or {} prepare_contextchains(tfmdata) prepare_lookups(tfmdata) properties.initialized=true if trace_preparing then report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,tfmdata.properties.fullname) end end end end registerotffeature { name="features", description="features", default=true, initializers={ position=1, node=featuresinitializer, }, processors={ node=featuresprocessor, } } otf.handlers=handlers end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-otp']={ version=1.001, comment="companion to font-otf.lua (packing)", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local next,type=next,type local sort,concat=table.sort,table.concat local sortedhash=table.sortedhash local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end) local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end) local report_otf=logs.reporter("fonts","otf loading") fonts=fonts or {} local handlers=fonts.handlers or {} fonts.handlers=handlers local otf=handlers.otf or {} handlers.otf=otf local enhancers=otf.enhancers or {} otf.enhancers=enhancers local glists=otf.glists or { "gsub","gpos" } otf.glists=glists local criterium=1 local threshold=0 local function tabstr_normal(t) local s={} local n=0 for k,v in next,t do n=n+1 if type(v)=="table" then s[n]=k..">"..tabstr_normal(v) elseif v==true then s[n]=k.."+" elseif v then s[n]=k.."="..v else s[n]=k.."-" end end if n==0 then return "" elseif n==1 then return s[1] else sort(s) return concat(s,",") end end local function tabstr_flat(t) local s={} local n=0 for k,v in next,t do n=n+1 s[n]=k.."="..v end if n==0 then return "" elseif n==1 then return s[1] else sort(s) return concat(s,",") end end local function tabstr_mixed(t) local s={} local n=#t if n==0 then return "" elseif n==1 then local k=t[1] if k==true then return "++" elseif k==false then return "--" else return tostring(k) end else for i=1,n do local k=t[i] if k==true then s[i]="++" elseif k==false then s[i]="--" else s[i]=k end end return concat(s,",") end end local function tabstr_boolean(t) local s={} local n=0 for k,v in next,t do n=n+1 if v then s[n]=k.."+" else s[n]=k.."-" end end if n==0 then return "" elseif n==1 then return s[1] else sort(s) return concat(s,",") end end local function packdata(data) if data then local h,t,c={},{},{} local hh,tt,cc={},{},{} local nt,ntt=0,0 local function pack_normal(v) local tag=tabstr_normal(v) local ht=h[tag] if ht then c[ht]=c[ht]+1 return ht else nt=nt+1 t[nt]=v h[tag]=nt c[nt]=1 return nt end end local function pack_flat(v) local tag=tabstr_flat(v) local ht=h[tag] if ht then c[ht]=c[ht]+1 return ht else nt=nt+1 t[nt]=v h[tag]=nt c[nt]=1 return nt end end local function pack_boolean(v) local tag=tabstr_boolean(v) local ht=h[tag] if ht then c[ht]=c[ht]+1 return ht else nt=nt+1 t[nt]=v h[tag]=nt c[nt]=1 return nt end end local function pack_indexed(v) local tag=concat(v," ") local ht=h[tag] if ht then c[ht]=c[ht]+1 return ht else nt=nt+1 t[nt]=v h[tag]=nt c[nt]=1 return nt end end local function pack_mixed(v) local tag=tabstr_mixed(v) local ht=h[tag] if ht then c[ht]=c[ht]+1 return ht else nt=nt+1 t[nt]=v h[tag]=nt c[nt]=1 return nt end end local function pack_final(v) if c[v]<=criterium then return t[v] else local hv=hh[v] if hv then return hv else ntt=ntt+1 tt[ntt]=t[v] hh[v]=ntt cc[ntt]=c[v] return ntt end end end local function success(stage,pass) if nt==0 then if trace_loading or trace_packing then report_otf("pack quality: nothing to pack") end return false elseif nt>=threshold then local one,two,rest=0,0,0 if pass==1 then for k,v in next,c do if v==1 then one=one+1 elseif v==2 then two=two+1 else rest=rest+1 end end else for k,v in next,cc do if v>20 then rest=rest+1 elseif v>10 then two=two+1 else one=one+1 end end data.tables=tt end if trace_loading or trace_packing then report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",stage,pass,one+two+rest,one,two,rest,criterium) end return true else if trace_loading or trace_packing then report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",stage,pass,nt,threshold) end return false end end local function packers(pass) if pass==1 then return pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed else return pack_final,pack_final,pack_final,pack_final,pack_final end end local resources=data.resources local lookuptypes=resources.lookuptypes for pass=1,2 do if trace_packing then report_otf("start packing: stage 1, pass %s",pass) end local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass) for unicode,description in next,data.descriptions do local boundingbox=description.boundingbox if boundingbox then description.boundingbox=pack_indexed(boundingbox) end local slookups=description.slookups if slookups then for tag,slookup in next,slookups do local what=lookuptypes[tag] if what=="pair" then local t=slookup[2] if t then slookup[2]=pack_indexed(t) end local t=slookup[3] if t then slookup[3]=pack_indexed(t) end elseif what~="substitution" then slookups[tag]=pack_indexed(slookup) end end end local mlookups=description.mlookups if mlookups then for tag,mlookup in next,mlookups do local what=lookuptypes[tag] if what=="pair" then for i=1,#mlookup do local lookup=mlookup[i] local t=lookup[2] if t then lookup[2]=pack_indexed(t) end local t=lookup[3] if t then lookup[3]=pack_indexed(t) end end elseif what~="substitution" then for i=1,#mlookup do mlookup[i]=pack_indexed(mlookup[i]) end end end end local kerns=description.kerns if kerns then for tag,kern in next,kerns do kerns[tag]=pack_flat(kern) end end local math=description.math if math then local kerns=math.kerns if kerns then for tag,kern in next,kerns do kerns[tag]=pack_normal(kern) end end end local anchors=description.anchors if anchors then for what,anchor in next,anchors do if what=="baselig" then for _,a in next,anchor do for k=1,#a do a[k]=pack_indexed(a[k]) end end else for k,v in next,anchor do anchor[k]=pack_indexed(v) end end end end local altuni=description.altuni if altuni then for i=1,#altuni do altuni[i]=pack_flat(altuni[i]) end end end local lookups=data.lookups if lookups then for _,lookup in next,lookups do local rules=lookup.rules if rules then for i=1,#rules do local rule=rules[i] local r=rule.before if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end local r=rule.after if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end local r=rule.current if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end local r=rule.replacements if r then rule.replacements=pack_flat (r) end local r=rule.lookups if r then rule.lookups=pack_indexed(r) end end end end end local anchor_to_lookup=resources.anchor_to_lookup if anchor_to_lookup then for anchor,lookup in next,anchor_to_lookup do anchor_to_lookup[anchor]=pack_normal(lookup) end end local lookup_to_anchor=resources.lookup_to_anchor if lookup_to_anchor then for lookup,anchor in next,lookup_to_anchor do lookup_to_anchor[lookup]=pack_normal(anchor) end end local sequences=resources.sequences if sequences then for feature,sequence in next,sequences do local flags=sequence.flags if flags then sequence.flags=pack_normal(flags) end local subtables=sequence.subtables if subtables then sequence.subtables=pack_normal(subtables) end local features=sequence.features if features then for script,feature in next,features do features[script]=pack_normal(feature) end end end end local lookups=resources.lookups if lookups then for name,lookup in next,lookups do local flags=lookup.flags if flags then lookup.flags=pack_normal(flags) end local subtables=lookup.subtables if subtables then lookup.subtables=pack_normal(subtables) end end end local features=resources.features if features then for _,what in next,glists do local list=features[what] if list then for feature,spec in next,list do list[feature]=pack_normal(spec) end end end end if not success(1,pass) then return end end if nt>0 then for pass=1,2 do if trace_packing then report_otf("start packing: stage 2, pass %s",pass) end local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass) for unicode,description in next,data.descriptions do local kerns=description.kerns if kerns then description.kerns=pack_normal(kerns) end local math=description.math if math then local kerns=math.kerns if kerns then math.kerns=pack_normal(kerns) end end local anchors=description.anchors if anchors then description.anchors=pack_normal(anchors) end local mlookups=description.mlookups if mlookups then for tag,mlookup in next,mlookups do mlookups[tag]=pack_normal(mlookup) end end local altuni=description.altuni if altuni then description.altuni=pack_normal(altuni) end end local lookups=data.lookups if lookups then for _,lookup in next,lookups do local rules=lookup.rules if rules then for i=1,#rules do local rule=rules[i] local r=rule.before if r then rule.before=pack_normal(r) end local r=rule.after if r then rule.after=pack_normal(r) end local r=rule.current if r then rule.current=pack_normal(r) end end end end end local sequences=resources.sequences if sequences then for feature,sequence in next,sequences do sequence.features=pack_normal(sequence.features) end end if not success(2,pass) then end end for pass=1,2 do local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass) for unicode,description in next,data.descriptions do local slookups=description.slookups if slookups then description.slookups=pack_normal(slookups) end local mlookups=description.mlookups if mlookups then description.mlookups=pack_normal(mlookups) end end end end end end local unpacked_mt={ __index=function(t,k) t[k]=false return k end } local function unpackdata(data) if data then local tables=data.tables if tables then local resources=data.resources local lookuptypes=resources.lookuptypes local unpacked={} setmetatable(unpacked,unpacked_mt) for unicode,description in next,data.descriptions do local tv=tables[description.boundingbox] if tv then description.boundingbox=tv end local slookups=description.slookups if slookups then local tv=tables[slookups] if tv then description.slookups=tv slookups=unpacked[tv] end if slookups then for tag,lookup in next,slookups do local what=lookuptypes[tag] if what=="pair" then local tv=tables[lookup[2]] if tv then lookup[2]=tv end local tv=tables[lookup[3]] if tv then lookup[3]=tv end elseif what~="substitution" then local tv=tables[lookup] if tv then slookups[tag]=tv end end end end end local mlookups=description.mlookups if mlookups then local tv=tables[mlookups] if tv then description.mlookups=tv mlookups=unpacked[tv] end if mlookups then for tag,list in next,mlookups do local tv=tables[list] if tv then mlookups[tag]=tv list=unpacked[tv] end if list then local what=lookuptypes[tag] if what=="pair" then for i=1,#list do local lookup=list[i] local tv=tables[lookup[2]] if tv then lookup[2]=tv end local tv=tables[lookup[3]] if tv then lookup[3]=tv end end elseif what~="substitution" then for i=1,#list do local tv=tables[list[i]] if tv then list[i]=tv end end end end end end end local kerns=description.kerns if kerns then local tm=tables[kerns] if tm then description.kerns=tm kerns=unpacked[tm] end if kerns then for k,kern in next,kerns do local tv=tables[kern] if tv then kerns[k]=tv end end end end local math=description.math if math then local kerns=math.kerns if kerns then local tm=tables[kerns] if tm then math.kerns=tm kerns=unpacked[tm] end if kerns then for k,kern in next,kerns do local tv=tables[kern] if tv then kerns[k]=tv end end end end end local anchors=description.anchors if anchors then local ta=tables[anchors] if ta then description.anchors=ta anchors=unpacked[ta] end if anchors then for tag,anchor in next,anchors do if tag=="baselig" then for _,list in next,anchor do for i=1,#list do local tv=tables[list[i]] if tv then list[i]=tv end end end else for a,data in next,anchor do local tv=tables[data] if tv then anchor[a]=tv end end end end end end local altuni=description.altuni if altuni then local altuni=tables[altuni] if altuni then description.altuni=altuni for i=1,#altuni do local tv=tables[altuni[i]] if tv then altuni[i]=tv end end end end end local lookups=data.lookups if lookups then for _,lookup in next,lookups do local rules=lookup.rules if rules then for i=1,#rules do local rule=rules[i] local before=rule.before if before then local tv=tables[before] if tv then rule.before=tv before=unpacked[tv] end if before then for i=1,#before do local tv=tables[before[i]] if tv then before[i]=tv end end end end local after=rule.after if after then local tv=tables[after] if tv then rule.after=tv after=unpacked[tv] end if after then for i=1,#after do local tv=tables[after[i]] if tv then after[i]=tv end end end end local current=rule.current if current then local tv=tables[current] if tv then rule.current=tv current=unpacked[tv] end if current then for i=1,#current do local tv=tables[current[i]] if tv then current[i]=tv end end end end local replacements=rule.replacements if replacements then local tv=tables[replacements] if tv then rule.replacements=tv end end local fore=rule.fore if fore then local tv=tables[fore] if tv then rule.fore=tv end end local back=rule.back if back then local tv=tables[back] if tv then rule.back=tv end end local names=rule.names if names then local tv=tables[names] if tv then rule.names=tv end end local lookups=rule.lookups if lookups then local tv=tables[lookups] if tv then rule.lookups=tv end end end end end end local anchor_to_lookup=resources.anchor_to_lookup if anchor_to_lookup then for anchor,lookup in next,anchor_to_lookup do local tv=tables[lookup] if tv then anchor_to_lookup[anchor]=tv end end end local lookup_to_anchor=resources.lookup_to_anchor if lookup_to_anchor then for lookup,anchor in next,lookup_to_anchor do local tv=tables[anchor] if tv then lookup_to_anchor[lookup]=tv end end end local ls=resources.sequences if ls then for _,feature in next,ls do local flags=feature.flags if flags then local tv=tables[flags] if tv then feature.flags=tv end end local subtables=feature.subtables if subtables then local tv=tables[subtables] if tv then feature.subtables=tv end end local features=feature.features if features then local tv=tables[features] if tv then feature.features=tv features=unpacked[tv] end if features then for script,data in next,features do local tv=tables[data] if tv then features[script]=tv end end end end end end local lookups=resources.lookups if lookups then for _,lookup in next,lookups do local flags=lookup.flags if flags then local tv=tables[flags] if tv then lookup.flags=tv end end local subtables=lookup.subtables if subtables then local tv=tables[subtables] if tv then lookup.subtables=tv end end end end local features=resources.features if features then for _,what in next,glists do local feature=features[what] if feature then for tag,spec in next,feature do local tv=tables[spec] if tv then feature[tag]=tv end end end end end data.tables=nil end end end if otf.enhancers.register then otf.enhancers.register("pack",packdata) otf.enhancers.register("unpack",unpackdata) end otf.enhancers.unpack=unpackdata end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-fonts-lua']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts fonts.formats.lua="lua" function fonts.readers.lua(specification) local fullname=specification.filename or "" if fullname=="" then local forced=specification.forced or "" if forced~="" then fullname=specification.name.."."..forced else fullname=specification.name end end local fullname=resolvers.findfile(fullname) or "" if fullname~="" then local loader=loadfile(fullname) loader=loader and loader() return loader and loader(specification) end end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['font-def']={ version=1.001, comment="companion to font-ini.mkiv", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } local format,gmatch,match,find,lower,gsub=string.format,string.gmatch,string.match,string.find,string.lower,string.gsub local tostring,next=tostring,next local lpegmatch=lpeg.match local allocate=utilities.storage.allocate local trace_defining=false trackers .register("fonts.defining",function(v) trace_defining=v end) local directive_embedall=false directives.register("fonts.embedall",function(v) directive_embedall=v end) trackers.register("fonts.loading","fonts.defining","otf.loading","afm.loading","tfm.loading") trackers.register("fonts.all","fonts.*","otf.*","afm.*","tfm.*") local report_defining=logs.reporter("fonts","defining") local fonts=fonts local fontdata=fonts.hashes.identifiers local readers=fonts.readers local definers=fonts.definers local specifiers=fonts.specifiers local constructors=fonts.constructors local fontgoodies=fonts.goodies readers.sequence=allocate { 'otf','ttf','afm','tfm','lua' } local variants=allocate() specifiers.variants=variants definers.methods=definers.methods or {} local internalized=allocate() local lastdefined=nil local loadedfonts=constructors.loadedfonts local designsizes=constructors.designsizes local resolvefile=fontgoodies and fontgoodies.filenames and fontgoodies.filenames.resolve or function(s) return s end local splitter,splitspecifiers=nil,"" local P,C,S,Cc=lpeg.P,lpeg.C,lpeg.S,lpeg.Cc local left=P("(") local right=P(")") local colon=P(":") local space=P(" ") definers.defaultlookup="file" local prefixpattern=P(false) local function addspecifier(symbol) splitspecifiers=splitspecifiers..symbol local method=S(splitspecifiers) local lookup=C(prefixpattern)*colon local sub=left*C(P(1-left-right-method)^1)*right local specification=C(method)*C(P(1)^1) local name=C((1-sub-specification)^1) splitter=P((lookup+Cc(""))*name*(sub+Cc(""))*(specification+Cc(""))) end local function addlookup(str,default) prefixpattern=prefixpattern+P(str) end definers.addlookup=addlookup addlookup("file") addlookup("name") addlookup("spec") local function getspecification(str) return lpegmatch(splitter,str) end definers.getspecification=getspecification function definers.registersplit(symbol,action,verbosename) addspecifier(symbol) variants[symbol]=action if verbosename then variants[verbosename]=action end end local function makespecification(specification,lookup,name,sub,method,detail,size) size=size or 655360 if not lookup or lookup=="" then lookup=definers.defaultlookup end if trace_defining then report_defining("specification %a, lookup %a, name %a, sub %a, method %a, detail %a", specification,lookup,name,sub,method,detail) end local t={ lookup=lookup, specification=specification, size=size, name=name, sub=sub, method=method, detail=detail, resolved="", forced="", features={}, } return t end definers.makespecification=makespecification function definers.analyze(specification,size) local lookup,name,sub,method,detail=getspecification(specification or "") return makespecification(specification,lookup,name,sub,method,detail,size) end definers.resolvers=definers.resolvers or {} local resolvers=definers.resolvers function resolvers.file(specification) local name=resolvefile(specification.name) local suffix=file.suffix(name) if fonts.formats[suffix] then specification.forced=suffix specification.name=file.removesuffix(name) else specification.name=name end end function resolvers.name(specification) local resolve=fonts.names.resolve if resolve then local resolved,sub=resolve(specification.name,specification.sub,specification) if resolved then specification.resolved=resolved specification.sub=sub local suffix=file.suffix(resolved) if fonts.formats[suffix] then specification.forced=suffix specification.name=file.removesuffix(resolved) else specification.name=resolved end end else resolvers.file(specification) end end function resolvers.spec(specification) local resolvespec=fonts.names.resolvespec if resolvespec then local resolved,sub=resolvespec(specification.name,specification.sub,specification) if resolved then specification.resolved=resolved specification.sub=sub specification.forced=file.suffix(resolved) specification.name=file.removesuffix(resolved) end else resolvers.name(specification) end end function definers.resolve(specification) if not specification.resolved or specification.resolved=="" then local r=resolvers[specification.lookup] if r then r(specification) end end if specification.forced=="" then specification.forced=nil else specification.forced=specification.forced end specification.hash=lower(specification.name..' @ '..constructors.hashfeatures(specification)) if specification.sub and specification.sub~="" then specification.hash=specification.sub..' @ '..specification.hash end return specification end function definers.applypostprocessors(tfmdata) local postprocessors=tfmdata.postprocessors if postprocessors then local properties=tfmdata.properties for i=1,#postprocessors do local extrahash=postprocessors[i](tfmdata) if type(extrahash)=="string" and extrahash~="" then extrahash=gsub(lower(extrahash),"[^a-z]","-") properties.fullname=format("%s-%s",properties.fullname,extrahash) end end end return tfmdata end local function checkembedding(tfmdata) local properties=tfmdata.properties local embedding if directive_embedall then embedding="full" elseif properties and properties.filename and constructors.dontembed[properties.filename] then embedding="no" else embedding="subset" end if properties then properties.embedding=embedding else tfmdata.properties={ embedding=embedding } end tfmdata.embedding=embedding end function definers.loadfont(specification) local hash=constructors.hashinstance(specification) local tfmdata=loadedfonts[hash] if not tfmdata then local forced=specification.forced or "" if forced~="" then local reader=readers[lower(forced)] tfmdata=reader and reader(specification) if not tfmdata then report_defining("forced type %a of %a not found",forced,specification.name) end else local sequence=readers.sequence for s=1,#sequence do local reader=sequence[s] if readers[reader] then if trace_defining then report_defining("trying (reader sequence driven) type %a for %a with file %a",reader,specification.name,specification.filename) end tfmdata=readers[reader](specification) if tfmdata then break else specification.filename=nil end end end end if tfmdata then tfmdata=definers.applypostprocessors(tfmdata) checkembedding(tfmdata) loadedfonts[hash]=tfmdata designsizes[specification.hash]=tfmdata.parameters.designsize end end if not tfmdata then report_defining("font with asked name %a is not found using lookup %a",specification.name,specification.lookup) end return tfmdata end function constructors.checkvirtualids() end function constructors.readanddefine(name,size) local specification=definers.analyze(name,size) local method=specification.method if method and variants[method] then specification=variants[method](specification) end specification=definers.resolve(specification) local hash=constructors.hashinstance(specification) local id=definers.registered(hash) if not id then local tfmdata=definers.loadfont(specification) if tfmdata then tfmdata.properties.hash=hash constructors.checkvirtualids(tfmdata) id=font.define(tfmdata) definers.register(tfmdata,id) else id=0 end end return fontdata[id],id end function definers.current() return lastdefined end function definers.registered(hash) local id=internalized[hash] return id,id and fontdata[id] end function definers.register(tfmdata,id) if tfmdata and id then local hash=tfmdata.properties.hash if not hash then report_defining("registering font, id %a, name %a, invalid hash",id,tfmdata.properties.filename or "?") elseif not internalized[hash] then internalized[hash]=id if trace_defining then report_defining("registering font, id %s, hash %a",id,hash) end fontdata[id]=tfmdata end end end function definers.read(specification,size,id) statistics.starttiming(fonts) if type(specification)=="string" then specification=definers.analyze(specification,size) end local method=specification.method if method and variants[method] then specification=variants[method](specification) end specification=definers.resolve(specification) local hash=constructors.hashinstance(specification) local tfmdata=definers.registered(hash) if tfmdata then if trace_defining then report_defining("already hashed: %s",hash) end else tfmdata=definers.loadfont(specification) if tfmdata then if trace_defining then report_defining("loaded and hashed: %s",hash) end tfmdata.properties.hash=hash if id then definers.register(tfmdata,id) end else if trace_defining then report_defining("not loaded and hashed: %s",hash) end end end lastdefined=tfmdata or id if not tfmdata then report_defining("unknown font %a, loading aborted",specification.name) elseif trace_defining and type(tfmdata)=="table" then local properties=tfmdata.properties or {} local parameters=tfmdata.parameters or {} report_defining("using %s font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a", properties.format,id,properties.name,parameters.size,properties.encodingbytes, properties.encodingname,properties.fullname,file.basename(properties.filename)) end statistics.stoptiming(fonts) return tfmdata end function font.getfont(id) return fontdata[id] end callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)") end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-font-def']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts fonts.constructors.namemode="specification" function fonts.definers.getspecification(str) return "",str,"",":",str end local list={} local function issome () list.lookup='name' end local function isfile () list.lookup='file' end local function isname () list.lookup='name' end local function thename(s) list.name=s end local function issub (v) list.sub=v end local function iscrap (s) list.crap=string.lower(s) end local function iskey (k,v) list[k]=v end local function istrue (s) list[s]=true end local function isfalse(s) list[s]=false end local P,S,R,C=lpeg.P,lpeg.S,lpeg.R,lpeg.C local spaces=P(" ")^0 local namespec=(1-S("/:("))^0 local crapspec=spaces*P("/")*(((1-P(":"))^0)/iscrap)*spaces local filename_1=P("file:")/isfile*(namespec/thename) local filename_2=P("[")*P(true)/isname*(((1-P("]"))^0)/thename)*P("]") local fontname_1=P("name:")/isname*(namespec/thename) local fontname_2=P(true)/issome*(namespec/thename) local sometext=(R("az","AZ","09")+S("+-."))^1 local truevalue=P("+")*spaces*(sometext/istrue) local falsevalue=P("-")*spaces*(sometext/isfalse) local keyvalue=(C(sometext)*spaces*P("=")*spaces*C(sometext))/iskey local somevalue=sometext/istrue local subvalue=P("(")*(C(P(1-S("()"))^1)/issub)*P(")") local option=spaces*(keyvalue+falsevalue+truevalue+somevalue)*spaces local options=P(":")*spaces*(P(";")^0*option)^0 local pattern=(filename_1+filename_2+fontname_1+fontname_2)*subvalue^0*crapspec^0*options^0 local function colonized(specification) list={} lpeg.match(pattern,specification.specification) list.crap=nil if list.name then specification.name=list.name list.name=nil end if list.lookup then specification.lookup=list.lookup list.lookup=nil end if list.sub then specification.sub=list.sub list.sub=nil end specification.features.normal=fonts.handlers.otf.features.normalize(list) return specification end fonts.definers.registersplit(":",colonized,"cryptic") fonts.definers.registersplit("",colonized,"more cryptic") function fonts.definers.applypostprocessors(tfmdata) local postprocessors=tfmdata.postprocessors if postprocessors then for i=1,#postprocessors do local extrahash=postprocessors[i](tfmdata) if type(extrahash)=="string" and extrahash~="" then extrahash=string.gsub(lower(extrahash),"[^a-z]","-") tfmdata.properties.fullname=format("%s-%s",tfmdata.properties.fullname,extrahash) end end end return tfmdata end end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-fonts-ext']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts local otffeatures=fonts.constructors.newfeatures("otf") local function initializeitlc(tfmdata,value) if value then local parameters=tfmdata.parameters local italicangle=parameters.italicangle if italicangle and italicangle~=0 then local properties=tfmdata.properties local factor=tonumber(value) or 1 properties.hasitalics=true properties.autoitalicamount=factor*(parameters.uwidth or 40)/2 end end end otffeatures.register { name="itlc", description="italic correction", initializers={ base=initializeitlc, node=initializeitlc, } } local function initializeslant(tfmdata,value) value=tonumber(value) if not value then value=0 elseif value>1 then value=1 elseif value<-1 then value=-1 end tfmdata.parameters.slantfactor=value end otffeatures.register { name="slant", description="slant glyphs", initializers={ base=initializeslant, node=initializeslant, } } local function initializeextend(tfmdata,value) value=tonumber(value) if not value then value=0 elseif value>10 then value=10 elseif value<-10 then value=-10 end tfmdata.parameters.extendfactor=value end otffeatures.register { name="extend", description="scale glyphs horizontally", initializers={ base=initializeextend, node=initializeextend, } } fonts.protrusions=fonts.protrusions or {} fonts.protrusions.setups=fonts.protrusions.setups or {} local setups=fonts.protrusions.setups local function initializeprotrusion(tfmdata,value) if value then local setup=setups[value] if setup then local factor,left,right=setup.factor or 1,setup.left or 1,setup.right or 1 local emwidth=tfmdata.parameters.quad tfmdata.parameters.protrusion={ auto=true, } for i,chr in next,tfmdata.characters do local v,pl,pr=setup[i],nil,nil if v then pl,pr=v[1],v[2] end if pl and pl~=0 then chr.left_protruding=left*pl*factor end if pr and pr~=0 then chr.right_protruding=right*pr*factor end end end end end otffeatures.register { name="protrusion", description="shift characters into the left and or right margin", initializers={ base=initializeprotrusion, node=initializeprotrusion, } } fonts.expansions=fonts.expansions or {} fonts.expansions.setups=fonts.expansions.setups or {} local setups=fonts.expansions.setups local function initializeexpansion(tfmdata,value) if value then local setup=setups[value] if setup then local factor=setup.factor or 1 tfmdata.parameters.expansion={ stretch=10*(setup.stretch or 0), shrink=10*(setup.shrink or 0), step=10*(setup.step or 0), auto=true, } for i,chr in next,tfmdata.characters do local v=setup[i] if v and v~=0 then chr.expansion_factor=v*factor else chr.expansion_factor=factor end end end end end otffeatures.register { name="expansion", description="apply hz optimization", initializers={ base=initializeexpansion, node=initializeexpansion, } } function fonts.loggers.onetimemessage() end local byte=string.byte fonts.expansions.setups['default']={ stretch=2,shrink=2,step=.5,factor=1, [byte('A')]=0.5,[byte('B')]=0.7,[byte('C')]=0.7,[byte('D')]=0.5,[byte('E')]=0.7, [byte('F')]=0.7,[byte('G')]=0.5,[byte('H')]=0.7,[byte('K')]=0.7,[byte('M')]=0.7, [byte('N')]=0.7,[byte('O')]=0.5,[byte('P')]=0.7,[byte('Q')]=0.5,[byte('R')]=0.7, [byte('S')]=0.7,[byte('U')]=0.7,[byte('W')]=0.7,[byte('Z')]=0.7, [byte('a')]=0.7,[byte('b')]=0.7,[byte('c')]=0.7,[byte('d')]=0.7,[byte('e')]=0.7, [byte('g')]=0.7,[byte('h')]=0.7,[byte('k')]=0.7,[byte('m')]=0.7,[byte('n')]=0.7, [byte('o')]=0.7,[byte('p')]=0.7,[byte('q')]=0.7,[byte('s')]=0.7,[byte('u')]=0.7, [byte('w')]=0.7,[byte('z')]=0.7, [byte('2')]=0.7,[byte('3')]=0.7,[byte('6')]=0.7,[byte('8')]=0.7,[byte('9')]=0.7, } fonts.protrusions.setups['default']={ factor=1,left=1,right=1, [0x002C]={ 0,1 }, [0x002E]={ 0,1 }, [0x003A]={ 0,1 }, [0x003B]={ 0,1 }, [0x002D]={ 0,1 }, [0x2013]={ 0,0.50 }, [0x2014]={ 0,0.33 }, [0x3001]={ 0,1 }, [0x3002]={ 0,1 }, [0x060C]={ 0,1 }, [0x061B]={ 0,1 }, [0x06D4]={ 0,1 }, } fonts.handlers.otf.features.normalize=function(t) if t.rand then t.rand="random" end return t end function fonts.helpers.nametoslot(name) local t=type(name) if t=="string" then local tfmdata=fonts.hashes.identifiers[currentfont()] local shared=tfmdata and tfmdata.shared local fntdata=shared and shared.rawdata return fntdata and fntdata.resources.unicodes[name] elseif t=="number" then return n end end fonts.encodings=fonts.encodings or {} local reencodings={} fonts.encodings.reencodings=reencodings local function specialreencode(tfmdata,value) local encoding=value and reencodings[value] if encoding then local temp={} local char=tfmdata.characters for k,v in next,encoding do temp[k]=char[v] end for k,v in next,temp do char[k]=temp[k] end return string.format("reencoded:%s",value) end end local function reencode(tfmdata,value) tfmdata.postprocessors=tfmdata.postprocessors or {} table.insert(tfmdata.postprocessors, function(tfmdata) return specialreencode(tfmdata,value) end ) end otffeatures.register { name="reencode", description="reencode characters", manipulators={ base=reencode, node=reencode, } } end -- closure do -- begin closure to overcome local limits and interference if not modules then modules={} end modules ['luatex-fonts-cbk']={ version=1.001, comment="companion to luatex-*.tex", author="Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts=fonts local nodes=nodes local traverse_id=node.traverse_id local glyph_code=nodes.nodecodes.glyph function nodes.handlers.characters(head) local fontdata=fonts.hashes.identifiers if fontdata then local usedfonts,done,prevfont={},false,nil for n in traverse_id(glyph_code,head) do local font=n.font if font~=prevfont then prevfont=font local used=usedfonts[font] if not used then local tfmdata=fontdata[font] if tfmdata then local shared=tfmdata.shared if shared then local processors=shared.processes if processors and #processors>0 then usedfonts[font]=processors done=true end end end end end end if done then for font,processors in next,usedfonts do for i=1,#processors do local h,d=processors[i](head,font,0) head,done=h or head,done or d end end end return head,true else return head,false end end function nodes.simple_font_handler(head) head=nodes.handlers.characters(head) nodes.injections.handler(head) nodes.handlers.protectglyphs(head) head=node.ligaturing(head) head=node.kerning(head) return head end end -- closure context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-basics-nod.lua0000644000175000017500000000533412134352503027725 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts-nod'] = { version = 1.001, comment = "companion to luatex-fonts.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end -- Don't depend on code here as it is only needed to complement the -- font handler code. -- Attributes: if tex.attribute[0] ~= 0 then texio.write_nl("log","!") texio.write_nl("log","! Attribute 0 is reserved for ConTeXt's font feature management and has to be") texio.write_nl("log","! set to zero. Also, some attributes in the range 1-255 are used for special") texio.write_nl("log","! purposes so setting them at the TeX end might break the font handler.") texio.write_nl("log","!") tex.attribute[0] = 0 -- else no features end attributes = attributes or { } attributes.unsetvalue = -0x7FFFFFFF local numbers, last = { }, 127 attributes.private = attributes.private or function(name) local number = numbers[name] if not number then if last < 255 then last = last + 1 end number = last numbers[name] = number end return number end -- Nodes: nodes = { } nodes.pool = { } nodes.handlers = { } local nodecodes = { } for k,v in next, node.types () do nodecodes[string.gsub(v,"_","")] = k end local whatcodes = { } for k,v in next, node.whatsits() do whatcodes[string.gsub(v,"_","")] = k end local glyphcodes = { [0] = "character", "glyph", "ligature", "ghost", "left", "right" } nodes.nodecodes = nodecodes nodes.whatcodes = whatcodes nodes.whatsitcodes = whatcodes nodes.glyphcodes = glyphcodes local free_node = node.free local remove_node = node.remove local new_node = node.new local traverse_id = node.traverse_id local math_code = nodecodes.math nodes.handlers.protectglyphs = node.protect_glyphs nodes.handlers.unprotectglyphs = node.unprotect_glyphs function nodes.remove(head, current, free_too) local t = current head, current = remove_node(head,current) if t then if free_too then free_node(t) t = nil else t.next, t.prev = nil, nil end end return head, current, t end function nodes.delete(head,current) return nodes.remove(head,current,true) end nodes.before = node.insert_before nodes.after = node.insert_after function nodes.pool.kern(k) local n = new_node("kern",1) n.kern = k return n end function nodes.endofmath(n) for n in traverse_id(math_code,n.next) do return n end end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts.lua0000644000175000017500000002535112161703335027040 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts'] = { version = 1.001, comment = "companion to luatex-fonts.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The following code isolates the generic context code from already defined or to be defined -- namespaces. This is the reference loader for plain tex. This generic code is also used in -- luaotfload which is a low level lualatex opentype font loader but somehow has gotten a bit -- too generic name / prefix, originally set up and maintained by Khaled Hosny. Currently that -- set of derived files is maintained by a larger team lead by Philipp Gesang so when there are -- issues with this code in latex, you can best contact him. It might make sense then to first -- check if context has the same issue. We do our best to keep the interface as clean as possible. -- -- The code base is rather stable now, especially if you stay away from the non generic code. All -- relevant data is organized in tables within the main table of a font instance. There are a few -- places where in context other code is plugged in, but this does not affect the core code. Users -- can (given that their macro package provides this option) access the font data (characters, -- descriptions, properties, parameters, etc) of this main table. The documentation is part of -- context. There is also a manual for the helper libraries (maintained as part of the cld manuals). -- -- Future versions will probably have some more specific context code removed, like tracing and -- obscure hooks, so that we have a more efficient version (and less files too). So, don't depend -- too much on low level code that is meant for context as it can change without notice. We might -- also add more helper code here, but that depends to what extend metatex (sidetrack of context) -- evolves into a low level layer (depends on time, as usual). utf = utf or unicode.utf8 -- We have some (global) hooks (for latex): if not non_generic_context then non_generic_context = { } end if not non_generic_context.luatex_fonts then non_generic_context.luatex_fonts = { -- load_before = nil, -- load_after = nil, -- skip_loading = nil, } end if not generic_context then generic_context = { } end if not generic_context.push_namespaces then function generic_context.push_namespaces() texio.write(" ") local normalglobal = { } for k, v in next, _G do normalglobal[k] = v end return normalglobal end function generic_context.pop_namespaces(normalglobal,isolate) if normalglobal then texio.write(" ") for k, v in next, _G do if not normalglobal[k] then generic_context[k] = v if isolate then _G[k] = nil end end end for k, v in next, normalglobal do _G[k] = v end -- just to be sure: setmetatable(generic_context,_G) else texio.write(" ") os.exit() end end end local whatever = generic_context.push_namespaces() -- We keep track of load time by storing the current time. That way we cannot be accused -- of slowing down loading too much. Anyhow, there is no reason for this library to perform -- slower in any other package as it does in context. -- -- Please don't update to this version without proper testing. It might be that this version -- lags behind stock context and the only formal release takes place around tex live code -- freeze. local starttime = os.gettimeofday() -- As we don't use the context file searching, we need to initialize the kpse library. As the -- progname can be anything we will temporary switch to the context namespace if needed. Just -- adding the context paths to the path specification is somewhat faster. -- -- Now, with lua 5.2 being used we might create a special ENV for this. -- kpse.set_program_name("luatex") local ctxkpse = nil local verbose = true local function loadmodule(name,continue) local foundname = kpse.find_file(name,"tex") or "" if not foundname then if not ctxkpse then ctxkpse = kpse.new("luatex","context") end foundname = ctxkpse:find_file(name,"tex") or "" end if foundname == "" then if not continue then texio.write_nl(string.format(" ",name)) os.exit() end else if verbose then texio.write(string.format(" <%s>",foundname)) -- no file.basename yet end dofile(foundname) end end if non_generic_context.luatex_fonts.load_before then loadmodule(non_generic_context.luatex_fonts.load_before,true) end if non_generic_context.luatex_fonts.skip_loading ~= true then loadmodule('luatex-fonts-merged.lua',true) if fonts then if not fonts._merge_loaded_message_done_ then texio.write_nl("log", "!") texio.write_nl("log", "! I am using the merged version of 'luatex-fonts.lua' here. If") texio.write_nl("log", "! you run into problems or experience unexpected behaviour, and") texio.write_nl("log", "! if you have ConTeXt installed you can try to delete the file") texio.write_nl("log", "! 'luatex-font-merged.lua' as I might then use the possibly") texio.write_nl("log", "! updated libraries. The merged version is not supported as it") texio.write_nl("log", "! is a frozen instance. Problems can be reported to the ConTeXt") texio.write_nl("log", "! mailing list.") texio.write_nl("log", "!") end fonts._merge_loaded_message_done_ = true else -- The following helpers are a bit overkill but I don't want to mess up context code for the -- sake of general generality. Around version 1.0 there will be an official api defined. -- -- So, I will strip these libraries and see what is really needed so that we don't have this -- overhead in the generic modules. The next section is only there for the packager, so stick -- to using luatex-fonts with luatex-fonts-merged.lua and forget about the rest. The following -- list might change without prior notice (for instance because we shuffled code around). loadmodule("l-lua.lua") loadmodule("l-lpeg.lua") loadmodule("l-function.lua") loadmodule("l-string.lua") loadmodule("l-table.lua") loadmodule("l-io.lua") loadmodule("l-file.lua") loadmodule("l-boolean.lua") loadmodule("l-math.lua") loadmodule("util-str.lua") -- The following modules contain code that is either not used at all outside context or will fail -- when enabled due to lack of other modules. -- First we load a few helper modules. This is about the miminum needed to let the font modules do -- their work. Don't depend on their functions as we might strip them in future versions of his -- generic variant. loadmodule('luatex-basics-gen.lua') loadmodule('data-con.lua') -- We do need some basic node support. The code in there is not for general use as it might change. loadmodule('luatex-basics-nod.lua') -- Now come the font modules that deal with traditional tex fonts as well as open type fonts. We only -- support OpenType fonts here. -- -- The font database file (if used at all) must be put someplace visible for kpse and is not shared -- with context. The mtx-fonts script can be used to genate this file (using the --names option). -- In 2013/14 I will merge/move some generic files into luatex-fonts-* files (copies) so that -- intermediate updates of context not interfere. We can then also use the general merger and -- consider stripping debug code. loadmodule('font-ini.lua') loadmodule('font-con.lua') loadmodule('luatex-fonts-enc.lua') -- will load font-age on demand loadmodule('font-cid.lua') loadmodule('font-map.lua') -- for loading lum file (will be stripped) loadmodule('luatex-fonts-syn.lua') -- deals with font names (synonyms) loadmodule('luatex-fonts-tfm.lua') loadmodule('font-oti.lua') loadmodule('font-otf.lua') loadmodule('font-otb.lua') loadmodule('node-inj.lua') -- will be replaced (luatex >= .70) loadmodule('font-ota.lua') loadmodule('font-otn.lua') loadmodule('font-otp.lua') -- optional ----------('luatex-fonts-chr.lua') loadmodule('luatex-fonts-lua.lua') loadmodule('font-def.lua') loadmodule('luatex-fonts-def.lua') loadmodule('luatex-fonts-ext.lua') -- some extensions -- We need to plug into a callback and the following module implements the handlers. Actual plugging -- in happens later. loadmodule('luatex-fonts-cbk.lua') end end if non_generic_context.luatex_fonts.load_after then loadmodule(non_generic_context.luatex_fonts.load_after,true) end resolvers.loadmodule = loadmodule -- In order to deal with the fonts we need to initialize some callbacks. One can overload them later on if -- needed. First a bit of abstraction. generic_context.callback_ligaturing = false generic_context.callback_kerning = false generic_context.callback_pre_linebreak_filter = nodes.simple_font_handler generic_context.callback_hpack_filter = nodes.simple_font_handler generic_context.callback_define_font = fonts.definers.read -- The next ones can be done at a different moment if needed. You can create a generic_context namespace -- and set no_callbacks_yet to true, load this module, and enable the callbacks later. So, there is really -- *no* need to create a alternative for luatex-fonts.lua and luatex-fonts-merged.lua: just load this one -- and overload if needed. if not generic_context.no_callbacks_yet then callback.register('ligaturing', generic_context.callback_ligaturing) callback.register('kerning', generic_context.callback_kerning) callback.register('pre_linebreak_filter', generic_context.callback_pre_linebreak_filter) callback.register('hpack_filter', generic_context.callback_hpack_filter) callback.register('define_font' , generic_context.callback_define_font) end -- We're done. texio.write(string.format(" ", os.gettimeofday()-starttime)) generic_context.pop_namespaces(whatever) context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-syn.lua0000644000175000017500000000707112161703335027646 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts-syn'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end -- Generic font names support. -- -- Watch out, the version number is the same as the one used in -- the mtx-fonts.lua function scripts.fonts.names as we use a -- simplified font database in the plain solution and by using -- a different number we're less dependent on context. -- -- mtxrun --script font --reload --simple -- -- The format of the file is as follows: -- -- return { -- ["version"] = 1.001, -- ["cache_version"] = 1.001, -- ["mappings"] = { -- ["somettcfontone"] = { "Some TTC Font One", "SomeFontA.ttc", 1 }, -- ["somettcfonttwo"] = { "Some TTC Font Two", "SomeFontA.ttc", 2 }, -- ["somettffont"] = { "Some TTF Font", "SomeFontB.ttf" }, -- ["someotffont"] = { "Some OTF Font", "SomeFontC.otf" }, -- }, -- } local fonts = fonts fonts.names = fonts.names or { } fonts.names.version = 1.001 -- not the same as in context but matches mtx-fonts --simple fonts.names.basename = "luatex-fonts-names" fonts.names.new_to_old = { } fonts.names.old_to_new = { } fonts.names.cache = containers.define("fonts","data",fonts.names.version,true) local data, loaded = nil, false local fileformats = { "lua", "tex", "other text files" } function fonts.names.reportmissingbase() texio.write("") fonts.names.reportmissingbase = nil end function fonts.names.reportmissingname() texio.write("") fonts.names.reportmissingname = nil end function fonts.names.resolve(name,sub) if not loaded then local basename = fonts.names.basename if basename and basename ~= "" then data = containers.read(fonts.names.cache,basename) if not data then basename = file.addsuffix(basename,"lua") for i=1,#fileformats do local format = fileformats[i] local foundname = resolvers.findfile(basename,format) or "" if foundname ~= "" then data = dofile(foundname) texio.write("") break end end end end loaded = true end if type(data) == "table" and data.version == fonts.names.version then local condensed = string.gsub(string.lower(name),"[^%a%d]","") local found = data.mappings and data.mappings[condensed] if found then local fontname, filename, subfont = found[1], found[2], found[3] if subfont then return filename, fontname else return filename, false end elseif fonts.names.reportmissingname then fonts.names.reportmissingname() return name, false -- fallback to filename end elseif fonts.names.reportmissingbase then fonts.names.reportmissingbase() end end fonts.names.resolvespec = fonts.names.resolve -- only supported in mkiv function fonts.names.getfilename(askedname,suffix) -- only supported in mkiv return "" end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua0000644000175000017500000000252111754241457030534 0ustar norbertnorbertlocal identifiers = fonts.hashes.identifiers return function(specification) local f1, id1 = fonts.constructors.readanddefine('lmroman10-regular', specification.size) local f2, id2 = fonts.constructors.readanddefine('lmsans10-regular', specification.size) local f3, id3 = fonts.constructors.readanddefine('lmtypewriter10-regular',specification.size) if f1 and f2 and f3 then f1.properties.name = specification.name f1.properties.virtualized = true f1.fonts = { { id = id1 }, { id = id2 }, { id = id3 }, } local color = { [0] = { "special", "pdf:0 g" }, { "special", "pdf:1 0 0 rg" }, { "special", "pdf:0 1 0 rg" }, { "special", "pdf:0 0 1 rg" }, } local chars = { identifiers[id1].characters, identifiers[id2].characters, identifiers[id3].characters, } for u, v in next, f1.characters do local n = math.floor(math.random(1,3)+0.5) local c = chars[n][u] or v v.commands = { color[n], { 'slot', n, u }, color[0] } v.kerns = nil v.width = c.width v.height = c.height v.depth = c.depth v.italic = nil end end return f1 end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-preprocessor.lua0000644000175000017500000001113411754241457030440 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-preprocessor'] = { version = 1.001, comment = "companion to luatex-preprocessor.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx

This is a stripped down version of the preprocessor. In we have a bit more, use a different logger, and use a few optimizations. A few examples are shown at the end.

--ldx]] local rep, sub, gmatch = string.rep, string.sub, string.gmatch local insert, remove = table.insert, table.remove local setmetatable = setmetatable local stack, top, n, hashes = { }, nil, 0, { } local function set(s) if top then n = n + 1 if n > 9 then texio.write_nl("number of arguments > 9, ignoring: " .. s) else local ns = #stack local h = hashes[ns] if not h then h = rep("#",ns) hashes[ns] = h end m = h .. n top[s] = m return m end end end local function get(s) local m = top and top[s] or s return m end local function push() top = { } n = 0 local s = stack[#stack] if s then setmetatable(top,{ __index = s }) end insert(stack,top) end local function pop() top = remove(stack) end local leftbrace = lpeg.P("{") local rightbrace = lpeg.P("}") local escape = lpeg.P("\\") local space = lpeg.P(" ") local spaces = space^1 local newline = lpeg.S("\r\n") local nobrace = 1 - leftbrace - rightbrace local name = lpeg.R("AZ","az")^1 local longname = (leftbrace/"") * (nobrace^1) * (rightbrace/"") local variable = lpeg.P("#") * lpeg.Cs(name + longname) local escapedname = escape * name local definer = escape * (lpeg.P("def") + lpeg.P("egdx") * lpeg.P("def")) local anything = lpeg.P(1) local always = lpeg.P(true) local pushlocal = always / push local poplocal = always / pop local declaration = variable / set local identifier = variable / get local function matcherror(str,pos) texio.write_nl("runaway definition at: " .. sub(str,pos-30,pos)) end local parser = lpeg.Cs { "converter", definition = pushlocal * definer * escapedname * (declaration + (1-leftbrace))^0 * lpeg.V("braced") * poplocal, braced = leftbrace * ( lpeg.V("definition") + identifier + lpeg.V("braced") + nobrace )^0 * (rightbrace + lpeg.Cmt(always,matcherror)), converter = (lpeg.V("definition") + anything)^1, } --[[ldx

We provide a few commands.

--ldx]] -- local texkpse local function find_file(...) -- texkpse = texkpse or kpse.new("luatex","tex") -- return texkpse:find_file(...) or "" return kpse.find_file(...) or "" end commands = commands or { } function commands.preprocessed(str) return lpeg.match(parser,str) end function commands.inputpreprocessed(name) local name = find_file(name) or "" if name ~= "" then -- we could use io.loaddata as it's loaded in luatex-plain local f = io.open(name,'rb') if f then texio.write("("..name) local d = commands.preprocessed(f:read("*a")) if d and d ~= "" then texio.write("processed: " .. name) for s in gmatch(d,"[^\n\r]+") do tex.print(s) -- we do a dumb feedback end end f:close() texio.write(")") else tex.error("preprocessor error, invalid file: " .. name) end else tex.error("preprocessor error, unknown file: " .. name) end end function commands.preprocessfile(oldfile,newfile) -- no checking if oldfile and oldfile ~= newfile then local f = io.open(oldfile,'rb') if f then local g = io.open(newfile,'wb') if g then g:write(lpeg.match(parser,f:read("*a") or "")) g:close() end f:close() end end end --~ print(preprocessed([[\def\test#oeps{test:#oeps}]])) --~ print(preprocessed([[\def\test#oeps{test:#{oeps}}]])) --~ print(preprocessed([[\def\test#{oeps:1}{test:#{oeps:1}}]])) --~ print(preprocessed([[\def\test#{oeps}{test:#oeps}]])) --~ preprocessed([[\def\test#{oeps}{test:#oeps \halign{##\cr #oeps\cr}]]) --~ print(preprocessed([[\def\test#{oeps}{test:#oeps \halign{##\cr #oeps\cr}}]])) context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-lua.lua0000644000175000017500000000176411754241457027632 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts-lua'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts = fonts fonts.formats.lua = "lua" function fonts.readers.lua(specification) local fullname = specification.filename or "" if fullname == "" then local forced = specification.forced or "" if forced ~= "" then fullname = specification.name .. "." .. forced else fullname = specification.name end end local fullname = resolvers.findfile(fullname) or "" if fullname ~= "" then local loader = loadfile(fullname) loader = loader and loader() return loader and loader(specification) end end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-enc.lua0000644000175000017500000000147111754241457027611 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-font-enc'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts = fonts fonts.encodings = { } fonts.encodings.agl = { } setmetatable(fonts.encodings.agl, { __index = function(t,k) if k == "unicodes" then texio.write(" ") local unicodes = dofile(resolvers.findfile("font-age.lua")) fonts.encodings.agl = { unicodes = unicodes } return unicodes else return nil end end }) context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-swiglib-test.tex0000644000175000017500000000031512130411274030326 0ustar norbertnorbert% luatex --fmt=luatex=plain luatex-swiglib-test.tex \input luatex-swiglib.tex \directlua { dofile("luatex-swiglib-test.lua") } \pdfximage {luatex-swiglib-test.jpg} \pdfrefximage\pdflastximage \end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-test.tex0000644000175000017500000000467312161703335026711 0ustar norbertnorbert%D \module %D [ file=luatex-test, %D version=2009.12.01, %D title=\LUATEX\ Support Macros, %D subtitle=Simple Test File, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D See \type {luatex-plain.tex} (or on my machine \type {luatex.tex} %D for how to make a format. % You can generate a font database with: % % mtxrun --script fonts --reload --save % % The file luatex-fonts-names.lua has to be moved to a place % where kpse can find it. \pdfoutput=1 \font\testa=file:lmroman10-regular at 12pt \testa \input tufte \par \font\testb=file:lmroman12-regular:+liga; at 24pt \testb effe flink fietsen \par \font\testc=file:lmroman12-regular:mode=node;+liga; at 24pt \testc effe flink fietsen \par \font\testd=name:lmroman10bold at 12pt \testd a bit bold \par \font\oeps=cmr10 \font\oeps=[lmroman12-regular]:+liga at 30pt \oeps crap \font\oeps=[lmroman12-regular] at 40pt \oeps more crap \font\cidtest=adobesongstd-light \font\mathtest=cambria(math) {\mathtest 123} \font\gothic=msgothic(ms-gothic) {\gothic whatever} \font\testy=file:IranNastaliq.ttf:mode=node;script=arab;language=dflt;+calt;+ccmp;+init;+isol;+medi;+fina;+liga;+rlig;+kern;+mark;+mkmk at 14pt \testy این یک متن نمونه است با قلم ذر که درست آمده است. \pdfprotrudechars2 \pdfadjustspacing2 \font\testb=file:lmroman12-regular:+liga;extend=1.5 at 12pt \testb \input tufte \par \font\testb=file:lmroman12-regular:+liga;slant=0.8 at 12pt \testb \input tufte \par \font\testb=file:lmroman12-regular:+liga;protrusion=default at 12pt \testb \input tufte \par \setmplibformat{plain} \mplibcode beginfig(1) ; draw fullcircle scaled 10cm withcolor red withpen pencircle xscaled 4mm yscaled 2mm rotated 30 ; endfig ; \endmplibcode \font\mine=file:luatex-fonts-demo-vf-1.lua at 12pt \mine \input tufte \par % \font\mine=file:luatex-fonts-demo-vf-2.lua at 12pt \mine [abab] \par % \font\mine=file:luatex-fonts-demo-vf-3.lua at 12pt \mine [abab] \par \font\test=dejavuserif:+kern at 10pt \test \hsize 1mm \noindent Циолковский \loadpatterns{ru} \noindent Циолковский a bit of math $\it e=mc^2 \bf e=mc^2 \Uchar"1D49D$ $$\left( { {1} \over { {1} \over {x} } } \right) $$ $$\sqrt {2} { { {1} \over { {1} \over {x} } } } $$ \end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-mplib.lua0000644000175000017500000004670611754241457027032 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-mplib'] = { version = 1.001, comment = "companion to luatex-mplib.tex", author = "Hans Hagen & Taco Hoekwater", copyright = "ConTeXt Development Team", license = "public domain", } --[[ldx--

This module is a stripped down version of libraries that are used by . It can be used in other macro packages and/or serve as an example. Embedding in a macro package is upto others and normally boils down to inputting supp-mpl.tex.

--ldx]]-- if metapost and metapost.version then --[[ldx--

Let's silently quit and make sure that no one loads it manually in .

--ldx]]-- else local format, concat, abs, match = string.format, table.concat, math.abs, string.match local mplib = require ('mplib') local kpse = require ('kpse') --[[ldx--

We create a namespace and some variables to it. If a namespace is already defined it wil not be initialized. This permits hooking in code beforehand.

We don't make a format automatically. After all, distributions might have their own preferences and normally a format (mem) file will have some special place in the tree. Also, there can already be format files, different memort settings and other nasty pitfalls that we don't want to interfere with. If you want, you can define a function metapost.make(name,mem_name) that does the job.

--ldx]]-- metapost = metapost or { } metapost.version = 1.00 metapost.showlog = metapost.showlog or false metapost.lastlog = "" --[[ldx--

A few helpers, taken from l-file.lua.

--ldx]]-- local file = file or { } function file.replacesuffix(filename, suffix) return (string.gsub(filename,"%.[%a%d]+$","")) .. "." .. suffix end function file.stripsuffix(filename) return (string.gsub(filename,"%.[%a%d]+$","")) end --[[ldx--

We use the library unless a finder is already defined.

--ldx]]-- local mpkpse = kpse.new("luatex","mpost") metapost.finder = metapost.finder or function(name, mode, ftype) if mode == "w" then return name else return mpkpse:find_file(name,ftype) end end --[[ldx--

You can use your own reported if needed, as long as it handles multiple arguments and formatted strings.

--ldx]]-- metapost.report = metapost.report or function(...) texio.write(format("",format(...))) end --[[ldx--

The rest of this module is not documented. More info can be found in the manual, articles in user group journals and the files that ship with .

--ldx]]-- function metapost.resetlastlog() metapost.lastlog = "" end local mplibone = tonumber(mplib.version()) <= 1.50 if mplibone then metapost.make = metapost.make or function(name,mem_name,dump) local t = os.clock() local mpx = mplib.new { ini_version = true, find_file = metapost.finder, job_name = file.stripsuffix(name) } mpx:execute(string.format("input %s ;",name)) if dump then mpx:execute("dump ;") metapost.report("format %s made and dumped for %s in %0.3f seconds",mem_name,name,os.clock()-t) else metapost.report("%s read in %0.3f seconds",name,os.clock()-t) end return mpx end function metapost.load(name) local mem_name = file.replacesuffix(name,"mem") local mpx = mplib.new { ini_version = false, mem_name = mem_name, find_file = metapost.finder } if not mpx and type(metapost.make) == "function" then -- when i have time i'll locate the format and dump mpx = metapost.make(name,mem_name) end if mpx then metapost.report("using format %s",mem_name,false) return mpx, nil else return nil, { status = 99, error = "out of memory or invalid format" } end end else local preamble = [[ boolean mplib ; mplib := true ; let dump = endinput ; input %s ; ]] metapost.make = metapost.make or function() end function metapost.load(name) local mpx = mplib.new { ini_version = true, find_file = metapost.finder, } local result if not mpx then result = { status = 99, error = "out of memory"} else result = mpx:execute(format(preamble, file.replacesuffix(name,"mp"))) end metapost.reporterror(result) return mpx, result end end function metapost.unload(mpx) if mpx then mpx:finish() end end function metapost.reporterror(result) if not result then metapost.report("mp error: no result object returned") elseif result.status > 0 then local t, e, l = result.term, result.error, result.log if t then metapost.report("mp terminal: %s",t) end if e then metapost.report("mp error: %s", e) end if not t and not e and l then metapost.lastlog = metapost.lastlog .. "\n " .. l metapost.report("mp log: %s",l) else metapost.report("mp error: unknown, no error, terminal or log messages") end else return false end return true end function metapost.process(mpx, data) local converted, result = false, {} mpx = metapost.load(mpx) if mpx and data then local result = mpx:execute(data) if not result then metapost.report("mp error: no result object returned") elseif result.status > 0 then metapost.report("mp error: %s",(result.term or "no-term") .. "\n" .. (result.error or "no-error")) elseif metapost.showlog then metapost.lastlog = metapost.lastlog .. "\n" .. result.term metapost.report("mp info: %s",result.term or "no-term") elseif result.fig then converted = metapost.convert(result) else metapost.report("mp error: unknown error, maybe no beginfig/endfig") end else metapost.report("mp error: mem file not found") end return converted, result end local function getobjects(result,figure,f) return figure:objects() end function metapost.convert(result, flusher) metapost.flush(result, flusher) return true -- done end --[[ldx--

We removed some message and tracing code. We might even remove the flusher

--ldx]]-- local function pdf_startfigure(n,llx,lly,urx,ury) tex.sprint(format("\\startMPLIBtoPDF{%s}{%s}{%s}{%s}",llx,lly,urx,ury)) end local function pdf_stopfigure() tex.sprint("\\stopMPLIBtoPDF") end function pdf_literalcode(fmt,...) -- table tex.sprint(format("\\MPLIBtoPDF{%s}",format(fmt,...))) end function pdf_textfigure(font,size,text,width,height,depth) text = text:gsub(".","\\hbox{%1}") -- kerning happens in metapost tex.sprint(format("\\MPLIBtextext{%s}{%s}{%s}{%s}{%s}",font,size,text,0,-( 7200/ 7227)/65536*depth)) end local bend_tolerance = 131/65536 local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 local function pen_characteristics(object) local t = mplib.pen_info(object) rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty divider = sx*sy - rx*ry return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width end local function concat(px, py) -- no tx, ty here return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider end local function curved(ith,pth) local d = pth.left_x - ith.right_x if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then d = pth.left_y - ith.right_y if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then return false end end return true end local function flushnormalpath(path,open) local pth, ith for i=1,#path do pth = path[i] if not ith then pdf_literalcode("%f %f m",pth.x_coord,pth.y_coord) elseif curved(ith,pth) then pdf_literalcode("%f %f %f %f %f %f c",ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord) else pdf_literalcode("%f %f l",pth.x_coord,pth.y_coord) end ith = pth end if not open then local one = path[1] if curved(pth,one) then pdf_literalcode("%f %f %f %f %f %f c",pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord ) else pdf_literalcode("%f %f l",one.x_coord,one.y_coord) end elseif #path == 1 then -- special case .. draw point local one = path[1] pdf_literalcode("%f %f l",one.x_coord,one.y_coord) end return t end local function flushconcatpath(path,open) pdf_literalcode("%f %f %f %f %f %f cm", sx, rx, ry, sy, tx ,ty) local pth, ith for i=1,#path do pth = path[i] if not ith then pdf_literalcode("%f %f m",concat(pth.x_coord,pth.y_coord)) elseif curved(ith,pth) then local a, b = concat(ith.right_x,ith.right_y) local c, d = concat(pth.left_x,pth.left_y) pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord)) else pdf_literalcode("%f %f l",concat(pth.x_coord, pth.y_coord)) end ith = pth end if not open then local one = path[1] if curved(pth,one) then local a, b = concat(pth.right_x,pth.right_y) local c, d = concat(one.left_x,one.left_y) pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord)) else pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord)) end elseif #path == 1 then -- special case .. draw point local one = path[1] pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord)) end return t end --[[ldx--

Support for specials has been removed.

--ldx]]-- function metapost.flush(result,flusher) if result then local figures = result.fig if figures then for f=1, #figures do metapost.report("flushing figure %s",f) local figure = figures[f] local objects = getobjects(result,figure,f) local fignum = tonumber(match(figure:filename(),"([%d]+)$") or figure:charcode() or 0) local miterlimit, linecap, linejoin, dashed = -1, -1, -1, false local bbox = figure:boundingbox() local llx, lly, urx, ury = bbox[1], bbox[2], bbox[3], bbox[4] -- faster than unpack if urx < llx then -- invalid pdf_startfigure(fignum,0,0,0,0) pdf_stopfigure() else pdf_startfigure(fignum,llx,lly,urx,ury) pdf_literalcode("q") if objects then for o=1,#objects do local object = objects[o] local objecttype = object.type if objecttype == "start_bounds" or objecttype == "stop_bounds" then -- skip elseif objecttype == "start_clip" then pdf_literalcode("q") flushnormalpath(object.path,t,false) pdf_literalcode("W n") elseif objecttype == "stop_clip" then pdf_literalcode("Q") miterlimit, linecap, linejoin, dashed = -1, -1, -1, false elseif objecttype == "special" then -- not supported elseif objecttype == "text" then local ot = object.transform -- 3,4,5,6,1,2 pdf_literalcode("q %f %f %f %f %f %f cm",ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) pdf_textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth) pdf_literalcode("Q") else local cs = object.color if cs and #cs > 0 then pdf_literalcode(metapost.colorconverter(cs)) end local ml = object.miterlimit if ml and ml ~= miterlimit then miterlimit = ml pdf_literalcode("%f M",ml) end local lj = object.linejoin if lj and lj ~= linejoin then linejoin = lj pdf_literalcode("%i j",lj) end local lc = object.linecap if lc and lc ~= linecap then linecap = lc pdf_literalcode("%i J",lc) end local dl = object.dash if dl then local d = format("[%s] %i d",concat(dl.dashes or {}," "),dl.offset) if d ~= dashed then dashed = d pdf_literalcode(dashed) end elseif dashed then pdf_literalcode("[] 0 d") dashed = false end local path = object.path local transformed, penwidth = false, 1 local open = path and path[1].left_type and path[#path].right_type local pen = object.pen if pen then if pen.type == 'elliptical' then transformed, penwidth = pen_characteristics(object) -- boolean, value pdf_literalcode("%f w",penwidth) if objecttype == 'fill' then objecttype = 'both' end else -- calculated by mplib itself objecttype = 'fill' end end if transformed then pdf_literalcode("q") end if path then if transformed then flushconcatpath(path,open) else flushnormalpath(path,open) end if objecttype == "fill" then pdf_literalcode("h f") elseif objecttype == "outline" then pdf_literalcode((open and "S") or "h S") elseif objecttype == "both" then pdf_literalcode("h B") end end if transformed then pdf_literalcode("Q") end local path = object.htap if path then if transformed then pdf_literalcode("q") end if transformed then flushconcatpath(path,open) else flushnormalpath(path,open) end if objecttype == "fill" then pdf_literalcode("h f") elseif objecttype == "outline" then pdf_literalcode((open and "S") or "h S") elseif objecttype == "both" then pdf_literalcode("h B") end if transformed then pdf_literalcode("Q") end end if cr then pdf_literalcode(cr) end end end end pdf_literalcode("Q") pdf_stopfigure() end end end end end function metapost.colorconverter(cr) local n = #cr if n == 4 then local c, m, y, k = cr[1], cr[2], cr[3], cr[4] return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G" elseif n == 3 then local r, g, b = cr[1], cr[2], cr[3] return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G" else local s = cr[1] return format("%.3f g %.3f G",s,s), "0 g 0 G" end end end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-basics.tex0000644000175000017500000000136511754241457027202 0ustar norbertnorbert%D \module %D [ file=luatex-basics, %D version=2009.12.01, %D title=\LUATEX\ Support Macros, %D subtitle=Attribute Allocation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D As soon as we feel the need this file will file will contain an extension %D to the standard plain register allocation. For the moment we stick to a %D rather dumb attribute allocator. We start at 256 because we don't want %D any interference with the attributes used in the font handler. \newcount \lastallocatedattribute \lastallocatedattribute=255 \def\newattribute#1% {\global\advance\lastallocatedattribute 1 \attributedef#1\lastallocatedattribute} \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-cbk.lua0000644000175000017500000000420511754241457027601 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts-cbk'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts = fonts local nodes = nodes -- Fonts: (might move to node-gef.lua) local traverse_id = node.traverse_id local glyph_code = nodes.nodecodes.glyph function nodes.handlers.characters(head) local fontdata = fonts.hashes.identifiers if fontdata then local usedfonts, done, prevfont = { }, false, nil for n in traverse_id(glyph_code,head) do local font = n.font if font ~= prevfont then prevfont = font local used = usedfonts[font] if not used then local tfmdata = fontdata[font] -- if tfmdata then local shared = tfmdata.shared -- we need to check shared, only when same features if shared then local processors = shared.processes if processors and #processors > 0 then usedfonts[font] = processors done = true end end end end end end if done then for font, processors in next, usedfonts do for i=1,#processors do local h, d = processors[i](head,font,0) head, done = h or head, done or d end end end return head, true else return head, false end end function nodes.simple_font_handler(head) -- lang.hyphenate(head) head = nodes.handlers.characters(head) nodes.injections.handler(head) nodes.handlers.protectglyphs(head) head = node.ligaturing(head) head = node.kerning(head) return head end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-math.lua0000644000175000017500000000245412161703335026637 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-math'] = { version = 1.001, comment = "companion to luatex-math.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local gaps = { [0x1D455] = 0x0210E, [0x1D49D] = 0x0212C, [0x1D4A0] = 0x02130, [0x1D4A1] = 0x02131, [0x1D4A3] = 0x0210B, [0x1D4A4] = 0x02110, [0x1D4A7] = 0x02112, [0x1D4A8] = 0x02133, [0x1D4AD] = 0x0211B, [0x1D4BA] = 0x0212F, [0x1D4BC] = 0x0210A, [0x1D4C4] = 0x02134, [0x1D506] = 0x0212D, [0x1D50B] = 0x0210C, [0x1D50C] = 0x02111, [0x1D515] = 0x0211C, [0x1D51D] = 0x02128, [0x1D53A] = 0x02102, [0x1D53F] = 0x0210D, [0x1D545] = 0x02115, [0x1D547] = 0x02119, [0x1D548] = 0x0211A, [0x1D549] = 0x0211D, [0x1D551] = 0x02124, } local function fixmath(tfmdata,key,value) if value then local characters = tfmdata.characters for gap, mess in pairs(gaps) do characters[gap] = characters[mess] end end end fonts.handlers.otf.features.register { name = "fixmath", description = "math font fixing", manipulators = { base = fixmath, node = fixmath, } } context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts.tex0000644000175000017500000001333311754241457027065 0ustar norbertnorbert%D \module %D [ file=luatex-fonts, %D version=2009.12.01, %D title=\LUATEX\ Support Macros, %D subtitle=Generic \OPENTYPE\ Font Handler, %D author=Hans Hagen, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D \subject{Welcome} %D %D This file is one of a set of basic functionality enhancements %D for \LUATEX\ derived from the \CONTEXT\ \MKIV\ code base. Please %D don't polute the \type {luatex-*} namespace with code not coming %D from the \CONTEXT\ development team as we may add more files. %D %D As this is an experimental setup, it might not always work out as %D expected. Around \LUATEX\ version 0.50 we expect the code to be %D more or less okay. %D %D This file implements a basic font system for a bare \LUATEX\ %D system. By default \LUATEX\ only knows about the classic \TFM\ %D fonts but it can read other font formats and pass them to \LUA. %D With some glue code one can then construct a suitable \TFM\ %D representation that \LUATEX\ can work with. For more advanced font %D support a bit more code is needed that needs to be hooked %D into the callback mechanism. %D %D This file is currently rather simple: it just loads the \LUA\ file %D with the same name. An example of a \type {luatex.tex} file that is %D just plain \TEX: %D %D \starttyping %D \catcode`\{=1 % left brace is begin-group character %D \catcode`\}=2 % right brace is end-group character %D %D \input plain %D %D \everyjob\expandafter{\the\everyjob\input luatex-fonts\relax} %D %D \dump %D \stoptyping %D %D We could load the \LUA\ file in \type {\everyjob} but maybe some %D day we need more here. %D %D When defining a font you can use two prefixes. A \type {file:} %D prefix forced a file search, while a \type {name:} prefix will %D result in consulting the names database. Such a database can be %D generated with: %D %D \starttyping %D mtxrun --usekpse --script fonts --names %D \stoptyping %D %D This will generate a file \type {luatex-fonts-names.lua} that has %D to be placed in a location where it can be found by \KPSE. Beware: %D the \type {--kpseonly} flag is only used outside \CONTEXT\ and %D provides very limited functionality, just enough for this task. %D %D The code loaded here does not come out of thin air, but is mostly %D shared with \CONTEXT, however, in that macropackage we go beyond %D what is provided here. When you use the code packaged here you %D need to keep a few things in mind: %D %D \startitemize %D %D \item This subsystem will be extended, improved etc. in about the %D same pace as \CONTEXT\ \MKIV. However, because \CONTEXT\ provides a %D rather high level of integration not all features will be supported %D in the same quality. Use \CONTEXT\ if you want more goodies. %D %D \item There is no official \API\ yet, which means that using %D functions implemented here is at your own risk, in the sense that %D names and namespaces might change. There will be a minimal \API\ %D defined once \LUATEX\ version 1.0 is out. Instead of patching the %D files it's better to overload functions if needed. %D %D \item The modules are not stripped too much, which makes it %D possible to benefit from improvements in the code that take place %D in the perspective of \CONTEXT\ development. They might be split a %D bit more in due time so the baseline might become smaller. %D %D \item The code is maintained and tested by the \CONTEXT\ %D development team. As such it might be better suited for this macro %D package and integration in other systems might demand some %D additional wrapping. Problems can be reported to the team but as we %D use \CONTEXT\ \MKIV\ as baseline, you'd better check if the problem %D is a general \CONTEXT\ problem too. %D %D \item The more high level support for features that is provided in %D \CONTEXT\ is not part of the code loaded here as it makes no sense %D elsewhere. Some experimental features are not part of this code %D either but some might show up later. %D %D \item Math font support will be added but only in its basic form %D once that the Latin Modern and \TEX\ Gyre math fonts are %D available. %D %D \item At this moment the more nifty speed-ups are not enabled %D because they work in tandem with the alternative file handling %D that \CONTEXT\ uses. Maybe around \LUATEX\ 1.0 we will bring some %D speedup into this code too (if it pays off at all). %D %D \item The code defines a few global tables. If this code is used %D in a larger perspective then you can best make sure that no %D conflicts occur. The \CONTEXT\ package expects users to work in %D their own namespace (\type {userdata}, \type {thirddata}, \type %D {moduledata} or \type {document}. The team takes all freedom to %D use any table at the global level but will not use tables that are %D named after macro packages. Later the \CONTEXT\ might operate in %D a more controlled namespace but it has a low priority. %D %D \item There is some tracing code present but this is not enabled %D and not supported outside \CONTEXT\ either as it integrates quite %D tightly into \CONTEXT. In case of problems you can use \CONTEXT\ %D for tracking down problems. %D %D \item Patching the code in distributions is dangerous as it might %D fix your problem but introduce new ones for \CONTEXT. So, best keep %D the original code as it is. %D %D \item Attributes are (automatically) taken from the range 127-255 so %D you'd best not use these yourself. %D %D \stopitemize %D %D If this all sounds a bit tricky, keep in mind that it makes no sense %D for us to maintain multiple code bases and we happen to use \CONTEXT. %D %D For more details about how the font subsystem works we refer to %D publications in \TEX\ related journals, the \CONTEXT\ documentation, %D and the \CONTEXT\ wiki. \directlua { dofile(kpse.find_file("luatex-fonts.lua","tex")) } \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-swiglib-test.lua0000644000175000017500000000127512130411274030315 0ustar norbertnorbertlocal gm = swiglib("gmwand.core") gm.InitializeMagick(".") local magick_wand = gm.NewMagickWand() local drawing_wand = gm.NewDrawingWand() gm.MagickSetSize(magick_wand,800,600) gm.MagickReadImage(magick_wand,"xc:red") gm.DrawPushGraphicContext(drawing_wand) gm.DrawSetFillColor(drawing_wand,gm.NewPixelWand()) -- gm.DrawSetFont(drawing_wand, kpse.findfile("DejaVuSerifBold.ttf")) -- gm.DrawSetFontSize(drawing_wand, 96) -- gm.DrawAnnotation(drawing_wand,300,200, "LuaTeX") gm.DrawPopGraphicContext(drawing_wand) gm.MagickDrawImage(magick_wand,drawing_wand) gm.MagickWriteImages(magick_wand,"./luatex-swiglib-test.jpg",1) gm.DestroyDrawingWand(drawing_wand) gm.DestroyMagickWand(magick_wand) context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-tfm.lua0000644000175000017500000000233711754241457027634 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts-tfm'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts = fonts local tfm = { } fonts.handlers.tfm = tfm fonts.formats.tfm = "type1" -- we need to have at least a value here function fonts.readers.tfm(specification) local fullname = specification.filename or "" if fullname == "" then local forced = specification.forced or "" if forced ~= "" then fullname = specification.name .. "." .. forced else fullname = specification.name end end local foundname = resolvers.findbinfile(fullname, 'tfm') or "" if foundname == "" then foundname = resolvers.findbinfile(fullname, 'ofm') or "" end if foundname ~= "" then specification.filename = foundname specification.format = "ofm" return font.read_tfm(specification.filename,specification.size) end end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-swiglib.tex0000644000175000017500000000106712130411274027356 0ustar norbertnorbert%D \module %D [ file=luatex-swiglib, %D version=2013.03.30, %D title=\LUATEX\ Support Macros, %D subtitle=Generic \SWIGLIB\ Font Handler, %D author=Hans Hagen, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D This is an experimental setup. Usage: %D %D \starttyping %D local gm = swiglib("gmwand.core") %D local gm = require("swiglib.gmwand.core") %D local sq = swiglib("mysql.core") %D local sq = swiglib("mysql.core","5.6") %D \stoptyping \directlua { dofile(kpse.find_file("luatex-swiglib.lua","tex")) } context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-ext.lua0000644000175000017500000001752312130411274027632 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-fonts-ext'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts = fonts local otffeatures = fonts.constructors.newfeatures("otf") -- A few generic extensions. local function initializeitlc(tfmdata,value) if value then -- the magic 40 and it formula come from Dohyun Kim but we might need another guess local parameters = tfmdata.parameters local italicangle = parameters.italicangle if italicangle and italicangle ~= 0 then local properties = tfmdata.properties local factor = tonumber(value) or 1 properties.hasitalics = true properties.autoitalicamount = factor * (parameters.uwidth or 40)/2 end end end otffeatures.register { name = "itlc", description = "italic correction", initializers = { base = initializeitlc, node = initializeitlc, } } -- slant and extend local function initializeslant(tfmdata,value) value = tonumber(value) if not value then value = 0 elseif value > 1 then value = 1 elseif value < -1 then value = -1 end tfmdata.parameters.slantfactor = value end otffeatures.register { name = "slant", description = "slant glyphs", initializers = { base = initializeslant, node = initializeslant, } } local function initializeextend(tfmdata,value) value = tonumber(value) if not value then value = 0 elseif value > 10 then value = 10 elseif value < -10 then value = -10 end tfmdata.parameters.extendfactor = value end otffeatures.register { name = "extend", description = "scale glyphs horizontally", initializers = { base = initializeextend, node = initializeextend, } } -- expansion and protrusion fonts.protrusions = fonts.protrusions or { } fonts.protrusions.setups = fonts.protrusions.setups or { } local setups = fonts.protrusions.setups local function initializeprotrusion(tfmdata,value) if value then local setup = setups[value] if setup then local factor, left, right = setup.factor or 1, setup.left or 1, setup.right or 1 local emwidth = tfmdata.parameters.quad tfmdata.parameters.protrusion = { auto = true, } for i, chr in next, tfmdata.characters do local v, pl, pr = setup[i], nil, nil if v then pl, pr = v[1], v[2] end if pl and pl ~= 0 then chr.left_protruding = left *pl*factor end if pr and pr ~= 0 then chr.right_protruding = right*pr*factor end end end end end otffeatures.register { name = "protrusion", description = "shift characters into the left and or right margin", initializers = { base = initializeprotrusion, node = initializeprotrusion, } } fonts.expansions = fonts.expansions or { } fonts.expansions.setups = fonts.expansions.setups or { } local setups = fonts.expansions.setups local function initializeexpansion(tfmdata,value) if value then local setup = setups[value] if setup then local factor = setup.factor or 1 tfmdata.parameters.expansion = { stretch = 10 * (setup.stretch or 0), shrink = 10 * (setup.shrink or 0), step = 10 * (setup.step or 0), auto = true, } for i, chr in next, tfmdata.characters do local v = setup[i] if v and v ~= 0 then chr.expansion_factor = v*factor else -- can be option chr.expansion_factor = factor end end end end end otffeatures.register { name = "expansion", description = "apply hz optimization", initializers = { base = initializeexpansion, node = initializeexpansion, } } -- left over function fonts.loggers.onetimemessage() end -- example vectors local byte = string.byte fonts.expansions.setups['default'] = { stretch = 2, shrink = 2, step = .5, factor = 1, [byte('A')] = 0.5, [byte('B')] = 0.7, [byte('C')] = 0.7, [byte('D')] = 0.5, [byte('E')] = 0.7, [byte('F')] = 0.7, [byte('G')] = 0.5, [byte('H')] = 0.7, [byte('K')] = 0.7, [byte('M')] = 0.7, [byte('N')] = 0.7, [byte('O')] = 0.5, [byte('P')] = 0.7, [byte('Q')] = 0.5, [byte('R')] = 0.7, [byte('S')] = 0.7, [byte('U')] = 0.7, [byte('W')] = 0.7, [byte('Z')] = 0.7, [byte('a')] = 0.7, [byte('b')] = 0.7, [byte('c')] = 0.7, [byte('d')] = 0.7, [byte('e')] = 0.7, [byte('g')] = 0.7, [byte('h')] = 0.7, [byte('k')] = 0.7, [byte('m')] = 0.7, [byte('n')] = 0.7, [byte('o')] = 0.7, [byte('p')] = 0.7, [byte('q')] = 0.7, [byte('s')] = 0.7, [byte('u')] = 0.7, [byte('w')] = 0.7, [byte('z')] = 0.7, [byte('2')] = 0.7, [byte('3')] = 0.7, [byte('6')] = 0.7, [byte('8')] = 0.7, [byte('9')] = 0.7, } fonts.protrusions.setups['default'] = { factor = 1, left = 1, right = 1, [0x002C] = { 0, 1 }, -- comma [0x002E] = { 0, 1 }, -- period [0x003A] = { 0, 1 }, -- colon [0x003B] = { 0, 1 }, -- semicolon [0x002D] = { 0, 1 }, -- hyphen [0x2013] = { 0, 0.50 }, -- endash [0x2014] = { 0, 0.33 }, -- emdash [0x3001] = { 0, 1 }, -- ideographic comma 、 [0x3002] = { 0, 1 }, -- ideographic full stop 。 [0x060C] = { 0, 1 }, -- arabic comma ، [0x061B] = { 0, 1 }, -- arabic semicolon ؛ [0x06D4] = { 0, 1 }, -- arabic full stop ۔ } -- normalizer fonts.handlers.otf.features.normalize = function(t) if t.rand then t.rand = "random" end return t end -- bonus function fonts.helpers.nametoslot(name) local t = type(name) if t == "string" then local tfmdata = fonts.hashes.identifiers[currentfont()] local shared = tfmdata and tfmdata.shared local fntdata = shared and shared.rawdata return fntdata and fntdata.resources.unicodes[name] elseif t == "number" then return n end end -- \font\test=file:somefont:reencode=mymessup -- -- fonts.encodings.reencodings.mymessup = { -- [109] = 110, -- m -- [110] = 109, -- n -- } fonts.encodings = fonts.encodings or { } local reencodings = { } fonts.encodings.reencodings = reencodings local function specialreencode(tfmdata,value) -- we forget about kerns as we assume symbols and we -- could issue a message if ther are kerns but it's -- a hack anyway so we odn't care too much here local encoding = value and reencodings[value] if encoding then local temp = { } local char = tfmdata.characters for k, v in next, encoding do temp[k] = char[v] end for k, v in next, temp do char[k] = temp[k] end -- if we use the font otherwise luatex gets confused so -- we return an additional hash component for fullname return string.format("reencoded:%s",value) end end local function reencode(tfmdata,value) tfmdata.postprocessors = tfmdata.postprocessors or { } table.insert(tfmdata.postprocessors, function(tfmdata) return specialreencode(tfmdata,value) end ) end otffeatures.register { name = "reencode", description = "reencode characters", manipulators = { base = reencode, node = reencode, } } context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-mplib.tex0000644000175000017500000000554412130411274027025 0ustar norbertnorbert%D \module %D [ file=luatex-mplib, %D version=2009.12.01, %D title=\LUATEX\ Support Macros, %D subtitle=\METAPOST\ to \PDF\ conversion, %D author=Taco Hoekwater \& Hans Hagen, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %D This is the companion to the \LUA\ module \type {supp-mpl.lua}. Further %D embedding is up to others. A simple example of usage in plain \TEX\ is: %D %D \starttyping %D \pdfoutput=1 %D %D \input luatex-mplib.tex %D %D \setmplibformat{plain} %D %D \mplibcode %D beginfig(1); %D draw fullcircle %D scaled 10cm %D withcolor red %D withpen pencircle xscaled 4mm yscaled 2mm rotated 30 ; %D endfig; %D \endmplibcode %D %D \end %D \stoptyping \def\setmplibformat#1{\def\mplibformat{#1}} \def\setupmplibcatcodes {\catcode`\{=12 % could be optional .. not really needed \catcode`\}=12 % could be optional .. not really needed \catcode`\#=12 \catcode`\^=12 \catcode`\~=12 \catcode`\_=12 \catcode`\%=12 \catcode`\&=12 \catcode`\$=12 } \def\mplibcode {\bgroup \setupmplibcatcodes \domplibcode} \long\def\domplibcode#1\endmplibcode {\egroup \directlua{metapost.process('\mplibformat',[[#1]])}} %D We default to \type {plain} \METAPOST: \def\mplibformat{plain} %D We use a dedicated scratchbox: \ifx\mplibscratchbox\undefined \newbox\mplibscratchbox \fi %D Now load the needed \LUA\ code. \directlua{dofile(kpse.find_file('luatex-mplib.lua'))} %D The following code takes care of encapsulating the literals: \def\startMPLIBtoPDF#1#2#3#4% {\hbox\bgroup \xdef\MPllx{#1}\xdef\MPlly{#2}% \xdef\MPurx{#3}\xdef\MPury{#4}% \xdef\MPwidth{\the\dimexpr#3bp-#1bp\relax}% \xdef\MPheight{\the\dimexpr#4bp-#2bp\relax}% \parskip0pt% \leftskip0pt% \parindent0pt% \everypar{}% \setbox\mplibscratchbox\vbox\bgroup \noindent} \def\stopMPLIBtoPDF {\egroup \setbox\mplibscratchbox\hbox {\hskip-\MPllx bp% \raise-\MPlly bp% \box\mplibscratchbox}% \setbox\mplibscratchbox\vbox to \MPheight {\vfill \hsize\MPwidth \wd\mplibscratchbox0pt% \ht\mplibscratchbox0pt% \dp\mplibscratchbox0pt% \box\mplibscratchbox}% \wd\mplibscratchbox\MPwidth \ht\mplibscratchbox\MPheight \box\mplibscratchbox \egroup} %D The body of picture, except for text items, is taken care of by: \ifnum\pdfoutput>0 \let\MPLIBtoPDF\pdfliteral \else \def\MPLIBtoPDF#1{\special{pdf:literal direct #1}} % not ok yet \fi %D Text items have a special handler: \def\MPLIBtextext#1#2#3#4#5% {\begingroup \setbox\mplibscratchbox\hbox {\font\temp=#1 at #2bp% \temp #3}% \setbox\mplibscratchbox\hbox {\hskip#4 bp% \raise#5 bp% \box\mplibscratchbox}% \wd\mplibscratchbox0pt% \ht\mplibscratchbox0pt% \dp\mplibscratchbox0pt% \box\mplibscratchbox \endgroup} \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-preprocessor.tex0000644000175000017500000000062511754241457030462 0ustar norbertnorbert%D \module %D [ file=luatex-preprocessor, %D version=2010.12.02, %D title=\LUATEX\ Support Macros, %D subtitle=Generic Preprocessor, %D author=Hans Hagen, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] \directlua{dofile(kpse.find_file('luatex-preprocessor.lua'))} \def\inputpreprocessed#1% {\directlua{commands.inputpreprocessed("#1")}} \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-fonts-def.lua0000644000175000017500000000733211754241457027604 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-font-def'] = { version = 1.001, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local fonts = fonts -- A bit of tuning for definitions. fonts.constructors.namemode = "specification" -- somehow latex needs this (changed name!) => will change into an overload -- tricky: we sort of bypass the parser and directly feed all into -- the sub parser function fonts.definers.getspecification(str) return "", str, "", ":", str end -- the generic name parser (different from context!) local list = { } local function issome () list.lookup = 'name' end -- xetex mode prefers name (not in context!) local function isfile () list.lookup = 'file' end local function isname () list.lookup = 'name' end local function thename(s) list.name = s end local function issub (v) list.sub = v end local function iscrap (s) list.crap = string.lower(s) end local function iskey (k,v) list[k] = v end local function istrue (s) list[s] = true end local function isfalse(s) list[s] = false end local P, S, R, C = lpeg.P, lpeg.S, lpeg.R, lpeg.C local spaces = P(" ")^0 local namespec = (1-S("/:("))^0 -- was: (1-S("/: ("))^0 local crapspec = spaces * P("/") * (((1-P(":"))^0)/iscrap) * spaces local filename_1 = P("file:")/isfile * (namespec/thename) local filename_2 = P("[") * P(true)/isname * (((1-P("]"))^0)/thename) * P("]") local fontname_1 = P("name:")/isname * (namespec/thename) local fontname_2 = P(true)/issome * (namespec/thename) local sometext = (R("az","AZ","09") + S("+-."))^1 local truevalue = P("+") * spaces * (sometext/istrue) local falsevalue = P("-") * spaces * (sometext/isfalse) local keyvalue = (C(sometext) * spaces * P("=") * spaces * C(sometext))/iskey local somevalue = sometext/istrue local subvalue = P("(") * (C(P(1-S("()"))^1)/issub) * P(")") -- for Kim local option = spaces * (keyvalue + falsevalue + truevalue + somevalue) * spaces local options = P(":") * spaces * (P(";")^0 * option)^0 local pattern = (filename_1 + filename_2 + fontname_1 + fontname_2) * subvalue^0 * crapspec^0 * options^0 local function colonized(specification) -- xetex mode list = { } lpeg.match(pattern,specification.specification) list.crap = nil -- style not supported, maybe some day if list.name then specification.name = list.name list.name = nil end if list.lookup then specification.lookup = list.lookup list.lookup = nil end if list.sub then specification.sub = list.sub list.sub = nil end specification.features.normal = fonts.handlers.otf.features.normalize(list) return specification end fonts.definers.registersplit(":",colonized,"cryptic") fonts.definers.registersplit("", colonized,"more cryptic") -- catches \font\text=[names] function fonts.definers.applypostprocessors(tfmdata) local postprocessors = tfmdata.postprocessors if postprocessors then for i=1,#postprocessors do local extrahash = postprocessors[i](tfmdata) -- after scaling etc if type(extrahash) == "string" and extrahash ~= "" then -- e.g. a reencoding needs this extrahash = string.gsub(lower(extrahash),"[^a-z]","-") tfmdata.properties.fullname = format("%s-%s",tfmdata.properties.fullname,extrahash) end end end return tfmdata end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-basics-gen.lua0000644000175000017500000002155312161703335027722 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-basics-gen'] = { version = 1.100, comment = "companion to luatex-*.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if context then texio.write_nl("fatal error: this module is not for context") os.exit() end local dummyfunction = function() end local dummyreporter = function(c) return function(...) (texio.reporter or texio.write_nl)(c .. " : " .. string.formatters(...)) end end statistics = { register = dummyfunction, starttiming = dummyfunction, stoptiming = dummyfunction, elapsedtime = nil, } directives = { register = dummyfunction, enable = dummyfunction, disable = dummyfunction, } trackers = { register = dummyfunction, enable = dummyfunction, disable = dummyfunction, } experiments = { register = dummyfunction, enable = dummyfunction, disable = dummyfunction, } storage = { -- probably no longer needed register = dummyfunction, shared = { }, } logs = { new = dummyreporter, reporter = dummyreporter, messenger = dummyreporter, report = dummyfunction, } callbacks = { register = function(n,f) return callback.register(n,f) end, } utilities = { storage = { allocate = function(t) return t or { } end, mark = function(t) return t or { } end, }, } characters = characters or { data = { } } -- we need to cheat a bit here texconfig.kpse_init = true resolvers = resolvers or { } -- no fancy file helpers used local remapper = { otf = "opentype fonts", ttf = "truetype fonts", ttc = "truetype fonts", dfont = "truetype fonts", -- "truetype dictionary", cid = "cid maps", cidmap = "cid maps", fea = "font feature files", pfa = "type1 fonts", -- this is for Khaled, in ConTeXt we don't use this! pfb = "type1 fonts", -- this is for Khaled, in ConTeXt we don't use this! } function resolvers.findfile(name,fileformat) name = string.gsub(name,"\\","/") if not fileformat or fileformat == "" then fileformat = file.suffix(name) if fileformat == "" then fileformat = "tex" end end fileformat = string.lower(fileformat) fileformat = remapper[fileformat] or fileformat local found = kpse.find_file(name,fileformat) if not found or found == "" then found = kpse.find_file(name,"other text files") end return found end -- function resolvers.findbinfile(name,fileformat) -- if not fileformat or fileformat == "" then -- fileformat = file.suffix(name) -- end -- return resolvers.findfile(name,(fileformat and remapper[fileformat]) or fileformat) -- end resolvers.findbinfile = resolvers.findfile function resolvers.resolve(s) return s end function resolvers.unresolve(s) return s end -- Caches ... I will make a real stupid version some day when I'm in the -- mood. After all, the generic code does not need the more advanced -- ConTeXt features. Cached data is not shared between ConTeXt and other -- usage as I don't want any dependency at all. Also, ConTeXt might have -- different needs and tricks added. --~ containers.usecache = true caches = { } local writable = nil local readables = { } local usingjit = jit if not caches.namespace or caches.namespace == "" or caches.namespace == "context" then caches.namespace = 'generic' end do -- standard context tree setup local cachepaths = kpse.expand_var('$TEXMFCACHE') or "" -- quite like tex live or so if cachepaths == "" then cachepaths = kpse.expand_var('$TEXMFVAR') or "" end -- this also happened to be used if cachepaths == "" then cachepaths = kpse.expand_var('$VARTEXMF') or "" end -- and this is a last resort if cachepaths == "" then cachepaths = "." end cachepaths = string.split(cachepaths,os.type == "windows" and ";" or ":") for i=1,#cachepaths do local cachepath = cachepaths[i] if not lfs.isdir(cachepath) then lfs.mkdirs(cachepath) -- needed for texlive and latex if lfs.isdir(cachepath) then texio.write(string.format("(created cache path: %s)",cachepath)) end end if file.is_writable(cachepath) then writable = file.join(cachepath,"luatex-cache") lfs.mkdir(writable) writable = file.join(writable,caches.namespace) lfs.mkdir(writable) break end end for i=1,#cachepaths do if file.is_readable(cachepaths[i]) then readables[#readables+1] = file.join(cachepaths[i],"luatex-cache",caches.namespace) end end if not writable then texio.write_nl("quiting: fix your writable cache path") os.exit() elseif #readables == 0 then texio.write_nl("quiting: fix your readable cache path") os.exit() elseif #readables == 1 and readables[1] == writable then texio.write(string.format("(using cache: %s)",writable)) else texio.write(string.format("(using write cache: %s)",writable)) texio.write(string.format("(using read cache: %s)",table.concat(readables, " "))) end end function caches.getwritablepath(category,subcategory) local path = file.join(writable,category) lfs.mkdir(path) path = file.join(path,subcategory) lfs.mkdir(path) return path end function caches.getreadablepaths(category,subcategory) local t = { } for i=1,#readables do t[i] = file.join(readables[i],category,subcategory) end return t end local function makefullname(path,name) if path and path ~= "" then return file.addsuffix(file.join(path,name),"lua"), file.addsuffix(file.join(path,name),usingjit and "lub" or "luc") end end function caches.is_writable(path,name) local fullname = makefullname(path,name) return fullname and file.is_writable(fullname) end function caches.loaddata(paths,name) for i=1,#paths do local data = false local luaname, lucname = makefullname(paths[i],name) if lucname and lfs.isfile(lucname) then -- maybe also check for size texio.write(string.format("(load luc: %s)",lucname)) data = loadfile(lucname) if data then data = data() end if data then return data else texio.write(string.format("(loading failed: %s)",lucname)) end end if luaname and lfs.isfile(luaname) then texio.write(string.format("(load lua: %s)",luaname)) data = loadfile(luaname) if data then data = data() end if data then return data end end end end function caches.savedata(path,name,data) local luaname, lucname = makefullname(path,name) if luaname then texio.write(string.format("(save: %s)",luaname)) table.tofile(luaname,data,true,{ reduce = true }) if lucname and type(caches.compile) == "function" then os.remove(lucname) -- better be safe texio.write(string.format("(save: %s)",lucname)) caches.compile(data,luaname,lucname) end end end -- According to KH os.execute is not permitted in plain/latex so there is -- no reason to use the normal context way. So the method here is slightly -- different from the one we have in context. We also use different suffixes -- as we don't want any clashes (sharing cache files is not that handy as -- context moves on faster.) -- -- Beware: serialization might fail on large files (so maybe we should pcall -- this) in which case one should limit the method to luac and enable support -- for execution. -- function caches.compile(data,luaname,lucname) -- local d = io.loaddata(luaname) -- if not d or d == "" then -- d = table.serialize(data,true) -- slow -- end -- if d and d ~= "" then -- local f = io.open(lucname,'w') -- if f then -- local s = loadstring(d) -- if s then -- f:write(string.dump(s,true)) -- end -- f:close() -- end -- end -- end function caches.compile(data,luaname,lucname) local d = io.loaddata(luaname) if not d or d == "" then d = table.serialize(data,true) -- slow end if d and d ~= "" then local f = io.open(lucname,'wb') if f then local s = loadstring(d) if s then f:write(string.dump(s,true)) end f:close() end end end -- function table.setmetatableindex(t,f) setmetatable(t,{ __index = f }) end context-2013.05.28.20130704/texmf-dist/tex/generic/context/luatex/luatex-languages.lua0000644000175000017500000000317012130411274027642 0ustar norbertnorbertif not modules then modules = { } end modules ['luatex-languages'] = { version = 1.001, comment = "companion to luatex-languages.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We borrow from ConTeXt. languages = languages or { } local loaded = { } function languages.loadpatterns(tag) if not loaded[tag] then loaded[tag] = 0 local filename = kpse.find_file("lang-" .. tag .. ".lua") if filename and filename == "" then print("") else local whatever = loadfile(filename) if type(whatever) == "function" then whatever = whatever() if type(whatever) == "table" then local characters = whatever.patterns.characters or "" local patterns = whatever.patterns.data or "" local exceptions = whatever.exceptions.data or "" local language = lang.new() for b in string.utfvalues(characters) do tex.setlccode(b,b) end lang.patterns(language, patterns) lang.hyphenation(language, exceptions) loaded[tag] = lang.id(language) else print("") end else print("") end end end return loaded[tag] end context-2013.05.28.20130704/texmf-dist/tex/generic/context/ppchtex/0000755000175000017500000000000012162137705024052 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/generic/context/ppchtex/ppchtex.noc0000644000175000017500000001510411754241457026235 0ustar norbertnorbert%D \module %D [ file=ppchtex (m-chemie), %D version=1997.03.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PPCHTEX\ (Plain Pictex Context cHemie \TEX), %D author=Hans Hagen, %D date=\huidigedatum, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}, %D suggestions={Tobias Burnus, Dirk Kuypers \& Ton Otten}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See licen-en.pdf for %C details. %D This module facilitates the use of \PPCHTEX\ in macro %D packages other than \CONTEXT. One of the features of %D \CONTEXT\ is that the user interface can be in any %D language. This language is defined at loading time. %D %D This module is indeed a surrogate one and is only a poor %D man's alternative to the more extensive \type{mult-***} %D modules of \CONTEXT. The extra overhead in terms of macros %D and functionality that these modules offer is only useful %D in \CONTEXT. %D %D Two interfaces are supported here, but others can easily be %D defined. This module expects the general system macros to be %D loaded as wel as a interface switch \type{\ifalternativeinterface} %D to be set. %D First we load some auxiliary macro's: \input supp-mis.mkii \let\writestatus\undefined \input syst-gen.mkii \input syst-fnt.mkii %D after which we can go on with: \unprotect %D 0 = english %D 1 = dutch %D 2 = german \ifx\interfacenumber\undefined \chardef\interfacenumber=0 \fi \def\definesystemvariable #1 % {\setvalue{??#1}{@@#1}} \def\definesystemconstant #1 % {\setvalue{s!#1}{#1}} \def\definevariable #1 #2 #3 % en nl de {\ifcase\interfacenumber \setvalue{v!#1}{#1} \or \setvalue{v!#1}{#2} \or \setvalue{v!#1}{#3} \fi} \def\defineconstant #1 #2 #3 % en nl de {\ifcase\interfacenumber \setvalue{c!#1}{#1} \setvalue{c!#2}{#1} \or \setvalue{c!#1}{#1} \or \setvalue{c!#1}{#1} \setvalue{c!#3}{#1} \fi} \def\definecommand #1 #2 #3 % {\ifcase\interfacenumber % core commands are english \or \doifnot{#1}{#2}{\setvalue{#2}{\getvalue{#1}}} \or \doifnot{#1}{#3}{\setvalue{#3}{\getvalue{#1}}} \fi} \long\def\startcommands#1\stopcommands {} \def\dosetvalue#1#2#3% {\p!doifundefined{\c!prefix!#2}% \let\donottest=\doprocesstest \@EA\def\csname#1#2\endcsname{#3}% \else \let\donottest=\doprocesstest \@EA\def\csname#1\csname\c!prefix!#2\endcsname\endcsname{#3}% \fi} \def\dosetevalue#1#2#3% {\p!doifundefined{\c!prefix!#2}% \let\donottest=\doprocesstest \@EA\edef\csname#1#2\endcsname{#3}% \else \let\donottest=\doprocesstest \@EA\edef\csname#1\csname\c!prefix!#2\endcsname\endcsname{#3}% \fi} \def\docopyvalue#1#2#3% {\p!doifundefined{\c!prefix!#3}% \let\donottest=\doprocesstest \@EA\def\csname#1#3\endcsname% {\csname#2#3\endcsname}% \else \let\donottest=\doprocesstest \@EA\def\csname#1\csname\c!prefix!#3\endcsname\endcsname% {\csname#2\csname\c!prefix!#3\endcsname\endcsname}% \fi} \def\doresetvalue#1#2% {\dosetvalue{#1}{#2}{}} \def\dogetvalue#1#2% {\csname#1\csname\c!prefix!#2\endcsname\endcsname} \defineconstant axis assenstelsel achsen \defineconstant top boven oben \defineconstant width breedte breite \defineconstant size formaat groesse \defineconstant number getal nummer \defineconstant height hoogte hoehe \defineconstant factor factor faktor \defineconstant frame kader rahmen %defineconstant framecolor kaderkleur rahmenfarbe \defineconstant color kleur farbe \defineconstant bodyfont korps fliesstext \defineconstant style letter schriftstil \defineconstant rulethickness lijndikte liniendicke \defineconstant rulecolor lijnkleur linienfarbe \defineconstant left links links \defineconstant offset offset offset \defineconstant bottom onder unten \defineconstant option optie option \defineconstant location plaats platz \defineconstant right rechts rechts \defineconstant resolution resolutie aufloesung \defineconstant scale schaal format \defineconstant state status status \defineconstant text tekst text \defineconstant textcolor tekstkleur tekstfarbe \defineconstant textsize tekstformaat textgroesse \defineconstant alternative variant alternative \defineconstant x x x \defineconstant y y y \definevariable on aan an \definevariable big groot gross \definevariable intext intekst imtext \definevariable small klein klein \definevariable medium middel mittel \definevariable fit passend passend \definevariable start start start \definevariable stop stop stop \definevariable test test test \definevariable off uit aus \definecommand definechemical definieerchemie definierechemie \definecommand setupchemical stelchemiein stellechemieein \definecommand chemical chemie chemie \definecommand tochemical naarchemie zurchemie \definecommand startchemical startchemie startchemie \definecommand stopchemical stopchemie stopchemie \definecommand toptext boventekst textueber \definecommand bottext ondertekst textunter \definecommand midtext middentekst textmitte \protect %D After those definitions we actually load \PPCHTEX: \input ppchtex.mkii %D We also change some setup values. Let's hope that the next %D setups forever suits \LATEX. \unprotect \ifx\bodyfontsize\undefined \ifx\f@size\undefined \ifx\@ptsize\undefined \setupchemical[\c!bodyfont=11pt] \else \setupchemical[\c!bodyfont=1\@ptsize pt] \fi \else \setupchemical[\c!bodyfont=\f@size pt] \fi \else \setupchemical[\c!bodyfont=\bodyfontsize] \fi \ifx\mathrm\undefined \setupchemical[\c!style=\rm] \else \setupchemical[\c!style=\mathrm] \fi \ifx\outputresolution\undefined \setupchemical[\c!resolution=300] \else \setupchemical[\c!resolution=\outputresolution] \fi \let\unexpanded\normalunexpanded \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/ppchtex/m-ch-nl.tex0000644000175000017500000000027211754241457026036 0ustar norbertnorbert% name : PPCHTEX / english interface % version : 1997.03.05 % author : J. Hagen % copyright : J. Hagen, A.F. Otten \chardef\interfacenumber=1 \input ppchtex.noc \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/ppchtex/m-ch-de.tex0000644000175000017500000000027111754241457026014 0ustar norbertnorbert% name : PPCHTEX / german interface % version : 1997.03.05 % author : J. Hagen % copyright : J. Hagen, A.F. Otten \chardef\interfacenumber=2 \input ppchtex.noc \endinput context-2013.05.28.20130704/texmf-dist/tex/generic/context/ppchtex/m-ch-en.tex0000644000175000017500000000027011754241457026025 0ustar norbertnorbert% name : PPCHTEX / english interface % version : 1997.03.05 % author : J. Hagen % copyright : J. Hagen, A.F. Otten \chardef\interfacenumber=0 \input ppchtex.noc \endinput context-2013.05.28.20130704/texmf-dist/tex/context/0000755000175000017500000000000012165205647020767 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/user/0000755000175000017500000000000012162140023021724 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/user/cont-sys.rme0000644000175000017500000001105711571377075024242 0ustar norbertnorbert%D \module %D [ file=cont-sys, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=System Specific Setups, %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 Beware, this is a MkII specific file. In MkIV we only load %D cont-sys.mkiv but in MkII we load the first found of %D cont-sys.mkii, cont-sys.tex, cont-sys.rme. \unprotect % Speed up typescript loading, but at the cost of much memory: \preloadtypescripts % If you want another default font: % % \let\preloadfonts\relax % \usetypescript[palatino][\defaultencoding] % \setupbodyfont[palatino,rm,12pt] % % Please make sure that this defines rm, ss, tt and mm. % Occasionally we will support both A4 and letter in % styles. If you want letter size paper to be the default, % uncomment: % % \enablemode[\systemmodeprefix letter] % % If you always want to default to letter, you may uncomment % the following line, but beware: it makes your documents less % portable: % % \setuppapersize[letter][letter] % If you want some extras, just uncomment the following % line: % % \usemodule[plus] % experimental code % % Here you can take care of overloading some (style) % defaults. What goes here, depends on your local system. % The following commands sets the default font encoding: % % \setupencoding [\s!default=texnansi] % % or: \setupencoding [\s!default=ec] % If you want the default berry names: % % \usetypescript [berry] [\defaultencoding] % % or, if you also want other encodings: \usetypescript [berry] [ec,t5,8r] % texnansi is never present % If you run into missing font metrics kind of problems, % you may want to uncomment: % % \usetypescript[adobekb] [\defaultencoding] % You can let \CONTEXT\ load the map files for \PDFTEX. \autoloadmapfilestrue % (1) you can prevent loading with: % % \preloadmapfile[<...somename...>.map] % % (2) otherwise, use this if you have a fast machine % % \resetmapfiles \usetypescript [map] [base] [all] % % (3) or this if it's a slow one: \resetmapfiles % more recent versions of pdftex support map loading on each page \donefalse \ifx\pdftexversion\undefined \else \ifnum\number\pdftexversion>119 \donetrue \fi \fi \ifdone \loadmapfile[original-base.map] \loadmapfile[original-ams-base.map] \loadmapfile[original-ams-euler.map] \loadmapfile[original-public-lm.map] \else \loadmapfile[original-base.map] \loadmapfile[texnansi-base.map] \loadmapfile[ec-base.map] \loadmapfile[qx-base.map] \loadmapfile[t5-base.map] %loadmapfile[il2-base.map] %loadmapfile[pl0-base.map] \loadmapfile[8r-base.map] \loadmapfile[original-ams-base.map] \loadmapfile[original-ams-euler.map] \loadmapfile[original-public-lm.map] %loadmapfile[texnansi-public-lm.map] %loadmapfile[ec-public-lm.map] %loadmapfile[qx-public-lm.map] %loadmapfile[t5-public-lm.map] %loadmapfile[pl0-public-lm.map] %loadmapfile[il2-public-lm.map] \fi % When you have your own fonts installed, you may want to predefine: % % \usetypescriptfile[type-buy] % Some styles default to Lucida Bright. You can overload % Lucida by Times cum suis. Watch out, the pos collection % is not scaled relatively. % % \definetypescriptsynonym [lbr] [pos] % Compensate for missing files: % % \definefontsynonym [gbhei] [gbsong] % \definefontsynonym [gbheisl] [gbsong] % \definefontsynonym [gbheisl] [gbsong] % Setting up a global figure path % % \setupexternalfigures [\c!directory={e:/fig/eps,t:/mine/figs}] % % Loading a specific special driver: % % \setupoutput [dviwindo] % Changing language defaults % % \setuplanguage % [nl] % [\c!leftquote=\upperleftsinglesixquote, % \c!leftquotation=\upperleftdoublesixquote] % Loading local preferences, for example % % \input prag-gen % company styles % \input prag-log % more company styles % % Enabling run time \METAPOST\ (also enable \write18 in % texmf.cnf): \runMPgraphicstrue \runMPTEXgraphicstrue % This saves some runtime, but needs a format, which you can % make with 'texexec --make --alone metafun'. Make sure that % the mem files are moved to the used web2c path (locate with % 'kpsewhich plain.mem'). \useMETAFUNformattrue % This can be a way to get things working on system with % name clashes. (Some \TeX's tend do search system wide.) \protectbufferstrue % You can enable a more extensive figure searching, but % normally this is not really needed and even annoying. % % \runutilityfiletrue % So far. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/colors/0000755000175000017500000000000012162140024022250 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/colors/icc/0000755000175000017500000000000012162140024023006 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/colors/icc/context/0000755000175000017500000000000012162140024024472 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/colors/icc/context/colorprofiles.xml0000644000175000017500000003463312130411274030112 0ustar norbertnorbert default default_cmyk.icc CMYK prtr Artifex PS CMYK Profile de955d740998369ea1051a4e3e84eb90 42000000 default default_gray.icc GRAY scnr default default_rgb.icc RGB mntr default lab.icc Lab spac default ps_cmyk.icc CMYK prtr U.S. Web Coated (SWOP) v2 79d7e984ea3ac74eed7cc92bf6b22a0d 21000000 default ps_gray.icc GRAY mntr default ps_rgb.icc RGB mntr default sgray.icc GRAY scnr default srgb.icc RGB mntr srgb.icc RGB mntr Custom sRGB IEC61966-2.1 1d3fda2edb4a89ab60a23c5f7c7d81dd 21000000 http://www.color.org Probev1_ICCv2.icc CMYK prtr Custom Probev1_ICCv2.icc 7d8357d5cb86990465b3d7d4ef359404 20000000 http://www.color.org Probev1_ICCv4.icc CMYK prtr Custom Probev1_ICCv4.icc 915f373c10daf2e295c0e707d3beb856 40000000 http://www.color.org Probe2_ICCv4 CMYK prtr Custom Probev2_ICCv4.icc cd8ccdb2b8ee902100cfc45a75b84579 40000000 >http://www.color.org CoatedFOGRA39.icc CMYK prtr FOGRA39 Coated FOGRA39 (ISO 12647-2:2004) 74ff62f330bf0dbe4495b5720542d511 21000000 http://www.color.org GRACoL2006_Coated1v2.icc CMYK prtr CGATS TR 006 GRACoL2006_Coated1v2.icc cc7a6196271b13dbae4622aa1fa0fca9 20000000 http://www.color.org ISOcoated_v2_300_eci.icc CMYK prtr FOGRA39 ISO Coated v2 300% (ECI) e14f5db955711d914d877df35ad7a1b5 24000000 http://www.color.org Offset printing, according to ISO 12647-2:2004/Amd 1, OFCOM, paper type 1 or 2 = coated art, 115 g/m2, tone value increase curves A (CMY) and B (K) ISOcoated_v2_eci.icc CMYK prtr FOGRA39 ISO Coated v2 (ECI) bda07efcacf5377e91edacb0454ea7e5 2400000 http://www.color.org Offset printing, according to ISO 12647-2:2004/Amd 1, OFCOM, paper type 1 or 2 = coated art, 115 g/m2, tone value increase curves A (CMY) and B (K) ISOnewspaper26v4.icc CMYK prtr IFRA26 ISOnewspaper26v4 bca21a6afa3a4b5cef9ca8e91565c1b7 2400000 http://www.color.org Newspaper Coldset-Offset printing according to ISO/DIS 12647-3:2004, standard newsprint 45g/m2, screen ruling 40 l/cm, see readme ISOnewspaper26v4_gr.icc CMYK prtr IFRA26 ISOnewspaper26v4_gr 45dabde250dbbc2b4ab1ddaab1380892 2400000 http://www.color.org Newspaper Coldset-Offset printing according to ISO/DIS 12647-3:2004, standard newsprint 45g/m2, screen ruling 40 l/cm, see readme ISOuncoated.icc CMYK prtr FOGRA29 ISO Uncoated c62d711cf39488a1fc60e8be18a9d6d7 2000000 http://www.color.org Offset printing according to ISO/DIS 12647-2:2003, OFCOM, paper type 4 = white, uncoated, 120 g/m2, screen ruling 60 cm-1, positive-acting plates, see readme ISOuncoatedyellowish.icc CMYK prtr FOGRA30 ISO Uncoated Yellowish 06db2a1b6d1eff0a49aaf350888a170e 2400000 http://www.color.org Offset printing according to ISO/DIS 12647-2:2004, OFCOM, paper type 5 = slightly yellowish, uncoated, 120 g/m2, screen ruling 60 cm-1, positive-acting plates, see readme ISOwebcoated.icc CMYK prtr FOGRA28 ISO Web Coated 0bf2ede138b0272421b629b6c8c4deaf 2000000 http://www.color.org Offset printing according to ISO/DIS 12647-2:2003, OFCOM, paper type 3 = low weight coated web offset, 60 g/m2, screen ruling 60 cm-1, positive-acting plates, see readme JapanColor2001Coated.icc CMYK prtr JC200103 Japan Color 2001 Coated 4cb167869183b59bbad20fb90ccf3e0c 2100000 http://www.color.org JapanColor2002Newspaper.icc CMYK prtr JCN2002 Japan Color 2002 Newspaper fa5be8d5b4eb756bf1399afc2cda7d1c 2100000 http://www.color.org JapanWebCoated.icc CMYK prtr JCW2003 Japan Web Coated (Ad) f8607e551233cefdda26d7d6baaa2a4f 2100000 http://www.color.org SNAP-2007.icc CMYK prtr CGATS TR 002 SNAP 2007 8d48c9b10937672a0690b724e0527247 4100000 http://www.color.org SWOP2006_Coated3v2.icc CMYK prtr CGATS TR 003 SWOP2006_Coated3v2.icc 7fbad4c0ae1cb7195c34bfc20e623437 2000000 http://www.color.org SWOP2006_Coated5v2.icc CMYK prtr CGATS TR 005 SWOP2006_Coated5v2.icc 34f7c3c809b926b173ee54e13d655bee 2000000 http://www.color.org UncoatedFOGRA29.icc CMYK prtr FOGRA29 Uncoated FOGRA29 (ISO 12647-2:2004) e3d8676356f2709a7b120036b7ada996 2100000 http://www.color.org WebCoatedFOGRA28.icc CMYK prtr FOGRA28 Web Coated FOGRA28 (ISO 12647-2:2004) 6e3b77d09d3613bc52ba7f63048d4638 2100000 http://www.color.org PSR_LWC_PLUS_V2_PT.icc CMYK prtr Custom PSR_LWC_PLUS_V2_PT 2373b50219e8df70c70f2e0e798c2e38 2400000 http://www.eci.org Gravure printing according to ISO 12647-4, paper type LWC (light weight coated) plus PSR_LWC_STD_V2_PT.icc CMYK prtr Custom PSR_LWC_STD_V2_PT 0964b3ca5390dfaf7723527bbb7cec37 2400000 http://www.eci.org Gravure printing according to ISO 12647-4, paper type LWC (light weight coated) standard PSR_SC_PLUS_V2_PT.icc CMYK prtr Custom PSR_SC_PLUS_V2_PT aa767f70696059557917c050d3ebc6ba 2400000 http://www.eci.org Gravure printing according to ISO 12647-4, paper type SC (super-calendered) plus PSR_SC_STD_V2_PT.icc CMYK prtr Custom PSR_SC_STD_V2_PT 6d978234223b29cde94dd3a5c3624504 2400000 http://www.eci.org Gravure printing according to ISO 12647-4, paper type SC (super-calendered) standard PSRgravureMF.icc CMYK prtr Custom PSRgravureMF 728f70371f82e930637e60c760876a3d 2000000 http://www.eci.org Gravure printing according to ISO 12647-4, paper type MF (machine finished), 55 g/m2 context-2013.05.28.20130704/texmf-dist/tex/context/colors/icc/context/colorprofiles.lua0000644000175000017500000000066412130411274030070 0ustar norbertnorbert-- This is just an example. We support both an xml format as well -- as lua tables. return { { filename = "CoatedFOGRA39.icc", id = "FOGRA39", info = "Coated FOGRA39 (ISO 12647-2:2004)", checksum = "74ff62f330bf0dbe4495b5720542d511", url = "http://www.color.org", outputcondition = "", version = "21000000", } } context-2013.05.28.20130704/texmf-dist/tex/context/foxet/0000755000175000017500000000000012162140022022072 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0603.fo0000644000175000017500000000203210361565011023417 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0612.fo0000644000175000017500000000125610361565011023426 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1003.fo0000644000175000017500000000225510361565011023421 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0642.fo0000644000175000017500000000160010361565011023422 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0601.fo0000644000175000017500000000207310361565011023422 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0602.fo0000644000175000017500000000204310361565011023420 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0651.fo0000644000175000017500000000204110361565011023422 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0301.fo0000644000175000017500000000646310361565011023426 0ustar norbertnorbert beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter beforeafter context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0902.fo0000644000175000017500000000247010361565011023427 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0644.fo0000644000175000017500000000160010361565011023424 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0641.fo0000644000175000017500000000262210361565011023426 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1104.fo0000644000175000017500000000172310361565011023422 0ustar norbertnorbert X context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0650.fo0000644000175000017500000000204110361565011023421 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1101.fo0000644000175000017500000000526410361565011023423 0ustar norbertnorbert [a] [b] [bb] [a] context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0643.fo0000644000175000017500000000160610361565011023431 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0611.fo0000644000175000017500000000121310361565011023416 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0201.fo0000644000175000017500000000122510361565011023414 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1103.fo0000644000175000017500000001006710361565011023422 0ustar norbertnorbert [a] [a] [a] [a] [a] [a] [a] [a] context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fe-zapf.xml0000644000175000017500000000132510361565011024155 0ustar norbertnorbert Coming back to the use of typefaces in electronic publishing: many of the new typographers receive their knowledge and information about the rules of typography from books, from computer magazines or the instruction manuals which they get with the purchase of a PC or software. There is not so much basic instruction, as of now, as there was in the old days, showing the differences between good and bad typographic design. Many people are just fascinated by their PC's tricks, and think that a widelypraised program, called up on the screen, will make everything automatic from now on. context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1201.fo0000644000175000017500000000460410361565011023421 0ustar norbertnorbert test S S S F F F A A A R R R test Q Q Q Q context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0613.fo0000644000175000017500000000126110361565011023423 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0901.fo0000644000175000017500000000572710361565011023436 0ustar norbertnorbert times helvetica courier times helvetica courier times helvetica courier times helvetica courier large large large x-large x-large x-large xx-large xx-large xx-large times helvetica courier context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0102.fo0000644000175000017500000000142010361565011023411 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1102.fo0000644000175000017500000001444610361565011023426 0ustar norbertnorbert [a] [a] [a] [a] context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0801.fo0000644000175000017500000000457610361565011023436 0ustar norbertnorbert digits: characters: romannumerals: complex format: no format: digits: characters: romannumerals: complex format: no format: context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0621.fo0000644000175000017500000001353610361565011023432 0ustar norbertnorbert setting up simple page master 'any' setting up simple page master 'first-page' setting up simple page master 'left-page' setting up simple page master 'right-page' setting up simple page master 'blank-page' setting up simple page master 'odd' setting up simple page master 'even' setting up simple page master 'rest' setting up page sequence master 'demo' setting up page sequence master 'omed' starting page sequence 'any' starting page sequence 'demo' starting page sequence 'omed' context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0101.fo0000644000175000017500000000071210361565011023413 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1001.fo0000644000175000017500000001030610361565011023413 0ustar norbertnorbert a test line d 10pt a test line d 5pt a test line d 4pt a test line d d d a test line r d d a test line d r d a test line r r d a test line d d r a test line r d r a test line d r r a test line r r r a test line d r r force a test line context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fe-bryson.xml0000644000175000017500000000132510361565011024531 0ustar norbertnorbert Imagine trying to live in a world dominated by dihydrogen oxide, a compound that has no taste or smell and is so viable in its properties that it is generally benign but at other times swiftly lethal. Depending on its state, it can scald you or freeze you. In the presence of certain organic molecules it can form carbonic acids so nasty that they can strip the leaves from trees and eat the faces off statuary. In bulk, when agitated, it can strike with a fury that no human edifice could withstand. Even for those who have learned to live with it, it is often murderous substance. We call it water. context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0701.fo0000644000175000017500000000352710361565011023430 0ustar norbertnorbert Test 1 Test 2 Test 3 Test 4 Test 5 Test 6 Test 7 context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0604.fo0000644000175000017500000000205310361565011023423 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fe-ward.xml0000644000175000017500000000064410361565011024155 0ustar norbertnorbert The Earth, as a habitat for animal life, is in old age and has a fatal illness. Several, in fact. It would be happening whether humans had ever evolved or not. But our presence is like the effect of an old-age patient who smokes many packs of cigarettes per day - and we humans are the cigarettes. context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1002.fo0000644000175000017500000000214510361565011023416 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-1004.fo0000644000175000017500000000260610361565011023422 0ustar norbertnorbert beforeinbetweenafter beforeinbetweenafter beforeinbetweenafter beforeinbetweenafter beforeinbetweenafter context-2013.05.28.20130704/texmf-dist/tex/context/foxet/fo-0103.fo0000644000175000017500000000110210361565011023407 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/bib/0000755000175000017500000000000012162140023021502 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-num.tex0000644000175000017500000002631110536250244023746 0ustar norbertnorbert%D \module %D [ file=bibl-num, %D version=2006.07.01, %D title=Numeric bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \def\setuppublicationlayout[#1]#2% {\setvalue{@@pvdata#1}{#2\unskip\vadjust{\kern 6pt}}} \setupcite [author,year] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={--}, \c!left={[}, \c!right={]}] \def\withbrackets#1{[#1]~~} \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=num, \c!numbering=\v!yes, \c!numbercommand=\withbrackets, \c!autohang=\v!yes] \setuppublicationlist [\c!artauthor=\normalauthor, \c!editor=\normalauthor, \c!author=\normalauthor, \c!namesep={, }, \c!lastnamesep={ and }, \c!finalnamesep={ and }, \c!firstnamesep={ }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={ }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}, ] \def\maybeyear#1{} \def\etalchar#1{#1} %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } \setuppublicationlayout[article]{% \insertartauthors{}{\unskip. }{\insertthekey{}{. }{}}% \insertarttitle{\bgroup }{\egroup. }{}% \insertjournal{\bgroup \it}{\egroup} {\insertcrossref{In }{}{}}% \insertvolume {, } {\insertissue{(}{)}{}% \insertpages{:}{}{}% \insertpubyear{, }{}{}.} {\insertpages{, pages }{}{}% \insertpubyear{, }{}{}.}% \insertnote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, editor% \ifnum\getvalue{editor@num}> 1 s\fi.% \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook.% \global\editedbookfalse \insertvolume { Number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{.}{.}% }% \fi}% {}% \insertpublisher { }% {\insertedition{, }{ edition}{}% \insertpubyear{, }{.}{.}}% {\insertedition{, }{ edition}{}% \insertpubyear{, }{.}{.}}% \insertpages{ }{p.}{}% \insertnote{ }{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{. }{. }% }% \fi}% { }% \insertpublisher {}% {\insertedition{, }{ edition}{}% \insertpubyear{, }{. }{\unskip.}}% {\insertedition{, }{ edition}{}% \insertpubyear{, }{. }{\unskip.}}% \insertnote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{\unskip. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {}% {\insertedition{, }{ edition}{}% \insertpubyear{, }{. }{}}% {\insertedition{, }{ edition. }{}% \insertpubyear{, }{. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{\unskip. }{\insertthekey{}{. }{}}% \inserttitle {\bgroup \it } {\/\egroup \insertseries{ (}{)}{}. } {}% \insertorganization {}% {\insertcity {, }% {\insertedition {, } { edition\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}}% {\insertedition {, } { edition\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}}}% {\insertedition{, }{ edition\insertpubyear{, }{. }{. }}{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{\unskip. }{\insertthekey{}{\unskip. }{}}% \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {In \inserteditors{}% {\unskip, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ edition}{}% \insertpubyear{, }{. }{. }}% {\insertedition{, }{ edition}{}% \insertpubyear{, }{. }{}}% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{\unskip. }{}% \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {In \inserteditors{}% {\unskip, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, pages~} {\insertcity{, }{}{}% \insertpubyear{\unskip, }{. }{. }}% {\unskip \insertpubyear{\unskip, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{}{. }{}}% was {, }{. }{} }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{\unskip, editor% \ifnum\getvalue{editor@num}> 1 s\fi.% \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, pages~} {\insertcity {, } {\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}} {\unskip \insertcity {, } {\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{, }{. }{}}% }% {}% \insertnote{ }{.}{}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{\unskip. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Master's thesis, }% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertpages{, }{p.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{\unskip. }{}% \inserttitle{\bgroup\it }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{PhD thesis, }% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertpages{, }{p.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[misc]{% \insertauthors{}{\unskip. }{\insertthekey{}{. }{}}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}. }{}% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertnote{ }{.}{}% } \setuppublicationlayout[techreport]{% \insertauthors{}{\unskip. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{\insertvolume{ }{, }{, }}{Technical Report, }% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertpages{, }{p.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{\unskip. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {} {, \insertpubyear{}{.}{}} {\insertpubyear{}{.}{}}% \insertbibtype{ (}{)}{}% \insertnote{ }{.}{}% } \protectcontext-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-ssa.tex0000644000175000017500000003243010526734267023747 0ustar norbertnorbert%D \module %D [ file=bibl-apa, %D version=2004.7.16, %D title=APA bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater}, %D date=\currentdate, %D copyright={Public Domain}] %C %C (Slightly modified to SSA-like 2005.3.24, David Wooten) %C Donated to the public domain. Use at your own risk \unprotect \setupcite [author,year] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=authoryears, \c!numbering=\v!no, \c!autohang=\v!no] \setuppublicationlist [\c!width=24pt, \c!artauthor=\toggledauthor, %TH \c!editor=\toggledauthor, \c!author=\toggledauthor, \c!namesep={, }, \c!lastnamesep={ and }, \c!finalnamesep={ and }, \c!firstnamesep={, }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={, }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}, ] \def\maybeyear#1{#1} \def\etalchar#1{#1} %D \macros {invertedauthor,normalauthor,toggledauthor} %D %D These are redefinitions of the core versions. \def\invertedauthor#1#2#3#4#5% {\bibdoif{#2}{#2\bibalternative\c!vonsep}% \uppercased{#3}\bibalternative\c!surnamesep \bibdoif{#5}{#5\bibalternative\c!juniorsep}% \bibdoif{#1}{#1\unskip}} \def\normalauthor#1#2#3#4#5% {\bibdoif{#1}{#1}\bibdoif{#2}{#2 } \uppercased{#3}% \bibdoif{#5}{#5\unskip}} %TH %D The \type{\scratchcounter} is incremented by \specialbibinsert %D before each author/editor is typeset, so the only thing that needs %D doing is testing its value to decide which of the two `standard' %D author formatting macros to call. %D %D The \type{\normalauthor} definition above is a bit altered/stripped %D down, because the 'glue items' like \type{firstnamesep} got in the %D way. \def\toggledauthor#1#2#3#4#5% {\relax \ifnum \scratchcounter > 1 \normalauthor{#1}{#2}{#3}{#4}{#5}% \else \invertedauthor{#1}{#2}{#3}{#4}{#5}% \fi } %TH %D Below, each \type{\setuppublicationlayout} macro's body will %D start by setting a global toggle to true, that controls whether %D or not the next \type{\insertartauthors},\type{\insertauthors} %D or \type{\inserteditors} has to store it's contents for comparison. %D All three are instances of the generic macro \type{\specialbibinsert}. %D The net result of this trick is that the first typeset block of %D names will be saved, regardless of whether they are book authors, %D article authors, or editors. \newif\ifsetstoredauthor %D save the normal meaning, because it will be redefined \let\normalspecialbibinsert\specialbibinsert %D This is a typical call (use) of \type{\specialbibinsert}, for %D reference: %D \starttyping %D \specialbibinsert{author}{\author@num}{}{}{} %D \stoptyping \def\specialbibinsert#1#2#3#4#5% {\relax \ifsetstoredauthor \global\setstoredauthorfalse % RESET \putcurrentinallstuff{#1}{#2}% \ifx\allstuff\oldstuff % do nothing \else \normalspecialbibinsert{#1}{#2}{#3}{#4}{#5}% \fi \global\let\oldstuff\allstuff \else \normalspecialbibinsert{#1}{#2}{#3}{#4}{#5}% \fi} %D initialize \type{\oldstuff} \def\oldstuff{} %D \#1 = authors %D \#2 = \type{\author@num} \def\putcurrentinallstuff#1#2% {{\gdef\allstuff{}% \def\tempx##1##2##3##4##5% {\xdef\allstuff{\allstuff !!##1!##2!##3!##4!##5}}% \@EA\dorecurse\@EA{#2}% {\@EA\@EA\@EA\tempx \csname @@pb@#1\recurselevel\endcsname}% }} %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } \setuppublicationlayout[article]{% %TH all items below do this as well ... \global\setstoredauthortrue \insertartauthors{}{.}{\insertthekey{}{ }{}}\hfill\break% \insertpubyear{}{. }{\unskip.}% \insertarttitle{\bgroup ``}{\egroup'', }{ }% \insertjournal{\bgroup in \it}{\egroup} {\insertcrossref{in }{}{}}% \insertvolume {, } {\insertissue{(}{)}{}\insertpages{:}{.}{.}} {\insertpages{, pages }{.}{.}}% \insertnote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \global\setstoredauthortrue \insertauthors{}{.}{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}\hfill\break% \insertpubyear{}{. }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{. }{. }% }% \fi}% { }% \insertpublisher {}% {\insertedition{, }{ edition. }{}}% {\insertedition{, }{ edition. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[inbook]{% \global\setstoredauthortrue \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}\hfill\break% \insertpubyear{}{. }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{. }{. }% }% \fi}% { }% \insertpublisher {}% {\insertedition{, }{ edition. }{. }}% {\insertedition{, }{ edition. }{}}% \insertnote{ }{.}{}% } \setuppublicationlayout[booklet]{% \global\setstoredauthortrue \insertauthors{}{ }{\insertthekey{}{. }{}}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {}% {\insertedition{, }{ edition. }{. }}% {\insertedition{, }{ edition. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[manual]{% \global\setstoredauthortrue \insertauthors{}{ }{\insertthekey{}{. }{}}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup \it }{\/\egroup \insertseries{ (}{)}{}. }{}% \insertorganization {}% {\insertcity{, }% {\insertedition{, }{ edition. }{. }}% {\insertedition{, }{ edition. }{. }}}% {\insertedition{, }{ edition. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[incollection]{% \global\setstoredauthortrue \insertartauthors{}{ }{\insertthekey{}{. }{}}\hfill\break% \insertpubyear{}{. }{}% \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {In \inserteditors{}% {, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ edition. }{. }}% {\insertedition{, }{ edition. }{}}% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \global\setstoredauthortrue \insertauthors{}{ }{}\hfill\break% \insertpubyear{}{. }{}% \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {In \inserteditors{}% {, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, pages~} {\insertcity{, }{. }{. }} {\unskip. }% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{}{. }{}}% was {, }{. }{} }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \global\setstoredauthortrue \inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{ }{}}\hfill\break% \insertpubyear{}{. }{}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{\insertcity{, }{. }{. }} {\unskip\insertcity{, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{, }{. }{}}% }% {}% \insertnote{ }{.}{}% } \setuppublicationlayout[mastersthesis]{% \global\setstoredauthortrue \insertauthors{}{ }{}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Master's thesis, }% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[phdthesis]{% \global\setstoredauthortrue \insertauthors{}{ }{}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup\it }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{PhD thesis, }% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[misc]{% \global\setstoredauthortrue \insertauthors{}{ }{\insertthekey{}{. }{}}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}. }{}% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[techreport]{% \global\setstoredauthortrue \insertauthors{}{ }{}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{\insertvolume{ }{, }{, }}{Technical Report, }% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[unpublished]{% \global\setstoredauthortrue \insertauthors{}{ }{}\hfill\break% \insertpubyear{}{. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertbibtype{(}{)}{}% \insertnote{ }{.}{}% } \protectcontext-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-apa-de.tex0000644000175000017500000002377211376503616024315 0ustar norbertnorbert%D \module %D [ file=bibl-apa-de, %D version=2006.9.12, %D title=APA bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \setupcite [author,year] [\c!andtext={ und }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ und }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ und }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ und }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ und }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ und }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ und }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ und }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ und }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ und }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=authoryears, \c!numbering=\v!no, \c!autohang=\v!no] \setuppublicationlist [\c!width=24pt, \c!artauthor=\invertedshortauthor, \c!editor=\invertedshortauthor, \c!author=\invertedshortauthor, \c!namesep={, }, \c!lastnamesep={ und }, \c!finalnamesep={ und }, \c!firstnamesep={, }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={, }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}, ] \def\maybeyear#1{#1} \def\etalchar#1{#1} %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{Kapitel\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } \setuppublicationlayout[article]{% \insertartauthors{}{ }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{\unskip.}% \insertarttitle{\bgroup }{\egroup. }{}% \insertjournal{\bgroup \it}{\egroup} {\insertcrossref{In }{}{}}% \insertvolume {, } {\insertissue{(}{)}{}\insertpages{:}{.}{.}} {\insertpages{, Seiten }{.}{.}}% \insertnote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, Herausgeber% \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Nummer~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, Seiten }{. }{. }% \insertvolume{Band~}{ von~}{}% }% {}% {\insertvolume {, Band~}% {\insertseries { von~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, Seiten }{.}{.}% }% \fi}% {}% \insertpublisher { }% {\insertedition{, }{ Auflage.}{.}}% {\insertedition{, }{ Auflage.}{}}% \insertpages{ }{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{ }{\inserteditors{}{, Herausgeber% \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Nummer~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, Seiten }{. }{. }% \insertvolume{Band~}{ Von~}{}% }% {}% {\insertvolume {, Band~}% {\insertseries { von~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, Seiten }{. }{. }% }% \fi}% { }% \insertpublisher {}% {\insertedition{, }{ Auflage. }{. }}% {\insertedition{, }{ Auflage. }{}}% \insertnote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {}% {\insertedition{, }{ Auflage. }{. }}% {\insertedition{, }{ Auflage. }{}}% \insertpages{}{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup \it }{\/\egroup \insertseries{ (}{)}{}. }{}% \insertorganization {}% {\insertcity{, }% {\insertedition{, }{ Auflage. }{. }}% {\insertedition{, }{ Auflage. }{. }}}% {\insertedition{, }{ Auflage. }{}}% \insertpages{}{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {In \inserteditors{}% {, Herausgeber, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, Nummer }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, Seiten~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ Auflage. }{. }}% {\insertedition{, }{ Auflage. }{}}% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, Seiten~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {In \inserteditors{}% {, Herausgeber, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, Nummer }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, Seiten~} {\insertcity{, }{. }{. }} {\unskip. }% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{}{. }{}}% was {, }{. }{} }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, Seiten~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{, Herausgeber% \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, Nummer }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, Seiten~}{\insertcity{, }{. }{. }} {\unskip\insertcity{, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{, }{. }{}}% }% {}% \insertnote{ }{.}{}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Masterarbeit, }% \insertpublisher{}{. }{}% \insertpages{}{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup\it }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Dissertation, }% \insertpublisher{}{. }{}% \insertpages{}{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[misc]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}. }{}% \insertpublisher{}{. }{}% \insertpages{}{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[techreport]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{\insertvolume{ }{, }{, }}{Technischer Bericht, }% \insertpublisher{}{. }{}% \insertpages{}{S. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher{}{. }{}% \insertpages{}{S. }{}% \insertbibtype{(}{)}{}% \insertnote{ }{.}{}% } \protect context-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-aps.tex0000644000175000017500000002664110526734267023753 0ustar norbertnorbert%D \module %D [ file=bibl-aps, %D version=2004.7.16, %D title=APS bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \setupcite [author,year] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=num, \c!numbercommand=\bibalignednumber, \c!numbering=\v!yes, \c!autohang=\v!yes] \def\bibalignednumber#1{\hfill[#1]~~} \setuppublicationlist [\c!width=24pt, \c!artauthor=\normalshortauthor, \c!editor=\normalshortauthor, \c!author=\normalshortauthor, \c!namesep={, }, \c!lastnamesep={ and }, \c!finalnamesep={, and }, \c!firstnamesep={ }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={}, \c!authoretallimit=4, \c!editoretallimit=4, \c!artauthoretallimit=4, \c!authoretaldisplay=1, \c!editoretaldisplay=1, \c!artauthoretaldisplay=1, \c!authoretaltext={ {\it et al.\/}}, \c!editoretaltext={ {\it et al.\/}}, \c!artauthoretaltext={ {\it et al.\/}}] \def\maybeyear#1{} \def\etalchar#1{#1} \def\insertNote#1#2#3{% \begingroup \sfcode`\.=1020 \insertnote{#1}{\ifnum\spacefactor=1020 \else .\fi}{#3}% \endgroup } \def\insertEdition#1#2#3{% \begingroup \insertedition{#1}{\doifnumberelse{\csname @@pb@edition\endcsname}{% \ifcase \csname @@pb@edition\endcsname \or st\or nd\or rd\else th\fi }{}#2}{#3}% \endgroup } %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } % some tricks with page ranges: \def\insertfirstpage#1#2#3{% \@EA\bibdoifelse \@EA{\csname @@pb@pages\endcsname}% {#1\fixedfirstpage #2}% {#3}% } \def\fixedfirstpage{\expanded{\doifinstringelse{-}{\csname @@pb@pages\endcsname}% {\gobblelastdash\csname @@pb@pages\endcsname-\relax}{\csname @@pb@pages\endcsname}}} \protected\def\gobblelastdash#1-#2\relax{#1} \def\fixpp.{\expanded{\doifinstringelse{-}{\csname @@pb@pages\endcsname}{pp.}{p.}}} \setuppublicationlayout[article]{% \insertartauthors{}{ }{\insertthekey{}{ }{}}% \insertjournal{\unskip, \bgroup }{\egroup} {}% \insertcrossref{In }{}{}}% \insertvolume { \bgroup \bf } {\egroup %\insertissue{(}{)}{}% \insertfirstpage{, }{}{}} {\insertfirstpage{ }{}{}}% \insertpubyear{ (}{). }{\unskip.}% \insertNote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {\unskip, \bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, \fixpp. }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, p. }{. }{. }% }% \fi}% { }% \insertpubyear{(% \insertpublisher {}% {, }% {}% }{)\insertEdition{, }{ ed. }{. }}{\unskip.}% % \insertpages{}{p. }{}% \insertNote{ }{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{}{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {, \bgroup\it }% {\/\egroup \insertpubyear { (% \insertpubname{}{\insertcity{, }{, }{}}{}% } {)\insertEdition{, }{ ed.}{}}{}% \ifeditedbook \global\editedbookfalse \insertvolume { vol.~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, p. }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, vol.~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, \fixpp. }{. }{. }% }% \fi }% { }% \insertNote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpubyear{(% \insertpublisher{}{, }{}% }{)\insertEdition{, }{ ed. }{. }}{}% \insertpages{}{p. }{}% \insertNote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \inserttitle{\bgroup \it }{\/\egroup \insertseries{ (}{)}{}. }{}% \insertpubyear{(% \insertorganization {}% {\insertcity{, }{, }{}}% {\insertcity{}{, }{}}% }{)\insertEdition{, }{ ed. }{. }}{}% \insertpages{}{p. }{}% \insertNote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{}{\insertthekey{}{, }{}}% % \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {, in % \bgroup\it}% {\egroup \inserteditors{, edited by }% {}% {} \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpubyear{(% \insertpublisher{}%{, }%{}% }{)\insertEdition{, }{ ed. }{}}{}% \insertpages{\unskip, p.~}{. }{\unskip. }% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, p.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{ }{}% % % \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {\unskip, in \bgroup\it}% {\egroup \inserteditors{, edited by }% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpubyear { (% \insertorganization {}% {\insertpubname{, } {\insertcity{, }{}{}, } {\insertcity{, }{}{}, }}% {\insertpubname{} {\insertcity{, }{}{}, } {\insertcity{}{, }{}}}% } {)}{}% \insertseries {, \insertvolume{vol. }{~of }{}\bgroup\it}% {\egroup}% {}% \insertpages {\unskip, \fixpp.~} {\unskip.} {\unskip.}% }% { In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, \fixpp.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{, ed% \ifnum\getvalue{editor@num}> 1 s\fi., \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpubyear{(% \insertorganization {}% {\insertpubname{, }{, }{}}% {\insertpubname{}{, }{}}% } {)} {}% \insertpages {\unskip, p.~} {\insertcity{, }{}{}} {\unskip\insertcity{, }{}{}}% }% {}% \insertNote{\unskip. }{.}{.}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{, }{}% \insertbibtype{}{, }{Master's thesis, }% \insertpublisher{}{, }{}% \insertpubyear{(}{)}{}% \insertpages{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{, }{}% \insertbibtype{}{, }{Ph.D. thesis, }% \insertpublisher{}{, }{}% \insertpubyear{(}{)}{}% \insertpages{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[misc]{% \insertauthors{}{% \inserttitle{, \bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% }{% \insertthekey{}{% \inserttitle{, \bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% }{% \inserttitle{, \bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% }}% \insertpubyear{(% \insertpublisher{}{, }{}% }% {)}% {% \inserthowpublished{\unskip, }{}{}% }% \insertpages{\unskip, }{}{}% \inserteprint{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[techreport]{% \insertauthors{}{, }{}% \inserttitle{\bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% \insertbibtype{}{}{Tech. Rep.}% \insertvolume{ }{, }{, }% \insertpublisher{}{ }{}% \insertpubyear{(}{)}{}% \insertpages{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{}{}% \inserttitle{\bgroup \it }{\egroup \insertseries{ (}{)}{}}{}% \insertbibtype{ (}{)}{}% \insertpubyear{ (unpublished,}{)}{ (unpublished)}% \insertpages{\unskip, }{ }{}% \insertNote{\unskip. }{.}{\unskip.}% } \protectcontext-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-apa.tex0000644000175000017500000002360511571377075023727 0ustar norbertnorbert%D \module %D [ file=bibl-apa, %D version=2008.06.09, %D title=APA bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \setupcite [author,year] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=authoryears, \c!numbering=\v!no, \c!autohang=\v!no] \setuppublicationlist [\c!width=24pt, \c!artauthor=\invertedshortauthor, \c!editor=\invertedshortauthor, \c!author=\invertedshortauthor, \c!namesep={, }, \c!lastnamesep={ and }, \c!finalnamesep={ and }, \c!firstnamesep={, }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={, }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}, ] \def\maybeyear#1{#1} \def\etalchar#1{#1} %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% {#3}} % #1city, country: pubname#2 % #1country: pubname#2 % #1pubname#2 % #1city, country#2 % #3 \def\insertpublisher#1#2#3% {\insertpubname {\insertcity {#1} {\insertcountry{, }{}{}: }% {#1\insertcountry{}{: }{}}}% {#2}% {\insertcity {#1} {\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } \def\insertorg#1#2#3% {\insertorganization {\insertcity {#1} {\insertcountry{, }{}{#2}: }% {\insertcountry{}{: }{#2}}}% {}% {\insertcity {#1} {\insertcountry{, }{}{#2}}% {\insertcountry{}{#2}{#3}}}% } \setuppublicationlayout[article]{% \insertartauthors{}{ }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{\unskip.}% \insertarttitle{\bgroup }{\egroup. }{}% \insertjournal{\bgroup \it}{\egroup} {\insertcrossref{In }{}{}}% \insertvolume {\bgroup \it, } {\egroup\insertissue{\/(}{)}{}\insertpages{, }{.}{.}} {\insertpages{, pp. }{.}{.}}% \insertnote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{.}}% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{\unskip, pages }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{\unskip, pages }{.}{.}% }% \fi}% {}% \insertedition{ }{ edition}{}% \insertpublisher{ }{.}{.}% \insertpages{ }{p. }{ }% \insertnote{}{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{.}}}% {\insertseries{ }{.}{}}% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{\unskip, pages }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{\unskip, pages }{.}{}% }% \fi}% { }% \insertedition{ }{ edition.}{}% \insertpublisher{ }{.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertedition{ }{ edition.}{}% \insertpublisher{ }{.}{.}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup \it }{\/\egroup \insertseries{ (}{)}{}. }{}% \insertedition{ }{ edition.}{}% \insertorg{ }{.}{.}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {In \inserteditors{}% {, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% \insertedition{ }{ edition}{}% \insertpublisher{ }{.}{.}% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {In \inserteditors{}% {, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{}{}% \insertorg{. }{.}{.}% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{}{}% \insertorg{. }{.}{.}% }% {}% \insertnote{ }{.}{}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Master's thesis, }% \insertpublisher{ }{.}{.}% \insertpages{ }{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup\it }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{PhD thesis,}% \insertpublisher{ }{.}{.}% \insertpages{ }{ p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[misc]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}. }{}% \insertpublisher{ }{.}{.}% \insertpages{ }{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[techreport]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{\insertvolume{ }{, }{, }}{Technical Report}% \insertpublisher{ }{.}{.}% \insertpages{ }{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% % \insertpublisher{ }{.}{.}% \insertpages{ }{p. }{}% \insertbibtype{(}{)}{}% \insertnote{ }{.}{}% } \protect context-2013.05.28.20130704/texmf-dist/tex/context/bib/sample.bib0000644000175000017500000000133211571377075023466 0ustar norbertnorbert@STRING{hh = {Hans Hagen}} @ELECTRONIC{hh2010, author = hh, year = {2010}, title = {Metafun. \CONTEXT\ mkiv}, url = {http://www.pragma-ade.nl/general/manuals/metafun-s.pdf}, } @ARTICLE{hh2010a, author = hh, title = {The Font Name Mess}, journal = {MAPS}, year = {2010}, volume = {40}, pages = {2-8}, keywords = {context}, } @ARTICLE{hh2010b, author = hh, title = {Grouping in Hybrid Environments}, journal = {MAPS}, year = {2010}, volume = {40}, pages = {67-71}, keywords = {context}, } @BOOK{Eijkhout1991, title = {\TeX\ by Topic. A \TeX nician's Reference}, publisher = {Addison-Wesley}, year = {1991}, author = {Victor Eijkhout}, address = {London}, keywords = {general}, } context-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-num-fr.tex0000644000175000017500000002634110526734267024371 0ustar norbertnorbert%D \module %D [ file=bibl-num-fr, %D version=2005.12.16, %D title=NUM-FR bibliography style, %D subtitle=Publications, %D author={Renaud Aubin}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \def\setuppublicationlayout[#1]#2% {\setvalue{@@pvdata#1}{#2\unskip\vadjust{\kern 6pt}}} \setupcite [author,year] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={--}, \c!left={[}, \c!right={]}] \def\withbrackets#1{[#1]~~} \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=num, \c!numbering=\v!yes, \c!numbercommand=\withbrackets, \c!autohang=\v!yes] \setuppublicationlist [\c!artauthor=\normalauthor, \c!editor=\normalauthor, \c!author=\normalauthor, \c!namesep={, }, \c!lastnamesep={ et }, \c!finalnamesep={ et }, \c!firstnamesep={ }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={ }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}, ] \def\maybeyear#1{} \def\etalchar#1{#1} %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapitre\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } \setuppublicationlayout[article]{% \insertartauthors{}{\unskip. }{\insertthekey{}{. }{}}% \insertarttitle{\bgroup }{\egroup. }{}% \insertjournal{\bgroup \it}{\egroup} {\insertcrossref{Dans }{}{}}% \insertvolume {, } {\insertissue{(}{)}{}% \insertpages{:}{}{}% \insertpubyear{, }{}{}.} {\insertpages{, pages }{}{}% \insertpubyear{, }{}{}.}% \insertnote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Num\'ero~}% {\insertseries { dans~\bgroup}% {\egroup. }% {\insertcrossref{ dans~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ de~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { de~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{.}{.}% }% \fi}% {}% \insertpublisher { }% {\insertedition{, }{ \'edition}{} \insertpubyear{, }{.}{.}}% {\insertedition{, }{ \'edition}{}% \insertpubyear{, }{.}{.}}% \insertpages{ }{p.}{}% \insertnote{ }{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { num\'ero~}% {\insertseries { dans~\bgroup}% {\egroup. }% {\insertcrossref{ dans~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ de~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { de~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{. }{. }% }% \fi}% { }% \insertpublisher {}% {\insertedition{, }{ \'edition}{}% \insertpubyear{, }{. }{\unskip.}}% {\insertedition{, }{ \'edition}{}% \insertpubyear{, }{. }{\unskip.}}% \insertnote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{\unskip. }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {}% {\insertedition{, }{ \'edition}{}% \insertpubyear{, }{. }{}}% {\insertedition{, }{ \'edition. }{}% \insertpubyear{, }{. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \inserttitle {\bgroup \it } {\/\egroup \insertseries{ (}{)}{}. } {}% \insertorganization {}% {\insertcity {, }% {\insertedition {, } { \'edition\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}}% {\insertedition {, } { \'edition\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}}}% {\insertedition{, }{ \'edition\insertpubyear{, }{. }{. }}{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{\unskip. }{\insertthekey{}{\unskip. }{}}% \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {Dans \inserteditors{}% {\unskip, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ \'edition}{}% \insertpubyear{, }{. }{. }}% {\insertedition{, }{ \'edition}{}% \insertpubyear{, }{. }{}}% }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{\unskip. }{}% \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {Dans \inserteditors{}% {\unskip, \'editeur\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, pages~} {\insertcity{, }{}{} \insertpubyear{\unskip, }{. }{. }}% {\unskip \insertpubyear{\unskip, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{}{. }{}}% was {, }{. }{} }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{\unskip, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, pages~} {\insertcity {, } {\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}} {\unskip \insertcity {, } {\insertpubyear{, }{. }{. }} {\insertpubyear{, }{. }{. }}}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{, }{. }{}}% }% {}% \insertnote{ }{.}{}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{ }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{M\'emoire de master (DEA, DESS), }% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertpages{, }{p.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{ }{}% \inserttitle{\bgroup\it }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Th\`ese de doctorat, }% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertpages{, }{p.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[misc]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}. }{}% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertnote{ }{.}{}% } \setuppublicationlayout[techreport]{% \insertauthors{}{ }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{\insertvolume{ }{, }{, }}{Rapport technique, }% \insertpublisher {} {, \insertpubyear{}{}{}} {\insertpubyear{}{}{}}% \insertpages{, }{p.}{.}% \insertnote{ }{.}{}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{ }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {} {, \insertpubyear{}{.}{}} {\insertpubyear{}{.}{}}% \insertbibtype{ (}{)}{}% \insertnote{ }{.}{}% } \protect context-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-apa-fr.tex0000644000175000017500000002450211244221744024315 0ustar norbertnorbert%D \module %D [ file=bibl-apa-fr, %D version=2005.12.15, %D title=APA fr bibliography style, %D subtitle=Publications, %D author={Renaud Aubin}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \setupcite [author,year] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ et }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ et }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=authoryears, \c!numbering=\v!no, \c!autohang=\v!no] \setuppublicationlist [\c!width=24pt, \c!artauthor=\invertedshortauthor, \c!editor=\invertedshortauthor, \c!author=\invertedshortauthor, \c!namesep={, }, \c!lastnamesep={ et }, \c!finalnamesep={ et }, \c!firstnamesep={, }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={, }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}, ] \def\maybeyear#1{#1} \def\etalchar#1{#1} %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapitre\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } \setuppublicationlayout[article]{% \insertartauthors{}{ }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{\unskip.}% \insertarttitle{\bgroup }{\egroup. }{}% \insertjournal{\bgroup \it}{\egroup} {\insertcrossref{Dans }{}{}}% \insertvolume {, } {\insertissue{(}{)}{}\insertpages{:}{.}{.}} {\insertpages{, pages }{.}{.}}% \insertnote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Num\'ero~}% {\insertseries { dans~\bgroup}% {\egroup. }% {\insertcrossref{ dans~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ de~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { de~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{.}{.}% }% \fi}% {}% \insertpublisher { }% {\insertedition{, }{ \'edition.}{.}}% {\insertedition{, }{ \'edition.}{}}% \insertpages{ }{p. }{}% \insertnote{}{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{ }{\inserteditors{}{, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { number~}% {\insertseries { dans~\bgroup}% {\egroup. }% {\insertcrossref{ dans~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, pages }{. }{. }% \insertvolume{Volume~}{ de~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, pages }{. }{. }% }% \fi}% { }% \insertpublisher {}% {\insertedition{, }{ \'edition. }{. }}% {\insertedition{, }{ \'edition. }{}}% \insertnote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher {}% {\insertedition{, }{ \'edition. }{. }}% {\insertedition{, }{ \'edition. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup \it }{\/\egroup \insertseries{ (}{)}{}. }{}% \insertorganization {}% {\insertcity{, }% {\insertedition{, }{ \'edition. }{. }}% {\insertedition{, }{ \'edition. }{. }}}% {\insertedition{, }{ \'edition. }{}}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \insertarttitle{\bgroup }{\egroup. }{}% \inserttitle {Dans \inserteditors{}% {, \'editeur\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ \'edition. }{. }}% {\insertedition{, }{ \'edition. }{}}% }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {Dans \inserteditors{}% {, \'editeur\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages {\unskip, pages~} {\insertcity{, }{. }{. }} {\unskip. }% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{}{. }{}}% was {, }{. }{} }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{\insertcity{, }{. }{. }} {\unskip\insertcity{, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% {\insertpubname{, }{. }{}}% }% {}% \insertnote{ }{.}{}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Th\`ese de master (DEA, DESS, master), }% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup\it }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{, }{Th\`ese de doctorat, }% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[misc]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}. }{}% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[techreport]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertbibtype{}{\insertvolume{ }{, }{, }}{Rapport technique, }% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertnote{ }{.}{}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{ }{}% \insertpubyear{(}{). }{}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpublisher{}{. }{}% \insertpages{}{p. }{}% \insertbibtype{(}{)}{}% \insertnote{ }{.}{}% } \protect context-2013.05.28.20130704/texmf-dist/tex/context/bib/bibl-ams.tex0000644000175000017500000002661711244221744023740 0ustar norbertnorbert%D \module %D [ file=bibl-ams, %D version=2009.07.22 %D title=AMS bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater, Giuseppe Bilotta}, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. Use at your own risk \unprotect \setupcite [author,year] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryear] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupcite [authoryears] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupcite [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupcite [num] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \gdef\bibalignednumber#1{\hfill[#1]~~} \setuppublications[% \c!sorttype=, \c!criterium=, \c!refcommand=num, \c!numbercommand=\bibalignednumber, \c!numbering=\v!yes, \c!autohang=\v!yes] \setuppublicationlist [\c!width=30pt, \c!artauthor=\normalshortauthor, \c!editor=\normalshortauthor, \c!author=\normalshortauthor, \c!namesep={, }, \c!lastnamesep={ and }, \c!finalnamesep={, and }, \c!firstnamesep={ }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={}, \c!authoretallimit=4, \c!editoretallimit=4, \c!artauthoretallimit=4, \c!authoretaldisplay=1, \c!editoretaldisplay=1, \c!artauthoretaldisplay=1, \c!authoretaltext={ {\it et al.\/}}, \c!editoretaltext={ {\it et al.\/}}, \c!artauthoretaltext={ {\it et al.\/}}] \def\maybeyear#1{} \def\etalchar#1{#1} \def\insertNote#1#2#3{% \begingroup \sfcode`\.=1020 \insertnote{#1}{\ifnum\spacefactor=1020 \else .\fi}{#3}% \endgroup } \def\insertEdition#1#2#3{% \begingroup \insertedition{#1}{\doifnumberelse{\csname @@pb@edition\endcsname}{% \ifcase \csname @@pb@edition\endcsname \or st\or nd\or rd\else th\fi }{}#2}{#3}% \endgroup } %D \macros{insertchapter,insertpublisher} %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% {#3}} \def\insertpublisher#1#2#3% {\insertpubname {#1}{\insertcity {, } {\insertcountry{, }{}{#2}}% {\insertcountry{, }{}{#2}}}% {\insertcity {}{\insertcountry{, }{}{#2}}% {\insertcountry{#1}{#2}{#3}}}% } % some tricks with page ranges: \def\insertfirstpage#1#2#3{% \@EA\bibdoifelse \@EA{\csname @@pb@pages\endcsname}% {#1\fixedfirstpage #2}% {#3}% } \def\fixedfirstpage{\expanded{\doifinstringelse{-}{\csname @@pb@pages\endcsname}% {\gobblelastdash\csname @@pb@pages\endcsname-\relax}{\csname @@pb@pages\endcsname}}} \protected\def\gobblelastdash#1-#2\relax{#1} \def\fixpp.{\expanded{\doifinstringelse{-}{\csname @@pb@pages\endcsname}{pp.}{p.}}} \setuppublicationlayout[article]{% \insertartauthors{}{ }{\insertthekey{}{ }{}}% \insertarttitle{\unskip, \bgroup\it }{\/\egroup}{}% \insertjournal{\unskip, \bgroup }{\egroup}{}% \insertvolume{ \bgroup\bf }{\egroup}{}% \insertpubyear{ (}{)}{\unskip}% \insertissue{\unskip, no.~}{}{}% \insertpages{\unskip, }{}{}% \insertNote{ }{.}{}% \insertcomment{}{.}{}% } \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {\unskip, \bgroup\it }% {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume { Number~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, \fixpp. }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, volume~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, p. }{. }{. }% }% \fi}% { }% \insertpubyear{(% \insertpublisher {}% {, }% {}% }{)\insertEdition{, }{ ed. }{. }}{\unskip.}% % \insertpages{}{p. }{}% \insertNote{ }{.}{}% } \setuppublicationlayout[inbook]{% \insertauthors{}{}{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {, \bgroup\it }% {\/\egroup \insertpubyear { (% \insertpubname{}{\insertcity{, }{, }{}}{}% } {)\insertEdition{, }{ ed.}{}}{}% \ifeditedbook \global\editedbookfalse \insertvolume { vol.~}% {\insertseries { in~\bgroup}% {\egroup. }% {\insertcrossref{ in~}{}{. }}}% {\insertseries{ }{.}{} }% \else \insertcrossref {\insertchap{, }{}{}% \insertpages{, p. }{. }{. }% \insertvolume{Volume~}{ of~}{}% }% {}% {\insertvolume {, vol.~}% {\insertseries { of~\bgroup\it}% {\egroup} {}} {}% \insertchap{, }{}{}% \insertpages{, \fixpp. }{. }{. }% }% \fi }% { }% \insertNote{ }{.}{}% } \setuppublicationlayout[booklet]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \inserttitle{\bgroup }{\egroup \insertseries{ (}{)}{}. }{}% \insertpubyear{(% \insertpublisher{}{, }{}% }{)\insertEdition{, }{ ed. }{. }}{}% \insertpages{}{p. }{}% \insertNote{ }{.}{}% } \setuppublicationlayout[manual]{% \insertauthors{}{ }{\insertthekey{}{. }{}}% \inserttitle{\bgroup \it }{\/\egroup \insertseries{ (}{)}{}. }{}% \insertpubyear{(% \insertorganization {}% {\insertcity{, }{, }{}}% {\insertcity{}{, }{}}% }{)\insertEdition{, }{ ed. }{. }}{}% \insertpages{}{p. }{}% \insertNote{ }{.}{}% } \setuppublicationlayout[incollection]{% \insertartauthors{}{}{\insertthekey{}{, }{}}% \insertarttitle{, \bgroup }{\egroup}{}% \inserttitle {, in % \bgroup\it}% {\egroup \inserteditors{, edited by }% {}% {} \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpubyear{(% \insertpublisher{}%{, }%{}% }{)\insertEdition{, }{ ed. }{}}{}% \insertpages{\unskip, p.~}{. }{\unskip. }% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, p.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{ }{}% \insertarttitle{\bgroup\it }{\/\egroup }{}%% \inserttitle {\unskip, in \bgroup\it}% {\egroup \inserteditors{, edited by }% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpubyear { (% \insertorganization {}% {\insertpubname{, } {\insertcity{, }{}{}, } {\insertcity{, }{}{}, }}% {\insertpubname{} {\insertcity{, }{}{}, } {\insertcity{}{, }{}}}% } {)}{}% \insertseries {, \insertvolume{vol. }{~of }{}\bgroup\it}% {\egroup}% {}% \insertpages {\unskip, \fixpp.~} {\unskip.} {\unskip.}% }% { In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, \fixpp.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{, ed% \ifnum\getvalue{editor@num}> 1 s\fi., \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpubyear{(% \insertorganization {}% {\insertpubname{, }{, }{}}% {\insertpubname{}{, }{}}% } {)} {}% \insertpages {\unskip, p.~} {\insertcity{, }{}{}} {\unskip\insertcity{, }{}{}}% }% {}% \insertNote{\unskip. }{.}{.}% } \setuppublicationlayout[mastersthesis]{% \insertauthors{}{, }{}% \insertbibtype{}{, }{Master's thesis, }% \insertpublisher{}{, }{}% \insertpubyear{(}{)}{}% \insertpages{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[phdthesis]{% \insertauthors{}{, }{}% \insertbibtype{}{, }{Ph.D. thesis, }% \insertpublisher{}{, }{}% \insertpubyear{(}{)}{}% \insertpages{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[misc]{% \insertauthors{}{% \inserttitle{, \bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% }{% \insertthekey{}{% \inserttitle{, \bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% }{% \inserttitle{, \bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% }}% \insertpubyear{(% \insertpublisher{}{, }{}% }% {)}% {% \inserthowpublished{\unskip, }{}{}% }% \insertpages{\unskip, }{}{}% \inserteprint{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[techreport]{% \insertauthors{}{, }{}% \inserttitle{\bgroup \it }{\egroup \insertseries{ (}{)}{} }{}% \insertbibtype{}{}{Tech. Rep.}% \insertvolume{ }{, }{, }% \insertpublisher{}{ }{}% \insertpubyear{(}{)}{}% \insertpages{\unskip, }{}{}% \insertNote{\unskip. }{.}{\unskip.}% } \setuppublicationlayout[unpublished]{% \insertauthors{}{, }{}% \inserttitle{\bgroup \it }{\egroup \insertseries{ (}{)}{}}{}% \insertbibtype{ (}{)}{}% \insertpubyear{ (unpublished, }{)}{ (unpublished)}% \insertpages{\unskip, }{ }{}% \insertNote{\unskip. }{.}{\unskip.}% } \protect context-2013.05.28.20130704/texmf-dist/tex/context/third/0000755000175000017500000000000012165205647022101 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/third/gnuplot/0000755000175000017500000000000012165205647023571 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/third/gnuplot/t-gnuplot.mkii0000644000175000017500000011262512134236345026377 0ustar norbertnorbert%D \module %D [ file=t-gnuplot.mkii, %D version=2013.04.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=\GNUPLOT\ Inclusion, %D author={Mojca Miklavec, Marco Patzer, Hans Hagen, Taco Hoekwater, Aditya Mahajan}, %D date=\currentdate, %D copyright=\PRAGMA] % begin info % % title : Gnuplot module % % comment : simplifies inclusion of gnuplot-generated graphs into ConTeXt documents % status : stable, supports both MKII and MKIV % % end info %D This module is used for creating gnuplot graphs on-the-fly and including them %D into documents. %D %D Known Bugs: %D %D \startitemize %D \item spurious space \& page %D \stopitemize %D %D TODO (Optimisations): %D %D \startitemize %D \item optimize the number of gnuplot runs (if possible, gnuplot should be run only once) %D \item optimize the number of times for loading/converting an already used graphic %D \item pstopdf is a bit slow %D \stopitemize %D %D TODO (Handle things that may go wrong): %D - gnuplot executable doesn't exist %D - context terminal isn't available or some other failure in gnuplot script (no file created) %D - write18 disabled (you may call gnuplot later - create a script) %D %D TODO (Missing functionality): %D %D - a lot ... \writestatus{loading}{Gnuplot module} \startmodule[gnuplot] \unprotect \def\c!terminal {terminal} \def\c!options {options} \def\c!pointset {pointset} \def\c!purge {purge} %D MPextensions %D %D XXX %D if possible, they should be specific to \type{\startGNUPLOTgraphic}, %D so unvisible to \type{MPcode} %D (probably something like \type+\appendtoks ... to\everyGNUPLOTgraphic+) \startMPextensions % load metapost macros (only once) input mp-gnuplot.mp ; % number of points defined with \setupGNUPLOTterminal[pointset=...] %gp_num_points_with_tex := \gp:num:pointswithtex; gp_num_points_with_tex := 3; % main color should be set equal to the current text color gp_color_foreground := \MPcolor{currentcolor}; gp_color_lt[-2] := gp_color_foreground; % TODO: is there any chance to make this local to gnuplot? % linejoin & linecap linejoin := \@@GNUPLOT@term@context@linejoin; % linecap := \gp:term:context:linecap; % dashes or solid? (true/false) gp_use_dashed := \@@GNUPLOT@term@context@is@dashed; % dashlength scale % gp_scale_dashlength := \gp:term:context:dashlength; % linewidth scale gp_scale_linewidth := \@@GNUPLOT@term@context@linewidth; gp_scale_text := \@@GNUPLOT@term@context@fontscale; % linejoin := \gp:term:context:linejoin; % linecap := \gp:term:context:linecap; % % dashes or solid? (true/false) % gp_use_dashed := \gp:term:context:dashed; % % dashlength scale % gp_scale_dashlength := \gp:term:context:dashlength; % % linewidth scale % gp_scale_linewidth := \gp:term:context:linewidth; gp_points_with := gp_points_with_\@@GNUPLOT@term@context@points; \stopMPextensions %D (hopefully) temporary solution for handling the color in expressions like %D \type+draw \sometxt{...} withcolor red+ \chardef\TeXtextcolormode\zerocount %D We need a \type{\strut} in front of labels for better vertical centering. %D This might still fail for Zapfino and alike where \type{\strut} might be smaller %D than the actual font height. %D %D TODO (optional improvement): instead of placing \type{\strut} in front, %D create a \type{\hbox} and adjust it's dimensions to \type{\strut}'s height and depth. %D Aditya, thanks a lot for requesting it! %D Hans, thanks a lot for implementing this! \definetextext[gp]{\strut} %D TODO (feature request): %D \starttyping %D \sometxt[gp][ss,20pt]{abc} %D \stoptyping %D should become equivalent to %D \starttyping %D \sometxt{\switchtobodyfont[ss,20pt]\strut abc} %D \stoptyping %D %D Or, even more drastic perhaps, I would love to implement %D \starttyping %D \sometxt[gp][iwona,bold,c]{abc} %D \stoptyping %D meaning: iwona, bold typeface, size \quote{c} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %D The following patch has been written by Aditya and seems to work OK, %D however it would be more clean to have this functionality in the core. %D Redefining low-level macros might be a bit dangerous, esp. since %D they tend to change over time. %D %D At the moment the hack only works in MKII; for MKIV it needs to be fixed %D %D TODO: remind Hans to implement it in core ;) %D and remove this patch from the module %D \long\def\redofiltersometxt[#1]% {\doifnextcharelse[{\reredofiltersometxt[#1]}{\redodofiltersometxt[#1]}} \long\def\redodofiltersometxt[#1]#2% {\increment\txtcounter \TeXtext[#1]\txtcounter{#2}% \filtersometxt} \long\def\reredofiltersometxt[#1][#2]#3% {\increment\txtcounter \TeXtext[#1]\txtcounter{\switchtobodyfont[#2]\strut#3}% \filtersometxt} %D In MKII we have to make sure that runtime MP graphics are enabled, %D otherwise sizes of labels created by \type+\sometxt{}+ would be wrong %D if user didn't enable that option in \type{cont-usr.tex}. %D (Taco says it might be a bug, but let's not worry too much about it. %D If it will be resolved, we may delete this.) \runMPgraphicstrue %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcounter\GNUPLOTnumber \newdimen\GNUPLOThcharsize \newdimen\GNUPLOTvcharsize \newcounter\tikzGNUPLOTnumber % macro to calculate true character size from current font % (However it is not 100 % that it gets the job properly done % in case that other font settings are used inside the picture.) \def\calculateGNUPLOTcharsize{% \global\GNUPLOThcharsize=1.05\fontcharwd\font`0% \global\GNUPLOTvcharsize=1.05\fontcharht\font`0% \global\advance\GNUPLOTvcharsize by 1.05\fontchardp\font`g% } %D \macros %D {startGNUPLOTinclusions, resetGNUPLOTinclusions} %D %D For those who want to have two or more graphs with similar options, %D these options may be included inside \type{\startMPinclusions ... \stopMPinclusions} %D and will be place on the top of the created \GNUPLOT\ script. %D %D \starttyping %D \startGNUPLOTinclusions %D set xlabel '$x$' %D set ylabel '$y$' %D set format y "%.1f" %D \stopGNUPLOTinclusions %D %D \startGNUPLOTscript[sin] %D plot sin(x) %D \stopGNUPLOTscript %D \startGNUPLOTscript[cos] %D plot cos(x) %D \stopGNUPLOTscript %D \stoptyping \long\def\startGNUPLOTinclusions {\def\stopGNUPLOTinclusions{\ifx\savebuffer\undefined \else \savebuffer[gnuplot-inclusions]\fi}% \dostartbuffer[gnuplot-inclusions][startGNUPLOTinclusions][stopGNUPLOTinclusions]} % \def\resetGNUPLOTinclusions{\let\GNUPLOTinclusions\empty} % creates an empty file (there must be a cleaner way to do it) \def\resetGNUPLOTinclusions {\immediate\openout\scratchwrite=\jobname-gnuplot-inclusions.tmp \immediate\closeout\scratchwrite} %\startbuffer[gnuplot-inclusions]\stopbuffer\ifx\savebuffer\undefined \else \savebuffer[gnuplot-inclusions]\fi} \resetGNUPLOTinclusions %D On the other hand, one can probably achieve the same effect %D when drawing two plots inside the same script, like that: %D %D \starttyping %D \startGNUPLOTscript[sin and cos] %D set xlabel '$x$' %D set ylabel '$y$' %D set format y "%.1f" %D plot sin(x) %D plot cos(x) %D \stopGNUPLOTscript %D \stoptyping %D %D and then recall the graphics using \type{\useGNUPLOTgraphic[sin and cos][1]}. %D \macros %D {startGNUPLOTscript} %D %D \starttyping %D \startGNUPLOTscript{some name} %D plot sin(x) %D \stopGNUPLOTscript %D \stoptyping \def\startGNUPLOTscript {\bgroup\dosingleempty\dostartGNUPLOTscript} % \def\redostartGNUPLOTscript#1 % {\obeylines % \catcode`\%=\@@letter % \catcode`\|=\@@letter % \catcode`\$=\@@letter % \dodostartGNUPLOTscript{#1}% % %\dostartGNUPLOTscript[#2] % } % % \def\dostartGNUPLOTscript[#1]% % {\iffirstargument % \obeylines % \catcode`\%=\@@letter % \catcode`\|=\@@letter % \catcode`\$=\@@letter % \dodostartGNUPLOTscript{#1}% % \else % \redostartGNUPLOTscript % \fi % } \def\dostartGNUPLOTscript[#1]% {%\iffirstargument \dodostartGNUPLOTscript{#1}% %\else % \dodostartGNUPLOTscript %\fi } % gps:n:{name} = gnuplotscript : number : {name} - number of script with name {name} \long\def\dodostartGNUPLOTscript#1%#2\stopGNUPLOTscript {\doglobal\increment\GNUPLOTnumber \letgvalue{gps:n:#1}\GNUPLOTnumber % in case of LuaTeX we need to write the buffer into file explicitely \def\stopGNUPLOTscript{\egroup \ifx\savebuffer\undefined \else \savebuffer[gnuplot-\GNUPLOTnumber]\fi}% \dostartbuffer[gnuplot-\GNUPLOTnumber][startGNUPLOTscript][stopGNUPLOTscript]% } % When are the graphics processed/read? % % - \gps:n:{name} (gnuplot script:name:{name}) holds the number of gnuplot script; % - that number was defined if we created the plot using \startGNUPLOTscript{name} % - and most probably undefined if we only issued \processGNUPLOTfile[name][filename] % => if, at the time of issuing \processGNUPLOTfile[name][filename], \gps:n:{name} is not defined, % it should be defined at that time % - \gpe:{name}:{terminal} (gnuplot graphic executed:{name}:{terminal}) % is defined if we executed the command for that specific name and for that terminal % (once it will probably be 0 for a failed run and 1 for a successful one) % \useGNUPLOTgraphic[name] has three different ways of working: % - it can be called after \processGNUPLOTfile[name][filename] % which defined MP graphics that are now used % - it can be called for the first time under the current terminal % in that case it compiles the graphic and includes it % - it can be called for the second, third, ... time % in which case it only includes files without compiling it %D \macros %D {useGNUPLOTgraphic} % 5 ways of calling it: % - \useGNUPLOTgraphic{name} % - \useGNUPLOTgraphic[name] % - \useGNUPLOTgraphic[name][1,2,5] % - \useGNUPLOTgraphic[name][width=.8\textwidth] % - \useGNUPLOTgraphic[name][1,2,5][width=.8\textwidth] % this code takes care of reading arguments \def\useGNUPLOTgraphic {\dotripleempty\douseGNUPLOTgraphic} \def\douseGNUPLOTgraphic[#1][#2][#3]% {\doifelse{#3}{}{% % < 3 arguments \doifelse{#2}{}% % 1 argument % as in \useGNUPLOTgraphic[name] {\dodouseGNUPLOTgraphic[#1][][]}% % % as in \useGNUPLOTgraphic{name} % {\redouseGNUPLOTgraphic[][][]}% % 2 arguments {\doifassignmentelse{#2}% % as in \useGNUPLOTgraphic[name][width=.8\textwidth] {\dodouseGNUPLOTgraphic[#1][][#2]}% % as in \useGNUPLOTgraphic[name][1,2,5] {\dodouseGNUPLOTgraphic[#1][#2][]}% }% }% % as in \useGNUPLOTgraphic[name][1,2,5][width=.8\textwidth] {\dodouseGNUPLOTgraphic[#1][#2][#3]}% } \def\redouseGNUPLOTgraphic[#1][#2][#3]#4% {\dodouseGNUPLOTgraphic[#4][][]} % and this code actually does something with it %D \doifundefined {string} {...} %D \doifdefined {string} {...} %D \doifundefinedelse {string} {then ...} {else ...} %D \doifdefinedelse {string} {then ...} {else ...} % \doifGNUPLOTscriptdefined{name}{...} % if gnuplot script with {name} and current terminal has already been processed % \doifGNUPLOTscriptprocessed{name}{...} % \letGNUPLOTscriptprocessed[optional terminal]{name} signals that the gnuplot script named {name} % has already been processed with the current terminal % TODO: currently it is always defined to be one as soon as one tries to process it, % even if en error is produced; in future it would be helpful if it would be set to zero % if it was unsuccessfully executed; % that is needed, since scripts are processed only when one first asks for including the graphic \def\letGNUPLOTscriptprocessed {\dosingleempty\doletGNUPLOTscriptprocessed} %\def\doletGNUPLOTscriptprocessed[#1]#2% %{\letgvalue{gpe:#1:\@@GNUPLOTterminal}\plusone} \def\doletGNUPLOTscriptprocessed[#1]#2% {\iffirstargument % terminal has been specified \letgvalue{gpe:#2:#1}\plusone \else % no terminal specified - use the current one \letgvalue{gpe:#2:\@@GNUPLOTterminal}\plusone \fi} % Although that should preferably not happen, one might come to an idea of defining % a gnuplot script with the same name as already defined. % In that case the old script cannot be referenced any more, but we can still try % to do out best to make it work anyway. We have to do two things: % - claim that script with that name hasn't been defined yet, so that processing will happen again % (TODO: do it in a more elegant way for all known terminals) % - undefine any metapost graphics (TODO: I have no idea yet how it can be done) % % \resetGNUPLOTscriptprocessed{name} \def\resetGNUPLOTscriptprocessed#1% {\bgroup % claim that the script with {name} (#1) hasn't been processed with {terminal} (##1) yet \def\undefineGNUPLOTscriptforterminal##1{\letbeundefined{gpe:#1:##1}}% % TODO: the list of available terminals should be generated automatically \processcommalist[context,postscript,ps,eps,pdf,metapost,mp,png]\undefineGNUPLOTscriptforterminal \resetGNUPLOTgraphics{#1}% \egroup} % \resetGNUPLOTgraphics{name} undefines any gnuplot graphic defined with \startGNUPLOTgraphic[name][number] \def\resetGNUPLOTgraphics#1% {\doloop {\doifMPgraphicelse{gpg:#1:\recurselevel}% % TODO: be aware - @@MPG is low-level ConTeXt variable which might change without notice, % it would be better to call this \undefineMPgraphic{gpg:#1:\recurselevel} or something similar {\letbeundefined{@@MPGgpg:#1:\recurselevel}}% {\exitloop}}% \doloop {\doifdefinedelse{TKZp:#1:\recurselevel}% {\letbeundefined{TKZp:#1:\recurselevel}}% {\exitloop}}% }% % TODO: this can probably be done in a better way \def\doifGNUPLOTscriptprocessed#1#2% {\doifdefined {gpe:#1:\@@GNUPLOTterminal}{#2}} \def\doifGNUPLOTscriptprocessedelse#1#2#3% {\doifdefinedelse {gpe:#1:\@@GNUPLOTterminal}{#2}{#3}} \def\doifGNUPLOTscriptnotprocessed#1#2% {\doifundefined {gpe:#1:\@@GNUPLOTterminal}{#2}} \def\doifGNUPLOTscriptnotprocessedelse#1#2#3% {\doifundefinedelse{gpe:#1:\@@GNUPLOTterminal}{#2}{#3}} % private % \writeandprocessGNUPLOTscript{name} \def\writeandprocessGNUPLOTscript#1% % TODO: if gps:n:#1 (holding the script content) is not defined, % error or warning should be issued % % only process the script if it has been defined and not processed before for the current terminal {\doifdefined{gps:n:#1}{\doifGNUPLOTscriptnotprocessed{#1}{% % \gpe:{name}:{terminal} is defined %\setgvalue{gpe:#1:\@@GNUPLOTterminal}{#2} \letGNUPLOTscriptprocessed{#1}% % call to gnuplot and processing/converting the graphics is only needed in the first ConTeXt run \doifmode{*\v!first}{% (perhaps also: if files haven't changed) \bgroup % for TikZ we want to calculate character size, so that it gets printed % to inclusions with \@@GNUPLOToptions \calculateGNUPLOTcharsize % catcodes trickery & alike %\the\everyGNUPLOTscript % open file for writing \immediate\openout\scratchwrite=\GNUPLOTfile.plt % TODO: terminal-specific options (default or provided by the user) \immediate\write\scratchwrite{\letterhash\space Do not modify this file - all changes will be overwritten}% \immediate\write\scratchwrite{\letterhash\space Change \jobname.tex instead.}% \immediate\write\scratchwrite{set terminal \@@GNUPLOToutput\space\@@GNUPLOToptions}% % add common inclusions in scripts for multiple similar plots %\doifnotempty % {\GNUPLOTinclusions}{\immediate\write\scratchwrite{\GNUPLOTinclusions}}% % include common gnuplot 'inclusions' \immediate\write\scratchwrite{load '\jobname-gnuplot-inclusions.tmp'}% % output file \immediate\write\scratchwrite{set output "\@@GNUPLOTresult"}% % write main contents of the script, like "plot sin(x)" %\immediate\write\scratchwrite{\getvalue{gps:d:\GNUPLOTnumber}}% \immediate\write\scratchwrite{load '\GNUPLOTfile.tmp'}% \immediate\closeout\scratchwrite \egroup % TODO: % - check the state of write18 and warn the user if it's disabled, % otherwise just everyone will start complaining that the module doens't work % - check if execution was successful; possible pitfalls: % - gnuplot doesn't exist as a binary % - gnuplot doesn't support context terminal % or some other error in script which results in empty output file % % run gnuplot & execute the script that has just been written % \executesystemcommand{mtxrun --ifchanged=\GNUPLOTfile.plt\space % --direct \@@GNUPLOTprogram\space\GNUPLOTfile.plt}% \executesystemcommand{mtxrun --direct \@@GNUPLOTprogram\space\GNUPLOTfile.plt}% \writestatus{aaa}{mtxrun --direct \@@GNUPLOTprogram\space\GNUPLOTfile.plt}% \convertGNUPLOTgraphic }% % for ConTeXt terminal only - read the result \doif{\@@GNUPLOTterminal}{context}{\processGNUPLOTfile[#1][\@@GNUPLOTresult]}% \doif{\@@GNUPLOTterminal}{tikz} {\processGNUPLOTfile[#1][\@@GNUPLOTresult]}% }}} % \dodouseGNUPLOTgraphic[name][numbers][options] \def\dodouseGNUPLOTgraphic[#1][#2][#3]% {\bgroup \doifdefinedelse{gps:n:#1} {\edef\GNUPLOTnumber{\getvalue{gps:n:#1}}% \edef\GNUPLOTfile {\jobname-gnuplot-\GNUPLOTnumber}% \writeandprocessGNUPLOTscript{#1}% % "ctxtools --purge" should delete the gnuplot script and other intermediate files % (but it seems that they are deleted automatically already; preferred or not?) % \registertempfile{\GNUPLOTfile.plt} % \registertempfile{\@@GNUPLOTresult} % \registertempfile{\@@GNUPLOTfinalresult} \doifelse{\@@GNUPLOTterminal}{context}% % for ConTeXt terminal only {\doifelse{#2}{}% % if no explicit figure number was specified, include all the figures {\doloop {\doifMPgraphicelse{gpg:#1:\recurselevel}% {\scale[#3]{\reuseMPgraphic{gpg:#1:\recurselevel}}}% {\exitloop}}}% % if numbers were specified, include the figures specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\doifMPgraphicelse {gpg:#1:##1}% {\scale[#3]{\reuseMPgraphic{gpg:#1:##1}}}% % if graphic doesn't exist: draw a dummy frame instead and warn the user {\scale[#3]{\framed[frame=on,width=5in,height=3in,align={middle,lohi}]{GNUPLOT graphic #1, Nr. ##1 doesn't exist}}}}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }{% % for TikZ terminal only \doifelse{\@@GNUPLOTterminal}{tikz}% {\doifelse{#2}{}% % if no explicit figure number was specified, include all the figures {\doloop {\doifdefinedelse{TKZp:#1:\recurselevel}% {\scale[#3]{\getvalue{TKZp:#1:\recurselevel}}}% {\exitloop}}}% % if numbers were specified, include the figures specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\doifdefinedelse {TKZp:#1:##1}% {\scale[#3]{\getvalue{TKZp:#1:##1}}}% % if graphic doesn't exist: draw a dummy frame instead and warn the user {\scale[#3]{\framed[frame=on,width=5in,height=3in,align={middle,lohi}]{GNUPLOT graphic #1, Nr. ##1 doesn't exist}}}}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }% % for all the other terminals % TODO: add more safety switches (if pages don't exist for example) {\doifelse{#2}{}% % if no explicite figure number was specified, include all the pages % TODO: properly handle METAPOST & PNG (only works for (E)PS & PDF) !!! {\getfiguredimensions[\@@GNUPLOTfinalresult]% \dorecurse{\noffigurepages}{\externalfigure[\@@GNUPLOTfinalresult][page=\recurselevel,#3]}}% % if numbers were specified, include the pages specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\externalfigure[\@@GNUPLOTfinalresult][page=##1,#3]}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }}% }% % else part - in case that graphic gets included with \processGNUPLOTfile[name][file] {\doifelse{\@@GNUPLOTterminal}{context} % TODO: this part has been literally copied from above; create a subroutine instead {\doifelse{#2}{}% % if no explicit figure number was specified, include all the figures {\doloop {\doifMPgraphicelse{gpg:#1:\recurselevel}% {\scale[#3]{\reuseMPgraphic{gpg:#1:\recurselevel}}}% {\exitloop}}}% % if numbers were specified, include the figures specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\doifMPgraphicelse {gpg:#1:##1}% {\scale[#3]{\reuseMPgraphic{gpg:#1:##1}}}% % if graphic doesn't exist: draw a dummy frame instead and warn the user {\scale[#3]{\framed[frame=on,width=5in,height=3in,align={middle,lohi}]{GNUPLOT graphic #1, Nr. ##1 doesn't exist}}}}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }% {\message{The gnuplot graphic #1 has not been defined.}}}% \egroup} %D \macros %D {setupGNUPLOT} \def\setupGNUPLOT % {\dodoubleempty\getparameters[@@GNUPLOT]} {\dosingleargument\dosetupGNUPLOT} \def\dosetupGNUPLOT[#1]% {\getparameters[@@GNUPLOT][#1]% % define all the necessary points according to the option "pointset" % % XXX: no idea why this is needed, but otherwise it complains that @@GNUPLOTpointset is undefined \edef\currentGNUPLOTpointset{\@@GNUPLOTpointset}% \startTeXtexts \doloop{\doifelseconversionnumber{\@@GNUPLOTpointset}{\recurselevel}% % +500 is a hack (hopefully the plot doesn't contain more than 500 labels) % otherwise the points would be overwritten by labels with another \TeXtext: % it might need a fix in ConTeXt core {\TeXtext{\numexpr\recurselevel+500\relax}{{\convertnumber{\currentGNUPLOTpointset}{\recurselevel}}}}% {\exitloop}}% \stopTeXtexts % \gp:num:pointswithtex is passed to metapost, so that it knows % how many points are defined and chooses the proper point % form a set of the defined ones % % for safety reasons define \gp:num:pointswithtex to be equal to 1 (it can only increase later), otherwise: % - (something mod 0) won't work % - if conversion is not defined, the number will retain its old value (not desirable) \edef\gp:num:pointswithtex{1}% \doloop{\doifelseconversionnumber{\@@GNUPLOTpointset}{\recurselevel}% {\edef\gp:num:pointswithtex{\recurselevel}}% {\exitloop}}% % in case of TikZ terminal we have to generate the needed style files first \doif{\@@GNUPLOTterminal}{tikz} {\executesystemcommand{gnuplot -e "set term tikz context createstyle"}\usemodule[gnuplot-lua-tikz]} % TODO: % - issue a warning if user wants to use points with TeX, % but pointset= is undefined (if the first point doesn't exist) % - no idea what happens if conversion is infinite, % so try to stop at some reasonable value (100?) % - current implementation redefines the points even if only terminal type % has been set to some other value (which is a stupid approach, but I % wanted to have a working version first and will consider efficiency later) % - it may be that the old points remain defined if conversion changes % (perhaps they should be undefined again?) } % Hans has written this piece of code, but: % - "start" and "/MIN" caused problems % - pgnuplot is not much more "portable" than gnuplot % best thing to do is to create a "gnuplot.bat" somewhere in PATH % %\def\processGNUPLOTscript % {\doifelse\operatingsystem{mswin} % {\executesystemcommand{start /MIN pgnuplot \GNUPLOTfile.plt}} % start is needed else gp fails % {\executesystemcommand{gnuplot \GNUPLOTfile.plt}}} %\def\processGNUPLOTscript % {\executesystemcommand{gnuplot \GNUPLOTfile.plt}} % TODO: check if write18 is enabled; if not, issue a command and warn the user that running the module might be pointless or that he/she has to run gnuplot on the produced files manually \def\convertGNUPLOTgraphic {\doifsomething\@@GNUPLOThandle{\writestatus{conversion}{\@@GNUPLOThandle}\executesystemcommand{\@@GNUPLOThandle}}} %D \macros %D {processGNUPLOTfile} %D It's needed to input a file resulting from a gnuplot run (with ConTeXt terminal). %D It reads the file and "saves" the metapost graphics defined in that file, %D so that they can be used with \usegnuplotgraphic (low level: \reuseMPgraphic) later %D % \processGNUPLOTfile[NAME][filename] \def\processGNUPLOTfile {\dodoubleargument\doprocessGNUPLOTfile} \def\doprocessGNUPLOTfile[#1][#2]% {\bgroup % for ConTeXt teminal %-------------------- % we first define two commands: \startGNUPLOTgraphic & \stopGNUPLOTgraphic to read the files in; % files that gnuplot creates in non-standalone mode look approximately like this: % % \startGNUPLOTgraphic[1] % ... metapost commands to draw the graph ... % \stopGNUPLOTgraphic % \startGNUPLOTgraphic[2] % ... metapost commands to draw the graph ... % \stopGNUPLOTgraphic % ... % % while reading the file in, metapost graphics named "gpg:{name}:{number}" are defined % % (we might need some additional arguments later on, but for now the figure number should suffice) \def\startGNUPLOTgraphic {%\obeyMPlines % <- no longer a problem \def\obeyedline{}% <- thanks to this \dosingleargument\dostartGNUPLOTgraphic}% \long\def\dostartGNUPLOTgraphic[##1]##2\stopGNUPLOTgraphic {\startreusableMPgraphic{gpg:#1:##1}##2\stopreusableMPgraphic}% %------------------ % for TikZ terminal %------------------ \newcounter\tikzGNUPLOTnumber \let\normalstarttikzpicture=\starttikzpicture \let\normalstoptikzpicture=\stoptikzpicture \long\def\starttikzpicture##1\stoptikzpicture% {\increment\tikzGNUPLOTnumber % \long\setgvalue{TKZp:#1:\tikzGNUPLOTnumber}{##1}} \long\setgvalue{TKZp:#1:\tikzGNUPLOTnumber}{\hbox{\starttikzpicture##1\stoptikzpicture}}} %--------- % for both %--------- % input the file % TODO: error / warning if the files doesn't exist \readlocfile{#2}{}{}% the third argument should be: if file not found % this file is known % TODO \letgvalue{gpf:#1}\plusone \egroup } %D \macros %D {startGNUPLOTpage} %D %D Used for standalone \GNUPLOT\ figures & written out by gnuplot in standalone mode. %D %D Instead of having to \type{\useGNUPLOTgraphic}, a figure is inserted directly using %D \type{\startMPpage ... }\type{\stopMPpage}. %D %D A high-level command is provided if some more advance features will %D be needed in the future and to be able to ensure backward compatibility. %D We need to preserve line breaks, otherwise metapost runs into troubles for longer input. \def\startGNUPLOTpage {\begingroup\dostartGNUPLOTpage} \long\def\dostartGNUPLOTpage#1\stopGNUPLOTpage {\endgroup\startMPpage#1\stopMPpage} % TODO: use a separate instance for MKIV % % \defineMPinstance[gnuplot] % \startTEXpage\startMPcode{gnuplot} % \stopMPcode\stopTEXpage % TODO: currently, the following definitions are used, % but the ones below would be preferred \def\defineGNUPLOThandle#1#2#3#4#5#6% name; output; suffix; conversion-method; gnuplot's result; final result {\setvalue{@@GNUPLOT-#1}{{#2}{#3}{#4}{#5}{#6}}} \def\@@GNUPLOToutput{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}51} \def\@@GNUPLOTsuffix{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}52} \def\@@GNUPLOThandle{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}53} \def\@@GNUPLOTresult{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}54} \def\@@GNUPLOTfinalresult{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}55} % name "set term" suffix conversion (system command) gnuplot's result final result % (suffix is probably not needed any more since full names were introduced) \defineGNUPLOThandle {postscript}{postscript color}{ps}{mtxrun pstopdf \GNUPLOTfile-ps.ps} {\GNUPLOTfile-ps.ps}{\GNUPLOTfile-ps.pdf} \defineGNUPLOThandle {ps}{postscript color}{ps}{mtxrun pstopdf -dAutoRotatePages=/PageByPage \GNUPLOTfile-ps.ps} {\GNUPLOTfile-ps.ps}{\GNUPLOTfile-ps.pdf} \defineGNUPLOThandle {eps}{postscript color eps}{ps}{mtxrun pstopdf -dEPSCrop \GNUPLOTfile-eps.eps} {\GNUPLOTfile-eps.eps}{\GNUPLOTfile-eps.pdf} \defineGNUPLOThandle {pdf}{pdf}{pdf}{} {\GNUPLOTfile-pdf.pdf}{\GNUPLOTfile-pdf.pdf} \defineGNUPLOThandle {pdfcairo}{pdfcairo}{pdf}{} {\GNUPLOTfile-pdfcairo.pdf}{\GNUPLOTfile-pdfcairo.pdf} \defineGNUPLOThandle {metapost}{mp}{mp}{mtxrun mptopdf \GNUPLOTfile-mp.mp} {\GNUPLOTfile-mp.mp}{\GNUPLOTfile-mp-0.pdf} \defineGNUPLOThandle {mp}{mp}{mp}{mtxrun mptopdf \GNUPLOTfile-mp.mp} {\GNUPLOTfile-mp.mp}{\GNUPLOTfile-mp-0.pdf} \defineGNUPLOThandle {png}{png}{png}{} {\GNUPLOTfile-png.png}{\GNUPLOTfile-png.png} \defineGNUPLOThandle {pngcairo}{pngcairo}{png}{} {\GNUPLOTfile-pngcairo.png}{\GNUPLOTfile-pngcairo.png} \defineGNUPLOThandle {tikz}{tikz context createstyle size \@@GNUPLOT@term@tikz@width,\@@GNUPLOT@term@tikz@height\space charsize \the\GNUPLOThcharsize,\the\GNUPLOTvcharsize\space fontscale \@@GNUPLOT@term@tikz@fontscale }{tex}{} {\GNUPLOTfile-tikz.tex}{\GNUPLOTfile-tikz.tex} \defineGNUPLOThandle {context}{context size \@@GNUPLOT@term@context@width,\@@GNUPLOT@term@context@height\space fontscale \@@GNUPLOT@term@context@fontscale }{tex}{} {\GNUPLOTfile-ctx.tex}{\GNUPLOTfile-ctx.tex} % \doifnotempty{\@@GNUPLOT@term@context@fontscale}{fontscale \@@GNUPLOT@term@context@fontscale} \def\defineGNUPLOTterminal {\dodoubleargument\dodefineGNUPLOTterminal} \def\dodefineGNUPLOTterminal[#1][#2]% {\doifassignmentelse{#2}% % define a proper terminal {}% TODO % only define a synonym for that terminal {}% TODO } %D {\sl terminal}: argument to be passed to gnuplot in the form of "set term {\sl terminal}" %D {\sl defaultoptions}: options to be passed to gnuplot after terminal name: %D set term {\sl teminal} {\sl defaultoptions} %D not to be touched by users %D {\sl suffix}: filename suffix %D {\sl result}: the file to which gnuplot should output the result %D set output {\sl result} %D {\sl convertwith}: command for conversion from gnuplot-generated file to a file that can be read by \CONTEXT; may be empty %D {\sl finalresult}: file resulting after the conversion to be read by \CONTEXT %D \POSTSCRIPT\ terminal \defineGNUPLOTterminal [postscript] [terminal=postscript, defaultoptions=color, % TODO: only if \setupcolors[state=start] suffix=ps, result=\GNUPLOTfile-ps.ps, % TODO: -dAutoRotatePages=/PageByPage or remove that option from the default ones convertwith={mtxrun pstopdf \GNUPLOTfile-ps.ps}, finalresult=\GNUPLOTfile-ps.pdf, ] %D Define \type{ps} as a synonym for \type{postscript} terminal \defineGNUPLOTterminal [ps] [postscript] %D \EPS\ terminal: %D - same terminal as for \POSTSCRIPT, but slightly different handling \defineGNUPLOTterminal [eps] [terminal=postscript, defaultoptions=eps color, suffix=eps, result=\GNUPLOTfile-eps.eps, % TODO: -dEPSCrop convertwith={mtxrun pstopdf -dEPSCrop \GNUPLOTfile-eps.eps}, finalresult=\GNUPLOTfile-eps.pdf, ] %D \PDF\ terminal \defineGNUPLOTterminal [pdf] [terminal=pdf, defaultoptions=, suffix=pdf, result=\GNUPLOTfile-pdf.pdf, convertwith=, finalresult=\GNUPLOTfile-pdf.pdf, ] \defineGNUPLOTterminal [pdfcairo] [terminal=pdfcairo, defaultoptions=, suffix=pdf, result=\GNUPLOTfile-pdfcairo.pdf, convertwith=, finalresult=\GNUPLOTfile-pdfcairo.pdf, ] %D \METAPOST\ terminal: %D - deprecated: use the \CONTEXT\ terminal instead, %D which was built starting from the \METAPOST\ one, %D but improved in many aspects \defineGNUPLOTterminal [mp] [terminal=mp, defaultoptions=, suffix=mp, result=\GNUPLOTfile-mp.mp, convertwith={mtxrun mptopdf \GNUPLOTfile-mp.mp}, % TODO: support for multiple graphics % one would need a switch in mptopdf, so that a single pdf would be created instead of multiple ones finalresult=\GNUPLOTfile-mp-0.pdf, ] \defineGNUPLOTterminal [metapost] [mp] %D png terminal: %D - bitmap %D - no conversion needed %D - new version pretty advanced \defineGNUPLOTterminal [png] [terminal=png, defaultoptions=, suffix=png, result=\GNUPLOTfile-png.png, convertwith=, finalresult=\GNUPLOTfile-png.png, ] \defineGNUPLOTterminal [pngcairo] [terminal=pngcairo, defaultoptions=, suffix=png, result=\GNUPLOTfile-pngcairo.png, convertwith=, finalresult=\GNUPLOTfile-pngcairo.png, ] %D \CONTEXT\ terminal (native) \defineGNUPLOTterminal [context] [terminal=context, defaultoptions=, suffix=tex, result=\GNUPLOTfile-ctx.tex, convertwith=, finalresult=\GNUPLOTfile-ctx.tex, ] \def\setupGNUPLOTterminal {\dodoubleargument\dosetupGNUPLOTterminal} \def\dosetupGNUPLOTterminal[#1][#2]% {% TODO \getparameters[@@GNUPLOT@term@#1@][#2] % TODO: width & height % linejoin, linecap - I have to improve this !!! % \edef\gp:term:context:linejoin{\@@GNUPLOT@term@context@linejoin} % \edef\gp:term:context:linecap{\@@GNUPLOT@term@context@linecap} % dashed or solid lines? \doifsamestringelse{\@@GNUPLOT@term@context@dashed}{yes}% yes or no {\edef\@@GNUPLOT@term@context@is@dashed{true}}% {\edef\@@GNUPLOT@term@context@is@dashed{false}}% \doifsamestring{\@@GNUPLOT@term@context@width}{default} {\edef\@@GNUPLOT@term@context@width{5in}} \doifsamestring{\@@GNUPLOT@term@context@height}{default} {\edef\@@GNUPLOT@term@context@height{3in}} % {\edef\gp:term:context:dashed{true}}% % {\edef\gp:term:context:dashed{false}}% % % dashlength scale % \edef\gp:term:context:dashlength{\@@GNUPLOT@term@context@dashlength} % % linewidth scale % \edef\gp:term:context:linewidth{\@@GNUPLOT@term@context@linewidth} % \doifsamestringelse{\@@GNUPLOT@term@context@points}{metapost}% tex or metapost } \setupGNUPLOTterminal [context] [width=default, % *default* (5in) | height=default, % *default* (3in) | linejoin=rounded, % mitered | *rounded* | beveled linecap=butt, % *butt* | rounded (in gnuplot: round) | squared dashed=yes, % *yes* | no dashlength=1, % scaling factor for dash lengths linewidth=1, % scaling factor for line widths (1.0 means 0.4bp) fontscale=1, % scaling factor for text labels points=metapost] % *metapost* | tex (Should points be drawn with MetaPost or TeX?) \setupGNUPLOTterminal [tikz] [width=5in, % *5in* | default (todo) | height=3in, % *3in* | default (todo) | fontscale=1, % scaling factor for text labels ] % TODO: better scaling \defineconversion [gnuplot:pointset] [{\scale[scale=800]{\mathematics{+}}}, {\scale[scale=800]{\mathematics{\times}}}, \mathematics{\ast}, {\scale[scale=700]{\mathematics{\square}}}, {\scale[scale=700]{\mathematics{\blacksquare}}}, \mathematics{\circ}, \mathematics{\bullet}, {\scale[scale=900]{\mathematics{\triangleup}}}, {\scale[scale=900]{\mathematics{\blacktriangle}}}, {\scale[scale=900]{\mathematics{\triangledown}}}, {\scale[scale=900]{\mathematics{\blacktriangledown}}}, {\scale[scale=800]{\mathematics{\lozenge}}}, {\scale[scale=800]{\mathematics{\blacklozenge}}}%, % {\rotate[rotation=45]{\mathematics{\square}}}, % {\rotate[rotation=45]{\mathematics{\blacksquare}}}, ] %\defineGNUPLOTcolor[red] [r=1] %\defineGNUPLOTcolor[green] [g=1] %\defineGNUPLOTcolor[blue] [b=1] %\defineGNUPLOTcolor[magenta][r=1,b=1] %\defineGNUPLOTcolor[cyan] [g=1,b=1] %\defineGNUPLOTcolor[yellow] [r=1,g=1] %\defineGNUPLOTcolor[black] [s=0] %\defineGNUPLOTcolor[orange] [r=1,g=.3,b=0] %\defineGNUPLOTcolor[gray50] [s=.5] %\defineGNUPLOTcolors % [default] % from PostScript % [red,green,blue,magenta,cyan,yellow,black,orange,gray50] % TODO: testset is here only temporary & for testing \setupGNUPLOT[program=gnuplot,\c!terminal=context,\c!purge=\v!yes,\c!options=,\c!pointset=gnuplot:pointset] % colors=postscript %D Some additional typescripts which enable us using font "Arial" and "Helvetica" %D Pretend the font to be serif as well, so that no "ss" switch is needed \starttypescript [serif] [helvetica] [name] \definefontsynonym [Serif] [Helvetica] \definefontsynonym [SerifBold] [Helvetica-Bold] \definefontsynonym [SerifItalic] [Helvetica-Oblique] \definefontsynonym [SerifSlanted] [Helvetica-Oblique] \definefontsynonym [SerifBoldItalic] [Helvetica-BoldOblique] \definefontsynonym [SerifBoldSlanted] [Helvetica-BoldOblique] \definefontsynonym [SerifCaps] [Helvetica] \stoptypescript \beginOLDTEX \starttypescript [gnuplot] [texnansi,ec] \definetypeface [Helvetica] [rm] [serif] [helvetica] [default] [encoding=\typescripttwo] \definetypeface [Helvetica] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo] \definetypeface [Arial] [rm] [serif] [helvetica] [default] [encoding=\typescripttwo] \definetypeface [Arial] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo] \stoptypescript \usetypescript[gnuplot][ec] \endOLDTEX \beginNEWTEX \starttypescript [gnuplot] \definetypeface [Helvetica] [rm] [serif] [helvetica] [default] \definetypeface [Helvetica] [ss] [sans] [helvetica] [default] \definetypeface [Arial] [rm] [serif] [helvetica] [default] \definetypeface [Arial] [ss] [sans] [helvetica] [default] \stoptypescript \usetypescript[gnuplot] \endNEWTEX \stopmodule \protect \doifnotmode{demo}{\endinput} \starttext \startGNUPLOTscript[exp] set key bottom set format x "%.1f" set format y "%.1f" set style fill solid 0.25 noborder plot [0:3] 2/sqrt(pi)*exp(-x**2) t '$\frac{2}{\sqrt{\pi}}e^{-x^2}$' with filledcurves x1 lt 3, erf(x) lc 3 lw 2 \stopGNUPLOTscript \useGNUPLOTgraphic[exp][width=.7\textwidth] \startGNUPLOTinclusions set title "trigonometry" \stopGNUPLOTinclusions \startGNUPLOTscript[sin] plot sin(x) \stopGNUPLOTscript \startGNUPLOTscript[cos] plot cos(x) \stopGNUPLOTscript \useGNUPLOTgraphic[sin] \endgraf \useGNUPLOTgraphic[cos] \endgraf \useGNUPLOTgraphic[cos] \endgraf \setupGNUPLOT[terminal=ps] \useGNUPLOTgraphic[sin][object=no,height=2cm] \blank %setupGNUPLOT[terminal=pdf] \useGNUPLOTgraphic[sin][object=no,height=2cm] \blank %setupGNUPLOT[terminal=png] \useGNUPLOTgraphic[sin][object=no,height=2cm] \blank \setupGNUPLOT[terminal=mp] \useGNUPLOTgraphic[sin][object=no,height=2cm,options=color] \blank \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/third/gnuplot/t-gnuplot.mkiv0000644000175000017500000010635012143265460026412 0ustar norbertnorbert%D \module %D [ file=t-gnuplot.mkiv, %D version=2013.05.09, %D title=\CONTEXT\ Extra Modules, %D subtitle=\GNUPLOT\ Inclusion, %D author={Mojca Miklavec, Marco Patzer, Hans Hagen, Taco Hoekwater, Aditya Mahajan}, %D date=\currentdate, %D copyright=\PRAGMA] % begin info % % title : Gnuplot module % % comment : simplifies inclusion of gnuplot-generated graphs into ConTeXt documents % status : stable, supports both MKII and MKIV % % end info %D This module is used for creating gnuplot graphs on-the-fly and including them %D into documents. %D %D Known Bugs: %D %D \startitemize %D \item spurious space \& page %D \stopitemize %D %D TODO (Optimisations): %D %D \startitemize %D \item optimize the number of gnuplot runs (if possible, gnuplot should be run only once) %D \item optimize the number of times for loading/converting an already used graphic %D \item pstopdf is a bit slow %D \stopitemize %D %D TODO (Handle things that may go wrong): %D - gnuplot executable doesn't exist %D - context terminal isn't available or some other failure in gnuplot script (no file created) %D - write18 disabled (you may call gnuplot later - create a script) %D %D TODO (Missing functionality): %D %D - a lot ... \writestatus{loading}{Gnuplot module} \startmodule[gnuplot] \unprotect \def\c!terminal {terminal} \def\c!options {options} \def\c!pointset {pointset} \def\c!purge {purge} %D MPextensions %D %D XXX %D if possible, they should be specific to \type{\startGNUPLOTgraphic}, %D so unvisible to \type{MPcode} %D (probably something like \type+\appendtoks ... to\everyGNUPLOTgraphic+) \startMPinitializations % load metapost macros (only once) input mp-gnuplot.mp ; % number of points defined with \setupGNUPLOTterminal[pointset=...] %gp_num_points_with_tex := \gp:num:pointswithtex; gp_num_points_with_tex := 3; % main color should be set equal to the current text color gp_color_foreground := \MPcolor{currentcolor}; gp_color_lt[-2] := gp_color_foreground; % TODO: is there any chance to make this local to gnuplot? % linejoin & linecap linejoin := \@@GNUPLOT@term@context@linejoin; % linecap := \gp:term:context:linecap; % dashes or solid? (true/false) gp_use_dashed := \@@GNUPLOT@term@context@is@dashed; % dashlength scale % gp_scale_dashlength := \gp:term:context:dashlength; % linewidth scale gp_scale_linewidth := \@@GNUPLOT@term@context@linewidth; gp_scale_text := \@@GNUPLOT@term@context@fontscale; % linejoin := \gp:term:context:linejoin; % linecap := \gp:term:context:linecap; % % dashes or solid? (true/false) % gp_use_dashed := \gp:term:context:dashed; % % dashlength scale % gp_scale_dashlength := \gp:term:context:dashlength; % % linewidth scale % gp_scale_linewidth := \gp:term:context:linewidth; gp_points_with := gp_points_with_\@@GNUPLOT@term@context@points; \stopMPinitializations %D We need a \type{\strut} in front of labels for better vertical centering. %D This might still fail for Zapfino and alike where \type{\strut} might be smaller %D than the actual font height. %D %D TODO (optional improvement): instead of placing \type{\strut} in front, %D create a \type{\hbox} and adjust it's dimensions to \type{\strut}'s height and depth. %D Aditya, thanks a lot for requesting it! %D Hans, thanks a lot for implementing this! \definetextext[gp]{\strut} %D TODO (feature request): %D \starttyping %D \sometxt[gp][ss,20pt]{abc} %D \stoptyping %D should become equivalent to %D \starttyping %D \sometxt{\switchtobodyfont[ss,20pt]\strut abc} %D \stoptyping %D %D Or, even more drastic perhaps, I would love to implement %D \starttyping %D \sometxt[gp][iwona,bold,c]{abc} %D \stoptyping %D meaning: iwona, bold typeface, size \quote{c} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TODO: make \sometxt[gp][12pt]{text} work in MKIV %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcounter\GNUPLOTnumber \newdimen\GNUPLOThcharsize \newdimen\GNUPLOTvcharsize \newcounter\tikzGNUPLOTnumber % macro to calculate true character size from current font % (However it is not 100 % that it gets the job properly done % in case that other font settings are used inside the picture.) \def\calculateGNUPLOTcharsize{% \global\GNUPLOThcharsize=1.05\fontcharwd\font`0% \global\GNUPLOTvcharsize=1.05\fontcharht\font`0% \global\advance\GNUPLOTvcharsize by 1.05\fontchardp\font`g% } %D \macros %D {startGNUPLOTinclusions, resetGNUPLOTinclusions} %D %D For those who want to have two or more graphs with similar options, %D these options may be included inside \type{\startMPinclusions ... \stopMPinclusions} %D and will be place on the top of the created \GNUPLOT\ script. %D %D \starttyping %D \startGNUPLOTinclusions %D set xlabel '$x$' %D set ylabel '$y$' %D set format y "%.1f" %D \stopGNUPLOTinclusions %D %D \startGNUPLOTscript[sin] %D plot sin(x) %D \stopGNUPLOTscript %D \startGNUPLOTscript[cos] %D plot cos(x) %D \stopGNUPLOTscript %D \stoptyping \long\def\startGNUPLOTinclusions {\def\stopGNUPLOTinclusions{\ifx\savebuffer\undefined \else \savebuffer[gnuplot-inclusions]\fi}% \dostartbuffer[gnuplot-inclusions][startGNUPLOTinclusions][stopGNUPLOTinclusions]} % \def\resetGNUPLOTinclusions{\let\GNUPLOTinclusions\empty} % creates an empty file (there must be a cleaner way to do it) \def\resetGNUPLOTinclusions {\immediate\openout\scratchwrite=\jobname-gnuplot-inclusions.tmp \immediate\closeout\scratchwrite} %\startbuffer[gnuplot-inclusions]\stopbuffer\ifx\savebuffer\undefined \else \savebuffer[gnuplot-inclusions]\fi} \resetGNUPLOTinclusions %D On the other hand, one can probably achieve the same effect %D when drawing two plots inside the same script, like that: %D %D \starttyping %D \startGNUPLOTscript[sin and cos] %D set xlabel '$x$' %D set ylabel '$y$' %D set format y "%.1f" %D plot sin(x) %D plot cos(x) %D \stopGNUPLOTscript %D \stoptyping %D %D and then recall the graphics using \type{\useGNUPLOTgraphic[sin and cos][1]}. %D \macros %D {startGNUPLOTscript} %D %D \starttyping %D \startGNUPLOTscript{some name} %D plot sin(x) %D \stopGNUPLOTscript %D \stoptyping \def\startGNUPLOTscript {\bgroup\dosingleempty\dostartGNUPLOTscript} % \def\redostartGNUPLOTscript#1 % {\obeylines % \catcode`\%=\@@letter % \catcode`\|=\@@letter % \catcode`\$=\@@letter % \dodostartGNUPLOTscript{#1}% % %\dostartGNUPLOTscript[#2] % } % % \def\dostartGNUPLOTscript[#1]% % {\iffirstargument % \obeylines % \catcode`\%=\@@letter % \catcode`\|=\@@letter % \catcode`\$=\@@letter % \dodostartGNUPLOTscript{#1}% % \else % \redostartGNUPLOTscript % \fi % } \def\dostartGNUPLOTscript[#1]% {%\iffirstargument \dodostartGNUPLOTscript{#1}% %\else % \dodostartGNUPLOTscript %\fi } % gps:n:{name} = gnuplotscript : number : {name} - number of script with name {name} \long\def\dodostartGNUPLOTscript#1%#2\stopGNUPLOTscript {\doglobal\increment\GNUPLOTnumber \letgvalue{gps:n:#1}\GNUPLOTnumber % in case of LuaTeX we need to write the buffer into file explicitely \def\stopGNUPLOTscript{\egroup \ifx\savebuffer\undefined \else \savebuffer[gnuplot-\GNUPLOTnumber]\fi}% \dostartbuffer[gnuplot-\GNUPLOTnumber][startGNUPLOTscript][stopGNUPLOTscript]% } % When are the graphics processed/read? % % - \gps:n:{name} (gnuplot script:name:{name}) holds the number of gnuplot script; % - that number was defined if we created the plot using \startGNUPLOTscript{name} % - and most probably undefined if we only issued \processGNUPLOTfile[name][filename] % => if, at the time of issuing \processGNUPLOTfile[name][filename], \gps:n:{name} is not defined, % it should be defined at that time % - \gpe:{name}:{terminal} (gnuplot graphic executed:{name}:{terminal}) % is defined if we executed the command for that specific name and for that terminal % (once it will probably be 0 for a failed run and 1 for a successful one) % \useGNUPLOTgraphic[name] has three different ways of working: % - it can be called after \processGNUPLOTfile[name][filename] % which defined MP graphics that are now used % - it can be called for the first time under the current terminal % in that case it compiles the graphic and includes it % - it can be called for the second, third, ... time % in which case it only includes files without compiling it %D \macros %D {useGNUPLOTgraphic} % 5 ways of calling it: % - \useGNUPLOTgraphic{name} % - \useGNUPLOTgraphic[name] % - \useGNUPLOTgraphic[name][1,2,5] % - \useGNUPLOTgraphic[name][width=.8\textwidth] % - \useGNUPLOTgraphic[name][1,2,5][width=.8\textwidth] % this code takes care of reading arguments \def\useGNUPLOTgraphic {\dotripleempty\douseGNUPLOTgraphic} \def\douseGNUPLOTgraphic[#1][#2][#3]% {\doifelse{#3}{}{% % < 3 arguments \doifelse{#2}{}% % 1 argument % as in \useGNUPLOTgraphic[name] {\dodouseGNUPLOTgraphic[#1][][]}% % % as in \useGNUPLOTgraphic{name} % {\redouseGNUPLOTgraphic[][][]}% % 2 arguments {\doifassignmentelse{#2}% % as in \useGNUPLOTgraphic[name][width=.8\textwidth] {\dodouseGNUPLOTgraphic[#1][][#2]}% % as in \useGNUPLOTgraphic[name][1,2,5] {\dodouseGNUPLOTgraphic[#1][#2][]}% }% }% % as in \useGNUPLOTgraphic[name][1,2,5][width=.8\textwidth] {\dodouseGNUPLOTgraphic[#1][#2][#3]}% } \def\redouseGNUPLOTgraphic[#1][#2][#3]#4% {\dodouseGNUPLOTgraphic[#4][][]} % and this code actually does something with it %D \doifundefined {string} {...} %D \doifdefined {string} {...} %D \doifundefinedelse {string} {then ...} {else ...} %D \doifdefinedelse {string} {then ...} {else ...} % \doifGNUPLOTscriptdefined{name}{...} % if gnuplot script with {name} and current terminal has already been processed % \doifGNUPLOTscriptprocessed{name}{...} % \letGNUPLOTscriptprocessed[optional terminal]{name} signals that the gnuplot script named {name} % has already been processed with the current terminal % TODO: currently it is always defined to be one as soon as one tries to process it, % even if en error is produced; in future it would be helpful if it would be set to zero % if it was unsuccessfully executed; % that is needed, since scripts are processed only when one first asks for including the graphic \def\letGNUPLOTscriptprocessed {\dosingleempty\doletGNUPLOTscriptprocessed} %\def\doletGNUPLOTscriptprocessed[#1]#2% %{\letgvalue{gpe:#1:\@@GNUPLOTterminal}\plusone} \def\doletGNUPLOTscriptprocessed[#1]#2% {\iffirstargument % terminal has been specified \letgvalue{gpe:#2:#1}\plusone \else % no terminal specified - use the current one \letgvalue{gpe:#2:\@@GNUPLOTterminal}\plusone \fi} % Although that should preferably not happen, one might come to an idea of defining % a gnuplot script with the same name as already defined. % In that case the old script cannot be referenced any more, but we can still try % to do out best to make it work anyway. We have to do two things: % - claim that script with that name hasn't been defined yet, so that processing will happen again % (TODO: do it in a more elegant way for all known terminals) % - undefine any metapost graphics (TODO: I have no idea yet how it can be done) % % \resetGNUPLOTscriptprocessed{name} \def\resetGNUPLOTscriptprocessed#1% {\bgroup % claim that the script with {name} (#1) hasn't been processed with {terminal} (##1) yet \def\undefineGNUPLOTscriptforterminal##1{\letbeundefined{gpe:#1:##1}}% % TODO: the list of available terminals should be generated automatically \processcommalist[context,postscript,ps,eps,pdf,metapost,mp,png]\undefineGNUPLOTscriptforterminal \resetGNUPLOTgraphics{#1}% \egroup} % \resetGNUPLOTgraphics{name} undefines any gnuplot graphic defined with \startGNUPLOTgraphic[name][number] \def\resetGNUPLOTgraphics#1% {\doloop {\doifMPgraphicelse{gpg:#1:\recurselevel}% % TODO: be aware - @@MPG is low-level ConTeXt variable which might change without notice, % it would be better to call this \undefineMPgraphic{gpg:#1:\recurselevel} or something similar {\letbeundefined{@@MPGgpg:#1:\recurselevel}}% {\exitloop}}% \doloop {\doifdefinedelse{TKZp:#1:\recurselevel}% {\letbeundefined{TKZp:#1:\recurselevel}}% {\exitloop}}% }% % TODO: this can probably be done in a better way \def\doifGNUPLOTscriptprocessed#1#2% {\doifdefined {gpe:#1:\@@GNUPLOTterminal}{#2}} \def\doifGNUPLOTscriptprocessedelse#1#2#3% {\doifdefinedelse {gpe:#1:\@@GNUPLOTterminal}{#2}{#3}} \def\doifGNUPLOTscriptnotprocessed#1#2% {\doifundefined {gpe:#1:\@@GNUPLOTterminal}{#2}} \def\doifGNUPLOTscriptnotprocessedelse#1#2#3% {\doifundefinedelse{gpe:#1:\@@GNUPLOTterminal}{#2}{#3}} % private % \writeandprocessGNUPLOTscript{name} \def\writeandprocessGNUPLOTscript#1% % TODO: if gps:n:#1 (holding the script content) is not defined, % error or warning should be issued % % only process the script if it has been defined and not processed before for the current terminal {\doifdefined{gps:n:#1}{\doifGNUPLOTscriptnotprocessed{#1}{% % \gpe:{name}:{terminal} is defined %\setgvalue{gpe:#1:\@@GNUPLOTterminal}{#2} \letGNUPLOTscriptprocessed{#1}% % call to gnuplot and processing/converting the graphics is only needed in the first ConTeXt run \doifmode{*\v!first}{% (perhaps also: if files haven't changed) \bgroup % for TikZ we want to calculate character size, so that it gets printed % to inclusions with \@@GNUPLOToptions \calculateGNUPLOTcharsize % catcodes trickery & alike %\the\everyGNUPLOTscript % open file for writing \immediate\openout\scratchwrite=\GNUPLOTfile.plt % TODO: terminal-specific options (default or provided by the user) \immediate\write\scratchwrite{\letterhash\space Do not modify this file - all changes will be overwritten}% \immediate\write\scratchwrite{\letterhash\space Change \jobname.tex instead.}% \immediate\write\scratchwrite{set terminal \@@GNUPLOToutput\space\@@GNUPLOToptions}% % add common inclusions in scripts for multiple similar plots %\doifnotempty % {\GNUPLOTinclusions}{\immediate\write\scratchwrite{\GNUPLOTinclusions}}% % include common gnuplot 'inclusions' \immediate\write\scratchwrite{load '\jobname-gnuplot-inclusions.tmp'}% % output file \immediate\write\scratchwrite{set output "\@@GNUPLOTresult"}% % write main contents of the script, like "plot sin(x)" %\immediate\write\scratchwrite{\getvalue{gps:d:\GNUPLOTnumber}}% \immediate\write\scratchwrite{load '\GNUPLOTfile.tmp'}% \immediate\closeout\scratchwrite \egroup % TODO: % - check the state of write18 and warn the user if it's disabled, % otherwise just everyone will start complaining that the module doens't work % - check if execution was successful; possible pitfalls: % - gnuplot doesn't exist as a binary % - gnuplot doesn't support context terminal % or some other error in script which results in empty output file % % run gnuplot & execute the script that has just been written % \executesystemcommand{mtxrun --ifchanged=\GNUPLOTfile.plt\space % --direct \@@GNUPLOTprogram\space\GNUPLOTfile.plt}% \executesystemcommand{mtxrun --direct \@@GNUPLOTprogram\space\GNUPLOTfile.plt}% \writestatus{aaa}{mtxrun --direct \@@GNUPLOTprogram\space\GNUPLOTfile.plt}% \convertGNUPLOTgraphic }% % for ConTeXt terminal only - read the result \doif{\@@GNUPLOTterminal}{context}{\processGNUPLOTfile[#1][\@@GNUPLOTresult]}% \doif{\@@GNUPLOTterminal}{tikz} {\processGNUPLOTfile[#1][\@@GNUPLOTresult]}% }}} % \dodouseGNUPLOTgraphic[name][numbers][options] \def\dodouseGNUPLOTgraphic[#1][#2][#3]% {\bgroup \doifdefinedelse{gps:n:#1} {\edef\GNUPLOTnumber{\getvalue{gps:n:#1}}% \edef\GNUPLOTfile {\jobname-gnuplot-\GNUPLOTnumber}% \writeandprocessGNUPLOTscript{#1}% % "ctxtools --purge" should delete the gnuplot script and other intermediate files % (but it seems that they are deleted automatically already; preferred or not?) % \registertempfile{\GNUPLOTfile.plt} % \registertempfile{\@@GNUPLOTresult} % \registertempfile{\@@GNUPLOTfinalresult} \doifelse{\@@GNUPLOTterminal}{context}% % for ConTeXt terminal only {\doifelse{#2}{}% % if no explicit figure number was specified, include all the figures {\doloop {\doifMPgraphicelse{gpg:#1:\recurselevel}% {\scale[#3]{\reuseMPgraphic{gpg:#1:\recurselevel}}}% {\exitloop}}}% % if numbers were specified, include the figures specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\doifMPgraphicelse {gpg:#1:##1}% {\scale[#3]{\reuseMPgraphic{gpg:#1:##1}}}% % if graphic doesn't exist: draw a dummy frame instead and warn the user {\scale[#3]{\framed[frame=on,width=5in,height=3in,align={middle,lohi}]{GNUPLOT graphic #1, Nr. ##1 doesn't exist}}}}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }{% % for TikZ terminal only \doifelse{\@@GNUPLOTterminal}{tikz}% {\doifelse{#2}{}% % if no explicit figure number was specified, include all the figures {\doloop {\doifdefinedelse{TKZp:#1:\recurselevel}% {\scale[#3]{\getvalue{TKZp:#1:\recurselevel}}}% {\exitloop}}}% % if numbers were specified, include the figures specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\doifdefinedelse {TKZp:#1:##1}% {\scale[#3]{\getvalue{TKZp:#1:##1}}}% % if graphic doesn't exist: draw a dummy frame instead and warn the user {\scale[#3]{\framed[frame=on,width=5in,height=3in,align={middle,lohi}]{GNUPLOT graphic #1, Nr. ##1 doesn't exist}}}}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }% % for all the other terminals % TODO: add more safety switches (if pages don't exist for example) {\doifelse{#2}{}% % if no explicite figure number was specified, include all the pages % TODO: properly handle METAPOST & PNG (only works for (E)PS & PDF) !!! {\getfiguredimensions[\@@GNUPLOTfinalresult]% \dorecurse{\noffigurepages}{\externalfigure[\@@GNUPLOTfinalresult][page=\recurselevel,#3]}}% % if numbers were specified, include the pages specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\externalfigure[\@@GNUPLOTfinalresult][page=##1,#3]}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }}% }% % else part - in case that graphic gets included with \processGNUPLOTfile[name][file] {\doifelse{\@@GNUPLOTterminal}{context} % TODO: this part has been literally copied from above; create a subroutine instead {\doifelse{#2}{}% % if no explicit figure number was specified, include all the figures {\doloop {\doifMPgraphicelse{gpg:#1:\recurselevel}% {\scale[#3]{\reuseMPgraphic{gpg:#1:\recurselevel}}}% {\exitloop}}}% % if numbers were specified, include the figures specified in the list only {\begingroup \def\useGNUPLOTgraphicN##1{\doifMPgraphicelse {gpg:#1:##1}% {\scale[#3]{\reuseMPgraphic{gpg:#1:##1}}}% % if graphic doesn't exist: draw a dummy frame instead and warn the user {\scale[#3]{\framed[frame=on,width=5in,height=3in,align={middle,lohi}]{GNUPLOT graphic #1, Nr. ##1 doesn't exist}}}}% \processcommalist[#2]\useGNUPLOTgraphicN \endgroup }% }% {\message{The gnuplot graphic #1 has not been defined.}}}% \egroup} %D \macros %D {setupGNUPLOT} \def\setupGNUPLOT % {\dodoubleempty\getparameters[@@GNUPLOT]} {\dosingleargument\dosetupGNUPLOT} \def\dosetupGNUPLOT[#1]% {\getparameters[@@GNUPLOT][#1]% % define all the necessary points according to the option "pointset" % % XXX: no idea why this is needed, but otherwise it complains that @@GNUPLOTpointset is undefined \edef\currentGNUPLOTpointset{\@@GNUPLOTpointset}% % \gp:num:pointswithtex is passed to metapost, so that it knows % how many points are defined and chooses the proper point % form a set of the defined ones % % for safety reasons define \gp:num:pointswithtex to be equal to 1 (it can only increase later), otherwise: % - (something mod 0) won't work % - if conversion is not defined, the number will retain its old value (not desirable) \edef\gp:num:pointswithtex{1}% \doloop{\doifelseconversionnumber{\@@GNUPLOTpointset}{\recurselevel}% {\edef\gp:num:pointswithtex{\recurselevel}}% {\exitloop}}% % in case of TikZ terminal we have to generate the needed style files first \doif{\@@GNUPLOTterminal}{tikz} {\executesystemcommand{gnuplot -e "set term tikz context createstyle"}\usemodule[gnuplot-lua-tikz]} % TODO: % - issue a warning if user wants to use points with TeX, % but pointset= is undefined (if the first point doesn't exist) % - no idea what happens if conversion is infinite, % so try to stop at some reasonable value (100?) % - current implementation redefines the points even if only terminal type % has been set to some other value (which is a stupid approach, but I % wanted to have a working version first and will consider efficiency later) % - it may be that the old points remain defined if conversion changes % (perhaps they should be undefined again?) } % Hans has written this piece of code, but: % - "start" and "/MIN" caused problems % - pgnuplot is not much more "portable" than gnuplot % best thing to do is to create a "gnuplot.bat" somewhere in PATH % %\def\processGNUPLOTscript % {\doifelse\operatingsystem{mswin} % {\executesystemcommand{start /MIN pgnuplot \GNUPLOTfile.plt}} % start is needed else gp fails % {\executesystemcommand{gnuplot \GNUPLOTfile.plt}}} %\def\processGNUPLOTscript % {\executesystemcommand{gnuplot \GNUPLOTfile.plt}} % TODO: check if write18 is enabled; if not, issue a command and warn the user that running the module might be pointless or that he/she has to run gnuplot on the produced files manually \def\convertGNUPLOTgraphic {\doifsomething\@@GNUPLOThandle{\writestatus{conversion}{\@@GNUPLOThandle}\executesystemcommand{\@@GNUPLOThandle}}} %D \macros %D {processGNUPLOTfile} %D It's needed to input a file resulting from a gnuplot run (with ConTeXt terminal). %D It reads the file and "saves" the metapost graphics defined in that file, %D so that they can be used with \usegnuplotgraphic (low level: \reuseMPgraphic) later %D % \processGNUPLOTfile[NAME][filename] \def\processGNUPLOTfile {\dodoubleargument\doprocessGNUPLOTfile} \def\doprocessGNUPLOTfile[#1][#2]% {\bgroup % for ConTeXt teminal %-------------------- % we first define two commands: \startGNUPLOTgraphic & \stopGNUPLOTgraphic to read the files in; % files that gnuplot creates in non-standalone mode look approximately like this: % % \startGNUPLOTgraphic[1] % ... metapost commands to draw the graph ... % \stopGNUPLOTgraphic % \startGNUPLOTgraphic[2] % ... metapost commands to draw the graph ... % \stopGNUPLOTgraphic % ... % % while reading the file in, metapost graphics named "gpg:{name}:{number}" are defined % % (we might need some additional arguments later on, but for now the figure number should suffice) \def\startGNUPLOTgraphic {%\obeyMPlines % <- no longer a problem \def\obeyedline{}% <- thanks to this \dosingleargument\dostartGNUPLOTgraphic}% \long\def\dostartGNUPLOTgraphic[##1]##2\stopGNUPLOTgraphic {\startreusableMPgraphic{gpg:#1:##1}##2\stopreusableMPgraphic}% %------------------ % for TikZ terminal %------------------ \newcounter\tikzGNUPLOTnumber \let\normalstarttikzpicture=\starttikzpicture \let\normalstoptikzpicture=\stoptikzpicture \long\def\starttikzpicture##1\stoptikzpicture% {\increment\tikzGNUPLOTnumber % \long\setgvalue{TKZp:#1:\tikzGNUPLOTnumber}{##1}} \long\setgvalue{TKZp:#1:\tikzGNUPLOTnumber}{\hbox{\starttikzpicture##1\stoptikzpicture}}} %--------- % for both %--------- % input the file % TODO: error / warning if the files doesn't exist \readlocfile{#2}{}{}% the third argument should be: if file not found % this file is known % TODO \letgvalue{gpf:#1}\plusone \egroup } %D \macros %D {startGNUPLOTpage} %D %D Used for standalone \GNUPLOT\ figures & written out by gnuplot in standalone mode. %D %D Instead of having to \type{\useGNUPLOTgraphic}, a figure is inserted directly using %D \type{\startMPpage ... }\type{\stopMPpage}. %D %D A high-level command is provided if some more advance features will %D be needed in the future and to be able to ensure backward compatibility. %D We need to preserve line breaks, otherwise metapost runs into troubles for longer input. \def\startGNUPLOTpage {\begingroup\dostartGNUPLOTpage} \long\def\dostartGNUPLOTpage#1\stopGNUPLOTpage {\endgroup\startMPpage#1\stopMPpage} % TODO: use a separate instance for MKIV % % \defineMPinstance[gnuplot] % \startTEXpage\startMPcode{gnuplot} % \stopMPcode\stopTEXpage % TODO: currently, the following definitions are used, % but the ones below would be preferred \def\defineGNUPLOThandle#1#2#3#4#5#6% name; output; suffix; conversion-method; gnuplot's result; final result {\setvalue{@@GNUPLOT-#1}{{#2}{#3}{#4}{#5}{#6}}} \def\@@GNUPLOToutput{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}51} \def\@@GNUPLOTsuffix{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}52} \def\@@GNUPLOThandle{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}53} \def\@@GNUPLOTresult{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}54} \def\@@GNUPLOTfinalresult{\filterfromvalue{@@GNUPLOT-\@@GNUPLOTterminal}55} % name "set term" suffix conversion (system command) gnuplot's result final result % (suffix is probably not needed any more since full names were introduced) \defineGNUPLOThandle {postscript}{postscript color}{ps}{mtxrun pstopdf \GNUPLOTfile-ps.ps} {\GNUPLOTfile-ps.ps}{\GNUPLOTfile-ps.pdf} \defineGNUPLOThandle {ps}{postscript color}{ps}{mtxrun pstopdf -dAutoRotatePages=/PageByPage \GNUPLOTfile-ps.ps} {\GNUPLOTfile-ps.ps}{\GNUPLOTfile-ps.pdf} \defineGNUPLOThandle {eps}{postscript color eps}{ps}{mtxrun pstopdf -dEPSCrop \GNUPLOTfile-eps.eps} {\GNUPLOTfile-eps.eps}{\GNUPLOTfile-eps.pdf} \defineGNUPLOThandle {pdf}{pdf}{pdf}{} {\GNUPLOTfile-pdf.pdf}{\GNUPLOTfile-pdf.pdf} \defineGNUPLOThandle {pdfcairo}{pdfcairo}{pdf}{} {\GNUPLOTfile-pdfcairo.pdf}{\GNUPLOTfile-pdfcairo.pdf} \defineGNUPLOThandle {metapost}{mp}{mp}{mtxrun mptopdf \GNUPLOTfile-mp.mp} {\GNUPLOTfile-mp.mp}{\GNUPLOTfile-mp-0.pdf} \defineGNUPLOThandle {mp}{mp}{mp}{mtxrun mptopdf \GNUPLOTfile-mp.mp} {\GNUPLOTfile-mp.mp}{\GNUPLOTfile-mp-0.pdf} \defineGNUPLOThandle {png}{png}{png}{} {\GNUPLOTfile-png.png}{\GNUPLOTfile-png.png} \defineGNUPLOThandle {pngcairo}{pngcairo}{png}{} {\GNUPLOTfile-pngcairo.png}{\GNUPLOTfile-pngcairo.png} \defineGNUPLOThandle {tikz}{tikz context createstyle size \@@GNUPLOT@term@tikz@width,\@@GNUPLOT@term@tikz@height\space charsize \the\GNUPLOThcharsize,\the\GNUPLOTvcharsize\space fontscale \@@GNUPLOT@term@tikz@fontscale }{tex}{} {\GNUPLOTfile-tikz.tex}{\GNUPLOTfile-tikz.tex} \defineGNUPLOThandle {context}{context size \@@GNUPLOT@term@context@width,\@@GNUPLOT@term@context@height\space fontscale \@@GNUPLOT@term@context@fontscale }{tex}{} {\GNUPLOTfile-ctx.tex}{\GNUPLOTfile-ctx.tex} % \doifnotempty{\@@GNUPLOT@term@context@fontscale}{fontscale \@@GNUPLOT@term@context@fontscale} \def\defineGNUPLOTterminal {\dodoubleargument\dodefineGNUPLOTterminal} \def\dodefineGNUPLOTterminal[#1][#2]% {\doifassignmentelse{#2}% % define a proper terminal {}% TODO % only define a synonym for that terminal {}% TODO } %D {\sl terminal}: argument to be passed to gnuplot in the form of "set term {\sl terminal}" %D {\sl defaultoptions}: options to be passed to gnuplot after terminal name: %D set term {\sl teminal} {\sl defaultoptions} %D not to be touched by users %D {\sl suffix}: filename suffix %D {\sl result}: the file to which gnuplot should output the result %D set output {\sl result} %D {\sl convertwith}: command for conversion from gnuplot-generated file to a file that can be read by \CONTEXT; may be empty %D {\sl finalresult}: file resulting after the conversion to be read by \CONTEXT %D \POSTSCRIPT\ terminal \defineGNUPLOTterminal [postscript] [terminal=postscript, defaultoptions=color, % TODO: only if \setupcolors[state=start] suffix=ps, result=\GNUPLOTfile-ps.ps, % TODO: -dAutoRotatePages=/PageByPage or remove that option from the default ones convertwith={mtxrun pstopdf \GNUPLOTfile-ps.ps}, finalresult=\GNUPLOTfile-ps.pdf, ] %D Define \type{ps} as a synonym for \type{postscript} terminal \defineGNUPLOTterminal [ps] [postscript] %D \EPS\ terminal: %D - same terminal as for \POSTSCRIPT, but slightly different handling \defineGNUPLOTterminal [eps] [terminal=postscript, defaultoptions=eps color, suffix=eps, result=\GNUPLOTfile-eps.eps, % TODO: -dEPSCrop convertwith={mtxrun pstopdf -dEPSCrop \GNUPLOTfile-eps.eps}, finalresult=\GNUPLOTfile-eps.pdf, ] %D \PDF\ terminal \defineGNUPLOTterminal [pdf] [terminal=pdf, defaultoptions=, suffix=pdf, result=\GNUPLOTfile-pdf.pdf, convertwith=, finalresult=\GNUPLOTfile-pdf.pdf, ] \defineGNUPLOTterminal [pdfcairo] [terminal=pdfcairo, defaultoptions=, suffix=pdf, result=\GNUPLOTfile-pdfcairo.pdf, convertwith=, finalresult=\GNUPLOTfile-pdfcairo.pdf, ] %D \METAPOST\ terminal: %D - deprecated: use the \CONTEXT\ terminal instead, %D which was built starting from the \METAPOST\ one, %D but improved in many aspects \defineGNUPLOTterminal [mp] [terminal=mp, defaultoptions=, suffix=mp, result=\GNUPLOTfile-mp.mp, convertwith={mtxrun mptopdf \GNUPLOTfile-mp.mp}, % TODO: support for multiple graphics % one would need a switch in mptopdf, so that a single pdf would be created instead of multiple ones finalresult=\GNUPLOTfile-mp-0.pdf, ] \defineGNUPLOTterminal [metapost] [mp] %D png terminal: %D - bitmap %D - no conversion needed %D - new version pretty advanced \defineGNUPLOTterminal [png] [terminal=png, defaultoptions=, suffix=png, result=\GNUPLOTfile-png.png, convertwith=, finalresult=\GNUPLOTfile-png.png, ] \defineGNUPLOTterminal [pngcairo] [terminal=pngcairo, defaultoptions=, suffix=png, result=\GNUPLOTfile-pngcairo.png, convertwith=, finalresult=\GNUPLOTfile-pngcairo.png, ] %D \CONTEXT\ terminal (native) \defineGNUPLOTterminal [context] [terminal=context, defaultoptions=, suffix=tex, result=\GNUPLOTfile-ctx.tex, convertwith=, finalresult=\GNUPLOTfile-ctx.tex, ] \def\setupGNUPLOTterminal {\dodoubleargument\dosetupGNUPLOTterminal} \def\dosetupGNUPLOTterminal[#1][#2]% {% TODO \getparameters[@@GNUPLOT@term@#1@][#2] % TODO: width & height % linejoin, linecap - I have to improve this !!! % \edef\gp:term:context:linejoin{\@@GNUPLOT@term@context@linejoin} % \edef\gp:term:context:linecap{\@@GNUPLOT@term@context@linecap} % dashed or solid lines? \doifsamestringelse{\@@GNUPLOT@term@context@dashed}{yes}% yes or no {\edef\@@GNUPLOT@term@context@is@dashed{true}}% {\edef\@@GNUPLOT@term@context@is@dashed{false}}% \doifsamestring{\@@GNUPLOT@term@context@width}{default} {\edef\@@GNUPLOT@term@context@width{5in}} \doifsamestring{\@@GNUPLOT@term@context@height}{default} {\edef\@@GNUPLOT@term@context@height{3in}} % {\edef\gp:term:context:dashed{true}}% % {\edef\gp:term:context:dashed{false}}% % % dashlength scale % \edef\gp:term:context:dashlength{\@@GNUPLOT@term@context@dashlength} % % linewidth scale % \edef\gp:term:context:linewidth{\@@GNUPLOT@term@context@linewidth} % \doifsamestringelse{\@@GNUPLOT@term@context@points}{metapost}% tex or metapost } \setupGNUPLOTterminal [context] [width=default, % *default* (5in) | height=default, % *default* (3in) | linejoin=rounded, % mitered | *rounded* | beveled linecap=butt, % *butt* | rounded (in gnuplot: round) | squared dashed=yes, % *yes* | no dashlength=1, % scaling factor for dash lengths linewidth=1, % scaling factor for line widths (1.0 means 0.4bp) fontscale=1, % scaling factor for text labels points=metapost] % *metapost* | tex (Should points be drawn with MetaPost or TeX?) \setupGNUPLOTterminal [tikz] [width=5in, % *5in* | default (todo) | height=3in, % *3in* | default (todo) | fontscale=1, % scaling factor for text labels ] % TODO: better scaling \defineconversion [gnuplot:pointset] [{\scale[scale=800]{\mathematics{+}}}, {\scale[scale=800]{\mathematics{\times}}}, \mathematics{\ast}, {\scale[scale=700]{\mathematics{\square}}}, {\scale[scale=700]{\mathematics{\blacksquare}}}, \mathematics{\circ}, \mathematics{\bullet}, {\scale[scale=900]{\mathematics{\triangleup}}}, {\scale[scale=900]{\mathematics{\blacktriangle}}}, {\scale[scale=900]{\mathematics{\triangledown}}}, {\scale[scale=900]{\mathematics{\blacktriangledown}}}, {\scale[scale=800]{\mathematics{\lozenge}}}, {\scale[scale=800]{\mathematics{\blacklozenge}}}%, % {\rotate[rotation=45]{\mathematics{\square}}}, % {\rotate[rotation=45]{\mathematics{\blacksquare}}}, ] %\defineGNUPLOTcolor[red] [r=1] %\defineGNUPLOTcolor[green] [g=1] %\defineGNUPLOTcolor[blue] [b=1] %\defineGNUPLOTcolor[magenta][r=1,b=1] %\defineGNUPLOTcolor[cyan] [g=1,b=1] %\defineGNUPLOTcolor[yellow] [r=1,g=1] %\defineGNUPLOTcolor[black] [s=0] %\defineGNUPLOTcolor[orange] [r=1,g=.3,b=0] %\defineGNUPLOTcolor[gray50] [s=.5] %\defineGNUPLOTcolors % [default] % from PostScript % [red,green,blue,magenta,cyan,yellow,black,orange,gray50] % TODO: testset is here only temporary & for testing \setupGNUPLOT[program=gnuplot,\c!terminal=context,\c!purge=\v!yes,\c!options=,\c!pointset=gnuplot:pointset] % colors=postscript %D Some additional typescripts which enable us using font "Arial" and "Helvetica" %D Pretend the font to be serif as well, so that no "ss" switch is needed \starttypescript [serif] [helvetica] [name] \definefontsynonym [Serif] [Helvetica] \definefontsynonym [SerifBold] [Helvetica-Bold] \definefontsynonym [SerifItalic] [Helvetica-Oblique] \definefontsynonym [SerifSlanted] [Helvetica-Oblique] \definefontsynonym [SerifBoldItalic] [Helvetica-BoldOblique] \definefontsynonym [SerifBoldSlanted] [Helvetica-BoldOblique] \definefontsynonym [SerifCaps] [Helvetica] \stoptypescript \starttypescript [gnuplot] \definetypeface [Helvetica] [rm] [serif] [helvetica] [default] \definetypeface [Helvetica] [ss] [sans] [helvetica] [default] \definetypeface [Arial] [rm] [serif] [helvetica] [default] \definetypeface [Arial] [ss] [sans] [helvetica] [default] \stoptypescript \usetypescript[gnuplot] \stopmodule \protect \doifnotmode{demo}{\endinput} \starttext \startGNUPLOTscript[exp] set key bottom set format x "%.1f" set format y "%.1f" set style fill solid 0.25 noborder plot [0:3] 2/sqrt(pi)*exp(-x**2) t '$\frac{2}{\sqrt{\pi}}e^{-x^2}$' with filledcurves x1 lt 3, erf(x) lc 3 lw 2 \stopGNUPLOTscript \useGNUPLOTgraphic[exp][width=.7\textwidth] \startGNUPLOTinclusions set title "trigonometry" \stopGNUPLOTinclusions \startGNUPLOTscript[sin] plot sin(x) \stopGNUPLOTscript \startGNUPLOTscript[cos] plot cos(x) \stopGNUPLOTscript \useGNUPLOTgraphic[sin] \endgraf \useGNUPLOTgraphic[cos] \endgraf \useGNUPLOTgraphic[cos] \endgraf \setupGNUPLOT[terminal=ps] \useGNUPLOTgraphic[sin][object=no,height=2cm] \blank %setupGNUPLOT[terminal=pdf] \useGNUPLOTgraphic[sin][object=no,height=2cm] \blank %setupGNUPLOT[terminal=png] \useGNUPLOTgraphic[sin][object=no,height=2cm] \blank \setupGNUPLOT[terminal=mp] \useGNUPLOTgraphic[sin][object=no,height=2cm,options=color] \blank \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/interface/0000755000175000017500000000000012165205647022727 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-cs.xml0000644000175000017500000027061312130411274025023 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-nl.xml0000644000175000017500000115205711754241457025040 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-cz.xml0000644000175000017500000024410011244221744025030 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-cs.xml0000644000175000017500000115372211754241457025034 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-pe.xml0000644000175000017500000032207412130411274025021 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-it.xml0000644000175000017500000115700711754241457025043 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-ro.xml0000644000175000017500000115427611754241457025054 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-pe.xml0000644000175000017500000121312611754241457025026 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-en.xml0000644000175000017500000026651512130411274025026 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-it.xml0000644000175000017500000027414312130411274025034 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-de.xml0000644000175000017500000115616311754241457025021 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-fr.xml0000644000175000017500000115455611754241457025044 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-fr.xml0000644000175000017500000027213112130411274025022 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/cont-en.xml0000644000175000017500000114770311754241457025033 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-de.xml0000644000175000017500000027333512130411274025012 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-nl.xml0000644000175000017500000027100512130411274025023 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/interface/keys-ro.xml0000644000175000017500000027143612130411274025042 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/sample/0000755000175000017500000000000012162140024022230 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/sample/mill.png0000644000175000017500000045636511754241457023740 0ustar norbertnorbertPNG  IHDRO9#gAMABO cHRMz%$m_j<W\IDATxDn D K@Eߎ }J/ 1sQǡ`Z!"wBLz_{\{͑'B~VJYp/ / J}5U̵PQ3d\$%'}xH @#9jm~ qW=d9 6&)<36f2"0Jl۶ }ғc"6YKuYV @60 A$Z%bT+Y/PO2/^F /kW+;%a)lyg \~R@F&B& ]F| (~jl٠ vI;p2Z< >_H"pI0!lq*M` ג H2ޜ3Ơ/k+Bhj r[4;<Qʯ_(A ֤.A4PLw6<52̹\1Puy0/!|fRx^*akz˭E+6XUAF[AĬl, ˹B@Q*IzӞMld&LzAn:p21X5 Xl6-VM7M}` V _w 0ngVŒ(t[,Os(K駈VZQ'aJg`հ1 )`ϯB(ӂ#wU/|S'-7{,"mm`7ùU#x醪`%e P>HP6q[ϭv9$FcB0\vK &ŋ\mԆ` `-6,;ة]vy}H][KXȾ21|dl$@x"d&VdŊ*aO=[7 GKwnkm2K(Ҡw63Ik+Tyb[9)F-ǴcsEWF)yƊ\wx;s>-Z!e Cή0쨶ۨoIc^|9?},zu l[a`!㜿T Fd_AUV l~Qx+TAj>m_4`y!!~6m %T#叁|}WΩ3؁r]`XRe\* 7BB+jI͋n8`P9dXeķ]X" ^Y;{#[JlqckSߌeRE9?0aE+0 ÛcKZm"M$({*c&[YaQ؎3, RJw4COHe-ڶaGF5|ki=.X̀d&}Bd=D|C CҦ8哀lNVc% dS٪cPum)X&aF90 = AݩIWvg+EV:=xӬ p6`C*7z/= \ t ]{L&bQC8xk !%d`ei~m?m,V@! Q);X/:;?Ugmb|` wA phV[!}{iJx3w{BtKt۝R Q.S{&ːjlxEdc(B.YeV?X֐ ,) |Jif$R8fw & KKO6$@FK.,hlx?ΖwAJ/)]IHVFi`z\&:3ea$iJ3Oؠ{~%X$ K4ݦ~0 V)쒁F1]W}dWQ+#f v¤2iN{t>5`l?|zȞf`=~\e:dvK`=?/LJuC-IvŃd{yщmF9{[-n| GHA%+#6OֽJV[KU|BV g:FVkM[MLk{?XZoqHd޽`$W6|gm\DAt+ 0ۭ.u/ ig'^l`Y_ğP,fK5=muXU!eÓS֋WiC)Lo7 dR9{7MK\YdnT 4+H' ,?t_h|}ƉǸ^wZVa-aPmzL1m&HW+6ݰHXlv ^I/qb<+r滨zbo֞+ Zf!M77m[lvKxCbF{cDtJAⲪ9w(]F*!LP`ӹQxP;# YVr\ 0C?{"{PPYWtbu΂LQE3 dz xxI&C=j3ؠ,Kht;F1PX.=%W" p!1qQ49w ޅ'#S[4reXO@4X\h*?5^_Z.~O$S4RLj[9 vawO҂F7mfl刄8<9JkCׁ=!bTFJ:%U,m* F"v:`m-C_܂`Wg0@?֟bh+ `\f_5#! g !`)f {Z؆6 >]Y\IlC AfmGEQd~ͪ+d}V4+,)whO` Qj_?/شKW=CU>h~J?hQ7I<'~sZH},aM@,`Ms؟| 0 CkODA*]4[&YS{:A 5E\JUpN4b`;PY`Ѷm?!:v5nL }n Ah)\o#Bkt\-h Z1~'" ZHSdHjOf+a4`i:0 2 qV{ ]RܜSHܓyO+"Y+r]ogb `#X0mw. | Vl+ `-o Xyk 3j|L:<aa2 V bמfEvEDĿu6NGo"4 G @vt=b0ۇ|ɨu+ y{hX `a`O<_ٰCmmg?+ A,[A뽋Jd`oSE! 3N* ;H4ر!wp mo{ڹ^bǽ:a> QkkX/rZy~Y4H*13ea#{A΅{q`mF90 =h"Qau u+(\%PѲEK/ 6'0`aĒr` *؃>t`iޘׯX62%[v&F.J>L`E:l0C#XhrX]A1պ @@ԿZ-JE=aVtz"=G[67o`؈C-9 G_~8MsKiGCTjMUOPkhab&}ITvVPb;ѽLM4 VXi% U,kB3U]qb .in2@Xfͣ[Kf2RaE (؃WEomYZАjҩ~߼lbQуTWΏaʖ|@i[kÓl{fbyc:Nj4ks|"HCf',/3%$xMX~olFTI] >7#OߍOmIW@ˆ̍y;d}{j)MxXّe,/tlč:/ф >XWYQx#v *9 , X V a3&0Vka۪TH}cDZXi;F_3$ ZcizC9 5-p- X%yTTV7u*01YβS 30k8[CIhWxoPN߄ Wv\Mx)-/`N˖'9B$R䎷ʈp~mE+ 1l_>!CIblnBץSⱺx,B{MZgKյӇ}Vg<*$tbviv85n5 hATthvl+/FdZej25OLRC Ri)^" s{pzI1VT㳒 @O"IEPn\aWĄhƋ/] }sa7#ZSUy: 6TS8T g0lB}C֗7xQ![ƨ! s܉`C<X6 isق<)Eߣ3Vq-r ǹAER%EC]Cv4,LH8OCM~u`F,:Or2zuzպ{nғzLVğ52[v>Za /D=lj䃏|mwػm53hCʔHYΝZRf4")D0_ȋHD 멉 Vt9)sZkQyk x "m,vuy=X;UxB?l+ @4šIorp`Mo%j& Xt-H.<}3.Ɍ#X U<4Zٽ |d%HTtq`i θd`^ọN~ug')g P0~3Ӻz>&mRjd:vKܦeܕG.+`3+,vOQڔlN6Yrb4j6DQW٥gxmbƋ^ 3jk|N_`IFVc`ЂJ18+aw8Oq2Wxqt9J@n6G(}WcUs/reg5({!+ٚƍHZSE~/SGnJ5t_`Y*]JT #D!3aóC)Ǩv\#)Jeؤ$ɂ@ӵb돒 əZu+sSv)4a'ԦfS:2P3%V_/3wvvw:6jZkضf6<E@_q*0'u~>ZA$qyz-U6i_sU+fj'VYLŵ7ƻiBEFhT3:)>Z 9c]ه$o}N"qC%ull'i ˢ؛I3a"Q~PlnQش7^rl)A]:(רX^l%9Fn~`[Ll]= ,XI#f7ll|8E_,.vn`M+-@y 'wᙻUWa{FF~ra7H,e>S:;ulYѠژ6͆WJ)sبFx21RtQ{5xRNmQHygo%A;--*Ej"Cn|0f- H![#οS;`œ= `{SqϤ= n;̢#w[6`/]!#Iu?Cld or aP!Xm`iI:yL: .Uy'n^ ɏ>MKHX 3 V.U-;_H.+EIdU y2X#\%%g / }I9Q Ƿ6M[n,*lg.vئcV_ywiP ,SU5FRI  l ,~,\ܪXߛt @e<;˅-1샸#N|}8Azv4F l[7No;[],R;o뵡eu]mJDFg^ 8 Zd IVTSAZC 5EluEC-wti.ώJUN F!VZXkL9dMZP\OPqNnYa:FJ%qT E-{` va&6LŢe}G/uiU  эL!H6h a/0^ ,.WOKōNtrܺC8k -tWa¶W/dM ÅS4eZ> raWN &XF1Pr[3J;6M4?KQqbT-e'3[Y2:KT3@Z$7Ғ]]9ћo%&`+{Md^#*'|Q[6=u2x<:x>kyĔ0H/]-"0OaQ$o6@u ;[U`*/IGM.q#| 0qvQgʡ4؟gK 4*˕);a÷|3} zl]{6LKZ~ { @/H>9饐/nc]A#h;a%%{sdx5 iN`=Qԁ7c+3Zqf &GfX[=D@lSEn3E~bw);7T ϡM[ C( 7u+0`׭mfYPPCm{_8+XP"xȲ[O]I@5ʯgC+vF_c`i[ʉ|3׍v?˺=kFLCJ1E9Q5^<_"{ @фn;C9TyYѳ߹!-;j/N[,]yob+tI̴F )7(XlK%\?C9z/GVUs w:(faSn? չ@@OWWe?e}_2L5PYgѢ4e&YdH{\);=^1E׉k;4Κy \9s&po(s@`vU9&By :1i[ 7pÅbMC2[66h3fzЗnp։z@ֵ0Ont15]X[:( A.4Z Bv5z]@&uLqdʮ~ro#B#֡FdcєY0@iGZP`ׅF`~ZpʀXW5`}hIyv̓UQa )$ /s+(>#[g лO%~z_ci  F VK^< 67'ua),RViR[w|J9?/fHaoHowDy7s? qri‡,jp`2(@'Mcsh nfkW>OpLy-thhgc}jl>,rJZsQidfw2V[b.GBHf3Rݸf7C`}R{` 3b&=O%`6n4ʕ >cl`dC}AW.XٷVw6 ff~l@e+EFQEUbV̘;Xuezԧ2gzb EOl<{ DQ )XĂ=ֈ5zthY 63Nu"]"С.1#m:yn\L/D]nv S+Qb%bC#2 _[`C Gl-# 0XHQ Gl1v^;@4j^٩ӦODȁO]l ?y< -bA3IeN4nkF,4I–q jQh!G,t_B|h.fQ" r61%>QbK 3\G!_Vۦ6 +971U3t7Gsݢ cD`o3rW0b#*G17~!󡳠\ʛS4i8uWCլ EXA,j"t` >`"^˟*v9 @oGR{R^43[wfCeag\f`uY2LV#'졉@ߴ5jJ)i Qyk{F,lmuYץH1X"b5d5xNGf!MUH(@#D#AXn|bZCwt]{1"Z[`^Am~Ͳ VBiO:gꊅ+k ̮ k;oX>ڙE:x" MF,RQ )rlg'l|HgĂ7)Bl rw6i qY!L4v""Z<5bYtFX`xzl뛵vײ/|Զ95w[˹.#;-8#~<$!KPF'h&GXtXaEՆa1"43bl+"bA@h,b{N`BFG,2_XHˈ`wrT#&`2s]ogmM{SޫK?qsK{ڇxĂAF.`uΈ.c.ePHv E,$Wc#f 187ԹlB.1"!`@ v""А";9d2V~B$\Xlݗ Z{!z` Îk4" "!{D~t8uCzw_UV-=<ط=˦uYZn rDĶC3k@Z> |\.ǻ #ЅO``p]< J"-!? Ne=-ĀRbiA&N;f4Չ5.$Ȃ,E,d$id>^`OEԶ1)P:Y}Kl]~pBkv?cGJr.;_^>~O, "!!2ba'OC=;f-8=?_R t~x%EAm?jk(WdZG$b"v4 7* b,a` "wdOHCGL" K7] @E{GE,хpF,|8sѺ+nYkV+ȩX3'G: t;y>؅Q2H 8U߉z!1#2oVu8Xsv}"#b{-05;#^"v"$b"bU~YszC b`I5̱ o4aF,d0 6Kb uz[zijpKg-?󒪒œ\a]!xH^D =B#~P{b6>|:DRw9`tFrjXXaX`;r%2H. p[1)$^fMܕ-baZX5I ˮ0@#- ˷Wն8o好=+ή<19,),}ќoWND@cŐf̢{)a*4bags*@#vG9'AEۛ:j/wہsnh̢z5cD,l-t2q垎:c냽 WY//'ww'/ F, $\stZiS4NuА Z-CjwPϲwb?h儩#$!Y=X$n5#Dl? 4}!^{/4Z&Lin_g9 MKMOmvG;oܵu@[76 ]|"pxn!"b'^P 1|";@$| &u ,)l'""bg#o)!9|hlw'gN;6 {N`(v6 Nm -lnh(XziOZilja {.#p](;.<݃\_XXN S: y7b CQ+aXh0uB(E,PΙ0uEmB,Ç91XMXXH@MI`AhyDMѶ`¾+V6\us[Re`ӱKa !ohm{P,|*F"GltW [?k Ev==3q%DY"ȣ1Q %QEuL@0-ЈZ`PKV`GSw/Xpų;m^V1K6p:Wr"v,k'h F,$z@ iBߡ؅oGAnw6ډ;ba "b; u"v"JB  - vɰZ$9l2drFX)=Swu.X3u+g-ۿ9ضS,=NgS `Ur5 \!y>"L\&z!G, n`X8ġήbkc4H`Vi?j N~lң:ӃȆL, %h#" 9bAK z*[hdh'bi %q xG,f1:f=F³.$cC/y<: XI"␈3abO5N휻UO\|n{G]goے{6 GvcXzXXI4 'n۱x7u,#Hbߖ=r\@E-L8"rPtXx jTh'L_vp#b&8gekM߹vڢ:szUR.^'~BZm?rs~4z"v^AwtO0j^yپ>h.Xi04BǁAMT +;>m7#a4؀dtSCPH#`}{eaEV9mx@(|{ WuS#d*oĎ%k.?qŵuum]dιŗ: VMyx 9z9 mJ W<iro9|  /I `a3pÖ<l.LFHY jˈ( Y`-ؿfUOfƍgWOX|xE]T;/Y[bcpFl'U#5b{ ^ ˱߃# ng5s*Jh,^A)x+lFz~j/f!G,ژ6cΖU]-9k7\]7qYo>.^TiX:dn?OHUwl ZZ( @dE,4Έ՛1 AeLCS!EPDxnhF"dG0N^mqS{&afsӊ#z',h4`V>lHuBG{q^f߅<ݘ Į.9yxT|ܷYPQ^F釭ރ^Rn4lT' @ H3@C*@&zz,Хi9v֬sΝε+&@6EH .B{'Li‚wNk5 SXq0r˥kd )Bg@crx⁌! ['Վ%#1t!;0 Glh "X`Ăb ?gY*GHxKЏ} 蜼nr`Ͻamun=aHmAىg~(5b!w!G,dEbհ|#/QFCT"1Ģd d.oWVea""b{ae RNE$ӡ tam~El>5Ԉҵx͜ ]-vϯjܵ3Np2M(kFAj"gĂwwFl/,b;*K"rb@[ "bwYy,gfNĈ^o,K\Nvql` X hN$6b{k"v´f͞>}b=:k^ҷpٮis?ضx#a 4ba=# OĢO( Y-bPF,@aɱC=D,FG3b'cv&8"v4yvDDrpQ{[Z8aڄz>kY-fX?U1"Q/XE@DĂ'\K)Xhs 3b; F,@aF,sw?J}Hx4DNFL푪Y D̈Ej'F,h}emm0|dEn_3ңi=x3! RD,>D .,.5C{ Q#OXq2JĢ DXŒXx!/DE,4f9ڧgP#43 :/+;1ɝ]kOjljlolZ{`vn[۾XI\J/3SE,ǘ*. ɅS@9LerC6`D,0%0 =52V| LEM,h",4b'XX 1}ڬΖ%Wut56߶`MݥogPSa9yʊ'pĂX`=!xV[D, XX`y`ZN M3{r.0Fd1;6&NG1|b& P C#vafuOW?lw+{M]iHu,$bnE)q@a;b{  k򂗹#Ov\b b$47YQ&D`$08;b+Ei #|ήE}fv9g4_Y(٠-nGX-ʉfF,d3b ('&A.q]=+qz``Dlf@" D,@X#:4 .qF(8o9Mk5sιSgn'ku9 Д 6 -Y~}ҙA˱`D40CqU$h#b1bX;V<1O8#sJGNrXji[L۾vfLeF@Jɿw&O,កT#"|1zP:njXرFx"A׋QNH<]t"2*Fb4`; twG,\D-fNK'Bw\!'Ϝطf<>e-&%[ݺKEdpN6a2heb(F𞟾>{¬,d|(t% ;W)b[cѝp1j N^W,} >߀fHWOYA{6(8VM0mƹ}SL}xęZ&Y3ucRXNJ/4̝ btCg(sh6W:c'1bD =y3;l 8b3b 14J[bh'SmFl?zPԈ߳p ;j8}Y/뜽>Tѷ4[fNTFDd4XuT"Ac PwB9 fQ DŽAXf@!G,bwBX 6U#C/bi},0k皾zn]l.(߹Y-8̈G-(fQcY '1:[ E6^ 0&uhv U @H %}88 &CՈEh>y3{Z9mΖڲ+D)4\nSK;AJOD" ^; u!3ؼv?zw6XH4bI) @ >5$bѽ;1MI= -tk0#w2۩[<&vN]4g 7c}Sg\d-F` nX[BbQm!'zh1Y &NC $xxa ,FZ9( G{ƌXl]%E,ʈ8!G#}9wΖe'Oֱ;&oԒ=]a2 1D2ƟCoP#v"pE 5/ЙxD";Т Nwˑ@"ul{1TC(21Iv$bApΉ{o^,o5asrd7O:}2:?ճavd)as<`O=|IbldC'8O8A9w·@MGLߴekN]eVme j陸VB/6[L89Rb¬ͧ*TLEEm=" #"i Z"MC֏ PߋaԆP&#G V1&Џu/ 4R[hE1]jؼعlXfɋihy w~?9tT/PE,5 gς'ET&#j u`5Ibf0ĩ :p1@ԉX Չ-!?8#vrg•sϙ5y{;:7.3m*~*+h03bkp< Є~c#sn #b19 G,@aX;F#bkpF,@iD,(fD,$N&,Y9s:yĮ[L0qP97Y[6ƌؙ(PbۖI x#z$l` X @A"r’6'2 >̈Of䮉fo_3yӖ^l/Y!ehkZ¾&LEtQcaHi^G, E H{^$wQ#b3b1xD,E*pD,YE|Κp򾎾9;WL5{WN|sCL9o2zDD(|{R΄*aF,|8) Q XX <*2X;HQYzNj iֈŋȾ kãK@X""bhA0Gɽ/<}̶u͜7q&.۵LE4,S5u›JfةЈp+4w6Xs.F‚8)2" X[hb;oL`3{\9sVg5 MXuB?X˚L879baG7)b!1 ڂkB4S;1wÂs}lo$b)1k 6&@"-4ϰOrL-Z?ZGԸՒ.X6w9{^7wn5L[A )T;LM)4g0Zǘ ըj 9Cbs/h5&4tA)p2JEaнETش\ΈEAcx6va SgO|aܭ2nY2y]+T īZ?a9g.aB VИoo#%]$"i> g"_ 00 7`:ȻH;П1 ̈ * :c 7aD,m'p3y咉͙yݜifN]}q;kys-ٳΙ9UV Vp.4_X{IB ԁk}٥>q\\$ }PAҴOl<x v2]͹pL(bG[-~ {jҽ(;bL\7I#M{@\Lx<z!guv5!aC8ʲ lӠm>S[<}Yg/Y -`5)UJY1k"ČXLhѢPw\P5 i) %pj*`Kac1/x BNLtV_gPNEj'@KcpĂ?~4bH?%p Sb*X .7mٜi Ϟp`1as2]Pmś.3;y E0xbpԂc5Cr k p{Z9k}Jc ! ȿzz`إqɓ1"+'q`,4a"ֈenyӡ+h9 gZl!0NbӶa7mlNгg/X8w.FXBYwP<TaD,z,K b=bqvCpϞh`dy v¬YЕ#HM"'b'ZBSĩi:,ba1 sًϚ3}e kVΞ;}?&)5 i.FED,3"h—PXZFw,baȠ`4{:5y z,b:i YM2>TRr,1r: MX\r'N_x,`.X xسʁAAeo/ZhEѵPs ,@j:l1 4( W{DD,@1L6fdPwҧggAU R Ch%)ba+n,H\< QZ.ӦO8u˷5ssW.8s6e 0a%W#6z nK8X`X?!1;l5b;4-WBQ`"cN5s!49cP ,0o,N@Dv\a˗h&QAƂq^pbE ._8w鳖Z8o`Y0;/YBr(Xj%8b`(WˠKV:JP`on "KR.l-Mx.M1(~m_l 8jL "f "xN#!i\-bۙ"^1#.޼f f\dᢅs\`mT?s ] +@y*ƈంL =>q*/yFĂ'N[x$>ba# CE˗-Ex N6A#vִi 9*oz :e-"Ătrv̜`ˁj+,Zzq\@iy>^YHl66̄.wp+t4=d FY| mdBGєH #bPE,xN!#̈-bG0S]}]V-_l1ąE,|Yb>}b&tF M-nE({"s+$(Azlbg,6p"ZqY;6Dl4%p$V(͜6w ӁfB9,l+6O'7]²+Fz` nTP (25< Di L@|$qAF1C㋐YgbD,T ^2{A'3g/X0s]~!/jnz._4kɊ ׮CDHf1 ׼a:1F.Y/_1 'gX] xXG,@aˆ!1tgZlXQCH:u8Ei{9_?ɛNuG)#VZ@fV| E~/RIj=,JVݔ7ZM[L֙]اY=ӱUECѫlo9, ˜ >'\cl(#[ D"KfB_İbhS9pgׄ,AԉJ:yNQ}T&58#v"x,i,6 \̞h6e+M`cgŊY3Rc H7eЮ &] l;wmע(!jЖ|ȄE ^ϊ-M = !\2i. fxĮ4Ea# :4E,={6F 9z Yw[&Fκ1"⨣H_.Rs,ɸ#v2 jYHVS.^, VZ;{ /;m93W_alpW,ƈu{ Z F"v hĈj F«^䡨4bA &Tl #x 5/'i#XΞX78^gM'_ dЮOD"ƭ-[4{ܕK@k.X<tsgO[uj1[[V̱V-MpV-[eUH˖/C'C4Q-b'O+bA Pȱ5azD,ֈ]LCs^=ɨ;'C1/z(^d 3Ǔ-X841aiWoc*vH߶m̈]r9h״KDJPi jXR3bgFmE.aɐ!=pi<Z1;b!yq9ϱEt-i HlfAG`'0HDhL>igO\p"xW/f P*? zNbv#b a1xue+`cz|@c4: t+/=U<x2ZW?fϝ9w+͟5wjϴ 'N뚾d960;[.:9^E(R7o޲eu+\6a릮Y LXL0߬ ]X+!- ,FxمўGlH_X2Dy"P{H8baH0#Һ^<]ς9 ZϜ2ұ3!3;g9L6wKtL?kUf Ά c26&/ysUWAFz({%bHع"yAΈ %]#p+Lf-R:>6440wd$#T1D3;gfcuY L bdnoO{ߜ/6`0Sb8f態@h[j8sX {x*𘅂5H]5*pE,F{  1~B_:Hxы>@:ȍDnDiAZ AA(z12(5sϝ0ủ9a̞kfi3YZK1|ˢE.rnfڵZY떭n[ 2eɉX|䈅.R@1,[mX's-._XKuA) ֱ=;WYxte.6}O;m܉lhi!5,_RȮG֭m\;{[笇RּGFtc ZKwGa , ,BE 5 a hgĮ6 5HeU( 72 `4.3, Ƣ=xN U[̚>wjߴ &UO]sC6ljy[V] rGz`Į߼n lDJjpG,EkEqW,+".VN.Eg1|Y-\Ժ5 2U[U18;`Ϛ6~*E=s.4m3/;g.h|S>}O9LlV;z=]nWwO_rh\Xo^OdĮuhAvE+-^j2"v1Rbh3ֹ f+W(h ɶhv=jbYJ쵐M(X(ހxhK$ޓ(zhY-m.\~5&Kx(FĩVdl  <4ڸqFbD*E_!eЈE1 qv:TH3aU^[3s:Ԭ -_ԕ:sK6j~g\vŲേ 9"nG,ňص^ WmW,[#b$D,z h=s%i!DE, X^wE*"b"2%psQguزȊYeP3AG_b…s.,AG-^D&F_?EퟶbekXhh f9`JZ%\h5V,̱8#ekDh#)baSИ]g"{9=faI>buA!b}Ё= 6)fϚ`9X|K@G-\P`Wg._j X /E*LdĮ߼~sEׯXcx3`YMlBFYpB9ȈEs)GʨQó-bX`9h5h,z٠է - KV.p͒%k.egxJ+]e| KdxvVx߳Vcmݹmcۦ&;n޼f%"ba!Qaf>Bٻɷk@zX"Q""]`ǐ:)/W/,]%`% @,5piϙ|͢96\[Wz+섹+]h ؖi׭E잙vƭ[ut94b^h–A!sEWϷ%"y!dE:)Ӆ˗-\y*2م,_u{<t#g%Cnx,(A_n̅O Xh%(޼m50[mCӜgؿjfva{XdHK=bؠ.Fa1 0v x«X;y4^"vْ%<0b߼d 4J,;k[2&zzyAU˖,_]vED[6]y/svleX5b;G23@tw/q\E|"=^S> tR.[pU˗Xlh9eL ł?4K`+@"v9(bɱsx 9!-NY`ٺ YUkh^a6#+8# HXxP%b1f`Oh]T5})5+ݜŋWFD@K@[>-[sxuof-[ :cp9 J׽[u筸g=0XK"r-tlDV< @]1 oJ uʼ}H]%++ց>1r٢Wmcgt +V.[|BБ dG,}j[m<97akw\y;QF+,j,bI`EW_c}/to0/.kK/\xŖL^J2?Z EC},[tވl߶e9Źim^fU[_pĂkF, 9*v\ F,@1Dp%ljAV Y+(a ]/Y|1/M+,[p _VowM^4}|+ňU;b7oٶ}뚹Y%u3w6wrO"ʝ ؅`1 Ds8`q""|$x|gD"dxa!:̾>oYZ 6#VY@+/{Ե"0|i ۶nYvN 9,1f=[7n\hİK( @f?d1l*,BU@X#"E:A]ɎXHJX}N8b7C#v⬦e),YÀrC@Cv]Wbv:[]kbXO[w"3}y틶l tתE7B#QX@Xs @G,@1@t/P Uk~_hYũwX6'b13 ZĮ @p ctugh0yjI'U5@6ʋ;n%-a?;pG,H^rƭ,P۱|ρ[[dF` EY{e9b<9XX΁T.yn#,}%eKvY/y׬B ˊ.-w޲4vOM]up؍kVܸm-f6Yrz,E1x"E@H 8P Q¼;f G,I8b"Tʀ \ZRXbE4 z©e hSh%˖+,^^.Ե[Vpz4qݪ5lY>q={/_EHĮψa  +IXbXf˚͐u`D,zc FE8bn-ƚɉصЅkAͦ93M|݊.2rFj(Ys+8n۹k'޻m-Ƶ ߅D,|w(f̻kL-iv+Tjy,HX"#bVP@ k-WZ>Q +SzLO`F,H9DE,JDcMJ5f=)nݼww^r#Mںj>0bOM[u r,֕-Xsqj-(Xdfz,X|M0bF,.XfŒEs.\|(6ot@icm6cȌu݂~C~^v3{dNI ozh{;yY)%}3l/#v6E<*iі={͠]xF"BR#蜈E  E%[N[9ifݹk=;wڿm;Pܼnmٲmמ-ո#ڵ:RևD.("y a/,_ )lm]:Gfw~eꕽw|ͳ{{K£yDۖZvk7/u5kA#(y v oœ[j{l޳ T?W,^{ň`B; 6nE -MH(͙;kJPsoYWX k7[T:6K] XL~,Y8,X> =&<38%:7)<.$3icN^~k_ yց'^E1  ʅ}M]uZ nuˁlGb숝Yo@ GݳT{^ [wΝkWX,ʷnClۢW"2Ȫ>;GA,&p2KrL5Դ5L,ݼbr2KkK ¼L"ۗ~_.޺{rp<\ yȘ2@6`wY_ZV_g,^Ywxx9ȱPmɂs?=}ls@׌,m ܾe)mfв;wmmMDml7[ւWbϞ%h_mŌH3q ؆fdezz&e$Oxlԭk!55h3h[PbnoCMe^̠I5]X*b(muԍ+织ݵfYg͙XV` 4jKc4D,<ȉXD HԮ\5u푵 I % lL,ⲊQ!!fΉq?vֽo۲- 7[7X>JMC[k-\> 薐İu; o޿u&z܁fO3w|`hvPD!nG/ .aú=4 kJÜm  C=89Xy$ 4L=3ݦ^?={߳@DX.9X\:xdU0b.\T`td F,|􏌈E^Zw @ @mak,/8_u/͓[l9sU6iRfZkF춭m{6AmGN.(suVJ9Ƭ0=9qaN.N>v>5-c347SrKr{^f{wÊK,)k_f3Uk@H!U "K~ĮAḁ"  ˸wGMO5ﳛ'/9sEF@ջ!`x=,mA4Dc.06nݽqБ06.:q!7%\W.&V8QIN_\L}^ξ۶smH[uMA"Z^_`=$<sv4@!bX8xo_?,ʻ?(?O?x?/)Y:NSТ[>/[ ۝;wkm87.5˝b~O{UBtns$bj+M~ƺp+9Pf`d֊nQ׻jηAc`pupXܳ;pw kfʕ\{r=L(T4ӕUVPa̚ϖ|45u[!?ooسz9[#Ag bbP9q۞c&~) aɖrXZVNAI%q3$ڀH0潃RLd9$WҿAwٻ>鴃P "*=TB/Ӄˆk]l ^>}ץ o_OS[AEC_QQIQCZ@J#,<#)h//\pԉ3.^nvhԂcݾu a'%bl߹m˞\ [aCT~]J;~+' ᵫߙ_]C۫S-L:Nluu[v|+d(fW"v"n/>Ј !ŭ,l߯WNi7eR41חeg%wte=6.SR L_^ٶxٜ3{llHm; X_޵}-[A=ޭvm捈EO (@.֟oh6ۺ[jHijYڬ9=oxQ;_p/3|u /` oΝbnyƱ +1ԘXx[ҕb)xADZg# Xb xFn9bum]>km[V,\t[z duEĕ9ߴSf^kɢ5fhk`dC'ޅV2{wEV͙?};ٸyϮ{oݽ@]%g[ b[oݹ:%("\2.EA]_./rW'yZ   OYԒUꎣF,xo+#r+v.( b1\L%qkĢ 6f]v0.[7_0=*:$8'l⎾ a!Vz,=a钉s%WL$D~_JdCΞ0m9sٲ{'(Sl:Z y{*$Ln^qm@/Y\A, < q ]nȾ|8<ȁkWNt%b%+OnjXؾy-[)XGXzօu#b5}W_]~]V-^e:~ս?qo>y|b媍}^~*b, L j/Z e=Rrˣ1&>|tu}v,)P޳g;AKH+m;odԋ__^${v}~_~Zsgඞ;O,08o4V^mYmVt@V JbnP 0"vE ݹyٴW,Y 4f~5vyڹO>yZ!?;9d[rrz{&6M?wpfGr0 ~f`Ґ6 EK!D/iϞS^wA d,jN\y8îAci0bЈխ xm7]4k׬\6o\oos72we/s@f]û7nF ;g8f[۷nED. x bK.\me'zD ,eym;l^6f`c͢k֭[xJ`w`QgvJȠُ>pБsW]rGovOlNUU0 3ՒճusRsS:?GQa;rj(/;?pleO\y疍;޹&%` ż@XeVR`3i;NnjؗЅ@_>jSl[rww^Ç 0yƭxsݶ۷ݲb:`<6b10%bl޽s֯Y|EŠN֕Wn6\@~۶]p%"+@s[llڵ{>x[ȑW߼/ז|x@SL[Rqb{ƄkEM8@:2*yǤ45wM>+9zS/#|] !y٭avk݇lu.Ђ]@ڲb]$En4@Ո >} `OuKjXx3yfZPa֝v[ƕ6+Kl/IܶA`8tX0<wXb#Gp*hy:8*Z9{ikgZx#OW;P]UK=ٸ uM]4m 5Lq*ߛ-֣+g&ֵuynldVƍhk4rN.-+.NL) r Mof_?,G|q~{pĞSwKXsvd^nΝoS1{7nۺe0bo,D,z 0#vŋW,5uْe˗,\ݲf=;w_qvPwy tn 6v[:DkkA w,4^$wC^&q9C%+ogw--3] E=]Lk?Hhg̖}U Ά&9A [ʴ{rJg2BMZx]]o]sT'r> Jt\yڿu疾0wm lح>% {ȉUh>j6`~̝p @X {*`\_fF`awf`|tНV:/ +6'^Ayl"oa`eh%sy\qZ̵d복!n z9<30k*i C S_M_pԖ꼤`oOO3oR9 (#AסfΜ:uꬵ;3w΃Mo߽yr`E:l%b(k -݋"s"frV`a EY&r.?m-YbZu=[2Ylέ){wmev*`1vƝA. v :ķ8!?zȁ 4eTmlmmuM 5r,taHz_Tη,,,i`g``dYbg".Z sD?8ǛzfO;kB[KsuRBKA_2|y/ֽGw`Mzʩ-fZVڱؑim{,[5B2X(8`^P"ImCL@CƝC°69t cXzn۸rD+}E`xk֭\xժΚ| k={nܵumV$*n'< ,Vu=CC_E-]mbj Ʃ"$%glhkmkkn,vo{7ǤyYr12+k+q}e g`P.ͨ5L*Liΰut IɊ KOQtKn(+)cKDϓG{z;m޼neK>}m^mwoȋXH Xֈ[~!,@G,-+W] i6 ,0bеˀ-;A{G,+: XػؾڮpCemp]4<1 ߾>X`) &kcic,`b&6U1Ll l V^.8}x8ͺeė@&(GoKC@ccWnpn<TM6l,.%η߲nbC۽}= 7wD/J`r"x lcrĮ Dy h+]yڭnYhm[֮6v\L7Y8g%Z~9g; @g;{:@=pc.Zٗabl"+mދ{ >\lqHk;x+ih%m$X+Jki32=``ִT heTFH{v_~JVRYKJnj߿yinӬV,۶umj];VEU}kka 2f @gP[[,XXI_n][/YtϚ w7ڹ}5+@˫V. .Zf㺝[N1ݻ 4LA`y;w~Ϛ¬@.Rq 8WT27v7wP0 -X ilge{?EAV0˖ekNqǛ޾ږ+- ń=7읽e݂/[nvp;X AD(z[dxhq Z"t2 @H Һb[6[x-{.[yFс[6۲dZЉH"׀6_pJRjX؝x?ٹ{Cvoz7O>sN_#(,iy&L66vF&% e2 򪚛j߁m~-kB4w^yڶS q1|\~f-ߜ`&'(XP7{텥,z] k\6w 3vAnpEʨX`5@b" Mm" u+׀%\d\ub˖,^(v-EZm׮\bp޶qfff՜l*o۽wl߳vm{?|#7{fl;vBWyo_m׿cQ8%, 4ͬ-mt$D)s(mp̩-)m}1Qb\\དྷ⺶ +yD`[53\B#Ův= KRBCN,߳m]{ݼg܅ZlK.ڽk59bCx {AC5{vnP?up ߳y;׮CX=b#nee_-;{΢V.YrЪ5A1yԐoX AW6߹n`4[С].{w9kYcR2Px>9tң/\03=)OO=:f抃װOoW14SQQ553$?=1ZOl;3? #; 8?Xzذ۲xɫ6-4q1,~m^W N?w ڻfY3=4՞m;k#s϶]A ؃:t`Y"UcD,@G,x. ,ZdŊe.X [>m8dЊek7O޵_: چٹe;'5Iޝؾɫ=u][j}ELMݒ{<7R VfsoSA&A1^&ECcl=lLՔYؽeTZv6vA)YY%55E5 e}Gc]P06j9lm])Q9r"rj;_2sCW̙=T,|δ5]txKvݺvݮ{W_uĊ]x=hi0=*C=YIXHU,? ̈ :.n^|EΟ3{ŠWXD;A56` :\Tn{@{ ߭]^p֝6А͇okNzxɢͧmv+GvudC)mE;{H&120p +3Pzwxs112V1phNR/".kkboW FvNd;7 \YY7EEˬ ٳrѲA Y>=z|ϲA{Yxcm߿~ɚ-Z,mݽm}Ё>LRB>[D,t]1@aF,hF7[@!Py=Xn ΟYx%0/Yv-iA#4!hTY-ٹ&94a$w#>y+[_:x  bb&^K^N.NFfN^..&^%21 ++,,l58OWVOP9zcq1Isaa`7~a/bV,_be:g]7 +o=w]7ڶn^94vׁ>{$bC <#4y@j+\p讱 -_bkH -z@%NмAi`3yU<;910at!`G3gsi ǬR/6SG4UT<=r k3sޚ3N)m`jg[safaYUUC/- mE>ȡe89dm|2CL=xMЉv=ee@`մqϺ\3ymk߻k墵v=ܿmFvmٿg5[,XS^P p"%bpE*^1|bhu AWlӻy is@iYo yqfV7޹n%ӢAC~6N[ l_X^>wݛ.Y{v^r7o<.e&' !+jZېj%̠rF~ sV6-U ҫz{f͝\WV]]^3+D, 㯭$ g,ɨض];m%y/;g5s>wږ[u]+{hw\wkmڲnkmټj:`psFEآD,t{>Z#@vlnߴ`ZwFЪu+t4}`yNlT:x8=YX-\j~bۖl?fڿyђٸr:g١CNyW|58XJWX;1Tj}f9}قEKfM>{rGs߄@4GtMlkh*,olnZehWY4-LCBV3_}{͟`(boY9k+fbyߜ7/^e6?fɺہa`޽{˺UlټkuВU. D-5b+(`E2vbXt#A.ݻ :Y4 X5E޾y;W^l~'-K]>{[m\<|s=rw]ϋbNe-S[3,3q`r0lVR^]RXSRZސZ:,71&0CCMAL#:6!/?+0SY+KSsÛ̝? z1g̅;aؿyڽ{WL}w^>w%r30sxڵ{ݸw?v-+~ct^" Wp#FukaG" ۂ.x/\|:`yh#ǀe+hP{#xX|ͻ8* x+V-`9<ؽ~ɺ=Xٳ<|POfGxGbY40i=Ս5ee ͹kohzSScmUcSiAiaVR\zaanISvTVh)f{nqqzT`T?K gΚ>zp[\0m3'={{pލܵ|].[ ̣+ܽfc7n;rd]]u@GA"@EZ17b@z 0#F,ڠdž/tK._7s[77[yVZzwdYӗo߲lv•k/Tg'<ԅ禕 n>8*j[[1P<{,,<tȮ𚪦Қڂ‚ܒFP*Ih'/D &4vt5e81qq2Hdpdi  (Y[n?koܿXߵ|ֲ{^kkvmv?l_jk:en`n;~l϶ǏfMb" 9:/ e[w{G+nܳ+ZjZ,#aĊ6=mɴ5{k׬[;uJ|se L솖,l\x-m UU5M-=MqY/ 7+#=%)# MEMYJ7::]T\]3!#-A]{‰+Z ^8w LY03gmٻXݶd=]svm^p˖۹qي׮|`5];tZ݊^ï(E,@1`X18euAZn}x+F fFAeF9t{ݙc{Y`=W_ KZ:雿bk[ޡ/J Yu5XAGxzH_ڔR]PZP 򺦆ꆞuQ˜ⲪҒ¼27e 5iݔ2ܲ@075`7VeL_1t޹r0ۮ:{۞Koݳq5{/fזE6ڸ|[Vزue[.[yukv޽n>vV#?E]_u7< @ _/I^BL1խb|Z׹.FpjumY~sՅEM ?^1 ={7.L&oYxVdBGO @r$EyU4DmL*kn)+)nl*/io/O K5cË K K SR[S宬)V m=m )+,-/ihjoKq3W;b%'Vl-ٻpm,۶svXf5sۻuB`]dnݽ}Z`_uB`"ؾfCmؽG>H ;<`u,@1`p/Ù1CȠȁF @bA X8]Kz]j:`w頃\|&uˀ5g:@CX]h~0 8s$\_RUXSZP\XZVP>2J ܵ*ZZUY {9#Y9sCm?tgmߵׁY+9|ċ_l 4d5dj/,lnoiinkhnmjf`hN|B2rSSrJ & cжdr`O}bH>;a, n뜾h fnߵns{Ys68`ں+,YqE]bn޽f᚝;׮ٶs-{lmaܵU"W@tD@&,B\$ DEpopܼeuwm[[ڶ e3:tbcO[NL{ys߾'˔L5d4$$O-loilnjji܆斶Ęb,8%#8/-)9nRƲ%iӻ򂲦꒒ڶ aްeA?ݻE]osz=ܖuN^znƽ,hKtڶ{Wv Ki)ijkhjJ:ڻځEq50ꚪKKʪk3CA ֖$Bee5-]iЕb:jJkkj:Yvݽo]2<'#<-ίzcCnٽq2`/o-hk9+wo[4-۳lU˖oݽ tZRaU@^ukx]DD6*0L=*fcGVxEo캵y`oo<8xܑ{5m۹eurJZƆRT<25)IR\*)-/jhnoD섾*肶 5U͵szALRr݄SW w)9{gso>gbPܯٶx]k,Ye'䯭& /6e/ZEB )u3}牳+֜ܲp潻wܿȺ'>wh#m;فSPMNJTIYYSKAIT`յe꒺8`ۄ:P? }}F54446ul fT6 ϭ]} O5c[]޲n% ݺpWغk㊕[[صGY8v., @lc0b ܩ4~s׶sC:@Un?kNЖ=Vp2*jJJ*%een3̺ƎƎrH--))/o, 4YuFf^uUIyCS]csMLX_g~\H|ijkjgDwd%Vu xJ_zmg^Xb[/\8b;׮ڲk낝׭[yF`NZxYMAZ^"rq]@0b!zmgZbhNe \'(()+(khkjZ9_XTW5M͠&# ZQX^XZX[([9;ëjjkzgvtN74u1UT1@ɦΞ;ߐvΜ#&qE ^9n@S9gmٲv `3aݖݠ1ݸ_cvQX <K&b?-%ܵrȄ]}]f #UYESCC[WOAzڎ`V95 dp-[WҘ4wKrFnYA1O7P3QZm#-שׁnjnVS;s᜺YP\#WZ@32˯g^9=)d K6-|ĎNl[quVl^jݨ -Z )":}Tc&',5X`npĂ {6ғMBM ZZxW27]^kյ 0b˫,6* t҂*`fZc#{Rjˀl[;+w΃Ϳ1xaG  adдdUr -I/De5A[~e?+g}i)`}}<`+(|s>)ro /(`'hX}=vY/D-Řw; X#bOb abxcj r ֵyׁ*gf/ߺ}ׅsbjUWW*Zzz-s 5u5#elYumY^AYVXhgn)h?Y[TSºzrYRtMqX]njj*.ؕU6}a`s.Uj7^6~Wn` ^RS՟#1?*"PR:1193?5f611q`b[6g,_sX: [+aqy)v4] @0b!jYv=oH׀mx.?)`j"VCCF7xj_m-T]]̨ť%eeIy QSڽ K{U4Ŭ'44WuV-5ť&647ܳq5@Sf/rYt\}NN5ɲL y;?><=ڡ؜SCQMX$zk0o+ 9vBOЛ @DD,u,ř/h 3ak7޲n-+ٲkݟȤbk`ghm`"+RX[]U]ʓŅ8,).-/,ˏt/̌Jm]fbe3k3BOQ\R_^P^VU;kMhuhVY?g칠E+]gѶ?=ջO|kMM^qڞ_N}谉S L9xzvFKeq=rĮ_: YYvi!@1lۅKȂG,FCO<(J!CQvݿk yڜ-{[WeM@[J[ILڪ=gvs#0+VTTT3kiY^XP\V4DKzGWCRE==Y來>1R\ JZ'ֶOߺ{uOݺyo[j݊9 n>$+>x{l{vN=t볓_ٺ a.x2)&ٽe-r^uDNJh]@:b!]VVu&'LUv.^fۮ104411164ӳSPTh2ղ ,hjnkkj@[X^ d$%S]B ;:g9*&uf^FlgM[aIU#hirOÄ7_:լ{֮[p[-^ j/Y;'xsONLsсU7?3dgU0j#=V[u`@"` @8bAK#19{`oO_qk= ̺*2 emBsKꀅq m\jW׀KJRҽA9zz@bs_o_^\{MfJ1ș?|ۀƆܲ7n߼{nh>i۶nܲd-׭_h[ b<>m[sgJPoo?oYwESv~ʜ_ؼr:̜@ؕcau,,w6 #baDD,N#g6%%WB;`1PX ֲ*)}eb-*Ќ,(>˪Jk tRIh7PюIgz`NKiqIMsKsCsB΄kwo2y2gڜ6n\ tVܾ~Li-[qU,_x+}.\ኞm|֮?ۻ|庭x2*zb?z%4"vw?'ˣz'(o[¹&5aM`F+0^G֬%޹555e5UUIڪZmyfbVg 0>Ը'Nm3Vӌkʋ)\ {k[Z&$NX۷53A-ߕ3ܶ~Ak0Aw%Z4t/7l\nڕ,_=k-d] [:hzzuywc/o D,<.0&vF,R@V6!#k#lתC+…ŀŰ ƭ[rל(}E &`[SVRVUSWW]][[][UZ]Wڐ\PeQXxMmc ̹k/%VaO,q [߳g^sڕsvo^xsdO̜u[ڵu㺵/^k>8tյ_-ӗX?g9H4*&a= E'b ZGv0o͠rs࿝ߨ$kXcP560vvN9POEӽؚJO,iʌ 4I_bA߄ƞp-McM撸eyH@ML={O윻wо]l߸fk֬۲yU]rU3I Z{}e+׬\qEn\ۻ.E~ l3{d˒u[֮ŒX0~g;@ ߀]-۷ Ȯ`pڟƠk`jjlX5C谨ܺik'Xk&7t4ՀqCua^Yc]iiIBrL^s ~KM=U=Z*~ uI=!t/ڧ;v1gמ un[fVݺeU[VN^ Zhᢵ;׭ lXmh:jrN`|hC>\ l_ve6l(DY% an/FG8bwbD\ F `ڶu[@;oKxĔܬuL- <âK.ZnfKAcPeel^VRFNhp  ,Zbګ32Agg{vK9L\7o}ܶŠ%j. ]3|.9+Vn-V9%F~͊5Pm]fK{ݵ~ 06" jK:֮BvWQlC Plټ q^%eTMlmLBJ'LkrTP0 /khh(/,),((,,JJH+(,)HN Y-Iʺڊ]5YU++MDgU[ :8eqm+g-\Y/ڸn2xݝAnٲGKBFւ"q-蠻%+֬Zj<:<K@7E,r 0 ̢$bbc[&$u-ͬ,ueUlc zu5jfbXfdVW54V$Fl^қnd[Q XL‚*W0cz!6,_ sWG-^j -KJ["v-dTs]f rם ѣ_Bc=b݆v6t&bo]~w{/ 6uKΫ?8PCXqV~frzVNN~~T\LxdBZJr`(oNL(7WӕKloM8fmh~MimOgcVٳ:{M-Y|w_` MMήnEDk)F:jx |0Ñ9&5 <  < 8}бdMH#lV[`BBngFh-F,x=bh0G,\hĮ۶t䝝V) =JsFN-KkšΞήv /Kc59R` ؂HJɫ**,/p/ Lʲ46ՌKNkZ2!#9FC9o V {7C#v媍7/3{xܺ[@wDiY :tFHBQ#v# @ WH6q{t1@glevaJ]PC-$0p#/&9m®'u%'X+*/4'8/#:ѡ{uvzO{zLJ݊в,,LӤlbOAvw7- *߸j[>wvGKoܺ} n3J9—`͹rҴ5 ;+!K@\Rs㖭6<[KΫkhѣFA˸ɓ{;[[UT桧kRPZW_RZP`,y%iښhs%}S5􄔚[&ԕ7d([wt#6=<Զ,-+L\x7^"},ZDZ{bہM[32*)|gnyzUiuUsYOKkAMGU A+:փjڈ#vz[i3iGy7!';ж3\^ ab81av5O/SSVq -+W~JQ̜PSUܖnfS_][WUZRXXW\sEALC3=7=dFgZf͟ YS,\yۮ]Kf/Zy:"_XhuFT+WА-ƚքp*j؆Tjw nkhoFlmmU]sYsZMCuyMCr@RC]NFhAjnzJJ~qiyrx0)bQSбxe.D6ԓuNWu'$ttv5(R67K.il(LNJI/./tuMU`1h^Füަ=wT : k:AW]0}󮍰]yv\- mݵJ@b#&]uH~,da"HF] vA9w0D,z#۶f9~`?eM 54B׃UYP[9-JE: uqnn^^I(bksJ4s&7́^:VKš$'1+4wv"PIuUvnۼ RxD,LČXp")C 5+aRKDP f]ұ,Aacmm}PjiZM^OO hhjX58L[T&X6:TONm+Hk) r@Nۯ]"EEaUF']6c7C2UkׁO3X  o"^}ph]hlooN )nVֶuwWujWFgfee6烲Zs]oBZ A=-u;dh'wF,0az XKhr{جzRUPĂGU.|bv -8bW !["ЮH]OnP4641156q ໣$1:s>qZN`xasKcsgsyMGK]xa]uiqInRBFzz^^fnYc[USMJR87fU|?nl%eejmT`|Fk]j]hA!6c!"[!rA`k V긢Y̤ &@TX6sּVf60ӪhXdtttuu4VG-sx1;!0=Y[IM&0?#%=%= 82 ;rwCSNqaVJ6A8K}S@}Cuh[3 'v| FdG:h3%щU"cw(#v*c (@ v®cFS'D,<$]Ƣg2XK[WSI2 c;;j2CF_MNϫno*.kk 7QVQȬ*-)(LK(,/-,mmrk/j r'\FlbxsyIq~Y[s¢m۷_yE}sA-pbнOcvb+!X VHАu53jOzzZZ* }]]-UMщWUն56tk**f禥d3oYCcUcsI[ #Ks 2`G5 ./.(>5[6ߺ}ܶFփiSayXbm`@+Y"5P@qHErJR[W#nM؍OqjN1RTQP PY=[TR\\^稧mV^،Ҫꖲڮ ]̴ܼ]ЈZRZeO_FNpH̅u, 1kZ>cձ P0` )#= @Fgݘ u L4Դ4]M̱5kKp3xܲڦPCe- ڂ*`\T\;DWldhUq^zJ}2 AKL%쟸fvAÉ79DF1"" .n˖u@E1({V]ڈ7&6,@Q21"=9v"}6}}`sX5Հ@%g„҆DQ{&֕66+gM%݀`)/%.)njAߗe]jB k=Aeпl.P[|JЉяň-2 ݶXOVr8u,dj؈2`P~~b#=v!ҡ?<Q2:1~YrXS7/omi-ijhj.i L݋To2`*wNo+-(.Vu-yvrɾY%ei5vvF͌z'Ξ9aƝlEha )oߵ9^qbX5)  P!,ҝn/f0PSԃ% ---M eƚ5յ)% UeeY!JrjvɹJkk5|Agw(͇B"A8r'Ο3kuW5lzĐf[8#znYΩu"#okN 'baὍ2Gi! (k ̮JVOQIKKM2VV4lTUUX[]X3yQZ@tUs]UCsmNsHVs[MI~qucSSS]˄:_q9\,²UlV6N[daSc6έwvZq# 1ߒg߸Q"6#+i@TDXBD,rR;b(1 hxہUut!l*kk+*Eu5TU74#,-<2&#*/LCN%07WIFA3a6;2l>轿=YUe .[Q7ֵ':}喍EFTkXH䂗'᫡X'NXq@[Bbts hijiJ*&f*Ju5555 %i9 Jӳrꪫ =MUUݒ k꺚UA3ےCsCKj[6  -\U~ni8/-ڲs+ γסf4BL 2@:I[{H3[%HD$" D,,X1#p 1 nyzN]M- -]PjkihydF*jyd6[C ڲesjeesm[J155uLUҕ$U xWhLaYb h,mLBa{iO>5 ܆7ba'CjGxK I!vM  'eLЈ |,c,ݡJ" m.fִ6506666Pяn؜ᠦ,dPUV خ ?=)_Q\SRh"bZV^X3[CTQ$U $ܬ`A!)m]ȅ5k&h8ݚk7o߉'B\ӹ0XHBJ_%").ó)"bA gPöhHmQ$D(W10v<]zhcaR[@<קǯbf ̣&zЈS1vl ,crlKf ssڊK 3ӳA\_hbaccM ƦZYŅЛ)g;=+ϯm*r2s |#0xēQsO? jwܽ 6 > ህ[ x(fAIصv۝!«ocZ M Lt5 MUê&tut1/@O_OMY&%?0+#l u)*$*)RX.sBd\_۠;zWUuͮˬ]QtR5oB ! ]G,1ǍW@OƦ&f*6m::&"6DCESO.&4'8''/#O&gE65i %WW[ihGր̇FPĽ10z~2]}[Bc'""#Xp bݐG,<  mdE `#'=3<ې0",hXu~XC͢&&ZjWtT<eAlM1ՒalB+k{5Y-řiy)Q C>llJ˭UTsLkVӖ*Ix4b54̩6o \.k'+X "%<oGϓS\ ](4 X" ;bAT@FHݵvqfZ(540041P61ӕv,<87͍t֖Sʩ.)/- W[USi\)'ZW[b:k$ZҐW>5LL<<5c D,8=K~3MBТ 06|FeK:*;{1$m3ֳm[6zQyU] - k Y]ںu a4LPjCx1csq(u:L D,raVxB~(:v;n~Lc^%+sC=zjzVzj%=z[-a` pmhOTPSRֵ+)-(H* ,s`VMnnJOyRsoVhx "byE&93^j.m[AcW""#c4 =1Ε < AD,z- /!6h""Xٽqͮ'˕̍AS:ZZ~5&5749ʊ -꺆ƆL;}%)ieM겒̚]3yDkK6FJ+( ⢾3o n Y9MuI 6u^ ϖ6;` <QX0SňXt'n]v[BĤM@kt-5bZ݄]M,X]RR[XVRj&!.kUX9UM59Y@ۣl rVRP͟[h-POxV呞Uےhj|o^E%(A` ܘ$z}#7oܼsڭG.(Y*ijFḾX}.P/X֕d%'eWgjiIK8DgeEN_طLQFSY8ezc^Ny&qM"x&rWYMSJ`q]{ȊXpC }^ (XĶ h$"bk6nۼ2ږ~)elj_SVtTWdf$&dAY~FbdZMOmZbz^aVbF/<;}%j[Q )L=aEW=E椄$[^2;ꀭḚ3%#2#|qBب@QTbfTbTp lvȨk7=9N\ԃ5(`ͫ.kjM-UUUUYYY_\ ttqFwV̖‚I];}2=dU4C3 C3k6SnϩN/5`d ZP^)X`6bPЗ/nlہKdFގ29myAZj234310`- K`PRPĴ􌜜,`1Y\cm +",!+m\fR v4ΊI m=Z+䜜>$&%kJl@#l[3"bB'1ftJ"j{GH0#X'OMw3u451\;ߐښƦƺZ`ĖX`%[VRʮ8 a@Wd3gbZRddJiS]r_TbtzJ__s@IZEJZT=49=, 6%TVJt %zbNLrVVISGą[ܵ@N‹C=M bXv?MDk.cF("pF#GVyX{jjZjڹxG[{%45;e%%9)6X"6#3ttZRR20ҋ˫m Ք |’3cKgjfdQPTOHN9;ͭzI遵*!ޗY3{;7cdZE,t<q ) d™iqG, }pޞ[[RuL#"M Jz=:7+ #1!=?/3ppbEu4bD0zR[m튵[֯Zet;|K}m5ЌܬںyU UY9uyYjA`TFs2c`vz2<` ,ss"]̔d²7v{,CKnW - V'GEf&ŤVuN_mcq FYu#lNfCb/b!x0 "v?5ɉ-V88/671JOE% 100&47sY57#=0'+/Y9ڬ̬h_+5 A)mҜG4˓C.4b21x@;m.KIJ,).j뛻eAX1 ɯGxG$C>aD(>}ck#3kBr'Lv6PѶ  I,ihjhAךҪB` \`YXU lQdnvhs232S EJ Ңsz Rt~Ns`;l@A YX,bʫ;ڻg5(+F F @#9Z{cE,$fѸ~ l޲qmGETGjyzXx$47 a`ҪB` ̠99yI8//$?=99Ą$ک 釕7TVWgD73K\+G?2ꃻ%܌;VȽ(v(XbɴŘ>(nl۸v۲<:BbC-r L<2KK r[Wʶe-IOHr b kKܔ$`X#X&d$Dde'k 'ۅOMv) U ֺAl0b0\>YW^]V^Իp~hK j2҃Ak+X|5j m>!%b 1Fحm߽}QFGiRFaIUysmWrU{G[s[]SS b*//ô|мNFBJauUI>voZZ0ҳr䜼s9^Q̒܄0OgfЩ!sb"Cmcn<Qe)yIiQeú6("+bO5Etރxc{ix"؇4nYyUY%zRJV9 v&f=m M U *+)vxA_gfd%& l;2r Ӂ.H8714<8ZMJ<X&xg[{*k7G6YU;BKr<2EZ44+ɉX` :bL;baEU[^P0.4LQ;+4L\(ݥQXʱ%yY^ONnAA0b3 AcSFqJTRV~AAaYnFFbLz!0z9#9Ie= r4#b ;k A,PMCcUUnRRAMYqq^VV~IYYI~~Aq~V0 xsi.OJBtdxxtRzpdZuygmA rDvutf s'Ii+Gyx7x{^, `ĐƲD4G, b8H`!(pQ#4T\>W"ڊB?uωC c223KJ RµuCS#3[@g81C 2sJ %nn4悮v]h褤HIIIL/ /Sq./OwNI,_ab8=4b#C@ipxaTRFrrz~Usu{6"6>0 @ 8x6AtY8tBXxzEABqS["3K2Sb:&:gh[$wuVKV`֔fՕ%.JJAoa SXWX\e`b`'69?CF7W4))*k h⣚L؊fR. xCb&0bJ'.yJ O$-Xbf'N ̱""v^$D,FG{[<&B?ЀΦP`"?09oԮ榚Ʈ{Z[+k[:JR}ژА@_O/P?Ȱ`/7owgg[[Sjb lfj|~Y!f"5))M, j o˟ 7Է4[\ؿdہH-#h EMXnp!?bȱcXL܎` -f7-?eBCUt]WK_\ttJ ?#$Y`1&=ocm}eM`+,*#.),,",/"! -+'"! ZY zUGNumzGBq{rRZ&&faf1M9N;QJPG` h*6+ /9y ߵE"=[v +J|;ixvvUE{zkȈ0KKP2eXeC^Q^>_v^..~~&,lH/30:yx98./P;,?4/aNmMW|֨ի/Y]ޑxSn^{tK{g&44u\h }P:ܣh/İwzsG[]-.̕'XH9J޾}tNd۶;>v`uXxHpBtxa{~dǜz 2>N6.>>.FvN>v^&.;w`cgf6` U50i_vics=^>etCگqYݎ>X7{Zm=6=˾&pǨb7bD, `D,Rbزp쒘޶#XZŴX koQ4wj0' ;0rcHIlXdadbfdb "f//:`>VbbҲ2Rv ^2"ZkgJ-3yG珟:tړ|6.=BK[k[z; 3eVS,U"} Vnܽ 3on8U%;H'R}FnFm@wmuΉiVa}Y^ Pl3 #93R2rr K@'oٳl>Uk8Gz49 5J϶*ùFr[M&҇̌bRƞ^Ƣl mw6lcD,z$a0f_ Wą wTzGtoWɂ-߶}07 C7rP7bakڵȹKO;qkn=xʼnjA^f$oLhtbJzzfel߳Ξpҳw^<~b h\O'=gUKL*ԖJbzQo`(DܷkW\-A}xZMJ@.hU_K٤ \>~.̨oc`fcȴus\{]'.=zw~ƴ褼꺉SΟfc7o=x8wzC xpڕ Gm<9I34ٓRSfggek.O36`~ }+f 2湟6jg{mJԶ/of`f`avپqu,K8 :@ eI5)v\[6k:|>~J 4'N|뷯\v~c{rbZ~7E$2γWΞ<{'f>wE}2*cj&rrj {tTVVlYsH,'0;x:VTCWߪ÷ 5eWU}9 * r5"4- nEf뀽EDi>3 挔Q-GڿСǏrpN=;u /ؾ|h`0-@pǞw;<0TYT[Yˮy1` ݤ +w*W3QSRP3 3dUFXqUYIaaUMA\h\n~xǸSA@O@@_@XBNQCQ˶o k&^`ɺg{|=ow?ھf4˩@ևG/.5;l{xX=5Ӗm;vcέn\=gϞ7arĹ\e[W]b[֭Z~;w/7sl-rوp ӫ{ןtr֝/Z5-/jڵ0ߵ擛j )xC{[d%K-[|=[``P͏3srՔ77FW{]GqZϙpk~?j0ӟ,;n x} wGJ$ d +99ܯܱotKJ%yU틗vO]?{ݢ9gNS/^h6ڵ[vm'yUVYkVjb"g @ .iM 3f={բ:V,KpāCGHXoI(Ak:yҶc+N.]{Ђڶq 0BWbHXx2w&faaaY 5e~`uCNohV^aymsGOg{߲N]=< wJ+\U!Žx.sI W̙QfଔPGghG5i д^W!Rg7OZ| &Ϛ=s5ׯ]El۶-׭>kƵk׬śXRӔ>m;K; :z<~ GAʖ{9pܥmkLHIꟻg…xm u f6/[s{Kx!rw=o_y4 Gv[o&v̞Yh^,%*%<&*TXET8{\_LV#;sִqˋ;l\>*@MT-9{3NΫk陽b'<4͇ٶlEfϚ=wPb][Q׬] #Idއk /Z^RݾdUv== }88f={cW,Yԟ<κKwo߾|܉=zhk7|~cW_:8^nus3}yqsmZٻ S B=m 5_nmh`].5}G3mC]%Mm)-}iN6N..^^>.J Ľe -;;x]Bq[Qf,[~͕(9n_l.X,vnYs5V\E_@ f7/:vnV!\fť=:ra9.Oe=ܵym[FfZ\u]ycw8O>ݹ[7n;}ji7=;-''<C110),IIIHIK ɛ43g$w,ټfeU{&̚p`?oŋmmRPMg_rGqpjA3K ۪Z+Uh{w!44!!qNKzN"Zݳ23V D`i|lDԢ]=LsS';nf_AT]U^Y=yACӢ;O]u]}CGN=wǗn}.u(2->ng[y]mT20q]_}[ׯXmˊ%6WN9.L Ok.ͱӪIKg{^ȃKݖG;}e3kUNz΂/߶hi&vtL:u'N?oß[s-[bZĎ Q@ j6iQ)}f%FL~ugYqbg=S{X-dxw.<87-=~˫kc/cCWmY liΞ>$Ge5ΊO׳rw pӒrS3,,/iJ;]@x{LNnMτ{@hWWcCypĮܦ1Hn6]Q셵yfuwϜ`0/\b%9bUPW_GorHe+}+6'76U5wL>k.,ޯۃٵ ,9mEtco۲mf5($ zbp[4+Ϋpļ䤤i<|ɳL.\(w@.ػs]1sm,zՙ9^a =?gKlY.]{K.]8ɛ&DDD{:'9ȹsF-CYYEE9Yii ‚\M jQ0a(u-qх5) V=1Ζ^V.U=5emuUYqJ W[8nslj ҁ ˎzz| ,4X|ԮڒήKVMl&~ (wɶ5+o\:PWkp @ 9:WNK +\qSg/_ސҾ4a{@Puŝs'[mnٞVֶޭu%'GG{o_e\vjx*b b{ صDڈVUWRػ`jGO_sMUqf`9\^LJ֠M hcf\TڒP7OL+L t Ns204ԓӳ63Ut3ʩ9} }WoU]Xf74Z'_` ]O/=2wќ}=uUcr?4w]%j>aɪY|%0(֬߈3>WaԱ5@1XzTjN ./ܫ`kGvznWg:;gz!X7U=ڮ,8<+&i N]vJly U͵=3ןtjsۂbȚY/lx^mv{g`g43}G1 YYi))Y%m9s:z&nj)I&)iD|]\m5 )xy)(i6ݜf +#%%,"&( .?}3pj*zgXuI5J]Ҫp/®޾?nt'wΝqb`޻ {]'5+/YL+VY#P@1hYy&G$zds[7_:~: dܽgo;r|eu헮Z6 Y`fמ=,>'OM]=s]{@Pb=X,\…W/? [yxவ'tԖfdez\]j00r G,(0]nkyacMViiissxeN{Oow覀CB;8w:!oݴ̚n5ځ蔜׾nc'/) ح/>JwZVhJm$-!.-|"L\* ƺҼU%F##҉0Fعؙ ac0`dbcaa9`yAQ u9!#0e@gv`Ҫi -^xŲYˏ\6 )3gӧMaZupxrGm޺gvGqJW@d\G6߮j(:71T6~Nv^1YaƐc`afdddbf`g0@afcc*acg`gffececP2d7,' 3zY (UUTw -/kn] جz5u@똖/_Z5q+w]>;?wm_r2pATXȈZpBJU+$:.8R?eѕOdFyeL[ 6e j;/h9xmmZyϞ/>ĩS:|굍{eςӃ+] "mm`., !'Cr!#ddHF.iAqfHbb;(R88Xgc T!ȰK@TTVMN\_EH/<'!*=:X]@Xt/Lv6FvhŠ`YQءٞ.1VH.o[e `i%`DZޕ+CCMVtނj$/\]ëS˃ :r;/|r!O߶n.`[{6YuޒZv5 )$gg_;vNa`[iruW~:wŃg,6f`b琳U&p/`A }A9~haЩ='`aUc&f&^`i)Jl%5M 5041T6)+-niʳѳv6ՔL@dD j-Ze ~6Gc'rdRUpfvґ JJĮ[-Wr+!9nѕk⹟~?lqqf[`Ǣjꖉ?;ಉŻvڳ}۞{o-i(Nov8<\d {.J<lVO]9=߻de H36Ҷ.J``gMQ]^Y 9EEE`EFAIEEYYYS47 l&&ښں^~Iyv\l| VVj Jr *ZjJrr"ә5L|3rb r"mEx9Dx! 6$ -}sڦ.Xĉc@0/Ym.:y,ZbO߿\X@ [ \lZMVL| ξ!'z؁={!w> ?,`o۸yoV[KrCc2֝CZV~KD!$oQ $)&G^)e%e`BS؞aabbuqqNHJII  ՗3 u N.NI5W64TPơ/8y t]xʩ]SWl?'tCD.LF ;w _|=.9+ ts KO[13)2j!;ƨG{woݸ|O`{gֶW7E&U_~uه{?b ,` SX YfaapDN \[8 چfr\`Q3w LH OHJLO t25uҕ366110s0PVQRֳuv5Ԑ֐cf`0w s }l+!ڟWBQME K p H,.M 33V`\\2cA= lZvk7^8-O"VI.KTG,f#'AtKGYaiIWbxR]CRxƬtg:ڳk޽=vUI+߻{]ܿn;lũ?rfڬ?Z$gI@s+?N`Ka' =LL-P/ uN5445ٙ5 MM M5dԤ99OACTL@CK2z)Ihaf Js, 3 ;/0r夕]BJګR@v&| f 2 K .>FN`O/o{6b~͙pb8E,0A+֬ݳm>wĮkJ`ɊȌwf9;wO߽[׾С={vm۾{ν޾7oBK8X0/Y{k7ؼ>^Oy |<`633';' 0R:1˜EJQFVI%(#''y!jRJr:YYQE@ 2R|U63'3d 3df]L=<<|C̥b,M̌ Ԥ%x9YvfNX$cÛ '}u=Ko߽s3HE#^w_e]GN;nbM1@1̚ZT1wAcrR^_NbpiG?pd#'#ݿء//vɃعg۶O=^\{|+r< O>oI 51v`Cv\XX #/n&qr]E |q"P#5D@A,v^^N`Tr0C5p z$l,;SVf r`Z%LT==<<=llm,L ԴtU110N9KCC+c >5ЭǷ8uk`чiec7{iqrq [\n_%S'4g'yǏ8wĉAt~mcW=N;iG~pO^lVP>s̿ A0O`h 23r\A q0-L|B݌"̌PX) 1s9##"f!jXPxZƯx̑ra ݶ `B7ؤT LL u4lmm]=\L5s8;';(,T [ޱN0{5l]o]95cC*bHI uvIgUK:kY1ЕN?{_8{ȁN~na+8yΜf8 O /`J2"X '`eb5/3dcbcfbr10@\eD^`j223O@.".`bB+_Q4#q{ HCΰr`+YDTJ@1&Oͮ,1ز02PC@P]{۷[e'9^&$ >>>yyAr*= Ii`EB$),E%@MCPb ˱I(;&hc@. dqM&Ѐ|-8ׂPPY X`Q]Ta c]Щ* jœšfQ5PXLFJTXT\\@BYSSKW!,*VMA\h 3hȊc=#K(ݝuD0{GO߀`77?Ĭ:bmzpQyZVFbVc{ l'* k:rPW aͮK7rvUWT*ȏTeԖ[cCR$MX h( *(",*#!-#!ci!-+,fXo0,Be%%'JbNXXǂaa̢3cA'رD,#B0͢ X&DLЈQI2bR⢂ ^FzRX# gRRy gg1bbWЗfT䐖`J,Ҟ&Sq~\|#4f+oٺmz2]̝&#RM!8\T7,cZmg.\vn4쬭V2SJ\XTXXBLBVZZCCVIV&KU +d8Tn(n)*) Ȁ\'!9K[. 9P"&~P$ 4A;z %"Z\\||~Yd:D+/Ypʭ&;9:z$V7N<4= cÍ5T4R z mMSV:pgz{[rm a^~~AQ) ^>NvN~`DHq- qy;?RQ4 .p*ZfP PfD W0%o I`a`A#YT ؉A:xъ(ˤb*yWP9XJ> EA&pr`VT^+:hXJU|Rr#9]`^JAPXNZ6zb2#Ydii[nٲu+ˆXp1 Yrɂe_۟Q8k'v4Gx9w^gCtuWش`Y[tU_ ' 0.?/d\|VSw>zf 0sr | k13ódDZƥ` `STلe,D +ɰ#@QC q&5sEFpK r)/ &(%'R$0N0 xl [Q$ 1+)13)ˁb lj\ "6  bP63tQwcO8~٪U b[ܻjVKuG@oKkjbH)Uw26s M 07wͱsW<;R@2)39POX\JOO@TZF X< YNP瓅C!*/.%R@#|C W ,pcWyOT 6]PVXNWVbЈ 7 IXJ*Zd`+`gƚ!zCho4WE"X6e~P lC1r++궋˨hdX884LEa{mkWݸY˗ٶk휖 s33SS+[i=MĐfZ{GBxVmNxuǏ.p Nf`Rv12a5%$$ddŸ8`m!JiKX1@L2\ `cgbF @zr \¼l ]vwUD,D\fwPĂFR \n@;ee5@S!N`3]48f *E9EEdD@rlv#zrh(33:l$:xB< X gbvN^Ek:j&/mߺk0;xM-Yvi).֑15]&t8CaZ+W465gťT6-<ڱsgX3Z*1r  dgbU nXn .epocl|LX0Bs-(Ĵ5ظ * 50!%ggUv4<$uKu)("ce䒒ab '&+l,+r$}2C0*RV UFe*f;//W$am&!b˫]b纵[Xd2`i-km=8=7-}9Օf-@1dtF[FNX7,70aƅssMU(" ''"&&R^^N.~aa^^>NaA1A _闱[8aA,,L3jE hCjc&x>䎁MX[M}+P~dbMs6 >Np}l^$(s0h4O4;$H`c Se`fgaMϵ9} v%vv&P . JP F3ٹT eAv`ANA]I-ܳsnݽqmk#vْ%WYbmIL+?or[KIhH]hRFICM@1ؤU/HHʊNj6ss'>[%+o++ ,F,IrjNx W g "ן*dG2!4&[iϴ.0bXNN65Wv6.lGi e, 9,l2IDAؿFv0] KaS_ ^m})P tc!5>|*Z2"F3;d< (%, $(̤mټf:l5xƍGL.n*iȈ qԶvqK.9- UTZTСv|xaƖ0MAY-=]=ĄwNf`&t)?$bE )A )&C/n]{B J5v~oyur(bփGja ;';( XzP p  ~. 3(bA|lRlfb",ťLA! &Zc@-4pØ Z 6%}EaQ)`8x@ (@q2ANKAk*#UTܷsŖY~ bk֮\`ɚm{W{ۺFt4uLl+/K ߰s]Șڞ#?pֵ-"nC) vAhB-c vEQ~YӪWwG{O*c ڀhA;2A.v`ĂͥA3l9 &JaA^6&N)% 6.>^f$8+q i~6 e^>=}HiK%P^ ^܃6<4(h5 ?CnwTofCHLZ[֮\X.^jdCeC[gھI2s13 Ș@;@C19KwCo;txBgw=[Gېܔť6q>!X`؈XX8 ސ8.2$:, ]Լ2sĕ5$4cr&ڶeƹ9v i 5Iq&ޑz\04P ˖Y3tݶeK:t.0bK #nR-fЫY^Ys=`_\ Ð QJYDW KTP4+("̱n((juhNعaⓐ699AM|A`FXZFOP$-,`jgsFsbvn h (5?31Bo{R؀]Xv~ģ0?#h/0b49mA/($U}s^w3o:ppKݼ˂q`n]}UK&NR[[̧IiMs.Zx`f)k[6]_W!$4mrG qƶɥ5!M3A$XrqWA`pb`#S8rSݳ}5g?`:T p+H c[Ehw0&qM55؁%3#ht\1;,G,6?y,|A[x|젔/" Zk. r i<#Q@JBWX]TJJ\ Kgf2Ki0͈ JZNJXBXzky 4d ]6q6.Fi.,,?m-15MAF^ C9vpTkm ONI ybPxZe݂@Pog[gO[(i;ګ avCބaYeM i ͉Vց1Y&5R$LX]AxrB"X VS$x N{]&mPe@cN6YU ,H ʴ5C$0/˱, L| ׀a1>P9+" a.v~C+Y`UҠ, 6`ڑ8ńEA3Ubb"bR,lnQښf|&^Ӗ**(i+r0y`Rw6.^lCk~` ffQfddEx8 L85Md84y܋םعb_rF`]rf]j[VG9[[j֡e%M]2&!-DKNZ\B fcl5uB]nqyArWg\VBLZztK^km9^Pzvڅ-OХ@&0i;vLn?}%7&fg;[:dcbace f@amkEs))Cmi>`3boMt`ϧa%' *.Q6. %).00\✠xlr!tK2W lr,l%^3ۘHEXyvƠb$4&x%AAZ^u^LL60' ,'#i^.m)>M7`s7nE)ͧݸ~+o\b{V:[wMf~{SSNL8lbˊ KhC+}ݢҳ223<[rrrkc4oؗdM.^`gd^t6~Q~q9>f`"iA 9A'xXRJ |eҠ],\ws1 .]ڶ`-W^x h vm-j-Y9wm)~vj 2ƲjP:gw33Gϰ̐ȉ=IɁ1U-IRjjؗmas~`AO.>Pe  V+_<9yx^Е[{puOҲW^=vkmYHa+X[l9d,8[y.n栯-,g$X@j13/#;bWT`."O@BAFu% pZ̠Yމ2E%c,g1cۚ1~cq "XTj#`c]CK<^\;aӶiO }r`ɶ|+AB]|+Wm{9=Q.vV&V.~1JjVĐ^X^᜖c28 $#+WW tL3% SWtI:(`0+'=pp7^~3PoOu6fF @#_ZKVX\QNဍqPxK@[a^v>9Y1QЮ` "~`T+JC_@O_D\ج,!P~y=?aAcؠ~Z`녏Q"lų?xǎv(S7wrƴ[DDdlgg3MTbE-4by]ddA L6h8 IlU i'ϟ=~ȑ'@@<~I7F_\:~у NZ-E__9p0fO)X^(&);k]Q.>>pĂ; fЈ000e_XOXE_EOL\PL4$ ,T45UdEdAJ+:،ApaGiKSr^Se\VZ|pXSe Aw:J] b+eRhZ2#32'͙\'Qz˓g]:uxϮmw1r⋇|zx5l;Q3nϭK]ܱXI>U Vn?p24Z_MCQ\ARONFTdcd0qvHj Q }ߴL(車HEeĄiGnɷSS47xـ! .#!@ wy_).;q;uCwޯX1_P}<BPA;̅SR_I Y,3xR)VDӐTj驈 󉈋Hkaa`+XYyxxE$'kb}]ӛ3jڦ-\ƖnZ~|feuG_R09Rg9Pʊ3(\?AlfǢG嬘S5aiu&2  ,sܤ?rp-׭Yr{g00|#.u7.lݹq髮n7\y[ׯZ5͚k7o۶:si*bҚ&z&ZJjں&h_$ '=A24 d ::S,R˲eĴo3 g($ek,8@s^|!#RkOxX!#@_Pw﹃゚.2rv>vТ 6P߆A\Q-@FFOV4%Z젊|8qeG9f>q-k+}-QQQPI,-+ H Kى6-XljyJdBy]nbV t iiг`s>xݚ3$;?9G`)Hv,9%:0gR v)qaa&qvЭ׮66J۸,ґO=zsaMێԭ;ߺu\ gO]>nrcSG~/2Tг3Qg`S*ȊK3 [-D3%o 7oPgvĔoMj,00Qǒ&6e>Quv"8-Q~61];1`̂Б#kד?ueEs?}q.(@3Xŝ0;(becRTƣ)/*&:GJQ/f1+/[SP̠4k崚i5i3hw5u}ʹ/5};W֢ɞsñHF.wG3Ȕ̟:kZb⚦Oo̦Ps!`&\yuk7:xMA-x%*r{f5\ԴHe[l߼eçv.Y{܅[?rCg߳nVWmlmc!#oj-'.i)gƠ@ yʖ!Lr~y-JMx"mu9%@ Lz3y33A/d.aaQ`hS{apĽrxO]Pk٠;.y}o!`I\\T@DQX[A\ Z&)-(̦h ejm)!(%-&*lJ(LX6.>yĬ_ -Y]%,Nc0[?{ڢeb^ջE3Yq7m̌11TQzPQEN ؅Q3WUT ՓusKusqQqe2HȲQ* aj~fV~Q,ȱq̙8?XMWcRy s ]98d..`MP]ࣻ>rO\xp7ބoOX(7e-ig';&vP03''h83;h]@TCLIXAKP\SFBLDZAZXXZ\YSSJ!`n^-_LֶĴ*k̐ކY+zyO^>{};= P>0a6]>G'0(ִ'4L_nY1ghXII239̼ygʭ۶lٶy]./b`{q09inuko^rDN]<)+ZSIIFVP@_JBKKLCF\Z32**$RQOFK$864;8 #]B b,]4ҋ s'{4'E|? `/TS2Sgc l1u6N`WPEp@7ΰ>ygk̙\{{kӔڿ=dd`Rk_0pu[ 22[H,LRb2 "bF8'hҕXA[C<-5UeLq(qÞ-3CCӲD ;'Ԥg4Yl Wlf͌->'m+h)uDھK&_l" ^r'hhՊ-'1ܴܶ5ZnZ`wcZRMIbX 4G~ܙə9af!2Z* b6n֡yɡՅ)yq.Ġo01DC׿1?0qXv>.>~^^FN]׮fXh9x|OD7y+%V?́3 1E "58b9v[PNYN;@A*gQWUM]Mh_%2=#RQZAQ20oq5z2BQ[lʠ8a9u0<̞}|_l2k 8sۚ\Ef+3uꬩy"|좌"}nZq7urC622Hwܿ;:o|Gof:t9nƭW\Qn6ʺb⢜l*V*v9zɝS'wIJIkR96n9Z|J eشXJ\@MKv.m`cS36m58AKO8A#{iN6v8 PWO?)}[oNi5\zyxR!  L8Z9^iS-1G a6б:X0+hiH؅57&/?qĚHK%)iNYC-Y7͙|VYbrBttRFn Ƭ't̚!eۄɽ _Z 4kHYɞEv㜅wΟ0bUzaDNW3'p 7nݾrؖ&uPӌ\=Qh]5{DNM"/~HU\]^bLryzn> Jrgp[hN#@1h0ʓ֤\\fg9jZG'EFk22 3ۜJƊ|,||,A]N~a~`WT ؛Ub/dv2tDKCĠa(ZXai;3 a+GE^Љ$Jt*&wtFh=%HhMR/ŧT^\Ub&>kU0qcG׶qqq1 *K JZcDrW3at;NN-7ʵՎP 5ϜrԎeJʓU:g[~"mO.ݻm-vv;S''ln񒫺vfֺ#{lߵuio .cUV`wLvJ̩M*OIW1. g5e0)+ quw1bug0Sd75 +_iQii~>~vꔨY&''[*W7pp9E$DA+xE4D8ؘ[SWr|/=]9~Kn_YnT3f1;6̺[f)d]NEFX30 3Y+X000ֶKY9ZrpؕO]P)ZRVf쏉Y;{GgU%X k%-vj.i;4?8PA91gT8aB_^?74FiIKZshX LEJۢiӗUY3/PK)䢼_)o\rޭ+\ZȖrùhE N:51kΊ;~.6 2v梼fƶ~My.aivzV^@ϋ[Ƥ;Hȹ[Gee%{H3r8K0k{zx,{\FY]ZI~G_K]yNJ1*`fk+[ńxEdE8U4ĀҼL\L5\ 9vh={;{kw=ytEƬĨjAO/m~iHeԈ"?/3&/F.%m8w&qYВ|B>De6ܴ<_=9N>1M/  KeXZbjy΄VL7wDAٮ|M4t t4M54g ؾwւނˀ g\k'rz`h{.,g[R͚UIVY{2kY17$$) 93$/!+6T}}p`TW^WG:<>+3".MUQWc`hZ\mU6Jsd:9YgO.!TO;!\:.-#8= q6*UU1Jled*5e`6Sx%$D@ǒ΍-WdbHivcrgozusuU%zٹiP`wOG%`#?FXOi ppr2knm`SP23 aU63STP񚰬47/>aA&eRCWYWbuKW{S]uyFFN^^n~i]K r؄u}-~љ% =M]=q@sN6wF9eӫYheזH0Ln)r&Zs;J ۚ'3X9?a'=k^}ņArf+7-pMK󲝻j[-Yn^)&zڊbb2ږ&ڶvƆƦ6n~!am LV@J4%N6*#?14,-?@%KKZ@K Tl܆ގY3m<+5O\ps KLcH[ $յu>uu>W} m?S랴Įs&/~do Sc[.EY) Y }c=C`7䔌hOk7GLAC}`d2649V#-E[9@SPVEQT< 3Gg})i-K+] Ȕ`_3;/_дƶL@{4A#Bb, Zjb"RN\CN.v,6r ugfi+Y9x[ 00z{r2pٹm9=͸@{F9Ą%8lDWlhVj(.ge#RSZ^ZSZYұhUkUd4"{;k򲲲lWNh\=sM6;u(]V8cR-e˧6O] ]2c`dZOSY쮜Ύ-Gm^]L W-ח]bs&Oe7/o6m֫Ζjn`*-fl"eel%)!m_\\6!@_6F@TQNSDD2ʖO6, MM̍ã|mmŔ44-#RjT|,xCmEr"/dcff,RTNM;QX[C.23 ӘA#4EAP\Ԅءa-wdo ԀEWtN$c5=&oin̂M]m]]ՅUeY };&tC’Ғ*k`Į5}f]F)u9$il6s7g5KN^fz.lNYߪۛ&nVdP*^s~WnnWc۶l;`O0Sη۝U{*sûW,XSm. 1~na޾щ IF_XJJGT.eFWhbysUqNV0 2frycpm-@1蛨ri;eVg{{+ K[DY OTd`pHO/4Sr̙8Z_K4D Jz9{{Gz[@RAPO}`+((,l 0SUlk"*mc韾f[NLKӜktxeez:jjKJˊssr[kr ;f(k Ĥ*ce;u4Icpbri}f}\C,,)&\?mќ/So]S?Խvk  v߾:;-#;4`SA=%#=1&CKZMW%4XYP9RO3N]3.pg aW)iy9+܀QipE'`ebee`ci( lenn+!++O OcaP3Wba`ffdd``0spKM/-)n޳<}%See:r K rk탂$tA1$?AApZSmKYg' GԢ{Μ!N߲qg/mHLJ̬n*KKI rg46gYllUded ҵelDؔ}5$s #k# mASB#vuaUYN^SiwfsM~T^fZq.(d ;ZF(blj+"l q9z{ښYG{;X::ڹXY;Z*sGHUX@H30#8r /cA 1Yu6;I뚇ֵdV7VյY{@BJSJ.qܚ D3b2|>eۛz[A wMۼ|e 92aܪi|Cj3k;>OA-iζKBs{]8dKwZʻ::ڛk',kʛSwQR\!g_.KZ6KZ~ܹu'ۚI(ɉh()'f:'&:z'&զxZ* {;\Lzv޹!5.Ǝrjz*L &l \X |;91Ϭ0[̼c(wqj?FN@Yb@1MMiPCE@\FZ( im%vЮAFF6^^c`fєU6s rwppvfZOOKOS^G_皁Ts ;3!)+mh(sV~rq''5MQVPT(gn"%,_^VPWS_\]SUVS2mъţ2muEBwgm̟4qnc}}Nx"/a 'On7p䊫wM:w"ȮĒeZ1)fy%NTշ%`A]'צ0+ iT7+tYM>|l/-k'beac<%14)1%-/Y_P2YKNEMA?%< 1,$!:#J[PK<]O b<,m}mJ2r4#=5LeeK2 Ddmt88EDŕ5ĀKfA q6fNЊ*~>k=z2|2ޞ6@`eneb ,A1 hWVSKESCCOKW\CQX_[WTKF*F-,LjB` X֖jK47TW7\0gBqG gZM]ۢqL2}}5]]b!͓gΟ3uĝ3\9u{;t=w„xM-Ϭ]gN0UUw5e=E/pDŬetKn~5ҺU}uIoZ{ZSI_FarnnJzyyN~B/𤘸P+]%vFA)~Y03ĔĬ$@7gKC+;&57+a&4c/G?&);=7DPQZfN(+Vmb`ovV6=ZfP64N@! >joC-7:  /vg4" 1CHDA;7;A<76;>=745CF<46>D=;"!0 $44*.//.+#>/).31.-+/4! 9H.4PA136CT5!m{tnpqpmhbh9+SD $Mm}zspoqsoqwts{3|~[9 *Aavjsoi}z+-jg"(sUH`|}T0V|wTc~uamgݢ3 ډ$AP#v>9֨uIA\glq\bso^Ybgo~sZT^W;$IS0>=* & *$+@[mjWPh}zjThpS55C>* 4& 00>Q;5NfNA\ugMMWP>I؋333N5 SQT 1Pl!Ʀ 3;/xw?hw[-dD88Etmjblbclllnh ʻ|bbY;Ll*J*jJ&bfzzzZZ7pu}MQyqiU& zL\ae]UyNMAfNqcl=B-5D%ĕr̮oloϐlno~q5C=E%e9iecK]9mk=e-=5-s.qp)^faQ&6Av^ڹ] M5q鹹mQ2IܔDxsKk 󀝝ڮRu憹 oTX7mbs(@Զz&,ٳjr/mӦ\1mak't͞;}lGSK-؝[::cn)85=w֬HwE.eO֙/9)u V=|ÅY ^6GgXdR{hbKh u\~e\NwXfFcYh4@1$vxy鋫y9Xzq jkj)6k1;bҢ\"¼cZX%@ _>)5Ѝ\6Vv6ֶ.bwu35TbgfbbH+hij*)iij*{ihZ1E0 s $U^[^ZXXPPX\Z:kngYeZuGsI~aiAFFfniS*/Me9.JҼr  &X?{b'p¶if^V̝s\%Kjj0kT;i=z YgY9vL--͝mNnu CӇ[$y&y*ֲ0&ZgtNn\H40{fY:kki+󱉩hh;){Z&U8z8(%{dzJEG 0(*21(CHiWHT~xI"Ss:OT@!10Z5Y,xfMI\NOEQXN X:888y:멀sq{8|\-l□!^*2JR&V XUS7<7+??/+Α˺yrg[mwT^M]_2}a˂Y> H>6UdPkj:sVn\|6qFK&;nAGiLD: \`4p Je6hw5=mv,J\93]C"A_M]gͬΞ:KZ…Պ.+YggUܮd²_>ٕTVX\^אܒ\f-n`icWR\6394+]YY@E\?@C@YYCXVM__C,,Q#8-4:+#= ]\@SbR"2 v.nj||R2QBPX\_@D 4cg`R42bcClLQkchgme$.9@'BSfuuv~]o7?5oK eA 춉!Ş 62b "jsU_4/oiimCYCo_[^sJKuiU~I]$fiyJfauOifF ,txs^,hg_li`fho:_Ŵ48,+@timA!r(G& 6w4䇚IsjvMܓȯX[X[^]`*#'*+% lPTT4ؾmBIRVEWl]6wB碽ۦ_|ɡ5&5Mr\&7wԵ'=P{q6apAYir'i.|473A o?9.@ c1Yme=wC>Yww N}/GS(OǐDwg@}++]E9%a.QQqhgpwS@t_sϔpCMkcq}7Nc5.bHs6Ud,k-XU.'fle!kn)|73Hu6rЪCZ8-,^>^~`*a`cjngbh`e kx >p^f԰*&&3FIXk(112 hEE;N_C+++;G[SCsg_s=e aaQYC -MaaA.vpcK@t *(f9 ]l$dl]<<̕U,lY F4 Kq^l`qvFF6aCkeҔ𨔜̜Һ¤PgEP!ϩ%'0*7#3=%9:ߜW;=YEO6:8,q=S'L6ˌ]MF9iƾfn\V;at}Fަ5))F Ξ,2mfa=M{8YIZ?:!.,+48,# '#!%%.?1[RDS@ :ߍO"*YF!$'*8MCACDO[KO@QMCT]E):. SL}5B"eL $\9yW@\~pƅniqOU]F&M+c+K;kScS+KS+@k9WqN, j ~*/tpc4;/c }]_\84#1kDMGrqqNmn~annVNA~f~ya>HœkrӒR232:=:40MXP^6mɋvY1gℹCL,g .]'vOi99cq%ֺΖz:}[XFITJL1LWCXALA/R1:R34=77#3:8/340KO\VPAͶ]۷$?4*3*?%ңefGrUX@, @ Ya6J2RbJ֡aRQb&f>pM{Vc9AHԔ&,Uj(kfglknge%pOP\NMMEQS[CT3&x. "NIt= #KNYʅ eչ ᡡQ)I1 ^LV¢323c22\,%Y;:7%)19.&9)1ܜAlzf=)ۦ委t55ܶ}܉lS*^dfv.ٳns1g)Ypٳ\ .2ir YMM?)Ţa.gnflzچdEۊ[ZIJ^qIQ =Ueiu9QqQR~[Ze@KIIC[f@@t>aH8h#DN.v` |W.@o`iAeЕ6\̠Þê r>^ (gkn lkL59Q.LZ*J*K b҂ݵx%\==r젛x-ME]rõ}EUyyI.e1Mlh*ȭΈNH- 4 ,o.ɯk(/,)ͫcرlAWqԾ[̟6,3h[6si'-ܺb9uW90ߺd3'Lll\2{EUabƅ-uۊo[+T5dFg'g%e%eduTGG8F{ٹ{:kj: 2(piKK8zwzg::{X(J0=@1Tٚ1K 3A@;#-' :-Yjl+E9@yN@d9S6*8kg93b`n&_TTLBFX*k*qa3L  vP M y85JR  <&]X]++f$OAŤ7>9H0GC_1gcې;;ksSSSYAݸtq]vAM% Q>l&)'!flf,RZ&§ ,#&, 9]oN4 ȱ!E,htwV3‚`vp*]UX)pQ,$ 4KPu  eаP t'3fqCNZwddS[kJkrks3 kKz:Z:gijhjm+jonhm8ĺҪ*|ĉ';3U;3gbTՔuΝLsNmo3ѧM?c~KSo_Su5{zKMc]3o?:JZ1,&13*9+9'*)!Xd:+k +Z 6^neMQ~V 9^&r)m!R.rZ & ,6 ",K@ b;}q1CO%6&AYAiY>^NF;_b-2@/@Bm)_MAS*NNEyWPKO@r XnE``E%mxBWZg]|̾&` m]}}}'tϞƦ 3gNhklik6g9s1׭2m%/\1w]]OhFľ5r J;zں.kin9 {󲺌En|vM%.?96+!7*um"}Lu5\, E ,5D  ,bKB::CMB݂sCӣe|$(%'%L\e` L) Y9Efv wwmPtq0s rr6_x] |99 5X甂FxWjnr(22Rf[֙ac"h\^׾eѴζr`Y[;a޾ ]>gִYstvN8u殩fM:yA8BϮ'Ll咅N9kƅs/[>m+,Xrź9stVu箉L?wri[-Jkۃ 6In&.* iv²VJ6VVv&Q &QIiQIs &6Y'XEX)$q82X;$r K@Cy1pf c SOG=iqq~> S ^f6>1Av^>Qa..G9XXSvU(vUCo$U- 0RQ, .5u5da^L)Qq!vj,յ9щ=õ$7'3=='giOjlM`u@ [yT`D/gў~h=0-X8g5Kf/\fL?,Z|;g5L4S{[ZJzzk\'Uw@JJwhgbdTTTBBZMUnqC~MXC[wtY_tIyKFc7%P9^3}fQvf>v𕗜FФ$N5;8)QKJQLFOTPBW@\_ aaP2@.iEX&E ( /9a)Y xQ,- eUdDAd`!lR35$e$:d% fjoh()mE1Jmh6\`:c„ '6iN<_/XȬ5qYz&Ϝ خ S'ӦN]8ۓIa &O>wڪݻVLnNpppprq736ws Hm̋ nn/KI 13=gAsÊ66!9!M] 7OjVVU]\X[Ro癓 mi&) f ro0!-;8sqKDȀ;i2VЍ堒9 zWQ61})~`ota&'hOWAE| l9|S*# Kp9AuTtTմ@=aQaе"Ʊ40Ǫi*I#+=#=&4& 2#T;*1!&:Pt 3]qmuZbafp/>{|_;Β}ѩ]]Ӏ7pδ/9ܴӧ^|S{fn= ;ϝ;mY V2-u] 3ҳ2 ]̝=J&zSMb!-%fXY:aVGy~nb_KxSy`0`f`-cd<ݱ1A**9!1 d 3q a ˫UYxewA&yZ@@@%(  E]2rrJjjJR"Ȍ Nѓ2IN43eg(nH OJ9ڻu;-\|\`㨷kW̟lSgΝ3s&L>s%͚?u{2{s/?aU;Mh8w܉m39m,Zy9=]gMlov:j3Ӓ 'Ο5'1j (Yz65%g%dŸ+ 2'Z)3K(2N@'<& G|l lMy@%`dd M '#3h*/h';0#C(|`+ h @l|60)I sr.|eq~^A>~ q)P3"$bEbSbZuH\FJ\\R #_mMmZhLhpO M뚺l݊;[>qd`j'ܵdfO{g__Oss'j٩3g͞x՚=m]g/޸?QcmL` .ܸuńΩ /6䳛׮Y~Q`v.̜=rl-eG,ĕl" ,̠5!]4~(-* :^JZ 4(#ؠΪKOJIK6Ѳ OJJv4ae()-KJIHҒ.\S,k3{bO凮?r=}=mm/͜9k{VNlh>k(e8sɓ.XjnO{ gLvlukV-޿`՜z{Ο?kꂹ}9sZ;?ѥ}ɓWE+ {9Xyk*nfd`'bpdC٠&EZ& L ;B1jNfN^`* !#+&%''(",(" DPB EA9XC khK+PTTti60bAgPagfacfdXPiqt(;;3($ l*JIHKH#V 2@I%9qaP*g&%+(sM8S] v`1'?7)l7+'t5\rպzx~yKMǴ󁝑ڲmgO0y…sif]ywvK56w";q9:'\8g f_p-.nVSΝ;ut`GҚ1{zue3Xx ] x@ȗB P`Uop9p_9d*x.*=`fcfW \L|>88?03EUع9D@ 0`Xf\b*j|"*ںZZF1% X$$Y%Y1С ZYIe)q9anI .*R@1{e%Քm9s쾺3g^u9q鋗-_<{02g_n⹳gN9s洉}l9t*ZҟAcٝs@GL7sИsZs`󲹓g-_h0&k0ybWGGg{͓g9Nܲ|VOMz% tNslt;;/0AKO"p -3P5h)^]cN^H;o>>Q^~Q`QXIIIrʨ(H 00bT$sr>0 ,Kn>8H` K KPT\FLOV@XQOOP_XWKSKMVLTO|1 %.D̠]ڔUn똔蝞"+ ,YK3J ʧN7g͛7<{Ŭ ]]lh,P4,\`杛Wsd`?gbOׄ>{n}r3]3;s*j[0oYg/_hិ c &>dY ۚ[:g_>}Q{U vkN5E> c])1`k~XIJs@s";#h4$.-``IV+  ;h?>A`F UTU3F @1h0  s# 4v?E2P;T20!׬+"!keb ˫dgjo`hl & HPX r,(bEA_ĬGc@@]f.^6‰z{zzg.^b7nܺn܉NX3gM Ko۸|9O^jͫ-Zs#'9ԏ={bGK{6N?u+S:e5 &;Z_oƐε[/Z' ʔ tk-J,Za$SN>hj 3I˱3qp8&7`&('%kAJ"" -Ya)PJHˁ 4e uE$d$yUEe!˜WSK4:KXJ Xs#6k6`?|V&*Hwe!5(bťd5 XduA*jʊJJrR G ƌ@E1Uu C233CjB 9 ƺҚȒM[g%Xf%S&Ν3ڬY/Y`т\]4w:0VA͝3.Y ,go޲~˖6M^7}3>z[CKe@%w/_prm^6gΜ?lkOJgu{0 K뻹<}NGAaZ8/3 3#(;/.%,&&+ŀe,V.~>i N`6 1~1qA`GM@Je -&(+&m+ p})h>@131Yh33q)(0s۸@C blfpd {xH-9 EE1>A)Naq^)E}^АƩ~T IYZ9:IK14g"$"lmIWR6rABJr|,|2jjr^M\ t 0bXrfb4ddWWJBNFf5Y6N6`vc<`%0dXgHMZv,ljJR*ZުRX"VMI |DRgAd`xLbrBTtKm`ؔ†ΒCgM_4{ʝk6:{mΝ9k‚%sN\j̞?yif+٩ӺzY0XuN>wΓnF@P'/j[qQ>kxV7``PVS03[ a%#"#" X-=i=c%)E[K%Y`_ G@p4l&,%! :$v-if}lJ+! TTԀE0^ye 4NxBc5E;"Cb#c<2<٘2j ڋ\`Eۏs'v[|͟=w=l:459`i%g.?t|hfm_?{yxamٺga jfl@ 6~M ڦVf6j.J JQ?~_94:&:LAATPEIMYWYBAAWDT X K(I s,(be倵8 (4b5ՔeE5 t%d5 e D4K^!ckfiXL҆M9bf614bف<0EUD8A ,vimm`9( !,!&l XH2vF5!!.24,***.<0.'1ИI?$.+y W-Zȉ9{-Ki.\xْS$8@E䉳̙9u%Z?m[v.\zչxŬ3xŤeeeL54z cKE~amwoG?/o?gkG_?/`o-f=yᓫn?|qi9Q.֖&Zr"ʠ `kW\QYWDcedŤ5d4 U $4Ԁ%8,@kB>%5Dt`baf 0ٹD3?#h< Xhb&O! (%,n8DEU, X `q&, [ؕ lEEGE&;3fgD׭Z7m֢sl=wc{׭ZH+Ae-mMv*(v 5%q`m !k ~vfPĊ rs,bՀE KHH  L r4dv}r32S:֯8y߶y-7qϚ>kkϝ3إ9u|P:0Yw˓+MhղE+f\Uighl^ gl%gd$'$Ņy;8Xz;;{zzxy{E᷿6P5@Puf^>Cie]`+-&.,)'vvF& ^PRd``]!*-". ;mЈUQFDԼ\P 16dgSjH/+-d`uͱK6ڶkqgN6os+[.9s4s%vdg-x9&O_v񬞦ϰ`SE~о3N~A`\JYX yFF%$%$$Ąxy'D{{ƄS5P}ӓ8*?AboD>9}achKSCJLVҚf*frJZYJDTWV"rRnnRR V+(՘ pW3ëІ!'h`؃01W€V b|JSy؀E6h : Vdd1)&. +6lJ KNM  N chIH/)(s˲l9rvY M:wY@M`` 44w:: ֱe gN]{M_p{pB\8*KȨА_gk`/ϐȘ8`(8܆۳2ϟ(/ 끹t;[G:i*S@1px;D ۷.QF!OKh\\{&+3;'z ) QA>N~ie9NXfO2@Ga2R\l|bb r2~GbTlrVbTXhX8$""$WRXѵfUW߶}nO頕-Ӏm6 /0f9x8N?}9 Wnٲum+Ss  6@%hAp@PVtΚၾ^4 G! <XDƄDF]WZY:˫ tu 5d9xx%YNEQ@_E9i9`ū!!$#%( K:h(YXi8xhXoZ wi6FS +GL1!-߀L>9nuN )QaEef ba:TԽݓbƓ/h<Ii QN 0'%yj+  |͋/_qUWmݸdњufOۆ_XB\ XɼJqJbӓaj!^P[~`޻fu>i;TbSO:4>a"t,,_bg_[cbj+X ޞޞ^/~  fȨH`c @ ډcC56Bb_s+5-S~ADx|5!uy~%F:(hHiHIk{26ʦVJV^κ* bch`&g +[lR]QVVNES[SEاF(bU4=.MSq aA~еY pZO5dEkW !.7$!F_/qBUIFRnc]W.ZĞ]6/YeO`tܜ93[OhƠ6&ϙ3ւs,=yKw`Y vL̷݁~~^޾nV6v6vnhgGذ0`XIo?$f^|D 2 _$/Fϛ&v'YŕW;\` ,yUZFPOYBJAE@DYMWZ d"69 43O3؀zg/3m 3GEr_E8 ?Qlnnemme z@-kyD;zgB"J͵I Q[WyOqim]q~i=M)qiM=-%YM>%s+35%cwg- -/bPԖUψ v/6ab0,̰6.Cc&1''ƈ҇AI 351&̜c "/˫ד."Ó-uExtWOEo_̱K@ij悮Ze:Աfω'L ZCl']rn߬@e&.^ M`54< aa!n.X{sl@XxHwPfD,/kp q71oa&=[Md 9ŴTĄ%4dlm,TmԄ!W;22-7**'ˊoBú /fU,:eluP,Ð1 2ѐNU bf3f}Afʂ0Ȇf%&d$&DطHHINԐegֱ*+VT/^6k%]Ι?kњ[W,Yp ,?}\`i ]ɠiupL^|9Ϛ1qղD0PEFF[DaQQ~XL[Vnv.nAHPctWX 4?`Ad[%.!zjrZRbr2ʚRZVvzfvv~&2Zg암a#%ؕ&rp(XZ(K0dJZPs"t'WA ` D ->,9i#V@PDTJJTKWe$&'@#6..&LSCAgڔE˦صoKl´e+]8dЖg&Louige9'Lx9KV-Y0gbU+UL"B@,ݚШPow0P @uoho`_ 0~FWxtdodAHD#Oĩ;Y!'#X%YAAqME i S+] C[`K*4DN mUC#\br;s O >0}q>̰});- VjHa.b](] Z#ֿ8%!1%-110нJbf'e/X>}9{m]svQۺMh5 X+Q` v9&ΚhK֮Xx7h%$EFFAP`Fl_X .O_HW@w.@Wg_qD(zEXbs{)'$#(h*Iɨh)YYI[{xCHedbAUofUI&/S{gP`s:Π-h]4T3! R ^ nI9%+"ثcdT-I @Gk-9iM>]9sVYvs]sĹ ODۛ&~`IJD'"ZTlz)kjhjʨŵW5^skM80m zJKʪ&̚=k&b0gs,^b՚ŻhDFF'=ݽm\(p'62̲nF?`"{qa~& S0 ;->|1['<89%e$eeD44$d5%4= 7XK!*]V6 Dعg~U@S2HȩX[VFidAQrq>-`b n}|Nd Vf1pKbvaY)A.6^PȘ`hP3500&.:ZEVYEOOV34+7:$1pJ"VJZQY]XPZVFN3VI3 BbBm Ңu-SRL l'(V_CTt(? (/fOb`֮3[ĂԳpv6.a8.(-&YҸP`X` EI]cci~Aګwg6m]M \[R1-=zw{;ݸn+׬Xn}~o$ X`ʜ Oh Y`֮~n@^hWȄDFsL"Re}ms{1Լ̻ Dd%".!rkHں)yEkh:CTz]HN~FsZc]vLJ[p +Ȃg3K R1 5p|J|8%be3;cd׮ZeaJ, cA ,}] eUԤ sKs30?{&vttU65544"wҒƪ'/;s͟p+f)G>!V@HQ y8 FŤ@k5|kb_{5 J*(Jy*yD{kxCtre`fnJ[TmKFm{iȰN6PdؠS13nw6F&&DFaqqqse,ֱxP;Y113A@im`&kY:4+:y'Ν ڦ:--M65u;'LxvKC;7ϟZb]atwXX8_ _xpGl ,C5H?o`O&/} ǴКin"*,'&,&-X)E e)q K;k)Yh?-Esgbvr`5y~vϻ-='vXes3]3C-Y)5cYFP,nagbegCD,W?4`C23qpW`K i$fp2p-da“96.22}ʐ`?O;c5}=}-9ƪ褩ǎOϫ0Ωۛ;zZ'L7q"0{'N ϙ޷h֍͙9sΒs5 ͢Š52@QO_hQ .4,lEG[*&/N]WLPV\ɄE,hU20Ndl]$uJE*94 YnEݶgf_/̠ ̰VJZb RrPAA@ WH 8E%gr h 0(#O/20$46 t޾6ZzZjriQmmiZ⫗5͙5}朩}=Mg3 44qً5}-ٸu˶-V\e|pHD#Խ h<x AD,h=%АЀ0+F"cks9%xbb` <> Y2 v>36..&:_6Ш(BKd&6l V]< ^+!*,%  ?/PPMQKOJ,`Uw,6kzOMUyyCc]mT҉rΜm,`TfuZ\r~P3P:!sƮ&tM>{̙l/hWZeϡ]\ՄVV`Et70 k`d,#CB"IwЈ}?u.MU`*WJDQTLcA+!&&*!+!g`c/a謭@ ;'tO*_sq]xʞ[u&{F%$G'Dz:xX;:9:ژj*IHK(+hKɀN`x@=K]v)= gp7C3XeFGxr Ra3'䦗v[yɓjZZ;:;z' Ξ9i}g͝5wY L`歛m]e;^ZXx1 RaD(b=A<ݼ2u{؂@j# txrh!X[k mKcY?g=-7bOKBk "}v[ՓlŃdBss"C#b2 ssscTbZ\@XU{s`Hd  zzy9;:9{n lj1bgcA.6a%sH6'`0:.742RSVTST"8sjKg7wU4U5577uM:mr_9su̝? tBP('Ϟ:qu{>}ukn9t(O\#!%:1: d-x#6$wT~aJd :k4<˟?,8.GXi  }[K=}G/+_gC]7bptpv LRS^pem05[[I hjk[ٹx8{;^NHtWXuc?G ^l*]’€pO[p6Mv^)-+oRb`$9E9[j*iwNmkީ'Դ͜QSRZT1q69mڪɽM Om&Ngu˖-_bĔȨ`HĂr-ss6A ! [=#h^xKܪ} GM#@1Ԗؼu7ϙ8)3 e/>ΟqIKbQDĊ˩):+)ijȘh:C[`/8ƅ]yz'l=uѣ{B |/71&;$9=!DOOSMM tWSsT۲Ei12FA'2I8&£%xFE{jZZ{ Xv.;s5[wn]_X7*iɺnݹgݲܽ}i 5}yh+oYh\ ZKzG,0fC܀;Xa&px/ht*$pd]M| ̮GXq Y%q1-GC%-C]9)S`ĺowsy߽xٱ۟\[Ӳ:O~?veVxٙ;(I9ڸ%wTY):x;ۺXɲHK2"b6l ZDMm#|<~q599-8k -UiY <Ք , M<<͡򂪶”P?/O/[o?/wwOssݍrKr<]"nP\hc Xpmڶ}o^fY)zJYUqUGGmu[yT`p|oA`tH) Xz!"z sXXFf~M#, ٳwݨ9lRH+&!.$+cn"-o)ocbe@ %ёa~ ə19{/?&%%DAC[[KAZ[S\% <1gb[b'&GYHJHi*6Zv&rr.n.191IIa~1)ޡ!f&'0\ظHΉ-U!1)I91~ζ6. v-Ѿ*) ]-i9Y+ ʪk:jKJc5 T􌵤%dU]ctA[ ^̪^E7 c ̧..('-b({v5~"RJ+sIHIY9j[ 3r2 3JSBmu1KdkccP_sKGg-Kg;+kĚifزq-KҫY``*k&'. aegibjfcihbbnn%'&f`吔ho,#]\,u ,,liCm|S2"ݬ==윽#3ڧyפkyX[fVnC!+g~Qq&&˴(xĂYPz{l;zCOcC@g?}({x<.@E\XPTRJ2RRVZ2&6&Đ_[UXvm]ٻ;f(I)ښc/:!؃>k;׮\uϞf%4y++hI jZYii)ʪ(ȩhj(HIE'5*xDxzD%k[[{B;-02+*-99;*# T[Ygnz6v^V1 -& :qfgcfdNMN% /5bulU 7YŠ}!~3#Mӻ P}+0K "X1a ea+3pjhZkCRuIGBymi^f\ZnGUVγ%] E-R¸P;wK]37Oo[`301CWF#Lu 3 ɭkI st5v76q510wtvK()kHpRQPUTҳdb4  lX84Cn ֊~7xʱqkWN]j fNS[RhimlblobiibnmbfX(gdnc/lˈgGzk)kJ+(ki*J(K(Nȶtq0UQ2sܜ.H<%89''JWL tO DEeQ=CS`#$&FEL037#,=&)=-99D_-1&8)<,)b-b` Y^Y >BtP0bW/¦^Gp̒Q@ZJBJ "63V066 +CCK+=YaYӷl_9kzkz8kbWci^Vo`tBKr\xYzu.0j(yMUUVUP3560VRPsյwR3srv560qHL 2LHO e` 6 HXPPDOL+AO\?/0:!83ٿ0 XzJFE;ʼn :fŊ @yŰbT#hZ 8,_ x| 6B^_^ˎ̂rҐƭ0*ȉ HJjH8Xk0J:l{V]?8-0FӡazcAz\TmyFoW_{ALRmbYf$#& *%(+"ghl(,e,&lkekmhacfk,XLL}c"ݭ8XX8yA3 qǀN,>s6W3p1 H NLtqL f.Zja8p#b!h@g7`LC#:XPAZ O,bYlΞKx~jq׃E@NZT\24665s2 i &Lyo߲fNOquK`IWiZ^xg_ngmzY}5Ɂ.憆V h`n/aY,,:^FYVTTZQALJ:FQQC[_[VX\!X_IJLAOBXT X/8& u!v^W ?&Uv^^NN^^&fP+ayٙYM eCE %A k?ܒD\/P_kh730)VXoP6MK b/*?ڏ5 "X2'8˱1c9# hlbb*VXߑE C=KC iSGk =byoX1sfoKMh-~u]st}c<b2J3Ccʪcͬ]4C<BM5%,DdT uAyhʪz,z66Z&ζ*zvζ6 IS;#}}-mݼ _q6F6v>QQ^..^>.Fv6~.N.>.^Aa~Й,"2b\JfѵnՓ ݼ݂=<m݀XqlXm\!0Ǻ[604b,$ X* ЮDGŸ`m˻C00bEYVbҊ"2jZ&2 .n֚z,xDIENDB`context-2013.05.28.20130704/texmf-dist/tex/context/sample/cow.pdf0000644000175000017500000001262611571377075023547 0ustar norbertnorbert%PDF-1.4 %쏢 5 0 obj <> stream xɎ4Inq!~ #4u0 3FfU: A 4]厫翿y]__.'F\q_qkڹ۟oZ:cDܘ-_GۼZ;w/ .~h>1ƀ>]۸~ʑh׈qƚuڽ5[t־<+8wm{Eo9-5r,F>)ޣ]G&1?^Č+M]UKkUkY2UfJ=WM5%6C !| {)=]tʔ`h꧲K[Lђcu=_ci ,nEjnH5RYA6׀ z.|֬VnIz͢٫scV.醻/!TS ^Zm6/s&p䦂Kz}t# 2[{!>hzK(1غ&ZwY2ezJ5\á,^Կ5ZfyoݶJ}I+ž BrnX6}E(Qpc Fc״soo`Bޖ'6L:RxFCh'n# +*VշDJ@ Mp$mKc{Y ?Dctw.昞߰Ax~MCQW]$6 jShi -VPItRdjKrKN e>(vW}r)=+l%2H?J=C26!Vq/p 0:IEkN"-ؐí+[ t X#k(<\Ҍg5%p2h`B ّnXv ^ fJ^ЋtKW.4t[h@=НEU#sX.ć6e}g8/x"U$c;RB(w̺7֫a R  :K9Xѓ6!=bd 6k$ s.K +Eْׅ/9ݜAO+QN ੁ"B X<~)+5^ =945 Xk54٫ 8 f'i^ವLCT.`cdE3b2T}ǿۑT}w\2eF6uW6+IP gݠȺ%q;YxUfxK[7鉈9X@ƶ,GfHZ0q9]b9W4\p,4qS<: R=9kXCƱ ~UBPl]G؄q߮-Ʈ߼0Lu6$EZ[e *RwOǒi~;dX)GiXHDHӎr\Dh16Oҁ$g 9" 98 gaZd֤Gx"HbL*v!)tAJ wHNM.P6=PQ|&SJ#N%d+2lI~K"m N&)oQGu*Ķ`ne~y&^hDXoD%ER7%WL,>h'i*2 .Wy֯E|rXI;x.EXe6bNEsw3wN%092ߪVnG<}Et잁%ȗZ:xL;-%yd@J8 L{my&JٓA2:;4a!/|jřo[#]V\UWz *=:ӳ:)edw|ө=m"1TRNOIڄJKJ2:CEF=KNpRMA^IJ~ReGM']6 dzgYYnJUhLi@dUs*[d/5h[(yV,f jۏ*W8{W*^6Җ WNm vcZ ߒOkX:nnyD⇧TM=]pA+@~tn\S`څے V1a"I ~y0IFˉ+oԴԲXXii}O_ ўJ 5[L^@EAM0DhSHnZo "o#do-^` ݱ'[QݧG=N-!2'W"hTf OtAH //5Jzy}(0~;x!SOPLpc@P K6OLkas߿t"W`vsmN5vns'4!!]֚OF|ɬ H[ 97Ux btgQnC|6HʜN~l"O#ԓOVeP:C%mxwڥ(8endstream endobj 6 0 obj 4321 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 9 0 obj [/Separation /Black /DeviceCMYK 8 0 R]endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <>stream xN)-P0P-QHHP53k endstream endobj 2 0 obj <>endobj xref 0 12 0000000000 65535 f 0000004636 00000 n 0000004986 00000 n 0000004577 00000 n 0000004426 00000 n 0000000015 00000 n 0000004406 00000 n 0000004684 00000 n 0000004838 00000 n 0000004725 00000 n 0000004778 00000 n 0000004808 00000 n trailer << /Size 12 /Root 1 0 R /Info 2 0 R /ID [<814649577C87115C4CC0CB84BE7E450F><814649577C87115C4CC0CB84BE7E450F>] >> startxref 5133 %%EOF context-2013.05.28.20130704/texmf-dist/tex/context/sample/linden.tex0000644000175000017500000000107711024176655024247 0ustar norbertnorbertThe warm water spills north and south through a series of ocean currents that mirror to some degree the cells in the atmosphere above the water. Like the atmospheric cells, for instance, these giant oceanic gears ---called gyres--- fall unders the influence of the winds and the Coriolis effect and form loops that move water first away from the equator, then parallel, and then back to rejoin the equatorial currents. The familiar Gulf Stream is one of these gyres, and because of its unique characteristics it has particular salience to the fortunes of many civilizations. context-2013.05.28.20130704/texmf-dist/tex/context/sample/douglas.tex0000644000175000017500000000231311571377075024434 0ustar norbertnorbertDonald Knuth has spent the past several years working on a system allowing him to control many aspects of the design of his forthcoming books, from the typesetting and layout down to the very shapes of the letters! Seldom has an author had anything remotely like this power to control the final appearance of his or her work. Knuth's \TEX\ typesetting system has become well|-|known and available in many countries around the world. By contrast, his \METAFONT\ system for designing families of typefaces has not become as well known or available. In his article \quotation {The Concept of a Meta|-|Font}, Knuth sets forth for the first time the underlying philosophy of \METAFONT, as well as some of its products. Not only is the concept exiting and clearly well executed, but in my opinion the article is charmingly written as well. However, despite my overall enthusiasm for Knuth's idea and article, there are some points in it that I feel might be taken wrongly by many readers, and since they are points that touch close to my deepest interests in artificial intelligence and esthetic theory, I felt compelled to make some comments to clarify certain important issues raised by \quotation {The Concept of a Meta|-|Font}. context-2013.05.28.20130704/texmf-dist/tex/context/sample/bryson.tex0000644000175000017500000000113110361565011024270 0ustar norbertnorbertImagine trying to live in a world dominated by dihydrogen oxide, a compound that has no taste or smell and is so viable in its properties that it is generally benign but at other times swiftly lethal. Depending on its state, it can scald you or freeze you. In the presence of certain organic molecules it can form carbonic acids so nasty that they can strip the leaves from trees and eat the faces off statuary. In bulk, when agitated, it can strike with a fury that no human edifice could withstand. Even for those who have learned to live with it, it is often murderous substance. We call it water.context-2013.05.28.20130704/texmf-dist/tex/context/sample/spider.eps0000644000175000017500000021437311571377075024266 0ustar norbertnorbert%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 250 352 362 440 %%Creator: CorelDRAW! %%Title: SPIN016.EPS %%CreationDate: Thu Feb 16 13:27:54 1995 %%DocumentFonts: %%DocumentProcessColors: Magenta Yellow Black %%EndComments %%BeginProlog /AutoFlatness false def % -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------ % Copyright 1992 Corel Corporation. All rights reserved. /wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def /ld{load def}bd/xd{exch def}bd/_ null def /$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def /$n _ def/$o 0 def/$fil 0 def/$bkg false def /$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def /$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def /$ptm matrix def/$ttm matrix def/$stm matrix def /$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd /$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def /$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld /@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd /@ss{exch $Scra add exch load setscreen}bd AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def /@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt {@err1 exit}{currentflat 2 add setflat}ifelse}bd /@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse }bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill} stopped{@ifl}{exit}ifelse}bind loop setflat}bd /@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit }ifelse}bind loop setflat}bd/@eoclip/eoclip ld /eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse }bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke} stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if /InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse 2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd /@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd /setcmykcolor where{pop}{/setcmykcolor{4 1 roll 3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd /currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd /checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd /setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{ 0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd /setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{ exch aload pop pop 4{4 index mul 4 1 roll}repeat 5 -1 roll pop setcmykcolor}{exch aload pop CurrentInkName eq{4 index}{0}ifelse 6 1 roll 5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{ /colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop} repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup 6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{ currentgray 1 eq currentoverprint and not}ifelse}bd /@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def /$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd /@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd /@ep{{cvx exec}forall}bd/@tp{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0 $phei rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3 index sub translate /$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse @rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{ dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch @tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop 0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat @stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd Bbllx Bblly $pm itransform/$tlly xd/$tllx xd /$wid $turx $tllx sub def/$hei $tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{ $tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask /$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{ $pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def /$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if @gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{ /$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def /$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def /$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def /$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def true}{$frt $frc $frm $fry $frk $frn $o @scc dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse $tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{ /$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def /$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if }ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd 2 mul sub $fst div/$wid xd 2 index sub/$hei xd pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne {1 exch sub setgray pop pop pop}{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill $pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne {1 exch sub setgray pop pop pop}{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill $wid 0 translate $dk add 4 1 roll $dy add 4 1 roll $dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll $dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop} {setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill }bd/@ftr{1 index 4 index sub dup $rox mul/$row xd 2 div 1 index 4 index sub dup $roy mul/$roh xd 2 div 2 copy dup mul exch dup mul add sqrt $row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd 4 index add $roh add exch 5 index add $row add exch translate pop pop pop pop currentflat dup 5 mul setflat $c $m $y $k 4 copy ColorSeparationMode 0 ne {1 exch sub setgray pop pop pop}{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale $fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop} {setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill /$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll $dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip newpath Bbllx Bblly moveto Bbllx Bbury lineto Bburx Bbury lineto Bburx Bblly lineto $fan rotate pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if @gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d $t $c $m $y $k $n $o @scc pop $ctm setmatrix 72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec}{1 setgray eofill}ifelse @rs @np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def }bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd /k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd /K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd /x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd /X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd /d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd /j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld /w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd /c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd /V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld /L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld /N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if $fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc {eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{ matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse $SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd /p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd /$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd /A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd /CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl 16#88/circumflex/perthousand/Scaron/guilsinglleft/OE 16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash 16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section 16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron 16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered 16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown 16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla 16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis 16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply 16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls 16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla 16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis 16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide 16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] def/@cc{currentfile $dat readhexstring pop}bd /@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd /Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def 1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd /$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore /$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd /$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd /$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def }bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd /$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd /$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd /@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3 index 3 index l clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def }ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if @gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd /$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def $frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate $urx $llx sub $ury $lly sub scale $wid $hei abs $bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse @gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def 1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll @i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd /$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def $llx $lly translate $urx $llx sub $ury $lly sub scale $wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse] /@cc load false $ncl colorimage @gr $ctm setmatrix}bd /z{exch findfont exch scalefont setfont}bd /ZB{9 dict dup begin 4 1 roll/FontType 3 def /FontMatrix xd/FontBBox xd/Encoding 256 array def 0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def CharStrings/.notdef{}put/Metrics 256 dict def Metrics/.notdef 3 -1 roll put/BuildChar{exch dup/$char exch/Encoding get 3 index get def dup/Metrics get $char get aload pop setcachedevice begin Encoding exch get CharStrings exch get end exec}def end definefont pop}bd/ZBAddChar{findfont begin dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put CharStrings 3 1 roll put Metrics 3 1 roll put end}bd/Z{findfont dup maxlength 2 add dict exch dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall pop dup dup/Encoding get 256 array copy dup/$fe xd /Encoding exch put dup/Fontname 3 index put 3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{ $fe exch 2 index exch put 1 add}ifelse}forall pop}if dup 256 dict dup/$met xd/Metrics exch put dup/FontMatrix get 0 get 1000 mul 1 exch div 3 index length 256 eq{0 1 255{dup $fe exch get dup/.notdef eq{pop pop}{5 index 3 -1 roll get 2 index mul $met 3 1 roll put}ifelse}for}if pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll (0) dup 3 -1 roll 0 exch put dup @gs true charpath $ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto }forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if $fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq {/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse }ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd /@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll (0) dup 3 -1 roll 0 exch put dup @gs true charpath $ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto }forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup @gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd /@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd /r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd /@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix /$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def 3 1 roll moveto $ttm concat t $stm setmatrix}def /@n{/$ttm exch matrix rotate def}bd/@s{}bd /@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd /$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd /$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd /$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def /@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def /CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{ /CurrentInkName (Composite) def}if/CurrentInkName where{pop}{ /CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq {/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{ CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq {/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def }ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep /@whi{@gs -72000 dup moveto -72000 72000 lineto 72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill @gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer @whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth 2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto 2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def /rightbracket{(\051)}def %%EndProlog %%BeginSetup 11.4737 setmiterlimit 1.00 setflat /$fst 128 def %%EndSetup @sv /$ctm matrix currentmatrix def @sv %%Note: Object 290.95 378.07 320.40 429.12 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 1.00 1.00 0.00 0.00 0.00 0.00 0.00 0 1 0.00 0.05 0.10 @k %%CURV 37 308.52 422.28 m 313.63 416.81 315.00 415.58 316.80 409.82 c 318.60 404.06 320.40 397.80 319.32 392.04 c 318.24 386.28 316.37 382.18 314.21 380.59 c 312.05 379.01 309.53 378.07 304.42 378.36 c 299.30 378.65 295.27 381.60 293.47 385.92 c 291.67 390.24 290.95 394.20 290.95 398.95 c 290.95 403.70 291.17 407.74 293.98 411.91 c 296.78 416.09 299.52 417.38 299.59 417.53 c 301.18 420.70 L 302.62 422.93 L 301.54 425.66 L 301.32 427.18 303.26 428.98 304.78 429.05 c 306.29 429.12 308.74 427.10 308.45 425.02 C 307.66 423.22 308.52 422.28 308.52 422.28 c @c B %%Note: Object 301.82 419.69 308.09 421.42 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 308.09 421.06 m 305.57 419.69 301.82 421.42 301.82 421.42 C S %%Note: Object 300.24 433.44 302.62 436.46 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 7 300.24 433.44 m 301.03 433.58 301.25 433.44 301.68 434.09 c 302.11 434.74 302.47 435.82 302.62 436.46 C S %%Note: Object 300.31 435.24 301.32 438.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 7 300.31 435.24 m 300.74 435.89 301.18 436.18 301.25 436.75 c 301.32 437.33 301.32 437.90 301.32 438.34 C S %%Note: Object 299.16 436.97 300.31 439.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 7 299.23 436.97 m 299.59 438.05 299.16 437.69 299.74 438.48 c 300.31 439.27 300.17 438.84 300.31 439.34 C S %%Note: Object 262.73 405.00 267.34 405.29 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 4 267.34 405.14 m 265.18 405.00 264.38 405.29 262.73 405.14 C S %%Note: Object 252.94 396.36 257.33 397.37 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 4 257.33 397.01 m 254.95 396.50 254.16 397.37 252.94 396.36 C S %%Note: Object 261.43 393.48 271.94 407.30 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 7 263.30 400.39 m 263.09 397.87 263.45 398.52 262.44 396.00 c 261.43 393.48 271.94 407.30 269.06 404.28 C S %%Note: Object 269.93 400.39 272.81 404.64 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 4 272.81 404.64 m 271.58 403.13 271.01 401.04 269.93 400.39 C S %%Note: Object 288.14 403.49 290.59 407.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.10 k %%CURV 4 290.59 407.66 m 289.73 404.28 290.30 405.36 288.14 403.49 C S %%Note: Object 290.16 390.96 290.74 395.57 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 290.74 395.57 m 290.30 394.13 290.16 392.54 290.16 390.96 C S %%Note: Object 287.06 387.00 287.71 392.26 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 287.71 392.26 m 287.71 390.46 287.06 388.73 287.06 387.00 C S %%Note: Object 282.74 380.74 283.03 385.85 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 283.03 385.85 m 282.74 380.74 L S %%Note: Object 279.86 374.83 280.15 379.58 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 280.01 379.58 m 280.01 374.83 L S %%Note: Object 277.92 367.20 279.36 372.82 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 277.92 372.82 m 277.92 370.58 278.57 369.79 279.07 368.06 c 279.07 367.85 279.22 367.20 279.36 367.20 C S %%Note: Object 275.69 360.72 277.27 365.40 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 275.69 365.40 m 277.27 360.72 L S %%Note: Object 275.69 352.58 276.62 357.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 275.69 357.70 m 275.69 356.62 275.98 353.23 276.62 352.58 C S %%Note: Object 281.30 392.40 285.12 393.84 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 285.12 393.84 m 284.47 393.70 283.68 393.19 283.03 393.19 C 281.30 392.40 L S %%Note: Object 277.27 387.00 281.95 389.23 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 281.95 389.23 m 280.30 388.73 278.71 387.79 277.42 387.14 C 277.27 387.00 L S %%Note: Object 274.90 381.38 278.71 384.26 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 278.71 384.26 m 278.06 383.90 276.48 382.68 276.19 382.03 C 275.69 382.03 275.33 381.38 274.90 381.38 C S %%Note: Object 273.10 375.62 276.98 378.94 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 276.98 378.94 m 275.54 378.14 274.25 376.13 273.10 375.62 C S %%Note: Object 271.15 369.22 274.39 372.74 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 274.39 372.74 m 272.81 371.95 272.02 370.80 271.15 369.22 C S %%Note: Object 269.42 360.29 272.16 365.54 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 8 272.16 365.54 m 271.66 364.75 270.36 362.81 270.36 361.87 C 270.07 361.87 L 270.07 361.51 269.42 360.94 269.42 360.29 C S %%Note: Object 270.72 353.52 272.30 359.28 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 272.30 359.28 m 271.80 357.84 270.72 355.18 270.72 353.52 C S %%Note: Object 291.46 421.06 294.19 428.11 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 294.19 421.06 m 293.83 423.58 292.68 425.59 292.68 425.59 c 291.46 428.11 L S %%Note: Object 289.30 422.71 291.31 428.47 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 290.95 422.71 m 290.95 424.22 291.31 425.81 290.45 426.46 c 289.58 427.10 289.30 428.47 289.30 428.47 C S %%Note: Object 285.70 424.73 289.01 430.85 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 288.22 424.73 m 287.57 426.46 289.01 428.04 287.42 428.83 c 285.84 429.62 285.70 430.85 285.70 430.85 C S %%Note: Object 280.80 427.46 284.69 432.36 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 284.69 427.46 m 283.82 428.98 284.54 429.98 283.32 430.49 c 282.10 430.99 280.80 432.36 280.80 432.36 C S %%Note: Object 277.34 428.11 281.30 433.22 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 281.30 428.11 m 280.44 429.62 281.23 430.70 280.08 431.21 c 278.93 431.71 277.34 433.22 277.34 433.22 C S %%Note: Object 271.08 428.62 278.42 432.86 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 278.42 428.62 m 277.06 429.84 277.92 430.99 276.19 431.35 c 274.46 431.71 271.08 432.86 271.08 432.86 C S %%Note: Object 266.98 429.48 273.31 430.99 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 273.31 429.48 m 271.58 429.84 269.21 430.99 269.21 430.99 c 266.98 430.99 L S %%Note: Object 262.22 428.47 267.34 429.12 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 267.34 428.47 m 264.82 428.47 264.24 429.12 262.22 428.47 C S %%Note: Object 255.46 425.23 262.22 426.31 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 262.22 425.23 m 259.70 425.23 259.70 426.31 258.34 426.31 c 256.97 426.31 255.46 425.59 255.46 425.59 C S %%Note: Object 286.20 419.54 291.96 420.41 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 291.96 419.54 m 288.72 419.54 287.71 420.41 286.20 419.54 C S %%Note: Object 281.09 422.57 286.20 423.29 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 286.20 422.57 m 283.68 422.57 282.96 423.29 281.09 422.57 C S %%Note: Object 274.82 423.43 283.32 424.94 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 283.32 424.73 m 280.58 424.73 279.58 424.94 278.21 424.44 c 276.84 423.94 276.55 424.30 274.82 423.43 C S %%Note: Object 266.18 422.93 273.96 426.96 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 273.96 426.96 m 270.58 424.73 270.58 425.74 269.21 424.58 c 267.84 423.43 267.77 424.66 266.18 422.93 C S %%Note: Object 283.25 411.34 288.79 413.71 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 288.79 411.34 m 286.27 411.84 286.92 412.42 285.41 412.70 c 283.90 412.99 284.62 413.71 283.25 413.71 C S %%Note: Object 278.57 411.05 284.83 412.78 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 284.83 411.05 m 282.82 411.41 283.82 412.56 281.45 412.56 c 279.07 412.56 280.08 412.78 278.57 412.78 C S %%Note: Object 275.83 410.76 279.07 411.26 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 279.07 410.76 m 277.20 410.90 277.34 411.26 275.83 411.26 C S %%Note: Object 271.94 409.54 276.34 410.40 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 276.34 409.54 m 274.46 409.54 273.96 410.40 271.94 410.40 C S %%Note: Object 268.20 408.38 272.09 409.46 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 272.09 408.38 m 270.22 408.38 270.72 409.46 268.20 409.18 C S %%Note: Object 264.82 406.66 269.21 406.87 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 269.21 406.87 m 267.70 406.66 266.04 406.87 264.82 406.87 C S %%Note: Object 255.60 401.11 261.72 402.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 261.72 402.12 m 258.84 401.98 257.11 402.34 255.60 401.11 C S %%Note: Object 254.45 398.88 259.56 400.54 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 259.56 399.74 m 256.82 399.10 256.18 400.54 254.45 398.88 C S %%Note: Object 251.06 391.61 255.31 393.98 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 255.31 393.98 m 252.72 392.62 251.06 391.61 251.06 391.61 C S %%Note: Object 252.72 390.31 255.31 391.97 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 255.31 391.97 m 253.58 390.82 252.72 390.31 252.72 390.31 C S %%Note: Object 254.95 388.44 256.82 391.61 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 256.82 391.61 m 256.32 390.31 254.95 388.44 254.95 388.44 C S %%Note: Object 258.34 391.10 259.49 394.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 258.70 394.70 m 258.70 391.82 259.49 393.12 258.34 391.10 C S %%Note: Object 259.34 392.62 260.93 397.51 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 260.93 397.51 m 260.06 395.35 260.71 394.63 259.34 392.62 C S %%Note: Object 266.33 399.24 270.43 403.63 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 270.43 403.63 m 267.84 399.89 266.33 399.24 266.33 399.24 C S %%Note: Object 273.10 402.26 277.70 406.37 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 277.70 406.37 m 277.70 406.37 274.39 403.42 273.10 402.26 C S %%Note: Object 277.56 403.99 280.94 407.38 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 280.94 407.38 m 279.43 406.15 278.93 405.00 277.56 403.99 C S %%Note: Object 278.57 403.13 283.68 408.17 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 283.68 408.17 m 282.10 406.66 279.43 403.99 278.57 403.13 C S %%Note: Object 279.43 402.77 286.20 407.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 286.20 407.66 m 283.82 405.65 279.43 402.77 279.43 402.77 C S %%Note: Object 286.70 404.64 289.94 407.88 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 289.94 407.88 m 288.94 406.66 287.71 407.02 286.70 404.64 C S %%Note: Object 284.18 397.87 291.96 407.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 291.96 407.66 m 290.45 403.78 289.94 403.56 288.07 401.98 c 286.20 400.39 284.54 400.25 284.18 397.87 C S %%Note: Object 285.05 396.50 288.43 398.30 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 288.43 397.73 m 286.34 397.01 287.42 398.30 285.05 396.50 C S %%Note: Object 281.38 377.06 281.66 383.04 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 281.52 383.04 m 281.52 380.66 281.52 378.72 281.52 377.06 C S %%Note: Object 284.26 383.18 284.76 388.58 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 284.76 388.58 m 284.40 385.49 284.26 384.77 284.26 383.18 C S %%Note: Object 323.14 397.22 326.52 398.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 8 323.14 398.66 m 323.64 398.66 324.43 398.30 324.58 398.02 C 325.22 398.02 L 325.22 397.66 326.52 397.51 326.52 397.22 C S %%Note: Object 285.05 394.13 291.74 399.10 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 19 289.51 399.10 m 287.86 397.87 287.35 398.88 287.06 397.01 c 286.78 395.14 285.05 394.85 285.98 394.49 c 286.92 394.13 288.86 394.13 288.86 394.13 c 288.86 394.13 289.58 394.13 290.16 395.28 c 290.74 396.43 291.74 396.94 291.24 397.87 C 290.74 398.81 289.51 399.10 289.51 399.10 c @c B %%Note: Object 277.70 379.80 283.75 389.74 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 25 279.43 379.80 m 280.30 380.74 279.65 380.23 280.80 381.67 c 281.95 383.11 282.46 385.06 282.89 385.85 c 283.32 386.64 283.75 386.64 283.46 387.72 c 283.18 388.80 282.89 389.74 282.02 389.23 c 281.16 388.73 280.66 388.44 280.08 387.07 c 279.50 385.70 278.50 384.26 278.42 383.54 c 278.35 382.82 277.70 381.38 278.14 380.81 C 278.57 380.23 279.43 379.80 279.43 379.80 c @c B %%Note: Object 272.16 354.31 276.12 369.58 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 31 275.76 359.42 m 275.69 361.08 275.69 360.07 275.76 362.30 c 275.83 364.54 276.12 366.12 275.90 367.56 c 275.69 369.00 275.76 369.58 274.90 369.58 c 274.03 369.58 273.46 369.36 273.10 368.06 c 272.74 366.77 272.38 366.70 272.38 365.11 c 272.38 363.53 272.30 362.23 272.30 360.79 c 272.30 359.35 272.16 358.13 272.66 356.54 c 273.17 354.96 272.95 354.46 273.82 354.38 c 274.68 354.31 275.04 354.60 275.40 355.46 C 275.76 356.33 275.76 359.42 275.76 359.42 c @c B %%Note: Object 274.39 406.80 285.84 411.77 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 22 284.33 408.38 m 284.83 409.32 285.84 410.69 284.69 410.98 c 283.54 411.26 280.87 411.77 279.72 411.26 c 278.57 410.76 277.42 410.54 275.98 409.54 c 274.54 408.53 274.39 408.38 275.04 407.59 c 275.69 406.80 276.26 406.80 277.42 406.80 c 278.57 406.80 280.37 407.16 281.81 407.30 C 283.25 407.45 284.33 408.38 284.33 408.38 c @c B %%Note: Object 254.16 390.74 268.49 405.00 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 28 268.34 405.00 m 268.49 402.34 265.68 401.98 263.95 400.39 c 262.22 398.81 263.02 397.08 261.07 395.93 c 259.13 394.78 259.27 395.64 258.19 393.62 c 257.11 391.61 256.03 390.74 255.10 391.90 c 254.16 393.05 254.66 392.83 255.60 394.78 c 256.54 396.72 257.40 396.94 257.69 397.87 c 257.98 398.81 259.42 400.68 260.57 401.40 c 261.72 402.12 261.72 402.77 263.16 403.27 C 264.60 403.78 268.34 405.00 268.34 405.00 c @c B %%Note: Object 273.46 424.37 284.90 430.27 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 22 284.18 427.10 m 284.90 428.54 281.30 428.54 279.36 428.69 c 277.42 428.83 275.98 430.27 275.04 429.48 c 274.10 428.69 273.46 428.69 274.39 427.25 c 275.33 425.81 276.41 425.95 277.63 425.95 c 278.86 425.95 278.93 425.59 280.51 425.38 c 282.10 425.16 283.61 424.37 283.90 425.16 C 284.18 425.95 284.04 426.82 284.18 427.10 c @c B %%Note: Object 296.78 423.58 301.18 430.49 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 22 300.46 423.79 m 300.67 425.81 301.18 425.38 300.74 426.89 c 300.31 428.40 300.46 428.69 299.38 429.05 c 298.30 429.41 297.43 430.49 297.14 429.55 c 296.86 428.62 296.78 427.97 296.78 427.18 c 296.78 426.38 296.93 425.81 297.22 425.16 c 297.50 424.51 298.15 423.58 299.02 423.58 C 299.88 423.58 300.46 423.79 300.46 423.79 c @c B %%Note: Object 328.25 379.80 334.30 389.74 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 25 332.57 379.80 m 331.70 380.74 332.35 380.23 331.20 381.67 c 330.05 383.11 329.54 385.06 329.11 385.85 c 328.68 386.64 328.25 386.64 328.54 387.72 c 328.82 388.80 329.11 389.74 329.98 389.23 c 330.84 388.73 331.34 388.44 331.92 387.07 c 332.50 385.70 333.50 384.26 333.58 383.54 c 333.65 382.82 334.30 381.38 333.86 380.81 C 333.43 380.23 332.57 379.80 332.57 379.80 c @c B %%Note: Object 335.88 354.31 339.84 369.58 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 31 336.24 359.42 m 336.31 361.08 336.31 360.07 336.24 362.30 c 336.17 364.54 335.88 366.12 336.10 367.56 c 336.31 369.00 336.24 369.58 337.10 369.58 c 337.97 369.58 338.54 369.36 338.90 368.06 c 339.26 366.77 339.62 366.70 339.62 365.11 c 339.62 363.53 339.70 362.23 339.70 360.79 c 339.70 359.35 339.84 358.13 339.34 356.54 c 338.83 354.96 339.05 354.46 338.18 354.38 c 337.32 354.31 336.96 354.60 336.60 355.46 C 336.24 356.33 336.24 359.42 336.24 359.42 c @c B %%Note: Object 326.16 406.80 337.61 411.77 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 22 327.67 408.38 m 327.17 409.32 326.16 410.69 327.31 410.98 c 328.46 411.26 331.13 411.77 332.28 411.26 c 333.43 410.76 334.58 410.54 336.02 409.54 c 337.46 408.53 337.61 408.38 336.96 407.59 c 336.31 406.80 335.74 406.80 334.58 406.80 c 333.43 406.80 331.63 407.16 330.19 407.30 C 328.75 407.45 327.67 408.38 327.67 408.38 c @c B %%Note: Object 343.51 390.74 357.84 405.00 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 28 343.66 405.00 m 343.51 402.34 346.32 401.98 348.05 400.39 c 349.78 398.81 348.98 397.08 350.93 395.93 c 352.87 394.78 352.73 395.64 353.81 393.62 c 354.89 391.61 355.97 390.74 356.90 391.90 c 357.84 393.05 357.34 392.83 356.40 394.78 c 355.46 396.72 354.60 396.94 354.31 397.87 c 354.02 398.81 352.58 400.68 351.43 401.40 c 350.28 402.12 350.28 402.77 348.84 403.27 C 347.40 403.78 343.66 405.00 343.66 405.00 c @c B %%Note: Object 316.22 416.88 323.06 423.22 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 17 316.22 419.40 m 317.23 420.55 316.58 420.84 318.17 421.49 c 319.75 422.14 320.47 423.22 321.41 422.93 c 322.34 422.64 323.06 422.14 322.06 420.70 c 321.05 419.26 320.90 420.05 319.46 418.46 c 318.02 416.88 316.58 417.67 316.58 417.67 C 316.22 419.40 L @c B %%Note: Object 327.10 424.37 338.54 430.27 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 22 327.82 427.10 m 327.10 428.54 330.70 428.54 332.64 428.69 c 334.58 428.83 336.02 430.27 336.96 429.48 c 337.90 428.69 338.54 428.69 337.61 427.25 c 336.67 425.81 335.59 425.95 334.37 425.95 c 333.14 425.95 333.07 425.59 331.49 425.38 c 329.90 425.16 328.39 424.37 328.10 425.16 C 327.82 425.95 327.96 426.82 327.82 427.10 c @c B %%Note: Object 309.10 423.58 313.49 430.49 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.85 0.00 0.00 k %%CURV 22 309.82 423.79 m 309.60 425.81 309.10 425.38 309.53 426.89 c 309.96 428.40 309.82 428.69 310.90 429.05 c 311.98 429.41 312.84 430.49 313.13 429.55 c 313.42 428.62 313.49 427.97 313.49 427.18 c 313.49 426.38 313.34 425.81 313.06 425.16 c 312.77 424.51 312.12 423.58 311.26 423.58 C 310.39 423.58 309.82 423.79 309.82 423.79 c @c B %%Note: Object 295.56 428.26 300.74 434.88 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 22 299.88 428.47 m 299.88 429.84 300.74 429.70 299.81 430.92 c 298.87 432.14 299.59 432.86 298.44 433.44 c 297.29 434.02 296.71 434.88 296.35 433.80 c 295.99 432.72 295.85 433.08 295.99 431.28 c 296.14 429.48 295.56 429.55 296.71 428.90 c 297.86 428.26 297.79 428.26 298.58 428.26 C 299.38 428.26 299.88 428.47 299.88 428.47 c @c B %%Note: Object 294.34 414.79 299.74 419.90 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 298.15 416.52 m 299.23 417.60 299.74 418.75 298.15 419.26 c 296.57 419.76 296.35 419.90 295.42 419.90 c 294.48 419.90 294.34 418.75 294.34 417.82 c 294.34 416.88 294.98 415.08 295.78 414.94 c 296.57 414.79 297.36 414.94 297.36 414.94 C 297.36 414.94 297.79 416.16 298.15 416.52 c @c B %%Note: Object 320.26 394.13 326.95 399.10 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 322.49 399.10 m 324.14 397.87 324.65 398.88 324.94 397.01 c 325.22 395.14 326.95 394.85 326.02 394.49 c 325.08 394.13 323.14 394.13 323.14 394.13 c 323.14 394.13 322.42 394.13 321.84 395.28 c 321.26 396.43 320.26 396.94 320.76 397.87 C 321.26 398.81 322.49 399.10 322.49 399.10 c @c B %%Note: Object 281.38 388.15 289.22 394.85 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 25 284.90 388.37 m 285.84 389.09 285.77 388.94 286.49 390.10 c 287.21 391.25 287.57 391.61 288.14 393.05 c 288.72 394.49 289.22 394.42 288.43 394.56 c 287.64 394.70 287.35 394.85 286.56 394.85 c 285.77 394.85 285.62 394.20 284.76 393.48 c 283.90 392.76 282.60 391.61 282.24 390.74 c 281.88 389.88 281.38 389.30 282.02 388.73 C 282.67 388.15 284.90 388.37 284.90 388.37 c @c B %%Note: Object 273.82 369.00 279.72 381.02 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 28 274.82 369.00 m 275.62 369.29 275.40 369.72 276.41 370.87 c 277.42 372.02 277.56 372.38 278.06 373.54 c 278.57 374.69 278.93 376.78 279.07 377.78 c 279.22 378.79 279.72 379.44 279.36 380.23 c 279.00 381.02 278.86 380.88 278.14 380.59 c 277.42 380.30 276.26 378.14 275.76 376.85 c 275.26 375.55 274.46 374.69 274.32 373.25 c 274.18 371.81 273.82 371.52 273.82 370.30 C 273.82 369.07 274.82 369.00 274.82 369.00 c @c B %%Note: Object 284.11 407.09 293.33 412.63 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 292.82 409.54 m 293.33 411.41 291.74 412.49 289.01 411.62 c 286.27 410.76 285.48 412.63 284.98 411.41 c 284.47 410.18 284.11 409.75 285.12 408.74 c 286.13 407.74 286.42 407.59 287.71 407.59 c 289.01 407.59 290.16 407.09 291.10 407.59 C 292.03 408.10 292.75 409.18 292.82 409.54 c @c B %%Note: Object 266.33 403.42 276.62 409.54 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 25 272.16 404.06 m 273.53 404.71 273.24 404.78 274.39 405.86 c 275.54 406.94 276.62 406.80 275.83 407.45 c 275.04 408.10 275.04 408.89 273.96 408.89 c 272.88 408.89 271.66 409.54 270.36 408.24 c 269.06 406.94 268.06 405.94 267.19 405.50 c 266.33 405.07 266.69 404.42 267.48 403.92 c 268.27 403.42 271.01 403.42 271.01 403.42 C 271.01 403.42 271.87 403.92 272.16 404.06 c @c B %%Note: Object 288.94 416.88 295.78 423.22 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 17 295.78 419.40 m 294.77 420.55 295.42 420.84 293.83 421.49 c 292.25 422.14 291.53 423.22 290.59 422.93 c 289.66 422.64 288.94 422.14 289.94 420.70 c 290.95 419.26 291.10 420.05 292.54 418.46 c 293.98 416.88 295.42 417.67 295.42 417.67 C 295.78 419.40 L @c B %%Note: Object 282.60 420.77 292.75 427.97 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 290.59 422.93 m 292.75 420.77 289.30 425.38 287.21 426.17 c 285.12 426.96 284.76 427.97 283.68 426.96 c 282.60 425.95 283.68 424.08 283.68 424.08 c 283.68 424.08 285.55 422.78 286.56 421.99 c 287.57 421.20 289.01 421.27 289.80 421.49 C 290.59 421.70 290.45 423.07 290.59 422.93 c @c B %%Note: Object 257.33 420.55 274.97 430.99 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 31 274.54 429.34 m 274.54 426.82 272.81 430.99 269.06 429.19 c 265.32 427.39 265.32 427.46 264.24 426.31 c 263.16 425.16 260.42 424.73 260.42 424.73 c 260.42 424.73 257.33 422.86 257.83 421.85 c 258.34 420.84 257.98 420.55 259.78 420.55 c 261.58 420.55 262.01 422.06 263.30 422.50 c 264.60 422.93 265.61 425.02 267.84 425.02 c 270.07 425.02 270.58 426.31 272.02 426.31 c 273.46 426.31 274.90 426.46 274.90 427.25 C 274.97 428.11 274.54 429.34 274.54 429.34 c @c B %%Note: Object 322.78 388.15 330.62 394.85 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 25 327.10 388.37 m 326.16 389.09 326.23 388.94 325.51 390.10 c 324.79 391.25 324.43 391.61 323.86 393.05 c 323.28 394.49 322.78 394.42 323.57 394.56 c 324.36 394.70 324.65 394.85 325.44 394.85 c 326.23 394.85 326.38 394.20 327.24 393.48 c 328.10 392.76 329.40 391.61 329.76 390.74 c 330.12 389.88 330.62 389.30 329.98 388.73 C 329.33 388.15 327.10 388.37 327.10 388.37 c @c B %%Note: Object 332.28 369.00 338.18 381.02 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 28 337.18 369.00 m 336.38 369.29 336.60 369.72 335.59 370.87 c 334.58 372.02 334.44 372.38 333.94 373.54 c 333.43 374.69 333.07 376.78 332.93 377.78 c 332.78 378.79 332.28 379.44 332.64 380.23 c 333.00 381.02 333.14 380.88 333.86 380.59 c 334.58 380.30 335.74 378.14 336.24 376.85 c 336.74 375.55 337.54 374.69 337.68 373.25 c 337.82 371.81 338.18 371.52 338.18 370.30 C 338.18 369.07 337.18 369.00 337.18 369.00 c @c B %%Note: Object 318.67 407.09 327.89 412.63 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 319.18 409.54 m 318.67 411.41 320.26 412.49 322.99 411.62 c 325.73 410.76 326.52 412.63 327.02 411.41 c 327.53 410.18 327.89 409.75 326.88 408.74 c 325.87 407.74 325.58 407.59 324.29 407.59 c 322.99 407.59 321.84 407.09 320.90 407.59 C 319.97 408.10 319.25 409.18 319.18 409.54 c @c B %%Note: Object 335.38 403.42 345.67 409.54 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 25 339.84 404.06 m 338.47 404.71 338.76 404.78 337.61 405.86 c 336.46 406.94 335.38 406.80 336.17 407.45 c 336.96 408.10 336.96 408.89 338.04 408.89 c 339.12 408.89 340.34 409.54 341.64 408.24 c 342.94 406.94 343.94 405.94 344.81 405.50 c 345.67 405.07 345.31 404.42 344.52 403.92 c 343.73 403.42 340.99 403.42 340.99 403.42 C 340.99 403.42 340.13 403.92 339.84 404.06 c @c B %%Note: Object 312.26 414.79 317.66 419.90 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 313.85 416.52 m 312.77 417.60 312.26 418.75 313.85 419.26 c 315.43 419.76 315.65 419.90 316.58 419.90 c 317.52 419.90 317.66 418.75 317.66 417.82 c 317.66 416.88 317.02 415.08 316.22 414.94 c 315.43 414.79 314.64 414.94 314.64 414.94 C 314.64 414.94 314.21 416.16 313.85 416.52 c @c B %%Note: Object 319.25 420.77 329.40 427.97 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 19 321.41 422.93 m 319.25 420.77 322.70 425.38 324.79 426.17 c 326.88 426.96 327.24 427.97 328.32 426.96 c 329.40 425.95 328.32 424.08 328.32 424.08 c 328.32 424.08 326.45 422.78 325.44 421.99 c 324.43 421.20 322.99 421.27 322.20 421.49 C 321.41 421.70 321.55 423.07 321.41 422.93 c @c B %%Note: Object 337.03 420.55 354.67 430.99 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 31 337.46 429.34 m 337.46 426.82 339.19 430.99 342.94 429.19 c 346.68 427.39 346.68 427.46 347.76 426.31 c 348.84 425.16 351.58 424.73 351.58 424.73 c 351.58 424.73 354.67 422.86 354.17 421.85 c 353.66 420.84 354.02 420.55 352.22 420.55 c 350.42 420.55 349.99 422.06 348.70 422.50 c 347.40 422.93 346.39 425.02 344.16 425.02 c 341.93 425.02 341.42 426.31 339.98 426.31 c 338.54 426.31 337.10 426.46 337.10 427.25 C 337.03 428.11 337.46 429.34 337.46 429.34 c @c B %%Note: Object 309.53 428.26 314.71 434.88 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.30 0.30 0.00 k %%CURV 22 310.39 428.47 m 310.39 429.84 309.53 429.70 310.46 430.92 c 311.40 432.14 310.68 432.86 311.83 433.44 c 312.98 434.02 313.56 434.88 313.92 433.80 c 314.28 432.72 314.42 433.08 314.28 431.28 c 314.14 429.48 314.71 429.55 313.56 428.90 c 312.41 428.26 312.48 428.26 311.69 428.26 C 310.90 428.26 310.39 428.47 310.39 428.47 c @c B %%Note: Object 309.38 433.44 311.76 436.46 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 1.00 0.45 0.00 0.00 k %%CURV 7 311.76 433.44 m 310.97 433.58 310.75 433.44 310.32 434.09 c 309.89 434.74 309.53 435.82 309.38 436.46 C S %%Note: Object 310.68 435.24 311.69 438.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 1.00 0.45 0.00 0.00 k %%CURV 7 311.69 435.24 m 311.26 435.89 310.82 436.18 310.75 436.75 c 310.68 437.33 310.68 437.90 310.68 438.34 C S %%Note: Object 311.69 435.96 312.84 439.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 312.70 435.96 m 312.34 437.04 312.84 437.69 312.26 438.48 c 311.69 439.27 311.83 438.84 311.69 439.34 C S %%Note: Object 344.66 405.00 349.27 405.29 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 344.66 405.14 m 346.82 405.00 347.62 405.29 349.27 405.14 C S %%Note: Object 354.67 396.36 359.06 397.37 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 354.67 397.01 m 357.05 396.50 357.84 397.37 359.06 396.36 C S %%Note: Object 340.06 393.48 350.57 407.30 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 348.70 400.39 m 348.91 397.87 348.55 398.52 349.56 396.00 c 350.57 393.48 340.06 407.30 342.94 404.28 C S @rs @sv %%Note: Object 339.19 400.39 342.07 404.64 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 339.19 404.64 m 340.42 403.13 340.99 401.04 342.07 400.39 C S %%Note: Object 321.98 403.49 324.43 407.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 321.98 407.66 m 322.85 404.28 322.27 405.36 324.43 403.49 C S %%Note: Object 321.26 390.96 321.84 395.57 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 321.26 395.57 m 321.70 394.13 321.84 392.54 321.84 390.96 C S %%Note: Object 324.29 387.00 324.94 392.26 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 324.29 392.26 m 324.29 390.46 324.94 388.73 324.94 387.00 C S %%Note: Object 328.97 380.74 329.26 385.85 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 328.97 385.85 m 329.26 380.74 L S %%Note: Object 331.85 374.83 332.14 379.58 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 331.99 379.58 m 331.99 374.83 L S %%Note: Object 332.64 366.62 334.08 372.24 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 334.08 372.24 m 334.08 370.01 333.43 369.22 332.93 367.49 c 332.93 367.27 332.78 366.62 332.64 366.62 C S %%Note: Object 334.73 360.72 336.31 365.40 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 336.31 365.40 m 334.73 360.72 L S %%Note: Object 335.38 352.58 336.31 357.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 336.31 357.70 m 336.31 356.62 336.02 353.23 335.38 352.58 C S %%Note: Object 326.88 392.40 330.70 393.84 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 326.88 393.84 m 327.53 393.70 328.32 393.19 328.97 393.19 C 330.70 392.40 L S %%Note: Object 330.05 387.00 334.73 389.23 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 330.05 389.23 m 331.70 388.73 333.29 387.79 334.58 387.14 C 334.73 387.00 L S %%Note: Object 333.29 381.38 337.10 384.26 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 333.29 384.26 m 333.94 383.90 335.52 382.68 335.81 382.03 C 336.31 382.03 336.67 381.38 337.10 381.38 C S %%Note: Object 335.02 375.62 338.90 378.94 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 335.02 378.94 m 336.46 378.14 337.75 376.13 338.90 375.62 C S %%Note: Object 337.61 369.22 340.85 372.74 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 337.61 372.74 m 339.19 371.95 339.98 370.80 340.85 369.22 C S %%Note: Object 339.84 360.29 342.58 365.54 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 8 339.84 365.54 m 340.34 364.75 341.64 362.81 341.64 361.87 C 341.93 361.87 L 341.93 361.51 342.58 360.94 342.58 360.29 C S %%Note: Object 339.70 353.52 341.28 359.28 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 339.70 359.28 m 340.20 357.84 341.28 355.18 341.28 353.52 C S %%Note: Object 317.81 421.06 320.54 428.11 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 317.81 421.06 m 318.17 423.58 319.32 425.59 319.32 425.59 c 320.54 428.11 L S %%Note: Object 320.69 422.71 322.70 428.47 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 321.05 422.71 m 321.05 424.22 320.69 425.81 321.55 426.46 c 322.42 427.10 322.70 428.47 322.70 428.47 C S %%Note: Object 322.99 424.73 326.30 430.85 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 323.78 424.73 m 324.43 426.46 322.99 428.04 324.58 428.83 c 326.16 429.62 326.30 430.85 326.30 430.85 C S %%Note: Object 327.31 427.46 331.20 432.36 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 327.31 427.46 m 328.18 428.98 327.46 429.98 328.68 430.49 c 329.90 430.99 331.20 432.36 331.20 432.36 C S %%Note: Object 330.70 428.11 334.66 433.22 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 330.70 428.11 m 331.56 429.62 330.77 430.70 331.92 431.21 c 333.07 431.71 334.66 433.22 334.66 433.22 C S %%Note: Object 333.58 428.62 340.92 432.86 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 333.58 428.62 m 334.94 429.84 334.08 430.99 335.81 431.35 c 337.54 431.71 340.92 432.86 340.92 432.86 C S %%Note: Object 338.69 429.48 345.02 430.99 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 5 338.69 429.48 m 340.42 429.84 342.79 430.99 342.79 430.99 c 345.02 430.99 L S %%Note: Object 344.66 428.47 349.78 429.12 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 344.66 428.47 m 347.18 428.47 347.76 429.12 349.78 428.47 C S %%Note: Object 349.78 425.23 356.54 426.31 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 349.78 425.23 m 352.30 425.23 352.30 426.31 353.66 426.31 c 355.03 426.31 356.54 425.59 356.54 425.59 C S %%Note: Object 320.04 419.54 325.80 420.41 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 320.04 419.54 m 323.28 419.54 324.29 420.41 325.80 419.54 C S %%Note: Object 325.80 422.57 330.91 423.29 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 325.80 422.57 m 328.32 422.57 329.04 423.29 330.91 422.57 C S %%Note: Object 328.68 423.43 337.18 424.94 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 328.68 424.73 m 331.42 424.73 332.42 424.94 333.79 424.44 c 335.16 423.94 335.45 424.30 337.18 423.43 C S %%Note: Object 338.04 422.93 345.82 426.96 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 338.04 426.96 m 341.42 424.73 341.42 425.74 342.79 424.58 c 344.16 423.43 344.23 424.66 345.82 422.93 C S %%Note: Object 323.21 411.34 328.75 413.71 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 323.21 411.34 m 325.73 411.84 325.08 412.42 326.59 412.70 c 328.10 412.99 327.38 413.71 328.75 413.71 C S %%Note: Object 327.17 411.05 333.43 412.78 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 327.17 411.05 m 329.18 411.41 328.18 412.56 330.55 412.56 c 332.93 412.56 331.92 412.78 333.43 412.78 C S %%Note: Object 332.93 410.76 336.17 411.26 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 332.93 410.76 m 334.80 410.90 334.66 411.26 336.17 411.26 C S %%Note: Object 335.66 409.54 340.06 410.40 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 335.66 409.54 m 337.54 409.54 338.04 410.40 340.06 410.40 C S %%Note: Object 339.91 408.38 343.80 409.46 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 339.91 408.38 m 341.78 408.38 341.28 409.46 343.80 409.18 C S %%Note: Object 342.79 406.66 347.18 406.87 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 342.79 406.87 m 344.30 406.66 345.96 406.87 347.18 406.87 C S %%Note: Object 350.28 401.11 356.40 402.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 350.28 402.12 m 353.16 401.98 354.89 402.34 356.40 401.11 C S %%Note: Object 352.44 398.88 357.55 400.54 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 352.44 399.74 m 355.18 399.10 355.82 400.54 357.55 398.88 C S %%Note: Object 356.69 391.61 360.94 393.98 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 356.69 393.98 m 359.28 392.62 360.94 391.61 360.94 391.61 C S %%Note: Object 356.69 390.31 359.28 391.97 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 356.69 391.97 m 358.42 390.82 359.28 390.31 359.28 390.31 C S %%Note: Object 355.18 388.44 357.05 391.61 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 355.18 391.61 m 355.68 390.31 357.05 388.44 357.05 388.44 C S %%Note: Object 352.51 391.10 353.66 394.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 353.30 394.70 m 353.30 391.82 352.51 393.12 353.66 391.10 C S %%Note: Object 351.07 392.62 352.66 397.51 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 351.07 397.51 m 351.94 395.35 351.29 394.63 352.66 392.62 C S %%Note: Object 341.57 399.24 345.67 403.63 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 341.57 403.63 m 344.16 399.89 345.67 399.24 345.67 399.24 C S %%Note: Object 334.30 402.84 338.90 406.94 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 334.30 406.94 m 334.30 406.94 337.61 403.99 338.90 402.84 C S %%Note: Object 331.06 403.99 334.44 407.38 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 331.06 407.38 m 332.57 406.15 333.07 405.00 334.44 403.99 C S %%Note: Object 328.32 403.13 333.43 408.17 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 328.32 408.17 m 329.90 406.66 332.57 403.99 333.43 403.13 C S %%Note: Object 325.80 402.77 332.57 407.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 325.80 407.66 m 328.18 405.65 332.57 402.77 332.57 402.77 C S %%Note: Object 322.06 404.64 325.30 407.88 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 322.06 407.88 m 323.06 406.66 324.29 407.02 325.30 404.64 C S %%Note: Object 320.04 397.87 327.82 407.66 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 320.04 407.66 m 321.55 403.78 322.06 403.56 323.93 401.98 c 325.80 400.39 327.46 400.25 327.82 397.87 C S %%Note: Object 323.57 396.50 326.95 398.30 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 323.57 397.73 m 325.66 397.01 324.58 398.30 326.95 396.50 C S %%Note: Object 329.76 377.06 330.05 383.04 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 329.90 383.04 m 329.90 380.66 329.90 378.72 329.90 377.06 C S %%Note: Object 327.24 383.18 327.74 388.58 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 327.24 388.58 m 327.60 385.49 327.74 384.77 327.74 383.18 C S %%Note: Object 312.77 381.89 320.47 393.55 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 312.77 393.55 m 316.08 390.96 320.11 385.13 320.47 381.89 C S %%Note: Object 313.13 371.16 320.11 389.16 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 313.13 389.16 m 313.49 387.00 320.11 378.43 318.10 371.16 C S %%Note: Object 311.18 373.10 313.42 384.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 311.26 384.70 m 313.42 379.22 311.18 375.26 311.54 373.10 C S %%Note: Object 298.58 372.02 301.54 383.98 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 301.54 383.98 m 298.58 379.30 299.95 375.70 299.23 372.02 C S %%Note: Object 291.17 378.79 294.55 388.08 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 294.55 388.08 m 294.55 385.20 291.17 384.98 291.17 378.79 C S %%Note: Object 289.44 383.33 293.83 393.12 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 293.83 393.12 m 293.11 390.60 289.80 389.09 289.44 383.33 C S %%Note: Object 293.11 370.30 300.38 389.52 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 300.38 389.52 m 300.38 389.52 294.91 380.88 294.19 375.77 c 293.47 370.66 293.11 370.30 293.11 370.30 C S %%Note: Object 306.22 368.42 306.94 388.80 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 306.94 388.80 m 306.94 388.80 306.22 384.48 306.22 379.01 c 306.22 373.54 306.22 370.94 306.22 368.42 C S %%Note: Object 308.81 402.55 313.85 407.30 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 313.85 407.30 m 313.85 407.30 311.04 404.35 308.81 402.55 C S %%Note: Object 307.66 405.86 310.25 410.18 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 310.25 410.18 m 307.66 405.86 L S %%Note: Object 301.82 403.70 306.22 409.46 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 301.82 409.46 m 302.18 407.66 306.22 403.70 306.22 403.70 C S %%Note: Object 297.50 394.63 304.06 405.86 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 6 298.94 405.86 m 302.18 402.98 L 297.50 399.31 l 297.50 399.31 301.18 396.14 304.06 394.63 C S %%Note: Object 304.99 421.34 305.28 428.90 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 305.28 428.90 m 304.99 421.34 L S %%Note: Object 262.51 419.98 267.26 426.53 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 267.26 426.53 m 263.59 422.21 263.23 422.50 262.51 419.98 C S %%Note: Object 254.81 419.62 260.64 422.93 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 260.64 422.93 m 254.81 419.62 L S %%Note: Object 347.40 417.46 351.07 425.09 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 347.40 425.09 m 348.12 423.29 351.07 417.46 351.07 417.46 C S %%Note: Object 352.51 417.82 356.54 422.21 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 2 352.51 422.21 m 356.54 417.82 L S %%Note: Object 304.06 427.97 306.29 429.12 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 14 306.29 428.69 m 305.86 428.04 306.22 427.97 305.57 427.97 c 304.92 427.97 304.34 428.11 304.34 428.11 c 304.06 428.90 l 304.06 428.90 304.49 429.12 305.14 428.98 C 305.78 428.83 306.29 428.69 306.29 428.69 c @c B %%Note: Object 296.06 432.14 300.89 438.19 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 19 298.80 432.14 m 299.74 432.43 300.38 432.58 300.38 433.66 c 300.38 434.74 300.89 434.45 300.24 435.67 c 299.59 436.90 300.10 438.19 298.73 437.40 c 297.36 436.61 296.78 436.32 296.64 435.38 c 296.50 434.45 296.06 434.30 296.50 433.51 C 296.93 432.72 298.80 432.14 298.80 432.14 c @c B %%Note: Object 309.38 432.14 314.21 438.19 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 19 311.47 432.14 m 310.54 432.43 309.89 432.58 309.89 433.66 c 309.89 434.74 309.38 434.45 310.03 435.67 c 310.68 436.90 310.18 438.19 311.54 437.40 c 312.91 436.61 313.49 436.32 313.63 435.38 c 313.78 434.45 314.21 434.30 313.78 433.51 C 313.34 432.72 311.47 432.14 311.47 432.14 c @c B %%Note: Object 288.50 395.35 300.10 402.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 25 300.10 400.90 m 300.10 400.90 299.81 402.70 297.86 402.19 c 295.92 401.69 297.14 401.47 294.91 401.33 c 292.68 401.18 290.81 402.26 289.66 401.18 c 288.50 400.10 289.08 401.40 289.51 399.46 c 289.94 397.51 290.59 395.42 290.59 395.42 c 290.59 395.42 293.18 395.35 294.48 395.57 c 295.78 395.78 297.07 397.08 297.86 398.02 C 298.66 398.95 300.10 400.90 300.10 400.90 c @c B %%Note: Object 291.38 404.86 300.38 414.00 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 19 300.24 405.22 m 299.09 408.38 300.38 406.80 298.80 409.03 c 297.22 411.26 297.43 412.06 295.56 412.78 c 293.69 413.50 291.82 414.00 291.60 411.26 c 291.38 408.53 292.39 409.03 293.83 407.45 c 295.27 405.86 296.21 405.58 297.50 405.22 C 298.80 404.86 300.24 405.22 300.24 405.22 c @c B %%Note: Object 295.85 406.66 303.77 418.68 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 22 302.18 407.30 m 303.77 407.30 303.26 408.89 302.33 411.12 c 301.39 413.35 302.18 416.02 300.10 416.52 c 298.01 417.02 298.15 418.68 297.50 416.88 c 296.86 415.08 295.85 414.94 296.86 413.50 c 297.86 412.06 297.86 411.91 298.80 410.33 c 299.74 408.74 300.10 407.23 300.89 406.94 C 301.68 406.66 301.90 407.30 302.18 407.30 c @c B %%Note: Object 297.86 419.83 304.06 424.80 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 19 300.74 420.12 m 301.75 420.19 301.68 419.83 302.33 420.91 c 302.98 421.99 304.06 423.00 303.05 423.58 c 302.04 424.15 302.33 424.30 300.82 424.22 c 299.30 424.15 297.86 424.80 298.22 423.65 c 298.58 422.50 298.66 422.14 299.38 421.56 C 300.10 420.98 300.74 420.05 300.74 420.12 c @c B %%Note: Object 311.62 404.86 320.62 414.00 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 19 311.76 405.22 m 312.91 408.38 311.62 406.80 313.20 409.03 c 314.78 411.26 314.57 412.06 316.44 412.78 c 318.31 413.50 320.18 414.00 320.40 411.26 c 320.62 408.53 319.61 409.03 318.17 407.45 c 316.73 405.86 315.79 405.58 314.50 405.22 C 313.20 404.86 311.76 405.22 311.76 405.22 c @c B %%Note: Object 308.23 406.66 316.15 418.68 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 22 309.82 407.30 m 308.23 407.30 308.74 408.89 309.67 411.12 c 310.61 413.35 309.82 416.02 311.90 416.52 c 313.99 417.02 313.85 418.68 314.50 416.88 c 315.14 415.08 316.15 414.94 315.14 413.50 c 314.14 412.06 314.14 411.91 313.20 410.33 c 312.26 408.74 311.90 407.23 311.11 406.94 C 310.32 406.66 310.10 407.30 309.82 407.30 c @c B %%Note: Object 306.22 419.83 312.41 424.80 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 19 309.53 420.12 m 308.52 420.19 308.59 419.83 307.94 420.91 c 307.30 421.99 306.22 423.00 307.22 423.58 c 308.23 424.15 307.94 424.30 309.46 424.22 c 310.97 424.15 312.41 424.80 312.05 423.65 c 311.69 422.50 311.62 422.14 310.90 421.56 C 310.18 420.98 309.53 420.05 309.53 420.12 c @c B %%Note: Object 311.90 395.35 323.50 402.70 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.22 0.22 0.00 @w 0 O 0 @g 0.00 0.80 0.00 0.20 k %%CURV 25 311.90 400.90 m 311.90 400.90 312.19 402.70 314.14 402.19 c 316.08 401.69 314.86 401.47 317.09 401.33 c 319.32 401.18 321.19 402.26 322.34 401.18 c 323.50 400.10 322.92 401.40 322.49 399.46 c 322.06 397.51 321.41 395.42 321.41 395.42 c 321.41 395.42 318.82 395.35 317.52 395.57 c 316.22 395.78 314.93 397.08 314.14 398.02 C 313.34 398.95 311.90 400.90 311.90 400.90 c @c B %%Note: Object 308.45 397.15 315.36 398.23 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 315.36 398.23 m 313.13 397.15 308.45 397.15 308.45 397.15 C S %%Note: Object 300.10 425.74 301.54 429.34 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 300.10 425.74 m 300.31 427.03 300.89 428.40 301.54 429.34 C S %%Note: Object 299.16 429.48 301.32 432.36 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 299.16 429.48 m 299.16 429.48 300.60 430.49 301.32 432.36 C S %%Note: Object 309.02 426.60 310.03 429.48 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 310.03 426.60 m 309.46 427.90 309.96 428.98 309.02 429.48 C S %%Note: Object 309.67 430.27 310.82 432.14 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 310.82 430.27 m 310.32 431.28 310.46 431.78 309.67 432.14 C S %%Note: Object 296.42 422.06 299.23 423.72 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 299.23 422.06 m 297.43 422.57 297.36 422.50 296.42 423.72 C S %%Note: Object 295.49 426.02 297.43 428.40 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 297.43 426.02 m 296.57 426.82 296.21 427.25 295.49 428.40 C S %%Note: Object 295.06 430.92 296.42 433.51 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 296.42 430.92 m 295.85 431.93 295.13 432.29 295.06 433.51 C S %%Note: Object 296.28 434.59 297.07 436.75 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 297.07 434.59 m 296.78 435.60 296.28 434.74 296.28 436.75 C S %%Note: Object 297.65 436.25 297.94 438.77 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 297.94 436.25 m 297.94 436.97 297.65 437.62 297.94 438.77 C S %%Note: Object 310.54 421.70 312.91 422.64 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 1.00 0.30 0.00 0.00 k %%CURV 4 310.54 421.78 m 311.62 421.78 311.83 421.70 312.91 422.64 C S %%Note: Object 311.90 424.44 314.21 425.52 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 311.90 424.44 m 313.13 424.66 313.56 424.44 314.21 425.52 C S %%Note: Object 312.91 425.88 314.57 427.68 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 312.91 425.88 m 313.70 426.10 314.06 427.10 314.57 427.68 C S %%Note: Object 313.13 427.82 314.86 429.84 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 313.13 427.82 m 313.78 428.69 314.14 428.83 314.86 429.84 C S %%Note: Object 313.78 430.49 314.86 433.22 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 313.78 430.49 m 314.57 431.64 314.50 432.07 314.86 433.22 C S %%Note: Object 313.70 432.72 314.42 435.31 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 4 313.70 432.72 m 314.28 433.73 314.35 434.02 314.42 435.31 C S %%Note: Object 313.27 433.80 313.92 438.55 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 1.00 0.45 0.00 0.00 k %%CURV 7 313.27 434.59 m 313.27 434.59 313.49 433.80 313.70 436.18 c 313.92 438.55 313.78 438.55 313.78 438.55 C S %%Note: Object 306.86 411.19 309.17 418.10 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 309.17 418.10 m 308.38 417.02 307.66 416.95 307.30 415.30 c 306.94 413.64 306.86 412.92 306.94 411.19 C S %%Note: Object 302.90 411.12 304.49 418.82 @E 0 J 0 j [] 0 d 0 R 0 @G 0.00 0.00 0.00 1.00 K 0 0.58 0.58 0.00 @w 0 O 0 @g 0.00 0.00 0.00 0.30 k %%CURV 7 302.90 418.82 m 303.91 417.74 303.70 418.25 303.98 416.16 c 304.27 414.07 304.34 412.34 304.49 411.12 C S @rs @rs %%Trailer end context-2013.05.28.20130704/texmf-dist/tex/context/sample/aesop-de.tex0000644000175000017500000000213610361565011024457 0ustar norbertnorbert% German example file from Aesop Der L\"owe und die M\"ucke Eine M\"ucke forderte mit den \"uberm\"utigsten Worten einen L\"owen zum Zweikampf heraus: \quotation {Ich f\"urchte dich nicht, du gro\SS es Ungeheuer}, rief sie ihm zu, \quotation {weil du gar keine Vorz\"uge vor mir hast; oder nenne sie mir, wenn du solche zu haben glaubst; etwa die, da\SS\ du deinen Raub mit Krallen zerrei\SS est und mit Z\"ahnen zermalmest? Jedes andere feige Tier, wenn es mit einem Tapfern k\"ampft, tut dasselbe, es bei\SS t und kratzt. Du sollst aber empfinden, da\SS\ ich st\"arker bin als du!} Mit diesen Worten flog sie in eines seiner Nasenl\"ocher und stach ihn so sehr, da\SS\ er sich vor Schmerz selbst zerfleischte und sich f\"ur \"uberwunden erkl\"arte. Stolz auf diesen Sieg flog die M\"ucke davon, um ihn aller Welt auszuposaunen, \"ubersah aber das Gewebe einer Spinne und verfing sich in demselben. Gierig umarmte die Spinne sie und sog ihr das Heldenblut aus. Sterbend empfand die M\"ucke ihre Nichtigkeit, indem sie, die Besiegerin des L\"owen, einem so ver\"achtlichen Tiere, einer Spinne, erliegen mu\SS te. context-2013.05.28.20130704/texmf-dist/tex/context/sample/weisman.tex0000644000175000017500000000052411024176655024435 0ustar norbertnorbertSince the mid-1990s, humans have taken an unprecedented step in Earthly annals by introducing not just exotic flora or fauna from one ecosystem into another, but actually inserting exotic genes into the operating systems of individual plants and animals, where they're intended to do exactly the same thing: copy themselves, over and over. context-2013.05.28.20130704/texmf-dist/tex/context/sample/davis.tex0000644000175000017500000000144310361565011024070 0ustar norbertnorbertThis nation, turning 100 years old, had no {\em Odyssey}, no St.~George slaying the dragon, no Prometheus. The emerging American genius for making a lot of money was a poor substitute for King Arthur and his knights (although the Horatio Alger myth of rags to riches was good for a lot of mileage). Without a mythology and set of ancient heroes to call its own, America had to manufacture its heroes. So the mythmaking machinery of nineteenth|-|century American media created a suitable heroic archetype in the cowboys of the Wild West. The image was of the undaunted cattle drivers living a life of reckless individualism, braving the elements, staving off brutal Indian attacks. Or of heroic lawmen dueling with six|-|guns in the streets at high noon. This artificial Wild West became America's Iliad.context-2013.05.28.20130704/texmf-dist/tex/context/sample/demo-xml.tex0000644000175000017500000000154610361565011024510 0ustar norbertnorbert% interface=en \defineXMLargument [title] [label=] {\title[\XMLop{label}]} \defineXMLenvironment [itemize] [packed=] {\doifelseXMLop{packed}{yes} {\startitemize[packed]} {\startitemize}} {\stopitemize} \defineXMLenvironment [item] {\item} {\par} \defineXMLenvironment [p] {\ignorespaces} {\par} \starttext \startXMLdata Just an Example

There are three items:

Number One Number Two Number Three

And tree more

First Line Second Line Third Line \stopXMLdata Instead of putting the data in here you can put it in a file, say \type {sample.xml} and load that file using: \starttyping \processXMLfilegrouped{sample.xml} \stoptyping \stoptextcontext-2013.05.28.20130704/texmf-dist/tex/context/sample/lorem.tex0000644000175000017500000000152012130411274024071 0ustar norbertnorbertLorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur massa turpis, semper quis fringilla ut, viverra nec risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec nunc lorem, sollicitudin vel sodales eget, vehicula nec mi. Proin ullamcorper rutrum nibh, at porttitor nunc euismod et. Donec faucibus nisi faucibus ipsum porttitor pharetra. Sed elementum, lectus nec congue imperdiet, ipsum leo viverra nisi, sit amet commodo odio odio id nisl. Fusce sagittis lobortis nisi sed consectetur. Nam egestas, sem ut fermentum convallis, ipsum tellus venenatis augue, eget condimentum risus quam id erat. Sed metus dui, sollicitudin pharetra pellentesque sed, placerat eget augue. Mauris sodales pretium tortor vitae rutrum. Proin quam sem, lobortis tincidunt pretium vitae, feugiat eu lacus. context-2013.05.28.20130704/texmf-dist/tex/context/sample/demo-tex.tex0000644000175000017500000000056010361565011024503 0ustar norbertnorbert% interface=en \setuppapersize [S6][S6] \setuplayout [width=middle, height=middle] \setuphead [chapter] [header=high, style=\bfc, alternative=middle] \starttext \title{Peter D. Ward} \processfile{ward} \title{Hermann Zapf} \processfile{zapf} \title{Bill Bryson} \processfile{bryson} \title{Edward R. Tufte} \processfile{tufte} \stoptextcontext-2013.05.28.20130704/texmf-dist/tex/context/sample/tufte.tex0000644000175000017500000000126710361565011024115 0ustar norbertnorbertWe thrive in information||thick worlds because of our marvelous and everyday capacity to select, edit, single out, structure, highlight, group, pair, merge, harmonize, synthesize, focus, organize, condense, reduce, boil down, choose, categorize, catalog, classify, list, abstract, scan, look into, idealize, isolate, discriminate, distinguish, screen, pigeonhole, pick over, sort, integrate, blend, inspect, filter, lump, skip, smooth, chunk, average, approximate, cluster, aggregate, outline, summarize, itemize, review, dip into, flip through, browse, glance into, leaf through, skim, refine, enumerate, glean, synopsize, winnow the wheat from the chaff and separate the sheep from the goats. context-2013.05.28.20130704/texmf-dist/tex/context/sample/khatt-en.tex0000644000175000017500000000041711571377075024514 0ustar norbertnorbertʿAlī ibn Abī Ṭālib said to his scribe ʿUbaydullāh ibn Abī Rāfiʿ: your inkwell before you, sharpen the edge of your pen, make sure there is open space between the lines, and set your letter|-|spacing closely. Now {\em that} is the way to make the script shine! context-2013.05.28.20130704/texmf-dist/tex/context/sample/demo-mps.tex0000644000175000017500000000071710361565011024506 0ustar norbertnorbert% interface=en \starttext \setupcolors [state=start] \startMPpage path p ; color c[] ; p := fullsquare scaled 4cm ; c[0] := transparent(1,.5,red) ; c[1] := transparent(1,.5,green) ; c[2] := transparent(1,.5,blue) ; for i = 0 upto 2 : fill p rotated (i*30) withcolor white ; endfor ; for i = 0 upto 2 : fill p rotated (i*30) withcolor c[i] ; endfor ; addbackground withcolor transparent(1,.5,cmyk(0,0,1,0)) ; \stopMPpage \stoptextcontext-2013.05.28.20130704/texmf-dist/tex/context/sample/sample.tex0000644000175000017500000001046211376503616024256 0ustar norbertnorbert\starttext The sample directory contains a few files with quotes that can be used while testing styles. I'll complete this file when I've reorganized my books and audio cd's. If someone makes a nice bibtex file of these, the quotes can also be used in testing bibliographic references and citations. \starttabulate[|l|l|p|] \NC \bf file \NC \bf author \NC \bf source \NC \NR \HL %NC stork.tex \NC David F. Stork \NC \NC \NR \NC knuth.tex \NC Donald E. Knuth \NC \NC \NR \NC tufte.tex \NC Edward R. Tufte \NC \NC \NR \NC reich.tex \NC Steve Reich \NC \NC \NR \NC materie.tex \NC Louis Andriessen \NC De Materie \NC \NR \NC douglas.tex \NC Douglas R. Hofstadter \NC \NC \NR \NC dawkins.tex \NC Dawkins \NC \NC \NR \NC ward.tex \NC Peter D. Ward \NC The Life and Death of Planet Earth \NC \NR \NC zapf.tex \NC Hermann Zapf \NC About micro-typography and the hz-program, \endgraf Electronic Publishing, vol. 6(3), \endgraf 283-288 (September 1993) \NC \NR \NC bryson.tex \NC Bill Bryson \NC A Short History of Nearly Everything, \endgraf Random House, 2003 \NC \NR \NC davis.tex \NC Kenneth C. Davis \NC Don't Know Much About History, \endgraf Everything You Need to Know About American History but Never Learned, \endgraf HarperCollins, 2003 \NC \NR \NC thuan.tex \NC Trinh Xuan Thuan \NC Chaos and Harmony, Perspectives on Scientific Revolutions of the Twentieth Century, \endgraf Oxford University Press, 2001 \NC \NR \NC hawking.tex \NC Steve W. Hawking \NC The Universe in a Nutshell, Bantam Books Random House, 2001 \NC \NR \NC linden.tex \NC Eugene Linden \NC The Winds of Change, Climate, Weather, and the Destruction of Civilizations, \endgraf Simon \& Schuster, 2006, p.106 \NC \NR \NC weisman.tex \NC Alan Weisman \NC The World Without Us, \endgraf Thomas Dunne Books, 2007, p.160 \NC \NR \NC montgomery.tex \NC David R Montgomery \NC Dirt, The Erosion of Civilizations, \endgraf University of California Press, 2007, p.199 \NC \NR \NC carrol.tex \NC Sean B. Carrol \NC The Making of the Fittest, \endgraf Quercus, London, 2006 \NC \NR %NC schwarzenegger.tex \NC Arnold Schwarzenegger \NC Several place on the World Wide Web. \NC \NR \stoptabulate % Tufte: This quote will always produce hyphenated text, apart from the content, % it's a pretty good test case for protruding. % Ward: I should find a quote in the extremely well written Rare Earth as well. All Wards % books excell. % A Short History of Nearly Everything: I wish that I had the memory to remember this book % verbatim. % Chaos and Harmony: very nice and well written book, but the typography is rather bad: % quite visible inter-character spacing in a text that can be typeset quite well by \TeX. % The Universe in a Nutshell: a beautiful designed book, (companion of A Short History % of Time). % The World Without Us: A properly typeset, very readable book. Read it and you'll look at % the world around you differently (and a bit more freightened). % Dirt, The Erosion of Civilizations: one of those books that you buy immediately after % reading a few sentences. Also one of those books that every politician should read. % The Making of the Fittest: nice sample for color ans subsentence testing. A very % readable book but unfortunately it has inter-character spacing. % The Schwarzenegger letter was originally typeset at a width equivalent to 16.1cm in % a default ConTeXt setup. \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/sample/zapf.tex0000644000175000017500000000111511024176655023727 0ustar norbertnorbertComing back to the use of typefaces in electronic publishing: many of the new typographers receive their knowledge and information about the rules of typography from books, from computer magazines or the instruction manuals which they get with the purchase of a PC or software. There is not so much basic instruction, as of now, as there was in the old days, showing the differences between good and bad typographic design. Many people are just fascinated by their PC's tricks, and think that a widely||praised program, called up on the screen, will make everything automatic from now on. context-2013.05.28.20130704/texmf-dist/tex/context/sample/knuth.tex0000644000175000017500000000130210361565011024105 0ustar norbertnorbertThus, I came to the conclusion that the designer of a new system must not only be the implementer and first large||scale user; the designer should also write the first user manual. The separation of any of these four components would have hurt \TeX\ significantly. If I had not participated fully in all these activities, literally hundreds of improvements would never have been made, because I would never have thought of them or perceived why they were important. But a system cannot be successful if it is too strongly influenced by a single person. Once the initial design is complete and fairly robust, the real test begins as people with many different viewpoints undertake their own experiments. context-2013.05.28.20130704/texmf-dist/tex/context/sample/materie.tex0000644000175000017500000000130410361565011024404 0ustar norbertnorbertZaagh, of Steek||zaagh. Domme||kraght. Mokers. Yzere Wiggen. Brandt||yzer. Hout||haak. Spaander||haak. Een Klaas Jacobzen. Tange. Nagel||hamer. Wigge. Oor||houten. Kluften. Hellen. Steven||haken. Hevels en Klein||touwen. Een Koe||voet. Schot||bouten. Yzere ram. Avegaar. Een houte Ram. Een groote Wigge daar toe. Teer||ketel. Slyp||steen. Een Mal. Rye. Hout||bok. Schraagh. Vlotten. Een Slee. Dwars||slee. Kaap||stander. Bytels. Klavaats||hamer. Rabat||yzer. Klavaats||yzer. Spyker||yzer. Werk||bytel. Duim||stok. Schraper. Een Moker. Spyker||hamertje. Een Roffel. Gerf||schaaf. Odief. Ploegen. Handt||zaagh. Klamp||spykers||boor, tien duims Boor. Dissel. Byl. context-2013.05.28.20130704/texmf-dist/tex/context/sample/dawkins.tex0000644000175000017500000000210010361565011024411 0ustar norbertnorbertI used a similar illustration in one of my Royal Institution Christmas Lectures in 1991. I said I had reason to believe that among my audience was a psychic, clairvoyant individual, capable of influencing events purely by power of thought. I would try to flush this individual out. \quotation {Let's first establish,} I said, \quotation {whether the psychic is in the left half or the right half of the lecture hall.} I invited everybody to stand up while my assistant tossed a coin. Everybody on the left of the hall was asked to \quote {will} the coin to come down head. Everybody on the right had to will it to be tails. Obviously one side had to lose, and they were asked to sit down. Then those who remained were divided into two, with half \quote {willing} heads and the other half tails. Again the losers sat down. And so on by successive halvings until, inevitably, after seven or eight tosses, one individual was left standing. \quotation {A big round of applause for our psychic.} He must be psychic, mustn't he, because he successfully influenced the coin eight times in a row?context-2013.05.28.20130704/texmf-dist/tex/context/sample/d-res-01.xml0000644000175000017500000000301012130411274024177 0ustar norbertnorbert PRAGMA ADE context figure demo This file demonstrates how to use the ConTeXt figure base macros. part of a dutch cow a simple dutch cow a simple dutch cow cow.pdf who knows This is just an example graphic. unknown mill in hasselt mill.png johan jonker A Dutch mill. unknown another simple dutch cow cow.pdf Who Kowns Again some demo graphic. obsolete context-2013.05.28.20130704/texmf-dist/tex/context/sample/khatt-ar.tex0000644000175000017500000000067311571377075024520 0ustar norbertnorbertقَالَ عَلِيُّ بْنُ أَبِي طَالِبٍ لِكَاتِبِهِ عُبَيْدِ اللّٰهِ بْنِ أَبِي رَافِعٍ: أَلِقْ دَوَاتَكَ، وَ أَطِلْ جِلْفَةَ قَلَمِكَ، وَ فَرِّجْ بَيْنَ السُّطُورِ، وَ قَرْمِطْ بَيْنَ الْحُرُوفِ؛ فَإِنَّ ذَلِكَ أَجْدَرُ بِصَبَاحَةِ الْخَطِّ. context-2013.05.28.20130704/texmf-dist/tex/context/sample/montgomery.tex0000644000175000017500000000136011024176655025171 0ustar norbertnorbertMaking oil requires a specific series of geological accidents over inconceivable amounts of time. First, organic-rich sediment needs to be burried faster than it can decay. Then the stuff needs to get pushed miles down into the earth's crust to be cooked slowly. Burried too deep or cooked too fast and the organic molecules burn off; trapped too shallow or not for long enough and the muck never turns into oil. Finally, an impermeable layer needs to seal the oil in a porous layer of rock from which it can be recovered. Then somebody has to find it and get it out of the ground. It takes millions of years to produce a barrel of oil; we use millions of barrels a day. There is no question that we will run out of oil --- the only question is when. context-2013.05.28.20130704/texmf-dist/tex/context/sample/hacker.jpg0000644000175000017500000010646411571377075024227 0ustar norbertnorbertJFIFCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222b"L!1AQa"q2#BRbr$35CST%4DFsu6!1AQ"a2q#3RBS ?3P_ )F7cHJ.z Y0[%Hd,/w4,s}vs /C$,/wtƻz.}W7cHYֱڂiw8cwv4P ]Ͼ1w^1=zy2BQq7}syXǏ|2B̃xUxC5\0+t0- qd(Y'Q(X;{JNV~MR G gh #StVRÇj9uhԙ4D[Z?=2_섛(a;k 6R]^9qȖL*D@ `(@["-GSjXH2& dr<"q)֫*U7vqMiAN;x|8~(v9kǩvdǏxFC ˈ?Xw=a&̋|8 "]ص?(0u"܋|6/9|9~]_ gw܋|s9^Drab9]k_K;ۍݍ օaf&4:3CYGzI(^=ܻ;F$<:A/̏ަ]ϼM\|`ݎCׯWYĻF35{\"B2o/Y,ț)mѾˮ ؾ0{fkr30{˙u1>m1!71pxNN۱'xL{_wz̿įKcvr̹.ׯ0u.g牷ns݋pnſhG߸.gj=`5 f\AshvnjWǬ:o%`?\ahvn\p}!:o%qx7yk->7>)Ps1 ןYayw7RE1zAC?i;_:쉼)PvX>pp7cH7}ohvsj&9}3By|G?Gnhvs*&>&2*E# Bayw=kgv&(2{ lN^$컦Lcw 0r1*17}`'! |1:! 1 }zFC}cX0ub/w `87}b2X$L7٩iV‹nZS68[A,[xRQ5\TKbFWR$\X(j0OԸ4rj{R[OJ׍Mcv*p`:gL}i!  C0+#H `n㧯2d07gᰓg7yem8C +.7g0Iϥ~p `Ca]?ߎKw+$(ѓiXV6}Xan\O1iS*< 홝y$4Qt qP.L7D)gKƔ&UxVG0m~Y-Hԕ:De!d]ī_B ;:j^eL]}ᐊkWjj -a R)=H=\5AT.F28u=1>WfYv`!#IEz^$S*A)"Qt:))eK+ZnHp<"׳˨%git)첔>9&Ǒ+E ⓝV]k$cz]7g>p~>~1t_U=Z}~0`7~y3>} m m?d0|( F 8Pg@S Ì7r` B kp ).?87~ ƹ.ax0Cxkף^W`SO(7|k|x^0 ` ٽXo 1A]a3'A|~n׆p `CxO ?^2 HlDž5-^C +7PqqלC )6iǬ5υwz@Wu^0n2,N7Qxwj%e=Qpr 60l ?^A?8ȭ0s7]-|z똷> Escv 0LXd1 Üc}aX[O3ІBrÜ1\^t Eݏ^~9KXMbV)2蹿yKٲd^:~({WBz߬&V 1Ej/QڭЛefam-%ap#;2LWvBjhe86:^ܣN-..Y9}~Kb#.W, msX9\NY-{T5R'OM)qL)d0ý 2u 3օI;A4 r@Gi:B܆c> 2U)D?4e5V #ʵEVbnڔ)I!Qe3UD˄% HfHnNn])@Qu'Ē|cǴ9ŲEvVT!>Rz4aIRHRNGQw7RiVםWBs`Ö|#|?1z Lg 9(cu>pnǯ^_(0q>"Ez=z_s ݎ E@Q{ n C|>x8cv-x7\]azkzݎ^[ ^azv2.w yA gݏ2 xcv/ϔcv-C =`(` v˿ׇ!ar ݍl^uC|9F݀tu "yy0g n˟Wv9yC!a|(~sC|0`7C׮(7CNp`7Z\[uӸ^ "8\۾gHct2t&-:߬AQ߼򢝀u\о>qضzŶe~"~qwa_["`8n\%9e_2``- 韏Hf1-gyq׫uo3nmFvؽzC17ׯvz^M̼b]w %(ԓ<̤O!PV|xmSgVt9ɔ݃,szsMYz#e:wwriRKqJ;V*HRW:EE-[:Yj ,)=rp]8P7&*tgBRED_ROU)l26M 1*WtpG0Ɲ_:{%,vXӌͥ6ɖ)B;R[)liHH̒z)j@_:C7$,Mv?k!MFpT{- ߲8g,{)<əu*nR)T҆E(#0uP8OI -8Uw4JYI"4*32ѩfn}kjVIRs0ޗdٰq)X <;+(]'Zz[l@ #Ue!?[;3^S+5:ˍy diC!$6r1E)jWU~VƓck }#NPn$n 9uSD {qAˇ(f1Acv/^=#;l~b-s{FCףt " {ׯrYC1 i9C(7W Hf1< Acz "30n n =x3޺#_3[?z3``m_1>9tzd184gu#Ӿ=f1}Mgu/ k ߧb/ w]?]#3(f1ݎP`=}zec|`(3Aksc|zltuEw={v'O^Fo\\ iä1}=z!˻3`|`8C@ןAiC1׭`ݏd62goל`7qEs0`7cׯ7c\:E7`}뻾yv:zXf1;-C;to1=_C1m'K8ZwST~vYCEdZߞpa:855!Oqw]O#May$}"fuuOL9`QR@8rx)su- lv s-0FKd.6I'>XmaM⾧%hSNs֧e0aMK^ZO؝JT? a8/cQ%NޖVZNTdfJeZyԬBB:+ rפyJ) M:VԒb3|֪t܈ ƑH<ҡ?(|㋧U`۶u^Zn1ہy*M-DU]/DJYAy̐Cٕ˥ d(A@ mEϤ8HH%D3$kUMRRP{"!.S6B06)7?cvu5{>'4TmI1w6ӓD:mm4<@Sj6zRBn!qEg|e rWfRQACKz%I};RQ+= ZPSn$- NIxFqi7d:h}?xk`c,qD3>PrCl83у0b- Z8>ZC! s˙ L3 2'l7=` =![ zs pp2!`Cbo `寔2`7>pd1a ZC!y08C9 ",M<` pe N#`FH NvFDF`4ӎJRVtJR{GOwskq?s.@N|xRQ+1g~~Y'LBSJ-+;M)TZUKJQ\xR@$ m&e1Sĵ(n%R1,)crIf\+ueJ!h8ekm.cQc~Ϗ|x/.tN6DxToHW)Dw5fqj!MMC6 Iod ?8ؔ Ћ*?=r:xNL,I$|VMeamFKɻN}sq%Y"r:2L (b>{`hZrTHXEF;+I/7 , H}svfhA9K=H`/%%Euϗ燎#E5H9?+4H6F6@fF,tT:N[u~-_^C8݃Cs0[uCלz~b`C "ۻa됿kqxMݏÇ t"  "4w}g\c8:q1i"d%+ 2o8ڿuow!!HZTjH5Fc"FR T$f$Jix -] ev%4el{(| #pe74cJ[bӛaP!#AHe45fK"SoJC6UA&ֵ̭B@m$ l|5쮀"C{ RV_JI!QΙgulOGrV*^TajaR>JNB~݁=sgl5U2=6 t9b[7[8'r_cw4Q6k[u z=#ӧ_5- gCaWtpW?3/1xzǯt3 : "oqؿc9\C1l_^nLJt3Acm@-x r^saSwa~wv0e(f1f2n^C85b3= Fd+p ݯ3[L5Ndb-l_ `C1+y L# "۱[g7 3?1 'ZS*ذsB t8\6VJm%kRR1] Q3esNmۥ%5&Ҋ_ x{gj۪IpN 4QYtakLϤ|4-anT9)IԦ!V?(E] ۧ :|3q$ 8ƺ[|`_w:|_k z1=џ^w[!˔q8>Vwͽ&nUz@!mH]5Y*5^D(YMj Q,AI [1o6YvIsQ O2쾍δダ\{ŦWrj(E bFnjYHSN-q\~1&]p/2I>n-[\D([`jTb:ȗ#*/gJi36CaBSQ{dr3 )KzK- lȌyBkY$1.-BTHم9:~nMVBP!u+ -:ZkCNҹTfEt 0d:UA7$(m2mfj\+Krr]2mMC $ M,/.UNi-Vm\jz=9@^hq9-Ҵ#le',r{)}Sh.%Zfاg65HiJ 74˨aFwAcٞڔ$TRDm I*# 86;NLGQ&QBT)P#B:F0kҞL;(3W3.6m]3>ԴUXm7Q袒 \i];|Ù8` +P_ 1eaþ0Ȝ `C{kO2 0 ݸC! 1=!_KA8cA p`/3hw龍2 'ۀ7pC|9[0tnC!`1ZwC!h8w"FP'X"6`~bѱ=~MnQ6-Repm*;"T%]Re˪ݓxnҌGΫ,h-74V-! QKiqFGDDg]mVJ@*Rl;Eznki6ҝ$fiR4JN~9F;Hrۙaٶ%^3B͆`7% qwsƹK's$ih5A $5?q@1<ePF\hek Fr3y֖sY D5+PZUV\vBvvI_@um:tuGQ {'¤\J%) '=fڽ^)TyǚrSW`X B%i B %asGkijCv߿۱W:n̫*UICvk}_.>a𔻺]D+1t#AQKqWFmq"*+ $0GRF<5\\ݿwQm &2NDJfxSLa|=DzDmc!;q9|:^Cgsz,9_(l(t+.z@kѶZF0rK9[8 <0lz '=c;WhXW gzC<6 _[aL734Ro-,eQ ,R g88VrVuR €$uiN[BEԵgMA 2 ӠIJ`T\GT_o 5 (t t$xsFK J${ۻGf1gK>=zko?`3Un\V& IfH-Jx$- υ.h <:*4(5XT6/wq# "Y˷3,Hq7쀒:nĞ|sjߚǡ;+ kjVB"7fl8gִjY۾1Oq?SO_##Ϋ5^[eڞaO*K8]injq6T/Z{W$v-P-^F(s{1JvJuI)߿(?1B5{z^Gǫ̼=ÉZxX.flҝUdfYvw)u@apT3$ņ+SU6PB19)DKl|%µZ1V|3УWQ\iFÏV[3N.eCj(J/'^POgI4y4XJFbH"JBԴF%jfy0p G]_URiNjk|T! j2Kc+̱.ܴ(c'#=Qv^L*U8%$kvny;ʌĶ@jF|&&I:53M6씜xqWhZZ>ޤaj_C[W%h[_[X׳ I\ fJe{獉tϷa}\(vNT7*?,$jMt:#jv~6fZ'vVBXn'X$iaÅ 刃{6Q5wSN|)*E3-6\ CP-LXl (xh Jg9ZbGxMﻛ(Y^wv~ktUUGv~!E^/,ϡtpzAig\V,hԎPwEdԩfn9e W㮹DX,DǀtB(1C&2$Ack ' pbxdDyX q_cG PdI,GmyP78 *:Y -u)=O<{&⇱Vtǩc%6mb?YB6̔+[x"2#3*_Ň{n<᪏Nم}rYse //Ax8,9A!ds 48d` kU;4P}2 ] Ub9!A%;;fi2s n/%8RkH GCq"j(LIJ׼ =?YAk3+ F6PVN\bԝ2NBE~$ÜHScqFpS Rv«^:S^PPO<hbqbEn Y$IOi &&'<q:RGSp] 8֣(5:'eާK{0K~p:/~C/x94"fe %.sŎj IJC^hB".T))tiRU$JH8\2Z ?+wV} n,/%KʩYhvMPlWk҉uLK71:UaW;#-˲Ym-6d 3yErFV}"Ɨa\*fFyܸu4 ΂é15Q,y12 AӔpw[80 ep8yA󃙸 tc!$O9F=e3ߜ hJ[KJem8,r aSH"Sٹ9ACMZu8n%FZ#o8F\% K)WjbHpLGd.q <)%zԚ6(?)i2tQ %>W?RlA"ާP[R2~n+27hǟ֎Kˍ59i(G̎<]$_JGԞDc5vhOd 9AF M6J>dқÉ⋶ ӆe*J.w4ӴLK:/Rn W|-umYs(%K iI lχFVs82Qkkki%VS=k;G2d rF=#Q>H8f]MG xF0$Aj^VIץ,0V7f̈́ 8 ,FY-W^vw6Pt`f[fivB\AEǘj̽AA6p- )P9ey1WPH,(TRZUq[Rt P*sVvG8SWo[mPSk)PЃYz|I~ vVTFhfJ7_,"Mܹ sg(Fl!AI$GjKi&QUb_1pOy.ϟq r%մԾs#KGEzubKskhjSʞ3Vfs#DrOjnZIL6>Ӌ 8MmOjdvV]NNM&yZm-JJ+n'QB.Sv8k=$魡0ݥ$(a$INqOz\8 8"$!#=*օ;P\+0^T)‚mmQĞl}66 KAiwJeZNI[׶Sh(BB) q-pd pH&uX(JyJ~Ԝ/k0/%JoMq8C-)LOԔnmhQJ~ZB)s|#Z#[|=w|˱u)qH}*NAW&iZRėle+g|<^bg.DV< Zi2$.DxŔDZbxGjKed[SO6IJ qZ MMT'jK\KҳrkV} Ɔ=hؗf9SzJ^ue,캆6< s'']"]m fʏhbXo\KKSW k>^[S̾-l"RAј3M3Ay%Dv?kAZRE$кNk>3qDd˔`dyF:87XyZ][e 8TrIQ[J)U-O ca7l\q RPKUr+ qs8wŗ*:_{)>( qO6+yEʔԛXu[B(JB<0[<?46Y &0_*rpm$wU,!9\'dܹFJ0/EyrmS@!$!N,!Nw$g K[bMZ;Km%G5ڀ8^K38N910& Zmm-46䔠@ -.xK2җ(5%}G8ys.Rj4QB{?>Cu>T7Zc_?/P\&90Xq˥Edaq"gnSn(l:RXi308'[ɤG4 a4ɵݢ ͮLRX*.QOIDZSrTu'fۛL$\=96yߐW<:Qvr1(%/3R[3})LrY{{EHh?T6.mEi#>' Bʚea)im*GS+JY*B{@'f:JMIͶҮ)B[cnf"۵J!,!Pe%[ Txeeq4D@J/5>)Sl$s+?펬R>kb~O<_Dqk9[ĹHYJ2R%),%A)WI 9C^yN2OQZvɕҾMd1`u kUYC )Y^fIS,05!8aĘw;GUT;FJ>+Io%FJԲmR+OZ~@jطޖ)m}#&nN-~9gJڦYA+t` `<P뒒rJLÔzk.)AIRMȸ)8 [h+R%F?חlT7ds5L\hLaEUkǞg%$Y)pu H,&Kj *[XFBj~ej3O🲔.#֒訯F~2XbF UdчP_M#hefRU!-P)I7=-% HS勎y$k76ƬlxB{M8[uL 5}k9=@7G<8E'տ}MbU)9Tn/,XIS$b2BG(WJ}*kIm7!r񇶏n'+Թ-#+R *BA*a@EEϷ:uBCJYJ2@9\~FwSUܺ[۩j#N9.jf;n)("ŝu[ V q{ 9񲊇~\#1uhɤyjnܳSoL'/MtXɔ;0L:>Iܩ ^ʽ0Gǀ 6&0&e6RX-XB쒡T)bʚRRr'uJHSSL79U5&9VDm-aձ0K2*@$=MRLiRe<8sܲ|-,_5[ܨ ,ܭ*@8X2_a!Hq!I E|1>i2Mk{EʼnBX4yMZ q$Z/LWFy Ƙ~M69Ue:vh˿12KmWv9[\Q(ӕ+V ."7Q R^/0`]@d'kZ6 HRUpEH櫜=uce%Q|S5%eڿRĞRUUj0YHOMcif^uh4kJLL) 8 R6kb'2V\˭J:"Q%x-M_e+|_nCQQ{)SZVUQN* O02 /\Z Itz׳Dʶ!BY\Qlٝ3v˯mw BaU=cgf}wEMqC ';JyxqDe]-#&EfGE.a^?/<)Rei#S}t2Vms) sfi u(pG1SMȉr;6 s02tp| Ӑ@!nMXcZ*QQxeXp3n xxx[,$nn\B%)L@n,IɶR) `Z3 o쩙كnq_~9%6M"O=Kz_^#:xaF'4[f1h PڊTdN^%DؔػTv&v= I Դ@9,2_mjҞRZ&i!*I!dX*.ѶIV{C-"\DjP 9j 7;-JJ+휔#ti9ѺN>KWFjP.*!R%fEeP«(ge6˨0nM)iu ϐIOgK.&10L?%.\>VFJd*ijRn-rr?) Kh7J 7NIsgW:OÎɟ3OS&;NR./!f8c}S~0|) <>1Ar{>E[}(BJ@uI ZӜ.fC\dljd{,A{&4=AˏP\(E36ʝ)msX.t#jכTMq. .iBs’oDP S5IV}İeFJ VmW76<MfwȿM}43C(:$V>$*A\MJ0IAi1ϨtLiWR2Z|Uk(o< /{IB*0] =skj.Sf(t܃!JrMғPu9_].cѶ{kD~Իi}mS9exxcS){eijN(,,R{Ǵ=7K{*Π{Ks30]RSAk $ǮϿ-+0)j|Z%Uy>&Uw62NfõP[-->Wk.]Os*["Q*{a˳Km;$12ٯw| hfX2?MFq?$q--4Ae4?1H<`pxA;!8HQU~QƭhݦPʼk;<&Q8/4XS fBnz(ļhC('!t>>1{7ZeiӒimxG8c֙bbU]BqhpI"+g3 TI[Fe) nfI]Nu3S:FV'hqjDn]I[TEN\̕&eN P`Gx1am}f'=&f/ʙґ0(5ob OLmU2fUS*flۨIH).䁭tdRMT˩!;BЦ|1U6}/%RTE]'ah)jHH*7&\px65<s);: Lj'@F@yjes>i*T:^mR>13dF8NhzjOtt!M4Px$)7ŦgXlNUyٕA[d\QBaM.͖:wnIC%-~bLg_A+;.3 gE/(1X\qQNW,>'S8En3;UMm>eF5L+F^%}`ءȌxU{-s=&KfaFr]K>m$NEh2 e1."- @&zrxJI˻98Ye`R%Z%8nO(gOQөQ:ȞSJz9v屸b"IH H\k5g۪=M節pʶ~%%aIIWL`yyu9E7d2a ZRR^}ON:҄.]hqJ7da 6C]GQJP쭏qqӄ!\1C&6e+(;0oI7'Bts6ٙIXJ$qk$IKTl /o@Hle+fdT΢ZvQeҖéJD#]ᒘf4씸s:"֋T\' gAB415EƹV8`┫$w1[PiR.+ =(?me]xZt|ϔr']~n}HSX-^hSieKAV_ ęB;nhW)#v~Z{K:Ͷ3jH.,`SL-0n$V1?)5)<[ɺC+بXӧ{#hP4eysIk H:zL'Sla o ٟeԻ6,:8@%": "Eܤ$e)r H˶ij)H$gM'Rox'Kns<]mz.̰X M .z띁 8BVP 2B˜z{٣5M~4%K4Ve(nFkh6CSs %,VPz)DtYL Eˉ^BD*|ꅋE#Fd-{g#ĂE _r)MehE~%&bkEJSdٜ$6%ڨL3.|8qL6'7\ RE|W'!`.mhA;*q\wx 󲅀@N{Kop"ٺwM˲,ē`cM!+57~d&fbe:Q pY6 cIIR621ɕh/"A9^GtcVJ r%iri^J፩(줤.LN1;6\| J~qkqfY]#&Dycfשr3)LBBVmc|6V=zGdĔb8m(H*lkYhnzYM'jhRMF=yiM & J1_g &zNotEf>&:WuxGF7:ox/51(JZE?^k'5eJr s\97L*{g4)Z 9ᾦ;^^_>MvrӀN7Rn63[gL&aV|A@܃d\ʛ^VIgR.Ueײ=)-wBip.Z=dJK,P Aoǜwڍ6>)?Bכlp3eIvi;}hlDA%%m 5ܸB2UXF2XS~;M)+$êSQ6Hq*E\\4pRoh+e%ƜIJбtb:j$(uyf M|G .QN6g>V-V[4&veⰶ R [FvNݐK )[d BDu$*`%ɹ 9EGAdY#+7FS6iYiJnre2Z̄,SS]ze:6ٙ;Zdr)̲5щ!`AGť$,GRu'NPvhџ3^3 ``x8f@3~~0[h.q=8 [(x6OBJluxQ=SKkYq`)ʏ ꮖƯ|cTv $m3Q>!}Zo"p$ŒbeVTG6s$ԓ::gUr5]64YFZ-6˷q ZJt%*;PUm;2lw8^#arlB*{Vʩ5T(ҒnI)@ 8^Ěb ׊ubErFڧJdJ)$9<د[O3fh{S?/$.RBI7:(;Dz] m%[hHJJA[C;NӥID[iRkIq["Iڦ{,v"0⬈Y=HxٶR `ceX3f=Zw}Q㎥LKSO02S8lF+\'͞Ur~볅.p\A."E+lT.[ٕ7iْ^ ƷыϔFLNHYNʳ2y< s6b vIolM:yk%ZIY35ZiY=NnQY[JU)&y8` ՈuqB%kpZmJRIJR%AA ՗ʥkiikiB(D&*S3{y0ozڈE`#:uVw?8Zjr֟:i=ߧ-F}o 8eAKq(|Xt*Hn- 2S-%VViZM¬mpx;)Lh8T JP:(GԹz]V`;*2X(.̻vUCgR:,tVi`ci4aR9{;P@5ٖ=`AN0pH@8k6?tu7#(6!',$eޯ(MR*4dnnqe7+!?(N*RߑENL@E7714 w|d:ˁzJkskۻÜ; e~e,u: Jzr2e[+JX&-=03)˒1rή+m@.g3XyiاPVl('^c=f&$C蘕qi*yfREm%j襺~](VWx6PGok&k"Sd$Ҍi?OX.r}*mcCGdq*7femI^eˋyed2/9jjjTOSUV3;&٤˷0Ă <mqh,Ri̅-(v}UBPtlFi n,Hq]ǴDojeM9efȚUdŷsSyYhskӎ7*Yjwn߁":.)22zʎx-ɺ9TnX8Ʒ,{VQ6c~! S&[JIrEً.L|nu^CEviݒMH6HoJe! :$M~j涹QVu8eeKjeRb9ZYD&'1Èi34$k(U x%aR'P Ӎ/vN[j66$hC7Ҕ%jRPg.?t9z e4  }N7jJ ljxy*aN]q H#"4@hy.ׂ5(ɔw65 ]|a65WXA65`6!A"O:SV(Ժ8I' px&}e]ul.l/J>LL+o8]u pQhKhD j*>f7Ut ѲwG*1}&Lmr KJBN\bG LBXZM <7<:ƈei-É% Z癰Fewmr]rr\-0sƺe>?*o0:yl4uCO"m8)ZPJpXt<<9Ap$JM_\ )IX b3d* N"*d ?.qI SlMIid Ի 7h}1ǺX-ʾN3&71",NL=*0,wDblK4#5&K3v_I )P'geJ F. }no *ZG)NIJi( =l3f.IT,\v] Q" P\܅:i?Pzr&rQTԺBNF(i@JZGk J#"ignWIU][i7훕{"+-ad+Ӳe>:JBbDb:GRHomN52 ,#)YzGye/bjlFTDH} 7VcYKYuI* 4oGj ?*jmޥ˶l?#DTZI-Fˍ]FAqi#'QpӄȡO347HZPBIRP nSll^T*.T{8p5 %d=OV#+)SZQ7+<+lg`۠P:jPJmY 6PZ:5ffCk@zTH>QFP[XZ(Ԩ FL~4EGO9ަhe8Ym-H|k5 Ʒ+51J $ xBdosݿ;m=*X:ׄR)uwhh&/nq)JfCKԲiRSbGSo+)[ݣ7S)-9 euRδ2RwC]l/F.rE/)n%!IZTBHv JK/-7Rm;\6@^a X_ttQZ1ie>iV l=m6`)sJ2RPI! Ŧ*eMٳ72HEخ@)6hFf'2T jAmm{#,5,;4&@*Y%CLl@J<6xFJj^~tXQcֶ56!-8+9*$<<~W(3[Z9w[fs3(Sδ} F5:o80tx9qu0\F֜4լnFk(ב#k.uix ƷdmsͣKo Lk/ PF"3F4YXd 1u\s. 2FHAq4 |P\Z#@_q8 |C﵊¤]i2uT( jMe9QmD\\e| Q !nD^?ӟbNY.=g!6)UiExuhZPxᾀ󰂓*ᕔ;Hl8ڑ)$gc-=hsTj)(2qh1ww^4drbXbLCGqC oi!;x\b . 1ADxpIAq p6^fodgifTE\teNRlQӜf;{ggP *_.@@ulZajdԩ@f@<:uYA;4OA?Gf}G7%E 94 Ɨ R9NM\BR3Jlw̌ PgM%uZޖ+^\N>teU8Ka${ qՠ*ʤ͜*J͒b Q AF4poA4SB rIqQo1-33(* ҀA## <)ʋlMK\]6ԅ48)XߡԷn:OQɨ 3IuyRPRP-Ƶ$)›7z\o9`V7mE8G Hh}=V~XԻHb]f%g{fM&3w:x uWYYt,Ti4zͳ.ybe`gD{Z%DˮEk8Y- 98"RI2Se#֣ J}Fqg~%E)yӯgޞe[Yw]ؙfe<ÈuhV 1&(Өg}× UCǜXdgڨI54-ۀb 8AԼ=SI-1ƋLPb Ar1A.Q}DxlbG~^5䘯\^xu\tE/4%4 bb. ..o/ WK&i;Tp26Srr9VceXhaIQ!X{;_RZ,|_MQ=IZËT+X+GW6+ ZJT ‡+ / n\15V-P8,*\(|*yZj/vQ]R#>B\}a"(?~1ʠRBSRt01%EDۼ^(,9_cUq%+{^ \ix/k,^ ix/ s|Pb4ɹ. Qr.o Ɨ8/ X]𸹾/VX^7,Kx\\Ϝix/ 1..o}  .8^7W/ b񻦵kyćRNV"2#3X=;5M9˳jSIKKw5ॲXpףKȴiUz^OV)iƚ _k:ǝVvơS p!f' @{/y =ԐB2X 7Qޗ:%V@+q -!?8lӒ~\SRؑvωO|ThZqgJqG̛+BjBeɪlİy6{6VweKr(ѩ.Ћ^q˶FhxgԝݡIiڵ9V [ n8"іvY7imHSDMΜox;L8ڀ7TK8ya-?3-XT*cԐl[ g{~:G$ǴWf}ռ[U J$Sa1JvVG%q%*N5Zm}bYyii6r2!8j3XǑCxb^ѥ*nox,;x\\`.1..o^\\^" L .ys  xF @ A@ 9 `#0Ab   @A@AB  AB  ̕նaД!:%"xFATٕ_m a@ @A@AAcontext-2013.05.28.20130704/texmf-dist/tex/context/sample/thuan.tex0000644000175000017500000000106110361565011024075 0ustar norbertnorbertHad our solar system included two suns, the problem would have involved three bodies (the two suns and each planet), and chaos would have been immediately obvious. Planets would have had erratic and unpredictable orbits, and creatures living on one of these planets would never have been able to percieve the slightest harmony. Nor would it have occurred to them that the universe might be ruled by laws and that it is up to man's intellect to discover them. Besides, it is not at all obvious that life and conscience could even emerge in such a chaotic system.context-2013.05.28.20130704/texmf-dist/tex/context/sample/hawking.tex0000644000175000017500000000066710361565011024421 0ustar norbertnorbertIf [in 2600] you stacked all the new books being published next to each other, you would have to move at ninety miles an hour just to keep up with the end of the line. Of course, by 2600 new artistic and scientific work will come in electronic forms, rather than as physical books and paper. Nevertheless, if the exponential growth continued, there would be ten papers a second in my kind of theoretical physics, and no time to read them. context-2013.05.28.20130704/texmf-dist/tex/context/sample/ward.tex0000644000175000017500000000045611024176655023733 0ustar norbertnorbertThe Earth, as a habitat for animal life, is in old age and has a fatal illness. Several, in fact. It would be happening whether humans had ever evolved or not. But our presence is like the effect of an old|-|age patient who smokes many packs of cigarettes per day |=| and we humans are the cigarettes. context-2013.05.28.20130704/texmf-dist/tex/context/sample/reich.tex0000644000175000017500000000046210361565011024054 0ustar norbertnorbert\quotation {Heavy smoke} \quotation {Stand by, stand by} \quotation {It's full a' smoke} \quotation {Full a' smoke} \quotation {Urgent} \quotation {Guns, knives or weapons on ya?} \quotation {Wha' were ya doin'?} \quotation {Be careful} \quotation {Where you go} \quotation {Careful} \quotation {Stand by} context-2013.05.28.20130704/texmf-dist/tex/context/patterns/0000755000175000017500000000000012162140024022607 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hu.rme0000644000175000017500000000403011761001300024641 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Hungarian hyphenation patterns (v20110815) (more info about the licence to be added later) % from https://github.com/nagybence/huhyphn/ % ------------------------------------------ % Huhyphn - hungarian hyphenation patterns v20110815 % % ***** BEGIN LICENSE BLOCK ***** % Version: MPL 1.1/GPL 2.0/LGPL 2.1 % % The contents of this file are subject to the Mozilla Public License Version % 1.1 (the "License"); you may not use this file except in compliance with % the License. You may obtain a copy of the License at % http://www.mozilla.org/MPL/ % % Software distributed under the License is distributed on an "AS IS" basis, % WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License % for the specific language governing rights and limitations under the % License. % % The Original Code is the Huhyphn - hungarian hyphenation patterns. % % The Initial Developer of the Original Code is % Bence Nagy. % Portions created by the Initial Developer are Copyright (C) 2003 % the Initial Developer. All Rights Reserved. % % Contributor(s): % Bence Nagy % % Alternatively, the contents of this file may be used under the terms of % either the GNU General Public License Version 2 or later (the "GPL"), or % the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), % in which case the provisions of the GPL or the LGPL are applicable instead % of those above. If you wish to allow use of your version of this file only % under the terms of either the GPL or the LGPL, and not to allow others to % use your version of this file under the terms of the MPL, indicate your % decision by deleting the provisions above and replace them with the notice % and other provisions required by the GPL or the LGPL. If you do not delete % the provisions above, a recipient may use your version of this file under % the terms of any one of the MPL, the GPL or the LGPL. % % ***** END LICENSE BLOCK ***** % % Encoding: UTF8 % \message{Huhyphn - hungarian hyphenation patterns v20110815} context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-mn.hyp0000644000175000017500000000017111761001300024656 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-mn.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ca.rme0000644000175000017500000001266511761001300024625 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Catalan hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: cahyph.tex (2003-09-08) % Author: Gonçal Badenes % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % Hyphenation patterns for Catalan. % This is version 1.11 % Compiled by Gonçal Badenes and Francina Turon, % December 1991-January 1995. % % Copyright (C) 1991-2003 Gonçal Badenes % % ----------------------------------------------------------------- % IMPORTANT NOTICE: % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % ----------------------------------------------------------------- % %%% ==================================================================== %%% @TeX-hyphen-file{ %%% author = "Gonçal Badenes", %%% version = "1.11", %%% date = "15 July 2003", %%% time = "15:08:12 CET", %%% filename = "cahyph.tex", %%% email = "g.badenes@ieee.org", %%% codetable = "UTF-8", %%% keywords = "TeX, hyphen, catalan", %%% supported = "yes", %%% abstract = "Catalan hyphenation patterns", %%% docstring = "This file contains the hyphenation patterns %%% for the catalan language", %%% } %%% ==================================================================== % % NOTICE: Version 1.11 is identical to version 1.10 (issued on January 17, % 1995) except for the updated copyright notice above. % % The macros used were created for ghyph31.tex by Bernd Raichle (see the % German hyphenation pattern files for further details) % % This patterns have been created using standard, conservative % hyphenation rules for catalan. The results have refined running them % through patgen. In that way, the number of hits has been increased. % % These rules produce no wrong patterns (Results checked against the % ``Diccionari Ortogr\`afic i de Pron\'uncia'', Enciclop\`edia % Catalana. The percentage of valid hyphen misses is lower than 1% % % Some of the patterns below represent combinations that never % happen in Catalan. We have tried to keep them to a minimum. % % *** IMPORTANT *** % \lefthyphenmin and \righthyphenmin should be set to 2 and 2 % respectively. If you set them below these values incorrect breaks % will happen (specially at the beginning of foreign words and words % which begin with some prefixes). % *** IMPORTANT *** % % Please report any problem you might have to the authors!!! % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \message{Catalan Hyphenation Patterns `cahyphen' Version 1.11 <2003/07/15>} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pt.rme0000644000175000017500000000765511761001300024670 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Portuguese hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: pthyph.tex (1994-10-13 - date on CTAN) or (1996-07-21 - date in file) - no idea % Author: Pedro J. de Rezende , J.Joao Dias Almeida % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % The Portuguese TeX hyphenation table. % (C) 1996 by Pedro J. de Rezende (rezende@dcc.unicamp.br) % and J.Joao Dias Almeida (jj@di.uminho.pt) % Version: 1.2 Release date: 21/07/96 % % (C) 1994 by Pedro J. de Rezende (rezende@dcc.unicamp.br) % Version: 1.1 Release date: 04/12/94 % % (C) 1987 by Pedro J. de Rezende % Version: 1.0 Release date: 02/13/87 % % ----------------------------------------------------------------- % IMPORTANT NOTICE: % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % ----------------------------------------------------------------- % Remember! If you *must* change it, then call the resulting file % something else and attach your name to your *documented* changes. % ====================================================================== % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tr.hyp0000644000175000017500000000017111761001300024671 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-tr.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-it.hyp0000644000175000017500000000017111761001300024660 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-it.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lv.pat0000644000175000017500000024505511761001300024665 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-lv.rme % used: a b c d e f g h i j k l m n o p r s t u v z ā č ē ģ ī ķ ļ ņ š ū ž \patterns{ d4z d4ž a2i a2u i2e e2i u2i i2u o2i o2u e2u .vi1s2a. .vi1s2ā. .vi1s2i. .vi1s2os. .vi1s2u. .vi1s2iem. o1pī ū1rē i1ta ū1ga ē1žu ū1to ā1ni i1rē i1čo ā1bu o1mī o1kā o1či ā1lo e1čū o1ļā e1la i1šo o1bi ē1cē ā1ru o1si u1no e1hā ā1nē e1bū i1ru o1sū a1ča ā1ča o1rē i1ke o1ra u1te i1zo i1gi ē1ma ū1ķe ū1ca o1dē a1nā ā1ge e1či ū1bē ē1tā ā1fi i1zi o1lī e1še e1gā i1fo a1ņo u1to ī1zē ū1gu ā1ša i1ķi ū1nē ī1ma ā1te ē1kē ū1mā u1zu o1sā ē1bu ī1ga e1di ī1te a1ļī e1tē i1že o1fo ā1pu o1hu ē1do o1du ā1ma ū1mi e1re i1ha i1be e1lu ā1ja ū1ta a1šū a1da ē1cī i1bu a1pī u1ņā e1zu ū1no e1nī i1no e1mā ē1ļa ū1pā ā1be ā1mo ī1ja e1ji ī1re e1ce ī1ri ī1tī ū1ni ī1žī i1ži a1fī a1be e1šā e1ķo e1pū e1ļī u1ģi ē1tī a1ci e1jē a1zī o1lē u1ga ī1ci a1ke e1ho i1nū ū1šī e1si e1bo o1ģē u1ņi u1sē ē1bā o1ša ū1ro ē1ce i1zī i1ve o1ļu i1dī o1ku e1vē a1ri u1sā i1pā i1dē o1pū ī1vī a1me ē1ze ī1bē u1ķe a1bē a1ja ā1ļo a1jē e1fe o1pu o1to ē1vē a1ki o1mā o1lo a1lo ē1ķi e1šē ū1dī ū1cā o1zo o1gū o1gā ī1tē e1zē ī1le e1gī ī1na o1me e1po e1fu a1ģe u1rū u1ri ū1jo e1dē a1ļa a1žā ī1ļa ē1ne a1zū ā1vē e1so o1mi o1šo ē1sī ē1ļu e1ga i1pē e1vu o1ru ē1ju u1či ā1va a1hu ī1sē e1ķa i1rā a1čā ī1ki i1ti u1cu i1žu ā1jo u1ki u1mu o1ķī e1ma ī1ļo ē1de o1čo ā1ču i1ņa u1ļa u1mā o1he i1lī a1de o1fa ē1ro o1sī ā1ri ū1ti o1bē a1jā ū1zu ā1vī e1ļe o1ņa ī1de ī1še a1kū ū1ja o1dī e1ži e1ri ī1gā e1ki u1ze u1ma i1vī ē1pī u1lu e1ti o1čā a1ķi ū1zē a1ļo i1či o1ke a1ģu i1vē u1ču u1ca u1vu o1ļa i1ri o1ņo u1co a1rā o1jā ī1bi e1čī ē1rē e1kā i1pi a1ka ā1vu ū1ža e1mī e1vī o1gi a1pē ū1zā i1cē e1va o1nī ī1ru e1pā a1ce ē1kā o1ja a1hē a1bo ū1mu ī1ve i1nā i1fi o1va u1žu e1ģi ē1nī i1li i1ņo u1la ī1ģe e1ca a1tā ū1zi a1bū ē1pē ī1su ī1pā ī1zu ū1di e1lo ā1mā e1ci a1ža ē1to e1rū ā1la u1ķu o1ģī ā1pa e1lū e1sī e1bē i1co i1ķē a1šo ū1ku u1šā o1di a1ņa ī1pa o1pi a1žē a1si a1ha u1šo ē1mā ī1mo ā1žo ū1lu e1žū o1ķi ā1vā a1žo i1zā a1ku o1zi o1dā e1cu ī1no e1zi e1jū ā1ņo i1ce ū1lē a1žī o1mē i1bī o1re e1zū ū1ra a1gi i1lē ī1bā ū1šu e1bi i1gū ū1ķi ē1va ā1to u1ce a1pū ā1gi i1ķe ā1kā e1ķī ē1ža u1ve u1vo ē1no o1bu a1tī e1fi e1ļo ū1ži a1tū ī1ti ī1la i1ho ē1gi i1fū a1tē ā1ķi a1mi e1ra u1ja e1me ī1bu i1pu o1la a1ķī u1šu o1ža a1rū ū1ļa e1ču ī1lo o1nu ā1jē a1dā u1rē u1rī ē1žo i1mā a1zo o1žu ē1da ī1co ū1zī ā1sa ē1šu ū1po i1si u1zē ū1ri u1zī ū1gā e1pu ā1du e1cē ē1ji i1bi ē1rā i1ļi u1nu i1ki a1mū ī1ni ā1fe ē1ca ā1ņi u1go a1nu e1nē u1ku ā1ži ē1go e1če ē1za ā1čā i1ģe ī1go a1go e1bī i1ze e1šū o1kē o1pē i1na ā1ra ā1jī o1za e1zā a1lā e1ņē a1je ē1si ā1bo u1gā i1sē u1ši u1bī a1vā e1ko ā1šu ā1ģē i1mo e1ļā i1tē u1ļā a1ņē u1na ī1vo ū1me a1hī ū1ka ā1mī ā1lī ū1tu e1je ī1vā a1ba ī1dā ū1ko ū1cē ā1nī a1ļē u1ju ā1žā ū1mo i1ge ā1pā e1lā i1ķī a1sē e1ni a1ma a1tu i1kū a1bi i1jī ī1ķu e1fā u1ta ē1dē a1gā i1lā i1ņi e1ļa ē1ti ā1bi a1ši a1lī i1ja e1mu o1hē u1jā ū1ša i1sā u1po ā1cā a1se o1ņe u1fo ā1sū ā1bū o1co o1ķē ā1ļa e1že u1tī ī1ku u1ķa u1zi e1do i1so o1fi ē1sā i1pī ī1ši a1dī ā1ti u1ņo u1pa o1ka o1cī i1pe ī1mā ā1pē ā1pī ū1pē o1bū e1ķē a1mē ā1rū o1de i1ķa o1šī ī1gu u1bi ā1ka ā1nu u1ži u1so ē1ka ā1le ē1pe u1ļī ī1me u1dī i1žā i1du ē1ra o1vo o1fā o1so ā1ļā e1dā ā1gu o1bo e1hī ā1ģi ā1čo a1dē u1di ī1se ē1sē ā1nā a1nī ū1rā o1hi o1šā i1lū ē1lē i1te u1še ī1tu u1ģo e1ši ū1ba e1ņa u1si ē1zo ū1kā i1gu ū1da i1sū o1bī a1mo ē1gā ā1ve u1bē e1ņo ē1vo ī1mī u1ļu ā1tu i1cī u1fa ā1tā ē1gu o1ga i1mi i1fē i1ļe ā1co u1žī i1zē i1vu a1ju i1ca ī1ču ū1re ē1bi e1ro i1fā a1he u1mo i1jo e1bu ī1ro a1te ī1ģi ā1di i1bū u1ļi u1le a1na e1tā e1bā o1tū ū1ze ā1fu ī1be a1pā u1de i1dū e1ve ī1di a1vo u1lā e1pi u1dē ē1dā o1jo i1žo ī1ķe o1nā e1mū ā1zā a1ro ī1rā a1že u1je a1ti ū1cī i1tī ī1vi ī1jo e1co i1tū i1bo ū1pe e1tū o1pā ē1se a1ļā ā1ji a1čo e1za ā1mē a1žū e1šo ī1ļu ū1jā o1su e1ja o1ta e1lī o1ze ī1vē o1vā a1vī i1kī ā1zī u1ha ī1pē i1de o1nē ū1bī ē1tu a1ži ā1žu o1ņā o1ļo i1ņē u1ci ī1ca ū1sa e1rī i1bē e1ne a1šī u1gi ī1mu a1zā i1lo ī1cē u1lī e1čo a1bu i1nī ā1dā ā1tē ā1ko ī1šu o1ģi a1ta i1la a1va a1še a1hi a1ca e1be e1žē a1su ī1dī o1da e1ģo e1ņu e1pa ī1jā e1sā a1ņi ū1so ī1nu i1vo ū1lo ī1nē ē1mī ū1cu o1žē ē1jā ī1cā a1ču o1zū a1lu ā1lu o1ņu a1vu i1tu i1ķu i1ķo i1ko a1fa ī1pi i1go i1me a1fi e1sū ī1ju o1pe a1sī a1nē ū1že ē1ve i1po o1zē a1ne e1sa a1lē ē1ša ū1gi ē1lā i1mū u1vā ū1mī ū1mē u1ro ā1po o1ju i1fu i1jē i1ga ū1tā ē1lu ū1sā a1gū ā1bā a1la o1ri ē1šo ū1ņa o1fē e1li ē1ko u1va ī1šo a1zi e1dī i1da i1šī i1hī i1ne i1šu ē1ku e1ņā o1na ī1ža o1ča ā1fa o1tē ī1dē o1tā i1hi ē1mu ī1so e1cā ā1zi ī1cī u1šē o1no ā1ņe u1bu ū1gē o1ve a1ģī i1lu i1pa e1ka ā1ci u1ķī o1sa o1go i1nu ī1žo i1sī o1fī a1pu a1du ī1ļi o1ba i1fa e1mi o1cu u1ža ā1mi a1ķā i1ču o1žū ī1kā ā1ķe u1ģē e1da ē1dī ī1čo ū1pa ā1de o1ma i1dā ē1ņo ū1žu o1ko a1vē ā1zē ā1sā ī1do u1cā ī1ļā u1du e1ju ā1si o1vē i1ša u1fe o1ji ē1re ū1ļī u1ņa ā1ca a1šu ū1nu ū1le e1ķi ā1tī o1ge i1vā ū1za ē1nā ū1ma ā1ķu e1lē ā1sē ā1li ī1ne i1mī ā1pi a1mā a1žu i1ju ē1vu u1nā ū1ru e1vi a1pa i1bā o1cē ā1lē e1ku u1lē i1se e1vā ē1jē e1pī ē1ci o1ši a1hā a1kā u1ji ū1rī ī1sā i1ro o1rā ū1ki o1ro e1ru o1kū ē1su a1ņā ū1tī ā1ba e1ņe e1nu ē1te ā1vo a1sa e1nū ū1žī o1že ū1do ē1jī ī1vu o1vi u1ba ā1na ī1mē a1ji u1ti e1mo a1ra e1hi o1te u1bo e1su i1fī ē1pi i1ģi ī1ņu ū1lī ā1ro o1zā a1vi o1ni ī1za o1do ī1zā o1gē u1zū u1li u1da a1či e1ta i1ra ā1ķa a1jū ī1ba a1cē u1ra i1kā i1zu ē1nu a1šā e1to u1gē ū1pī a1ho ā1je ī1ķa a1ve o1šu u1čo ī1mi u1sī a1dū e1cū ī1rī u1ko ā1ķī ā1zu ā1mu ī1sa ā1ņu u1ka i1ba ū1vi ē1ga ē1ģe a1rī u1ša u1cī a1co ī1cu o1vu i1je u1do o1cā ā1vi i1jā a1ze a1mu o1ņi e1ža o1čī i1ča i1mē ā1cī ē1la e1dū ū1nī ī1po ē1ļi ī1nā ū1be u1se ū1ci ī1ņā ī1ke ā1cē ē1sa ē1li a1ģā u1pe ā1ku a1bī u1pu o1ca u1ne ī1ļī u1mi e1du i1ļu u1pā ī1ņa ī1pu u1be o1ču o1šē ū1šo ē1me a1ķa u1zo ē1zā ū1ce e1tī o1ķu ē1jo u1tū ā1cu i1vi e1žā a1jo e1jo ū1bi u1nī ā1ļu e1zo i1ma u1vē o1jū o1ha ū1pu e1ša a1ru a1li u1mī ū1ve ā1pe i1cu ū1nā ī1sī e1pe ī1zī i1rī ī1pe o1po ā1rē a1ņe ī1gi e1žī ī1lu i1su ī1tā a1no ī1ži a1sū a1ko i1žē u1jo i1va ī1ji a1fe o1pa e1rē e1šī ē1cu i1šā ū1žā e1ģe ē1cā a1po i1tā ā1ne ī1va e1se ī1ra o1gu ū1de u1dā i1di u1rā ē1nē a1to e1fī a1so e1ze ē1le o1mu ī1ta e1ļu a1zē ē1ķē o1ģe e1na ū1vē ē1du u1žo i1nē ī1si i1ka ī1fe e1no i1le e1pē e1ģē ā1go i1ni e1ča a1čī ē1be a1ša e1gi i1mu ē1bē a1čū ī1šā a1bā ī1du o1ci ē1bo ā1ki o1mo ē1lo o1lā o1le a1gī u1kā ē1vi ī1lē u1čē ē1mo a1cī u1ča ī1to a1fē u1ķi e1fa ī1ša o1bā a1ļi ī1da a1mī i1gā a1ģē e1cī ā1ta i1re ā1me ū1dē a1re ī1li a1ga o1tu u1pī e1ha ā1ķē e1tu i1ģē e1kē ā1bē o1čū a1zu ū1sē ū1ne ā1ga ū1vo o1ho ē1ļā o1rī ū1ju o1fu ū1ji o1lū ā1do i1to u1bā u1ge u1cē a1le u1ķē ī1ce a1ķu ā1ze e1šu ē1ja a1vū i1ņā ē1na o1ne ā1dē ā1ģa u1su u1sa ē1di ū1su e1fo ē1ni ī1pī i1ku ē1pa ē1po ī1zi i1ļa i1ši ē1lī ā1no a1jī ā1gā o1zī ā1dī o1ļi ā1rā ē1zi ū1pi ē1ge o1mū i1kē e1gū u1gu i1zū a1gu a1lū i1cā ū1lā o1ķe o1se ē1vā ē1ru a1fo e1sē ā1re ā1lā e1ļi a1ņu e1jā ā1ža ē1zu e1ņi u1pi ē1mē o1ņē o1ti u1pē e1zī u1fi e1ķe ā1jā u1vī ī1ņi u1žā ū1li e1de o1be ē1zī e1hu e1he ī1lā u1tē e1nā a1sā ā1se ē1ļo a1ģi ī1ze o1je ū1te e1kū o1li ā1ce o1vī i1ci ā1so e1ge i1še a1ni i1do ā1lū o1žā o1še o1zu a1cu e1mē e1gu ē1ta a1do e1ba ē1ģi e1žo ā1gū a1za ū1la ū1ķī a1pi ī1nī ū1šā i1šē o1ļe ē1mi u1zā i1ķā ī1ko o1dū ī1ķi a1ķē ā1su ī1lī e1čā ē1ļe u1za o1ži o1fe ū1tē o1ki ā1za e1le ē1bī a1di o1sē ī1žu ī1bo u1me a1rē i1ļo ū1si ā1sī u1ni ī1ka ā1ļi o1tī ā1šo u1tu e1žu i1ža o1lu ē1rī ā1ju u1šī a1ķe ē1so ā1da ē1ba ē1ri o1ce ē1ki i1ļā a1pe o1šū u1ļo ī1zo ē1rū e1go e1te i1za e1vo u1vi i1fe i1ņu ā1zo ē1zē o1jē u1re ā1ņa ē1pā o1žo u1nē u1ņu ū1du a1ļu u1mē ē1pu u1lo i1ji ā1rī ī1rē e1rā u1ru a1cā o1rū ū1na u1ģe ū1dā u1tā i1sa at1tu eg1rū ak1so it1de eb1lā et1vī or1bi al1ša ap1dū ak1na um1ci aš1le ēr1ķe en1ku il1ki ēr1ku at1nā at1ģē us1pē os1vī os1ci an1ra en1pa ej1dē až1vī as1bu īs1ga iņ1di en1to uj1me or1ki el1zo ot1nē es1ko uz1gu ak1ti īr1ni iz1hi il1pu es1ma āt1vi ag1rē on1zē īb1tu ap1do īt1vī ul1sā īk1lī ur1so ok1tē ēb1tu īs1la et1ve al1mo op1ša en1ce im1nī uš1ķa ek1ti iz1cī er1di ur1fa an1tā er1ba as1pe al1su ip1so al1cī at1de aņ1ra ēk1šu īg1li om1ni oņ1ka as1le at1ņi id1rī un1ve al1kū in1da ār1ba īs1žu al1ka up1jī ur1gu at1sī īg1mā āl1ti al1va uļ1ku ok1rē er1gi uz1ļo ak1šē īm1re iz1te āt1vē ēg1ni īg1ru il1cē ir1mu ar1ku ot1zi ub1na an1če om1bī ēg1si el1le av1ru il1nu ēs1te ur1kā ik1ro ep1nu ur1vē oņ1lu it1ma il1ja ēj1tē an1ga eš1pa āl1ce ob1rī ur1vi up1ri ēz1tā iz1čo ap1ša uz1ru ut1rē ar1to ež1nī aš1ļu aļ1ce al1ne is1sī ib1šo uz1nu ut1ņu ul1de ār1ho am1pū ēl1gu um1vi ik1to ēr1ze ož1va ez1nī am1lī ak1se el1ko ep1si āj1tu um1zā at1ja al1ķī az1dā or1to ec1he at1cī en1ko ūs1ki īg1sa ef1ri ār1sa im1po īt1rī ed1vi id1sē ā1džā up1la ēc1te es1pu uk1šo āp1ni ā1dži ak1la en1na as1ka ām1di ag1li og1rā ag1dā oz1vi an1ku īk1nē us1mū er1ma āb1ša in1tu ob1ti ap1cu es1vā ac1ti ur1pu ar1kī el1la it1ta am1le ik1se ēk1ti ar1sa is1mu ut1ķe ār1vī u1dži et1nā id1ka āl1se ur1na ār1zo uz1li ān1ka as1ve ab1la aņ1ķe ēb1tā el1vā al1žu at1pū at1go ēr1la e1dzi iz1dē ab1se at1žē ir1ca ēr1su uļ1ma el1pe ej1ve ap1ve īg1rā el1po ed1lo it1mo ep1nā uk1tu at1šo ap1šā ār1čo ak1sē ek1tē om1pe ul1go um1dī ec1si ēd1vi um1mā iz1mo ok1zā āp1ro āl1ko āl1vē ed1po īl1zi of1rē ēj1lo ap1sū ip1šo is1pu in1fe ep1ra at1ša or1ga on1gā ak1šu at1jo es1pa uz1ša ār1su uz1be ik1sī en1ša ok1te ok1bu ur1ša or1ģe īn1ta ap1ģi iz1zu im1tī ap1te on1nā us1jū ur1no ab1ti en1jū op1so eņ1no ur1ka an1šo ol1le ūs1mo ās1tā ek1tī uz1sī iš1ķā um1pā is1po ob1lē ap1za ek1do ez1mē ēd1la uš1ka of1ri en1hī āf1ri uk1nu iz1do ej1ga ul1ri iz1fi ir1na is1ka ār1do en1šo ož1ma ēs1tī at1sā um1la oš1pa eb1to ez1ņi ej1ka iv1žu uņ1ģu ik1na il1ko ol1mu im1si ap1ta os1tu us1tī at1ko ar1ci iļ1do un1či oš1si en1zā ir1zo i1džā uz1ba er1vē ip1ni il1zu in1pū or1hi iv1de os1mē uz1pū ām1pi os1tū az1bē al1de on1de uz1ce em1ba ēr1ļu at1nē ār1tū ur1cu ir1ku āv1da īp1ri op1rā ej1ni am1dī ak1va ek1pi up1ve ūt1ma un1tā aš1ma āv1ja um1ti ūz1mā im1te ev1rē on1ti ig1za iz1gū up1rā id1pū ār1cī ār1lī el1lē us1ga ez1da ap1cē ej1la ag1da uz1va op1sē āģ1ve el1to ēz1kū eš1vi uz1vī ī1dze is1mē ef1rī ab1ša up1ma ār1nī aš1va ab1ri ob1tā ik1sā is1mī ag1ša ūr1ka āņ1mu ev1ni or1da em1ze āj1lo at1rū al1re il1cī ār1mi et1ma um1da ob1le āp1tu el1pā iz1ķe ez1tu al1tī ap1rū iz1ta em1ža ar1gi ēv1re as1kā až1kā eg1ta al1gā ap1le ap1ro īv1ni op1ka ik1vi il1tī ur1pī ir1kī iņ1ne iz1da op1re ēl1ni is1nu ar1cē ed1sē ul1ka ās1ma op1ba os1fē ak1le eļ1mū ēb1šu aš1ra uļ1pu oķ1vā ār1šo am1di ār1žu ed1pu ed1ve en1re ūk1li uš1pi ep1ta al1ve ad1ma ez1ce ēg1tā ud1rī im1bi ek1ra iv1jū ez1bi iz1me uļ1tī if1rē ap1ku id1ni og1rē ēj1de op1ko iz1tī un1ci īt1ka ēj1nī ēr1pē oš1ļa at1zu īv1ga os1na og1ga es1lu āt1ko az1va em1zi as1ke an1si iz1mi er1vā ep1sē al1sā us1cū ul1sa en1ta or1vē ek1tā uz1žo an1ma i1dzī ij1ku id1la ēp1ta ēļ1ko ur1ti ap1nī ot1re eš1ņu un1de ār1vē uz1ģī er1mū o1džu oš1ni ij1kā al1lo ig1lo er1rī em1pu ug1ļo ūš1do ip1ša ūs1tā oš1ba al1lē eš1da uļ1ļā ār1sū in1de em1to ās1tu ol1fi or1mā iv1pu aš1la ec1ho ār1za ar1ka ub1sī ap1zi ēp1to āk1tu er1te ur1zu īm1ka on1ju ap1go us1lo or1na og1no am1dā ār1ta ēl1ne er1cā im1na uz1zā ār1no aj1ci ip1tā it1ļu ag1ri ār1bū os1po ēņ1da an1kū om1bē ār1ve aļ1ģe im1ti al1ti īņ1ni in1na ep1la uz1di iž1me al1tē in1si ed1ma or1tu em1ta ug1si er1be us1ra il1mu ār1ga eb1lo īr1rū īt1re al1la et1vi el1di ār1ži iz1ca ad1da ēn1mī ut1sa ol1po ez1ra ir1šā eg1šo ud1pu ud1lē uk1sē on1vu em1pā ēk1bē ār1dē en1zū āj1re at1lo ez1ni et1ka iv1ji in1ku or1bī ok1ti al1si ur1zī ūn1ga ēr1pa am1bi at1ro ēr1bu iz1ķē ip1sē uz1či ir1du uh1tā er1bā ik1ga īš1ķi iz1rū it1da ok1ņu ēg1ta ir1lo an1ka in1dī es1vī op1ma um1sī on1pa em1pī ūk1ko el1tī uz1me er1vī ūz1na eg1ru it1ga us1du īt1ņu ep1lā ur1va um1zī īd1lī o1dži ār1bu ak1tā er1ta ēr1no ēr1pā um1bi en1ca oņ1cū ēj1mu at1pī ēr1gā ip1re ār1vi aļ1ķo et1ni ir1gū āp1ne ir1su āt1me eb1tu in1cē aš1ķe ip1ro om1da ep1tī ef1ra ū1dza ēt1ku ub1li az1be ūs1ka us1pa ar1su uf1li ūr1vī īs1za af1rē uz1ņa e1dža iz1bē ūt1di en1nī eļ1ķē es1ku az1da īg1ra iz1gā ar1ķī er1šu ud1ka ed1ri op1ra ap1li ap1dī ed1la an1rī en1tī āb1šo an1cū ēj1da es1tī er1ko ūg1ta el1zu in1ne er1bi ig1me ež1ni ad1mi aj1ni el1li ik1šu āl1pu ar1ga et1ta īc1še uz1zu om1bū un1ku īb1ni ar1ža ēt1ni is1tu un1ze aš1di it1ni en1zē en1ģe er1pe uz1zū ul1si ur1ca ap1fa is1no iz1ķī us1vi in1ho og1ļu ūs1nu er1ga ir1ze ēl1re ēs1li em1ma if1ra at1mē ur1rā at1ho ob1ju op1ro ip1li ec1mā er1mī ak1mu es1sa īk1lo u1džē ur1fi id1ko ār1ņu uņ1ģa īk1li iņ1ķe as1kē il1de ār1kū ul1bo ez1no en1mē ab1ro uz1gū ek1ņu ož1ņā at1ku uk1sa uk1lo ar1do ak1tu ār1du ik1ci al1du en1pe al1vī un1ti ul1le os1cē ec1sa īk1ti ār1dā ēb1ju ap1ču ub1rā iv1pa os1ma oš1ķe aš1pu um1pē ēp1tā ek1si īk1ļu uļ1ķī ūš1ka al1pe īg1nā uz1pā āt1rā īg1nu ik1lu āb1tā um1ji ab1so og1le ir1te īb1tā il1do em1zē ar1ģe ot1ve ap1gū id1vā ār1de āt1ne ēt1sa ad1do en1ja er1na ēk1li iļ1ņa uš1ki iz1nē oz1va ez1go us1bā ut1ri ur1lu ib1re ej1te ok1ho en1zu eb1rā em1tā ed1mā ah1ti em1ti um1sā az1tu ur1sī in1go ār1di ap1ņo īs1cī al1bi as1ni ek1se al1li uk1na al1nē iz1mē er1ce ūs1mu al1tā ul1fā ēk1lo az1ga er1zā ir1gu ig1rī en1dē eč1tu ep1ļa ēk1ta uz1dē ur1su īc1ku it1bi āk1kā āp1tā eļ1ce ed1rā ib1rā er1mi āb1rī iļ1ķi or1mē em1pi os1vā as1zo af1rā ež1pā ūs1nē ān1ve eļ1ķi oš1ga il1žu en1va īt1ra ak1ri up1tu ad1ka eļ1zī ir1nē ec1ve or1mu iz1mī īš1ļa ab1ve er1ri ū1dze ūz1ni in1ka īķ1sa ud1pe us1mē iz1rī on1rā aņ1kā at1ze āl1re em1ja im1sē īk1lu ek1va at1bī is1lā os1pī ār1jā as1mā ol1nī īg1ti em1po īg1tā ed1va ar1da or1po us1ni al1lā os1ti eg1da uz1bā ūt1rī ag1ni iņ1dē iz1zo is1me at1bi az1ti og1ra en1la at1do ap1zī am1ga us1ti oš1ķi is1tā at1la ēj1ti e1džā ec1ka or1ķo iz1pū uļ1zi er1de uk1ļu eh1ni ēg1to ēl1si ēc1nā ap1pā āl1no ar1hā at1gu ob1ļa ap1bo uļ1ķi uk1lē es1bi ar1žo iv1co el1mi ēr1ci ik1mē ap1da uz1ķī im1pu īk1la ag1ru iz1dī er1ņa at1ņu or1pi ēp1ni ūt1ņu eš1ta ar1ta un1ga oš1ļi eņ1ģi an1tē at1si or1te iz1rā ol1vi iv1cī aš1ko ām1ri āz1tu ek1sī ūk1tu ēk1ļu ir1sā el1ku ek1su aš1ļi iļ1ņu iz1si ir1gi at1ha ar1tu em1bu āt1sa ek1ļū en1tā iz1šu as1po ir1ta ab1re it1le ūk1pi uņ1ne aš1vi ām1pa ār1sē ok1si og1pa ut1rī in1ji ig1no iž1ļa ēb1ni uk1ma ēp1šu ol1vē ēz1ta am1kā ed1fo āp1ra ir1ce ul1li as1no ēt1ra on1ta ur1ņi ur1bi iz1cē us1ki eb1ša ož1me an1gī āv1ji ip1si ur1nē ak1ša eņ1ku ab1li il1vī is1kē om1pā ir1mī ip1lī ēn1mā ēr1šā āk1da el1nā ul1pe iš1ļo ēj1pu āl1lī ud1ko er1vi ak1tē īs1ka ag1tā ī1dzī at1vu ar1mē ar1sē eb1lē od1kā ūr1vi ot1ņu en1da az1du āt1nā oņ1me āl1ba eb1šo uz1mā an1zī ag1lī ot1bu il1po ēr1ķa ur1cā ej1bo az1ze iz1žo op1ļā īg1šu ēs1lu at1mā eg1lo īt1ri ir1tu ek1sā ik1ta eg1lu ur1vā un1bē uz1mū ež1zi eg1tā or1ma ob1ga av1ko el1ba ā1dzi at1ģi āg1ne ēr1za ed1rū iz1hu aš1ņa āb1si uz1ni et1pi āz1vā u1dzi en1tē āt1re ūv1no um1su iz1ci at1ra uz1ri or1ta āk1lu ik1po āš1ķi ār1pe ap1ķī uz1bū uz1pē uz1si ir1ža an1gā ap1šū i1dze at1ju at1fo is1ne ez1rē as1gā al1gu as1ti ūš1ko es1tā al1jē in1ša ab1le i1dža ēp1ja eb1ļa ub1le ab1tu ād1mi iņ1ķo ā1dža ek1li un1li ek1mē ok1lī ēr1pi ēr1pu iļ1la ep1ka em1li ez1na id1ma až1ne ir1re ēt1di am1zo ūr1fo ež1ga im1to ūp1nī at1du im1tā ūg1šo en1si al1ge al1dē eļ1ļa ap1vī ār1cu ež1ģa iš1re ār1ne ul1je ar1mī oš1ka īn1va ēr1ma ok1nu om1ra ap1jā us1ce un1mā ek1ši ob1lā ēr1sā et1ne uz1de il1bo it1pā ar1tē ed1ko ol1vī ot1rī us1se ēt1ti iž1ļu īz1de en1sā is1la ik1te ob1to ag1lā it1ko ep1ci āg1ti ūs1le ek1lu us1mā ār1ze īs1tu ar1kū ir1de ed1jū or1fī ēt1li ūs1mā el1no id1ru ij1ko er1ve ec1la aš1mo em1zo uz1bē er1fo eš1ķū ak1lī el1lu ib1li ek1nu ir1ņu aš1nā ēl1ga em1nī iz1vi us1te is1ha on1jo az1ka ās1ta aš1ta iz1vē er1nē uļ1va ab1lē an1žu oņ1ve il1bu em1pa ob1se em1jo īv1su er1co ur1to ēg1vā in1ci ak1ļū uz1šu eņ1la ūg1šu āg1tu ūg1ti īt1va er1ka ol1šū iz1ču us1ke ur1bē āp1ri ak1ļa ūs1kā os1va er1ze ēt1nī āj1ku en1žo uļ1ve is1ķe īg1si ur1me ur1bī on1hī an1di āj1mā ep1ļē aš1ņu or1vi ad1vo az1gu uz1lū it1pi ak1šo ap1si ās1to in1te am1sa ap1šo iz1vo uz1ve uļ1ņe uz1fo uv1sa uņ1ķa uz1ta ug1ļu ek1lī ok1se ok1vi až1ņa oņ1sa ab1hā iņ1ci ug1šā ek1rū ij1pa ok1ve ap1he ut1bo el1zā or1di an1go iņ1zi ek1mī ap1bē on1gi aļ1me ab1ru ig1ti ur1be u1dže ek1vi ur1ze ūm1va um1mu aļ1bu āt1ņu om1re ug1le ez1ta am1bu at1cē ēp1ju ez1sa at1ni an1me uz1no ār1lē ul1kā ar1pu iz1ru an1ži eņ1ķē od1ni is1na em1zā ār1se at1ri it1ru uš1čo il1ve al1ta oš1vī ēr1po il1pi ap1pē is1ķē ēr1sa ār1ku oļ1še uz1pi av1ro og1rū īg1ņa ī1dzā il1ze ez1ve ūr1te on1dā up1da iz1nā im1di ul1gi az1mē ā1dze as1lē ok1ļa ak1ce ūn1ve ek1lo ok1tā ap1jo ēr1gu il1nā iz1he uļ1ņē īt1ru īd1se ak1rē āt1ro at1da iz1žā ol1tē ūt1sa as1ku īn1bū īv1si or1no ot1ce ol1de ab1pa ēr1pe oņ1ko ok1na ev1ze us1ri ip1ti eķ1tu op1ta īs1ra er1zē of1rā ur1dē ot1ka is1zi ēk1mī iz1ne ag1rī on1si ir1pē er1ni ās1vi an1za ēl1gā ap1du ek1lā ār1ņa um1pa an1fa ār1pa uļ1so ar1pe eš1ļa ēr1vi ef1rā og1la it1pē in1je ut1ma ig1nu ēr1te az1gā āl1de ār1zi on1fe on1ma ib1ta at1žu it1lī it1ra ok1be is1žē ēz1ma ār1ti er1ru az1ja ēg1le an1ni az1lē uk1ni at1lī eņ1ma ik1vī ap1be ar1ne ip1ta ap1žu az1pu ak1ra ul1ve is1pē ež1sa iv1ma ār1šu ek1na os1la ik1tē ēs1la es1la at1ki iz1lu ur1le īd1ni it1se ej1ma iņ1si ār1lā us1va us1ci if1te el1ta uz1ga ak1tū or1ve iz1ce oš1kā ēt1ru ad1rē et1ņu ik1šo oz1ma ir1ti uz1da ūm1de el1tē ēz1ti it1rē aņ1ve ap1zā at1ga up1de ās1na ap1tu āp1ņu in1tē ās1ne ap1re ir1ka uz1tī uz1go at1ļā ad1rū ir1zi īv1mā er1sa in1ti āb1ju iv1si ep1jo e1dzē el1si ij1žu an1du iz1tā il1lā ul1bā is1cī ag1vi āj1rū os1lo īk1lā āb1to al1nu āt1ki eņ1ķī ol1kū un1pi ec1re uz1ču ul1dā en1ro ir1di en1ču ul1jo ul1ce az1vē ap1jē āl1zī ūš1ļo og1ve ag1si on1su og1ca ol1gu ār1zā ig1li iš1sa ot1ru al1vā am1tī ās1te ud1rā ēt1ko uz1jē āl1gu et1me ed1ra at1cū ol1zā uz1žā ul1gā ok1ļu īv1ze at1ve en1gu um1du o1dzī up1jo ap1di ur1rū īv1mū ūk1to iz1ņu uz1šā uļ1bū ez1pi in1vā al1ja in1ve iz1bu ap1šu us1ze ob1rā ēk1me il1le ēz1to īk1de ēj1lu ar1zo ec1me ar1za ol1bu ēj1pe ul1te īd1pa al1ki en1zo iv1ka āl1te ok1no a1dze it1va ār1jū un1go iz1ko u1džo up1ti on1li iz1čā il1gā er1gu iz1za in1gi ū1dzo ur1ni um1bē ed1mu ēk1tu ār1so id1lu ar1me ir1ši ik1ša ej1za ap1ha īv1lī as1ga eg1šu iz1bā ev1ju ap1ce ar1di em1ju am1bo iņ1ma et1si āk1tī is1da id1pu iz1le et1no ul1da ur1tā em1ga ēr1ša or1mi ak1kā iz1mā ab1vē ok1pi ir1bē īg1tu ir1sī eņ1ci iz1sā uz1he eļ1ķe eb1kā in1če ar1mo ēp1šo eb1rū on1cū er1pa īg1na us1ta ār1rū is1lī ēg1li eš1re uz1hu ak1re īn1da el1de um1ja ak1nē ob1tu ek1to ēr1bē ir1ci ih1ti ov1nu al1be aļ1da ot1rā ēr1ķē ud1ma āv1ju ik1li ar1du uk1su ak1sī us1le āt1bū ug1ša ag1mā ēr1tā uz1nā uz1čī ēs1tu iv1tū un1ko er1mē or1ci un1ka īt1ci ūk1ni ār1gā oz1ta is1pi ef1ko āš1ņa ig1ni ur1cī aņ1ķī ec1ti il1tu ul1su an1jo ek1vā al1po uk1tī āj1ni ām1ja ēr1li ah1tu at1vē il1nē an1ke as1ci er1je es1nī id1gu ān1va us1fi ār1si ēd1va ul1vā el1ni eš1ma un1la al1ma un1du an1ho ul1šu el1mu al1žī el1rū ul1ci ar1ģi at1vo ēr1bi il1vē us1me at1li uz1mu av1da ēg1tu uz1ļu eg1vī ēb1to ad1ju ir1mo or1fē el1nī iž1ļi em1de ap1pa ūg1ša ul1bu ēr1mu as1vi eb1ļā as1pi ir1sū uz1vē ās1nī ur1zā ir1bo īk1da it1nī ar1pa el1do ēr1le or1fi ēt1la aļ1ļi am1bā āš1ņā us1jo eļ1ni eļ1nī us1ja in1gu ig1nī ed1ru uj1bi os1te em1va ar1lo ig1lu ak1lā un1ba iz1bū am1ze is1ti it1ne uz1sā ep1lē iz1bī ār1nē eg1la iz1du ēg1dē ān1za es1lo im1de at1hi ar1ķi iņ1ve ēr1zē uz1lā ir1vi ār1ru oš1ļu at1te at1žā un1su on1tā od1la ār1ģe ēs1lo al1kā aš1pa ūz1ne ār1čā ur1je uļ1ķa ak1ņā īr1fa es1kū ār1ši ar1ba ār1ša ir1dī id1nī uk1da uz1žu ār1va ot1ra am1do iz1ģi ep1lī em1si āl1ta in1su ol1ni ub1ļu iz1ņe ap1ča el1za ob1jā uk1tē ap1mā al1ri ot1za ir1dā av1ni ūr1mu it1mi og1ļū er1za ek1lē ūg1te it1mē oš1ņa āk1le aļ1čū ān1lī e1dzā um1be et1rī ek1sa al1le uļ1ka iv1ni ēd1mē il1dī ul1ti ot1le at1gā iņ1sē at1ca aļ1rā ab1su īn1bu ip1rī uz1ra uļ1de em1ko at1čo op1vē a1džu uz1ķi ir1ma ur1bo iz1pe em1tu āč1sū um1šo ap1ķē āl1sa as1fa ož1ņa em1dī ūz1da el1pi ir1sa āz1mo ed1ro il1si īk1na uz1cu os1pu ag1šo iv1va īd1vi iņ1ro ār1ču id1ne eg1pu um1ko uš1ķo ār1ka īļ1bā ak1ve ez1gi or1la aš1pā īg1va ir1šī iļ1li ēr1sī um1ši īm1ju ub1je ep1li at1po āl1ma am1bī iņ1ķi āj1ra as1tū eš1tū en1te īv1ma et1nī āb1pu os1ku is1tē ok1ļi iz1rē iz1ži el1nu iz1pā ul1tā oļ1ko ēv1vā os1lā or1tī āb1tī af1ro ēl1zī āl1ru an1šu us1tā or1do er1ci īs1ri ēd1ra im1da ar1be il1ku iz1mū it1rā up1ša uz1sū us1ru ir1do ur1ga ek1re al1nā ok1ni ek1šu ob1rē ir1žo ār1dī eļ1ma aš1ci il1pa ū1dzu ek1ša ār1mo il1gi uš1ņa el1mū ās1ka ēk1ša or1ķi ār1nu az1ru ās1tī im1šo um1ze īv1so ūt1nī ap1fo ag1šu il1ma īc1ga ēr1tu es1mi ūs1mī īs1ti ej1vi uz1na on1na id1ro el1mē os1pe op1lu ēc1ka ar1pā up1ci ūs1ma ag1re ūž1ņa ol1ga an1ta un1di al1ko ul1lā ir1ko ī1dzo os1vi es1lē us1ma ec1mo iz1ve az1ra āl1cu id1rā an1ža oņ1zī um1tā af1ra um1vā ār1rā ab1vī ū1dzī i1dži ēg1šu in1ža ed1ņe ec1tū or1ne eg1ma āp1ja ār1šī ep1re is1ve ol1fe op1ci as1te ār1šū ež1ku iņ1tū es1te ek1ta ēl1cu ār1na us1jē il1te āv1ra āv1ce aļ1va um1ni ak1ni ār1rē et1ri u1dzī on1tu up1le am1bē in1to ād1nī in1ta ol1ma īk1bu an1žā āb1ma ur1ķī ak1vi at1nu is1bi ol1ve og1ne īv1bi ok1lu ār1čī ug1ti īn1ra ig1to uļ1ģi ār1ma um1jī ē1dze ap1rē is1nā ūp1ko un1si il1tā ap1ņu ol1be os1mi ig1la īl1ni or1bū ip1ru ak1cī eņ1ķa ez1gī oņ1sā āz1ni ān1pā us1pu ād1ne us1po īn1de āk1ba ā1džu ur1sē at1ba āp1ti ūv1vi ah1tā ut1nē em1be ap1na ul1pa ob1je āk1ļa ib1ti os1ve ud1vi en1pā āv1ni iz1vā eg1ro op1si ap1pu am1ni at1ta ak1li es1ne uv1ju ar1rī i1dzu es1rē ob1lo es1li og1ma uš1ko an1zā ig1tu an1be im1pē ic1sa eb1ka uz1zī oš1ma at1nī am1dē uļ1ba ār1mu up1jā ār1he es1mē er1ha ēl1di ih1re op1ja il1go uv1ve ul1pu il1du aš1mi āl1ve ār1lu ez1pu at1so īs1ca ek1ni ēg1nā ūt1ro ap1ķe ab1pu iz1nu iz1ņē ēk1ne ež1jo es1po ās1no ūv1ni aļ1sa aļ1ķī ē1dzo ip1no ap1vā īk1tā ār1čū uz1ze uz1nī on1du ap1hu ez1nā uk1ļi ul1bi ad1pē at1pē ēr1zu uz1čā ēs1to aš1gā āt1no en1vē is1be et1rū āk1ta uk1tū ij1ni ug1šu us1ķi ij1ve el1šu ul1vē ēt1rī ag1ļē es1pe ēr1šo ak1rā eļ1pa ec1rī ez1lo ēk1lu el1va ār1ķi eļ1po am1pa ūt1ni iš1zi id1mē uz1dū ēk1la iņ1ta ol1tā īk1ša īt1nē iļ1jū it1tū is1pa ap1sā iz1so ež1ģī ud1ri oņ1nā am1lū iz1pē ak1vā al1te ad1ri ak1ga ār1bā ap1rī or1bē af1ti uz1du at1ši ug1tu iv1zi an1se eg1to ūd1rā os1lē ār1ri el1ga ēr1de ir1tē em1ļa us1na im1do āt1ve ur1ma ur1ģi īg1ni īd1ko ūd1ra iz1vī ed1rī at1jā il1mo e1dza ēk1to ār1ģē iļ1ņi iz1bo as1ro um1zo or1pu ar1kā ik1ko ap1ca īs1ba as1vā at1mo uz1pu ēn1ga am1ba uk1ši ag1to iz1zi uz1tu ul1ni er1lī eš1ķē en1zi at1zo ir1ša ez1si us1so am1fī ig1tā e1dzu ap1kā ār1ro es1vi ag1la ir1mē ad1ve it1di um1no ap1lā in1ga op1šo a1džā er1po uz1bī un1ra uk1ta ar1ve īn1sa ap1vi ēr1ce og1lū aš1li aš1po e1džu ap1mu ag1lu or1be am1ne ol1di iņ1ģe it1na eļ1ņu uz1lu ās1me ār1sī ur1ku ur1pe ep1na ut1na ac1da uz1le ik1ka ar1fi ab1si er1zī ār1ļu ap1ja ul1tu is1di an1ge ar1lī ug1tā on1so ud1kā eļ1ko iš1ķī um1po ik1ļa ūg1tu ār1gi ēr1ni et1va ap1lo ēr1ķī iz1tu īv1la is1ju od1ba az1ro ūs1di up1tū ūs1nī eļ1lo ap1bī um1ta īs1tī eb1rī uš1ķē ep1tū eb1lī or1že up1ra ēt1ma ak1ro ir1la at1či og1lu ūs1ku ut1rā il1no ec1de an1bā az1vi ān1ga ēj1ce eļ1ve er1zi el1sa īk1ta īt1rā ār1fe um1ka ir1si ag1ļi ip1ka ak1šā ar1ki ek1ļā ar1bā ed1da os1le iv1ja iv1kā ūk1šo uļ1vē ēk1tā oš1ņu og1de ok1ļo ul1dē ik1sa am1pē ūs1no um1to us1ču od1ka as1lo op1mī up1to oļ1ti ū1dzi īr1ma os1kā al1dī ok1va el1tu ap1pi is1ca os1ce āl1vi ir1mi uš1ķi oz1tā is1te ig1ša at1rā ar1žu os1kū im1ša ār1to um1bo an1sa aļ1ļa ēk1di āj1ka ak1tī ar1tī os1tā eg1re im1sa ul1sī ag1me il1lē on1ce iz1jā iž1ci or1ku az1no im1pā of1se op1ļē āl1ka ēs1ti oņ1de er1la ār1ņē uz1ku ab1pi ar1na em1ša er1ku im1pe in1tī es1mī īv1do uz1mo uš1mi ak1lē aļ1la up1lā ok1ta ūv1me em1žē āl1rū is1pā ar1le eš1va eņ1rā ad1ne on1ku īs1si ab1da il1lu ar1va an1ko ez1bē ež1li il1ga at1tā iz1kū ar1nu ir1mā ad1je ik1ra an1bu op1ri ik1vā ek1šē ap1ru uz1ņi iz1be at1vi it1ro ur1tē en1po ap1jū iz1ģī ol1rā ar1go ah1lo im1pa ī1dzi us1lu ir1žu at1cu am1vi ag1ti im1ju ep1ļā ec1ga on1di ān1kā is1fu at1ņē āņ1ti at1čū az1pa ik1pa ov1bo ad1si er1lū ir1bā um1tu uj1ko ež1vī ab1lo ūk1la os1pa ul1to ap1žē āv1ma ez1zo eg1mā ap1to iz1ku os1lu or1vā ok1rī os1to al1di is1lu ē1dzi āt1li aļ1li an1ču eb1la eņ1ķo ak1rū en1ri ez1be ēr1nē eļ1ņā ab1rū un1sa iz1zī až1da ūv1so aš1ķī it1kā ap1bu ē1dzē a1džo īb1šu us1lā ad1re ej1le ek1ro at1su ap1ļu ež1ci er1ra ez1vē aļ1ko og1re ur1ja er1zu ār1me av1tī on1tē at1fi ir1bi ob1li uz1jū aš1ļa āb1ra ur1bā ap1nu al1ģi an1vī on1dē ep1tē ez1de um1de up1ju īg1te od1de ok1sā at1jē ār1zu um1di eš1di eļ1mo iz1de in1gā ač1gā ip1se iš1ķē ūn1ze āk1to eš1vī ēņ1ve ap1la oņ1ni im1ni ut1ro et1de ep1pa aš1re up1ja us1pi uj1la āt1ti op1le an1nu ēj1mā as1lā am1mi az1dē am1po īk1pi ūk1tā ār1go ap1ma uf1ra īg1ta ad1ca ār1ķē ek1vo am1te iz1zā ar1ke ēr1mā en1dā eg1lī at1ci ur1ci āg1la af1ri īk1ze er1cu ad1va el1ci ep1no ag1ne ār1zī eg1rā eš1ķī an1ti iļ1dā ud1mu āl1li ub1ve uz1pe uš1ķu eļ1tē or1čē og1pu eg1nē op1la al1dū ef1rē īt1ni ek1nā āz1be er1ti er1no os1fo ēr1ga at1ka er1go or1ķe er1mo un1da an1žo ez1mi ef1pa ek1rī ūp1li eļ1te ār1tā ot1ri ud1li us1zā as1tē iv1da is1ko il1za īg1to uz1bu er1tē ap1su es1zi u1džu uk1li iz1lū it1ti īk1kā es1pī uz1vu ūž1di ūs1li āl1po ok1re āk1ļi īž1me eš1ķa at1ķe āt1rī iņ1ši ap1ga um1jā īm1ja ez1ro iz1jē es1sū eš1vā og1ri ār1lo al1so iz1lī is1kā ep1ti eg1bi ār1la ar1vo ēp1si ār1gū eļ1ga uz1kū iļ1le o1dze an1sē at1no ok1ma al1sa ek1ri ep1le en1rī eš1de ez1jū ik1sē al1gi ep1ro īv1ci id1po oņ1pi od1ra ej1pu ir1go el1ma in1se et1sa īb1ša aļ1ķa ol1la at1rī at1dē īļ1si ār1ņo ur1mi ep1lo āg1šo ec1to ob1ve up1tā āt1ra os1ko al1zi el1du iz1vu ār1pi at1šā ul1tū il1dē ap1mī ar1lē er1tā us1mu is1hu oņ1si āz1ve īp1ne āz1to iš1ma ol1vā em1zī āl1be al1šo us1ko es1ga in1fa āj1vi at1di at1ži ap1bā ah1ta ēr1nā el1me īs1le iz1ja ēb1ti es1ka ul1be ep1ri ež1zī ot1vē as1la at1ru er1mā ed1re ēj1ma av1ci ak1do us1nē eš1ga ap1cī āt1zī as1pa āk1ša es1ta ib1lo er1ģi ēr1mī eļ1di at1lā ak1te aš1vī og1li al1ga aš1kī ār1fi es1to ūt1pa on1ko ār1ci ām1ju el1ce īs1tā ec1ni al1ku at1hu er1fe ār1mē ēr1mū ul1di on1ga ār1pē ar1pē ās1nā am1fi āt1pe an1co oš1ņo eļ1ņi aš1no īr1na āk1šo et1ko ig1ma an1te an1ba e1dzī ek1šo um1bu ir1gā om1le ūm1ve al1na iz1va og1lā ūk1ta il1so uz1ma il1ša oš1ķū at1zī ās1mo ēr1na ūž1ņo um1nī eg1vi al1tū on1se iz1ža ek1te ep1lū ep1se os1tī as1ta ār1be iz1ša oš1ķo āg1ri īv1ku āt1na aš1ķi ēr1dē ir1tā ak1sa as1to az1jū un1me ap1pū ep1to ur1ve en1ma ēc1na eņ1ķu ār1le um1zi uz1cē ez1pa os1ka ab1rī er1ģē et1ra īt1na ap1čī ok1ri eš1pe iž1ma is1ša āz1ģe on1dī ep1tā am1zi īg1lo iv1re at1lu āl1ci ez1vā iz1ti al1mā ug1li il1bi iļ1ķu aš1ņā iv1ba ik1ši īk1me ap1kū un1gi uk1nā al1vo up1lo oz1vē ēj1ka ap1rā ad1li uz1ju el1pa en1li at1ču īk1bū at1dā up1ta iļ1ņo ar1pī ak1vē ēc1ga eb1ne af1li ol1ka ez1fo in1ki an1gi ak1lo up1si ej1va ag1tu ek1ļo iž1vī as1zi ir1lī en1du uz1tā if1lo eļ1ļo ob1lī um1sū on1ci an1de es1lī ēb1si ib1tā il1da uķ1ko uk1ša āj1pe ej1bu ūv1ka ar1fa oz1ve īk1rā up1mā ūs1to ir1nī ag1lo oņ1ra iz1sū īg1ce an1dū iņ1vī e1džo ār1da īn1mā ār1ju er1vo ar1se i1dzē iļ1pi it1pu ur1sa id1da iš1ko eš1ķo ār1po ev1kā īk1rū os1ri ik1no ār1tu ur1ko oz1tu om1pi ar1šē on1nu uņ1ģi ur1šu ab1rē īr1kū en1cē em1je ap1va av1ļa aļ1bi uz1hi in1ča on1fu ār1sā oš1mī uz1rī il1ka un1tē as1mi iz1ga ār1mā āk1tā ik1lo im1pi or1pa aš1ro um1mē īn1te ež1rū ab1sa uz1mē a1dza as1sa un1gā ag1mī eš1mī eg1ša ak1ru ēt1ri or1se us1no it1mā uz1po in1čo iz1su is1to uk1vi ir1to um1ju uļ1sū in1dā um1tē ar1šo īk1ko er1me uk1si īv1pi ēr1mē as1tī in1kā en1za al1bu or1ģi a1dzī en1sa īs1ta eļ1de ū1dzē uk1tā ec1vi ūk1le ap1čo ēd1ni ān1ce if1tu īk1di āl1va ap1gu en1de ar1de ap1mū on1te es1da ud1ci at1se ūp1ni in1ha ap1de al1ci ir1pu um1va ok1tu ug1lī aņ1da ep1ša el1su īk1si eņ1ģe aļ1fi er1si op1ju od1le īt1pa ak1nā ap1nē ar1dī ek1zē at1zi āt1ka āl1mē em1za um1pu ap1žo ēj1sū en1le iz1lē er1zo um1dā ur1žu eh1no ab1ka īs1vē īb1šo as1se ul1lē ir1ki at1ča uļ1ķe āz1ma ip1nu ar1nī īg1lī ad1ra ez1ti īk1ra ūr1zi ap1vu ib1la īt1kā iļ1da ēl1ko ob1la o1dza ep1nī es1ri up1ji eļ1ku ik1ve es1vē er1lo um1do ik1lā em1žo is1so om1ju ij1ka en1ni āz1ne īv1di if1to un1je er1da en1kā ūt1ra en1ge āp1ji oņ1kā al1vi ēr1zā en1ga īr1ku ar1te up1rī or1ti ar1ķē el1lī iš1la an1no ec1pi ēk1šo an1da āp1šu iļ1ru ež1lī ed1rē ed1ka at1kū īb1si ež1ņa am1va un1dī ār1nā al1me uļ1ze es1tē āj1ba āp1šo ap1po en1zī er1sī ig1ro at1bu um1sē el1cē ās1ni ar1pū od1ve oz1ga in1do uz1mi un1mē uz1ka ig1ne et1pa ol1si ab1ra on1to os1kī aš1ķa iz1se īn1pi eb1ru es1nu ūt1ru ik1ri as1lu iz1la uz1ci at1tē on1da āp1ša ēp1ne or1ce ep1rā ūr1mā ež1vā up1jē eh1lo īg1ņā us1li ec1tē āt1mā ak1nu u1dzē ez1ne ar1dē ēk1da et1nē ež1ro ir1kū ap1lū īs1tē us1ba ēj1zo ī1dzu at1le ēg1na ep1tu i1dza af1ta ep1de īļ1ve od1ro um1šā en1se eņ1ra as1tu at1pu eļ1da āb1ba iš1ķa āg1ša il1bā ūš1tu ud1sa at1ģe um1šu aš1mā en1so eg1ba am1re ud1ro ov1na ik1re ār1rī ār1ni ež1ra i1dzo īs1to an1še ar1ju iz1ģē az1dū ēr1me oņ1ga ēr1tē id1mo īs1fi at1mī al1se il1ha ep1ja il1ce of1ra um1pi uz1rē aš1ņo el1ža ap1ņē ar1bu iņ1re ij1pu er1žo ol1ta ez1va aļ1ķi il1nī ag1no ul1lī ib1ri āt1ri um1pī ūg1tā is1fē ak1su al1to el1žu ap1ģē iv1ga al1za aļ1dē ēr1si ār1ņi et1rā aļ1ņi um1zu ūg1si az1mā in1ko īg1ri il1šu er1va uz1tū ec1cī īs1li a1dži u1dzā am1žu uz1fi iz1nī ir1dē ev1ga iz1ča iz1pu up1šu iz1gu in1ce uz1dī āb1šu or1ba i1dzā a1dzo es1tu āz1ti el1mā ap1vo ub1lē aš1ķē īs1vi en1jo as1ki ik1tī ok1le ur1ķu in1gī ek1ļu uz1to uk1le ir1bu āg1to uz1ne as1ko ek1rē ur1do ob1ta ār1jo uk1no ot1lī ur1te uz1re at1ma at1žo ēd1ne at1na us1ka al1vu ib1šu iz1dū ug1ko uz1vo at1zā eg1zī ūš1ga il1ni uz1ro el1pu ūg1to os1mā ul1ma as1ma al1ni ut1ra ug1šē at1sē in1fo eļ1bū uz1jā ēt1va ēk1ba ik1di īg1le op1ne ur1vī ār1dū ir1cē ēr1sē as1ja es1mo il1ci az1li em1šu ap1lu er1nā ot1rū uz1čo as1dē os1mo aļ1ga un1te at1ne om1ba ok1ra en1vā ap1sē an1dē ol1dē ap1ļa ek1sē ad1so iz1po uz1lī īk1ne ud1ra uz1ko ur1ta ep1šo ud1mi ār1ki eļ1vi ūk1ti īg1ro iņ1ti ur1du eg1tu ār1bo es1mu ar1ce os1ki iz1tē ev1mā ān1ko er1ge ē1dzī en1ba īv1ba ot1mu ēb1ta īn1rū ūk1ņa op1jo is1lo ob1ru ur1li ēs1le ur1lā ēj1rā ul1ko āg1tā iv1ku ām1ga o1dzē ī1dzē ir1za ip1rā at1tū iv1vi op1lū āp1si em1me ap1žā ār1mū ik1šā il1ba an1ze on1do il1he ek1ļa el1nē āk1re uk1se ēr1so ef1re ūt1rā ip1tu am1pā ak1ņu at1me ūr1ma ik1tā am1pu az1de en1ki iv1mo ar1ge īb1ti uj1ma os1ta as1na ēs1ma om1bo eb1rē er1ža āt1nu ež1ko uz1tē up1ni ig1nā an1na az1ku on1tī ar1sī ek1tū eņ1me os1vē ak1šī at1rē er1bu eļ1ņa og1ro īt1lī ij1ro ūk1si ār1žā ap1dā uz1pa ek1ļi iz1tū aš1ķo im1ta ik1nā at1jū ēg1no ā1dzē em1te er1ģe āš1ņi eļ1ta ap1lī ul1la uz1bi īt1di ud1bā en1tu un1ne uk1so īv1ti ol1je ed1li iz1ni ēr1šu eb1si ēv1ze uz1za er1ne om1pa ec1kā in1sa uz1ža ūs1ta ap1ļā ūv1ga iv1ri aļ1ba ob1ša ir1zī aš1mē āt1ru az1sa iš1ķi ok1nā or1mo iļ1ļa iņ1ru uz1gā uz1vā it1ri om1de is1cē is1mi op1ga at1čī ar1nē uz1ho at1bā ir1ži el1fi ir1ne ar1dā uz1fa ap1ki ur1dā āl1ze ār1li or1bu ap1ti um1ga ek1ņa al1pi us1fa ār1vo uz1ģi e1dži ig1nē uz1te ot1va ag1ļu os1pā īk1ņā īk1šu e1dze iš1jā ek1ve at1ļa āl1si or1zā ul1lo ab1va aņ1ķi ār1ķe ur1vo ap1ze em1ni oš1ņā ūž1za ēr1cē ap1hi ek1nī uz1ņe in1tā un1cē ib1lā īr1ga is1ku uz1zo ug1ši am1zā as1me un1dā ak1sā it1ļa ur1nī uz1ņē ēz1tu ab1tā ār1šā us1sa īg1šo eņ1ca op1lo āp1to el1mī eč1zi eg1ku al1pē ik1rī al1vē it1ļo em1mē iz1ba is1dā īd1mē en1ve ap1ju ol1ko ag1le ap1tē āt1nī āv1va et1so an1hi eš1kā ir1šu es1lā os1me is1tī ur1ne et1nu ap1mi ūz1ma or1mī as1za an1cē es1ni al1fa ēr1bo ur1ģe āg1si is1de īs1sa at1mi ēš1ļa ūg1da ūs1nā ār1ra un1kā ok1li ē1dzū ēg1nu al1bo op1da et1ķī ur1pi ār1pu ok1sī it1ļi ap1sa ip1ci ar1ša av1ma ec1vā iv1do ūs1ti at1dī ār1žē am1na ak1ļā iņ1me uz1ha ar1mi eļ1ļi ēp1tu of1to ag1rā il1zī ēg1šo il1sē is1ba ap1ko ug1šo ot1mā iž1ni ār1tē at1šu ep1šu uz1ģē ag1lū up1lu ām1gā ar1šī it1ve ak1ma už1pu uk1te uz1lo ik1ce eļ1rī et1na āl1ra oz1ti iz1ze ap1zo ir1nā ad1le ēt1ho ad1mo un1ta a1dzi az1ko āl1pa uz1nē ug1ma en1di iz1šū ag1rū īr1ra as1pē ok1ce en1cī il1mā op1su al1šu of1li ev1ma ab1ļā a1dzē ud1ru ir1zā od1bi ol1dā ap1ci il1dā ok1pe an1ki as1vī od1ru ur1pā āj1ga ēr1da ep1ju iz1re iņ1ka ār1mī at1lē ir1sē iš1ļa ēg1ša āš1ņu ar1gā av1la aļ1ni iz1fo il1la er1mu up1šo is1ma āl1sā ap1ļē ur1dī as1tā ul1tē es1cē ud1lī on1ve uz1ģe ek1me āš1ņo ek1la āl1ga iz1di on1vo er1tī on1ja uļ1žo ār1fo ak1rī ev1bi ij1ci eš1ra um1jo az1me im1šu aš1da or1tē uz1rā ār1vu al1ba in1ge ab1na an1ci īs1lā il1šā am1za al1jo ek1le im1dā iņ1de oļ1va iž1ra am1mē ok1rā er1le ok1vē ok1rū uz1ķē eb1ti āv1la a1dža iz1ļu on1ka uz1do ār1ķī ē1dzā an1nā āģ1zo uz1ča īt1bi am1da at1kā ēj1ko ul1du op1lā uk1šā ik1nu oh1ro at1ti eļ1dā it1li uļ1ļa ūs1mi at1he at1to ec1pa aņ1pa om1bu ig1tī ap1me er1so an1tu on1fi aš1ni īv1ja oņ1ma il1rū ap1pe em1di ār1pī er1žu it1rī al1tu iz1kā an1gu im1tu an1va īn1dā el1ti ap1sī ēr1be ez1ga ēt1ki us1tē īn1ko el1ze ab1lī ar1tā aš1ķū en1vi il1fa ik1ti eg1ri et1vā us1mi um1te eb1jo eļ1ģi ar1ha al1mi ig1lā ek1vē is1le eg1rē el1tā ap1ģe iz1ri er1to ug1to el1lo ār1lū el1sī el1fī oņ1da in1du eg1si ub1ļo un1zē ar1bī iz1ju ap1nā at1ce ej1da am1vī eņ1ķi oš1ļā ij1me ob1ra e1dže ap1pī am1pi īķ1ma op1te uz1cī oņ1te at1vā ap1ņi uk1lā ir1so ak1me ip1lo ik1ca ap1fi oj1ne iz1pa ok1to ok1ci en1mu ip1nī ol1za ār1ģi āk1ļu ēr1to āl1šā ef1le as1li ar1so as1mī at1re īs1co ar1nā ug1ta is1ta eg1ļu ām1ni ēg1ti eļ1ri o1dzi op1lē ip1nā oš1ķē ap1bū im1nā ir1gē īg1vā ēr1nu āk1si el1mo iz1ņi ap1mē al1pa ol1ti un1vē os1mī āk1li as1pā ēr1ķu ul1tī ij1ti im1fa ūs1ni um1ba um1me al1dā us1to iž1ce it1cī or1ņa ad1rī ur1ba us1vā u1dze oš1da ok1mī ež1ģi ef1li ir1kā uk1ti uz1dā ēr1ģe īg1tē ūs1te is1vi il1ti eš1ļā ik1me or1de od1va ur1zi iz1či uk1nī az1ma uz1ja āb1jo at1fa ev1ri iz1jo īs1pa u1dža od1ko eb1ro is1li at1mu at1sa ub1ri ab1me ēļ1ni ār1hu ik1tu ok1sa em1dē ab1lā um1sa og1lē āg1ta ez1li ob1ļā ad1pa ig1na or1sā ir1da an1sī am1mu ul1do ār1či uz1vi ol1ho em1zu ut1ni el1šo uļ1vi īk1šo is1lē uz1sa ir1gī ež1va īb1ne īd1la it1vi ēk1ve is1sa em1pe ēj1sa id1ra ol1da il1ca uv1re ār1tī ar1bū ap1mo il1ža a1dzu ap1se ub1lā as1pī er1tu īc1ni ip1ra og1lo ib1lu el1na uļ1ni ak1si an1ši ēr1zi er1ke am1ka on1za ār1bē ud1ni ak1ha us1mo ār1ņe at1dū iz1žu ām1ma aj1mu uz1čū aņ1ģi iz1ho ēj1ni ir1ni ek1tu ās1ku el1žo iz1ģe ēr1ķi ēr1se īr1sē iz1na ob1ro al1go um1si op1ļa ur1tu or1tā ul1cē iš1ķo ad1ro it1če il1vi uz1se oh1lo od1ne iļ1ra īg1no ap1ni oz1ni il1me ur1da āt1do ar1he in1tū ul1fī us1gu ul1cī al1bā ib1ra ir1ga ul1gu ān1ri il1gu ab1pe op1to il1zi is1ķi uv1cī ap1tā až1re iz1pī ud1be ek1ne ab1ļa iz1ki ar1mā iļ1ķe ok1ro ig1šu at1bo ār1pū īb1ta uz1kā iz1bi um1ma or1ko an1vā es1le is1ci op1mē ām1pu ir1ba os1tē ig1rē ok1da īk1le el1te ek1ru ok1mā ob1ja ar1gu iz1ķi or1gā ij1jū is1mā ūk1nē al1ce ēs1tā ur1la īv1bē ar1bo až1vi iz1li om1fi ar1ni ār1cē uņ1ni ir1pā uk1šu in1fu op1ļo on1mē ēš1la ūm1ju on1me is1ja āl1da āj1pu el1zi ēr1ko īs1tū āb1ta it1re ēr1ta ik1ne aņ1ģē es1na uš1ķī ēk1sū āp1jo ār1ja op1li ib1rē oš1ķa ag1ta ob1jo ok1lē ul1ku ip1te ar1cī ār1te īg1ša uz1ki ās1la et1ro ās1ti ar1ti iz1sa āk1zi uz1sē em1šo ok1so et1ze ar1žī oš1vi ap1ri ad1ru u1dzo āp1nē at1za ūr1li iv1la or1va ūv1be ep1ni eņ1sā ūr1vē āz1tā ēb1šo ev1lū ib1kā īt1da um1ša ug1sa ik1da ak1lu ēr1ļa os1mu īņ1la if1rā oņ1tū eg1ne is1mo uz1šū on1tū ob1šo in1va eg1lū ir1pi u1dza us1la ūs1pu ib1to iz1sē ap1čū ok1lā uv1mu īk1sa āķ1ve iz1mu uz1mī uļ1ķo ar1hī ēl1me īg1me ag1ve ur1vu ār1ha ed1ni āt1se at1ņa at1sū ūk1šu ol1me ūz1mē ip1to at1tī ēs1ta us1ve iņ1pu ol1va in1ši āp1ta ar1ko ēk1si el1zī er1nu az1pi ār1bī uk1la ek1ņi er1ro ēt1bi al1da is1pe īk1mu ēc1pu in1dē ūr1ve es1tū ēr1mi ez1ko ār1ko āl1lē ep1te ār1re an1ce od1ku ig1ru īk1tu ēž1ve ap1no ul1ga el1ve at1ņe ār1pā op1bu iv1ti iz1dā ig1ra ij1va ēr1di iz1lo uz1bo ās1nu el1ņa us1ne ev1ge ab1di uz1jo ār1kā eb1re ir1nu op1tā il1li uz1pī āj1do ēg1tī ul1re eļ1ķī ej1nī av1ļu aļ1ņu ūs1ga im1fo ab1ta ut1ne iš1ķu ez1nu or1sē ep1ļu ūt1si ik1le is1ga oz1to op1ti ur1šo il1kā im1du ēr1ba iz1no ar1je am1du ul1lu ot1ni eš1si at1pa ab1to ip1zā ūs1tī at1mū ī1dza im1bo op1tu ak1ta es1ve īk1ma ūk1ša in1di uz1ži iz1čī ad1vi am1šā iņ1ņa ār1ce ēd1ma ik1ni ap1tī ap1zu ep1sī am1pe uz1lē iņ1ģi uņ1ķi ur1pa eb1ra eš1me āt1ni or1me uč1ka ar1vi en1gā ar1ši uz1la es1kā uk1ņī ap1gā er1vu es1nā ir1šo iz1sī at1gū ar1ma ef1ro eš1ķi on1nī ap1ho ez1zi oņ1re ur1nu am1be ek1no is1jē āž1ni ag1lē ek1ci el1da es1pi ož1vī oņ1mā il1pā ok1la as1lī en1ze ām1vi ir1be ik1lī e1dzo uz1ti ul1ta ār1gu an1so ik1si eņ1ze iv1ju ag1nā ār1bi ib1ša or1fo ūr1zā ap1ņa ap1ji ēr1lī u1dzu en1rā iņ1pa at1ķī ār1vā ap1ļo ār1ca ek1šā ēr1ka īz1da us1di īk1to op1sa iv1ko āb1ti il1jo iz1ra ir1se uļ1pa iz1ņa ār1fa os1li ez1ma ar1si oš1ta eh1ro až1di er1sā ep1sa el1je āt1ce ek1lū an1dā ig1rā is1za ok1ru eš1ļi āj1mu ot1rē el1ka ur1čū eb1šu uz1žū eg1ve uz1ņu ob1ri ap1bi iž1ga av1va ūs1na ēj1ra iņ1ni eg1tī uš1pa ag1ma ur1ķē on1go ēr1ne īž1ni ir1ģe as1kū ēr1cī el1ša ēr1nī āk1ti es1mā ap1dē īn1me ig1šo es1ki ot1ne ab1rā ab1te ib1rī ir1po az1do en1sī az1nī er1bo al1bī ib1lē aš1ha es1va et1ru ez1jē id1ga il1tē on1ki il1na ur1go oņ1pa ur1lī od1pi īb1to iņ1va ad1ni ev1ka ar1la āb1tu at1vī er1su us1ku iv1vē iņ1za or1nī an1do ūt1ne om1bi an1to el1dē uļ1sē el1jē il1ča ās1lē as1pu uz1su uš1ku om1po ul1bē ēc1mē eņ1ko īv1zā eg1le is1ce is1ni od1rā om1na ul1mi āk1ļo ig1mu ir1me eg1ra eb1ta al1mu is1ki in1jo īn1vi ef1lā ēj1ca ar1hi ul1ba om1ja an1kā am1bū op1tē ol1lo am1mā at1ķi ad1hē ot1ma em1lī āl1le as1mē ūr1ga ik1la um1so an1dī us1lī ūr1ta in1že ip1ri ej1se ul1ki eg1bu il1šo at1pe at1čā ap1lē eg1lā īs1re ēr1ve ek1ca ap1so ēr1mo āz1ta or1tū āk1šu em1ci ok1ne ēd1nī es1ti il1pe ip1na ik1va os1lī iz1šā od1ri ob1rū un1va eb1ku il1to ir1tī uk1ro iz1cu āž1ra ur1di eb1ju ul1so īs1lo ēj1čū in1fi ur1za il1va iz1fa al1do ib1si ēr1bā os1ni oš1re im1ba ig1si ūr1fi ec1pu ak1to el1so ek1rā īs1va aš1mī en1ti en1pu eb1ri am1ma es1me ūn1vi ak1ci ēp1ša eš1ni el1vi ov1ka ēz1do iz1lā en1tū en1su ur1nā ot1ro ob1re ep1žo at1ķē ēp1ti en1ci at1bē uk1to āg1šu il1mē ār1žo is1va ēt1ce un1ro eg1me on1bū ah1ro ād1re or1ni uģ1ni uz1so uz1rū īs1kā īs1pu ar1šu ar1sā el1bu il1ta ur1ķi ak1ne ap1vē ār1ča av1ve os1pē aļ1ra eš1ķe ur1zo as1va uk1či ar1pi uk1ra ur1mē ez1se al1pī um1za īs1de aļ1ru uk1ko eb1le ul1ju āt1ze at1bū ez1vi at1šū ag1ra āt1kā īs1te iz1jū eš1ņo ur1co ar1bi ūs1tu it1ka en1sē eš1ņa ag1ro aļ1si id1ri it1no ež1ma os1pi ev1ti ēk1pi ap1tū us1mī el1hi iz1ha eš1ļu ām1vā un1gu ā1dzī āl1nī eb1li od1re āk1la ab1zi af1ni ād1ni ig1ri ek1ga uļ1mu on1va īv1ko um1ra at1pā ub1ļa er1nī ug1ļi aš1ke ēr1tī ap1ba od1jo ok1ļū us1tu uz1ķe ih1ta iņ1ga ēp1jo un1ce il1ši īt1ne oš1ķī ig1ta ol1lī ūk1ga es1pē et1bo ez1di ap1ķi uz1ca ig1mā or1ķa ez1to āp1ju ēk1nī at1ļu es1sē ir1pa ap1ra up1li ul1dī ē1dza ek1so ol1zī ēr1co or1ka ad1ja en1ra ez1ba iz1go en1hā ez1ka et1re ah1ve il1pī ep1lu eg1ti im1fā ih1nī ēr1dī ap1čā ēj1vi an1tī eņ1tu ut1ru ēj1tā ur1bu ur1de es1no am1pī un1vā iž1ku uk1lu un1bū un1tu is1nī ub1ļi ap1či ūd1ri en1lī es1pā iz1čū ob1ji ez1tā em1žu op1lī ab1lu od1rī āj1sa uk1ci an1žē ūt1ri un1dē eg1gā ur1pū il1di iķ1ve eņ1ka an1tū āv1vi īt1ro iz1ro āl1di i1dzi ad1rā ap1ne at1va iz1ma ūv1ko ūt1nē až1va ān1sa uz1zi as1vē et1vē iļ1bu aš1vā ap1ka iz1pi er1ša ed1na im1dē ag1nē āj1bu ād1ve eb1tā us1pū īt1sa ap1ži ūr1ni og1ļa āt1nē el1vē et1la og1ru iz1ka al1sī ir1zu om1fo eļ1jū il1bī il1sa uņ1ģī ej1sa or1nē am1ta ul1šo or1pē em1du ur1lo at1be ur1si ēr1ti er1šo at1pi or1lo ev1na ec1ri ol1ba iņ1kā ār1hi os1fā at1lū og1ni aš1sa eg1li ij1de eļ1mā il1nsa ir1pti iz1šķo ēl1mju uz1glā ap1slā op1ska ek1špē al1tru iz1smē ēr1kta us1kri il1bsi ul1gri ap1sku at1frē is1pru at1fri um1pja ār1brā os1tga as1pre ār1sve ūm1tve ār1brī uz1fra iz1dru ēr1ptu un1dzā ut1ska īk1šķo āb1sti iz1hlo ēr1šļo ap1gro at1šmī un1spu es1tro ap1blē et1rka us1gri at1plā on1ste ap1šķī el1dze ab1sce at1kļa iz1prā ug1šde on1fli at1stu im1šte ir1kta ar1bnī er1dzī en1dro ok1snī uk1šķa eš1bļo īt1ņmē et1rde ir1mbā az1gru in1grā uk1ska ap1spo āg1sti ug1špa al1kva ez1tne an1gli udz1ba ūk1sli at1sma ap1fra iķ1skā uz1sma īp1sla il1stu iz1gra os1krē am1sti uz1pre ez1gla īdz1jū us1trā iz1pla iļ1krā ēr1zka ap1pro ir1sno ir1smo ir1mme er1dze ān1prā ap1bru ēg1sto as1bra ek1šne ēr1bšo edž1li as1tru un1dra āl1pro ār1grē ēr1stā ar1pta īk1stu ez1spē am1skā ir1kļo on1gru iz1šta āļ1dzi āl1štā īs1pro ur1dzu ir1stī ār1šļa uz1gru el1pšu al1frī ek1šga ir1mdī ek1sku iz1spu uz1plū āk1sla iz1dre in1ssū uz1gle om1pre ār1gti udz1cī iš1brū uz1kru uz1sli uz1klā at1ble īdz1ni iz1smī ār1sni īs1spa iz1pre īg1sko iz1žva ir1gti ēr1bta īt1pra at1gla as1dzi ap1skū uk1šķe at1dzī uz1šta uk1lva at1dzē ār1šma es1prā iz1blo al1sti at1zvi in1dzo uz1krē at1kvē an1brū ur1ksi uz1stī op1sta in1sti on1sti uz1pli at1kve as1krē in1sda an1smi ap1stu us1tpu uz1kņu ār1blo on1gli ar1pli ap1šļa us1kre āk1šķu al1vja iz1sni ap1pla uz1brā iz1brē eš1stū iz1svā ēr1kša ug1sta at1blo ap1švi il1dno iz1glū ir1sdi im1pro ār1tre iz1bri āl1bra at1bri uk1stē iz1brū at1plē il1bšo ur1dza ik1lpa āt1rra uk1sti ur1kša en1džo ār1svā ap1krā īk1šķi at1rre iņ1zva at1žvī ār1blī ēr1sta ār1smi iz1šmī ug1šna iz1skā uz1trī ap1svī is1prā ek1sta at1sla at1trū āk1slī uz1kna il1dvi ār1dzi uz1šņu is1tre iz1svi ap1dri el1dmē ul1gto an1tzi is1kvī uz1kļū ār1šņo uz1frē ib1sto ig1sta in1ktī ir1sni en1sne em1pjo ēr1btu īn1skā ēk1šņo ik1smē es1trī at1šķū at1pla in1gto ot1rdi al1cvi um1bri uz1švi is1glī an1džū ap1sle uz1pļē ap1šķe iz1ble ap1šņa ir1mre en1tra ār1tra ul1snē iz1spa ep1sti ūt1sga āg1sto īb1sta ap1pļā at1kle il1gtu iz1spi am1tra an1fra uz1frā ēr1nva uz1stū ūk1sto at1šma um1šzi ug1stā at1špa il1kti īp1sle iz1tri os1tro el1pšo av1sta ak1tda ik1snu iz1stū ok1tri ap1gve op1spē iz1pra el1ptā es1tra iz1kni ān1spē os1kva ol1ste ul1dzo ek1šzo uz1ste uz1brī in1skā ār1švī il1nvē ūv1pro iz1šļu ev1ski en1zda āt1rda ēk1šķu ig1sto ēr1kšu ēr1ktā iz1skū an1kre iz1pro il1spi al1kto ok1zvē ap1zva ār1zvē un1tni ak1sti as1tri īb1spē os1mve en1sžu el1nru er1csa uz1zvi al1vtu at1dzi um1krū ot1frī ap1klī an1sko el1dko an1tkā ap1gla īk1šņa ār1gve il1dba es1tma uz1sti at1drū ul1pto uk1smi as1trē er1tro īb1sti id1spa at1trā ar1pna at1sta ek1trī at1šņo at1zve ig1zda ir1mpa ak1tni ir1kšo ār1plo ār1prā il1nti om1sva ēr1bja il1trā al1kta iz1dza iz1šma at1dza iz1kri ol1skā en1tni et1sti at1tru iz1špa ur1kne īg1zna ul1sva an1tza ār1tņu īn1krū uz1šņo ek1tkā at1plū il1kni uz1žņa ur1sli iz1tre ap1stī or1dda ur1gra at1glā ās1tni uz1žmi at1dze āl1sti ēr1slī el1nze āk1ste op1pla at1prā up1sto em1plā ib1stī up1sti ār1špa ēj1pla ār1hlo ap1frē il1kto al1dzi on1tri ar1gsē iz1frē ap1bro ul1tne im1stī ug1špē em1pta at1grū as1tma īk1ste iņ1krū il1kšu ek1ska is1tvi ār1dro iz1tro us1smē el1zta ēr1psi āk1sme ēs1tne ār1grū ok1gri up1stē ok1sko et1rro un1dze ap1trī uk1šķu in1sri en1tri āj1dzī ap1fri et1rpa uz1klu ik1sme ār1dra iz1kvi ēr1pto at1plī od1pra at1glu ap1fli uz1gri at1krī īk1stē oš1prā an1frē ap1sva il1bta ek1smē ār1šru us1tmā īk1smī al1dķi os1trī in1ssē al1tga ir1mkā ap1zvi ūg1sto em1pli uz1ble on1spe at1spā ār1sko ap1trā ek1šli āl1skā iv1pro ar1krē iz1tra uz1tri uk1ste ir1klī ap1kna er1spē ik1šķa ak1šķo ur1gšo al1dga ap1kla ap1svē in1tri im1tga in1šķi ēr1bka ēr1sti at1ska āb1sle ap1slī iz1slā an1gļu ir1msā ēr1pša or1tlī iz1dri un1kta el1dzī em1ztu en1ksi ār1kna un1kto ap1klu at1tra at1brā at1žva an1kro ap1sme ūg1sti ar1tmā in1gti ār1sti ik1stē om1bve ap1sko ār1ple īk1smi ug1sne ap1krē en1skā en1szī āk1sne es1pre ēr1ķti āl1sma īr1ska at1slī us1krē us1ska el1pta en1kto ar1bga ār1tru eņ1krū en1trē ār1spu en1spu al1ktā ik1sti em1zti āt1stā al1kci ap1kļū el1nsi ēr1nru ir1dza ār1klī at1tre il1dma īk1pla ap1sni el1kme el1nbā ak1smē āb1sto un1drā uz1glu uz1ska en1slī an1sli ēr1sba un1dro el1zto uz1trā uz1spā ap1dzē ap1dru in1dze ed1gri eļ1blā an1kci os1krū iz1spā an1krū ir1sra it1sko ir1mso un1ktī iz1slī er1zto et1pra ur1tra al1tme iz1slu il1gti iz1gre ek1šķī op1sva uz1tru ar1ppa in1dzē ab1dzi ur1tni uz1bri ab1stu in1gra uz1sva iz1krē ap1dzi ug1šte um1bru at1dro ir1sti ur1sti āl1sko at1klu en1kšo ut1skā il1pšu ur1gšu ar1knā ap1knu im1bra ēk1stu iz1knā il1bto āp1sli us1tru ak1šņo ap1prā ir1dzo en1krā ār1spē ar1kro iz1dro ār1bra il1dnī el1dba al1bri uz1brē ot1gri at1tvē ur1sme uz1šļa ek1šte at1šņa en1sro āk1slo an1žsa uz1plī an1tra il1bša il1tni us1glā ur1gti īg1stu ar1zva ol1lmē iz1kve ar1glī in1kru ap1kņu ir1pšu ec1skā ar1dzi od1ršu al1tma uz1sle eg1spa ap1šļi ek1šķo uz1spo ar1kto iz1zvi uz1šķo il1trē or1tre im1šļa iz1blē el1gti uz1slē ār1spo al1dka uz1bre is1tzo im1fva az1pra ap1plī aš1kri ir1pji uz1šļu iz1sla em1zto ur1kri al1tna er1dzi en1kti at1pļē ēr1slo ar1gto ūk1šķi in1dzu es1pļa oņ1pri uz1bļā us1tro ij1skā ār1fra iz1tru og1dzi ij1spe ij1stū uk1šķi ār1trā uz1kla ek1sče ik1stu ar1ppi iz1šņu oņ1sli il1psi iz1gro ēg1stu uz1sku ol1stī ur1vci uz1smī ur1zma en1sve er1spe uš1plē ur1bšu at1stū iz1sme el1gšu ec1sta ap1kra ek1šda il1dde el1kņa il1dle el1psi ap1stū ap1ple uz1ple ur1kšo ār1dnī ēr1pju ēk1šķa ir1mte ug1ļķe an1kvē il1gta īr1šķi ap1svā ul1lpu es1nvē uz1gve at1pri ug1šda at1šķo iz1plī ār1bri al1dkā udz1ma un1ssa os1prū iļ1ņve er1che ān1skā ab1ska ēr1sli ār1krī al1kšu ur1sto ūg1sna uk1sto ir1mcē id1sta id1slā ut1sko ir1stā ār1pro ir1kti ār1kre ap1glu as1tne iz1švī uz1spu al1nrū ār1spa un1ktā āb1slī ār1pļē ir1bju ur1bto el1svi un1ktū ug1šga ir1sli uz1fri ur1bta āb1stu em1brā om1pro ez1glā ep1sto al1kme iz1blī ar1ksi īk1smo ār1spe ap1krī iz1šķē ur1tkā ēk1lko ār1tna il1dsa al1dni el1dce on1tru iz1sto ūp1sto ap1žvī ap1tri od1gru ār1gtā iz1gve el1gsi er1nha at1švī ār1hro il1tvā uz1sme at1sve im1tni uz1pri ēr1sra as1krā en1ska iz1glī us1tdē ol1tme ūr1stu um1švi at1šļa ār1knā uz1tre ok1šņo at1bli at1sni el1gto ek1šķe ab1sti un1fte ap1gri ir1ste ul1sni en1tvi am1plu am1zda ik1stī at1knā at1skū is1tro is1trē īg1sta ir1spu am1svē ār1bru ec1stū ul1dza il1kšo ār1plā os1tni īk1sna uz1sta ār1zda ār1šķi uz1bli ek1tro ap1grē ur1bšo ir1slē iz1kla uz1trū uz1tra ak1sto os1tre uz1dri ir1sma ak1šķē ak1tli ek1švē ās1nku el1zti er1cba ēr1kto in1dsē al1kša um1tra ip1sna eļ1ska ār1šķī ap1kri ār1šķē el1drē im1pli uļ1dzi ir1pta ēr1pta il1pra up1stī iz1fra us1tre ub1krē ār1pļā in1fra il1kta ir1mpi ap1šņo at1sku un1dzi es1trē an1drī il1pto adz1ni ar1pju in1gtā iz1gru ap1šķo ēr1skā ot1rpi or1tfe ir1mti ik1šķi an1tmē am1bri un1dža il1pšo as1brā el1gšo ap1kvi ug1sme il1pne ēt1svi ir1kša as1sko ek1spe en1kša iz1bre em1pti ār1gre iz1frā iv1stā ul1šņa ār1kro as1pra il1ktā at1sle iz1glu ik1snā ok1šņa um1šma ār1gru ār1sme at1sna ur1kto ik1sna uz1svī us1slo am1pda em1ztā uz1žva is1smi ēr1tnī ār1gtu ār1drū īg1sti ap1tro at1sme iz1plē ir1tni ak1šžo il1sku ul1bša um1spo āk1sli ap1blo ār1dze ār1kva uk1sne āt1rvi ap1žva am1stu an1dra ār1gšo ek1stē ār1slo ār1gto ek1ļve ek1spo ār1tsa iz1dži ar1blā ēg1sti ar1bdi uk1šķī il1bšu or1pro ap1hlo iz1trī as1trī uz1smē ār1spā is1tri ab1klā uz1hlo uļ1sti at1fli ut1nko iv1krā ur1tdi ap1glū ār1glū om1skā at1sto um1sta ap1gle al1sma el1tra er1sto el1dvi iz1fri et1sko at1tva ār1kle āš1kru er1tce ap1kru us1tri uz1gla ap1ble il1sta ap1sve iz1dzī as1tpa em1psi iz1tvē ac1grī ēr1dzī ul1lci iz1šļi at1žņa ov1smē as1ska en1tge at1plu īs1šķi ār1dzī ēk1šņā el1nko ār1sku āv1sti āl1dzi ēp1stu īv1kla im1tmu os1pro ap1spē um1brā ul1dzi ār1stā ur1knē er1trū el1nba ār1bro ar1sme ok1sne il1ška at1svē ar1vde at1slu iz1bro ēr1ste āb1sli us1skā at1grā āp1stu ār1brū am1stī as1tmē iz1kņu en1kla iļ1sli um1sto ap1bļā uz1sna ol1klo er1tme iz1fli al1stu ap1špa ar1sti āk1šķi ār1dži um1bra ir1dzu al1kjū ap1smī āb1sta iz1kļa ul1ptū ap1smē ār1tnī ar1gva udz1so us1stu ap1ste ul1zna ār1glā ār1blā ur1ska il1stā el1nra ak1tri at1kņu eg1sme ap1grū ēk1šķo in1spi ik1sta am1bli ir1dzē ēr1ktu ur1kni el1tni iņ1krā iņ1kre iz1kle an1spa un1ska am1stā ēr1pšo ār1fli ir1mri ēr1btā at1svi ir1spa ār1tnā ap1šķū en1drā ek1šni at1trī ar1kti iz1pri ig1znē on1spi ul1kve ek1šķu āt1sko ek1sne īs1krā iz1klā ēj1tve ur1kti og1ļhi or1tme aš1plū ēj1slē am1pla ēs1tni ur1bsi is1tka is1dzi iz1spe ab1sta āp1sti as1tme os1tri udz1da ur1dzē at1šļu at1bra un1kla er1zti uz1pļā ār1dre il1gša iz1ple iz1žņa er1ztā el1dše ir1knē eņ1krā ēr1ssi al1sno ūp1stī ir1gsi iz1sta ir1sse uz1spe ek1sni īg1snē in1dzi at1kli ar1bve on1glo iv1ska il1dni ār1kra ār1blē ar1stā ār1sli eņ1ķmē ēr1bsi ik1smī āl1sci at1dre až1brī iz1plā ir1mve uz1gro up1jma uz1dza em1pto an1kto ež1sta ēr1šļu ap1brī uz1kro uz1skū uz1krī ap1šmī uz1kvi il1btā or1tje es1krā at1tve ul1stu ūk1stu en1kta ēr1stu ar1bma uk1stu ēr1nzi uz1slī ūk1sti at1sva ap1pļē il1nmi ir1snī in1dni āj1prā ar1sbu at1spa el1nma ek1stu is1grū is1nle āk1stī uz1stu if1šte ār1spi īk1stā ar1ktu ur1ktā āj1dzi ēr1bto iz1zva at1knu at1fra en1sra al1ctī ār1bre ar1bni ār1tni ez1pro an1tnī ēp1sti as1trā āp1sto īr1sva iz1šķa ig1stu er1tra es1tru as1grā al1sna ur1pre ur1mjā ēn1prā at1pro ek1ļpa ik1lve ēr1kšo iz1gla ap1sna in1dza ār1gra ir1gto iz1sna an1čki ap1tva ār1sna um1špe at1zva ig1zdo en1sva et1rga il1gga īk1sme al1stā et1rri iz1dzi ār1pra iz1trū ār1pli ēk1šķē āj1sta iz1kro ur1kšu iž1knā or1bci em1ptā an1scē ir1kšu al1tdi ēk1šņu īdz1ši ot1rre āt1spē ēk1mju āt1krū il1dda at1svī udz1kā ār1trī ar1ktā āl1ska en1sli es1pri ur1btu ug1stī uz1plā em1zta iz1bļā īk1sti uz1spa ār1tve an1dce el1dse uz1kra ap1sli ir1gta uz1slā ir1kli oņ1plū ur1gto an1grē ūk1sna āv1zva an1slā ek1švā ār1žva ār1šļu ap1frā až1skā at1pre as1tti iv1plā uz1grē ek1šno iz1grā uz1bra es1tpa ur1bra iz1kļu im1sto ur1gtu om1dzi ir1gka iz1šķe ek1sti uk1šga ār1sma el1tka ar1gma al1nra uļ1krē ar1gka iz1svē ēr1sto il1špa im1tci uk1plē el1pti is1dra er1sme ul1snī ār1krā āt1sma ir1stu at1pļā uk1smu an1dtā en1kšu ar1sko ēr1pti ēk1lva or1skā uk1sta ep1sta ār1tri ir1kņi ul1stā et1rvi il1btu ār1sla at1pli el1nsa ur1kmē uz1bro al1dne ār1frē un1spū ek1šķē en1pro an1dro at1bru ak1snī uz1tvē ik1spā uz1blī ap1šķi el1dra un1svi at1spu ār1fri ep1stu ēr1szā īb1sto ār1dza ār1gli el1kne ār1tne un1prā ap1kve uz1kni ap1dra ār1gša ār1kvi ir1zga ek1šgā ek1sve at1gle ār1stī es1pro al1kma iz1klī ug1sto az1pro āj1sla en1tne ul1sti at1kre ār1sva ār1šķe iz1kļū ap1slu il1zka ek1šme am1pšo ūr1sko uz1grā es1grā ap1šņu ir1kļa ur1lmē el1dfē az1dru at1rpu um1stu es1grī iz1kna as1smē ur1spī eņ1skā ār1slē udz1vī un1dru ar1ska eņ1tra am1pli uz1kli ul1gtu ēk1brū us1dzī ap1stā ar1kšu es1kra iz1brā ir1sta ar1gce em1ptu ur1ste ār1dru uz1pļa at1glū ad1skā ov1skā ak1stā ēr1zga ir1mga in1gtu īdz1te ār1drī am1bra īk1šķu ur1gsi ab1sci on1dri il1pju āp1jve ar1gbū ul1gšu ār1dva ār1tno ap1plo as1tka il1gšo iz1ska ār1dni ap1dva īk1snā ap1blā as1pļa ap1kre al1pre em1pšo ap1tru ak1stī el1sku ak1ņve ak1špa aļ1ska ūr1sta at1bļā in1gve at1hlo ig1frī ok1snē ār1gri ak1šķi āt1sna ul1tsi as1tni ir1sto an1sfo ek1šla ul1tzo ob1spi os1pri el1bri ār1žvī at1blī ot1rti il1gsi uz1zvē in1spe ir1ptu ag1sva iz1kli ok1sni el1gra um1spē ūp1sti ak1stē ur1kta an1dri ir1pto iz1pli īv1drē ar1pzo ur1bti ul1šņi at1blē og1ļra iz1sle il1pro il1gto eļ1tra iz1slē ār1kve ur1btā ār1frā al1tla ur1pmā ēr1ksi al1ksi ir1kņo in1sra em1blē ib1sta in1sci ur1ktu iz1šķū an1tni ām1glā ur1zva īk1šķē up1rla il1nga il1gla ēk1šņa en1prā uk1špa at1pļa iz1šķī ār1gšu ir1gša ul1dzē an1kku ul1tni un1dzē ap1sma er1sti el1ztu ir1gko im1tre us1sna ūk1šķu ik1tni at1brē as1kra an1dža am1plī ar1kša ap1spe an1ska ih1svē od1sli ēr1pšu ar1gre am1sto ān1ska or1tvī at1svā uz1šķū ūr1sto in1sce ud1spi udz1ga al1snā āg1stu al1tro at1šta at1kļū udz1vi ap1slo ap1gre iz1šņo ug1stu im1sti up1stu ur1stī os1kra ir1ska og1ļde um1dzi in1kvi ed1kļū ul1tra iz1sko el1gtā ur1gtā iz1pļē ap1smu er1stī āt1ršu ok1šņu ap1šķa āt1dzī at1tro at1brī al1sta udz1ru ar1gtē in1sta iņ1ķve at1kri al1snu iz1zvē iz1klu in1hro ir1ptā as1kvi ur1spi iz1kvē ār1skā ir1gtu āp1sta uz1bru ed1krā et1sta al1vga am1pša ar1pga uz1sla at1šķī at1dži ār1kļū ār1šro eņ1bra īk1gru ār1klā ak1ņko od1prā at1klī iz1stē ār1žņa at1tri ik1stū ek1šzī ār1kni ār1pre ap1klā ul1gta ēr1pjo ār1gsi iz1šņa iz1gle ēr1bjo is1stū eļ1drā ik1ste ēr1nga ap1tve uz1skā ap1knā ik1snī am1ble ek1stā ol1fga em1bri uz1spī el1dma iz1slo ar1gkā iz1svī ūg1kri un1kti er1pre uz1švī ap1dzī iz1spī ek1tda ēr1dze il1ska ār1tnu ur1bša ap1tra ap1dze an1ste in1ktū er1ztu as1pru en1sca uz1svā il1dmē ik1sni ār1brē āk1sto āk1slu ap1bri ap1stē iz1sti ap1pļa ār1šta īk1sne un1tra ok1šķi ūs1tni ok1trī iz1glā om1ple ār1kri uv1bra īv1stu āt1rgā ār1pļa uz1klī uz1slo at1gre eļ1bri as1prā ig1žņa ēr1glē ūr1sti īv1sva ah1tve ūk1sne et1rsi uz1špa an1dze um1pra er1plē iņ1sti at1drī at1dva in1tnī in1gvi al1šķī ap1slē id1plē il1nva uz1glū iz1švi udz1pu or1tli in1kri ap1pri em1dvi ār1drā as1tro ar1dze āk1sni uz1ski as1tva um1sve ār1gdi ik1sto os1pre at1frā el1dre il1dva ug1prā ul1stī uz1svi ur1tda ār1slu ūp1stā ez1glu īļ1knā an1cle ūp1stu ec1svi ak1šķe ir1dzī uz1dze āl1spē ij1dro ār1kla im1sli ap1bli il1sru on1skā uz1spi ul1dze ik1šķo us1krū ek1stī ek1šro it1bri as1pri ik1šķu or1tku at1kni is1mju im1stu ez1prā at1sli ur1vma om1sta er1sta ot1rpu es1pra uz1gre at1šķē ur1dzi ūk1ste ap1smi ār1stu an1skā ūr1stē ur1zmi ār1krē er1sma at1šņu od1sko im1pre al1snē ap1dza iz1pļa il1krū at1spe uz1krā in1tra at1šķi at1bro el1tga in1tro on1tda ak1šķa as1tna ir1ski aļ1stu os1kni ēr1tni ār1trū er1zta ir1zma iz1knu ar1gku eļ1gle iz1dzē ap1sti os1trā uz1šķi os1tru ir1kļu es1brā ar1sto ap1grā us1tme iz1ski in1sva um1sko un1kni at1kvi uk1stī ap1pli ot1plā et1rmo el1djo ub1sta uz1sni iz1dze ul1gšo am1pjo uz1dre ar1pni is1mmī al1dzī iz1žvī ar1bmū at1spo al1šķi uz1kvē al1kti udz1re ār1spī iz1kra et1rre ab1sto uz1slu ār1plē us1ttē ur1sta iz1gri ot1rto en1sti āv1grū ār1tva un1slī on1gre ēk1sne ir1kni el1dpū av1grī or1tjē īk1smā īdz1ju es1smē iz1spo iz1brī um1bve is1kva īg1ļla īs1stū im1tkā ār1gme ār1ble āč1plē ēr1zci ēp1sta el1drā ak1šķu al1nga uk1šķē ir1ktā od1ska īk1sto ir1spe ir1pšo ēj1spē at1hro id1smi on1tra at1gve il1dķe in1sku el1dtī ek1šķi uz1kre ap1zvē ār1ska ān1sve udz1vā iz1ste uz1pla an1cka ež1frē in1gša ap1hro in1gtī ir1mdi ir1mva ap1svi uz1dzī uz1pro ēr1sna ap1dro uz1blo al1tva ek1šsē udz1ve ih1stā uz1gra ēd1dzi ar1psi ār1dri at1klā iz1tve ār1sle ul1gša al1tvī ēr1ļve ir1mzi at1dra os1pļa ir1kto el1nga ēl1spi ap1gru ēr1bti us1pli ik1sma ār1slī ol1ska īt1ska ap1dži ur1tnī uz1dzi ār1šmī odz1ni ar1gda at1ski uz1dzē el1tli ov1ski el1ztā at1blā ar1dzī is1trā as1tra en1svī on1krē ur1gta en1tmē ār1kru un1dri ār1gla el1pva as1pro is1pri iz1plū il1dko ār1šļi ar1tne us1tne at1kna at1kra at1spi ēr1ptā īk1sta in1grī ed1spi op1stu um1šsa ap1pre ap1trū ār1šķa at1brū um1šķi el1stu al1sto uz1kļa al1nze at1gru on1fro at1kla ap1brū ir1mtē īdz1nā uz1šmī ap1gra ak1šze ap1blī an1kno il1skā ir1ktu ēt1spē al1vni ar1gri uz1kle ul1sto es1krū iz1pļā uz1plo at1šļi ug1šma ec1sla īg1sto uz1blē ib1sti en1sto in1kli ir1dzi ug1zna in1gro as1prū ež1gra iz1kre eg1slā ām1grā ig1znā am1fle ir1pša eg1smi uz1šķa ap1šķē ug1sti al1ste al1nci em1mvi īdz1ti ik1sno ār1svē et1rkā ul1gtā at1spē ār1sto il1šmā et1rti ar1dzē er1cko ar1sta ēr1bša āj1gle am1pja uz1dva ot1rkā ak1šma uz1plē ak1špu ār1bļā ir1gtā ik1šķē uz1zva al1stī os1kle ār1ste ug1šžo ēr1tne iz1dva is1tru ek1šku ap1skā ar1gti ar1gvi uz1smi im1pto ār1ski ār1plū uļ1ska ib1snī iz1šķi ap1ski un1sbī ep1stē us1sko at1zvē at1sti el1dzo īk1smē an1sku um1sla uz1šma ap1žņa ek1šze uz1kri ir1mmā an1čka ēg1sta at1kro et1rrā uz1knā uz1stā ap1drī ez1glo at1ple ar1šļa ug1šņu ār1kli ot1rzi al1kvī is1tra ib1stā or1dni el1dpa in1gpo ul1sla uz1tve el1tta ap1plē uz1šņa ār1sta os1tbi ār1gle og1ļrū er1stu iz1plo ūv1bri ēl1spu iz1sli ap1plu um1sti uk1švā us1tra uz1dži ēr1npa el1pjo et1kre āb1slē ik1lķe an1spo im1tku ok1gre iļ1ska an1tku an1sjē il1pša ūk1snā āl1szā ol1sto us1trē ij1krē an1flo ap1glā āl1svi at1slo ur1bjo el1sme at1smē op1dzī ūg1stu al1tra er1tne at1švi os1trē ez1drā ur1gša en1spo ov1ska il1ktu es1tre iz1dve ār1smē at1gra āg1sta ūv1gri as1tmā in1flā oņ1stū ār1klu el1tne ak1sta ār1dko ār1kvē an1tro at1kru ap1sto il1pta edz1ni is1pro īr1gro udz1si em1bra ār1zko ul1šņā us1sti ēk1šķi udz1vē um1tni ar1stu ap1kle īk1smu up1sta īk1sma ār1zva ab1rka ēdz1ni āb1stā ēr1kli en1tro ār1plī il1gšu ap1kvē as1tre ak1ste ek1šķa āt1rmo an1sce in1sde iz1kru ap1šļā at1bre on1sta ēr1zla el1gša ām1bra el1dzi uz1dru udz1di ap1brā ar1kta eņ1sla ar1švi iz1smi ir1vja en1gri ar1kšo uz1drī ul1sta ek1sme ār1šņa ār1zni ār1tro ap1kli ār1svi ēr1stē īk1stī et1rtū īdz1ci ur1tli ek1sto im1tsa us1brā uk1šķo ir1zta ār1stū un1ktu ēr1mju īk1šķa ur1kli uz1fli ap1plū il1dzi ap1dre az1sva ug1ļla at1stī iz1plu uz1tro is1sli iž1skā ir1gšo en1ktā ār1gta iz1bli ār1smī im1brī ār1dzē ār1svī ek1spa īdz1ko uz1svē at1plo or1tla ab1prā ir1tne ūk1slā iz1sve et1plā ir1sva il1bti uz1brū īt1spē uz1šķē udz1no at1slā iz1blā es1tdi us1zvi is1kri ēl1slē ob1sku ēk1šņi ul1šņu on1tro il1stī iz1bra ur1pni al1dsē im1ttū is1spē es1tme in1gvī ug1špu ir1dne iļ1ņla ap1sta ik1smi ad1grā iz1spē il1gtā iz1sva il1nbā im1stā ak1šve uz1pra uz1grū ār1skū iz1bru us1tsē ug1snē ār1dzo in1tni ig1sti er1gtu en1tru as1krū ār1slā ap1tvē el1sti il1sto il1dra ot1rga ur1kņu ap1bra er1tzā at1stā er1cli ēr1bšu uz1stē ap1plā an1gvi uz1šļi uz1blā ed1rvi as1tla iz1stu ot1spē us1pro im1tda am1krē op1pro ig1žņo at1bļa ap1kni iz1sma iz1grū an1dpu īv1prā ur1stu ar1stī ig1zne ūk1sta āj1sko ek1ška ub1sti ur1dze iz1hro ap1šma ap1spa ār1stē ib1stu at1smī im1sta il1ksi ar1ndo on1kre es1krē āl1plā uk1sma in1gri um1pro uz1dra ār1pla ār1plu at1ste el1gta en1gru il1tze ār1pri iz1krī at1krē es1prū is1svē ār1švi ār1knu en1ktu ap1tre iz1kņū ul1gsi in1dri iz1drī ek1ste aļ1ķne uz1spē os1tma ug1sni at1grē al1sni ur1nga ip1frū ēr1sko at1stē ēr1gli ol1fra at1gro un1kci ār1kņu iz1sku ek1sce ap1sla at1slē ap1šta ap1šļu es1tri uz1plu ār1bli ār1grā uz1sto il1tra in1gru ūk1sni en1szā os1prā āp1jvī ār1tnē il1ptu um1šza is1kre is1krē ul1gti um1dzī ek1špu ur1zni uz1dro us1tve ās1trā ūg1sta ap1brē er1vje iz1grē ar1gmu at1dru ap1kļa ap1spi ap1bre el1pto ār1tvē al1kšo uk1sme el1dzē il1kme ēn1skā ir1gšu il1sti ir1dsa ir1slī at1smi ār1šķo ar1spa al1dse uz1knu ar1gpo iz1šļa at1šķa ār1šņu uz1sve an1stē ek1trā ār1glu ur1vju oņ1sti at1drā iļ1pro iz1tva iz1trā ap1spā om1pli ak1stu ap1spu ek1tdi ok1ste er1gra am1bre uz1bļa us1gra el1gru am1sta at1sko īb1stu ek1tri el1mla an1sve at1skā un1dzī īk1gra ap1ska in1dko al1ktu ul1dzu es1trā at1spī ol1dla at1šķe eņ1ple os1tla ik1stā ap1švī uz1prā ap1kro ūt1smē is1gri em1pšu iz1bļa ir1mno ap1spī ēr1kti al1gme ed1svi is1bri un1sne en1svi uz1kve ār1gro er1stā uz1šķe eļ1krū od1rpa īv1grā et1rba un1sku ār1tmē āb1stī il1pjo iz1stā uz1žvī uz1šķī is1tko os1pra el1gtu ad1smi om1kra ut1sva il1pti ug1pre un1kte il1gru ār1šķū ez1gli iv1spē er1dlo āt1ršā ēj1grā ur1dzo en1trā ap1bļa ēr1tņu em1dni in1ksa āl1šķē uz1hro iv1sto et1rjū uļ1glu ir1psi el1zce um1slē at1gri el1ptu uk1stā at1pra ar1gjo uz1tva uz1sko iz1stī el1sto ap1pra ov1sku ar1šru ēp1sto at1krā ir1ksi ok1šķe iz1šļā iz1dra il1ptā il1dsē in1gta ūp1sta ug1ļko ar1džu iz1krā ul1dzī ur1stā ārg1sti ilg1sto akt1spo alt1gva ark1sta ugs1tlē uzs1pļa ald1skā ins1grē izs1prū ilk1tni urb1sti ezg1lve arp1pro irk1sni eld1plē ird1spu ilp1stu īns1trā ārs1kra ird1smi eln1svā irp1sti ārg1stu ens1sta ugš1sti irk1sti ilg1sta als1tpu ārd1dzi irm1dzi abs1tra umš1brū arb1spē ils1blī urs1krū izs1pra urb1stu udz1šķa uzs1kra aps1pre ins1gru ens1bla ārs1pra arg1krā ilk1tne ens1tru ulk1ste upj1gra unk1šķi urk1sta aps1krē irs1drē ērt1sli obs1tru ērt1ssū ast1sko ird1ska irg1sto ord1zni aks1tve ikt1stē uzs1pre izs1pro ilt1stē uzs1prā eks1tko alk1stī īdz1pro ens1dro irg1stu ing1sto izs1kra ink1stē alk1šķi ātr1sli ild1spa āls1tre alk1sto ubs1trā aps1tru ērk1šķa izs1trī ats1krē ārs1trī alk1stu uss1kri izs1pre ent1lme irg1zda ilb1sti eks1tre aps1pra ilk1sti unt1szi uzs1pro eks1klu iss1pri aps1trī ulb1sto urk1sti aps1pro aht1klu āls1sta ens1krā ilt1smā eks1pre uzs1tru aps1prā etr1kla uzs1pri īks1tmē eld1spē apj1dra ist1hre ids1krē irs1plā irs1stu unk1stē ilk1sni ink1šķi ird1smī irs1kre īdz1ska alk1snā īks1tsi izs1tru ars1tda unt1sno ēst1gri uzs1tre urk1sto uns1dro ulg1sto ātr1spi ilg1spē erc1sko ilb1sto āls1skā ens1krū aps1tri ilk1tnē udr1skā urb1jma ats1pra ird1sli izs1trā ekš1ņnī ind1sta aps1kra ērk1stu iln1bri uzs1pra udz1pla ilb1stu izs1kri ilk1stu irp1sta eks1trē ugs1tka ult1zva ātr1gri ink1šķo urk1šķa ulb1sti uzs1trā aps1trā irk1stī ulb1stu unk1tsi ons1trē īgt1spē ark1stu ilk1sto ark1šķo alt1kvē uns1dzē irk1stē ild1krē ink1sli urs1trā unk1sto ilk1stē ārg1sto akt1sgu ert1bri ilg1sti ērt1svē ērs1gri aps1trē eņs1krā amp1stu ats1trā ilp1sti ežs1trā erk1šķi eln1pla urk1sni akt1svi ens1dzi irg1sti ark1šķu ess1krā irk1sto unt1sma isn1gri alk1sne ild1pla udz1ska ārs1tru uzs1krū ink1šķē ērs1svī ērk1šķo īks1tpi ilt1rpa ātr1bra urk1stu ārs1pro als1sti eks1plo amp1sto izs1tre ang1ste irg1sta izs1krē ātr1spē ust1knā ark1šķē ark1šķi ārs1prā aps1prū ilp1sto īgs1trā ont1rre akt1sde ats1tre uzs1trī aps1pļa urk1šķi urk1ste ink1stu ājs1trā ats1pļa ērk1šķi etr1stū ink1sta ans1kri eks1pro ald1drā ārp1sta urb1sta unk1šķē akt1sda akt1spu alk1sni ārg1sta āls1tra āls1ste irg1zde āgs1tvi ird1zni irt1sku ons1trā ērk1sta ilp1sta isn1stū elk1sni ilt1sko ats1prū urk1šķu ars1tga ugs1tro ens1šķi ing1sti ads1krū els1tra ark1šķa ark1sto ant1sbe ink1šķa unk1sti ird1sde ink1sti ans1pla ugs1tra ats1pre irk1šķi irp1stu ils1dru als1tni ats1tru ins1tru anž1dze īks1pro amp1sti ars1tvī ugš1stā anc1spē ark1sti unk1sta irm1ska akt1smī ulg1stu amp1sta eks1trī unk1šķo urk1stē elz1szā ārs1tre ens1kri ink1šķe uks1trā ink1sto ult1spū elt1spē ats1pri ild1spē uzs1prū eks1tro egl1prā irp1sto alt1kri akņ1gra ārs1lve ārs1pļa udz1stū urb1sto aps1tre ugs1tvē ekļ1skā unk1šķa isn1prā ats1tri ākļ1stā udz1krā imt1pro ing1sta eks1plu akt1spa ilk1sta alk1šņa ats1prā īks1tča ent1rti ērk1sti irg1spē ikt1spē izs1prā akt1smi izs1krū unk1stu ats1krū ārs1pri unk1šķu ult1spē unt1sga ugs1tsi izs1pri ārs1krū aps1krū ārk1sti izs1pļa ars1tpu ērk1ste uzs1tri ulb1sta izs1tri ons1tru irs1svā ats1trī ārs1krē akt1ssa eks1tra akt1slo urk1šķo ing1stu ult1kva ust1spo ītņ1gri ežs1krū irm1sle irk1sta urk1šķē ort1pre ekš1ņla iņs1trā alk1sta irk1stu emm1dzi irg1zdā irm1kla aks1tni ons1tra ink1šķu ats1kra ind1rve akt1sja ens1blu aļķ1špa ult1sva ogļ1skā ārk1sta ulg1sti ērk1sto ird1sdā ugs1tce uns1grē ult1pla irš1krā egt1spē ārs1tni ats1pro akt1sla ārs1tri ilg1stu īdz1sva uzs1krē oks1krū ārt1sta ilb1sta alk1sti oks1tro ekš1dzi ent1rbē iln1ska irm1šķi ārs1trā aps1pri ons1krē ārs1pre irk1ste ird1slē ulg1sta akš1svā alt1bri ārs1prū .jā1s2p .ne1s2p .ie1s2p .no1s2p .pa1s2p .pie1s2p .sa1s2p .uz1s2p .aiz1s2p .ap1s2p .at1s2p .bez1s2p .pār1s2p .iz1s2p .eks1s2p .vis1s2p .jā1t2r .ne1t2r .ie1t2r .no1t2r .pa1t2r .pie1t2r .sa1t2r .uz1t2r .aiz1t2r .ap1t2r .at1t2r .bez1t2r .pār1t2r .iz1t2r .eks1t2r .vis1t2r .jā1s2c .ne1s2c .ie1s2c .no1s2c .pa1s2c .pie1s2c .sa1s2c .uz1s2c .aiz1s2c .ap1s2c .at1s2c .bez1s2c .pār1s2c .iz1s2c .eks1s2c .vis1s2c .jā1s2tj .ne1s2tj .ie1s2tj .no1s2tj .pa1s2tj .pie1s2tj .sa1s2tj .uz1s2tj .aiz1s2tj .ap1s2tj .at1s2tj .bez1s2tj .pār1s2tj .iz1s2tj .eks1s2tj .vis1s2tj .jā1g2l .ne1g2l .ie1g2l .no1g2l .pa1g2l .pie1g2l .sa1g2l .uz1g2l .aiz1g2l .ap1g2l .at1g2l .bez1g2l .pār1g2l .iz1g2l .eks1g2l .vis1g2l .jā1ž2v .ne1ž2v .ie1ž2v .no1ž2v .pa1ž2v .pie1ž2v .sa1ž2v .uz1ž2v .aiz1ž2v .ap1ž2v .at1ž2v .bez1ž2v .pār1ž2v .iz1ž2v .eks1ž2v .vis1ž2v .jā1š2ļ .ne1š2ļ .ie1š2ļ .no1š2ļ .pa1š2ļ .pie1š2ļ .sa1š2ļ .uz1š2ļ .aiz1š2ļ .ap1š2ļ .at1š2ļ .bez1š2ļ .pār1š2ļ .iz1š2ļ .eks1š2ļ .vis1š2ļ .jā1s2f .ne1s2f .ie1s2f .no1s2f .pa1s2f .pie1s2f .sa1s2f .uz1s2f .aiz1s2f .ap1s2f .at1s2f .bez1s2f .pār1s2f .iz1s2f .eks1s2f .vis1s2f .jā1š2t .ne1š2t .ie1š2t .no1š2t .pa1š2t .pie1š2t .sa1š2t .uz1š2t .aiz1š2t .ap1š2t .at1š2t .bez1š2t .pār1š2t .iz1š2t .eks1š2t .vis1š2t .jā1s2tr .ne1s2tr .ie1s2tr .no1s2tr .pa1s2tr .pie1s2tr .sa1s2tr .uz1s2tr .aiz1s2tr .ap1s2tr .at1s2tr .bez1s2tr .pār1s2tr .iz1s2tr .eks1s2tr .vis1s2tr .jā1b2r .ne1b2r .ie1b2r .no1b2r .pa1b2r .pie1b2r .sa1b2r .uz1b2r .aiz1b2r .ap1b2r .at1b2r .bez1b2r .pār1b2r .iz1b2r .eks1b2r .vis1b2r .jā1š2r .ne1š2r .ie1š2r .no1š2r .pa1š2r .pie1š2r .sa1š2r .uz1š2r .aiz1š2r .ap1š2r .at1š2r .bez1š2r .pār1š2r .iz1š2r .eks1š2r .vis1š2r .jā1š2v .ne1š2v .ie1š2v .no1š2v .pa1š2v .pie1š2v .sa1š2v .uz1š2v .aiz1š2v .ap1š2v .at1š2v .bez1š2v .pār1š2v .iz1š2v .eks1š2v .vis1š2v .jā1s2t .ne1s2t .ie1s2t .no1s2t .pa1s2t .pie1s2t .sa1s2t .uz1s2t .aiz1s2t .ap1s2t .at1s2t .bez1s2t .pār1s2t .iz1s2t .eks1s2t .vis1s2t .jā1p2r .ne1p2r .ie1p2r .no1p2r .pa1p2r .pie1p2r .sa1p2r .uz1p2r .aiz1p2r .ap1p2r .at1p2r .bez1p2r .pār1p2r .iz1p2r .eks1p2r .vis1p2r .jā1g2ļ .ne1g2ļ .ie1g2ļ .no1g2ļ .pa1g2ļ .pie1g2ļ .sa1g2ļ .uz1g2ļ .aiz1g2ļ .ap1g2ļ .at1g2ļ .bez1g2ļ .pār1g2ļ .iz1g2ļ .eks1g2ļ .vis1g2ļ .jā1š2k .ne1š2k .ie1š2k .no1š2k .pa1š2k .pie1š2k .sa1š2k .uz1š2k .aiz1š2k .ap1š2k .at1š2k .bez1š2k .pār1š2k .iz1š2k .eks1š2k .vis1š2k .jā1p2s .ne1p2s .ie1p2s .no1p2s .pa1p2s .pie1p2s .sa1p2s .uz1p2s .aiz1p2s .ap1p2s .at1p2s .bez1p2s .pār1p2s .iz1p2s .eks1p2s .vis1p2s .jā1k2l .ne1k2l .ie1k2l .no1k2l .pa1k2l .pie1k2l .sa1k2l .uz1k2l .aiz1k2l .ap1k2l .at1k2l .bez1k2l .pār1k2l .iz1k2l .eks1k2l .vis1k2l .jā1g2r .ne1g2r .ie1g2r .no1g2r .pa1g2r .pie1g2r .sa1g2r .uz1g2r .aiz1g2r .ap1g2r .at1g2r .bez1g2r .pār1g2r .iz1g2r .eks1g2r .vis1g2r .jā1š2ķ .ne1š2ķ .ie1š2ķ .no1š2ķ .pa1š2ķ .pie1š2ķ .sa1š2ķ .uz1š2ķ .aiz1š2ķ .ap1š2ķ .at1š2ķ .bez1š2ķ .pār1š2ķ .iz1š2ķ .eks1š2ķ .vis1š2ķ .jā1p2n .ne1p2n .ie1p2n .no1p2n .pa1p2n .pie1p2n .sa1p2n .uz1p2n .aiz1p2n .ap1p2n .at1p2n .bez1p2n .pār1p2n .iz1p2n .eks1p2n .vis1p2n .jā1s2v .ne1s2v .ie1s2v .no1s2v .pa1s2v .pie1s2v .sa1s2v .uz1s2v .aiz1s2v .ap1s2v .at1s2v .bez1s2v .pār1s2v .iz1s2v .eks1s2v .vis1s2v .jā1s2pr .ne1s2pr .ie1s2pr .no1s2pr .pa1s2pr .pie1s2pr .sa1s2pr .uz1s2pr .aiz1s2pr .ap1s2pr .at1s2pr .bez1s2pr .pār1s2pr .iz1s2pr .eks1s2pr .vis1s2pr .jā1d2r .ne1d2r .ie1d2r .no1d2r .pa1d2r .pie1d2r .sa1d2r .uz1d2r .aiz1d2r .ap1d2r .at1d2r .bez1d2r .pār1d2r .iz1d2r .eks1d2r .vis1d2r .jā1p2l .ne1p2l .ie1p2l .no1p2l .pa1p2l .pie1p2l .sa1p2l .uz1p2l .aiz1p2l .ap1p2l .at1p2l .bez1p2l .pār1p2l .iz1p2l .eks1p2l .vis1p2l .jā1d2v .ne1d2v .ie1d2v .no1d2v .pa1d2v .pie1d2v .sa1d2v .uz1d2v .aiz1d2v .ap1d2v .at1d2v .bez1d2v .pār1d2v .iz1d2v .eks1d2v .vis1d2v .jā1š2l .ne1š2l .ie1š2l .no1š2l .pa1š2l .pie1š2l .sa1š2l .uz1š2l .aiz1š2l .ap1š2l .at1š2l .bez1š2l .pār1š2l .iz1š2l .eks1š2l .vis1š2l .jā1s2k .ne1s2k .ie1s2k .no1s2k .pa1s2k .pie1s2k .sa1s2k .uz1s2k .aiz1s2k .ap1s2k .at1s2k .bez1s2k .pār1s2k .iz1s2k .eks1s2k .vis1s2k .jā1s2kv .ne1s2kv .ie1s2kv .no1s2kv .pa1s2kv .pie1s2kv .sa1s2kv .uz1s2kv .aiz1s2kv .ap1s2kv .at1s2kv .bez1s2kv .pār1s2kv .iz1s2kv .eks1s2kv .vis1s2kv .jā1k2v .ne1k2v .ie1k2v .no1k2v .pa1k2v .pie1k2v .sa1k2v .uz1k2v .aiz1k2v .ap1k2v .at1k2v .bez1k2v .pār1k2v .iz1k2v .eks1k2v .vis1k2v .jā1z2v .ne1z2v .ie1z2v .no1z2v .pa1z2v .pie1z2v .sa1z2v .uz1z2v .aiz1z2v .ap1z2v .at1z2v .bez1z2v .pār1z2v .iz1z2v .eks1z2v .vis1z2v .jā1k2s .ne1k2s .ie1k2s .no1k2s .pa1k2s .pie1k2s .sa1k2s .uz1k2s .aiz1k2s .ap1k2s .at1k2s .bez1k2s .pār1k2s .iz1k2s .eks1k2s .vis1k2s .jā1p2t .ne1p2t .ie1p2t .no1p2t .pa1p2t .pie1p2t .sa1p2t .uz1p2t .aiz1p2t .ap1p2t .at1p2t .bez1p2t .pār1p2t .iz1p2t .eks1p2t .vis1p2t .jā1z2n .ne1z2n .ie1z2n .no1z2n .pa1z2n .pie1z2n .sa1z2n .uz1z2n .aiz1z2n .ap1z2n .at1z2n .bez1z2n .pār1z2n .iz1z2n .eks1z2n .vis1z2n .jā1k2r .ne1k2r .ie1k2r .no1k2r .pa1k2r .pie1k2r .sa1k2r .uz1k2r .aiz1k2r .ap1k2r .at1k2r .bez1k2r .pār1k2r .iz1k2r .eks1k2r .vis1k2r .jā1s2kr .ne1s2kr .ie1s2kr .no1s2kr .pa1s2kr .pie1s2kr .sa1s2kr .uz1s2kr .aiz1s2kr .ap1s2kr .at1s2kr .bez1s2kr .pār1s2kr .iz1s2kr .eks1s2kr .vis1s2kr .jā1f2r .ne1f2r .ie1f2r .no1f2r .pa1f2r .pie1f2r .sa1f2r .uz1f2r .aiz1f2r .ap1f2r .at1f2r .bez1f2r .pār1f2r .iz1f2r .eks1f2r .vis1f2r .jā1s2h .ne1s2h .ie1s2h .no1s2h .pa1s2h .pie1s2h .sa1s2h .uz1s2h .aiz1s2h .ap1s2h .at1s2h .bez1s2h .pār1s2h .iz1s2h .eks1s2h .vis1s2h .jā1ž2ņ .ne1ž2ņ .ie1ž2ņ .no1ž2ņ .pa1ž2ņ .pie1ž2ņ .sa1ž2ņ .uz1ž2ņ .aiz1ž2ņ .ap1ž2ņ .at1ž2ņ .bez1ž2ņ .pār1ž2ņ .iz1ž2ņ .eks1ž2ņ .vis1ž2ņ .jā1d2d .ne1d2d .ie1d2d .no1d2d .pa1d2d .pie1d2d .sa1d2d .uz1d2d .aiz1d2d .ap1d2d .at1d2d .bez1d2d .pār1d2d .iz1d2d .eks1d2d .vis1d2d .jā1š2pr .ne1š2pr .ie1š2pr .no1š2pr .pa1š2pr .pie1š2pr .sa1š2pr .uz1š2pr .aiz1š2pr .ap1š2pr .at1š2pr .bez1š2pr .pār1š2pr .iz1š2pr .eks1š2pr .vis1š2pr .jā1v2j .ne1v2j .ie1v2j .no1v2j .pa1v2j .pie1v2j .sa1v2j .uz1v2j .aiz1v2j .ap1v2j .at1v2j .bez1v2j .pār1v2j .iz1v2j .eks1v2j .vis1v2j .jā1f2j .ne1f2j .ie1f2j .no1f2j .pa1f2j .pie1f2j .sa1f2j .uz1f2j .aiz1f2j .ap1f2j .at1f2j .bez1f2j .pār1f2j .iz1f2j .eks1f2j .vis1f2j .jā1p2j .ne1p2j .ie1p2j .no1p2j .pa1p2j .pie1p2j .sa1p2j .uz1p2j .aiz1p2j .ap1p2j .at1p2j .bez1p2j .pār1p2j .iz1p2j .eks1p2j .vis1p2j .jā1b2ļ .ne1b2ļ .ie1b2ļ .no1b2ļ .pa1b2ļ .pie1b2ļ .sa1b2ļ .uz1b2ļ .aiz1b2ļ .ap1b2ļ .at1b2ļ .bez1b2ļ .pār1b2ļ .iz1b2ļ .eks1b2ļ .vis1b2ļ .jā1g2n .ne1g2n .ie1g2n .no1g2n .pa1g2n .pie1g2n .sa1g2n .uz1g2n .aiz1g2n .ap1g2n .at1g2n .bez1g2n .pār1g2n .iz1g2n .eks1g2n .vis1g2n .jā1h2r .ne1h2r .ie1h2r .no1h2r .pa1h2r .pie1h2r .sa1h2r .uz1h2r .aiz1h2r .ap1h2r .at1h2r .bez1h2r .pār1h2r .iz1h2r .eks1h2r .vis1h2r .jā1s2n .ne1s2n .ie1s2n .no1s2n .pa1s2n .pie1s2n .sa1s2n .uz1s2n .aiz1s2n .ap1s2n .at1s2n .bez1s2n .pār1s2n .iz1s2n .eks1s2n .vis1s2n .jā1ž2m .ne1ž2m .ie1ž2m .no1ž2m .pa1ž2m .pie1ž2m .sa1ž2m .uz1ž2m .aiz1ž2m .ap1ž2m .at1ž2m .bez1ž2m .pār1ž2m .iz1ž2m .eks1ž2m .vis1ž2m .jā1d2ž .ne1d2ž .ie1d2ž .no1d2ž .pa1d2ž .pie1d2ž .sa1d2ž .uz1d2ž .aiz1d2ž .ap1d2ž .at1d2ž .bez1d2ž .pār1d2ž .iz1d2ž .eks1d2ž .vis1d2ž .jā1k2c .ne1k2c .ie1k2c .no1k2c .pa1k2c .pie1k2c .sa1k2c .uz1k2c .aiz1k2c .ap1k2c .at1k2c .bez1k2c .pār1k2c .iz1k2c .eks1k2c .vis1k2c .jā1k2ņ .ne1k2ņ .ie1k2ņ .no1k2ņ .pa1k2ņ .pie1k2ņ .sa1k2ņ .uz1k2ņ .aiz1k2ņ .ap1k2ņ .at1k2ņ .bez1k2ņ .pār1k2ņ .iz1k2ņ .eks1k2ņ .vis1k2ņ .jā1š2m .ne1š2m .ie1š2m .no1š2m .pa1š2m .pie1š2m .sa1š2m .uz1š2m .aiz1š2m .ap1š2m .at1š2m .bez1š2m .pār1š2m .iz1š2m .eks1š2m .vis1š2m .jā1g2v .ne1g2v .ie1g2v .no1g2v .pa1g2v .pie1g2v .sa1g2v .uz1g2v .aiz1g2v .ap1g2v .at1g2v .bez1g2v .pār1g2v .iz1g2v .eks1g2v .vis1g2v .jā1h2l .ne1h2l .ie1h2l .no1h2l .pa1h2l .pie1h2l .sa1h2l .uz1h2l .aiz1h2l .ap1h2l .at1h2l .bez1h2l .pār1h2l .iz1h2l .eks1h2l .vis1h2l .jā1k2ļ .ne1k2ļ .ie1k2ļ .no1k2ļ .pa1k2ļ .pie1k2ļ .sa1k2ļ .uz1k2ļ .aiz1k2ļ .ap1k2ļ .at1k2ļ .bez1k2ļ .pār1k2ļ .iz1k2ļ .eks1k2ļ .vis1k2ļ .jā1s2l .ne1s2l .ie1s2l .no1s2l .pa1s2l .pie1s2l .sa1s2l .uz1s2l .aiz1s2l .ap1s2l .at1s2l .bez1s2l .pār1s2l .iz1s2l .eks1s2l .vis1s2l .jā1t2v .ne1t2v .ie1t2v .no1t2v .pa1t2v .pie1t2v .sa1t2v .uz1t2v .aiz1t2v .ap1t2v .at1t2v .bez1t2v .pār1t2v .iz1t2v .eks1t2v .vis1t2v .jā1š2ņ .ne1š2ņ .ie1š2ņ .no1š2ņ .pa1š2ņ .pie1š2ņ .sa1š2ņ .uz1š2ņ .aiz1š2ņ .ap1š2ņ .at1š2ņ .bez1š2ņ .pār1š2ņ .iz1š2ņ .eks1š2ņ .vis1š2ņ .jā1š2p .ne1š2p .ie1š2p .no1š2p .pa1š2p .pie1š2p .sa1š2p .uz1š2p .aiz1š2p .ap1š2p .at1š2p .bez1š2p .pār1š2p .iz1š2p .eks1š2p .vis1š2p .jā1d2z .ne1d2z .ie1d2z .no1d2z .pa1d2z .pie1d2z .sa1d2z .uz1d2z .aiz1d2z .ap1d2z .at1d2z .bez1d2z .pār1d2z .iz1d2z .eks1d2z .vis1d2z .jā1f2l .ne1f2l .ie1f2l .no1f2l .pa1f2l .pie1f2l .sa1f2l .uz1f2l .aiz1f2l .ap1f2l .at1f2l .bez1f2l .pār1f2l .iz1f2l .eks1f2l .vis1f2l .jā1k2n .ne1k2n .ie1k2n .no1k2n .pa1k2n .pie1k2n .sa1k2n .uz1k2n .aiz1k2n .ap1k2n .at1k2n .bez1k2n .pār1k2n .iz1k2n .eks1k2n .vis1k2n .jā1p2ļ .ne1p2ļ .ie1p2ļ .no1p2ļ .pa1p2ļ .pie1p2ļ .sa1p2ļ .uz1p2ļ .aiz1p2ļ .ap1p2ļ .at1p2ļ .bez1p2ļ .pār1p2ļ .iz1p2ļ .eks1p2ļ .vis1p2ļ .jā1s2pļ .ne1s2pļ .ie1s2pļ .no1s2pļ .pa1s2pļ .pie1s2pļ .sa1s2pļ .uz1s2pļ .aiz1s2pļ .ap1s2pļ .at1s2pļ .bez1s2pļ .pār1s2pļ .iz1s2pļ .eks1s2pļ .vis1s2pļ .jā1s2kl .ne1s2kl .ie1s2kl .no1s2kl .pa1s2kl .pie1s2kl .sa1s2kl .uz1s2kl .aiz1s2kl .ap1s2kl .at1s2kl .bez1s2kl .pār1s2kl .iz1s2kl .eks1s2kl .vis1s2kl .jā1k2b .ne1k2b .ie1k2b .no1k2b .pa1k2b .pie1k2b .sa1k2b .uz1k2b .aiz1k2b .ap1k2b .at1k2b .bez1k2b .pār1k2b .iz1k2b .eks1k2b .vis1k2b .jā1s2m .ne1s2m .ie1s2m .no1s2m .pa1s2m .pie1s2m .sa1s2m .uz1s2m .aiz1s2m .ap1s2m .at1s2m .bez1s2m .pār1s2m .iz1s2m .eks1s2m .vis1s2m .jā1m2n .ne1m2n .ie1m2n .no1m2n .pa1m2n .pie1m2n .sa1m2n .uz1m2n .aiz1m2n .ap1m2n .at1m2n .bez1m2n .pār1m2n .iz1m2n .eks1m2n .vis1m2n .jā1š2n .ne1š2n .ie1š2n .no1š2n .pa1š2n .pie1š2n .sa1š2n .uz1š2n .aiz1š2n .ap1š2n .at1š2n .bez1š2n .pār1š2n .iz1š2n .eks1š2n .vis1š2n .jā1v2r .ne1v2r .ie1v2r .no1v2r .pa1v2r .pie1v2r .sa1v2r .uz1v2r .aiz1v2r .ap1v2r .at1v2r .bez1v2r .pār1v2r .iz1v2r .eks1v2r .vis1v2r .jā1b2l .ne1b2l .ie1b2l .no1b2l .pa1b2l .pie1b2l .sa1b2l .uz1b2l .aiz1b2l .ap1b2l .at1b2l .bez1b2l .pār1b2l .iz1b2l .eks1b2l .vis1b2l 2b3dams. 2c3dams. 2č3dams. 2d3dams. 2f3dams. 2g3dams. 2ģ3dams. 2h3dams. 2j3dams. 2k3dams. 2ķ3dams. 2l3dams. 2ļ3dams. 2m3dams. 2n3dams. 2ņ3dams. 2p3dams. 2r3dams. 2s3dams. 2š3dams. 2t3dams. 2v3dams. 2z3dams. 2ž3dams. 2b3da3ma. 2c3da3ma. 2č3da3ma. 2d3da3ma. 2f3da3ma. 2g3da3ma. 2ģ3da3ma. 2h3da3ma. 2j3da3ma. 2k3da3ma. 2ķ3da3ma. 2l3da3ma. 2ļ3da3ma. 2m3da3ma. 2n3da3ma. 2ņ3da3ma. 2p3da3ma. 2r3da3ma. 2s3da3ma. 2š3da3ma. 2t3da3ma. 2v3da3ma. 2z3da3ma. 2ž3da3ma. 2b3da3mies. 2c3da3mies. 2č3da3mies. 2d3da3mies. 2f3da3mies. 2g3da3mies. 2ģ3da3mies. 2h3da3mies. 2j3da3mies. 2k3da3mies. 2ķ3da3mies. 2l3da3mies. 2ļ3da3mies. 2m3da3mies. 2n3da3mies. 2ņ3da3mies. 2p3da3mies. 2r3da3mies. 2s3da3mies. 2š3da3mies. 2t3da3mies. 2v3da3mies. 2z3da3mies. 2ž3da3mies. 2b3da3mās. 2c3da3mās. 2č3da3mās. 2d3da3mās. 2f3da3mās. 2g3da3mās. 2ģ3da3mās. 2h3da3mās. 2j3da3mās. 2k3da3mās. 2ķ3da3mās. 2l3da3mās. 2ļ3da3mās. 2m3da3mās. 2n3da3mās. 2ņ3da3mās. 2p3da3mās. 2r3da3mās. 2s3da3mās. 2š3da3mās. 2t3da3mās. 2v3da3mās. 2z3da3mās. 2ž3da3mās. 2b3gans. 2c3gans. 2č3gans. 2d3gans. 2f3gans. 2g3gans. 2ģ3gans. 2h3gans. 2j3gans. 2k3gans. 2ķ3gans. 2l3gans. 2ļ3gans. 2m3gans. 2n3gans. 2ņ3gans. 2p3gans. 2r3gans. 2s3gans. 2š3gans. 2t3gans. 2v3gans. 2z3gans. 2ž3gans. 2b3ga3na. 2c3ga3na. 2č3ga3na. 2d3ga3na. 2f3ga3na. 2g3ga3na. 2ģ3ga3na. 2h3ga3na. 2j3ga3na. 2k3ga3na. 2ķ3ga3na. 2l3ga3na. 2ļ3ga3na. 2m3ga3na. 2n3ga3na. 2ņ3ga3na. 2p3ga3na. 2r3ga3na. 2s3ga3na. 2š3ga3na. 2t3ga3na. 2v3ga3na. 2z3ga3na. 2ž3ga3na. 2b3nieks. 2c3nieks. 2č3nieks. 2d3nieks. 2f3nieks. 2g3nieks. 2ģ3nieks. 2h3nieks. 2j3nieks. 2k3nieks. 2ķ3nieks. 2l3nieks. 2ļ3nieks. 2m3nieks. 2n3nieks. 2ņ3nieks. 2p3nieks. 2r3nieks. 2s3nieks. 2š3nieks. 2t3nieks. 2v3nieks. 2z3nieks. 2ž3nieks. 2b3nie3ce. 2c3nie3ce. 2č3nie3ce. 2d3nie3ce. 2f3nie3ce. 2g3nie3ce. 2ģ3nie3ce. 2h3nie3ce. 2j3nie3ce. 2k3nie3ce. 2ķ3nie3ce. 2l3nie3ce. 2ļ3nie3ce. 2m3nie3ce. 2n3nie3ce. 2ņ3nie3ce. 2p3nie3ce. 2r3nie3ce. 2s3nie3ce. 2š3nie3ce. 2t3nie3ce. 2v3nie3ce. 2z3nie3ce. 2ž3nie3ce. 2b3nī3ca. 2c3nī3ca. 2č3nī3ca. 2d3nī3ca. 2f3nī3ca. 2g3nī3ca. 2ģ3nī3ca. 2h3nī3ca. 2j3nī3ca. 2k3nī3ca. 2ķ3nī3ca. 2l3nī3ca. 2ļ3nī3ca. 2m3nī3ca. 2n3nī3ca. 2ņ3nī3ca. 2p3nī3ca. 2r3nī3ca. 2s3nī3ca. 2š3nī3ca. 2t3nī3ca. 2v3nī3ca. 2z3nī3ca. 2ž3nī3ca. 2b3ša3na. 2c3ša3na. 2č3ša3na. 2d3ša3na. 2f3ša3na. 2g3ša3na. 2ģ3ša3na. 2h3ša3na. 2j3ša3na. 2k3ša3na. 2ķ3ša3na. 2l3ša3na. 2ļ3ša3na. 2m3ša3na. 2n3ša3na. 2ņ3ša3na. 2p3ša3na. 2r3ša3na. 2s3ša3na. 2š3ša3na. 2t3ša3na. 2v3ša3na. 2z3ša3na. 2ž3ša3na. 2b3ša3nās. 2c3ša3nās. 2č3ša3nās. 2d3ša3nās. 2f3ša3nās. 2g3ša3nās. 2ģ3ša3nās. 2h3ša3nās. 2j3ša3nās. 2k3ša3nās. 2ķ3ša3nās. 2l3ša3nās. 2ļ3ša3nās. 2m3ša3nās. 2n3ša3nās. 2ņ3ša3nās. 2p3ša3nās. 2r3ša3nās. 2s3ša3nās. 2š3ša3nās. 2t3ša3nās. 2v3ša3nās. 2z3ša3nās. 2ž3ša3nās. 2b3ta3la. 2c3ta3la. 2č3ta3la. 2d3ta3la. 2f3ta3la. 2g3ta3la. 2ģ3ta3la. 2h3ta3la. 2j3ta3la. 2k3ta3la. 2ķ3ta3la. 2l3ta3la. 2ļ3ta3la. 2m3ta3la. 2n3ta3la. 2ņ3ta3la. 2p3ta3la. 2r3ta3la. 2s3ta3la. 2š3ta3la. 2t3ta3la. 2v3ta3la. 2z3ta3la. 2ž3ta3la. 2b3tu3ve. 2c3tu3ve. 2č3tu3ve. 2d3tu3ve. 2f3tu3ve. 2g3tu3ve. 2ģ3tu3ve. 2h3tu3ve. 2j3tu3ve. 2k3tu3ve. 2ķ3tu3ve. 2l3tu3ve. 2ļ3tu3ve. 2m3tu3ve. 2n3tu3ve. 2ņ3tu3ve. 2p3tu3ve. 2r3tu3ve. 2s3tu3ve. 2š3tu3ve. 2t3tu3ve. 2v3tu3ve. 2z3tu3ve. 2ž3tu3ve. .jā3a2 .ne3a2 .ie3a2 .no3a2 .pa3a2 .pie3a2 .sa3a2 .uz3a2 .aiz3a2 .ap3a2 .at3a2 .bez3a2 .pār3a2 .iz3a2 .eks3a2 .vis3a2 .jā3ā2 .ne3ā2 .ie3ā2 .no3ā2 .pa3ā2 .pie3ā2 .sa3ā2 .uz3ā2 .aiz3ā2 .ap3ā2 .at3ā2 .bez3ā2 .pār3ā2 .iz3ā2 .eks3ā2 .vis3ā2 .jā3e2 .ne3e2 .ie3e2 .no3e2 .pa3e2 .pie3e2 .sa3e2 .uz3e2 .aiz3e2 .ap3e2 .at3e2 .bez3e2 .pār3e2 .iz3e2 .eks3e2 .vis3e2 .jā3ē2 .ne3ē2 .ie3ē2 .no3ē2 .pa3ē2 .pie3ē2 .sa3ē2 .uz3ē2 .aiz3ē2 .ap3ē2 .at3ē2 .bez3ē2 .pār3ē2 .iz3ē2 .eks3ē2 .vis3ē2 .jā3i2 .ne3i2 .ie3i2 .no3i2 .pa3i2 .pie3i2 .sa3i2 .uz3i2 .aiz3i2 .ap3i2 .at3i2 .bez3i2 .pār3i2 .iz3i2 .eks3i2 .vis3i2 .jā3ī2 .ne3ī2 .ie3ī2 .no3ī2 .pa3ī2 .pie3ī2 .sa3ī2 .uz3ī2 .aiz3ī2 .ap3ī2 .at3ī2 .bez3ī2 .pār3ī2 .iz3ī2 .eks3ī2 .vis3ī2 .jā3o2 .ne3o2 .ie3o2 .no3o2 .pa3o2 .pie3o2 .sa3o2 .uz3o2 .aiz3o2 .ap3o2 .at3o2 .bez3o2 .pār3o2 .iz3o2 .eks3o2 .vis3o2 .jā3u2 .ne3u2 .ie3u2 .no3u2 .pa3u2 .pie3u2 .sa3u2 .uz3u2 .aiz3u2 .ap3u2 .at3u2 .bez3u2 .pār3u2 .iz3u2 .eks3u2 .vis3u2 .jā3ū2 .ne3ū2 .ie3ū2 .no3ū2 .pa3ū2 .pie3ū2 .sa3ū2 .uz3ū2 .aiz3ū2 .ap3ū2 .at3ū2 .bez3ū2 .pār3ū2 .iz3ū2 .eks3ū2 .vis3ū2 .jā3ie1 .jā3iz1 .jā3no1 .ne3aiz1 .ne3ap1 .ne3ie1 .ne3at1 .ne3in1 .ne3iz1 .ne3sa .ne3uz1 .priek2š1 4d5ze1me .tur2p1m il2k1tie .spil2g1t mē1ne2š1 1pa1d2smit g2š1gal k2š1gal tran2s 1port vēs2t1n vēs2t1k pa2t3stā pa2s2t3k pa2s2t3m pa2s2t2s. pa2r2k2s. pa2r3ket sa2ls. sa2lds. sa2l2d1 pir2m1r pir2m1k pir2m2s1 ot2r1r2 ot2r1k2 ir2k3l ir2k3ļ .adā2m3 .ai4z5 ak3me4ņ3 apak2š3 ap1au kār2t3n aug2s2t3 .at3e2j bal2t3ma .vie2n1}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nn.pat0000644000175000017500000057063511761001300024664 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-nn.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z å æ è é ê ò ó ô ø \patterns{ .a4 .aa4 .ab4ba .ab7be .ab6s5t .ac6tin .adel4s .ad8la. .ad6le. .ad2r .ad1s2 .af7f .af5t4 .af5f8u .ag6na. .ag6ne. .ag4r .ai2 .a6k .ak6ka. .ak6ke. .ak3kl .ak3kr .ak6ne. .ak6r .ak8sa. .ak4se. .ak6s3t .ak6ta .ak4te. .akte4r .akter5e .ak5tr .akva7 .a6l .albu5en .alfa3 .al4ge. .al5gi .al6ka. .al4ke. .al4kom .al4la. .al4le. .al5leg .al5lo .all5s6 .al4ma. .al8me. .al5m6in .al4na .alpe5 .al6s7k .als5o .alt4a .al4ta. .al5tar .al4te. .alt3o .al6ve. .am7b .a6me .am6ma. .am4me. .am4s4 .am6ta .a6n .ana3b .an4da. .an4de. .an5d4ra .an4d5ø .and6ø6v .an3er .anes5 .an4ga. .an3ge .an4ge. .ange4s .an4ja. .an4ka. .an4ke. .an4la. .an3n .an4na. .an7nal .ann4e .an4ne. .an5s8 .an4sa. .an4se. .ant2 .an4ta. .an4te. .an5tem .an5tep .an4ti. .an6tin .an4tis .an4tiv .ap8lan .ap1p6 .ap8t .arbi5 .ar6de. .are4o7 .ar4ge. .ar5ges .ari6a .ari8e .arie5ne .ar5ka .ar8ka. .arlan9 .ar4me. .ar7mea .ar4na. .ar3ne .ar4ne. .ar5nes .ar6ra. .ar6r7u .ar6ta. .ar4te. .ar3t4h .ar9ti .ar6va. .ar4ve. .ar4ved .ar4ver .arvi6 .a6s .as8ka .as4ke. .as5kese .as4le. .as6pa. .as5s .ast5ru .at4h .at4ki .at4le. .at4na. .at2o4 .at3s .atte4 .att6r .a5ty .au8de .au6e .au8ga .au4ge .au4ka. .au8le. .au4r .au6sa. .au6se. .aus9k .au4sp .avi2 .av7i6d .av7inde .av4la. .av4le. .av7s6 .b6 .ba6by .ba6la. .ba4le. .ba4ne. .ban4k3l .ba4re. .ba4ri. .ba8te. .be4de. .bede4n .be6d5ene .be4d5et .be8di. .be3e4d .be6ke. .be4la. .be9nar .be4ne. .be6ra. .be6re. .be4res .ber6ett .be8ri. .be7ska .be6sten .be4ta. .be6te. .be5t4v .bi6de. .bi6en .bi4le. .bilet5 .bi6t3r .bl4 .bla4d .ble4k3 .ble5k4e .blek4k3f .blekk3s4t6 .blekk9s8v4 .bling5 .bo8da .bo8de. .bogs8 .bok5 .bo4k4en. .bo8la .bon2 .bo4na. .bor6t5 .bort6e .bor8ti8 .bort9r .brudd7s6 .bruddså7 .bu6da. .bu3d6r .bu4et .bul4k5 .bus6sy .by6de. .by8ta. .bæ2 .bø6k5a .bø8nen .bø8ner .c4 .ca4en. .car4s5 .ca6se .ce6b .cos1 .co4st .d6 .da4ge. .da4le. .dags6e .da2m .da4ne. .da4ta .dau3s .deka9r .deko7d .de4le. .de4l5ei .del5s6 .de4mi. .demo7e .den5sl .de4re. .de4r5et .de4ri. .de6r3i4 .de7r4i5v .de4r5om .de8ru .de6s5m .de4so .de4sto .de4u .devi5s .di2a .di5e4l .di6er .di4et. .di9f6t .di4ne. .dings7a .di4sk .di8s3t .do4en .do4er .do8et .dome5 .do4ra .do6re. .drau4m .ds4 .du4a .du4en. .du4er .duft3 .du4ge. .duk3n .du4se. .du4st .dy4re. .dø6la. .dø6r3 .dø7r4a .dø7r4e .dø4ve. .då5ren .då7ret .e6 .eb4ba .ecu6 .ed4da .ed4le. .efo7 .ef4ta .efta5s .ef6ter .eg8de. .ege2 .ege5l .eg6ga. .eg4ge. .eg4gel .eg8la. .eg4le. .eg6na. .eg4ne. .ego7t8 .egs4 .eg8se. .eg5si .ei2 .eid5a .ei5den .ei4ga. .ei7ger .eik5a .ei4ke. .ei3l .ei3m .ei8ma. .ei8me. .ein7as .ei3ni .ein5og5 .ein5s6ta .ein8s7to .ei9rar .ei5res .eir9u .ei5te .eit9r .ekk4o .ek4le. .ek3li .ek6ne. .ek4r .ek8sa. .ek3se .ek8se. .ek4sp .eks6pi .eks3t4 .ek5s4ta .ek8ta .ek4te. .ek7to .el8da. .el4de. .el4g5r .eli5ne .el3k .el5l .el6s .els6a .els4kl .els6t .el6ta. .el6te. .elve7l8 .el6veg .em3b2 .emfa9 .em4ma. .em8me. .em6na. .em5p .en5a .en4da. .en4de. .end5r .en4ga. .en6gav .en3ge .en4ge. .en6g5r .engs6 .en6ka .en4ke. .en5og5 .en6sa .en4se. .en5so .en3sp .en5t .en6te. .ent4r .en6t5ra .ent8re .en3ø4 .ep6t .er8a .er4e .er4g5r .er4ke .er4la. .er4le. .er6ma. .er4me. .er4mek .er4na. .er6ta. .er4te. .es9ast .es1k .es3ka .es8ka. .es4ke. .es5l .es8la. .es8le. .es3p .es6pa. .es6r .es8sa. .es4se. .es4so .es5ta .es3te .es6te. .es7tet .es5ti .es6t6r .es7tu .et8la. .et8le. .et4na .et4ne. .et4s .et8sa. .et5s4e .et6se. .ets4i .et1te4 .et6ter5 .et6ti .euro5 .ev8ja .ev4je. .ev4ne. .ex4 .f4 .fa2e .fag3s4 .fa4ne. .fan3t4o .fe4e .fei8e .feil5i .fe2l .fela9 .fel5l .fel4ta .fe4ma .fe8me .fem5o6g5 .fem5t .fer8ro .fer6s .fe8sl .fe8st5 .fes3t6e .fett5a .fi4b5 .fi6a .fi4le. .fire5o6g5 .fis6k .fjel4 .fjor4d3 .fla4t5o .fo4bi. .fol2 .fo2r .for3d6ri .for7d6ra .for5en. .form5s .for7s6o .fre6e .fri5e6re .fug2 .fu6ge. .ful2 .fu8se. .fy8se .fø8rel .g6 .gaf7 .ga4le. .ga8li. .ga4me .ga4ne. .gang5s4 .gas4 .gas5ta .ga2t .ga4ve. .ga9vee .ge2a .gel4e .ge3ne .ge6ni5 .gen5s .ge4o .ge4st .ge5s6tap .ge9sv .gha5 .gift5s .gi4n .gi4s .gis7p .gi8v3a .gje8n7 .gl6 .glo6i .glo9v .gly5s .glø9se .gnå7la .go5des .gos7 .gra4v3end .grei4e .grunn5s .grus5s .gu4de. .gud3v4 .gu4lat .gus1 .gu4tu. .gø2 .gås4e5 .gå4v .h4 .hai5s6 .ha6ka. .ha8ma. .hand5s6l .handsla9 .ha6v5ak .ha6vi .he4er. .hei5e .hel3u .he2n .hen3i2 .he6r5i6 .he6r5o6 .he9r6oe .he7r6oi .he7r6ol .he9r8os .he8ru .hes4s5 .het6s5 .het7s6e .he4t5 .he5t6e .hil4l .hi4n .hi6re. .ho2d .ho2e .ho4re. .ho5ren .ho7ret .ho8ta. .ho8va. .hu4di .hull7s .hu4s3en .hus6val .hvit3 .hvi3t4e .hvo8r5 .hy6ra. .hy4re. .høi5 .hø4re .hø4va .hø4ve. .høy6st5æ .hå8en. .hå8er .hånd5s6l .i2 .i3a4 .i3bl .i4da .ifø5re .ig8la. .ig4le. .i4her .ik2 .ik6k .ikke5 .ikkes8 .i3k6l .ik5t .ik8te. .i5kv .i3la .i4la. .i8lande .ilbo8da .il6d3r .il6de. .i3leg .i6les .il4ja .il6je. .il6ke. .il4le. .il6sk .il4te. .i6me .imø5te. .in5ad .in5de .in8ga. .in4ge. .in3gr .in6gri .in5k6 .in6ka. .in4n3 .in4ne. .in5n6e .in6n7eks .in6n7ets .in6n7ett .in4n3i .in5s .in7tes .io4na .io4nom .i4rer .ir7k8 .ir8ra. .ir6re. .i6sa .i3sc .i6se .is7k6 .isla8ga .is6lam .is4le. .is4let .is4me. .is8na. .is8ne. .is5pa .i5s8pe .is3s4 .is6sa. .is4se. .is5sk .ist6 .is8te. .i5sted .i5stem .is7ti .i6s7tj .i6s7tr .is8ut. .i6s5ø .i5ti .i3va .i4van .i4var. .i3ve .i4vel .i6ven .i4ver. .i4vere .iv8ra. .iv6re. .i3ø .j4 .ja4de. .ja6e .ja4ne .ja8se. .ja4va. .je2a .je2l .je2m .je5re .jern5s4 .je4ta .ji4 .jo8en. .jor8d7r .jor8d7s8 .jor8d7u .jo4se. .ju6a .ju6la .jule3 .ju4li3 .jø4dep .k6 .kaf2 .ka6la. .ka6li. .kal7t8 .kalve5l8 .ka5me .ka3na .ka4ne. .ka4p3r .ka4ra. .ka5r6a5v .ka6re. .ka5rin .kar8t7r .ka4te. .ka5t6h .kau9k .ka6va. .ka4ve. .ke6e .kel3 .kier3 .ki4na .ki7ni .kino3 .kir2 .ki4se. .ki8va. .ki6ve. .kje3de5 .kje4k .kjek7l .kjønn4 .kle4s .kli5ne .klo9va .kly7sa .klø7s8 .kna7se .kne4p3r .kne7r8 .ko6da. .ko7gr .ko4la .ko3le .ko8le. .kol5j .ko3pe .ko6pe. .kor6s5ed .ko4se. .ko6ta. .ko4te. .ko6ve. .kring5s .kru4s3t .ks6 .ku5f4l .ku4le .ku8ra. .ku4re. .ku8ta. .ku8te. .kva4r1a .kve9ka .kve5ke .ky8la. .ky4le. .ky6te. .kø3s .kå6pa .l6 .la4da. .la4de. .la4ga .la4ge. .la5ger .la4ma. .lapp8e7 .lap5s4e5 .la6ta. .la4te. .la3tr .la4va .la3ve .la4ve. .la6v5æ .le8ar .le4da. .le4de. .le4er .le6et .le2f .lef3l .lega5ta .le4ge. .le4gel .le8gi. .lei8e .lei7er. .lei4ve .le4ke. .le4k5r .lemu9 .le4ne. .le6o7 .le7s6a .le4se. .le4sek .le4ses .le4s5p .le2t .le7ta .let6tan .le2u3 .le3va .le4va. .le4ve. .le4ves .li8a .li4de. .li4e4 .li5ene .li2g .liga3 .li2k .lik5k6 .lik3o .lik3s4 .li4ma .link6 .li6ra .li4re. .li4sa .li4se. .li4ta. .li4te. .li5ti .li4ve. .li4v5en .liv8s7u6 .liv4s5v .lo5e6 .lo6ge. .lo8gi. .lo6g5r .lo4i .lo6na .lo8o .lo6ri .lo8sa. .lo4se. .lo6te .lo4va .lo3ve .lo4ve. .lu4d .lu2e .lu4na .lu6pa .lu4pe. .lu6ra. .lu4re. .lu6se. .lu4ta. .lu9tas .ly4de. .lyd3s .ly8e .ly8ge .ly4se. .ly4sk .ly5s6e .lys5s6 .ly8str .ly4te. .ly4ve. .lø8de. .lø6en. .lø8ne. .lø6pa. .lø4pe. .lø8s7a .lø8s7i .lø8s7m .lø8s7p .løv5i .løye5ne .lå8ma .lå5re .lå6re. .lå4te. .m8 .ma4ge. .mag9r .mah6 .ma3ka .ma4ke. .mak6t5at .makt5s .ma4le. .ma4li. .ma4na. .mande8l .ma4ne. .ma4ni. .ma4ra. .ma4re. .ma4ri. .mar8sj7ø .ma4sa. .ma4si .ma6st .ma8ta .ma6t8h .mat5t8o .ma4v .me4d3 .me6d5ei .me6d4i .me6d7in .me6d5r .mei5er. .mei5et .mek5l .me6la. .mel3l6o .me4l5ø .me4ne. .me3ri .me8s7al .me4sk .me2t6a3 .me3ta4ll .mes5ti .me4tri .mi6kj .mi4le. .mi4me. .mi4ni. .mi4nik .min4k3 .min5k4e .mi6s3t4 .mne6 .mo5de .mo6er .mo4na. .mo8ne. .mon4st .mons6t5r .mor5d6e .mo4re. .mor3t6a5 .mo4se. .mo4ta .mo4tek .mo4ter .mo4tr .mo5v .mu8ga .mu8ge. .mu6le. .mul5es .mur7 .mu5r8e .my8ka .my4ke. .mø4re. .mø5res .mø2t .må6la. .mål3o .n8 .nabo3 .na6ge. .nak2 .na8ke. .nan5s .na4r .na4sa. .nat2 .na3tr .nat6tr .ne4de. .ne4den .ne4d5i .ne4d3r .ned3s4 .ne4f5r .ne4g7 .nei5e .ne6k6r .ne4o7 .ne4o8n .ne8pa. .ne6pe. .ne2s .ne4t .ni8ar .ni6er .nig4l .ni4na. .ni5o6g5 .ni4pa. .ni6pe. .ni8sa .ni6se. .nita9 .ni4to .ni4va .no6de. .no6e .no8ka .no4me. .no8mi. .no4r .no8se .no8si. .no4va. .nu4e .ny5a .ny3o .ny8sa. .ny6se. .ny4te. .nær9ast. .næ4re. .nød4d .nø4re. .nå4de. .nå6le. .o6 .obo5e .od4da. .od4de. .odel8s7 .od8la. .od8le. .offsi6 .of4te. .of5teb .og4 .ok1k .ok8ka. .ok8ke .ok4se. .old3s .ol4ga. .oli5 .ol8la .ol8le. .oli5v6 .ol6m .om1 .om4ar. .om6bo. .om4e6n .om4gå. .om4me .om5s2 .on4de. .on5des .ond3s .on6kl .on6na .on8ne. .op5ar .op4pa .op4pe .opp7el .op4pi .opp3l .oppla8te. .opp5s6 .op7r .opt6 .or4da .or4de. .or4del .or4dr .ord5s4 .or5ga .or6ka. .or4ke. .or6me. .or4re. .ort6 .or6va .osa5 .os3el .os4k .os4s .os4te. .ot5r .ot7t8a .ot4ta. .ot4te. .ot4tes .ot3to .ot4to. .ove6 .over3 .overen6d .over3i4 .over5k8 .ov8re .ov5u .ov6ul .p6 .pa8la. .pa4le. .pal6i .pa8n7a .pa5n6e .pa6n7eu .pa5n6i .pa6re. .pe3do .pe4ke. .pek5t .pel4sj .pe4ne. .pe2p .pep3r .pe8ri7 .per6m7 .pe8sa. .pese5t .pe4st .ph2 .pi6le. .pi6p .pi9ra .pi2s .plen5g6 .plus6s5 .plus7s6e .plø7se .po4et .po3la .po8la. .po4le. .po4log .po2p1 .po2p2e .pop3p .po3p2u .po8ra .po6re. .po4res .po6st .po8ta. .po6tek .pro7k8 .ps2 .pøn3 .pøn9s6 .på5d6 .r6 .ra6da. .ra6et .ra4ga. .ra4ge. .ra4ja. .ra4ka .raks7 .ra2m .ra4na .ra4ne. .ran7s6a .ra6pa. .ra6pe. .rap4s .rap5s4e .rap5s4o4 .ra4re. .ra6sa. .ra7ti .ra6va. .ra4ve. .re4al .re6da. .re4de. .ree6l .rege4l .re4gi. .rei2 .rei7de .rei5er. .re4ins .re6ka. .re4ke. .re8klar .re8kle .re4kli .re6kn .re8le. .re4ma. .re4na. .re4ne. .ren6sk .ren4t .rep5s .res9s .re5s6tan .rett7s8kri .re4ve. .re4ves .rev9n .ri2d .ri8e .rie5ne .ri6ka. .ri6ma .ri4me. .ri4pa. .ri4pe. .ri4p5o .ri4sa. .ri4se. .ris5ko .ri4s3ø .ri4ta. .ri6te. .ri6va. .ri4ve. .ro4an .ro4de. .ro8di .ro4e .ro8ke. .ro4ma. .ro4mi .ro6pa .ro9par .ro3pe .ro4pe. .ro4sa .ro9sar .ro4se. .ro4sed .ro4ta. .ro4te. .ro4tek4 .ro8va .ro3ve .ro8ve. .ru8ga. .ru4ge. .rug9le .ru8ka .ru4na. .ru4ne. .runes6 .run7g .ru4se. .ru4sk .ru8va. .ru4ve. .ry2e .rye7ne .ry6ke. .rød2 .rød7s4 .rø8le. .rø4re. .rø1v .rø8va. .rø4ve. .røy7e .rå8da. .rå4de. .rå4en .rå8er. .råg8 .rå6ka. .rå4ke. .rå3k4l .rå6na. .rå8sa. .s6 .sa4ge. .sag6n .sa4la. .sa4le. .sa4me. .sa4mer .san6d7 .san7d8e .san7d8i .san8s7ku .sau6e .sch6 .se2b .se2e .se4i .se4k5l .sek4s5o6g5 .sel4v5 .sel4v5i6 .se6na. .se4ne. .sen7s .se4ra. .ser7vel .se4te. .sha9ke. .si2d .si6er .si6ga. .si4ge. .sik5k6e .si8la. .si4le. .si4ne. .sinn6s5 .si4ra. .si5str .si4va .si4ve. .sje4i .sju5o6g5 .sk6 .ska7ka .ska5ke .skat4 .skei5d .ski6n .skinns6 .sko7de. .skog5u .skritt9s8 .skudd5s6 .skuddså7 .sku6m5 .sky6f7la .skå5ra .sle6s5v .sli6b7r .slim5 .slotts5 .slu9ka .slu5ke. .slø5se .sma4s .smas5k .smi6g7r .smo9g .små3 .små7k6 .små9l .små5t4 .småt5t .sn4 .sne3 .sne4k .snitt5s6 .snø3k .soa8 .so8de .somma4 .son6a .sop4pa .sor4t5 .so4ta. .s8p6 .spa5ra .spe6e .spi9la .spri5s6 .st6 .sta9ka .sta5li .stat4s .sted4s .ste4i .stein7a8 .stein7s8 .stem4m .stev9na .sti7me .sto5ne .sto6ra .strek5s6 .stu8a .stu9va .stål5l6 .sund5s6 .su4ri .su5te .sv8 .sva5la .sva5ra. .sva5re .svar5s .sver8n .syd5 .sy3d6a .sy5d6e .sy6na. .sy4ne. .sy5ter .sy3ti .sy6v5 .sy6v5o6g5 .sz6 .sæ2 .sær1 .sær3e4g .sø8ka .sø4ke. .søl6v5 .sør3a .søye5 .søy6en .så5pen .så3re .t8 .ta8ke. .tak9r .tak5sk .tak9s8p .ta4la. .ta4le. .ta4les .tal4li .tam5m .tan5de .ta4p5r .ta4ra. .ta4re. .ta2s .te4e .te6i .tei9er .te8ke. .te4ma. .te6o .te8ne. .te4se. .te7si .te4sta .te4str .th2 .ti8a .tid5r .tid6s3 .ti4de. .ti4e .ti4g3r .ti4ki .ti4l5 .tili6 .ti4med .ti4na. .ti4ne. .ti4p5l .ti4s .to5arm .to6en. .to4er. .to6et. .tokk8 .to6le. .to6na. .to5o6g5 .to4ra. .to4re. .to6reb .tor6g5a .to3ro .torsk6e5 .tor4s5v .to5rye .to4str .tota9la. .to5t8 .to8te. .to6va .to4ve. .tr6 .tra7c .tre3b .tre7p .tre5o6g5 .tre6skja .tre3s8ko .tre7sl .tre3sp .tre5s6t .ts2 .tsj2 .tu4en. .tu6na .tu4ne. .tu6ra. .tu4re. .tu8ve. .tve6n .tver6r5a6 .två7g .ty6da. .ty4de. .ty8et .ty8re. .tyr8s9 .ty5ter .ty5ti .tæ4re. .tøv9d .tø6ve. .tø9ver .tø5vet .tå5ker .tå4le. .tåp9n .tå5ren .tå7ret .u5a6 .u1b2 .u6berg .u3d2 .u7de .u3e6 .u4er. .u6era .u4ere .uf4f .uf8sa .u4ga .u5gi .ug6la. .ug8n .u1i .ui6m .u1k6 .u4ka. .u6ke .u7kn .u3le .u4le. .ule8k .ulen4d .u6lende .u8lene .u6let .u4lin .ul6ka .ul4ke. .ul4la. .ul8le. .ul8ma. .ul4me. .ul4ne. .ul5t .ul6te .u1lu .ul4v5i .u1ly .u3lå .u5ma .umu7 .u2n .unde6ri .und5r .une8 .u5nek .u9net .un4ge. .un2n .unn3s .u3no .un4se. .un4t .u5nu .u1o .u1p .u4pi .up2l .up4p3 .u2ra .u5raf .ur6an .u6rane .ur4d .ure4n .u4ret. .u6rets .u2r2i .ur4ke .ur6na .ur4ne. .u1ro .ur1s .ur8ta .ur4te. .urte5m8 .ur6tet .u5rut .u3ry .u5rå .u1s2 .u4sa. .u4sas .u5se .u3ska .u5sn .u7sp .us3se .us6t4 .u7stek .u5stel .usy5r .u2t .uta4g .ut5age .u3tak .u4ten. .ut5esk .ut6e7sko .u4ti. .ut3kan6t5 .ut4ne. .u5tol .ut3o6v .ut6rer .ut6rov .u3trø .ut6se. .ut4si. .ut3t4 .u3tu .v6 .va4da. .va4de. .vai4 .va4ke. .va6les .valg5s .va4ne. .van4n5 .vann5s4 .va6reta .vari4e .var5sk .ve8en. .ve4ga. .ve6ge. .ve4g3i .veg3s4 .vei3g4 .vei3s .vei4ta .ve4l3 .ve5l4ar .ve6l5art .vel5d .ve4l3e .vel5l .ve5l4os .ve4l5ov .ve4ly .ve8læ .ve4ne. .ve4net .ve4ra. .ve4ras .ve6re. .vermo9 .vers4t .ver5ste .ve4sl .ve4st .vete5 .ve8te. .ve4ve. .vi4da. .vide4 .vi6de. .vi4d5å4 .vi2e .vi4ka. .vil5l6a5t .vi6ma. .vi8me. .ving7s .vin5n .vi4sa. .vi4se. .vi6seri .vi4ta. .vi4te. .vi5tr .vok4s3 .vok5s6e .vo6r .vo6ta. .vy4 .vye5ne .væ4ra .væ4re. .vå4d .vå4r3 .vårs6 .wa4r .we4g .wi6e .xe2 .y6 .ye4 .yn8da. .yn4de. .yn6ge. .yn8ka. .yn6ke. .yn4kv .yns2 .yp8pa. .yp4pe. .yr8ja. .yr8je. .yr8ka .yr4ke. .yrkes5 .yr6t .ys4 .ysterie8 .yt9ren .yt5t .yt6te. .yv6 .z4 .zj8 .æ8 .ære4s5a .ære4st .æt4te. .ø6 .øg8la .øg4le. .øi5 .øi6e .øko5 .øk6ta .øk4te. .øl3ed .øl3s6 .øl3v6 .øm4me. .øres8t .ør4je .ør5k .ør8na. .ør4ne. .ør6ski .ør9sm .ør3st .ør8ta .ørt9an .ør8te. .øs2 .øs4t .øv4d .øve4r5 .øve4r6s .øv4re. .øy6de. .øy2e .øyele8ge. .øy5ene .øy4n .øy6na .øy6ra .øy4re .øy8rer .øy4str .å2 .å6e .å6f .å6g .å6k4 .å8l .ål6t .ål8ut. .å8m .ån8da. .ån4de. .ånd6s5 .åp6na .års3k .å6se .ås3k .ås7l .ås3m .å3ste .ås5v .å4t .åt4te. .åtte5o6g5 .å6v a1ad 4aaf a3aft aa4g a1aks aak5v aa3la aa2m a1a2n a6an. aans9t a7antr a1ap aa4ri6 aarie9ne aar5n aa2s 3aase aa5t6h a1av a6bab ab7av ab9b8l ab4but abe4lei abel5t4 abe9na. abes9ka 4abev a5bh abie6 abi9er abi9la a4bist ab1l ab9lara ab4lok abl7u a5bo9a abo3b abo3e a3boer abo3kl a3bord 5aborte ab1r ab8re ab2sl abu5e a4buel a4buf a6busk a4bute a4by. a4byb a4byk aby3r 8ac aca5 a6ca. ache3a ack3 a1co 6ada a5dal ad5ant a4dart ad9da a2deb ade5i6s a2dek a4del a4d5elv a5dend a3dene a2deo a2dep a5der. aderle7 a2des a5de4ser a3desl a3det. a3dets 3adfer 1adg ad8ge adi4ene ad1j 1adju 2adl 1adm ad5n ado7a a4dob ad7opp 4ador a7dora ad5raf ad7ran a2dre ad7rel ad5rep ad3ret ad3rid ad1ro a7drø ad4s5amt ad4si adsle6ge. ad5s4let ads5te ad5s6tek ad3str ad5un 1adv adva5re 2adve a4dy. a4d5øy 2a1e2 4aea a4ed 8a7ede aed7r aek5t a4el. ae5la ae3li ael5o aen5t a3ep aes8ke. aes4t 6afa 6afc a4fe. afei5 af4fan af4fei affe3s af7fi. affi3d af5f4u af4i afia1 afi5an a2fib a6f5inn afi7re a4fiti a5fjo af9la. af9lar af3le af5li a4frik 6afo afo7ra. afo7r8e afore5ne afra5s 1afri afs1l aft5ei af4t5e4l af6t5o aft1s4 af5yr afø4r afø5ri 4aga a2gaa a5gae a4ganf agang7s8 a4gart a5gas. aga6ve. ag5de a7gelen a2gem 3a4gent age4r3a age6rek age5risk a7gers a5geru age5s2 a4geta a4gé ag5gar ag4gas ag5ge agg1s2 agg7u ag6gut a4gi. ag5id agi6s ag1la ag4lem ag6lesa ag5lå agmo8e agn5om 4ago ago5d8 ag1or a5gos a3got ag5ov ag7ras ag1re ag1ri 4a3gru ag1rå ag4samb ags4ang ag3s4ei ag4sel ag3sem ag5s6ing ag6sju ag4ska ags4kul ag2sl agsmå6la ags3tr ags3t2v ag2sy a6gu. agu3ay agå8va agå8ve. a1h a5hi ah4n5 ah4v ai1a4 ai3e2 ai3er. ai4is ai5ke. ai5ko ai9kv ai5ne a3ing a1inn ai4n5o4 ain8sm ai1ro ais4e ai4s3k aisk2h ai8sm ais6om ais5s ai5s4v ai5ve ai5ø a1j aja9d a7je a8je. ajes7 a4jé a4ji a6jl 6ak. a1ka 4aka. 1a2kad 6akaf ak3aks 6akan aka4o5 4akar ak6arb aka4t5r ak4au 2akd 2ake a9kec a2keh a3kei5 a6kek akel8e akelei9er ake5l4i ake4rek a4kerø ake5sm akes6p a8kete akhe6n 4a1ki a6kid a6kik ak7ind akis1 2a1kj akk6and ak5ke. ak3ken akk5erst ak4kes akki4 ak5kim ak4k5is ak6kj ak1ko akk3ol ak6k5ri ak1ku ak4kul ak4k5v 2ak1l ak3lev ak6lik ak6lus 6akn ak5ne a5kno 2a1ko ak5om. a5kon a7kos ak1o2v ak4pe6 akra8sa ak5reg akregi4 ak3res ak3ro. ak3roe ak1ru ak4s5and ak4sek akse3l4o ak4s5elv ak4ses ak7s6id 3aksje ak2s1k ak7sku ak6sl 4akso 4aksr aks5ti ak5stol aks4tr akst7ren 4aksu ak4tab ak4tai ak4tak akta6le. akt5all ak6tam ak6tans ak4tap ak4tas ak4tav ak4teg ak4tek ak5teme 4akth 7aktig ak5tit aktle6ge. ak2tr ak6tre akt3rå akt5s4la 5aktue ak8t7æ akut2 2akv ak3val ak5øl a5kå 8ala. al7adr ala4g ala9ga a5lagm alag8ra a5lah a1lai al3all al3a4me al3ana a3land a5lande. a5lane alan5gr al3anl al3anv ala4o ala5pr a5lar. a3lara a5laren al3ark a7larl 3a4larm al5arr a5lars al3art a7larv al3a4si 2alat ala7tr 4alau al5auk al1av ala4va al4ba. albo4g albu7er. 5album al3de al7der 4aldo ald3re 2ale a2lef a2leg a9leg. aleie6n a9l8eik a5leke a4leks a4leli a2lem al5e4mu al8en. a4l3enh a4l5en5tr ale4pos a7lept a4lered alere6de. a4le5ro a4leru ale1s2 ale7se a4lesk ale6s5kr a4lesl a6lesu a4leta a4le3te a2leu ale5v a4leva a4levi 3alfab 2alg. al3geb al2gu al4går al3ill a2lim a9lin. ali5na. a4l3ind a4l3ins al3int al9ja. al3je. alj5end al3jer al1jo al4jor al2j1u al1jø alj5ø6v al9kera alk7s6 alla4ga alla6ge. al4lap all5art al5lea alle6ge. al4lek al5len. all5erst alle3s4 al4lest al5let 3allia al4lid 5alli5e alli9ne al6list. al4lo3m all4sen all4sti al6lul al6løs. al4løse al8løst al6lå 8almal al6mek al4met 4aln a5lo. al1o4b a5loi al1om a1lon al3ope al7ord alori5 alo6rit al3ove alow7 alp2 al3ps 2als al7sed al9skap al7skare als1l als5lø al2sn al6spu als4te als6ter 6alsu alt6ak alta8le. al3ted al7tema 5alterna alte4t al4t5eta al4t5ete al4t3op a4l5u4k alul8la al5und alu8re. al5va. alv5aks alvak8se. al4ved al5v6er al8v9er8m alve5s al9ves. alvi8se al1vo alv3s 6a1ly a2l5y4te alø5se al3øv a1lå al7å6t a4mah ama5is a2mak a5maki am3aks a2mal am5ald a3man a3mar. a5mara a7mas. amaso7 3a4matø am4bar 3ambas am4bat am5be a2mei am3eie a3meis a2mek am3eks amen8de. amen4s3 amen6t7arv ame4ram a4meret 3a4meri 4amerin ame5u amhu7 2ami ami7na ami7ne amisk3 amis4ku am4lese am6lest am4mad 6amn. am4ned a2mo amo5e am1op am1or amo6ve am4pap am4pare amp5ei am8peria am6perie ampes6 amp7inn am2p3l am5p4let am4p4re am4pun am2på amru4 am5rå am1s am7s6ku ams4l amst6 am4s3tr ams9ut ams2v am4s5ve am2sø am3ti amti5da 5amtm am7tv am6ul am5yr am5øy 6ana. anak8te. ana3la anal4f 3analy 8anan a3nane a5nang anant8 4anar a6narb an5art ana3to 6an7au anaus7 an9av. 3anbef 4and. an4da5m6 anda5ta an4dek an5den anderle7 an9det 6ando an4dos 4ands and4sel and8send and7slet and5s6tre a2ned an5egg a4n5elv ane8l7u a2nem 2anen 2aner a8n7erme ane3ru a5nes. a4nest ane5sv an5e6tika a5netike an5e6tikk an5e4tis a2nev 3anfal anfø5re. ang4e an4ged an4g5enh ang5erme an8geste an4gi. 5angiv ang5of an5gos an4g9ra an4gre. an6gres an4gret an4g3ry ang4sm angs6tro angs8t9rå angst5y ang5sva ang6søy ang4t5re ang5t6ve an4gun an4gå. ania7 a6nib a4nisj 4aniv an4kana 4anki 4ankj an4kob an4kop an4kos an2k1r ankra8na. ank3re ank3ut 8an2kv an4kø an6k5å6 2anla anland6 anlø9pa ann5ans an6neme an5nen an5ner an5nid an4ninn an4nom 5annon an4nov ann4sei ann4sid ann6s7kå ann6sl ann3st ann5sta ann4s3u an4ny an2nø a3no. a9noa. ano6deb 2anog a7norm a6not a2no4v ano5va an3ove anri7ke ans5aft ansa7ka 4ansan 3ansat an4sek an4sent anseri8e9ne an4ses 3ansik ans5ind ans5ins an4ski an3skj ans4k3l ans6kun an5skø an6slø an4sn ans5or an4s3pi ansport7s6 an1st6 6anstar ans4te4 an8s7tu 6ans6ti 2ansu an9s6und 5ansunda 1an1sv 4ansve 6ansy an4så anta8la an5t6and an4tans an3ted ant5emi 5antenn an4tesl anti7kl an4tim an5toi ant5ord ant5rab ant7rom ant5ryg ant5s6 an4tul antus4t 2anu anus7a an5ut 3anven 6anvin 6any a4nya a2n1æ2 anær8 2anø a2nøk an7å a1o ao9a aog9 a2oi ao6k6 aon8de. ao2p ao4r a5pea a7pé a1pi a2pia ap1id a6pik a6pins a2pio api6r5 api7r6e api7se ap1j a1pla a5p6las ap3li ap9lo ap2ly 4apol a4pon a4poo apo3p apo5s4ti a2pot 3ap3par 4appar. 6appare app7esk ap5plas ap4ple ap5pli ap6pri ap3ra ap5ren ap5ret ap3rin ap2s1 apsa4 ap3sel apse4s ap8s9l a3psy ap4s5ø 8apu a6p5ut a1py ap7ø a3p8øls a5på. a1ra ara9bi ar5aks arak5t ar3alt a4rami 2aran a4ranor a4rans a4ranv 2arar a4r5ass ara5te. ar5aug ar7auk arau9ken ar7avh 1arb 2arba arba8ne. 6arbeh 4arben 6arbet 2arbi 4arbj 6arbl 2arbo arbo8da 2arbr 2arbu 2arby 2arbø 4arbå ar7deb ar6deli ardfø5re ard3re ard5sta a1re 1a2rea 4arear a4reb areba4r a2red a2ref a2rei are3in a2rek a6r5ekt a4rela ar7elek a4r6eli ar7emn a5remo. 3arena a6r5eng a4reni aren5tes a2reo a2rep a6rerel a4r5erfa a6rerk a4rero a6rerø a5res. ares8ka ar4et a7reta. a4rev ar7e6va ar3evn arev6ne. 8a1ré 6arf ar7g6h ar5g6i 6argj arg4l ar7go arg5stj 2a1ri aria7ne a3rib ariba9 ar5idr a4rim ar3inn ar3ins arins9k ar3int ari3se arise4a a4risto a2riv ar4kau ar3ke ar4ke5s ar5kha 3arkit 3arkiv ar4kle ar4k5løf ar6kod ark6ste ark4str ark7veg ar4køy arla4ga ar4map 5armbå ar4medi arme7t ar6metr ar4minf armle6ne. armå6la 2ar2n ar4nad ar4nal arneva7la ar3ni ar3no ar3nu ar3nå a1ro. aro8de. a5rok a1ron ar1op aro6pa a4r1o4r a1ros ar7ost a1rot ar3ove ar6ped ar9po arp5ret 1arra ar5ree ar7resk arri8e7 arrå6da 2ars arsa6ka ars5ans ar3sel ar6s5ers ar4sin ars5kam ar5skar ars5kes ars7kre ar4spr ars6tr ars4vei ars7æ arta4la arta6le. ar3te ar7tele 8artets art4ha. art4has ar4tika 6ar4tim 4artn 4arto ar4top 6artr art9ra ar6trin art6s5t arts5ø 6artu 8arty ar4tyv ar1ul ar1un ar5u6r a1rus ar5utb ar5utn arve3s ar6vete arvi8sa arvi8se. a1ry ar7æ6 arø8ve. ar1øy a1rå arå8de. ar7åp a6r5åt 6as. 4a1sa asab4 asak4 a4salo as6an as7aug asbe2 a1sc a2se. asea4 a2sed a2seg a2sek as4el ase5le a2sem a6senet a4senk a7seol a2se5s a6sest a4sete a2se3u as2h as5hu a4sib a2sip a2sir a7sis. asis5t a2siv as4ja a6sjett as5jor as3kar ask6et as5keti ask2i as5kis a5skj as5ko. as5koe a4s5kopi as3kor as3kot a1skr as7kra as3kul a5s6kula as6kule ask9u8t as4kv ask5øy as1l a5s4lag asla8ga as4lev as4lit a1so a4so. a2s5om as5ov as4pan as3pe as7pis as5pl as9sa. as4sab as4sal ass5ald ass5alt as4sam as5se. as4sed as4sek asseri7e6 as4serv as4ses as6sifr as5sing assi3s as4sit as2sj as6s1k assku6le. as2s3n as5so. asso9a as7sos. as6s1p as2s3t as4stan as4str ass5tru as2s1v as4sys as4søk as2s5å as1ta as6tab a6stande a4statu as5te. as3ted as4teg as4tek as4t5enh a1stj a9stof a5stok as5t6os ast5ov ast5ren as4tro as9tua astu8ve. ast5ø4v a1su asu3n asu9sa as1va a6sym asyn7d as7øye as5å 4at. 4ata1 a5taene at6af ata8ka. ata8la. a4tang ata9rar a6t7arv atas4 a5tas. atat8 a2tau at5avh atch5 a2tea a2tec at7edd a2tee a4tei at5eid at3eig ate3in a4teka ate5k8e ateke7ta a6t5ekte ate7le at3emb 4aten a5tene. a4teni a4tenu a2teo 4ater a5ter. a6terat a8terek a4teril a2tes a4t3ett at6e5u a4té 3atfer at4ha. at8has 4ati atik6ka atili5 ati5nea ati4rep ati8sta at3jo 5atlant atl9øy 3atmos at4nel ato5a ato5gr at1oi a2tom a6t5oppr a1tor a5tose a3to1v a1tra at5reg at3ren at3rer a4trif at3rin at5rot a9tru at5røs at5røy 2ats at3ser at7sje at7s6kat at7skj ats6kul at2s3ø 4att. at6tat 4at5te. at5tens attfø7re at4tid atti4s att5ise at3tit att1o att7o6p atto6v at1tr at4traf at4t3re at6trin att3s6k att5s8l att3sp att3sv at6tys at2t3ø2 a1tu atu5e4 a2tut at5v atvi5er. a3t3w a1ty atyr8ke. a5t6yv a1tø atør3s atø9se a4t5øy a3tå. a7tåa a1tåe at5år at5å4se at7åt8 4au. 8a8ua au9ar. 4au5b auba6ne. au3c au5da. au9det au4di. 4a6ue au7en au7er aue5re au3est au6e5ta au5e6te. au4gal au4gas au4gel augele8ge. 5aug2n 3augu au5i au5keli au5ket auk5la 1auk7s6 au5kve au6las au4lat aul5l aul8la au5lu au9men au6mo aum5s6k aum7s4t a5und au5rae aure5s au5ret au5ri aur5s6 au1ru auru4e au1sa aus9kj au6skr au1so aus5s au6s8tas aus8tett austi6s aus6t7ise aus6ton au5str au6stra au6stri au1su au4sun au2s5ø4 aut6a au3ta. au7tar au5te 1auto auto5v au3t4re au4ty 2aux a1va av5ab a5vae ava7g 6aval av3alv a4v3and av3ang a4v5anl 3a4van5s a9var. av3art avar6ta. 4avas avat6a 5avbi 1avd 3avdel 2a1ve a2ve3d2 a5vede. a7veil ave3in a2vek a4vela a4vele a5veleg avens4 a5ver. ave7ras aver5d a6verei a2ves a2vev 1avfa 1avg avi4ar 4a5vig a1vik avi9ke a1vin a4v5int 2avir 5avisa avi5sa. 3a6vise av5ising avis3t a5vit avlu9t avlø5se 6avn av7na av4nes a1vo a4vok avo3r avo4v av1r av4res av5ri av1sa av5seg avs2i avsko7g 3avsni av1s2p avspe9g4 avs4te av5su av1s2v 1avt avta9ka 2avu 1avvi av3øl 4a1vå a6v7å6l a1wa awat4 a5we awe9ne a1wi ay2a ay7ane. ay5ar ay9s8t a5y4t a5zu azz3o a1ø a7å6 1b4a ba3a baby5 ba4bys ba5cl ba2d ba4da. ba7dan b5add ba8de. ba4deb ba5den. ba7dens ba3di bad1s 4baf ba2k ba5kan7 ba3kar bakars7 ba3ken ba4k5end baken6de. ba3ker bake3s ba9ket. bak9ett ba3ki ba8ki. bak6kers bak6ko bak5kr 4bakr bak4re ba5kri bak3ro bak3sm bak5sp bak5s6ti bak5str bak7t6 bak1v ba3la bal7ak ba4les ba4li. bal3j bal4lag bal4lan bal4led bal4leg bal4lei bal4lev bal4lig bal6lov ball5s6 bal6læ ba1lo bal5t ba1lu ban4a ba4na. ba5nan ba5nar ban9da ba4nel ba4nes ban6kap ban4kor ban2k3u bantu5 ba3re baret5t ba3ri bari6e7n bark5s bar5skr bar5tr ba5ru ba5sen ba4seru ba4set ba3si ba2s1k bas6sak bas4san bassi4 bassis5 bas4so bas4st bass6tr ba2st ba7s8u ba1ta 2ba1tr bat6ti bau9la 6bav ba5z 2b1b b3ba b6bak b4b5arb b6base b3be. b4beb b4beda b2bef b4beg b6beh b2bei bb3eie bb5eig b2bek b6belo bbel6t3 bbelte4 b4bem b9bene. b2beo b3ber b4b5erf b4bes6 b7beska b6beta b6beten b4beti b6beto b6betr b2bev b8b1h b3bi bbi9e8 b4b5inn b2b1l bb7len bb5op bb5rek bbu9ra bb5ut. bb5ute b2by5 bby3e bby1k b4bø b6bå 2bc 2b1d b2dek b7den b4dep 1be be2au be4bo. bebo5er. bebo9k be4da. be9dar be3der bedi9e8 be4dre bed5red bed2s1 bedy9ra be1då3 2bee be5ed be6ef b4ef befa5re be3g bega7 be4ga. be4gi. be4gn be5go be4g5re. be4g5rene. be4gå. be6ha. beha7g behers7 4behu behå4r be6i be5ke be2k3i bek6kel bekke5r bek4kes bek6l 4beks be4l3ab bela9ga bel5eie bel5eig bel5ein be4lek beli9na beli9v belle5sa bel5let bel5læ be2l1o bel5s4p bel7s4t bel4tag bel4te5s bel4t3ø bel3u bel5v belæ5re belå7ne be4na be5nat be3ne 4bened be4nest ben5g be5ni ben5s4i ben5skj ben5sp ben5te 2bep b4er 4berai be7ras ber5d be4rep 8berest bere5te ber4ga ber4g5ende ber5ges berg3j berg3l berg3o ber4g3å be5rib beri5ke be7ris ber6kl ber5na ber5ne be1ro be4ro. bero9a berri6 ber5te ber5ti be1ru beru9sa berø5v b4e1s2 5bes. be4se. be5s4i 4besik 6besj bes5ke bes6k5n be3sn bes7ne 4be3so beso9v be5sp bes3s bes6s7a6 bes6sel bes7si bes7tens bes6tes be5stes. be6så 3b4et 5bet. be4tab be3te 4betei be7tes beto5ne be6trar be6tre. be4t3ri 4betu be4ty. beva5re be6ve. bevi5se. be9vo bev9r 6beå beån9 7bé 2b5f 6bg 2bh bhu1 1b4i bi5ak bi6bla bi5ce bi1d bi5dee bi8dé bid6r bidu8 bi5el bi6ele bi5erv 4bifa bi5g bi3ka bik1k bik6ki bi5k4l 4bi7kr bi6la. bi4l5ap bi4las bi4lau bi3let bilet5r bi4lin bil3j bil5la billa8ga bil5leg bil5m6 bil1o 6bi5m bi4nans bingo5 bin4gol bi7no 4b5int bio7 bi3o8m3s4 4bip bi4ri5 bi7ris. bir4ken bi1ro bis2a bi3se b5ish bis6hi bis7ke bi5s4la 8bisn bi4sp bis4p5i bis5se bi1st bi5s6ta bis4til bis5tru bi3s4v bi6ta. bi4te. bi5tes bi8ti. bi4tre bi6tri bjar3 bjek4t5o bjø6r 2b1k4 b5kh bl2 1b2lad blad3a bla6f3 bla8ga blak5r bla5me blan9da b4lank blan5ke b4lant b1lar b8larar b3lat bla4u b4lef blei8e5 blei5er b4lek ble4k3a ble5kes ble4mo b3ler ble7r6a b6lesa blesse9ne b4lest 2blet bli9ke bli5ma bli5me blings6i blis3s b5lj blja4 blo6dr 1blok blom5m b6lu blues3 blu9sa bly7gl blæ5re. blå5n blå3r blå7sa blå5se. 6b5m 6bn b3ne. b3ner b7nes. b7ni b2o boa5s4 bobba6ne. bob5by. bob9bye bo2bl bob7la bobs4 bo3de bo6din bo6d7r bo2dø 4boef 1boen bo2er bo4et. 2bo3f6 bo4gel bogn7 bog1s 2boh 2boj 3bok. bo2ka bo6kel bo4k3et bok1i bok1k bo6kop bo6k5ri 5bok1s boksi8da boks4p bo2ku bok3ve b4ol bol5eie bo7li boli7n bo7lo. bo5loi bo4l5o4r bol5s4p bolst6 1bomb bom4bel bom5m bo6mo bom1s4 bo5nap bon5ato 4bonn bon5ne bons4 bo5nus boo6 boom1 bo1p4 bo1ra bo4ra. bo6re. bo7rel bo3ren bo3ret bo4rete bo6ri. bo3ro bor6t7ef bor6tei bor4tes bor6t7et bor4ti bort5s6 b4o1s bose8te. 3boska bo2sl bos5se bo4sto 1bot bo4ta. bo4tak bo4tal bo6te. 2bo7to 4bot6r 4bot4v bou3c 4bo1v bow4e bo6y 4bp b7pl br8 1b4ra bra5ka brak5s bra5se bred5sp brei5e brei3s bret7te b6rev brevi9er. bre4vin bri5a b4rio b2ro bro9ar bro1s4 3b4ru bru5ke bruk4s3 bru4na bru7na. bru5nes bru5pl bru7ren bru5sa brus4l 1bry bryn4s 3b4rø brø5de bråe6 brå9ne brå5te. 6b1s bs4e b5s6e6a5m4 b4s5el b5s6i bsk4 b4sli b2sm b2s1of bs2t6 b6st7f b7s6v bså5 6b5t b7t6s 1b2u bu4ar 4bub bu3da bud5d6h bu3de 4bu3em bu4en. bu9ene bu4er. bue5s bu1i bu6is 6buki buk3l bu5la bu4le. bul3le bun7de bund4s3 bun8ge. bunk3r bunnla8ga bunn3s 2bu3o bu1p bu6ra. bu4re. 4bu3ro bu3ru bus6e bu4se. bus4h5e busk7ø bus6sek bus4sel bus6sent bus6set busse6te. bus6sj bus4sn bus4sp bus4st buss3v bu1st 4bustr 4busy bu1ta bu4tal bu7tem b5utg 4butst bu2tu bu1tø 4buv 6buø 2b1v 4b5w 1by bya2 by5al by9are by7dep by4en. by7ene by5ens by2er by3ers by4ge. byg3l 3byi by1lo 4bylø by5n by1re by6re. by1s 5bys. 4byse 6bysi 6bysp byst4 by4ste 4bysv by5tar by4te. by1tr 2by5v bæ5rar bæ6rar. bæ4re. bæ5ren bæ5rer. bæ5rere bæ5res. bæ5ret. bæ3ri bæ4r5is bæ3ru 1b4ø bø4e bø7ens bøf3 bø4kes bø6la. bø6le. bø2n bøne5 bøn6nes bøn7o bø6re. bør4s5k bør4sp børs3t børs8ta. børs3v bø5ta bø1v bøy7ar bøye5 bøy4ene bøy4es bøy4et 1b4å bå4de bå9des bå6e bå7ene bå4la bå1re bå6reg bå4rep bå4s3te bå6s7ti bå6t5j bå6to båt5r 1c4a cab4 ca4e ca5le ca5me ca5mo ca4pe. cap1r ca6pris ca3ra car5n ca5ro car4te. ca2sa3 ca6set cash5 ca5s4til cas5to ca1t cath5 ca3th6r ca4to. 6cb 4cc c1ci c2d cde6 cebo9 ce3d ce1i 1cel ce5le cel4les cel4lev 3cen. ce4ned ce4nee ce4nem ce4ne5s4 ce5nes. ce4net ce4nev 5cens cen4ti9m cen6to ce5o4 1cer cerba6ne. ce3re ce1ro5 cer3t 6ceru cest3o 2ch. cha5le 3cham4 cha7ne cha5t 2chb 4chei chel5s che7te chi4li 4ch3h 6ch5m 4chn ch5ne chom4 cho5s6 2chp 8chs 6cht ch1v ci1c 3cid ci2e cie8n cie2s5 cil5l ci3ne ci5ta 2c6k ck5ar. ck5art ck1en ck3er. ck4ere ck5e4t3 ck5et. cke8y5 ck1i ck1k ck1o2 ck7r ck5s2 cku6 ckup3 ck9ut c2l clai4r5 cly4 c1m cmini4 coa6 coat5 co6bid 1co4c 2cod 6cof 6cog co4la. co4lab co4lak co4la5r co2m co5ma com5t co6n5os con5s con7t co2o co7pa 2cor co3r6a co1re co4so 4cost co4ver c1pr cr8 cras4h crack4 cre2e creen7 cros2 5cru 4c4s 4c1t c6ta cty5 1cu 4cu. cu5la cu5le cu5lu cup1l cu6po cup1r cup7s cu4på 2cur cures4 cu6t cy2a cy6p7 cys3 c6z cæ5 1da 4daa 4daber 8dabo d5abs 6d5adel d4adg dadø4 dadør5 4daef 2daf 5dagb da4gev 4dagj dag7l da6go. da4g1r da6gun 4dagå 4dahe 5dahl da1i 2daka 4dako 4dakr dak4se. 4daktig da5kv 7d6al5j da1la da8la. da4las 6dalau dalbu8er 4d5ald da4les dal6so da1lu da4ma. da4man da3mas da4me. da3men 4d7ameri dame3s dame5t6 da3mo dam7pe 5dan. 6danal d8ane 9dani 2d1anl 3dann dan5neb 4danno 7dano d4ans. dan3sa dan4sel dan9s8kan 4dansv 9dant. 9danti 8dany 2da3o 2dap da3pe d3app 3dar. 5dara 2darb dard3s4 4darea da4res d5arn da2ro dar5os. dar5s6 dar4ta. dar6va. dar8ve. 4dasei 2dash 6dasi 4dasjef da4sk da9sko 6dast6r 6dasu data5 4da4tal data6le. datali8na da4tek 7d6ato da3toa 4da5tr dats6j d6aud daud7s8 dau5go 2daut 2dav d5avb d5avis d1avl d3av5s 4daø 2d1b2 dba8le. dba4ne. dbe5s6t dbe8ta. dbe6te. dbling7 dbo6en. d6byf 4d1c 6d1d d2dad ddag4 d4dak d4d5arm dd3eie d2dek dde4lap dde4l5o ddel5sv d4demi dder5s d4desu ddie8 d7dom d8d7orm d4d1re dd5run ddsa4 dd4sala dd4skap dds5tab dd3s4te dds5tr d2dyb ddø2 ddør3 d4d5øy dd1år 1de 2dea deak3 de2al de7b 6debar 4debas 3debat 2debe 4debl 2debo 5debon. 2debr 3debut 2deby 4debø de1c 5ded. 2deda 6d7edd 7dede. 4dedek 4dedel 4dedia 2ded4r 2dedy 2dee 5dee. de7er 2def d5eff d5eft 2deg 6d6e5ge 5degg de3gl 2deh 5dehavs 2dei dei4d dei4ene 3deig. dei8ge. 5deigen dei4g5r 5deik d2e1in 3deir de5is. de3ist 7de7it 2dej 8deka 2deke 2deki 2dekj 5dekk dekk3a dek4kan dek4kel dekk8s dekk7s6t de6k6kv dek2l 6dekly 5dekni de5ko 4dekod 4dekon 4dekos 2de5k6r dek6st deks7ti deks6tr 5dekt 2deku 4dekv 4dekø 4dekå d4el. 6delad 6delage de6lans 4delau 4deled de4lef 4delei del5ei4d del5eie 4de4lek de5lele 4d5elem de4lest 6d3e4lev 4delid 6delinj del5int 4delis 4deliv del4lap del6lei del4lek del6lerf del6lig d4els del4s5at del3se delses7 del4si del4spo d4elt del6tala del3te del7tr 6deluk de8l7ur del5ve 4dely 4delæ 2delø delø6pa. 6deløy 2delå 2de5ma d3emb 2deme demie4 4demj dem8na. de4mo. de4mog 5demok 4demol demo5no 5demos dem5pe 3demr 5dems 4demu 2demø 2demå d2en. 4dena de7nak 6d5en6den. 8d7en6dene 6d5en6der. de5neb 4dened 6denel 4denem 4denet 4denev 6d5engen. 4deni 4deno de4nom d2ens den4sin den4s3t8 den6t5ant 4dentif 4dentit dent3o den4tr dent5s8 den6t5u6 den6tå 4denu 2denæ 2denø de2ob de4og 2deol 4deopp 4de3or de4ove 4depak 4depap 2depe 4depi 4depl 6depu d2er der8am de6rant de4rare de4rark 5de7rast dera5te der3av der5d 4derea 4dered de4r5edd de4ref 4dereg 4derep 6deresi der5est 8derest. 6dereste 4derett de4rif de4ril 5derin de4rinæ der5k der5ne de5rob 4derog 4deros de5rose dero8se. 6de7rot dero4v der5s6n der4sp der3t der5un de5rup 6derus der3v 4derør 2derå de1s 3d6es. 2desa 4desc 2dese de5seg des5ers 4desho de8s9hop desi4s5t 2desj 2desk 9desk. 5deske 4des4le 2deso 2desp 7despl 6de5s6pr d4es2t 5dest. 5deste. des6tem de5sti 4destj 4desto 4destrå 4destu 6desty de4s3tå 6desup des6v 2desy deså7 d2et. 2deta deta8ka. de3te 4detea 6deteg 6detekk 4detel 4deten 4detep detes7 2deti 2detj 4deto 4det6r 2detu 4dety 4detø 6detå 2deu d1eur 5deus 2dev deva8ne. devi9er. 3devik d7ev8n de5vu 2dey 4deø 2deå 2d1f dfø6rarar 2d1g4 d4gel d5gi dgi6n dgjø6re7n6h d3go 2d1h dhav4s dheim2s5 dhu9ga dhø4r 1di di6ak di5alg dia5li di1ar dia3re dia1s dia7sp dias6t diats4 2diav 2dib did5ri di7ell di5en. 4di5end di1er dies4 3diff diffe5 3diful 4difø di8g9and di4gat di3ge4s5 dig7g 2digj dig8la. dig6le. 4digren dig5ret 4digru di2gu 4dih 4dii 2dij di5ka di8ka. di5kem 2dikj 6dikn 2diko 2di1kr dik7v 2dili dil4les di5ma 6dimed 6d5i6mel 4dimes 4dimet 2dimo 4d5imp 4dimå di5na 2d1ind di7nen 4d5ingk din3gr ding8s5en ding6s5er din8g9å dini4 di4ni. 4d1inn 2dino 2dinv 4dinø 3diog 7diol dio3na dio4no di3ori dio5tr 2dip 3dipl dippe7 4dired 4direg 4d5irs 5dis. di6sc di6sed dis4i disie5ne d6isk dis6kam di4skj dis6k7l di4sk6o dis5ko. dis7koe dis7ku dis5s dis1t dis7tik di5sv dis4vi 2disy di4tal di7te 4ditek dit4tet ditt3r di9us. di4va. 4dival di7van 4divek div6i 2divu 2diøk d1ja d1je. d1jen djer5ve d7jes. dje9ve d6jingan d6jingar d1jo dju8la. 5djup 6djupar d4jø. 2d5k2 dka8ra. dki6 d5kj dko2r 8d7out dku4le. 4d1l4 d3la dla4ga dland7as dla6te. dla4v d4ledi d2lef d4lega d7legar dle3ge dlei7er. d5leka d2lel dlem4st d4lenet d4leru dleva8ne. d5li dli4f dli5ke d5lo dly8se. dlø8pa. d5lå dlå9re 2d1m 4d1t dme6la. dmo4e dmors6 dmo8s dmø4re. dmå6la. 8d1n dn6a dno8de. 1do 2doav do2b3 4doba do3be 8do9b8lan 2dobå do4da dodø4 dodør5 4doeu 2dof d3off d5ofr dog6med dog4me5s 2dogr 6do5i do3ki 4dokine dok6kan 4dokn do5le 4doled doli8ne. 4dolinj 6dolis 4dolj dol5l4 4domes do5mis 4doml do4mo dom7p 2domr dom8sa dom8s5e6 dom6s5i dom4s3k doms3l domsla6ga dom4so do4mu do4na. don5g 4donke 6d7on6kl don5st don5t4 2dop do4pa. do4pe. 3dopi d6o1ra do5ran 2d1ord dor4da do1re dor6gest d5orie dorm8 do3ro 5dorp 3dorr dors6 dors7ke do1ru do7rye 5dos. do4se. do4set do1sk 6do7s6l 2doso 4dosp 2dost do3str 4dotr 2dov do5va do5ven do4ver dov9n 4doø 2d7p8 5dq dr4 d1ra. d5raa d9rad. d5rade 1d6rag dra5gen dra6kes 3drakt 1dram 5d6rang 3drap. 5drapa 3drape d3rapp d1rar d6rarar d3rarb dra6ret d5rarm d5rarr d9ra8sa 9dratt drau7ma 2dre. 5dreass 2dred d5rede. d5reder dre7d6r d5reds 9dreg. 9drege. d3regj 3dreie drei5en drei5er. drei7ern d5rej d6reka d7rekk 3drekt 4drel d7relig 4drem d1ren 4drer d3ret. d3retn d6retr d3rets drett4 dretts5 5drevet 3drevn 4dria 3d2rif 2d1rig d2rik d3rik. dri8ka. d3rike 3drikk drik7s6 d9rikt 5d4ril 2d1rin dring6 drit7tr drit5u dritun8ge. 1d2riv 3dronn dro6pa. drop5s 2d1ror 3d4ros dro8ta. 2d1rov dro5va dro3ve 2dru 3druk d1rul d1rum d3rup 6d5rut 2dryk drykk4 d2rys d4røm drø6re. d7røt drø3ve 5d8røye d1råd drå4de. 3dråp 8ds d5sa. d3sabl ds1ad ds3a6del d1sag dsa9ga dsak6se. d1sal dsa8la. d4s3alf d6sall d9same ds1a6n ds5ane ds1a2r d2sas d4satf dsbø6n d5se. dse4d ds1ef d2s1ei ds7eks ds3ela dsel4s5a dse2m ds3emi d6s7enda dsen8de. d4s3eng d5sens ds3e2p d7ser. d6serf ds5erk d4s5e4sk ds5e4st ds3eta dse4te. d5setj ds1ev d2s1i d3s2id d7sida ds5ident d4s5ide4o3 ds3idr d7sil ds5ind d3sir ds3i4s dsi4ve d4s3jen d2sjo ds7jor ds6ju ds5kab d4s3kan ds3kar d4skat d1skj ds5kjen d6s5kjøt ds1ko d5skot ds3kro d4s1kv ds1l ds5la. ds5lan ds6lem dsli6k ds6lo. d9slott. ds4luk ds3ma d6smo dsmå6la ds3ne ds5no ds1o2 d7somst d4s5os d7sot ds1p d3spek d3spel ds2pi d9s8py 6d7run ds5s4 dst4 ds3tak d4s3tal d3s8tar d5s4tat ds6tau dss8t d8s9te. ds9teik dste6ma. d6s5temp ds5teo d3s4tig d3s4tik d5stilli ds1tj d3stor d3stri dstu8na d5stund ds3tv dsty8e ds3tyv ds1u2 dsure6 d5s6us d6s7usk ds1v dsva8ne. d3s4vet dsvi6ka. d5syk d3syn dsy6na ds1yt d2s1ø d6sør ds1å6 6dt. d3t4a dta6la. dta4le. dta4s d3tem dte4ma. dt4eng dterle7 dte4se. d5t4et d4tg d3ti dt6j d7to d5t4rag d6troc d5t4rø d6t1s2 d3t2va dtø8 dt6øk dtørs3 dtå4 1du dub5b dub5l du1c du9ene du9ens due5s 4dufo 3dug 4dugu duit6 du6ka. dul5l 4duly dums2 du4na. dun7de 4d5uni dun5s6 dun7sta 7duo d3upk dupp6e5 3dur du6ra. du6re. du6rei dur8ta du1s du5s4a du9sem du5s2i du2sk du2sl du2sp duss4 dust4 du2sv 2d1ut d6utt du6va. du4ve. 2d1v 5d8va6le dva4ne. dve6s dve6va dve8ve. d7vo dvo8r 2d1w 1dy dy9a 2dyba 2dyf dy5ke. 4dykl 4dykø 2dyl dy4na. dy4ne. 4dynk dynk6s5 dy3pes dy2p3r dy4ra. dy5reba dyrle8ge. dyr5s4 dy2r5u dyr5ø 7dys. dy8sa 4dyse dy6se. dys7s dyst7r dy2t d5z 8dz. 1dæ dærs4 1dø 4dø. død2s1 dø3gr 2døk d5økn dø4ma dø4pe. dø4pen d2ør dør3i 2døs d6øs. dø2st3 døt3 dø9va dø3vel dø1vi 6døvl døv8le. 2døy. døya8 døy8g 4d9øys 1dåd dåd6s5 då8na. 1dåp då8ra. då5ri d3ås. då8sa. d8åse då7sem d7åt. 2ea e1a2b e1ad ea2d1i eadli5 e1af ea2gu e1a2k e4akr 6eakt eak6se. e1al. e5alle eal8le. ea4lov e3alte ea2lø ea4m1 e3aman e5amn e1an e2an. ea4ne. e6a5net e4ani ean7n ea4nor e6ans. ean3sl e1ap ea4pe e1ar ea2re ea5rer ea5ret ea5r4i ear6ka. ear8ma. ear4ta. ea2s1i e3asp e1ass ea7ta e5a4tel eate6ren ea4t3et eat8h eat6le e8ato ea5tri e1att e1au eau6ga eau6ge. eau8ra. eau6re eau5s eau8sa eau8se. e1av eav8la eav8le. 2e1b2 eba3d eba4ne. eb3be eb4be. ebe4d3e6 ebei7er. eben6s5k ebers6 ebesku5 ebet5s eb3h e5b6lo eblæ5 ebob3 ebo4da ebo5ers. ebo6kr ebo6la eb5s ebu4e5re ebu5ern ebu6et eby4ta ebø6n 2ec e4ca ec4c e1ce e5cha e3com e2dad ed5ad. e5d4ag edag4s5 e2dar ed3ark ed3arv ed7dela ed4dyr e3de. ed5e6ge ed5eg4n ed3eie e4deks ede8le. e4denf e8d5eng eden5t e6depr ede4ra e4derø e4desk ede4sl ede4sm e4desn ede4s5p ede4ta e6d5ett e8dé e5d6ia edi6a5ne edi4ene edi6gj ed4is edi3si edi4s5k 3e4dit e7div edle6ge. ed8ob edok8se. e4dol ed1op ed1ov e1dr ed2ra ed3reg e5drev. ed3rom e6d5ryg ed7ski ed3skr ed3s4la ed2sm ed5ta ed3te edt6r edu8a ed7va edvi6s e3dyk ed5ynk edyr6ke. edæ4 e3d6ø1r e3e2 eea7 ee3b e2ed ee3di eeg4ga eeg6n ee5gå eei4d eei7ni eek1e eek4te ee3la e5e4li eem6na ee4n e5enb een3in e5en6k een5t e3epl ee8ra eer3en ee3ri e4er3l eer4me. e6e5sh ees8ka ees6ke. e3e6t eev4ne. e1f 4efa efal6s7 e4fana ef3ank e4fark efar6s5 ef7ea ef5ef ef3fe 3effek ef3fo 4efi e4f3id e5fig e5f4ilm efi7ren efisken8 4e3fj 2efl efle6ge. eflå3 e2fn efo8bi. efo4no 8efr ef2sj ef2sk ef2sp ef6str e8ft ef2ta efta5r eft5ei ef5ter eftle8ge. eft1s4 6efu efyrs5 e3fæ 4efø efø5le eføy9 2ega e3gaf e6gala e7gam ega4ve. egde8l eg7des e5gedo egei9e ege4let e2gem e3geme egen5s 3e4gensk e7geom e2ges2 ege5sp eg9gen egg3l eg8g9ut egi3an egie2 e4giko egis4p e3g6lad e3g4led eg7lesa e5g4lit eg7ly e5g6lø 6egm e9g8nag eg4nem eg6no e7gnå 4ego e4go. 7egoi eg2r egrans5 e7g8rø egs4am egs4ki egs4ta e1gø egøy6e5ne 4egå egå4va egå4ve. e1h ehea4 ehei9e eh5er. e4h5ere eh7ern eher4s ehog5 ehov2 ehy6re. ehø8va e6hå. 2e8ia e9iakt ei9a4n ei7ar. ei4c e8id. ei3d8ar e3idea e3ideo ei9der ei5det 5eidf 5eidg e6i2do e1idr ei3d4u e8i7e eie5d ei8eg eie2n ei9en. eier3a ei4ert ei6es ei1fl 8eig. ei3ga eig6e ei6gev ei5gi ei6gra ei6gu 4eii ei5kaa ei3ke. ei6kee ei6keh ei4kel ei6keri ei4ket ei1kr eiks3a eik6se eik4so 4eil ei9led eil5egg e3illu ei3lo. ei9loa eil5op ei5los eil5s6 4eim ei7ma. e5imag ei4m5a6l ei4med ei6mei ei7men ei4me5s ei4met eim9ett ei6mo 8e1imp ei4n3al ei4nans ein5ant ei7nare ein1d 4e3indu ei5ned ei7nel ein9f einga6 ein3gr e4ini 6ei6nit ein3k4 e5inkar 4e1inn ei4nom ei4nov einsi9d ein4s3l eins6o e4inspi ein7sto ei2n1u4 ei3num 6einv ei2n3ø ei5or e4ip ei9pa ei3pe eip5s 2eir eir9ak ei7ren ei3ri eir5s 2eis ei5sar e4ise ei3se. eise5i ei3sen eiseri9e8 ei3s4ha ei4sil e3isk. e3iske ei6s3kj eis3ko ei3s4pe ei4spi ei4tek ei4tera ei4tere ei2to eit7ta ei6t7ut ei3tve ei6t7ø ei4vak eiva9r ei9ven ei3vi eiv5s4 e1j ejo8en. eju6la 4e1ka ekali7 ekalie6 ekam6s5 eka6ra. e5kavr ek3eie e4kero e4kes ek5e4ta e6key e5k6hov e1ki e4ki. 4e1kj 2ekk ekke7le ekk9ist ek1kj ek4kjø ekk3l ek5kok ekko5v ek6ku ek4ky e1kl e8klane ek6leg e6klen ek5let e3klu e5klæ ek2lø 4ekn ek9na. e3knek ekne7s ekni7p ek3no e3k4nok e1knu e5knø e1k2o e4ko. eko7le ekords8 eko6te. e4kov 2e1kr e3k2ra e3k4red e7kref e3kren e4k5ret. e5krets e5k4rev e3k2ri e3kro ek4ry e3k4rå ek5råd ek3s4ak ek4sal 3eksam ek3sel 3eksem ek4sig eks1k ek4ska ek8sn 1eksp eks5pe ek4sta ek7s6tel ek3sti ek4stil ekst5o ekst3å ek4sæ ek6t7arm ekt3av ek3tef 5ek3tep ek5tes ek6test ek4tid ekti5m ek5tiv 4ekto ektori6a ek4t3ra e6k6t7ro e1ku eku4le. e1k2v ek4val ek6var. 6ekve e4k5ve4d e4k5vik ek4vin ek6vis 3ekviv 6e5kw e5ky eky6te. e3kæ e1kø e1kå ekå6pa 2e1la ela4ga el3agg e2l1ak e5lake elak8se. el7akt el1al e8lame el3anl e6l5arg e4larr el7arti e5las. e5lase ela4te. el5ato el5avl el3avs elbo8da el4ch el5do eld4rer eld5sle 4eled e4ledi e4ledr e3lee eleg5d ele7ger eleg8na e7leir e7leis e5leke e2lel e2lem e5lem. e5lemat 5elemen e5lemet e3lemm e3lemp 4elen ele9na e4l5enh elens3 e4lentu e5lepa 2e3ler ele8ra. e7leret e6l7erg ele3sk e6lesku e4leta e4lete 5e8lev. ele4vak 6e5levn el5fi el9ga. el5gele el5gi elg3s8 2eli e9lie eli5e6rer e4lif e4li5g4r e4l3ind elin5es e4linsp eli6o5s eli8ta. eli4tet 6e5litt eli6v7en el1j elk2 el6k5al el4ke5s el4kete el3kn el5la. el5l6ar el4led el4leg ell5eie el5ler el3le4s el6lete elli7ga. el4lisj ell7sa ell5sk ell5s4l ell5sp ell5sv el5l4ur el4læ el5m4o el5mu el5n 2e1lo elo6ka. e2lom e3lomm el3omn el3oms el1op e2l1or e3lort el3ost el4ot elo7vers. e4l5ovn el4pet el5ph elro4s el4sei els5eie el3sen el3se6s3 el3si el4sje el4skal 7elskand els5kare els1l el6sno el4spe el3spr els4ten el4sti el4stj el2sø els5øk el5s6åpe elta8le. el5te. el6teg el4tero el4t5ett el4t3op el4tro elt5rop el2tu e3lua e1lu2e e4lu4he e3luk e7lum el3ung elun6ge. e7lup elu8pe. e1lur e7lus el3utr elv3an el4ve3d el4vei el6vere elv1r 5elvs. elvæ6re. 4e1ly ely8et. el5ynd 2elæ elæ5res el9ærv e6l5æt 2elø e4l3ø4r el3øy. el5øya el5øyd e6l3øyn 2e1lå el1år e5låt 4em. e2mad emafo5 ema4ge. e4magr e2mah ema4ke. e4mako em5akti e4maku ema6le. 5e4malj e4mam e4mana ema4ni. e6manu e4mare em7ar8m e4masi e6masku e4mata ema3uk ema5ve 5emball 3embed embe6r5 3embet 6emd 8eme emei9e eme4li e4mend eme5tri eme6trisk em5e4v e4mib emi5ert e4mig 4emin emi5ni emini6st e4minor e6mir emi9sa em7je e5mju em5le emle6s em5me. em5men em8mi. 8emnd em4ne. em4ned em4nem 6emni emo5nol em1op e2m3o4v em4ped em6peri em2p3l emp9lane. em6pli empo3 em4pol em4pos em4ses emse8te. em4s5ju em4s1l em2sn em4sor em1st8 ems4te ems3u emta8la em4til e3mug e2muk e5my emy4k 6emø emø8r e5møy emå4la emå9lan emål4s em1å8r 2ena en1ak en3ald ena5li en3all en5and e5nane e6n7ang e4n3ant e5nar. en8are e4narr en3ass enat6s5p ena2v en3avi 4enb enbe9na en4d5and en4dek en3del endelø7se en5demi en3der en4desl end5l 1endr en4d3ro end3st en7dø endø4r endør5e en5egg eneg8ga en3eie en5eks e3nekt 4enem 2enen en5eng 3energ e4nesk 4enev ene7ven eng6a en7gar en4gem en4geri enge6r5u en4gle eng4les eng4r eng3s4e eng5so eng5sp engs4ti en4gut en4g5å 4enhj e4ni. e4nierk e2nif e5nir en4kera en4keri 2enna en9nal 2enne en4nem ennes6t enne4s5v enn2i enn2o enn4sj enn5sta enn7ø 2eno en3ok en3og e8n7old en3om. en1op e6n5ord 2enp en4pås en4rem en5sab ens5af en6s7a6ker en4sek en4seli 5ensemb en4ses4 ense3u en3si ensi8de. ensi5ert en4sim ensle7g ens6lev en7s6opt en1st en6s7tal ens4ter ens4ti ens7und ens4ve ensvi6 en2sø ens3øk ens7å en5ta. en4tap en5te. en4tec en4teg en4tel en3ti en5tie en5tig en5tik en9tima en7timen en4to4r ent5ori ent5rab en4tre ent5ren en4t5rol entropi5 en4t3rå en6tul entun6ge. 3entus 2enu e2n7ul e4n5ur 2en3v 4enw e4ny. e2nyb e6nyr e2nys e4nyta 4e7næ enæ8m enø4k e2n3øv en5øyd 4enå en1ås en6ås. e3o6 eo3a e6obe eo2bl eo5d eod8de. e1og1 eo7gr e2o1i e2ok e3oks e2ol e4o7lo eom1s4 eon8de. eo5ne e7onk eon4kl e3ont eo2p eo3pa eo5pl eopo3 eopp5r eo3pr eor4da eo9re e2ori eo4rid eori5e6 eo4rik eo4ris eo1ro eo1s eos6l e2o1u 2e1p epa3t e6peno epe6p eper5r e3pes epe4st e4peta e6peu 3epid epi6ka. epi7kr 8e7pin 3episo ep2l e8plen ep5lene ep5ler eple9s6 3eplet epo6et 3epoke epp2s ep6sem ep4ses4 ep6s5lu eps1t ep2su e3p2sy ep6tin ept6r 2e1ra e4r3abb era8da. e4rael e2raf er3aft e4ra4g e2r1ak e3rake era5kl eral3u e4rama era6na. e5rande. e5ra7ne er7anli era4no er5ape. er5aper er5a4pin er3apo er5appe e5rar. e4rarg e5rasane e5rasar e4rasje e4rask e6raso e4r3ass er6ast e4ratek era7tor e4ratr er5att e2rau er5auk erau9ken erau8s er3av. er3avh er5avl e3ravn er3avr er3avs 4erb erbi9ti erbo8da erbo8de. er8byl erd2e er4ded erden8s er4dis er1dr erd4ra erd8re erd4skj erds3t erd4sto erdsto8ga er3d4v e1re er3eff er3eft er5e4gen er3eid er3eie ere6ka ere6ke. e4r3eks e6r5ekte e4r3e4le ere4lit e6relli e4r3els e9rem. e5remm er3emn er5enden e4r3eng e4r5enh e3re4o7 er8er. e4r3erf e5reri er3ess ere4t e5ret. e4r3eta eret6h ere5to e7rets 6erett eretts5 e4r3e4va e4r5e4ve e4r3evn erev6ne. e8ré 5erfari 6erfi 4erfr 2erg erg5elv ergi3f er6gli er4go. erg5ret erg5sko erg5sp 2erh erhø6re. e1ri e4riad e4riak erib3b eri3bl e4rice e2rid e5rid. e5ridn eri4kat e6rikn 4eril e7ri6ma. er3ind e3ring 6eringar ering6si er3inn er3ins er3int e5riori e5ris. e4risa eri3se e4riso e6risp e5rist. e7rista e5riste eri5stil e4ri5s6to eri5sø e4rite e4rito er7ivo er7jes. 4erka 8erke erkeri6e er4kesa er4kese er4kete er6k5ett 3erklæ 6erkn 4er5k4o 4erkr erland7as erle6ge. erle7s8t er3me ermo8de. erm1s ermå6la. 2ern er4nad er4ned er5nede er6nee er4nero er4nest er2no er3nob 2ero e3roa er3obl 5ero4b7r e1roe er3off e1rog er5oks e1rol er3oly e1rom er5omk ero5mo e1ron er5ond erono5 er1op e5rop. e7ro6pa e5ropen er1o2r e5ror. e3rore e7ro4sa 3erosj er3osl ero4ta er1ov 2erp 2err er3ra er4rae er4rel errie9n 6ersa ersa8ka ers6al er3sep 6ersj er1sk er3ska ers4ka. er8skaran er9s6karar ers5kor er1sl ers4la ers6led ers4mi er5sne 6ersp ers5tens ers5ter er7stev er1su 4ersv er4sva ers4ve er1så er4s5år 2erta er4tare er4te3s4 er5tia er3tib erti4e er5til erti4mo er4top ert5rol 4erts ert3sa erty6e ertå7ren 2eru e1rua e5rud3 e1rui er1u2k e3rum e4r3ung er3uni e3rup. er1u8r erure8 e1rus er5ut. e5ruta e3rute er5utn er9uto e4ruts er7u6v ervele8 6ervi ervs3 ervæ6re. e1ry4 e2r3ya erye7ne er1yr erys3 e1ræ e9r4ære 2e1rø er5økn e4røko er1ø4l e4r5øn e5r6ønn erø8ra e6r5ør6s er3øya e4r5øy7e erøy4n e4r5øys. er7øysk 2e1rå e9rå. erå4da erå8de. erå6e erå4k er5åke er3å4l e2r1ån er3å4p er3å4se erå6t er7åta9 e6råv 2es. e1sa es5aa e2sad esag6 es4al esa6la. esa9met e4s3ant es5arab es5arv esbi9e es8ce 2ese es5ege es3ei4d es5eie. es3eig esei8ge. e3sek e4seku esel5s4 e3s2en e5ser. e5sere e5seri e4s3erk ese5s2 e3sest e4sesv ese5tas ese4te. e5setj e9sets e4seu e4sha es6har esh9ar. es4h5er e4shi e1sho e7s8hop esi6ar esi5ert e4sil e5sili es3ill e4s3ins esi6v esi3st es3jor e5skab es6ked es4kee es4ker 8eskil e4sking eskinns5 e1skj e8s9kjer. es4kjæ e6skjøn es5k4n e5sko. es7koa e3skot e1skr e1sku esku5et es3kvi e5sky e6skyr e1skø e7skå eskå7r e1sla es4lek es4let es7let. es7lets es4lit e4s5lok es4løk es4løv es4make e7s4mett es9na. es4ner es2no es4nu es2ny esnæ5re 4e1so eso4b e2s3od e2s1of es3oks e2som e3somm e4s3ori e1s2p espa9ra es3pas es5pe. e4s4ped es5perm es3pl es4p5le es3pol e3spor es3pun es4sed es4see es4seg esse7i es6sendi es4s5enk es4ses es4sete ess5e4va es4s3ja es4sje es4skr ess4let ess3om es4sos es4spa ess5tilt es4stol ess5tor ess9tua ess5tue esstu8en. 4essu es2s1v es6s5å e7stad es5tae es7takt es9tala e8stane e5stans es5tant es3tap e5start e3stat es5tato e4s3tau e7stav. est5avs e6s5te. es4teg est5eie est5eig es4tek es4tel e5stell es5tels e4stema e6steme e4stemo es5temp 6esten e7steng es5tenk e8s7ter. e5s6terk esterne8 este3s4 es4test es4tien e3stif es4tig e3stik es4tikk 5e6s5tima es4tis e4stiv e1stj es3t6on e4stog e3stok e3s4tol es6tone est5ord est5ori es5trak est5rene est5rer est9ré es5trib e5stryk e3strå e1stu e5stud es5tus 8estå estå5ren estå6s est7åse e1su es5ut esva5re e5s4vek es5vig e5svikt es3vis 2e3sy esy4na e4s5yt es5øvi es7øye e1ta 4eta. e4tae e2taf etafo7 e3tak e6tako e3tal eta3la eta4la. et5ald 8e7tank eta5le 4e5tall etal6list etall5s6 etal4s7 et3amb e6tand eta4nen et4ap e9tapa e5tape 3etappe et8ar. et8are et5art 5e6tasjes 1e2tat 4e5tati e5tato e3tatt et5aun e8tax et1c 2ete e4teie e4teka ete4ma. e5teran ete5ru etes5i e4tesl et8et e5tet. e7tets 4eté 4eth et6her 2eti e3tit 2e1tj e7tjer et3jø 6etl et5m 2etn et6nev etning4 etnings7 2e1to eto4er et5oppd et3ord e4tot 2e1tr e5t4rad e7t6rak 8etre e5tree e5tref e4t3ris e9tru. et5rum ets1 et9sar. et4sku etsku8le. ets7l etsla8ga etsnæ4 et2sø et4tak et4tal etta6le. ett5alt et4tank et8tap et5te. et6tei et6telt et4tenk et4tenn ettera4 etter5at et5t6erf 5etterk 5etterr ett5esk 2etti et6tia ettian8 et4til et2tj etto5a et4tr ett3re ett4ski ett4sti et3tug et4tur ettvi5se et2ty 2e1tu 5e6tui etu6na et3uni 2e3t2v e4t3va e5t6vang 2e1ty 4etz 4etæ etæ3ra e1tø e1tå etå5re e1u eu4a e8uf eug8la eu4h eu4ka. eu2ke eu5kem eu7kr eu2l eum2 e3u2n eun4ge. eu5nu e4up5a e6upk e2ur eu6rat eure4 2euri e3urn eur8na eur6ne. euro1 3europ e3urt e2us eu4si eu1ta e3uts eut7t e4u3z e1v evad6r ev5akti eva4la evann4s e4v5anta e4varar e4varb e4v5ark e6vatf 6eved eve5d6a eve5del 6eveg e5vegg evei6s5 6evenn even5s 5eventy e4veny e9ver. e5ves. e5veta e5vev. evi4e evi5ere evi5ert evin4s evi4se. evis3t e2vj ev2na evn5a4k ev7nu ev7oms e4vre e7vri. ev9rå ev1s evs8v evta8la evti4 e2v3un e5vyrk e2vø ew3a ey1 eybal4 e1y2d ey5k e1yng e1yr eyr6ka eyr4ke. e1y2t e7yti ey3tr e3zi e1zu e1æ2 eær3 e1ø4 eør6na. eøy4 eøy9an eøy7en e1å6 eåk4 eån8da eåt8t é1a é1b é1d édø4r5 é5e8 é1f é1g é1h é1i é1k é1l é1m é4n5e é5n6et é5o é1p é1r é2rj é1s ése2 é1t é1v éva8la évo8re. é5å è1r è2red è2ref è2rek4 è4rener è2rep ère3s2 è4rest è2rev è6ves ê8lan ê6ra ê1re êr7o êr9sl 1fa 4fabo fac8 fa1ci fa3de fa6de. 6fadm fa4f fa2g1a fa5ger fage4t fag5eti fa2gi fa2go fa2gr 6f5agro fag3sk fa2g1u fai5 2fakr fakse9t fakta3 fa1ku 5fal fa1la fal6kes fal4k3l fal6lers fal5m fa4lo fal4sk 4fa5mo fa4na. 7fan5d 5fane fanfa5 fang4s fangst7ev 4fank 2f3anl fan5s6 fan7tesk fan5ti fan3to fan4try 6fanu 2fap 3far 9f8ar. fa3ra fa4ra. fa4re. fa4res far4gel far4ges fa4rit far5n far6skj fart2 far4vel 4fary fa7sa fa4sel fa4seru 2fasl fast3r fa3tal fa4te. fa6t7ers fa1to fat2r fa3t6re fav5ne fa1vø 2f1b fba4ne. 2f1d 1fe 3fe. 2fe1a4 5fea. fe5a6l 2fec fe4da 3fede fe2dr fe3dra fe3d4ri fe7ene 2fef 2fe3g 2fehj fei9en fei9er feig4de fei5ge feil5es fei4li 9fein. 7feine fei7ter 8fej 2fek4a 4fekl 2feko 4fekr fek6tes fekt5ev fe5lag fe5len fe5li feli7e6 6felik felles5 fel7læ 2felo fel5ok fel9ta. fel4tek fel4ti fel4tra fem5ak fem9b fem9ne fe4mo fem5s fem4tid fe2m1ø 5fen. 4fena fend9r 4feni 5fens fentleg5 2feo 2fe3p2 5fer. fe6ral 4feram fe5ras fer6at fer4dam fer5de 4ferea 4fereg fe4rek fer6en fe7rer. fer5ers feri6e feri8e5ne 7fern fer2r fers9kar fers7ke 2fe1ru 3fes. 2fesi 2fe1sk fe2st fes9t6i fes8t3r fes9tum fe6st9ø 4fesy fe6ta. 4fetap fe4te. 4fetea fe5ti 4fetil 2fet6r fett5j fett7s6 4fe4ty 2feu 2fev fe4ven 2feø fe6øy. 2feå 1fér 2ff f7fa. f4fab f2f3a2g f4f3ak ffa7l f6fann f4farb ffar6d ffa7re f9fas f6fat f8f9au f2f3av f2feb f2fe3d f2fee f6feh ffel7t8 f2fem f6ferdi ffe4rer f2fes f4feti f4feto ff5eve f2fib f4fice f2fid f9fien f4finn ff5int f2fip ffi5s4 f2fj ff3la ffla8ga ff9leg ff5lek ff3li f2fo ff4ol f2f3re ff1ro ff5sl ff5t4 ffu6r f6f7ut f3fæ f4fø 2f3g2 2f1h 1fi fia7l fia4n 4fiap fi4as1 fibi6en fi9cen fici7 fi7di fie2 fi1er fi7e6re fi4f fi5fi fi5fo fi7fl f6ig figh9t fi7g6r 4fih fi9ka fikali7 fikalie6 fi7ken fik6ka fik6k5n fi5ko fik7sa 4fiku fi4la. fi3li fil6lel fil6leri fil4les fil7leti fil8m7at fi1lo filt6re fil7tres fil4tri 4filæ fin5art fin5d fi4ne. fi5ner fing3r 6finj finn5ei 6finnsa fi4n3o fi9nor 2fins fin6sleg fin6te5s fi2nu 7fio5 fi2r fi3ra fi6ra. fi9rene fi5res. fi3ri fi5s4a 4fisc fi6se. fiser6s fi8si. fi2sk fi6ska fisk5a6d fis7kal fisk5and fis6kart fis6k5end fis4k3l 6fiskol 6fisku fis5ti 6fistu fiti6me. 4fitr fitt5s fi7ty fi4ve. 1fj f1jeg fjel6lend f5jen fjer5ne fje4sk fje2t3 f5ju fjære5 fjæ4res8 2f5k6 f2l2 f5lag. f6lagg fla7ke f4las 2fleg fle6i f4lek f6lel fle6r5u6 fle4sl f4lett f3lev fli7ne flis7t flit9t8 1flo flo9ga flok9s flo2m3 flo6r5o flos6kl f6lu flue3s flus8 fl5ut 3fly fly3s4 f3løn flø5s 1flå flå9sa flå7se 2f1m fn6 1fo 2fo. fo9ar 6fobs 2foe 4fof foi7la fo8ke. fo6la. fol4dr fo4le. fo5led fol6k5v fol9ler fol5lese folke5s6 fol5li fo4lu 3fon fo4na fond2 fo5ne fo3n4id fo4nin fon1s2 f1op for1a for9drev for7dro for5d6u fo6re. for9ei for7e6n for5ent for5ess for4et for9e8te. for9e8ten for9g6 forh6 fo4r9in fork8 forlo7v forlø9pa forlø9se formo9r for3n foro6 for5p4 for3se forsi9da forsi7de. for3s4m fors8t for9ste fors4v forta8le. for5t6e fortei9e for7t6i forti5da for3t4v for3u4l for7v6 forva9re fo8r5æ4 for5ø4 for9å fo9se fosfo5re 4fosj fo4ta fo6te. foto5 fo4tok fo4tom fo6top fo4tor fot3s fots6v fot3t 4f1ov 3fô 2f3p2 fpo6e fr2 1fra fra5l fra4m5e fra6mi framma8ne. franko5 fran7se fra7r8 fra1s fra5se. fra7sep frasi8e fra7sk fras6p fra7v fra7v6r f2re. fred8sel freds5t fre4e3 8freg f4rek fre4m5 fremma8ne. frems4 fre7ne fre6sk fres7ko. fres5koe fre8s9v fri5a6re 6f5ridi fri4erf f1rin fris6ka fri5s4p fri5s6til frite8re. friti8me. 6froc fro7f fronta9le fro8st frus1 fruta6le. f1ryt frø5b f4røk frø7ko frå9r fråve4 2f1s fs2h fsho6 fsi2 f5sjuk f2sl fsle6ge. f4sm f2sn fs7ne8 fs5ov fs2t f2s3tab f6s5tan f4s9v 2ft f1ta f3ta. fta7f ft1ak fta8la. ft3alg f2t1am f4tana f7tane ft3anl f5tar. ft8as4 f6t1av f2tea f3ted f4tee f2teg f2tei f2tek f6tem fte4na ften3d f4t3enh ften5s6v f2teo fte4r5a4 f4terin fter5s f4test f4teta f4t5ett f8t7id ft3ind f2t5i4s ft5l ft7n f2t1o2 f5tog 3fton ft3r fts5alt fts3ei fts5ers fts5erv ft2s1i fts1k ft2skaf ftsla6ga ft5s4lan ftsle6ge. ft3sto ft6s5top ft5s6tri ft5stø fts1u ft2s1ø4 ft5t4 ftta8ka ft1u 1fu fu8ga. fug9le. fug6l7eg fu6le full3 ful9lar fulle6 ful9le. ful4len fullen8de. ful4ler ful7les fullfø7re funn2 funns3 funnsla8ga fu6ra. fu6re. fu9ret fu7ro furu1 fu7sel fu6sk fus6o7 fu4s5t fut4h futu1 4f1v fva8la 1fy fy5la fyr2 fy8ra. fy4r5a4b fy1re fy4re. fyr7k fyr8ke. fyr5t fy3s fysa7 fy8sa. 2fæ1 1fø fø4da. fø4dek fø5den fø4des fø5des. fødsel8s7 fø1f 2føk fø4le. f8ør før6a fø5rar fø4re. fø4res fø7resv fø8rete før6tin 4få få7ren få7ret få5ri får7u få7va 1ga 4gaba ga1bo 6gabø ga3da ga4ded 4gadg 2gadm 4g5adr ga4e5k gaffel5 6gaflo g3aft 6gah 6gak g1aks gak8ta. gak8te ga3kv ga1la ga4la. galei5 ga7len gal4les 4galli 5ga7lo ga4ma. 4gamb ga5mer gamme6l5 6gand. 6ganden 9gane gan5g6en gan4g5j 4gan5k 2g1anl 4gann 4gansa 4gansv 4g5antre ga6pa. ga4pe. ga4p5l gap3s2 ga6p7u 9gar. ga6raf ga6r5ak 2garb 5garbr 5garby gar4dek 7gare. 4garea gar5es gares6ke. gar2i 4garki gar3ne gar6ta. g5arte gar8te. g3arti gart5s6la gar4un ga4ryl ga4sc ga5s2i gas8ka. gas8ke. ga6ski 4gasp gas6sel gas5sen gas7ser gass5ett gass3l 5gast gas5te ga5sto ga6s6t6r g2at ga4te. ga5tens gate5s ga3ti ga1to ga3tr gat6tap gau5la. 9gav. 2gavd 6ga4vei ga4veri 4gavg g5avk 2g1avs 2gavt 4gavv 2gaw 4gaø 2g1b gba4ne. g6byk 2g1c 8g1d gd5alt g6d5au gde3a g2deb g3deba g4dedi gde5lo g2dem g4dend g2de5o g4dera g4de5re g6dero g2des g2det g3det. gdevi8sa gd5op gd1or gdy4d g6d1øy 1ge 2ge1a geak8ta geak6te. gea7ren ge4ark 2geb 6geba 4ge5be 3gebri 4gebrå 3gebyr ged4 4gedan 6gedel gedia5 9gedom. 7gedoma 9gedome 7gedomme 6gedoms 4gedos 2gedr 2gedy 2gedø 2gee geen8de. 2gef g5eft 3gefæ 2ge1g2 g5egg g3e2gn 2geh gehø8ve. 2gei g1eie g4e1in gei4r3 gei9re gei8s7p gei6st5 3geit geit3a geit3o gei4t3r 2gej 2gek2 ge9kl ge3kn g1eks 6gekt 5gel. ge4lar 4gelau ge6le. ge7lea 4geled 4gelei gelei5er 4gelek 4g3elem ge5len. ge5lens 5gelet gel5ett 3geli 4gelid 6geligg 4gelit 6geliv 2gelo ge5lov 7gels4 gel3se gel5si gelsk7l gel5t4 4gelu ge5lun gel7ve 4gely 2gelæ 2gelø 2gelå 5gem. 2gema 9gema. 2gemi 3geml 4g5emn gem6na 2gemo 9gemr 3gems 3gem4s5t ge3mu 2gemy 2gemø 2gemå g2en 3gen. ge2n1a ge7n6am gends6t ge3nea 4genem gen5erf ge5nes gene4t gen5eti 4genev gene5ve. gen8ga. gen5gr ge4ni6n 6geniv gen5k genle6ge. gen3n gens5l gen6sun gen5tr 4genum 4geny 4genæ 4genø 2geo 5geog 3geol geome5 geomet4 ge5on 6geop ge9ope 2gep g2er 3ger. ge5ra. ge6ral ge4r5ant ge9ras ger5di 4gered 4geref 4gereg 4gerek ge6rene 4gerep 6gerese 4gerett ger4i5d 4gerik geri8ka 6gerike ge4rim ge4ris ge4rit ge4riv gerle9g g9er8ma. ger3n gerne6 4geroa 4gerom. 4geromm 6gerop. 4gerope ger5p ger4s5af 5gerud ge5rup ger5v gerø6re. ge4r3ø4v 4gerå g6es 5ges. 2gesa 2gese 5gesen. 5gesens 4gesi 4ge5sja 4gesje 2ge1sk ge1sl geslu7 ges4lø 4geso 4gespe ge4spr ge5spra 2ge1st 3gest. gesta7b6l 5geste. ges6tekk ges8ti. gest5rid gestri8de. 6gestå 2ge9s8u ges5vik. 2gesy 6gesæ 2gesø 2ge1så geså5re 5get. ge5tak geta6le. 6getat. 6getate 4ge3te 5gete. 2geti 2getj 2geto 2getr 5get5s 2getu 2gety gety8e 2getø 2geu g2ev 2ge7v8a 2geve 4gevir gevi6sa 4g5evn gev6ne. 4ge5vo 5gevå 2gey 4geæ 2geø 2geå 1gé 2g1f gfe2l 4g1g g6g5al gg5ask g2g1av g4gedi gg1ei g4gela g4gele g2gem g4genu g6gerei gge4rin g4gerø gges6b gges5l g4gesm g6geso g4gesp g6ges6tio g6ge5sv g2gev ggie6 g4gif g4g5i4m gg4je ggje5s g2gl g7glu g4gn g2g1o2 g3go. g5gos gg3rad ggra6da gg5rat gg8re. gg3red gg7rek gg5s4par ggs7s gg3sto gg4sy gg3sø g7g8ud g4g5u4r 2g1h ghe8n ght5ene gh4to ghæ8 1gi 3gi. 4giak gi1ar 4giarb 6giav 2gib gi8c 2gid gi3de gi1e 4giek 3gien gi9end 5gier 4gifa 2gifo 4gifr 4gifu gi6ga. 2gigr 2gih 2gii 5gika 3gike 4giki 3gikk gi5k4r 4giku gi5le 4gimess gi4metr 4gimi 4gimø 2g1ind 6gingeni gi4nin 2g1inn gin5nu 4gino 4g1ins 4g1int 2ginv 4gi5om 2gi1op gio4r 2gip gip5si 6gira gi3re gi4re. giro3 gi6rob 5gis. 2gisa gi3se 4gisel 4gisen 5gisk 6giska gis8lu gis4lø 4giso 4gisp gi3s4pa gi5s4pr giste6ru gis5ti gist5ra gi5stré gi6st5rer 4gistu 6gisty gi5ta 4gi5te gite4s gi2t9r git5te 2giu gi7va 4gival 4givo 4givu 1gj 8gjag 2g1jak g5jarn 2gjaz gje5f 4g3jeg gjels4 gje2n gjen7n8 gjen1opp3s4 gjen5s8 6gjent 3gjer gje7sk gje4s3p gje8v9ak 2gjob 2g1ju 7g6jut gjø9de 2g3k2 gkly9 gl2a 6gla. gla3de 4glag gla4ga gla8ge. g3land g1lar gl5art glar7v 1g2las 7glase gla6s7k g6lass 6glast g5last. 3glat g5lau gl6e gle6dero 4g3lef gle3ge gleg8ga 6glei glei7er. g2lek g7lek. g5leke g2lel 3glemt 4glen g9len. g9lene. g9lenes g9lens gle9pl 4gler gle4ra glere8de. g9les. gle6se. g4le5sk g6le7sm 4glet g2lev 1g2lid gli4del gli7e6n gli8er glig1 3g2lim gli9me 4glio glitt4 6g7liv 4glj gl7ja gl5l g4lo. g2loa 5glob 5g6lome 1g4lor gloria7 glori6an glorie7ne g4los glo5ste 6glov gls4 8glu 5glug g5luk 6glun gl5ung glun8ge. gl5ut g5lyd 3glyf gly4se. g2løg glø8pa 2gløs gl7øy. 5gløym 2g1m g4mete g4metr g5mé gmini6 gmo4e g3mu gmu8le. gmå6la g1n gn1ak gna5lem gna4lo g2nav gn1d gndø6 gndør5 gn4e g2nee g4nelo g6nero g6nerø gne1s4 gne8se. g4nesk g4nest g5net g6netr g2nev g4nib g4nid 5g6nik gning4 gnings5 gni4s g6ni5sk gni6st gnist9r gn5k4 g2nom gn5o6p gn7o6v gn5r gn1s gn4skr gn6sm gn4som gns4pr gn4sti gn2s1v gn5t4 gnu5re gnæ6re g2nå 1go 7goan go1ar 7goar. 2gob gobe5 go4da go5dal god5ar 2godd go4de. gods9t 2gof go9ga go5ge. go9g8r 6goi 2gok gok4se. go3le gol6fa go5lo gol4va gol6var go4lå 2gom g7o6ma 6gometris 7gomm go4n5and go9ne. go7ni go5nok gon9s 2g1op 3g6or4a5 go5ra. go7rae go7ras 2gord gor6da go1re gore8a7 2gorg g4ori gori5e6 g5orv gor8va go5rø gos3p 8g7ost 6goto got6r 4gov go8ve. go8vi. 2g3p6 1gr4 8gr. 4grab 6grac gra5ce 9grads graf5f graf5t6 gra4m5 grand3s4 gran5to grant4r gra9se. gra9set gra6sk gras3t gra5t gra8te. grati4s gra4u gra4v3ak gra7vis gravta8 2grea 4g5reds gre4en 2gref g7refe g4rega greie5n grei6ene 6g3reis 4grek 2g5rel g5rent 4grepi grep4s3 g7rese gres6sak gres6sent 6g5rest 4grett 4g5ri. grib3 4grid 4grif 4g1rig 7g6rip gri4s5o gri4s5ø gri5sete 4grit gro9ar g4ro7i grom5m g4ron gro5sk gro3ve gro6v5in 4g5rui 4g3rul grun7g 5g4rup gru7sa grus5t 2g1rut 2gryd 4g5ryg 6g5rytm grø5de. 6g5rør 4g5røv grø5ve 4grøy gr7øy. 6gråd grå6da gråk4 grå7n grå5te. 8gs1 gsa2 gs5akers g7sal. g7sale g5salg. g5salge gsam3 gs3amb gs7amn g7s8ang g3s6ank g5sard g2sas g7sast gsbø6n gs2ce gs5ef g2seg g2sei g2sek g5sekr g7sekv gse9la. gsel4s5a gsel4st g2sem gs6ende. gsen6ke. g5sens g3sent g2ser g5ser. g3seri gse4st gse4t g3sete gs3eti g9sets gs4ett gse2v gsfø2 g2si g5sider gs5is gsi2v gs4jar g3sjef g5sji g2sjo g5sjå gs4ka. g5skad gs4kal g5skall g6skam g4skan g4skapa g5skape g4skapi gs7kav g5skilt g7s4kj g7s6kjæ g3skot g5skren g7skug g6skv gsla6ga gsle6ge. gs6leri g4sluk gs4lun gsl9ut. g5slyn gs5med g9s6mert g7snel g5sog gs9ope g7s8opp g7s8oppe g5spal g3spel gs2pi gs5pik g3spil gs5pile g6s5pors g3spur gs3s4 gsse4e gs5tak g9s8tand g5stang gs4tasj g7s4tat gstatsrå7 gst6e gs5te. g5ste4e gs4tell gs5tema gste6ma. g7stemt gs4tere g5s4terf g5s4terk g5s4tern g5s4ters g5s4terv gst7evnen g5s4ti. g3s4tie g3stif g3s4tig gs5tiå g5sto. gs4tol g5stol. g7stola g5stole gs5toll gs4trap g5strau gst5rea g5strede gst5rei g5streke gs6tret gstri8de. g5s4trof g3strø g5s6trå g5stue gst5ut gstyr8ka gs4tør g5s4tå gsu2 gsu5g gs4vane gs5vik gs7væ gsy2d g7sym gsy6na gsy6t g2sø gsø6ki gs6øt gså4 2g1t g3ta gta8ka. gta8ke. gta6la. gta4le. g9t6e gte6ke. gte6ma. g3ti gti8de. g4t5if gt6re. gtråd5s6 gt7sv gt5t gtu8en. gtvek8 gty8e gt9yt 1gu 4g5u4bå gu2di guds3t gu4el 6gug g5ug6l gui4d guid5ar gu4le. 4g5ulk gul8ke. gul4la gul5o gul7ø 7gum gun4g gur2g gu4ri gur8na gur6ne. gu5rua gu3rue gu4st gu1ta 2gutb 4gutd g5ute. 6gutg g7utl 4gutn 2guts gut4tak gut4tes 4guttr 2g1v gva4ke. gva8la gvedli6 gvi8ta 6g1w 1gy g9y8a gy4da. 7gym gy3ne gyr6 gy8sa. gy6se. gy4te. gy4ve. g5æt 4g5øk gør3s 2g3øv gøy9a gøye6r gøy5n 1gå gå6as gå6en. gå4er. 4g5å4k 4gåm 4g3ån gån8da 2g1å4p 2g3åre gå2s gå3st gå9ven gå4vet h2a ha4a haba9 4hae ha2el 4hafi ha2g ha3ga ha4ga. ha3gen hai1 ha7ism ha5ka ha4ke. ha5ken ha7kera ha4ke5s ha1la ha6la. hald4s7 ha4le. ha4lev hal6lei hal6lø hal4s3k hal4so hal4s3t ha5lu hal4v5 hal5v6ar hal5v6o ha5ma ha8me. ham6nest ha5mo ham4st hams4t7r ha5na han6d5r hand7skr hand5ø ha4ne. hani1 hanis4 han2n3 han4ne han6nel han5nen han5n4es han5n4o5 han3se han4sk ha4pe ha4re. ha5rei ha4rel ha3rem ha4res har5k ha5rov har7se har5tre har4tri ha4sj hasj5e ha2sl has6p7l has5v ha3tar ha4te. hat6le h4au hau5ke. hau6st hau4t5r hav4a ha4va. ha5van5 ha4ve. ha4veg ha4vei have3s ha8v7ert ha1vi ha4vo hav4sl ha6vu6 hav1ø 4havå 2h1b hba4ne. 4hc 2he. he2a he7ans heat4r heb5n he4de. heder6s5 he2d9r hef9ta hef7tes he3ge he4ge. he2g3r he2i heia3 hei5en 3heim he3ins hei4sk heit4s he2k hek4sek hek6serin hel1a he4la. he4le. he4l5ei4 hel6lesu hel3o hel2s2 hel3sa hel4se7 helses4 hel3sk hel5sp hel5ste hel3sv hel4tes hel9ve he4mak hem5ne hem3s8k henfø5re hen5o6 hen1s2 hen5se hera9da he5ret he4ri. her5j herle9ge herli9ga 4her5n he1ro he4ro. hero9a her7p her6rei her6resi her6ret her6ska. her8s7kare her6sv her5un4 he2r3ø he4se. he2sp hes7pa hes5pel hes5pen hes9per heste5ri hes4tes he6stø het2 he4te. he5t6i het4s3a4 het4s5p het3t he6va. he6v7arm he4ve. hev9na. 2hf 2hh h5hu hi5ao hi4bak hie4n hi2et hi4f1 hiff2 hif9r hi6ge. hik7e himme6l5o hi6n7an hin4nes hins4 hins9ke hi4pl hip3p hi1ro hi2s1 hi9se. hi3sen hi5s4i 4hisk hit7o hi4t5r hit5ti hi8va. hi4ve. hiv1s hjar4 hje4 hjem7e hjorte5 hju6l7 hju7l8e 2hl h5lan 2h1m hma8n 2hn h2na hne6n hn1s h4o ho5ar. hob6 ho6da ho4de. ho5den hode3r ho5der. ho5dy hof4f3 hof4f3a4 hof4f3e4 hof5f6er hof4fi hogs6 hog6str hog7stra hoi5 ho2la ho5lag ho5lan ho4le. ho4lin hol5l ho4lom hols4 ho4lu hol7ut ho4me. ho4mo. ho4mod ho4mos ho5n6o ho4o ho8pa. ho4pe. ho8pi. ho5ra ho6ra. hor2e1 ho1ro 2hort ho4s hos5a ho5sen ho5ser ho5si5 hou2 ho1v hove5re ho4vé 2how h1p 2hr h1ra h1re hri5ne hri2s3 6h1s h5s4e 4ht h5ter htere4 h1tr ht5t hu4da hu4d3 hud5s6 hudså9re hu4er hu6et. hu4ga hu4ge. hu8ja. hu6ka. huk8ra hu4la hu4le. hu4leg hu5les hu4lev hul5v hu5ma hun6des hun2n3 hu1ru4 hus1a hu8sa. hu5s6a6r hu6s7arr husa7r8e hu4se. hu4s3ed hu2s1i hu2s5j hu2s1k hus7m hus5s4 hus1t hu8str hust9ran hus4tre hu6sty hu6s5u6 hu2sø hu4va hu4ve. hu4ves hv4 hva5le hvas5 hve2r hver3a hvi5l6i h4v4ir hvits4 hvo2 hvor5 hvor5i6 h6y hya3 hy2bl hyd4 hy2e hye5ne. hye9nes hyg5gel hy6la. hyldes7 hy4le. hyr4des hys3 hy8sa hy4se. hy2s1j hys5t hæ5g hærfø9 hær3s6 hø4e høf5 hø2g høg3ri høg7rø høk6 hø6le. hø4na hø4ne. hø5rar hø5ren hø5rer hø4res hør6sp hø2s høst7a høst5ø hø1va hø1ve hø1vi høy5a6 høy5k høy7n høy7rar høys4 høyse6te. h6å hå7a hå8le hå6na. hån8dr hånd5skr hå5nel hå6pa. hå4pe. hå4p5l hå1re hå1ri hår3s hår7u hå8va. hå4ve. ia9al i1abl ia1bo i2a3de i1adj ia5d8r ia1g2 ia2ge ia1in ia1kr i1aks iak8se. ia5ku i1al. ial1a ial5ein iale4t ial5eti ia4l5ett i2alf ial3g ia4lin i4alk ial3op ia6lov i5als. ials4t i3alt. ial1u ia2lø i1an. i2ana ia4nal ian5ald ia5nar i7andr i5a4ne. ia8nes ia7net i5ank i1anm ia2no1 i1ans ian3sa ian3sl i1ant ia7nø ia2pa i3app i1ar. iar4do iard5s4 iar4du i2are i5area ia5r6e8l i5arn. i9arns i7arska i6asi i1asm ia4sp ias3s6 i3assi i1ast i7ast. ia1t ia5te iat6r iaty6ra i1att i7auk i1av i1b2 iba4ne. ib5bo ib3bu i3bere ibe4ro ibi5er. ib7lar i2b3le ib4leg ib4le5s i5bo ibo4e ibo7n ib4r ib3st ib8t ibya7 iby9ar. 8icanarar ice5ne i1ci ick1 ick7ete i1co i5cy 2ida i5dal i3das id1av id3del iddel5u id6dep 2ide. 3ideal i2deb i6def id5e4ge i7deki i9del. id3elv 2iden i5dend iden5sv 5identif 5identit ideo3v i6derap i9de5re. i7deren i9deres iderla8ga iderle7g i7dern i5ders i6desm id6gem id4ges idi4en 1i2dio i8dj id7jer id9na 1i4dol id9ran id5reg 4i3drev 2idri id2s1 id5sam idse4 id6sel id5sim ids5l idsla6ga ids3t id4s5tu id2t1 i2d1un i2dy 3idyl i3dyr i3dø i6d7øy id7å 2ie ie1a2 i2ed i1eff ie4ge iego4 ie1i iei6d i1eie i3eig i5eini iek8l i1eks ie5l6a i2ele i5elem ie4lev i7e6lim i1els i9elt ielø8pa i8e9ma iem7b8 ie3me i1en ie7na i2end ien6dela ie8né i2e5ni ien7n ie5no i5ens ien4sk ien4s5v ien4t3r ie5nu i6eny ie4ran i4erd ie6re. ie5reg ie4r5eng i6eret i2eri ie4ril ie4ris ie4riv i2erl i6ero ie7ro. ier4ra ier4sp iers3v ier5t ie3run ier5v i2e1s i6es. ies4c ie3se ies5s ies4ti i8es6v i1et i2eta i5e4tabl i3etat ie9te ie5té iet4re ieu2 ie7ved 2if ife4s1 if2fa ifi6e ifjø8 if3le if4les iform4 if1re i8ft if4tal if4tere ifte5s ift2s i3fø 2ig i2gae ig3ann i7gark ig4art iga3ru iga7te ig3att i2gav ig3d i6geb i6gedi i6gedomm igedoms5 i2gem i3gen ige6no i5gers i4gerø i4gesp ig3e4ta ig5ett ig4ged igges4 ig4gra igg7s2 i6gh i2g1ia i5gib i4gim igion4 igje9va ig1l igl6d igli6se. ig5loa ig5neu ig5no igof6 igo5fr ig1om igo4no ig2ra ig2re i2g1rø ig3råd igrå5t igs4al ig5sel igs2j ig5s4ka ig3s4kr igs4mu ig3s4pa igst4 igs4ta ig4ste ig5stek ig7stel ig5stem igs4tra ig5s4va ig1un ig9ut i3h ihen3 iho7le. i4huk ihu9la ihu5le. i1i i5in i7is. i4is8e i6ita i1j 2ik i1k2a i2kab i5kabel i2kaf i2kak ikan9d i2kao i4kapo i5kar. i5kara ika5re i4karei i6kasa ika3sp i2ke. i2ked ik8ei i9keleg i5keli ike5lu i5ken. i4kena i5kene i9kens i3ker. i4kera i5kere. ike5ri ike4r5o i2ke1s2 ike3si i6kesk i5keso ike5su i5ket. i5kets i1ki iki9ne ik5inn iki5st i1kj ik4kaf ik6kana ik4kap ikk5arv ik4kas ik4kat ikk5att ik6k7ent ik4keru ik8kesk ik4kest ik3kjø ik4kjøp ik4kl ikk5lag ik2ko ikk5ord ik4kr ikk3re ikk5sv 4ik2ku2 ikk5und ik2kv ik6ky ik1l i5klæ i1ko i2koa i9koar i2kob i4kod iko5de i2ko3f i4kog i4koh i2kok iko5na. i2koo i5k6ord i4kore i2kov ik1r ik4rak ik5rem ik5robe ik3ros ik2ry ik2sa ik4sek iksmå8la ik7sot ik5spel iks5ti iks5to ik8stu ik4tav ik4teg ik2t1r iktsla8ga i1ku iku6le. i6k7u6t ik1v ik4vin i1ky i3kø i3kå ikå8pa i1la il5adr il7af i2l3ak il3al i4lana il6and i4lark il3art il5ass ilas5t6 ila5t il5av il4dak il4deko il4dete il7dj ild3re ildsfa9re ild3s4t ilea9r ile8are i3le7e i2lef ile4ge. i4l3egn i2l1ei i6leig i2lek i2lel i4leno i4lero ile1s i4lese i4le5sk i4lest ile6tri ilet5te ile4tu i1lé ilfø5re il5ge il1gl i4lid ili5ers ili9ga i5lik i2l1im i4l3ind i7line i4lins i4l3i4r ili5s6tik il3ja. il1je il5jese il1jo il1ju ilke3 il5ker il4kes ilk4o6s il5ku il4lab il6lam illan8da il6lap il9lau il4lee illei9e il6l7ender il6lesk il4lev illi9ga il4lo5m ill3s2 ills5kå illæ4 illæ9re. il4m5est ilm5e4v il4mi ilm5s i1loe i9lolo i4lom il5omv i5lon il3opp i4l1o4r i5loso ilot3u i4love ilo1w ilret4 ilset8je il3sl ilsla7 ilsle7ge il6s7li ils4mu ils2p ils2t il5str il7su il3s2v ilsva9ra ilsva5re ilta9la ilt5rett il6t7å ilu4h i5luk il7ul8 il3un i5lur i9lus il1ut il5v6 ilve8d ilve4r i1ly il1å8 ilår6 8im. 4ima i2mad i4maen i2mag i6m5akk i4mako imal8n i2mam i9man i2map i5mar. ima5s i4matr i8mb2 i4mee i2me1g i2mek i6melu im5enh im8et i9met. i4meta i4meti i6mey i8mé imi9la imini6 i7mj im4lev im8l9u im5m i6mog imo9l im5ord imor8da im7o6v imp2 5imperi imp4l 1impo imp9s impse8 1impu im4ref im4rek im4res im9se ims4k5l ims3kr im5s4me im1s4t im6sti imta8la 4imu i3mø2 2in. 6ina i4nag in5agg i5nakk ina4let i4na2m in3ame in2an i9nane in5ann i2nap in5app i5nar. i5nars i4nask i4nasp i4n5ass ina4t5ak ina7t8r i6nau in7auk in5avl in5avr ince2 in7der 6indig in4dog ind9ra in3dru indr5ø ind5sk ind3sp ind5s4t 5industr ind7å 4ine ine8are i2ned inedy6 in5egg in5eid in3eie i6nele ine4li in7eng ine8pa ine8pe. i7nere. i5neren i9neres ine4rik i7nern i5nert i5nes. i4nesk ines8ka ines8ke. ines4st ine5s4ti i4nesø i2nev 8iné 3infek in4fos in4fot infu9 4infy in4g5ald in4gav in5gebj in6gem 5ingeni in5geri in4geru in3gev ing5jen in4goa in4gos in2gr ing5rep ing7ris ing2s ings5om ingst8 ings5v 6ingu in4g5un in2g5ø i7nia ini9ar. i2nib i5nie i4nif i2nig i4nil ini7m i4ninn i2nip i4nisa ini3se i4nises 5initia i4nito 5injek 2ink in5kel in4kero in4k3la in4kok in5l inla8ga 2inn. in4nal in4nem in4nerø in4nesi innes6t 4innet in6n7ette innfa9s 1inng 5innhal 3innho 2inni4 in4ni. in4n5om in5n6ova inn1s4 6inns. 3innsa inn5se inn9sen inn9ste inn7sve 1innt in4n5u4 4innæ in2nø4 2ino ino5a i5noar i4nod inok6 in7oks in7org in1s 4ins. 8insa in9sa. in7sal in5sar in5se. in4sek in3sen inseri8e9ne in3si insis5 6insj in4sja in3sje 4insk in9s8kas in5skat inske4t ins4ki in3skj ins5kjøt ins6kor ins4k3v ins6kø insle7g ins8lega in3slo in3s2lø in5s4ma in3sop 1insp in4spa in5s4pl ins4po 5instal in8s5te. ins5ten. ins9tens 3in3s4ti in4stin 4in3s6to in5stra inst5rel 5instru in6stå in7sul in2sv 6in3sy 8int. 2in3ta inta8la 4inte. 5in7teg in8t7ege in5ter int5ess in5te4t5 4in5ti inti5me int2r intran4 int4rer in5tres 6inu inu6i i8n9ul8 in7ut. in9u8te 1inv 6invev iny4i iny4t 6inø in7øk i7nøt in3øv 4io io1a4 i2ob io8d8 io4dere i1off io5gn io1i i1oks iol4 io3le iol7jen io3mu io4nans io4narr io6n5erst ion3g4 io4nin io4nu io1pl i1opp io5ra. ior8da io1re io4rie io4r5in iorla8ga iosk3v io1st iota6le. io3t4e io4tra i5pap ipa4ti. i4pee ipela9 i7pe6p i1pi ipi1e ipi9ne i4p5ings i1pl i2ple ip4peli ippel7s6 ipp6lan ipplæ8re. ip2pr ipp4s3t ippsy8na ipp4sø ip7pun i1pr i6pra ip5ru ipru8te. ips1a ipse4l ipsfø5 ip2si ip2s1k ipsle6ge. ips1t ip6tar i5py7 i3pø 2ir i1ra i9r6and ir5ark i9rast ira6tr ir5de ird5s i1re ir3eie ir6ek i3repo i3rer ire6r5a ire7st i3ret i8reto ir7g i1ri iri4a iri8ka. ir3ind ir3inn ir5inst iri9t ir5ka. ir4kat ir5ker. irke3s6 ir4kest ir4kle ir5kv irk5ø ir4mag ir4mal ir4mast ir9mé i5roa i1roe i4roi i1rol ir5opp iro1s ir3re ir7sko irs2p ir3s4t irt6 ir3ta irti6g5r i1ru ir5u4k iru8m iru7sa. i1rø i1rå ir7å6l i1sa i4saks i4sanb i4s3ang is3ann i4s3ans is3ant i7sas is5aud 3isbry is6cen isch5 is3co i5scr i2sed i4seel i4seen ise5ern i2s2e3g4 i2sei is3eie is5eig ise5is i2sek i3sekt i4sekte i6s7eld is4e5li i2sem ise5ne i4seno isensi6 i5ser. i5sers i2ses is5ess i4sete iset8je i2seu 8isé isha7ne 3ishav is4h5in ishø9ve isi6ene is5ild i4s3ind isis5t is7jun is9ka. is3kal is3kar isk9art. isk5arte i8ske is5ke. is8kee is4kel isk5els iske5s4 is3kje i3skjo iskla8ga is6k5le isk3lo isko5g is7kogr is3kop is3kot is1kr is6k5rin is1ku is4kul i5skula is1kv is4kvi is1l i6slu isl7ut isl9øy. i5smak is4med ismo5e i6smus is5ne is5nu 1isol 6isold 5isomo is5omr iso3pa iso5pe iso7pr 3isot is1ov is1p is4pan is5pane. is6pis is7pru is4ses is5si issis5 is6s7kj is4sko is7skr is5sky is4skå is5sok is7sto is6sve is5svo is9s4ær is4søk i5stab ista9le is5tane is5tap i4s5tar ist5avb ist7avi i2ste is5te. is4tek ist5ekt istel5l iste6ma. ist6en is5ten. is5tene is5ter. is5tern is6terø is6té is4tik is5tilb is5tis is3tok is3tol i2str i8s8tre. i4st5ren i5strer i6strer. i4stres i6stret is3try is3tus 6isu is5uf is5ul is1un is1v is4vak is7w isy8na isy5r i7s8ys is5yt i2s1øk i4søy is7åk is3år i1ta ita4l3a ita6l5ers ita4lo ita4ly i6tang itan7s6v itau4 i4tav i4tec i2teg ite8ke. i7teky i6t7elg i4teni i2teo ite3re i4tero iter6s5 i4te5ru i2te1s ite6se. itet6s5 i1té it2i iti6er. i4ties i2tif i4tikam i4ti3kv iti5me i2tio i2tip iti3r i4tisa i4tisen i4tisi i4tisj i4tisko i4ti3sp i4tist iti5str i2tiu itiv4 itivs5 it7jaran it7jer it7ji itma6le. itnes4s i1to ito9a i4tom it5ord ito4s itostra6 ito8v i1tr i4tra. i6trae it3rel it3ren it5rim itri8ma it3rin i5tris it7ro6s it1sa it4s3ei it3ser it6ses it5sku itsla8ga it1sn it6sti it3sun it4tag it6tak it4tal itta9la it6tann it6tap it4t5at it5ted itte4l5o it4tenk itte5s4 itt5ett it4tid it4til it4tj itt1o it6tof it7ton it4tr itt5skr itt4sø it4ty it7tys i1tu itu5e itær1 i1tø i5tå9 i1u iu6a iu2b i5u6l i5um. ium4f5ar iu2m1i ium5m iu4mo i6umse i4um5s4t i4umsu iu2n iu8p i2ur iu5se 4i1va i4vad i6vaj i4v3aks i5val iva6la. i4vana i4v5ank i4varb ivar5s6 i4v5ass ivat3t i1ve i2veg ive6ge iv5eg6n i4vei iv7eig i2vek ive4ra ive5ras iver5d i6veret i4vesk i4vesti i6vesv i6vetø i2vev i1vé i1vi iv5ins iv5is. iv5isb ivle6ge. iv3n i1vo iv7om iv3r iv4sal iv2si iv2sk iv2sl iv2sn iv4so ivs5v i2v3un i5v6y ivyr8ke. i9væ iv7åpn i1wa iwi5 i5wie6 i5y iyr8ke. i5za. i7zas i4ze i1zo i1ø i1ø4k i1ør. iør5i iør5s i4øs iø3se i1øy i1å4 iårs7l iåt4te. ja1ak ja9ar ja4da 1jae ja7en 5jag. ja4ga. ja7gar ja4ge. jag6r ja4ha ja4hv ja4j jak4kel jak7kele jak4ko ja8k7ok jakk5s4 ja1k8r ja8kre jaktel jakts8 ja7ku ja3lo ja1lu jam7b 6jambi jamhø8ve. 5jamm jams2 jan4gr j5anl ja6ra. ja6r5ap ja9rek jarn3s4 jar5ta jar5te. jar5tet. jar7ti 6jarø ja6rå ja7se ja8ski ja5sti ja5ta jau4ere ja9vi 1jaz j1b 2jd j2e 2je1a2 je5ak 2jeb jeb9b je4deb 6je4dek 4jedr je4ep1 6jeev 2jef je4f3et je2fj jef5lag je4f3re jef4sa jef6s5i jef3t4r je5ge jeg5ge 6jegl jeg6les 4jego 4jegr 4jegy 2jeh je1i je5i8s 4jej 2jeka jek6keru 4jekl je4kli 2jeko jekt3a jek4tan jek6tes jekt5ev jek4t5in jek4t3r jekts4t 4jekø 2jel je6legr jelei7er je7lele je4les jel7ge jel6lag jell5ang jel5len jel4lo jelt3 jel4tr jel9ut jel7va. 2jem je4mia je4mit jemp6 jem5pl jem5se jem4sti 2je7na jen1d jendis5 4jendr je3ne. je7ne8s 4jenet jen5ged jen7g8la jeng5s4 2jeni jen3k 4jenl 4jeno 4jenu je2n1y4 4jenæ 2je5o4 2jep je3raf je4r5ant jer4dep jerd6s je3r6e 4jered 6jereg 6jerei 6jerenn je5rik je6rim je6rinæ jer4kes jer6k5l jer4kv jerle7 jer6mu jer6n5as jern5sl je6ron jer4sp jert5s 4je1ru 6jerå 5jesf 5jesh jes4kil 2je3sp jes4tea je6stim je3str 5jesut je5sve je4t3ag jeta6ka je9tar. je7tara je9tare je4t3ru jets2 jet4t5an jet6term jett3o jett5s6 je4t3v jety8e 2jeu6 4jev6a je7vark je6vas 4jeve jevi4s jev7na. jev7ne 6jeø j1f 4jg j1h 4ji. jib5b ji7e6 6jik 2j3inf ji7ro ji6sj 4jiø 2j1k j4kap 6j1l 6j1m 6j1n 6jn. j5ni j2o 1job 5joc jo4da. jo6dat jo6dis jo4fl jojo5 jok9ker jokk9o8 jol5t6 j3omr jon2 jo5ne jon7n jons1 jons5a jonse4 jons3p jons5t jon6sti jon4str jonsu4 4jop jo5ra jor6dek jor6d7erv jor6d7is. jor4d3o jord3r jord5s jords4l jor6du jo1re jo4rie jort6a jor5tet jo3r4u 2jos jo3se jo4ses jo5stei 1jou jour5 j1p 4j1r 2j3s2 j1t ju8are 1jub jubi3 ju9bo juda8s7 ju3de ju2do ju7doe jue7ni ju4e5re jue9s jug9le 5jugo 4ju2k ju3ka ju3ke. ju3ken juk9sar ju2l ju3la. ju5lar ju5las ju8l9ei ju4li. ju6lid ju4lik jul7inn jull6 1jung jun7ge j6u6ni 8jup jup7s ju6p5å6 ju4ra ju7ras 3juris ju9ro ju3ru 5jury 1jus ju5so5 ju1ta jut5o ju6va. ju6vak ju1å j5v jy1 jy8de. jy2p3 jæ5le. jæ3ra. jæ9ran jæ9res. jæ7te. j2ø 1jø. 1jøa. jø5b4 1jøe 2jøef 4jøeg 6jøei 2jøek 4jøend 4jøeng 4jøeta jø1f jø3gr jø9kj 4jøl jø4les jøl6ver jø5me jøn5ne jø5pa jør4kel jør4sp jørs5v jør4tel jø3ru jør7ut jø1rø jø4ses jøst2 jø5ta jø6t7av jø3te. jøte4t jøt5eta jø1tr jøtte4 4jø1v jø4vel 2jå jå5ar. jå9ge. jå6la. jå4le. jå7les jå5let 1ka. 2kaa 5kaa. 5ka4an4 k3aas ka3at 6kabes ka7bo 4ka1br 4kaby ka3da 6kadale ka5del ka6del. ka4deri 4kadg kadi7e 2kadr 5kadu 4kady 3kaen ka3fe kaf5fere 2kafo ka9fr 2kaft kaf5ta 6kafø 2kag k5a4gi kag2r 2kah ka5isk ka5ism 6kajo ka4ka. ka4ke. ka4ked ka4kel ka4kes ka4ki. ka4kis 6k5aksj 4kakt ka3ku ka3lam ka3lan ka6lant ka3las kald5s 5kaldt kal2e 3kalen ka5lev 5kalis k6al8k5 kal7k6e 5kalky kal7la kal6lero kall4s ka1lo kal3p kal7s6v kal4ves 1kam ka6ma. ka8me. 4kameri 4kammel kam4p3i kam4pr 7kamu 1kana ka8na. 4kanda kan6da. 5k6ande. 1kane ka5ner kan4i ka5nin 2k1anl 4k1anm k3anno 5kano ka4no. ka8nom 4kansa 6kansi 3kansl 1kant kan6t7end kan6t9r 2kap. 5kapad ka4pak 3kapas ka5pe 5kapell 4kapen 3kapit 1kapp kap3re kap4s3t 1kar. 1kara 4karab 4karam karan5 ka3rav 1karb 4karbei 4karea ka6rek ka5rel 1karf 5karg ka4ri. ka6rid 6k3arki 6k5arkt 1karm kar3n ka3rol kar3om kar5pes karp3s 3karri 7karsj kars4t 1kart kar5ti 5karu 4karå 1kas 7kas. ka5se4i ka3sek kas5ev kas2ju 6kasjø ka4sk kas3ka kasko5 6kasp ka4spi kass6 kas6sad kas4sak 4k3assi kas4so ka4st 8kas5to ka6su8s7 kas2t3r 1ka7t6a ka8tak8 ka3ted 3kateg ka3tet ka1to ka4t5op 4ka1t4r kat7s kat5ta kat6tak kat4tel kat6term katte5s kat4til kat4tri ka4t5y k7au4r 2kav ka7ves k9avis kav8l9u 9kay 6k1b4 2kc k5ce kcen4 2k1d k5d6v 1ke 2ke1a8 ke9al 2keb 4kebr 4kebuk 4kec ked4 ke5da 4kedag 4kedal 5kedan. 9kedant ke5de 6kedei 4kedem 4kedes 7kedes. 2kedi 2ke5dr ked8sk kedu6 4kedy 2kedø 2keeg 2keek 2keel ke4ep ke7ern 2keev 4kef k3eff k5eft 2ke1g k3egg keg8ga 5kegladh ke5h 3kehet 4kehj 2kei k3ei2d k1eig ke5il ke1im k6e1in keis2 2kej 2kek kek2l ke3kn k1eks k5ek4t k6el. 2kela ke3l4ak 5kelal ke6lans ke6lat kel5eier kel5eig kel7eik kelei8ke. 6keleis kel3e4l 4k5elem 4keleng 4ke5lep 4keles 7k6elet 4kelev keli8e8 keli9en 3kelig 4kelign 4kelinj kel5int 4kelis ke4lise 5kelit 4keliv kel5l 4kelof 6kelov. 4kelove kels4 kels7kar kel5sl kel5sp kel5st kel3sv kelsva9 kel2t kelt3e 6kelua 4kelue kel9uka kel5uke ke4l3ur 6keluv kel5v 2kely 2kelæ 2kelø kelø8pa. 6ke5l4å kelå7re 2kem ke4mit 5kena. 6kenam ken6ap ke4nas 5kenatts ken5de 6k5en6den 6k5en4der 4kend5r ke3ne 4keneb 4kenek 4kenel 4kenem 6kenett 4kenev 3kenf ke4ni 5k6enh 4ke5niv ken3k ken7n kenne4l3 ke4nom ken1s2 4k5ense kens6t ken7te ken5t6r 4k3entu 6ke3ny 6kenø 2keo ke7of ke3on 4kep 5kepi. 9kepia 7kepie 6kepl kera7l 4keram ke4ran ker5ant 6kerau 4kered 4kereg kerei4d 4kereir 6kereis 4kerek 4ke5rem kere6n 6kerene ke6r5eng 4kerenn 4kerep ke4r5ert ke3res 4keress 4kerest 4keresu 4keret 5keret. 5kereta 7kerets 3keri ke4rif 6kerik. 4kerike 6kerikt ke4rim ke4rine 6keringi 6keringj ke4rinæ ke4ris 8kerist. 8kerista 6keriste 3kerm 7kerop 5keror 4ke3ros kero6se. ke3rot k4ert ker5to ker3t4v ker3un 4kerus keru6se. kerø6re. 8ker8øya 6ker6øye 2kerå 5kes. 4kesam 9kesam. 7kesdale 5kese. k5esel ke5sil 4kesit 2kesj k9es8ka. 4k5eske kes8ke. 4keski 4keskj 6keskå kesle6ge. kes5ped 5kespot 5ke4spu 5kest. 4ke3sta 5keste. 4ke5sted 4ke5stei kes6tem 4ke5s4ten ke3sto 4kestri 4ke5stru 4kestu 4kestø ke4s5un kes1v 2kesy kes1å 2keta keta6ka keta6le. 5ketals k6etar ke3te 5kete. 4ketek 7keth 2keti 2ketj 2keto 2ket2r kets2 ket6t7enh ket8tes 2ketu 2kety kety6e 4ketæ ketøy6s5 2ketå 2keu2 ke5ur 2kev kev2a keva8ne. 5kevas 3kevel kevi6sa. k1evj kev6ja kev4je. k3evn kev6ne. ke3vr kevæ8ra ke2yt 6keæ 2keø 2keå 1ké4 két5 2k1f k5fi 4k5g2 k3ge k5gh kgu4 4k1h kh5ak k4har khe4o khjul8s kh6m ki3a2r k3ideo 4kidol ki3dr k4ie2 kie5re ki6el ki3er. 2kif ki5g4 ki6ka. kikk8s9 ki1k8l ki3k2r kik4s ki8la. 3kilde 6kildr ki4le. ki5li 4kilj kil9ja kil6le5st ki7loa ki4log ki3los ki4lov 2kilt ki7lå ki8ma. ki4me. 5kimo5 ki4mol 2k1imp kin9and ki4nark ki5nas. 6kind ki5ne ki6ne. 2kinf 1king king5and kin3ge kin5ing 2kinn kinnsi8da kinnsi8de. kinn4sp ki2no kin5ov 2kins kinsi6de. 2kint kinti8me. ki6nu 2kinv kio4 4kiol 7kios 2kip ki5pe ki4p5l kip5pe kip2s3 1kir ki5re ki5ri 4kirs ki3se ki5sko ki3smu ki1s2p ki5stav ki5str ki6ten ki7ti 5kito ki4ton 4kiu k6iv ki4vek ki4v5enh ki6vi. kiv3s kj2 3k8jan kjap5pe 6k7jarn kje7fj kje7f6r 4kjegg 3kjeld kjel7leg 5kjemas 3kjemp 6kjenk kje9ny kje1s kje6t5r kjet5t 6kjor k8juk kju5le. kju5len kju9r 3kjærl k5jødi 1kjøp 3kjøri kjø4tr 8kk k1ka k2kab kk3aft k2k1ak k2k3al k2kam k4kanb kk5and k8kand. k6kanden k4k5ang k4kann k4kao k4karb k6karg k4k7art kkar6ta. k5kast k6kasu k6katt k2k1au kk1av k6kedo k4kedu k2kee k2keh kk1ei k5kel. kke6lei kk5e4lev kkel3t4 kkelu4 kke4luk kkel5un kke6nan k5ker. k4kerei k4kerel k6kerent k4kerig k4kerit kke5r6und k4kesa k5kesau k4kese k4kesi kke3s4l k4kesp k6kestad k4kete k5ketet k4ketø k4k9g2 k1ki kk3ind kk3inf kk9inn kk3ins kk3int k2kir k1kja kkjek8 kk5jent k4k5jern kkje7t kk5ju kk5k kkla4g kk3lan kk8lar kk7lau kk1lo kk1ly kk3læ k4kn kk5ne kk5ny kk6s5v k1kod k1koe k4k1of kko6lig kk5oml kk7oms kk9omt k6koo kk1op kko7s k4kosi k6kosk k4kost kk3ove kk5p k4kra kk5ram kk3rap kk3rea kk5rei kk3ren kk3res kkri6k kk3ro kkro8e kkro4s kk3ru kk4rus kk7rø kk7rå k8k7s kks6al kk4sar kk5sed kk3s4ei kk4sin kk1sk kks4kj kks4l kk3sla kk7sle kk5sli kk3spe kk1s2t kks5tak kks7tep kkst4r kk8s7va kk5s4å7 kk7t8 kk5uk k4kuni k2k1u6t kk1v k2kvo k1ky6 kkyl4 kk5yr kk7yt k2k1ø k8køl kkø6r kkøy6 kk1å2 kl4 6kl. 4kla. 4k5lagt 2klak kla9ke. kla4mel 3k2las k7lati kla4tr kleby7t 3k4ledd kle4deb kle4des 2kleg klei9e k7leik k4leiv k2lem 5k6lem. 7k4leno k6lerik kles7j kle5sno kle4sp kle5sti kles7s8 2klet 8klia 4klie. 4klig 1k2lim2 3k4lini k5linj 1klip 4klit klon7a8l 1klos 2klov k3lukt 4klun klun5t k5lyd 6k7lyf 3k4lyng klyse7te k2læ klæ5res klø7na k6lør 6kløs klø9va klø5ve 6k1lån klå5re 2k3m kmann6 kmål2 2k1n2 3k2nap kna5t4re kne4b3l k4nedi 5k2nee kne8se. k4nest kn5f knas8t7a8 3k4nip knippe6 kni2t3 7k6niv kno7g kno6kl 5knop kno9ta kno5te 3k2nu 4k3num 3k2ny kny4s k2nø knø9le kn3øy 9koa. 4ko1ak 9koane ko7ar ko2b3 ko3bo 4ko3br ko5da 4kodd ko4de. 3kodek 5koden 2kodø ko3e 3koef 4koek 4koel 4koes 4koev ko4g5eng kog9ger kog3l ko4gre kogst6 ko4gu ko6gå 2koi koi4e5ne ko7i6k ko1in 2koj ko8ja. ko4ka. ko4kab ko4ke. ko6kel ko1ki kokk6o k3okku 4kok4l 4koko 2koku kolba5 kol8d7a 2kole ko4leg ko4lei ko6lel ko4let ko4leu 3kolle ko5lo. kol5p 4koly 2kolå 1kom ko4ma. 4komaf ko4me. 6komg ko4mi. 4komil 4komisb ko4mise 2komr 4komse kom3sl kom5so kom4st 4kom5t 4komu 4komå k6on ko4na. kon3d kon6dr kone5l6å 4koniv kon3s2 kon6s7v kon6ton ko4nu 1ko1o 4koom ko5pa ko5pers 4kopet ko4pi. ko4pip ko4p9l 4kopo kop5per 2kopr ko1ra ko4ra. kor6da. kor4d3o kord5s4ø kor4du ko1r6e 6koref 4ko7rei9 ko5rem ko7ret ko3ri ko6rik 4korm ko5rol 6korpa 6korpe 1kor3r kor4sal kor6s5inn kor4s5l kor6str kor4sv kor5tes kor6top kor4t5r kort5s4 ko5ru ko6rume 1kos 2kosa ko6sa. ko4sed ko4sek 5kosele ko5sen ko4ses ko9si kosi9d ko2sk ko1sl 4kosmu 2koso 2ko1s2p ko6sta kost7as kos6t5ers kost5j ko8s8t7ø8 4kosø kotes7 ko5t4i 4kotil 4kotr ko6tre kot2s kots5tr kot4ti kott4s kotts5t 4koty 2kou4 kout3 kou7ta ko1va kover7e 4kovr 1kov4s3 4koø 4koå 6k1p kr6 k3rad 1k4raf 5krag 3krakk krani6e7n 6krank 3krans 4krap kra9se 7k8ra4sj kras5s kra4to kra4u 1krav 4kred. 3kredi 4k1reg kregi3 4krei krei9e krei5s 6krek kre4kli 2krel k5rela kre8m7o 4k3renn 4krent 6kreo k5repr 5kreps 5kresj 4k3ress kreta9 6k7retn k4rets k3rett 2krib 4krif 7k6rig krig6s5 kri9ga 4krik kri5ke kri4kj krik6ka 1krim kri4me 3k6rins krin6s7t kri2p 1k2ris 7krisene k2rit 3krite 6kriv k2ro kro5b4 kro5de k3rofo k4rofor krok7k k6roni k5ronl kro4nom k4rop krop9n kropp4 k4rost kro9t8e kroten9 kro3v kru3i4 krum3 kru5sa krutt5i kru3tr 2k5ryg kry7pa kry5pe kry4pi 3krys krø5ke 6k5rør krø3v 4kråd krå8da kråe6 5kråk krå5le krå9m krå7ne k1sa k3sa. k2s3ad ks3alt ksa5me k3sane k4sans k4s3ant k3sar. k7sara k6s3ark k7sas k1sc k2sed k2see kse6ge k2s1ei k5sekt k5sela kse5lev ksen5to k4serf ks3erk k5serol k4sesa k4ses6k k4se3sm k5seso kses4p k5sess kses6sel kses8serie kses4sp kses4st kse6te. ksfø4 k5sia k2sif ksi5ko ks3ind k3sing ksi7ni ks3inn k4s3ins k7sio ksi3st k4siti 6ksj ks9kab k6s3kal k6skio ks1kj ks5kl ksko7na ksko5ne ks1kr ksk8u ks9ku. ks7kua ks8kut ks1k6v ks1l ksla8ga. ks5lo k7s6lu k8s7lug k8s5løs kslø8va kslø8ve. k5s4mak ks4mel k8smid ksmå k5s4no k7s8nø k1so k6s7oa k6s5o6d k4sog k4somb k2s1or k2sot ks1ov k3spal ks3pek ks5pio ks3pir kspor6t5r 6k6s5pors ks1pr k8sr k3spy k8s7s ks3sm k5stad k4stak ks3tal ks5tant k7s8vak ks6tav kste4da ks4teg k3stei k4stek kst3ev kstev6ne. ks4til k4stin ks1tj ks1tr kst6ran ks4t5rek k6stren k6strer ks4tri ks4tro ks9tum k5stus ks3tyv k2stå k1su k6sun k8suni ks1v k9s8vake ksva8ne. ks5veg k7s6vert k5s4vin k8svis ks5w ksy8na ksy8s7m ks5ær ksø4ke. k6s3øl ks1å k3så. k4såp ksår4 ksåt4 6k1t k5ta. kta7f6 k4tag kta6ka k4t3aks k4takt kta6la. k4t3ana kta9na. kt3anl k4t3ann k4tanv kt3app k9tar. k4t3arr k4t3art k6tass k5tast k6t7atl kt5avh kt5avk k6t3avl k3ted k4teda k6tee k4tefø kt5e4ge k2te5i k6teka kte5le k6t5elsk kt5e4lit ktem8 kt7emn k4t3enh k9ter. kterie5n kterie7ns kter5s6 k7tes. k6tesa k6tese kt5eske ktes6ke. kt5esti k4t5e4ta k4tete kt5evn ktev6ne. k5tib k3til k4t3ins k5tir ktis5t kt7i6te kti6v7end k2tja kt7ju kto9a kt5off k6togram k4toli k2tom kt5omf k2t1op k9tor. k7tora kt5ord. k5tore ktori9e8 ktor7s kt1ov kt3ral k2t1re kt2ro ktro5s k2t1ru kt4s5amb kts5ar kt5sek kt7sem kt4s5er kt6sin kts5kra kt5sku kts4kv ktsle6ge. kt6sok kt4spa kt5spre kt4sta kts6ton kts5top kt4stå kt3t8 ktu9er. k4tuk kt7und k2t1ut kt8yo kt7yrk ktyr8ke. ktør7 ktør8e k6t5øs kt1øv k2t3år ku2a ku9an ku4be. ku3bj 2kud ku4dal ku4er. kue4r5a ku4et 6kuf ku4f3l 6kug k5u4gr ku7is kuit6 ku7k8l 6kuldi kuld3r ku4led ku4leg ku6lei ku4lem ku5len ku4let ku4lev ku5li ku6li. 3kull 1kult ku4man kumen6tal ku6mi kum2s 3kumu 1kun kund5s6l 2k1ung kun4ge. k6unn ku4o 1kup ku4pe. kup4pl ku7ra ku4rek ku8r7o ku7r6op kuro8pa 1kurs kur6sk kur4sp kur4s3t kurs3v kur3t ku5ru6 kuru9ken kuru7ker 1kurv kur4v3i 1kus 5kus. ku7sa. kus5a6k kus5ar 5kuse ku4s5el ku4ska ku7s6pe kus3t 6k1ut. ku1ta 4ku5te. ku5to ku6t7r 2kuts 1kuu8 kuøy6 kv2 kva8ke k4vali k6vard kvari6e5n 5k6vart kva9se kve3d2 kve7e kve8g7r k4veik k6veil 7k8vein kvei9se 1k4vel kve5la 4k3verd 5kvern kverns8 2kves kves5t 7k6via 4kvid 3k4vie kvi4ene kvi5er kvi7la 3kvinn kvi5se 7kvist 2kviv 1kvo k1vog 6kvok k4vot k2vu 4k3væ k1vå k7we k5wu ky5a ky6el 4kyf kyf5le 2kyg ky4leg 2k3yns kyn6skjer ky2p1 ky4p5r 1kyr kyrie5ne kyr8ke. ky8sa 4kyse ky6se. kyse8te. ky3skr kys6sk 1ky4st kyst3a kys4tel 2kyt ky6ta. kyte3s k1æt3 1kø. kø2ar 1køe kø4en. kø2er 6k1øk kø4le k1øn køn6skjer k3ørr køs4 kø5se køy7ar. k7øyd køy4e5ne 1k6øyr 4kåke kå3le kån8da kå5ne kå4pe. kå7pen kå9ras kå1re kå1ri kå2t5 k5åt6t 1la. 2laa la1b 4laba la6bl 1labo 2l3abon 4laby 4lad. l6ade la4dem 4ladg ladi9e8 2ladm 2ladr lad3s4 1lae 2laei 4laent 4laep 2laf la3fl 4lagg lagi4 6lagne la2go8 lag5om la2g1r lag5san lag4sj 2laha 2la1in la5ka la4ke. 4lakj l2akk la2kr 8l7aksel l7aksj l5aksl 4lakt lakterie6 la5kø 2lal l1alk la5mab 4lamb la4mes la4met la3mo l8a8mu 4l3anal lan2c lan6das lan6deb land3r l6a3ne 3lane. 4lanet lan6gel lan4gem lan6germ lan4gr lang3s4 lang4s5e lan6g5ø6 4lanl 4lann l3anno la4nor 6l5ansi lan8s7p lan5ti 4lanv l3anvi 2lao la6pal la7pi la8pl lap8p7r8 lapp7s8 lap5sa lap5sen lap5s4i 1l8ar. 6l7arab 2larb l8are. 4l7area la9red la5rem l6aren. 4larena lare6t la6r7eta 5larf la7ria lariar lari6e7n 4l3arki l2arm lar3n 6l7arr 4lart lar6ta. lar7vet la6sc la5se lasi9e la2sk 7laskj 4lasm la5smi 4la4sp las6sak las6sam las6sat las6sel l6ast 4lastr las3v la1ta lat5ang 6latau la4teg lat6ek la4teno late5s4 la5ti la6ti. 4latm la1to lat7ra. lat9ran lat5rar lat4t5is lat4tra latt6u lau7a 2laud laue6 4laun 4laur lau7se lau6st 2laut 2lav la4v5al la4vel l5avh lav5inn 6lavs 7lavå 1law la6y5 6l1b2 lba3de lba4k lba5ke. lba4ne. l5be lbe9na lbe8re. l4boa l6buh lby4e l5bå 2l1c l4ce. 6ld l7da. ld5aks ld5akt l9dand lda6t5o lda6t5y l2deb l5den l2de5o l2dep l3der l7der. lder7a l4derek l6derik l6derklæ lderle9g lder5s6te lder6s5ti l4desh l6destr l9dé ldis7k ldo9a l8d5oks l2dol l4dore ld5ovn l3drak ld3ran ld5ras l6dre. ld7regn ld5rer. l8dres. ld1ri l7dry ld1rø ldse8 ld4sek ld4sel ld4ses lds1k ld4ska lds4kj ldsla8ga lds6leg lds4let ld4s9m ld5s4om lds3tr ld6tus ldø2 ldø5d ldø5l ld7øy 1le 2lea le7ag le3ak le1al lea5la 3leas le5at 2leb le4bem le6bosta 5lebæk lec4 2leda 5ledar led4dø 4ledeb le4dem 6ledep le5der le3des 2ledo 3ledop 5ledov le4dro le5dry led1s2 6ledu 4ledy 2ledø 4le3då 2lee 6leei 6lefa lefa6ne. 4l1eff 2lefi 4lefl 4lefor 4lefot 2lefr l1eft 6lefy 4lefø 6legap 5legas 3lege le4ged le9gen le4gera le9geran le9geras le4gero le4geta le4gev 7leggi le3gi 6legif 4legj 2le1g2l le4gol 4legre leg3s4 2legu 2legå 2leh 6lehal 6lehamr 6lehan 6lehau 6lehave le3ido lei8e l6eie. lei5ende lei4e5ne lei9er l6ei8et leig6d lei4ger lei7ger. lei4get leig4h5 leig6na leig8ne 2lein le3int lei6r7u leis7t l6eit 2lej 2leka le4ka. 6lekan lek6e le3ki 2lekj lekk7s 2lek2l 2lekn lek4na 2leko 2lekr 4l3ekso 4leksp lekt5ord lekt4s5t 2leku 2lekv 4lekø 4lekå 2le3la 8l9eld 2lele l3elem 4l5elg 5lelig 2lelo 3lels 4l3elsk le1lu 4leluk l5elv 2lely 4lelæ 2lelø lelø6pa 4lema le3me le8me. 4lemet 8lemetrisk 8l9emn lem8na 2lemo lem9ped lem5pes 3lemr lem4si lem4s5ø 2lemt lem5ti 2lemu 6lemy 4lemø 2lemå le4na. le4nal 4lenav lend8a len9dan 6lenden l6endre 4lendri 4lened 4lenem 4lenev l4engd len4g5r leng9u le5ni 4leniv lensa4 len4s5ak 4lensem len5ses len4sta len4tam len4tr len8t9ra 2lenø 4lenå 2leo 5leol 2lep le5pa le4pel le8p9enden le2p3j le8pla. le4ple 4lepo 4leraba 4leram le2r3amb ler5d l8ere le9re. 6lerea 4leref 4lereg 4le9r8ei 4lerek le5res 4lereso 4leresu 4leret 4lerev 9leri. 7lerie le6riei le7rina le4riv 4l5ernæ le5ro. 4lerom 6lerope le3ros 4le3rot 7lers. lers4p ler7te le1ru 4lerus leru8se. 2lery 5leryr 2lerø 2lerå 5l6es. le4sab 4lesam 7lesar 4lesau 2lesc le5sed le4seg 4lesek le5sen le3ser 4leset 4lesho le6si. 4lesig le7sing les5inn 4lesit 4lesju le7skap le4s3kj 6leskol le6sk9u8t 4lesla 2lesp 6lespal les3s6 lesse6ne. 4lesta 9lesta. 7lestal le5sted le5steg le5stel le4stim le3sto 4lestrø 4lestyr 4lestø 4lestå 4lesug les1v le5s6vi 4le5sy 4lesø 5lesøy 3let. le4tab 6letak leta8ka leta8le. l5e4tas 5lete. 6letea 4leteg 4letek le5ten 6letenk 6le7tep le5ter. 4letes 2le3ti l5e4tik 2letj 2leto 2let2r le7tre le5t4ri 3lets let6sj lets8k let6tea let6tr lett3s4 2letu le4tv 2lety lety8e 4letø 8letå 4leul 2leun l1eur 2leut le4ute 2lev. le6vad le6valu le4ved 4leveg 4levei 4levek 6levern 4le4vev levi6d lev5n 2levo lev1r 4levs 4levæ lex1 4leø 2leå 5lée 1lér 7lét. 7lè 5lê 4l1f l4fa. lf5ant l5far l5fe lf3f l5fig l5f6in lf5ja l7fje l6f3nul l4fom l4fut 2lg l6gaf lga8le. l4g5alt l4g3ana lga5t lga4ve. l2ged l4gela l4gele l2gem lge3na lge4r5an lge4rap lge5ri lger5un l4gery l4gesl l6ge7sp lg5g lgie8n lg1lo lg5ly lg5n lg3ob lgo2d lg1ok lg1om lg5ov lg3ref lgr9øy lg3s2e lg2sk lg5s4kre lgsle9g lg5s4tr lgu4l lg3un lg3ur l1gæ lg5ø l6gå. lg5år. lgå8va lgå8ve. 8l1h lha8ka. lhav6s5 l5hj 1li li1a li4ala li2am li5ans li4as liba5 libe5ro libi5 libie6 liby5e li4dak li4ded li4do. 2l1idr lid3t li4ene li3er. li5ers. lie5s 3lif 4lifat lif5f 3lig li4ga. li4g3an li4gar lig9art li8gas. li4g5enh li4get 5lign li4g3re lig3se lig3s4i lig3sl lig3s4p lig5s4ti lig5str li2gu 4lih li5kan li9kar li7kas li5kee li3ken li5keså li9ki likk3o li1k2l 9likn liks4t li5ku 6lila 8l5ild li3le lil5lebe lil5let li4mar li4mas li6mate l6ime li4me. 4limh limp3r lim7r lim9u li4na. 4lina6l lin6c linch5 5l4indr 4lindu lind3s4 l5indus li4ne. li3ne6a li6nem 2l1inf lin4g3j ling5l ling7sen. 5lingv 4l5inju lin5kes lin5kle lin4kv 2l1inn lin5net 3linni 6linns 6l5inntr li4nor l4inse 5linsk 4l3inst 4lint 2linv li6n5ø6 lio4no lion5sp lion5sv li5o6s 2lip lipes4 lipp4s3 li9rar li4rek 4lisak li5set lis4kl 2liso 4lisp lis6sp lis7tan lis6terk lis5ti 4lis6til list3o li6s8tr list7rø lis4t3u4 li4st5y listyr8ke. li4tee li4tek li4ti3a li4tid li4tig li4til li4tim liti5st li4tiv lit5j 6litn li5to li2t1r lit5rer lit6tele lit6terk lit6term litt5s6 li5ty 7liu li6va. li4v3ak liv5eg livi5e liv2s3 2lj l1jan l1jar l4jarb ljar5s6 ljas4 l4jed l6jee l2jei l2jek lje3l lj9elv l1jen l3jer. l4je1s l5jes. ljes4t l5jet. l4jete l5jete. l6je5t6r l2jev l5jé l1ji 3l2jod ljo8e l4jom lj5ori 3ljos lj5un l7jur lj7ut ljø3 l5jøs. 6l1k l3ka l5ka6l lkali9e8 lk4an l6k5b lk4e l3ke. l2ked l5kedal l3kede lkeei4 l6keh l5keleg l8k7els l3ken l7ker. l4kera l4keri l4k5ers l4ke3ru l5kestad l5ket. l5kets lk2l l7k8lem lk4li l5k4lu l6k5nin l6ko. lko9ma lko9sa l2kot lkras5 lk5ri6k lk4ser l4k3s2h lk1s4t lku4le. lku8t lk9ute l6kveg lkå1 6l1l l5la6a ll6a5f l2lak ll1al l4lami l5lane ll3anl l4l5ano llans4 ll5ansk ll7apa llap3s ll4as ll5asp ll5aur llau6re ll7avl ll5avr ll3d2 lle5a l5leak lle8da. lle4d3r l3lee l2lef lle5gev lle5gr l5leha l5leho l5lehå l4l5eig l4leki l6l5ekst l4leli l2lem llen6da. ll5enden l4lendr l6lendt l4lenk l5l8ens l4lentu l4lenu ll5eple l6l5e6rik l4lerob ll6es lle4so lles5pr lle5stø l5let. l4leta l5lets llet6tele l8letæ l2leu ll5even lle7vev l5levå lle6y l2lé. ll7g2 lli1e lli5e4n l9lig l2lim l4l3ind l4lins ll3int l9lint. l3lip l4lir lli6sen l4liv ll1j ll7k2 ll5m llmue9ne llmu7ens llmu9er l5lo. llob5 l2lod l4l3off llo5id ll5oks llo2m1 llom5s6 ll3op ll5opp l2l1or l4loso l6lote ll5p llra7n ll4sak llsa6me. ll4sem lls5end llsk4 lls6kar lls5kv ll5skå lls5lag ll3smy lls4no lls4te lls6tig lls7øk ll3t4 llto4e l8lua l4lu4e l4luf ll7ug llu4k l8l7uka l4l3uke l6luks l5lum l4l1un llun6ge. llu4pi l2l1ur l3lus l2l1ut ll1v4 llva8n lly4se. l4løk ll5øks llø6pa. l4løve ll7øy. ll5øya ll3øye lløy6er ll5øy6n ll1å8r ll3å2s 2l1m l5ma. lm3anm l4map l4marki lm3av lm7b l4m3els l4melu lm5e4po l4m5erf lme7ri lme7sti lme5t4r l5mil lmi8le. lm3ind l5ming lmini6 lmin7ne lm3ins lm5int l7mis lm5l lm5m lm1op lm1s lms6j lm5s2p lm3t lmu4le. lm3ut lmyr8ke. l4mø. l6m5øs lm5øy6 lmøya9 lmå6la. lm5å4r l4m5ås 2l1n l2nab l3ne lni4u l7ny lo1al 7loane lo1a4r 5loar. 2lob lob5by. lob9byan lob9byar. lob5bye lo2bl lo2d3a lo3de lo4d3ri lod3s4m lod7ste lod7s6v lo6d5u 6loeng 6lofj 3loft 1log lo5ge lo6g5e8v lo4gir log2o lo3gop log8res lo6g5ro log5sa 4loh lo5id. lo3ide lo1in 3loja lo1ki lok4ko lok6kul 2lo1k4l 4lokon 2lok7s4 lok8se. lo1k4v lole6ge. 2lolj lolo9 l5omdr lo4m5in lom4mel lomst9r lo4nal 6lond lo5ne lon4g3r lo4nit lon7skj 2lop lo3pa lo4pea lop5pa 5l4opt lo1ra 2lord lor6da. lo1re 4l1org lor4g5l lorie6 6lorm lo1ro lo7rød lo7sa lo6sek lo4ses lo5sev los4kle lo1sl lo7sp 2lost lo9tes lo8ti. lo3to 4lottet lo1un 1lov lov7ald lo3van lo9vand lo7vane lo3var lo3ve7d6 l6over. love5re l5overn 6l5overs 6l5overt 7lovo lov3sa 2l1p l7pa lpa5re lpas5 l4pedo l4pee l2pei l2pel l5peleg l3peli l4pelin l3pesm l4peti l2peu lp2h lp2i lpin3e lpi5ne. lp2l lpo6et l4put l5q 2l5r4 lra8da lradi4u lra6ne. lre4de lre4i lre8ka lre8ke. lre8va lri8ma lri4ve. lro8de. lro6pa. lro8sa. lro4se. lrot5s lrø6re. lrø5v lrå8da. lrå4de. 8l1s l2sad lsag6 ls5ald ls4am l7sana lsan6ke. l4s5ano l4s3ans ls5ark l4sat. l4scu l3se. l2sed l2see ls3eid ls5eig l4s3ele l4s3elv l2sem ls5emb l4seno l7ser. lse2s lses5ku lses3l lses5pa lses5s lse8s5tr lse4te. l2seu l6sev l4sf l2sh l5sig l5sik l6s5ill l4sim l5simu l4s3inn ls5jakk l5sjef ls3jeg ls3jen 8lsk. ls5kabi l4s5kan ls5kari lsk5art l6s5ke lskif5 l2s3kild lskinn6 lskinns5 ls1kjed ls3kjo l6skl lsk3læ ls3koa ls5kor ls3kov l4skra ls8ks lsk5un ls7kva ls3kvi l4skå ls3kåp lskå6pa l2sl lsla4ga l7slagn lsle6ge. ls5lo l5s4luk l6s5løs l2sm l5smør lsmå6la l2snu lsok3 ls5ond lson6de. l2s1or ls7o6se l5sot ls1ov l2spa l9speg l5spei l9spel l5spi l4spr l5spred ls3pri l8s7s l4s3tak l4s3tal l6stank 8l7s8tat l6ste. ls4ted l4steg l3ste4i ls4tel ls5terr ls6ti. ls4tie ls6ton ls5tren l9stri l2su l5sub l3suk ls1un l2s1v ls7vea ls5vee lsve8en. l6s5vek lsve7re l4svik ls6vind l4sør l2s1øy l2s1å 2l1t l4taa l4taf lt3akt l3tal lta4la. l4t3alb lta6lev lt3anl lta6no lt3art lta4st lta8tes lta4t3o ltat3r lt3avk l5tavæ lt9b l3tede l4teka lte6ma. lt4en. l4t5enh lt3epi l4teras l4t5erst ltesa8me. ltid6s l4tiet l2tif lti6g5 l2tik l4tina lt3ind lt9inn lt3ins l4tivi l2t1ja ltle8ge. lt9n lto9ar l3tog lto4s lt3ost lt8ep lt2r l3tra lt3reg lt3rei l6treko l6t5rel l6t7rem l4trens lt3res l5t4rest l5trev l4t5rit lt3rol lt3rom ltro8pa l5tros l4t5rød l5trå lt1s2 ltsa8me. lt5s4i lt7s6t lt2s3v lts4vi lt7t8 lt3und ltu4ra ltur5e6 ltu5r6en ltu5r6er ltur5s6 ltur5å6 l2tut l5tv. ltva8la l3tvs l4t5w l3ty lty8d lt7øl lt3øv lua8r 2lub lub6band lu6bri lu5c lu7ere 1luf 3lugar lu7go lui6 luid6er 1luj 4luk. lu4ka. 4luket luk6keri lu3kr 5l6ukt 4luly l4um lu6mel lu2mo lum6sk lu4mø lun5d4r lu4ne. lun4gel l7u2ni lun5ne 3lunsj 4lunt lu6o lup4s lu2p3u lur2e 6lurei lu5ren lu5ri 6l5urn lur8na lur8ne. lur8ta 1lus. lusa5 lu7sak lu6sel lush7e lu2s5k lus4o5 lus4sid lus4s3t lus1t lus2t3r luta3 lu3ta. lu7tet 6lutf 4lutg luth 3lu5t6he lutla9 lut6m lu1to lu4t5r 2luts lut4tal lut4tap lut4t5at 6lutv 1luv lu4va lu4ve. lu9ven lu9ver 8lv l1va l4va. lva6k l4vakti lva6la l4va4m l4vana lv8and lv7a8p l7var. lv7asa l4v5ass lve3d4a lve5i6s l4vela l4vele lv4en lve9ne l9ver. lve9rau l4veru l4vesk lve5sl l7v6et. lve5str l9vé l1vi lvi8ene lvi9er lvi6ka. lv9im lvin5g6r lv3iro lv1j lvly8se. l6v3n lv1of lvoks6 lv9op lvo8re. lvor4s lv5o4v l6v5p lvra8r lv9ri lv1s2 lv5se lv7s6k lvs6l lv9ta lv1å l3våg lvå4p4 lvå6r l5w ly1a 2lyb ly4d7r ly5e lyes3 ly4gel ly5g6l ly8is 2lykj lyk6keri ly5ku ly7kv 6lykø ly5l ly5me 2lymp ly2n3a ly4ne. ly4n5il lyn3s2 2lyo ly5ok ly3pe ly1r8 ly8ra. ly6re. 6l7yrk ly4sa. ly4s5a4k lyse6te. lysk4 lys3kj lys9kl ly2s1l 4lysp lyst9ra 6lysy ly8ta. 4lytek ly4teri lyte5s l5y4tin ly1tr ly5vak ly3ve l3z l6z5b 1læ1 6læd læ6ra. læ5rar lær4arm læ4re. lære3i læ3rer læ4re3s læ5res. lær6sv læ6ta 1lø lø3de. lø4del lø5dem lø4er løk5kj 4l1økn 2løko lø4k5r l5ø6l lø9me lø2na løns5t løp6s5 5l4ørd lør5k6 lør5n 4l5ørr 5løs. lø2sa lø5san lø5ser løs3k løs3s 2løt lø9ta. lø3te. lø4teg løva9r 6l7øv8d lø4ve. lø3ver lø5ves 6løy. 4løya 2løyd 4løye løy8ed løy5el 2løyf løy4g løyg5e 4løym 6l5øys. løy5ter lå6gal lå6gre lågs4 lå4gå 2låi lå1k4 lå6ke. lå9me lå2m5o lå2n 6l5ånd lån2s1 2låp l1åp9n 2lår lå8ra. lå9rar lå5ras lå3rin lå1ru lå6sa. lå1sk lå6sko lå4s5l lå4ste lås7ten lås5ter lå5su lå3te. lå4teg lå4tek lå8ti. 4lått lå4ve. 1ma 2maa 3maa. ma3ar 2mab ma5br ma3che mada5me ma4del ma3dra m6ad9s 4maef 4maek 7maene 2ma1f 3mafia 3mafr 6mafrå ma8ga. ma4ged ma4gel ma4ges 3magn ma2gr 2mahe ma4is ma4ja 2mak. ma5kab 4makad ma4kes mak7ke 4makl mak6le ma4kot mak2r ma3kre mak5ron mak4tal 4m3akti mak4to makts4t ma1ku 2ma1kv ma1la ma7leb ma6leng ma4let mali9e8n mal5l ma4lov mals4 mal4t5ek mal3u mal3å 4mamer ma3mo m4an. ma3nak m3anal 6manam 4manav man8ce man4dom man4don ma3ne m4anf man5g4a m6ange 4mangr mania8 2manl m3anle 4manm 5m4ann man4nem manns5l ma4no 2mao 4mapa 2mapr 4marb mar5d6 7mare. 6mareg ma3rei ma7rel 5ma9ren ma5res 3mar4i mari8e9ne ma3rin m4arka 4markit mar4kv mar5m marmo9ra. mar7n ma1ro ma4ro6p mar3s4h mar7sl mar5te ma4ry. ma6rå 4masel ma5set mash3 ma4sia ma4sik ma4sis 6masju mas4ki 4masko 4masp mas4see mas6set massø9 7mast. ma5stem 4masto 4ma5str 2masy m6at ma1ta ma5tad ma3te ma4te. ma6ted ma4tel 7maten 7mater. 6matera 7matet 6m7atfe 4matil 7matil. ma1to ma1tr 4matra ma4t5ras ma4t3re ma6t7rom mat3s2 mats8l mat5ta m8at7t8r 2mau mau4k mau7l ma1un 5maur mau7su 2mav 5m6a6ve ma5ven m7avh m5avk ma4ze ma3zo 2m1b m4bao mbar3d m2bea m4beb mbe9da m4bedø m2bef m2bek m4beli m2bem m4bena m4beo m4bereg m4bero mbet2 mbi6ar m2bib m3b4l mboe2 mbo4end mbo5er. mbo5ere mbo5id mbo5n m4bop mbo5re mbo9t mbu7ar. mbu4e mbue7re mbus5 m1c m6co 2m1d2 m3de md7om 1me 2mea2 me5al mea5m 2meb 2mec meck4 4medat 2medb 5mede. me4ded med5ei me7den me7det 4medf me3di 4medik 4medir 2medm me6dok 4medom 2medr me6dret med1s4 4medu me6dun me5d4us med5v 7medve 2medy 4medå me7e 2meef 6meek 2meel 4mees 4meev 2mef m3eff 6me2ga me7gal 2megr 2megu 4meh mei2e meie5n m1eig me3ild me3ind mei5ni me7isk 4meiso 2mej 4meki 4mekj 2mekk me2k1l me3kn 4meko 2me5k8r 4meks mek5t 6mekte m2el 4mela me5l4aks 5melane 5melar me3le me4le. 4meled 4melei 4melek 6m5e6lem me4l5eng 4melik 4melis 4melit 4meliv mel5le mello6m3 4melok 4melov mel4si mel2s3j melsk4 mel5s4t mel7tr me1lu mel5v melvi6 2mely 2melæ 4melø 4me5l4å5 2mem me6mo. me6n5e6d me6n5ers 4m5enga men5k menle6ge. m6enn men4ny me4nom me4nor men4si men3sm men5spl men5te men6tek men4tom men5tr me4nyt 2me3o me6os 2mep 5mer. me6rab 4merad me4ra5l me4r5ant mer5di 4mered 4mereg 4merei 4merek 4merel me6rense me3res 4meress mere6t m4eri 4me5rib meri5ke 5merin merle7g mer9n mer5os 5mers mer5sk me3run mer5und 4merus 2mery me2r3ø 2merå me4råk 5mes. 2me5sa 4me5s4h 2mesj 2me1sk mes5ke 2me1sl mes6le 4me3s4o 2mesp 5mess messe7s8 7mest. 4mesta 5meste. mes4ti 6me7sto mest3r me5stro 6mestrø 4mestrå 4mestu 4mesu 2mesy 2mesø 4metab metall7s8 4me9tap me4tar me3te 4meteg 4metei 4metek 4metel 4metep 4metil 2metj 4meton me4t3ra me4tre met5ren met7rer met5res met5rik me4tru 4metræ 2metu 4metv 2mety 2metø 4metå 2meu4 7m4eu3s 2mev meva8n 2meø 2meå 2mé 2m1f mfa9ra mfar8ta mfav5 m2fek m6f3ess m4fi. m4fibr m2fit m5fru5s6 m5funn8s5 mfu6se. 2m5g6 m4ga. m4gi. mgå8va mgå8ve. 2m1h mhea4 m4hu. 1mi mi1a 5mi6al mia2n 9miane 7miar. 2miav mi6c miche6l 8m9idé 2midi mid5j mid3s4 mid4t 4mi3ele mi3er. mie9s8 2mi5f 5migraf 2mih 2mii 4mij mik6h 4mikj 2miko mik5ro. mik5ron mik5sa 6miku mi4la. mile6t mil7eti mi4lev mi7li 4milin mil6s5v 4milæ 2mim mi8ma. 5mimo m7imp mi4na. mi5nar mi4ne. mi4n5ers 4m3innh 4m3inns 6minnt min2s min3sp mins4t mi3nu m4inv mi4n5y mi7ov 2mip 4misa mi4san mi3se 4misek 4misel 9misé misha9ge 4mi7si mi2sk mis4ko mi3s4la mis9le 7mism mis4s5k mis4s7p mista9k 5mis7te mis4tra 4mistu 2misy 4miså 6mita mi3te 4mitj 4mito 2mit6r mitt3s mi5ur 2miv mi5vå m6ja. m6jan m5jar. m7jarn 2mje m7je. m1ji m8jingan m8jingar 8mjo mju7ke 1mjø mjøs5t 2m3k2 m4ko. mkro5 mku6le. mkå8pa 4m3l m7la mla6ga m2lef mlei5er. m2lek m2lel m2lem m4lera mle6se. m4lesk m6le5s8v m4leta mle4ve. ml6i ml5ja mly6se. mlø6pe. mløy3 2m7m4 m6mai mma5kl mmal5 mma8le. m4mam mmando5 mman6dol m5mar mmar7in mmar7o mmatik7ka m4medø m2meg m2mei m2me3k2 m4melu m6meni m4menu mmer5t mme4run m2me1s mmest6 m5met. m4meta m4meti m4metra mme5t6re mme3u m3mé m4mia m7mian m2mib m4mid mmie6n m2mik mmi5sk mmi5so mmi3st mm5n m3mu mmø2 mmå8la. 2m1n m2nee mn7eid m2ne9l mne4ra m5nese m4nesk m4nesta mnes9tie m9net. m4nete m2nev m6nip mn7sk 1mo 3moa mo2ar 4moba 5mode mo3dem mo5di mo6di. 2mody 3moe mo4en. m1off mofo6bi. mo6gi 5mogl mo5go m5ogs 4moh 2moka mo8ka. mo8ke mo1ki mo6la. mo3le mo4le. mo7le6s 4molt mo3ly m5om. 4momf 2momr mom4s5ø mo5ne mo4nisa mo2no mon1s mon4ste mon5t6 2mop 5mo1ra mo4ra. mo4rar mo7rar. mor5d6e 4mordl mor6d5r mo3re mores7 m2ori mo4ri. mo6rid 4m3o4rie mor4kl morla8ga mo5rok mo4rom mor4si mor4skj mor7sky mor4sp mo1rø mo9sen mo2s7k mos4o 6mostab 4motap mo4te. mo6te6g6e mo4tei mote7kl mo5ter. mo4tes mo5to 4motr mot7re mot1s2 6motsagd motsva5 mot7t mour5 3mo3va mo5w 8m1p m4pana m4p5anta m4pee m4pelot m6pena m6pep mpera8te. mpe5res m6peress m4p5erfa mperi6e7n mpes2 mpes6te mpe4sti m5pett m2pe5u mp3id m4pinje m8pla. m3p4lan mp5le. m6p5lin m6p5n m6p5ob mpoe4 m4poeta m4pog m6pok m2pop mp3opp mp1p8 mp3rad mp5ret mp3rop mpro8pa mp1s mp3sek mps4p mp5s6t mpun6ge. m9pur mp5ut. mp5ys mpø5 m9på. m3q 2m1r6 mro8sa. mro6se. mru7te. mrø9de m9rår 6ms m5sa. ms1ak ms5ant m1sc mse5lu m9s6ei m4sem m4s3eng ms5e4pl m4serv mse5s m5s6etn mse6t7jare mse8t9jas msi6e ms4ing ms3inn m4s5ja ms5kab mska9k ms6kin msk5ing ms3k4n ms3kor ms5kren msk8u ms3lan ms6lega ms9lua ms3lue ms4ly m2sm m1s2n ms9ne ms5no ms3næ m1so m4soms ms3ori ms1ov ms3s2 m4s3tal ms8tav m8s7te. ms7tea ms2ti ms5tilb ms3tim m1sto m4s5top m5s6topp mst5ord m8strand m5strane mst5red ms5tref mst5ren ms5trik ms4tru ms3unn msu9ta msu7ten ms1v msva9ra msva5re m3s4vet ms3ynd msø4ke. m4s5ør ms1øy ms1å 2m1t m3ta mt4b mtbe6 m2tee m2teg mteks7 m6te7kv m4tel m6testu mti9a m9tida mti5e m6tien. m6tif m2tik m6tini m4tiø mtiør6 m5to mt4r mt6ve mt4vin mtå5 1mu mu6a m1u2b mu2e mu3el mue7r mues1 2mug mug5l mu4he mu2k 8m9uka 4m1uke mu5la mu4leg mule6s mull2 mull6s7 mul6tiv 4muly 7mum mu3mi mum2s mun2c munes6 4mung mun6ge. 6m5univ mun3k munn5s6 mun4t3r mu6ra. mu4re. 2murn murs4 6murt m2us mu4se. mu4ses4 mu4sé mu2s3k muske6l5a must4 mus5tan 2mut 3mu1ta mu8ta. mutsa8la mut7t6r 2m1v mvak5t mva6la mvari6 mveg5s4 mvi7e6 mvi6se. 2mw 1my my5a myg4ga my3ke myk4kes myk3l my8kr my2ra my9ran my9rar my1re my4re. 4myrk m5yrke my4r5u mys3 my6sa my4se. my4so my4te. mytt6s5 5mæ mæ6la. 1mø møb3l mø7des mø6e mø9ens møkk6a m3økn 2møko mø6na mø4ne. møne9s mø8nest 6m5ønsk mø2o 3mørke mør4k5r mør5sm mør3ø mø5se 7møt mø9tas mø4tere møt9t 2møy møy9ar m5øys. 1må 2må. må5a 6måenh må7g2 må1k må4ka. må4ke. må4kes m6ål må5lar må4le. må6led måle3i målø6pe. må4ne5s6 må9nese må8pa. må4pe. må7pl 2mår måra6r må1re må1ro må1ru må1s4 må6tak 6måtf må5tr må3tø 1na na6ans 2nabo 7na7bortr na6bot 4naby na4ded na8dem nadi4 n3adop nad2s1 4nadv 8naf n1aff nafo7r na3fr naf7t na8ga. na3ge 4nagen nag3s4 nagså5 na7gø 6nah 4nair 2nak n6akk nak7ka nak6ko 5nakl na1kr n1aks nak8sa nak8se. 8n1akt nak6ta. na7kv na9lag na6lare 6nalarv na7leg na4l3ei na4lek nal5epo na4les na4l5ett na4lev nal5g nal6ge. na4lil nal6lag nal4løp nal3op nal5s2 nal3t na3lur 2naly na2l5ø 4nalå na3lå5r 5nam. na7mere na5mes na5mo9 5nams 2namø 9nan. 4nana n3anal n6ane nanfø8 4n5angr nan5k nan6ke. 4n3anl 6n5anle nan4ne na4n5o n4n5ans nan4sin nan4skj nan4s5t 4nany na7o na5pe nape4s nap3s4 na7p8 n4ar. na4rap 2narb nar5dr 4narea nar7ei 4na5rek nari4e5n 7nariksk 4narkiv 8n7arm 6n5armé 6n5arme nar8ma. nar5s nar8ste 2nart nar6ta. nar5ti nar7v nar5ø nasa3r na4sas nas7h 8nasik na4ski na2s5t4 nasta5 8nasu na1ta nate8k na7tem 4natl 4natom natori5e6 nat8ra nat3sp nat6tak nat6tea naty5 2nauk naus6p na6va. 4navd 6navf 2navg 2n3avh na1vi 4n5avk 4navl nav4les 3navn 6navo 4navr n1avs 4navt 4n1b2 n5ba2 nba3d nba9ser nben4s nbo5et n6buf n6butr nbyr5 nbø9le nbø6n n1c n5ca ncel5 n3che nch3ei n6cot n2cy1 8nd n7daa. n6dabi n4dad nda5f n7dag4 ndags5 n4daks n3dal n4dalf n4d5all ndals3 n4dark n6d3art n8dask nda5tal nd5d4 n3de. nde5a n2deb n2ded n5defi nd1ei nd4ein nd6ek n4dekl n4deko n5d4e5l nde4le. n4delik ndel4sk ndel4st nde6lt n2dem n5dem. nde5mo n5den. n6dener n5dens n2de5o2 n2dep n4derab n4deras n4derei n4derim nd6erk nderla6ga n4desi n4dest n4desu n1dé ndi4en n4d3int ndi6sk nditori5 nditorie6 ndit4t5a nd3jer nd1ju nd5k nd4lem nd4lese nd4lest nd4lev n8d7m ndo9a n6dob n6d5okk nd4om4s3 n2doo nd1op n2dor nd3org nd5orm n6dote nd5rae n4d3ram nd3ran nd6rek ndre4ra nd5resen nd5rett nd1ri n1dro nd4sag nds3ak nd4s5amb nds5elv nds5ende nd4ser nd4sje nd4skj nds7kul ndsla6ga nds6lett nd7spu nd3s4te nds9teg nds5trek nd5stry ndta6ka. n6duf ndu3is n4dun nd3ung ndun6ge. n2dup ndu6si ndus7k nd7v n2dyg ndy1k n2dys ndy5sp ndø5l n2d1øy 1ne 2nea 5neae nea4g ne7a6le ne5alp ne5als nea9m6 ne9a8r9an nea9ren ne1as 6ne7av 2neb 3nebb 4nebe ne4ble neck5 2neda 3nedal ned3d 6n5eddik 4nedeb 4nedeg 4nedel 5nedg ne4di. nedi4s 2nedo ned5over7 ned1r ne6dre 5neds ned3st 6nedu 4nedø ne5dår 4neeg 4neei 2neek 5ne4e4r5 2nef n1eff n5eft 2neg 5negati ne3gla neg5lesp neg8r 6negru 6neh 2nei n2eid nei8dan n5eig n2e1in n3eini 5neir 5n6eisk 2nej 2nek ne4ka. 6nek2l ne3kn nek2r nek5rin n7ekser nek5t 4nela nel3de 4neled 6nelegg 7neleggj 4nelei nelei5er 4n3elem 6nelê 4nelid 4neliga 4nelis 4nelit 4neliv nel4lov nel7s 2ne1lu 4nely 2nelæ 2nelø nelø8pa 4nelås 2nema 4n3emb 4nemel 4nemer 6nemes 2nemi nemie8 6nemj nem6k 5nemn nem5ne. nem7nel 2nemo 2nemu 2nemy 2nemø 2nemå 3nen 4nena nen5at. 6n5en6den 6nendr nene4 4nened 4nenem ne3nes 4nenesl 4nenet nen5eta 4nenev nen4ga. 4n3enhe 6nenhet 4neni nen5se nent5ei 6n3en5tr 4nenu 4neny 4nenæ 2neo 5neo. ne5o4r 7neos 2nep ne5pe 3n4er. 4nerad 6nerap 3nerb 4nerea 4nered nere6de. 4neref 4nereg 4nerek 4nerent 4nerep ne5res 4neress 4neresu 4neret 4nerev 4nerfar 4ner2g ner3ga ner3ge 4ne3rib 4nerik 4nerit ne4ri9v 5nerl nerla8ga n3erob 6neroc ne7rof ne5rok 4nerom ne5rot ne1r4ov n6ers. ner7se ner5s4i ners4p ners8ten 4ne3rul ner5un 2nery 3neryr 4nerør 2nerå 2nesa ne4sa. 5nesar 4nesc 4nese 6nesek nes6er 5nesets nes5eva ne3si nes5ind 4nesit 2ne5sj ne5skam 4ne5skar nesk4e 4neski 5neskins 4neskj 4ne5sko 4neskr 6nesku 2nesl ne3sli ne7slø nes6mi 6nesn ne7snø 2neso 3nesot 2nesp nes6sam nes4stu 5nest. 4nestas nes9te. 4nesto nes5tor 4ne3str 4nestu 4nestø 2nesu 2ne1sv nes8va 6nesy 4nesæ 5nesøy 4ne5så neså5re 3net. 2neta 4netaks n7e8tas neta6le. ne3te 5nete. 4ne3ti 6netid 2netj 2ne5to 6netom 2net4r 3nets net5s4p nett3a4 net6tel 2netu ne4tv 4nety 4netå netå5ker 2neu neu1r ne5us ne6va. ne4ve. 6ne8vent 5nevik nevi8sa 3nevn nev1r ne4y5t 2neø 4neå 1né 4néb 4néd 2néf 6néh 2nél 4ném 6néo 2nép 5nér 4név 4néå 4n1f nfall4 nfalls5 nfan5t n6foa n4fob n4fole n4fom n4fora nfor9en. nfos4 nfø5des nføy8ed 8ng n8g8ad n4gaf n6gag ng1ak ng5and. n8gan8da ng3ank n4g5arm n4gart ng5art. n5garta ngar5u n2gat ng5ato nga4ve. ng7avi ngd4 ng4ded ng4del ng4dep ng3dr n4geda n4gela n3gen n4gena n7gene n4g3eng n6geno n4genu n3ger n4geret nge5run n2ges nge3sl n4geta n2ge7v ngfø4 ng5g2 ng5id ngjen5g ng1l n5glem ng4lu ng7n ngo4d ng5odd n7goe n3g4ok n8g7o8m ng9ome ng5ond ng7o6pe n2gor ng5ord ng3ork ngos6p n2got ng3ra. n5grad. ng5rand ng7rea ng3reg ng3ren n4grend n4grer ng5rest ng3ret ng3rev ng3rid ng3rin ng7ro. ng9roa ng7roe n5g6ros5 ng3råd ng8sa. ngs5elv ng4sem ng4ses ng2sj ng2sk ng6skj ngs7leg ng5sløy ngsmå6la. ngs3ne ngs7tep ngst5rid ngstyr8ke. ngs9tør ng3und ngu5ru. ngvi4s ng5ye n1gø n2g1øy ngå8va ngå8ve. 4n1h2 nhat5 nhet4s 1ni ni1ak ni1a2n nian5dep ni2bl 4niby 4nibå 4nicr n8ida ni4del ni7dele n5idé ni6do nid7r nids4 nid5st 4nieg ni1el 7ni3e2n ni3er. nie5ri ni7ers ni5ert 4n3i4fr ni5gla ni9glo 2nih 8nij ni3ke 2nikj 4ni5ko 2nikr 4nikv ni5l4i 5nilu 4nimar 4nimas 4nimo 2nimp ni6n7al 2n1ind 4ninf ning3o nin5gr ning6s5 ningse4 nings5te 2n1inj n1inn 4ninnb 4ninnh 4ninns 4ninnt 2n1ins 2n1int 2ninv 5nio. nion2 nions3 4niop 7nios 4ni5ov ni4pet ni9pet. ni9pets ni2pl nip3li nip5si 4nir nir7kel 4nisem ni5set nis5im 4ni3skj nis4k3o ni9sol niso5ne niss4 4nistas 6nistat nis5tik 4nistil ni3str 4nisty 4nistø 6nisu 6nisy n4it ni3ted 6nitj ni4tog ni4tos nitt4r nitt4s3 nitt6sk 4nitu ni3ty nit5z nitær6e 2niub ni4umf 2niut 4niva 2nive ni8v7eg niv5ei8 4n5ivo niv3s2 6niå 4n1j n6jah njav9 n2jed n5jede. n4jee n6jei n2je1s n3jes. n2jet n3jet. njet6r n5jett 2nk n1ka n2kak nk3aks nkal5l n2kau n4kedo n4keer n4keh nk5eie nkel5s nkelt3 n4k5enh n8keno n4k5erfa nker4st n4ke1s4 n6ketø n1ki n4kid n4kie nk3ier nk5ind nk7inf nk3inn nk7int n5kj nk1k4 n1kla n5k6lang n7k4lis nk3lok n1klu nk3ly n3klæ nk1lå n1knu n1kny n3ko n4kof nkofi8 nk5oks nko5le nkol4la n6kot n6kov n1kr n3krav n7k8ry nk1s2 nk4tak nk6tal nk4tin nkt3sk n1ku nku4le. nkuri9 nkurie8 n4ku6t nk9ute n1kv nk3ve n7kvit n6kvo n9ky n1kø n1kå nkå6pa 4n1l nland9a nland6se n5le nlei7er. nle8ma. nli4en. n3lj nlu4e nly6de. nly6di nly4se. nlø6pa. n7lå 4n3m nma4le. nmik3 nmi8l nmini6 nmo6se. nmusik7k nmå6la. 4nn nn4ab n2nad nn5ad. nn9aft nn5air n6n1ak n4nala nn5alg n4name nn4an nn5ana n9nane nna8ni n4n5ank n5nanl n6n7anta n9nar. n4nari n6nasi n4nask n2nat n2nav nn3avl nnbo9e nnbu9e nn5d2 nndø4 nndør3 n5nea. n5neap n5nebar nnebe8r n5nebu n4nedi n2nee n6nef nn1ei n3neke n4nelo n3n4en nne6nat nne4n3o n9ner. n4nerel n4nero n7nes. n6nesj n5nes4la n4ne3st n5n6et. n4nesø n4nete n2nev n2ney nn7g8 nnhø8re. n4nid nn3ide nni3e n2nim nn7inf n5nis nni4sj nni4s3t6 nn7k2 nnle6ge. nnlø6pe. n4no. nn5of nno2m1 nn6oms nnomsy8na nn1op n2n1o4r nn7ord n4n3o4ve nn9r nnsa9ka nn4s5amb nns5and nns3ar nn5seg nnsei8g nn4s3em nn6s5enk nn4s3es nnse6te. nnsi7da nn4s3in nn4s5i6s nn6s5jak nns5kan nn5s4kli nns5op nns3or nnst6 nn6s5tab nns5tal nns5telt nns4ten nns5tep nns7tin nns5top nn6s5tre nns5tro nns3tv nn4s5ul nns3va nn6s5vo nnsy8na nn2sø nns3øk nn3så5r nn7t4 nnte6se. nnto9ga nnu1i nn6ung nn1ut nnvi4s nn1yn nny4t nn7øk nn1øv nn1å 1no noa4g no1ak 5noane no7ar. 2nob nobe4l no4bl nob5le no3b4r no5co nodi4e5n 3noe 4noef 4noei 4noek 4noent 2nof n1off 3no3ft n6ogra no5id no3in 2nok no1ki nok8r nok6se. n3oksi no9le 2nolj no6mid no6mik no4mil 4nomj nom9m nom7s2 5nomy non1s4 non5t 2noo 2nop n1opp nopp7s8 no1r4a no5ran no5rar no5ras nor4da nor6d5end 4nordn nor4d5r nord3s4 nor4dø no9ree no3rek no3ren no7ret nor5g 3norge norges5 n3o4rie 7norit 4nork nor6kla nor6kle n4orm normlø7se nor2s nors6ka. no3ræ no4sel no4ses nose8te. 4nosp no3stj nostra4 2nosy no4ta. no4te. note5i 5notek no4tel no4tes not3s 4noty 4nou no1v no3ve 4no5vi 4n5ovn 7nó 6n3p2 n5pe npo8ta n4påk n3q 2n1r2 n9ra nra8na nra8sa n3re n4reb nrei7e n6renem n6reo n6ri. nro6de. nro6t nry6 nrå8da 6ns n1sa. ns1a4d n5sag n5sakk n5sa4kr ns3aks nsak6se. 6n5akti ns5akv n3sala ns3ald n6s5alp n5sane n4sanf n5s6ann n5sanse ns5ansi ns5ant n5saren. ns6arm n6sart n4sati n1sch n3sco nse9a8l n2sed ns5edd ns8ede n2see nse5ei nse6er n6sef n2seg ns5ege nsei6d ns5eie. ns9eig n4seks n4s3elv n2sem n5sen. n5sene. n4sener n9senes n4senet n4seni n7sens n3ser. n4sera nseri7e6 n4sesa n4sesi n4se3sk nse3sl n4ses4p n4sest n6sesu n4se3s4v n4sete n9sets n2seu ns5fr n2sh ns3ha ns7he ns5hi nsi5de. nsi4ent nsi6er. nsin5d n3s4ing ns3inn n4sinte nsi8ra nsis7k ns3jak n4sjav n5sjef n6s5jord n4skan n6s5kauk ns7kele ns4kete n9skim ns5kir n5skis n6skja n6skjele ns5kjen n3skjæ n8s7kåp nskog6s ns4kolli ns5kor ns3kro nsku9et n4skug ns5kuli n5skum ns1kv n5s6ky. n5s4kye n5skyss n5slang n7slarar ns5las nsle6ge. n3s4lekt ns6leri ns5lid n5slyn n1slå ns3mi n4smal n4s5mo n4smur n4smus nsmå6la. n5s4nar ns5nes nso4d ns1of n3s2ok n1sol n4sond nson6de. nso5ris ns1ov n3sovn nspa9ra ns5pels n5spet ns1pr n6spros n7spur ns7s6 nsse4e nsså5 ns4ta. n4stak n4stag ns5take n3stam n4stank nst5art nstar8ta. ns4tau n3s6ted n3s4tei ns4tel nste6ma. ns5tenk n6step n5s4tik ns5tild ns7tilf n4s5tils ns4tin ns4t3i4s ns1tj n5sto. n3stru ns7trøy n3stue n6stuk ns5tur nst3ut n1su ns1uk n4sung n5sup ns5vang nsva9ra n2s3ve ns9veg ns5verd ns5vern ns1vi n5s4vill ns4vind ns9vis n4svu n3s4væ nsy4d ns1yt n5søn n4s1øv ns5øya n5såpe nså7pen ns7ås. 6n1t n5tab n4tagr nta4lan ntall4 nta5na. n4t5and nt3anl nt4anv nt3app n7tart n6t5arvi nt6as nta5sia nt4at nt3avi nt5avr nt7avs n2tea n5teat n2tee n4tef n4tege n4tegi n7tegn n2tei nt5eini nte5ins n5teis n4teka n7tekn n4tekse n9teleg n5telig n5tell n4tels n9telt nte4ma. nt3emb nte4mis n5ten. n4te7na n5tene. n4t3enh n5tens n2teo n5teori n5tepp nt4er n5ter. n7terek n6terest nte6risk nteriø7ra. n5ters n7tes. n4tesel n4teta n4tete nt4e3u nt5e4va nt9g nti1a n4tiat n4tid n5tiem n4tig n4tikap n5tiki n4tikl nti5kli n5tile nti3lo n9time. n7times n4t3ind nti6net n6tini n2tio n2tip n4tisa n4ti5sti nt5l nt5n nto3a n2tob nt5omf nt5omn nt3oms n2t1op n5tor. n5to5re n6torg n2tou nt1ov nt6ran n4trep n5trer nt5resi ntres9kjare n4t3rin ntrol6li n6trom n6trul ntrøy4 nt5skj nt5s6la nts2t nt3t4 n6t7ub ntu9e ntu4l n2t1u2n n4t5uro n2t1ut ntva8la nty6e ntyr3s nt7år. 1nu 4nu. nu3an nu4av nuft4 nufts5 2nug nug6la 4nu4h nuit8e nuk5 nul9t8 4nulu 6nuly nu9me 2n1un nun4ge. nuo2 6nup nu3pl nu4re nu5sa. nu5sen nu7ser nus4k5l nus7l nuss4 nu6st nus3ta 2nut nu7ta nu3te. nute6r nut5eri n7utl nu6ume 6n1v nva6la nvand5 nverle9 nves1 n5vi nvi4et nvi4ka. nvi5ke n3vu nvæ8ra n3w 1ny ny5ar. ny9ast 2nyd ny4de. 4nyef 4nyg ny5ge 5n6yhe ny3ke ny3k4le 4nyko ny1lo 2nyn nyn8da. nyn4de. 4nyo 4nyp ny8pa ny6ra. ny4re. ny7rev ny4ru ny1s ny5se ny9s6k nyst4 nystu4 ny3te ny3tr 2nyv ny8va. ny5vak ny8ve. 4nyø n1z 1næ1 næ8ra. nær9and næ8rast. 1nø nø2da 4nødd nødde5 nød3sk nød5sto nø9dun 2nøe 4nøf nø1fl nø1fr nø7gr 4nøko 4nøks nø4le. nø9mo nø5mu nø3p4 nø7ra nø6red nø1ry nø3se nø1sk nøs4l nø7te nø7tr n6øtt nøtt6r nøv4d nø3ver nøy1 2n1øy. nøy8a9n n7øyh 4nøys n3øys. nå6as 1nåd nå5ded nå8en nå6et nå8j n1å2k4 1nål nå2la nå5lev nå8ma nån6de. n1å4p nåp8na n1å6r nå2s nå5sa nåse4 2oa oa5c o1af oa4k oak6kana oak4ku o1all o3alt o1a2m o3a6n o9and o1a6p oar6d7e oar4d5in oa4r5e4g oa4r5enh oa6ré oa4r5i oar5m oa9té o1au o1a4v 2o3ba obakk8s obb4l ob4bo ob4b5r ob4b3u ob4e o4bea ober5et ober4s obers5ta obers5te o3bes 2o3bi obi5e6 1ob1j o1b2l ob5la. ob3le. ob3len o2b5li 3oblig ob4lo o1b4o obo9a 2obr ob5rar ob1re ob1ri 3obser ob5st 2o3bu 2oby obyl5 o5bø o3bå 4oc ock5ers o5cy 2o1d o6dab oda4f od7att odd5ei od4del od4dest od9do od4e o2deb o6d5ei o4deko o5deku o2dep oderle7 o2des o5det. o5dets odie4n o4d3igl o4dj odko5 od3oml od3ov o2d5re o4d3rø od3sk ods4ka od3s4po od5s4tol ods8t odu7s o4dy. o4dyb od5øk o5døs od5øy o2d1å6 6o1e oe6f o4ein oek6s oe2l oe4mu oe2n oen5a o7ene oeng5d oen2g7r oeng3s oeng3u o5ens4 o7ens. oen5t o3e4re o6erer oer8ma o3ersk o2es oe6sip oe6sit oes8ka oes8ke. o4etan oet2h oe5ti oev6ne. 2ofa o2fa. ofag6a o4fara ofa4se o2fav o2feb o4fei o4fera o4fe3st o1fé off9and of4fek of5fes of6fia off5id of6fr of2fu of6fy 2ofi o4fip o1fl of5le 2ofo o6fra. of9ras of1re 6o5fri of8sa of8se. 6oft of4tel oft2s3 2ofy 2og o2ga. og7ank o4gare o2g7av 4oge o2ge. o4ged og1ei oge7na. o3get og4gera og4g5j ogg3s4 og6g7u ogi3a4 ogie2 o4giev o2gif o6gig o4giko o2gil o2gim o2gin o3ging o2gi1o o6gista o6gi7str o2giv og5jer og7la ogly7 og4ned 5o4g5ni og6nel o5g6nos o2go. og6ra og4re. o4g3reg o4g3rei og4rer og7rett o4g3ri og3ryd o4g5rø og5rå og3s4 ogs4a ogs6an og3s2e og1sk ogs4kj og5sl ogs4le og1s4p ogs5pa og5ste og3sti og4s5tj ogs4to ogs4tr ogs5t6ra og5stre og5sy 5og5s6y4v3 ogt6r 5o4g5åt og1un og5ø og7ås 2o1h6 ohe5te ohm9a o4ho. ohø4 oia4 o1i2d9i o1idr oid5t oie4n oi5er oi6es oi5k oi4la o1im o3in. o1ing oi2n1o4 o4insp oi6r o1is o2is. o6isa o2ise o4isi 4o1j o8je. o4jo. o1ka ok7aft ok1ak oka4n5i6 ok2ar ok5ark o3kas ok1ef ok5els5 ok5elv o5k6en o4kesk o6kev o1kj ok4kand 4okke ok6kera ok4ke5s ok3kje ok3ko. ok5kol okk8s7m ok4kun 4okl ok8la. okla5m ok8le. o1klu ok7lut oklå5 2okn okna8sa o3ko o8ko. ok8ol o4k3oms ok3omt oko5pe ok5opp ok3orm oko4s oko9se o6kov o1kr ok5reo o6kret o4k5ru oks4al oks4e ok4sek okse5kr ok4sem ok7sen ok6serin ok4ses okse9te ok5s4i oksi7da okst2 oks6ti ok6s5vi oks6tr ok5ta 3oktan ok8t8a8v7 ok3ti ok5to okto4r5i okt6r o1ku ok5u4k oku8le. oku6t ok7ute o5kva o6kvak o3kvi ok5øy o3kå 8ol. 4o1la ola6ded ola8ga ol5anl ol3ant o9lar. o6larbe ola5t olber4 olbo7e olbo7ge. ol4bol olbu7 2old ol7dan ol5de. ol4dem ol4dest ol5det ol3do oldo7ve7 ol5drev ol3dri old3s4kr 2ole o5leaks o6leb o2led o2lef ol5eig ole5in o2lek o7leki o2lel olele6ge. o2lem o5lem. o5lems o7lene. o9lenes o4lenet o4leni o4leno o6lered o4leru o2les ole5sta ole5str o9let. o2lev o1lé ol4f5i ol4fj ol3g4e ol1g4l 2oli o4liba oli9e6n oli7ert oli5ne 3o6lj olke3s4 ol4kese ol4kesk ol4kest ol2k3l ol9ko ol6ku ol5kv ol5la. oll3ak ol4lam ol7le. ol4led ol4lel ol7len ol4les ol6linj ol4log ol4lom ol5los ol4lov oll5over olls4t oll5sv ol2lu ol4løp ol6løs ol6løy ol2lå olme5s ol4mest ol4må ol9n 2o1lo o4lo. o5loan o3loe o4lof olo3i ol5oks ol3oms ol3op o6l7os. o6l7o6se o6l5osf olo5ve o8l7ovn ol4ped ol7so ols8t ol5sva ols5vik ol3ted ol5tep ol2tr ol6t7ra olt5re. olt5rer olt5ret o1lu olu5l o4l3ung olun8ge. o4l5ur ol5va ol1vo o1ly oly7d ol5ør o1lå 2om. 2oma om3ald o2ma2m om5ang oma4nif omann4 oman5t om3ars omar7ø8 om4as om1av omb6 om4bet om4bis om3bl 5ombod 1ombu 2ome o2m1ek o5meka o7menes omer6s o6mese o5met ome4tak ome7tar om1eu 3omfan 3omgre 8omh o2mia o2mib omi3e4 o4miek o2mig o7mikk o7mine om7inn om3in5s o4mio o2mir o4misj o4mist o2miu om1j 2omm om6mat om4med om4metr 3ommø 2omo o4mofo om1op omo1v omp2 ompa3t 1omr 2omre 2omro 2omru 6oms. oms3al om4sek 3omset omsko9d omsku9la om4som oms3un oms4ø omt2 3omtal om4tes om3ti om3tv o2m1u o3mus omvæ8re. 6omy omyr8ke. o2møk omø4r om5øy6 o5må 2on on3abo o4nac o6nak o4n3ang o4nap on3app o6narb o4n3arg o4n3arv o7n8a7sj onat5r o2n1a4v on5b on4dar onder6e ond3re on4d5ri onds4i o4ne. on5eie o4nele o7nell o2nem o3ner o4neru onesi6 o4nesk o4ne3s8t o4nete o2nev on7f on7ga. ong3d on5ge. on6ged onges4 on5gi on5go. ong2r on8gro ong9ros ongs4j on2gu on4gy on4g5ø o9ni. o2n3i2d oni1e o2nil on5ild o2nim oni6mi on3inf o6n7inn o2ni1o o4ni5p o6niso on3j on1k on5k6a 3onkel on5k6i on4kle on5ku onle6g on5nad on3ni on5ny o4no. o5nor. o4no4v on3ove on4sh ons1i onsi3s onsi4v ons1k4 ons7ke ons1l onsla6ga onstitue9ra onstitue9re onst5rum ons5und ons1v on4sve ons1å ont6a on3te on4ted on5ten on5ti on4tok on5tor ont2r on7ul8 on5ur onu4sk o4n5ø4 on6øy. on7å6 2oo ood1s o1off oo2k1 oo5k8a ook5es ool7a oo4m5i oo6mo o1o2p oopa8 oop9an oo4pe oop5en oop5et o6opi o1o4r oor6da oo5s oo6sp o1o4v 2op. 2opa o4pab o2pak opan9d o4pa3re o7paren o4pasj o4pau o3pea ope1i opel6lø 2open o4pena o9pend o4penet o7pent o2per 6o3per. 3opera ope6rar o7pero o5pert 2opet o4peta 4oph o1pi o4piek oping9s o4pir 2opl o1pla o4p5land op3li op9lu op4na. op4ne 2o3po 2opp. 4oppa op4p5art op4pas 4oppe 1oppg op4pi. op6pia op4pis opp3li 3opply op6poe op6pr opp5rop opp5und opp1å2 2o1pr op6re op7ru op7rå op6sa. o8p8si op2t1r o4q 4or. o6r7add or3adr o2rag or1ak 2oral or5ald o4r5alg oral4st or6alt. o3r4am o4rana o3rane o4rang o4rans or6ap or3att o4rau ora3uk or1a4v 4orb orbit5 or7by 4orc orda9ta or3dea 6ordel ord7e6pl or7dik ordi4s or4d5ise ord3it 1ordn ordre8gi. or7d6rø ordsa6me. ords6e ord3st ordy9ra 8ore orear8a orear8e o5rebra o8redi or1ei or1el o4rela o6reld ore6na. ore4ned ore4net or3enk oren3s ore6o5g6 o6rerf o4rero ore1s2 o5resc ores6te o4reta or9et8n o6retv o2rev 2orf orfa6re. orfi7ne orfø9re. 1or3g4a 4orga. or3ge or5ger orge4s orgi6e5ne org4sk orha9g orha9le o1ri o3ria ori5b4 ori4e5ne 5orient o7riet o2rig ori7ka o6rim or3ind or3ink or3inn or3ins oriro8 6oris oris4a 6orit o4riti oriti6me. or5ka 3orkes or5ko orko6se. ork7s2 6orl orla7te or5le orm6al5t orm5ang or6map or5mel or4m3un ormæ9 or4nar orned5 orne6dr or5net or4nol orn3t 4oro o3roa o3roe or3off o5rog oro5i o1ron or1op o4r1or oror9da o5rosa o5rot or3ove or5ovn orpe6s 4orr 2ors ors5alt or5sen or4serk orse9ta orse7te. or3si ors5kar orsk5ei4 ors8k9l ors4ku or1s4l orsmå8la or1sn or3s2o orso9na orso9ne orso9v ors4pa ors4ten or1su orsva9re or3sy or9sø 2ort or4t3ak orta8la. or4t5and orta9pe or4t5av orte5i6g or4tek or3tem or6t5erf or8t7erm or5tii or7til or5tis 3ortod or6tok orto9ne orto4r ort5ori or4tou ort5res ort5råd ortå4 or4t3år or1u oru8d or9ude oru4h o5rum oru4t5 oruta4 or4utf orva9ra or5veg orv3s 4ory o7rya or1yn 2orø or9ø8k orøk8t or5ør or3ø4v orøv8d or1øy or5ås 2os o1sa o4sa5b o6sad o2saf o4saku 6o5sau osbi7 osefi5 o2seg o5selei o2sem os2en o6sena ose5sl ose5sm oses4sk oses6sp oses4st o4seu osfa9ta os2hi os7his osi6e7ne osi5ere osi5ert o2s1ing osk3ei oskei6e o4skil osk9lar osk5len o1sko osko5p o3skri os8k3v os2l os3le oslo1 os2lo5d4 os5lu os5lø os9ma os5me os3mo o2sn o3so os7ove os6pa. os6pe. os4pil os4por os4sek os3sem os5sens osseri7e6 osse5v ossis5te os6ski oss3kj os4s5ko oss9l os6spa oss7tro os7sty os8sv ost5adr os5tal osta5le o8ste. os4teg ost5egg os4tek ost6el os5teo o4sti. o8stia o4stie o4stin os5tis ost1o os6tons os6trad ost5ran ost3re o3stro ost5rup ost7rå o5stø os1v os5øy os7år 2ot o1ta o5tad ota4l5a ot5ald otal7ev ota4lov o9tane o9tar. ot3arg o8t9arm o5tas ote7d ot6ei ote5int otek5i ote6k7la otekla8ga ote4kle ot5elem ote5lev otel6lan otel6lek otel4li otel8lø o4tena o4t5ende oten8de. oten4s5p o2teo o4teram o4teret o6terev o4tero oter5s ote5r8u o4terå otes6ter ote5sté otet5a otet5o otet3s6 otfø4 oti7ert oti2k otika3 ot7i6ko o1tj o6tja ot5jer ot6nero otno7te. ot6nå o1to o2to. o4to3a o5toa. o2tob oto6en. o6tof ot3off o6toga o6togram o4toi o2tol oto5ne oto4ral otor5d o2tot o2tou o1tr ot7red ot5rer ot5rev o6t7ri o6t5rom o6t5rø ots5el ot6sh otshusvæ8 ot4s3ki ots6op otsopp6 ots5pr ots5tab ot7ste ots6å ot6tank ot5tas ot5tegn ot6tenk ot5tese ot5tin ot5toa ott4s3k otts5po otts4ti ot7tug ot4typ o1tu o6t5ut o1ty oty8e ot1yt o1tø ot7å oub8 oul5l oun6ge. ou4r ou7ri ou5ro ou9sa out8a ouve4 o5vae o1vak ovanfø8 ovan9o ov3anv o7var. o6varb ova9re ov5art ov7arv oved3 o1vei o1vel ove4la 4oven o4vend o5vende ove6nya ove2r over3a ove7ra. ove9ras o6verdr overe6 ove8r5es 3o6verf 3overg o5verks 5overr 5oversik overs4p over9v o1vet 6ovh 2o1vi oviso3 2ovj 6ovna ov4nes 2ovni 4ovo o5vo. o7vom ov1or o5vot ov1o2v ov5sal ov4sek ov4sen ov9ske ov4sle ovs1p ovs5te ov4sti ov7sun ovsy5k ovta6le. ovveg7i ow1 owa8 o7was owat2 ow5h ox3 oy9ar oys5l o1y2t o1za o3zy o1ø o1å ô6ra ô2re ôr5ei ô1ri ô4t ó9sa ó7t ó8v ò9re 1pa 4paa 2pac pa8cen p5ad. pa3deb p4adg pads4 2paj 6pak. 6paka 4pake pak4kas pakke4s pakk7esl 4pakti pa3kv 3pa1la pa3le pa6le4o7 pa7lim pal5in pal1j pal5lø 5palm 4palø 2pam pa5me p3anal pa4nap pan9de pa5ne pang5s6 pan3ka n7k8rea 9panne. pan5se pan5sl pant8r 4panv pa4ny 2papa pa8pa. pa3pe 4papo pap4pr 4papr pap3ri pa4ra. 5parad 2parb 4parek 4parena par5ess par5g 2pari pa4ri. pa3ris 4parki par6k7l par4kv par3m8 pa1ro 4parr par8ra. par9s4 par6tid par4tig par4tin par5u par7v parvi6 6parø 4parå p6as pasa5 pa9se pase6r5 4pasp 3pass pas5sab pa4s3t pas4tar pas5ti pas9v pa1t pa3te pa4tist pa6tre p8atta pat6tak 2patu p8at6v pau7k 2pav pa4ve. 3pa1vi 2p1b6 pba4ne. pbo6da pce6 2p1d4 pde4le. pdø2 pdø9d 1pe 2pea peak3 pe4a3re 4peb pec3 pe7d6a 5pedas 4pedd pe3de pedfø9 pedi9e8 pe6doa pe6don 4pedr pe4dro 4pedu 4pedy6 2pedø pe7då pee6 pe3er 2pef p5eft 2peg p5egg peg8ge. pego4 2peh pe4il pei4leg 2pe1in pe6ism 2pej 2pek pe8ka. pek4l pek4tro pekt7ros 8peku p6el 4pela pe5l4aks 5pelal pe5lar pel9d 4peled pe4lef 4pelei pe6lep 4peler pe6lev 6peliv 6pelj pel4lo 4pelov pel5s6e pel5s4i pel7st 4pelu pe5lun 2pely 2pelø 6pelå 2pem p1emb pe4nan pe4n3ar pen3de 6p5enden. 4pener pe3net 5peng8 pen4gel pen7gl peni4n 4peniv penly4 pen7s8a pensa7k pensa8la pen5sk pen4s5l pen3s6m pen5s6o pens4t pen9sta pen7ste pen7tag pen5tr 6peny 2penå 2peo pe7o6s 2pep pep5ar. pep7p pera3a 4pe4rab 4perad pe4rai pe4ral 4perap pera5t 4perate 5p6erc 4pered 4perei 4perek 4peresp 4perest 4peresu 4peret pe4rev 3peri perie8ns 4pe5rik peri3s4 4perit per7k8 per6les per5mu per5n 4pero pe3ros pero6se. per6regj per6rei 5perro pers6m per4tro per4t5rå pervi6k 2pery 6perø 4pe7rå 2pe1s 3pes. pe3se pe6se. pe7si pes8ka. p3eske pes4ke. 6pesl pes4n 5pess 3pest. 5peste. pes5til pe7t8 4petab peta6ka 4petal 4petas 4petau pe3te 5pete. 4peted 6petei 6petek 4petel 4petem pe3ti 4petid 4petil pe4tim 2petj 2peto 2pet4r pe4t5ru pet1s6 4pett 2petu 4petø 4petå pe2u 2pev peva8ne. pe5vi p5evn pev6ne. 4peø 4peå 3pér 2p1f 3p6fenn p3fo p5fr pfri4 pfø5re 2p1g2 pgjer4 2p1h phav2 pha9va phavs5 3p4her phe9te phe7va phe5ve phi5li 7pi3ane 7piar pi4as 7piase 4piav 4pib pi6ca. 2pid pid3s2 pie2n 6piend pi3er. pi9ers 2pif pi9fr pig5ge pig6g9u p7i6gj 2pih 6pii pi4keh pi6kel pike5r6o pi4ké 8pikk pik3ko 4pikl piku5 pi5la pi6la. pi3lep pil4lag pillba6 pil6led pil4leg pillega6 pille6ra pil4le5s6 pi1lo 2pim pi4na. pi4ne. pi9ned pi4nel pine4v 3ping pin6go ping3r ping5sk 6pinns pin4sl pi2nø pio6n5an pion5s 7pi2p pi4pi pip9la p8pip pi4rar pi4res pi4rut pisi9e pi4ski 2piso piss4l pis4sp pis4st pis1t pis4t5r pis9t8ra. 1pit pi9ta pita7la. pi5té 2piti 4pitj 4pitr pit5t 2piu 2pi5v 4piø 4p5k4 pka5v pka8va pl6 8pl. 2plad pla8de. p4lak p4lan. plan7de 4plane. 4p5lan5g plan5s plap3 4p1lar p2las pla4st p2lat platina5 2ple. 2pled p8legi 4pleis p2lek p6le5n4u ple5n4a ple6r5u ple8se. 4plev p2li 4plit p3liv pli7va plo4gj p4lo8i p1lok 4p5lov plu4e p4luk plun3 plun6d7ri p1ly ply5d8 plæ5re plø6pa p1lå 2p3m 2p1n4 p7ner pne6se. 1po po9a pod8 po6da. po4de. po6em 2pof po6f7r pog6 4poh po5id 2poke po6lan po3le po4lek 6polj pol5li po6lom pol6s4ka po2lu 2pom pom6p9u pom5s 4pon. pon5d pon4gr pongs6 2pon1s pon5sa pon4sv po2p1a po6pe. p5opn pop1s 2por. po1ra 2p5ord po1r4e po4ref po6reg po8ré 2p1org 2pori 2pork por6s7v por4tor por4t5ro por4trå 2porv po1ræ po1rø po4se. po4ses 4posj po2st po4sta pos5tas po5stat pos3te 4pos4v 5pot. 7pota potak9 po3te po4te. potek5l po5t6ha 3poti 4potr 4pou 2po4v pove6 pover6n pow4 2pp p2pad p2pak pp3akt p2p3a4l p9pane pp5angr pp5ank p4p3anl p2pap p9par. pp5arr p7past p4p7at p4pee p2pe5i4 ppel5s6 p4pena p8p9ender p4pendr ppe9nes ppe5p8 p4penø ppe5ra p7pere. p4perkl pp7e6sen pp9esn ppes8ti p4peta pp5e4tas p4pete pp5ett p2peu pph8 p1pi pp1id p2p1il pp5im pp3inf p4p5inn pp7ir ppir8re. p4pist pp1j pp3k pp1l pp5last pp3led pp5lei pp9lev pp5n pp1of p2pol4 pp3old pp5om p2p1op pp3ork pp1ov pp5p pp1r pp5rei pp5rin pp4ris pp7riss pp9riv pp9ro. ppropri6 pp7rot pp1s ppse6te. pp3ska ppska9k pps2p pp9spe pp3spl pps2t pp7sto pp7t2 p2pu pp1uk pp5ut pp3ø4 ppøs8 p6på pr6 4pr. 4prad 3praks pra7li 2pran pran3s 5prat. 5prate pra5te. 4pray 5pref prei7er. 4preii pr5elem 1prem pren4s 1pres 6pres. pres6sak p6restas pre7t6en7 4prett p3rif pri5ke pri4l3e 4pring 5prino 3pr6in6s5 3pr6in7s6e 3pr6in7s6i 1pris pri6s5k pris3t 2prit pri9ve 1p2ro 8pro. 6p7roc 3prof 4prog. 4proge 4progl 4p3roi p5rop. 3pros 7prose 6pru prun7ge pru5ta pru5te 6prør prørs5t prø5s4 5prøv prø5vels 2prøy 4prå prå8da pråk3i prå4ko pråk5k6 2ps p1sa. ps5a6n p1sc p3se. psei8ge p2sek p2s1el ps5e4ly p3sen. p5sens p7ser. p5sete p5sets p2sh p6sib ps5ins p7sis p3s4jo p4s3kil ps7kjen p2s1ko p7s6ko. p3skod p5s4koe p2sle p9s8lo. pslø8va pslø6ve. p3s4lå p2sm psmå8la. p2sn ps4no ps1o p3sod pspi9la ps5ple p3s4pre p4s5pro ps5pu ps3s2 pst2 ps7tal p4s5tem ps3tv p5s6tå psu4r p3s4us ps1v p2sva p2sve ps4ving p4svæ ps5w psy3ke 3psyko 4psys p2s1ø p3s2øk psø4ke. psøy8 psøy9ene ps1å 2p1t pta8la. pta4le. pt7ark p3te pte6k pte4ma. pte7re p5ti pto7g p4tou ptus5t p4tut 1pu pu4br 5puc 6pu6dy p5ugl pu2k pu7la pu8le. pull6 5pum pu4ma. punk4t5 punk5t6e 2punn 2pur pu4re. pu8rea 3puri 3purk pur5u pur3v pu7sa pus4h pusl7u pu1ta pu4ta. pu5tas pu5ter pu5tev 4putg 2puts put6tr put4tu 2putv 6putø 2p1v pver7 pvi4se. py4dr py8o 3pyra py1re py1ro 6pys py6sa. py4se. pys6t 4p5z 1pæ pæ4re. pø1kj pør4ret pø8sa. pø9ta pø9te p1ø2v8 5påb på4by. på1k2 1pål på4la. på4le. p5ån på3pe på1pl p1åpn på1r 1pås på7sko på5sm på3t2 6påtå7 1påv qa5 qu2 qu9ar. 1que que7r 4raam 4raar 4rabis ra1bo4 4rabr 2raby ra3cet ra3ch 5raci ra3d2a 4radf 3radio3 4radir 4radj 2radm 2ra1dr r3adre rad2s3 radvi4 ra5ede rael4 4raerk raf4fer ra4fiu ra2fj 2rafo ra5fo. ra4fos 2rafr ra5fre 6raft ra4fu ra6fy ra7gea ra5gee 2ragl 2rah6 7raid ra5int ra3isk 6r5akad ra9kar ra7kel ra5k6ha r2akk rak4kel r6akr ra5kro 2raks rak6sa rak3s4e rak6se. rakst6 4rakti rakt3r r4a5ku 4rakv ral5ans 6ralbum 5ralds 4raled ra5leo ral3g 4r5alge 4r5algo rali5e6n ra4lin ral1j ral5le ral7m ralo6i ral3op ra5ly 4ralø 4ra5l8å ra4mag ra4mas ram3b 6r9ambi rambu9ens 6ramed 4ra4mer ram8et. 4ramil ram1o ramperi8 ram6p3u ramse8te. ramta8la. ramta6le. 4ramu 6ramy r4an. ra4naa 6r3anal ra5nar ran9cs r4an9de. r5andel rand3r rand5s6a r4ane 4ranfa ran5ge 6rangi rang5st rania8 ra6nin ran3kv 2r5anl r6anli 2r1anm r4ann ran6n5ett ran4n5in rann3s4 rans7kar 4ransv ran4tik ra5nu ran6ut 4ranø 2rao 4rapa ra4pel 4rapin ra4pir ra4pis ra6pit ra1pl 4rapo ra4pos 4rappa 4r5appl 3rappo 2ra1pr 4raps 4rapu 1r4ar. 2rarb 7rarbeh 4rarea 4rareg rar5e6l 4ra3rep rar7eta r1arg 6rargu 8rarinna 6rarinne rar8ka. 4r1arm rar8ma. 6rarn 4rarr rar3re rar5s 2r1ar5t rar6ta. ra3rø 4rasa 2rasc ra3sea 4rasel ras3h raska8ra ras3ke ra4ski ra7s6ko ra6sl rass4l ras7st 4rasti ra5s4til 4rastj rast5re 6rasty ras7v ra1ta ratak9 r6ate ra4te. 6ra5teg 8r7a6teli 4ratfe ra1to ra1t4r ra4t5ro ra4trø ra5t6røy rat5tel ratte4s 4ratub rat5ut 6raty 7raud raud3s 6raug rau6ga rau6ge. 4rau4k raus6s 2rav 6ravd rave5s4 4ravg ra1vi r3a4vis 4ravl rav8l9ut ravlø8pa ravlø8s rav6r 4ravt ra5vy ra3vør 4raw raz5z6 2raø raøy4 2r1b8 rba3d rbe2d rbede4 rbed5en rbed5et rbed9ra rbie8 rbi9er r2big r2bik rbist6 rbis5tr rbo8di. rbo4ni rbon7s rbo5re rbra5s rbrei6 rbu5en r5bø r1c 4rd r4dab r5dag rdag4s5 r5dah r4d5ak rdal4 r4dala rda4le. rdals5 rda4mes rda8n9o r4dant rd5anta r4d3arm r4d3art rd5atl r4datm r4d3au rd3d2 r6dedi rde4en r3defi rd5e4ge rd1ei r9deka r4dekl r4deks r6delo r6demi r7dena r6d7eng r6d7enh rden4s3 rdense4 rdenta8le. r4deo r6depo r4derik r4d5erst rde6sm rd3e4ta r6d7ett r8dé rdfes5 rdi3an r4diana r4dians r6diau r4did rdi3e2 r2dif rdi6gres rdig3s4 r4dika r4dikl r4diku r2dil r6dimi r2dio rdi3ov r4dish r2dit r2diu rd5je r1dju r8d7m rd3n rdnæ4 r9dob r4d5o4d r4dol rdon8na. rd1op r6dor rd3ost rd1o4v rdover5 r9drad r3drak rd5ran rd7rara rd3ras r3drei rd3ret r5drev. rd1ri rd3rot rd3sei rd8ske rds4kv rds5tan rd3sto rdsto5g rds7tre rds7tu rdsva9r rd5t rdta8ka rd5tr rd7tø rd3und rd5ve rdvi8ka. r4dyg rdy5pe rdy3re r6d7yt r6d5æ r7d6ær r7d6æ5r6e rd1øs6 rdø4ve. rd3år rd7å6s 1re. 2rean re7a6r7an rear5e 4reav 2reb 3redak 6redam re3def re5den re3des re3di 3redig r1edl 2redo 2redr re4d5ri red5sku red4sl reds5la red7s6led 3reduk 6redy 2redø 2ree re4el. re3er 8refa 4reff 4refi 2refj 6refos 6refr 4reft 2refø 4regar rega7ta re3ge 4regeb re5gel 4regen 4reger 4regg 1regi re4gia re4gil reg1l 2regr 4regub 4regud 2regå 2reh 2reid 2reie 2r1eig rei8ga. rei8ge. 4reik rei9l rei5na. rei7nas re5inde rei5ne. rei7nes rein6skj re4inva rei9ra rei5sa rei3si rei7ska reis6led re7ism rei7v4a rei5ve 2rej 6rek. re5ka. re5kav re7ken 4rekj rekk6an rek4k5v 5reklam rek4led re5k6lir re7ko 4rekob 4rekom 4rekon 6rekos 4rekra 3rekru r3eksa 6reksp rek4ter 4reku r8el. re9la 4relag 9relandsk. 9relandske 2r2ele rele8ge. r4e5lei 6relek re7len 7relene 6relg r3elit 4re3lj r2ell rel4lag rel6land rel5led rel4lev 5r4elm rel5ses rel4sk 4re1lu 4relv 2re5ly 2relæ 2relø 4re7l6å relå7r 2rem remann6 r1emb remi6ene remi6l re7mis rem9ji remmed5 6remn rem8na rem5p4 rem1s remti9da 4remu 8remy 4remå 2re3na ren4del 4rendr 8rened re5neg re7nei 4renek r3e4nel 4renest 6renet 6rengd reng5l 4rengn reng5st re5ni 2renk ren6kl r3enl ren8ne8sl rennes9la re5no ren5sa r3enss 6r7entit 4r3en5tr 6rentu 4renu 5renz 6renæ 4renø re5og 2reop re3o2r 5reou 8repen 6r5e6pi 1repu 6repus 1rer 6rerad 6re9rang 4rer6at re5re. 4rered 4reref 4rereg 4rerei re4rek 4rerent 4rerep 4rerese 4reresu 4reret 6rerfa 4rerig 4rerik 4r3ernæ 4rerol 4rerom re3ros rero6se. re5rot 3rers rers4p 4rerute re6r7øy 2rerå 1res. 2resa re2s3c re3se 4resel re4sem 4reset resi7ere 4resin 2resj 2resk res5ke re6s7kje. res6kl res7kod re6sky 6re1sl re4slu 1resm re5smo re3sov re9spe 4respi 4respr 2ress res4sal res4sek res4sit res4sj res6sk res6sort res4sp res4st res4sy res9tane 5restau res6t5erv res4tes res3té 4re3sti res4til re3str 4restre 7restv 4re5sty 4restå 1resu 6resuk 4resun re3s4ve re3svi 2resy 2resø 4retaki 4retal re4tap 4retea 8retek. 6reteke 4retekn 6retel 6re5tem re5ten 4re5ti 4retj 4retoa 2re5t2r rets4i ret4st ret7ted ret5ter rett8o rett6set 4re5tu 2rety 2retø 5retøya. 7retøyets 4re7tå 2reu reu6r 4revak re5van reva5re. 6reveg 4revei 4revel re6v7enh re5ver reve5s r3e4vig re4v5inn re7vom 1revy re4v5åp 3rew 2reå 2r1f rfa5re rfat5 rfe8en. rfe8er rfe4et. rfei5li r4fik rflå3 rfe5m6ø rft2 rfu8se rfyr4 r9fæ rfø8rarar 2r1g r5ga. rga8le. rga8li rg5and r7gann r4g5anv rga3ri rg3art rga4ve. r6gedi r4gef r2gem rgent4 r3geo r4gerei r4geret r4ge3ru r4gesj r4gesl r4gesta rgi1a rgie4n r2gik r2gil r2gim r2gio r2gir rg3i4ri rgi7sl r2giø rg2le rg5le. rglem5 rg3len rg3ler r2gn r4gog r3gom r2got rg5rab rg3rea rg3rel rg5reps r6g5ri r3gru rg5sc rgs6kor rg5s4le rg1sn rg5s6till rg5sto rg9stu rg2sy rgu7d rg6ut rgå9as rgå6va rgå6ve. 2r1h rhav2 rhavs3 rhjul8s rho3d r7hu rhø5re rhånd6s9 rhå9ne ri1an 4rianf 4rianl 6riansv ri1ar 4riarb 4riarr 6riau 2riav ri4ava 3ri6avo 2rib ri2b3l ri8ca. ri4co. ri5da 4ridale ri5der ri5di 2r1idr rid3t 4rieie 4rieig 4rieks ri1el 6rield 4rielem 6rielim riel4la rie4n ri3end 4rienh 4rient rien5t4r ri1er rie5ra rie5ri 4rietat ri5even 2rifa riferi9e8 rif4fi rifiserba8 6rifj 1rifl rif5la 2rifo 2rifu 4rifø4 ri4ga. rig4gr ri3gi 4rigj 4rigre rig2s rig6s7t 2rih 2rii 2rij 5rij. ri4kali ri5kan 5rikd ri3kes ri7ki rik7ken rikk5j 4rikl ri8k9la 2ri7ko 6rikon 2ri1k2r rik4sk rik4s5u rikt6 rikts3 riku6m ri3k4v 4rikå 2rila 6r5ilde 6riled ri5lei ril6lest 2ri5lo ril4sn 2rilø 4rima ri9mab ri9mar 6rimes ri5met 2rimi ri4mi. 7rimis rim7l 4rimm 4rimo ri4mor 4r1imp 4rimu rim9ut 4rimy rina5l ri5n6am 4rinas 4r5inc 4rind r3indu ri4nee ri4nes 2r1inf rin7gom ring3r ring4sa4 rings5ak ring8spa 2r3inj 2rink 4rinn rin9nes 4rinor 2rins rins6k rin6sm 2rint rin4t5j rin4tr 2rinv ri6nø 2ri1of 6ri3om 2ri1op 2rior rio5s4 riot3r 2rip 4ripe ripo4s3 4ri1r 4risau 4rised rise5i 6risek 4risel ri4seli 4rish 5risiko 2risj ri6sju 4riska ri4ski 6risku 4risky 6ristad 4ri5sted ris5tik 4ristil ri4sto ris5tof ri5stun 6ristø ri6stå 4risv 4risy 4risø ri3te 6riteo ri7ti riti9da 4ritil 4ritj ri5t6o ri5tr rit1s6 ri6tun 4rity 2riun riu4r 2riut 4rivar ri6ved rive9ge ri5vei 4riverk 2rivi ri4vi4s riv5ise 6rivo 4riøk riø4r3a 8riøya 4riå r1j rj7ambi r4jere r2jes r4jeti r4jetr r4jetu rju6la 8r1k rk3akt r6kanf r4kao r4kapr r6katr r3ke. r2keh rk5eik rkei8ka r6kek r4kelo r4ke3lu r3ken. r4kenav r3kene r4keni r5kens rke5ri r4keris r4kero r5kers r4ke3ru r4kerø rke4se rkeslø7se r9ket. rk4han r3ki rki3d rki3e rki4vi rkjek8 rk5jor rk1k2 r5k8led rk2li rk5lun rk9lut rklæ5re rk2lø rklå9ra r3knek r5knep rk7nes r3kno r2kob rko6b5r r6kofo r2koh r4kola r4koli r4kope r4kora r4koru r4kosel rko6sele r4kosj r6k7ras rk5rei r5k6rem r8ks rk4sar r6k6seg rk2s1i rk4ska rk1st rk6stal rk4sten rk4s5ti rk4stj rk4sto rk6s5vi rk5ti rkti4s rk5to rku4le. r6k7u6t r4k5ve6d rk5vei r5kvel r4kver rk3ves rk5vik r4k5øl r2k3øy rk9øys rkå4k rk5åke rkå6pa rk5å4s 2r1l rla4te. rle4a r2lef r3lep r4l5e4ri r6le7sl rle4st r4lesu r4leu r3l4i rli9ke rling3s4 rli8ta rli4te. r3lj rl6o rlog2 rlo5ve rl4sk rlu4e r3ly rlys7k r6l5z rlø8pa. r5løy9 2r1m rma6ge. rma5k4l r4m5alte rm3anl rm4ans r6manv r4mare r4marr rm5av rm3b r2me7g r2mek rme6lap rme5ne r4menet r6merev r4mese rme9tar r4mey r4m5ide rmi6ene rmini6 rmin5ski r6m5inst rm5i4v rm1je rmlø8pa rmo4e r2mof rm1op rmo7st rm7p rm5s6ko rm1sl rms6n rm1st rms5til rm1su rmta8la rm3te rmu7an rmue4 rmue5ne rmu8la. rmu6le. rm5øy. r9må. rmål4 r6m5åp r9mår r6m7åta 4rn r3na r4n1ak r4n3ald r6n5appar r4narb r4n3art rnat7r r4natv r6n9a6vis rn3avl rn3d rndø4 rndør5 r3ne. rne5a2 r5neboe r2nec r4nef r2nel rnele6ge. r3nell r3nels r4n3eng r4nenh rne7p r4nerei r6neris rne3ro rne1s2 r5nes. rne6se. r8nesi r4ne3sk r4nesm rne3so rn5e4tab r4nete r2nev rne5vr r2nés rn5g6 r4ninn rn5k4 rn3n r5no. r4noa rno5b r4nod r4noi r6nok r2nom rn5omn rn3oms r4n1op rn3ork r2nos r4n1o4v rn7se rn4s3in rn5ske rn3skr rn5sla rnsle7ge rn7s6mi rn6s3ovn rn5spon rn3s4pr rn1st rn4sti rn3te rn5ti rn7tr rntre4 rnt4v rnu4 rn5ug r6n3ut r7nøt r4n5øv rnå8le. rn3ås ro1ak roa4s ro5asi 9roban 9robar 1robe ro4bed ro4bef 5roben ro4bes 5robølgj 1roc r3odds 7rodo ro5end ro7ens ro7fa ro4fel ro4fem roff5ri ro7ga. roga9ta ro7ge. rog5ret ro6gry rog1s4 ro2gu 1roi ro4kel ro5ki rok6kat rok6keri rok5kl rok4kom ro7k6l rok5n rok7s rok8se. rok5v roli7ga 4rolj rol4lab rol4lap rol4leg rolle8ge. rolle8se. rol4lis rol6ly rolo9v 2roly ro6mak ro4mal 3ro5m8an ro4mate 2rom7b 4ro3me rome5d 4romk 4r3omn ro4mor 2romr rom5sla r7omsy romsø3 rom3t ro5ne. ro7nim 6ronism 6ronista 8roniste 6ronisti 4ronn ron4na rono5s ron1s4 ronta6le. ro4pad 5ropet ro4pia ro8pla. 2ropp ro9py ror3a ror6da. ro3re ro1ru ro4sat ro5sel ro3sen 4rosl ros3la ro4sm ro6sov ro1s1p ros4st ros4sy ros7tas ro3sti ro3str rost7rø rot5ekte ro5tes rote7ster roti7ka rot5ord ro5tu 6roty roun2 round3 ro5ut ro5va. ro9vare ro7vas ro5vek ro7ven rove5re rov5sm rovve6 rò6te. 8r1p r5pa r6parb r5pefo r4peno r6penø r5pesk r5pet rp6j rp2l rp3lad 4rp3n rprø5ve r3pu rpun7g r6p5ut. r6p5øy r2påk 8r1r r8raa r2rag rra3r r4raro rr3d rr6e r4reb r7rebart. r2ref rre7int r4rekl r5relat r4reo r4repl r4re3ru rre5sk r4resm r4reso r4respe r3ress rre4st rres5ta rre7sti rre5str rret6s5 rre5u r3ri rri6ka. r6rip rri5v rr3m4 rrmå8la rro6e r5rom rro8sa rro8se. rro8ta rr5s2 r2r3un rr5v rrå5de 4rs 6rs. r1sa rs3ab r2s7ad r3sak rsa5ka r6sakt rsa6la. r8s9ald rs3all r5sam r4sarr rs3arv r1sc 5s6ch6l r8sedi rse6g7 r4seku rs4ela rs7eld r4seli r4s3elv rs5e4rik r3ses r4sesi r6sesu rse4te. rs6ett rsett8o r7sim6 rsimp7 rs1in r5s4ing r4sins rsis5t r7sja r4sjh rsj3or r3skad r6s7kaf rs4kam r3skap r4skar. r4skas r4ski r5skil rsk7inns r1skj rs5kjens r6skl rskla8g rsk5lar rs4k5le rs4k3læ r5sko. r5skoe rsk3op r4skor r3skot r1skr r4s3kra r5skriv r4s3kro r1sku r5sku. r5skue rsku7et rsk5und rsk5var rs5kys rsk5ø rs4lef r4slei rs4lek rs4les r5s6lit rs3lok r4slun rs4make rs4mo. rsmål4 rs6nev r1so rso9a rs5oml rs8o6n5 rso7n6al rso5n8e rso5n6i rsons4 r2s1or rs5ord rso7ris rs1ov r1sp rs4pan rs6pat r5spel r4sper r7spes r5spi rs4por r5spred r4spå rs3s6 r1s2t r4s5tabb rs5tank rs3tap r6st7b rs4ted rs4tem rs5tend rsten6s rs5ter. rstev9na r3stil r4s5tilf r4s5tilh r4s5tils r4s5tilv r5stis r4stit r6st5k rst4r rs9tre. rs7tree r4strin r4s5tro r5strø rst7ut rstu9va rstyg7 r3st6ø r7stå rs5ukl rsu9r rsu7sa rs5usi r1sv rs8vak rsva9ra rsvar4s5 rs1ve r3s4vek rs5vit rsy4na rsy3t r1sz rsøks3 rs9øye 6r1t rt5ad r4t5af rta4ka. r4tana rt3anl rta9pa r4tarr rt3art rt3avs r4tec r4teda r3tede r2tee r4tego r4tegr r4teie r4te3in r4teka rte6ke. r4teki r4teku rt5e4lit rte6ma. r3temp rten4s5k rtentle8 r2teo r7t6er r5terd r5teres r4teris r5terk r4terå r4tese r6tesk r6testi r4teta r4tete rteus8 r4tev r4th rtian8d r4tians r4tiar rti8ar. rti5en rti6gra r4ti3kv r4tila r4tili r4tilo r4ti7na r2tio r2tip rti7sa r6tiska r4tiski rt6i9so r4tisp rtis3s r4ti5str r3titu r2tiv rtma6le. r5to. rt3off r9tofo r9tok. rt3omk r4t3opp rt6opp. rt3ord r6t7o6s rt1o4v rt2r rt8ra r9tre. rt6red rt3reg rt3rei r4t5reko rt5rel rt5rep r7trib r4t3ris r4t5ros rt3rut r5t6rål rts3ar rt4seg rts5eng rt2si rt4s5ja rt5ske rt3skj rt5s4no rt3s4pe rt4sti rt7s6trek rt4s5tøy rts5unde rt3t4 rtu6en. r7tug rt3und r2t1ut rtu8ve. rty8da. rty8de. rtyr5s rty6ra rt5yt rtæ9ra rt5øl r6t5ås3 ru3and 6ruav ru6avh rub6a ru8bl ru5bo ru4di. rud4r ruds4l ru4ele rue4r rue3s4 ruga8l ruga5t rui3d6 4ruk ruk4su rukt3s ru9la 4ruli 6r7ulk rul8ke. r2ull r7ulv r4um rum3al rum4p9l 5r2unde run5del 6r3under 7r4under. r5unders rund3r rund3s4 run6ge. 4ru2ni run5kr r7uly ru4nøy ru2r ru5ra ru8ran ru8rar ru9rer rur8ta r4us rus2h3 6r7u6sik rus5j rus7lu ru1s4o rus5sel rus4st ru4s4t3r r4uta ru3tal ruta8la. r7utan. r4utbe 4rutd rut8e rute3i ru4tel ru9tene. ru9ter 2rutg r1utk rut9o 6rutr rut4re ru6trø rutto5 2rutv rut5ø ru5va ru4ved ru4veg ru4vei ru4vel ru4vere ru4ves ruvi8 ru6v7is 2r1v rv4a rva7ka rva6la r8v7arb rve3de rve4den r4ve5dr r4vega r4vegi r4vegr r4veim rveis7e6 rve5kl r4vela rvel9le r4v5eng r5ver. rve5re r2ves r2vev rvil9l rville9d rv2j r4vos r4vov r3vr rv2s1 rv5ung rvå7r 4r1w rx1 ry1a4 ry2dr ry7fe ry5fl ry5ke. 2ry1kl ry7le ryl4l5i8s 4r5yndl ry4nes ry5nes. ry4pa. 2ryr ry8re r1yrk ryr4ke. ry9ro ry5rø rys6sal ry5ta ry4tek 1rytm r3ytr r4z ræ7le 8r3æ4re 8r3æ4ren rær5in rær8t ræ8v 2rø. rø8ar 6røb rø4be. rø4dek rød1s 4røep røf5l rø4ke. rø4kero røk3l 4røkn røk5s4 røk7t røk1v 2røl rø6m røm1a røn5nes rønn5s4a rønn5sk røn5sko 5r6øntg rø4pe. røp9l 1rør rør5d6 r6ørende. rø7ret 5rørl rø2r3o rør4sp r8øs. rø3se rø5sla røs5v rø8ta røt9as rø1va rø5vede rø9vers rø1vi r4ø5væ 2r1øy. 4røya røy9ar røy6ed røy6ene røy5es røy4et 5r6øyk 3røyr røy5re røy8senes 6røy4s3k røy4st 2rå. rå7a 4råag 4råb 3rådet rådy9ra rå9ene 2råf 4rå5g4 2råkj råk3re rå2k3u råk1v 4rål råle7s8 rå4let rå5let. rå5lu r5ånd rån6da 2råp 2r1år rårs5k rå5ru rå1s 4råsb 2råse rå5si 2råsj rås4t 6råta råta8ka. rå5tr rå5tu 2saa 5saa. sa4ba. s6abe s8abl sa5bok s3abon sa5by sa3ce sa4dag 4sadam sa4dere 4sadm sa4do 2sadv sae5d 3saen 7saer 5safa 1safe 4s3affæ 5saga sa4ga. sa4gas sa4gat 6sagent 6s5agg 6s5a6gi sag8na sa6go. sa4gog 2s1a2gr sag3s4 sa3ik sa5ir sa1is 5sak. sa2ka 3saka. 4sakad sa5kai 3sakb 3sakd 3s4a3ke 5sakf 1sakh sakh5e 1saki sa4kj sak5kr s4akky 5sakl 5sakm 4sako 3sakp sa1k2r 5s4aks. sak4s3i 4s3aksj sak4sp 5saksr 5saksu 2s1akt sak6ta. 5s4akto s4aku 4sa7kø 1s4al. sa1la 4s5alarm 7sala. 5sa5lat 4salb 1sa3le sa9let 1salg s4alge 4s5algo salg6s5 s6ali sal4mes sa5lo 5sal2s3 sals4a 4salter sa1lu 3salv sal5ved 2saly 1s2am 5sam. sa2ma sa5ma. sam4an7 sa5mas sam5ei sa4mel sa4met 5saml sam4lev 5samm sammen5 sa4my 4s1a2na sa9na. sa7nar sa3nat san6da. san7d8al 5s6ande. sand5r sand5s6lo sand5st san4d5ø 1s2a5ne 4s3a6nek 5sang. 3sange 4s3angr 8s7angst s7anken 2s1anl s5anm san5ne 6sanno sa2no 4s5anor san5os san1s 5s4ans. 4sansa 5s4ansen san7s6k 4s5ans8l 6sansv s8ant. san9te 6santr 4santy 4s1anv 2s1ap sa2po 1s2ar. 1sara 6sarab 2sarb s4ard 9s8are. 4sareal 4sareg sa5rev 3sari sa4ri. sar6ka. 4s3arki 2s1arm sar5me sar8me. s1arr 2s1art sar4ta. sa4ru 4sarv s4ary 1sas 8sasju 2s1a4sp 4s1ass s6ast 4sasty 2sasu 4sasy 1sat sa1ta sa5ten sa3ti 2s1atl 4s3atmos sa1to 4sa5t6r s5atsk 5satt. 4s3atta 6s5atten satte4s 5sau. sau4d sau5di. 5saue 4saug sau6ga s3auge sau6ge. 2s1auk 5saum 3saus 4saut 2s1av s2ava sa4ve. 5s6a5v6in sav5n 3savu 8s9b4 sba4ne. sbi6e sbo4da sbu6et s6bug sbul3 sby8ta 4sca 5s4can 1sce 2scel s4cene s3cer 6s6ch. 8schl. sch8m 6s7cl 4sco. 6scoc 4scos s4cus 8s9d6 sdag4s5 sdam9p sde6le. sdu8en. sdu8er sdø8v 1se 2se1a 3sea. sea4g se3an5d se7ansa sea9re 5se4au3sk 2seb 4sec 4sedag sed5d se3de 5sede. 5sedl 4sedo 2sedr 2sedu 6sedvanle 2sedø 5see. see3d 2seef 2seeg se6e3i se3e4l se5en seer1 5sees 2seev 2sef s1eff 4s1eft 6sega sega6l se2ge se6ges se3gev seg8ga. 9segl. 7seglet 3segm 4s2e7g8r 2seh 2seid sei8dan sei9den sei8e9nes s5ei4et 2seig sei6ga. sei5ge sei5k 3se8il 6seim 2sein se3ind s3eini se6ink se3ins se3int sei5r 3seis 2sej 5sej. 2se5ka 3seke 4seki 2sekj 5sekk sek4kes 2sek4l 4se3kn 2seko se2k1r 4sekra 4sekri 4sekro 3s4eksj 4seksp sek4st sek2t3an sek6te. sekte9ra 3sek5to 4seky 4sekå s2el 2sela se6la. 3selak 5selane 5selar sel5art s3e4las se6l5at sel1d se4le. 4se5led 6selega 4selei 4s3elem 4seleng 4seles 4s3e4lev 5s6elg 4selik 4selil 4selis 4s3e4lit sel6løp 2selo 7selol se3lom 3sels sel4sin 8s5elske sel9s8lag sel4spo sel5t6 2selu se6l7u6r sel4v5ak sel4van selv3e4 sel4ve. selvei4 sel4ver sel8vin 2sely 2selæ 2selø selø8pa. 6selå 2se3ma 3semb 7semd se5me se4mi. semini6 2s1emn sem4na 9semnd 2semo sem5pe 2semå s2en. se5nak 6senau sen9d8a sen6dela 6senden 4sendr s2ene 4sened se3neg 4senem 8senesa 6senese sene8se. s5engas 2s1enh se6nin s3enkj 5sen3n s2ens 4s5ensem sen6s5end sen4sj sen3so 7s6ent sen5ter 8s7en5trep 4senum 4seny 2senæ 6senø 2seo2 7seod se3or 2sep se3pe seperso5 3sept s2er. se3ra 4seram 5seran 4serap 5seras 6serau ser5d s2e5r4e 5sere. 4serea 4sered 4seref 4sereg 4serei 4serek 4serel 4serenn 4serent 4serep 4sereso 4seress 4serest 4seresu 4seret 4serev s1erf s2eri seri6e5ne 4serik 4serkje 5serkr 5sern ser7nev 2se1ro se4rop se4ror se4ros 9s6ert ser4tak ser6tat ser4tr se1ru 4serul se4r3un ser4ved ser4vel 2sery 2se5r6ø 2serå 5ses. ses5ald 5sesals ses5alt 4sesc 2sese se4sene ses5in se3sj 4sesje 4sesjuk ses5kal ses5kar ses5kv ses5lit se3sna 5seso ses3pr ses4s5in se1st 5sest. 5seste. 4sesto ses5un ses1v 2sesy 4sesø ses3å 3s2et. 2se2t6a 3seta. se5tae seta8ka se5tar 6setea 4seteg 4setei 4setek se7tel se4tera se5tero 4setes 2se3ti se8ti. s3e4tik s3e4tis se8t7ja 4setje 5setje. 7setl 5setn 2seto 2set6r s4ets s5etters 2setu 2setv 2sety 6setø 3seum 4seun seure9ne seu2t 2sev seva6ne. s8e5var sev4d sevi4sa s1evn sev4ne. se3vr 3sevåg 2seyn 2seø 2seå 1sé 2séa 6séb 4sée 4séf 4séj 4sék 2sél 4séo 6sép 9sér 4sés 2sév 4s3f sfa4ne. 6sfe sfe6et. sfes5 sfisken8 sflå3 s5fo sfo8ra sforlø9 sfra5s sfri5e6re sfyrs5 5s4fæ sfø9ren sfø5rer sfø5ri 6s9g6 sga4l sga8va sga4ve. sgen9s sge4st sgå4va sgå4ve. s1h 4sh. sha2k s7hat s3hau 6she shea4 s5hei5 7sh6e4rif 8s5hett s4hi. s6hip sh5isk 4shj 6s7hopp 3short 5show 6shs 2shu 4s5hy s5h6ø shø8l shø6va shø6ve. s7hå 1si sial5v6 4sia5m si7ans 4siap 4siav si2bl 3si2da 3si4de. 3si3den si4de5o s4ider si5der. si4dete 2si2do 4s1idr sid8ra 4sidy 4sieg si1el sie4n si5er. si6eren sie4s si3est 6sife si3fl 2sifo si4f3r 2sifu 4sifø 3sig siger4s 4sigi 4s3iglo si5gr 4sih 3sik si3ka si5ke. sik2h7 sik4ka sikk8artet sik4k5el sik4ko siko3 si4kom si4kop si4kos si4kot sikt4s3 s2il 5sil. 3sild sil4del sil4der sil4des sil5j sil2k sil4les 2silø si6mel 4simet 2simp si3mu 4sinde 4s3indu si3nek 2s1inf sing4s5a4 7singu si4ni 4sinj 2sinn 3s4inn. 7s4inna s6inne. 5sinnet s3innh s5innk s3innl 4sinnt si5nob sinsk5e 2s1int 4sinv si6nø 4si5ov si4pa. si8pe. si6re. si7ren si4ri. sir8kl s2is si5sel si4serf sis5e4v si6sin 6sisju si4sk sis5ke si4sn si4s5te si4sti sis3to 4sisy 3s2it si5ta sit8ji si6t7ra si4t5re si4tri sit3s4 sitsva9 sit6term sit4tes si4umf 4siut 5siva si9van si6vek si8vi. si9våt 1sj 2sj. s2ja. 8s5ja9g 7s8jakk. 4sjam s4jan 4sjanl s7jarn 2sj3av 6s7jaz 2sjb 6sjd 5s4je. sje4f3i sje4fla sjef5t sje3g sjek4t5o 3sjel sje4lev 3s2jen. 5s2jene 4s3jent 5s4jer. s2je5s4 5s4jet. sjet4ti 2sjf 2sjg s6jim 2sjk 2sjl 2sjm 2sjn 2sjob 5sjok 4sjom 9sjon sjons7 2sjor 2sjou 2sjp 2sjr 2sjs 2s6jt s6j3t6sj sju1a 6sjub 6s7jug 4s5juks sju8la 4sjun 4sjur 2s7jus 5s2jø sjø3k6 sjø1p sjø9rø sjø1s2 sjø3t8 8sk. 1ska 2ska. 4skab skabe3 s2kad 8skae 4s6kag 2skak 5s4kal8a ska5lar 2skam s4kaml 8s7kamp 4s5kana 4skande 4skane 4skano 6skant 5s6kap. 9s8kapa. 4skapas 5skapen. 6skapit 4skapp 2sk2ar sk5arab sk7arbe 5skard 4s5kark 5s6karp 6skars 4skart 3s8karv 2skas 4skate 8skay 4skb 6skd 2ske s4keda s6kedo s2keh s6kei skei5er. s8k5e4lev s6kelik skel3t s4kelu s3ken. s4kena s6kenav s4keno s5kens 5skept s5ker. s4kero s5kers s2ke1s ske3si skes4m ske5sn s4ketet s3ke4t3j s6kev s2key 2skf 2skh 1ski 5s6ki. 7skia 4skid 5skie 5skif 5s4kik s6kill 5s4kilt ski6net ski4nin 5sk8inns5 4skino6 5skiol 5skip 2skir s4kire 6s5kirk sk5irs s6kis. 7skiss 4s5kist 5s2kiv s6kje. 5skjema 6skjemas 5s6kjer4m3 3skjer5m4e 7skjers 3skjor 4s5kjærl 5skjøn 6skjøp skjø5res 2sk1k4 2s1k2l 6skla sk5lak s6k5lan s5klas sk9leg s6klei sk3lek 7s8klero sk5ling sk5lit s4k5luf s2klyd 2skm 2skn s1knu 4skoa 7skodd 4skof 3s2kog 2s3koi 1skol 7s4kola 3skole 4s3koll 4skom s6koma s5k6ome 6s1kon 4skoo sk5ord s6korpi s7kors s8korst 4skort 2skos s2kot 3skott sk8ra s4k9ra. 5s4kral s4krat s2k7re. 4s3kref 6skreg 5s8krek 4s3kret 5skrevn 3skrib 3skrif 4skrig 3skrik 3skrip 4skrite 3skriv 5s4krog s3kron 4s3krop sk6rud skru3s6 6skryss 1s2krå 2sk1s2 2sk3t4 5skud 1s4kue sku4end sku4er skue5re 1skuf 5skulan 5skular 3skule 6s5kulis 4skull s4kulp 4skult skum3s 2skun s6k5underv 4skup 8s5kurs 8skurv 2skv sk5va. 3skvad sk3vas s6kven sk3ver sk5vit 3skvu 1sky s6kya s6kye 4skyr sky3re 4skys 6s6kyss 5s6kysk 3skyt 6skæ 6skø. 6s5køa 4skøe 1skå skå5re 6skåt sl4 sla8da s3lade sla5ge sla8ge. sla5ke s5laks 3slakt 3slal 4s3land 4s5langs slap5pe s5laran s5lare 4s5last s1lat sla4te. 4s1lau 8s5laus sla1v 3slave sla4vin 2sle. s8leda 4slega s4legi s4legn s6legr 6slei slei5er. s4leiv 8s5leke s5lekk s2lel s4leme 4sle7ne s6lener s6len6t3 2sler 8s5les s6lesj s4leso s6lest s4leta s5lev s4leva 4sley s5lia 2slid sli4en. 6slig sli5ke s4likk 2slin 8s3linj slin6t5 3slip 5s4lit. 3s4lite 4s5liv slob5b slott4 s6lott. 7slottet 1slu 8slu7a 2slu2e slu5es 6sluf 4slug sluk3s6 slum4p5 slum5p6e s3lund s5luns s6lup slu7sa s4lut s1ly sly8et. 1s4lyn 4s5lys sly8t 6s7lær slæ6rari 2sløn 8s5løp slø4pa. s6lør 2sløs slø8s5a 3s4løsi slø5va slø5ve slø5vi 5sløyd sløye7 9s4lå. s4låe s1lån slå5ner 1slåt s1m sma6d 3smak. 5s4maken sma9let 8sman s4med. s4mede 6s5medi s4medk smeg5 4smei smek7l s4mekt 8s5meld 3s4mell 5s4melt 2s5men 3s4mert 6smes s6mesi s6mia s4mie smi4ene s4mig s6mil. smi7la s6mile smini6 s2mit smo7a smo8de. s2mok 6smot 3smug 6s5mugg smul2 s6mula s4muld s6mule 5smurt 1s2my4k 6smøn 1s2mør smør3s 4smøt 5små. små5r s8mått s1n 8sna. s4nab 7snak 4s3nas 6s3nat 4snav 4sne. 4sneb 4sned 5s8nedd s6nee s4neg 3snei snei5er sne4kri s7nekt s4nel 2snem 4sner 6snes sne9sa snes9v 4snet s6nif sni6gl s2nik snik5ko 3s2nil 6s3nin 3s2nip snir4 5s2nit 2s3niv s8no. s6noe s5nord 6s7not 5s6nud s3num s4nur 7snut 8snyh 2snæ snæ4re. 5s6nø. snø5d4r 5snøe 1s2nør snø1s snø5vi so3al so8ar 4soav 2s1ob so2bl 1sod so4da. 5soe sofa1 so4fag so4fas 6s5off 6s5ofre soft1 so2ga so8gi so7gl sog6nem 6soh 5s4oi4 so5id 5sokn 4soks sok4se. 7sol. so4la. sol5av 1sold so4le. solei5er so4lene sol5f6 1so7li 8s7olj so2lo so8lo. sol3s2 sol5t4 so4lum so4lø 3som. so6mend s3omf 4s3omfa 4s1omg 5somh 2s1omk 4soml 1som5m sommar5a 3s6omme somme6r5e6 2somr 7somren 5somrer 6s3områ s1oms som5sl s4omst som5sti 4somsy 1s2omt 5somt. 6somta 3son so4na. son7da 7s6one so8nea song3s4 so4n3o sons4k son5st so2nu so4ny. 2s1o2p so7pak so9par so7pet 3sopp. 5soppa 3soppe sop4pi 8sopple so3pr 1sor. 7sora so3ran 5sorb 4s1ord sor4da 1so1re so4rek 7sorga. sor4gl so2ri 4s3orie 7soris so5riu 4sorke sor5n 3sor5s 7s8ort 1sos 4s5osc so8se. 6sosf 4sosj so4sl so5te so8te. so4tra sots4 sot5te sot4ti 4sou 2sov so3va so4ve. so5ven sover5e sove3s4 5sovet 3sovj sp2 4sp. spa5g6h 7spak. 7spaka 5spake 8spakk s2pal s3pall 5spalt 3s4pann 3spari 4spas 5s6paser 4spe. spe4a 8speda spe9dé s4pee 1s2pei s2pel spe4leg spe4les 5spelet 8s7peng 3s4penn s4pent s5pep spe4r5and 6speri 4sperl s4perr s3pers 3spesi s4pest s9pet. 1spi 6s5pilo 4sping s2pio 2spip spi7res spi7ri spi7ro 5s6piss 2s3piz 2s1pl 8s9plant sp9lar 4sple s4plin 3split sp6o 2spoe spo6et 2spol 5s6pole 6s7poli s4pora s4pore 5s4pors sport6s5 3sporv 2s5pos 4spot s3pote spo5v 9sprag 5spran 6s3preg 5sprei 8s7preik s4prek spre5ke s3prem 5s4pren 6s5pres 5s4pret s6print s5prio 8sprinsi 8s3pris 6s5prob s3prod 4sprof 5s6prog 6s7progn 6s7progr 5s6pross 1spru s4pry 3sprøy 5språ 2s3ps 8spub 2spul 3s2pyd 5s2pø 6s3pøl sp5øy 9spå. 5spåd 8s9r sre8ka sre8ke. sri8e9 sri8ka sri8ma sri4ve. s5ro sro4e sro6pa sro6sa sro6se. sro2t sro9te srot5o srø1v srå4da. sråde9r srå6ders srå8ma 4s1s s7sabel s7sabl s6sae s4saj ssa8ke. ssa6la. ss5all ssa4me. ss5amp s5sane s7s8ar. ssari8e9n s7s6arm s4sarr ssar8ve. ss6as ssau8sa ssau6se. s6seet s2seg sse5ge ss5egg ss4el sse5li ssel5s ss9elv. ssel5v6å s2sem s5sen. sse8na. ss5enden s5sene s4seni ssen6ke. s4senu s6senå s5ser. s6serab s6serat sse7sk s4seski s4sest s7set. s9sets s2seu s4sey s2sh ssi4a ssi7e6rer s4siff s6silo s8s9ime s6s3ind ss5init ss3inj ss3inn s4s3ins s5sis4 ssis5m ssi6v7end s5s6jarg ss4kape ss3kar sska8ra ss3kn ss3kof s7skog s4skor ss6ky. ss4kye ss4kå ss5kål s7skåp s2sl s8slip ss1lo ss5ly s2sm ss6nar ss2no ss4nø s4s5nød ss5nøk s2sof s4sok6 sso5lo s2som ss4oma sso3ra s4sorga ss3ove ss6pil ss4por ss9ri ss2t s5stad ss4ted ss3tek sstel6li ss5tep ss7tilp s7stip sst6r ss5tren ss4trå ss3tus ss3t4v s2s3ul s3sur ssva7ra ss1ve ss8vek ssy6na ssy5r ss7øye s6så 6st. 2s1ta. stabs3 3s6t2ad stad3a sta6d3o s5tafa 3stafe sta5fl st3aft sta7ge 4stah sta6ka. 5stakk 4stakl 6stal. 6sta4la sta5lak st5ald 4stale sta4le. 5s6tali 5stalt s3tame 3stamm sta5na. 3s4tand 6stande. st8ane s4tanf s4tang stang5s6 st3anl sta8n9o s6t5antr st3anv 4stao 2stap s7tapa s4tapp s8tapå s3tari 1stas 3s8tasj 4s5tast 1stat 4stato sta5top sta3tu 3stave 2s4t5b st7c 2std 2s3te. 2stea 2steb 3sted. s4teda 5stedt s2tee ste4en 2s4tef 3s6teg. stega6l s4tege 3stegh 4s5tegn s4tegr 4stegsp 5stegspl ste4her s2t4ei stei5er 4steikn ste6in6s5 3s4tek. 4s4teka s6teke ste4ket s4teki 4s5tekn 4steko v4s5tekst s4tekt s8te5kv 4stela ste5le. s5teleg ste5lev s5telig 5stemd 3s4temm 5stemn 4stemø sten5a ste4nar 5s4tenen s4tener 4ste5nes 3s6teng s4teni 6stenk 4steno stens5l 4steo s5teol 2step step7per st8er. 8s5tera s4teram s6terest s4terev s7t6erf s4terid ste7ris s6teri6v 4s3term 6sterr ste5run ster8ø 2stes s4tese ste7sle 4stet s4teta ste7t6r s6tetø 4steve 4stevi 6stevl 5stevn 6steå 2s4t5f 2stg stga6ve. stgå8va stgå8ve. 2s6t5h st5he 2s3tia 4stib s5tibe s9tibl 3stic s6tick 6s7tid s6tidel sti5en s2tif 3stift s4tigen 7s6tigi st9i8gj 3stign s5tij 6s5tika 4s5tike s4tikl 3s6til. 5s4tila sti4lag 4stild 3stile stile9ge s6tilk 6stiln s4tilo 6s5tils 5s4tilt. 6s5tilta 5stilte 4stime sti7mer 6stimé 3s6timu s6t3ind s6tini 4s6tinn s6tinst s6tint 1s2tip 4s3tipp 6stips 5stir 2stis 6s7tisk 4stitt 4stiå s4tja 5stjel 8s7tjene s6t5jent 3stjer 4stju 2stk 2stl 2stm 2st5n2 s2to. 1stof 2s3tog 4stoks 6stokt 3stoli 4stolj s5toll 4stom s9tomm st3oms 6s5tomt 4stoni st3ope st5oppl 6s8t5ord sto4ret s6torm stor3o 4stors st5o4s s1tot sto4t5r 5s6tore. st5ou 5stova 2stp 8str. st3ra. 4s5trad s8traff 6strafi 6strail st3ral st4ran stra8na. 5strand 4strane 6strans 6strap 4strar st7ras. st7rast. 5s4traum s4tre3a s4tred 7s6treik st5reis 7strek. st5rekl strek4sa8 6streni st5rer. 6strers 6strh 9stria 9s8trid 5strie st5rige st3rin 3s4t6rip 5stri3s 6stroe s5t4rog 5s4trok st3rol 6s4t5rom st3ron st7rop. st7ro6pa s6trope s6t7rug 9s6truk st5rum. 2stry 6stryg s7trykt st5ryt 4s3træ 1s2trø 6s5trøb s5trøkk st6røm 4strør 4strøs st5røse s5trøst 4strøy 6stråd 2st5s6 stsa6me. stsy8na 4st7t6 stta6le. st3t4r s4tua 1s2tub 3s4tud s2tue stu4el stu4er stue5re 3s4tum 6s3tung 6stunn 3s8tunt 6s5tur 2s4tut 2stv s3t4ved 1sty 2stya 2styd 3s4tyk sty6l 2s5tyn 2s7typ 3s4tyr styrs3 6stysk 4styv sty5ve 1stø 2støk 5støl 6støm 5støp 6størk 5støt stø7va. stø5var stø3ve stø5vi st8øy 1stå 5s4tåe stå5k 4su. 1su4a su7a8l 1su2b sub7l sub3o 5subs s3ubå 1sue su8er su2f 5s2ug su6ga. su4ge. sug3g su2h 3sui6 su3is5 suit5a su2k 4s1uke 3suk5k suk3r 1suk5s su4le. 3s4ulf su4lik sul4t5r s1ulu 2suly sulæ5 3s2um 4s3umid su2mo sums6 5sund. 8s5under 5sundet 5s4undi sun6d7r 9sunds sun4ge. 6s7u2ni su4o 3s2up su4pe. super3 supi9 su8p4r su8pre sur5d su4re. 4s3u4rei 1surf su4rie su4riu surs5k sur4sp sur4sti 1sus su3san su4se. su6s5es 4susi su4sik sus3p sus3s su2sy 2s1u4t1 sut6ra. sut8reg 7suv 8s5u6vi sv2 6sv. sva5a svai5 5svak. 3svake 6svaks sva4la sva4les 6svalet 5s6vali 7s6vam s4var. s4varet s3varm 3s4vart 6s1vas 6s1veg sve6g7i s5veie 3s4veis s5veka 6s5veks 5s4vens sverd5s4 sve4re sve8res 3s4verg 5s4verj s5verk sver4ki s4verm 6s7verv 7s4vev s4vie svi6e3l 8svift 4svig svi5ke. 6svikg 4sviks. 3svikt 4s5vikti 4svil s6vindel svi4nes sving5s4 8s7vink ll6svint 4svir 6s7virk2 2svis svi4sa. svi4se svi5sen svi5ser s8viv svi9ve 4svol 5s2vor svor7t s3vr 3svul 5s6vulm s3vy4 svye7ne 1s2vø 4svæs 2s7vå 1sy sy4c sy4de. sy5den 5sye sy2er sy8ka sy4ker sy5kere 2syko sy6kog 7s4ym sy7me s2yn 4s5yndl synk4 sy6n5o6 syn6sk syn3te sy4ra sy5rar s6yre sy4re. 2s1yrk syr4ka syr4ke. 3sy1s sy4se sy2sl sy6s7t sys4tr 2sy2t sy5ten sy5t6h 9sytt sy2vå s4z sz3c4z 6szt. 1sæ sæ2l 8s3æ4re 8s3æ4ren sæ4r1i særle9 sær5s8 7s6æ5te4 4sætt 1sø 4sø. sø2d s1øde 4søf søg4 4søj 9søk. 3s6øke 5søkj 5søkk søk7kj 3s6økna 2søko søk4sk søk6s3e6 5s6øksm søk4ta 3s4øl sø4la. sø4le. sø5let 3s2øm sø6må 3sønn s1øns s4øp sø4ras sø4re. sø4r5end søren6de. sø8ret sør9ett 7sørl sør3s sør5ø 3s2øs 4søs. sø8sa 7søt sø7tast sø7tel sø5tes 2søv s1øve 3søvn 2s5øy. 4s3øya søy8de. 6s5øyd 8søye 3søyl 6s5øy4n søy2r 2s7øys 5såg s3å2ke 5s4ål så4le. 6s1ån sån4da sån6de. så2p 9såpa så5pet 6s1åpn såp9u så2r så6ra sår9ast. så4re. sår3sk sår7ø så2s s7åsa s4åsb s5åse sås5k sås5t 9såv såva7 ta1a 4tabo tab2r tab2s ta4bu. 4tabø ta1c 4tad ta2da ta8d3ei ta6d3e4t tad5spa tad7s6v ta6du t8ae 6taei 4taek 4tael 1taen 4taend 4taenh ta6es 2ta5fe taf7f6 5tafis 4tafl 1tage 4tagj 8tah ta7is 1tak. ta4ka. 4takau ta7ken ta5ker tak7kel tak5k4l ta8k9la 2takr tak4sal tak6se. tak4si 4t3aksj 5takst tak4tal 4taktig tak4to t5aktø ta1ku tak3v 1tal. ta9lam ta3lan tal5ang ta7las 3tale ta4lei tal5eie ta4lek ta5ler. tale7s6 1talg tal6ge. 7talj talj5es tal4led tal4leg 8t7allerg tall7es tal8lign tall6s7a tal4ly tal3op 6talter t5altern ta6l9u ta6lå 2tamb tamba6ne. t3ambi t4ame 4tamet tam4i 2ta3m4o tam5v t6an. ta2na tan5ab 4t3anal ta3nar ta5nas ta5nat t5andak 5t6ande. t7andel. t5andele tand5r tandø4 tandør5e 1tane ta4nel ta5nem 4tanett t3anfa tanfø6 6tangf 6t3angr 1tank 2tanl t3anle 2t1anm 3tannl t5anno tanns4 tan6sk tans5ka t5an5sl 4t5anstr 4tansv 8tantil tan4tra 6t7antre t3anve 2ta3o4 5tap. ta4pa. 1tape ta4pe. 3tapi 4tapl 4tappa 5tappi 1t4ar. t6ara ta4r3ak 4taram ta6rare 2tarb 3tarbo 5tarbø 4t9arena 6t7ark. tar8ka. 4t5arke 4t3arki 4tarra tar9si tar7sp tars6v 4tart tart7est t5artik tar7tit tar4t3r ta6r5å8k 4tasa ta3se 6t9asf t3a4sia tasi3e ta4sif ta4sil ta4si5s4 tas4p tas5s4 tas8tas 6ta7sto ta7str 4tasu ta1ta ta7tes tate8se. tat5e4v tati1 tat3op tat2s1 tat3te t3attr 1tau 9tau. 7taue 4t5aug 2t1a4uk 4taun tau4ne. tau4sk 2taut 2tav 6tavin 3tavl 4tavli ta9xy 6t1b2 tba3d tba2n t6be. tbe6te. tbe6t7r tbe6t8ra tbo6da tbu8da tby3k tby4s tby7te 2tc t1ce tcen4 tch5e t5co 2t3d tdy5pe 1te 4tead 4te3ag 2teak 2te9a8l tea6m 2tea2n 2teap 2tear te5arb tea4s 3teatr 4teatt 2teau 2teav 4teb t5ebb tebu8da 4tecel te1co 2ted 6t5eddi 3tede. 4tedeb te7def 4tedek 4tedel 4tedem te5den 4tedi 5tedil 4tedo tedo6en. tedo4er tedo8et. te4dor ted4sk ted4sl 6tedu 4tedy tedyr9k 4tedø te3e4 2tef 8tefa 4tefi 4tefl 4tefo tefo8r t3efte 3tefø 2tega 5tegat 4t3egd te7gea te9gee 4tegg teg8ga. 2tegh te4gim 2tegj 2tegl te3gla te9g8li 8tegs. 6tegspl 6tegsv 2tegu tegvi8 2tegå 5tegås 4teh 5tei. 2tei4d t3eie t3eiga tei6ga. t7ei6ge. 6teigr 3teikn tei5le te1im 6teinf te4inne te5inte te5i4s 6teiso 2tej te7ken te5ker 4tekil 2tekj 5tek1k 2tekl te5k4la tek6lede. tek4li 4teknu 2teko 2tekr te7kra te6k5ru 9teks. 4t3eksa t3ekse 4teksp t4ek8st tek8t9r tekt4s tek6ty 2teku te2k3v 4teky 2tekø 4tekå 2te3la tel6ak 5te4l5ar 3telav 8te4le. 4teled 4telei 4telek 4teleme te4lene 6teler te4les te5lesk 4te4lev te6leva 4telid 4telik 4telil 4telin te4lir 4telis 4telit 4teliv tel5lef tel4lei tel4lev tel8lign tel4lo 2telo tel3se telses5 t3elsk tel7s6v 5teltet 2te1lu 7telut 2tely 6telæ 2telø telø8pa. 2telå 2tem 3temae 6teman te4mans t5emba 6temenn 5temik tem9ma 6temn tem5ne. tem5ord tem5pe tempe8l7 3tempo tem3s 4temø 3ten. te5nab te4n5al ten8am te4nan te4nat ten5at. 6t7enc 6t5en6den 4tendr 4tened te5neg 6tenem 6tenerg 5tenes 4tenet 2teng 7tengon t5e4nig 7tenik 5tenis 4teniv ten9no te4nom te5nor 6tenorm 4tenot te6nov 6tenó ten3sa ten5sko ten6slu ten3so tens5v ten4t5in tentle8ge. 4tenum 4teny 4tenæ 2tenø ten5øks 2teom 5teon 4teop te6ora te6ori 4teord 2teov 2tep te3pa 4tepak tepa9ra 4tepas 4te5pe 7tepee 9tepé tep6pere t5e6ple 4tepr 4terac te7rakk 6teramm ter7apa 4terapp te4rare 6terasa 4terase 7terast terba6ne. t6er5d 4tered 4teref 4tereg 4tereis te4rel 8terem. 6teremm te4r5eng teren6ga 6terenn 4terep te4rerk ter5esti 4terett 6terevo 3ter5g 3terh te4rig 4terik 4terisi te4riv ter5j 4terk. 4terke 4terkh 7terkr 6terks4 4terkt terla6ga terle7ge terle6ve. ter8ma. ter3no tern5s te5ro. tero6e te3rof 4teroll 4terom 5teromr 4te3ros 4te3rot tero6v ter5r 5ters. 5tersjøo ters4kl ter7s6ko ters4l ters4h ter3s4m ters6ne ter5sv tersø6ke. 3ter3t ter9to ter9ul 8terum ter7v tervi6se 2tery ter5ør 4terøt te4r3øv 4teråd te4r3ås t4es 5tes. 2tesa 5tesar te7sen 2te1sh 4tesid 4tesik 6te3sin 4tesit 4tesj 6tesjef 4te1sk t9es6ka. 6teski te5sko 2te1s2m 7tesmåe 2te1sn 2te3so 6tesp 5tesr 3tess 5test. 4testaf tes5tas 4testat 5tes7te. 4te5stei te5s6tiv 5testid tes4tik 4te5s4til 4te3sto 4te3str 4testy 4testø 2tesu 4te1sv tes8væ 2tesy 2te3sø te7så te8sår teså9re 3tet. teta6ka teta6le. te4tap te3te 5tete. tete4e 4teteg 4tetei 4tetek 4tetem 2teti 3tetik 3tetis 2tetj 2teto 2t8et2r 3tet2s tet5ti tett3s 2tetu 5tetu. 2tetv 2tety te2t3å 2teu teu8k t1eur 3teus 2tev t6eva te4valu 3tevl tevo6r te3vr 2tey6 2teø 2teå 4téa 2téb 2téf 2téh 2téi 4téle 2tém 2tése 4tést 6t1f tfe6e tfe4l tflå3 t7fo 2t3g2 t4ga. tge4a tgei5 t4gi. tgi5ros tgrei9e t4gå. 2t1h t4hap t4hea3 thei5m t6hesi tho7li tho3re 3thr thu5le thu6s thy5r 1ti 2tiad ti3ag 2ti1ak 4ti3all ti5als 2tia2m 2ti1ap ti3asp 4tiau 2tiav 2tib 2tick 3tid ti2da 4tidan tid7d 6t3idee 4ti5dem 4t7idé 4tidis 4tido 4tidr 2tidu tidvi4 6tidy 4tidø ti1e2 2tief 2tiei 2tiem 4tienh tie5ra 4tierf 4tierk ti4ert ties3 ti3esk ti3et 4tieta 4tiett 2tifa tifa8ne. 2tife 4tifl 2tifo 2ti5f6r t8ifrå 4tift tif5te 2tifu 4tifø ti9ge. 4tigj 2tign 3tigno ti6gun 2tih 2tii 2tij ti3ka. 6tikarr ti5ke 4tiket 4ti5ki 6tikj tik4kj 2ti3ko 2ti1k2r ti3ku 6tikular 6tikult 6tiky 4tikø t4il tila6ga til1d4 3tilde 2tile ti3lei 3tilfe 3tilg til3id 4tilke 3tilkn 4tille. 4tillh 4tillin tillø7 4tilm 7tilnæ 3tilst til3t4 4tilte 2tilu 2tilø ti7mab 5timat ti4me. 5timedie ti4mera 5timeri 2timl 4timo7 4tim6o8r 2t1imp tim7s 2timu 2timy 2timø ti6nab tin5art 4tinaz 2tind t3indu ti4nem 4t1inf tin5ge4s 6ti4nit 6t5inj 2tink 7tinks 4t1inn 6t5inne ti5no tinsk5 4tinsp 4t3inst 4t1int 2tinv 4tinva 4tiny 9tiol 6ti7om tion9s6 4tiop ti1or ti1ov ti3pa ti6pla 4tipr 3tips 2tir tira4t ti4ref ti1ro 6tisak 4tisam ti5s6an ti3se 4tis4ei 4tisek 4tisel 4tisem 4tisep tise8ra. 4tisers 6tisig 4tisio 4tisje 4tisju tis4ka 4tiskan 4tiskil tis5kok 6tisku tis5l 4tisn 4tiso 6tisprå 4tistat tis4ti. tis4til ti5stre 4tisty 4tistø ti8støy 2tisy 2tit ti7ta ti8tar ti3te ti1tj 3titl tit4r tit3s 3titt 4tiub 2tiut ti4v5and tiva9re ti4v5art tiv6is 2tivo tiv5si tiv5sk 4tiy ti5ær. ti7ære ti9ært. ti1ø8 2tiå 6t3jag 2t1jak t5jarn 2t1je. 2t1jeg 2tjel 1tjen tjen6st 6tjep 2tjer t5jev 2t1ji 6t5jing 2tjo t5jord 2tjub tju4e 2tjun 6tjur 3t8juv tjæ4res 2tjø 4tjå 4t3k2 t6kag tka8ra. tkly9 tku6le. tkå8pa 6t3l6 tla4ga tla8te. tle6da. t4ledr t6lef tlei5er. tle8se. tle5ti tligh6 tlight5 tli6nes tli4te. tlu4e t6l7ut tlø4pa. tl7øy. tlå3ne tlå7r 2t1m tma3d tma8ge. t6maku t2mam t2meg4 tme3in t2mek tmini6 tmin5s6 t2mos tmå4la. 8t1n t3na t6nee t4neli t7nelig tne4rek tne4r5ø tne8se. t4nesk t4nest t5ni t8no. tn5sk tnæ6re 7toan 7toar. toa6t 6toau 2toav tobe6r t3o2bl 6tobs 4toc to5da to9de. to4dera 3todo 1toe 2toek 6toel toe4t 2tof 6toff. t3ofre to5fri to2g3at to7gen 4togg to6gl 6tograv to4gre tog3st to2gu 2toh toil3 2to1in 4toj t6ok 1to3ke to3ki 2tokj 2tokk tokk5end to3kl 5toksi 5tokt 2toku to4l5arm 5tolat to5lel tolele7 5tolera toli8ne. 2tolj 1to4l3k 7tolki tol4lab tol4lag tol6leg tol6lett 3tolo tol5tr 4tolå to9ma. 2tomb to5mene. 2tomf 4tomg to3mi to5mise to7mist 4tomk tomlø8pa t8omm 2tomr 4tom1s 5toms. 1ton to5na to4ned to4nel tong5s4 to8nib 2tono ton3sa ton5s4l ton5sp 2tonu to4ny. 2to3o 4to1pl 4toppd 6toppg 6t5opple 4t5opplæ top4po 4toppt 4topr to1ra to4rak tor5alt tor5ang to4r5ant to4r3as 4tord tor8da. to1re 6toreg to4rek tor7eks to7rem 6torent 5torer tore4t tor5ete 4torga tor5int tor7k8u tor7me torm5s tor5na tors4i tor5t8 torvei5 to4rø 4torå to1s 4tosa 4to3se to2sh 6tosj tos5ke to8sku 4tos2p 2tosy 4tota to5te to8ti. to5to. to4tor 6toty 2tov to1va to7veg to5verd tove7re t5overs 5tow 4toø 6t3p2 t7pa tpi7ne tpi7pi tpo4et t4påk tr4 8tr. 6t9rabat 3trafi tra7in tra8ka. trak7to tra7mu t5rane 3t6rans tran7ske 5trap tra3pe tra5po tra5r4 5trase tra5se. tra5ses 5trasé t2rat t5rate. 3trav tre4al. tre1c 4t3reds t3refu 6t1reg t5regi 4trei tre5int 6trek. 4treke 4trekl 4t3rekor 4trela 3t6re7na tre5ne t6reng 3t6reni 4t3renn tren6sk t7repe t5repres t2rer t4rero t4re3ru 2tres 6tresi tre5sko tres4l 3tresn t5resu t1ret t4reta t6reto t5retted 5t6rettel 4trev tre9va t6rib 4t1ric 4t4rid tri7ei t5rig. t4rikk t8rina t4ri5ne 4t5ring 3trinn 7t6rio 6t5risk t4rist tri5to t4riu t2riv tri7vi 5trix 3t4ro. 5troa tro9ar 3troe t4rof tro5g 3t2roi tro3in t4rok t2rol 4t3rom. t6rond 5t4rong tro5per t2ros 5t6rosk tros3l tro1v t8ru. t8rua 7trua. 5trued 5truet 3trug tru1i 5trukn t3rull 2t1run9 t3rund 4trupe tru5sa. 7t6rusk 2trut t5ruta t3rute t3ruti tru5v try3dr 3t2ryg tryg5ge 7trykk. 5trykke try7pe. t6ræ trø8a t5rød. t5rødt 4trøk 4trøm 2trør 5trøt 5trøya 5trøye5 trøy9et 4trøyr 6trøys 5trøyt trå8da. 4trådet trå4dr t6råkl t3råst 4ts 6ts. t5sa. t5sab tsa2g tsak6se. ts1an ts4ang tsau6r t1sc t6scha t6sch5k t5se. tse6d tse4er ts5ege tsei4d ts3eig ts2em t3sen. ts4ende t5sendi tsen8ka tsen6ke. t5sens t4sentu t5ser. t3seri t4s3erk tser3o t5s6ers. ts4es t4sesk ts5e6st ts3eta tse4te. ts1e4v ts3f ts4fæ t7s8hop ts7ill ts3inn t4s3ins t5sir ts5jeg tsje5t6sj ts5jor 5t6sjov. t7sjuk t4sjur t5skad t4skan ts6kis t4s5kjed ts6kjø t5skol t6skoll t7skot ts5kren tsk5ru ts5krø ts1k6v ts9kvi ts6ky. t6s7kyn ts1l t7s6lo. t3s4lot ts2lu ts5lø t5smit tsmå6la. ts1o t4s5o4d t5sok t5somst t5spek t3spel ts2pi t2s3pike t3s4por ts5s4 t1st4 t2s3tabb t5stad ts3tak t4s3tal t5stand t5stang t5star t5stat ts6tau t3sted t4steg t4stek ts6tig ts4tik t4stilk t4stin t4stit t2s1tj t8stolk ts5ton ts5tors ts5tree t4s5tren t4s5tro ts3try ts6trål t5stu ts3tv t4sua tsu7ge tsu4l ts3uli ts3u4r ts5usi ts1v t3svik ts1w t5syk ts5yt tsø8ka ts5økni ts5øv tsøy8er ts1å tsåt8 8tt t1ta t3ta. t2tab ttaba6ne. tt9abo tt5adr t2taf tta9fr tt3aft tta4la. t6t3ald tta7lel ttall4 t4t3ana t5t6ane t4t3ang t4tans t4tanv tt5appe t7t8ar. ttare6 t4tarr tt5ar5t tt6arta t4tase t4tasj t4tav tt3avi tt5avk tt5avr t3te. t2tea t3ted t4teda t5tede. t8tedr t2tee t4tef tt3eff t2teg t2tei tt7eid tte3in t2tek tte7kv tt7elev tteli6te. t4tem tte4ma. tt5emn ttem8na ttem6ne. t3ten t5ten. t4tena t5tene. t4teni tten5s t9tens. t4t5ense t2teo t5ter. t4terei tter5un tte4r5ø t4terå t4tese t4tesi ttes6ke. t4tesl t5tet. t4teta t4tete t1té t8th tt5he tti5a t4tidel tti3e t2tif t5tig tti4g5j tt3ind t5tine t7tiné t5ting t4tini t4t3ins t4tisj t6tisti t7tite ttle6de. ttlin5 t1to. t5tofr tt5om. t7tomr t2ton tton6na tt3opp t5tora tt3ord tto5re tt5o4ri tt3orm tto5u ttpar4 tt6pås tt9raka tt5rake tt3ram tt3rap tt7rat t4t3rep tt3res tt3rev tt5rom t5trop t5try t2t1rø t6ts tt7saf tts3ar tts5kan tts5kj ttsla6ga tt3sok tt5still tts5top tts5tra tts5tøy tt3ugl t1tum tt1un ttun6ge. tt1ut tt8ute ttva8la tt5ve tt6vun t5tw t5ty. tty8e tt1y6t ttæ6 tt3ø4l t1tør tt3øv tt7øy6r tt1å4 5tual 4tu4av tuba3 tu4be. tu6bå tu6dem 5tuel tu4er. tug8la tu1in tu2k t5uka t1uke 7tukt 3tula 1tule tul5les tum5m tum4s 3tun. 4tund 3tune tun5gesv 6tungd tung9s 6t5uni tu4nio 5t4un5n 9tuns 3t2ur tur7ant tu4ras 4tu4rei tu4rek turi4 tu4rin tur1o tur3p tur5s4 tur3uk tu5rus tur1ø 1tus. tu1sa 3tusb 3tusf tu4sin tu4sm tus5o tus7s6t tust6r tus5u 2tutg t5utj t5utk t1utr tut8t7rå tut6tenk tut5tor tutt5ov tu8va. 2t1v tv4a tva8k tva6ne. 3tvang t4v5anl 8t9var tve5del 3tveit 4t7ver tvert5 t2vet 3tvet. 7tvets t5vik tvi8ka. t8viklas 5t4vil. tvi5la 5t4vile t4vi5l4i t6ving tvi4sa. tvi4se. 6t7vo 3tvung 6tw twa2 1tyd tyg9gel tyg5ges 6tyh tykk5s6 ty4med 1tyn ty4ne. 6t5yo 1typ 5t6ype ty4pere ty4pet ty4rak 5tyrann 6tyreg ty4rep tyre5st ty4ri. tyri9e ty4ri5s ty2s 3tysk tys3t 2ty2t ty8ta t3ytel ty5ten ty4ve. 2tz t5za 5t6zel 6t6z5l 1tæ tæ5l tær6ene tæ4renh tær4er tær4et tær5s4 tøf3l 2t1øk tø9ket tøk8ta 4tøl t7ø4let 5t4øm5 tøn5nes 4tøp tøp5se t2ør tø4r3as tør3in tørk4 7tørk. 9tørka 5tørke tør5ne tørs7ta. tørs7ter tørs5tin tør3t tøs4 tø8sa 4tøt tøt5a tø5ta. tø3te tøtt6 2tøv tøv6d tø7vele t4øy tøy5a t9øyem tøy5r tøy5te tå4en. tå2k tå5ket. tå5ki tåk6r tå2l3a tå9la. tå4leg tå7lel tål5s4 tån8da tån6de. tå3ne 4tåp tå6pe. t1åpn tå6re. tå4rep t3året 4t5åri 3t8årn 2t1års1 tå3s tå2t t3åtak tå7ten ua7g u1ak uak3s u1al. ua7la ual5l ual3o ual3u u3a4ne. u5anl u3ans u1ar. uar5d u4arr u5ars. uash3 ua3t u5au8 u1av 1uavh u4ba. ub7alt ub7ant ub5ark ub4bo ub2br ub4bu ubel5s ub5h ubi6s ubis7t ub1j ub7lande. uble3s4 u1b4r ub5rin 2ubs ubu8e u4bå uch5en uch5er u1ci uck1 ucu5 2ud u3da. u7das. ud4dag ud2dr udd4s5e ud2då udea9 ude8are u2deb udeie5 udei5er u2dek ude3lu u2dep u6dero u2des u3d2et u6d5ett u5devo udia2 udi3an udi4en udio5 ud7ir ud7ji ud5leg udle6ge. u7dob u6doe u2dot udover7 ud1r udse4 ud3t ud5v 3u4dy udy9ra ud5å4s ue5a8 u5ei u1el uem8na u1e2n uend5r u7ene u8e7net uensar4 ue7o u1er u5e6rast ue4re. ue5ren ue4rer ue4res ue5ri uerle7 u2erm ue4se ue2si ue4skj ues6n u1et uet8r ueul8 u4fe. u6feb ufe6e uf1f4 uf4f5erm ufi9l ufi5ne u1fl u6foa ufor3s u1fr uft3a uf4tan uft5s4la uft3sp ufø6 u5gag u5gar u6g5av ugby7 u2gem u5gen u3ger u4gerø u2ge5s4 u9get. u8geta u2gev ugg3s4 u5gis u4gl ug1la u5g4lad ug9lar. ug4le. ug9ler. ugle7s ug5ly ug7na ug7ne. ugo1 u4go. ug4re ugrei9er u4grø ug5s4i ugs4k ug7so ug3s4pr ug5s4va7 uguay7ans ug5øyn u1h 3uhel ui8a u4i6c ui2d uid5el uid5en. uid5ens uid5er uid5in ui3e6 u4il uil5l u1im ui3ne u1ing uinnsmi8 uinnsmig9 u1ism uista7 uit3en uit5er u1itt u1j u4jas u8je. u7jå 4uk. u1k2a u7kar ukare6 ukar5t4 u5kat u2ke. u4ked uke5l4 4ukem uker5an uke4rek uker5i ukho7 u7ki u1kj 4ukk ukk6a uk7kestal uk8k9l ukk7n ukks6 u5klem uk8lu ukl7ut u5k4no u1ko u4k5og u2kra uk3rus 2uks uk2sa uk4sek uk4sel ukse7te uk2si uk2s1k uk7ski uk2so uks5t uk4s3un uk2sø ukt5e4sk ukteslø9se uk4t3id uk6tj uk4t5ori uk2t7r ukts6l ukt3sp ukt9s6v ukt4sti uktu8e9ra uktue5re u1ku uku6e uku5le uk5vik ukys8 uk3ø4 uk5å4 6ul. u1la u4la. ula7d u6l1af u8l7aks ul5art ul4det u4lef u2lek u2lel ulele8ge. ule5ma u3len. u6leni u3lens u5ler. u5lere. ule3ri u2l3erl u4lero u2les ule3st u5lest. u5leste. u2leu u1lé ul5f6l ul4fo ul4fr u3l4i ulie8 uli9en uli5ke. 3ulikh uli9na. uli5ne u7linj ul1j ul5ka ul5k6e ul4k3v ul4lag ul4lam ull7arm ul4leg ull5egg ulleg8ga ul6leng ul9lere ul4le3s4 ul8li. ul8lig ulling7s ull5i4v ul4l3o6s ul8lot ullo3v ull5sle ull3s6m ulls4t ull3sv ul2lu4 ul6ly ul2lø ulm4u u1lo ulo6i ul5op ulo7va ul4sk uls4po ul8sn ulss8 ul2st ul8s3t6r 4ult ul4teg ul4tek ul4tes ul4til ul4tim ul4to ul7tor ul4t3re ult3ri u7lua u3lue 1uluk u5lup u5lus ul9ut. u7luta u9lute ul7va. ul5van ul4var ul4ve. ul4veg ul4vei ul4ves ulv3t ul4v3u 1uly ulyk5kes ulæ6ra ulæ5re ulø3se uløy6e ul5å6l 2uma uma8ge. u6mare um5au umau7ken um3av 2umb um5be 4umc 4umd 2ume u4mend u4m3enh umen4t5i ume5ra 2umfo 2umh 2umi u6midd umie6n umi9na u4mint um9ja 2umk 4uml 4umm um3me um4mil um4mis um3n umna8 4umo umo6g um5ok 2ump um7pan um4ple um4p7ut 4umr ums1 um7se. um4sku umsku8le. um2sn um4sor ums3t ums4tø 6um7t umta8l um5ut 4umve umør3s um7øy umå7 2un. una6da un5alg u4n3ap u9nar u7nas u3nat 2und. 6unda 6unde. un4dek un4del 6unden 5undersk 5underv 4undet un6d7im 4unds und5s4i u2ned u4nee u9nei. u2nel unele6ge. u4n5eng u4neno u2ne1s2 u3nes. u2nev unev5n 1ungd ungele8ge. un4gem un2g1j un4g5l un4go un2g1r un9g8ru ung3s4i un6i u4ni. u2nid 1u2nif u4nim u3nin 3union uni4st 4unk un4k5l un7ko un4kr un7nak unn5erf un4n5ers un4n5erv un5nes un4niv un2no unn5ste unnta8la un4n3y u4no. u2n3os uno7t 4uns un6sj5i un3skr un5s6kv un5sn un5s4p un3stek unst5e6l un7s6tenk unst3o un1s2v un4tal un4tam un4tas un3t2r unt5rep un4tri untun8ge. unu6 un5ut u3ny u3nø un5øy6d u7nøyg u3nå uo9a u1ob u1om uom7s u1op uor8da uo1re uo5ro u1ov up3av u3pea4 u5per uper3a upe6ren u4peta 6upf up6h u3pi u8pi. up3ins up3li up6nev upo9pe up1p2 up4ped up4pla up6pre upp5s 4upr u3pra 6ups up6sen up2s3k ups4ke ups5pr 6upt 6upu u1på upåvi6 u1ra u2rad u2raf ur3aft u2r1ak ura6ly u4ram u5rane u3rans uran6t5re u5rar. u6r7arl ur3arv u9ras. ur5asp ur3att ur7au urau9ken ur1av ur4bod ur4c urd4 ur3di ur4d5o u1re ure8al ureer6e ur5egg uregi6 uregist5 3urein ure4l ur3ele u4reli u7r8ell u7r8elt u4r3els u4r5eng u7reom ure7o6s u4resu u4reta u4rete ur4e5v 2urf ur4feb ur6fed ur3ge u1ri u4ri. uri6a7ne uri9en. uri4e5ne uri9er. u3rik u3rim uri5ne ur3inn ur3ins ur3int uri6sp ur4ke5s ur7k6j ur6k7ja ur8kla ur4kle ur6k5n urk5s urla8ga urle6ge. urle8se. urma7g ur3nea urn1s2 urnæ6re u4ro. u6roc 5uroe urom5s u2rop uro7pi ur3opp ur1or uro3s4 uro4sta uro8ta ur4pel ur7pi ur6p9ut ur7re ursa8ka ur4sal ur4s3el ur4sin ur4skr ur4spe ur5ste urs5til ur4stj ur2sv urs3va ur2s1ø ur3teo ur5ti ur4to ur6t5ri urts4t urue7re u6rug8 ur7ugl uruk6 uru4ke uru7kn ur6ul urumo7 urun4g u7runk uru7v ur4vel urv3s u6rys urø2 ur1ød ur1øy 4usa u9sane us3ang u9sar. u8s7arb u7saren u6s7ark us7au us1c 2use u5seal use4al. us7edvanle u2s1ei u2sek u4sele u2sem u6s5endi us7erk u4s5erm u6sesi uset8je us3eva 4usg u2sh u2s3h4a u2s3h4o us4id us3ind us5inn us7jag u4sji us5kaf u4s3kan uska8ra us7kat us5ken u6s5kis usk4l us6k5le us5klo us1ko u1skr us7kru usk7u6t u8s7kå us4ky us1l usle6ge. us5lin u4slu us7mø u4sn us1ok uso5l uso6l5d us1or u3sori usove7r6e us1p u1s2pin us5sar us6sat us4sjå us4skj uss5kor us4skur uss1l us7smi uss7mø us4s5ti us4str us2sv u6stande u4stat us3tav u2ste us3ted u5stei us7ten ust9ette us5ti u5s6tig us1tj ust5of uston8 ust7onn us5tor ust5o6v us8tra. us8tran us8trar u6stre ust5ren us4tri us3tro ust5rød u6st5rå ust7ut u4stå us3ung u2sur us1v u5svale u7s6valt usva8n usvi8ka. 6usæ usæ9le usø6m us1øy u1tae u2tag u7tagg u9tal. ut3alb ut5ald u3tall u5tande uta7no ut6anv ut3arm ut3art uta1s4 u5tas. u6t5a6sa u6t5a6se u2ta1u4 1utb ut4ba. utbe8d 4utbi ut6by. utch5 1utd 4utdat utda7ta. u2te. u2tea u4tee u4tei u2tek ut3eks u5tekst ute6ma. u5temm u9temt ut2en u6tena u3tenk u4tenu u2teo 2uter u6terø u2te1s6 u4teta u3tett ut6eu uteva9 1utf utfa7s utfø5re 1utg 8utgåe 6u3ti u4t5if utikk6u utiku9 u4tili u6tiven ut1j u5tjen ut6ju 3utlei utlø5se utlå7na utmå5le u8tni 1utny 2uto ut7oms uto5s uto4v 3utpr ut4på ut1r u5t4radi ut3re u5treng u3triv u3trol u3tros 5utru u5t6rul ut4rø ut9rød u7t8råk 1ut1s4 4uts. 4utsei utse8t9ja 2utsj ut3sk 5utst 7uttak. 5uttake ut4terk utt5eva ut4tid ut4til ut5torea ut1tr ut4tra 3uttry utt1s2 ut8tår u1tu utu5e u6t5un utun8ge. u2t5ut 1utv u3t4vil utvi5se 2u3ty 3u4t6yd u8ty. 8utz ut1ø u5tør ut4ø8s utøs7t 1utø4v ut5øya ut7åk u3tål ut1ån ut7år u1u u7uma u5ume u7ut u1v uve5di uve3in uve6ris uve3s u7ves. uvet5ø u6vev u5vi uvi6k uv5ra uv9sa u5vu uvø9re u1w 4ux1 ux4a4 uy6a u7yn u1æ uærle9ge u1ø6 uøv5 u9åra u7åre va3am va8an 4vab 6vadj vad1r vaf3 vaf6r vai5r vai5s va6ka. va7kan va5ker 6vakh va8ki. 4vako vak3r 7v6aksi 4v3aksj vak5s6t 1vakt vakt5r va1ku vak3v va3lan va4led val9eks 4valel val4g3r vali9e8 val3la val6mes va6l1o va1lu va4lun 4valv va4løy val7å vam8pu 4v3anal vand5s v4ane vane5s va4net 2vang van4gr vang4s7 va8ni. 1v4ann van4nan van4niv vann6sti va4nom v4ans van5sem 5vansk van5s6ki van3sm van3ti van9tr va4ny 2vap va5po va4ra. va6rak va4ral va4ram va4rap va4re. va4reg va6rem va4res var8ka var5ma var4mee var4sa var4sk var4s5ti var4sv varta9la var6tem var4t5i4s 4vasa va4sa. va9set 6vasid va6sie va4sif va4sik va4sil va6sis va2sk vass5a vas4sau vas4sel vas6s7ø 4vasta vat5a va3ta. va6t7e8l va2terf vatle6ge. 5vatn va1to va6tr vat7ra vat1s 4vau 2v1av va4z 2v1b2 vba4ne. vber5g vbo6da 6v1d v7dev vding5s4 v7doi v7don vd6r vdu6en. vdu6er v7dø 1ve. 2ve1a2 ve6ag ve6ar. 2veb 2vec ve2d1 ve9dob vedom5 veds2 ved5s4k 3ve8d5t vedø4 vedå6 2vee ve4er 2vef ve6g5av ve5ge 3vegg veggs4 2vegj 4vegl ve3gle ve5g6lød veg5n 2vego 6vegre veg5rett 4vegru ve4gut ve4g5å 2veh 1vei1e vei8eb vei3en 4veill 6veit 2vej 4veka 5ve4ka. ve4ke. ve4ked 4vekee 2veki 4vekj 2vekl vek8la vek8le ve4kli 2veko 2vekr 3veks vek4st veks4t5r 1vekt vek4t5an vek5to vek4t5r 2vekå 5vel. ve4l5as 5velat. 5velatp 6veld. vel4del 8velds 4veled 6velei 7velet 4velis 4velit 6veliv 2velo 5veloc vels2 vel3se velses5 vel3sm vel5sp vel5st 4velug vel5un vel5v 2vely 2velæ 2velø velø8pa 2vem ve5ma 1ven ve8na. 4venem ve5net ve6nete 4venev ve4nin ven6n5i vennle7 ve2no ven6sti ven6str vent6a ven5t6r vent4s 4venty 2venu ve4nus ve5ny. 4venya ve4nym 2ve3o4 2vep 1v8er. ver5ak ver3al 8verau ver6des ver6din ver6dir verd7v ve3re. 4vered 4vereg 5vereig 4verek ve4rel ve6r7eng 4verenn 4verep ve5rer ve5res. 4verett 4veretu verfø5re ve9ri. veri3a ve4rial ve7rie 4verik ver3il 5verkn ver5m6 ver6nal vern6s5 ve9ro. ve3rom ver8ska. ver5ski ver7spo verta8la. verta6le. ve1ru 5verum. 6very verø6 ver3øs4 4verå v4es 3ves. 2ves4a ve5san 4veset 4vesh 4vesi 4vesj 4veski 2vesl ve9sli ve1s2m 6ve3so 4vesp ve6s3per ve5sted ves6t5end vest5o4v 4vestr 4vestu 4vestø ve3sv vesva7 5vesynds 2vesø ve1så veså5re v4et 1vet. 2veta 8vetaka 4veteg 4vetek ve5te6s7 6vetev 2ve7ti 4vetj 2veto ve4to. veto7e 9vetoke 9vetoks. ve4tor 2vetr 1vets vett5sk 6vetv 4vety vety8e 2veu ve8um 2veva ve6vak ve5van ve9var 2vevi vevi8sa vev4sm vev4sp 2veø 2veå 1vê 2v1f vfall4 vfø7re. 2v1g2 v4ga. vga4le. vga6li vga8ve. v9ge v4gi. vgjer6s7 vgo4 v4gå. 2v1h vhø4re. 1via vi1an vi6bl vice5s 1vid vi5de vide4o7 vi4d5o4 vid3r vid3s4 vi1el vi5end vig4m vi4gu vi5gø vi4kat 5vikb vi5ked 7vikg vik5ke vik5n vi2k3o6 3viks. vik5sa vik5s6l 4vikt 5vikti vi4k5ø4 vi2l1a vi5la. vi4les4 vi4l3in 1vilj vil4l5an vil4led ville6de. vil4lei vill9ep 6v5illu vil5m vil1o vil4sti vilt7o vil6tret vil4tri vi2lø 4vim vim7p vim7u vin6d5au 4vindl 5vindu vine5st v6ing 4vingn vin5gom. ving3r vin8g9u vin3na vin4ned 6vinnh 4v5innl 4v5inns 4vinnt vi6n5o6ver v2in2s vin7sja vin4tes vin5tre vi8pa. vi6pe. vip5s 1vir 4viro 7viru vis3ab vis3ak vis5and vi4see vi3sen vi6seng vi2s1k visk6re vis5m vi1so vis3om vi4sp vis9pa viss4p vis5ti vi4tak vi5tese 5vi6t5j vi4t3o vi4tr vit7ra vit5re vit5skr vit6te6s7 vi4t5un vitun6ge. vi4t5øy4 vi4va. vi6ves vivi3 v1ja v1je vje4t5a vje5t6e vje4t5r vjet3t vje4tu v1ji 4v5jo vju3t 6v3k6 vk4le vk4ler vku4le. 6v1l2 v6lab vla6ga v9led v9leg vlei9e vl6el vle4se. v5lesn vle5str v6lesv vli7v vls9 vlu9sa 2v1m vma8le. vmo8de. vmord4 vmå8la 2v1n v3nad vna8ke. vn5al v9nar vn5dy vne7b v2ned vne7de v4nele v4neli v4nelo v2nem vne5r6e v4nero vne1s v4nesta v6neste v2nev vnor9s8kas vn4s5pa vn1s4t vn5t4 vnæ4re. vn5ør vo1al vo2ar 6vob 2vof vof8fan vo4gu voi1 1vok 4voko voks3k vok6s5 1vol voli7 vo4litu vol4tes 2vom vo4na vo9nal vo9nar von5de vons6 von5sh 2v1o6p 2vord vor8da. vo1re vo9ren 2v1org 4voro vors7k 1vos 4vosj vos4se vo4teg vo4tel 6votr vo1v vo4ve. vo6vi. 2v1p4 2vr8 3v6rak v7rar v1re vregi3 6vrenge 4vrengi v6rengj v6rengt vrett4s v6ri. 3vrid 7vrie v6rigas vri6ma. vri8me. v3ring vrin5s vri6ve. v1ro v4rob v4rof v4rok v4rop vro8te. v1ru v7ry vrø3ve v1rå vrå8da. 8vs v6sa. v7sali v6se. v4seg vs3egg v3s4el v4s5e4li vse4n v5sen. v4s5eng v5s4ens v2ser v6si. vs1in v1sk vs8ke v6s5kum vs1kv v1sl vs3lan vs6let v6slik vsmå8la v1s2n v6s7na vs3ne vs3ny vs3næ v4s3nø vs5od vsom5 vs5oms4 v7son vs1or vs2pe vsre6de. vs7s6t vs4s5å v1s2t2 vste6ma. vs3til vs1v v6s7va vsø6ke. vsøl5 v2s5øy vsøy4er v8så. vså7re 2v1t vta1 v4ta. vta8ka. vta6led vta9len vta4lev vta6s v5tepp v5t4i vti8na vti8ne. v5t4r vt7s v3t2v vty8e 1vu vu2d1 vud5d vuden5t vuds4 8vué vu8k 2vul 2vung vun4ge. 6vu6o 2v1ut 2v1v vva8la vve8g9ing. vve6g7inga vven7n6i vvi5ke vvi6k7l vvi8s9an vvi4se. 2vy1 vya4 vy7ens 1væ væ1ra væ9ret væ8ta. v3ø4d 8v7øks vø4l vø7li vøm4met 3vøre vø6re. v3ørke vør8na. vø3se. v5øv 4v1øy vøy6e vøy7ene. vøy9enes 1våa 1våe 4våend v4åk vå8ka. vå4ke. vå4kene vå9kene. vå4le. 1vån vå5ne 4vånu vå3ren vå8sa. vå5tes 6våtf våt7å w2a wa6l 5wald wal4k walk5o4 wal4l 2wap war6d7er wash3 1wat wa3z w1b wboy5 we2 weate7 we7b we3g we5re wes2 wes3s wester6 western7 wet5 wett4 w4i2 wi9ar. wich3 3wicz wi3d 5wi6en wi9er. wi5f wi3ni wi5ra wi3ren wi5ta wk3r w1l w1m wn5s wob5 wou6 wout7 w3s4 ws6k wurs6 wy2 w1yo wyor2 wyork3 w1z xan5t x7b x3f xga6 x7h x1ic 5x6id xi5e4 x5k x1l x1p6 x3r x1s2 x7t x6u xy2 ya7b 1yac ya5f ya4h y1ak yak6te. ya2l y7am y1an y6an. y2ana ya4ne. yan7k yan7sl y1ark y7arr yas4 ya5si ya5t y1av y1b yba4ne. yb4bed ybde3 ybo2 ybu6er ybue7re ybu7ern ybyg5 y1c y8ce. y8cé y2co3 y6dab yd5av 4ydd yd6dela yd4dep y6d7enh y4deo y2dep y4dero y2d1is yd6je yd1ji ydo4 yd3op yd5ov y1dr y4d4r5au yd1re yd5rem y8d7ri y4dro y4d4r5oks yd3si yds4v y2du yd1un ydø4 y4døm ydør5 yd1øs 4y1e yed8l ye6dre y2ek y5eks ye4len ye6let yel4s5j yel4sk yels3m yel6s5t y2em ye2n y7e6ne y8ener y2enh ye5ni y2enk y2enl yenle6ge. yens4 y4ense y3e6re ye4rel y3ern yer8sk y4erst yes2 ye5sm ye2t ye9te ye5ty y2ev y1f yfan9 yfjell4 y4fle yf5le. y8ga. yga8ve. yg4dal yg4dek yg4del yg4dep yg2do yg2d1r yg2d1y yg2dø yge5i ygen5s y6geret y2ges y4gev yg6gam ygg7art ygges4 yg5gj ygg5l yg6gr ygg3s2 yg6gu yg6g5å ygi2 y5glo yg7m yg6r y1h yhes5 y1i y9in. yis7t y1j 6yk y1ka ykap3 y6kara y2ke y7kel. y5kelen y3keli y7kels y3ken y3ker y4kerel y4kero y5ket. y9kets y1ki y1kj y4kjar y5kjare ykjeva8ne. yk4kana yk4k5enh yk5kesj ykke6s5ta yk1kj ykk5ni ykk8s5k ykk8s5o ykk8s5s yk8k5vi6 yk4ky yk1la yk6lest y1klo y3klub yk3lus y5klæ y1ko y2koa y6koli y4komo y5kosa y2kot y5koti y1kr yk1s yku6le. yk3var y1la yla8ga yl4dan yl4derk ylde4s yld1r yld5s6k yle6ge. y7les y4lev yligh9 yl5k8 ylke2 ylke4s3 ylkesla8ga yl4lev yll5is. yl3s6 ylst7re yl5tet y8luse 3ylven y1ly ylæ7re y6mei y4mete ym4fe5d6 ym5jara y4mo. ymo5e ym3p2 ym1s ym8sa. ym4se ym8sl ym6ta. ym6te. ymå6la y9n8and yndes8 yn5det y2nel yn7eld yner3g yne5s4 ynesi8 y6nev yn5gel yn4gem yn2gr yn4g5ø ynko3 yn6k5v yn5na yn5ne ynn3s4 ynn4ø y3no y4no. yns1 yns6are yn4sem yn9set yn2si yn2sk yns9ket. yns7ki yn5skj yns7kjele yn8s9kjer. yn4st yn2su yn4s5ver yn4tap yn8teg ynt5ei yn4tek yn6tete yn8t7r yo4gat yo6gi. y1om yon4 yon5nen yo6nu y1o2p y1o2r yor6da yo5re you4 yout5 yp8e y2pe. y4pee y4pena y4penet ype4rel y6peta y1pi y4pi. y7ping yp5inn ypin8na y1p2l y5po yp7p6a yp3pe y1pr yp5s8 yp4tok y3pu y1ra yra8ka y4r3a6l y7rarb y4r5au yr5av yr7da yr5dø y7real y8r7edd yre3in y5reis yrek4 y7rek7k y3rels y5rems y1ren yre9ne y4reo y6rerel y4rero yre5sc y5rest. yre5ste y5reste. yres6ten y1ret y4reta y4rete y4reto y7retø yr7ga y1ri yrin5g6 yri6ene. y4rif yri8ka. yr3inn yris6p yr4kee yrke4s yr5kj yr3m y7roe y3romm yr1op y5rosk yr5r8 yr4san yr7set yr5sk yr6skj yr6skr yr2sp yrs7tan yrs5tar yrs7tene yrs5tens yr3sti yr4sv yr3te yr6tek yr2t3r yr3tra yrty8 y1ru yrul8la. yr5ut5r yr3v y1ry yr3øk yrøy4 y1rå1 yråd2 yrå8da yråde7r yrå6ders y4rådi y2råm y6råst y4råt y4råv 2ys y1sa ys6a7kers y8s7al ys4e yse4bu y4sed y4see yse5ei y2seg y2sek y8s7ekte y2sem y4sera yse7rid yseri7e6 y4sesj y4sesk y4se5s6l y4sest y5seste y6sesu y9set. y4seu ys6i ysi8e y5sjk y7skag ys6kara ys7kare ysk9au ys2k3l ysk5øs ys4mi ys4nø y1so y4s5or ys2pe ys5pis y5s4po ys6sak ys6sam ys4s3ei ys4s3ek ys4s5il ys2sj ys8s7ko ys4sku ys2so ys2sp yss5pe ys4sta yss5tab ys4s5ti ys4su ys2s5v ys2t ys3ta y8star. ys4tat ys3tel ys3ten y4s3ter ysterie7n ys7tesl y2s3ti yst3op yst3r ys8tra ys5t6ry y7s8tu ys6ty y1su ys1ve y8s7øm ys5år y1ta y4t3ana y2tee y4tef y2teg yt5e4ge yte3in y4teka y4teki y4tena y4teno y2teo y4teret yte6ro yters6 yter5ske yte5r6ø y2tes2 y2tet y3t2hi 6y5til y6tj yt9ja yt5jen yt9jer yt4mei yt4mes y3to yt8ra yt4re. yt5rer yt1ri yt4rik y5trå yt4s3en yt3sk yt5sv 4ytt yt5t6a ytt4e ytte8r9end yttes6 yt4test yt8tien. yttsa6me. 2y3tu y1ty yt4ys y7tå8 y1u y6ua y8ue yu8g yu4l y1v y4vak yva8la y2ved yve4ria yve4ris y4vese y6vesy y6vev yvi8sa yvi6se. yv1år yvå5te y1w y5æ y5ø y1å2 za5b 3zae 4zaes za4g5 za5k6h zani4 zania5 5za5v z1b4 zbu4 z1c z1d 1ze zea1 zebu9 zeli5 zen3s 4z3ense 4z3ent z1f 8z1g 5zha z3hi z5hu 5zie 1zifi 5zing z5int 1zis 6zisty 4zi5s4v 2zisy z1k 4z1l z1m 5zo. 5zoe zo1f2 zo4no zo5re 6zos z1p z5r z1s 4z1t zu3e z1un z1v z1za. z2z3el æ5by æ2bø æ5de æ7di æ1f æg6 æ2k æ3ke æ5ki æ8kj æk1ja æk7je. æk9jer. ække7 ækkel6 æk6l æ1la æ4le. æ2le3d æ4lena æ4lev æl5j ælsle9 æ4r1ak æ3rane æ4rans æ4rarb æ6rarbe ær4arte æ4r1at ærbu5e ær1d4 æ1re æ2rea æ4red æ2ref æ2reg æ8r7ei ærei6e æ2rek æ6r7eld ære5ne. ære7nes æ2rep æ5rern æresa4m ære6skr ære4sl ære4sp æ4reta æ4retek æ9rets æ2rev 4ærf ærgen5 ærhø8 æ1ri æri6e7ne æ4r3il ær3ins æri6s ær5is. 4ærk2 ærle6ge. 4ærm ærmå8la ær3n ær5ne4 ær4nå æ2r7o6 ærom5 æroms4 ær5r ær6sel ær4s5il ær1sk ær7s6no ær2sp æ2r1u ærut5 ær3v æ2r1ø4 ærøy7e ær3å4 æ8se. æ2sj æ2s1k æ5ta 4æte æ4te. æt6he æt4r æt4ta æ5va ævar5 æve4s æ5vi 6ø1a2 øa7re øau4 ø1b øbe6lev øbe4li ø2bl ø3b6li øbl9u øb4r ød3ag ø4dak ød3d ød9de. ø2de. ø4dede ø6def ø4dela ø4dem ø4deo ø4deri ø4dero ø5dj ød1r ød4red ød4rek ød4rep ød2sc ød6s5ek øds7ke øds4ko ød6sku6 øds4mu ød8t5om ødt6r ø2du ød3und ø4d5ur ø6d5ø 4ø1e2 ø4ed ø5ene ø5ep ø3e6re øfe8 øf3fe øf6j øf8la. øf8le. øffe8l7a ø5fn øfte5s øg1 øg2a øg5ak øg5al ø7gar ø5gas ø3ger øg5gl øg8gå ø7g4j øglo8ve øgn6s7p ø2g2r øg5re. øg5res. øgs2 øg4ste øg4str øgta5 4øg4u ø1h ø4i øi4e øi5er. øi5e4ne. ø5ing ø5isk ø4it ø1j 6øk. 6ø1ka ø5kav øka8ve. ø6keh ø4kelo ø6kerada ø6kerel ø4ke5ru øke1s ø6kese ø8kesl ø4kest ø4kete ø1ki 4økj ø5kjare ø5kjas ø1kje 2økk øk5kel øk5ket øk4k5l økk5r øk3lag øk3lan 2økna 1øko øk5opp ø1kr ø8krar øk8sa. øk6se. øk4ses øk4si øk2so øks1t6 øks5ti øku4r øk5ur. øk5ure øk7ve ø7ky ø1la ø2lah ø6lam øl3d øled ø4ledi ø6lelu ø4lero ø6leta ø4le5te ø2lev øl4gera ølge5s6v øl1j øl2ke ølke7s øl4lese øl9leti øl6lev ø1lo øl7op ølrå4 øl6sel øl4sere øl4se3s øls6t4 øl5s4v ø5luk øl7ut ølva6 øl4var øl4v3ei øl6vek øl8vel ølv7erk øl4v3in ølv5o ølv7r ø1ly ø4me. ø9met 1ømfi ø5mi ømini6 øm4med øm4mero ømmet6 øm4metr øm3op øm4pel øm7s6p øm1st øm5svi ø2m1u ømå8la øn2ad ø6n5al ø5nas ø2nem ø3nes. ø9nese ønhø8re. øn8k7r 4ønn øn4nal ønni4 øn4n5it ønns5al ønn4s3e ønn4s5i4d ønns5kje ønns5kre ønns5ku ønns3l ønns3t øn2nø ø6nom øn2s øn9sa. øn5sak øn5sam øn5se. øn3ser øn3skj øn8skjer. ønst3r ønst9ra ønt1 øn2ta øn2to øn7u8 ø1o ø4peda ø6pe5i ø4penu ø5pero ø4peru øpes4 ø4pete ø4peti ø1pi øp3li øp5p øp6pl ø1pr øp6s1 øpsa4 øpsla8ga øps8leg øp5ste øp7s8tik øp4s5ø ø1ra ø2ra. ø2r1af ø2r1ak ø2r1a2m ø4rans ø4r3ant øra8sa øra6si ø4r7au ørd4e ø1re ø2rea ør7edd ø6redu ø2ref ø2reg ø6rein ø2rek ørek6l ør3eks ør5ekt ørele8se ø9relet ø4r5eng ø2re5o4 ø2rep ø6reret ø4reru øre1s2 ø5res. ø4rese ø6resi ø7reskrivi ø8reso ø4rest øre6s7v ør6et ø4reta ør1eu ø2rev ør5fe ørge5s ø1ri øri8m ør4jet ør4keri ør4kes ør8k9lag ør6k5n ør4kve ør4kå ørla8ga ørm9ut ørn4e ør4nere ør4nes4 ør4n3u ør4n5ø ør1o ø5r6ok ø1ros ø4r3ost øro4v ør4rek ør4rep ørri4 ør4r5is ør4råt ør4sak ørsa8ka ørsa6me. ør4sc ør6ses ør2si ør5ski ør4skr ørs6lev ør4som ør4spe ør2st ørs9tar ørste5i ørs5tens ørs5tig ør3sto ørs9u ør2sv ørs1å ør9tar ør4tek ør6ti9a ør4tide ør8tien. ør6tif ør3to ørum5 ø6rut ør5v ør1ø2s ørø1v ør1åp ø1sa øsa6me. ø8sarar ø1sc ø2se. ø2sem øse4n5o øseri7 øserie6 øs5jo øs7kar øs1l øs4lag ø4slu øs2me ø1s2p øss8n øs8tas øst9ast øs6teg øs5terse øst9ett østo2 øst5of øst5ov øst1r øst3re østø4 ø2s1ø2 4øt øt3ak ø9tar øta4s øt5asa ø2te. ø2tea ø6tef ø6tege ø2tei øte5k ø2t5eks ø2tel ø5tela. ø3ten ø4teni ø3ter. øte3ru ø2te1s øte7sn ø4teta øt7ri øt1sa øt3s4p øt7s6å øtså9re øt4tero øt6test øtt5av øtt5eks øtt5eta øtt5ete øtt5ra øtt7ri øtt1s2 øttså7re øt4tur øt4ty ø1tu ø5ty ø1u2 øug8la øv5aa øv5ans øve5in ø4vek øve5no øveren8 øve1s øves4t øve3te ø5vik øv6l7ut øv7ne øv6nø øv9o8 øv1r øv5reb øv1s øv9sa ø5vå øy3al øya2n 7øyan. 9øy8ans øy4dek øy4dere øyd8i 5øyeb øy7e4de øy2ee øy4ele øye4n øy4ep øy4erf øy1gl øy3ke. øyks4 øyk5t 2øyl øy4led øy4leg øy5na øy5ni øy3o 6øyp øy3pe. øy4pel øy4ra. øy5rer. øyri6v øy3rø øy1s øy5s4ar øy5si øys2l øy4sm øy4spi 5øysund øy4tei øy4tel øy4tere øyte5s6 øyti7da øy1tr øyt5s øy2t3y6 øy5tø øy4vei 5øyvå ø1ø2 ø5å6 å1a åak6ta åa4n5 åan8ka. åan6ke. å2ar å5aran åau4re å1b4 åba8ne. åber2 åbo9ta 6å1d å7dan å9dar å4ded å4dek å4dem å4deo å4dep å4dere å4deri å6dero å2des å7di åd4ra åd8re åds1 åd2sk åd3s4la åd7slo åd3slå åd1s2n åd3s4pe åd7spu åd5st åd6s7te 4å1e å2ele åem8na åe2n å7ens å3er å3e6re. å7e8ri å1f åfe6 åfø5re 2åg å4ga. åg7ald å4ge. åg7ei å2ges ågna5 åg5ne åg4r åg5rin ågs6k åg5sl åg7sp ågs4t ågu4l åg5ø å4gå. å1h å1i å1j å1ka å3kan å3kar å4karb åk7av å4keh å3ken å4kena å4k3enh å4kere åke5s å4kesl å5kevi å1ki å6kid å1kj åk1k åk5ka åkk6l åk7kr åk7lau åklist7 åk3læ å1ko åk3opp åko4s åk6ra åk5røk åk3rå åk1s2 åks7l åk3t4 åku8 å5k8ul åkva8la. åkøy8rar. å2k3å å1la å5l6amp å6larb å9las ål5au8 ål9av ål3d å2lef ål5eini å2lek å2lem å4l5enh å4leni åle6ris å2le1s2 åle9s6und å4lete å2lev ål5g ålgå6 å6lio ål5j ålla6ga ål3or ål4san ål4sek ål4ser åls7i ål2sp ål4sti ålsy8na ål5ti ålti5d ål1u ålul8la å1ly å2l1øy åløy4e ål5å6k ålå8te. 6åm å6me. åm4li. åm1om åm5øy 8åna å3nar å9nas ånd3r ånd4sa ånd4se ånd4so å4ne. åned4 åneds5 åne5i6 å2nel ånely6 å5nes. å3net å4netr å3ni ån5o å9ny å3o åp2e åpe4n3a åpe4n5i åpen3s å5per å6pero å1pi åp6j å1pla åp4ne. åp7p å1pr åpra5 åp2s1 åp6ta å4på år3ak å9ran å7rara ård5str å2re. å5rei å6rel åre7s å4rest årfi4 å7riv år3k2 år4le. 2årn årn5s år3on år3op årpo8 år2s års5af års3el år3sem års3ko år8sku årsla8ga år3sol års3ta år7ste års3ti år7sto år5stu års1u års1v år5sy år5u4k år3un år5y4 å1rø å5r8å ås2 å1sa ås7au å4se. å4see ås5eid å4sek å4sem åseri7e6 åse3s2 å4sesm å4seso åse5ta ås3h å8si. ås5ka. ås9kene ås8ki å1skj å2s3kjør ås7kop å1skr å5sku å1sl ås5ne ås3ni å5so å1sp ås7pl ås5sa ås5se ås3si åss3k å8s7s6kå 4å1st å7stei åsu4 ås3un ås7ut ås7væ ås5øy åså7 å1ta å4ta. åtaks5 åta2l åta9la åtale3 åta5le. åta5len å4tang å4tark å4t5arm å2te. å2tea å4tee å2t1ei åte6ke. å4teo å9ter å2tes 5åtferd å5ti åti7da 2åtn å1to åt7ov 6åtp åt1re åtri6pa. åtri8pe. åt1ru åt5sk åt1t åt4ted åt4ti ått3o åt4tri åtts4 åt6t5æ åt1u åt4un åtva5ra åtva7re åt5ve å5ty åt1øv å3u åun8ge. å1v åv4a å2ve7d å4veg åve5l å4veni å9ver. å2vev åv7s6 å7vy åvæ4re. å1ø8 åøy4}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cy.hyp0000644000175000017500000000017111761001300024657 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-cy.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-th.pat0000644000175000017500000015041112161703335024662 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-th.rme % used: ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ะ ั า ำ ิ ี ึ ื ุ ู ฺ เ แ โ ใ ไ ๅ ็ ่ ้ ๊ ๋ ์ ํ ๎ \patterns{ .ชี5วั .ทัศนู5 .ที่3 .บท1 .รง4 .ราย3 .ลำ3 .สน5ท .สู3ต .ใบ3 2ก1ก ก4กม กก4ส 2ก1ข ก4ขค กข5คณ ก4ขช กข5ชา ก4ขณ ก5ขณะ ก5ขณา ก4ขบ กข5บุ ก4ขภ กข5ภั ก4ขม ก5ขมั กข5มา กข5มู กข5ลา ก4ขเ กข5เท กข5เว ก4ข์ ก1ค กง5บว ก1จ ก1ช 2กซ ก3ซิ กญ5จน กฎ5หม กฎ5เก กฏ5หม ก5ดิน ก1ต ก4ตด กต5ดิ ก4ตส ก4ตเ ก1ท ก1น ก4นด ก4นธ ก1บ ก1ป กป4ร ก1พ ก1ฟ ก1ม ก4มม กม5ลา ก4มส ก4มเ กย5มุ ก3ย้ กร5กฎ ก5ร5ณั กร5ต๋ 1ก4รร กร5รา กร5ลา ก5ราค ก4รู กร5ไฟ กล5นค กล5บิ กล5มห ก2ว ก5วัต ก5ษณน ก3ษณะ ก5ษณา ก5ษมา ก5ษมี กษ5เท ก1ส กส4น ก4สโ ก1ห 3กอน กอ5อิ กะ5ถั กะ5ผล 4กะร 1กั 1กา กา5กะ กา5ดู กา5นี กา5น้ กา5บอ กา5ฝา กา5ร่ กำ5ด้ กำ5ทอ กำ5ผล กิ5กะ 1กิจ กิ4ต กิ5นี 3กิริ กี5รณ กี5รต กี5สถ 1กุ กุ5งอ กุ5ชิ กุ5ฎุ กุ5มุ กุ5รร กุ5ลี กุ5แห 1กู กู5ปร กู5รข กู5รม กู5ลิ ก1เ ก1แ ก1โ ก1ไ ก่5กอ ก่5บ้ ก่5ป่ ก์5ท็ ข2 ขม5หิ 4ขลา ขอ5ขม ขอ5ง้ ขอ5อภ 1ขั 1ขา ขา5ก๊ ขา5ทน ขิ5ปส ขิ5ไณ ขี้1 ข่5มุ ข่5หง ข้าว3 ค1ค คช5สี คช5เช คช5เม ค4ณิ ค4ทร คท5รี คท5วอ คน5ยอ 4คนิ คป5ซู คป5ผก 3คมน คม5ฟร คม5ลอ 2คย คร5ซอ คร5นอ คร5นี คร5พน คร5ฟิ คร5มเ คร5ร้ คร5ลิ คร5หา 4ค5รัก คฤ5หบ คฤ5หา คฤ5โฆ คล5คู ค2ว คว5ทอ 3ควา 2คส คส5ติ คห5กร คห5นิ คห5บด คห5สถ 3คอน 3คัน 1คา คา5ปู คา5พจ คา5พย คา5รว คา5วจ คำ5ดี คำ5โอ คำ5ไก คี5รี 1คุ คุ5ณู คุ5ลี 4คุ์ คู5ปอ คู5ลอ 2ค1เ ค1โ 2ค์ ค์5จำ 1ฆา ฆา5ณั ฆี5ยก ง1ก ง4กห งกะ4ร ง4กเ ง4ก์ ง1ข ง4ขก ง4ขต ง1ค ง4คจ ง4คช ง4คญ ง4คธ ง4คบ ง4คป งค5วั ง4คศ ง4คโ งฆ5ปร งฆ5สภ งฆ5เถ งฆ5เภ ง1ง ง4งเ ง1จ ง1ฉ ง1ช ง4ชี ง1ซ ง1ด ง1ต ง1ท ง1น งบ5ดุ ง1ป ง1ผ ง1พ ง1ม ง1ย ง1ร ง1ล ง1ว ง4วเ ง1ส งส5กล งส5กุ ง4สบ ง4สพ งส5พย ง4สภ ง1ห งห5นา ง4หบ งห5บั งห5รา 1งา งา5ช้ งา5รำ งู5สว ง1เ ง1แ ง1โ ง1ไ ง่5งอ จ1จ จ4จว จ1ฉ จด5จ่ จต5จำ จต5มู จป4ก จมบ5พ 3จริ จอ5งอ 1จั 1จา จา5มร จา5มี จา5รึ จำ5ทว จำ5อว 1จิ จิ5จู จิ5ตอ จี5ดี จุ5ฑา จุ5สม จ1เ ฉ2 ฉก5ฉว ฉก4ษ ฉท5ทิ ฉร5ฉิ 1ฉั 1ฉา ฉา5ก๊ ฉา5พย ช1ช ช1ฌ ช4ฌก ช4ฌฆ ช5นีก 4ชน์ ชฟ5รอ ชฟ5โร ชร5กล ชร5ริ ชร5ฤก ชร5หล ชร5หึ ชว4โ ชอง4 1ชั 1ชา ชา2ต ชา5ตร ชา5ปี ชา5มต ชา5ยต ชา5สง ชำ5งั 3ชิต ชิ5นี ชิ5รณ ชิ5แก ชี5ผะ ชี5ผ้ ชี5ฟอ ชี5รณ 3ชีว ชี5วน ชุ5ติ ชุ5ลด ชู5ปก ชู5ปถ ชู5ปโ ช่5อิ ช้5สอ ช้5ได ซน5ทร ซฟ5ตี ซ5ราม ซล5มอ 1ซา ซา5ชู ซา5มู ซิ5ตร ซิ5ตี ซิ5ฟิ ซิ5แล ซี5ดี ซี5นี ซี5รา ซี5ริ ซี5รี ซี5ร็ ซี5ลี ซู5ซู ซู5บิ ซู5ริ ซู5ลิ ซ1เ ซ1โ ซ่5ง่ ซ่5ซ้ 1ซ่า ญจ5ดุ ญ4จน ญ5จ5นท ญ5จ5นบ ญ5จนา ญจ5บร ญ5จ5มบ ญจ5รง ญจ5วี ญจ5ศี ญ4ฉน ญ1ช ญ1ญ ญประ4 1ญา ญา4ต ญ่5บ้ ฏ1ฐ ฏ4ฐบ ฏิ5ทิ ฏิ5ปท ฏิ5ปุ ฏิ5สน ฏิ5สว ฐ4ภั ฐม5ฌา ฐม5พย ฐม5ฤก 1ฐา ฐา5นี ฐุ5ชุ ฑา5มณ ฑา5สถ 3ฑูร ฒิ5สภ ฒิ5สม ณ1ฑ ณ4ฑก ณ4ฑฆ ณ4ฑน ณ5ฑนะ ณ4ฑบ ณ4ฑม ณฑ5ลา ณ4ฑส ณ5ฑสก ณฑ5สถ ณ5ฑ5สี ณฑ5โล ณ4ฑ์ ณย5รั ณ1ร ณ4วา ณสม4 ณห5พล ณห5ภู 1ณา ณา5ปี 1ณิ 1ณี ณี5สง ณู5ปโ ด1ก ด4กง ด4กด ดก5ดื ด4กเ ด4กแ ด1ข ด1ค ดง4ค ดง5ออ ด1ช ด4ชน ด5ชนะ ด1ด ด4ดเ ด1ต ด1ท ด1ป ด1พ ดร5ลิ ด3ร้ ด1ส ด4สก ด1ห 1ดั ดัส5ต 1ดา ดา5กอ ดา5มุ ดา5รก ดา5สว ดำ5ฤษ ดิ5ทอ ดิ5ทิ ดิ4บ ดิ5วร ดิ5ศว ดี5ดี 3ดีน ดี5ฝ่ ดี5รอ ดี5ลิ ดี5วี ดี5หม ดี5หว ดู5ถู ดู5ปอ ดู5รั ดู5หม ดู5แค ด1เ ด1แ ด1โ ด้5ยิ 2ด์ ด์5สป 2ตก ตก5ร้ ต1ค 2ต1ช 2ต1ต ต4ตภ ต4ตส ต4ตโ ต5ถกะ ต3ถา ต5ถุป ต5ถุศ ตถ5เล ตทัศนูป5 2ตน ตน5ฟอ ตน5วร ต4นาธ 2ต1บ ต4บช ตบ5ชว ตป5นี ต1ภ 2ตย 4ตรก ตร5กิ ตร5งอ ตร5จี ตร5จุ 4ตรฐ ตร5ตร ตร5ทว ตร5ผล ตร5ฝร ตร5พล ตร5รง ตร5ลด ต5ริยา ต4รู 2ตร์ ตฤ5ตี ตล5รั ต1ส ต4สค ตส5วา ตส4เ ต4สแ ตส5แต ตอ5ม่ ตอ5รอ ตะ5ใภ 1ตั 1ตา ตา5กล ตา5กว ตา5นึ ตา5ปร ตา5ปล ตา5ผิ ตา5ฟู ตา3มห ตา5มอ ตา5มะ ตา5ฬี 3ติก. ติ5จู ติ5ช่ ติ5ทิ ติ5นร ติ5บอ ติ5มศ ติ5มส ติ5มอ ติ5ยม ติ5อิ 4ติ์ ตี5ขล ตี5คู ตี5ตื ตี5รว ตี5ลั ตุ5ตถ ตุ5ทส ตุ5ป่ ตุ5มห ตุ5รก ตุ5ลั ตุ5สด ตู5ดิ ต1เ ต3แล ต1โ ต่5ถา ต่5ว่ ต่5สว ต้5ก๋ ต้5ตอ ต้5ฝุ ต๋5เต ต์5คล ต์5ฟู ต์5ศต ถด5ถอ ถม5ถื ถล5ไถ ถว5ไม ถะ5ถั ถ4าธ ถา5วร ถ4ีย ถี5ลิ 3ถุน ถ่5ถอ ถ่5ถา ทก5ซั 4ทกา ทค5ติ ทค5นี ทด5รอ ทด5ลอ ทธ5คย ท5ธชะ ทธ5ฎี ทธ5ปฏ ทธ5พร ทธ5รั ทธ5ศต ทธ5สี ทธ5อง ท5ธิก ท5ธิช ท5ธิบ ท5ธิป ท5ธิผ ท5ธิพ ท5ธิภ ท5ธิร ท5ธิฤ ท5ธิศ ท5ธิโ ทธ5เจ ทพ5ธิ ทพ5ยุ ทฟ5ลอ 2ทย ท5ยาน ทร5คต ทร5คร ทร5ธน 3ทรร ทร5สโ ทร5หว ทร5หึ 1ทรา ท5ราก 4ท5ราห 1ทรี ทว5ทห ทว5สถ ทศ5ทิ ทศ5วร ทสน5ท ทส5โก ทห5วั ทห5ฬิ 1ทั 1ทา ทา5ฐิ ทา5ฒิ ทา5นอ ทา5มร ทา5รพ ทำ5ขว ทำ5ซ้ ทำ5ท่ ทำ5โท ทิ5ฆั ทิ5ฐิ ทิ4พ ทิ5พา ทิ5วง ที5นว ที5นี ที5รา ทุ5คต ทุ5ลั ทุ5ศี 1ทู ทู5น่ ท1เ ท์5ดอ 1ธร 4ธรส 4ธรั 1ธา ธา1รณ ธิ5ฤท ธิ5ศี ธิ5สม ธี5รี ธุ5ดง ธุ5ลี ธู5ปน น1ก น4กค น4กป นก5ยู นก5รู น1ข นข5ลิ น1ค นค5ริ น1จ น4จอ นจ5อน น1ช น4ชญ น1ซ น1ด น4ดร น1ต นต5กว น5ตกะ นต5ดิ น4ตท นต5ทิ นต5ปิ น4ตภ น5ตระ น5ตรั น3ตรา น5ต5ริ นต5ฤด น3ติ น5ตุก น5ตุฏ น4ต์ นถ5ธุ นถ5รจ นท5ขี นท5นน น5ทนะ นท5ผล นท4ย น5ทรง น5ทรล น5ทรั น5ทรุ นท5ฤก น5ทลา น5ทวย น3ทอ น1ทิ น3ที นธ5กร น5ธกะ น5ธนะ น5ธุก น5ธุร น5ธุว น5ธุศ นธ5ไม น1น น4นต น4นท น4นร นน5รา น1บ นบ5นอ น1ป น4ปจ นป5จู น4ปท น1พ นพ5ปฎ นพ5ศู นภ5ศู น5ยนต นฤ5คห นฤ5ปเ นฤ5เท นฤ5เบ น1ล น4ลล นว5ร่ น1ศ นษ5กร น1ส น4สซ น4สส นส5แด น4สโ น1ห นอ5กะ 3นอน 1นั 1นา นา4คร นา5ณั นา5ปร นา5รย นา5วต นา5วล นา5สณ นา5สน นา5สว นา5ฬิ 4นาะ 1นิ นิ5ด้ นิ5ฟอ นิ5มน นิ5ยม นิ5ยา นิ5รอ นิ5ลุ นิ5วร นิ5สง นิ5สถ นิ5สี นิ5แด นี5มี นี5มู 1นุ นุ5พย 1นู 2น1เ น1แ น1โ น1ไ น่5อี 3น้อ 1น้ำ น์5สไ บ1ก บ4กษ บกิส5 บ4กแ บ1ข บ1ค บ4คท บค5ที บ4คโ 1บดี บ1ท บบ5ฉบ บบ5ฝึ บบ5อย บ1ป บ1พ บร5มี บ1ส บ4สบ บส4เ บ1ห บอ5ดี บอ5ระ 3บอล 1บั บัพพาชนี5 1บา บาจ5ร บา4ต บา5ตอ บา2ท บา5ทา บา5ทุ บา5รน บา5รอ บา5สม บี5คิ บี5ร่ 1บุ บุค3 บุ5ตร บุ5ถุ บุ5รพ 1บู บู4ช5น บู5ติ บ1เ บ1แ บ1โ บ๊5จี บ๊5เบ ปก4ส ป4จั ป4จา ปฐ5ปท ปฐ5พี ปต5ถก ปต5พล ป4ทา ป1ป ป4ปเ ปม5ด้ ป4ยุ ปร5ตอ ปร5ตี ปร5ตุ ปร5ผั ปร5ษณ 1ประ ปร5แก ปร5แท ปล5ญว ป4วา ปส4ต 1ปั 1ปา ปา5ฐก ปา5ณก ปา5นี ปา5ปิ ปาร4 ปา5รเ ปิ5ดอ ปิ5ยภ ปิ5ยอ ปิ5หก ปี5ชี ปี5มะ ปี5ฬก ปี่3 ปุ5คล ปุ5ถุ ปู5จ๋ ปู5ติ ป1เ ป1ไ ผก5ผั ผณิ5ศ ผน5ผั ผ4นิ ผ4ยา ผล5พล ผล5ไม ผ4สา ผี5ดิ ผี5ตอ ผี5ถ้ ผี5ห่ ผ้า3 3ฝอย ฝี5มะ ฝ่5ฝั 3พจน พจ5นี พช5ฉล พช5รา พทัก4 พน5ทะ พ4นั พนิ4 พ1พ 2พ2ย พย5ก๊ พร5ชย พร5ซี พร5มี 1พรร พ4รู 3พฤก พฤ5ฒา พล5ทิ พล5ร่ พส5เฟ พอ5คว พอ5สม 1พั 1พา 4พาจ พา5ชน พา5นร 1พิ พิ5ถั พิ5ถี พิ5ปล พิ5รอ พิ5รี พิ5ลึ พิ5ศุ พิส5ม พี5ระ พุ5ชิ พุ5พอ พู5ทว พู5พอ พ1เ พ4เย พ่5ป๊ พ่อ3 พ้5ท้ 2พ์ พ์5ดี 1ฟั 1ฟา ฟิ4ลา ฟี5ฟ่ ฟู5ฟ่ ฟ1เ 1ฟ้ ภค5ทร ภค3ว ภช5นี 1ภั 1ภา ภา5ณก ภา5ณว ภา5รด ภา5รต ภา5รย ภา5วน ภิ5ชน ภิ5มห ภิ3ร ภิ5สม ภิ5ไธ ภุ5ชง 1ภู ภู5ฏา ภู5ริ ม1ก ม4กม ม4กษ ม1ข ม4ขล ม1ค ม4คค ม4คอ มค5อิ 1มงคล มง5ฟอ ม1จ ม1ช มช4ว ม1ซ 3มณฑ มณ5ฑน มณ5บร มณ5พร มณ5เฑ มด5ยอ มด5ลู ม1ต ม4ตธ ม4ติ ม4ตไ มต5ไต ม1ท 3มนตร มน5ฮั ม4นุ ม1บ มบ4พ ม1ป มป4ช มป5ฤด มป5ฤๅ ม4ป์ ม1พ ม4พก ม4พว ม1ภ มภ5กถ ม1ม ม4มเ ม4มโ มย5รา 3มรร ม3รั ม3ริ มฤ5คิ มฤ5เค มล5ทิ ม3ลิ ม3ล้ ม1ว มว5มอ ม4วล ม1ส มส4เ มห5กร ม3หน มห5ภา ม5หาญ ม5หาย มหา3ส มอ5ขว มอ5คร มอ5ดู มอ5ตำ มอ5นว มอ5นอ มอ5ระ 4มอั มะ5ถั มะ5ฝ่ มะ5ฮอ 1มั ม4ั่ 1มา มา4ก มา5ดร มา5นร มา5ป่ มา5พจ มา5มก มา5มุ มา5ม่ มา5ยณ มา5ยอ มา5ร่ มา3ว4 1มิ มิ5กภ มิ5ชิ มิ5ซร มิ5ตล มิ5ถิ มิ5น่ มิ5ฟล มิ5ลำ มิ5แพ มี5ขม มี5หน 3มืด 1มือ. มุ5ทะ มุ5ทั มุ5ทิ มุ5ทุ มุ5ฮั มู5ซี มู5ป่ มู5รต มู5ลิ มู5หย มู5หร มู5ฮั มู5แด มู5แผ มู5แฮ ม1เ ม1แ ม1โ ม1ไ ม4่า 3ม้า ม์5ภิ ยก5ย่ ย1กร ย4ก5ร้ ย1ค ยง5บ่ ยง5ฝ้ ยง5อย ยจ5คร ยด5ย้ ย1ต ย1ท ย1ธ ยบ5ร้ ย1ป ย1พ ย1ภ ยม5ยอ ยม5รา ยม5หา ยม5อี ย4มิ ย1ย ยย4ส ยร5ถี ย5รบั ยล5ไท ยว5ข้ ยว5จ๊ ยว5ดอ ยว5นี ยว5ย่ ยว5รั ยว5ไส ย1ศ ย1ส ย1ห ย4หฐ ยห5ฐา ย4หป ยห5ปร ยอ5บี ยอ5รม 1ยั 1ยา ยา5กฤ ยา5กว ยา5ฉุ ยา5ณม ยา5ณว ยา5ถ่ ยา5บร ยา5สล ยา5สี ยา5ฬั ยำ5ทว ยี5รา 1ยุ ยุ5คล ยุ5ตก 4ยุภ ยุ5แย ยุ5แห ยู5ถิ ยู5ฟ่ ยู5ริ ยู5ไน ย1เ ย1แ ย1โ ย์5กล ย์5ถ่ ย์5มน ย์5หน 2รก รก5ซอ รก5ซึ รก5ซ้ ร1กร รก5รา รก5ร้ รค5พว รง5พย รง5รอ รจ5ถร รณ5คด รณ5ตร รณ5ถั รณ5พฤ รณ5สถ ร5ณาญ รณู5ป 4รณ์ ร1ด ร4ดป ร4ดแ ร4ดโ ร4ดไ รด5ไอ รถ1 รถ5พย ร1ท ร4ทฤ รท5ฤด ร4ท4ว รท5วิ รธ5ขึ รธ5สร รธ5เก รน5ทุ 4รนา ร1บ ร4บค ร4บถ รบ5ถ้ ร4บม ร4บั ร4บไ รบ5ไก ร1ป ร4ปณ ร5พชา ร5พชิ รพ5ทิ ร1ภ ร4ภย รม5รอ รมาว5 รม4เห ร4ยั รร4ก รร5คา รร5จถ รร5จว รร5ชิ รร5ณึ รร5ถา รร5ยง รร5ยเ รร3ล รร5หา รร5แท รร5แส รร5ไก รร5ไต รศ5นี รษ5ตร ร1ส ร4สก ร4สช ร4สเ ร4สโ ร3หิ ระ1 ระ5สา ระ5หก 5รังส 3รัฐ 1รัต รา5กฏ รา5กฤ รา5กว 1ราช รา5ชู รา5ดร รา5ดว รา5ดู รา5ม่ รา5วณ รา5สง รา2ห รา5หุ รำ5งั รำ5จว ริ5ซึ ริ5ตร ริ5ทึ 4ริพ ริ5มน 4ริยจ 4ริยย 4ริร ริ5อ่ ริ5แล 4ริ่ รี5คู รี5ฑา รี5ดู รี5ตร รี5ตอ รี5มู รี5รั รี5รา รี5ริ รี5ลั รี5ลิ รี5ล่ รี5สอ รี5สะ รุ5กว รุ5ขร รุ5คร รุ5ทว รุ5ธิ รุ5มุ รุ5วน 1รู รู5ที รู5นี รู5บิ รูป5ก รู5ปิ รู5มา รู5มู รู5หร 2ร1เ ร1โ ร่5กะ ร่5ตร ร่5ร่ ร่5หล ร์5กิ ร์5กี ร์5ติ ร์5ตี ร์5ตู ร์5ทิ ร์5ฟอ ร์5ฟู ร์5ลี ร์5วอ ฤ4ดา ฤป4เ ฤษ5ฎี ฤห5บด ล5กนะ ลก5ลา ลก5วั ล3กอ ล4กัย ลข5คณ ลข5หม ลชี4 ลด5ระ ลด5ลิ ล4ดา ล1ต ล4ตฟ ลต5ฟอ ลบ5ตะ ลบ5มุ ลบ5ล้ ลบ5ไส ลป5ตอ ลม5งว 2ลย ล1ล ล4ล์ ล3วี ลว5ไห ลส5ไต ลห5กุ ลอก5ล ลอ5จี ลอ5สร ละ5ผล 1ลักษ ลา5กล ลา5นี ลา5ป๋ ลา5พอ ลา5มี 3ลาร ลา5รอ ลา5ร้ ลา5ฤก ลา5ส้ ลิ5ก่ ลิ5จู ลิ5ซึ ลิ5ตอ ลิ5นอ ลิ5น่ ลิ4บ ลิ5บา ลิ5ฟอ ลิ5มู ลิ5อิ ลิ5ไท ลิ5ไล ลี5ตะ 3ลีน ลี5ผล ลี5ลา ลี5วู ลุก5ร ลุก5ล ลุ5ล่ ลูก1 ลู5ที ลู5มิ ลู5ลอ ลู5ออ 2ล1เ 2ล1แ ล1โ ล่5ติ ล่5ที ล่5หล ล่5ออ ล้5โพ ล์5สต ว3กร วก5ว่ ว5การ ว1ค 1วงศ วจ5ตร วจ5สอ วช5นี วด5ถ่ วด5มว วด5ยิ วด5ระ วด5ลา วด5ล้ วด5อ้ ว1ต ว4ตฉ วน5ถี วน5ท้ วน5ผส วน5รว วน5ร่ วน5อิ วบ5ยอ วบ5รว วบ5รั วบ5ฮา ว1ป ว1พ วม5รอ ว3มู วย5กิ วย5ก้ วย5จี วย5ริ วย5รื วย5ล้ วย5ไท วย5ไม วร5ธิ วร5มณ วร5มห ว4รย 1วรร4 ว4ร์ วล5ระ ว1ห วอ5ชิ 1วั วัน3 วันต5 วันท4 1วา วา4ต วา5ตก วา5ติ วา5นร วา5นึ วา5บร วา5มน วา5รณ วา5สนะ วา4ห วา5หน วา5หิ 1วิ วิ5กล วิ5กส วิ5คห วิ5จุ วิ5ดี วิ5ตก วิ5ตร วิ5ตี วิ5ถี 3วิท วิ5ทิ วิ5ธุ วิ5ธู วิ5ปก วิ5ปฏ วิ5ปล วิ5ปว วิภู5 วิ5มล วิ5รง วิ5วร วิ5ศร วิ5ศุ วิ5ษุ วิ5สร วิ5สฤ วิเล5 วิ5ไล วี5คู วี5ชน วี5ดิ 1วุ ว1เ ว1แ ว1โ ว่5ห้ ว้5ชื ว้5ทุ ว้5ลา ว์5ลิ ศ1จ ศพิ4 3ศรี ศ2วร ศษ5ซ้ ศษ5เก ศษ5เห 1ศั ศัก5ร 1ศา2 ศา5กา ศา5ขบ ศา5นุ ศา5ภิ ศา5รย ศา5รั ศา5ริ ศา5ลา 1ศิ ศิ5รพ ศิ5รว ศิ5ศี 1ศึ ศุ5กล ศู5ลิ ศเจ5ร ษ3ฎา ษฐ5ภค ษ5มณี ษ4มา 1ษั 1ษา ษา5คเ 1ษิ ษ์5พย สก5ลิ สก5ลึ สก5วั สก5วา ส4กา 4ส4กุ สข5บุ สง5ขล ส1ซ ส5ดิก ส5ดิน ส5ดิภ ส5ดิม สต5ทิ ส3ตรา 2สต์ สถ5วี 4สถ์ สน5ธย สน5ธิ ส5นียะ ส4นุ สนูป5 ส4ปา สพ5ติ ส2ม สม5ดุ 3สมบ สม5ผส สม5ผุ สม5ผเ สม5ยอ สม5ฤด สม5ฤต สม5หว ส5มัท ส5มัน สมุ4 สรร5ช สร5ลอ สล5บร สว4ก สว5ยม ส4วร สว5ริ ส4วา 4สวิ ส1ส สห5กร สห5กา สห5ชา สห5ธร สห5ปร สห5พั สห5ภา สห5รา สห5ศึ สอ5พล สอ5พอ สะ5ใภ 1สั สัญประ5 สัน3ถ สัม3 1สา สา5กิ สา5คเ 4สาธ สา5นึ สา5มน สา5มี สา5วพ สำ5ออ สำ5โร 1สิ สิ5ถิ สี5ข้ สี5ชอ สี5ดว สี5ตล สี5ตโ สี5ถ่ สี5ผึ สี5ฝุ สี5ละ สี5ลั สี5วล 1สุ สุ5กร สุ5กำ สุ5กี สุ5ขิ สุ5ขุ สุ5คต สุ5คร สุ5นี สุ5บร สุ5บิ สุ5ปร สุ5มน สุ5สง สุ5ไห 2สุ์ 1สู ส1เ ส4เฟ ส1โ ส4โก ส4โค 3ส่ว ส่5ไค ส้5กร ส้5ติ ส้5ไก 2ส์ ส์5หย ห2 2ห1ก หก5ระ หก5ล้ 5หการ หง4ส หง5สา หฤ5หร หฤ5โห หล5สะ หอ5คอ หอ5สม 1หั หา5กฐ หา5บพ หา5ปณ หา5พร หา5รื หา5ฤก หิ5รก หิ5ศว หุ5คู หู5กร หู5กว หู5หน ห้5ท่ ห้5ท้ ห้5ร้ 2ห์ ห์5กร ห์5สน ฬว5รา ฬห5บู 1ฬา ฬา5มณ ฬา5รึ อก5ซอ อก5ซั อก5ถล อก5รณ อก5รี อก5รู อก5ร่ อก5ฤท อก5ลว อก5ลอ อก5ลา อก5ล่ อก5ว่ อก5ใบ อค5ที อฆ5สง อง4คม อง5ถิ อง5บร อง5บิ อง5ฟอ อง5ฟุ อง5ระ อง5อ้ อด5ถอ อด5น่ อด5ฝา อด5ยอ อด5รั อด5อย อด5ออ อด5อ้ อ3ดิ อต5ดอ อต5ด็ อ1ท อน5ง้ อน5ดร อน5ทำ อน5ผั อน5ฝู อน5ฟิ อน5ย้ อน5รา อ4นา อ4นุ1 อบ5ช้ อบ5ถา อบ5บี อบ5อว อบ5อ้ อบ5ไล อป5กิ อป5ติ อป5พร อป5พล อป4ร อป5วา อป5โล อพ5ริ อฟ5ฟิ อฟ5ฟี อฟ5ริ อฟ5ไล อ4ภั อม5ฎอ อม5ดอ อม5ถอ อม5ยิ อม5รา อม5ร่ อม5ฤต อม5หล อม5หว อม5ห้ อ5มอน อย5กอ อย5ก๋ อย5นว อย5ร่ อย5ร้ อย5อิ อ4ยา อย5ได อร5ชุ อร5มน อ3รั อ3รา อ1ริ อ1รี อ3ร้ อร์1 อล5จี อล5ซั อล5นี อล5ฟ่ อล5มอ อล5หม อ3ลั อ1ลิ อว5รุ อศ5กร อษ5ฐช อษ5ฐภ อส5กา อส5ติ อส5นี อส5พล อส5ฟอ อส5มิ อส5เฟ อส5แอ อส5ไพ อ1ห 3ออน ออ5อว อะ5ธี 1อั 1อา อา5ค5เ อา5ฏา อา5ณั อา5ดุ อา5ดู อา2ต อา5ถร อา5นน อา5ปณ อา5มล อา5ย5ต อา5รด อา5รต อา5รบ อา3รย อา5ลป อา5วร อา5วี อา5สว อำ5ยว อำ5อว อิ5ชย อิ5ดะ อิ5ระ อิ5ศว อี5จู อี5ซู อี5ยิ อี5รุ อี5ลุ อี5ศว อี5หร 1อุ อุ5กฤ อุ5กล อุ5คร อุ5ดม อุ5ดร อุ5ด้ อุ3ตรา อุ5ตุ อุ5ทร อุ5ทิ อุ5ทุ อุ5ธั อุ5บล อุ5บ๊ อุ5มง อุ5รพ อุ5ลก อุ5แว อู5คู อู5รา อู5ลา อ1เ อเป5ร อเสก5 อเส5ข อเห5ต อ1แ อ1โ อโร3 อ1ไ 3อ่อ อ่5อว อ่5อ่ อ่5โถ อ้5อว อ้5โถ อ้5โล ฮก5ฮา ฮก5ฮื ฮน5รี ฮฟ5วี ฮล5ซิ ฮล5ดิ 3ฮอล ฮา5นอ ฮา5ป่ ฮิ5บร ฮี5บร 3ฮื้ ฮู5ลา ฮู5ล่ ฮ1เ ฮ่5กึ ะ1ก ะ1ข ะ1ค ะ1ง ะ1จ ะ1ฉ ะ1ช ะ1ซ ะ1ด ะ1ต ะตะ4 ะ1ท ะ1น ะ1บ ะ1ป ะผี4 ะ1พ ะ1ม ะ1ย ะ1ร ะ1ล ะ1ว ะ1ส ะ1ห ะ1อ ะ1เ ะ1แ ะ1โ ะ1ไ ั2 ัก5ง่ ัก5ซ้ ัก5ตบ ัก5ผ่ ัก5ฝ่ ัก5ยอ ัก5ยิ ัก5รั ัก5ร้ ัก3ล ัก5วิ ัก5ษร ัก5อิ ัก5อี ัก5อ่ ัก5ใค ัก5ใฝ ัค5ฆิ ัค5ซี ัค5สถ ัง5ถึ ัง5ศุ ัง4ส5ว ัง5อว ัง5ฮี ัจ5กล ัจ5ญะ ัจ5ถร ัจ5นึ ัจ5โจ ัช5ฎา ัช5นี ัช5พย ัช5พื ัช5รา ัช5ริ ัช5สม ัช5เร ัช5แพ ัช5โญ ัญ1 ัฏ5ทุ ัฏ5สง ัฐ5ทิ ัฐ5บร ัฐ5สภ ัฐ5เค ัณ5ฏก ัณ3ฐ ัณ5ยก ัณ5เฑ ัณ5โร ัด1 ัต5ดึ ัต5ถล ัต5ถั ัต5ถิ ัต5มณ ัต5มห ัต5รา ัต5รี ัต5ฤก ัต5ลั ัต5หล ัต5หี ัท5คี ัท5ทว ัท5ธน ัท5ธิ ัท5รา ัท5ลี ัท5ลุ ัธ5ยม ัน5ฉ่ ัน2ต ัน5ตภ ัน5ตะ ัน5ตั ัน5ตา ัน5ถธ ัน5ทึ ัน5ทุ ัน5ท่ ัน4ธ ัน5ธา ัน5ธิ ัน5ผว ัน5ฝร ัน5ฝ่ ัน5ภิ ัน5ยะ ัน5ย่ ับ1 ัป5คั ัป5ผา ัป4ร ัป5ลา ัป5หง ัป5โป ัป5โห ัพ5ยอ ัพ5ยา ัพ5โพ ัพ5โห ัฟ5ฟิ ัฟ5ริ ัม4ช ัม5ลา ัม5หม ัย5มร ัย5รุ ัล5ดี ัล5ปน ัล5ปพ ัล5ปิ ัล5ฟิ ัล5มอ ัล5มุ ัล5ออ ัล5ไซ ัล5ไฟ ัว1 ัศ5นี ัศ5มี ัศ5เจ ัส5กา ัส5ดง ัส5ดน ัส5ดี ัส5ติ ัส5ถา ัส5ปู ัส5มั ัส5มิ ัส5ยิ ัส5รั ัส5ลิ ัส5วด ัส5วร าก5ถา าก5ฝร าก5ฝั า1กร า5กรร าก5รุ าก5ฮอ า3กี า1ข า4ขบ าข5บู า1ค า4คจ า4คท า4คบ า4คป าค5ปร า4คพ าค5พื า4คภ า5ครี าง5บำ าง5ฝี าง5ฟิ าง5ออ าง5อิ า1จ า4จญ า4จห าจ5หา า4จอ า4จเ าช5กร าช5คร าช5คฤ าช5ทิ า5ชนะ าช5นี าช5ปะ าช5ลั าช5วโ าช5สก าช5สี าช5อง า1ชิ า3ชี าช5เป าช5เล าช5โอ า1ซ าญ5รอ า5ฏกะ าฏ5ดน า5ฏลิ าฏ5ลี า3ฏิ าฐ5กถ าณ5คด าณ5สถ าด5ผว า3ดอ า3ดิ าด5ไท าด5ไห า1ต า4ตญ า4ตภ าต4ว า1ท า4ทธ า4ทน า5ทนะ าท5บง าท5บร าท5สก าท5หล า4ท์ า1ธ า4ธน า2ธย าธ5ยม าน5ญ่ าน5ผู าน5รว าน5รั าน5รา าน5ฤด าน5อว านุ1 าบ5จ้ าบ5ฉว าบ5ช้ าบ5ซึ าบ4พ าบ5รื าบ5ละ า3บิ าป5สร าป5ส่ าป5แช าพ5ถ่ าพ5ยน าพ5รั าพ5ลว าฟ5ต้ าฟ5ริ า3ฟิ า1ภ า4ภป า4ภล าภ5ลอ าม5ง่ าม4น4 าม5สก าม2ห าม5หม าม5หล าม5หา าย5กล าย5กอ าย5ขว าย5ข้ าย5ชน าย5ดิ าย5ด้ า5ยตน า5ยนธ า5ยนม าย5นอ า5ยนเ าย5บร าย5ผอ าย5ฝั าย5มุ าย5ม่ าย5รุ าย5ร้ าย5ลั าย5ล่ าย5วอ าย5อำ า3ยิ าย5ไห าร5กำ าร3ค าร5ชุ าร5ณู าร5ตร า5รทะ าร5ธุ าร5บั าร5ผจ าร5พร า5รภย า1รม าร5รา าร5ละ าร5วด าร5ว่ าร5หน า1ระ า1รั า1รา า1ริ า5ริก า5ริยะ า3รี า1รุ า1ล า4ลก าล5กิ า4ลค า4ลจ าล5ฎี า4ลด าล5ดี าล5ทห า4ลป าล5ปก าล5พร า4ลว า4ลโ า4ล์ าว5ก่ าว5ข้ า3วดี าว5ดึ าว5นี าว5บอ าว5ยอ าว5ยื า5วรณ าว5รภ าว5รา า5ว5รี าว5รุ าว5ร้ าว5ฤก า5วอน าศ5นี า3ศร าศ5เล าษ5ดื าษ5ตร าษ5รา าษ5แก าส5กา าส5ด้ าส5ต้ าส5นี าส5ปอ าส5มห า1ห าห3ก าห5มง าฬ5โร า1อ าอนา4 า1ฮ า1เ าเม5ศ า1แ า1โ า1ไ ำ1ก ำ1ค ำท4ว ำ1น ำ1บ ำ1ป ำ1พ ำ1ม ำม5รง ำม5ลา ำ1ร ำ1ล ำ1ส ำ1ห ำ1เ ำ1แ ิก5ซี ิก5ถอ ิ1กร ิก5ร้ ิ3กฤ ิก5ล้ ิก5วา ิก5ษุ ิ3กิ ิกิ5ส ิ1ข ิ4ขส ิข5สิ ิ1ค ิ4คต ิค5ตอ ิ4คหะ ิฆ5เน ิง5ชี ิง4สต ิง4ห ิง5หา ิง5ห้ ิง5อร ิจ5ศี ิช4น ิช5ลิ ิช5เช ิญ5หน ิญ5โญ ิด5ฉิ ิด5นี ิด5ผน ิด5รอ ิด5ระ ิด5ลั ิด5ออ ิด5อ่ ิต5ซู ิต5ถี ิต5ฟอ ิต5ลด ิต5ลา ิต5วส ิ1ติ ิ3ตุ ิท5ธั ิท5สน ิ3ธี ิน5งอ ิน5ฟร ิน5ยว ิน5ยอ ิน5ย้ ิน5ระ ิน5ริ ิน5ร้ ิ5นอบ ิน5อิ ิน5ฮุ ินู5ป ิบ5บิ ิบ5ผย ิบ5ยื ิบ5ระ ิบ5รี ิบ5ลั ิบ5ลิ ิบ5ล้ ิป4ก ิป5ซั ิป5ทอ ิป5ผล ิ3ปร ิป5สต ิป5ฮอ ิป5โป ิป5โย ิ1พ ิ4พพ ิ4พโ ิพ5โส ิฟ5ฟอ ิ1ภ ิม5ฝี ิม5ลา ิ1มุ ิย5มิ ิร5ชร ิร5วด ิ1รั ิ1รา ิ1ริ ิ1รุ ิล5ปิ ิ1ลั ิ1ลา ิ1ลิ ิว5กิ ิว5ซี ิว5ทร ิว5บิ ิว5ยอ ิว5ริ ิว5ลิ ิว5ลึ ิวา5ส ิศ5พร ิศ5ร้ ิศ5เล ิศ5แพ ิษ5ณุ ิษ5ตร ิส5กร ิส5กี ิ5สตร ิส5ติ ิส5ที ิส5นี ิส5บอ ิส5รา ิส5ริ ิส5ลา ิส5ไซ ิ1ห ิหา4 ิ1เ ิเน4 ิ1โ ี1ก ี4กต ี4กย ีก5ย่ ีก5ริ ีฆ5สร ีช5คณ ีซ5สถ ีด5ฆ่ ีต5กว ีต5ปฏ ี1ท ีท4น ีบ5รั ีบ5รุ ีบ5ร้ ี1ป ี1พ ี4พจ ีย5กถ ีย5รย ีย5รอ ีย5ระ ีย5รั ี5ยวน ีร5ณั ีล5จุ ี4วั ีวา4 ีษ5มา ีห5นา ี5หน้ ีห5บั ีห5มุ ีห5รา ี3หล ีห5โม ีห5ไส ี1อ ีอ4ร ีอา4 ี1เ ี1แ ี1โ ี1ไ ี่5ก่ ี่5ถ้ ี่5ปุ ี่5ปู ี่3ห ี่5โค ี่5โป ี้5กร ี้5จ้ ี้5ซั ี้5ตะ ี้5ริ ี้5ลั ี้5ลุ ี๊5กร ี๋5จ้ ี๋5อ๋ ึก5ซึ ึก5ดำ ึก5ดื ึก5ยื ึก5ระ ึก5ลั ึก5ล้ ึก5ฮั ึด5ถื ึด5ฮั ึน5ทึ ืด5ฮา ือ5กล ือ5กอ ือ5กำ ือ5ข่ ือ5จ้ ือ5ชื ือ5ดำ ือ5ตร ือ5ถื ือ5นำ ือ5บิ ือ5ปล ือ5ปื ือ5ป่ ือ5พว ือ5พ่ ือ5ยน ือ5ยา ือ5รื ือ5ลา ือ5ล้ ือ5สอ ือ5สำ ือ5อี ุก5งอ ุก5ฉก ุก5ซ่ ุก5ดิ ุก5ผา ุก5รา ุก5รุ ุก5ละ ุก5ลี ุก5ล้ ุก5อี ุก5ฮื ุข5นา ุข5ปา ุข5ภั ุข5ภา ุข5ลั ุข5ศา ุข5ศึ ุข5เด ุค5ทอ ุ3คน ุง5ถุ ุจ5ลิ ุจ5หน ุช5รา ุช5เช ุญ5จน ุญ5ฤท ุญ5แจ ุฎ5ฐั ุฑ5พ่ ุณ5ค่ ุณ5ฑก ุณสม5 ุณ5หญ ุณ5หา ุณ5หิ ุณูป5 ุด5ผา ุด5ผ่ ุด5ลอ ุด5ลุ ุด5อู ุต5กว ุต5กิ ุต5ซอ ุต5ตก ุ5ตระ ุ5ตริ ุต5ลุ ุ3ทก ุท5ธั ุ5ทริ ุท5ลุ ุท5โธ ุน5ทร ุน5ผล ุน5รอ ุบ5งิ ุบ5ซิ ุบ5บิ ุบ5ผล ุบ5ยิ ุบ5อิ ุป5กร ุป5กิ ุป5จา ุป5ถั ุป5ทา ุป5ยุ ุป3รา ุ5ปริ ุ4ปส ุป5สง ุป5สร ุป5ฮา ุป5โภ ุป5โล ุพ5พา ุพ5ภิ ุภ5ชล ุภ5เค ุม4น ุม5นุ ุม5รุ ุม5หย ุย5ช่ ุย5ฝ้ ุ1ร ุร5ข่ ุ4รค ุ4รฉ ุ4รช ุ4รท ุ4รธ ุ4รบ ุ4รพ ุ4รภ ุ5รภี ุ4รย ุ4รร ุ4รล ุ4รว ุ4รศ ุ4รส ุ4รอ ุ4รแ ุ4รโ ุล5จอ ุล5ชี ุล5ธิ ุล5มุ ุล5สต ุล5สแ ุ3ลา ุ3ลิ ุศ5โล ุษ5จี ุษ5ฎี ุษ5ปร ุ4ษย ุษ5รา ุษ5ร้ ุษ5เพ ุส5รา ุ5สละ ุส5ลิ ุส5วา ุ1ห ุห5กล ุห5นา ุ4หย ุห5ยา ุ4หเ ุห5เท ุห5เส ุ4หโ ุห5โย ุ1เ ุ1โ ุ๊5ต๊ ูก5วั ู1ช ูญ5หา ูญ5เป ูญ5เส ูด5บึ ูด5รี ูต5รู ูธ5เร ูบ5ไล ูป4ก ูป5ฌา ูป5ถ่ ูป5ทร ูป5พร ูป5ร่ ูป5แบ ูป5โฉ ูฟ5วี ู2ม ู5มิน ูร5ข่ ูร4ณ ู5รณภ ู5รณม ู5รณะ ู5รณาก ูร4พ ู5รพะ ู5รพา ูร4ม ูล5กร ูล5ค่ ู3ลั ูส4ว ู1เ ู1โ ู่1 ู้1 ู๊5ตึ ู๋5กร ู๋5จี ู๋5อี เ2 เก5ยู เก5วั เก5ศว เก5อิ เค5ซอ เค5มี เค5ศว เจ5ดี เจ5นี เ4จร เจ5ลิ เจ5โต เซ5ซั เซ5ทิ เซ5นอ เซ5รุ เซ5แค เด5ซิ เด5บิ เด5รั เด5ลา เด5ลิ เด5ลี 2เตช เต5ปุ เต5มี เต5มู เต5ริ เต5ลุ เต5ศว เต5หะ เถ5รา เท5กร เท5คร เท5คว เท5โว เท5โศ เน4ต เน5ติ 4เนย เน5ระ เน5รั เน4ส เน5สา เน5เว เบ5ต้ เบ5บี เบ5ริ เบ5รุ เบ5ลี เป5ตอ เป5สก เป5สล เพ5ชุ เพ5ทุ เพ5สล เพ5โท เฟ5อี เภ5ตร เภ5ทุ เม5ฆิ เม5ดิ เม5ลา เร5กะ เร5ซิ เร5มอ เร5รว เร5วด เล5กร เล5คอ เล5ดี เล5วร เล5วู เล5หล เล5ฮุ เลิ4 เว5ก้ เว5ทิ เว5ฬุ เส5ฉว เส5นีย์ เส5รี เส5วก เส5วน เส5แส เห5มั เห5ยง เห5ระ เห5รั เห5ศว เห5ศั เห5สั เฬ5วร เอ5กว เอ5ซิ เอ5ธิ เอ5ฬก เฮ5ละ เฮ5ลิ เฮ5โม เฮ5โร แก5วั แค5รอ แค5ริ แค5ลอ แค5ลิ แค5แต แค5แส แช5บ๊ แช5เช แซ5ยิ แด5รี แต5แต แน2 แป5ซิ แ4ปร 3แพท แฟ5รี แ4ฟ้ แม2 แม5ชี แม5รี แม5เร แม่3 แอ5นะ โก4ฐ โก5ลอ โก5ลา โก5ลิ โก5วา โก5วี โก5ฮา โข5ทั โข5ภิ โข5เภ โข5โล โค5ตม โค5ติ โค5มู โค5ม่ โค5ริ โค5ลอ โค5ลั โค5ออ โค5อะ โค5แท โค5ไซ โจ5ปก โฉ5เบ โช5ดึ โช5ห่ โซ5กร โซ5นี โซ5ฟิ โซ5ยู โซ5ลู โซ5สเ โญ4ช โญ5ปว โด5จี โด5นี โด5รา โด5ลิ โต5กร โต5รอ โต5รา โต5ริ โต5ลิ โท5กร โท5คอ โท5พล โท5รอ โท5แอ โธ5ทน โธ5ปก โธ5วน โธ5เฟ โน5ทุ โน5ปจ โน5รม โน5รา โบ5ชุ โบ5ซอ โบ5ต้ โบ5รอ โบ5รั โบ5รา โบ5ลิ โบ5ล่ โบ5ไฮ โป5กส โป5ลิ โป5แล โป5โป โป5โล โพ5ซิ โพ5ทะ โพ5ระ โพ5ลา โพ5ลิ โพ5ลี โพ5หา โพ5แท โพ5ไซ โฟ5กร โฟ5นี โภ5คิ โภ5ไค โม5ฆี โม5ดู โม5ร็ โม5หา โย5ถิ โร5กะ โร5คิ โร5งั โร5ชิ โร5ธนะ โร5รา โร5ล่ โรส4 โร5สเ โร5หน โร5อี โร5ฮิ โร5แม โร5ไล โล5กร โล5กิ โล5กี โล5จน โล5ปุ โล5มก โล5มอ โล5รา โล5วะ โล5หิ โว5นอ โศ5ธน โศ5ภิ โส5กร โส5ติ โส5ธน โส5ภิ โส5ลิ โส5วร โส5หุ โส5โค โห5ฐา โห5รส โห5ระ โห5รา โห5สิ โห5ฬา โอ5กิ โอ5คล โอ5ค็ โอ5ดี โอ5รส โอ5ละ โอ5สถ โอ5อิ โฮ5โล 3ใช้ 1ให ไก5ลา ไก5วั ไข5ข้ ไข5คว ไข5มั ไข5สั ไข5สื ไค5ศว ไช5น่ ไช5ศว ไซ5ดอ ไซ5บอ ไซ5บี ไซ5ปร ได5ฟุ ได5ฟู ได5ลิ ได5ออ ไท5ฟอ ไท5รอ ไท5แท 3ไนย ไป5ริ ไพ5ชย ไพ5ธอ ไพ5รั ไพ5ริ ไพ5ลิ ไพ5หา ไพ5โร ไพ5โอ ไฟ5แช ไฟ5แน ไภ5ริ ไม5ถิ ไม้1 ไร5ตี ไล5บร ไล5บี ไว5กิ ไว5รั ไว5อะ ไห5รณ ไห5ศว ไห5หม ไห5หล ไอ5กร ไอ5ซี ไอ5ดอ ไอ5ติ ไอ5พอ ไอ5พ็ ไอ5ศว ไอ5ศุ ไอ5ศู ไฮ1 ็ก5ซั ็ก5ซี ็จ5ขบ ็จ5สร ็ด5ลอ ็ด5อร ็ด5อึ ็น5ฉ่ ็น5ทร ็น5รอ ็น5วู ็น5อย ็น5อ้ ็บ5ด้ ็ป5ท็ ็ม5หม ่ก5ลั ่1ค ่ง5ริ ่ง5อร ่ง5อำ ่ง5อ่ ่4ฉี ่น5ง่ ่น5ฉ่ ่น5ทะ ่น5มื ่4นย ่น5ยน ่น5ย่ ่น5รม ่ม1 ่ม5พว ่ย5กะ ่ย5ฉุ ่ย5รา ่ย5ร่ ่ว5ช้ ่ว5ถึ ่ว5ยว ่ว5ไห ่อ5กร ่อ5กว ่อ5กะ ่อ5กี ่อ5ก้ ่อ5ข่ ่อ5ตร ่อ5ตะ ่อ5ต้ ่อ5ถื ่อ5บื ่อ5ผส ่อ5มว ่อ5ม่ ่อย3 ่อ5ยอ ่อ5ย่ ่อ5รอ ่อ5ร่ ่อ3ล ่อ5ว่ ่อ5สร ่อ5ฮั ่อ5ฮ่ ่า5กล ่า5ช้ ่า5ดง ่า5ด้ ่า5ฝื ่า5พร ่า5มง ่า5รึ ่า5ร้ ่าว3 ่ำ5ชอ ่ำ5ช้ ่ำ5ต้ ่ำ5ต๊ ่ำ5ไห ่1เ ่1แ ้ก5อ้ ้ง5ถ่ ้ง5ฝุ ้น5งู ้น5ฉบ ้น5ฉ่ ้น5ทะ ้น5ทุ ้น5ท้ ้น5รุ ้น5ร่ ้ม5งว ้ม5ฉุ ้ม5น้ ้ม5ยิ ้ม5ละ ้ม5ลุ ้ม5อล ้ย5กล ้ย5งช ้ย5ล่ ้ย5อ้ ้ย5ใบ ้ว5รอ ้1ห ้อ5กร ้อ5กล ้อ5คร ้อ5คู ้อ5งอ ้อ5ฉี ้อ5ดึ ้อ5ด้ ้อ5ต๊ ้อ5ถอ ้อน3 ้อ5ผ้ ้อ5ฝั ้อ5ฟื ้อ5มู ้อ5ระ ้อ5ร่ ้อ5อึ ้อ5ฮื ้า5จอ ้า5ชื ้า5ชู ้า5ช่ ้า5ช้ ้า5ดี ้า5ถิ ้า5ถึ ้า5บ่ ้า5บ้ ้า5บ๋ ้า5ปี ้า5ผา ้า5ฝร ้า3พ ้า5มุ ้า5ว่ ้า5สม ้า5สร ้า5สล ้ำ1 ้1เ ้1แ ๊ก5ซอ ๊ก5ริ ๊ก5ลุ ๊ก5ฮว ๊ป5ซี ๊ย5ก่ ๋ย5อิ ๋อ5ด๋ ์ค5สเ ์ค5แล ์1บ ์1พ ์1ร ์1เ ์1แ ์1โ .ก6 .ข6 .ฃ6 .ค6 .ฅ6 .ฆ6 .ง6 .จ6 .ฉ6 .ช6 .ซ6 .ฌ6 .ญ6 .ฎ6 .ฏ6 .ฐ6 .ฑ6 .ฒ6 .ณ6 .ด6 .ต6 .ถ6 .ท6 .ธ6 .น6 .บ6 .ป6 .ผ6 .ฝ6 .พ6 .ฟ6 .ภ6 .ม6 .ย6 .ร6 .ฤ6 .ล6 .ฦ6 .ว6 .ศ6 .ษ6 .ส6 .ห6 .ฬ6 .อ6 .ฮ6 6ก. 6ข. 6ฃ. 6ค. 6ฅ. 6ฆ. 6ง. 6จ. 6ฉ. 6ช. 6ซ. 6ฌ. 6ญ. 6ฎ. 6ฏ. 6ฐ. 6ฑ. 6ฒ. 6ณ. 6ด. 6ต. 6ถ. 6ท. 6ธ. 6น. 6บ. 6ป. 6ผ. 6ฝ. 6พ. 6ฟ. 6ภ. 6ม. 6ย. 6ร. 6ล. 6ว. 6ศ. 6ษ. 6ส. 6ห. 6ฬ. 6อ. 6ฮ. 6ก์. 6ข์. 6ฃ์. 6ค์. 6ฅ์. 6ฆ์. 6ง์. 6จ์. 6ฉ์. 6ช์. 6ซ์. 6ฌ์. 6ญ์. 6ฎ์. 6ฏ์. 6ฐ์. 6ฑ์. 6ฒ์. 6ณ์. 6ด์. 6ต์. 6ถ์. 6ท์. 6ธ์. 6น์. 6บ์. 6ป์. 6ผ์. 6ฝ์. 6พ์. 6ฟ์. 6ภ์. 6ม์. 6ย์. 6ร์. 6ล์. 6ว์. 6ศ์. 6ษ์. 6ส์. 6ห์. 6ฬ์. 6อ์. 6ฮ์. 6กิ์. 6ขิ์. 6ฃิ์. 6คิ์. 6ฅิ์. 6ฆิ์. 6งิ์. 6จิ์. 6ฉิ์. 6ชิ์. 6ซิ์. 6ฌิ์. 6ญิ์. 6ฎิ์. 6ฏิ์. 6ฐิ์. 6ฑิ์. 6ฒิ์. 6ณิ์. 6ดิ์. 6ติ์. 6ถิ์. 6ทิ์. 6ธิ์. 6นิ์. 6บิ์. 6ปิ์. 6ผิ์. 6ฝิ์. 6พิ์. 6ฟิ์. 6ภิ์. 6มิ์. 6ยิ์. 6ริ์. 6ลิ์. 6วิ์. 6ศิ์. 6ษิ์. 6สิ์. 6หิ์. 6ฬิ์. 6อิ์. 6ฮิ์. 6กุ์. 6ขุ์. 6ฃุ์. 6คุ์. 6ฅุ์. 6ฆุ์. 6งุ์. 6จุ์. 6ฉุ์. 6ชุ์. 6ซุ์. 6ฌุ์. 6ญุ์. 6ฎุ์. 6ฏุ์. 6ฐุ์. 6ฑุ์. 6ฒุ์. 6ณุ์. 6ดุ์. 6ตุ์. 6ถุ์. 6ทุ์. 6ธุ์. 6นุ์. 6บุ์. 6ปุ์. 6ผุ์. 6ฝุ์. 6พุ์. 6ฟุ์. 6ภุ์. 6มุ์. 6ยุ์. 6รุ์. 6ลุ์. 6วุ์. 6ศุ์. 6ษุ์. 6สุ์. 6หุ์. 6ฬุ์. 6อุ์. 6ฮุ์. 6ะ 6า 6ๅ 6ำ7 6ิ 6ี 6ึ 6ื 6ุ 6ู แ6 โ6 5ไ6 7ใ6 6็ 6่ 6้ 6๊ 6๋ 6์ 6ํ 6ฺ 6๎ เ6ข เ6ฃ เ6ค เ6ฅ เ6ฆ เ6ง เ6จ เ6ฉ เ6ช เ6ซ เ6ฌ เ6ญ เ6ฎ เ6ฏ เ6ฐ เ6ฑ เ6ฒ เ6ณ เ6ด เ6ต เ6ถ เ6ท เ6ธ เ6น เ6บ เ6ป 7เ6ผ เ6ฝ เ6พ เ6ฟ เ6ภ เ6ม เ6ย เ6ร เ6ล เ6ว เ6ศ เ6ษ เ6ส เ6ห เ6ฬ เ6อ เ6ฮ ช6วา. ช6ไ ธ6ไน ม6ไห ส6ไต เลส7ไต ส6ไน ส6ไบ ส6ไป ส6ไล บ6ทคว ม6วก ม6วน ม6วด ม7วดี ม6วย ะม6วง ล7ชน ัต5ถุ ัต6ถุ์ 6ตร. ธา6ตุ. บุ6ตร. ค6รู ฮิบ6รู ฮีบ6รู ส6ภา ส7ภาร เส7ภา โส7ภา ผ6วา น6คร. .เห6ยง เปี่6 เขี้6 ม6ณี คาม7ณี .รม7ณี .รัม7ณี หม7ณี ง6วด ง6วน วัง7วน ง6วย มง6วง อย6อด พ6ญา จุ6รณ ฤ6ชา .ฤ6ทัย พรร6ดิ สวา6ดิ อ6ริ. จน6ที. ธค6ยา นิม6นา ย์ม6นา า7ณะ ิ7ณะ ุ7ณะ ณ7ณะ ก7ณะ ท7ณะ ล7ณะ ุษ7ณะ รป7ณะ หม7ณะ สม7ณะ ลว7ณะ รว7ณะ ร5ณะ ณร6สี ก6นะ ยก7นะ ค7นะ ย7นะ ภว7นะ มท7นะ รต7นะ ลว7นะ วจ7นะ วท7นะ วส7นะ ศม7นะ ภช7นะ ไช7นะ าลป7นะ รรธ7นะ สธ5นะ โสธ6นะ สว5นะ เสว6นะ สาว7นะ ัจ7นะ ัช7นะ ัฏ7นะ ัฒ7นะ ัต7นะ ัท7นะ ัป7นะ ัส7นะ ุจ7นะ อาส7นะ ุ7นะ 5ผี 7จำ 5งำ ห6งำ น7รำ ย7รำ ร7รำ โค7รำ ไพ7รำ น7ยำ ม7ยำ 5งง. ห6งง น7งก 5ชน. เ6ชน โ6ชน 5กร. ั6กร า7นะ ถ7ระ า7ยก. า7ยน. า7ฐี า7นี า7วี ป5โ ป6โย ป6โภ วิป7โย อุป7โภ ศ7นะ รร7มะ ต5ถี ุต6ถี 5บท. ส6บท 5บถ. ข6บถ ส6บถ 7ฟู 7ษุ 5ตะ. ค6ตะ ร6ตะ สร7ตะ า7มี มิ7ผ า7กิ า7กล ิ7กล. ์7กล 5นำ ห6นำ รี7ผ 7ณุ 5นี. ห6นี ฉ6นี าร6นี วีช6นี สส6นี มท6นี รม6นี น7ยิ ิ5ลี ุ5ลี า7ลี โค7ลี โม7ลี ท7ลี ร7ลี ก7ยะ ค7ยะ ป7ยะ ท7ยะ ธ7ยะ น7ยะ ษ7ยะ า7ยะ ิ7ยะ คี7ยะ ฆี7ยะ ณี7ยะ นี7ยะ รี5ยะ เปรี6ยะ มโห5 ิ7รี ี7รี ู7รี หา7รี ม7รี. น5รี. เต7รี. ช7รี. ถ7รี ภ7รี ภม7รี โม7รี ภุม7ร พ7รี. เว7รี 5ผล 5ดล. 5รส. ก6รส จ6รส โค6รส ท6รส พ6รส ด6รส 5คน. ณ7หา ฤๅ5 ฤา5 .ยี่7 า7วะ เท7พี เท7วี บรร7จ บรร7ถ บรร7พต 5ทก. 5ดร. น7ทร. า7ทร. โค7ทร. โล7ทร. โส7ทร. 7อู. 5พล. ไพร่7 5ศก. อัฐ5 อัฐ6ม อัฐ7มี ี7วี ู7วี ถ7วี. ส7วี. ฏ7วี. น7ตี ร7ตี อ7ตี า7ตี ู7ตี า7สี ณ7สี ห7สี เว7สี ู7สี ิ7สี ก7สี โบ7ลา ู7ลา อจ7ลา เว7ลา บิว7ลา มข7ลา เอ7ลา ี7ลา โร7ลา โอ7ลา โซ7ลา ิ7กะ ุ7กะ อ7กะ นว7กะ ิณ7กะ เภ7กะ ัย7กะ ิย7กะ รธ7กะ ัฏ7กะ ัฒ7กะ ิช7กะ ศต7กะ มล7กะ 7ทุ. โซ6ร ธ6นู ัส7ดุ. ร7คต ดง7คต 5กง. เ6กง 7ฎก ณ7มี ว7มี ศ7มี ู7มี ี7ติ รุ7ติ สุ7ติ ฮ7ติ อร7ติ วีส7ติ ติงส7ติ คุป7ติ มุต6ติ ภัต6ติ ก7ดี ต7ดี พ7ดี ม7ดี ย7ดี ศ7ดี อ5ดี า7ดี ี7ดี ุ7ดี ุว7ดี ดิบ7ดี นัก7 กุณ5 กุณ6ฑ์ 7ซี. 5ที. จน6ที ี7รา ู7รา ์7รา ิต7รา ม7รา ย7รา .มก7รา รบ7รา ลิก7รา เห7รา. 7กฎ. 7กฏ. 5หะ ค6หะ นิค7หะ เค7หะ ท6หะ เท7หะ ู7หา ฬ7หา ค7หา เน7หา ่7หา 5มะ ร6มะ ห6มะ ต6มะ 5หู 5ดำ ส6ดำ 7คำ 5สะ ว6สะ 5ฐะ ส6ฐะ 7ธะ 5พี. ร6พี ทร7พี ปฐ7วี ิ7ดา ษ7บ ษ7ป ิ7ระ ี7ระ ู7ระ ช5ระ ิต7ระ ทห7ระ ท7ระ. ุก5ระ. สว7ระ ัส7ระ ิส7ระ เป7ระ อ7ยา. เก7ยา รร7ยา สา7วก ิ7ธิ ุท7ธิ. ิท5ธิ. .สิท6ธิ. บุริมสิท6ธิ. ไกรสิท6ธิ. ป7ธิ ขัดสมา6ธิ พยา6ธิ. 5ษี. ด6นู ิ7วะ ี7วะ ุ7วะ ี7วก ย7วะ เท7วะ ไท7วะ ัท7วะ าช7วะ ไศ7วะ 7ถะ 7ษะ 5พร. 5ผง 5ธี า7ชะ ิ7ชะ ร5ชะ ส7ชะ โอ7ชะ 5ฆะ 5ฟะ า7ฟี ิ7ถี ร7ถี 5ฮา 5ญี 5ผา 5หิ. สิน7ธพ สิน7ธุ. สิน7ธู 5ชู 5ศะ ิ7ละ ุ7ละ ู7ละ ย7ละ ด7ละ .วส7ละ อเจ7ล เต7ละ ่7ละ น7ทะ ท7ทะ ส7ทะ น7ตุ. รร6ตุ มา7ตฤ ิ7รพ า7รพ. ไก7รพ 5ศุ. า7ถา า7สพ พ7สพ ุ7ขี 7สอ. า7ดะ 5บะ. 5ยี. ห6ยี 5กี. 5หก. ง7อร. ม7อร. ี7วร ส7วร. พู7นท 5จร. โ6จร. 7ศพ. โป7ลี 7ภพ. 7นพ. 7ณพ. า7รก. ทก7รก ย7รก. ยว7รก. 5มล. ุ5บล. โล7บล. 5ชล. 5ชก. 7โพ 5ณู 7ปี. า7บี. 5ฏะ. า7ฬี 5ปะ. ฉ6ปะ ส6ปะ ู7ลู 5ตู. 5ยู. ิ7ชิ 7ฆี. ิ7จี ี7จี ุ7จี ู7จี เว7จี 5ศี. 5มน. 5ยอ. ผ6ยอ. 5สง. 7สร. 5ดก. ส6ดก 7โก. ก7ฝ า7มก. 5ซอ า7ขะ ู7ขะ ส5ขะ ร7ษา 5ภะ ศ7ภ ิ7ลก ุ7ฎี ศา5ข 5สา. ั6สา 7ซู 5ษก. ษ7ฐี 5ดม. ส6ดม ด7ลม. ส7ลม. ว7ลม. ี7ลม. 5ศล. นิ7ยต 7งู 5จะ. า7สก. โป7สก 5ยศ. 5ธก. 5กบ. 7คู. ส5มา. 5แล. 5พก. โส7ภ รร6ดิ. า7วก. น7นร. 5จอ. 5จบ. 5คบ. 5ฉล. ม7รม อบ7รม ิ7รม. ี7รม. 5ซน. 5ดอ. 5กิ. ซู7ซุ ซู7ฮก 5บส. น7รน. ตก7ลง ม7ตน ตัว7ตน ี7วง ศ7วง. แตร7วง แวด7วง า7ฑู 5หด. อบ7นบ นา7คร. ี7ฑา ู7ดู า7รภ. า7ฝ ล7รบ. ว7รบ. อ7รบ. า7รณ. น7ยง ม7ยง ุ7ยง ิ7ยง ิ7ยน หา7พน า7งิ ช7รถ. น7รถ. ส7รถ. ัน7ธร. มณ7ฑก มณ7โฑ มร7กต มร7ฑป ยอด7อก โล่ง7อก ยืด7อก ห7ห 5ทด. ว7นม. ทพ7นม. โค7นม ษ7ฎร. ิ7ปุ ิ7ปู ี7รอ. ย7ลำ อ7ลำ ้7ลำ น7ทม. ป7ทม. วก7วน อล7วน ิ7จล. ช7ญะ ี7ข ศีล7 5ธม. สม7รด สัก7วา สัป7ด สัป7ท า7สม. อ7สม. า7นล. ี7รุ ู7รุ เน7รุ ง7หล สีห7นุ 5ภร. 5จด. บ7ยก. ดิ7ศร ร7ศร อพ7ยพ ร7ชร. รส7กา ลส7กา อาจ7อง ี7มู อึง7อล ุ7ชุ ุ7สภ. เก7ชา เก7ศา ช7ตก. บ7ตก. เข7ฬะ ห7ณี อ7ปน. ย7ชม. เบื้อง7 5คะ ง7ออ. อ7ออ. เรือ7ธ เรือ7บ เลี้ยว7 5กก. เ6กก อ7ขอ. า7กอ. แด7วู บ7ยล. โฉ7เก โด7มร โต7มร 7โผ โท7โส ้7ปด. 7คี. โย7นก. โส7มม 7ฬส. ต7ถิ 7โฮ ใจ7 5ฟง ไช7โย 5พต. กรร7กศ ล7บก. ศ7ยป. า7นน. ุ7ฎา ู7ฏา า7มอ. ท7โท ุ7ทส จ่า7ร ฬ7หี า7ฒะ ธต7รฐ ท7คล. ต7ถร. ิ7ฐิ ป7ผะ พฤ7ษภ. ิ7ธุ า7ฬก. ห7สิ ฏ7ฏิ. ษ7ฏิ. ศิษ7ฎิ ษ7ฏี 5ษส. ิ7ปิ ู7ริ. ฑ7ฑุ ษ7ฏุ า7ตา ว7ตก ง7ตก เก6ตุ. ส7ตุ ลิ7บง ฮ7โ}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-et.pat0000644000175000017500000005562211761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-et.rme % used: a b d e f g h i j k l m n o p r s t u v z ä õ ö ü š ž \patterns{ .aa4 .aasta5 .ahe4li .al4a .al4gas .antiik5 .ap3l .ap3r .art5r .au3a .eba3 .ee4 .eela4 .ek3l .ek5r .gu4a .hie5 .idi4 .inim5a .ise5e .is4o .ja4e .ja4t .ka4e .ka2o .ke5hi .kip5r .ku4pl .ku5sa .kusee4 .la4pl .le4e .le5hi .lemmik5 .le5se .lõpp3 .ma4a .maa5a .ma5j .mi5sa .mo4e .nek3 .ni4p .nisu5 .noa3 .oa3 .oo4 .pap4p .pea3a .raadio5 .re4a .re2o .rep3r .re5so .rü5hi .sak5r .sap3r .se4a .sk4 .skaa5 .so5li .sp4 .st4 .teoo4 .tet3r .tina5 .toa3 .ts4 .tsi4s .turba5 .tus2 .tu3sa .ul4ga .ulu4k .um2b .uu4 .vaa3l .vask3 .vere3 .õppe5 .ää4 .õõ4 .öö4 .ühi4s .üle3e .ür2 .üü4 aaa5l a1aas 4aab aa4bi. 5aadel. aadio5a a1ae a4aer aa4fe aa4gan aa2h aa4has aa1i aai4g aa4is a5ait aa2j aa2la aa4lae aala4r aa4las aa4leh aa4lek aa4lel aalg4 aali4ke aal3k a5allik aal3t4 aa2l3õ aa4lü aa4mad aa4man aa4mee a5ameer aa4mö 4aan aa4nam aa4nat a5andm aan4duu aa5ni aant4 aa4pek aa4pen aa4ra4b aa4raf aa4raj aara4l a5arter aa2r3õ aa4rö aa4rü aa4sab aa4sai aa4sar aa2se4 aa4so 3aas5ta a5a4sul aa4sut aa4sü 4aat aa4taa aa4tas aa4teh 5aatom aa4tõ aa4tüh a1au aaši5 a1b 4a3ba a5be 3abie a4bij 5abs a1d a4dad a4deo a2der a3di adu4r adu3se a4dö a5eali ae2d 3aed. 2aee a3ees ae4f 1aeg. ae4ga4j ae4gi 3aegn 2a1e2h 4aei 4aek a3eks 2ael a5elani ae2le ae4lo ae4lu. 4ae2m 4aen ae4pi ae2s a3esi 4aett a1f a4fek a1g 3a4gent agia4 a3go 5agreg agud4 1a2hi. ah4kar 5ahnu 4ai. ai2a 5aian ai4hu ai4ke ai4kl a3ilm ai4lu ai4me. aimp4 4ain. a5inf a5inime 4ains a3inse ai4pr ai2sa 5aistin aist4r ai4va a1j a3ja. a4jale 5ajalo a4jalu 1a2jam 4ajo ajut4 a1k akaa4s a4kaat ak4as 3aken. a3ki ak4kis ak4kr a3klas ak4lau a5klii a3krii ak3ro 4aks ak4te4l a2ku. aku4map a5kvali 3alald ala4mas a4laüh ale4le al4et alet4t 5algat al4ged a3li ali4san a4liste 5allee. al4le4h al4luj al2lü a4lob als4 4alt 4alu. a4lud 1alun alü4h a4lüt a1m 4am. a5ma. a4maad 3ametn amit4 am4o am4pal 5amper. 4amü 2an. 3analü 5anatoom an4das an4deo an4dog 2ane a4neh a3ni a4niso 4anj an4kr 3anku an4nah 4ano anos4 3ansam 4anst 3anten 5antilo ao4d ao4he a3oht ao4j ao2le ao2lu ao2m a3oma ao4nu aoo4p ao2pe a5opera ao2r a5oras a1osa ao4su a1ots a1p a2par 5aparaa a5part a3parv a3pi a3pla a3po ap4pal ap4pin ap4pis ap3ri ap3ron a4pru a3pä 4ara arak4k a4rase 5areng 3aretu 3arhit 2ari ari4al ari4ap 4ark ar4kel 5armast 5armee. a4ro4l 1arst 5artikk 3arua 3arvam 5arvestus 1arvu ar4vää asa4las a4same a4sau ase4ma as5ema. 1a2sen a4seos a4sese a4sett 3a4setu as4fä 1a2si. asi4ala asi3an a4sind asip4 5asjan askõ4 as4kõl a5slaav a4sok as3ole aso4p as4pet as3pl as2po a3spor as4san ass5t 4asti 5astme ast4rak a4su4b a4sud asui4 a4suss a5suu a1t a3ta a4taž 5ateljee atii4v atmi4k 5atroo at4ros at4rus at4soo ats4p at4sü att4s 4atu au2a aua3l au4ba. 4aud au4de. a3ui 4au2j au4ke aulu3 aulus4 au4pü4 a5urg aus4o au2su a3usul 1auto autoo4 auto5s aut4r a1v av4a a4vans a3var a4veh a1õ2 a1ö2 a1ä2 a1ü2 až4ni 4a1š 5baa baa4g baa4k baa4s bab4 bae4 bag4 ba4he ba4ju. ba3k4r bak4s bak4v bap4l bap4r ba4rõ basa4s bas4ko bas4pe bat4r 4bb 2bd be3a4 beb2 bef4 beg4 be4lü4 be2ra2 berk4 bero4 be4rõ4 be4si be4st bes4tis bet4r 4bf 4bh bha4 bi4ala bia4v 2bi1e bi4en 4binõ bi4pla bis4a bi4si bis4k 2b1j 2b1k 2b1l bl4e blet4 b2lon 2bm 2bn 4bort 2bp 2b1r 3brig bros4 2bs b3so 2bt4 4buks bu4lõ 3bum buse5 bu4si4 bus4kr 2b3v 1da daa2 da5ab daala4 da4do dae4 daf4 d5ain da4leh da4lum da4lus 5dam 4dann da4num dao4 darat4 4darb dar4de 4da4re 4daru 2darv d3arv. 4dasen da4sum 2d5b2 2dd 1de dea2 2deaa de5av ded4 2dee. dee4le 4dehe dek3l dek4s 5del. de4lau 4de4lek 4deluv de4pr dep5ressi dere4 de4rel de4rep 5dero deru4 2df 2d5g 2d1h 1di dia4v did4 dig4 dii4g diina4 dii4sa dii4su 4dilm 4dini di2os di4plo dis4ai di4sar di4sas dis4pr dit4r 2d1j 2d3k4 dkop4 2d1l dle4v dlust4 2d1m dmee4 dmi4k 2d1n 1do do4h doi4r 2dos d3osa 5dosk 2d3p4 2d1r4 5draama. drao4 3dreen d4rel d2ren 3drena 2d1s4 dsar4 2d3t2 1du du4b due4 2d5uks d4u2s du4s1a du4see dusk4 2d1v 2dõ dõ4l 4dä 2dül dü4li 4dü4r 5düü 4dž 2d2š 3dšem eaa2 ea3aj e1aas ea2b e3abi e1ae ea2hi e1ai ea2j eak4s eak4v ea2la e3ala. e1a4lu ea2me e5amet e5ann ea4nu eao4 ea2pa e1ar ea4re ea2s e4ass e5aste e5asut e3au ea2v e3ava. e1b e1d ed4a e3eali e3ees ee4fe eei4 eek4r ee2la 3eelar e5elekt eel5uu ee4nai ee4nal ee4nam ee4no eent4 ee4pai e5e4pit 5eepos ee4ral eer5ap ee4ros ee4rot ee4sin e5esine ee4s5ist 5eeskir ee4sü ee4tõm ee4tä e1f e1g egaa4 egas4t e4goi 4eha e2he. e2hi e3hin 5ehist 1e4hit 5ehiti eh4ta4 4ehä ei4dul ei4e eie5ri ei2ga e3iga. ei4ha ei4he e3ilm ei2lu ei4mem 5eine. ei4roo e5i4sa. ei4sist ei4tau ei4tõ ei4va. e3j e3ka e4kahi e3ke ek4kap ek2l ek4lo e3k4o ek3re e3krii 4eks. 5eksam. 3eksem eksi3k 3ekska eksp3r 5ekstr ek4tül e3kü elaa4v e4lagr e2lam 3elamu el4an 5elanik eleis4 e4leks 5elektro 3eleme 5elevaato e3li e4lid elii4t el4kus e4l4ob elo4p els4t elt2r el4tü e2lu 1elu. e5lub elu5i4 1e4lun e3lus. e4luss el5uss. el4üh e1m 5emand. e5mat emne3 emos4 emp4r 5emuls endus3 5enelas e5nem 3energ e4nese e4nesl enk5l enk4r en4sal en4tos en4tü eo5a eo4ja e3o4le eo2lu eo2ma eoo4p eo5pl e3osa. e3osak e5osali e5osav eos4f e3ots. e1p e3pl e4pli ep4lu e1r e3raa 5erakon 5erald e4rao erei2 erek4 5ergut erih4 eri4uu er4nau e4ro4r erp4 er2pr ers4k er4taa er4tak er4tes e4rud es1an 1e2se. e5sek e5sen e5sil eska4j eska4s eske4 es5kel esk3l esk3r es2k5ö es4laa es3ole es4or es2po e3spor es4sist 4est es4tü e3su esup4 e1t e3t4a e2ten 5etendus. etii4s et2ra et4sin et4soo et4sü et4taj 1ette et4tru et4tä et4tü 4etu e4tõ4d e4tüm eu4de e3u2j e3u2l e5u2n eu4p eu4s e5usk e3uu e1v e3v4a e1õ2 e3ö4 e1ä2 e1ü4 e1š 5faa faa4n 4fa4d 2ff 1fi fii4t 4fj 4fk 2f1l f2lo 5floora 2f1n 1fo folk5 fo4ro 2f1r f2re 3frees 2fs 2f1t ftat4 3fu 3gaa gaa4r 4gaast 4gab 4gaed gag4 2gah ga2hi gai4g ga5is ga3k4 5gam ga3o ga3p 4gart 4garv g4as 4ga4suk 5gata gat4r gau4 ga4va. ga4van 2g3b 2gd4 gea4 ge4du. gek4 ge5kl 4gekse ge4lah gela4s ge4leh ge3lu ge4lä ge4nan geok4 ge4or 4geos 4gerg ge4rus 4gf 4gg 2g1h gi2aj gii4s gi3k 4ginf 4gint gio4r gi3pl gi4san gi4sil gi4sö git4r gi4vaj 2g1j 2g1k 2g1l g4lüt 2g1m 2g1n gne4ta gne4te4 4goh go4le go4ma go4po 2g1p4 2g1r g2ran 5granaa 3g2rav g2ru 3grup 4g1s4 2g1t2 g3tr 3gu gub4 gue4 gu5i gu4nel gu3o gup4 gu4sen gu4sä guu4j 2g1v 2g3õ4 4gä gü4l 3ha haa4ri haa4s hal4lai 5har hasa4 hat4r 1he hee4m hee4s hei4s hek4v 2hel. hels4 het4r 4h1h hhe4l 1hi hia2 hii4s 5hil 5him hio2 hi4san hi4sar hise4l hi4st4 hi4sü 5hits h1j hjaa4 4hk h4kal h4kas h4kis hk3l h4ko4 hk3r hks4 hkt4 h4kusk h4ku4su h4kõ h4kä h1l hle4n 4h1m h4mo4 h4mü h1n hnika5 1ho hom4o 4hp4 hrs4 4ht h2ta hta2j h5tak hta4l ht5ar hta4su h4teg hte4n hte4r h4tid h4to h4tr ht5s4 h4tö h4tä 1hu hu3a hue4 hui4d huk4l hup4 hu3sa 2h1v hvad4 hvast4 hve4l h4vini h4vo hvu4s 1hõ 3hö 1hä 3hü 4ia iaa2 iaa4l ia5alane i3aast i5a4bi ia4bo i1ae ia2g ia2h i3aine i1a2j ia4kr i3akt i1a2la i5alb i3alli i1a2lu ia2me i5amet. ia2na i5andj i5andm ia4ne i5anne ia2p4 i3apar ia5pr ia2re i3arm ia4ru i1arv ia2s ias4ke i5aste. i3asu ia4tel iat4r i1au iau4l i5a4vaj i5avald i1b i4bad i4bau i1d 5ideaa idii4 idlu4 ie2 i3eali i1eel iei4 i1eks i5elani i1elu i3eos ie4ri iers4 i3esi ie5so i5ess ie4st i3eten ietu4s i1f i1g i4ga4g i5gar 5igatsu i4gav ig4ram ih4le ih4te ih4tin ii4a ii4deo ii4du. iie3 ii4es ii4gaa ii4ga4s ii4ha iika4 ii4kis iik4ro iiks4t iikt4 ii4lab ii4lad ii4lae ii4last ii4leh ii4lel ii4les ii2lõ4 ii4lü ii4mai iimat4 ii4met ii4nai ii4nau i5inde i5inf ii3ni i5inimen iinit4 iink4 iino4 ii4nol ii4nos ii4nõ ii4pr ii4ran ii4rau iirs4 ii4rü ii4san iise4l ii4sev ii4sik. ii2ta ii4teh iito4 ii4tom ii4tos iit5re ii4tõ ii4tü ii4ves ii4vet ii2vo i1j i1k i4kalu i4ka4re i4kark i4kaut i4k5elu ike4si i3klaa i3klas ik4ler i5klub ikop4 ikos4 i4kov i3kre ik3ro ik4sar iks4k iks4po ik3t2r i3ku iku3a il4a ila4s i4lasi ilia4 i4lisi il4kan il4kõ ille5s illo4 5ilme. il4mot 3ilmut ilo5g2 ilp3l il4ti i5lun ilu3sa 5ilustu ilü4h i1m i4melu imi4g imisu4 i4mo4l 5imper i1n ind3al 5indeks inde4r ind4re 2ine inee4s i4neh i4neks ini4kü i2nim ini4mas i4nime 5inimene 5iniml i4nini inna5a inni4si 3insen 1insp 1inst 3inven io4de io4h i3oht i5ohv io4j i5oks. io2le i3olek io2lu i5oluk io4lü io2ma i5oman ioo4da ioo4ne iooni3 io2p i3oper i5ork i1osa ios4f ios4p ios4t iost4r io4su i3ots. i3otsi io4tü i1p i3pla ip4lu ip4ro ip4sas ipse4 ip4sep ip4sus i4ra4b i4rase ir4dis ir4nõ i2rui iruu4 isaa4v isa4ja i4sana isa4re i4sarh i4selo i3sem iset4s isi4g i2so 3isola i5soli is5oma iso4r i3sot i3s4pek is3pl i3s4por is3sp 5istand i5s4tiil 5istme ist4ru ist4se i5stsee 5istutu i3su i4sõm i2sü4l isü4r 2it itaa2 itee4l it4rak it4ras it2ru4 its3k it4so itte1 itt4s iu4b iu2da iu4gi iu2j i3uju iu4la iu4mar iu4me4 iu2mo iu4ni iu4pu iu5sa i5uss. iu2su iuti4 i3uu i1v i4vad i4vakt i4va4lus i4vant i4vau i4veh ive4l iviil5 i4vü i1õ2 i1ä4 i1ü2 i1ž j4a 3jaa ja1aj jaa4l jaa4r jaa4s jab4 jad4 ja5el jae4r jag4 ja3i2 ja5kra 5jama 5jame jao4h ja3p4 jas4ke jas4tii jat4r jat4su jau4b jau4l je3lu 3jo joo4k jue4 5juma ju4sei juse4l 5jõ 5jä 1ka kaa4da kaa3de ka5aj ka4al kaa4ra kaa4sis kaa4ta 4kader 4kaed 4kaeg kae3lu kag4 kahe5i 4kaia 2kain ka5ist kaitse5 ka4jav ka4ju. k5a4lus ka4pl ka2pr 4karm 4kaset k5asj kat4r 2k3b 2kd4 1k2e ke4el kee3lu 2kehi 4keks ke4laj ke4lak ke4lok 4kemb 2ken. 5kene keo2 kes2k kesk3a4 ket5ra ket4te4 2kf4 4kg 2k1h4 1ki kie4 kik4r 4kinf kio4 ki4pr kis4a ki4san ki4sik 4kiste kit4r kiu4d kiu3su 2k1j 4k1k k3kra kks4 kku4ro 2k1l4 k2la k3la. 3klaas k3lai 3k4lamb k3lan 3klapp 5klassi k3lat 5klaver kle4a k4lee k2lei 3kleit k3lem k4lib 5klibu klig4 k2lii 3kliim 5kliiste k3lik k3lin k4link k2lo k3loom 3klots k2lub k3lus. klu4sa klu4sõ k4lut 2k1m 2k1n knaa4 k4nip 1ko 2koks k4ol ko4len koo4sa 4ko4rie 4korpi k5osa. ko4va 2k3p4 2k2r k4raan 5kraana 3kraav 3krab 3k4rae k3rai 3kramp 4kran k3rau 5kredii 3k4reem 4kreg 5k4res k5ret 4krip 5kristal k4roh 3krohv k4rook k3rut 3kruu 3kruvi 4k3rü 4k1s k5sae k4sai ksek4 ksi2k ksika4 ksit4 ksk4l ks5kõ ksp5lo ks2pr kst3r ks4tü 2kt kt2ra 1ku kui4s 4kujuj 4kujum kuk3la 4kuks kul2d 2kulp kumi4su4 kummi5 3kus ku4siv kut4r kuu4ni kuuse5 4kuž 2k1v k4van 3kvart 5kviitu 1kõ kõ4de. 2kõi k5õis 4kõp 1kö 4köd 1kä käi5s 2käk 4käm 1kü 2kühe 4küle 4küll. 2kž4 4kš 1la 5laag la4aj laa2r laar5a laa4sa 2laav 5laava 4ladj 5ladu lae4r 3laev 4lahv lai5ek5 lai4ga la4jap la4jav la3k4r lak4v la4la. 4lald la4les 4lals la4lus 3lama 3lamp 4lams la4nes 2lani lap4l 4l1arv 4larü la4sas 4lasb la4sei la4sem 4lasen l2asi 4la4sut 3lau 5laud lau4n lau5su 4lavh 2l1b l4bau lb4lo 4l1d l4dala l5dist l4don l4dü 1le le1a2 3lee leek5l lee4le leep5r le3hi 4lehit 5leht 3lej 4lekk 5leks. 4lektr lektri5 4lele le4lek 5lema. le4mor lenaa4 leo2 le3oh le5olu le4pl le2s 4lese. le3sõ 3let 4lette 4l1f lfoo4 lf4t l1g l4gae l4gai l4gall l4gann l4gase lgas4k l4ge4le l4gi4d l2go l4gu4j 2l1h 1li li4ala li5am lia4v 3lid li4dan li4ga. 4liia liie4 5liig lii4na 5lik. likai4 li3kla lik4ro 4lilm 4li4lus limi4s 4linf 4linim 4lins lin4te 4linv lio4k li3p4l li4sah li4sik 4lisol li4suj li4sõl li4sö lit4r li5tu 2liže 2l1j lja1a lja5os 2l1k lkk4 l4kli lk4lu l3kr 2l1l l5ler lli3tr l2lor l4lots llp4 lls4 llt4 l3lu l4lää 2l1m lmaa4v lmat4 l4mau l4meks lmp4 2l1n 1lo lod4r lof4 lo4gal 4loha 4lohv 5loi lok4r 2lo2l l1ole l3olij 3lolo lo4man 5loog loo4ram 4lord 4lorn 2losa l3osa. 2l1p l3plaa lp4le l4puk 2l1r lrih4 2l1s ls4ka lske4 ls4o lste4 2lt l4tau lti4l l4tok lt4sel lt4sis l4tuk l4tõm l4tää l4tüt 1lu 3lua lu3al lud4 lue4 3lug4 4luhk 4luim lu4juk 4luk. 3lukk 2lun lu4nin lu4nio luo3r lu4rau lu4see lus4tii lu4sum lu4sö 3luta lut4r 3luu 2l1v lvel4 1lõ 4lõd 4lõie 5lõik 4lõis 4lõit lõ4l lõ3pe lõp2p 1lö 4löe 1lä 4län län4gi lääne5 1lü lü3h lü4ma 1ma 3maa maa2b4 ma3abi maa3la maa3p ma4bi ma1e2 mag4l 5mahl 4mahv 4majam 4ma4ju. ma3kl mak4v 3mal ma4la. mal4ma ma4om ma3pl 4mart 4marv ma5se ma5sin ma4st 4ma4sul ma4sä 4maut 2m1b mbat4 mbe2r3 mblu4 mbo4j mb5usa 2md4 1me me1a4 me4an 3mee mee5la mee4s me3hi 4mekv mers4 mert4 me5s4o m4et 4met. 4metl 2metn met4se 4mett me5u4 2m1f 4mg4 2m1h 1mi mia4m mia4r 4mide mi4kaj mi4nah 4minf mi3ni mip4 mi2s mis1a2 mi3si mi4sig mi4sih 4mi4sik mi4sil mis3k4 mis4tii mist4r mis3ts mitte3 2m1j 2m3k4 2m1l 2m1m m4maat mma4s mm4e mme4r mmika4 mmi4kal m4mor 2m1n4 1mo 4moh mo4ha m3oks 4morg 4morn mo3sa 2mp mpa4l m4pap mp3l mp3r 2m1r mruu4 2m1s ms4o ms4p 2m1t2 m5ts 1mu mua4 mu5ah mud4 mue4 mui4m 4muls mup4 5mus mut4ra 2m1v mõ4d 4mõig 4mõp 3mö 4mök 3mä 4mäk mär4gel 3mü 4müh 4mž 1na n4aa na5ah naa4lu naa4r5a nad4 na5ei nag4l nah4ke nai4d nai4si na4kru 2nal4ü 4na4mer na4mii n5amiid nants5a na3o4 nap4l na4ret 4narv n4as 4nasb nass4 nat4ra nau4b 4nb4 4n1d n4daas n4dab n4dae nda4ko nda4l n4dau ndif4 ndip4 n4do4r n4duj ndu4sõ n4dü 1ne 5ne. nea2 nee3la nee4le nee3lu nei4v ne4lah 4nelas ne4lek neo4d ne4pl 2nerg n4es ne4tan ne4tõm 2n1f 2n1g n4gai n4gall n4gase n4gau ng4lü n4go4r ng3r ngud4 ngus4t n2gü 2n1h 1ni ni3ap nia4v nig4 nii4g nii4tu nikkel5 4nilm 5nima nima4s 5nimet 3nimi ni4mig 4niml 4nint ni4sid nis4ke 4nisl 2n1j 2nk n4ka4n nk3r nk4se nkst4 2n1l4 2n1m 2n1n nna3e nna5i nnak4r n4ne4f nnio4 nnk4 1no 4nob nod4 4noks noo4na n4or 2n3p4 2n1r 2ns n4salp ns4e nsk5r n3so nso4r nste4 ns4tee ns4tem nstis4 nst3r ns4tu nsu4s 2nt ntaa4r n4teh nte4l ntig4 n4tiso n4tots n4tr nt3ra nt3re nt4sab nt4sal nt4san nt4sar nt5sü ntt4 n4tüh n4tük 1nu nu4da nui4g nur2k nus4p 2n1v 1nõ nõ4l 4nõli 1nö 1nä 1nü 4nül 4nž 4nš oa2 oa4a o1ae o5aku o3anal o5apa oau4b o1b oba4s 1obj 4o1d odaa4 odaal3 o4deh odu4sõ od4š oe5a4 oe4fe oe2l o3ele oe4mi oe4mu o4eo oe4rah oe4rõ oe4si oet4r o1f of5r o1g og4la og4li 3ohaka oh5to 5ohvits oi2ta oiu5a o1j oju2s okast4 okku5 ok3la ok5liin okoos4 ok3r ok4re ok4ri o5kris ok4ru o3la o4lae olag4 ola4las ola4su ol4do ole4an 3olek. o4lend olig4 o3lii olii4g o4li4lu o3lis 4olj ol4lae ollis4 ol4lü ol4mai 4o3lo ol4tam ol4tar 1olu. 5olukor o4luks olõ4 o4lä 3omadu om4baj om4ban o4mok ona4a o4naj ona4ko o4neh o4nele on4gos onit4r oniu4 onsoo4 ont4re o4nuu 2o2o oo1a oo4kal ook4r oo4kää oo4lau oo4lee oo4lig oo4list oo4log oo4lõ oo4lü oo4nah oo4nar oo4nau oon4dee oonk4 oono4 oo4noh oons4 oon5t4 o5opti oo4rat oo4ree oo3sa oo4sel oo4tõ o3pa op5last. op4lu op3ra op3ri o2r3ai o4ralg ora4mii o4rana 5orav 3order 1org org4r oria4 3orju 5orkeste 3orna or4nel or4tal ort3r oru4s or4võ o2sa o4sake 3osako 4o3sau 4ose o4seks 4osf o2si. 4osin 3oskus 4osl 4oso o4sok os1ol os4pa 4oss os4saj os4sü os5taas os4tem 4osto ost4ru 5osuti 4osõ oto5a otok4 ot2ra o3tran 3otsa o5tsö ot4ta ot4teo otus4ta otü4l ou4b ou4n o1v ovaa4l ovio4 ovol4 o4vu4n o3õ4 oü2 1pa paa4ka pa3a2m paa4tel pa4e pa4lus pans4 pa4pr 5paras 3park 4parta pa4sp 4pb 4pd 1pe pe2a pea5j peas4 pe4au pea3v pe4f 4pektr pela4 4pe4lev pel4t pe4lü4 p4em pe4ol 5perd pe4tap peti4k 2pf4 pg4 2ph 1pi pii4v pik5r pin2d pin4gis pip3r pis5ta piu4g 2p1j 2p1k 2p2l4 4pla. p4laa p5laasi 3plaat p4lak p3lam p5lane. 3plasm 5plastik plek2 3plekk 4p3lem p3li 5pliia pliig4 3plok p3lom p3lu 3pluus 4plõ 2p1m 2p1n p4neu 1p4o 5po4e 3pon 3poo poo4la poola4v pordi5 4p1p ppa4k p4pas ppe3a ppee4 pp3l p2p3r pps4 p4pud p4põ p4pü p2r4 2pra 3praa 3prag 3prakt p5rau p4rep p4resi 4prib 2prii p5riit p4rog p4roo 4p4ros 3p4rot 4prum 5pruu 2p1s ps4a p4sor 3p2sü 2p1t p4tak 3pu pua4 pu4da puha4 pui4t puk4k pul4ti 4purt pus4p 2p1v 3põ põhi3 p4õi põi4s põli4 5pö 1pä pär4gu 4päs 3pü pü3he 4pž 4pš 1ra raal3a 4raale 5raalne raa4lu raamatu5 raa4ta4 4raatt raa4tu 4raav 5raaš raie3 2rain r3aine rai4si r5a4la. ral4t ra4lus 3rame ran4dem ra3om 4rapa ra4pl 4rapt 4rarb ra4ren 4rars 2rarv ra4sal 4rasen ra4sis rast4r ra4suk ra4sul ra4sut 5ratas ratiiv5a rat4sen raua3 rau2d raud5o 2rauk 4raum 4raur rau4te 5ravi 2r1b r4bae 4r1d r4dae r2dar rde3a rd4re r4duj r4dü 1re 5re. 5rea reb2 ree4le ree4ma. ree4man 3reer 3reet 5reg 2rehi rei4se rek3l 4reks re4lai re4liit 5relv re4mää 4repp re2pr rep3re re4sin re3te ret4k re4tr ret5s 2r1f rf4r 2r1g r4gae rg3ah rga4re r4geh rgi4me r5g2ra 2r1h 1ri 3ria ri3am ri5ast 5rid 2rig ri4ga. 3rige rig4r 2riib 5riie 4riinu ri4kis ri3k4r 4rilm 3rim ri5oks rio4r 3rip rip4li 4rip2p 4ri4sa. ri4sah ri4sar ri4ses 4risol ri4tol ri3t2r 5riu 5riv 4riö 2r1j 2r1k r4kad rk5ain rka4se r4kek rkt4 2r1l 2r1m r4mald r4me4le r4mig rmo4ra rmo4s rmp4 rms4 2r1n r4nad r4neh rnk4 1ro roa4 ro3e2 rok4k rol4la rol4le 4romb 2romi ro4nop roo4ga 4rosa ros4po ro5staati rost4r 4rož 2r1p rp5ret 2r1r r3ri 2rs rsaa4l rs4l rs4o r5s2po rs4tak 2rt r4tah r4tos rt2r rt4ra r4tri rt5roo rt4sai 1ru 2rua4 rud4 r4uj ru3kr 3ruma 4rumb 2rumm 4rump 5rus. ru4set ru4sin ru4sul rut4r ruum5a 4ruur 2r1v rva4la rva4lu r4vann rvas5k rvis4k r4voh r4vok 1rõ 2rõ2l r5õli rõn4gu 4rõr 3rö 4rök röö4pe rööp5l 1rä 4rä4r 1rü 4rük 4rüm 4rü4r 4rž 4rš 1sa 3s2aa saa5j saa4lu sa4an 4s3aas 3saba sa4bi. 4sabo s4ad 5sada 4sade s5ader 2s1ae sae4l 5sa5ga s4age sa4gu 4sahv 3sai. 4saia s1ain s4ajan sa4ju. sak4ro 5saks 4saku. sa4kää 4s3a4la. 4salas s4alat 5salat. sa4lev 4salla 4sallu 3salt sa4lum 5salv 3s4am 4samp 4sank 4s5ann s4ant 4santi s4anu sa4num sa2pr sa4ris s4arv. sar4va sase4 3sasti sas4tii sa4suk sa4sum 3sat 4satl s5avald 2s3b2 2s3d2 1se 3sead se3ala s5eali se5aval se4du. 4seela see4le s5eeln see4ma 4seepi 3seer see4si see4ta4 4se4fe 5seg sega5a 2seh 3seha 3seho 5sehu 5sehä 3sei sei4d sei4si 3seka se3kl 4s5eksp se4laj 4selek 5seli 4sellu 3selt 2selu 4sens se5oh seo4k se5om seo4p seo4r 3sep sepat4 4serem 4sese. se4si. 4se4sin s5esit ses4k 3sest 4s5eten se3t2r 4sette 2s1f2 2s1g2 2s1h 1si 3sia sia4h sie4 5sign sig4ra s5i4ha. sii4g sii4sa sii4se 4siits sii4tu si4ket siko4d siks4p sikt4 sik4vi 4sinim s5inime 4sins sio4le si4pro 4sirr 5siru 4si4sa. si3se s5i4sik sis2p sisse3 s5istuj 5sisu 2s1j sja5ar 2s1k 4ska 5skaa5la ska4no 5skeem. s4kela 5skelet s5ken ski4g sk2l s5klas 5skler skuk4 3skulp sku4si 2s1l 4s1m sma4sa 2s1n sne4p 1so 3sobi 3soe s1oht 3soi s5oks. 2so2l s3olek s3olij 5solo so3lut so2ma 3son 3soo soo5o 4so4pe so4pr 5sor. s3orj 3sort 2s1os 4sotsu 2s1p s5per 2s1r 2s1s ssel4l ss2fä ssin4 s4sinf ssk4 ss4ke ss2p s5spor ss2t s5stat ss4ti sst5r s4suss 2s1t s2taa 3staad 5staaš s4tain 4stam 5standard 3start s4tati 5statis s4teno 5stepp stet4 s4toh s4top s4tot 5streik 5strek 5struktu st4so stt4 stu2s stu4s5a 3stuud stä4 s4tär s4tüh 1su sua2 su4bar sud4r su4du su5e su4jul 4suks s5uks. 5sulg sul4ga sun4de4 su4nis supe4 supe5s su4pr 4surb 5sus. sus4aa su4ses s5uss. sus4ti su4sun sut4r sut4ü 4suug suu4ra suusa3 2s1v svus4t 1sõ 5sõda sõ4de 4s3õh 3sõid 4sõie 2s1õig 2s5õis 3sõit sõ2l 2s3õli 3sõlm 3sõn 2s1õp 5sõr sõsa4 2s3õu 1sö 4söd sö2k 2sön 1sä 4säk 4säm 1sü 4süa 5süd 5süg 2süh s3ühi 2sük s3üks sü4la sül5di sü3lem 4sülo sü4ra 3süs 3süü 4sž 1ta 3ta. 3taat. 2tabi 4t3aed t3aine 4tais 4ta4ko t2al 4ta4laj ta4lev tal4las ta3lu ta4lus 3tam 5tama 4tanda ta4ot ta4pla ta4pr 4ta4ret 4tarm 2tart ta4se4r ta4ses ta4set ta4sis ta4sü 2taut 3tav ta4vaj 2t1b4 2td2 1t2e te4aa tea4g tea4h te3an te5as 3tee tee5lu te4et te3hi tehi4s te3kl tek4r tek4v tel4ke te4lok te3lu. 4tepiv tep4l 2tepp 3ter 5ter. te5r4a terd4 4terg ters4 tes4a te4sin tes4k 2t1f 4t1g4 2t1h thõl4 3ti tia2 ti3e tii2k tii4ma tii4sa tii4ve tik4o ti3k4r tik4vi 4tilm 5tima 4tinf tin4ga ti4sai tisa4v ti4sik titee4 2t1j 2t1k2 t3kl t3kr 2t1l4 tlu4 2t1m tmika4 tmis3 2t1n 3t2o 4to4da toen4 tog6 4toks. toksi5k to4lek to4lu. to4lum tonis4 to4o too4no too4pe to4rau tos4p tost4 2t3p4 2t1r t4rad t2raf 3trafo t4rahh 5trall t2ran 3trans t4rate 5traum t2re 3treen t4rei 5treim 3trep t3rig 5triib 5triip 5trikoo. tri4pl t4ross 3trumm 5t4rup 3t2ruu 3t2rü 4trüü 2t1s t3s2a ts4aa tsa5is t4saju tsa4lan 3tsehh tse3la 5tsellu 5tsemen 4tsena 5tsensu tsig4 5tsiitsi t4sink 5tsiste ts4laa t2soo t4sor tsp4 t4suss 2t1t t4tad ttee2 ttes2 t5tsem 3tu 4tuim tu4raj tus1a tu4s5ee tu2si tus3s 4t5uss. tus3t2 tu5su tu4sä4 tusü4 4tutop 4tuud tuule5 2t1v 1tõ 5tõb 2tõi tõ4l 4tõ4n 4tõp 2t5õun 1tö 4töe 4tök töö5k töö3p 1tä täh4t3a tä5ke 4täm 1tü tü5he. tü3hi 2t1ž t2že 5tžek 3tžem uaa4 u3aast ua2b u5abi u1ae ua4he uai4k u3ain ua2ja u3akt ua2l u3all u3amet u1an ua4nu u5apar ua2re ua5ree u5art ua2s u3ast u1au uau4d ua2v u5avald u1b u4dalu u4deh udeo4 udo4r u5eal u3eel u3eks ue2ma ueo4 ue4r u1f u1g u4gi4d ug2ra u5graa u4gü uh4tem uh4ter uh4tin uh4tis uidu5 ui2ga ui4h u3iha u3ilm 5uim. uina2 uinas5 ui4si 3uisut uite4h ui4to ui4vala ui4vel ui4vo u1j u5ja u4juj u4jum 3ujumi u1k ukaa4s ukii4g ukki5 ukop4 u3kraa u5kro uku4sa uk4vi ul4a ul4deh uldi4 ul4kr ul4len ul4lui ultra5 u3lu uluo4 4u1m umaf4 u4mau 5umbroh umet4 umf4 umia4 umit4 um5p4r unaa4 unaal5 un4dak un4dan un4das un4do u4ni. u1o2 uo4h u2or u3org u1p u3pla up3le uppe4 up4pis uraa4l u4rag ura4ju u4rala u4rap ur5auk ura4va 3urb. urde3 urea4 u4reos ures4k u4rett urgas4 5urge. u4ri4met u4rini uris4k urka4v uro4r u4rulu u2sa2 u5sa. usad4 u4sae u4salu us5aste u3sea useg4 us5elek u4sett u3setu u5sev us4fä us5g u4si4d usi4g u4si4h us5ind usi4va us3kr u2so us5o2h us3ole uso4r us3p4 u3s4por usui4 3usuli u4suss u2sõ u2sü us3üh u1t ut4kl utos2 utot4 ut4ru ut4so utt4r utu4s utü4h uu5al 4uud uu4du. uu4kak uuk5ri uu4mal uu4mis uu4pü uu4ran uu4ras uu4rau uu4rav uu3sa uusa3k uus4ke u3uss. uu4sul 4uut uu4tas uu4tis uu4tüh u5uuri u1v u4vau u1õ2 uä2 u3är u1ü2 už4l vaa4re4 va4as 4vabi vae4r vag4 va5he 4vaia 4v3ain vak4v va4la. va4lai 4valdi val4ga4 va4lü vana5i vane2 4vanku van4ta van4te vap4r v4ar 4varm var4p 2vart 4varuh 4varve va4sas vas4k vast4r vat4r 4vatud vau4d vav4 4vb 2v1d 3ve vee3a vee3k vee5la vee3sp 4vehi vei4sa ve4ol veot4 ve4rah ves4p 2vf 2vg4 2v1h 3vi via2 vid4 4videa vip4 vi3pl vir4k vi4sak vis4ko4d 2v1j 2v1k 2v1l 2v1m 2v1n voo5lu 2v5p 2v1r 2v1s 2v1t2 v3tr vu4sa vu4su4 2v1v 3võ 4võig 4võ4li 4võm võr4k5 3vä vää4re4 vää4ru 3zo zook4 zoos4 õ1b õbe3 õ1d õea4 õe4lan õe3lu õet2 õeu4 õ1g õh4vu õi4a õi4b õie5k 3õiel 3õigu õi4ko õise4 õi4su4 õ1j õk4kõ õl2d õ4lim õ4lit õl4mad 3õmbl õnet4s õ2p õ3pa õpi5e õp2pa 4õp3r õranda5 õra4s õr4da õr4gaa õr4gar õr4go 4õs õs4a õ4tü4 õude3 õ1v4 õõ5p õõre4 õõ4rel õõ4ta öa2 ö1b ö1d 5ö2dee ödi4k 3öeld öep4 öet4r ö1g4 ö1h öi4a öi4g öi4s ö1j ö1k ö2kon 3ökono ök4v ö1l öli2s ölis5a ö1m öo2 ö2p3au öp4lu ö4raa ö4rau ör4da ör4dell ör4e ö4ri4l ö4ro4 ö4rä ö4rül ös4tii ö4to4 ö4tü4 ö1v ö3õ öö3a öö3e4 öö5i 3öölan öö3o ööt4r öü4 äa4 ä1b äbus5 äbut4 ä1d äe3a4 äe1o ä1g äga4ri ähe5a äidi4s äike3 äi4lo äi4lu äi2s äisa4 äi4sõ äi4tar ä3j ä2ke 3äke. ä5ker ä4kõ äli2s äl4ko 5ämbl ä4nah än4deo änet4 än4to4 äok4 ä4ra5a ära3o4 ä4rar äre4lis äret4 ärge4l ärii4 äri4kl äri4sel ä4riste är4kar ä4ro 5ärrit är4ta är2va ä4rõ äs4ko äs4nai äs4p äs4san äs4so ät4ri äu4d ä1v ävee4 ää4kin ääo4 ää4rase 5ääris. üaa4 ü1b üdame5 ü1g ü2h ühe5i4 1ühen 3ühik. ü3hit ü1j ükan4 ük4kas ük3l ül2d üld5a2 ü2le 3ülek ü5lel üle4mas 1üles ülesä4 ül4gav ül4gee ü4lih ülii4 3üliko ü4liõ ül5kl ül5la ül4mei ülo4r ülp4 ült4 üma4rak üma4ru ümi4ko ü5ne üni4s üot4 üp3l üp5p4 üp3r üpsu4 ürd4 ürik4 üs4o üs4pr üs4tal üs4tas üta4r ütee4l 5ütlev ü4t3r üt4ru ü1v ü4ü üü2l3a2 üü4le üü4lo üü4pe 1ža 4žb 1že 5žee 5žer 4žf 1ži 4žj 4žk 4žl 4žm 4žn 3žo 4žp 4žt 5žö 5žü 2žž 3ša 4šak 4šau 1še 3š4i šis4k 4šk 5šo 4št 3šu4}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-agr.lua0000644000175000017500000017777312161703335025041 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="agr", ["source"]="hyph-grc", ["texcomment"]="% Hyphenation patterns for Ancient Greek\ % \ % (more info about the licence to be added later)\ % \ % ****************************************************************\ %\ % File name: hyph-grc.tex\ %\ % Created: June 6, 2008\ % Last modified: Sept. 12, 2011\ %\ % Unicode hyphenation patterns for Ancient Greek.\ %\ % Author: Dimitrios Filippou, (c) 2008-2011\ % Licence: LaTeX Project Public Licence\ %\ % This file was first created by mechanical translation from\ % GRAhyph5.tex via \"elhyph-utf8 -a -c\" (version 0.1 by Peter\ % Heslin -- p.j.heslin at durham dot ac dot uk). Some additions\ % were also made by hand.\ %\ % Created by Dimitrios Filippou with some ideas borrowed from\ % Yannis Haralambous, Kostis Dryllerakis and Claudio Beccari.\ % Mojca Miklavec adapted it for the \"hyph-utf8\" package.\ %\ % These hyphenation patterns are explained in \"ancient.pdf\", which\ % can be found in the \"elhyphen\" or \"hyphenation-greek\" package.\ % Hyphenation examples are given in the file \"anc-test.pdf\", also\ % to be found in the \"elhyphen\" or \"hyphenation-greek\" package.\ % Questionable patterns are marked by three question marks \"???\".\ %\ % Documentation in English can be found in: D. Filippou,\ % \"Hyphenation patterns for Ancient and Modern Greek,\" in\ % \"TeX, XML, and Digital Typography\" (A. Syropoulos et al.,\ % eds.), Lecture Notes in Computer Science 3130, Springer-Verlag\ % Berlin-Heidelberg, 2004. ISBN 3-540-22801-2.\ %\ % Thanks to Thomas Schmitz (thomas.schmitz at uni-bonn dot de)\ % for pointing out a few mistakes. (Marked by %%%TS%%%)\ %\ % ****************************************************************\ %\ % \\message{UTF-8 hyphenation patterns for Ancient Greek}\ %\ % ", }, ["patterns"]={ ["characters"]="'ʼΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϲἀἁἂἃἄἅἆἇἐἑἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀὁὂὃὄὅὐὑὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰάὲέὴήὶίὸόὺύὼώᾀᾁᾂᾃᾄᾅᾆᾇᾐᾑᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾲᾳᾴᾶᾷ᾽᾿ῂῃῄῆῇῒΐῖῗῢΰῤῥῦῧῲῳῴῶῷ’", ["data"]="α1 ε1 η1 ι1 ο1 υ1 ω1 ϊ1 ϋ1 ἀ1 ἁ1 ἂ1 ἃ1 ἄ1 ἅ1 ἆ1 ἇ1 ἐ1 ἑ1 ἒ1 ἓ1 ἔ1 ἕ1 ἠ1 ἡ1 ἢ1 ἣ1 ἤ1 ἥ1 ἦ1 ἧ1 ἰ1 ἱ1 ἲ1 ἳ1 ἴ1 ἵ1 ἶ1 ἷ1 ὀ1 ὁ1 ὂ1 ὃ1 ὄ1 ὅ1 ὐ1 ὑ1 ὒ1 ὓ1 ὔ1 ὕ1 ὖ1 ὗ1 ὠ1 ὡ1 ὢ1 ὣ1 ὤ1 ὥ1 ὦ1 ὧ1 ὰ1 ὲ1 ὴ1 ὶ1 ὸ1 ὺ1 ὼ1 ᾀ1 ᾁ1 ᾂ1 ᾃ1 ᾄ1 ᾅ1 ᾆ1 ᾇ1 ᾐ1 ᾑ1 ᾒ1 ᾓ1 ᾔ1 ᾕ1 ᾖ1 ᾗ1 ᾠ1 ᾡ1 ᾢ1 ᾣ1 ᾤ1 ᾥ1 ᾦ1 ᾧ1 ᾲ1 ᾳ1 ᾴ1 ᾶ1 ᾷ1 ῂ1 ῃ1 ῄ1 ῆ1 ῇ1 ῒ1 ῖ1 ῗ1 ῢ1 ῦ1 ῧ1 ῲ1 ῳ1 ῴ1 ῶ1 ῷ1 ά1 έ1 ή1 ί1 ό1 ύ1 ώ1 ΐ1 ΰ1 ά1 έ1 ή1 ί1 ό1 ύ1 ώ1 ΐ1 ΰ1 α2ι α2ί α2ί α2ὶ α2ῖ α2ἰ α2ἴ α2ἲ α2ἶ α2ἱ α2ἵ α2ἳ α2ἷ ά3ι ά3ι ᾶ3ι ἀ3ι ἁ3ι α2υ α2ύ α2ύ α2ὺ α2ῦ α2ὐ α2ὔ α2ὒ α2ὖ α2ὑ α2ὕ α2ὓ α2ὗ ά3υ ά3υ ᾶ3υ ἀ3υ ἁ3υ ε2ι ε2ί ε2ί ε2ὶ ε2ῖ ε2ἰ ε2ἴ ε2ἲ ε2ἶ ε2ἱ ε2ἵ ε2ἳ ε2ἷ έ3ι έ3ι ἐ3ι ἑ3ι ε2υ ε2ύ ε2ύ ε2ὺ ε2ῦ ε2ὐ ε2ὔ ε2ὒ ε2ὖ ε2ὑ ε2ὕ ε2ὓ ε2ὗ έ3υ έ3υ ἑ3υ ἐ3υ η2υ η2ύ η2ύ η2ὺ η2ῦ η2ὐ η2ὔ η2ὒ η2ὖ η2ὑ η2ὕ η2ὓ η2ὗ ή3υ ή3υ ῆ3υ ἠ3υ ἡ3υ ο2ι ο2ί ο2ί ο2ὶ ο2ῖ ο2ἰ ο2ἴ ο2ἲ ο2ἶ ο2ἱ ο2ἵ ο2ἳ ο2ἷ ό3ι ό3ι ὀ3ι ὁ3ι ο2υ ο2ύ ο2ύ ο2ὺ ο2ῦ ο2ὐ ο2ὔ ο2ὒ ο2ὖ ο2ὑ ο2ὕ ο2ὓ ο2ὗ ό3υ ό3υ ὀ3υ ὁ3υ υ2ι υ2ί υ2ί υ2ὶ υ2ῖ υ2ἰ υ2ἴ υ2ἲ υ2ἶ υ2ἱ υ2ἵ υ2ἳ υ2ἷ ύ3ι ύ3ι ῦ3ι ὐ3ι ὑ3ι ου3ι όυ4ι όυ4ι ὀυ4ι ὁυ4ι ο3υί ο3υί ο3υῖ 4β. 4γ. 4δ. 4ζ. 4θ. 4κ. 4λ. 4μ. 4ν. 4ξ. 4π. 4ρ. 4σ. 4ϲ. 4ς. 4τ. 4φ. 4χ. 4ψ. 4' 4ʼ 4᾿ 4β' 4βʼ 4β᾿ 4γ' 4γʼ 4γ᾿ 4δ' 4δʼ 4δ᾿ 4ζ' 4ζʼ 4ζ᾿ 4θ' 4θʼ 4θ᾿ 4κ' 4κʼ 4κ᾿ 4λ' 4λʼ 4λ᾿ 4μ' 4μʼ 4μ᾿ 4ν' 4νʼ 4ν᾿ 4ξ' 4ξʼ 4ξ᾿ 4π' 4πʼ 4π᾿ 4ρ' 4ρʼ 4ρ᾿ 4σ' 4σʼ 4σ᾿ 4ϲ' 4ϲʼ 4ϲ᾿ 4τ' 4τʼ 4τ᾿ 4φ' 4φʼ 4φ᾿ 4χ' 4χʼ 4χ᾿ 4ψ' 4ψʼ 4ψ᾿ .β4 .γ4 .δ4 .ζ4 .θ4 .κ4 .λ4 .μ4 .ν4 .ξ4 .π4 .ρ4 .σ4 .ϲ4 .τ4 .φ4 .χ4 .ψ4 2β1β 2γ1γ 2δ1δ 2ζ1ζ 2θ1θ 2κ1κ 2λ1λ 2μ1μ 2ν1ν 2π1π 2ρ1ρ 2ῤ1ῥ 2σ1σ 2ϲ1ϲ 2τ1τ 2φ1φ 2χ1χ 2ψ1ψ 2β1γ 2β1ζ 2β1θ 2β1κ 2β1ξ 2β1π 2β1σ 2β1ϲ 2β1τ 2β1φ 2β1χ 2β1ψ 2γ1β 2γ1ζ 2γ1θ 2γ1κ 2γ1ξ 2γ1π 2γ1σ 2γ1ϲ 2γ1τ 2γ1φ 2γ1χ 2γ1ψ 2δ1β 2δ1γ 2δ1ζ 2δ1θ 2δ1κ 2δ1λ 2δ1ξ 2δ1π 2δ1σ 2δ1ϲ 2δ1τ 2δ1φ 2δ1χ 2δ1ψ 2ζ1β 2ζ1γ 2ζ1δ 2ζ1θ 2ζ1κ 2ζ1λ 2ζ1μ 2ζ1ν 2ζ1ξ 2ζ1π 2ζ1ρ 2ζ1σ 2ζ1ϲ 2ζ1τ 2ζ1φ 2ζ1χ 2ζ1ψ 2θ1β 2θ1γ 2θ1δ 2θ1ζ 2θ1κ 2θ1ξ 2θ1π 2θ1σ 2θ1ϲ 2θ1τ 2θ1φ 2θ1χ 2θ1ψ 2κ1β 2κ1γ 2κ1δ 2κ1ζ 2κ1θ 2κ1ξ 2κ1π 2κ1σ 2κ1ϲ 2κ1φ 2κ1χ 2κ1ψ 2λ1β 2λ1γ 2λ1δ 2λ1ζ 2λ1θ 2λ1κ 2λ1μ 2λ1ν 2λ1ξ 2λ1π 2λ1ρ 2λ1σ 2λ1ϲ 2λ1τ 2λ1φ 2λ1χ 2λ1ψ 2μ1β 2μ1γ 2μ1δ 2μ1ζ 2μ1θ 2μ1κ 2μ1λ 2μ1ξ 2μ1π 2μ1ρ 2μ1σ 2μ1ϲ 2μ1τ 2μ1φ 2μ1χ 2μ1ψ 2ν1β 2ν1γ 2ν1δ 2ν1ζ 2ν1θ 2ν1κ 2ν1λ 2ν1μ 2ν1ξ 2ν1π 2ν1ρ 2ν1σ 2ν1ϲ 2νς. 2νϲ. 2ν1τ 2ν1φ 2ν1χ 2ν1ψ 2ξ1β 2ξ1γ 2ξ1δ 2ξ1ζ 2ξ1θ 2ξ1κ 2ξ1λ 2ξ1μ 2ξ1ν 2ξ1π 2ξ1ρ 2ξ1σ 2ξ1ϲ 2ξ1τ 2ξ1φ 2ξ1χ 2ξ1ψ 2π1β 2π1γ 2π1δ 2π1ζ 2π1θ 2π1κ 2π1ξ 2π1σ 2π1ϲ 2π1φ 2π1χ 2π1ψ 2ρ1β 2ρ1γ 2ρ1δ 2ρ1ζ 2ρ1θ 2ρ1κ 2ρ1λ 2ρ1μ 2ρ1ν 2ρ1ξ 2ρ1π 2ρ1σ 2ρ1ϲ 2ρ1τ 2ρ1φ 2ρ1χ 2ρ1ψ 2σ1δ 2ϲ1δ 2σ1ζ 2ϲ1ζ 2σ1λ 2ϲ1λ 2σ1ν 2ϲ1ν 2σ1ξ 2ϲ1ξ 2σ1ρ 2ϲ1ρ 2σ1ψ 2ϲ1ψ 2τ1β 2τ1γ 2τ1δ 2τ1ζ 2τ1θ 2τ1κ 2τ1ξ 2τ1π 2τ1σ 2τ1ϲ 2τ1φ 2τ1χ 2τ1ψ 2φ1β 2φ1γ 2φ1δ 2φ1ζ 2φ1κ 2φ1ξ 2φ1π 2φ1σ 2φ1ϲ 2φ1τ 2φ1χ 2φ1ψ 2χ1β 2χ1γ 2χ1δ 2χ1ζ 2χ1κ 2χ1ξ 2χ1π 2χ1σ 2χ1ϲ 2χ1τ 2χ1φ 2χ1ψ 2ψ1β 2ψ1γ 2ψ1δ 2ψ1ζ 2ψ1θ 2ψ1κ 2ψ1λ 2ψ1μ 2ψ1ν 2ψ1ξ 2ψ1π 2ψ1ρ 2ψ1σ 2ψ1ϲ 2ψ1τ 2ψ1φ 2ψ1χ 4βδ' 4βδ’ 4βδʼ 4βδ᾽ 4βδ᾿ 4βλ' 4βλ’ 4βλʼ 4βλ᾽ 4βλ᾿ 4βμ' 4βμ’ 4βμʼ 4βμ᾽ 4βμ᾿ 4βν' 4βν’ 4βνʼ 4βν᾽ 4βν᾿ 4βρ' 4βρ’ 4βρʼ 4βρ᾽ 4βρ᾿ 4γδ' 4γδ’ 4γδʼ 4γδ᾽ 4γδ᾿ 4γλ' 4γλ’ 4γλʼ 4γλ᾽ 4γλ᾿ 4γμ' 4γμ’ 4γμʼ 4γμ᾽ 4γμ᾿ 4γν' 4γν’ 4γνʼ 4γν᾽ 4γν᾿ 4γρ' 4γρ’ 4γρʼ 4γρ᾽ 4γρ᾿ 4δμ' 4δμ’ 4δμʼ 4δμ᾽ 4δμ᾿ 4δν' 4δν’ 4δνʼ 4δν᾽ 4δν᾿ 4δρ' 4δρ’ 4δρʼ 4δρ᾽ 4δρ᾿ 4ζβ' 4ζβ’ 4ζβʼ 4ζβ᾽ 4ζβ᾿ 4θλ' 4θλ’ 4θλʼ 4θλ᾽ 4θλ᾿ 4λμ' 4λμ’ 4λμʼ 4λμ᾽ 4λμ᾿ 4θν' 4θν’ 4θνʼ 4θν᾽ 4θν᾿ 4θρ' 4θρ’ 4θρʼ 4θρ᾽ 4θρ᾿ 4κλ' 4κλ’ 4κλʼ 4κλ᾽ 4κλ᾿ 4κμ' 4κμ’ 4κμʼ 4κμ᾽ 4κμ᾿ 4κν' 4κν’ 4κνʼ 4κν᾽ 4κν᾿ 4κρ' 4κρ’ 4κρʼ 4κρ᾽ 4κρ᾿ 4κτ' 4κτ’ 4κτʼ 4κτ᾽ 4κτ᾿ 4μν' 4μν’ 4μνʼ 4μν᾽ 4μν᾿ 4πλ' 4πλ’ 4πλʼ 4πλ᾽ 4πλ᾿ 4πμ' 4πμ’ 4πμʼ 4πμ᾽ 4πμ᾿ 4πν' 4πν’ 4πνʼ 4πν᾽ 4πν᾿ 4πρ' 4πρ’ 4πρʼ 4πρ᾽ 4πρ᾿ 4πτ' 4πτ’ 4πτʼ 4πτ᾽ 4πτ᾿ 4σβ' 4σβ’ 4σβʼ 4σβ᾽ 4σβ᾿ 4ϲβ' 4ϲβ’ 4ϲβʼ 4ϲβ᾽ 4ϲβ᾿ 4σγ' 4σγ’ 4σγʼ 4σγ᾽ 4σγ᾿ 4ϲγ' 4ϲγ’ 4ϲγʼ 4ϲγ᾽ 4ϲγ᾿ 4σδ' 4σδ’ 4σδʼ 4σδ᾽ 4σδ᾿ 4ϲδ' 4ϲδ’ 4ϲδʼ 4ϲδ᾽ 4ϲδ᾿ 4σθ' 4σθ’ 4σθʼ 4σθ᾽ 4σθ᾿ 4ϲθ' 4ϲθ’ 4ϲθʼ 4ϲθ᾽ 4ϲθ᾿ 4σκ' 4σκ’ 4σκʼ 4σκ᾽ 4σκ᾿ 4ϲκ' 4ϲκ’ 4ϲκʼ 4ϲκ᾽ 4ϲκ᾿ 4σμ' 4σμ’ 4σμʼ 4σμ᾽ 4σμ᾿ 4ϲμ' 4ϲμ’ 4ϲμʼ 4ϲμ᾽ 4ϲμ᾿ 4σπ' 4σπ’ 4σπʼ 4σπ᾽ 4σπ᾿ 4ϲπ' 4ϲπ’ 4ϲπʼ 4ϲπ᾽ 4ϲπ᾿ 4στ' 4στ’ 4στʼ 4στ᾽ 4στ᾿ 4ϲτ' 4ϲτ’ 4ϲτʼ 4ϲτ᾽ 4ϲτ᾿ 4σφ' 4σφ’ 4σφʼ 4σφ᾽ 4σφ᾿ 4ϲφ' 4ϲφ’ 4ϲφʼ 4ϲφ᾽ 4ϲφ᾿ 4σχ' 4σχ’ 4σχʼ 4σχ᾽ 4σχ᾿ 4ϲχ' 4ϲχ’ 4ϲχʼ 4ϲχ᾽ 4ϲχ᾿ 4φθ' 4φθ’ 4φθʼ 4φθ᾽ 4φθ᾿ 4φλ' 4φλ’ 4φλʼ 4φλ᾽ 4φλ᾿ 4φμ' 4φμ’ 4φμʼ 4φμ᾽ 4φμ᾿ 4φν' 4φν’ 4φνʼ 4φν᾽ 4φν᾿ 4φρ' 4φρ’ 4φρʼ 4φρ᾽ 4φρ᾿ 4χθ' 4χθ’ 4χθʼ 4χθ᾽ 4χθ᾿ 4χλ' 4χλ’ 4χλʼ 4χλ᾽ 4χλ᾿ 4χμ' 4χμ’ 4χμʼ 4χμ᾽ 4χμ᾿ 4χν' 4χν’ 4χνʼ 4χν᾽ 4χν᾿ 4χρ' 4χρ’ 4χρʼ 4χρ᾽ 4χρ᾿ ἀγω2ν1άρ ἀγω2ν1άρ ἀγω2ν1αρ ἀδιέ2ξ1 ἀδιέ2ξ1 ἀδιε2ξ1 ἀδυ2σ1ώ ἀδυ2σ1ώ ἀδυ2ϲ1ώ ἀδυ2ϲ1ώ ἀδυ2σ1ω ἀδυ2ϲ1ω ἁλό2σ1 ἁλό2σ1 ἁλό2ϲ1 ἁλό2ϲ1 ἁλο2σ1 ἁλο2ϲ1 ἀμπαλί2ν1 ἀμπαλί2ν1 ἀμπαλι2ν1 ἀμφί2σ1β ἀμφί2σ1β ἀμφί2ϲ1β ἀμφί2ϲ1β ἀμφι2σ1β ἀμφι2ϲ1β ἀμφί2σ1ω ἀμφί2σ1ω ἀμφί2ϲ1ω ἀμφί2ϲ1ω ἀμφι2σ1ώ ἀμφι2σ1ώ ἀμφι2ϲ1ώ ἀμφι2ϲ1ώ ἀ2ν1αγής. ἀ2ν1αγής. ἀ2ν1αγήϲ. ἀ2ν1αγήϲ. ἀ2ν1αγὴς. ἀ2ν1αγὴϲ. ἀ2ν1αγήσ. ἀ2ν1αγήσ. ἀ2ν1αγὴσ. ἀ2ν1αγο ἀ2ν1αγεῖ. ἀ2ν1αγῆ. ἀ2ν1αγές. ἀ2ν1αγές. ἀ2ν1αγέϲ. ἀ2ν1αγέϲ. ἀ2ν1αγὲς. ἀ2ν1αγὲϲ. ἀ2ν1αγέσ. ἀ2ν1αγέσ. ἀ2ν1αγὲσ. ἀ2ν1αγεῖς. ἀ2ν1αγεῖϲ. ἀ2ν1αγεῖσ. ἀ2ν1αγῶν. ἀ2ν1αγέσι ἀ2ν1αγέσι ἀ2ν1αγέϲι ἀ2ν1αγέϲι ἀ2ν1αγῆ ἀ2ν1άγκυ ἀ2ν1άγκυ ἀ2ν1αγκύ ἀ2ν1αγκύ ἄ2ν1αγν ἀ2ν1άγν ἀ2ν1άγν ἀ2ν1αγν ἀ3ν2αγνά ἀ3ν2αγνά ἀ3ν2αγνω ἀ3ν2άγνω ἀ3ν2άγνω ἀ3ν2αγνώ ἀ3ν2αγνώ ἀ2ν1αγρί ἀ2ν1αγρί ἀ2ν1αγρῖ ἀ2ν1αγρι ἀ2ν1άγωγ ἀ2ν1άγωγ ἀ2ν1αγώγ ἀ2ν1αγώγ ἀ3ν2αγώγι ἀ3ν2αγώγι ἀ3ν2αγωγί ἀ3ν2αγωγί ἀ4ν3αγωγία ἀ4ν3αγωγία ἀ2ν1άδελ ἀ2ν1άδελ ἀ2ν1αδέλ ἀ2ν1αδέλ ἀ2ν1άελπ ἀ2ν1άελπ ἀ2ν1αέλπ ἀ2ν1αέλπ ἄ2ν1αθλ ἀ2ν1άθλ ἀ2ν1άθλ ἀ2ν1αίδ ἀ2ν1αίδ ἀ2ν1αιδ ἄ2ν1αιμ ἀ2ν1αίμ ἀ2ν1αίμ ἀ2ν1αιμ ἀ2ν1αίσθ ἀ2ν1αίσθ ἀ2ν1αίϲθ ἀ2ν1αίϲθ ἀ2ν1αισθ ἀ2ν1αιϲθ ἀ2ν1αισι ἀ2ν1αιϲι ἀ2ν1αισί ἀ2ν1αισί ἀ2ν1αιϲί ἀ2ν1αιϲί ἀ2ν1αίσχ ἀ2ν1αίσχ ἀ2ν1αίϲχ ἀ2ν1αίϲχ ἀ2ν1αισχ ἀ2ν1αιϲχ ἀ2ν1αίτ ἀ2ν1αίτ ἀ2ν1αιτ ἀ2ν1άκαν ἀ2ν1άκαν ἀ2ν1ακάν ἀ2ν1ακάν ἀ2ν1ακόλο ἀ2ν1ακόλο ἀ2ν1ακολο ἀ2ν1αλγ ἀ2ν1αλδ ἀ3ν2αλδα ἀ3ν2αλδήσκ ἀ3ν2αλδήσκ ἀ3ν2αλδήϲκ ἀ3ν2αλδήϲκ ἀ2ν1άλειπ ἀ2ν1άλειπ ἀ2ν1αλείπ ἀ2ν1αλείπ ἀ2ν1αλειφ ἀ2ν1άλειφ ἀ2ν1άλειφ ἀ2ν1αλείφ ἀ2ν1αλείφ ἀ2ν1αλήθ ἀ2ν1αλήθ ἀ2ν1αληθ ἀ2ν1άλθ ἀ2ν1άλθ ἀ2ν1αλθ ἀ2ν1άλιπ ἀ2ν1άλιπ ἀ2ν1αλίπ ἀ2ν1αλίπ ἀ2ν1άλιστ ἀ2ν1άλιστ ἀ2ν1άλιϲτ ἀ2ν1άλιϲτ ἀ2ν1αλίστ ἀ2ν1αλίστ ἀ2ν1αλίϲτ ἀ2ν1αλίϲτ ἀ2ν1αλκ ἄ2ν1αλκ ἀ2ν1άλκ ἀ2ν1άλκ ἀ2ν1άλλ ἀ2ν1άλλ ἀ2ν1αλλ ἀ3ν2άλλο ἀ3ν2άλλο ἀ3ν2άλλε ἀ3ν2άλλε ἄ2ν1αλμ ἀ2ν1άλμ ἀ2ν1άλμ ἀ2ν1αλμ ἄ2ν1αλο ἀ2ν1άλου ἀ2ν1άλου ἀ2ν1άλῳ. ἀ2ν1άλῳ. ἄ2ν1αλε. ἀ2ν1άλοι ἀ2ν1άλοι ἀ2ν1άλων. ἀ2ν1άλων. ἄ2ν1αλτ ἀ2ν1άλτ ἀ2ν1άλτ ἀ2ν1αμάξ ἀ2ν1αμάξ ἀ2ν1αμαξ ἀ2ν1αμάρτ ἀ2ν1αμάρτ ἀ2ν1αμαρτ ἀ2ν1αμέλγ ἀ2ν1αμέλγ ἀ2ν1αμελγ ἀ2ν1αμπ ἀ2ν1άμπ ἀ2ν1άμπ ἀ2ν1αμφ ἀναμφι2σ1 ἀναμφι2ϲ1 ἀ2ν1ανάγκ ἀ2ν1ανάγκ ἀ2ν1αναγκ ἄ2ν1ανδ ἀ2ν1άνδ ἀ2ν1άνδ ἀ2ν1ανθ ἀ3ν2ανθέ ἀ3ν2ανθέ ἀ4ν3ανθές. ἀ4ν3ανθές. ἀ4ν3ανθέϲ. ἀ4ν3ανθέϲ. ἀ4ν3ανθὲς. ἀ4ν3ανθὲϲ. ἀ4ν3ανθέσ. ἀ4ν3ανθέσ. ἀ4ν3ανθὲσ. ἀ4ν3ανθέσι ἀ4ν3ανθέσι ἀ4ν3ανθέϲι ἀ4ν3ανθέϲι ἀ2ν1άνιο ἀ2ν1άνιο ἀ2ν1ανίο ἀ2ν1ανίο ἀ2ν1ανίω ἀ2ν1ανίω ἀ2ν1ανταγ ἀ2ν1ανταπ ἀ2ν1αντί ἀ2ν1αντί ἀ2ν1αντι ἀνα2ξ1αγ ἀνά2ξ1αν ἀνά2ξ1αν ἀνα2ξ1άν ἀνα2ξ1άν ἀνα2ξ1αν ἀνά2ξ1αρ ἀνά2ξ1αρ ἀνα2ξ1άρ ἀνα2ξ1άρ ἀνά2ξ1ιπ ἀνά2ξ1ιπ ἀνα2ξ1ίπ ἀνα2ξ1ίπ ἀ2ν1αξιόλ ἀ2ν1αξιόλ ἀ2ν1αξιολ ἀ2ν1αξιόπ ἀ2ν1αξιόπ ἀ2ν1αξιοπ ἀ2ν1άξιο ἀ2ν1άξιο ἀ2ν1αξίο ἀ2ν1αξίο ἀ2ν1αξίω ἀ2ν1αξίω ἀ2ν1αξία ἀ2ν1αξία ἀ2ν1αξῖα ἀ2ν1απάλλα ἀ2ν1απάλλα ἀ2ν1απαλλά ἀ2ν1απαλλά ἀ2ν1απάρτ ἀ2ν1απάρτ ἀ2ν1απαρτ ἀ2ν1απαύδ ἀ2ν1απαύδ ἀ2ν1απαυδ ἀ2ν1απόβ ἀ2ν1απόβ ἀ2ν1αποβ ἀ2ν1απόγ ἀ2ν1απόγ ἀ2ν1απογ ἀ2ν1αποδή ἀ2ν1αποδή ἀ2ν1αποδη ἀ2ν1απόδο ἀ2ν1απόδο ἀ2ν1αποδό ἀ2ν1αποδό ἀ2ν1απόδρ ἀ2ν1απόδρ ἀ2ν1αποδρ ἀ2ν1απόλαυ ἀ2ν1απόλαυ ἀ2ν1απολαύ ἀ2ν1απολαύ ἀ2ν1απολό ἀ2ν1απολό ἀ2ν1απολο ἀ2ν1απόλυ ἀ2ν1απόλυ ἀ2ν1απολύ ἀ2ν1απολύ ἀ2ν1απόν ἀ2ν1απόν ἀ2ν1απον ἀ2ν1απόπ ἀ2ν1απόπ ἀ2ν1αποπ ἀ2ν1απόσ ἀ2ν1απόσ ἀ2ν1απόϲ ἀ2ν1απόϲ ἀ2ν1αποσ ἀ2ν1αποϲ ἀ2ν1απότε ἀ2ν1απότε ἀ2ν1αποτε ἀ2ν1απότμ ἀ2ν1απότμ ἀ2ν1αποτμ ἀ2ν1απότρ ἀ2ν1απότρ ἀ2ν1αποτρ ἀ2ν1αρά ἀ2ν1αρά ἀ2ν1αρα ἀ2ν1άρ ἀ2ν1άρ ἀ2ν1αρ ἄ2ν1αρ ἀ3ν2αρίτ ἀ3ν2αρίτ ἀ3ν2αρῖτ ἀ3ν2αριτ ἀ3ν2αρπ ἀ3ν2άρρ ἀ3ν2άρρ ἀ3ν2αρρ ἀ4ν3αρραγ ἀ3ν2αρτ ἀ3ν2αρύτ ἀ3ν2αρύτ ἀ2ν1άσκη ἀ2ν1άσκη ἀ2ν1άϲκη ἀ2ν1άϲκη ἀ2ν1ασκή ἀ2ν1ασκή ἀ2ν1αϲκή ἀ2ν1αϲκή ἄ2ν1ασπι ἄ2ν1αϲπι ἀ2ν1ασπί ἀ2ν1ασπί ἀ2ν1αϲπί ἀ2ν1αϲπί ἀ2ν1άσσατ ἀ2ν1άσσατ ἀ2ν1άϲϲατ ἀ2ν1άϲϲατ ἀ2ν1ασσάτ ἀ2ν1ασσάτ ἀ2ν1αϲϲάτ ἀ2ν1αϲϲάτ ἀ2ν1άστει ἀ2ν1άστει ἀ2ν1άϲτει ἀ2ν1άϲτει ἀ2ν1αστεί ἀ2ν1αστεί ἀ2ν1αϲτεί ἀ2ν1αϲτεί ἀ3ν2αστείβ ἀ3ν2αστείβ ἀ3ν2αϲτείβ ἀ3ν2αϲτείβ ἀ3ν2άστειρ ἀ3ν2άστειρ ἀ3ν2άϲτειρ ἀ3ν2άϲτειρ ἀ3ν2αστείρ ἀ3ν2αστείρ ἀ3ν2αϲτείρ ἀ3ν2αϲτείρ ἀ3ν2άστειχ ἀ3ν2άστειχ ἀ3ν2άϲτειχ ἀ3ν2άϲτειχ ἀ3ν2αστείχ ἀ3ν2αστείχ ἀ3ν2αϲτείχ ἀ3ν2αϲτείχ ἀ2ν1ατεὶ. ἀ2ν1ατεί. ἀ2ν1ατεί. ἀ2ν1ατὶ. ἀ2ν1ατί. ἀ2ν1ατί. ἄ2ν1ατος. ἄ2ν1ατοϲ. ἄ2ν1ατοσ. ἀ2ν1άτου. ἀ2ν1άτου. ἀ2ν1άτω ἀ2ν1άτω ἄ2ν1ατον. ἄ2ν1ατε ἄ2ν1ατοι. ἀ2ν1άτοις. ἀ2ν1άτοις. ἀ2ν1άτοιϲ. ἀ2ν1άτοιϲ. ἀ2ν1άτοισ. ἀ2ν1άτοισ. ἀ2ν1άττ ἀ2ν1άττ ἀ2ν1αττ ἀ2ν1αύγ ἀ2ν1αύγ ἀ2ν1αυγ ἀ2ν1αύδ ἀ2ν1αύδ ἀ2ν1αυδ ἀ3ν2αυδί ἀ3ν2αυδί ἀ3ν2αυδι ἄ2ν1αυδ ἄ2ν1αυλ ἀ2ν1αύλ ἀ2ν1αύλ ἀ2ν1αύξ ἀ2ν1αύξ ἀ2ν1αυξ ἀ2ν1αύχ ἀ2ν1αύχ ἀ2ν1αυχ ἀ2ν1αφαίρ ἀ2ν1αφαίρ ἀ2ν1αφαιρ ἀ2ν1αφή ἀ2ν1αφή ἀ2ν1αφὴ ἀ2ν1αφοῦ ἀ2ν1αφῆ ἀ2ν1αφεῖ ἀ2ν1αφοῖ ἀ2ν1εφῶν. ἀ2ν1αφέ ἀ2ν1αφέ ἀ2ν1αφὲ ἀ3ν2αφῆν ἀ2ν1αφρόδ ἀ2ν1αφρόδ ἀ2ν1αφροδ ἄ2ν1αφρ ἀ2ν1άφρ ἀ2ν1άφρ ἀ2ν1αχύρ ἀ2ν1αχύρ ἀ2ν1αχυρ ἀνδρό2σ1α ἀνδρό2σ1α ἀνδρό2ϲ1α ἀνδρό2ϲ1α ἀνδρο2σ1α ἀνδρο2ϲ1α ἀ2ν1έγγ ἀ2ν1έγγ ἀ2ν1εγγ ἀ2ν1έγερτ ἀ2ν1έγερτ ἀ2ν1εγέρτ ἀ2ν1εγέρτ ἀ2ν1εγκ ἀ2ν1έγκ ἀ2ν1έγκ ἀ2ν1εγχ ἀ2ν1εδά ἀ2ν1εδά ἀ2ν1εδα ἀ2ν1έδεσ ἀ2ν1έδεσ ἀ2ν1έδεϲ ἀ2ν1έδεϲ ἀ2ν1εδέσ ἀ2ν1εδέσ ἀ2ν1εδέϲ ἀ2ν1εδέϲ ἀ2ν1έδρασ ἀ2ν1έδρασ ἀ2ν1έδραϲ ἀ2ν1έδραϲ ἀ2ν1εδράσ ἀ2ν1εδράσ ἀ2ν1εδράϲ ἀ2ν1εδράϲ ἀ2ν1εέρ ἀ2ν1εέρ ἀ2ν1εερ ἀ2ν1εθέλ ἀ2ν1εθέλ ἀ2ν1εθελ ἀ2ν1έθι ἀ2ν1έθι ἀ2ν1εθί ἀ2ν1εθί ἀ2ν1είδε ἀ2ν1είδε ἀ2ν1ειδέ ἀ2ν1ειδέ ἀ2ν1είδω ἀ2ν1είδω ἀ2ν1ειδώ ἀ2ν1ειδώ ἀ2ν1είκα ἀ2ν1είκα ἀ2ν1εικά ἀ2ν1εικά ἀ2ν1εικό ἀ2ν1εικό ἀ2ν1εικο ἀ2ν1ειλεί ἀ2ν1ειλεί ἀ2ν1ειλει ἀ2ν1είμα ἀ2ν1είμα ἀ2ν1εί2σ1ακ ἀ2ν1εί2σ1ακ ἀ2ν1εί2ϲ1ακ ἀ2ν1εί2ϲ1ακ ἀ2ν1ει2σ1άκ ἀ2ν1ει2σ1άκ ἀ2ν1ει2ϲ1άκ ἀ2ν1ει2ϲ1άκ ἀ2ν1εί2σ1ο ἀ2ν1εί2σ1ο ἀ2ν1εί2ϲ1ο ἀ2ν1εί2ϲ1ο ἀ2ν1ει2σ1ό ἀ2ν1ει2σ1ό ἀ2ν1ει2ϲ1ό ἀ2ν1ει2ϲ1ό ἀ2ν1ει2σ1φορ ἀ2ν1ει2ϲ1φορ ἀ2ν1εί2σ1φορ ἀ2ν1εί2σ1φορ ἀ2ν1εί2ϲ1φορ ἀ2ν1εί2ϲ1φορ ἀ2ν1ει2σ1φόρ ἀ2ν1ει2σ1φόρ ἀ2ν1ει2ϲ1φόρ ἀ2ν1ει2ϲ1φόρ ἀ2ν1έκ ἀ2ν1έκ ἀ2ν1εκ ἀ3ν2έκα ἀ3ν2έκα ἀ3ν2εκάς. ἀ3ν2εκάς. ἀ3ν2εκάϲ. ἀ3ν2εκάϲ. ἀ3ν2εκὰς. ἀ3ν2εκὰϲ. ἀ3ν2εκάσ. ἀ3ν2εκάσ. ἀ3ν2εκὰσ. ἀ3ν2εκτ ἀ4ν3έ2κ1τιτ ἀ4ν3έ2κ1τιτ ἀ4ν3ε2κ1τίτ ἀ4ν3ε2κ1τίτ ἀνε2κ1λιπ ἀνε2κ1λό ἀνε2κ1λό ἀνε2κ1λο ἀ2ν1έλαι ἀ2ν1έλαι ἀ2ν1ελαι ἀ2ν1ελάτ ἀ2ν1ελάτ ἀ2ν1ελατ ἀ2ν1έλεγκ ἀ2ν1έλεγκ ἀ2ν1ελέγκ ἀ2ν1ελέγκ ἀ2ν1ελεγξ ἀ2ν1ελέη ἀ2ν1ελέη ἀ2ν1ελεή ἀ2ν1ελεή ἀ2ν1έλεο ἀ2ν1έλεο ἀ2ν1ελέο ἀ2ν1ελέο ἀ2ν1ελέω ἀ2ν1ελέω ἀ2ν1έλεε ἀ2ν1έλεε ἀ2ν1ελκή ἀ2ν1ελκή ἀ2ν1ελκὴ ἀ2ν1ελκο ἀ2ν1ελκῆ ἀ2ν1ελκές. ἀ2ν1ελκές. ἀ2ν1ελκέϲ. ἀ2ν1ελκέϲ. ἀ2ν1ελκὲς. ἀ2ν1ελκὲϲ. ἀ2ν1ελκέσ. ἀ2ν1ελκέσ. ἀ2ν1ελκὲσ. ἀ2ν1ελκε ἀ2ν1ελκῶ ἀ2ν1ελκέσ ἀ2ν1ελκέσ ἀ2ν1ελκέϲ ἀ2ν1ελκέϲ ἄ2ν1ελκτ ἀ2ν1έλκτ ἀ2ν1έλκτ ἀ2ν1έλκω ἀ2ν1έλκω ἀ2ν1ελκώ ἀ2ν1ελκώ ἀ2ν1έλλ ἀ2ν1έλλ ἀ2ν1έλπι ἀ2ν1έλπι ἀ2ν1ελπί ἀ2ν1ελπί ἀ2ν1έλυτρ ἀ2ν1έλυτρ ἀ2ν1ελύτρ ἀ2ν1ελύτρ ἀ2ν1έμβ ἀ2ν1έμβ ἀ2ν1εμβ ἀ2ν1έμετ ἀ2ν1έμετ ἀ2ν1εμέτ ἀ2ν1εμέτ ἀ2ν1έμπ ἀ2ν1έμπ ἀ2ν1εμπ ἀ2ν1έμφ ἀ2ν1έμφ ἀ2ν1εμφ ἀ2ν1έν ἀ2ν1έν ἀ2ν1εν ἀ3ν2ένει ἀ3ν2ένει ἀ3ν2ενή ἀ3ν2ενή ἀ3ν2έντες. ἀ3ν2έντες. ἀ3ν2έντεϲ. ἀ3ν2έντεϲ. ἀ3ν2έντεσ. ἀ3ν2έντεσ. ἀ2ν1ε2ξ1 ἀ3ν2ε3ξ2ίκα ἀ3ν2ε3ξ2ίκα ἀ3ν2ε3ξ2ικά ἀ3ν2ε3ξ2ικά ἀ2ν1έορ ἀ2ν1έορ ἀ2ν1εόρ ἀ2ν1εόρ ἀ2ν1επ ἀ3ν2επν ἀ3ν2επτ ἀ2ν1εραστ ἀ2ν1εραϲτ ἀ2ν1έραστ ἀ2ν1έραστ ἀ2ν1έραϲτ ἀ2ν1έραϲτ ἀ2ν1εράστ ἀ2ν1εράστ ἀ2ν1εράϲτ ἀ2ν1εράϲτ ἀ2ν1εργ ἄ2ν1εργ ἀ2ν1έργ ἀ2ν1έργ ἀ2ν1έρεικ ἀ2ν1έρεικ ἀ2ν1ερείκ ἀ2ν1ερείκ ἀ2ν1έρεισ ἀ2ν1έρεισ ἀ2ν1έρειϲ ἀ2ν1έρειϲ ἀ2ν1ερείσ ἀ2ν1ερείσ ἀ2ν1ερείϲ ἀ2ν1ερείϲ ἀ2ν1ερεύνητ ἀ2ν1ερεύνητ ἀ2ν1ερευνήτ ἀ2ν1ερευνήτ ἀ2ν1ερί ἀ2ν1ερί ἀ2ν1ερι ἀ2ν1ερυθρίαστ ἀ2ν1ερυθρίαστ ἀ2ν1ερυθρίαϲτ ἀ2ν1ερυθρίαϲτ ἀ2ν1ερυθριάστ ἀ2ν1ερυθριάστ ἀ2ν1ερυθριάϲτ ἀ2ν1ερυθριάϲτ ἀ2ν1έστι ἀ2ν1έστι ἀ2ν1έϲτι ἀ2ν1έϲτι ἀ2ν1εστί ἀ2ν1εστί ἀ2ν1εϲτί ἀ2ν1εϲτί ἀ2ν1έται ἀ2ν1έται ἀ2ν1εταί ἀ2ν1εταί ἀ2ν1έτοι ἀ2ν1έτοι ἀ2ν1ετοί ἀ2ν1ετοί ἀ2ν1ετυ ἀ2ν1έτυ ἀ2ν1έτυ ἀ2ν1ετύ ἀ2ν1ετύ ἀ2ν1εύθ ἀ2ν1εύθ ἀ2ν1ευθ ἄ2ν1ευκ ἀ2ν1εύκ ἀ2ν1εύκ ἀ2ν1ευλ ἀ2ν1εύρετ ἀ2ν1εύρετ ἀ2ν1ευρέτ ἀ2ν1ευρέτ ἀ2ν1ευφήμητ ἀ2ν1ευφήμητ ἀ2ν1ευφημήτ ἀ2ν1ευφημήτ ἀ2ν1εύχ ἀ2ν1εύχ ἀ2ν1ευχ ἀ2ν1εύξ ἀ2ν1εύξ ἀ2ν1ευξ ἀ2ν1ηυξ ἀ2ν1ηῦγ ἀ2ν1ηυγ ἀ2ν1ευκτ ἀ2ν1έφ ἀ2ν1έφ ἀ2ν1εφ ἀ3ν2εφάλ ἀ3ν2εφάλ ἀ3ν2έφελ ἀ3ν2έφελ ἀ3ν2εφέλ ἀ3ν2εφέλ ἀ2ν1εχέ ἀ2ν1εχέ ἀ2ν1εχε ἀ2ν1έψα ἀ2ν1έψα ἀ2ν1εψά ἀ2ν1εψά ἀ2ν1ηγεμ ἀ2ν1ήδ ἀ2ν1ήδ ἀ2ν1ηδ ἀ2ν1ήκεσ ἀ2ν1ήκεσ ἀ2ν1ήκεϲ ἀ2ν1ήκεϲ ἀ2ν1ηκέσ ἀ2ν1ηκέσ ἀ2ν1ηκέϲ ἀ2ν1ηκέϲ ἀ2ν1ήκο ἀ2ν1ήκο ἀ2ν1ηκό ἀ2ν1ηκό ἀ2ν1ηκο ἀ2ν1ηλάκ ἀ2ν1ηλάκ ἀ2ν1ηλακ ἀ2ν1ήλατος. ἀ2ν1ήλατος. ἀ2ν1ήλατοϲ. ἀ2ν1ήλατοϲ. ἀ2ν1ήλατοσ. ἀ2ν1ήλατοσ. ἀ2ν1ηλάτου ἀ2ν1ηλάτου ἀ2ν1ηλάτω ἀ2ν1ηλάτω ἀ2ν1ήλατον. ἀ2ν1ήλατον. ἀ2ν1ήλατε. ἀ2ν1ήλατε. ἀ2ν1ηλάτοι ἀ2ν1ηλάτοι ἀ2ν1ήλατοι ἀ2ν1ήλατοι ἀ2ν1ήλατα ἀ2ν1ήλατα ἀ2ν1ηλεγ ἀ2ν1ηλεή ἀ2ν1ηλεή ἀ2ν1ηλεὴ ἀ2ν1ηλεο ἀ2ν1ηλεε ἀ2ν1ηλεῶ ἀ2ν1ηλεέ ἀ2ν1ηλεέ ἀ2ν1ηλεὲ ἀ2ν1ηλεῆ ἀ2ν1ηλέη ἀ2ν1ηλέη ἀ2ν1ήλειπ ἀ2ν1ήλειπ ἀ2ν1ηλείπ ἀ2ν1ηλείπ ἀ2ν1ηλή ἀ2ν1ηλή ἀ2ν1ηλὴ ἀ2ν1ηλοῦ ἀ2ν1ηλεῖ ἀ2ν1ηλῆ ἀ2ν1ηλέ ἀ2ν1ηλέ ἀ2ν1ηλὲ ἀ2ν1ηλοῖ ἀ2ν1ηλῶ ἀ2ν1ήλικ ἀ2ν1ήλικ ἀ2ν1ηλίκ ἀ2ν1ηλίκ ἀ2ν1ήλιο ἀ2ν1ήλιο ἀ2ν1ηλίο ἀ2ν1ηλίο ἀ2ν1ηλίω ἀ2ν1ηλίω ἀ2ν1ήλια ἀ2ν1ήλια ἀ2ν1ήλιπ ἀ2ν1ήλιπ ἀ2ν1ηλίπ ἀ2ν1ηλίπ ἀ2ν1ηλιφ ἀ2ν1ήμ ἀ2ν1ήμ ἀ2ν1ημ ἀ2ν1ήνυ ἀ2ν1ήνυ ἀ2ν1ηνύ ἀ2ν1ηνύ ἀ2ν1ήρει ἀ2ν1ήρει ἀ2ν1ηρεί ἀ2ν1ηρεί ἀ2ν1ηρέμ ἀ2ν1ηρέμ ἀ2ν1ηρεμ ἀ2ν1ηρεφ ἀ2ν1ήρι ἀ2ν1ήρι ἀ2ν1ηρί ἀ2ν1ηρί ἀ2ν1ήροτ ἀ2ν1ήροτ ἀ2ν1ηρότ ἀ2ν1ηρότ ἀ2ν1ήσσ ἀ2ν1ήσσ ἀ2ν1ήϲϲ ἀ2ν1ήϲϲ ἀ2ν1ησσ ἀ2ν1ηϲϲ ἀ2ν1ήττ ἀ2ν1ήττ ἀ2ν1ηττ ἀ2ν1ήφα ἀ2ν1ήφα ἀ2ν1ηφα ἀ2ν1ίατ ἀ2ν1ίατ ἀ2ν1ιάτ ἀ2ν1ιάτ ἀ2ν1ίδιο ἀ2ν1ίδιο ἀ2ν1ιδίο ἀ2ν1ιδίο ἀ2ν1ιδίω ἀ2ν1ιδίω ἀ2ν1ίδια ἀ2ν1ίδια ἀ2ν1ιδιτ ἄ2ν1ιδρος ἄ2ν1ιδροϲ ἄ2ν1ιδροσ ἀ2ν1ίδρου ἀ2ν1ίδρου ἀ2ν1ίδρω ἀ2ν1ίδρω ἄ2ν1ιδρον ἄ2ν1ιδρε ἀ2ν1ίδροι ἀ2ν1ίδροι ἄ2ν1ιδροι ἀ2ν1ίδρυτ ἀ2ν1ίδρυτ ἀ2ν1ιδρύτ ἀ2ν1ιδρύτ ἀ2ν1ιδρωτ ἀ2ν1ιδρώτ ἀ2ν1ιδρώτ ἀ2ν1ίερ ἀ2ν1ίερ ἀ2ν1ιέρ ἀ2ν1ιέρ ἀ2ν1ιεράτ ἀ2ν1ιεράτ ἀ3ν2ιέρω ἀ3ν2ιέρω ἀ2ν1ίκ ἀ2ν1ίκ ἀ2ν1ικ ἄ2ν1ικ ἀ3ν2ίκη ἀ3ν2ίκη ἀ3ν2ική ἀ3ν2ική ἀ2ν1ίλ ἀ2ν1ίλ ἀ2ν1ιλ ἀ2ν1ίμαστ ἀ2ν1ίμαστ ἀ2ν1ίμαϲτ ἀ2ν1ίμαϲτ ἀ2ν1ιμάστ ἀ2ν1ιμάστ ἀ2ν1ιμάϲτ ἀ2ν1ιμάϲτ ἀ2ν1ίου ἀ2ν1ίου ἀ2ν1ιού ἀ2ν1ιού ἄ2ν1ιππ ἀ2ν1ίππ ἀ2ν1ίππ ἀ2ν1ισ ἀ2ν1ιϲ ἄ2ν1ισ ἄ2ν1ιϲ ἀ2ν1ίσ ἀ2ν1ίσ ἀ2ν1ίϲ ἀ2ν1ίϲ ἀ3ν2ισᾶτ ἀ3ν2ιϲᾶτ ἀ3ν2ισάτ ἀ3ν2ισάτ ἀ3ν2ιϲάτ ἀ3ν2ιϲάτ ἀ3ν2ίστ ἀ3ν2ίστ ἀ3ν2ίϲτ ἀ3ν2ίϲτ ἀ3ν2ιστ ἀ3ν2ιϲτ ἀ4ν3ιστορη ἀ4ν3ιϲτορη ἀ4ν3ιστόρη ἀ4ν3ιστόρη ἀ4ν3ιϲτόρη ἀ4ν3ιϲτόρη ἀ4ν3ιστορή ἀ4ν3ιστορή ἀ4ν3ιϲτορή ἀ4ν3ιϲτορή ἀ3ν2ίσχ ἀ3ν2ίσχ ἀ3ν2ίϲχ ἀ3ν2ίϲχ ἀ4ν3ίσχυ ἀ4ν3ίσχυ ἀ4ν3ίϲχυ ἀ4ν3ίϲχυ ἄ2ν1ιχ ἀ2ν1ίχ ἀ2ν1ίχ ἀ2ν1ιχνεύτ ἀ2ν1ιχνεύτ ἀ2ν1ίψ ἀ2ν1ίψ ἀ2ν1ιψ ἀ2ν1όδε ἀ2ν1όδε ἀ2ν1οδέ ἀ2ν1οδέ ἄ2ν1οζ ἀ2ν1όζ ἀ2ν1όζ ἀ2ν1οικε ἀ2ν1οικον ἄ2ν1οικ ἀ2ν1οίκ ἀ2ν1οίκ ἀ2ν1οικτί ἀ2ν1οικτί ἄ2ν1οικτ ἀ2ν1οίκτ ἀ2ν1οίκτ ἀ2ν1οίμωκ ἀ2ν1οίμωκ ἀ2ν1οιμώκ ἀ2ν1οιμώκ ἀ2ν1οιμωκ ἀ2ν1οιν ἄ2ν1οιν ἀ2ν1οίν ἀ2ν1οίν ἄ2ν1οιστρ ἄ2ν1οιϲτρ ἀ2ν1οίστρ ἀ2ν1οίστρ ἀ2ν1οίϲτρ ἀ2ν1οίϲτρ ἀ2ν1όλ ἀ2ν1όλ ἀ2ν1ολ ἄ2ν1ολ ἀ3ν2ολκ ἀ3ν2ολο ἀ2ν1ομβρί ἀ2ν1ομβρί ἀ2ν1ομβρῖ ἄ2ν1ομβρο ἀ2ν1όμβρο ἀ2ν1όμβρο ἀ2ν1όμβρω ἀ2ν1όμβρω ἄ2ν1ομβρα ἀ2ν1ομήλ ἀ2ν1ομήλ ἀ2ν1ομηλ ἀ2ν1ομίλ ἀ2ν1ομίλ ἀ2ν1ομιλ ἀ2ν1όμιχ ἀ2ν1όμιχ ἀ2ν1ομιχ ἀ2ν1όμο ἀ2ν1όμο ἀ2ν1ομό ἀ2ν1ομό ἀ2ν1ομο ἀ3ν2ομοθ ἀ3ν2όμου. ἀ3ν2όμου. ἀ3ν2όμῳ. ἀ3ν2όμῳ. ἀ3ν2όμω. ἀ3ν2όμω. ἀ2ν2όμοιν. ἀ2ν2όμοιν. ἀ3ν2όμων. ἀ3ν2όμων. ἀ3ν2όμοις. ἀ3ν2όμοις. ἀ3ν2όμοιϲ. ἀ3ν2όμοιϲ. ἀ3ν2όμοισ. ἀ3ν2όμοισ. ἀ3ν2όμους. ἀ3ν2όμους. ἀ3ν2όμουϲ. ἀ3ν2όμουϲ. ἀ3ν2όμουσ. ἀ3ν2όμουσ. ἀ2ν1όν ἀ2ν1όν ἀ2ν1ον ἄ2ν1οπ ἀ2ν1όπ ἀ2ν1όπ ἀ2ν1όρ ἀ2ν1όρ ἀ2ν1ορ ἄ2ν1ορ ἀ3ν2οργάζ ἀ3ν2οργάζ ἄ3ν2ορθ ἀ3ν2όρθ ἀ3ν2όρθ ἀ3ν2ορμά ἀ3ν2ορμά ἀ3ν2ορτ ἀ3ν2ορύ ἀ3ν2ορύ ἀ2ν1όσι ἀ2ν1όσι ἀ2ν1όϲι ἀ2ν1όϲι ἀ2ν1οσί ἀ2ν1οσί ἀ2ν1οϲί ἀ2ν1οϲί ἀ2ν1οσι ἀ2ν1οϲι ἄ2ν1οσμ ἄ2ν1οϲμ ἀ2ν1όσμ ἀ2ν1όσμ ἀ2ν1όϲμ ἀ2ν1όϲμ ἀ2ν1όσφρ ἀ2ν1όσφρ ἀ2ν1όϲφρ ἀ2ν1όϲφρ ἀ2ν1οσφρ ἀ2ν1οϲφρ ἀ2ν1ούα ἀ2ν1ούα ἀ2ν1ουά ἀ2ν1ουά ἀ2ν1ούσι ἀ2ν1ούσι ἀ2ν1ούϲι ἀ2ν1ούϲι ἀ2ν1ουσί ἀ2ν1ουσί ἀ2ν1ουϲί ἀ2ν1ουϲί ἀ2ν1ούτ ἀ2ν1ούτ ἀ2ν1ουτ ἀ2ν1οφθ ἀ2ν1όχευτ ἀ2ν1όχευτ ἀ2ν1οχεύτ ἀ2ν1οχεύτ ἄ2ν1οχλ ἀ2ν1όχλ ἀ2ν1όχλ ἀ2ν1οψ ἄ2ν1οψ ἀ2ν1όψ ἀ2ν1όψ ἀντα2ν1ισ ἀντα2ν1ιϲ ἀντα2ν1ίσ ἀντα2ν1ίσ ἀντα2ν1ίϲ ἀντα2ν1ίϲ ἀντει2σ1 ἀντει2ϲ1 ἀντε2κ1 ἀντε2ν1 ἀντε2ξ1 ἀντιδυ2σ1 ἀντιδυ2ϲ1 ἀντιπαρε2κ1 ἀντιπαρε2ξ1 ἀντιπρο2σ1 ἀντιπρο2ϲ1 ἀντιπροσ3κ2υ ἀντιπροϲ3κ2υ ἀντισύ2ν1 ἀντισύ2ν1 ἀντιϲύ2ν1 ἀντιϲύ2ν1 ἀντισυ2ν1 ἀντιϲυ2ν1 ἀ2ν1ύ ἀ2ν1ύ ἀ2ν1υ ἀ3ν2υμ ἀ3ν2ύσ ἀ3ν2ύσ ἀ3ν2ύϲ ἀ3ν2ύϲ ἀ3ν2υσ ἀ3ν2υϲ ἀ2ν1υπέ2ρ1 ἀ2ν1υπέ2ρ1 ἀ2ν1υπε2ρ1 ἄ2ν1ῳδ ἀ2ν1ῴδ ἀ2ν1ώδυ ἀ2ν1ώδυ ἀ2ν1ωδύ ἀ2ν1ωδύ ἀ2ν1ώι ἀ2ν1ώι ἀ2ν1ωί ἀ2ν1ωί ἀ2ν1ώλ ἀ2ν1ώλ ἀ2ν1ωλ ἀ2ν1ώμ ἀ2ν1ώμ ἀ2ν1ωμ ἀ2ν1ών ἀ2ν1ών ἀ2ν1ων ἀ2ν1ωρ ἄ2ν1ωρ ἀ2ν1ώρ ἀ2ν1ώρ ἄ2ν1ωτο ἀ2ν1ώτο ἀ2ν1ώτο ἀ2ν1ωφέλ ἀ2ν1ωφέλ ἀ2ν1ωφελ ἀ2ν1ώχυ ἀ2ν1ώχυ ἀ2ν1ωχύ ἀ2ν1ωχύ ἀπα2ν1αι ἀπά2ν1ου ἀπά2ν1ου ἀπα2ν1ούρ ἀπα2ν1ούρ ἁπα2ξ1 ἀπε2κ1λ ἁπε2ρ1 ἀποσυ2ν1 ἀποϲυ2ν1 ἀπρό2σ1 ἀπρό2σ1 ἀπρό2ϲ1 ἀπρό2ϲ1 ἀπρο2σ1 ἀπρο2ϲ1 ἀπρό3σ2κε ἀπρό3σ2κε ἀπρό3ϲ2κε ἀπρό3ϲ2κε ἀπρο3σ2κέ ἀπρο3σ2κέ ἀπρο3ϲ2κέ ἀπρο3ϲ2κέ ἀπρό3σ2κο ἀπρό3σ2κο ἀπρό3ϲ2κο ἀπρό3ϲ2κο ἀπρο3σ2κό ἀπρο3σ2κό ἀπρο3ϲ2κό ἀπρο3ϲ2κό ἀπρο3σ2τ ἀπρο3ϲ2τ ἁρπα2ξ1 ἀρρε2ν1ω ἀρχισυ2ν1 ἀρχιϲυ2ν1 ἀστε2ρ1ω ἀϲτε2ρ1ω ἀσύ2ν1 ἀσύ2ν1 ἀϲύ2ν1 ἀϲύ2ν1 ἀσυ2ν1 ἀϲυ2ν1 ἀξύ2ν1 ἀξύ2ν1 ἀξυ2ν1 αὐτέ2κ1μ αὐτέ2κ1μ αὐτε2κ1μ αὐτε2ξ1 ἀω2σ1φ ἀω2ϲ1φ .γερα2σ1φ .γερα2ϲ1φ .δα2σ1π .δα2ϲ1π .διαμφι2σ1β .διαμφι2ϲ1β .διέ2κ1ρο .διέ2κ1ρο .διε2κ1ρό .διε2κ1ρό .διέ2ξ1 .διέ2ξ1 .διε2ξ1 .δικα2σ1π .δικα2ϲ1π .διό2σ1κ .διό2σ1κ .διό2ϲ1κ .διό2ϲ1κ .διο2σ1κ .διο2ϲ1κ .διό2σ1π .διό2σ1π .διό2ϲ1π .διό2ϲ1π .διο2σ1π .διο2ϲ1π .δί2σ1α .δί2σ1α .δί2ϲ1α .δί2ϲ1α .δι2σ1ά .δι2σ1ά .δι2ϲ1ά .δι2ϲ1ά .δί2σ1η .δί2σ1η .δί2ϲ1η .δί2ϲ1η .δι2σ1ή .δι2σ1ή .δι2ϲ1ή .δι2ϲ1ή .δί2σ1ε .δί2σ1ε .δί2ϲ1ε .δί2ϲ1ε .δι2σ1ε .δι2ϲ1ε .δι2σ1θ .δι2ϲ1θ .δύ2σ1 .δύ2σ1 .δύ2ϲ1 .δύ2ϲ1 .δυ2σ1 .δυ2ϲ1 δύ3σ2ω. δύ3σ2ω. δύ3ϲ2ω. δύ3ϲ2ω. δύ3σ2εις. δύ3σ2εις. δύ3ϲ2ειϲ. δύ3ϲ2ειϲ. δύ3σ2εισ. δύ3σ2εισ. δύ3σ2ει. δύ3σ2ει. δύ3ϲ2ει. δύ3ϲ2ει. .δύ3σ2ετ .δύ3σ2ετ .δύ3ϲ2ετ .δύ3ϲ2ετ δύ3σ2ομεν. δύ3σ2ομεν. δύ3ϲ2ομεν. δύ3ϲ2ομεν. δύ3σ2ουσιν. δύ3σ2ουσιν. δύ3ϲ2ουϲιν. δύ3ϲ2ουϲιν. δύ3σ2οιμι. δύ3σ2οιμι. δύ3ϲ2οιμι. δύ3ϲ2οιμι. δύ3σ2οις. δύ3σ2οις. δύ3ϲ2οιϲ. δύ3ϲ2οιϲ. δύ3σ2οισ. δύ3σ2οισ. δύ3σ2οι. δύ3σ2οι. δύ3ϲ2οι. δύ3ϲ2οι. δύ3σ2οιτον. δύ3σ2οιτον. δύ3ϲ2οιτον. δύ3ϲ2οιτον. δυ3σ2οίτην. δυ3σ2οίτην. δυ3ϲ2οίτην. δυ3ϲ2οίτην. δύ3σ2οιμεν. δύ3σ2οιμεν. δύ3ϲ2οιμεν. δύ3ϲ2οιμεν. δύ3σ2οιτε. δύ3σ2οιτε. δύ3ϲ2οιτε. δύ3ϲ2οιτε. δύ3σ2οιεν. δύ3σ2οιεν. δύ3ϲ2οιεν. δύ3ϲ2οιεν. δύ3σ2ειν. δύ3σ2ειν. δύ3ϲ2ειν. δύ3ϲ2ειν. δύ3σ2ων. δύ3σ2ων. δύ3ϲ2ων. δύ3ϲ2ων. δύ3σ2ον δύ3σ2ον δύ3ϲ2ον δύ3ϲ2ον δυ3σ2όν δυ3σ2όν δυ3ϲ2όν δυ3ϲ2όν δύ3σ2ουσ δύ3σ2ουσ δύ3ϲ2ουϲ δύ3ϲ2ουϲ δυ3σ2ούσ δυ3σ2ούσ δυ3ϲ2ούϲ δυ3ϲ2ούϲ δύ3σ2ῃ δύ3σ2ῃ δύ3ϲ2ῃ δύ3ϲ2ῃ δύ3σ2ητον. δύ3σ2ητον. δύ3ϲ2ητον. δύ3ϲ2ητον. δύ3σ2ωμεν. δύ3σ2ωμεν. δύ3ϲ2ωμεν. δύ3ϲ2ωμεν. δύ3σ2ωσι. δύ3σ2ωσι. δύ3ϲ2ωϲι. δύ3ϲ2ωϲι. δύ3σ2αιμι. δύ3σ2αιμι. δύ3ϲ2αιμι. δύ3ϲ2αιμι. δύ3σ2αις. δύ3σ2αις. δύ3ϲ2αιϲ. δύ3ϲ2αιϲ. δύ3σ2ειας. δύ3σ2ειας. δύ3ϲ2ειαϲ. δύ3ϲ2ειαϲ. δύ3σ2αισ. δύ3σ2αισ. δύ3σ2ειασ. δύ3σ2ειασ. δύ3σ2αι. δύ3σ2αι. δύ3ϲ2αι. δύ3ϲ2αι. δύ3σ2ειε. δύ3σ2ειε. δύ3ϲ2ειε. δύ3ϲ2ειε. δύ3σ2αιτον. δύ3σ2αιτον. δύ3ϲ2αιτον. δύ3ϲ2αιτον. δυ3σ2αίτην. δυ3σ2αίτην. δυ3ϲ2αίτην. δυ3ϲ2αίτην. δύ3σ2αιμεν. δύ3σ2αιμεν. δύ3ϲ2αιμεν. δύ3ϲ2αιμεν. δύ3σ2αιτε. δύ3σ2αιτε. δύ3ϲ2αιτε. δύ3ϲ2αιτε. δύ3σ2αιεν δύ3σ2αιεν δύ3ϲ2αιεν δύ3ϲ2αιεν δύ3σ2ειαν. δύ3σ2ειαν. δύ3ϲ2ειαν. δύ3ϲ2ειαν. δύ3σ2ον. δύ3σ2ον. δύ3ϲ2ον. δύ3ϲ2ον. δυ3σ2άτω. δυ3σ2άτω. δυ3ϲ2άτω. δυ3ϲ2άτω. δύ3σ2ατον. δύ3σ2ατον. δύ3ϲ2ατον. δύ3ϲ2ατον. δυ3σ2άτων. δυ3σ2άτων. δυ3ϲ2άτων. δυ3ϲ2άτων. δύ3σ2ατε. δύ3σ2ατε. δύ3ϲ2ατε. δύ3ϲ2ατε. δυ3σ2άντων. δυ3σ2άντων. δυ3ϲ2άντων. δυ3ϲ2άντων. δύ3σ2ας. δύ3σ2ας. δύ3ϲ2αϲ. δύ3ϲ2αϲ. δύ3σ2αν. δύ3σ2αν. δύ3ϲ2αν. δύ3ϲ2αν. δύ3σ2αντ δύ3σ2αντ δύ3ϲ2αντ δύ3ϲ2αντ δυ3σ2άντ δυ3σ2άντ δυ3ϲ2άντ δυ3ϲ2άντ δύ3σ2ασ δύ3σ2ασ δύ3ϲ2αϲ δύ3ϲ2αϲ δυ3σ2άσ δυ3σ2άσ δυ3ϲ2άϲ δυ3ϲ2άϲ δύ3σ2ομαι. δύ3σ2ομαι. δύ3ϲ2ομαι. δύ3ϲ2ομαι. .δύ3σ2εσ .δύ3σ2εσ .δύ3ϲ2εϲ .δύ3ϲ2εϲ δυ3σ2όμεθα. δυ3σ2όμεθα. δυ3ϲ2όμεθα. δυ3ϲ2όμεθα. δύ3σ2ονται. δύ3σ2ονται. δύ3ϲ2ονται. δύ3ϲ2ονται. δυ3σ2οίμην. δυ3σ2οίμην. δυ3ϲ2οίμην. δυ3ϲ2οίμην. δύ3σ2οιο. δύ3σ2οιο. δύ3ϲ2οιο. δύ3ϲ2οιο. δύ3σ2οιτο. δύ3σ2οιτο. δύ3ϲ2οιτο. δύ3ϲ2οιτο. δύ3σ2οισθον. δύ3σ2οισθον. δύ3ϲ2οιϲθον. δύ3ϲ2οιϲθον. δυ3σ2οίσθην. δυ3σ2οίσθην. δυ3ϲ2οίϲθην. δυ3ϲ2οίϲθην. δυ3σ2οίμεθα. δυ3σ2οίμεθα. δυ3ϲ2οίμεθα. δυ3ϲ2οίμεθα. δύ3σ2οισθε. δύ3σ2οισθε. δύ3ϲ2οιϲθε. δύ3ϲ2οιϲθε. δύ3σ2οιντο. δύ3σ2οιντο. δύ3ϲ2οιντο. δύ3ϲ2οιντο. δύ3σ2εσθαι. δύ3σ2εσθαι. δύ3ϲ2εϲθαι. δύ3ϲ2εϲθαι. .δυ3σ2όμεν .δυ3σ2όμεν .δυ3ϲ2όμεν .δυ3ϲ2όμεν .δυ3σ2ομέν .δυ3σ2ομέν .δυ3ϲ2ομέν .δυ3ϲ2ομέν δύ3σ2ωμαι. δύ3σ2ωμαι. δύ3ϲ2ωμαι. δύ3ϲ2ωμαι. δύ3σ2ηται. δύ3σ2ηται. δύ3ϲ2ηται. δύ3ϲ2ηται. δυ3σ2ώμεθα δυ3σ2ώμεθα δυ3ϲ2ώμεθα δυ3ϲ2ώμεθα δύ3σ2ησθε. δύ3σ2ησθε. δύ3ϲ2ηϲθε. δύ3ϲ2ηϲθε. δυ3σ2αίμην. δυ3σ2αίμην. δυ3ϲ2αίμην. δυ3ϲ2αίμην. δύ3σ2αιο. δύ3σ2αιο. δύ3ϲ2αιο. δύ3ϲ2αιο. δύ3σ2αιτο. δύ3σ2αιτο. δύ3ϲ2αιτο. δύ3ϲ2αιτο. δύ3σ2αισθον. δύ3σ2αισθον. δύ3ϲ2αιϲθον. δύ3ϲ2αιϲθον. δυ3σ2αίσθην. δυ3σ2αίσθην. δυ3ϲ2αίϲθην. δυ3ϲ2αίϲθην. δυ3σ2αίμεθα. δυ3σ2αίμεθα. δυ3ϲ2αίμεθα. δυ3ϲ2αίμεθα. δύ3σ2αισθαι. δύ3σ2αισθαι. δύ3ϲ2αιϲθαι. δύ3ϲ2αιϲθαι. δύ3σ2αιντο. δύ3σ2αιντο. δύ3ϲ2αιντο. δύ3ϲ2αιντο. δυ3σ2άσθω. δυ3σ2άσθω. δυ3ϲ2άϲθω. δυ3ϲ2άϲθω. δύ3σ2ασθον. δύ3σ2ασθον. δύ3ϲ2αϲθον. δύ3ϲ2αϲθον. δυ3σ2άσθων. δυ3σ2άσθων. δυ3ϲ2άϲθων. δυ3ϲ2άϲθων. δύ3σ2ασθε. δύ3σ2ασθε. δύ3ϲ2αϲθε. δύ3ϲ2αϲθε. δύ3σ2ασθαι. δύ3σ2ασθαι. δύ3ϲ2αϲθαι. δύ3ϲ2αϲθαι. δυ3σ2άμεν δυ3σ2άμεν δυ3ϲ2άμεν δυ3ϲ2άμεν δυσ3σ2αμέν δυσ3σ2αμέν δυϲ3ϲ2αμέν δυϲ3ϲ2αμέν δύ3σ2ατο. δύ3σ2ατο. δύ3ϲ2ατο. δύ3ϲ2ατο. δύ3σ2ετο. δύ3σ2ετο. δύ3ϲ2ετο. δύ3ϲ2ετο. δύ3σ2αντο. δύ3σ2αντο. δύ3ϲ2αντο. δύ3ϲ2αντο. δύ3σ2εο. δύ3σ2εο. δύ3ϲ2εο. δύ3ϲ2εο. .δυσεί2σ1β .δυσεί2σ1β .δυϲεί2ϲ1β .δυϲεί2ϲ1β .δυσει2σ1β .δυϲει2ϲ1β .δυσέ2κ1 .δυσέ2κ1 .δυϲέ2κ1 .δυϲέ2κ1 .δυσε2κ1 .δυϲε2κ1 .δυσέ2ξ1 .δυσέ2ξ1 .δυϲέ2ξ1 .δυϲέ2ξ1 .δυσε2ξ1 .δυϲε2ξ1 .δυ3σ2ιθ .δυ3ϲ2ιθ δύ3σ2ις. δύ3σ2ις. δύ3ϲ2ιϲ. δύ3ϲ2ιϲ. δύ3σ2ισ. δύ3σ2ισ. δύ3σ2εω δύ3σ2εω δύ3ϲ2εω δύ3ϲ2εω δύ3σ2ιν. δύ3σ2ιν. δύ3ϲ2ιν. δύ3ϲ2ιν. δύ3σ2ι. δύ3σ2ι. δύ3ϲ2ι. δύ3ϲ2ι. δυ3σ2έοιν. δυ3σ2έοιν. δυ3ϲ2έοιν. δυ3ϲ2έοιν. δύ3σ2εσι. δύ3σ2εσι. δύ3ϲ2εϲι. δύ3ϲ2εϲι. δύ3σ2εσιν. δύ3σ2εσιν. δύ3ϲ2εϲιν. δύ3ϲ2εϲιν. .δύ3σ2κε .δύ3σ2κε .δύ3ϲ2κε .δύ3ϲ2κε .δυ3σ2μή. .δυ3σ2μή. .δυ3ϲ2μή. .δυ3ϲ2μή. .δυ3σ2μὴ. .δυ3ϲ2μὴ. .δυ3σ2μῆς. .δυ3ϲ2μῆϲ. .δυ3σ2μῆσ. .δυ3σ2μῇ .δυ3ϲ2μῇ .δυ3σ2μῆ. .δυ3ϲ2μῆ. .δυ3σ2μᾶ .δυ3ϲ2μᾶ .δυ3σ2μα .δυ3ϲ2μα .δυ3σ2μῶ .δυ3ϲ2μῶ .δυσξύ2ν1 .δυσξύ2ν1 .δυϲξύ2ν1 .δυϲξύ2ν1 .δυσξυ2ν1 .δυϲξυ2ν1 .δύ3σ2ταν .δύ3σ2ταν .δύ3ϲ2ταν .δύ3ϲ2ταν .δυ3σ2τάν .δυ3σ2τάν .δυ3ϲ2τάν .δυ3ϲ2τάν .δυ3σ2την .δυ3ϲ2την .δυ3σ2τήν .δυ3σ2τήν .δυ3ϲ2τήν .δυ3ϲ2τήν ἐδυ2σ1τ ἐδυ2ϲ1τ εἰ2ν1όδ εἰ2ν1όδ εἰ2ν1οδ εἰ2σ1 εἰ2ϲ1 εἴ2σ1 εἴ2ϲ1 εἰ3σ2ί. εἰ3σ2ί. εἰ3ϲ2ί. εἰ3ϲ2ί. εἰ3σ2ὶ. εἰ3ϲ2ὶ. εἰ3σ2ι. εἰ3ϲ2ι. εἰ3σ2ίν. εἰ3σ2ίν. εἰ3ϲ2ίν. εἰ3ϲ2ίν. εἰ3σ2ὶν. εἰ3ϲ2ὶν. εἰ3σ2ιν. εἰ3ϲ2ιν. εἴ3σ2ομ εἴ3ϲ2ομ εἴ3σ2ῃ. εἴ3ϲ2ῃ. εἴσει. εἴϲει. εἴ3σ2εται. εἴ3ϲ2εται. εἴ3σ2εσθον. εἴ3ϲ2εϲθον. εἰ3σ2όμ εἰ3σ2όμ εἰ3ϲ2όμ εἰ3ϲ2όμ εἴ3σ2εσθε. εἴ3ϲ2εϲθε. εἴ3σ2ονται εἴ3ϲ2ονται εἰ3σ2οίμην εἰ3σ2οίμην εἰ3ϲ2οίμην εἰ3ϲ2οίμην εἴ3σ2οιο εἴ3ϲ2οιο εἴ3σ2οιτο εἴ3ϲ2οιτο εἴ3σ2οισθον εἴ3ϲ2οιϲθον εἰ3σ2οίσθην εἰ3σ2οίσθην εἰ3ϲ2οίϲθην εἰ3ϲ2οίϲθην εἰ3σ2οίμεθα εἰ3σ2οίμεθα εἰ3ϲ2οίμεθα εἰ3ϲ2οίμεθα εἴ3σ2οισθε εἴ3ϲ2οιϲθε εἴ3σ2οιντο εἴ3ϲ2οιντο εἴ3σ2εσθαι εἴ3ϲ2εϲθαι εἰ3σ2όμεν εἰ3σ2όμεν εἰ3ϲ2όμεν εἰ3ϲ2όμεν εἰ3σ2ομέν εἰ3σ2ομέν εἰ3ϲ2ομέν εἰ3ϲ2ομέν εἴ3σ2άμην. εἴ3σ2άμην. εἴ3ϲ2άμην. εἴ3ϲ2άμην. εἴ3σ2ω εἴ3ϲ2ω εἴ3σ2ατο εἴ3ϲ2ατο εἴ3σ2ασθον εἴ3ϲ2αϲθον εἰ3σ2άσθην εἰ3σ2άσθην εἰ3ϲ2άϲθην εἰ3ϲ2άϲθην εἰ3σ2άμεθα εἰ3σ2άμεθα εἰ3ϲ2άμεθα εἰ3ϲ2άμεθα εἴ3σ2ασθε εἴ3ϲ2αϲθε εἴ3σ2αντο εἴ3ϲ2αντο εἴ3σ2ωμαι εἴ3ϲ2ωμαι εἴ3σ2ησθον εἴ3ϲ2ηϲθον εἰ3σ2ώμεθα εἰ3σ2ώμεθα εἰ3ϲ2ώμεθα εἰ3ϲ2ώμεθα εἴ3σ2ησθε εἴ3ϲ2ηϲθε εἴ3σ2ωνται εἴ3ϲ2ωνται εἰ3σ2αίμην εἰ3σ2αίμην εἰ3ϲ2αίμην εἰ3ϲ2αίμην εἴ3σ2αιο εἴ3ϲ2αιο εἴ3σ2αιτο εἴ3ϲ2αιτο εἴ3σ2αισθον εἴ3ϲ2αιϲθον εἴ3σ2αίσθην εἴ3σ2αίσθην εἴ3ϲ2αίϲθην εἴ3ϲ2αίϲθην εἰ3σ2αίμεθα εἰ3σ2αίμεθα εἰ3ϲ2αίμεθα εἰ3ϲ2αίμεθα εἴ3σ2αισθε εἴ3ϲ2αιϲθε εἴ3σ2αιντο εἴ3ϲ2αιντο εἰ3σ2άσθω εἰ3σ2άσθω εἰ3ϲ2άϲθω εἰ3ϲ2άϲθω εἰ3σ2άσθων εἰ3σ2άσθων εἰ3ϲ2άϲθων εἰ3ϲ2άϲθων εἴ3σ2ασθαι εἴ3ϲ2αϲθαι εἰ3σ2άμεν εἰ3σ2άμεν εἰ3ϲ2άμεν εἰ3ϲ2άμεν εἰ3σ2αμέν εἰ3σ2αμέν εἰ3ϲ2αμέν εἰ3ϲ2αμέν ἐ2κ1λ ἐ3κ2λήθη ἐ3κ2λήθη ἐ3κ2λάζ ἐ3κ2λάζ ἐ3κ2λάγ ἐ3κ2λάγ ἐ3κ2λάο ἐ3κ2λάο ἐ3κ2λάσ ἐ3κ2λάσ ἐ3κ2λάϲ ἐ3κ2λάϲ ἐ3κ2λαί ἐ3κ2λαί ἐ3κ2λαύ ἐ3κ2λαύ ἐ3κ2λεί ἐ3κ2λεί ἐ4κ3λείπ ἐ4κ3λείπ ἐ4κ3λείψ ἐ4κ3λείψ ἐ3κ2λῄ ἐ3κ2κλέπ ἐ3κ2κλέπ ἐ3κ2κλέψ ἐ3κ2κλέψ ἐ3κ2λάπ ἐ3κ2λάπ ἐ3κ2λαπ ἐ4κ3λάπτ ἐ4κ3λάπτ ἐ4κ3λαπτ ἐ3κ2λέφ ἐ3κ2λέφ ἐ3κ2λεφ ἐ3κ2λήρ ἐ3κ2λήρ ἐ3κ2ληρ ἐ3κ2λίν ἐ3κ2λίν ἐ3κ2λιν ἐ3κ2λύ ἐ3κ2λύ ἐ4κ3λύσεω ἐ4κ3λύσεω ἐ4κ3λύϲεω ἐ4κ3λύϲεω ἐ4κ3λύσει ἐ4κ3λύσει ἐ4κ3λύϲει ἐ4κ3λύϲει ἐ4κ3λύσεοι ἐ4κ3λύσεοι ἐ4κ3λύϲεοι ἐ4κ3λύϲεοι ἐ4κ3λύσεσι ἐ4κ3λύσεσι ἐ4κ3λύϲεϲι ἐ4κ3λύϲεϲι ἐ3κ2λόμ ἐ3κ2λόμ ἐ3κ2κλώσ ἐ3κ2κλώσ ἐ3κ2κλώϲ ἐ3κ2κλώϲ ἔ2κ1λει ἔ3κ2λεισ ἔ3κ2λειϲ ἔ2κ1λυσ ἔ2κ1λυϲ ἐ2κ1μ ἔ2κ1μ ἐ2κ1ν ἔ2κ1ν ἔ3κ2ναι ἐ3κ2ναί ἐ3κ2ναί ἔ3κ2νησ ἔ3κ2νηϲ ἐ3κ2νήσ ἐ3κ2νήσ ἐ3κ2νήϲ ἐ3κ2νήϲ ἐ3κ2νυ ἐ2κ1ρ ἔ2κ1ρ ἐ3κ2ράδ ἐ3κ2ράδ ἐ3κ2ραδ ἔ3κ2ραζ ἐ3κ2ράζ ἐ3κ2ράζ ἔ3κ2ραγ ἐ3κ2ράγ ἐ3κ2ράγ ἐ3κ2ράτ ἐ3κ2ράτ ἐ3κ2ρατ ἐ3κ2ραύγ ἐ3κ2ραύγ ἐ3κ2ραυγ ἔ3κ2ραι ἐ3κ2ραί ἐ3κ2ραί ἔ3κ2ραν ἐ3κ2ράν ἐ3κ2ράν ἐ3κ2ρήη ἐ3κ2ρήη ἐ3κ2ράα ἐ3κ2ράα ἐ3κ2ραά ἐ3κ2ραά ἐ3κ2ράθ ἐ3κ2ράθ ἐ3κ2ραθ ἔ3κ2ρεκ ἐ3κ2ρέκ ἐ3κ2ρέκ ἔ3κ2ρεξ ἐ3κ2ρέξ ἐ3κ2ρέξ ἐ3κ2ρέμ ἐ3κ2ρέμ ἐ3κ2ρεμ ἐ3κ2ρήμ ἐ3κ2ρήμ ἐ3κ2ρημ ἔ3κ2ριν ἐ3κ2ρίν ἐ3κ2ρίν ἐ3κ2ρίθ ἐ3κ2ρίθ ἐ3κ2ρότ ἐ3κ2ρότ ἐ3κ2ροτ ἔ3κ2ρου ἐ3κ2ρού ἐ3κ2ρού ἔ3κ2ρυπ ἐ3κ2ρύπ ἐ3κ2ρύπ ἔ3κ2ρυψ ἐ3κ2ρύψ ἐ3κ2ρύψ ἐ3κ2ρύβ ἐ3κ2ρύβ ἐ3κ2ρύφ ἐ3κ2ρύφ ἐ3κ2ρυσ ἐ3κ2ρυϲ ἔ3κ2ρωζ ἐ3κ2ρώζ ἐ3κ2ρώζ ἔ3κ2ρωξ ἐ3κ2ρώξ ἐ3κ2ρώξ ἐ2κ1ταθ ἔ2κ1ταμε. ἐ2κ1τάμν ἐ2κ1τάμν ἐ2κ1ταν ἐ2κ1ταρ ἐ2κ1τάσ ἐ2κ1τάσ ἐ2κ1τάϲ ἐ2κ1τάϲ ἐ2κ1τε ἐ2κ1τέ ἐ2κ1τέ ἐ3κ2τείν ἐ3κ2τείν ἐ2κ1τήκ ἐ2κ1τήκ ἐ2κ1τι ἔ2κ1τι ἐ2κ1τί ἐ2κ1τί ἔ3κ2τιζ ἐ3κ2τίζ ἐ3κ2τίζ ἔ3κ2τισα ἔ3κ2τιϲα ἐ3κ2τίσα ἐ3κ2τίσα ἐ3κ2τίϲα ἐ3κ2τίϲα ἐ2κ1τό ἐ2κ1τό ἐ2κ1το ἔ2κ1το ἐ3κ2τός. ἐ3κ2τός. ἐ3κ2τόϲ. ἐ3κ2τόϲ. ἐ3κ2τὸς. ἐ3κ2τὸϲ. ἐ3κ2τόσ. ἐ3κ2τόσ. ἐ3κ2τὸσ. ἐ2κ1τρ ἔ2κ1τυπο ἐ2κ1τύπου. ἐ2κ1τύπου. ἐ2κ1τύπῳ. ἐ2κ1τύπῳ. ἔ2κ1τυπε. ἐ2κ1τύπω. ἐ2κ1τύπω. ἐ2κτύποι. ἐ2κτύποι. ἐ2κ1τύπων. ἐ2κ1τύπων. ἐ2κ1τύποις. ἐ2κ1τύποις. ἐ2κ1τύποιϲ. ἐ2κ1τύποιϲ. ἐ2κ1τύποισ. ἐ2κ1τύποισ. ἐ2κ1τύπους. ἐ2κ1τύπους. ἐ2κ1τύπουϲ. ἐ2κ1τύπουϲ. ἐ2κ1τύπουσ. ἐ2κ1τύπουσ. ἔ2κ1τυπα. ἐ2κ1τυ ἑλλή2σ1π ἑλλή2σ1π ἑλλή2ϲ1π ἑλλή2ϲ1π ἑλλη2σ1π ἑλλη2ϲ1π ἐ2ν1 ἔ2ν1 ἐ3ν2άκις ἐ3ν2άκις ἐ3ν2άκιϲ ἐ3ν2άκιϲ ἐ3ν2ακισ ἐ3ν2ακιϲ ἐ3ν2ακόσ ἐ3ν2ακόσ ἐ3ν2ακόϲ ἐ3ν2ακόϲ ἐ3ν2ακοσ ἐ3ν2ακοϲ ἔ3ν2αρα. ἐ3ν2άρων. ἐ3ν2άρων. ἐ3ν2άροις. ἐ3ν2άροις. ἐ3ν2άροιϲ. ἐ3ν2άροιϲ. ἐ3ν2άροισ. ἐ3ν2άροισ. ἐ3ν2αρηφ ἐ4ν3αραρ ἐ3ν2άρεε ἐ3ν2άρεε ἐ3ν2αρέω ἐ3ν2αρέω ἐ3ν2αρέα ἐ3ν2αρέα ἐ3ν2αρεά ἐ3ν2αρεά ἐ3ν2άριε ἐ3ν2άριε ἐ3ν2αρίω ἐ3ν2αρίω ἐ3ν2αρία ἐ3ν2αρία ἐ3ν2αριά ἐ3ν2αριά ἔ3ν2ασσ ἔ3ν2αϲϲ ἐ3ν2άσσ ἐ3ν2άσσ ἐ3ν2άϲϲ ἐ3ν2άϲϲ ἐ3ν2άσθ ἐ3ν2άσθ ἐ3ν2άϲθ ἐ3ν2άϲθ ἐ3ν2ασθ ἐ3ν2αϲθ ἔ3ν2ατ ἐ3ν2άτ ἐ3ν2άτ ἐνδυ2σ1τ ἐνδυ2ϲ1τ ἐ3ν2έγκ ἐ3ν2έγκ ἐ3ν2εγκ ἔ3ν2εικ ἐ3ν2εῖκ ἐ3ν2εικ ἐ3ν2είκ ἐ3ν2είκ ἔ3ν2ειμ ἐ3ν2είμ ἐ3ν2είμ ἐ3ν2εμέσσ ἐ3ν2εμέσσ ἐ3ν2εμέϲϲ ἐ3ν2εμέϲϲ ἐ3ν2εμήθ ἐ3ν2εμήθ ἐ3ν2ενή ἐ3ν2ενή ἐ3ν2εό ἐ3ν2εό ἐ3ν2εὸ ἐ3ν2εο ἐ3ν2εῶ ἐ3ν2εά ἐ3ν2εά ἐ3ν2εὰ ἐ3ν2εᾶ ἐ3ν2έπει ἐ3ν2έπει ἔ3ν2ερθε ἔ3ν2ευσ ἔ3ν2ευϲ ἐ3ν2εύσ ἐ3ν2εύσ ἐ3ν2εύϲ ἐ3ν2εύϲ ἐ3ν2έχθ ἐ3ν2έχθ ἐ3ν2εχθ ἔ3ν2ησ ἔ3ν2ηϲ ἐ3ν2ήσ ἐ3ν2ήσ ἐ3ν2ήϲ ἐ3ν2ήϲ ἐ3ν2ηή ἐ3ν2ηή ἐ3ν2ηὴ ἔ3ν2ην. ἐ3ν2ηεί ἐ3ν2ηεί ἐ3ν2ηο ἐ3ν2ηῶ ἐ3νηέ ἐ3νηέ ἐ3ν2ήνο ἐ3ν2ήνο ἐ3ν2ί ἐ3ν2ί ἐ3ν2ι ἔ3ν2ι ἐ4ν3ιαύ ἐ4ν3ιαύ ἐ5ν4ιαύσ ἐ5ν4ιαύσ ἐ5ν4ιαύϲ ἐ5ν4ιαύϲ ἐ5ν4ιαυσ ἐ5ν4ιαυϲ ἐ4ν3ιδρ ἐ4ν3ίδρ ἐ4ν3ίδρ ἐ4ν3ίζ ἐ4ν3ίζ ἐ4ν3ίη ἐ4ν3ίη ἐ4ν3ιέτον. ἐ4ν3ιέτον. ἐ4ν3ίεμεν. ἐ4ν3ίεμεν. ἐ4ν3ίω. ἐ4ν3ίω. ἐ4ν3ιππ ἐ4ν3ίππ ἐ4ν3ίππ ἐ4ν3ίπτ ἐ4ν3ίπτ ἐ4ν3ίψ ἐ4ν3ίψ ἐ4ν3ίσσ ἐ4ν3ίσσ ἐ4ν3ίϲϲ ἐ4ν3ίϲϲ ἐ4ν3ίστ ἐ4ν3ίστ ἐ4ν3ίϲτ ἐ4ν3ίϲτ ἐ4ν3ιστ ἐ4ν3ιϲτ ἐ4ν3ισχ ἐ4ν3ιϲχ ἐ4ν3ίσχ ἐ4ν3ίσχ ἐ4ν3ίϲχ ἐ4ν3ίϲχ ἔ3ν2ος. ἔ3ν2οϲ. ἔ3ν2οσ. ἔ3ν2ου. ἔ3ν2ον. ἔ3ν2ω ἔ3ν2οι. ἔ3ν2οις. ἔ3ν2οιϲ. ἔ3ν2οισ. ἔ3ν2ης. ἔ3ν2ηϲ. ἔ3ν2ησ. ἔ3ν2ῃ. ἔ3ν2η. ἔ3ν2οσι ἔ3ν2οϲι ἐ3ν2όσε ἐ3ν2όσε ἐ3ν2όϲε ἐ3ν2όϲε ἐ3ν2υάλ ἐ3ν2υάλ ἐ3ν2υαλ ἔ3ν2υξ ἐ3ν2υξ ἐ3ν2ύξ ἐ3ν2ύξ ἐ3ν2ύσ ἐ3ν2ύσ ἐ3ν2ύϲ ἐ3ν2ύϲ ἐ3ν2υσ ἐ3ν2υϲ ἐ3ν2υώ ἐ3ν2υώ ἐ3ν2υὼ ἐ3ν2υόο ἐ3ν2υόο ἐ3ν2υοῦς ἐ3ν2υοῦϲ ἐ2ξ1 ἔ2ξ1 ἐ3ξ2ήρ ἐ3ξ2ήρ ἐ3ξ2ηρ ἐ3ξ2υ2ν1 ἐ3ξ2υρ ἐ3ξ2ύρ ἐ3ξ2ύρ ἔ3ξ2υσ ἔ3ξ2υϲ ἔ3ξ2ω. ἑ2ξ1ήρετμ ἑ2ξ1ήρετμ ἑ2ξ1ηρέτμ ἑ2ξ1ηρέτμ ἐπεί2σ1 ἐπεί2σ1 ἐπεί2ϲ1 ἐπεί2ϲ1 ἐπει2σ1 ἐπει2ϲ1 ἐπεί3σ2ατον. ἐπεί3σ2ατον. ἐπεί3ϲ2ατον. ἐπεί3ϲ2ατον. ἐπει3σ2άτην. ἐπει3σ2άτην. ἐπει3ϲ2άτην. ἐπει3ϲ2άτην. ἐπεί3σ2αμεν. ἐπεί3σ2αμεν. ἐπεί3ϲ2αμεν. ἐπεί3ϲ2αμεν. ἐπεί3σ2ατε ἐπεί3σ2ατε ἐπεί3ϲ2ατε ἐπεί3ϲ2ατε ἐπει3σ2άμην. ἐπει3σ2άμην. ἐπει3ϲ2άμην. ἐπει3ϲ2άμην. ἐπεί3σ2ω. ἐπεί3σ2ω. ἐπεί3ϲ2ω. ἐπεί3ϲ2ω. ἐπεί3σ2ατο ἐπεί3σ2ατο ἐπεί3ϲ2ατο ἐπεί3ϲ2ατο ἐπεί3σ2ασθον. ἐπεί3σ2ασθον. ἐπεί3ϲ2αϲθον. ἐπεί3ϲ2αϲθον. ἐπει3σ2άμεθα. ἐπει3σ2άμεθα. ἐπει3ϲ2άμεθα. ἐπει3ϲ2άμεθα. ἐπεί3σ2ασθε. ἐπεί3σ2ασθε. ἐπεί3ϲ2αϲθε. ἐπεί3ϲ2αϲθε. ἐπεί3σ2αντο. ἐπεί3σ2αντο. ἐπεί3ϲ2αντο. ἐπεί3ϲ2αντο. ἐπεί3σ2θ ἐπεί3σ2θ ἐπεί3ϲ2θ ἐπεί3ϲ2θ ἐπει3σ2θ ἐπει3ϲ2θ ἐπε2κ1τεί ἐπε2κ1τεί ἐπέ2κ1τει ἐπέ2κ1τει ἐπε2κ1τρ ἐπέ2κ1τρ ἐπέ2κ1τρ ἐπε2ξ1 ἐπε2σ1β ἐπε2ϲ1β ἐπιπρό2σ1θ ἐπιπρό2σ1θ ἐπιπρό2ϲ1θ ἐπιπρό2ϲ1θ ἐπιπρο2σ1θ ἐπιπρο2ϲ1θ ἐπισυ2ν1 ἐπιϲυ2ν1 ἐ2σ1 ἐ2ϲ1 ἐ3σ2άω ἐ3σ2άω ἐ3ϲ2άω ἐ3ϲ2άω ἐ3σ2ημ ἐ3ϲ2ημ ἐ3σ2θ ἐ3ϲ2θ ἐ4σ3θέσ ἐ4σ3θέσ ἐ4ϲ3θέϲ ἐ4ϲ3θέϲ ἐ3σ2ιγ ἐ3ϲ2ιγ ἐ3σ2κ ἐ3ϲ2κ ἐ4σ3κά ἐ4σ3κά ἐ4ϲ3κά ἐ4ϲ3κά ἐ4σ3κα ἐ4ϲ3κα ἐ3σ2μὲν. ἐ3ϲ2μὲν. ἐ3σ2μέν. ἐ3σ2μέν. ἐ3ϲ2μέν. ἐ3ϲ2μέν. ἐ3σ2τ ἐ3ϲ2τ ἐ3σ2όμεθα ἐ3σ2όμεθα ἐ3ϲ2όμεθα ἐ3ϲ2όμεθα ἐ3σ2οίμην ἐ3σ2οίμην ἐ3ϲ2οίμην ἐ3ϲ2οίμην ἐ3σ2όμ ἐ3σ2όμ ἐ3ϲ2όμ ἐ3ϲ2όμ ἐ3σ2ομ ἐ3ϲ2ομ ἐ3σ2οῦ ἐ3ϲ2οῦ ἐ3σ2ού ἐ3σ2ού ἐ3ϲ2ού ἐ3ϲ2ού ἐ3σ2ου ἐ3ϲ2ου ἐ3σ2υ ἐ3ϲ2υ ἐ3σ2ύ ἐ3σ2ύ ἐ3ϲ2ύ ἐ3ϲ2ύ ἐσύ2ν1 ἐσύ2ν1 ἐϲύ2ν1 ἐϲύ2ν1 ἐσυ2ν1 ἐϲυ2ν1 ἐ3σ2χ ἐ3ϲ2χ ἐ4σ3χέ ἐ4σ3χέ ἐ4ϲ3χέ ἐ4ϲ3χέ ἐ3σ2ώ ἐ3σ2ώ ἐ3ϲ2ώ ἐ3ϲ2ώ ἐ3σ2ω ἐ3ϲ2ω ἔ2σ1οπ ἔ2ϲ1οπ εὐε2ξ1 εὐε3ξ2ί εὐε3ξ2ί εὐε3ξ2ι εὐπρό2σ1 εὐπρό2σ1 εὐπρό2ϲ1 εὐπρό2ϲ1 εὐπρο2σ1 εὐπρο2ϲ1 εὐσύ2ν1 εὐσύ2ν1 εὐϲύ2ν1 εὐϲύ2ν1 εὐσυ2ν1 εὐϲυ2ν1 εὐξύ2ν1 εὐξύ2ν1 εὐξυ2ν1 ἐω2σ1φ ἐω2ϲ1φ ἤ2ν1οψ. ἤ2ν1οπ ἠ2ν1όπ ἠ2ν1όπ .θεμι2σ1κρ .θεμι2ϲ1κρ .θεό2σ1δ .θεό2σ1δ .θεό2ϲ1δ .θεό2ϲ1δ .θεο2σ1δ .θεο2ϲ1δ .θεοι2σ1εχθρ .θεοι2ϲ1εχθρ .θη2ρ1αγρ .θυο2σ1κ .θυο2ϲ1κ .καθυπε2ρ1 .καλω2σ1ορ .καλω2ϲ1ορ .καλω2σ1όρ .καλω2σ1όρ .καλω2ϲ1όρ .καλω2ϲ1όρ .κα2ν1είς. .κα2ν1είς. .κα2ν1είϲ. .κα2ν1είϲ. .κα2ν1εὶς. .κα2ν1εὶϲ. .κα2ν1είσ. .κα2ν1είσ. .κα2ν1εὶσ. .κα2ν1εν .κα2ν1έν .κα2ν1έν .καταδυ2σ1ωπ .καταδυ2ϲ1ωπ .κατεδυ2σ1ώπ .κατεδυ2σ1ώπ .κατεδυ2ϲ1ώπ .κατεδυ2ϲ1ώπ .κατει2σ1 .κατει2ϲ1 .κατε2ν1αί .κατε2ν1αί .κατε2ν1ή .κατε2ν1ή .κατε2ξ1α2ν1ί .κατε2ξ1α2ν1ί .κατε2ξ1α2ν1έσ .κατε2ξ1α2ν1έσ .κατε2ξ1α2ν1έϲ .κατε2ξ1α2ν1έϲ .κερα2σ1φ .κερα2ϲ1φ .κρά2σ1π .κρά2σ1π .κρά2ϲ1π .κρά2ϲ1π .κρα2σ1π .κρα2ϲ1π .κυνό2σ1α .κυνό2σ1α .κυνό2ϲ1α .κυνό2ϲ1α .κυνό2σ1β .κυνό2σ1β .κυνό2ϲ1β .κυνό2ϲ1β .κυνο2σ1β .κυνο2ϲ1β .κυνό2σ1ο .κυνό2σ1ο .κυνό2ϲ1ο .κυνό2ϲ1ο .κυνο2σ1ο .κυνο2ϲ1ο .κυνο2σ1φ .κυνο2ϲ1φ .μελα2ν1άγ .μελα2ν1άγ .μελα2ν1αγ .μελα2ν1άε .μελα2ν1άε .μελα2ν1αέ .μελα2ν1αέ .μελα2ν1αθ .μελα2ν1αιγ .μελα2ν1αυγ .μελα2ν1είμ .μελα2ν1είμ .μελα2ν1εῖμ .μελά2ν1ιππ .μελά2ν1ιππ .μελα2ν1ίππ .μελα2ν1ίππ .μελα2ν1όμμ .μελα2ν1όμμ .μελα2ν1ομμ .μελά2ν1οσσ .μελά2ν1οσσ .μελά2ν1οϲϲ .μελά2ν1οϲϲ .μελα2ν1όσσ .μελα2ν1όσσ .μελα2ν1όϲϲ .μελα2ν1όϲϲ .μελά2ν1οστ .μελά2ν1οστ .μελά2ν1οϲτ .μελά2ν1οϲτ .μελα2ν1όστ .μελα2ν1όστ .μελα2ν1όϲτ .μελα2ν1όϲτ .μελά2ν1ουρ .μελά2ν1ουρ .μελα2ν1ούρ .μελα2ν1ούρ .μελα2ν1ουρ .μελά2ν1υ .μελά2ν1υ .μελα2ν1ύ .μελα2ν1ύ .μετε2ξ1α .μετε2ξ1έ .μετε2ξ1έ .μετε2ξ1ε .μογι2σ1 .μογι2ϲ1 .μογο2σ1τ .μογο2ϲ1τ .μυ2σ1π .μυ2ϲ1π .μυ2σ1επ .μυ2ϲ1επ .νεώ2σ1οικ .νεώ2σ1οικ .νεώ2ϲ1οικ .νεώ2ϲ1οικ .νεω2σ1οίκ .νεω2σ1οίκ .νεω2ϲ1οίκ .νεω2ϲ1οίκ .νου2ν1ε .ξυ2ν1αγ .ξυ2ν1ε .ξυ2ν1έ .ξυ2ν1έ .ξύ2ν1ε .ξύ2ν1ε .ξυ3ν2εώ .ξυ3ν2εώ .ξυ3ν2εῶ .ξυ2ν1ῆκ .ξύ2ν1ι .ξύ2ν1ι .ξυ2ν1ί .ξυ2ν1ί οἱο2ν1εί. οἱο2ν1εί. οἱο2ν1εὶ. οἱό2σ1 οἱό2σ1 οἱό2ϲ1 οἱό2ϲ1 οἰ2σ1πώτ οἰ2σ1πώτ οἰ2ϲ1πώτ οἰ2ϲ1πώτ οἰ2σ1πωτ οἰ2ϲ1πωτ ὁλο2ν1έν. ὁλο2ν1έν. ὁλο2ν1ὲν. ὁπω2σ1 ὁπω2ϲ1 ὅ2σ1γε. ὅ2ϲ1γε. ὁσο2ν1ῶν. ὁϲο2ν1ῶν. ὅ2σ1περ. ὅ2ϲ1περ. ὅ2σ1τις ὅ2ϲ1τιϲ οἷ2σ1τισι οἷ2ϲ1τιϲι οὕ2σ1τινας οὕ2ϲ1τιναϲ ἧ2σ1τινος ἧ2ϲ1τινοϲ αἷ2σ1τισι αἷ2ϲ1τιϲι ἅ2σ1τινας ἅ2ϲ1τιναϲ ὁ2σ1τι2σ1οῦν. ὁ2ϲ1τι2ϲ1οῦν. ἡτι2σ1οῦν. ἡτι2ϲ1οῦν. ὁποιου2σ1τινα2σ1οῦν. ὁποιου2ϲ1τινα2ϲ1οῦν. οὐδενό2σ1ω οὐδενό2σ1ω οὐδενό2ϲ1ω οὐδενό2ϲ1ω οὐδενο2σ1ώ οὐδενο2σ1ώ οὐδενο2ϲ1ώ οὐδενο2ϲ1ώ .παλι2ν1 .παλί2ν1 .παλί2ν1 .πα2ν1 .πά2ν1 .πά2ν1 .πα3ν2ός. .πα3ν2ός. .πα3ν2όϲ. .πα3ν2όϲ. .πα3ν2ὸς. .πα3ν2ὸϲ. .πα3ν2όσ. .πα3ν2όσ. .πα3ν2ὸσ. .πα3ν2ί. .πα3ν2ί. .πα3ν2ὶ. .πάνα. .πάνα. .πα3ν2ῶν. .πα3ν2ικ .πα3ν2ίσδ .πα3ν2ίσδ .πα3ν2ίϲδ .πα3ν2ίϲδ .πα3ν2ισδ .πα3ν2ιϲδ .πα3ν2οῦ. .πα3ν2ῷ. .πα3ν2ό. .πα3ν2ό. .πα3ν2ὸ. .πα3ν2όν. .πα3ν2όν. .πα3ν2ὸν. .πα3ν2έ. .πα3ν2έ. .πα3ν2ὲ. .πα3ν2οί. .πα3ν2οί. .πα3ν2οὶ. .πα3ν2οῖς. .πα3ν2οῖϲ. .πα3ν2οῖσ. .πα3ν2ούς. .πα3ν2ούς. .πα3ν2ούϲ. .πα3ν2ούϲ. .πα3ν2οὺς. .πα3ν2οὺϲ. .πα3ν2ούσ. .πα3ν2ούσ. .πα3ν2οὺσ. .παρα2ν1ίσχ .παρα2ν1ίσχ .παρα2ν1ίϲχ .παρα2ν1ίϲχ .παρεί2σ1 .παρεί2σ1 .παρεί2ϲ1 .παρεί2ϲ1 .παρει2σ1 .παρει2ϲ1 .παρε2κ1λ .παρε2κ1τρ .παρε2ν1εῖ .παρε2ν1ο .παρε2ξ1 .παρέ2ξ1 .παρέ2ξ1 παρέ3ξ2ω. παρέ3ξ2ω. παρέ3ξ2εις. παρέ3ξ2εις. παρέ3ξ2ειϲ. παρέ3ξ2ειϲ. παρέ3ξ2εισ. παρέ3ξ2εισ. παρέ3ξ2ει. παρέ3ξ2ει. παρέ3ξ2ετον. παρέ3ξ2ετον. παρε3ξ2έτην. παρε3ξ2έτην. παρέ3ξ2ομεν. παρέ3ξ2ομεν. παρέ3ξ2ετε. παρέ3ξ2ετε. παρέ3ξ2ουσι. παρέ3ξ2ουσι. παρέ3ξ2ουϲι. παρέ3ξ2ουϲι. παρέ3ξ2ομαι παρέ3ξ2ομαι παρέ3ξ2ῃ παρέ3ξ2ῃ παρέ3ξ2εται. παρέ3ξ2εται. παρέ3ξ2εσθον. παρέ3ξ2εσθον. παρέ3ξ2εϲθον. παρέ3ξ2εϲθον. παρε3ξ2όμεθα. παρε3ξ2όμεθα. παρέ3ξ2εσθε. παρέ3ξ2εσθε. παρέ3ξ2εϲθε. παρέ3ξ2εϲθε. παρέ3ξ2ονται. παρέ3ξ2ονται. .πλεο2ν1έ .πλεο2ν1έ .πλεο2ν1ε .προει2σ1 .προει2ϲ1 .προε2κ1 .προε2ν1 .προε2ξ1 .προέ2ξ1 .προέ2ξ1 .προ2σ1 .προ2ϲ1 .προ3σ2άβ .προ3σ2άβ .προ3ϲ2άβ .προ3ϲ2άβ .προ3σ2αβ .προ3ϲ2αβ .προσει2σ1 .προϲει2ϲ1 .προ3σ2εί .προ3σ2εί .προ3ϲ2εί .προ3ϲ2εί .προ3σ2έσει .προ3σ2έσει .προ3ϲ2έϲει .προ3ϲ2έϲει .προ3σ2εσεί .προ3σ2εσεί .προ3ϲ2εϲεί .προ3ϲ2εϲεί .προσε2ν1 .προϲε2ν1 .προσε2ξ1 .προϲε2ξ1 .πρό3σ2θι .πρό3σ2θι .πρό3ϲ2θι .πρό3ϲ2θι .προ3σ2θί .προ3σ2θί .προ3ϲ2θί .προ3ϲ2θί .προ4σ3θιγ .προ4ϲ3θιγ .πρό3σ2κοπ .πρό3σ2κοπ .πρό3ϲ2κοπ .πρό3ϲ2κοπ .προ3σ2κόπ .προ3σ2κόπ .προ3ϲ2κόπ .προ3ϲ2κόπ .προ3σ2τασ .προ3ϲ2ταϲ .προ3σ2τάτ .προ3σ2τάτ .προ3ϲ2τάτ .προ3ϲ2τάτ .προ3σ2τατ .προ3ϲ2τατ .προ3σ2ταυ .προ3ϲ2ταυ .προ3σ2τεί .προ3σ2τεί .προ3ϲ2τεί .προ3ϲ2τεί .προ3σ2τεν .προ3ϲ2τεν .προ3σ2τέν .προ3σ2τέν .προ3ϲ2τέν .προ3ϲ2τέν .προ3σ2τερν .προ3ϲ2τερν .πρό3σ2τερν .πρό3σ2τερν .πρό3ϲ2τερν .πρό3ϲ2τερν .προ3σ2τέρν .προ3σ2τέρν .προ3ϲ2τέρν .προ3ϲ2τέρν .προ3σ2τήσ .προ3σ2τήσ .προ3ϲ2τήϲ .προ3ϲ2τήϲ .προ3σ2τόμ .προ3σ2τόμ .προ3ϲ2τόμ .προ3ϲ2τόμ .προ3σ2τομ .προ3ϲ2τομ .πρό3σ2τῳ .πρό3σ2τῳ .πρό3ϲ2τῳ .πρό3ϲ2τῳ .προ3σ2τῴ .προ3ϲ2τῴ .προ3σ2υγ .προ3ϲ2υγ .προ3σ2υμ .προ3ϲ2υμ .προ3σ2υ2ν1 .προ3ϲ2υ2ν1 .πρό3σ2φαγμ .πρό3σ2φαγμ .πρό3ϲ2φαγμ .πρό3ϲ2φαγμ .προ3σ2φάγμ .προ3σ2φάγμ .προ3ϲ2φάγμ .προ3ϲ2φάγμ .προ3σ2φάζ .προ3σ2φάζ .προ3ϲ2φάζ .προ3ϲ2φάζ .προ3σ2φάττ .προ3σ2φάττ .προ3ϲ2φάττ .προ3ϲ2φάττ .πρό3σ2χημ .πρό3σ2χημ .πρό3ϲ2χημ .πρό3ϲ2χημ .προ3σ2χήμ .προ3σ2χήμ .προ3ϲ2χήμ .προ3ϲ2χήμ .πρό3σ2ω. .πρό3σ2ω. .πρό3ϲ2ω. .πρό3ϲ2ω. .πρό3σ2ωθεν. .πρό3σ2ωθεν. .πρό3ϲ2ωθεν. .πρό3ϲ2ωθεν. .προ3σ2ώτ .προ3σ2ώτ .προ3ϲ2ώτ .προ3ϲ2ώτ .προ3σ2ωτ .προ3ϲ2ωτ .προϋπε2ξ1 .πυ2ρ1άγ .πυ2ρ1άγ .πυ2ρ1αγ .πυ2ρ1αίθ .πυ2ρ1αίθ .πυ2ρ1αιθ .πυ2ρ1ῆθ .πυ2ρ1ηθ .πυ2ρ1ήθ .πυ2ρ1ήθ .πυ2ρ1ακ .πύ2ρ1αυ .πύ2ρ1αυ .πυ2ρ1αύ .πυ2ρ1αύ .πυ2ρ1αυ .πυ2ρ1ήνεμ .πυ2ρ1ήνεμ .πυ2ρ1ηνέμ .πυ2ρ1ηνέμ .πυ2ρ1ωπ .σελα2σ1φό .σελα2σ1φό .ϲελα2ϲ1φό .ϲελα2ϲ1φό .σελα2σ1φο .ϲελα2ϲ1φο .συμπαρει2σ1 .ϲυμπαρει2ϲ1 .συ2ν1 .ϲυ2ν1 .σύ2ν1 .σύ2ν1 .ϲύ2ν1 .ϲύ2ν1 .συνδιέ2ξ1 .συνδιέ2ξ1 .ϲυνδιέ2ξ1 .ϲυνδιέ2ξ1 .συνδιε2ξ1 .ϲυνδιε2ξ1 .συνδυ2σ1 .ϲυνδυ2ϲ1 .συνε2ξ1 .ϲυνε2ξ1 .τεσσαρε2σ1κ .τεϲϲαρε2ϲ1κ .τρει2σ1κ .τρει2ϲ1κ .τρι2σ1 .τρι2ϲ1 .τρι3σ2μό .τρι3σ2μό .τρι3ϲ2μό .τρι3ϲ2μό .τρι3σ2μο .τρι3ϲ2μο .τρι3σ2μῶ .τρι3ϲ2μῶ .τρι3σ2π .τρι3ϲ2π .τρί3σ2τ .τρί3σ2τ .τρί3ϲ2τ .τρί3ϲ2τ .τρι3σ2τ .τρι3ϲ2τ .τρι3σ2ώ .τρι3σ2ώ .τρι3ϲ2ώ .τρι3ϲ2ώ .τρι3σ2ω .τρι3ϲ2ω ὑο2σ1κ ὑο2ϲ1κ ὑπεί2σ1 ὑπεί2σ1 ὑπεί2ϲ1 ὑπεί2ϲ1 ὑπει2σ1 ὑπει2ϲ1 ὑπεί3σ2ας ὑπεί3σ2ας ὑπεί3ϲ2αϲ ὑπεί3ϲ2αϲ ὑπεί3σ2ασ ὑπεί3σ2ασ ὑπεί3σ2αν ὑπεί3σ2αν ὑπεί3ϲ2αν ὑπεί3ϲ2αν ὑπει3σ2άν ὑπει3σ2άν ὑπει3ϲ2άν ὑπει3ϲ2άν ὑπει3σ2άσ ὑπει3σ2άσ ὑπει3ϲ2άϲ ὑπει3ϲ2άϲ ὑπε2κ1λαμ ὑπε2κ1λήψ ὑπε2κ1λήψ ὑπε2κ1τ ὑπε2ν1 ὑπε2ξ1 ὑπε2ρ1 ὑπέ2ρ1 ὑπέ2ρ1 ὑπέ3ρ2α. ὑπέ3ρ2α. ὑπέ3ρ2ης. ὑπέ3ρ2ης. ὑπέ3ρ2ηϲ. ὑπέ3ρ2ηϲ. ὑπέ3ρ2ησ. ὑπέ3ρ2ησ. ὑπέ3ρ2ᾳ. ὑπέ3ρ2ᾳ. ὑπέ3ρ2αν. ὑπέ3ρ2αν. ὑπέ3ρ2αι. ὑπέ3ρ2αι. ὑπε3ρ2ῶν. ὑπέ3ρ2αις. ὑπέ3ρ2αις. ὑπέ3ρ2αιϲ. ὑπέ3ρ2αιϲ. ὑπέ3ρ2αισ. ὑπέ3ρ2αισ. ὑπέ3ρ2ας. ὑπέ3ρ2ας. ὑπέ3ρ2αϲ. ὑπέ3ρ2αϲ. ὑπέ3ρ2ασ. ὑπέ3ρ2ασ. ὑπε3ρ2εθ ὑπε3ρ2έθ ὑπε3ρ2έθ ὑπε3ρ2εί ὑπε3ρ2εί ὑπέ3ρ2υθ ὑπέ3ρ2υθ ὑπε3ρ2ύθ ὑπε3ρ2ύθ ὑπε3ρ2υθ ὑπερε2κ1τε ὑπερε2κ1τί ὑπερε2κ1τί ὑπε3ρ2έπτ ὑπε3ρ2έπτ ὑπε3ρ2επτ ὑπε3ρ2έψ ὑπε3ρ2έψ ὑπε3ρ2εψ ὑπε3ρ2έω ὑπε3ρ2έω ὑπε3ρ2ῶ ὑπε3ρ2έε ὑπε3ρ2έε ὑπε3ρ2εῖς. ὑπε3ρ2εῖϲ. ὑπε3ρ2εῖσ. ὑπε3ρ2εῖ. ὑπε3ρ2έο ὑπε3ρ2έο ὑπε3ρ2οῦ ὑπε3ρ2εῖτ ὑπε3ρ2ώ ὑπε3ρ2ώ ὑπε3ρ2ω ὕ2σ1τρ ὕ2ϲ1τρ ὑ2σ1τρ ὑ2ϲ1τρ .φαε2σ1φ .φαε2ϲ1φ .φω2σ1φ .φω2ϲ1φ .χαρι2σ1ανδρ .χαρι2ϲ1ανδρ .χαρι2σ1άνδρ .χαρι2σ1άνδρ .χαρι2ϲ1άνδρ .χαρι2ϲ1άνδρ .χει2ρ1άγ .χει2ρ1άγ .χει2ρ1αγ .χει2ρ1απ .χει2ρ1αψ .χει2ρ1ου .χει2ρ1ῶν .χει2ρ1άν .χει2ρ1άν .χει2ρ1αν .χη2ν1ναλ ὡ2σ1α2ν1εί. ὡ2σ1α2ν1εί. ὡ2ϲ1α2ν1εί. ὡ2ϲ1α2ν1εί. ὡ2σ1α2ν1εὶ. ὡ2ϲ1α2ν1εὶ. ὡ2σ1αύτως. ὡ2σ1αύτως. ὡ2ϲ1αύτωϲ. ὡ2ϲ1αύτωϲ. ὡ2σ1αύτωσ. ὡ2σ1αύτωσ. ὡ2σ1εί. ὡ2σ1εί. ὡ2ϲ1εί. ὡ2ϲ1εί. ὡ2σ1εὶ. ὡ2ϲ1εὶ. ὥ2σ1περ. ὥ2ϲ1περ. ὡ2σ1πε2ρ1εί. ὡ2σ1πε2ρ1εί. ὡ2ϲ1πε2ρ1εί. ὡ2ϲ1πε2ρ1εί. ὡ2σ1πε2ρ1εὶ. ὡ2ϲ1πε2ρ1εὶ. ὥ2σ1τε ὥ2ϲ1τε ι2σ1χίλιοι. ι2σ1χίλιοι. ι2ϲ1χίλιοι. ι2ϲ1χίλιοι. ι2σ1χιλίων. ι2σ1χιλίων. ι2ϲ1χιλίων. ι2ϲ1χιλίων. ι2σ1χιλίοις. ι2σ1χιλίοις. ι2ϲ1χιλίοιϲ. ι2ϲ1χιλίοιϲ. ι2σ1χιλίοισ. ι2σ1χιλίοισ. ι2σ1χιλίους. ι2σ1χιλίους. ι2ϲ1χιλίουϲ. ι2ϲ1χιλίουϲ. ι2σ1χιλίουσ. ι2σ1χιλίουσ. ι2σ1χίλιαι. ι2σ1χίλιαι. ι2ϲ1χίλιαι. ι2ϲ1χίλιαι. ι2σ1χιλίαις. ι2σ1χιλίαις. ι2ϲ1χιλίαιϲ. ι2ϲ1χιλίαιϲ. ι2σ1χιλίαισ. ι2σ1χιλίαισ. ι2σ1χιλίας. ι2σ1χιλίας. ι2ϲ1χιλίαϲ. ι2ϲ1χιλίαϲ. ι2σ1χιλίασ. ι2σ1χιλίασ. ι2σ1χίλια. ι2σ1χίλια. ι2ϲ1χίλια. ι2ϲ1χίλια. ι2σ1μύριοι. ι2σ1μύριοι. ι2ϲ1μύριοι. ι2ϲ1μύριοι. ι2σ1μυρίων. ι2σ1μυρίων. ι2ϲ1μυρίων. ι2ϲ1μυρίων. ι2σ1μυρίοις. ι2σ1μυρίοις. ι2ϲ1μυρίοιϲ. ι2ϲ1μυρίοιϲ. ι2σ1μυρίοισ. ι2σ1μυρίοισ. ι2σ1μυρίους. ι2σ1μυρίους. ι2ϲ1μυρίουϲ. ι2ϲ1μυρίουϲ. ι2σ1μυρίουσ. ι2σ1μυρίουσ. ι2σ1μύριαι. ι2σ1μύριαι. ι2ϲ1μύριαι. ι2ϲ1μύριαι. ι2σ1μυρίαις. ι2σ1μυρίαις. ι2ϲ1μυρίαιϲ. ι2ϲ1μυρίαιϲ. ι2σ1μυρίαισ. ι2σ1μυρίαισ. ι2σ1μυρίας. ι2σ1μυρίας. ι2ϲ1μυρίαϲ. ι2ϲ1μυρίαϲ. ι2σ1μυρίασ. ι2σ1μυρίασ. ι2σ1μύρια. ι2σ1μύρια. ι2ϲ1μύρια. ι2ϲ1μύρια. ι2σ1χιλιοστ ι2ϲ1χιλιοϲτ ι2σ1μυριοστ ι2ϲ1μυριοϲτ ι2σ1χιλιάκις. ι2σ1χιλιάκις. ι2ϲ1χιλιάκιϲ. ι2ϲ1χιλιάκιϲ. ι2σ1χιλιάκισ. ι2σ1χιλιάκισ. ι2σ1μυριάκις. ι2σ1μυριάκις. ι2ϲ1μυριάκιϲ. ι2ϲ1μυριάκιϲ. ι2σ1μυριάκισ. ι2σ1μυριάκισ.", ["length"]=63005, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4296, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tr.lua0000644000175000017500000001134512161703335024673 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="tr", ["source"]="hyph-tr", ["texcomment"]="% Turkish hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % hyph-tr.tex\ %\ % Turkish hyphenation patterns\ %\ % This file is auto-generated from source/generic/hyph-utf8/languages/tr/generate_patterns_tr.rb that is part of hyph-utf8.\ % Please don't modify this file; modify the generating script instead.\ %\ % Copyright (C) 1987 Pierre A. MacKay\ % 2008, 2011 TUG\ %\ % This program can redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or (at your option) any later version.\ %\ % Credits:\ % - algorithm developed by P. A. MacKay for the Ottoman Texts Project in 1987\ % - rules adapted for modern Turkish by H. Turgut Uyar \ % - initiative to improve Turkish patterns by S. Ekin Kocabas \ % - script written by Mojca Miklavec in June 2008\ %\ % See also:\ % - http://www.ctan.org/tex-archive/language/turkish/hyphen/turk_hyf.c\ % - http://www.tug.org/TUGboat/Articles/tb09-1/tb20mackay.pdf\ %\ % Differences with Ottoman patterns:\ % - adapted for the use on modern TeX engines, using UTF-8 charactes\ % - only letters for Modern Turkish + âîû (the first one often needed, the other two don't hurt)\ % - (if needed, support for Ottoman Turkish might be provided separately under language code 'ota')\ %\ % Changes:\ % - 2008-06-25/27/28 - create this file by adapting Ottoman rules for modern Turkish\ % - 2011-08-10 - add LPPL licence with permission of Pierre A. MacKay\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvyzâçîöûüğış", ["data"]="2a1 2â1 2e1 2ı1 2i1 2î1 2o1 2ö1 2u1 2ü1 2û1 1b1 1c1 1ç1 1d1 1f1 1g1 1ğ1 1h1 1j1 1k1 1l1 1m1 1n1 1p1 1r1 1s1 1ş1 1t1 1v1 1y1 1z1 2e2cek. 2bb 2bc 2bç 2bd 2bf 2bg 2bğ 2bh 2bj 2bk 2bl 2bm 2bn 2bp 2br 2bs 2bş 2bt 2bv 2by 2bz 2cb 2cc 2cç 2cd 2cf 2cg 2cğ 2ch 2cj 2ck 2cl 2cm 2cn 2cp 2cr 2cs 2cş 2ct 2cv 2cy 2cz 2çb 2çc 2çç 2çd 2çf 2çg 2çğ 2çh 2çj 2çk 2çl 2çm 2çn 2çp 2çr 2çs 2çş 2çt 2çv 2çy 2çz 2db 2dc 2dç 2dd 2df 2dg 2dğ 2dh 2dj 2dk 2dl 2dm 2dn 2dp 2dr 2ds 2dş 2dt 2dv 2dy 2dz 2fb 2fc 2fç 2fd 2ff 2fg 2fğ 2fh 2fj 2fk 2fl 2fm 2fn 2fp 2fr 2fs 2fş 2ft 2fv 2fy 2fz 2gb 2gc 2gç 2gd 2gf 2gg 2gğ 2gh 2gj 2gk 2gl 2gm 2gn 2gp 2gr 2gs 2gş 2gt 2gv 2gy 2gz 2ğb 2ğc 2ğç 2ğd 2ğf 2ğg 2ğğ 2ğh 2ğj 2ğk 2ğl 2ğm 2ğn 2ğp 2ğr 2ğs 2ğş 2ğt 2ğv 2ğy 2ğz 2hb 2hc 2hç 2hd 2hf 2hg 2hğ 2hh 2hj 2hk 2hl 2hm 2hn 2hp 2hr 2hs 2hş 2ht 2hv 2hy 2hz 2jb 2jc 2jç 2jd 2jf 2jg 2jğ 2jh 2jj 2jk 2jl 2jm 2jn 2jp 2jr 2js 2jş 2jt 2jv 2jy 2jz 2kb 2kc 2kç 2kd 2kf 2kg 2kğ 2kh 2kj 2kk 2kl 2km 2kn 2kp 2kr 2ks 2kş 2kt 2kv 2ky 2kz 2lb 2lc 2lç 2ld 2lf 2lg 2lğ 2lh 2lj 2lk 2ll 2lm 2ln 2lp 2lr 2ls 2lş 2lt 2lv 2ly 2lz 2mb 2mc 2mç 2md 2mf 2mg 2mğ 2mh 2mj 2mk 2ml 2mm 2mn 2mp 2mr 2ms 2mş 2mt 2mv 2my 2mz 2nb 2nc 2nç 2nd 2nf 2ng 2nğ 2nh 2nj 2nk 2nl 2nm 2nn 2np 2nr 2ns 2nş 2nt 2nv 2ny 2nz 2pb 2pc 2pç 2pd 2pf 2pg 2pğ 2ph 2pj 2pk 2pl 2pm 2pn 2pp 2pr 2ps 2pş 2pt 2pv 2py 2pz 2rb 2rc 2rç 2rd 2rf 2rg 2rğ 2rh 2rj 2rk 2rl 2rm 2rn 2rp 2rr 2rs 2rş 2rt 2rv 2ry 2rz 2sb 2sc 2sç 2sd 2sf 2sg 2sğ 2sh 2sj 2sk 2sl 2sm 2sn 2sp 2sr 2ss 2sş 2st 2sv 2sy 2sz 2şb 2şc 2şç 2şd 2şf 2şg 2şğ 2şh 2şj 2şk 2şl 2şm 2şn 2şp 2şr 2şs 2şş 2şt 2şv 2şy 2şz 2tb 2tc 2tç 2td 2tf 2tg 2tğ 2th 2tj 2tk 2tl 2tm 2tn 2tp 2tr 2ts 2tş 2tt 2tv 2ty 2tz 2vb 2vc 2vç 2vd 2vf 2vg 2vğ 2vh 2vj 2vk 2vl 2vm 2vn 2vp 2vr 2vs 2vş 2vt 2vv 2vy 2vz 2yb 2yc 2yç 2yd 2yf 2yg 2yğ 2yh 2yj 2yk 2yl 2ym 2yn 2yp 2yr 2ys 2yş 2yt 2yv 2yy 2yz 2zb 2zc 2zç 2zd 2zf 2zg 2zğ 2zh 2zj 2zk 2zl 2zm 2zn 2zp 2zr 2zs 2zş 2zt 2zv 2zy 2zz a3a2 a3â2 a3e2 a3ı2 a3i2 a3î2 a3o2 a3ö2 a3u2 a3ü2 a3û2 â3a2 â3â2 â3e2 â3ı2 â3i2 â3î2 â3o2 â3ö2 â3u2 â3ü2 â3û2 e3a2 e3â2 e3e2 e3ı2 e3i2 e3î2 e3o2 e3ö2 e3u2 e3ü2 e3û2 ı3a2 ı3â2 ı3e2 ı3ı2 ı3i2 ı3î2 ı3o2 ı3ö2 ı3u2 ı3ü2 ı3û2 i3a2 i3â2 i3e2 i3ı2 i3i2 i3î2 i3o2 i3ö2 i3u2 i3ü2 i3û2 î3a2 î3â2 î3e2 î3ı2 î3i2 î3î2 î3o2 î3ö2 î3u2 î3ü2 î3û2 o3a2 o3â2 o3e2 o3ı2 o3i2 o3î2 o3o2 o3ö2 o3u2 o3ü2 o3û2 ö3a2 ö3â2 ö3e2 ö3ı2 ö3i2 ö3î2 ö3o2 ö3ö2 ö3u2 ö3ü2 ö3û2 u3a2 u3â2 u3e2 u3ı2 u3i2 u3î2 u3o2 u3ö2 u3u2 u3ü2 u3û2 ü3a2 ü3â2 ü3e2 ü3ı2 ü3i2 ü3î2 ü3o2 ü3ö2 ü3u2 ü3ü2 ü3û2 û3a2 û3â2 û3e2 û3ı2 û3i2 û3î2 û3o2 û3ö2 û3u2 û3ü2 û3û2 tu4r4k m1t4rak", ["length"]=2786, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=597, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lv.rme0000644000175000017500000000120411761001300024646 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Latvian hyphenation patterns (more info about the licence to be added later) % This file is part if hyph-utf8 package and resulted from semi-manual % conversions of hyphenation patterns into UTF-8 in November 2008 by Mojca & % Arthur. % % This file is available under the term of the GNU GPL, version 2. % % Source: Latvian Lingucomponents for OpenOffice % Homepage: http://sourceforge.net/projects/openoffice-lv % File: hyph_lv_lv.dic (version 0.3, 2005-09-14) % Author: Copyright (C) 2004-2005 Janis Vilims, jvilims@apollo.lv % License: Lesser General Public Licence (LGPL) 2.1 % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-bg.hyp0000644000175000017500000000017111761001300024634 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-bg.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ro.hyp0000644000175000017500000000017111761001300024664 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-ro.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hr.lua0000644000175000017500000002115512161703335024657 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="hr", ["source"]="hyph-hr", ["texcomment"]="% Croatian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ %\ % Hyphenation patterns for Croatian language\ %\ % Copyright (C) 1994, 1996, 2011 Igor Marinović \ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ %\ % Changes:\ % - The first version was realised in late 1994.\ % - Second, much more improved version was realised in the beginning of 1996.\ % (Date of the last change: 19.03.1996).\ % - In summer 2008 the patterns have been incorporated into hyph-utf8\ % and renamed from hrhyph.tex to hyph-hr.tex.\ % - LPPL licence added on 06.06.2011.\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvzćčđšž", ["data"]="a1a2 a1e2 a1i2 a1o2 a1u2 e1a2 e1e2 e1i2 e1o2 e1u2 i1a2 i1e2 i1i2 i1o2 i1u2 o1a2 o1e2 o1i2 o1o2 o1u2 u1a2 u1e2 u1i2 u1o2 u1u2 a1ba a1be a1bi a1bo a1bu a1ca a1ce a1ci a1co a1cu a1ča a1če a1či a1čo a1ču a1ća a1će a1ći a1ćo a1ću a1da a1de a1di a1do a1du a1dža a1dže a1dži a1džo a1džu a1đa a1đe a1đi a1đo a1đu a1fa a1fe a1fi a1fo a1fu a1ga a1ge a1gi a1go a1gu a1ha a1he a1hi a1ho a1hu a1ja a1je a1ji a1jo a1ju a1ka a1ke a1ki a1ko a1ku a1la a1le a1li a1lo a1lu a1lja a1lje a1lji a1ljo a1lju a1ma a1me a1mi a1mo a1mu a1na a1ne a1ni a1no a1nu a1nja a1nje a1nji a1njo a1nju a1pa a1pe a1pi a1po a1pu a1ra a1re a1ri a1ro a1ru a1sa a1se a1si a1so a1su a1ša a1še a1ši a1šo a1šu a1ta a1te a1ti a1to a1tu a1va a1ve a1vi a1vo a1vu a1za a1ze a1zi a1zo a1zu a1ža a1že a1ži a1žo a1žu e1ba e1be e1bi e1bo e1bu e1ca e1ce e1ci e1co e1cu e1ča e1če e1či e1čo e1ču e1ća e1će e1ći e1ćo e1ću e1da e1de e1di e1do e1du e1dža e1dže e1dži e1džo e1džu e1đa e1đe e1đi e1đo e1đu e1fa e1fe e1fi e1fo e1fu e1ga e1ge e1gi e1go e1gu e1ha e1he e1hi e1ho e1hu e1ja e1je e1ji e1jo e1ju e1ka e1ke e1ki e1ko e1ku e1la e1le e1li e1lo e1lu e1lja e1lje e1lji e1ljo e1lju e1ma e1me e1mi e1mo e1mu e1na e1ne e1ni e1no e1nu e1nja e1nje e1nji e1njo e1nju e1pa e1pe e1pi e1po e1pu e1ra e1re e1ri e1ro e1ru e1sa e1se e1si e1so e1su e1ša e1še e1ši e1šo e1šu e1ta e1te e1ti e1to e1tu e1va e1ve e1vi e1vo e1vu e1za e1ze e1zi e1zo e1zu e1ža e1že e1ži e1žo e1žu i1ba i1be i1bi i1bo i1bu i1ca i1ce i1ci i1co i1cu i1ča i1če i1či i1čo i1ču i1ća i1će i1ći i1ćo i1ću i1da i1de i1di i1do i1du i1dža i1dže i1dži i1džo i1džu i1đa i1đe i1đi i1đo i1đu i1fa i1fe i1fi i1fo i1fu i1ga i1ge i1gi i1go i1gu i1ha i1he i1hi i1ho i1hu i1ja i1je i1ji i1jo i1ju i1ka i1ke i1ki i1ko i1ku i1la i1le i1li i1lo i1lu i1lja i1lje i1lji i1ljo i1lju i1ma i1me i1mi i1mo i1mu i1na i1ne i1ni i1no i1nu i1nja i1nje i1nji i1njo i1nju i1pa i1pe i1pi i1po i1pu i1ra i1re i1ri i1ro i1ru i1sa i1se i1si i1so i1su i1ša i1še i1ši i1šo i1šu i1ta i1te i1ti i1to i1tu i1va i1ve i1vi i1vo i1vu i1za i1ze i1zi i1zo i1zu i1ža i1že i1ži i1žo i1žu o1ba o1be o1bi o1bo o1bu o1ca o1ce o1ci o1co o1cu o1ča o1če o1či o1čo o1ču o1ća o1će o1ći o1ćo o1ću o1da o1de o1di o1do o1du o1dža o1dže o1dži o1džo o1džu o1đa o1đe o1đi o1đo o1đu o1fa o1fe o1fi o1fo o1fu o1ga o1ge o1gi o1go o1gu o1ha o1he o1hi o1ho o1hu o1ja o1je o1ji o1jo o1ju o1ka o1ke o1ki o1ko o1ku o1la o1le o1li o1lo o1lu o1lja o1lje o1lji o1ljo o1lju o1ma o1me o1mi o1mo o1mu o1na o1ne o1ni o1no o1nu o1nja o1nje o1nji o1njo o1nju o1pa o1pe o1pi o1po o1pu o1ra o1re o1ri o1ro o1ru o1sa o1se o1si o1so o1su o1ša o1še o1ši o1šo o1šu o1ta o1te o1ti o1to o1tu o1va o1ve o1vi o1vo o1vu o1za o1ze o1zi o1zo o1zu o1ža o1že o1ži o1žo o1žu u1ba u1be u1bi u1bo u1bu u1ca u1ce u1ci u1co u1cu u1ča u1če u1či u1čo u1ču u1ća u1će u1ći u1ćo u1ću u1da u1de u1di u1do u1du u1dža u1dže u1dži u1džo u1džu u1đa u1đe u1đi u1đo u1đu u1fa u1fe u1fi u1fo u1fu u1ga u1ge u1gi u1go u1gu u1ha u1he u1hi u1ho u1hu u1ja u1je u1ji u1jo u1ju u1ka u1ke u1ki u1ko u1ku u1la u1le u1li u1lo u1lu u1lja u1lje u1lji u1ljo u1lju u1ma u1me u1mi u1mo u1mu u1na u1ne u1ni u1no u1nu u1nja u1nje u1nji u1njo u1nju u1pa u1pe u1pi u1po u1pu u1ra u1re u1ri u1ro u1ru u1sa u1se u1si u1so u1su u1ša u1še u1ši u1šo u1šu u1ta u1te u1ti u1to u1tu u1va u1ve u1vi u1vo u1vu u1za u1ze u1zi u1zo u1zu u1ža u1že u1ži u1žo u1žu b1b b1c b1č b1ć b1d b1dž b1đ b1f b1g b1h 1bj 2bj. b1k 1bl 2bl. 2b1lj b1m b1n b1nj b1p 1br 2br. b1s b1š b1t 1bv 2bv. b1z b1ž c1b c1c c1č c1ć c1d c1dž c1đ c1f c1g c1h 1cj 2cj. c1k 1cl 2cl. 2c1lj c1m c1n c1nj c1p 1cr 2cr. c1s c1š c1t 1cv 2cv. c1z c1ž č1b č1c č1č č1ć č1d č1dž č1đ č1f č1g č1h 1čj 2čj. č1k 1čl 2čl. 2č1lj č1m č1n č1nj č1p 1čr 2čr. č1s č1š č1t 1čv 2čv. č1z č1ž ć1b ć1c ć1č ć1ć ć1d ć1dž ć1đ ć1f ć1g ć1h ć1j ć1k 1ćl 2ćl. 2ć1lj ć1m ć1n ć1nj ć1p 1ćr 2ćr. ć1s ć1š ć1t 1ćv 2ćv. ć1z ć1ž d1b d1c d1č d1ć d1d d2ž d1đ d1f 2d1g d1h 1dj 2dj. d1k 2d1l 2d1lj d1m d1n d1nj d1p 1dr 2dr. d1s d1š d1t 1dv 2dv. d1z dž1b dž1c dž1č dž1ć dž1d dž1dž dž1đ dž1f dž1g dž1h 1džj 2džj. dž1k 1džl 2džl. 2dž1lj dž1m dž1n dž1nj dž1p 1džr 2džr. dž1s dž1š dž1t 1džv 2džv. dž1z dž1ž đ1b đ1c đ1č đ1ć đ1d đ1dž đ1đ đ1f đ1g đ1h 1đj 2đj. đ1k 1đl 2đl. 2đ1lj đ1m đ1n đ1nj đ1p 1đr 2đr. đ1s đ1š đ1t 1đv 2đv. đ1z đ1ž f1b f1c f1č f1ć f1d f1dž f1đ f1f f1g f1h 1fj 2fj. f1k 1fl 2fl. 2f1lj f1m f1n f1nj f1p 1fr 2fr. f1s f1š f1t 1fv 2fv. f1z f1ž g1b g1c g1č g1ć g1d g1dž g1đ g1f g1g g1h 1gj 2gj. g1k 1gl 2gl. 2g1lj g1m g1n g1nj g1p 1gr 2gr. g1s g1š g1t 1gv 2gv. g1z g1ž h1b h1c h1č h1ć h1d h1dž h1đ h1f h1g h1h 1hj 2hj. h1k 1hl 2hl. 2h1lj h1m h1n h1nj h1p 1hr 2hr. h1s h1š h1t 1hv 2hv. h1z h1ž j1b j1c j1č j1ć j1d j1dž j1đ j1f j1g j1h j1j j1k j1l 2j1lj j1m j1n j1nj j1p j1r j1s j1š j1t j1v j1z j1ž k1b k1c k1č k1ć k1d k1dž k1đ k1f k1g k1h 1kj 2kj. k1k k1l 1k2lj 2klj. k1m k1n k1nj k1p 1kr 2kr. k1s k1š k1t k1v k1z k1ž l1b l1c l1č l1ć l1d l1dž l1đ l1f l1g l1h l1k l1l 2l1lj l1m l1n l1nj l1p l1r l1s l1š l1t l1v l1z l1ž lj1b lj1c lj1č lj1ć lj1d lj1dž lj1đ lj1f lj1g lj1h lj1k 1ljl 2ljl. lj1lj lj1m lj1n lj1nj lj1p 1ljr 2ljr. lj1s lj1š lj1t 1ljv 2ljv. lj1z lj1ž m1b m1c m1č m1ć m1d m1dž m1đ m1f m1g m1h 1mj 2mj. m1k 1ml 2ml. 2m1lj m1m m1n m1nj m1p 1mr 2mr. m1s m1š m1t 1mv 2mv. m1z m1ž n1b n1c n1č n1ć n1d n1dž n1đ n1f n1g n1h 2nj. n1k 1nl 2nl. 2n1lj n1m n1n n1nj n1p n1r n1s n1š n1t 1nv 2nv. n1z n1ž nj1b nj1c nj1č nj1ć nj1d nj1dž nj1đ nj1f nj1g nj1h 1njj 2njj. nj1k 1njl 2njl. 2nj1lj nj1m nj1n nj1nj nj1p 1njr 2njr. nj1s nj1š nj1t 1njv 2njv. nj1z nj1ž p1b p1c p1č p1ć p1d p1dž p1đ p1f p1g 2p1h 1pj 2pj. p1k 1pl 2pl. 2p1lj p1m p1n p1nj p1p 1pr 2pr. p1s p1š p1t 1pv 2pv. p1z p1ž r1b r1c r1č r1ć r1d r1dž r1đ r1f r1g r1h r1j r1k r1l 2r1lj r1m r1n r1nj r1p r1r r1s r1š r1t r1v r1z r1ž 1sb 2sb. s1c 1sč 2sč. 1sć 2sć. 1sd 2sd. 1sdž 2sdž. 1sđ 2sđ. 1sf 2sf. 1sg 2sg. 1sh 2sh. 1sj 2sj. 1sk 2sk. s1l 1slj 2slj. 1sm 2sm. s1n 2sn. 1snj 2snj. s1p 1sr 2sr. 1ss 2ss. 1sš 2sš. s1t 2st. 1sv 2sv. 1sz 2sz. 1sž 2sž. 1šb 2šb. š1c š1č š1ć 1šd 2šd. 1šdž 2šdž. 1šđ 2šđ. 1šf 2šf. 1šg 2šg. 1šh 2šh. 1šj 2šj. 1šk 2šk. š1l 2š1lj 1šm 2šm. š1n 2š1nj 1šp 2šp. 1šr 2šr. 1šs 2šs. 1šš 2šš. 1št 2št. 1šv 2šv. 1šz 2šz. 1šž 2šž. t1b t1c t1č t1ć t1d t1dž t1đ t1f t1g t1h 1tj 2tj. t1k 1tl 2tl. 2t1lj t1m t1n t1nj t1p 1tr 2tr. t1s t1š t1t 1tv 2tv. t1z t1ž v1b v1c v1č v1ć v1d v1dž v1đ v1f v1g v1h v1j 1v2je vj. v1k v1l 2v1lj v1m v1n v1nj v1p 1vr v1s v1š v1t v1v v1z v1ž z1b 1zc 2zc. 1zč 2zč. 1zć 2zć. z1d 1zdž 2zdž. 1zđ 2zđ. 1zf 2zf. z1g 1zh 2zh. 1zj 2zj. 1zk 2zk. z1l 2z1lj z1m z1n 1znj 2znj. 1zp 2zp. z1r z1s 1zš 2zš. 1zt 2zt. 1zv 2zv. 1zz 2zz. 1zž 2zž. ž1b 2žb. 1žc 2žc. 1žč 2žč. 1žć 2žć. 1žd 2žd. 1ždž 2ždž. 1žđ 2žđ. 1žf 2žf. 1žg 2žg. 1žh 2žh. ž1j 1žk 2žk. 1žl 2žl. ž1lj 1žm 2žm. ž1n 2žn. 2ž1nj 1žp 2žp. 1žr 2žr. 1žs 2žs. 1žš 2žš. 1žt 2žt. 1žv 2žv. 1žz 2žz. 1žž 2žž. 2d1vj 2d1vr z1g2nj ć1s2t d1s2m j1z2g r2n1t r2z1n m2p1t 2d1vl r2t1c r2n1c r2č1k 2s1hr z1v2l 2z1vr r2k1n r2c1n r2h1nj s2p1n j1s2l r2d1n .zg2 r2dž1b 2š1tv r2t1s n2t1s 2s1kr r2n1k d1š2k d1s2p r2t1m 1r2je k2s1p t1s2t l2m1s r2h1k j1s2t s1v2l r2p1c t1k2l s1k2l n2t1n 2d1ja 2rt. z1r2j d1s2t n2k1c r2t1k r2g1n r2h1t .na2j1 .be2z1 .iz1 .is1 .ne2o3 r2t1n r2v1n r1s2t n2s1t l2f1t", ["length"]=7616, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=1475, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sv.hyp0000644000175000017500000000017111761001300024674 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sv.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sv.pat0000644000175000017500000007161211761001300024670 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sv.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z ä å é ö \patterns{ .a4b .ab5i .ab5ol .ab3r .ac3 .a4d .a3dr .ad3s .a5g4ra .a5gre .a5kl .a5le .al4pr .a3lu .am4br .amp3l .a5mu .and4rar .a2n5es .ang4er .an5go .an5s .ap1p .as2k .a3sket .as4t .a5sten .a3sti .a5ta .at3t .au3st .a4val .av3s4 .b4 .bak5s .ben5s .bild3s .bo2k .bort1 .cis4 .cy5klop .d4 .där3 .ek1v .e3l4a .e2l5in .en5st .e4nä .e2r3i .e2s .e5skad .es3kal .es5kap .es4t .e5strad .e3tr .evan5 .ex3 .f4 .feb3r .fram3 .fres5 .fågel3 .för1a .för1en .g2 .gu4lä .gus3 .he2m .hu5sa .ib4 .ik4 .im3p .i2n1 .i4na .in3d .in4ger .ink2 .in3s2 .in3t .is5ka .i3so .k4 .kans4k .ko5li .kort5s .kring3 .krings2 .köp5s .l2 .lak5r .lek5tr .lu2st .m2 .mas2ke .ma5skeri .me4re .minis4 .mjölk5s .mon2s .mån3s .må4st .män5sko .mörk5r .n4 .ner1 .no4n .nöd5r .oc1ku .ok3t .o3kv .o2ma .o2mo .om3s4 .o3mu .on4k .o3o .ord3s .o5sc .o1s4k .o3sl .o3stra .o3sv .o3tr .o1u .p4 .papp5s .pa3ste .pa5sti .pi5sti .pres2s .pub3lika .r2 .re4gr .re2ste .runs4 .rym2d .röve5 .s4 .sa2k .seg3r .si5o .sjö1 .sk4 .skott3s .slut3s .st4 .sta2m .sten3s .string4 .sup3p .t4 .ta3bl .ta4k .tak5l .tes3ta .tig3r .til4l .ti3o .topp5s .tred2s .tre3s .trä5k .u3k .ult5r .ung2e .up2 .u4ra .ur3s .u2t1 .u4ta .u5trer .ut5s .v2 .var4t .vatten3 .ved5s .vä2g .väg3s .x2 .y2a .y4e .ång3 .år4s5 .å3st .åter1 .ä3ro .ö3ro a2b ab4bu a5be abel4s abe2s ab1l ab3la ab3ort ab5ric ab3rio ab4sc ab4sk a5bu ac4kes ac4kis ack3sk ack3u4p a5dag a5dek a5del ad5ep ad3j ad3op a5dran a3dre 1adres ad3ril ad3ru ad2s a5ed af4fo 3affä 1af3ri af4tor a1ga aga4ra a1ge a2ge. ag1gr ag1l ag5ord ag3ro a4gur a4hj aib4 a3iv a1j a3ka a4kart a5ke a1ki ak3n a1ko ak5ram akri5s ak3rob ak4sta 1aktig ak3tri a1ku a5kvari ak3ve a5kår ak5åt 4akö a1la al5adm ali2br a2lin a5lin. a3line al3ins ali5stik a4lj alk3ak al2kv al4kä all3st al3lå alms4k a1lo al5ort als5pa al3tr al4tu al4tä a1lu alu5s alv3s a1ly a4maf am4i am4pr am1s am3åt a3mö ana4bo an3alf an3ark an3c anci5 an5dak andel2s an4dun an4dän a4nef ang4es an3gi an1gr aniu4 ank3r ano2i a4nok a4nop an5sce ansis3t an4sj ans5ku ans3li ans3par an1st an4sto an4sty 1ansvar an4tj an4tre a1nu a5ny a3nö a1o a1pe a2pe. ape4n3 a1pi ap4lan apo3str 1appara apps4k ap3ric ap3rif a5pris ap2s ap3se aps5l aps3p apu5s a5py a5pä 2ara a4rann a4rarv 1arb 4arbi 2arbo 4arbr ar3dr ard5st a4rend arg5si 2arh a1ri a4rigen ar3ka ark3lan ar5kr 4arl 4arn. ar4nal a1ro a2rob 4arp ar2sa ar5skal arsk5l ar2sv ar4tro arts5p ar4tur 4aru a4rur a5rus ar4väg a3ry a3rä 2asa asbe4 a1sc as2h asis5t as3kis a2sko a4skr as3ku as5l as3pa as3pig as2sk as2s5op as2sp as2st ass5up as3ta a5stard as5ter as5tiker asti5o as3to as4tr ast5rak a5stral ast3rol as5tör a3su a4sul a4sund as2ut as3v a1sy a2s5å a2sö a1t ata5ra a5te ati5ö a4tj a2tr a3tral 4atrar a4t3re at3ria a3tric at3rie a5trik a3tris a3t4ro a4tro. at4ska 1attac at2tak at4tj at4tos att3s a4tung 2au au5b au2t5a 3autom aut5s 2a1va a4vart 1avg 2a1vi av3r 4a3vä a5å 1b2 3ba ba4di ba4do bad3s4 bak5l ba4ko ba4ku bank5l bas4ta ba5stu 4bb b4bak b4batt bbb4 bb3l bb4ler b4b3r bb4so 4b3d 3be be3d4r be5e be1k 4beld be5lu be3ly be3lå be5lö beng4 be3nå be1rö be1s be3sl bes5s be4sta be4ste be5su be3tr be3tv be3u 4bex 2b3f 2b5h 3bi bi3d4 4binv bis3ko bi5skv b3je b3k b5lar b5lat ble4mo b5len 5blera 3bles 5blid 3blikr 3bliks 4b3m 2b3n 3bo bo4gr bo2kl bo1mu 5bon bors5te bor4ti bort3r borts2 bort3sl bo1s bo4sc boy5 4b3p 2b5raf 4brar 2b5rati 3brik. b3rika 3brike 3briks b5rikö bru4st 3bry 3brö 4b3s b5sce bs3ch b4slan b4sof b4sp bst4 b4stj 4b3t 3bu bund4s bus2st b3v 3by by5r 3bå bång3 båt2s 3bä 3bö bör2s c2 5cap c3c 1c4e cens3t 3centr ceu4s 4ch. 3chau 3chef 5choc 4cht chäs3 chör4 1ci ci4lu cim2 cipp4 4ck c3ka c3ke c3ki ck5j ck1l ck5lis ck3n c3ko c4kordn ck3org c4kort ck3r ck4re ck3sla ckus2 ck3va ck3ve ck3vä ck5ä ck3ö cle2a co2a co4m 4cr cros2 4cs 1cy 1d 3da 5da. 4dadr dags3 2dak 5dako da3li 5dam da3må 4dand. 4d1ap 4darb 4dart da4tr dat5t 4dax 2db 4dc dcen3 2dd ddd4 ddi4s d3dj d4dos dd3ra dd3re dd3ri d3drä dd2s dds3v 3d2e de1k4 4deko 4deld del2sa dels5ti de5lut d4en denti5ö den2to de3pr 5der der1k de2ro de5rol der5sti de4ru de2s de3se de3sp des3ti d4et de3tr 4dex 2d1f dfö3ra 2d1g d3gl 2d5h 3di dias4 di5el di2gr di3ka di5ku 4dinf din3g4o 4dinr 4dins 2dinsp 4dint di1o di4od di3sc di4sj dis3ko dis1kr dis1p dis5to dis3tra di4tre 2dj d3jor djup5p 3djur 2d3k2 4d5l 2d1m 2d1n 3do d2ol do5lo 4domr dom2sk 5don do4pak 4d5ord 4dori 4dort d5ost do3y 2d1p 2d2r2 d3rad 3d4rag d3rand d5rarb d5rassera d5ratu 3drej d3ren 5dres d3ret d4ric 3drif d3rig 4d5rik d3rin 3d4riv d5roc 3dropp d3ror 4drot drotts3 d3räkn 3dräkt 5drän d3rät d5röd 4ds d2s1an d2se ds5enh d4sf d2si ds3ins d2sj dsk2 d3skef ds4ken d3ski ds3kl ds5kn ds1l ds4lot ds4mo d4små ds5nå d2so ds3pl ds3s4 ds3tal d5stat ds4te dste4a d5stig ds3tin ds5tro d2su ds1v d2sö 2d3t 3du dub3ble 4dup du1s du2sc du4ste du5sö 4dut du4vu 2d1v d3vr 2d3w 3dy dy4kan dy4ro 4dz 5dåg 2dås 4dåt 4däg dä2r 3dö döds1 4dög 4döp d5öst dé4 e1a e2ake e4am 4eb e2br eb3ril 4ec e3ch echiff5 ecis4 e3co e2d e4dans edd4r edi4u ed3j e5dral ed1sk ed2sko ed3s2l edso4 e3då e1e e2ed e4ei ee2k5 e4en. e4ene e1f ef4s 3efte e1g e3ga e3ge ege2l eg1l eg2ler e3glera e5gleri e4gran eg5rat eg3rin e5gru egs3 e5gå eig2 ei5gn e3ik e1in ei5sh e1isk e1jo e3ju e3jä e5jö e3ka e1ki e1kl ek3lat ek4le ek3n e1ko ekord5s ek3orr ek4ret. ek5ro e1ku e1kve ek5vis e1ky e1kä e1la el1akt el4arb 3eld. eleb3r elekt3ri el4fra eli5ku el3k4 el3li ell3s el3lä e1lo e4lob el3p el2si el5ug e5luv 2e1lä e1m e5mat e5mis emon1s em5ort emp5le en5art e2nav en4ce e4ned e4nek ene3rö 2enj en5klo en3kn en5kr en5kä enning5 ennings2 eno2m en3si ens5ke ens2m en2sp ens4te ens4vin en4så ent4ha en2t1r ent4rat. ent3rati ent3ri ent5ru e5nus 2eny 2e1nä e1o e2og eo4i e5or 2ep e1pe e1pi e3pla ep5le epp2s3 epps5t e1pr ep3s ep4tr epu3b e3på er1ak 4eras er3d4 erg4l er4gu er4gås e1ri e5rib e4rinf erings3 eri5stik erk4lin erlä4 er5na e1ro e3rob e2rom erp4 er3ra er5sc ers4ken er3sl ers4le er4sta er2ste er3str er3sv e1ru e5rum e3ry e5råd e1rä e2sal es5all es3arm e1sc 2ese es4hi esi4u es2k e4skan es5kar e4s3ken es3ker es5kul e1sl e5slag es2mi e1sp es3pl es2sk ess5lä es2st e3stal es5ten. esti2ge es3tin es5tor. es4tr est5rer e3stru est4rö e3stå es2u e1sy eta3b e5ti eti3ö e1to e5tri. et3ris e5trä et2s ets2ad ets3kr ets1l ets3m ets5pa et4sv ett3r e1tu etu4ri et4va et5vu e1ty 2etz e1tä etäc4 euk4 e5um. e5up4 4eur eu4se. eu5tro e1v e4varm e4vj ev3r 3exp ext4r 4eä f2 3fa fac4 fac5ke 4fans 4farb fa3sh fa4st fa4tö 4fav 4f3b f3d 3fe 4fef fe2l fes5ta fe3sto 4fex 2f1f fff4 ff3l ff3n f3fo ff3r ffs4 f3fä ffö5re f3g2 f5h 3fi fi2br fib5rig fi3li fin5sm fi3skal fisk3r fi2ti 2f3k 1fl flo4da 4f3m fma4 1fo 4fof fol2 folk1 2f5om fo2na for4mo fost3r 4f3p fra2m fram5p f4rer 5freri fre4s f4ri. fri5sp 5frit fros5ta fru5str från5 2f3s fs2k f4sl f4sm f4sn f4sp f4st f4sv 2ft f3ta f4taf f4tak f4tap f4tarm fte4r f4tex f3ti f4tin f3to f4t3r ft2sa ft4set ft2s5i ft4sj fts4t fts5vä ft5t ft1v 3fu furs5te fu5ru fu3tu 4fv 5fy fy4ma få3tö 1fä fäs5ti 3fö fö2ra fö2ren fö2ri för3k för3sm för3su fört4 för1ö ga5br 3g2ag 4gakt 3g2al gall3s ga5lä ga4no 2garb 4garm ga2ro 4gart ga4st ga4su 5g2ati gaus4 g4av g5avsn 4gax 2gb 2gd g3d4r ge2a ge5b4 2gef 2ge4j g2eli 3gelis gel5st gel5y 3gelä gel5än g4em ge4nap gen5g 3g2eni 3genj 4genm genom5 gen4sa g4ense 1g2ent 4genv ge5ny 3genä ge2o 1g2era 4gerarb 3g2eri gers5n 5gese ge4to get5s 5g2ett 2g1f 2gg g1ga g4gap g1ge gg5g gg1l g4gos ggs4la ggs4m gg3s4t gg3s4v g4gu 2gh gh4te 1g2i gi1o gi5sn gi4ste gis4tr gi5stral gi5st4rat 3giv gi2ö g2jo 3gjor g3jä 2g3k2 2gl g4lans g1lar g2las 5glase glas5k 5glasö g4lid 4glj g4lög 5glöm 2g1m 2g1n g4nag g2no 1g2o 3go. 3gol gon3s4 4gont 2gord 4gorm 4gort go3sl 2g1p g2r4 3graf 5gral gra2m5 5grans 4gras 5grec 5grett g3rig 4g5rik 5grip 3gris g5roi gro2v 4grum grus5t g4rå 5grå. grä4n 5gräns 2g2s gs1an g5satt g3sel g4sf gsi4d g3sju g5skaf gs4ki gs3kn gs4kot g3sky gs1l gs1m g4sme gs3n gs4ni gs4nö gs1or gs3pl gs3po gs4por gs5pre gs3pu gs3s gs3tak gs3tal g3stark gs4ten g3stif gs3till gs3tj g3stol gs3tra gst4re g3stäm g4sug gs1v g4s3ve gs3vi gs3vå gs3yt gs1ä 2g1t g3tr 1g2u 4gug guld3 gul4da 4gulä gu2ma 4gup gu5ru gus4k 2gut g3utb 2g1v 4gw 3gy gytt3j 1g2å gårds5 2g5åri g4äl g2är gä4s 1g2ö 4gög gö5ro 2g5ört 1h ha3bl ha5ge ha4li hal4so halv3å ham4st handels3 hands4l han5g2a ha5ra ha4sc ha4sp hasp5l has3t hav2 havs3 h5c 4hd he4at he4fr he4lä hets1 hets3t hets3v h3g h2i 4hir his2sk hi4t hjäl3s h1k 2hl h4le 2hm 4hn h2na h2nit ho5nu hop5plo hop3s hos3p hos5ti 4how h3p h5ru h1s 2ht hu2s hust5r hyg5r hys4t hys5ta hy3ster hård5s4 häll2 hälls1 hälso3 hä4ri hä4s hä4var h2ö hö2g hö5gen hög5r hörn5s hö4s höst5r i1a ia3fr ia3g ia4lu ia4sk ia3tr i2b3l i5bril i3ca i4ce. i5cha ic4kord ick3u4 i5co i2d iden3s id4ge i4dom id1r id3ro id2s ids3v i4dun i3då i4dö 2i1e ifes4 i5fn i1fr 3ifrån i1g 4igan i2geb ig5ej ig1l ig3no i3i i4kart i1ki i3klo ik5län ik3n i1ko ik3re i5krob ik5rof ik5ros ik5s2h ik5skor i3kul i3kum ik5u4t ik1v i3ky i3kå i3kö i1la il4dan i2lin il1jö il5k il5lak il4lik ill3s2 3illu il5lär il2min i1lo il2tj i3lu ilufts5 i4lup i5lä im2b3r im5sm im4so i1mu i5må i3mä i5mö i4nau ind5skä ind5sti 1indu in4ga in4ge. ing4es. ing5is in5glas ings5te i3ni i4nif in5j in5kve 1inneh 5inre 1inri 3inrä in4sem in3skrä in3sl ins4m in3sn 1inspe 5inspeln in5spr 3instink 3instru in4stå in5te 1intr in4tra int3s i1nu i4nun in3ym i1nä i5oc i1og i3ok io4kr i1ol io5li i5om ion2 i3ono ions3 i1op i1or i1os i1ot i1pe i1pi ipos4 ip5pi i3ra i4res i1ri irk5l i1ro iro3p i1ru i5sce isel4 is2h i2sk is5kep isk5na is3kopa is3ku is4kun is3ky i5slam is3län is3m is3n i2s3p is4pri is3sa is3se iss5n is4s3tr iss3tä i1stal i1stans ist5att is5ten. i1stent is4tes is3tig is5ting is5tor. is5tore ist5ro istå4 is5v i3sy i4så i1t it5c i4tei i4tex i4tj it5ran i5trin i3tris it2t5op it4t3r it4tu i2t5å 4i1u i1va i2vak i1vi i4vin iv3r iv2s i1vå ix2t ix5tu i1ö 1ja 3jakt. 4jarb jas5p 2jb 2jd jd3r jd4sty j4du 1je je2a 5jef je5sta 2j1f 4j3g 4jh 1ji 4jin 4jk j4kl j3ko jk3v 2j1l 2jm 2j1n j2o 3job jo4kr 4jolj jo5lö jor4din jord3s4 3jou 4jp j5pl 2j3r 2j1s j5sa j4sk js4me js4te 2jt jts4 2j2u ju4kos juk3s jul3k 4jur jus5kr juss4 jus4t jus5ta jut4sta jä5lo jäl4p5r jäl4sa järn3sk jär5s jör2s jös4t 5jé 1k2a 3ka. 3kad. 3kade. ka4dr 2kaf 5kafä ka3i ka5ju 2kak k3akti 4kalf 4kalg kal4lo kall3s 3kamp 3kamr 3kan. 4kand. 5kano 2kap 3kapi ka5pla kap4pr kaps5t 5kapten 3kar. ka3ra 4karb k5arbet ka5ri 4kark 3karna 4karp karp5s 4kart. 4karte 4karv 3kas ka4sk kas3ti 3kat. 3kats. 4kau 2kb 4kc 2k3d4 kdom4 1k2e 3ke. 2ked. 2keda ke3dr ked4s ke4er 2kefu 4keld kels4 4kense ke5nå 2kep 3kern ke2s kes3s 4kex 2k1f kfö2 kfö3ri 2k5g4 2kh4 kid3s 4kif 1kig kik4s kilt4 5kimå king3r 4kinne 4kins 2kint ki4nu ki4tr kiv3s 4kj 5kjol k3jä 2k3k kl2 1klag k2lama kla4mi 3klang. 3klass 2klat 5klav 2kle k2lej 2klig k2lim 3klip k2lis 5klist3r k5lock. 5klocka 3klos 1klub 4kluk 1kläd 2k3läg 2k1m 2k2n k4nal 3k4nap 5knip 3k4niv 3k4nu k4ny k5nyk k2o 4koc ko5de k5odl kog3n ko4gr kog4s3 4kola ko2lin 4kolj kol5tr 5kolv. 1kom 3komm 5komp 2k3omr kom4s 1kon 3konf 3konst 3kont ko3nu 1kor 3korg ko3ri 2korr 3korres 5kortera ko5s4k ko3sl 3kost ko4str 4k3ou 2k1p k2r4 3kraf 5kra3ge 4krang 5krera k4reten krid5s2 1krig krigs3 krings2k 4kriv 3kropp kropps5 kru5stad k3ryg kråk5s krå4pa k5rädd. kräk5l 4kräl k3rät 2ks ksaks5 k2s5as ks3ch k4ser ks2k4 ks3kl ks5kra ks5kv k3skä k3skö k5slag. ks2li k5sly k2so ks3pl k1s4t kstavs3 ks5tid k2su 4k1t k4tex kti5ge k4tinn k2tins k2tod k2tom k2tr kt3re kt3rin k5trod kt5rog kt3rol kt5rät kt2st kt5t4 k4tug k2tut k4täl 4kug k5ugn ku5la 4kuld 3kulö kum5pl kungs5 5kunn ku4pen ku4ro 3kurs 3kus kust3a kv4 3kvali k5vare 3kvarn kvar3s 3kvart k4vato k2ve 2kvente 1kvinn 5kvire k4vo k1vå 3kväll k1vär kydds3 ky4lin 3kyrk käl4m 5kämp 5känn 3käns 3kärl 4kög köks5t 5köp. kör4l kör4sl 3la. 1lade. 2ladm 4ladr 2laf 3lagd. la4gin 5lagm lag3r 2lak 5lakan. 5laki 3laktis la5lo 3lande. lan4di 2lappara 2larb 1larn lar5s 4lart las3h 4lask la4st 5laste. 1lat. la5tr lat4tis 2lau 2lav la5vu 2lb4 4l1c 2l2d lder4s l3dj ld3ra l5dry lds4an 1le 3le. le4ge. le5ig le2kl le4kv lem4sö 2l5enl 3ler. ler5k 3lern ler3ste le5s2l le5tå le3um le4vu 2lex 2l1f 2l1g l2gj l3g2l lgs4 lg5st 2lh 1li li5ch 3lif 3lig li4go lig3s lik2l li5kli lik3s 5limer 2lind 2linga. ling5o 4lingr lings5t 2lini 5linj 2lint li1o 2lip lis3c li4sta li3strö li4vo livs1 l2jak 4l1jo 1lju l5jå l1jä l3jör 2l1k l3ke l5kju l2kl lk5lag l5klä l2kr l3k4ra lk3t l1la lld4 ll3dr lle5b ll3k ll1l l1lo llok5v ll3p ll4san ll2se ll3ska ll2so ll4sva ll4tig ll3tr l1lu ll5un llust3ra ll5v l5ly lläggs5 l5löd llör4 ll5ört 4l1m l4mol lm3st l1n lo2af loc4ku 4lodl lo4do lod3st lo2ge. 2lolj 2lom 4lord 2lorg lor4s lo4vo l4pak l1pe l1pi l5pla lp5lö lp4st 4l3r 2l1s l2sc l4sjo l4sjä l2sk l4skensv l3ski lsk3n l5skot l3skrä l3sky l3skå lskå4p l3skä l3slu l4sm ls4mo ls5nyt l2sp l3spe ls3pl ls3pol ls5s l2st l3sta l4stak ls4te ls5ter l3sto l3sty l4styg l3stå l3stä l5stö l2su l5sur l2sv l4svi ls5vid l4så 4l1t lta2tu l4tef l4tif l4tih l4tos lt5rati l4tret l4trö lt5sk ltu4 lu5i luk4to 4lull. 2lun lung3 2lupp lu4pu lus2s5p 5lust. 4lutb 4luts 2lv l1va l4varm lvers4 l1vi l4vos lv3ri lv3sp l1vä lväv4 lycks5t ly4gat lyg3r lyg3s2 3lyste 5lystn ly4str 2lå. låg3s 1lång lång3s lå4sk lås5te lå4stå 4läc läg5r 1länds 5längder lä4san lä4sp lätt3s 4löl 4löm 3lön 3lörer 1lös lö4vä 3lé 1ma ma5fr mag5n mag5s ma5ju mak3r ma3li mand4 mang2a man5g4o ma5ni mani1k 5ma3ri mash5 mas3ko mask3ro ma5skö mas3ti mas4v 2mb mb4sk 2mc 2md m4dat m4di m4do m3d4r 1me 2meds me4du me4kl me4ko 4meld melo5 me5lu men5k me5nu me5ny mer2sko me4so mes4t me3sti 2meta me5trin met3ro meu4 2mex 2m1f m4fes m4fn 2m1g4 2mh 1mi mid3s mi4lu 2mind ming4o 4mink min4kr 4minv mi3nö mis2 mi5sf mi4sp miss3t mi4te. mi4tr mitt3s 2m1k 2m3l 2m1m2 mme5d mm3s4 m4mul 2m1n m2nam mnas3t m4nav mn5dr mn3g4 mn5st mn5tu m2n3å 1mo m4od mo4i 2momr mo3na mos3k mo2ta mo4tin mo4tu mot3v 2m1p m2pak m4part m2pl mp3lad m5plane mp3lat mp3lin mpos4 mp5p4 mps4k mp5sp m4på 2m1r 4ms m4sal m4ske m3slag ms3lä ms2m mste2 m1sto m2str mst3rin ms5äp 2m1t 4mud mulls3 mult5r 5mum 4mun3g4 mun4ko 3mur 3musi mu3sta mut4sl 2m3v 1myn mys4te måg4 1mål. 5målet. 5mån. 4mår må1s 4mäg mäk3 1män mäns4 3märk 1mäs mäs5ta 1mät mö4bl mö4gen. 3möj mör4kl 3mös 4möv 1na 3na. 3nad nads3 2naf na5gr 2nak 3nako 3nakr na3kro n1akt 2nalf 5nalfl 4nalg nal3s na2lu n5amb 5namn 4nand. 4nanv na4rap 2narb 2nark 4narm 2nart nast3r 2nb4 2n1c n2ch n3cha n3che n3chi ncis4 ncyk3l 2nd n4dak n4dav nd3d4 n5de nde3s n4dil nd5rak nd5ras nd3rat nd3ri n5dril n3drop nd5ros nd5skal nd3sn nds3or nds5vä nd5ås 1ne 3ne. ne4di 5nedl ne4d3r ned3s ne4dö ne2gr ne5gres 4nek. ne5ly 4nenl ner5sm nes3s4 ne4sta ne5s4ti ne3tre ne1ut 2nex 2n1f4 nfalls5 nfis3 2ng1 n4gar n4gen. n4gend n4gens n4genti n4germ n4get n2gi ng3ig ngi4s ng4ly n2go ng5om ng3or ng3rad n4grö ng4ser ngs1k ngs3pa ngs5tim ngs3val n4göd 2nh 1n2i 4nid ni5ec ni4ki ni5li 3nin nings1 nings3k nings5v ni1o 4nip nip4pr ni5steri nist3ra ni3t4r niv5sk niv5st 2n1j n4jar n3jun nju4s n3jä 2nk n4kart n1ki n4kis. n3kny n1ko nkrafts5 nk3ri n1kro nkrus4 nk5sl nk3sp nk4tin n1ku n1kö 2n1l 2n1m 2n1n nn3d n3ne nnis4 nn3k nn3s4t 1no 2nodl no4kl 2nolj 2nomr nom3s4 2nord 2norg no5sa no5sc no4tu 2n1p 2n1r 4ns ns2i n4sint n4sis. n4sise ns2k ns3kan n1ski ns3kor nslags5 ns5las ns5mit n4soc n1spi ns3pl ns3po ns3s4 n3stans n3stap ns4tel n3stif ns3tig ns4tra n2strik nst5up nst5vil n3s4ty n1sva ns3vi ns3vär 2n1t n4tark nter5s4 n4tinf n2t5omb nt3rad n3trah n3trak n5trala nt3rali n5tram nt3rep n3trer nt3ria nt3rin nt3ris n4tropin n4tror n4trö nts3c nt4se nts5kor nt4str n4tut n3två nufts4 4nug n5ugn 3nui 3num nums5 2nup n3upp 2nutb 2n1v ny5gr n5z 4når 4nä. 4näc 3näm 3nät 4nög4 3nöj nö2ja nö5kr 4nöl nös4 nös5ke o1a o2ard o2b 5o4bj o4bli oby4 oc4k5r ock3sk oc3ku o2d ode4k odi4a 1odli o5dral o3dro ods4k od2st ods4ti od5stu o3dä o1e offs5t o4fl o3fr oförmå4 o1g o4gav og3gr o4gj o5glo o5gly ognos4 ogno5st o4gri o4grö og3se og4s3t o4gä o1i o4il o1j o1k o4kli ok3n ok3sl ok4su o2kv o1la o5lak ol5au olfö4 1olj ol3ka olk3r ol4ku ol4kä oll4si oll5slä ol3lä olm4s oln3s o1lo olo5kv ol4sa ol4tå o1lu o4lug o4lur o1ly ol5år o1lä om4brä o3men o4mord om5pa om3pl 1omr 4omra om1sk om4ste 3omsät om4tr om3tv on3c on5gi on1gr ongs4l o4nins on3j on1k4 ons3c onsi3s ons3m on5stel ons4ter on3tras on4tre ont4s o1ny on5å o1nä o3nö oo4d oom5s o3or o1pe o1pi o5pline op4pl opp3le op4pr op4pu o3pri op4st o3på o5q 4ora o3rak oran3g4 o2rap 1ordn or4d5ä o4reh 1orga 5organi or4gr or4gå o1ri 3orient 4ork or4mö or4nu or4nä o1ro or4pl or5pr or4spa ors5tig or5te or2tr ort3re ort3ro o1ru o3ry o1rä o1rö o3s2fä osk4l o1skop o3som os5pig os4sk os4s4t os3tig os5tiker o5still os4tr ost5ron ost5rö os3tul ota2lan 4oti. 4otie 4otin o1to o5tro ot5run ot3sv ot5ti ot4trä ott2s o1tu o5tun otvin4 o1ty o5tå o3tä oun4 oup4 4our ou3rö ou4s o3ut3t o1va ova4n o1vi ov3r ov4si ov3sl ovs4me o1vä o3we ox5 oy2 o3å o3än o3ö 1pa 4paf pag4 paki3 pakis4 pa5la pals5 pa5lä 4pand. pan4tr 3pap 2parb 4parm par3s 2pask pa5ski pa2st 3patr pa3u 2pb4 2pc 2p3d4 pek5tri pekt3ro 4peld pel3s4i 4pem 5peng 3penn pent5r per4bl 3perio 3pers per4sl pe5tro 4pex 2p1f 4p3g 2ph pi4el 1pig pi1o 3pip pi5so pi5sta pi5sto p2j 3pjäs 4p3k2 p2l p4lac 5plan. p4lane p3larn p3lev 3plex 3plic 1plik 4plit p3lj 1plom p3lop 2p1m 4p1n p3ni 1po 5poa 2poc 2pof po2i 3polit 4polj poly3 2porg 3pos pos4ter 4pov po4vä 2pp p4part pp5ask p4pax p3pe p1pi p4pins pp3j pp1l pp3la pp3lin pp5lis pp5lu pp3ly pp3lån pp3låt pp3lä pp3lö pp5oc pp3of pp3p4 pp1r pp3ra pp3ri pp3ru pp3ry pp3rä pp3tr p2pu p5py pp3å p2r2 2pra 5prax 1pres pres4t pre3sta pres5to p3rig p3rik 5pril 3princ pring3 p5riol 3pro pro3g p3ror 4prå 3präs 3pröv 2ps p2sal 3psalm p5s2ho ps4ken ps2li p3sna 4pso p3sod p1s4t p4stak p4stäv p2sö 2p1t p3tri 1pu 4pug pul2l5ov pul5tr 5pung 3punk pus3t 2p1v på3dr 3päl pä5ro 4pör 3pé qu4 3que 1ra 3ra. raci4t 3rade. 4radr ra4du 5ra1e 2raffä ra3fr ra5is 2rak ra2lo r4ande 3rande. 4ran4d3r rand3s 2ransv ra3pl 3rar r4ar. 4rarb r4are 4rarg r4ark 4rarm r4arn r4ars 4rart r3arta ra5rö r4as ras3h ra2st 3raste. 3rativ ra3tri 2rav ra5yo 2rb 2r1c 2r2d r4daf rda5gr r3dj r4dos rd3ran rd3rat r4dul r3då r3dä r4dös 1re 3re. 4reaus re3b 4rec 5reco re3d4r re5du 4reft 4regg 3regn. re1kr rek5tri 4reld re3lu rem5p 3rems r4en. 2reni 2renk 2renl re3nö re3o 3rer. 3rern 3reso ress5k re1sti 3ret. 4retet ret3ro 4rety re5tå 2revig 4rex 2r1f rfö3ri 2r1g rg3g2 rgs5top 2rh rhands5 3rial 4rib 3rifi 2rifr r3ifrå 3rifu 3rigt rik2s 3riktn ri4mo 2rind rind3s 5ringen. ring3r 2rinr 2rins 2rint ri1o 3riot ri5ple ri2stä ri4tut ri4vis riv3s 4rj r4jis r3jo r5ju r5jö 2rk rk3akt r4kek rkes3 r1ki r3klas rk2le r4klö rk3n rk4ne r1ko r4kod rk3tr r1ku r4kup r1kä r5kör 2r1l r5laka r5lav rld2 rlds3 rl5sp 2r1m r4marb r4mil rm2s5j rm5tr 2r1n rnal4 rn3g4 rn1k r2nom rns4k rns4t rn3t ro3b ro4gro ro2kr 2rolj rol4li rom4a 5roman 5ronau 5rond. ron4v ro3pl ropp2s ro4ra 2rord 2rorg 2rorie 3rorn ro4sin ro4sn ros3v ro5te 2r1p r4plö r4pö 4r1r rra4n rrd4 rreligi5 rres4 r5rib rr5k4 r4rob r4rom rr1s rrs2k r4rur 2rs r4seld r4sex r2sin r1ski r4skid rsk3na rs5koll rs4kos rskotts3 r2sku r3skö rslags4v r4sle r4slo r4s5lö rs4mo rs5nat rs5nä r1sp r2spl r2spo rs3s4 rs5tak rs4te r5stek rs5tend r5steni rs5till r1sto r4ston rst4r r3strö r3stu r1sv rs4vag r2svä r1sy 2r1t r2taf r2takti rt4an r4tins r4tom r5trit r3trä rt3t r4tut rubb5l ru3br ru4dan ruks1 ruks3v 5rullera 3rum. runn2 runns5 4rupp rus2h ru5sha 2rut 5rutig rut4ra ru4vi 5ruö 2r1v rv4sj rv2s5kä r3w rydd5s ry5o råge5l 4rål rång3s rå5ra rå3st räck5s 4räkt 4räm räng3s räns5t 4räs rä4san räs3s rä5sti räv5s röd5el röd5r röd3s 2rög r3öi rök3s röns4t 4röp 3rör rör4s rö4st röst3r r1övr 1sa 3sa. 3sad. 3sade 4sadj 2sa3dr sad5s 2saf sa3i sak5ri 2s1akt sa5lo 3s2am sa2ma samman3 sa2mor sand3s 4sang 2sanl s3anlä san3sla 2sap 3s4ar. 2sarb 2sarm s5arm. 3sarn 2sart 4sarv 4sass 5sat. sa4tu 2sau s3auk 2s1av 4sb s2c 2sch. 1scha 2schau 4schb 1schen 1scher 1schet 1schi 4schk 4schm 4schp 3schy 3schö sci3p 4s3d 1se se4at. se2g 2s3egg 3segl seg3ra sek5le sek3r sek5tr 3sel. se5ly sem2 3sen. s5ersä 3set. 2sexp 2s1f s4fär. sfö2 4s3g2 2sh 5s2haw shi1s s5hö 1si sid5s 5sie si4eri si4esk si2ett 3s2ig 3sik sikts3 5sill. silver3 silv3r 2s1ind 2s1inf sinne2s3 3sinni 4sinr 2sin1s s1inst 5sint. 2sintr 3sio sis4t siu4 1s2j 2sjak s3jakt 4sjn 4sjt s4ju 5sjuk 4sjur själs3 3sjö 4sk. 2ska. 3s2kada s2kado 3skaffn 1skaft s4kag s2kal 3skal. 1skap 5skap. 5skapet 4skapi skaps1 4skar s4kara 5skarv 4skas s2kat s4kav 4ske. 3sked. s4kene 3skepp 4skh sk4i 3skif 5skin 4skis. 5skiv 5skjor 3skju 4skl sk5lap s3klas 4skn 3s4ko. 1s4kog 4skogsg 1skol 3skola s4kolo s4korp skor1st 1skot s5kran. 3skrat sk4ret 3skrev 1skri 3skrif s3krig 5skrin 3skrip s5kris 3skriv s5kron s4kru 5skrub 3skruv 5skräc sk3s 2skt 3skulp s3kup 2skv s4kve 1s2ky s4kyn 2skyrk 1skå s4kål 5skåp. 4skår 5skänk 3skärv 2sl2 4sla. s5lad. s3land 3s2lang s4lant s3lar. 4slas s1lat s2lev 3slev. s4lic slins3 4slis s2lit s5lor slotts3 s2lu s3luc s3luf 4slus s3lust 3slut slu4to 3slå. 5s4lår s4läk s5läm s5länn 3s4läp 4s3lär s2lät 3s2löj 2sm s2mak 3smak. s3makt s2mal s2met. s2mid s2mit 3smitta s3mj 5smug 5smyg små5g små3k små3s 3smäd 3smäl 4smäs 3smör 2s2n4 3snab 3s4nac s3nam s5nare s3nast s5ner 3snib 3snil 3snit 1snitt s3niv 3snut s4nå 5snår 5snäc s4när 3snö. snö5g 3snör snö3s 1so 3soc 5sock 2sod 5soi 2solj sol3s2 2som 5somm 3son son4st so5pra so4pu 3sor. 2sord s5ord. 2sorg 3sorn 3sot 4sott s2p2 5spann. s4park 5sparv 4spas s3pass spa5tr 1spe 4sped 3s4pek 3s4pel 4spelsl 2spen 2sper 5spets 3spill 3spir 4spl s1pla s3plan s3plats spli4 s4plin 5split s5plä 4spre s3pres 4s3pris 3sprit 2spro s3pry 3språ 5sprän s3ps 1s4på 3spån 3spår 5spän 3spö 4s1r 4s1s s5sad sse4lin s5sil ss2k ss5kl ss3kun ss1l ss2lag. ss2lä ss2lö ss3na sss4 ss3unn s2sv ss3vi s2t 2st. 4sta. 5stac 3stadi s4taf 5stalgis 3stalla 2stalli 5stam. 5stamm 1stant 5stark. 5startad 1state 3statl 1stau st3c 2s5te. 4stea 5steg. s4tek. 2stekn 5stekt s4tell 3stem. 3steme 5stenar 3s4tene 3stense 5stensm 1stera 1stering s4teriu 3sterne 5stetis 2stia 2stib 3stick 2stid s4tiken 2stil 3stil. 3stink 3stisc 1stit 2stj s5tju 3stjäl 3stjär 2stm 5stoc 1stol 4stolk 4stom stori4eu 5storis stor3s 3straff 4strativ 3strato 3strec 3strej st3ren 1strer 2stria 1strid 5stride 2striel st4rif 1strikt st5risk 1stru 3struk 2strumm s3tryc 5stryk 5stråk 3strål 3sträc 4sträd 3sträng 5sträv 3ström 2st3s4 st3t 4stv s3tvis 1sty 2styp 1stå 4ståg 5stål 1stä 3stäl 1stö 1su su4b 3sug su3i 3sum 2sun 5sun. s1under 5sune s5ung 2sup 5supa su2pu 5sus 2s1ut su4to su4tr s2v2 5svag. s3vagn 4s3vak 5svam 4svap svars3 3svart 4svas s3vat 4svec 3sven 5svep 4s3ver s5ves 4s3vil s4vine 4svis s5vitt s5våd 3svåri 3sväng 5svärm. s3väs s3vät 4syk 5syl 3syn syn3k s3yrk 3sys sys4t sys5ter syt2 sy5th 1så 5såg 4såk 2sålde sång3 1sä s4äd 2s5ägg s4äl 2säp 5säs 3sät 4säta 1sö 4söd 2sög s5öga sö4ko 4söl 4söp sör2s 2s3ört 1ta 3ta. ta1ch 3tade. 4tadi 4tads5 2taff 3taga 5tak. ta5kre 2taktig tak4to 4talf 5tallise tall5s 4talv 3tame 3tami 3tan. ta4nab 3tande. 2t3anfa 4tanl t4ap3l 2tappar 3tar. 4tarb tar4mi 3tarn tars4 4tart 5tartavl 4tarv 4task 3tast ta1str tat2 ta4tan tats3 2tatt 2tav 4tave 5tavla. 3tavlan 3tavlo tav2s 3tax 2tb4 2tc t3cha t3che 2t3d4 3t2e te4as te3b4 5tec 4teg te2g1r te3gre te3i te4int 4tej tej2s te4kl 5teknik 5teknis 4teld 5te5lö 5tema 4temo te4mu ten3g4 5tensi ten3tr te4nä te5nör 5ter. 5teriö ter3k4 5term 5terna 5ters ter3t te4ru 5tes. 5test tes4te te5stik te5stu 5tetik tets3 4texa 2texp 2t1f4 2t3g4 2th t4hen 1ti 3tial 5tib 5tici 3tid 5tide ti4du 4tidö ti4ed tifts5 ti2gel 3tigh ti4go ti2gr 3tigt tik3l 3tiks 5tikul t2il 5tilj 3tillst 3tillv 3tillä 5time 2tind 2tinr 2tint ti4od 3tion ti2os 3tis 4tisc 5tisk 3tiva ti4van 5tivite ti2ö t2j 4tje 4tjob 2tjou 4tjäl 4tjäm 3tjän 2t3k2 2t3l 2t1m 2t5n4 tne4r 4todl 3tok 4tol. 4tolj 2tomr 4toms t2op 5torap t5ord. 5toriett 4torm torm3s 3torn tor1st 4tort. tos4k t5ost. t4ov 2t1p t2r4 2tra t4raf 3trafi 3t4ral. t4rala 3t4rale 5tralo 3trals t4ralt 3trans tran2s5a 4trar t3ras. t3rat. t4rato 4treg 4tren 4trer. 4trern t3rets. 2tri 3tribu 5trick trids3 t5riel t1ring t3ring. 2troc t3rock t4rog t5ronik t3rono 4tropi. 5tross 5trotn t4rump t4rup 3trupp trus5ta 1tryc 5tryck. 5tryggh 4tråk 5trä. 3träd träds4 3träf 3träg 4träk t3räkn t4rän 5träni 5tröja t4röt 5tré 2ts t5s4and ts5art t3s4at t3se t4seg ts4en t4sex ts2k t5skall t3skatt t1ski ts3kl tskotts5 t5slot ts5läk ts3nä t3snö t2so ts3ord ts3pl tss4 t1st ts4te ts5ter ts5tillf ts3tj t3stol t4ston t2stra t4stry t4stur t5styr t2su t3sud t5sy 2tt t3tac t4tau t4ted tte5g4 t4tem tte2n ttes4 t4tex t4tins t4tip tt3ja t1to tt3rad tt3rand tt3rat tt3re tt3ri tt4ry tt4se tt2si tt4sta t3tu t4tug tt1v tt4vå t3ty t3tä t3tör 4t5ugn 2tund 3tunga tung3s 5tunn 2tupp tu5re 2tutb t3utv t3utö tu4vu 5tuö 2tv t1va 4tve t3vig 3tving t3vit 3tviv t3våg 3tvån t3vän tvär3s 3tvätt ty5da 5tyg. 3tyngd 3typ ty3pi 5tys 2tz 3tåg tås4 4tåt täc4ko 4t5äg 4täm 4tärm 3tävl 4tö4d tö5de 4tög 4töp tö4pi 3törer törs3t tö4vas 5té u1a u2b ub5al ubb4le ub3lic u4bo u3cha u5cl u2d u4dak u5de ud3r ud4ret uds4a u4du u4dy u1e u2es uf4fä uf4tan uf4to 4u1ga u1ge ugg3s ugn4 ugns5 ug3s4 u5ie u1in u3is u3itet u3j u2keb u5ki u4kl uk5la uk3n u1ko ukos4 uk2s uks5ko uk3tris ukt5s uk4tä u3ku uk3v u1la ul4di ulds2m ul4du ul4dö ull3ste ull3än u1lo uls5ti ul2tr u3lu u1lä u1lö um4fä um4so ums4t u1mu u3mör 5underl 1undersö 1underv un4dom und3r un4då un5g2ef un3gersk ung5it ung3r ungs4p 3unif unk3l unk3n un4kr un1sk un4tr un5trati u5nu u1o u1pe u4pern u1pi u2pl u3plet up3lik 3uppfa 1uppg up4pin 1uppla 5upplä up4p3r upp3s upp5sp up5ut ur5ak ur5arv u3re u1ri u1ro u4rob u4rom urs5tin ur4stä u5ry u2sak us5anl u3scha u3se usen3 u2s1k us3ka us4kla us4kr u5sky us4kå us5lä us3n u2sp us3pen us5tat us3tig u3stik us5tin ust5ro u4stå u4stä us3v u4så u4sä u2sö u4tak 1utb u4tef ute3s utik2 u5til uti3ö ut3j 3utjäm utlands3 u1to u3top uto5s ut3r ut4rer ut4ro ut5rop 1utru 2utsid ut3sl 3utslä 2utt utt4j ut1v 3utvec u5ty ut3öv u5u 2u1v u2vak u4vj u4vä u5å u3ö va5dro 1vagn 2v1akti val3k val4li val4st 5valv 5vama 4vand. 4vanp van4st van5tr 5vap 2varb va4res va4ri. 4vark var2s vart5r va1ru vas5ti 5vattn 4vau 4vav 5vavi 2vb4 2v1c 2v3d4 1ve 5vec ve2k ve3ke 4veld vensk3ä 5ventera ve3ny ve5nö 4vep ver5g 3verk ves4 ve2s5p ve1st 3veta 3vete vet5sa vett5s 2v1f 2v1g 2vh v4i vi4c vid3s vild3s vil4t 3vind. ving3s4 3vinkl vi2no 5vinst. 5vinste vi5ny 3vis. vi5sa vis5h vis5ko vi4st vis3ta vi2tr vi4var 4vjo 2v3k2 2v1l 2v1m vmörk4 2v1n4 1vo 4vok. 2vom 4vord 2vorg vos4 2v1p 2v2r 5vrak 3vrera v3ru 2vs v4sc v1s2k v2skri vs4mi v3sni v2so v1st vs4te vs5trå v5styc vs3vå v2sö 2v1t vu4d1 v1und 4v5up 4vut 2v1v 3vy 5våld vångs3 3vård 4våri vå3ru 3väg vägg5s vä4l väll4s3 3vänl 3värde vä4ril 4värj 5värk 3värld 2vät 3väx 4vög 4vöp 3vör 1wa we2 w2h whi2 wi2e w4na x1 xan5d4 xem3pla xis4 xk2 xli4 xs4 xti2 x4tå 2y y1a y4bris yb4s y2d y4da y5dan y4do yd3r yds4 y4du y4dö y1e y1ga y1ge ygg3r yg4gå ygs4p y1i y1ki y5klist yk5lon yk3n y1ko y1la yl4gj y3li yl5k yl5lä y1lo yl4tr ym2fl ym4for y3må yng3r ynk5l yn4sa yns4t y3or y5ou y1pe y5po yp3ri yre4s y1ri yr4ku yrk5v y1ro yrs4k yr5st yr5tu y1rå3 y5scho ys2st ys3ta ys3ti ys4tik. yst3ra y2tak y4te. y4tea y1to ytt3r yt5v y3va y3vi y3vä y5w y5å 1za 1ze ze4ro 1zi 1zo zo4nal 4zp z5s 3zu z4zin å1a å3dj åds4l å1e å1f å1ga å1ge åge2l åg3l åg3s4k åg3st ågå4 å3i å1ki 5åklag åk4strä å1la 1ålder å2lin ål3k åll4sp ål2s5e ål3st å1lä å1m åman4s ånd4r ån4du åns4t åns4v å3o å1p å2pl å5pla å4pö år4do ård4ra ård2s ård4s3t å4rel å1ri å5ror 5årsav år5s2li år2sv år5ö ås4ke ås3n åss4 ås4skr ås4t åte2 åt3ri å3trå åt2sj ått5s å1v ä1a ä2b 2äc äck5v ä2d ädd3s äd4du äde4s äd3r äd5se äd3st ä3e ä1ga ä1ge äg4go äg1l äg3r äg4re äg3se ä3i ä5jo 4äk ä1ki äk3n äk3r ä1la äl4pap äl4seg äls5kog äl4slu äl2t3r äl2tu äl4vin ämp3l 4ändligh änd3r änd1st äng5r änni3s änn3s ä4no äns1l än4st äns5te än4sv än2t3r ä3pe äpp3l ä4pr äp4st ä4rap är2bre ärg5l är4gr ä1ri ärib4 är4kä är4nis ärn3st är2nå är4nö är5ob ä5rol ä3rop ä5ror ä5ros är2si är4sko är2so är4sp är2sv är4tand är2tr ärt3s 4äs äs3pa äs5pi äs4sk äs4sp äs3ta äst3r ä4stä ä4så 2ät ä3to ä5tre ät4s3k ät5te ät4top ätt3r ät4tu ät4tv ä1va ä2vak ä3vi ä5vu ö1a ö2d ö4dak ö4dal ö4darv öde4s5 ö4dis öd3ra öd2s öd3se ö4du ö4dö ö1e ö1ga ög5ak ö5gar 1ögd ö1ge ö5ger ögg4 ög1l ög2n ögn3e 1ögo ög3si ög3sk ö1i ö3jo öj4sv ö4karm ö1ki ök3n ök2s ök3sl ö1la öl4kv öl4kö öl2p ö5lä öman4 öm2kl ö4nal ö2nom öns3ke ön4so önst3r ö3pe ö4pel ö3pi öp5li ö5plo 1öppn ö4pr ö3rande ö3ras ö4rask örb4 ör3d4r ör1eni ö3res ö4restr ö3ret ör5evig ör3g ö1ri ö5rig ö3ring ör3int ör5ir ör5iv ör4kal ör1k2l ör5kli ör4nis ör3ol ör1or ör2p5la ör1s2k ör3sl ör4slä ör5te ört5s ör1u ör3vr ör3y ör1ä örö4d ö2sak ös3n ös4sj ös2sk ös4sp ös3ta öst3v ö2tak öts5ko öt4st ö1v öve4 över1 5övere ö2vj öv3ra öv3ri öv4sk é3e}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-da.hyp0000644000175000017500000000017111761001300024630 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-da.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-mn.rme0000644000175000017500000000770111761001300024647 0ustar norbertnorbert% generated by mtxrun --script pattern --convert (New) Mongolian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: mnhyphn.tex (2008-03-30) % Author: Dorjgotov Batmunkh % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % %% mnhyphn.tex v1.2 2008/03/23 (2010/04/03) %% Copyright 2007-2010 by Dorjgotov Batmunkh, National University of Mongolia %% email bataak@gmail.com % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % Special thanks to: Jim Hefferon and Robin Fairbairns % % There are few basic rules in mongolian % % 1. If there is a consonant then it can use hyphen before it. % And if there're two consonants then it can use hyphen before second consonant. % Are there three consonants then it can put hyphen before third consonant, % also are there four consonants then it can use hyphen before fourth consonant. % 2. In the case of hardsign or softsign, it's possible to hyphen after these signs. % For instance, байгуулъ-я, үзүүль-е % 3. However one vowel can be belong to a syllable, it's not possible to use hyphen. % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-mn.lua0000644000175000017500000004201312161703335024654 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="mn", ["source"]="hyph-mn-cyrl", ["texcomment"]="% (New) Mongolian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: mnhyphn.tex (2008-03-30)\ % Author: Dorjgotov Batmunkh \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ %% mnhyphn.tex v1.2 2008/03/23 (2010/04/03)\ %% Copyright 2007-2010 by Dorjgotov Batmunkh, National University of Mongolia\ %% email bataak@gmail.com\ %\ % This work may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either version 1.3\ % of this license or (at your option) any later version.\ % The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ % and version 1.3 or later is part of all distributions of LaTeX\ % version 2005/12/01 or later.\ %\ % Special thanks to: Jim Hefferon and Robin Fairbairns\ %\ % There are few basic rules in mongolian\ %\ % 1. If there is a consonant then it can use hyphen before it.\ % And if there're two consonants then it can use hyphen before second consonant.\ % Are there three consonants then it can put hyphen before third consonant,\ % also are there four consonants then it can use hyphen before fourth consonant.\ % 2. In the case of hardsign or softsign, it's possible to hyphen after these signs.\ % For instance, байгуулъ-я, үзүүль-е\ % 3. However one vowel can be belong to a syllable, it's not possible to use hyphen.\ %\ % ", }, ["patterns"]={ ["characters"]="абвгдежзийклмнопрстуфхцчшщъыьэюяёүө", ["data"]="1ба 1бе 1бё 1би 1бо 1бө 1бу 1бү 1бы 1бь2ю 1бэ 1бю 1бя 1ва 1ве 1вё 1ви 1во 1вө 1ву 1вү 1вы 1вь2ю 1вэ 1вю 1вя 1га 1ге 1гё 1ги 1го 1гө 1гу 1гү 1гы 1гь2ю 1гэ 1гю 1гя 1да 1де 1дё 1ди 1до 1дө 1ду 1дү 1ды 1дь2ю 1дэ 1дю 1дя 1жа 1же 1жё 1жи 1жо 1жө 1жу 1жү 1жэ 1жю 1жя 1за 1зе 1зё 1зи 1зо 1зө 1зу 1зү 1зы 1зь2ю 1зэ 1зю 1зя 1ка 1ке 1кё 1ки 1ко 1ку 1кү 1кэ 1кю 1кя 1ла 1ле 1лё 1ли 1ло 1лө 1лу 1лү 1лы 1лэ 1лю 1ля 1ма 1ме 1мё 1ми 1мо 1мө 1му 1мү 1мы 1мэ 1мю 1мя 1на 1не 1нё 1ни 1но 1нө 1ну 1нү 1ны 1нь2ю 1нэ 1ню 1ня 1па 1пе 1пё 1пи 1по 1пө 1пу 1пү 1пы 1пь2ю 1пэ 1пю 1пя 1ра 1ре 1рё 1ри 1ро 1рө 1ру 1рү 1ры 1рэ 1рю 1ря 1са 1се 1сё 1си 1со 1сө 1су 1сү 1сы 1сэ 1сю 1ся 1та 1те 1тё 1ти 1то 1тө 1ту 1тү 1ты 1ть2ю 1тэ 1тю 1тя 1фа 1фе 1фё 1фи 1фо 1фу 1фы 1фэ 1фю 1фя 1ха 1хе 1хё 1хи 1хо 1хө 1ху 1хү 1хы 1хэ 1хю 1хя 1ца 1це 1цё 1ци 1цо 1цө 1цу 1цү 1цы 1цэ 1цю 1ця 1ча 1че 1чё 1чи 1чо 1чө 1чу 1чү 1чэ 1чю 1чя 1ша 1ше 1шё 1ши 1шо 1шө 1шу 1шү 1шэ 1шю 1шя 1ща 1ще 1щи 1щу 2а1я 2аа 2б3ю4у 2б3ю4ү 2в3ю4у 2в3ю4ү 2г3ю4у 2г3ю4ү 2д3ю4у 2д3ю4ү 2ж3ю4у 2ж3ю4ү 2з3ю4у 2з3ю4ү 2и1е 2й1е 2й1ё 2й1ю 2й1я 2л3ю4у 2л3ю4ү 2м3ю4у 2м3ю4ү 2н3ю4у 2н3ю4ү 2о1е 2о1ё 2о1я 2оо 2ө1е 2өө 2п3ю4у 2п3ю4ү 2р3ю4у 2р3ю4ү 2с3ю4у 2с3ю4ү 2т3ю4у 2т3ю4ү 2у1я 2у3ю 2уу 2үү 2х3ю4у 2х3ю4ү 2ц3ю4у 2ц3ю4ү 2ч3ю4у 2ч3ю4ү 2ш3ю4у 2ш3ю4ү 2ъ3е 2ъ3ё 2ъ3ю 2ъ3я 2ь3е 2ь3ё 2ь3я 2э3е 2ээ 2ю3а 2ю3и 2ю3о .авто3а4г .авто3а4д .авто3а4к .авто3а4л .авто3а4н .авто3а4с .авто3б4л .авто3б4р .авто3в4в .авто3в4л .авто3г4р .авто3д4р .авто3и4м .авто3и4н .авто3и4о .авто3к4л .авто3к4р .авто3о4б .авто3о4к .авто3о4п .авто3о4т .авто3п4р .авто3с4к .авто3с4л .авто3с4м .авто3с4п .авто3с4т .авто3с4ц .авто3т4р .авто3ф4л .авто3ф4р .авто3х4р .авто3х4т .авто3ц4в .авто3э4к .авто3э4л .авто3э4м .авто3э4п .анти3а4в .анти3а4д .анти3а4л .анти3а4н .анти3а4п .анти3а4р .анти3а4с .анти3а4т .анти3а4у .анти3б4л .анти3г4л .анти3г4р .анти3д4р .анти3и4д .анти3и4з .анти3и4м .анти3и4н .анти3к4в .анти3к4л .анти3о4б .анти3о4з .анти3о4к .анти3п4л .анти3п4н .анти3п4р .анти3п4с .анти3с4в .анти3с4к .анти3с4т .анти3с4ц .анти3т4р .анти3у4з .анти3у4р .анти3у4т .анти3ф4л .анти3ф4р .анти3х4л .анти3х4р .анти3э4м .анти3э4н .анти3э4р .астро3б4л .астро3г4л .астро3г4р .астро3и4н .астро3о4р .астро3с4п .астро3ш4т .аэро3д4р .аэро3к4л .аэро3п4л .аэро3с4т .аэро3ф4л .би3а4к .би3а4л .би3а4ф .би3к4в .би3к4р .би3о4р .би3п4р .би3э4к .био3а4к .био3а4н .био3а4п .био3а4с .био3б4л .био3г4р .био3и4н .био3к4л .био3к4р .био3о4р .био3п4л .био3п4р .био3с4к .био3с4п .био3с4т .био3с4ф .био3х4р .био3э4к .био3э4л .био3э4н .био3э4т .бь4 .въ4 .вь4 .газо3а4б .газо3а4д .газо3а4н .газо3а4п .гео3а4к .гео3б4л .гео3г4р .гео3и4з .гео3и4н .гео3к4р .гео3с4к .гео3с4т .гео3с4ф .гео3т4р .гео3ф4л .гео3х4р .гео3э4к .гео3э4л .гидро3а4б .гидро3а4в .гидро3а4г .гидро3а4д .гидро3а4к .гидро3а4л .гидро3а4м .гидро3а4р .гидро3а4э .гидро3г4р .гидро3и4з .гидро3и4н .гидро3и4о .гидро3к4л .гидро3к4р .гидро3о4к .гидро3п4л .гидро3п4н .гидро3с4т .гидро3с4ф .гидро3т4р .гидро3у4д .гидро3у4з .гидро3у4р .гидро3х4л .гидро3э4к .гидро3э4л .гидро3э4н .гипе2р3а4д .гипе2р3а4з .гипе2р3а4к .гипе2р3а4л .гипе2р3а4м .гипе2р3а4р .гипе2р3а4ц .гипе2р3а4э .гипе2р3е4а .гипе2р3е4м .гипе2р3е4р .гипе2р3е4с .гипе2р3и4з .гипе2р3и4м .гипе2р3и4н .гипе2р3о4в .гипе2р3о4к .гипе2р3о4с .гипер3б4р .гипер3г4л .гипер3г4р .гипер3к4в .гипер3к4р .гипер3м4н .гипер3п4л .гипер3п4н .гипер3п4р .гипер3с4п .гипер3с4р .гипер3с4с .гипер3с4т .гипер3т4р .гипер3у4р .гипер3ф4р .гипер3х4л .гипер3х4р .гипер3э4к .гипер3э4л .гипер3э4н .гипер3э4о .гипер3э4с .голо3б4л .голо3э4д .гомо3а4з .гомо3а4к .гомо3а4т .гомо3к4л .гомо3п4л .гомо3с4п .гомо3т4р .гомо3ф4т .гомо3э4н .гомо3э4п .гь4 .ди1а3г4н .ди4ст5ри .ди4ст5ро .диа3д4р .диа3к4л .диа3к4р .диа3с4к .диа3с4п .диа3с4т .диа3т4р .диа3ф4р .диазо3т4р .диазо3э4т .диазо3э4ф .дина3т4р .дь4 .евро3а4з .евро3а4т .евро3и4е .евро3к4р .евро3о4б .евро3с4п .евро3с4т .изо3а4в .изо3а4г .изо3а4д .изо3а4з .изо3а4к .изо3а4л .изо3а4м .изо3а4н .изо3б4р .изо3в4р .изо3г4л .изо3г4р .изо3д4р .изо3и4о .изо3й4о .изо3к4л .изо3к4р .изо3л4г .изо3л4ж .изо3о4к .изо3п4л .изо3п4р .изо3с4т .изо3т4к .изо3т4р .изо3х4р .изо3ш4л .изо3э4в .изо3э4д .изо3э4й .изо3э4л .изо3э4н .ин3а4кт .ин3а4п .ин3а4у .ин3б4р .ин3г4р .ин3к4л .ин3к4р .ин3с4тр .инте2р3а4к .интер3г4р .интер3к4в .интер3к4р .интер3п4р .интер3ф4л .кило3а4м .кило3г4р .кило3э4л .кино3а4к .кино3а4н .кино3а4п .кино3а4ф .кино3б4л .кино3д4р .кино3и4с .кино3к4л .кино3к4р .кино3о4п .кино3п4л .кино3п4р .кино3с4к .кино3с4ъ .кино3ф4л .кино3ф4р .кино3х4р .кино3э4к .ко3а4г .ко3а4д .ко3а4к .ко3и4н .ко3о4п .ко3о4р .ко3п4л .ко3э4ф .кь4 .ль4 .макро3а4н .макро3а4с .макро3б4л .макро3б4р .макро3г4л .макро3г4н .макро3г4р .макро3и4н .макро3и4с .макро3к4л .макро3к4р .макро3о4в .макро3о4п .макро3о4р .макро3п4л .макро3п4р .макро3с4к .макро3с4п .макро3с4т .макро3с4х .макро3т4р .макро3ф4л .макро3ф4т .макро3э4в .макро3э4к .макро3э4л .макро3э4н .макро3э4р .макро3э4с .мега3о4м .мега3п4р .мега3с4к .мега3с4п .мега3э4л .микро3а4в .микро3а4г .микро3а4д .микро3а4м .микро3а4н .микро3а4р .микро3а4с .микро3а4у .микро3а4э .микро3б4л .микро3б4р .микро3г4р .микро3д4в .микро3и4з .микро3и4н .микро3и4с .микро3й4о .микро3к4л .микро3к4н .микро3к4р .микро3о4б .микро3о4п .микро3о4р .микро3о4с .микро3п4л .микро3п4р .микро3с4к .микро3с4п .микро3с4т .микро3с4ф .микро3с4х .микро3т4р .микро3ф4л .микро3х4р .микро3э4в .микро3э4л .микро3э4м .микро3э4н .микро3э4р .милли3а4м .милли3г4р .милли3о4м .милли3э4к .моно3а4в .моно3а4з .моно3а4л .моно3а4м .моно3а4н .моно3а4р .моно3а4т .моно3а4ц .моно3б4л .моно3б4р .моно3г4л .моно3г4р .моно3и4з .моно3и4м .моно3и4н .моно3к4л .моно3к4р .моно3о4к .моно3о4л .моно3п4л .моно3п4р .моно3п4с .моно3с4п .моно3с4т .моно3т4р .моно3ф4т .моно3х4л .моно3х4р .моно3э4д .моно3э4н .моно3э4п .моно3э4т .моно3э4ф .мото3д4р .мото3к4р .мото3п4л .мото3п4р .мото3с4п .мото3ш4л .мь4 .на3у .нано3а4д .нано3п4р .нео3а4д .нео3а4н .нео3а4р .нео3б4л .нео3г4л .нео3г4н .нео3г4р .нео3и4з .нео3и4м .нео3и4н .нео3к4л .нео3к4р .нео3п4л .нео3п4р .нео3х4р .нео3э4з .нео3э4н .нео3э4п .нео3э4с .нь4 .орто3а4л .орто3а4м .орто3а4н .орто3а4р .орто3д4р .орто3и4з .орто3к4р .орто3п4л .орто3п4р .орто3п4с .орто3с4в .орто3с4к .орто3с4т .орто3т4р .орто3х4л .орто3х4р .орто3э4т .орто3э4ф .пара3а4к .пара3а4л .пара3а4м .пара3а4н .пара3а4п .пара3а4ц .пара3б4л .пара3г4н .пара3г4р .пара3к4л .пара3к4р .пара3о4к .пара3п4л .пара3п4с .пара3с4п .пара3с4ф .пара3с4ц .пара3т4р .пара3х4л .пара3х4р .пара3э4л .пара3э4т .паро3п4р .поли3а4в .поли3а4д .поли3а4з .поли3а4к .поли3а4л .поли3а4м .поли3а4н .поли3а4р .поли3а4ц .поли3б4р .поли3г4л .поли3г4р .поли3и4з .поли3и4м .поли3к4л .поли3к4р .поли3о4к .поли3о4л .поли3п4л .поли3п4н .поли3п4р .поли3с4п .поли3с4т .поли3у4р .поли3х4л .поли3х4р .поли3э4д .поли3э4к .поли3э4л .поли3э4н .поли3э4т .поли3э4ф .пре3э4к .пре3ю4д .про3а4г .про3а4к .про3а4м .про3а4н .про3а4у .про3г4р .про3и4г .про3и4з .про3и4л .про3и4н .про3к4л .про3с4п .про3х4р .про3э4к .про3э4м .про3э4н .про3э4р .про3э4с .прото3х4л .прото3х4р .прото3э4р .проф3г4р .пъ4 .пь4 .ре3а4б .ре3а4г .ре3а4д .ре3а4к .ре3а4с .ре3а4ф .ре3а4э .ре3г4р .ре3и4м .ре3и4н .ре3и4ф .ре3к4р .ре3п4р .ре3т4ра .ретро3а4к .ретро3а4у .ретро3г4р .ретро3о4т .ретро3ф4л .санти3г4р .стерео3а4д .стерео3а4к .стерео3б4л .стерео3г4р .стерео3и4з .стерео3с4к .стерео3с4п .стерео3т4р .стерео3э4л .стерео3э4н .стерео3э4ф .супер3а4г .супер3а4д .супер3а4к .супер3а4н .супер3а4р .супер3а4э .супер3г4р .супер3е4с .супер3и4з .супер3и4к .супер3и4м .супер3и4н .супер3к4л .супер3п4р .супер3с4к .супер3с4п .супер3с4т .супер3х4р .супер3э4в .супер3э4к .супер3э4ф .съ4 .сь4 .ть4 .фь4 .хризо3и4д .хризо3п4р .хризо3с4т .хь4 .элек3тро .элек3тро3а4в .элек3тро3а4г .элек3тро3а4к .элек3тро3а4н .элек3тро3а4э .элек3тро3б4л .элек3тро3и4з .элек3тро3и4с .элек3тро3о4б .элек3тро3о4в .элек3тро3о4г .элек3тро3о4д .элек3тро3о4к .элек3тро3о4п .элек3тро3о4с .элек3тро3о4т .элек3тро3о4ф .элек3тро3о4ч .элек3тро3с4т .элек3тро3т4р .элек3тро3э4к .элек3тро3э4н .элек3тро3э4р 3авто 3актив 3аппа 3г4рад 3г4рам 3г4раф 3им4пул 3ин3ст4ру 3ин3те4р 3к4ва 3к4лас 3к4ри 3оп3тик 3п3роек 3п4ро 3с4коп 3с4фе 3с4хе 3ск4ла 3ск4ле 3ск4ло 3ск4ля 3ск4ра 3ск4ре 3ск4ри 3ск4ро 3ск4ру 3ск4ры 3сп4ла 3ст4ра 3ст4ре 3ст4ри 3ст4ро 3ст4рук 3ф4рагм 3х4лор 3х4ром 3ш2таб 3ш2тат 3э4к5ви 3э4ко 3э4лек4т 3э4леме 3э4нерг 3э4нтро 3эффе", ["length"]=12893, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=988, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-eu.lua0000644000175000017500000000616412161703335024662 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="eu", ["source"]="hyph-eu", ["texcomment"]="% Basque hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Hyphenation patterns for Basque.\ %\ % This file has first been written by Juan M. Aguirregabiria\ % (juanmari.aguirregabiria@ehu.es) on February 1997 based on the\ % shyphen.sh script that generates the Spanish patterns as compiled\ % by Julio Sanchez (jsanchez@gmv.es) on September 1991.\ %\ % In June 2008 the generating script has been rewritten into ruby and\ % adapted for native UTF-8 TeX engines. Patterns became part of hyph-utf8\ % package and were renamed from bahyph.tex into hyph-eu.tex.\ % Functionality should not change apart from adding ñ by default.\ %\ % The original Copyright followed and applied also to precessor of this file\ % whose last version will be always available by anonymous ftp\ % from tp.lc.ehu.es or by poynting your Web browser to\ % http://tp.lc.ehu.es/jma/basque.html\ %\ % For more information about the new UTF-8 hyphenation patterns and\ % links to this file see\ % http://www.tug.org/tex-hyphen/\ %\ % COPYRIGHT NOTICE\ %\ % These patterns and the generating script are Copyright (c) JMA 1997, 2008\ % These patterns are made public in the hope that they will benefit others.\ % You can use this software for any purpose.\ % However, this is given for free and WITHOUT ANY WARRANTY.\ %\ % You are kindly requested to send any changes to the author.\ % If you change the generating script, you must include code\ % in it such that any output is clearly labeled as generated\ % by a modified script.\ %\ % END OF COPYRIGHT NOTICE\ %\ % Open vowels: a e o\ % Closed vowels: i u\ % Consonants: b c d f g j k l m n ñ p q r s t v w x y z\ %\ % Some of the patterns below represent combinations that never\ % happen in Basque. Would they happen, they would be hyphenated\ % according to the rules.\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefgijklmnopqrstuvwxyzñ", ["data"]="1ba 1be 1bo 1bi 1bu 1ca 1ce 1co 1ci 1cu 1da 1de 1do 1di 1du 1fa 1fe 1fo 1fi 1fu 1ga 1ge 1go 1gi 1gu 1ja 1je 1jo 1ji 1ju 1ka 1ke 1ko 1ki 1ku 1la 1le 1lo 1li 1lu 1ma 1me 1mo 1mi 1mu 1na 1ne 1no 1ni 1nu 1ña 1ñe 1ño 1ñi 1ñu 1pa 1pe 1po 1pi 1pu 1qa 1qe 1qo 1qi 1qu 1ra 1re 1ro 1ri 1ru 1sa 1se 1so 1si 1su 1ta 1te 1to 1ti 1tu 1va 1ve 1vo 1vi 1vu 1wa 1we 1wo 1wi 1wu 1xa 1xe 1xo 1xi 1xu 1ya 1ye 1yo 1yi 1yu 1za 1ze 1zo 1zi 1zu 1l2la 1l2le 1l2lo 1l2li 1l2lu 1r2ra 1r2re 1r2ro 1r2ri 1r2ru 1t2sa 1t2se 1t2so 1t2si 1t2su 1t2xa 1t2xe 1t2xo 1t2xi 1t2xu 1t2za 1t2ze 1t2zo 1t2zi 1t2zu 1b2la 1b2le 1b2lo 1b2li 1b2lu 1b2ra 1b2re 1b2ro 1b2ri 1b2ru 1d2ra 1d2re 1d2ro 1d2ri 1d2ru 1f2la 1f2le 1f2lo 1f2li 1f2lu 1f2ra 1f2re 1f2ro 1f2ri 1f2ru 1g2la 1g2le 1g2lo 1g2li 1g2lu 1g2ra 1g2re 1g2ro 1g2ri 1g2ru 1k2la 1k2le 1k2lo 1k2li 1k2lu 1k2ra 1k2re 1k2ro 1k2ri 1k2ru 1p2la 1p2le 1p2lo 1p2li 1p2lu 1p2ra 1p2re 1p2ro 1p2ri 1p2ru 1t2ra 1t2re 1t2ro 1t2ri 1t2ru su2b2r su2b2l", ["length"]=948, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=192, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-deo.rme0000644000175000017500000000175312161703335025021 0ustar norbertnorbert% generated by mtxrun --script pattern --convert German hyphenation patterns (traditional orthography) (more info about the licence to be added later) % dehypht-x-2013-05-26.pat \message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2013-05-26 (WL)} % TeX-Trennmuster für die traditionelle deutsche Rechtschreibung % % % Copyright (C) 2008, 2009, 2011, 2012, 2013 Werner Lemberg % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % % The word list is available from % % http://repo.or.cz/w/wortliste.git?a=commit;h=6199aa4827709d9995ac9a34ddc6551f1ba1eb6e % % The used patgen parameters are % % 1 1 | 2 5 | 1 1 1 % 2 2 | 2 5 | 1 2 1 % 3 3 | 2 6 | 1 1 1 % 4 4 | 2 6 | 1 4 1 % 5 5 | 2 7 | 1 1 1 % 6 6 | 2 7 | 1 6 1 % 7 7 | 2 13 | 1 4 1 % 8 8 | 2 13 | 1 8 1 context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-bg.pat0000644000175000017500000003135511761001300024630 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-bg.rme % used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ь ю я \patterns{ 1а1 1б1 1в1 1г1 1д1 1е1 1ж1 1з1 1и1 1й1 1к1 1л1 1м1 1н1 1о1 1п1 1р1 1с1 1т1 1у1 1ф1 1х1 1ц1 1ч1 1ш1 1щ1 1ъ1 0ь0 1ю1 1я1 б4а б4е б4и б4о б4у б4ъ б4ю б4я в4а в4е в4и в4о в4у в4ъ в4ю в4я г4а г4е г4и г4о г4у г4ъ г4ю г4я д4а д4е д4и д4о д4у д4ъ д4ю д4я ж4а ж4е ж4и ж4о ж4у ж4ъ ж4ю ж4я з4а з4е з4и з4о з4у з4ъ з4ю з4я й4а й4е й4и й4о й4у й4ъ й4ю й4я к4а к4е к4и к4о к4у к4ъ к4ю к4я л4а л4е л4и л4о л4у л4ъ л4ю л4я м4а м4е м4и м4о м4у м4ъ м4ю м4я н4а н4е н4и н4о н4у н4ъ н4ю н4я п4а п4е п4и п4о п4у п4ъ п4ю п4я р4а р4е р4и р4о р4у р4ъ р4ю р4я с4а с4е с4и с4о с4у с4ъ с4ю с4я т4а т4е т4и т4о т4у т4ъ т4ю т4я ф4а ф4е ф4и ф4о ф4у ф4ъ ф4ю ф4я х4а х4е х4и х4о х4у х4ъ х4ю х4я ц4а ц4е ц4и ц4о ц4у ц4ъ ц4ю ц4я ч4а ч4е ч4и ч4о ч4у ч4ъ ч4ю ч4я ш4а ш4е ш4и ш4о ш4у ш4ъ ш4ю ш4я щ4а щ4е щ4и щ4о щ4у щ4ъ щ4ю щ4я ь4а ь4е ь4и ь4о ь4у ь4ъ ь4ю ь4я 4б3б4 2б3в2 2б3г2 2б3д2 2б3ж2 2б3з2 2б3й2 2б3к2 2б3л2 2б3м2 2б3н2 2б3п2 2б3р2 2б3с2 2б3т2 2б3ф2 2б3х2 2б3ц2 2б3ч2 2б3ш2 2б3щ2 2в3б2 4в3в4 2в3г2 2в3д2 2в3ж2 2в3з2 2в3й2 2в3к2 2в3л2 2в3м2 2в3н2 2в3п2 2в3р2 2в3с2 2в3т2 2в3ф2 2в3х2 2в3ц2 2в3ч2 2в3ш2 2в3щ2 2г3б2 2г3в2 4г3г4 2г3д2 2г3ж2 2г3з2 2г3й2 2г3к2 2г3л2 2г3м2 2г3н2 2г3п2 2г3р2 2г3с2 2г3т2 2г3ф2 2г3х2 2г3ц2 2г3ч2 2г3ш2 2г3щ2 2д3б2 2д3в2 2д3г2 4д3д4 3д4ж 2д3з2 2д3й2 2д3к2 2д3л2 2д3м2 2д3н2 2д3п2 2д3р2 2д3с2 2д3т2 2д3ф2 2д3х2 2д3ц2 2д3ч2 2д3ш2 2д3щ2 2ж3б2 2ж3в2 2ж3г2 2ж3д2 4ж3ж4 2ж3з2 2ж3й2 2ж3к2 2ж3л2 2ж3м2 2ж3н2 2ж3п2 2ж3р2 2ж3с2 2ж3т2 2ж3ф2 2ж3х2 2ж3ц2 2ж3ч2 2ж3ш2 2ж3щ2 2з3б2 2з3в2 2з3г2 2з3д2 2з3ж2 4з3з4 2з3й2 2з3к2 2з3л2 2з3м2 2з3н2 2з3п2 2з3р2 2з3с2 2з3т2 2з3ф2 2з3х2 2з3ц2 2з3ч2 2з3ш2 2з3щ2 2й3б2 2й3в2 2й3г2 2й3д2 2й3ж2 2й3з2 4й3й4 2й3к2 2й3л2 2й3м2 2й3н2 2й3п2 2й3р2 2й3с2 2й3т2 2й3ф2 2й3х2 2й3ц2 2й3ч2 2й3ш2 2й3щ2 2к3б2 2к3в2 2к3г2 2к3д2 2к3ж2 2к3з2 2к3й2 4к3к4 2к3л2 2к3м2 2к3н2 2к3п2 2к3р2 2к3с2 2к3т2 2к3ф2 2к3х2 2к3ц2 2к3ч2 2к3ш2 2к3щ2 2л3б2 2л3в2 2л3г2 2л3д2 2л3ж2 2л3з2 2л3й2 2л3к2 4л3л4 2л3м2 2л3н2 2л3п2 2л3р2 2л3с2 2л3т2 2л3ф2 2л3х2 2л3ц2 2л3ч2 2л3ш2 2л3щ2 2м3б2 2м3в2 2м3г2 2м3д2 2м3ж2 2м3з2 2м3й2 2м3к2 2м3л2 4м3м4 2м3н2 2м3п2 2м3р2 2м3с2 2м3т2 2м3ф2 2м3х2 2м3ц2 2м3ч2 2м3ш2 2м3щ2 2н3б2 2н3в2 2н3г2 2н3д2 2н3ж2 2н3з2 2н3й2 2н3к2 2н3л2 2н3м2 4н3н4 2н3п2 2н3р2 2н3с2 2н3т2 2н3ф2 2н3х2 2н3ц2 2н3ч2 2н3ш2 2н3щ2 2п3б2 2п3в2 2п3г2 2п3д2 2п3ж2 2п3з2 2п3й2 2п3к2 2п3л2 2п3м2 2п3н2 4п3п4 2п3р2 2п3с2 2п3т2 2п3ф2 2п3х2 2п3ц2 2п3ч2 2п3ш2 2п3щ2 2р3б2 2р3в2 2р3г2 2р3д2 2р3ж2 2р3з2 2р3й2 2р3к2 2р3л2 2р3м2 2р3н2 2р3п2 4р3р4 2р3с2 2р3т2 2р3ф2 2р3х2 2р3ц2 2р3ч2 2р3ш2 2р3щ2 2с3б2 2с3в2 2с3г2 2с3д2 2с3ж2 2с3з2 2с3й2 2с3к2 2с3л2 2с3м2 2с3н2 2с3п2 2с3р2 4с3с4 2с3т2 2с3ф2 2с3х2 2с3ц2 2с3ч2 2с3ш2 2с3щ2 2т3б2 2т3в2 2т3г2 2т3д2 2т3ж2 2т3з2 2т3й2 2т3к2 2т3л2 2т3м2 2т3н2 2т3п2 2т3р2 2т3с2 4т3т4 2т3ф2 2т3х2 2т3ц2 2т3ч2 2т3ш2 2т3щ2 2ф3б2 2ф3в2 2ф3г2 2ф3д2 2ф3ж2 2ф3з2 2ф3й2 2ф3к2 2ф3л2 2ф3м2 2ф3н2 2ф3п2 2ф3р2 2ф3с2 2ф3т2 4ф3ф4 2ф3х2 2ф3ц2 2ф3ч2 2ф3ш2 2ф3щ2 2х3б2 2х3в2 2х3г2 2х3д2 2х3ж2 2х3з2 2х3й2 2х3к2 2х3л2 2х3м2 2х3н2 2х3п2 2х3р2 2х3с2 2х3т2 2х3ф2 4х3х4 2х3ц2 2х3ч2 2х3ш2 2х3щ2 2ц3б2 2ц3в2 2ц3г2 2ц3д2 2ц3ж2 2ц3з2 2ц3й2 2ц3к2 2ц3л2 2ц3м2 2ц3н2 2ц3п2 2ц3р2 2ц3с2 2ц3т2 2ц3ф2 2ц3х2 4ц3ц4 2ц3ч2 2ц3ш2 2ц3щ2 2ч3б2 2ч3в2 2ч3г2 2ч3д2 2ч3ж2 2ч3з2 2ч3й2 2ч3к2 2ч3л2 2ч3м2 2ч3н2 2ч3п2 2ч3р2 2ч3с2 2ч3т2 2ч3ф2 2ч3х2 2ч3ц2 4ч3ч4 2ч3ш2 2ч3щ2 2ш3б2 2ш3в2 2ш3г2 2ш3д2 2ш3ж2 2ш3з2 2ш3й2 2ш3к2 2ш3л2 2ш3м2 2ш3н2 2ш3п2 2ш3р2 2ш3с2 2ш3т2 2ш3ф2 2ш3х2 2ш3ц2 2ш3ч2 4ш3ш4 2ш3щ2 2щ3б2 2щ3в2 2щ3г2 2щ3д2 2щ3ж2 2щ3з2 2щ3й2 2щ3к2 2щ3л2 2щ3м2 2щ3н2 2щ3п2 2щ3р2 2щ3с2 2щ3т2 2щ3ф2 2щ3х2 2щ3ц2 2щ3ч2 2щ3ш2 4щ3щ4 ааа4 аае4 ааи4 аао4 аау4 ааъ4 ааю4 аая4 аеа4 аее4 аеи4 аео4 аеу4 аеъ4 аею4 аея4 аиа4 аие4 аии4 аио4 аиу4 аиъ4 аию4 аия4 аоа4 аое4 аои4 аоо4 аоу4 аоъ4 аою4 аоя4 ауа4 ауе4 ауи4 ауо4 ауу4 ауъ4 аую4 ауя4 аъа4 аъе4 аъи4 аъо4 аъу4 аъъ4 аъю4 аъя4 аюа4 аюе4 аюи4 аюо4 аюу4 аюъ4 аюю4 аюя4 аяа4 аяе4 аяи4 аяо4 аяу4 аяъ4 аяю4 аяя4 еаа4 еае4 еаи4 еао4 еау4 еаъ4 еаю4 еая4 ееа4 еее4 ееи4 еео4 ееу4 ееъ4 еею4 еея4 еиа4 еие4 еии4 еио4 еиу4 еиъ4 еию4 еия4 еоа4 еое4 еои4 еоо4 еоу4 еоъ4 еою4 еоя4 еуа4 еуе4 еуи4 еуо4 еуу4 еуъ4 еую4 еуя4 еъа4 еъе4 еъи4 еъо4 еъу4 еъъ4 еъю4 еъя4 еюа4 еюе4 еюи4 еюо4 еюу4 еюъ4 еюю4 еюя4 еяа4 еяе4 еяи4 еяо4 еяу4 еяъ4 еяю4 еяя4 иаа4 иае4 иаи4 иао4 иау4 иаъ4 иаю4 иая4 иеа4 иее4 иеи4 иео4 иеу4 иеъ4 иею4 иея4 ииа4 иие4 иии4 иио4 ииу4 ииъ4 иию4 иия4 иоа4 иое4 иои4 иоо4 иоу4 иоъ4 иою4 иоя4 иуа4 иуе4 иуи4 иуо4 иуу4 иуъ4 иую4 иуя4 иъа4 иъе4 иъи4 иъо4 иъу4 иъъ4 иъю4 иъя4 июа4 июе4 июи4 июо4 июу4 июъ4 июю4 июя4 ияа4 ияе4 ияи4 ияо4 ияу4 ияъ4 ияю4 ияя4 оаа4 оае4 оаи4 оао4 оау4 оаъ4 оаю4 оая4 оеа4 оее4 оеи4 оео4 оеу4 оеъ4 оею4 оея4 оиа4 оие4 оии4 оио4 оиу4 оиъ4 оию4 оия4 ооа4 оое4 оои4 ооо4 ооу4 ооъ4 оою4 ооя4 оуа4 оуе4 оуи4 оуо4 оуу4 оуъ4 оую4 оуя4 оъа4 оъе4 оъи4 оъо4 оъу4 оъъ4 оъю4 оъя4 оюа4 оюе4 оюи4 оюо4 оюу4 оюъ4 оюю4 оюя4 ояа4 ояе4 ояи4 ояо4 ояу4 ояъ4 ояю4 ояя4 уаа4 уае4 уаи4 уао4 уау4 уаъ4 уаю4 уая4 уеа4 уее4 уеи4 уео4 уеу4 уеъ4 уею4 уея4 уиа4 уие4 уии4 уио4 уиу4 уиъ4 уию4 уия4 уоа4 уое4 уои4 уоо4 уоу4 уоъ4 уою4 уоя4 ууа4 ууе4 ууи4 ууо4 ууу4 ууъ4 уую4 ууя4 уъа4 уъе4 уъи4 уъо4 уъу4 уъъ4 уъю4 уъя4 уюа4 уюе4 уюи4 уюо4 уюу4 уюъ4 уюю4 уюя4 уяа4 уяе4 уяи4 уяо4 уяу4 уяъ4 уяю4 уяя4 ъаа4 ъае4 ъаи4 ъао4 ъау4 ъаъ4 ъаю4 ъая4 ъеа4 ъее4 ъеи4 ъео4 ъеу4 ъеъ4 ъею4 ъея4 ъиа4 ъие4 ъии4 ъио4 ъиу4 ъиъ4 ъию4 ъия4 ъоа4 ъое4 ъои4 ъоо4 ъоу4 ъоъ4 ъою4 ъоя4 ъуа4 ъуе4 ъуи4 ъуо4 ъуу4 ъуъ4 ъую4 ъуя4 ъъа4 ъъе4 ъъи4 ъъо4 ъъу4 ъъъ4 ъъю4 ъъя4 ъюа4 ъюе4 ъюи4 ъюо4 ъюу4 ъюъ4 ъюю4 ъюя4 ъяа4 ъяе4 ъяи4 ъяо4 ъяу4 ъяъ4 ъяю4 ъяя4 юаа4 юае4 юаи4 юао4 юау4 юаъ4 юаю4 юая4 юеа4 юее4 юеи4 юео4 юеу4 юеъ4 юею4 юея4 юиа4 юие4 юии4 юио4 юиу4 юиъ4 юию4 юия4 юоа4 юое4 юои4 юоо4 юоу4 юоъ4 юою4 юоя4 юуа4 юуе4 юуи4 юуо4 юуу4 юуъ4 юую4 юуя4 юъа4 юъе4 юъи4 юъо4 юъу4 юъъ4 юъю4 юъя4 ююа4 ююе4 ююи4 ююо4 ююу4 ююъ4 ююю4 ююя4 юяа4 юяе4 юяи4 юяо4 юяу4 юяъ4 юяю4 юяя4 яаа4 яае4 яаи4 яао4 яау4 яаъ4 яаю4 яая4 яеа4 яее4 яеи4 яео4 яеу4 яеъ4 яею4 яея4 яиа4 яие4 яии4 яио4 яиу4 яиъ4 яию4 яия4 яоа4 яое4 яои4 яоо4 яоу4 яоъ4 яою4 яоя4 яуа4 яуе4 яуи4 яуо4 яуу4 яуъ4 яую4 яуя4 яъа4 яъе4 яъи4 яъо4 яъу4 яъъ4 яъю4 яъя4 яюа4 яюе4 яюи4 яюо4 яюу4 яюъ4 яюю4 яюя4 яяа4 яяе4 яяи4 яяо4 яяу4 яяъ4 яяю4 яяя4 й4бб й4бв й4бг й4бд й4бж й4бз й4бй й4бк й4бл й4бм й4бн й4бп й4бр й4бс й4бт й4бф й4бх й4бц й4бч й4бш й4бщ й4вб й4вв й4вг й4вд й4вж й4вз й4вй й4вк й4вл й4вм й4вн й4вп й4вр й4вс й4вт й4вф й4вх й4вц й4вч й4вш й4вщ й4гб й4гв й4гг й4гд й4гж й4гз й4гй й4гк й4гл й4гм й4гн й4гп й4гр й4гс й4гт й4гф й4гх й4гц й4гч й4гш й4гщ й4дб й4дв й4дг й4дд й4дж й4дз й4дй й4дк й4дл й4дм й4дн й4дп й4др й4дс й4дт й4дф й4дх й4дц й4дч й4дш й4дщ й4жб й4жв й4жг й4жд й4жж й4жз й4жй й4жк й4жл й4жм й4жн й4жп й4жр й4жс й4жт й4жф й4жх й4жц й4жч й4жш й4жщ й4зб й4зв й4зг й4зд й4зж й4зз й4зй й4зк й4зл й4зм й4зн й4зп й4зр й4зс й4зт й4зф й4зх й4зц й4зч й4зш й4зщ й4йб й4йв й4йг й4йд й4йж й4йз й4йй й4йк й4йл й4йм й4йн й4йп й4йр й4йс й4йт й4йф й4йх й4йц й4йч й4йш й4йщ й4кб й4кв й4кг й4кд й4кж й4кз й4кй й4кк й4кл й4км й4кн й4кп й4кр й4кс й4кт й4кф й4кх й4кц й4кч й4кш й4кщ й4лб й4лв й4лг й4лд й4лж й4лз й4лй й4лк й4лл й4лм й4лн й4лп й4лр й4лс й4лт й4лф й4лх й4лц й4лч й4лш й4лщ й4мб й4мв й4мг й4мд й4мж й4мз й4мй й4мк й4мл й4мм й4мн й4мп й4мр й4мс й4мт й4мф й4мх й4мц й4мч й4мш й4мщ й4нб й4нв й4нг й4нд й4нж й4нз й4нй й4нк й4нл й4нм й4нн й4нп й4нр й4нс й4нт й4нф й4нх й4нц й4нч й4нш й4нщ й4пб й4пв й4пг й4пд й4пж й4пз й4пй й4пк й4пл й4пм й4пн й4пп й4пр й4пс й4пт й4пф й4пх й4пц й4пч й4пш й4пщ й4рб й4рв й4рг й4рд й4рж й4рз й4рй й4рк й4рл й4рм й4рн й4рп й4рр й4рс й4рт й4рф й4рх й4рц й4рч й4рш й4рщ й4сб й4св й4сг й4сд й4сж й4сз й4сй й4ск й4сл й4см й4сн й4сп й4ср й4сс й4ст й4сф й4сх й4сц й4сч й4сш й4сщ й4тб й4тв й4тг й4тд й4тж й4тз й4тй й4тк й4тл й4тм й4тн й4тп й4тр й4тс й4тт й4тф й4тх й4тц й4тч й4тш й4тщ й4фб й4фв й4фг й4фд й4фж й4фз й4фй й4фк й4фл й4фм й4фн й4фп й4фр й4фс й4фт й4фф й4фх й4фц й4фч й4фш й4фщ й4хб й4хв й4хг й4хд й4хж й4хз й4хй й4хк й4хл й4хм й4хн й4хп й4хр й4хс й4хт й4хф й4хх й4хц й4хч й4хш й4хщ й4цб й4цв й4цг й4цд й4цж й4цз й4цй й4цк й4цл й4цм й4цн й4цп й4цр й4цс й4цт й4цф й4цх й4цц й4цч й4цш й4цщ й4чб й4чв й4чг й4чд й4чж й4чз й4чй й4чк й4чл й4чм й4чн й4чп й4чр й4чс й4чт й4чф й4чх й4чц й4чч й4чш й4чщ й4шб й4шв й4шг й4шд й4шж й4шз й4шй й4шк й4шл й4шм й4шн й4шп й4шр й4шс й4шт й4шф й4шх й4шц й4шч й4шш й4шщ й4щб й4щв й4щг й4щд й4щж й4щз й4щй й4щк й4щл й4щм й4щн й4щп й4щр й4щс й4щт й4щф й4щх й4щц й4щч й4щш й4щщ б4ь в4ь г4ь д4ь ж4ь з4ь й4ь к4ь л4ь м4ь н4ь п4ь р4ь с4ь т4ь ф4ь х4ь ц4ь ч4ь ш4ь щ4ь ь4ь .дз4в .дж4р .дж4л .вг4л .вд4л .вг4р .вг4н .вп4л .вк4л .вк4р .вт4р .сг4л .зд4р .сг4р .сб4р .сд4р .жд4р .ск4л .сп4л .сп4р .ст4р .ск4р .шп4р .ск4в .вз4р .вс4л .вс4м .вс4р .св4р .сх4л .сх4р .хв4р .вс4т .сх4в .см4р н4кт. н4кс. к4ст.}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sr.rme0000644000175000017500000000710011571377075024702 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Serbian hyphenation patterns in Cyrillic script (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: srhyphc.tex (2003-06-09) % Author: Aleksandar Jelenak , Dejan Muhamedagić % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % This is `srhyphc.tex' file. It contains hyphenation patterns for Serbian % language in the Cyrillic alphabet. TeX font encoding is T2A. % % This file is distributed under the terms of the GNU General Public License. % Latest version of the license is at . % % Version: 1.0a % Last change: 2003-06-09 % % Credits: % - Initial hyphenation patterns for T1 font encoding by Dejan Muhamedagić % - Improvements and adaptation to T2A font encoding by Strahinja Radić % - Further improvements and integration into one file by Aleksandar Jelenak % % Current maintainer: Aleksandar Jelenak % % \message{Serbian Cyrillic Hyphenation Patterns `srhyphc.tex' v1.0a <2003-06-09>} % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-agr.pat0000644000175000017500000012707511761001300025016 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-agr.rme % used: ' ʼ ΐ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϲ ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ ἐ ἑ ἒ ἓ ἔ ἕ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ ὀ ὁ ὂ ὃ ὄ ὅ ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾐ ᾑ ᾒ ᾓ ᾔ ᾕ ᾖ ᾗ ᾠ ᾡ ᾢ ᾣ ᾤ ᾥ ᾦ ᾧ ᾲ ᾳ ᾴ ᾶ ᾷ ᾽ ᾿ ῂ ῃ ῄ ῆ ῇ ῒ ΐ ῖ ῗ ῢ ΰ ῤ ῥ ῦ ῧ ῲ ῳ ῴ ῶ ῷ \patterns{ α1 ε1 η1 ι1 ο1 υ1 ω1 ϊ1 ϋ1 ἀ1 ἁ1 ἂ1 ἃ1 ἄ1 ἅ1 ἆ1 ἇ1 ἐ1 ἑ1 ἒ1 ἓ1 ἔ1 ἕ1 ἠ1 ἡ1 ἢ1 ἣ1 ἤ1 ἥ1 ἦ1 ἧ1 ἰ1 ἱ1 ἲ1 ἳ1 ἴ1 ἵ1 ἶ1 ἷ1 ὀ1 ὁ1 ὂ1 ὃ1 ὄ1 ὅ1 ὐ1 ὑ1 ὒ1 ὓ1 ὔ1 ὕ1 ὖ1 ὗ1 ὠ1 ὡ1 ὢ1 ὣ1 ὤ1 ὥ1 ὦ1 ὧ1 ὰ1 ὲ1 ὴ1 ὶ1 ὸ1 ὺ1 ὼ1 ᾀ1 ᾁ1 ᾂ1 ᾃ1 ᾄ1 ᾅ1 ᾆ1 ᾇ1 ᾐ1 ᾑ1 ᾒ1 ᾓ1 ᾔ1 ᾕ1 ᾖ1 ᾗ1 ᾠ1 ᾡ1 ᾢ1 ᾣ1 ᾤ1 ᾥ1 ᾦ1 ᾧ1 ᾲ1 ᾳ1 ᾴ1 ᾶ1 ᾷ1 ῂ1 ῃ1 ῄ1 ῆ1 ῇ1 ῒ1 ῖ1 ῗ1 ῢ1 ῦ1 ῧ1 ῲ1 ῳ1 ῴ1 ῶ1 ῷ1 ά1 έ1 ή1 ί1 ό1 ύ1 ώ1 ΐ1 ΰ1 ά1 έ1 ή1 ί1 ό1 ύ1 ώ1 α2ι α2ί α2ί α2ὶ α2ῖ α2ἰ α2ἴ α2ἲ α2ἶ α2ἱ α2ἵ α2ἳ α2ἷ ά3ι ά3ι ᾶ3ι ἀ3ι ἁ3ι α2υ α2ύ α2ύ α2ὺ α2ῦ α2ὐ α2ὔ α2ὒ α2ὖ α2ὑ α2ὕ α2ὓ α2ὗ ά3υ ά3υ ᾶ3υ ἀ3υ ἁ3υ ε2ι ε2ί ε2ί ε2ὶ ε2ῖ ε2ἰ ε2ἴ ε2ἲ ε2ἶ ε2ἱ ε2ἵ ε2ἳ ε2ἷ έ3ι έ3ι ἐ3ι ἑ3ι ε2υ ε2ύ ε2ύ ε2ὺ ε2ῦ ε2ὐ ε2ὔ ε2ὒ ε2ὖ ε2ὑ ε2ὕ ε2ὓ ε2ὗ έ3υ έ3υ ἑ3υ ἐ3υ η2υ η2ύ η2ύ η2ὺ η2ῦ η2ὐ η2ὔ η2ὒ η2ὖ η2ὑ η2ὕ η2ὓ η2ὗ ή3υ ή3υ ῆ3υ ἠ3υ ἡ3υ ο2ι ο2ί ο2ί ο2ὶ ο2ῖ ο2ἰ ο2ἴ ο2ἲ ο2ἶ ο2ἱ ο2ἵ ο2ἳ ο2ἷ ό3ι ό3ι ὀ3ι ὁ3ι ο2υ ο2ύ ο2ύ ο2ὺ ο2ῦ ο2ὐ ο2ὔ ο2ὒ ο2ὖ ο2ὑ ο2ὕ ο2ὓ ο2ὗ ό3υ ό3υ ὀ3υ ὁ3υ υ2ι υ2ί υ2ί υ2ὶ υ2ῖ υ2ἰ υ2ἴ υ2ἲ υ2ἶ υ2ἱ υ2ἵ υ2ἳ υ2ἷ ύ3ι ύ3ι ῦ3ι ὐ3ι ὑ3ι ου3ι όυ4ι όυ4ι ὀυ4ι ὁυ4ι ο3υί ο3υί ο3υῖ 4β. 4γ. 4δ. 4ζ. 4θ. 4κ. 4λ. 4μ. 4ν. 4ξ. 4π. 4ρ. 4σ. 4ς. 4τ. 4φ. 4χ. 4ψ. 4' 4β' 4γ' 4δ' 4ζ' 4θ' 4κ' 4λ' 4μ' 4ν' 4ξ' 4π' 4ρ' 4σ' 4τ' 4φ' 4χ' 4ψ' .β4 .γ4 .δ4 .ζ4 .θ4 .κ4 .λ4 .μ4 .ν4 .ξ4 .π4 .ρ4 .σ4 .τ4 .φ4 .χ4 .ψ4 2β1β 2γ1γ 2δ1δ 2ζ1ζ 2θ1θ 2κ1κ 2λ1λ 2μ1μ 2ν1ν 2π1π 2ρ1ρ 2ῤ1ῥ 2σ1σ 2τ1τ 2φ1φ 2χ1χ 2ψ1ψ 2β1γ 2β1ζ 2β1θ 2β1κ 2β1ξ 2β1π 2β1σ 2β1τ 2β1φ 2β1χ 2β1ψ 2γ1β 2γ1ζ 2γ1θ 2γ1κ 2γ1ξ 2γ1π 2γ1σ 2γ1τ 2γ1φ 2γ1χ 2γ1ψ 2δ1β 2δ1γ 2δ1ζ 2δ1θ 2δ1κ 2δ1λ 2δ1ξ 2δ1π 2δ1σ 2δ1τ 2δ1φ 2δ1χ 2δ1ψ 2ζ1β 2ζ1γ 2ζ1δ 2ζ1θ 2ζ1κ 2ζ1λ 2ζ1μ 2ζ1ν 2ζ1ξ 2ζ1π 2ζ1ρ 2ζ1σ 2ζ1τ 2ζ1φ 2ζ1χ 2ζ1ψ 2θ1β 2θ1γ 2θ1δ 2θ1ζ 2θ1κ 2θ1ξ 2θ1π 2θ1σ 2θ1τ 2θ1φ 2θ1χ 2θ1ψ 2κ1β 2κ1γ 2κ1δ 2κ1ζ 2κ1θ 2κ1ξ 2κ1π 2κ1σ 2κ1φ 2κ1χ 2κ1ψ 2λ1β 2λ1γ 2λ1δ 2λ1ζ 2λ1θ 2λ1κ 2λ1μ 2λ1ν 2λ1ξ 2λ1π 2λ1ρ 2λ1σ 2λ1τ 2λ1φ 2λ1χ 2λ1ψ 2μ1β 2μ1γ 2μ1δ 2μ1ζ 2μ1θ 2μ1κ 2μ1λ 2μ1ξ 2μ1π 2μ1ρ 2μ1σ 2μ1τ 2μ1φ 2μ1χ 2μ1ψ 2ν1β 2ν1γ 2ν1δ 2ν1ζ 2ν1θ 2ν1κ 2ν1λ 2ν1μ 2ν1ξ 2ν1π 2ν1ρ 2ν1σ 2νς. 2ν1τ 2ν1φ 2ν1χ 2ν1ψ 2ξ1β 2ξ1γ 2ξ1δ 2ξ1ζ 2ξ1θ 2ξ1κ 2ξ1λ 2ξ1μ 2ξ1ν 2ξ1π 2ξ1ρ 2ξ1σ 2ξ1τ 2ξ1φ 2ξ1χ 2ξ1ψ 2π1β 2π1γ 2π1δ 2π1ζ 2π1θ 2π1κ 2π1ξ 2π1σ 2π1φ 2π1χ 2π1ψ 2ρ1β 2ρ1γ 2ρ1δ 2ρ1ζ 2ρ1θ 2ρ1κ 2ρ1λ 2ρ1μ 2ρ1ν 2ρ1ξ 2ρ1π 2ρ1σ 2ρ1τ 2ρ1φ 2ρ1χ 2ρ1ψ 2σ1δ 2σ1ζ 2σ1λ 2σ1ν 2σ1ξ 2σ1ρ 2σ1ψ 2τ1β 2τ1γ 2τ1δ 2τ1ζ 2τ1θ 2τ1κ 2τ1ξ 2τ1π 2τ1σ 2τ1φ 2τ1χ 2τ1ψ 2φ1β 2φ1γ 2φ1δ 2φ1ζ 2φ1κ 2φ1ξ 2φ1π 2φ1σ 2φ1τ 2φ1χ 2φ1ψ 2χ1β 2χ1γ 2χ1δ 2χ1ζ 2χ1κ 2χ1ξ 2χ1π 2χ1σ 2χ1τ 2χ1φ 2χ1ψ 2ψ1β 2ψ1γ 2ψ1δ 2ψ1ζ 2ψ1θ 2ψ1κ 2ψ1λ 2ψ1μ 2ψ1ν 2ψ1ξ 2ψ1π 2ψ1ρ 2ψ1σ 2ψ1τ 2ψ1φ 2ψ1χ 4βδ' 4βλ' 4βμ' 4βν' 4βρ' 4γδ' 4γλ' 4γμ' 4γν' 4γρ' 4δμ' 4δν' 4δρ' 4ζβ' 4θλ' 4λμ' 4θν' 4θρ' 4κλ' 4κμ' 4κν' 4κρ' 4κτ' 4μν' 4πλ' 4πμ' 4πν' 4πρ' 4πτ' 4σβ' 4σγ' 4σδ' 4σθ' 4σκ' 4σμ' 4σπ' 4στ' 4σφ' 4σχ' 4φθ' 4φλ' 4φμ' 4φν' 4φρ' 4χθ' 4χλ' 4χμ' 4χν' 4χρ' ἀγω2ν1άρ ἀγω2ν1άρ ἀγω2ν1αρ ἀδιέ2ξ1 ἀδιέ2ξ1 ἀδιε2ξ1 ἀδυ2σ1ώ ἀδυ2σ1ώ ἀδυ2σ1ω ἁλό2σ1 ἁλό2σ1 ἁλο2σ1 ἀμπαλί2ν1 ἀμπαλί2ν1 ἀμπαλι2ν1 ἀμφί2σ1β ἀμφί2σ1β ἀμφι2σ1β ἀμφί2σ1ω ἀμφί2σ1ω ἀμφι2σ1ώ ἀμφι2σ1ώ ἀ2ν1αγής. ἀ2ν1αγής. ἀ2ν1αγὴς. ἀ2ν1αγήσ. ἀ2ν1αγήσ. ἀ2ν1αγὴσ. ἀ2ν1αγο ἀ2ν1αγεῖ. ἀ2ν1αγῆ. ἀ2ν1αγές. ἀ2ν1αγές. ἀ2ν1αγὲς. ἀ2ν1αγέσ. ἀ2ν1αγέσ. ἀ2ν1αγὲσ. ἀ2ν1αγεῖς. ἀ2ν1αγεῖσ. ἀ2ν1αγῶν. ἀ2ν1αγέσι ἀ2ν1αγέσι ἀ2ν1αγῆ ἀ2ν1άγκυ ἀ2ν1άγκυ ἀ2ν1αγκύ ἀ2ν1αγκύ ἄ2ν1αγν ἀ2ν1άγν ἀ2ν1άγν ἀ2ν1αγν ἀ3ν2αγνά ἀ3ν2αγνά ἀ3ν2αγνω ἀ3ν2άγνω ἀ3ν2άγνω ἀ3ν2αγνώ ἀ3ν2αγνώ ἀ2ν1αγρί ἀ2ν1αγρί ἀ2ν1αγρῖ ἀ2ν1αγρι ἀ2ν1άγωγ ἀ2ν1άγωγ ἀ2ν1αγώγ ἀ2ν1αγώγ ἀ3ν2αγώγι ἀ3ν2αγώγι ἀ3ν2αγωγί ἀ3ν2αγωγί ἀ4ν3αγωγία ἀ4ν3αγωγία ἀ2ν1άδελ ἀ2ν1άδελ ἀ2ν1αδέλ ἀ2ν1αδέλ ἀ2ν1άελπ ἀ2ν1άελπ ἀ2ν1αέλπ ἀ2ν1αέλπ ἄ2ν1αθλ ἀ2ν1άθλ ἀ2ν1άθλ ἀ2ν1αίδ ἀ2ν1αίδ ἀ2ν1αιδ ἄ2ν1αιμ ἀ2ν1αίμ ἀ2ν1αίμ ἀ2ν1αιμ ἀ2ν1αίσθ ἀ2ν1αίσθ ἀ2ν1αισθ ἀ2ν1αισι ἀ2ν1αισί ἀ2ν1αισί ἀ2ν1αίσχ ἀ2ν1αίσχ ἀ2ν1αισχ ἀ2ν1αίτ ἀ2ν1αίτ ἀ2ν1αιτ ἀ2ν1άκαν ἀ2ν1άκαν ἀ2ν1ακάν ἀ2ν1ακάν ἀ2ν1ακόλο ἀ2ν1ακόλο ἀ2ν1ακολο ἀ2ν1αλγ ἀ2ν1αλδ ἀ3ν2αλδα ἀ3ν2αλδήσκ ἀ3ν2αλδήσκ ἀ2ν1άλειπ ἀ2ν1άλειπ ἀ2ν1αλείπ ἀ2ν1αλείπ ἀ2ν1αλειφ ἀ2ν1άλειφ ἀ2ν1άλειφ ἀ2ν1αλείφ ἀ2ν1αλείφ ἀ2ν1αλήθ ἀ2ν1αλήθ ἀ2ν1αληθ ἀ2ν1άλθ ἀ2ν1άλθ ἀ2ν1αλθ ἀ2ν1άλιπ ἀ2ν1άλιπ ἀ2ν1αλίπ ἀ2ν1αλίπ ἀ2ν1άλιστ ἀ2ν1άλιστ ἀ2ν1αλίστ ἀ2ν1αλίστ ἀ2ν1αλκ ἄ2ν1αλκ ἀ2ν1άλκ ἀ2ν1άλκ ἀ2ν1άλλ ἀ2ν1άλλ ἀ2ν1αλλ ἀ3ν2άλλο ἀ3ν2άλλο ἀ3ν2άλλε ἀ3ν2άλλε ἄ2ν1αλμ ἀ2ν1άλμ ἀ2ν1άλμ ἀ2ν1αλμ ἄ2ν1αλο ἀ2ν1άλου ἀ2ν1άλου ἀ2ν1άλῳ. ἀ2ν1άλῳ. ἄ2ν1αλε. ἀ2ν1άλοι ἀ2ν1άλοι ἀ2ν1άλων. ἀ2ν1άλων. ἄ2ν1αλτ ἀ2ν1άλτ ἀ2ν1άλτ ἀ2ν1αμάξ ἀ2ν1αμάξ ἀ2ν1αμαξ ἀ2ν1αμάρτ ἀ2ν1αμάρτ ἀ2ν1αμαρτ ἀ2ν1αμέλγ ἀ2ν1αμέλγ ἀ2ν1αμελγ ἀ2ν1αμπ ἀ2ν1άμπ ἀ2ν1άμπ ἀ2ν1αμφ ἀναμφι2σ1 ἀ2ν1ανάγκ ἀ2ν1ανάγκ ἀ2ν1αναγκ ἄ2ν1ανδ ἀ2ν1άνδ ἀ2ν1άνδ ἀ2ν1ανθ ἀ3ν2ανθέ ἀ3ν2ανθέ ἀ4ν3ανθές. ἀ4ν3ανθές. ἀ4ν3ανθὲς. ἀ4ν3ανθέσ. ἀ4ν3ανθέσ. ἀ4ν3ανθὲσ. ἀ4ν3ανθέσι ἀ4ν3ανθέσι ἀ2ν1άνιο ἀ2ν1άνιο ἀ2ν1ανίο ἀ2ν1ανίο ἀ2ν1ανίω ἀ2ν1ανίω ἀ2ν1ανταγ ἀ2ν1ανταπ ἀ2ν1αντί ἀ2ν1αντί ἀ2ν1αντι ἀνα2ξ1αγ ἀνά2ξ1αν ἀνά2ξ1αν ἀνα2ξ1άν ἀνα2ξ1άν ἀνα2ξ1αν ἀνά2ξ1αρ ἀνά2ξ1αρ ἀνα2ξ1άρ ἀνα2ξ1άρ ἀνά2ξ1ιπ ἀνά2ξ1ιπ ἀνα2ξ1ίπ ἀνα2ξ1ίπ ἀ2ν1αξιόλ ἀ2ν1αξιόλ ἀ2ν1αξιολ ἀ2ν1αξιόπ ἀ2ν1αξιόπ ἀ2ν1αξιοπ ἀ2ν1άξιο ἀ2ν1άξιο ἀ2ν1αξίο ἀ2ν1αξίο ἀ2ν1αξίω ἀ2ν1αξίω ἀ2ν1αξία ἀ2ν1αξία ἀ2ν1αξῖα ἀ2ν1απάλλα ἀ2ν1απάλλα ἀ2ν1απαλλά ἀ2ν1απαλλά ἀ2ν1απάρτ ἀ2ν1απάρτ ἀ2ν1απαρτ ἀ2ν1απαύδ ἀ2ν1απαύδ ἀ2ν1απαυδ ἀ2ν1απόβ ἀ2ν1απόβ ἀ2ν1αποβ ἀ2ν1απόγ ἀ2ν1απόγ ἀ2ν1απογ ἀ2ν1αποδή ἀ2ν1αποδή ἀ2ν1αποδη ἀ2ν1απόδο ἀ2ν1απόδο ἀ2ν1αποδό ἀ2ν1αποδό ἀ2ν1απόδρ ἀ2ν1απόδρ ἀ2ν1αποδρ ἀ2ν1απόλαυ ἀ2ν1απόλαυ ἀ2ν1απολαύ ἀ2ν1απολαύ ἀ2ν1απολό ἀ2ν1απολό ἀ2ν1απολο ἀ2ν1απόλυ ἀ2ν1απόλυ ἀ2ν1απολύ ἀ2ν1απολύ ἀ2ν1απόν ἀ2ν1απόν ἀ2ν1απον ἀ2ν1απόπ ἀ2ν1απόπ ἀ2ν1αποπ ἀ2ν1απόσ ἀ2ν1απόσ ἀ2ν1αποσ ἀ2ν1απότε ἀ2ν1απότε ἀ2ν1αποτε ἀ2ν1απότμ ἀ2ν1απότμ ἀ2ν1αποτμ ἀ2ν1απότρ ἀ2ν1απότρ ἀ2ν1αποτρ ἀ2ν1αρά ἀ2ν1αρά ἀ2ν1αρα ἀ2ν1άρ ἀ2ν1άρ ἀ2ν1αρ ἄ2ν1αρ ἀ3ν2αρίτ ἀ3ν2αρίτ ἀ3ν2αρῖτ ἀ3ν2αριτ ἀ3ν2αρπ ἀ3ν2άρρ ἀ3ν2άρρ ἀ3ν2αρρ ἀ4ν3αρραγ ἀ3ν2αρτ ἀ3ν2αρύτ ἀ3ν2αρύτ ἀ2ν1άσκη ἀ2ν1άσκη ἀ2ν1ασκή ἀ2ν1ασκή ἄ2ν1ασπι ἀ2ν1ασπί ἀ2ν1ασπί ἀ2ν1άσσατ ἀ2ν1άσσατ ἀ2ν1ασσάτ ἀ2ν1ασσάτ ἀ2ν1άστει ἀ2ν1άστει ἀ2ν1αστεί ἀ2ν1αστεί ἀ3ν2αστείβ ἀ3ν2αστείβ ἀ3ν2άστειρ ἀ3ν2άστειρ ἀ3ν2αστείρ ἀ3ν2αστείρ ἀ3ν2άστειχ ἀ3ν2άστειχ ἀ3ν2αστείχ ἀ3ν2αστείχ ἀ2ν1ατεὶ. ἀ2ν1ατεί. ἀ2ν1ατεί. ἀ2ν1ατὶ. ἀ2ν1ατί. ἀ2ν1ατί. ἄ2ν1ατος. ἄ2ν1ατοσ. ἀ2ν1άτου. ἀ2ν1άτου. ἀ2ν1άτω ἀ2ν1άτω ἄ2ν1ατον. ἄ2ν1ατε ἄ2ν1ατοι. ἀ2ν1άτοις. ἀ2ν1άτοις. ἀ2ν1άτοισ. ἀ2ν1άτοισ. ἀ2ν1άττ ἀ2ν1άττ ἀ2ν1αττ ἀ2ν1αύγ ἀ2ν1αύγ ἀ2ν1αυγ ἀ2ν1αύδ ἀ2ν1αύδ ἀ2ν1αυδ ἀ3ν2αυδί ἀ3ν2αυδί ἀ3ν2αυδι ἄ2ν1αυδ ἄ2ν1αυλ ἀ2ν1αύλ ἀ2ν1αύλ ἀ2ν1αύξ ἀ2ν1αύξ ἀ2ν1αυξ ἀ2ν1αύχ ἀ2ν1αύχ ἀ2ν1αυχ ἀ2ν1αφαίρ ἀ2ν1αφαίρ ἀ2ν1αφαιρ ἀ2ν1αφή ἀ2ν1αφή ἀ2ν1αφὴ ἀ2ν1αφοῦ ἀ2ν1αφῆ ἀ2ν1αφεῖ ἀ2ν1αφοῖ ἀ2ν1εφῶν. ἀ2ν1αφέ ἀ2ν1αφέ ἀ2ν1αφὲ ἀ3ν2αφῆν ἀ2ν1αφρόδ ἀ2ν1αφρόδ ἀ2ν1αφροδ ἄ2ν1αφρ ἀ2ν1άφρ ἀ2ν1άφρ ἀ2ν1αχύρ ἀ2ν1αχύρ ἀ2ν1αχυρ ἀνδρό2σ1α ἀνδρό2σ1α ἀνδρο2σ1α ἀ2ν1έγγ ἀ2ν1έγγ ἀ2ν1εγγ ἀ2ν1έγερτ ἀ2ν1έγερτ ἀ2ν1εγέρτ ἀ2ν1εγέρτ ἀ2ν1εγκ ἀ2ν1έγκ ἀ2ν1έγκ ἀ2ν1εγχ ἀ2ν1εδά ἀ2ν1εδά ἀ2ν1εδα ἀ2ν1έδεσ ἀ2ν1έδεσ ἀ2ν1εδέσ ἀ2ν1εδέσ ἀ2ν1έδρασ ἀ2ν1έδρασ ἀ2ν1εδράσ ἀ2ν1εδράσ ἀ2ν1εέρ ἀ2ν1εέρ ἀ2ν1εερ ἀ2ν1εθέλ ἀ2ν1εθέλ ἀ2ν1εθελ ἀ2ν1έθι ἀ2ν1έθι ἀ2ν1εθί ἀ2ν1εθί ἀ2ν1είδε ἀ2ν1είδε ἀ2ν1ειδέ ἀ2ν1ειδέ ἀ2ν1είδω ἀ2ν1είδω ἀ2ν1ειδώ ἀ2ν1ειδώ ἀ2ν1είκα ἀ2ν1είκα ἀ2ν1εικά ἀ2ν1εικά ἀ2ν1εικό ἀ2ν1εικό ἀ2ν1εικο ἀ2ν1ειλεί ἀ2ν1ειλεί ἀ2ν1ειλει ἀ2ν1είμα ἀ2ν1είμα ἀ2ν1εί2σ1ακ ἀ2ν1εί2σ1ακ ἀ2ν1ει2σ1άκ ἀ2ν1ει2σ1άκ ἀ2ν1εί2σ1ο ἀ2ν1εί2σ1ο ἀ2ν1ει2σ1ό ἀ2ν1ει2σ1ό ἀ2ν1ει2σ1φορ ἀ2ν1εί2σ1φορ ἀ2ν1εί2σ1φορ ἀ2ν1ει2σ1φόρ ἀ2ν1ει2σ1φόρ ἀ2ν1έκ ἀ2ν1έκ ἀ2ν1εκ ἀ3ν2έκα ἀ3ν2έκα ἀ3ν2εκάς. ἀ3ν2εκάς. ἀ3ν2εκὰς. ἀ3ν2εκάσ. ἀ3ν2εκάσ. ἀ3ν2εκὰσ. ἀ3ν2εκτ ἀ4ν3έ2κ1τιτ ἀ4ν3έ2κ1τιτ ἀ4ν3ε2κ1τίτ ἀ4ν3ε2κ1τίτ ἀνε2κ1λιπ ἀνε2κ1λό ἀνε2κ1λό ἀνε2κ1λο ἀ2ν1έλαι ἀ2ν1έλαι ἀ2ν1ελαι ἀ2ν1ελάτ ἀ2ν1ελάτ ἀ2ν1ελατ ἀ2ν1έλεγκ ἀ2ν1έλεγκ ἀ2ν1ελέγκ ἀ2ν1ελέγκ ἀ2ν1ελεγξ ἀ2ν1ελέη ἀ2ν1ελέη ἀ2ν1ελεή ἀ2ν1ελεή ἀ2ν1έλεο ἀ2ν1έλεο ἀ2ν1ελέο ἀ2ν1ελέο ἀ2ν1ελέω ἀ2ν1ελέω ἀ2ν1έλεε ἀ2ν1έλεε ἀ2ν1ελκή ἀ2ν1ελκή ἀ2ν1ελκὴ ἀ2ν1ελκο ἀ2ν1ελκῆ ἀ2ν1ελκές. ἀ2ν1ελκές. ἀ2ν1ελκὲς. ἀ2ν1ελκέσ. ἀ2ν1ελκέσ. ἀ2ν1ελκὲσ. ἀ2ν1ελκε ἀ2ν1ελκῶ ἀ2ν1ελκέσ ἀ2ν1ελκέσ ἄ2ν1ελκτ ἀ2ν1έλκτ ἀ2ν1έλκτ ἀ2ν1έλκω ἀ2ν1έλκω ἀ2ν1ελκώ ἀ2ν1ελκώ ἀ2ν1έλλ ἀ2ν1έλλ ἀ2ν1έλπι ἀ2ν1έλπι ἀ2ν1ελπί ἀ2ν1ελπί ἀ2ν1έλυτρ ἀ2ν1έλυτρ ἀ2ν1ελύτρ ἀ2ν1ελύτρ ἀ2ν1έμβ ἀ2ν1έμβ ἀ2ν1εμβ ἀ2ν1έμετ ἀ2ν1έμετ ἀ2ν1εμέτ ἀ2ν1εμέτ ἀ2ν1έμπ ἀ2ν1έμπ ἀ2ν1εμπ ἀ2ν1έμφ ἀ2ν1έμφ ἀ2ν1εμφ ἀ2ν1έν ἀ2ν1έν ἀ2ν1εν ἀ3ν2ένει ἀ3ν2ένει ἀ3ν2ενή ἀ3ν2ενή ἀ3ν2έντες. ἀ3ν2έντες. ἀ3ν2έντεσ. ἀ3ν2έντεσ. ἀ2ν1ε2ξ1 ἀ3ν2ε3ξ2ίκα ἀ3ν2ε3ξ2ίκα ἀ3ν2ε3ξ2ικά ἀ3ν2ε3ξ2ικά ἀ2ν1έορ ἀ2ν1έορ ἀ2ν1εόρ ἀ2ν1εόρ ἀ2ν1επ ἀ3ν2επν ἀ3ν2επτ ἀ2ν1εραστ ἀ2ν1έραστ ἀ2ν1έραστ ἀ2ν1εράστ ἀ2ν1εράστ ἀ2ν1εργ ἄ2ν1εργ ἀ2ν1έργ ἀ2ν1έργ ἀ2ν1έρεικ ἀ2ν1έρεικ ἀ2ν1ερείκ ἀ2ν1ερείκ ἀ2ν1έρεισ ἀ2ν1έρεισ ἀ2ν1ερείσ ἀ2ν1ερείσ ἀ2ν1ερεύνητ ἀ2ν1ερεύνητ ἀ2ν1ερευνήτ ἀ2ν1ερευνήτ ἀ2ν1ερί ἀ2ν1ερί ἀ2ν1ερι ἀ2ν1ερυθρίαστ ἀ2ν1ερυθρίαστ ἀ2ν1ερυθριάστ ἀ2ν1ερυθριάστ ἀ2ν1έστι ἀ2ν1έστι ἀ2ν1εστί ἀ2ν1εστί ἀ2ν1έται ἀ2ν1έται ἀ2ν1εταί ἀ2ν1εταί ἀ2ν1έτοι ἀ2ν1έτοι ἀ2ν1ετοί ἀ2ν1ετοί ἀ2ν1ετυ ἀ2ν1έτυ ἀ2ν1έτυ ἀ2ν1ετύ ἀ2ν1ετύ ἀ2ν1εύθ ἀ2ν1εύθ ἀ2ν1ευθ ἄ2ν1ευκ ἀ2ν1εύκ ἀ2ν1εύκ ἀ2ν1ευλ ἀ2ν1εύρετ ἀ2ν1εύρετ ἀ2ν1ευρέτ ἀ2ν1ευρέτ ἀ2ν1ευφήμητ ἀ2ν1ευφήμητ ἀ2ν1ευφημήτ ἀ2ν1ευφημήτ ἀ2ν1εύχ ἀ2ν1εύχ ἀ2ν1ευχ ἀ2ν1εύξ ἀ2ν1εύξ ἀ2ν1ευξ ἀ2ν1ηυξ ἀ2ν1ηῦγ ἀ2ν1ηυγ ἀ2ν1ευκτ ἀ2ν1έφ ἀ2ν1έφ ἀ2ν1εφ ἀ3ν2εφάλ ἀ3ν2εφάλ ἀ3ν2έφελ ἀ3ν2έφελ ἀ3ν2εφέλ ἀ3ν2εφέλ ἀ2ν1εχέ ἀ2ν1εχέ ἀ2ν1εχε ἀ2ν1έψα ἀ2ν1έψα ἀ2ν1εψά ἀ2ν1εψά ἀ2ν1ηγεμ ἀ2ν1ήδ ἀ2ν1ήδ ἀ2ν1ηδ ἀ2ν1ήκεσ ἀ2ν1ήκεσ ἀ2ν1ηκέσ ἀ2ν1ηκέσ ἀ2ν1ήκο ἀ2ν1ήκο ἀ2ν1ηκό ἀ2ν1ηκό ἀ2ν1ηκο ἀ2ν1ηλάκ ἀ2ν1ηλάκ ἀ2ν1ηλακ ἀ2ν1ήλατος. ἀ2ν1ήλατος. ἀ2ν1ήλατοσ. ἀ2ν1ήλατοσ. ἀ2ν1ηλάτου ἀ2ν1ηλάτου ἀ2ν1ηλάτω ἀ2ν1ηλάτω ἀ2ν1ήλατον. ἀ2ν1ήλατον. ἀ2ν1ήλατε. ἀ2ν1ήλατε. ἀ2ν1ηλάτοι ἀ2ν1ηλάτοι ἀ2ν1ήλατοι ἀ2ν1ήλατοι ἀ2ν1ήλατα ἀ2ν1ήλατα ἀ2ν1ηλεγ ἀ2ν1ηλεή ἀ2ν1ηλεή ἀ2ν1ηλεὴ ἀ2ν1ηλεο ἀ2ν1ηλεε ἀ2ν1ηλεῶ ἀ2ν1ηλεέ ἀ2ν1ηλεέ ἀ2ν1ηλεὲ ἀ2ν1ηλεῆ ἀ2ν1ηλέη ἀ2ν1ηλέη ἀ2ν1ήλειπ ἀ2ν1ήλειπ ἀ2ν1ηλείπ ἀ2ν1ηλείπ ἀ2ν1ηλή ἀ2ν1ηλή ἀ2ν1ηλὴ ἀ2ν1ηλοῦ ἀ2ν1ηλεῖ ἀ2ν1ηλῆ ἀ2ν1ηλέ ἀ2ν1ηλέ ἀ2ν1ηλὲ ἀ2ν1ηλοῖ ἀ2ν1ηλῶ ἀ2ν1ήλικ ἀ2ν1ήλικ ἀ2ν1ηλίκ ἀ2ν1ηλίκ ἀ2ν1ήλιο ἀ2ν1ήλιο ἀ2ν1ηλίο ἀ2ν1ηλίο ἀ2ν1ηλίω ἀ2ν1ηλίω ἀ2ν1ήλια ἀ2ν1ήλια ἀ2ν1ήλιπ ἀ2ν1ήλιπ ἀ2ν1ηλίπ ἀ2ν1ηλίπ ἀ2ν1ηλιφ ἀ2ν1ήμ ἀ2ν1ήμ ἀ2ν1ημ ἀ2ν1ήνυ ἀ2ν1ήνυ ἀ2ν1ηνύ ἀ2ν1ηνύ ἀ2ν1ήρει ἀ2ν1ήρει ἀ2ν1ηρεί ἀ2ν1ηρεί ἀ2ν1ηρέμ ἀ2ν1ηρέμ ἀ2ν1ηρεμ ἀ2ν1ηρεφ ἀ2ν1ήρι ἀ2ν1ήρι ἀ2ν1ηρί ἀ2ν1ηρί ἀ2ν1ήροτ ἀ2ν1ήροτ ἀ2ν1ηρότ ἀ2ν1ηρότ ἀ2ν1ήσσ ἀ2ν1ήσσ ἀ2ν1ησσ ἀ2ν1ήττ ἀ2ν1ήττ ἀ2ν1ηττ ἀ2ν1ήφα ἀ2ν1ήφα ἀ2ν1ηφα ἀ2ν1ίατ ἀ2ν1ίατ ἀ2ν1ιάτ ἀ2ν1ιάτ ἀ2ν1ίδιο ἀ2ν1ίδιο ἀ2ν1ιδίο ἀ2ν1ιδίο ἀ2ν1ιδίω ἀ2ν1ιδίω ἀ2ν1ίδια ἀ2ν1ίδια ἀ2ν1ιδιτ ἄ2ν1ιδρος ἄ2ν1ιδροσ ἀ2ν1ίδρου ἀ2ν1ίδρου ἀ2ν1ίδρω ἀ2ν1ίδρω ἄ2ν1ιδρον ἄ2ν1ιδρε ἀ2ν1ίδροι ἀ2ν1ίδροι ἄ2ν1ιδροι ἀ2ν1ίδρυτ ἀ2ν1ίδρυτ ἀ2ν1ιδρύτ ἀ2ν1ιδρύτ ἀ2ν1ιδρωτ ἀ2ν1ιδρώτ ἀ2ν1ιδρώτ ἀ2ν1ίερ ἀ2ν1ίερ ἀ2ν1ιέρ ἀ2ν1ιέρ ἀ2ν1ιεράτ ἀ2ν1ιεράτ ἀ3ν2ιέρω ἀ3ν2ιέρω ἀ2ν1ίκ ἀ2ν1ίκ ἀ2ν1ικ ἄ2ν1ικ ἀ3ν2ίκη ἀ3ν2ίκη ἀ3ν2ική ἀ3ν2ική ἀ2ν1ίλ ἀ2ν1ίλ ἀ2ν1ιλ ἀ2ν1ίμαστ ἀ2ν1ίμαστ ἀ2ν1ιμάστ ἀ2ν1ιμάστ ἀ2ν1ίου ἀ2ν1ίου ἀ2ν1ιού ἀ2ν1ιού ἄ2ν1ιππ ἀ2ν1ίππ ἀ2ν1ίππ ἀ2ν1ισ ἄ2ν1ισ ἀ2ν1ίσ ἀ2ν1ίσ ἀ3ν2ισᾶτ ἀ3ν2ισάτ ἀ3ν2ισάτ ἀ3ν2ίστ ἀ3ν2ίστ ἀ3ν2ιστ ἀ4ν3ιστορη ἀ4ν3ιστόρη ἀ4ν3ιστόρη ἀ4ν3ιστορή ἀ4ν3ιστορή ἀ3ν2ίσχ ἀ3ν2ίσχ ἀ4ν3ίσχυ ἀ4ν3ίσχυ ἄ2ν1ιχ ἀ2ν1ίχ ἀ2ν1ίχ ἀ2ν1ιχνεύτ ἀ2ν1ιχνεύτ ἀ2ν1ίψ ἀ2ν1ίψ ἀ2ν1ιψ ἀ2ν1όδε ἀ2ν1όδε ἀ2ν1οδέ ἀ2ν1οδέ ἄ2ν1οζ ἀ2ν1όζ ἀ2ν1όζ ἀ2ν1οικε ἀ2ν1οικον ἄ2ν1οικ ἀ2ν1οίκ ἀ2ν1οίκ ἀ2ν1οικτί ἀ2ν1οικτί ἄ2ν1οικτ ἀ2ν1οίκτ ἀ2ν1οίκτ ἀ2ν1οίμωκ ἀ2ν1οίμωκ ἀ2ν1οιμώκ ἀ2ν1οιμώκ ἀ2ν1οιμωκ ἀ2ν1οιν ἄ2ν1οιν ἀ2ν1οίν ἀ2ν1οίν ἄ2ν1οιστρ ἀ2ν1οίστρ ἀ2ν1οίστρ ἀ2ν1όλ ἀ2ν1όλ ἀ2ν1ολ ἄ2ν1ολ ἀ3ν2ολκ ἀ3ν2ολο ἀ2ν1ομβρί ἀ2ν1ομβρί ἀ2ν1ομβρῖ ἄ2ν1ομβρο ἀ2ν1όμβρο ἀ2ν1όμβρο ἀ2ν1όμβρω ἀ2ν1όμβρω ἄ2ν1ομβρα ἀ2ν1ομήλ ἀ2ν1ομήλ ἀ2ν1ομηλ ἀ2ν1ομίλ ἀ2ν1ομίλ ἀ2ν1ομιλ ἀ2ν1όμιχ ἀ2ν1όμιχ ἀ2ν1ομιχ ἀ2ν1όμο ἀ2ν1όμο ἀ2ν1ομό ἀ2ν1ομό ἀ2ν1ομο ἀ3ν2ομοθ ἀ3ν2όμου. ἀ3ν2όμου. ἀ3ν2όμῳ. ἀ3ν2όμῳ. ἀ3ν2όμω. ἀ3ν2όμω. ἀ2ν2όμοιν. ἀ2ν2όμοιν. ἀ3ν2όμων. ἀ3ν2όμων. ἀ3ν2όμοις. ἀ3ν2όμοις. ἀ3ν2όμοισ. ἀ3ν2όμοισ. ἀ3ν2όμους. ἀ3ν2όμους. ἀ3ν2όμουσ. ἀ3ν2όμουσ. ἀ2ν1όν ἀ2ν1όν ἀ2ν1ον ἄ2ν1οπ ἀ2ν1όπ ἀ2ν1όπ ἀ2ν1όρ ἀ2ν1όρ ἀ2ν1ορ ἄ2ν1ορ ἀ3ν2οργάζ ἀ3ν2οργάζ ἄ3ν2ορθ ἀ3ν2όρθ ἀ3ν2όρθ ἀ3ν2ορμά ἀ3ν2ορμά ἀ3ν2ορτ ἀ3ν2ορύ ἀ3ν2ορύ ἀ2ν1όσι ἀ2ν1όσι ἀ2ν1οσί ἀ2ν1οσί ἀ2ν1οσι ἄ2ν1οσμ ἀ2ν1όσμ ἀ2ν1όσμ ἀ2ν1όσφρ ἀ2ν1όσφρ ἀ2ν1οσφρ ἀ2ν1ούα ἀ2ν1ούα ἀ2ν1ουά ἀ2ν1ουά ἀ2ν1ούσι ἀ2ν1ούσι ἀ2ν1ουσί ἀ2ν1ουσί ἀ2ν1ούτ ἀ2ν1ούτ ἀ2ν1ουτ ἀ2ν1οφθ ἀ2ν1όχευτ ἀ2ν1όχευτ ἀ2ν1οχεύτ ἀ2ν1οχεύτ ἄ2ν1οχλ ἀ2ν1όχλ ἀ2ν1όχλ ἀ2ν1οψ ἄ2ν1οψ ἀ2ν1όψ ἀ2ν1όψ ἀντα2ν1ισ ἀντα2ν1ίσ ἀντα2ν1ίσ ἀντει2σ1 ἀντε2κ1 ἀντε2ν1 ἀντε2ξ1 ἀντιδυ2σ1 ἀντιπαρε2κ1 ἀντιπαρε2ξ1 ἀντιπρο2σ1 ἀντιπροσ3κ2υ ἀντισύ2ν1 ἀντισύ2ν1 ἀντισυ2ν1 ἀ2ν1ύ ἀ2ν1ύ ἀ2ν1υ ἀ3ν2υμ ἀ3ν2ύσ ἀ3ν2ύσ ἀ3ν2υσ ἀ2ν1υπέ2ρ1 ἀ2ν1υπέ2ρ1 ἀ2ν1υπε2ρ1 ἄ2ν1ῳδ ἀ2ν1ῴδ ἀ2ν1ώδυ ἀ2ν1ώδυ ἀ2ν1ωδύ ἀ2ν1ωδύ ἀ2ν1ώι ἀ2ν1ώι ἀ2ν1ωί ἀ2ν1ωί ἀ2ν1ώλ ἀ2ν1ώλ ἀ2ν1ωλ ἀ2ν1ώμ ἀ2ν1ώμ ἀ2ν1ωμ ἀ2ν1ών ἀ2ν1ών ἀ2ν1ων ἀ2ν1ωρ ἄ2ν1ωρ ἀ2ν1ώρ ἀ2ν1ώρ ἄ2ν1ωτο ἀ2ν1ώτο ἀ2ν1ώτο ἀ2ν1ωφέλ ἀ2ν1ωφέλ ἀ2ν1ωφελ ἀ2ν1ώχυ ἀ2ν1ώχυ ἀ2ν1ωχύ ἀ2ν1ωχύ ἀπα2ν1αι ἀπά2ν1ου ἀπά2ν1ου ἀπα2ν1ούρ ἀπα2ν1ούρ ἁπα2ξ1 ἀπε2κ1λ ἁπε2ρ1 ἀποσυ2ν1 ἀπρό2σ1 ἀπρό2σ1 ἀπρο2σ1 ἀπρό3σ2κε ἀπρό3σ2κε ἀπρο3σ2κέ ἀπρο3σ2κέ ἀπρό3σ2κο ἀπρό3σ2κο ἀπρο3σ2κό ἀπρο3σ2κό ἀπρο3σ2τ ἁρπα2ξ1 ἀρρε2ν1ω ἀρχισυ2ν1 ἀστε2ρ1ω ἀσύ2ν1 ἀσύ2ν1 ἀσυ2ν1 ἀξύ2ν1 ἀξύ2ν1 ἀξυ2ν1 αὐτέ2κ1μ αὐτέ2κ1μ αὐτε2κ1μ αὐτε2ξ1 ἀω2σ1φ .γερα2σ1φ .δα2σ1π .διαμφι2σ1β .διέ2κ1ρο .διέ2κ1ρο .διε2κ1ρό .διε2κ1ρό .διέ2ξ1 .διέ2ξ1 .διε2ξ1 .δικα2σ1π .διό2σ1κ .διό2σ1κ .διο2σ1κ .διό2σ1π .διό2σ1π .διο2σ1π .δί2σ1α .δί2σ1α .δι2σ1ά .δι2σ1ά .δί2σ1η .δί2σ1η .δι2σ1ή .δι2σ1ή .δί2σ1ε .δί2σ1ε .δι2σ1ε .δι2σ1θ .δύ2σ1 .δύ2σ1 .δυ2σ1 δύ3σ2ω. δύ3σ2ω. δύ3σ2εις. δύ3σ2εις. δύ3σ2εισ. δύ3σ2εισ. δύ3σ2ει. δύ3σ2ει. .δύ3σ2ετ .δύ3σ2ετ δύ3σ2ομεν. δύ3σ2ομεν. δύ3σ2ουσιν. δύ3σ2ουσιν. δύ3σ2οιμι. δύ3σ2οιμι. δύ3σ2οις. δύ3σ2οις. δύ3σ2οισ. δύ3σ2οισ. δύ3σ2οι. δύ3σ2οι. δύ3σ2οιτον. δύ3σ2οιτον. δυ3σ2οίτην. δυ3σ2οίτην. δύ3σ2οιμεν. δύ3σ2οιμεν. δύ3σ2οιτε. δύ3σ2οιτε. δύ3σ2οιεν. δύ3σ2οιεν. δύ3σ2ειν. δύ3σ2ειν. δύ3σ2ων. δύ3σ2ων. δύ3σ2ον δύ3σ2ον δυ3σ2όν δυ3σ2όν δύ3σ2ουσ δύ3σ2ουσ δυ3σ2ούσ δυ3σ2ούσ δύ3σ2ῃ δύ3σ2ῃ δύ3σ2ητον. δύ3σ2ητον. δύ3σ2ωμεν. δύ3σ2ωμεν. δύ3σ2ωσι. δύ3σ2ωσι. δύ3σ2αιμι. δύ3σ2αιμι. δύ3σ2αις. δύ3σ2αις. δύ3σ2ειας. δύ3σ2ειας. δύ3σ2αισ. δύ3σ2αισ. δύ3σ2ειασ. δύ3σ2ειασ. δύ3σ2αι. δύ3σ2αι. δύ3σ2ειε. δύ3σ2ειε. δύ3σ2αιτον. δύ3σ2αιτον. δυ3σ2αίτην. δυ3σ2αίτην. δύ3σ2αιμεν. δύ3σ2αιμεν. δύ3σ2αιτε. δύ3σ2αιτε. δύ3σ2αιεν δύ3σ2αιεν δύ3σ2ειαν. δύ3σ2ειαν. δύ3σ2ον. δύ3σ2ον. δυ3σ2άτω. δυ3σ2άτω. δύ3σ2ατον. δύ3σ2ατον. δυ3σ2άτων. δυ3σ2άτων. δύ3σ2ατε. δύ3σ2ατε. δυ3σ2άντων. δυ3σ2άντων. δύ3σ2ας. δύ3σ2ας. δύ3σ2αν. δύ3σ2αν. δύ3σ2αντ δύ3σ2αντ δυ3σ2άντ δυ3σ2άντ δύ3σ2ασ δύ3σ2ασ δυ3σ2άσ δυ3σ2άσ δύ3σ2ομαι. δύ3σ2ομαι. .δύ3σ2εσ .δύ3σ2εσ δυ3σ2όμεθα. δυ3σ2όμεθα. δύ3σ2ονται. δύ3σ2ονται. δυ3σ2οίμην. δυ3σ2οίμην. δύ3σ2οιο. δύ3σ2οιο. δύ3σ2οιτο. δύ3σ2οιτο. δύ3σ2οισθον. δύ3σ2οισθον. δυ3σ2οίσθην. δυ3σ2οίσθην. δυ3σ2οίμεθα. δυ3σ2οίμεθα. δύ3σ2οισθε. δύ3σ2οισθε. δύ3σ2οιντο. δύ3σ2οιντο. δύ3σ2εσθαι. δύ3σ2εσθαι. .δυ3σ2όμεν .δυ3σ2όμεν .δυ3σ2ομέν .δυ3σ2ομέν δύ3σ2ωμαι. δύ3σ2ωμαι. δύ3σ2ηται. δύ3σ2ηται. δυ3σ2ώμεθα δυ3σ2ώμεθα δύ3σ2ησθε. δύ3σ2ησθε. δυ3σ2αίμην. δυ3σ2αίμην. δύ3σ2αιο. δύ3σ2αιο. δύ3σ2αιτο. δύ3σ2αιτο. δύ3σ2αισθον. δύ3σ2αισθον. δυ3σ2αίσθην. δυ3σ2αίσθην. δυ3σ2αίμεθα. δυ3σ2αίμεθα. δύ3σ2αισθαι. δύ3σ2αισθαι. δύ3σ2αιντο. δύ3σ2αιντο. δυ3σ2άσθω. δυ3σ2άσθω. δύ3σ2ασθον. δύ3σ2ασθον. δυ3σ2άσθων. δυ3σ2άσθων. δύ3σ2ασθε. δύ3σ2ασθε. δύ3σ2ασθαι. δύ3σ2ασθαι. δυ3σ2άμεν δυ3σ2άμεν δυσ3σ2αμέν δυσ3σ2αμέν δύ3σ2ατο. δύ3σ2ατο. δύ3σ2ετο. δύ3σ2ετο. δύ3σ2αντο. δύ3σ2αντο. δύ3σ2εο. δύ3σ2εο. .δυσεί2σ1β .δυσεί2σ1β .δυσει2σ1β .δυσέ2κ1 .δυσέ2κ1 .δυσε2κ1 .δυσέ2ξ1 .δυσέ2ξ1 .δυσε2ξ1 .δυ3σ2ιθ δύ3σ2ις. δύ3σ2ις. δύ3σ2ισ. δύ3σ2ισ. δύ3σ2εω δύ3σ2εω δύ3σ2ιν. δύ3σ2ιν. δύ3σ2ι. δύ3σ2ι. δυ3σ2έοιν. δυ3σ2έοιν. δύ3σ2εσι. δύ3σ2εσι. δύ3σ2εσιν. δύ3σ2εσιν. .δύ3σ2κε .δύ3σ2κε .δυ3σ2μή. .δυ3σ2μή. .δυ3σ2μὴ. .δυ3σ2μῆς. .δυ3σ2μῆσ. .δυ3σ2μῇ .δυ3σ2μῆ. .δυ3σ2μᾶ .δυ3σ2μα .δυ3σ2μῶ .δυσξύ2ν1 .δυσξύ2ν1 .δυσξυ2ν1 .δύ3σ2ταν .δύ3σ2ταν .δυ3σ2τάν .δυ3σ2τάν .δυ3σ2την .δυ3σ2τήν .δυ3σ2τήν ἐδυ2σ1τ εἰ2ν1όδ εἰ2ν1όδ εἰ2ν1οδ εἰ2σ1 εἴ2σ1 εἰ3σ2ί. εἰ3σ2ί. εἰ3σ2ὶ. εἰ3σ2ι. εἰ3σ2ίν. εἰ3σ2ίν. εἰ3σ2ὶν. εἰ3σ2ιν. εἴ3σ2ομ εἴ3σ2ῃ. εἴσει. εἴ3σ2εται. εἴ3σ2εσθον. εἰ3σ2όμ εἰ3σ2όμ εἴ3σ2εσθε. εἴ3σ2ονται εἰ3σ2οίμην εἰ3σ2οίμην εἴ3σ2οιο εἴ3σ2οιτο εἴ3σ2οισθον εἰ3σ2οίσθην εἰ3σ2οίσθην εἰ3σ2οίμεθα εἰ3σ2οίμεθα εἴ3σ2οισθε εἴ3σ2οιντο εἴ3σ2εσθαι εἰ3σ2όμεν εἰ3σ2όμεν εἰ3σ2ομέν εἰ3σ2ομέν εἴ3σ2άμην. εἴ3σ2άμην. εἴ3σ2ω εἴ3σ2ατο εἴ3σ2ασθον εἰ3σ2άσθην εἰ3σ2άσθην εἰ3σ2άμεθα εἰ3σ2άμεθα εἴ3σ2ασθε εἴ3σ2αντο εἴ3σ2ωμαι εἴ3σ2ησθον εἰ3σ2ώμεθα εἰ3σ2ώμεθα εἴ3σ2ησθε εἴ3σ2ωνται εἰ3σ2αίμην εἰ3σ2αίμην εἴ3σ2αιο εἴ3σ2αιτο εἴ3σ2αισθον εἴ3σ2αίσθην εἴ3σ2αίσθην εἰ3σ2αίμεθα εἰ3σ2αίμεθα εἴ3σ2αισθε εἴ3σ2αιντο εἰ3σ2άσθω εἰ3σ2άσθω εἰ3σ2άσθων εἰ3σ2άσθων εἴ3σ2ασθαι εἰ3σ2άμεν εἰ3σ2άμεν εἰ3σ2αμέν εἰ3σ2αμέν ἐ2κ1λ ἐ3κ2λήθη ἐ3κ2λήθη ἐ3κ2λάζ ἐ3κ2λάζ ἐ3κ2λάγ ἐ3κ2λάγ ἐ3κ2λάο ἐ3κ2λάο ἐ3κ2λάσ ἐ3κ2λάσ ἐ3κ2λαί ἐ3κ2λαί ἐ3κ2λαύ ἐ3κ2λαύ ἐ3κ2λεί ἐ3κ2λεί ἐ4κ3λείπ ἐ4κ3λείπ ἐ4κ3λείψ ἐ4κ3λείψ ἐ3κ2λῄ ἐ3κ2κλέπ ἐ3κ2κλέπ ἐ3κ2κλέψ ἐ3κ2κλέψ ἐ3κ2λάπ ἐ3κ2λάπ ἐ3κ2λαπ ἐ4κ3λάπτ ἐ4κ3λάπτ ἐ4κ3λαπτ ἐ3κ2λέφ ἐ3κ2λέφ ἐ3κ2λεφ ἐ3κ2λήρ ἐ3κ2λήρ ἐ3κ2ληρ ἐ3κ2λίν ἐ3κ2λίν ἐ3κ2λιν ἐ3κ2λύ ἐ3κ2λύ ἐ4κ3λύσεω ἐ4κ3λύσεω ἐ4κ3λύσει ἐ4κ3λύσει ἐ4κ3λύσεοι ἐ4κ3λύσεοι ἐ4κ3λύσεσι ἐ4κ3λύσεσι ἐ3κ2λόμ ἐ3κ2λόμ ἐ3κ2κλώσ ἐ3κ2κλώσ ἔ2κ1λει ἔ3κ2λεισ ἔ2κ1λυσ ἐ2κ1μ ἔ2κ1μ ἐ2κ1ν ἔ2κ1ν ἔ3κ2ναι ἐ3κ2ναί ἐ3κ2ναί ἔ3κ2νησ ἐ3κ2νήσ ἐ3κ2νήσ ἐ3κ2νυ ἐ2κ1ρ ἔ2κ1ρ ἐ3κ2ράδ ἐ3κ2ράδ ἐ3κ2ραδ ἔ3κ2ραζ ἐ3κ2ράζ ἐ3κ2ράζ ἔ3κ2ραγ ἐ3κ2ράγ ἐ3κ2ράγ ἐ3κ2ράτ ἐ3κ2ράτ ἐ3κ2ρατ ἐ3κ2ραύγ ἐ3κ2ραύγ ἐ3κ2ραυγ ἔ3κ2ραι ἐ3κ2ραί ἐ3κ2ραί ἔ3κ2ραν ἐ3κ2ράν ἐ3κ2ράν ἐ3κ2ρήη ἐ3κ2ρήη ἐ3κ2ράα ἐ3κ2ράα ἐ3κ2ραά ἐ3κ2ραά ἐ3κ2ράθ ἐ3κ2ράθ ἐ3κ2ραθ ἔ3κ2ρεκ ἐ3κ2ρέκ ἐ3κ2ρέκ ἔ3κ2ρεξ ἐ3κ2ρέξ ἐ3κ2ρέξ ἐ3κ2ρέμ ἐ3κ2ρέμ ἐ3κ2ρεμ ἐ3κ2ρήμ ἐ3κ2ρήμ ἐ3κ2ρημ ἔ3κ2ριν ἐ3κ2ρίν ἐ3κ2ρίν ἐ3κ2ρίθ ἐ3κ2ρίθ ἐ3κ2ρότ ἐ3κ2ρότ ἐ3κ2ροτ ἔ3κ2ρου ἐ3κ2ρού ἐ3κ2ρού ἔ3κ2ρυπ ἐ3κ2ρύπ ἐ3κ2ρύπ ἔ3κ2ρυψ ἐ3κ2ρύψ ἐ3κ2ρύψ ἐ3κ2ρύβ ἐ3κ2ρύβ ἐ3κ2ρύφ ἐ3κ2ρύφ ἐ3κ2ρυσ ἔ3κ2ρωζ ἐ3κ2ρώζ ἐ3κ2ρώζ ἔ3κ2ρωξ ἐ3κ2ρώξ ἐ3κ2ρώξ ἐ2κ1ταθ ἔ2κ1ταμε. ἐ2κ1τάμν ἐ2κ1τάμν ἐ2κ1ταν ἐ2κ1ταρ ἐ2κ1τάσ ἐ2κ1τάσ ἐ2κ1τε ἐ2κ1τέ ἐ2κ1τέ ἐ3κ2τείν ἐ3κ2τείν ἐ2κ1τήκ ἐ2κ1τήκ ἐ2κ1τι ἔ2κ1τι ἐ2κ1τί ἐ2κ1τί ἔ3κ2τιζ ἐ3κ2τίζ ἐ3κ2τίζ ἔ3κ2τισα ἐ3κ2τίσα ἐ3κ2τίσα ἐ2κ1τό ἐ2κ1τό ἐ2κ1το ἔ2κ1το ἐ3κ2τός. ἐ3κ2τός. ἐ3κ2τὸς. ἐ3κ2τόσ. ἐ3κ2τόσ. ἐ3κ2τὸσ. ἐ2κ1τρ ἔ2κ1τυπο ἐ2κ1τύπου. ἐ2κ1τύπου. ἐ2κ1τύπῳ. ἐ2κ1τύπῳ. ἔ2κ1τυπε. ἐ2κ1τύπω. ἐ2κ1τύπω. ἐ2κτύποι. ἐ2κτύποι. ἐ2κ1τύπων. ἐ2κ1τύπων. ἐ2κ1τύποις. ἐ2κ1τύποις. ἐ2κ1τύποισ. ἐ2κ1τύποισ. ἐ2κ1τύπους. ἐ2κ1τύπους. ἐ2κ1τύπουσ. ἐ2κ1τύπουσ. ἔ2κ1τυπα. ἐ2κ1τυ ἑλλή2σ1π ἑλλή2σ1π ἑλλη2σ1π ἐ2ν1 ἔ2ν1 ἐ3ν2άκις ἐ3ν2άκις ἐ3ν2ακισ ἐ3ν2ακόσ ἐ3ν2ακόσ ἐ3ν2ακοσ ἔ3ν2αρα. ἐ3ν2άρων. ἐ3ν2άρων. ἐ3ν2άροις. ἐ3ν2άροις. ἐ3ν2άροισ. ἐ3ν2άροισ. ἐ3ν2αρηφ ἐ4ν3αραρ ἐ3ν2άρεε ἐ3ν2άρεε ἐ3ν2αρέω ἐ3ν2αρέω ἐ3ν2αρέα ἐ3ν2αρέα ἐ3ν2αρεά ἐ3ν2αρεά ἐ3ν2άριε ἐ3ν2άριε ἐ3ν2αρίω ἐ3ν2αρίω ἐ3ν2αρία ἐ3ν2αρία ἐ3ν2αριά ἐ3ν2αριά ἔ3ν2ασσ ἐ3ν2άσσ ἐ3ν2άσσ ἐ3ν2άσθ ἐ3ν2άσθ ἐ3ν2ασθ ἔ3ν2ατ ἐ3ν2άτ ἐ3ν2άτ ἐνδυ2σ1τ ἐ3ν2έγκ ἐ3ν2έγκ ἐ3ν2εγκ ἔ3ν2εικ ἐ3ν2εῖκ ἐ3ν2εικ ἐ3ν2είκ ἐ3ν2είκ ἔ3ν2ειμ ἐ3ν2είμ ἐ3ν2είμ ἐ3ν2εμέσσ ἐ3ν2εμέσσ ἐ3ν2εμήθ ἐ3ν2εμήθ ἐ3ν2ενή ἐ3ν2ενή ἐ3ν2εό ἐ3ν2εό ἐ3ν2εὸ ἐ3ν2εο ἐ3ν2εῶ ἐ3ν2εά ἐ3ν2εά ἐ3ν2εὰ ἐ3ν2εᾶ ἐ3ν2έπει ἐ3ν2έπει ἔ3ν2ερθε ἔ3ν2ευσ ἐ3ν2εύσ ἐ3ν2εύσ ἐ3ν2έχθ ἐ3ν2έχθ ἐ3ν2εχθ ἔ3ν2ησ ἐ3ν2ήσ ἐ3ν2ήσ ἐ3ν2ηή ἐ3ν2ηή ἐ3ν2ηὴ ἔ3ν2ην. ἐ3ν2ηεί ἐ3ν2ηεί ἐ3ν2ηο ἐ3ν2ηῶ ἐ3νηέ ἐ3νηέ ἐ3ν2ήνο ἐ3ν2ήνο ἐ3ν2ί ἐ3ν2ί ἐ3ν2ι ἔ3ν2ι ἐ4ν3ιαύ ἐ4ν3ιαύ ἐ5ν4ιαύσ ἐ5ν4ιαύσ ἐ5ν4ιαυσ ἐ4ν3ιδρ ἐ4ν3ίδρ ἐ4ν3ίδρ ἐ4ν3ίζ ἐ4ν3ίζ ἐ4ν3ίη ἐ4ν3ίη ἐ4ν3ιέτον. ἐ4ν3ιέτον. ἐ4ν3ίεμεν. ἐ4ν3ίεμεν. ἐ4ν3ίω. ἐ4ν3ίω. ἐ4ν3ιππ ἐ4ν3ίππ ἐ4ν3ίππ ἐ4ν3ίπτ ἐ4ν3ίπτ ἐ4ν3ίψ ἐ4ν3ίψ ἐ4ν3ίσσ ἐ4ν3ίσσ ἐ4ν3ίστ ἐ4ν3ίστ ἐ4ν3ιστ ἐ4ν3ισχ ἐ4ν3ίσχ ἐ4ν3ίσχ ἔ3ν2ος. ἔ3ν2οσ. ἔ3ν2ου. ἔ3ν2ον. ἔ3ν2ω ἔ3ν2οι. ἔ3ν2οις. ἔ3ν2οισ. ἔ3ν2ης. ἔ3ν2ησ. ἔ3ν2ῃ. ἔ3ν2η. ἔ3ν2οσι ἐ3ν2όσε ἐ3ν2όσε ἐ3ν2υάλ ἐ3ν2υάλ ἐ3ν2υαλ ἔ3ν2υξ ἐ3ν2υξ ἐ3ν2ύξ ἐ3ν2ύξ ἐ3ν2ύσ ἐ3ν2ύσ ἐ3ν2υσ ἐ3ν2υώ ἐ3ν2υώ ἐ3ν2υὼ ἐ3ν2υόο ἐ3ν2υόο ἐ3ν2υοῦς ἐ2ξ1 ἔ2ξ1 ἐ3ξ2ήρ ἐ3ξ2ήρ ἐ3ξ2ηρ ἐ3ξ2υ2ν1 ἐ3ξ2υρ ἐ3ξ2ύρ ἐ3ξ2ύρ ἔ3ξ2υσ ἔ3ξ2ω. ἑ2ξ1ήρετμ ἑ2ξ1ήρετμ ἑ2ξ1ηρέτμ ἑ2ξ1ηρέτμ ἐπεί2σ1 ἐπεί2σ1 ἐπει2σ1 ἐπεί3σ2ατον. ἐπεί3σ2ατον. ἐπει3σ2άτην. ἐπει3σ2άτην. ἐπεί3σ2αμεν. ἐπεί3σ2αμεν. ἐπεί3σ2ατε ἐπεί3σ2ατε ἐπει3σ2άμην. ἐπει3σ2άμην. ἐπεί3σ2ω. ἐπεί3σ2ω. ἐπεί3σ2ατο ἐπεί3σ2ατο ἐπεί3σ2ασθον. ἐπεί3σ2ασθον. ἐπει3σ2άμεθα. ἐπει3σ2άμεθα. ἐπεί3σ2ασθε. ἐπεί3σ2ασθε. ἐπεί3σ2αντο. ἐπεί3σ2αντο. ἐπεί3σ2θ ἐπεί3σ2θ ἐπει3σ2θ ἐπε2κ1τεί ἐπε2κ1τεί ἐπέ2κ1τει ἐπέ2κ1τει ἐπε2κ1τρ ἐπέ2κ1τρ ἐπέ2κ1τρ ἐπε2ξ1 ἐπε2σ1β ἐπιπρό2σ1θ ἐπιπρό2σ1θ ἐπιπρο2σ1θ ἐπισυ2ν1 ἐ2σ1 ἐ3σ2άω ἐ3σ2άω ἐ3σ2ημ ἐ3σ2θ ἐ4σ3θέσ ἐ4σ3θέσ ἐ3σ2ιγ ἐ3σ2κ ἐ4σ3κά ἐ4σ3κά ἐ4σ3κα ἐ3σ2μὲν. ἐ3σ2μέν. ἐ3σ2μέν. ἐ3σ2τ ἐ3σ2όμεθα ἐ3σ2όμεθα ἐ3σ2οίμην ἐ3σ2οίμην ἐ3σ2όμ ἐ3σ2όμ ἐ3σ2ομ ἐ3σ2οῦ ἐ3σ2ού ἐ3σ2ού ἐ3σ2ου ἐ3σ2υ ἐ3σ2ύ ἐ3σ2ύ ἐσύ2ν1 ἐσύ2ν1 ἐσυ2ν1 ἐ3σ2χ ἐ4σ3χέ ἐ4σ3χέ ἐ3σ2ώ ἐ3σ2ώ ἐ3σ2ω ἔ2σ1οπ εὐε2ξ1 εὐε3ξ2ί εὐε3ξ2ί εὐε3ξ2ι εὐπρό2σ1 εὐπρό2σ1 εὐπρο2σ1 εὐσύ2ν1 εὐσύ2ν1 εὐσυ2ν1 εὐξύ2ν1 εὐξύ2ν1 εὐξυ2ν1 ἐω2σ1φ ἤ2ν1οψ. ἤ2ν1οπ ἠ2ν1όπ ἠ2ν1όπ .θεμι2σ1κρ .θεό2σ1δ .θεό2σ1δ .θεο2σ1δ .θεοι2σ1εχθρ .θη2ρ1αγρ .θυο2σ1κ .καθυπε2ρ1 .καλω2σ1ορ .καλω2σ1όρ .καλω2σ1όρ .κα2ν1είς. .κα2ν1είς. .κα2ν1εὶς. .κα2ν1είσ. .κα2ν1είσ. .κα2ν1εὶσ. .κα2ν1εν .κα2ν1έν .κα2ν1έν .καταδυ2σ1ωπ .κατεδυ2σ1ώπ .κατεδυ2σ1ώπ .κατει2σ1 .κατε2ν1αί .κατε2ν1αί .κατε2ν1ή .κατε2ν1ή .κατε2ξ1α2ν1ί .κατε2ξ1α2ν1ί .κατε2ξ1α2ν1έσ .κατε2ξ1α2ν1έσ .κερα2σ1φ .κρά2σ1π .κρά2σ1π .κρα2σ1π .κυνό2σ1α .κυνό2σ1α .κυνό2σ1β .κυνό2σ1β .κυνο2σ1β .κυνό2σ1ο .κυνό2σ1ο .κυνο2σ1ο .κυνο2σ1φ .μελα2ν1άγ .μελα2ν1άγ .μελα2ν1αγ .μελα2ν1άε .μελα2ν1άε .μελα2ν1αέ .μελα2ν1αέ .μελα2ν1αθ .μελα2ν1αιγ .μελα2ν1αυγ .μελα2ν1είμ .μελα2ν1είμ .μελα2ν1εῖμ .μελά2ν1ιππ .μελά2ν1ιππ .μελα2ν1ίππ .μελα2ν1ίππ .μελα2ν1όμμ .μελα2ν1όμμ .μελα2ν1ομμ .μελά2ν1οσσ .μελά2ν1οσσ .μελα2ν1όσσ .μελα2ν1όσσ .μελά2ν1οστ .μελά2ν1οστ .μελα2ν1όστ .μελα2ν1όστ .μελά2ν1ουρ .μελά2ν1ουρ .μελα2ν1ούρ .μελα2ν1ούρ .μελα2ν1ουρ .μελά2ν1υ .μελά2ν1υ .μελα2ν1ύ .μελα2ν1ύ .μετε2ξ1α .μετε2ξ1έ .μετε2ξ1έ .μετε2ξ1ε .μογι2σ1 .μογο2σ1τ .μυ2σ1π .μυ2σ1επ .νεώ2σ1οικ .νεώ2σ1οικ .νεω2σ1οίκ .νεω2σ1οίκ .νου2ν1ε .ξυ2ν1αγ .ξυ2ν1ε .ξυ2ν1έ .ξυ2ν1έ .ξύ2ν1ε .ξύ2ν1ε .ξυ3ν2εώ .ξυ3ν2εώ .ξυ3ν2εῶ .ξυ2ν1ῆκ .ξύ2ν1ι .ξύ2ν1ι .ξυ2ν1ί .ξυ2ν1ί οἱο2ν1εί. οἱο2ν1εί. οἱο2ν1εὶ. οἱό2σ1 οἱό2σ1 οἰ2σ1πώτ οἰ2σ1πώτ οἰ2σ1πωτ ὁλο2ν1έν. ὁλο2ν1έν. ὁλο2ν1ὲν. ὁπω2σ1 ὅ2σ1γε. ὁσο2ν1ῶν. ὅ2σ1περ. ὅ2σ1τις οἷ2σ1τισι οὕ2σ1τινας ἧ2σ1τινος αἷ2σ1τισι ἅ2σ1τινας ὁ2σ1τι2σ1οῦν. ἡτι2σ1οῦν. ὁποιου2σ1τινα2σ1οῦν. οὐδενό2σ1ω οὐδενό2σ1ω οὐδενο2σ1ώ οὐδενο2σ1ώ .παλι2ν1 .παλί2ν1 .παλί2ν1 .πα2ν1 .πά2ν1 .πά2ν1 .πα3ν2ός. .πα3ν2ός. .πα3ν2ὸς. .πα3ν2όσ. .πα3ν2όσ. .πα3ν2ὸσ. .πα3ν2ί. .πα3ν2ί. .πα3ν2ὶ. .πάνα. .πάνα. .πα3ν2ῶν. .πα3ν2ικ .πα3ν2ίσδ .πα3ν2ίσδ .πα3ν2ισδ .πα3ν2οῦ. .πα3ν2ῷ. .πα3ν2ό. .πα3ν2ό. .πα3ν2ὸ. .πα3ν2όν. .πα3ν2όν. .πα3ν2ὸν. .πα3ν2έ. .πα3ν2έ. .πα3ν2ὲ. .πα3ν2οί. .πα3ν2οί. .πα3ν2οὶ. .πα3ν2οῖς. .πα3ν2οῖσ. .πα3ν2ούς. .πα3ν2ούς. .πα3ν2οὺς. .πα3ν2ούσ. .πα3ν2ούσ. .πα3ν2οὺσ. .παρα2ν1ίσχ .παρα2ν1ίσχ .παρεί2σ1 .παρεί2σ1 .παρει2σ1 .παρε2κ1λ .παρε2κ1τρ .παρε2ν1εῖ .παρε2ν1ο .παρε2ξ1 .παρέ2ξ1 .παρέ2ξ1 παρέ3ξ2ω. παρέ3ξ2ω. παρέ3ξ2εις. παρέ3ξ2εις. παρέ3ξ2εισ. παρέ3ξ2εισ. παρέ3ξ2ει. παρέ3ξ2ει. παρέ3ξ2ετον. παρέ3ξ2ετον. παρε3ξ2έτην. παρε3ξ2έτην. παρέ3ξ2ομεν. παρέ3ξ2ομεν. παρέ3ξ2ετε. παρέ3ξ2ετε. παρέ3ξ2ουσι. παρέ3ξ2ουσι. παρέ3ξ2ομαι παρέ3ξ2ομαι παρέ3ξ2ῃ παρέ3ξ2ῃ παρέ3ξ2εται. παρέ3ξ2εται. παρέ3ξ2εσθον. παρέ3ξ2εσθον. παρε3ξ2όμεθα. παρε3ξ2όμεθα. παρέ3ξ2εσθε. παρέ3ξ2εσθε. παρέ3ξ2ονται. παρέ3ξ2ονται. .πλεο2ν1έ .πλεο2ν1έ .πλεο2ν1ε .προει2σ1 .προε2κ1 .προε2ν1 .προε2ξ1 .προέ2ξ1 .προέ2ξ1 .προ2σ1 .προ3σ2άβ .προ3σ2άβ .προ3σ2αβ .προσει2σ1 .προ3σ2εί .προ3σ2εί .προ3σ2έσει .προ3σ2έσει .προ3σ2εσεί .προ3σ2εσεί .προσε2ν1 .προσε2ξ1 .πρό3σ2θι .πρό3σ2θι .προ3σ2θί .προ3σ2θί .προ4σ3θιγ .πρό3σ2κοπ .πρό3σ2κοπ .προ3σ2κόπ .προ3σ2κόπ .προ3σ2τασ .προ3σ2τάτ .προ3σ2τάτ .προ3σ2τατ .προ3σ2ταυ .προ3σ2τεί .προ3σ2τεί .προ3σ2τεν .προ3σ2τέν .προ3σ2τέν .προ3σ2τερν .πρό3σ2τερν .πρό3σ2τερν .προ3σ2τέρν .προ3σ2τέρν .προ3σ2τήσ .προ3σ2τήσ .προ3σ2τόμ .προ3σ2τόμ .προ3σ2τομ .πρό3σ2τῳ .πρό3σ2τῳ .προ3σ2τῴ .προ3σ2υγ .προ3σ2υμ .προ3σ2υ2ν1 .πρό3σ2φαγμ .πρό3σ2φαγμ .προ3σ2φάγμ .προ3σ2φάγμ .προ3σ2φάζ .προ3σ2φάζ .προ3σ2φάττ .προ3σ2φάττ .πρό3σ2χημ .πρό3σ2χημ .προ3σ2χήμ .προ3σ2χήμ .πρό3σ2ω. .πρό3σ2ω. .πρό3σ2ωθεν. .πρό3σ2ωθεν. .προ3σ2ώτ .προ3σ2ώτ .προ3σ2ωτ .προϋπε2ξ1 .πυ2ρ1άγ .πυ2ρ1άγ .πυ2ρ1αγ .πυ2ρ1αίθ .πυ2ρ1αίθ .πυ2ρ1αιθ .πυ2ρ1ῆθ .πυ2ρ1ηθ .πυ2ρ1ήθ .πυ2ρ1ήθ .πυ2ρ1ακ .πύ2ρ1αυ .πύ2ρ1αυ .πυ2ρ1αύ .πυ2ρ1αύ .πυ2ρ1αυ .πυ2ρ1ήνεμ .πυ2ρ1ήνεμ .πυ2ρ1ηνέμ .πυ2ρ1ηνέμ .πυ2ρ1ωπ .σελα2σ1φό .σελα2σ1φό .σελα2σ1φο .συμπαρει2σ1 .συ2ν1 .σύ2ν1 .σύ2ν1 .συνδιέ2ξ1 .συνδιέ2ξ1 .συνδιε2ξ1 .συνδυ2σ1 .συνε2ξ1 .τεσσαρε2σ1κ .τρει2σ1κ .τρι2σ1 .τρι3σ2μό .τρι3σ2μό .τρι3σ2μο .τρι3σ2μῶ .τρι3σ2π .τρί3σ2τ .τρί3σ2τ .τρι3σ2τ .τρι3σ2ώ .τρι3σ2ώ .τρι3σ2ω ὑο2σ1κ ὑπεί2σ1 ὑπεί2σ1 ὑπει2σ1 ὑπεί3σ2ας ὑπεί3σ2ας ὑπεί3σ2ασ ὑπεί3σ2ασ ὑπεί3σ2αν ὑπεί3σ2αν ὑπει3σ2άν ὑπει3σ2άν ὑπει3σ2άσ ὑπει3σ2άσ ὑπε2κ1λαμ ὑπε2κ1λήψ ὑπε2κ1λήψ ὑπε2κ1τ ὑπε2ν1 ὑπε2ξ1 ὑπε2ρ1 ὑπέ2ρ1 ὑπέ2ρ1 ὑπέ3ρ2α. ὑπέ3ρ2α. ὑπέ3ρ2ης. ὑπέ3ρ2ης. ὑπέ3ρ2ησ. ὑπέ3ρ2ησ. ὑπέ3ρ2ᾳ. ὑπέ3ρ2ᾳ. ὑπέ3ρ2αν. ὑπέ3ρ2αν. ὑπέ3ρ2αι. ὑπέ3ρ2αι. ὑπε3ρ2ῶν. ὑπέ3ρ2αις. ὑπέ3ρ2αις. ὑπέ3ρ2αισ. ὑπέ3ρ2αισ. ὑπέ3ρ2ας. ὑπέ3ρ2ας. ὑπέ3ρ2ασ. ὑπέ3ρ2ασ. ὑπε3ρ2εθ ὑπε3ρ2έθ ὑπε3ρ2έθ ὑπε3ρ2εί ὑπε3ρ2εί ὑπέ3ρ2υθ ὑπέ3ρ2υθ ὑπε3ρ2ύθ ὑπε3ρ2ύθ ὑπε3ρ2υθ ὑπερε2κ1τε ὑπερε2κ1τί ὑπερε2κ1τί ὑπε3ρ2έπτ ὑπε3ρ2έπτ ὑπε3ρ2επτ ὑπε3ρ2έψ ὑπε3ρ2έψ ὑπε3ρ2εψ ὑπε3ρ2έω ὑπε3ρ2έω ὑπε3ρ2ῶ ὑπε3ρ2έε ὑπε3ρ2έε ὑπε3ρ2εῖς. ὑπε3ρ2εῖσ. ὑπε3ρ2εῖ. ὑπε3ρ2έο ὑπε3ρ2έο ὑπε3ρ2οῦ ὑπε3ρ2εῖτ ὑπε3ρ2ώ ὑπε3ρ2ώ ὑπε3ρ2ω ὕ2σ1τρ ὑ2σ1τρ .φαε2σ1φ .φω2σ1φ .χαρι2σ1ανδρ .χαρι2σ1άνδρ .χαρι2σ1άνδρ .χει2ρ1άγ .χει2ρ1άγ .χει2ρ1αγ .χει2ρ1απ .χει2ρ1αψ .χει2ρ1ου .χει2ρ1ῶν .χει2ρ1άν .χει2ρ1άν .χει2ρ1αν .χη2ν1ναλ ὡ2σ1α2ν1εί. ὡ2σ1α2ν1εί. ὡ2σ1α2ν1εὶ. ὡ2σ1αύτως. ὡ2σ1αύτως. ὡ2σ1αύτωσ. ὡ2σ1αύτωσ. ὡ2σ1εί. ὡ2σ1εί. ὡ2σ1εὶ. ὥ2σ1περ. ὡ2σ1πε2ρ1εί. ὡ2σ1πε2ρ1εί. ὡ2σ1πε2ρ1εὶ. ὥ2σ1τε ι2σ1χίλιοι. ι2σ1χίλιοι. ι2σ1χιλίων. ι2σ1χιλίων. ι2σ1χιλίοις. ι2σ1χιλίοις. ι2σ1χιλίοισ. ι2σ1χιλίοισ. ι2σ1χιλίους. ι2σ1χιλίους. ι2σ1χιλίουσ. ι2σ1χιλίουσ. ι2σ1χίλιαι. ι2σ1χίλιαι. ι2σ1χιλίαις. ι2σ1χιλίαις. ι2σ1χιλίαισ. ι2σ1χιλίαισ. ι2σ1χιλίας. ι2σ1χιλίας. ι2σ1χιλίασ. ι2σ1χιλίασ. ι2σ1χίλια. ι2σ1χίλια. ι2σ1μύριοι. ι2σ1μύριοι. ι2σ1μυρίων. ι2σ1μυρίων. ι2σ1μυρίοις. ι2σ1μυρίοις. ι2σ1μυρίοισ. ι2σ1μυρίοισ. ι2σ1μυρίους. ι2σ1μυρίους. ι2σ1μυρίουσ. ι2σ1μυρίουσ. ι2σ1μύριαι. ι2σ1μύριαι. ι2σ1μυρίαις. ι2σ1μυρίαις. ι2σ1μυρίαισ. ι2σ1μυρίαισ. ι2σ1μυρίας. ι2σ1μυρίας. ι2σ1μυρίασ. ι2σ1μυρίασ. ι2σ1μύρια. ι2σ1μύρια. ι2σ1χιλιοστ ι2σ1μυριοστ ι2σ1χιλιάκις. ι2σ1χιλιάκις. ι2σ1χιλιάκισ. ι2σ1χιλιάκισ. ι2σ1μυριάκις. ι2σ1μυριάκις. ι2σ1μυριάκισ. ι2σ1μυριάκισ.}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lt.pat0000644000175000017500000002064011761001300024652 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-lt.rme % used: a b c d e f g h i j k l m n o p r s t u v w y z ą č ė ę į š ū ų ž \patterns{ .ap1 .api1 .ap3r .arbi1 .arti1 .as3p .at1 .ata1 .at3r .aš3v .dina1 .ek3r .i2š3 .iši2 .kirti1 .nu1 .nusi1 .pie2č .sam1 .sida1 .sk4 .st4 .su5kr .te3s2 .uk3 .u2š3 .už1 .įs4 .šven1 a1a2 a1b a1c a2ch a1d a4dra a1e ae2l a1f 2a1g a4gr ag3ra a5grio a5gro a1h a5inf ai4sk ai4tr a1j a1k ak2l ak2vi a2kėt a1l a3li a5lo1 a3ly a3lė a3lū a1m a1n an3k2l an4sk an4tr a2o a1p ap1a4k ap3ei ap3i2m ap3l a3pr ap3s2 a1r ar1eit a4rg ari4s a1s asi1 asi5s a4sk as3kl a3sl as2mi as2mu a5s4n a4stu a1t at3aug ate5ist at3i2m ato1 atp4 a4tru at1ė2 atū2ž a4u au4kl au4sk au4sl au4t3r a1v a1w a1y a1z a1ą 2a1č a1ę a1ė2 a1į a1š a3šn aš4tr aš2v a1ų a1ū2 a1ž až2l ba3c balta1 ba4sl 2b1b 2b1c 4b3d bep4 be3s2 besi1 be3t2 2b1f 2b1g 2b1h b1j 2b1k 2b1l b2la b2liz 3b2lo b2lu 2b1m 2b1n 2b1p 2b2r b3ri 2b1s 2b3t bu4k 2b1v 2b1w 2b1z 2b1č 2b1š 2b1ž car4 2c1b 2c1c 2c1d 2c1f 2c1g 3chi 2c1k 2c1l 2c1m 2c1n 2c1p 2c1r 2c1s 2c1t cu4 cuk5 2c1v 2c1w 2c1z 2c1č 2c1š 2c1ž da3b4 2d1b 2d1c 2d1d de4k dema1 de4pr de4sp 2d1f 2d1g 2d1h di4p di4s dis5k 2d1j 2d3k 4d3l 2d1m 2d1n do3ri 2d1p 2d1r dro1 dro2b d2rė 4drų 2d1s 2d1t du2a du4k du5ka du4sl 2d1v d3va dvi3a 2d1w d4z 2d1č 2d1š d4ž džio1 e1a2 e2a3l eapi1 eat1 e1b2 ebe1 e3bl eb3r e1c e2ch e3d2 ed3ri e4dro ed3rė e1e e1f e1g eg3ra e1h e1ie ei4k3l 1ein ei4sk ei4sl 2eis3t eist2ra ei2š1 e1j e1k e3kr e1l e1m ema5s4 2e1n en3k2l enk4la eno1 ens4 4enta enu1 e2o e3or e3o2š e3p ep4li ep4r epra1 epri1 e1r ere3a4 eri4s ero1 erė2 e1s esi5s es4k eska1 e5sko e3s2v e1t e1u4 euž3 e1v e3vi e1w e1y e1z e1ą e1č e1ę e1ė e1į4 eįp3 eįs3k eįt3r e1š e3šn eš2v ešė3 e1ų e1ū e1ž 2f1b 2f1c 2f1d 2f1f 2f1g 2f1h fi4s5 2f1k 2f1l 2f1m 2f1n 2f1p 2f1r fri1 2f1s 2f1t 2f1v 2f1w 2f1z 2f1č 2f1š 2f1ž gaš3 2g1b 2g1c 2g1d ge4o1 2g1f 2g1g 2g1h 2g1k 2g1l g2le g2lo 2g1m 2g1n 3g2nų 2g1p2 3g2r grai2 g3ran 5g3re g4rei g3ri 4g4rio g3ro. g4rą 5grį 4grų 2g1s 4g1t 3gu 2g1v 2g1w gyva1 2g1z 2g1č 2g1š 2g1ž 2h1b 2h1c 2h1d 2h1f 2h1g 2h1h hi4b 2h1k 2h2l 2h1m h2me 2h1n 2h1p 2h1r 2h1s 2h1t 2h1v 2h1w 2h1z 2h1č 2h1š 2h1ž i2a ia5g4 i3aiš ia3k i3antę i3antė iap4 i3ar i3b2 i1c ice1 i1d id2r id3rė i2dėm i2e ie4d3r ie3g i3ei ie3kl i3ent ie4p5r ie4sk i1f 2i1g i3g2l ig3ru 2i1h i1i2 i1j i1k i3k2n ik3r i1l ilo1 i1m 1imd 4i1n in4kl 5inv i2o io4g3r iok2 io4pl i3or i1p i2p1j ip3ru i1r ira3s2 i3ri 4i1s i5sa i5si is4k i3sl is4li i5s4n i4ste isto1 2i3t2 i2u i1v i1w i1y i1z i2ą i1č i1ę i1ė2 i1į i1š i3šn iš5t i4šv išė2 1išš i2ų i2ū i3ž 3ja. jauna1 2j1b 2j1c 2j1d 2j1f 2j1g 2j1h 2j1j 2j1k 2j1l 2j1m 2j1n jot3 jo4tv 2j1p 2j1r 2j1s 2j1t 1ju 2j1v 2j1w 2j1z 2j1č 2j1š 1jū 2j1ž 3ka. 5ka3d kak3 ka4kl ka4pr 3kar 3kas 3kati 5kav kavar1 ka3z2 2k1b 2k1c 2k1d 3ke ke4b3 keren1 2k1f 2k1g 2k1h k4i 5ki. 5kia 3kib 3kil 5kit 2k1k 2k1l 3k2la k4lan 4kle. k2lel 4klo. 4klu. k2ly 4klą 4klų 2k1m 2k1n 3ko 2k1p 2k2r k4rau kris2 kri5st k3ro k4rov 4k3ru 5krun k4ry k5rą 2k1s k4sk ks3l k4s3p 4k1t k3ta 3ku 4kub ku4k ku4pr 2k1v k2va k3vo k2vė 2k1w 3kyt 2k1z 5ką 2k1č 2k1š kš2ly kšė3 2k1ž 3la. lap4s3to 2l1b lb3r 2l1c 2l1d 3le. le3c le4gr 4leč 2l1f 2l1g lg3s2t 2l1h 3li. li4a 5li4o 3lių 2l1j 2l1k lko1 2l1l 2l1m 2l1n 3lo. log4 4lop 4l1p lpna1 2l1r 4l1s l4sk l4s3p 4l3t 3lu. 2lup 4l1v 2l1w 3lyč 2l1z 3lą 2l1č 3lęs 3lėm 3lės 2lėč 3lį4 4l1š 3lų 2l1ž m2a 2m3aid 3mas mas3ki 2m1b mb3r 2m1c 2m1d me3c meis1 2m1f 2m1g 2m1h mi4gl mi4gr min4s mi4tr 2m1k 2m1l 2m1m 2m1n m2o 2mod 2m1p m4pl m3pr 2m1r 4m1s 2m1t m3ta 3muo 2m1v 2m1w 2m1z 2m1č 2m1š 2m1ž na3s2 na3t2 2n1b 2n1c ncen1 2n1d n3drė ne1 neg4 nei2m ne4o3 neor2 nerė3 nesi1 ne3sl ne3s2t ne3t2 neįs3t 2n1f 4n1g ng3l ng4r 2n1h ni4s 2n1j 2n1k nk3la nk3r n3kry 2n1l 2n1m 2n1n 5no 2n1p 2n1r 4n1s ns4ku ns3l n4s3p nst3r 4n1t n3ta nt4pl n3tru nt2ruo nua4 nu3b2 nu3g nu1i nuk2 nu4o3 nuos2 nu5s4 2n1v 2n1w 2n1z 4n1č 2n1š 2n1ž o1a o1b o1c o1d o3dr o1e o2et o1f o1g o1h o1i o1j o1k o3kr o1l olen1 o1m om4pr o1n ono1 o1o2 o1p o1r o2rie ori4s or4tr o2rę o1s o3sl os3le os4lo o3s2v o3t2 oto1 o1v o1w o1y o1z o1ą o1č o1ę o1ė o1į o1š oš2v o1ų o1ū o1ž pa3 pad2 pai2l pai2m pai2r 3pan pap4 p2ar parsi1 pa4r1ė2 pas2 pa5sr p2at2 2p1b 4p1c 4p3d2 p2e per1 pe2re pe2r3im per3s pe2rė 2p1f 2p1g 2p1h p2i p3ieš 2p3k2 3p2l p3le p3li 4plio p4liu p3lo p4loj p4lu p4ly 2p1m 4p1n 3po po4g poli1 2p1p 2p2r p3rai prau2si p3raš p3ri pris2 p5ro. p3rom p3ry 4prą p3rė p3rū 4p1s psi1 p5s4k p4s3ty p3s2v 4p3t2 3p4u pusiau1 pu4sk pu4sl pu4tr 2p1v 2p1w p2y 2p1z 2p1č p2ė 4p3š2 4p3ž r2a 3ra. ra3b 3rac ra1im rai4tį ra3kr 3ral 3ram ras4l ra3sm rau4ka. 3rav 2r1b rbo1 r3b4r 2r1c 4r1d 2reb 4rein 4reit 3rel re4p5 5res res3l 3ret 2r1f 2r1g 2r1h r2i 3ri. ri3d 3rij ri3kr 2ril ri2ma. 2r3imt 3rio ri3p risi1 ri3st rivin1 3rią 3rių 2riū 4r1k rk3ly r3k4r 4r1l 2r1m 4r1n r2o 3rod2 ro4gr 3roj 3rok 3ron 3rop 2r3org 5ros 2r1p r3p4r 2r1r 4r1s rs4ko. rs4p 4r1t rti5k4 rti3s2 r3t2r r3t2v r2u 2ruk 3rul 4run 3ruos 2rup 3rus ru4sk 4ruto 4r1v 2r1w 2r1z 3rą 4rąs 4r1č 4r1š r3š2l r3š2m 5rų 2r1ž sala1 2s1amž san5t sarka1 2s3b 2s1c 2s3d s2e se4kr senat4 2s1f 2s1g 2s1h si3auk si3a2v si3a2š si3d si3k4 si3p4 si3s2 si5š2v 3s2k2 4sk. s5ka. 4ske 5s4ken 5ski 5s4kle 5sk4r 5skub sk3va sk3vi 5sky 4ską 5skę 2s2l 3sle s3li s3lo 4s3lu 4s3lū 2s1m 4sme. 4smę 4s3n so4dr 3s2p s3pe 4spn 4spu 4s1r s3ri 2s1s 2s1t s2tal s2ten 4stin s2tod s2toj 3s2tov st2rai st2v 4stę 4s3tė 4stų s2tū su1 su3bl su3d2 su3g2 suk2l su3s2 susi1 suž4 2s1v s2ve 3s2vy 2s1w 2s1z są3 4s3č 5sė 2s1š 2s1ž t2a 2tab ta3kr ta5s 2tat taura1 2tač 2t1b 2t1c 2t1d 2teb 3tem te4o te3t2 2t1f 4t3g 2t1h t2i ti4gr ti4k3l 3tin 2tip 4t3j 4t3k t4kl 4t3l 4t3m 2t1n t2o 3toje 2tolį to3s2 2tow 2t3p t4pj tp3lū tp4r 2t1r 4trio t2riš 4tro 4trą 4trų 4t3s4 tsi1 tskri1 4t1t tua4 3tur 2t1v t2vo 4tvėj 2t1w 3tyd 2t1z 2t1č 3tę t2ėm t3ėmu t3ėmę t3ėmė 2t3š2 2t3ž u1a2 u3ai u1b u2bj u1c u1d u1e2 u1f u1g ug4r ug5rio u1h u1i2m u5in ui2r u1j u1k u3kl uk2le u3kr u3kv u5kų u1l u1m u1n u2o u3or uo4sl u3p up4l up3ro u1r urk2 ur3kl u5ro1 ur3s2 u1s u2s1al u3sl us3la us3le usva1 us3ve u3t2 uto1 2utr u1u u1v u1w u1y u1z u1ą u1č u1ę u1ė2 u1į u1š u3š2l u3š2n uš2v u1ų u1ū2 u1ž uži2m u3žl už3v už1ė2 3va. vap4 va3t 2v1b 2v1c 2v1d v2e 2vep 3ves 2v1f 2v1g 2v1h viesia1 vi4s5k vi4t3r 2v1j 2v1k 2v1l 2v1m 2v1n 2v1p 2v1r 2v4s 2v1t 2v1v 2v1w 2vydau 2v1z 3vą 2v1č 3vė 4vėp 2v1š 2v1ž 2w1b 2w1c 2w1d 2w1f 2w1g 2w1h 2w1k 2w1l 2w1m 2w1n 2w1p 2w1r 2w1s 2w1t 2w1v 2w1w 2w1z 2w1č 2w1š 2w1ž y1a y1b y1c y1d y1e y1f y1g ygia1 y1h y1i y1j y1k y4k3l y1l y1m y1n y1o y1p y3r y1s y4sk y1t y1u y1v y1w y1y y1z y1ą y1č y1ę y1ė y1į y1š y1ų y1ū y1ž 2z1b 2z1c 2z1d 2z1f 2z1g 2z1h 2z1k 2z1l 2z1m 2z1n 2z1p 2z1r 2z1s 2z1t 2z1v 2z1w 2z1z 2z1č 2z1š 2z1ž ą1a ą1b ą1c ą1d ą1e ą1f ą1g ą1h ą1i ą1j ą1k ą1l ą1m ą1n ą1o ą1p ą1r ą1s ą1t ą1u ą1v ą1w ą1y ą1z ą1ą ą1č ą1ę ą1ė ą1į ą1š ą1ų ą1ū ą1ž 2č1b 2č1c 2č1d čeko1 2č1f 2č1g 2č1h čin1 2č1k 2č1l 2č1m 2č1n 2č1p 2č1r 2č1s 2č1t 2č1v 2č1w 2č1z 2č1č 2č1š 2č1ž ę1a ę1b ę1c ę1d ę1e ę1f ę1g ę1h ę1i ę1j ę1k ę1l ę1m ę1n ę1o ę1p ę1r ę1s ę1t ę1u ę1v ę1w ę1y ę1z ę1ą ę1č ę1ę ę1ė ę1į ę1š ę1ų ę1ū ę1ž ė1a ė1b ė1c ė1d ė1e ė1f ė1g ė1h ė1i ė1j ė1k ė4k3l 2ė3l ė1m ė3me ė1n ė1o ė1p ė1r 2ė1s ės3l 2ė3t ė4tr ė1u ė1v ė1w ė1y ė1z ė1ą ė1č ė1ę ė1ė ė1į ė1š ė1ų ė1ū ė1ž į1a į1b į1c į1d2 į2e į1f į4g į1h į1i į1j į2k4 į2l į2m į1n į1o į4p į2r į1s įsi1 įs3l įs2m įs2r įst2 į2t2 į1u į2v į1w į1y į1z į1ą į1č į1ę į1ė2 į1į į1š į1ų į1ū į1ž 2š1b2 2š1c 2š3d2 š1ei še2v 2š1f 2š1g4 2š1h 2š5ist šiuk1 2š1k2 2š1l š2lij š2lu 3šly 2š1m 2š1n š2ne šno1 šo2r 2š1p4 2š1r 2š3s4 šsi1 šsikap1 4š3t2 šu4š 3š1v š2vi š4vyd 2š1w 2š1z 4š3č šė2j 2š1š 2š1ž ų1a ų1b ų1c ų1d ų1e ų1f ų1g ų1h ų1i ų1j ų1k ų1l ų1m ų1n ų1o ų1p ų1r ų1s ų1t ų1u ų1v ų1w ų1y ų1z ų1ą ų1č ų1ę ų1ė ų1į ų1š ų1ų ų1ū ų1ž ū1a ū1b ū1c ū1d ū1e ū1f ū1g ū1h ū1i ū1j ū1k ū4k3l ū1l ū1m ū1n ū1o ū1p ū1r ū1s ū4s3k ūs3l ūs3t ū1t ū1u ū1v ū1w ū1y ū1z ū1ą ū1č ū1ę ū1ė ū1į ū1š ū1ų ū1ū ū1ž žant4 žants5 2ž3b2 2ž1c 2ž3d2 žen1 2ž3f4 2ž3g 2ž1h ži3mu žio3 ž1j 2ž3k2 2ž1l ž2lu 4ž1m 2ž1n 2ž3p 2ž1r 2ž1s žsi1 ž4sk ž4s5l žs3t 4ž3t2 ž2u žu3s2 3ž2v ž4vi ž3vo 2ž1w 2ž1z 2ž1č žįs3 2ž1š 2ž1ž}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ca.hyp0000644000175000017500000000060511761001300024631 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-ca.rme % used: a b c d e g h i j k l n o p r s t u v w x y \hyphenation{ cu-rie cu-ries gei-sha gei-shes goua-che goua-ches hip-py hip-pies hob-by hob-bies jeep jeeps joule joules klee-nex klee-nexs lar-ghet-ti lar-ghet-to lied lieder nos-al-tres ro-yal-ties ro-yal-ty vos-al-tres whis-ky whis-kies}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nl.hyp0000644000175000017500000000150711761001300024661 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-nl.rme % used: a b c d e f g h i j k l m n o p r s t u v w \hyphenation{ aan-dachts-trek-ker aan-dachts-trek-kers acht-en-der acht-en-ders acht-en-der-tig acht-en-der-tig-ste be-heers-ta-ken be-scherm-en-gel be-scherm-en-ge-len be-stuurs-la-gen be-stuurs-ta-ken bij-stands-trek-ker bij-stands-trek-kers bui-ten-an-ten-ne bui-ten-an-ten-nes don-der-aal han-dels-taal her-e-nen ket-ting-ste-ken lands-taal meest-al mi-nis-ters-por-te-feuil-le mi-nis-ters-por-te-feuil-les ont-hoof-din-gen pa-ling-ste-ken rechts-taal schil-ders-ta-lent sou-ve-niertje sou-ve-niertjes spie-gel-ei ver-en-gels-te ver-hol-lands-te ver-in-lands-te ver-kinds-te ver-ne-der-lands-te ver-rechts-te ver-steeds-te wals-te wa-ter-staats-in-ge-ni-eur wa-ter-staats-in-ge-ni-eurs}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-bg.lua0000644000175000017500000003477312161703335024650 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="bg", ["source"]="hyph-bg", ["texcomment"]="% Bulgarian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Bulgarian hyphenation patterns, version 1.7, July 2008\ % Copyright 1994-2008 Georgi Boshnakov\ % Georgi dot Boshnakov at manchester dot ac dot uk\ %\ % This file can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ %\ %\ % First version: 1994\ % Modified: June 2000 (minor changes)\ % Modified: May 2006 (added copyright notice)\ % Modified: June 2008 (changed encoding to utf-8)\ %\ % Please send wrongly hyphenated words and suggestions for\ % corrections to the address given towards the beginning of this\ % file.\ %\ %\ % Note: The original name of this file was 'bghyphsi.tex' which is\ % part of the package 'bghyphen'. The package 'bghyphen' is now\ % obsolete but it is still available on CTAN and currently (June 2008)\ % gives the same hyphenation results.\ %\ %\ %\ % To make TeX use these patterns:\ %\ % (1) Make sure that the hyph-utf8 package is present in your TeX\ % system.\ %\ % (2) generate the necessary formats (TeX, LaTeX, pdfLaTeX, etc),\ % instructing TeX to load 'loadhyph-bg.tex' for Bulgarian\ % hyphenation.\ %\ % The LaTeX babel package sets \\lefthyphenmin and \\righthyphenmin to 2\ % when the language is switched to Bulgarian. Developers who write\ % support for Bulgarian outside LaTeX and/or babel need to take care\ % of this.\ %\ % ", }, ["patterns"]={ ["characters"]="абвгдежзийклмнопрстуфхцчшщъьюя", ["data"]="1а1 1б1 1в1 1г1 1д1 1е1 1ж1 1з1 1и1 1й1 1к1 1л1 1м1 1н1 1о1 1п1 1р1 1с1 1т1 1у1 1ф1 1х1 1ц1 1ч1 1ш1 1щ1 1ъ1 0ь0 1ю1 1я1 б4а б4е б4и б4о б4у б4ъ б4ю б4я в4а в4е в4и в4о в4у в4ъ в4ю в4я г4а г4е г4и г4о г4у г4ъ г4ю г4я д4а д4е д4и д4о д4у д4ъ д4ю д4я ж4а ж4е ж4и ж4о ж4у ж4ъ ж4ю ж4я з4а з4е з4и з4о з4у з4ъ з4ю з4я й4а й4е й4и й4о й4у й4ъ й4ю й4я к4а к4е к4и к4о к4у к4ъ к4ю к4я л4а л4е л4и л4о л4у л4ъ л4ю л4я м4а м4е м4и м4о м4у м4ъ м4ю м4я н4а н4е н4и н4о н4у н4ъ н4ю н4я п4а п4е п4и п4о п4у п4ъ п4ю п4я р4а р4е р4и р4о р4у р4ъ р4ю р4я с4а с4е с4и с4о с4у с4ъ с4ю с4я т4а т4е т4и т4о т4у т4ъ т4ю т4я ф4а ф4е ф4и ф4о ф4у ф4ъ ф4ю ф4я х4а х4е х4и х4о х4у х4ъ х4ю х4я ц4а ц4е ц4и ц4о ц4у ц4ъ ц4ю ц4я ч4а ч4е ч4и ч4о ч4у ч4ъ ч4ю ч4я ш4а ш4е ш4и ш4о ш4у ш4ъ ш4ю ш4я щ4а щ4е щ4и щ4о щ4у щ4ъ щ4ю щ4я ь4а ь4е ь4и ь4о ь4у ь4ъ ь4ю ь4я 4б3б4 2б3в2 2б3г2 2б3д2 2б3ж2 2б3з2 2б3й2 2б3к2 2б3л2 2б3м2 2б3н2 2б3п2 2б3р2 2б3с2 2б3т2 2б3ф2 2б3х2 2б3ц2 2б3ч2 2б3ш2 2б3щ2 2в3б2 4в3в4 2в3г2 2в3д2 2в3ж2 2в3з2 2в3й2 2в3к2 2в3л2 2в3м2 2в3н2 2в3п2 2в3р2 2в3с2 2в3т2 2в3ф2 2в3х2 2в3ц2 2в3ч2 2в3ш2 2в3щ2 2г3б2 2г3в2 4г3г4 2г3д2 2г3ж2 2г3з2 2г3й2 2г3к2 2г3л2 2г3м2 2г3н2 2г3п2 2г3р2 2г3с2 2г3т2 2г3ф2 2г3х2 2г3ц2 2г3ч2 2г3ш2 2г3щ2 2д3б2 2д3в2 2д3г2 4д3д4 3д4ж 2д3з2 2д3й2 2д3к2 2д3л2 2д3м2 2д3н2 2д3п2 2д3р2 2д3с2 2д3т2 2д3ф2 2д3х2 2д3ц2 2д3ч2 2д3ш2 2д3щ2 2ж3б2 2ж3в2 2ж3г2 2ж3д2 4ж3ж4 2ж3з2 2ж3й2 2ж3к2 2ж3л2 2ж3м2 2ж3н2 2ж3п2 2ж3р2 2ж3с2 2ж3т2 2ж3ф2 2ж3х2 2ж3ц2 2ж3ч2 2ж3ш2 2ж3щ2 2з3б2 2з3в2 2з3г2 2з3д2 2з3ж2 4з3з4 2з3й2 2з3к2 2з3л2 2з3м2 2з3н2 2з3п2 2з3р2 2з3с2 2з3т2 2з3ф2 2з3х2 2з3ц2 2з3ч2 2з3ш2 2з3щ2 2й3б2 2й3в2 2й3г2 2й3д2 2й3ж2 2й3з2 4й3й4 2й3к2 2й3л2 2й3м2 2й3н2 2й3п2 2й3р2 2й3с2 2й3т2 2й3ф2 2й3х2 2й3ц2 2й3ч2 2й3ш2 2й3щ2 2к3б2 2к3в2 2к3г2 2к3д2 2к3ж2 2к3з2 2к3й2 4к3к4 2к3л2 2к3м2 2к3н2 2к3п2 2к3р2 2к3с2 2к3т2 2к3ф2 2к3х2 2к3ц2 2к3ч2 2к3ш2 2к3щ2 2л3б2 2л3в2 2л3г2 2л3д2 2л3ж2 2л3з2 2л3й2 2л3к2 4л3л4 2л3м2 2л3н2 2л3п2 2л3р2 2л3с2 2л3т2 2л3ф2 2л3х2 2л3ц2 2л3ч2 2л3ш2 2л3щ2 2м3б2 2м3в2 2м3г2 2м3д2 2м3ж2 2м3з2 2м3й2 2м3к2 2м3л2 4м3м4 2м3н2 2м3п2 2м3р2 2м3с2 2м3т2 2м3ф2 2м3х2 2м3ц2 2м3ч2 2м3ш2 2м3щ2 2н3б2 2н3в2 2н3г2 2н3д2 2н3ж2 2н3з2 2н3й2 2н3к2 2н3л2 2н3м2 4н3н4 2н3п2 2н3р2 2н3с2 2н3т2 2н3ф2 2н3х2 2н3ц2 2н3ч2 2н3ш2 2н3щ2 2п3б2 2п3в2 2п3г2 2п3д2 2п3ж2 2п3з2 2п3й2 2п3к2 2п3л2 2п3м2 2п3н2 4п3п4 2п3р2 2п3с2 2п3т2 2п3ф2 2п3х2 2п3ц2 2п3ч2 2п3ш2 2п3щ2 2р3б2 2р3в2 2р3г2 2р3д2 2р3ж2 2р3з2 2р3й2 2р3к2 2р3л2 2р3м2 2р3н2 2р3п2 4р3р4 2р3с2 2р3т2 2р3ф2 2р3х2 2р3ц2 2р3ч2 2р3ш2 2р3щ2 2с3б2 2с3в2 2с3г2 2с3д2 2с3ж2 2с3з2 2с3й2 2с3к2 2с3л2 2с3м2 2с3н2 2с3п2 2с3р2 4с3с4 2с3т2 2с3ф2 2с3х2 2с3ц2 2с3ч2 2с3ш2 2с3щ2 2т3б2 2т3в2 2т3г2 2т3д2 2т3ж2 2т3з2 2т3й2 2т3к2 2т3л2 2т3м2 2т3н2 2т3п2 2т3р2 2т3с2 4т3т4 2т3ф2 2т3х2 2т3ц2 2т3ч2 2т3ш2 2т3щ2 2ф3б2 2ф3в2 2ф3г2 2ф3д2 2ф3ж2 2ф3з2 2ф3й2 2ф3к2 2ф3л2 2ф3м2 2ф3н2 2ф3п2 2ф3р2 2ф3с2 2ф3т2 4ф3ф4 2ф3х2 2ф3ц2 2ф3ч2 2ф3ш2 2ф3щ2 2х3б2 2х3в2 2х3г2 2х3д2 2х3ж2 2х3з2 2х3й2 2х3к2 2х3л2 2х3м2 2х3н2 2х3п2 2х3р2 2х3с2 2х3т2 2х3ф2 4х3х4 2х3ц2 2х3ч2 2х3ш2 2х3щ2 2ц3б2 2ц3в2 2ц3г2 2ц3д2 2ц3ж2 2ц3з2 2ц3й2 2ц3к2 2ц3л2 2ц3м2 2ц3н2 2ц3п2 2ц3р2 2ц3с2 2ц3т2 2ц3ф2 2ц3х2 4ц3ц4 2ц3ч2 2ц3ш2 2ц3щ2 2ч3б2 2ч3в2 2ч3г2 2ч3д2 2ч3ж2 2ч3з2 2ч3й2 2ч3к2 2ч3л2 2ч3м2 2ч3н2 2ч3п2 2ч3р2 2ч3с2 2ч3т2 2ч3ф2 2ч3х2 2ч3ц2 4ч3ч4 2ч3ш2 2ч3щ2 2ш3б2 2ш3в2 2ш3г2 2ш3д2 2ш3ж2 2ш3з2 2ш3й2 2ш3к2 2ш3л2 2ш3м2 2ш3н2 2ш3п2 2ш3р2 2ш3с2 2ш3т2 2ш3ф2 2ш3х2 2ш3ц2 2ш3ч2 4ш3ш4 2ш3щ2 2щ3б2 2щ3в2 2щ3г2 2щ3д2 2щ3ж2 2щ3з2 2щ3й2 2щ3к2 2щ3л2 2щ3м2 2щ3н2 2щ3п2 2щ3р2 2щ3с2 2щ3т2 2щ3ф2 2щ3х2 2щ3ц2 2щ3ч2 2щ3ш2 4щ3щ4 ааа4 аае4 ааи4 аао4 аау4 ааъ4 ааю4 аая4 аеа4 аее4 аеи4 аео4 аеу4 аеъ4 аею4 аея4 аиа4 аие4 аии4 аио4 аиу4 аиъ4 аию4 аия4 аоа4 аое4 аои4 аоо4 аоу4 аоъ4 аою4 аоя4 ауа4 ауе4 ауи4 ауо4 ауу4 ауъ4 аую4 ауя4 аъа4 аъе4 аъи4 аъо4 аъу4 аъъ4 аъю4 аъя4 аюа4 аюе4 аюи4 аюо4 аюу4 аюъ4 аюю4 аюя4 аяа4 аяе4 аяи4 аяо4 аяу4 аяъ4 аяю4 аяя4 еаа4 еае4 еаи4 еао4 еау4 еаъ4 еаю4 еая4 ееа4 еее4 ееи4 еео4 ееу4 ееъ4 еею4 еея4 еиа4 еие4 еии4 еио4 еиу4 еиъ4 еию4 еия4 еоа4 еое4 еои4 еоо4 еоу4 еоъ4 еою4 еоя4 еуа4 еуе4 еуи4 еуо4 еуу4 еуъ4 еую4 еуя4 еъа4 еъе4 еъи4 еъо4 еъу4 еъъ4 еъю4 еъя4 еюа4 еюе4 еюи4 еюо4 еюу4 еюъ4 еюю4 еюя4 еяа4 еяе4 еяи4 еяо4 еяу4 еяъ4 еяю4 еяя4 иаа4 иае4 иаи4 иао4 иау4 иаъ4 иаю4 иая4 иеа4 иее4 иеи4 иео4 иеу4 иеъ4 иею4 иея4 ииа4 иие4 иии4 иио4 ииу4 ииъ4 иию4 иия4 иоа4 иое4 иои4 иоо4 иоу4 иоъ4 иою4 иоя4 иуа4 иуе4 иуи4 иуо4 иуу4 иуъ4 иую4 иуя4 иъа4 иъе4 иъи4 иъо4 иъу4 иъъ4 иъю4 иъя4 июа4 июе4 июи4 июо4 июу4 июъ4 июю4 июя4 ияа4 ияе4 ияи4 ияо4 ияу4 ияъ4 ияю4 ияя4 оаа4 оае4 оаи4 оао4 оау4 оаъ4 оаю4 оая4 оеа4 оее4 оеи4 оео4 оеу4 оеъ4 оею4 оея4 оиа4 оие4 оии4 оио4 оиу4 оиъ4 оию4 оия4 ооа4 оое4 оои4 ооо4 ооу4 ооъ4 оою4 ооя4 оуа4 оуе4 оуи4 оуо4 оуу4 оуъ4 оую4 оуя4 оъа4 оъе4 оъи4 оъо4 оъу4 оъъ4 оъю4 оъя4 оюа4 оюе4 оюи4 оюо4 оюу4 оюъ4 оюю4 оюя4 ояа4 ояе4 ояи4 ояо4 ояу4 ояъ4 ояю4 ояя4 уаа4 уае4 уаи4 уао4 уау4 уаъ4 уаю4 уая4 уеа4 уее4 уеи4 уео4 уеу4 уеъ4 уею4 уея4 уиа4 уие4 уии4 уио4 уиу4 уиъ4 уию4 уия4 уоа4 уое4 уои4 уоо4 уоу4 уоъ4 уою4 уоя4 ууа4 ууе4 ууи4 ууо4 ууу4 ууъ4 уую4 ууя4 уъа4 уъе4 уъи4 уъо4 уъу4 уъъ4 уъю4 уъя4 уюа4 уюе4 уюи4 уюо4 уюу4 уюъ4 уюю4 уюя4 уяа4 уяе4 уяи4 уяо4 уяу4 уяъ4 уяю4 уяя4 ъаа4 ъае4 ъаи4 ъао4 ъау4 ъаъ4 ъаю4 ъая4 ъеа4 ъее4 ъеи4 ъео4 ъеу4 ъеъ4 ъею4 ъея4 ъиа4 ъие4 ъии4 ъио4 ъиу4 ъиъ4 ъию4 ъия4 ъоа4 ъое4 ъои4 ъоо4 ъоу4 ъоъ4 ъою4 ъоя4 ъуа4 ъуе4 ъуи4 ъуо4 ъуу4 ъуъ4 ъую4 ъуя4 ъъа4 ъъе4 ъъи4 ъъо4 ъъу4 ъъъ4 ъъю4 ъъя4 ъюа4 ъюе4 ъюи4 ъюо4 ъюу4 ъюъ4 ъюю4 ъюя4 ъяа4 ъяе4 ъяи4 ъяо4 ъяу4 ъяъ4 ъяю4 ъяя4 юаа4 юае4 юаи4 юао4 юау4 юаъ4 юаю4 юая4 юеа4 юее4 юеи4 юео4 юеу4 юеъ4 юею4 юея4 юиа4 юие4 юии4 юио4 юиу4 юиъ4 юию4 юия4 юоа4 юое4 юои4 юоо4 юоу4 юоъ4 юою4 юоя4 юуа4 юуе4 юуи4 юуо4 юуу4 юуъ4 юую4 юуя4 юъа4 юъе4 юъи4 юъо4 юъу4 юъъ4 юъю4 юъя4 ююа4 ююе4 ююи4 ююо4 ююу4 ююъ4 ююю4 ююя4 юяа4 юяе4 юяи4 юяо4 юяу4 юяъ4 юяю4 юяя4 яаа4 яае4 яаи4 яао4 яау4 яаъ4 яаю4 яая4 яеа4 яее4 яеи4 яео4 яеу4 яеъ4 яею4 яея4 яиа4 яие4 яии4 яио4 яиу4 яиъ4 яию4 яия4 яоа4 яое4 яои4 яоо4 яоу4 яоъ4 яою4 яоя4 яуа4 яуе4 яуи4 яуо4 яуу4 яуъ4 яую4 яуя4 яъа4 яъе4 яъи4 яъо4 яъу4 яъъ4 яъю4 яъя4 яюа4 яюе4 яюи4 яюо4 яюу4 яюъ4 яюю4 яюя4 яяа4 яяе4 яяи4 яяо4 яяу4 яяъ4 яяю4 яяя4 й4бб й4бв й4бг й4бд й4бж й4бз й4бй й4бк й4бл й4бм й4бн й4бп й4бр й4бс й4бт й4бф й4бх й4бц й4бч й4бш й4бщ й4вб й4вв й4вг й4вд й4вж й4вз й4вй й4вк й4вл й4вм й4вн й4вп й4вр й4вс й4вт й4вф й4вх й4вц й4вч й4вш й4вщ й4гб й4гв й4гг й4гд й4гж й4гз й4гй й4гк й4гл й4гм й4гн й4гп й4гр й4гс й4гт й4гф й4гх й4гц й4гч й4гш й4гщ й4дб й4дв й4дг й4дд й4дж й4дз й4дй й4дк й4дл й4дм й4дн й4дп й4др й4дс й4дт й4дф й4дх й4дц й4дч й4дш й4дщ й4жб й4жв й4жг й4жд й4жж й4жз й4жй й4жк й4жл й4жм й4жн й4жп й4жр й4жс й4жт й4жф й4жх й4жц й4жч й4жш й4жщ й4зб й4зв й4зг й4зд й4зж й4зз й4зй й4зк й4зл й4зм й4зн й4зп й4зр й4зс й4зт й4зф й4зх й4зц й4зч й4зш й4зщ й4йб й4йв й4йг й4йд й4йж й4йз й4йй й4йк й4йл й4йм й4йн й4йп й4йр й4йс й4йт й4йф й4йх й4йц й4йч й4йш й4йщ й4кб й4кв й4кг й4кд й4кж й4кз й4кй й4кк й4кл й4км й4кн й4кп й4кр й4кс й4кт й4кф й4кх й4кц й4кч й4кш й4кщ й4лб й4лв й4лг й4лд й4лж й4лз й4лй й4лк й4лл й4лм й4лн й4лп й4лр й4лс й4лт й4лф й4лх й4лц й4лч й4лш й4лщ й4мб й4мв й4мг й4мд й4мж й4мз й4мй й4мк й4мл й4мм й4мн й4мп й4мр й4мс й4мт й4мф й4мх й4мц й4мч й4мш й4мщ й4нб й4нв й4нг й4нд й4нж й4нз й4нй й4нк й4нл й4нм й4нн й4нп й4нр й4нс й4нт й4нф й4нх й4нц й4нч й4нш й4нщ й4пб й4пв й4пг й4пд й4пж й4пз й4пй й4пк й4пл й4пм й4пн й4пп й4пр й4пс й4пт й4пф й4пх й4пц й4пч й4пш й4пщ й4рб й4рв й4рг й4рд й4рж й4рз й4рй й4рк й4рл й4рм й4рн й4рп й4рр й4рс й4рт й4рф й4рх й4рц й4рч й4рш й4рщ й4сб й4св й4сг й4сд й4сж й4сз й4сй й4ск й4сл й4см й4сн й4сп й4ср й4сс й4ст й4сф й4сх й4сц й4сч й4сш й4сщ й4тб й4тв й4тг й4тд й4тж й4тз й4тй й4тк й4тл й4тм й4тн й4тп й4тр й4тс й4тт й4тф й4тх й4тц й4тч й4тш й4тщ й4фб й4фв й4фг й4фд й4фж й4фз й4фй й4фк й4фл й4фм й4фн й4фп й4фр й4фс й4фт й4фф й4фх й4фц й4фч й4фш й4фщ й4хб й4хв й4хг й4хд й4хж й4хз й4хй й4хк й4хл й4хм й4хн й4хп й4хр й4хс й4хт й4хф й4хх й4хц й4хч й4хш й4хщ й4цб й4цв й4цг й4цд й4цж й4цз й4цй й4цк й4цл й4цм й4цн й4цп й4цр й4цс й4цт й4цф й4цх й4цц й4цч й4цш й4цщ й4чб й4чв й4чг й4чд й4чж й4чз й4чй й4чк й4чл й4чм й4чн й4чп й4чр й4чс й4чт й4чф й4чх й4чц й4чч й4чш й4чщ й4шб й4шв й4шг й4шд й4шж й4шз й4шй й4шк й4шл й4шм й4шн й4шп й4шр й4шс й4шт й4шф й4шх й4шц й4шч й4шш й4шщ й4щб й4щв й4щг й4щд й4щж й4щз й4щй й4щк й4щл й4щм й4щн й4щп й4щр й4щс й4щт й4щф й4щх й4щц й4щч й4щш й4щщ б4ь в4ь г4ь д4ь ж4ь з4ь й4ь к4ь л4ь м4ь н4ь п4ь р4ь с4ь т4ь ф4ь х4ь ц4ь ч4ь ш4ь щ4ь ь4ь .дз4в .дж4р .дж4л .вг4л .вд4л .вг4р .вг4н .вп4л .вк4л .вк4р .вт4р .сг4л .зд4р .сг4р .сб4р .сд4р .жд4р .ск4л .сп4л .сп4р .ст4р .ск4р .шп4р .ск4в .вз4р .вс4л .вс4м .вс4р .св4р .сх4л .сх4р .хв4р .вс4т .сх4в .см4р н4кт. н4кс. к4ст.", ["length"]=12830, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=1660, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pt.hyp0000644000175000017500000000023711761001300024672 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-pt.rme % used: a d e f h o r s t w \hyphenation{ hard-ware soft-ware}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ru.hyp0000644000175000017500000000651411761001300024701 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-ru.rme % used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ы ь э ю я \hyphenation{ ас-бест бездн биз-нес-мен буй-нак-ске вбли-зи взба-ла-муть-ся вздрем-нешь во-до-сли-вом волж-ске воп-лем вопль вост-ра во-ткать во-ткем во-ткешь во-тку во-ткут впол-обо-ро-та впол-уха все-во-лож-ске вцспс га-рем-но-го го-ло-дра-нец грэс дву-зу-бец днепр добре-ем до-бре-ем-ся добре-ет добре-е-те до-бре-е-тесь до-бре-ет-ся добре-ешь до-бре-ешь-ся добрею до-бре-юсь добре-ют до-бре-ют-ся до-бре-сти до-бро-дят до-брось до-брось-те до-бро-сят до-бро-шу домну доп-пель драх-му дрейф-лю дрейфь-те еди-но-жды зав-сек-то-ром за-мру за-члись из-древ-ле изо-тру ин-ког-ни-то искр ка-за-шек казнь кольд-кре-мом корн-па-пир ксендз лик-бе-зом ло-шадь-ми людь-ми лю-э-сом ма-зу-те ме-ти-лам ме-ти-ла-ми мно-га-жды морщь-те на-бе-крень навз-ничь на-вскид-ку на-встре-чу нагл на-изусть на-ис-ко-сок наи-ме-нее на-ис-кось на-обо-рот на-от-рез на-супь-ся на-угад на-уголь-ник не-ост-ра нес-лась нес-лись нет-то не-уду обидь-ся обо-шлось об-ра-сти од-на-жды ослаб-ла ото-мстят ото-мщу ото-тру отру отрусь паб-ли-си-ти па-на-ме па-на-мец па-ра-так-сис пе-ре-вру пе-ре-ме-жать пе-ре-ме-жать-ся пе-ре-шла пис-чая по-все-дне-вен по-гре-мок по-до-тру по-ис-ти-не по-лу-то-ра-ста по-лу-явью по-млад-ше помни по-мнись помни-те по-мни-тесь по-мно-гу по-мру пол-вто-ро-го пол-шка-фа по-на-доб-люсь по-трафь-те преж-де прид-ти при-шла при-шлось про-тру про-хлад-ца пско-ва пыл-че раз-орем-ся раз-оре-тесь раз-орет-ся раз-орешь-ся разо-тру ра-зу-мом резв-люсь рсфср сан-узел сдрейф-лю се-го-дня сме-жат со-блю-сти со-лжешь сост-рим сост-ришь сост-рю сост-рят со-ткать со-ткем со-ткешь сотку со-ткут срос-лась срос-лись стрем-глав так-же тве-ре-зо-го те-ле-ате-лье тер-но-сли-вом троп-лю тьфу узу-фрукт умнем умнет умнете умну умру услышь-те ушла фо-то-пле-нок ца-ре-дво-рец че-рес-чур чер-но-сли-вом чресл чуж-дость шесть-де-сят юсом ядо-зу-бе ярем-но-го}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cy.lua0000644000175000017500000012673212161703335024670 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="cy", ["source"]="hyph-cy", ["texcomment"]="% Welsh hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ %% hyph-cy.tex, Welsh hyphenation patterns\ %% Copyright 1996 Yannis Haralambous\ %% \ %\ % This work may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either version 1.0\ % of this license or (at your option) any later version.\ % The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ %\ % This work has the LPPL maintenance status `maintained'.\ %\ % The Current Maintainer of this work (patterns) is Yannis Haralambous.\ %\ % This work consists of the file hyph-cy.tex and is part of hyph-utf8\ % maintained by tex-hyphen team which also contains derived files.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ % CHANGES:\ % - 1996 - last change to patterns\ % - 2008 - inclusion into hyph-utf8 and file rename (cyhyph.tex -> hyph-cy.tex)\ % - June 2011 - added LPPL licence\ % ", }, ["patterns"]={ ["characters"]="abcdefghilmnoprstuwyáâêëïôö", ["data"]=".ac4t .ad3ae .add5as .add3o .ad4eg .ad4eny .ad4fer .adl4 .ad3r .ae3a .af3a .af4an .aff3 .afl4u .af5lw .ag3w .am4le .am3s .an5ad .an4g3 .anghen5a .anghen4r .an2o .anrhyd4 .ansodd4e .an5te .an3w4 .an5we .ar4bo .ar4cha .ar5ddel .ared4 .ar4en .arff4 .ar4ge .ar2i .ar3we .ar4wed .as3g .as3t .aw4e .ban4as .ban4ed .bara5t .bel3y .be3t4a .bl2 .bl4e .br2 .br4e .call5 .ce4n .ch2 .ch4e .ch4l .ch4o .chollad4 .chr2 .chwyn5 .cl2 .cr2 .cy5we .dad3r .dd2 .ddefn5 .dd4i .ddi5an .ddi5dd .ddi3e .ddill5adas .ddill5ade .ddill5ado .ddill5adw .ddin4 .ddiw5eddas .ddiw5edde .ddiw5eddo .ddiw5eddw .ddwl3 .ddy5fala .ddy5fale .ddy5falo .ddy5falw .ddylad4 .deallad4 .defn3 .der4w .deth5 .di5an .di5dd .di3e .di3gy .dill5adas .dill5ade .dill5ado .dill5adw .din4 .diw5eddas .diw5edde .diw5eddo .diw5eddw .dr4e .dwl3 .dy5fala .dy5fale .dy5falo .dy5falw .dy5fo .dylad4 .dyrchafad4 .eb2 .eb3r .eb4rw .ec2 .ed2 .edl4 .edr4 .eg2 .egn3 .el4or .els4 .en3as .eny5na .er2 .erfy5na .ern4 .ewy5na .fadd3 .falch5 .fan3a .farn4ais. .fasg4 .fas5ge .ff2 .ff4a .ffer4a .ffe5ras .ffer4e .ff4o .ffor5t .ff4y .ffydd5 .ffynad4 .ffy5nas .fign5 .fis5g .fon4edi .fordd4 .for4o .for4w .for4y .fr4i .fryn4d .fydd5 .fyn5as .fyw3 .gal3e .gal5o .gan3l .gan5olas .gan5ole .gen5as .ger5b .geu5d .ghwy5na .gl2 .glaf5y .gl4e .gleid4 .gl4y .glyn3 .glywad4 .god3y .gof3a .goffad4wy .gollad4 .gr2 .grynho4em .grynho4wn .gwedd4er .gyd3 .gyf5al .gyf5arc .gyfer5byna .gyfer5byni .gyfer5bynn .gyffel5 .gym3o .gyn3a .gyn5e .gynef5 .gyth5ru .gy5we .hac4 .hadl4 .haf4a .haf3l4 .hagr3 .ham4le .han5as .han4g5 .hanghen5a .han5t .han5w4 .har5ddel .hared4 .har4en .har3n .harn4a .har3w .has3g .haw4 .heb2 .hec2 .hed2 .hedl4 .he4o .herfy5na .her4w .heur5 .hof4r3 .hol4y .holyn5 .hw2 .hwn4 .hwyl5u .hwyn5a .hwyr5 .hwyth4au .hyd4 .hydr4 .hy3ff .hyf4od .hy5fry .hy3g .hyl4 .hym3e .hym4u .hym4y .hymy5na .hymysg4 .hyn2 .hy3no .hy3rw .iach4 .iac5has .iac5he .iac5hw .ir3 .ladr3 .ledr4e .le3na .le3o .lest4 .lin3 .ll2 .llaw4e .lle5na .llo5nas .llon4e .llythr5 .lo3na .lon4e .ludd3 .lygr3 .lyn3a .lythr5 .man4ed .mant4a .mar4f .mign5 .mis5g .mol3 .mon4edi .mwyth5a .mwyth5w .myn5as .neilltu4ad .neis4i .nen3a .ner4w .ng2 .ngen5as .nghyt5u .nghy5wa .ngl4 .ng4w .ngy4 .ni5an .ni3e .ni5fei .nig2 .ni5ga .ni3ge .ni3gw .ni3gy .ni5re .ni3wa .niwl5 .no4e .no4w .nwl3 .nwyn3 .oddefad4 .od4l .of3a .of4o .of4u .og2 .og4l4 .ol2 .oll3 .ol5yga .ol5yge .olyn3 .or1 .orddad4 .pl4a .pl4e .rad3r .rag3l .ra3na .ran5d4 .rew3 .rhi5a .ria4 .rin4t .rug4l5 .ry3n4a .ryn4e .sas4 .ses4 .st2 .sych3 .sych5e .talad4 .tan4e .th2 .thag5 .th4i .tho5e .th4r4 .thrad4 .th4u .torad4 .tr2 .tr4a .trad4 .tr4o .tro4en .uch2 .wa5r4as .war4es .wedd4er .weithiad4 .welad4 .wen3a .west4 .wn4io .wobr3 .wybr4 .wy3by .wy4r .wyw3 .ydd4 .yd4l .yf4ar .ym4adw .ym3e .ym4yl .ymysg4 .yn4d .ys4b .ysg4 .ys4i .ys4n .ys4t a1a a3ar2 2ab ab3a ab4ad ab3ed ab3el ab5ine abl1 a2b1o ab4or abr3 a1bu a4bu. a4bum 2ac ac1a ac5ade acan3 ac4aol ac3ei ace3ne ac5enni. ach1 a4ch. ach5ac ach5aw a5chef ach3o ach3r ach5us a3chwa achwyn5 achy4 aci5mw acl3 ac3o ac3ta ac3te 4ad3ac ad3ad ad5afa ad3arf adar4g a4dd. add3ad ad3dal ad3dd add3eu add5ew add3f add3i add2o ad4du addun4 add3yc add3ys 2ad1e ad3eg ad3el ad4el. ad4ena ad4ene ad4eni ad4eno ad4enw ad3i 2adl ad3len ad5lys ad2na adnabydd4e adnabydded4 ad2no 2ado ad3oc ad3od ad3of ad3on 4adr. ad4red ad3ri adr4od adr3on ad4ru 4adunia ad5uniad ad5uro adwel4ed. ad3wi ad5wr. 3ad3wys ad5wyt ad1y ady4n ad4yrn 2aea ae4ada ae5an. aedd3 ae3i ael1 ael4edda aen3 ae3oc ae3og aer1 aerw4 aer5we aer5wy aes3 aest4 aeth5a aethr4 ae1w ae5wyd af3adw 4af5aid af4al af3an afan5e af4ann 4afar3 af5arn af4at 4af3au 2af3e 2aff aff3a aff3ed aff3ei aff3i affl3 aff3w aff3y aff4yr af3i afl3a afl5edi af4l3u 2afn1 af3odd 4afol af3ont 2afr af3ra af3res af5rif af4ru af5rwy af1u 2af1w af1y 2a2g ag1a ag3ad ag3al age3na age5ne ag3law agl3o ag3lu agl3w ag3n ag3od ag3of ag4ori ag1r ag3ri ag3ry ag1u ag2w ag3wa ag3wel ag3wn ag3wr ag5yma agy4w a1h2 ahan3 ahanad4 ahedr4 a2i 2aig 2ail1 ailen3 2ain 4ainc 2ait 2al al5abr al3ad 4al3ae alaf3 4alaid al3an al5arc al5aso al3ce alch3w al5cwl al4di al1e al5edau al3ei al3en al4ena al4es. al2fo al3fy al3i al4is all3a all3e all3i all3oc all3w all3y 3aln al3oc al3od al4ogia alo3na alo3n4e al3ono al3or alp4e al1u 4alwc alw3e 4alwr al5wst al3wy 4alwy. al1y 2am ambl3 am3d amdan5 amel5o am3er amgym5r amhen4 amhobl4 amhryd4 am5las am4led am4lf am4lg am5nif am4of am2or amor5w am4pa a4mwa am5wed am5wri am5wyd am3wyt amyn3 a2n 2an. an1a a4nab anadl3 a4nae a4naf an4afi a4nai an2as an3at4 a4nau a4naw 4anco an2da an5dda an4ddy an2de an2do an1e an2ed an3ed. an5eda an5edd. an5edo a4n3eg a4nel an3eli an5er. an5ewi 2anf an3fy 2ang1 ang3ad an4gd ang3e an4gf anghaff4 anghelf4 anghredad4 anghrist4 anghy4 anghyd4 anghydna4 anghyf4 anghyfar4 anghyff4 anghyfiawn4 anghym4 anghyn4e angl4 ang5or an3if an3igi 4annau an3oc an3od. an3odd an5og. an5og4ae 4anol an3ol. an3om an3ont an3or 1anr an5sic ans4ie ans4iw an5siwn an4ta ant5ac an5the ant3rw an1w an3wes 4anwl anwy4 an3wyd anwyn3 an1y any4l3 a1oe ap3a ap4cy ap5elw ap3l apl4a ap5ost ap5rwn ap5ryn ap5wll 2ar ar3ab aradr3 arae3 ar3af. ara5ff ar3an ar4an. aran3a aran3e arat4 ar3aw ar4ber arc3as arch5en ar5clo ar2da ar2de ard5es ar4dr ardyn3 ar1e ar2eb ar2ei ar5eid ar3eit ar3fa arfan5 arf5ed ar5fel ar4ff ar3fod ar1i ar4ian ar2m 4arn. arn5adwy. ar4nd 3arnh ar4no ar4nw ar4ny ar1o ar4od. ar4odi arogl3 3aror ar3os 5aros. ar4p3as arp3w ar3sy ar3te ar4th3 ar3ug ar3ut aru5wc 3arwai ar5wch arwd2 arw5der ar3wed 3ar3wi arw3n ar3wn. ar3wni ar3wy 4arwyn ar3y 2as. 2asas as5awr 1asb as5boe 2asd 2ased as4enn 2asf 2asg as5gal asgl3 asg4oda as3gwr asg3wy 2asia 4asie 2asl 2asn as4ny as4od. 2asoe 2asr 2ast as4tal as3tan astat5 as3te as4tl as4tr as5trus ast2w as5ty. as3tyl astyn3 2asu as3ur as5wir 2aswr 2asy as5ynn 2a2t at3ad at5alf ateb3 at3em ath3a athl3 ath3o ath4r3e athr3w athr5yc ath3w ath3y ato2i at3ol a3tô at3ran atr5oc at3rod atro5e atr5yc at3wy aty3na aty5ne a2u 2aul 2aw aw1a aw5art aw5chw aw5ddr aw5dry aw3ed aw3ei aw3el aw3es aw3f aw3ga aw1i awl5ed awn3a awr1 awr3d awy4r3 3áu. 1â bab4i bab5yd b3ac bach3 badd3 b3adw 1bae 2baet b1af b1ai b1an ban3a ban3e b4ann ban3o 5barch bar4f bar4lys. barn3 bar4wy b1as bas3g2 bast4 bat4a b4ath b1au bawd4a bawe5na b1d b1ec 2bed beir4a be4iw b1em ben4ae be3nas be5ned bengl4 bens4 bent4 b3ent. ben3w benwy5na b3ert b3esi bgal4 2b1i b3ia bi5aidd 3bib1 b3id3 b3ie 3b2ig1 b4inc bin2e b3io b3ir bisg4 b3it bl3af bl5air bla3na bla5nedi bla5nes 2blau bl5awd bl3ec bl4enni. blew3 4blwr b4lyc 4blyn bl5yn. bo4b4l b1oc 4b3odd bol3 b1om b2on bon4d b2r bra3na br3ed breg3y br3em br4enn br2i br4il br3ir brod4iae brog4 br4wd bryf3 bryn4d b1s2 bse3na bse5ne 2bu. 1bua budd4l bu4lo 3buo bw3a b1wc 3bwll b1wn b4wns bwr1 4bwyd b3wyd. 4b3wyf bwyllt4 3bwyn bwy4r3 2by b3ych. bydd5i b2yl 3bylla by3na by3ned by3nes byrf4 b4yrw 3byst. byw3 cabl4en c1ad cad3a cad3l cae4a caethiw4ed c1af c3ai cal3e cal3o cam4enn camn4 can3a ca4ne canghe5na can3l c4ann can5olas can5ole c3ant can4yd car4en car4ped. c1as casg4e 3cat ca4t3r c3au c3áu c1b cd2 c1e c3ed c5edig ceg3 c3el c2en ce3na c3ent cer5by cer4f cer3y ceu4l c3ff 3chae ch3af. ch4afb ch4afi chan3a changhe5na char4enn chasg4e chdr5y ch3eba ch3ebe ch3ebi ch3ebo ch3ebw ch3ech ch3ed. ch3edi 5chein chelad4 ch3ent chen3y ch3er. cher4f ch3esg 3chest 4chestio 4chestol 4chestwa 4chestwe ch3eta ch5ig. chleid4 chl5ent 4chmyni 4chmynnol chn5eg chob3 chobl4 ch3odd chon5ad4 ch3ont chon4y chra4 ch4ro 4chu. ch4ub 4chus 5chwant ch3wch chw4f ch4wi ch3wn. ch3wyf chyd3 chym4an ch4ynn chysg3 chys5o chyt3u chy5wa c1i cib3 cig1 c3in ci3od. cl2e cleid4 cl2i c1ll cllon3 cloe4 cl2w cl4wm cly4w clywad4 cn2 cno4en cn4yw cob1 co4bl4 c1oc c1od cod4l coffad4wy collad4 c1om c1on con4y corn4an cosb3 cr3ae cra4m 3crat credad4 cr4el cr3ie cring4 crof4 crog3 cron4a cro5nas cron4e cryg3 crygl4 cr4yl cr4ym crynho4em crynho4i cs3a c3s4aw cs3yn ct2a c4teg ct4id c1to ctor3 c3tr 1cu 2cus c1w c3wa cwast3 cw4fa cwm3 cwn4ed c3wy c4wyn3 cwy4r cyb3y 2c1yc cych3 cyd3 cydl4 cydr4 cy4f3a cyfer3 cyffel5 c1yl cyll5a cym3 cym4an cym4ero c1yn cyn3a c5ynau cyn3e cynef3 c2yny cy4se cysg3 cys5on cys3t cys3w cyth5rud cy1w cy3wa cy3wi cy3wy d1a2 dach3 d3ach. d5achwr d2ad dad3u dad3w d5adwy dae5ara dae5ared dae5ari dae5arw d2ael d4afe d4afo dag1 dag3w 4dail da5ion d4ait d4al. d4ald d4aln d4alr d2an3a d2an3e dan3f d2ano d2anu d2anw d2any dar3a dar4ana dar4d darf2 d5arne dar3w d5aryd 2das 2dau 2daw dawd3 d5awd. d1b ddad3r 4ddaf 3ddang dd4ani dd3ara dd3ari dd3arw 2ddas dd4aw ddd2 d4dda ddd4e dd4d4i4 dd3dr dd4du dd4dy dd5dy. dd3er. ddeth5 ddeuad4 dd4eug dd4ew dd2f dd4fg 2ddi. dd4ic dd4if ddif3a dd4ig. ddi3gy dd4il dd4im dd4ini 4ddit dd1l2 dd5len 2ddo. 4ddoc dd3odd 4ddom 4ddon3 dd2or3 ddr2 ddr4a ddr4e ddr4i ddr4o ddr4w dd4ry d2du 4dd3un dd5us. dd5waw 4ddwc dd2we 4ddwn 5ddwrn dd4wyn 3ddwyr dd2y 4ddyc dd4ydd dd5yf. ddym4d dd4yn ddy5nad 5ddyni 4ddynt 3ddyr 3deb. debr3 d1ec dech4a d1ed d5edd. deddf3 def3a d1eg d5egol. de1h deheu5 d2eil d4eim delff5 d3ella d3elle d3elli d3ello dellt5 d3ellw del3o d1em d3em. 2d1en1 d4eng d3ent de2o der3f derfyn5 2d1es d3esi 5destu d1et det5an deth4o d1eu1 deul4 deu4ny d4eut d1f2 d3f4ae df4ann df4ao d4fa5ol df4at df4aw dfed5r d3fei dfe5ne d5ferf d4fery dff4y d2fi df4id df4od d4f3ol df4ry d2fu dfwr2 d4fyd dfyn3a dfyn4ed. d1g2 dgam2 dgan5e dg4ei dgl2 dgrynho5 dgyf5ar d1h2 dha5ol dhegl5 2d1i di5ach di1b2 dibryd4 di1d did2e di5den d4ido di5dos di4et di3eu dif4an di5fat di3fe di3ffr di5fli di5flo di5fra di3fw di5gab dig2e di5gel di3gen dige5na dige5ne digl4 di5gof di3gry di3gw dig2y di3gym4 di3gys dil4a dil4e di5lec di5les dill4a di3lu dil2w di3lys d3in. di5niw di3nod d4inoe di3or d2ir d3ir. di3ra d4i3r2e di5rif 3d4iro di4rw di3rym dis3g di3so dis3t di3sw di3sy 4d3it. d2iw2 d4iw. di3w4a d4iwe di5wen d3iwyf d1ï d3ladd dladr3 dl3af d3lam d4lau dl3ed d3l4ei d4len. dle3na dle5ne d4lent dl3er d3lew d2lo dl3oc dl3od d3lon3 dlon5e d1lu dludd3 d2lw dl3yc d3lyd. d3lyn dl4yr d3lyw d1m2 dm4ar dm4er dm4od d3my d1n d3nap dn3as d3naw dneb4 d2n3ed dn3es d2ni d3ni. dno2i d3nos d2n1w d2ny d1o d3och d2od. d2odi d4odia dod3r 2doe do4en d2of dof5yddio d3ol. d4oll dol4wg d3om don2a don2e d3ont dor2a dor4da dor5we dos3 do2w 2dr. 3dra. dr3ad. dr3ada dradd3 dr3adw dr3a4f dr5aid dr5ain dram4g dr4an. dra3na dra3ne dr4ann dr3ant dr5au. dr3c dr3ed dr4edo dr3en d4reu drew3 dr3f drff4 dr4iau d4r3id d4rir d4roe dro3es 4drog drog4e dr3ol dr5ol. dr3on. dron3a dr3ont d4rwg dr3wn dr3wyf dr3yd dr3yn. d3ryw d1s2 d1ug1 d4un. dun3a d4unia d1ur d1us 1dut du5wch d1w dw2a dw3adw d3wae dw3af d3wait d3wal dw3an dw3as dwb3 dwbl4 d3wc dwd2 dw3edi d2wen dwer5y d4w3id d4w3ir d4wit dw5mig dw3o dwr3e d2wrn dwy3b d4wyc dwyn3 dwy4on. d2wyr 3dy. d1yc d5ych. d1yd d3yd. 4dydd dyd2w dydw5y dyf5an dyff4 dyf4n3 dyf4od dyf5odd dy5fodi dyf2r3 dyfrad4 d3yg. d3ygl dy3gy d2yl dyl5ad dy3lan dyll3 dy3lu d1ym dymag5 dym5od 3dyna dy3nas dy3nes dy3n4od dy3r2a dyr2e dy3ri dy5ryd 2dys. 4dysa dys4g dysg5a 4dyso 2ea e1ad e4adf e4adl eaf1 e3af. ea4fa e4afg e1ai e1an3 e4ang ear1 earf2 ear5fo earn4i e1as e1au e3aw eb3ad eb5ar. eb1e ebl2 eb1o eb3ont ebra5ne ebr3e eb4r3i ebr3o eb1w eb3wy eb5yll 2ec1a 2ec3e ech1 ech5od echr4 ech3ry ech5we ech5wyd echwy5na echwy5ne 2eco econ2 eco5no ec5ord ecr1 2ect ec4to 2ecw ec3y 2ed3a ed4al edd3ad edd3al edd3ar edd3e 2eddf eddf3a eddf5i eddf3o eddf3w eddf3y 4eddg edd3o edd3yc edd3yg edd5yla edd5yled edd5ylo edd5ylw edd5yn ed1e ed3eg ed2ei eden5a ed3fa ed3fe ed3fi edf4w 4edia edi4f ed3ig ed3i4n ed3ir ed3iw 3edï 2edl1 ed4lo 4edr. edr3e edr3o edr4yd 2edw ed2we edw3en edw5lw ed3wy4 ed3y edym4 2e1e ef5adwy. ef3an ef5an. ef3ar3 ef3au ef1e efer2 eff4e eff3r4 eff5re effro4er eff3y ef3id ef3ig ef2l3 ef4lo efn1 ef5nos ef1o ef4odo ef2r efr3e ef4ri ef4ry ef4us ef1w efyddad5 efy3na efy5ne e2g1 4eg5an. eg4ana egar3 egeir4 eg5ell 4egen. 2egf eg5ig. egl3a egl3e egl3o 2ego eg4on. 4egos eg5os. egr3a egr3e egr3i egr3o egr3w eg3ry egr3yc eg2u eg3yr e1ho e1hy e2i 2ei1a eiaf3 ei5afr ei3bre eich3 eidal5 eidd3 eidd5y ei5der eidl2 eid5la 2eidr eidr5o ei1e 2eig eigl5ad eig5lenn eigl3w ei4gr 3eilad 4eiladwy. eil5ec eil5eg eil3es ei4ll ein2a eind5i ein4drw 4einf eing4a ein5io 4einl 4einy 2ei1o ei3ont eir3y 2eit eith5e ei1w ei3y 2e2l el1a el5ain elan5e el4co el1e el3ed el4eno el4era el4ere el5far el5fed elgri5 3elh el5iff 4elig ell1 ell5ac ellt4ir ell5wy ell3y el2m3 el5myn el1o el2od el3odd 4elog el4oga el2ri el4wi el3wy el5ybia el5ybr el3yc 4elyd el5yd. el3ydd elyn3 el3yna el5yned elyng4 el3ynn el3yr el3ys el4ysg el4yst em5ain em4at 2em3e 2emo em4os 2emp empr3 em5ryn 2emt em5tas 2emy en5ada e4n3adu e4nae en3af e4nag en5ago en3ai en3an e4nar3 enar4g e4n3aw en5byl en3c en4ct en4cy 2end endig3 endr4 en3ec en3ed. en5edd en3el en3em en3en en3er en3est en3eu e4new enew5y en5fyd eng3h en4gi engl3 en5gl4og en5ise en3it en3o en4oli 4enti ent4ir en3tr ent4wr 4enty en5tya en5uch enw3ad en3wc en3wn en3wr en3wyd en3wyf en3yc en5ych. en5ychase en5ychia en4yg 2eo e5och. e1od e1oe e4olae e4olaid e4olau e1om e1on eor3 ep5ach ep3l er1a er5ain er2c erc3a er4ch 4erco 2er2d er3de erd3y er1e 2erf er5fan erf5au er3fed er3ff er4fl er4fu er3fyd er3gl er2gy er3i er4ic er4il erin3 er5ir. er5it. er2l er5lys er4md er4mw er4my er3na ern4i er5ni5as er5nyw er1o 4erob erog4 4erol er5oli er4ony er2se er5sei 2ert erw3a er4w3e er4wl er3wn er4wre er3wy er4wyc er4wydd er3yc er3ydd er3yg er3yl eryl3e er4yll er3yn eryn4a eryn4e es3a es3ba es3e es5gar es4ge es4gn es4g3w es4gyn es3n es4ne es4t3a es5tam est3er 2estf 2estl est5ol 4estu es5tyll. esty5na esty5ne 2esu esurad4 es4yd. es3yn3 e2t et3ac et3ad e3tae et5eg. eter4 et3er. eth1 eth3e eth3i eth4le eth3os eth4r3 eth3w et5iro et1o et5re. et5swy et1w 4etwr ety5wy e2u eu3a 4euau 2eu1b2 2eud2 eu3da eu3d4e eud4i 2eu1f eu1g eull4 eu5lys 2eun2 eu5nan eu5nos eu5nyddi eu5sil eus3t eu4th eu4tu eu3w 2ew ew1a ew3d ew1e ew3g ewgl4 ewg4w ew3ir ewis3 ewl1 ew3o ew5par e3wyd. e3wyf 2ey e1yc ey4en 1ë 3fa. fab3 fab4i fach3 fac4w fadd2 fad4ei fad4r3 fael3 f1af 3fag fag4d fagl3 f1ai falch4 f4al5on f4alu f3am f4an. fan3d fan5edd fan4es f3anf fan3o fant2 3faoe far3a far4ch3 4far2e f3arf far4fa far4l 3farn farn3a f3arp f3art f4arwe f3arwy f1as fas4iw f3at fat4o fawd4a 3fawr f1b2 f1d2 fdd2 f2dw fd5wr. f4eb. febr3 f1ec fed4n f2edr 3feia 3feie fe4io feiriad4u feith3 fe4iw f4el. f3ell fel5yno f1em fe3na feng3 fent4 fentr5 fenw3 fen3y 2fera ferch4er ferdd4 2f2ere 2f2eri fer4in 2f2ero f2erw ferw5yc f4er3y f1es feth3 f4eth. f4etha feu1 3fey f2f ff3ad ff3ant ff4at ff3au ff3ed. ff5edig ff5eio ff5el. ffen5ed ff3ent ff3er. 3ffert ff3esu ffet4 2ffi ffidl5 ff2l ff4la ffl4ac ff4lo ff5log ff5los ff3n ff3od ffod5e ff4odi 3ffon. ffo3n4a ffo3n4e ff3ont ff2or 5ffor. ff4os ff2ra ff2ri ff4rod ff2rw 4ffry ffr3yn ff2t 5ffurf3 ff5wyf ff5yl. f1g fg4wr f1h2 fha5ol f1i f4iadae 2fic fic4e f2id f3id. fig4en. fil3y fin3 f4in. f3ind fin4t fisg4 f2ï fl2 fl3ad flaf4 fl3ai flamad4 fla3na flan5ed f2las flaw4 fl3ec fl5eis fl3em fle3na fle5ne fl4eo fl3id fl4ig flin3e fl3ir fl4iw fl3om f3lon fl5rwy f4l3wr f1ly f5lychw f4l4yd fl4yf flyn3a flyn3e f2n fn3a fn3d f4n3ec f4n3ed f4n3em f4nen f3nif fn3ig f3nith fn5lu. f4n3oc f4n3om f4n3on fn3w fn2y f4n3yc fn3yn f1oc fodd3 fod4enn f4odf fodr4 fod3rw f4odu f3oedd f1og fol3 fol4enn f1om fon4d 5fonog f4ony f4or. for4c f4ord for3f f3os2 fos4i fos3o f3ot f4otr fr2a f2raf f2rai fra3na fra5ned fras4au f4r3au fr3d frdd2 fre2 f2rec f4red. f4reg freg3y f2rem f4ren f3reo f2rer fr3f f2rh f2rid fr3id. f2rir f4rit fr2o f3roa f5roadw f2roc frod4iae fro2e fro4en fro5esi f3ro2i f2rom f2ron f3roo fr4ot f3row fro4wc fro4wn f1ru fr2w f2rwc f2ry f3ryn f1ta f3ter fudd4l fud3w fu2l f1un3 f4urf f3wa f1wc fwd3 f1we 4fwl. f1wn2 f3wr. fwr5ne f4wy. f3wyd fwyllt4 fwyn3 f4wyn. f4wys f1yc fyd2 fyddad4 fydd4l fydd5y fyd4l3 f4ydr fyd3y 3fyf fyf4y f1yl f4yl. f2yn 4fyn. f3yng fyn3o fyn5od f2yr fy3r2a f3yrd fyr2e fyrf4y fyr4y fys4t fystyr4o fys4w gabl4en g5ach. gad1 gad3a 5gadar g4ad2u 5gaduri g4adwr g1ae gae3a g3af. gaf3a gaf4r3 g1ai 1gal2 gal5ara gal5are gal5ari gal5aro gal5arwy galed5 4gall gam4enn gamn4 gan3a gan4d ga4ne ganghe5na g3ant 4ganwr g3ao gar3eg gar4enn g3arf gar4ge 3gart 4garthia gar4we g1as 5gased gasg4e ga4t3r 2g1au 4gawe 2g1b gb4er g1c 2g1d2 gdd2 gddig5 gdo3ra gdo5r4e g2dw gd5wr. g1ec g1ed gedd3 g2ede g4edi. g4edid g4edir g4edit g2edo g4edu g4edyc geg3 g2egy g2ei. g3eid g4el. gell5a gel3o g1em gen4d g5enni. gen2r g3ent g4enu g3er. 3g4erd ger4f ger3y g1es geu4l g1f2 gfa3na gfa5ne gfe5ne gfyn3 g3ga gh2 ghae4 ghan3a ghanghe5na ghar4en ghasg4e ghen5i gher4f gh4le ghleid4 gh4ne ghob3 ghobl4 ghof5r gh4og ghon4y ghr2 ghra4 ghred4adu ghred4inia ghw4f ghyd3 ghym4an ghysg3 g1i gib3 g4ida gi5en. g2ig1 3gil 1gip g3iw g2l gl3ac gl3adw glaf2 glan5e gl3ant glas3 g5las. g3lat gl5au. gl2e g3le. gl3ech gl3edi g5leisiaso g3leo gl3es gl3eu gl3f gl3ia gl3id g3liw gl4odi gl4ody glo4e gl4of 5gl4oga glo2i g4lu. g4lwc g4l4wm g4l3wn g4lwyf gl3yc g3lyd. gl4ym gl4ys gl4yw g2n gn2i gn3io g4niw g3nï1 gno3e gn2of gn2u gn1w gn4yw gobl4 g1oc goddefad4 go5ddr g2od2y god5yn g2oe go5fau go3fer goff4au gof4un gog2 go3gan gog3e gog4l4 go5gyn g3ol. goleu5 3g4oll3 go4lw gol5yga gol5yge gol5ygwy g3om. go3me gon5ad g4one g3ont gon4yn g2or gor5chy gorddad4 gord5i g4orf gorn4an g4orol gor3t 1gos gosb3a g3ota g3ote g3oti g3oto g3otw g2r gra4m gran3a gr4el gr3f gr2i g4rid4 gr3ie gring4 g4r3ir g4rit. gr2o gr3od gr4oe gr5oed grof4 grog3 gron4a gro5nas gron4ed gron4es gr4ono grwn5a gr3wo gr4wt gr2wy g5rwydd g4ryc gryg3 grygl4 gr4ym gr4yn g1s2 gsym4 gub3 gudr4 gu5edd gu4to gw2 gwa5r4as gwar4es gw4as g3wc gweithiad4 gwelad4 gwel5e gwen3a gwerthad4 gwm3 gwn4a gw4n4e gwobr3 g3wr. g4wrd g5wth. gwy3by g3wyd. gwydr5 g3wyf gwy4r gwyw3 3gyb gyb3y g1yc gych3 g4ycho gydd4f5 g2ydi gydl4 gyd3r4 g4ydu g4ydy 3gyf gyf5an gy4fe gy4fl gy4fr g3yl3a 3gylc g3yle g4ylio g3ylo g3ylw g2ym gym4an gym3u gyng3 g2yno g2yr g4yro g2ys gy4se gysg3 gys5on gys3t gys5to 3gyw gy3wa gy3wed gy3wi gy3wy hab3yd hadd5as hadd3o had4eg had4eny h4adf had4fer hadl4a had3n had3r4 h5aeol ha4f3a h4afl haf5ol h4afs hag3w h1ai h4aif hal3e hall3o hal3o ham4enn hamn4 ham3s han3ad h4anau hanc4 han3d ha4ne han5edd han4er h4ange hanghen4r han3ig han3l han2o han4oda han5olai han5olas han5ole han5olwy hanrhyd4 hansodd4ei har5adwy. hara3t harato4en har4bwr har4cha har4fo h1as h3asf hast4a ha4tr hatr3e h1au hawe5nas hawe5ne hawl3 h2â h1b2 hbl4a h1d2 hddad3 h3di hd4ir hdo3na hdo3ne hd4ra hdr3e hdr5oc hdr5od hdro5ed hdr5wyd h4dwr h2eb h3eb. heb3ra hedd3 hedd4fo h2ede hed5fo hed5fw h4edid h4edir h4edit h2edo hedr5wy h4edu h4edy h2ef h2eg hegn3 h4egy he4ho h2ei2 h4e3ia h4eil heimlad4w h4el. 4helad 4helaf 4helai 4helan 4helas h3eld 2hele 4heli 2hel3o hels4 2helw 4hely hel3yd h1em hen5cy hen4id hens4 hen3wy henwy5na henwy5ne heny5na he3ol her3b h2ero h3esi h2et h3ete h3eto 5heuae heu4aetha heu3d heu2l he4wi hewy5nas h1f2 hfil4 hfonhedd5 hf4os hf4wy h1g2 hgan3 hgap2 hgi5ai h1i2 hiach4 hiac5has hiac5he hiac5hw hi4a4n hib3 hidl3 h2ig1 hig3y hin4t hir3 hi4wa h2ï1 hï4en hl2 hl4ad hl5adw hl4am hla3na h5las. hl3asi hl3aso hl4aw hl5ech. hl5edig hledr5 h3lef 4hleit hl4en hl4et hl3id hlon3a hlon5e h4lus h4lwm h5lyd. hl3ydd hlym4u h4lyn hl3yn. hlywad4 h1m2 h3myg hmygad4 h3myn. hmy3na hmy5ne h5myni hn2 h3nad h2neg h4new hn4ie h1nï1 hnod3 h2nol hn5ole hn4yw ho4ad. ho4bl hod4l ho4dy ho4en hoffad4wy h3og. h3o4ga hog5lu ho2h h2ol h3ol. hol5ud h1om h2or h3or. hor4c horn4an h4os. hosb3 hos3o h2ow hp2 h2r hra3dd hr3adw hr3af. hra3g hr4aid. hr3ant h5raul hr5edig hr3em. hr3f hr2i hr3ia hr3id. hrid4a hr3ie hring4 hr3ir hrisiad4 hr3it hr3iwy hr2o hro4ad4 hr5och. hr3odd hrog3 hr3om. hron4a hro5nas hron4e hrong5 hr3ont hr4ud hr3wn. hr5wyd. h5rwydd. hr3wyf h4ryc hryg3 hrygl4 hry3l hr4ym hrynho4e hrynho4i hrynho4wn h4rys h1s2 hsef4 h2t h2u hub5on hudd3 hudd5y hudr4 hud3w hud5yl h4uge hug4l hun3ad h4unn h3ur. h3us. h4use h4ust h4usw hw2a hw4as hwbl5e hwd3 hw2e hwedl5 h3wei h4wel. hwen3 hwen4y hwe5nychaso hwe5nyched hwerw5 hwe5ug hw2i hwiw5g hwm3 hwn4e h3wr. h2wy h4wy. h4wya hwybr4 hw4yc hwyll5t hw4ym h4wyo h5wyol hwy4r hyb4l hyb4wyl hyb3y hydd4id hyd4fo h2ydi hydl4 hyd4naw hy4f3a hyfad4 hyf4ae hyfar5f hyfer3 hyffel5 hyffred4in. hyf4iai hy4ga hygl4o hygl4w hygr4 hyll3a hym4adw hym4ant hym5el hym4en. hymerad4 hym3o hymp4 hym3u hym5yr hym5ys hyn3a hyn3e hynef3 hyn3yc hyr3a hyrdd5 hyrf3 hyr5n4o hyr2w hys4b hy4se hysg5od hys4ig hys4n hys5oni hyt4bw hyth5ru hyt2u hytun4deba hy3was hy3we hy5wed hy3wi hy3wyd 1ia iab4a iach2 iad3 i4ada 5iadaeth. iad4lo 5iaduro i3ael 3iaet 4iafo iag3w 2ial1 ial4ae 2i3am2 iam3h ia3na 4iand ian5da ia3n2e 4i3ang iang4e ianghen5 ian3o ian3w 2iar i3ard i3arf iar4l iarll5 iar4s i3asg iat5er i2au iawnad4 2ib ib3ed ib3el iben5y ib3es ibetr4 ib3i ib4il ibl3e ibl3o ibl3w ib5og. ib3on ibr3a ibr3w iby4nad4 2ic ic3en ichl4 ic5ied icon2 ic5oni ic5rwy ics4i ic5siw ic3t2 2ida idal4 2idd i4ddai idd4au i2dde idd3f4 idd3i i4ddir i4ddod idd3r 2ide idel4 ider4 2idf idf4w 2id3i idi4a id4lo idl3w 2idm 2i2d2o id3og i3dola i3dole i3dolo i5dolwy ido3na ido5ne i3dor 2idr idr4a idr4o id3rwy 2idu 2idw idw3a idwad4w id4wr 2idy id3yl id2ym 1ie 4iedd 4iedi. iedif5 ied4yl 2i3ef i3eg iegwydd4 2iei i3eid ieis4 4ien. ien4a ien4c 4iend i3ene 2ienn ienw4 i3eny i3esg 2if if4add if4ae if4al ifan3a ifan5e if4ao if4ar if5ard ifar3e if4at if5ath if4aw if5bin i4fec i4fed. i4fedi i5feio i5feiw i4fem ife4n i4fent i4fer. i3fery i4fesi i3fet iffl3 iff5or i3ffu2 iffy5na iffy5ne if3i i3flas if4on. i3fre i3fry i1fu i4fwc i4fwn i4fwyd i4fwyf i1fy i4fyc i4f4yl ify5re ig3ad ig3af ig4ain 2igan 4i3gar ig1e ig3ed ig3es ig5hal4 2ig3i ig5lan. ig5lann ig5law ig5let ig4l3o ig4ly ig5lyd igl3yn ign1 2igo ig3odd ig4ode ig3oe ig3om 2igr i3gre igref4 i3gro ig3rw igryb4 2igw ig5wai i4gwc i4g3wn ig4wrn 2ig1y igyff4 ig5yn. ig4yna ig4yr igys4 ig5yso igysyllt4 igyt4 igy4w 2i1h2 i2han ihat4 ihe4w 2i1i i3iw 2i2l il3a 5ilau. ilc2 ild5ir il3ed il5en. ilew4 il1f ilf4y il3i il4ip ill3 ill5iw illt4 il3oc il3od il5ofy il3on il2s3 il4sy il4ti iludd4 il3un il1w il5wai ilwen3 il4ws il3yd il3yg4 il3yn. ily3na ily5ne i4lysia il5ywa 2im2 im4bi im3i iml3 im4le 2in in1a in3ac in3ad in3af in3ai in3an in2be inc4e in4ci inc2o in4cy in4dai in1e 3in4eb in3f ing5en in4g3o ing3w ing5yl in5gyn in3ia in3id in5iew in3ig iniw4 in4iwe in1o in4ode in4odi in4ody in3oed in3on in3os int4a in4te in2t3r in4ty in3w2 in5wyc in1y 1io 3io. 2iod. i3odde iod5le iod5wy 2ioe 2i1of iog3 4iolc iom3 i2on ion3a ior4c ior4f i4orw 2ios 2iot 2ip ip5ell ip4og ir1 ir2a ir5agl ir3an ir4áf ir3b irch3 irdy5na irdy5ne 2ir3f 2iri i4ria ir3io i3ris ir4li ir4ll ir3na irnad4wy. ir3no irn4y 2ir3o ir3w irw2i ir4wo ir2y ir3yn i3ryw 2is isaf4 is3b is5eld is2er is5er. is4gam is4ge isg3o is3gr isg5wyd is3gy is4la is5myn is2o is5odd is3ol is3on ist2 is4ti is5tol is2w is3wn is5wyd. is4yc is4yr 1it. 3it2a 2ith1 ith3a ith4au ith3eg ith3i ith5or ith3w ith3y 2iw. iw3adw iw3af i4wair i3wal iw3an iw3as 3iwc iw4ch 2iw1d2 iwd4i iw5edd. iw3edi iw3eid iwg4w 2iw1i iw1l2 iwl4e iwl4i iwl4o iwl4w iwm4e iwmp4 3iwn iwn4i 4iwnl iw3o i3wre i3wrt iw5ter 1iwy iw4yd iw4yf iwyn3 4iwyr 1iy 2iyd 2i1ym iyn3 2i1ys ï3ae ï2i l1ac lach3 2lad. l4ad4d3 lad2m lad2o lad3r4w 4laen l3af. 5lafar l1ai l4ain l4air l4ait lam3 l4an. lan5ced lan5de landr3 l2ane lan4es l4ann lan3o 4lant3 lar3a lar4ia lar3n l1as l4as. lasg4 last2 las5ta 4lat. lathr3 lats5i 2l3au law5dde lawen3 law3l law3no lawr2 law5ro law3y 2l1b lb4an l2c lch1 lch5io lch5iw lch3r lch5wyd. l3co lc3yn. 2l1d2 ldd2 ld3i ld4ir ldro3 ldy5na ldy5ne 1le. le3a le4ad. le4ada lebr3 lech3 l3ed. leddf5 l4eddog led5fy led3l4 l4edr lef1 lef3e lef3y l2ega leg5ar. l2egw leg5yr le5iau le3id. lei3l4 le3ir. le3it. le4iw l3el 2l1em l3em. l2ema len2d len5di len5ig l3ent len3y 1leo le3oc le4on. l3er. l4erau ler5ig lesg5e l4esn let4em le4tr l4euad l4euh 4leuon l5euon. le3wch le3wn lew3yn lf2 lf5air l3fan lfe3ne lf4fa lff4y l1fi lf5icy l1fo lf5oda l1fr lf4wy lf3yd lfy5re l1g2 lg4an lgo4f3 2l1h2 l3ha l3he l3hi l3ho l3hw l1i2 liach3 4lian libr3 2lid li3de 1lif1 li4fr 4lio. li5oed li5pal 2lir l3ir. lis4g3 l3it. lith4r3 l4iw. l2l 2ll. ll4ada lladr3 ll5adwy. ll3ant ll5arn lledr4e ll4edy lle3o llest4 lleu4a ll1f llf4y llin3e ll3odd llosgad4 ll5tyr lludd3 llw2 ll3wa llw4e 5llyd. llygr3 ll4ynn ll4yr2 ll5yro lm2 l1ma l4mad l4maf lm3ai l2m3as l4mau lm3o lm3w lm4yn l1n 2lo. lob5yn 2loc loch3 2lod lodd3 lo3ed. l1og3 logl2 l1ol lol2w lolyg4 2l1om l3om. lon2a lon3d lon4es 4l3ont l3or. l4orau l4org l4ory 2lot lo5ynn lp3a l3pu l1r2 l3rh ls4ig l4syn l2t lt3ad lt5eg. lt3em l5tera l5tero l4tia lt4ig l4tio lt1o l3tra ltr4e l3tu l4tu. lt1w 2lu. l2ud ludd5y lud3w lu4edd l2un3 l4un. lur5ig lust5l lw1a lwadd4 lw4ae l1wc l3wch lw3ed lw3er lw3es lw4fa lwfr5e l4wgr lw1i lw4ig l1wn l3wn. lw3o l1wr1 4lwre l4wyc l4wydi lwyd4io l4wyn3 l4wyr 3l4wyt lyb3 2lyc l3ych. lyd2 l4yd. 2lydd lydn3 lydr3 lyf3a lyf5an5 lyf4n3 lyf4r3 5lyfr. l2yg 4lygedd 4lygia lym3 l4ynau lyng3a l4yn3y lyr3a 4lysau 4lysen. lys3ga lys3ge l4ysl 4lysn 4lysr 4lysyn lyw1 m1 mab3 mab4i m3ac mac4w m4adad m4adaf m4adai m4adan m4adas m2adi mad4r3 m4adwc m4adwn m4ady mael3 maf4l3 m3ag 2mai m3am man3a man3e m4anf man2o m3ar m4ar. mar4ch3 m4are m4ari mar4l marn3 m4aru mar4wy masg2 mas3ge m3at mat5eg mat4o m3aw mawd4a mbarato5 m3bi m3by mcan3 md2 m4dai mdan4a mda5nas mda5n4e mdd2 mddadl4 mddef3 mddi4d m5der. m4dera mdog4aetho mdo3na mdo5ne mdro3e mdwy4 mdyng5 mdy5re 4meda 4meddia 4meddwr 4medi 4medï medr3 meg3n4 megni3 meith3 me4iw mel5yno mens4 ment4e mentr5 5menty men5yd m2er m3er. m3erad m4eradwy. m4eraf m4erai m4eran m4eras merch4er merdd4 m4ere m5eriada m4eroc m4erom m4eron m4erw m4ery 4mesia 4mesol mest4 4meswr 4mesy meu1 mfalchi5a mfalchi5e mffl4 mfydd4 mg2 mgyff4 mgyffr5o mgym4 mgym5eria mgys2 mh2 mhar5ad mheir4a mhe3na mhe5ned mhe5nes mhen3t4 mhen5w mhet2 mhe3ta m2heu mhob4l mhr4a mhryf5 mhyd4 mhy3f 2mi m3ias m3id3 m3ie mi5gei min1 min4t m3io m3ir mis2 misg4 mis4i m3it m3iw m3iy ml2 m2las ml5blw m3led mlew3 m3lin m5liwiais m5liwiase m5liwiwy mlo3na mlon4ed mlyn3 m2n m3na mn4as m3ne m4ned mn5edi m5niau m3nï3 m2od m3odd mod4ig mod3r mof5yd m3og m4on. mon3a mon4d m4onï mor2 mor3c mordd4 morddiw5 mor4o m3os2 mos4i mo5siy m2p mpr3a mpr3o mpr3w mp5wai mr2 m2r3ai mra3na m2r4ed mreg3y m4ria m4rie m4rig mro4ad mrod4iae mrod4ir m2roe m2roi m2roo m2row m4roy m4ryn mryn4d mrys4o ms2 m3sa m2se mse3na mse5ne m2so mstr4 m2t mt2a mtas4 m3th m2u mu4an mudd4l mud3w mu2l3 mun3 m3us m3w2a mw3as m3wch m3wi mwr2 mwr3i m3wt mwy3b mwyllt4 mwyn3 m5wyse mwyth4adw mwyth4af mwyth4asan mwyth4aso mwyth4asw mwyth4ec mwyth4em mwyth4er mwyth4i mwyth4oc mwyth4w mwyth4y 2m2y m3yc mych3 m3yd mydd5i mydr3 myd3y myf4y m4yl. myl3a m4yln m3ym myn4ai. m3yr myr4as myr5asa myr4edi myrf4 m3ys m4ysg. mys4w myw3y 3na3b2 na4bl na4bo na4ch3 n2ad n3adl nad4n nadna4 n4ado nad3r nad3u nad3w n3adwr n1ae nae5ara nae5arw nael4 n2afa n5afau n2af3o n4afy n4aic n4aig n4ain n4air n3al nan3a nan3e nan3f nap4om n3ar narllenad4 n3asg n4asol n3as4t 1nat nau3 n1b2 nbyd5r n2c nc3an nc5des nc4ed nc2ei nc5en. n3ch nchwiliad4 n4cia n4cid n4cie n4cio n5ciod. n4cir n4cit n4ciw n4ciy n3cl ncr1 nct1 n5cyd. n5cyny n1d2 nd3as nd3aw ndd2 nd4da nden2 n4d3ia nd3ie n3di3f n3di4g n3dil nd3io nd4ir n3dis n3dit nd3iw nd3iy n3dod nd3oe ndo3ra ndo5r4e n2dwr ndy5na ndy5ne n4dys neallad4 n2eb1 neb3o n5ebry neddf5 n2ede n4edid n5ediga n4edir n4edit n2edo n4edu n3edy n1ef nefn3 n4efy n1eg neg5in ne3h n3eidd n2eis n1el 3nel. nel5yn 3nenty ner3a nerch5 n4erg n4erl 3nert 3nese 4nesia n4esio nes4m 3neso n2est 3nesw n2esy neth5o n2eu neu3d n4euf neul4 3new new5yll. newyn3 n1f2 nfadd4 nf4am nfan3 nfan5e nfan4t nfa5ol nf4at nfel2 nff2 nf4fa nff4o nffyn4 nffynad4 nf4id n4fil nfod4l n2fon nfon5a n5fonedi nf4ri nf4wy n2fy n5fyd. nfyd3a ng2ad ng5adwy. n4gai ngal4 n3gam n3gar n4gau ng4ddy ngel4 nghwyn5 n2gi n2gl2 n3glwm n4gly n5glym nglyn3 ngn2 ng3oe ngof3a ngol4ed ng3on ngop2 n1gr ngr4a n2gw ng4wi ngwy5nas ngy3f n4gyn 2n1h2 nha3o nhar4 nhaws4 nheb5r nhe3na nhe3ne nhep2 nh4es nho3ed nho5esi nho3n4a nhon4e nhudd4ed. nhu4e nhyc4 nhyd2 nhyl4 nhym4 n1i 4ni4ad n5iald ni1b nib4a nib4e nibryd4 ni1d nidd4 ni5dde nid4e n3ie ni4et ni3eu n4iew ni3fed ni3fen ni4feryc ni3ffr ni3fw n2ig n5igam nige5na 4nigiad n5igiad. n5igiada 5nigiadw 4nigion n5igion. 5nigiont 4n5igiwr nigl4 4nigy ni3gym4 nilead4 nill5adas n5illio ni3lu ni3lys nin2 ni3no nin4w ni3or ni3ra nir4e ni3ri ni4rw ni3rym nis3g ni3so nis3ty ni3sw ni3sy nith4e niw2 niw4a ni4wc niw5eddas niw5edde niw5eddo niw5eddw niwl3 niwl5e niwl5o niwl5w ni5ydd n2ïi nï4yc n1l2 nladr3 nlin3 nll2 nllon4 nl4lw n4llyn n2ly nly3na nly3ne n1m2 nmolad4 n1n2 nn4al nn4ar nned4 nneth4 n3nh nni2 nnif4 nni4l nnill4 nni4o nnis4 nni4w n5nos4b nn4wy nny3na nny5ne nn4yw no4ada n3ob n2od. n2odo nod3r n2oe noe4o no3er 3no4et n1of1 nof4el n2ofy n1og nol5eg nom3 n4omi n5ones n1or norch4 nor4f 2nos3 nö5es. np4et n1r2 nre4o n1s2 n2se n3sei ns3en ns3i ns4ic ns4ig n3s4il ns4iy ns5iyc n3siyn nsy3na nsy3ne nt3ad nt5af. nt5aid nt4ana nt3aw n2te n3tei nt3el nt3em nt3er. ntew3 nth2 n4tia nt5il. nt4in n3tis nt3oc nt3od nt5od. nt3oe n4t3or n1tr nt1w nt3yn nty3ra nty3r4e n1u nud2o nun4i nut1 nw3af n3wait nw3an n3war nwar4ed. nw3as nwbl4 nwb5le nwd3e n5wedd nw3edi n3wei nweithi5au nwelad4 nwen5d nw4ia nw3id nwir4 nw3ir. n3wis nw3o nwr5ei n4wy. nwybod4a n4wyc n3wyl n2wyn n4wyn. n3wyt nych3 nyf2 ny5fala ny5fale ny5falo nyff4 nyf4n nyf4o ny5fod nyfr3 n2yg ny3gy n1yl ny3lan ny3lu nym4a nym4y n5ynnau ny3n4od ny3ra nyrchafad4 ny3ri n1ys n4ys. nys4g n3yw 2o1a 2o2b ob3ae ob4an ob5ant ob3ed ob3el ob5en. oben5y ob5er. obl3a obl5ed ob3ler obl5es obl3o obl3w o3b4ly ob3o obr1 ob3yd oc1a oc5byn oc3e och3a och5an och5en ochl3a ochl5es ochl3o ochl3w och3n och4ni och3o ochr3 och3w och3y 2oci 2ocr 2oct 2od3a od4ao odar4 odd3a oddf5y odd5il oddiw3 odd3r odd5ri 4oddu odd3y odd5yd odd5yn odeb3 o5debau o5debu od5edi od5eid od3el od3er od3i odl3a odl3ec odl5esi odl3w od5off 2odog od4oga 2odr odr3a odr5ec odr5em odr3o odr5wyd. od4ry odr5yc 2odw od3wa od5wed od5wen od3yc od3yn od4ynn o1ec o4edd3 oed3i o3edig oedl4a oed5lan oed5ra oeg3 oel3c o1em oen3 o3ent oer3 oes3 oesg4o oet5an oetr3 2of. of3ad of3ai ofan3 ofan5e of3ant ofa5ol of5ebi of3ed of3el of3en of4enn of3er. o4ferl o4fery of4f3a off3ed off5id off3w ofiad4w ofl3 of3n of4na of4nd of4ne of4nf of1o of4odo ofr3a of3re of4rec of4red of4rem of4rer of5wyf of4yn ofy3na ofy3ne og1 og3ai og2an3 o4ganau o4ganu og3as og4edy og5elyn og3er og5erd og3es 2ogf og3i 2ogl ogl3w ogl3y 2ogn3 3og2o4f og5oru og3rwy o3gry og3yd ogyf4 og4yl og5yrn o1h2 oheb3 oher4 o1id oig1 o1ir o1it ol1 2olau ol4ce ol3d ol4da 4oleu ol3eua ol4eued ol5euo ol4euwr olew3 ol3i oll1 oll3e oll5ed ol4lt oll5wy olo2 o3los ol3s ol4sb 2olu 2olwr olw4y ol3wyd ol5wyno ol4yne ol4yni ol4yno ol4ynw 2oma om4at 2omb om2e om5eda om5edi om5eg. om3ei om3en om5isi 2oml om4og4 2omp om5pre on1 on5ach. on5adu on3af o4n3ai 4onair on3an o4n3au on5au. 2onb on5cyf 2ond on5did on2do 2one on5edd. on3el onest3 2onf ongl3 ong2o ong3w on4gyr 2oni 2onn 4onnu on5of. 2onog on2t 4onto on3w 2o1o 2op op3a op4ao op5aon opl3 opr5ai op5ren or1a 4orac or3ach or5aeth. or5aetha or3af or3ai or3an o4r3au or3aw4 or3b or2c or3chw or4dd or5ddyn ord3en or5din or4d5yn or1e or2eb or4edd ore5ddy 4oreg or4egw or4et or3fa orfa5na orfa5ne orff4e or3fo or3f4y 2or3g or3i or3l or4mu or4my orn3a or3nel or1o or3of or4oh oron5a or3one or5oni. or5onid or5onir or5onit or5pws 4orth. ort4i or4ty or5uwc or1w or5wah orw4e or4wel or5wgl or1y or3ydd 2os os3a os4ana osb3as osb5ed osb3o osb3w osb3y os5eai osg3a os3gl osgo5e os3gor osg3wy os5iae os5ibi os2o os3odd os3ol os3on os3te os3tr4 os4tu os3w os3y 2ot1 3ot. ot3e ot5esa oth3 ots4i ot5sia o2u o1wc owg3 owl5as owl3e o1wn owt5er o1wy o1yc oyw3 oy4we ôr3f p1 p2a pab5yd 2p3ad 2p3af 2p3ai 2p3an pa3od para3t par4c par3w past4 p3au pawe5na 2pec 4p5edig p2ei peir4a p5eli. pel3y 2pem pengl4 pens4 pen3t2 pen3w penwy5na 2per 2pes pet2 pe3ta p2h2 pheir4a phen3t4 phen5w phet2 phe3ta phob4l phr4a phryf5 p3ia pib1 p3ie p3io p3iw p2l pla3na p4lau pl5eda p4lyc 3plyg po4b4l pog4y pol3 p2r2 pr3as pryf3 pr5ynn p2s ps4iw pt2 p2ud p4usr pw2 pwd3 pwr1 p4wy. pydr3 p2yr r4abe r4abi rab5lyd rab3y rach5wy r4a4ci racs4 r4a4ct r2ada r4add radd5ol rad4ri radwr4i r2ae raed4 raeddad4 r4aen ra5fann ra5fán r4aff rag1 ra4ge rag3o ra3gra ra4ha ra5hau r1ai 4raidd ram3od ra5mor ra3m2w ran4d3 ran2e r4anf ran3o r4anod. ra5phe r3ar3 rar4c 2r1as ras4ie ras3t2 r3atao rat3e 2r1au raw3e 5rawes 3rawi rawn3 2r1b r2ba r3bar r4bec r4bem r4bent rb4er r4bes r2bl r4boc r4bom r4bont r4bwc r4bwd r4bwn rbyd3 rc2a rc5adw rc5af. r3car rc3e rc4er r2ch rch3ad rch3an rch3ar5 rch5eb r5chei rch3et rch3l r3chm rch3oc rch3oe rch3og r3chu r3chwa r3chwi rch5wyd r5chwyn rch3yc rchyf4 rchym4 r1cy 2rd2 r1da r3dai rdan3 rd5au. r2dd rdd3ad rdd5as rdd5ell rdd5in rdd5iwy rdd3o rdd4od. r5ddodi r3dd4u r4ddu. rddw4 rdd3yc r5ddychw rddyrch5 r5ddyw r1de rd3i rd4in rd4ir r1do r5dod. r1dr rdro3 rdro4ada r3dw r1dy rdy4n rd3yn. re3a r3ebai r3ebas r3ebe r3ebi rebl3 r3ebo rech3 rec3i 4redd r5edd. r4edio r4edol r4edwr red4yn. re4fa refn5y ref3y r4egl r5egl. r4egog re5iau r4eic re5id. reidd5 r4eig r4eil r4eine re5ir. re5it. re4iw r3ell r4emi ren4d r4eng3 r4eni ren3in r4ennyd re1o r1er r4er4id rer5in restr3 r4esw r4eua r4euo r2euy re4wi rew5id re5wn. rew5ynn 2r2f r1fa r4f3ad r4faeth. r4faf r4fai rf4ao r4fas rf4at r4fau r3fedw rfel3 rf3en rf4eny rf4ey r4ff. rff3i rff3l rff3o r3ffw rff3y rf3id r5fil. r3fl rf3lu rfodad4 rf5ol. rf3on rfor2 rf5ord r3fr r3fu rf1w rf5wis rfyn5yc rf4yr r3fys 2r1g2 rgal4 rgan3 r3ge rgel4y rge3na rge5ne rgo4f r1h2 rhag5e rhag3l rhag3o rha3n4a rhan4e r4haw rh4es rhew5y rhif3 rho4ec rhon5a rhost4ir rhugl5 rhyf2 rhy3n4a rhyn4e ri2 2ria r4iaethu riaf3 r4iag ri5agl r3iai r4i5aidd ri5all ri4an r5iant r3ias r4iaw ri5awd rib3e ribl3 rib3w rib3y ri5can r4ida ridd3 ridd5y r4idi rid4yllau 2rie ri3ei rif1 rig3 r4igo ri3i rin5dir rin3e ringl5 r4ini r4inl 2rio r3ioc ri5odad ri5odaf ri5odai ri5odan ri5odasai ri5odasan ri5odase ri5odasi ri5odasoc ri5odasom ri5odasw r3iodd ri3ode ri3odi ri5odoc ri5odod ri5odom ri5odon ri5odwc ri5odwn ri5odwy ri5ody r4ioe r3iom ri3ong r3iont r1ir ris4g risgl3 rist3 3r4ith 2riw ri4wa riw3l4 r5iwr. 2r3iy r1l2 rla3na rla3ne r3lew rl3ia rl3ie rl3io r3ll r4ll. rll4e rllen3 rl4l4w rl5og. r3lon rludd4 r3lw r2lym rlyn3 rl5yn. r1m2 r2ma rm4ac rm3i rm4il r2mo rm4od r3my 2r2n1 r4nai. r4nau rn4es. rn4esa r5nest rng4e rn3i rn5iae rn4ii rn5iol r3n2ï1 rn4os rn3y rn4yw 2roa 4road 4roau rob3l4 roch3 rochl4 ro3cr rodd3 r4odr rod5rw ro4ea roed3 ro4eo ro3er r2of rof3l4 rofun4ed. rof3w r3og. r4ogae ro4ge rol3 r1om3 r4onau rongl4 rong5lwy ron3i r4os. r4osf rosg4 ros3o 2rot rö5edi rp2 r1pa rpar3 r1pe rp5ech rp5em. r2pen rp5ent rp5er. rp5esi rp3i rp3o rp3wy rp3y r1r2 r3ra rr4og r1s2 rs4ai r4sau r2s3en rs3i rs4in rs5li. r2s3t2 r2sy r1t2a r4tau r4ted r3teis r4ten r4tes rth3a rth4eg r3thin rth3la rth3o rth5ol rth5ru r5thryc r4thw rth5wyon. rth5ydd rt4iy r1tr rtr4a rt5rwy rt2u rt3y rub4a r3uc rudd3 3rudd. run4i r1us rw2a rw3ad rw3af r3w4ag r3wait rwb5an rwbl3 r1wc r5wdenn rwedd3 r4weddog r4weddol r4w3eid r3wel r3wer r2wg rw5hel rw1i rw3in r3wl r4wnc rw4ni rw4n3o rwobr4 rw3od rw5old r1wr rwr5es rwr4iaetho rw2y r4wyb r5wydden. rwydd4iad4u r4wyde r4wydo rwydr3 r4wydy 3rwym rwyn3 r4wys 3ry. 3rybl ry3bo rych5wai r2yd r4yd. ry5dano rydd4on. rydl4 ry3f4a ryf2e ry3fer ryf4od ryl3a ryl2e ryl5it rym2r3 ryn3a rync4 4rynd ryn3e ryn3f ryng5a 4rynn rynod4 ryno5ded ryno5der ryn3yc rys3b rys5ba rysg5w rysg3y ry3wa ryw3i s1 sach3 saf3a saf3o san3a san3e san3o sarf5a sat4a sath4 sathraw4 s3au sá4it s2b2 sbad4w s4bai s3bet sb3iw sb5iyc s3bl sbr5io sd4or se2 sec4an sedd3 3sef se5ion sen5ol senw3 s4erc serch5 s4eri s2et sf4am sfedd4 sff4y sf4wy sf4yr s2g s5g4adr sg3adw s3gam sg3an sgar5a s3gaw s3geda s3gede s4gedig s5gedo s5gedw sgel4 sg5en. s3ge3na sge5ne s4gia s4gl. sgl3a sgl3o s3gn sg3ni sg3od sg4od. sgo4g3 sg4ol sg3om sg3on sg5oty sg5rwy sg5ryw s4gwc sg3wn s4gyc sgy4f3 sgy3na sgy5nes 2si s5ial. s5ialu si4am 5siand s4iar s3id3 sid4a s3ie s4iet s2ig s3ig. si4ga s3ige sigl3 5sigl. s3igr s5igyn sil4f sins4 s3io s3ir s3it si4wr s2iyn 2s2ï1 2sl2 sl4au slo3na slo3n4e s3ly slyw4 sm2 sm4ar sm4er smwyt5haso s4nau sn2e sneg2 s2n3i sn4ob s3oc sodd3 sod4l3 s3oe sof4l 2s3og3 s3om3 son3 s4on. s4onau son4deba son4der s3one s4ong sra3na sra5ne s2t st3ac s4tade s4taf st4am st2an st3as s4tau st5awc s4tec s4ted s4tei s4t3em s4ten s4tes st3f s5tiro stl3o st5lyt st2o s3tod. sto3ra sto3r4e st4ra s3tra. str3ec str3es str3oc str3ol s4tr3w str3yc st2u st3ur st5us. s5twyi styr3 s2u sur3 s3us sw2a s3wc swcr3 s3we s4wed sw5edd swen3 2swi swmp3 s3wyf swyn3 swy4r s2y s3yc s5ych. s3yd syf4l3 2syg syll3a syllt3 sym4l3 symudad4 2s3yn. syn4fe s3yr syr2a syr2e s3ys 3syt s4ywa 1tac tach3 3tad4l3 tad3r t1af ta4fa taf4l tag3 t1ai t3aid t5aliae tal2m3 t1an 4tanc tan3e tang5n tan3o tan3w t3ao 3tar4d tar4f t1as tat1 t1au tawl3 t1b t3ch t1ec t1ed tedd3 4teg. 4tegio t3eidi teimlad4w tel4y t3em. t4emi t1en ten4d te4ne terf4 terfyn5 t1es t4esa tes4io tet4a 3tew 4tew. 4tewc tew5id t1f tff2 tff4e tfod4 tfydd4 t1g2 tg4af tg4an tg4en tg4er tgl4a tgn2 t2gor t5gor. t5goria t5gorn tg4wc tg4wy tgy3w t2h thalad4 thal4m3 thang5n th4ar thar4f th4at that5y th1e th4ef th5ell therfyn5 thet4 thl3a thl5ent th5let th3n th5nod th1o th5old thollt4 thon4e thorad4 thr3ac th3red thr5ent thrid4 thro3f th5rwf thryd4 thry5da th3ug th3um th3un th3us th1w th3wa th4wl th3wyd th3wyf thwysg4 th3ych thydd5 th5yma thyrf4au thyr3w thy4w 2t1i t3ia tid3 t3ie t3in ting3 t4ino tion4 t4iono tï5ol. tl3a tl4ae tl1e tl4en. tl3on tl3wy t3lyd t1n2 t3och t4od. t3odd to4ec to3edi to4em to3esi tof3 t3og3 3tois t2ol tollt4 tol3y t1om t3om. t1on ton4e t3ont 3tor tor2a tor4c t3os to4wc to4wn tra3c tra3dd tr3adw tr3af. tra3g tra3na tra5ne tr3ant 3traw tr3ed 3tr4ef tref5a tref3l 4treg tr3em. tr3ent 3trew tr3id4 tr5ig. tro4ada tr3odd tro5fa tr3ola tr3olo tr3olw tron4o tr3ont 2trw tr4wm tr3wn tr5wyd. t5r4wydd tr3wyf try3da tryd4y try3f try3l tr5yn. 3tryw ts2 ts5ach t1se ts3i 3tud tudr4 1tum t1un3 1tur t4urm tw2 t3wai t1wc t1wn t1wr1 twr4n 3twya t3wyd 3twye t3wyf tw4ym 3twyo twysg4 3twyw t1yc t1yd tydd5y ty5gar ty3li tymp4 4t3yn. tyng5ad 1tyr tyr2a tyr4es ty3wr 2u1a ual3 u2and u4ane u3ar u3aw ub1 2uc uch1 uch3e uch5ed ud3ad u5dale udd1 udd3a udd4eg udd3el udd3f udd3i ud5eir ud3er ud3i ud1l udr3 ud5rwydd ud2w ud3wn ud3wr ud3yn u1e uedd3 u4estai. u4estau u4estwr u4esty uf5au. uff4y uf3y ug3ad ug3af ug3en ug3i ugl3a ugl3e ug3lw ugn3 ug1o ug1u ug1w ug3y u1h2 u1i ul3ad ul3af u5lan. u5lann ul3ant u5lath ul3d u2l1e ul1f ul5igr ull1 u1lo ul3oc ul3od ulon3 ulon5e ul1u ul1w ul3yc u3lyd un1 un4edy un5ell un5es. un3i unig3 un5od. un2ol un5ol. 2u1o uog3 u3os3 up2 ur1 urb4w ur5ddu ur3e ur5fau ur4fl ur2gy 4urn. urof4 ur2s3 ur4ty ur4ud u5rwydd ur3y ur4yw 1us. us4edda us5end usg1 4usi. us3o 3usr us3ter us3tod us3tr ut3a ut1e uth4r3 uth3u uth4un ut3o utr3 2u1w u2wc uwch3 u1y 2wa wac5ew wadd3 wad2n3 w5adwy. waen4i waer2 wag1 w1ai w3ai. w3aid w2air w3ais w4ait wallt5 w4an. wan3a wan3e wan3o war5ddr war3e war4edd war5ia warth4 wart5hai wart5has wart5hi wart5hw war3w 3w4as. w3ase was4g w3asi w3aso w4as4t w3asw wat5er w1au 2wb wbl5es w2c 2wca wc4ed wch1 4wchu 2wci wc5wll wc4yn 2wd wdd3eg w5ddew wd2e wd3ed wde3n4a wde5n4e wd3i wd4ih wd3ly w3dod. wdr1 wd4ra wdry4 wd2u w1eb3 2w1ec 2w3ed. w4eda 4weddf 4weddi 4wedi w3edig we4gi wegr4 wein3 well5ti wel3o welw5l 2w1em wen3au wen4d 2w3ent wenwyn5 wen3y 2w3er. wer4i wer5id w4ers wer4yd 2wes 4w3esi w4esir w4esit 5west. west4ai w1et w4eth 2weu weu2g weun3 2wf2 w1fa w1fe wff3a w1fi wf4id w1fo wfor2 w1fw wf4wy w3fy wg1 2wg. w5gig. 2wgl wg3n 2w1h2 w3he w3hw 2wi wi4an wib5an wibl5a wib5ol widl3 wi4fr 3wig1 wigl5e wil3 win5gada win5gade win5gadi win5gado w4ione wir3 wisg3 w1it 3wiw. wiw4e 2wl 3wlad. wlan3 wl4co wl3in w4lip wll5yn wl5ws. wl4yc 2wm wm3a wman3 wm4br wm2i wm5iai wm5ian wm4wl wn1 wn5adwy. wn2ae 2wnd wn3de wn3di wndr3 wn4ei wn4êl 2wn3g wngl4 wn3in wn3l wn2o w4n3oc wn3odd wn3og wn3ol w4n3om w4n3on 2wnw 2w1o w2od w3od. w3odd w2ol w3ol. w3olae w2or 2wp wp3e wpl1 wp5wrd wr5aet wrb5yn wrc2 wr3ca wr4ce wr4ch3 wr4ci wr5cwd 2wrd wr5dei wr3ed wreig3 wr5esi wr3f wr5fau wr4fi 4wri. wrid3 wr3id. wr3ie wr3l wr4ll wr3n2a wrn4es wr3no wr1o wr2t wrth3 wr1w wr4ws w5rwydd wry4w ws5bre ws3e ws3g ws4gl ws4ig ws4og ws4ta wst5an ws5ter. wstr3 ws4us ws3wa 2wt wt3a wtan3 wt3em wt5ery wth1 4wth. wth3w wt3od wt3wy wt3y 2w1w 2wya wy5alc 4wybr wybr5y wy3bu w1yc wych3 wyd3a 2wydd wydd4ly wydd4yd wydr3o 2wydy 2wye wy3fr wy3h 2wyi 2wyl wyl4deb wyll3a wyn5ad. 4wynd wyn3eg wyn3f wyn3g4 wy4ni wyn3o wyn3y 2wyo wyr3ad wy3ran 5wyrdd. wyrl3i 2wys 2wyt 2wyw wy3wr wy3wy 2wyy 2y1a y3ar3 y4ar. y4arn 2yb yb4ac yb5edd yber4 ybl1 yb3ly ybr1 ybr3i yb3w ych1 ychan5 ych4anwr ych5ei ych3r 4ychwe ych3wy ychwy5na ychwy5ne ycl3 2yd. 2yda yd3ad yd4al yd2an3 y3dana y3dane yd3ant y5danw y3dar yd3as yd3au ydd3 ydd5an yd4de yd4df4 yd4di4 ydd4in. ydd4of ydd5yn. yddy5ne ydd4ysg 2yde y3deb yd3ed yd4eddau yd3ei yd3er yd4eu yd5ffu ydfwr3 ydfyn3 yd3i yd1l yd4ma yd2ne ydne5b 2yd3o yd4od. ydol3 yd4os 4ydrau ydr3ec ydr3em ydr5esid yd3rew yd4ri 4ydria ydr3oc 4ydrol ydr5wyd. yd5rwydd 4ydry ydr3yc 2ydw yd3wa yd5wed ydweithi5ol ydwel5e yd3wr yd1y ydy4l y1e y3el y4era y4ern 2yf1 y4f3ag yf3ai yfan3t yf3are yf3arh yfar5wa yf3eda yf3ede yf3edi yf3edo yf3edw yf3ei yfel3 yf5erf yfer3n yf5esi yf5ewi yff1 yf4fa yf5fait yf5fei y4ff3i yff5in y4ffl yffr3a yffro5ed yffro5em yffro5en yffro5wc yffr3w yff3ry yf3i yfl4ed yflo3e yf3ne yf3no yf3ny yf3o yf5od. yfogl4 yf5rait yfra5ne yf5ryw yf3u yf5wng yf3yg yf5yn. yfy3na yfy5ne yfyng5 yf4yt yg1 yg3a yg5adu yg4ar ygeg4 yg4eid yg3i yg4il 3ygin ygl3a ygl3o ygl3w ygl3y ygn3 yg3o yg4oe yg4of ygr1 ygrad4 yg5wyd y4gyc 4ygyd y1h2 y2he yhe3i yhe3w y1i y3ie yl3ad. yl5adwy. yl3af ylan3 yl3ant y5law. 2ylc ylch3w yl4dera yl1e yl1f y3lin y4lit yll5ad. yll3e 4yllf yll5ida yll3o yll3w yll3y yl5nos yl3oc yl3od yl3on yl5ore y4lu. 4ylwe yl3wy yl1y ym5ait ym4al ym5an. yman5t ymar5w ymbl2 ym5edr ym4eri ym5es3u 3ymg ym3heu ym2le ym2li ymlo5ne ym4oli ym3on ymp3a ym4pi ymp5od ym3pr ymra5ne ymr5ig ymro5e ym4ru ym3se ym4um 5ymwyb ym3y ymyn5y ym5yra ym5yre ym5yri ym5yro ym5yrw yn4ada yn3ae yn3af yn3ai yn3an3 ynas3 2yn3au yn4aw yn5byn ync5ed yn3dir yn4eb yn3ec yn3ed. yn3edd yn2eg yn3ei yn3em yn3en yn3er y3nesa y4nesau 2ynf ynfyd3 2yng1 yn4ge yng5er yn3gl yniaw4 yni4d yn3i4f y3nig yn5igy yn3il3 yn3n yn1o yn5o5ad yn5odd yn4odi yn4ody yn3oe yn3os4 2ynr ynt1 ynt4a yn4te yn4ti yn4to yn4tu yn4ud yn1w yn3wa yn2w4e yn3wy yn4wyr yn1y yn2yc ynydd5 y1o ypl3a ypl3e ypl3o ypl3w yp3ly yr3ae yr3af yra3na yra3ne yr3ant y4r3au yr4ch yrch3e yrch3o yrch3w yrch3y yr4dd3 yr5ddyd yr1e yr2ei yr5el. yren5d yrf3e yr3ff4 yr4fu yrf5yd y4ria yr3id yr2l yr3ly yrn3 yr1o yr5ol. yr2s yr1w yr5way yr1y 2ysa ys3aw 2ysb ysb5ïw ys4bl ysb3yd 2yse ys5etl 2ysf 4ysgar. ys5garai ys5garasa ys5garia ys5garwy ysge4 ysgl4e ysg5lw ys4gn 3ysgr ys4gy 2ysi ys5ni. 2yso ys3od 4ysol ys5ol. ys3ta 4yste yst5eb ys5ted ys3ter ys4try yst4w ys3u 2ysw ys4we ys4wi 2ys3y ys4yg yt3ad yt1e yth3a yth3e ythi3e yth3l yth3o yth4re ythr5ec ythr5ed ythr5es yth5reu ythr3o yth5rwb ythr5yc yth5ur yth3w yth3yn yt5iro yt3o ytr2 yt3ras yt3s ytw5ad yt3wy yt5ysa 2yw yw4ae y3wait y1wc y3wedd y5weddia yw5eg. y4wel yw5en. yw3es yw1g2 y4wia yw3id y4wio y4wir. y1wn yw3ol y2wr1 ywr4a ywr5ain y4wyc y3wyf ywy3na ywy5ne y1y", ["length"]=43099, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=6728, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-zh.hyp0000644000175000017500000000017112161703335024701 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-zh.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-de.lua0000644000175000017500000030562012161703335024640 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="de", ["source"]="hyph-de-1996", ["texcomment"]="% German hyphenation patterns (reformed orthography)\ % \ % (more info about the licence to be added later)\ % \ % dehyphn-x-2013-05-26.pat\ % \ % \\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2013-05-26 (WL)}\ % \ % TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung\ %\ %\ % Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 Werner Lemberg \ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ %\ %\ % The word list is available from\ %\ % http://repo.or.cz/w/wortliste.git?a=commit;h=6e4755b1055a5983ccf6929793a90d2fdfa4a203\ %\ % The used patgen parameters are\ %\ % 1 1 | 2 5 | 1 1 1\ % 2 2 | 2 5 | 1 2 1\ % 3 3 | 2 6 | 1 1 1\ % 4 4 | 2 6 | 1 4 1\ % 5 5 | 2 7 | 1 1 1\ % 6 6 | 2 7 | 1 6 1\ % 7 7 | 2 13 | 1 4 1\ % 8 8 | 2 13 | 1 8 1\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíñóôöü", ["data"]=".ab1a .abi4 .ab3l .abo2 .ab3ol .ab1or .ack2 .ag4n .ag4r .ag2u .ai2s .akt2a .al2e .al5l4en .al4tei .alt3s .ampe4 .amt2s .amt4sc .an3d2 .anden6k .and4ri .ang2 .an3gli .angs4 .angst3 .an3s .an4si. .ans2p .ans2t .an4tag .an3th .an3z2 .apo1 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .ar6t5erh .as3t .as4ta .at4h .au3d .au4f3 .au4s3 .ausch3 .ax4 .äm3 .är6schl .ät2s .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .by4t .ch2 .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .de1s .des2e .de3sk .des2t .dien4e .do2mo .do1pe .dorf1 .dü1b .dys1 .ebe2r1 .ehe1i .ei3e2 .ei4na .einen6g .ei2sp .ei4st .ei4tr .eke2 .el2bi .elb3s .em3m2 .en1 .en4d3er .en5der. .en2d3r .end3s .en2gl .enn2 .enns3 .en2t3 .en4tei .en4tr .er8brecht .erb3s .er2bu .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .er8stein .erster6 .er8stritt. .er8stritten. .er4zen4 .esel4s .es1p .es3ta .es5t4e .est2h .es3to .es5tr .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fi3est .fi4le. .fi4len .fi2s .flug1 .for2t .fs4 .fu2sc .ga4t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .gene7cke .ge3r2a .ge3r2e .ge3u .gs4 .guss1 .hau2t1 .he2 .her3an .he3ri .he6r5inn .hi2s .ho4met .ia4 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4tu .li4ve. .lo4g3in .lo3ver .lus4tr .ma3d .ma3la .mal4e .ma2st .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi4t1 .mm2 .näs1c .ne4s .ni4e .nob4 .no4th .nus2 .oa3 .ob1a .obe2 .oper4 .or2a .ort2 .orts3e .os5t6alg .oste2 .ost5end .os8ten8de .oste6re .ost3r .ozo4 .öd2 .pa4r1e .par3t4h .pe4c .pes4te .pf4 .ph2 .poka2 .pro1 .ps2 .rabe4 .ra3me .ram3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .res6tr .ri2as .rich5te .ro4a .ro3m2a .rö2s1 .rü1b .rü6cker6 .sali3e .sch4 .se3ck .sen3s .ser2u .se2t1 .sha2 .si4te .ski1e .spiege8lei .st6 .sto4re .sucher6 .tage4s .tan4k3l .ta2to .te2e .te2f .te3no .te2s .te4st .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .ti5ta .to4nin .to4pl .to2w .tri3es .tro2s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .un3g .uni4t .un3s .uns4t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .wei4ta .wi4e .wor2 .wort5en6 .wor8tend .wor4tu .xe3 .ya4l .za2s .zi2e .zin4st .zwe2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k aar5sc aas5t aata2 aa2th aa2t3r aat4s3 2a3au a1ä a1b 2aba ab4am ab1auf ab1ä ab2äu 1abd ab1eb abe1e abei1 ab1eil 2abel abe2la2 a3ber ab1er2k ab1er2r ab1er2z ab3esse 2abet 2abew 1abf 3abfi 1abg 1abh 2abi a3bil ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu 1abn a2bo. ab2of 1a2bon 2a3bor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abst2 2abst. ab3ste ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby aby4t 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in 2ack. a1ckar a2ckin ack2se ack3sl ack3sta4 a1cl acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ade1s ade3s2p ades4s ade5str 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3st ad3sz ad2t1 adta2 ad4te ad4tr 2adu 2a1e ae2b ae2c ae2d a2ek a2ela a2ele ae2o3 ae2p ae1r 3a2er2o1 ae2s ae4sc aes5t a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l afo1s a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r af4t5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ag3esse age4s3ti ag3gl 3aggr 3a2git 2a2gl ag6la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3s2ah ag4sam ag4set ags3p ag4spo ag3sta ag3ste ags4toc 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh ahe1s a1h2i ahin3 ahl3a2 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1os a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr6tri 2ahs ah2ta aht3h ah4t5r aht3s a1hu ah1w a1hy ai3a aian3 aid2s ai1e2 aien3 aif4 ai1fr ai3g4 a3ik. ai3ke ai3k4r a2il ai2lo aim2o ain4a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e ait4 a3iv. a3ivl a3ivs a1j aje2 ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr 4akra ak3rau 3akro 2aks ak3sh 2akta ak5tan 2aktb 2aktik ak2t3r ak5t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2ala. al1ab al3abs ala5ch2 al1af ala2g al1age a3lal al1am al3ame alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala4s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr alds2t 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 2ali ali4ene ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 alks4t al2l1a2b al2l3a4r al2l1au al3lend all5erfa al3les 1allgä alli5er. alli7ers. al2lob al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1ope al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al5s6terb al3sun al4tak al3tam al3tar alt3eig al4t3erf al3ti alt1op al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä 2am4e 4ame. a2meb ame2n1 amer2a am5erf a2meri ame3ru a4mesh a3met a2mew 2amf a3mi. a3mie 2a3mir a3mis ami3ta ami3ti 2amk 2aml 4amm. 2ammal am2mar am2mei am2min 2amml 2ammt ammu2 a2mö amp2fa2 am3pr 2am2s am3sa am4schl am3str 1amt. am2t1a am2t1ä am4tel 2amtem am4t3ern am4tö am2t3r am4tre am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2ana1s4 an4at an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande2s an2dex an4drau an2d3rü and4sas and6spas and3ste and2su 2andu and1ur 2ane an3e2c a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang4s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 2anpr 1anr 1an3s2ä 1ansc ans2en an2seu 2ansk an3skr an3s1pa 1anspr an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr an3ti 2anto 1antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2apa 2ape a2pef a3pel a2pé a2pf a3p2fa a3pfl a3phä a2ph3t 2ap3l ap2n a2pot ap2pf 3appl ap3pu 2apr 3apri 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3rali 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein a4rek 4arem a3ren 4aren. aren4se are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2ari ar2ia ari3e4n ari3erd ari3erg ar1im arin3it arin5s4 ar1int a3riu ar2kal ark3amt ar2k1ar ark3aue ar2kl ar4k3lag ar2kor ar4k3ri ark3sa ark3she ark4tre ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arp 2arr ar2r3ad arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar2st ar3sta ar3t2e ar2the ar3ti artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as1ala as3au a2s1ä a2sca a4schec a3schi asch1l a2schm a3schu 4as2e a2seb a2s3e2m a3s4es 4ash a3s2hi asin2g 4asis aska3s a3skop a2s1o2f as1or a2sö a2s1p as2ph as2pi as2po a3spu as3s2a as3s2e as4s3ei as3s2i as2s1p as2st ass3ti as3str as3stu 2as3ta a1s4tas as4tau as3te as2th as3ti as3to as4tof 2astr as4trau ast3räu as6t3re a2sü aswa2s 3a2syl a1ß aße2 aßen3 2a1t ata1 at1ab at2af at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c a2teb a3tec ateien4 at1eig a2teli at2en a2tep ater3s2 ate2ru at2h at3ha 4athe1 3athl 4a3ti atil4s ati2st 3atm 4atmus ato4man 4ator a2t1ort at1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si at2so at2s1p at3ta 3attac at4tak att3ang at4tau at2tä at2tei at3t4hä at2t3rä att3s a3tub atu2n a3tü atz1er at4zerk at4zerw at2z1in at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au2ere au5erein aue2s au2fa auf1an 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s6 4aun au3n4a aun2e au4nei au2nio au1nu a4unz au1o 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 3ausf 1ausg 1ausl au2so au2spr 1ausr 3aussag auss2e aus4se. auss2t 2auste aust2o aus5tri 1ausü 1ausz 2aut. au2t1äu 2aute au4ten4g au4t3erh 1auto 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4avi a2vr 2a1w awi3e a1x ax4am ax2e 2a1ya a1yeu ays4 aysi1 ay3t 2a1z a3z2a aza3d az2o az2u ä1a äand4 ä1b ä2b3l äb2s ä1che äche1e ä1chi äch3l ä2chr äch2sp äch4st ä1chu ä1ck ä3ck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf2s äft4s3 ä1g äge1i äge2ra äge3s ä2g3l äg2n ä2g3r äg4ra äg3str 1ä2gy äh1a 2ä3he ä3hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2ähs 2äh3t ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl 2äle äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 äne1s än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änk2s änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c äp4st 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l ärk2s är4ment ärm2s är1o2 ä1rö ärse2 är4si är2st ärt4e är2th ärt2s3 ä2rü är2zw ä5s4e äse3g2 äser4ei äse4ren äser2i äse3t äskop2 äskopf3 ä3s2kr ä2s1p äs6s1c äss2e äs4s3erk äs2s3t ä4s3t2 äs4tr ä3su ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ät2h ät1ob ä2t3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l ät2s1p ät2s3t ät2tei ät4tr ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äug3l 4äul 2äum äu2ma äum4s5 ä2un äun2e äu1nu 2äur 2ä3us. äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äus2s1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs4 b1a2dr 2b1af 3bah bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4l3eh bal6lerg 2b3am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en bar3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2st ba4t3ent bauer4l bauer4s bau3g bau1s bau3s2k bau3sp baus4t ba1yo 3b2ä1c b2är b2äs 4b1b b3be bben3 bbens2 bbe4p bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 bde1s 1be. 3bea be3an be3ar 3beb b2ebe 1be1c be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime b2ein be1ind be1in2h bei3sc beis2e bei1s4t beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la be2l3ö bel3sz bel3t4 1bem 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 2bentb b2enti ben5t4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss ber3na b1ernt be1rop ber3st4a be3rum ber2zö 3be1s bes2a be2s1er be3slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol best4r be3s4ze 3bet be2tap be3tha be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 2b1g2 bge3 bges4 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bien3s bie2s bik2a bi2ke. bi2kes bil2a bi2lau 2b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis2s1c bi2s5t b2it. b2it2a b2ite bi3ti bi2tu b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7sc 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig bling4 b4lis b2lit 3blitz b2lo b4loc b3los 2blun 3blut 3blü 2b1m 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo2c bo3ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig bor2s b1ort bor2t3r bo2sc bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra1st4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü 4b1s b2s1ad b3sand bs3ar bsat2 b3sä b4sär bs2äu b5sc bs2ca bsch2 b6schan b6schef bs4cu b3se. bse2b b3sel. bse2n1 b4s1erf bs3e4r3in bs1erk b4s1ers b3s2es bsi4t bs2ku b4sl b2s1of bso2r b2sö b3s2pi bs2pl b3s2pu bss2 bs2t bst1a2b bst3ac bst1ak bs3tät bst1er b2stip b3sto b4s4tob b4stod b3stö b4strac b2s3trä bs3treu bs4tri bst3ro b3stü b4stüb b2s1un 4b3t btast3r b5te b4th btil4 bt4r b4ts2 btü1 bu2chi bu2e3 bu2f bul2la 2b3umk bunde4s bung4 b3ungn b2urg bu3r4i 2burn bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu2s1u bü1c bügel3e 2b1v 2b1w by1 by3p bys2 2b1z2 bzeit1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t 3cam c4an ca2pe 3car car3n carri1 ca3s2a3 cas3t ca3t4h ca1y2 cä3 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen 1cer cere3 ce3s2h 1cet 2ceta2 ce1u 1cé 2c1f c4h 4ch. 2chab ch3a2bi cha2ck 2chaf 2ch1ak ch2anb 3chanc ch1ang ch3anst 4chanz 1chao 4char. 1chara 3charta cha2sc 3chato 4chatu ch1ärm ch1äs 1châ 2chb 2chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefi 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia 2chic chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 4chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 4chre chre3s ch3rh 1chron 4chs chst3ri 2cht 2chuf 2chuh 2chum 2ch1unf 2chunt 4chü 2chv 4chw 1chy 2chz ci1c ci1es ci2s c1j c4k 4ck. ck1a 1cka. 2ckac 2ckal 2ck3an cka4r1 2ckau ck1ä 2ckb 2ckc 2ckd 1cke 4ckeff 2ckeh ck1ehe 4ck1ei 4ckense 4ckentw cke2ra ck2ere 6ckergeb ck1erh 4ckerhö 4ckerke ck2ern 2ckero 2ck1err 2ckerz 2ck1ese 2ckex 2ckf 2ckg 2ckh 1cki 2ck1id ck1im ck1in 3ckis 2ckk 2ck3l 2ckm 2ck3n ck1o2 2ckp 2ck3r 4cks ck4stro 2ckt ckt2e ck3t2i 1cku 2ck1um3 2ckunt 2ck1up 2ckv 2ckw 1cky 2ckz c4l2 cle4a clet4 clo1 1clu c2m2 3co co2c co3ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cos3t co4te cô4 2cp 2c1q 1c4r2 cre2 cre4mes cry2 2cs cs2a c2si c1s4tr 4c1t cte3e c3ti2 cti4o ctur6 3cu cu2p3 cussi4 1cy 2c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho dach1s 4d3achse d1af d1ag dagi2 dah3l da1ho 3dai da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d4amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ar3s d1art 2dart. da2ru d2arw d1arz da1s dasch2 da3s2h das4t 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus3 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c 2dc d1ch dco4r 2d1d2 ddar2 d3dä d3dh d5do 1de de2ad de3a2t de3b4 2d1e4ben 3de1c de4ca. de2cka de3e4 2d1eff deg2 de3gl dehe2 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2delek 2delem 2delfm delle2 del4l3eb del4lei de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del5ster del3t4 dem2ar 2d1emp d2en. dend2 de4n3end 4denerg d2enh de2ni den4k3li den2kn 4den4sem den4sen den6s5tau den3th 2dentw de1nu 2deol de1on depi2 d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t d4erfi d2erh 4der4höh 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop 4der4sat der4spa der3tau der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum des1 d2es. de2sa desa4g de4sam des2äc de2seb de4seh de2sei des3elt de2sen1 de4set de2sin de2sor de2sp des3s2 dest5alt de2sto dest5rat de4stre des4tum de2su det2 deten4t 2d1etw de1un de1url de3us d1exi de2xis 2dexp 2d1f4 2d1g2 dga2 d2ge. dge4t1e 2d1h2 dha1s4 d2his 1di di4ab di2ad di4am 3dic di1ce di2e di3e2d die4neb di3eni di3ens. die2s3c diet3 die2th dige4s dik2a dil2s5 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion3s di1p di4re. di2ren di2ris 2d1irl di2sp di3s4per 2d1isr dist2 di2ste di2ta di4teng di4t3erl di4t3erm di4t3ers di2th di4t3r dit3s di2tu di5v di3z2 2d1j 2d1k4 4d1l2 d3la d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 d1ob d2oba 2dobe dob4l d2obr 2d1o2f dole4 doll2a do2mar do5na donau1 doni1e do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta dor4ter d2os. dos3s dost1 dot6h do3un d1ö dö2d dö2l1 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad drag4 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4ril d4rin. 3d4risc 3d4rit 4dritu d3rob d3roc 2d3rod d4roi 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh drunge3 2d5rut drü1b drü5cke 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse4t d4s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pas d2spä ds2po d3spri d2spro ds2pu dss4 dst4 d4stabe d4stag ds3tauf d4s3täti d2ste d4stea d3stei d3stell d4stem d3s4tern ds2ti ds4til ds4tip ds2tu ds1ums d2sun ds2zen 2d1t dta2d d5tea d2th d4thei dt3ho dto2 d3tö dt3r dtran2 dt5s2 d3tü 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf dung4 2d1ungl dun3ke dun2kl 2dunr dun2s dunst3r 2dunt 2dunw du1o dur2 5durc 2d1url 2dursa du4schn du4schr du4schw dus3t 2düb 2d1v2 2d1w dwa2 dwest1 dy2s 2d3z2 2e1a e3a2b eab3l ea2c ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei e4aler. e2alti2 eam3 eam1o ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas3s eat4e2 eater1 e3ath ea5tr eat3s2 e3at5t4 e3au2f e3aug eau1st e3ä2 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en ebens3e eben4sp ebe4rel ebert4 2ebet 2ebl eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebot2 ebö2s 2ebr eb3rei eb4ru eb2s1 eb6sche ebse2 ebs3pa eb3sta eb4stät ebs3tem ebs3t2h eb3str 2e3bu ebu2t1 2e3ca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a e1cka eck3se eck4sta 2eckt 2e1cl 2eco eco3d e3cr ec1s 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e edens1 eden4se eden4sp ede2r eder3t2 edi4al 2edip e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho ee2ck eede3 eed3s2 ee1e e1eff eef4l eef3s eeg2 e1ei ee1im eein4se eel2e ee2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere2s ee4ret ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ee3s2 ees3k ee3ta ee4tat ee2th ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e3fen. e2fent ef2er 2eff. 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g egas3 eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4str ege1u e2glo e2glu e2gn eg3ni eg4sal eg4se4r1 eg4sto eg2th egung4 egus3 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä e1he eh4ec eh1eff eh2el ehe5na ehen6t3 1e2hep e3her ehe1ra ehe3str e1hi eh1int eh1lam eh1lä eh3le ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se ehls2t 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1e2c eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of ehs2 eh3sh eh3sp eh1ste 2eht e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3err 2eidn ei3dra ei1e ei3el 4ei3en3 eienge4 eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 eil3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom einn2 1einna ei2n1o2 e4insa 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei4s3erw eis2pe eis4tel eis4th ei1sto ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek5tri ek2u e3k2w e1la ela4ben el3abi el2abt ela2c el3ader el1af ela2h e2l1ak el3al e2l3a2m el4ami el4amp e6landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a2r el3ari ela4s el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 elea2 ele2c 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh 1elek e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e4ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r 2eli e2l1id e3lie e2lim eli2ne el1ita 2elk elk3s2c el3lan el3le el5le. ell3ein ell3eis el2lim el3lin ell3sp 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri elö2s el2sum 3eltern elto2 elt3r elt3s2k elts2p 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2m1ans 3emanz e3mäs em4d3a2 e3m2en emen4t3h e6mentsp e2m1erw eme2s 1e2meti e2m1im emi5n2a em1int emi3ti 2emm emma3u em2m1ei e2mop 3empf4 em3pfl em2sa em2spr em2st em3t2 3emul 2emü e2n1a 4ena. 2ena2c en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en4ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när en4ce. en3d2ac en2dal en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1e2c e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e4n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r enost3 e3not eno2w 2e1nö en1ö2d en3sac en2sau en5sche en2seb ens2el 3ensem ensen1 en2sep en4seta en3ska en3sp ens2po enst5alt en4s3tät ens2th 2ensto e4nt ent4ag ent4ark 1entd en2teb en4terb 1entf 2entfo 1entga en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü enü1st 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eo1s2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a4si er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1äs erb2e er3br erb4sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in erd3erw 4ere. er1eb e3rech er3echs er1e2ck er1edi ere4dit er1eff e2r1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3r2em 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh e4rerl 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess ere4t er3eti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3el4s3 1ergol 4ergrem erg3s ergs4t e2rh 1erhab 4erhals er3he 4erhöhe er3hu 4erhü 2eri e2riat e3rib 4e3ric er1i2de 4e3rie eri3e4n3 e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row e1roz erö2d 2erök er1ös er3p4 er3rä 2errü ers2a ersch2 er3se ers2i er3sk er3smo er3sn er3sp er5stel er3sz ert2ak er6terei er4t3erf er4terh er4ters er2tho 4er3ti ert3ins erts2e 2ertür 2eru eruf4s er1u2m er1und erung4 er1uns er3uz erü4b 3erweck es3ab e3sac e2s1a2d es3ak es3anz e3s2as e4s3ato 2esb es2c es3cap e3sce esch2 e3scha e2s3ein es2el es3eva 2esf 4esh es2har es2id esi1er e2sil es3int es2ir es2kat e4ske es3kl es3ku e4sky es3l es4log 2esm es2ort e3sot es2ö 2esp e3s2pek e3spi e3s2por e3s4pra 2esr es2sau es3sc es3se 4essem ess4e3re ess3erg 2esso es2sof es2s1pa es2spu es3str es3stu estab4b es4t1ak e1star e4starb 1e2stas e1stat e1s2tec e3stel es4t3eng es4t3erh es4t3ess e1stil e2stip estmo6de est3ori e1str es4tri es3trop e1stu e1s4tü e2s1um es3ums es3w e3sy es3z e1ß eße3r2e e1t etab4 et1am 3etap et4at et1äh e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of etons4 e2torg e3tö 2etr e4traum e6t3rec e2tres et4rig etsch3w ets2p et3su ett1a et2tab et2tad et2t3au et2tei ette4n1 et2th et2t3r et4tro ett3sz et4t1um e3tü etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif eu2esc 2euf eu2ga eu4gent eu3g2er eugs4 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eum4sc eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu3p2 e2u3r2e 1euro eu3sp eust4 eu1sta eu1sto eu1str 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo e1w 2ewa e3wä ewä2s 2ewe e2we. ewinde3 e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey1 ey4n eys4 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p ê4t 1fa fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl fal6l5er6k fal6scha fal6schl fal6schm fal3te f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br farb3s 2f3arc 3fari farr3s f3art 2f3arz fa3s4a fa3sh f3at fa2to 2f1auf f3aug f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 fe2c f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1eis fek2ta fe2l1a fel4da fel2dr 2fe2lek fe2l1er fe2les fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fenst2 f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. f2ert f1erw fe2st fest1a fest3ei 2f1eta fe4tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ff3ar ff4art ff1au ff2e ffe2e f2f3ef ff3ei ffe1in ffe2m f2f3emi ff4en f2fex fff4 ff3li f3flu f3flü f3f4rä ff2s ffs3t 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fid2 fien3 fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni fin2s fin3sp 2f1int fi2o fi3ol fi2r fi3ra 3fis fis2a fisch3o fisch3w fis2p fi2st fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger f4lü f5lüm 2f1m2 fma2d 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin 3form for4m3a4g forni7er. for4st for4t3ei for2th for2t3r for3tu 2f1o2x 1fö 2fö2f 2f1ök 2f1öl för2s 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad f1rah fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein4 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc f3roc 1f4ron fro2na fro2s f3rot f3ru f3rü 4f1s fs1all fs4amm f2san fs3ar f2s1as f2sauf f2saus f2saut f3sc f4sce f4schan f4schef fs4co fs1e2b f4s1ehr f2s1em f2s1ent f2s1er fse4t f4s1eta f3si f2si2d f3s2kie f2s1o2 f3span f2s1pas fs1pen f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 fs2t f2stas f4s3täti f3stei f3s4tel f3stern fs3th f2stip f3st4r f4s3tres f3stü f4s3tüte f2s1un f3sy 4f1t f4ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f4t1ent f4t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f3tö f2t3ro f2trö f3t4ru ft2s1 ftsa4g ft4sam ft3s2c ft4sche ftse4 ft4seh fts3el ft3st ft4s3tan ft4s3tä fts2ti ft4stri f2tum ft1url f3tü ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf fung4 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2sa fus2s1p fus2st fu2ß1er 3fut 1fü 2füb fü2r 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1c 2gadl 2ga2dr ga1fl ga3ge 5gai ga1k ga2ka gal2a 2g1a2lau g1amb g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2sa gas3ei ga2si ga2sor ga3sp ga4spe ga4spr gas3s gas4ta gas5tan ga4ste gas4t3el gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs5 gä4u 2g1b2 gber2 gbi2 gby4t 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is 2g1eise2 gei3sh 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2ge4lek geler3ö ge4l3ers ge4less gell2a ge3lor gel3sa gels2p gels2t gel3ste gel3sz gel3t2a ge3lum ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe gen3n gen4sam gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer g2e1s2 ges3auf ges3elt ge2s3er ge3si ges4pi ges3s2t gest2 ge3ste ge4s3ter ges3th ge3t2a 2getap ge5tr ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga4t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gie3g gi2e1i gi2el gien2e1 gie1st gift5s gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi3tu gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland 3g2laub 4g1lauf 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu 2g3luf 2glun 4glus g2lu2t g1lüg g2ly 2g1m2 g1n 2gn. g2n2a g4na. 2gnac 4gnah g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no gno1r g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s1 go3st go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs1c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 2g3rose gros6sel gro4u 2gröh g4ruf 2g3rui 2g3rum 3g4rup 2grut 2g3rüc 3g4rün 4g2s1 gsa2d g4s3a2k g3sal gs3all g4salt gs3ama gs3an gs3ar g3s2c g4sca g4s3ce gsch4 g4schef g4sco g4s3cr gse2 gse3e gs2eh g3s2eil g3sel. gs3eli g3seln gsen1 gs3er gs5erk gse4t g4seta gsi2d g3sil g4s3l gso2 gsp4 g3s2pek g3spi gs4pie g4spin gs3pl g3s2por g4spru gsrat4 gsrü2 gs5s4 gs3ta g3s4tan g3s4tar g3s4tati g4s3tä g5stäm g3stel gst3ent gst3err g1steu gst2he g3stir g3sto gs3toc g4stol gs3top g4s3tor g3stö gs3tr gst4ra g3s4tras gs4trat gst5reit gst4ri gs4t5rit gs4t3ros g3stu g4stur gs3tü g4sw g3sy 2g1t g3te g3ti gti2m gt4r gt2s g3tü 1gu gu1an. gu1ant gu1as gu1c gu4d3r gu2e 2gued guet4 2g1u2f 2g1uh gu1ins gu1is 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2un4s 2gunt2 2g1url gurt3s gu2s3a guschi5 gus4ser gus2sp gus2st gu4st gu2t gut1a gu4ted gu4t3erh gut3h 2güb gür1 güs3 2g1v 2g1w 2g3z2 3haa hab2a hab2e ha2cho ha2del ha4din h1adle haf3f4l haft4s3p h1ah 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal2la hal6lerf h1alp hal2st hal4t5r h1amt h2an. 2hanb h2and han2da hand3s han2kr h4ann 2hanr 2hant h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 hat5t2 hau5f6lie 2h1aufm h1aukt hau2sa hau2sc hau4spa hau5stei hau6terk 2hauto hau2tr h1äff h1ärz hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad he3be he4b1ei he2bl he3br he5ch2e he1cho h3echt he3cke hed2g he3di he2e3l hee4s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1ist heit4s3 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hel4l3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä hend2s he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk henst2 hen3str hen5tr h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b 2herap he3ras he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm he3ro he4r3o4b h1erö hert2 her3th her2z1w he1sta he2s5tr he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x4a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 2hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hiers2 hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin3s2 hin4t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro his2a hi2se hi2st hi1th hi3ti 2hiu 2h1j 2h1k4 2hl hl2ag hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös hl2ser hl3sku hl3slo hlst4 hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s hm3sa hms1p h2mu 2hn h2na hna2c h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stras h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hnsuch4 hn3ti hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2ch3 ho2cka ho6ckerl hock3t 2hod hoe2 ho2ef ho2fa hof3fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hol3s h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo ho1ra hor3d 2h1org ho4sei ho3sl ho2sp ho4st 2hot. ho3th hotli4 2hots2 3hov 2ho2w1 h1o2x ho1y2 1h2ö hö2c hö3ck h4ör hö2s1 h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3r2en h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h5rerlag h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3schl hr2s1en hr2ser hr4set hr4s1in hrs3k hr4s1of hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se h3ruh hr1ums h3rü h4rüb h2ry hrz2 4hs h4s3acht h2s1a2d h4samt h2san h2sau h2s1äh h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2spel h2sper h2sph hs2por h2sprä h2spro hss2 h1sta h2staf hst3alt hst2an h2s3tau h1stec h3stein h5stell h3s4terb hst2he h1s2ti h1sto h2stor h1s4tr hst3ran h1stun h1stü h2s1u hs2ung 4h1t ht1a h2tak h3t4akt. ht2al h4talo ht3alt h4t3a2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h4tax h2t1är ht1e2c h2t1ef ht1eh hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit h2temp h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1erh ht5erken h4terkl h6t5erleu h6terneu h4t3erre h6t5er6spa h4t3er4st ht6erste h2t1erz hte2s h4t1ese h4t1ess hte3sta h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in hto2 h2toly h2torg h3töp h4t3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h5trec h4tref ht3reif ht3reit ht4ri h4t5rieg h4t5rin h2t3rol h2t3ros ht3rös h2t3ru h2t3rü h4ts hts3an ht4s3end ht2so ht2sp ht4spin ht3spri ht4stab hts2ti hts4tie ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs h3tü ht3z2 hu2b1a hu2b3ei hu2b1en hu2b3l hu4b3r hu2bu hu1c hu2h1a hu2h1i huko1 huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu2ler hu2let hu2l1in hu2lo hu3m2a h1ums hu2n h1una hung4s hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus2sp hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 hüs3 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3all ial3la ia2lor ial3t4 ia2lu ial3z2 i2am i4amo 2ian ia2nal i3and2 ian2e i3ann i2ano i3ant i3anz i2ap ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a3sp ias3s iast4 i3at. i3a4ta i4ate i3at4h 1iatr i3ats i3au ia3un 2iav 2iä i1äm i1äp iär2 i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib2bli ib1ei i2beig i2beis ibela2 ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibu2s1 2ic ic1c ice1 ich1a ich1ä i1che ich1ei i1chi i2chin ich3l i3chlo ich3m i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci i3cke ick3sa i1cl i1d id2ab4 i3d2ac i3dam id2an i2d1au 1i2dee idein3 i4deis idel2ä ide3sa ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p id3str idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2ck ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g5l ie3g4n ie2g3r ie3g4ra ieg4s3c ieg4st i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i1ell ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä i3en3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm i3enn i3e2no i3enö i3enp i3enr ien2s ien3sc ien3s2e ien3si iens2k iens6t5er iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k2 i1ern i3ern. i2er5ni ie2rö ier4seh iers2t ier3sta ier3ste ier3te iesen3s4 ie2spu ies2sp ies2s3t ie1sta iest6e ie3su ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie4t1ö4 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fl iff4st if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if2s if3sa if3se if3sp if2ta ift3erk if2top if4t3ri ift3sp ifts2t ift3sz 2i1g iga3i i2g1ang ig1art iga1s4 i4gefar ige4na ige2ra ige3ran ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu i3g4no i3go ig4ra ig3rei ig3s2a ig4sal igsau4g ig3sä ig4se ig3so ig3spr ig3stei ig4sto ig4stö ig3str igs4tra ig4stre ig3s4tü igung4 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ihs2 i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2k1är 4ike i2k1ei ike2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 iko1s i2köl i2k3ra ik3rä ik3re iks2 ik3so ik3sz ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 6ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1e2c il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s3 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or il3t2h il3tr i1lu2 i2lum ilung4 i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2meg i2mej i2mek i2mele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im2mei im4m3ent 1immo 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2st im3sta 2imt imt3s2 imtu2 2imu in3a2c i4nack i2n1ad in2af in3am i3nap in2ars ina4s i2n3au in1äh in1äs in2dal in2dan in3dau 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng in3erbe i4nerbi in2erh iner4lö i4n3er4tr i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ing4sam ings3pr 1inhab 2inhar 2inhau 4inhe in2i3d i3nie 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn in3k2ü inma4le 2inn. in4n3erm 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or ino1s4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 in2seb 2insen ins3ert in3skan in3skr in4s3tät in3stel ins4tip in3su 1insuf in4s3um in3s2z 2inta 1integ int2h in3t4r in5tri int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o io1c io2d i2oda io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3ons3 ion4spi ion4stä i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en ipi2s i3p4l ipo6i5den ip2pf ip2pl ip3pu i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek 2i3ré ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron iro2s i1rö irpla4 irr2h ir4schl ir4schm ir4sch3w ir3sh ir2st irt2s3t 2iru iru2s1 i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i4schin i5sching i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat is2has isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is4s3che is4sper is2st is3sta is3sto iss3tr is3stu is2sum is3t is4tab ist3ac is5taf is4tam ist2an i1s4tat iste4n istes3 i1s4teu i1s4til is4toc is4tö is5tör ist4ra ist3re i1s4tü isum3p i2sü i1ß iß1ers it1ab. ital1a it1alt it1am it1an it2an. it3a4re it1art i3tat it1au i3tauc i4t1ax 4itä i2t1äs ität2 i2t1ei i4teig it2eil i4tein 2itel ite2la ite4n iten3s2 i4tepo i2tex i5thr i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn ition4 i6tl itmen2 i5toc i2t1of i3tö it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa its1a4g it2s1e4 its3er1 it2so it2s1pe it2sto it2teb it4tri itt2sp it1uh i2t1um i2tuns it1urg itut4 i3tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em i3xi ixt2 4i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l ja1c jah4rei jahr4s ja3l2a ja3ne jani1 jani3t4 ja1st 2jat je2a jean2s je1c je2g jek4ter jektor4 jek2tr je3na je2p je4s3t je2t1a je2t3h je2t3r jet3s2 jet3t je2t1u2 je3w ji2a jit3 ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung3s4 ju3ni jur2o jus3 jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kalo5 kal2tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg ka3ri kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw 3kas ka3se kasi1 kas3s ka2s3t ka3tan ka3t4h ka4t3r 2katt kau2f1o 4kaufr kauf4sp kaufs5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 2k1ärm kä2s1c käse3 2k3b2 kbo4n kbu2s kby4 2k3c 2k3d2 kdamp2 2k1e1c k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehr4s3o 2k1eic 2k1eig k1ein ke1in2d 2keinh kei1s 2k1eise keit2 ke2l1a ke3l2ag ke2lä kel3b4 2ke2lek ke2len ke2l1er 2ke3let kell4e kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kend4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5stei ken3sz k3enten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad ke1ral k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke4t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1c 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o3 kin3s 2k1inse 2k1int ki3or kio4s 3kir kis2p kis3s kist2 kis4to kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor 2klos. klost6 k2löt k1lu k2lud kluf2 k2lug klung4 k1lüc 2kly 2k1m k2n2 3knab k3ne k4nec k4nei 2knes kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol4a ko3le kol2k5 3kom ko4mu k2on ko3n2e kon3s4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n3a k2os ko2sp ko3ta kots2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k4ral k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron 2kruf krü1b 2k1s k4s1amt k2san ks4ana ks3ar k2sau k4s1äl ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw ks3ha k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu ks3s2 kst4 k2stal k4s3tanz k3stat4 ks2ti k2stor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktä3s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins ktion4 kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras k4tref kt4ro ktro1s kt3run kt3s2 kts4t ktt2 k2tuns k3tü kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 4kulp 2k3uml kum2s1 k2u3n2a kung4 kun4s4 kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e kuri4er ku2ro kur2sp kur2st ku4schl ku2sp kus3t ku2su 1kü kü1c kür4s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb 4l3aben 2labf 2labg 2labh 4l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3la3bu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a2dr 3ladu l1adv 2laf la2fa laf1r laf3s laf3t la2ga la2gio la2gn lago2 la2g1ob lag3s2e 2la1ho 1lai la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 5l2and lan2da2 land3ad lan4d3au lan6d5erw lan6d5erz lan2dr 2lanf lan2gl lang3s4 2lanhä l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po2 lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi lar3s 2l1ar3t l3arti la2ru la2sau 4lasd la3se 2lash 2lasi la2so 2lasp 3lasser last1o lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2t1a lat4tan lat4t3in lat2t3r 1laub. laub4se lau2fo 1laug l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lay1 lä1c 1läd 2läf 2l1ähn 2lämt 1länd lär2m1a l1ärz lä2s1c 4lät 2läub 2läuc 2läue 1läuf 1là 2l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb3si lb4sk lb3sp lbs6t lbst1e lb4sto lb2u l2b3uf lbzei2 2l1c l3che l5chen l3chi lch3l lch3n lch3r lch3ü lch1w l3cl 4l1d ld3a2b1 l3d2ac ld3a2ck l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a2r ld3ari l3das ld1au ld1är l3de. l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa ld3st ldt4 ld3th l2d1um 1le 3le. le2a le3an le3ar leben4s3 le2bl 2lec le2chi lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig l2ein. l2eind lein4du l2eine lei6nerb 4leink l2eint l2einu lei6schw leis6s5er l4eist lei4ßer l2eit lei2ta lei8t7er8sc lei5tri leit3s2 lekt2a 2lektr 3l2ela 2le2lek lel3s 3lemes le2m1o2 4lemp lem3s l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 4l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lepositi8 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k lers2t ler3t l4erwa 2lerwo 2l1erz l2erza les2am les2e 2l1esel le3ser le3sh lesi1 le3sk les2t leste3 le1sto 4lesw 2lesy le2tat 2le3th 2leto let4tu le2u 4leud 2leuro 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfang3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lg3re l3gro 2l1h2 l3he 3lhi. 1li 3lia li3ac li3ak li3ar lia1s li3b4 libi3 li1c li3chi 4lick li2cka lid2 li3da 2l1ido li4ds lid3sc l2ie 3lie. liebe4s li3ene lien3s lie2s3c lie2st 3lig lig4n li2gre li3ke li2kr lik2sp lik4ter li3l lil2a li3m2a 3limo 2limp li3n2a lin3al 2l1indu li2nef li2neh li2nep li2nes 2l1inf lings5 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2linst 2l1int l1inv 2linz li2o li4om li3os. li2p3a 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i4so li2sp liss2 lit2a li2tal li3te lit2h lit1s2 lit3sz li3tu 3liu liv2e 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lks3t lk4stä lk2ü 4l1l ll1abb lla4ben l2labt ll1akt l3l2al l2l1am ll3a2ma lla2n ll2anw ll1anz l3l2ap ll1arm ll3aug ll1aus l4lausf ll1äm llb4 llch4 ll3d4 ll1ech l2l1ef ll1eim ll2em l3len. lle4n3a llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll2es l2lex llf4 llg4 ll1imb ll1imp l2l1ind ll1ins llk4 ll3l2 ll5m lln2 ll1ob l2lobe l2l1of ll1opf l2l1o2r l3lor. l3lore l2l1ou l3low ll3sä ll3sh ll3s2k ll2spr ll5t4 llti2m llt5s2 llu2f ll1ur llus5t6 ll3z2 2l1m l3ma. l2m3a2b l2marc lm1art lm1äst lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins l2möl lm3p lmpf4 lms2t lm3ste lm3s2z lm3t 4ln lna4r ln3are lnd2 l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min lo2n1o lo2o 2lopf 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3lorq 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4ste los3t4r lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l3 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lp3t4 l3pu 2l1q 2l3r2 lrat4s lre1s lrut4 lrü1b 4l1s l3sac l2s1a2d l3s2al l4s1amb l4samt l2sang l2sann l2sanz l3sare l2sau ls2äm l4schin l4schmü l2s1e2b l2s1ec l2s1em ls1ere ls1erg l2serh ls1erl l2s1ers l2s1erw l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3s2 lst2a lstab6 ls4taf l4s3täti l2ste l3stec l3stei l3stel l4stem ls6terne ls6terns ls2tie l2stit ls4tr ls2tu ls1um l2sun lsu3s 4l1t l2tab ltag4 lt1ak lt1am l4t3ame lt3and lt1ang l4tarm lt1art l2t3ato l2t1au lt1eh lt1ein l2t1eis l4te4lem lt3eli lt2en l5ten. lten6gel lter3a lt2erg lt2erö l4t1e4sk lte2th l2t1eu l2th l3thas l4thei lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tör lt1ös l4t1öt ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l6ts lt2so lt4stab ltt2 lt1uh l2t1um ltu4ran ltu2ri l3tü lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lu4g3l lu2go lu2g3r lug3sa lug3sp lu2gu 2l1uh lu1id. lume2 2lumf 2lumk 2luml l2ump 2l1ums l1umw 1lu2n 2l1una 2l1unf lung4sc 2l1uni 2lunt 2lunw 4luo 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c luss3er lus6serf lus6serk lus6sers lus2s1o lus2s1p lus2s3t lus4stä 1lu4st lus4t1a lust3re lu2s1u lu2t1a lu2tä lut2ed lu4teg lu4t3erg lut1o2f lu2top lu4t3r lut5schl 3lux 2lüb 5lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1äp l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lz1w lz2wec 1ma m1ab m2abe 2mabk m2ab4r 2mabs 2mabt ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3le mal2er mali1e mal3lo 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann 2mansa 2mansä 2mansc 2mantw 2manz ma2or 2m1apf m2app 2marb mar3g2 ma3r2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m1arz 3mas ma3s2pa 4m1aspe massen3 mas4tel ma1s4tr 3maß ma2ta2b ma2tan mat4c ma2tel ma4t3erd ma5tri mat3se mat3sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 2m1änd m1ärg 3mäß mä3t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby4 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega1 3meh 2m1eif 2m1eig mei3l2 mein4da me1i4so 3meist me3lam me2lau 3meld me2lek me2ler melet4 2melf. mell2 mel2se mel5t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta men6tanz 2mentn 4m3entwi me1o 2meou 2meö 3m2er. me1ra me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes mes1a me2sal me4sä 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p mes2st meste2 me1sto 4mesu me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1c mi3da mie3dr mi2e1i mie3l mien3s mi2er mierer4 mi4et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che mild4s 4milz 2m1imp minde4s min2en min2eu min2ga ming3s4 mi3ni 3min2o mi1nu 3minz 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis2s1c mi2ste 3mit mi2ta mi2th mi2t1r mit3s2 mit5sa mi5tsu mi2t1u 4mitz 2m1j 4m1k4 m3ka mk5re. 4m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2m1ans mm1anz mm1art m2m1au mmd2 mm1ein mme4lin mme4na m4mentw mme2ra mme4rec mme2sa mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc mmi1s4t mm3p2 mmpf4 mm2s mm3si mm3sp mm3sta mm3str mm3te m2mum mm2un mmül2 mmüll1 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 3mom mom2e 3m2on mo3ne mo4n1er mon2s3 mon3su 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer morgen5s6 3mos mo3s4ta moster4 3mot mo3ti m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi m4p3lem. m2p3len m2p3les m3pon mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and m4sap ms1as m2sau m3sä m3sc msch2 m4sco m3se m4s1ef ms1erw m4sex ms1ini mso2r ms1ori m2spä m2sped ms2po m2spot m2spro ms2pu ms3s2 m4stag m3stel m3s2ti m3sto ms4tr ms5trä ms5tren m3s2tu ms4tü m2sü m3sy 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m4t1erg m2t1erl m2t1ers m2t1ert m4t1eta m2t1eu m2th mt3ho m3ti m4t1im m4t1ins m4tint mti2s mtmen2 m3tö m4töl mt1ös m2trö m4ts1 mt2sa mt2se mt3s2ka mt2spr mt4s3tät mtt2 mt1um mt1urt m3tü mt3z 1mu mu1a mu3cke 2m3uh 3mul mu3la 4muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f m4us 3mus. mu4s1a 3musc 3musi mu2s1o mu2sp mus3t mu2su mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül4len 3mün 3müt mütter3 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4 mwelt3 mwu1 1my my4s 2m1z 1na 3na. 2n1ab na2bä 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2ac na2ch1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3l2a nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly n4am. 3name na3me. n4amen namen4s3 4n3a2mer na3m4n 3namo 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3nat n4ata na3t4h 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 2n1ä2m 2n1än när4s5 n1ärz 3näs nä2sc n2äss 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbes4 nbu2s nby4 2n1c n3ce2n3 nch3m n2ck 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6läs nde4rob nder5ste nde2se ndi2a3 n2dob ndo2be ndo1c nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2drui n4d3run nd2sor nd2spr nd3th nd3ti ndt4r n2duns ndy3 1ne 3ne. ne2ap ne3at ne2bl 2n1ebn 2nec 3neca 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n4en. n2en3a4 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n1erk n2erli 2n1erlö ner4mit n2ern. 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz 3n2es n4es. ne3san nes4c ne3ska nes1o ne2s1p 4n3essi ne1sta nes3ti ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt4 n3far n3fi nfi4le. nf4l nf5lin nf2o nfo1s nf4r nf3s nf2tan nft2o nf2t3r nft4st n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g3a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a n3ger nge4ram n4g3erse nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngsa4g ngs3au ngs3c ng4s3e4h ngs3pa ng3ts n2gum 2n1h4 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nich1s nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n3 ni3ene ni1ero nifes3 nig2a 2n3i2gel nig3r ni2gre nig4sp 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis3s4 ni2s1u 2nit ni2ti nit4r nitts1 nitt4sa ni3tu ni3v 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3aus n2käh nke2c nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2s1al nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nn2erh nn2erk nne2rö n4n3er4wa nner2z nne2s nnes1e nne4st nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3sc nn3se nn3s2p nnst4 nn2th n2n1uf n2n1unf nn1ur nnvoll4 1no 3no. no2bla n2o3ble 3noblo 2n1ob2s no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3sh no2s3p n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l n2öt 2n3p4 npa2g npf4 npro1 npsy3 2n1q 4n3r2 nräu3s nre3sz nrö2s1 6n1s n2s1a2d n2s1all n2sang n2sant n3s2arg n2saus n3sav n2s1än n2s1äus ns2ca n3schu nsch7werd ns1eb nse2ha2 nseh5ere nsen4sp ns1ent ns1erf ns1erg n2serh n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n3sil n2simp n2s1ini nsinn4s nsi4te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 n2spat n4speri n4spers n4sph n3s2pi ns4pie n2spo ns3pon n4sprä n4s3prie n4spro nsrü2 ns3s2 nst1ak n3star n2stas n3stat n4stat. n4s3tate nst3eif n3stemm ns4tent ns6terbe n5s6terne n5s6terns ns2ti ns4tic ns4tob nst5opfe ns4tor n4strac n4strie nst4ru ns4trun ns2tu nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns4unr ns4uns n3sy n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt4at nt1äm n2t1äu nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei nt2en nt4ene nten6te. n3ter nte4ras nt4ern nt4ers nt4ert n4t1ess nte3v nt2her n2t3ho n3thr n3t4hu nti3c nti3k4l n2tinf n2t1inh ntini1 n3ti1t nt4lem ntmen2 ntmo2 n3to nton2s1 n3tö nt3rec n5t4ree nt3reif n5trep nt4rig n5trop n2t3rü n4ts nt3sa nt4sau nts2o nts2p nt4s3par nts2t nt2s3to nt3su n3tu 3n4tu. ntum4 ntu2ra ntu4re. ntu4res n3tü nt3z 1nu. 1nu1a nu3ar nubi1 1nu1c 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung4 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl 1nut nu2ta nu4t3r 1nuu 1nux 1nuz 3nü. 2nü4b nür1c 3nüs 1nüt 2n1v2 n3ver nvol7ler 4n1w 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nzdi1s nze6l3a n4zense n4zentw n4zentz nz3erwe nzi2ga nzig4s nz1ini nz3le n2zor nz2öl nz3s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oa4k1l o4a3la o4a3mi o2ar o2as 3oa3se o4at o5au o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi4t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re o3bri ob3s2h ob3sk obs2p ob2sta ob3sz 2o3bu obu2s 2o3bü 2oby4 2oc o3ca oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r och1s ocht4 och3te o1chu ochu2f och1w o1ci o1ck o2ckar o3cke ock2er o3cki o2cko ock3sz o1cl o1ç o1d o3d2a od2dr o3deb o3d2e1i odein3 ode2n1 odene2 o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2o3du 2o1e oe2b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1a2c of1au o2f1ei of2en o3fer of2f1a of2f1in 1offiz of2f3l of2f3r offs2 off3sh of2fu 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i o3gh ogi2er og2lo o3g4n og3s2p og1ste o1ha o1hä o1he o2h1eis ohen3s o2h1ert o2h1erz o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n3ac 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la o2h1o2p o2h3ö ohr3a oh4rin oh1ro oh1s o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. o1ism oiss2 oi1th 2o1j 2o1k oka2la okale4 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar olars2 ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ole3s ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp ol2gl ol2gr ol2i oli3k4 ol2kl olk3r ol2kre ol2lak ol2l1au oll1e2c ol2l1ei ol2lel oll5ends ol4lerk oll3erw o3lo ol2of olo3p2 ol1ort ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3m2eis o2mel o2mene o2mep o2meru om1erz om2es omiet1 o2m1ind om1ing om1ins o2m1int om3ma om1org om3pf oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal on1ap o2narb on2au 2onä onbe3 2onc onderer5 2one one4i one2n3 onens2 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4 onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on4sam on2seb onse2l onsi2 ons3l ons1p onst2h on3t2a ont3ant on4t3end ont3erw on4t3ri o1nu 2onuk on3v 1ony on3z o1ñ oof2 oo2k3l o1op o1or oo4sk oos3s4 oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan opa5s o1pec o1pei o1pe4n 2opf. op2f3a op3fah o2pfe op4ferd opf5erde opf1l opf3la op1flü 4oph2 o3phe o1pi opi5a4 opi3er. opi5ers. opin2 op5lag o2p3le op3li 2o3po op4pl op2p3r 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2oral o2r3alm or4alt 3oram or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 4orda or2d3am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords ord3s2t or2dum 2ordw 4ore ore2a ore2b o2r1e2ck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s4 or3ga 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins 2orit ork2a or2k3ar ork4r ork2s 2orm or4mans or4ment 2orn or2na2c or2n3ar or2n3ä or5ne. or3n2o1 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3rh 2ors2 or3s4a or3sh or3sz or2t1ak or4t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the ort3ins or4t3off or2tor or4tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un o2r3ü o2rya 2o3s2a os3ad os4an osa1s osch3ar o3sche osch3le os4co 2o3se ose3e o2s1ei ose2n o4sents 2osh o3s2hi o3sho 2osi o3sk o4ska os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1a2c oss3and os4sä os2sei os4s3en4k os4s3enz os2s3o os4son os2s3p os2s3t ost1a2b os4t3am ost3ang os3tarr osta4s ost1au os4tei oster3e os6t5er6we os2t3h os3til os3to os4tob ost3ran ost3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf 2o1t ota2go o3tark o2t1au ot3aug ot1ä otäugi4 o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot4em3 otemp2 o2t1erw ote2s 4ot2h ot4he ot5hel o4t3hi ot3hos o2thr o2til o2t1i2m ot2in otli2 ot4ol ot1opf ot2or oto2ra oto1s o3tra o2t3re ot3rin ot2sa ot3sc ots1p ot4spa ots2pe ot2spr ott1a ot2tan ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra ot4tri o3tü o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oun4ge. 2our ouri4 our4ne. ou3s2i outu4 2ouv 2o1ü o1v ove3s 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo oy1s4 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r öb2s3 ö1c öch1l ö2chr öch2s öchs4tu ö1d öde1r ödi3 ödien3 öd2st 1ödu ö1e 1öf öf2fl öf3l ögen2s1 ög3l ög3r ö1he öh3l2e öh3ri ö1hu ö3ig. ö1ke ö2ko1 ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl4en öl2f1ei ölf3s öl1im öl1in öl2k3l öl3la öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w öm2s ön2e ö3ni önizi1 önn2e ön2s ön3sc ön3sp ö1nu öo1 ö1pe öpf3l öp4s3t ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw ö2s1ei ö2sp ös2s1c ös2st ö2st ös3te ös2th ös3tr ö3su ö1ß ö1t ö2t3a öte4n3 öt2h öts2 öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg pa5rek 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa3s2p pa4st 2paß pat1a pat4c pate2 1pati 1pa5t4r 1pau p3auf pa3uni 1pä 3pä2c 3päd 3pär 3päs pä4t1e2h pä4t3ent pä2t3h pä2to pät3s4 2p1b 2p3c 2p1d2 pda4 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 1pel pe2l1a4 pe4lein pe2let pe2lex pe3li4n pe4l3ink pel3k pell4e pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o 3pensi 1pensu penz2 1pep pe1ra per2an pere2 1perle per4na 3pero per2r1a 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pe2st pes2th 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 p2f1in3s pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra 2pfs2 pf3sl pf3sz 2pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d phen3s 2ph1ers 2phf 2phg phien3 phi2ka 2phk ph2l 2phm 2phn 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a3 piap2 pias4 pi3as. pi3chl p4id2 piegelei8 pi2el piela2 pie4lei 3pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi3ri 3pirin 3pis 4piso pi3t2a pi1th pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3p4la p5la. p5lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler 2plig p4lik p4liz p4lo 2p3lu 2p1m2 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li po4lor 2pond po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau porf4 2porn por3s por4tin por4tre por6tri pos2e po4sta pos4t3ag po4stä po2s3te post3ei po2sto pos6tr post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppe1e ppe2n1 ppf4 pp1fr p2p1h p3p2ho pp3l pp1lä p2ple pp3oh ppp2 p2p3ra p2pri pp3sa ppt2 p2r2 1prak 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 1prei 3preis 2preiz 2p3rer 3p4res pri4e 2prig 3prinz 2pritz 1p4ro 3prob 2proc 3prod 3prog 3proj 2pross pro1st 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po p2st p3sta p3stea p3stel p3s2ti pst3re ps2tu p3stü 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w p2t3r pt3s2 ptt2 pt1um pt1urs ptü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 2pund 3punk pun2s 2punt 2pur pu2s3t 3put put2s 1püf 2pül 2p1v 2p1w pwa4r 3py1 pys4 py3t 2p1z qu4 1queu 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2ab2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin rachter6 racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad5t 1rae r2af raf3ar ra2fer raf1r ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la2 ral3ab rala4g r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la rall2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t 2ralta r4alt2h ra2lu 3raly rama3s ra2mer 1r2ami ram4man ram6m5ers ram4m3u 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er rand3s 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra2r1in r2ark 2r3arz r2as r4as. ras2a ra4schl 2rasph 2raß 1rat ra2t1a rat4r 2r3atta 4ratz 4rau. 3raub. 4raud rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp raus5se raut5s 1raü r2ax raxe3 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sc 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä r3ben. rb1ent rbe3r2e rber4gl rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rb2o rb4ri rb2s rb3se rb4sei rb3ska rbs1o rb3sp rb4stä rb2u rbu2sc rby4t 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rch1s2 rch3sp rchst4r rch3t2a rch6terg rch6terw rch1w r1ci r2ck r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rd2am rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d rde3re rder4er rderin6s r4d3ernt rde3sp rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os r2dö rd3rat rd4ri rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. re2cka 2recki 3red. 4redd 2redi re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 3rek 4re2ke re3la 2r1elb rel2e re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen r1erk 4r3erken r2erki 2r1erl 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest re1sta re2s2tu 3resu re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü rfolg4s r3for rf4ru rf4rü rf2sa rf2s1ä rf4s1id rf2spr rf2s3t rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rg3sp rgs4tr rg5s2tu r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 2r3her r2hoe rho2i3 2rhol 2rhö 2rhs rhu2s 1ri ri3am ria1s ri3at rib2bl ri1ce ri1cha rid2 ri2d3an 2ridol 2ridy r2ie rie2fr ri1el ri3els riene4 ri3eni rien3s rie2nu ri1er. ri4ere ri3ers. ri3esti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif3s rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 2rimp rim2s rim4sc r2i3na 2r1ind rin4dex rin4diz ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 2rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins 3r4ins. rin4so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris2a ri4scho ri4schw 3risik rismu2 ri3so ri4s1p 3riss ri2st ris6t5ers r2it r3i2tal ri3t2i ri3t4r rit2tr 5ritu rix1 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk3shi rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk4tri rk2um rku2n rk1uni 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i r3let r3l2i rli2s r3l2o rlös3s rl2s1p rl3ste rl2s3to rl3t r3lu rlz2 4r1m r3m2ag rma2la r2m1ald r2m1ank rm1ans rm1anz rm1a2p r2maph rm3d2 r3me. r2m1ef r2meo r2m1erp rm2es r2mide r2m1im r2m1o2ri rmo1s rm3sa rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna2r rn2arb rn3are rn3ari r2nau rnd4 rn3dr r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1c 3rock. r2o3de ro3e4 roh1l 3r2ohr 3roi ro1ir ro3le rol4lan rol3l4en rol3s 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ropf ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3sh ro3s2i ro3smo ros2s1c ro3sta rost1r 4roß ro2ßu ro4tag ro2tä ro2tei ro2tho ro4tri rots2o rot2ta ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl 3römi 4röp r1ör r2ös. r2öse 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli r3po rpro1 rps3t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rrat2s rr1äm rrb2 rr1c r3r2e rre4ale rrer4s rre2st r4rew rr2he r3r4hen rrik2 rr2n3a rr2o r2r3ob rro3m rr2st rr3stu rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2s1a2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ant rs3ar r6scherl r3schu r3schw r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3s2ho r3si r4sins rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no r3so r4sob rson4e r4s1op r4sord r4s3ort. rs2p4 rs4pel r2s3ph rs3s2 r4stant r5statu r6st5eing rs4temp rster2 rs4terb rs4t3erw rs2th rs2ti r3stie r5stim r2stin rst3ing r3stink r2stip r3sto rs4tob r4stot r3stö r3s4tr rst3ran r6strang r4strun rs2tu r3s4tü r2sumf r3swi r3sy 4r1t rtal2 r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är rte1e2 rtei3la rt1ein rtei1s4 r2telf r2temo rte2n1 rte4na rten3s2 rt3erei r4terfa r4terfo rt1erh r4t3er4la r4t3ernä rter4re rt1ers rte3s2k r2thi rt3hol rt2hum r2t1id r2t1ima r2tinf rto1p rt1or rto2ri r3tö r4t3rak rt3rec r5tri rt3ros rtrü2c r4ts rt4s1eh rt2so rt2spa rt3t4 r2t1urt r3tü rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ruch3st ru6ckerl ru2cku rude2a ru2dr 3ruf ru2fa ruf2s3 ruf4ter 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus2s1p rus4st ru2st ru3sta 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch 4rümm rün3z 2r1v rve4n1e 2r1w r5wei rwun3s 4r1x 1ry ry2c 2r1z rz2an r2zar r2zas rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. 2s1ada s1adm 2s1a2dr 3safa sa2fe 2s3aff 3safi sa1f4r 3saga sa4gent sag4n sa2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4sakt 3s2al. 4s1alar sa4l3erb sa2l1id 3salo sal2se 2s1alt 3s2alz 3sam s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na s3anb s2an2c s2and s4and. san4dar san4dri 3sang. 2s3anh 3sani 2s3anl 2s3ans san4sk 4s3antr 2s3anw 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1asp 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb s3ausw 2s3av sa2vo 1sä s3ähn 3säl 4s1ält 2s1äm 2s1änd 3sänge 2s1är 3s2ät 3säul 2säuß 4s3b4 sba4n sbe3r2e 1sc 2sc. 2scam s2can s2cap 2scar 2s1ce 6sch. 2schak s4ch2al 4schanc 4schang 2schao s4chä 4schb 4schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 2schf 2schg 2schh schi4e s4chil 4schiru 3schis 2schk s4chl 4schl. sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox s4chö 2schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs schs2e sch3s2k sch3sta 4sch3t scht2a scht4r s4chu 4schunt sch2up 3schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 4s3cl 2sco 3s4cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sde1s sdien4e sd4r 1se se3at. 2s1e2ben seb4r 2s1echo s1echt 2s1e2ck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l se2gal se2gl seg4r 3seh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh1s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s4ein. 2seinb sein4du sei3n2e sein4fo 4seing 2seinh 4seink 2seinl 2seinn 4seinr s4eins. 4seinsp 4seinst 2seinw 4s1eis 3s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam sel1ec 4selem se4lerl sel3ers 2self. s3elix se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp 3s2en. se4nag se2nä 2s1endl 3seni 3senk se2no 3s2ens s2ent. 4sentf 2s3entg s2enti 2s1ents 2sentw 2sentz se2n3u seo2r 4s1e2pos 3seq s4er. 3sera ser3a2d ser3al se5ref s3ereig 6sereign se4r3eim se4r3enk ser2er 2s1erfo s2erfr s3erfü 4serfül s2ergr s1erh 2serhö 3seri serk4 4serken s2ern. 2s3ernt se1rot 4s3eröf s2ers. 2sersa 4serseh s4ert. s2erta seru2 se4r1uf se3rum se3rund 3s4erv 5ses. se2sel se3sk se1sta se3su 3set 4se4tap se2tat 4s1e2th se1u2n 2s1ex se2xe 4sexp sex3t2 1sé 4s3f4 sfal6l5er sflo4 4s3g2 2s1h sh2a 3s2ha. sha2k 4s3han 1shas s3hä s3h2e 3shi. 3shid shi4r sh3n s3hoc 4s3hof 3s2hop sho4re 3show s3hö sh4r 1si si3ach. si2ad si3am. 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s sien3 si3ene si1err sie2s si1f4 3s4ig si2g1a2 sig4n si3gnu si2g3r sig4st si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 4s1inh sin1i sini1e 2s1inq 2s1ins s2ins. 2s1int 4s1inv 3sio sion4 3siru 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s 3s2it si2tau sit3r si2tra si3tu siv1a sive3 si2vr 1sí 2s1j 2s1k2 4sk. 3skala 4skam 4skanz s3kar 4skas skas4tr ska4te. 4skateg ska4tes 4skä 4skb s4kep 3s2ki. s2kif s2kig 3s2kik 4skir ski1s 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4skor 4skow 4skö 4sks 4sk3t 3skulp 2s1l2 3slal 4slan sla2ve s2law s3lä sl3b s3le sler3s s3li 3s4lip sli4tu s3lo. slo3be s3loe 2s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 1so 3so. so4a 2s1o2b so1c so3et 3soft 3sog s1o2he 4sohng 2s1ohr 3sol so3la so2l1ei sol4ler 4so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2sopf sop3s 3sor. so1ral s1orc 2s3ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3sos s4os. 4s1ost so3unt 3sov 4s1o2ve 3sow 2s1ox 3soz 1sö sö2c sö2f 2s1ök s1ö2l s1ös 1sp2 2sp. 2spaa 4spak 2spala spani7er. 4spap 2spara 4sparo 3sparu 3spaß 4spatr 4spau s2paz s2pä 3späh 2spär 2s3pe. s3pel 4spensi spe3p4 s1peri 2spero s2perr 2spers 4spet 3s2pez 4s3pf 2spha s4phä s3phe 3s2pi4e 4spier4 spi2k 4spil 3spio 4spip 4spis 2spl 4spla 4splä 4sple 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 4s3pos s2pott 4spr. s2prac s2pran 4sprax 2spräm 4spräs 3s4prec 4spred s2pren 2spres 2sprob 2sprop 3spross 3spru 4sprüf 2s3ps 2s4pt 3spuk 2spun 2spup 3spur 4sput 4spy 2s1q 4s3r4 srat2s srat4sc sret3 srö2s1 srücker6 srü2d 6s1s ssa3bo s5saf s3sag ss1aj s3sal s4s1alb s4s3amt s4s3ang s2sano s4sans ss2ant s4s3anz s3sa1s2 ss3att s3s2ä s4sce ssch2 s4sco ss1ec s2s1ega sse3inf sse3in4t sse6r5att ss1erö ss3erse s3s2es sse3ta ss3l ss1off ssoi4 s2s1op ss1ori s2söl s3spe ss2po s2spro ssquet4 ss3s4 sst2a s3stel ss2th ss2ti ss4tip s3s4tras s3strec ss2tur s3stü ss1ums s1t 6st. s2ta 4sta. 3staa 2stabb s4t2ac sta2ck 3s4tad 3staff 2stag 3stah 2stak 2stale s3ta3li 2stalk st1alm st1alp st1ami 4stan. sta4na 3stand 2stani 4s3tann 2stans 2stanw s4tar. 4stari s4tars st1asi 2s3tat. s4tau. 2stauf 2staum 3staur 2staus 3staus. 2stax 3s2tä 4stäg 4stält s4tänd 5stätt s3täus 2stb 2st3c 2std 4s5te. 2stea 4stechn s2ted 4stee 3s2teg ste2gr 3s4teh s2te4i st1eid 3steig 4steil 3steilh stei4na 1s2t2el 2stel. stel4l3ä 2steln 2stels 2stem 4stem. ste4mar 4sten s5ten. ste4na s4t3ends st2ens s4tentf s2tep 2ster 6s5ter. st5erbie ste4rec ste6rers st3erfü st5ergeb 4sterm 3sternc 4stes ste2se stes6se. ste4st 2stet s4teti 3s4tett 3s2teu 1steue 4steuf st3ev 4stex 2stf 2stg 4sth s4thä s3them st3heu s4thi s2t3ho s2thu 2stia 2stib 3stic 2stie. s2tieg s2tiel 2stien 3s2tif 2stig 2stik s2til 3s4tim s4tinf s3tinn st1ins 2stio 1s2ti2r 2stis st1i4so 1stitu 2stiv 2stj 2stk 4stl 4stm 2stn s2to 2sto. s3tob 2sto3d 4stod. 1stof s4toff s4t3om 4ston 4stoo 2stopo 2stor. 2store 2storg 2stori s3tort 2stose sto3s2t 1stoß 4stote 4stou 2stow 2stoz 1stö 2stöch 2s3töl 2stöt 2stp 2stq s2tr 2strad 2strag 1strah 4strahi 4strai 4strak 2stral 4strans 5straß 4s3traum 4s5träg 4sträne 4s5tref 4s5treib 5st4reif st3renn 2strib 2s4trig 1s4tri2k 2s5tris st3roll stro4ma 2ströp 1stru 2strua 2strug 3struk 2st3run 2strup 2s4t3s2 sts4k 2st3t4 st2u 5stub 4stuc 3s4tud 2stue 3stuf 5stuh 2stum2s stum4sc 2stumt stu2n 2stun. 3s4tund s2t3uni 4stunn 2s3tuns 2stunt stu3re st3url 2sturn 2st3urt 2s3tus 1stüc 2stüch 2stür. 3stüt 2stv 2stw 3s2tyl 4st3z 1su su1an 3su2b3 su4ba2 4subi 3su1c su2cha such4st 2s1u2f 2s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2mel su6m5ents s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n 3sun. sun6d5erh su4ne s1unf 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt s4u2s1 su3sa su3si sus3s 3suv 1sü 2sü2b 3süc sü2d1 süden2 3sün 3s2üs 3süß 4s3v 2s1w s3wa s3we sweh2 4swie 4swil 1s4y syl1 sym3 sy4n3 2s1z2 4s3za 4szä 4s3zei s2zena 3s4zene 4s3zent s2zes 4s3zet s2zis 4s3zu s3zü 4s3zw 2ß1a2 2ß1b2 2ß1c 2ß1d 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t 2ß1f 2ß3g2 ßge2bl 2ß1h 1ßi ßi2g1a2 ßig4s 2ß1in ß1j 2ß1k4 2ß1l ßler3 2ß1m 2ß1n2 ß1o2 ßos2 2ß1p2 2ß3r2 2ß3s4 ßsch2 ßst2 2ß1t 1ßu 2ß1um 2ß1ü 2ß1v 2ß1w 2ß1z 1ta 3ta. 4taa 5taan 2tab. ta2b1an 2t1abb 3tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 3table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 3taf. 3taf2e 4taff t1afg t1af4r 3t2ag ta2ga2 ta2g1ei 4t3a4gent 4ta3gl t3ago tag4st tah2 tah3le tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. t1a2ka ta2kro tak6ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk tal3d 3t4ale tal2en ta4lens tal2ga tal2l1ö4 3talo ta2l1op 2talt 2tam 3tame ta2mer ta2mi t1ampl t1amt 3tan. t1a2na 2tanb 4t2and tand4ar ta3ne 4tanf 2tang 3tani t2ank t3ankl 4tanl t1anm 2tanme 4t1anna t2ano t1ans 3t2ans. 4t3ansi 4t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4rens ta4r3ere 5t4a3ri 2tark 2t1arm 2tart t1arti tar2to ta2ru 2t1arz 3tas. ta3sa 3tasc t1asp 3tast ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 4tatue ta2t1um 4taud 2t1auf 4taufg tau3f4li 4taufn t1auk 3taum t1ausb 3tausc tau6schr tau6schw t2ause 4t3ausg t1ausk 4tausl 4t3auss 4t1ausw 3tav 3tax taxi1s 1tä 4täb tä1c 4täd 3täe 3täg 4tägy 2täh 2t1ält 4täm t1ämt t1ängs 3tänz t1äp t2är. tä2ru tä2s t2ät 4tätt 2täug 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 4t1c t3cha t3che tch2i tch3l t2chu tch1w t4ck t3cl t3cr 4t3d4 tdun2 1te 3te. te2a2 2teak te3al te3an 3teba 3t4ebb 4t1e2ben t2ech te3cha 2teche 3techn 2techt 2teck te2cka teck2e te2cki te3der te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 3teha 3tehä 3tei. 2teign teik4 3teil 4teilhe 2tein tein3e4c t3einge t3einla 4teinn t1eis. t1eisb te2kel tekt2 3tel. 3tela te2l3ab te2l1ac te2l1au telb4 tel3d4 3te3le tel1eb tele4be te4l1ec te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. 3telg te2l1in te2lit 3telk tell2e tel6lein 4tellu 3teln te4lost te2l1ö 3telp 3tels tel3s2k 3telt4 tel3ta tel3th 3tem. te2m1ei te2min 2temme te2m1o2r 3temper 2tempf tem3s te4m1u 3ten t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 4t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag 4t3engla t4enh te2ni te4n3in t4enj t4enm ten3n tens2e 4tensem tens3th t4enta t1entb 4tentd t4ente 4tentn tent3ri 4t3entw 4tentz ten6zerh ten3zw t1e2pi 3t6er. ter3a2c te1raf te1ral ter3am te3ran. ter3a4s 4terbs 4terbt 3terc 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül 3ter3g2 6tergrei t4ergru t4eri te3ria te2rid 5terkla 4terklä 2t3erlö ter4mer 3termi ter4n3ar 2ternc t3erneu t4ero t1erö ter4re. t4ers. ter5sc ter4ser terst4 t4erst. 5t4ersti 5t4erstu tert2 teru2 te4r1uf 6terwerb ter3za 2t1erzb 3t2erzu 3tes tesa2c te2san 4t1e2sel te2sep tes1er te2spr tes3si t2est tes3tan test3ei tester4 tes6terg tes6terk testes4 te2su 3tet2 t2et. te2tat 4teth 4tetl 3teuf 3teum te1un 3teur. teu2r3a te2vi te1xa 2t1e2xe 2t1e2xi 4texp 3text 2t1exz 4t1f4 tfi2l 4t1g2 tger2 t1h 4th. 2th4a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä th2e 1t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem 1then t4hene t4heni 3theo t2hes 3these t2heu 1thi t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n 1t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 4t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy 1ti ti2ad ti3a2m 3tib4 2tic ti1ce tiden2 ti4dend 3tief. tie2fr tieg4 2tieh ti1el ti2el. tiel3a ti3e4n3 3ti2er tie4rec ti1et ti1eu 3tif. ti1fr 4tift 3tig ti4gerz 3tik ti2kam ti2kar ti2kin ti2krä ti2kü ti2lar ti2lau ti2lei ti2lel 3tilg ti2l3ö til3s tilt4 ti2lu ti2ma2g t2imi tim2m1a 4t1imp 3t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l 3t2ins. 4t1inse 2t1int ti1nu 4t1inv 3tio ti3or 3tip ti4que. ti1rh 3tis ti4scha tisch3w ti2sei ti2sp ti1sta 3ti3t2e ti3ti 2ti3tu tium2 3tiv ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 4t3k4 4t3l tl4e 5tlem tle2r3a 6t5li tlung4 4t3m2 tmal2 tmen6t3 tmo4des 4t3n2 t5na tnes2 tnes4s 1to 3to. to4as to5at 4tobj tob2l t1obs to1c 3tocht to6ckent 3tod tode2 4to2d1er to4d1u toi4r 3tok to3la 3tole 4tolz tom1e2 2tomg 3ton to2nau to2neh 3too to2pak to2pat 3topo 2topt 3tor. to1ra to2rau to4rän 4torc t1ord 3tore to2rel t1org t3orga 3torin tor3int to2rö 3tors t1ort. to2ru t2orw to3sc 3tose to4sk tos2p 4toss 3tost4 to1sta 4toß 3to3te to2tho 3totr tots2 3t4ou touil4 to3un 3tow 2tö 3töch 4töf 4t1ök tö4l 3tön t1öst 4töß 3töt 4t3p2 tpf4 2t1q 1t2r4 2tr. 5tra. 3trac tra3cha t3rad. tra4dem tra4far 3trag 3trahi 4trahl 6trahm 5t4rai 3trak 3tral 2t3rams 3t4ran. 2trand 3trank t3rann 3trans t3rase t3rasi 4traß t4raue 2traup 5träc 3träg 3träne 4träs 4träß 4t5re. tre4ale 4treb tre2br 4trec t3rech t4reck 6t3red 3tref 4trefe 4trefo 4treg t4rei. 3t4reib 4treic 4treif t3reig 2t3reih t3rein 2t3reis 6treit t3reiz 2trek 6t3rel t4rem t4ren. 3trend 4trendi t3rent 2trepe 2trepo t4repr t4rer t4res. t4ret tre2t3r t5rett t4reu 3treuh 2t3rev 2trez 5t4ré 2t3rh 3tri 4tric 5trieb 2trieg tri4er 5trigg t3rind 4tring tri3ni 4trinn t4rip 4tript t4rit tri2x trizi1 3tro. 4trock. 3troe 3t4roi tro2ke 4trom. tro2mi 3tron 2t3roo t4rop 3tropf 3troy t3röc 2tröh 3tröp 3trös 4tröss 2t3röt 3trua 2truf 4truk trum2 trums1 2t3rund 3t4runk 5t4rup tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg try1 2ts t4sa4b t3s2ac t2s1a2d t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as t2sau t2s1äh t2s1än t3s2cha t4schar t3sche t4schef ts4chem tsch4li t4schro ts4cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t2s1ent t2s1er t6s5essen t2s1i2d tsing4 ts1ini t2s1ir ts3kr t1slal ts1o tso2r t3sou t2sö t3spal ts1par ts4pare t2spä ts2ped t3spek t2sph t3s2pi ts3ple ts2pon t3s2por t4sprei ts3s4 t1st4 t2staf t4stag ts3tak ts4tal ts3täti t2s3tep t3s4tern t3s4tero t2stip t4stit ts3tor ts3trad t2s3trä t4streu t2stri t4strop t2s3trü ts2tu t2s1u 1tsub t3sy 4t1t tt1ab tta2be tt2ac tta6gess tt1ak tt2al tt3ank tt2ant tt1art tta1s tt1ebe tt1eif tt1ein tt1eis t3tel tte2la tte4leb tte4len ttel1o tte4rec ttes1 tte4sa tte2sä4 tt2häu t2t3ho t3ti t3to tto1s t3tö t3tro tt3rü tt2sen tt2sor tts1p tt2spe tt2spr tt2sti tt5t t3tu tt2un t3tü 1tu tu1alm tu3an 2tub2 tuba3b 3tuc tu2chi 2tud 3tue tu2ere 4tuf tuf2e tu3fen t3u2fer tuff3 4tuh tu2is 2tuk t3u2kr tul2a t2um. 3t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2t3umr tum2si tum2so tums5tr 2t3umt 2t1umw 2t3umz 3tun. 2t1una 2t1und 3tune 2t3unf 3tung t3unga tung4s5 2tunif 2t1u2nio 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e4t turin1 3turn tu2ro tu4ru tu2sa tu4schl tu2so tu3ta 2tü 4tüb 3tüch tück2s 3tüf 3tüm 3tür. tür1c 3türe 3türg 3tür3s 3tüten 4tütz 4t3v 4t3w twa2 twi4e 1ty1 3typ ty2pa tys4 6t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1e2c t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3ze2s tz1ind tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4r u1al. ua2lau u1alb u3alet u1alf u3a2lo u1alr u1als u1alt ua2lu u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au u1ay u1äm u1äu 2u1b u8be8cken. u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa u2büb 2uc uc1c u1ce uch1a u1cha. uch1ä u1che u2ch1e4c uch1ei u3ches u1chi uch1il uch1in uch3l uch3m uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu uch3ü uch1w u1ci u2ckem u4ckent uck2er uck3erl u3ckerr u2cki u1cl 2u1d u3d2a uden3s2 uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e ue2ck u2ed ue2en u2eg u2ela ue2le ueli4 ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2zu u2ep ue2r3a ue2r1ä uere2 ue2rec ue3reig u3eremp u3erent ue4rerg ue4rerk uer3g2 u3erinf u3erin4t uer2ne uer4ner uern3s4t uer3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue2ta ue4tek u3fac ufa2ck u3fah uf1ak u3fal uf3ar u3fas uf1au u2f1äs u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern 2uff uff4l uf2fro uffs4 uf3l u2fob ufo2r uf1ori uf3r uf3sä uf4sin uf4so uf2spo uf2t1eb uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak u2g1ap uga4s ug1au ug3d2 u2g1ei u2g1erf u2g1erl ugge4st ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ros ug3rüs ug3se ug4ser ug3si ug3spa ug4spr ug4spu ug5stä ug3str ug3s4tü u2gü u1h uhe3s6 uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uhs4 uh1w 2ui ui2ch ui4cker u1ie ui1em u3ig u4ige u1in. u1is. u3isch. u3ischs uisi4n ui4s5t u1j uk2a u3käu u1ke u1ki u1k2l ukle1i uk4n uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab ul1am ula2s ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ul3f4 ulg4 uli2k ul1ins ul3ka ul2kn ul2les ull3s ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2th 2ulta ul3th ul4tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um1anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 4umm umm2a u2möl umpf4li um2pho um2p3le 1umr 3umsat um4ser um2sim um2s1pe um2s1u um3t2 um2un u2m1ur 1umz un1 4un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp und3st un2d1um undü4 1undv 1undz u3ne une2b une2h un2ei. un3ein un3eis unen2t u4n3erz unes4 unft4s 1unget 1ungew ung5h 1unglü un3gn un2gr ung3ri ung4sa ungs5tr un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku unna2 un2n3ad un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1un3si un3sk un3sp uns4t1r 1unt un3ta unte4ri un3tr unt3s 2untu unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u3or. u1or3c u3ors uos2 u1os. uote2 u1pa u1pe2 uper1 up2fa u2pf2e u2pf1i u3pi up2pl u1pr upt3a2 upt3erf upt3erg upt1o up4tr u1q 2ur. u1ra u2rab u3raba ura2be u2r1a2m ur3ame u2r1ana u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 urd2 ur3di ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri urgros4 urg3s4 uri2c ur1im ur1ini ur3ins ur1int urk2s ur3l ur4matt 4u1ro u3rol uro1s u1rö ur3p ur3sac ur2san ur2sau ur2ser urst4r ur4sw ur3s2ze urt2 ur3ti u3ru urü2 ur2z1a2 ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u4saf us4ann u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko us3oc u3soh u2s1op us1ou u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u5s4piz u2spo us2por u2spu us2sez us2sof ust3abe u1stal us3tau us2th ust2in us3tr u5s4tras us6tris u1stu u2stun u2stur us2ur u2sü 2uß 2u1t ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te ut1e2d ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu uto1 uto4ber uto3c ut1opf u2tops ut4or utos4 u3tö ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut2spa utt4an ut3te ut5t4l utts2 utu4re utu5ru u3tü utz3eng ut2z1in ut2zo ut2z1w 2u1u2 uufe2 u1ü2 2u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe3c übe4n3 über3 üb3l üb3r üb2s3t 2üc ü1che üch3l üch2s1c üch5t4e ü3cken ück1er ück3eri ü4ckers ück4spe 2üd ü4d3a4 ü3den. üden2g ü3d2ens üd1o4 üd3r üd3s2 üdsa1 üd3t4 üdwes2 ü2f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üg4st üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1erk ü2h1erz üh1i ühla2 ühl1ac üh1lam üh3l2e üh3mo üh3ne ühn2s üh1o üh3r2e ühr3ei. üh1ro ühr3ta üh1s ühs2p üh3t üh4th üht4r ü1hu üh1w ü1k2 ül1a ül2c ü3l4e ül2l1a ül2l1ei ül2lo ül2lö ü1lu ü2ment 2ün ü2n1a ün2da ün2dr ünd3s ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünn2s ün2s ün3sc ün3se ün3sp ün3str ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ürr2 ür2s ür3sc ür3se ür3sp ürt2h ür2zö ür2zw üs2a ü2schl üse3h üse3l üse1s üs2s1c üss2e üs2st ü2st 2ü1ß 2üt ü2t1al ü2t3r üt2s1 üt2tr ü1v ü1z 2v1ab va1c val2s 2vang 2varb va1s v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u 2v1au 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits3 ve3la ve4l1au ve3le ve3li ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 ve4rek verf4 verg4 ve3ri ve4rin ver3k ver3st vert2 ver5te ver3u ves1 2ve3sc 2ve3s2e ves3ti ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vid3s2t vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol voll1a vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 3voy vö2c 2v1p v2r 2v3ra v3re v4ree 2v3ro 2vs vs2e v1sta v1steu v3s2z 2v3t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les 2walm wal2ta wal2to walt4st 3walz wa3na wandels6 wang4s 1wann wa2p 1war2e ware1i war3ste wart4e 1was wa3sa wa4scha wa3sche wa3se wa3sh wass4e 1wäh 1wäl 2wäng 1wäs wäs2c 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we3cke. we5cken. we3ckes we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg3s4 1weh we4i wei4bl 2weie weifel6d weik4 wei3sc weis4s3p weis4t wei3str wei4tr wel6schl wel6schr wel2t1 wel4t3a4 wel6t5en6d wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer2s wer2t1a wer4t3ei wer6t5erm wer2to 1werts 1wese we2s1p we4st west1a west3ei wes2th west1o2 west3r wes4tu 1wet wet2s wett3s 2w1ey 2w1g 2w3h wi3cka 1wid wi2e wie3l wien2e wie2st wik2 1wil wim2ma wim4m3u win4d3e4c win2dr win2e 2wing win8n7er8sc 1wi4r wi3s2e wi2sp 1wiss wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s3 wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k ws2t 2w1t wti2 w2u 1wuc wuch4sc wul2 wul3se wun2da wun4g3r wun2s 4wur. wur2fa wur2s 1wurst wus2 wus3te 1wu4t1 1wüh wül2 wün3 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag x3a2m xand4 x2anz 1x2as 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. x2en xen3s2 x2er. x2ere 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is1 xis2c xi2se xi2so2 xis3s xis4tä xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3t2as xt1ä x2tän xtblo4 x2t1e2d x2t1ei x4tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt3s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere y2es. yes2p ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl3c y4le. yli4n yloni1 yl3s2 y2l1u yma4t ymp4 ym2pha ympi1 y2n1o yno4d ynt2 y1nu y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2po ys1pr ys3t4 y1s4ty y2s1u2 y3s2z y1t2 y2te. y2tes y3to1 yu2r yure3 y1v y1w y1y y1z2 2z3a2b zab3l za1c 2z1a2d 2z1af za3gr 3z2ah zah4ner 2z3a2k 2z1all 2z1am z1an za2na 2z3anf 3zani 3z2ank zan4kl 2z3anl 2zarb 2zarc 2z1arm z1arti zar2tr 2z1arz z1as za1st4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1ä4c 3z2äh 2z1äm 2zängs z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeik4 zei3la zeile4 2z1ein zei1s6 zei3sk zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 ze2len ze2l1er ze2l1in zell2a zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zen5s4tr zent3s zen4z3er z2er. zer3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2sä ze3sc zes1e zes1i ze3sku ze2sp zessen4 zes6s5end zes2sp zes2st ze2s3t ze3sta ze2tr 2zetts 2z1ex 2z1f4 2z1g2 zger2a 2z1h z2hen zi3alo zi3ar zi2dei zid3r zie4lei zi1erh ziers1 zi1es. zil2e 2z1imp zim4t3 zin2e zin3ei zin4er 2z1inf 2z1inh zin1it zin2sa zin4ser 4zinsuf 2z1inv zi2o3 zi3op zirk2 zirk6s zi3s2z zi1t2h ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zon4ter zo2o 2z1ope z1or zo2ri zor4ne 2z1osz 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3sz 2z1t z2t1au z4tehe z3t2her zt3ho z3tic zt1ins z3tö zt3rec zt3s2 z3tü zu1 zu3a zub4 3zuc zu4ch zu3cke zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug1un 2z1uhr zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e zung4 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s4 zu5t zut2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 4z1z z3z4a zzi1s4 z3z2o zz2ö", ["length"]=99833, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=14982, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-th.hyp0000644000175000017500000000017112161703335024673 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-th.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nb.rme0000644000175000017500000000221411761001300024626 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Norwegian Bokmal hyphenation patterns (more info about the licence to be added later) % Adapted to the new pattern-loading scheme. % Original file name was nbhyph.tex % TeX hyphenation patterns for Norwegian Bokmal % % Version 2007-02-10 % % Copyright (C) 2007 Karl Ove Hufthammer. % Copying and distribution of this file, with or without modification, % are permitted in any medium without royalty, provided the copyright % notice and this notice are preserved. % % This file contains hyphenation patterns for Norwegian Bokmal. % It uses the Norwegian hyphenation patterns from nohyphbx.tex, % created by Rune Kleveland and Ole Michael Selberg. Please see % that file for copyright information on those patterns. % % The patterns in nohyphbx are based on both Norwegian Bokmal % and Norwegian Nynorsk, and works about equally well for both % languages. This file, nbhyph.tex, contains only a few hyphenation % exceptions, for words that needs to be hyphenated differently for % the two languages. % % Please send bugs or suggestions to karl@huftis.org. % \input hyph-no.tex \hyphenation{ at-ten-de be-tre } context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fr.rme0000644000175000017500000001240511761001300024641 0ustar norbertnorbert% generated by mtxrun --script pattern --convert French hyphenation patterns (V2.12, 2002/12/11) (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: frhyph.tex <2006-10-20> % Author: R. Bastian, D. Flipo, B. Gaulle % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % French hyphenation patterns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This file is available for free and can used and redistributed % asis for free. Modified versions should have another name. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *BEFORE* using this file *PLEASE* run checksum on it: % % checksum -v frhyph.tex % % to make sure that it hasn't been damaged. % % Then if you notice anything wrong in french hyphenation please report to % % R. Bastian, D. Flipo, B. Gaulle at the email address: % % cesure-l@gutenberg.eu.org % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% checksum = "37208 1458 3078 34821" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% The most famous good guys who worked hard to obtain something usable. % Jacques Desarmenien, Universite de Strasbourg : % - << how to run TeX in a French environment: hyphenation, fonts, % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference % - << La division par ordinateur des mots francais : % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET- % Gauthier-Villars % Norman Buckle, UQAH (nb; many additions) % Michael Ferguson, INRS-Telecommunications (mjf) June 1988 % Justin Bur, Universite de Montreal (jbb; checked against original list) % all patterns including apostrophe missing from nb list % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle % did their best effort to improve the list of patterns. % % ----------------------------------------------------------------- % % Adaption of these patterns for % - TeX Version 3.x and MLTeX 3.x (2.x) % and % - all fonts in T1/`Cork' and/or CM/OT1 encoding % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex' % as of 1994-02-13 maintained by Bernd Raichle). % (An adaption for the old MLTeX 2.x exists but can not be % tested in lack of an executable.) % % ----------------------------------------------------------------- % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-is.hyp0000644000175000017500000000017111761001300024657 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-is.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-es.lua0000644000175000017500000007042012161703335024654 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="es", ["source"]="hyph-es", ["texcomment"]="% Spanish hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % DIVISI'ON DE PALABRAS\ % ~~~~~~~~~~~~~~~~~~~~~\ % hyph-es.tex 4.6\ % This files corresponds to eshyph.tex 4.6.\ %\ % (c) Javier Bezos 1993 1997.\ % (c) Javier Bezos and CervanTeX 2001-2010\ % Some parts, (c) by Francesc Carmona\ % Licence: LPPL\ %\ % For further info, bug reports and comments:\ %\ % http://www.tex-tipografia.com/spanish_hyphen.html\ %\ % I would like to thanks Francesc Carmona for his permission\ % to steal parts of his work without restrictions.\ %\ % 2010-05-18\ %\ % _____________________________________________________________\ % Javier Bezos | http://www.cervantex.es/\ % .............................................................\ % TeX y tipografia | http://www.tex-tipografia.com/\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzáéíñóú", ["data"]="1b 4b. 2bb 2bc 2bd 2bf 2bg 2b1h 2bj 2bk 2bm 2bn 2bp 2bq 2bs 2bt 2bv 2bw 2bx 2by 2bz 1c 4c. 2cb 2cc 2cd 2cf 2cg 2cj 2ck 2cm 2cn 2cp 2cq 2cs 2ct 2cv 2cw 2cx 2cy 2cz 1d 4d. 2db 2dc 2dd 2df 2dg 2d1h 2dj 2dk 2dl 2dm 2dn 2dp 2dq 2ds 2dt 2dv 2dw 2dx 2dy 2dz 1f 4f. 2fb 2fc 2fd 2ff 2fg 2f1h 2fj 2fk 2fm 2fn 2fp 2fq 2fs 2ft 2fv 2fw 2fx 2fy 2fz 1g 4g. 2gb 2gc 2gd 2gf 2gg 2g1h 2gj 2gk 2gm 2gn 2gp 2gq 2gs 2gt 2gv 2gw 2gx 2gy 2gz 4h. 2hb 2hc 2hd 2hf 2hg 2h1h 2hj 2hk 2hl 2hm 2hn 2hp 2hq 2hr 2hs 2ht 2hv 2hw 2hx 2hy 2hz 1j 4j. 2jb 2jc 2jd 2jf 2jg 2j1h 2jj 2jk 2jl 2jm 2jn 2jp 2jq 2jr 2js 2jt 2jv 2jw 2jx 2jy 2jz 1k 4k. 2kb 2kc 2kd 2kf 2kg 2k1h 2kj 2kk 2km 2kn 2kp 2kq 2ks 2kt 2kv 2kw 2kx 2ky 2kz 1l 4l. 2lb 2lc 2ld 2lf 2lg 2l1h 2lj 2lk 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lx 2ly 2lz 1m 4m. 2mb 2mc 2md 2mf 2mg 2m1h 2mj 2mk 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2mx 2my 2mz 1n 4n. 2nb 2nc 2nd 2nf 2ng 2n1h 2nj 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns 2nt 2nv 2nw 2nx 2ny 2nz 1p 4p. 2pb 2pc 2pd 2pf 2pg 2p1h 2pj 2pk 2pm 2pn 2pp 2pq 2ps 2pt 2pv 2pw 2px 2py 2pz 1q 4q. 2qb 2qc 2qd 2qf 2qg 2q1h 2qj 2qk 2ql 2qm 2qn 2qp 2qq 2qr 2qs 2qt 2qv 2qw 2qx 2qy 2qz 1r 4r. 2rb 2rc 2rd 2rf 2rg 2r1h 2rj 2rk 2rl 2rm 2rn 2rp 2rq 2rs 2rt 2rv 2rw 2rx 2ry 2rz 1s 4s. 2sb 2sc 2sd 2sf 2sg 2s1h 2sj 2sk 2sl 2sm 2sn 2sp 2sq 2sr 2ss 2st 2sv 2sw 2sx 2sy 2sz 1t 4t. 2tb 2tc 2td 2tf 2tg 2t1h 2tj 2tk 2tm 2tn 2tp 2tq 2ts 2tt 2tv 2tw 2tx 2ty 2tz 1v 4v. 2vb 2vc 2vd 2vf 2vg 2v1h 2vj 2vk 2vm 2vn 2vp 2vq 2vs 2vt 2vv 2vw 2vx 2vy 2vz 1w 4w. 2wb 2wc 2wd 2wf 2wg 2w1h 2wj 2wk 2wl 2wm 2wn 2wp 2wq 2wr 2ws 2wt 2wv 2ww 2wx 2wy 2wz 1x 4x. 2xb 2xc 2xd 2xf 2xg 2x1h 2xj 2xk 2xl 2xm 2xn 2xp 2xq 2xr 2xs 2xt 2xv 2xw 2xx 2xy 2xz 1y 4y. 2yb 2yc 2yd 2yf 2yg 2y1h 2yj 2yk 2yl 2ym 2yn 2yp 2yq 2yr 2ys 2yt 2yv 2yw 2yx 2yy 2yz 1z 4z. 2zb 2zc 2zd 2zf 2zg 2z1h 2zj 2zk 2zl 2zm 2zn 2zp 2zq 2zr 2zs 2zt 2zv 2zw 2zx 2zy 2zz 1ñ 4ñ. c4h 4ch. 2chb 2chc 2chd 2chf 2chg 2chh 2chj 2chk ch2l 2chm 2chn 2chp 2chq ch2r 2chs 2cht 2chv 2chw 2chx 2chy 2chz l4l 4ll. 2llb 2llc 2lld 2llf 2llg 2llh 2llj 2llk 2lll 2llm 2lln 2llp 2llq 2llr 2lls 2llt 2llv 2llw 2llx 2lly 2llz b2l 4bl. 2bl2b 2bl2c 2bl2d 2bl2f 2bl2g 2bl2h 2bl2j 2bl2k 2bl2l 2bl2m 2bl2n 2bl2p 2bl2q 2bl2r 2bl2s 2bl2t 2bl2v 2bl2w 2bl2x 2bl2y 2bl2z c2l 4cl. 2cl2b 2cl2c 2cl2d 2cl2f 2cl2g 2cl2h 2cl2j 2cl2k 2cl2l 2cl2m 2cl2n 2cl2p 2cl2q 2cl2r 2cl2s 2cl2t 2cl2v 2cl2w 2cl2x 2cl2y 2cl2z f2l 4fl. 2fl2b 2fl2c 2fl2d 2fl2f 2fl2g 2fl2h 2fl2j 2fl2k 2fl2l 2fl2m 2fl2n 2fl2p 2fl2q 2fl2r 2fl2s 2fl2t 2fl2v 2fl2w 2fl2x 2fl2y 2fl2z g2l 4gl. 2gl2b 2gl2c 2gl2d 2gl2f 2gl2g 2gl2h 2gl2j 2gl2k 2gl2l 2gl2m 2gl2n 2gl2p 2gl2q 2gl2r 2gl2s 2gl2t 2gl2v 2gl2w 2gl2x 2gl2y 2gl2z k2l 4kl. 2kl2b 2kl2c 2kl2d 2kl2f 2kl2g 2kl2h 2kl2j 2kl2k 2kl2l 2kl2m 2kl2n 2kl2p 2kl2q 2kl2r 2kl2s 2kl2t 2kl2v 2kl2w 2kl2x 2kl2y 2kl2z p2l 4pl. 2pl2b 2pl2c 2pl2d 2pl2f 2pl2g 2pl2h 2pl2j 2pl2k 2pl2l 2pl2m 2pl2n 2pl2p 2pl2q 2pl2r 2pl2s 2pl2t 2pl2v 2pl2w 2pl2x 2pl2y 2pl2z v2l 4vl. 2vl2b 2vl2c 2vl2d 2vl2f 2vl2g 2vl2h 2vl2j 2vl2k 2vl2l 2vl2m 2vl2n 2vl2p 2vl2q 2vl2r 2vl2s 2vl2t 2vl2v 2vl2w 2vl2x 2vl2y 2vl2z b2r 4br. 2br2b 2br2c 2br2d 2br2f 2br2g 2br2h 2br2j 2br2k 2br2l 2br2m 2br2n 2br2p 2br2q 2br2r 2br2s 2br2t 2br2v 2br2w 2br2x 2br2y 2br2z c2r 4cr. 2cr2b 2cr2c 2cr2d 2cr2f 2cr2g 2cr2h 2cr2j 2cr2k 2cr2l 2cr2m 2cr2n 2cr2p 2cr2q 2cr2r 2cr2s 2cr2t 2cr2v 2cr2w 2cr2x 2cr2y 2cr2z d2r 4dr. 2dr2b 2dr2c 2dr2d 2dr2f 2dr2g 2dr2h 2dr2j 2dr2k 2dr2l 2dr2m 2dr2n 2dr2p 2dr2q 2dr2r 2dr2s 2dr2t 2dr2v 2dr2w 2dr2x 2dr2y 2dr2z f2r 4fr. 2fr2b 2fr2c 2fr2d 2fr2f 2fr2g 2fr2h 2fr2j 2fr2k 2fr2l 2fr2m 2fr2n 2fr2p 2fr2q 2fr2r 2fr2s 2fr2t 2fr2v 2fr2w 2fr2x 2fr2y 2fr2z g2r 4gr. 2gr2b 2gr2c 2gr2d 2gr2f 2gr2g 2gr2h 2gr2j 2gr2k 2gr2l 2gr2m 2gr2n 2gr2p 2gr2q 2gr2r 2gr2s 2gr2t 2gr2v 2gr2w 2gr2x 2gr2y 2gr2z k2r 4kr. 2kr2b 2kr2c 2kr2d 2kr2f 2kr2g 2kr2h 2kr2j 2kr2k 2kr2l 2kr2m 2kr2n 2kr2p 2kr2q 2kr2r 2kr2s 2kr2t 2kr2v 2kr2w 2kr2x 2kr2y 2kr2z p2r 4pr. 2pr2b 2pr2c 2pr2d 2pr2f 2pr2g 2pr2h 2pr2j 2pr2k 2pr2l 2pr2m 2pr2n 2pr2p 2pr2q 2pr2r 2pr2s 2pr2t 2pr2v 2pr2w 2pr2x 2pr2y 2pr2z r2r 4rr. 2rr2b 2rr2c 2rr2d 2rr2f 2rr2g 2rr2h 2rr2j 2rr2k 2rr2l 2rr2m 2rr2n 2rr2p 2rr2q 2rr2r 2rr2s 2rr2t 2rr2v 2rr2w 2rr2x 2rr2y 2rr2z t2r 4tr. 2tr2b 2tr2c 2tr2d 2tr2f 2tr2g 2tr2h 2tr2j 2tr2k 2tr2l 2tr2m 2tr2n 2tr2p 2tr2q 2tr2r 2tr2s 2tr2t 2tr2v 2tr2w 2tr2x 2tr2y 2tr2z v2r 4vr. 2vr2b 2vr2c 2vr2d 2vr2f 2vr2g 2vr2h 2vr2j 2vr2k 2vr2l 2vr2m 2vr2n 2vr2p 2vr2q 2vr2r 2vr2s 2vr2t 2vr2v 2vr2w 2vr2x 2vr2y 2vr2z 2b3p2t 2c3p2t 2d3p2t 2l3p2t 2m3p2t 2n3p2t 2r3p2t 2s3p2t 2t3p2t 2x3p2t 2y3p2t 4pt. 2b3c2t 2c3c2t 2d3c2t 2l3c2t 2m3c2t 2n3c2t 2r3c2t 2s3c2t 2t3c2t 2x3c2t 2y3c2t 4ct. 2b3c2n 2c3c2n 2d3c2n 2l3c2n 2m3c2n 2n3c2n 2r3c2n 2s3c2n 2t3c2n 2x3c2n 2y3c2n 4cn. 2b3p2s 2c3p2s 2d3p2s 2l3p2s 2m3p2s 2n3p2s 2r3p2s 2s3p2s 2t3p2s 2x3p2s 2y3p2s 4ps. 2b3m2n 2c3m2n 2d3m2n 2l3m2n 2m3m2n 2n3m2n 2r3m2n 2s3m2n 2t3m2n 2x3m2n 2y3m2n 4mn. 2b3g2n 2c3g2n 2d3g2n 2l3g2n 2m3g2n 2n3g2n 2r3g2n 2s3g2n 2t3g2n 2x3g2n 2y3g2n 4gn. 2b3f2t 2c3f2t 2d3f2t 2l3f2t 2m3f2t 2n3f2t 2r3f2t 2s3f2t 2t3f2t 2x3f2t 2y3f2t 4ft. 2b3p2n 2c3p2n 2d3p2n 2l3p2n 2m3p2n 2n3p2n 2r3p2n 2s3p2n 2t3p2n 2x3p2n 2y3p2n 4pn. 2b3c2z 2c3c2z 2d3c2z 2l3c2z 2m3c2z 2n3c2z 2r3c2z 2s3c2z 2t3c2z 2x3c2z 2y3c2z 4cz. 2b3t2z 2c3t2z 2d3t2z 2l3t2z 2m3t2z 2n3t2z 2r3t2z 2s3t2z 2t3t2z 2x3t2z 2y3t2z 4tz. 2b3t2s 2c3t2s 2d3t2s 2l3t2s 2m3t2s 2n3t2s 2r3t2s 2s3t2s 2t3t2s 2x3t2s 2y3t2s 4ts. san4c5t plan4c5t 2no. 2t2l 4caca4 4cago4 4caga4 4cagas. 4teta. 4tetas. 4puta4 4puto4 .hu4mea .hu4meo .he4mee 4meo. 4meable. 4meables. 4pedo4 4culo4 3mente. 4i3go. 4es. 4és 4e. 4e3mos. 4éis. 4en. 4ía. 4ías. 4ía3mos. 4íais. 4ían. 4í. 4í4s3te. 4í4s3tes. 4í3tes. 4í3mos. 4ís3teis. 4e3ré. 4e3rás. 4e3rés. 4e3rís. 4e3rá. 4e3re3mos. 4e3réis. 4e3rán. 4i3ga. 4i3gas. 4i3gás. 4i3gamos. 4i3gáis. 4a4i3gan. 4e3ría. 4e3rías. 4e3ríamos. 4e3ríais. 4e3rían. 4i3gá3mosme. 4i3gá3mosmele. 4i3gá3mosmelo. 4i3gá3mos3mela. 4i3gá3mosmeles. 4i3gá3mosmelos. 4i3gá3mos3melas. 4i3gá3moste. 4i3gá3mostele. 4i3gá3mostelo. 4i3gá3mos3tela. 4i3gá3mosteles. 4i3gá3mostelos. 4i3gá3mos3telas. 4i3gá3mosle. 4i3gá3mosla. 4i3gá3moslo. 4i3gá3mosele. 4i3gá3moselo. 4i3gá3mosela. 4i3gá3moseles. 4i3gá3moselos. 4i3gá3moselas. 4i3gá3monos. 4i3gá3monosle. 4i3gá3monoslo. 4i3gá3monosla. 4i3gá3monosles. 4i3gá3monoslos. 4i3gá3monoslas. 4i3gá3moos. 4i3gá3moosle. 4i3gá3mooslo. 4i3gá3moosla. 4i3gá3moosles. 4i3gá3mooslos. 4i3gá3mooslas. 4i3gá3mosles. 4i3gá3moslas. 4i3gá3moslos. 4ed. 4é. 4edme. 4édmele. 4édmelo. 4éd3mela. 4édmeles. 4édmelos. 4éd3melas. 4edte. 4édtele. 4édtelo. 4éd3tela. 4édteles. 4édtelos. 4éd3telas. 4edle. 4eedla. 4edlo. 4édsele. 4édselo. 4édsela. 4édseles. 4édselos. 4édselas. 4ednos. 4édnosle. 4édnoslo. 4édnosla. 4édnosles. 4édnoslos. 4édnoslas. 4eos. 4éosle. 4éoslo. 4éosla. 4éosles. 4éoslos. 4éoslas. 4edles. 4edlas. 4edlos. 4er. 4erme. 4érmele. 4érmelo. 4ér3mela. 4érmeles. 4érmelos. 4ér3melas. 4erte. 4értele. 4értelo. 4ér3tela. 4érteles. 4értelos. 4ér3telas. 4erle. 4erla. 4erlo. 4erse. 4érsele. 4érselo. 4érsela. 4érseles. 4érselos. 4érselas. 4ernos. 4érnosle. 4érnoslo. 4érnosla. 4érnosles. 4érnoslos. 4érnoslas. 4e3ros. 4é3rosle. 4é3roslo. 4é3rosla. 4é3rosles. 4é3roslos. 4é3roslas. 4erles. 4erlas. 4erlos. 4í3do. 4í3da. 4í3dos. 4í3das. 4o. 4as. 4a. 4ás. 4a3mos. 4áis. 4an. 4aste. 4astes. 4ó. 4ates. 4asteis. 4a3ron. 4a3ba. 4a3bas. 4á3bamos. 4a3bais. 4a3ban. 4a3ría. 4a3rías. 4a3ríamos. 4a3ríais 4a3rían. 4a3ré. 4a3rás. 4a3rés. 4a3rís. 4a3rá. 4a3remos. 4a3réis. 4a3rán. 4a3ra. 4a3ras. 4á3ramos. 4a3rais. 4a3ran. 4a3re. 4a3res. 4á3remos. 4a3reis. 4a3ren. 4a3se. 4a3ses. 4á3semos. 4a3seis. 4a3sen. 4ad. e5r4as. e5r4a3mos. e5r4áis. e5r4an. e5r4aste. e5r4astes. e5r4ates. e5r4asteis. e5r4a3ron. e5r4a3ba. e5r4a3bas. e5r4á3bamos. e5r4a3bais. e5r4a3ban. e5r4a3ría. e5r4a3rías. e5r4a3ríamos. e5r4a3ríais e5r4a3rían. e5r4a3ré. e5r4a3rás. e5r4a3rés. e5r4a3rís. e5r4a3rá. e5r4a3remos. e5r4a3réis. e5r4a3rán. e5r4a3ra. e5r4a3ras. e5r4á3ramos. e5r4a3rais. e5r4a3ran. e5r4a3re. e5r4a3res. e5r4á3remos. e5r4a3reis. e5r4a3ren. e5r4a3se. e5r4a3ses. e5r4á3semos. e5r4a3seis. e5r4a3sen. e5r4ad. 4adme. 4ádmele. 4ádmelo. 4ád3mela. 4ádmeles. 4ádmelos. 4ád3melas. 4adte. 4ádtele. 4ádtelo. 4ád3tela. 4ádteles. 4ádtelos. 4ád3telas. 4adle. 4eadla. 4adlo. 4ádsele. 4ádselo. 4ádsela. 4ádseles. 4ádselos. 4ádselas. 4adnos. 4ádnosle. 4ádnoslo. 4ádnosla. 4ádnosles. 4ádnoslos. 4ádnoslas. 4aos. 4áosle. 4áoslo. 4áosla. 4áosles. 4áoslos. 4áoslas. 4adles. 4adlas. 4adlos. 4ar. 4a4rme. 4á4rmele. 4á4rmelo. 4á4r3mela. 4á4r3meles. 4á4r3melos. 4á4r3melas. 4a4r3te. 4á4r3tele. 4á4r3telo. 4á4r3tela. 4á4r3teles. 4á4r3telos. 4á4r3telas. 4a4r3le. 4a4r3la. 4a4r3lo. 4a4r3se. 4á4r3sele. 4á4r3selo. 4á4r3sela. 4á4r3seles. 4á4r3selos. 4á4r3selas. 4a4r3nos. 4á4r3nosle. 4á4r3noslo. 4á4r3nosla. 4á4r3nosles. 4á4r3noslos. 4á4r3noslas. 4a3ros. 4árosle. 4ároslo. 4árosla. 4árosles. 4ároslos. 4ároslas. 4a4r3les. 4a4r3las. 4a4r3los. 4a3do. 4a3da. 4a3dos. 4a3das. e5r4a3do. e5r4a3da. e5r4a3dos. e5r4a3das. 4ando 4ándole. 4ándolo. 4ándola. 4ándoles. 4ándolos. 4ándolas. 4ándonos. 4ándoos. 4ándome. 4ándomelo. 4ándomela. 4ándomele. 4ándomelos. 4ándomelas. 4ándomeles. 4ándote. 4ándoteme. 4ándotelo. 4ándotela. 4ándotele. 4ándotelos. 4ándotelas. 4ándoteles. 4ándotenos. 4ándose. 4ándoseme. 4ándoselo. 4ándosela. 4ándosele. 4ándoselos. 4ándoselas. 4ándoseles. 4ándosenos. 4a3dor. 4a3dora. 4a3dores. 4a3doras. e5r4a3dor. e5r4a3dora. e5r4a3dores. e5r4a3doras. acto1h acto1a2 acto1e2 acto1i2 acto1o2 acto1u2 acto1á2 acto1é2 acto1í2 acto1ó2 acto1ú2 afro1h afro1a2 afro1e2 afro1i2 afro1o2 afro1u2 afro1á2 afro1é2 afro1í2 afro1ó2 afro1ú2 .a2 .an2a2 .an2e2 .an2i2 .an2o2 .an2u2 .an2á2 .an2é2 .an2í2 .an2ó2 .an2ú2. ana3lí .aná3li .ana3li .an3aero .an3e2pigr .ane3xa .ane3xá .ane3xe .ane3xé .ane3xio .ane3xió .an3h .ani3mad .ani3mád .ani3dar .ani3ll .ani3m .aniña .ani3q .an3i2so .an3i2só .ani3vel .ano5che .ano5din .ano5mal .ano5nad .anó3nim .anó5mal .ano5nim .ano5ta .ano3tá .anua3l .anua4lm .anu3bl .anu3da .anu3l asu3b2 aero1h aero1a2 aero1e2 aero1i2 aero1o2 aero1u2 aero1á2 aero1é2 aero1í2 aero1ó2 aero1ú2 anfi1h anfi1a2 anfi1e2 anfi1i2 anfi1o2 anfi1u2 anfi1á2 anfi1é2 anfi1í2 anfi1ó2 anfi1ú2 anglo1h anglo1a2 anglo1e2 anglo1i2 anglo1o2 anglo1u2 anglo1á2 anglo1é2 anglo1í2 anglo1ó2 anglo1ú2 ante1h ante1a2 ante1e2 ante1i2 ante1o2 ante1u2 ante1á2 ante1é2 ante1í2 ante1ó2 ante1ú2 .ante2o3je acante2 4ísmo. 4ísmos. 4ísta. 4ístas. 4ístico. 4ísticos. 4ística. 4ísticas. t4eo3nes. mante4a e4a3miento .anti1h .anti1a2 .anti1e2 .anti1i2 .anti1o2 .anti1u2 .anti1á2 .anti1é2 .anti1í2 .anti1ó2 .anti1ú2 ti2o3qu ti2o3co archi1h archi1a2 archi1e2 archi1i2 archi1o2 archi1u2 archi1á2 archi1é2 archi1í2 archi1ó2 archi1ú2 auto1h auto1a2 auto1e2 auto1i2 auto1o2 auto1u2 auto1á2 auto1é2 auto1í2 auto1ó2 auto1ú2 biblio1h biblio1a2 biblio1e2 biblio1i2 biblio1o2 biblio1u2 biblio1á2 biblio1é2 biblio1í2 biblio1ó2 biblio1ú2 bio1h bio1a2 bio1e2 bio1i2 bio1o2 bio1u2 bio1á2 bio1é2 bio1í2 bio1ó2 bio1ú2 bi1u2ní cardio1h cardio1a2 cardio1e2 cardio1i2 cardio1o2 cardio1u2 cardio1á2 cardio1é2 cardio1í2 cardio1ó2 cardio1ú2 cefalo1h cefalo1a2 cefalo1e2 cefalo1i2 cefalo1o2 cefalo1u2 cefalo1á2 cefalo1é2 cefalo1í2 cefalo1ó2 cefalo1ú2 centi1h centi1a2 centi1e2 centi1i2 centi1o2 centi1u2 centi1á2 centi1é2 centi1í2 centi1ó2 centi1ú2 centi5área ciclo1h ciclo1a2 ciclo1e2 ciclo1i2 ciclo1o2 ciclo1u2 ciclo1á2 ciclo1é2 ciclo1í2 ciclo1ó2 ciclo1ú2 o4i3dea. o4i3deas. o4i3dal. o4i3dales. 4o2i3de. 4o2i3des. 4i2dal. 4i2dales. 4i3deo. 4i3deos. cito1h cito1a2 cito1e2 cito1i2 cito1o2 cito1u2 cito1á2 cito1é2 cito1í2 cito1ó2 cito1ú2 3c2neor cnico1h cnico1a2 cnico1e2 cnico1i2 cnico1o2 cnico1u2 cnico1á2 cnico1é2 cnico1í2 cnico1ó2 cnico1ú2 .co2a2 .co2e2 .co2i2 .co3o4 .co2u2 .co2á2 .co2é2 .co2í2 .co2ó2 .co2ú2 co4á3gul co4acci co4acti co4adju co4a3dun co4adyu co3agen co4a3gul co4a3lic co4aptac co4art co4árt co4e3fic co4erc co4erz co4e3tá co3exis co4imbr co4inci co4i3to co3n4imbri co4o3per co4o3pér co4opt co4ord con1imbr con1urb cripto1h cripto1a2 cripto1e2 cripto1i2 cripto1o2 cripto1u2 cripto1á2 cripto1é2 cripto1í2 cripto1ó2 cripto1ú2 crono1h crono1a2 crono1e2 crono1i2 crono1o2 crono1u2 crono1á2 crono1é2 crono1í2 crono1ó2 crono1ú2 contra1h contra1a2 contra1e2 contra1i2 contra1o2 contra1u2 contra1á2 contra1é2 contra1í2 contra1ó2 contra1ú2 deca1h deca1a2 deca1e2 deca1i2 deca1o2 deca1u2 deca1á2 deca1é2 deca1í2 deca1ó2 deca1ú2 4e3dro. 4e3dros. 4é3drico. 4é3dricos. 4é3drica. 4é3dricas. .de2sa2 .de2se2 .de2si2 .de2so2 .de2su2 .de2sá2 .de2sé2 .de2sí2 .de2só2 .de2sú2 deca2i3mient decimo1 3sa. 3sas. de2s3órde de2s3orde de2s3abast de2s3aboll de2s3aboto de2s3abr desa3brid de2s3abroch de2s3aceit de2s3aceler desa3cert desa3ciert de2s3acobar de2s3acomod de2s3acomp de2s3acons de2s3acopl de2s3acorr de2s3acostum de2s3acot desa3craliz de2s3acredit de2s3activ de2s3acuart de2s3aderez de2s3adeud de2s3adorar de2s3adormec de2s3adorn de2s3advert de2s3aferr de2s3afic de2s3afil de2s3afin de2s3afor desa3gú desa3garr de2s3agraci de2s3agrad de2s3agravi de2s3agreg de2s3agrup de2s3agu desa3guisado de2s3aherr de2s3ahij de2s3ajust de2s3alagar de2s3alent de2s3alfom de2s3alfor de2s3aliñ desa3lin de2s3alien de2s3aline desa3liv de2s3alm de2s3almid de2s3aloj de2s3alquil de2s3alter de2s3alumbr desa3marr desa3mobl de2s3amold de2s3amort de2s3amuebl de2s3ampa de2s3and de2s3angel de3sangr de2s3anid de2s3anim de2s3aním de2s3anud desa3pañ desa3pacib de2s3apadr de2s3apare de2s3aparec de2s3aparic de2s3apeg de2s3apercib de2s3apes de2s3aplic de2s3apolill de2s3apoy de2s3aprend de2s3apret de2s3apriet de2s3aprob de2s3apropi de2s3aprovech de2s3arbol de2s3aren de2s3arm des4arme de2s3arraig de2s3arregl de2s3arrend de2s3arrim desa3rroll de2s3arrop de2s3arrug de2s3articul de2s3asent de2s3asist de2s3asn desa3soseg desa3sosieg de2s3atenc de2s3atend de2s3atiend de2s3atent desa3tin de2s3atorn de2s3atranc de2s3autor de2s3avis desa3yun desa3zón desa3zon de2s3embal de2s3embál de2s3embar de2s3embár de2s3embarg de2s3embols de2s3emborr de2s3embosc de2s3embot de2s3embrag de2s3embrág de2s3embrave de2s3embráve de2s3embroll de2s3embróll de2s3embruj de2s3embrúj de3semej de2s3empañ de2s3empáñ de2s3empac de2s3empaquet de2s3empaquét de2s3emparej de2s3emparéj de2s3emparent de2s3empat de2s3empé de2s3empedr de2s3empeg de2s3empeor de2s3emperez de2s3empern de2s3emple de2s3empolv de2s3empotr de2s3empoz de2s3enam de2s3encab de2s3encad de2s3encaj de2s3encáj de2s3encall de2s3encáll de2s3encam de3sencant de2s3encap de2s3encar de2s3encár de2s3ench de2s3encl de2s3enco de2s3encr de2s3encu de2s3end de3senfad de3senfád de2s3enfi de2s3enfo de2s3enfó de3senfren de2s3enfund de2s3enfur de3sengañ de3sengáñ de2s3enganch de2s3engar de2s3engas de2s3engom de2s3engoz de2s3engra de2s3enhebr de2s3enj de2s3enlad de2s3enlaz de2s3enlo de2s3enm de2s3enr de2s3ens de2s3enta de3sentend de3sentien de3sentién de2s3enter de2s3entier de2s3entiér de2s3ento de2s3entr de2s3entu de2s3envain de3senvolvim de3seo de2s3eq de3s4erci de3s4ert de3s4ért de2s3espa de3sesperac de2s3esperanz de3sesper de2s3estabil de2s3estim de3sider de3sidia de3sidio de3siert de3sign de3sigual de3silusi de2s3imagin de2s3iman de2s3impon de2s3impres de2s3incent de2s3inclin de2s3incorp de2s3incrust de3sinenc de3sinfec de3su3dar de3su3das de3su3dan de2s3inflam de2s3infl de2s3inform de2s3inhib de2s3insect de2s3instal ini3ci iní3ci de3s4integr de3s4inter de2s3intox de2s3inver de3sisten de3isti de2s3obedec de2s3oblig de2s3obstr de3socup de2s3odor de3solac de3solad de3soll de2s3orej de2s3orient de3sortij de2s3organi de3suell de3sonce de2s3ovi de2s3oxi de2s3oye de2s3oyé de3s4ubstan de3s4ustan de3s4oseg de2s3ub4ic de2s3unir de2s3unier de2s3unim .dieci1o2 dodeca1h dodeca1a2 dodeca1e2 dodeca1i2 dodeca1o2 dodeca1u2 dodeca1á2 dodeca1é2 dodeca1í2 dodeca1ó2 dodeca1ú2 ecano1h ecano1a2 ecano1e2 ecano1i2 ecano1o2 ecano1u2 ecano1á2 ecano1é2 ecano1í2 ecano1ó2 ecano1ú2 eco1h eco1a2 eco1e2 eco1i2 eco1o2 eco1u2 eco1á2 eco1é2 eco1í2 eco1ó2 eco1ú2 ectro1h ectro1a2 ectro1e2 ectro1i2 ectro1o2 ectro1u2 ectro1á2 ectro1é2 ectro1í2 ectro1ó2 ectro1ú2 .en2a2 .en2e2 .en2i2 .en2o2 .en2u2 .en2á2 .en2é2 .en2í2 .en2ó2 .en2ú2 .ene3mist .ene3míst .eno3jar .enu3mera .enu3merá .enu3mere 4o3lógico. 4o3lógica. 4o3lógicos. 4o3lógicas. 4o3lógicamente. 4o3logía. 4o3logías. 4ó3logo. 4ó3loga. 4ó3logos. 4ó3logas. endo1h endo1a2 endo1e2 endo1i2 endo1o2 endo1u2 endo1á2 endo1é2 endo1í2 endo1ó2 endo1ú2 ento1h ento1a2 ento1e2 ento1i2 ento1o2 ento1u2 ento1á2 ento1é2 ento1í2 ento1ó2 ento1ú2 4emboca entre1h entre1a2 entre1e2 entre1i2 entre1o2 entre1u2 entre1á2 entre1é2 entre1í2 entre1ó2 entre1ú2 euco1h euco1a2 euco1e2 euco1i2 euco1o2 euco1u2 euco1á2 euco1é2 euco1í2 euco1ó2 euco1ú2 euro1h euro1a2 euro1e2 euro1i2 euro1o2 euro1u2 euro1á2 euro1é2 euro1í2 euro1ó2 euro1ú2 extra1h extra1a2 extra1e2 extra1i2 extra1o2 extra1u2 extra1á2 extra1é2 extra1í2 extra1ó2 extra1ú2 u4teri .cau5t .deu5t fono1h fono1a2 fono1e2 fono1i2 fono1o2 fono1u2 fono1á2 fono1é2 fono1í2 fono1ó2 fono1ú2 foto1h foto1a2 foto1e2 foto1i2 foto1o2 foto1u2 foto1á2 foto1é2 foto1í2 foto1ó2 foto1ú2 gastro1h gastro1a2 gastro1e2 gastro1i2 gastro1o2 gastro1u2 gastro1á2 gastro1é2 gastro1í2 gastro1ó2 gastro1ú2 geo1h geo1a2 geo1e2 geo1i2 geo1o2 geo1u2 geo1á2 geo1é2 geo1í2 geo1ó2 geo1ú2 gluco1h gluco1a2 gluco1e2 gluco1i2 gluco1o2 gluco1u2 gluco1á2 gluco1é2 gluco1í2 gluco1ó2 gluco1ú2 hecto1h hecto1a2 hecto1e2 hecto1i2 hecto1o2 hecto1u2 hecto1á2 hecto1é2 hecto1í2 hecto1ó2 hecto1ú2 helio1h helio1a2 helio1e2 helio1i2 helio1o2 helio1u2 helio1á2 helio1é2 helio1í2 helio1ó2 helio1ú2 hemato1h hemato1a2 hemato1e2 hemato1i2 hemato1o2 hemato1u2 hemato1á2 hemato1é2 hemato1í2 hemato1ó2 hemato1ú2 hemi1h hemi1a2 hemi1e2 hemi1i2 hemi1o2 hemi1u2 hemi1á2 hemi1é2 hemi1í2 hemi1ó2 hemi1ú2 hemo1h hemo1a2 hemo1e2 hemo1i2 hemo1o2 hemo1u2 hemo1á2 hemo1é2 hemo1í2 hemo1ó2 hemo1ú2 2al. 2ales. hexa1h hexa1a2 hexa1e2 hexa1i2 hexa1o2 hexa1u2 hexa1á2 hexa1é2 hexa1í2 hexa1ó2 hexa1ú2 hidro1h hidro1a2 hidro1e2 hidro1i2 hidro1o2 hidro1u2 hidro1á2 hidro1é2 hidro1í2 hidro1ó2 hidro1ú2 hipe2r3r hipe2r1a2 hipe2r1e2 hipe2r1i2 hipe2r1o2 hipe2r1u2 hipe2r1á2 hipe2r1é2 hipe2r1í2 hipe2r1ó2 hipe2r1ú2 pe3r4e3mia histo1h histo1a2 histo1e2 histo1i2 histo1o2 histo1u2 histo1á2 histo1é2 histo1í2 histo1ó2 histo1ú2 homo1h homo1a2 homo1e2 homo1i2 homo1o2 homo1u2 homo1á2 homo1é2 homo1í2 homo1ó2 homo1ú2 icono1h icono1a2 icono1e2 icono1i2 icono1o2 icono1u2 icono1á2 icono1é2 icono1í2 icono1ó2 icono1ú2 .i2n2a2 .i2n2e2 .i2n2i2 .i2n2o2 .i2n2u2 .i2n2á2 .i2n2é2 .i2n2í2 .i2n2ó2 .i2n2ú2 .in3abord .in3abarc .in3acent .in3aguant .in3adapt .ina3movib .in3analiz .ina3nic .in3anim .iná3nim .in3apel .in3aplic .in3aprens .in3apreci .in3arrug .in3asist .iné3dit .in3efic .in3efici .in3eludi .ine3narr ini3cia iní3cia ini3ciá ini3cie .rei3na re3ini3cia re3iní3cia re3ini3ciá re3ini3cie .ini3cuo .ini3cua .ino3cuo .ino3cua .ino3cula .ino3culá .ino3cule .inú3til .inu3tiliz infra1h infra1a2 infra1e2 infra1i2 infra1o2 infra1u2 infra1á2 infra1é2 infra1í2 infra1ó2 infra1ú2 .inte2r3r .inte2r1a2 .inte2r1e2 .inte2r1i2 .inte2r1o2 .inte2r1u2 .inte2r1á2 .inte2r1é2 .inte2r1í2 .inte2r1ó2 .inte2r1ú2 .in3ter2e3sa .in3ter2e3se .in3ter2e3so .in3ter2e3sá .in3ter2e3sé .in3ter2e3só .de3s4in3ter2e3sa .de3s4in3ter2e3se .de3s4in3ter2e3so .de3s4in3ter2e3sá .de3s4in3ter2e3sé .de3s4in3ter2e3só 3te3ri3n 4te4r5i4nsu .in3te3r4rog .in3te3r4rupc .in3te3r4rupt .in3te3r4rump intra1h intra1a2 intra1e2 intra1i2 intra1o2 intra1u2 intra1á2 intra1é2 intra1í2 intra1ó2 intra1ú2 iso1h iso1a2 iso1e2 iso1i2 iso1o2 iso1u2 iso1á2 iso1é2 iso1í2 iso1ó2 iso1ú2 kilo1h kilo1a2 kilo1e2 kilo1i2 kilo1o2 kilo1u2 kilo1á2 kilo1é2 kilo1í2 kilo1ó2 kilo1ú2 macro1h macro1a2 macro1e2 macro1i2 macro1o2 macro1u2 macro1á2 macro1é2 macro1í2 macro1ó2 macro1ú2 mal2 ma4l3h .ma4l3e4du mal3b mal3c mal3d mal3f mal3g mal3m mal3p mal3q mal3s mal3t mal3v bien2 bien3h bien3v bien3q bien3m bien3t b4ien3do. .su3b4ien b4ien3das. maxi1h maxi1a2 maxi1e2 maxi1i2 maxi1o2 maxi1u2 maxi1á2 maxi1é2 maxi1í2 maxi1ó2 maxi1ú2 megalo1h megalo1a2 megalo1e2 megalo1i2 megalo1o2 megalo1u2 megalo1á2 megalo1é2 megalo1í2 megalo1ó2 megalo1ú2 mega1h mega1a2 mega1e2 mega1i2 mega1o2 mega1u2 mega1á2 mega1é2 mega1í2 mega1ó2 mega1ú2 melano1h melano1a2 melano1e2 melano1i2 melano1o2 melano1u2 melano1á2 melano1é2 melano1í2 melano1ó2 melano1ú2 micro1h micro1a2 micro1e2 micro1i2 micro1o2 micro1u2 micro1á2 micro1é2 micro1í2 micro1ó2 micro1ú2 mili1h mili1a2 mili1e2 mili1i2 mili1o2 mili1u2 mili1á2 mili1é2 mili1í2 mili1ó2 mili1ú2 familia3ri ia5res. amili6a a3rio li5área mini1h mini1a2 mini1e2 mini1i2 mini1o2 mini1u2 mini1á2 mini1é2 mini1í2 mini1ó2 mini1ú2 2os. 2o3so. 2o3sos. 2o3sa. 2o3sas. 2o3samente. mini4a5tur multi1h multi1a2 multi1e2 multi1i2 multi1o2 multi1u2 multi1á2 multi1é2 multi1í2 multi1ó2 multi1ú2 miria1h miria1a2 miria1e2 miria1i2 miria1o2 miria1u2 miria1á2 miria1é2 miria1í2 miria1ó2 miria1ú2 mono1h mono1a2 mono1e2 mono1i2 mono1o2 mono1u2 mono1á2 mono1é2 mono1í2 mono1ó2 mono1ú2 2i3co. 2i3cos. 2i3ca. 2i3cas. namo1h namo1a2 namo1e2 namo1i2 namo1o2 namo1u2 namo1á2 namo1é2 namo1í2 namo1ó2 namo1ú2 necro1h necro1a2 necro1e2 necro1i2 necro1o2 necro1u2 necro1á2 necro1é2 necro1í2 necro1ó2 necro1ú2 neo1h neo1a2 neo1e2 neo1i2 neo1o2 neo1u2 neo1á2 neo1é2 neo1í2 neo1ó2 neo1ú2 neto1h neto1a2 neto1e2 neto1i2 neto1o2 neto1u2 neto1á2 neto1é2 neto1í2 neto1ó2 neto1ú2 norte1h norte1a2 norte1e2 norte1i2 norte1o2 norte1u2 norte1á2 norte1é2 norte1í2 norte1ó2 norte1ú2 octo1h octo1a2 octo1e2 octo1i2 octo1o2 octo1u2 octo1á2 octo1é2 octo1í2 octo1ó2 octo1ú2 octa1h octa1a2 octa1e2 octa1i2 octa1o2 octa1u2 octa1á2 octa1é2 octa1í2 octa1ó2 octa1ú2 oligo1h oligo1a2 oligo1e2 oligo1i2 oligo1o2 oligo1u2 oligo1á2 oligo1é2 oligo1í2 oligo1ó2 oligo1ú2 omni1h omni1a2 omni1e2 omni1i2 omni1o2 omni1u2 omni1á2 omni1é2 omni1í2 omni1ó2 omni1ú2 i2o. i2os. paleo1h paleo1a2 paleo1e2 paleo1i2 paleo1o2 paleo1u2 paleo1á2 paleo1é2 paleo1í2 paleo1ó2 paleo1ú2 para1h para1a2 para1e2 para1i2 para1o2 para1u2 para1á2 para1é2 para1í2 para1ó2 para1ú2 para2is. aí5so. aí5sos. penta1h penta1a2 penta1e2 penta1i2 penta1o2 penta1u2 penta1á2 penta1é2 penta1í2 penta1ó2 penta1ú2 piezo1h piezo1a2 piezo1e2 piezo1i2 piezo1o2 piezo1u2 piezo1á2 piezo1é2 piezo1í2 piezo1ó2 piezo1ú2 pluri1h pluri1a2 pluri1e2 pluri1i2 pluri1o2 pluri1u2 pluri1á2 pluri1é2 pluri1í2 pluri1ó2 pluri1ú2 poli1h poli1a2 poli1e2 poli1i2 poli1o2 poli1u2 poli1á2 poli1é2 poli1í2 poli1ó2 poli1ú2 poli4u3r poli4o5mie poli4arq poli4árq poli4éste poli4andr poli4antea expoli4 .pos2t2a2 .pos2t2e2 .pos2t2i2 .pos2t2o2 .pos2t2u2 .pos2t2á2 .pos2t2é2 .pos2t2í2 .pos2t2ó2 .pos2t2ú2 .pos3tin .pos3tín pos3ta. pos3tas. s3te. s3tes. s3tal. s3ta3les. s3ti3lla. s3ti3llas. s3ti3llón. s3ti3llones. .pos3tó3ni .pos3terg .pos3te3ri .pos3ti3go .pos3ti3la .pos3ti3ne .pos3ti3za .pos3ti3zo .pos3tu3ra s3tor. s3tora. s3toras. s3tores. .pos3tu3la .pos3tu3lá .pos3tu3le .pos3tu3lé .post3elec .post3impr .post3ind .post3ope .post3rev .pre2a2 .pre2e2 .pre2i2 .pre2o2 .pre2u2 .pre2h2 .pre2á2 .pre2é2 .pre2í2 .pre2ó2 .pre2ú2 pre3elij pre3elig pre3exis pre3emin preo3cup preo2cúp pre3olí pre3opin .pro2a2 .pro2e2 .pro2i2 .pro2o2 .pro2u2 .pro2h2 .pro2á2 .pro2é2 .pro2í2 .pro2ó2 .pro2ú2 proto1h proto1a2 proto1e2 proto1i2 proto1o2 proto1u2 proto1á2 proto1é2 proto1í2 proto1ó2 proto1ú2 radio1h radio1a2 radio1e2 radio1i2 radio1o2 radio1u2 radio1á2 radio1é2 radio1í2 radio1ó2 radio1ú2 ranco1h ranco1a2 ranco1e2 ranco1i2 ranco1o2 ranco1u2 ranco1á2 ranco1é2 ranco1í2 ranco1ó2 ranco1ú2 .re2a2 .re3e4 .re2i2 .re2o2 .re2u2 .re2á2 .re2é2 .re2í2 .re2ó2 .re2ú2 ea3cio. ea3cios. ea3cia. ea3cias. .re3abr .re3ábr .re3afirm .re3afírm .re3ajust .rea3júst .rea3liza .rea3lizá .rea3líza .re3alim .rea3lism .rea3list .re3anim .re3aním .re3aparec .re3ubica .re3ubíca .reu3mati .reu3máti .re3unir .re3unír .re3usar .re3usár .re3utiliz .re3utilíz rmano1h rmano1a2 rmano1e2 rmano1i2 rmano1o2 rmano1u2 rmano1á2 rmano1é2 rmano1í2 rmano1ó2 rmano1ú2 retro1h retro1a2 retro1e2 retro1i2 retro1o2 retro1u2 retro1á2 retro1é2 retro1í2 retro1ó2 retro1ú2 romo1h romo1a2 romo1e2 romo1i2 romo1o2 romo1u2 romo1á2 romo1é2 romo1í2 romo1ó2 romo1ú2 sobre1h sobre1a2 sobre1e2 sobre1i2 sobre1o2 sobre1u2 sobre1á2 sobre1é2 sobre1í2 sobre1ó2 sobre1ú2 semi1h semi1a2 semi1e2 semi1i2 semi1o2 semi1u2 semi1á2 semi1é2 semi1í2 semi1ó2 semi1ú2 i2a. i2as. 2ótic emi2o2 seudo1h seudo1a2 seudo1e2 seudo1i2 seudo1o2 seudo1u2 seudo1á2 seudo1é2 seudo1í2 seudo1ó2 seudo1ú2 o2os. .so3a4s socio1h socio1a2 socio1e2 socio1i2 socio1o2 socio1u2 socio1á2 socio1é2 socio1í2 socio1ó2 socio1ú2 a3rio. a3rios. 3logía 4ón. 4ones. 4i4er. 4o2ico. 4o2icos. 4o2ica. 4o2icas. .su2b2a2 .su2b2e2 .su2b2i2 .su2b2o2 .su2b2u2 .su2b2á2 .su2b2é2 .su2b2í2 .su2b2ó2 .su2b2ú2 .sub2i3ll .sub2i3mien .sub3índ .sub3ími .su4b3ray .sub3aflue .sub3arr .sub3enten .sub3estim .sub3estím .sub3ofici .sub3urba .sub3alter .sub3insp .su3bién .su3bir .su3bam .su3bordin .su3bordín .sub3acuá .sub3espe .sub3esta .su3burbi .su4b5rein supe2r3r supe2r1a2 supe2r1e2 supe2r1i2 supe2r1o2 supe2r1u2 supe2r1á2 supe2r1é2 supe2r1í2 supe2r1ó2 supe2r1ú2 supe3r4a4r supe3r4á4r supe3r4á3vit. supe3r4á3vits. 4a3ción. 4a3ciones. 4e3rior. 4e3riores. 4e3riora. 4e3rioras. 4e3riormente. 4e3rioridad. 4e3rioridades. 4e3ra3ble. 4e3ra3bles. 4e3ra3blemente. pe5r4ante perpon5d6r supra1h supra1a2 supra1e2 supra1i2 supra1o2 supra1u2 supra1á2 supra1é2 supra1í2 supra1ó2 supra1ú2 sup6ra talmo1h talmo1a2 talmo1e2 talmo1i2 talmo1o2 talmo1u2 talmo1á2 talmo1é2 talmo1í2 talmo1ó2 talmo1ú2 tele1h tele1a2 tele1e2 tele1i2 tele1o2 tele1u2 tele1á2 tele1é2 tele1í2 tele1ó2 tele1ú2 4ósteo. 4ósteos. termo1h termo1a2 termo1e2 termo1i2 termo1o2 termo1u2 termo1á2 termo1é2 termo1í2 termo1ó2 termo1ú2 tetra1h tetra1a2 tetra1e2 tetra1i2 tetra1o2 tetra1u2 tetra1á2 tetra1é2 tetra1í2 tetra1ó2 tetra1ú2 topo1h topo1a2 topo1e2 topo1i2 topo1o2 topo1u2 topo1á2 topo1é2 topo1í2 topo1ó2 topo1ú2 tropo1h tropo1a2 tropo1e2 tropo1i2 tropo1o2 tropo1u2 tropo1á2 tropo1é2 tropo1í2 tropo1ó2 tropo1ú2 poi3de. poi3des. ultra1h ultra1a2 ultra1e2 ultra1i2 ultra1o2 ultra1u2 ultra1á2 ultra1é2 ultra1í2 ultra1ó2 ultra1ú2 xeno1h xeno1a2 xeno1e2 xeno1i2 xeno1o2 xeno1u2 xeno1á2 xeno1é2 xeno1í2 xeno1ó2 xeno1ú2 inter4és inter4esar inter4in inter4ino inter4ior mili4ar mili4ario para4íso para4ulata super4able super4ación super4ior tran4sacc trans4ar trans4eúnte trans4iber trans4ición trans4ido trans4igen trans4igir trans4istor trans4itab trans4it trans4itorio trans4ubsta ultra4ísmo wa3s4h .bi1anual .bi1aur .bien1and .bien1apa .bien1ave .bien1est .bien1int .bi1ox .bi1ó2x .bi1un .en1aceit .en1aciy .en1aguach .en1aguaz .en1anch .en1apa .en1arb .en1art .en2artr .en1ej .hepta1e .intra1o .intra1u .mal1acon .mal1acos .mala1e .mal1andant .mal1andanz .mal1est .mal1int .pa4n1a4meri .pa4n1europ .pa4n1afri .pa4n1ópti 3p2sic 3p2siq .re3a2eg .re3a2q .re3a2z .re3a2grup .re3i2m .re3inc .re3ing .re3ins .re3int .re3o2b .re1oc .re1oj .re3orga .re1unt .retro1a .su2d1a2fr .su2d1a2me .su2d1est su4d3oes .sur1a2me .sur1est .sur1oes .tele1imp .tele1obj .tra2s1a .tra2s1o .tra2s2oñ .tran2s1alp .tran2s1and .tran2s1atl .tran2s1oce .tran2s1ur .tri1ó2x", ["length"]=27710, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=3371, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pt.lua0000644000175000017500000001356412161703335024676 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="adefhorstw", ["data"]="hard-ware soft-ware", ["length"]=19, ["n"]=2, }, ["metadata"]={ ["mnemonic"]="pt", ["source"]="hyph-pt", ["texcomment"]="% Portuguese hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: pthyph.tex (1994-10-13 - date on CTAN) or (1996-07-21 - date in file) - no idea\ % Author: Pedro J. de Rezende , J.Joao Dias Almeida \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ % The Portuguese TeX hyphenation table.\ % (C) 1996 by Pedro J. de Rezende (rezende@dcc.unicamp.br)\ % and J.Joao Dias Almeida (jj@di.uminho.pt)\ % Version: 1.2 Release date: 21/07/96\ %\ % (C) 1994 by Pedro J. de Rezende (rezende@dcc.unicamp.br)\ % Version: 1.1 Release date: 04/12/94\ %\ % (C) 1987 by Pedro J. de Rezende\ % Version: 1.0 Release date: 02/13/87\ %\ % -----------------------------------------------------------------\ % IMPORTANT NOTICE:\ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ % -----------------------------------------------------------------\ % Remember! If you *must* change it, then call the resulting file\ % something else and attach your name to your *documented* changes.\ % ======================================================================\ %\ % ", }, ["patterns"]={ ["characters"]="-abcdefghijklmnopqrstuvwxzáâãçéêíóôõú", ["data"]="1b2l 1b2r 1ba 1be 1bi 1bo 1bu 1bá 1bâ 1bã 1bé 1bí 1bó 1bú 1bê 1bõ 1c2h 1c2l 1c2r 1ca 1ce 1ci 1co 1cu 1cá 1câ 1cã 1cé 1cí 1có 1cú 1cê 1cõ 1ça 1çe 1çi 1ço 1çu 1çá 1çâ 1çã 1çé 1çí 1çó 1çú 1çê 1çõ 1d2l 1d2r 1da 1de 1di 1do 1du 1dá 1dâ 1dã 1dé 1dí 1dó 1dú 1dê 1dõ 1f2l 1f2r 1fa 1fe 1fi 1fo 1fu 1fá 1fâ 1fã 1fé 1fí 1fó 1fú 1fê 1fõ 1g2l 1g2r 1ga 1ge 1gi 1go 1gu 1gu4a 1gu4e 1gu4i 1gu4o 1gá 1gâ 1gã 1gé 1gí 1gó 1gú 1gê 1gõ 1ja 1je 1ji 1jo 1ju 1já 1jâ 1jã 1jé 1jí 1jó 1jú 1jê 1jõ 1k2l 1k2r 1ka 1ke 1ki 1ko 1ku 1ká 1kâ 1kã 1ké 1kí 1kó 1kú 1kê 1kõ 1l2h 1la 1le 1li 1lo 1lu 1lá 1lâ 1lã 1lé 1lí 1ló 1lú 1lê 1lõ 1ma 1me 1mi 1mo 1mu 1má 1mâ 1mã 1mé 1mí 1mó 1mú 1mê 1mõ 1n2h 1na 1ne 1ni 1no 1nu 1ná 1nâ 1nã 1né 1ní 1nó 1nú 1nê 1nõ 1p2l 1p2r 1pa 1pe 1pi 1po 1pu 1pá 1pâ 1pã 1pé 1pí 1pó 1pú 1pê 1põ 1qu4a 1qu4e 1qu4i 1qu4o 1ra 1re 1ri 1ro 1ru 1rá 1râ 1rã 1ré 1rí 1ró 1rú 1rê 1rõ 1sa 1se 1si 1so 1su 1sá 1sâ 1sã 1sé 1sí 1só 1sú 1sê 1sõ 1t2l 1t2r 1ta 1te 1ti 1to 1tu 1tá 1tâ 1tã 1té 1tí 1tó 1tú 1tê 1tõ 1v2l 1v2r 1va 1ve 1vi 1vo 1vu 1vá 1vâ 1vã 1vé 1ví 1vó 1vú 1vê 1võ 1w2l 1w2r 1xa 1xe 1xi 1xo 1xu 1xá 1xâ 1xã 1xé 1xí 1xó 1xú 1xê 1xõ 1za 1ze 1zi 1zo 1zu 1zá 1zâ 1zã 1zé 1zí 1zó 1zú 1zê 1zõ a3a a3e a3o c3c e3a e3e e3o i3a i3e i3i i3o i3â i3ê i3ô o3a o3e o3o r3r s3s u3a u3e u3o u3u 1-", ["length"]=1444, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=307, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nn.hyp0000644000175000017500000000022611761001300024660 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-nn.rme % used: a b d e n r t \hyphenation{ att-en-de bet-re}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sk.pat0000644000175000017500000004617311761001300024661 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sk.rme % used: a b c d e f g h i j k l m n o p r s t u v w x y z á ä é í ó ô ú ý č ď ľ ň ŕ š ť ž \patterns{ a1 á1 ä1 e1 é1 i1 í1 o1 ó1 ô1 u1 ú1 y1 ý1 i2a i2á i2e i2u o2u c2h d2z d2ž 2b1b 2b1c 2b1č 2b1d 2b1ď 2b1f 2b1g 2b1h 2b1c2h 2b1j 2b1k 2b1l 2b1ľ 2b1m 2b1n 2b1ň 2b1p 2b1r 2b1s 2b1š 2b1t 2b1ť 2b1v 2b1w 2b1x 2b1z 2b1ž 2b1d2z 2b1d2ž 2c1b 2c1c 2c1č 2c1d 2c1ď 2c1f 2c1g 2c1c2h 2c1j 2c1k 2c1l 2c1ľ 2c1m 2c1n 2c1ň 2c1p 2c1r 2c1s 2c1š 2c1t 2c1ť 2c1v 2c1w 2c1x 2c1z 2c1ž 2c1d2z 2c1d2ž 2č1b 2č1c 2č1č 2č1d 2č1ď 2č1f 2č1g 2č1h 2č1c2h 2č1j 2č1k 2č1l 2č1ľ 2č1m 2č1n 2č1ň 2č1p 2č1r 2č1s 2č1š 2č1t 2č1ť 2č1v 2č1w 2č1x 2č1z 2č1ž 2č1d2z 2č1d2ž 2d1b 2d1c 2d1č 2d1d 2d1ď 2d1f 2d1g 2d1h 2d1c2h 2d1j 2d1k 2d1l 2d1ľ 2d1m 2d1n 2d1ň 2d1p 2d1r 2d1s 2d1š 2d1t 2d1ť 2d1v 2d1d2z 2d1d2ž 2ď1b 2ď1c 2ď1č 2ď1d 2ď1ď 2ď1f 2ď1g 2ď1h 2ď1c2h 2ď1j 2ď1k 2ď1l 2ď1ľ .as4t4ro3 .atmo3 .a2u1to3 2ď1m 2ď1n 2ď1ň 2ď1p 2ď1r 2ď1s 2ď1š 2ď1t 2ď1ť 2ď1v 2ď1z 2ď1ž 2ď1d2z 2ď1d2ž 2f1b 2f1c 2f1č 2f1d 2f1ď 2f1f 2f1g 2f1h 2f1c2h 2f1j 2f1k 2f1l 2f1ľ 2f1m 2f1n 2f1ň 2f1p 2f1r 2f1s 2f1š 2f1t 2f1ť 2f1v 2f1z 2f1ž 2f1d2z 2f1d2ž 2g1b 2g1c 2g1č 2g1d 2g1ď 2g1f 2g1g 2g1h 2g1c2h 2g1j 2g1k 2g1l 2g1ľ 2g1m 2g1n 2g1ň 2g1p 2g1r 2g1s 2g1š 2g1t 2g1ť 2g1v 2g1z 2g1ž 2g1d2z 2g1d2ž 2h1b 2h1c 2h1č 2h1d 2h1ď 2h1f 2h1g 2h1h 2h1c2h 2h1j 2h1k 2h1l 2h1ľ 2h1m 2h1n 2h1ň 2h1p 2h1r 2h1s 2h1š 2h1t 2h1ť 2h1v 2h1z 2h1ž 2h1d2z 2h1d2ž 2c2h1b 2c2h1c 2c2h1č 2c2h1d 2c2h1ď 2c2h1f 2c2h1g 2c2h1h 2c2h1c2h 2c2h1j 2c2h1k 2c2h1l 2c2h1ľ 2c2h1m 2c2h1n 2c2h1ň 2c2h1p 2c2h1r 2c2h1s 2c2h1š 2c2h1t 2c2h1ť 2c2h1v 2c2h1w 2c2h1ž 2c2h1d2z 2c2h1d2ž 2j1b 2j1c 2j1č 2j1d 2j1ď 2j1f 2j1g 2j1h 2j1c2h 2j1j 2j1k 2j1l 2j1ľ 2j1m 2j1n 2j1ň 2j1p 2j1r 2j1s 2j1š 2j1t 2j1ť 2j1v 2j1w 2j1x 2j1z 2j1ž 2j1d2z 2j1d2ž 2k1b 2k1c 2k1č 2k1d 2k1ď 2k1f 2k1g 2k1h 2k1c2h 2k1j 2k1k 2k1l 2k1ľ 2k1m 2k1n 2k1ň 2k1p 2k1r 2k1s 2k1š 2k1t 2k1ť 2k1v 2k1w 2k1x 2k1z 2k1ž 2k1d2z 2k1d2ž 2l1b 2l1c 2l1č 2l1d 2l1ď 2l1f 2l1g 2l1h 2l1c2h 2l1j 2l1k 2l1l 2l1ľ 2l1m 2l1n 2l1ň 2l1p 2l1r 2l1s 2l1š 2l1t 2l1ť 2l1v 2l1z 2l1ž 2l1d2z 2l1d2ž 2ľ1b 2ľ1c 2ľ1č 2ľ1d 2ľ1ď 2ľ1f 2ľ1g 2ľ1h 2ľ1c2h 2ľ1j 2ľ1k 2ľ1l 2ľ1ľ 2ľ1m 2ľ1n 2ľ1ň 2ľ1p 2ľ1r 2ľ1s 2ľ1š 2ľ1t 2ľ1ť 2ľ1v 2ľ1z 2ľ1ž 2ľ1d2z 2ľ1d2ž 2m1b 2m1c 2m1č 2m1d 2m1ď 2m1f 2m1g 2m1h 2m1c2h 2m1j 2m1k 2m1l 2m1ľ 2m1m 2m1n 2m1ň 2m1p 2m1r 2m1s 2m1š 2m1t 2m1ť 2m1v 2m1z 2m1ž 2m1d2z 2m1d2ž 2n1b 2n1c 2n1č 2n1d 2n1ď 2n1f 2n1g 2n1h 2n1c2h 2n1j 2n1k 2n1l 2n1ľ 2n1m 2n1n 2n1ň 2n1p 2n1r 2n1s 2n1š 2n1t 2n1ť 2n1v 2n1w 2n1x 2n1z 2n1ž 2n1d2z 2n1d2ž 2ň1b 2ň1c 2ň1č 2ň1d 2ň1ď 2ň1f 2ň1g 2ň1h 2ň1c2h 2ň1j 2ň1k 2ň1l 2ň1ľ 2ň1m 2ň1n 2ň1ň 2ň1p 2ň1r 2ň1s 2ň1š 2ň1t 2ň1ť 2ň1v 2ň1z 2ň1ž 2ň1d2z 2ň1d2ž 2p1b 2p1c 2p1č 2p1d 2p1ď 2p1f 2p1g 2p1h 2p1c2h 2p1j 2p1k 2p1l 2p1ľ 2p1m 2p1n 2p1ň 2p1p 2p1r 2p1s 2p1š 2p1t 2p1ť 2p1v 2p1w 2p1x 2p1z 2p1ž 2p1d2z 2p1d2ž 2r1b 2r1c 2r1č 2r1d 2r1ď 2r1f 2r1g 2r1h 2r1c2h 2r1j 2r1k 2r1l 2r1ľ 2r1m 2r1n 2r1ň 2r1p 2r1r 2r1s 2r1š 2r1t 2r1ť 2r1v 2r1w 2r1x 2r1z 2r1ž 2r1d2z 2r1d2ž 2s1b 2s1c 2s1č 2s1d 2s1ď 2s1f 2s1g 2s1h 2s1c2h 2s1j 2s1k 2s1l 2s1ľ 2s1m 2s1n 2s1ň 2s1p 2s1r 2s1s 2s1š 2s1t 2s1ť 2s1v 2s1z 2s1ž 2s1d2z 2s1d2ž 2š1b 2š1c 2š1č 2š1d 2š1ď 2š1f 2š1g 2š1h 2š1c2h 2š1j 2š1k 2š1l 2š1ľ 2š1m 2š1n 2š1ň 2š1p 2š1r 2š1s 2š1š 2š1t 2š1ť 2š1v 2š1w 2š1x 2š1z 2š1ž 2š1d2z 2š1d2ž 2t1b 2t1c 2t1č 2t1d 2t1ď 2t1f 2t1g 2t1h 2t1c2h 2t1j 2t1k 2t1l 2t1ľ 2t1m 2t1n 2t1ň 2t1p 2t1r 2t1s 2t1š 2t1t 2t1ť 2t1v 2t1w 2t1x 2t1z 2t1ž 2t1d2z 2t1d2ž 2ť1b 2ť1c 2ť1č 2ť1d 2ť1ď 2ť1f 2ť1g 2ť1h 2ť1c2h 2ť1j 2ť1k 2ť1l 2ť1ľ 2ť1m 2ť1n 2ť1ň 2ť1p 2ť1r 2ť1s 2ť1š 2ť1t 2ť1ť 2ť1v 2ť1w 2ť1x 2ť1z 2ť1ž 2ť1d2z 2ť1d2ž 2v1b 2v1c 2v1č 2v1d 2v1ď 2v1f 2v1g 2v1h 2v1c2h 2v1j 2v1k 2v1l 2v1ľ 2v1m 2v1n 2v1ň 2v1p 2v1r 2v1s 2v1š 2v1t 2v1ť 2v1v 2v1w 2v1x 2v1z 2v1ž 2v1d2z 2v1d2ž 2z1b 2z1c 2z1č 2z1d 2z1ď 2z1f 2z1g 2z1h 2z1c2h 2z1j 2z1k 2z1l 2z1ľ 2z1m 2z1n 2z1ň 2z1p 2z1r 2z1s 2z1š 2z1t 2z1ť 2z1v 2z1z 2z1ž 2z1d2z 2z1d2ž 2ž1b 2ž1c 2ž1č 2ž1d 2ž1ď 2ž1f 2ž1g 2ž1h 2ž1c2h 2ž1j 2ž1k 2ž1l 2ž1ľ 2ž1m 2ž1n 2ž1ň 2ž1p 2ž1r 2ž1s 2ž1š 2ž1t 2ž1ť 2ž1v 2ž1z 2ž1ž 2ž1d2z 2ž1d2ž 2d2z1k 2d2z1n 2d2z1r 2d2z1s 2d2ž1š 2x1t 2x1n 2b1ŕ 2ŕ1b 2d2z1ŕ 2ŕ1d2z 2d2z1ľ 2ŕ1d2ž 2d2ž1ľ a1í2 a1o2 e1á2 e1í2 e1o2 e1ó2 e1u2 i1o2 o1a2 o1e2 o1i2 o1o2 u1a2 u1á2 u1i2 u1í2 u1o2 u1u2 y1a2 y1e2 y1ó2 y1u2 a2u1 a2i1 b2l3b 3b2l3č b2l3c2h 3b2l3k 3b2ľ3k 3b2l3ň b2l3š b2ľ3š 3b2r3b b2r3d 3b2r3k 3b2ŕ3k 3b2r3l 3b2ŕ3ľ 3b2r3n 3b2r3ň 3b2r3v b2r3z b3s2c b3s2t c3k2t 3c2r3č 3c2ŕ3č 3c2r3k 3c2ŕ3k c3t2v 3č2l3n 3č2r3č č2r3p 3č2r3t 3č2r3v d3c4h4n 3d2l3b 3d2l3h d2l3n 3d2l3ž 3d2ľ3ž 3d2r3d 3d2r3g d2r3l 3d2r3k 3d2r3m d2r3n 3d2r3v 3d2r3z 3d2r3ž 3d2ŕ3ž d3s2v d3s2t d3v2r 3f2r3č 3f2r3f 3f2r3k 3f2ŕ3k 3f2r3m 3f2r3n 3g2l3g 3g2r3c 3g2r3g 3h2l3b 3h2ľ3b 3h2l3t 3h2m2l 3h2r3b 3h2ŕ3b 3h2r3č 3h2r3d 3h2r3d2z 3h2r3k 3h2r3m 3h2r3n 3h2r3ň 3h2r3t 3h2r3v 3c2h2l3p 3c2h2r3b 3c2h2r3č c2h2r3c4h 3c2h2r3l 3c2h2r3t j2c2h3n j3s2t j3š2le j3t2m j3t2r 3k2l3b 3k2ľ3b 3k2l3č 3k2l3z 3k2ľ3z k2r3b 3k2r3č 3k2ŕ3č 3k2ŕ3d 3k2r3k 3k2ŕ3k 3k2ŕ3m 3k2r3p 3k2r3s 3k2r3t 3k2r3v k3s2ľ k2s3n k3t2r l3d2r ľ3k2n l3t2r m3b2l m3b2ľ m3b2r m3f2l m3f2r m3k2n 3m2l3č 3m2l3k m3p2l m3p2ľ m3p2r m3p2s 3m2r3h m2r3c4h 3m2r3k m2r3l m2r3š m2r3t 3m2r3v 3m2r3z 3m2ŕ3z m3s2t m3š2t n3dľa n3d2r n3f2l n3f2r n3g2h n3g2l n3g2ľ n2g3n n3g2r n3g2v n3k2c n3k2h n3k2n n3k2r n3k2v n3s2c n3š2p n3š2t n3t2g n3t2l n3t2n n3t2r n2ž3m 3p2l3n 3p2l3ň 3p2ľ3ň 3p2l3z 3p2ľ3z 3p2ľ3ž 3p2ŕ3c 3p2r3č 3p2r3d 3p2r3s 3p2r3š p3š2ť p3t2r r2b3n r3g2ľ r3g2r r3g2s r3k2d r2k3n r3k2t r3k2v r3p2c r3p2č r3p2r r3s2p r3š2č r3š2l r3š2r r2t3m r3t2n r2t3ň r3t2r r3t2v 3s4c4h4n s2k3l s2k3m s2k3n s3k2r s3k2v 3s2l3n 3s2l3ň 3s2l3z s3p2r 3s2r3d 3s4ŕ3k 3s4r3š s3t2k ôs4t3k2ár3s4t4v s2t3l s3t2m s2t3n s3t2r s3t2v s2ť3h s2ť3m s2ť3p š3k2l š3k2r š3t2r 3š4t4v t3k2l t3k2n 3t2l3č 3t2l3k t3h2l 3t4r3č 3t4r3h 3t2r3l 3t2r3k 3t2r3m a4t2r3n 3t2r3n 3t2ŕ3n 3t2ŕ3ň 3t4r3p 3t2r3v 3t2ŕ3ž 3v2l3č 3v2ľ3č 3v2l3h 3v2l3k 3v2l3n 3v2r3h 3v2r3c2h 3v2r3l 3v2ŕ3š 3v2ŕ3t 3v2r3z 3v2ŕ3z 3v4z4d 3v4z4h 3v4z4n 3v3z2ť z3d2n noz5d4r 3z4d4r 3z4d4v z3g2n 3z4h4r 3z2r3k 3z2r3n 3z4v4l ž2d3n 3ž2l3č 3ž2l3t 3ž2ľt 3ž2r3ď ž3s2t x3p2l x3p2r x3t2r 3b2l4č3n 3b2ľ4č3k 3b2l4n3k 3b2ľ3k2n 3b2r4b3l 3b2r4b3t 3b2r4č3k 3b2r4d3c 3b2ŕ4d3n 3b2r3h2l 3b4ŕ4k3n 3b4r4m3b 3b4r4n3č 3b4r4n3k 3b4r4š3l 3b4r4t3l 3b4r4t3n 3b4r4v3n 3b4r4z3d 3b4r4z3l 3b4r4z3n b3s2t2r 3c4ŕ4č3k 3c4r4k3n 3c4v4r3č 3c4v4r3k 3c4v4ŕ3k 3c4v4r3l 3č4l4n3k 3č4r3č4r 3č4r4c4h3n 3č4r4p3k 3č4r4p3n 3č4r4t3n 3č4v4r3k 3č4v4r3l 3d4l4b3n d4ľ4ž3k d4l4ž3n d4ľ4ž3n 3d4r4c3n 3d4r4g3ľ 3d4r4g3n 3d4r4h3n 3d4r4n3č 3d4r4n3k 3d4r4s3n 3d4r4ž3b 3d4r4ž3k 3f4r4c3k 3f4r4c3n 3f4r4č3k 3f4r4f3l 3f4r4k3n 3f4r4n3d 3f4r4n3d4ž 3f4r4n3g 3f4r4n3k 3g4l4g3n 3g2r4c3k 3h2ľ4b3k 3h2l3t4n 3h2r4b3č 3h2r4č3k h2r4d3l 3h2r4g3ľ 3h2r4k3ľ 3h2r4k3n 3h2ŕ4k3n 3h2r4n3č 3h2r4s3t 3h2r4s3ť 3ch4ľ4p3k 3c2h2r4b3t 3c2h2r4c4h3l 3c2h2r4c4h3ľ 3c4h4r4s3t j3s4t4r j3s4t4v 3k4l4b3č 3k4l4b3k 3k4l4z3k 3k4l4z3n 3k4r4č3m 3k4r4č3n 3k4r4k3v 3k4r4m3n 3k4ŕ4m3n 3k4r4p3č 3k4r4s3t 3k4r4š3t 3k4r4t3k 3k4r4v3n 3m2l4č3k 3m2ľ4k3n 3m2ľ4k3v 3m2l4s3n m3p4r3p m3p4r3v 3m4r4k3n 3m4r4k3v 3m4r4m3l 3m4r4n3č 3m4r4n3k 3m4ŕ4š3t 3m4ŕ4t3v 3m4r4z3l 3m4r4z3k 3m4r4z3n n4g3s4t n3š4t4r n3t4l3m 3p2l4z3l 3p2ľ4z3n p2ŕ4c3n 3p2r4č3k 3p4r4d3n 3p4ŕ4c2h3n 3p4r4s3k 3p4r4t3k r2s3k4d r2s3k4t čer4s3t4v 3s4l4n3k 3s4k4r3z 3s4m4r3c 3s4m4r3č 3s4m4r3d 3s4m4r3k 3s4m4r3t 3s4p4r3c4h 3s4r4d3c 3s4r4k3n 3s4r4s3t 3s4t4ľ3k s3t4r3b ko4s3t4r3č 3s4t4r3č 3s4t4ŕ3h 3s4t4r3k s4t4r3v 4s4ť5k4rát 3š4k4l3b 3š4k4r3k 3š4k4ŕ3k maš3k4r3t 3š4k4r3t 3š4p4l3h 3š4t4r3b š4t4r3n 3š4t4v4r3t 3š4t4v4r3ť 3t2ľ4c3ť 3t2r4b3l t2r4č3k 3t2r4d3l 3t2r4h3l 3t2r4h3n 3t2r4k3n 3t2r4k3v 3t2r4m3n 3t4ŕ4p3n 3t2r4ž3k 3t2r4ž3n 3t2v4r3d 3t2v4r3d4z 3t2v4ŕ3d4z 3v2l4h3č 3v2l4h3k 3v2l4h3n 3v2l4n3k 3v2l4n3n 3v4r4h3n 3v4r4k3n 3v4ŕ4z3g 3v4r4z3g 3v4r4z3n 3v4r4ž3l 3z4h4ŕ3ň 3z4r4n3n 3ž4l4č3n 3ž4l4t3n 3ž4r4d3k 3b4r4n3k4n b3d4ľ4ž3n 3c4v4r4č3k 3c4v4r4n3k 3č4ŕ4s3t4v 3č4r4t4t3n 3č4v4r4k3n 3d4r4ž3g4r 3f4r4n4g3n h2ŕ4s3t4k 3c4h4r4s4t3n 3k4r4s4t3n 3k4r4s4t3ň 3s4m4r4š3ť 3s4m4r4t3k s3t4r4n3k 3š4k4l4b3n maš3k4r4t3n 3š4k4r4t3n 3š4k4v4r3č 3š4k4v4r3k 3š4k4v4ŕ3k 3š4k4v4r3n 3š4m4r4d3k 3š4m4r4n3c 3š4p4l4h3n 3š4t4r4k3n 3š3t4r4n3g 3t4v4r4d3n 3v4r4s3t4v 3v4r4z3g4n 3c4v4r4n3g4n 3š4k4v4r4k3n 3š4k4v4ŕ4k3n k4č3ný. k4č3ného. k4č3nému. k4č3nom. k4č3ným. k4č3né. k4č3ná. k4č3nej. k4č3nú. k4č3nou. k4č3ní. k4č3ných. k4č3nými. k4t3ný. k4t3ného. k4t3nému. k4t3nom. k4t3ným. k4t3né. k4t3ná. k4t3nej. k4t3nú. k4t3nou. k4t3ní. k4t3ných. k4t3nými. n4č3ný. n4č3ného. n4č3nému. n4č3nom. n4č3ným. n4č3né. n4č3ná. n4č3nej. n4č3nú. n4č3nou. n4č3ní. n4č3ných. n4č3nými. n4k4č3n n4t3ný. n4t3ného. n4t3nému. n4t3nom. n4t3ným. n4t3né. n4t3ná. n4t3nej. n4t3nú. n4t3nou. n4t3ní. n4t3ných. n4t3nými. r4d3ný. r4d3ného. r4d3nému. r4d3nom. r4d3ným. r4d3né. r4d3ná. r4d3nej. r4d3nú. r4d3nou. r4d3ní. r4d3ných. r4d3nými. r4m3ný. r4m3ného. r4m3nému. r4m3nom. r4m3ným. r4m3né. r4m3ná. r4m3nej. r4m3nú. r4m3nou. r4m3ní. r4m3ných. r4m3nými. r4p4č3n r4t3ný. r4t3ného. r4t3nému. r4t3nom. r4t3ným. r4t3né. r4t3ná. r4t3nej. r4t3nú. r4t3nou. r4t3ní. r4t3ných. r4t3nými. s4t3ný. s4t3ného. s4t3nému. s4t3nom. s4t3ným. s4t3né. s4t3ná. s4t3nej. s4t3nú. s4t3nou. s4t3ní. s4t3ných. s4t3nými. z4d3ny. z4d3neho. z4d3nemu. z4d3nom. z4d3nym. z4d3ne. z4d3na. z4d3nej. z4d3nu. z4d3nou. z4d3ni. z4d3nych. z4d3nymi. z4d3ný. z4d3ného. z4d3nému. z4d3ným. z4d3né. z4d3ná. z4d3nú. z4d3ní. z4d3ných. z4d3nými. b2l4š3k l2t3k2a. l2t3k2y. l2t3k2e. l2t3k2u. l2t3k2ou. l2t3k2ám. l2t3k2ách. l2t3k2a1mi. n2t3k2a. n2t3k2y. n2t3k2e. n2t3k2u. n2t3k2ou. n2t3k2ám. n2t3k2ách. n2t3k2a1mi. n2k2t3k p2t3k2a. p2t3k2y. p2t3k2e. p2t3k2u. p2t3k2ou. p2t3k2ám. p2t3k2ách. p2t3k2a1mi. s2t3k2a. s2t3k2y. s2t3k2e. s2t3k2u. s2t3k2ou. s2t3k2ám. s2t3k2ách. s2t3k2a1mi. 5p4r4s3t b3s4k d3s4k j3s4k l4p3s4k l3s4k ľ3s4k l4t3s4k 4m3s4k 4m4p3s4k n4d3s4k n4k4t3s4k n3s4k n4t3s4k p3s4k p4t3s4k r3s4k r4t3s4k r4z5s4k 5s4r4b3s4k š3s4k t3s4k v3s4k z3s4k ž3s4k n2d3č z3š2t2 r4z3š2t2 b3s4t4v č3s4t4v d3s4t4v ď3s4t4v ľ3s4t4v m3s4t4v n3s4t4v n4t3s4t4v p3s4t4v r3s4t4v r4v5s4t4v š3s4t4v t3s4t4v v3s4t4v ž3s4t4v .a2e2ro .a2e2ro3d2r .aero3g2r .a2e2ro3k2l .aero3p2l .aero3s2k .aero3s2t .aero3t2r .akcie3s2c2h .ane3s2teti .ane3s2téz .anti5k4l .anti5k4r .apo5p4le .ap4rio .ap4rió .arci5k4 .aristo5k4 .as3k2lep .austro5s4 .bac2k3hand .balne2o3 .belo5 .belo5h4 .bez5 .bez5b4 .bez5d4 .bez5h4 .bez5k4 .bez5m4 .bez5p4 .bez5s4 .bez5t4 .bez5v4 .bez5z4 .bielo5 .bielob4 .bieloh4 .bielov4 .bi2o5 .biok4 .biop4 .bios4 .blaho5 .blahop4 .blahos4 .bledo5 .boha5p4 .boho5s4 .bože5 .bože5d4 .božec2h4 .brato5v4r .b2z2d .cáro5v4ra .celo5d4 .celo5k4 .celo5p4 .celo5s4 .celo5u4 .ceno5t4 .ces2t5maj .cirkevno5 .cirkevno5p4 .c4t4n .cudzo5k4 .cudzo5o4 .cudzo5s4 .cudzo5t4 .cudzo5v4 .cyto5p4 .čaro5k4 .čaro5s4 .čaro5v4 .čaro5z4 .černo5b4 .černo5h4 .černo5k4 .černo5o4 .červeno5a4 .červeno5b4 .červeno5h4 .červeno5k4 .červeno5o4 .červeno5p4 .čierno5b4 .čierno5h4 .čierno5o4 .čo5ch4 .čo5s4 .čudo5t4 .da3k2d .ďatelino5t4 .de5f4 .de5g4 .dek4l .desať5 .de5š4t2 .dez5i2 .dez5o2 .dis2k3d4 .divo5t4 .dlho5h4 .dlho5p4 .dobro5d4 .dobro5p4 .dobro5s4 .do5č2m .do5d4 .do5f4 .do5h4 .do5c4h4 .do5i4 .do5k4 .do5o .do5p4 .do5s4 .do5š4p .do5š4tie .do5š4tí .do5t4l .do5t4m .do5t4r .do5t4v .do5u .do5v4 .do5z4 .do5ž4 .drevo5p4 .drevo5o .drevo5v4 .drobno5z4 .druho5s4 .dvoj5al .dvoj5č4 .dvoj5d4 .dvoj5h4 .dvoj5i4 .dvoj5k4 .dvoj5p4 .dvoj5s4 .dvoj5t4 .dvoj5u .dvoj5v4 .dvoj5z4 .elektro5 .ex5k4 .fol2k5 .foto5 .gala5p4 .gama5g4 .ge4o .hnedo5o .hnedo5u .holo5b4 .holo5h4 .holo5k4 .hore5z4 .horno5u4 .hrôzo5s4t4 .hrôzo5v4 .hrôzy5p4 .hrubo5s4 .hydro5 .chorobo5p4 .jasno5o .jasno5z4 .jedno5h4 .jedno5i4 .jedno5p4 .jedno5s4 .jedno5u4 .jedno5z4 .juho5a .juho5s4 .južno5s4 .kata5k4 .kata5s4t4 .kmeňo5t4 .koso5d4 .koso5š4 .koso5u .krivo5p4 .kruto5v4 .krvi5p4 .krvi5s4 .krvi5t4 .ktovie5a2 .lásky5p4 .lesos4 .ľ4s4t .ľudovo5u .makro5k4 .makro5o4 .makro5s4 .málo5k4 .malo5o .málo5v4 .márno5t4 .medzi5h4 .medzi5i4 .medzi5p4 .medzi5š4 .medzi5t4 .melo5d4 .meru5ô2 .miesto5d4 .miesto5p4 .mikro5e4 .mikro5k4 .mikro5o .mikro5p4 .mimo5š4 .mimo5ú .mimo5v4 .mnoho5s4 .mnoho5t4 .mnoho5u .mnoho5v .mnoho5z .modro5o .mrako5d4 .mravo5u .mucho5t4 .m4z4d .na5a4 .na5b4 .na5c4 .nad5h4 .na5d4nes. .nad5p4 .na5d4p4. .na5d4ŕ4. .na5d4robno. .na5h4 .na5i4 .na5k4 .na5m4 .na5o4 .na5p4 .ná5p4 .národno5o .na5s4 .na5st4 .ná5s4 .ná5st4 .na5š4 .na5šk4 .na6š5sk .na5t4 .na5u4 .na5ú4 .ná5u4 .ná5ú4 .na5v4l .na5v4na .na5v4r4 .ná5v4r4 .na5v4z4 .na5z4r .na5z4v .na6z5vyš .náz5v4 .na5ž4 .ne5a4 .ne5do3u2k .ne5e4 .ne5i4 .ne5m4 .ne5na5h4 .ne5na5i4 .ne5na5k4 .ne5na5m4 .ne5na5p4 .ne5na5s4 .ne5na5t4 .ne5p4 .ne5s4 .ne6s5tor .ne5š4 .ne5t4 .ne6t5t .ne5u2 .ne5ú2 .ne5v4 .ne5z4d4r .ne5z4d4v .ne5z4l .ne5z4m .ne5z4n .ne5z4r .ne5z4v .nie5k4 .ni5k4 .ni6k5toš .nízko5k4 .novo5u2 .novo5z2 .obi5d4 .ob5k4 .obo5s4 .obo5z4 .ob5s4 .ob5t4 .ob5z4 .od5b4 .od5c4 .od5d4 .od5f4 .od5h4 .od5c4h4 .od5i4 .od6i5ó .od5í4 .od5k4 .odo5b4 .odo5h4 .odo5k4 .odo5m4k4 .odo5p4 .odo5s4 .od5p4 .od5s4 .od5š4 .od5t4 .od5v4 .od5z4 .t4v4r .o5h4l .o5h4ľ .o5h4na .o5h4nú .o5h4r .o5c4h4 .o5k4l .o5k4ľ .okolo5i .okolo5s4 .o5k4ra .o5k4rá .o5k4resať .o5k4resávať .o5k4ri .o5k4rí .o5k4ru .o5k4rú .o5m4l .o5m4n .o5m4r .o5p4 .o6p5lan .o6p5rat .o5s4lab .o5s4lad .o5s4lav .o5s4láv .o5s4lep .o5s4lo .o5s4p4 .o5s4tar .o5s4tať .o5s4tan .o5s4taň .o6s5tatn .o5s4tatok .o5s4tatk .o5s4táv .o5s6to5 .o5s6t4rap .ostro5u .o5s4ved .o5s4vetl .o5s4viet .o5s4viež .o5s4vit .o5s4voj .o5š4k4 .o5š4ľ4 .o5š4m4 .o5š4p4 .o5š4v4 .o5t4ras .o5t4rav .o5t4ráv .o5t4rep .o5t4ria .o5v4dov .o5v4lád .o5v4laž .o5v4p4 .o5v4r .o5z4l4 .o5z4n .o5z4re .o5z4v4l .päť5izbo .plno5a .plno5p4 .plno5š4 .plno5kr4 .plocho5d4 .po5b4 .po5č4 .poda5k4 .pod5b4r .pod5h4 .pod5c4h .pod5k4 .pod5p4 .po5d4ráž .po5d4rep .pod5re .po5d4rh .po5d4rie .po5d4rm .po5d4rv .po5d4r4ž .pod5s4koč .pod5v4 .pod3zem .pod3zol .pod3ža .pod3žu .po5h4 .po6h5reb .po5c4h4 .po5i4 .po5k4 .pol5d4 .pol5i4z .polo5a .polo5b4 .pol5o4blú .polo5d4 .polo5h4l .polo5i .polo5k4 .polo5m4 .polo5o4 .polo5p4 .polo5s4 .polo5t4 .polo5u4 .polo5ú4 .polo5v4 .polo5z4 .pol5s4t .po5m4 .po6m5ník .po5o4 .po5ob4h .po5ob4l .po5s4 .po6s4t5s4k4rip .po6s5tul .po5š4 .po6š5ta .po6š5tov .po6š5v .po5t4k4n .po5t4ľ .po5t4r .poroz5p4 .poroz5s4 .poroz5v4 .po6st5g4r .po6s5ti .po5t4 .po5u .po5v4 .po4v5ra .povy5h4 .povy5k4 .povy5p4 .povy5s4 .povy5v4 .povy5z4 .po5v4z4b .po5z4 .pra5o4 .pra5p4 .pravicovo5o .pra5v4l .pra5v4nu .pra5v4nú .prá5vo5p4 .pra5vo5s4 .pre5b4 .pre5c4 .pred5c4 .pred5h4 .pred5ch4 .pred5i .pred5k4 .pred5m4 .predo5h4 .pred5op .pred5ostatn .pred5p4 .pre5d4rah .pre5d4rap .pre5d4rať .pre5d4raž .pre5d4ri .pre5d4rž .pred5s4 .pred5v4 .pred5z4 .pre5č4 .pre5e2 .pre5f2 .pre5h4 .pre5c4h4 .pre5i4 .pre5k4 .pre6k5vap .pre5m4 .pre5o4 .pre5p4 .pre5s4 .pre6s5n .pre5š4 .pre5t4 .pre5v4 .pre5z4 .pre5ž4 .pri5b4 .pri5č4 .pri5d4 .pri5h4 .pri5c4h4 .pri5k4 .prí5k4 .pri5m4 .pri5p4 .pri5s4 .prí5s4 .prí6s5p .pri6s5p .pri5s4pô .pri5š4 .pri6š5la. .pri6š5li. .pri6š5lo. .pri5t4 .pri5v4 .pri5z4 .pri5ž4 .re5g4 .re5k4 .re6k5v .re5p4 .re6p5n .re5š4 .re5t4 .ro4z5i4 .ro6z5í4 .rozo5b4 .rozo5d4 .rozo5c4h4 .rozo5m4 .rozo5p4 .rozo5r4 .rozo5s4 .rozo5š4 .rozo5z4 .rozo5ž4 .ro6z5u4 .ro6z5v4 3s4polu5 3s4polu5h4 3s4polu5p4 3s4polu5v4 .šikmo5o .široko5 .široko5p4 .štáto5 .št4vor5 .su4b5s4 .sú5h4 .sú5k4r .sú5m4r .sú5s4 .sú5v4 .sú5z4 .troj5 .t4v4r4do5 .viac5k4 .viac5v4 .vide2o5 .vnútro5s4 .vnútro5š4 .vo5p4ch .vo5p4r .vo5s4p .vo5t4 .vo5v4 .vy5 .vý5 .vy5b4 .vy5c4 .vý5c4 .vy5č4 .vý5č4 .vy5d4 .vý5d4 .vy5h4 .vy6h5ň .vy6h5ne .vý5h4 .vy5c4h4 .vy5k4 .vý5k4 .vy5m4 .vy5p4 .vý5p4 .vy5s4 .vý5s4 .vy5š4 .vy6š5š .vý6š5k .vy5t4 .vý5t4 .vy5v4 .vy5z4 .vý5z4 .za5b4 .zá5b4 .za5c4 .za5č4 .za5d4 .za5h4 .za5c4h4 .za5k4 .za5m4 .za5p4 .za5r4 .za5s4 .za5š4 .za5t4 .za5v4 .za5z4 .za5ž4 .zá5k4 .zá5z4 .zo5b4 .zo6d5p .zo5d4r .zo5d4v .zo5h4 .zo5m4l .zo5m4r .zo5s4 .zo5š4 .zo5t4 .zo5v4 .zo5z4 .zo5ž4 5alkohol auto4rk auto4rs 5b4lah 5b4ledn 5b4lesk 5b4lok 5b4lúd 5b4lysk 5b4lysn 5boh3vi4e3a2k 5boh3vi4e3o2d3k 5boh3z4 5boles4t5n 5b4rať 5b4rázd 5b4rec2h 5b4ronz 5b4ruč 5b4rús 5b4rýzg 5c4muk 5c4nie 5c4vak 5c4vič 5c4vik čí6s5lov 5č4len 5č4lánk 5č4lánok 5č4lov 5d4ňov 5d4ramat 5d4rať 5d4vanás4ť5 5d4vih 5d4viž 5d4voj 5d4vor 5e2u2róp 5f4ľak 5f4lias 5f4rancú 5f4rekven 5f4ráz 5g4raf 5g4ram pro6g5ram 5g4réč 5g4rob 5g4vardej 5h4lad 5h4las 5h4lav 5h4ľad 5h4liad 5h4luch 5h4mat 5h4mot 5h4nať 5h4ned 5h4nev 5h4niezd 5h4noj 5h4nut 5h4núť 5h4nút 5h4rab 5h4r3mot 5h4ran 5h4rať 5h4rob 5h4rom 5h4roz 5h4rub 5h4ryz 5h4viezd 5c6h4lap 5c6h4leb 5c6hran 5c6h4rán 5c6h4ráň 5c6h4vál 5c6h4vát 5c6h4vat 5c6h4vost 5jedenás4t5k 5jedenás4ť5 5k4lad 5k4laď 5k4ľak 5k4lam 5k4lásť 5k4liat 5k4liať 5k4lep 5k4les 5k4ľúč 5k4resb 5k4resť 5k4ritic 5k4rídl 5k4rôch 5k4ruh 5k4rúž 5k4ryt 5k4valif 5k4valit 5k4vet 5k4vadr 5m4ladis4t3v 5m4nož 5m4rav 5m4ráz na5d4ž4ga na5d4ž4gá nav3š4tev náv3š4tev nav3š4tív 5p4lán 5p4lastik 5p4lat 5p4lav 5p4leta 5p4letie 5p4letú 5p4liesť 5p4ne2umat 5p4ráv s6práv 5p4riam 5p4rirod 5p2risám 5p4roduk 5s4fér 5s4c2hopn 5s4k4lad 5s4k4lon 5s4koč 5s4kok 5s4kop 5s4kor 5s4kôr 5s4k4romne 5s4k4rot 5s4k4rúc 5s4k4rutk 5s4k4rýv 5s4kúsen 5s4kutoč 5s4k4vúc 5s4ladk 5s4lav 5s4láv 5s4led 5s4lep 5s4lovn 5s4love 5s4lova 5s4lovk 5s4luh 5s4lúž 5s4ľub 5s4maž 5s4mel 5s4mer 5s4piev 5s4pev 5s4por 5s4potreb 5s4p4ravod 5s4p4raved 5s4p4rávn 5s4p4ravo 5s4tarost 5s4tatic 5s4tav 5s4t4rach 5s4t4ran 5s4t4rán 5s4t4ráda 5s4t4raš 5s4t2rat 5s4t2red 5s4t2rek 5s4t4rel 5s4t4reľ 5s4t4riel 5s4t4rieľ 5s4t4rih 5s4t4riž 5s4t4rom 5s4t4rúh 5s4t4run 5s4t4ruž 5s4tati 5d2ve5s4to 5t2ri5s4to 5š4tyri5s4to 5päť5s4to 5šes4ť5s4to 5sedem5s4to 5osem5s4to 5deväť5s4to 5päť5 5šes4ť5 5s4t4la 5s4tup 5s4ved 5š4ľah 5š4liap 5š4kola 5š4k4rab 5š4k4rie 5š4pin 5š4p4liech 5š4print 5š4tart 5š4tát 5š4tep 5š4tít 5š4t4ruktúr 5š4tude 5š4tudo 5š4t4vera 5š4t4vorec 5š4tyli 5š4ťast 5štiep4 5š4t4v4r4ť5k4 5š4t4v4r4ť5l4 5š4t4v4r4ť5r4 5š4t4v4r4ť5s4 5t4lač 5t4lak 5t4ran4s5 5t4ras 5t4resk 5t4retin 5t4ried 5t4rub 5t4r4vaj 5t4r4val 5t4r4van 5uholník 5uhoľn 5viac5h4 5v4čera 5v4lád 5v4las 5v4rás 5v4rav 5v4rat 5v4rát 5v4šimn 5v4ták 5v4tip 5vy5s4t4rája 5v4z4du 5v4z4ťah 5v4z4ťaž 5z4lom 5z4luč 5z4mysel 5z4mysl 5z4nak 5z4nám 5z4náša 5z4rak 5z4väz 5z4vest 5zv4esť 5z4vod 5z4vuk 5z4vuč 5ž4ráč 5ž4rane 5ž4reb 5ž4rút .cv6 .ch6 .sp6 .st6 .šk6 .šp6 .št6 .tk6 .uh6 .uc6h6 .uk6 .um6 .up6 .us6 .ús6 .usc6h6 .úsc6h .usk6 .úsl6 .usm6 .úsm6 .ús7ta. .ús7tami. .ús7toč .ús7ti .ust6l .úst7ny .ust6r .ús7tret .us7t4ric .ús6t6r .úš6 .ut6 .uv6 .uz6 .vd6 .vh6 .vk6 .vp6 .vs6 .vš6 .vt6 .vz6 .vzh6 .vzk6 .vzl6 .vzp6 .vž6 .zb6 .zd6n .zd6r .zd6v .zg6 .zh6 .zm6 .zr6 .zv6 4b4s4ť. 8c4h. 8d4z. 8d4ž. 4c4ht4. 4j4s4ť. 4lt. 4m4p4r. 4m4p4s. 4m4š4t. 4n4k4t. 4p4r4v. 4rd. r4p4t. r4š4č. r4t4z. 4st. 4sť. 5k4rát. 5s4to5k4rát. 5t4ľ4c4ť. akci3a2 akvári3u2m gymnázi3um le2u3kémia t2ri3u2mf kli3e2nt}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nn.lua0000644000175000017500000057352112161703335024672 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abdenrt", ["data"]="att-en-de bet-re", ["length"]=16, ["n"]=2, }, ["metadata"]={ ["mnemonic"]="nn", ["source"]="hyph-nn", ["texcomment"]="% Norwegian Nynorsk hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Adapted to the new pattern-loading scheme.\ % Original file name was nnhyph.tex\ % \ % TeX hyphenation patterns for Norwegian Nynorsk\ %\ % Version 2007-02-10\ %\ % Copyright (C) 2007 Karl Ove Hufthammer.\ % Copying and distribution of this file, with or without modification,\ % are permitted in any medium without royalty, provided the copyright\ % notice and this notice are preserved.\ %\ % This file contains hyphenation patterns for Norwegian Nynorsk.\ % It uses the Norwegian hyphenation patterns from nohyphbx.tex,\ % created by Rune Kleveland and Ole Michael Selberg. Please see\ % that file for copyright information on those patterns.\ %\ % The patterns in nohyphbx are based on both Norwegian Bokmal\ % and Norwegian Nynorsk, and works about equally well for both\ % languages. This file, nnhyph.tex, contains only a few hyphenation\ % exceptions, for words that needs to be hyphenated differently for\ % the two languages.\ %\ % Please send bugs or suggestions to karl@huftis.org.\ %\ % \ % \\input hyph-no.tex\ % \ % \\hyphenation{\ % att-en-de\ % bet-re\ % }\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzåæèéêòóôø", ["data"]=".a4 .aa4 .ab4ba .ab7be .ab6s5t .ac6tin .adel4s .ad8la. .ad6le. .ad2r .ad1s2 .af7f .af5t4 .af5f8u .ag6na. .ag6ne. .ag4r .ai2 .a6k .ak6ka. .ak6ke. .ak3kl .ak3kr .ak6ne. .ak6r .ak8sa. .ak4se. .ak6s3t .ak6ta .ak4te. .akte4r .akter5e .ak5tr .akva7 .a6l .albu5en .alfa3 .al4ge. .al5gi .al6ka. .al4ke. .al4kom .al4la. .al4le. .al5leg .al5lo .all5s6 .al4ma. .al8me. .al5m6in .al4na .alpe5 .al6s7k .als5o .alt4a .al4ta. .al5tar .al4te. .alt3o .al6ve. .am7b .a6me .am6ma. .am4me. .am4s4 .am6ta .a6n .ana3b .an4da. .an4de. .an5d4ra .an4d5ø .and6ø6v .an3er .anes5 .an4ga. .an3ge .an4ge. .ange4s .an4ja. .an4ka. .an4ke. .an4la. .an3n .an4na. .an7nal .ann4e .an4ne. .an5s8 .an4sa. .an4se. .ant2 .an4ta. .an4te. .an5tem .an5tep .an4ti. .an6tin .an4tis .an4tiv .ap8lan .ap1p6 .ap8t .arbi5 .ar6de. .are4o7 .ar4ge. .ar5ges .ari6a .ari8e .arie5ne .ar5ka .ar8ka. .arlan9 .ar4me. .ar7mea .ar4na. .ar3ne .ar4ne. .ar5nes .ar6ra. .ar6r7u .ar6ta. .ar4te. .ar3t4h .ar9ti .ar6va. .ar4ve. .ar4ved .ar4ver .arvi6 .a6s .as8ka .as4ke. .as5kese .as4le. .as6pa. .as5s .ast5ru .at4h .at4ki .at4le. .at4na. .at2o4 .at3s .atte4 .att6r .a5ty .au8de .au6e .au8ga .au4ge .au4ka. .au8le. .au4r .au6sa. .au6se. .aus9k .au4sp .avi2 .av7i6d .av7inde .av4la. .av4le. .av7s6 .b6 .ba6by .ba6la. .ba4le. .ba4ne. .ban4k3l .ba4re. .ba4ri. .ba8te. .be4de. .bede4n .be6d5ene .be4d5et .be8di. .be3e4d .be6ke. .be4la. .be9nar .be4ne. .be6ra. .be6re. .be4res .ber6ett .be8ri. .be7ska .be6sten .be4ta. .be6te. .be5t4v .bi6de. .bi6en .bi4le. .bilet5 .bi6t3r .bl4 .bla4d .ble4k3 .ble5k4e .blek4k3f .blekk3s4t6 .blekk9s8v4 .bling5 .bo8da .bo8de. .bogs8 .bok5 .bo4k4en. .bo8la .bon2 .bo4na. .bor6t5 .bort6e .bor8ti8 .bort9r .brudd7s6 .bruddså7 .bu6da. .bu3d6r .bu4et .bul4k5 .bus6sy .by6de. .by8ta. .bæ2 .bø6k5a .bø8nen .bø8ner .c4 .ca4en. .car4s5 .ca6se .ce6b .cos1 .co4st .d6 .da4ge. .da4le. .dags6e .da2m .da4ne. .da4ta .dau3s .deka9r .deko7d .de4le. .de4l5ei .del5s6 .de4mi. .demo7e .den5sl .de4re. .de4r5et .de4ri. .de6r3i4 .de7r4i5v .de4r5om .de8ru .de6s5m .de4so .de4sto .de4u .devi5s .di2a .di5e4l .di6er .di4et. .di9f6t .di4ne. .dings7a .di4sk .di8s3t .do4en .do4er .do8et .dome5 .do4ra .do6re. .drau4m .ds4 .du4a .du4en. .du4er .duft3 .du4ge. .duk3n .du4se. .du4st .dy4re. .dø6la. .dø6r3 .dø7r4a .dø7r4e .dø4ve. .då5ren .då7ret .e6 .eb4ba .ecu6 .ed4da .ed4le. .efo7 .ef4ta .efta5s .ef6ter .eg8de. .ege2 .ege5l .eg6ga. .eg4ge. .eg4gel .eg8la. .eg4le. .eg6na. .eg4ne. .ego7t8 .egs4 .eg8se. .eg5si .ei2 .eid5a .ei5den .ei4ga. .ei7ger .eik5a .ei4ke. .ei3l .ei3m .ei8ma. .ei8me. .ein7as .ei3ni .ein5og5 .ein5s6ta .ein8s7to .ei9rar .ei5res .eir9u .ei5te .eit9r .ekk4o .ek4le. .ek3li .ek6ne. .ek4r .ek8sa. .ek3se .ek8se. .ek4sp .eks6pi .eks3t4 .ek5s4ta .ek8ta .ek4te. .ek7to .el8da. .el4de. .el4g5r .eli5ne .el3k .el5l .el6s .els6a .els4kl .els6t .el6ta. .el6te. .elve7l8 .el6veg .em3b2 .emfa9 .em4ma. .em8me. .em6na. .em5p .en5a .en4da. .en4de. .end5r .en4ga. .en6gav .en3ge .en4ge. .en6g5r .engs6 .en6ka .en4ke. .en5og5 .en6sa .en4se. .en5so .en3sp .en5t .en6te. .ent4r .en6t5ra .ent8re .en3ø4 .ep6t .er8a .er4e .er4g5r .er4ke .er4la. .er4le. .er6ma. .er4me. .er4mek .er4na. .er6ta. .er4te. .es9ast .es1k .es3ka .es8ka. .es4ke. .es5l .es8la. .es8le. .es3p .es6pa. .es6r .es8sa. .es4se. .es4so .es5ta .es3te .es6te. .es7tet .es5ti .es6t6r .es7tu .et8la. .et8le. .et4na .et4ne. .et4s .et8sa. .et5s4e .et6se. .ets4i .et1te4 .et6ter5 .et6ti .euro5 .ev8ja .ev4je. .ev4ne. .ex4 .f4 .fa2e .fag3s4 .fa4ne. .fan3t4o .fe4e .fei8e .feil5i .fe2l .fela9 .fel5l .fel4ta .fe4ma .fe8me .fem5o6g5 .fem5t .fer8ro .fer6s .fe8sl .fe8st5 .fes3t6e .fett5a .fi4b5 .fi6a .fi4le. .fire5o6g5 .fis6k .fjel4 .fjor4d3 .fla4t5o .fo4bi. .fol2 .fo2r .for3d6ri .for7d6ra .for5en. .form5s .for7s6o .fre6e .fri5e6re .fug2 .fu6ge. .ful2 .fu8se. .fy8se .fø8rel .g6 .gaf7 .ga4le. .ga8li. .ga4me .ga4ne. .gang5s4 .gas4 .gas5ta .ga2t .ga4ve. .ga9vee .ge2a .gel4e .ge3ne .ge6ni5 .gen5s .ge4o .ge4st .ge5s6tap .ge9sv .gha5 .gift5s .gi4n .gi4s .gis7p .gi8v3a .gje8n7 .gl6 .glo6i .glo9v .gly5s .glø9se .gnå7la .go5des .gos7 .gra4v3end .grei4e .grunn5s .grus5s .gu4de. .gud3v4 .gu4lat .gus1 .gu4tu. .gø2 .gås4e5 .gå4v .h4 .hai5s6 .ha6ka. .ha8ma. .hand5s6l .handsla9 .ha6v5ak .ha6vi .he4er. .hei5e .hel3u .he2n .hen3i2 .he6r5i6 .he6r5o6 .he9r6oe .he7r6oi .he7r6ol .he9r8os .he8ru .hes4s5 .het6s5 .het7s6e .he4t5 .he5t6e .hil4l .hi4n .hi6re. .ho2d .ho2e .ho4re. .ho5ren .ho7ret .ho8ta. .ho8va. .hu4di .hull7s .hu4s3en .hus6val .hvit3 .hvi3t4e .hvo8r5 .hy6ra. .hy4re. .høi5 .hø4re .hø4va .hø4ve. .høy6st5æ .hå8en. .hå8er .hånd5s6l .i2 .i3a4 .i3bl .i4da .ifø5re .ig8la. .ig4le. .i4her .ik2 .ik6k .ikke5 .ikkes8 .i3k6l .ik5t .ik8te. .i5kv .i3la .i4la. .i8lande .ilbo8da .il6d3r .il6de. .i3leg .i6les .il4ja .il6je. .il6ke. .il4le. .il6sk .il4te. .i6me .imø5te. .in5ad .in5de .in8ga. .in4ge. .in3gr .in6gri .in5k6 .in6ka. .in4n3 .in4ne. .in5n6e .in6n7eks .in6n7ets .in6n7ett .in4n3i .in5s .in7tes .io4na .io4nom .i4rer .ir7k8 .ir8ra. .ir6re. .i6sa .i3sc .i6se .is7k6 .isla8ga .is6lam .is4le. .is4let .is4me. .is8na. .is8ne. .is5pa .i5s8pe .is3s4 .is6sa. .is4se. .is5sk .ist6 .is8te. .i5sted .i5stem .is7ti .i6s7tj .i6s7tr .is8ut. .i6s5ø .i5ti .i3va .i4van .i4var. .i3ve .i4vel .i6ven .i4ver. .i4vere .iv8ra. .iv6re. .i3ø .j4 .ja4de. .ja6e .ja4ne .ja8se. .ja4va. .je2a .je2l .je2m .je5re .jern5s4 .je4ta .ji4 .jo8en. .jor8d7r .jor8d7s8 .jor8d7u .jo4se. .ju6a .ju6la .jule3 .ju4li3 .jø4dep .k6 .kaf2 .ka6la. .ka6li. .kal7t8 .kalve5l8 .ka5me .ka3na .ka4ne. .ka4p3r .ka4ra. .ka5r6a5v .ka6re. .ka5rin .kar8t7r .ka4te. .ka5t6h .kau9k .ka6va. .ka4ve. .ke6e .kel3 .kier3 .ki4na .ki7ni .kino3 .kir2 .ki4se. .ki8va. .ki6ve. .kje3de5 .kje4k .kjek7l .kjønn4 .kle4s .kli5ne .klo9va .kly7sa .klø7s8 .kna7se .kne4p3r .kne7r8 .ko6da. .ko7gr .ko4la .ko3le .ko8le. .kol5j .ko3pe .ko6pe. .kor6s5ed .ko4se. .ko6ta. .ko4te. .ko6ve. .kring5s .kru4s3t .ks6 .ku5f4l .ku4le .ku8ra. .ku4re. .ku8ta. .ku8te. .kva4r1a .kve9ka .kve5ke .ky8la. .ky4le. .ky6te. .kø3s .kå6pa .l6 .la4da. .la4de. .la4ga .la4ge. .la5ger .la4ma. .lapp8e7 .lap5s4e5 .la6ta. .la4te. .la3tr .la4va .la3ve .la4ve. .la6v5æ .le8ar .le4da. .le4de. .le4er .le6et .le2f .lef3l .lega5ta .le4ge. .le4gel .le8gi. .lei8e .lei7er. .lei4ve .le4ke. .le4k5r .lemu9 .le4ne. .le6o7 .le7s6a .le4se. .le4sek .le4ses .le4s5p .le2t .le7ta .let6tan .le2u3 .le3va .le4va. .le4ve. .le4ves .li8a .li4de. .li4e4 .li5ene .li2g .liga3 .li2k .lik5k6 .lik3o .lik3s4 .li4ma .link6 .li6ra .li4re. .li4sa .li4se. .li4ta. .li4te. .li5ti .li4ve. .li4v5en .liv8s7u6 .liv4s5v .lo5e6 .lo6ge. .lo8gi. .lo6g5r .lo4i .lo6na .lo8o .lo6ri .lo8sa. .lo4se. .lo6te .lo4va .lo3ve .lo4ve. .lu4d .lu2e .lu4na .lu6pa .lu4pe. .lu6ra. .lu4re. .lu6se. .lu4ta. .lu9tas .ly4de. .lyd3s .ly8e .ly8ge .ly4se. .ly4sk .ly5s6e .lys5s6 .ly8str .ly4te. .ly4ve. .lø8de. .lø6en. .lø8ne. .lø6pa. .lø4pe. .lø8s7a .lø8s7i .lø8s7m .lø8s7p .løv5i .løye5ne .lå8ma .lå5re .lå6re. .lå4te. .m8 .ma4ge. .mag9r .mah6 .ma3ka .ma4ke. .mak6t5at .makt5s .ma4le. .ma4li. .ma4na. .mande8l .ma4ne. .ma4ni. .ma4ra. .ma4re. .ma4ri. .mar8sj7ø .ma4sa. .ma4si .ma6st .ma8ta .ma6t8h .mat5t8o .ma4v .me4d3 .me6d5ei .me6d4i .me6d7in .me6d5r .mei5er. .mei5et .mek5l .me6la. .mel3l6o .me4l5ø .me4ne. .me3ri .me8s7al .me4sk .me2t6a3 .me3ta4ll .mes5ti .me4tri .mi6kj .mi4le. .mi4me. .mi4ni. .mi4nik .min4k3 .min5k4e .mi6s3t4 .mne6 .mo5de .mo6er .mo4na. .mo8ne. .mon4st .mons6t5r .mor5d6e .mo4re. .mor3t6a5 .mo4se. .mo4ta .mo4tek .mo4ter .mo4tr .mo5v .mu8ga .mu8ge. .mu6le. .mul5es .mur7 .mu5r8e .my8ka .my4ke. .mø4re. .mø5res .mø2t .må6la. .mål3o .n8 .nabo3 .na6ge. .nak2 .na8ke. .nan5s .na4r .na4sa. .nat2 .na3tr .nat6tr .ne4de. .ne4den .ne4d5i .ne4d3r .ned3s4 .ne4f5r .ne4g7 .nei5e .ne6k6r .ne4o7 .ne4o8n .ne8pa. .ne6pe. .ne2s .ne4t .ni8ar .ni6er .nig4l .ni4na. .ni5o6g5 .ni4pa. .ni6pe. .ni8sa .ni6se. .nita9 .ni4to .ni4va .no6de. .no6e .no8ka .no4me. .no8mi. .no4r .no8se .no8si. .no4va. .nu4e .ny5a .ny3o .ny8sa. .ny6se. .ny4te. .nær9ast. .næ4re. .nød4d .nø4re. .nå4de. .nå6le. .o6 .obo5e .od4da. .od4de. .odel8s7 .od8la. .od8le. .offsi6 .of4te. .of5teb .og4 .ok1k .ok8ka. .ok8ke .ok4se. .old3s .ol4ga. .oli5 .ol8la .ol8le. .oli5v6 .ol6m .om1 .om4ar. .om6bo. .om4e6n .om4gå. .om4me .om5s2 .on4de. .on5des .ond3s .on6kl .on6na .on8ne. .op5ar .op4pa .op4pe .opp7el .op4pi .opp3l .oppla8te. .opp5s6 .op7r .opt6 .or4da .or4de. .or4del .or4dr .ord5s4 .or5ga .or6ka. .or4ke. .or6me. .or4re. .ort6 .or6va .osa5 .os3el .os4k .os4s .os4te. .ot5r .ot7t8a .ot4ta. .ot4te. .ot4tes .ot3to .ot4to. .ove6 .over3 .overen6d .over3i4 .over5k8 .ov8re .ov5u .ov6ul .p6 .pa8la. .pa4le. .pal6i .pa8n7a .pa5n6e .pa6n7eu .pa5n6i .pa6re. .pe3do .pe4ke. .pek5t .pel4sj .pe4ne. .pe2p .pep3r .pe8ri7 .per6m7 .pe8sa. .pese5t .pe4st .ph2 .pi6le. .pi6p .pi9ra .pi2s .plen5g6 .plus6s5 .plus7s6e .plø7se .po4et .po3la .po8la. .po4le. .po4log .po2p1 .po2p2e .pop3p .po3p2u .po8ra .po6re. .po4res .po6st .po8ta. .po6tek .pro7k8 .ps2 .pøn3 .pøn9s6 .på5d6 .r6 .ra6da. .ra6et .ra4ga. .ra4ge. .ra4ja. .ra4ka .raks7 .ra2m .ra4na .ra4ne. .ran7s6a .ra6pa. .ra6pe. .rap4s .rap5s4e .rap5s4o4 .ra4re. .ra6sa. .ra7ti .ra6va. .ra4ve. .re4al .re6da. .re4de. .ree6l .rege4l .re4gi. .rei2 .rei7de .rei5er. .re4ins .re6ka. .re4ke. .re8klar .re8kle .re4kli .re6kn .re8le. .re4ma. .re4na. .re4ne. .ren6sk .ren4t .rep5s .res9s .re5s6tan .rett7s8kri .re4ve. .re4ves .rev9n .ri2d .ri8e .rie5ne .ri6ka. .ri6ma .ri4me. .ri4pa. .ri4pe. .ri4p5o .ri4sa. .ri4se. .ris5ko .ri4s3ø .ri4ta. .ri6te. .ri6va. .ri4ve. .ro4an .ro4de. .ro8di .ro4e .ro8ke. .ro4ma. .ro4mi .ro6pa .ro9par .ro3pe .ro4pe. .ro4sa .ro9sar .ro4se. .ro4sed .ro4ta. .ro4te. .ro4tek4 .ro8va .ro3ve .ro8ve. .ru8ga. .ru4ge. .rug9le .ru8ka .ru4na. .ru4ne. .runes6 .run7g .ru4se. .ru4sk .ru8va. .ru4ve. .ry2e .rye7ne .ry6ke. .rød2 .rød7s4 .rø8le. .rø4re. .rø1v .rø8va. .rø4ve. .røy7e .rå8da. .rå4de. .rå4en .rå8er. .råg8 .rå6ka. .rå4ke. .rå3k4l .rå6na. .rå8sa. .s6 .sa4ge. .sag6n .sa4la. .sa4le. .sa4me. .sa4mer .san6d7 .san7d8e .san7d8i .san8s7ku .sau6e .sch6 .se2b .se2e .se4i .se4k5l .sek4s5o6g5 .sel4v5 .sel4v5i6 .se6na. .se4ne. .sen7s .se4ra. .ser7vel .se4te. .sha9ke. .si2d .si6er .si6ga. .si4ge. .sik5k6e .si8la. .si4le. .si4ne. .sinn6s5 .si4ra. .si5str .si4va .si4ve. .sje4i .sju5o6g5 .sk6 .ska7ka .ska5ke .skat4 .skei5d .ski6n .skinns6 .sko7de. .skog5u .skritt9s8 .skudd5s6 .skuddså7 .sku6m5 .sky6f7la .skå5ra .sle6s5v .sli6b7r .slim5 .slotts5 .slu9ka .slu5ke. .slø5se .sma4s .smas5k .smi6g7r .smo9g .små3 .små7k6 .små9l .små5t4 .småt5t .sn4 .sne3 .sne4k .snitt5s6 .snø3k .soa8 .so8de .somma4 .son6a .sop4pa .sor4t5 .so4ta. .s8p6 .spa5ra .spe6e .spi9la .spri5s6 .st6 .sta9ka .sta5li .stat4s .sted4s .ste4i .stein7a8 .stein7s8 .stem4m .stev9na .sti7me .sto5ne .sto6ra .strek5s6 .stu8a .stu9va .stål5l6 .sund5s6 .su4ri .su5te .sv8 .sva5la .sva5ra. .sva5re .svar5s .sver8n .syd5 .sy3d6a .sy5d6e .sy6na. .sy4ne. .sy5ter .sy3ti .sy6v5 .sy6v5o6g5 .sz6 .sæ2 .sær1 .sær3e4g .sø8ka .sø4ke. .søl6v5 .sør3a .søye5 .søy6en .så5pen .så3re .t8 .ta8ke. .tak9r .tak5sk .tak9s8p .ta4la. .ta4le. .ta4les .tal4li .tam5m .tan5de .ta4p5r .ta4ra. .ta4re. .ta2s .te4e .te6i .tei9er .te8ke. .te4ma. .te6o .te8ne. .te4se. .te7si .te4sta .te4str .th2 .ti8a .tid5r .tid6s3 .ti4de. .ti4e .ti4g3r .ti4ki .ti4l5 .tili6 .ti4med .ti4na. .ti4ne. .ti4p5l .ti4s .to5arm .to6en. .to4er. .to6et. .tokk8 .to6le. .to6na. .to5o6g5 .to4ra. .to4re. .to6reb .tor6g5a .to3ro .torsk6e5 .tor4s5v .to5rye .to4str .tota9la. .to5t8 .to8te. .to6va .to4ve. .tr6 .tra7c .tre3b .tre7p .tre5o6g5 .tre6skja .tre3s8ko .tre7sl .tre3sp .tre5s6t .ts2 .tsj2 .tu4en. .tu6na .tu4ne. .tu6ra. .tu4re. .tu8ve. .tve6n .tver6r5a6 .två7g .ty6da. .ty4de. .ty8et .ty8re. .tyr8s9 .ty5ter .ty5ti .tæ4re. .tøv9d .tø6ve. .tø9ver .tø5vet .tå5ker .tå4le. .tåp9n .tå5ren .tå7ret .u5a6 .u1b2 .u6berg .u3d2 .u7de .u3e6 .u4er. .u6era .u4ere .uf4f .uf8sa .u4ga .u5gi .ug6la. .ug8n .u1i .ui6m .u1k6 .u4ka. .u6ke .u7kn .u3le .u4le. .ule8k .ulen4d .u6lende .u8lene .u6let .u4lin .ul6ka .ul4ke. .ul4la. .ul8le. .ul8ma. .ul4me. .ul4ne. .ul5t .ul6te .u1lu .ul4v5i .u1ly .u3lå .u5ma .umu7 .u2n .unde6ri .und5r .une8 .u5nek .u9net .un4ge. .un2n .unn3s .u3no .un4se. .un4t .u5nu .u1o .u1p .u4pi .up2l .up4p3 .u2ra .u5raf .ur6an .u6rane .ur4d .ure4n .u4ret. .u6rets .u2r2i .ur4ke .ur6na .ur4ne. .u1ro .ur1s .ur8ta .ur4te. .urte5m8 .ur6tet .u5rut .u3ry .u5rå .u1s2 .u4sa. .u4sas .u5se .u3ska .u5sn .u7sp .us3se .us6t4 .u7stek .u5stel .usy5r .u2t .uta4g .ut5age .u3tak .u4ten. .ut5esk .ut6e7sko .u4ti. .ut3kan6t5 .ut4ne. .u5tol .ut3o6v .ut6rer .ut6rov .u3trø .ut6se. .ut4si. .ut3t4 .u3tu .v6 .va4da. .va4de. .vai4 .va4ke. .va6les .valg5s .va4ne. .van4n5 .vann5s4 .va6reta .vari4e .var5sk .ve8en. .ve4ga. .ve6ge. .ve4g3i .veg3s4 .vei3g4 .vei3s .vei4ta .ve4l3 .ve5l4ar .ve6l5art .vel5d .ve4l3e .vel5l .ve5l4os .ve4l5ov .ve4ly .ve8læ .ve4ne. .ve4net .ve4ra. .ve4ras .ve6re. .vermo9 .vers4t .ver5ste .ve4sl .ve4st .vete5 .ve8te. .ve4ve. .vi4da. .vide4 .vi6de. .vi4d5å4 .vi2e .vi4ka. .vil5l6a5t .vi6ma. .vi8me. .ving7s .vin5n .vi4sa. .vi4se. .vi6seri .vi4ta. .vi4te. .vi5tr .vok4s3 .vok5s6e .vo6r .vo6ta. .vy4 .vye5ne .væ4ra .væ4re. .vå4d .vå4r3 .vårs6 .wa4r .we4g .wi6e .xe2 .y6 .ye4 .yn8da. .yn4de. .yn6ge. .yn8ka. .yn6ke. .yn4kv .yns2 .yp8pa. .yp4pe. .yr8ja. .yr8je. .yr8ka .yr4ke. .yrkes5 .yr6t .ys4 .ysterie8 .yt9ren .yt5t .yt6te. .yv6 .z4 .zj8 .æ8 .ære4s5a .ære4st .æt4te. .ø6 .øg8la .øg4le. .øi5 .øi6e .øko5 .øk6ta .øk4te. .øl3ed .øl3s6 .øl3v6 .øm4me. .øres8t .ør4je .ør5k .ør8na. .ør4ne. .ør6ski .ør9sm .ør3st .ør8ta .ørt9an .ør8te. .øs2 .øs4t .øv4d .øve4r5 .øve4r6s .øv4re. .øy6de. .øy2e .øyele8ge. .øy5ene .øy4n .øy6na .øy6ra .øy4re .øy8rer .øy4str .å2 .å6e .å6f .å6g .å6k4 .å8l .ål6t .ål8ut. .å8m .ån8da. .ån4de. .ånd6s5 .åp6na .års3k .å6se .ås3k .ås7l .ås3m .å3ste .ås5v .å4t .åt4te. .åtte5o6g5 .å6v a1ad 4aaf a3aft aa4g a1aks aak5v aa3la aa2m a1a2n a6an. aans9t a7antr a1ap aa4ri6 aarie9ne aar5n aa2s 3aase aa5t6h a1av a6bab ab7av ab9b8l ab4but abe4lei abel5t4 abe9na. abes9ka 4abev a5bh abie6 abi9er abi9la a4bist ab1l ab9lara ab4lok abl7u a5bo9a abo3b abo3e a3boer abo3kl a3bord 5aborte ab1r ab8re ab2sl abu5e a4buel a4buf a6busk a4bute a4by. a4byb a4byk aby3r 8ac aca5 a6ca. ache3a ack3 a1co 6ada a5dal ad5ant a4dart ad9da a2deb ade5i6s a2dek a4del a4d5elv a5dend a3dene a2deo a2dep a5der. aderle7 a2des a5de4ser a3desl a3det. a3dets 3adfer 1adg ad8ge adi4ene ad1j 1adju 2adl 1adm ad5n ado7a a4dob ad7opp 4ador a7dora ad5raf ad7ran a2dre ad7rel ad5rep ad3ret ad3rid ad1ro a7drø ad4s5amt ad4si adsle6ge. ad5s4let ads5te ad5s6tek ad3str ad5un 1adv adva5re 2adve a4dy. a4d5øy 2a1e2 4aea a4ed 8a7ede aed7r aek5t a4el. ae5la ae3li ael5o aen5t a3ep aes8ke. aes4t 6afa 6afc a4fe. afei5 af4fan af4fei affe3s af7fi. affi3d af5f4u af4i afia1 afi5an a2fib a6f5inn afi7re a4fiti a5fjo af9la. af9lar af3le af5li a4frik 6afo afo7ra. afo7r8e afore5ne afra5s 1afri afs1l aft5ei af4t5e4l af6t5o aft1s4 af5yr afø4r afø5ri 4aga a2gaa a5gae a4ganf agang7s8 a4gart a5gas. aga6ve. ag5de a7gelen a2gem 3a4gent age4r3a age6rek age5risk a7gers a5geru age5s2 a4geta a4gé ag5gar ag4gas ag5ge agg1s2 agg7u ag6gut a4gi. ag5id agi6s ag1la ag4lem ag6lesa ag5lå agmo8e agn5om 4ago ago5d8 ag1or a5gos a3got ag5ov ag7ras ag1re ag1ri 4a3gru ag1rå ag4samb ags4ang ag3s4ei ag4sel ag3sem ag5s6ing ag6sju ag4ska ags4kul ag2sl agsmå6la ags3tr ags3t2v ag2sy a6gu. agu3ay agå8va agå8ve. a1h a5hi ah4n5 ah4v ai1a4 ai3e2 ai3er. ai4is ai5ke. ai5ko ai9kv ai5ne a3ing a1inn ai4n5o4 ain8sm ai1ro ais4e ai4s3k aisk2h ai8sm ais6om ais5s ai5s4v ai5ve ai5ø a1j aja9d a7je a8je. ajes7 a4jé a4ji a6jl 6ak. a1ka 4aka. 1a2kad 6akaf ak3aks 6akan aka4o5 4akar ak6arb aka4t5r ak4au 2akd 2ake a9kec a2keh a3kei5 a6kek akel8e akelei9er ake5l4i ake4rek a4kerø ake5sm akes6p a8kete akhe6n 4a1ki a6kid a6kik ak7ind akis1 2a1kj akk6and ak5ke. ak3ken akk5erst ak4kes akki4 ak5kim ak4k5is ak6kj ak1ko akk3ol ak6k5ri ak1ku ak4kul ak4k5v 2ak1l ak3lev ak6lik ak6lus 6akn ak5ne a5kno 2a1ko ak5om. a5kon a7kos ak1o2v ak4pe6 akra8sa ak5reg akregi4 ak3res ak3ro. ak3roe ak1ru ak4s5and ak4sek akse3l4o ak4s5elv ak4ses ak7s6id 3aksje ak2s1k ak7sku ak6sl 4akso 4aksr aks5ti ak5stol aks4tr akst7ren 4aksu ak4tab ak4tai ak4tak akta6le. akt5all ak6tam ak6tans ak4tap ak4tas ak4tav ak4teg ak4tek ak5teme 4akth 7aktig ak5tit aktle6ge. ak2tr ak6tre akt3rå akt5s4la 5aktue ak8t7æ akut2 2akv ak3val ak5øl a5kå 8ala. al7adr ala4g ala9ga a5lagm alag8ra a5lah a1lai al3all al3a4me al3ana a3land a5lande. a5lane alan5gr al3anl al3anv ala4o ala5pr a5lar. a3lara a5laren al3ark a7larl 3a4larm al5arr a5lars al3art a7larv al3a4si 2alat ala7tr 4alau al5auk al1av ala4va al4ba. albo4g albu7er. 5album al3de al7der 4aldo ald3re 2ale a2lef a2leg a9leg. aleie6n a9l8eik a5leke a4leks a4leli a2lem al5e4mu al8en. a4l3enh a4l5en5tr ale4pos a7lept a4lered alere6de. a4le5ro a4leru ale1s2 ale7se a4lesk ale6s5kr a4lesl a6lesu a4leta a4le3te a2leu ale5v a4leva a4levi 3alfab 2alg. al3geb al2gu al4går al3ill a2lim a9lin. ali5na. a4l3ind a4l3ins al3int al9ja. al3je. alj5end al3jer al1jo al4jor al2j1u al1jø alj5ø6v al9kera alk7s6 alla4ga alla6ge. al4lap all5art al5lea alle6ge. al4lek al5len. all5erst alle3s4 al4lest al5let 3allia al4lid 5alli5e alli9ne al6list. al4lo3m all4sen all4sti al6lul al6løs. al4løse al8løst al6lå 8almal al6mek al4met 4aln a5lo. al1o4b a5loi al1om a1lon al3ope al7ord alori5 alo6rit al3ove alow7 alp2 al3ps 2als al7sed al9skap al7skare als1l als5lø al2sn al6spu als4te als6ter 6alsu alt6ak alta8le. al3ted al7tema 5alterna alte4t al4t5eta al4t5ete al4t3op a4l5u4k alul8la al5und alu8re. al5va. alv5aks alvak8se. al4ved al5v6er al8v9er8m alve5s al9ves. alvi8se al1vo alv3s 6a1ly a2l5y4te alø5se al3øv a1lå al7å6t a4mah ama5is a2mak a5maki am3aks a2mal am5ald a3man a3mar. a5mara a7mas. amaso7 3a4matø am4bar 3ambas am4bat am5be a2mei am3eie a3meis a2mek am3eks amen8de. amen4s3 amen6t7arv ame4ram a4meret 3a4meri 4amerin ame5u amhu7 2ami ami7na ami7ne amisk3 amis4ku am4lese am6lest am4mad 6amn. am4ned a2mo amo5e am1op am1or amo6ve am4pap am4pare amp5ei am8peria am6perie ampes6 amp7inn am2p3l am5p4let am4p4re am4pun am2på amru4 am5rå am1s am7s6ku ams4l amst6 am4s3tr ams9ut ams2v am4s5ve am2sø am3ti amti5da 5amtm am7tv am6ul am5yr am5øy 6ana. anak8te. ana3la anal4f 3analy 8anan a3nane a5nang anant8 4anar a6narb an5art ana3to 6an7au anaus7 an9av. 3anbef 4and. an4da5m6 anda5ta an4dek an5den anderle7 an9det 6ando an4dos 4ands and4sel and8send and7slet and5s6tre a2ned an5egg a4n5elv ane8l7u a2nem 2anen 2aner a8n7erme ane3ru a5nes. a4nest ane5sv an5e6tika a5netike an5e6tikk an5e4tis a2nev 3anfal anfø5re. ang4e an4ged an4g5enh ang5erme an8geste an4gi. 5angiv ang5of an5gos an4g9ra an4gre. an6gres an4gret an4g3ry ang4sm angs6tro angs8t9rå angst5y ang5sva ang6søy ang4t5re ang5t6ve an4gun an4gå. ania7 a6nib a4nisj 4aniv an4kana 4anki 4ankj an4kob an4kop an4kos an2k1r ankra8na. ank3re ank3ut 8an2kv an4kø an6k5å6 2anla anland6 anlø9pa ann5ans an6neme an5nen an5ner an5nid an4ninn an4nom 5annon an4nov ann4sei ann4sid ann6s7kå ann6sl ann3st ann5sta ann4s3u an4ny an2nø a3no. a9noa. ano6deb 2anog a7norm a6not a2no4v ano5va an3ove anri7ke ans5aft ansa7ka 4ansan 3ansat an4sek an4sent anseri8e9ne an4ses 3ansik ans5ind ans5ins an4ski an3skj ans4k3l ans6kun an5skø an6slø an4sn ans5or an4s3pi ansport7s6 an1st6 6anstar ans4te4 an8s7tu 6ans6ti 2ansu an9s6und 5ansunda 1an1sv 4ansve 6ansy an4så anta8la an5t6and an4tans an3ted ant5emi 5antenn an4tesl anti7kl an4tim an5toi ant5ord ant5rab ant7rom ant5ryg ant5s6 an4tul antus4t 2anu anus7a an5ut 3anven 6anvin 6any a4nya a2n1æ2 anær8 2anø a2nøk an7å a1o ao9a aog9 a2oi ao6k6 aon8de. ao2p ao4r a5pea a7pé a1pi a2pia ap1id a6pik a6pins a2pio api6r5 api7r6e api7se ap1j a1pla a5p6las ap3li ap9lo ap2ly 4apol a4pon a4poo apo3p apo5s4ti a2pot 3ap3par 4appar. 6appare app7esk ap5plas ap4ple ap5pli ap6pri ap3ra ap5ren ap5ret ap3rin ap2s1 apsa4 ap3sel apse4s ap8s9l a3psy ap4s5ø 8apu a6p5ut a1py ap7ø a3p8øls a5på. a1ra ara9bi ar5aks arak5t ar3alt a4rami 2aran a4ranor a4rans a4ranv 2arar a4r5ass ara5te. ar5aug ar7auk arau9ken ar7avh 1arb 2arba arba8ne. 6arbeh 4arben 6arbet 2arbi 4arbj 6arbl 2arbo arbo8da 2arbr 2arbu 2arby 2arbø 4arbå ar7deb ar6deli ardfø5re ard3re ard5sta a1re 1a2rea 4arear a4reb areba4r a2red a2ref a2rei are3in a2rek a6r5ekt a4rela ar7elek a4r6eli ar7emn a5remo. 3arena a6r5eng a4reni aren5tes a2reo a2rep a6rerel a4r5erfa a6rerk a4rero a6rerø a5res. ares8ka ar4et a7reta. a4rev ar7e6va ar3evn arev6ne. 8a1ré 6arf ar7g6h ar5g6i 6argj arg4l ar7go arg5stj 2a1ri aria7ne a3rib ariba9 ar5idr a4rim ar3inn ar3ins arins9k ar3int ari3se arise4a a4risto a2riv ar4kau ar3ke ar4ke5s ar5kha 3arkit 3arkiv ar4kle ar4k5løf ar6kod ark6ste ark4str ark7veg ar4køy arla4ga ar4map 5armbå ar4medi arme7t ar6metr ar4minf armle6ne. armå6la 2ar2n ar4nad ar4nal arneva7la ar3ni ar3no ar3nu ar3nå a1ro. aro8de. a5rok a1ron ar1op aro6pa a4r1o4r a1ros ar7ost a1rot ar3ove ar6ped ar9po arp5ret 1arra ar5ree ar7resk arri8e7 arrå6da 2ars arsa6ka ars5ans ar3sel ar6s5ers ar4sin ars5kam ar5skar ars5kes ars7kre ar4spr ars6tr ars4vei ars7æ arta4la arta6le. ar3te ar7tele 8artets art4ha. art4has ar4tika 6ar4tim 4artn 4arto ar4top 6artr art9ra ar6trin art6s5t arts5ø 6artu 8arty ar4tyv ar1ul ar1un ar5u6r a1rus ar5utb ar5utn arve3s ar6vete arvi8sa arvi8se. a1ry ar7æ6 arø8ve. ar1øy a1rå arå8de. ar7åp a6r5åt 6as. 4a1sa asab4 asak4 a4salo as6an as7aug asbe2 a1sc a2se. asea4 a2sed a2seg a2sek as4el ase5le a2sem a6senet a4senk a7seol a2se5s a6sest a4sete a2se3u as2h as5hu a4sib a2sip a2sir a7sis. asis5t a2siv as4ja a6sjett as5jor as3kar ask6et as5keti ask2i as5kis a5skj as5ko. as5koe a4s5kopi as3kor as3kot a1skr as7kra as3kul a5s6kula as6kule ask9u8t as4kv ask5øy as1l a5s4lag asla8ga as4lev as4lit a1so a4so. a2s5om as5ov as4pan as3pe as7pis as5pl as9sa. as4sab as4sal ass5ald ass5alt as4sam as5se. as4sed as4sek asseri7e6 as4serv as4ses as6sifr as5sing assi3s as4sit as2sj as6s1k assku6le. as2s3n as5so. asso9a as7sos. as6s1p as2s3t as4stan as4str ass5tru as2s1v as4sys as4søk as2s5å as1ta as6tab a6stande a4statu as5te. as3ted as4teg as4tek as4t5enh a1stj a9stof a5stok as5t6os ast5ov ast5ren as4tro as9tua astu8ve. ast5ø4v a1su asu3n asu9sa as1va a6sym asyn7d as7øye as5å 4at. 4ata1 a5taene at6af ata8ka. ata8la. a4tang ata9rar a6t7arv atas4 a5tas. atat8 a2tau at5avh atch5 a2tea a2tec at7edd a2tee a4tei at5eid at3eig ate3in a4teka ate5k8e ateke7ta a6t5ekte ate7le at3emb 4aten a5tene. a4teni a4tenu a2teo 4ater a5ter. a6terat a8terek a4teril a2tes a4t3ett at6e5u a4té 3atfer at4ha. at8has 4ati atik6ka atili5 ati5nea ati4rep ati8sta at3jo 5atlant atl9øy 3atmos at4nel ato5a ato5gr at1oi a2tom a6t5oppr a1tor a5tose a3to1v a1tra at5reg at3ren at3rer a4trif at3rin at5rot a9tru at5røs at5røy 2ats at3ser at7sje at7s6kat at7skj ats6kul at2s3ø 4att. at6tat 4at5te. at5tens attfø7re at4tid atti4s att5ise at3tit att1o att7o6p atto6v at1tr at4traf at4t3re at6trin att3s6k att5s8l att3sp att3sv at6tys at2t3ø2 a1tu atu5e4 a2tut at5v atvi5er. a3t3w a1ty atyr8ke. a5t6yv a1tø atør3s atø9se a4t5øy a3tå. a7tåa a1tåe at5år at5å4se at7åt8 4au. 8a8ua au9ar. 4au5b auba6ne. au3c au5da. au9det au4di. 4a6ue au7en au7er aue5re au3est au6e5ta au5e6te. au4gal au4gas au4gel augele8ge. 5aug2n 3augu au5i au5keli au5ket auk5la 1auk7s6 au5kve au6las au4lat aul5l aul8la au5lu au9men au6mo aum5s6k aum7s4t a5und au5rae aure5s au5ret au5ri aur5s6 au1ru auru4e au1sa aus9kj au6skr au1so aus5s au6s8tas aus8tett austi6s aus6t7ise aus6ton au5str au6stra au6stri au1su au4sun au2s5ø4 aut6a au3ta. au7tar au5te 1auto auto5v au3t4re au4ty 2aux a1va av5ab a5vae ava7g 6aval av3alv a4v3and av3ang a4v5anl 3a4van5s a9var. av3art avar6ta. 4avas avat6a 5avbi 1avd 3avdel 2a1ve a2ve3d2 a5vede. a7veil ave3in a2vek a4vela a4vele a5veleg avens4 a5ver. ave7ras aver5d a6verei a2ves a2vev 1avfa 1avg avi4ar 4a5vig a1vik avi9ke a1vin a4v5int 2avir 5avisa avi5sa. 3a6vise av5ising avis3t a5vit avlu9t avlø5se 6avn av7na av4nes a1vo a4vok avo3r avo4v av1r av4res av5ri av1sa av5seg avs2i avsko7g 3avsni av1s2p avspe9g4 avs4te av5su av1s2v 1avt avta9ka 2avu 1avvi av3øl 4a1vå a6v7å6l a1wa awat4 a5we awe9ne a1wi ay2a ay7ane. ay5ar ay9s8t a5y4t a5zu azz3o a1ø a7å6 1b4a ba3a baby5 ba4bys ba5cl ba2d ba4da. ba7dan b5add ba8de. ba4deb ba5den. ba7dens ba3di bad1s 4baf ba2k ba5kan7 ba3kar bakars7 ba3ken ba4k5end baken6de. ba3ker bake3s ba9ket. bak9ett ba3ki ba8ki. bak6kers bak6ko bak5kr 4bakr bak4re ba5kri bak3ro bak3sm bak5sp bak5s6ti bak5str bak7t6 bak1v ba3la bal7ak ba4les ba4li. bal3j bal4lag bal4lan bal4led bal4leg bal4lei bal4lev bal4lig bal6lov ball5s6 bal6læ ba1lo bal5t ba1lu ban4a ba4na. ba5nan ba5nar ban9da ba4nel ba4nes ban6kap ban4kor ban2k3u bantu5 ba3re baret5t ba3ri bari6e7n bark5s bar5skr bar5tr ba5ru ba5sen ba4seru ba4set ba3si ba2s1k bas6sak bas4san bassi4 bassis5 bas4so bas4st bass6tr ba2st ba7s8u ba1ta 2ba1tr bat6ti bau9la 6bav ba5z 2b1b b3ba b6bak b4b5arb b6base b3be. b4beb b4beda b2bef b4beg b6beh b2bei bb3eie bb5eig b2bek b6belo bbel6t3 bbelte4 b4bem b9bene. b2beo b3ber b4b5erf b4bes6 b7beska b6beta b6beten b4beti b6beto b6betr b2bev b8b1h b3bi bbi9e8 b4b5inn b2b1l bb7len bb5op bb5rek bbu9ra bb5ut. bb5ute b2by5 bby3e bby1k b4bø b6bå 2bc 2b1d b2dek b7den b4dep 1be be2au be4bo. bebo5er. bebo9k be4da. be9dar be3der bedi9e8 be4dre bed5red bed2s1 bedy9ra be1då3 2bee be5ed be6ef b4ef befa5re be3g bega7 be4ga. be4gi. be4gn be5go be4g5re. be4g5rene. be4gå. be6ha. beha7g behers7 4behu behå4r be6i be5ke be2k3i bek6kel bekke5r bek4kes bek6l 4beks be4l3ab bela9ga bel5eie bel5eig bel5ein be4lek beli9na beli9v belle5sa bel5let bel5læ be2l1o bel5s4p bel7s4t bel4tag bel4te5s bel4t3ø bel3u bel5v belæ5re belå7ne be4na be5nat be3ne 4bened be4nest ben5g be5ni ben5s4i ben5skj ben5sp ben5te 2bep b4er 4berai be7ras ber5d be4rep 8berest bere5te ber4ga ber4g5ende ber5ges berg3j berg3l berg3o ber4g3å be5rib beri5ke be7ris ber6kl ber5na ber5ne be1ro be4ro. bero9a berri6 ber5te ber5ti be1ru beru9sa berø5v b4e1s2 5bes. be4se. be5s4i 4besik 6besj bes5ke bes6k5n be3sn bes7ne 4be3so beso9v be5sp bes3s bes6s7a6 bes6sel bes7si bes7tens bes6tes be5stes. be6så 3b4et 5bet. be4tab be3te 4betei be7tes beto5ne be6trar be6tre. be4t3ri 4betu be4ty. beva5re be6ve. bevi5se. be9vo bev9r 6beå beån9 7bé 2b5f 6bg 2bh bhu1 1b4i bi5ak bi6bla bi5ce bi1d bi5dee bi8dé bid6r bidu8 bi5el bi6ele bi5erv 4bifa bi5g bi3ka bik1k bik6ki bi5k4l 4bi7kr bi6la. bi4l5ap bi4las bi4lau bi3let bilet5r bi4lin bil3j bil5la billa8ga bil5leg bil5m6 bil1o 6bi5m bi4nans bingo5 bin4gol bi7no 4b5int bio7 bi3o8m3s4 4bip bi4ri5 bi7ris. bir4ken bi1ro bis2a bi3se b5ish bis6hi bis7ke bi5s4la 8bisn bi4sp bis4p5i bis5se bi1st bi5s6ta bis4til bis5tru bi3s4v bi6ta. bi4te. bi5tes bi8ti. bi4tre bi6tri bjar3 bjek4t5o bjø6r 2b1k4 b5kh bl2 1b2lad blad3a bla6f3 bla8ga blak5r bla5me blan9da b4lank blan5ke b4lant b1lar b8larar b3lat bla4u b4lef blei8e5 blei5er b4lek ble4k3a ble5kes ble4mo b3ler ble7r6a b6lesa blesse9ne b4lest 2blet bli9ke bli5ma bli5me blings6i blis3s b5lj blja4 blo6dr 1blok blom5m b6lu blues3 blu9sa bly7gl blæ5re. blå5n blå3r blå7sa blå5se. 6b5m 6bn b3ne. b3ner b7nes. b7ni b2o boa5s4 bobba6ne. bob5by. bob9bye bo2bl bob7la bobs4 bo3de bo6din bo6d7r bo2dø 4boef 1boen bo2er bo4et. 2bo3f6 bo4gel bogn7 bog1s 2boh 2boj 3bok. bo2ka bo6kel bo4k3et bok1i bok1k bo6kop bo6k5ri 5bok1s boksi8da boks4p bo2ku bok3ve b4ol bol5eie bo7li boli7n bo7lo. bo5loi bo4l5o4r bol5s4p bolst6 1bomb bom4bel bom5m bo6mo bom1s4 bo5nap bon5ato 4bonn bon5ne bons4 bo5nus boo6 boom1 bo1p4 bo1ra bo4ra. bo6re. bo7rel bo3ren bo3ret bo4rete bo6ri. bo3ro bor6t7ef bor6tei bor4tes bor6t7et bor4ti bort5s6 b4o1s bose8te. 3boska bo2sl bos5se bo4sto 1bot bo4ta. bo4tak bo4tal bo6te. 2bo7to 4bot6r 4bot4v bou3c 4bo1v bow4e bo6y 4bp b7pl br8 1b4ra bra5ka brak5s bra5se bred5sp brei5e brei3s bret7te b6rev brevi9er. bre4vin bri5a b4rio b2ro bro9ar bro1s4 3b4ru bru5ke bruk4s3 bru4na bru7na. bru5nes bru5pl bru7ren bru5sa brus4l 1bry bryn4s 3b4rø brø5de bråe6 brå9ne brå5te. 6b1s bs4e b5s6e6a5m4 b4s5el b5s6i bsk4 b4sli b2sm b2s1of bs2t6 b6st7f b7s6v bså5 6b5t b7t6s 1b2u bu4ar 4bub bu3da bud5d6h bu3de 4bu3em bu4en. bu9ene bu4er. bue5s bu1i bu6is 6buki buk3l bu5la bu4le. bul3le bun7de bund4s3 bun8ge. bunk3r bunnla8ga bunn3s 2bu3o bu1p bu6ra. bu4re. 4bu3ro bu3ru bus6e bu4se. bus4h5e busk7ø bus6sek bus4sel bus6sent bus6set busse6te. bus6sj bus4sn bus4sp bus4st buss3v bu1st 4bustr 4busy bu1ta bu4tal bu7tem b5utg 4butst bu2tu bu1tø 4buv 6buø 2b1v 4b5w 1by bya2 by5al by9are by7dep by4en. by7ene by5ens by2er by3ers by4ge. byg3l 3byi by1lo 4bylø by5n by1re by6re. by1s 5bys. 4byse 6bysi 6bysp byst4 by4ste 4bysv by5tar by4te. by1tr 2by5v bæ5rar bæ6rar. bæ4re. bæ5ren bæ5rer. bæ5rere bæ5res. bæ5ret. bæ3ri bæ4r5is bæ3ru 1b4ø bø4e bø7ens bøf3 bø4kes bø6la. bø6le. bø2n bøne5 bøn6nes bøn7o bø6re. bør4s5k bør4sp børs3t børs8ta. børs3v bø5ta bø1v bøy7ar bøye5 bøy4ene bøy4es bøy4et 1b4å bå4de bå9des bå6e bå7ene bå4la bå1re bå6reg bå4rep bå4s3te bå6s7ti bå6t5j bå6to båt5r 1c4a cab4 ca4e ca5le ca5me ca5mo ca4pe. cap1r ca6pris ca3ra car5n ca5ro car4te. ca2sa3 ca6set cash5 ca5s4til cas5to ca1t cath5 ca3th6r ca4to. 6cb 4cc c1ci c2d cde6 cebo9 ce3d ce1i 1cel ce5le cel4les cel4lev 3cen. ce4ned ce4nee ce4nem ce4ne5s4 ce5nes. ce4net ce4nev 5cens cen4ti9m cen6to ce5o4 1cer cerba6ne. ce3re ce1ro5 cer3t 6ceru cest3o 2ch. cha5le 3cham4 cha7ne cha5t 2chb 4chei chel5s che7te chi4li 4ch3h 6ch5m 4chn ch5ne chom4 cho5s6 2chp 8chs 6cht ch1v ci1c 3cid ci2e cie8n cie2s5 cil5l ci3ne ci5ta 2c6k ck5ar. ck5art ck1en ck3er. ck4ere ck5e4t3 ck5et. cke8y5 ck1i ck1k ck1o2 ck7r ck5s2 cku6 ckup3 ck9ut c2l clai4r5 cly4 c1m cmini4 coa6 coat5 co6bid 1co4c 2cod 6cof 6cog co4la. co4lab co4lak co4la5r co2m co5ma com5t co6n5os con5s con7t co2o co7pa 2cor co3r6a co1re co4so 4cost co4ver c1pr cr8 cras4h crack4 cre2e creen7 cros2 5cru 4c4s 4c1t c6ta cty5 1cu 4cu. cu5la cu5le cu5lu cup1l cu6po cup1r cup7s cu4på 2cur cures4 cu6t cy2a cy6p7 cys3 c6z cæ5 1da 4daa 4daber 8dabo d5abs 6d5adel d4adg dadø4 dadør5 4daef 2daf 5dagb da4gev 4dagj dag7l da6go. da4g1r da6gun 4dagå 4dahe 5dahl da1i 2daka 4dako 4dakr dak4se. 4daktig da5kv 7d6al5j da1la da8la. da4las 6dalau dalbu8er 4d5ald da4les dal6so da1lu da4ma. da4man da3mas da4me. da3men 4d7ameri dame3s dame5t6 da3mo dam7pe 5dan. 6danal d8ane 9dani 2d1anl 3dann dan5neb 4danno 7dano d4ans. dan3sa dan4sel dan9s8kan 4dansv 9dant. 9danti 8dany 2da3o 2dap da3pe d3app 3dar. 5dara 2darb dard3s4 4darea da4res d5arn da2ro dar5os. dar5s6 dar4ta. dar6va. dar8ve. 4dasei 2dash 6dasi 4dasjef da4sk da9sko 6dast6r 6dasu data5 4da4tal data6le. datali8na da4tek 7d6ato da3toa 4da5tr dats6j d6aud daud7s8 dau5go 2daut 2dav d5avb d5avis d1avl d3av5s 4daø 2d1b2 dba8le. dba4ne. dbe5s6t dbe8ta. dbe6te. dbling7 dbo6en. d6byf 4d1c 6d1d d2dad ddag4 d4dak d4d5arm dd3eie d2dek dde4lap dde4l5o ddel5sv d4demi dder5s d4desu ddie8 d7dom d8d7orm d4d1re dd5run ddsa4 dd4sala dd4skap dds5tab dd3s4te dds5tr d2dyb ddø2 ddør3 d4d5øy dd1år 1de 2dea deak3 de2al de7b 6debar 4debas 3debat 2debe 4debl 2debo 5debon. 2debr 3debut 2deby 4debø de1c 5ded. 2deda 6d7edd 7dede. 4dedek 4dedel 4dedia 2ded4r 2dedy 2dee 5dee. de7er 2def d5eff d5eft 2deg 6d6e5ge 5degg de3gl 2deh 5dehavs 2dei dei4d dei4ene 3deig. dei8ge. 5deigen dei4g5r 5deik d2e1in 3deir de5is. de3ist 7de7it 2dej 8deka 2deke 2deki 2dekj 5dekk dekk3a dek4kan dek4kel dekk8s dekk7s6t de6k6kv dek2l 6dekly 5dekni de5ko 4dekod 4dekon 4dekos 2de5k6r dek6st deks7ti deks6tr 5dekt 2deku 4dekv 4dekø 4dekå d4el. 6delad 6delage de6lans 4delau 4deled de4lef 4delei del5ei4d del5eie 4de4lek de5lele 4d5elem de4lest 6d3e4lev 4delid 6delinj del5int 4delis 4deliv del4lap del6lei del4lek del6lerf del6lig d4els del4s5at del3se delses7 del4si del4spo d4elt del6tala del3te del7tr 6deluk de8l7ur del5ve 4dely 4delæ 2delø delø6pa. 6deløy 2delå 2de5ma d3emb 2deme demie4 4demj dem8na. de4mo. de4mog 5demok 4demol demo5no 5demos dem5pe 3demr 5dems 4demu 2demø 2demå d2en. 4dena de7nak 6d5en6den. 8d7en6dene 6d5en6der. de5neb 4dened 6denel 4denem 4denet 4denev 6d5engen. 4deni 4deno de4nom d2ens den4sin den4s3t8 den6t5ant 4dentif 4dentit dent3o den4tr dent5s8 den6t5u6 den6tå 4denu 2denæ 2denø de2ob de4og 2deol 4deopp 4de3or de4ove 4depak 4depap 2depe 4depi 4depl 6depu d2er der8am de6rant de4rare de4rark 5de7rast dera5te der3av der5d 4derea 4dered de4r5edd de4ref 4dereg 4derep 6deresi der5est 8derest. 6dereste 4derett de4rif de4ril 5derin de4rinæ der5k der5ne de5rob 4derog 4deros de5rose dero8se. 6de7rot dero4v der5s6n der4sp der3t der5un de5rup 6derus der3v 4derør 2derå de1s 3d6es. 2desa 4desc 2dese de5seg des5ers 4desho de8s9hop desi4s5t 2desj 2desk 9desk. 5deske 4des4le 2deso 2desp 7despl 6de5s6pr d4es2t 5dest. 5deste. des6tem de5sti 4destj 4desto 4destrå 4destu 6desty de4s3tå 6desup des6v 2desy deså7 d2et. 2deta deta8ka. de3te 4detea 6deteg 6detekk 4detel 4deten 4detep detes7 2deti 2detj 4deto 4det6r 2detu 4dety 4detø 6detå 2deu d1eur 5deus 2dev deva8ne. devi9er. 3devik d7ev8n de5vu 2dey 4deø 2deå 2d1f dfø6rarar 2d1g4 d4gel d5gi dgi6n dgjø6re7n6h d3go 2d1h dhav4s dheim2s5 dhu9ga dhø4r 1di di6ak di5alg dia5li di1ar dia3re dia1s dia7sp dias6t diats4 2diav 2dib did5ri di7ell di5en. 4di5end di1er dies4 3diff diffe5 3diful 4difø di8g9and di4gat di3ge4s5 dig7g 2digj dig8la. dig6le. 4digren dig5ret 4digru di2gu 4dih 4dii 2dij di5ka di8ka. di5kem 2dikj 6dikn 2diko 2di1kr dik7v 2dili dil4les di5ma 6dimed 6d5i6mel 4dimes 4dimet 2dimo 4d5imp 4dimå di5na 2d1ind di7nen 4d5ingk din3gr ding8s5en ding6s5er din8g9å dini4 di4ni. 4d1inn 2dino 2dinv 4dinø 3diog 7diol dio3na dio4no di3ori dio5tr 2dip 3dipl dippe7 4dired 4direg 4d5irs 5dis. di6sc di6sed dis4i disie5ne d6isk dis6kam di4skj dis6k7l di4sk6o dis5ko. dis7koe dis7ku dis5s dis1t dis7tik di5sv dis4vi 2disy di4tal di7te 4ditek dit4tet ditt3r di9us. di4va. 4dival di7van 4divek div6i 2divu 2diøk d1ja d1je. d1jen djer5ve d7jes. dje9ve d6jingan d6jingar d1jo dju8la. 5djup 6djupar d4jø. 2d5k2 dka8ra. dki6 d5kj dko2r 8d7out dku4le. 4d1l4 d3la dla4ga dland7as dla6te. dla4v d4ledi d2lef d4lega d7legar dle3ge dlei7er. d5leka d2lel dlem4st d4lenet d4leru dleva8ne. d5li dli4f dli5ke d5lo dly8se. dlø8pa. d5lå dlå9re 2d1m 4d1t dme6la. dmo4e dmors6 dmo8s dmø4re. dmå6la. 8d1n dn6a dno8de. 1do 2doav do2b3 4doba do3be 8do9b8lan 2dobå do4da dodø4 dodør5 4doeu 2dof d3off d5ofr dog6med dog4me5s 2dogr 6do5i do3ki 4dokine dok6kan 4dokn do5le 4doled doli8ne. 4dolinj 6dolis 4dolj dol5l4 4domes do5mis 4doml do4mo dom7p 2domr dom8sa dom8s5e6 dom6s5i dom4s3k doms3l domsla6ga dom4so do4mu do4na. don5g 4donke 6d7on6kl don5st don5t4 2dop do4pa. do4pe. 3dopi d6o1ra do5ran 2d1ord dor4da do1re dor6gest d5orie dorm8 do3ro 5dorp 3dorr dors6 dors7ke do1ru do7rye 5dos. do4se. do4set do1sk 6do7s6l 2doso 4dosp 2dost do3str 4dotr 2dov do5va do5ven do4ver dov9n 4doø 2d7p8 5dq dr4 d1ra. d5raa d9rad. d5rade 1d6rag dra5gen dra6kes 3drakt 1dram 5d6rang 3drap. 5drapa 3drape d3rapp d1rar d6rarar d3rarb dra6ret d5rarm d5rarr d9ra8sa 9dratt drau7ma 2dre. 5dreass 2dred d5rede. d5reder dre7d6r d5reds 9dreg. 9drege. d3regj 3dreie drei5en drei5er. drei7ern d5rej d6reka d7rekk 3drekt 4drel d7relig 4drem d1ren 4drer d3ret. d3retn d6retr d3rets drett4 dretts5 5drevet 3drevn 4dria 3d2rif 2d1rig d2rik d3rik. dri8ka. d3rike 3drikk drik7s6 d9rikt 5d4ril 2d1rin dring6 drit7tr drit5u dritun8ge. 1d2riv 3dronn dro6pa. drop5s 2d1ror 3d4ros dro8ta. 2d1rov dro5va dro3ve 2dru 3druk d1rul d1rum d3rup 6d5rut 2dryk drykk4 d2rys d4røm drø6re. d7røt drø3ve 5d8røye d1råd drå4de. 3dråp 8ds d5sa. d3sabl ds1ad ds3a6del d1sag dsa9ga dsak6se. d1sal dsa8la. d4s3alf d6sall d9same ds1a6n ds5ane ds1a2r d2sas d4satf dsbø6n d5se. dse4d ds1ef d2s1ei ds7eks ds3ela dsel4s5a dse2m ds3emi d6s7enda dsen8de. d4s3eng d5sens ds3e2p d7ser. d6serf ds5erk d4s5e4sk ds5e4st ds3eta dse4te. d5setj ds1ev d2s1i d3s2id d7sida ds5ident d4s5ide4o3 ds3idr d7sil ds5ind d3sir ds3i4s dsi4ve d4s3jen d2sjo ds7jor ds6ju ds5kab d4s3kan ds3kar d4skat d1skj ds5kjen d6s5kjøt ds1ko d5skot ds3kro d4s1kv ds1l ds5la. ds5lan ds6lem dsli6k ds6lo. d9slott. ds4luk ds3ma d6smo dsmå6la ds3ne ds5no ds1o2 d7somst d4s5os d7sot ds1p d3spek d3spel ds2pi d9s8py 6d7run ds5s4 dst4 ds3tak d4s3tal d3s8tar d5s4tat ds6tau dss8t d8s9te. ds9teik dste6ma. d6s5temp ds5teo d3s4tig d3s4tik d5stilli ds1tj d3stor d3stri dstu8na d5stund ds3tv dsty8e ds3tyv ds1u2 dsure6 d5s6us d6s7usk ds1v dsva8ne. d3s4vet dsvi6ka. d5syk d3syn dsy6na ds1yt d2s1ø d6sør ds1å6 6dt. d3t4a dta6la. dta4le. dta4s d3tem dte4ma. dt4eng dterle7 dte4se. d5t4et d4tg d3ti dt6j d7to d5t4rag d6troc d5t4rø d6t1s2 d3t2va dtø8 dt6øk dtørs3 dtå4 1du dub5b dub5l du1c du9ene du9ens due5s 4dufo 3dug 4dugu duit6 du6ka. dul5l 4duly dums2 du4na. dun7de 4d5uni dun5s6 dun7sta 7duo d3upk dupp6e5 3dur du6ra. du6re. du6rei dur8ta du1s du5s4a du9sem du5s2i du2sk du2sl du2sp duss4 dust4 du2sv 2d1ut d6utt du6va. du4ve. 2d1v 5d8va6le dva4ne. dve6s dve6va dve8ve. d7vo dvo8r 2d1w 1dy dy9a 2dyba 2dyf dy5ke. 4dykl 4dykø 2dyl dy4na. dy4ne. 4dynk dynk6s5 dy3pes dy2p3r dy4ra. dy5reba dyrle8ge. dyr5s4 dy2r5u dyr5ø 7dys. dy8sa 4dyse dy6se. dys7s dyst7r dy2t d5z 8dz. 1dæ dærs4 1dø 4dø. død2s1 dø3gr 2døk d5økn dø4ma dø4pe. dø4pen d2ør dør3i 2døs d6øs. dø2st3 døt3 dø9va dø3vel dø1vi 6døvl døv8le. 2døy. døya8 døy8g 4d9øys 1dåd dåd6s5 då8na. 1dåp då8ra. då5ri d3ås. då8sa. d8åse då7sem d7åt. 2ea e1a2b e1ad ea2d1i eadli5 e1af ea2gu e1a2k e4akr 6eakt eak6se. e1al. e5alle eal8le. ea4lov e3alte ea2lø ea4m1 e3aman e5amn e1an e2an. ea4ne. e6a5net e4ani ean7n ea4nor e6ans. ean3sl e1ap ea4pe e1ar ea2re ea5rer ea5ret ea5r4i ear6ka. ear8ma. ear4ta. ea2s1i e3asp e1ass ea7ta e5a4tel eate6ren ea4t3et eat8h eat6le e8ato ea5tri e1att e1au eau6ga eau6ge. eau8ra. eau6re eau5s eau8sa eau8se. e1av eav8la eav8le. 2e1b2 eba3d eba4ne. eb3be eb4be. ebe4d3e6 ebei7er. eben6s5k ebers6 ebesku5 ebet5s eb3h e5b6lo eblæ5 ebob3 ebo4da ebo5ers. ebo6kr ebo6la eb5s ebu4e5re ebu5ern ebu6et eby4ta ebø6n 2ec e4ca ec4c e1ce e5cha e3com e2dad ed5ad. e5d4ag edag4s5 e2dar ed3ark ed3arv ed7dela ed4dyr e3de. ed5e6ge ed5eg4n ed3eie e4deks ede8le. e4denf e8d5eng eden5t e6depr ede4ra e4derø e4desk ede4sl ede4sm e4desn ede4s5p ede4ta e6d5ett e8dé e5d6ia edi6a5ne edi4ene edi6gj ed4is edi3si edi4s5k 3e4dit e7div edle6ge. ed8ob edok8se. e4dol ed1op ed1ov e1dr ed2ra ed3reg e5drev. ed3rom e6d5ryg ed7ski ed3skr ed3s4la ed2sm ed5ta ed3te edt6r edu8a ed7va edvi6s e3dyk ed5ynk edyr6ke. edæ4 e3d6ø1r e3e2 eea7 ee3b e2ed ee3di eeg4ga eeg6n ee5gå eei4d eei7ni eek1e eek4te ee3la e5e4li eem6na ee4n e5enb een3in e5en6k een5t e3epl ee8ra eer3en ee3ri e4er3l eer4me. e6e5sh ees8ka ees6ke. e3e6t eev4ne. e1f 4efa efal6s7 e4fana ef3ank e4fark efar6s5 ef7ea ef5ef ef3fe 3effek ef3fo 4efi e4f3id e5fig e5f4ilm efi7ren efisken8 4e3fj 2efl efle6ge. eflå3 e2fn efo8bi. efo4no 8efr ef2sj ef2sk ef2sp ef6str e8ft ef2ta efta5r eft5ei ef5ter eftle8ge. eft1s4 6efu efyrs5 e3fæ 4efø efø5le eføy9 2ega e3gaf e6gala e7gam ega4ve. egde8l eg7des e5gedo egei9e ege4let e2gem e3geme egen5s 3e4gensk e7geom e2ges2 ege5sp eg9gen egg3l eg8g9ut egi3an egie2 e4giko egis4p e3g6lad e3g4led eg7lesa e5g4lit eg7ly e5g6lø 6egm e9g8nag eg4nem eg6no e7gnå 4ego e4go. 7egoi eg2r egrans5 e7g8rø egs4am egs4ki egs4ta e1gø egøy6e5ne 4egå egå4va egå4ve. e1h ehea4 ehei9e eh5er. e4h5ere eh7ern eher4s ehog5 ehov2 ehy6re. ehø8va e6hå. 2e8ia e9iakt ei9a4n ei7ar. ei4c e8id. ei3d8ar e3idea e3ideo ei9der ei5det 5eidf 5eidg e6i2do e1idr ei3d4u e8i7e eie5d ei8eg eie2n ei9en. eier3a ei4ert ei6es ei1fl 8eig. ei3ga eig6e ei6gev ei5gi ei6gra ei6gu 4eii ei5kaa ei3ke. ei6kee ei6keh ei4kel ei6keri ei4ket ei1kr eiks3a eik6se eik4so 4eil ei9led eil5egg e3illu ei3lo. ei9loa eil5op ei5los eil5s6 4eim ei7ma. e5imag ei4m5a6l ei4med ei6mei ei7men ei4me5s ei4met eim9ett ei6mo 8e1imp ei4n3al ei4nans ein5ant ei7nare ein1d 4e3indu ei5ned ei7nel ein9f einga6 ein3gr e4ini 6ei6nit ein3k4 e5inkar 4e1inn ei4nom ei4nov einsi9d ein4s3l eins6o e4inspi ein7sto ei2n1u4 ei3num 6einv ei2n3ø ei5or e4ip ei9pa ei3pe eip5s 2eir eir9ak ei7ren ei3ri eir5s 2eis ei5sar e4ise ei3se. eise5i ei3sen eiseri9e8 ei3s4ha ei4sil e3isk. e3iske ei6s3kj eis3ko ei3s4pe ei4spi ei4tek ei4tera ei4tere ei2to eit7ta ei6t7ut ei3tve ei6t7ø ei4vak eiva9r ei9ven ei3vi eiv5s4 e1j ejo8en. eju6la 4e1ka ekali7 ekalie6 ekam6s5 eka6ra. e5kavr ek3eie e4kero e4kes ek5e4ta e6key e5k6hov e1ki e4ki. 4e1kj 2ekk ekke7le ekk9ist ek1kj ek4kjø ekk3l ek5kok ekko5v ek6ku ek4ky e1kl e8klane ek6leg e6klen ek5let e3klu e5klæ ek2lø 4ekn ek9na. e3knek ekne7s ekni7p ek3no e3k4nok e1knu e5knø e1k2o e4ko. eko7le ekords8 eko6te. e4kov 2e1kr e3k2ra e3k4red e7kref e3kren e4k5ret. e5krets e5k4rev e3k2ri e3kro ek4ry e3k4rå ek5råd ek3s4ak ek4sal 3eksam ek3sel 3eksem ek4sig eks1k ek4ska ek8sn 1eksp eks5pe ek4sta ek7s6tel ek3sti ek4stil ekst5o ekst3å ek4sæ ek6t7arm ekt3av ek3tef 5ek3tep ek5tes ek6test ek4tid ekti5m ek5tiv 4ekto ektori6a ek4t3ra e6k6t7ro e1ku eku4le. e1k2v ek4val ek6var. 6ekve e4k5ve4d e4k5vik ek4vin ek6vis 3ekviv 6e5kw e5ky eky6te. e3kæ e1kø e1kå ekå6pa 2e1la ela4ga el3agg e2l1ak e5lake elak8se. el7akt el1al e8lame el3anl e6l5arg e4larr el7arti e5las. e5lase ela4te. el5ato el5avl el3avs elbo8da el4ch el5do eld4rer eld5sle 4eled e4ledi e4ledr e3lee eleg5d ele7ger eleg8na e7leir e7leis e5leke e2lel e2lem e5lem. e5lemat 5elemen e5lemet e3lemm e3lemp 4elen ele9na e4l5enh elens3 e4lentu e5lepa 2e3ler ele8ra. e7leret e6l7erg ele3sk e6lesku e4leta e4lete 5e8lev. ele4vak 6e5levn el5fi el9ga. el5gele el5gi elg3s8 2eli e9lie eli5e6rer e4lif e4li5g4r e4l3ind elin5es e4linsp eli6o5s eli8ta. eli4tet 6e5litt eli6v7en el1j elk2 el6k5al el4ke5s el4kete el3kn el5la. el5l6ar el4led el4leg ell5eie el5ler el3le4s el6lete elli7ga. el4lisj ell7sa ell5sk ell5s4l ell5sp ell5sv el5l4ur el4læ el5m4o el5mu el5n 2e1lo elo6ka. e2lom e3lomm el3omn el3oms el1op e2l1or e3lort el3ost el4ot elo7vers. e4l5ovn el4pet el5ph elro4s el4sei els5eie el3sen el3se6s3 el3si el4sje el4skal 7elskand els5kare els1l el6sno el4spe el3spr els4ten el4sti el4stj el2sø els5øk el5s6åpe elta8le. el5te. el6teg el4tero el4t5ett el4t3op el4tro elt5rop el2tu e3lua e1lu2e e4lu4he e3luk e7lum el3ung elun6ge. e7lup elu8pe. e1lur e7lus el3utr elv3an el4ve3d el4vei el6vere elv1r 5elvs. elvæ6re. 4e1ly ely8et. el5ynd 2elæ elæ5res el9ærv e6l5æt 2elø e4l3ø4r el3øy. el5øya el5øyd e6l3øyn 2e1lå el1år e5låt 4em. e2mad emafo5 ema4ge. e4magr e2mah ema4ke. e4mako em5akti e4maku ema6le. 5e4malj e4mam e4mana ema4ni. e6manu e4mare em7ar8m e4masi e6masku e4mata ema3uk ema5ve 5emball 3embed embe6r5 3embet 6emd 8eme emei9e eme4li e4mend eme5tri eme6trisk em5e4v e4mib emi5ert e4mig 4emin emi5ni emini6st e4minor e6mir emi9sa em7je e5mju em5le emle6s em5me. em5men em8mi. 8emnd em4ne. em4ned em4nem 6emni emo5nol em1op e2m3o4v em4ped em6peri em2p3l emp9lane. em6pli empo3 em4pol em4pos em4ses emse8te. em4s5ju em4s1l em2sn em4sor em1st8 ems4te ems3u emta8la em4til e3mug e2muk e5my emy4k 6emø emø8r e5møy emå4la emå9lan emål4s em1å8r 2ena en1ak en3ald ena5li en3all en5and e5nane e6n7ang e4n3ant e5nar. en8are e4narr en3ass enat6s5p ena2v en3avi 4enb enbe9na en4d5and en4dek en3del endelø7se en5demi en3der en4desl end5l 1endr en4d3ro end3st en7dø endø4r endør5e en5egg eneg8ga en3eie en5eks e3nekt 4enem 2enen en5eng 3energ e4nesk 4enev ene7ven eng6a en7gar en4gem en4geri enge6r5u en4gle eng4les eng4r eng3s4e eng5so eng5sp engs4ti en4gut en4g5å 4enhj e4ni. e4nierk e2nif e5nir en4kera en4keri 2enna en9nal 2enne en4nem ennes6t enne4s5v enn2i enn2o enn4sj enn5sta enn7ø 2eno en3ok en3og e8n7old en3om. en1op e6n5ord 2enp en4pås en4rem en5sab ens5af en6s7a6ker en4sek en4seli 5ensemb en4ses4 ense3u en3si ensi8de. ensi5ert en4sim ensle7g ens6lev en7s6opt en1st en6s7tal ens4ter ens4ti ens7und ens4ve ensvi6 en2sø ens3øk ens7å en5ta. en4tap en5te. en4tec en4teg en4tel en3ti en5tie en5tig en5tik en9tima en7timen en4to4r ent5ori ent5rab en4tre ent5ren en4t5rol entropi5 en4t3rå en6tul entun6ge. 3entus 2enu e2n7ul e4n5ur 2en3v 4enw e4ny. e2nyb e6nyr e2nys e4nyta 4e7næ enæ8m enø4k e2n3øv en5øyd 4enå en1ås en6ås. e3o6 eo3a e6obe eo2bl eo5d eod8de. e1og1 eo7gr e2o1i e2ok e3oks e2ol e4o7lo eom1s4 eon8de. eo5ne e7onk eon4kl e3ont eo2p eo3pa eo5pl eopo3 eopp5r eo3pr eor4da eo9re e2ori eo4rid eori5e6 eo4rik eo4ris eo1ro eo1s eos6l e2o1u 2e1p epa3t e6peno epe6p eper5r e3pes epe4st e4peta e6peu 3epid epi6ka. epi7kr 8e7pin 3episo ep2l e8plen ep5lene ep5ler eple9s6 3eplet epo6et 3epoke epp2s ep6sem ep4ses4 ep6s5lu eps1t ep2su e3p2sy ep6tin ept6r 2e1ra e4r3abb era8da. e4rael e2raf er3aft e4ra4g e2r1ak e3rake era5kl eral3u e4rama era6na. e5rande. e5ra7ne er7anli era4no er5ape. er5aper er5a4pin er3apo er5appe e5rar. e4rarg e5rasane e5rasar e4rasje e4rask e6raso e4r3ass er6ast e4ratek era7tor e4ratr er5att e2rau er5auk erau9ken erau8s er3av. er3avh er5avl e3ravn er3avr er3avs 4erb erbi9ti erbo8da erbo8de. er8byl erd2e er4ded erden8s er4dis er1dr erd4ra erd8re erd4skj erds3t erd4sto erdsto8ga er3d4v e1re er3eff er3eft er5e4gen er3eid er3eie ere6ka ere6ke. e4r3eks e6r5ekte e4r3e4le ere4lit e6relli e4r3els e9rem. e5remm er3emn er5enden e4r3eng e4r5enh e3re4o7 er8er. e4r3erf e5reri er3ess ere4t e5ret. e4r3eta eret6h ere5to e7rets 6erett eretts5 e4r3e4va e4r5e4ve e4r3evn erev6ne. e8ré 5erfari 6erfi 4erfr 2erg erg5elv ergi3f er6gli er4go. erg5ret erg5sko erg5sp 2erh erhø6re. e1ri e4riad e4riak erib3b eri3bl e4rice e2rid e5rid. e5ridn eri4kat e6rikn 4eril e7ri6ma. er3ind e3ring 6eringar ering6si er3inn er3ins er3int e5riori e5ris. e4risa eri3se e4riso e6risp e5rist. e7rista e5riste eri5stil e4ri5s6to eri5sø e4rite e4rito er7ivo er7jes. 4erka 8erke erkeri6e er4kesa er4kese er4kete er6k5ett 3erklæ 6erkn 4er5k4o 4erkr erland7as erle6ge. erle7s8t er3me ermo8de. erm1s ermå6la. 2ern er4nad er4ned er5nede er6nee er4nero er4nest er2no er3nob 2ero e3roa er3obl 5ero4b7r e1roe er3off e1rog er5oks e1rol er3oly e1rom er5omk ero5mo e1ron er5ond erono5 er1op e5rop. e7ro6pa e5ropen er1o2r e5ror. e3rore e7ro4sa 3erosj er3osl ero4ta er1ov 2erp 2err er3ra er4rae er4rel errie9n 6ersa ersa8ka ers6al er3sep 6ersj er1sk er3ska ers4ka. er8skaran er9s6karar ers5kor er1sl ers4la ers6led ers4mi er5sne 6ersp ers5tens ers5ter er7stev er1su 4ersv er4sva ers4ve er1så er4s5år 2erta er4tare er4te3s4 er5tia er3tib erti4e er5til erti4mo er4top ert5rol 4erts ert3sa erty6e ertå7ren 2eru e1rua e5rud3 e1rui er1u2k e3rum e4r3ung er3uni e3rup. er1u8r erure8 e1rus er5ut. e5ruta e3rute er5utn er9uto e4ruts er7u6v ervele8 6ervi ervs3 ervæ6re. e1ry4 e2r3ya erye7ne er1yr erys3 e1ræ e9r4ære 2e1rø er5økn e4røko er1ø4l e4r5øn e5r6ønn erø8ra e6r5ør6s er3øya e4r5øy7e erøy4n e4r5øys. er7øysk 2e1rå e9rå. erå4da erå8de. erå6e erå4k er5åke er3å4l e2r1ån er3å4p er3å4se erå6t er7åta9 e6råv 2es. e1sa es5aa e2sad esag6 es4al esa6la. esa9met e4s3ant es5arab es5arv esbi9e es8ce 2ese es5ege es3ei4d es5eie. es3eig esei8ge. e3sek e4seku esel5s4 e3s2en e5ser. e5sere e5seri e4s3erk ese5s2 e3sest e4sesv ese5tas ese4te. e5setj e9sets e4seu e4sha es6har esh9ar. es4h5er e4shi e1sho e7s8hop esi6ar esi5ert e4sil e5sili es3ill e4s3ins esi6v esi3st es3jor e5skab es6ked es4kee es4ker 8eskil e4sking eskinns5 e1skj e8s9kjer. es4kjæ e6skjøn es5k4n e5sko. es7koa e3skot e1skr e1sku esku5et es3kvi e5sky e6skyr e1skø e7skå eskå7r e1sla es4lek es4let es7let. es7lets es4lit e4s5lok es4løk es4løv es4make e7s4mett es9na. es4ner es2no es4nu es2ny esnæ5re 4e1so eso4b e2s3od e2s1of es3oks e2som e3somm e4s3ori e1s2p espa9ra es3pas es5pe. e4s4ped es5perm es3pl es4p5le es3pol e3spor es3pun es4sed es4see es4seg esse7i es6sendi es4s5enk es4ses es4sete ess5e4va es4s3ja es4sje es4skr ess4let ess3om es4sos es4spa ess5tilt es4stol ess5tor ess9tua ess5tue esstu8en. 4essu es2s1v es6s5å e7stad es5tae es7takt es9tala e8stane e5stans es5tant es3tap e5start e3stat es5tato e4s3tau e7stav. est5avs e6s5te. es4teg est5eie est5eig es4tek es4tel e5stell es5tels e4stema e6steme e4stemo es5temp 6esten e7steng es5tenk e8s7ter. e5s6terk esterne8 este3s4 es4test es4tien e3stif es4tig e3stik es4tikk 5e6s5tima es4tis e4stiv e1stj es3t6on e4stog e3stok e3s4tol es6tone est5ord est5ori es5trak est5rene est5rer est9ré es5trib e5stryk e3strå e1stu e5stud es5tus 8estå estå5ren estå6s est7åse e1su es5ut esva5re e5s4vek es5vig e5svikt es3vis 2e3sy esy4na e4s5yt es5øvi es7øye e1ta 4eta. e4tae e2taf etafo7 e3tak e6tako e3tal eta3la eta4la. et5ald 8e7tank eta5le 4e5tall etal6list etall5s6 etal4s7 et3amb e6tand eta4nen et4ap e9tapa e5tape 3etappe et8ar. et8are et5art 5e6tasjes 1e2tat 4e5tati e5tato e3tatt et5aun e8tax et1c 2ete e4teie e4teka ete4ma. e5teran ete5ru etes5i e4tesl et8et e5tet. e7tets 4eté 4eth et6her 2eti e3tit 2e1tj e7tjer et3jø 6etl et5m 2etn et6nev etning4 etnings7 2e1to eto4er et5oppd et3ord e4tot 2e1tr e5t4rad e7t6rak 8etre e5tree e5tref e4t3ris e9tru. et5rum ets1 et9sar. et4sku etsku8le. ets7l etsla8ga etsnæ4 et2sø et4tak et4tal etta6le. ett5alt et4tank et8tap et5te. et6tei et6telt et4tenk et4tenn ettera4 etter5at et5t6erf 5etterk 5etterr ett5esk 2etti et6tia ettian8 et4til et2tj etto5a et4tr ett3re ett4ski ett4sti et3tug et4tur ettvi5se et2ty 2e1tu 5e6tui etu6na et3uni 2e3t2v e4t3va e5t6vang 2e1ty 4etz 4etæ etæ3ra e1tø e1tå etå5re e1u eu4a e8uf eug8la eu4h eu4ka. eu2ke eu5kem eu7kr eu2l eum2 e3u2n eun4ge. eu5nu e4up5a e6upk e2ur eu6rat eure4 2euri e3urn eur8na eur6ne. euro1 3europ e3urt e2us eu4si eu1ta e3uts eut7t e4u3z e1v evad6r ev5akti eva4la evann4s e4v5anta e4varar e4varb e4v5ark e6vatf 6eved eve5d6a eve5del 6eveg e5vegg evei6s5 6evenn even5s 5eventy e4veny e9ver. e5ves. e5veta e5vev. evi4e evi5ere evi5ert evin4s evi4se. evis3t e2vj ev2na evn5a4k ev7nu ev7oms e4vre e7vri. ev9rå ev1s evs8v evta8la evti4 e2v3un e5vyrk e2vø ew3a ey1 eybal4 e1y2d ey5k e1yng e1yr eyr6ka eyr4ke. e1y2t e7yti ey3tr e3zi e1zu e1æ2 eær3 e1ø4 eør6na. eøy4 eøy9an eøy7en e1å6 eåk4 eån8da eåt8t é1a é1b é1d édø4r5 é5e8 é1f é1g é1h é1i é1k é1l é1m é4n5e é5n6et é5o é1p é1r é2rj é1s ése2 é1t é1v éva8la évo8re. é5å è1r è2red è2ref è2rek4 è4rener è2rep ère3s2 è4rest è2rev è6ves ê8lan ê6ra ê1re êr7o êr9sl 1fa 4fabo fac8 fa1ci fa3de fa6de. 6fadm fa4f fa2g1a fa5ger fage4t fag5eti fa2gi fa2go fa2gr 6f5agro fag3sk fa2g1u fai5 2fakr fakse9t fakta3 fa1ku 5fal fa1la fal6kes fal4k3l fal6lers fal5m fa4lo fal4sk 4fa5mo fa4na. 7fan5d 5fane fanfa5 fang4s fangst7ev 4fank 2f3anl fan5s6 fan7tesk fan5ti fan3to fan4try 6fanu 2fap 3far 9f8ar. fa3ra fa4ra. fa4re. fa4res far4gel far4ges fa4rit far5n far6skj fart2 far4vel 4fary fa7sa fa4sel fa4seru 2fasl fast3r fa3tal fa4te. fa6t7ers fa1to fat2r fa3t6re fav5ne fa1vø 2f1b fba4ne. 2f1d 1fe 3fe. 2fe1a4 5fea. fe5a6l 2fec fe4da 3fede fe2dr fe3dra fe3d4ri fe7ene 2fef 2fe3g 2fehj fei9en fei9er feig4de fei5ge feil5es fei4li 9fein. 7feine fei7ter 8fej 2fek4a 4fekl 2feko 4fekr fek6tes fekt5ev fe5lag fe5len fe5li feli7e6 6felik felles5 fel7læ 2felo fel5ok fel9ta. fel4tek fel4ti fel4tra fem5ak fem9b fem9ne fe4mo fem5s fem4tid fe2m1ø 5fen. 4fena fend9r 4feni 5fens fentleg5 2feo 2fe3p2 5fer. fe6ral 4feram fe5ras fer6at fer4dam fer5de 4ferea 4fereg fe4rek fer6en fe7rer. fer5ers feri6e feri8e5ne 7fern fer2r fers9kar fers7ke 2fe1ru 3fes. 2fesi 2fe1sk fe2st fes9t6i fes8t3r fes9tum fe6st9ø 4fesy fe6ta. 4fetap fe4te. 4fetea fe5ti 4fetil 2fet6r fett5j fett7s6 4fe4ty 2feu 2fev fe4ven 2feø fe6øy. 2feå 1fér 2ff f7fa. f4fab f2f3a2g f4f3ak ffa7l f6fann f4farb ffar6d ffa7re f9fas f6fat f8f9au f2f3av f2feb f2fe3d f2fee f6feh ffel7t8 f2fem f6ferdi ffe4rer f2fes f4feti f4feto ff5eve f2fib f4fice f2fid f9fien f4finn ff5int f2fip ffi5s4 f2fj ff3la ffla8ga ff9leg ff5lek ff3li f2fo ff4ol f2f3re ff1ro ff5sl ff5t4 ffu6r f6f7ut f3fæ f4fø 2f3g2 2f1h 1fi fia7l fia4n 4fiap fi4as1 fibi6en fi9cen fici7 fi7di fie2 fi1er fi7e6re fi4f fi5fi fi5fo fi7fl f6ig figh9t fi7g6r 4fih fi9ka fikali7 fikalie6 fi7ken fik6ka fik6k5n fi5ko fik7sa 4fiku fi4la. fi3li fil6lel fil6leri fil4les fil7leti fil8m7at fi1lo filt6re fil7tres fil4tri 4filæ fin5art fin5d fi4ne. fi5ner fing3r 6finj finn5ei 6finnsa fi4n3o fi9nor 2fins fin6sleg fin6te5s fi2nu 7fio5 fi2r fi3ra fi6ra. fi9rene fi5res. fi3ri fi5s4a 4fisc fi6se. fiser6s fi8si. fi2sk fi6ska fisk5a6d fis7kal fisk5and fis6kart fis6k5end fis4k3l 6fiskol 6fisku fis5ti 6fistu fiti6me. 4fitr fitt5s fi7ty fi4ve. 1fj f1jeg fjel6lend f5jen fjer5ne fje4sk fje2t3 f5ju fjære5 fjæ4res8 2f5k6 f2l2 f5lag. f6lagg fla7ke f4las 2fleg fle6i f4lek f6lel fle6r5u6 fle4sl f4lett f3lev fli7ne flis7t flit9t8 1flo flo9ga flok9s flo2m3 flo6r5o flos6kl f6lu flue3s flus8 fl5ut 3fly fly3s4 f3løn flø5s 1flå flå9sa flå7se 2f1m fn6 1fo 2fo. fo9ar 6fobs 2foe 4fof foi7la fo8ke. fo6la. fol4dr fo4le. fo5led fol6k5v fol9ler fol5lese folke5s6 fol5li fo4lu 3fon fo4na fond2 fo5ne fo3n4id fo4nin fon1s2 f1op for1a for9drev for7dro for5d6u fo6re. for9ei for7e6n for5ent for5ess for4et for9e8te. for9e8ten for9g6 forh6 fo4r9in fork8 forlo7v forlø9pa forlø9se formo9r for3n foro6 for5p4 for3se forsi9da forsi7de. for3s4m fors8t for9ste fors4v forta8le. for5t6e fortei9e for7t6i forti5da for3t4v for3u4l for7v6 forva9re fo8r5æ4 for5ø4 for9å fo9se fosfo5re 4fosj fo4ta fo6te. foto5 fo4tok fo4tom fo6top fo4tor fot3s fots6v fot3t 4f1ov 3fô 2f3p2 fpo6e fr2 1fra fra5l fra4m5e fra6mi framma8ne. franko5 fran7se fra7r8 fra1s fra5se. fra7sep frasi8e fra7sk fras6p fra7v fra7v6r f2re. fred8sel freds5t fre4e3 8freg f4rek fre4m5 fremma8ne. frems4 fre7ne fre6sk fres7ko. fres5koe fre8s9v fri5a6re 6f5ridi fri4erf f1rin fris6ka fri5s4p fri5s6til frite8re. friti8me. 6froc fro7f fronta9le fro8st frus1 fruta6le. f1ryt frø5b f4røk frø7ko frå9r fråve4 2f1s fs2h fsho6 fsi2 f5sjuk f2sl fsle6ge. f4sm f2sn fs7ne8 fs5ov fs2t f2s3tab f6s5tan f4s9v 2ft f1ta f3ta. fta7f ft1ak fta8la. ft3alg f2t1am f4tana f7tane ft3anl f5tar. ft8as4 f6t1av f2tea f3ted f4tee f2teg f2tei f2tek f6tem fte4na ften3d f4t3enh ften5s6v f2teo fte4r5a4 f4terin fter5s f4test f4teta f4t5ett f8t7id ft3ind f2t5i4s ft5l ft7n f2t1o2 f5tog 3fton ft3r fts5alt fts3ei fts5ers fts5erv ft2s1i fts1k ft2skaf ftsla6ga ft5s4lan ftsle6ge. ft3sto ft6s5top ft5s6tri ft5stø fts1u ft2s1ø4 ft5t4 ftta8ka ft1u 1fu fu8ga. fug9le. fug6l7eg fu6le full3 ful9lar fulle6 ful9le. ful4len fullen8de. ful4ler ful7les fullfø7re funn2 funns3 funnsla8ga fu6ra. fu6re. fu9ret fu7ro furu1 fu7sel fu6sk fus6o7 fu4s5t fut4h futu1 4f1v fva8la 1fy fy5la fyr2 fy8ra. fy4r5a4b fy1re fy4re. fyr7k fyr8ke. fyr5t fy3s fysa7 fy8sa. 2fæ1 1fø fø4da. fø4dek fø5den fø4des fø5des. fødsel8s7 fø1f 2føk fø4le. f8ør før6a fø5rar fø4re. fø4res fø7resv fø8rete før6tin 4få få7ren få7ret få5ri får7u få7va 1ga 4gaba ga1bo 6gabø ga3da ga4ded 4gadg 2gadm 4g5adr ga4e5k gaffel5 6gaflo g3aft 6gah 6gak g1aks gak8ta. gak8te ga3kv ga1la ga4la. galei5 ga7len gal4les 4galli 5ga7lo ga4ma. 4gamb ga5mer gamme6l5 6gand. 6ganden 9gane gan5g6en gan4g5j 4gan5k 2g1anl 4gann 4gansa 4gansv 4g5antre ga6pa. ga4pe. ga4p5l gap3s2 ga6p7u 9gar. ga6raf ga6r5ak 2garb 5garbr 5garby gar4dek 7gare. 4garea gar5es gares6ke. gar2i 4garki gar3ne gar6ta. g5arte gar8te. g3arti gart5s6la gar4un ga4ryl ga4sc ga5s2i gas8ka. gas8ke. ga6ski 4gasp gas6sel gas5sen gas7ser gass5ett gass3l 5gast gas5te ga5sto ga6s6t6r g2at ga4te. ga5tens gate5s ga3ti ga1to ga3tr gat6tap gau5la. 9gav. 2gavd 6ga4vei ga4veri 4gavg g5avk 2g1avs 2gavt 4gavv 2gaw 4gaø 2g1b gba4ne. g6byk 2g1c 8g1d gd5alt g6d5au gde3a g2deb g3deba g4dedi gde5lo g2dem g4dend g2de5o g4dera g4de5re g6dero g2des g2det g3det. gdevi8sa gd5op gd1or gdy4d g6d1øy 1ge 2ge1a geak8ta geak6te. gea7ren ge4ark 2geb 6geba 4ge5be 3gebri 4gebrå 3gebyr ged4 4gedan 6gedel gedia5 9gedom. 7gedoma 9gedome 7gedomme 6gedoms 4gedos 2gedr 2gedy 2gedø 2gee geen8de. 2gef g5eft 3gefæ 2ge1g2 g5egg g3e2gn 2geh gehø8ve. 2gei g1eie g4e1in gei4r3 gei9re gei8s7p gei6st5 3geit geit3a geit3o gei4t3r 2gej 2gek2 ge9kl ge3kn g1eks 6gekt 5gel. ge4lar 4gelau ge6le. ge7lea 4geled 4gelei gelei5er 4gelek 4g3elem ge5len. ge5lens 5gelet gel5ett 3geli 4gelid 6geligg 4gelit 6geliv 2gelo ge5lov 7gels4 gel3se gel5si gelsk7l gel5t4 4gelu ge5lun gel7ve 4gely 2gelæ 2gelø 2gelå 5gem. 2gema 9gema. 2gemi 3geml 4g5emn gem6na 2gemo 9gemr 3gems 3gem4s5t ge3mu 2gemy 2gemø 2gemå g2en 3gen. ge2n1a ge7n6am gends6t ge3nea 4genem gen5erf ge5nes gene4t gen5eti 4genev gene5ve. gen8ga. gen5gr ge4ni6n 6geniv gen5k genle6ge. gen3n gens5l gen6sun gen5tr 4genum 4geny 4genæ 4genø 2geo 5geog 3geol geome5 geomet4 ge5on 6geop ge9ope 2gep g2er 3ger. ge5ra. ge6ral ge4r5ant ge9ras ger5di 4gered 4geref 4gereg 4gerek ge6rene 4gerep 6gerese 4gerett ger4i5d 4gerik geri8ka 6gerike ge4rim ge4ris ge4rit ge4riv gerle9g g9er8ma. ger3n gerne6 4geroa 4gerom. 4geromm 6gerop. 4gerope ger5p ger4s5af 5gerud ge5rup ger5v gerø6re. ge4r3ø4v 4gerå g6es 5ges. 2gesa 2gese 5gesen. 5gesens 4gesi 4ge5sja 4gesje 2ge1sk ge1sl geslu7 ges4lø 4geso 4gespe ge4spr ge5spra 2ge1st 3gest. gesta7b6l 5geste. ges6tekk ges8ti. gest5rid gestri8de. 6gestå 2ge9s8u ges5vik. 2gesy 6gesæ 2gesø 2ge1så geså5re 5get. ge5tak geta6le. 6getat. 6getate 4ge3te 5gete. 2geti 2getj 2geto 2getr 5get5s 2getu 2gety gety8e 2getø 2geu g2ev 2ge7v8a 2geve 4gevir gevi6sa 4g5evn gev6ne. 4ge5vo 5gevå 2gey 4geæ 2geø 2geå 1gé 2g1f gfe2l 4g1g g6g5al gg5ask g2g1av g4gedi gg1ei g4gela g4gele g2gem g4genu g6gerei gge4rin g4gerø gges6b gges5l g4gesm g6geso g4gesp g6ges6tio g6ge5sv g2gev ggie6 g4gif g4g5i4m gg4je ggje5s g2gl g7glu g4gn g2g1o2 g3go. g5gos gg3rad ggra6da gg5rat gg8re. gg3red gg7rek gg5s4par ggs7s gg3sto gg4sy gg3sø g7g8ud g4g5u4r 2g1h ghe8n ght5ene gh4to ghæ8 1gi 3gi. 4giak gi1ar 4giarb 6giav 2gib gi8c 2gid gi3de gi1e 4giek 3gien gi9end 5gier 4gifa 2gifo 4gifr 4gifu gi6ga. 2gigr 2gih 2gii 5gika 3gike 4giki 3gikk gi5k4r 4giku gi5le 4gimess gi4metr 4gimi 4gimø 2g1ind 6gingeni gi4nin 2g1inn gin5nu 4gino 4g1ins 4g1int 2ginv 4gi5om 2gi1op gio4r 2gip gip5si 6gira gi3re gi4re. giro3 gi6rob 5gis. 2gisa gi3se 4gisel 4gisen 5gisk 6giska gis8lu gis4lø 4giso 4gisp gi3s4pa gi5s4pr giste6ru gis5ti gist5ra gi5stré gi6st5rer 4gistu 6gisty gi5ta 4gi5te gite4s gi2t9r git5te 2giu gi7va 4gival 4givo 4givu 1gj 8gjag 2g1jak g5jarn 2gjaz gje5f 4g3jeg gjels4 gje2n gjen7n8 gjen1opp3s4 gjen5s8 6gjent 3gjer gje7sk gje4s3p gje8v9ak 2gjob 2g1ju 7g6jut gjø9de 2g3k2 gkly9 gl2a 6gla. gla3de 4glag gla4ga gla8ge. g3land g1lar gl5art glar7v 1g2las 7glase gla6s7k g6lass 6glast g5last. 3glat g5lau gl6e gle6dero 4g3lef gle3ge gleg8ga 6glei glei7er. g2lek g7lek. g5leke g2lel 3glemt 4glen g9len. g9lene. g9lenes g9lens gle9pl 4gler gle4ra glere8de. g9les. gle6se. g4le5sk g6le7sm 4glet g2lev 1g2lid gli4del gli7e6n gli8er glig1 3g2lim gli9me 4glio glitt4 6g7liv 4glj gl7ja gl5l g4lo. g2loa 5glob 5g6lome 1g4lor gloria7 glori6an glorie7ne g4los glo5ste 6glov gls4 8glu 5glug g5luk 6glun gl5ung glun8ge. gl5ut g5lyd 3glyf gly4se. g2løg glø8pa 2gløs gl7øy. 5gløym 2g1m g4mete g4metr g5mé gmini6 gmo4e g3mu gmu8le. gmå6la g1n gn1ak gna5lem gna4lo g2nav gn1d gndø6 gndør5 gn4e g2nee g4nelo g6nero g6nerø gne1s4 gne8se. g4nesk g4nest g5net g6netr g2nev g4nib g4nid 5g6nik gning4 gnings5 gni4s g6ni5sk gni6st gnist9r gn5k4 g2nom gn5o6p gn7o6v gn5r gn1s gn4skr gn6sm gn4som gns4pr gn4sti gn2s1v gn5t4 gnu5re gnæ6re g2nå 1go 7goan go1ar 7goar. 2gob gobe5 go4da go5dal god5ar 2godd go4de. gods9t 2gof go9ga go5ge. go9g8r 6goi 2gok gok4se. go3le gol6fa go5lo gol4va gol6var go4lå 2gom g7o6ma 6gometris 7gomm go4n5and go9ne. go7ni go5nok gon9s 2g1op 3g6or4a5 go5ra. go7rae go7ras 2gord gor6da go1re gore8a7 2gorg g4ori gori5e6 g5orv gor8va go5rø gos3p 8g7ost 6goto got6r 4gov go8ve. go8vi. 2g3p6 1gr4 8gr. 4grab 6grac gra5ce 9grads graf5f graf5t6 gra4m5 grand3s4 gran5to grant4r gra9se. gra9set gra6sk gras3t gra5t gra8te. grati4s gra4u gra4v3ak gra7vis gravta8 2grea 4g5reds gre4en 2gref g7refe g4rega greie5n grei6ene 6g3reis 4grek 2g5rel g5rent 4grepi grep4s3 g7rese gres6sak gres6sent 6g5rest 4grett 4g5ri. grib3 4grid 4grif 4g1rig 7g6rip gri4s5o gri4s5ø gri5sete 4grit gro9ar g4ro7i grom5m g4ron gro5sk gro3ve gro6v5in 4g5rui 4g3rul grun7g 5g4rup gru7sa grus5t 2g1rut 2gryd 4g5ryg 6g5rytm grø5de. 6g5rør 4g5røv grø5ve 4grøy gr7øy. 6gråd grå6da gråk4 grå7n grå5te. 8gs1 gsa2 gs5akers g7sal. g7sale g5salg. g5salge gsam3 gs3amb gs7amn g7s8ang g3s6ank g5sard g2sas g7sast gsbø6n gs2ce gs5ef g2seg g2sei g2sek g5sekr g7sekv gse9la. gsel4s5a gsel4st g2sem gs6ende. gsen6ke. g5sens g3sent g2ser g5ser. g3seri gse4st gse4t g3sete gs3eti g9sets gs4ett gse2v gsfø2 g2si g5sider gs5is gsi2v gs4jar g3sjef g5sji g2sjo g5sjå gs4ka. g5skad gs4kal g5skall g6skam g4skan g4skapa g5skape g4skapi gs7kav g5skilt g7s4kj g7s6kjæ g3skot g5skren g7skug g6skv gsla6ga gsle6ge. gs6leri g4sluk gs4lun gsl9ut. g5slyn gs5med g9s6mert g7snel g5sog gs9ope g7s8opp g7s8oppe g5spal g3spel gs2pi gs5pik g3spil gs5pile g6s5pors g3spur gs3s4 gsse4e gs5tak g9s8tand g5stang gs4tasj g7s4tat gstatsrå7 gst6e gs5te. g5ste4e gs4tell gs5tema gste6ma. g7stemt gs4tere g5s4terf g5s4terk g5s4tern g5s4ters g5s4terv gst7evnen g5s4ti. g3s4tie g3stif g3s4tig gs5tiå g5sto. gs4tol g5stol. g7stola g5stole gs5toll gs4trap g5strau gst5rea g5strede gst5rei g5streke gs6tret gstri8de. g5s4trof g3strø g5s6trå g5stue gst5ut gstyr8ka gs4tør g5s4tå gsu2 gsu5g gs4vane gs5vik gs7væ gsy2d g7sym gsy6na gsy6t g2sø gsø6ki gs6øt gså4 2g1t g3ta gta8ka. gta8ke. gta6la. gta4le. g9t6e gte6ke. gte6ma. g3ti gti8de. g4t5if gt6re. gtråd5s6 gt7sv gt5t gtu8en. gtvek8 gty8e gt9yt 1gu 4g5u4bå gu2di guds3t gu4el 6gug g5ug6l gui4d guid5ar gu4le. 4g5ulk gul8ke. gul4la gul5o gul7ø 7gum gun4g gur2g gu4ri gur8na gur6ne. gu5rua gu3rue gu4st gu1ta 2gutb 4gutd g5ute. 6gutg g7utl 4gutn 2guts gut4tak gut4tes 4guttr 2g1v gva4ke. gva8la gvedli6 gvi8ta 6g1w 1gy g9y8a gy4da. 7gym gy3ne gyr6 gy8sa. gy6se. gy4te. gy4ve. g5æt 4g5øk gør3s 2g3øv gøy9a gøye6r gøy5n 1gå gå6as gå6en. gå4er. 4g5å4k 4gåm 4g3ån gån8da 2g1å4p 2g3åre gå2s gå3st gå9ven gå4vet h2a ha4a haba9 4hae ha2el 4hafi ha2g ha3ga ha4ga. ha3gen hai1 ha7ism ha5ka ha4ke. ha5ken ha7kera ha4ke5s ha1la ha6la. hald4s7 ha4le. ha4lev hal6lei hal6lø hal4s3k hal4so hal4s3t ha5lu hal4v5 hal5v6ar hal5v6o ha5ma ha8me. ham6nest ha5mo ham4st hams4t7r ha5na han6d5r hand7skr hand5ø ha4ne. hani1 hanis4 han2n3 han4ne han6nel han5nen han5n4es han5n4o5 han3se han4sk ha4pe ha4re. ha5rei ha4rel ha3rem ha4res har5k ha5rov har7se har5tre har4tri ha4sj hasj5e ha2sl has6p7l has5v ha3tar ha4te. hat6le h4au hau5ke. hau6st hau4t5r hav4a ha4va. ha5van5 ha4ve. ha4veg ha4vei have3s ha8v7ert ha1vi ha4vo hav4sl ha6vu6 hav1ø 4havå 2h1b hba4ne. 4hc 2he. he2a he7ans heat4r heb5n he4de. heder6s5 he2d9r hef9ta hef7tes he3ge he4ge. he2g3r he2i heia3 hei5en 3heim he3ins hei4sk heit4s he2k hek4sek hek6serin hel1a he4la. he4le. he4l5ei4 hel6lesu hel3o hel2s2 hel3sa hel4se7 helses4 hel3sk hel5sp hel5ste hel3sv hel4tes hel9ve he4mak hem5ne hem3s8k henfø5re hen5o6 hen1s2 hen5se hera9da he5ret he4ri. her5j herle9ge herli9ga 4her5n he1ro he4ro. hero9a her7p her6rei her6resi her6ret her6ska. her8s7kare her6sv her5un4 he2r3ø he4se. he2sp hes7pa hes5pel hes5pen hes9per heste5ri hes4tes he6stø het2 he4te. he5t6i het4s3a4 het4s5p het3t he6va. he6v7arm he4ve. hev9na. 2hf 2hh h5hu hi5ao hi4bak hie4n hi2et hi4f1 hiff2 hif9r hi6ge. hik7e himme6l5o hi6n7an hin4nes hins4 hins9ke hi4pl hip3p hi1ro hi2s1 hi9se. hi3sen hi5s4i 4hisk hit7o hi4t5r hit5ti hi8va. hi4ve. hiv1s hjar4 hje4 hjem7e hjorte5 hju6l7 hju7l8e 2hl h5lan 2h1m hma8n 2hn h2na hne6n hn1s h4o ho5ar. hob6 ho6da ho4de. ho5den hode3r ho5der. ho5dy hof4f3 hof4f3a4 hof4f3e4 hof5f6er hof4fi hogs6 hog6str hog7stra hoi5 ho2la ho5lag ho5lan ho4le. ho4lin hol5l ho4lom hols4 ho4lu hol7ut ho4me. ho4mo. ho4mod ho4mos ho5n6o ho4o ho8pa. ho4pe. ho8pi. ho5ra ho6ra. hor2e1 ho1ro 2hort ho4s hos5a ho5sen ho5ser ho5si5 hou2 ho1v hove5re ho4vé 2how h1p 2hr h1ra h1re hri5ne hri2s3 6h1s h5s4e 4ht h5ter htere4 h1tr ht5t hu4da hu4d3 hud5s6 hudså9re hu4er hu6et. hu4ga hu4ge. hu8ja. hu6ka. huk8ra hu4la hu4le. hu4leg hu5les hu4lev hul5v hu5ma hun6des hun2n3 hu1ru4 hus1a hu8sa. hu5s6a6r hu6s7arr husa7r8e hu4se. hu4s3ed hu2s1i hu2s5j hu2s1k hus7m hus5s4 hus1t hu8str hust9ran hus4tre hu6sty hu6s5u6 hu2sø hu4va hu4ve. hu4ves hv4 hva5le hvas5 hve2r hver3a hvi5l6i h4v4ir hvits4 hvo2 hvor5 hvor5i6 h6y hya3 hy2bl hyd4 hy2e hye5ne. hye9nes hyg5gel hy6la. hyldes7 hy4le. hyr4des hys3 hy8sa hy4se. hy2s1j hys5t hæ5g hærfø9 hær3s6 hø4e høf5 hø2g høg3ri høg7rø høk6 hø6le. hø4na hø4ne. hø5rar hø5ren hø5rer hø4res hør6sp hø2s høst7a høst5ø hø1va hø1ve hø1vi høy5a6 høy5k høy7n høy7rar høys4 høyse6te. h6å hå7a hå8le hå6na. hån8dr hånd5skr hå5nel hå6pa. hå4pe. hå4p5l hå1re hå1ri hår3s hår7u hå8va. hå4ve. ia9al i1abl ia1bo i2a3de i1adj ia5d8r ia1g2 ia2ge ia1in ia1kr i1aks iak8se. ia5ku i1al. ial1a ial5ein iale4t ial5eti ia4l5ett i2alf ial3g ia4lin i4alk ial3op ia6lov i5als. ials4t i3alt. ial1u ia2lø i1an. i2ana ia4nal ian5ald ia5nar i7andr i5a4ne. ia8nes ia7net i5ank i1anm ia2no1 i1ans ian3sa ian3sl i1ant ia7nø ia2pa i3app i1ar. iar4do iard5s4 iar4du i2are i5area ia5r6e8l i5arn. i9arns i7arska i6asi i1asm ia4sp ias3s6 i3assi i1ast i7ast. ia1t ia5te iat6r iaty6ra i1att i7auk i1av i1b2 iba4ne. ib5bo ib3bu i3bere ibe4ro ibi5er. ib7lar i2b3le ib4leg ib4le5s i5bo ibo4e ibo7n ib4r ib3st ib8t ibya7 iby9ar. 8icanarar ice5ne i1ci ick1 ick7ete i1co i5cy 2ida i5dal i3das id1av id3del iddel5u id6dep 2ide. 3ideal i2deb i6def id5e4ge i7deki i9del. id3elv 2iden i5dend iden5sv 5identif 5identit ideo3v i6derap i9de5re. i7deren i9deres iderla8ga iderle7g i7dern i5ders i6desm id6gem id4ges idi4en 1i2dio i8dj id7jer id9na 1i4dol id9ran id5reg 4i3drev 2idri id2s1 id5sam idse4 id6sel id5sim ids5l idsla6ga ids3t id4s5tu id2t1 i2d1un i2dy 3idyl i3dyr i3dø i6d7øy id7å 2ie ie1a2 i2ed i1eff ie4ge iego4 ie1i iei6d i1eie i3eig i5eini iek8l i1eks ie5l6a i2ele i5elem ie4lev i7e6lim i1els i9elt ielø8pa i8e9ma iem7b8 ie3me i1en ie7na i2end ien6dela ie8né i2e5ni ien7n ie5no i5ens ien4sk ien4s5v ien4t3r ie5nu i6eny ie4ran i4erd ie6re. ie5reg ie4r5eng i6eret i2eri ie4ril ie4ris ie4riv i2erl i6ero ie7ro. ier4ra ier4sp iers3v ier5t ie3run ier5v i2e1s i6es. ies4c ie3se ies5s ies4ti i8es6v i1et i2eta i5e4tabl i3etat ie9te ie5té iet4re ieu2 ie7ved 2if ife4s1 if2fa ifi6e ifjø8 if3le if4les iform4 if1re i8ft if4tal if4tere ifte5s ift2s i3fø 2ig i2gae ig3ann i7gark ig4art iga3ru iga7te ig3att i2gav ig3d i6geb i6gedi i6gedomm igedoms5 i2gem i3gen ige6no i5gers i4gerø i4gesp ig3e4ta ig5ett ig4ged igges4 ig4gra igg7s2 i6gh i2g1ia i5gib i4gim igion4 igje9va ig1l igl6d igli6se. ig5loa ig5neu ig5no igof6 igo5fr ig1om igo4no ig2ra ig2re i2g1rø ig3råd igrå5t igs4al ig5sel igs2j ig5s4ka ig3s4kr igs4mu ig3s4pa igst4 igs4ta ig4ste ig5stek ig7stel ig5stem igs4tra ig5s4va ig1un ig9ut i3h ihen3 iho7le. i4huk ihu9la ihu5le. i1i i5in i7is. i4is8e i6ita i1j 2ik i1k2a i2kab i5kabel i2kaf i2kak ikan9d i2kao i4kapo i5kar. i5kara ika5re i4karei i6kasa ika3sp i2ke. i2ked ik8ei i9keleg i5keli ike5lu i5ken. i4kena i5kene i9kens i3ker. i4kera i5kere. ike5ri ike4r5o i2ke1s2 ike3si i6kesk i5keso ike5su i5ket. i5kets i1ki iki9ne ik5inn iki5st i1kj ik4kaf ik6kana ik4kap ikk5arv ik4kas ik4kat ikk5att ik6k7ent ik4keru ik8kesk ik4kest ik3kjø ik4kjøp ik4kl ikk5lag ik2ko ikk5ord ik4kr ikk3re ikk5sv 4ik2ku2 ikk5und ik2kv ik6ky ik1l i5klæ i1ko i2koa i9koar i2kob i4kod iko5de i2ko3f i4kog i4koh i2kok iko5na. i2koo i5k6ord i4kore i2kov ik1r ik4rak ik5rem ik5robe ik3ros ik2ry ik2sa ik4sek iksmå8la ik7sot ik5spel iks5ti iks5to ik8stu ik4tav ik4teg ik2t1r iktsla8ga i1ku iku6le. i6k7u6t ik1v ik4vin i1ky i3kø i3kå ikå8pa i1la il5adr il7af i2l3ak il3al i4lana il6and i4lark il3art il5ass ilas5t6 ila5t il5av il4dak il4deko il4dete il7dj ild3re ildsfa9re ild3s4t ilea9r ile8are i3le7e i2lef ile4ge. i4l3egn i2l1ei i6leig i2lek i2lel i4leno i4lero ile1s i4lese i4le5sk i4lest ile6tri ilet5te ile4tu i1lé ilfø5re il5ge il1gl i4lid ili5ers ili9ga i5lik i2l1im i4l3ind i7line i4lins i4l3i4r ili5s6tik il3ja. il1je il5jese il1jo il1ju ilke3 il5ker il4kes ilk4o6s il5ku il4lab il6lam illan8da il6lap il9lau il4lee illei9e il6l7ender il6lesk il4lev illi9ga il4lo5m ill3s2 ills5kå illæ4 illæ9re. il4m5est ilm5e4v il4mi ilm5s i1loe i9lolo i4lom il5omv i5lon il3opp i4l1o4r i5loso ilot3u i4love ilo1w ilret4 ilset8je il3sl ilsla7 ilsle7ge il6s7li ils4mu ils2p ils2t il5str il7su il3s2v ilsva9ra ilsva5re ilta9la ilt5rett il6t7å ilu4h i5luk il7ul8 il3un i5lur i9lus il1ut il5v6 ilve8d ilve4r i1ly il1å8 ilår6 8im. 4ima i2mad i4maen i2mag i6m5akk i4mako imal8n i2mam i9man i2map i5mar. ima5s i4matr i8mb2 i4mee i2me1g i2mek i6melu im5enh im8et i9met. i4meta i4meti i6mey i8mé imi9la imini6 i7mj im4lev im8l9u im5m i6mog imo9l im5ord imor8da im7o6v imp2 5imperi imp4l 1impo imp9s impse8 1impu im4ref im4rek im4res im9se ims4k5l ims3kr im5s4me im1s4t im6sti imta8la 4imu i3mø2 2in. 6ina i4nag in5agg i5nakk ina4let i4na2m in3ame in2an i9nane in5ann i2nap in5app i5nar. i5nars i4nask i4nasp i4n5ass ina4t5ak ina7t8r i6nau in7auk in5avl in5avr ince2 in7der 6indig in4dog ind9ra in3dru indr5ø ind5sk ind3sp ind5s4t 5industr ind7å 4ine ine8are i2ned inedy6 in5egg in5eid in3eie i6nele ine4li in7eng ine8pa ine8pe. i7nere. i5neren i9neres ine4rik i7nern i5nert i5nes. i4nesk ines8ka ines8ke. ines4st ine5s4ti i4nesø i2nev 8iné 3infek in4fos in4fot infu9 4infy in4g5ald in4gav in5gebj in6gem 5ingeni in5geri in4geru in3gev ing5jen in4goa in4gos in2gr ing5rep ing7ris ing2s ings5om ingst8 ings5v 6ingu in4g5un in2g5ø i7nia ini9ar. i2nib i5nie i4nif i2nig i4nil ini7m i4ninn i2nip i4nisa ini3se i4nises 5initia i4nito 5injek 2ink in5kel in4kero in4k3la in4kok in5l inla8ga 2inn. in4nal in4nem in4nerø in4nesi innes6t 4innet in6n7ette innfa9s 1inng 5innhal 3innho 2inni4 in4ni. in4n5om in5n6ova inn1s4 6inns. 3innsa inn5se inn9sen inn9ste inn7sve 1innt in4n5u4 4innæ in2nø4 2ino ino5a i5noar i4nod inok6 in7oks in7org in1s 4ins. 8insa in9sa. in7sal in5sar in5se. in4sek in3sen inseri8e9ne in3si insis5 6insj in4sja in3sje 4insk in9s8kas in5skat inske4t ins4ki in3skj ins5kjøt ins6kor ins4k3v ins6kø insle7g ins8lega in3slo in3s2lø in5s4ma in3sop 1insp in4spa in5s4pl ins4po 5instal in8s5te. ins5ten. ins9tens 3in3s4ti in4stin 4in3s6to in5stra inst5rel 5instru in6stå in7sul in2sv 6in3sy 8int. 2in3ta inta8la 4inte. 5in7teg in8t7ege in5ter int5ess in5te4t5 4in5ti inti5me int2r intran4 int4rer in5tres 6inu inu6i i8n9ul8 in7ut. in9u8te 1inv 6invev iny4i iny4t 6inø in7øk i7nøt in3øv 4io io1a4 i2ob io8d8 io4dere i1off io5gn io1i i1oks iol4 io3le iol7jen io3mu io4nans io4narr io6n5erst ion3g4 io4nin io4nu io1pl i1opp io5ra. ior8da io1re io4rie io4r5in iorla8ga iosk3v io1st iota6le. io3t4e io4tra i5pap ipa4ti. i4pee ipela9 i7pe6p i1pi ipi1e ipi9ne i4p5ings i1pl i2ple ip4peli ippel7s6 ipp6lan ipplæ8re. ip2pr ipp4s3t ippsy8na ipp4sø ip7pun i1pr i6pra ip5ru ipru8te. ips1a ipse4l ipsfø5 ip2si ip2s1k ipsle6ge. ips1t ip6tar i5py7 i3pø 2ir i1ra i9r6and ir5ark i9rast ira6tr ir5de ird5s i1re ir3eie ir6ek i3repo i3rer ire6r5a ire7st i3ret i8reto ir7g i1ri iri4a iri8ka. ir3ind ir3inn ir5inst iri9t ir5ka. ir4kat ir5ker. irke3s6 ir4kest ir4kle ir5kv irk5ø ir4mag ir4mal ir4mast ir9mé i5roa i1roe i4roi i1rol ir5opp iro1s ir3re ir7sko irs2p ir3s4t irt6 ir3ta irti6g5r i1ru ir5u4k iru8m iru7sa. i1rø i1rå ir7å6l i1sa i4saks i4sanb i4s3ang is3ann i4s3ans is3ant i7sas is5aud 3isbry is6cen isch5 is3co i5scr i2sed i4seel i4seen ise5ern i2s2e3g4 i2sei is3eie is5eig ise5is i2sek i3sekt i4sekte i6s7eld is4e5li i2sem ise5ne i4seno isensi6 i5ser. i5sers i2ses is5ess i4sete iset8je i2seu 8isé isha7ne 3ishav is4h5in ishø9ve isi6ene is5ild i4s3ind isis5t is7jun is9ka. is3kal is3kar isk9art. isk5arte i8ske is5ke. is8kee is4kel isk5els iske5s4 is3kje i3skjo iskla8ga is6k5le isk3lo isko5g is7kogr is3kop is3kot is1kr is6k5rin is1ku is4kul i5skula is1kv is4kvi is1l i6slu isl7ut isl9øy. i5smak is4med ismo5e i6smus is5ne is5nu 1isol 6isold 5isomo is5omr iso3pa iso5pe iso7pr 3isot is1ov is1p is4pan is5pane. is6pis is7pru is4ses is5si issis5 is6s7kj is4sko is7skr is5sky is4skå is5sok is7sto is6sve is5svo is9s4ær is4søk i5stab ista9le is5tane is5tap i4s5tar ist5avb ist7avi i2ste is5te. is4tek ist5ekt istel5l iste6ma. ist6en is5ten. is5tene is5ter. is5tern is6terø is6té is4tik is5tilb is5tis is3tok is3tol i2str i8s8tre. i4st5ren i5strer i6strer. i4stres i6stret is3try is3tus 6isu is5uf is5ul is1un is1v is4vak is7w isy8na isy5r i7s8ys is5yt i2s1øk i4søy is7åk is3år i1ta ita4l3a ita6l5ers ita4lo ita4ly i6tang itan7s6v itau4 i4tav i4tec i2teg ite8ke. i7teky i6t7elg i4teni i2teo ite3re i4tero iter6s5 i4te5ru i2te1s ite6se. itet6s5 i1té it2i iti6er. i4ties i2tif i4tikam i4ti3kv iti5me i2tio i2tip iti3r i4tisa i4tisen i4tisi i4tisj i4tisko i4ti3sp i4tist iti5str i2tiu itiv4 itivs5 it7jaran it7jer it7ji itma6le. itnes4s i1to ito9a i4tom it5ord ito4s itostra6 ito8v i1tr i4tra. i6trae it3rel it3ren it5rim itri8ma it3rin i5tris it7ro6s it1sa it4s3ei it3ser it6ses it5sku itsla8ga it1sn it6sti it3sun it4tag it6tak it4tal itta9la it6tann it6tap it4t5at it5ted itte4l5o it4tenk itte5s4 itt5ett it4tid it4til it4tj itt1o it6tof it7ton it4tr itt5skr itt4sø it4ty it7tys i1tu itu5e itær1 i1tø i5tå9 i1u iu6a iu2b i5u6l i5um. ium4f5ar iu2m1i ium5m iu4mo i6umse i4um5s4t i4umsu iu2n iu8p i2ur iu5se 4i1va i4vad i6vaj i4v3aks i5val iva6la. i4vana i4v5ank i4varb ivar5s6 i4v5ass ivat3t i1ve i2veg ive6ge iv5eg6n i4vei iv7eig i2vek ive4ra ive5ras iver5d i6veret i4vesk i4vesti i6vesv i6vetø i2vev i1vé i1vi iv5ins iv5is. iv5isb ivle6ge. iv3n i1vo iv7om iv3r iv4sal iv2si iv2sk iv2sl iv2sn iv4so ivs5v i2v3un i5v6y ivyr8ke. i9væ iv7åpn i1wa iwi5 i5wie6 i5y iyr8ke. i5za. i7zas i4ze i1zo i1ø i1ø4k i1ør. iør5i iør5s i4øs iø3se i1øy i1å4 iårs7l iåt4te. ja1ak ja9ar ja4da 1jae ja7en 5jag. ja4ga. ja7gar ja4ge. jag6r ja4ha ja4hv ja4j jak4kel jak7kele jak4ko ja8k7ok jakk5s4 ja1k8r ja8kre jaktel jakts8 ja7ku ja3lo ja1lu jam7b 6jambi jamhø8ve. 5jamm jams2 jan4gr j5anl ja6ra. ja6r5ap ja9rek jarn3s4 jar5ta jar5te. jar5tet. jar7ti 6jarø ja6rå ja7se ja8ski ja5sti ja5ta jau4ere ja9vi 1jaz j1b 2jd j2e 2je1a2 je5ak 2jeb jeb9b je4deb 6je4dek 4jedr je4ep1 6jeev 2jef je4f3et je2fj jef5lag je4f3re jef4sa jef6s5i jef3t4r je5ge jeg5ge 6jegl jeg6les 4jego 4jegr 4jegy 2jeh je1i je5i8s 4jej 2jeka jek6keru 4jekl je4kli 2jeko jekt3a jek4tan jek6tes jekt5ev jek4t5in jek4t3r jekts4t 4jekø 2jel je6legr jelei7er je7lele je4les jel7ge jel6lag jell5ang jel5len jel4lo jelt3 jel4tr jel9ut jel7va. 2jem je4mia je4mit jemp6 jem5pl jem5se jem4sti 2je7na jen1d jendis5 4jendr je3ne. je7ne8s 4jenet jen5ged jen7g8la jeng5s4 2jeni jen3k 4jenl 4jeno 4jenu je2n1y4 4jenæ 2je5o4 2jep je3raf je4r5ant jer4dep jerd6s je3r6e 4jered 6jereg 6jerei 6jerenn je5rik je6rim je6rinæ jer4kes jer6k5l jer4kv jerle7 jer6mu jer6n5as jern5sl je6ron jer4sp jert5s 4je1ru 6jerå 5jesf 5jesh jes4kil 2je3sp jes4tea je6stim je3str 5jesut je5sve je4t3ag jeta6ka je9tar. je7tara je9tare je4t3ru jets2 jet4t5an jet6term jett3o jett5s6 je4t3v jety8e 2jeu6 4jev6a je7vark je6vas 4jeve jevi4s jev7na. jev7ne 6jeø j1f 4jg j1h 4ji. jib5b ji7e6 6jik 2j3inf ji7ro ji6sj 4jiø 2j1k j4kap 6j1l 6j1m 6j1n 6jn. j5ni j2o 1job 5joc jo4da. jo6dat jo6dis jo4fl jojo5 jok9ker jokk9o8 jol5t6 j3omr jon2 jo5ne jon7n jons1 jons5a jonse4 jons3p jons5t jon6sti jon4str jonsu4 4jop jo5ra jor6dek jor6d7erv jor6d7is. jor4d3o jord3r jord5s jords4l jor6du jo1re jo4rie jort6a jor5tet jo3r4u 2jos jo3se jo4ses jo5stei 1jou jour5 j1p 4j1r 2j3s2 j1t ju8are 1jub jubi3 ju9bo juda8s7 ju3de ju2do ju7doe jue7ni ju4e5re jue9s jug9le 5jugo 4ju2k ju3ka ju3ke. ju3ken juk9sar ju2l ju3la. ju5lar ju5las ju8l9ei ju4li. ju6lid ju4lik jul7inn jull6 1jung jun7ge j6u6ni 8jup jup7s ju6p5å6 ju4ra ju7ras 3juris ju9ro ju3ru 5jury 1jus ju5so5 ju1ta jut5o ju6va. ju6vak ju1å j5v jy1 jy8de. jy2p3 jæ5le. jæ3ra. jæ9ran jæ9res. jæ7te. j2ø 1jø. 1jøa. jø5b4 1jøe 2jøef 4jøeg 6jøei 2jøek 4jøend 4jøeng 4jøeta jø1f jø3gr jø9kj 4jøl jø4les jøl6ver jø5me jøn5ne jø5pa jør4kel jør4sp jørs5v jør4tel jø3ru jør7ut jø1rø jø4ses jøst2 jø5ta jø6t7av jø3te. jøte4t jøt5eta jø1tr jøtte4 4jø1v jø4vel 2jå jå5ar. jå9ge. jå6la. jå4le. jå7les jå5let 1ka. 2kaa 5kaa. 5ka4an4 k3aas ka3at 6kabes ka7bo 4ka1br 4kaby ka3da 6kadale ka5del ka6del. ka4deri 4kadg kadi7e 2kadr 5kadu 4kady 3kaen ka3fe kaf5fere 2kafo ka9fr 2kaft kaf5ta 6kafø 2kag k5a4gi kag2r 2kah ka5isk ka5ism 6kajo ka4ka. ka4ke. ka4ked ka4kel ka4kes ka4ki. ka4kis 6k5aksj 4kakt ka3ku ka3lam ka3lan ka6lant ka3las kald5s 5kaldt kal2e 3kalen ka5lev 5kalis k6al8k5 kal7k6e 5kalky kal7la kal6lero kall4s ka1lo kal3p kal7s6v kal4ves 1kam ka6ma. ka8me. 4kameri 4kammel kam4p3i kam4pr 7kamu 1kana ka8na. 4kanda kan6da. 5k6ande. 1kane ka5ner kan4i ka5nin 2k1anl 4k1anm k3anno 5kano ka4no. ka8nom 4kansa 6kansi 3kansl 1kant kan6t7end kan6t9r 2kap. 5kapad ka4pak 3kapas ka5pe 5kapell 4kapen 3kapit 1kapp kap3re kap4s3t 1kar. 1kara 4karab 4karam karan5 ka3rav 1karb 4karbei 4karea ka6rek ka5rel 1karf 5karg ka4ri. ka6rid 6k3arki 6k5arkt 1karm kar3n ka3rol kar3om kar5pes karp3s 3karri 7karsj kars4t 1kart kar5ti 5karu 4karå 1kas 7kas. ka5se4i ka3sek kas5ev kas2ju 6kasjø ka4sk kas3ka kasko5 6kasp ka4spi kass6 kas6sad kas4sak 4k3assi kas4so ka4st 8kas5to ka6su8s7 kas2t3r 1ka7t6a ka8tak8 ka3ted 3kateg ka3tet ka1to ka4t5op 4ka1t4r kat7s kat5ta kat6tak kat4tel kat6term katte5s kat4til kat4tri ka4t5y k7au4r 2kav ka7ves k9avis kav8l9u 9kay 6k1b4 2kc k5ce kcen4 2k1d k5d6v 1ke 2ke1a8 ke9al 2keb 4kebr 4kebuk 4kec ked4 ke5da 4kedag 4kedal 5kedan. 9kedant ke5de 6kedei 4kedem 4kedes 7kedes. 2kedi 2ke5dr ked8sk kedu6 4kedy 2kedø 2keeg 2keek 2keel ke4ep ke7ern 2keev 4kef k3eff k5eft 2ke1g k3egg keg8ga 5kegladh ke5h 3kehet 4kehj 2kei k3ei2d k1eig ke5il ke1im k6e1in keis2 2kej 2kek kek2l ke3kn k1eks k5ek4t k6el. 2kela ke3l4ak 5kelal ke6lans ke6lat kel5eier kel5eig kel7eik kelei8ke. 6keleis kel3e4l 4k5elem 4keleng 4ke5lep 4keles 7k6elet 4kelev keli8e8 keli9en 3kelig 4kelign 4kelinj kel5int 4kelis ke4lise 5kelit 4keliv kel5l 4kelof 6kelov. 4kelove kels4 kels7kar kel5sl kel5sp kel5st kel3sv kelsva9 kel2t kelt3e 6kelua 4kelue kel9uka kel5uke ke4l3ur 6keluv kel5v 2kely 2kelæ 2kelø kelø8pa. 6ke5l4å kelå7re 2kem ke4mit 5kena. 6kenam ken6ap ke4nas 5kenatts ken5de 6k5en6den 6k5en4der 4kend5r ke3ne 4keneb 4kenek 4kenel 4kenem 6kenett 4kenev 3kenf ke4ni 5k6enh 4ke5niv ken3k ken7n kenne4l3 ke4nom ken1s2 4k5ense kens6t ken7te ken5t6r 4k3entu 6ke3ny 6kenø 2keo ke7of ke3on 4kep 5kepi. 9kepia 7kepie 6kepl kera7l 4keram ke4ran ker5ant 6kerau 4kered 4kereg kerei4d 4kereir 6kereis 4kerek 4ke5rem kere6n 6kerene ke6r5eng 4kerenn 4kerep ke4r5ert ke3res 4keress 4kerest 4keresu 4keret 5keret. 5kereta 7kerets 3keri ke4rif 6kerik. 4kerike 6kerikt ke4rim ke4rine 6keringi 6keringj ke4rinæ ke4ris 8kerist. 8kerista 6keriste 3kerm 7kerop 5keror 4ke3ros kero6se. ke3rot k4ert ker5to ker3t4v ker3un 4kerus keru6se. kerø6re. 8ker8øya 6ker6øye 2kerå 5kes. 4kesam 9kesam. 7kesdale 5kese. k5esel ke5sil 4kesit 2kesj k9es8ka. 4k5eske kes8ke. 4keski 4keskj 6keskå kesle6ge. kes5ped 5kespot 5ke4spu 5kest. 4ke3sta 5keste. 4ke5sted 4ke5stei kes6tem 4ke5s4ten ke3sto 4kestri 4ke5stru 4kestu 4kestø ke4s5un kes1v 2kesy kes1å 2keta keta6ka keta6le. 5ketals k6etar ke3te 5kete. 4ketek 7keth 2keti 2ketj 2keto 2ket2r kets2 ket6t7enh ket8tes 2ketu 2kety kety6e 4ketæ ketøy6s5 2ketå 2keu2 ke5ur 2kev kev2a keva8ne. 5kevas 3kevel kevi6sa. k1evj kev6ja kev4je. k3evn kev6ne. ke3vr kevæ8ra ke2yt 6keæ 2keø 2keå 1ké4 két5 2k1f k5fi 4k5g2 k3ge k5gh kgu4 4k1h kh5ak k4har khe4o khjul8s kh6m ki3a2r k3ideo 4kidol ki3dr k4ie2 kie5re ki6el ki3er. 2kif ki5g4 ki6ka. kikk8s9 ki1k8l ki3k2r kik4s ki8la. 3kilde 6kildr ki4le. ki5li 4kilj kil9ja kil6le5st ki7loa ki4log ki3los ki4lov 2kilt ki7lå ki8ma. ki4me. 5kimo5 ki4mol 2k1imp kin9and ki4nark ki5nas. 6kind ki5ne ki6ne. 2kinf 1king king5and kin3ge kin5ing 2kinn kinnsi8da kinnsi8de. kinn4sp ki2no kin5ov 2kins kinsi6de. 2kint kinti8me. ki6nu 2kinv kio4 4kiol 7kios 2kip ki5pe ki4p5l kip5pe kip2s3 1kir ki5re ki5ri 4kirs ki3se ki5sko ki3smu ki1s2p ki5stav ki5str ki6ten ki7ti 5kito ki4ton 4kiu k6iv ki4vek ki4v5enh ki6vi. kiv3s kj2 3k8jan kjap5pe 6k7jarn kje7fj kje7f6r 4kjegg 3kjeld kjel7leg 5kjemas 3kjemp 6kjenk kje9ny kje1s kje6t5r kjet5t 6kjor k8juk kju5le. kju5len kju9r 3kjærl k5jødi 1kjøp 3kjøri kjø4tr 8kk k1ka k2kab kk3aft k2k1ak k2k3al k2kam k4kanb kk5and k8kand. k6kanden k4k5ang k4kann k4kao k4karb k6karg k4k7art kkar6ta. k5kast k6kasu k6katt k2k1au kk1av k6kedo k4kedu k2kee k2keh kk1ei k5kel. kke6lei kk5e4lev kkel3t4 kkelu4 kke4luk kkel5un kke6nan k5ker. k4kerei k4kerel k6kerent k4kerig k4kerit kke5r6und k4kesa k5kesau k4kese k4kesi kke3s4l k4kesp k6kestad k4kete k5ketet k4ketø k4k9g2 k1ki kk3ind kk3inf kk9inn kk3ins kk3int k2kir k1kja kkjek8 kk5jent k4k5jern kkje7t kk5ju kk5k kkla4g kk3lan kk8lar kk7lau kk1lo kk1ly kk3læ k4kn kk5ne kk5ny kk6s5v k1kod k1koe k4k1of kko6lig kk5oml kk7oms kk9omt k6koo kk1op kko7s k4kosi k6kosk k4kost kk3ove kk5p k4kra kk5ram kk3rap kk3rea kk5rei kk3ren kk3res kkri6k kk3ro kkro8e kkro4s kk3ru kk4rus kk7rø kk7rå k8k7s kks6al kk4sar kk5sed kk3s4ei kk4sin kk1sk kks4kj kks4l kk3sla kk7sle kk5sli kk3spe kk1s2t kks5tak kks7tep kkst4r kk8s7va kk5s4å7 kk7t8 kk5uk k4kuni k2k1u6t kk1v k2kvo k1ky6 kkyl4 kk5yr kk7yt k2k1ø k8køl kkø6r kkøy6 kk1å2 kl4 6kl. 4kla. 4k5lagt 2klak kla9ke. kla4mel 3k2las k7lati kla4tr kleby7t 3k4ledd kle4deb kle4des 2kleg klei9e k7leik k4leiv k2lem 5k6lem. 7k4leno k6lerik kles7j kle5sno kle4sp kle5sti kles7s8 2klet 8klia 4klie. 4klig 1k2lim2 3k4lini k5linj 1klip 4klit klon7a8l 1klos 2klov k3lukt 4klun klun5t k5lyd 6k7lyf 3k4lyng klyse7te k2læ klæ5res klø7na k6lør 6kløs klø9va klø5ve 6k1lån klå5re 2k3m kmann6 kmål2 2k1n2 3k2nap kna5t4re kne4b3l k4nedi 5k2nee kne8se. k4nest kn5f knas8t7a8 3k4nip knippe6 kni2t3 7k6niv kno7g kno6kl 5knop kno9ta kno5te 3k2nu 4k3num 3k2ny kny4s k2nø knø9le kn3øy 9koa. 4ko1ak 9koane ko7ar ko2b3 ko3bo 4ko3br ko5da 4kodd ko4de. 3kodek 5koden 2kodø ko3e 3koef 4koek 4koel 4koes 4koev ko4g5eng kog9ger kog3l ko4gre kogst6 ko4gu ko6gå 2koi koi4e5ne ko7i6k ko1in 2koj ko8ja. ko4ka. ko4kab ko4ke. ko6kel ko1ki kokk6o k3okku 4kok4l 4koko 2koku kolba5 kol8d7a 2kole ko4leg ko4lei ko6lel ko4let ko4leu 3kolle ko5lo. kol5p 4koly 2kolå 1kom ko4ma. 4komaf ko4me. 6komg ko4mi. 4komil 4komisb ko4mise 2komr 4komse kom3sl kom5so kom4st 4kom5t 4komu 4komå k6on ko4na. kon3d kon6dr kone5l6å 4koniv kon3s2 kon6s7v kon6ton ko4nu 1ko1o 4koom ko5pa ko5pers 4kopet ko4pi. ko4pip ko4p9l 4kopo kop5per 2kopr ko1ra ko4ra. kor6da. kor4d3o kord5s4ø kor4du ko1r6e 6koref 4ko7rei9 ko5rem ko7ret ko3ri ko6rik 4korm ko5rol 6korpa 6korpe 1kor3r kor4sal kor6s5inn kor4s5l kor6str kor4sv kor5tes kor6top kor4t5r kort5s4 ko5ru ko6rume 1kos 2kosa ko6sa. ko4sed ko4sek 5kosele ko5sen ko4ses ko9si kosi9d ko2sk ko1sl 4kosmu 2koso 2ko1s2p ko6sta kost7as kos6t5ers kost5j ko8s8t7ø8 4kosø kotes7 ko5t4i 4kotil 4kotr ko6tre kot2s kots5tr kot4ti kott4s kotts5t 4koty 2kou4 kout3 kou7ta ko1va kover7e 4kovr 1kov4s3 4koø 4koå 6k1p kr6 k3rad 1k4raf 5krag 3krakk krani6e7n 6krank 3krans 4krap kra9se 7k8ra4sj kras5s kra4to kra4u 1krav 4kred. 3kredi 4k1reg kregi3 4krei krei9e krei5s 6krek kre4kli 2krel k5rela kre8m7o 4k3renn 4krent 6kreo k5repr 5kreps 5kresj 4k3ress kreta9 6k7retn k4rets k3rett 2krib 4krif 7k6rig krig6s5 kri9ga 4krik kri5ke kri4kj krik6ka 1krim kri4me 3k6rins krin6s7t kri2p 1k2ris 7krisene k2rit 3krite 6kriv k2ro kro5b4 kro5de k3rofo k4rofor krok7k k6roni k5ronl kro4nom k4rop krop9n kropp4 k4rost kro9t8e kroten9 kro3v kru3i4 krum3 kru5sa krutt5i kru3tr 2k5ryg kry7pa kry5pe kry4pi 3krys krø5ke 6k5rør krø3v 4kråd krå8da kråe6 5kråk krå5le krå9m krå7ne k1sa k3sa. k2s3ad ks3alt ksa5me k3sane k4sans k4s3ant k3sar. k7sara k6s3ark k7sas k1sc k2sed k2see kse6ge k2s1ei k5sekt k5sela kse5lev ksen5to k4serf ks3erk k5serol k4sesa k4ses6k k4se3sm k5seso kses4p k5sess kses6sel kses8serie kses4sp kses4st kse6te. ksfø4 k5sia k2sif ksi5ko ks3ind k3sing ksi7ni ks3inn k4s3ins k7sio ksi3st k4siti 6ksj ks9kab k6s3kal k6skio ks1kj ks5kl ksko7na ksko5ne ks1kr ksk8u ks9ku. ks7kua ks8kut ks1k6v ks1l ksla8ga. ks5lo k7s6lu k8s7lug k8s5løs kslø8va kslø8ve. k5s4mak ks4mel k8smid ksmå k5s4no k7s8nø k1so k6s7oa k6s5o6d k4sog k4somb k2s1or k2sot ks1ov k3spal ks3pek ks5pio ks3pir kspor6t5r 6k6s5pors ks1pr k8sr k3spy k8s7s ks3sm k5stad k4stak ks3tal ks5tant k7s8vak ks6tav kste4da ks4teg k3stei k4stek kst3ev kstev6ne. ks4til k4stin ks1tj ks1tr kst6ran ks4t5rek k6stren k6strer ks4tri ks4tro ks9tum k5stus ks3tyv k2stå k1su k6sun k8suni ks1v k9s8vake ksva8ne. ks5veg k7s6vert k5s4vin k8svis ks5w ksy8na ksy8s7m ks5ær ksø4ke. k6s3øl ks1å k3så. k4såp ksår4 ksåt4 6k1t k5ta. kta7f6 k4tag kta6ka k4t3aks k4takt kta6la. k4t3ana kta9na. kt3anl k4t3ann k4tanv kt3app k9tar. k4t3arr k4t3art k6tass k5tast k6t7atl kt5avh kt5avk k6t3avl k3ted k4teda k6tee k4tefø kt5e4ge k2te5i k6teka kte5le k6t5elsk kt5e4lit ktem8 kt7emn k4t3enh k9ter. kterie5n kterie7ns kter5s6 k7tes. k6tesa k6tese kt5eske ktes6ke. kt5esti k4t5e4ta k4tete kt5evn ktev6ne. k5tib k3til k4t3ins k5tir ktis5t kt7i6te kti6v7end k2tja kt7ju kto9a kt5off k6togram k4toli k2tom kt5omf k2t1op k9tor. k7tora kt5ord. k5tore ktori9e8 ktor7s kt1ov kt3ral k2t1re kt2ro ktro5s k2t1ru kt4s5amb kts5ar kt5sek kt7sem kt4s5er kt6sin kts5kra kt5sku kts4kv ktsle6ge. kt6sok kt4spa kt5spre kt4sta kts6ton kts5top kt4stå kt3t8 ktu9er. k4tuk kt7und k2t1ut kt8yo kt7yrk ktyr8ke. ktør7 ktør8e k6t5øs kt1øv k2t3år ku2a ku9an ku4be. ku3bj 2kud ku4dal ku4er. kue4r5a ku4et 6kuf ku4f3l 6kug k5u4gr ku7is kuit6 ku7k8l 6kuldi kuld3r ku4led ku4leg ku6lei ku4lem ku5len ku4let ku4lev ku5li ku6li. 3kull 1kult ku4man kumen6tal ku6mi kum2s 3kumu 1kun kund5s6l 2k1ung kun4ge. k6unn ku4o 1kup ku4pe. kup4pl ku7ra ku4rek ku8r7o ku7r6op kuro8pa 1kurs kur6sk kur4sp kur4s3t kurs3v kur3t ku5ru6 kuru9ken kuru7ker 1kurv kur4v3i 1kus 5kus. ku7sa. kus5a6k kus5ar 5kuse ku4s5el ku4ska ku7s6pe kus3t 6k1ut. ku1ta 4ku5te. ku5to ku6t7r 2kuts 1kuu8 kuøy6 kv2 kva8ke k4vali k6vard kvari6e5n 5k6vart kva9se kve3d2 kve7e kve8g7r k4veik k6veil 7k8vein kvei9se 1k4vel kve5la 4k3verd 5kvern kverns8 2kves kves5t 7k6via 4kvid 3k4vie kvi4ene kvi5er kvi7la 3kvinn kvi5se 7kvist 2kviv 1kvo k1vog 6kvok k4vot k2vu 4k3væ k1vå k7we k5wu ky5a ky6el 4kyf kyf5le 2kyg ky4leg 2k3yns kyn6skjer ky2p1 ky4p5r 1kyr kyrie5ne kyr8ke. ky8sa 4kyse ky6se. kyse8te. ky3skr kys6sk 1ky4st kyst3a kys4tel 2kyt ky6ta. kyte3s k1æt3 1kø. kø2ar 1køe kø4en. kø2er 6k1øk kø4le k1øn køn6skjer k3ørr køs4 kø5se køy7ar. k7øyd køy4e5ne 1k6øyr 4kåke kå3le kån8da kå5ne kå4pe. kå7pen kå9ras kå1re kå1ri kå2t5 k5åt6t 1la. 2laa la1b 4laba la6bl 1labo 2l3abon 4laby 4lad. l6ade la4dem 4ladg ladi9e8 2ladm 2ladr lad3s4 1lae 2laei 4laent 4laep 2laf la3fl 4lagg lagi4 6lagne la2go8 lag5om la2g1r lag5san lag4sj 2laha 2la1in la5ka la4ke. 4lakj l2akk la2kr 8l7aksel l7aksj l5aksl 4lakt lakterie6 la5kø 2lal l1alk la5mab 4lamb la4mes la4met la3mo l8a8mu 4l3anal lan2c lan6das lan6deb land3r l6a3ne 3lane. 4lanet lan6gel lan4gem lan6germ lan4gr lang3s4 lang4s5e lan6g5ø6 4lanl 4lann l3anno la4nor 6l5ansi lan8s7p lan5ti 4lanv l3anvi 2lao la6pal la7pi la8pl lap8p7r8 lapp7s8 lap5sa lap5sen lap5s4i 1l8ar. 6l7arab 2larb l8are. 4l7area la9red la5rem l6aren. 4larena lare6t la6r7eta 5larf la7ria lariar lari6e7n 4l3arki l2arm lar3n 6l7arr 4lart lar6ta. lar7vet la6sc la5se lasi9e la2sk 7laskj 4lasm la5smi 4la4sp las6sak las6sam las6sat las6sel l6ast 4lastr las3v la1ta lat5ang 6latau la4teg lat6ek la4teno late5s4 la5ti la6ti. 4latm la1to lat7ra. lat9ran lat5rar lat4t5is lat4tra latt6u lau7a 2laud laue6 4laun 4laur lau7se lau6st 2laut 2lav la4v5al la4vel l5avh lav5inn 6lavs 7lavå 1law la6y5 6l1b2 lba3de lba4k lba5ke. lba4ne. l5be lbe9na lbe8re. l4boa l6buh lby4e l5bå 2l1c l4ce. 6ld l7da. ld5aks ld5akt l9dand lda6t5o lda6t5y l2deb l5den l2de5o l2dep l3der l7der. lder7a l4derek l6derik l6derklæ lderle9g lder5s6te lder6s5ti l4desh l6destr l9dé ldis7k ldo9a l8d5oks l2dol l4dore ld5ovn l3drak ld3ran ld5ras l6dre. ld7regn ld5rer. l8dres. ld1ri l7dry ld1rø ldse8 ld4sek ld4sel ld4ses lds1k ld4ska lds4kj ldsla8ga lds6leg lds4let ld4s9m ld5s4om lds3tr ld6tus ldø2 ldø5d ldø5l ld7øy 1le 2lea le7ag le3ak le1al lea5la 3leas le5at 2leb le4bem le6bosta 5lebæk lec4 2leda 5ledar led4dø 4ledeb le4dem 6ledep le5der le3des 2ledo 3ledop 5ledov le4dro le5dry led1s2 6ledu 4ledy 2ledø 4le3då 2lee 6leei 6lefa lefa6ne. 4l1eff 2lefi 4lefl 4lefor 4lefot 2lefr l1eft 6lefy 4lefø 6legap 5legas 3lege le4ged le9gen le4gera le9geran le9geras le4gero le4geta le4gev 7leggi le3gi 6legif 4legj 2le1g2l le4gol 4legre leg3s4 2legu 2legå 2leh 6lehal 6lehamr 6lehan 6lehau 6lehave le3ido lei8e l6eie. lei5ende lei4e5ne lei9er l6ei8et leig6d lei4ger lei7ger. lei4get leig4h5 leig6na leig8ne 2lein le3int lei6r7u leis7t l6eit 2lej 2leka le4ka. 6lekan lek6e le3ki 2lekj lekk7s 2lek2l 2lekn lek4na 2leko 2lekr 4l3ekso 4leksp lekt5ord lekt4s5t 2leku 2lekv 4lekø 4lekå 2le3la 8l9eld 2lele l3elem 4l5elg 5lelig 2lelo 3lels 4l3elsk le1lu 4leluk l5elv 2lely 4lelæ 2lelø lelø6pa 4lema le3me le8me. 4lemet 8lemetrisk 8l9emn lem8na 2lemo lem9ped lem5pes 3lemr lem4si lem4s5ø 2lemt lem5ti 2lemu 6lemy 4lemø 2lemå le4na. le4nal 4lenav lend8a len9dan 6lenden l6endre 4lendri 4lened 4lenem 4lenev l4engd len4g5r leng9u le5ni 4leniv lensa4 len4s5ak 4lensem len5ses len4sta len4tam len4tr len8t9ra 2lenø 4lenå 2leo 5leol 2lep le5pa le4pel le8p9enden le2p3j le8pla. le4ple 4lepo 4leraba 4leram le2r3amb ler5d l8ere le9re. 6lerea 4leref 4lereg 4le9r8ei 4lerek le5res 4lereso 4leresu 4leret 4lerev 9leri. 7lerie le6riei le7rina le4riv 4l5ernæ le5ro. 4lerom 6lerope le3ros 4le3rot 7lers. lers4p ler7te le1ru 4lerus leru8se. 2lery 5leryr 2lerø 2lerå 5l6es. le4sab 4lesam 7lesar 4lesau 2lesc le5sed le4seg 4lesek le5sen le3ser 4leset 4lesho le6si. 4lesig le7sing les5inn 4lesit 4lesju le7skap le4s3kj 6leskol le6sk9u8t 4lesla 2lesp 6lespal les3s6 lesse6ne. 4lesta 9lesta. 7lestal le5sted le5steg le5stel le4stim le3sto 4lestrø 4lestyr 4lestø 4lestå 4lesug les1v le5s6vi 4le5sy 4lesø 5lesøy 3let. le4tab 6letak leta8ka leta8le. l5e4tas 5lete. 6letea 4leteg 4letek le5ten 6letenk 6le7tep le5ter. 4letes 2le3ti l5e4tik 2letj 2leto 2let2r le7tre le5t4ri 3lets let6sj lets8k let6tea let6tr lett3s4 2letu le4tv 2lety lety8e 4letø 8letå 4leul 2leun l1eur 2leut le4ute 2lev. le6vad le6valu le4ved 4leveg 4levei 4levek 6levern 4le4vev levi6d lev5n 2levo lev1r 4levs 4levæ lex1 4leø 2leå 5lée 1lér 7lét. 7lè 5lê 4l1f l4fa. lf5ant l5far l5fe lf3f l5fig l5f6in lf5ja l7fje l6f3nul l4fom l4fut 2lg l6gaf lga8le. l4g5alt l4g3ana lga5t lga4ve. l2ged l4gela l4gele l2gem lge3na lge4r5an lge4rap lge5ri lger5un l4gery l4gesl l6ge7sp lg5g lgie8n lg1lo lg5ly lg5n lg3ob lgo2d lg1ok lg1om lg5ov lg3ref lgr9øy lg3s2e lg2sk lg5s4kre lgsle9g lg5s4tr lgu4l lg3un lg3ur l1gæ lg5ø l6gå. lg5år. lgå8va lgå8ve. 8l1h lha8ka. lhav6s5 l5hj 1li li1a li4ala li2am li5ans li4as liba5 libe5ro libi5 libie6 liby5e li4dak li4ded li4do. 2l1idr lid3t li4ene li3er. li5ers. lie5s 3lif 4lifat lif5f 3lig li4ga. li4g3an li4gar lig9art li8gas. li4g5enh li4get 5lign li4g3re lig3se lig3s4i lig3sl lig3s4p lig5s4ti lig5str li2gu 4lih li5kan li9kar li7kas li5kee li3ken li5keså li9ki likk3o li1k2l 9likn liks4t li5ku 6lila 8l5ild li3le lil5lebe lil5let li4mar li4mas li6mate l6ime li4me. 4limh limp3r lim7r lim9u li4na. 4lina6l lin6c linch5 5l4indr 4lindu lind3s4 l5indus li4ne. li3ne6a li6nem 2l1inf lin4g3j ling5l ling7sen. 5lingv 4l5inju lin5kes lin5kle lin4kv 2l1inn lin5net 3linni 6linns 6l5inntr li4nor l4inse 5linsk 4l3inst 4lint 2linv li6n5ø6 lio4no lion5sp lion5sv li5o6s 2lip lipes4 lipp4s3 li9rar li4rek 4lisak li5set lis4kl 2liso 4lisp lis6sp lis7tan lis6terk lis5ti 4lis6til list3o li6s8tr list7rø lis4t3u4 li4st5y listyr8ke. li4tee li4tek li4ti3a li4tid li4tig li4til li4tim liti5st li4tiv lit5j 6litn li5to li2t1r lit5rer lit6tele lit6terk lit6term litt5s6 li5ty 7liu li6va. li4v3ak liv5eg livi5e liv2s3 2lj l1jan l1jar l4jarb ljar5s6 ljas4 l4jed l6jee l2jei l2jek lje3l lj9elv l1jen l3jer. l4je1s l5jes. ljes4t l5jet. l4jete l5jete. l6je5t6r l2jev l5jé l1ji 3l2jod ljo8e l4jom lj5ori 3ljos lj5un l7jur lj7ut ljø3 l5jøs. 6l1k l3ka l5ka6l lkali9e8 lk4an l6k5b lk4e l3ke. l2ked l5kedal l3kede lkeei4 l6keh l5keleg l8k7els l3ken l7ker. l4kera l4keri l4k5ers l4ke3ru l5kestad l5ket. l5kets lk2l l7k8lem lk4li l5k4lu l6k5nin l6ko. lko9ma lko9sa l2kot lkras5 lk5ri6k lk4ser l4k3s2h lk1s4t lku4le. lku8t lk9ute l6kveg lkå1 6l1l l5la6a ll6a5f l2lak ll1al l4lami l5lane ll3anl l4l5ano llans4 ll5ansk ll7apa llap3s ll4as ll5asp ll5aur llau6re ll7avl ll5avr ll3d2 lle5a l5leak lle8da. lle4d3r l3lee l2lef lle5gev lle5gr l5leha l5leho l5lehå l4l5eig l4leki l6l5ekst l4leli l2lem llen6da. ll5enden l4lendr l6lendt l4lenk l5l8ens l4lentu l4lenu ll5eple l6l5e6rik l4lerob ll6es lle4so lles5pr lle5stø l5let. l4leta l5lets llet6tele l8letæ l2leu ll5even lle7vev l5levå lle6y l2lé. ll7g2 lli1e lli5e4n l9lig l2lim l4l3ind l4lins ll3int l9lint. l3lip l4lir lli6sen l4liv ll1j ll7k2 ll5m llmue9ne llmu7ens llmu9er l5lo. llob5 l2lod l4l3off llo5id ll5oks llo2m1 llom5s6 ll3op ll5opp l2l1or l4loso l6lote ll5p llra7n ll4sak llsa6me. ll4sem lls5end llsk4 lls6kar lls5kv ll5skå lls5lag ll3smy lls4no lls4te lls6tig lls7øk ll3t4 llto4e l8lua l4lu4e l4luf ll7ug llu4k l8l7uka l4l3uke l6luks l5lum l4l1un llun6ge. llu4pi l2l1ur l3lus l2l1ut ll1v4 llva8n lly4se. l4løk ll5øks llø6pa. l4løve ll7øy. ll5øya ll3øye lløy6er ll5øy6n ll1å8r ll3å2s 2l1m l5ma. lm3anm l4map l4marki lm3av lm7b l4m3els l4melu lm5e4po l4m5erf lme7ri lme7sti lme5t4r l5mil lmi8le. lm3ind l5ming lmini6 lmin7ne lm3ins lm5int l7mis lm5l lm5m lm1op lm1s lms6j lm5s2p lm3t lmu4le. lm3ut lmyr8ke. l4mø. l6m5øs lm5øy6 lmøya9 lmå6la. lm5å4r l4m5ås 2l1n l2nab l3ne lni4u l7ny lo1al 7loane lo1a4r 5loar. 2lob lob5by. lob9byan lob9byar. lob5bye lo2bl lo2d3a lo3de lo4d3ri lod3s4m lod7ste lod7s6v lo6d5u 6loeng 6lofj 3loft 1log lo5ge lo6g5e8v lo4gir log2o lo3gop log8res lo6g5ro log5sa 4loh lo5id. lo3ide lo1in 3loja lo1ki lok4ko lok6kul 2lo1k4l 4lokon 2lok7s4 lok8se. lo1k4v lole6ge. 2lolj lolo9 l5omdr lo4m5in lom4mel lomst9r lo4nal 6lond lo5ne lon4g3r lo4nit lon7skj 2lop lo3pa lo4pea lop5pa 5l4opt lo1ra 2lord lor6da. lo1re 4l1org lor4g5l lorie6 6lorm lo1ro lo7rød lo7sa lo6sek lo4ses lo5sev los4kle lo1sl lo7sp 2lost lo9tes lo8ti. lo3to 4lottet lo1un 1lov lov7ald lo3van lo9vand lo7vane lo3var lo3ve7d6 l6over. love5re l5overn 6l5overs 6l5overt 7lovo lov3sa 2l1p l7pa lpa5re lpas5 l4pedo l4pee l2pei l2pel l5peleg l3peli l4pelin l3pesm l4peti l2peu lp2h lp2i lpin3e lpi5ne. lp2l lpo6et l4put l5q 2l5r4 lra8da lradi4u lra6ne. lre4de lre4i lre8ka lre8ke. lre8va lri8ma lri4ve. lro8de. lro6pa. lro8sa. lro4se. lrot5s lrø6re. lrø5v lrå8da. lrå4de. 8l1s l2sad lsag6 ls5ald ls4am l7sana lsan6ke. l4s5ano l4s3ans ls5ark l4sat. l4scu l3se. l2sed l2see ls3eid ls5eig l4s3ele l4s3elv l2sem ls5emb l4seno l7ser. lse2s lses5ku lses3l lses5pa lses5s lse8s5tr lse4te. l2seu l6sev l4sf l2sh l5sig l5sik l6s5ill l4sim l5simu l4s3inn ls5jakk l5sjef ls3jeg ls3jen 8lsk. ls5kabi l4s5kan ls5kari lsk5art l6s5ke lskif5 l2s3kild lskinn6 lskinns5 ls1kjed ls3kjo l6skl lsk3læ ls3koa ls5kor ls3kov l4skra ls8ks lsk5un ls7kva ls3kvi l4skå ls3kåp lskå6pa l2sl lsla4ga l7slagn lsle6ge. ls5lo l5s4luk l6s5løs l2sm l5smør lsmå6la l2snu lsok3 ls5ond lson6de. l2s1or ls7o6se l5sot ls1ov l2spa l9speg l5spei l9spel l5spi l4spr l5spred ls3pri l8s7s l4s3tak l4s3tal l6stank 8l7s8tat l6ste. ls4ted l4steg l3ste4i ls4tel ls5terr ls6ti. ls4tie ls6ton ls5tren l9stri l2su l5sub l3suk ls1un l2s1v ls7vea ls5vee lsve8en. l6s5vek lsve7re l4svik ls6vind l4sør l2s1øy l2s1å 2l1t l4taa l4taf lt3akt l3tal lta4la. l4t3alb lta6lev lt3anl lta6no lt3art lta4st lta8tes lta4t3o ltat3r lt3avk l5tavæ lt9b l3tede l4teka lte6ma. lt4en. l4t5enh lt3epi l4teras l4t5erst ltesa8me. ltid6s l4tiet l2tif lti6g5 l2tik l4tina lt3ind lt9inn lt3ins l4tivi l2t1ja ltle8ge. lt9n lto9ar l3tog lto4s lt3ost lt8ep lt2r l3tra lt3reg lt3rei l6treko l6t5rel l6t7rem l4trens lt3res l5t4rest l5trev l4t5rit lt3rol lt3rom ltro8pa l5tros l4t5rød l5trå lt1s2 ltsa8me. lt5s4i lt7s6t lt2s3v lts4vi lt7t8 lt3und ltu4ra ltur5e6 ltu5r6en ltu5r6er ltur5s6 ltur5å6 l2tut l5tv. ltva8la l3tvs l4t5w l3ty lty8d lt7øl lt3øv lua8r 2lub lub6band lu6bri lu5c lu7ere 1luf 3lugar lu7go lui6 luid6er 1luj 4luk. lu4ka. 4luket luk6keri lu3kr 5l6ukt 4luly l4um lu6mel lu2mo lum6sk lu4mø lun5d4r lu4ne. lun4gel l7u2ni lun5ne 3lunsj 4lunt lu6o lup4s lu2p3u lur2e 6lurei lu5ren lu5ri 6l5urn lur8na lur8ne. lur8ta 1lus. lusa5 lu7sak lu6sel lush7e lu2s5k lus4o5 lus4sid lus4s3t lus1t lus2t3r luta3 lu3ta. lu7tet 6lutf 4lutg luth 3lu5t6he lutla9 lut6m lu1to lu4t5r 2luts lut4tal lut4tap lut4t5at 6lutv 1luv lu4va lu4ve. lu9ven lu9ver 8lv l1va l4va. lva6k l4vakti lva6la l4va4m l4vana lv8and lv7a8p l7var. lv7asa l4v5ass lve3d4a lve5i6s l4vela l4vele lv4en lve9ne l9ver. lve9rau l4veru l4vesk lve5sl l7v6et. lve5str l9vé l1vi lvi8ene lvi9er lvi6ka. lv9im lvin5g6r lv3iro lv1j lvly8se. l6v3n lv1of lvoks6 lv9op lvo8re. lvor4s lv5o4v l6v5p lvra8r lv9ri lv1s2 lv5se lv7s6k lvs6l lv9ta lv1å l3våg lvå4p4 lvå6r l5w ly1a 2lyb ly4d7r ly5e lyes3 ly4gel ly5g6l ly8is 2lykj lyk6keri ly5ku ly7kv 6lykø ly5l ly5me 2lymp ly2n3a ly4ne. ly4n5il lyn3s2 2lyo ly5ok ly3pe ly1r8 ly8ra. ly6re. 6l7yrk ly4sa. ly4s5a4k lyse6te. lysk4 lys3kj lys9kl ly2s1l 4lysp lyst9ra 6lysy ly8ta. 4lytek ly4teri lyte5s l5y4tin ly1tr ly5vak ly3ve l3z l6z5b 1læ1 6læd læ6ra. læ5rar lær4arm læ4re. lære3i læ3rer læ4re3s læ5res. lær6sv læ6ta 1lø lø3de. lø4del lø5dem lø4er løk5kj 4l1økn 2løko lø4k5r l5ø6l lø9me lø2na løns5t løp6s5 5l4ørd lør5k6 lør5n 4l5ørr 5løs. lø2sa lø5san lø5ser løs3k løs3s 2løt lø9ta. lø3te. lø4teg løva9r 6l7øv8d lø4ve. lø3ver lø5ves 6løy. 4løya 2løyd 4løye løy8ed løy5el 2løyf løy4g løyg5e 4løym 6l5øys. løy5ter lå6gal lå6gre lågs4 lå4gå 2låi lå1k4 lå6ke. lå9me lå2m5o lå2n 6l5ånd lån2s1 2låp l1åp9n 2lår lå8ra. lå9rar lå5ras lå3rin lå1ru lå6sa. lå1sk lå6sko lå4s5l lå4ste lås7ten lås5ter lå5su lå3te. lå4teg lå4tek lå8ti. 4lått lå4ve. 1ma 2maa 3maa. ma3ar 2mab ma5br ma3che mada5me ma4del ma3dra m6ad9s 4maef 4maek 7maene 2ma1f 3mafia 3mafr 6mafrå ma8ga. ma4ged ma4gel ma4ges 3magn ma2gr 2mahe ma4is ma4ja 2mak. ma5kab 4makad ma4kes mak7ke 4makl mak6le ma4kot mak2r ma3kre mak5ron mak4tal 4m3akti mak4to makts4t ma1ku 2ma1kv ma1la ma7leb ma6leng ma4let mali9e8n mal5l ma4lov mals4 mal4t5ek mal3u mal3å 4mamer ma3mo m4an. ma3nak m3anal 6manam 4manav man8ce man4dom man4don ma3ne m4anf man5g4a m6ange 4mangr mania8 2manl m3anle 4manm 5m4ann man4nem manns5l ma4no 2mao 4mapa 2mapr 4marb mar5d6 7mare. 6mareg ma3rei ma7rel 5ma9ren ma5res 3mar4i mari8e9ne ma3rin m4arka 4markit mar4kv mar5m marmo9ra. mar7n ma1ro ma4ro6p mar3s4h mar7sl mar5te ma4ry. ma6rå 4masel ma5set mash3 ma4sia ma4sik ma4sis 6masju mas4ki 4masko 4masp mas4see mas6set massø9 7mast. ma5stem 4masto 4ma5str 2masy m6at ma1ta ma5tad ma3te ma4te. ma6ted ma4tel 7maten 7mater. 6matera 7matet 6m7atfe 4matil 7matil. ma1to ma1tr 4matra ma4t5ras ma4t3re ma6t7rom mat3s2 mats8l mat5ta m8at7t8r 2mau mau4k mau7l ma1un 5maur mau7su 2mav 5m6a6ve ma5ven m7avh m5avk ma4ze ma3zo 2m1b m4bao mbar3d m2bea m4beb mbe9da m4bedø m2bef m2bek m4beli m2bem m4bena m4beo m4bereg m4bero mbet2 mbi6ar m2bib m3b4l mboe2 mbo4end mbo5er. mbo5ere mbo5id mbo5n m4bop mbo5re mbo9t mbu7ar. mbu4e mbue7re mbus5 m1c m6co 2m1d2 m3de md7om 1me 2mea2 me5al mea5m 2meb 2mec meck4 4medat 2medb 5mede. me4ded med5ei me7den me7det 4medf me3di 4medik 4medir 2medm me6dok 4medom 2medr me6dret med1s4 4medu me6dun me5d4us med5v 7medve 2medy 4medå me7e 2meef 6meek 2meel 4mees 4meev 2mef m3eff 6me2ga me7gal 2megr 2megu 4meh mei2e meie5n m1eig me3ild me3ind mei5ni me7isk 4meiso 2mej 4meki 4mekj 2mekk me2k1l me3kn 4meko 2me5k8r 4meks mek5t 6mekte m2el 4mela me5l4aks 5melane 5melar me3le me4le. 4meled 4melei 4melek 6m5e6lem me4l5eng 4melik 4melis 4melit 4meliv mel5le mello6m3 4melok 4melov mel4si mel2s3j melsk4 mel5s4t mel7tr me1lu mel5v melvi6 2mely 2melæ 4melø 4me5l4å5 2mem me6mo. me6n5e6d me6n5ers 4m5enga men5k menle6ge. m6enn men4ny me4nom me4nor men4si men3sm men5spl men5te men6tek men4tom men5tr me4nyt 2me3o me6os 2mep 5mer. me6rab 4merad me4ra5l me4r5ant mer5di 4mered 4mereg 4merei 4merek 4merel me6rense me3res 4meress mere6t m4eri 4me5rib meri5ke 5merin merle7g mer9n mer5os 5mers mer5sk me3run mer5und 4merus 2mery me2r3ø 2merå me4råk 5mes. 2me5sa 4me5s4h 2mesj 2me1sk mes5ke 2me1sl mes6le 4me3s4o 2mesp 5mess messe7s8 7mest. 4mesta 5meste. mes4ti 6me7sto mest3r me5stro 6mestrø 4mestrå 4mestu 4mesu 2mesy 2mesø 4metab metall7s8 4me9tap me4tar me3te 4meteg 4metei 4metek 4metel 4metep 4metil 2metj 4meton me4t3ra me4tre met5ren met7rer met5res met5rik me4tru 4metræ 2metu 4metv 2mety 2metø 4metå 2meu4 7m4eu3s 2mev meva8n 2meø 2meå 2mé 2m1f mfa9ra mfar8ta mfav5 m2fek m6f3ess m4fi. m4fibr m2fit m5fru5s6 m5funn8s5 mfu6se. 2m5g6 m4ga. m4gi. mgå8va mgå8ve. 2m1h mhea4 m4hu. 1mi mi1a 5mi6al mia2n 9miane 7miar. 2miav mi6c miche6l 8m9idé 2midi mid5j mid3s4 mid4t 4mi3ele mi3er. mie9s8 2mi5f 5migraf 2mih 2mii 4mij mik6h 4mikj 2miko mik5ro. mik5ron mik5sa 6miku mi4la. mile6t mil7eti mi4lev mi7li 4milin mil6s5v 4milæ 2mim mi8ma. 5mimo m7imp mi4na. mi5nar mi4ne. mi4n5ers 4m3innh 4m3inns 6minnt min2s min3sp mins4t mi3nu m4inv mi4n5y mi7ov 2mip 4misa mi4san mi3se 4misek 4misel 9misé misha9ge 4mi7si mi2sk mis4ko mi3s4la mis9le 7mism mis4s5k mis4s7p mista9k 5mis7te mis4tra 4mistu 2misy 4miså 6mita mi3te 4mitj 4mito 2mit6r mitt3s mi5ur 2miv mi5vå m6ja. m6jan m5jar. m7jarn 2mje m7je. m1ji m8jingan m8jingar 8mjo mju7ke 1mjø mjøs5t 2m3k2 m4ko. mkro5 mku6le. mkå8pa 4m3l m7la mla6ga m2lef mlei5er. m2lek m2lel m2lem m4lera mle6se. m4lesk m6le5s8v m4leta mle4ve. ml6i ml5ja mly6se. mlø6pe. mløy3 2m7m4 m6mai mma5kl mmal5 mma8le. m4mam mmando5 mman6dol m5mar mmar7in mmar7o mmatik7ka m4medø m2meg m2mei m2me3k2 m4melu m6meni m4menu mmer5t mme4run m2me1s mmest6 m5met. m4meta m4meti m4metra mme5t6re mme3u m3mé m4mia m7mian m2mib m4mid mmie6n m2mik mmi5sk mmi5so mmi3st mm5n m3mu mmø2 mmå8la. 2m1n m2nee mn7eid m2ne9l mne4ra m5nese m4nesk m4nesta mnes9tie m9net. m4nete m2nev m6nip mn7sk 1mo 3moa mo2ar 4moba 5mode mo3dem mo5di mo6di. 2mody 3moe mo4en. m1off mofo6bi. mo6gi 5mogl mo5go m5ogs 4moh 2moka mo8ka. mo8ke mo1ki mo6la. mo3le mo4le. mo7le6s 4molt mo3ly m5om. 4momf 2momr mom4s5ø mo5ne mo4nisa mo2no mon1s mon4ste mon5t6 2mop 5mo1ra mo4ra. mo4rar mo7rar. mor5d6e 4mordl mor6d5r mo3re mores7 m2ori mo4ri. mo6rid 4m3o4rie mor4kl morla8ga mo5rok mo4rom mor4si mor4skj mor7sky mor4sp mo1rø mo9sen mo2s7k mos4o 6mostab 4motap mo4te. mo6te6g6e mo4tei mote7kl mo5ter. mo4tes mo5to 4motr mot7re mot1s2 6motsagd motsva5 mot7t mour5 3mo3va mo5w 8m1p m4pana m4p5anta m4pee m4pelot m6pena m6pep mpera8te. mpe5res m6peress m4p5erfa mperi6e7n mpes2 mpes6te mpe4sti m5pett m2pe5u mp3id m4pinje m8pla. m3p4lan mp5le. m6p5lin m6p5n m6p5ob mpoe4 m4poeta m4pog m6pok m2pop mp3opp mp1p8 mp3rad mp5ret mp3rop mpro8pa mp1s mp3sek mps4p mp5s6t mpun6ge. m9pur mp5ut. mp5ys mpø5 m9på. m3q 2m1r6 mro8sa. mro6se. mru7te. mrø9de m9rår 6ms m5sa. ms1ak ms5ant m1sc mse5lu m9s6ei m4sem m4s3eng ms5e4pl m4serv mse5s m5s6etn mse6t7jare mse8t9jas msi6e ms4ing ms3inn m4s5ja ms5kab mska9k ms6kin msk5ing ms3k4n ms3kor ms5kren msk8u ms3lan ms6lega ms9lua ms3lue ms4ly m2sm m1s2n ms9ne ms5no ms3næ m1so m4soms ms3ori ms1ov ms3s2 m4s3tal ms8tav m8s7te. ms7tea ms2ti ms5tilb ms3tim m1sto m4s5top m5s6topp mst5ord m8strand m5strane mst5red ms5tref mst5ren ms5trik ms4tru ms3unn msu9ta msu7ten ms1v msva9ra msva5re m3s4vet ms3ynd msø4ke. m4s5ør ms1øy ms1å 2m1t m3ta mt4b mtbe6 m2tee m2teg mteks7 m6te7kv m4tel m6testu mti9a m9tida mti5e m6tien. m6tif m2tik m6tini m4tiø mtiør6 m5to mt4r mt6ve mt4vin mtå5 1mu mu6a m1u2b mu2e mu3el mue7r mues1 2mug mug5l mu4he mu2k 8m9uka 4m1uke mu5la mu4leg mule6s mull2 mull6s7 mul6tiv 4muly 7mum mu3mi mum2s mun2c munes6 4mung mun6ge. 6m5univ mun3k munn5s6 mun4t3r mu6ra. mu4re. 2murn murs4 6murt m2us mu4se. mu4ses4 mu4sé mu2s3k muske6l5a must4 mus5tan 2mut 3mu1ta mu8ta. mutsa8la mut7t6r 2m1v mvak5t mva6la mvari6 mveg5s4 mvi7e6 mvi6se. 2mw 1my my5a myg4ga my3ke myk4kes myk3l my8kr my2ra my9ran my9rar my1re my4re. 4myrk m5yrke my4r5u mys3 my6sa my4se. my4so my4te. mytt6s5 5mæ mæ6la. 1mø møb3l mø7des mø6e mø9ens møkk6a m3økn 2møko mø6na mø4ne. møne9s mø8nest 6m5ønsk mø2o 3mørke mør4k5r mør5sm mør3ø mø5se 7møt mø9tas mø4tere møt9t 2møy møy9ar m5øys. 1må 2må. må5a 6måenh må7g2 må1k må4ka. må4ke. må4kes m6ål må5lar må4le. må6led måle3i målø6pe. må4ne5s6 må9nese må8pa. må4pe. må7pl 2mår måra6r må1re må1ro må1ru må1s4 må6tak 6måtf må5tr må3tø 1na na6ans 2nabo 7na7bortr na6bot 4naby na4ded na8dem nadi4 n3adop nad2s1 4nadv 8naf n1aff nafo7r na3fr naf7t na8ga. na3ge 4nagen nag3s4 nagså5 na7gø 6nah 4nair 2nak n6akk nak7ka nak6ko 5nakl na1kr n1aks nak8sa nak8se. 8n1akt nak6ta. na7kv na9lag na6lare 6nalarv na7leg na4l3ei na4lek nal5epo na4les na4l5ett na4lev nal5g nal6ge. na4lil nal6lag nal4løp nal3op nal5s2 nal3t na3lur 2naly na2l5ø 4nalå na3lå5r 5nam. na7mere na5mes na5mo9 5nams 2namø 9nan. 4nana n3anal n6ane nanfø8 4n5angr nan5k nan6ke. 4n3anl 6n5anle nan4ne na4n5o n4n5ans nan4sin nan4skj nan4s5t 4nany na7o na5pe nape4s nap3s4 na7p8 n4ar. na4rap 2narb nar5dr 4narea nar7ei 4na5rek nari4e5n 7nariksk 4narkiv 8n7arm 6n5armé 6n5arme nar8ma. nar5s nar8ste 2nart nar6ta. nar5ti nar7v nar5ø nasa3r na4sas nas7h 8nasik na4ski na2s5t4 nasta5 8nasu na1ta nate8k na7tem 4natl 4natom natori5e6 nat8ra nat3sp nat6tak nat6tea naty5 2nauk naus6p na6va. 4navd 6navf 2navg 2n3avh na1vi 4n5avk 4navl nav4les 3navn 6navo 4navr n1avs 4navt 4n1b2 n5ba2 nba3d nba9ser nben4s nbo5et n6buf n6butr nbyr5 nbø9le nbø6n n1c n5ca ncel5 n3che nch3ei n6cot n2cy1 8nd n7daa. n6dabi n4dad nda5f n7dag4 ndags5 n4daks n3dal n4dalf n4d5all ndals3 n4dark n6d3art n8dask nda5tal nd5d4 n3de. nde5a n2deb n2ded n5defi nd1ei nd4ein nd6ek n4dekl n4deko n5d4e5l nde4le. n4delik ndel4sk ndel4st nde6lt n2dem n5dem. nde5mo n5den. n6dener n5dens n2de5o2 n2dep n4derab n4deras n4derei n4derim nd6erk nderla6ga n4desi n4dest n4desu n1dé ndi4en n4d3int ndi6sk nditori5 nditorie6 ndit4t5a nd3jer nd1ju nd5k nd4lem nd4lese nd4lest nd4lev n8d7m ndo9a n6dob n6d5okk nd4om4s3 n2doo nd1op n2dor nd3org nd5orm n6dote nd5rae n4d3ram nd3ran nd6rek ndre4ra nd5resen nd5rett nd1ri n1dro nd4sag nds3ak nd4s5amb nds5elv nds5ende nd4ser nd4sje nd4skj nds7kul ndsla6ga nds6lett nd7spu nd3s4te nds9teg nds5trek nd5stry ndta6ka. n6duf ndu3is n4dun nd3ung ndun6ge. n2dup ndu6si ndus7k nd7v n2dyg ndy1k n2dys ndy5sp ndø5l n2d1øy 1ne 2nea 5neae nea4g ne7a6le ne5alp ne5als nea9m6 ne9a8r9an nea9ren ne1as 6ne7av 2neb 3nebb 4nebe ne4ble neck5 2neda 3nedal ned3d 6n5eddik 4nedeb 4nedeg 4nedel 5nedg ne4di. nedi4s 2nedo ned5over7 ned1r ne6dre 5neds ned3st 6nedu 4nedø ne5dår 4neeg 4neei 2neek 5ne4e4r5 2nef n1eff n5eft 2neg 5negati ne3gla neg5lesp neg8r 6negru 6neh 2nei n2eid nei8dan n5eig n2e1in n3eini 5neir 5n6eisk 2nej 2nek ne4ka. 6nek2l ne3kn nek2r nek5rin n7ekser nek5t 4nela nel3de 4neled 6nelegg 7neleggj 4nelei nelei5er 4n3elem 6nelê 4nelid 4neliga 4nelis 4nelit 4neliv nel4lov nel7s 2ne1lu 4nely 2nelæ 2nelø nelø8pa 4nelås 2nema 4n3emb 4nemel 4nemer 6nemes 2nemi nemie8 6nemj nem6k 5nemn nem5ne. nem7nel 2nemo 2nemu 2nemy 2nemø 2nemå 3nen 4nena nen5at. 6n5en6den 6nendr nene4 4nened 4nenem ne3nes 4nenesl 4nenet nen5eta 4nenev nen4ga. 4n3enhe 6nenhet 4neni nen5se nent5ei 6n3en5tr 4nenu 4neny 4nenæ 2neo 5neo. ne5o4r 7neos 2nep ne5pe 3n4er. 4nerad 6nerap 3nerb 4nerea 4nered nere6de. 4neref 4nereg 4nerek 4nerent 4nerep ne5res 4neress 4neresu 4neret 4nerev 4nerfar 4ner2g ner3ga ner3ge 4ne3rib 4nerik 4nerit ne4ri9v 5nerl nerla8ga n3erob 6neroc ne7rof ne5rok 4nerom ne5rot ne1r4ov n6ers. ner7se ner5s4i ners4p ners8ten 4ne3rul ner5un 2nery 3neryr 4nerør 2nerå 2nesa ne4sa. 5nesar 4nesc 4nese 6nesek nes6er 5nesets nes5eva ne3si nes5ind 4nesit 2ne5sj ne5skam 4ne5skar nesk4e 4neski 5neskins 4neskj 4ne5sko 4neskr 6nesku 2nesl ne3sli ne7slø nes6mi 6nesn ne7snø 2neso 3nesot 2nesp nes6sam nes4stu 5nest. 4nestas nes9te. 4nesto nes5tor 4ne3str 4nestu 4nestø 2nesu 2ne1sv nes8va 6nesy 4nesæ 5nesøy 4ne5så neså5re 3net. 2neta 4netaks n7e8tas neta6le. ne3te 5nete. 4ne3ti 6netid 2netj 2ne5to 6netom 2net4r 3nets net5s4p nett3a4 net6tel 2netu ne4tv 4nety 4netå netå5ker 2neu neu1r ne5us ne6va. ne4ve. 6ne8vent 5nevik nevi8sa 3nevn nev1r ne4y5t 2neø 4neå 1né 4néb 4néd 2néf 6néh 2nél 4ném 6néo 2nép 5nér 4név 4néå 4n1f nfall4 nfalls5 nfan5t n6foa n4fob n4fole n4fom n4fora nfor9en. nfos4 nfø5des nføy8ed 8ng n8g8ad n4gaf n6gag ng1ak ng5and. n8gan8da ng3ank n4g5arm n4gart ng5art. n5garta ngar5u n2gat ng5ato nga4ve. ng7avi ngd4 ng4ded ng4del ng4dep ng3dr n4geda n4gela n3gen n4gena n7gene n4g3eng n6geno n4genu n3ger n4geret nge5run n2ges nge3sl n4geta n2ge7v ngfø4 ng5g2 ng5id ngjen5g ng1l n5glem ng4lu ng7n ngo4d ng5odd n7goe n3g4ok n8g7o8m ng9ome ng5ond ng7o6pe n2gor ng5ord ng3ork ngos6p n2got ng3ra. n5grad. ng5rand ng7rea ng3reg ng3ren n4grend n4grer ng5rest ng3ret ng3rev ng3rid ng3rin ng7ro. ng9roa ng7roe n5g6ros5 ng3råd ng8sa. ngs5elv ng4sem ng4ses ng2sj ng2sk ng6skj ngs7leg ng5sløy ngsmå6la. ngs3ne ngs7tep ngst5rid ngstyr8ke. ngs9tør ng3und ngu5ru. ngvi4s ng5ye n1gø n2g1øy ngå8va ngå8ve. 4n1h2 nhat5 nhet4s 1ni ni1ak ni1a2n nian5dep ni2bl 4niby 4nibå 4nicr n8ida ni4del ni7dele n5idé ni6do nid7r nids4 nid5st 4nieg ni1el 7ni3e2n ni3er. nie5ri ni7ers ni5ert 4n3i4fr ni5gla ni9glo 2nih 8nij ni3ke 2nikj 4ni5ko 2nikr 4nikv ni5l4i 5nilu 4nimar 4nimas 4nimo 2nimp ni6n7al 2n1ind 4ninf ning3o nin5gr ning6s5 ningse4 nings5te 2n1inj n1inn 4ninnb 4ninnh 4ninns 4ninnt 2n1ins 2n1int 2ninv 5nio. nion2 nions3 4niop 7nios 4ni5ov ni4pet ni9pet. ni9pets ni2pl nip3li nip5si 4nir nir7kel 4nisem ni5set nis5im 4ni3skj nis4k3o ni9sol niso5ne niss4 4nistas 6nistat nis5tik 4nistil ni3str 4nisty 4nistø 6nisu 6nisy n4it ni3ted 6nitj ni4tog ni4tos nitt4r nitt4s3 nitt6sk 4nitu ni3ty nit5z nitær6e 2niub ni4umf 2niut 4niva 2nive ni8v7eg niv5ei8 4n5ivo niv3s2 6niå 4n1j n6jah njav9 n2jed n5jede. n4jee n6jei n2je1s n3jes. n2jet n3jet. njet6r n5jett 2nk n1ka n2kak nk3aks nkal5l n2kau n4kedo n4keer n4keh nk5eie nkel5s nkelt3 n4k5enh n8keno n4k5erfa nker4st n4ke1s4 n6ketø n1ki n4kid n4kie nk3ier nk5ind nk7inf nk3inn nk7int n5kj nk1k4 n1kla n5k6lang n7k4lis nk3lok n1klu nk3ly n3klæ nk1lå n1knu n1kny n3ko n4kof nkofi8 nk5oks nko5le nkol4la n6kot n6kov n1kr n3krav n7k8ry nk1s2 nk4tak nk6tal nk4tin nkt3sk n1ku nku4le. nkuri9 nkurie8 n4ku6t nk9ute n1kv nk3ve n7kvit n6kvo n9ky n1kø n1kå nkå6pa 4n1l nland9a nland6se n5le nlei7er. nle8ma. nli4en. n3lj nlu4e nly6de. nly6di nly4se. nlø6pa. n7lå 4n3m nma4le. nmik3 nmi8l nmini6 nmo6se. nmusik7k nmå6la. 4nn nn4ab n2nad nn5ad. nn9aft nn5air n6n1ak n4nala nn5alg n4name nn4an nn5ana n9nane nna8ni n4n5ank n5nanl n6n7anta n9nar. n4nari n6nasi n4nask n2nat n2nav nn3avl nnbo9e nnbu9e nn5d2 nndø4 nndør3 n5nea. n5neap n5nebar nnebe8r n5nebu n4nedi n2nee n6nef nn1ei n3neke n4nelo n3n4en nne6nat nne4n3o n9ner. n4nerel n4nero n7nes. n6nesj n5nes4la n4ne3st n5n6et. n4nesø n4nete n2nev n2ney nn7g8 nnhø8re. n4nid nn3ide nni3e n2nim nn7inf n5nis nni4sj nni4s3t6 nn7k2 nnle6ge. nnlø6pe. n4no. nn5of nno2m1 nn6oms nnomsy8na nn1op n2n1o4r nn7ord n4n3o4ve nn9r nnsa9ka nn4s5amb nns5and nns3ar nn5seg nnsei8g nn4s3em nn6s5enk nn4s3es nnse6te. nnsi7da nn4s3in nn4s5i6s nn6s5jak nns5kan nn5s4kli nns5op nns3or nnst6 nn6s5tab nns5tal nns5telt nns4ten nns5tep nns7tin nns5top nn6s5tre nns5tro nns3tv nn4s5ul nns3va nn6s5vo nnsy8na nn2sø nns3øk nn3så5r nn7t4 nnte6se. nnto9ga nnu1i nn6ung nn1ut nnvi4s nn1yn nny4t nn7øk nn1øv nn1å 1no noa4g no1ak 5noane no7ar. 2nob nobe4l no4bl nob5le no3b4r no5co nodi4e5n 3noe 4noef 4noei 4noek 4noent 2nof n1off 3no3ft n6ogra no5id no3in 2nok no1ki nok8r nok6se. n3oksi no9le 2nolj no6mid no6mik no4mil 4nomj nom9m nom7s2 5nomy non1s4 non5t 2noo 2nop n1opp nopp7s8 no1r4a no5ran no5rar no5ras nor4da nor6d5end 4nordn nor4d5r nord3s4 nor4dø no9ree no3rek no3ren no7ret nor5g 3norge norges5 n3o4rie 7norit 4nork nor6kla nor6kle n4orm normlø7se nor2s nors6ka. no3ræ no4sel no4ses nose8te. 4nosp no3stj nostra4 2nosy no4ta. no4te. note5i 5notek no4tel no4tes not3s 4noty 4nou no1v no3ve 4no5vi 4n5ovn 7nó 6n3p2 n5pe npo8ta n4påk n3q 2n1r2 n9ra nra8na nra8sa n3re n4reb nrei7e n6renem n6reo n6ri. nro6de. nro6t nry6 nrå8da 6ns n1sa. ns1a4d n5sag n5sakk n5sa4kr ns3aks nsak6se. 6n5akti ns5akv n3sala ns3ald n6s5alp n5sane n4sanf n5s6ann n5sanse ns5ansi ns5ant n5saren. ns6arm n6sart n4sati n1sch n3sco nse9a8l n2sed ns5edd ns8ede n2see nse5ei nse6er n6sef n2seg ns5ege nsei6d ns5eie. ns9eig n4seks n4s3elv n2sem n5sen. n5sene. n4sener n9senes n4senet n4seni n7sens n3ser. n4sera nseri7e6 n4sesa n4sesi n4se3sk nse3sl n4ses4p n4sest n6sesu n4se3s4v n4sete n9sets n2seu ns5fr n2sh ns3ha ns7he ns5hi nsi5de. nsi4ent nsi6er. nsin5d n3s4ing ns3inn n4sinte nsi8ra nsis7k ns3jak n4sjav n5sjef n6s5jord n4skan n6s5kauk ns7kele ns4kete n9skim ns5kir n5skis n6skja n6skjele ns5kjen n3skjæ n8s7kåp nskog6s ns4kolli ns5kor ns3kro nsku9et n4skug ns5kuli n5skum ns1kv n5s6ky. n5s4kye n5skyss n5slang n7slarar ns5las nsle6ge. n3s4lekt ns6leri ns5lid n5slyn n1slå ns3mi n4smal n4s5mo n4smur n4smus nsmå6la. n5s4nar ns5nes nso4d ns1of n3s2ok n1sol n4sond nson6de. nso5ris ns1ov n3sovn nspa9ra ns5pels n5spet ns1pr n6spros n7spur ns7s6 nsse4e nsså5 ns4ta. n4stak n4stag ns5take n3stam n4stank nst5art nstar8ta. ns4tau n3s6ted n3s4tei ns4tel nste6ma. ns5tenk n6step n5s4tik ns5tild ns7tilf n4s5tils ns4tin ns4t3i4s ns1tj n5sto. n3stru ns7trøy n3stue n6stuk ns5tur nst3ut n1su ns1uk n4sung n5sup ns5vang nsva9ra n2s3ve ns9veg ns5verd ns5vern ns1vi n5s4vill ns4vind ns9vis n4svu n3s4væ nsy4d ns1yt n5søn n4s1øv ns5øya n5såpe nså7pen ns7ås. 6n1t n5tab n4tagr nta4lan ntall4 nta5na. n4t5and nt3anl nt4anv nt3app n7tart n6t5arvi nt6as nta5sia nt4at nt3avi nt5avr nt7avs n2tea n5teat n2tee n4tef n4tege n4tegi n7tegn n2tei nt5eini nte5ins n5teis n4teka n7tekn n4tekse n9teleg n5telig n5tell n4tels n9telt nte4ma. nt3emb nte4mis n5ten. n4te7na n5tene. n4t3enh n5tens n2teo n5teori n5tepp nt4er n5ter. n7terek n6terest nte6risk nteriø7ra. n5ters n7tes. n4tesel n4teta n4tete nt4e3u nt5e4va nt9g nti1a n4tiat n4tid n5tiem n4tig n4tikap n5tiki n4tikl nti5kli n5tile nti3lo n9time. n7times n4t3ind nti6net n6tini n2tio n2tip n4tisa n4ti5sti nt5l nt5n nto3a n2tob nt5omf nt5omn nt3oms n2t1op n5tor. n5to5re n6torg n2tou nt1ov nt6ran n4trep n5trer nt5resi ntres9kjare n4t3rin ntrol6li n6trom n6trul ntrøy4 nt5skj nt5s6la nts2t nt3t4 n6t7ub ntu9e ntu4l n2t1u2n n4t5uro n2t1ut ntva8la nty6e ntyr3s nt7år. 1nu 4nu. nu3an nu4av nuft4 nufts5 2nug nug6la 4nu4h nuit8e nuk5 nul9t8 4nulu 6nuly nu9me 2n1un nun4ge. nuo2 6nup nu3pl nu4re nu5sa. nu5sen nu7ser nus4k5l nus7l nuss4 nu6st nus3ta 2nut nu7ta nu3te. nute6r nut5eri n7utl nu6ume 6n1v nva6la nvand5 nverle9 nves1 n5vi nvi4et nvi4ka. nvi5ke n3vu nvæ8ra n3w 1ny ny5ar. ny9ast 2nyd ny4de. 4nyef 4nyg ny5ge 5n6yhe ny3ke ny3k4le 4nyko ny1lo 2nyn nyn8da. nyn4de. 4nyo 4nyp ny8pa ny6ra. ny4re. ny7rev ny4ru ny1s ny5se ny9s6k nyst4 nystu4 ny3te ny3tr 2nyv ny8va. ny5vak ny8ve. 4nyø n1z 1næ1 næ8ra. nær9and næ8rast. 1nø nø2da 4nødd nødde5 nød3sk nød5sto nø9dun 2nøe 4nøf nø1fl nø1fr nø7gr 4nøko 4nøks nø4le. nø9mo nø5mu nø3p4 nø7ra nø6red nø1ry nø3se nø1sk nøs4l nø7te nø7tr n6øtt nøtt6r nøv4d nø3ver nøy1 2n1øy. nøy8a9n n7øyh 4nøys n3øys. nå6as 1nåd nå5ded nå8en nå6et nå8j n1å2k4 1nål nå2la nå5lev nå8ma nån6de. n1å4p nåp8na n1å6r nå2s nå5sa nåse4 2oa oa5c o1af oa4k oak6kana oak4ku o1all o3alt o1a2m o3a6n o9and o1a6p oar6d7e oar4d5in oa4r5e4g oa4r5enh oa6ré oa4r5i oar5m oa9té o1au o1a4v 2o3ba obakk8s obb4l ob4bo ob4b5r ob4b3u ob4e o4bea ober5et ober4s obers5ta obers5te o3bes 2o3bi obi5e6 1ob1j o1b2l ob5la. ob3le. ob3len o2b5li 3oblig ob4lo o1b4o obo9a 2obr ob5rar ob1re ob1ri 3obser ob5st 2o3bu 2oby obyl5 o5bø o3bå 4oc ock5ers o5cy 2o1d o6dab oda4f od7att odd5ei od4del od4dest od9do od4e o2deb o6d5ei o4deko o5deku o2dep oderle7 o2des o5det. o5dets odie4n o4d3igl o4dj odko5 od3oml od3ov o2d5re o4d3rø od3sk ods4ka od3s4po od5s4tol ods8t odu7s o4dy. o4dyb od5øk o5døs od5øy o2d1å6 6o1e oe6f o4ein oek6s oe2l oe4mu oe2n oen5a o7ene oeng5d oen2g7r oeng3s oeng3u o5ens4 o7ens. oen5t o3e4re o6erer oer8ma o3ersk o2es oe6sip oe6sit oes8ka oes8ke. o4etan oet2h oe5ti oev6ne. 2ofa o2fa. ofag6a o4fara ofa4se o2fav o2feb o4fei o4fera o4fe3st o1fé off9and of4fek of5fes of6fia off5id of6fr of2fu of6fy 2ofi o4fip o1fl of5le 2ofo o6fra. of9ras of1re 6o5fri of8sa of8se. 6oft of4tel oft2s3 2ofy 2og o2ga. og7ank o4gare o2g7av 4oge o2ge. o4ged og1ei oge7na. o3get og4gera og4g5j ogg3s4 og6g7u ogi3a4 ogie2 o4giev o2gif o6gig o4giko o2gil o2gim o2gin o3ging o2gi1o o6gista o6gi7str o2giv og5jer og7la ogly7 og4ned 5o4g5ni og6nel o5g6nos o2go. og6ra og4re. o4g3reg o4g3rei og4rer og7rett o4g3ri og3ryd o4g5rø og5rå og3s4 ogs4a ogs6an og3s2e og1sk ogs4kj og5sl ogs4le og1s4p ogs5pa og5ste og3sti og4s5tj ogs4to ogs4tr ogs5t6ra og5stre og5sy 5og5s6y4v3 ogt6r 5o4g5åt og1un og5ø og7ås 2o1h6 ohe5te ohm9a o4ho. ohø4 oia4 o1i2d9i o1idr oid5t oie4n oi5er oi6es oi5k oi4la o1im o3in. o1ing oi2n1o4 o4insp oi6r o1is o2is. o6isa o2ise o4isi 4o1j o8je. o4jo. o1ka ok7aft ok1ak oka4n5i6 ok2ar ok5ark o3kas ok1ef ok5els5 ok5elv o5k6en o4kesk o6kev o1kj ok4kand 4okke ok6kera ok4ke5s ok3kje ok3ko. ok5kol okk8s7m ok4kun 4okl ok8la. okla5m ok8le. o1klu ok7lut oklå5 2okn okna8sa o3ko o8ko. ok8ol o4k3oms ok3omt oko5pe ok5opp ok3orm oko4s oko9se o6kov o1kr ok5reo o6kret o4k5ru oks4al oks4e ok4sek okse5kr ok4sem ok7sen ok6serin ok4ses okse9te ok5s4i oksi7da okst2 oks6ti ok6s5vi oks6tr ok5ta 3oktan ok8t8a8v7 ok3ti ok5to okto4r5i okt6r o1ku ok5u4k oku8le. oku6t ok7ute o5kva o6kvak o3kvi ok5øy o3kå 8ol. 4o1la ola6ded ola8ga ol5anl ol3ant o9lar. o6larbe ola5t olber4 olbo7e olbo7ge. ol4bol olbu7 2old ol7dan ol5de. ol4dem ol4dest ol5det ol3do oldo7ve7 ol5drev ol3dri old3s4kr 2ole o5leaks o6leb o2led o2lef ol5eig ole5in o2lek o7leki o2lel olele6ge. o2lem o5lem. o5lems o7lene. o9lenes o4lenet o4leni o4leno o6lered o4leru o2les ole5sta ole5str o9let. o2lev o1lé ol4f5i ol4fj ol3g4e ol1g4l 2oli o4liba oli9e6n oli7ert oli5ne 3o6lj olke3s4 ol4kese ol4kesk ol4kest ol2k3l ol9ko ol6ku ol5kv ol5la. oll3ak ol4lam ol7le. ol4led ol4lel ol7len ol4les ol6linj ol4log ol4lom ol5los ol4lov oll5over olls4t oll5sv ol2lu ol4løp ol6løs ol6løy ol2lå olme5s ol4mest ol4må ol9n 2o1lo o4lo. o5loan o3loe o4lof olo3i ol5oks ol3oms ol3op o6l7os. o6l7o6se o6l5osf olo5ve o8l7ovn ol4ped ol7so ols8t ol5sva ols5vik ol3ted ol5tep ol2tr ol6t7ra olt5re. olt5rer olt5ret o1lu olu5l o4l3ung olun8ge. o4l5ur ol5va ol1vo o1ly oly7d ol5ør o1lå 2om. 2oma om3ald o2ma2m om5ang oma4nif omann4 oman5t om3ars omar7ø8 om4as om1av omb6 om4bet om4bis om3bl 5ombod 1ombu 2ome o2m1ek o5meka o7menes omer6s o6mese o5met ome4tak ome7tar om1eu 3omfan 3omgre 8omh o2mia o2mib omi3e4 o4miek o2mig o7mikk o7mine om7inn om3in5s o4mio o2mir o4misj o4mist o2miu om1j 2omm om6mat om4med om4metr 3ommø 2omo o4mofo om1op omo1v omp2 ompa3t 1omr 2omre 2omro 2omru 6oms. oms3al om4sek 3omset omsko9d omsku9la om4som oms3un oms4ø omt2 3omtal om4tes om3ti om3tv o2m1u o3mus omvæ8re. 6omy omyr8ke. o2møk omø4r om5øy6 o5må 2on on3abo o4nac o6nak o4n3ang o4nap on3app o6narb o4n3arg o4n3arv o7n8a7sj onat5r o2n1a4v on5b on4dar onder6e ond3re on4d5ri onds4i o4ne. on5eie o4nele o7nell o2nem o3ner o4neru onesi6 o4nesk o4ne3s8t o4nete o2nev on7f on7ga. ong3d on5ge. on6ged onges4 on5gi on5go. ong2r on8gro ong9ros ongs4j on2gu on4gy on4g5ø o9ni. o2n3i2d oni1e o2nil on5ild o2nim oni6mi on3inf o6n7inn o2ni1o o4ni5p o6niso on3j on1k on5k6a 3onkel on5k6i on4kle on5ku onle6g on5nad on3ni on5ny o4no. o5nor. o4no4v on3ove on4sh ons1i onsi3s onsi4v ons1k4 ons7ke ons1l onsla6ga onstitue9ra onstitue9re onst5rum ons5und ons1v on4sve ons1å ont6a on3te on4ted on5ten on5ti on4tok on5tor ont2r on7ul8 on5ur onu4sk o4n5ø4 on6øy. on7å6 2oo ood1s o1off oo2k1 oo5k8a ook5es ool7a oo4m5i oo6mo o1o2p oopa8 oop9an oo4pe oop5en oop5et o6opi o1o4r oor6da oo5s oo6sp o1o4v 2op. 2opa o4pab o2pak opan9d o4pa3re o7paren o4pasj o4pau o3pea ope1i opel6lø 2open o4pena o9pend o4penet o7pent o2per 6o3per. 3opera ope6rar o7pero o5pert 2opet o4peta 4oph o1pi o4piek oping9s o4pir 2opl o1pla o4p5land op3li op9lu op4na. op4ne 2o3po 2opp. 4oppa op4p5art op4pas 4oppe 1oppg op4pi. op6pia op4pis opp3li 3opply op6poe op6pr opp5rop opp5und opp1å2 2o1pr op6re op7ru op7rå op6sa. o8p8si op2t1r o4q 4or. o6r7add or3adr o2rag or1ak 2oral or5ald o4r5alg oral4st or6alt. o3r4am o4rana o3rane o4rang o4rans or6ap or3att o4rau ora3uk or1a4v 4orb orbit5 or7by 4orc orda9ta or3dea 6ordel ord7e6pl or7dik ordi4s or4d5ise ord3it 1ordn ordre8gi. or7d6rø ordsa6me. ords6e ord3st ordy9ra 8ore orear8a orear8e o5rebra o8redi or1ei or1el o4rela o6reld ore6na. ore4ned ore4net or3enk oren3s ore6o5g6 o6rerf o4rero ore1s2 o5resc ores6te o4reta or9et8n o6retv o2rev 2orf orfa6re. orfi7ne orfø9re. 1or3g4a 4orga. or3ge or5ger orge4s orgi6e5ne org4sk orha9g orha9le o1ri o3ria ori5b4 ori4e5ne 5orient o7riet o2rig ori7ka o6rim or3ind or3ink or3inn or3ins oriro8 6oris oris4a 6orit o4riti oriti6me. or5ka 3orkes or5ko orko6se. ork7s2 6orl orla7te or5le orm6al5t orm5ang or6map or5mel or4m3un ormæ9 or4nar orned5 orne6dr or5net or4nol orn3t 4oro o3roa o3roe or3off o5rog oro5i o1ron or1op o4r1or oror9da o5rosa o5rot or3ove or5ovn orpe6s 4orr 2ors ors5alt or5sen or4serk orse9ta orse7te. or3si ors5kar orsk5ei4 ors8k9l ors4ku or1s4l orsmå8la or1sn or3s2o orso9na orso9ne orso9v ors4pa ors4ten or1su orsva9re or3sy or9sø 2ort or4t3ak orta8la. or4t5and orta9pe or4t5av orte5i6g or4tek or3tem or6t5erf or8t7erm or5tii or7til or5tis 3ortod or6tok orto9ne orto4r ort5ori or4tou ort5res ort5råd ortå4 or4t3år or1u oru8d or9ude oru4h o5rum oru4t5 oruta4 or4utf orva9ra or5veg orv3s 4ory o7rya or1yn 2orø or9ø8k orøk8t or5ør or3ø4v orøv8d or1øy or5ås 2os o1sa o4sa5b o6sad o2saf o4saku 6o5sau osbi7 osefi5 o2seg o5selei o2sem os2en o6sena ose5sl ose5sm oses4sk oses6sp oses4st o4seu osfa9ta os2hi os7his osi6e7ne osi5ere osi5ert o2s1ing osk3ei oskei6e o4skil osk9lar osk5len o1sko osko5p o3skri os8k3v os2l os3le oslo1 os2lo5d4 os5lu os5lø os9ma os5me os3mo o2sn o3so os7ove os6pa. os6pe. os4pil os4por os4sek os3sem os5sens osseri7e6 osse5v ossis5te os6ski oss3kj os4s5ko oss9l os6spa oss7tro os7sty os8sv ost5adr os5tal osta5le o8ste. os4teg ost5egg os4tek ost6el os5teo o4sti. o8stia o4stie o4stin os5tis ost1o os6tons os6trad ost5ran ost3re o3stro ost5rup ost7rå o5stø os1v os5øy os7år 2ot o1ta o5tad ota4l5a ot5ald otal7ev ota4lov o9tane o9tar. ot3arg o8t9arm o5tas ote7d ot6ei ote5int otek5i ote6k7la otekla8ga ote4kle ot5elem ote5lev otel6lan otel6lek otel4li otel8lø o4tena o4t5ende oten8de. oten4s5p o2teo o4teram o4teret o6terev o4tero oter5s ote5r8u o4terå otes6ter ote5sté otet5a otet5o otet3s6 otfø4 oti7ert oti2k otika3 ot7i6ko o1tj o6tja ot5jer ot6nero otno7te. ot6nå o1to o2to. o4to3a o5toa. o2tob oto6en. o6tof ot3off o6toga o6togram o4toi o2tol oto5ne oto4ral otor5d o2tot o2tou o1tr ot7red ot5rer ot5rev o6t7ri o6t5rom o6t5rø ots5el ot6sh otshusvæ8 ot4s3ki ots6op otsopp6 ots5pr ots5tab ot7ste ots6å ot6tank ot5tas ot5tegn ot6tenk ot5tese ot5tin ot5toa ott4s3k otts5po otts4ti ot7tug ot4typ o1tu o6t5ut o1ty oty8e ot1yt o1tø ot7å oub8 oul5l oun6ge. ou4r ou7ri ou5ro ou9sa out8a ouve4 o5vae o1vak ovanfø8 ovan9o ov3anv o7var. o6varb ova9re ov5art ov7arv oved3 o1vei o1vel ove4la 4oven o4vend o5vende ove6nya ove2r over3a ove7ra. ove9ras o6verdr overe6 ove8r5es 3o6verf 3overg o5verks 5overr 5oversik overs4p over9v o1vet 6ovh 2o1vi oviso3 2ovj 6ovna ov4nes 2ovni 4ovo o5vo. o7vom ov1or o5vot ov1o2v ov5sal ov4sek ov4sen ov9ske ov4sle ovs1p ovs5te ov4sti ov7sun ovsy5k ovta6le. ovveg7i ow1 owa8 o7was owat2 ow5h ox3 oy9ar oys5l o1y2t o1za o3zy o1ø o1å ô6ra ô2re ôr5ei ô1ri ô4t ó9sa ó7t ó8v ò9re 1pa 4paa 2pac pa8cen p5ad. pa3deb p4adg pads4 2paj 6pak. 6paka 4pake pak4kas pakke4s pakk7esl 4pakti pa3kv 3pa1la pa3le pa6le4o7 pa7lim pal5in pal1j pal5lø 5palm 4palø 2pam pa5me p3anal pa4nap pan9de pa5ne pang5s6 pan3ka n7k8rea 9panne. pan5se pan5sl pant8r 4panv pa4ny 2papa pa8pa. pa3pe 4papo pap4pr 4papr pap3ri pa4ra. 5parad 2parb 4parek 4parena par5ess par5g 2pari pa4ri. pa3ris 4parki par6k7l par4kv par3m8 pa1ro 4parr par8ra. par9s4 par6tid par4tig par4tin par5u par7v parvi6 6parø 4parå p6as pasa5 pa9se pase6r5 4pasp 3pass pas5sab pa4s3t pas4tar pas5ti pas9v pa1t pa3te pa4tist pa6tre p8atta pat6tak 2patu p8at6v pau7k 2pav pa4ve. 3pa1vi 2p1b6 pba4ne. pbo6da pce6 2p1d4 pde4le. pdø2 pdø9d 1pe 2pea peak3 pe4a3re 4peb pec3 pe7d6a 5pedas 4pedd pe3de pedfø9 pedi9e8 pe6doa pe6don 4pedr pe4dro 4pedu 4pedy6 2pedø pe7då pee6 pe3er 2pef p5eft 2peg p5egg peg8ge. pego4 2peh pe4il pei4leg 2pe1in pe6ism 2pej 2pek pe8ka. pek4l pek4tro pekt7ros 8peku p6el 4pela pe5l4aks 5pelal pe5lar pel9d 4peled pe4lef 4pelei pe6lep 4peler pe6lev 6peliv 6pelj pel4lo 4pelov pel5s6e pel5s4i pel7st 4pelu pe5lun 2pely 2pelø 6pelå 2pem p1emb pe4nan pe4n3ar pen3de 6p5enden. 4pener pe3net 5peng8 pen4gel pen7gl peni4n 4peniv penly4 pen7s8a pensa7k pensa8la pen5sk pen4s5l pen3s6m pen5s6o pens4t pen9sta pen7ste pen7tag pen5tr 6peny 2penå 2peo pe7o6s 2pep pep5ar. pep7p pera3a 4pe4rab 4perad pe4rai pe4ral 4perap pera5t 4perate 5p6erc 4pered 4perei 4perek 4peresp 4perest 4peresu 4peret pe4rev 3peri perie8ns 4pe5rik peri3s4 4perit per7k8 per6les per5mu per5n 4pero pe3ros pero6se. per6regj per6rei 5perro pers6m per4tro per4t5rå pervi6k 2pery 6perø 4pe7rå 2pe1s 3pes. pe3se pe6se. pe7si pes8ka. p3eske pes4ke. 6pesl pes4n 5pess 3pest. 5peste. pes5til pe7t8 4petab peta6ka 4petal 4petas 4petau pe3te 5pete. 4peted 6petei 6petek 4petel 4petem pe3ti 4petid 4petil pe4tim 2petj 2peto 2pet4r pe4t5ru pet1s6 4pett 2petu 4petø 4petå pe2u 2pev peva8ne. pe5vi p5evn pev6ne. 4peø 4peå 3pér 2p1f 3p6fenn p3fo p5fr pfri4 pfø5re 2p1g2 pgjer4 2p1h phav2 pha9va phavs5 3p4her phe9te phe7va phe5ve phi5li 7pi3ane 7piar pi4as 7piase 4piav 4pib pi6ca. 2pid pid3s2 pie2n 6piend pi3er. pi9ers 2pif pi9fr pig5ge pig6g9u p7i6gj 2pih 6pii pi4keh pi6kel pike5r6o pi4ké 8pikk pik3ko 4pikl piku5 pi5la pi6la. pi3lep pil4lag pillba6 pil6led pil4leg pillega6 pille6ra pil4le5s6 pi1lo 2pim pi4na. pi4ne. pi9ned pi4nel pine4v 3ping pin6go ping3r ping5sk 6pinns pin4sl pi2nø pio6n5an pion5s 7pi2p pi4pi pip9la p8pip pi4rar pi4res pi4rut pisi9e pi4ski 2piso piss4l pis4sp pis4st pis1t pis4t5r pis9t8ra. 1pit pi9ta pita7la. pi5té 2piti 4pitj 4pitr pit5t 2piu 2pi5v 4piø 4p5k4 pka5v pka8va pl6 8pl. 2plad pla8de. p4lak p4lan. plan7de 4plane. 4p5lan5g plan5s plap3 4p1lar p2las pla4st p2lat platina5 2ple. 2pled p8legi 4pleis p2lek p6le5n4u ple5n4a ple6r5u ple8se. 4plev p2li 4plit p3liv pli7va plo4gj p4lo8i p1lok 4p5lov plu4e p4luk plun3 plun6d7ri p1ly ply5d8 plæ5re plø6pa p1lå 2p3m 2p1n4 p7ner pne6se. 1po po9a pod8 po6da. po4de. po6em 2pof po6f7r pog6 4poh po5id 2poke po6lan po3le po4lek 6polj pol5li po6lom pol6s4ka po2lu 2pom pom6p9u pom5s 4pon. pon5d pon4gr pongs6 2pon1s pon5sa pon4sv po2p1a po6pe. p5opn pop1s 2por. po1ra 2p5ord po1r4e po4ref po6reg po8ré 2p1org 2pori 2pork por6s7v por4tor por4t5ro por4trå 2porv po1ræ po1rø po4se. po4ses 4posj po2st po4sta pos5tas po5stat pos3te 4pos4v 5pot. 7pota potak9 po3te po4te. potek5l po5t6ha 3poti 4potr 4pou 2po4v pove6 pover6n pow4 2pp p2pad p2pak pp3akt p2p3a4l p9pane pp5angr pp5ank p4p3anl p2pap p9par. pp5arr p7past p4p7at p4pee p2pe5i4 ppel5s6 p4pena p8p9ender p4pendr ppe9nes ppe5p8 p4penø ppe5ra p7pere. p4perkl pp7e6sen pp9esn ppes8ti p4peta pp5e4tas p4pete pp5ett p2peu pph8 p1pi pp1id p2p1il pp5im pp3inf p4p5inn pp7ir ppir8re. p4pist pp1j pp3k pp1l pp5last pp3led pp5lei pp9lev pp5n pp1of p2pol4 pp3old pp5om p2p1op pp3ork pp1ov pp5p pp1r pp5rei pp5rin pp4ris pp7riss pp9riv pp9ro. ppropri6 pp7rot pp1s ppse6te. pp3ska ppska9k pps2p pp9spe pp3spl pps2t pp7sto pp7t2 p2pu pp1uk pp5ut pp3ø4 ppøs8 p6på pr6 4pr. 4prad 3praks pra7li 2pran pran3s 5prat. 5prate pra5te. 4pray 5pref prei7er. 4preii pr5elem 1prem pren4s 1pres 6pres. pres6sak p6restas pre7t6en7 4prett p3rif pri5ke pri4l3e 4pring 5prino 3pr6in6s5 3pr6in7s6e 3pr6in7s6i 1pris pri6s5k pris3t 2prit pri9ve 1p2ro 8pro. 6p7roc 3prof 4prog. 4proge 4progl 4p3roi p5rop. 3pros 7prose 6pru prun7ge pru5ta pru5te 6prør prørs5t prø5s4 5prøv prø5vels 2prøy 4prå prå8da pråk3i prå4ko pråk5k6 2ps p1sa. ps5a6n p1sc p3se. psei8ge p2sek p2s1el ps5e4ly p3sen. p5sens p7ser. p5sete p5sets p2sh p6sib ps5ins p7sis p3s4jo p4s3kil ps7kjen p2s1ko p7s6ko. p3skod p5s4koe p2sle p9s8lo. pslø8va pslø6ve. p3s4lå p2sm psmå8la. p2sn ps4no ps1o p3sod pspi9la ps5ple p3s4pre p4s5pro ps5pu ps3s2 pst2 ps7tal p4s5tem ps3tv p5s6tå psu4r p3s4us ps1v p2sva p2sve ps4ving p4svæ ps5w psy3ke 3psyko 4psys p2s1ø p3s2øk psø4ke. psøy8 psøy9ene ps1å 2p1t pta8la. pta4le. pt7ark p3te pte6k pte4ma. pte7re p5ti pto7g p4tou ptus5t p4tut 1pu pu4br 5puc 6pu6dy p5ugl pu2k pu7la pu8le. pull6 5pum pu4ma. punk4t5 punk5t6e 2punn 2pur pu4re. pu8rea 3puri 3purk pur5u pur3v pu7sa pus4h pusl7u pu1ta pu4ta. pu5tas pu5ter pu5tev 4putg 2puts put6tr put4tu 2putv 6putø 2p1v pver7 pvi4se. py4dr py8o 3pyra py1re py1ro 6pys py6sa. py4se. pys6t 4p5z 1pæ pæ4re. pø1kj pør4ret pø8sa. pø9ta pø9te p1ø2v8 5påb på4by. på1k2 1pål på4la. på4le. p5ån på3pe på1pl p1åpn på1r 1pås på7sko på5sm på3t2 6påtå7 1påv qa5 qu2 qu9ar. 1que que7r 4raam 4raar 4rabis ra1bo4 4rabr 2raby ra3cet ra3ch 5raci ra3d2a 4radf 3radio3 4radir 4radj 2radm 2ra1dr r3adre rad2s3 radvi4 ra5ede rael4 4raerk raf4fer ra4fiu ra2fj 2rafo ra5fo. ra4fos 2rafr ra5fre 6raft ra4fu ra6fy ra7gea ra5gee 2ragl 2rah6 7raid ra5int ra3isk 6r5akad ra9kar ra7kel ra5k6ha r2akk rak4kel r6akr ra5kro 2raks rak6sa rak3s4e rak6se. rakst6 4rakti rakt3r r4a5ku 4rakv ral5ans 6ralbum 5ralds 4raled ra5leo ral3g 4r5alge 4r5algo rali5e6n ra4lin ral1j ral5le ral7m ralo6i ral3op ra5ly 4ralø 4ra5l8å ra4mag ra4mas ram3b 6r9ambi rambu9ens 6ramed 4ra4mer ram8et. 4ramil ram1o ramperi8 ram6p3u ramse8te. ramta8la. ramta6le. 4ramu 6ramy r4an. ra4naa 6r3anal ra5nar ran9cs r4an9de. r5andel rand3r rand5s6a r4ane 4ranfa ran5ge 6rangi rang5st rania8 ra6nin ran3kv 2r5anl r6anli 2r1anm r4ann ran6n5ett ran4n5in rann3s4 rans7kar 4ransv ran4tik ra5nu ran6ut 4ranø 2rao 4rapa ra4pel 4rapin ra4pir ra4pis ra6pit ra1pl 4rapo ra4pos 4rappa 4r5appl 3rappo 2ra1pr 4raps 4rapu 1r4ar. 2rarb 7rarbeh 4rarea 4rareg rar5e6l 4ra3rep rar7eta r1arg 6rargu 8rarinna 6rarinne rar8ka. 4r1arm rar8ma. 6rarn 4rarr rar3re rar5s 2r1ar5t rar6ta. ra3rø 4rasa 2rasc ra3sea 4rasel ras3h raska8ra ras3ke ra4ski ra7s6ko ra6sl rass4l ras7st 4rasti ra5s4til 4rastj rast5re 6rasty ras7v ra1ta ratak9 r6ate ra4te. 6ra5teg 8r7a6teli 4ratfe ra1to ra1t4r ra4t5ro ra4trø ra5t6røy rat5tel ratte4s 4ratub rat5ut 6raty 7raud raud3s 6raug rau6ga rau6ge. 4rau4k raus6s 2rav 6ravd rave5s4 4ravg ra1vi r3a4vis 4ravl rav8l9ut ravlø8pa ravlø8s rav6r 4ravt ra5vy ra3vør 4raw raz5z6 2raø raøy4 2r1b8 rba3d rbe2d rbede4 rbed5en rbed5et rbed9ra rbie8 rbi9er r2big r2bik rbist6 rbis5tr rbo8di. rbo4ni rbon7s rbo5re rbra5s rbrei6 rbu5en r5bø r1c 4rd r4dab r5dag rdag4s5 r5dah r4d5ak rdal4 r4dala rda4le. rdals5 rda4mes rda8n9o r4dant rd5anta r4d3arm r4d3art rd5atl r4datm r4d3au rd3d2 r6dedi rde4en r3defi rd5e4ge rd1ei r9deka r4dekl r4deks r6delo r6demi r7dena r6d7eng r6d7enh rden4s3 rdense4 rdenta8le. r4deo r6depo r4derik r4d5erst rde6sm rd3e4ta r6d7ett r8dé rdfes5 rdi3an r4diana r4dians r6diau r4did rdi3e2 r2dif rdi6gres rdig3s4 r4dika r4dikl r4diku r2dil r6dimi r2dio rdi3ov r4dish r2dit r2diu rd5je r1dju r8d7m rd3n rdnæ4 r9dob r4d5o4d r4dol rdon8na. rd1op r6dor rd3ost rd1o4v rdover5 r9drad r3drak rd5ran rd7rara rd3ras r3drei rd3ret r5drev. rd1ri rd3rot rd3sei rd8ske rds4kv rds5tan rd3sto rdsto5g rds7tre rds7tu rdsva9r rd5t rdta8ka rd5tr rd7tø rd3und rd5ve rdvi8ka. r4dyg rdy5pe rdy3re r6d7yt r6d5æ r7d6ær r7d6æ5r6e rd1øs6 rdø4ve. rd3år rd7å6s 1re. 2rean re7a6r7an rear5e 4reav 2reb 3redak 6redam re3def re5den re3des re3di 3redig r1edl 2redo 2redr re4d5ri red5sku red4sl reds5la red7s6led 3reduk 6redy 2redø 2ree re4el. re3er 8refa 4reff 4refi 2refj 6refos 6refr 4reft 2refø 4regar rega7ta re3ge 4regeb re5gel 4regen 4reger 4regg 1regi re4gia re4gil reg1l 2regr 4regub 4regud 2regå 2reh 2reid 2reie 2r1eig rei8ga. rei8ge. 4reik rei9l rei5na. rei7nas re5inde rei5ne. rei7nes rein6skj re4inva rei9ra rei5sa rei3si rei7ska reis6led re7ism rei7v4a rei5ve 2rej 6rek. re5ka. re5kav re7ken 4rekj rekk6an rek4k5v 5reklam rek4led re5k6lir re7ko 4rekob 4rekom 4rekon 6rekos 4rekra 3rekru r3eksa 6reksp rek4ter 4reku r8el. re9la 4relag 9relandsk. 9relandske 2r2ele rele8ge. r4e5lei 6relek re7len 7relene 6relg r3elit 4re3lj r2ell rel4lag rel6land rel5led rel4lev 5r4elm rel5ses rel4sk 4re1lu 4relv 2re5ly 2relæ 2relø 4re7l6å relå7r 2rem remann6 r1emb remi6ene remi6l re7mis rem9ji remmed5 6remn rem8na rem5p4 rem1s remti9da 4remu 8remy 4remå 2re3na ren4del 4rendr 8rened re5neg re7nei 4renek r3e4nel 4renest 6renet 6rengd reng5l 4rengn reng5st re5ni 2renk ren6kl r3enl ren8ne8sl rennes9la re5no ren5sa r3enss 6r7entit 4r3en5tr 6rentu 4renu 5renz 6renæ 4renø re5og 2reop re3o2r 5reou 8repen 6r5e6pi 1repu 6repus 1rer 6rerad 6re9rang 4rer6at re5re. 4rered 4reref 4rereg 4rerei re4rek 4rerent 4rerep 4rerese 4reresu 4reret 6rerfa 4rerig 4rerik 4r3ernæ 4rerol 4rerom re3ros rero6se. re5rot 3rers rers4p 4rerute re6r7øy 2rerå 1res. 2resa re2s3c re3se 4resel re4sem 4reset resi7ere 4resin 2resj 2resk res5ke re6s7kje. res6kl res7kod re6sky 6re1sl re4slu 1resm re5smo re3sov re9spe 4respi 4respr 2ress res4sal res4sek res4sit res4sj res6sk res6sort res4sp res4st res4sy res9tane 5restau res6t5erv res4tes res3té 4re3sti res4til re3str 4restre 7restv 4re5sty 4restå 1resu 6resuk 4resun re3s4ve re3svi 2resy 2resø 4retaki 4retal re4tap 4retea 8retek. 6reteke 4retekn 6retel 6re5tem re5ten 4re5ti 4retj 4retoa 2re5t2r rets4i ret4st ret7ted ret5ter rett8o rett6set 4re5tu 2rety 2retø 5retøya. 7retøyets 4re7tå 2reu reu6r 4revak re5van reva5re. 6reveg 4revei 4revel re6v7enh re5ver reve5s r3e4vig re4v5inn re7vom 1revy re4v5åp 3rew 2reå 2r1f rfa5re rfat5 rfe8en. rfe8er rfe4et. rfei5li r4fik rflå3 rfe5m6ø rft2 rfu8se rfyr4 r9fæ rfø8rarar 2r1g r5ga. rga8le. rga8li rg5and r7gann r4g5anv rga3ri rg3art rga4ve. r6gedi r4gef r2gem rgent4 r3geo r4gerei r4geret r4ge3ru r4gesj r4gesl r4gesta rgi1a rgie4n r2gik r2gil r2gim r2gio r2gir rg3i4ri rgi7sl r2giø rg2le rg5le. rglem5 rg3len rg3ler r2gn r4gog r3gom r2got rg5rab rg3rea rg3rel rg5reps r6g5ri r3gru rg5sc rgs6kor rg5s4le rg1sn rg5s6till rg5sto rg9stu rg2sy rgu7d rg6ut rgå9as rgå6va rgå6ve. 2r1h rhav2 rhavs3 rhjul8s rho3d r7hu rhø5re rhånd6s9 rhå9ne ri1an 4rianf 4rianl 6riansv ri1ar 4riarb 4riarr 6riau 2riav ri4ava 3ri6avo 2rib ri2b3l ri8ca. ri4co. ri5da 4ridale ri5der ri5di 2r1idr rid3t 4rieie 4rieig 4rieks ri1el 6rield 4rielem 6rielim riel4la rie4n ri3end 4rienh 4rient rien5t4r ri1er rie5ra rie5ri 4rietat ri5even 2rifa riferi9e8 rif4fi rifiserba8 6rifj 1rifl rif5la 2rifo 2rifu 4rifø4 ri4ga. rig4gr ri3gi 4rigj 4rigre rig2s rig6s7t 2rih 2rii 2rij 5rij. ri4kali ri5kan 5rikd ri3kes ri7ki rik7ken rikk5j 4rikl ri8k9la 2ri7ko 6rikon 2ri1k2r rik4sk rik4s5u rikt6 rikts3 riku6m ri3k4v 4rikå 2rila 6r5ilde 6riled ri5lei ril6lest 2ri5lo ril4sn 2rilø 4rima ri9mab ri9mar 6rimes ri5met 2rimi ri4mi. 7rimis rim7l 4rimm 4rimo ri4mor 4r1imp 4rimu rim9ut 4rimy rina5l ri5n6am 4rinas 4r5inc 4rind r3indu ri4nee ri4nes 2r1inf rin7gom ring3r ring4sa4 rings5ak ring8spa 2r3inj 2rink 4rinn rin9nes 4rinor 2rins rins6k rin6sm 2rint rin4t5j rin4tr 2rinv ri6nø 2ri1of 6ri3om 2ri1op 2rior rio5s4 riot3r 2rip 4ripe ripo4s3 4ri1r 4risau 4rised rise5i 6risek 4risel ri4seli 4rish 5risiko 2risj ri6sju 4riska ri4ski 6risku 4risky 6ristad 4ri5sted ris5tik 4ristil ri4sto ris5tof ri5stun 6ristø ri6stå 4risv 4risy 4risø ri3te 6riteo ri7ti riti9da 4ritil 4ritj ri5t6o ri5tr rit1s6 ri6tun 4rity 2riun riu4r 2riut 4rivar ri6ved rive9ge ri5vei 4riverk 2rivi ri4vi4s riv5ise 6rivo 4riøk riø4r3a 8riøya 4riå r1j rj7ambi r4jere r2jes r4jeti r4jetr r4jetu rju6la 8r1k rk3akt r6kanf r4kao r4kapr r6katr r3ke. r2keh rk5eik rkei8ka r6kek r4kelo r4ke3lu r3ken. r4kenav r3kene r4keni r5kens rke5ri r4keris r4kero r5kers r4ke3ru r4kerø rke4se rkeslø7se r9ket. rk4han r3ki rki3d rki3e rki4vi rkjek8 rk5jor rk1k2 r5k8led rk2li rk5lun rk9lut rklæ5re rk2lø rklå9ra r3knek r5knep rk7nes r3kno r2kob rko6b5r r6kofo r2koh r4kola r4koli r4kope r4kora r4koru r4kosel rko6sele r4kosj r6k7ras rk5rei r5k6rem r8ks rk4sar r6k6seg rk2s1i rk4ska rk1st rk6stal rk4sten rk4s5ti rk4stj rk4sto rk6s5vi rk5ti rkti4s rk5to rku4le. r6k7u6t r4k5ve6d rk5vei r5kvel r4kver rk3ves rk5vik r4k5øl r2k3øy rk9øys rkå4k rk5åke rkå6pa rk5å4s 2r1l rla4te. rle4a r2lef r3lep r4l5e4ri r6le7sl rle4st r4lesu r4leu r3l4i rli9ke rling3s4 rli8ta rli4te. r3lj rl6o rlog2 rlo5ve rl4sk rlu4e r3ly rlys7k r6l5z rlø8pa. r5løy9 2r1m rma6ge. rma5k4l r4m5alte rm3anl rm4ans r6manv r4mare r4marr rm5av rm3b r2me7g r2mek rme6lap rme5ne r4menet r6merev r4mese rme9tar r4mey r4m5ide rmi6ene rmini6 rmin5ski r6m5inst rm5i4v rm1je rmlø8pa rmo4e r2mof rm1op rmo7st rm7p rm5s6ko rm1sl rms6n rm1st rms5til rm1su rmta8la rm3te rmu7an rmue4 rmue5ne rmu8la. rmu6le. rm5øy. r9må. rmål4 r6m5åp r9mår r6m7åta 4rn r3na r4n1ak r4n3ald r6n5appar r4narb r4n3art rnat7r r4natv r6n9a6vis rn3avl rn3d rndø4 rndør5 r3ne. rne5a2 r5neboe r2nec r4nef r2nel rnele6ge. r3nell r3nels r4n3eng r4nenh rne7p r4nerei r6neris rne3ro rne1s2 r5nes. rne6se. r8nesi r4ne3sk r4nesm rne3so rn5e4tab r4nete r2nev rne5vr r2nés rn5g6 r4ninn rn5k4 rn3n r5no. r4noa rno5b r4nod r4noi r6nok r2nom rn5omn rn3oms r4n1op rn3ork r2nos r4n1o4v rn7se rn4s3in rn5ske rn3skr rn5sla rnsle7ge rn7s6mi rn6s3ovn rn5spon rn3s4pr rn1st rn4sti rn3te rn5ti rn7tr rntre4 rnt4v rnu4 rn5ug r6n3ut r7nøt r4n5øv rnå8le. rn3ås ro1ak roa4s ro5asi 9roban 9robar 1robe ro4bed ro4bef 5roben ro4bes 5robølgj 1roc r3odds 7rodo ro5end ro7ens ro7fa ro4fel ro4fem roff5ri ro7ga. roga9ta ro7ge. rog5ret ro6gry rog1s4 ro2gu 1roi ro4kel ro5ki rok6kat rok6keri rok5kl rok4kom ro7k6l rok5n rok7s rok8se. rok5v roli7ga 4rolj rol4lab rol4lap rol4leg rolle8ge. rolle8se. rol4lis rol6ly rolo9v 2roly ro6mak ro4mal 3ro5m8an ro4mate 2rom7b 4ro3me rome5d 4romk 4r3omn ro4mor 2romr rom5sla r7omsy romsø3 rom3t ro5ne. ro7nim 6ronism 6ronista 8roniste 6ronisti 4ronn ron4na rono5s ron1s4 ronta6le. ro4pad 5ropet ro4pia ro8pla. 2ropp ro9py ror3a ror6da. ro3re ro1ru ro4sat ro5sel ro3sen 4rosl ros3la ro4sm ro6sov ro1s1p ros4st ros4sy ros7tas ro3sti ro3str rost7rø rot5ekte ro5tes rote7ster roti7ka rot5ord ro5tu 6roty roun2 round3 ro5ut ro5va. ro9vare ro7vas ro5vek ro7ven rove5re rov5sm rovve6 rò6te. 8r1p r5pa r6parb r5pefo r4peno r6penø r5pesk r5pet rp6j rp2l rp3lad 4rp3n rprø5ve r3pu rpun7g r6p5ut. r6p5øy r2påk 8r1r r8raa r2rag rra3r r4raro rr3d rr6e r4reb r7rebart. r2ref rre7int r4rekl r5relat r4reo r4repl r4re3ru rre5sk r4resm r4reso r4respe r3ress rre4st rres5ta rre7sti rre5str rret6s5 rre5u r3ri rri6ka. r6rip rri5v rr3m4 rrmå8la rro6e r5rom rro8sa rro8se. rro8ta rr5s2 r2r3un rr5v rrå5de 4rs 6rs. r1sa rs3ab r2s7ad r3sak rsa5ka r6sakt rsa6la. r8s9ald rs3all r5sam r4sarr rs3arv r1sc 5s6ch6l r8sedi rse6g7 r4seku rs4ela rs7eld r4seli r4s3elv rs5e4rik r3ses r4sesi r6sesu rse4te. rs6ett rsett8o r7sim6 rsimp7 rs1in r5s4ing r4sins rsis5t r7sja r4sjh rsj3or r3skad r6s7kaf rs4kam r3skap r4skar. r4skas r4ski r5skil rsk7inns r1skj rs5kjens r6skl rskla8g rsk5lar rs4k5le rs4k3læ r5sko. r5skoe rsk3op r4skor r3skot r1skr r4s3kra r5skriv r4s3kro r1sku r5sku. r5skue rsku7et rsk5und rsk5var rs5kys rsk5ø rs4lef r4slei rs4lek rs4les r5s6lit rs3lok r4slun rs4make rs4mo. rsmål4 rs6nev r1so rso9a rs5oml rs8o6n5 rso7n6al rso5n8e rso5n6i rsons4 r2s1or rs5ord rso7ris rs1ov r1sp rs4pan rs6pat r5spel r4sper r7spes r5spi rs4por r5spred r4spå rs3s6 r1s2t r4s5tabb rs5tank rs3tap r6st7b rs4ted rs4tem rs5tend rsten6s rs5ter. rstev9na r3stil r4s5tilf r4s5tilh r4s5tils r4s5tilv r5stis r4stit r6st5k rst4r rs9tre. rs7tree r4strin r4s5tro r5strø rst7ut rstu9va rstyg7 r3st6ø r7stå rs5ukl rsu9r rsu7sa rs5usi r1sv rs8vak rsva9ra rsvar4s5 rs1ve r3s4vek rs5vit rsy4na rsy3t r1sz rsøks3 rs9øye 6r1t rt5ad r4t5af rta4ka. r4tana rt3anl rta9pa r4tarr rt3art rt3avs r4tec r4teda r3tede r2tee r4tego r4tegr r4teie r4te3in r4teka rte6ke. r4teki r4teku rt5e4lit rte6ma. r3temp rten4s5k rtentle8 r2teo r7t6er r5terd r5teres r4teris r5terk r4terå r4tese r6tesk r6testi r4teta r4tete rteus8 r4tev r4th rtian8d r4tians r4tiar rti8ar. rti5en rti6gra r4ti3kv r4tila r4tili r4tilo r4ti7na r2tio r2tip rti7sa r6tiska r4tiski rt6i9so r4tisp rtis3s r4ti5str r3titu r2tiv rtma6le. r5to. rt3off r9tofo r9tok. rt3omk r4t3opp rt6opp. rt3ord r6t7o6s rt1o4v rt2r rt8ra r9tre. rt6red rt3reg rt3rei r4t5reko rt5rel rt5rep r7trib r4t3ris r4t5ros rt3rut r5t6rål rts3ar rt4seg rts5eng rt2si rt4s5ja rt5ske rt3skj rt5s4no rt3s4pe rt4sti rt7s6trek rt4s5tøy rts5unde rt3t4 rtu6en. r7tug rt3und r2t1ut rtu8ve. rty8da. rty8de. rtyr5s rty6ra rt5yt rtæ9ra rt5øl r6t5ås3 ru3and 6ruav ru6avh rub6a ru8bl ru5bo ru4di. rud4r ruds4l ru4ele rue4r rue3s4 ruga8l ruga5t rui3d6 4ruk ruk4su rukt3s ru9la 4ruli 6r7ulk rul8ke. r2ull r7ulv r4um rum3al rum4p9l 5r2unde run5del 6r3under 7r4under. r5unders rund3r rund3s4 run6ge. 4ru2ni run5kr r7uly ru4nøy ru2r ru5ra ru8ran ru8rar ru9rer rur8ta r4us rus2h3 6r7u6sik rus5j rus7lu ru1s4o rus5sel rus4st ru4s4t3r r4uta ru3tal ruta8la. r7utan. r4utbe 4rutd rut8e rute3i ru4tel ru9tene. ru9ter 2rutg r1utk rut9o 6rutr rut4re ru6trø rutto5 2rutv rut5ø ru5va ru4ved ru4veg ru4vei ru4vel ru4vere ru4ves ruvi8 ru6v7is 2r1v rv4a rva7ka rva6la r8v7arb rve3de rve4den r4ve5dr r4vega r4vegi r4vegr r4veim rveis7e6 rve5kl r4vela rvel9le r4v5eng r5ver. rve5re r2ves r2vev rvil9l rville9d rv2j r4vos r4vov r3vr rv2s1 rv5ung rvå7r 4r1w rx1 ry1a4 ry2dr ry7fe ry5fl ry5ke. 2ry1kl ry7le ryl4l5i8s 4r5yndl ry4nes ry5nes. ry4pa. 2ryr ry8re r1yrk ryr4ke. ry9ro ry5rø rys6sal ry5ta ry4tek 1rytm r3ytr r4z ræ7le 8r3æ4re 8r3æ4ren rær5in rær8t ræ8v 2rø. rø8ar 6røb rø4be. rø4dek rød1s 4røep røf5l rø4ke. rø4kero røk3l 4røkn røk5s4 røk7t røk1v 2røl rø6m røm1a røn5nes rønn5s4a rønn5sk røn5sko 5r6øntg rø4pe. røp9l 1rør rør5d6 r6ørende. rø7ret 5rørl rø2r3o rør4sp r8øs. rø3se rø5sla røs5v rø8ta røt9as rø1va rø5vede rø9vers rø1vi r4ø5væ 2r1øy. 4røya røy9ar røy6ed røy6ene røy5es røy4et 5r6øyk 3røyr røy5re røy8senes 6røy4s3k røy4st 2rå. rå7a 4råag 4råb 3rådet rådy9ra rå9ene 2råf 4rå5g4 2råkj råk3re rå2k3u råk1v 4rål råle7s8 rå4let rå5let. rå5lu r5ånd rån6da 2råp 2r1år rårs5k rå5ru rå1s 4råsb 2råse rå5si 2råsj rås4t 6råta råta8ka. rå5tr rå5tu 2saa 5saa. sa4ba. s6abe s8abl sa5bok s3abon sa5by sa3ce sa4dag 4sadam sa4dere 4sadm sa4do 2sadv sae5d 3saen 7saer 5safa 1safe 4s3affæ 5saga sa4ga. sa4gas sa4gat 6sagent 6s5agg 6s5a6gi sag8na sa6go. sa4gog 2s1a2gr sag3s4 sa3ik sa5ir sa1is 5sak. sa2ka 3saka. 4sakad sa5kai 3sakb 3sakd 3s4a3ke 5sakf 1sakh sakh5e 1saki sa4kj sak5kr s4akky 5sakl 5sakm 4sako 3sakp sa1k2r 5s4aks. sak4s3i 4s3aksj sak4sp 5saksr 5saksu 2s1akt sak6ta. 5s4akto s4aku 4sa7kø 1s4al. sa1la 4s5alarm 7sala. 5sa5lat 4salb 1sa3le sa9let 1salg s4alge 4s5algo salg6s5 s6ali sal4mes sa5lo 5sal2s3 sals4a 4salter sa1lu 3salv sal5ved 2saly 1s2am 5sam. sa2ma sa5ma. sam4an7 sa5mas sam5ei sa4mel sa4met 5saml sam4lev 5samm sammen5 sa4my 4s1a2na sa9na. sa7nar sa3nat san6da. san7d8al 5s6ande. sand5r sand5s6lo sand5st san4d5ø 1s2a5ne 4s3a6nek 5sang. 3sange 4s3angr 8s7angst s7anken 2s1anl s5anm san5ne 6sanno sa2no 4s5anor san5os san1s 5s4ans. 4sansa 5s4ansen san7s6k 4s5ans8l 6sansv s8ant. san9te 6santr 4santy 4s1anv 2s1ap sa2po 1s2ar. 1sara 6sarab 2sarb s4ard 9s8are. 4sareal 4sareg sa5rev 3sari sa4ri. sar6ka. 4s3arki 2s1arm sar5me sar8me. s1arr 2s1art sar4ta. sa4ru 4sarv s4ary 1sas 8sasju 2s1a4sp 4s1ass s6ast 4sasty 2sasu 4sasy 1sat sa1ta sa5ten sa3ti 2s1atl 4s3atmos sa1to 4sa5t6r s5atsk 5satt. 4s3atta 6s5atten satte4s 5sau. sau4d sau5di. 5saue 4saug sau6ga s3auge sau6ge. 2s1auk 5saum 3saus 4saut 2s1av s2ava sa4ve. 5s6a5v6in sav5n 3savu 8s9b4 sba4ne. sbi6e sbo4da sbu6et s6bug sbul3 sby8ta 4sca 5s4can 1sce 2scel s4cene s3cer 6s6ch. 8schl. sch8m 6s7cl 4sco. 6scoc 4scos s4cus 8s9d6 sdag4s5 sdam9p sde6le. sdu8en. sdu8er sdø8v 1se 2se1a 3sea. sea4g se3an5d se7ansa sea9re 5se4au3sk 2seb 4sec 4sedag sed5d se3de 5sede. 5sedl 4sedo 2sedr 2sedu 6sedvanle 2sedø 5see. see3d 2seef 2seeg se6e3i se3e4l se5en seer1 5sees 2seev 2sef s1eff 4s1eft 6sega sega6l se2ge se6ges se3gev seg8ga. 9segl. 7seglet 3segm 4s2e7g8r 2seh 2seid sei8dan sei9den sei8e9nes s5ei4et 2seig sei6ga. sei5ge sei5k 3se8il 6seim 2sein se3ind s3eini se6ink se3ins se3int sei5r 3seis 2sej 5sej. 2se5ka 3seke 4seki 2sekj 5sekk sek4kes 2sek4l 4se3kn 2seko se2k1r 4sekra 4sekri 4sekro 3s4eksj 4seksp sek4st sek2t3an sek6te. sekte9ra 3sek5to 4seky 4sekå s2el 2sela se6la. 3selak 5selane 5selar sel5art s3e4las se6l5at sel1d se4le. 4se5led 6selega 4selei 4s3elem 4seleng 4seles 4s3e4lev 5s6elg 4selik 4selil 4selis 4s3e4lit sel6løp 2selo 7selol se3lom 3sels sel4sin 8s5elske sel9s8lag sel4spo sel5t6 2selu se6l7u6r sel4v5ak sel4van selv3e4 sel4ve. selvei4 sel4ver sel8vin 2sely 2selæ 2selø selø8pa. 6selå 2se3ma 3semb 7semd se5me se4mi. semini6 2s1emn sem4na 9semnd 2semo sem5pe 2semå s2en. se5nak 6senau sen9d8a sen6dela 6senden 4sendr s2ene 4sened se3neg 4senem 8senesa 6senese sene8se. s5engas 2s1enh se6nin s3enkj 5sen3n s2ens 4s5ensem sen6s5end sen4sj sen3so 7s6ent sen5ter 8s7en5trep 4senum 4seny 2senæ 6senø 2seo2 7seod se3or 2sep se3pe seperso5 3sept s2er. se3ra 4seram 5seran 4serap 5seras 6serau ser5d s2e5r4e 5sere. 4serea 4sered 4seref 4sereg 4serei 4serek 4serel 4serenn 4serent 4serep 4sereso 4seress 4serest 4seresu 4seret 4serev s1erf s2eri seri6e5ne 4serik 4serkje 5serkr 5sern ser7nev 2se1ro se4rop se4ror se4ros 9s6ert ser4tak ser6tat ser4tr se1ru 4serul se4r3un ser4ved ser4vel 2sery 2se5r6ø 2serå 5ses. ses5ald 5sesals ses5alt 4sesc 2sese se4sene ses5in se3sj 4sesje 4sesjuk ses5kal ses5kar ses5kv ses5lit se3sna 5seso ses3pr ses4s5in se1st 5sest. 5seste. 4sesto ses5un ses1v 2sesy 4sesø ses3å 3s2et. 2se2t6a 3seta. se5tae seta8ka se5tar 6setea 4seteg 4setei 4setek se7tel se4tera se5tero 4setes 2se3ti se8ti. s3e4tik s3e4tis se8t7ja 4setje 5setje. 7setl 5setn 2seto 2set6r s4ets s5etters 2setu 2setv 2sety 6setø 3seum 4seun seure9ne seu2t 2sev seva6ne. s8e5var sev4d sevi4sa s1evn sev4ne. se3vr 3sevåg 2seyn 2seø 2seå 1sé 2séa 6séb 4sée 4séf 4séj 4sék 2sél 4séo 6sép 9sér 4sés 2sév 4s3f sfa4ne. 6sfe sfe6et. sfes5 sfisken8 sflå3 s5fo sfo8ra sforlø9 sfra5s sfri5e6re sfyrs5 5s4fæ sfø9ren sfø5rer sfø5ri 6s9g6 sga4l sga8va sga4ve. sgen9s sge4st sgå4va sgå4ve. s1h 4sh. sha2k s7hat s3hau 6she shea4 s5hei5 7sh6e4rif 8s5hett s4hi. s6hip sh5isk 4shj 6s7hopp 3short 5show 6shs 2shu 4s5hy s5h6ø shø8l shø6va shø6ve. s7hå 1si sial5v6 4sia5m si7ans 4siap 4siav si2bl 3si2da 3si4de. 3si3den si4de5o s4ider si5der. si4dete 2si2do 4s1idr sid8ra 4sidy 4sieg si1el sie4n si5er. si6eren sie4s si3est 6sife si3fl 2sifo si4f3r 2sifu 4sifø 3sig siger4s 4sigi 4s3iglo si5gr 4sih 3sik si3ka si5ke. sik2h7 sik4ka sikk8artet sik4k5el sik4ko siko3 si4kom si4kop si4kos si4kot sikt4s3 s2il 5sil. 3sild sil4del sil4der sil4des sil5j sil2k sil4les 2silø si6mel 4simet 2simp si3mu 4sinde 4s3indu si3nek 2s1inf sing4s5a4 7singu si4ni 4sinj 2sinn 3s4inn. 7s4inna s6inne. 5sinnet s3innh s5innk s3innl 4sinnt si5nob sinsk5e 2s1int 4sinv si6nø 4si5ov si4pa. si8pe. si6re. si7ren si4ri. sir8kl s2is si5sel si4serf sis5e4v si6sin 6sisju si4sk sis5ke si4sn si4s5te si4sti sis3to 4sisy 3s2it si5ta sit8ji si6t7ra si4t5re si4tri sit3s4 sitsva9 sit6term sit4tes si4umf 4siut 5siva si9van si6vek si8vi. si9våt 1sj 2sj. s2ja. 8s5ja9g 7s8jakk. 4sjam s4jan 4sjanl s7jarn 2sj3av 6s7jaz 2sjb 6sjd 5s4je. sje4f3i sje4fla sjef5t sje3g sjek4t5o 3sjel sje4lev 3s2jen. 5s2jene 4s3jent 5s4jer. s2je5s4 5s4jet. sjet4ti 2sjf 2sjg s6jim 2sjk 2sjl 2sjm 2sjn 2sjob 5sjok 4sjom 9sjon sjons7 2sjor 2sjou 2sjp 2sjr 2sjs 2s6jt s6j3t6sj sju1a 6sjub 6s7jug 4s5juks sju8la 4sjun 4sjur 2s7jus 5s2jø sjø3k6 sjø1p sjø9rø sjø1s2 sjø3t8 8sk. 1ska 2ska. 4skab skabe3 s2kad 8skae 4s6kag 2skak 5s4kal8a ska5lar 2skam s4kaml 8s7kamp 4s5kana 4skande 4skane 4skano 6skant 5s6kap. 9s8kapa. 4skapas 5skapen. 6skapit 4skapp 2sk2ar sk5arab sk7arbe 5skard 4s5kark 5s6karp 6skars 4skart 3s8karv 2skas 4skate 8skay 4skb 6skd 2ske s4keda s6kedo s2keh s6kei skei5er. s8k5e4lev s6kelik skel3t s4kelu s3ken. s4kena s6kenav s4keno s5kens 5skept s5ker. s4kero s5kers s2ke1s ske3si skes4m ske5sn s4ketet s3ke4t3j s6kev s2key 2skf 2skh 1ski 5s6ki. 7skia 4skid 5skie 5skif 5s4kik s6kill 5s4kilt ski6net ski4nin 5sk8inns5 4skino6 5skiol 5skip 2skir s4kire 6s5kirk sk5irs s6kis. 7skiss 4s5kist 5s2kiv s6kje. 5skjema 6skjemas 5s6kjer4m3 3skjer5m4e 7skjers 3skjor 4s5kjærl 5skjøn 6skjøp skjø5res 2sk1k4 2s1k2l 6skla sk5lak s6k5lan s5klas sk9leg s6klei sk3lek 7s8klero sk5ling sk5lit s4k5luf s2klyd 2skm 2skn s1knu 4skoa 7skodd 4skof 3s2kog 2s3koi 1skol 7s4kola 3skole 4s3koll 4skom s6koma s5k6ome 6s1kon 4skoo sk5ord s6korpi s7kors s8korst 4skort 2skos s2kot 3skott sk8ra s4k9ra. 5s4kral s4krat s2k7re. 4s3kref 6skreg 5s8krek 4s3kret 5skrevn 3skrib 3skrif 4skrig 3skrik 3skrip 4skrite 3skriv 5s4krog s3kron 4s3krop sk6rud skru3s6 6skryss 1s2krå 2sk1s2 2sk3t4 5skud 1s4kue sku4end sku4er skue5re 1skuf 5skulan 5skular 3skule 6s5kulis 4skull s4kulp 4skult skum3s 2skun s6k5underv 4skup 8s5kurs 8skurv 2skv sk5va. 3skvad sk3vas s6kven sk3ver sk5vit 3skvu 1sky s6kya s6kye 4skyr sky3re 4skys 6s6kyss 5s6kysk 3skyt 6skæ 6skø. 6s5køa 4skøe 1skå skå5re 6skåt sl4 sla8da s3lade sla5ge sla8ge. sla5ke s5laks 3slakt 3slal 4s3land 4s5langs slap5pe s5laran s5lare 4s5last s1lat sla4te. 4s1lau 8s5laus sla1v 3slave sla4vin 2sle. s8leda 4slega s4legi s4legn s6legr 6slei slei5er. s4leiv 8s5leke s5lekk s2lel s4leme 4sle7ne s6lener s6len6t3 2sler 8s5les s6lesj s4leso s6lest s4leta s5lev s4leva 4sley s5lia 2slid sli4en. 6slig sli5ke s4likk 2slin 8s3linj slin6t5 3slip 5s4lit. 3s4lite 4s5liv slob5b slott4 s6lott. 7slottet 1slu 8slu7a 2slu2e slu5es 6sluf 4slug sluk3s6 slum4p5 slum5p6e s3lund s5luns s6lup slu7sa s4lut s1ly sly8et. 1s4lyn 4s5lys sly8t 6s7lær slæ6rari 2sløn 8s5løp slø4pa. s6lør 2sløs slø8s5a 3s4løsi slø5va slø5ve slø5vi 5sløyd sløye7 9s4lå. s4låe s1lån slå5ner 1slåt s1m sma6d 3smak. 5s4maken sma9let 8sman s4med. s4mede 6s5medi s4medk smeg5 4smei smek7l s4mekt 8s5meld 3s4mell 5s4melt 2s5men 3s4mert 6smes s6mesi s6mia s4mie smi4ene s4mig s6mil. smi7la s6mile smini6 s2mit smo7a smo8de. s2mok 6smot 3smug 6s5mugg smul2 s6mula s4muld s6mule 5smurt 1s2my4k 6smøn 1s2mør smør3s 4smøt 5små. små5r s8mått s1n 8sna. s4nab 7snak 4s3nas 6s3nat 4snav 4sne. 4sneb 4sned 5s8nedd s6nee s4neg 3snei snei5er sne4kri s7nekt s4nel 2snem 4sner 6snes sne9sa snes9v 4snet s6nif sni6gl s2nik snik5ko 3s2nil 6s3nin 3s2nip snir4 5s2nit 2s3niv s8no. s6noe s5nord 6s7not 5s6nud s3num s4nur 7snut 8snyh 2snæ snæ4re. 5s6nø. snø5d4r 5snøe 1s2nør snø1s snø5vi so3al so8ar 4soav 2s1ob so2bl 1sod so4da. 5soe sofa1 so4fag so4fas 6s5off 6s5ofre soft1 so2ga so8gi so7gl sog6nem 6soh 5s4oi4 so5id 5sokn 4soks sok4se. 7sol. so4la. sol5av 1sold so4le. solei5er so4lene sol5f6 1so7li 8s7olj so2lo so8lo. sol3s2 sol5t4 so4lum so4lø 3som. so6mend s3omf 4s3omfa 4s1omg 5somh 2s1omk 4soml 1som5m sommar5a 3s6omme somme6r5e6 2somr 7somren 5somrer 6s3områ s1oms som5sl s4omst som5sti 4somsy 1s2omt 5somt. 6somta 3son so4na. son7da 7s6one so8nea song3s4 so4n3o sons4k son5st so2nu so4ny. 2s1o2p so7pak so9par so7pet 3sopp. 5soppa 3soppe sop4pi 8sopple so3pr 1sor. 7sora so3ran 5sorb 4s1ord sor4da 1so1re so4rek 7sorga. sor4gl so2ri 4s3orie 7soris so5riu 4sorke sor5n 3sor5s 7s8ort 1sos 4s5osc so8se. 6sosf 4sosj so4sl so5te so8te. so4tra sots4 sot5te sot4ti 4sou 2sov so3va so4ve. so5ven sover5e sove3s4 5sovet 3sovj sp2 4sp. spa5g6h 7spak. 7spaka 5spake 8spakk s2pal s3pall 5spalt 3s4pann 3spari 4spas 5s6paser 4spe. spe4a 8speda spe9dé s4pee 1s2pei s2pel spe4leg spe4les 5spelet 8s7peng 3s4penn s4pent s5pep spe4r5and 6speri 4sperl s4perr s3pers 3spesi s4pest s9pet. 1spi 6s5pilo 4sping s2pio 2spip spi7res spi7ri spi7ro 5s6piss 2s3piz 2s1pl 8s9plant sp9lar 4sple s4plin 3split sp6o 2spoe spo6et 2spol 5s6pole 6s7poli s4pora s4pore 5s4pors sport6s5 3sporv 2s5pos 4spot s3pote spo5v 9sprag 5spran 6s3preg 5sprei 8s7preik s4prek spre5ke s3prem 5s4pren 6s5pres 5s4pret s6print s5prio 8sprinsi 8s3pris 6s5prob s3prod 4sprof 5s6prog 6s7progn 6s7progr 5s6pross 1spru s4pry 3sprøy 5språ 2s3ps 8spub 2spul 3s2pyd 5s2pø 6s3pøl sp5øy 9spå. 5spåd 8s9r sre8ka sre8ke. sri8e9 sri8ka sri8ma sri4ve. s5ro sro4e sro6pa sro6sa sro6se. sro2t sro9te srot5o srø1v srå4da. sråde9r srå6ders srå8ma 4s1s s7sabel s7sabl s6sae s4saj ssa8ke. ssa6la. ss5all ssa4me. ss5amp s5sane s7s8ar. ssari8e9n s7s6arm s4sarr ssar8ve. ss6as ssau8sa ssau6se. s6seet s2seg sse5ge ss5egg ss4el sse5li ssel5s ss9elv. ssel5v6å s2sem s5sen. sse8na. ss5enden s5sene s4seni ssen6ke. s4senu s6senå s5ser. s6serab s6serat sse7sk s4seski s4sest s7set. s9sets s2seu s4sey s2sh ssi4a ssi7e6rer s4siff s6silo s8s9ime s6s3ind ss5init ss3inj ss3inn s4s3ins s5sis4 ssis5m ssi6v7end s5s6jarg ss4kape ss3kar sska8ra ss3kn ss3kof s7skog s4skor ss6ky. ss4kye ss4kå ss5kål s7skåp s2sl s8slip ss1lo ss5ly s2sm ss6nar ss2no ss4nø s4s5nød ss5nøk s2sof s4sok6 sso5lo s2som ss4oma sso3ra s4sorga ss3ove ss6pil ss4por ss9ri ss2t s5stad ss4ted ss3tek sstel6li ss5tep ss7tilp s7stip sst6r ss5tren ss4trå ss3tus ss3t4v s2s3ul s3sur ssva7ra ss1ve ss8vek ssy6na ssy5r ss7øye s6så 6st. 2s1ta. stabs3 3s6t2ad stad3a sta6d3o s5tafa 3stafe sta5fl st3aft sta7ge 4stah sta6ka. 5stakk 4stakl 6stal. 6sta4la sta5lak st5ald 4stale sta4le. 5s6tali 5stalt s3tame 3stamm sta5na. 3s4tand 6stande. st8ane s4tanf s4tang stang5s6 st3anl sta8n9o s6t5antr st3anv 4stao 2stap s7tapa s4tapp s8tapå s3tari 1stas 3s8tasj 4s5tast 1stat 4stato sta5top sta3tu 3stave 2s4t5b st7c 2std 2s3te. 2stea 2steb 3sted. s4teda 5stedt s2tee ste4en 2s4tef 3s6teg. stega6l s4tege 3stegh 4s5tegn s4tegr 4stegsp 5stegspl ste4her s2t4ei stei5er 4steikn ste6in6s5 3s4tek. 4s4teka s6teke ste4ket s4teki 4s5tekn 4steko v4s5tekst s4tekt s8te5kv 4stela ste5le. s5teleg ste5lev s5telig 5stemd 3s4temm 5stemn 4stemø sten5a ste4nar 5s4tenen s4tener 4ste5nes 3s6teng s4teni 6stenk 4steno stens5l 4steo s5teol 2step step7per st8er. 8s5tera s4teram s6terest s4terev s7t6erf s4terid ste7ris s6teri6v 4s3term 6sterr ste5run ster8ø 2stes s4tese ste7sle 4stet s4teta ste7t6r s6tetø 4steve 4stevi 6stevl 5stevn 6steå 2s4t5f 2stg stga6ve. stgå8va stgå8ve. 2s6t5h st5he 2s3tia 4stib s5tibe s9tibl 3stic s6tick 6s7tid s6tidel sti5en s2tif 3stift s4tigen 7s6tigi st9i8gj 3stign s5tij 6s5tika 4s5tike s4tikl 3s6til. 5s4tila sti4lag 4stild 3stile stile9ge s6tilk 6stiln s4tilo 6s5tils 5s4tilt. 6s5tilta 5stilte 4stime sti7mer 6stimé 3s6timu s6t3ind s6tini 4s6tinn s6tinst s6tint 1s2tip 4s3tipp 6stips 5stir 2stis 6s7tisk 4stitt 4stiå s4tja 5stjel 8s7tjene s6t5jent 3stjer 4stju 2stk 2stl 2stm 2st5n2 s2to. 1stof 2s3tog 4stoks 6stokt 3stoli 4stolj s5toll 4stom s9tomm st3oms 6s5tomt 4stoni st3ope st5oppl 6s8t5ord sto4ret s6torm stor3o 4stors st5o4s s1tot sto4t5r 5s6tore. st5ou 5stova 2stp 8str. st3ra. 4s5trad s8traff 6strafi 6strail st3ral st4ran stra8na. 5strand 4strane 6strans 6strap 4strar st7ras. st7rast. 5s4traum s4tre3a s4tred 7s6treik st5reis 7strek. st5rekl strek4sa8 6streni st5rer. 6strers 6strh 9stria 9s8trid 5strie st5rige st3rin 3s4t6rip 5stri3s 6stroe s5t4rog 5s4trok st3rol 6s4t5rom st3ron st7rop. st7ro6pa s6trope s6t7rug 9s6truk st5rum. 2stry 6stryg s7trykt st5ryt 4s3træ 1s2trø 6s5trøb s5trøkk st6røm 4strør 4strøs st5røse s5trøst 4strøy 6stråd 2st5s6 stsa6me. stsy8na 4st7t6 stta6le. st3t4r s4tua 1s2tub 3s4tud s2tue stu4el stu4er stue5re 3s4tum 6s3tung 6stunn 3s8tunt 6s5tur 2s4tut 2stv s3t4ved 1sty 2stya 2styd 3s4tyk sty6l 2s5tyn 2s7typ 3s4tyr styrs3 6stysk 4styv sty5ve 1stø 2støk 5støl 6støm 5støp 6størk 5støt stø7va. stø5var stø3ve stø5vi st8øy 1stå 5s4tåe stå5k 4su. 1su4a su7a8l 1su2b sub7l sub3o 5subs s3ubå 1sue su8er su2f 5s2ug su6ga. su4ge. sug3g su2h 3sui6 su3is5 suit5a su2k 4s1uke 3suk5k suk3r 1suk5s su4le. 3s4ulf su4lik sul4t5r s1ulu 2suly sulæ5 3s2um 4s3umid su2mo sums6 5sund. 8s5under 5sundet 5s4undi sun6d7r 9sunds sun4ge. 6s7u2ni su4o 3s2up su4pe. super3 supi9 su8p4r su8pre sur5d su4re. 4s3u4rei 1surf su4rie su4riu surs5k sur4sp sur4sti 1sus su3san su4se. su6s5es 4susi su4sik sus3p sus3s su2sy 2s1u4t1 sut6ra. sut8reg 7suv 8s5u6vi sv2 6sv. sva5a svai5 5svak. 3svake 6svaks sva4la sva4les 6svalet 5s6vali 7s6vam s4var. s4varet s3varm 3s4vart 6s1vas 6s1veg sve6g7i s5veie 3s4veis s5veka 6s5veks 5s4vens sverd5s4 sve4re sve8res 3s4verg 5s4verj s5verk sver4ki s4verm 6s7verv 7s4vev s4vie svi6e3l 8svift 4svig svi5ke. 6svikg 4sviks. 3svikt 4s5vikti 4svil s6vindel svi4nes sving5s4 8s7vink ll6svint 4svir 6s7virk2 2svis svi4sa. svi4se svi5sen svi5ser s8viv svi9ve 4svol 5s2vor svor7t s3vr 3svul 5s6vulm s3vy4 svye7ne 1s2vø 4svæs 2s7vå 1sy sy4c sy4de. sy5den 5sye sy2er sy8ka sy4ker sy5kere 2syko sy6kog 7s4ym sy7me s2yn 4s5yndl synk4 sy6n5o6 syn6sk syn3te sy4ra sy5rar s6yre sy4re. 2s1yrk syr4ka syr4ke. 3sy1s sy4se sy2sl sy6s7t sys4tr 2sy2t sy5ten sy5t6h 9sytt sy2vå s4z sz3c4z 6szt. 1sæ sæ2l 8s3æ4re 8s3æ4ren sæ4r1i særle9 sær5s8 7s6æ5te4 4sætt 1sø 4sø. sø2d s1øde 4søf søg4 4søj 9søk. 3s6øke 5søkj 5søkk søk7kj 3s6økna 2søko søk4sk søk6s3e6 5s6øksm søk4ta 3s4øl sø4la. sø4le. sø5let 3s2øm sø6må 3sønn s1øns s4øp sø4ras sø4re. sø4r5end søren6de. sø8ret sør9ett 7sørl sør3s sør5ø 3s2øs 4søs. sø8sa 7søt sø7tast sø7tel sø5tes 2søv s1øve 3søvn 2s5øy. 4s3øya søy8de. 6s5øyd 8søye 3søyl 6s5øy4n søy2r 2s7øys 5såg s3å2ke 5s4ål så4le. 6s1ån sån4da sån6de. så2p 9såpa så5pet 6s1åpn såp9u så2r så6ra sår9ast. så4re. sår3sk sår7ø så2s s7åsa s4åsb s5åse sås5k sås5t 9såv såva7 ta1a 4tabo tab2r tab2s ta4bu. 4tabø ta1c 4tad ta2da ta8d3ei ta6d3e4t tad5spa tad7s6v ta6du t8ae 6taei 4taek 4tael 1taen 4taend 4taenh ta6es 2ta5fe taf7f6 5tafis 4tafl 1tage 4tagj 8tah ta7is 1tak. ta4ka. 4takau ta7ken ta5ker tak7kel tak5k4l ta8k9la 2takr tak4sal tak6se. tak4si 4t3aksj 5takst tak4tal 4taktig tak4to t5aktø ta1ku tak3v 1tal. ta9lam ta3lan tal5ang ta7las 3tale ta4lei tal5eie ta4lek ta5ler. tale7s6 1talg tal6ge. 7talj talj5es tal4led tal4leg 8t7allerg tall7es tal8lign tall6s7a tal4ly tal3op 6talter t5altern ta6l9u ta6lå 2tamb tamba6ne. t3ambi t4ame 4tamet tam4i 2ta3m4o tam5v t6an. ta2na tan5ab 4t3anal ta3nar ta5nas ta5nat t5andak 5t6ande. t7andel. t5andele tand5r tandø4 tandør5e 1tane ta4nel ta5nem 4tanett t3anfa tanfø6 6tangf 6t3angr 1tank 2tanl t3anle 2t1anm 3tannl t5anno tanns4 tan6sk tans5ka t5an5sl 4t5anstr 4tansv 8tantil tan4tra 6t7antre t3anve 2ta3o4 5tap. ta4pa. 1tape ta4pe. 3tapi 4tapl 4tappa 5tappi 1t4ar. t6ara ta4r3ak 4taram ta6rare 2tarb 3tarbo 5tarbø 4t9arena 6t7ark. tar8ka. 4t5arke 4t3arki 4tarra tar9si tar7sp tars6v 4tart tart7est t5artik tar7tit tar4t3r ta6r5å8k 4tasa ta3se 6t9asf t3a4sia tasi3e ta4sif ta4sil ta4si5s4 tas4p tas5s4 tas8tas 6ta7sto ta7str 4tasu ta1ta ta7tes tate8se. tat5e4v tati1 tat3op tat2s1 tat3te t3attr 1tau 9tau. 7taue 4t5aug 2t1a4uk 4taun tau4ne. tau4sk 2taut 2tav 6tavin 3tavl 4tavli ta9xy 6t1b2 tba3d tba2n t6be. tbe6te. tbe6t7r tbe6t8ra tbo6da tbu8da tby3k tby4s tby7te 2tc t1ce tcen4 tch5e t5co 2t3d tdy5pe 1te 4tead 4te3ag 2teak 2te9a8l tea6m 2tea2n 2teap 2tear te5arb tea4s 3teatr 4teatt 2teau 2teav 4teb t5ebb tebu8da 4tecel te1co 2ted 6t5eddi 3tede. 4tedeb te7def 4tedek 4tedel 4tedem te5den 4tedi 5tedil 4tedo tedo6en. tedo4er tedo8et. te4dor ted4sk ted4sl 6tedu 4tedy tedyr9k 4tedø te3e4 2tef 8tefa 4tefi 4tefl 4tefo tefo8r t3efte 3tefø 2tega 5tegat 4t3egd te7gea te9gee 4tegg teg8ga. 2tegh te4gim 2tegj 2tegl te3gla te9g8li 8tegs. 6tegspl 6tegsv 2tegu tegvi8 2tegå 5tegås 4teh 5tei. 2tei4d t3eie t3eiga tei6ga. t7ei6ge. 6teigr 3teikn tei5le te1im 6teinf te4inne te5inte te5i4s 6teiso 2tej te7ken te5ker 4tekil 2tekj 5tek1k 2tekl te5k4la tek6lede. tek4li 4teknu 2teko 2tekr te7kra te6k5ru 9teks. 4t3eksa t3ekse 4teksp t4ek8st tek8t9r tekt4s tek6ty 2teku te2k3v 4teky 2tekø 4tekå 2te3la tel6ak 5te4l5ar 3telav 8te4le. 4teled 4telei 4telek 4teleme te4lene 6teler te4les te5lesk 4te4lev te6leva 4telid 4telik 4telil 4telin te4lir 4telis 4telit 4teliv tel5lef tel4lei tel4lev tel8lign tel4lo 2telo tel3se telses5 t3elsk tel7s6v 5teltet 2te1lu 7telut 2tely 6telæ 2telø telø8pa. 2telå 2tem 3temae 6teman te4mans t5emba 6temenn 5temik tem9ma 6temn tem5ne. tem5ord tem5pe tempe8l7 3tempo tem3s 4temø 3ten. te5nab te4n5al ten8am te4nan te4nat ten5at. 6t7enc 6t5en6den 4tendr 4tened te5neg 6tenem 6tenerg 5tenes 4tenet 2teng 7tengon t5e4nig 7tenik 5tenis 4teniv ten9no te4nom te5nor 6tenorm 4tenot te6nov 6tenó ten3sa ten5sko ten6slu ten3so tens5v ten4t5in tentle8ge. 4tenum 4teny 4tenæ 2tenø ten5øks 2teom 5teon 4teop te6ora te6ori 4teord 2teov 2tep te3pa 4tepak tepa9ra 4tepas 4te5pe 7tepee 9tepé tep6pere t5e6ple 4tepr 4terac te7rakk 6teramm ter7apa 4terapp te4rare 6terasa 4terase 7terast terba6ne. t6er5d 4tered 4teref 4tereg 4tereis te4rel 8terem. 6teremm te4r5eng teren6ga 6terenn 4terep te4rerk ter5esti 4terett 6terevo 3ter5g 3terh te4rig 4terik 4terisi te4riv ter5j 4terk. 4terke 4terkh 7terkr 6terks4 4terkt terla6ga terle7ge terle6ve. ter8ma. ter3no tern5s te5ro. tero6e te3rof 4teroll 4terom 5teromr 4te3ros 4te3rot tero6v ter5r 5ters. 5tersjøo ters4kl ter7s6ko ters4l ters4h ter3s4m ters6ne ter5sv tersø6ke. 3ter3t ter9to ter9ul 8terum ter7v tervi6se 2tery ter5ør 4terøt te4r3øv 4teråd te4r3ås t4es 5tes. 2tesa 5tesar te7sen 2te1sh 4tesid 4tesik 6te3sin 4tesit 4tesj 6tesjef 4te1sk t9es6ka. 6teski te5sko 2te1s2m 7tesmåe 2te1sn 2te3so 6tesp 5tesr 3tess 5test. 4testaf tes5tas 4testat 5tes7te. 4te5stei te5s6tiv 5testid tes4tik 4te5s4til 4te3sto 4te3str 4testy 4testø 2tesu 4te1sv tes8væ 2tesy 2te3sø te7så te8sår teså9re 3tet. teta6ka teta6le. te4tap te3te 5tete. tete4e 4teteg 4tetei 4tetek 4tetem 2teti 3tetik 3tetis 2tetj 2teto 2t8et2r 3tet2s tet5ti tett3s 2tetu 5tetu. 2tetv 2tety te2t3å 2teu teu8k t1eur 3teus 2tev t6eva te4valu 3tevl tevo6r te3vr 2tey6 2teø 2teå 4téa 2téb 2téf 2téh 2téi 4téle 2tém 2tése 4tést 6t1f tfe6e tfe4l tflå3 t7fo 2t3g2 t4ga. tge4a tgei5 t4gi. tgi5ros tgrei9e t4gå. 2t1h t4hap t4hea3 thei5m t6hesi tho7li tho3re 3thr thu5le thu6s thy5r 1ti 2tiad ti3ag 2ti1ak 4ti3all ti5als 2tia2m 2ti1ap ti3asp 4tiau 2tiav 2tib 2tick 3tid ti2da 4tidan tid7d 6t3idee 4ti5dem 4t7idé 4tidis 4tido 4tidr 2tidu tidvi4 6tidy 4tidø ti1e2 2tief 2tiei 2tiem 4tienh tie5ra 4tierf 4tierk ti4ert ties3 ti3esk ti3et 4tieta 4tiett 2tifa tifa8ne. 2tife 4tifl 2tifo 2ti5f6r t8ifrå 4tift tif5te 2tifu 4tifø ti9ge. 4tigj 2tign 3tigno ti6gun 2tih 2tii 2tij ti3ka. 6tikarr ti5ke 4tiket 4ti5ki 6tikj tik4kj 2ti3ko 2ti1k2r ti3ku 6tikular 6tikult 6tiky 4tikø t4il tila6ga til1d4 3tilde 2tile ti3lei 3tilfe 3tilg til3id 4tilke 3tilkn 4tille. 4tillh 4tillin tillø7 4tilm 7tilnæ 3tilst til3t4 4tilte 2tilu 2tilø ti7mab 5timat ti4me. 5timedie ti4mera 5timeri 2timl 4timo7 4tim6o8r 2t1imp tim7s 2timu 2timy 2timø ti6nab tin5art 4tinaz 2tind t3indu ti4nem 4t1inf tin5ge4s 6ti4nit 6t5inj 2tink 7tinks 4t1inn 6t5inne ti5no tinsk5 4tinsp 4t3inst 4t1int 2tinv 4tinva 4tiny 9tiol 6ti7om tion9s6 4tiop ti1or ti1ov ti3pa ti6pla 4tipr 3tips 2tir tira4t ti4ref ti1ro 6tisak 4tisam ti5s6an ti3se 4tis4ei 4tisek 4tisel 4tisem 4tisep tise8ra. 4tisers 6tisig 4tisio 4tisje 4tisju tis4ka 4tiskan 4tiskil tis5kok 6tisku tis5l 4tisn 4tiso 6tisprå 4tistat tis4ti. tis4til ti5stre 4tisty 4tistø ti8støy 2tisy 2tit ti7ta ti8tar ti3te ti1tj 3titl tit4r tit3s 3titt 4tiub 2tiut ti4v5and tiva9re ti4v5art tiv6is 2tivo tiv5si tiv5sk 4tiy ti5ær. ti7ære ti9ært. ti1ø8 2tiå 6t3jag 2t1jak t5jarn 2t1je. 2t1jeg 2tjel 1tjen tjen6st 6tjep 2tjer t5jev 2t1ji 6t5jing 2tjo t5jord 2tjub tju4e 2tjun 6tjur 3t8juv tjæ4res 2tjø 4tjå 4t3k2 t6kag tka8ra. tkly9 tku6le. tkå8pa 6t3l6 tla4ga tla8te. tle6da. t4ledr t6lef tlei5er. tle8se. tle5ti tligh6 tlight5 tli6nes tli4te. tlu4e t6l7ut tlø4pa. tl7øy. tlå3ne tlå7r 2t1m tma3d tma8ge. t6maku t2mam t2meg4 tme3in t2mek tmini6 tmin5s6 t2mos tmå4la. 8t1n t3na t6nee t4neli t7nelig tne4rek tne4r5ø tne8se. t4nesk t4nest t5ni t8no. tn5sk tnæ6re 7toan 7toar. toa6t 6toau 2toav tobe6r t3o2bl 6tobs 4toc to5da to9de. to4dera 3todo 1toe 2toek 6toel toe4t 2tof 6toff. t3ofre to5fri to2g3at to7gen 4togg to6gl 6tograv to4gre tog3st to2gu 2toh toil3 2to1in 4toj t6ok 1to3ke to3ki 2tokj 2tokk tokk5end to3kl 5toksi 5tokt 2toku to4l5arm 5tolat to5lel tolele7 5tolera toli8ne. 2tolj 1to4l3k 7tolki tol4lab tol4lag tol6leg tol6lett 3tolo tol5tr 4tolå to9ma. 2tomb to5mene. 2tomf 4tomg to3mi to5mise to7mist 4tomk tomlø8pa t8omm 2tomr 4tom1s 5toms. 1ton to5na to4ned to4nel tong5s4 to8nib 2tono ton3sa ton5s4l ton5sp 2tonu to4ny. 2to3o 4to1pl 4toppd 6toppg 6t5opple 4t5opplæ top4po 4toppt 4topr to1ra to4rak tor5alt tor5ang to4r5ant to4r3as 4tord tor8da. to1re 6toreg to4rek tor7eks to7rem 6torent 5torer tore4t tor5ete 4torga tor5int tor7k8u tor7me torm5s tor5na tors4i tor5t8 torvei5 to4rø 4torå to1s 4tosa 4to3se to2sh 6tosj tos5ke to8sku 4tos2p 2tosy 4tota to5te to8ti. to5to. to4tor 6toty 2tov to1va to7veg to5verd tove7re t5overs 5tow 4toø 6t3p2 t7pa tpi7ne tpi7pi tpo4et t4påk tr4 8tr. 6t9rabat 3trafi tra7in tra8ka. trak7to tra7mu t5rane 3t6rans tran7ske 5trap tra3pe tra5po tra5r4 5trase tra5se. tra5ses 5trasé t2rat t5rate. 3trav tre4al. tre1c 4t3reds t3refu 6t1reg t5regi 4trei tre5int 6trek. 4treke 4trekl 4t3rekor 4trela 3t6re7na tre5ne t6reng 3t6reni 4t3renn tren6sk t7repe t5repres t2rer t4rero t4re3ru 2tres 6tresi tre5sko tres4l 3tresn t5resu t1ret t4reta t6reto t5retted 5t6rettel 4trev tre9va t6rib 4t1ric 4t4rid tri7ei t5rig. t4rikk t8rina t4ri5ne 4t5ring 3trinn 7t6rio 6t5risk t4rist tri5to t4riu t2riv tri7vi 5trix 3t4ro. 5troa tro9ar 3troe t4rof tro5g 3t2roi tro3in t4rok t2rol 4t3rom. t6rond 5t4rong tro5per t2ros 5t6rosk tros3l tro1v t8ru. t8rua 7trua. 5trued 5truet 3trug tru1i 5trukn t3rull 2t1run9 t3rund 4trupe tru5sa. 7t6rusk 2trut t5ruta t3rute t3ruti tru5v try3dr 3t2ryg tryg5ge 7trykk. 5trykke try7pe. t6ræ trø8a t5rød. t5rødt 4trøk 4trøm 2trør 5trøt 5trøya 5trøye5 trøy9et 4trøyr 6trøys 5trøyt trå8da. 4trådet trå4dr t6råkl t3råst 4ts 6ts. t5sa. t5sab tsa2g tsak6se. ts1an ts4ang tsau6r t1sc t6scha t6sch5k t5se. tse6d tse4er ts5ege tsei4d ts3eig ts2em t3sen. ts4ende t5sendi tsen8ka tsen6ke. t5sens t4sentu t5ser. t3seri t4s3erk tser3o t5s6ers. ts4es t4sesk ts5e6st ts3eta tse4te. ts1e4v ts3f ts4fæ t7s8hop ts7ill ts3inn t4s3ins t5sir ts5jeg tsje5t6sj ts5jor 5t6sjov. t7sjuk t4sjur t5skad t4skan ts6kis t4s5kjed ts6kjø t5skol t6skoll t7skot ts5kren tsk5ru ts5krø ts1k6v ts9kvi ts6ky. t6s7kyn ts1l t7s6lo. t3s4lot ts2lu ts5lø t5smit tsmå6la. ts1o t4s5o4d t5sok t5somst t5spek t3spel ts2pi t2s3pike t3s4por ts5s4 t1st4 t2s3tabb t5stad ts3tak t4s3tal t5stand t5stang t5star t5stat ts6tau t3sted t4steg t4stek ts6tig ts4tik t4stilk t4stin t4stit t2s1tj t8stolk ts5ton ts5tors ts5tree t4s5tren t4s5tro ts3try ts6trål t5stu ts3tv t4sua tsu7ge tsu4l ts3uli ts3u4r ts5usi ts1v t3svik ts1w t5syk ts5yt tsø8ka ts5økni ts5øv tsøy8er ts1å tsåt8 8tt t1ta t3ta. t2tab ttaba6ne. tt9abo tt5adr t2taf tta9fr tt3aft tta4la. t6t3ald tta7lel ttall4 t4t3ana t5t6ane t4t3ang t4tans t4tanv tt5appe t7t8ar. ttare6 t4tarr tt5ar5t tt6arta t4tase t4tasj t4tav tt3avi tt5avk tt5avr t3te. t2tea t3ted t4teda t5tede. t8tedr t2tee t4tef tt3eff t2teg t2tei tt7eid tte3in t2tek tte7kv tt7elev tteli6te. t4tem tte4ma. tt5emn ttem8na ttem6ne. t3ten t5ten. t4tena t5tene. t4teni tten5s t9tens. t4t5ense t2teo t5ter. t4terei tter5un tte4r5ø t4terå t4tese t4tesi ttes6ke. t4tesl t5tet. t4teta t4tete t1té t8th tt5he tti5a t4tidel tti3e t2tif t5tig tti4g5j tt3ind t5tine t7tiné t5ting t4tini t4t3ins t4tisj t6tisti t7tite ttle6de. ttlin5 t1to. t5tofr tt5om. t7tomr t2ton tton6na tt3opp t5tora tt3ord tto5re tt5o4ri tt3orm tto5u ttpar4 tt6pås tt9raka tt5rake tt3ram tt3rap tt7rat t4t3rep tt3res tt3rev tt5rom t5trop t5try t2t1rø t6ts tt7saf tts3ar tts5kan tts5kj ttsla6ga tt3sok tt5still tts5top tts5tra tts5tøy tt3ugl t1tum tt1un ttun6ge. tt1ut tt8ute ttva8la tt5ve tt6vun t5tw t5ty. tty8e tt1y6t ttæ6 tt3ø4l t1tør tt3øv tt7øy6r tt1å4 5tual 4tu4av tuba3 tu4be. tu6bå tu6dem 5tuel tu4er. tug8la tu1in tu2k t5uka t1uke 7tukt 3tula 1tule tul5les tum5m tum4s 3tun. 4tund 3tune tun5gesv 6tungd tung9s 6t5uni tu4nio 5t4un5n 9tuns 3t2ur tur7ant tu4ras 4tu4rei tu4rek turi4 tu4rin tur1o tur3p tur5s4 tur3uk tu5rus tur1ø 1tus. tu1sa 3tusb 3tusf tu4sin tu4sm tus5o tus7s6t tust6r tus5u 2tutg t5utj t5utk t1utr tut8t7rå tut6tenk tut5tor tutt5ov tu8va. 2t1v tv4a tva8k tva6ne. 3tvang t4v5anl 8t9var tve5del 3tveit 4t7ver tvert5 t2vet 3tvet. 7tvets t5vik tvi8ka. t8viklas 5t4vil. tvi5la 5t4vile t4vi5l4i t6ving tvi4sa. tvi4se. 6t7vo 3tvung 6tw twa2 1tyd tyg9gel tyg5ges 6tyh tykk5s6 ty4med 1tyn ty4ne. 6t5yo 1typ 5t6ype ty4pere ty4pet ty4rak 5tyrann 6tyreg ty4rep tyre5st ty4ri. tyri9e ty4ri5s ty2s 3tysk tys3t 2ty2t ty8ta t3ytel ty5ten ty4ve. 2tz t5za 5t6zel 6t6z5l 1tæ tæ5l tær6ene tæ4renh tær4er tær4et tær5s4 tøf3l 2t1øk tø9ket tøk8ta 4tøl t7ø4let 5t4øm5 tøn5nes 4tøp tøp5se t2ør tø4r3as tør3in tørk4 7tørk. 9tørka 5tørke tør5ne tørs7ta. tørs7ter tørs5tin tør3t tøs4 tø8sa 4tøt tøt5a tø5ta. tø3te tøtt6 2tøv tøv6d tø7vele t4øy tøy5a t9øyem tøy5r tøy5te tå4en. tå2k tå5ket. tå5ki tåk6r tå2l3a tå9la. tå4leg tå7lel tål5s4 tån8da tån6de. tå3ne 4tåp tå6pe. t1åpn tå6re. tå4rep t3året 4t5åri 3t8årn 2t1års1 tå3s tå2t t3åtak tå7ten ua7g u1ak uak3s u1al. ua7la ual5l ual3o ual3u u3a4ne. u5anl u3ans u1ar. uar5d u4arr u5ars. uash3 ua3t u5au8 u1av 1uavh u4ba. ub7alt ub7ant ub5ark ub4bo ub2br ub4bu ubel5s ub5h ubi6s ubis7t ub1j ub7lande. uble3s4 u1b4r ub5rin 2ubs ubu8e u4bå uch5en uch5er u1ci uck1 ucu5 2ud u3da. u7das. ud4dag ud2dr udd4s5e ud2då udea9 ude8are u2deb udeie5 udei5er u2dek ude3lu u2dep u6dero u2des u3d2et u6d5ett u5devo udia2 udi3an udi4en udio5 ud7ir ud7ji ud5leg udle6ge. u7dob u6doe u2dot udover7 ud1r udse4 ud3t ud5v 3u4dy udy9ra ud5å4s ue5a8 u5ei u1el uem8na u1e2n uend5r u7ene u8e7net uensar4 ue7o u1er u5e6rast ue4re. ue5ren ue4rer ue4res ue5ri uerle7 u2erm ue4se ue2si ue4skj ues6n u1et uet8r ueul8 u4fe. u6feb ufe6e uf1f4 uf4f5erm ufi9l ufi5ne u1fl u6foa ufor3s u1fr uft3a uf4tan uft5s4la uft3sp ufø6 u5gag u5gar u6g5av ugby7 u2gem u5gen u3ger u4gerø u2ge5s4 u9get. u8geta u2gev ugg3s4 u5gis u4gl ug1la u5g4lad ug9lar. ug4le. ug9ler. ugle7s ug5ly ug7na ug7ne. ugo1 u4go. ug4re ugrei9er u4grø ug5s4i ugs4k ug7so ug3s4pr ug5s4va7 uguay7ans ug5øyn u1h 3uhel ui8a u4i6c ui2d uid5el uid5en. uid5ens uid5er uid5in ui3e6 u4il uil5l u1im ui3ne u1ing uinnsmi8 uinnsmig9 u1ism uista7 uit3en uit5er u1itt u1j u4jas u8je. u7jå 4uk. u1k2a u7kar ukare6 ukar5t4 u5kat u2ke. u4ked uke5l4 4ukem uker5an uke4rek uker5i ukho7 u7ki u1kj 4ukk ukk6a uk7kestal uk8k9l ukk7n ukks6 u5klem uk8lu ukl7ut u5k4no u1ko u4k5og u2kra uk3rus 2uks uk2sa uk4sek uk4sel ukse7te uk2si uk2s1k uk7ski uk2so uks5t uk4s3un uk2sø ukt5e4sk ukteslø9se uk4t3id uk6tj uk4t5ori uk2t7r ukts6l ukt3sp ukt9s6v ukt4sti uktu8e9ra uktue5re u1ku uku6e uku5le uk5vik ukys8 uk3ø4 uk5å4 6ul. u1la u4la. ula7d u6l1af u8l7aks ul5art ul4det u4lef u2lek u2lel ulele8ge. ule5ma u3len. u6leni u3lens u5ler. u5lere. ule3ri u2l3erl u4lero u2les ule3st u5lest. u5leste. u2leu u1lé ul5f6l ul4fo ul4fr u3l4i ulie8 uli9en uli5ke. 3ulikh uli9na. uli5ne u7linj ul1j ul5ka ul5k6e ul4k3v ul4lag ul4lam ull7arm ul4leg ull5egg ulleg8ga ul6leng ul9lere ul4le3s4 ul8li. ul8lig ulling7s ull5i4v ul4l3o6s ul8lot ullo3v ull5sle ull3s6m ulls4t ull3sv ul2lu4 ul6ly ul2lø ulm4u u1lo ulo6i ul5op ulo7va ul4sk uls4po ul8sn ulss8 ul2st ul8s3t6r 4ult ul4teg ul4tek ul4tes ul4til ul4tim ul4to ul7tor ul4t3re ult3ri u7lua u3lue 1uluk u5lup u5lus ul9ut. u7luta u9lute ul7va. ul5van ul4var ul4ve. ul4veg ul4vei ul4ves ulv3t ul4v3u 1uly ulyk5kes ulæ6ra ulæ5re ulø3se uløy6e ul5å6l 2uma uma8ge. u6mare um5au umau7ken um3av 2umb um5be 4umc 4umd 2ume u4mend u4m3enh umen4t5i ume5ra 2umfo 2umh 2umi u6midd umie6n umi9na u4mint um9ja 2umk 4uml 4umm um3me um4mil um4mis um3n umna8 4umo umo6g um5ok 2ump um7pan um4ple um4p7ut 4umr ums1 um7se. um4sku umsku8le. um2sn um4sor ums3t ums4tø 6um7t umta8l um5ut 4umve umør3s um7øy umå7 2un. una6da un5alg u4n3ap u9nar u7nas u3nat 2und. 6unda 6unde. un4dek un4del 6unden 5undersk 5underv 4undet un6d7im 4unds und5s4i u2ned u4nee u9nei. u2nel unele6ge. u4n5eng u4neno u2ne1s2 u3nes. u2nev unev5n 1ungd ungele8ge. un4gem un2g1j un4g5l un4go un2g1r un9g8ru ung3s4i un6i u4ni. u2nid 1u2nif u4nim u3nin 3union uni4st 4unk un4k5l un7ko un4kr un7nak unn5erf un4n5ers un4n5erv un5nes un4niv un2no unn5ste unnta8la un4n3y u4no. u2n3os uno7t 4uns un6sj5i un3skr un5s6kv un5sn un5s4p un3stek unst5e6l un7s6tenk unst3o un1s2v un4tal un4tam un4tas un3t2r unt5rep un4tri untun8ge. unu6 un5ut u3ny u3nø un5øy6d u7nøyg u3nå uo9a u1ob u1om uom7s u1op uor8da uo1re uo5ro u1ov up3av u3pea4 u5per uper3a upe6ren u4peta 6upf up6h u3pi u8pi. up3ins up3li up6nev upo9pe up1p2 up4ped up4pla up6pre upp5s 4upr u3pra 6ups up6sen up2s3k ups4ke ups5pr 6upt 6upu u1på upåvi6 u1ra u2rad u2raf ur3aft u2r1ak ura6ly u4ram u5rane u3rans uran6t5re u5rar. u6r7arl ur3arv u9ras. ur5asp ur3att ur7au urau9ken ur1av ur4bod ur4c urd4 ur3di ur4d5o u1re ure8al ureer6e ur5egg uregi6 uregist5 3urein ure4l ur3ele u4reli u7r8ell u7r8elt u4r3els u4r5eng u7reom ure7o6s u4resu u4reta u4rete ur4e5v 2urf ur4feb ur6fed ur3ge u1ri u4ri. uri6a7ne uri9en. uri4e5ne uri9er. u3rik u3rim uri5ne ur3inn ur3ins ur3int uri6sp ur4ke5s ur7k6j ur6k7ja ur8kla ur4kle ur6k5n urk5s urla8ga urle6ge. urle8se. urma7g ur3nea urn1s2 urnæ6re u4ro. u6roc 5uroe urom5s u2rop uro7pi ur3opp ur1or uro3s4 uro4sta uro8ta ur4pel ur7pi ur6p9ut ur7re ursa8ka ur4sal ur4s3el ur4sin ur4skr ur4spe ur5ste urs5til ur4stj ur2sv urs3va ur2s1ø ur3teo ur5ti ur4to ur6t5ri urts4t urue7re u6rug8 ur7ugl uruk6 uru4ke uru7kn ur6ul urumo7 urun4g u7runk uru7v ur4vel urv3s u6rys urø2 ur1ød ur1øy 4usa u9sane us3ang u9sar. u8s7arb u7saren u6s7ark us7au us1c 2use u5seal use4al. us7edvanle u2s1ei u2sek u4sele u2sem u6s5endi us7erk u4s5erm u6sesi uset8je us3eva 4usg u2sh u2s3h4a u2s3h4o us4id us3ind us5inn us7jag u4sji us5kaf u4s3kan uska8ra us7kat us5ken u6s5kis usk4l us6k5le us5klo us1ko u1skr us7kru usk7u6t u8s7kå us4ky us1l usle6ge. us5lin u4slu us7mø u4sn us1ok uso5l uso6l5d us1or u3sori usove7r6e us1p u1s2pin us5sar us6sat us4sjå us4skj uss5kor us4skur uss1l us7smi uss7mø us4s5ti us4str us2sv u6stande u4stat us3tav u2ste us3ted u5stei us7ten ust9ette us5ti u5s6tig us1tj ust5of uston8 ust7onn us5tor ust5o6v us8tra. us8tran us8trar u6stre ust5ren us4tri us3tro ust5rød u6st5rå ust7ut u4stå us3ung u2sur us1v u5svale u7s6valt usva8n usvi8ka. 6usæ usæ9le usø6m us1øy u1tae u2tag u7tagg u9tal. ut3alb ut5ald u3tall u5tande uta7no ut6anv ut3arm ut3art uta1s4 u5tas. u6t5a6sa u6t5a6se u2ta1u4 1utb ut4ba. utbe8d 4utbi ut6by. utch5 1utd 4utdat utda7ta. u2te. u2tea u4tee u4tei u2tek ut3eks u5tekst ute6ma. u5temm u9temt ut2en u6tena u3tenk u4tenu u2teo 2uter u6terø u2te1s6 u4teta u3tett ut6eu uteva9 1utf utfa7s utfø5re 1utg 8utgåe 6u3ti u4t5if utikk6u utiku9 u4tili u6tiven ut1j u5tjen ut6ju 3utlei utlø5se utlå7na utmå5le u8tni 1utny 2uto ut7oms uto5s uto4v 3utpr ut4på ut1r u5t4radi ut3re u5treng u3triv u3trol u3tros 5utru u5t6rul ut4rø ut9rød u7t8råk 1ut1s4 4uts. 4utsei utse8t9ja 2utsj ut3sk 5utst 7uttak. 5uttake ut4terk utt5eva ut4tid ut4til ut5torea ut1tr ut4tra 3uttry utt1s2 ut8tår u1tu utu5e u6t5un utun8ge. u2t5ut 1utv u3t4vil utvi5se 2u3ty 3u4t6yd u8ty. 8utz ut1ø u5tør ut4ø8s utøs7t 1utø4v ut5øya ut7åk u3tål ut1ån ut7år u1u u7uma u5ume u7ut u1v uve5di uve3in uve6ris uve3s u7ves. uvet5ø u6vev u5vi uvi6k uv5ra uv9sa u5vu uvø9re u1w 4ux1 ux4a4 uy6a u7yn u1æ uærle9ge u1ø6 uøv5 u9åra u7åre va3am va8an 4vab 6vadj vad1r vaf3 vaf6r vai5r vai5s va6ka. va7kan va5ker 6vakh va8ki. 4vako vak3r 7v6aksi 4v3aksj vak5s6t 1vakt vakt5r va1ku vak3v va3lan va4led val9eks 4valel val4g3r vali9e8 val3la val6mes va6l1o va1lu va4lun 4valv va4løy val7å vam8pu 4v3anal vand5s v4ane vane5s va4net 2vang van4gr vang4s7 va8ni. 1v4ann van4nan van4niv vann6sti va4nom v4ans van5sem 5vansk van5s6ki van3sm van3ti van9tr va4ny 2vap va5po va4ra. va6rak va4ral va4ram va4rap va4re. va4reg va6rem va4res var8ka var5ma var4mee var4sa var4sk var4s5ti var4sv varta9la var6tem var4t5i4s 4vasa va4sa. va9set 6vasid va6sie va4sif va4sik va4sil va6sis va2sk vass5a vas4sau vas4sel vas6s7ø 4vasta vat5a va3ta. va6t7e8l va2terf vatle6ge. 5vatn va1to va6tr vat7ra vat1s 4vau 2v1av va4z 2v1b2 vba4ne. vber5g vbo6da 6v1d v7dev vding5s4 v7doi v7don vd6r vdu6en. vdu6er v7dø 1ve. 2ve1a2 ve6ag ve6ar. 2veb 2vec ve2d1 ve9dob vedom5 veds2 ved5s4k 3ve8d5t vedø4 vedå6 2vee ve4er 2vef ve6g5av ve5ge 3vegg veggs4 2vegj 4vegl ve3gle ve5g6lød veg5n 2vego 6vegre veg5rett 4vegru ve4gut ve4g5å 2veh 1vei1e vei8eb vei3en 4veill 6veit 2vej 4veka 5ve4ka. ve4ke. ve4ked 4vekee 2veki 4vekj 2vekl vek8la vek8le ve4kli 2veko 2vekr 3veks vek4st veks4t5r 1vekt vek4t5an vek5to vek4t5r 2vekå 5vel. ve4l5as 5velat. 5velatp 6veld. vel4del 8velds 4veled 6velei 7velet 4velis 4velit 6veliv 2velo 5veloc vels2 vel3se velses5 vel3sm vel5sp vel5st 4velug vel5un vel5v 2vely 2velæ 2velø velø8pa 2vem ve5ma 1ven ve8na. 4venem ve5net ve6nete 4venev ve4nin ven6n5i vennle7 ve2no ven6sti ven6str vent6a ven5t6r vent4s 4venty 2venu ve4nus ve5ny. 4venya ve4nym 2ve3o4 2vep 1v8er. ver5ak ver3al 8verau ver6des ver6din ver6dir verd7v ve3re. 4vered 4vereg 5vereig 4verek ve4rel ve6r7eng 4verenn 4verep ve5rer ve5res. 4verett 4veretu verfø5re ve9ri. veri3a ve4rial ve7rie 4verik ver3il 5verkn ver5m6 ver6nal vern6s5 ve9ro. ve3rom ver8ska. ver5ski ver7spo verta8la. verta6le. ve1ru 5verum. 6very verø6 ver3øs4 4verå v4es 3ves. 2ves4a ve5san 4veset 4vesh 4vesi 4vesj 4veski 2vesl ve9sli ve1s2m 6ve3so 4vesp ve6s3per ve5sted ves6t5end vest5o4v 4vestr 4vestu 4vestø ve3sv vesva7 5vesynds 2vesø ve1så veså5re v4et 1vet. 2veta 8vetaka 4veteg 4vetek ve5te6s7 6vetev 2ve7ti 4vetj 2veto ve4to. veto7e 9vetoke 9vetoks. ve4tor 2vetr 1vets vett5sk 6vetv 4vety vety8e 2veu ve8um 2veva ve6vak ve5van ve9var 2vevi vevi8sa vev4sm vev4sp 2veø 2veå 1vê 2v1f vfall4 vfø7re. 2v1g2 v4ga. vga4le. vga6li vga8ve. v9ge v4gi. vgjer6s7 vgo4 v4gå. 2v1h vhø4re. 1via vi1an vi6bl vice5s 1vid vi5de vide4o7 vi4d5o4 vid3r vid3s4 vi1el vi5end vig4m vi4gu vi5gø vi4kat 5vikb vi5ked 7vikg vik5ke vik5n vi2k3o6 3viks. vik5sa vik5s6l 4vikt 5vikti vi4k5ø4 vi2l1a vi5la. vi4les4 vi4l3in 1vilj vil4l5an vil4led ville6de. vil4lei vill9ep 6v5illu vil5m vil1o vil4sti vilt7o vil6tret vil4tri vi2lø 4vim vim7p vim7u vin6d5au 4vindl 5vindu vine5st v6ing 4vingn vin5gom. ving3r vin8g9u vin3na vin4ned 6vinnh 4v5innl 4v5inns 4vinnt vi6n5o6ver v2in2s vin7sja vin4tes vin5tre vi8pa. vi6pe. vip5s 1vir 4viro 7viru vis3ab vis3ak vis5and vi4see vi3sen vi6seng vi2s1k visk6re vis5m vi1so vis3om vi4sp vis9pa viss4p vis5ti vi4tak vi5tese 5vi6t5j vi4t3o vi4tr vit7ra vit5re vit5skr vit6te6s7 vi4t5un vitun6ge. vi4t5øy4 vi4va. vi6ves vivi3 v1ja v1je vje4t5a vje5t6e vje4t5r vjet3t vje4tu v1ji 4v5jo vju3t 6v3k6 vk4le vk4ler vku4le. 6v1l2 v6lab vla6ga v9led v9leg vlei9e vl6el vle4se. v5lesn vle5str v6lesv vli7v vls9 vlu9sa 2v1m vma8le. vmo8de. vmord4 vmå8la 2v1n v3nad vna8ke. vn5al v9nar vn5dy vne7b v2ned vne7de v4nele v4neli v4nelo v2nem vne5r6e v4nero vne1s v4nesta v6neste v2nev vnor9s8kas vn4s5pa vn1s4t vn5t4 vnæ4re. vn5ør vo1al vo2ar 6vob 2vof vof8fan vo4gu voi1 1vok 4voko voks3k vok6s5 1vol voli7 vo4litu vol4tes 2vom vo4na vo9nal vo9nar von5de vons6 von5sh 2v1o6p 2vord vor8da. vo1re vo9ren 2v1org 4voro vors7k 1vos 4vosj vos4se vo4teg vo4tel 6votr vo1v vo4ve. vo6vi. 2v1p4 2vr8 3v6rak v7rar v1re vregi3 6vrenge 4vrengi v6rengj v6rengt vrett4s v6ri. 3vrid 7vrie v6rigas vri6ma. vri8me. v3ring vrin5s vri6ve. v1ro v4rob v4rof v4rok v4rop vro8te. v1ru v7ry vrø3ve v1rå vrå8da. 8vs v6sa. v7sali v6se. v4seg vs3egg v3s4el v4s5e4li vse4n v5sen. v4s5eng v5s4ens v2ser v6si. vs1in v1sk vs8ke v6s5kum vs1kv v1sl vs3lan vs6let v6slik vsmå8la v1s2n v6s7na vs3ne vs3ny vs3næ v4s3nø vs5od vsom5 vs5oms4 v7son vs1or vs2pe vsre6de. vs7s6t vs4s5å v1s2t2 vste6ma. vs3til vs1v v6s7va vsø6ke. vsøl5 v2s5øy vsøy4er v8så. vså7re 2v1t vta1 v4ta. vta8ka. vta6led vta9len vta4lev vta6s v5tepp v5t4i vti8na vti8ne. v5t4r vt7s v3t2v vty8e 1vu vu2d1 vud5d vuden5t vuds4 8vué vu8k 2vul 2vung vun4ge. 6vu6o 2v1ut 2v1v vva8la vve8g9ing. vve6g7inga vven7n6i vvi5ke vvi6k7l vvi8s9an vvi4se. 2vy1 vya4 vy7ens 1væ væ1ra væ9ret væ8ta. v3ø4d 8v7øks vø4l vø7li vøm4met 3vøre vø6re. v3ørke vør8na. vø3se. v5øv 4v1øy vøy6e vøy7ene. vøy9enes 1våa 1våe 4våend v4åk vå8ka. vå4ke. vå4kene vå9kene. vå4le. 1vån vå5ne 4vånu vå3ren vå8sa. vå5tes 6våtf våt7å w2a wa6l 5wald wal4k walk5o4 wal4l 2wap war6d7er wash3 1wat wa3z w1b wboy5 we2 weate7 we7b we3g we5re wes2 wes3s wester6 western7 wet5 wett4 w4i2 wi9ar. wich3 3wicz wi3d 5wi6en wi9er. wi5f wi3ni wi5ra wi3ren wi5ta wk3r w1l w1m wn5s wob5 wou6 wout7 w3s4 ws6k wurs6 wy2 w1yo wyor2 wyork3 w1z xan5t x7b x3f xga6 x7h x1ic 5x6id xi5e4 x5k x1l x1p6 x3r x1s2 x7t x6u xy2 ya7b 1yac ya5f ya4h y1ak yak6te. ya2l y7am y1an y6an. y2ana ya4ne. yan7k yan7sl y1ark y7arr yas4 ya5si ya5t y1av y1b yba4ne. yb4bed ybde3 ybo2 ybu6er ybue7re ybu7ern ybyg5 y1c y8ce. y8cé y2co3 y6dab yd5av 4ydd yd6dela yd4dep y6d7enh y4deo y2dep y4dero y2d1is yd6je yd1ji ydo4 yd3op yd5ov y1dr y4d4r5au yd1re yd5rem y8d7ri y4dro y4d4r5oks yd3si yds4v y2du yd1un ydø4 y4døm ydør5 yd1øs 4y1e yed8l ye6dre y2ek y5eks ye4len ye6let yel4s5j yel4sk yels3m yel6s5t y2em ye2n y7e6ne y8ener y2enh ye5ni y2enk y2enl yenle6ge. yens4 y4ense y3e6re ye4rel y3ern yer8sk y4erst yes2 ye5sm ye2t ye9te ye5ty y2ev y1f yfan9 yfjell4 y4fle yf5le. y8ga. yga8ve. yg4dal yg4dek yg4del yg4dep yg2do yg2d1r yg2d1y yg2dø yge5i ygen5s y6geret y2ges y4gev yg6gam ygg7art ygges4 yg5gj ygg5l yg6gr ygg3s2 yg6gu yg6g5å ygi2 y5glo yg7m yg6r y1h yhes5 y1i y9in. yis7t y1j 6yk y1ka ykap3 y6kara y2ke y7kel. y5kelen y3keli y7kels y3ken y3ker y4kerel y4kero y5ket. y9kets y1ki y1kj y4kjar y5kjare ykjeva8ne. yk4kana yk4k5enh yk5kesj ykke6s5ta yk1kj ykk5ni ykk8s5k ykk8s5o ykk8s5s yk8k5vi6 yk4ky yk1la yk6lest y1klo y3klub yk3lus y5klæ y1ko y2koa y6koli y4komo y5kosa y2kot y5koti y1kr yk1s yku6le. yk3var y1la yla8ga yl4dan yl4derk ylde4s yld1r yld5s6k yle6ge. y7les y4lev yligh9 yl5k8 ylke2 ylke4s3 ylkesla8ga yl4lev yll5is. yl3s6 ylst7re yl5tet y8luse 3ylven y1ly ylæ7re y6mei y4mete ym4fe5d6 ym5jara y4mo. ymo5e ym3p2 ym1s ym8sa. ym4se ym8sl ym6ta. ym6te. ymå6la y9n8and yndes8 yn5det y2nel yn7eld yner3g yne5s4 ynesi8 y6nev yn5gel yn4gem yn2gr yn4g5ø ynko3 yn6k5v yn5na yn5ne ynn3s4 ynn4ø y3no y4no. yns1 yns6are yn4sem yn9set yn2si yn2sk yns9ket. yns7ki yn5skj yns7kjele yn8s9kjer. yn4st yn2su yn4s5ver yn4tap yn8teg ynt5ei yn4tek yn6tete yn8t7r yo4gat yo6gi. y1om yon4 yon5nen yo6nu y1o2p y1o2r yor6da yo5re you4 yout5 yp8e y2pe. y4pee y4pena y4penet ype4rel y6peta y1pi y4pi. y7ping yp5inn ypin8na y1p2l y5po yp7p6a yp3pe y1pr yp5s8 yp4tok y3pu y1ra yra8ka y4r3a6l y7rarb y4r5au yr5av yr7da yr5dø y7real y8r7edd yre3in y5reis yrek4 y7rek7k y3rels y5rems y1ren yre9ne y4reo y6rerel y4rero yre5sc y5rest. yre5ste y5reste. yres6ten y1ret y4reta y4rete y4reto y7retø yr7ga y1ri yrin5g6 yri6ene. y4rif yri8ka. yr3inn yris6p yr4kee yrke4s yr5kj yr3m y7roe y3romm yr1op y5rosk yr5r8 yr4san yr7set yr5sk yr6skj yr6skr yr2sp yrs7tan yrs5tar yrs7tene yrs5tens yr3sti yr4sv yr3te yr6tek yr2t3r yr3tra yrty8 y1ru yrul8la. yr5ut5r yr3v y1ry yr3øk yrøy4 y1rå1 yråd2 yrå8da yråde7r yrå6ders y4rådi y2råm y6råst y4råt y4råv 2ys y1sa ys6a7kers y8s7al ys4e yse4bu y4sed y4see yse5ei y2seg y2sek y8s7ekte y2sem y4sera yse7rid yseri7e6 y4sesj y4sesk y4se5s6l y4sest y5seste y6sesu y9set. y4seu ys6i ysi8e y5sjk y7skag ys6kara ys7kare ysk9au ys2k3l ysk5øs ys4mi ys4nø y1so y4s5or ys2pe ys5pis y5s4po ys6sak ys6sam ys4s3ei ys4s3ek ys4s5il ys2sj ys8s7ko ys4sku ys2so ys2sp yss5pe ys4sta yss5tab ys4s5ti ys4su ys2s5v ys2t ys3ta y8star. ys4tat ys3tel ys3ten y4s3ter ysterie7n ys7tesl y2s3ti yst3op yst3r ys8tra ys5t6ry y7s8tu ys6ty y1su ys1ve y8s7øm ys5år y1ta y4t3ana y2tee y4tef y2teg yt5e4ge yte3in y4teka y4teki y4tena y4teno y2teo y4teret yte6ro yters6 yter5ske yte5r6ø y2tes2 y2tet y3t2hi 6y5til y6tj yt9ja yt5jen yt9jer yt4mei yt4mes y3to yt8ra yt4re. yt5rer yt1ri yt4rik y5trå yt4s3en yt3sk yt5sv 4ytt yt5t6a ytt4e ytte8r9end yttes6 yt4test yt8tien. yttsa6me. 2y3tu y1ty yt4ys y7tå8 y1u y6ua y8ue yu8g yu4l y1v y4vak yva8la y2ved yve4ria yve4ris y4vese y6vesy y6vev yvi8sa yvi6se. yv1år yvå5te y1w y5æ y5ø y1å2 za5b 3zae 4zaes za4g5 za5k6h zani4 zania5 5za5v z1b4 zbu4 z1c z1d 1ze zea1 zebu9 zeli5 zen3s 4z3ense 4z3ent z1f 8z1g 5zha z3hi z5hu 5zie 1zifi 5zing z5int 1zis 6zisty 4zi5s4v 2zisy z1k 4z1l z1m 5zo. 5zoe zo1f2 zo4no zo5re 6zos z1p z5r z1s 4z1t zu3e z1un z1v z1za. z2z3el æ5by æ2bø æ5de æ7di æ1f æg6 æ2k æ3ke æ5ki æ8kj æk1ja æk7je. æk9jer. ække7 ækkel6 æk6l æ1la æ4le. æ2le3d æ4lena æ4lev æl5j ælsle9 æ4r1ak æ3rane æ4rans æ4rarb æ6rarbe ær4arte æ4r1at ærbu5e ær1d4 æ1re æ2rea æ4red æ2ref æ2reg æ8r7ei ærei6e æ2rek æ6r7eld ære5ne. ære7nes æ2rep æ5rern æresa4m ære6skr ære4sl ære4sp æ4reta æ4retek æ9rets æ2rev 4ærf ærgen5 ærhø8 æ1ri æri6e7ne æ4r3il ær3ins æri6s ær5is. 4ærk2 ærle6ge. 4ærm ærmå8la ær3n ær5ne4 ær4nå æ2r7o6 ærom5 æroms4 ær5r ær6sel ær4s5il ær1sk ær7s6no ær2sp æ2r1u ærut5 ær3v æ2r1ø4 ærøy7e ær3å4 æ8se. æ2sj æ2s1k æ5ta 4æte æ4te. æt6he æt4r æt4ta æ5va ævar5 æve4s æ5vi 6ø1a2 øa7re øau4 ø1b øbe6lev øbe4li ø2bl ø3b6li øbl9u øb4r ød3ag ø4dak ød3d ød9de. ø2de. ø4dede ø6def ø4dela ø4dem ø4deo ø4deri ø4dero ø5dj ød1r ød4red ød4rek ød4rep ød2sc ød6s5ek øds7ke øds4ko ød6sku6 øds4mu ød8t5om ødt6r ø2du ød3und ø4d5ur ø6d5ø 4ø1e2 ø4ed ø5ene ø5ep ø3e6re øfe8 øf3fe øf6j øf8la. øf8le. øffe8l7a ø5fn øfte5s øg1 øg2a øg5ak øg5al ø7gar ø5gas ø3ger øg5gl øg8gå ø7g4j øglo8ve øgn6s7p ø2g2r øg5re. øg5res. øgs2 øg4ste øg4str øgta5 4øg4u ø1h ø4i øi4e øi5er. øi5e4ne. ø5ing ø5isk ø4it ø1j 6øk. 6ø1ka ø5kav øka8ve. ø6keh ø4kelo ø6kerada ø6kerel ø4ke5ru øke1s ø6kese ø8kesl ø4kest ø4kete ø1ki 4økj ø5kjare ø5kjas ø1kje 2økk øk5kel øk5ket øk4k5l økk5r øk3lag øk3lan 2økna 1øko øk5opp ø1kr ø8krar øk8sa. øk6se. øk4ses øk4si øk2so øks1t6 øks5ti øku4r øk5ur. øk5ure øk7ve ø7ky ø1la ø2lah ø6lam øl3d øled ø4ledi ø6lelu ø4lero ø6leta ø4le5te ø2lev øl4gera ølge5s6v øl1j øl2ke ølke7s øl4lese øl9leti øl6lev ø1lo øl7op ølrå4 øl6sel øl4sere øl4se3s øls6t4 øl5s4v ø5luk øl7ut ølva6 øl4var øl4v3ei øl6vek øl8vel ølv7erk øl4v3in ølv5o ølv7r ø1ly ø4me. ø9met 1ømfi ø5mi ømini6 øm4med øm4mero ømmet6 øm4metr øm3op øm4pel øm7s6p øm1st øm5svi ø2m1u ømå8la øn2ad ø6n5al ø5nas ø2nem ø3nes. ø9nese ønhø8re. øn8k7r 4ønn øn4nal ønni4 øn4n5it ønns5al ønn4s3e ønn4s5i4d ønns5kje ønns5kre ønns5ku ønns3l ønns3t øn2nø ø6nom øn2s øn9sa. øn5sak øn5sam øn5se. øn3ser øn3skj øn8skjer. ønst3r ønst9ra ønt1 øn2ta øn2to øn7u8 ø1o ø4peda ø6pe5i ø4penu ø5pero ø4peru øpes4 ø4pete ø4peti ø1pi øp3li øp5p øp6pl ø1pr øp6s1 øpsa4 øpsla8ga øps8leg øp5ste øp7s8tik øp4s5ø ø1ra ø2ra. ø2r1af ø2r1ak ø2r1a2m ø4rans ø4r3ant øra8sa øra6si ø4r7au ørd4e ø1re ø2rea ør7edd ø6redu ø2ref ø2reg ø6rein ø2rek ørek6l ør3eks ør5ekt ørele8se ø9relet ø4r5eng ø2re5o4 ø2rep ø6reret ø4reru øre1s2 ø5res. ø4rese ø6resi ø7reskrivi ø8reso ø4rest øre6s7v ør6et ø4reta ør1eu ø2rev ør5fe ørge5s ø1ri øri8m ør4jet ør4keri ør4kes ør8k9lag ør6k5n ør4kve ør4kå ørla8ga ørm9ut ørn4e ør4nere ør4nes4 ør4n3u ør4n5ø ør1o ø5r6ok ø1ros ø4r3ost øro4v ør4rek ør4rep ørri4 ør4r5is ør4råt ør4sak ørsa8ka ørsa6me. ør4sc ør6ses ør2si ør5ski ør4skr ørs6lev ør4som ør4spe ør2st ørs9tar ørste5i ørs5tens ørs5tig ør3sto ørs9u ør2sv ørs1å ør9tar ør4tek ør6ti9a ør4tide ør8tien. ør6tif ør3to ørum5 ø6rut ør5v ør1ø2s ørø1v ør1åp ø1sa øsa6me. ø8sarar ø1sc ø2se. ø2sem øse4n5o øseri7 øserie6 øs5jo øs7kar øs1l øs4lag ø4slu øs2me ø1s2p øss8n øs8tas øst9ast øs6teg øs5terse øst9ett østo2 øst5of øst5ov øst1r øst3re østø4 ø2s1ø2 4øt øt3ak ø9tar øta4s øt5asa ø2te. ø2tea ø6tef ø6tege ø2tei øte5k ø2t5eks ø2tel ø5tela. ø3ten ø4teni ø3ter. øte3ru ø2te1s øte7sn ø4teta øt7ri øt1sa øt3s4p øt7s6å øtså9re øt4tero øt6test øtt5av øtt5eks øtt5eta øtt5ete øtt5ra øtt7ri øtt1s2 øttså7re øt4tur øt4ty ø1tu ø5ty ø1u2 øug8la øv5aa øv5ans øve5in ø4vek øve5no øveren8 øve1s øves4t øve3te ø5vik øv6l7ut øv7ne øv6nø øv9o8 øv1r øv5reb øv1s øv9sa ø5vå øy3al øya2n 7øyan. 9øy8ans øy4dek øy4dere øyd8i 5øyeb øy7e4de øy2ee øy4ele øye4n øy4ep øy4erf øy1gl øy3ke. øyks4 øyk5t 2øyl øy4led øy4leg øy5na øy5ni øy3o 6øyp øy3pe. øy4pel øy4ra. øy5rer. øyri6v øy3rø øy1s øy5s4ar øy5si øys2l øy4sm øy4spi 5øysund øy4tei øy4tel øy4tere øyte5s6 øyti7da øy1tr øyt5s øy2t3y6 øy5tø øy4vei 5øyvå ø1ø2 ø5å6 å1a åak6ta åa4n5 åan8ka. åan6ke. å2ar å5aran åau4re å1b4 åba8ne. åber2 åbo9ta 6å1d å7dan å9dar å4ded å4dek å4dem å4deo å4dep å4dere å4deri å6dero å2des å7di åd4ra åd8re åds1 åd2sk åd3s4la åd7slo åd3slå åd1s2n åd3s4pe åd7spu åd5st åd6s7te 4å1e å2ele åem8na åe2n å7ens å3er å3e6re. å7e8ri å1f åfe6 åfø5re 2åg å4ga. åg7ald å4ge. åg7ei å2ges ågna5 åg5ne åg4r åg5rin ågs6k åg5sl åg7sp ågs4t ågu4l åg5ø å4gå. å1h å1i å1j å1ka å3kan å3kar å4karb åk7av å4keh å3ken å4kena å4k3enh å4kere åke5s å4kesl å5kevi å1ki å6kid å1kj åk1k åk5ka åkk6l åk7kr åk7lau åklist7 åk3læ å1ko åk3opp åko4s åk6ra åk5røk åk3rå åk1s2 åks7l åk3t4 åku8 å5k8ul åkva8la. åkøy8rar. å2k3å å1la å5l6amp å6larb å9las ål5au8 ål9av ål3d å2lef ål5eini å2lek å2lem å4l5enh å4leni åle6ris å2le1s2 åle9s6und å4lete å2lev ål5g ålgå6 å6lio ål5j ålla6ga ål3or ål4san ål4sek ål4ser åls7i ål2sp ål4sti ålsy8na ål5ti ålti5d ål1u ålul8la å1ly å2l1øy åløy4e ål5å6k ålå8te. 6åm å6me. åm4li. åm1om åm5øy 8åna å3nar å9nas ånd3r ånd4sa ånd4se ånd4so å4ne. åned4 åneds5 åne5i6 å2nel ånely6 å5nes. å3net å4netr å3ni ån5o å9ny å3o åp2e åpe4n3a åpe4n5i åpen3s å5per å6pero å1pi åp6j å1pla åp4ne. åp7p å1pr åpra5 åp2s1 åp6ta å4på år3ak å9ran å7rara ård5str å2re. å5rei å6rel åre7s å4rest årfi4 å7riv år3k2 år4le. 2årn årn5s år3on år3op årpo8 år2s års5af års3el år3sem års3ko år8sku årsla8ga år3sol års3ta år7ste års3ti år7sto år5stu års1u års1v år5sy år5u4k år3un år5y4 å1rø å5r8å ås2 å1sa ås7au å4se. å4see ås5eid å4sek å4sem åseri7e6 åse3s2 å4sesm å4seso åse5ta ås3h å8si. ås5ka. ås9kene ås8ki å1skj å2s3kjør ås7kop å1skr å5sku å1sl ås5ne ås3ni å5so å1sp ås7pl ås5sa ås5se ås3si åss3k å8s7s6kå 4å1st å7stei åsu4 ås3un ås7ut ås7væ ås5øy åså7 å1ta å4ta. åtaks5 åta2l åta9la åtale3 åta5le. åta5len å4tang å4tark å4t5arm å2te. å2tea å4tee å2t1ei åte6ke. å4teo å9ter å2tes 5åtferd å5ti åti7da 2åtn å1to åt7ov 6åtp åt1re åtri6pa. åtri8pe. åt1ru åt5sk åt1t åt4ted åt4ti ått3o åt4tri åtts4 åt6t5æ åt1u åt4un åtva5ra åtva7re åt5ve å5ty åt1øv å3u åun8ge. å1v åv4a å2ve7d å4veg åve5l å4veni å9ver. å2vev åv7s6 å7vy åvæ4re. å1ø8 åøy4", ["length"]=192729, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=27448, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lt.rme0000644000175000017500000000363311761001300024654 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Lithuanian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 % in October 2008 by Mojca & Arthur. % % Source available on: % - http://www.vtex.lt/tex/littex/index.html % % Authors: % % First version in LT encoding (modified T1): % - Vytas Statulevičius % - Yannis Haralambous % (Vilnius, March 4, 1992) % Conversion into Latin 7 and aditional support files (babel, fonts): % - Sigitas Tolusis % (2002-11-20) % Adaptation for hyph-utf8: % - Mojca & Arthur (see below), October 2008 % % The copyright statement of this file is: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % A note about lefthyphenmin/righthyphenmin (by Sigitas, February 2009): % % At the moment the lefthyphenmin & righthyphenmin are both set to 2. % The Lithuanian patterns were build earlier then the latest grammatical rules % took place in 1997. At that time it was forbidden to leave one character at boundary. % One may change it to one now, but from typographical point of view there is no need to do % any changes. Even more, changing lefthyphen and righthyphen to 1 requires % to review and maybe rebuild the patterns file. % %------------------------------------------------------------------------------ context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tk.lua0000644000175000017500000003360612161703335024670 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="tk", ["source"]="hyph-tk", ["texcomment"]="% Turkmen hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Hyphenation patterns for Turkmen (hyph-tk.tex)\ %\ % Author: Nazar Annagurban \ % License: Public domain\ % Version: 0.1\ % Date: 16 March 2010\ %\ % ----------------------------------------------------------------------\ %\ % The file has been auto-generated from generate_patterns_tk.rb\ % that is part of hyph-utf8.\ %\ % For more information about UTF-8 hyphenation patterns for TeX and\ % links to this file see\ % http://www.tug.org/tex-hyphen/\ %\ % ", }, ["patterns"]={ ["characters"]="-abdefghijklmnoprstuwyzäçöüýňşž", ["data"]="1-4 ä1bä ä1be ä1bi ä1bö ä1bü ä1çä ä1çe ä1çi ä1çö ä1çü ä1dä ä1de ä1di ä1dö ä1dü ä1fä ä1fe ä1fi ä1fö ä1fü ä1gä ä1ge ä1gi ä1gö ä1gü ä1hä ä1he ä1hi ä1hö ä1hü ä1jä ä1je ä1ji ä1jö ä1jü ä1kä ä1ke ä1ki ä1kö ä1kü ä1lä ä1le ä1li ä1lö ä1lü ä1mä ä1me ä1mi ä1mö ä1mü ä1nä ä1ne ä1ni ä1nö ä1nü ä1pä ä1pe ä1pi ä1pö ä1pü ä1rä ä1re ä1ri ä1rö ä1rü ä1sä ä1se ä1si ä1sö ä1sü ä1tä ä1te ä1ti ä1tö ä1tü ä1wä ä1we ä1wi ä1wö ä1wü ä1ýä ä1ýe ä1ýi ä1ýö ä1ýü ä1zä ä1ze ä1zi ä1zö ä1zü ä1ňä ä1ňe ä1ňi ä1ňö ä1ňü ä1žä ä1že ä1ži ä1žö ä1žü ä1şä ä1şe ä1şi ä1şö ä1şü e1bä e1be e1bi e1bö e1bü e1çä e1çe e1çi e1çö e1çü e1dä e1de e1di e1dö e1dü e1fä e1fe e1fi e1fö e1fü e1gä e1ge e1gi e1gö e1gü e1hä e1he e1hi e1hö e1hü e1jä e1je e1ji e1jö e1jü e1kä e1ke e1ki e1kö e1kü e1lä e1le e1li e1lö e1lü e1mä e1me e1mi e1mö e1mü e1nä e1ne e1ni e1nö e1nü e1pä e1pe e1pi e1pö e1pü e1rä e1re e1ri e1rö e1rü e1sä e1se e1si e1sö e1sü e1tä e1te e1ti e1tö e1tü e1wä e1we e1wi e1wö e1wü e1ýä e1ýe e1ýi e1ýö e1ýü e1zä e1ze e1zi e1zö e1zü e1ňä e1ňe e1ňi e1ňö e1ňü e1žä e1že e1ži e1žö e1žü e1şä e1şe e1şi e1şö e1şü i1bä i1be i1bi i1bö i1bü i1çä i1çe i1çi i1çö i1çü i1dä i1de i1di i1dö i1dü i1fä i1fe i1fi i1fö i1fü i1gä i1ge i1gi i1gö i1gü i1hä i1he i1hi i1hö i1hü i1jä i1je i1ji i1jö i1jü i1kä i1ke i1ki i1kö i1kü i1lä i1le i1li i1lö i1lü i1mä i1me i1mi i1mö i1mü i1nä i1ne i1ni i1nö i1nü i1pä i1pe i1pi i1pö i1pü i1rä i1re i1ri i1rö i1rü i1sä i1se i1si i1sö i1sü i1tä i1te i1ti i1tö i1tü i1wä i1we i1wi i1wö i1wü i1ýä i1ýe i1ýi i1ýö i1ýü i1zä i1ze i1zi i1zö i1zü i1ňä i1ňe i1ňi i1ňö i1ňü i1žä i1že i1ži i1žö i1žü i1şä i1şe i1şi i1şö i1şü ö1bä ö1be ö1bi ö1bö ö1bü ö1çä ö1çe ö1çi ö1çö ö1çü ö1dä ö1de ö1di ö1dö ö1dü ö1fä ö1fe ö1fi ö1fö ö1fü ö1gä ö1ge ö1gi ö1gö ö1gü ö1hä ö1he ö1hi ö1hö ö1hü ö1jä ö1je ö1ji ö1jö ö1jü ö1kä ö1ke ö1ki ö1kö ö1kü ö1lä ö1le ö1li ö1lö ö1lü ö1mä ö1me ö1mi ö1mö ö1mü ö1nä ö1ne ö1ni ö1nö ö1nü ö1pä ö1pe ö1pi ö1pö ö1pü ö1rä ö1re ö1ri ö1rö ö1rü ö1sä ö1se ö1si ö1sö ö1sü ö1tä ö1te ö1ti ö1tö ö1tü ö1wä ö1we ö1wi ö1wö ö1wü ö1ýä ö1ýe ö1ýi ö1ýö ö1ýü ö1zä ö1ze ö1zi ö1zö ö1zü ö1ňä ö1ňe ö1ňi ö1ňö ö1ňü ö1žä ö1že ö1ži ö1žö ö1žü ö1şä ö1şe ö1şi ö1şö ö1şü ü1bä ü1be ü1bi ü1bö ü1bü ü1çä ü1çe ü1çi ü1çö ü1çü ü1dä ü1de ü1di ü1dö ü1dü ü1fä ü1fe ü1fi ü1fö ü1fü ü1gä ü1ge ü1gi ü1gö ü1gü ü1hä ü1he ü1hi ü1hö ü1hü ü1jä ü1je ü1ji ü1jö ü1jü ü1kä ü1ke ü1ki ü1kö ü1kü ü1lä ü1le ü1li ü1lö ü1lü ü1mä ü1me ü1mi ü1mö ü1mü ü1nä ü1ne ü1ni ü1nö ü1nü ü1pä ü1pe ü1pi ü1pö ü1pü ü1rä ü1re ü1ri ü1rö ü1rü ü1sä ü1se ü1si ü1sö ü1sü ü1tä ü1te ü1ti ü1tö ü1tü ü1wä ü1we ü1wi ü1wö ü1wü ü1ýä ü1ýe ü1ýi ü1ýö ü1ýü ü1zä ü1ze ü1zi ü1zö ü1zü ü1ňä ü1ňe ü1ňi ü1ňö ü1ňü ü1žä ü1že ü1ži ü1žö ü1žü ü1şä ü1şe ü1şi ü1şö ü1şü a1ba a1by a1bo a1bu a1ça a1çy a1ço a1çu a1da a1dy a1do a1du a1fa a1fy a1fo a1fu a1ga a1gy a1go a1gu a1ha a1hy a1ho a1hu a1ja a1jy a1jo a1ju a1ka a1ky a1ko a1ku a1la a1ly a1lo a1lu a1ma a1my a1mo a1mu a1na a1ny a1no a1nu a1pa a1py a1po a1pu a1ra a1ry a1ro a1ru a1sa a1sy a1so a1su a1ta a1ty a1to a1tu a1wa a1wy a1wo a1wu a1ýa a1ýy a1ýo a1ýu a1za a1zy a1zo a1zu a1ňa a1ňy a1ňo a1ňu a1ža a1žy a1žo a1žu a1şa a1şy a1şo a1şu y1ba y1by y1bo y1bu y1ça y1çy y1ço y1çu y1da y1dy y1do y1du y1fa y1fy y1fo y1fu y1ga y1gy y1go y1gu y1ha y1hy y1ho y1hu y1ja y1jy y1jo y1ju y1ka y1ky y1ko y1ku y1la y1ly y1lo y1lu y1ma y1my y1mo y1mu y1na y1ny y1no y1nu y1pa y1py y1po y1pu y1ra y1ry y1ro y1ru y1sa y1sy y1so y1su y1ta y1ty y1to y1tu y1wa y1wy y1wo y1wu y1ýa y1ýy y1ýo y1ýu y1za y1zy y1zo y1zu y1ňa y1ňy y1ňo y1ňu y1ža y1žy y1žo y1žu y1şa y1şy y1şo y1şu o1ba o1by o1bo o1bu o1ça o1çy o1ço o1çu o1da o1dy o1do o1du o1fa o1fy o1fo o1fu o1ga o1gy o1go o1gu o1ha o1hy o1ho o1hu o1ja o1jy o1jo o1ju o1ka o1ky o1ko o1ku o1la o1ly o1lo o1lu o1ma o1my o1mo o1mu o1na o1ny o1no o1nu o1pa o1py o1po o1pu o1ra o1ry o1ro o1ru o1sa o1sy o1so o1su o1ta o1ty o1to o1tu o1wa o1wy o1wo o1wu o1ýa o1ýy o1ýo o1ýu o1za o1zy o1zo o1zu o1ňa o1ňy o1ňo o1ňu o1ža o1žy o1žo o1žu o1şa o1şy o1şo o1şu u1ba u1by u1bo u1bu u1ça u1çy u1ço u1çu u1da u1dy u1do u1du u1fa u1fy u1fo u1fu u1ga u1gy u1go u1gu u1ha u1hy u1ho u1hu u1ja u1jy u1jo u1ju u1ka u1ky u1ko u1ku u1la u1ly u1lo u1lu u1ma u1my u1mo u1mu u1na u1ny u1no u1nu u1pa u1py u1po u1pu u1ra u1ry u1ro u1ru u1sa u1sy u1so u1su u1ta u1ty u1to u1tu u1wa u1wy u1wo u1wu u1ýa u1ýy u1ýo u1ýu u1za u1zy u1zo u1zu u1ňa u1ňy u1ňo u1ňu u1ža u1žy u1žo u1žu u1şa u1şy u1şo u1şu a1bi a1be y1bä y1bi y1be o1bi o1be u1bi u1be i1ba i1bo e1ba e1bo ä1bo ä1ba ö1ba a1çi a1çe y1çä y1çi y1çe o1çi o1çe u1çi u1çe i1ça i1ço e1ça e1ço ä1ço ä1ça ö1ça a1di a1de y1dä y1di y1de o1di o1de u1di u1de i1da i1do e1da e1do ä1do ä1da ö1da a1fi a1fe y1fä y1fi y1fe o1fi o1fe u1fi u1fe i1fa i1fo e1fa e1fo ä1fo ä1fa ö1fa a1gi a1ge y1gä y1gi y1ge o1gi o1ge u1gi u1ge i1ga i1go e1ga e1go ä1go ä1ga ö1ga a1hi a1he y1hä y1hi y1he o1hi o1he u1hi u1he i1ha i1ho e1ha e1ho ä1ho ä1ha ö1ha a1ji a1je y1jä y1ji y1je o1ji o1je u1ji u1je i1ja i1jo e1ja e1jo ä1jo ä1ja ö1ja a1ki a1ke y1kä y1ki y1ke o1ki o1ke u1ki u1ke i1ka i1ko e1ka e1ko ä1ko ä1ka ö1ka a1li a1le y1lä y1li y1le o1li o1le u1li u1le i1la i1lo e1la e1lo ä1lo ä1la ö1la a1mi a1me y1mä y1mi y1me o1mi o1me u1mi u1me i1ma i1mo e1ma e1mo ä1mo ä1ma ö1ma a1ni a1ne y1nä y1ni y1ne o1ni o1ne u1ni u1ne i1na i1no e1na e1no ä1no ä1na ö1na a1pi a1pe y1pä y1pi y1pe o1pi o1pe u1pi u1pe i1pa i1po e1pa e1po ä1po ä1pa ö1pa a1ri a1re y1rä y1ri y1re o1ri o1re u1ri u1re i1ra i1ro e1ra e1ro ä1ro ä1ra ö1ra a1si a1se y1sä y1si y1se o1si o1se u1si u1se i1sa i1so e1sa e1so ä1so ä1sa ö1sa a1ti a1te y1tä y1ti y1te o1ti o1te u1ti u1te i1ta i1to e1ta e1to ä1to ä1ta ö1ta a1wi a1we y1wä y1wi y1we o1wi o1we u1wi u1we i1wa i1wo e1wa e1wo ä1wo ä1wa ö1wa a1ýi a1ýe y1ýä y1ýi y1ýe o1ýi o1ýe u1ýi u1ýe i1ýa i1ýo e1ýa e1ýo ä1ýo ä1ýa ö1ýa a1zi a1ze y1zä y1zi y1ze o1zi o1ze u1zi u1ze i1za i1zo e1za e1zo ä1zo ä1za ö1za a1ňi a1ňe y1ňä y1ňi y1ňe o1ňi o1ňe u1ňi u1ňe i1ňa i1ňo e1ňa e1ňo ä1ňo ä1ňa ö1ňa a1ži a1že y1žä y1ži y1že o1ži o1že u1ži u1že i1ža i1žo e1ža e1žo ä1žo ä1ža ö1ža a1şi a1şe y1şä y1şi y1şe o1şi o1şe u1şi u1şe i1şa i1şo e1şa e1şo ä1şo ä1şa ö1şa b1b .b2b b1ç .b2ç b1d .b2d b1f .b2f b1g .b2g b1h .b2h b1j .b2j b1k .b2k b1l .b2l b1m .b2m b1n .b2n b1p .b2p b1r .b2r b1s .b2s b1t .b2t b1w .b2w b1ý .b2ý b1z .b2z b1ň .b2ň b1ž .b2ž b1ş .b2ş ç1b .ç2b ç1ç .ç2ç ç1d .ç2d ç1f .ç2f ç1g .ç2g ç1h .ç2h ç1j .ç2j ç1k .ç2k ç1l .ç2l ç1m .ç2m ç1n .ç2n ç1p .ç2p ç1r .ç2r ç1s .ç2s ç1t .ç2t ç1w .ç2w ç1ý .ç2ý ç1z .ç2z ç1ň .ç2ň ç1ž .ç2ž ç1ş .ç2ş d1b .d2b d1ç .d2ç d1d .d2d d1f .d2f d1g .d2g d1h .d2h d1j .d2j d1k .d2k d1l .d2l d1m .d2m d1n .d2n d1p .d2p d1r .d2r d1s .d2s d1t .d2t d1w .d2w d1ý .d2ý d1z .d2z d1ň .d2ň d1ž .d2ž d1ş .d2ş f1b .f2b f1ç .f2ç f1d .f2d f1f .f2f f1g .f2g f1h .f2h f1j .f2j f1k .f2k f1l .f2l f1m .f2m f1n .f2n f1p .f2p f1r .f2r f1s .f2s f1t .f2t f1w .f2w f1ý .f2ý f1z .f2z f1ň .f2ň f1ž .f2ž f1ş .f2ş g1b .g2b g1ç .g2ç g1d .g2d g1f .g2f g1g .g2g g1h .g2h g1j .g2j g1k .g2k g1l .g2l g1m .g2m g1n .g2n g1p .g2p g1r .g2r g1s .g2s g1t .g2t g1w .g2w g1ý .g2ý g1z .g2z g1ň .g2ň g1ž .g2ž g1ş .g2ş h1b .h2b h1ç .h2ç h1d .h2d h1f .h2f h1g .h2g h1h .h2h h1j .h2j h1k .h2k h1l .h2l h1m .h2m h1n .h2n h1p .h2p h1r .h2r h1s .h2s h1t .h2t h1w .h2w h1ý .h2ý h1z .h2z h1ň .h2ň h1ž .h2ž h1ş .h2ş j1b .j2b j1ç .j2ç j1d .j2d j1f .j2f j1g .j2g j1h .j2h j1j .j2j j1k .j2k j1l .j2l j1m .j2m j1n .j2n j1p .j2p j1r .j2r j1s .j2s j1t .j2t j1w .j2w j1ý .j2ý j1z .j2z j1ň .j2ň j1ž .j2ž j1ş .j2ş k1b .k2b k1ç .k2ç k1d .k2d k1f .k2f k1g .k2g k1h .k2h k1j .k2j k1k .k2k k1l .k2l k1m .k2m k1n .k2n k1p .k2p k1r .k2r k1s .k2s k1t .k2t k1w .k2w k1ý .k2ý k1z .k2z k1ň .k2ň k1ž .k2ž k1ş .k2ş l1b .l2b l1ç .l2ç l1d .l2d l1f .l2f l1g .l2g l1h .l2h l1j .l2j l1k .l2k l1l .l2l l1m .l2m l1n .l2n l1p .l2p l1r .l2r l1s .l2s l1t .l2t l1w .l2w l1ý .l2ý l1z .l2z l1ň .l2ň l1ž .l2ž l1ş .l2ş m1b .m2b m1ç .m2ç m1d .m2d m1f .m2f m1g .m2g m1h .m2h m1j .m2j m1k .m2k m1l .m2l m1m .m2m m1n .m2n m1p .m2p m1r .m2r m1s .m2s m1t .m2t m1w .m2w m1ý .m2ý m1z .m2z m1ň .m2ň m1ž .m2ž m1ş .m2ş n1b .n2b n1ç .n2ç n1d .n2d n1f .n2f n1g .n2g n1h .n2h n1j .n2j n1k .n2k n1l .n2l n1m .n2m n1n .n2n n1p .n2p n1r .n2r n1s .n2s n1t .n2t n1w .n2w n1ý .n2ý n1z .n2z n1ň .n2ň n1ž .n2ž n1ş .n2ş p1b .p2b p1ç .p2ç p1d .p2d p1f .p2f p1g .p2g p1h .p2h p1j .p2j p1k .p2k p1l .p2l p1m .p2m p1n .p2n p1p .p2p p1r .p2r p1s .p2s p1t .p2t p1w .p2w p1ý .p2ý p1z .p2z p1ň .p2ň p1ž .p2ž p1ş .p2ş r1b .r2b r1ç .r2ç r1d .r2d r1f .r2f r1g .r2g r1h .r2h r1j .r2j r1k .r2k r1l .r2l r1m .r2m r1n .r2n r1p .r2p r1r .r2r r1s .r2s r1t .r2t r1w .r2w r1ý .r2ý r1z .r2z r1ň .r2ň r1ž .r2ž r1ş .r2ş s1b .s2b s1ç .s2ç s1d .s2d s1f .s2f s1g .s2g s1h .s2h s1j .s2j s1k .s2k s1l .s2l s1m .s2m s1n .s2n s1p .s2p s1r .s2r s1s .s2s s1t .s2t s1w .s2w s1ý .s2ý s1z .s2z s1ň .s2ň s1ž .s2ž s1ş .s2ş t1b .t2b t1ç .t2ç t1d .t2d t1f .t2f t1g .t2g t1h .t2h t1j .t2j t1k .t2k t1l .t2l t1m .t2m t1n .t2n t1p .t2p t1r .t2r t1s .t2s t1t .t2t t1w .t2w t1ý .t2ý t1z .t2z t1ň .t2ň t1ž .t2ž t1ş .t2ş w1b .w2b w1ç .w2ç w1d .w2d w1f .w2f w1g .w2g w1h .w2h w1j .w2j w1k .w2k w1l .w2l w1m .w2m w1n .w2n w1p .w2p w1r .w2r w1s .w2s w1t .w2t w1w .w2w w1ý .w2ý w1z .w2z w1ň .w2ň w1ž .w2ž w1ş .w2ş ý1b .ý2b ý1ç .ý2ç ý1d .ý2d ý1f .ý2f ý1g .ý2g ý1h .ý2h ý1j .ý2j ý1k .ý2k ý1l .ý2l ý1m .ý2m ý1n .ý2n ý1p .ý2p ý1r .ý2r ý1s .ý2s ý1t .ý2t ý1w .ý2w ý1ý .ý2ý ý1z .ý2z ý1ň .ý2ň ý1ž .ý2ž ý1ş .ý2ş z1b .z2b z1ç .z2ç z1d .z2d z1f .z2f z1g .z2g z1h .z2h z1j .z2j z1k .z2k z1l .z2l z1m .z2m z1n .z2n z1p .z2p z1r .z2r z1s .z2s z1t .z2t z1w .z2w z1ý .z2ý z1z .z2z z1ň .z2ň z1ž .z2ž z1ş .z2ş ň1b .ň2b ň1ç .ň2ç ň1d .ň2d ň1f .ň2f ň1g .ň2g ň1h .ň2h ň1j .ň2j ň1k .ň2k ň1l .ň2l ň1m .ň2m ň1n .ň2n ň1p .ň2p ň1r .ň2r ň1s .ň2s ň1t .ň2t ň1w .ň2w ň1ý .ň2ý ň1z .ň2z ň1ň .ň2ň ň1ž .ň2ž ň1ş .ň2ş ž1b .ž2b ž1ç .ž2ç ž1d .ž2d ž1f .ž2f ž1g .ž2g ž1h .ž2h ž1j .ž2j ž1k .ž2k ž1l .ž2l ž1m .ž2m ž1n .ž2n ž1p .ž2p ž1r .ž2r ž1s .ž2s ž1t .ž2t ž1w .ž2w ž1ý .ž2ý ž1z .ž2z ž1ň .ž2ň ž1ž .ž2ž ž1ş .ž2ş ş1b .ş2b ş1ç .ş2ç ş1d .ş2d ş1f .ş2f ş1g .ş2g ş1h .ş2h ş1j .ş2j ş1k .ş2k ş1l .ş2l ş1m .ş2m ş1n .ş2n ş1p .ş2p ş1r .ş2r ş1s .ş2s ş1t .ş2t ş1w .ş2w ş1ý .ş2ý ş1z .ş2z ş1ň .ş2ň ş1ž .ş2ž ş1ş .ş2ş ý2t1b ý2n1b ý2d1b r2t1b ý2p1b l2p1b l2t1b g2t1b n2t1b r2k1b r2p1b k2t1b r2h1b s2t1b l2k1b w2p1b n2s1b r2s1b l2m1b ý2t1ç ý2n1ç ý2d1ç r2t1ç ý2p1ç l2p1ç l2t1ç g2t1ç n2t1ç r2k1ç r2p1ç k2t1ç r2h1ç s2t1ç l2k1ç w2p1ç n2s1ç r2s1ç l2m1ç ý2t1d ý2n1d ý2d1d r2t1d ý2p1d l2p1d l2t1d g2t1d n2t1d r2k1d r2p1d k2t1d r2h1d s2t1d l2k1d w2p1d n2s1d r2s1d l2m1d ý2t1g ý2n1g ý2d1g r2t1g ý2p1g l2p1g l2t1g g2t1g n2t1g r2k1g r2p1g k2t1g r2h1g s2t1g l2k1g w2p1g n2s1g r2s1g l2m1g ý2t1j ý2n1j ý2d1j r2t1j ý2p1j l2p1j l2t1j g2t1j n2t1j r2k1j r2p1j k2t1j r2h1j s2t1j l2k1j w2p1j n2s1j r2s1j l2m1j ý2t1k ý2n1k ý2d1k r2t1k ý2p1k l2p1k l2t1k g2t1k n2t1k r2k1k r2p1k k2t1k r2h1k s2t1k l2k1k w2p1k n2s1k r2s1k l2m1k ý2t1l ý2n1l ý2d1l r2t1l ý2p1l l2p1l l2t1l g2t1l n2t1l r2k1l r2p1l k2t1l r2h1l s2t1l l2k1l w2p1l n2s1l r2s1l l2m1l ý2t1m ý2n1m ý2d1m r2t1m ý2p1m l2p1m l2t1m g2t1m n2t1m r2k1m r2p1m k2t1m r2h1m s2t1m l2k1m w2p1m n2s1m r2s1m l2m1m ý2t1n ý2n1n ý2d1n r2t1n ý2p1n l2p1n l2t1n g2t1n n2t1n r2k1n r2p1n k2t1n r2h1n s2t1n l2k1n w2p1n n2s1n r2s1n l2m1n ý2t1p ý2n1p ý2d1p r2t1p ý2p1p l2p1p l2t1p g2t1p n2t1p r2k1p r2p1p k2t1p r2h1p s2t1p l2k1p w2p1p n2s1p r2s1p l2m1p ý2t1s ý2n1s ý2d1s r2t1s ý2p1s l2p1s l2t1s g2t1s n2t1s r2k1s r2p1s k2t1s r2h1s s2t1s l2k1s w2p1s n2s1s r2s1s l2m1s ý2t1t ý2n1t ý2d1t r2t1t ý2p1t l2p1t l2t1t g2t1t n2t1t r2k1t r2p1t k2t1t r2h1t s2t1t l2k1t w2p1t n2s1t r2s1t l2m1t ý2t1ý ý2n1ý ý2d1ý r2t1ý ý2p1ý l2p1ý l2t1ý g2t1ý n2t1ý r2k1ý r2p1ý k2t1ý r2h1ý s2t1ý l2k1ý w2p1ý n2s1ý r2s1ý l2m1ý ý2t1z ý2n1z ý2d1z r2t1z ý2p1z l2p1z l2t1z g2t1z n2t1z r2k1z r2p1z k2t1z r2h1z s2t1z l2k1z w2p1z n2s1z r2s1z l2m1z ý2t1ş ý2n1ş ý2d1ş r2t1ş ý2p1ş l2p1ş l2t1ş g2t1ş n2t1ş r2k1ş r2p1ş k2t1ş r2h1ş s2t1ş l2k1ş w2p1ş n2s1ş r2s1ş l2m1ş s2k1d l1s2k l1s2t s1t2r n2g1l n1g2r s2k1w", ["length"]=13245, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=2372, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ro.lua0000644000175000017500000002150312161703335024663 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="ro", ["source"]="hyph-ro", ["texcomment"]="% Romanian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: rohyphen.tex (1996-11-11)\ % Author: Adrian Rezus \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %% ROHYPHEN.TEX, version 1.1 <29.10.1996> R [7.11.1996] %%\ %% (C) 1995-1996 Adrian Rezus [adriaan@{sci,cs}.kun.nl] %%\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %%\ %% Romanian TeX hyphenation table: NFSS 2 encoding, medium.\ %% Contents: 647 Romanian hyphen patterns, with diacritics.\ %%\ %% This file is part of the Romanian TeX system.\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %% Romanian TeX, version 1.3R <29.10.1996> %%\ %% (C) 1994-1996 Adrian Rezus %%\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %% History:\ %% ROHYPHEN.TEX 1.0 <10.02.1995>: Plain TeX and LaTeX 2.09.\ %% ROHYPHEN.TEX 1.1 <29.10.1996>: Plain TeX and LaTeX2e.\ %\ % -------------------------------------------------------------------\ % \ % TODO: fix the notice below - it only holds for the old patterns\ % \ %\9NB This file must be used in conjunction with either one of\ %\ %\9(1)\9ROMANIAN.TEX v1.2(R) [1994-1995] [(La)TeX] or\ %\9(2)\9ROMANIAN.STY v1.3R [1996] [(La)TeX(2e)]\ %\ %\9NB Romanian has LR-HYPHEN-MINs [2 2] (like German)!\ %\9NB Romanian has STRUCTURAL HYPHEN-AMBIGUA:\ %\9 i.e., words that canNOT be hyphenated correctly without\ %\9 additional (e.g., semantic, stress-mark) information.\ %\9--------------------------------------------------------\ %\9The Romanian TeX encoding of the Romanian diacritics:\ %\9--------------------------------------------------------\ %\9Romanian TeX \9DQ-macro encodings\9= (La)TeX macros\ %\9--------------------------------------------------------\ %\9ă = \\u{a}\9\9\9[-] \\u{A} [not encoded]\ %\9â = \\^{a}\9\9\9[-] \\^{A} [not encoded]\ %\9î = \\^{\\i}\9\9\9\"I = \\^{I}\ %\9ș = \\c{s}\9\9\9\"S = \\c{S}\ %\9ț = \\c{t}\9\9\9\"T = \\c{T}\ %\9-------------------------------------------------------------\ %\9NB Romanian \\^{a} behaves like \\^{\\i} as regards hyphenation.\ %\9NB The capital \\u{A} and \\^{A} are rare in script; as such,\ %\9 they occur only in records of the Romanian substandard.\ % -------------------------------------------------------------------\ %\ % original patterns generated by PatGen2-output hyphen-level 9: do NOT modify the list by hand!\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvxzîășț", ["data"]=".a3ic .a4n3is .a2z .cre1 .de2aj .de2z1 .g4 .i2a .i2e .i3ț .i4u3 .i3v .î4m .n2 .ni2 .p4 .pre3ș .s4 .ș4 .u4i .u5ni .z2 a1 2acă achi5 a3e afo3 a3i2a a3i2e a3il ai3s2 a3iu alie6 2alt a2m a2n 2an. a5n2e ani2e ani3ș4 an4s 2anu an2z ao2g ati4a 2atr a5t4u 2ața 2ață 2au a3ua a3ud a3ug a3ul a3un a3ur a3us a3ute a3u2ț a3uz 2ă1 ă3i ăi2e ă2m2 ănu3 ărgi5 ă3ș ă4ș3t ă2ti. ăti4e ă3u ă3v ă2zi 1b 2b. ba2ț bănu5 2bc 2bd bi2a. bi2at bi2e 3bii b2l 3b4lim b4lu bo1 bo3ric 2bs 2bt 2bț bți4ne. bu3 1c 4c. ca3ut că2c cătu5 2cc ce2a ce2ț 2chi. 2ci. ci3ale ci2o cis2 ci3sp ciza2 c4l 2cm 2c5n copia2tă co2ț 2cs 2ct 2cț cu3im 3cul cu2ț 2cv 1d 4d. da4m da2ț 2dc de4sc dez3in di2an dia2tă 2dj 2dm 2d1n do4il 3du e1ac e1aj e1al e1aș e1at ea2ț e1av ebu5i 2ec eci2a ecla2re edi4ulu e3e ee2a 1efa e1h e3i2a e3i2e e3ii e3il e3im e3in e3i2o e3i3s2 e3it e3i4u e1î 2el e2m emon5 2en e5ne e1o1 e3on e1r 2era 2eră 2erc 2e2s es3co es5ti 2eș e3și etan4ț 2eț e3u eu5ș 1evit e2x 2ez eză5 ezi3a e2z1o 1f4 2f. 3fa 3făș 2fi. fi3e 3fo 2ft f5tu 1g2 2g. gă3ț 2ghi. 2gi. g4l 2g3m 2g3n go5n 3gu3 2g3v 2h. 2hi. hi2a hi3c hi4u 2h1n 2i1 4i. 3i2ac ia3g4 i2ai i2aș ia2ț i3că i2ed i3ia i3ie i3ii i3il i3in i3ir i3it iitu2ră i2î 4ila i3le i3lo imateri6 i2n i4n1ed in2gă inți4i 3inv i3od i3oni io2ț ipă5 i2s is3f 4isp iș3t i5ti iți2a i3ți2o i3ua i3ul i3um i3und i3unu i3us i3ut iz3v î2 î3d î3e î3lo îna3 în5ș î3ri î3rî îr5ș îș3t î3t î4ti î3ț î4ți î5ții î3z 1j 2j. 2jd 2ji. ji2ț 2jl j4u ju3t 1k 1l 4l. larați2 lă2ti lătu5 2lb 2lc 2ld le2a 2lf 2lg 4li. li3a li3e li3o 2lm 2l5n 2lp 2ls 2l3ș 2lt 2lț 3lu 2lv 1m 2m. 3ma 3mă 2mb mblîn3 3me me2z 2mf 3mi 4mi. mi2ț 3mî 2m1n 3mo mon4 2mp 2m3s2 2mt 2mț 3mu mu2ț 2mv 4n. 3na 4n1ad na3in 3nă 2nc n2cis n2ciz 2nd 3ne ne1ab ne1an ne1ap 4nef 4n1eg ne3s2 4nevi 4n1ex 2ng ng3ăt 3ni 4ni. ni3ez 3nî n3j n1n 3no no4ș n1r 2n3s2 ns3f n4sî ns3po n3ș2 n4și 2nt n5ti n5t4u 2nț 5nu nu3a nu3ă nu5m nu3s2 2nz o1ag o2al o2bi. 2oca ocu5i 2od odi2a o3e o3i2 oiecti2 oi3s2p omedi2e. om4n 2on o1o opi3e opla2 oplagi2 o1ra o1ră or2c o1re o1ri o2ric o1rî o1ro or2te. o1ru os5ti o3și otați4 o5ti ot3od o3u 1p2 2p. 3pa păr3ț 2p3c pecți2 pe2ț 2pi. pi2e pi3e. pi3ez pi3o pi2ț pi2z p4l po4ș po2ț 2p3s 2p3ș 2p3t 2p3ț p4ți. pu3b4 puri2e pu4ș 4r. 2rb 2rc 2rd r2e re2bi recizi2 re3s2cr re4și 2rf 2rg 2r1h 4ri. ri3a ri4ali ri3eț ri3ez ri5mi 2ri3un ri3v 2rk 2rl 2rm 2r1n rna2ț rografi6 2rp 2r1r 2rs2 r3sp r3st 2r3ș 2rt rtua2le 2rț ru3il ru3sp 2rv 2rz 1s 4s. 5sa 5să să4m să4ș 2sc 4sc. 3s2co 3se se2a se4e. ses2 se3sp se4ș 4s2f 5sfî 3si si3p 3sî 3s4l 4sm s1n 3so so3ric 2sp 2st sto3 5su su2ț 2ș 4ș. 3șa șa2ț 3șă2 3șe 1și 4și. 5șii 5șil 3șin 3șî 4ș5n șnu5 3șo ș2p ș2ti 4ști. 4ș3tr 3șu 1t2 4t. ta3ut 2t3c 2t3d te2a te5ni teri6ală te3s2p 2t3f 4ti. ti3a ti3e 3tii. 3til 3tin ti2ț 2tî. t4l 2t3m 3tol 3tor to2to 3tru. 3trul 3truo 4t3s2 2t3t tu3a tu3im 4t3un tu4ș 4t3z 1ț 2ț. 3ța 3ță țe2ț 2ți. 3ția ți3a. 3ție 3ții 3țil ți2ț 3țiu țu3 țu5i 2u1 6u. u2a. u2ad u3au uă3 uăs2 u2bia u2b3l u2b1o ub3s2 u3e 4ugu u3i2a u3i2e u3in u3ir u3is u3it u3i2ț u3iz u2l u3la u3lă u3le u3lii u3lî u3lo umi5r ur2z u2s us2pr u4st u3ș u4șt u2to 3utor u3ui u3um 1v 2v. ve5ni ve2ț ve2z 2vi. vi2ț 2v1n vorbito2 3vr 1x 2x. 3xa 3xă 3xe xe2z 3xi 3xo 3xu 1z 2z. za2ț 2zb 2z2g 2zi. zi2an zi2ar 3zii 3zil z4m 2z1n 3z2ol 3zon zu2ț 2z2v z3vă", ["length"]=3439, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=647, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-gb.hyp0000644000175000017500000000040011761001300024627 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-gb.rme % used: a c e g h i m n o p r s t u v w y \hyphenation{ uni-ver-sity uni-ver-sit-ies how-ever ma-nu-script ma-nu-scripts re-ci-pro-city through-out some-thing}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fi.rme0000644000175000017500000000662711761001300024641 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Finnish hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: fihyph.tex (yyyy-mm-dd) % Author: Kauko Saarinen % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % -----> Finnish hyphenation patterns for MLPCTeX <------ % First release January -86 by Kauko Saarinen, % Computing Centre, University of Jyvaskyla, Finland % % Completely rewritten January -88. The new patterns make % much less mistakes with foreign and compound words. % The article "Automatic Hyphenation of Finnish" % by Professor Fred Karlsson is also referred % --------------------------------------------------------- % % 8th March -89 (vers. 2.2), some vowel triples by Fred Karlsson added. % 9th January - 95: added \uccode and \lccode by Thomas Esser % % ********* Patterns may be freely distributed ********** % % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pl.hyp0000644000175000017500000000056711761001300024670 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-pl.rme % used: a b c d e g h i j k l m n o p r s t w y z ó ą ł ż \hyphenation{ be-zach be-zami by-naj-mniej gdzie-nie-gdzie ina-czej na-dal ni-gdy ni-gdzie niech-że niech-by ow-szem pó-łach pó-łami pó-łek pod-ów-czas przy-naj-mniej skąd-inąd tró-jach tró-jami tró-jek}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-da.rme0000644000175000017500000000656511761001300024630 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Danish hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: dkcommon.tex (yyyy-mm-dd), dkspecial.tex (yyyy-mm-dd) % Author: Frank Jensen % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % This file contains the hyphenation patterns for Danish. % %% Copyright 1994 Frank Jensen (Frank.Jensen@hugin.com) % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % Changes: % - 2011-01-11 - remove support for OT1 encoding % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cy.pat0000644000175000017500000012441511761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-cy.rme % used: a b c d e f g h i l m n o p r s t u w y á â ê ë ï ô ö \patterns{ .ac4t .ad3ae .add5as .add3o .ad4eg .ad4eny .ad4fer .adl4 .ad3r .ae3a .af3a .af4an .aff3 .afl4u .af5lw .ag3w .am4le .am3s .an5ad .an4g3 .anghen5a .anghen4r .an2o .anrhyd4 .ansodd4e .an5te .an3w4 .an5we .ar4bo .ar4cha .ar5ddel .ared4 .ar4en .arff4 .ar4ge .ar2i .ar3we .ar4wed .as3g .as3t .aw4e .ban4as .ban4ed .bara5t .bel3y .be3t4a .bl2 .bl4e .br2 .br4e .call5 .ce4n .ch2 .ch4e .ch4l .ch4o .chollad4 .chr2 .chwyn5 .cl2 .cr2 .cy5we .dad3r .dd2 .ddefn5 .dd4i .ddi5an .ddi5dd .ddi3e .ddill5adas .ddill5ade .ddill5ado .ddill5adw .ddin4 .ddiw5eddas .ddiw5edde .ddiw5eddo .ddiw5eddw .ddwl3 .ddy5fala .ddy5fale .ddy5falo .ddy5falw .ddylad4 .deallad4 .defn3 .der4w .deth5 .di5an .di5dd .di3e .di3gy .dill5adas .dill5ade .dill5ado .dill5adw .din4 .diw5eddas .diw5edde .diw5eddo .diw5eddw .dr4e .dwl3 .dy5fala .dy5fale .dy5falo .dy5falw .dy5fo .dylad4 .dyrchafad4 .eb2 .eb3r .eb4rw .ec2 .ed2 .edl4 .edr4 .eg2 .egn3 .el4or .els4 .en3as .eny5na .er2 .erfy5na .ern4 .ewy5na .fadd3 .falch5 .fan3a .farn4ais. .fasg4 .fas5ge .ff2 .ff4a .ffer4a .ffe5ras .ffer4e .ff4o .ffor5t .ff4y .ffydd5 .ffynad4 .ffy5nas .fign5 .fis5g .fon4edi .fordd4 .for4o .for4w .for4y .fr4i .fryn4d .fydd5 .fyn5as .fyw3 .gal3e .gal5o .gan3l .gan5olas .gan5ole .gen5as .ger5b .geu5d .ghwy5na .gl2 .glaf5y .gl4e .gleid4 .gl4y .glyn3 .glywad4 .god3y .gof3a .goffad4wy .gollad4 .gr2 .grynho4em .grynho4wn .gwedd4er .gyd3 .gyf5al .gyf5arc .gyfer5byna .gyfer5byni .gyfer5bynn .gyffel5 .gym3o .gyn3a .gyn5e .gynef5 .gyth5ru .gy5we .hac4 .hadl4 .haf4a .haf3l4 .hagr3 .ham4le .han5as .han4g5 .hanghen5a .han5t .han5w4 .har5ddel .hared4 .har4en .har3n .harn4a .har3w .has3g .haw4 .heb2 .hec2 .hed2 .hedl4 .he4o .herfy5na .her4w .heur5 .hof4r3 .hol4y .holyn5 .hw2 .hwn4 .hwyl5u .hwyn5a .hwyr5 .hwyth4au .hyd4 .hydr4 .hy3ff .hyf4od .hy5fry .hy3g .hyl4 .hym3e .hym4u .hym4y .hymy5na .hymysg4 .hyn2 .hy3no .hy3rw .iach4 .iac5has .iac5he .iac5hw .ir3 .ladr3 .ledr4e .le3na .le3o .lest4 .lin3 .ll2 .llaw4e .lle5na .llo5nas .llon4e .llythr5 .lo3na .lon4e .ludd3 .lygr3 .lyn3a .lythr5 .man4ed .mant4a .mar4f .mign5 .mis5g .mol3 .mon4edi .mwyth5a .mwyth5w .myn5as .neilltu4ad .neis4i .nen3a .ner4w .ng2 .ngen5as .nghyt5u .nghy5wa .ngl4 .ng4w .ngy4 .ni5an .ni3e .ni5fei .nig2 .ni5ga .ni3ge .ni3gw .ni3gy .ni5re .ni3wa .niwl5 .no4e .no4w .nwl3 .nwyn3 .oddefad4 .od4l .of3a .of4o .of4u .og2 .og4l4 .ol2 .oll3 .ol5yga .ol5yge .olyn3 .or1 .orddad4 .pl4a .pl4e .rad3r .rag3l .ra3na .ran5d4 .rew3 .rhi5a .ria4 .rin4t .rug4l5 .ry3n4a .ryn4e .sas4 .ses4 .st2 .sych3 .sych5e .talad4 .tan4e .th2 .thag5 .th4i .tho5e .th4r4 .thrad4 .th4u .torad4 .tr2 .tr4a .trad4 .tr4o .tro4en .uch2 .wa5r4as .war4es .wedd4er .weithiad4 .welad4 .wen3a .west4 .wn4io .wobr3 .wybr4 .wy3by .wy4r .wyw3 .ydd4 .yd4l .yf4ar .ym4adw .ym3e .ym4yl .ymysg4 .yn4d .ys4b .ysg4 .ys4i .ys4n .ys4t a1a a3ar2 2ab ab3a ab4ad ab3ed ab3el ab5ine abl1 a2b1o ab4or abr3 a1bu a4bu. a4bum 2ac ac1a ac5ade acan3 ac4aol ac3ei ace3ne ac5enni. ach1 a4ch. ach5ac ach5aw a5chef ach3o ach3r ach5us a3chwa achwyn5 achy4 aci5mw acl3 ac3o ac3ta ac3te 4ad3ac ad3ad ad5afa ad3arf adar4g a4dd. add3ad ad3dal ad3dd add3eu add5ew add3f add3i add2o ad4du addun4 add3yc add3ys 2ad1e ad3eg ad3el ad4el. ad4ena ad4ene ad4eni ad4eno ad4enw ad3i 2adl ad3len ad5lys ad2na adnabydd4e adnabydded4 ad2no 2ado ad3oc ad3od ad3of ad3on 4adr. ad4red ad3ri adr4od adr3on ad4ru 4adunia ad5uniad ad5uro adwel4ed. ad3wi ad5wr. 3ad3wys ad5wyt ad1y ady4n ad4yrn 2aea ae4ada ae5an. aedd3 ae3i ael1 ael4edda aen3 ae3oc ae3og aer1 aerw4 aer5we aer5wy aes3 aest4 aeth5a aethr4 ae1w ae5wyd af3adw 4af5aid af4al af3an afan5e af4ann 4afar3 af5arn af4at 4af3au 2af3e 2aff aff3a aff3ed aff3ei aff3i affl3 aff3w aff3y aff4yr af3i afl3a afl5edi af4l3u 2afn1 af3odd 4afol af3ont 2afr af3ra af3res af5rif af4ru af5rwy af1u 2af1w af1y 2a2g ag1a ag3ad ag3al age3na age5ne ag3law agl3o ag3lu agl3w ag3n ag3od ag3of ag4ori ag1r ag3ri ag3ry ag1u ag2w ag3wa ag3wel ag3wn ag3wr ag5yma agy4w a1h2 ahan3 ahanad4 ahedr4 a2i 2aig 2ail1 ailen3 2ain 4ainc 2ait 2al al5abr al3ad 4al3ae alaf3 4alaid al3an al5arc al5aso al3ce alch3w al5cwl al4di al1e al5edau al3ei al3en al4ena al4es. al2fo al3fy al3i al4is all3a all3e all3i all3oc all3w all3y 3aln al3oc al3od al4ogia alo3na alo3n4e al3ono al3or alp4e al1u 4alwc alw3e 4alwr al5wst al3wy 4alwy. al1y 2am ambl3 am3d amdan5 amel5o am3er amgym5r amhen4 amhobl4 amhryd4 am5las am4led am4lf am4lg am5nif am4of am2or amor5w am4pa a4mwa am5wed am5wri am5wyd am3wyt amyn3 a2n 2an. an1a a4nab anadl3 a4nae a4naf an4afi a4nai an2as an3at4 a4nau a4naw 4anco an2da an5dda an4ddy an2de an2do an1e an2ed an3ed. an5eda an5edd. an5edo a4n3eg a4nel an3eli an5er. an5ewi 2anf an3fy 2ang1 ang3ad an4gd ang3e an4gf anghaff4 anghelf4 anghredad4 anghrist4 anghy4 anghyd4 anghydna4 anghyf4 anghyfar4 anghyff4 anghyfiawn4 anghym4 anghyn4e angl4 ang5or an3if an3igi 4annau an3oc an3od. an3odd an5og. an5og4ae 4anol an3ol. an3om an3ont an3or 1anr an5sic ans4ie ans4iw an5siwn an4ta ant5ac an5the ant3rw an1w an3wes 4anwl anwy4 an3wyd anwyn3 an1y any4l3 a1oe ap3a ap4cy ap5elw ap3l apl4a ap5ost ap5rwn ap5ryn ap5wll 2ar ar3ab aradr3 arae3 ar3af. ara5ff ar3an ar4an. aran3a aran3e arat4 ar3aw ar4ber arc3as arch5en ar5clo ar2da ar2de ard5es ar4dr ardyn3 ar1e ar2eb ar2ei ar5eid ar3eit ar3fa arfan5 arf5ed ar5fel ar4ff ar3fod ar1i ar4ian ar2m 4arn. arn5adwy. ar4nd 3arnh ar4no ar4nw ar4ny ar1o ar4od. ar4odi arogl3 3aror ar3os 5aros. ar4p3as arp3w ar3sy ar3te ar4th3 ar3ug ar3ut aru5wc 3arwai ar5wch arwd2 arw5der ar3wed 3ar3wi arw3n ar3wn. ar3wni ar3wy 4arwyn ar3y 2as. 2asas as5awr 1asb as5boe 2asd 2ased as4enn 2asf 2asg as5gal asgl3 asg4oda as3gwr asg3wy 2asia 4asie 2asl 2asn as4ny as4od. 2asoe 2asr 2ast as4tal as3tan astat5 as3te as4tl as4tr as5trus ast2w as5ty. as3tyl astyn3 2asu as3ur as5wir 2aswr 2asy as5ynn 2a2t at3ad at5alf ateb3 at3em ath3a athl3 ath3o ath4r3e athr3w athr5yc ath3w ath3y ato2i at3ol a3tô at3ran atr5oc at3rod atro5e atr5yc at3wy aty3na aty5ne a2u 2aul 2aw aw1a aw5art aw5chw aw5ddr aw5dry aw3ed aw3ei aw3el aw3es aw3f aw3ga aw1i awl5ed awn3a awr1 awr3d awy4r3 3áu. 1â bab4i bab5yd b3ac bach3 badd3 b3adw 1bae 2baet b1af b1ai b1an ban3a ban3e b4ann ban3o 5barch bar4f bar4lys. barn3 bar4wy b1as bas3g2 bast4 bat4a b4ath b1au bawd4a bawe5na b1d b1ec 2bed beir4a be4iw b1em ben4ae be3nas be5ned bengl4 bens4 bent4 b3ent. ben3w benwy5na b3ert b3esi bgal4 2b1i b3ia bi5aidd 3bib1 b3id3 b3ie 3b2ig1 b4inc bin2e b3io b3ir bisg4 b3it bl3af bl5air bla3na bla5nedi bla5nes 2blau bl5awd bl3ec bl4enni. blew3 4blwr b4lyc 4blyn bl5yn. bo4b4l b1oc 4b3odd bol3 b1om b2on bon4d b2r bra3na br3ed breg3y br3em br4enn br2i br4il br3ir brod4iae brog4 br4wd bryf3 bryn4d b1s2 bse3na bse5ne 2bu. 1bua budd4l bu4lo 3buo bw3a b1wc 3bwll b1wn b4wns bwr1 4bwyd b3wyd. 4b3wyf bwyllt4 3bwyn bwy4r3 2by b3ych. bydd5i b2yl 3bylla by3na by3ned by3nes byrf4 b4yrw 3byst. byw3 cabl4en c1ad cad3a cad3l cae4a caethiw4ed c1af c3ai cal3e cal3o cam4enn camn4 can3a ca4ne canghe5na can3l c4ann can5olas can5ole c3ant can4yd car4en car4ped. c1as casg4e 3cat ca4t3r c3au c3áu c1b cd2 c1e c3ed c5edig ceg3 c3el c2en ce3na c3ent cer5by cer4f cer3y ceu4l c3ff 3chae ch3af. ch4afb ch4afi chan3a changhe5na char4enn chasg4e chdr5y ch3eba ch3ebe ch3ebi ch3ebo ch3ebw ch3ech ch3ed. ch3edi 5chein chelad4 ch3ent chen3y ch3er. cher4f ch3esg 3chest 4chestio 4chestol 4chestwa 4chestwe ch3eta ch5ig. chleid4 chl5ent 4chmyni 4chmynnol chn5eg chob3 chobl4 ch3odd chon5ad4 ch3ont chon4y chra4 ch4ro 4chu. ch4ub 4chus 5chwant ch3wch chw4f ch4wi ch3wn. ch3wyf chyd3 chym4an ch4ynn chysg3 chys5o chyt3u chy5wa c1i cib3 cig1 c3in ci3od. cl2e cleid4 cl2i c1ll cllon3 cloe4 cl2w cl4wm cly4w clywad4 cn2 cno4en cn4yw cob1 co4bl4 c1oc c1od cod4l coffad4wy collad4 c1om c1on con4y corn4an cosb3 cr3ae cra4m 3crat credad4 cr4el cr3ie cring4 crof4 crog3 cron4a cro5nas cron4e cryg3 crygl4 cr4yl cr4ym crynho4em crynho4i cs3a c3s4aw cs3yn ct2a c4teg ct4id c1to ctor3 c3tr 1cu 2cus c1w c3wa cwast3 cw4fa cwm3 cwn4ed c3wy c4wyn3 cwy4r cyb3y 2c1yc cych3 cyd3 cydl4 cydr4 cy4f3a cyfer3 cyffel5 c1yl cyll5a cym3 cym4an cym4ero c1yn cyn3a c5ynau cyn3e cynef3 c2yny cy4se cysg3 cys5on cys3t cys3w cyth5rud cy1w cy3wa cy3wi cy3wy d1a2 dach3 d3ach. d5achwr d2ad dad3u dad3w d5adwy dae5ara dae5ared dae5ari dae5arw d2ael d4afe d4afo dag1 dag3w 4dail da5ion d4ait d4al. d4ald d4aln d4alr d2an3a d2an3e dan3f d2ano d2anu d2anw d2any dar3a dar4ana dar4d darf2 d5arne dar3w d5aryd 2das 2dau 2daw dawd3 d5awd. d1b ddad3r 4ddaf 3ddang dd4ani dd3ara dd3ari dd3arw 2ddas dd4aw ddd2 d4dda ddd4e dd4d4i4 dd3dr dd4du dd4dy dd5dy. dd3er. ddeth5 ddeuad4 dd4eug dd4ew dd2f dd4fg 2ddi. dd4ic dd4if ddif3a dd4ig. ddi3gy dd4il dd4im dd4ini 4ddit dd1l2 dd5len 2ddo. 4ddoc dd3odd 4ddom 4ddon3 dd2or3 ddr2 ddr4a ddr4e ddr4i ddr4o ddr4w dd4ry d2du 4dd3un dd5us. dd5waw 4ddwc dd2we 4ddwn 5ddwrn dd4wyn 3ddwyr dd2y 4ddyc dd4ydd dd5yf. ddym4d dd4yn ddy5nad 5ddyni 4ddynt 3ddyr 3deb. debr3 d1ec dech4a d1ed d5edd. deddf3 def3a d1eg d5egol. de1h deheu5 d2eil d4eim delff5 d3ella d3elle d3elli d3ello dellt5 d3ellw del3o d1em d3em. 2d1en1 d4eng d3ent de2o der3f derfyn5 2d1es d3esi 5destu d1et det5an deth4o d1eu1 deul4 deu4ny d4eut d1f2 d3f4ae df4ann df4ao d4fa5ol df4at df4aw dfed5r d3fei dfe5ne d5ferf d4fery dff4y d2fi df4id df4od d4f3ol df4ry d2fu dfwr2 d4fyd dfyn3a dfyn4ed. d1g2 dgam2 dgan5e dg4ei dgl2 dgrynho5 dgyf5ar d1h2 dha5ol dhegl5 2d1i di5ach di1b2 dibryd4 di1d did2e di5den d4ido di5dos di4et di3eu dif4an di5fat di3fe di3ffr di5fli di5flo di5fra di3fw di5gab dig2e di5gel di3gen dige5na dige5ne digl4 di5gof di3gry di3gw dig2y di3gym4 di3gys dil4a dil4e di5lec di5les dill4a di3lu dil2w di3lys d3in. di5niw di3nod d4inoe di3or d2ir d3ir. di3ra d4i3r2e di5rif 3d4iro di4rw di3rym dis3g di3so dis3t di3sw di3sy 4d3it. d2iw2 d4iw. di3w4a d4iwe di5wen d3iwyf d1ï d3ladd dladr3 dl3af d3lam d4lau dl3ed d3l4ei d4len. dle3na dle5ne d4lent dl3er d3lew d2lo dl3oc dl3od d3lon3 dlon5e d1lu dludd3 d2lw dl3yc d3lyd. d3lyn dl4yr d3lyw d1m2 dm4ar dm4er dm4od d3my d1n d3nap dn3as d3naw dneb4 d2n3ed dn3es d2ni d3ni. dno2i d3nos d2n1w d2ny d1o d3och d2od. d2odi d4odia dod3r 2doe do4en d2of dof5yddio d3ol. d4oll dol4wg d3om don2a don2e d3ont dor2a dor4da dor5we dos3 do2w 2dr. 3dra. dr3ad. dr3ada dradd3 dr3adw dr3a4f dr5aid dr5ain dram4g dr4an. dra3na dra3ne dr4ann dr3ant dr5au. dr3c dr3ed dr4edo dr3en d4reu drew3 dr3f drff4 dr4iau d4r3id d4rir d4roe dro3es 4drog drog4e dr3ol dr5ol. dr3on. dron3a dr3ont d4rwg dr3wn dr3wyf dr3yd dr3yn. d3ryw d1s2 d1ug1 d4un. dun3a d4unia d1ur d1us 1dut du5wch d1w dw2a dw3adw d3wae dw3af d3wait d3wal dw3an dw3as dwb3 dwbl4 d3wc dwd2 dw3edi d2wen dwer5y d4w3id d4w3ir d4wit dw5mig dw3o dwr3e d2wrn dwy3b d4wyc dwyn3 dwy4on. d2wyr 3dy. d1yc d5ych. d1yd d3yd. 4dydd dyd2w dydw5y dyf5an dyff4 dyf4n3 dyf4od dyf5odd dy5fodi dyf2r3 dyfrad4 d3yg. d3ygl dy3gy d2yl dyl5ad dy3lan dyll3 dy3lu d1ym dymag5 dym5od 3dyna dy3nas dy3nes dy3n4od dy3r2a dyr2e dy3ri dy5ryd 2dys. 4dysa dys4g dysg5a 4dyso 2ea e1ad e4adf e4adl eaf1 e3af. ea4fa e4afg e1ai e1an3 e4ang ear1 earf2 ear5fo earn4i e1as e1au e3aw eb3ad eb5ar. eb1e ebl2 eb1o eb3ont ebra5ne ebr3e eb4r3i ebr3o eb1w eb3wy eb5yll 2ec1a 2ec3e ech1 ech5od echr4 ech3ry ech5we ech5wyd echwy5na echwy5ne 2eco econ2 eco5no ec5ord ecr1 2ect ec4to 2ecw ec3y 2ed3a ed4al edd3ad edd3al edd3ar edd3e 2eddf eddf3a eddf5i eddf3o eddf3w eddf3y 4eddg edd3o edd3yc edd3yg edd5yla edd5yled edd5ylo edd5ylw edd5yn ed1e ed3eg ed2ei eden5a ed3fa ed3fe ed3fi edf4w 4edia edi4f ed3ig ed3i4n ed3ir ed3iw 3edï 2edl1 ed4lo 4edr. edr3e edr3o edr4yd 2edw ed2we edw3en edw5lw ed3wy4 ed3y edym4 2e1e ef5adwy. ef3an ef5an. ef3ar3 ef3au ef1e efer2 eff4e eff3r4 eff5re effro4er eff3y ef3id ef3ig ef2l3 ef4lo efn1 ef5nos ef1o ef4odo ef2r efr3e ef4ri ef4ry ef4us ef1w efyddad5 efy3na efy5ne e2g1 4eg5an. eg4ana egar3 egeir4 eg5ell 4egen. 2egf eg5ig. egl3a egl3e egl3o 2ego eg4on. 4egos eg5os. egr3a egr3e egr3i egr3o egr3w eg3ry egr3yc eg2u eg3yr e1ho e1hy e2i 2ei1a eiaf3 ei5afr ei3bre eich3 eidal5 eidd3 eidd5y ei5der eidl2 eid5la 2eidr eidr5o ei1e 2eig eigl5ad eig5lenn eigl3w ei4gr 3eilad 4eiladwy. eil5ec eil5eg eil3es ei4ll ein2a eind5i ein4drw 4einf eing4a ein5io 4einl 4einy 2ei1o ei3ont eir3y 2eit eith5e ei1w ei3y 2e2l el1a el5ain elan5e el4co el1e el3ed el4eno el4era el4ere el5far el5fed elgri5 3elh el5iff 4elig ell1 ell5ac ellt4ir ell5wy ell3y el2m3 el5myn el1o el2od el3odd 4elog el4oga el2ri el4wi el3wy el5ybia el5ybr el3yc 4elyd el5yd. el3ydd elyn3 el3yna el5yned elyng4 el3ynn el3yr el3ys el4ysg el4yst em5ain em4at 2em3e 2emo em4os 2emp empr3 em5ryn 2emt em5tas 2emy en5ada e4n3adu e4nae en3af e4nag en5ago en3ai en3an e4nar3 enar4g e4n3aw en5byl en3c en4ct en4cy 2end endig3 endr4 en3ec en3ed. en5edd en3el en3em en3en en3er en3est en3eu e4new enew5y en5fyd eng3h en4gi engl3 en5gl4og en5ise en3it en3o en4oli 4enti ent4ir en3tr ent4wr 4enty en5tya en5uch enw3ad en3wc en3wn en3wr en3wyd en3wyf en3yc en5ych. en5ychase en5ychia en4yg 2eo e5och. e1od e1oe e4olae e4olaid e4olau e1om e1on eor3 ep5ach ep3l er1a er5ain er2c erc3a er4ch 4erco 2er2d er3de erd3y er1e 2erf er5fan erf5au er3fed er3ff er4fl er4fu er3fyd er3gl er2gy er3i er4ic er4il erin3 er5ir. er5it. er2l er5lys er4md er4mw er4my er3na ern4i er5ni5as er5nyw er1o 4erob erog4 4erol er5oli er4ony er2se er5sei 2ert erw3a er4w3e er4wl er3wn er4wre er3wy er4wyc er4wydd er3yc er3ydd er3yg er3yl eryl3e er4yll er3yn eryn4a eryn4e es3a es3ba es3e es5gar es4ge es4gn es4g3w es4gyn es3n es4ne es4t3a es5tam est3er 2estf 2estl est5ol 4estu es5tyll. esty5na esty5ne 2esu esurad4 es4yd. es3yn3 e2t et3ac et3ad e3tae et5eg. eter4 et3er. eth1 eth3e eth3i eth4le eth3os eth4r3 eth3w et5iro et1o et5re. et5swy et1w 4etwr ety5wy e2u eu3a 4euau 2eu1b2 2eud2 eu3da eu3d4e eud4i 2eu1f eu1g eull4 eu5lys 2eun2 eu5nan eu5nos eu5nyddi eu5sil eus3t eu4th eu4tu eu3w 2ew ew1a ew3d ew1e ew3g ewgl4 ewg4w ew3ir ewis3 ewl1 ew3o ew5par e3wyd. e3wyf 2ey e1yc ey4en 1ë 3fa. fab3 fab4i fach3 fac4w fadd2 fad4ei fad4r3 fael3 f1af 3fag fag4d fagl3 f1ai falch4 f4al5on f4alu f3am f4an. fan3d fan5edd fan4es f3anf fan3o fant2 3faoe far3a far4ch3 4far2e f3arf far4fa far4l 3farn farn3a f3arp f3art f4arwe f3arwy f1as fas4iw f3at fat4o fawd4a 3fawr f1b2 f1d2 fdd2 f2dw fd5wr. f4eb. febr3 f1ec fed4n f2edr 3feia 3feie fe4io feiriad4u feith3 fe4iw f4el. f3ell fel5yno f1em fe3na feng3 fent4 fentr5 fenw3 fen3y 2fera ferch4er ferdd4 2f2ere 2f2eri fer4in 2f2ero f2erw ferw5yc f4er3y f1es feth3 f4eth. f4etha feu1 3fey f2f ff3ad ff3ant ff4at ff3au ff3ed. ff5edig ff5eio ff5el. ffen5ed ff3ent ff3er. 3ffert ff3esu ffet4 2ffi ffidl5 ff2l ff4la ffl4ac ff4lo ff5log ff5los ff3n ff3od ffod5e ff4odi 3ffon. ffo3n4a ffo3n4e ff3ont ff2or 5ffor. ff4os ff2ra ff2ri ff4rod ff2rw 4ffry ffr3yn ff2t 5ffurf3 ff5wyf ff5yl. f1g fg4wr f1h2 fha5ol f1i f4iadae 2fic fic4e f2id f3id. fig4en. fil3y fin3 f4in. f3ind fin4t fisg4 f2ï fl2 fl3ad flaf4 fl3ai flamad4 fla3na flan5ed f2las flaw4 fl3ec fl5eis fl3em fle3na fle5ne fl4eo fl3id fl4ig flin3e fl3ir fl4iw fl3om f3lon fl5rwy f4l3wr f1ly f5lychw f4l4yd fl4yf flyn3a flyn3e f2n fn3a fn3d f4n3ec f4n3ed f4n3em f4nen f3nif fn3ig f3nith fn5lu. f4n3oc f4n3om f4n3on fn3w fn2y f4n3yc fn3yn f1oc fodd3 fod4enn f4odf fodr4 fod3rw f4odu f3oedd f1og fol3 fol4enn f1om fon4d 5fonog f4ony f4or. for4c f4ord for3f f3os2 fos4i fos3o f3ot f4otr fr2a f2raf f2rai fra3na fra5ned fras4au f4r3au fr3d frdd2 fre2 f2rec f4red. f4reg freg3y f2rem f4ren f3reo f2rer fr3f f2rh f2rid fr3id. f2rir f4rit fr2o f3roa f5roadw f2roc frod4iae fro2e fro4en fro5esi f3ro2i f2rom f2ron f3roo fr4ot f3row fro4wc fro4wn f1ru fr2w f2rwc f2ry f3ryn f1ta f3ter fudd4l fud3w fu2l f1un3 f4urf f3wa f1wc fwd3 f1we 4fwl. f1wn2 f3wr. fwr5ne f4wy. f3wyd fwyllt4 fwyn3 f4wyn. f4wys f1yc fyd2 fyddad4 fydd4l fydd5y fyd4l3 f4ydr fyd3y 3fyf fyf4y f1yl f4yl. f2yn 4fyn. f3yng fyn3o fyn5od f2yr fy3r2a f3yrd fyr2e fyrf4y fyr4y fys4t fystyr4o fys4w gabl4en g5ach. gad1 gad3a 5gadar g4ad2u 5gaduri g4adwr g1ae gae3a g3af. gaf3a gaf4r3 g1ai 1gal2 gal5ara gal5are gal5ari gal5aro gal5arwy galed5 4gall gam4enn gamn4 gan3a gan4d ga4ne ganghe5na g3ant 4ganwr g3ao gar3eg gar4enn g3arf gar4ge 3gart 4garthia gar4we g1as 5gased gasg4e ga4t3r 2g1au 4gawe 2g1b gb4er g1c 2g1d2 gdd2 gddig5 gdo3ra gdo5r4e g2dw gd5wr. g1ec g1ed gedd3 g2ede g4edi. g4edid g4edir g4edit g2edo g4edu g4edyc geg3 g2egy g2ei. g3eid g4el. gell5a gel3o g1em gen4d g5enni. gen2r g3ent g4enu g3er. 3g4erd ger4f ger3y g1es geu4l g1f2 gfa3na gfa5ne gfe5ne gfyn3 g3ga gh2 ghae4 ghan3a ghanghe5na ghar4en ghasg4e ghen5i gher4f gh4le ghleid4 gh4ne ghob3 ghobl4 ghof5r gh4og ghon4y ghr2 ghra4 ghred4adu ghred4inia ghw4f ghyd3 ghym4an ghysg3 g1i gib3 g4ida gi5en. g2ig1 3gil 1gip g3iw g2l gl3ac gl3adw glaf2 glan5e gl3ant glas3 g5las. g3lat gl5au. gl2e g3le. gl3ech gl3edi g5leisiaso g3leo gl3es gl3eu gl3f gl3ia gl3id g3liw gl4odi gl4ody glo4e gl4of 5gl4oga glo2i g4lu. g4lwc g4l4wm g4l3wn g4lwyf gl3yc g3lyd. gl4ym gl4ys gl4yw g2n gn2i gn3io g4niw g3nï1 gno3e gn2of gn2u gn1w gn4yw gobl4 g1oc goddefad4 go5ddr g2od2y god5yn g2oe go5fau go3fer goff4au gof4un gog2 go3gan gog3e gog4l4 go5gyn g3ol. goleu5 3g4oll3 go4lw gol5yga gol5yge gol5ygwy g3om. go3me gon5ad g4one g3ont gon4yn g2or gor5chy gorddad4 gord5i g4orf gorn4an g4orol gor3t 1gos gosb3a g3ota g3ote g3oti g3oto g3otw g2r gra4m gran3a gr4el gr3f gr2i g4rid4 gr3ie gring4 g4r3ir g4rit. gr2o gr3od gr4oe gr5oed grof4 grog3 gron4a gro5nas gron4ed gron4es gr4ono grwn5a gr3wo gr4wt gr2wy g5rwydd g4ryc gryg3 grygl4 gr4ym gr4yn g1s2 gsym4 gub3 gudr4 gu5edd gu4to gw2 gwa5r4as gwar4es gw4as g3wc gweithiad4 gwelad4 gwel5e gwen3a gwerthad4 gwm3 gwn4a gw4n4e gwobr3 g3wr. g4wrd g5wth. gwy3by g3wyd. gwydr5 g3wyf gwy4r gwyw3 3gyb gyb3y g1yc gych3 g4ycho gydd4f5 g2ydi gydl4 gyd3r4 g4ydu g4ydy 3gyf gyf5an gy4fe gy4fl gy4fr g3yl3a 3gylc g3yle g4ylio g3ylo g3ylw g2ym gym4an gym3u gyng3 g2yno g2yr g4yro g2ys gy4se gysg3 gys5on gys3t gys5to 3gyw gy3wa gy3wed gy3wi gy3wy hab3yd hadd5as hadd3o had4eg had4eny h4adf had4fer hadl4a had3n had3r4 h5aeol ha4f3a h4afl haf5ol h4afs hag3w h1ai h4aif hal3e hall3o hal3o ham4enn hamn4 ham3s han3ad h4anau hanc4 han3d ha4ne han5edd han4er h4ange hanghen4r han3ig han3l han2o han4oda han5olai han5olas han5ole han5olwy hanrhyd4 hansodd4ei har5adwy. hara3t harato4en har4bwr har4cha har4fo h1as h3asf hast4a ha4tr hatr3e h1au hawe5nas hawe5ne hawl3 h2â h1b2 hbl4a h1d2 hddad3 h3di hd4ir hdo3na hdo3ne hd4ra hdr3e hdr5oc hdr5od hdro5ed hdr5wyd h4dwr h2eb h3eb. heb3ra hedd3 hedd4fo h2ede hed5fo hed5fw h4edid h4edir h4edit h2edo hedr5wy h4edu h4edy h2ef h2eg hegn3 h4egy he4ho h2ei2 h4e3ia h4eil heimlad4w h4el. 4helad 4helaf 4helai 4helan 4helas h3eld 2hele 4heli 2hel3o hels4 2helw 4hely hel3yd h1em hen5cy hen4id hens4 hen3wy henwy5na henwy5ne heny5na he3ol her3b h2ero h3esi h2et h3ete h3eto 5heuae heu4aetha heu3d heu2l he4wi hewy5nas h1f2 hfil4 hfonhedd5 hf4os hf4wy h1g2 hgan3 hgap2 hgi5ai h1i2 hiach4 hiac5has hiac5he hiac5hw hi4a4n hib3 hidl3 h2ig1 hig3y hin4t hir3 hi4wa h2ï1 hï4en hl2 hl4ad hl5adw hl4am hla3na h5las. hl3asi hl3aso hl4aw hl5ech. hl5edig hledr5 h3lef 4hleit hl4en hl4et hl3id hlon3a hlon5e h4lus h4lwm h5lyd. hl3ydd hlym4u h4lyn hl3yn. hlywad4 h1m2 h3myg hmygad4 h3myn. hmy3na hmy5ne h5myni hn2 h3nad h2neg h4new hn4ie h1nï1 hnod3 h2nol hn5ole hn4yw ho4ad. ho4bl hod4l ho4dy ho4en hoffad4wy h3og. h3o4ga hog5lu ho2h h2ol h3ol. hol5ud h1om h2or h3or. hor4c horn4an h4os. hosb3 hos3o h2ow hp2 h2r hra3dd hr3adw hr3af. hra3g hr4aid. hr3ant h5raul hr5edig hr3em. hr3f hr2i hr3ia hr3id. hrid4a hr3ie hring4 hr3ir hrisiad4 hr3it hr3iwy hr2o hro4ad4 hr5och. hr3odd hrog3 hr3om. hron4a hro5nas hron4e hrong5 hr3ont hr4ud hr3wn. hr5wyd. h5rwydd. hr3wyf h4ryc hryg3 hrygl4 hry3l hr4ym hrynho4e hrynho4i hrynho4wn h4rys h1s2 hsef4 h2t h2u hub5on hudd3 hudd5y hudr4 hud3w hud5yl h4uge hug4l hun3ad h4unn h3ur. h3us. h4use h4ust h4usw hw2a hw4as hwbl5e hwd3 hw2e hwedl5 h3wei h4wel. hwen3 hwen4y hwe5nychaso hwe5nyched hwerw5 hwe5ug hw2i hwiw5g hwm3 hwn4e h3wr. h2wy h4wy. h4wya hwybr4 hw4yc hwyll5t hw4ym h4wyo h5wyol hwy4r hyb4l hyb4wyl hyb3y hydd4id hyd4fo h2ydi hydl4 hyd4naw hy4f3a hyfad4 hyf4ae hyfar5f hyfer3 hyffel5 hyffred4in. hyf4iai hy4ga hygl4o hygl4w hygr4 hyll3a hym4adw hym4ant hym5el hym4en. hymerad4 hym3o hymp4 hym3u hym5yr hym5ys hyn3a hyn3e hynef3 hyn3yc hyr3a hyrdd5 hyrf3 hyr5n4o hyr2w hys4b hy4se hysg5od hys4ig hys4n hys5oni hyt4bw hyth5ru hyt2u hytun4deba hy3was hy3we hy5wed hy3wi hy3wyd 1ia iab4a iach2 iad3 i4ada 5iadaeth. iad4lo 5iaduro i3ael 3iaet 4iafo iag3w 2ial1 ial4ae 2i3am2 iam3h ia3na 4iand ian5da ia3n2e 4i3ang iang4e ianghen5 ian3o ian3w 2iar i3ard i3arf iar4l iarll5 iar4s i3asg iat5er i2au iawnad4 2ib ib3ed ib3el iben5y ib3es ibetr4 ib3i ib4il ibl3e ibl3o ibl3w ib5og. ib3on ibr3a ibr3w iby4nad4 2ic ic3en ichl4 ic5ied icon2 ic5oni ic5rwy ics4i ic5siw ic3t2 2ida idal4 2idd i4ddai idd4au i2dde idd3f4 idd3i i4ddir i4ddod idd3r 2ide idel4 ider4 2idf idf4w 2id3i idi4a id4lo idl3w 2idm 2i2d2o id3og i3dola i3dole i3dolo i5dolwy ido3na ido5ne i3dor 2idr idr4a idr4o id3rwy 2idu 2idw idw3a idwad4w id4wr 2idy id3yl id2ym 1ie 4iedd 4iedi. iedif5 ied4yl 2i3ef i3eg iegwydd4 2iei i3eid ieis4 4ien. ien4a ien4c 4iend i3ene 2ienn ienw4 i3eny i3esg 2if if4add if4ae if4al ifan3a ifan5e if4ao if4ar if5ard ifar3e if4at if5ath if4aw if5bin i4fec i4fed. i4fedi i5feio i5feiw i4fem ife4n i4fent i4fer. i3fery i4fesi i3fet iffl3 iff5or i3ffu2 iffy5na iffy5ne if3i i3flas if4on. i3fre i3fry i1fu i4fwc i4fwn i4fwyd i4fwyf i1fy i4fyc i4f4yl ify5re ig3ad ig3af ig4ain 2igan 4i3gar ig1e ig3ed ig3es ig5hal4 2ig3i ig5lan. ig5lann ig5law ig5let ig4l3o ig4ly ig5lyd igl3yn ign1 2igo ig3odd ig4ode ig3oe ig3om 2igr i3gre igref4 i3gro ig3rw igryb4 2igw ig5wai i4gwc i4g3wn ig4wrn 2ig1y igyff4 ig5yn. ig4yna ig4yr igys4 ig5yso igysyllt4 igyt4 igy4w 2i1h2 i2han ihat4 ihe4w 2i1i i3iw 2i2l il3a 5ilau. ilc2 ild5ir il3ed il5en. ilew4 il1f ilf4y il3i il4ip ill3 ill5iw illt4 il3oc il3od il5ofy il3on il2s3 il4sy il4ti iludd4 il3un il1w il5wai ilwen3 il4ws il3yd il3yg4 il3yn. ily3na ily5ne i4lysia il5ywa 2im2 im4bi im3i iml3 im4le 2in in1a in3ac in3ad in3af in3ai in3an in2be inc4e in4ci inc2o in4cy in4dai in1e 3in4eb in3f ing5en in4g3o ing3w ing5yl in5gyn in3ia in3id in5iew in3ig iniw4 in4iwe in1o in4ode in4odi in4ody in3oed in3on in3os int4a in4te in2t3r in4ty in3w2 in5wyc in1y 1io 3io. 2iod. i3odde iod5le iod5wy 2ioe 2i1of iog3 4iolc iom3 i2on ion3a ior4c ior4f i4orw 2ios 2iot 2ip ip5ell ip4og ir1 ir2a ir5agl ir3an ir4áf ir3b irch3 irdy5na irdy5ne 2ir3f 2iri i4ria ir3io i3ris ir4li ir4ll ir3na irnad4wy. ir3no irn4y 2ir3o ir3w irw2i ir4wo ir2y ir3yn i3ryw 2is isaf4 is3b is5eld is2er is5er. is4gam is4ge isg3o is3gr isg5wyd is3gy is4la is5myn is2o is5odd is3ol is3on ist2 is4ti is5tol is2w is3wn is5wyd. is4yc is4yr 1it. 3it2a 2ith1 ith3a ith4au ith3eg ith3i ith5or ith3w ith3y 2iw. iw3adw iw3af i4wair i3wal iw3an iw3as 3iwc iw4ch 2iw1d2 iwd4i iw5edd. iw3edi iw3eid iwg4w 2iw1i iw1l2 iwl4e iwl4i iwl4o iwl4w iwm4e iwmp4 3iwn iwn4i 4iwnl iw3o i3wre i3wrt iw5ter 1iwy iw4yd iw4yf iwyn3 4iwyr 1iy 2iyd 2i1ym iyn3 2i1ys ï3ae ï2i l1ac lach3 2lad. l4ad4d3 lad2m lad2o lad3r4w 4laen l3af. 5lafar l1ai l4ain l4air l4ait lam3 l4an. lan5ced lan5de landr3 l2ane lan4es l4ann lan3o 4lant3 lar3a lar4ia lar3n l1as l4as. lasg4 last2 las5ta 4lat. lathr3 lats5i 2l3au law5dde lawen3 law3l law3no lawr2 law5ro law3y 2l1b lb4an l2c lch1 lch5io lch5iw lch3r lch5wyd. l3co lc3yn. 2l1d2 ldd2 ld3i ld4ir ldro3 ldy5na ldy5ne 1le. le3a le4ad. le4ada lebr3 lech3 l3ed. leddf5 l4eddog led5fy led3l4 l4edr lef1 lef3e lef3y l2ega leg5ar. l2egw leg5yr le5iau le3id. lei3l4 le3ir. le3it. le4iw l3el 2l1em l3em. l2ema len2d len5di len5ig l3ent len3y 1leo le3oc le4on. l3er. l4erau ler5ig lesg5e l4esn let4em le4tr l4euad l4euh 4leuon l5euon. le3wch le3wn lew3yn lf2 lf5air l3fan lfe3ne lf4fa lff4y l1fi lf5icy l1fo lf5oda l1fr lf4wy lf3yd lfy5re l1g2 lg4an lgo4f3 2l1h2 l3ha l3he l3hi l3ho l3hw l1i2 liach3 4lian libr3 2lid li3de 1lif1 li4fr 4lio. li5oed li5pal 2lir l3ir. lis4g3 l3it. lith4r3 l4iw. l2l 2ll. ll4ada lladr3 ll5adwy. ll3ant ll5arn lledr4e ll4edy lle3o llest4 lleu4a ll1f llf4y llin3e ll3odd llosgad4 ll5tyr lludd3 llw2 ll3wa llw4e 5llyd. llygr3 ll4ynn ll4yr2 ll5yro lm2 l1ma l4mad l4maf lm3ai l2m3as l4mau lm3o lm3w lm4yn l1n 2lo. lob5yn 2loc loch3 2lod lodd3 lo3ed. l1og3 logl2 l1ol lol2w lolyg4 2l1om l3om. lon2a lon3d lon4es 4l3ont l3or. l4orau l4org l4ory 2lot lo5ynn lp3a l3pu l1r2 l3rh ls4ig l4syn l2t lt3ad lt5eg. lt3em l5tera l5tero l4tia lt4ig l4tio lt1o l3tra ltr4e l3tu l4tu. lt1w 2lu. l2ud ludd5y lud3w lu4edd l2un3 l4un. lur5ig lust5l lw1a lwadd4 lw4ae l1wc l3wch lw3ed lw3er lw3es lw4fa lwfr5e l4wgr lw1i lw4ig l1wn l3wn. lw3o l1wr1 4lwre l4wyc l4wydi lwyd4io l4wyn3 l4wyr 3l4wyt lyb3 2lyc l3ych. lyd2 l4yd. 2lydd lydn3 lydr3 lyf3a lyf5an5 lyf4n3 lyf4r3 5lyfr. l2yg 4lygedd 4lygia lym3 l4ynau lyng3a l4yn3y lyr3a 4lysau 4lysen. lys3ga lys3ge l4ysl 4lysn 4lysr 4lysyn lyw1 m1 mab3 mab4i m3ac mac4w m4adad m4adaf m4adai m4adan m4adas m2adi mad4r3 m4adwc m4adwn m4ady mael3 maf4l3 m3ag 2mai m3am man3a man3e m4anf man2o m3ar m4ar. mar4ch3 m4are m4ari mar4l marn3 m4aru mar4wy masg2 mas3ge m3at mat5eg mat4o m3aw mawd4a mbarato5 m3bi m3by mcan3 md2 m4dai mdan4a mda5nas mda5n4e mdd2 mddadl4 mddef3 mddi4d m5der. m4dera mdog4aetho mdo3na mdo5ne mdro3e mdwy4 mdyng5 mdy5re 4meda 4meddia 4meddwr 4medi 4medï medr3 meg3n4 megni3 meith3 me4iw mel5yno mens4 ment4e mentr5 5menty men5yd m2er m3er. m3erad m4eradwy. m4eraf m4erai m4eran m4eras merch4er merdd4 m4ere m5eriada m4eroc m4erom m4eron m4erw m4ery 4mesia 4mesol mest4 4meswr 4mesy meu1 mfalchi5a mfalchi5e mffl4 mfydd4 mg2 mgyff4 mgyffr5o mgym4 mgym5eria mgys2 mh2 mhar5ad mheir4a mhe3na mhe5ned mhe5nes mhen3t4 mhen5w mhet2 mhe3ta m2heu mhob4l mhr4a mhryf5 mhyd4 mhy3f 2mi m3ias m3id3 m3ie mi5gei min1 min4t m3io m3ir mis2 misg4 mis4i m3it m3iw m3iy ml2 m2las ml5blw m3led mlew3 m3lin m5liwiais m5liwiase m5liwiwy mlo3na mlon4ed mlyn3 m2n m3na mn4as m3ne m4ned mn5edi m5niau m3nï3 m2od m3odd mod4ig mod3r mof5yd m3og m4on. mon3a mon4d m4onï mor2 mor3c mordd4 morddiw5 mor4o m3os2 mos4i mo5siy m2p mpr3a mpr3o mpr3w mp5wai mr2 m2r3ai mra3na m2r4ed mreg3y m4ria m4rie m4rig mro4ad mrod4iae mrod4ir m2roe m2roi m2roo m2row m4roy m4ryn mryn4d mrys4o ms2 m3sa m2se mse3na mse5ne m2so mstr4 m2t mt2a mtas4 m3th m2u mu4an mudd4l mud3w mu2l3 mun3 m3us m3w2a mw3as m3wch m3wi mwr2 mwr3i m3wt mwy3b mwyllt4 mwyn3 m5wyse mwyth4adw mwyth4af mwyth4asan mwyth4aso mwyth4asw mwyth4ec mwyth4em mwyth4er mwyth4i mwyth4oc mwyth4w mwyth4y 2m2y m3yc mych3 m3yd mydd5i mydr3 myd3y myf4y m4yl. myl3a m4yln m3ym myn4ai. m3yr myr4as myr5asa myr4edi myrf4 m3ys m4ysg. mys4w myw3y 3na3b2 na4bl na4bo na4ch3 n2ad n3adl nad4n nadna4 n4ado nad3r nad3u nad3w n3adwr n1ae nae5ara nae5arw nael4 n2afa n5afau n2af3o n4afy n4aic n4aig n4ain n4air n3al nan3a nan3e nan3f nap4om n3ar narllenad4 n3asg n4asol n3as4t 1nat nau3 n1b2 nbyd5r n2c nc3an nc5des nc4ed nc2ei nc5en. n3ch nchwiliad4 n4cia n4cid n4cie n4cio n5ciod. n4cir n4cit n4ciw n4ciy n3cl ncr1 nct1 n5cyd. n5cyny n1d2 nd3as nd3aw ndd2 nd4da nden2 n4d3ia nd3ie n3di3f n3di4g n3dil nd3io nd4ir n3dis n3dit nd3iw nd3iy n3dod nd3oe ndo3ra ndo5r4e n2dwr ndy5na ndy5ne n4dys neallad4 n2eb1 neb3o n5ebry neddf5 n2ede n4edid n5ediga n4edir n4edit n2edo n4edu n3edy n1ef nefn3 n4efy n1eg neg5in ne3h n3eidd n2eis n1el 3nel. nel5yn 3nenty ner3a nerch5 n4erg n4erl 3nert 3nese 4nesia n4esio nes4m 3neso n2est 3nesw n2esy neth5o n2eu neu3d n4euf neul4 3new new5yll. newyn3 n1f2 nfadd4 nf4am nfan3 nfan5e nfan4t nfa5ol nf4at nfel2 nff2 nf4fa nff4o nffyn4 nffynad4 nf4id n4fil nfod4l n2fon nfon5a n5fonedi nf4ri nf4wy n2fy n5fyd. nfyd3a ng2ad ng5adwy. n4gai ngal4 n3gam n3gar n4gau ng4ddy ngel4 nghwyn5 n2gi n2gl2 n3glwm n4gly n5glym nglyn3 ngn2 ng3oe ngof3a ngol4ed ng3on ngop2 n1gr ngr4a n2gw ng4wi ngwy5nas ngy3f n4gyn 2n1h2 nha3o nhar4 nhaws4 nheb5r nhe3na nhe3ne nhep2 nh4es nho3ed nho5esi nho3n4a nhon4e nhudd4ed. nhu4e nhyc4 nhyd2 nhyl4 nhym4 n1i 4ni4ad n5iald ni1b nib4a nib4e nibryd4 ni1d nidd4 ni5dde nid4e n3ie ni4et ni3eu n4iew ni3fed ni3fen ni4feryc ni3ffr ni3fw n2ig n5igam nige5na 4nigiad n5igiad. n5igiada 5nigiadw 4nigion n5igion. 5nigiont 4n5igiwr nigl4 4nigy ni3gym4 nilead4 nill5adas n5illio ni3lu ni3lys nin2 ni3no nin4w ni3or ni3ra nir4e ni3ri ni4rw ni3rym nis3g ni3so nis3ty ni3sw ni3sy nith4e niw2 niw4a ni4wc niw5eddas niw5edde niw5eddo niw5eddw niwl3 niwl5e niwl5o niwl5w ni5ydd n2ïi nï4yc n1l2 nladr3 nlin3 nll2 nllon4 nl4lw n4llyn n2ly nly3na nly3ne n1m2 nmolad4 n1n2 nn4al nn4ar nned4 nneth4 n3nh nni2 nnif4 nni4l nnill4 nni4o nnis4 nni4w n5nos4b nn4wy nny3na nny5ne nn4yw no4ada n3ob n2od. n2odo nod3r n2oe noe4o no3er 3no4et n1of1 nof4el n2ofy n1og nol5eg nom3 n4omi n5ones n1or norch4 nor4f 2nos3 nö5es. np4et n1r2 nre4o n1s2 n2se n3sei ns3en ns3i ns4ic ns4ig n3s4il ns4iy ns5iyc n3siyn nsy3na nsy3ne nt3ad nt5af. nt5aid nt4ana nt3aw n2te n3tei nt3el nt3em nt3er. ntew3 nth2 n4tia nt5il. nt4in n3tis nt3oc nt3od nt5od. nt3oe n4t3or n1tr nt1w nt3yn nty3ra nty3r4e n1u nud2o nun4i nut1 nw3af n3wait nw3an n3war nwar4ed. nw3as nwbl4 nwb5le nwd3e n5wedd nw3edi n3wei nweithi5au nwelad4 nwen5d nw4ia nw3id nwir4 nw3ir. n3wis nw3o nwr5ei n4wy. nwybod4a n4wyc n3wyl n2wyn n4wyn. n3wyt nych3 nyf2 ny5fala ny5fale ny5falo nyff4 nyf4n nyf4o ny5fod nyfr3 n2yg ny3gy n1yl ny3lan ny3lu nym4a nym4y n5ynnau ny3n4od ny3ra nyrchafad4 ny3ri n1ys n4ys. nys4g n3yw 2o1a 2o2b ob3ae ob4an ob5ant ob3ed ob3el ob5en. oben5y ob5er. obl3a obl5ed ob3ler obl5es obl3o obl3w o3b4ly ob3o obr1 ob3yd oc1a oc5byn oc3e och3a och5an och5en ochl3a ochl5es ochl3o ochl3w och3n och4ni och3o ochr3 och3w och3y 2oci 2ocr 2oct 2od3a od4ao odar4 odd3a oddf5y odd5il oddiw3 odd3r odd5ri 4oddu odd3y odd5yd odd5yn odeb3 o5debau o5debu od5edi od5eid od3el od3er od3i odl3a odl3ec odl5esi odl3w od5off 2odog od4oga 2odr odr3a odr5ec odr5em odr3o odr5wyd. od4ry odr5yc 2odw od3wa od5wed od5wen od3yc od3yn od4ynn o1ec o4edd3 oed3i o3edig oedl4a oed5lan oed5ra oeg3 oel3c o1em oen3 o3ent oer3 oes3 oesg4o oet5an oetr3 2of. of3ad of3ai ofan3 ofan5e of3ant ofa5ol of5ebi of3ed of3el of3en of4enn of3er. o4ferl o4fery of4f3a off3ed off5id off3w ofiad4w ofl3 of3n of4na of4nd of4ne of4nf of1o of4odo ofr3a of3re of4rec of4red of4rem of4rer of5wyf of4yn ofy3na ofy3ne og1 og3ai og2an3 o4ganau o4ganu og3as og4edy og5elyn og3er og5erd og3es 2ogf og3i 2ogl ogl3w ogl3y 2ogn3 3og2o4f og5oru og3rwy o3gry og3yd ogyf4 og4yl og5yrn o1h2 oheb3 oher4 o1id oig1 o1ir o1it ol1 2olau ol4ce ol3d ol4da 4oleu ol3eua ol4eued ol5euo ol4euwr olew3 ol3i oll1 oll3e oll5ed ol4lt oll5wy olo2 o3los ol3s ol4sb 2olu 2olwr olw4y ol3wyd ol5wyno ol4yne ol4yni ol4yno ol4ynw 2oma om4at 2omb om2e om5eda om5edi om5eg. om3ei om3en om5isi 2oml om4og4 2omp om5pre on1 on5ach. on5adu on3af o4n3ai 4onair on3an o4n3au on5au. 2onb on5cyf 2ond on5did on2do 2one on5edd. on3el onest3 2onf ongl3 ong2o ong3w on4gyr 2oni 2onn 4onnu on5of. 2onog on2t 4onto on3w 2o1o 2op op3a op4ao op5aon opl3 opr5ai op5ren or1a 4orac or3ach or5aeth. or5aetha or3af or3ai or3an o4r3au or3aw4 or3b or2c or3chw or4dd or5ddyn ord3en or5din or4d5yn or1e or2eb or4edd ore5ddy 4oreg or4egw or4et or3fa orfa5na orfa5ne orff4e or3fo or3f4y 2or3g or3i or3l or4mu or4my orn3a or3nel or1o or3of or4oh oron5a or3one or5oni. or5onid or5onir or5onit or5pws 4orth. ort4i or4ty or5uwc or1w or5wah orw4e or4wel or5wgl or1y or3ydd 2os os3a os4ana osb3as osb5ed osb3o osb3w osb3y os5eai osg3a os3gl osgo5e os3gor osg3wy os5iae os5ibi os2o os3odd os3ol os3on os3te os3tr4 os4tu os3w os3y 2ot1 3ot. ot3e ot5esa oth3 ots4i ot5sia o2u o1wc owg3 owl5as owl3e o1wn owt5er o1wy o1yc oyw3 oy4we ôr3f p1 p2a pab5yd 2p3ad 2p3af 2p3ai 2p3an pa3od para3t par4c par3w past4 p3au pawe5na 2pec 4p5edig p2ei peir4a p5eli. pel3y 2pem pengl4 pens4 pen3t2 pen3w penwy5na 2per 2pes pet2 pe3ta p2h2 pheir4a phen3t4 phen5w phet2 phe3ta phob4l phr4a phryf5 p3ia pib1 p3ie p3io p3iw p2l pla3na p4lau pl5eda p4lyc 3plyg po4b4l pog4y pol3 p2r2 pr3as pryf3 pr5ynn p2s ps4iw pt2 p2ud p4usr pw2 pwd3 pwr1 p4wy. pydr3 p2yr r4abe r4abi rab5lyd rab3y rach5wy r4a4ci racs4 r4a4ct r2ada r4add radd5ol rad4ri radwr4i r2ae raed4 raeddad4 r4aen ra5fann ra5fán r4aff rag1 ra4ge rag3o ra3gra ra4ha ra5hau r1ai 4raidd ram3od ra5mor ra3m2w ran4d3 ran2e r4anf ran3o r4anod. ra5phe r3ar3 rar4c 2r1as ras4ie ras3t2 r3atao rat3e 2r1au raw3e 5rawes 3rawi rawn3 2r1b r2ba r3bar r4bec r4bem r4bent rb4er r4bes r2bl r4boc r4bom r4bont r4bwc r4bwd r4bwn rbyd3 rc2a rc5adw rc5af. r3car rc3e rc4er r2ch rch3ad rch3an rch3ar5 rch5eb r5chei rch3et rch3l r3chm rch3oc rch3oe rch3og r3chu r3chwa r3chwi rch5wyd r5chwyn rch3yc rchyf4 rchym4 r1cy 2rd2 r1da r3dai rdan3 rd5au. r2dd rdd3ad rdd5as rdd5ell rdd5in rdd5iwy rdd3o rdd4od. r5ddodi r3dd4u r4ddu. rddw4 rdd3yc r5ddychw rddyrch5 r5ddyw r1de rd3i rd4in rd4ir r1do r5dod. r1dr rdro3 rdro4ada r3dw r1dy rdy4n rd3yn. re3a r3ebai r3ebas r3ebe r3ebi rebl3 r3ebo rech3 rec3i 4redd r5edd. r4edio r4edol r4edwr red4yn. re4fa refn5y ref3y r4egl r5egl. r4egog re5iau r4eic re5id. reidd5 r4eig r4eil r4eine re5ir. re5it. re4iw r3ell r4emi ren4d r4eng3 r4eni ren3in r4ennyd re1o r1er r4er4id rer5in restr3 r4esw r4eua r4euo r2euy re4wi rew5id re5wn. rew5ynn 2r2f r1fa r4f3ad r4faeth. r4faf r4fai rf4ao r4fas rf4at r4fau r3fedw rfel3 rf3en rf4eny rf4ey r4ff. rff3i rff3l rff3o r3ffw rff3y rf3id r5fil. r3fl rf3lu rfodad4 rf5ol. rf3on rfor2 rf5ord r3fr r3fu rf1w rf5wis rfyn5yc rf4yr r3fys 2r1g2 rgal4 rgan3 r3ge rgel4y rge3na rge5ne rgo4f r1h2 rhag5e rhag3l rhag3o rha3n4a rhan4e r4haw rh4es rhew5y rhif3 rho4ec rhon5a rhost4ir rhugl5 rhyf2 rhy3n4a rhyn4e ri2 2ria r4iaethu riaf3 r4iag ri5agl r3iai r4i5aidd ri5all ri4an r5iant r3ias r4iaw ri5awd rib3e ribl3 rib3w rib3y ri5can r4ida ridd3 ridd5y r4idi rid4yllau 2rie ri3ei rif1 rig3 r4igo ri3i rin5dir rin3e ringl5 r4ini r4inl 2rio r3ioc ri5odad ri5odaf ri5odai ri5odan ri5odasai ri5odasan ri5odase ri5odasi ri5odasoc ri5odasom ri5odasw r3iodd ri3ode ri3odi ri5odoc ri5odod ri5odom ri5odon ri5odwc ri5odwn ri5odwy ri5ody r4ioe r3iom ri3ong r3iont r1ir ris4g risgl3 rist3 3r4ith 2riw ri4wa riw3l4 r5iwr. 2r3iy r1l2 rla3na rla3ne r3lew rl3ia rl3ie rl3io r3ll r4ll. rll4e rllen3 rl4l4w rl5og. r3lon rludd4 r3lw r2lym rlyn3 rl5yn. r1m2 r2ma rm4ac rm3i rm4il r2mo rm4od r3my 2r2n1 r4nai. r4nau rn4es. rn4esa r5nest rng4e rn3i rn5iae rn4ii rn5iol r3n2ï1 rn4os rn3y rn4yw 2roa 4road 4roau rob3l4 roch3 rochl4 ro3cr rodd3 r4odr rod5rw ro4ea roed3 ro4eo ro3er r2of rof3l4 rofun4ed. rof3w r3og. r4ogae ro4ge rol3 r1om3 r4onau rongl4 rong5lwy ron3i r4os. r4osf rosg4 ros3o 2rot rö5edi rp2 r1pa rpar3 r1pe rp5ech rp5em. r2pen rp5ent rp5er. rp5esi rp3i rp3o rp3wy rp3y r1r2 r3ra rr4og r1s2 rs4ai r4sau r2s3en rs3i rs4in rs5li. r2s3t2 r2sy r1t2a r4tau r4ted r3teis r4ten r4tes rth3a rth4eg r3thin rth3la rth3o rth5ol rth5ru r5thryc r4thw rth5wyon. rth5ydd rt4iy r1tr rtr4a rt5rwy rt2u rt3y rub4a r3uc rudd3 3rudd. run4i r1us rw2a rw3ad rw3af r3w4ag r3wait rwb5an rwbl3 r1wc r5wdenn rwedd3 r4weddog r4weddol r4w3eid r3wel r3wer r2wg rw5hel rw1i rw3in r3wl r4wnc rw4ni rw4n3o rwobr4 rw3od rw5old r1wr rwr5es rwr4iaetho rw2y r4wyb r5wydden. rwydd4iad4u r4wyde r4wydo rwydr3 r4wydy 3rwym rwyn3 r4wys 3ry. 3rybl ry3bo rych5wai r2yd r4yd. ry5dano rydd4on. rydl4 ry3f4a ryf2e ry3fer ryf4od ryl3a ryl2e ryl5it rym2r3 ryn3a rync4 4rynd ryn3e ryn3f ryng5a 4rynn rynod4 ryno5ded ryno5der ryn3yc rys3b rys5ba rysg5w rysg3y ry3wa ryw3i s1 sach3 saf3a saf3o san3a san3e san3o sarf5a sat4a sath4 sathraw4 s3au sá4it s2b2 sbad4w s4bai s3bet sb3iw sb5iyc s3bl sbr5io sd4or se2 sec4an sedd3 3sef se5ion sen5ol senw3 s4erc serch5 s4eri s2et sf4am sfedd4 sff4y sf4wy sf4yr s2g s5g4adr sg3adw s3gam sg3an sgar5a s3gaw s3geda s3gede s4gedig s5gedo s5gedw sgel4 sg5en. s3ge3na sge5ne s4gia s4gl. sgl3a sgl3o s3gn sg3ni sg3od sg4od. sgo4g3 sg4ol sg3om sg3on sg5oty sg5rwy sg5ryw s4gwc sg3wn s4gyc sgy4f3 sgy3na sgy5nes 2si s5ial. s5ialu si4am 5siand s4iar s3id3 sid4a s3ie s4iet s2ig s3ig. si4ga s3ige sigl3 5sigl. s3igr s5igyn sil4f sins4 s3io s3ir s3it si4wr s2iyn 2s2ï1 2sl2 sl4au slo3na slo3n4e s3ly slyw4 sm2 sm4ar sm4er smwyt5haso s4nau sn2e sneg2 s2n3i sn4ob s3oc sodd3 sod4l3 s3oe sof4l 2s3og3 s3om3 son3 s4on. s4onau son4deba son4der s3one s4ong sra3na sra5ne s2t st3ac s4tade s4taf st4am st2an st3as s4tau st5awc s4tec s4ted s4tei s4t3em s4ten s4tes st3f s5tiro stl3o st5lyt st2o s3tod. sto3ra sto3r4e st4ra s3tra. str3ec str3es str3oc str3ol s4tr3w str3yc st2u st3ur st5us. s5twyi styr3 s2u sur3 s3us sw2a s3wc swcr3 s3we s4wed sw5edd swen3 2swi swmp3 s3wyf swyn3 swy4r s2y s3yc s5ych. s3yd syf4l3 2syg syll3a syllt3 sym4l3 symudad4 2s3yn. syn4fe s3yr syr2a syr2e s3ys 3syt s4ywa 1tac tach3 3tad4l3 tad3r t1af ta4fa taf4l tag3 t1ai t3aid t5aliae tal2m3 t1an 4tanc tan3e tang5n tan3o tan3w t3ao 3tar4d tar4f t1as tat1 t1au tawl3 t1b t3ch t1ec t1ed tedd3 4teg. 4tegio t3eidi teimlad4w tel4y t3em. t4emi t1en ten4d te4ne terf4 terfyn5 t1es t4esa tes4io tet4a 3tew 4tew. 4tewc tew5id t1f tff2 tff4e tfod4 tfydd4 t1g2 tg4af tg4an tg4en tg4er tgl4a tgn2 t2gor t5gor. t5goria t5gorn tg4wc tg4wy tgy3w t2h thalad4 thal4m3 thang5n th4ar thar4f th4at that5y th1e th4ef th5ell therfyn5 thet4 thl3a thl5ent th5let th3n th5nod th1o th5old thollt4 thon4e thorad4 thr3ac th3red thr5ent thrid4 thro3f th5rwf thryd4 thry5da th3ug th3um th3un th3us th1w th3wa th4wl th3wyd th3wyf thwysg4 th3ych thydd5 th5yma thyrf4au thyr3w thy4w 2t1i t3ia tid3 t3ie t3in ting3 t4ino tion4 t4iono tï5ol. tl3a tl4ae tl1e tl4en. tl3on tl3wy t3lyd t1n2 t3och t4od. t3odd to4ec to3edi to4em to3esi tof3 t3og3 3tois t2ol tollt4 tol3y t1om t3om. t1on ton4e t3ont 3tor tor2a tor4c t3os to4wc to4wn tra3c tra3dd tr3adw tr3af. tra3g tra3na tra5ne tr3ant 3traw tr3ed 3tr4ef tref5a tref3l 4treg tr3em. tr3ent 3trew tr3id4 tr5ig. tro4ada tr3odd tro5fa tr3ola tr3olo tr3olw tron4o tr3ont 2trw tr4wm tr3wn tr5wyd. t5r4wydd tr3wyf try3da tryd4y try3f try3l tr5yn. 3tryw ts2 ts5ach t1se ts3i 3tud tudr4 1tum t1un3 1tur t4urm tw2 t3wai t1wc t1wn t1wr1 twr4n 3twya t3wyd 3twye t3wyf tw4ym 3twyo twysg4 3twyw t1yc t1yd tydd5y ty5gar ty3li tymp4 4t3yn. tyng5ad 1tyr tyr2a tyr4es ty3wr 2u1a ual3 u2and u4ane u3ar u3aw ub1 2uc uch1 uch3e uch5ed ud3ad u5dale udd1 udd3a udd4eg udd3el udd3f udd3i ud5eir ud3er ud3i ud1l udr3 ud5rwydd ud2w ud3wn ud3wr ud3yn u1e uedd3 u4estai. u4estau u4estwr u4esty uf5au. uff4y uf3y ug3ad ug3af ug3en ug3i ugl3a ugl3e ug3lw ugn3 ug1o ug1u ug1w ug3y u1h2 u1i ul3ad ul3af u5lan. u5lann ul3ant u5lath ul3d u2l1e ul1f ul5igr ull1 u1lo ul3oc ul3od ulon3 ulon5e ul1u ul1w ul3yc u3lyd un1 un4edy un5ell un5es. un3i unig3 un5od. un2ol un5ol. 2u1o uog3 u3os3 up2 ur1 urb4w ur5ddu ur3e ur5fau ur4fl ur2gy 4urn. urof4 ur2s3 ur4ty ur4ud u5rwydd ur3y ur4yw 1us. us4edda us5end usg1 4usi. us3o 3usr us3ter us3tod us3tr ut3a ut1e uth4r3 uth3u uth4un ut3o utr3 2u1w u2wc uwch3 u1y 2wa wac5ew wadd3 wad2n3 w5adwy. waen4i waer2 wag1 w1ai w3ai. w3aid w2air w3ais w4ait wallt5 w4an. wan3a wan3e wan3o war5ddr war3e war4edd war5ia warth4 wart5hai wart5has wart5hi wart5hw war3w 3w4as. w3ase was4g w3asi w3aso w4as4t w3asw wat5er w1au 2wb wbl5es w2c 2wca wc4ed wch1 4wchu 2wci wc5wll wc4yn 2wd wdd3eg w5ddew wd2e wd3ed wde3n4a wde5n4e wd3i wd4ih wd3ly w3dod. wdr1 wd4ra wdry4 wd2u w1eb3 2w1ec 2w3ed. w4eda 4weddf 4weddi 4wedi w3edig we4gi wegr4 wein3 well5ti wel3o welw5l 2w1em wen3au wen4d 2w3ent wenwyn5 wen3y 2w3er. wer4i wer5id w4ers wer4yd 2wes 4w3esi w4esir w4esit 5west. west4ai w1et w4eth 2weu weu2g weun3 2wf2 w1fa w1fe wff3a w1fi wf4id w1fo wfor2 w1fw wf4wy w3fy wg1 2wg. w5gig. 2wgl wg3n 2w1h2 w3he w3hw 2wi wi4an wib5an wibl5a wib5ol widl3 wi4fr 3wig1 wigl5e wil3 win5gada win5gade win5gadi win5gado w4ione wir3 wisg3 w1it 3wiw. wiw4e 2wl 3wlad. wlan3 wl4co wl3in w4lip wll5yn wl5ws. wl4yc 2wm wm3a wman3 wm4br wm2i wm5iai wm5ian wm4wl wn1 wn5adwy. wn2ae 2wnd wn3de wn3di wndr3 wn4ei wn4êl 2wn3g wngl4 wn3in wn3l wn2o w4n3oc wn3odd wn3og wn3ol w4n3om w4n3on 2wnw 2w1o w2od w3od. w3odd w2ol w3ol. w3olae w2or 2wp wp3e wpl1 wp5wrd wr5aet wrb5yn wrc2 wr3ca wr4ce wr4ch3 wr4ci wr5cwd 2wrd wr5dei wr3ed wreig3 wr5esi wr3f wr5fau wr4fi 4wri. wrid3 wr3id. wr3ie wr3l wr4ll wr3n2a wrn4es wr3no wr1o wr2t wrth3 wr1w wr4ws w5rwydd wry4w ws5bre ws3e ws3g ws4gl ws4ig ws4og ws4ta wst5an ws5ter. wstr3 ws4us ws3wa 2wt wt3a wtan3 wt3em wt5ery wth1 4wth. wth3w wt3od wt3wy wt3y 2w1w 2wya wy5alc 4wybr wybr5y wy3bu w1yc wych3 wyd3a 2wydd wydd4ly wydd4yd wydr3o 2wydy 2wye wy3fr wy3h 2wyi 2wyl wyl4deb wyll3a wyn5ad. 4wynd wyn3eg wyn3f wyn3g4 wy4ni wyn3o wyn3y 2wyo wyr3ad wy3ran 5wyrdd. wyrl3i 2wys 2wyt 2wyw wy3wr wy3wy 2wyy 2y1a y3ar3 y4ar. y4arn 2yb yb4ac yb5edd yber4 ybl1 yb3ly ybr1 ybr3i yb3w ych1 ychan5 ych4anwr ych5ei ych3r 4ychwe ych3wy ychwy5na ychwy5ne ycl3 2yd. 2yda yd3ad yd4al yd2an3 y3dana y3dane yd3ant y5danw y3dar yd3as yd3au ydd3 ydd5an yd4de yd4df4 yd4di4 ydd4in. ydd4of ydd5yn. yddy5ne ydd4ysg 2yde y3deb yd3ed yd4eddau yd3ei yd3er yd4eu yd5ffu ydfwr3 ydfyn3 yd3i yd1l yd4ma yd2ne ydne5b 2yd3o yd4od. ydol3 yd4os 4ydrau ydr3ec ydr3em ydr5esid yd3rew yd4ri 4ydria ydr3oc 4ydrol ydr5wyd. yd5rwydd 4ydry ydr3yc 2ydw yd3wa yd5wed ydweithi5ol ydwel5e yd3wr yd1y ydy4l y1e y3el y4era y4ern 2yf1 y4f3ag yf3ai yfan3t yf3are yf3arh yfar5wa yf3eda yf3ede yf3edi yf3edo yf3edw yf3ei yfel3 yf5erf yfer3n yf5esi yf5ewi yff1 yf4fa yf5fait yf5fei y4ff3i yff5in y4ffl yffr3a yffro5ed yffro5em yffro5en yffro5wc yffr3w yff3ry yf3i yfl4ed yflo3e yf3ne yf3no yf3ny yf3o yf5od. yfogl4 yf5rait yfra5ne yf5ryw yf3u yf5wng yf3yg yf5yn. yfy3na yfy5ne yfyng5 yf4yt yg1 yg3a yg5adu yg4ar ygeg4 yg4eid yg3i yg4il 3ygin ygl3a ygl3o ygl3w ygl3y ygn3 yg3o yg4oe yg4of ygr1 ygrad4 yg5wyd y4gyc 4ygyd y1h2 y2he yhe3i yhe3w y1i y3ie yl3ad. yl5adwy. yl3af ylan3 yl3ant y5law. 2ylc ylch3w yl4dera yl1e yl1f y3lin y4lit yll5ad. yll3e 4yllf yll5ida yll3o yll3w yll3y yl5nos yl3oc yl3od yl3on yl5ore y4lu. 4ylwe yl3wy yl1y ym5ait ym4al ym5an. yman5t ymar5w ymbl2 ym5edr ym4eri ym5es3u 3ymg ym3heu ym2le ym2li ymlo5ne ym4oli ym3on ymp3a ym4pi ymp5od ym3pr ymra5ne ymr5ig ymro5e ym4ru ym3se ym4um 5ymwyb ym3y ymyn5y ym5yra ym5yre ym5yri ym5yro ym5yrw yn4ada yn3ae yn3af yn3ai yn3an3 ynas3 2yn3au yn4aw yn5byn ync5ed yn3dir yn4eb yn3ec yn3ed. yn3edd yn2eg yn3ei yn3em yn3en yn3er y3nesa y4nesau 2ynf ynfyd3 2yng1 yn4ge yng5er yn3gl yniaw4 yni4d yn3i4f y3nig yn5igy yn3il3 yn3n yn1o yn5o5ad yn5odd yn4odi yn4ody yn3oe yn3os4 2ynr ynt1 ynt4a yn4te yn4ti yn4to yn4tu yn4ud yn1w yn3wa yn2w4e yn3wy yn4wyr yn1y yn2yc ynydd5 y1o ypl3a ypl3e ypl3o ypl3w yp3ly yr3ae yr3af yra3na yra3ne yr3ant y4r3au yr4ch yrch3e yrch3o yrch3w yrch3y yr4dd3 yr5ddyd yr1e yr2ei yr5el. yren5d yrf3e yr3ff4 yr4fu yrf5yd y4ria yr3id yr2l yr3ly yrn3 yr1o yr5ol. yr2s yr1w yr5way yr1y 2ysa ys3aw 2ysb ysb5ïw ys4bl ysb3yd 2yse ys5etl 2ysf 4ysgar. ys5garai ys5garasa ys5garia ys5garwy ysge4 ysgl4e ysg5lw ys4gn 3ysgr ys4gy 2ysi ys5ni. 2yso ys3od 4ysol ys5ol. ys3ta 4yste yst5eb ys5ted ys3ter ys4try yst4w ys3u 2ysw ys4we ys4wi 2ys3y ys4yg yt3ad yt1e yth3a yth3e ythi3e yth3l yth3o yth4re ythr5ec ythr5ed ythr5es yth5reu ythr3o yth5rwb ythr5yc yth5ur yth3w yth3yn yt5iro yt3o ytr2 yt3ras yt3s ytw5ad yt3wy yt5ysa 2yw yw4ae y3wait y1wc y3wedd y5weddia yw5eg. y4wel yw5en. yw3es yw1g2 y4wia yw3id y4wio y4wir. y1wn yw3ol y2wr1 ywr4a ywr5ain y4wyc y3wyf ywy3na ywy5ne y1y}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-af.rme0000644000175000017500000000205511761001300024620 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Afrikaans hyphenation patterns (more info about the licence to be added later) % Hyphenation patterns for Afrikaans % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % ----------------------------------------------------------------- % VERSION: 0.9 (October 2010) % % AUTHORS: Tilla Fick and Chris Swanepoel % hyphen at rekenaar dot net % ----------------------------------------------------------------- % % Define lefthyphenmin to one and righthyphenmin to two % (although righthyphenmin could technically be made one, % in allmost all cases a value of two gives better results): % \lefthyphenmin=1 \righthyphenmin=2 % % ----------------------------------------------------------------- context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-es.hyp0000644000175000017500000000017111761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-es.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fr.pat0000644000175000017500000002163311761001300024645 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-fr.rme % used: ' a b c d e f g h i j k l m n o p q r s t u v w x y z à â ç è é ê î ï ô û œ \patterns{ 2'2 .a4 'a4 .â4 'â4 ab2h .ab3réa 'ab3réa ad2h a1è2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesthési .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 .anti2enne 'anti2enne 'anti1é2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta a2s3tro 1ba 1bâ .bai2se3main 1be 1bé 1bè 1bê 4be. 4bes. 2bent. 1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. 1bo 1bô 1b2r 4bre. 4bres. 2brent. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 1ce 1cé 1cè 1cê 4ce. 4ces. 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. .chè2vre3feuille 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 .cons4 .contre1s2c .contre3maître co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. 1cu 1cû 1cy .cul4 1d' 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. .dé1a2 .dé1io .dé1o2 .dé2s .dé3s2a3cr .dés2a3m .dé3s2a3tell .dé3s2astr .dé3s2c .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p .dé3s2t .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. 1do 1dô 1d2r 4dre. 4dres. 2drent. d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .ê4 'ê4 .é4 'é4 .è4 'è4 éd2hi 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. 1fi 1fî 1f2l 4fle. 4fles. 2flent. 1fo 1fô 1f2r 4fre. 4fres. 2frent. f1s2 1fu 1fû 1fy 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. résur3gent. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. 1g2n 'a2g3nat .a2g3nat a2g3nos co2g3niti 'i2g3né .i2g3né 'i2g3ni .i2g3ni .ma2g3nicide .ma2g3nificat .ma2g3num o2g3nomoni o2g3nosi .pro2g3nath pu2g3nable pu2g3nac .sta2g3n .syn2g3nath wa2g3n 4gne. 4gnes. 2gnent. 1go 1gô 1g2r 4gre. 4gres. 2grent. 1gu 1gû g1s2 4gue. 4gues. 2guent. .on3guent. 'on3guent. 1gy 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .î4 'î4 i1algi i1arthr i1è2dre il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l 1informat .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1é2 'in1é2 .in2effab 'in2effab .in2é3lucta 'in2é3lucta .in2é3narra 'in2é3narra .in2ept 'in2ept .in2er 'in2er .in2exora 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .interé2 'interé2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat 1j 2jk 4je. 4jes. 2jent. 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé 1mè 1mê .mé2g1oh .mé2sa .mé3san .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal m1s2 1mu 1mû 1my moye2n1â2g 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. 2nent. réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny .o4 'o4 'ô4 .ô4 o2b3long 1octet o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. .pen2ta per3h pé2nul .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis 1pi 1pî 1p2l 4ple. 4ples. 2plent. .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. .pré1a2 .pré2a3la .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py 1q 4que. 4ques. 2quent. é3quent. élo3quent. grandilo3quent. 1ra 1râ radio1a2 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi .re2s3ciso .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 .ré2uss .rétro1a2 4re. 4res. 2rent. .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. 2sent. ab3sent. pré3sent. .res3sent. .seu2le .sh4 1s2h 4sh. 4she. 4shes. 2shent. 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. 2tent. .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty .u4 'u4 .û4 'û4 uni1o2v uni1a2x u2s3tr 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. 2vent. conni3vent. .sou3vent. 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. 1vu 1vû 1vy 1wa 1we 4we. 4wes. 2went. 1wi 1wo 1wu 1w2r 2xent. .y4 'y4 y1asth y1s2tom y1algi 1za 1ze 1zé 1zè 4ze. 4zes. 2zent. privatdo3zent. 1zi 1zo 1zu 1zy}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ru.lua0000644000175000017500000021174612161703335024703 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="абвгдежзийклмнопрстуфхцчшщыьэюя", ["data"]="ас-бест бездн биз-нес-мен буй-нак-ске вбли-зи взба-ла-муть-ся вздрем-нешь во-до-сли-вом волж-ске воп-лем вопль вост-ра во-ткать во-ткем во-ткешь во-тку во-ткут впол-обо-ро-та впол-уха все-во-лож-ске вцспс га-рем-но-го го-ло-дра-нец грэс дву-зу-бец днепр добре-ем до-бре-ем-ся добре-ет добре-е-те до-бре-е-тесь до-бре-ет-ся добре-ешь до-бре-ешь-ся добрею до-бре-юсь добре-ют до-бре-ют-ся до-бре-сти до-бро-дят до-брось до-брось-те до-бро-сят до-бро-шу домну доп-пель драх-му дрейф-лю дрейфь-те еди-но-жды зав-сек-то-ром за-мру за-члись из-древ-ле изо-тру ин-ког-ни-то искр ка-за-шек казнь кольд-кре-мом корн-па-пир ксендз лик-бе-зом ло-шадь-ми людь-ми лю-э-сом ма-зу-те ме-ти-лам ме-ти-ла-ми мно-га-жды морщь-те на-бе-крень навз-ничь на-вскид-ку на-встре-чу нагл на-изусть на-ис-ко-сок наи-ме-нее на-ис-кось на-обо-рот на-от-рез на-супь-ся на-угад на-уголь-ник не-ост-ра нес-лась нес-лись нет-то не-уду обидь-ся обо-шлось об-ра-сти од-на-жды ослаб-ла ото-мстят ото-мщу ото-тру отру отрусь паб-ли-си-ти па-на-ме па-на-мец па-ра-так-сис пе-ре-вру пе-ре-ме-жать пе-ре-ме-жать-ся пе-ре-шла пис-чая по-все-дне-вен по-гре-мок по-до-тру по-ис-ти-не по-лу-то-ра-ста по-лу-явью по-млад-ше помни по-мнись помни-те по-мни-тесь по-мно-гу по-мру пол-вто-ро-го пол-шка-фа по-на-доб-люсь по-трафь-те преж-де прид-ти при-шла при-шлось про-тру про-хлад-ца пско-ва пыл-че раз-орем-ся раз-оре-тесь раз-орет-ся раз-орешь-ся разо-тру ра-зу-мом резв-люсь рсфср сан-узел сдрейф-лю се-го-дня сме-жат со-блю-сти со-лжешь сост-рим сост-ришь сост-рю сост-рят со-ткать со-ткем со-ткешь сотку со-ткут срос-лась срос-лись стрем-глав так-же тве-ре-зо-го те-ле-ате-лье тер-но-сли-вом троп-лю тьфу узу-фрукт умнем умнет умнете умну умру услышь-те ушла фо-то-пле-нок ца-ре-дво-рец че-рес-чур чер-но-сли-вом чресл чуж-дость шесть-де-сят юсом ядо-зу-бе ярем-но-го", ["length"]=3191, ["n"]=184, }, ["metadata"]={ ["mnemonic"]="ru", ["source"]="hyph-ru", ["texcomment"]="% Russian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: TODO:WRITEME (2003-03-10)\ % Author: Alexander I. Lebedev \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % Russian hyphenation patterns, version 2003/03/10\ % Copyright 1999-2003 Alexander I. Lebedev \ %\ % This program may be distributed and/or modified under the conditions\ % of the LaTeX Project Public License, either version 1.2 or any later\ % version.\ %\ % Patterns were generated with patgen from a 990,000-word list and then\ % manually corrected.\ %\ % The program consists of the files ruhyphal.tex, cyryoal.tex and two\ % document files README.ruhyphal and hyphen.rules. The file cyryoal.tex\ % can be regenerated using mkcyryo script (a part of ruhyphen package)\ % and the latest release of rus-ispell dictionaries\ % .\ % ", }, ["patterns"]={ ["characters"]="-абвгдежзийклмнопрстуфхцчшщъыьэюяё", ["data"]=".аб1р .аг1ро .ади2 .аи2 .ак1р .аль3я .ар2т1о2 .ас1то .аст1р .ау2 .би2о .во2б3л .во3ж2д .го2ф .дек2 .де1кв .ди2ак .ди1о .до3п .до3т2 .епи3 .зав2р .за3м2н .за3п .иг1р .изг2 .из3н .ии2 .ик1р .ио2 .ио4на .ис3 .ле2о .ле2п3р .лес1к .ль2 .люст1 .ме2ж1у2 .ми1ом .мо2к1 .му2шт1 .на1в .на3т .на3ш2 .не3вн .не1др .не1з2 .не1сл .не1с2ц .не3т .нос1к .нук1л .обо3ж2 .ово1 .ог3н .оз4 .ос2ка .ос2п .ос3пи .от1в .от1ро .от1ру .от1уж .по3в2 .по3ж2 .поз2н .прос2 .ра2с3т .ре2бр .ре2з3в .ри2ск .ри2ч .ро2з3в .ро2с3л .ро2х .септ2 .ск2 .ст2 .су2ж .те2о3 .тиа3 .ти2г .тиг1р .ти2о .уб2 .уд2 .уе2 .уз2на .ук2 .ум2ч .уо3 .уп2 .ур2в .ус2 .ут2р .ую2 .хо2р3в .че2с1к .юс1 4а3а аа2п аа2р аа2ц а1б абе3ст а3бла аб2лю аб1ри а3бу ав1в а1ве ав3зо а1ви ави2а а1во аво1с а2вот ав1ра ав2се а2вт а1ву а2вх а3в2че 2ага ага1с2 а2гд а2гити а2гле аг2ли а2глос аг2лот 2аго а3гу а1д 2адв а2две ад2жи ади2од а2дл а2д1обл ад1ро а2д1ру аду3ч ад2ц а2дын а1е ае2го ае2ди ае2л а2еп ае2ре ае2с аза4ш3 азв2 аз3вез аз1вл азг2 аз1др аз1об аз2о1бр а2зовь а2золь а1зори аз2о1с аз1р а1и аи2г1 аи3гл а2их а1к ак1в 1акк ак2л ак3лем ако1б2 2аконс ако3т 2акри ак1с а1ла а3лаг а1ле 2алек а3ли ало1з а1лу алу2ш алуш1т а1лы а2льщ а1лю 2ама амб4 2амет а2минт ам2нет 2амо амо1з2 амои2 а2мч ана2дц а2н1а2ме а2наф ан2дра а2н1о2б ан1о2хр ан1р ан2сп анс1у ан2сур а2н1уз а1нь 2а1о ао2д ао2к ао2р ао2с аост1 а3пла ап2лом 2апо апо4вс апо3ч2т ап2ра ап1рел а1ра ара2ст ар2бок ар2вал 1аргу а1ре аре1дв аре1ол ар2жа а1ри а1ро ар2тор ар2т1р а1ру ар1х а1ры а1рю а1ря 2ас1к ас3ми ас3но 1ассиг аст1ву ас3тем ас2тин ас2тия ас1тоо ас1тух а1стье ас2шед ас2шес а1сьи а1та 1атак ат3ва ат1ви ат1ву 2атез а1ти а1то ат1обе а2томн ато2ш ат1рах ат1ри а1ту ат2х а1ты а1тье а3тью а3тья а1тю а1тя а1у а2уб ау2д ау3до а2уле аут1р ау2х ау2ч ау3чь ауэ1 а2ф1л ах2а ахми2 ах3с а1ч 2ача а2чл ач1т а2шл аэ2ли а2эр аю1та а1я ая2б ая2в ая2з 1ба ба2бв ба2г1р ба2др ба1з ба3зу балю1 ба2о бас3м ба1ст ба1тр 2б1б б1в бвы2 бг2 2б1д 1бе 3бев бе2гл бе2гн бе2д1р 3бее 3бе2з без1а2 без5д4 бе3зи без3н без1о2 без1р бе2с1к бес3п бе2с1т бес3те бес3ти 3бец 2бещ 2бж б1з2 1б2и 3биа би2б 2биж 3бик били3т2 3био би2об би2од би2он би2ор би2тв би1х 2б3к б1л 1благ 1б2лаз б3лази б2лан 1б2лее б3лен б2лес1к 1б2лея б2луд 1б2луж 2блы 2б2ль 2б3лю. б2люд б2люе б2люл 2б3люсь 2бля 2б3н 1бо бо1бра бо3вш бо2гд бо1дра бо1з2 бо1л2ж бо1льс бо3м2л бо2мч бо3мш бону1 бо1ру бо2са бо1ск бо3ско бо3сти 3бот бо2тв бот2р боя2р 2бр. б3раб б2рав бра1зо 1б2рал 2б1рам б2ран 1брас б2рать б1рах 1б2рач 2б3рая 1б2ред б1рей б1рек б2рем б2рех б2рид б2рито б2риты 1б2роди б1рол б1ром. 1б2роси бро2с1к 2брс б1ру 3брукс 2брь 1б2рю 2б3рю. б1ря 2б1с2 б3ск бс4л б1т 1б2у бу2г1р бук1л бу1с 2бф 2б1х 2бц 2б1ч 2бш 2бщ 1бы бы2г1 бы2с быс1к быст1 1бь 2бь. 2бьс 2бьт бэ1р 3б2ю бю1та 1бя 1ва ва2бр 3ваг ва2д1р вадь2 ва3ж2д ва1з ванс2 ва1ст ва2стр ва1тр вах1 3вац 3вая 2в1б в1ви в1вр 2вг2 в1д в2дох 1вев 3вег вед1р ве3ду 1вее 1вез 3везе 3везл вез2у 1вей. ве2п1 2верд 1вес ве2с1к ве2ст1в вет3р 1вец 1вею 1вея 1в2з2 взг2 взд2 взо1б взъ2 взъе3д ви2аз ви2ак ви2ар ви2а1с2 виа1т ви3аф ви2гв ви2гл 1виз 1винт 1винч ви1о ви1с2ни виу3 ви2ф 2в1к вк2л 3в2кус в1л в2ла 2в3лаб в2лев в2лек в2лет в2леч 2вли в2лия 2влю в2люб 2вля 2вм 1вме 2в1н 4в3на в2нес вно1 в3ну. 3в2нук 3в2нуч в3ны во1б2 во2б3ла вов2 во3вк 1вод во1дв во1др во2ер во2жж вои2с1 1вок во3м2 воп2 во1ру 2ворц 2ворь вос1к во1см во1сн вос3пе во2стр вот2р 1вох во1хл во3х2т 1вою 2вп2 2вр. 2вра. в2рав 2в1рам в1рас 2в1рах 2врац 2вре. 2в1рен 1врид 1в2риз в1рии в1рик в1рил в1рис в1рит 2в1ро вро3т2 2в1ры 1врю в1ря 2в1с2 3все3 в3ская 4в3ски 4в3ску 3в2сп 3в2сю в1т2 вто1б2 вто3ш 1вуа ву3г 1ву1з 2вуи 2ву1к ву3п ву1с2 ву2х1а вух3в ву1чл вф2 1вхо 2вц 2в1ч 2вш 3в2шив 2вщ въ2 1вы вы3г2 вы3зн вып2 вы3т2 вых2 вы3ш2л 2вь. 1вье 1вьин 2вьс 2вьт 1вью 1вья 1в2э1 1в2ю 1вя 1г г2а га1з га1ст2 га2у 2г3б гба2 г1ви 2гг г3дан 2г3ди 3ге. ге2б1 гено1 ге2об ге2од ге1ор 2г3ж 2г1з г2и ги2бл ги3бр ги2гр ги1сл гист2 2г1к 2гла. г2лав г1лай г1лами 2глась 2глая г1ле г2лет 2гли. г2лин 3г2лиф 2гло. г3лобл 2глов 2глог 2глое 2глой 2глою 2глую 2г1лы г2ляж 2гляк 2г3м г2нав г2нан г3не. г2нев г3нен г3неп г3нес г2нир гнит2р г2ное г2нои г2нос г3ня го1б2 го2вл го3ж2д го1з го2зл гоз2н гоиг2 3гой г2ол гоми2 го2с1а го2сд го1скл го1сн го1спа 2готд гоу3т го1чл 3гою 2гп 2гр. г1рае г1рай г1рар г1рег г1рек г1рец гри4в3н г1рик г1рил г1рин г1рис г1рич г1ров г2роз г1рок г1рон г1роп г1рот г1роф гру2п г1рыв 2грю г1ряе г1рял г1рят 2г3с2 г4са г4сб 2г3т гу1в гу1с гу2с1к 2гф 2г1ч 2г3ш 2г3э 1да да2б1 да2ген да2гр да1з да2о даст1р дат1р 2д1б дв2 д1ве 1дви 2д1вид 2двиз 2двинт 2двинч 2д1вис 2д1вит д3вк д1вл 2двод д1воз 1дворь 2двя 2дг2 2д1д2 1де де1б2л де1б2р 3девр 3дез де2з1а2 де2зи дез1о2 де2зу деио2 де1кл 3деме де2од део3п де3пл дерас2 де2с3в дес2к де2ср де1хл 2дж. д2жам д2ж3м 2джс 2д1з2 1ди ди2ад диа2з ди2али ди2ало ди2ар ди2ас ди2об дио3де ди2ор дио1с ди1оти дип2 ди2пи ди3пт ди2с1тр диу3 ди3фр ди3фто ди1х 2д1к д1л д2лев 2д3м2 2д1н д3на днеа2 3дневн 4д3но1 дно3д2 днос2 4д3ны 3д2няш 1до 2д1о2бед до2бл 2д1обла до1б2ра дов2л до3в2м до1д2 до3дн до3ж2д до1з доз2н дои2р 2докт 2долим до2м1р доп2 до3пл 2допле до2пре до2руб до1с д1о2сен д1о2син 2д1осно дос2п 2дотд 2дотл дот2ри 2д1отря 2дотъ до3ть 3дохл до2ш3в до3ш2к до2шлы до2щу 2дп 2др. д1раб 1дравш 2дразв 1д2разн д1ране д1рар д1ра2с3 д1рах д1рач д2раю д1ре д2реб 2д3реж 2дрез д2рел д2рем 1дрема 1дремл дрем3н 1дремы 2д3рен дре2ск д2ресс д1ри д2рий 2дрин д2рип д2рих дро2г3н д1род д1рое 1д2рож 2д3роз д1рой д1рол д1рон д1рос д1рот д1рою д1руб 1друг 1друж д1рум д1рую д1ры 2дрыв 1д2рыг д1ря д2ряб 1д2ряг д2рях 2д1с2 дск2 дс3кн 2д1т 1ду дуб3р ду3г 2д1уд ду2да ду2о дуп1л дус1к д1усл ду1ст ду2ста 2дут1р ду1х ду2чи дуэ1т 2дф д1х 2д3це 2дцу 2дцы 2д1ч 2д3ш2 2дщ 2дъ дъе2м 1ды 2дыг ды2г1р 2дыд 2дыме 2ды2с1 2дыт 2дыщ 2дь. 1дье 2дьк 2дьт 1дью 1дья дь3яр 1д2ю 1дя е1а еа2д еади3 еа3до еа2з еан2д1р еат1р 2еб еба2с е1бра еб1рен еб1ри е1бро еб1ров еб1ры е2б3рю е1ве 2евер е1ви е3в2ме ев2ним ев2нят е1во 2евол евра1с 2е1вре ев1рее ев1рей ев1рея ев1ри е2вт е1ву е1вх ев2хо е1вь ега1с2 ег2д е2глан е2гле е2гли е2гло ег2на ег2но 2ег2р ед1во ед2ж е1дже е1д2лин едноу3 ед1опр е2дотв е2дох е2д1ощ е1дру е2дру. е2ду2б ед1убо е2дуве е2дуг е2дус ед1уст 2е3душ е2дын е1е е2евид ее2в1р ее2ги ее1с2 ее2ст еест1р ее2х е2жг е4ждев еж3ди 2еже е2ж1р еза2вр езау3 е1з2ва езд1р е3зе еззу3 е3зит ез1об ез1о2г е1зом ез1оп ез1о2р ез1от ез1ош ез2ря ез1у2д ез1у2к ез1уп ез1ус езу2со езу2сы ез1у2х ез1уча е3зя е1и еи2г1 еи2д еи2м еи2о еис1л еис1тр е1ка ека2б ек2з е1ки 2е1ко 2е1кр ек2ро ек1ск ек1сте е1ку е1ла е1ле еле3ск еле1сц е1лу е1лы е1лю е3ля еми3д2 еми3к емо1с 2емуж е2мч 2емыс е3на ен2д1р 2е1нр енс2 ен3ш2 е1нэ 2ео е1о2б еоб2ро е2о3гл ео2гро е1од ео3да ео2де еоде3з ео2до е1о2ж е2ои ео3кл е1ол. е1ола ео3ли е1олк е1олы е1оль е2ом е1он. е2она е2они ео3но е1онс еоп2 е1опе ео2пр ео4пу е2о3ро еос2 е1о2сви ео1ск е1осм е1осн еост1р ео3сх е1отл еот2ру е1о2ч е1о2щ епат2 епа1тр 2епе епис2к е2пл е3пла еп1леш е3п2лод еп1лу е3плы еп1лющ е4пн 2епо е4п3с е4пт е1ра ер1акт е2рв ер1ве е1ре е3ре. ере3до ере1др ере1к2 ере3м2н ере3п ере1х4 е1ри ерио3з е1ро еро2б ер1обл 2ерови 2ерокр 2ерол еро3ф2 ер3ск е1ру е2р1у2п е1ры е1рю е1ря е3с2а ес2ба е1сг е1ск е2с1ка. ес1кал е2ске е2сков е4с1ку. 2есл ес1лас ес2лин ес2лов ес2лом е1слу е1слы е1с4м е3со 2есп ес2пек ес3пол е2спу е1ст ес2тан е2стл е3сту ес2чет е1та ет1ве ет1ви е1тво 2етеч е1ти е1то ето1с ет1р ет2ря е1ту е1ты е1тье е3тью е3тья е1тю е1тя е1у2 2еуб еуб3р еуз2 еук2ло ефи3б2 еф2л еф1ре еха2т ех1ато ех3вал ех3лоп ех1об ех1опо ех1ре ех1ру ех1у2ч 2ецв е1чл е2шл еэ2 ею2г е1я ея2з 1ж жа2бл жа2бр жа1з жат1в 2ж1б2 2ж1в жг2 2жга ж2ги 3ж2гл ж2гу 2ж1д ж2дак ж2дач 3ж2дел 4ждеме ж2деп ж2ди 4ж2дл ждо3 жду1 4ждь 3ж2дя 3жев же3д2 же1к2в же1кл же1о2 же3п2 же1с2 же3ск 2жжа ж2же 2жжев 2ж1з2 жи1о 2жирр 2ж1к 2ж1л ж2м ж3ма 2ж3мо 2ж1н жно1 2ж1об 2ж1о2т1 жоу3 жоу1с 2жп2 жпо1 ж2ру 2ж1с 2жф 2жц 2ж1ч 2жъ 2жь. 2жьс 2жьт 1за1 заа2 заб2 за2в1ри за2вру з1аву заг4 з1адр зае2д зае2х за3ж2д за3з2 з1акт за3мне 3з2ан за3на занс2 зап2 зар2в за3р2д зар2ж зас2 заст2 зат2 за3тк зау2 зах2 зач2т за3ш2 зая2 з1б2 2з3ва. з2вав з3валь з2ван 2звая з1ве з2вез з1ви з3в2к з1вла з1во 2звол 1з2вон з1вр 1зву 2з1вую з1вь 2зг з3га з2гли зг2на з2гну з1д2в з2деш здож3 1зе зе2б1 зе2ев зе2од 2зж2 з3з2 1зи 3зи. 3зий. з1инт зи2оз зи2оно зи1оп 3зис зи3т2р зиу3м 3зич 2з1к зко1 зко3п2 з1л з2лащ з2лоб з2лоп з2лор з2лющ 2зм2 з3мн з1н 2зна. з2нав з2нае з2най з2нак з2нан з2нат з2наю 2зная 2зне 2з3ни 2зно 2зну 2з3ны з2обе зо2би 1зов зо3в2м зо2гл зо1др 1зое зо1з2 1зои 1зой. 1зок. з1окс 1зол2 зо1лг зо1лж зо3м2 1зом. 2зомн 1зон 2зонр 1зоо зо2о3п зо2ос зо2па з2опл з2опр з1орг 1з2о3ре зос2 з1осн зо1сп зо2тв з2оте з1отк з2ото зот2ре зот2ри 1зох зош2 зо2ши 1зоэ 1зою з1ра з2рак зра2с з2рач з2рен з1рес з2риш з1ро зро2с3 з1ру з2рю з1ря 2з1с 2зт з1ти 1зу 3зу. 2з1у2бе зу2б3р зу1в 2зуве 2зу2г 3зуе 2з1уз3 2зу1к 3зуме з1у2мо 2зуп зу2пр з1урб з1у2те зу2час 2зц з1ч 2зш зъе2м 1зы 2зы2г1 зы2з 2зыме 2зымч 2зы2с1 2зыщ 1зье 1зьи 1зью 3зья 1з2ю 1зя и1а и2аб и2ав иаг2 и2агр и2аде и2ади иа2зов иа2му и3ана иа2нал ианд2 иао2 и2ап иа1с2к иа1ста иа1сто иат1ро и3ату и2аф и2а1х иа2це 2и1б и2б1р 2иваж 2и1ве и2в3з и1ви 2и1во и1в2р и3в2с и1ву ив2хо 2ивы иг2д и3ге 2игл и2гле и2гли и2гн игни3 иг1рен иг1ро иг1ру иг1ры и2г1ря и1дв и2дей и1д2ж иди1ом иди1от ид1р и1дь и1е и2евод ие2г ие2д ие3де ие2зу и3ени ие1о2 иепи1 ие2р и3ж2д из1в2 из2гне 1из1д из2нал и1зо изо2о из1р и1и ийс2 и1к и3к2а ика1с2 ик2ва и2кви и2кля и3ко ик1ро ик1ск ик2с1т и3ку и1л и2л1а2ц ило1ск илп2 и2л1у2п и2ль ильт2 2има и2мено и2мену 2имень и3ми имои2 им3пл и2м1р и2мч им2ча инд2 1инж ино2к3л ино3п2л ино1с инс2 1инсп 1инсти 1инсу 1инф 1инъ и1об ио2бо ио2вр и2ог и1од ио2де и1оз ио3зо и1окс и1оле и1он и3онов и1опт и1ор и3ора ио1ру ио2са ио3скл ио1с2п и1ота ио2т1в и1отк и1отс иоуг2 ио2хо и1ош 2ип ипат2 ипа1тр ип2ля ип3н ипо3к2 и1р ира2ст и2р1ау и2рв и2рж ири2ск ириу3 иро1з2 1ирр исан2д1 и2сб и2сд ис1к ис3ка. ис3кам ис3ках ис3ке ис3ки ис3ков ис3ку. и2слам ис1лы ис3ме ис3му ис3но исо2ск и2с3пр и4сс и1ст и2ст1в и2стл ис1тяз и1сьи и1т ита2в ит3ва и2т1ве ит1ви ит1ву и2тм и2т1р ит2рес ит3ром и2т1уч и3тью и3тья и1у2 иу3п иф1л иф2лю и2фр иха3д и2х1ас их2ло2 ихлор1 и3х2о ихо3к их1ре их1ри и1ху и1ч иш2ли и2шлы и2шт ию4л ию2н ию2т ию3та и1я ия2д 2й1 йд2 й2д3в йно1 й2о1с йо2тр йп2л й2сб й3ска йс2ке йс4мо й2с3му й2сн й2с3ф й2сш й2тм й2хм йх2с3 йя1 ка2бл ка2бри 1кав к2ад ка3дне ка2д1р 1кае каз3н ка1зо 1кай 1кал. 1кало 1калс 1кам 1кан ка2п1л ка2пре кар3тр 3к2ас ка1ст 1кат ка1т2р 1ках ка2ш1т 1каю 2к1б к2вак к2вас к2ваш к1ви к2воз к1ву 2кг 2к1д кда2 1ке 2кеа ке2гл кед1р ке2с1к ке2ст1 2к1з 1кив ки1о киос1 ки2пл ки1с2ни 1кит 2к1к2 кк3с 2к3ла. 2к3лась 2к3ле. 2клем к3лем. к3лен к1лео 2к3ли. 2к3лив к2лик к2лин 2к3лис к3лия 2к3ло. к2лоз к3лом 2к3лос кло3т 1клук к3лы 2кль 1клю 2к3лю. 2кля. 2клям 2клях 2км 2к1н 3к2ниж к2ноп 3к2няж к2о ко1б2ри 1ков 3кова 1код ко1др 1коз 1кольс 2комин 3конс коп2р ко2р3в ко1ру 1кос ко1ск кос3м ко1сп 1котн ко2фр кохо2р3 1кош 2кп 2кр. к1рел кре1о кре2сл к1реч 1криб к1рид к2риз кри2о3 к2рит к1рих к1роа к1роб к2рое к1рок к1роо к1рор к1рос к1роф к1рох к1роэ кру1с к1ряд 2кс ксанд2 к2с3в кс3г к2с3д к2сиб к1ски кс1кл к1ско кс3м к3со к1стам к1стан кс3те к1сто кс1тр к1сту к3су 2к1т кта2к 3к2то. кто1с кт2р к2у ку1ве 3куе 1куй 1куля 3кум куп1л ку2п1р 1кур ку3ро кус1к ку1ст 1кут ку3ть 1куче 1куют 3кующ 2кф 2к1х2 2кц 2к1ч 2кш 1кь к2ю 1ла. 2лабе ла2бл 2лаго ла2гр ла2д1аг 1лае ла3ж2д ла1зо л2ак лак2р 1лам. 1лами. лан2д1р ла1ста ласт1в ла1сте ла1сто ла2ст1р ла1сту ла1стя ла1т2р лау1 ла2ус ла2фр 1ла1х 1лая 2лб л1бр л1ве л1ви л1во л1ву 1л2гал л2гл лго1 2л3д2 1ле. ле1вл лев1ра ле2г1л ле1дж ле3до ле1з2о3 ле1зр лек1л 2лемн 1лен ле1онт ле1о2с ле2сб ле2ск ле4ска ле1с2л ле1спе ле1тв ле1т2р 1лех ле1хр л1зо 1ли лиа2м 3ливо 3ливы лиг2л ли2гро лие3р ли2кв 2лимп лио1с ли2пл лис3м 2л1исп ли2тв лиу3м ли2х3в ли1хл ли1хр 2л1к лк2в л2к1л 2л1л л2ль ллю1 2лм 2л1н лни2е 1ло ло2бл ло1б2р 2ловия ло2вл 3ловод ло2г3д лого1с ло1др 2лоен ло1зв ло2к1а2у ло2кл лок3ла 3лопас ло2рв 2л1орг ло1ру лос1к ло1с2п 2лотд лот2р ло2шл 2лп 2л1с2 лс3б л1т 1лу. лу1бр лу1в лу3г лу1д4р 1луе лу1зн лу1кр 1лун луо2д лу3п2ло лу1с лу3ть 1лую 2л3ф2 2л1х2 л2х3в 2лц л1ч 1лы. 1лые 1лыж 1лый 1лым 1лых. 4ль. 2льд 3лье 3льи 2льк 2льм 2льн 3льо 2льск 1льсти 1льстя 2льт 2льц 2льч 1льща 1льще 1льщу 3лью 3лья л2ю 1лю. 1люж 1люсь лю1та 1ля 3ля. ля1ви 3ляво 3лявы 2ляд 3лям ля1ре ля1ру 3лях 1м ма2вз 3маг ма2гн ма2др ма2дь ма1зо ма2к1р 2м1алл ман2д1р мас3л ма1с4т ма2тоб ма2т1р ма2у маф2 3мач ма2чт 4м1б м3би мб2л м3бля 2м3в2 2мг2 3м2гл 2м1д меан2 ме2ег ме2ел ме2ж1ат ме1зо ме2с1к ме2ст1р меч1т 2мж 2м1з2 ми2гре ми1зв 2мизд ми1зн ми2кр мик1ри ми2оз ми1опи ми2ор ми1с2л 2м1к2 3мкн 2м1л м2лее м2лел 2мм 2м1н 4м3на мне1д 3м2неш 4мное м2нож 4мной 4мном м2нор 4мною м2нут 4м3ны мо1б2 мо3вл 3мод мо1др мо2жж мо1зв мо1зр моис1т мо2к3в мо3м2 3мон 3моп мо1ру мос1ка мо1см мо1сн мо1с2п 3моти мо2т1р 3моф 2мп мп2л м1раб 2мри 2м1ро м1ры 2м1с мс2к мс2н м2с1ор 3м2сти 2м1т му1с2к му1с4л му1ст мут1р му3ть 2мф мфи3 2м1х 2мц м2чав м2чал м2чит м2чиш 2мш2 2мщ 3м2ще мым1 мы2мр мы2с 2мь. 2мьс мью1 2мэ мэ1р м2ю мя1р мя1ст 1на наби1о наб2р на1в2р наг2н на3жд на1з2 на2ил на2ин на2и1с2 4накк на3м2н нап2л на1рва на1р2ви на1с2 на1тв на1т2р н1а2фр на1х2 2нач на3ш2л 2нащ наэ1р 3ная 2н1б2 2н1в 2нг н2г1в нги2о нг4л нго1с нг2р 2н1д н2дак н2д1в нде3з нде2с нд2ж н3д2з н2дл нд1раг нд1раж нд2ре нд2риа н2дря нд2сп н2дц 1не не1б2 не1в2д 2невн не3вня нег2 3нед не1д2л нед2о не2дра не1дро не3ду не3е нее2д не3ж2д не1зв не1з2л не1зн не1зо не1зр неи2 не1к2в не1кл не3м2н 3не1о2 не2ода не2ол не3п2 не1р2ж не2р1от нес2к не3с2н не1с2п нест2 не1с2х не1с2ч не1т2в не3т2л не1т2р 3неу не2фр не1хр не3шк нея2 2н1з2 нзо1с 1ни ни3б2 ни2ен 3ний ни2кл нила2 ни2л1ал ни2л1ам 2нинсп 2н1инст ни1сл нис3п нист2р ниу3 ни1х 3ниц 3нищ 2н1к нк2в нк2л нкоб2 нко3п2 н2к1ро нк1с н1л 2н1н нно3п2 1но ноб2 но1бр но2вл но1дв но1др но2ер но1зв но2зд но3з2о но1зр но3кн 3номе ном3ш но2рв но1ру но1скл но2сли но1с2п но2сч 2нотд но3ф2 ноэ2 н3п2 2н1ре 2н1ри н1ро 2н1с н2с3в н2сг нс2ке н2скон н2сл н3сла н2с3м н2сн н2с1ок н3с2пе нст2р нсу2р н2с3ф н2съ3 2н1т н2т1в нти1о2к н2тм нт2ра н2тр1а2г нтр1аж н2трар нтрас2 нт2ре н2трив н2трок нт2ру нтр1уд нт2ры н2т1ря 1ну нут1р ну1х 3ную 2нф2 н1х нхо1 2нц 2н1ч н2чл 2нш нш2т 2нщ 1ны 3ны. 2нь. 1нье 1ньи 2ньк 1ньо 2ньс 2ньт 2ньч 1нью 1нья н2э 1н2ю 2н3ю2р 1ня ня1ви 2о1а2 о3ав оап1 2оба 2обио об2лев об2лем о1блю 1обм обо1л2г обо3м2 обо2с 2обот об1р о2бра. о1брав о1бран 1объ 2обь о1в о3вла о3в2ло ов3но о3в2нуш о2в1ри ов2се ов3ско ов2т о2вх ог2 2о3ге ог3ла. ог3ли. ог3ло. о3гря 2одан од1вое о3де. 1о2деял 2оди3а 2о3дим од2лит о2д1о2пе одо3пр о2д1о2пы о2доси о2д1отч о1драг од1раж од1раз од1рак о1драл од3реб о1дроб од1ров о2д1у2ч о2дыма о2дыму о2дын о1дь о2дьб о1е ое1б о2е1вл ое2д о3ежек ое2жи ое1о ое1с2 ое2ст о2ето ое2ц о3жди о3ж2ду оза2б3в 2озав о1з2ва оз2вен оз2ви о1з2вя оз2гло оз2дор о1здр озе1о оз3но о1зо о2з1об 2озон о2зоп озо1ру оз1уг о2зым о3зыс о3и ои2г1 оиг2н оие3 ои2з ои2м ои3мо ои2о 2ой ойс2 о1к 2о3кан ок2в 2ок2л о3клю око1б 2о3кол око3п2л ок1ск 1окт 2окти 2окум о3ла ол2ган о1ле 1олимп о3ло о1лу олу3д2 о1лы о1лю о3ля о3ма ом2бл 2оме о3м2нем о3м2нет о3множ ом1ри ом2ч ом2ше о2мь о3мья о3на онд2 оне3ф2 оно1б о1нр онс2 он2тру о1о2 о2ол оо3пс оос3м оост1р о2оти о2оф о3пак о3пар о2пле. о2п1лей о2пли оп2лит оп2ло оп3лю. о2пля о3пляс опо4вс опоз2н опо2ш3л оп2ри о3п2те оп2то о1ра ора2с3 ор2б3л о1р2в о1ре 2о3рег оре2ск о1ри ор1исп о1ро оро2с3л ор2тр о1руе о1рук ор1укс о1рус 2орц о1ры о1рю о1ря о3сад оса3ж2 ос2б о2с3ба о2с1ка. ос3кар оск1во о2ске ос1ки о2ски. о2сков ос1кой ос1ком о1с2коп ос1кою о2с1ку. ос1кую о1с2л ос3лей ос3лог ос3лых ос3ми ос3мос о1с2ним ос2нял ос2пас о1с2пу ос2пя ос2св ос2с3м о1ст ос2та о3стра о2суч 2осх ос2цен о1с2ч о1с2шив о1т отв2 от3ва от1ве от1ви от1вл 1отг 1отд 2о3тек о3тер 2о3тех о3ти о3ткал о2тм от1раб от1рад от1раз отра2с от1реж от1рек от1реч от1реш от1ри от1род от1рое от1рок от1рос от1роч от1руг от3см оту2а от1у2ч 1отх о3тью о3тья о1у2 оуп2 оус2к оу3та оу3то 2офаш о3фе 2офит 2офон о2фори 2офот о2фри 2охи ох1лы о2хля ох2ме 2охор о1хр о1ху о2цо оча1с оч2л оч1ле о3чли о1чт о2ч1то ош3ва ош2ла ошпа2к3 ош2т оэ1ти 2ою о1я оя2в оя2д оя2з оя2ри 1п пави3 пав3л па2вь па2др па2ен па1зо пас1л пас1та па1сте пас1то пас1ту па2с1ты па1тро па2ун па3ф па1ху па2шт 2п1в2 2п1д пе1 пе2дв пе2д1ин пе2з пе3за пе3зо пе2к1ла пе2ль пе4пл пери1о пе2с1к пе2сн пе2ст1р пе2сц пе2сч пе2тр пе2шт пиаст1 пи2ж3м пи2к1р 3пинк 3пися 4п3к 2пл. 4пла. пла1с п1лем. п1лемс 2плен п2ленк п1ле2о плес1к п1лею 2плив 3п2лик 2пло. 2плов 2плог 2плый 2плым п1лын п1лых 2плю. п1лют п2ляс п2ляш 2п1н п3на п3но1 п3ны по1б2 по3вл по3в2с под1во по2д1о2к подо3м2 пое2л пое2х по1зве по1здо по1з2л по1зн пои2щ 3пой 3полк по3мно по3мну 3по3п2 п1орг пор2ж по1ру по1с4 3посл по3сс пот2в пот2р по1х2 по2шло по2шлы по2шля поэ3м 2пп2 ппо1д 2пр. 3прев пре1з прей2 пре1л пре1ог 3прет при1 при3в приг2 при3д2 при3к при3л приль2 прип2 п2риц про1бл прод2л про3ж2 про1з2 п1розо 3прои про3п профо2 2прс п2ру 2п1с2 3п2сал п3син 3п2сих п3со 2п1т п2т3в 3п2тих п3ту 3пуб пуг3н пус1ку пу1ст пу3ть 2пф2 пх2 2пц 4п3ч 2пш 2пщ 2пь. 2пьт пэ1ра п2ю1 1ра. раа2 ра2бл 1рабо ра2б1р 1равня ра2гв ра2гл рад2ж радо1б2 ра2дц ра2жур ра2зий ра2зуб рак2в 1ракиз ра2к3л 1ралг 1рамк 1рамн ра2нох ран2сц ра2п1л рас3к2 1расл рас3п рас1т 1раста рас3т2л ра2так рат1в ра1т2р 2рахи 1ращи 1раю 1рая 2раят 2р1б рб2ла р2бле рб2ло рб2лю рбо3с 1р2вав р3вак р3вар р3вата р3веж р2вео 1рвет р1ви р3вин р2вит р1во рво1з2д р1вь 2рг р2гв р2г1л р2гн рг2р 2р1д рда1с р2д1в рд2ж рди2а р2дл рдос2 р2дц 1ре. ре1вр рег2ля рег2н ре2д1о2п ре2дос рее2в рее2д рее2л ре3ж2д 1резк ре1з2л ре1зна 1ре1зо ре1зр рез2у 1рейш ре1к2л 1рекш ре3мно 3ремо ремо2г3 1ренк 1рень ре1он ре1оп ре1о2р ре1о2ф ре1ох ре1о2ц 1репь ре3р2 рес1ки ре1сл ре1с2п рес2с3м ре3ста ре3сто ре1сч ре1тв ре1т2р реуч3т ре1чт ре3шл р3жа. р3жам р3жан р3ж2д 2рз р1з2в р1зо ри3а риб2 ри3бр ри3в2н 2риги ри2гло ри3г2н 2ридж ри1д2р рие2л рие3р риз2в рик2р ри3м2н ри3м2ч р2ин 1ринс рио2з рио2с ри1от ри3р2 ри1с2 ри3сб 2рисп ри3ств ри3т2р 1риу ри2фл ри3фр ри1хл 1риц 1риш риэти2 2р1к р2кв р2к1л рк1с 2р1л2 р2ль рлю1 р3ля 2рм р2мч 2р1н рнас4 рне3о рне1с2 рно3сл 1ро. ро2блю ро1б2р ро2вл 1рогол 1рогру ро1дв ро3д2з ро1дл род2ле ро2д1от ро1др 1родь рое2л рое2м рое2х 1розар ро1з2в ро1зр 3розыс рои2с3 1рокон 1рокр 1ролис 1ролиц 1ромор 1ронаж 1ронап 1ронос рооп1р ро2плю ро3пс 2р1орг ро1р2ж ро1ру ро1ск ро2ски ро2ску 1росл ро1см ро1с2п рос2ф 1росш 1росю 1рот2в 1ротк рот2ри 1роу роуг2 ро2ф1ак ро2фр ро1хл рош2л ро3шн 1рояз 2рп рп2ло р2плю 2р1р 4р1с рс2к р2сн рс2п рств2 р3ствл 2р1т р2такк р2т1акт р2т1в рт3ва рт2вл р2тм р2т1об рт1орг рт1ра рт2ран рт1ре рт1ри ртус1 р2т1у2чи р3тью рт1яч 1ру. 1руба руг3н ру2дар 1ружей 2рукс 1рул рус1к рус3л ру1ста руст1р ру3ть 1руха 1рухо 1ручн 2рф рф2л 2рх р2хв р2х1ин рх1л р1х2ло р2х1оп рх1р 2рц р2цв 2р1ч р2чл р2чм 2рш р3ш2м рш2т 2рщ 2ръ 1ры. 1рыб ры2дв 2рыз ры2кл 1рым ры2с1к ры2х1 2рь. 1рье 1рьи 2рьк 2рьс 2рьт 1рью 1рья рэ1л р2ю 1рю. 1рюс ря1ви 1ряю 1са са2бл са2дь са2кв са2кл 2с1альп с1апп 2с1арк 2с1атл са1тр са2ун са2ф1р са1х2 1сб2 2сбе3з2 сбезо3 сбе3с2 2с3бу с2бы 2сбю 1с2в 2с3вен сг2 с2ги с2гн с2го 1сд2 с2да с2де с3ди с2до 1с2е сег2н се1з2 се1кв сек1л се2к1р секс4 семи1 сере2б се2ск се2ст се3ста се3сте сест1р 1с2ж с1з 1с2и 3сиз си1ом си1оп си2пл си1х 4ск. 2скам с2канд 1с2каф 2сках ск2ва с2кви 3скино ск2л с2кля ск3ляв 2скн с1кон 2скона с2копс 2скош ск2р с1кра 2скриб ск1с 2скуе 2с3ла. 1слав 1слад с1лам 2с3лая с3лев с3лее с1лей слео2 с1лет с3лею 2с3ли. 2слиц 2с3ло. с2лож с3лому 2с3лос 2с3лую 2с3лые 2с3лый 2с3лым 2сль с1люс 2с3ля с2м 1смес с4мея с3мур с1н 1с2наб с2нас 2сная 1с2неж 2с3ник 2сно сно1з2 2сную 2с3ны 1со со1б2р с2ов сов2р со1д со1з2 со1л2г со3м2 со2рие со1ру со1ск со1с2п со2сь сот2р со1чл сош2л сп2 с2пав с2пее с2пел с2пен с2пех 1с2пец с2пеш с2пею с2пим 2спися с3пн спо1з2 2спол с2пос 2спь 1ср 2ср. с2раб сра2с с1рат сре2б1 сре3до 2с1с ссанд2 с2сб сс3во 4с5си с3с2к сс2л с2сн с3с2не с2сори сс2п сст2 сс2ч 2ст. 1ста. 2стб 4ств. ст1вер 2ствл ст2вол ст2вя с2те 1с4те. 1стей 1стел 1стен. с3тет. с3тете сте3х с3теш 1сти с2тие с2тии 2стимп 2стинд 2стинф 2стинъ с2тич с2тишк с2тию 2стк ст2ла с3т2ле 2стли ст2лил ст2лит 2стля 2стм 2стн 1сто. с2то1б 1стов 1стог сто2г3н 1стод 1стое 3с2тои 1сток 1стом 1стон 2сторг 2сторж 2сторс 1стос 1стот с2тоц 1стою 2стп 2стр. страс2 4страя 2стред ст1рей 2стрив ст1риз 2стрил 2стрищ ст1роа с4т1ров ст1род ст1рох ст2руб ст1руш 2стс с1тут 1стую 2стф 2стц 1сты с2тыв с4ть 2сть. 2стьс 3стью 1стья 1стям 1стях 1су су2б суб1а2 суб1о су1в су3гл су2ев су2з су1кр сума1 супе2 сус3л сус3п су1ст сут1р су2ф3 су1х 1с2фе с1х2 1с2хе 2сца с2цена 2с3ци 2сцо сч2 1сча с2час сче2с1к с3чив 2счик с2чит с1чл 2счо сш2 с3шн 1съ2 съе3д съе3л 1сы сы2г1 сы2з сы2п1л сы2с сыс1ка 2сь. 1сье 2ськ 2сьт 1сью 1сья сэ1р с2эс 1с2ю сю1с 1ся 2сяз ся3ть та2бл таб2р та1ври 1таг та2гн та1з2 так3ле т2ан та2пл 1тас та1ст та1тр 1тащ 2т1б2 2тв. 2т2ва т1вей т1вел т1вет 2тви т1вое т1во1з 2т1вой т1вос 2твою 2т1вр 2тву 2твы 2твя 2тг 2т1д 1т2е те2гн те1д те1зо 3тека тек1л 3текш теле1о тем2б1 те2о3д те1ох те4п1л те2рак тере2о 3терз тер3к 3теря те2ска те2с1ки те2с1ко те2ску тест2 те2хо 2тж 2т1з тиа2м ти2бл ти3д2 ти1зна тии2 тиис1 тик2 тила2м т1имп 2т1инв т1инд 2тинж 2тинф ти1с2л ти3ств ти3ф2р ти1хр 2т1к2 3т2кав 3т2кан 3т2кет 3ткн 2т1л тло2б т2ль тм2 тми2с тмист1 т3мщ 2т1н то2бес то1б2л 2тобъ то2вл то1д то3д2р то1з2 ток2р 2т1омм 2томс 2тонг 1торг 1торж 1торс то1ру 1торш то1с2н то1с2п то1с2ц 2тотд то3тк 1тощ 2тп2 тпа1т т1рага 2т1раж 2трб 2трв 2трг 2трд трдо2 т1реа 1требо 1требу т1ребь т1реве т1ревш т1рег т1ред т1рее т1реза т1резн треп1л 3тре2с трес1к т1рест т1рету 3т2ре2х т1рец т2решь т1рею 1триб т1рив три2г1л т1рил т1рим 4тринс три1о т1рит три3ф т1рищ 2трм 2трн т1рогл т1роид 2трой тро3пл т1рор т1росо тро3т 4т3роц 2трою 2трп 2трр 1труб т2руд 2трук т2рум т2рут 2трф 2трщ 2тръ т1ры т1ря. т1ряв 2т1ряд т1ряе т1ряж т1ряй т3ряк т1рят т1рящ т1ряя 4т1с2 т2сб т2с3д тсеп2 т2с3м т2с3п 2т1т т2тм ту2гр ту2жин 2т1у2пр ту1сл ту1ст ту2фл 1туша 1тушо 1тушь 1тущ 2тф 2т1х 4тц 2т1ч 2тш2 2тщ 2тъ ты2г1 ты2с1к 2ть 4ть. 3тье 3тьи ть2м 4тьт тью1 2тэ т2ю тю1т 1тяг 1тяж 1тяп 2тя2ч у1а у2але у2ас у3бел убо1д убос2 уб1р 1убра уб3рю 1у2быт у1ве. у1ви ув2л у1во у1ву у2гв у2гл у2гн уг2на уг2не уг1ре уг1ря уда1с уд2в уд1рам уд1ро у3ду у1е уе2д уе2л уе1с уе2с1к уес2л уе2х у2жж у1з2в у1зо узо3п у1и у1ка ук1в у1ки у1ко уко1б у1ку1 у1ла у1ле у1лу у1лых у1лю у2мч у3на ун2д1р у1нь у1о уо2б уо2в у2оза уо2к уо2п уо2с уост1 уо2т1 уо2ф у2пл уп1лю у3про у1ра у1ре уре2т3р у1ри урке3 у1ро у2род уро2дл урт2р у3ру у1ры у1рю у1ря у2сад у1сг ус1ка ус1ки уск3л ус1ком у1скр ус1ку. ус2л усла4ж3 ус3ли у1см у2сн ус2п ус3с у1сте у1стя у1сф 2усц у2сч у2сь у3сья у1та у3тер у1ти ут2ля у1то уто3п2с ут1ри у1ту у1ты у1тье у3тью 1утю у1тя у1у ууг2 уу2с у3фи уф1л уф2ля у2фр ух1ад уха2т у2хв у3х4во ух1л ух3ля ух1р у2чеб 1учр у1чь у3ше у3ши у2шл уш1ла у2шп 2уэ у1я уя2з 1ф фа2б1 фа2гн фа1зо фан2д фанд1р фа1тр фа2х 3фаш фаэ1 2ф1б 2ф1в 2фг 2ф1д фев1р фед1р фе1о3 фе2с1к ф4и фиа2к1 фи2гл фи2ж фи2зо фи2нин фи1о 3фит 2ф1к ф2ла ф2ли ф2ло 2фм 2ф1н 2фобъ 3фон фо2рв 2ф1орг фор3тр фо1ру фос1к 3фот фото3п ф1раб фра1з фра1с ф1рат ф2рен фре2с ф1ри ф2риж ф2риз ф1ро ф2рон ф1ру 2ф3с 2ф1т ф2тм ф2тор 2ф1у2п фу3тл 2фуф 2фф 2ф1ч 2фш2 2фь. ф2ю1 1ха ха2бл ха2д 2х1ак хан2д хао3 х1арш 2х1б 1х2в 2х3ве 2х3ви х3вы 2хг х3д2 1хе хео3 х1з2 1хи хиат1 хие2 2х1изы хи1с2 х1к2 х1лав х1лас х1лат х1лац 1хлеб х2лес х1лет х3ло. х2лоп 1х2лор х1лу 1х2му 2х1н 3х2ны 1хо 2х1о2к хоп2 хо2пе хо2пор хо1ру х1осм 2х1осн хоф2 хох1л хоя2 хп2 х1раз 1хран х1ра1с2 х1рей хри2пл х2рис х1ров 1хром хро2мч х1ры х1ря 2х1с2 2х1т 1ху. х1у2г 2хуе 2хуй 1хун х1у2р ху3ра 1хус 1хуш 2хую х1х2 2х1ч2 2хш хью1 1ц ца1 3ца. 3цам ца2пл 3цах 2ц1б ц2ве 2цвы 2цг 2ц1д це1з це1к це1от цеп1л цес2л це1т 2цетат 2ц1з ци1 ци2к1 цик3л ци2ол цип2 ци2ск циу3 циф1р 2ц1к2 2ц1л 2цм 2ц1н ц1о2б 2ц1о2д 2ц1от 2цп2 2ц1р 2ц1с 2ц1т 3цу 2цц 2ц3ш2 3цы цы2п цып3л цю1 1ча ча2др ча2дц ча2ево ча2евы ча2ер част1в ча1сте ча1сту ча1стя 3чато 3чаты 2ч1б ч1в 2ч1д 1че че1вл че2гл че1о чер2с черст1 че1сл ч2ж чжо2 1чи 3чик 3чиц 2ч1к 1ч2ла ч2ле ч3лег ч3леж 2чли ч2ли. 1ч2ло 1чм 2чма 2чме ч2мо 2ч1н 3чо 2ч1с 2ч1та ч2те 2чтм 1чу 3чук ч2х 2ч1ч 2чь. 1чье 1чьи 2чьс 2чьт 1чью 1чья 1ш ша2бл ша2гн ша2г1р ша2др шан2кр шар3т2 ша1ст ша1тро 2ш1б ш2в ш3вен ше2гл ше1к ше1о2 ше3пл ше1с2 ши2бл ши2пл шиф1р 2ш1к2 3ш2кол 2ш1лей 2шлен ш2ли. 2шлив 2шлил ш2лин ш2лис ш2лите ш2лиф ш2ло. 2шлов ш2лог ш1лы ш2лю 2шляе 2шляк ш2ляп 2шлят 2шляч 2шляю 2шм 3ш2мы 4ш3мы. 2ш1н 4шни ш2нур ш2п2 ш3пр 2ш1р 2ш1с ш1ти 2штс шу2ев шуст1 2шф ш1х 2шц 2ш1ч 2шь 4шь. 3шье 3шьи 3шью 3шья ш2ю1 1щ 2щ3в2 ще1б2л ще2гл щед1р щеи2 щеис1 ще1с ще1х щеш2 ще3шк щи2п1л 2щм 2щ1н 2щ1р 2щь. ъ1 ъе2г ъе2д ъе3до ъе2л ъ2е2р ъе2с ъе2хи ъю2 ъя2 ъя3н ы1 ы2бл ы3га ы3ги ыг2л ы2гн ы2дл ыд2ре ы2д1ро ы2дря ые2 ы3ж2д ыз2ва ыз2д ы2зл ы2зн ыз2на ыи2 ыиг1 ы2к1в ык2л ы2к3ло ыко1з ык1с ы2ль ы2мч ынос3л ы3по ыра2с3 ыр2в ыре2х ы3са ы3се ыс1ки ыс1ку ы2сн ы3со ыс2п ы2сх ыс2ч ы2сш ыт1ви ыт2р ы3тью ы3тья ыу2 ы2ш1л ы3шь ь1 ьб2 ь2вя ь2дц ь2е ье1зо ье1к ье2с1к ь2зн ь2и1 ь2кл ьми3д ьми3к ьмо1 ьне2о ь2о ь2п1л ь3п2то ьс2к ь2сн ь2сти ь2стя ь2т1амп ьти3м ь2тм ь2тот ь2траб ьт2ре ьт2ру ьт2ры ьхо2 ьхоз1 ь2ща ь2ще ь2щу ь2ю ь2я ья1в ь3ягс 1э э1в эв1р 2эг эд1р эк1л экс1 эк2ст эле1о э2м э3ма э2н э3нь эо2з э2п эпи3к э1ре э1ри эри4тр эро1с2 э1ру э1ры эс1 эск2 эс3м э2со эс3те эс2т1р э2те этил1а эт1ра э2ф эх2 эхо3 э2ц эя2 1ю ю1а ю1б ю2бв ю2бл ю2б1ре ю1в ю1дь ю1е юз2г юзи2к ю1зо ю1и ю2идал ю1к ю2к1в ю1ла ю1ле ю2ли ю1лю 2юм ю2мч ю2нь ю1о1 ю1ра ю1ре юре4м ю1ри юри2ск ю1ро ю1ру ю1ры ю2с1к ю1ста ю1сте ю1сто ю1стя ю1ти ю1то ю1ту ю1ты ю1х юха1с ю1ч ю2щь ю1я я2бр яб1ра яб3ре яб1ри яб3рю 3явикс я1во я1ву я1в2х я2г1л я2гн яд1в яд1р я1е яз2гн я1зо я1и я1к я2к1в я2к1л як1с я1л я2ль ям2б3л я2мь я3на янс2 я1ра я1ри я1ро я1рь яс1к яс1л яс2т яст3в я1сто яст1р я1та ят3в я3ти яти1з я1то я1ту я1ты я3тью я3тья я1тя я1у ях1л я1ху яце1 я2шл 2яю. 2я1я .бо2дра .вст2р .доб2рел .до1б2ри .об2люю .об2рее .об2рей .об2рею .об2рив .об2рил .об2рит .па2н1ис .пом2ну .реа2н .ро2с3пи .со2пла а2ньш атро2ск безу2с бино2ск виз2гн выб2ре гст4р ди1с2лов дос2ня дро2ж3ж 2дружей е2мьд е2о3плато е2о3пози ере3с2со 4ж3дик 4ж3дич заи2л зао2з 2з1а2хав заю2л з2рят зу2мь 6зь. и2л1а2мин илло3к2 й2кь ла2б1р лу3с4н ме2динс ме2д1о2см мети2л1ам мис4с3н нар2ват не2о3ре ни1с2кол ни4сь. но4л1а2мин н2трасс о2д1о2бол о4ж3дев о1и2с1тр ойс4ков о2м3че. они3л2ам он2трат о2плюс осо4м3н оти4дн пере1с2н по2доде по2д1у2ро пое2ж по2стин прем2но приче2с1к пти4дн редо4пл реж4ди рни3л2а3м роб2лею 2сбрук1 со2стрит со3т2кал 2стче. 2стьт сы2мит 2сься. 6тр. тро2етес 6хуя. ы2рьм ыя2вя ьбат2 а1вё а2двё а1ё аз3вёз а1лё 2алёк 2амёт ам2нёт а1рё ас3тём а1тьё 1бё бё2д1р б3лён б2лёс1к б2люё б1рёк б2рём б2рёх 1веё 3везё вёд1р 1вёз 2вёрд 1вёс в2лёк в2лёт 1вмё в2нёс 2в1рён 3всё3 1вьё г1лё г2лёт г2нёв г3нён г2ноё д1вё 1дё .доб2рёл 2доплё до2прё д1рё д2рёб 2д3рёж д2рём 1дрёма 1дрёмы 2д3рён дъё2м 1дьё еб1рён е1вё 2евёр 2е1врё е2глё е1ё 2ежё е3зё е1лё 2епё ер1вё е1рё ерё3до ерё1к2 ес2чёт ет1вё е1тьё 2ёб ё1бра ёб1ры ё1ве ё1во 2ё1вре ё1ву ё1дру 2ё3душ 2ёже ё3зе ёз1о2г ё1зом ё1ка ё1ки 2ё1ко 2ё1кр ёк2ро ё1ку ё1ла ё1ле ё1лу ё1лы 2ёмуж ё2мч ё3на ён2д1р ёнс2 ёпат2 2ёпе ё2пл ё3пла ёп1лу ё3плы ё4пн 2ёпо ё4пт ё1ра ё1ре ё3ре. ё1ри ё1ро ёр3ск ё1ру ё1ры ё3с2а ё1ск ё2с1ка. ё2ске ё4с1ку. 2ёсл ё3со ё1ст ёс2тан ё3сту ё1та 2ётеч ё1ти ё1то ёто1с ёт1р ё1ту ё1ты ё1тю ё1тя ёха2т ёх1ато ёх3вал ёх3лоп ёх1опо ёх1ру 3жёв жё1с2 ж2жё за3мнё з1вё з2вёз 1зё з2наё 2знё 1з2о3рё з2отё зот2рё 3зуё зъё2м 2зымё 2и1вё иг1рён и1ё их1рё 1каё 1кё к3лён к2роё 3куё ла1стё лё3до лё1з2о3 лёк1л 1лён лё2ск лё4ска 1лёх 2лоён 1луё 3льё 1льщё 3м2нёш 3м2щё нд2рё не3ё 1нё нё1б2 3номё 1ньё од3рёб о1ё оё2жи о1лё 2омё о3м2нём о3м2нёт о2п1лёй о1рё о2скё от1вё 2о3тёк о3тёр от1рёк от1рёш о3фё пё1 пё2ст1р пё2тр 2плён п2лёнк плёс1к п1лёю поё2ж 3прёт причё2с1к р2блё 1рвёт .рё2бр 1рёзк рё1зна 1рё1зо рёз2у 1рёкш 3рёмо 1рёнк рё3ста рё3сто род2лё роё2м 1рьё с2дё се3стё 1с2ё сёкс4 сё2ст сёст1р 2скуё с1лёт с2тё 1стёл 1стён. с3тёт. с3тёте стё3х с3тёш с3т2лё счё2с1к 1сьё т1вёл т1воё 1т2ё тё2гн тё1зо 3тёка тёк1л 3тёкш тё4п1л тёр3к тё2ска тё2с1ки тё2с1ко тё2ску тё2хо 3т2кёт т1ревё 3т2рё2х т2рёшь тро2етёс 3тьё уг2нё уг1рё .уё2 у1ё у1лё у1рё у1стё у3тёр у1тьё у2чёб у3шё 2х3вё 1хлёб х2лёс ц2вё 1чё чёр2с чёрст1 .чё2с1к ч2тё 1чьё 2шлён 3шьё ъ2ё2р ыд2рё ырё2х ы3сё ь2ё ьё1зо ь2щё ю1ё яб3рё .не8 8не. 8бъ. 8въ. 8гъ. 8дъ. 8жъ. 8зъ. 8къ. 8лъ. 8мъ. 8нъ. 8пъ. 8ръ. 8съ. 8тъ. 8фъ. 8хъ. 8цъ. 8чъ. 8шъ. 8щъ. 8-7 --8 .а-8 .б-8 .в-8 .г-8 .д-8 .е-8 .ё-8 .ж-8 .з-8 .и-8 .й-8 .к-8 .л-8 .м-8 .н-8 .о-8 .п-8 .р-8 .с-8 .т-8 .у-8 .ф-8 .х-8 .ц-8 .ч-8 .ш-8 .щ-8 .ъ-8 .ы-8 .ь-8 .э-8 .ю-8 .я-8 -а8а8 8а8а- -а8б8 8а8б- -а8в8 8а8в- -а8г8 8а8г- -а8д8 8а8д- -а8е8 8а8е- -а8ё8 8а8ё- -а8ж8 8а8ж- -а8з8 8а8з- -а8и8 8а8и- -а8й8 8а8й- -а8к8 8а8к- -а8л8 8а8л- -а8м8 8а8м- -а8н8 8а8н- -а8о8 8а8о- -а8п8 8а8п- -а8р8 8а8р- -а8с8 8а8с- -а8т8 8а8т- -а8у8 8а8у- -а8ф8 8а8ф- -а8х8 8а8х- -а8ц8 8а8ц- -а8ч8 8а8ч- -а8ш8 8а8ш- -а8щ8 8а8щ- -а8ъ8 8а8ъ- -а8ы8 8а8ы- -а8ь8 8а8ь- -а8э8 8а8э- -а8ю8 8а8ю- -а8я8 8а8я- -б8а8 8б8а- -б8б8 8б8б- -б8в8 8б8в- -б8г8 8б8г- -б8д8 8б8д- -б8е8 8б8е- -б8ё8 8б8ё- -б8ж8 8б8ж- -б8з8 8б8з- -б8и8 8б8и- -б8й8 8б8й- -б8к8 8б8к- -б8л8 8б8л- -б8м8 8б8м- -б8н8 8б8н- -б8о8 8б8о- -б8п8 8б8п- -б8р8 8б8р- -б8с8 8б8с- -б8т8 8б8т- -б8у8 8б8у- -б8ф8 8б8ф- -б8х8 8б8х- -б8ц8 8б8ц- -б8ч8 8б8ч- -б8ш8 8б8ш- -б8щ8 8б8щ- -б8ъ8 8б8ъ- -б8ы8 8б8ы- -б8ь8 8б8ь- -б8э8 8б8э- -б8ю8 8б8ю- -б8я8 8б8я- -в8а8 8в8а- -в8б8 8в8б- -в8в8 8в8в- -в8г8 8в8г- -в8д8 8в8д- -в8е8 8в8е- -в8ё8 8в8ё- -в8ж8 8в8ж- -в8з8 8в8з- -в8и8 8в8и- -в8й8 8в8й- -в8к8 8в8к- -в8л8 8в8л- -в8м8 8в8м- -в8н8 8в8н- -в8о8 8в8о- -в8п8 8в8п- -в8р8 8в8р- -в8с8 8в8с- -в8т8 8в8т- -в8у8 8в8у- -в8ф8 8в8ф- -в8х8 8в8х- -в8ц8 8в8ц- -в8ч8 8в8ч- -в8ш8 8в8ш- -в8щ8 8в8щ- -в8ъ8 8в8ъ- -в8ы8 8в8ы- -в8ь8 8в8ь- -в8э8 8в8э- -в8ю8 8в8ю- -в8я8 8в8я- -г8а8 8г8а- -г8б8 8г8б- -г8в8 8г8в- -г8г8 8г8г- -г8д8 8г8д- -г8е8 8г8е- -г8ё8 8г8ё- -г8ж8 8г8ж- -г8з8 8г8з- -г8и8 8г8и- -г8й8 8г8й- -г8к8 8г8к- -г8л8 8г8л- -г8м8 8г8м- -г8н8 8г8н- -г8о8 8г8о- -г8п8 8г8п- -г8р8 8г8р- -г8с8 8г8с- -г8т8 8г8т- -г8у8 8г8у- -г8ф8 8г8ф- -г8х8 8г8х- -г8ц8 8г8ц- -г8ч8 8г8ч- -г8ш8 8г8ш- -г8щ8 8г8щ- -г8ъ8 8г8ъ- -г8ы8 8г8ы- -г8ь8 8г8ь- -г8э8 8г8э- -г8ю8 8г8ю- -г8я8 8г8я- -д8а8 8д8а- -д8б8 8д8б- -д8в8 8д8в- -д8г8 8д8г- -д8д8 8д8д- -д8е8 8д8е- -д8ё8 8д8ё- -д8ж8 8д8ж- -д8з8 8д8з- -д8и8 8д8и- -д8й8 8д8й- -д8к8 8д8к- -д8л8 8д8л- -д8м8 8д8м- -д8н8 8д8н- -д8о8 8д8о- -д8п8 8д8п- -д8р8 8д8р- -д8с8 8д8с- -д8т8 8д8т- -д8у8 8д8у- -д8ф8 8д8ф- -д8х8 8д8х- -д8ц8 8д8ц- -д8ч8 8д8ч- -д8ш8 8д8ш- -д8щ8 8д8щ- -д8ъ8 8д8ъ- -д8ы8 8д8ы- -д8ь8 8д8ь- -д8э8 8д8э- -д8ю8 8д8ю- -д8я8 8д8я- -е8а8 8е8а- -е8б8 8е8б- -е8в8 8е8в- -е8г8 8е8г- -е8д8 8е8д- -е8е8 8е8е- -е8ё8 8е8ё- -е8ж8 8е8ж- -е8з8 8е8з- -е8и8 8е8и- -е8й8 8е8й- -е8к8 8е8к- -е8л8 8е8л- -е8м8 8е8м- -е8н8 8е8н- -е8о8 8е8о- -е8п8 8е8п- -е8р8 8е8р- -е8с8 8е8с- -е8т8 8е8т- -е8у8 8е8у- -е8ф8 8е8ф- -е8х8 8е8х- -е8ц8 8е8ц- -е8ч8 8е8ч- -е8ш8 8е8ш- -е8щ8 8е8щ- -е8ъ8 8е8ъ- -е8ы8 8е8ы- -е8ь8 8е8ь- -е8э8 8е8э- -е8ю8 8е8ю- -е8я8 8е8я- -ё8а8 8ё8а- -ё8б8 8ё8б- -ё8в8 8ё8в- -ё8г8 8ё8г- -ё8д8 8ё8д- -ё8е8 8ё8е- -ё8ё8 8ё8ё- -ё8ж8 8ё8ж- -ё8з8 8ё8з- -ё8и8 8ё8и- -ё8й8 8ё8й- -ё8к8 8ё8к- -ё8л8 8ё8л- -ё8м8 8ё8м- -ё8н8 8ё8н- -ё8о8 8ё8о- -ё8п8 8ё8п- -ё8р8 8ё8р- -ё8с8 8ё8с- -ё8т8 8ё8т- -ё8у8 8ё8у- -ё8ф8 8ё8ф- -ё8х8 8ё8х- -ё8ц8 8ё8ц- -ё8ч8 8ё8ч- -ё8ш8 8ё8ш- -ё8щ8 8ё8щ- -ё8ъ8 8ё8ъ- -ё8ы8 8ё8ы- -ё8ь8 8ё8ь- -ё8э8 8ё8э- -ё8ю8 8ё8ю- -ё8я8 8ё8я- -ж8а8 8ж8а- -ж8б8 8ж8б- -ж8в8 8ж8в- -ж8г8 8ж8г- -ж8д8 8ж8д- -ж8е8 8ж8е- -ж8ё8 8ж8ё- -ж8ж8 8ж8ж- -ж8з8 8ж8з- -ж8и8 8ж8и- -ж8й8 8ж8й- -ж8к8 8ж8к- -ж8л8 8ж8л- -ж8м8 8ж8м- -ж8н8 8ж8н- -ж8о8 8ж8о- -ж8п8 8ж8п- -ж8р8 8ж8р- -ж8с8 8ж8с- -ж8т8 8ж8т- -ж8у8 8ж8у- -ж8ф8 8ж8ф- -ж8х8 8ж8х- -ж8ц8 8ж8ц- -ж8ч8 8ж8ч- -ж8ш8 8ж8ш- -ж8щ8 8ж8щ- -ж8ъ8 8ж8ъ- -ж8ы8 8ж8ы- -ж8ь8 8ж8ь- -ж8э8 8ж8э- -ж8ю8 8ж8ю- -ж8я8 8ж8я- -з8а8 8з8а- -з8б8 8з8б- -з8в8 8з8в- -з8г8 8з8г- -з8д8 8з8д- -з8е8 8з8е- -з8ё8 8з8ё- -з8ж8 8з8ж- -з8з8 8з8з- -з8и8 8з8и- -з8й8 8з8й- -з8к8 8з8к- -з8л8 8з8л- -з8м8 8з8м- -з8н8 8з8н- -з8о8 8з8о- -з8п8 8з8п- -з8р8 8з8р- -з8с8 8з8с- -з8т8 8з8т- -з8у8 8з8у- -з8ф8 8з8ф- -з8х8 8з8х- -з8ц8 8з8ц- -з8ч8 8з8ч- -з8ш8 8з8ш- -з8щ8 8з8щ- -з8ъ8 8з8ъ- -з8ы8 8з8ы- -з8ь8 8з8ь- -з8э8 8з8э- -з8ю8 8з8ю- -з8я8 8з8я- -и8а8 8и8а- -и8б8 8и8б- -и8в8 8и8в- -и8г8 8и8г- -и8д8 8и8д- -и8е8 8и8е- -и8ё8 8и8ё- -и8ж8 8и8ж- -и8з8 8и8з- -и8и8 8и8и- -и8й8 8и8й- -и8к8 8и8к- -и8л8 8и8л- -и8м8 8и8м- -и8н8 8и8н- -и8о8 8и8о- -и8п8 8и8п- -и8р8 8и8р- -и8с8 8и8с- -и8т8 8и8т- -и8у8 8и8у- -и8ф8 8и8ф- -и8х8 8и8х- -и8ц8 8и8ц- -и8ч8 8и8ч- -и8ш8 8и8ш- -и8щ8 8и8щ- -и8ъ8 8и8ъ- -и8ы8 8и8ы- -и8ь8 8и8ь- -и8э8 8и8э- -и8ю8 8и8ю- -и8я8 8и8я- -й8а8 8й8а- -й8б8 8й8б- -й8в8 8й8в- -й8г8 8й8г- -й8д8 8й8д- -й8е8 8й8е- -й8ё8 8й8ё- -й8ж8 8й8ж- -й8з8 8й8з- -й8и8 8й8и- -й8й8 8й8й- -й8к8 8й8к- -й8л8 8й8л- -й8м8 8й8м- -й8н8 8й8н- -й8о8 8й8о- -й8п8 8й8п- -й8р8 8й8р- -й8с8 8й8с- -й8т8 8й8т- -й8у8 8й8у- -й8ф8 8й8ф- -й8х8 8й8х- -й8ц8 8й8ц- -й8ч8 8й8ч- -й8ш8 8й8ш- -й8щ8 8й8щ- -й8ъ8 8й8ъ- -й8ы8 8й8ы- -й8ь8 8й8ь- -й8э8 8й8э- -й8ю8 8й8ю- -й8я8 8й8я- -к8а8 8к8а- -к8б8 8к8б- -к8в8 8к8в- -к8г8 8к8г- -к8д8 8к8д- -к8е8 8к8е- -к8ё8 8к8ё- -к8ж8 8к8ж- -к8з8 8к8з- -к8и8 8к8и- -к8й8 8к8й- -к8к8 8к8к- -к8л8 8к8л- -к8м8 8к8м- -к8н8 8к8н- -к8о8 8к8о- -к8п8 8к8п- -к8р8 8к8р- -к8с8 8к8с- -к8т8 8к8т- -к8у8 8к8у- -к8ф8 8к8ф- -к8х8 8к8х- -к8ц8 8к8ц- -к8ч8 8к8ч- -к8ш8 8к8ш- -к8щ8 8к8щ- -к8ъ8 8к8ъ- -к8ы8 8к8ы- -к8ь8 8к8ь- -к8э8 8к8э- -к8ю8 8к8ю- -к8я8 8к8я- -л8а8 8л8а- -л8б8 8л8б- -л8в8 8л8в- -л8г8 8л8г- -л8д8 8л8д- -л8е8 8л8е- -л8ё8 8л8ё- -л8ж8 8л8ж- -л8з8 8л8з- -л8и8 8л8и- -л8й8 8л8й- -л8к8 8л8к- -л8л8 8л8л- -л8м8 8л8м- -л8н8 8л8н- -л8о8 8л8о- -л8п8 8л8п- -л8р8 8л8р- -л8с8 8л8с- -л8т8 8л8т- -л8у8 8л8у- -л8ф8 8л8ф- -л8х8 8л8х- -л8ц8 8л8ц- -л8ч8 8л8ч- -л8ш8 8л8ш- -л8щ8 8л8щ- -л8ъ8 8л8ъ- -л8ы8 8л8ы- -л8ь8 8л8ь- -л8э8 8л8э- -л8ю8 8л8ю- -л8я8 8л8я- -м8а8 8м8а- -м8б8 8м8б- -м8в8 8м8в- -м8г8 8м8г- -м8д8 8м8д- -м8е8 8м8е- -м8ё8 8м8ё- -м8ж8 8м8ж- -м8з8 8м8з- -м8и8 8м8и- -м8й8 8м8й- -м8к8 8м8к- -м8л8 8м8л- -м8м8 8м8м- -м8н8 8м8н- -м8о8 8м8о- -м8п8 8м8п- -м8р8 8м8р- -м8с8 8м8с- -м8т8 8м8т- -м8у8 8м8у- -м8ф8 8м8ф- -м8х8 8м8х- -м8ц8 8м8ц- -м8ч8 8м8ч- -м8ш8 8м8ш- -м8щ8 8м8щ- -м8ъ8 8м8ъ- -м8ы8 8м8ы- -м8ь8 8м8ь- -м8э8 8м8э- -м8ю8 8м8ю- -м8я8 8м8я- -н8а8 8н8а- -н8б8 8н8б- -н8в8 8н8в- -н8г8 8н8г- -н8д8 8н8д- -н8е8 8н8е- -н8ё8 8н8ё- -н8ж8 8н8ж- -н8з8 8н8з- -н8и8 8н8и- -н8й8 8н8й- -н8к8 8н8к- -н8л8 8н8л- -н8м8 8н8м- -н8н8 8н8н- -н8о8 8н8о- -н8п8 8н8п- -н8р8 8н8р- -н8с8 8н8с- -н8т8 8н8т- -н8у8 8н8у- -н8ф8 8н8ф- -н8х8 8н8х- -н8ц8 8н8ц- -н8ч8 8н8ч- -н8ш8 8н8ш- -н8щ8 8н8щ- -н8ъ8 8н8ъ- -н8ы8 8н8ы- -н8ь8 8н8ь- -н8э8 8н8э- -н8ю8 8н8ю- -н8я8 8н8я- -о8а8 8о8а- -о8б8 8о8б- -о8в8 8о8в- -о8г8 8о8г- -о8д8 8о8д- -о8е8 8о8е- -о8ё8 8о8ё- -о8ж8 8о8ж- -о8з8 8о8з- -о8и8 8о8и- -о8й8 8о8й- -о8к8 8о8к- -о8л8 8о8л- -о8м8 8о8м- -о8н8 8о8н- -о8о8 8о8о- -о8п8 8о8п- -о8р8 8о8р- -о8с8 8о8с- -о8т8 8о8т- -о8у8 8о8у- -о8ф8 8о8ф- -о8х8 8о8х- -о8ц8 8о8ц- -о8ч8 8о8ч- -о8ш8 8о8ш- -о8щ8 8о8щ- -о8ъ8 8о8ъ- -о8ы8 8о8ы- -о8ь8 8о8ь- -о8э8 8о8э- -о8ю8 8о8ю- -о8я8 8о8я- -п8а8 8п8а- -п8б8 8п8б- -п8в8 8п8в- -п8г8 8п8г- -п8д8 8п8д- -п8е8 8п8е- -п8ё8 8п8ё- -п8ж8 8п8ж- -п8з8 8п8з- -п8и8 8п8и- -п8й8 8п8й- -п8к8 8п8к- -п8л8 8п8л- -п8м8 8п8м- -п8н8 8п8н- -п8о8 8п8о- -п8п8 8п8п- -п8р8 8п8р- -п8с8 8п8с- -п8т8 8п8т- -п8у8 8п8у- -п8ф8 8п8ф- -п8х8 8п8х- -п8ц8 8п8ц- -п8ч8 8п8ч- -п8ш8 8п8ш- -п8щ8 8п8щ- -п8ъ8 8п8ъ- -п8ы8 8п8ы- -п8ь8 8п8ь- -п8э8 8п8э- -п8ю8 8п8ю- -п8я8 8п8я- -р8а8 8р8а- -р8б8 8р8б- -р8в8 8р8в- -р8г8 8р8г- -р8д8 8р8д- -р8е8 8р8е- -р8ё8 8р8ё- -р8ж8 8р8ж- -р8з8 8р8з- -р8и8 8р8и- -р8й8 8р8й- -р8к8 8р8к- -р8л8 8р8л- -р8м8 8р8м- -р8н8 8р8н- -р8о8 8р8о- -р8п8 8р8п- -р8р8 8р8р- -р8с8 8р8с- -р8т8 8р8т- -р8у8 8р8у- -р8ф8 8р8ф- -р8х8 8р8х- -р8ц8 8р8ц- -р8ч8 8р8ч- -р8ш8 8р8ш- -р8щ8 8р8щ- -р8ъ8 8р8ъ- -р8ы8 8р8ы- -р8ь8 8р8ь- -р8э8 8р8э- -р8ю8 8р8ю- -р8я8 8р8я- -с8а8 8с8а- -с8б8 8с8б- -с8в8 8с8в- -с8г8 8с8г- -с8д8 8с8д- -с8е8 8с8е- -с8ё8 8с8ё- -с8ж8 8с8ж- -с8з8 8с8з- -с8и8 8с8и- -с8й8 8с8й- -с8к8 8с8к- -с8л8 8с8л- -с8м8 8с8м- -с8н8 8с8н- -с8о8 8с8о- -с8п8 8с8п- -с8р8 8с8р- -с8с8 8с8с- -с8т8 8с8т- -с8у8 8с8у- -с8ф8 8с8ф- -с8х8 8с8х- -с8ц8 8с8ц- -с8ч8 8с8ч- -с8ш8 8с8ш- -с8щ8 8с8щ- -с8ъ8 8с8ъ- -с8ы8 8с8ы- -с8ь8 8с8ь- -с8э8 8с8э- -с8ю8 8с8ю- -с8я8 8с8я- -т8а8 8т8а- -т8б8 8т8б- -т8в8 8т8в- -т8г8 8т8г- -т8д8 8т8д- -т8е8 8т8е- -т8ё8 8т8ё- -т8ж8 8т8ж- -т8з8 8т8з- -т8и8 8т8и- -т8й8 8т8й- -т8к8 8т8к- -т8л8 8т8л- -т8м8 8т8м- -т8н8 8т8н- -т8о8 8т8о- -т8п8 8т8п- -т8р8 8т8р- -т8с8 8т8с- -т8т8 8т8т- -т8у8 8т8у- -т8ф8 8т8ф- -т8х8 8т8х- -т8ц8 8т8ц- -т8ч8 8т8ч- -т8ш8 8т8ш- -т8щ8 8т8щ- -т8ъ8 8т8ъ- -т8ы8 8т8ы- -т8ь8 8т8ь- -т8э8 8т8э- -т8ю8 8т8ю- -т8я8 8т8я- -у8а8 8у8а- -у8б8 8у8б- -у8в8 8у8в- -у8г8 8у8г- -у8д8 8у8д- -у8е8 8у8е- -у8ё8 8у8ё- -у8ж8 8у8ж- -у8з8 8у8з- -у8и8 8у8и- -у8й8 8у8й- -у8к8 8у8к- -у8л8 8у8л- -у8м8 8у8м- -у8н8 8у8н- -у8о8 8у8о- -у8п8 8у8п- -у8р8 8у8р- -у8с8 8у8с- -у8т8 8у8т- -у8у8 8у8у- -у8ф8 8у8ф- -у8х8 8у8х- -у8ц8 8у8ц- -у8ч8 8у8ч- -у8ш8 8у8ш- -у8щ8 8у8щ- -у8ъ8 8у8ъ- -у8ы8 8у8ы- -у8ь8 8у8ь- -у8э8 8у8э- -у8ю8 8у8ю- -у8я8 8у8я- -ф8а8 8ф8а- -ф8б8 8ф8б- -ф8в8 8ф8в- -ф8г8 8ф8г- -ф8д8 8ф8д- -ф8е8 8ф8е- -ф8ё8 8ф8ё- -ф8ж8 8ф8ж- -ф8з8 8ф8з- -ф8и8 8ф8и- -ф8й8 8ф8й- -ф8к8 8ф8к- -ф8л8 8ф8л- -ф8м8 8ф8м- -ф8н8 8ф8н- -ф8о8 8ф8о- -ф8п8 8ф8п- -ф8р8 8ф8р- -ф8с8 8ф8с- -ф8т8 8ф8т- -ф8у8 8ф8у- -ф8ф8 8ф8ф- -ф8х8 8ф8х- -ф8ц8 8ф8ц- -ф8ч8 8ф8ч- -ф8ш8 8ф8ш- -ф8щ8 8ф8щ- -ф8ъ8 8ф8ъ- -ф8ы8 8ф8ы- -ф8ь8 8ф8ь- -ф8э8 8ф8э- -ф8ю8 8ф8ю- -ф8я8 8ф8я- -х8а8 8х8а- -х8б8 8х8б- -х8в8 8х8в- -х8г8 8х8г- -х8д8 8х8д- -х8е8 8х8е- -х8ё8 8х8ё- -х8ж8 8х8ж- -х8з8 8х8з- -х8и8 8х8и- -х8й8 8х8й- -х8к8 8х8к- -х8л8 8х8л- -х8м8 8х8м- -х8н8 8х8н- -х8о8 8х8о- -х8п8 8х8п- -х8р8 8х8р- -х8с8 8х8с- -х8т8 8х8т- -х8у8 8х8у- -х8ф8 8х8ф- -х8х8 8х8х- -х8ц8 8х8ц- -х8ч8 8х8ч- -х8ш8 8х8ш- -х8щ8 8х8щ- -х8ъ8 8х8ъ- -х8ы8 8х8ы- -х8ь8 8х8ь- -х8э8 8х8э- -х8ю8 8х8ю- -х8я8 8х8я- -ц8а8 8ц8а- -ц8б8 8ц8б- -ц8в8 8ц8в- -ц8г8 8ц8г- -ц8д8 8ц8д- -ц8е8 8ц8е- -ц8ё8 8ц8ё- -ц8ж8 8ц8ж- -ц8з8 8ц8з- -ц8и8 8ц8и- -ц8й8 8ц8й- -ц8к8 8ц8к- -ц8л8 8ц8л- -ц8м8 8ц8м- -ц8н8 8ц8н- -ц8о8 8ц8о- -ц8п8 8ц8п- -ц8р8 8ц8р- -ц8с8 8ц8с- -ц8т8 8ц8т- -ц8у8 8ц8у- -ц8ф8 8ц8ф- -ц8х8 8ц8х- -ц8ц8 8ц8ц- -ц8ч8 8ц8ч- -ц8ш8 8ц8ш- -ц8щ8 8ц8щ- -ц8ъ8 8ц8ъ- -ц8ы8 8ц8ы- -ц8ь8 8ц8ь- -ц8э8 8ц8э- -ц8ю8 8ц8ю- -ц8я8 8ц8я- -ч8а8 8ч8а- -ч8б8 8ч8б- -ч8в8 8ч8в- -ч8г8 8ч8г- -ч8д8 8ч8д- -ч8е8 8ч8е- -ч8ё8 8ч8ё- -ч8ж8 8ч8ж- -ч8з8 8ч8з- -ч8и8 8ч8и- -ч8й8 8ч8й- -ч8к8 8ч8к- -ч8л8 8ч8л- -ч8м8 8ч8м- -ч8н8 8ч8н- -ч8о8 8ч8о- -ч8п8 8ч8п- -ч8р8 8ч8р- -ч8с8 8ч8с- -ч8т8 8ч8т- -ч8у8 8ч8у- -ч8ф8 8ч8ф- -ч8х8 8ч8х- -ч8ц8 8ч8ц- -ч8ч8 8ч8ч- -ч8ш8 8ч8ш- -ч8щ8 8ч8щ- -ч8ъ8 8ч8ъ- -ч8ы8 8ч8ы- -ч8ь8 8ч8ь- -ч8э8 8ч8э- -ч8ю8 8ч8ю- -ч8я8 8ч8я- -ш8а8 8ш8а- -ш8б8 8ш8б- -ш8в8 8ш8в- -ш8г8 8ш8г- -ш8д8 8ш8д- -ш8е8 8ш8е- -ш8ё8 8ш8ё- -ш8ж8 8ш8ж- -ш8з8 8ш8з- -ш8и8 8ш8и- -ш8й8 8ш8й- -ш8к8 8ш8к- -ш8л8 8ш8л- -ш8м8 8ш8м- -ш8н8 8ш8н- -ш8о8 8ш8о- -ш8п8 8ш8п- -ш8р8 8ш8р- -ш8с8 8ш8с- -ш8т8 8ш8т- -ш8у8 8ш8у- -ш8ф8 8ш8ф- -ш8х8 8ш8х- -ш8ц8 8ш8ц- -ш8ч8 8ш8ч- -ш8ш8 8ш8ш- -ш8щ8 8ш8щ- -ш8ъ8 8ш8ъ- -ш8ы8 8ш8ы- -ш8ь8 8ш8ь- -ш8э8 8ш8э- -ш8ю8 8ш8ю- -ш8я8 8ш8я- -щ8а8 8щ8а- -щ8б8 8щ8б- -щ8в8 8щ8в- -щ8г8 8щ8г- -щ8д8 8щ8д- -щ8е8 8щ8е- -щ8ё8 8щ8ё- -щ8ж8 8щ8ж- -щ8з8 8щ8з- -щ8и8 8щ8и- -щ8й8 8щ8й- -щ8к8 8щ8к- -щ8л8 8щ8л- -щ8м8 8щ8м- -щ8н8 8щ8н- -щ8о8 8щ8о- -щ8п8 8щ8п- -щ8р8 8щ8р- -щ8с8 8щ8с- -щ8т8 8щ8т- -щ8у8 8щ8у- -щ8ф8 8щ8ф- -щ8х8 8щ8х- -щ8ц8 8щ8ц- -щ8ч8 8щ8ч- -щ8ш8 8щ8ш- -щ8щ8 8щ8щ- -щ8ъ8 8щ8ъ- -щ8ы8 8щ8ы- -щ8ь8 8щ8ь- -щ8э8 8щ8э- -щ8ю8 8щ8ю- -щ8я8 8щ8я- -ъ8а8 8ъ8а- -ъ8б8 8ъ8б- -ъ8в8 8ъ8в- -ъ8г8 8ъ8г- -ъ8д8 8ъ8д- -ъ8е8 8ъ8е- -ъ8ё8 8ъ8ё- -ъ8ж8 8ъ8ж- -ъ8з8 8ъ8з- -ъ8и8 8ъ8и- -ъ8й8 8ъ8й- -ъ8к8 8ъ8к- -ъ8л8 8ъ8л- -ъ8м8 8ъ8м- -ъ8н8 8ъ8н- -ъ8о8 8ъ8о- -ъ8п8 8ъ8п- -ъ8р8 8ъ8р- -ъ8с8 8ъ8с- -ъ8т8 8ъ8т- -ъ8у8 8ъ8у- -ъ8ф8 8ъ8ф- -ъ8х8 8ъ8х- -ъ8ц8 8ъ8ц- -ъ8ч8 8ъ8ч- -ъ8ш8 8ъ8ш- -ъ8щ8 8ъ8щ- -ъ8ъ8 8ъ8ъ- -ъ8ы8 8ъ8ы- -ъ8ь8 8ъ8ь- -ъ8э8 8ъ8э- -ъ8ю8 8ъ8ю- -ъ8я8 8ъ8я- -ы8а8 8ы8а- -ы8б8 8ы8б- -ы8в8 8ы8в- -ы8г8 8ы8г- -ы8д8 8ы8д- -ы8е8 8ы8е- -ы8ё8 8ы8ё- -ы8ж8 8ы8ж- -ы8з8 8ы8з- -ы8и8 8ы8и- -ы8й8 8ы8й- -ы8к8 8ы8к- -ы8л8 8ы8л- -ы8м8 8ы8м- -ы8н8 8ы8н- -ы8о8 8ы8о- -ы8п8 8ы8п- -ы8р8 8ы8р- -ы8с8 8ы8с- -ы8т8 8ы8т- -ы8у8 8ы8у- -ы8ф8 8ы8ф- -ы8х8 8ы8х- -ы8ц8 8ы8ц- -ы8ч8 8ы8ч- -ы8ш8 8ы8ш- -ы8щ8 8ы8щ- -ы8ъ8 8ы8ъ- -ы8ы8 8ы8ы- -ы8ь8 8ы8ь- -ы8э8 8ы8э- -ы8ю8 8ы8ю- -ы8я8 8ы8я- -ь8а8 8ь8а- -ь8б8 8ь8б- -ь8в8 8ь8в- -ь8г8 8ь8г- -ь8д8 8ь8д- -ь8е8 8ь8е- -ь8ё8 8ь8ё- -ь8ж8 8ь8ж- -ь8з8 8ь8з- -ь8и8 8ь8и- -ь8й8 8ь8й- -ь8к8 8ь8к- -ь8л8 8ь8л- -ь8м8 8ь8м- -ь8н8 8ь8н- -ь8о8 8ь8о- -ь8п8 8ь8п- -ь8р8 8ь8р- -ь8с8 8ь8с- -ь8т8 8ь8т- -ь8у8 8ь8у- -ь8ф8 8ь8ф- -ь8х8 8ь8х- -ь8ц8 8ь8ц- -ь8ч8 8ь8ч- -ь8ш8 8ь8ш- -ь8щ8 8ь8щ- -ь8ъ8 8ь8ъ- -ь8ы8 8ь8ы- -ь8ь8 8ь8ь- -ь8э8 8ь8э- -ь8ю8 8ь8ю- -ь8я8 8ь8я- -э8а8 8э8а- -э8б8 8э8б- -э8в8 8э8в- -э8г8 8э8г- -э8д8 8э8д- -э8е8 8э8е- -э8ё8 8э8ё- -э8ж8 8э8ж- -э8з8 8э8з- -э8и8 8э8и- -э8й8 8э8й- -э8к8 8э8к- -э8л8 8э8л- -э8м8 8э8м- -э8н8 8э8н- -э8о8 8э8о- -э8п8 8э8п- -э8р8 8э8р- -э8с8 8э8с- -э8т8 8э8т- -э8у8 8э8у- -э8ф8 8э8ф- -э8х8 8э8х- -э8ц8 8э8ц- -э8ч8 8э8ч- -э8ш8 8э8ш- -э8щ8 8э8щ- -э8ъ8 8э8ъ- -э8ы8 8э8ы- -э8ь8 8э8ь- -э8э8 8э8э- -э8ю8 8э8ю- -э8я8 8э8я- -ю8а8 8ю8а- -ю8б8 8ю8б- -ю8в8 8ю8в- -ю8г8 8ю8г- -ю8д8 8ю8д- -ю8е8 8ю8е- -ю8ё8 8ю8ё- -ю8ж8 8ю8ж- -ю8з8 8ю8з- -ю8и8 8ю8и- -ю8й8 8ю8й- -ю8к8 8ю8к- -ю8л8 8ю8л- -ю8м8 8ю8м- -ю8н8 8ю8н- -ю8о8 8ю8о- -ю8п8 8ю8п- -ю8р8 8ю8р- -ю8с8 8ю8с- -ю8т8 8ю8т- -ю8у8 8ю8у- -ю8ф8 8ю8ф- -ю8х8 8ю8х- -ю8ц8 8ю8ц- -ю8ч8 8ю8ч- -ю8ш8 8ю8ш- -ю8щ8 8ю8щ- -ю8ъ8 8ю8ъ- -ю8ы8 8ю8ы- -ю8ь8 8ю8ь- -ю8э8 8ю8э- -ю8ю8 8ю8ю- -ю8я8 8ю8я- -я8а8 8я8а- -я8б8 8я8б- -я8в8 8я8в- -я8г8 8я8г- -я8д8 8я8д- -я8е8 8я8е- -я8ё8 8я8ё- -я8ж8 8я8ж- -я8з8 8я8з- -я8и8 8я8и- -я8й8 8я8й- -я8к8 8я8к- -я8л8 8я8л- -я8м8 8я8м- -я8н8 8я8н- -я8о8 8я8о- -я8п8 8я8п- -я8р8 8я8р- -я8с8 8я8с- -я8т8 8я8т- -я8у8 8я8у- -я8ф8 8я8ф- -я8х8 8я8х- -я8ц8 8я8ц- -я8ч8 8я8ч- -я8ш8 8я8ш- -я8щ8 8я8щ- -я8ъ8 8я8ъ- -я8ы8 8я8ы- -я8ь8 8я8ь- -я8э8 8я8э- -я8ю8 8я8ю- -я8я8 8я8я-", ["length"]=63270, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=7021, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hu.pat0000644000175000017500000200764011761001300024656 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-hu.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z á ä é í ó ö ú ü ő ű \patterns{ .a2 .adatát1a2 .ada2t1e2 .adás1s .adá2s3z .ad1yé. .ad1yi .ag1os .ag2ra .agyag1g .agy1á2ram .agy1árt .agy1e2 .agyo2 .agyon1 .agy1ó2 .agy1ű2 .akác1c .aká2cs .ak2h .ako2 .ak2t1ér. .ak2t1orr .ak2t1ő2 .aku1p2 .ala2g1 .alak1a2 .ala2k1ö2 .ala2k1ő2 .ala2pa .ala2p1á .al1eg .al1is .al2járn .alje2 .al2j1el .aljel1ö2 .alo2m1 .al1os .al2t1a2k .al2t1erj .al2tén .al2térn .al2tért .al2tin .am1ak .ango2l1ó2 .an1th .anti1s .apa1p2 .apá2ly1á2z .ara2ny1e2 .ara2sze .ar1á2c .ar2cal .arc3c .ar2c1e2 .ar2cél .ar2c3há .ar2c3hoz .ar2cin .ar2cio .ar2col .ar2cö .ar2c3s .ar1kh .at2h .az1a2 .az1ám .aze2 .az1ó2 .á2 .ács1ék .ág1árn .ág1árt .ág1ó2 .ágy1ala .ágy1asz .ágy1árt .ágy1á2z .ál1a2 .ál1é .ál1i2 .áligaz1 .ál2l1alj .ál2l1alt .ál2lin .ál1o2k .ál1ú .ár1aj .ár1aktá .ár1a2l .ára2m1e .ár1a2p .ára2sz .ár1aszó .ár1ác .ár1ál .ár1á2z .ár1d2 .áre2 .ár1em .áré2 .ár1ir .ár2nyel .ár1ol .ár1om .ár1os .árrés1s .ár1s2 .ár1t2r .ász1ál .ász1árb .ász1á2ré .ász1á2ri .ász1á2ro .át1a2d .át1a2k .át1alt .át1a2n .át1ar .át1a2s .át1av .át1á2 .át1e2 .át1é2 .át1i2 .át1ol .át1o2r .át1o2s .átó2 .át1óh .át1óv .át1ö2 .át1u .át1ü2 .át1ű .b2 .ba2b1a2rá .ba2bál .ba2b1e2 .ba2bol .ba2j1á2rat .ba2j1e .bak1aszt .ba2kál .ba2k1á2ro .baké2 .ba2k1ö2 .ba2kur .ba2l1e2g .ba1ts .ba2u .bá2l1ó2 .bár1a .bá1th .be2at. .be1d2 .bei2 .be1kr .be1str .be1szk .beté2t1e2l .be1tr .bér2c3sí .bé2r1o .bi2ke .bi2os .bi2ot .bita2 .bi2tag .bi2t1á2 .bi2tel .bi2t1er .bi2t1orr .bi2tur .bo2g1ó2 .bol2ta .bo2ly1ó2 .bo2nav .bo2raj .bo2ran .bo2ras .bo2rat .bo2rác .bo2rál .bo2r1odv .bor2sét .bort2 .bo2tá .bra2i .bu2sz1e .c2 .cen2t1á .cen2t1ó2 .ce2t1e2l .ce2t1ű .cé2l1e2 .ci2n1á2 .cito1 .cs2 .csa2k1 .csa2p1á2g .csa2t1é2 .cse2l1ő2r .d2 .dac1c .da2c3s .da2i .dal1an .da2lás .da2l1e2 .da2l1ék .da2lén .da2l1í2 .da3lol .da2l1ó2 .dan1n .da2u .den2g1 .dé2la .dére2 .dé2res .dé2sa .di2afo .di2aka .di2al .di2csá .di2ómá .dó2mor .dú2ra .e2 .eb1eg .eb1ir .eb1í .eb1u2 .eg2é .egres1s .egy1a2 .egy1á2 .egy1e2lőr .egy1ev .egy1in .egy1ö2 .egy1ü2l .el1a2k .el1an .el1ap .ela2s .el1ass .el1aszn .el1aszo .el1aszv .el1á2 .el1e2c .el1eger .ele2gyá .el1e2h .el1ejt .el1e2l .ele2ma .ele2má .ele2meg .ele2mel .el1emele .el1emels .el1emelt .el1e2més .el1e2n .el1e2p .el1e2r .el1e2se .el1e2sés .el1esh .el1e2si .el1esn .el1e2ső .el1ess .el1este .el1estél .el1estü .el1e2sü .el1esv .el1e2sz .el1e2t .el1e2vet .el1e2vez .el1evi .elé2d .el1éde .el1é2gek .el1éh .el1ékez .el1é2le .elé2n .el1éne .el1é2p .el1é2r .el1é2tet. .el1é2v .el1id .el1ig .el1i2h .el1ik .el1i2mit .el1in .el1ir .el1i2s .eli2t1o .el1itta. .el1itták .el1izz .el1í .ellege2 .elo2 .el1okk .el1oko .el1or .el1ó2 .elö2 .el1ök .el1öle .el1ölé .el1ölh .el1öli .el1ölj. .el1ölje .el1öljé .el1öljü .el1ölne .el1ölné. .el1ölném .el1ölni .el1ölő .el1ölt. .el1ölte .el1ölté .el1öltn .el1öltü .el1ölün .el1ölv .el1öv .előé2 .el1s2 .el1t2 .el1u .elü2 .el1ül. .el1ülh .el1üli .el1ülj .el1üln .el1ülte .el1ülv .el2v1el .el2v1ég. .es1er .ese2tel .es2t1a .es2t1á .es2t1é2ke. .es2t1é2kek .et2h .etilén1g2 .evés1s .ex1el .ez1á .ez1e2l .é2 .édes3s .ég1a2 .ég1eg .ég1e2rei .ége2s .ég1esz .ég1ér. .ég1é2ré .ég1érn .égés3s .égé2sz .ég1észb .ég1észe .ég1észé .ég1észn .ég1észr .ég1ö2 .ég1u2 .éh1év .éj1a2 .éj1á2 .éj1el .éj1u .ék1a2 .ék1á .ékes1s .ék1ir .ék1o .él1a2 .él2c1i .éli2k .él1ike .él2v1á2 .ép1es .ép2pa .ép2p1el .ép2pé .ép2po .ér1a2n .ér2c1e2l .ér2c1é2j .ér2cék .ér2c3sí .ér1e2l .ér1e2s .éré2sz .ér1észé .ér1é2t .érü2 .ér1ül .ér2vad .ér2val .ér2v1ég. .ész1a2l .ész1á .észe2 .ész1el .ész1em .ész1es .ész1é2k .észigaz1 .ész1o .ész1ő2 .ész2t1örv .észü2 .ész1ülő .év1á2g .év1essz .év1é2g .év1é2k .f2 .fa2it. .fa2leg .fa2n1év .fa2r1ont .fas2 .fa1st .fat2 .fa1tr .fe2leme .fe2l1essz .fe2lev .fé2k1e2l .fé2m1a2 .fé2m1á2 .fil2méré .fin2ge .fogó2s3zá .fol2t1a2 .fö2lő .fö2lül. .fölül1e2 .g2 .ga2zan .gát1al .gá2te .gá2z1ó2 .gázs2 .gá2zsu .gáz1z .gene2a .ge2od .ge2os .gesz2t1í .gé2d1 .gé2na .gé2ná .gén3n .gé2pe2lem .gé2p1i2p .giga1s .gonor1 .gonorr2 .gó2ce .gó2la .gó2lá .gó2lel .gó2l1e2s .góli2g .gó2l1iga .gó2lis .gő2z1á2 .gő2zen .gő2z1ő .gő2zs .gu2i .h2 .ha2b1e2 .ha2b1ol .ha2bor .ha2b1ő .ha2b1u .ha2dal .ha2d1e2 .ha2dz .ha2ik .ha2j1e2 .ha2jom .ha2lác .halá2l1ó2 .ha2lárv .ha2leg .ha2l1el .ha2lep .ha2let .ha2l1e2v .ha2lis .han2gad .han2g1e .ha2sor .has3sz .ha2tag .ha2t1at .ha2t1e2 .ha2told .há2m1a .há2ny1in .háro2m1e .há2t1alj .há2tus .há2zol .há2zó .he2i .hé2t1ez .hé2t1o .hit1a .hi2tis .hodás1 .hol1l .hol2t1e .ho2ne .hő2sá .i2 .ike2r1i .ikerü2 .ike2r1ülé .ikon1s .ima1s .im1p2la .in1aktí .in2gin .inte2r1a .io2n1a2 .io2n1á .io2ne .ion3n .ipa2re .izo2m1ért .í2 .íjá2t .íj1áto .ín1e .írá2s1ág .írá2s3z .ív1a2 .ív1á2r .ív1ell .íz1a .íz1in .j2 .jaké2 .ja2kér .ja2kov .járműká2 .já2szá .já2szó .je2gy1a2 .je2gy1á2 .je2l1a .je2leg .je2lev .job2b1ol .jó2dal .jó2s1e2 .jó2t1á .k2 .kale2i .ka2nar .ka2n1e .kapolc1 .ka2rala .ka2ras .ka2r1á2s .kar2c3se .kare2 .ka2rem .ka2rék .ka2ring .ka2rí .ka2ró2ra .ka2r1ó2rák .ka2r1ü .ka1th .ka1tz .kár1a2d .kás2 .kása3l .ke2csó .ke2l1á2 .ke2l1e2g .ke2l1e2ve .kel1ö .ker2ta .ké2nét .ké2p1és .kéta2 .ké2tab .ké2tad .ké2t1ag .ké2taka .ké2tal .ké2tan .ké2tap .ké2tas .ké2tat .ké2tau .ké2t1á2 .ké2t1ele .ké2t1ez .ké2t1o2 .kéze2 .ké2z1el .ké2zem .ké2zs .kéz1z .kiá2 .ki1g2 .ki1krá .kió2 .ki2ság .kiű2 .kla2uz .kle2i .kló2re .ko2rác .ko2rí .ko2sis .kó2d1a2 .kó2r1e .kó2r1é2s .kö2b1öl .kö2d1ő .kö2zis .kö2z1ő .köz1z .kr2 .kun1a .kvar3k. .l2 .lak1a2d .la2kal .la2k1an .la2kép .la2kor .la2kő .lan2t1e .lan2t1ó2 .la2pal .la2p1ác .la2p1á2r .la2p1e2 .la2p1or .la2p1osz .la2pó .lá2b1e2 .lá2bil .lá2bor .lán2c3s .lá2nyan .lá2ny1e2 .lá2p1e .lá2p1il .lá2z1ó2 .lá2z3s .le3dé .le2g1 .le3g2ali .le3g2elés .le3g2esle2g1 .le3g2esle3g2esle2g1 .lege2t .le4géne .leg3g .le3gy .lei2d .leí2ro .leí2ród .leí2ru .le1kl .le1k2r .lemez1z .le1p2ré .le1s2m .le1t2r .leü2 .lé2c3s .lé2g1a2 .lé2g1á .lége2 .lé2g1el .lé2gér .lé2go .lé2gy1á2 .lé2p1a2 .lépü2 .lép1ülé .lé2t1a2 .lé2t1á2 .lét1elek .lé2t1e2lé .lé2t1érd .lé2tör .lisz2ta .lisz2t1á2 .lisz2ter .lito1s .lob1e .lobi2 .lo2bin .lo2mag .lo2mal .lo2m1á .lom2b1e2 .lo2me .lo2m1é2t .lon2csi .lófo2g1a2d .lő2cs1ö2v .lőrés3s .ly1o .m2 .ma2e .ma2gal .ma2gar .ma2gál .ma2g1e2 .mag1g .magó2 .ma2gór .ma2in. .ma2r1ác .ma2r1ing .masz2k1or .masz2k1ö .ma1th .ma2uz .má2r1is .me2g1e2 .me2g1é2 .meg1if .mego2 .me2g1ő2 .me2i .mel2lá .me2ny1u2 .me2zá .médi2af .mé2ná .mé2no .mé2sza .mé2szet .mé2szi .mé2szo .mé2zis .mi3rá .mo2lyan .műi2 .mű1kr .mű1s .n2 .na2gya .na2gyá .na2gye .na2gyú .na2pap .na2p1ar .na2pál .na2p1e .na2pés .na2p1o2r .na2pö .ne2ma .ne2meg .ne2m1el .ne2min .ne2ol .ne2szá .net2t1a2 .ne2um .né2gyá .né2pa .né2v1ál .né2vel .no2r1 .nya2k1á2ro .nya2k1e2 .nya2k1ö2 .nyol2c1an .o2 .oda1 .ok1a2d .ok1a2l .okka2 .ola2j1e2 .ola2sz1ó2 .olda2l1út .or2r1aj .or2r1alt .or2ran .or2r1e2 .orré2 .or2r1és .or2v1a2 .or2vá .or2v1é .orvi2 .or2vis .ot1tr .ó2 .ólo2m1a .óme3g2 .ón1a2 .ón1á2 .ón1e2 .ón1év .óvá2s1árt .ö2 .ön1d2 .ön1e2 .öni2 .ön1í .ön1k2 .ön3n .ön1o .ön1ő .ön1s .ön1ü .össz1a .össz1á .öte2 .öt1eg .öt1el .öt1t2 .öv1e2g .öv1e2l .öv1ő2 .ő2 .őa3l .ői3r .őr1ab .őr1an .őr1e2g .őr1é2g .őr1é2s .őr1ist .őr1o .őr2s1ág .őr1u2 .őr1üg .ős1a2 .ős1á2 .ős1eg .ős1e2l .ős1e2r .ős1e2s .ős1é2g .ős1ért .ős1í2 .ős1o .ős1ó2 .ős1p .ős1tr .ős1u2 .ős1ú .ősz1a2 .ősz1á .ősz1e2g .ősz1el .ősz1em .ős3zene .ős3zené .őz1a2 .őz1eg .őz1e2l .őze2t .őz1ete .őz1ék .őz1ére .őz1ő .őz3s .őz1u .p2 .pa2da .pa2d1á2 .pa2din .pa2d1ó2 .pa2i .pa2par .pa2pál .pa2pe .para1f2r .parke2 .par2ker .par2ta .par2tel .par2ter .pá2c3s .pán2ta .pár2t1ö .pen3ny .pe2r1a2 .pe2r1á .pe2r1enc .pe2rok .pe2rül .pe2s .pia2c3s .pina1 .pin2t1ó .ple2i .ponta2 .pon2te .po2rad .po2ral .po2ran .po2rác .po2rál .po2re .po2r1us .pó2kis .pó2k1ö .pó2rás .pó2t1e .pó2t1é .pre1k2 .prés3s .proto1p2 .q2 .r2 .ra2b1as .ra2b1á .ra2be .rabic1 .ra2b1il .ra2b1i2z .ra2bí .ra2bor .ra2bö .ra2b1ő2 .ra2bú .ra2gal .ra2j1ö2 .rajtó2 .raj2t1ór .rá2cs1á2z .rá1dr .rá1fr .rá1gr .rái2 .rán2c1e .rány2 .rá1spr .rá1s2t .rát2 .rá1tk .rá1tr .re1k2re .ren2d1a2 .ren2d1ő2 .re1p2ri .rep2ro .re1prod .rete2k1 .ré2m1emb .ré2mu .ré3p2a .ré2sa .rés3szer .ré2sza .ré2szá2 .ré2sz1e2le .ré2szell .ré2szer .ré2szí .ré2szo .ré2sző .ré2t1a2 .ré2t1á2 .ré2v1á .ré2zá .ré2zel .ré2zet .ré2zis .ré2z1o .réz1z .ri2zso .rizs3z .rí2má .ro1c2kos .romé2 .ro2m1ét .ro2min .ro2mis .ros2t1e2 .rug1g .ru2m1a .ru2mil .rú2de .s2 .sa2h1a .saj2te .sa2s1or .sa2vad .sa2v1ara .sa2v1ál .sa2vári .sa2v1e2 .sa2v1é2 .sá2r1ó .sá2rú .sás1s .sá2s3z .sá2v1a .sá2vá .sá2vó .sc2 .se2bal .se2b1á .se2bel .se2besz .se2b1o .sé2fi .s3gr .si2em .si2ók .sín3n .sí2p1ő2 .sí2r1a2 .sí2rát .sk2 .so2kél .so2kil .so2kis .so2kol .so2m1ag .so2mat .so1ny2 .so2ral .so2rál .sör1e2g .sp2 .spor2t1á2 .st2 .star2t1a2 .sz2 .szaba2d1e .sza2k1at .sza2k1ás .sza2k1e .sza2kö .sza2k1ü .szá2l1ó2 .száz1z .szeg1ér. .sze2gí .sze2i .sze2m1á .sze2m1ér. .sze2m1é2ri .sze2r1ág .szer2v1a2d .szer2v1e2v .sze2szá .sze2szeg .sze2sz1ó2 .szé2fa .szén1n .szé2t1 .széte2 .szín3n .szk2 .szo2l1ó .szókész1 .szó2szak .szószö2 .szó2sz1öv .szt2 .t2 .ta2gal .ta2g1a2r .ta2g1á .ta2g1e .ta2gép .tag1g .ta2g1i2n .ta2gö .ta2nag .ta2n1as .ta2nál .tan1d2 .ta2n1e2 .ta2n1év .tané2ve .ta2nis .tan1n .ta2n1ó2 .tant2 .ta2n1u2s .ta3rá .ta2t1ál .ta2t1árai .ta2t1e2 .ta2t1í .ta2tor .ta2tur .tá2l1ó2 .tán2cse .tá2p1ol .tár2sor .tár2s1ö2 .tár2t1es .tár2t1ölt .tá2v1a .távi2 .tá2v1ir .tbc1 .te2aka .te2ar .te2j1á2 .te2j1eg .terape2 .ter2v1a2 .ter2v1á2 .tes2ték .tes2t1öl .tetraé2 .teza2 .té3k .té2nyem .té2nyí .té2ra .té2rá .té2ret .tér1int .tí2z1ó2 .tí2zs .tízü2 .to2káro .tol2le .topa3u2 .to2r1á2l .to2r1odv .tor2z3se .tó1st .tó2t1ér. .tön2k1a .tőa2 .tőe2 .tő2gya .tő2r1éss .tő2r1é2sz .tra2u .turnus1s .tus3s .tu2sz .tus3zá .tú2r1att .tű2z1ért .tű2z1ő2r .tű2zse .tyú2ka .u2 .ugrás1s .un1in .uni2o .utas1s .utás4 .uto2 .utó2d1ö .ú2 .új1as .új1e .úr1a2 .úr1á2 .úr1e .úszós2 .úszó1sp .út1a2 .út1á2 .út1e2 .út1ol .út1ő .út1ü2 .ü2 .ügy1ér. .ük1a2 .üstö2l .üs2t1ölő .ütőkész1 .üve2g1e2l .ű2 .űr1a2 .űr1á2 .űr1e2 .űr1é2s .űr1éte .űri2 .űr1ita .űr1öss .űr1s .űrt2 .v2 .va2d1al .va2dár .va2dét .va2d1o2r .va2dóv .va2d1ö .va2d3z .va2gy1i .va2j1e .va2k1ak .va2kal .va2k1an .va2kap .va2k1ár .va2k1e2 .va2k1ö .va2rak .va2r1á2s .va2r1e2 .va2r1ing .va2sab .va2sar .va2s1a2tom .va2s1á2g .va2sárk .va2sás .va2s1e .va2sék .va2s1i2r .va2sol .va2s1or .va2só .vas3s .vas1tr .va2s1ü .va2s3z .vács1 .vá2dá .vá2d1e .vá2ma .vár1a2dá .vá2r1i2s .vá2r1ol .verés1s .ver2s1ég .ver2s1o .ver2sz .vé2g1é2k .vé2g1o .vé2nyel .vé2r1a2 .vé2rá .vé2r1eb .vé2r1eg .vé2rik .vé2r1o .vé2ró .vér2t1ék .vé2ru .vé2sza .vé2szá .vé2szer .vé2szí .vé2szo .vé2sz1ó2 .vi1g2n .ví2zed .ví2zem .vona2t1út .von2z1e2 .w2 .x2 .y2 .z2 .za2be .za2b1i2n .zai2 .za2j1e2 .za2j1ö .za2jut .zá2r1a2dá .zá2r1e .zá2r1ó2ra .zárta2n .zár2t1any .zár2t1é .zár2t1ö2v .ze2i .zé2t1 .zs2 .zű2r1ő 2a. a1a aa2be aa2cé aa2ch aa2da aadás1s aa2dássz aa2dó aa2du aa2fo aa2ga aa2gi aa2gó aa2gy aa2já aa2ka aa2ká aa2ko aa2ku a2al. aa2la aala2g1 aa2lá aal1eg aa2lé aalmana2 aalmanac3 aa2lo aal1os aa2lu aa2ma aa2na aa2ne aa2ni aa2no a2ans aa2ny aa2pa aa2pá aa2po aa2pu aa2ra aa2rá aa2ré aa2ri a2arl aa2ro aa2sz aa2to aa2ty aa2ur aa2ut aa2va a2avo aa2zo a1á aá2bé aá2cs aá2fá aá2ga aá2gá aá2gé aá2gi aá2go aá2gu aá2gy aá2hí aá2ju a2ál. aá2la aá2lo aá2po aá2ra aá2rá aá2r1e2 aá2ré aá2ri aá2ro aá2ru aá2rú aá2sa aá2sá aá2so aá2só aá2ta aá2t1á2 aá2t1e2 aá2té aá2t1i2 aá2tí aá2to aá2t1ö aá2tu aá2tú aá2tü aá2zá aá2zó 2abab ab1adó aba2dz 1a2bajg ab1akk 2abal 2aban aba2nal aba1pr 2abar aba2rat a2b1a2ráb a2b1au 2abáb abá2b1u2r 2abád 2abán a2b1áp abá2rak ab1á2ron ab1á2rú 2abáz abb2a 1abbah 2abea abeá2 a2b1e2b 2abec ab1edé 2abeé 2abef 2abeh 2abei 2abej ab1ejt ab1ela ab1e2lá 2abele abe2lem 2abels ab1elsz a2b1elt ab1elv 2abem ab1emb a2b1erd 2abetá 2abete 2abeté 2abeto 2abetö 2abev a2b1ex 2abék 2abél 2abén a2b1é2ne a2b1ép 2abér a2b1érz 2abétá a2b1éve ab1fl ab1fr 2abic ab1i2do 2abie ab1i2ke ab1iks a2b1i2nai abi2náb a2b1ing 2abir ab1irkái ab1ism 2abit a2b1i2ta 2abiz a2b1íj ab1írn ab1kr 1ablaká 1ablakh 1ablakk 1ablakos 1ablakr 2ablo a1b2lú 2abog 2aboh 2abok 2abolt ab1oltó 2abom abo2rak abo2r1as abo2rin 2abot a2b1öb abö2l ab1ölő ab1ölt a2b1ös a2b1öt a2b1ö2z ab1őrl ab1pr ab2rek 2abri a1b2rike ab2rin a1b2rit 2abró ab2rók ab1st a2b1urd ab1úr. ab1úrt abú2s1á ab1úsz ab1ü2l ab1üs ab1üv a2b1üz aca2la aca2lá aca2l1e2 aca2lét a2c1a2n aca2tá a2c1ág a2c1ál acci2ó ac2cö ac3cse ac3csí ac3csü acc3sz a2ce. ac1ebé a2c1eg ace2l a2c1ele a2c1elé a2c1elh ac1elle a2c1elm a2c1elo a2c1elv ac1emb 2acen ace2ta a2c1e2v a2c1ex a2célá acél1e2 a2célé a2c1ép a2c1é2re a2c1érte ac1fr a2chá ac3héj ac3hí a2c3hoz ac3hó a2c3hö a2c3hú ac1ide a2c1i2gá a2c1i2gé a2c1ike 2acin. a2c1ind ac1inf a2c1ist a2c1ír ac1ív ack1aro ac2kál ac2k1e2v acké2r ac2k1ére ack1éte ac2kil ac2k1osz ac2kös ac2kű ac2lu a2c1op ac1ös ac1őr ac1pl ac1pr 2acsal acs1alj. acsa2p1á2g a2cs1atk acs1áll a2csáru acse2c acs1egy ac3seml 1a2cséb a2cs1ék 2acsi 2acsí 2acson acs1orm a2cs1öc acs1s ac3str a2csúl a2cs1úr acsü2l a2csüt ac3szá ac3sze ac3szö ac1tr a2c1ud 2acula a2c1ut ac1új ac1üg ac1ür ac1üz ac3za ac3zá ac3ze ac3zs ac3zu a2d1a2da a2d1a2dá 1a2dag. ada2gá 1a2dagb a2dagg 1a2dagh 1adagi 1a2dagj 1a2dagn 1a2dago 1a2dagr 1a2dagt 1adagu 1a2dagú a2d1aktá ada2lap ada2l1es 1adalé ada2lén ada2l1osz ada2l1ó2 ada2l1út a2d1ana a2d1ann 1adapt 2adar ada2ral ada2re ada2r1és ada2r1in ada2rut ada2tab ada2tal ada2t1a2n ada2t1ár. ada2t1á2rak ada2t1á2ram ada2t1á2rat ada2t1á2rá ada2t1árb ada2t1árr ada2t1á2ru 1a2datáu ada2t1e2g ada2tel ada2t1es adaté2r ada2t1érd ada2t1érő 1a2datin ada2tint ada2tis ada2tív a2datm ada2t1old ada2t1öl ada2t1ő a2datv ad1azo a2d1ág adára2 adá2rak adá2ris ad2del ade2g ad1ege ad1egé ad1egy ade2i a2d1ej adel1ej ad1elh ad1elm ad1eln a2d1e2lő ad1elr ad1elt a2d1emb ad1e2mé a2d1eml a2d1emu ad1eng ad1e2pe ad1epr a2derd ad1erő ade2ti a2deu a2d1e2v a2d1ex adé2kat adé2k1e2 adé2kés adé2kis adé2kü adé2kű ad1éle 2adémont a2d1ép a2d1érz adé2s adé2te a2d1é2ve ad1fl adfo2k1út ad1gr 1adhé 2adia adia2n ad1i2bo 2adid adi2kut 2adin ad1i2na. ad1i2nai ad1ind a2d1ing adi2o1g2ra 2adip 2adis 2adiv a2d1í2z ad2ji adka2na ad1kr 2adob 2adoc a2d1okke 2adol ad1ola 1a2domá 2adomb 2adomi 1a2dop a2d1orc a2d1org 2adorh 2adorian 2adorig ad1orv a2d1orz a2d1osz a2dógu 1a2dóku a2dómé a2dórá 1a2dósat 2adósi. ad1ó2vás 1a2dózó a2d1ö2k a2d1ö2l ad1örd a2d1ös adőr1a adő2rel ad1ő2s ad1pl ad1pr a1d2rac ad2ram ad2raz 2adrá ad2rám 2adro ad2rog a1d2rót ad2ruk ad1sp ad1st 2adug 2adum 2adup ad1u2rá ad1úsz adú2t a2d1úto a2d1üg ad1ü2lé a2d1üt ad1üz a2d1űr ad1űz ad1yéh ad1yér ad3zab ad3zav ad3zár ad3zel ad3zón a2d3zö ad3zsí a1e ae2bé ae2ce ae2cs ae2dé ae2dz ae2ge ae2gé ae2gy ae2he ae2ke ae2ké ae2la ae2l1á2 ae2le ael1ej ae3len ael1érh ae2l1í2 ae2lo ae2l1ö2 ae2lő ae2lu ae2me ae2mé ae2mi ae2mu ae2ne ae2pe ae2pé ae2pi ae2po ae2red ae2ré aero1s ae2ró ae2rő ae2se aes1er ae2sé ae2si ae2ső ae2sü ae2sz ae2ta ae2tá ae2te ae2ti ae2tű ae2va ae2ve ae2vé ae2vi ae2vo ae2vő ae2xe ae2zü a1é aé2derv aé2ge aé2gé aé2gő aé2he aé2je aé2ke aé2kí aé2le aé2lé aé2li aé2lő aé2lü aé2lű aé2ne aé2pí aé2pü aérde2m1 aé2ri aé2te aé2va aé2ve aé2vé aé2vi aé2vü 2afa. 2afaj. 2afaja 2afajá 2afajb 2afa2j1e2 2afajj 2afajn 2afajo 2afajt. 2afaju 2afajz 2afak 2afal 2afam 2afao 2afar 2afas afe2l1e2m 2afék 2aféli 2afélő 2afélt 2afén 2afér 2afés 1affé afi2ap afi2asz afi2ke afi2t1a2 afi2t1e2 af2le a1f2lo a1f2ló a1f2lö a1f2lu 2afoc 2afog 2afok 2afol 2afon 2aford 2aforg 2aformác 2aformál 2aformátu 2aformáz 2aformu 2aforr 2afos 2afot af2rak 2a1f2re af2riz af2rí 2afro af2ron 2a1f2rö af3tá afus3s a2g1abl ag1abr ag1a2cé ag1aga a2g1a2ka a2g1akk a2g1akt 2agal a2g1a2lak a2g1a2lap a2g1a2lá a2g1alj a2g1alm aga2lom a2g1alt ag1ang ag1a2no ag1ant a2gany a2gap ag1apa ag1apá a2g1arc a2g1aré a2g1a2ro a2g1art aga2tom ag1a2tó a2g1a2ur ag1aut a2g1ava 2agaz ag1a2zon agá2c a2g1ács. a2g1ácsi ag1á2ga 1a2gák a3gála a2g1álm agá2lyan a2g1áp a2gár. a2g1árad a2g1á2rai a2g1á2rak a2g1áras a2g1árat a2gá2rá a2gárb a2g1árc a2gáre a2gáré agá2rév a2gárf a2gárh a2gá2ri a2gárj a2gárk a2gárm a2gárn ag1árná a2gáro a2gárr a2gárs a2gárt a2g1á2ru a2g1á2rú ag1ásv a2g1átá a2g1á2t1e2 ag1átfe a2g1áth a2g1átk a2g1átm agá2tol a2g1áts ag1átü a2g1átv ag1bl ag2del agdí2j1a2da a2ge. ag1e2cs a2g1e2d a2g1e2g age2l a2g1ela ag1elb ag1eld ag1ele ag1elé ag1elf ag1elh ag1eli ag1elm ag1eln a2g1elo a2g1elő ag1elr ag1els ag1elt ag1elű ag1elv ag1elz a2g1e2m ag1eng a2g1eny a2g1e2p a2g1erd age2red a2g1erk a2g1erő age2s a2g1e2v a2g1ex a2g1ez a2g1é2j a2g1ék. a2g1ékn a2g1é2l agé2né agé2p1i2p a2g1é2pül a2g1ér. a2g1é2re a2g1é2ré a2g1érh a2g1é2ri a2g1érk ag1érl ag1érm ag1érte ag1érté ag1érth a2g1értő ag1ész a2g1éte a2g1éve ag1fl ag1fr 1agg. ag2g1a2ty ag2g1em ag2git 1aggl 1aggod 1aggok ag3gyar ag3gye ag3gyi ag3gyo ag3gyü agi3a ag1ide a2g1i2ga a2g1ige a2g1igé ag1ike a2gill ag1inf a2g1ing a2g1int a2g1i2oni agi2ó a2g1ip ag1iro a2g1ist agi2sz a2gita ag1izé ag1izm a2g1íj ag1ín a2g1ír ag1ív a2g1íz agká2rok ag1kl ag1kr ag2ne. a1g2non a2g1ob ag1oltó ago2ly1a2 2agom 2agona agon3n ago2n1osz a2g1op a2g1org ag1orj a2g1orn a2g1orr a2g1ors a2g1orv a2g1otth agó2rái a2g1ö2l ag1önk ag1önt a2g1örö ag1örv a2g1ös a2g1öt a2g1ö2v a2g1ö2z a2g1őr a2g1ő2s ag1pl ag1pr 2agrammj a1g2rav 2agrá a1g2róf ag1sk ag1sp ag1sr ag1st agsz2 ag1szt ag1tr a2g1und a2guram agu2rat ag1u2rá ag1urn ag1u2tá a2g1új ag1úta a2g1úti ag1útt a2g1ü2l a2g1ür a2g1üs a2g1üt a2g1üv a2g1üz ag1űr ag1űz a2gy1a2c a2gyad agy1a2dó agy1a2gya a2gyaj 1a2gyak. a2gyakb agya2la agy1alap agy1alg a2gyalj agy1alko agy1alm 1a2gyam agy1ana a2gy1any a2gy1apa agy1apja agy1apjá a2gy1a2pó a2gy1apr agya2sz a2gy1aszó a2gyál agy1árv a2gy1e2c agy1e2g a2gy1el agy1em agy1est agy1esz a2gyev a2gy1ez agy1ék. agy1éke agy1ékk agy1ér. a2gy1é2re agy1érn agy1érr agy1érs a2gyima agy2nyá agyo2r a2gy1oro a2gyorr a2gy1ö2l a2gy1ő2r agyu2r agy1urá 1a2gyú. 1a2gyúa a2gyún agy1úr. agy1ú2sz a2gyút 2agyű aha2l1e aha2sábr ahelyü2kü ahert2 aher1tze ahé2j1út ah1ips ahitköz1 ah1o2vi ahú2sár ahús3s a1i ai2bo 2ai2de ai2dom 2ai2dő a2iék ai2ga ai2gá ai2ge ai2gé ai2gy ai2ia ai2ib ai2ih ai2ij ai2in ai2ir ai2it ai2je aika2 ai2kab ai2k1ad ai2k1al ai2k1ar ai2k1as ai2k1á ai2ke2 aik1el aiki2 ai2kik ai2kis ai2k1ol ai2k1osz ai2kő ai2kü a2ilb a2ile 2aill ail2le. ail2lo ai2ma. 2ai2má 2aimi ai2mit 2aimp ai2na. ai2na2l ain1ala 2ai2nas ainá2 ai2n1álo ai2nár 2aind ai2ne ai2nél 2ainf 2aing ai2n1in ai2nol 2ainp 2ains 2aint ai2nü ai2onb ai2onn ai2ono ai2onr ai2ont ai2pa a2ir. ai2ram 2ai2rat 2ai2rá ai2re. ai2ré ai2ri 2airo ai2rod a2i2se ai2si 2aisk 2aism 2aist 2aisz ai2sza ai2szo 2ai2ta ai2vad ai2var ai2vás 2ai2vó ai2zé ai2zom a1í aí2gé aí2ja aí2já aí2ju aí2ra aí2rá aí2ro aí2ró aí2ru aí2té aí2vá aí2ve aí2vé aí2vi aí2vó aí2vü aí2vű aí2ze aí2zé aí2zü aí2zű a2j1a2dó a2j1adu aj1aga aj1agr aja2kol a2j1akó aja2kú a2j1ana a2j1ant a2j1any aj1apr a2j1áa ajá2c aj1á2go 1a2jánd 1ajánl a2j1áp 2ajár a2j1árb a2j1árc a2j1áre a2j1áré a2j1árr aj1ásá aj1ásv a2j1á2t1e2 ajá2z aj1ázá aj1bl aj1br aj2d1alm aj2d1a2lom. aj2d1a2lomm aj2d1a2lomn aj2d1a2lomr aj2d1a2lomt a2j1e2c a2j1ef a2j1egé a2j1ela aje2leme a2j1elf aj1ellá a2j1elo aj1elő aj1elvá aj1elvo a2j1e2m aj1ene aj1enz a2j1e2r aj1e2se a2j1ex a2j1ez a2j1ége a2j1égé aj1égő a2j1é2k a2j1él a2j1ép ajé2r a2j1ére a2j1éte aj1fl aj1fr aj1g2r a2j1i2d a2j1ij a2j1ik a2j1im a2j1int a2j1io a2j1ip a2j1iz aj1ír aj1íz aj1kl 1ajkú. ajobb1o ajo2g1á2sza a2j1ola aj1old a2j1o2v a2j1ócskás ajó2sár aj1öb a2j1ök a2j1ör a2j1öz aj1őr aj1ő2s aj1pl aj1pr aj1sh aj1sk aj1sp aj2tág aj2teg aj2t1é2t ajt1org aju2hi a2j1új aj1úsz a2j1úto a2j1útr aj1üg aj1ül aj1üs aj1üz aj1űz ajz1aka ajz1atl aj2zer aj2zí aj2zü 2akab aka2cse a2kadag a2k1a2data a2k1a2datb a2k1a2datn a2k1a2dato a2k1a2datr a2k1a2datt 1akadál 1a2kadém a2k1adm a2k1aga 2akal ak1a2lag a2k1a2lak aka2lapú a2k1aleg ak1alko 2akam 2akan 2akao 2akap aka2pád ak1app ak1a2rai ak1arasz a2k1a2ráb a2k1a2rák 2akarc a2karch 2akard ak1a2rén 2akari 2akarr 2akasí 2akast aka2szaj ak1a2szat aka2szel aka2szö a2k1asztr 2akata aka2tab 2akate aka2tel aka2ter akati2 aka2tik aka2tim aka2tin 2akau a2k1autó 2akav 2akaz 1akác. a2k1áf a2k1ág aká2l1a aká2lis a2k1álló ak1árad a2k1árb a2k1árj a2kárk aká2rokn a2k1ártó a2k1á2ru aká2sad aká2saj aká2sal aká2sar aká2sav aká2sást akás3s ak1á2szán aká2szu a2k1ászun akát1a a2k1átla ak1bl akció2s1ű2 a2ke. ake2cs a2k1e2dz ak1e2ge ak1e2gé a2k1ela a2k1elá ake2lem ak1elh a2k1elj a2k1elo ake2lők a2k1elr a2k1elv a2k1emb ak1e2mel a2kerd ak1e2rei a2k1e2ró a2k1e2rő a2kesp a2k1est ak1eszk ak1eszm a2k1e2te ak1e2ti a2k1e2vez ak1é2kem ak1é2kes a2k1é2ké a2k1ékh ak1ékrő 2akém 2akény 2akép. 2aképb 2aképe 2aképé 2aképh 2aképk 2aképl 2aképn 2aképpel 2aképpé 2aképr 2aképt 2aképü 2aképz a2k1érc 2akérd a2kérdek 2akére 2akéré a2k1érm 2akérő a2k1é2rői a2k1é2rőj a2k1érr a2kérteke a2k1értel a2k1értet a2k1értő 2akérv a2k1érz 2akés a2k1észa a2k1é2te 2akéts a2k1étt 2akéz ak1fl ak1fr akgerinc1 ak1gr 2akia 2akib 2akic 2akid a2k1i2dé ak1idi 2akie2 2akié 2akif ak1iga a2k1igé 2akigy 2akih 2akií 2akij 2akil a2k1ill ak1ily 2akim a2k1i2má a2k1imi 2akin ak1ind a2k1ing a2k1ins a2k1ion 2akir aki2rom 2akis a2k1isi a2k1isk ak1ism a2k1ist 2akit 2akiv 2akiz a2k1izm a2kíté a2k1í2z ak2k1a2d ak2kaj ak2k1a2la akk1alk ak2k1arc ak2kál ak2k1á2p ak2k1ed akk1ell ak2kelm akk1elt ak2kem ak2k1eró akke2s akk1ese ak2ket ak2kola 1akkord akk1ölt ak2k1ös ak2kőr 1akku. 1akkum ak2lau ak2lav ak2lor ak2lón ak2lór 1aknai 1aknáb 1aknáh 1aknái 1aknáka 1aknáko 1aknás 1aknát. 1aknáv 1aknáz 2akoa ak1obj 2akoc 2akof 2akokt akolás3s a2k1olda a2k1o2ly 2akom 2akonc 2akond 2akonf 2akong 2akonk 2akons 2akont 2akonv 2akony 2akonz 2akoo 2akop a2k1o2pe ak1o2rat 2akorb 2akord a2k1org 2akori a2k1orj 2akorl 2akorm 2akoro 2akorp 2akorr 2akors 2akort 2akoru 2akorú a2k1orv 2akos 2akóni 2akó1p2 a2k1ó2rá ak1ó2ród 1a2kózá ak1össz akö2z1é2l aközrea3 ak1őr. ak1ős. ak1pl ak1pr ak1ps akrádi2 ak2rát 2akre ak2rea 2akré a1k2réme ak2réta ak2rétá 2akri a1k2rit 2akrí ak2ríz 1akrob 2akrónik ak1sp ak1sz2t ak2t1au aktár2s1a2d akt1emb 1akti. ak2tim 1aktívb aktí2ve ak2t1íve. 1aktívk 1aktívo 1aktívs 1aktívt akto2r1ál akt1osz ak1trá 1aktua 1aktú. a2k1udv a2k1ujj 2akun 1akupu a2k1úg a2k1új a2k1úrr a2k1üg a2k1ü2le a2k1ü2lé a2k1üln a2k1ü2t a2k1ü2v ak1ya a2l1abl alac1c alace2 alaci2 ala2cit ala2cor a2lacsé ala2c3sö ala2csü a2ladag a2l1a2datá ala2gál ala2g1e ala2gép ala2gol ala2gya ala2j1a2d ala2jas ala2j1e2 a2lakad ala2k1an a2l1a2kas ala2kál ala2k1áp ala2kes 1a2lakí a2l1akna. a2laknák a2laknát ala2kol a2l1a2kód ala2k1öl a2l1aktu 1alaku a2lakul. a2lakult al1alg a2l1alj a2l1alk al1all al1alm al1a2lo al1alt ala2n1e 1a2lanny a2lany ala2nyal ala2ny1e2 ala2p1a2d ala2pak ala2pal a2lapan ala2p1á2r ala2p1e2 ala2pill ala2pin ala2pir 1a2lapítv ala2p1ol ala2por ala2p1osz alap1ó2 alap1p al1a2ra al1a2rá al1arg ala1s2p a2l1aszp alaszta2l alat1any alatát1a2 ala2t1e2v ala2t1inf ala2tív ala2t1ol alató2 ala2tór a2l1attak 1a2latti ala2t1ü2 al1ava ala2zúr 1a2láa 1a2láá alába2d alá2b1ada al1ábrá 1a2lábúj alá2dal alá2d1ap 1a2láf a2l1ág. a2lága al1á2gá al1ágb a2l1ágg al1ágh al1á2gi al1ágk al1ágn al1á2go a2l1ágr al1ágt al1á2gú al1ágya 1a2láí 1a2lámo a2l1árad a2lárak a2lárá alá2rár a2l1árk aláste2 alás2tel alás2t1ér. a2l1átd a2láte a2láté al1átép a2l1átf alá2ti a2l1átl a2l1átm a2látö a2látr a2látú al1bl al1br 1album al1d2r a2le. 2alea 2aleb al1ebé 2alec al1ece ale2g1e2lé al1egés alegész1 al1egys a2legyü 2aleh 2aleí2 2alej ale2k1a a2l1ela a2l1elág a2l1eld al1e2led ale2lem. ale2lemb ale2leme ale2lemk ale2lemm ale2lemt a2l1elg a2l1elh al1elm a2l1eln ale2lők ale2lőt a2l1elr a2l1els al1elté a2l1elv 2alem a2l1emb a2l1e2mel al1e2mé a2l1eml 2alen a2l1ene 2alep ale2pe. a2lerd a2l1e2re a2l1erk a2l1ern 2ales al1esem a2lesi ale2sik ale2tet alet2t1est aleü2 2alev ale2vol ale2vői 2alex a2l1exp 2aléc 2alég al1égő alé2kal alé2k1an alé2kat alé2k1em alé2ker alé2kes alé2kor a2lél. al1é2len a2l1é2let a2l1élé a2l1éll al1é2lő a2l1élü 2alén a2léneke a2l1érd al1érs a2l1érte a2l1érté a2l1értő a2l1érz 2alét alé2tek a2l1é2tel al1étl a2l1évi 1alfás 1algásat 1algor al1gr 2alic al1ide a2lidé al1i2do al1ifj a2l1igé 2alik al1ill 2alim a2l1i2má a2linas ali2nin alió2ra al1i2pa a2l1irá a2l1iro a2l1i2si a2lism ali1s2po al1iste 2alite al1izma al1íj a2l1í2v alja2iké 1aljaka 1aljakb 1aljaké 1aljakk 1aljako 1aljas 1aljái alj1árna al2j1á2ro 1aljb 1aljc 1aljd 1aljer 1aljf 1aljg 1aljh 1aljia al2jí 1aljj 1aljk 1aljl 1aljm 1aljn 1aljr 1aljs 1aljt 1aljú 1al2jü 1aljv 1aljz al2k1a2pó alkele2 1alkím 1alkoh 1alkotá 1alkotm 1alkotó al1kre al1kro 1alku. 1alkud 1alkun al2l1aj al2l1akt al2l1akv alla2l al2l1ala al2lalk al2lau all1áll all1ázs al2led all1egy all1emb 1allerg all1ese all1est all1e2vő all1é2jé al2l1id al2lim all1int al2lip al2l1isk al2lí all1óri al2lös al2l1ő2 al2lü 1allű 1almád 2alob al1obe alogos1s alo2g1ó2 a2l1okta al2old. aloma2 alo2mad alo2mak alo2m1al alo2m1an alo2map alo2mar alo2mas alo2mác alo2már alo2m1át alo2mer alo2min alo2mis alo2mit alom1p2 alo2m1ú alo2n1á alon1d2 alon3n 2alop al1opc a2l1ope al1o2ra al1orc al1orn al1o2ro a2l1orr alos3s a2l1ostá a2l1oszl 2alov aló2c3se 3alóguses alóigaz1 alói2ko al1ó2lo al1ónn alóó2 aló2ráj aló2rák aló2zan aló2zis a2l1öb a2l1ö2l a2l1ön a2l1ör a2l1ös a2l1ö2z alpe2l alp1ele al2piz al1sh al1sk al1sl al1sm al1sp alsz2 al1szt al2tada al2t1alap alt1anya alt1elv alt1emb al2t1e2p al2t1e2v al2t1é2k alté2n alt1éne alt1érne al2t1é2rő al2t1érr alt1értő al2t1i2m alti2n alt1ina alti2p alt1ipa al2t1ir al2t1old 1altonk al2t1osz al2tóc al2tön al1trak al1tran al1trav al2tur al2t1út al2tür 1altvé al1ty alu1p 1a2luss alu1str a2l1új al1úr. al1úrb al1úrh al1úri al1úrk al1úrn al1úrr a2l1úté a2l1úth a2l1útj a2l1útn a2l1útt al1üg al1ül al1ün al1ür al1üs al1üt al1üv a2l1üz al1űr al1űz 1alveo 1alvó a2ly1ap a2lyar a2lyál a2ly1e2 a2lyév a2ly1id a2lyim a2lyis a2lyö a2lyug a2ly1ü2 am1abb am1abl 2amad a2m1a2dat am1a2dás a2m1adm a2m1a2dó a2m1a2du 2amag ama2gát 2amaj am1ajt ama2kar a2m1akt a2m1akv a2m1a2lak am1a2lap a2m1a2l1e ama2nya amaó2 2amap 2amas ama2sz1a2k ama2szeg ama2sz1em ama2szél ama2szö ama2tad amata2n ama2tárá ama2tel ama2told ama2t1osz ama2t1ó2 a2m1a2u a2mazo a2m1álm a2m1á2rai a2m1á2rak amá2rá amát1a2dó. a2m1átk a2m1átl a2m1átt am2b1ag am2bal am2b1at am2b1ászá am2b1e2g am2b1e2le am2bep am2b1e2te am2b1ér. 1ambula am1dr a2me. am1e2ce 2ameg am1elá am1e2lem a2m1e2l1i am1elj am1elk a2m1eln a2m1elo a2m1e2lő a2m1els a2m1elt a2m1elv a2m1e2me a2m1eng 2amenn amens1s amen2t1á2ro a2m1erd a2m1e2rő a2mesk 2amest a2m1e2v a2m1ex am1ezr amé2hes amé2k am1éké amé2let a2m1ép a2m1érd a2m1értek a2mértel a2m1étk a2m1évé 1amforá am1fr am1gr amid1i2 ami2g a2m1iga a2m1igá a2m1igé a2mimá am1imi am1imp ami2na. ami2nan ami2nin a2m1inté amió2 a2m1irá a2m1iro amise2 ami2sel ami2sep ami2sz 1amitbo 1a2mitha 1a2mitm 1a2mitö 1amitro 1amitrú 1a2mits 1a2mittá 1a2mittö a2míg am1kl am1kr amme2g am2m1egy am2meta am2m1é2t 2amod a2m1oke a2m1okm a2m1o2koz am1ola a2m1old a2m1oltá a2m1op a2m1ors 1a2mort a2m1orv 2amos amos3s 2amot 2amoz am1ó2ri am1ö2r am1ös am1öt am1ö2z am1ő2r am1ős am1pla am1p2r 1amput am1sk am1sp am1sr am1st am1t2r 2amun a2muni amu2riz amu1sl a2m1u2tas a2m1új am1üg am1ü2l am1üt am1üz 2anad a2n1a2dat a2n1adu a2n1aga a2n1agá an1a2gya a2n1ah 2anai 1a2nakr ana2lap 1analí an1alk an1alm 1a2naló an1a2mo a2n1ana 1a2naná an1ann an1a2ny 2anap ana2pa2 an1apa. a2n1apá a2n1a2pó an1appo an1a2rab an1a2rá a2narc ana2sz1e2 ana2szén ana2szin ana2sz1í2 ana2szó ana2szü ana2t1e ana2tö 2anav a2n1a2va a2n1az a2n1ág a2n1álmi a2n1á2lom a2n1á2p a2násat 2anát a2n1áta a2n1átk a2n1átr an1br anca3u an2c1ál ance2 an2ce. an2c1ér. an2c3hit an2cho anci2al an2c1ó2 an2csaj an2csar ancs1ell ancs1emb an2cs1en ancs1e2p ancs1et an2cséré an2cs1ill an2csiz an2cs1í2z an2cs1or an2csö ancső2 ancs1t an2csut an2cs1ü an2d1alk anda1s and1atl and1e2le and1elk an2d1elő and1els an2derd an2d1es 1andez an2dél an2dil an2d1ö an2d1ő2 an2dús an2dün an2dű an1dy an2dzá a2n1eb an1edd an1e2gé 1a2nekd ane2la ane2l1á ane2l1e2l ane2l1emb ane2lél ane2lő 2anem an1emu an1e2re an1ern an1err 2aneu 2anev a2n1ex ane2z an1ez. a2n1eze an1ezé an1ezt an1ezz a2n1é2ké a2n1éle an1épí a2n1éri a2n1érv a2n1étk a2n1étt a2n1évc an1évem an1éves an1évet ané2véb ané2vén ané2vét ané2vév an1évha ané2vig an1évke an1évkö a2n1évü a2névz anfé2l1é2v an1fl an1f2r anga2d an2g1ada an2g1ado an2g1ala an2g1a2ra an2g1ass ang1azo an2g1ác an2g1áll angár1a2d ang1áta an2g1átj an2g1átt an2g1ed an2g1eg an2g1elf an2g1elh an2g1elj an2g1ell an2g1eln an2g1elő an2g1elt an2g1elv an2gem ang1emb ang1eng an2g1e2r ang1ese ang1éle ang1élv an2g1é2ne an2g1ér. ang1érő an2g1és an2gim an2giz an2gí an2g1osz an2g1óri an2g1öl an2g1ös an2g1ő2 ang1sz an2gü an2gű angye2 angy1el an2gyék an1ide ani2g a2n1iga a2n1igé a2n1i2ko an1ind a2n1inf an1i2on 2anip a2n1i2pa an1i2rá a2n1iro a2n1isi a2n1isk a2n1ism a2nita an1itt a2n1íg a2n1íj 2anív a2n1íz ank1abl an2kaj an2k1a2k ank1ale an2k1a2n ank1arc ank1ari an2k1atl an2k1au an2kaz an2k1ál an2k1e2g an2k1ek an2k1e2l an2k1e2m an2k1e2reit an2k1erj an2k1es ank1érde ank1érem an2kérte an2k1érté an2k1i2d an2k1i2p an1klu an2k1old ank1oszt an2k1ö2römb an2kös an2k1ö2v an2kőr ank1t2 an2k1ü an2ne. an3ny. an3nye an3nyo a2n1oj a2n1okta a2n1old 1a2nomá 2anor a2n1o2ro a2n1orr a2n1ors 2anos a2n1ott a2nódd a2nódo anó1g2 a2n1óni a2n1óno a2n1ó2rá an1óri a2n1öl a2n1ön a2n1ör a2n1ös a2n1ö2t an1pl an1pr an2s1e2l an1ska an2sö an1s2p ans3sze an1sta an2szal an2sz1á2bó an2sz1á2h an2szár ansz1es an2szél an2sz1én an2sz1é2p an2szil an2szin an2szó ansz1t2 ansz1ü2l an2t1abl ant1aga an2t1eg 1anten an2t1e2se ant1esz anti1llát an2t1ing an1t2re a2n1ud a2n1ug a2n1uj 2anuk a2n1u2r anu2szi a2n1u2t a2n1úg an1ü2g anü2l a2n1ülő an1ü2z an1űr an1űz any1a2dó anyag1ár. anyag1árr 1anyagb 1a2nyagé anyag1g 1anyagh 1anyagk 1anyagm 1anyagr 1anyagt 1anyagú a2nyakad a2ny1a2kas a2ny1alk a2ny1all a2ny1ass any1aszt a2ny1a2tom a2nyaz 1anyádt 1anyáék any1álo a2ny1árá a2ny1árb a2ny1árf any1árk a2ny1árn a2ny1á2ro a2ny1árr any1á2sz any1d 2anye a2ny1e2c a2ny1ed a2nyeg any1egé any1egy a2ny1e2k a2nyela anye2leme any1elev a2ny1ell a2ny1elo a2ny1em a2ny1en any1e2re. any1e2rei any1e2ret any1e2rén any1e2rér any1e2rét any1e2rév any1e2rőm any1e2rőr any1e2rőt a2ny1ég a2nyéhe a2ny1é2j a2ny1ék any1élv a2ny1ér. a2ny1érb a2ny1érc a2ny1érd a2ny1ére a2ny1érg a2ny1érh a2ny1é2ri a2ny1érk a2ny1érm a2ny1érn a2nyérő a2ny1érp a2ny1érr a2ny1érs a2ny1érte a2nyérté a2ny1értő a2ny1érv a2nyéve a2nyévé anyha2j1ón anyha2j1ó2r 2anyi anyigaz1 any1ing a2ny1io 2anyí 2anyo any1old a2ny1o2r any1órá any1ök any1ö2r any1öz a2ny1ő2 any1s anyt2 any1tr a2nyur 2anyú 2anyü any1ül a1o ao2áz ao2be ao2cs ao2da ao2dú ao2ka ao2ká ao2la aolaja2d aola2j1ada ao2mo ao2pá ao2pe ao2ra ao2ro ao2so ao2ut ao2ve ao2vi ao2xi a1ó aóá2r a2óbar a2óbá a2óbi a2óbo aó2ce aó2dá a2ódi a2ófá a2ófe a2ófo a2ófő a2ófü a2óhé a2óhi a2óhü a2óil a2óis a2ói2v a2óká a2óke aó1kré a2óku aó2la a2óle a2ólé a2óli aó2lo aó2lu a2ómag a2ómar a2ómas a2óme a2ómi a2ómo a2óné a2ónö a2ónő aó2rá a2óré aó2ri a2ósí a2ósű a2óta a2óte a2óté aó2vo aó2vó a1ö aö2bö aö2cs aö2dé aö2ko aö2kö aö2le aö2lé aö2lő aö2ná aö2rö aö2ve aö2vi aö2vö aö2zö a1ő aő2re aő2ré aő2ri aő2rö aő2rü aő2se aő2sö aő2sz apa2cs1a2v apa2cs1i a2p1a2da a2p1aga a2p1ajá a2p1akc 2apal apa2lag apa2lak a2p1alb a2p1alj a2p1alt apa2mas a2p1ant 2apap apa2pán ap1a2rán 1apasá a2p1asp apa2tad apa2t1ala apata2n apa2t1as apa2tál apa2t1ö ap1aut 2apav a2pava ap1a2zo a2pájú ap1állap a2p1állá a2p1állo apán1n a2p1á2rad ap1á2rai a2p1á2rak ap1á2ram ap1á2ras ap1á2rat apá2ráé apá2ráh apá2rán apá2rár apá2ráv apárba2 a2p1áre a2p1á2ré a2p1árf ap1árka ap1árko a2p1árny ap1ártó a2p1áru a2p1á2rú apáská2 apá2túr 1a2páu ap1bl ap1dr a2pe. ap1e2dé a2p1e2g ap1e2l1a ap1elb ap1e2lé a2p1elf ap1elg a2p1elh ap1elj ap1elk a2pell ap1elm ap1eln ap1elo ap1e2lő ap1elr a2p1elt a2p1elv ape2m ap1emb ap1eme ap1ene ap1eni ap1e2ny ap1e2rő ape2s ap1ese ap1esé ap1eső a2p1e2v a2p1ex a2p1é2he a2p1éje a2p1é2le a2p1éll ap1élm a2p1é2ne ap1épü a2p1ér. ap1észl a2p1éte a2p1éve ap1fl ap1f2r ap1gr a2p1ide a2pidé apigaz1 ap1i2ko ap1ikr a2p1i2nár ap1ind ap1inj a2p1ins ap1i2rat a2p1i2rá a2p1irk a2p1ism a2p1íg a2p1ín a2píté ap1ív a2p1íz ap1kl ap1kr ap1kv ap2laz ap2léd apmeg1 apmű1 apműt2 a2p1ob ap1o2laj ap1oltár ap1opc ap1ope ap1opt apo2rad ap1orcá ap1orsó apor2t1ő2 apo2t1ál a2p1ov 1a2póká ap1ólo ap1óri a2p1öb ap1öl ap1ön ap1örv a2p1ös ap1öv a2p1ö2z ap1ő2r 1appará ap2p1árn ap1ph app1ing ap1pla ap1pri ap1pró ap1p2s ap1py ap2res ap2réd a1p2rém ap2rés. a1p2rím 2apro ap2roc a1p2rod 1apród 1aprózó ap2s1i2kon ap2síz aps1ork apsz1ert ap1szf apsz2t aptára2d aptá2r1ada ap1t2r apuá2 a2p1udv apu1p2 apus3s a2p1u2tas a2p1után a2putc a2p1új a2p1üd a2p1üg a2p1ü2l a2p1ün a2p1üt a2p1üv a2p1üz ap1űr ap1wh ara2b1ár ara2b1í2 ar1abla 2arad ar1a2data ar1a2dato ar1a2datr 2arag ara2g1e 2araj ar1ajkáró 2arak a2r1a2kol ara2kóh ara2kói ara2kós ara2kót a2r1akt. ar1alk a2r1alm a2r1ana 1a2rann arany1a2gá ara2nyal 1aranyb 1aranyh ara2nyí 1aranyk 1aranyn 1aranyr 1aranys ara2pa. ar1arc 1arasz. arasz2t1e ar1aszú ara2tal ara2tel ara2tin ara2t1ő2 aratű2 ara2tűr ar1aul aravasz1 1a2raw ara2zon 2arác a2r1ác. a2r1á2csi a2rácsom a2r1ág. a2r1á2ga. a2r1á2gai a2r1á2gak a2rágan a2r1á2gat ará2gáb ará2gáh ará2gán ará2gár ará2gát ará2gáv a2r1ágb a2r1áge a2r1á2gé a2r1ágf a2r1ágg a2r1ágh a2r1á2gi a2r1ágk a2r1ágl ará2gon a2r1ágr a2r1ágs a2r1ágt a2r1á2guk a2r1á2gun a2r1á2gú a2r1á2gy ar1álc a2r1állá a2r1állo 2arám ará2m1e2 ará2nye a2r1á2rak a2r1á2rá a2r1árk a2r1árr ar1á2ru ar1árú ar1árv ará2sze a2r1á2szoki ará2tal ará2t1ö aráz4s ará2zsál arázsi2 arázs3z ar2c1a2d arc1agy arc1ala arca2n arc1any ar2car ar2cat ar2ceg ar2c1es ar2cev ar2c1é2h arc1él. arc1élb arc1éll arc1élt ar2c1é2n ar2cés 1archí arc1ing ar2c1int ar2ciz arcolás1s ar2có ar2cő arcs1ala ar2csál arc3sere ar2csip ar2c3sor ar2cü ar2cű ard1acé ar2d1alj ar2d1áll arde2l ard1ele ard1elő ard1elt ar2d1e2m ar2d1é2l ar2d1ina ar2d1ing ar2dor ar2dö ar2d1ur ar2dü a2r1e2dz ar1egés a2r1e2gy are2i areil2 a2r1e2le ar1elh ar1elm ar1eln ar1elr ar1elt ar1elü ar1elű ar1elv a2r1emb ar1emel ar1e2més a2remu a2r1e2r ar1e2se ar1e2ső a2r1eszek a2r1eszé a2r1eszü ar1etű ar1e2ve ar1e2vé a2rew aréé2 ar1ég. ar1é2ge aré2k1a2l aré2kek ar1él. ar1élt 2arém aré2nek aré1p a2r1épü a2r1é2ri a2r1érő ar1észj aré1sz2tá aré1tra ar1f2r ar1gha 2ari. 2aria ar1i2de a2ridé a2r1i2ga a2rimád ar1i2mi a2r1i2na. a2r1i2naké a2r1i2nas a2r1i2nat a2r1i2náb a2r1i2náh a2r1i2nán a2r1i2nár a2r1i2nát a2r1i2náv a2r1ingé ari2nit arink2 a2r1inté ari2nü ar1i2ono a2r1i2ón 2arip a2r1isp a2r1iste ari1szf 2ariz ari2zom ar1í2té ar2j1áz ar2j1er arkas3s arká2p arká2s ar2k1eg ark1elá ar2kéj ar2képü ar2k1érd ar2k1in. ar2k1i2ont ar2kiz ar2k1orm ar2k1ovi ar2kud ar2k1u2s ar2les ar2m1a2gy arma2te arm1áll ar2me. ar2meo arme2s arm1ing ar2m1is ar2m1osz ar2m1ö ar2mü arnis3s aroka2 aro2kan aro2k1á2 aro2k1e aro2kin a2r1olda 1a2romát aro2mis a2r1opt ar1org ar1o2ro ar1ors a2r1ovi aró1p a2r1ó2rak a2r1ó2ráj a2r1ó2rám aró2s3zár aró2vár ar1ózd a2r1ö2b a2r1ök a2r1ö2l ar1öng a2r1ör a2r1ös a2r1ö2z ar1őr ar1ős ar1pl ar1pr ar1ry ar1ska ar1srá ar1sta ar1sto ar1str 2art. art1abl ar2t1a2lap arta2n1á2s art1aszt ar2t1a2u ar2t1álla ar2t1e2g art1e2lő art1emb art1e2rei ar2tég ar2t1é2l ar2t1érp ar2t1i2na. ar2t1i2nát ar2t1i2náv art1orz ar2t1ö2v ar2t1ut artvis1s ar1ty2 a2r1uml a2runi aru2tas a2r1új a2r1úsz ar1útj ar1útr a2r1üt ar1üz ar1ű2z ar2vala arvas1s arv1ágy ar2v1árh ar2v1á2ri 2asabl as1abr a2sadag asag2 as1aga as1agg as1a2gy 2asaj a2s1a2kar 2asal as1alab a2s1a2lap as1alf a2s1alján a2s1alji a2s1alk as1alm a2s1anó a2s1ant a2s1a2ny 2asap as1apr 2asar as1aran a2s1a2rá asa2t1ó2 as1a2ty 2asav asa2vo a2s1á2c asá2g1ikr as1áll 2asám a2s1árnak a2s1á2ro a2s1árr a2s1árt a2s1á2ru asás1s as1ásvá as1áth 2asáto 2asáv as1bl as1d2r a2s1e2d as1ege a2s1e2gy ase2k as1eke as1eké as1ell a2s1emb a2s1e2n a2serd as1e2ré as1erő a2s1es ase2t as1eti a2s1ez a2s1éhe a2s1éke a2s1é2l 2asém a2s1ép 2asér a2s1ér. as1érb as1érc a2s1érd asé1s2 as1étv as1é2ve as1fr as1gl as1gr as1ide as1ido as1i2ga as1i2gá as1inj a2s1i2o 2asiv as1izé as1i2zo a2s1íj 2asík 2asín 2asír asírta2 asír2tal a2s1í2v as1ízü 2aská as1kl asko2s1a2rá asko2s1á as2koz as1k2r as2luk as2már 2asodr a2s1of as1okke as1okl as1okos 2asoks as1okta asom1or aso2né 2asor a2s1ord a2s1orm as1osz a2s1ox asó1p2 as1ó2rá a2s1ö2k a2s1ö2l as1örd as1örv a2s1ös as1ö2ve as1őr as1p2l as2pot asp2r a1s2pu as1s2p as3szabá as3szin asszí2ve assz1íve. assz1ívek assz1ívne 1asszoc 1asszony as3szü as3szű 2asta a1stand 2astá a1s2tád 2asti astil2 as2tim 2astí 2asto as2top 2astr as1trag as1trav a1st2ru 2astú a2s1ud 2asug a2s1uj 2asuly asu2r as1ura as1urn a2s1u2sz as1u2tak a2s1u2tas a2s1u2tá as1u2tu a2s1ú2s a2s1ú2t asút1a2 a2s1üd a2s1ü2lő as1üst a2s1üz as1űz 2aszab a2sz1a2d 2aszak a2sz1akc asza2k1e a2sz1akt asza2k1ü a2sz1alk 1aszaló asz1asp asz1ass asza2t1a2 asza2t1e a2szath a2szati 2aszav a2sz1ág. asz1á2ga asz1á2gá asz1ágb asz1ágg asz1á2gi asz1ágk asz1á2go asz1ágr asz1ágt a2szálc a2szálm 2aszám aszá2rada a2száram asz1árnyé a2szárp a2száta a2száth asz1átl a2sz1á2to asz1áts 2aszed 2aszeg aszegész1 asz1eh 2aszek 2aszel asz1e2lem asz1elj 2aszemc 2aszeme 2aszemé 2aszemp a2szemu 2aszemü 2aszemű 2aszen a2sz1eng asz1e2pi 2aszer. 2aszere a2sz1erej 2aszeré 2aszerk 2aszern a2sz1ero a2szerő 2aszerr 2aszers 2aszert 2aszerv 2aszerz asze2s a2sz1ese asz1est 2aszez 2aszék aszé2k1el asz1é2let asz1élés aszé2n1ég aszén1n a2sz1é2re asz1éré 2aszét asz2fér a2sz1ill 2aszin a2sz1inf asz1ing 2aszir a2sz1ism asz1ist 2asziv a2sz1iz 2aszí a2sz1ír asz1í2vi asz2karc asz2k1áp asz2kell asz2kes 2aszob 2aszoc 2aszof aszon1n aszo2n1o a2sz1orr asz1ors a2sz1osz 1aszóa asz1ó2dá 2aszót 2aszök asz1ölt a2sz1ön 2aször asz1öss a2szöt 2aszöv 2asző aszőlőé2 asz3su asz2tab asz2t1apo asz2tác asz2táll asz2t1emb asz2téne asz2t1és asz2t1ing asz2t1olt asz2t1oro asz2t1orr asz2tors asz2t1osz asz2töv asz2tős asz2t1ül asztvíz1 2aszur 1aszús asz1útr 2aszü aszü2g asz1ügg a2sz1ü2z 2aszű asz2vit asz1z 2atab at1abla a2t1a2cé ata2dat at1a2dó 2atag a2t1agya a2taján 2atak a2t1akara ata2kár ata2kel ata2k1é2pes ata2k1ö2v a2t1aktu at1a2lag ata2lap. ata2lapb ata2lapj ata2lapo ata2lapp ata2lapr ata2lapú ata2lat a2t1aleg ata2lik a2t1alle a2t1almás 2atan a2t1anal ata2nó at1a2nyag at1a2nyás 2atap at1app ata2puk ata2pun 2atar a2t1a2rab ata2ran a2t1a2rén ata1st atau2r a2t1a2ut a2t1azo 2atáb at1ábr 2atág at1ág. a2t1á2ga at1ágr 2atáj 2atál a2t1állá a2t1álló a2t1álm 2atám atá2nal a2t1á2pol 2atár atá2rada atá2rado atá2ramh a2táramk atá2ramn atá2r1az atá2rét atá2ris at1árkár atársá2g atár2s1ágá at1ártás 2atás atá2s1á2g atá2sz atá2tal atátá2 atá2tár a2t1átb a2t1átf a2t1áth a2t1áti a2t1átj a2t1átk a2t1átl a2t1átr a2t1áts a2t1átt a2t1átu a2t1átv 2atáv at1bl at1br at1cl at1dr at1e2gé ate2jel ateké2r ate2kére ate2kó a2t1e2l1a a2t1elb at1elc a2t1eld at1e2led at1eleg at1e2lem at1e2l1en a2t1elf a2t1elh at1eljá at1elkö at1elkü a2t1elm at1eln a2t1e2lo at1e2lőn ate2lőt a2t1elr a2t1els at1elta at1eltá at1elté at1eltü a2t1elu a2t1elű a2t1elv a2t1elz a2t1emb at1e2mel a2t1emé a2t1eml a2t1emó a2t1enc a2t1ene at1epi at1epo a2t1erd at1e2rec ate2r1ék a2t1erő a2t1e2se a2t1esé a2tesk ates2t1á ates2tő at1eszm at1eszű ate2tol a2t1e2z 2atég até2get a2t1éhe até2k1a2l até2ke2 a2t1éke. aték1el 2atél a2t1é2le a2t1é2lé a2t1élm a2t1élv 2atém até2ne a2t1éps 2atér até2rá a2t1érdek a2t1érin a2t1érl a2t1érm a2t1értel at1érvek a2t1érz at1észa at1észl 2atét até2tét a2t1étv at1fj at1fl at1fr at1gl at1gr a1t2hus 2ati. a2t1iat a2t1i2de a2t1ido ati2g a2t1ige a2t1igé a2t1igy a2till at1ille at1i2má at2i3mádá at1i2mi a2t1imp 2atin a2t1ing. a2t1inga a2t1ingb a2t1inge atinó2 ati2n1ór at1inté at1into 2atip a2t1i2pa 2atir a2t1irá a2t1iro 2atis a2t1isk a2t1ism ati2sz a2t1iszo 2atit a2t1i2ta a2t1izé a2t1izg a2tizmo a2t1i2zo a2t1íg a2t1íj 2atíp 2atír a2t1í2t at1í2vek atív1e2l at1í2vet atí2vét a2t1íz 2atki 2at1kl 2atko 2atkö 2atku at1kv at1ojt atoka2 a2t1o2k1al ato2koss a2t1o2koz a2t1okta a2t1o2ku at1oldá a2t1oldó ato2m1á 1atombe ato2mer 1a2tomj a2toml 1a2tomok 1a2tomos 1a2toms 1atomú at1opc at1ope a2t1opt 2ator ato2rál a2t1ord a2t1org ato2rú a2t1orv a2t1orzá atos3s ato1sz2f a2t1oszl ató1p2 a2t1ó2rák ató2rán ató2riá ató1stá ató1sz ató2s3zár ató2s3zené ató1tr at1öko atö2l a2t1öle a2t1ölé a2t1ölő at1öná atön2k1a at1ö2röm a2t1ös a2t1öt atö2vi. a2t1ö2z atő2ra at1őrl a2t1ő2s atpen1 at1pl at1pr at1ps atrac1c a1t2rad 2atraj 2atrak at2ramb a1trap a1trau a1t2rav 2atré a1t2réf at2rén atré2szel a1t2ril at2roj a1t2róg 2atrón a1t2rü at2sán at1sh at1sk at1sl at1sp at1st at1s2v atszá2m1é atszáraz1 att1adó 1attakok 1attasé at2t1e2g at2tez att1ing attó2 at2t1ór at1t2re 2atud a2t1udv a2t1ug 2atul a2t1und a2tuni 2atur at1utá at1utó a2t1új 2atúl at1ú2sz a2t1üg 2atük at1ü2lé at1ült 2atün at1üst a2t1ü2v 2atüz at1üzem at1űri. at1űrl 2atűz a1u au2b1in au2bor a2udá au2de au2ga a2ug2h au2go 1a2ukc aul2l aul2t1a aul2ti a2umae a2umaf a2umak a2umam a2umar a2umav a2umáb a2umád a2umáé a2umáh a2umái a2umám a2umán a2umár a2umáv au1ph au2rad au2r1ikr au2rö au2sz1e a2ut. au2tad au2tal au2tam au2tas au2tat 2autá au2tál a2uti 1a2uton a2utó 1autób 1autóé 1autóh 1autói 1autóm 1autón 1autór 1autós 1autót 1autóv a2utr a2utt au2tu au2zí au2zs a2uzú au2z1ü a1ú aú2jí aú2jo aú2ré aú2r1i aú2sz aú2ti aú2to a1ü aü2dí aü2dü aü2ge aü2gy aü2le aü2lé aü2li aü2lö aü2lő aü2lü aü2nő aü2re aü2rí aü2rö aü2rü aü2sz aü2te aü2té aü2ti aü2ve aü2vö aü2zem. aü2zemb aü2zemen aü2zemet aü2zemé aü2zemh aü2zemm aü2zemn aü2zemr aü2zen aü2zé a1ű aű2ri aű2rö aű2ze aű2zé aű2zi aű2zö aű2ző 2avad 2avak av1akti a2v1anh 1a2vant a2v1a2nya a2vanz ava2rac ava2r1ag ava2r1e2 ava2rék ava2sze ava2szü 1a2vatá 1a2vató 2avád avá2nan 2avár avá2r1al avá2ria. avá2riai a2v1á2riá a2v1áta a2v1átt avá2zal av1bl av1e2le av1elv 2aves av1est 2avet 2avez avi2cse av1ing av1kr a2v1old av1oltó avo1s a2v1ox a2v1öm a2v1ös av1ős av1őz av1pr av1sp av1st a2v1ut av1ü2l av1ür av1ü2z a2wag aw2hi awhisky2 awhiskyk2 a2x1ab a2x1ad a2x1ak a2x1al a2x1an a2x1av ax1bl ax1eg ax1el ax1inf ax1ing ax1int axió2r axi2se ax1ír ax1ös ax1öz ax1pr a2x1ut ax1új ax1üz ax1űr a1ye. a1yed a1yei a1yek ay1e2l a1yen a1yes ayet2 ay1fl a1yi. ay1il ay1ing a1yit ayma2 ay1s2t aza2ch aza2cik azai2ko azal2t1a aza1p2 aza1s2 az1áll az1ált azá2nö azá2r1ó2ra azá2s1e azási2k azá2siko azás3s az2du a2z1e2g az1e2le az1elj az1elm az1elő a2z1em a2z1ex a2z1ég azé2k1e2 azé2kol a2z1érté a2z1ing a2z1i2o az1irá az1irt azma1g a2z1ob 2azol azo2nal azo2n1á azont2 a2z1op a2z1or a2z1osz azót2 azó1tr a1z2rí az4sé a2z3sike az3sor az3sp a2z3sü az3sz az1ut a2z1új azú2r1é az1üz 2á. á1a áa2da áa2dá áadás1s áa2do áa2dó áa2du áa2já áa2ka áa2la áa2lu áa2ra áa2sz áa2ut áa2va á1á áá2cs áá2ga áá2gy áá2ju áá2mu áá2ra áá2ru áá2sá áá2sí áá2so áá2só áá2su áá2zo áá2zu á2b1adu áb1akc á2b1a2la á2b1alk á2b1ambu á2b1a2ny ába1p áb1art ába3se á2b1á2g áb1áll áb1álm á2b1áp á2b1árá á2b1árn á2b1á2ru á2b1átj á2b1átl á2b1átm á2b1átv á2b1áz áb2b1a2d ábba2l áb2b1ala áb2b1and áb2b1ár áb2ben áb2b1e2r áb2b1é2l áb2bid áb2bim áb2b1i2s áb2b1ita ább1o2so ább1oss áb2bör áb2b1ül áb2bű áb1dr á2b1ed á2b1e2g ábe2l1a ábe2l1á ábe2l1eg ábe2l1el ábe2l1e2r ábe2lég ábe2l1in á2belnö á2b1e2m á2b1e2n áb1e2ro áb1erő 1á2béc á2b1é2g áb1é2ke á2b1éks á2b1é2les á2b1élt á2b1ép á2b1ér. á2b1é2ri á2b1érs á2b1érte á2b1érté áb1fr á2b1i2d ábi2g áb1iga áb1igé á2b1ikr áb1illa á2b1im ábi2nai á2binas á2b1ind á2b1ing á2b1int á2b1is áb1izm áb1izz á2b1ív áb1kl áb1kr ábla1kr ábla1p á2b1olda á2b1op ábo2raj ábo2ran ábo2rál ábo2ris á2b1osz á2b1o2v áb1öb áb1ö2d áb1öl áb1ön áb1ö2r áb1ös áb1öv áb1őr áb1pr 1ábrái áb2rek áb1sp áb1st áb1sz2 áb1tr á2b1ujjal ábu1sz2 áb1úr. áb1üg áb1ü2l áb1üs áb1üt áb1üv á2c1a2g ác1ajt áca1k2l ác1akn á2c1a2la ác1alm á2c1a2ny á2c1ág á2c1ál ác3cse ác3cso ác1e2l1 ácele2 ác1en ác1er á2c1ép á2c1ére á2c3ha á2c3há ác3he á2c3hé ác3hon á2c3hu áci2as á2c1il ác1inc ác1ing ácin2til áci2ósű á2c1i2s ác1ív á2c1or á2c1osz ác1ór ác1ö2l ács1abl á2cs1a2g á2cs1ajt á2csaka á2cs1akn ács1alap ács1alj ács1alom ács1app ács1atk á2csatom á2cs1á2c á2cs1ál ác3sárg á2cs1árk á2cs1árn á2csáru á2cs1á2ta ácsboz1 á2csef á2cs1e2g á2cs1e2l á2csene á2csent á2cser ácse2t á2cs1ev ács1é2g ácsé2k ács1éki ács1ékk ács1ékn á2csél á2csép ács1é2te ácsi2g á2cs1iga á2cs1ille á2csimi ács1int ácsi2p á2cs1ipa ács1isk ácsí2 ács1ír á2csokta 1á2csolat 1á2csomk ács1orr á2csosz á2cs1ov ác3só. ács1ó2r ác3sót ác3sóv ács1ö2k á2cs1ö2l á2cs1ös á2csöt ács1ő2s ács1s á2csuj á2csut á2cs1úr ács1ü2l á2cs1ü2t á1csy ács3zen á2c1ut ác1úr ác1ül ác1ür ád1abl á2d1a2do á2d1akc ád1a2lap á2d1alb á2d1alj á2d1alk ád1a2nya ád1a2nyá áda1p á2d1a2pá ád1arc á2d1aty á2d1ág á2d1ál ád1á2sz ád1átl ád1dr ád3dz ád1e2c á2d1e2g á2d1ej á2d1e2l ádele2 ádel1ej ádel1eme á2d1e2m á2d1ep áde2r1á ád1erő ád1e2ti ádéd2 ádé1dr ádé1g2 á2d1é2ge ádé1kré ád1éne á2d1érte á2d1érz ádé1st ádi2cse á2d1i2d á2d1i2ga ád1i2ko ád1ill ád1imi ád1ind á2d1int ádi2ódar ádióé2r ádi2óéra ádi2ói2v ádi2óko ádi2ó1k2ra á2d1i2p ád1ist ád1ív ád1kl ád1kr ádo2ga ádo2gá ádo2ge ádo2rak á2d1osz ádós2 ádö2b á2d1ös ád1öv ád1ö2z ád1ő2r ád1pr ád1ps á1d2rót ád1st ád1tr ád1udv á2d1ú2s á2d1üg ád1ü2lé á2d1üz ád3za á2d3zá á2d3ze ád3zú á1e áe2cs áe2dz áe2ge áe2gé áe2gy áe2le áe2lő áe2me áe2re áe2rő áe2se áe2sé áe2si áe2ső áe2sü áe2te áe2ve áe2vé áe2vő á1é áé2de áé2ge áé2gé áé2gő áé2he áé2ke áé2le áé2ne áé2pí áé2pü áé2re áé2ré áé2ri áé2rő áé2rü áé2te á2f1a2gya á2f1alg á2fáb á2f1ág 1á2fák á2f1áp 1á2fás á2fát áf1dr áf1elm á2f1e2m á2f1e2t áf1é2ne áfi2ad áfi2am á2f1i2d á2f1im á2f1ing. á2f1ordá á2f1osz áf2rec á1f2rö áfus3s á2f1ün á2g1abl ág1abr ága2c ág1acé 1ágacska á2gad ág1a2dá 1ágadd ág1a2dó á2g1a2j á2gaka ág1a2kar ág1a2kas 1á2gakb 1á2gakh 1á2gaki 1á2gakk 1á2gakn 1á2gakr á2gakt á2g1a2la á2g1alj á2g1all ág1alt 1á2gam ága2n ág1ana á2g1ang 1á2gank ág1ant á2g1any á2g1a2p á2g1a2r ág1asp á2g1asz ága2tol á2g1au 1á2gaza ága2zon á2g1á2g á2g1áld ág1álm ág1á2mu ágá2nyal á2g1áp á2g1árad á2g1árb á2g1á2ré á2g1árh á2g1á2ria ágá2rokb á2g1árv á2g1ásó ágás3s ágá2sz á2g1át1a2 á2g1átá á2g1áté á2g1átf á2g1áth á2g1áti á2g1átl á2g1átm á2g1átn ágá2tokk á2g1átr á2g1áts á2g1átt ág1átü á2g1átv ág1bl ág1br ág1d2r á2g1e2c á2g1e2d ág1ef á2g1e2g á2g1e2l á2g1e2m á2ge2n ág1enc ág1ene á2g1e2p áge2ra áge2rá áge2r1el á2g1e2s á2g1e2t á2g1e2v á2g1ex á2g1é2g á2g1é2he á2g1éj á2g1é2k á2g1é2l á2g1é2ne á2g1épí ág1é2pü á2g1ér. á2g1érá á2g1é2ré á2g1éri ág1érm á2g1é2rő ág1érte ág1érté á2g1érv á2g1és á2g1éte á2g1éve á2g1évé ág1fl ág1fr ág1g2l ág1gr ág3gyar ág3gye ág3gyú ághá2nyi ági2al ági2asz ági2d á2g1ide á2g1if ági2g á2g1iga á2g1igén á2gill ág1ima á2g1i2mi á2g1i2na. ág1inf á2g1ing ág1ins á2g1int á2g1iri ág1iro á2g1ist á2g1isz á2g1i2ta á2g1iz á2g1íg á2g1ín á2g1ír á2gíté á2g1íz ágká2rok ág1kl ág1kr ág1kv á2g1oá á2g1okl á2g1o2li ág1oltó á2g1op á2g1or á2g1osko ágos3s á2g1oszl ágó1dr á2g1ó2rá á2g1ö2k á2g1ö2l ág1önt ágö2r ág1örö ág1örv á2g1ös á2g1öt á2g1öv á2g1ö2z ág1ő2r ág1ő2s ág1pl ágport2 ágpor1tr ág1pr ág1ps ág1sh ág1sk ág1sl ág1sp ág1st ágsz2 ág1tr á2g1ud á2g1uj águ2n á2g1una á2g1und á2g1u2ra á2g1u2rá á2g1u2t á2g1új á2g1ús ág1útt ág1üd ág1ü2g ág1ü2l ág1ün ág1üv ág1üz ág1ű2r ág1űz ágya1g ágy1alj ágy1alk ágy1alm 1á2gyasn á2gyassa á2gy1á2l á2gy1á2ram ágyás1s á2gy1e2 á2gyél ágy1ér. 1ágygyű á2gyid á2gyil á2gyivad á2gyob á2gyosz ágy1otth á2gy1ó2s ágy1ö2l ágy1ös á2gyur á2gyúh á2gyút á2gy1ü2 áh1ajk áh1ass 1á2hít á2h1ors á1i ái2dom ái2dő ái2ga ái2gé ái2gy ái2ha ái2je ái2má ái2ram ái2rá ái2sz ái2ta ái2vá ái2vo ái2zé á1í áí2gé áí2rá áí2ve áí2vo á2j1adó á2j1akc á2j1akv á2j1a2la áj1ambu á2j1ana áj1ant á2j1any á2j1ar á2j1atl á2j1ax áj1azo á2j1ág á2j1ál á2j1áp ájás3s á2j1át1a á2j1átá á2j1átt áj1bl áj1br áj2ch á2j1e2c áj1egé áj1elm áj1eln áj1elő áj1elv á2j1em á2j1e2n á2j1es áj1e2t á2j1e2v áj1ex á2j1é2g á2j1él á2j1ép ájé2r á2j1ére á2j1éte áj1fl áj1fr á2j1i2d á2j1il á2j1im á2j1iz áj1íj áj1ír áj1ív áj1íz ájk1ell áj2k1ő2 áj2kü áj2lad ájl1akt áj2l1an áj2l1as áj2l1at áj2lik áj2lob áj2nár áj2nin áj2nü á2j1ob á2j1op á2j1or á2j1öb áj1ök áj1öl á2j1ör áj1őr áj1ős áj1pl áj1pr áj1sn áj1sp áj1st2 áj1t2r á2j1ud áj1úsz áj1üg áj1ül áj1ür áj1ü2t áj1üv áj1üz áj1űr áj2zab áj2zaj áj2z3sa ák1abr á2k1a2d á2k1aj ák1aka á2k1a2lapí ák1ale ák1alj ák1ant ák1ara á2k1a2rá ák1arm ák1arz á2k1ass á2k1atl á2k1a2u á2k1á2c á2k1á2l ák1áta ák1átk ák1bl ák1ebé á2k1e2g ák1e2le á2k1elk á2kellene á2k1elm á2k1e2lő ák1emb ák1e2rő á2k1e2vé á2k1e2vo á2k1é2l á2k1é2ne á2k1érm á2k1érte á2k1értő á2k1érv á2k1érz ák1éss á2k1é2te á2k1étk á2k1étt á2k1é2ve ák1fl ák1fr á2k1i2d á2k1if áki2g ák1iga á2k1igé ák1ill á2k1i2m ák1ing á2k1int ák1iro á2k1i2s áki2t ák1ita á2k1i2v ák1ír ák1k2l ák1k2r ák2lar á2k1oks á2k1o2la á2k1old á2k1o2li á2k1oll á2k1o2pe á2k1orv ákos3s á2k1ott ák1óni ákö2l á2k1ölő ák1ö2r ák1ő2r ák1pr ák2rák á1k2reá á1k2ris ák1sp ák1sr ák1st ák1sz2 ák1t2r á2k1uj á2kuni áku2r ák1ura ák1utó ák1új ákú2t á2k1úto ák1üd á2k1üg ákü2l ák1ün ák1ür ák1ü2t ák1űr á1k2vat 2ála. ál1abl ál1acé á2l1adag á2l1a2dó ál1a2já ál1ajt ála2kar á2l1akna. 2álal ál1alak á2l1alát ál1alg á2l1alk á2l1alm á2l1ane á2l1ang á2l1ant á2l1a2nya ál1a2nyái ál1a2nyán á2l1a2nyát ál1a2nyáv á2l1a2pos ál1apó ál1a2ra ála2szek ála2szel ála2sz1ék ála2szö ála2szű ála2tat ála2tet ála2t1ér. ála2tikr ála2tint ál1atlé ála2told ála2t1ó2 á2l1atti á2l1a2ty ál1aut á2l1ábr ál1ág. ál1á2gi á2l1á2gú ál1áll á2l1á2rak ál1árf ál1árk á2l1árn á2l1á2ro álá2s3z á2l1átc á2l1átk á2l1átm á2l1átú á2l1átvá ál1bl ál1br álcai2 1áldás 1áldoz ál1d2r ál1dy á2l1e2c á2l1e2d á2l1ef ál1elk ál1elm ál1elo ál1e2lő ál1elr ál1emu á2l1e2r ál1esem á2l1e2ső á2l1esz á2l1e2t ál1ez á2l1ég á2l1é2he álé2kal álé2k1an álé2k1e2l álé2kü ál1é2le ál1é2lő á2l1é2ne á2l1ér. á2l1érb á2l1érd á2l1érf á2l1érg á2l1érh á2l1é2ri á2l1érm á2l1érr á2l1érs á2l1értá á2l1érte á2l1érté á2l1érz á2l1év. á2l1é2vé ál1fl ál1fr ál1gr 1álhaja áli2as ál1i2bo áli2d ál1ide ál1idé áli2g á2l1iga á2l1ige á2l1igé ál1ill ál1imp á2l1ind ál1inf á2l1i2onb á2l1i2ont á2l1i2p ál1irá á2l1iro áli2s1e áli2s1ék áli2sis ális3s ál1iste á2l1iz ál1ín ál1í2r ál1ít ál1í2v álká2rok ál1k2l ál1k2r ál2l1a2dó 1állag ál2laj ál2l1a2lak 1államá álla2m1e 1államot 1államti ál2l1a2pá ál2l1a2r 1állata álla2tas álla2t1e2 álla2t1or álla2t1ö2 1állatu ál2l1á2g ál2l1á2l ál2l1árr állás1s ál2l1áth ál2l1átm ál2led ál2l1e2h ál2l1ej áll1éké ál2l1iz 1állomá ál2lü 1álmaim 1álmok. 1álmom 1álmot. 1álmuk 1álmunkb ál1obj á2l1o2ka. á2l1o2kai 1álokaih 1álokain 1álokair á2l1o2ká 1álokán 1álokát 1álokáu álo2kok 1álokonk álo2kos á2l1okta 1á2l1o2ku á2l1ol áloma2 álo2mad álo2m1al álo2m1an álo2mar álo2mas álo2m1á álo2m1e álo2m1it álo2mot á2loms álo2m1ú á2l1ont ál1opc á2l1ope á2l1or á2l1osz á2l1ox álóa2 álóá2 álóó2 áló2ráj áló2s1ű2 álót2 ál1öb á2l1öd á2l1ö2l á2l1ös ál1öz á2l1őr ál1p2l ál1p2r ál1p2s ál1sk ál1sl ál1st ál1trad ál1t2rak ál1t2ran ál1t2re ál1tré á2l1ug álu2n á2l1una á2l1u2r á2l1u2t á2l1uz á2l1új á2l1úr álú2t ál1útj ál1útk ál1útn á2l1úto á2l1útr á2l1útt ál1üg ál1ün ál1ür ál1üt ál1üv ál1üz ál1űr ál1űz ály1ada álya1g2 ály1ant ály1anya álya1p ály1ass á2lyál á2ly1e2 á2lyéj á2lyél á2ly1é2ne á2lyére á2lyéve á2lyide á2lyí ály1k2 ály1odv á2lyol á2ly1ó2 á2ly1ö á2lyő ály1s á2lyug á2ly1ü2 á2ly1ű2 á2m1abl á2m1abr ám1a2cé ám1adm ám1agg á2m1ajt á2m1akt ám1a2lap ám1all ám1alt ámaó2 á2m1app á2m1arc áma2sz1ál áma2szel áma2szív áma2sz1odv áma2sz1ü2 ám1atl á2m1att á2m1aty ám1aud ám1a2zo ámá2c ám1áf á2m1ág ám1álla ám1állo ámán1n ámán1tr á2m1á2rak ám1á2ram á2m1áras á2m1á2rá á2m1árb á2m1á2ri á2m1árn á2m1á2ro á2m1árr á2m1á2ru ám1ásv á2m1átb ám1á2t1e á2m1áti á2m1átm ám1á2zó ám1bl ám1dr á2m1e2b á2m1ej á2m1ela ám1elá ám1e2lem ám1elé á2m1elh ám1elí á2m1elj ám1elk á2m1elm ám1elo á2m1e2lő ám1els ám1elt ám1elü ám1elv á2m1e2m á2m1erd ám1e2rek á2m1erk á2m1e2ro áme2rők áme2rőt áme2rőv ám1e2se ám1ess ám1esz áme2t á2m1eti á2m1etű á2m1ev á2m1ex á2m1ez ám1éke á2m1é2le á2m1ép á2m1érc á2m1érd á2m1értel á2m1étk ám1fr ám1gr ámi2ab ámi2al ámi2am á2mide á2m1idé ám1i2dő á2m1iga á2m1igá á2m1igé á2m1ill á2mimá á2mimm á2m1imp á2m1ind á2m1inf á2m1ing á2m1inte á2m1inté á2m1inv á2m1i2pa á2m1irá á2m1iro á2m1irt á2m1isk á2m1ism ám1i2szá á2m1i2z ám1íg á2m1íj á2m1ír á2m1í2v ám1íz ám1kl ám1kr ám1kv ámla3t2 á2m1ob á2m1of á2m1oká á2m1okl á2m1okm á2m1okta ámo2lyas á2m1op ámo2r1á2l ámo2ris ámo2r1odv ámo2sas ámos3s ám1osto á2m1osz á2m1ov á2m1ox ám1ó2r ám1ö2k ám1öl ám1ön ám1ör ám1ös ám1öt ám1öv ám1ö2z ám1ő2r ám1ő2s ám1őz ámpa1p2 ám1p2l ám1p2r ám1p2s ám1sk ám1sm ám1sn ám1sp ám1st ám1sz2 ám1t2r á2m1ud á2m1ug á2m1uj á2m1und á2muni á2m1u2r á2m1utá á2m1új ám1üd ám1üg ám1ü2l ám1ür ám1üt ám1üv ám1üz á3műt ám1ű2z ámva2s1u2 á2n1abl á2n1a2cé án1ach án1ada ánae2 án1afr án1agya án1ajt á2n1aká á2n1akc á2n1akr á2n1a2la án1alk á2n1all á2n1anó án1anya á2n1a2o ána2p án1apa ánap1i án1ara á2n1arc án1assz ána2t1ér. ána2tol ána2tor ána2t1ű á2n1a2u án1ava án1ábr á2n1ág á2n1áll án1ár. án1árad án1á2ri án1árm án1árn án1áro án1áru án1ásv áná2t1a áná2t1á á2n1á2z án1bl án1br án2cac án2c1ad án2caj án2cal án2c1a2n án2car án2c1as án2cat án2c1au án2c1ál án2c1á2ro án2cás án2c1ed án2c1e2g ánce2l ánc1ele án2c1elt án2c1er án2c1e2s án2c1et án2cez ánc1éhe ánc1é2ne án2c1ér. án2c3h án2c1ill án2cim ánci2p ánc1ipa án2c1ir án2c1i2s án2c1ó2 án2c1ö2 án2cő áncs1an ánc3sás án2c3seb áncs1es ánc3spo ánc3sza án2cü án2cz áne2d án1edé á2n1ef á2n1e2g á2n1e2l án1emb án1e2mi án1eml án1e2mu á2n1en á2n1e2p án1es á2n1e2t án1e2u á2n1ex án1ez á2n1é2d á2n1é2g á2n1ék. á2n1ékn án1éks á2n1é2l á2n1é2ne án1épí án1épü á2n1ér. á2n1érc á2nérd á2n1éré á2n1érl án1éte á2névad á2n1éve á2n1é2vé án1f2r án2gab án2g1a2r án2g1ára ángás1s án2g1át án2ged án2g1el ánge2s án2g1ér. án2g1é2s áng3g án2g1it án2g1iv án2gí án2g1osz án2gőr án2g1us án2gü 1ángy. án2gyas á2n1i2d á2n1if á2n1i2ga án1igé áni2k1a áni2k1á áni2ke án1ill á2n1im án1ind án1inn á2n1i2p á2nirr án1irt án1isk án1ism á2n1i2sz áni2tá áni2t1e2 áni2t1í áni2tol áni2t1or án1izo án1íg án1ív án1íz án2kaj ánk1aro án2kern án1k2li án1k2lo án1klu án1k2rá án3nye án3nyí án3nyo án3nyu á2n1o2b á2n1okir á2n1okta á2n1o2ku án1old án1oli á3nom áno2n1i2m á2n1o2r án1oszl án1ott á2n1ox án1óri án1ök á2n1öl án1öm á2n1ön á2n1ör á2n1ös á2n1öt án1övö á2n1őr án1ő2s á2n1ő2z án1pl án1pr án2ses án2s1ér án2sis án2siz án1s2pe án1s2pi ánst2 án1str áns1üld án1szl ánt1acé ánt1a2ny án2taz án2t1á2g ántá2p án2t1árb án2t1ári án2t1ed ánt1eké ánt1elh án2tez ánt1éke án2térte án2tid án2t1ipa ánt1ist án2t1iz án2t1ív án2tök án2t1ös án1t2rak án1tran án2t1ü2l á2n1ud á2n1ug á2n1uj á2n1u2r á2n1u2t án1úr ánú2t án1útj á2n1úto án1útt án1ü2g án1ü2l án1ü2t án1ü2v án1ü2z án1űz ány1adás ány1a2dó ány1agg ány1akc ány1alap ány1alk ány1all ány1anya ány1anyá ány1apá ány1ara ány1ará ány1art ány1assz ány1aszt á2ny1á2l ány1á2ras á2ny1á2rá á2ny1árb ány1árc á2ny1árf ány1árh ány1árk á2ny1árn á2ny1á2ro á2ny1árr á2ny1árs á2ny1árt ány1áru ány1árú á2ny1átl á2ny1á2z ány1ed á2ny1e2g ányegyez1 ány1el ánye2le á2ny1e2m ány1en á2ny1ep ány1eső ány1et ány1e2v á2ny1éd á2ny1ég á2nyéhe á2ny1é2j á2ny1é2k á2ny1él á2ny1é2ne ány1érc. ány1érre á2ny1érte á2ny1érté ányé2r1ü ány1érvé á2ny1és á2nyéte á2nyétk á2ny1étt á2nyéve ányfé2l1é2v á2ny1id á2nyigé á2nyike á2ny1ikr á2nyirat á2nyiro á2nyisk á2ny1isz á2nyita ány1í2ró á2ny1oml á2ny1ont á2ny1o2r á2nyosz ány1ök ány1ö2r á2ny1ös ány1öz á2ny1ő2 ány1tr á2nyug á2ny1ur ány1ut á2nyúto á2ny1ü2 á2ny1ű2 án2zál á1o áo2cs áo2ká áo2ko áo2mo áo2pe áo2so áo2szan áo2sz1e áo2szis áo2sziv áo2szú á1ó áó2ha áó2va á1ö áö2le áö2mö áö2re áö2rö á1ő áő2sz á2p1a2dot ápa1tr ápa3u2 á2p1ág áp1áll áp1áta áp1dr áp1eg áp1e2l áp1e2m ápe2n á2p1e2s áp1e2t á2p1ég áp1é2te ápi2ac ápi2av á2p1im áp1inj áp1int ápi2t á2p1ita á2p1ín á2poll ápo2r1e áp1őr áp2ro áp1t2r á2p1ug á2p1u2t á2p1úr áp1üg áp1üz á2r1abl á2r1abr á2r1abs ár1adag á2radata á2radatá á2radatb 1áradaté á2radatn á2radato 1á2radatr á2radatt ár1a2gá á2r1ajk á2r1a2kad á2r1a2kas á2r1akc á2r1akna. á2raknát á2r1akt. ár1akti ár1aktí ár1alá á2r1alj. á2r1alja. á2raljak á2r1aljá ár1alk ár1all á2r1alm ár1alt á2r1alv 1á2rama. 1áramai 1á2ramá ára2mál ára2m1el ára2m1érté 1á2rami ára2m1in 1á2ramkö 1á2ramok 1á2ramol 1á2ramot 1á2rams 1á2ramu 1á2ramú ár1ana ár1ang ár1a2no á2r1ant ár1a2pá ár1a2pó ár1aps á2r1a2rá á2r1arc ár1a2ri á2r1asp ára2taj ára2tal ára2tav ára2tál ára2t1inf ár1atlé ára2t1ü2 ár1aty á2r1ábr árá2c árá2g ár1ága ár1ágr ár1ágy ár1á2lo á2r1á2p ár1ár. á2r1á2rak á2r1á2rá á2r1árb á2r1árf á2r1á2ri á2r1árk á2r1á2ro á2r1árr á2r1árt ár1á2ru ár1árú ár1árv á2r1ásás árá2szó á2r1á2ta árát1a2d á2r1átá ár1átb á2r1átc á2r1átd ár1á2t1e2 á2r1áté á2r1átf á2r1áth á2r1á2ti á2r1átj á2r1átk á2r1átm á2r1á2tö á2r1átr á2r1áts á2r1átt á2r1átú á2r1átv ár1bl 1árboc ár1br ár2d1ál árd1ell árd1eme ár2d1é2n ár2d1őr ár1drá ár2dud áre2á ár1e2d á2r1e2g ár1ej á2r1e2l árelői3r áre2ma áre2mél áre2n ár1ene ár1eng á2r1e2r ár1e2sé ár1e2ső ár1evé á2r1ex ár1ébr ár1éde á2r1é2g ár1éj. ár1é2je ár1éjs á2r1é2ke á2r1é2ké á2r1éks á2r1é2l á2r1é2ne á2r1ép á2r1éré á2r1é2ri ár1éss ár1ész á2rétk á2r1étr á2r1étt á2r1étv á2r1év. áré2vek á2r1évk á2r1évr ár1fl ár1f2r árgás1s ár1gl ár1g2r ár2gyárv ár2gyir ár2gyol ár2gyó á2r1i2de á2r1i2dé á3r2i3dőtl ár1ifj ári2g á2r1iga á2r1igá á2r1ige á2r1ill á2r1i2má ár1imb á2r1i2mi á2rinas á2r1inc á2r1ind á2r1inf á2r1ing ár1inn á2r1int á2r1inv á2rio á2r1i2paro ári2s1e ár1isko ár1iste ár1i2sza á2r1i2ta ár1i2zo á2r1ír ár1ív á2r1í2z árka1k2 1árkádo ár1k2l 1árkok ár1kré ár1k2v árnás3s árnya2n ár2ny1any árnye2l ár2ny1ele ár2nyelő ár2nyem ár2nyes ár2nyok ár2ny1ol ár2nyos ár2nyö ár2nyü ár1odv á2ro2ká áro2k1e á2rokha á2rokm áro2kol á2r1o2koz á2rokre 1á2roks á2rokta á2r1olda ároma2 áro2maj áro2mak áro2m1al áro2m1as áro2már áro2m1ok áro2m1os ár1opt á2r1o2r áro2sas áro2sál áros3s á2r1ostr á2r1osty ár1otth á2r1o2v áróé2r ár1ó2nét ár1ó2név áró1p2 á2r1ó2rak áró2rák á2r1óri áró1ská áró1s2p ár1ö2b ár1öc ár1ök á2r1ö2l á2r1ön ár1ör á2r1ös ár1öv á2r1ö2z ár1ő2r ár1ő2s 1árpa. ár1pl ár1p2r ár1p2s ár2s1ala árs1asz ár2s1ál ár2sed ár2s1e2l ár2sem ár2s1en ár2ses ár2s1é2g ár2sip ár2sirá árs1okt ár2s1ol ár2sóv ár2s1ön árs3s ár1s2tab ár2sut ársza2ké ár2s3zene ár2tado ár2t1aj 1ártalo árta2n1á2s árt1ará árt1a2ris árta3u2 árt1áll ár2t1árn ár2t1á2ru ár2t1e2g árt1elh árt1eli árt1ell árt1eln ár2t1elő árt1emb ár2t1erk árte2s árt1ese árt1esth árt1eti árt1éle ár2t1érd ár2t1érte ár2tid ár2tif ár2t1ins ár2t1int árt1izg ár2tít ár2t1okta ár2top árt1otth ár2t1ön ár2t1ös ár2t1ura árt1u2sz ár2t1ut 1á2ru. 1á2rua áruá2 1á2ru1b2 1á2ruc á2rud 1áruda 1árudá 1á2rue 1á2rué 1á2ruf 1árugy 1á2rui á2ruj 1árujá 1á2rum 1á2run. 1á2runa 1á2runá á2r1und á2runi 1á2ruo 1á2ru1p2 á2rur 1árura. ár1urá 1á2rus árus3s á2rut 1árut. áru2tal áru2tas 1árute áru1tr áru2tun 1á2ruü 1á2ruv ár1u2z 1á2rúé 1á2rúk ár1úré ár1úrf ár1úsz á2r1úta á2r1útb á2r1úté á2r1úth á2r1ú2ti á2r1útj ár1útl á2r1útn á2r1ú2to á2r1útr ár1úts á2r1útt ár1ü2g ár1ü2l ár1ün ár1ür ár1ü2s ár1üt ár1ü2v ár1üz ár1űr ár1ű2z 1árvác ása2b á2s1abl ás1abo ás1a2dat á2s1a2dá ás1a2do á2s1a2dó á2s1a2já ás1ajtó á2s1a2kar á2s1akc á2s1akv ás1a2la ás1alg ás1a2li ás1alj ás1alk ás1all ás1alm á2s1alt á2s1amb ása2n á2s1ana á2s1anó á2s1ant á2s1any ás1a2pá ás1app ás1apu ás1a2ra ás1a2rán á2s1arc á2s1aré á2s1a2ri ás1art ás1arz ás1asp á2sass 1á2satá á2s1atl á2sato ás1aty á2s1a2u á2s1azo á2sábé á2s1ábr ásá2gai á2s1ágb á2s1á2gig á2s1ágk ás1ágn á2s1á2gú á2s1ál á2s1á2p ás1áras ásá2rét ásáró2 ásá2rón 1á2sásb 1á2sási 1ásásk ás1ásv ás1á2ta á2s1átá ás1áté ás1áth ás1áti ás1átj ás1átk á2s1átl á2s1átr ás1áts ás1átt ás1átv á2s1á2z ás1bl ás1br áscsa2p1á2 ás1d2r ás1e2b á2s1e2d á2s1ef ás1e2gy á2s1e2l á2s1e2m á2s1e2n ás1epi ás1erk ás1erő á2s1e2s á2s1e2t ás1e2v ás1ex ás1ez á2s1é2g á2s1éhe á2s1éj á2s1é2k á2s1é2l á2s1é2ne á2s1ép á2s1ér. á2s1érd á2s1é2re á2s1é2ré á2s1é2ri á2s1érl á2s1érs á2s1érte á2s1érté á2s1értő á2s1érv á2s1é2s á2s1é2te ás1étk ás1étt á2s1é2ve ás1fl ás1fr ás1gl ás1gr á2s1i2d á2s1if ási2g ás1iga ás1ige ási2k1e á2s1ill á2s1imá ás1imp ás1ind ás1inf á2s1ing á2s1ini á2s1int ás1inv á2s1i2p á2s1i2rat á2s1i2rá ás1iro ás1irt á2s1isk á2s1ism ás1ist ás1i2sz ás1ita á2s1iz ás1íg á2s1íj ás1íns ásí2r ás1írá ás1író á2s1í2v á2s1í2z ás1kl ás1k2r ás1kv 1ásnu á2s1ob ásoda2 áso2d1al áso2d1an áso2d1as áso2dau áso2d1ál ás1okl ás1okm ás1okta ás1oldó ás1oli á2s1ont á2s1op ás1o2rá á2s1org á2sori á2s1ork ás1orr á2s1ors á2s1orv ás1osz á2s1o2v 1á2sób 1á2sóé 1á2sóg 1á2sói 1á2sój 1á2sók 1á2són ásó1p2 á2sór ás1ó2rá ás1óri 1ásóró á2sós ás1ó2sá 1á2sót á2sóv á2s1ö2k ás1ö2l ás1ön á2s1ö2r á2s1ös ás1ö2v á2s1ö2z ás1ő2r ás1ő2s á1spic ás1p2l á1s2pór ásp2r ás1ps ás1s2k ás1s2p ás1sr ás1s2t ássz2 ás3szab ás3szag ás3szaka ás3szaké ás3száj ás3szám ás3száz ás3sze ás3szél ás3szf ás3szi ás3szí ás3szk ás3szoc ás3szok ás3szol ás3szor ás3szó ás3szö ás3szt ás3szú ás3szű ás2teg ást1elem ás2tir ás2t1ös ás1t2re ás1tri ás1tróf á2s1ud á2s1uj á2s1u2r á2s1u2s ásu2t ás1uta á2s1utá ás1utó á2s1u2z ás1úr. ás1úrn ás1ú2sz ás1úti ás1úto ás1üd á2s1üg ás1üld ás1üle á2s1ün á2s1ür ás1ü2ve á2s1üz ás1űr ás1ű2z á2s3zac á2sz1a2d ász1aga ász1agá á2sz1agy á2szaj á2sz1akc ász1a2kol á2sz1akt ász1ale á2sz1alk ásza2n á2szana á2sz1ant á2sz1any á2sz1ap ásza2s ász1asz ásza2t1e á2sz1au ás3zavar ász1ágg ász1ágy ász1á2lo ás3záp ászá2r1as ász1á2rih á2sz1á2rú ászás1s á2száta á2sz1áz ász1e2b ászebé2 ászeb1éde ász1e2gé ász1e2gy ász1eln ász1elv ász1emb ás3zene ás3zené ász1eng ász1e2p á2sz1erd á2sz1e2ré á2sz1e2s ász1e2t ász1e2v ász1ex á2sz1éj á2sz1ékb á2sz1é2l á2sz1é2ne á2sz1ép ász1éré á2sz1éte á2sz1étt á2sz1éve á2szid á2szif á2sz1ill á2szind ász1ing ászi2p á2sz1ipa á2sziro á2sz1isk á2sz1ism ász1ist ász1ita á2sziz á2szír ász1k2 1ászkái á2szokl á2sz1okm ász1ors á2sz1osz ászó1s2p á2sz1ö2b ászö2l ász1ölt á2sz1ö2r á2sz1ös ász1övé ász1őr ász1ő2s ász3sa ás3zsu ászt2 ász1tr á2szuni á2szur á2szut ász1ú2s á2sz1ü2g á2sz1ün á2sz1ü2z ász1z át1abr át1a2já át1ajk át1ajt áta1kré á2t1akt. á2t1akto át1alh á2t1alja á2t1alm át1als át1a2lu át1alvá á2t1a2ra á2t1ará á2t1arc át1arz áta2sá át1aut át1azo átá2c át1ág. át1ál átá2p át1ápo á2t1á2rad á2t1á2rai át1áram á2t1á2rá á2t1árb á2t1árn á2t1á2ro á2t1árt á2t1á2ru 1á2t1ásás átá2s3z á2t1átf á2t1átu át1átv át1bl át1br 1átbu át1dr át1e2c át1ej át1ell át1eln át1elv á2t1emb át1eml át1eng áte2rá áteri2 áte2rik át1erő át1ex át1é2d átée2 áté2g át1ége át1égé áté2kaj áté2k1a2l áté2kas áté2ke áték1em áték1es áté2kol áté2k1ü át1é2l áté2p á2t1érb á2t1é2ri á2t1érr á2t1érz áté2t1á2 1átfés át1fr át1gr át2hi. át2hia 1áthid áti2ag áti2al áti2d áti2g á2t1igé át1ill á2t1ing át1i2pa á2t1irá át1isk át1ist á2t1i2ta á2t1izé á2t1izm á2t1i2zo át1íg á2t1í2r át1í2v 1átkel át1kl át1k2r átle2g1 átlege2 átműt2r át1oj áto2kol át1okol. át1o2koz át1okta 2átolj 2átolt át1oml át1ont át1op áto2ran áto2ras áto2rác áto2rál áto2re áto2ris áto2r1ol át1orzá á2t1o2x átói2ko átó1p2 át1óri át1öb átö2l át1ölé át1öml át1ön át1öt á2t1ö2v át1ö2z át1ő2r át1pl át1pr át1ps át2ril át1sk át1sl át1sm át1sp át1sr át1st 1átszű 1átteki át3t2é át1t2r á2t1udv á2t1ug á2t1uh á2t1uj átu2min átu2n á2t1u2r átu2sze á2t1u2t át1új á2t1úr. á2t1úrb á2t1úrh át1úri á2t1úrn á2t1ú2ro á2t1úrr á2t1ú2s á2t1üg át1ül á2t1üt á2t1ü2v át1űr 1átvár 1átvev á1u áu2ga áu2go áu2ná áu2no áu2nó áu2nu áu2sz áu2ta áu2tá á1ú áú2sz á1ü áü2ge áü2gy áü2le áü2lé áü2lö áü2lő áü2lü áü2rí áü2té áü2ti áü2tö áü2tő áü2tü áü2vö á1ű áv1adm á2v1ajk áv1akt áv1alk áv1alt áv1asp áva1st áva1sz2 áva1t2 á2v1au áv1azo áv1áls áv1áte áv1átf á2v1áth á2v1átj á2v1átk á2v1átu ávegész1 á2v1e2l ável1é áv1é2de ávé1dr á2v1é2ri á2v1érte á2v1érté áv1fr á2v1iga á2v1igé áv1ind á2v1inf á2v1ing á2v1int á2v1i2rá á2v1iro á2v1i2si áv1isk áv1ism áv1izm áv1izo áv1ír á2v1ob á2v1olv á2v1op á2v1osz áv1órá áv1ör áv1ös áv1öv áv1őr áv1pr áv1sk áv1sp áv1st áv1tr á2v1ug á2v1ur á2v1ú2sz ávú2t á2v1úti á2v1úto áv1üg áv1ü2z á2z1abl áz1abs áza2dal áza2d1e2 áza2dott áza2dü áz1ajt áz1akc á2z1a2kó á2z1akt. á2z1akta áz1aktá á2z1aktu áz1a2lap á2z1a2le á2z1alk áza2n á2z1ana á2z1ano á2z1any á2z1a2p áz1a2rá áz1arc áz1arm á2z1assz á2z1aszt áza2t1a2l áza2tan ázate2 áza2t1el áza2t1ér. áza2t1érv áza2tés áza2tik áza2tí áz1aty á2z1a2u á2z1á2g á2z1á2l á2z1á2rai á2z1á2rak á2z1á2ram á2z1á2ras á2z1á2rat ázá2rár ázá2rát á2z1árb á2z1árc á2z1árd á2z1á2ré áz1árf á2z1á2ri á2z1árjáb á2z1árjáv á2z1árka á2z1á2rokk á2z1á2rokr á2z1árp á2z1árrá áz1á2runkn áz1á2runkr ázá3rus. ázás3s á2z1á2ta á2z1á2t1á áz1átb á2z1á2t1e2 á2z1áté áz1áth á2z1átr áz1áts á2z1átü á2z1áz áz1bl áz1d2r áz1ef áz1e2g áz1e2m áz1ep áz1e2r áz1e2s áz1e2t áz1ex áz1e2z á2z1ég á2z1é2l á2z1é2p á2z1ér. á2z1érő á2z1érte á2z1érté á2z1értő á2z1érz á2z1é2te á2z1éve áz1évi áz1fl áz1fr áz1g2r á2z1i2d á2z1igé á2z1i2kon á2z1ill á2z1imá á2z1imi áz1imp á2z1inf á2z1ing á2z1inj á2z1int á2z1i2par áz1irá áz1iro ázi2s1e ázi2sir ázi2s1í2 ázis3s ázi2s1ü ázi2szó ázi2z áz1izm áz1izo áz1íj áz1í2v áz1k2l áz1k2r á2z1olda á2zoltal á2z1oltó áz1oml á2z1ont á2z1o2r á2z1osz ázói2ko áz1ól. áz1ó2rá á2z1óri ázó1s2p ázó1sz áz1öb áz1öd áz1ö2l áz1öm áz1ön áz1ös áz1ö2t áz1ö2v áz1öz áz1ő2r áz1pl áz1p2r á2zsab á2zs1a2d á2zs1a2g ázs1ajt á2zs1akn ázs1ala ázs1alk ázs1all á2zs1amu ázs1any á2zsar ázs1ará á2zsat á2zs1au á2zs1áll á2z3sár. á2zse áz3seb ázs1e2c ázs1ef ázs1eg ázs1e2l ázs1e2m ázs1es á2zséj á2zs1é2k ázs1éne á2zs1ére á2zs1éri ázsé2t ázs1éte á2zsia á2zsiá á2zside ázsi2g á2zs1iga ázs1igá á2zsige á2zsimm á2zs1ing á2zs1int á2zsinv á2zsió á2zsip ázs1isk á2zs1ita á2zsiz á2zs1í2 áz3sor áz3sóh ázs1ó2r á2zsö á2zs1ő2 ázs1s á2zs1uj á2zs1ut á2zsúto á2zsü ázs1ü2v á2z3sű áz3szá ázs3zon áz1t2r á2z1ud á2z1ug á2z1uj á2z1u2r á2z1ut á2z1új á2z1úr á2z1ü2g ázü2l áz1ür áz1ü2z ázy1i áz3zse 2b. 1ba baa2d ba2b1a2dat ba2b1ajk baba1k2 ba2b1ara ba2b1arc ba2b1aszt ba2b1ábr babá2c ba2b1ácsi ba2b1ág bab1áll ba2b1á2ro ba2bátv ba2b1érc babé2t bab1éte ba2bév ba2bik ba2b1i2na. ba2bola bab1old ba2b1ó2r ba2b1ult ba2bü ba2c3hu ba2csor 2b1a2dag ba2das 2b1a2dato ba2d1ár ba2deg ba2d1e2s ba2dog 2badomá ba2dód ba2dói ba2dój ba2dók ba2dót ba2duj ba2dús baegész1 bae2r baé2r ba1fl ba1f2r ba2gai ba1g2n ba1g2r 2b1agy. bai2z ba2jag ba2j1á2ru ba2j1á2to 2bajkú ba2j1ó2r ba2jü ba2jű ba2k1a2pó 2bakas ba2kaszt 2ba2kác bak1á2cs bak1áll 2bakc ba2keg ba2k1ér. ba2k1éri bak1k ba1k2li ba1klu ba2k1o2v ba1k2ri bak1t2 2b1aktu baku2r bak1ura bak1urá ba2ky 2b1alany 2b1a2lál ba2l1e2s ba2l1í bal2lak bal2lan bal2lál bal2l1ás bal2láz balle2 bal2leg bal2l1el bal2lem bal2les bal2l1é2l bal2lin bal2lór bal2té bal2tiz ba2lud 2b1amp 2banal 2b1a2nat banás3s ban2c1e banc3s 2b1angy ban2kab ban2k1a2d ban2k1a2l ban2kar banke2 ban2ker ban2kép ban2kérd ban2kir ban2kol banku2 ban2kut ba2nyó bao2k bao2l baó2r ba1p2l ba1pro 2b1arc. 2b1arcé 2b1arcn 2b1arco 2b1arcr bar2csad bar2csal bar2csan bar2csö 2b1arcú 2b1argu baro2ma 2b1arté baság1g ba2seb ba1slá ba1s2m ba1sni 2b1aspe ba1s2pó bas3sze ba1s2ta ba1s2tá ba2t1esti ba1t2rá ba1tre ba1tré ba2ud 2b1a2ul bau2r 2b1a2vat ba1yi 1bá bá2bal bá2b1ass bá2bál bá2b1es bá2bik bá2bö bá2b1ü bá2csor bá2csü 2b1á2ga b1á2gú bá2gyal bá2gyar bá2gyott bá2gyö bá2gyú bá2j1e2 báj2n1á bá2j1ó2 bá2j1ö2 báj2t1a2k bá2jü bákos1 bá2laj bá2l1ap bá2l1e2 bálé2 bá2l1éj bá2lid bá2l1ing bá2l1i2o bál2is 2b1állí 2b1állo 2b1állv 2bálm bá2lö bá2lü bá2lyad bá2ly1al bá2ly1a2n bá2ly1á2z báni2as bán2ré bánya2ié bá2po 2b1á2rad 2b1á2rai bá2r1aj 2b1á2ram bá2rap bá2ras 2bá2ra2t 2b1á2ráb bá2rág bá2rár bá2r1ás 2b1á2rát bár2das bár2d1á bár2de bá2r1e bá2rén 2b1á2riá bár1i2o bá2r1i2p bá2rí 2b1árny bá2r1ó2né. 2báru. 2báruf 2b1á2rug 2b1á2ruh 2b1áruj 2b1á2ruk 2b1árur bár1u2ra. 2bárus 2b1árut 2báruv 2bárú bá2rúr bá2rü bá2s1á2ré bá2se bá2sis bá2sz1ak bá2szan bá2szas bá2sz1ál bá2sz1á2ru bá2sze bá2szil bá2szip bá2szí bá2szö bá2szü bá2t1a2k bá2t1al bá2t1á2 2b1á2t1e2 bá2tö bá2tü bb1a2da bb1add bb1a2kas b2b1alk b2b1als b2b1alu b2b1alv b2b1a2ny b2b1ap b2b1a2ra bba2t b2b1au bbá2gyas b2b1áll bb1álm b2b1áp bb1árn bb1á2ru b2b1á2s b2b1át bb1dr bbe2g b2b1e2kén b2b1elv b2b1emb bb1eng bb1erj bb1ern bb1erő bb1e2rű bb1esté b2b1etn b2b1ex b2b1ég bb1él. bb1éle bb1élh bb1élj bb1éln bb1élt bb1é2lű bb1élv b2b1ép bb1érl b2b1érm b2b1érte b2b1érté bb1érv b2b1évi bb1fr bb1i2de b2b1iga bbigaz1 bb1illa b2b1ind b2b1int b2b1inv bbi2tat b2b1itt b2b1í2r b2b1ív bb1kl bb1kr b2b1okt bb1oltá b2b1olv b2b1op bb1ott b2b1ób bb1ó2r b2b1ö2m bbö2r bb1örö b2b1ös bb1őri bb1őrz b2b1ő2s bb1pl bb1pr bb1sk bb1sp bb1st2 bb1t2r b2b1ud b2b1u2g b2b1uj bbu2r bb1ura b2b1u2t bbúgás1 b2b1új b2b1ú2s b2b1üg b2b1ür b2b1üz bb1ű2z bb2ví bc3sz bda2cs1a2pá bda1d2 bda1p2 bda1s2 bdasz2 bda1t2 bdé2n bd2rá bd2ro bd2ró 1be be2ac bea2d bea2j bea2k bea2l bea2n bea2r bea2s bea2t1e be2ati bea2tin be2atk be2atl bea2v beá2j beá2s beá2z be1bl be1b2r be2csar be2csár be2csért be2cs1é2te be2dén be2dz bee2l bee2s beé2r be1fl be1fr begés3s begész1 be1g2r be2gyel b1egyl bei2g bei2s beí2r be2j1elt 2bejt 2b1e2ke. beke2csa 2b1e2kétő be1k2ré be1kri be1kró be1k2v be2lál beleí2 bel1els be2lemz bele1p2r belet2 bele1tr be2l1é2k be2l1ér. be2l1é2ren be2l1érr be2lí be2lof be2löl 2b1e2lőa be2lőr bel1p2 2bemel 2b1eml b1e2mus be2n1ál be2n1ék ben2n1a2 ben2ná ben2n1e2r ben2nég be2ny1e2g beo2k beo2l beo2m beó2v beö2r be2pe. be2ped 2b1e2pé be1p2l be1p2r be2r1ad ber1alá ber1all bera2n ber1any be2r1a2p be2r1a2r ber1ass be2r1a2t be2r1av be2raz be3rág ber1áll b1erdei 2berdő ber1egé ber1egy be2r1e2ke. bere2k1eg be2r1ekék be2r1ell be2r1elm be2relődö be2r1előn be2r1e2mé be2r1eml be2r1e2pé be2r1e2r ber1e2szü be2r1e2tet be2rég be2r1ékk ber1éss ber1ingü be2rism be2r1ist ber1iszo ber1old be2ror ber1osz be2ról be2r1ó2r be2rő 2b1erőd ber1ős. ber1ő2se ber1ő2si ber1ő2sü ber3s2 berta2n1á2s be2r1ub be2r1un be2rur be2r1ut be2r1ü2g berü2l be2r1üld be2r1ülé be2r1ült be2sem 2b1esél 2b1e2sés be1ska be1ská be1s2l be1s2m 2b1e2ső be1s2p2 bessz1a bessz1á be1s2ta 2beste 2besté be1s2til be1sto 2b1e2szet 2b1e2szét b1eszm besz2t1a2 besz2t1á beteg1ér. beté2t1elb beté2telk be1t2hi be1t2ra be1trá be1t2ré be1t2ro beu2g beu2t beü2t be2vező 2b1e2vol 2b1e2vő 2b1ezr 1bé 2b1ébr bé2csú bé2d1as bé2d1á 2bédé 2bédh 2bédj 2bédl bé2d1o bé2dö 2bédr 2bédü 2bédv bé2gő bék1alk 2b1éksz bé2l1akt bé2l1a2n bé2l1a2p bé2l1a2r bé2lál bé2l1áto bé2l1á2z bé2l1ed bé2l1e2g bé2lek bé2l1e2r 2b1é2let bé2l1é2j bé2liz bé2lí 2bélj bé2l1o bé2ló bé2lö 2b1é2lő bélt2 bél1tr bé2lul bé2lú bé2ly1ec bé2l3yen bé2lyin bé2lyö bé2pí bé2pü 2b1é2rai bé2r1aj bé2ral bé2r1a2n bé2rap bé2rar bé2rá 2b1éráb 2b1éráh 2b1éráv 2b1érde bé2reb bé2r1eleme bé2r1e2lemé bé2r1e2lemh bé2r1e2lemk bé2r1e2lemn bé2r1e2lemr bé2r1ell bé2relm bé2r1elői bé2r1eng bér1essz bé2r1esz bé2r1id bé2rir bé2rí b1érni bé2rö bér1s bért2 2bértel 2b1értés bér1tr bé2rut bé2rú bé2sz1a2 bé2szá bé2sz1o béta1s 2bétel bé1t2h 2b1étk 2b1étt 2b1év. bé2vek 2b1é2ven 2b1é2ves bé2vet bé2vi. 2b1évn bé2zsú bfej1els bfe2len bfé2n bf2la bf2rá bf2re bf2ri bf2ro bg2ra bg2rá bgyökö2 bgyö2k1öl 1bi bia2d bi2ae bi2ag bia2la bia2v bi1br bi1by bic3sz bida2 bi2d1ad bi2d1al bi2deg bi2del 2b1i2dő bi2ed bie2l bi1fr bi2gaz 2b1i2gáj 2bigén 2b1i2hat bik1ala bi2k1ál bi2k1em bi2kik bi1klu bi2k1ő2 bi1k2ro bik1s bil1ima bil1int bilis3s 2billé 2b1illő 2billu bi2lü bi2ma. 2b1i2mi 2b1imp bi2nab 2b1i2nad bi2naj 2b1i2nat. bi2n1árb 2b1indá bi2n1éte 2b1inká bin3n bi2nü bi1ny bi2oa bi2oá bi2ob bi2oc bi2od bi2oe bi2oé bi2of bi2oge bi2ok bi2ol bi2om 2b1i2on bi2or bió2r bi2par bi1p2l bi1pr 2b1i2ram 2b1i2rat 2b1i2rán 2birkái 2birodá 2b1irr 2b1irtá 2b1irtó bis2hi 2b1i2si 2bism bi2sö bi1s2p bis3s bi1s2to bit1ará bi2t1e2g bit1elh bit1elr bit1elt bite2r1a bi2t1ing bi2t1int bi2t1i2o bi2t1on bit1t2 bit1ura bi2t1ut biú2s bi2var 2b1i2vás 1bí bí2ja bíróé2r bí2ve bí2vé bí2vű 2b1í2zü bkés3s bk2li bk2lu bk2ra bk2rá bk2re bk2ré bk2ri bk2rí bk2ro bk2ró 1b2labl blai2k blak1a2d bla2kal bla2k1an bla2k1átm bla2k1átt bla2kem bla2kik bla2k1ol bla2kü blap1e bla1p2l bla1s2t blás1s bl2be ble2r1i bles2 ble2t1ak ble2t1a2n ble2t1á2 ble2t1e2l ble2ter ble2tesz ble2tél ble2t1érd ble2t1étk bletigaz1 ble2t1o ble2tó ble2t1ö2 ble2tu ble2tüz bleü2 bleves1s bl2he bli2af bli2as bli2of b1ljana bl2ne 1b2lok blok2k1ö2 blo2n1á blon3n b2l1őzé bl2re bl2rő bl2tő blu2esz 1bo bo2aá bo2ab bo2ad bo2ae bo2af bo2ah bo2aj bo2am bo2ar bo2at bo2av bo2c1ak bo2ce bo2cé bo2c3h bo2csé bo1dy bo2ei bo1fl bo2g1a2k bo2g1a2t bo2g1á2c bogás1s bo2g1e bo2g1osz bogó2szá bo2gyo boka1p 2b1o2kí b1o2koz bok2szak bok2szal bok2sz1ál bok2szel bokszé2 bok2szél bok2sz1in bok2szó bok2sz1ő 2b1okta 2bolaj. bolás1s 2b1oldó 2b1o2lim bolo1g2 bol2t1e bol2t1ö2 bol2t1ü2 2bolvas bona1 bon1ava bon2can bon2c1e bon2ch 2bond bo2n1e2 bo2n1ér. bo2n1or bon2t1i bo2nü bo2og bo2ok bo2om bo2ot bo2pe bo2r1a2d bo2r1aka bor1akk bo2r1akv bo2r1a2l bora2n bor1any bo2rar bor1asz bor1atr bo2r1au bo2r1av bo2raz bor1ács bo2r1áll bo2r1áz bor1d2 bo2re bor1e2c bor1el bor1e2r bor1es bor1f2 borfi2úké bo2r1i2ko bo2r1il bo2r1ing bo2r1int bo2r1isk bo2r1iss bo2r1ist bo2r1itt bo2r1iz bor1k2 2b1ornam bo2r1ond bo2r1ó2r bo2rö bo2rő 2b1orr. 2b1orrú bor2s1eprű bor2sors bor1str bor2sül bor2süt bor1tre bor1tré bo2rü borvíz1 bor2z1á2rak bor2zsa bor2z3se 2b1oszt bo2t1a2g bo2t1al bo2tar bo2tas bo2t1a2u bo2t1ác bo2tár bo2t1e2 bo2t1il bot1inf bot1int bo2t1i2p bo2tí bo2t1ó2 bo2tö bo2tur botú2 bo2túr bo2tü bo2tű bo2ui bo2ul bo2ur bo1ya bo1yá bo1yé bo1yi bo1yo bo1yu bo2zar bo2zál bo2z1e2 bo2zid bo2z1i2p bo2z1ir bo2zí bo2z1old bo2z3s bo2zü bo2zű 1bó bóa2d bóá2g bóá2r bó2bé bó2cal bó2ch bó2cü bó1fl bó1kré bóli2a b1ólm bó1p2l bó1p2r bó2r1ad bó2r1an bó2rat 2bórá bó2rás bór1ásv bó2reg bó2rel bó2r1in bó2riz bó2r1ol bóró2 bó2rós bó2rö bórt2 bó2rü bó1s2p bó1sz 1bö bö2ch bö2lá 2bölb böl2csü 2b1ö2lér 2bölhö 2bölig 2bölk b1ölkú 2bölr 2b1öltö 2böltő bö2lú bö2lyökö b1öml bö2ná 2b1önt bö2ra bö2r1e bö2ro 2b1össz 2b1ötl 2b1öts bö2ve 1bő bő2r1a2 bő2r1á2 bő2r1e2g bő2r1e2l bő2r1em bő2r1en bő2r1e2r bő2r1é2g bő2rék bő2r1és bő2ril bő2r1ing bő2rip bő2r1i2s bő2riz bőr1izg 2bőrl bő2r1o2 bőr1öl bő2rő bőrren2 bőr1s2 bő2r1u bő2rú bő2r1ü2g bő2r1ü2l 2bősi bp2la bp2lá bp2le bp2re bp2ré bp2rí bp2ro b1proj bp2ró bra2k1á2 bra2kös bra1p2 1braty brá2nag brá2nas brá2n1át bránt2 brá2sz1ál brá2sze b2ric bri2da bri2dá bri2der 1b2rig bri2no bri2ód bri2óf bri2óm bri2tel b2rosú bró2m1a bró2me 1b2rum bsé2g1el b1s2ká bs2lá bs2pe bs2pi bs2po bs2ta bs2tá bs2ti bs2tí bs2tú bszá2r1a2da bsz2f b1sz2k bsz2tá btermo1 btermosz2 bt2rá b1t2re bt2ré b1t2ri b1t2ro b1t2ró 1bu bu2ch 2b1udv bué2r bu2g1i2 bu2il 2b1ujj. 2bujja. 2bujjad buj2j1a2da 2bujjai 2bujjak 2bujjam 2bujjas 2bujjat 2b1ujjá 2bujjb 2bujjc 2bujjd 2bujje 2bujjé 2bujjf 2bujjg 2bujjh 2bujji 2bujjk 2bujjl 2bujjm 2bujjn 2b1ujjo 2bujjp 2bujjr 2bujjs 2bujjt 2bujju 2bujjú 2bujjv buk2j1e bu2maj bu2mel bu2m1i2k bu2m1ina bu2mis bu2mol 2b1ural b1urb 2burn 2b1u2rú bu2se bu2sin bu2sol bu1s2p bus3sze bu2szab busz1aj bu2szal bu2szas bu2sz1ál bu2sz1á2rak bu2sz1árn busz1en bu2sz1él bu2sz1é2p bu2szid bu2sz1il bu2szim bu2szin bu2szip bu2sziz buszí2 busz1íj busz3s bu2szü 1bú bú2jí 2búr. 2b1ú2ri 2búrt 2búsz bú2szá b1ú2ti b1útm 1bü bü2dü bü2ge bü2gy bü2ku 2b1üld bü2l1é2n bü2ne 2bürü 2b1ü2te 2b1ü2té b1ü2tő 2b1ü2ve bü2ze 1bű bű2na bű2ná bű2nel bű2nem bű2nes bű2n1e2t bűn1n bű2no bű2nó bű2n1ő2 bű2nu bű2nű bű2ri bű2v1e2 bű2z1a2 bű2z1á bű2zo bű2z1ő bű2z3s bvá2nyad bvá2nyí by2te 2c. 1ca 2c1abl ca1b2r ca2cél ca2ch ca2dás 2c1a2dó ca2es caéne2 ca1fro 2c1agg ca2gya cagy1a2d ca2gyu 2c1ajk 2c1a2kad ca2kác ca2k1áz 2c1akc cak2kol cak2k1ö ca1kri cala2g1 ca2lan ca2l1a2s 2c1albu ca2l1este ca2l1é2l calé2t cal1éte ca2lim ca2l1ip cal1osz cal1p cal1s ca2lü ca1ly ca2nal ca2nar 2c1a2ni can2ne caó2r ca2pó ca1p2ró ca1p2s ca2ran ca2rán 2c1arc ca2ris ca1s2p 2c1assz cast2 ca1sto ca1str 2c1aszt ca2tau ca2tem 2c1atl c1a2uk cau2n ca2vat 2c1a2zo 1cá 2c1ábr cá2ga cá2gú cá2gy cá2la c1állá 2c1álm cá2ne cá2nét cá2nir cá3p2a3 2c1á2po 2c1á2rad 2c1á2rak cá2r1as cá2ria cá2riá cá2r1i2n 2cárk 2c1árp 2cáru. 2c1á2ruh 2cárus cá2sás 2c1á2só 2c1ásv 2c1á2szai 2c1á2szo 2c1á2t1a2 c1áth 2c1á2t1i2 2c1átm 2c1átr 2c1átt 2c1á2tü 2c1átv cb2lo cb2ra c2c1a2j c2c1ak cc1alb cc1a2ny c2c1a2r c2c1au c2c1ág c2c1ál cc1bl cc1ef c2c1elm c2c1ember c2c1ép c2c1ér. c2c1érte cc3he cc3hí c2c3ho cc3hő cc3hú c2c1i2m cci2na. cc1ing cci2óv cc1i2pa cc1iro c2c1i2z cc1ír cc1kl cc1k2r cc1oá c2c1ov cc1ön cc1ös cc1öz cc1pl cc1pr c2cs c3csap c3csar ccs1as c3csat ccs1ál c3csáp ccs1ás ccs1átl ccs1eg ccs1elem ccs1ell ccs1elv ccs1embe ccs1eml c3csep ccs1él ccs1érté ccs1iv c3csop ccs1ork cc3soro ccs1ö2l ccs1önt ccs1s ccs1ut c3csú c3csű cc3sza cc3szá ccs3zen cc3szó cc1új c2c1üg cc1ür cc3zá cc3ze cc3zs cda2l1é2 cda2l1i cde2m1e2ké cde2m1el cd2ra cd2rá 1ce cea2l ce2at ce2au ceá2r ce2béd ce1bl ce2ch cec3he 2c1e2dz ce2gas ce2g1é2k cegés3s ce2gina ce2gor ce1g2rá ce2gu ce2gú c1egy. c1egyb ce2gyen c1e2gyi c1egym c1egyr 2c1egys 2c1e2ke. ce1kl 2c1elad 2c1e2lág cel1ér 2c1elf 2c1elha 2c1eljá 2c1e2los c1e2lőa 2celődöt. 2c1e2lőf 2c1e2lőí c1e2lőő 2c1első 2c1eltá c1elto 2c1elvá 2c1e2melő 2c1eml cenc1c cen2c1eg cen2c3s 2c1eng cen2s1ég cen2tau ceo2l ceo2r 2c1e2pe. 2c1e2pi ce1p2r cep2sz1a2 cep2sz1é2p cep2szi cep2t1a2 cep2t1ér. cep2tim cep2t1ol 2c1e2rej ce2róz 2c1e2rő cer2t1a2 certá2 cer2tár cer2teg cer2t1e2l cer2t1emb cer2t1est cer2tél cer2t1én cer2t1ol cer2t1ö cer2tu certü2 cer2t1üz ce2sem 2c1e2sés 2c1e2ső ces2t1é2j ces2t1ék ce1stra ce2t1e2g ce2t1essz ce2t1esz ce2t1é2t 2ceth cet1ill ce2t1i2n ce2tiz 2cetn 2ceton ce1t2ra ce2t1us ce2tűd cetű2z ceü2t ce2vés ce2vő 2c1e2zer 2cezrede 1cé 2c1ébr cé2dél cé2g1a2 cé2g1á2 cé2g1eg cé2g1e2l cé2ge2r cég1ere cég1eré cé2g1esem cé2geté cé2gető cé2g1ék cé2gép 2c1é2gés cég1g cé2g1i2d cég1iga cé2gigé cé2gim cé2gir cé2g1iz cégo2 cé2g1ok cé2gol cé2gó cé2gö cé2g1u2 cé2gú céha2 cé2hal cé2han cé2har cé2hed cé2h1e2g cé2hir cé2hu cé2hú 2c1éks cé2la cél1a2n cé3lap cél1a2r cé2láb cé2lál cé2l1á2r cé2l1á2t cé2le. cé2led cé2leg cé2lei cé2lek cé2l1e2l cé2lem cél1emb cé2len cé2l1er cé2l1e2s 2c1é2let 2c1é2lez cé2léb cé2l1é2k cé2lénk cé2lép cé2lére cé2lés cé2lim cé2lin cé2lir cé2l1is cé2liz cé2lí cé2ló cé2l1ö2 cé2l1ő2 célt2 cél1tr célu2 cé2l1ut cé2lü 2c1é2lű cé2pí cé2pü cé2rag 2c1érd 2c1é2rés cé2rin 2c1érint cé2ris cér1s 2c1érté 2c1értő. cé2rú 2c1érz cés3s 2c1észh 2c1étk 2c1étt 2c1év. 2c1évad 2c1é2ve. 2cévei 2c1é2vek 2c1é2ven 2c1é2ves 2c1é2vet 2c1é2vét cé2vi. 2c1évn 2c1é2vü cf2ló cf2ra cf2ri cf2ro cg2ra cg2ri c2h 1cha c3had 2c3haj 2cham 2chang 2c3harc 2charm 2chatá 2c3hav 1chá 2c3hám c3hány c3ház ch1bl 1che 2c3heg 2chev 2c3hez 1ché 1chi 2c3hib 2c3hió 2chitel 2chitet c3hiú 1chí 1cho cho1d2 2c3hor 2c3hoss 1chó 1chö 1chő ch1pr ch1sc ch1sp 1chu chu2r 2c3huz 1chú 1chü 1chű 1ci ci2aa ci2aá cia1b2 ci2aba ci2abo ci2abr ci2ac ci2a1d2 ci2ae ci2aé cia1f cia2fag ci2afr ci2a1g2 ci2ah ci2aik ci2aí ci2aj ci2akar ci2akas ci2akén. ci2akó ci2ala ci2alá ci2ale ci2alé ci2alo ci2am ci2any ci2ao ci2aó ci2aö ci2aő ci2a1p2 ci2ar ci2asza ci2aszá ci2aszé ci2aszo ci2aszó cia1t2 ci2ata ci2atá ci2até ci2ato ci2atű ci2au2 ci2aú ci2aü ci2aű ci2av ci2az ciá2lan ciá2nár ci2áó 2c1i2deg ci2deo 2c1i2dé 2c1i2dom 2c1i2dő cie2r 2c1ifj 2c1i2ga. 2c1i2gaz ci2ge. ci1g2r ci2ker cikka2 cik2kaj cik2kan cik2k1o ci1k2la 2c1ikrá ci2l1á2t 2cillu ci2mit 2cimpu ci2n1al ci2n1árt cin1d2 ci2n1e2re 2cinf 2c1inge 2c1ingr ci2nim cin2kac cin2k1a2l cin2kért cin2kol cin2kors cin2kö ci2nö cin2tar cin2t1es cinus1s ci2nü 2c1inv ci2od ci2of ci2og cio1gra ci2oi ci2ol ci3olo 2c1i2onn ci2op cio2v ci2óa ci2óá ci2óc ci2ódar ci2óe ci2óg ci2óí ci2ókal ci2ókam ci2óká ci2óke ci2ó1kl ci2ókom ci2ókos ci2óku ci2ól ci2ómag ci2ómá ci2óné ci2óo ci2óó ci2óö ci2óő ci2ó1p ci2ósá ci2óse ció2s1ér ci2ó1s2ká ci2ószo ci2ótá ci2óú ci2óü ci2ózón ciő2r ci2rat 2c1i2rán 2c1i2rod 2c1irt ci2si. 2c1isko 2c1ism 2c1isp ci1stad ci2sz1i ci2t1aj citá2r cit1ár. cit1ára cit1áré cit1áro cit1érr ci2tik ci2t1ol ci1ty ciumi2 ciu2min ciu2m1io ciumköz1 ciu2t 2c1i2vad 2c1i2vás 1cí cí2ja cí2jé cí2m1a2 cí2m1á cí2m1e2l cí2m1é2l cí2mí cí2mo cí2mö cí2mő cí2mu cí2rá cí2ró cí2vá cí2ve cí2vé cí2zs cí2zü ckaka2 c2k1alj c2k1arc cka2rom c2k1ág ck1áll c2k1árn c2k1e2g cke1p 1cker. 1ckerk 1ckern cké2p1e2l c2k1é2ré c2k1érl c2k1érté ck1fl ck1fr ck1ill c2k1íz ck1kl ck1k2r ck2lu c2k1o2la ck1o2pe c2k1orro c2korru c2korrú 1c2kosak c2k1ou c2k1öb ck1öss ck2reá c1k2ri c1k2rí ck1sp c2k1üg ck1ült c2k1üt c2k1ü2v ck1űr ck2va cli2s clu2b1a cmelo1 cnya2k cnyol2c1an 1co co2at co2áz co2be co2eu co2kar co2ká co2ke co2kél co2kép 2c1o2kí 2c1o2laj co2l1áro 2c1olda 2c1oldá 2c1oldó co2le co2l1ibr co2li2m col1ima co2l1i2na. co2l1ind co2l1ing co2l1inu co2l1o2r 2colvad 2colvas comba2 com2bal com2b1e2 com2biz com2bol com2bór com2bö 2c1oml co2ol 2c1o2pe cop2f1ő co1py 2c1orc 2c1o2ri 2c1orm c1o2rom 2c1orro 2c1orrú 2corv 2c1oskol co2s1o2ku cos3s cos3zs 2c1oszt co2ul co2un co2uv co2vi 1có c1ó2ni 2c1ó2rá c1ó2ri có2vó 1cö c1öltö c1ösv c1ösz c1ötb c1ö2t1e c1ö2té c1ötf c1öth c1ö2ti c1ötk c1ötm c1ötn c1ötr c1öts c1ött c1ö2tü c1öv. cö2zö 1cő cő2rü cp2la cp2ra cp2re cp2ré cp2ri cp2ro cp2ró c2s 1csa 2csabl 2cs1a2dat 2cs1a2dá 2cs1a2dó 2cs1akc csa2lakj csa2lapú 2csaláí 2csalát 2csalb 2cs1alg 2cs1alk cs1alle 2cs1alm csa2lomb cs1amb 2csant csa2pál 2csapka 2csapká csa2por 2csapóká 2csapókr 2csapósab 2cs1arc 2csarg 2csark 2cs1arz 2cs1ass csa2t1ó2r csavar1a2 cs1azo 1csá csá2be 2csáf 2cság cs1á2gak cs1á2gu 2cs1árad 2cs1á2rak 2csáram 2csárat csá2rát 2cs1árny cs1á2ruk 2cs1ásá 2c3sási 2cs1ásó 2csátásás 2csátf 2csátm 2csátr 2csáv. 2c3sávo cs1bl cs1br cs1d2r 1cse 2csebé cs1e2ce cse2csa 2cs1e2dé 2cs1edz cs1eff cs1e2ges 2csegí 2cs1e2ke. 2cself 2csellá 2cselőí 2cselta 2cseltá 2cselv. 2c3sely 2cs1ember 2cs1e2mel 2cseml 2csemu csen2d1ő2 cse2nis cse2n3yen 2csenz cse1p2ré cse2rál cse2r1e2ped 2cseró 2cserő 2cseső 2cseszm cse2tüz 2csevő 2cs1ex 1csé 2cség c3ség. c3ségb c3ségg c3ségh c3ségi c3ségn c3ségr 2cséhes 2cséhs 2cs1é2ka 2cséks 2cs1éle csé2m1a 2csénekb 2cséneke 2cséneké 2csénekk 2csénekr 2cséneks 2csénekt 2csénekü 2csépí 2csépü 2csérde csé2résk 2c3sérv. 2csérvb 2csérvh 2csérvr 2csérvv 2csérz csé2sza csé2tab 2csév. 2csévek 2csévn 2csévr 2csévv cs1fr cs1gl cs1gr 1csi csiá2 2csidő 2csigé 2csimí 2csimog 2csimpo 2cs1i2na. 2csinas 2cs1ind 2cs1inp 2cs1inv 2csiono 2csipí 2csiví 2csivó 1csí 2csíki 2c3sírb 2c3sírj cs1í2ró 2cs1í2v 2csíze 2csízl cs1ízn 2csízt cs1ízü cska1s cskasz2 cs1kl cs1kv c3slág 1cso 2cs1o2á 2csobj cso2k1á 2csokk. 2csokoz 2csolaj 2csolda 2csoldá 2csoldó. 2csoldók 2csoldóm 2csoldón 2csoldór 2csoldót 2csoldóv 2cs1oli 2csolló 2csolvas cso2mor cson2t1a2 2csopc 2cs1orc 2csori 2csork 2c3sorv 2csoszl 2csoszt 1csó cs1ódá csó2kes csó2k1ö2 2cs1óné 1csö 2csökrü cs1öml csön3n 2csör. c3söre 2csössz 2csöv. 2csözön 1cső 3cső. 3csőb csőé2h 2csőrz cső2sz1á2ra cső2szék cső2sző 3csőv c3s2pek cs1p2l csp2r cs1ps cs1sl cs1s2p cs1s2t cs3sz2 cssza2kü c3s2tab cs2top cst2r c3stru 1csu 2csudv 2csug 2c3suho cs1ujj 2cs1una 2csuni 2cs1ura 2cs1u2rá cs1u2tas 2cs1utá cs1utó 1csú csú1p2 2csútn 1csü 2csüd 2csügé 2csügy 2cs1ünn cs1ü2te 2c3süv 2cs1üz 1csű c4s3zac cs3zaj csza2ké cs3zam c3szál c3szám cs3záp cs3zát c3száz c3sz2c c3szer c3szé c3sz2f c3szi c3szí c3sz2l c3szob cs3zokn c3szol cs3zon c3szor cs3zón c3sző cs3zs csz2t cs3zug cs3zú c3szü c3szű c3sz2v ct2ra ct2re ct2ré ct2ri ct2ro ct2rü 1cu cucci2 cuc2cin cuko2r1a cula2te cu2lü 2c1und 2c1u2no 2c1u2ra 2c1u2tá 1cú cú2jí c1úr. c1úrr c1ú2ti cú2to 1cü cü2ge cü2gy 2c1ü2lé cü2lő c1ünn cü2re cü2rí cü2rü cü2te cü2té cü2tő cü2ve cü2ze 1cű cű2ző cva2nem cva2név cve2név cven3n c2z 1cza cza2ib cza2ié cza2ih cza2ik cza2in cza2ir cza2it cza2iv 1czá 1cze 2c3zen 1czé c3zéh 1czi 1czí 1czo 1czó 1czö 1cző 1czu 1czú 1czü 1czű 1czy 2d. 1da daa2d daát1 2d1abla da2c1ir da2cz da2dag dad1ala 2dadato 2d1a2dó da1drá da1dro dae2r daé2d daé2r da1f2l da1f2r da2g1el dag3g 2d1ahh da2ire 2d1a2ján 2d1ajt 2d1a2kad daká2r 2d1akkora d1akku da1kl da1k2ré da1k2ri 2d1aktu dal1a2ga dal1ajt da2lakj da2l1akta da2l1aktá da2laku da2lakú 2d1alakz da2l1a2l da2lapc da2lapk da2lapn da2lapr da2l1aps da2lapt 2d1a2lapú da2lar da2l1asz da2latt da2l1á2g da2l1ál dal1á2rak dal1árá da2l1árb da2l1árn da2l1árr dal1á2sz da2l1áti dale2l dal1elá dal1ele dal1ell dal1e2sé dalé2ke2 dal1él. da2l1é2ne da2l1ér. dal1f2 da2lid da2l1i2ko da2l1ikr da2l1i2m da2l1i2nát da2lind da2l1inf da2l1ing da2l1inj da2l1int da2l1i2nu da2l1itt dali2z dal1izo 2d1alji dal3l 2d1allo dalo2m1e dalomo2 da2l1or da2lőr dal1p2 dal1ud da2l1ur da2l1u2s da2l1u2t dalú2t da2l1úto dal1útr da2lü 2d1amc 2d1amf 2d1a2nal 2d1ang d1a2nyag 2d1a2nyó dao2k daó2r daó2v 2d1a2pa. 2d1a2pai da2paké da2páb da2pád da2páé da2páh da2pái da2pák da2pám da2pát da2páv 2d1apj da1p2l da2pó. 2d1app da1pro da1p2s 2dapt dara2be da2r1a2dó dar1ala da2rant da2r1azo da2r1áta da2r1átf dar2c1e2 dar2c3h dar2cso 2d1arcú dar2d1a2l dar2d1á dar2del dar2d1es dar2d1ó2 da2r1el da2r1il darus3s dar1uta da2r1ü da2sál da1s2l da1spe 2d1assz da1s2ta da1szl daszt2 dasz2tá 2daszú da2t1akt da2t1akv da2t1a2la da2t1alk dat1apu dat1ará dat1ass da2t1att da2taz da2t1áll da2t1árad datá2ramm datá2ramr da2t1áta da2t1átá da2telem dat1e2l1é dat1elí da2t1elk dat1ell da2t1elő dat1elt da2t1é2g da2térte da2t1érté da2t1érth da2t1érv da2tid dati2k da2t1iko da2tim da2t1inf dat1inte dat1ist da2tiz da2t1ír dat1íve dat1k2 2d1atlas da2t1osz da2tóc 2datóm da2t1ó2r dató2s dat1ósá dat1t2 da2t1u2t da2tút da2tűr da2tya da2tyá 2d1a2uk da2up 2d1a2ur dau2s dau2ta da3u2tóp daü2t daü2z 2d1a2vat 2d1avv da1ye da1yé 2d1az. da2zál 2d1a2zé da2zok da2zon 1dá 2d1á2bé 2d1ábr dá2c3ho dá2fá dá2ga dá2gá dá2gú 2d1á2gy dá2lál dá2lár dá2l1e 2d1állí dá2lü dá2ly1a2n dályú2 dá2ly1ús dámu2 dá2m1ut dá2m1ú dá2ny1a2d dá2ny1al dá2ny1a2n dá2nyaz dá2nyó dá2po 2d1á2rad dá2r1ag 2d1á2rai dá2r1a2j dá2ral 2d1á2ram dá2r1a2n dá2r1a2p dá2rar dá2ras dár1ass dá2rat dár1atk dá2rá dár1ál dá2r1e2 dá2réb 2d1á2ria. dá2rij dá2ril dá2r1i2p dár1isk dár1ism dá2rí dá2rod dá2r1ond dá2r1ot dá2rö dá2rő dár1s2 dárt2 dár1tr 2dáru. dá2ruk dáru2s1ág. dáru2s1á2ga dá2rú2 2d1árú. dá2rü dá2rű dá2s1a2d dá2sal dá2sar dá2s1á2g dá2s1árad dá2s1árh dá2s1á2ru d1á2sás dását1a2 dá2s1e2 dásfé2l1é2v dá2sim dá2sis dá2sol dá2sor dá2só2 dás1ór dá2sö dá2ső dást2 dás1tr dá2sut dá2s1ü2 dá2szag dá2szaka dá2szal dá2szar dá2szav dá2sz1ál dá2szárk dá2sz1á2ro dá2sze dász1el dász1em dász1er dá2széb dá2szip dá2szir dá2szis dá2sz1í2 2dászkái dá2sz1ö dá2sző dász3s dá2sz1us dá2sz1ú dá2sz1ü2 dá2sz1ű 2d1á2ta dát1al 2d1á2tá 2d1átd dá2t1e2 2d1á2té 2d1átf 2d1á2tí 2d1átj 2d1átk 2d1átm 2d1átr 3dátu 2d1á2tú 2d1átv dba2l1 db2lo db2lú db2ro db2ró dc2lu dcsa2p1á2g dd1elh d2d1i2d ddí2s d2d1o2d dd2rá dd2ró d2dz d3dzs 1de de2aa de2aá de2ac dea2d de2ae de2aé de2agy de2ah de2aí de2ala de2alá de2alo de2am dea2n de2ao de2ap dea1sz2 de2aszf de2at 2d1e2bé ded1ell 2d1e2dén de2d1ó2v de1dra de2d1ú2 2d1e2dz de2ep dee2s deé2r 2d1eff de1fr de2g1a2l de2g1a2n de2g1ál de2g1e2l degen3n de2ger de2g1ék deg1éri de2gés deg1éss degész1 deg3g de2giz 2dego de2gor degö2 de2g1öl de2gör de2g1ös 2de2gő 2d1e2gye degyez1 2degz 2d1ehh deho2g de2if dei2g deí2r de2k1a2k de2kaz de2k1e2g de2kellen de2kep dek1e2rő de2k1esz dek1ékb dek1é2ke de2k1él de2k1éri de2kérte de2k1érté de2k1érv de2k1érz de1klu dek1old dek1s deksz2 2d1elad de2lef 2d1e2legy dele2m1a dele2má dele2meg de2lemek dele2mel delem1ele dele2mu 2d1e2lemű 2d1e2lemz dele2t1a2 2d1eleteté 2d1e2l1é2k 2d1e2lél delés3s 2d1elha 2d1elho 2delkezdé 2delkezdő del2lal del2l1an del2l1e2g delle2l del2l1ele del2lelk 2dellená 2d1ellene del2l1ent del2ler del2l1é2j del2l1é2k del2l1in del2l1is del2los del2lór del2lőr 2d1elma 2d1elnö de2los 2delö de2löl de2lőad 2d1e2lőka 2delőrej 2d1elsa 2d1eltett. 2d1eltér 2d1elv. 2d1elvá 2d1elves 2d1elvo 2d1elvű. 2d1elvűe 2d1elvűk 2d1elvűn 2d1elvűr 2d1elvűs 2d1elvűt 2d1elvűv de2mad de2m1a2l de2maz de2m1ál de2mez de2m1é2rem de2m1érm de2mim dem1ing 2demoi dem1p de2mus demü2l de2nal 2d1e2ner denkié2ne de2nol de2n1ó2 dens1s de2od de2of de2o1g2 de2oj de2olo de2om de2ot de2pe. 2d1e2pé de1p2re de1pro de1p2s de2rad der1aka de2rala de2r1a2n de2r1ar de2r1á2g de2r1á2r de2rás der1ázt 2derdő dere2c 2deredm 2d1e2reje 2derején 2derejér 2d1e2rejét de2r1e2kei der1e2le der1ell der1e2lő der1elt de2rer de2r1e2ső de2r1él de2rid de2r1il de2r1i2m de2r1in de2r1i2p de2r1i2s der2nék de2r1osz de2r1ó2r de2rő d1erő. der1ős. d1erőt d1erőv der1sp deru2 de2rut de2r1ü2g de2r1üld der1üle der1ültet dervis1s 2de2s1a2 2desg de2sip 2deskü 2destes de1sto de2sur desú2 de2s1úr 2d1eszm de1sz2ta de2szű. de2t1ék de2tika de2tiká 2d1e2vő 2d1evv de2xa dexi2 de2xin de2xiz de2xí de2x1o de2xö 2deza de2zak de2zér de2zil de2zin de2z1or dezőe2 dezőkész1 2d1ezr 1dé 2d1ébr dé2dap dé2d1ő dé2du dé1fl dé2g1a2 dé2g1á2 dé2g1e2b dé2g1eg dé2gép dé2g1érk dé2gés dég1ész dég3g dég1iga dé2gigé dé2gin dé2gí dé2g1ok dé2got dé2gó dég1s dé2g1u2 dé2gú dé2gű 2d1é2hes 2d1éhs 2d1éj. 2d1éjb dé2k1ab dé2kac dé2k1a2d dé2k1a2l dé2k1a2n dé2k1ap dé2k1as dé2k1au dé2kaz dé2k1ág dé2k1árt dé2kás dékát1a2 dé2k1e2g déke2l dé2k1ele dék1ell dék1elő dé2k1elt dé2k1er dé2k1esz dé2k1eti dé2kez dé2k1é2j dé2k1é2k dé2k1é2l dé2k1ér. dé2k1éte dék1isz dé2kivá dé2kí dékkulcs1 dé2k1old dé2kop dé2k1or dé2k1osz dékó2 dé2kór dé2k1ö2v dé2köz dé2kő dék2rém dé2k1ut dé2lad dé2lam dé2l1á2 dé2leg dé2le2l dél1elő dé2les dél1est 2d1é2let dé2lim dé2lio délkö2z1ön dé2lo dé2l1ö2 2d1é2lő dé2l1u2 dé2lük dé2lyö dé2m1e2l dé2m1e2m déna2 dén1ac dénár1a2 2d1é2neke dé2ny1el dé2nyid dé2nyo dé2nyö dép2i 2d1é2pí 2d1é2pü dé2rag dé2ral dé2r1an dé2rar dé2ras dé2rá dér1d2 dé2reg dér1eml dér1esé dé2r1est dé2rez dé2rés dé2rif dé2r1ik dé2rí dé2rot déró2 dé2rór dé2rö 2d1érté 2d1érth dé2r1út dé1ry 2d1érzé désa2 dé2s1aj dé2sal dé2sap dé2sar dé2s1az désá2 dé2s1ár dé2seg dé2s1e2l dé2s1eti dé2s1ég dé2sí dé2sú dé2s1ü2t dész1ak dé2s3zá dé2sz1ék dé2szév dé2sz1o dé2szú dé2t1as dé2t1e2g dé2t1is 2d1étke dé2tőr 2d1év. 2d1évb 2d1é2ve. 2dévei 2d1é2vek 2d1é2vem 2d1é2ven 2d1é2ves. 2dévesb 2d1é2vesek 2d1é2vesen 2d1é2vesh 2dévesi 2dévesk 2d1é2vesn 2dévesr 2d1é2vess 2d1é2vet 2d1évez 2d1é2véb 2d1é2véi 2dévén 2dévér 2d1é2vét 2d1é2vév 2d1évf 2d1évh 2d1é2vi 2d1évk 2d1évn 2d1évr 2d1évs 2d1évt 2d1é2vu 2d1é2vü 2d1évv 2d1évz dfé2nyem df2lo df2ló df2rá df2re df2ri df2ro df2rö dgá2zár dgázát1 dgá2zi dgá2zó d2ge. dg2le dg2li dg2ló dg2ra dg2rá dg2ró d2gyu d2hali dhan2g1e dhé2t1 d2hi. d2hié d2hih d2hii d2hij d2hik d2hir dhú2s1á2 1di di2aa di2aá dia1b di2abá di2abi di2abr di2ac dia1d2 dia3da di2adi di2ado di2ae di2aé di2afa di2agy di2ah di2ai2k di2aí di2aj di2akép di2akol di2ala di2alá di2ali di2am di2ana di2aná di2ani di2anó di2ao di2aó di2aö di2aő di2a1p2 di2ara di2asza di2aszk di2aszó di2a1t2 di2au2 di2aú di2aü di2aű di2av di2az diá2k1e diá2kol dián3n di1c2k di2cs1aj di2cs1e2r 2d1i2deg 2didej di2deo 2d1i2dén di2d1i2o 2d1i2dő di2eu di1fl di2ga. 2d1i2gáná di2ge. di2g1e2l 2d1i2gén di2gét 2dijes di2kép di1k2l 2d1i2konh di1k2ro dik1u2ta di1k2v di2lan dile2m dilig2 di2lö di2l1ő di2lü di1ly di2ma. 2d1i2má di2mit 2d1imp 2d1i2naka 2dind 2d1inf dinga2 din2gal 2d1ingá 2d1inger 2d1i2nic di2n1ing 2d1inj di2nód di2n1óm di2n1ó2n di2n1ó2r 2d1inp 2d1inté 2d1inv di2oa di2oi di2ok di2ol di2ome di2ov di2óa di2óá di2óe di2óg di2óí di2ókam di2óká di2ó1kl di2ókok di2óku di2ómé di2óo di2óó di2óö di2óő di2ó1p2 di2órá di2óri dió2si2 diós1ik di3ósor. di2óspe di2ószű di2óu di2óú di2óü 2dipar. 2d1i2pará 2diparb 2d1i2pari 2d1i2paro 2d1i2rat 2d1i2rá 2d1i2rod 2d1irt di2saj 2d1i2si. 2d1isko 2d1ism 2d1iste di2tal dit1a2la dit1ará di2t1e2g dit1t2 di2tü diumé2 diu2m1én diu2mil diú2t di2vad 2d1i2var diva2t1a 2d1i2zé 1dí dí2gé dí2j1áto dí2je dí2jí dí2jö dí2jü 2d1í2rá díri2 dí2rik 2d1í2ró dí2sz1a dí2szer dí2szö dítés3s 2d1ív. 2d1í2ve 2dívn 2d1í2vü 2d1í2vű dí2zi dí2zs dí2zü dí2zű dj2eg dje2gya dj1is djo2n1 dka2n1á2 dkia2 dkie2 dk2la dk2li dk2lo dk2lu dk2rá dk2ré dk2ri dk2ro dk2ró dk2va dk2vi dlás3s dlá2s3z dleí2 dló1g2 dlót2 dlő1kr dme2g1ér dna2pe dné2v1á dnö2k1ö2l 1do do2áz do2b1ag do2b1a2l doba2n do2b1any do2b1ár do2bát dobe2 do2b1el do2b1ill do2bí 2dobje do2boá do2b1old do2b1or do2bö do2bü do2bű 2d1o2dú do2gar dogasz1 do2gár dogás1s do2g1ol do2gor dogos3s do1g2rá do2gü do2kal do2kas do2káj do2k1ál do2k1e do2k1é2l do2kép dokkö2 dok2k1öb dok2kő do2k1ott 2d1o2koz do2kö dokú2t dok1úto do2kü 2d1o2laj dola2tar dola2t1e dola2t1ör 2d1olda 2d1oldá 2d1oldo 2d1oldó 2d1oltár 2d1oltás 2dolvas dom1a2cé do2m1árb do2m1áré do2m1árh do2m1árj do2m1árk do2m1árl do2m1árn do2m1á2ron do2m1árr do2m1ártó dom2ba2l dom2bel dom2bol dom2bón do2mel 2domí 2doml do2m1ond do2mő 2domú do2mü do2n1ad dona2l don1ala do2n1a2r do2n1as do2n1ál do2n1áta do2n1átj do2n1áts do2n1átv don1d2 do2n1e donos1s do2n1osz do2nö don1s dont2 don1tr do2nü do2nyal do2nyar do2nye do2nyó 2d1o2pe do1p2l dor1akn do2r1a2l1 do2r1a2p do2r1as do2rat dor1áll do2r1á2lo dord2 dor1dr do2r1e2 do2rid do2r1il do2r1is do2r1ita dor1k2 do2r1okl dor1oszt do2rö do2rő 2d1orrú dors2 dor1sp dor1tró dorú2t do2rü 2dorvos do2ug do2ut do2vi do1ye 1dó dóa2d dóá2g dóá2r dó1bl 2dóez dó1fl dó1f2r 2dógá dó1g2r dói2g dóí2v dó1k2l dó1kré dó1k2v dó2mab dó2mak dóm1org dó2mő dóó2r dó1p2l dó1p2r dó2rád d1ó2rák dó2riá dó2sam dó2sas dó2sel 3dósi. dó2sip dó2sis dó2sír dó1s2ká dó1spe dó1spi dó1s2rá dós3s dó1stáb dó1str dó2s1ű2 dósz2 dó1szf dó1szp dó1t2r 2d1ó2vó 1dö d1öbl dö2ga dö2gá dö2g1el dö2gev dög3g dögna2 dö2go dö2gó dög1ö2lő dö2g1ő dö2gu dö2ka dö2ká dö2k1el dö2k1e2r dö2kék dö2k1ér. dö2kí 2döntöz dö2ra dö2rá dö2ro 2d1ö2röks 2d1ösz d1ötl döt2tért dö2ve dö2vi 1dő dőa2n dőá2g dő1bl dő1cl dő1dra dőe2l dőe2r dőé2l dőé2te dő1fl dő1f2r dőgé2p1e2ké dő1gr dőirá2 dői2ta dő1kl dő1kv dő2ny1a dő2nyele dő1pl dő1pr 2dőráb 2d1őrál 2d1ő2reb dőr1egy dőr1ele dőr1elő 2d1ő2rem 2d1ő2ré. 2d1ő2réh 2dőrék 2d1őrél 2dőrén 2d1őrh 2d1őrif 2d1ő2ril 2d1ő2r1in 2d1ő2rip dő2r1is 2dőrok 2d1őror 2dőros dő2röd dő2r1öz 2dőrőr 2dőrun 2dőrur 2d1ő2rut 2d1ő2rü2 dőr1üg dőr1ül 2d1őrz dő2s1érv dő1ská dő1s2m dő1sni dőso2d dős1odo dő1spe dő1s2pi dő1spó dő1s2ta dő1sté dő1str dő1sv dő1sz2 dőt1áll dő1t2r dp2la dp2le dp2lé dp2ra dp2re dp2ré dp2ri dp2rí dp2ro dp2ró dp2sz dra1ps dravasz1 drág1g drá2sz1ál drá2sze dráta2 drá2tal drá2t1e2 drá2t1ér dren2d1ő2 1d2ressz. 1d2resszb 1d2ressze 1d2resszh 1d2resszk 1d2resszr 1d2resszü dré2szá dro2g1a dro2gá dro2gen drogé2n1i2 drog3g dro2g1ó2 dro2n1a2 dro2nyi drosz2 dro1szf dro1t2r dró2baj dró2t1a2 dró2t1á2 dró2tis dró2t1ü2 d2rui dru2se dru2si dság1g dsé2g1el dsé2gül ds2ká ds2li ds2pe ds2pi ds2po ds2rá ds2ta ds2tá ds2tí dst2r dsza2ké dszá2las dszáraz1 dsz2e dsze2ra dsze2r1á dsze2r1elv dsze2r1o dszert2 d1sz2l d1szn d1sz2p d1sz2t2 d1sz2v dta2g1a2 dtalpa2d dtal2p1ada dtal2p1al dta2n1á2s d2t1ékn d1t2rá d1t2ré d1t2ri d1t2ro d1t2róf d2t1ül 1du du2cem du2c3h du2cö du2cü due2l du2gal du2g1ár 2d1ugr 2duit 2d1ujj dula1k2 dula2t1í du2l1e du2lép duli2 du2l1im du2l1in du2lis du2lí du2lö du2lű 2d1u2ni 2d1u2no 2d1unt du2óa du2óá du2ód du2óf du2ól du2óp du2rai du2rak du2ral 2d1u2rat du2ráb du2ráh du2rát du2ruk du2sal du2san du2sar du2s1as du2sál du2seg du2s1érté du2sin du2s1iv du2sol du2ső du2s1ű 2d1u2szod 2d1u2szoka 2d1u2szokb 2d1u2szoké 2d1u2szokh 2d1u2szokk 2d1u2szokn 2d1u2szoko 2d1u2szokr 2d1u2szokt 2d1u2szom dus3zs du2t1i 2d1u2to du2tó. du2tór du2tu 1dú dú2ce dú2ch dú2cse dú2c3so dúc3sz dú1dr dú2j1é2 dú2jí dú2r1a2c dú2ral dú2r1e2 dú2rén 2d1ú2ron dú2rö dú2szá dú2szó dú2t1a2 dú2té 2d1útj d1útl 2d1útn dú2ton 2d1útr 1dü dü2dü dü2gy dügy1érn dü2ha dü2há dü2hel dü2ho dü2hő dü2két dü2lá 2d1üld dü2lep dülős2 2d1ünne dü2rí dü2te dü2té dü2tő dü2ve dü2ze dü2zé 1dű dű1pr d1űrl dű1sz dű1tr dű2zé dű2ző dva2raj dva2r1e dva2r1ó2 dvá2nyan dvá2nyí dv1áta dv1áte dv1ece dv1e2leg dv1elk dven2t1í dve2ral dve2rár dve2rip dver1s d2v1e2sés dve1s2p d2v1e2teté dv1élm d2v1ép d2v1érd d2v1é2ri d2v1érté d2v1érz dv1fr dvi2csa dvi2csá d2v1iga dvigaz1 dvitéz1 dv1or dvö2l dv1ölő dv1ős dv1őz dv1pr dv1un dv1ú2t d2v1üg d2v1ü2z d2v1űz dwa1yi dy1as d1yéb d1yén dy1étő d1yév dy2jé dy2ke dyk2k dyk2n dyk2t dy2vé d2z 1dza dzaé2 2d3zaj dzak2 dza1kr 1dzá dzá2r1ó2ra dzás1s d3zász 1dze 1dzé dzé2sa 1dzi 2d3zil 1dzí 1dzo 1dzó 1dzö 1dző dzőa2 2dzőbő 2dződ 2dzőj 2dzőné 2dzőr 1dzsa 1dzsá 1dzse 2dzs1e2g 2dzs1esz 1dzsé 1dzsi 2dzsir 2dzs1is d3zsiv 1dzsí 2dzso2 dzs1ok 1dzsó 1dzsö 1dzső dzs1s 1dzsu 1dzsú 2dzsúj 1dzsü 1dzsű 1dzu 1dzú 1dzü 1dzű 2e. e1a ea2bál e2abo e2abő ea2da ea2dá eadás1s ea2dó ea1d2r ea2du eaé2d e2afá e2afe e2afi e2afo e2afö e2afő e2afü e2afű ea2gi e2agó e2aid e2ail e2aim e2aip e2ais ea2ja e2ak. ea2kas e2akat e2aká e2akb e2ake e2akép e2akh e2aki e2akí e2a1kl e2ako e2akó e2akö e2a1k2r e2akú e2akü e2alán eal1eg ea2lu e2am. e2ama e2amá e2amel e2amer e2amé e2amin ea2mo e2amu e2amú e2amű e2ane e2ané e2anö e2ans ea2nya e2api e2apo e2apó ea1p2ro e2ar. ea2ran ea2ras ea2rat ea2rá e2arb e2are e2arh e2arj e2arn e2aró e2arr e2aru e2arü e2aso e2a1st2 e2asü e2asű e2aszem e2aszé e2ata e2atá e2atc e2ate ea2t1eg e2até2 ea2tél ea2t1éne e2atf e2atg e2ath ea2tid eat1ing ea2tip ea2tir e2atm eatmo1s eatmosz2 e2atn e2ato ea2t1or e2ató e2atö ea1t2rak eat2rón e2ats e2atu e2a2tü e2atű e2atz e2au. ea2ut e2a2ux e2avi ea1vy ea2zo e1á eá2bé eá2cs eá2ga eá2gá eá2gi eá2go eá2gu eá2gy eá2hí eá2k1e eá2k1osk eála2 eá2lad eá2l1ak eá2lál eá2l1á2r eá2l1e2 eálé2 eá2lél eálfe2 eá2lid eá2l1in eá2lir eá2lism eá2lop eá2l1ór eá2lö eá2mu eá2nac eá2nal eá2n1at eáná2 eá2nár eá2n1át eá2n1e2 eá2ny1a2l eá2ny1a2n eá2nyap eá2nyar eá2ny1as eá2nyav eá2ny1e2 eá2nyén eá2ny1ér. eá2nyif eá2ny1ing eá2nyis eá2ny1o2ku eá2nyö eá2po eá2rad eá2ram eá2ras eá2raz eá2ru eá2rú eá2sa eá2sá eá2sí eá2só eá2su eá2sz eáta2 eá2t1e2 eá2té eá2tí eá2tu eá2tü e2ba2d eb1adó eb1adta eb1aga e2b1ajk e2b1a2la e2b1alk eb1ant eb1a2ny eb1atl e2b1au eb1a2zo eb1ágg e2b1áp eb1ára ebeá2 e2b1e2he eb1ejt ebe2l1á e2b1e2lef ebe2l1eme e2b1elhel e2b1enc eb1este eb1esté ebe2szek e2b1ex e2b1ég eb1ép e2b1érd e2b1érté e2b1érz eb1gr e2b1id e2b1i2na e2b1inf e2b1ing e2b1irá e2b1i2s e2b1izz eb1kl eb1kr eb2lat e1b2lú eb1okt eb1o2la eb1orv eb1öb eb1ös eb2rus eb1st2 eb1tr e2b1üg ebü2l eb1ülé e2b1ür eb1üz ec1ajt ec1alk e2c1a2n e2c1az ec1ág e2c1ál ec1ár ec1bl ec2c1a2 ec2c1ér ec2c3h ec2c1i eccs1át ec3cso ec2cú e2c1eg e2c1elo e2c1elv 2ecento e2cetb ece2t1o 1e2cets 1e2cett e2cetü ece2tüz e2c1evé ec3har ec3hen ec3hi. ech1in 1e2chó ech1u ec2le ec2lu e2csad e2cs1a2la e2cs1a2n ecsa2p1á2g e2cs1a2pák ecs1ará ecsá2r ecs1árá ecs1árb ecs1áro e2cs1á2t e2cs1é2l e2cs1ér. ecs1érté e2cs1ol e2cs1öl ecs1s ecsúszós1 e2c3sükb e2c3süt ec3sze e2c1ud ec3zá ec3ze e2d1ab e2d1a2dá ed1a2ny e2d1a2z e2d1á2c e2d1ág e2d1áp ed1egy edeleme2 e2d1elo e2d1eml ede2rak ede2r1ál ede2rel ede2r1ék ede2r1o ede2r1ü2l ede2s1o ede2tá ede2tel ede2t1ér. e2d1é2j edé2ká edé2kis edé2k1o edé2lyá edé2lyo 1e2dénn 1e2dény e2d1ép e2d1érd edé2sa edé2so edés3s edé2s3z ed1é2vén ed1é2vér ed1gr 2edic e2dide e2d1i2ga edigaz1 ed1ill e2d1int e2d1ira ed1iro e2d1ír ed1ívn e2d1íz ed1old ed1orv e2d1os e2d1ös e2d1őrs edő2s1ü ed1pl ed1pr ed2ram e1d2rog e1d2ró e2d1üg e2d1üt e2d1űz ed2v1a2 edvá2 ed2v1ár ed2vát edv1ér. ed2v1öz edy1i e2d3zá 1e2dzői 1edzőj 1edzőr 1e2dzőv 1edzv e1e ee2bé ee2cs ee2dz ee2ge ee2gé eegész1 ee2gy ee2he ee2ke e2el. ee2la ee2le e2eléb ee2léd e2elg ee2lo ee2lő ee2me ee3men ee2mé ee2mu e2en. e2enb e2enj e2ent e2enw ee2ny ee2pe ee2pé ee2po ee2re ee2ro ee2ró ee2rő ee2sé ee2sü ee2sz ee2te e2e1t2h ee2to ee2ve ee2vé ee2vi ee2vo ee2vő ee2zü e1é eé2de eé2ge eé2gé eé2gő eé2gü eé2he eé2je eé2jé eé2ke eé2kí eé2le eé2lé eé2li eé2lő eélőkész1 eé2lü eé2lű eé2me eé2ne eé2pí eépítés1s eé2pü eé2ré eé2ri eé2rő eé2rü eé2sz eé2te eé2ve eé2vé eé2vi eé2vü efa2x1i efek2tá efek2t1í2 efenyőé2 ef2f1in ef2f1o e1f2la efle2x1i2k ef2lu efo2n1alk efo2nik eforma2 efor2m1al ef1pl e1f2rá ef2rö e2g1a2bá ega2be eg1abl eg1abr e2g1a2cé ega2cs e2g1a2d e2g1a2g ega2i e2g1a2j e2g1a2k e3gaké ega2lac ega2lak ega2lan eg1a2lap e2g1a2lá e2g1alh e2g1alj e2g1alm e2g1als e2g1alt e2g1a2m eg1ang eg1ann eg1ant eg1a2ny e2g1a2pa eg1apá ega2po eg1a2pó e2g1apr eg1arc ega2ri eg1a2ro eg1art e2g1ass e2g1a2sza e2g1a2szo e2gaszú eg1atk ega1t2r e3g2aty e2g1a2u eg1a2va e3gazol ega2zon e3gába e3gábó eg1á2cs e2g1áf e2g1á2g eg1áh e3g2ái e3gája e3gájá egá2ju egá2m e3g2án e2g1áp e2g1á2rá e2g1árb e3g2árg e2g1árn egá2ro eg1árt egá2ru egá2rú egá2sa e3gát. e3g2átu e3gáva egá2zá egá2zi egá2zu eg1bl eg1br eg1d2r e2g1e2bé ege2cs1ö2 eg1edz eg1e2ge eg1ehe e2g1e2kés e2gela e3geled ege2leg ege2lej e2gelekt eg1e2lemb e2g1e2leme e2g1e2lemn e2g1e2lemr e2g1e2lemt ege2l1e2s eg1elég eg1e2lér e2g1elf e3g2elg e2g1elha e3g2elit e2g1eljá e2g1elm e3g2elne e2g1elo e3g2előá ege2lőbbe e3g2előd e3g2előf e3g2elői e3g2előm e3gelőnye e2g1eltá e3g2eltet e3g2eltü e2g1elvá e2g1elz e2gemel e3gend e3genye eg1epe eg1epr e3gerá e2gerd 1egere. e2gered 1e2gerek e2geré ege2rény eg1erk e3gerl e2g1eró e2g1erő eg2esek e2g1esete e2g1eszk e2getal eg1e2ve e2g1ex e2g1é2g e3gémb e2g1é2neke e2g1é2nekk egé2ny1e2l e2g1épí eg1éps e2gér. e2gérb egé2r1es egé2re2t egér1ete egé2rez e2géré egé2rés e2gérg e2géri egé2ri. e2gérk e2gérn eg1é2rő. e2gérr e2gérs eg1érté eg1érth e2gértő e2gérv e2gész eg1észl 1egészs eg1éte eg1fl eg2gim eg3gyal eg3gyan eg3gyás eg3gyú e3gi. eg1ibr eg1idd eg1i2de e3gie egi2g e3gig. e2g1iga e2g1igé eg1ij e2g1i2ko eg1ikr e2gill eg1imb e2gimm eg1inf e2g1ing eg1ino eg1ins e3g2io eg1ira eg1i2ro eg1iss eg1ist egi2sz e2g1i2ta e3gitá e2g1iva e2g1ivá e3give eg1izé eg1izg eg1izm eg1izz e2g1íg e2g1ín e2g1í2r e2g1ív e2g1íz eg1kl eg1kr eg1kv e2g1ob e2goc e2g1o2d e2goi e2g1o2k eg1o2la e2g1old eg1olv e3goly 2egom ego2mi e2gont e2g1op eg1org e3g2orom ego2ros e2g1orr e2g1orv e2g1o2s e2g1ot e3gó. e3g2ób egó2do e3g2ój eg1ó2ra eg1órá eg1óv e2g1öb eg1ök eg1önt eg1örö e3görög egö2röm eg1öt eg1öv e2g1ö2z egőkész1 e3gőre eg1őri eg1őrö egő2szi e3g2őz eg1pl eg1pr eg1ps e1g2rat e1g2róf eg1sk eg1sl eg1sm eg1sp eg1s2t egsz2 eg1szt eg1tr e3g2ub eg1ud e3g2um eg1u2n e2g1u2ra. e2g1u2rai e2g1u2rak e2g1u2ras e2g1u2rat e2g1u2rá e3guru e2g1u2s e2g1u2t eg1u2z eg1új e3g2ún eg1úr eg1ús eg1út e2g1üd egü2gye e2g1ü2le eg1ü2li e2g1üs e2g1üt e2g1üv e2g1üz e2g1űz egvárosi2 e2gy1a2d egy1a2g e2gy1aj egy1akt egy1a2la e2gy1ará e2gy1as egy1a2t e2gy1au egy1az e2gy1ál egy1á2rá egy1árf e2gyát egy1eleg egy1elf egy1ell egy1elo egy1e2lőj egy1e2lőv egy1elz e2gyeni 1e2gyenl 1e2gyens egy1eszt 1egyezm egy1éks 1egyéni egy1ér. e2gyip e2gyis e2gy1iz egy1ok e2gy1ol egyo2r e2gy1os egy1ot e2gy1ó2r egy1ö2l e2gy1ös e2gy1öz egy1ő2r egyu2 egy1ur egy1ut 1együt 1egzis eha2de ehá2zal eh1ellá ehe2lyes ehe2rál ehe2rát ehere2 ehe2r1el ehe2r1em ehe2ren ehe2res ehe2rin ehe2rol e2h1é2je ehé2ná ehé2név ehé2zá ehé2zo e2h1ors eh1sz e1i ei2áb ei2áh ei2áj ei2án ei2ár ei2át ei2áv e2ibn ei2deá ei2dei ei2deo ei2dén ei2dom ei2dő e2idp e2ier ei2gá ei2gé e2i1g2n ei2gy ei2ha eil2le. ei2ma. ei2man ei2má ei2mit e2imk e2ims e2imz ei2na2 ein1ad ei2n1á2 ei2neg e2inér e2inét ei2n1ita ei2nol ei2nő ein1t2r ei2nü ei2on ei2pa ei2ram ei2rat ei2ri ei2rod e2iró ei2ta e2itb e2itj e2itn e2itr ei2va ei2vá ei2vo ei2vó ei2zé e2izmi ei2zo e1í eí2gé eí2já eí2jú eí2ra eí2rá eí3rásbe eí3rásil eí3rásoc eí3rásonk eí2ró. eí2róa eí2róá eí2rób eí2ródn eí2róf eí2róg eí2róh eí2rói. eí2róik eí2róin eí2róit eíróí2 eí2rója eí2rójá eí2róje eí2róju eí2rók eí2róm eí2rón. eí2róna eí2róná eí2róny eí2rór eí2rót eí2róv eí2té eí2vá eí2ve eí2vé eí2vi eí2vo eí2vó eí2ze eí2zü eí2zű ej1ab e2j1a2d ej1a2g e2jak ej1akk ej1a2l ej1a2n ej1ar ej1au ej1a2z ej1áb e2j1á2g ej1ál e2j1ártó ej1á2t1e2 ej1átv ej1bl ej1br ejcsa2p1 ej1dr eje2c e2j1ecse e2j1ef ej1e2ged e2j1e2gé e2jekc e2j1ela e2j1elc e2jelede e2j1e2lemb e2j1e2leme ej1e2lemé e2j1e2lemn e2j1elf e2j1elha e2j1elhel e2j1elo ej1elszá ej1eltér e2j1elu e2j1eng e2j1enz e2j1essz eje2sz e2j1ex e2j1é2j e2j1é2k e2j1él e2j1ép e2j1éte ej1fr ej1g2r e2j1i2d e2j1im ej1ina e2j1int e2j1ip e2j1iz ej1íg ej1ív ej1kl ej1kv ej2mok ej1ol ej1op ej1óc ej1ón ejó2sá ej1ót ej1óv e2j1öb e2j1öl ej1ö2ve. e2j1őz ej1pl ej1pr ej1sp ej1st2 ej2tad ej2tau ej2tál ej2tát ej2t1elk ej2t1este ej2tev ejté2r ejt1éré ej2tin ej2tiz ej2tos ej2t1ó2r ej2töd ej2t1ö2l ej2tön ej2tös ej1tra ej1tró ej2tür ej1új ej1úr ej1ú2t e2j1üg e2j1ür e2j1ü2t e2j1üv e2j1üz e2k1abl ek1a2cé ek1a2dá e2k1a2dó eka2gy ek1a2ja e2k1ajtó. e2k1ajtói e2k1ajtók e2k1ajtón e2k1ajtór e2k1ajtót ek1a2kar e2k1alj e2k1a2lo ek1alt ek1ang e2k1ani ek1a2nyá ek1arc. ek1arca ek1arcr ek1arcú eka2sip e2k1au ek1azo e2k1ág ek1állo ek1álm ek1árad eká2rai ek1á2rak ek1áras e2k1á2rá e2k1árd e2k1árf e2k1árh e2k1árk e2k1árm e2k1árn e2k1á2ron e2k1árr e2k1á2ru e2k1á2rú e2k1árv ek1ásó ek1áta ek1átd e2k1áth ek1átj e2k1átm ek1á2to e2k1átt ek1bl ek1br 1ekcém ekci2óf ek1cl ek1dr e2k1ebé e2k1e2dz e2k1egg e2k1e2gye e2k1e2kébő e2k1e2kés e2kela e2k1e2leg eke2leme ek1elha e2k1elk e2kellá e2k1elm e2k1elo e2k1előn e2k1elr ek1elta ekel2t1é2r e2k1e2ma e2k1e2mel ek1e2més ek1e2pi e2k1estr eke2szele eke2szo e2k1e2vé e2k1evi 1e2kééh e2k1ég 1e2kéik ek1ékek e2k1ékt ek1é2le ek1éln ek1élő e2k1épí e2k1érin ek1értékb eké2rül e2k1ész. e2k1észh e2k1észn eké2tel e2k1étk e2k1étl e2k1étt e2k1é2ve. e2k1é2vek ek1é2vet e2k1évi ek1fr ek1gn ek1gr ekiá2 ek1i2ga ekigaz1 ek1i2ge e2k1igé ekii2 ek1ill e2k1ima eki2már e2k1iná ek1ind e2k1isk ek1ism e2k1isp ek1i2zo e2k1íj ek1írá ek1íz ekka2ró2 ek2k1ele ek2k1elf ekk1osz ek1kri ek2kű eklés3s ek2lim ek3nő e2k1oá ek1obj e2k1odv e2k1o2la ek1olló e2k1olv e2k1o2pe ekor2da ekor2d1á2 ek1o2rom ek1orra e2k1orv ek1otth e2k1ó2h ek1ó2ra ek1ó2rá ekö2k e2k1ökö e2k1ö2lé ek1ö2lő e2k1öm e2k1önk e2k1önt ekö2ri e2k1örv ek1pl ek1pr ek1ps e1k2ram e1krétá ek2ris e1k2rí ek2róm ek1sl ek1sm ek1sp ek1st eksz1al ekszes1 ek2szip ek2tau ek2taz ekt1elk ek2t1esz ek2t1érd ek2til ek2tim ek2t1i2o ek2t1ok ektus1s e2k1ud e2k1u2ra ek1uro e2k1utá e2k1utó e2k1uz e2k1új e2k1úr. ekú2t ek1úto ek1útv e2k1ünn ekü2t ek1ütő ek1üzl e1k2vó el1a2ba el1abl el1a2bort e2l1a2c e2l1a2d el1agg el1a2gy el1a2j e2l1akad e2l1a2kas el1akc e2l1a2l el1a2m el1ana elan2di el1a2ne el1a2ni el1ann ela2ny el1a2pa ela2r el1ara el1ará el1aré el1asza el1aszi el1aszó el1aszu e2l1a2u el1a2va el1a2ve el1azo elá2bé el1ág. e2l1á2ga el1ágg el1á2gi el1ágn el1á2go el1á2j el1áld el1áll el1á2lo elá2m el1ámí el2án elá2ná elá2ne elá2nó el1á2p el1ár. el1á2rá el1árb el1árc el1á2re el1á2ré el1árf el1árh el1árk el1árn el1á2ro el1árö el1árr el1árt el1á2ru el1á2rú elá2s eláta2 el1át1e2 el1átf el1átk el1átl el1átm el1átr el1ázi el1ázo el1ázt el1bl el1br 2eld. el1d2r ele1bre 2eled. 1e2ledel el1eff ele2g1e2lé el1e2gyene e2legyü el1egz eleí3ran ele1k2l ele2k1os ele1krá 1elektr e2l1elb e2l1e2lemb e2l1elm e2lelőz el1elr ele2mad e2l1ember 1eleme. 1e2lemei 1elemek ele2mell 1e2lemem. 1e2lememm 1e2lemes. 1e2lemesn ele2mesz ele2mélt ele2mérd 1e2lemük 1e2lemünk 1e2lemzé 1e2lemző 2elend e2lener ele2nél eleó2 ele2pal ele2pap ele2pele ele2pell ele2p1ő2r e2lerd el1e2red el1e2rei el1erj e2l1ern ele2róz ele2sege ele2sésb ele2sése ele2sésé ele2sésh ele2sési ele2sésk ele2sésn ele2sésr ele2séss ele2sést ele2sésü ele2sik. e2l1esnén ele2sőb ele2sős e2l1essél ele1sta ele2szek ele2t1e2két ele2teti ele2tetn ele2tető ele2t1ék ele2tél e2l1ették eleü2 1e2l1e2vők el1e2xi e2lébb elé2du el1é2ges el1é2get el1égj el1égtek el1égv el1é2het eléka2 elé2kak elé2k1an elé2k1á elé2k1e2le elé2kev elé2keze elé2kezi elé2kezt el1ékí elé2kö elé2ku el1él. el1éld elé2led el1é2let el1é2lé el1élh el1é2li el1élj el1éln el1éls e2l1élt el1é2lü e2l1élv e2l1é2neke e2l1é2nekh e2l1é2red e2l1é2rem elé2rend e2l1é2rez elé2rét. elé2ri. e2l1érp e2l1érrő e2lértel e2l1érté el1érth e2l1értő e2l1é2rü e2l1érz 2elésétő elé2so 2elész. 2elészel 2elészem 2elészne 2elészné 2elésző 2elészü 2elészv elé2tel e2l1é2tes elé2tete e2l1étk e2l1étt e2l1év. el1fl el1f2r el1gl 1elhap el2ib el1ideg el1idé el1i2do el1iga e2l1igé el1ill e2l1i2ma e2limá e2l1imp e2l1into el1i2on eliő2 e2l1i2p e2l1ira e2l1i2ro e2l1i2si e2lism el1iss el1iste eli2tin eli2tol elitu2 el1i2vá e2l2ix el1i2zo e2l1íg el1í2rá el1í2v elka2r1á 1elkezdé 1elkezdő el3ki el1k2l el1k2r el1kv el2l1a2dá el2l1a2dó ell1alk el2l1amb el2lamp ella1t el2lau el2l1ábr el2l1áll 1ellátáso 1ellátásü 1ellátm el2lef elle2g1ó2 ell1elké el2lelm 1ellená 1ellenes 1ellenf 1ellenő 1ellens 1ellenz el2lid ell1inf ell1ing. ell1int el2l1or ell1osz ell1órá el2lön el2lös el2l1űr 1elmééh 1elmél 1elméte 1elnép 1elnök el1obj el1off el1oj e2l1o2ká el1okm e2l1o2l el1oml el1omo el1ont el1opc e2l1ope el1oro el1orr el1os e2losz e2l1ox eló2ig eló2in e2l1ó2ri el1öb el1ö2m e2l1ön e2l1ör e2l1ös e2l1ö2z 2előáp 2előár 2előbé 2előbi 2előbo 1elődei elő2d1í2 1elődje. 2elődo 1elődöt. előe2r 1e2lőfú 2előfü 2előfű 1e2lőhív 1előhű 2előib 2előik 2előim 2előiv 2előja 2előké. 2előkért 1előkése 1e2lőkést 2előkl 2előkő 2előkt 2előku 2előkü 2előmö 2előmű 2előna 1előnn 2előnö 1előny. 1előnyb 2előnyer 1előnyh 2előnyi 1előnyk 1előnyn 1előnyö 1előnyr 1előnyt 1előnyü 2előö el1őr. 1e2lőreg 1előreh 1előrej el1őriz el1őrl 2előro e2l1őrü 2elősá 2előso 2elősö elő1s2p 2elősze 2előszé 2előszi 2előszó 2előtü 2előü 2elővis 2előviz 1e2lőz. e2lőze 2e3lőzene 1előzm el1p2l el1pró el1sk el1sl el1sm el1sz2t el2t1aj eltára2d eltár1ada 2elte. el2t1e2rei 2eltes 2eltet. 2eltete 2elteté 2elteth 2elteti 2eltetj 2eltetn 2eltets 1eltettk 2eltetü 2eltetv 2eltéb 2eltél 2eltét el1t2ra el1trá el1tré 2eltük e2l1ud el1u2g elu2n el1und el1u2r e2l1u2t e2l1uz el1új el1ús el1ú2t el1üc e2l1üd e2l1üg elügy1ér. elügy1érn elü2kén e2l1ültet e2l1ür e2l1üs e2l1üt e2l1üv e2l1üz el1űrt e2l1űz elv1ada elv1a2dó el2v1at el2v1árai el2v1áras el2v1árár elv1ász el2vát el2v1enc el2v1égü elv1éle el2v1ér. el2v1éri el2vik elv1olt el2v1ó2 el2vöd el2vő el2vú e2ly1a2 e2ly1á2 e2ly1e2kén. e2ly1el e2lyer ely1eszt ely1é2jé ely1é2ké e2ly1él e2lyés e2ly1i2ko e2ly1ira ely2kéj e2ly1o e2ly1ó e2lyöm e2lyön e2lyös e2lyő ely1ul elyü2l e2ly1ülé e2m1ab em1a2dat em1a2dás e2m1a2do e2m1a2dó e2m1adt e2m1a2gi em1a2ja e2m1ajá em1ajk e2m1ajt em1a2ka em1aká e2m1aku em1a2lap e2m1all em1almá em1alv e2m1ana 1emaná e2m1a2ny ema2p em1apá em1apr em1a2rán em1asszo e2m1atl e2m1a2u e2m1a2v e2m1a2zo e2m1áb emá2l em1ála em1áld em1áli e2m1áp emá2r e2m1ára e2m1árn e2m1áro e2m1áru em1árv e2m1ásá emát1a2 e2m1áte e2m1átl em1átm e2m1átt e2m1átu 1embarg 1embered 1emberf ember1ő2 1embers emb2len 1emblé em1bre 1embri em1bro em1dr e2m1ef eme3ger eme3gi em1egyet em1egyé e2m1egz e2m1e2kés e2m1ela em1elb 1emelet 1emelke e2m1ellá e2m1elm 2e2m1elo 1emelőb 1emelőe em1előny 1emelős 1emelőv 1emelty e2m1ember e2m1e2mel e2m1emu e2mener emenes1s e2m1e2p e2m1e2rény e2m1e2rő eme2sa em1e2seté e2m1e2sés em1e2szem e2m1e2szet e2m1eszk e2m1eszm e2m1eu e2m1e2v eme2z1a eme2z1á2 eme2z1o eme2z3s e2m1ég e2m1é2he. e2m1é2hen e2m1é2hes e2méhs e2m1é2j emé2k e2m1éke em1ékr em1é2let e2méneke e2m1ép e2mértel e2m1értéke e2m1értéké e2m1értékn em1észl emé2t1a2 emé2tár e2m1é2tek emé2tel e2m1étel. emét1elh emét1els em1fl emfoga2d emfo2gada em1f2r em1gr e2midé em1i2dő emi2g e2m1iga e2m1ige e2m1igé em1iks emi2m em1ima e2mimá e2m1inf e2m1ins e2m1inte e2m1i2p e2m1ira e2mirá e2m1iro e2m1irt e2m1isk e2m1ism e2m1iste emi2sza emi2szá emi2szo em1izé em1izg e2m1i2zo e2míg e2m1íj e2mír e2m1í2v em1kl em1kr 1emlékm 1emlékv emo2k e2m1okl em1oko e2m1okt em1ola e2m1old em1oll e2m1olt e2m1o2p e2m1ork e2m1ors e2m1orv emo1t2 emó2ra em1ó2rá e2m1öb emö2k e2m1ökö emö2l e2m1öld em1ölé e2m1ön e2m1ö2r e2m1ös em1öv e2m1ö2z em1őr. em1őrk em1őrn em1ő2rö em1őrr em1őrt 1empát em1pc em1p2re em1pré em1pro em1pró em1p2s em1sk em1sm em1sp em1s2t em1t2r 1e2mu. e2mud e2mug e2muj 1e2muk 1emulz 1e2mum em1uno e2mur e2musz em1utal e2m1u2tá e2mutc e2m1utó e2m1új em1úr e2m1út e2m1üd e2m1üg e2m1ü2lő e2m1ünn e2m1ür e2m1üt e2m1üv e2m1üz e2m1űz em1zr e2n1ab en1a2do en1agi e2n1a2j e2n1a2k en1a2la en1alk en1all en1alm e2n1a2n en1a2pá ena2p1e en1a2rá en1arc en1asz en1atk en1aut en1ábr en1ág en1áld en1álm e2n1ára en1árn en1á2ro e2n1áru en1átk en1átm en1átv e2n1áz en1bl en2c1a2 en2c1ár en2c3h en2c1ip en2cí en2c1ol en2c1os en2c1ö2 enc3ség en2c3sor enc3s2p enc3sz en2cu en2d1adá en2d1alk en2dano en2d1áll en2d1árn en2d1átl end1é2jé en2d1ér. en2d1érr en2d1értő en2d1érz en2d1or en2d1ón en2d1ó2r en2dös en1d2rá en2dú en2dza eneá2 e2n1egér e2n1egg en1e2lek en1eljá en1elk e2n1ell en1elm en1elny en1elü en1elvá e2n1eml eneó2 ene1p2 2enerá 1e2nerg e2n1ern e2nerv 2enes ene1sztá ene2tal ene2tos e2n1ex ené2k1a ené2kel enéki2 ené2kis en1épí en1épü e2n1ér. e2nérd e2n1éré e2n1éri e2n1érte e2n1érv ené2sza ené2szer ené2sz1in e2n1étk e2n1éves ené2vig en1f2l enfluo2 enga2 en2gan 1engedé enger1ő2 engés3s eng1g e2nidé enidi2o e2n1i2ga e2n1ige e2n1igé en1ill e2nimá e2n1ina en1ind e2n1inf e2n1inte e2n1inv e2n1ira en1i2rá en1isk e2n1ism eni2sza eni2szer eni2szo eni2sz1ó2 e2n1ív en1k2j en2n1eme en2nes enn1ége enné2k en2n1éke en2nér en2nir en2n1ol en2nú en2n1ül enny1a2d enny1as enny1á en3nyer enny1í2 en3nyu e2n1ob e2n1of e2n1oi en1old e2n1olv eno2ni en1opt eno2r1á2 e2n1ost en1oszt e2n1ox enóta2 enó2tal enó2t1e2 e2n1öb e2n1öl en1ön e2n1ös e2n1ö2t e3növ enő2rü en1pr en1ry en2s1ab en2s1a2l en2s1a2n en2sas en2s1el en2s1érté ens3szá en2s3zon en2t1a2c en2tada ent1agy enta1k2 en2t1a2la ent1alj en2t1alk ent1a2lo ent1and en2t1a2ny ent1ass en2t1á2rak en2t1á2rat en2t1árá en2t1á2rú en2t1elmé ente2r1a en2t1este en2t1esté en2t1esti ente1t2r en2t1é2g en2tép en2térm en2t1é2ve. en2tigé en2t1i2o enti2p ent1ipa enti2sz en2t1okt en2tön en1trad ent2ran en2tun en2t1u2r en2t1ü2z en1uta en1úr en1út e2n1űz e2nyab e2ny1a2d e2ny1ae enya2g eny1aga eny1agá e2ny1aj eny1alk e2ny1a2n eny1aré e2ny1as e2ny1at e2ny1au eny1d2 eny1e2dzé e2nyelm eny1előn eny1elvo eny1elvű e2ny1e2rő eny1eve e2nyéva 1enyhi. eny2h1ős e2ny1id e2nying e2ny1ira e2nyiz eny1í2ró e2nyok e2ny1o2l e2ny1or e2ny1os e2ny1ó2 enyö2k e2ny1ökö e2nyöt eny1s enyt2 eny1tr eny1út enyva2 eny2van 1enyve. eny2v1e2l enyves1s en2zal 1enzim e1o eo2áz e2obo e2ode eo2dú eog2rafi e2oka eo2kád e2okár e2oké e2o1k2l e2okon eo2kos eo2kö eo2laj e2oló eo2ly e2ome e2omé e2omi eo2n1al eo2nan eon1any eo2natom eo2n1au eo2n1ál eo2nár eon1d2 eo2ner eon1f2 eo2niz eo2nö eon1t2r eo2n1ú eo2nü e2opa eo2pe e2o1p2l eo1pro eo2r1a2 eo2r1á2 eo2res eo2r1és eorgi2a e2orgi2áb eori2tá eor1k2 eo2rö eor1s2 eo2so e2ost e2osza eo1sz2f e2otí e2oto eo1t2r eo2vi e1ó eóa2d e2óbö eó2ce eó2dá e2ófa e2óhe e2óje e2ókap e2ókép e2ókor e2ómi e2ómű e2óné eó2no eó1pr eó2rá e2óre e2ósu e2ószo e2óta e2ótá e2óte e2óté e2óti e2ótí eó1tré eó2vak e2óve e2óvé e2óví eó2vo eó2vó e1ö eö2bö eö2dé eö2kö eö2le eö2lé eö2li eö2lö eö2lő eö2lü eö2mö eö2nö eö2rö eö2rü e2ös. eö2ve eö2vi eö2vü eö2zö e1ő eő2re eő2rö eő2rü eő2sz e2p1ab e2p1a2da e2p1a2dá e2p1a2dó ep1a2gy e2p1aka e2p1akk e2p1akn ep1a2lak ep1a2lap e2p1alj e2p1alk epa2lom e2p1a2ny epa2rán ep1atró ep1aut ep1a2zo e2p1áb e2p1á2g ep1állá e2p1á2ra epá2s e2p1ása ep1áta ep1átc e2p1á2t1é ep1átf e2p1átm ep1á2t1o ep1átt ep1átü e2p1átv ep1bl ep1br ep1dr e2p1e2dz ep1e2lemr e2p1e2let e2p1ellá e2p1elo e2p1ene epe2ral epe2r1e2c epe2rev epe2rin epe2rül e2p1esti epe2szá e2peszmé e2p1ex 1e2péd 1epééb 1epééi 1epéén e2p1ég 1e2péit e2péj ep1ékh ep1éle ep1élm 1e2pénk e2p1ér. ep1fl ep1ido e2p1i2ko ep1ind e2p1inga e2p1i2rá e2p1irt e2p1ism e2piz e2p1íg e2p1íj e2p1ín e2p1ív ep1kl ep1kr ep2lag e1p2laká e1p2lan e1p2lán e2p1ob e2poch ep1okt e2p1olv ep1ope e2p1orn ep1orsó 1eposz. 1eposza 1eposzá 1eposzt. ep1osztá e2p1ö2l ep1önt e2p1ös e2p1öv e2p1őri ep2pan ep2pát ep2p1e2le ep2p1elh epp1eró eppó2 ep2pór ep2pö ep1pro ep1pró ep3ret e1p2réd e1p2rin e1proj e1p2rot ep1s2k ep1sp ep1st ep2tad ep2t1aj ep2t1í2v ep2t1op e2p1ug e2p1u2ta e2p1utó ep1új ep1út e2p1üg e2p1üt e2p1üz e2p1űz er1abla er1a2bor e2r1abr er1abs era2dat e2r1a2dá er1adm er1a2do e2r1a2dó era1dr er1a2ge er1agr e2r1a2ja e2r1ajk er1ajtó e2r1a2kad e2r1a2kas e2r1akc e2r1akti er1a2la e2r1alg e2r1alj er1alk e2r1a2lo er1als e2r1alt er1alv er1amb er1amp er1angy er1ann er1a2nya er1a2pa. er1app er1aps e2r1a2ro e2r1asp era2sz1a2l era2szav era2szárn era2szel era2sz1é2p e2r1atk e2r1atl era1t2r er1att er1aut e2r1a2zo e2r1ábr erá2fé er1áge er1á2gú e2r1á2gy er1állá er1állé er1állo er1álló er1állv er1ápo e2r1ár. er1á2rak er1á2rá e2r1árb er1áre er1áré er1árf er1árk e2r1á2ro e2r1árr er1árs er1á2ru er1árú er1árv er1ásá e2r1á2sz er1á2t1e2 e2r1áth er1á2ti e2r1átí e2r1átj e2r1átk er1átl e2r1átm e2r1átn e2r1átr e2r1átt e2r1átv erb1i2na er2c1a2l er2car er2c1ár er2c1át erc1ell er2c3ho er2cid er2c1ina er2c1iná er2c1i2pá er2cis erc1k2 erco2 er2cö er2csad er2cs1an ercs1ál er2cú er2cz 1erdej 1erdő ereá2 1eredetű e2redén 1e2redm eree2 er1eff ere2gál ere2gel e2r1e2ger erei2g 1e2rején 1e2rejér ere2k1el erek1e2szű erek1é2j ere2kot erek1t ere2k1ú2s e2r1e2leg er1elér e2r1ellen er1elli e2r1elö e2r1elr erem1egy ere2m1emb erem1érté ere2m1ut e2r1enz ereo1gra ere2pan ere2pas erepá2 ere2p1ál ere2p1e2sé ere2pin ere2pos er1erk er1ern er1eró e2r1esti e2r1estj e2r1estr e2resze. ere2szí e2reszü ere2tál ere2tát ere2t1eg ere2t1erj ere2t1é2rő. ere2t1é2ve. eretö2 er1e2vés e2r1ex 1e2rezet. 1e2rezete 1erezőkh erébe2 eré2bes er1ég. er1é2ge er1égé e2r1éj. e2r1éjb er1éjf e2r1éjn e2r1éjs eré2k1a2 eré2ká eré2kol eré2k1ö e2réneke e2r1é2neké eré2p1a eré2pá e2r1é2ren e2r1é2ré e2r1é2ri eré2sa eré2s1elv eré2sza eré2szá eré2szo eré2szö er1é2ter e2r1étk e2r1év. er1é2ve. e2r1é2vek e2réven e2r1é2ves e2r1é2vet e2r1é2vén er1é2vét er1évf er1évh e2r1é2vi e2r1évn e2r1évr er1évt er1évv erfé2l1é2v er1fl er1f2r er1gl e2r1i2deg e2ridé e2r1ido er1idu eri2ga e2r1i2gá e2r1i2kon e2r1i2mi eri2no erint2 e2rinteg erin1tr e2r1i2on eri2os e2r1i2par e2r1ira er1iró e2r1isk er1ism eri2szo e2r1ita e2r1i2zé e2r1izg er1íg er1íj. er1íjá e2r1ír e2r1í2z er1k2r er1k2v erme2k1a2 erme2ká erme2kesz erme2ko erme2köl erme2sz1á er2mind erm1isi ern1ala ern1ékn ern3n er2n1ó2d 1ernyő er1okl e2r1okm er1olda e2r1o2li ero2nal er1ope e2r1opt er1orc er1ord er1orm er1orn er1o2ro er1ors e2r1orv erosz2f e2r1o2ve e2r1ovi e2r1óc er1ó2dá er1ólo er1ó2rá er1óri e2r1ö2c erö2k er1ökl er1öko e2r1ökö e2r1ö2l e2r1ör e2r1ös e2r1öt e2r1ö2z e2rődd erőé2n 1erőlt 1e2rőmé 1erőmh 1e2rőnö 1e2rőö e2r1őri er1őrö er1p2l er1p2s er2rév er1ry er2s1a2d ers1alk er2s1an er2sat er2s1á2gi ers1ára ers1eml er2sérte er2s1érté er2s1értő er2sid er2s1im er2s1i2n er1ská er2s1od er2s1ol er2s1ón er1spor er1srá er1stra er2sut ersz2to er2t1ai ertá2p ert1ápo ertára2d ertár1ada er2t1elké ert1estj ert1esze er2t1é2j er2t1ékn er2t1évén er2t1é2vév er2tid er2t1i2m er2t1íz er2tos ert1órá er2t1ös er2t1öz er1t2ran er1trén ert1s er2t1út erubi2 1e2rup e2r1u2ra er1urá er1uru er1u2sz er1u2tá e2r1új e2r1úr e2r1ú2s er1útj er1útl er1ú2to er1útr e2r1üd e2r1ügg er1ügyb er1ügyn er1ügyr e2r1üled e2r1ür e2r1üs e2r1üt e2r1ü2v e2r1üz e2r1ű2z er2v1ala er2v1alt erva2n erv1any er2v1á2ru er2vása er2v1átk erv1e2lőké er2vereze er2v1e2sze er2vék er2vérte er2v1érz er2vos er2vös er2vú er1ya 2esa. e2s1a2b e2s1a2d 2esait e2s1alja es1alm esa2n es1any esa2p es1apá es1arc es1ass es1asz es1a2ty e2s1au 2esábó e2s1á2g 2esán es1ára es1á2ru 2esát es1bl es1br es2ch 1esdő es1dró 1esedez ese1fr ese2gye e2s1elm e2seng es1epri e2s1erd eseren2 1e2settü 2esé. esé2g1el 1eséll 1esély e2s1ép es1érc esés3s e2s1i2d esike2t1 e2s1ina es1i2pa e2s1isk 1esítőst es1í2zű e1s2kat e1s2kál es2kic 1eskü es2lat eslege2l esle2t1o es2lin e1s2lu e1s2mac esná2 2esok. 2esoka 2esokbó 2esokk 2esokr 2eson e2s1op 2esos. 2esosa es1osz es1ott e2s1ó2r esőká2 e2sőz es2pan es2pec es1p2l e1s2pó e1s2rá es1stá es3szab essz1aga essz1a2r 1esszenc es3szerű essz1élet essz1élt essz1int essz1ok es3szö e1s2tab es2taf es2t1a2l es2tana es2t1a2ny estapolc1 es2t1a2ra est1ará e1s2tat es2taz es2t1á2p est1áram es2t1ári es2t1árn es2t1át 1esteko es2tenz este2r1a es2t1este es2t1esti 1estéih 1estéj 1estém 1esténk es2t1ér. es2t1éri es2t1érr es2térte es2t1é2rü es2t1ill es2t1ina es2t1int es2tip es2t1isz es2tiz es2t1ol e1s2top esto2r es2t1os es2t1ó2r estö2 es2t1ös es2t1őr. es2t1őrk es2t1őrö es2t1őrr es2t1őrt es2tun es2tú es2tür es2t1ü2z e2s1ud esu2r es1ura es1urá e2s1utá es1úr. es1úrb es1úré es1úrh es1úri es1úrk es1úrn es1úrp es1úrr es1úrt e2s1ú2t e2s1üz e2sza2c esz1acé e2szad e2sz1a2e esz1ajt esza2k1é esz1akn esz1alj esz1any e2sz1ara e2sz1au e2száru e2sz1ás eszá2t esz1áts e2szece eszeg1ér e2sz1egy esz1ekés e2sz1ela e2sz1e2mel 1eszenc e2sz1erd e2szev e2sz1ex eszé2do esz1é2pí e2sz1é2ri esz1g2 esz1i2pa esz1isk esz1ist e2sz1ita e2sz1iz eszke2l 1eszme. 1eszméb 1eszméi 1eszméj 1eszmék 1eszmén 1eszmét 1eszmév e2sz1old eszö2l esz1ölő e2sz1ön es3zsá esz3se esz2tab esz2tad esz2t1a2gá esz2taj esz2t1ala esz2t1alj esz2t1ap eszt1árf esz2t1árn esz2t1e2v esz2t1ér. esztés3s 1esztéti esz2tid esz2t1ol esz2t1ó2r esztö2 esz2t1öl esz2t1őr. esz2tut esz2t1út esz2tüz e2sz1ü2g e2sz1ü2z 1e2szűs 1e2szűt esz1z et1abr eta2c et1acé e2t1a2d e2t1a2gá e2t1a2gy e2t1a2j et1a2kas e2t1akc et1akó e2t1aku eta2lag eta2lak et1a2lás e2t1alb et1ald et1alf e2t1alg et1alj e2t1alk 1e2talo eta2n1é eta2nyag e2tapr et1a2ra e2t1ará e2t1arc e2t1arz et1asp e2t1ass et1a2szá e2t1atk e2t1a2to e2t1aty e2t1a2u e2t1a2z et1ábr e2t1á2cs e2t1áf et1ág. e2t1á2ga et1ágb et1ágg et1ágn et1ágr e2t1áh et1áju et1áll e2t1álm e2t1á2rad et1áre et1árny etá2ron et1á2rú e2t1á2ta etát1a2d e2t1áth et1átl et1áts et1átu e2t1átv et1bl et1br et2ch et1dr etea2 eteg1á ete2g1e2l ete2gó e2t1e2ke. e2t1e2kei e2t1e2kek ete2k1ék e2t1e2kénk e2t1e2kés e2t1elc et1eldo ete2lege ete2legy et1e2lej e2telemz e2t1e2lesé e2t1eléré etelés1s e2t1elha e2t1elhá et1elhel e2t1eliga e2t1eljá e2t1ellá e2tellen e2t1elme e2t1elmén. e2t1elméne e2t1elmét e2t1elnev e2telnö e2t1elny e2t1e2lo ete2lőad et1elszá e2t1eltá e2t1elter et1eltérí e2t1elvá e2t1elvez e2t1elvo e2t1elz ete2mal e2t1ember ete2mel e2t1enz ete1p2 e2t1erd ete2rén etero1 e2t1erő ete2s1a e2t1este. e2t1eszté ete2teté ete2t1ér. 1e2tetésen 1e2tetésn ete2tos ete2t1ö ete1tra e2t1ezr etéé2 et1ég. et1égb et1é2gé et1égg e2t1é2gi et1égn eté2k1a2 eté2k1á2 eté2k1e2l et1ékí eté2kos e2t1élm e2t1érc e2t1é2ré. e2t1é2rén e2t1é2rér e2t1é2rét eté2rie e2t1érke e2t1érm e2t1é2rős e2t1értel e2t1érz eté2sa eté2s1ég eté2so etés3s eté2sza et1észl et1észr eté2t1a2 eté2ter. eté2tere eté1tra e2t1é2ven eté2ves. e2t1é2vet e2t1é2véh eté2véig e2t1é2véne eté2vétő et1évh et1évt et1fr et1gl et1gr et2hei eti2d et1ide et1ido eti2g e2t1ige e2t1igé e2t1igy e2till et1i2ma e2t1imá e2t1i2mi 1e2timo e2t1imp etina1 e2t1ind e2t1inf e2t1ins e2t1inte e2t1inv e2tinz e2t1i2pa e2t1i2ra e2t1iri e2t1iro e2t1iró e2t1ism e2t1iste e2t1i2sza e2t1i2szon e2t1i2ta et1izé e2t1izg e2t1izo e2t1izz e2t1íg e2t1íj e2t1ín e2t1í2r e2t1í2v e2t1íz et1kl et1k2r et1kv 1etnol et1oda e2t1okm e2t1okt e2t1oml eto2n1a2 eto2nál eto2n1is eton1n et1opc et1ope e2t1opt 2etor et1ord e2t1org e2t1orm et1orom e2t1ors e2t1orv et1ost etosz2f et1oszl et1oszt e2t1ou e2t1ó2c et1ó2ra et1ó2rá e2t1ó2v et1öko etö2l e2t1öl. et1ölé e2t1ölő e2t1ön e2t1ös e2t1öt et1ö2vü e2t1ö2z etőa2 etőe2l etőé2b etőfé2l1é2v e2t1őr. e2t1őrb et1őrc et1ő2réh ető2ri. et1őrk et1őrl e2t1őrn ető2rök et1őrp e2t1őrr e2t1őrs et1ő2rü ető1s2p et1pl et1pr et1ps e1trap e1trau e1t2rág e1tréf e1t2ril et1sk et1sn et1sp et1st et3tad ettai2 etta2n1ó2 et2telem et2t1ing et2tír et1t2rá et1tri etty1á2 e2t1ug et1una et1und et1u2ra etu2sz et1utá et1utó et1utu e2t1új e2t1ú2ri e2t1út e2t1üd e2t1üg e2t1üld e2t1üt e2t1ü2v et1ü2zem et3ya e1u eu2bo eu2ga eu1k2h eu2mal eu2m1e eu2mim eu2m1i2p eu2mis eu2m1iz eu2mí eu2mór eu2mő eum1p2 eu2mü eu2na eu2ná eu2ni eu2no eu2nó e2ur. eu2rá eur1áz eu2ri. eu2rig e2urt eu2szí e2utai eu2tal e2utan eu2taz e2utái e2utájá e2utáka e2utákk e2utákná e2utákr e2utánk e2utár eu2tó e2uts eu2zs e1ú eú2jí eú2sz eú2ti eú2to e1ü eü2dü eü2ge eü2gy eü2le eü2lé eü2li eü2lö eü2lő eü2lü eü2re eü2rí eü2rü eü2sz eü2te eü2tő eü2tü eü2ve eü2vö eü2ze e1ű eű2ri eű2ze eű2zé eű2zi eű2zö eű2ző evá2r1al eve2szö evé2lá evé2l1e2l evé2nyel evé2r1emb evé2rö evé2so evé2sza evé2szö evízi2óét ex1ab ex1al ex1ap ex1áb ex1á2r e2x1át ex1bl ex1br ex1dr e2xeg e2x1elm e2x1elvá e2x1er e2x1ék e2x1él e2x1ép ex1idő e2x1igé ex1inf e2x1ing e2x1int ex1izz e2x1íj e2x1ír e2x1ob ex1op ex1ön ex1ör ex1ös 1expan ex1sk ex1sp ex1st ex1új e2x1üg e2x1üv e2x1üz eza2c ez1acé e2z1a2d e2z1af ez1ajt e2z1a2l e2z1a2n ez1arz e2z1as ez1aut ez1áll ezá2ma ez1árb ez1árr ez1á2rú e2z1át ez1bl ez2dál ez1e2gy ez1e2kék e2z1ela e2z1e2leme e2z1elér e2z1elm e2z1el1ö e2z1e2mel ezen2t1e2 eze2r1a eze2rá eze2red eze2r1el eze2r1em eze2r1es eze2r1o ez1erő ez1este e2z1e2sz eze2t1a2 eze2t1á eze2t1eg eze2t1e2l eze2t1esz eze2t1ér. eze2t1é2rő. eze2t1é2ve. eze2t1o eze2tu e2z1ég e2z1é2j ezé2ká ezé2k1o e2z1él ezér1emb ezé2rett ezé2ru ezé2sa ezéskész1 e2z1é2te ez1fr ez1gr ez1i2do ezi2g e2z1igé e2z1i2ko e2z1ill ez1imp ez1iná ez1ind ez1inf ez1int ezi2o ez1ion e2z1i2p ez1i2r ezisé2g ezi2s1égé e2z1ism ezi2ta e2z1í2v ez1k2r ezkupac1 ez1kv e2z1ob ez1old ezo2nár ezon3n ez1opt e2z1ox e2z1ó2l e2z1ó2r ez1ó2t ez1ö2b ez1ös ez1ö2v ezőe2l e2z1ő2ri ez1őrl e2z1őrs ez1ő2rü ez1őrz ezős1orra ez1pl ez1p2r 1ezrede 1ezreds 1ezrel 1ezrem 1ezresn 1ezrű ez3saj ez3sap ez3sát ez3sáv e2z3sé ezsió2 ez3sl ez3sor ez3s2p ez3s2ta ez3str e2z3sü ez3sz ez1t2r ez1u2r ez1ut ez1új ez1ú2t e2z1üg 1e2züs e2z1üt e2z1ü2z 2é. é1a éa2da éa2dá éa2do éa2dó éa2ga éa2gi éa2já éa2ka éa2la éa2l1e éa2na éa2ny éa2ré éa2ri éa2ro éa2uk é1á éá2fá éá2gy éá2ju éá2ra éá2ro éá2ru éá2rú é2b1ag é2b1a2j é2b1a2k é2b1a2l éba2n é2b1any é2b1a2v éb1ál ébá2r éb2b1á éb1eszű é2b1é2k é2b1él é2b1ép ébié2 éb1isk éb1i2va éb1íz éb1kr éb1pl éb1pr 1ébres é2b1ug éb1üg éc1a2d éc1aj éc1a2k éc1a2l éc1a2n éc1ál éc1ár é2c1e2lem é2c1elv é2c1ember é2c1e2mel éc1gr éc3ha éc3há éc3hí éc3ho é2c1i2d é2c1il éc1ima éc1ob éc1os éc1őr éc1pr éc3sab écs1ol éc3sz é2c1u2t é2c1ül éc3zs é2d1ab é2d1a2c é2d1a2d é2d1a2g é2d1a2j éd1akc éd1akt éd1a2ku éd1alk é2d1a2n éd1apa éd1a2pá é2d1arc éd1asp éd1ass éd1a2ti éd1att é2d1ág éd1áp éd1dr é2d1e2g é2d1ej é2d1e2ke. éde2kétő é2d1e2l1a é2d1elk é2d1ell é2d1elo éd1ember é2d1eml é2d1enz é2d1ep éd1erd é2derei é2derem é2derg é2derl é2derné é2d1erő é2derrá é2derrő é2ders é2dertő 1édesa é2desem 1édesg 1é2desí é2d1ég é2d1é2j é2d1ékb é2d1é2ké é2d1ékk édé2l é2d1éle é2d1élm é2d1ép é2d1ér. é2d1é2ri é2d1érs é2d1érte é2d1értő é2d1érv é2d1érz éd1fr édi2ad édi2aka édi2al édi2ar édi2a1s édiasz2 é2d1i2d édi2g é2d1iga é2d1ige é2d1igé éd1i2ko éd1ill é2d1i2m éd1i2na éd1ind é2d1ini éd1ins é2d1int é2d1i2p é2d1iro é2d1i2z é2d1ín é2d1ír éd1ív éd1kl éd1okta é2d1op é2d1or é2d1osz éd1ott éd1ó2r éd1öl éd1ön é2d1ö2r éd1öt éd1öv éd1öz é2d1őrm é2d1őrn édős2 édő1sp éd1pl éd1pr é1d2ram éd2raz é1d2rám éd1sk éd1sp éd1sr éd1st éd1t2r é2d1ud éd1uj éd1ura é2d1u2t é2d1új éd1úr éd1ú2t é2d1üd é2d1üg é2d1üt é2d1üz éd3za éd3zá éd3ze éd3zó éd3zü é1e ée2bé ée2la ée2le ée2lő ée2me ée2pi ée2rő ée2se ée2sé ée2si ée2ső ée2sz1a2 ée2sz1á ée2szel ée2szép ée2szir ée2szis éeszt2 éesz1tr ée2uf ée2vé ée2vő é1é éé2ge éé2le éé2pí éé2ra éé2te éf1ai éf1ajtó éf1ing é2f1is éf1kl é2f1os ég1abl ég1abr ég1a2d ég1aka ég1akk ég1akn ég1alj ég1am ég1a2ny ég1a2p é2g1a2r ég1aut ég1a2v éga2z é2g1á2g é2g1ál ég1áp ég1árt égát1a2d ég1átá ég1á2t1e2 ég1átf ég1átj ég1átm ég1áts ég1átt ég1átv ég1bl ég1br ég1d2r ég1ece é2gedén é2g1edz ég1e2ge é2g1ej é2g1e2kés é2g1ela é2g1elb ége2leg ég2elek ége2lemb é2ge2leme ége2lemn ége2lemt é2g1elér é2g1elf é2g1elha ég1elhá ége2lin é2g1elis é2g1eljá é2g1elk é2g1ellá é2g1ellen é2g1elm é2gelnö ég1elny é2g1elö é2g1e2lőa ége2lőm é2g1e2lőn ég1e2lőt é2g1elp é2g1elr é2g1elsa é2g1elszí ég1elta é2g1eltá é2g1elvá é2g1elz é2g1enc é2g1e2ne é2g1eng ége1p ég1epi ége2rál é2g1erede ége2r1el égeri2 ége2rim ége2rin é2g1eró ég1erő ége2rül 1é2gesd é2g1essz ége2sze é2g1eszk é2g1eszt 1é2getj 1é2getőh 1é2getőn 1é2getőt ég1eva ég1e2ve ég1e2vé ég1evo é2g1ex é2g1é2g é2g1é2l é2g1é2neke é2g1é2neké é2génekk é2g1é2nekn ég1épí é2g1épü ég1é2ret é2g1é2rez égé2ré. é2g1érh é2g1é2ri ég1érl ég1érm ég1é2rő. ég1é2rők égért2 ég1érte ég1érté 1é2gésé 1é2gésn é2gést é2g1éva ég1fl ég1fr ég1g2l ég1g2r ég3gyo 1éghes 1éghü égi2as ég1i2den égi2g é2g1iga. égig1ap égig1as ég1igaz égig1á é2gill é2g1imá ég1ina ég1inf é2g1ing é2g1inj ég1ins é2g1int é2g1ira ég1iro é2g1i2ta é2g1iva é2g1i2zésn é2g1izg ég1íg ég1íj ég1ín ég1ír ég1ív ég1íz 1égj. égkia2 ég1kl ég1kr ég1kv 1égne. 1égnék 1égnén 1égnét 1égni é2g1ob ég1oki ég1ola ég1old ég1oli ég1oll ég1olt é2g1op é2g1o2r é2g1os ég1ott é2g1o2v é2g1ox é2g1óc ég1ó2r ég1öb é2g1ö2d é2g1ö2l ég1ön égö2r ég1örö é2g1ös é2g1öt é2göv é2g1ö2z 1égő. 1égők é2gőr ég1őri ég1őrö ég1ősi 1égőt 1égőv ég1pl ég1pr ég1ps ég1sk ég1sp ég1s2t égsz2 1égsz. égszáraz1 ég1tr é2g1ud ég1un é2g1u2t ég1úg ég1új ég1úr ég1ús ég1ú2t é2g1üd é2g1ü2g é2g1ür é2g1üs é2g1üt é2g1üv é2g1üz é2g1űz égvezé2 é2gy1a2 é2gyál é2gyedé é2gy1eg é2gyelek é2gyeleme égye2m é2gy1emb é2gy1eme égye2seké é2gy1esz é2gy1e2v é2gyeze é2gy1ék é2gyél égy1é2ne égyi2 é2gyin é2gyir é2gy1is é2gy1iv é2gyí égyo2 égy1ok égy1os égy1ot é2gy1ó2 égy1ö2l é2gy1u2 é2gy1ú é2gy1ü2l é2gyür éha2l éh1ala éh1any é2h1arc éh1art é2h1au é2h1a2v éh1edé 2éheg éh1e2gé éh1e2le éh1elé éh1elf éh1elh éh1ell éh1e2lő éh1elt éh1elv é2h1enz é2h1e2r é2h1esem é2h1e2to éh1evé é2h1ex é2heze 1é2hezé 1éhező 1é2hezt é2hezü é2hezv éh1ég éh1é2k é2h1é2l é2h1ép éh1érb éh1fl é2h1ic é2h1if é2h1i2n é2h1ip éhi2r éh1ira éh1irt é2hit éh1ita é2h1iz éh1ín éh1kr é2h1od éh1old éh1öb éh1ö2d éh1ös éh1pl éh1pr 1éhsé éh1sk éh1sp éh1ud éh1új é2h1üg é2h1ür é2h1üt é2h1űr é1i éi2dő éi2ga éi2gé éi2má éi2pa éi2rá éi2ro éi2ta éi2vás éi2vó é1í éí2rá éí2ro éí2ró éí2vá éí2ze é2j1ab é2j1a2da é2j1a2l é2j1any é2j1a2r é2j1á2l é2j1áp é2j1árn éj1eb é2j1e2lem é2j1elh éj1elm é2j1elv éj1emb é2j1esz é2j1e2v é2j1é2g éjé2j é2j1é2k é2j1él é2j1ép é2j1é2te 1é2ji. é2j1il é2j1im éj1i2n é2j1ip é2j1iz é2j1o2l éj1ó2r éj1öd éj1ön éj1ör éj1pl éj1pr éj1sp éj1sz éj1ud éj1u2r éju2t éj1uta é2j1úr é2jül é2j1űz ék1abl ék1a2cé éka2dat ék1a2dá ék1a2dó ék1ajt éka2kad é2k1aká é2k1akk é2k1akn éka2lag ék1a2lak é2k1alg é2k1alj ék1alko é2k1all é2k1alt ék1alu ék1amb ék1ang ék1app é2k1a2rá ék1arc ék1a2ré ék1arz é2k1asp é2k1ass ék1aszt ék1a2tom ék1a2ve ék1azo é2k1ál é2k1á2p ék1árad é2k1á2rak é2k1á2rá ék1árb é2k1á2ré ék1árh é2k1árk é2k1árn é2k1á2ro ék1árr é2k1á2ru ék1á2rú ék1ásó ék1ásv é2k1áta é2k1átá é2k1átc é2k1átd é2k1áte ék1áté é2k1átf é2k1áth é2k1áti é2k1átí é2k1átk é2k1átl é2k1átm é2k1átö é2k1átr é2k1áts ék1átt é2k1átu é2k1átv é2k1áz ék1bl ék1br ék1dr ék1egé é2k1e2kés é2k1elb é2k1e2leg ék1e2leme ék1e2lemé éke2lemm ék1e2lér é2k1elf é2k1elk é2kellá é2k1ellen é2k1elm é2k1elo ék1elp é2k1elta ék1eltá é2k1eltér ék1elül ék1elvi é2k1e2mel ék1eng éke1p2 é2k1erd é2k1e2rec é2kered é2k1e2rei é2k1e2rez é2k1erg é2k1e2ró é2k1e2rő é2k1e2sete ék1eszk éke1szl é2k1e2tet éke2tik éke2vés é2k1e2vo é2k1ex é2k1ég ék1éjs é2k1épí é2k1épü é2k1érc é2k1é2rem é2k1é2ren é2k1é2ré é2k1é2ri é2k1érk é2k1érl é2k1érm é2k1é2rő. é2k1é2rői é2k1é2rők é2k1érp é2k1érr é2k1érte é2k1érté é2k1értő é2k1é2rü é2k1érv é2k1érz 2ékés ékés3s ék1észl é2k1étk ék1étv é2k1é2ve. é2k1é2vek ék1é2vet é2k1é2véb é2k1é2vén é2k1é2vét é2k1é2vév é2k1évi ék1fj ék1fl ék1fr ék1g2r ékia2 éki2d é2k1ide ék1idé ék1ido é2k1idő éki2g ék1iga ék1ige é2k1igé ék1i2ko ék1ikr é2k1ill é2k1ima é2k1imá ék1imi ék1ind é2k1ing é2k1inh é2k1inn é2k1int é2k1inv é2k1i2o é2k1i2p é2kirán é2k1iro é2k1isk ék1ism é2k1ist éki2sza é2k1i2ta é2k1i2z ék1íj é2k1ír é2k1í2v é2k1í2z ék2kál ék1k2l ék1k2r ék1kv é1k2lu é2k1ob ék1of é2k1oká é2k1o2laj é2k1olda ék1oltás é2k1oml ék1opc ék1o2pe é2k1org é2k1orm é2k1orr é2k1orz é2k1osto é2k1ott é2k1ou é2k1ox é2k1óc ék1ó2l é2k1ón ék1ó2ra ék1ó2rá é2k1ó2v é2k1ó2z é2k1ö2b ékö2l é2k1öm ék1önt ék1ö2rö é2k1ös é2k1ötl ék1ö2vö ék1ö2zö ék1ő2r ék1ős ék1pl ék1pr ék1ps é1k2reá ék2rim ék1sh ék1sk ék1sl ék1sp ék1s2r ék1st ék1sz2 ék1t2r é2k1ud é2k1ug é2k1uj é2k1und é2kuni é2k1u2tac é2k1u2tak ék1u2tal é2k1u2tas é2k1utá é2k1új ék1úr. ék1úrn ékú2t é2k1úth é2k1úti é2k1útj é2k1útn é2k1úto é2k1útr é2k1útt é2kútv é2k1üd é2k1üg ék1ü2le é2k1ünn é2k1ür é2k1ü2s é2k1ü2t é2k1ü2v é2k1üz ék1űr. ék1űrb ék1ű2rö é2k1űz él1abl él1abr él1a2cé él1a2da él1a2do él1a2dó él1a2g é2l1a2j él1a2ka él1akc él1akn él1ako é2l1a2l él1amc él1a2me él1and él1apó él1arm él1asp él1ass él1asz él1a2to él1a2u é2l1a2va él1azo él1ábr é2l1á2g élá2l é2l1áll é2l1álmá é2lálmot é2l1álo é2l1á2p él1ár. él1á2rá él1árb él1árf él1á2ri él1árk é2l1árn él1á2ro él1árr él1á2ru él1á2rú él1árv él1át1a2 él1átc élát1e2 é2l1átf él1áth él1á2ti él1átj é2l1átm élá2tok él1átr él1áts él1átt él1átü él1átv él1bl él1br élc3sz él1d2r éle2b é2l1ebé é2l1e2dz él1eff él1e2gé élegész1 él1e2gy éle2k1a2 éle2k1á éle2k1e2l éle2kem éle2ker éle2k1es é2l1e2kés éle2kis éle2kol éle2k1on éle2kot éle2kó éle2k1ö2 éle2ku éle2k1ú él1e2l1a é2l1e2leg él1elf é2l1elo é2l1előe éle2lőj é2l1e2lők éle2lőt é2lemb é2l1e2mi é2l1emp éle2n é2l1ene é2l1eng é2lenj é2l1enn é2l1eny é2l1enz él1e2ró é2l1e2sés éle2szü éle2szű éle2t1a2 éle2t1á2 éle2t1eg éle2t1e2l éle2t1e2r éle2tesz éle2t1ék éle2tél éle2t1ér. éle2t1érd éle2t1é2rő. éle2térü éle2tés éle2téte éle2tété éle2t1étn éle2t1é2ve. éle2t1é2ved éle2t1é2vén éle2tik éle2tisz éle2t1o éle2tó életö2 éle2t1öl éle2t1ör éle2t1u2 éle2tüz éle2t1ű2z é2l1e2vő é2l1ex élé2d é2l1éde é2l1é2g él1é2hes él1ékek él1ékí é2l1é2l él1épü é2l1ér. é2l1érb é2l1érd él1é2rem é2l1é2ret é2l1é2ré é2l1érm é2l1érn é2l1érte é2l1érté é2l1é2rü é2l1érz élé2sa élés3s é2l1é2te é2l1étk é2l1év. é2l1é2v1á é2l1é2ves é2l1é2vet é2l1évez él1é2vén é2l1é2vér é2l1é2vi él1évü él1f2l él1f2r él1g2r é2l1i2d é2l1iga éli2gá é2l1i2ge é2l1igé é2l1i2ko él1ill éli2m él1ima él1imi él1imp é2l1ind é2l1inf é2l1ing él1int él1inv él1inz él1i2on é2l1i2p é2l1irá él1iro é2lism éli1s2p é2l1i2szá él1i2va é2l1i2vá él1izg é2l1izm é2l1i2zo él1íj él1í2r él1í2v él1íz él1k2l él1k2r él3lyu él2mat 1élmén é2l1ob é2l1okm é2l1oks é2l1ol é2l1o2r élos3s é2l1osz é2l1óc él1ó2n é2l1ó2r él1öb él1öc1 élö2k él1ö2l él1ön él1ör él1ös é2l1ö2z élőe2 él1őrü 1é2lősk él1p2l él1p2r élrádi2 élre1pr él1sk él1sp él1st él2sz1árnn él1szt éltal2p1al él1trá él1tré él1tri él1tró é2l1ud é2l1ug é2l1uj él1ult él1u2r é2l1u2tas él1utó é2l1új él1úr é2l1üg él1üll él1ült é2l1ür é2l1üs é2l1üt é2l1üv é2l1üz él1űz 1élvező é2ly1ab é2ly1a2d é2lyaj é2ly1a2l ély1a2n é2ly1ap ély1a2r é2ly1as ély1au é2ly1av ély1az é2ly1á2l élye2c é2lyef ély1egy é2lyekés é2ly1el é2lyeml é2lyene é2ly1ent é2lyer é2lyeti é2ly1é2j é2ly1ék é2lyél é2lyés ély1f2 é2ly1ira ély1k2 é2lyol é2ly1ó é2lyös é2ly1öz é2lyő ély1s élyú2 é2lyültet é2lyüt ém1abr éma1d2 ém1a2da ém1a2dó émae2 émai2k ém1ajt ém1akk ém1all ém1alm ém1app ém1arc ém1arm émas2 éma1sp émat2 éma1tr ém1aut ém1a2zo émá2c émá2l ém1álm ém1álo é2m1áp ém1árn é2m1áru émát1a é2m1átt ém1b2l ém1b2r ém1dr éme2c éme2g é2m1e2ke. é2m1e2kés ém1ela éme2led é2m1elh é2m1ell ém1e2lő ém1els é2m1elv ém1e2re ém1ern ém1e2rő éme2s1á é2m1esemé é2m1esz éme2ta éme2tel éme2t1ék éme2to é2m1e2v é2m1ex ém1éks é2m1é2l é2m1ép é2m1érc ém1érd é2m1éri é2m1érm é2m1érté é2m1és é2m1é2te ém1fl ém1fr ém1gr émi2al é2m1i2d émi2g é2m1igé ém1iks ém1ill ém1ind ém1inf é2m1inv é2m1i2o é2m1i2p ém1irá ém1irh é2m1iro ém1isk ém1ism émi2sz ém1i2ta ém1izo é2m1ír ém1í2v ém1íz ém1kl ém1kr émo2nac émo2ne émon1n émont2 ém1o2p ém1ost ém1ox ém1ó2l ém1ó2r ém1öb ém1ö2l ém1ön ém1ös ém1öt ém1öv ém1ő2r ém1p2l ém1p2r ém1sk ém1sl ém1sp ém1s2r ém1s2t ém1sz2 ém1t2r ém1uj ému2n ém1una é2m1u2r é2m1úr é2m1üg é2m1ür é2m1üt é2m1üv é2m1üz ém1wh én1abb é2n1abl é2na2dal én1adá én1a2do én1agá én1agr én1akc é2n1akn én1akt én1alk én1ana én1ano én1ant éna1pré én1arc énas2 éna1sp é2n1ass én1atm é2n1a2tom éna1t2r é2n1au é2n1ág éná2l én1ála én1álc én1áld é2n1áll é2n1á2p é2n1á2rak énás1s én1ásv én1áta én1átb én1áte én1átk én1átö é2n1átr én1átt én1átü é2n1átv énba2 én1bl én1br én1d2r é2n1ef én1e2gy 1é2ne2k1a2 1é2nekd é2neke. 1é2nekei 1é2nekek 1é2nekem éne2ker 1é2nekes éne2k1é2j 1é2nekf 1é2nekg éne2kiz 1é2nekí 1énekj 1énekka 1é2nekl éne2kó éne2k1ö 1é2neks én1ela én1elg én1elh én1elj én1ell én1eln én1e2lő én1elp én1els én1elt én1elv én1eml éne2n é2n1ene éne2r1a éne2r1á2 éne2reme én1eró é2n1e2sz éne2t1a2 éne2t1á2 éne2t1e2l éne2test éne2to é2n1e2v é2n1ex én1éjb én1ékb én1é2ké én1é2ki én1é2kű éné2l é2n1éle é2n1élő éné2m1a én1éneke é2n1ér. é2n1érc é2n1éré éné2ter 2énéz én1f2r énfüstö2 énfüs2t1öl én1g2r én1ido éni2g é2n1igé én1iko én1ill én1imi én1ina én1ind én1inf én1inh én1int é2n1i2p én1ism é2n1ita é2n1iva é2n1i2z én1íj én1ín é2n1ív én1k2l én1k2rá én1k2ré én1kri énmű1 én3nyo é2n1ol én1oml én1ond é2n1or é2n1osz én1ot é2n1ox én1óc é2n1ó2r én1ök én1öl én1ön én1ör én1öt 2énöv é2n1ö2z én1ő2s énpe2 én1pl én1pr én2sas én1s2p én1s2t2 én2sú én1tra én1trá én1t2ri én1tró é2n1u2t én1út é2n1ü2g é2n1üle é2n1ür é2n1üs é2n1ü2v é2n1ü2z é2ny1a2 é2ny1á2 énye2c é2ny1ece é2nyecse é2ny1e2dz é2nyef é2ny1egy é2nyekés é2nyela é2nyelá é2ny1ell é2ny1elo é2ny1elvá ény1elvű ény1elvv é2nyema ény1enc é2ny1ep é2nyerd ény1ered é2ny1e2rő é2ny1e2sett é2ny1e2sés é2ny1e2ső é2ny1essz é2ny1esté é2ny1e2sz é2nyeta é2nyeti é2nyetű é2ny1ev é2ny1ég é2ny1é2j ényé2k ény1éke ény1ékh ény1ékn ény1ékt é2ny1é2l é2ny1ér. é2ny1érd é2nyéré é2ny1é2ri é2ny1érn é2nyérte é2ny1érté é2ny1é2rü é2ny1érv é2ny1érz é2ny1és é2ny1é2te é2ny1étt é2nyéva é2ny1if ényi2g é2ny1igé é2ny1i2ko é2ny1ing é2ny1ira é2nyiro é2nyisk é2nyita é2nyiz ényí2r ény1írá ény1író é2ny1ok é2ny1o2l é2ny1o2r é2ny1os é2ny1ó2 ényö2 é2nyön ény1ör é2ny1ös ény1öz é2ny1ő2 ény1s ényt2 ény1tr é2nyu ény1u2r ény1us é2nyúj ény1út é2ny1ü2lő é2ny1üs é2ny1üv é2nyüz énza2 én2z1ad én2zag én2zak én2z1al én2zar én2zau én2z1ál én2z1ás én2z1át én2z1e2r én2z1im én2z1in én2zis én2zí énzo2 én2z1ol én2zor én2zos én2zör én2z1ő én2zsa én2zse én2zur én2zú énz1z é1o éo2la éo2pe éo2sz é1ó éó2ra éó2ri é1ö é1ő ép1ado é2p1a2j ép1alk épa2ny ép1apo épa1pr ép1arc ép1aré ép1ass ép1atl épau2s ép1aut ép1a2va é2p1á2g é2p1álla é2p1állo ép1áp ép1ár. ép1árb ép1árf ép1ári ép1á2ro ép1á2ru ép1á2rú ép1átb ép1átj ép1átl ép1átm ép1áts ép1átü ép1átv ép1bl ép1br ép1dr é2peb ép1e2gé ép1e2gy é2p1e2kés 2épel é2p1ela é2p1elá é2p1elb é2p1elc ép1e2lemb é2p1e2leme ép1e2lemr é2p1elér é2p1elf é2p1e2lin ép1eljá é2p1elk ép1ellá é2p1ellen é2p1elm é2p1elo é2p1e2lőke é2p1elr é2p1eltér ép1elu épe2n é2p1ene é2p1e2p é2p1er épe2rő é2p1esem é2p1e2ser é2p1e2sett é2p1e2sés é2p1e2ső é2p1este é2p1esté é2p1esti é2p1estj épe2sz é2p1esze é2p1eszk é2p1eta ép1e2tete épe2teté é2p1etű ép1eva é2p1ex é2p1ég é2p1é2k é2p1é2l é2p1é2neke é2p1ér. é2p1éri épé2sa é2p1éte ép1fl ép1gr é2p1i2d é2p1i2ko é2p1imp ép1ind ép1ing é2p1ins é2p1int ép1i2pai é2p1i2ra é2p1i2rá é2p1i2ro é2p1irt ép1isk é2p1ism é2p1ist é2p1i2ta é2p1iz ép1ín é2p1í2r 1építm é2p1ív épká2r ép1kl ép1kr ép1kv éple2t1ö ép1ob é2p1ok ép1old ép1olv ép1on ép1op ép1orm ép1ors ép1osz é2p1óc é2p1ó2h ép1ó2r ép1öl ép1öm ép1ön épö2r ép1ös ép1ö2z ép2p1ek ép2pí ép1p2l ép2p1od ép1p2r é1prog ép2rózá ép1sh ép1sk ép1s2n ép1sp ép1s2t épsz2 ép1t2r ép1udv ép1ug é2p1uj épu2n ép1uno é2p1u2r épu2s é2p1u2t ép1új ép1ús ép1út é2p1üd é2p1üg é2p1üld 1épüle é2p1ür ép1üs é2p1üv é2p1üz ér1abl ér1abs é2r1a2d ér1a2gá ér1agg ér1agy ér1a2ja ér1ajt é2r1a2ka é2r1akc é2r1a2la ér1alá ér1alg ér1alk ér1alm ér1alv ér1amb ér1amp ér1ane ér1ani ér1a2no ér1ant ér1a2pá ér1a2pó ér1app ér1apr ér1a2ra ér1a2rá ér1arc ér1asp ér1ass ér1a2ti ér1atk ér1atl ér1a2to éra1t2r ér1att ér1aty é2r1a2u ér1a2va é2r1a2x ér1a2zo é2r1ábr ér1ág. é2r1á2ga ér1ágb ér1ágg ér1ágy é2r1á2l ér1á2p ér1árá ér1árk ér1á2ro ér1árp ér1árr ér1á2ru ér1á2t1a2 ér1á2t1á2 ér1átc ér1á2t1e2 ér1áté ér1átf ér1áth ér1átj ér1átl ér1átm ér1á2tö ér1átr ér1átú ér1átü ér1átv é2r1áz 1érbán ér1bl ér1br ér2caj ér2c1a2l ér2c1a2n ér2c1as érc3c 1ércd ér2cedé ér2c1emb ér2c1esz ér2c3h ér2cil ér2c1im ér2ciz ér2c1o ér2có ér2c1ö ér2cő ér2c3seb ér2c3sis ér2cú ér2cz ér2d1am ér2d1á2 1érdekbő 1érdeke. 1érdekei 1érdekel 1érdekl 1érdekt 1érdekü 1érdekű 1érdemé ér2d1erő érd1este érdés3s ér2d1i2ná ér2d1iz ér1dra érdü2l ér2d1ülé ér2d1ülő ér2d3z ére2b ér1eba é2r1ebe é2r1ebé é2r1ebr ér1eff ére2g1a2 ére2g1á ére2ged ére2gel ére2g1em ére2gen ére2g1e2r ére2gev ére2g1él éreg1g ére2gin ére2go ére2g1ö2 é2r1e2gy éregyez1 é2r1ej é2r1e2kén. é2r1elá é2r1e2leg é2relemz ér1e2lég é2r1elis é2r1elk é2r1elo é2r1e2lőa ére2lőir é2r1e2lől é2r1e2lőme é2r1e2lőn ér1elr ér1eltá ére2m1a ére2má é2rember ére2m1eg é2r1emel ére2mes é2r1e2més ér1e2mis é2reml ére2m1o ére2m1ó é2re2mu ére2n é2r1ene é2r1e2r ére2ső é2r1eső. é2r1esőb é2r1esőj é2r1esőn éres1ő2r é2r1esőt é2r1esté ére2t1a ére2tá ére2t1eg ére2t1el ére2t1ér. ére2t1é2ve. ér1e2ve é2r1e2vé é2r1é2d é2r1é2g é2r1éj. é2r1é2jét é2r1é2k é2r1é2l é2r1é2neke é2r1ép é2r1é2ri éré2s1el éré2sza éré2szá éré2ter é2r1étk ér1é2ve. é2r1évn ér1évv érfiá2 ér1fl érfo2g1ón. érfo2g1ós érfoto1 ér1f2r ér1g2r éri2al éri2csi é2r1ido érié2n ér1ifj éri2g é2r1iga é2r1ige é2r1i2ko é2r1ill é2r1i2ma é2r1i2má é2r1i2mi é2r1i2na é2r1ind é2r1inf é2r1ing é2r1inj é2r1ins é2rint ér1inv é2rinz é2r1i2o é2r1i2pa ér1ira é2r1isk ér1ism é2r1ist é2r1i2sz é2r1i2ta é2r1iva é2r1ivá é2r1i2z ér1íg ér1íj é2r1ín é2r1ír é2r1í2v é2r1í2z ér2jan ér1k2l érkö2z1e2pé ér1k2r ér1k2v érle2t1öl 1érméé 1érméj 1érmék 1érmi. é2r1o2l ér1ont éro2p ér1ope é2r1o2r ér1ott ér1ovi é2r1o2x éró2l ér1ólo ér1óri é2r1ö2b é2r1ö2c ér1öko é2r1ö2l é2r1öm é2r1ön é2r1ör é2r1ös ér1öt ér1öv é2r1ö2z érő1f2 ér1pl ér1p2r 1érsek ér1s2k ér1sl ér1s2p ér1s2r ér1s2t érsz2 ér1szk ér2tat 1értekez ér2t1ela 1értelm 1értesí 1értékil 1értékm értés3s ért1ö2ve 1értőc 1értőg 1értőü ér1t2ran ér1trá ér1t2ren ér1t2ré 1ér1t2ro ér1tró ér1uga é2r1uj éru2m1e éru2n ér1una é2r1u2r éru2s1ér ér1u2sz ér1uta ér1utá ér1u2to é2r1u2z é2r1új ér1ú2r ér1ú2s érú2t é2r1ü2g érü2ké. é2r1ür é2r1üs é2r1üt é2r1ü2v é2r1üz é2r1ű2z érv1a2dó érv1ala ér2v1a2n ér2v1á2gy 1érvel ér2v1elem ér2v1égb ér2v1égh ér2vék ér2vél ér2vu 2érzá 1érzék. 1érzékb 1érzéké 1érzékh 1érzékk 1érzékn 1érzékr 1érzékt 1érzékü 1érzékű 1érzésil és1abl é2s1a2d és1agy és1ajt és1a2ka és1akl és1akn és1ako és1akt és1a2la és1alg és1alk és1all és1alt és1alv é2s1am és1ana és1ant és1a2ny és1apa és1apr és1ara és1a2rá és1arc és1aré és1arm és1arz és1asp és1ass é2s1a2u ésá2c é2s1ál és1árt ésá2s és1áta és1áth és1átl és1bl és1d2r ése2b é2s1ebé é2s1ef és1e2ge és1e2gy é2s1e2ke. é2s1e2kei é2s1e2kés é2s1eks é2s1ekv és1ela és1elá és1elb és1elk é2s1elm és1elo és1elr é2s1elvé és1elz és1ember é2s1e2mel é2s1eml ése2n é2s1ene é2s1eng é2s1eny é2s1e2p és1erő é2s1esz é2s1eto é2s1ev é2s1ex és1égb é2s1é2géb é2s1é2géé és1é2géh és1é2gén é2s1é2gév é2s1égh é2s1é2gi é2s1égn é2s1égv é2s1é2hen é2s1é2j é2s1é2k é2s1é2l é2s1ép é2s1ér. és1érb és1érc é2s1érd é2s1é2rem é2s1é2ren é2s1é2ré é2s1érh é2s1érl é2s1érn é2s1é2rő. é2s1é2rők é2s1é2rőv és1érr é2s1érte é2s1érté é2s1értő é2s1é2rü é2s1érv és1ész é2s1é2te és1é2ve. és1é2vet és1é2véb és1é2vét és1é2vév és1fl és1fr és1gr é2s1ic é2s1id é3sidet ésié2 ési2g és1iga és1ige é2s1ikt é2s1ill é2s1imi és1imp és1ind és1inf é2s1ing é2s1int és1inv é2s1i2p é2s1ira é2s1i2rá és1iro é2s1i2s é2s1i2ta é2s1i2vá é2s1í2r é2s1ív és2katu és1kl és1k2r és1kv é1slág é2s1ob és1oko és1okt é2s1o2l é2s1om é2s1op 2ésor és1org és1orn és1orv é2s1os é2s1ot és1o2v és1óc és1ó2l és1ón és1ó2r é2s1ö2l é2s1ön é2s1ös é2s1öt é2s1ö2v é2s1ö2z és1p2l és1p2r és2pri és1ps és1s2k és1s2p és1s2t éssz2 és3szab és3szag és3szak és3szap és3szá és4szel. és3szere és3széle és3szf és3szi és3szí és3szo és3szó és3szö és3sző és3szt és3szú és3szül és3szű ést2r és1tra és1trá és1tré é1stru és1ud és1u2r é2s1u2t é2s1ú2t é2s1üg é2s1ünn é2s1ür és1ü2té é2s1üz ész1abl é2sz1a2d ész1agy é2szaj északá2 észa2k1áz é2szakc észa2k1ü ész1ale ész1alg ész1all észa2n ész1ant ész1any észa2p ész1apo é2sz1a2r é2sz1as ész1a2to é2sz1au é2szaz 2észá é2száb é2sz1á2g észá2l ész1állá és3záp ész1áram é2szárá ész1árán ész1árf ész1árk é2sz1árn ész1á2ru é2szás é2sz1á2t ész1á2z é2sz1e2ge. é2sz1e2gei é2sz1e2gy é2sz1ej észe2k1a2 észe2ká ész1ekés észekö2 észe2köv é2sz1ela é2sz1e2leg ész1e2lemb ész1e2leme ész1e2lemé ész1e2lemm ész1e2lemn é2sz1elk ész1előd é2sz1előr é2szelőz ész1ember é2sz1emi é2s3zené é2sz1eng é2sz1ep ész1e2rez ész1e2rén ész1erkö é2szerő ész1e2sete ész1eszt észeta2 észe2t1ak észe2t1e2l észe2t1ér. észe2t1o észe2t1ör ész1e2ve é2sz1ex é2szég é2sz1ékt é2sz1é2l é2sz1é2p ész1éré é2széró é2szész é2sz1é2te é2sz1étk é2sz1i2d é2szif ész1i2ko é2sz1ikt é2sz1ill é2sz1im é2szina é2sz1ind é2sz1inf ész1ing é2sz1inté ész1io é2sz1i2p é2szira é2sziro é2szirt é2sz1i2s é2sz1ita é2sz1iz ész1í2j é2szír ész1í2vá ész1í2vé ész1í2vó ész1k2 ész1okt észo2l ész1old ész1olt é2szop ész1ors é2sz1os é2sz1ot é2s3zón 2észö és3zöld ész1ölt é2sz1ön é2sz1ös é2szöt ész1őrs ész1p2 ész3su ész3sű észtés1s ész2tors észtorz1 ész1tra ész1tri és3zul ész1ut ész1úrn é2sz1út é2sz1ü2g é2szünn é2szüt é2sz1ü2z é2szűz ész1z ét1abla ét1a2do ét1a2dó ét1adt ét1agg éta1gr étai2k é2t1ajk é2t1ajt ét1akc éta1kr ét1akt é2t1alj é2t1alk ét1als é2t1alt é2t1ani é2t1ann é2t1ant ét1anya ét1anyá é2t1aps é2t1arc é2t1arg ét1aszt état2 ét1atom étaü2 ét1azo ét1ábr é2t1á2g é2t1áll ét1á2rad ét1á2ram ét1á2rá é2t1á2ri é2t1á2rú ét1árv ét1áti é2t1átr é2t1átv ét1bl ét1dr étea2 é2tedén éte2g1a2 éte2gele éte2g1elv éte2ger éte2go é2t1e2ke. é2t1e2kei éte2la éte2l1á éte2l1e2l éte2lemü éte2l1er éte2l1ék éte2l1ér. éte2l1é2ren éte2léré é2telfog é2tellen éte2lo é2t1e2lől éte2l1ő2r é2t1e2mel étera2 éte2rad éte2r1ag éte2r1á2 éte2reg éte2rel étermo1 é2t1erő éte2sik é2t1estün é2t1esv é2t1eszm ét1e2vi été2g ét1ég. ét1ége ét1égé ét1égn ét1égt é2t1é2j é2t1é2l é2t1é2ren é2t1é2ré é2t1é2ri é2t1é2rőt é2t1érte é2t1érté é2t1é2rü é2t1érv é2t1érz ét1észl é2t1étb é2t1é2té é2t1étn é2t1étr é2t1é2ves ét1fl ét1fr ét1gr é2t1i2d éti2g é2t1ige é2t1igé é2t1i2ko é2t1i2m é2t1ind é2t1inf é2t1int éti2p é2t1ipa é2t1irá ét1iro étis3s éti2sz é2t1i2vá ét1izé é2t1í2r é2t1í2v ét1kl ét1kr 1étkű ét1kv étmeg1g ét1o2ká ét1o2ki ét1okm ét1o2l é2tola é2tolv ét1oml é2t1op ét1ord ét1org éto2ris ét1orm ét1ors é2t1óc ét1ó2ha ét1ón. ét1órá étö2k étö2l é2t1ömö é2t1ön étö2rül é2t1ös ét1ö2t ét1ö2v é2t1ö2z ét1őr. ét1őrb ét1őri ét1őrm ét1őrö ét1őrü é2t1ő2s é2t1ő2z étpen1 ét1pf ét1pl ét1pr é1t2rafá ét2réf étro2m1é2 ét1sl ét1sm ét1sp ét1st ét1t2r ét1udv é2t1ug é2t1uj étu2n ét1una ét1und é2t1u2r é2t1u2t ét1ú2s é2t1üg é2t1ür ét1üs é2t1üt é2t1ü2v é2t1ü2z étű2z é2t3ye é1u éu2ni éu2ta éu2tá éu2zs é1ú é1ü éü2gy éü2le éü2lé éü2lö éü2lő éü2rü éü2té éü2tö éü2tü éü2ze é1ű é2vad 1évad. év1adó 1évadr év1agy év1ajá é2v1a2la é2valá é2v1alk é2v1am é2v1a2n év1arc év1au év1ava é2v1a2z é2v1állo é2v1áta év1áth év1átk é2v1átr évá2z év1ázá 1évbeo é2v1e2g 1é2vei 1é2vekt év1ela 1évelf 1é2v1eli é2v1ell év1eln é2v1elo é2velő é2v1els é2v1elt é2v1elv é2v1eng 1é2venk 1é2vent év1e2ri é2v1e2rő 1é2vesb 1évesé év1e2sés 1évesf 1é2vesi 1é2vesk 1é2vesr év1esté év1eve év1é2ge év1é2gé év1égr év1égt év1ér. év1é2ré évé2ri. év1érr é2v1érte é2v1érté évé1ska évé1s2p évé1stá év1gr évi2g év1iga é2v1igé 1é2vih 1é2vik 1é2vim é2vin év1ind 1évine 1éviné év1ing év1int év1ism 1é2vitő 1é2viv é2v1ír 1évkös év1kr 1évny év1ok év1os év1ó2r év1ö2r év1ös év1öt 1é2vőd év1pr év1sk év1st év1sz évsza2k1as évtá2r1a2d 1évtő. év1ur év1új év1ú2t é2v1üg é2vük. é2vükb é2vüke é2vükh é2vüki é2vükn é2vükt é2vülj é2v1üt é2v1üz 1évzá éz1a2d éza2gal éza2ge éz1a2j éz1akr é2z1a2l éza2n éz1any éz1a2r éz1as é2z1a2t éz1az é2z1á2g é2z1á2l éz1ásv éz1áz éz1bl éz1d2r éze2c éz1ece é2z1e2dé éz1e2gé éz1e2gy é2z1ela é2z1eld é2z1e2le ézel1en é2z1elf é2z1elh é2z1ell éz1előb éz1előé éz1előg éz1elői éz1előj é2z1e2lőké éz1előn éz1előp éz1elős éz1előt éz1előv é2z1els é2z1elv é2z1emb éz2en. éze2n1á éz1enz é2z1e2p éze2r1a éze2r1á éze2r1in éze2rip éze2ro éz1erő éz1e2rű éz1esz éze2ta éze2t1á éze2t1eg éze2t1e2kéh éze2t1el é2z1e2v é2z1ex é2z1é2d é2z1ég é2z1ék é2z1é2l é2z1ér. é2z1érc é2z1é2ri é2z1érm é2z1érp é2z1érté é2z1érz éz1fr ézgé2 éz1g2r ézi2d éz1ido é2z1igé é2z1ill éz1imp éz1ind éz1ing é2z1int ézi2o éz1ion é2z1i2pa é2z1ipá é2z1i2r é3zire é3zirő ézis3s ézi2s1ú ézi2sza ézi2s3zá éz1i2ta é2z1i2vá éz1izm éz1izo é2z1izz éz1í2j éz1ír éz1í2v éz1íz ézkar2c3h éz1k2l éz1k2r éz1ola éz1old éz1op é2z1or éz1osz é2z1ox éz1öb éz1ö2k éz1ön éz1ör éz1ös éz1öt éz1ö2v ézőa2 éz1őr. éz1pl éz1p2r éz3saj éz3sar éz3seb éz3ser éz3sik éz3sín éz3sod ézsó2 é2z3sók ézs1ór éz3sö éz3spi ézs1s éz3sug ézs1ú2r é2z3sü éz3sz éz1t2r éz1ug éz1uj é2z1u2r éz1ut é2z1ü2g é2z1ür é2z1üs é2z1üt é2z1ü2z éz1űr éz3zsa 2f. 1fa faát1 fa1b2ro fa2chi fac3hi. fa2c3ho fa1d2r faegyez1 fae3lek fae2r faé2d fa1f2r fa1g2r fagyé2 fa2gyék fa2gyol fa2győ fa2gyúr fai2d fai2s fa2j1a2l fa2j1az fa2j1ág fa2j1á2ru fa2j1egys fa2jelem fa2j1elk fa2jelm fa2j1eln fa2j1elv fa2j1es fa2j1ö fa2jő fajt2 faj1tr faju2r faj1ura fa2jü fa1k2l fa1k2r fa1k2v fa2l1a2dá fa2l1a2dó fa2lajá fa2l1a2kó fa2l1a2l fala2n fal1any fa2lav fa2l1azú fa2l1ábr fa2l1ál fa2l1á2ro fa2l1áth fa2l1átv fal1e2gy fa2l1elem fa2l1elő fal1ese fa2l1éri fal1f2 fa2lid fa2l1inj fa2l1iz fa2l1í2 fa2l1ol fa2l1oml fa2lor fa2l1os fal1órá falö2 fa2lök fa2l1öv fa2l1őr fal1p2 fal2s1ín. falta2n fal2tem fal2tip fal2tüz fa2lü fa2n1e2vet fan1évb fan1évr 2f1a2nya. faó2r fa1p2l fa1p2r fa2r1a2dá fa2ragy fa2r1a2kó fa2r1a2l fa2r1at fa2r1a2v fa2r1ácc fa2r1ál fa2r1á2z fa2r1em fa2r1e2pe fa2r1id fa2r1iná fa2r1ing fa2r1izm fa2r1izo far2k1al far2kol far2mál far2min far2m1unká fa2r1okke fa2r1osz fa2r1ut fa1s2k fa1s2p fa1sta fa1sté fa2sz1ív. fa1tri fau2r fau2s fau2tá faü2t faü2z fa2xe faxi2 fa2x1ik fa2xin fa2xí fa2xö fa2xú fa2xü fa2xű fa1ya fa1ye 1fá f1ábr fá2c3h fá2gép fáj2lak fáj2lá fáj2l1e2 fáj2l1í2 fá2ní fánka2 fán2kar fán2ká fán2tad fán2t1a2g fán2tan fán2t1á2 fán2t1e2 fán2tis fán2tor fán2tö fá2po fá2ram f1á2rá fás3s fá2t1a2 fá2t1á fá2te fá2t1érd fá2t1i2s fátmű1 fá2t1ol fá2t1ü2 fázi2s1ág fázi2s3z fba2l1 fc2lu fd2ró 1fe fe2aa fe2aá fe2ab fe2ac fe2ad fe2ae fe2aé fe2af fe2ag fe2ah fe2ai fe2aj fe2am fe2an fe2a1p2 fe2ar fe2as fe2at fe2aú fe2av 2f1e2dz fe2ed fe2el fe1f2r fe2gy1i fe2győ fei2n1i fe2ja fe2j1á2 fe2j1egy fe2j1elm fe2j1e2r fe2j1esz fe2j1e2v fe2j1o fe2j1ös fej1tr fe2j1u fe2jú fek2t1emb fe2l1a2 fe2l1á2 fele2c fe2l1e2dz fe2l1e2g fe2l1e2h fe2l1elev fe2l1e2mel fe3lemen fe3lemet fe2l1e2més fe2l1eml fe2l1eng fe2l1enn fe2l1e2re fe2l1esd fe2lesed fel1eseg fe2l1e2sett fe2l1esés fe2l1esik fe2l1esk fe2l1esni fe2l1e2ső fe2l1essen fe2l1este fe2l1estü fe2l1e2sz fe2l1e2tes fe2l1e2tet fe2l1ettek fe2l1ettél fel1e2ve fel1e2vé fel1evi felé2d fe2l1éde fe2l1é2g fe2l1é2k fe2l1é2l fe2l1é2p fe2l1ér. fe2l1é2rek fe2l1éren fe2l1érh fe2l1éri fe2l1érj fe2l1érk fe2l1érn fe2l1érs fe2l1ért fe2l1érv fe2l1étet fe2l1i2 fe3lib fe2l1í2 fel3l fe2l1o2 fe2l1ó2 fe2l1ö2 fe2l1őg fe2l1őr fel1p2 felt2 fe2l1u2 fe2lú 2f1e2ner fen2n1a2 fen2ná fenne2 fen2nev fen1sc fer1abl fe2rak fe2r1áll fe2r1á2r fere2g fer1egy fe2r1old fe2r1olj fe2r1oln fe2r1olt fe2sem fe2s1er 2f1e2sé feu2m1é2 fe2vő fe2z1ér. fe2zó fe2zs 1fé féka2 fé2k1ad fé2k1ag fé2k1al fé2kas fé2k1au fé2k1á2 fé2k1e2g fék1ell fé2k1er fé2k1ék fé2k1é2l fé2k1ér. fé2k1o2l fé2k1or fé2kön fé2k1u2 fé2k1ú fé2l1a2 fé2l1á2j fé2l1á2r fé2leg fé2l1ekk fél1elé fé2l1ell fé2l1elő féle2m fél1emb fé2l1eme fé2l1e2r fé2l1ese fé2l1esz 2f1é2let fé2l1ez fé2l1éva féligaz1 fé2lin fé2lir fé2l1is fé2liv fé2lí fé2l1ok fé2los fé2ló fé2l1ö fé2lőr félpen1 fél1t2r fé2l1ú2 fé2mab fé2mad fé2m1a2g fé2m1a2j fé2m1a2n fé2m1ap fé2mau fé2maz fé2m1ác fé2m1ál fé2m1ec fé2medé fé2me2két. fé2m1e2l fé2m1emb fé2mer fé2mez fé2m1é2k fémé2r fé2m1éré fé2m1i2n fé2m1ir fé2m1is fé2mit fé2m1iz fé2mí fé2m1o fé2mó fé2mö fé2m1u fémü2 fé2m1ül fé2ny1e2g fé2ny1e2l fé2ny1e2r fé2ny1is fé2ny1í fé2nyo fé2nyö fé2nyú fé2pí fé2pü 2féraá 2féraf 2férai 2féral 2férar 2férád 2féráé 2férám fér2cem fére2g1e2 fé2s1orr fész1al fészá2 fész1ár fé2szeg fé2sz1el féta3u2 2f1évk fé2zs fézs1e2 fézs1o ffe3li ffi2ac ffi2ag ffi2aka ffi2am ffi2at ffli2 ff1sh 1f2fy fg2ló 1fi fi2aa fi2aá fi2ae fi2aé fi2af fi2ah fi2aí fia2la fi2ao fi2aó fi2aö fia1p fi2apa fia2ra fia2rá fi2aré fi2aszá fi2aszo fi2au fi2aü fi2avá fi2ave fiá2l fi2c3h fici2t1á fi2dan fi2d1á fi1drá fie2l fie2n fie2r fie2s fies1e fie2t fi1fl fi1fr 2f1i2gaz fi1k2l fi1krá fi1kré fi1kri fi1k2v fi2lac fil1ada fil1akn fil1akt fi2lal fi2lam fi2l1ál fi2lár fil1elt fi2l1en fi2les fil1esz fil1ért fi2l1i2d fi2l1i2m fi2l1in fil2mad fil2mak fil2man fil2m1as fil2mat fil2m1á2 fil2mos fil2mu fi2lö fi2lü 2f1i2má fimeg1 2f1i2nas 2find fin1osz fi2n1ó fint2 fin1tr fi2n1u2 fi2nú 2finx fio2v fi3ók fió2k1a2l fió2kar fió2k1e2 fió2kép fió2kol fió2kö fió2r fiő2r fi1p2l fi1p2r fi2rod fir2s1 fis1arc fi1s2p fist2 fi1str fi2t1ad fit1a2la fit1alj fi2tág fit1árak fitá2t fi2t1áta fi2t1éh fi2t1érd fi2tik fi2t1in fi2tir fi2t1i2z fito1p2 fi2t1osz fi2tön fi2t1őr fi2t1ur fiu2min fiu2t fi2úa fi2úá fi2úe fi2úf fi2úg fi2úí fi2úl fi2úo fi2úö fi2úő fi2úp fi2úsz fi2úti fi2úu fi2úú fi2úü fi2x1ár fi2x1el fi2xö 1fí fí2rá fírcsa2 fí2r1in f1í2ró fír1tr fí2rü fjú1sz fki2s1 fk2li fk2lu fk2ró f2lak f2lan f2lep f2lip fli2s1é flo2n1á flo2né f2lot f2luk 1fo fo2am fo2g1á2c fo2gál fo2g1árk fo2g1áro fo2g1e fog3g fo2gí fo2g1or fo2g1os fo2gö fo2gur fo2gü fohá2szat fo2kal fok1áll fo2k1árr fo2k1e2 fok1ing fo2kí fok1k2 fo2kola fo2k1or folta2n fol2t1e fol2t1ö fo2n1ada fo2nado fo2nak fon1alap fona2l1e2 fon1alja fon1aljo fona2n fon1any fo2n1asz fo2n1au fo2n1á2r fonás1s fo2n1át fond2 fon1dr fo2neg fo2n1el1 fo2ner fo2n1es fo2nék fon1f2 fon1i2ko fo2n1i2m fo2nin fo2n1is fo2niz fo2ní fon1k fo2n1or fo2n1osz fo2nö fo2nő2 fons2 fon1st fon2t1i2n fontó2 fon2tón fo2nü fonya1 fo2r1ad forakész1 fo2r1ala fo2r1a2n for1ato fo2reg fo2r1el fo2r1er forgás1s fo2r1il fo2r1i2o for2m1e2l for2m1em for2merő for2mes for2m1érté for2mil for2m1in fo2r1ol fo2rö 2f1orrú fors2 for1sp for2t1ál for2t1e2l for2t1érd for2tü fo2rü foto1s fo2vi 1fó fó2rá fósza2 1fö fö2la fö2lá föl2dök fö2l1e2 fö3le. 2f1ö2lésbel fö2liv fö2lí föl1k2 fö2lo fö2ló fö2lön fölt2 föl1tr fö2lu fö2lú fön2n1 fönne2 fö2sá 1fő főa2n főá2g fő1bl fő1br fő1dra főe2l főe2r főe2s főé2h főé2te fő1fl fő1f2r fő1gl fő1gn fő1gr fői2d főigaz1 fői2ta főí2t fő1kl fő1kv fő2n1ag fő2n1apj fő1pl fő1pr fő2r1aj fő2rem főre2s fő2r1ék főri2 fő2r1is fő2rül főr1ülé fő1sl 2fősö fő1sta fő1str fősz2 fő1szl fő1szp fő1szt fő1t2r főü2l főzőé2 fp2la fp2ro fra1s frá2ma frá2má frá2m1e2 frá2nye f2rás f2resk fré2ná fré2nén 1f2ric f3rich f2rig f3rip 1f2ris fron2t1a2 fron2t1e2 f2röc f2rus fs2ho fs2po fs2tí fst2r ft1aj fta1kr ft1alj ft1bl f2t1ef fte2m f2t1eme f2t1ér. fti2g f2t1ige f2t1ing ft1ös ft1út f2t1üg ft1üt f2t1ü2z 1fu fuga1 fura2t1e fu2s1as fu2seg fu2sis fu2sz1á2 fu2sz1ol fu2szü futókész1 futó1s2p 1fú fúj2tal 2f1ú2ré 2f1úrr fú2zs 1fü 2f1ü2gy fü2la fü2lá füle2c fü2l1eml fü2l1e2p fü2l1e2v fü2l1é2j fü2l1é2k fü2lí fül3l fü2lo 2fülő fü2lőt fül3t2 fü2ma fü2má fü2m1e fü2mo fü2mő fü2mú 2f1ünn für2t1ő füstü2 füs2t1ülé 2f1ü2té 2f1ü2tő 2f1üzl 1fű fű1dr fű1fr fű1pr fű1sr fűsze2r1el fű1t2r fű2zá fű2zis fű2zo fű2z1ölt fvárosé2 1fy 2g. 1ga 2g1abc 2gabr 2g1abs ga1by 2g1a2dag g1adap 2g1a2data 2g1a2datb gadás1s 2g1adm ga2dog 2gadomá gadói2ko 2gadósat 2g1a2du. 2g1a2duk gae2r 2g1aff ga1fl ga2ga. 2g1agg ga1g2rá g1agy. ga2gyu g1a2gyú 2g1aján 2g1ajk 2g1ajt 2g1a2kad ga2kác 2g1akc g2a3ké 2gakév ga1kl 2gaknai g1aktu g1akv gala2g1ú ga2lat 2galáf 2galáí ga2láv 2g1alb 2g1alc gale2g1e2 2g1alk galo2m1e 3galop g1a2los 2g1a2lud ga2lul ga2lusz 2galvó ga2m1a2gá 2g1amc 2g1amp ga2nab 2g1a2nal 2gancs gan2csal gancs1ág gan2cse gan1d2 3g2ané gan2ga g1a2nim ga2nyag ga2ny1at ganye2l ga2nyér g1a2nyó ga2nyö gaó2r ga2pa. ga2paá ga2pac ga2pas ga2pán ga2pát ga1p2l ga2pok ga2pó. ga2pób ga2pók ga2pón ga2póv 2g1app ga1p2ré ga1pro gara2t1í 2g1a2rák 2g1a2rány ga2rén gar1k2 ga2rő ga2seg ga2s1is ga2s1ín ga1s2pi ga1spr gas3sze gas3szí gast2 ga1s2ta ga1sto ga1str gasz1agg ga2sz1an ga2szág ga2szás ga2sz1es gasz2tár ga2t1a2d gat1ará ga2tav ga2t1ál ga2t1á2ram ga2t1eg ga2tep gaté2s ga1thi ga2tim gat1old ga2tomi g1a2uk ga2ul ga2us ga2van ga2var ga2vat 2g1a2vu gaza2n gaz1any gaza2te ga2zál 3g2azd 3g2aze ga2zer 2gazg 2gazítá gazmus1s 2gazod 2gazon ga2zü 1gá g2ába 2g1á2bé g2ábó 2g1ábr 3g2áci gács1a2va gá2cse gá2cs1il gá2csü gáda2 gá2d1al gá2dá gá2d1él gá2d1ia gá2dis gá2dő gá2d1ü gá2fo 2g1ág. gá2gak gá2gat gá2gaz 2g1ágg 2g1á2gi 2g1á2gú 2g1á2gy gágy1asz 2g1á2hí g2ája g2ájá gá2j1e2 gá2jü gála1p 2g1álc 2g1áldo gá2l1es g2áli 3gális 2g1áll. 2g1állí 2g1állu 2g1álmo 3g2ály g2ám. gá2mal gá2m1e2 2g1á2mí gá2mü gána2 gá2nac gá2nal gá2nap gá2n1at gá2nás gán2cse gán2csi gán2cs1ö2 gán1d2 gá2n1e 2gángy. gá2nig gá2n1io gá2nis 2g1á2niz gá2nol gá2n1ó2 gán1sz2 gánt2 gán1tr gá2n1ú gá2nü gá2ny1a2n gá2nyar gá2ny1as gá2ny1e2 gá2nyérd gá2nyérz gá2nyij gányká2 gá2nyö gá2po gá2rad gá2r1ag gá2r1aj 2g1á2ram gá2r1a2n gá2rar gá2ras gá2ra2t gár1ato gár1att gá2r1av 2g1á2raz gá2rág gá2r1ál gá2r1á2z gá2re2 gár1em gár1es gár1et gár1éte gá2rif gá2r1i2p gá2r1isk gá2r1ism gá2r1iz gá2rí 2g1árnyé gá2r1ol gá2rop gár1ost gá2r1osz gáró2 gá2r1ór gá2rö gá2rő gár1s2 gár1tr 2gáru. 2g1árud gá2rug 2g1á2ruh 2g1á2rulá 2g1á2ruló 2g1árur 2gárus gár1uta gár1utu gá2rúr gá2rút gá2rü gá2rű g2ás. gá2s1a2d gá2sal 2gásatá gá2s1á2g gá2s1árad gá2s1árn 2g1á2sás gá2s1á2to gá2s1e2 gá2s1im gá2sis gá2sí gá2sor gá2só gás1ó2r gá2sö gá2ső gás3szé gás3szü gást2 gás1tr gá2sut gá2s1ü2 gá2sű gá2szal gá2szas gá2szatl gá2s3zav gá2sz1ál gá2sz1e2 gá2szis gá2szit gá2szí 2g1ászká gászkész1 gá2sz1okta gá2sz1ól gá2s3zón gá2szöv gá2szü g2át. 2gátad gá2taj 2gá2tal gát1a2la gát1alj gátá2 gá2tál gá2t1ár gá2tát 2g1átbo gá2t1eg gá2t1e2l gá2t1e2m gá2ten gá2tél gáté2r gá2t1ér. gá2t1ére 2gátfe 2g1átg 2g1átha gá2til gá2tis gá2tiz 2g1á2tí g1átmé gá2t1olda gátó2 gá2tór 2g1á2t1ö gá2tő 2g1áttű 2gá2tü2 g1átvi g2áva g1á2vó gá2z1a2d gáz1akn gáz1akt gá2z1a2l gá2zar gá2z1a2t gá2z1av gá2z1ár. gá2z1árá gáz1áre gá2z1árh gá2z1árk gá2z1árn gá2z1á2ro gá2z1árr gá2z1árt gá2záru 2g1á2zásos gá2z1e2 gázi2g gá2z1iga gá2zim gá2z1i2p gá2z1i2s gá2z1iz gá2zí gá2zö gá2ző gáz3sp gáz3sta gáz3ste gáz3sug gá2zsú gáz3sü gáz3sz gá2zü gbeá2 gbé2lá gbé2rem gb2la gb2le gb2lo gb2lú gb2ra gb2ri gb2ro gb2ru gcsapá2 gcsa2p1ág gda2u gd1ell gde1p2 g2d1é2k g2d1ér. gd1ina. gd1ináb gd1ináh gd1inár gd1inát gd1ináv g1d2rá gd2re gd2ro gd1t2r g2d3zö 1ge gea2c gea2g gea2l geá2r g2ebe g1e2cet 3g2eci g1eddz 2gedénn 2gedény ge2dze ge2dzé ge2dzi ge2dző 2g1eff 2gege 2g1e2gé 3gegom ge2gye ge2gyé ge2gyo 2g1e2gyü ge2hes ge2het 2g1e2hü 2g1ejt 2g1e2ke. 2g1e2kei 2g1e2kek 2g1e2kéé ge2kéj ge2kék 2g1e2kés. ge1k2li 2g1eks 3g2el. g1elad ge2lag 3g2elap ge2las ge2lál ge2l1ár 2g1elcs 3geld. 2g1eldo 2g1eldö ge2lef ge2legi g1elegy 3g2elek. 2ge2lemé ge2lemi 2ge2lemk 2g1e2lemm 2g1e2lemz gele2n 3gelend ge2l1eng ge2l1eny gel1este ge2lev ge2lég 3g2elésb 3g2elések 3g2elésen 3g2elésén 3g2elésér 3g2elésh 3g2elési. 3g2elésk 3g2elésrő 3g2eléss 3g2eléstő 3g2elésü 2g1elész 3gelész. 3gelésző 3gelészü 3gelészv 2g1elhel 3g2elhes 3g2elhet 3g2eli. 3g2elik gel1int 3g2elj. 3g2elje 3g2eljé 3g2eljü 2g1elkü 2gellenő 2g1elmé 2g1elnev 3g2elnén 3g2elni 2g1e2los ge2lö 3g2elő. ge2lőbbr 3g2előbe 3gelőbé 3gelőbi 3gelőbo 3g2előbő 3g2előc 3g2előe 3g2előé 3g2előg 3g2előh 3gelőja 3g2előjé 3g2előjo 3g2előjü 3g2előjű 3g2elők. 3g2előka 3g2előkb ge2lőkel 3g2előker 3g2előket 3g2előkez 3gelőké. 3g2előkén 2g1előkés 3g2előkh 3g2előki 3g2előkk 3gelőkl 3g2előkn 3g2előkö 3gelőkő 3g2előkr 3gelőkt 3gelőku 3gelőkü 2g1e2lől 2g1előm 3g2előn. 3gelőna 3g2előne 3g2előné 3g2előnk 3gelőnö 3gelőnyi 3g2előo 3gelőö 3g2előő 3g2előp g2előre. 3g2előrés 3gelőro 3g2előrő 3g2elős. 3gelősá 3gelőso 3gelősö 3g2elősza 3gelősze 3gelőszé 3gelőszi 3gelőszó ge2lőszö 3g2előt. 3g2előtá 2g1előté 3g2előtő 3gelőtü 3gelőü 3g2elővá 3g2előve 3g2elővé 3gelővis 3gelőviz 2g1e2lőz g1első 3g2elsz. 2g1elszá 2g1elszo 3g2elt. 3gelte. 3g2eltek 3g2eltem 3geltes 2g1eltett. 2g1eltettn 3geltéb 3g2elték 3geltél 2g1eltér 3geltét 2g1elto 2g1eltű ge2lül 3g2elün 2g1elv. 2g1elvb 2g1elven 2g1elvét 2g1elvh 2g1elvn 2g1elvo 2g1elvr 2g1elvű 2g1elvv ge2ly1e2g ge2lyid ge2man 2g1ember 2g1embl g1e2mel 2gemelé 2gemelk ge3mell 2gemelő 2g1e2més 2g1eml ge2moc 2g1emp gena2 ge2n1ad ge2nar ge2n1as ge2nau ge2n1ál ge2nár ge2nát g2end ge2n1eg 3generá ge2nere 2generg ge2n1esz ge2n1e2vet ge2n1e2vez gené2k ge2n1éké ge2n1ékn ge2n1ékt geni2d1 ge2n1in ge2n1is gen1k2 g1enni g1ennü gen3nya ge2nop ge2n1or ge2n1os gen2sért gens3s gent2 gen1tr ge2n1ur g2enye 2g1enyh g1enyv 2g1enz ge2ob ge2oc ge2of ge2ok ge2om ge2orgia ge2ot geó2r ge2ped ge2per ge2pés 2gepi ge2pos ge2rab ge2r1ad ge2r1aj ge2ral ge2r1a2n ge2r1a2p ge2r1as ge2rau ge2ráb ge2r1á2g ger1áll gerá2r ge2r1ára ge2rát g1erde 3g2ereb 2geredm ge2reg g1erege ger1egy 2g1e2rej ge2r1e2lők ge2r1eml ge2r1eny ge2r1er ge2resz ge2r1e2v ge2réj ge2r1ék ge2rél ger1éle ger1é2lé ge2r1ép ge2r1étt ge2r1i2na ge2r1ing ge2r1i2p ger2is ge2r1iz ge2rog ge2ror ger1osz ge2rot ge2ró ge2rök ge2r1ön ge2rő g1erő. g1erők g1erőv ger1őz geru2 ge2rur ge2r1ü2g ger1üld ge2r1ü2lé g2es. ge2s1á ge1sc gesd2 g2eseb 3g2esei ge2s1e2l ge2s1emb g2esen. ge2send 2g1e2s1er 2g1e2setb 2g1e2setet 2g1e2seté ge2setl 2g1e2setr 2g1e2sett 2g1esél 2g1e2sés g1e2sik 2geskü gesleg1 g1esni 2g1e2ső g2esr gess2 3g2essé. 3g2esség g2est. 2g1este 2g1esté 2g1esti 2g1estj g1esvé 2g1e2szek ge2szes ge2szet g1eszl 2g1eszm ge2t1ak ge2tal ge2t1a2ny get1ap ge2t1as get1e2gy 2g1e2tetőn ge2t1é2k geté2l get1éle ge2t1ér. ge2t1é2rü ge2t1é2ve. getó2 ge2t1ór getőkész1 get1őrt ge1t2ró get2t1ebbé ge2tut ge2t1ü2z ge2ur geu2s ge2vic 2gevo ge2vol 2g1e2vő ge1yé ge2zo gezőa2 2g1ezr 1gé gé2ber 2g1ébr géc3c gé2d1a2 gé2d1á2 gé2d1e2l gé2d1e2r gé2d1esz gé2dik gé2din gé2dir gé2dí gé2d1o gé2dö gé2d1ő2 gé2d1u2 gé2d1ú2 gédü2 gé2d1ülé gé2dű gé2d3z gé2gi gé2gő gé2gü 2g1é2he. 2g1é2hek 2g1é2hen 2g1é2hes 2g1é2het 2g1éhh 2g1éhs 2g1éj. gé2jért 2g1éjh 2g1éjj 2g1éjs gé2kei g1é2kel g1é2kes gékes1s g1é2kez 2g1éks gé2lál gé2lel 2géles 2g1é2let 2g1é2lez gé2lén 2g1élm gélvvá2 gé2lya gé2lyá gé2lyeg gé2lyo gé2lyú gé2m1a2 gé2m1á g2émb gé2m1eg gé2mel gé2mer gé2mér gé2m1o géna2 gé2nab gé2n1ad gé2nag gé2n1al gé2n1an gé2n1ar gé2n1at géná2 gé2n1ár gé2nát 3g2énd gé2neg 2génekes 2génekl gé2n1e2l gé2n1e2r gé2n1e2t gé2n1é2g gé2n1in gé2ní g2énn gé2nó gé2n1ö gént2 gé2nú génü2 g2ény gé2ny1e2g gé2nyid gé2nyis gé2nyír gé2nyo gé2nyö gé2nyú 3gép. gé2p1a2 gé2p1á2 gé2p1e2g 3gépel gé2p1ell gé2p1esé gé2p1esz gé2pik gé2pí 2g1épít gé2p1o2 gé2pó gé2pö gé2pő 3g2épp géptá2v gé2p1u gé2pú gé2pülé géra2 gé2rag gé2rak gé2ral gé2r1an gé2rap gé2rar gé2ras gé2rá 2g1érc. 2g1érd gé2r1el gér1eml 2géret 2géré. gé2rie 2g1é2rin gé2ris gérká2 2gérl 2gérm gé2ro gé2rö 2gérő. 2gérők 2gérte 2gérté 2gérth g1érti g1értj g1értl g1értő. g1értőe g1értők g1értőv g1érts g1értv gé2r1u2 gé2r1ú 2g1érv. 2gérvé 2g1érz 3gérzá gé2sar gé2seg gé2s1e2l gé2s1é2g gé2sim gé2s1o gé2só gés3sza gé2sza gés3zav gé2szá 3gészítőü gé2sz1o gé2szó 2g1é2tel gé2ter gé2tet 2g1étk 2g1é2to 2g1étr 2g1étt 2g1év. 2g1évb 2g1é2ve. 2g1é2ved 2gévei 2g1é2vek 2g1é2ven 2g1é2vet gé2véb 2g1é2vén 2g1é2vét 2g1é2vév 2g1évf 2g1é2vi 2g1évj 2g1évk 2g1évn 2g1évr 2g1évs 2g1évt 2g1évv gé2zan gé2zőr géz3s2 gfala2d gfa2l1ada gfa2le gfi2úké gf2la gf2lo gf2ló gf2lu gfö2l1üle g1f2ra gf2rá g1f2re gf2rí g1f2ro g1f2rö gf2ru g2g1a2p gg1arc gga2s g2g1aszá g2g1aszó gge2lest ggés3s gg1i2ta g2g1iz gg1orv ggó2n g2g1óni ggős2 g1g2raf g1g2ran g2gre gg2ro gg1sp g2g1ü2g g2gy g3gyak g3gyalá g3gyap g3gyara ggy1aro g3gyat g3gyár g3gyáv ggy1á2z ggy1e2lő g3gyeng g3gyep g3gyer g3gyérü g3gyil ggy1ol g3gyom g3gyor g3gyó g3gyö g3győ g3gyu g4gyút ggy1ült g3gyür g3gyű gha2d1e2 ghajói2ko g2ham. g2hamb g2hame g2hamh g2hamm g2hamn g2hamr g2hamt gha2sábr g2hia 1ghy 1gi gi2aa gi2aá gia1b2 gi2aba gi2abá gi2abi gi2abo gi2ac gi2a1d2 gi2ae gi2aé gia1f gi2afr gi2a1g2 gi2ah gi2aim gi2aí gi2aj gi2akar gi2akas gi2ala gi2alá gi2alé gi2am gi2anó gi2any gi2ao gi2aó gi2aö gi2aő gi2a1p2 gi2ar gia1sz2 gi2asza gi2aszá gi2aszem gi2aszé gi2aszf gi2aszi gi2aszo gi2aszó gi2at gia1t2r gi2au2 gi2aú gi2aü gi2aű gi2av gi2az 2gibr 2g1i2dea 2g1i2deá 2g1i2deg gi2dei 2gidej 2g1i2deo 2g1i2dé gi2dió 2g1i2do 2g1i2dő gi1fl gig1ad gig1ara gig1ass gig1au 2gigaz gig1ál 2g1i2ge. gig1e2c gig1eg gig1eh gig1eng gig1enn gige2r gig1ere gig1e2s gig1et gig1e2v gi2gé gig1éh gig1é2l gig1ém gig1é2ne gig1é2r 2g1igéz gig3g gi2g1i2 gi2gí gi2g1o2 gi2g1ó2 gi2g1ö gi2g1u gi2gú gi2g1ü gi2gű g1i2gy 2g1i2ha 2g1ihl 2gijes gi2ker gi2kes 3gile g1ill gi2ma. gi2man gi2máb 2gimád gi2már 2g1i2máz gi2me. 2g1imp gina1p2 gi2nas gi2n1á2z 2g1ind 3giné 2ginf 2g1inkv g1inná g1inni g1inno g1innu 2g1inp 2gins 2g1inta 3gintc 2g1inte 2g1inté g1inth g1inti g1intj g1intő. g1ints g1intu g1intv 2g1inv 2g1inz gi2one 2g1ioné gi2ono gi2ot gi2óa gi2óá gi2óc gi2óe gi2óf gi2óg gi2óká gi2ókom gi2ól gi2ó1p gi2órá gi2ó1sp gi2óta gi2ótá gi2óú gi2óü gi2óz 2g1i2pa 3g2ips gip2sza gip2szá gip2szo gi2ram 2g1i2rat 2g1i2rá gi2rig 2giro gi2rod 2g1i2rón 2g1irt g1isc 2g1i2si 2g1isk 2g1isl 2g1ism 2g1isp 2g1istál 2g1iste 2g1i2szá 2g1i2szo gi2szu gi2tas g2itá 2gitác 3g2iti 3gitte g1ittu 2g1i2vad 2g1i2vás g1i2vo 2g1i2vó 2g1i2zé. gi2zév 2g1i2zo 1gí gí2gé gí2ja gí2já gí2m1a2 gí2má gí2né gí2ny gí2ra gí2rá gí2re gí2ri gí2ro gí2ró g1í2tész gí2vá gí2ve gí2vé gí2vo gí2vó gí2vü gí2ze gí2zü gí2zű gka2ró2r gké2p1e2l gkia3dóná gkiá2 gkis1s gk2la gk2li gk2lí gk2lo gk2ló gk2lu gkö2zén gkö2z1ér gkővá2 gk2ra gk2rá gk2re gk2ré gk2ri gk2rí gk2ro gk2ró gk2va gk2vó gla1p2l gla1s2t gla3t glá2sza gle2g1a2 glege2l gle2g1elé gleí2 gle2t1a2 gle2tá gle2t1el gle2t1é2rőt gle2t1étn gle2tos gleü2 glé2nyel g2lor 1g2los glóó2 glós2 glőre2 glő2reg glő2rel glő2ro gme2g1a2 gme2g1e gme2g1é gmens1s gmen2sz gmus3s gna2d gn1ada g2n1a2j g2n1alk gna2pe g2n1a2r 1g2náb 1g2náh 1g2nái g2nán. g2náná g2nára gná2s3z g2nát. g2nátó 1g2náv gn1br gne2i g2n1e2l gne2m1e2l gne2sir gnes3s gne2szá gneto1 gné2l g2n1éle gnév1a gné2v1á gni2g g2n1iga g2n1ing g2n1i2p g2n1i2r g2n1is gnit1a2 gni2tel g2n1okt g2nol gn1olt 1g2nora 1g2nore 1g2noré gn1ök gn1ös gn1pr gn1s2k gn1st gn1t2r g2núj gn1üg gn1üz 1go go2áz go2be 2g1obj 2g1o2dú go2et g1o2ka. gok1a2d g1o2kai 2g1o2k1a2l 2g1o2ká goki2 gok1ir goklá2 2g1okm g1o2kok 2g1o2kos g1o2kot 2g1o2koz 2g1okta 2g1o2laj go2l1a2l 2g1olda 2g1oldá 2g1oldó gol2f1a gol2f1e gol2fin go2lim go2l1ó2rá 2goltalo 2g1oltár 2g1oltás 2g1oltó. 2g1oltv 2golvad 2golvas go2m1as 3g2omb gom2b1árn gom2b1árt gom2b1e2 3g2ome 2g1oml go2n1a2to go2n1áll gonc3c gon2d1á2 gon2d1ér. gondi2 gon2dik gon2doks gon2d1or gon2dó go2n1e2 gon2g1a gon2gál g2ono go2nol 2g1onto go2nü go2nye go2od go2pá 2g1o2pe gor1ass gorasz2 gora1t2 gor1áll 2g1orc go2r1el 2gorie 2g1orm go2roz go2rö 2gorz go2se go2sö 2gosto 2g1ostr g1osty go2sü go2s3za go2s3zá go2szó go2ua go2ub go2ud go2ur go2ut go2vác 2g1o2ve go2xi go1ya go1yá 1gó góa2d góá2g góá2r gó1bl gó2c3h gó2c1ol gócsapá2 gócsa2p1ág gó2cü 2g1ó2dán gó2div gó1dru gó1f2r góí2v gó1kl gó1kré gó2lar góle2l gól1elő gó2l1é2h gó2lí gó2lü 2g1ó2nu góó2r gó1p2l gó1p2r g1ó2rad g1ó2ras gó2ráka gó2rár 3g2óro 3g2ósa gó2s1aj gó1s2ká gó1s2p gó1s2rá gós3s gó1s2ta gó1stá gó1str gó1sz2 gó2s3zám gó2s3záras gó2s3zárá gós3zárú gó2tau gó2t1is gó1tré gó1tri 3g2óval 2góvod 2g1ó2vó gó2vu 3g2ózá 3g2ózi 3g2ózo 3g2ózu 1gö 2g1öbl 2g1ö2ko gö2ku 2g1ö2lá 2g1ölb g1ö2le 2g1ölr 3g2ömb göm2b1a gömbe2 göm2bel göm2b1er 2g1öml 2g1ö2na g1ö2ná gö2ne gö2nö 2gönt gö2ra 3g2örb 3g2örc gör2csa gör2csá gör2csel gör2cső 3gördí 3gördü 2g1ö2re 3g2örg 3g2örn gö2rök g1ö2rü 2görv gösé2 gö2s1én 2g1össz 2g1ösz 2g1ötl g1öv. g1övb g1ö2ve g1ö2vé g1övh g1övn g1ö2vö g1övr g1övt g1ö2vü g1ö2vű g1övv 1gő gőa2n gőá2g gő1br gőe2l gőe2r gőé2b gő1fr gő1gl gő2g1ő2 gői2ta gő1kl gő1kv gőnyá2 gő1pl gő1pr 2g1őr. g1őrb g1őrh g2őrit gő2riz 2g1őrj g1őrk 2g1őrl g1őrn gő2rök 2g1őrr g1őrs g1őrt 2g1ő2rü 2g1őrz 3gőrzősö gő2s1ep gő2sib gő1spi gő1sta gő2s1ü2v gő1tr gőu2t gőü2l gő2zát gő2zeg gő2z1e2k gő2z1e2l gő2z1o gőző2s gő2zsö gő2z3su gő2z3sű gő2zú gpe2c3h gp1e2lu gpia2c1i2o gp2la gp2lá gp2le gp2lu gpon2ga gpo2re gp2ra gp2rá gp2re gp2ré gp2ri gp2rí gp2ro gp2ró gp2rű gp2sz 1graff grafo1 gra2mad gra2maj gra2mal gra2m1a2r gra2m1as gram1a2z gra2m1á2 gra2m1e2 gra2m1érté gra2mik gra2m1in gra2m1is 1grammj gramu2 gra2mut 1g2ra1p 1g2raví grá2cs1i gráfa2 1g2rá2f1an 1g2ráfb grá2f1e2 1g2ráffe 1gráfid 1g2ráfl 1g2ráft grá2lát grá2l1e2 g2ráná grán1d g2ráni grá2rá grá2r1i2p grá2s3za gre2e gren2d1ő2 g2ril gril2l1a gri2s1á gris3s grisü2 gri2süt g2ríz gróa2 gróá2 gró2f1a gró2fú gró1p 1g2rup gság1g gsé2gel gs2ho gs2ka gs2ká gs2ko gsk2r gs2la gs2lá gs2li gs2má gs2mi gs2mu gs2ná gso2k1o gsors3s gs2pa gs2pá gs2pe gs2pé gs2pi gs2po gs2pó gsp2r gs2rá g1s2ta gs2tá gs2te gs2té g1s2ti g1s2tí gsto2 gst2r g1stra g1stru gs2tu g1s2tú gsugá2 gs2vé gsza2ké gsza2k1ü gszála2d gszá2l1ada gszá2li gszá2r1a2da g1sz2c gszé2t g1sz2f g1sz2k g1sz2l gsz2m g1sz2p gszt2 g1sz2tá gta2g1ar gtag1g gta2n1ó2 gtára2d gtá2r1ada gtermo1 gtermosz2 gté2rá gti2m gt2ra gt2rá gt2re gt2ré gt2ri gt2ro gt2ró gt2rö gt2ru gt2rü gtű2z1ő2r 1gu gu2at gu2ay 2g1u2bo gu2el gu2er2 g1u2ga 3g2ugg g1u2go 2g1ugr gu2id gu2in gu2ir 2g1ujj gula2te gula2t1í gu2ná 2g1u2ni gu2nó gu2nu 3g2urí gus1abl gu2sad gu2s1a2n gu2sas gu2sat gu2s1av gu2sál gu2s1e2 gu2s1érté gu2sil gu2sis gu2s1í gu2sol gu2sor gu2s1ó2 gu2sö gu2ső gus3s2 gussz2 gust2 gu2sü gu2szá gus3zs gu2tac gu2tak gu2tal gu2tam gu2tan gu2tas gu2tat gu2taz 2g1utc 2g1u2tó gutó2d1o2ku 2g1u2tu gu1ya 1gú gú2ja gú2jí gú2ju gú2ny1e gú2ny1í2 2g1úr. gú2ré gú2ri 2g1úrn gú2ro 2g1ú2sz 2gú2t1a2 2g1ú2t1á2 2g1útb 2g1útc 2g1útd 2g1ú2t1e2 2g1ú2té 2g1útf 2g1útg 2g1úth 2g1ú2ti. 2g1ú2tia 2g1ú2tig 2g1ú2tih 2gútij 2gútiko 2g1ú2tina 2gútiná 2gútir gú2tis 2g1ú2tit 2g1ú2tiv 2gútiz 2g1útj 2g1útk 2g1útl 2g1útm 2g1útn 2g1ú2to 2g1útp 2g1útr 2g1úts 2gútt 2g1útv 2g1útz gú2zi 1gü gü2cs gü2dé gü2dí gü2dü gü2ge gügy1ér. 2g1ü2gyi 2g1ügyl 2g1ügyv 2g1üld gü2len gü2lep gü2lik gü2löm 2g1ünn 3g2ürc 2g1ü2re 3g2üri 2g1ü2rí 2g1ü2rü gü2te gü2té gü2ti gü2tö gü2tő gü2tü gü2ve gü2vö gü2ze gü2zé 1gű 2g1űr. 2g1űrb gűre2 g1űrh gű2ri 2g1űrj 2g1űrl 2g1űrm 2g1űrn 2g1ű2rö 2g1űrt gű2ru gű2rü gű2ze gű2zé gű2zi gű2zö gű2ző gva2s1u2 gvá2gy1a2da gvá2nyan gvás1s gverés3s gvezé2rel gvé2nyel gvi2na gvó1s2 g2y 1gya gy1abl 2gy1a2cé 2gyadag gya2dal 2gyadatb gy1a2dót 2gyag. 2gyagb gya2ge gya2gép 2gyagg 2gyagh gya2gis 2gyagk 2gyagn gya2g1ol 2gyagt 2gyagya gy1a2gyu 2gy1aja 2gy1akc 2gyaknák 2gyakt. 2gyaktu gya2laj gyal1akt gya2lapo gya2lapp gy1alat 2gyaláí gya2lel gya2lik gyan1ab gya2n1e 2gy1a2nya gy1a2nyá gya2pak gy1a2páh 2gyapái 2gyapák 2gyapám 2gy1a2pán gy1a2pás 2gyapátó 2gyapjá gya2pón gya2pór 2gyapp gy1aps gy1aran 2gyaraw gyard2 2gyardom gya2rel gy1argó 3gyari gya2r1ón gya2r1ó2r gya2róv 2gyarú 2gyasak 2gyasat 2gyasra 2gyaty 2gyazá 1gyá 2gyábr 2gy1ág gy1álc gy1áll gy1álm 3gyám 2gy1áp 2gyáre 2gyárf 2gy1á2rok 2gyárus 2gy1árú gyá2szó 2gyáta 2gyátk gy1átl 2gyátv gy1bl gy1br gy1dr 1gye gye2d1ős 2gy1e2dz gy1e2ge gy1e2gé gy1e2gye 2gyeke. 2gy1e2kés 2gyeleg gye2legy 2gyelemű 2gyelnö 2gyeltér 2gy1elvá gy1elvű 2gyembl 2gy1e2mel gy1eml 2gyenget 2gy1e2ny 2gyenz gye2pal 2gy1erd gy1e2red 2gyerej gy1e2res gye2rén 2gy1ern 2gyero 2gy1e2rő 2gy1ers gye2seg 2gyesél 2gyesg gy1e2ső 2gy1este 2gyestés 2gy1esti 2gyestű gye2szü 2gyetem 2gyetet 2gyezm 2gyezrede 2gyezrel 2gyezs 1gyé 2gyébr 2gy1ég 2gyéhes 2gyéhs 2gyéji gy1é2ke. gy1é2kes 2gy1é2le 2gy1élt gy1élv 3gyém 2gyéneke 2gyéni 2gy1ép 2gyér. 2gy1érd 2gy1érem 2gyérez gyé2rét gy1érg 2gy1érh 2gy1é2ri 3gyérí gy1érke 2gy1érm 2gyérn 2gyérr 2gy1érte 2gy1érté gy1értő 2gy1érv 2gy1érz 2gy1été 2gyétk 2gyév. 2gyévad 2gyévb 2gyéve. 2gyévei 2gyévek 2gyéven 2gyéves 2gyévet 2gyévh 2gyévi 2gyévn 2gyévr 2gyévt 2gyévü 2gyévv gy1fl gy1f2r gy1gl gy1gr 1gyi 2gy1ide 2gyidé 2gyidő 2gyiga 2gyigá 2gy1ige 2gy1i2gé 2gyigm gy1iha 2gyiker 2gy1ill 2gyimá 2gyind 2gyinf 2gy1ing 2gy1ipa 2gy1i2rat 2gyirá 2gy1iro 2gyirt 2gyish gy1isk 2gyism 2gy1isn 2gy1ita 2gyivó 2gyizg 2gy1i2zo 1gyí 2gy1íg 2gy1í2r 2gy1ív gy1íz gy1kl gy1k2r gy1kv gymás1s 1gyo 2gyokos 2gy1old 2gyolvas gyo2m1as gyo2mi 2gyope 2gy1orc gy1orm 2gyorsó 2gy1orv gy1ou 1gyó 2gyódár 2gyódásak gy1ó2rá 2gyóri 1gyö 2gy1öb gy1ödé 2gy1ökl 2gyötöd. 2gyötödd 2gyötöde 2gyötödé 2gyötödne 2gyötödöt 2gyötödr 2gyötödü 2gyött 2gyötv 2gyöv 2gyözön 1győ gy1őre gy1őrü 2gy1ő2s 3győz gypárba2 gypen1 gy1pl gy1pr gy1ps gyrövid1 gy1sc gy1sk gy1sl gy1sm gy1sn gy1sp gy1sr gy1s2t gy2sur gy1t2r 1gyu 2gy1ud 2gy1ug 2gy1uj 2gyund 2gyuni 2gy1u2ra 2gyurá 2gyuru 1gyú 2gyúd 2gyúé 2gyúi 2gyújí 2gyújr 2gyújs 2gyúm 2gyúrb 2gyúré 2gyúri 2gyúrk 2gyúrr gy1úti 2gyúü 1gyü 2gy1üd 2gyüg 3gyüle 3gyüm 2gyünn 2gyüre 2gyürü 2gyüs gy1üst 2gyüt 2gyüv gy1üve 2gy1üz 1gyű 3gyűl 2gyűré. 2gy1ű2z gy1zr gza2táp gza2t1e gza2tö gza2t1ű2 gzá2r1ó2r gzá2se gzás3s gze2t1a2 gze2t1á2 gze2t1el gze2tin gze2t1o gze2t1ő2 gzőa2 2h. 1ha haa2d 3hab. ha2bak ha2b1a2l ha2b1a2n ha2b1ág ha2b1árb ha2bed ha2b1ér. ha2bid hab1ill ha2b1im ha2b1i2na. ha2b1int 3habo hab1old hab1o2ra hab1orr ha2b1ost hab1sz habu2r ha2bü ha2d1ag had1alk ha2d1ap hada2s ha2d1asz ha2d1á2c ha2d1ál hadás1s ha2d1ásv ha2d1á2szo ha2deg ha2d1el ha2dem ha2dél hadia2 hadié2 hadi2n ha2d1ina ha2dor ha2dos ha2d1u2r ha2d1úr. ha2d1ú2ré ha2d1úrh ha2d1ú2ri ha2d1úrk ha2d1úrn ha2d1úrr ha2d1úrt ha2dús ha2dü ha2dza ha2d3zá hae2r ha1fl ha1f2r 2hagore ha2if ha2j1á2s ha2j1á2to ha2jáz ha2j1in haj1k2 haj1oml ha2jö ha2jő haj1s haj1t2r ha2jü ha2k1ál ha1k2li ha1k2r h1akt ha1k2v ha2l1ach ha2l1a2g ha2l1aj ha2l1a2l hala2n hal1any ha2l1a2r hala2sz ha2l1asza ha2l1aszá ha2l1aszó ha2l1atk ha2l1a2tom ha2l1att 3halá hal1á2cs ha2l1á2g halá2l1e2 hal1á2rak hal1á2rá ha2l1árb ha2l1á2ro ha2l1árr hal1árve hal1áte ha2leb ha2lec hal1e2gy hale2l hal1ele hal1elő ha2lem ha2l1en hal1epe ha2l1ese ha2l1e2ső hal1ete hal1e2to hal1evo hal1e2vő ha2lez ha2l1é2l ha2l1ér. ha2l1éte ha2l1étk ha2l1étt ha2lid ha2l1ik ha2l1i2m ha2l1ing ha2l1inv ha2l1i2ono ha2l1i2ont ha2lip hali2s hal1isz ha2l1iv ha2l1i2z ha2lí hal2k1a2pu halke2l1 hal2k1ele hal2l1aszt hallás1s hal2l1á2t hal2léj hal3ly 3halm halma2z1ó2 ha2l1ol ha2l1ó2ri ha2l1ö ha2l1ő2 hal1p2 ha2l1ug ha2l1u2s ha2l1u2t ha2lü ha2lű ha2l3ya ha2m1ál ha2m1árb hamb2 hame2l ham1ele ham1esz ha2mez ham1ism hamkész1 ha2m1osz 3hamu ha2mü hanás1s han2ch 2hanész 3hang han2gal hange2 han2gen han2g1es han2gél hang3g han2g1ó2 han2gö han2gut han2t1ó2 ha2nyél haó2r ha1p2r hara2g1ó2 harang1g ha2r1ál har2c1al har2can harc3c har2c1e2 har2c3h ha2rel ha2ret 3harmó ha2r1ol ha2r1osz ha2r1ór ha2rű 3hasa haság1g ha2s1iz ha2s1ol has1ors ha1s2pe ha1s2po ha3s2út ha2sür ha2s1ű2 ha1szp ha2t1ab hat1agy ha2t1aj 3hatá határa2d határ1ada ha2t1e2v ha2t1én ha2t1é2v ha2t1í2v hat1olda ha2t1osz ha2t1órá ha2t1ö2v ha1t2rá hatt2 hat1tr ha2tül ha2ue hau2n hau2s ha2ut haü2z 1há 3hábo há2gy há2jús háma2 há2m1al há2m1á há2m1e2 hámi2 há2m1is há2m1ol há2mö hán2cs1e hán2csi há2ny1a2l hánya2n há2ny1ar hányás1s há2ny1e2 há2nyö hára2 há2r1ad há2r1al há2r1au hári2 há2r1iv 3hárí hár1k2 hármas1s háro2m1a háro2mo hár2s1al hár2se 3hárt há2rü há1ry há2sí hász1a2tom há2sz1e há2sziv 2h1ászka. há2sző hát1a2dó há2t1a2la há2t1a2n há2tar há2táp há2t1e2 háté2 há2tél há2t1ér. há2t1ére há2t1érn há2t1i2s há2tí há2t1ol há2t1o2r hátó2 há2t1ós há2tö há2tő hát1u2sz há2t1ü há2tű hátvé2d1el há2z1a2dó há2zaj há2z1ala há2z1asz há2z1av há2z1á2p há2z1árn há2z1á2ru há2z1e2 há2z1isk há2z1ism há2z1ist há2z1í ház1okt ház1old há2zos ház1otth há2zö há2ző házs2 há2z3sa ház3se há2z3sé há2z3si ház3sp ház3st ház3sü ház3sz há2z1ü há1zy hb2le 1he he2ad he2av hec2c1emb hecc3s 2hecu he2dén he2e2s he2f1i he2f1u2 he2g1a2 hegész1 he2gy1a he2gyá he2gyeg hegyes1s he2gy1o he2gyó he2győ he2gyú 2heidp 2h1e2kék 3hekt he2lég helés1s 2helf hel2fr 2hellá 2hellen he2lyeg he2lyeml he2lyesz he2ly1é2j 2hema 2h1embl 2h1eml henés1s 3heng he2ny1e2ge. he2nyo he2ol he2rab he2r1a2d he2r1aj he2r1a2r he2rau her1áll her1át1a2 her1áté her1eng here1p her1ese herevíz1 her1int he2rö her1s2 he2rut he2rű he2s1a he2s1á h1e2sés hes2t1o 3hety 2heusz 2hevé he2vés 3heví he2z1á 2hezh 2hezi 2hezn 2hező 2hezz 1hé hé2hé 3héi. 3héit héje2 hé2j1eg hé2j1el hé2jö 3hékn hé2nal hé2nan hé2nar hé2nát héne2 hé2n1el hé2nem hé2n1et hén1év. hé2nid hé2nil hé2n1is hén3n hé2nö hént2 hé2nu hé2nü hé1ph hé2pü héra2 hé2rar hé2r1as hé2rat hé2rin 2h1érz hé2szá hé2szeg hé2szesz hé2sz1ö héta2 hé2t1ab hé2t1aj hé2tal hé2tar hé2tál hé2t1e2l hé2t1e2m hé2t1es hé2t1ezres hé2t1é2v hé2tí hé2tol hé2tor hé2t1os hétó2 hé2t1ór hé2t1ö hé2tu hé2t1ü2 hé2v1á hé2ve. hé2vég hé2v1érz héze2 hé2z1ek hé2zio hé2zip hézo2 hé2z3s hf2ló 1hi 2hia. hi2aa hi2aá hi2abelie hi2ac hi2ad hi2ae hi2aé hi2ag hi2ah hi2aj hi2al hi2am hi2ant hi2ap hi2ar hi2at 3hida hidro1s 2hiév higa2nye 3higi 2hila 2him. 2hime 2himé 2h1i2nán 3hinás 2hing h1ing. 2hink h1insp hi2om hi2pa 2hips h1ips. h1ipse h1ipsé h1ipsh h1ipsr h1ipss hipszes1 2hise hi2se. 2hisn 2hiso hi2ta hit1ak hita2l hit1a2n hi2t1á2 hi2t1e2gy 3hitel hite2l1e2l hi2t1elesé hi2t1elő hi2t1elve. hi2t1eng hi2t1er hi2t1esz 3hitet hi2tél hi2t1ér. hi2t1érte hi2t1érv hi2t1é2te hi2t1é2ve. hi2t1im hi2t1int hitkész1 hi2t1o hitó2 hi2t1ón hi2t1ór hitö2 hi2t1ör hi2t1őr hi2t1u2 hi2tú hi2tül hi2zo 1hí hí2da hí2dá hí2de hí2dí hí2dö hí2dő hí2dú hí2dü hí2dz hí2g1e hí2jé hí2m1a2 hí2má hí2m1el hí2m1emb hí2mer hí2mo hí2mö hí2mu hí2r1a2 hí2r1á2 hí2r1ing hí2rí hí2r1o hí2r1ó2 hí2rő hír1s hí2r1u hí2rú hkas3s hká2r hk2ri hle2g1e2lé hle2t1el hle2tö 1ho ho2dú 2ho2eá ho2ef ho2ii ho2it 2hokl hola2 ho2l1ad ho2l1al ho2lam ho2l1at ho2l1au ho2l1ál ho2l1á2r hol2dá hol2dem hol2d1ó2r ho2l1e2 ho2lig ho2l1in ho2lip ho2l1i2v hol1k2 hol2mes hol2nik ho2lor ho2l1osz ho2lot ho2l1ó2r ho2lö holta2n holt1any holte2 hol2t1el ho2lü ho2ly1al 3homb 3homo homo1s ho2n1a2g ho2n1a2l ho2n1a2n ho2n1a2p ho2n1au ho2n1a2v ho2n1ál ho2n1át1a2 ho2n1á2to hone2 ho2neg ho2n1el ho2n1ik ho2n1i2m ho2ní ho2n1orj ho2n1o2ro ho2n1orr ho2n1ó2 ho2nö ho2nő ho2nü hor2d1e2 ho2re 2ho1ry hossz1e2 hosszé2 hossz1ék hossz1ü2 2hosz ho1th ho2us ho2we ho2zál ho2z1e hozi2 ho2zü 1hó hóa2k hóá2g hó1bl hó2cal hó2cat hóc3c hó2cel hó2c1é2g hó2c3h hó2cim hó2có hó2c1ö hó2csü hó2cz hó2d1a2ra. hó2d1a2rá hó2d1á2 hó2dem hó2d1é hó2d1ó2 hó2dö hó2dü hó2d3z hó2l1ej hó2l1e2ped hó2l1e2vet hó2nal hón1apa 2hórá hó2rár hó1sh hóví2 hóza2t1e 1hö hökö1 höl2gya höl2gy1á höl2gyel 1hő hőa2n hő1br hőe2l hőe2m hőe2r hőé2n hő1fl hő1gl hő1gr hő1kv hő1pr hősa2 hő2s1al hő2sas hő2s1av hő2s1el hő2sep hő2ses hő2sim hő2sis hő1s2pi hős3s hő1s2tab hős1tr hő2sut hő2s1ú hő2s1ült hő2s1ü2v hősű2 hő2s1űr hő1tr hőü2l hp2la hp2ra hp2ré hp2ri hp2ro hp2ró hru1s2 hs2ch hsé2gel hs2ka hs2pi hs2po hs1s2t hsza2ké hszá2j1a2da hsz2l ht1cl ht1kl h2t1ol ht2rá h1tref h2t1u2t 1hu hu1hy 2hurá hur2t1e hur2tit 2hus. 2husi huszon1 1hú hú2gy1a2 hú2gye hú2gyi hú2gyú hú2r1a2 hú2r1á hú2re húrt2 húr1tr hú2s1ak hú2sal hú2san hú2sap hú2sar hú2s1á2g hú2s1ál hú2s1e2 hú2sim hú2sí hú2sor hú2sö hú2ső hús3szak hús3szá hús3szé hú2sü hú2s3zab hú2sz1ál hú2sz1e2 hú2sz1í2 hú2szol hú2szos hú2sz1ó2 hú2sz1ü2 1hü hü2gy 2h1ünn hü2re hü2rü hü2tő h1ü2vö 1hű hű2ré hű2ri hű2rö hy1ér hy1év hy1ig 2i. i1a iaa2d iaát1 iaáta2 i2abaj i2aber i2abes i2abí i2abon i2abor i2abö i2abő i2abu i2abú i2abü i2abű ia2c1al iac3c i2acet iac1élé ia2c1ér. ia2c3h ia2cid iac1i2ko ia2c1im ia2c1int i2ací ia2c1or ia2có ia2cö ia2cő ia2c3sé iac3sp iac3st iac3sz ia2cü ia2cz iadás1s i2ade i2adí ia2dot ia2dóe iadó1st i2adö i2adő i2adú iae2l iae2r iae2t iaé2r i2afá i2afe i2afi i2a1fl i2afó i2afö i2afő i2afri ia1fro i2afu i2afú i2afü i2afű i2agá i2age i2agé i2agi i2agö i2agő i2agu ia2gyu i2aig i2aip i2ai2z ia2ján i2aje i2ajo ia2kad i2aká i2ake i2akí i2a1k2l i2akód i2akór i2akö i2akő ia1k2re ia1k2ré ia1k2ri ia1krí i2aku i2akú i2akü i2a1kv ia3lan ia2lat i2aleg i2alib i2alí ia2lom i2alö ia2lud ia2lus i2aly i2amá i2ame i2amó ia2m1ur i2amú i2amű ia2nek i2ané i2anö i2anő iao2k iaó2r ia2pát i2ape i2apé ia1p2l i2apo ia1p2s iarádi2 i2are ia2rén i2aro i2aró i2arö i2aru i2arú i2ase i2a1sh i2asi ia1s2ká i2a1s2l i2a1s2m i2asó i2asö i2a1s2p iast2 ia1s2ta ia1s2tá ia1sti ia1sto ia1str i2asú i2asü i2asű ia2sz1an i3aszerű ia2szes ia2szép iasz2k1e2r ia2szop i2aszú i2ate i2ató i2atö i2atő ia1tré ia2ty i2aud i2au2r iau2s iaü2z ia2vat i2avé i2avi i2aví i2avo i2azá i2aze ia2zo i2azs i2azú i1á iá2cs iá2ga iá2gá iá2ge iá2gi iá2go iá2gy iá2hí iáka2 iá2kab iá2kak iá2k1al iá2k1an iá2k1ap iá2k1ar iá2k1as iá2k1á2 iá2keb iá2k1el iá2kem iá2k1en iá2k1e2s iá2k1ér. iá2k1érd iá2kés iáki2 iá2kin iá2kir iá2kit iá2kí iá2kop iá2k1or iá2k1osz iá2k1ó2 iá2k1ö iá2kő iá2kur iá2k1ut iá2k1ú2 iá2k1ü iá2kű iála2 iál1ana iá2lál iá2l1ár iá2l1e2 iá2lim iá2l1in iá2lop iá2nar iá2n1as iá2nem iá2nir iá2nis iá2nö iánt2 ián1tr iá2nü iá2ny1ad iá2ny1a2l iá2nyan iá2nyar iá2ny1e2 iá2nyérz iá2nyö iá2ói iá2po iá2rad iá2rak iá2ram iár2das iár2d1e iár2d3z iá2re iá2rim iár1s2 iá2ru iá3run iá2rú iá2sal iá2sar iá2s1as iá2s1á2g iá2s1ám iá2sás iá2s1e2 iá2sikr iá2sí iá2sor iá2só iá2sö iá2ső iás3szo iást2 iás1tr iá2s1ü2 iá2sű iásví2 iá2szás iá2s3ze iás3zs iá2ta iá2t1e2l iáti2 iá2t1ir iba1d2 ibas2 ibat2 ibau2 ibaü2 ibá2l1a ibe2lér ibe2r1in ibe1s ibi2o ib2lo ib2ró ib2ru ica1f2 ica1g2 ica1kl ica1k2r ica2los ica1pr ica1t2 icca2l ic2can ic2c1á2 ic2c3h ic2cin ic2cir ic2cí ic2c1o ic2c1ö iccse2l iccs1ol iccs1ő2 ic2cú ic2cz ic3ha. ic3hek i2chiná ic3hoz i2c3hű ici2t1a2 ici2tár ici2tel ici2ter i1c2lu i2c1ol i2cs1a2d ics1a2la icsa2p1á2g i2cs1au ics1ág ics1áll i2cs1eb i2cs1e2g icse2t i2cs1ete i2cs1ev ics1é2g i2cs1é2ré. ics1ipa ics1s ics1út i2cs1ül i2cs1ü2t ic3sze ic1üz i2d1a2j id1ana id1a2ny i2d1au id1áll id1áru i2d1ásv id1br 1iddo id3dz ide2av ide2g1á ide2g1él ideg1ér. 1i2dej ide1k2v 2idel id1elj id1elm id1elo id1elt i2d1emb ide1p2 ide2red i2dero ide3sa ideu2 i2d1é2g idé2kel i2dény idér2c3s 2idész 1i2déz id2ge idi2as 1i2dil id1ionj id1ionn i2d1i2ono i2d1i2ont idi2os idi2ód i2d1ita idíja2d idí2j1ada id1kr id1old i2d1olv ido2mac ido2m1an 1i2domá 1i2domo 1idomú id1ös 1i2dő. 1i2dőb 1i2dőd 1i2dőé 1i2dőh 1i2dői 1i2dők 1i2dőm i2dőne i2dőné i2dőnk 1i2dőp 1i2dőr 1i2dős idő2sod idő1s2p 1i2dőt idő2tál 1i2dőv i2dőz id1pr id2rót i1d2ru id1st id1t2r id1u2t id1üg i2d1üz i2d3zá i2d3ze i2d3zó i2dzs1a i2dzs1á i2dzsen i2dzsél i2dzs1í2 i1e ie2be ie2cs ie2dz ie2f1a2 ie2fá ie2f1i ie2f1ü2 ie2gé ie2gy ie2he i2eld ie2lo ie2lőa ie2ma ien2sá ien2s1o iens3s ie2ny ie2pe ie2r1a2d ie2rag ie2r1aj ie2r1a2k ie2ral ie2ram ie2r1an ie2ras ie2r1á ier1d2 ie2reg ier1egy ie2r1el ie2r1ember ie2r1est ie2r1iga ie2r1in ie2r1iste ie2rí ie2r1ol ie2ror ie2rö ie2rő iersz2 iert2 ier1tr ie2r1u2 ie2r1ú ie2r1ü2g ie2sel ie2sem ie2sett ie2sés ie2sik ie2ső ie2sz ieté1sz2 ietz1 ie2ur ie2ve ie2vé ie2vi ie2vő i1é i2édo i2éfe ié2ge ié2gé ié2gő ié2gü i2éha ié2hes i2éhi i2éil ié2le ié2lé ié2li ié2lő i2éme i2émé i2émo ié2neke ié2nekh ié2nekk ié2nekü ié2pí ié2pü ié2rek i2éren ié2rez ié2ré ié2ri ié2rő. ié2rők ié2rőt ié2rü i2észi iéta1s ié2tel i2étö ié2ve. ié2vek ifa1st ifa1t2 i2fe. ifenyőé2h ifio2 if1ír 1ifjí 1ifju 1ifjú. 1ifjúb 1ifjúé 1ifjúi 1ifjúké 1ifjún 1ifjúr 1ifjús 1ifjút 1ifjúv i1f2la if2le if2lo if2lö if2lu ifogo2 ifon1n i1f2ri i1f2ro i1f2rö if2ru if2t1a if2t1á2 if2t1e2l if2tin if2tö if2tú ig1a2git ig1a2ka ig1als ig1alv ig1and iga2nyal iganye2 iga2ny1es iga2ras 1i2garz iga1sl iga2szag igasz1al igau2r 1i2gaz. 1igazí ig1á2cs ig1álm ig1ásh i3gász ig1á2t1e2 ig1br ig1d2r ig1edz i2geg igek2 ige1kl ig1e2le ig1ell ig1elm 1i2genl ige2rá ig1erő ig1e2se ig1esi ige2tál ige2teg ige2tél ige2t1o ige2tőr ig1evi i2g1ex 1i2géd ig1é2g ig1é2li ig1é2lő ig1é2lü ig1élv i2gém igé2na igé2ná 1i2gény i3gépe ig1épí ig1ér. ig1érj ig1érl ig1érn ig1é2rü ig1érv ig1ész 1i2géü ig1fl ig1g2r ig1ív ig1íz ig1kl ig1kr ig2lac ig2nad ig2n1e2g igne2r ig2n1osz ig2nö ig2nü igo2rál ig1o2s igóé2 ig1öb ig1ö2k ig1öl ig1ö2z ig1pr i1g2raf ig1sk ig1sl ig1sm ig1sp ig1st ig1sz ig1tr ig1ug igu2n igu2t ig1ús ig1üc ig1üd ig1ü2g igü2l ig1üt ig1üv ig1űz i2gya. i2gyam i2gyák i2gyál i2gy1eg i2gy1e2kéh i2gy1ékt igy1ér. i2gy1ért iha2re i1i ii2de ii2dé ii2dő ii2ga ii2gá ii2gé ii2gy ii2ha ii2je ii2má ii2mi ii2pa ii2ram ii2rat ii2rá ii2ro ii2sz ii2ta ii2vá ii2vo ii2vó ii2zé ii2zo i1í ií2gé ií2ra ií2rá ií2ro ií2ró ií2ru ií2té ií2ve ií2ze 1i2jed ije2gy1á2 1i2jes ikabe2j1 ikabejá2 i2k1abl ik1ajt ika2lak ik1ang ikaó2 ika1p2l ika1p2r ika2ró2r ikas2 ika1sp ika1t2r i2k1árk i2k1áru ikás1s iká2tol ik1dr ik1ebé i2k1eg ik1elo ik1eng ike2r1a2 ike2r1á2 ike2r1e2dz ike2r1e2l ike2r1ev ike2ris ike2r1o ik1e2rő iker1s ike2ru ike2t1ült ik1evo iké2kekk i2k1épí i2k1épü i2k1érz ik1fl ik1fr i2k1id ik1i2ko ik1ikr ik1ind ik1ins i2k1int i2k1i2o ik1isk ikka2l ik2k1ala ikk1any ik2k1a2r ikk1ára ik2káz ik2kev ikk1érde ik2kin ik2k1i2p ik2k1ol ik2k1ó ik2k1ös ik2köt ik2k1ö2z ik2k1u2 ik2küz ikla1tr ik2ler ik2lor i1klub ik2lum i1knéd ikoma2 iko2m1ar 1ikonbá 1ikonén 1i2konl 1i2konta 1ikontö 1i2kontü 1ikonzs ikó1p ik1ó2rá ikó2s3zá ikő2res ik1pl ik1pr 1ikrei 1ikrek ik2rém i1k2róm i1k2ru ik1st ikszind2 iksz2t iktus1s iktu2sz 2iku. 2ikub ik1udv 2ikuf 2ikuh 2ikui 2ikuí 2ikuj 2ikuk 2ikur iku2sav 2ikut 2ikuv ik1ü2v il1abr il1a2ce il1a2cé il1a2dó il1a2la il1ald i2l1alk il1amb ila2n i2l1ana i2l1any ila2pin ila2pol i2l1a2r ilá2g1e2 ilág3g ilá2gö il1á2gyo ilányfé2 i2l1á2p i2l1árn il1á2ro il1áru il1á2rú ilá2sz i2l1ászo il1átf il1átm il1átr il1bl il2c1a2 ilc3c il2ch il2c3sap il2c3sik ilc3sz il2cz il1e2lem i2l1emb i2l1eml il1exp ilé2n1á i2l1é2nekh i2l1é2nekn ilé1sp il1f2l il1fr il1g2r i2l1icc il1ide i2l1igáh i2l1igáj i2l1igás i2l1igát ili1gra i2l1i2kon. i2l1i2konb i2likoné i2l1i2konh i2l1i2konj i2l1i2konn i2l1i2kono i2l1i2konr i2l1i2kont i2likonz il1ill ili2ma. il1i2mi il1imp ilin1n ili2p1á il1iró il1k2l il1k2r illa2g1ó2 1illatb 1illatr 1illatt il2l1este il2l1esté 1illésé illé2t ill1éte ill1étt il2l1id illig2 illi1gr il2l1ö 1illu 1illú ilm1ada il2m1agy il2m1aj ilm1aka il2m1a2l ilm1ank ilm1any il2m1ap il2m1arc ilm1atl il2m1a2z il2m1ál ilme2g il2m1egé il2m1egy il2m1e2l il2m1ep il2m1e2r il2m1esz il2m1é2j il2m1ék ilmé2l il2m1éle il2m1ér. il2m1érd ilm1é2rést il2mérte il2m1érté il2m1és il2mid il2m1i2k il2mim il2mir il2m1is il2miz il2m1í2 il2m1ok il2mol il2m1or ilm1osz il2m1ó2r il2mö il2mő ilmu2 il2m1ut ilo1g2 i2l1or ilót2 iló1tr il1öb il1ös il1p2l il1p2r il1sh il1sp il1s2t 2ilte ilumi2 ilumin1 ilus3s i2l1üg il1ür il1üv i2l1üz ilva1k2 ima1gl im1akk imaó2 ima1p 2imar. i2marit 1i2mád i2mákt im1dr imeg1g im1elem ime2m i2m1eme ime2ra ime2rin i2m1érd im1inh im1inté imi2t1a2 imi2t1á2r imi2tin 1immu i2m1old i2m1om im1ó2rá imót2 im1ös 1impé 1impu 1imrei i2m1ür iműt2r i2n1abl i2n1a2cé i2n1adá in1ade i2nado in1a2já in1ajt inaka2r 1i2nakat. i2n1akc i2nakk i2nakn i2nakt i2n1akv in1ald i2n1alk in1all 1i2nam. i2n1a2mit. in1ana ina1pla ina2rán 1i2nas. ina2sis 1i2nasn ina2tell i2n1ág iná2lad in1á2rak in1árh i2náru i2n1ásv in1bl in1br in2c1a2g in2cal inca2n inc1elt in2c1él in2chi in2c3ho in2c1is in2c1os in2có in2c1ö in2cő incs1an in2cs1e2r in2cs1é2j in2cs1ér. inc3sérv in2csor inc3sor. in2csú inc3süt inc3sza in2cú in2d1ab 1indai in2d1az in2deb in2d1ed in2d1e2g ind1ekö in2d1e2m in2d1ett 1index in2d1e2z in2d1ég in2d1én in2dés ind1ink 1indiv 1indít indö2 in2d1ör in2dös in1dra 1indul 2ine. i2n1e2dé i2n1ef ineg1g in1e2gy ine2ku i2n1e2l in1emu i2n1eny 2iner i2n1erd i2n1erj ine2t1a ine2t1ér ine2tül i2n1ex 2inéb in1é2ge iné1kré iné2l i2n1éle i2n1élt i2n1élv in1épí i2n1ér. i2nérd i2n1éré in1érte iné2tá iné2te 2inév 1infek 1infl in2gadó in2g1ala ing1áll ing1árá ing1áré ing1á2ro ing1árt ing1áru ingás3s 1ingec in2g1eg 1ingei ing1eljá ing1elk in2g1ell ing1els in2g1enc 1ingerb 1ingerc 1ingeré inge2r1és 1ingerg 1ingerh 1ingeri 1ingerk 1ingerm 1ingern 1ingerp 1ingerr 1ingers 1ingert 1ingerü in2g1e2v in2g1é2j in2g1ék in2g1él ingés3s ing3g ing1i2na in2gí in1glo in2gor in2g1öl in2g1ös ing2rád. ing2rádb ing2rádd ing2rádn ing2rádo ing2rádt 1inguj in2g1u2t in2gú ing1ült 2inie 2inié i2nigar i2n1ige in1ikra ini1kro i2n1ill i2n1i2ma. in1i2mi in1ind 2ining i2n1inh i2n1i2o 2inir ini2s1ég i2n1isk i2n1ism i2n1ital 2iniu i2n1íz 1injekc ink1acé in2k1a2d in2k1ato in2k1árn in2k1esz ink1érté in2kio ink1old ink1orsó in2kös 1inkub 1inna. in2nor i2n1ob i2n1okl i2n1old i2n1olt i2n1olv in1org i2n1ox in1óda in1ó2dá inó2rá i2n1öl in1ön in1őz in1pl in1pr in1s2k in1s2m 1inspi in1spr 1insta in1s2to in2t1aktu int1ann int1árai int1árak int1árat in2t1á2rá in2t1árf in2t1ári int1áron in2t1árr int1ársz in2t1áru int1á2ta 1intege 1integr in2t1e2gy int1előt int1elté in2t1enn in2t1e2ny 1intenz in2t1e2rez 1interfé int1essz inte2t1ős in2t1é2j in2t1ész 1intézé 1intézk 1intézm 1intéző 2intézőc in1t2hos in1thu in2tid in2tigé int1illa in2t1ing in2t1ip in2t1ivá in2t1i2z int1oml in2t1osz in2t1ös intőkész1 int1őr. int1ura intus1s in2t1ut in2tús in2t1út i2n1ug i2n1uj in1új in1ú2s i2n1ú2t i2n1ü2g in1ült in1ünn in1ür in1üs i2n1ü2t i2n1ü2v i2n1ü2z in1űr 1inven in2xa 1inzu i1o ioá2r io1b2r io2cs io1d2r io2dú i2ogá iog2raf io1g2ráf. io1g2ráff i2ogy io2ik io2ká io2kí io2ko io2ku i3old io2l1i2v iol1k2 iol1okk i2oló i3olv io2mar io2m1árt io2mil io2mö io2nad io2n1a2g io2nak io2n1a2n io2n1a2r io2n1as io2n1a2t io2n1av io2n1át io2neg io2n1el io2nen ionim1 io2nin ion1k2 io2nop io2n1oszt io2nö ions2 ion1st ion1t2r io2pe io1p2r io2r1a io2r1i2ko io2so io1sz2f i2ote io2xidj io2xidt i1ó ióa2d ió2ap ióá2g ióá2r ióát1a2 i2óbá i2óbes i2óbé i2óbí i2ó1bl i2óbo i2óbö i2óbő i2ó1b2r i2óbu i2óbú i2óbü i2óbű i2óce i2ócé i2óci i3ócsk i2ócu i2óde i2ódé i2ódi i2ódí i2ódó i2ódö ió1drá i2ódú i2ódü i2ódz i2óég i2óék i2óél i2óép i2óés i2óév. i2ófá i2ófe i2ófi i2ó1fl i2ófó i2ófö i2ófő i2ó1f2r i2ófu i2ófü i2ófű ió1g2r i2óha i2óhá i2óhe i2óhé i2óhi i2óhí i2óhó i2óhö i2óhő i2óhu i2óhü i2óhű iói2g i2óip i2óis i2óiz ióí2v i2óje i2ójo i2ójó ió2kad ió2kaj iók1arc ió2k1aszt ió2kál ió2k1e2g ió2k1i2d i2ókí iókköz1 iók1old i2ókort i2ókö i2ókő ió2küz i2óla i2ólá i2óle i2ólé i2óli i2ólo i2óme i2ómó i2ómu i2ómú i2ómű i2óne i2ónó i2ónö ióo2k ióó2r ió1p2s ió2rab i2órag i2órak i2óran i2órap ió2ras i2órád i2óre i2óré i2ória i2óro i2órö i2óru ió2s1aj ió2sel ió2si. ió1slá ió2só iós3s ió1s2tá ió1str i2ósú ió1sz2 i2óte i2óté i2óti i2ótí i2ótö i2ótő i2ó1t2r i2ótu i2ótú i2ótü i2ótű i2óug i2óun i2óur i2óut i2óvár i2óvás i2óve i2óvé i2óvi i2óví i2óvö i2ózár i2óze i2ózs i1ö iö2kö iö2le iö2lé iö2li iö2lö iö2lő iö2mö iö2re iö2rö iö2rü iö2tö iö2ve iö2zö i1ő iő1dr i2őha i2őké i2őku i2őra iő2ri2 i2ő1s2p i2ő1st i2őte i2őté i2őva i2ővá ipa2cse 1i2par. 1ipara. ipa2ral ipa2rál 1i2parán 1i2parát 1iparb ipa2r1en ipa2r1es 1i2paré 1i2parh 1iparil 1i2parin ipa2ris 1i2parm 1i2parn i2parok i2paron 1iparr 1i2pars i2parta 1i2partá 1i2parte 1i2partó 1i2paru ipau2 ipánk2 ipán1n ip1átm i2p1ef ip1e2gy ip1e2lu i2p1esé i2p1ev ip1fl ip2fu ip1kl ip1kr ipo1kl ipor2tel ipor2t1ő ip1ö2l ip1ös ip2p1a2d ip2paj ip2par ip2pár ipp1ing ip2pö i1prof i1prog i1proj ip2rop i1p2rot ipsz1a2l ipsz1ál ip2sz1emb ip2szip ip2sz1í2 ipsz1or i2p1ug iralo2 1i2rama 1i2ramá iramis1s ira2tal irata2n ira2t1any ira2t1as ira2t1at ira2tál 1i2ratb 1i2ratc 1i2ratd ira2tel 1i2raté 1i2ratf 1i2rati 2i3ratill 1i2ratm ira2t1ol 1iratoz. ira2t1ö2 1i2ratp 1i2ratr 1i2ratü irádi2ók irádi2ót irá2f1a2 irá2g1al irá2g1ál irá2g1á2rak irá2g1á2ro irá2g1áto irá2gáz irá2g1e irág1g irá2g1ol irá2g1ó2r irá2gö irá2l1a irá2l1e2 1i2ránn 1i2rány irá2nyal irá2nye2 ir2ch i2rei 1irga irin2c iri2zo irka1s irkasz2 irke1 2iro. 2irob 1i2roda. 1i2rodá iro1g2r iro2ka iro2ká iro2k1e iro2kér iro2l1a iro2m1a iros3s iró2ke i2róno 1irri irsa2 ir2s1al ir2s1á2 ir2sil irs3s ir2s1ü ir2sz irté2 ir2t1él ir2tiz ir2t1o2r ir2t1ö2 ir2tür iru2sze i2s1abl is1a2da is1a2dá is1a2do i2s1a2g is1aja is1ajk isa2k1e isa2kol is1a2la is1alf i2s1alj is1alk is1alm is1amb isa2n i2s1ana i2s1ano i2s1ant i2s1any isa2p is1apá is1apo is1a2rá is1ass is1aut i2s1a2z i2s1ábr is1ággy iságy1út is1áll is1á2po i2s1á2rak i2s1á2rá i2s1árb i2s1árf i2s1árh i2s1árké i2s1árn isá2ron i2s1árr i2s1árt i2s1á2ru isárus1 is1á2t1a2 is1átk i2s1átl is1átv is1bl is1br is1dr is1edz is1eff i2s1ege is1e2gér i2s1e2ke. is1elf is1elm i2s1elo i2s1eml i2s1enc i2s1ene is1eng i2s1e2pi is1epri is1erő is1e2set is1esé isé2ge2l isé2gés isé2gid iségkész1 is1élv i2s1ér. i2s1é2ri i2s1érté is1é2ve. is1é2vet is1é2vén is1é2vét is1évh isé2vi. isföl2 is1fr is2hin is2his is1ido isi2g is1iga is1ind is1inf is1int is1inv isió2 i2sipa isi2par is1iro i2s1isten is1ita is1i2zo i1s2katu is1kl is1k2r is1kv is2lag i1s2lat 1isme. 1ismek 1ismere 1ismérv 2ismo 2ismű i2s1ob i2s1o2l i2s1orc i2s1ord iso2rosz i2s1orra i2s1orró is1orv i2s1osko is1osz i2s1ott is1ó2rá i2s1öb i2s1ö2c is1öl is1ön isö2r is1örd is1öre is1ös is1ö2v is1ő2r i1s2pek isp2r i1s2pur is1s2p is1sta is1stá issz1e2rei issz1e2rek issz1erem issz1e2res is3szig is3szil is3szí is3szó is3szö is3sző is3szú is3szű ista1s istasz2 1istáp 1istenh iste2n1o i1s2til is1trez is1tré is1tri is1tro 1istv i2s1ud is1ujj isu2t is1uta is1utá i2s1új i2s1üg is1üst i2s1ü2tőt i2s1üz isva2d1áss i1svin isvíz1 isza2k1o isza2p1á2 isza2p1e is3zárá isz1árk is3zárl is3zárú isz1e2gy i2sz1elv is3zene isz1esem i2széj isz2fér i2szimi isz1ing isz1isk isz1ist isz1kl isz2k1ö2v isz2k1ú isz1öl isz1ös isz3s isz2tati iszt1áras isz2t1árb isz2tárt isz2t1ékn isz2t1ér. isz2t1ill iszt1i2nai isz2t1öl isz2t1őr. isz2tüz i2sz1ü2g i2szüt is3zűrödn it1a2cé ita1d2 it1a2dó ita1g2r it1agya i2t1akk i2t1akn 1i2tal. ita2lad ita2l1á2rú i2talb ita2l1el italé2 i2talh itali2n ita2lina i2talj i2talk it1allo 1i2talm 1i2taln i2talo ita2l1ó2 1i2talr i2talt2 i2talu it1anó it1ant i2t1ara i2t1au it1ács. it1ág. it1á2ga itána2 itá2n1at itá2rak i2t1á2ram it1á2ras it1á2rat itá2rár itá2rát i2t1á2ria itá2rig itá2ris itáró2 itá2r1ór itá2ruk itá2rú itáskész1 itá2s3z itá2tal it1átf it1bl it1br it1dr ite2l1a ite2l1á ite2leg i2telemz ite2leng ite2lesé ite2lex ite2lél ite2l1ér. ite2linj it1eljá i2t1ellen it2elmély ite2lo ite2lőz i2t1e2mel i2t1eml i2t1e2p 2iter i2t1e2rez i2t1erő i2t1e2sete it1ezr ité2g i2t1ége it1é2le it1élm i2t1é2ret i2t1érz ité2tek i2t1étt it1fl it1fr it1gl it1gn it1gr i1t2hot i2t1id iti2g itigaz1 i2t1igé it1i2ko it1ikr itikus1s it1ill it1imp i2t1ind i2t1inf it1i2pa i2t1irá i2t1iro it1iró it1isk i2t1ism it1isza it1i2szo i2t1íg i2t1íz it1kl itkos1s it1kr ito2b it1obe ito2k1aj ito2kak ito2k1ol ito2n1á2 itop2la ito2r1as ito2rál ito2ril 2itosz ito1sz2f i2t1ov itóa2 itó1f2 1i2tókán i2t1ó2né i2t1ónn i2t1ónt itó1p2 it1órá itós2 itó1sp itó1st it1önt i2t1ös it1őrl it1pl it1pr it1sp 1ittad 1ittam itta2n1á2s itta2n1é itta2n1ó2 2itte it2t1eg it2t1i2na it2t1ing it1tra it1tró 1ittuk 1ittun itty1i i2t1ug i2t1und itu2n1i itu2ral it1u2rán it1új i2t1üg it1üld it1üst i2t1üt i1t2zé i1t2zi i1u iu2ga iu2go iu2mab iu2mac iu2m1ad iu2maf iu2m1ag iu2mal iu2m1am iu2m1a2n iu2m1a2r iu2m1as iu2m1a2t iu2m1av iu2maz iu2m1á2l iu2meg iu2m1el iu2m1en iu2mer iu2m1es iu2mez iu2mél iu2m1éré iu2m1i2d ium1ill iu2m1im ium1inj iu2m1i2p iu2m1is iu2m1iz iu2mí iu2mol iu2m1or iu2m1ó2 iu2mö iu2mő ium1p2 iu2mü iu2na iu2no iu2ra iu2rá iu2ru ius3sze iu2ta iu2tó iu2tu iu2zs i1ú i2úbá i2úbe i2úbé i2úbi i2úbo i2úbö i2ú1br i2úci i2úcí i2údá i2úde i2údo i2údz i2úél iú1fr i2úha i2úhá i2úhe i2úhi i2úhö i2úhő i2úhu i2úhú i2úif i2úje iú2jí i2újó i2úke i2úkí i2ú1kl i2úkó i2úkö i2úku i2úme i2úmó i2úmu i2úmű i2úne i2úné i2únö i2úre iú2ri iú2ro i2úru i2úse i2úso i2ú1sp i2úta i2útá i2úte iú2té i2útí i2útö i2útú i2úve i2úvé i2úvi i2úvo i2úze i1ü iü2cs iü2ge iü2gy iü2le iü2lé iü2li iü2lö iü2lő iü2lü iü2re iü2rí iü2rü iü2te iü2té iü2ti iü2tö iü2tő iü2tü iü2ve iü2vö iü2ze i1ű iű2ze iű2zé iű2ző iva2csal iva2cs1e 1i2vadé iva2r1ai iva2raj iva2re iva2rin iva2rol iva2ró ivar1s iva2t1a2n iva2t1e2 iva2tin iva2tol iva2t1ó2 iva2t1ö 1i2vás. 1i2vásb 1i2vásé 1i2vásn 1i2vásr 1i2váss i2ve. 1ivot ivókész1 ivós2 ivőé2 iv2ré i2x1ab i2x1ad i2x1an i2x1ar ix1as i2x1ág ix1bl i2x1ef i2x1eg i2x1ex i2x1ép ix1fr i2x1im i2x1in i2x1io i2x1ir i2x1is ixi2t i2x1ob i2x1op ix1öd ix1ös ix1őr ix1ős ix1pl ix1pr i2x1új i2x1ül iz1akn izala2g1 iz1alk izas2 iza1sp iz1árny iz1bl ize2d1á2 ize2d1ék iz1egy i2z1e2lem izele2tel i2z1e2lér i2z1e2lőí iz1ember izene2g izen3n ize2s1á2 i2z1esemé i2z1ev i2zéd i2z1ég 1i2zéj 1i2zék i2zél i2z1é2p 1i2zésí iz1fl 1izgal 1izgatot i2z1iga i2z1igé iz1inf iz1int iz1iro i2z1isk i2z1ism izi1s2p 1izmok 1izmuk izmus1s 1izmú iz1okt 1i2zolá izo2m1a izo2mál 1i2zomb 1izomé 1izomf 1i2zomm 1i2zomn 1i2zomr 1izoms 1i2zomt 1izomz izo1p2 i2zos izo1szta 1izotó izó2d1a2 iz1órá iz1pl iz1pr i2zs1ad izsa2ik i2zsakn i2zs1all izs1ara izsa3u2tók iz4s1ág i2zs1ál i2zsec i2zs1embe i2zsev izsé2t izs1éte i2zsil i2zs1imp izs1ist i2zsita i2zsiz iz3sor i2zs1ő izs1s iz3str i2zs1ül iz3sze iztos1s iz1udv izura1 iz1ú2t i2z1ü2g i2z1üt i2z1ü2z 1izzi 1izzí 1izzot 2í. í1a í1á íba2l1 í2bis íbo2r1as ícius1s íd1a2c íd1a2d íd1a2l ídala2g1 íd1a2n íd1a2v íd1a2z íd1ág íd1ál íd1á2r íd1át íd1bl íd1e2g íd1e2l íd1e2m í2d1é2g í2d1él í2d1ép í2d1ér. í2d1érz ídi2g í2d1iga í2d1igé í2d1in í2d1i2r íd1ív í2d1ol í2d1om í2d1os íd1ös íd1ő2r íd1pr íd1st í2d1ud í2d1ug íd1új íd1üg íd1ün íd1üz íd3zá íd3zs í1e í1é íé2le í2g1a2g íg1e2p íge2s í2g2ér í2g1op íg1tr ígyá2 í1i íi2ro í1í í2j1a2dá í2j1a2dó í2j1a2j í2j1akc í2j1a2l íj1any í2j1a2r í2j1a2u í2j1á2c í2j1á2g í2j1árá í2j1áre í2j1árt í2j1áru 1í2jás íjá2sze íj1ászka í2j1áta í2j1á2te í2j1áth í2j1átl íjá2tos í2j1átt í2j1átu í2j1átv í2j1á2z íj1e2g íj1e2l íjel2i íj1e2m íj1en íj1e2r íj1e2s íj1ép íjé2r í2j1ére íj1fr í2j1i2d í2j1im í2j1int í2j1ir íjirá2 íj1íg íj1ín íj1kr í2j1o2d í2j1ok í2j1ol í2j1os í2j1ot íj1ön íj1ös íj1ö2v íj1öz íj1pl íj1pr íj1sk íj1sp íj1st2 í2j1ug í2j1u2t í2j1út íj1üg íj1ü2t í2k1abl í2k1a2c í2k1a2g í2k1a2l í2k1an ík1ar íka2s ík1asz ík1a2v í2k1áb í2k1ág ík1ál í2k1á2r í2k1eg í2k1e2l ík1em í2k1es ík1ev í2k1é2k í2k1ér. í2k1érb í2k1é2rő ík1fr í2k1i2d í2k1ing í2k1i2r ík1ín ík1ír ík1k2r í1k2lu ík1oll í2k1op í2k1orn í2k1orr í2k1ors íkö2l í2k1ö2v ík1pl ík1pr ík1sp ík1sz2 í2k1ug í2kuni í2k1u2r í2k1u2t í2k1ú2t ík1ü2v íl1aj íl1a2k íl1a2l í2l1á2g ílási2 ílá2s1ik ílás3s ílá2s3z í2l1át íl1bl íl1br íl1e2g í2l1érz íli2as í2l1i2m í2l1i2r í2l1is íl1í2r íl1í2v íl1kr íl1ös íl1ö2z íl1st íltá2 íl2t1árk íl2t1áro íl2t1árt íl2t1e íl2t1é2 í2l1u2r ílu2sab ílu2se ílus3s ílu2s3z íma2n íma1p í2m1á2l ímá2ris ímás1s ím1bl ím1b2r ím1dr í2m1e2g ím1elí í2m1elm íme2r1a2 íme2r1á íme2reg ím1e2rő í2m1esem í2m1e2v í2m1é2het í2m1é2k í2m1ép í2m1ér. í2m1é2ré í2m1é2rő. í2m1é2rői í2m1érr í2m1érte í2m1érté í2m1i2d ími2g í2m1iga í2m1igé í2m1ill í2m1ind í2m1inf í2m1ira í2m1is í2m1i2v ím1ír ím1kr ím1o2k1 ím1ol ím1on ím1o2p ím1os ím1ök ím1ö2l ím1ös ím1öt ím1ő2r ím1p2r ím1sp ím1st ím1u2r ím1u2t í2m1üg í2m1ünn í2m1üt í2n1ab ín1a2cé ína2d ín1ada ín1adá ín1ado í2n1a2g í2n1a2j í2n1aka í2n1akk ín1a2la ín1alj ín1alk ín1ana ín1a2ny í2n1a2p í2n1a2rá í2n1arc ín1ass ín1atl ín1att í2n1au í2n1az ín1ábr í2n1á2c í2n1ág í2nálhaj í2n1álm í2n1á2p ín1á2t1a2 ín1átc ín1áte ín1átf ín1áth ín1átl ín1átm ín1átt ín1átv í2n1á2z ín1bl ín1br ín1d2r í2n1ef í2n1e2g í2n1e2ke. í2n1elc í2n1e2le í2n1elh í2n1elj í2n1elk í2n1ell í2n1elm í2n1elny í2n1e2lo í2n1elö í2n1e2lőh í2n1elr í2n1eltá í2n1elto í2n1elvá í2n1e2mel í2n1eml í2n1e2mu íne2n í2n1ene í2nesd í2n1e2sz í2n1e2vé ín1ég íné2l í2n1éle ín1élé ín1élő ín1élt í2n1é2p í2n1ér. í2nérd í2n1éri í2n1érl í2n1érm í2n1érü íné2sza íné2szer íné2szint íné2szo í2n1éte í2n1é2ven ín1f2r ín1g2r íni2g í2n1iga í2n1igé í2n1i2ko í2n1ill ín1ind í2n1inf í2n1ing í2n1int 1í2nio ín1i2rá í2n1iro í2n1ism í2n1i2z ín1íz ín1k2l ín1k2r ín1k2v ín3nyú í2n1ob í2n1ol í2n1op í2n1or í2n1osz ín1ó2l ín1ön ín1ör ín1ös ín1öt ín1ö2v ín1ö2z ín1pl ín1pr ín1ps ín1s2k ínso2k1 ín1s2p ín1s2t2 ín1sz2 ín1t2r ín1ug ín1új í2n1üd í2n1ü2g í2n1ült í2n1ü2t í2n1ü2v íny1e2c íny1e2g íny1el íny1e2r íny1ing í1o í1ó íó2vo í1ö í1ő í2p1a2g í2p1a2n í2p1álc í2p1él ípés3s í2p1i2z íp3ro í2p1uj ípu2san ípus3s ípus3z ír1a2dó ír1akc ír1akn ír1akt ír1a2la ír1alj ír1alk íra1pl íra1pr ír1arc í2r1a2u í2r1ábr í2r1á2g í2r1á2p ír1ár. ír1árak í2r1á2ro ír1á2ru í2r1ásás írá2se íráskész1 írás3s í2rász ír1á2t1a ír1á2t1e2 í2r1áth ír1áts ír1átv ír1áza ír1bl ír1br ír1d2r ír1e2dé í2r1e2g í2r1e2kés í2r1e2l írel1a í2r1ember ír1eml ír1emu íre2n ír1ene í2r1e2r í2r1esem í2r1e2ső í2r1eszk í2r1ev í2r1é2g í2r1éj í2r1é2k í2r1é2l í2r1ép í2r1é2ri í2r1és í2r1é2te ír1évh ír1f2r ír1gl ír1g2r íri2g í2r1iga ír1iko í2r1ill í2r1im ír1ind í2r1inf í2r1inj ír1ins í2r1int í2r1i2p ír1ira í2ris íri2sz1á í2r1i2z ír1ín ír1ír ír1ív ír1í2z ír1k2l ír1k2r ír1kv 1írnok í2r1o2b 1írog í2r1okl í2r1okm íro2l í2r1ola í2r1old í2r1olv í2r1o2r í2r1osz í2r1o2v í2r1o2x íróá2 í2ródj í2ródo í2ródó í2ródt í2róí író1p2 író1s2p író1sz írót2 író1tr ír1ön ír1ör í2r1ös í2r1ö2z í2r1ő2r ír1ő2s ír1p2l ír1p2r ír1sh ír1s2k ír1s2p ír1s2r ír1s2t írsz2 írszt2 ír2t1ag írt1alap írt1é2te írtha2 ír1tran ír1tro ír2t1u2r íru2n í2r1und í2r1uni í2r1u2r íru2s1e2 írus3s í2r1u2t í2r1új í2r1úr í2r1ú2s í2r1útj í2r1útn í2r1ú2to í2r1útr í2r1útt í2r1ü2g írü2l ír1ür ír1ü2v í2r1üz ír1ű2z ís2po ís2tí ísz1aj ísza2k íszak1o ísz1a2l ísz1as ísz1at ísz1au í2sz1á2 í2sz1eb í2szedé í2sz1e2g í2sz1e2lem í2sz1ell í2szeln í2sz1e2lő í2sz1elv í2sz1emb í2sz1e2mel í2sz1eml í2sz1erk í2szég í2sz1é2l í2sz1é2p ísz1érem í2sz1ért í2sz1étk ísz1g2 íszi2 í2sz1id í2sz1in í2szír í2sz1ív ísz1k2 í2sz1o2 í2sz1ó2 ísz1öl ísz1ön í2sz1ő2 ísz1p2 ísz3s ísz1tr í2sz1u í2sz1ú íszü2l í2sz1ülé í2szünn í2szüt ísz1z íta3u2 ítá2s1á2g íté2k1a2l íté2k1e2l 1í2tél íté2sa íté2s1ég. íté2s1é2gé íté2s1égr íté2sza íté2szá íté2szo ítész3s ítóa2 ító1f ítógé2p1é2s ító1p2 ító1sp ító1sta ítót2 ító1tr ít2ré ítus3s í1u í1ú í1ü íü2dü í1ű í2v1a2d ív1a2já ív1ajk ív1ajt í2v1a2la í2v1alj í2v1a2na ív1ang í2v1anó í2v1a2ny ív1arc ív1a2ri í2v1aszt ív1ábr í2v1á2g í2v1ál ív1á2rad í2v1á2ram í2v1árk í2v1árn í2v1árt í2váru ívás3s ívá2s3z ív1áta ív1bl ív1dr íve2c í2v1e2dz í2v1e2g í2v1ej í2velek ív1e2lemb ív1e2leme ív1e2lemé ív1e2lemr í2velg ív1e2lől í2v1ember íve2n í2v1end í2v1ene íve2r ív1ere ív1eré ív1erő í2v1esemé í2v1esz í2v1e2tet í2v1é2g í2v1é2k í2v1é2le í2v1élm í2v1é2lő ív1élt í2v1ép í2v1ér. í2v1érd í2v1é2ri í2v1érr ív1érté í2v1érv í2v1érz í2v1é2te ív1fr í2v1i2d ívi2g í2v1iga ívi2k ív1ike í2v1ill í2v1im í2v1in í2v1i2p ív1iro ívi2s1el ívi2ses ívis1s ív1iva í2v1i2z ív1kl ív1kr í2v1ol í2v1op í2v1or í2v1osz í2v1ox ívó1s2p í2v1öb í2v1ö2r í2v1ös ív1öv í2v1ö2z ív1pl ív1pr ívren2de ív1sk ív1sp ív1st ívsz2 ív1szk ív1tr í2v1ug ív1ult í2v1ur í2v1u2t ív1új ív1út í2v1üg í2v1ür í2v1üt í2v1ü2v í2v1üz íz1ab íz1a2d íz1a2g íz1aj íz1a2k íz1a2l íza2n íz1ar íz1a2u íz1á2g íz1ál íz1á2p íz1á2r ízár1ó2 ízás1s íz1á2t ízát1a2d ízát1á ízát1e2 íz1bl íz1d2r í2z1ef í2z1e2g í2z1ej í3zelá íze2l1el íze2lö íze2lő í2z1emel í2zemé íze2n í2z1ene í2z1e2r 1í2zesí í2z1e2sz í2z1e2ti í2z1eu í2z1e2v í2z1ex í2z1e2z í2z1ég íz1ékk í2z1é2l í2z1é2p í2z1ér. í2z1érb í2z1érd í2z1érel í2z1é2ren í2z1érh í2z1é2r1i í2z1érk í2z1érm í2z1érn í2z1érr í2z1érs í2z1érte í2z1érté í2z1értő í2z1érv í2z1érz ízé2sa íz1ész íz1évi íz1fr íz1gl íz1icc ízi2g í2z1igé íz1iko í2z1ill í2zimá í2z1imi í2z1imp í2z1ind í2z1inf í2z1int ízióé2r ízi2óéra ízi2óto í2z1i2pa í2z1ira íz1irá ízi2so ízi2sza ízi2szo ízi2szó í2z1i2ta í2z1i2vá íz1í2v íz1íz íz1kl íz1k2r ízo2k íz1on íz1or íz1os íz1ó2rá íz1öb íz1öd íz1ök íz1ö2l íz1öm íz1ön íz1ör íz1ös íz1ö2v íz1öz ízpen1 íz1pf íz1pl íz1p2r í2zsa2 ízs1al ízs1as ízs1au íz4s1ág ízsá2r ízs1áro íz3sáv íz3seb í2zs1e2l ízse2s ízs1ese í2zs1in í2zs1it íz3sí í2zso ízs1ok íz3sor í2zs1ó2 í2zsö ízs1s íz3str í2z3su í2zsú íz3sz íz1t2r í2z1ug í2z1uj ízu2me ízu2m1i íz1und í2z1u2r í2z1ut íz1úr íz1ú2t í2z1ü2g í2züle í2z1ür í2z1üs í2z1üt í2z1üv í2z1ü2z í2zűe í2zűn 1í2zűr í2zűv 2j. 1ja j1a2cé 2j1a2dag 2j1a2dal ja2datá 2j1a2dato 2j1adm 2j1a2dom 2j1a2dot ja2dóh ja2dós ja2dót ja2dóv ja2dóz ja2dus ja1f2r ja2ga. 2j1agg 2j1a2gi 2jakad ja2kadé ja2k1ál ja2k1á2p ja2k1árn 2j1akci ja2k1ec ja2k1el ja2k1e2m ja2kes jak1ére ja2k1éri 2jakf ja2k1im. ja2k1iz ja2k1í2r jak1k2 2j1akku jako2v jak1ovi ja2kók ja2k1ölts ja2k1ös 2j1akro jakt2 2j1akt. 2j1akti 2j1aktu 2j1alg 2j1alk 2j1all 2j1alm jam2be 2jambu ja2mes 2jana. 2jana2i ja2nal ja2nat 2j1a2no jan2sze jan2szü ja2nya ja2ran 2j1a2rá 2j1arc ja2rom 2j1a2szás 2j1atk 2j1atró ja2ur ja2uto 2javat ja2xi ja2zon 1já já2ar 2j1á2bé 2j1ábr 2j1ág. 2j1á2ga. 2j1ág1a2d 2j1á2gai 2j1á2gak 2j1á2gas 2j1á2gat 2j1á2gaz 2j1á2gá 2j1ágb 2j1ágf 2j1ágg 2j1á2gi 2j1ágk 2j1ágr 2j1á2gy jáí2r 2j1áll já2n1e já2nék 2jánl já2po 2j1á2rada 2j1á2rai 2j1á2rak 2j1á2ram já2rar já2r1av 2j1á2rán járás3s járá2s3z 2j1á2rát 2j1á2ráv járe2 já2r1em já2res já2rér 2j1á2rig já2r1is 2j1árki 2j1árko 2j1árny 2j1á2ron já2r1ot já3ró já2rő 2j1ártal 2j1ártás 2j1á2ruk 2járus j1árut 2j1árvál 2j1árz já2s1ad já2sal já2san já2s1ág já2s1á2rai já2s1árak já2sás já2s1e2 já2sit já2s1í já2s1ol 2j1á2só já2sö jást2 já2s1ü2 já2sz1al jásze2 já2szis já2sz1okta jász1ói jász1ón jász1ó2r ját1a2dó. ját1a2dók. ját1a2dón. ját1a2dót 2j1á2tal já2t1á2 2j1átáz játék1e2 2j1átfe 2j1áthá 2j1á2ti 2j1átír 2j1átlé 2j1átm ját1osz 2j1á2t1ö 2játszű 2j1á2tü 2j1átvé 2j1átvi já3zs jba2l1 jb2lo jb2ri jb2ró jbű2n1ü2 jc3ho jcsapá2 jcs1s jdo2nal j1d2rá j1d2ro j1d2ru jdúköz1 1je jea2l jea2n je2bé 2j1e2dén 2j1e2dz jee2n je1f2r 2jeged je2gés jegész1 je2gyeg je2gyel jegy1els jegy1elv 2j1e2gyesí je2gy1é2k je2gy1in je2gy1o je2győ je2gyu je2gy1ú je2gy1ű2rű j1ekcé je1kri jek2t1a2 jek2t1á2r jek2t1e2l jek2ter je2laj je2l1an je2l1ap je2lar je2lav je2laz jelá2 je2l1áb je2lág je2lál je2l1ár je2l1át1 je2láz jel1e2gy je2l1e2l1e2v je2l1elk je2l1ell je2l1e2lőá je2l1e2lőb je2l1els je2l1emel 2jelemé je2l1eml 2j1e2lemz je2l1eng je2l1e2r jel1esés jel1esik je2l1esni je2l1e2ső jel1este je2l1esz je2l1etet jel1evo je2lég je2l1éj je2lél je2l1ép je2lérte je2l1ige je2lim je2l1i2na je2l1inf je2l1ing je2l1int je2l1í2 2j1ellen je2l1o2 je2l1öv je2lőa 2j1e2lőfe je2lőí 2j1e2lőtu jel1p2 2jelszá 2jelszo 2j1eltett. 2jeltér je2lu je2lú 2j1emba 2j1ember 2j1e2mel je2mu je2n1á jen1d2 je2n1e2ke. je2n1el je2ner jene2s je2n1esz je2n1in je2n1o je2n1ő2re je2n1ős je2n1ü je1p2r 2j1erd je2red je2ró 2j1e2rő je2s1a je2s1emb 2j1e2setb 2j1e2sett je2s1ér je2ső jest2 je1sta je1str je2su je2s1ü2v jes3zac je2t1am je2tál jet1ell je2t1em je2t1ék je2t1o je1tra je2tun je2tut jeu2r 2j1e2vő jezőkész1 1jé 2j1ébr jé2g1a2 jé2g1á2 jégár1a2d jé2gec jé2ged jé2g1e2k jé2g1el jé2g1em jé2g1erk jé2g1es jé2get jé2gép jé2g1ér. jé2gés jég3g jégi2 jé2g1id jé2gigé jé2gim jé2g1is jé2g1o jé2gó jé2gö 2jé2gő jé2g1u2 jé2gú 2j1é2hen 2j1é2hes 2j1éhs jé2k1os jé2kü 2j1é2le jé2lő 2j1élt jé2nad jé2n1ess jé2n1é2g jé2nil jé2no jé2nú jé2pí jé2pü 2j1ér. 2j1érb 2j1érd jé2reg 2j1é2ren 2j1é2ré 2j1érh 2j1é2ri 2j1érk 2j1érl 2j1érm 2j1érn 2j1érr 2j1érte 2j1érté 2j1értő 2j1é2rü 2j1érv 2j1érz jé2tel 2j1étk 2j1étt 2j1év. 2j1évb jé2ve. 2j1é2vek 2j1é2vet jé2vén jé2vér jé2vét j1évh j1é2vi j1évk 2j1évn 2j1évr j1évt 2j1é2vü j1évv jfeles1s jf2le jf2lo jf2ló jfölös1s jf2ra jf2re jf2ri jf2rí jf2ro jf2rö jfu2na j1g2le j1g2ló jg2ru jhá2r1e 1ji ji2do j1i2dő 2j1i2ga 2j1i2gé ji2je 2j1ikr 2j1ill ji2ma ji2má ji2mi 2j1i2na. ji2náb 2j1ind 2j1inf 2j1ing 2j1inj 2j1ins 2j1inte 2j1inté ji2on ji2pa 2j1i2rat 2j1i2rá 2j1i2ro 2j1irr 2j1irt 2j1isk 2j1ism 2j1ist 2j1i2ta 2j1i2vá 2j1i2vó ji2zé ji2zo 1jí jí2gé jí2rá jí2ró jítókész1 jí2ve jí2vé jí2vó jí2ze jí2zé jí2zü jí2zű j2j1alj j2j1a2z jjá1s jje2lesé jje2lesi jje2lest jje2l1ül jj1e2r j2j1im j2j1iz jj1ív jj1íz j2j1ol j2j1os jj1pr jj1üg jka1pr jk1ard jkau2 j2k1e2g j2k1e2lő j2k1e2s jké2p1e2ké jkia2 jkiá2 j2k1id jkie2 jk2la jk2lá j1k2li j1k2lo jkme2 j2k1old jko2r1á2s jko2r1in jk1órá jk1pl jk1pr j1k2ré j1k2ri j1k2rí jk1st j2k1u2s jk1üg jk2va j1k2vó j2l1abl jl1a2da j2l1a2lap j2l1all j2l1ar jla2t1e2 j2l1azo jlás3s jl1á2t1a jl1átn jl1bl jl1e2gy jleí2 jl1elé jl1ell jl1eln jle2t1é2te jlé2cel jlé2c3s j2l1év. jli2k jl1iko j2l1ind j2l1inf j2l1int jl1obj j2l1ol jlo2n1á jlo2ni j2l1ös jl1pr jl1sp jl1st jl1t2r jme2g jm1oká j2m1old jna2l1e jna2lég jna2lis jn1á2rá jn1á2ru jnév1a jn1ing jn1st jn1ü2g 1jo jo2g1a2d jo2g1aka jo2gal jo2g1an jo2g1a2z jo2g1á2c jo2g1á2l jo2g1e2 jog3g jo2g1í jo2g1ol jo2g1or jo2g1osz jogó2 jo2g1óv jo2gö jo2gő jo2gur jo2gü 2j1o2koz 2j1oks 2j1okta jo2laj jo2lim joma2 jo2m1ag jo2m1an jo2mar jo2m1as jo2m1á jo2m1e2 jo2m1é2t jo2mév jom1f2 jo2mij jo2m1ik jo2m1is jo2m1iv jo2m1ol jo2m1or jo2mö jo2mő jom1p2 jo2mü jo2mű jonc1c jon2ch jon2cil jon2c3s 2j1ond jo2ób jo2pá jo2pe jo2r1ing 2j1orr. jo2rü 2j1osto 2j1osz jo2ui jo2uk jo2ul jo2ur jo2ut jo2va 1jó jóa2k jóá2g jóá2r jó1bl jó1b2r jó2ce jó2dad jó2dak jód1all jó2d1a2n jóda2t jó2d1ato jóde2 jó2del jó2dig jó2diz jó2d1ol jódó2 jó2dór jó2dü jó2d3z jó1fl jó1kl jó1kro jó2l1e2s 2j1ónn jó1p2r jó2rák 2j1ó2ri jó2sal jó2sas jó2sál jós1árk jó2seg jó2sem jó2sén jó2sip jó2sis jó2s1o2do jó2sö jós3s jós1üld jó2s1ün jó2s3zár jó1t2r 1jö jö2dé jö2ko jö2lé 2j1önt jö2re jö2rö j1ösv j1ötv 2j1öv. 2jöve. j1ö2vez 2j1ö2vén jö2zö 1jő j1őrl jő2rö 2j1őrt jő2rü jő2ze jpárba2 jp2la jp2le jp2re jp2ré jp2ri jp2ro jp2ró jra3d2 jra1f jrai2 jra1p2 jra1s2 jrau2 jré2sz1e2l jré2szí jsa2v1e jsa2v1é jsa2vo jsa2v1ón. jsa2v1ó2r jság1g js2ho js2ká js2ki js2ni js2pe js2pi js2po js2pó jsp2r j1s2ta js2ti j1s2tí j1s2to j1st2ra j1st2ru j1s2tú jszabás1s jszá2l1a2da jszáraz1 jszín3n jsz2k jszt2 j2t1a2da jt1a2do jt1a2dó jt1akn jt1a2lap jt1alk j2t1all j2t1alv jt1a2nyag jta1p2 j2t1a2pá jt1a2rom j2t1arz jta1sp j2t1atk j2t1a2ut j2t1ác jt1ága j2t1áll jtá2rai j2t1á2rak j2t1árka jtá2s3z jt1á2t1a j2t1e2gy j2t1e2ke. j2t1e2leg j2t1e2leme j2telemz j2t1elf j2t1elh jt1eljá j2t1ell j2telmél j2t1e2lo j2t1e2lő j2t1elp j2t1elr j2t1els j2t1elv j2t1eml j2tener j2t1enz jt1e2red jt1e2rez j2t1erő j2t1e2tetőe jt1e2vés jt1evo j2t1e2vő j2t1é2le jt1élm j2t1érl j2t1érm jtés3s jt1fl jt1fr j2t1i2d jti2m j2timá j2t1imi j2t1imp jt1inf j2t1ing jt1int j2t1i2pa j2t1ir jti2s jt1isi j2t1izg jt1i2zo j2t1í2v j2t1í2z jt1kl jt1kr j2t1olda j2t1orjáb j2t1ors jt1osz j2t1o2x jtóa2 jtóé2ra jtó1p2 jtó1s2po jtó1sta jtó1str jtó1sz jtó1tr jt1ödé jt1öng jt1öss jtőa2 jtőe2 jtőé2 jtő1s2p jt1pl jt1pr j1t2ran jtrádi2 j1t2rág jt2ri j1t2roj jt2róf jt1sp jt1st jt1t2r j2t1udv j2t1und jt1utá j2t1új j2t1üg j2t1ü2l j2t1üt 1ju ju2ga jugo1 ju2had ju2h1a2k ju2hal ju2h1a2n juha2ra ju2hat ju2hál ju2h1e2 ju2h1éj ju2h1is ju2hor ju2hő ju2hü 2jula 2juls 2jural ju2ru ju2sz1a2v ju2szim ju2sz1í2 ju2tak 2j1u2tál 1jú jú1fr jú2jí jújjáé3 jú1pl jú1p2r jú1s2p jú1s2t jú2szó jú1szv 2j1útb jú2ton 2j1útv 1jü jü2ge jü2gy jü2le jü2lé j1ü2lő j1ült jü2re jü2rí jü2rü jü2ta j1ü2tő jü2ve jü2ze 1jű jű2ri jű2ző j2z1abl j2z1a2d jza2j j2z1ajá jz1ajt jza2kad jz1akc j2z1a2l j2z1a2ny j2z1ar j2z1as jza2tan j2z1ál j2z1á2rad j2z1á2rán j2z1e2l j2z1em jze2r jz1eré j2z1es j2z1él j2z1érté jz1fr jzi2g j2z1igé j2zill j2z1int j2z1i2r j2z1isk j2z1ism jz1k2l jz1k2r j2z1ob jz1okta j2z1olda j2zolvas j2z1osz j2z1ó2d j2z1ó2r jzó1s2 j2z1ös j2z1öt jz1pl jz1p2r jz3sab j2zs1a2l j2zs1ál jzscsa2p1 j2zs1eg j2zsen j2zs1er j2zs1in jz3sín jz3sor j2zs1ö2 j2zs1ő jzs1s j2zs1u2t jz3sza jz3szá jz3sze j2z1ut jz1ü2g 2k. 1ka kaa2d kaát1 kaáta2 kab2a 2kabbah 2k1abhá kabi2ná 2k1ablak. 2k1ablaka 2kablaká 2k1ablakb 2kablakh 2kablakk 2k1ablakok 2k1ablakon 2kablakos 2k1ablakot 2kablakr ka1b2le ka1bre 2k1abs ka2cél. ka2c3h kacs1á2g ka2cs1ús ka2cü ka2cz k1adap 2kadál kadás1s 2k1a2dot ka2dói ka2dój 2k1a2dóso ka2dóu ka2dóz ka1d2rá kaegész1 kae2l kae2r kaé2r ka1f2r ka2gan 2k1agg ka1g2r 2k1agy. ka2gyu kai2z 2kajánl 2k1ajk 2k1ajtóh ka2kadé ka2kadó kakas3s ka2kác 2k1akc ka1k2l ka2kó. ka1k2ré ka1kri 2k1akt. 2k1akti ka1k2va ka2lapa 2kalapítv 2k1alb kal1egy 2k1alf 2k1alj. 2k1alji 2k1alka 2kalko 2k1alle 2k1alti kama2te 2k1ambu kana2g ka2nalí 2k1a2nam k1a2nat ka2n1e2g ka2n1el 2kang ka2nim ka2nio ka2n1iv ka2nol ka2nód 2kante ka2nű 2k1a2nya. 2k1a2nyag 2k1a2nyai ka2nyáb ka2nyó ka2óa ka2óá ka2óc ka2óe ka2óg ka2óha ka2óí ka2óko ka2ókr ka2óp ka2óü ka2óz 2kapád ka2páto 2kapp ka1p2re ka1p2ré 2k1aprí ka1prof ka2r1a2d ka2rakk ka2r1a2kó kar1a2lap 2k1arank ka2r1a2r kara2s 2ka2rasz 2karat. 2karatn 2karato ka2rau ka2r1ácsh ka2r1ácsn ka2r1ácst ka2r1ál 2k1a2rány kar2c1el kar2dac kar2dál kar2dz ka2rel ka2rev kar1éke karé2kor ka2rél ka2r1éne karfe2l1 ka2rid ka2r1i2ko ka2r1ikr ka2rind ka2r1ing. kar1ingb kar1inge kar1ingg kar1ingr ka2r1isk ka2r1ism kari2z ka2r1izo 2k1a2roma. 2karomá ka2ror kars2 2k1arti ka2sag kaság1g ka2sál ka2sid kasi2p kas1ipa ka2siz ka2s1ol ka2s1ó2r ka1s2po kas3sze kas3szé 2k1asszi 2kasszony kas3sző kast2 ka1str ka2sür kasz1ajt 2kaszat ka2szág kat1ará ka2tél kat1iko kat1int ka2t1i2o 2k1atká ka2tolda katrádi2 ka1t2ri ka2tyá ka2ud 2k1a2ul kau2n kau2r kau2s kau2ta 2k1a2uto 2k1autó. 2kautób ka3utóc 2kautóé 2kautóh 2kautói 2k1autój 2k1autók 2kautóm 2kautón 2kautós 2kautót 2kautóv kaü2t kaü2z 2k1a2vat 2k1a2zon 1ká 2kábé 2k1ábr ká2cak ká2ce 2ká2c3h ká2có ká2c3sar ká2csat ká2cse ká2cs1ék ká2csip ká2csis ká2c3sor ká2csö ká2cső ká2cü ká2dab ká2dar ká2d1ác ká2dát ká2dil ká2dí ká2d1ö ká2d1ü2 ká2d3z ká2fá 2k1ág. ká2ga 2k1ága. 2kágacska ká3gacská 2k1ágai 2k1ágak 2k1ágat 2k1ágaz 2k1á2gá 2k1ágb 2k1á2ge k1á2gé 2k1ágg 2k1ágh 2k1á2gi 2k1ágk 2k1ágn 2k1á2go 2k1ágr 2k1ágs 2k1ágt 2k1á2gu 2k1á2gú 2k1á2gy 2k1á2hí ká2jö ká2jü ká2lág 2kálái 2kálák 2kálán 2káláv 2káláz 2k1álc k1áldo ká2l1e2 ká2lén 2kállamti 2k1állap 2k1állás kál2l1e2 kállé2 kál2lék 2k1állí 2k1állom ká2lü ká2lyod 2k1á2mí 2k1á2mu ká2n1ag ká2n1a2n ká2n1as ká2nem ká2n1is ká2n1ó2 ká2ny1ag ká2ny1a2l ká2ny1a2n ká2nyap ká2nyar ká2ny1á2to ká2ny1e2 ká2nyis ká2nyiv ká2nyö 2k1á2polá ká2poló 2ká2rad ká2r1a2g 2k1á2rakr ká2rakt kár1akta kár1aktá ká2r1a2l 2k1á2ram ká2r1a2p ká2rar ká2ras kár1ass 2k1á2rat ká2raz kár1azo kár1áll ká2r1á2z kár1d2 ká2r1e2 kár1éte 2k1á2riá k1árká kárkié2h ká2r1old ká2r1osz ká2rö ká2rő kárpszi2 kárpszic3 kár1s2 kárt2 kár1tr ká2ruh ká2rü kás1ajt kás1ass ká2s1á2go ká2s1á2rai ká2s1árak ká2s1á2rá ká2s1árb ká2s1á2ro ká2s1árr ká2s1árv ká2s1árz 2k1á2sásá 2kásást ká2s1e2 ká2s1i2k ká2sim ká2sis ká2sír káská2r ká2s1ol ká2s1ott ká2só ká2sö ká2ső kás1p kást2 kás1tr ká2sut ká2s1ü2 2k1á2száb ká2szár kás3zár. 2k1á2szát ká2sze ká2szé ká2szis ká2sziv 2k1á2szom ká2s3zü ká2tab 2k1átad ká2taj ká2tal kát1a2la ká2t1a2n ká2tar ká2tau ká2t1á2 2k1átbe ká2t1e2 ká2tég k1átfo ká2tip ká2t1ir ká2tis ká2tí k1átló 2k1átme ká2t1osz kátó2 ká2tór ká2t1ö ká2tü k1átvá kba2l1 kbé2rel kb2la kb2le kb2lo kb2rá kb2ri kb2ro kb2ró kci2ófa kci2ósi kci2óspe kc2lu kcsa2p1á2g kdi2al kd2ra kd2rá kd2re kd2ro kd2ró kd2ru 1ke kea2j kea2k kea2l kea2n kea2r kea2s keá2l keá2r keá2t1 2k1eb. ke2bei ke2bek ke2béd kecs1alj kecs1ón kecs1ó2r ke1d2ra keegyez1 kee2n ke2ep kee2s 2k1eff ke1fl ke1f2r 2k1e2gér kegész1 2kegyb ke2gyék ke2gy1in 2k1egyl 2kegyn ke2gyö 2kegyr 2kegys ke2gyu ke2gy1ú 2kegyü 2k1e2ke. 2k1e2kei 2k1e2kek 2k1e2kéé 2k1e2kék ke1k2l ke1k2ré kek2sza 2k1ekv 2k1elad ke2l1an ke2l1a2t 2k1elav ke2l1á2g 2k1e2lef ke2lekc 2k1e2lekt ke2l1e2l k1e2lemb 2keleme 2kelemé k1e2lemh 2kelemm 2k1e2lemn k1e2lemr 2k1e2lemz ke2l1e2pe. ke2l1e2pei kele2p1ü2 ke2l1e2sé ke2l1esze kele2t1el kele2t1o 2keley ke2l1é2k 2k1e2lél kel1érh kelés3s kelé2s3z 2k1elhel 2k1elho kel1id kel2ig 2k1e2lim ke2lio 2k1elism 2k1e2l1í2 2k1eljá k1ellá 2kellát 2kellená 2kellenő 2k1ellent 2k1elnev 2k1elny 2k1e2los 2ke2lö2l 2k1e2lőa kelőé2 2kelőfú ke2lőhí 2k1e2lőí 2k1e2lőképz 2k1e2lőkés 2k1e2lől ke2lőny 2k1e2lőo ke2lőté 2k1e2lőtt k1e2lőz k1elra 2k1elsa 2k1első 2k1elszá kel2t1é2rő. 2k1elto 2keltű 2kelül ke2lűr 2k1elv. 2k1elvá 2k1elvei 2k1elvek 2k1elven 2kelvi k1elvk 2k1elvo 2k1elvt 2k1elvű ke2lyemb ke2ly1ékn kelyköz1 2k1elz 2k1ember 2k1embl 2k1embr 2k1eml 2k1emul ke2nal 2k1enci kende2rül ken2d1ék 2k1endo 2k1e2ner 2k1enge ke2n1ip ke2nis ke2n1o kens3s kensz2 2k1enyv keo2l keo2r keó2d keó2h keó2l keó2r ke2pik ke2ral ke2rap ke2r1a2r ke2r1as ke2rau ke2r1ál ke2r1ár ke2rás ker2csá ker2csell kercsí2 ker2csír 2kerde 2kerdő 2k1e2rege 2k1e2rej kere2k1eg kerekes3s ker1ell ker1elv ke2r1ember ke2r1er kere2ta kere2t1e2l kere2t1ö ke2rég ke2r1é2l ke2r1ép ker1éte ke2r1id ker1iga ke2r1ill ke2rim ke2r1ind ke2r1int ke2r1inv ke2rio ker1ist ke2r1iz ker1k2 2kernel. ke2r1ol ke2ror ke2ród ke2r1ó2r ke2rőde ke2rőe ke2rőké ke2rőo ke2rősí ke2rőte kers2 ker1sp ker1st kersz2 ker2taj ker2táp ker2tás ker2t1ebbé ker2teg ker2t1este ker2t1esz ker2télv ker2t1é2vét ker2tön ker2töv ker2t1őr ker2t1ős ker1tró ke2rút kerü2g 2k1esemé ke2seté 2k1e2sett 2k1esél 2k1e2sés ke2sis 2kesítőst 2keskü 2k1e2ső ke1s2po kes3széke kes3szó ke1sta 2k1este 2k1esté 2k1esti 2k1estj 2k1estk 2k1estn ke1stra 2k1estre 2k1estt 2k1estün ke2szaj ke2szép 2keszmén ke2tál ke1tc ke2t1e2kéh 2k1e2teté ke2tid ke1t2ra ke1t2ré ke1t2ri kettes1s ke2tűd keu2r keu2s kevés3s ke2vid 2k1e2vő keze2tés kezőa2 kezőe2 kezőkész1 2k1ezr 1ké 2k1é2ber 2k1ébr ké2ge ké2gé ké2gő 2k1é2hem 2k1é2hen 2k1é2hes 2kéhezé 2kéhezt 2k1éhs ké2j1ak ké2j1elé ké2jö ké2jut 2k1é2ke. 2k1é2kei 2kékekk 2kékem ké2k1e2r kékes3s kéke2s3z ké2kén ké2k1o2 2k1é2kük 2k1é2kű ké2lel 2kéles 2k1é2letek 2k1é2letet 2k1élm ké2lőd 2k1é2lől 2k1élr 2k1é2lű ké2lya ké2ly1esz ké2lyid ké2ly1ü2l kéma2 ké2mad ké2m1al ké2m1an ké2map ké2m1as ké2m1á kémi2as ké2min ké2mis ké2mí ké2mo ké2mö ké2mő ké2m1u2 kéna2 ké2n1al ké2nan ké2n1ar ké2n1at kéndio2 2k1é2neke 2k1é2nekh 2k1é2neki 2k1é2nekk 2kénekl ké2n1e2l ké2n1em ké2n1er kén1éte ké2nig ké2nil ké2n1ing ké2no ké2ny1e2g ké2ny1elv ké2nyú ké2p1a2 ké2p1á képá2r ké2peg ké2p1e2lő ké2p1elté ké2p1elv képe2r ké2p1ill ké2pim ké2p1i2p ké2pí 2k1épít ké2p1o ké2pó ké2p1ö ké2pő kép1s ké2pu ké2pú ké2p1ü2lé ké2p1ü2lő kéra2 ké2rab ké2ral ké2ram ké2r1an ké2rar ké2r1as ké2rat ké2r1á2 2k1érdeke kér1dr 2k1é2retts ké2ro ké2rö 2kértelm 2kértékb 2k1értéke 2k1értékh 2k1értékn 2k1értékr 2k1értés kértő2iké ké2r1u2 ké2r1ú kérü2 kér1ülé 2k1érvek 2k1érzé késa2 ké2san ké2s1á2 ké2s1é2g ké2s1o ké2só kés3sza kés3szer kés3szél ké2su ké2süt ké2sza2 kész1al ké2sz1á2 ké2szeg késze2l ké2szeml ké2szesz ké2széd ké2sz1ékné ké2szin ké2szir ké2szo ké2sz1ó2 ké2szö ké2szőr készt2 ké2szu ké2sz1ú két1akar ké2takn ké2t1akó két1ala két1asp ké2tál ké2t1ed ké2t1eg ké2tel. ké2teln ké2t1e2m ké2t1ep 2ké2te2r két1ere két1erk két1erű ké2tesé ké2t1esté ké2t1esz ké2t1e2v ké2t1é2 ké2t1i2 ké2tí ké2tol ké2t1or kétó2 ké2t1ór ké2t1ö ké2tud ké2t1ü2 2kétv 2k1év. 2k1évad 2k1évb 2kévei 2k1é2vem 2k1é2ven 2kévet 2k1évf 2k1évh 2k1é2vi. ké2vig 2k1évin 2k1évk 2k1évn 2k1évr 2k1évs 2k1évt 2k1é2vü 2k1évv ké2z1a ké2z1á2 ké2zeg kéz1elt kéze2m kéz1eme ké2z1e2r ké2z1ism ké2zí ké2z1o ké2zö kézs2 ké2z3sé kéz3st ké2zsu ké2z1u2 kfe2l1em kfil2mér kfi2sar kf2jo kf2la kf2le kf2li kf2lo kf2ló kfolyói2k kfo2n1ó2 kf2ra kf2rá kf2re kf2ri kf2rí kf2ro kf2rö kf2ru kg2la kg2nó kg2ra k1g2ráf. kg2ri kg2rí kg2ru khá2t1al khelyköz1 1k2hia khiá2b k2hil kh2me 1ki kia2d ki2aé ki2af kia2g kia2j kia2kar kia2kas kia2lap kia2lá kia2n kia2p kia2ra kia2sz ki2aú kia2v kiá2z ki1b2l ki1b2r 2k1i2deá 2k1i2deg 2kidej 2k1i2dét 2kidéz 2kidi ki2dio 2kidőb 2kidők 2kidőm 2k1i2dőn 2kidőt ki1dró kie2l kie2m kie2r ki2eset. kie2t ki2ew kié2d kié2k 2k1ifj ki1f2r 2kiga ki2ga. 2kigá ki2gát 2kige ki2gén ki2géz ki1g2r ki1k2l ki2konn ki2kono ki1k2ré ki1k2ri ki1k2v 2k1ille 2kily ki2lye 2k1i2ma. 2k1i2mai ki2mak ki2máb 2kimád ki2mái ki2máj ki2mák 2k1i2mám ki2mán 2kimár ki2mát ki2máv ki2mit 2k1imp 2k1i2na. 2k1i2nai 2k1i2náb 2k1i2nár kin2csa kin2csá kin2csel kin2cso 2kind 2k1inf kin2gas 2k1inj 2k1integ kio2l kio2m 2k1i2onn 2k1i2ono 2kiont. ki3óh 2k1i2ón. 2kipar ki1pf ki1p2la ki1ple ki1p2r 2k1ips 2k1i2rat 2kiránn 2kirány 2kirg 2k1irh 2k1irk 2k1i2rod 2kirom 2k1irr 2k1irt ki2sad ki2s1ajtó ki2s1akn ki2sal ki2sap ki2sas ki2sál ki2s1e2c ki2s1elő ki2s1emb ki2s1es ki2s1é2k ki2si. ki2s1in kis1ipa ki2s1i2ra ki2s1isk ki1skál 2kism ki1smár ki1s2min kis2nyá kis1oko ki2s1oros ki2sör ki2ső kisp2 kis1pl ki1s2por ki1s2pó kis3sz kist2 ki1s2tar ki1steri ki1stí ki1stop ki1str ki1stu ki1t2r kit2t1er kit2t1ö kiu2s kiu2t kiú2s kiú2t kivíz1 2k1i2vó 1kí 2k1í2gé k1így. kí2ja kí2nal kí2n1árb kí2n1e kí2nél kí2n1ó2 kí2rá 2k1í2re 2k1í2ró 2kítm kítőa2 kítőe2 2k1ív. 2k1ívb 2k1í2ve 2k1í2vé 2k1í2vű kí2zé kí2zü kí2zű kk1abl k2k1a2da kk1ajt k2k1a2kad k2k1akk k2kalá k2k1alj k2k1alm kka2ró2ra k2k1a2u k2k1azo k2k1áll kk1árf kká2rok k2k1á2ru kká2s k2k1ásá k2k1áth k2k1átl kk1átu k2k1átv kk1á2zó kk1br kke2c kk1ecse kk1e2dz kk1e2gé kke2l1e2g k2k1e2lem k2k1ellő kke2lőá kk1emu kke2ra kk1erd kke2ró k2k1e2rő kk1e2ti kk1e2vé k2k1ég k2k1é2l k2k1épí k2k1érté k2k1érz kk1fr kk1gr kkiá2 kk1i2do kkie2 kk1i2ga k2k1igé k2kill kk1ind k2k1ing k2k1ink k2k1int kk1i2par k2k1i2ro kk1isko kk1ism k2k1í2r k2k1íz k1k2lí kk2ló. k1k2lu kko2laj kk1olló k2k1o2pe kkor2dá k2k1org kko2r1os kko2r1út k2k1orz k2k1oszl kkó1p2 kk1ó2rá kkö2l kk1ölő k2k1önt kk1ötl kk1ő2ri kk1ő2rö kk1őrs kk1őrü kk1pr kk2ris kk2rit kk2rí kk1sm kk1sp kk1st kk1t2r kk1udv kk1urt k2k1utá k2k1új k2k1üg kk1ü2lő k2k1ü2t k2k1ü2v kk1üzl kk1űr kk2vó kla1g kla3ko kla1kri kla2p1áta kla1pla kla1s2k kla2uzá kláma2 klá2mal klá2m1an klá2mas klá2m1á2 klámár1a2d klá2m1e2g klá2m1eh klá2mel klá2mer klá2m1ér. klá2m1érté klá2m1i2k klá2min klá2mis klá2mol kleí2 kle2t1a2n kle2tál kle2t1elv kle2t1e2r kle2t1e2v kle2t1ér. kle2t1étbe kle2t1é2té kle2t1é2ve. kle2tin k2lini klió2 kli2pel k2lisé kli2só 1k2lím k2loá k2lopf k2loty kló2rad kló2raj kló2ran kló2rat kló2ris kló2rol k2lub klu2b1a klu2bá klu2b1e klu2bir klu2bol klu2se klus3s klu2s3z kma1b kmai2ko kmas2 kmá2nyan knag2 knak2 kna1kr kni2a2 knika2 kni2k1al kni2k1as kni1sz2 knőc1c kn2ő3r 1ko ko2áz ko2be 2k1obs ko2cho 2k1o2dav 2k1o2dú kogás1s ko1g2ra ko2kád 2koke2 ko2k1er 2k1o2k1ir 2k1o2kí 2k1okl 2k1okm 2k1o2kol ko2k1o2v 2k1o2koz kok2sze 2k1okta kol1ajt kol1áro 2k1oldal 2k1oldá 2k1oldó ko2lid ko2l1igá ko2limp ko2l1i2na. ko2lita kol2l1ad kol2lál kol2lel kol2les kol2l1ét ko2lö 2k1oltár 2kolvas 2k1ombu ko2mil kom2p1ér. kom2p1ol ko2n1a2d ko2naj ko2n1a2l ko2n1a2n ko2n1ar ko2n1as ko2n1au ko2n1ál 2konbá 2konbet konc1c koncé2 kon2ch kon2csá kon2c3sor. kon2c3soro ko2n1e 2konén ko2n1ér. 2kongu 2konhab ko2nir 2konog ko2n1ol 2konola ko2nor 2konosn 2konosr 2konost 2konpa 2konpr 2konrét 2kontö ko2nü ko2nyag ko2nyal ko2nye ko2nyó konz2 2konzs ko2ón kopá2sé 2kopc ko1pro 2kopti ko2r1a2d ko2rag ko2r1aj ko2r1a2n kor1ass ko2r1aszt ko2r1átl 2k1orch kor2csal kor2dad kor2d1ag kor2d1a2s kor2dác kord1d kor2d1e2l kor2dem kor2des k1ordít kor2d1ö kor2d3z ko2r1e2c ko2reg ko2r1el ko2r1er ko2r1es kor1f2 korgás1s 2korie kor1ill ko2r1ing ko2r1inte kor1isk ko2r1i2zom ko2rosz ko2r1o2v ko2r1ói ko2rón ko2rö ko2rő 2k1orr. 2korrk 2k1orrt kor1s2 kor1t2r ko2r1úto ko2rü ko2s1as ko2sál ko2se kos3sze kos3szo kos3szü 2k1ostr ko2sü ko2szal ko2szer ko2szir ko2szí k2oszo ko2szó 2kosztá kotókész1 kotó1st ko2ut 2kovaria ko2vié ko2xi koza2tal kozókész1 kozóköz1 2kozóö 1kó kóa2d kó1bl kóc3c kó2cem kó2ch kó2d1ab kó2dak kó2d1a2l kó2d1a2n kó2daz kód1d kó2d1e2l kó2dem kó2d1e2r kó2d1es kó2d1és kó2din kó2dö kó2dü kó2dzá kóé2r kó1f2r kói2g kóí2v kó1kré kó1kv 2k1ó2né. kó2nét 2k1ó2ni. 2k1ó2no kó2pan kó2p1as kó2p1e2l kó2pir kópó2 kó2p1ór kó2pü 2k1ó2raa kó2r1a2c 2k1ó2rai kó2r1a2n kó2ras kó2ráb kó2rád kó2rág kó2rái k1ó2ráj kó2rám kó2rán kó2rár kó2rát kó2ráv kó2rel kóre2s kó2réj kó2r1éve kó2r1ir kó2r1ok kóro2ka kóro2ko kór1osto 2kóród kó2r1ódá kó2rő 2k1ó2ságú kó1slá kó2s1os kó1s2pe kó1spi kó1s2po kó1str kó2s1ü2 kó2s3zára 2k1ó2vó kó2z1a2m 1kö kö2ba köb1öll köb1öln köb1ölr köb1ölt kö2da kö2dá kö2del kö2der kö2dev kö2do kö2dó kö2du kö2dú kö2dz 2k1ö2ko 2k1ökrö köl2csal köl2csá köl2csel köl2cs1ő2 2k1ölel köles3s 2k1ö2léssz kö2lí kö2lőe költa2 köl2tal köl2t1e2v 2k1öng k1önté k1öntő k1öntv köny2v1a köny2vá kö2ra kö2rá k1ördö kö2red kö2r1e2g kö2rék kö2r1étt kör1f2 kö2rik kö2r1iz kö2ro kö2ró kö2r1ö2l kö2r1ő2 kör1p2 kör1s2 kört2 kör1tr kö2ru kö2rú körü2l1et körü2lé kö2r1ülés körü2lő kö2r1ülő. 2körv. 2körvb 2körvh 2körvn 2k1örvö 2körvr 2körvt 2körvü 2körvű 2körvv k1öszt 2kötlé k1ötvö 2k1öv. 2k1övb 2k1övh 2k1ö2vig 2k1övr 2k1övv kö2za kö2zá kö2zen kö2z1é2k kö2z1í kö2zo kö2zó közőe2 kö2z3s kö2zu kö2zú kö2z1ü2lé kö2z1ü2lő 1kő kőa2n kő1bl kő2ch kő1dra kőe2k kőe2l kőe2r kőé2l kőé2ne kő1f2r kő1gn kő1gr kői2t kő1kr kő1pl kő1pr kőr1an k1ő2rei kőre2s kőr1esz k1ő2ri. kő2ril kő2rip kő2riv k1őrl kőr1s2 kő2rül 2k1őrz kő1s2k kő2sö kő1s2t kő1tr kőu2t kpára2 kpá2rad kpá2r1at kpá2r1ál kpá2r1út kp2la kp2le kp2lé kp2lu kpó2t kp2ra kp2re kp2ré kp2ri kp2rí kp2ro kp2ró kp2sz k2rach kra2chi 1k2rajc k2rakk kra1p krá2sz1e kren2d1ő2 k2reo k2repá 1k2rémh 1k2réml 1k2rémr kré3p2 1k2rist 1k2riti kro1g2 1krokett. 1krokod kro2n1a2 kro2ná kron1d2 kro2n1e kro1p2 kro1str kro1sz2f kró2mar kró2m1e kró2mis k2rómo 1k2rónik k2rup k2s1a2rá ks1elo ksé2gele ksé2gis kségü2l ksé2g1ülé k1s2ká ks2ko k1s2la ks2lá ks2lu ks2mi k1s2ni ks2pa ks2pe ks2pi ks2po ks2pó ksp2r ks2rá k1s2ta k1s2tá ks2ti k1s2tí ks2to k1st2r k1s2tu k1s2tú k2sz1a2d kszae2 k2szagy k2sz1aj ksza2ke ksza2ké ksza2k1ü k2sz1am ksz1any ksz1aré k2sz1ág kszáraz1 k2sz1e2gy k2sz1ela k2szemu k2sz1eng k2szev ksz1élet kszé2t1 k2sz1id kszilá2 kszi2p ksz1ipa ksz1isk k2szír k2sz1old k2szoltó k2sz1osz kszö2g1ell kszö2g1elv kszt2 k2szuni k2szut k2sz1üg k2szüt k2sz1ü2z ksz1z kt1a2da kt1ajá kt1a2lap k2t1alb k2t1all kta2n1á2s kta2n1ó2 kta1p2 k2t1arm kt1a2ud kt1azo kt1ábr ktá2lal kt1álló k2t1álm ktára2d ktá2r1ada ktár1adó ktá2raj ktá2r1az k2t1átf k2t1átv k2t1e2g k2t1elg k2t1elh kt1eljá k2t1ell k2t1els k2t1elv k2t1enz kte2rad kte2ral kte2rár kte2rát kte2reg kte2r1e2l kte2r1in kte2rosz k2t1esem kté2lő k2t1érl k2térmi k2t1érte k2t1éss k2t1é2vet kt1fr kt1gr k2t1id kti2g k2t1igé kt1ill kti2m kt1ima k2t1ind k2t1inf k2t1i2r k2t1isk k2t1ism k2t1i2vás k2t1íg k2t1í2r ktív1e2l kto1g2ra kto2n1á kt1ope kto2ras kto2r1e kto2rol k2t1ös k2t1öt kt1pr k1t2ran k1trau k1tréf k1t2rén k1t2rió ktro2ná k1t2rón kt1sp kt1st kt1sz kt1t2r ktu2m1e ktu2min ktu2sab ktu2s1an ktu2szár ktu2sze ktu2szé ktü2l k2t1ülé k2t1üt k2t1ü2v 1ku kuá2r 2k1ucc kue2l kue2r kue2s ku1f2r 2k1u2go 2k1ugr ku2gya 2k1ujj. 2kujja. 2kujjad kuj2j1a2da 2kujjai 2kujjak 2k1ujjal 2kujjam 2kujjas 2kujjat 2k1ujjá 2kujjb 2kujjg 2kujjh 2kujji 2kujjk 2kujjn 2k1ujjo 2kujjp 2kujjr 2kujjs 2kujjt 2kujju 2kujjú kuk2k1ó2 kula1k kul2csal kul2cse kulus1s ku2m1a2d ku2mal ku2mü ku2nad ku2nal ku2n1ás ku2ne ku2n1in kun3n ku2nor ku2n1ó2 ku2nü 2k1up. 2kupr 2kupu ku2rad 2k1u2rai ku2rak 2kural ku2ram ku2ráu 2k1urn ku2rol kuru2c3s ku2sal ku2sas ku2sál ku2s1e2 ku2sis ku2s1i2z ku2s1ó2 ku2sö kus3sze ku2s1ú ku2sü ku2szal ku2szar kusz1es ku2sz1é2l ku2sz1é2p ku2szét ku2sz1il ku2szis ku2szü 2kutaló 2k1u2tasí 2k1u2taz ku2tál 2k1u2tán 2k1utc 2k1u2tol 2k1u2tód ku2tóp ku2zs 1kú kú2jí 2k1újs kú2p1a2 kú2p1á kú2p1e kú2t1a2 kú2t1á2 kú2t1e kútfé2 kútfél1 kú2tos kú2t1ő 2kú2tu kú2t1ü2 1kü kü2ge kü2gy 2k1ü2lep kü2lo kül2t1á 2küreg 2k1ü2rí kü2rü 2k1üst kü2szá kü2szí 2k1ütk küvés3s 2k1ü2vö 2k1ü2ze 1kű 2k1űrh 2k1űrm kű2ro kű2r1ős kű2zé kű2ző 1k2van k2varc 1k2vark kvá2nyol kvárosi2 kvé2sel kvé2so kvés3s 1k2vin 1k2vitt k2vóc k2vóta k2vótá kvőcsa2 1ky kyd2n ky2fajtán ky2fajtár ky2fajtát ky1i2s ky1i2v kyk2k kyk2ne ky2se ky2s1ü2 ky1üz kza2tal kza2t1e2 kza2t1ó2 2l. 1la laa2d laát1 laáta2 2labár 3labd 2labr 2l1abs la2c1ag la2c1aj la2c1al la2cem la2c1ete la2c3ha la2ché lac1ita lac2k1orr lac1orr la2c1ö2 la2cő la2csalj lac3ság la2c3sor lac3sül lac3süt lac3sz la2cú la2cü 2l1a2data 2l1a2datb 2l1a2datk 2l1a2datn 2l1a2dato 2l1a2datr 2l1a2datt 2l1a2datu ladás1s 2l1adl 2l1a2dog 2ladomá 3l2a3don ladói2ko 2l1a2duk la1dy2 lae2d lae2l lae2r laé2d laé2r 2laff la1fl la2gac lag1a2dó la2g1a2n lag1ass la2g1a2t la2gau la2gav la2gág lag1áll lag1ár. lag1árá lag1árb lag1áre lag1á2ré lag1árf lag1árh lag1árk lag1árm lag1árn lag1á2ro lag1árr lag1árs lag1árt la2g1ere la2gés la2gid la2g1i2k la2gim la2gis la2gí la2g1ont la2g1osz la2góc la2g1ó2rá la2góvá la2gön la2g1ud la2g1ur la2g1ut la2g1ü la2gű la2gyú la2ire la2jag la2j1a2l la2jap la2j1ar laj1ass laj1a2sz la2j1az la2j1ál 2lajánl la2j1ár. la2j1árh la2j1árn la2j1árs la2j1árt la2jás la2j1áth la2j1áts la2j1elt la2jen la2j1es laji2 la2jin la2j1is la2jí la2j1ol la2j1oml la2j1or 2lajoz la2j1ór la2j1ös la2jő l2ajs laj1sz la2j1u2t la2j1ü2 la2kad lak1alj la2k1alm la2k1a2lo laka2t1a2n la2k1ác la2k1álk lak1áll la2k1árn lak1ásás 2lakci la2k1eg la2k1e2l la2k1ér. la2kérte la2k1iko la2k1ír lak2k1as lak2kec lak2kel lak2kol 2l1akkor lak2köl la1klu 2laknáb 2laknáh 2laknás la2kob la2k1op la2k1orm la2k1osz la2k1ov 2lakóz la2k1ös la1k2rém lak2rip la1k2ru lakt2 2l1akt. 2l1aktiv la2kuj 2lakulá 2lakulg 2lakulh 2lakulj 2lakuln 2lakulo 2lakuló 2lakuls 2lakulu 2lakulv 2lakús la2k1ú2to 2lakúv 2lakza la2la2g1 la2laku 2laláí lalás1s 2l1alb 2l1alc 2l1alf 2laljn 2l1alka 2l1alkot 2l1alku 2l1alle lal2tár lal2te 2l1alti. 2laltonk lal2t1ó2 lal2t1ü2 2laltvé 2l1alvi lam1ada la2m1aka la2m1any la2m1a2p la2m1ará la2m1a2z lame2g la2m1egy la2m1ele lam1emb la2m1esz la2mék lam1éle la2méne la2m1érv la2minv la2m1ism la2m1ist la2m1í2 2l1ammó la2m1ol lam1org la2m1osz la2m1ó2r la2mö la2m1ur la2m1ü la2n1a2d lana2g la2n1aj la2nal lan1ala la2nam la2nar la2n1áll la2n1ár. la2n1á2rai la2n1á2rak la2n1á2rá la2n1árr la2n1árv lanás1s lan2csel lan2csem lan2csi lan2csol lan2d1ál lan2d1el lan2d1ér. lan2diz la2ner la2nes la2n1ép lan2g1as lan2gen lang3g 2l1angin la2nil la2nip la2nis 2l1ankét lan1kr la2n1osz lans2 lan2tag 2lantác la2nü la2nyag lany1a2la la2nyau 2lanyái la2ny1ál 2lanyán la2nyás 2lanyáv la2ny1e2lem lany1e2rő la2ny1í2r la2ny1ol la2nyó la2nyü laó2r 2l1a2pa. lap1akk lap1akt lap1a2la lap1alk la2p1atm la2p1att la2p1a2u la2paz la2páb la2p1á2g la2pák la2pán lap1á2rá lap1árh la2p1árr la2pe2l lap1ele la2pem la2p1en la2p1es la2pik lap1illa lap1ille la2p1im la2p1i2na. la2p1ing la2p1int la2p1i2p la2p1i2s la2p1ita la2p1iz lap2lat la2p1o2ku lap1org lap1orn lap1orz lapos1s la2pó. la2pób la2pón la2pór la2pö la2pő 2lappar 2laprí lap1s2 2lapún 2lapúv la2pű la2ra. la2ran 2l1arc larc3c 2l1a2rén lar2m1e lar2min 2l1art 2l1arz la1s2pa la1s2pi la1stra la2sz1abl lasz1alt. la2szas 2l1a2szat la2szás la2sz1én la2szód lasz3s lasz2t1alj l1asztam la2sz1út la2t1a2d la2t1aj lat1alak la2t1alk la2t1alt lat1ará la2t1a2ro lat1arti lat1aszt lat1att la2tau la2taz la2t1áj lat1áll la2t1árad la2t1á2rai la2t1á2rak la2t1á2ram la2t1á2rat la2t1á2ráb la2t1á2ráh la2t1á2rán la2t1á2ré la2t1árh la2t1árn la2t1á2rok la2t1árr lat1ártá la2t1ártó la2t1á2rú la2t1árv lat1ász la2t1áta latdi2al la2t1e2g la2telem la2t1ell la2tep la2t1erk late2s la2t1ess la2tesze la2t1eti la2t1eto la2t1e2vő la2t1éke lat1é2ké lat1ékk la2t1é2ré la2t1é2rő la2térte la2t1érv lat1éss la2t1i2ko lat1ikra lat1inte la2t1inv la2t1ist la2t1iz la2t1ír lat1ívé lat1k2 la2toj la2t1okm lat1olda la2toll lat1oml la2t1osz la2t1otth la2t1órá la2t1óri la2t1övi la2t1ö2vö la2t1őr 2l1attako latta2n1ó2 2lattv la2tut la2tül lat1üze latű2z la2t1űző la2tyá la2ub la2uk la2us la2uto laü2z la2vat 2l1a2vu la1yé la1yig 2layrő lazac1c laza2c3s lazma1 2lazmá 2l1a2zon 1lá lá2bar lábas1s lá2bál lá2b1e2l lá2b1ina lá2b1i2z láb1org láb1orr lá2bö lá2bő 2lábrá lá2b1u2s lá2bü lácsé2 lá2csét lá2cs1il lá2csip lá2csí láda1s lá2d1az lá2d1e2r lá2det lá2dim lá2d1or lá2d1ott lá2d1ó lá2dül lá2dz lá2gab lá2gac lág1a2da lá2g1a2g lá2g1al lá2gan lá2gas lág1ass lága2t lá2g1atl lá2g1ato lá2g1att lá2gál lág1áll lá2gám lá2g1á2rak lá2g1á2ro lá2g1á2to lá2gép lá2gid lá2gigé lá2gim lá2g1ott lá2g1ó2 lá2gő lág1s lá2gü lá2gű 2lágyá 2lágyo lá2has 2láhe láí2r lá2lad lá2l1aka lá2l1al lála2n lá2l1any lá2l1ar lá2lau lá2l1ág lá2l1á2l lálás1s lá2l1átj 2láldás 2láldoz lá2lel lá2l1est lá2l1e2v lá2lél lá2lim lá2l1is lá2lí 2l1állam 2l1állat 2l1állás 2l1állk 2l1állom 2l1állv 2lálmaim 2lálmok. 2lálmom 2l1álmos 2lálmuk 2lálmunkb 2lálokaih 2lálokain 2lálokair 2lálokán 2lálokát 2lálokáu lá2l1o2ko 2lálokonk 2láloku lál1órá lálö2 lá2l1öv 2l1álut lá2l1út lá2lü lá2lű lá2m1a2d lá2m1aj lám1ass lá2m1au lá2m1ál lá2m1á2z lám1b2 lám1ell lám1erő lá2mes lá2mék lá2m1érv lá2m1int lám1ist lá2mí lá2m1or lá2mó lá2mö lá2mő lá2m1út. lá2mü lá2mű lána2 lá2n1ag lá2nal lá2n1an lá2nar lá2n1as láná2 lá2nár lánc3c lán2cel lán2c1ég lán2csá lá2nem lá2n1er lá2nép lán2g1at lán2gál lán2g1e lá2nil lá2n1is lán2k1e2l lán2k1ó2ra lán2k1ö2v lá3nok lá2nol lán1sp lán1sz lánt2 lán1tr lá2nü lá2nyaj lá2nyala lá2nyam lánya2n lá2nyar lá2ny1as lá2nyav lá2nyel lá2ny1ér. lá2nyó lá2nyö lá2pét lápi2 2l1á2pol lá2rad 2l1á2rai lá2raka l1á2rakb l1á2rakk l1á2rakr lá2r1a2l 2l1á2ram 2l1á2rat lá2r1av l1á2raz 2láren lá2res l1árkot 2l1árnya lár1s2 lárt2 lár1tr 2láru. lá2rug 2l1á2ruh 2l1á2ruk 2l1á2rul 2lárus 2l1árut 2láruv lá2rúa lá2rü lá2s1a2d lá2s1aj lá2sal lá2s1a2r lá2saz lá2s1á2g lá2s1á2rai lá2s1árak lá2s1á2rá lá2s1árb lá2s1á2ré lá2s1árh lá2s1árr lá2s1árt 2l1á2sás lá2s1á2to lá2se lásegyez1 lá2sír lá2sott lás1otth lásó2 2l1á2só. lás1ór lá2ső lás3szé lá2sut lá2sű lá2szas lás3zav 2lászed lá2szeg lá2sz1e2m lá2szen lá2szip lászkész1 lászö2 lá2szöl lá2szöv lász3s lá2szü lá2taj lá2t1e2re láté2tel 2l1áthe lá2t1i2o 2l1á2tí 2látkö lá2t1osz lá1t2rá lá1tri 2l1átte 2l1áttö 2l1áttű l1átús 2l1átvé l1átvi 2lávi lá2viz 2l1á2vó 2lávu lá2z1adot lá2z1al lá2z1árh láz2árus 3lázb lá2z1el lá2z1i2s lázo2 lá2z1olt lá2zsal lá2zsan lá2zsó láz3sz l2b1is lb2li lb2lo lb2lú lb2ra lb2re lb2ri lb2ro lb2ró lb2ru lc1ajt lc1alk l2c1a2to l2c1ág l2c1ál lc3csi lc3cso lc3csö l2c1e2le lc1elr l2c1emb lc1emel lc1esz l2c1e2v lce2z l2c1eze l2c1ép lc1évi lc1fr lc3ha lc3há lc3ho lc3hu lc3hú lc3hü l2c1i2d lci2tér lc1ív lc1k2r l1c2lu l2c1ost l2c1osz lc1ó2r lc1ök lc1ös lc1pr l2cs1a2d l2csakt lcs1alap l2cs1a2n lcsa2p1á2g lcs1apr lcsa2r lcs1ara lcs1aro l2cs1a2s l2csaz lcs1ág l2cs1ál l2cs1á2t1a2 l2csátá l2cs1áth l2cs1átj l2csátv l2csec l2cs1e2g l2c3sej lcs1elf l2cs1elt l2cs1elv lcs1emb lcs1eml l2cserd lcse2r1e2l lcs1erő lcs1ese lcse2t l2cs1ete l2csél l2cs1é2rés l2csérle l2csérte l2cs1érté lcs1érve l2cs1érvé lcsé2sz1ék l2cs1é2te l2cs1étk l2cs1é2vét l2csidé l2csimi l2cs1inf l2cs1ing l2cs1int l2cs1i2pa l2cs1irt l2cs1isk l2cs1ism l2csita l2cs1í2z lcs1k2 l2cs1okm lcs1ors l2cs1ö2l lcs1ő2sé lcs1s lc3str lc3sug lcs1ült lc3szo lc3szó lc1tr l2c1uj lc1ül lc1üt lc3zá lc3zo ld1abl ld1abr l2d1a2cé ld1a2dato l2d1a2dá ldai2 lda2lag lda2laj lda2l1e2g lda2lel lda2les lda2l1é2l lda2liz lda2l1í2 lda2los ldalt2 l2d1ant lda2nya lda2nyá ld1apó l2d1aran l2d1arc l2d1ark lda2t1as lda2t1eg lda2t1in lda2tós ld1ág ld1áll ld1álm ld1árn ldás3s ld1br ld1egy l2d1e2kék l2d1e2kén l2d1e2kétő l2d1e2l1a l2d1e2leme l2d1e2lemi l2d1e2lemn l2d1elér l2d1elk l2d1ellá l2d1elo l2d1e2lőh l2d1e2lővez l2d1els l2d1eltá l2d1elvé l2d1ember l2d1e2mel l2d1eml lde1p2 ld1epe l2d1erő ld1e2vé l2d1ex l2d1é2g l2d1é2jér ld1élm l2d1ép l2d1érc l2d1éré l2d1é2ri l2d1érte l2d1érz l2d1ész ldé2ves ld1fl ld1fr ld1gl ld1gr l2d1i2ga l2d1igé l2d1ill l2d1imi ld1ind l2d1int ldi2p ld1ipa l2d1isza l2d1ín l2d1ír l2d1íz ld1kr ld1kv ldo2g1as l2d1ola l2d1old l2d1olt ld1oml ld1orc ld1org l2d1osz l2d1ó2rá l2d1óri l2d1öb ld1ökle l2d1örök l2d1öv ld1őri ld1ősk ld1pl ld1pr ld2rót ld1sp ld1st ld1udv ldu2r ld1ura ldus3s l2d1u2t l2d1új l2d1úr l2d1ú2t l2d1üg l2d1üle l2d1ür l2d1üz l2d1űr ld3zá ld3zó ld3zu 1le lea2bá lea2d lea2g lea2k lea2l lea2n lea2p le2aré lea2sz lea2v leá2j leá2s leá2z 2l1e2béd le2bin le1bla le1bra leb2rek leb2s 2lecc 2l1e2cet 2l1ecset l1eddi le1d2res le1dro lee2s leé2r lefona2 lefo2nal le1fr 2l1eft le2gala lega2r le2g1a2s le2g1áll le3g2áto le3g2áz le3geb le2g1e2g le3g2elem. leg1ell le3g2előa le3g2előj le3g2előké le3g2előt le3gelőze le3g2elve. le3g2elvé le2gene le3g2erj le3ges. le3geseb le3gesek le3gesen. le3g2esn le3gesr le3gest le2g1e2sz legé2d legé2l le3gén legg2 le2gid le2g1is legmeg1 le3g2on le2góv le3göng le2g1ös legpec1 legvíz1 legyá2 2legyb 2legyed l1e2gyel legy1e2lőr l1e2gyenge l1e2gyék le3gyi 2legyí 2l1egyl le3gyo 2legys l1egysé le3gyú le3gyű 2l1egyv le2ic lei2g lei2rá lei2s lej2ta lej2t1á le2kad le2k1a2pu. le2k1ál leká2p le2k1ár. le2k1ára le2k1árb 2l1e2ke. le2k1eg lek1els lek1emb lek1eme lek1erj lek1e2rő le2k1értő 2l1e2kés. le2k1id le2kij le2k1ik lek1ist le2kiz lekkész1 le1kli lek1olt le2k1orz le2k1ó2r le2k1ő2 2lektro 2lektró le2k1út le2küd 2l1elad l1eldo 2l1e2lekt lele2ma 2lelemei 2le2lemek 2l1e2lemes 2lelemz lele2t1a2 lele2tel lele2to 2lelég 2l1e2l1ér lelés1s lelé2s3z 2l1elgo 2l1elha 2l1elhá 2l1elhel l1elho le2lim lel1ing le2l1iz 2l1eljá 2l1ellá 2l1ellé 2l1ellő 2l1elméj 2l1elmés 2l1elnev 2l1elnö 2l1elny 2l1e2los 2l1e2l1ö2l 2l1e2lőél 2l1e2lőfo le2lőí le2lőszű l1elso l1elsö 2l1elszá 2l1elta l1eltáv 2l1eltér 2l1elto l1eltö 2l1elv. 2l1elvá 2l1elvét 2l1elvh l1elvn 2l1elvs 2l1elz 2l1e2mel. 2l1e2meld l1emeled l1emelek 2le2melé l1emelés 2l1e2melg le2melh l1emelhe 2l1e2meli 2l1e2melj l1emellek 2l1e2meln le2melő 2l1emelő. 2lemelős le2mels le2melt l1emelt. l1emelté l1emeltü 2l1e2melü le2melv l1emelve lem1erk le2m1essz lem1eszt le2m1e2ti le2m1ék le2m1éle lem1élte le2m1élv lem1érde 2l1e2méss le2m1ill le2mind le2m1ing le2m1isz le2mita le2m1itt l1emlege le2mok le2mol le2m1org le2m1osz le2m1ó2r le2möl le2m1ő2 lem1p2 lem1u2r le2n1a2d le2nal le2n1ál le2nát lenc1c len2cel len2ceme l2end le2n1e2g le2n1e2l le2ner lene2tel lené2k le2n1éke le2n1ékk le2n1ékt lené2l len1élé lenés3s le2n1ész le2n1év. len2g1e2l le2nid le2n1ip le2n1o2k le2nol le2n1or le2n1óv len1őré len1s2p len1sta len1tra len1t2ren lenu2 le2n1ur le2n1ut le2n1üg le2n1üt 2l1enyv le2oa le2oc leo2k le2oli leo2m le2oz leó2c leö2r le2p1aj lepa2p lep1apa lep1álla le2p1eg lepe2le le2pék le2pél lep1illé lep1iz le1p2lo le2p1osz le2p1ó2d lep2p1elv le1p2rése le1p2ri le1pro le1pró le2p1ü2lőh 2lerdő 2leredm le2rejé le2r1ék ler1éte le2r1il le2rir 2leróz 2l1e2rő le2s1al le2s1ál l1esdé 2lesege le2s1e2kéh 2l1esemé l1e2setb 2l1e2setei lese2tel 2l1e2seté l1e2seth l1e2seti l1e2setk l1e2setn lese2t1o2 l1e2setr le2sésű le1s2ka le1ski 2leskü le1sla le1s2li le1sma le1s2mi le1s2p2 les3sza les3szá le1s2tar le1stemp 2l1esten l1estébe 2lesti. le1s2til 2l1estj les2t1or 2lestr l1estt 2l1eszkö le1szto le2t1ab le2tac let1a2la let1all le2t1am le2t1ana let1apr le2t1e2kéb le2t1e2la le2t1elb let1eleg le2t1elf let1elk let1előa le2t1e2lőké let1elr let1emel le2t1eml le2tene le2t1ent let1ered le2t1eré le2t1erk le2testé let1eszk 2l1e2teté 2l1e2teth 2l1e2tetj 2l1e2tetv le2t1éd le2t1é2j leté2l let1éle let1élé let1élv le2t1é2nekn le2t1érb le2t1é2ren le2t1é2ri le2t1érr le2t1értő let1é2rül leté2sz let1éter let1é2té. leté2vede let1éves le2t1é2véb le2t1évéi le2t1é2vér le2t1é2vét le2t1é2vév le2tid let1ikr let1ill le2tim le2t1ing le2t1ist leti2sz let1iszo le2tivá le2tod le2t1o2k le2t1on let1ora le2t1ox le2t1ö2v letőe3d le2t1őri le1traf let2teg letü2l le2t1ülé let1üzé 2lety leu2g le2uk leu2r leu2t 2levene 2levení 2levenü l1e2vez. l1e2vezg l1e2vezh l1e2vezn l1e2vezt le2vezü l1e2vezv levél1l le2volú le2xá le2x1el le2x1e2p lexkész1 le2xö le1yé le2zer lezőa2 lezőe2r lezőé2n lező1s2p 2l1ezr 1lé 2l1ébr lé2ca lé2cá léc3c lé2c1ék lé2c3h léci2 lé2cim lé2co lécs2 léc3sk lé2d1as lé2d1el lé2d1emb lé2dél lé2d1és lé2dil lé2dos lé2dot lé2dö lé2d1ő2 lée2r léé2r lé1f2r lé2gal lé2g1e2c 2léged lé2g1eg lég1ell lég1els lé2g1em lé2g1e2r lég1ér. 2l1é2gés l1éghet lé2gil 2légí lé2g1ö 2lé2gő lé1g2ráf l1égtem l1égtet l1égtél lé2gú 2légü l1é2gün lé2gyel lé2gyes lé2gyi lé2gyo lé2gyö 3légz léh1asz 2l1é2he. lé2hed lé2h1em 2léhes 2léhet 2léhező lé2h1é lé2hol 2léhs 2l1éj. 2l1é2ji 2l1éjj 2l1éjs lé2kab lé2k1a2d lé2k1a2g lé2k1aj lék1aka lé2k1a2la léka2p lé2k1apo lé2k1as léka2t lék1ato lé2k1au lé2k1av lé2kaz lé2k1e2g lé2k1ep lé2kesí lé2k1e2sz lék1evé lé2k1é2k léké2l lé2k1éle lé2k1élv lé2k1é2te lé2kid lé2kít lékköz1 lék1ors lé2k1osz lé2k1öl lé2kör lé2köz lé2kő lé2k1u2r lékü2l lé2k1ülé lé2k1ült lékve2g l1élc 2l1é2le. 2l1é2lei 2l1é2les lé2léb lé2lén lé2lér 2l1élm lélőkész1 2l1élr lé2lük 2l1é2lű 2l1é2mel lé2nag léná2 lé2neg lé2nekb 2lénekl lé2nel 2lénkí lé2no lé2nyö lé2p1a2l lé2p1el lépés3s 2l1é2pí lé2pó 2lépül lé2pülé lé3rad lé2ral lé2rap lé2ras lé2rat lé2rav lé2r1á 2l1érc. 2l1ércb 2l1érde lé2reg lé2r1e2l lé2r1eső 2l1é2rez. 2l1é2rezv lé2r1é2j 2l1é2rés 2l1é2rik lé2ris lé2rit lé2rí 2l1érni 2l1érnü lé2r1osz lé2rö 2l1é2rő. lé2rőd 2l1é2rőe lé2rői 2l1é2rőj 2l1é2rők lé2rőn 2l1é2rőt 2l1é2rőv 2lértelm 2l1érték 2l1értj 2l1értő. lé2rut 2lérvel 2l1érvén 2l1érze 2l1érzé lésa2 lé2s1aj lé2sak lé2sal lé2sar lé2s1az lé2s1á2 lé2seg lé2s1e2l lé2s1eti lé2s1é2g lé2sés lé2s1ikr lé2só lé2s1ő lés3sza lés3szer lésü2l lé2s1ülé lé2s1ülő lé2s1üt lész1ék 2lészést 2l1észl lés3zse lé2tag lé2taz lé2t1eg lé2tel. lé2telek léte2leko lé2t1e2lem lé2t1e2let lé2telh lét1elha lé2telm lét1elo lé2t1elő lé2t1elv lé2tene lé2tesé 2l1é2teth lé2teti 2l1é2tetn lé2tev lé2t1ér. lé2t1é2te lé2t1is lé2tít 2létl lé2t1o2k 3l2étó lé2tóh lé3tól lé2t1ó2r létö2 lét1örö lét2rág lé2tun 2l1évad 2l1évb 2l1é2ve. 2l1é2ved 2lévei 2l1é2vek 2lévelf 2léveli 2l1é2vem 2l1é2ven 2l1é2vet. 2l1é2véb 2l1é2véh 2l1é2véi 2lévén lév1ért 2l1é2vét 2l1é2vév 2l1évf 2l1évh 2l1é2vi. 2l1é2vig lé2vir lé2vis 2l1évk 2l1évl 2l1évm 2l1évn 2l1é2vó 2l1évr 2l1évs 2l1évt 2lévü lé2vük lé2vün 2l1é2vű 2l1évv 2l1évz lfa2l1e2 lfat2 lfa1tr lf1aut lfá2t1i2 lf1cl lf1ese lfe2t lf1eti lfé2l1é2v l2f1élm lfé2m1e2ké lfi2d1é lfin3n lfi2nos lf1iro lf1isk lf1kl lf2lo lf2ló lf2lö lf2lu l2f1okta l2f1ó2r lf1pr lf2ri l1f2rí l1f2ro lf2rö lf2rő lf1sp lf1sz2 lf1ülő lga1p2 lgatói2ko lgau2 lgár1as lgés3s lgi2as lg2la lg2lo lg2ló lgör2cso l1g2ra lg2ru l2gy1ad l2gy1ag l2gyaj lgy1ala lgy1alj lgy1any l2gy1a2s l2gy1au l2gyáb l2gyál l2gyát l2gy1e2g l2gyelá l2gy1e2le l2gy1elz l2gyembe lgy1eré l2gy1esem l2gy1e2v l2gyél lgy1ér. l2gy1és l2gyid l2gyikr l2gyip l2gyis l2gy1ok l2gy1ol l2gyop l2gy1os l2gy1ó2r l2gy1ö2r l2gy1ös l2gy1u2t l2gy1út lhai2 lhón1al 1li li2aa li2aá li2abi li2abo lia2cé li2aci li2acs li2acu li2a1d2 li2ae li2aé li2ag li2ah li2aid li2aí li2aj li2akép li2ala li2ale li2ali li2amé li2amo li2ao li2aó li2aő li2ap li2ara li2aré li2asá li2aso lia1sz li2asza li2aszá li2aszé li2aszf li2aszi li2a1t2 li2aü li2av li2az li3be lic3sz li2cü li1cy li2deá 2li2deg li2dén li2dét 2l1i2di 2l1i2dő li2ec lie2d 2lien lié2d lié2k lié2n lié2vé lifé2l1é2v li2fí li1fl li1f2r l2ig. 2l1i2gaz ligán1n li2ge. 2l1i2geb 2l1i2gek 2l1i2gep li2géb li2géh li2géi li2géj li2gék li2gén li2gér li2gés li2gét li2gév li2géz li2hat 2l1ihl 2l1i2ker. 2l1i2kerb lik2k1ell lik2k1elv lik2k1e2r lik2kérd li1k2l 2l1i2konc 2l1i2konf 2l1i2kong 2l1i2konig 2l1i2konk 2likonl 2l1i2konm 2l1i2konp 2l1i2kons li1kré 2lill 2lima. 2limád li2mák li2máv l1imbo li2me. lime2rá lim1p2 2limpo limű1 li2nakr li2nal lin1any lin1ará 2linas. lin2cs1ö2 2l1indu li2ne. li2neg linék2 2l1inger lin1grá ling2rádi 2l1ingré lin1ing lin1inj lin1kl lin3ny li2nor 2l1integ 2l1intéz li2n1u2s li2n1ut 2l1i2nú li2oc lio2l li2oni li2óke lió2raj li2őá li2őd li2őe li2őf li2őg li2őm li2őp li2pa. li2pai li2p1aj li2p1á2r li2pát li2peg lip1ele li2p1elv li2p1esz li2pö li2p1ő2 li1pro 2l1i2ram 2l1i2rat 2l1i2rán 2l1irh li2rig li2rod 2l1irr 2l1irt li2sál li2s1el lise2s li2sid lis1isk 2l1iskol l1ism lis1p2 2l1ispá 2l1isten 2l1istr li2s1ü2t lis1ü2v 2l1iszl lisz2t1á2z li1sztir li2t1a2g 2lital. li2tala lit1alk li2t1áta li2t1e2g li2t1e2l li2t1emb li2tez li2t1érd li2térte li2til lit1int li2t1i2o li2t1is li2t1okt li2t1old li2tön litő2 li2t1őr l1ittak l1ittas l1ittat li2t1ura liú2t 2l1i2vad li2vot l1i2vó 3lix. l1izél 2l1i2zén 2lizésí l1izgu 2l1izmo 2lizzí 2l1izzó 1lí lí2gé lí2ja lí2ju líma1 2l1íns l1í2ny línyenc1 l1írd l1írh l1írj l1írl lí2rod lí2rog lí2rok lí2rom 2l1í2ró l1írs l1í2ru lítés3s lítőa2 lítő2p3r 2lív. líva1 lívak2 2l1íz. 2l1í2ze l2ízi lízis3s 2l1ízl 2l1í2zü l1í2zű l2j1a2da l2j1e2lő l2j1er ljes1s ljharc1 l2j1ip l2j1ir l2j1iz lj1ír l2j1or l2j1os lj1pr lj1sp lj1üz lka1sl lka2tel lka2t1é lka2tin lka2t1ó2 lké2p1ell lké2szel lkia2k lkiá2 l1k2lin lk2lí l1k2lu lkö2z1ön. l1k2rá lk2reá l1k2rémb l1k2ri l1k2rí lk2rom l1k2ró lk1sh lkukész1 lk2va lk2vá lk2vó lla2dój lla1f2 lla2g1ad lla2gal lla2g1a2s lla2gál lla2gen lla2gép llag3g lla2gol ll1a2ja ll1akad l2l1akc ll1a2kóz l2l1akti l2l1a2lap l2l1alm lla2mad lla2mal lla2mem lla2mél lla2mor l2l1anal lla2nyer llany1ó2 lla2pal ll1aszf llata2l lla2tala llat1any lla2t1ál lla2t1ár. llatár1a2d lla2t1árb lla2tés lla2tint lla2t1olt l2latomo lla2tors lla2t1ű l2l1aty l2l1aut l2l1á2ga l2l1ágb l2l1ágg ll1ágy. ll1ágyá l2l1állo l2l1álm llá2mag llá2m1al llá2m1e2 llá2m1érté llá2mik llá2mis llá2m1ut llán2k1e2 l2l1á2p llára2 llár1ad llá2rak llá2r1á2 llá2s1ikr llá2sü llá2sza l2l1átd l2l1átf l2l1á2ti l2l1átk ll1bl ll1br ll1cl ll1d2r l2l1e2dz ll1eff lle2ger lleg1g lle2gyé lleí2 l2l1e2kés lle2l1a lle2lin l2l1ell l2l1e2lőa l2l1e2lőd lle2m1a2 lle2m1á lle2m1e2g lle2mel ll1emelé llem1ell lle2mer lle2m1él lle2m1ér. lle2m1érté lle2m1o2 lle2mu lle2na llen3n lle2n1ő2r llens2 lle2r1in l2l1e2ró l2l1e2sőt ll1estr lle2tos l2l1e2vet l2l1ex ll1é2het l2l1é2jek llé2k1aps lléká2 llé2kár llé2k1ol llé2kos llé2kó llé2k1út l2l1é2let. l2l1é2letb l2l1é2lete l2l1é2letén l2l1é2letét l2l1é2letk l2l1élt l2l1élv llé3nya llé1sp l2l1é2ter llét2o l2l1év. ll1é2vén ll1f2l ll1fr ll1g2r ll1ide l2l1i2ga l2l1igé ll1ill l2l1i2ma l2l1imp ll1ina. l2l1ind ll1inga l2l1ingf l2l1ingm l2l1ings lli2nin l2l1inv lli2p l2l1ipa2 l2l1irá l2l1iro l2l1isi ll1isko l2lism l2l1iste lli2ta l2l1ita. l2lital l2l1izé ll1izma ll1izmá l2l1i2zo l2l1íg l2l1íj l2l1í2v ll1k2l ll1k2r ll1kv l2l1oá ll1obj l2l1off l2l1o2l ll1ope llos3s llóá2 lló1gr llóó2 lló2rák lló2rát lló2riá l2lóvo l2l1öb l2l1öl ll1önt l2l1ör ll1öss ll1ösz l2l1ö2z l2l1őr. ll1ő2rei l2l1ő2rö l2l1őrt l2l1ő2si l2l1ő2ze. ll1p2l ll1p2r ll2si. ll1sk ll1sp lls3s llsz2 ll1szt ll1tré ll1tri ll1tró ll1u2bo l2l1ug ll1ult llus1s l2l1u2t l2l1ús l2l1ú2to l2l1üd l2l1üg l2l1ür l2l1üt l2l1üz l2l1űz llvé2d1e2l l2ly lly1ö l3lyw lma2kad lma1kré l2m1ant lma1trá l2m1att lmá2l lm1álm lm1álo lmá2nyan lmá2ny1út lmá2ris lm1átk lm1átt lm1bl lm1b2r lm1cl lm1dr lme3gon lme1kl lm1elb lm1e2li lm1elm lm1e2lő l2m1ember l2m1enc l2m1eng lmeó2 lm1epi lm1e2seté l2m1essz l2m1etn l2m1etű l2m1ex l2m1ég l2m1élv l2m1é2neke l2m1ép l2m1értő l2m1éva lm1gl lm1gr lm1i2dő lmi2g l2m1iga lmigaz1 l2m1ind l2m1inf l2m1ing l2m1ins l2m1inte l2m1inté l2m1inv l2m1i2p lm1irá lm1iro lm1isk lm1izz lm1íg lm1ír lm1íz lm1kl lm1kr lm1old lm1olv l2m1o2p lm1ors l2m1ov l2m1ódá lm1ó2rá lm1ö2k lm1ön lm1ö2r lm1ös lm1öt lm1ö2z lm1ő2r lm1p2l lm1p2r lm1sk lm1sl lm1sn lm1sp lm1st lm1sz2 lm1t2r l2m1u2g l2m1u2r lm1utó l2m1új l2m1üg l2m1ünn l2m1üz lnak2 lna2p1e lná2ris lné2v1á lni2ker lni2s1 1lo lo2áz lo2b1a2r 2lobá lo2b1á2c 2lo2be lo2b1iv lo2b1ó2 2lobu lo1by lo2ch lo1cy lo2éc lo2éo lo2ép lo2éz lo2g1a2d lo2gal lo2g1ál logás1s lo2ger lo2gí lo2g1or lo2gö lo1g2ráf. lo1g2ráff lo2g1ú lo2gü lo2ir lo2kab lo2k1a2d lo2k1aj 2l1o2kak lo2kárb lo2k1á2ro lo2k1árr lo2k1áru lo2k1átj lo2káu lo2k1e2 lo2kék lo2kid lok1is lo2k1i2z lo2kí lokka2l lok2k1ala lok2k1el lok2k1ó2 lok2kös lok2k1ut lo2k1ol lo2konk lo2kor 2l1o2koz lo2kü lo2laj 2l1old 2l1o2li 2l1olló 2l1oltár lom1adá lom1aga lo2m1ajt lom1aka lom1a2lap lom1a2lo lom1ará lom1ass lo2m1att lo2maz lom1ács lo2mág lo2m1ál lo2m1áré lom1ári lom1árk lo2m1árn lo2m1á2ro lomba2l lom2bala lom2bav lo2med lo2meg lo2men lom1erk lom1erő lo2m1es lo2méd lo2mék lo2mél lom1é2ne lo2m1éri lo2m1i2d lo2m1i2k lo2m1im lo2mink lom1int lomi2s lom1isz lo2miz lo2m1í2 l1omló lo2m1okoz lo2mol lo2m1o2r lo2m1osz lom1ott lo2m1ó2 lo2mö lo2mő lom1p2l lo2mü lo2mű lo2nab lo2n1a2d lo2n1a2g lo2naj lo2nak lo2n1a2l lo2n1ar lo2n1as lo2n1au lo2n1av lo2n1á2z lon2ch lon2cil lon2d1ó2 lo2n1el lo2n1ir lon1k2 lo2nol lo2n1ó2 lo2nö lon1s2 lon1tr lo2nü lo2oi lo2oj lo2or lo2ós lo2pap lop1ál lo2pe lop1e2l lo2piz lo2pí lo2p1o2r lo2p1osz lo2pö lop2p1in lop1t2 2l1opti lo2pü lor2din lore2t 2l1org 2l1orm 2lorn 2l1ors 2l1orv 2l1orz l2os. l2osa l2osb lo2se lo2sü lo1t2ha 2lottl lo2xá lo2xi 1ló lóa2d lóá2r ló1bl ló1br lóc3c ló2cem ló2ch lócsa2p1á2g 2l1ó2dát ló1dro lófé2l1é2v lófi2úké ló1fl lóg1g ló2gí ló1grá lóí2v ló1k2l ló1kré ló2nar 2l1ó2ni. 2lónn 2lóno 2lónr 2lónt lópárba2 ló1p2l ló1p2r ló2rac lór1ada lór1a2la lóra2n lór1any ló2rar 2lórái 2lóráj ló2rámr 2lórár 2lórát ló2rem ló2r1e2s ló2r1ér ló2r1ing lór1ism ló2rí lór1old ló2rü ló2s1aj lósa2n lós1any ló1ski ló1sla ló1spe ló1s2po ló1s2rá lós3s ló1s2ta ló1str ló1sz ló1t2rá ló1tre ló1tré ló1tri ló1tro 2lóvod l1ó2vó ló2zad ló2z1a2k ló2zal lóza2n lóz1any lóza2t1e ló2zál ló2z1es ló2zim ló2z1ir lóz1isk lóz1ism ló2zolv ló2ző ló2zü ló2z1ű 1lö lö2bö lö2ca löc3c lö2ch lö2cő 2l1ö2dé lö2ka lö2ká lö2ko l1öldö löl2t1a löl2tá 2l1öltés l1ölthe löl2to l1öltöt l1öltöz l1öltő 2l1öml lö2möl lö2na lö2ná lön2b1ékét lö2ne lö2né lö2n1o lö2nó lö2nu lö2nú lö2pa lö2pá lö2pe lö2pöl löpü2 lö2p1ülé lö2p1ülő lö2re lö2rö lös3szá 2lössze lö2sü lö2sze lö2szis 2l1ötl löt2ter 2l1ötv 2l1öv. 2l1övb l1ö2ve. l1ö2vez 2l1övh 2l1övn l1ö2vön 2l1övr l1ö2vük 2l1övv 1lő lőa2c lőa2n lőá2g lő1bl lő1br lő2dad lő2dá 2lőde. 2lődei lő2del lő2d1ék lő2din lő2d1iv 2lődje. 2lődjét lődköz1 2lődöke 2lődökn 2lődökr 2lődöt. lő2d3ze lőe2l lőe2s 2lőesé lő1fl lő1f2r lőgépi2 lőgé2p1ip l1őgyel 2lőhű lői2ta 2lőít 2lőkése lő1kl lőko2r1út lő1kv 2lőlege 2lőnn 2lőny. lő2nyal lő2nyár 2lőnyb 2lőnye. 2lőnyei lő2ny1elvi 2lőnyéb 2lőnyén 2lőnyér 2lőnyét 2lőnyév 2lőnyh 2lőnyk 2lőnyn 2lőnyö 2lőnyr 2lőnyt 2lőnyü lőőr2s1é2g 2lőpán lő1pl lő1pr lő1ps 2lőreh 2lőrej lőre3m 2lőret 2lőréb lő2r1is lő2rül 2l1őrz lő2sál lő2sin lő1s2ka lő1ská lő1sla lősó2 lő2sór lő2s1ót lő2ső lő1s2pi lő1spr lő1srá lős3s lős2tar lő1str lő1sy lősz2 lős3zára lős3zárr lő1szf l1ő2szít lő1szt 2lőtét. 2lőtolá lő1tre lőu2t lőü2l 2lővig 2l1ő2zét 2lőzié 2lőzl 2lőzm 2l1ő2zük lp1a2lag l2p1a2lap l2p1alát l2p1a2láv l2p1alk lpanto1 l2p1any l2p1áll l2p1átm l2p1áts lpcsa2p1 l2p1eg lp1e2lu l2p1e2m lpen1n l2p1e2rő l2p1ég lpé2l l2p1éle lpé2r l2p1éri l2p1i2d l2p1i2na lp1izm lp1i2zo l2p1ív l1p2lá l2p1old lpo2n lpon1á lp1p2r l1prd l1p2ri l1p2ro l1p2rób lpu2s lp1uszo lrá2k1e lrei2 lre1p2ré lre1sz lreü2 lsa2v1a2m lság3g ls1eprik ls2ho ls2ka ls2ká ls2ki ls2la ls2lá ls2li ls2ma ls2mi lsors1s lsóé2r lső1sz2 l1s2pa l1s2pe l1s2pé l1s2pi l1s2po l1s2pó l1sp2r l1s2rá l1s2ró l1s2ta ls2tá lste2i l1s2ti l1s2tí l1s2to l1st2r l1s2tu l1s2tú lsza2ké lsza2k1ü lszá2rú l2sz1e2gű l1sz2f l1sz2l l1sz2p lszt2 lsz2tá l1sztr l1sz2v lta2gyá lt1ajá lta2lapb lta2l1á2s lta2l1á2z lta2len lta2l1ev lta2l1é2 lta2liz ltal1l lta2lö l2t1amp l2t1apr lt1ará l2t1arc lta2riá lt1assz lt1aszt l2t1a2u lt1azo lt1ág. lt1á2ga lt1ágb lt1ágg lt1ágn lt1ágr l2t1áll ltána2 ltá2nan ltá2rada ltár2s1ág lt1árur ltá2s1á2g ltá2tal l2t1átr lt1bl lt1br l2t1ell l2t1elö l2t1emu lte2rad l2t1e2reik l2t1erő l2teru lte2t1a2 lte2ték l2t1ékné lté2l lt1éle lt1élm lt1érc l2t1érz lté2sa lté2s1é2g ltés3s lté2t1é2 lté2ves. lt1fl lt1gl lt1gr lt1ide ltig2 l2t1i2gé lti1kl l2t1ill lt1imp l2t1ind l2t1ing l2t1i2o l2t1isi lt1ism l2t1ist l2t1i2ta l2t1ín l2t1í2r lt1ít l2t1í2v ltív1e2l l2t1í2z lt1kr l2t1oml l2t1ord l2t1org l2t1orj l2t1orr lt1ors ltos3s l2t1o2x ltó1p ltó1s2p ltó1sz ltót2 ltö2l l2t1ölé lt1önt lt1öss ltőa2 ltőe2l lt1ő2rö lt1pl lt1pr ltra1s lt2rág lt2rén lt2rik lt2ril lt2róf l1t2rón lt2róp ltsé2g1el lt1sl lt1sp lt1st lt1t2r l2t1udv l2t1una ltu2n1i lt1ura ltu2sze l2t1u2t ltú2ri l2t1üg lt1ü2lé lt1üst l2t1ü2v lt1ü2zem 1lu lua2g luá2r lu2b1a2d lu2bal luba2n lu2b1as lu2bár lu2b1e2g lube2r lu2bes lu2bél lu2b1in lubó2 lu2bór lu2bö lub1t2 lu2bü 2ludj 2ludv lu1dy lue2l lu2esé lugas1s lu2gat lu1g2l 2l1u2gor 2l1ugr lui2r 2l1ujj lu1kl lu2k1os lu2k1o2v lu2l1inf lu2lí 2lulr lu2mad lu2maz lu2mál lumen1n lu2mer lu2mes lu2m1i2k lu2m1ip 2lumí lum2pel 2lund l1unh 2l1u2ni l1unj l1unl l1unn l1u2no l1u2nó l1unv lu2rak lu2ram lu2rat 2l1u2ru 2l1u2rú lu2sad lu2s1aka lu2sakr lu2sal lu2s1a2n lu2s1ág lu2sál lu2s1e2r lu2s1érté lu2sim lu2sis lu2sír luskész1 lu2s1ó2 lusö2 lu2sör lu2ső lus3sze lus3szi lust2 2lutánz 2l1utc lu1t2h lu2tód lu1tra lu2zs 1lú lú2d1a lú2dá lú2de lú2dét lú2d3z lú2ga lú2g1á lú2ge lúg3g lú2gi lú2gol 2l1újd 2l1ú2jí lú2ju lú2ri lú2ru lú2rü 2l1ú2sz lú2té. 2l1útv lú2z1a2n 1lü lü2cs lü2dí lü2dü lü2ge lü2gy lü2lá l1üldö lü2lel lü2l1e2m l1ülep lü2lé lül1ér 2l1ülés 2l1ülhet. 2l1ülhetne 2l1ülhets lü2lí 2l1üljek 2l1ülnek 2l1ülnék 2l1ülni 2l1ü2lö 2l1ü2lő 2l1ülsz. 2l1ült. l1ülte. 2l1ültek 2l1ültem 2l1ültes 2l1ültet. 2l1ültete 2l1ülteti 2l1ültetj 2lültetl 2l1ültetn 2lültets 2l1ültett 2l1ültetü 2l1ültetv 2lülté l1ültéi l1ülték l1ültél l1ültén l1ültér l1ültét l1ültn 2l1ültü lü2lú lü2lü 2l1ülün 2l1ülve. 2l1ünn lü2re lü2rí lü2rü lü2sz lü2te lü2té lü2ti lü2tö lü2tő lü2tü lü2ve lü2vö lü2ze lü2zé 1lű lű2rá 2l1űrb 2l1ű2ri l1űrl lű2ze lű2zé lű2zi lű2zö lű2ző lű2zü lva2dat l2v1adm lvaj1ak lva2j1e lv1akad l2v1akc l2v1a2la l2v1alg l2v1alk l2v1ant l2v1a2ny l2v1a2rás l2v1a2z lvá2gy1ón l2v1állat l2v1állt l2v1áp lvá2rain l2v1á2rak. lvá2ras lvá2rár l2v1árny lvá2rol l2v1á2rul lvás3s lvá2szi lv1áta lv1áth lv1átk lv1br l2v1e2dz lv1egys lv1egyv lv1e2kéb l2ve2leme l2v1elk l2v1ell l2v1eró l2v1ex l2v1é2gés lvé2gül l2v1élm l2v1é2neke l2v1ép lvé2ri. l2vértel l2v1érté l2v1é2rü l2vérzési lvé2sza lv1fr l2v1i2de l2v1i2do l2v1iga lv1iko l2v1i2m lv1inté lv1i2pa l2v1iro l2v1irt l2v1isko l2v1ism l2v1izm l2v1izo l2v1í2ve lvíze2 lvíz1es lv1kl lv1kr l2v1ok l2v1old l2v1olv l2v1onto l2v1op l2v1or l2v1os lv1ödé lvö2l l2v1ölé l2v1ölt l2v1ön l2v1ös l2v1öv l2v1ö2z lv1ő2r lv1ős lv1pr lv1ps lv1sp lv1st l2v1ut lv1új l2v1üg l2v1üt l2y 1lya lya2dat 2ly1adm 2ly1a2dó 2lyagy. 2lyagyr 2lyajt 2ly1a2kas ly1akc 2ly1akná 2lyakós 2lyakt ly1a2lat 2ly1alb 2ly1alk 2ly1alm ly1a2lom ly1alt lya2maj lya2mará lya2m1el lya2mem lya2m1érté 2lyang 2lyani lya2nyag ly1a2nyá ly1a2pán lya1p2r 2ly1arc lya2sal ly1aspe ly1assz 2ly1atl lya1t2r 2lyaty 2lyazo 1lyá 2lyábé 2lyábr 2ly1ág ly1áld ly1áll 2ly1áp 2ly1á2rad 2ly1á2rak 2ly1á2ram 2ly1á2rat ly1árk 2ly1árn 2ly1árr 2ly1á2ru lyás3s lyá2sz 2lyáta 2lyátf 2lyáth 2lyátlá 2lyátlé 2lyátm 2lyáts 2lyátt 2lyátv ly1bl ly1br ly1dr 1lye lye2ga ly1e2gye lyegyez1 ly1ej 2lyeke. 2lyekek 2ly1e2kéb 2ly1e2kérő ly1e2le ly1elf ly1elh ly1ell ly1elm ly1e2lő ly1elr ly1els ly1elt ly1elü ly1elv ly1elz lye2m1a 2lyember 2ly1e2mel lye2min 2lyemlí 2ly1eng ly1erk ly1e2rő 2ly1esd 2ly1esemé 2ly1e2sete 2lyeseté 2ly1e2sett 2lyesél 2ly1e2sés 2ly1este 2lyeszk 2lyeszm 2lyeszű 2lyetet 2lyevő 2ly1ex 1lyé 2ly1ég 2lyéhe. 2lyéhen 2lyéhet lyé2l ly1éle ly1élm 2lyéneke 2ly1ép 2ly1ér. 2ly1érc 2ly1érd 2ly1é2ré 2ly1érm 2lyérő. 2lyérői 2lyérők 2ly1érr 2ly1érte 2ly1érté 2ly1é2rü 2ly1érv 2ly1érz ly1ész 2ly1étt 2lyév. 2lyéve. 2lyévei 2lyévek 2lyéven 2lyévet 2lyévév 2lyévi 2lyévr 2lyévv ly1fl lyf1ölt ly1gl ly1gr 1lyi 2lyibo 2lyideá 2lyideg 2lyiden 2lyidi 2ly1ido 2lyidő lyié2h lyi2g 2lyiga 2lyigá 2ly1ige 2ly1igé 2ly1iha 2ly1ill ly1ima 2lyimá 2lyimp 2lyind 2lyinf 2ly1ing 2ly1ini 2ly1int 2lyinv 2ly1i2p ly1i2rat 2lyirá 2lyiri 2ly1iro 2lyirr 2lyirt 2ly1isk 2lyism 2lyisp 2lyist 2ly1ita 2lyivad 2ly1i2z 1lyí 2ly1íg 2ly1ín 2ly1í2r ly1ív ly2kiz ly1kl ly1kró 1lyn. 1lyo 2ly1ob 2lyodú 2ly1of 2lyokal 2ly1okl 2lyokm 2lyokoz 2lyokta lyo2l ly1ola ly1old ly1oll ly1olt ly1olv lyo2m1as 2ly1op 2ly1o2r 2ly1osz 2ly1ott 1lyó ly1ódá lyó2s1á 1lyö 2ly1öb 2ly1ö2l 2ly1ö2r ly1öss 2ly1öv 1lyő ly1ő2r ly1pl ly1pr lyrádi2 lyre1p 1lys. ly1sk ly1sp lys2t lyszá2m1é ly2tac ly1t2r 1lyu 2ly1ud 2lyugr 2ly1uh 2ly1uj lyu2kás 2lyuni 2ly1u2r 2ly1u2t 1lyú 2lyújs 2ly1úr. 2lyúth 2lyútr 2lyútt 2lyútv 1lyü 2ly1üd 2ly1üg 2lyünn 2ly1ür 2ly1ü2v 2ly1üz 1lyű 2ly1űr. 2ly1űrh 2ly1űrl 1lywo lyze2t1el lzás1s lze2ta lze2t1e2l lze2t1ér. lzé2sa lzőa2 lzőe2 lző2s1orr lzus3s lzu2s3z 2m. 1ma maa2d ma1bra 2m1abs ma2cél. ma2célb ma2célt 2madag 2m1adap ma2datb ma2dato ma2datt madás1s ma2d1é2v madókész1 ma2dóz 3m2a3dz mae2r maé2r ma1f2ra ma1fri ma2gac ma2g1a2dato ma2g1a2dá ma2g1a2dó ma2g1a2du maga2l mag1ala ma2ga2n mag1any maga2r mag1ara magas1s ma2g1asza mag1azo ma2gág mag1áll mag1á2ré mag1árn mag1árr mag1árt mag1áta ma2g1áto ma2geb ma2g1el 2m1aggr ma2gid ma2g1i2k ma2g1í magkia3dó ma2g1or ma2g1osz mag1óra ma2g1óv ma2g1u2r ma2g1ü2 2m1agy. 2m1agyb 2m1a2gyu m1ahh ma2il. ma2ilt mai2z 2m1ajta maj2ti ma2kará ma2kác 2m1akc mak2k1e2 2makkr 2m1akku ma1klu 2m1a2kol. ma1k2rém ma1k2ri 2makro m1akti ma2kus malac3há mala2c3s 2malag mala2g1ú ma2laku 2m1alakz 2m1a2lan 2m1a2lapí malasz2t1a 2m1alb 2m1alc 2m1ald 2malg m1algo 2m1alj 2m1alk malo2m1e mal1os m1alr 2m1alt. mal1th 2m1a2lu 2malv 2m1amp 2m1a2nal ma2nat 2maná ma2n1eg 2m1angi 2m1anto 2m1antr 2m1a2nya. ma2nyag 2m1a2nyá 2m1a2nyó mao2k ma2pa. ma2pas 2m1a2pát ma1p2l ma1p2re ma1p2ré ma1p2ri ma1p2ro 2m1aps 2m1a2rány 2m1arb 2m1arc. 2m1arcc 2m1arch mar1cko 2m1arcu 2m1arcú 2m1a2rén ma2r1i2si mar2k1al mar2k1in mar2k1ón mar2k1ó2r 2marm maro2k1 ma2romá maros1s marók2 maró1kh maró1kk maró1kn maró1kr ma1ry 2m1arz ma1s2ká ma1s2pe ma1spr ma1s2rá mast2 ma1s2ta ma1ste ma1str masz1egy masz1e2me ma2sz1ét ma2szév ma2szis maszí2v masz1íve masz1ös mat1ada mat1alap mat1anya ma2taz ma2tág matá2raka ma2t1á2ras mat1á2rár ma2t1árn ma2t1á2rú ma2t1áz ma2t1e2g mat1eli ma2t1ell mat1elő mat1elt ma2t1eme mate2s ma2tél ma2t1érte matfé2 matfél1 matfélé2 ma2tid ma2t1ind ma2t1inf ma2t1ing ma2t1int ma2t1örö ma1t2ran mat2rág mat2tin ma2t1ut 2m1a2tya ma2tyá 2m1a2uk mau2ra ma2uri ma2us mau2ta 2m1a2uto 2m1a2vat ma2z1a2l ma2zál ma2z1átl ma2zel mazókész1 ma2z3sű 1má 2m1á2bé 2m1ábr má2cs1as má2cs1e2 má2csin má2csir má2csis má2csó má2csü má2fá 2m1ág. 2m1á2ga 2m1á2gá 2m1ágb 2m1á2gé 2m1ágg má2gi. 2m1á2gig 2m1ágk m1ágna 2mágo 2mágó 2m1ágr má2guk má2gun 2m1á2gú 2m1á2gy mágya2d mágy1ada má2hí má2jan má2j1árt má2j1e2 májo2 má2j1ol májren2 má2j1ul má2jü máka2 má2k1al má2kar má2k1e2 má2k1ér. má2kil má2k1ó má2kő má2k1ü má2l1a2l 2m1álar má2lál 2m1álc má2l1e2 mál1ért 2m1állam m1állap m1állat 2m1állí m1állom 2m1álma 2m1álmo má2los má2m1as 2m1á2mí mána2 má2n1as má2nav má2nár mánc1c mán2ce mán2c1ég mán2cip mán2csé má2n1e má2n1in má2nis má2n1it má2n1ö2 má2nő máns3s mán2tac mán2tag mán2t1al mán2t1as mántá2 mán2t1ék mán2t1öl má2nú má2nü má2ny1a2d má2ny1a2g má2nyaj má2ny1aka má2ny1a2l mánya2n má2nyany má2nyap má2nyar má2nyau má2nyav má2nyaz má2ny1e2 má2ny1ér. má2nyérd má2nyérz má2ny1í2 má2ny1ó2 má2nyö má2po 2m1á2rad má2r1a2g 2máram má2r1a2n má2ras már1ass 2m1á2rat má2r1au má2r1ál má2re2 már1em má2rés má2r1id má2r1ik má2r1i2p má2r1i2si már1isk már1istá má2rí 2márkok 2márol má2rö má2rő má2rug m1á2ruh má2ruk m1árur má2rü má2s1a2d má2sal má2sap má2s1a2r má2s1av má2saz má2s1á2rá má2s1árn má2sás 2m1ásásá 2m1ásásn 2m1ásásr másbe2j1 másbejá2 má2s1e2 má2sír má2sor 2m1á2só má2sö má2ső mást2 más1tr má2s1ü2 más3zav 2m1á2ta mát1a2k 2m1á2tá 2m1átc 2m1átd máte2 má2ten 2máté 2m1átf 2m1átg 2m1áth 2m1á2tir 2m1á2tí m1átj 2m1átló 2m1átn má2t1ol 2m1á2t1ö 2m1átp 2m1átre 2m1áts 2m1átte 2m1á2tú 2m1á2tü 2m1átv má2zal má2ze mázi2a mázi2é má2z1i2s má2ző má2zsal mázs1e máz3sz mb1akc m2b1akk mba1k2r mb1akv m2b1a2lag m2b1alj m2b1alk m2b1a2na m2b1a2nya mba1p mb1a2var mb1a2zo mb1á2gy m2b1áll m2b1á2ron m2b1árró mbá2száv m2b1ászná m2b1á2szoka m2b1á2szokk m2b1á2szoko m2b1á2szokr m2b1áta m2b1áth mbeá2 mb1e2ce mbe1k2 mbe2led mb1e2leg m2b1ell mb1elr mb1elsz mb1epe mbe2r1a2g mbe2ral mbe2ran mbe2ras mbe2rá mbe2reg mbere2sz mber1eszű mbe2rev mbe2r1él mbe2r1é2s mbe2rimá mbe2ring mbe2risz mbe2rol mbe2ros mbert2 mbe2r1ú m2b1é2g mb1é2ke m2b1ékí m2b1ép mbé2ress m2b1érté m2b1érz mb1gr m2b1ide mbi2k1al mbi2ke m2b1illa m2b1i2na. m2b1i2nai m2binam mb1ind m2b1inf m2b1ing. mb1inv m2b1ipa m2b1izm mb1i2zom m2b1izz m2b1ív mb1íz mb1kl m1b2lú mb1ly m2b1ob mb1olda mbo2lyak mb1ond m2b1op m2b1ormá m2b1ormú m2b1o2roz m2b1oszl mb1öle m2b1öv mb1ő2si m2b1ő2sz mb1pl mb1pr mbrádi2 mb2rev mb2rok mb2ron mb1sp mb1st2 mb1sz mb1tr mbu2sze mbu2szí m2b1u2t mb1új m2b1üg m2b1ül m2b1üs m2b1üt m2b1üz mbvezé2 mc2lu mcsa2p1á2g mda1b2 mda1g2 mda1p2 mdi2ale mdi3ap md2ra md2rá md2ro md2ró 1me mea2l mea2n me2av me2béd mede2r1e2 2medény me1d2rá 2m1e2dz mee2s me2et 2m1eff me2gaba me2g1ala me2g1alu me2g1alv me2g1an me2g1a2r mega1sz2 me2gav me2g1á me3gám megá2s megá2t megá2z me2g1eg me2g1el mege2le mege2lő me2ger me2g1esem meg1eszt me2geta me2g1e2te me2gez me2g1é2l megés3s megész1 meg1f megg2 meg1gr me2gi meg1igá meg1inn meg1ir meg1is meg1itt me2g1í me2g1o me2g1ó2 me2g1ö2 me2gőr me2g1u2 me2gú me2g1ü2g me2g1ü2l 2megyez 2m1egyh 2m1egyl 2m1egys 2megyüt me2hető mei2rá me2k1ad me2k1ag mek1alk me2k1am mek1arc me2k1a2s me2k1att me2k1á2l me2k1á2p me2k1ár. me2k1ára me2kát mek1egy mek1ell me2kep me2k1ers meke2sz me2k1esze me2keszm mek1eszte me2kev me2k1ék me2kél me2k1ér. mek1érde me2k1érk me2k1érte me2k1érté me2k1éss me2k1éte me2kido me2kij mek1imá me2k1ing me2k1int me2k1i2p me2k1ist me2k1ita me2kír me2kít mek1k2 mek3lu me2kob me2k1ok me2k1old me2k1olt me2k1onk me2kop meko2r mek1ora mek1oro mek1ort me2k1os mek1ott me2k1ó2v mek1öltö me2kön mek1öröm me2k1öt me2k1ő mek1s meksz2 mek1t2 me2kuj me2kun me2kur me2k1ú2 me2küd me2k1üg me2k1üld me2k1ü2lé me2k1ü2lő me2küz m1elad mel1ak me2lág me2lál 2melb 2m1e2lef me2lekt mel1e2l 2m1e2leme 2m1e2lemz 2m1e2les 2melet mele2t1ér. 2m1e2lég 2m1e2l1é2l 2m1e2l1ér melés3s 2m1elf 2m1elgo m1elha 2m1elhá 2m1elhel me2lit. 2me2l1í2 2m1eljá 2melk m1elké m1elkí m1elkö mel2lál m1ellene mel2ler mel2l1ér. mel2ling mel2l1iz mel2lo mel2lö mel2l1u2 2m1elmé 2m1elnö me2los m1előde 2m1e2lőí m1e2lőle m1e2lőtt 2melőz me2lőző 2m1elr 2m1elszá 2m1elta 2m1eltá m1elter 2m1eltett. 2m1eltettn 2m1eltér 2m1elti 2melty 2m1elv. 2m1elvá 2m1elves 2m1elvn 2m1elvo me2ly1ék 2m1elz 2m1eml 2m1e2mul me2n1a2d me2nal me2nar me2nau me2nát me2n1e2g me2n1el me2ner mene2t1á2 mene2tö menés3s 2m1enges me2nil me2n1ip me2ní me2nö men2s1é2g men2t1ell men2tip men2t1is me2n1u me2nú me2nya menye2ma me2om me2óe me1p2h me2pik me2pos me1p2r mera1p2 mer1ass 2merdő 2m1e2rec 2meredm mer1egy 2m1e2rej me2r1e2l me2r1eml mere2t1a mere2t1e2l mere2t1ér. 2merezőkh me2r1ép me2r1il me2rim mer1inf mer1ing me2r1ip 2mernyő me2r1ol me2ror me2r1os me2rov 2meről 2merősí mers2 mer1st mer1tró me2r1ü2g me2sas me2s1emb 2m1esemén mese1s 2meseté 2m1e2sett 2mesély 2m1e2sésé 2m1e2sésh 2mesésk 2mesésr 2meséss 2mesést 2m1e2ső me1s2po 2m1estb 2m1este. 2m1estek 2m1esté 2m1estf me1s2tó 2m1estr 2m1estün me2szan 2meszem me1sz2tá met1anya meta1s metasz2 me2t1e2gy met1ell 2m1e2teté met1ing me2tór me2tú me2tűd 2m1e2ug me2uk meus3s meu2t me2vő me2zac me2z1aj meza2k me2zau me2zál me2zedé me2zeg me2z1elj me2z1ell me2zelőh me2zer mez1ere me2z1ék me2z1ér. me2z1érd mez1éret me2z1é2ri me2z1id me2zim me2zin me2zio me2zír me2z1ol me2z1or me2z1ö mezőe2 me2z1ő2rö me2z1őss 2mezrem m1ezrese m1ezresr m1ezrest me2z3sa me2zsá me2zsö me2zu me2zú 1mé mé2ber 2m1ébr mé2cs1a2 mé2cso mé2g1a mé2ge még1eg mé2gé mé2gi még1is mé2g1o2 mé2gő mé2gú mé2h1a2 mé2h1á mé2heg mé2hel mé2hir mé2h1is mé2h1or mé2hö méhren2 2méhsé 2m1éj. 2m1éjb mé2jes 2m1éjs méka2 mé2k1ad mé2k1aj mé2k1ak mé2k1al mé2k1an mé2kar mé2kaz mé2k1á2 mé2k1e2g mék1elh mék1ell mék1e2lő mé2k1ese mé2kev mé2kez mé2k1é2k mé2k1é2l mé2kid mé2kirá mé2kí mé2k1o mé2k1ö mé2kő mé2k1u2 mé2k1ú mé2le. 2m1é2lel mé2les mé2lez 2m1é2lén 2m1élm mé2lya mé2lyá mé2lyeg mé2ly1ú mé2n1a2r mé2n1a2t 2ménekb 2ménekh 2ménekl mé2n1el mé2n1é2k mé2n1és mé2nid mé2nin mé2n1is mé2niv mént2 mé2ny1e2g mé2ny1e2l mé2nyer mé2nyék mé2nyim mé2nyír mé2ny1o mé2nyö mé2nyú ményü2l mé2ny1ülé mé2pí mé2pü 2m1érc. 2m1é2retts 2m1é2rén mé2rér mérés1s 2m1é2rév 2m1é2rie 2m1é2rin 2m1érké 2m1érlel mé2r1ón 2mérteke 2m1értes 2m1értér 2m1értés 2m1é2rül mér2v1a2 2m1érz mé2s1a2 mé2s1á2 mé2s1e2l mé2s1er mé2sez mé2sin mé2sö més3sza mésza2 mész1al mé2sz1ál mé2sz1á2ra mé2szed mé2sz1el 2mészl mé2sz1ő mész3s 2mészté 2mészth 2mészti 2mésztj 2mésztl 2mésztü 2mésztv mé2sz1ü2 mé2t1ad mé2t1ak mé2t1a2n mét1árt mét1elho mét1elta mé2t1e2v mé2tég 2m1étje 2m1étjér 2m1étjév 2m1étjü 2m1étke. mé2t1o mé2tö métő2 mé2tőr mé2t1u mé2t1ű 2m1év. 2m1évb 2m1é2ve. 2mévei 2m1é2vek mé2ven mé2ves 2m1é2vet 2m1é2véb mé2vén 2m1évf 2m1évh 2m1é2vi 2m1évk 2m1évn 2m1évr 2m1évs 2m1évt 2m1évv mé2z1a mé2z1á2 mé2zeg mé2zil mé2zim mé2zin méz1ism mé2zit mé2zí mé2z1o mé2z3s mé2zu mé2zű mfa2l1e2 mfa2lom mfa1s2 mfé2m1a2 mfit2 mfi1tr mf2la m1f2lo mf2ló mf2lu mfog1adat m1f2rak m1f2ran mf2rá m1f2re m1f2ri m1f2rí m1f2ro m1f2rö mgé2p1e2l mgépi2 mgé2p1ip mg2li mg2ló mgör2cso mg2ra mg2rá mha2sábr mhossz1út 1mi mi2aa mi2aá mi2abo mi2ac mi2ae mi2aé mia1f2 mi2afr mi2ag mi2ah mi2aí mi2ale mi2amé mi2ao mi2aó mi2aö mi2aő mi2a1p mi2aré mias2 mi2aszá mi2aszé mi2aszi mi2aszó mi2atá mi2ati mi2ato mi2aü mi2av 2m1i2áz mi1bl micsa2p1 2m1i2deá 2m1i2deg 2m1i2dei 2midej 2miden mi2dent 2m1i2deo mi2dén mi2dio mi2dió mi2dol 2midő m1időz mie2l mi2éf mi1fl mi1fr 2m1i2gaz 2m1i2gén mi1gri 2m1ihl mii2d mi1k2li mi1klu mi2kono mi2kont 2miks mi2lal 2mille 2millu 2millú mi2ma. mi2máh mi2mit mi2mór mi2naj 2m1i2nam mina2n min1any 2m1i2nas mi2n1ára min2c1e2 min2ch min2d1a2 2m1indá min2dek min2d1er min2din 2m1indí 2mindu mi2neg mine2s 2minfl 2m1infú min2g1á 2m1ingé min1g2h min1inj min2k1a2l min2k1an min2k1as min2kec min2kó min2kö 2m1insp 2m1i2nuk mi2nü 2m1inz mio2n1a mio2n1á mio2r mió2r mi1p2l mi1p2r mi2ram 2m1i2rat 2mi2rán 2mirg 2mirh miri2gyel 2m1irk 2m1i2rod 2m1i2rom mi2rón 2m1irr mi2sal mis1elv mis1epe mis1ing 2misit mi2s1í2r mi1s2pi mis3szab mis3szer mi2s1ü2t mi2s1ü2v mi2s1ű mi2szár mis3zár. mi1sz2f mi2tac mita2n mit1any 2m1i2tat 2mitác mit1ár. mit1árá mit1árh mit1ári mit1árk mit1árn mit1árr mit1árt mit1árú 2mitbo mit1ing miti2s 2mitlá mi2tök mi1tri 2mitro 2mitrú mi2tür miumé2 miu2min miu2s 2m1i2vad 2m1i2vó mi2x1i mi2xö mi2xő mi2zé. mi2zét 1mí m1í2gé mí2ja mí2já m1íns 2m1í2rá 2m1í2ró m1ív. mí2vá m1ívb mí2vé m1ívh m1ívr m1ívv mí2zü mí2zű mjé2ná mjobb1o mjo2g1á2s m2j1ol mj1ósá mj1ős mkaró2 mka2r1ór mke1p mkia2 mkiá2 mkie2 mk2la mk2li mk2lí mk2lo mk2lu mkó2rost mk2ra mk2rá mk2re mk2ré mk2ri mk2rí mk2ro mk2ró mk2va mk2vó mla1f mlapá2r mla2p1áro mla2p1e2 mla2pin mla1s2t mlás3s mlá2s3z mle1g2 mleí2 mle1kn mle1pla mlé2k1a2 mlé2k1á mlé2k1el mlé2k1est. mlé2k1ér. mlé2k1ol mlé2kos mlé2kó mlé2k1ú2 mlé2szé mlo2k1ál mlo2ké mlő2s1a2 mlő2s1ű2 mmag1g mma1gl mmai2 mmas2 m2m1atk m2me. mme2g1é mmifé2l1é2v 1mo mo2be 2m1obj moci1 2m1off mo1g2ráf. mo1g2ráff mo1g2ráfk mo1g2ráfn mo2gy1a2 mohu2 mo2is mo2kab mo2k1ad mo2k1a2k mo2k1a2l mo2k1a2n mo2kar mo2kád mo2k1ál mo2k1á2s mo2k1e2 mo2k1il mok1k2 mo2k1ol mo2k1or mo2k1ó2 mo2kö mok1t 2m1oktat moku2 mo2kur mokú2 mo2kús mo2k1úto mo2kü 2m1o2laj 2m1olda m1oldó 2m1o2lim molli2 mol2l1in 2m1olló molói2ko 2m1oltár 2m1oltás 2molvad 2molvas 2m1oml mon1acé mo2n1a2d mo2n1a2l mo2n1an mo2n1a2p mona2r mo2n1as mo2n1áll mo2neg mo2n1er mo2n1is mon2or mo2nö mons2 mon1sp mon1tré mo2nü mo2nű monyá2 mo2nyáz mo2or 2m1opc 2mope mo2per mo1p2l 2m1opt mo2r1ad mora2n mor1any morá2la 2m1ordí mo2r1el mo2ren mo2r1e2r mo2r1est mo2rid 2morie mori2s mo2r1isk mo2r1iszo mor1izg 2morjaia 2morjaié 2m1orjait mo2r1ol mo2r1ont mo2r1ón mo2r1ó2r mo2rós mo2rö 2m1orr. mor1s2 mort2 mor3tá mor1tr mo2rü mo2rű mo2sál mo2s1e 2mosto 2m1ostr 2m1osty mo2sü mo2szal mo2szis 2m1oszlo mo1t2h 2m1ottha mot2to mo2un mo2us2 mo2vi mo2xi mo3zso 1mó móá2g mó1bl mó2ch mócsa2p1 mócsapá2 mó2d1a2l mó2dau mó2dák mó2dár mó2d1e2 mó2dip mó2d1o2r módó2 mó2d1ór módu2 módus1 mó1fl mói2ko mó1k2l mókus1s mó2lar mó1p2r mó2rak mó2rar mó2rág mó2rái mó2ráj mó2rám móri2as móró2 mó2r1ón mó2rö mó1s2k mó1the 1mö mö2bö mö2ko möl2cs1a möl2csá möl2csel möl2cs1es möl2cs1ér. möl2cs1il möl2cs1o möl2cs1ő mö2le mö2nu mö2ro mö2r1ő m1ötl mö2ve mö2vö mö2vü mö2vű 1mő mőa2n mőá2g mőe2l mőe2r mőé2l mőé2te mő1kl mő1ps mő2r1á2r 2m1őrh 2m1ő2ri mő2si mő2sü mős3zár mőü2l mő2zi mpa1dr m2p1akc m2p1aktá m2p1áll m2p1árko m2p1átj m2p1átk mp2ci mp1elt mp1fr mp1ind mpi2re mp2lak mplo2mal m1p2lu mpon1d2 m2p1ord mporta2 mpor2t1al mpor2t1á2r mpor2t1e2 m2p1osztás m2p1ös m1p2ref m1p2rep m1p2rés m1prib m1p2ric mp2rio m1p2rod m1prof m1prog m1proj m1p2ro1p m1p2rot m1p2rób m1p2ru m1p2szi m2p1u2ta m2p1utó m2p1üz mra1p mren2d1ő2 mré2m1 msa2vo ms2ka ms2ká ms2ki ms2ko ms2lá ms2mi ms2ni ms1ond ms2pa ms2pe ms2pi ms2po ms2pó ms2rá ms2ta ms2tá ms2te ms2ti ms2tí ms2to mst2r ms2tú msza2ké msza2k1ü mszáraz1 msz2c mszé2dem m1sz2f mszín3n msz2l msz2m m1sz2p msz2tá m1sz2v mta2n1ó2 mtára2d mtá2r1ada mtés3s mtőkész1 mtran2s mtransz1 mt2rá mt2re mt2ré mt2ri m1t2ró mt2rö mt2rü 1mu 2m1udv 2m1ugr m1ujj 2mulet 2mulz mu2m1ad mu2m1el mu2mél mu2m1és mu2min mu2m1ir mu2mis mu2m1iv mumkész1 mu2m1ó2 mu2mö mu2mő mumus1s mun1g mu2nok 2mur. mu2ral mu2ram mu2rat mu2rál mur1izm mu2r1u2 mu2sal mu2san mu2sar mu2sas mu2sat mu2s1á2g mu2sál mu2s1e mu2s1érté mu2sir mu2sor mu2s1ó2 mu2ső muss2 mus3sze mus2tárá mus2t1erj mu2szal mus3zav mu2szál mu2szás mu2t1a2g mu2tal mut1a2la 2m1utalá 2mutalv muta2n mu2t1any mu2tasí m1u2taz mu2t1á2ra mu2t1árb mu2t1á2ru 2m1u2tás 2mutca mu2t1el mu2til mu2t1in 2m1u2tol 2m1u2tód 2m1u2tóp mu2t1ö mu2tü 1mú mú2jí múl2t1e2 múl2tol 2m1úr. mú2ri 2m1úrn 2m1ú2sz 2m1útb m1úth 2m1ú2ti 2m1útj 2m1útk 2m1útm 2m1útn 2m1ú2to 2m1útr 2m1útt 2m1útv 1mü mü2dí mü2dü mü2gy mü2ná mü2re mü2rí mü2rü mü2te mü2té mü2tő mü1tz mü2ve mü2vö mü2ze 1mű mű1bl mű1br mű1fl mű1fr mű1gr mű1kl mű1pl mű1pn mű1pr 2m1űrl mű1sp műsú2 mű1sz műtőkész1 műves3s mű2zé mű2zi mű2zö mű2ző mű2zü m2v1a2dot mvágya2d mvá2gy1ada mverés3s mw2hi mza2t1e mzás3s mze2r1o mze2t1a2 mze2t1á2 mze2t1e2g mze2t1el mze2ter mze2tesz mze2t1é2k mze2t1érd mze2to mze2t1ö2 mze2t1ő2 mzé2s1a mzé2so mzókész1 mzőe2r mz2rí 2n. 1na naa2d n1abbó 2n1abr 2n1abs na1cl 2n1a2dag 2n1a2dás 2n1add na2dek 2n1adm 2n1a2dó na1d2re 2n1adt na2du. na2dus na2ei naé2r 2n1aff na2ga. na2gár na2git na2gón na1grá nagy1agg na2gy1a2l na2gyapj na2gy1as na2gyav na2gy1é2k nagyú2 nagy1úr nagy1út na2ire na2ji 2n1ajk 2n1a2kad nakaró2 nak1á2sz na2k1át n1akko na1kli na1klu nako2l nak1ola 2n1a2kó. na1k2ré n1akti 2n1a2kus na2k1útn na2l1a2dó 2n1a2la2g1 na2l1aj na2l1a2l na2lana 2n1a2lapa 2n1a2lapd na2lapr na2lapt na2lar na2lav na2l1ábr na2lág na2l1á2l na2l1á2ro nal1á2t1ö na2l1áts na2l1elá na2l1ell nal1eng nal1ent nal1ég. na2l1ék na2l1éri na2lid na2l1ing na2l1i2o na2l1í2r 2nalízisb 2nalízise 2nalízisé 2nalízish 2nalízisi 2nalízisk 2nalízisn 2nalízisr 2nalízist 2nalízisü 2nalj. n1alja. 3naljac n1aljad n1aljai 2naljak n1aljam n1aljat n1alji 2naljon 2nalju 2naljz 2n1alkat na2l1ob na2l1ol na2lop nal1osz na2l1ó2r na2l1ő nalt2 nal1tr na2lulj na2l1ut na2lü na2mer 2namitbo 2n1a2mite 2n1a2mitg 2namitha 2n1a2mitk 2n1amitl 2namitm 2namitö 2n1a2mitp 2namitro 2namitrú 2namits 2namittá 2namittö 2n1amö 2n1amp 2n1a2nal 2n1ang 2n1anh nano1 nanog2 na2nód 2n1a2nyag nao2l naó2r 2napa. nap1adó na2p1a2g na2p1ala na2p1alk nap1a2pa nap1apá nap1ará na2p1as na2pád na2p1á2g na2pák nap1áll na2pám na2p1árb na2p1átm nape2l nap1ell na2pem nap1est na2p1ill na2p1ing na2p1int nap1isk na2pí nap2lat na2p1ola nap1orm napos1s na2p1ostá na2p1ott na2pó. na2p1ó2r napp2 2nappo nap1pr n1aprí 2napróz na2p1u2t na2p1úr 2n1a2rai 2narann 2n1arany. 2n1a2ranya. 2n1a2ranyá 2naranyb 2naranyh 2naranyk 2naranyn 2naranyr 2naranys 2n1aranyt 2n1arc. 2n1arcá narchi2ab 2n1arco 2n1arcu 2n1arcú n1arró 2n1arz na2sév nas1isk 2nask na1s2ka na1s2rá nast2 na1s2ta na1s2tá na1str na2sz1an na2sz1árad naszkész1 nasz1üg na2t1ab na2t1aj na2t1alk na2t1alt nat1ará nat1áll na2t1á2ré na2t1árn na2t1eg nate3le na2t1elé nat1elle na2tél nat1érke na2t1érv na2t1i2m na2t1ing na2t1old nat1ors na2t1osz na2t1u2t na2tül natű2z 2n1a2ty na2uc na2ul nau2ra na2urá nau2s na2uto naü2z na2vart na2vat 2n1avv na1wh 2n1azb na2zé 2n1a2zo 1ná 2n1á2bé 2nábr ná2caj ná2c3h ná2cí ná2csal ná2csap ná2cs1as ná2cse nác3sik ná2csis 2nácsolat nác3sor ná2csö ná2csü nác3sz ná2d1ala ná2dap ná2d1a2r ná2d1asz ná2d1a2v ná2dá nád1d ná2d1e2 ná2d1ö ná2dud ná2d1ü2 ná2d3z ná2ga ná2gá ná2gi ná2gu ná2gú ná2gy 2n1á2hí ná2k1ér. ná2kol ná2kü ná2lab ná2l1a2l ná2lana n1álar nála2te ná2l1az ná2l1át nále2 ná2l1eg ná2l1el ná2lem ná2les n2álé ná2l1ép ná2l1in ná2lir nál2is ná2lí 2n1áll. 2n1álla. 2n1állap 2n1állat 2n1állí 2n1állom nállóköz1 ná2lü ná2mí ná2mu ná2nad ná2n1al ná2nar ná2n1á2r nán2c1e ná2n1e2 náné2 ná2nét ná2nin ná2ní nán2se ná2nü ná2rad 2n1á2raka 2n1á2rakb 2n1á2rakh 2n1á2rakk 2n1á2rakn 2n1á2rako 2n1á2rakr 2n1á2rakt 2n1á2ram ná2r1a2n ná2rap ná2ras nár1ass 2n1á2rat. ná2r1att ná2r1av ná2r1ác ná2r1ál ná2r1e2 ná2r1éve 2n1á2riai 2n1á2riá ná2r1i2p ná2rí náró2 ná2r1ór ná2rő nár1s2 nárt2 nár1tr 2n1árud ná2rug 2nárun. nár1ur 2nárus náru2t nár1utá ná2rút ná2rü ná2s1as nás1áré ná2s1á2ru 2n1á2sás ná2s1e2 ná2s1i2k nást2 nás1tr ná2szan ná2szas ná2szág ná2szál ná2sze ná2szén ná2szil ná2szin ná2szis 2n1ászka. 2n1ászoks ná2sz1ö ná2sz1ú ná2sz1ü ná2tala ná2t1a2n ná2tál nát1ásv ná2t1e2 2n1áthi ná2t1i2o 2n1á2t1ir 2n1á2tí 2n1átlé ná2t1ö 2n1átru 2n1átug 2n1átut 2n1á2tú ná2tü 2n1átvi nba2ká nba2k1e2 n2b1é2kéb n2b1é2kén n2b1é2kér n2b1é2kév nb2la nb2lo nb2lú nbo2n1a2 nb2ra n1b2ri nb2ro nb2ró nburg2hi nc1acé n2c1ajá nc1ajt n2c1akn n2c1akt nc1a2la nc1alj n2c1alk nc1alt nc1alv nc1ana nc1ant nc1a2nya nc1ari nc1att nca2u n2c1ava n2c1ág nc1árb nc1árk n2c1árn nc1árt nc1á2sa nc1ásá nc1bl nc1br nc3csi nc3cso nc3csö nc3csu nc1dr ncea2 nc1egg n2c1eld nc1e2lek nc1e2lem nc1elm n2c1elv nc1e2red nc1eró n2c1eszt nc1etn n2c1ex ncé2g1ér ncé2hes n2c1ép n2c1évi nc1fl nc1fr nc1gr n2c3ha n2c3há n2che. nc3hel nc3het n2c3hé nc3hiá nc3hí nc3hol nc3hon n2c3hoz n2c3hó nc3hö n2c3hu n2c3hú nci2alis nci2aso n2c1ige n2c1i2gé n2c1i2ko nc1i2má n2c1i2na. n2c1ind nc1inf n2c1ing n2c1int n2c1irá nc1iro n2c1ist n2c1i2ta n2c1i2z nc1íj n2c1ír n2c1ív n2c1íz nc1kl nc1kre n2c1ob n2c1okta n2c1o2li nc1orv n2c1ott n2c1ölt. nc1öss ncö2t nc1őr nc1pl nc1pr n2cs1ab n2csac n2csad n2cs1ag n2cs1ajt n2csakt ncs1alap n2cs1alj n2csam n2csan ncsa2p1á2g ncsa2r ncs1ara ncs1arg ncs1aro n2cs1au n2csaz ncs1ágr n2cs1ál n2c3sár. n2cs1á2rá ncs1árb n2cs1árn ncs1árr n2csáru n2csáta n2csátá n2csátv ncs1elf ncs1é2rés n2csérte n2cs1érté n2c3sérü n2c3séta ncs1i2kon ncs1int n2cs1io n2csipa n2csirá ncs1irt n2cs1ism n2csita ncs1izz nc3síki n2cs1í2rá ncs1ízt n2csob n2cs1oks n2csokta n2csosz n2cs1ö2lé n2cs1ös n2cs1öz n2cs1őr. ncs1őrö ncs1s n2csur ncsu2t ncs1uta n2csút n2csüg n2csüt ncs3zár nc3sze nc3szó nc3szö nc1tr n2c1ud n2c1ug nc1uj n2c1ur n2c1új nc1út n2c1üg n2c1üt nc1üv n2c1üz n2c1űr nc1ya n2c3zá nc3ze n2c3zó nc3zö nc3zs nc3zü nczy1i nd1abl nda1br nd1a2dat nda2dás nd1add n2d1ajá n2d1akc n2d1akk nd1akt n2d1alj n2d1alr nd1ann nd1apó nd1a2rán nd1arr ndat1any nda2tap nda2t1eg nda2tin nda2tir nd1azo nd1azt nd1azz nd1á2rak ndás1s nd1bl nd1cl nd1dr nd1ebb n2d1e2kéb n2d1e2kéin nde2köz n2d1elf n2d1ellen n2d1elm nd1elö nde2mer nde2mu nde2m1ü nde2ná n2dennek nde1p2 nde2r1a nde2rál nde2ráz nde2rel nde2ro n2d1erő n2d1e2sett n2d1e2sés n2d1e2ső nde2sza n2d1e2szü nd1eza ndé2go ndé2kel nd1ékez ndé2kö n2d1éle nd1élm n2d1ép ndé2raj n2d1éssz n2d1észh n2d1észl n2d1észr n2d1é2te n2d1étt nd1fr nd1gr n2d1iga n2d1ige n2d1ill n2d1i2na. n2d1ing n2d1ins n2d1i2onj ndi2óé2 ndi2óf ndi2óm n2d1isza ndí2j1a2da nd1kl n2d1oá ndo2k1út ndo2rál n2d1orni ndo2r1ú n2d1ou n2d1ov ndóé2r nd1ó2ni n2d1ó2rá ndö2b nd1öss n2d1ö2z n2d1őr. n2d1ő2r1a2 n2d1őrb n2d1őrc n2d1őrd nd1ő2reg nd1ő2rei nd1ő2rek nd1ő2rel nd1ő2rék nd1ő2rén nd1ő2rér nd1ő2rét nd1ő2rév n2d1őrf n2d1őrg nd1ő2rig nd1őris nd1ő2rit n2d1őrj n2d1őrk n2d1őrl n2d1őrm n2d1őrn nd1őrok nd1őros n2d1ő2rö nd1őrős n2d1őrp n2d1őrr n2d1őrs n2d1őrt n2d1őrú n2d1őrv nd1pr nd2raz n1d2ruk nd1sl nd1sp nd1st ndszá2m1út ndsze2r1e2l ndtár2s1a2d ndu2t n2d1uta nd1új ndú2rá nd1úsz n2d1üg nd1ünn n2d1üz n2d1űr. n2d1űrr n2d1űrt n2d1űz ndy2b ndy2h ndy2n ndy2r ndy2t ndy2v nd3zav nd3zár n2d3ze n2d3zó n2d3zu 1ne nea2j nea2k nea2la ne2alo nea2n nea2r ne2bé ne1bl ne1dra ne1d2rá ned2v1el ne1dy 2n1e2dzé 2neff 2n1e2ger 2n1egér. ne2g1ö n1egy. n1egyb ne2gyek ne2gyen ne2gyes ne2gyet ne2gyez 2n1e2gyé n1egyf n1egyh ne2gyig n1egyk n1egym n1egyn n1egyr 2n1egys n1egyt ne2gyün nehéz1 2n1ehh nei2g neí2r ne2k1aj ne2k1a2n ne2kát ne2k1e2g nek1erő nek1é2jé ne2kék nek1ékn nekie2 2nekj nek1k2 2nekka 2nekki ne1klu ne2k1ok nekö2r ne1kreá nek1t2 ne2k1üg nek1üldö ne2lag ne2laj ne2l1an ne2lál nelá2r ne2lef ne2leg n1elegy. nel1e2le nele2ma nelem1el nel1e2més nel1eng ne2ler ne2l1ép nelfé2 nel1g2 2n1elha ne2l1id ne2lim ne2l1in n1elló 2n1elnev ne2l1ot ne2l1ó2 ne2l1ö2 2n1e2lőa 2n1e2lőá ne2lőd ne2lőf ne2lőhí 2n1e2lőí 2n1e2lőké ne2lől 2n1előny 2nelőrej 2n1e2lőté 2n1eltér ne2l1ül 2n1elz ne2mak 2nemba 2n1ember neme2g nem1egy 2nemele 2n1emelk ne2m1esz ne2m1ér. ne2m1id nem1isz 2nems 2nemul 2n1eng 2n1enn nen2sa nense2s nen2s1ese nens3s nen2s3z 2n1enyv 2n1enz ne2ob ne2od ne2of ne2og ne2oh ne2oko ne2ola ne2oli ne2oro ne2pad ne2pelm ne2p1est ne2pid ne2p1ó2r ne2p1ut ne2r1a2d ne2r1a2k ne2r1a2n ne2r1a2r ne2r1as ne2raz ne2ráb ner2co ne2r1e2g n1e2rej ne2r1e2ke. ne2r1e2l ner1emel ne2r1er ne2rez ne2rég ne2r1él ne2r1ép ne2r1étt ne2r1id ne2r1iga ne2r1il ne2r1i2m ne2r1inf ne2r1ing ne2r1int ne2ris ner1k2 ne2r1ol ne2ror ne2r1os ne2ró ne2r1ön 2n1e2rő 3n2e3rőkü ner1s ner1tr ne2r1u2 ne2r1üg ne2s1aljá ne2sas ne2s1ál ne2sár 2n1e2setb 2n1e2setr 2n1e2sés 2n1e2ső nes3sza nes3szá 2n1esté 2n1esti ne2s1ü2v nesz1ál ne2s3zár ne2sz1él ne2sz1ű2 ne2t1ab net1a2la ne2t1a2ny ne2tál ne2t1át1 ne2t1e2g net1elá net1elm ne2t1előa ne2t1eml net1este ne2t1esz ne2t1etet ne2t1eti ne2t1é2k ne2t1é2l ne2t1ér. ne2t1érd ne2t1éré ne2t1é2rő. ne2t1é2rők ne2t1érr ne2térte ne2t1értő ne2t1é2rü ne2t1ész ne2t1é2ve. ne2tid ne2t1i2ko ne2t1int ne2tip netké2sz1ü ne2t1o2k ne2tol net1old ne2t1ő2 net2tév ne2tun ne2t1ut netü2l net1ülé ne2t1ü2z 2n1e2vő 2n1evv nexpor2t1ő2 ne1yé 2n1e2zer 2n1ezred 2nezüs 1né 2n1ébr 2nédl né1f2r 2n1ég. 2n1é2gek 2n1é2geté 2n1é2gető. 2négetőh 2n1é2getők 2négetőn 2négetőt 2n1é2gé 2n1égj 2n1égn 2n1é2gő 2n1égs 2n1égt 2n1é2gü né2gyer né2gyén né2gy1o né2gyök 2n1é2hes 2n1éhs né2kaj né2kak né2k1a2n né2kar né2k1á néke2l nék1ele né2ker né2kév né2kid nék1isz 2n1é2kí né2kó nékü2 né2kül n1é2les 2n1é2let 2n1élm né2lői né2lőn 2néneke 2n1é2neké népa2 né2pad né2p1ak né2p1al né2p1an né2pap né2p1as né2pau népá2 né2p1ál né2p1ár né2pát né2p1áz né2peg né2p1e2l népe2r nép1etet né2p1etn né2pev né2p1és nép1f2 2né2pí né2p1o né2p1ö né2pő nép1s né2p1us né2pú 2népül néra2 né2raj né2r1an n1érd 2nérde 2n1é2rem né2ré. né2rés né2ri. né2rin né2rip né2rö 2n1é2rő. 2n1érté né2rü 2n1érz né2s1e2l né2s1ég nés3szer nész1ak nész1al né2sz1á né2szeg né2sz1e2l né2sz1emb né2sz1e2sz né2sz1ék né2szik né2sz1í nészkész1 né2szó né2sz1ö2 né2szu né2sz1ú né2szül né2t1eg 2n1é2tel né2t1es 2n1é2tet néti2 né2tir né2tö né1t2r néva2 név1ada név1adá né2vaj né2var né2vav né2v1ág 2n1évbú 2n1é2ve. 2névei 2n1é2vek néve2l né2v1ele név1elő 2né2vem 2névenk 2névent né2v1e2r né2ves név1esz 2né2vet 2névéb né2v1é2l né2v1éri né2vérő né2v1érz né2vis 2névny né2v1o né2vö né2vő né2v1u2 né2vú né2vün né2za néziu2m1i2 nfe2lemé n1f2la n1f2lo nfluor1e nfol2ta n1f2rak n1f2rá n1f2rek n1f2ri n1f2rí n1f2rö n1f2ru nfüs2t1ölé n2g1abl n2g1a2dat n2g1a2dá ng1a2dó n2gadó. n2gadóa n2gadób n2gadói n2gadój n2gadók n2gadór n2gadós n2gadót n2gadóv ng1akn n2g1akr n2g1akt nga2lag nga2lak nga2lap ng1alát ng1alel n2g1alg n2g1alj n2g1a2ny nga1p2 n2g1a2rán n2g1arc n2g1art n2g1arz n2g1asp ng1assz n2g1aszt nga1tr n2g1a2u n2g1ava nga2zon ngá2c n2g1á2g ng1állá ng1állo ng1álló n2g1áp ng1á2rak ng1áras ng1árat ngá2rát ngá2ráv ngá2ré n2g1árnya n2g1árta ngá2ruk n2g1á2rú n2g1á2szaib n2g1á2szair n2g1á2szait n2g1á2száv n2g1á2szé n2g1á2szi. n2g1á2szig n2g1á2szoké n2g1á2szos n2g1átá ng1átc n2g1á2t1e2 n2g1á2ti n2g1átk n2g1átl n2g1átm n2g1áts n2g1átv n2g1á2zój n2g1á2zós n2g1áztato ng1bl ng1br ng1d2r ng1edz ngegész1 n2g1ela nge2lis nge2r1a nge2rál nger1e2sz nger2im nge2ro n2g1esem n2g1eszk nge2tika n2g1ex n2g1é2g ngé2les n2g1épí n2g1érc ng1érl ng1é2rő. ng1érté ngé2sa n2g1éte ng1fr ng1g2r ng3gyi ng3gyo n2g1i2d ngi2g n2g1iga n2g1ige n2g1igé ng1i2ko n2g1ikr n2gill ngi2m ng1imi ng1inf n2g1ing ng1ins ng1iro n2g1izg ng1íg ng1ír ng1ív ng1íz ng1kl ng1kr ng1kv n1glec ngmeg1 n1g2nó n2g1of n2g1op ngora1 n2g1ord n2g1org n2g1ork ng1osto ng1oszt n2g1otth ngó2riá n2g1öb ng1önt ngö2r ng1örö ng1örv n2g1öv n2g1ö2z ng1őrö ngő2z1ős ng1pr ng1ps n1g2ram ng2rádih ng2rádj n1g2ráf ng2run ng1sh ng1sk ng1sp ng1tr n2g1ud n2g1ug n2g1uj n2g1und ng1u2ra n2g1uta n2g1új ng1útt n2g1üd n2g1ü2g ng1ür ng1üt n2g1üz ng1űr ngy1a2gya ngya2l1ó2 ngy1ass n2gy1á2l n2gy1em n2gy1es n2gyez n2gy1é2d ngy1éks ngy1ékt ngy1ér. n2gyid n2gyim n2gy1ut n2gy1ü2lő nha2b1i nhal1k2 nha2sábr nhá2z1alt nhá2zip nhá2zol nhá2zó nhá2z3s nhe2d3z nhe2i nhú2sá nhús3s 1ni ni2aa ni2aá ni2abo ni2ac ni2ad ni2ae ni2aé ni2afo nia1g2 ni2agy ni2ah ni2aí ni2aj ni2ala ni2alá ni2am ni2ao ni2aó ni2aö ni2aő ni2a1p ni2ar ni2asza ni2aszá nia1t2 ni2ato ni2atr nia3u ni2aü ni2av ni2az niát1a2 2n1i2bo ni1br ni2c1e2l ni2cha ni2c3he ni2c3hé ni2c3ho ni2de. 2n1i2deg 2n1i2dő ni2dü ni2et 2n1ifj 2n1i2gal 2nigaz. 2n1i2gá ni2ge. ni2géj 2n1i2gén ni2géz 2nigm 2n1ihl ni2keb ni2k1el ni2k1em ni2k1érté nikk2 ni1klu ni2konr 2n1ikrit. ni2kud n1ille 2nillu 2n1i2ly 2nimád n1i2máé 2n1imp 2n1i2na. ni2nas ni2n1áll 2nind 2n1info 2n1infú nin2gas nin2gá 2n1inge. 2ningei nin2g1e2l nin2g1ó2 nin1g2rá nin2gu 2n1ingük ni2n1i2p ni2nol 2n1inté 2n1i2onb ni2onc ni2onh ni2onj ni2onk 2n1i2onn 2n1i2ono 2n1i2onr 2n1i2ont ni2óa ni2ód ni2óe ni2óp ni2óta ni2ótá ni2óü nióvá2 nip2p1i ni1pr ni2rat 2nirá nirész1 2n1irg 2n1irh 2n1irk 2n1i2rod ni2rón ni2si. ni2s1in nisü2v nisz1ak ni2szeg ni2szeml ni2szese ni2sz1é2l ni2szip ni2szis nisz1okt nisz1ol 2n1iszon ni2szö ni2sz1ő ni2szu ni2t1a2d ni2t1ag ni2t1aj ni2tal nit1a2la ni2t1as 2n1i2tat nit1ell ni2t1ép ni2t1ér ni2tim ni2t1in ni2tir ni2tob nit1old nit1olt ni2t1osz ni2tür niu2m1i2o 2n1i2vad 2n1i2var 2n1i2vó ni2xa ni2xő ni2zén 2n1izg 2n1izmá n1izom ni2zsol 1ní ní2gé ní2ja ní2ju níli2a ní2ra2 2n1í2rá ní2r1é2 ní2r1ot 2n1í2ró ní2r1ú 2nítél nítőa2 ní2ve 2n1í2vi ní2ze ní2zű nk1a2dós nkai2k nk1ajt n2k1akk n2k1alv n2k1anó nka2nyá nkaó2 nka1p2l nk1app nka2ris nka1s2k nka1sp nka2tom nka1t2r nk1azo n2k1ág nk1árad nká2rál nká2rol nká2ruk nká2sad nká2sal nká2sav nkás3s nká2s3z nkáta2 n2k1átj n2k1átm n2k1áts n2k1átu nk1br nkci2ósű nk1dr nk1e2cse nk1e2dz nk1ela n2kellá n2k1eltá nke2r1a nk1ered n2k1e2rő n2k1e2ti n2k1e2vé n2k1é2l nké2p1el nké2p1és n2k1épí n2k1érc nk1é2szé nk1g2r nkia2 nkiá2 nk1i2ga n2k1igé n2k1imi nk1ind n2k1ing n2k1int n2kinz nk1i2on nki2s1i2 nk1ism nkká2 nk1k2r nk2lar n1k2ló n2k1ob nk1oke nkos3s n2k1oszl n2k1ox n2k1óné n2k1óni nkó1p2 n2k1ó2ri n2k1ö2lé n2k1ö2lő nk1öss nk1ötl nk1őrs nk1pl nk1pr nk2rac n1k2ris n1k2rí nk2roma nkron1n nk1sp nk1st nk1sz2 n2k1ud n2k1u2ra n2k1u2s nk1utal n2k1utá n2k1uz n2k1új n2k1ús n2k1üg nlac1 nla2pa nlap1e nla2p1osz nla2tal nla2t1a2n nla2t1e2 nla2t1é2te nlás3s nle2g1á nleí2 nle2t1o nletü2 nle2tüz nlé2tés nlé2t1é2ve. nme2g1a2 nme2g1é nműé2n nműt2 nna2ié nnak2 nna1kr nn1alv nna1p2ré nna1s2 nn1áll n2n1eml nne2p1a2 nne2se nn1ess nn1esz n2n1e2tet n2n1ett nn1evez nné2get nn1éri n2n1id nn1irt nn1ors nnőé2h nnőé2n nn1sy n2n1ug nn1ú2s n2n1ü2c nnü2l nn1ülő nn1ült nn1ülv n2ny n3nyak n3nyalá nny1a2n n3nyar nnyá2r nny1áz n3nydr nny1ell n3nyelő nny1elt nny1elvá nny1elvez nny1e2sett nny1e2sés nny1e2ső nny1ég nny1é2ké nny1é2ki nnyié2h nnyié2ne nnyi2g nny1igé n3nyjé nny1old nny1on nny1öz n3nyst 1no no1d2rá 2n1o2dú 2nog. 2nogh 2nogj 2nogn 2nogo 2nogs 2nogt 2nogv no2ir 2nokal nok1ala no2k1a2r no2kau no2k1ál no2k1é2l no2kép no2k1ing nok1ist nok1k2 2n1okke 2n1o2koz no2kö no2kő no1k2ro nok1s noksz2 no2kur no2kúr no2kü 2n1o2la nol1f2 2n1o2lim 2n1olló 2n1o2ly no2m1a2c nom1p nona2 no2n1al nonc3c non2ch nonc3sz no2n1e non1k2 no2nö no2nő non1s2 no1ny no2ok 2n1o2pe no1p2la no2r1al no2r1a2t no2raz no2r1el no2r1iv no2rí 2n1ormo 2n1orré nor1s2 no2rü 2n1orvo no2sál no2se nossz2 nos3sze nos3szf nos3szi no1s2tab nosza2u no1sz2f 2noszl no1t2r 2n1otth no1ty no2ui 2n1o2vi. no2xi 1nó nóa2k nóá2r nó2ce nó2ch nó2da. nó2d1a2n nó2dák nó2d1e2s nó2d1is nó1fl nó1fr nó1k2l nó2mac nó2m1em nó2mik nó2m1u2t nó2mü nó2nib nó2non nó1p2r n1ó2rac nó2r1ad n1ó2raf 2n1ó2rai nó2r1a2l n1ó2rar n1ó2ras n1ó2rat nórádi2 nó2rás nó2riá nó2rü nós1akk nó2seg nó1sl nó1s2p nó1s2rá nós3s nó1s2ta nó1sz2 nós3zene nós3zené nót1ala nó2til nó1trá nó2vó 1nö nö2ka nö2ká nö2k1el nöke2t nök1eti nö2k1é2j nö2k1ék nö2k1é2l nö2k1ér. nö2k1éri nö2k1érté nö2ko nö2kó nö2ku nö2kú n1ö2le n1ö2lé nö2lő n1öml 2n1ö2nö 2n1önz nö2rö 2n1össz 2n1ö2sz nö2te nö2té nö2ti n1ötl nöt1t2 nö2tü 2n1öv. n1övb n1ö2ve. nö2vön 2n1övr 2n1ö2zön 1nő nőa2l nőa2n nőá2g nő1br nő2ca nő2ch nő2csár nő2csős nő2csü nőe2r nőé2l nőfé2l1é2 nő1kl nő1pl nő1pr 2n1őr. 2n1ő2r1an 2n1őras 2n1őrb 2n1őrc 2n1ő2rei 2n1ő2réh 2n1ő2rén nő2rét. nő2rétő 2n1ő2rév 2n1őrg 2n1őrh 2n1ő2ri 2n1őrk 2n1őrl 2n1őrn 2n1ő2rö 2n1őrr n1őrs 2n1őrt 2n1őrü nő2rül nő2rün 2n1őrv 2n1őrz nő2s1a2l nő2s1e2l nő2ses nő2s1í2r nő2sok nő1spe nős3s nő1sz2t nő1t2r nőt2tin nőu2t nőü2l npa2dal npe2s npesz1 np2la np2lá np2le np2lé np2lo np2lü npon2t1a2 npo2r1a np2ra np2re np2ré np2ri np2ro np2ró np2sz npu2t1a npu2t1á2 npu2t1e2 npu2t1i nrefle2x1í2 nren2da n2s1a2d n2s1akc ns1alk ns1a2rá ns1ass n2s1au nsa2vár nsa2v1e2 nsa2vil nsa2vol n2s1a2z nság1g ns1áll n2s1á2rak ns1áta ns1átv ns2ch nsc3he. nsc3hei nsc3hé ns1dr ns1e2lé ns1elm ns1eln ns1elo ns1els ns1elv n2s1ene n2s1esz nsé2gel nsé2g1éj nségü2két n2s1ék n2s1é2l n2s1ép ns1é2ve. ns1fr n2s1i2d ns1imp ns1inf n2s1ing n2s1iró ns1isk nsi2z ns1izo n2s1í2r n2s1í2v n1s2kál ns1kl n2s1ob n2s1ol n2s1op ns1osz n2s1ott n2s1ó2r n2s1ös ns2pec ns1p2l ns2por n1s2rá ns1st ns1sy ns3szer ns3szi ns3szo ns3szö n1s2tab n1s2tác nste2i n1s2tim ns2top nsu2r ns1ura n2s1u2t ns1úr n2sz1a2d nsza2k1ü nsz1alk n2sz1a2n ns3zará n2sz1á2ba. ns3zárá nsz1á2ru n2sz1it n2sziz n2sz1omm nsz1p2 n2szut n2sz1ü2z nsz1z nt1abla n2t1abr nta2cél ntad2 nt1a2dó nt1a2ga. n2t1agg nta2gyu nta2gyú ntai2k n2t1ajk n2t1ajt n2t1akc n2t1aktá nt1alát nt1alel n2t1alf nt1anta nt1a2ra. nta2ran n2t1a2rá n2t1arc n2t1ark nta1s2p nt1assz n2t1aty nt1a2ura ntaü2 n2t1azo nt1ábr ntá2cs nt1ácsi nt1ácso ntá2r1a2d n2táram ntá2ráv nt1árny ntá2ruk n2t1ásó n2t1ásvá n2t1áti n2t1átl n2t1átr n2t1áts n2t1átv ntá2zsi nt1bl nt1br nt1dr nt1ebe n2tedén nt1edi nte3gá n2t1ela n2t1elb ntele2mé nt1elf n2t1eljá n2t1elk n2t1ellen n2telmél n2telnö n2t1e2lo nte2lőá n2t1elr n2t1elto n2t1elvá n2t1elz n2t1ember n2t1e2mel n2t1eml n2t1emu n2t1endr n2t1ent nte2rál nte2rele nte2r1in nter2v1e2l n2t1erz n2t1esth n2t1eszk n2t1eva nt1e2vet nt1e2vez nt1ég. nt1é2gé n2t1é2kek nté2kes nté2ké n2t1éks n2t1é2le n2t1é2lés n2t1élm n2t1élt nt1élű n2t1é2neke n2t1épü n2t1érin n2t1érmé n2t1érté n2t1érz ntés3s nté2ter n2t1é2ven n2t1é2vet n2t1é2véb n2t1é2vén n2t1é2vér n2t1é2vét nt1évh nt1évk nt1évt nt1fl nt1fr nt1gr nt2hon ntia2n ntia2t nt1ido n2t1ige nti1k2l ntil2lát. n2t1ille n2t1imp n2t1info n2t1ing. n2t1inga nti1nk. n2t1inté ntió1 nti2par n2t1irá n2t1iro n2t1isk n2t1ism n2t1iste nti2vás nt1izo n2t1íg n2t1íj nt1írá n2t1ívb n2t1í2z nt1kl nt1kr n2t1of ntoka2 n2t1o2k1al n2t1okl n2t1olda n2t1oldó n2t1o2ly nto2m1e2 nt1opc nto2ras nto2rék nto2rin nt1ormá nt1orro n2t1oszl n2t1oszt n2t1otth ntó1p n2t1ó2rá n2t1ó2ri ntót2 ntó1tr nt1ökl nt1ö2kö nt1ö2lő nt1önt n2t1örd ntőa2 ntőé2n nt1őrb nt1őrl nt1őrn n2t1őz nt1pl nt1pr nt2rans ntransz1 ntranszk2 n1t2réf n1t2róf nt1ry nt1sh nt1sk nt1sp nt1st ntsz2 ntszá2m1é nt1szv nt1t2r n2t1udv n2t1ug n2t1uj ntu2mor ntu2n n2t1una nt1und ntun1i nt1u2rá ntu2sza nt1utá n2t1úg n2t1új ntú2ral ntú2ran nt1ú2sz n2t1üg n2t1ü2lő nt1ült n2t1üt n2t1ü2v n2ty1a2l n2ty1a2n n2tyál n2ty1e2l n2ty1él n2ty1ik n2ty1int n2ty1iv n2tyí n2ty1ő2r n2tyut 1nu n1ucc nu2ga nu2go 2n1ujj nu1k2la nu1klu nu2mü 2n1und 2n1u2ni 2n1u2no 2n1unt nu2ram nu2rá nu2sal nu2sas nu2s1av nu2s1e nu2s1érté nu2sik nu2sol nu1s2po nuss2 nus3szi nu2szab nu2s3zav nu2szir nu2szí nu2sz1ol nu2tal nu2tat nu2taz nu2tál nu2te 1nú n1újd nú2jí 2n1újs núkész1 nú1pr 2n1úr. 2n1úrb 2n1úrh 2n1úrn 2n1úrr 2n1úrt 2n1ú2szá 2nútb 2núth 2nútj 2n1útk 2n1útn 2nútr 2n1úts 2nútt 2n1útv 1nü nü1bl 2n1ü2dí 2n1üdv nü1fr 2n1ügg nü1gr 2n1ügy. 2n1ügyb 2n1ügyc 2n1ü2gye. 2n1ü2gyei 2n1ü2gyek 2n1ü2gyes 2n1ü2gyet 2n1ü2gyé nügy1és 2n1ügyh 2n1ü2gyi 2n1ügyk 2n1ügyl 2n1ügyn 2n1ügyr 2n1üld nü1pr nü2rí nüst2 nü1str 2n1ü2tem nü2tés nü2ti nü2tő. nü2tők nü2tős nü2tü nü2vö nü2zé 2n1üzl 1nű nű2zé nű2ző nva2su nvágya2d nvá2gy1ada nvá2gy1ón nvá2r1al n2v1át nven2ta nvé2d1a nvé2d1ő2r nv1ind nvona2l1út n2v1os nv1sk nx1ar n2y 1nya 2ny1abl 2ny1abr nya2cél 2ny1adag 2nyadás 2nyadó nya2dóz 2nyaff nya2gar 2nyagáh 2nyagár 2nyagáv 2nyagc nya2gen 2nyagi 2nyagj 2nyagm 2nyagos 2nyagta 2nyaguk 2nyagú 2nyaján 2nyajk 2nyajt 3nyak. nya2k1ala nya2kara 2nyakc nya2kel nya2k1é2k nya2kiz 2nyakt. 2nyaktá 2nyaktb 2nyakti 2nyaktj 2nyakto 2nyaktu 2ny1a2lag 2ny1a2lak. 2nyalakj 2nyalakk 2ny1a2lakr 2nyalany nya2lapb nya2laph nya2lapo nya2lapp nya2laps 2ny1alász 2ny1alb ny1alép 2ny1alm ny1alte 2nyaltú 2nyamal 2nyanal 2nyang 2ny1ant 2nyaot ny1a2pad nya2pát 2nyapp nya2rén 2ny1arma 2ny1arz nya1sp 2nyassz 2nyaszt 2nyatká nya1trá 2nyaty 2nyauk 2nyavat 1nyá 2nyábr 2nyádná 2nyádt 2nyáék 2ny1ág 2nyáld 2nyállí nyá2lom 2nyámék 2nyámná 2nyáp 2ny1á2rad 2ny1á2rai 2ny1á2rak 2ny1á2ram 2nyáras 2ny1á2rat nyá2ráb nyá2rán nyá2rát nyá2ráv 2nyárc 2nyáre 2nyárh 2ny1árj 2nyárk 2nyárp 3nyárt. 2nyá2ru 2nyárú 2nyárv 2nyásó nyá2szak nyá2szár 2nyáta 2nyátá 2nyáté 2nyátf 2nyáth 2nyátk 2nyátm 2nyátn 2nyátö 2nyátr 2nyáts 2nyátt 2nyátü 2nyátv ny1bl ny1br ny1cv 1nydre. 1nye 2nyedén 2nyedzé 2nyeff 2nyegyl 2nyegys 2nyeke. 2nyekei 2nyekéé 2ny1elb 2nyelc 2nyelef 2nyelemz 2ny1elf ny1elha 2nyeljá ny1elk 2ny1ellá ny1elma 2nyelnö 2nyelőí 2ny1e2lőő 2nyelőz 2ny1elr 2nyelső 2ny1eltá 2nyeltér 2nyelto 2ny1elül nyel2vesz 2nyelvev 2nyember 2nyembl 2nyembr 2nyemel 2ny1emit 2ny1eml 2nyenc 2nyene 2ny1eng nye1p 2nyerdő 2nyerej nye2rekl 2ny1erk 2nyerny 2nyerőm 2ny1esemé ny1eser 2nyeseté 2nyesél 2nyestj 2nyeszk 2nyetik 2nyeve nye2vez 2nyevé 2nyevo 2nyevő 2ny1ex 2nyezr 2nyezüs 1nyé 2ny1ébr 2nyéhen 2nyéhes 2nyéhs ny1é2jek 2nyélet 2nyélm 2nyéneke 2ny1é2neké 2ny1é2nekn 2ny1ép 2nyérc. 2nyérem. nyé2r1e2s 2nyérin 2nyérő. 2nyérői 2nyérőt 2nyérték nyérü2 2nyérv. 2nyérzé 2nyétel 2nyétke 2nyétl 2nyév. 2nyévb 2nyéve. 2nyévei 2nyévek 2nyévem 2nyéven 2nyéves 2nyévet 2nyévez 2nyévéb 2nyévér 2nyévét 2nyévév 2nyévf 2nyévi 2nyévk 2nyévm 2nyévn 2nyévr 2nyévs 2nyévt 2nyévü 2nyévű 2nyévv ny1fl ny1f2r ny1gl ny1gr 1nyi 2nyibo 2nyideg 2nyidej 2nyidő nyié2b 2nyifjú. 2nyifjúb 2nyifjúé 2nyifjúi 2nyifjúké 2nyifjún 2nyifjúr 2nyifjús 2nyifjút 2nyifjúv 2nyiga 2nyiha 2nyihl 2ny1ill 2ny1ima 2nyimá 2ny1imb 2nyimp 2nyinas 2nyinc 2nyind 2nyinf ny1ing. 2nyinj 2nyins 2ny1int 2nyinv 2ny1i2p 2nyirá 2nyiri 2nyirod 2nyirt 2nyisko 2nyism 2nyisp 2nyist 2nyivad 2nyivás 2nyivó 2ny1izn 2ny1izt 1nyí 2ny1íg 2ny1íj 3nyíl 2ny1ín 2ny1ív 2ny1íz 1nyjéb 3nyk. nykar1óra 1nyket. 1nykk ny1kl 1nykn ny1k2r ny1k2v 1nym. 1nymet. 1nymt 1nyn. 1nyo 2ny1ob 2nyodú 2ny1of 2ny1okke 2ny1okl 2nyokos 2nyokoz 2nyokta 2ny1o2laj nyolc1c 2ny1olda 2nyoldá 2nyoldó ny1olló 2ny1oltár 2nyoltás 2nyolvas 3nyom. 3nyomat. 3nyomatk 3nyomatom 3nyomo 3nyomt 2ny1op ny1orc ny1orm ny1ors ny1orv 2ny1osko 2nyosto 2nyoszl 2nyoszt 2ny1ott 2ny1ov 2ny1ox 1nyó ny1ó2ni nyó2rác nyó2rán 2nyóri nyó2s1ü 1nyö 2ny1öb 2ny1öc 2ny1ö2l ny1önt 2ny1öv 1nyő 2nyőrs ny1pl ny1pr ny1ps 3nys. ny1sc 3nysek ny1sh ny1sk ny1sl ny1sp nys2t 1nyst. ny1sta ny1stá 1nyu 2nyud 2nyuj 2nyuká 2ny1ukrá 3nyul 2nyuni 2nyuno ny1urá 2nyut ny1u2ta ny1u2tá 1nyú 2nyújd 2nyújé 2nyújí 2nyújs 3nyúl nyú2lő 2ny1úr. 2nyúrb 2ny1úrh 2nyúri 2nyúrk 2ny1úrn 2ny1ú2ro 2nyúrr 2ny1ú2sz 2nyútb 2ny1úté 2nyúth 2ny1úti 2nyútj 2nyútk ny1útl 2nyútm 2nyútn 2nyútp 2nyútr 2nyútt 2nyútv 1nyü 2ny1üd 2ny1ü2g 2ny1üld ny1üle 2nyünn 2ny1ür 2ny1üt 2nyüze 1nyű 2ny1űr. 2nyűrb 2ny1űré 2ny1űrh 2ny1ű2ri 2ny1űrj 2ny1űrl 2ny1űrn 2ny1ű2rö 2nyűrr 2ny1űrt 2ny1ű2zé 2ny1ű2ző. 2nyűzőb 2nyűzően 2nyűzőé 2nyűzőh 2nyűzők 2nyűzőn 2nyűzőr 2nyűzőt 2nyűzőv ny2vék ny2v1isk ny2vó ny2vös ny2vő ny2vú nyzé2ke nza2c n2z1acé nz1adá nz1ado nz1adó nz1a2ga nz1agg nz1ajta nz1akc nz1akk nzak2o n2z1akt nz1ald n2z1alk nz1ang n2z1a2ny nz1app nz1ara nz1ará nz1arc nz1ari nz1aut nz1á2gy nz1áll n2z1á2rad nz1árny nzá2r1ó2ra n2z1á2ru nzá2s1e2 nz1ásó nzás3s nz1át1a2 nz1d2r n2z1e2g n2z1elb n2ze2leme n2z1e2lér n2z1elf n2z1elha n2z1elis n2z1elk n2z1ellá nz1ellen n2z1elm n2z1elny n2z1elo n2z1e2lőá n2z1e2lől n2z1e2lőt n2zelőz n2z1els n2z1elta n2z1eltü n2z1elver n2z1elvé n2z1elvo nz1ember n2z1e2mel nz1e2més n2z1emi nz1eml n2zener nz1erő nzer2t1a2 nzer2v1a2d nzervé2t nzer2v1éte nzer2vi nze2su nz1eszk n2z1ez n2z1ég nzé2k1el n2z1é2l n2z1ér. n2z1érd n2z1é2rem n2z1érk n2z1érm n2z1érté n2z1érv n2z1érz nz1étv nz1gr nzi2a n2z1i2ga n2z1igé n2z1ill nzi2m1a2 nzi2má nzi2mi nzi2n1á2 nzi2n1o nzi2n1ó2 n2z1i2p nz1irá nz1ism n2z1ist nzi2tár nzite2 nzi2t1el nzi2ten nzi2t1í2ve. n2z1íb nz1íg nz1ín nz1kl nz1kr n2z1okl nzo2lin nzo2ló nzo2n1a nzo2né nzo2rin n2z1osz nzókész1 n2z1ön nzö2r nz1örö n2z1ös n2z1ö2v n2z1öz nz1pl nz1pr nz3saj n2z3sár n2z3sát n2zsáv nz3seg n2z3ser nz3sik n2z3sis n2z3sod nz3sor n2z3só nz3s2p nz3s2t nz3sz nztá2r1a2d nz1t2r n2z1uj nzu2l1a nzu2mé nz1u2ra nzu2san nzus3s n2z1u2t nz1új nz1ú2t n2z1üd n2z1ü2g nz1üs nz1üv n2z1ü2z nz3zs 2o. o1a oa2cé oa1fr o2aki o2a1k2v o2ami oa2nali o2asi o2aszó o1á oá2ga oá2r1a2n oá2ril oá2rí oá2r1ol oá2zs oba1b2 oba1d2 o2b1alj obal2t1a2 oba1p ob1a2ra obau2 obás3s ob1átm ob2b1eg ob2bö o2b1eg ob1ele o2b1e2m o2b1erő o2b1ez o2b1é2g o2b1érz obi2ki obi2k1ó2 obi2lin obi2lip obina2 ob1ina. obi2n1al o2b1ing o2b1i2s ob1ív 1objek ob1kl 1o2boa o2b1oll obo2r1a obo2rin obo2r1os obo2t1á2 obo2tin obókész1 o2b1ó2né ob1ó2rá ob1öt ob1pr 1obst o2b1ut o2b1ú2s ob1üg ob1ür ob1üt ob1űr oca2ké o2c1ág o2c1ál oc1er oc1é2k o2c3hi. oc3hok oc3hot oci3a ocie2 oci1k2r oció2 oci1p oci1sz2 o1c2kef oc2k1é2l ocké2n ock1éne o1c2kér o1c2két o1c2ki. oc2kia o1c2kig o1c2kin o1c2kit o1c2kiv oc2kop o1c2kosn o1c2koso o1c2kosr o1c2koss oc1pr o2c3sap o2cs1ál ocsá2s o2cs1ász o2cs1á2z o2cs1e2 oc3sér ocsié2ra o2cs1ing ocs1izm o2csí2 oc3sín o2csop ocs1s ocs1t o2csuj o2cs1ü2 oc3sza ocs3zá oc3sze oc3zs o2daad oda1b2 o2d1adj oda1dr o2d1akk o2d1alj oda1p2 odas2 o2d1ass od1aszt odat2 oda1tr od1autó odáb2 od1állá o2dáru odáskész1 odás3s odá2s3z 1o2dáz od1ed ode2l odel2l1a ode2min od1e2v o2d1é2g od1é2ne o2d1ép o2d1érd o2d1é2te o2d1é2ve od1é2vé 2odéz od1ide odi2g o2d1iga o2d1ikre odi2l1e odi2lid odi2lik odi2l1is o2d1int o2d1iro od1isp od1í2z od1kl od1obo o2d1okt o2d1op odo2rak odo2rosz od1ö2l od1ö2r od1ő2r od1pr o1d2ram o1d2ráma od1st odu2l1a2l o2d1u2r 1odún od1üg od1ün od1üz 1odváb od3ze od3zo o1e oe2ir oe2le oe2mu oe2ne oe1t2he oe2ur oe2uv o1é o2éfa o2éfá o2éfo o2éke o2éki oéna2 oé2n1al oé2n1an oé2n1ar oéná2 oé2n1ár oé2nis o2ész o2évi ofi2lad ofi2lak ofi2l1á ofi2lel ofi2lér ofili2 ofi2l1iga ofi2l1igá ofi2lis ofi2l1osz ofi2tal ofi2t1e2 of2la of2ló ofona2 ofo2n1al ofo2nan ofo2n1á ofo2n1ér. ofon3n ofo2n1ó2 ofor2m1á2 ofő2r1e ofőrü2 of2rí og1abr o2g1a2g oga2kar o2g1aká o2g1a2la o2g1a2lá o2g1alj og1all og1alt og1alu o2g1a2ny o2g1ap o2g1a2ran og1arc o2g1a2sz oga2t1a2g oga2t1e2 oga2t1i2n og1a2ty 2ogaz o2g1á2g og1áll og1álm o2g1áp o2g1á2rak o2g1áre o2g1árja o2g1árját o2g1á2rok ogá2ros o2g1á2ru ogáskész1 o2gásó o2g1áta o2g1áte o2g1átj o2g1átk o2g1átl o2g1átn o2g1á2to o2g1átr o2g1áts o2g1átt og1átü o2g1átv og1bl ogdí2j1a2d og1dr o2g1e2d o2g1e2g ogegész1 o2g1e2l o2g1em o2g1e2p oge2r og1ere og1ern og1erő oge2s o2g1ese o2g1e2v o2g1ez o2g1é2g o2g1é2l ogén1n o2g1é2p o2g1ér. og1érte og1érté o2g1értő o2g1érv o2g1és og1fl og1fr og1g2l o2g1ic o2g1i2d o2g1if ogi2g o2g1iga o2g1igé o2gill og1inf o2g1ing og1ins o2g1int o2g1ip og1i2ro og1ita o2g1íj og1ín og1ír og1ív og1kl og1kr o1g2lic o1g2nai o2g1odv og1org og1orr og1orz o2g1oszl o2g1oszt o2g1o2v og1ö2b og1ö2l og1ö2r og1ös og1ő2r og1pl og1pr 2ografi 2ograp 2ográf. 2ográff o1g2ráffa o1g2ráfh o1g2ráfj o1g2ráfr o1g2rál og1sk og1sp og1s2t og1tr og1u2ra og1u2ru o2g1u2s o2g1u2t o2g1új og1ü2g og1ül og1ür og1üt og1üz og1űz ogy1a2c ogy1a2p ogy1is. ogy1os ogyóé2 oha2mal oha2mel oha2mes oha2mis ohas2 oha1sp o2h1ág o2h1ál ohá2nyad ohá2nyan ohá2r1e ohá2szi ohá2sz1odv o2h1á2z oh1e2c oh1ing oh2ni o2h1orr ohó2csi oh1órá oh1ö2v oh1urá o1i oi2ae oi2af oi2an oi2av oi2ába oida1 oi2d1ad oi2dan oi2dál oi2d1e2 oi2dol oi2d3z oilet2 oina2 oi2n1ad oi2ne oi2re oisel2 oi2zo o1í ojá2r1as ojás3s ojás3z ojek2t1á2 ojek2t1í2 ojek2t1o2 oj1in oj2t1ára oj2t1orják ojtóá2 ok1abl ok1a2cé o2k1a2dat o2k1a2dá o2k1a2dó o2k1a2kar ok1akv o2k1alj o2k1alk ok1alm ok1alt ok1ang ok1ani o2k1ant oka1p2l ok1app ok1a2ra ok1arc oka2ris o2k1asp o2k1ass ok1aszf ok1aszt o2k1att o2k1aty oka2u ok1aut o2k1ava o2k1ág ok1ájt ok1árad o2k1á2rak oká2rul o2k1árv oká2sal ok1ásó okás3s ok1ász o2k1áte ok1bl ok1br ok1dr o2ke. ok1e2b o2k1e2c oke2d ok1edé o2k1e2g o2k1e2l o2k1e2m ok1eré ok1erk ok1ernel. ok1e2rő o2ke2s ok1esé o2k1e2v ok1e2z o2k1ég ok1é2ke ok1é2ké o2k1él. ok1é2les ok1é2let ok1é2lé ok1éln ok1élt o2k1é2ne oké2p oké3pá ok1épí o2k1épü o2k1ér. o2k1érb o2k1érc o2k1érd o2k1érg o2k1érh o2k1é2ri o2k1érm o2k1érr ok1értá o2k1érte o2k1érté ok1értö o2k1érz oké1s2 okész2 o2k1étk o2k1étt o2k1é2ve ok1fl ok1fr ok1gr o2k1i2de o2k1i2do ok1i2ga okigaz1 ok1igá o2k1igé ok1ind o2k1int o2k1i2rá o2k1i2ro o2k1isk ok1ism o2k1isp ok1iste o2k1i2ta o2k1izm ok1íj ok1ír ok1ív ok1íz ok2kab ok2k1a2d ok2k1aj ok2k1ale okk1alk ok2k1as ok2kaz okk1elh okk1elö okk1elő okk1elr 1okkeré ok2k1es ok2képü ok2kid ok1kló ok2kob okk1öss okk1ö2vű ok1kri ok2kud ok2k1ur o1k2lí ok2lor o2k1ob okola2 oko2lár o2k1oltás okon1n oko2n1oks oko2ra oko2r1á oko2ril oko2ris o2k1ormú ok1o2ro o2k1osz ok1o2varia o2k1o2vi o2k1öb o2k1ö2d ok1ö2k o2k1öl o2k1ön okö2r o2k1ös o2k1ö2v ok1ö2z ok1ő2r ok1pl ok1pr o1k2ris o1k2róm ok2sel ok1sp oksz1alm ok2szan ok2sz1es ok2sz1is 1oktán o2k1ud o2k1ug o2k1uj ok1u2ra o2k1u2t ok1úr. ok1úrb ok1úrh ok1úrr ok1úsz o2k1útb o2k1úth o2k1ú2ti o2k1útj o2k1útk o2k1útn o2k1útr o2k1útt ok1útu o2kútv ok1üg ok1ü2l ok1ün ok1ür ok1ü2t ok1ü2v ok1üz ok1űz o3la. ol1abl ola1d2 ola1f2 1o2laj. 1o2lajb 1o2lajf 1o2lajg 1o2lajh 1o2laji 1o2lajj 1o2lajk 1o2lajm 1o2lajn 1o2lajp 1o2lajr 1o2lajs o2lajt o2laju 1o2lajú o2lajv ola1k2r o2l1alg ol1alk ol1amn ol1anya ola1p2 ola1s2p ola1s2t ola2t1ala olat1any ola2tál ola2táp ola2ték ola2t1inf ola2t1í2v ola2t1ol ola2t1orn ola2t1öl ola2tüz olau2r ol1ábrá o2l1á2g olá2ha ol1áll o2l1árb o2l1árh o2l1á2ria olá2riá o2l1árk o2l1árn olá2rok olá2ron o2l1árr o2l1árt o2l1á2ru olá2sza o2l1á2ti o2l1átv ol2caj ol2cal olca2n olc1any ol2c1e2k ol2cel ol2ces ol2c1év ol2c3h olc1iko ol2cí ol2có ol2cö ol2c3sor ol2csű olc3sz ol2cü ol2cz ol2dab 1oldal. 1oldalá 1oldalb olda2le 1oldalh 1oldalk 1oldall 1oldaln 1oldalo 1oldalr 1oldalt 1oldalu 1oldalú ol2d1any ol2dap olda2tel ol2d1au ol2dál ol2deg ol2d1elé ol2d1ell ol2d1elv old1emb ol2d1e2r ol2d1e2s ol2dev ol2dez ol2dés ol2d1éve ol2dip ol2d1is ol2dor 1oldós ol2d1ö2 ol2dud ol2d1u2g ol2d1ü ol2dű ol1e2g o2l1e2l o2l1é2d o2l1é2g o2l1él ol1ér. ol1érd ol1é2re ol1éré ol1érh ol1é2ri ol1érj ol1érl ol1érn ol1érő ol1érs o2l1érté ol1é2rü ol1érv o2l1érz olfa2k ol2fau ol2f1ár ol2fes ol2fet olf1ing ol2fir ol2fis olfu2 ol2f1ut ol2fúj ol1gl ol1g2r 2olib o2l1i2du 1o2liga oli2gáz o2l1igé ol1ill ol1i2ma. o2l1i2má 1olimp oli2nu o2l1i2pa olipe2 oli2p1et o2l1isk oli2szál ol1ív. oll1a2gy ol2l1aj olla2l ol2l1ala ol2l1alj ollan2d1ó2 oll1any ol2l1atk oll1att ol2l1á2g ol2l1e2c oll1ege oll1egé ol2l1e2gy ol2l1e2h olle2l oll1ele ol2l1emb oll1ese ol2l1é2k ol2l1éri ol2l1inf oll1inge oll1ingé oll1ingi oll1ingj oll1ingn oll1ingr oll1inj ol2lins ol2l1int oll1isk ol2lob ol2lor ol2l1osz ol2l1ö ol2l1ő2 oll1s ol2lub ol2lul ol2l1u2s ol2lü ol3lyu oln1ike o2l1o2l o2l1op olo2r1e ol1ott o2l1ox olóe3dénn oló1f2 o2l1ó2né ol1ónn ol1ó2no ol1ónr ol1ónt oló2rái oló2ráj oló2rák oló2rán oló2rár oló2rát ol1ó2ri olót2 oló1tr ol1ö2l ol1ör ol1ös ol1p2l ol1p2r ol1sk ol2t1aj 1oltalm 1oltalo ol2t1ari ol2t1ág ol2t1áta ol2t1eg ol2t1em olte2r ol2t1ere olte2s ol2t1e2v ol2t1ép ol2t1ér. ol2t1érr ol2t1és ol2tid ol2tim ol2tis ol2tiz ol2t1old 1oltóé 1oltóh 1oltóké 1oltólo 1oltóm 1oltón oltö2r ol2t1őr ol2tür o2l1ug o2l1ur o2l1u2tá ol1ús ol1üg ol1ül ol1üv ol1üz 1olvad 1olvas o2lyabr oly1ada oly1aggy olyame2 olya2mes oly1aszt o2lyál o2ly1e2 1o2lyéb 1o2lyéh 1o2lyéi o2lyél 1o2lyén. 1o2lyiér o2lyim 2olyó o2ly1ö o2lyő o2lyug o2ly1ü2 o2ly1ű2 o2m1abl om1a2dat o2m1adm o2m1a2dó o2m1adt oma1f omaga2 oma2ga. oma2g1ad oma2gal oma2g1á2 oma2ge omagi2 oma2g1in o2m1a2gya om1agyú o2m1ajá o2m1ajk oma1kré o2m1akt om1a2lag oma2lapo oma2lapr o2m1alm om1alt om1alv o2m1amb om1ang o2m1ann om1apad o2m1app oma1pr o2m1a2ra o2m1arc o2m1arg oma2t1árak o2m1atká o2m1aty o2m1au om1a2zo omá2cs omá2g om1ági om1ágo omá2nyan ományká2 o2m1áp o2m1á2rai om1á2rak om1á2ram om1áras o2m1á2rá o2m1árd o2m1áre omá2ré. omá2rét o2m1árg omá2ria omá2riá o2m1árm o2m1á2ru omá2sí omás3s omá2sz omás3zó o2m1á2t1e om1á2t1é o2m1átk o2m1átm om1átol o2m1átr om2b1a2lo om2bág om2b1eg omb1elh om2b1elt omb1éne om2b1éri omb1ón. ombó2r omb1óra om1bro om2buj omdio2 om1dr o2m1e2b o2m1e2ce o2m1e2dé om1ef ome2g ome3gá om1ege om1egé o2m1egy ome2l o2m1ela om1elá om1elb o2m1ele o2m1elé om1elk om1ellá o2m1elm o2m1eln o2m1elo o2m1elő o2m1els om1elte o2m1elu o2m1elv o2m1e2m om1ene om1eng om1eny om1enz ome2o o2mep om1erd o2m1e2red o2m1e2rei o2m1erny om1e2ro ome2rő o2m1erő. o2m1erőb o2m1erőh o2m1erőn o2m1erőr om1erősí omer1őss o2m1erőt o2m1erőv om1e2rű ome2s om1ese om1esé om1ess om1est o2m1e2ti o2m1etn o2m1etű o2m1e2v o2m1ex ome2z o2m1eze o2m1ezred o2m1ébe om1é2de o2m1ég o2m1é2he o2méhs om1éje o2m1é2ke o2m1é2le om1élé om1é2lő o2m1ép o2m1ér. o2m1érb o2m1érc o2m1é2re o2m1é2ré omé2ri. o2m1érm o2m1é2rő o2m1érr o2m1érte o2m1érté o2m1értő o2m1érv o2m1é2s omé2tel o2m1étt o2m1éve om1évé om1f2l om1gl om1gr om1ide omid1i2 om1i2dő omi2g o2m1iga o2m1igé om1iks o2m1ill om1imá omime2 omi2mel omi2m1é om1i2na. omi2náb omi2náv o2m1ind om1inf o2m1ing om1inv o2m1i2ono o2m1i2p o2m1irá o2m1i2ri o2m1iro o2m1irt o2m1isk o2m1ism o2m1iste omi2sz1á om1i2tal omi2tan omi2t1ás omi2t1e omi2tis om1izé om1izo om1izz om1íj o2m1ír om1í2v om1í2z omjó2 om2jő omká2rok. om1kl om1kr omlá2b1út omo2dor omo2kas 2omoly o2m1ont om1ope omo2ras omo2re omo2riz o2m1orjá om1osto omosz2f o2m1oszt o2m1ox om1ök om1ö2l om1ön om1ö2r om1ös om1ö2t om1öv om1ö2z om1ő2r om1ő2s om2pel om1pla om2p1ors om2pő om2p1u2tá om1sk om1sl om1sp om1st om2te. omtes2s om1t2r o2m1ud o2m1ug o2m1uj omu2n o2m1uno o2m1ur o2m1u2t o2m1u2z o2m1új om1üd om1üg om1ü2l om1ür om1üs om1üt om1üv om1üz om1űr om1űz om1ya o2n1abl ona2cél ona2dat ona1dr on1ads onae2 on1agg on1agi on1agó on1agyh on1ajn o2n1ajt 2onak on1akc o2n1akk on1akn o2n1akt ona2len ona2l1e2s ona2lint on1alj. on1alju ona2lok ona2los 1onani o2n1a2no o2n1ant on1app ona1pr ona1ps ona2rác onarádi2 ona1s2p ona2tál onatü2 ona2tüz on1ábr 2onác o2n1ág o2n1állo o2n1állv o2n1á2p on1árad o2n1á2rak on1á2rat on1árb o2n1árk o2n1árn o2n1á2ro o2n1árt o2n1á2ru o2n1á2rú on1árv o2n1á2sza o2n1á2szokr o2n1átál oná2tás o2n1átc o2n1áte oná2t1ér o2n1átf o2n1áthe o2n1átm o2n1átre on1bl on1br on2cal on2c1ál on2c1e2g once2s on2c1ez on2c1ék on2c1ér. on2c1éré on2che on2cid on2c1ikr onc1ill on2cös onc3ság on2cseg oncs1emb oncs1ég on2cs1ér. onc3sikk on2cs1im on2cú on2cü on2de. ond1iko on2d1o2kos ond1oksá on2d1osz 2ondoz on2d1öl on1e2b o2n1e2d on1e2ge on1egg o2n1e2gy on1e2h one2l o2n1ela o2n1ele on1el1é o2n1elh on1elj o2n1elm o2n1eln o2n1elo on1elő o2n1elr on1els on1elt o2n1elv o2n1e2m one2n on1ene on1erj on1erk on1ers one2s o2n1ese ones2s on1est o2n1e2v o2n1ex 2onéb oné2d on1éde o2n1é2g o2n1é2he on1é2ke on1éks o2n1é2l on1é2ne o2n1é2p o2n1érbe o2n1érc o2nérd o2n1éri o2n1érl o2n1érm o2n1érp o2n1érs o2n1érte o2n1érv o2n1év. o2névad o2n1évb o2n1é2ve on1é2vi o2n1évk o2n1évn on1évr on2g1áll ongás1s on2g1e2c on2ged on2g1eg on2g1e2l on2gik on1g2ló on2gü on2gyad on2győ onháro2 onhárom1 o2n1i2d oni2g o2n1iga o2n1ige o2n1igé o2n1ij on1i2ke o2n1ill o2n1inb on1ind o2n1inf o2n1ing o2n1inj o2n1inn o2n1inr o2n1ins o2n1int o2n1i2p on1i2rá o2n1iro o2n1irt o2n1isk o2n1ism on1iste onita2 o2n1i2zé on1izo o2n1izz on1íg o2n1ín o2n1ív on1íz onk1áll onká2rok. onké2t1 on2ne. on3nyár on3nye on3nyo on3nyú on3nyü o2n1ob ono1g2ráf. ono1g2ráfn onoka2 on1o2kal on1o2kos o2n1okta o2n1old on1oll on1opt on1oszl ono1sztr o2n1o2v o2n1ox o2n1óri onó2sak onó2si onó2szen on1öb on1öl on1ön on1ör on1ös on1ö2t on1ö2v on1ö2z on1ő2s on1pl on1pr on1ps 2ons. onsa2v1a2m on1s2k on1sl on1s2m on1spe on1spo on1spr on1sr on1sto onsz2 on1szf on1szt ont1agy on2t1aj on2t1alk on2t1ara on2t1atr on2taz on2t1áll ont1árv on2teb on2t1ed on2t1e2g ont1elá ont1eld ont1elh ont1ell ont1elm on2teln on2t1elő ont1elt ont1elv ont1emb onte2s on2t1ese ont1éké on2tél on2tigé on2t1i2ko ont1ikr on2t1i2m on2t1inf on2t1int onti2sz ont1iszo on2t1iz on2t1í2v on2t1oml on2t1ors ont1óni 1ontóst on2t1ös on2t1öz on2tül on2tür on2t1üz on2tye o2n1ud o2n1ug o2n1uj onu2n o2n1una o2n1u2r o2n1u2t o2n1új o2n1ú2s onú2t on1útb on1úté on1úth on1úti on1útj on1úto on1útr on1útt on1ü2c o2n1ü2g on1ü2l o2n1ün o2n1ür o2n1ü2t on1ü2v o2n1ü2z on1űr on1űz o2ny1acé ony1a2dó ony1akc ony1alj o2ny1alk ony1alt ony1anya onya1p2 o2ny1apó o2ny1ál ony1árk o2ny1árn ony1ázó ony1e2c ony1e2g o2ny1e2l o2ny1e2m o2nyen o2ny1e2r ony1e2s o2ny1ég o2ny1é2j o2ny1é2k o2ny1él o2ny1é2ne o2ny1ér. o2nyéré onygóc1 o2nyigé ony1iko ony1ing o2nyita o2nyitók o2ny1í2r ony1old ony1oml o2ny1o2r o2nyosz ony1ó2r o2ny1ö o2ny1ő2 o2nyug o2ny1ur o2ny1ü2 onz1abl on2zag onz1ajtó on2zar on2zág on2z1á2l on2z1ed on2z1e2l on2z1e2m on2z1es on2z1ék on2z1ére on2z1im onz1ing onz3sel on2zü o1o oo2ib oo2in oo2pe oo2re oo2xi o1ó o1ö o1ő o2p1a2b o2p1a2d o2pal op1a2la o2p1any op1a2po op1a2r opa2u o2p1a2z o2pál o2p1ám o2p1á2rat opáskész1 o2p1áth o2p1átl o2p1átm op1bl op1e2dé op1e2g op1ejt op1elő op1em opera1s operasz2 op1erd op1erk op1erő op1es op1e2t o2p1é2l o2p1é2n op1gr op1i2ko op1ikr o2p1im op1ind o2p1ing o2p1i2p o2piram o2p1i2rá op1isi op1ist o2p1i2ta opi2z op1izo op1izz op1ív op1kl op1kr o2p1ob 2opol o2p1orj o2p1orr opor2t1a2 opor2t1á2 opor2t1e2 opor2t1érd opor2tö o2p1orzó oposz2f o2p1ov op1ös op2pé op2p1is op1py 2opro op2roc op2rod op1sl op1sp op1sr op1s2t o2p1ud o2p1u2r o2p1u2t op1új o2p1ús op1üd op1üg op1üt op1üz o2r1abl o2r1abr ora2dat o2r1a2dá or1adm o2r1a2dó or1aff or1agg or1a2gó ora2kad ora2kas o2r1akc ora1kl ora2kol o2r1akt or1alg o2r1alj or1alk o2r1alm o2r1alt o2r1alv or1amp o2r1ana o2r1ane o2r1ank o2r1a2no o2r1ant or1a2nya oraó2 or1app o2r1a2rá o2r1arc or1a2ri or1aszk o2r1atk o2r1atl or1att or1aty o2r1a2zo o2r1ábr orá2cs or1ács. or1ácsa or1ácso o2r1á2g orá2le or1álló o2r1állv orá2lö o2r1á2p o2r1ár. o2r1á2rak o2r1árá o2r1árb o2r1árk o2r1á2ro o2r1árp o2r1árr o2r1árt or1á2ru or1árú o2r1árv o2r1ásv orá2sze o2r1áta o2r1á2t1e2 o2r1átf o2r1áth o2r1átj o2r1átk o2r1átm o2r1átr o2r1áts o2r1átt o2r1átv or1bl or1br or2c1a2l or2car 1orcád or2chá or2c3hé or2c3ho orc3ság or2c3seb or2c3sé or2cú or2cz or2d1au ord1eme ord1e2ső or2dex or2d1ing 2orea o3reá o2r1e2b or1ecs o2r1e2d o2r1ef or1e2ge or1e2gé o2r1e2gy 2ore2k or1eke or1eké ore2l or1ela or1ele or1elh or1elj or1elm or1eln or1elo or1elő or1elr or1els or1elt or1elv o2r1e2m ore2n or1ene o2r1eng or1eny o2r1ep or1eró ore2s or1ese or1esé or1eső o2r1ess o2r1esze o2r1e2v or1ez o2r1é2d o2r1é2g o2r1é2j oré2kás oré2k1e2 or1ékné o2r1é2l o2r1é2m o2r1é2ne o2r1ép o2r1éré o2r1é2te o2r1étk o2r1év. o2r1é2ve o2r1é2vé o2r1é2vi o2r1évn o2r1évr orfé2l1é2v orfi2úér 2orgiai or1gl o2r1ibo o2r1i2de o2r1i2dé oridi2 ori2d1io 1o2rie o2r1ifj o2r1i2ga o2r1i2gá o2r1i2gy or1iha o2r1i2ma. o2r1i2má o2r1i2na. o2rinas o2r1i2nán o2r1i2nát or1i2náv o2r1ind o2r1inf o2r1ing. o2r1ingc o2r1ingé o2r1ingi o2r1ingn o2r1ingr o2r1ings or1inh o2r1inj o2r1ins orin2t1a2 orin2tel orin2t1ő ori2og o2r1i2p o2r1i2si o2r1ism or1isp o2r1iste o2r1i2szá ori2tan o2r1i2zé o2r1íg o2r1í2j o2r1í2n o2r1ír o2r1í2v o2r1í2z 1orjaia 1orjaié or3já or1k2l orkö2z1e2p or1k2v or2m1app orma1t2re or2m1att or2m1azo or2m1eb orme2g or2m1egy orm1eli orm1elv orm1erők orm1esz ormé2t or2m1éte or2m1osz or2móv or2m1ö or2m1ő or2mü or2ne. ornis1s o2r1o2á orogkész1 oro2k1á2 oro2kor o2r1olda o2r1o2li o2roltól o2r1ontó. o2r1ontób or1ontóé or1ontóig o2r1ontój o2r1ontón o2r1ontór o2r1ontót o2r1ontóv oro2nya oro2nyo or1ope or1opt o2r1o2r o2r1osko o2r1osto 1o2roszi 1o2roszr o2rosztá o2r1o2x or1ó2ia or1ó2ni or1ó2rá or1óri or1ó2sá oróso2r oró2soro or1ö2b or1ö2c or1ö2l or1ön or1ör or1ös or1öt or1öv or1ö2z or1ő2r or1ő2s or1ph or1pl or1p2n or1p2r orr1abl or2r1a2r or2r1áta 1orrb 1orri. or2rin or2riz 1orrk 1orruk 1orrú. 1orrúc or2s1a2d or2s1ajtók ors1alk ors1ass or2s1ál or2sed or2s1e2s or2s1é2ne or2sérte ors1é2tát or2s1í2r or2sön or2ső or1srá or1s2tab ors1ült ors1ü2tő 1ország orszi2l1 ors3zóná or1sz2t or2t1agg or2t1alm or2tana orta2n1á2c or2t1aré or2tág ort1árad ort1á2ram ort1á2rán ort1á2rár ort1árbe ort1árná ort1á2ruk or2t1á2rú or2t1e2g ort1ejt or2t1ela ort1e2lem or2t1elé or2t1ell or2t1elm or2t1eln or2t1elo or2t1elő or2t1elt ort1elv ort1emb or2tene orte2r1a or2t1ess ort1eti ort1éle ort1élé ort1élt ort1élv or2t1érm or2tid ort1i2ku or2t1int or2t1ist or2t1ita or2tít or2t1okm or2t1o2kol or2t1okta or2t1old or2t1orm or2t1ott or2t1ó2r or2t1ön or2t1ös or2t1ö2v ort1ura ort1úr. or2t1ü2zér o2r1ud o2r1u2g o2r1u2r o2r1u2t o2r1útb o2r1úth o2r1ú2ti o2r1útj o2r1útn o2r1ú2ton o2r1útr or1úts o2r1útt or1üd or1ü2g or1ü2l or1ün or1ür or1ü2s or1üt or1ü2v or1üz or1űr 1orv. or2v1a2n 2orvá orv1isi 1orvos or2vő 1orvv or2z1a2var. or2z1e2c or2zes or2zsan orz1z o2s1abl o2s1a2da o2s1a2dó o2s1akc o2s1a2l osa2n o2s1ang o2s1ant o2s1any o2s1a2p os1arc os1assz os1a2ty o2s1au o2s1ábr o2s1á2g os1áld o2s1áll os1á2lom osára2 osá2rak osári2 osá2rik osá2rok o2s1áru osás1s os1á2t1a os1áté os1átj os1átk o2s1átr os1e2d o2s1e2g o2s1e2l os1emb os1e2n o2s1er o2s1es os1e2t os1ex os1ez o2s1é2g o2s1é2l o2s1ép o2s1érd o2s1érte o2s1érté osgé2 o2s1ide o2s1if osi2g os1iga os1ikr os1inf o2s1int o2s1i2p o2s1i2rá os1iro os1irt o2s1ism os1isp os1iste o2s1i2sz o2s1íj o2s1í2r o2s1í2z os1kl os1kró 2osok o2sonh o2sonn o2sono 1o2sont o2sonu 1osonv o2s1o2r os1osz osó1p os1ök os1ö2l os1ön os1ö2v os1ő2r os1p2l os1p2r os1ps os1sta ossu2 os2s1ur ossz1áll ossz1á2ro ossz1es ossz1íj osszó2 os3sző ost1e2te os2tip os2tir os2tiz 1ostob ost1old os2t1ös 2ostu os2t1ü2 1ostya o2s1ud o2s1uj o2s1u2r o2s1u2t os1úr. o2s1ú2s o2s1üg o2s1ün o2s1ü2v o2s1üz os3zabá o2szaj osz1alá osz1alk osz1alt osza2n osz1any o2szar osz1aré osza2t1e2 o2sz1ál o2sz1ed o2sz1e2g o2sz1e2l o2s3zen osz1ep osz1es o2szég o2széj o2sz1é2l o2sz1é2p o2sz1és o2szige osz1ing osz1ism osz1ist oszí2 osz1ív o1szkl o2sz1o2ro osz1ors o2sz1orz os3zón osz1ó2r o2szö os3zöl osz2t1alm oszt1any osz2t1apo osz2tár. osz2t1árn osz2ted osz2tell osz2t1em oszté2r osz2t1éré osz2t1ív osz2t1osz o2szur osz1úr o2szü osz1üg os3zül ot1abl ot1a2da otag2 ota1gr ota1k ot1ana o2t1ant ot1a2ny ota1p2 ot1arc ot1arz ot1ass o2t1a2z ot1ábr o2t1á2g ot1á2rak o2t1á2rá o2t1árb o2t1á2ré ot1árn ot1bl o2teb o2t1e2g otel1a ote2l1á ote2lel ote2lő ote2m1á ote2m1o ot1e2v o2t1é2l o2t1ép o2t1ér. o2t1érté o2t1érz ot1fr ot1gr oth2r o2t1id o2t1im otina2 ot1i2na. oti2nar oti2nár o2t1ind otinká2 2otipa 2otipi 2otipn 2otipt o2t1irá o2t1is o2t1izé ot1íj ot1ín ot1kl ot1k2r o2t1ob oto1gram ot1ola otona2 oto2n1á oto2n1in. oto2nis oton3n oto2rak oto2rál oto2rár oto2re oto2rim oto2rin oto2rol otosz2f otó1f2 2otóp otó2pan otó2pas otó2pin otó2p1osz otó2sétá otós3s otó1sta otó1sz otó2s3zár otót2 otó1tr ot1ö2l ot1ös ot1pl ot1pr ot1ps o1t2rag ot1sp ot1sr ot1st otta1g2 ot2t1é2g 1ottl ot1ura ot1u2sz o2t1új ot1úri ot1ü2l ot1üt ot1ü2z ot1űr otva1k2 otya1 o1u ou2ag ou2il ou2le o1ú o1ü o1ű ova2ga ova2g1i2n ova2r1an ova2rát ova2r1el ova2rék ova2rés ova2ris ovas3s ovau2 ováb2b1o ová2s1á2rá ová2sik ovio2 ow1el 1oxidb 1oxidr o2xigé 1oxilc oy2ce oza2g ozag1a oz1agi o2z1a2l oza2mal oza2m1e2 oza2m1érté oza2min oza2n o2z1any oza2r oz1ara oza2tat oza2tál oza2t1e2 oza2tés oza2t1é2te ozat1ill oza2t1í2 oza2t1ol o2z1au o2z1á2g ozá2ke oz1áll o2z1á2ro o2z1áru ozá2s1e ozás3s ozá2s3z o2z1átl oz1e2g oz1e2m oz1en ozé2k1e2 o2z1é2l o2z1é2p o2z1é2ré oz1i2do o2z1i2par oz1iro ozi2s1aj ozi1sl ozi1st ozi1sz2 ozi2t1a2 oz1í2n o2zor oz1ors o2z1osz ozóegyez1 2ozófia 2ozófiáb 2ozófiáh 2ozófiája 2ozófián. 2ozófiána 2ozófiár 2ozófiát. 2ozófiátó 2ozófiáva ozó2tan oz1p2r o2zs1a2l ozsa2n ozs1any o2zs1ő ozs1s o2zsü oz1ün oz1ü2z oz1űr ozzá1s2 2ó. ó1a óa2cé óa2dag óa2dá óa2do óa2dó óa2ga óa2gi óa2gy óa2já óajtói2 óa2kad óa2kar óa2ká óa2ku óa2la óala2g1 óa2lá óa2l1e óalmana2 óalmanac3 óa2lo óal1os óa2lu óa2ma óa2na óa2nó óa2ny óa2pá óa2po óa2pó óa2pu óa2ra óa2rá óa2ré óa2ri óa2ro óa2to2 óatom1 óa2ty óa2uk óa2ur óa2ut óa2va óa2xi óa2zo ó1á óá2bé óá2cs óá2ga óá2gi óá2go óá2gyú óá2hí óá2la óá2lo óá2po óá2rá óá2ru óá2rú óá2sa óá2só óá2sz óá2ta óát1a2dó. óá2tá óá2t1e2 óá2té óá2t1i2 óá2tí óá2to óá2t1ö óá2tu óá2tú óá2tü 2óbab 2óbaj 2óbak 2óbal 2óband 2óbank óba1p2 2óbará 2óbark 2óbarna óbas2 óba1t2r óbau2 2óbec 2óbef 2óbeg 2óbeh 2óbej 2óbek 2óbele 2óbelé 2óbels 2óbem 2óbeo 2óber 2óbet 2óbev 2óbez ó2bég 2óbil 2óbio 2óbir 2óbit 2óbiz ó1b2le ó1b2lo 2óbój 2óbólé ób2rá ó1b2ro ób2rók ó1b2ru óbuda2ik óbuszt2 óbu2sz1ú ó2c1aj ó2c1akr óc1a2la óc1alk ó2c1ar ó2c1ass óc1att ó2c1ál 1ó2ceá ó2c1e2g óce2l óc1ele óc1elm óc1elő óc1emb ó2c1e2v ó2c1ép ó2c1ét óc3há óc3he óc3ho óci2m óc1imi óc1ing ó2c1i2pa ó2c1is óc2lu ó2c1or ó2c1osz óc1ó2r óc1pr 2ócsa óc3ság ó2cs1áru 2ócse 2ócsé 2ócsi ó2csit 2ócsí 2ócso 2ócsö 2ócső ócs1p óc3s2pá óc3sz óc1tr ó2c1ud óc1ün óc1üz óc3za óc3ze óc3zu ód1ada ód1a2dá óda2j ód1ajá ód1akt 2ódal. 2ódala ód1alg ó2d1am ód1ana 2ódarabk 2ódará ód1aut ód1azo ó2d1áf ó2d1ág ó2d1ál ó2d1áp ó2d1árn ód1á2ru ódás3s ód1bl ód1br ó2d1e2d ó2d1e2g ód1e2lem ó2d1elh ód1elj ó2d1ell ó2d1elm ó2d1elo ód1elő ód1elr ó2d1elv ód1emb ód1eme ód1ep óde2ra ód1erő óde2sés ó2d1e2v ó2d1ez ó2d1é2g ó2d1ép ó2d1érte ó2d1érz ód1fr ód1gl ó2d1i2d ó2d1igé ó2d1int ódi2p ó2d1ipa ó2d1iro ódi2sz ód1izo ó2d1ír ód1kl ód1kr ód1kv 2ódob ódo2ga 2ódok 2ódol 2ódom ó2d1op ó2d1osz ó2d1o2x ódókész1 ód1órá ó2d1ö2l ód1ös ó2d1öt ó2d1öv ód1őr ód1pr 2ó1d2ram 2ódrá ód2rám ó1d2rog ó1d2rót ód2ruk ód1sp ód1st 2ódug ódu2r ó2d1ura ódus3s ódu2s3z ó2d1u2t ó2d1új ód1úr. ód1üg ó2d1ür ód1üv ód1üz ód3zár ó2d3ze ód3zso ó1e óe2bé óe2ch óe2cs óe2dé óe2dz óe2ge óe2gé óegész1 óe2gy óe2ke óe2ké óe2l1a2 óe2l1á2 óe2le óel1en óe2lé óel1ér óe2l2i óe2l1í2 óe2lo óe2lő óe2lü óembe2r1ék óe2me óe2mé óe2mu óe2ne óe2pé óe2pi óe2po óe2re óe2ré óe2ró óe2rő óe2se óe2sé óe2ső óe2sz óe2te óe2ti óe2tű óe2ve óe2vé óe2vő óe2zü ó1é óé2be óé2ge óé2gé óé2gő 2óé2he 2óéhs óé2ke óé2ké óé2kí óé2le óé2lé óé2lő 2óé2ne óé2pí óé2pü 2óér. 2óérd 2óé2re 2óé2ré óé2ri óé2rő 2óérte 2óérté 2óérz óé2te 2óétk óé2ve óé2vé óé2vi óé2vü 2ófa. 2ófaa 2ófaá 2ófab 2ófac 2ófad 2ófae 2ófaf 2ófag 2ófah 2ófak 2ófal 2ófao 2ófap 2ófar 2ófas ófa1st 2ófa1t2 2ófaü 2ófav 2ófaz ófe2l1em ófe2len ó2f1ev 2ófék 2ófélő 2ófélt 2ófén ó2f1ér. ófi2ab ófi2ad ófi2ag ó1f2la ó1f2lo óf2ló óf2lö óf2lu 2ófoc 2ófog 2ófok 2ófol 2óford 2óforg 2óformác 2óformáj 2óformál 2óforr 2ófos 2ófot ó2f1ov ó1f2rak ó1f2ri ó1f2rí ó1f2ro ó1f2rö ó2f1ud ófu2r óf1ura óf1úr. óf1úrn óga1p óg1dr óge2o ógé2p1i2p óg3gy ógi2al óg1ír óg2la óg2le ógo2ras ó1g2raf óg2rán ógu2sab ógu2s3z ó2gy1el ó2gy1es ó3gyi. ógy1int ógyö2k1érb ógyta2n1á2 ógyte2a ógy1ús óha2de 2óhal 2óhan 2óhas 2óhat óháza2d óhá2z1ada 2óhon 2óhor 2óhos óhús1s ó1i 2ói2de 2óidé ói2dén ói2di 2ói2dom 2ói2dő 2ói2ga 2ói2ge 2óigé ói2géb ói2géi ói2géj ói2gék ói2gén ói2gér ói2gét ói2gév ói2konb 2ói2konj 2ói2konn 2ói2kono ói2konr ói2kont óile2 2óill ói2ma. 2ói2má ói2mi 2óimp 2ói2na. ói2nai ói2naka ói2nas ói2nat ói2nán ói2nár ói2nát 2óind 2óinf 2óing 2ói2ni 2óinj 2óinp 2óint 2óinv ói2pa 2ói2rat 2ói2rá 2ói2ro ói2sz 2ói2ta ói2tók ói2vad ói2zé ói2zo ó1í óí2rá óí2ri óí2ro óí2ró óí2té óí2vé óí2vü óí2vű óí2ze óí2zé óí2zi óí2zü óí2zű ója1g2 2ójakén. ójak2r 2ójam ója1p2 2ójav 2ójárá 2ójárm 2ójáró. 2ójáru 2ójárv 2ójáté 2ójáts óje2gy1á2 2ójut 2ókab ók1a2da ók1ajt ó2k1akó ó2k1alj ók1alko 2ókaló 2ókamp 2ókamr 2ókapa 2ókapc 2ókaps 2ókar. 2ókara 2ókarr 2ókart 2ókata 2ókate óka1t2r ók1aut 2ókav 2ókaz ó2k1áll ók1árad ó2k1á2ri ó2k1árn ó2k1áru 2óke2d ó2k1edz ók1egé 2ókem ó2k1emb 2óker óker1este óke2r1ékné óke2rig ó2k1e2rő óke2r1üg óke2sz ók1esze óke2t ók1ete 2ókev 2ókez ó2k1é2l 2ókém 2ókény 2ókép. 2óképb 2óképe óké2p1e2l 2óképé 2óképl 2óképn 2óképpel 2óképr 2óképt 2óképz ó2k1ér. 2ókérd 2ókére 2ókéré 2ókérő 2ókés ó2k1étt ók1étv ók1gr ók2hiá 2ókia 2ókiá 2ókic 2ókie2 2ókié 2ókif óki2g ók1iga ó2k1igé 2ókií 2ókij ók1ill 2ókim ók1imi 2ókinc 2ókine ó2k1int 2ókiny 2ókio ó2k1isk ó2k1ist 2ókisz 2ókit 2ókiv ók1i2va ók1k2r ók2lim ó1k2lí 2ó1k2ló 2ó1k2lu 2ókock 2ókoco 2ókoe 2ókoh 2ókoll 2ókomé 2ókomf 2ókomp 2ókonc 2ókonf 2ókonj 2ókons 2ókont 2ókony 2ókonz 2ókoo 2ókop 2ókorá óko2r1á2s 2ókorb 2ókore ó2k1org 2ókori 2ókorl 2ókorm 2ókorn 2ókoro 2ókorr 2ókors 2ókoru ó2k1oszl 2ókód ók1ó2l 2ókór ó2k1óv 2óköl ók1ö2lé ók1ö2lő ók1örd ók1ötl ók1pl ók1pr ó1k2rá ók2reá 2ó1k2rém ók2rét 2ó1k2ri ó1k2rí ók2ron ók2ros 2ó1k2rón ók1sk ók1st ó2k1ug ó2kum 2ókup 2ókur óku2sz1ál óku2sze 2ókut 2ókúr ó2k1üg 2ókül 2óküs ók1üzl 2ó1k2vó ól1ajt óla2man óla2pa ó2l1a2pál óla2pol óla2p1osz ól1a2rá ól1azo ólá2b1út 1ó2lál ólás3s ólá2sü ól1átl óleí2 ól1e2se ól1e2sé ól1esh ól1esn ól1ess ól1est óle2ta ólete2 óle2t1ev ó2l1érz ólé2tel ólé2tés óli2ako óli2am óli2s ól1iszo ól1ín óloma2 ólo2m1al ólo2m1á ólo2m1e ólo2mis 1ó2lomr ó2l1osz ólóá2 óló1sl óló1sp ólót2 ó2l1öl ó2l1ör ó2l1ös ó2l1ö2z ól1p2r ólu2m1e ólus3s ólu2szá ól1üt ól1üv ólya2ga ólyag1g óly2á óm1abl ó2m1a2cé 2ómagn óm1akn óm1all 2óman 2ómara 2ómarc ómaren2 2ómarh 2ómark ómas2 óma1sp 2ómass 2ómate óm1a2to ó2m1au 2ómax 2ómág óm1áll 2ómárk 2ómárt 2ómáz óm1b2r óm1e2gy ó2men. 2óméd 2ómél óm1éle ó2m1ép 2ómére 2óméré 2ómérg 2ómérk 2ómérn 2ómérő 2ómérs 2ómérté ómiac1 ómi2as ó2m1i2b ómi2g ó2m1igé 2ómi2k óm1iko 2ómin ó2m1i2ono ó2m1i2ont ó2m1i2p 2ómis ó2m1isk ó2m1ist ómi2sz ó2m1i2z 2ómod 2ómog 2ómoh ó2m1ola ó2m1old 2ómond 2ómoni 2ómono 2ómont 2ómor 2ómos ó2m1osz 2ómot ó2m1ox 2ómoz óm1öt óm1őr óm1pr óm1üt óm1üz óműt2 2ónad 2ónag óna2kás óna2k1e2 óna2kol ón1alj. ón1aljak ón1aljá ón1aljo ón1alju 2ónap óna2pa. óna2pá ó2n1apába óna2pe ón1arc ó2n1asp ón1aszt óna1t2 2ónav óná2l ó2n1áll ó2n1álo ónás1s ón1br óne2d ón1ez 1ó2néé 2óném ón1épí 1ó2néra ón1érc ó2nérd 1ó2néró óné2v1á 2ónéz óni2g ó2n1igé ó2n1ist ón1odv 1ó2nokul 2ónor ón1ox ón1ön ó2n1ör ón1öt ónőé2h ón1pr ó2n1u2t ón1ür 2ónya 2ónye 2ónyil 2ónyitá 2ónyitó. 2ónyí 2ónyo 2ónyu 2ónyú ó1o óo2dú óo2ka óo2ká óo2k1i2 óo2ku óo2la óo2li óo2pe óo2ra óo2ri óo2ro óo2vi óo2xi ó1ó óó2la óó2lá óó2li óó2lo óó2ra óó2ri óó2sá óó2vá óó2vo óó2vó ó1ö óö2bö óö2ko óö2kö óö2lé óö2lő óö2rö óö2ve óö2zö ó1ő óő2re óő2ré óő2ri óő2rö óő2rü óő2sé óő2sö ó2p1a2da ó2p1alk óp1anal ó2p1a2no óp1ant ó2p1any óp1a2rán óp1áll ópcsa2p1 ó2p1ef ó2p1e2g óp1elo ó2p1id óp1ind ó2p1i2o óp1i2rá ó1p2lak ó1p2las ó1p2lu ó2p1ob ó2p1o2la ópo2rad óp1óra ó1p2ri óp2rod óp2rop ó1prób óp1t2r ópus3s ó2p1új óp1üv ó2rabé ór1ace 2órada óra2dat ó2raib ó2raié óra2iér ó2raih ó2raii ó2raij ó2raik óra2iké óra2iko ó2raim ó2rain ó2raip ó2rais ó2rait ó2raiv 1ó2raje 2órajo 2órajz óra1kv ó2rala ór1alk ó2ramo ó2r1ani ór1ant óra1p2l ór1arc 1órare óra1s2p ó2r1a2tom 1ó2raü 1óráén ór1ágg ór1á2gy 1órákh 1ó2ráki ó2r1ál 1ó2rámé 1ó2rámo 1órámr ó2r1á2p órá2se 2óráta ór1átv ór1br ór1ege ó2r1e2gy ó2r1e2le ór1ell ór1elm ó2r1elo ó2r1e2lő ór1elv ór1emb ór1eml ó2r1e2r ó2r1e2set ó2r1e2tá ó2r1e2té ó2rezü ór1é2je ó2r1é2l ór1é2ri óré2vek ór1fl órhá2zot óri2aka óri2al ó2riási óriás3s óri2ch ó2r1id ó2r1int ór1i2onn ór1i2ono 2órip ó2r1i2pa ó2r1i2si ó2r1isme 2órit óri2z ór1izo ór1í2j ó2r1ír ór1í2z ór1kl órmé2s ór1o2ká ó3roké ór1o2ki óro2kok óro2koz ór1o2ku ór1okú ó2r1osz ó2r1o2x ó2r1óda óró2dáj órói2ko óró1p ór1ósá 2óróz ó2r1ö2l ó2r1öml ó2r1ös ó2r1öt ór1őr ór1p2r ór1trá óru2mag óru2me ó2r1u2r óru2sab óru2san óru2se órus3s óru2sü óru2s3z ó2r1uta ó2r1ú2s ó2r1út ór1ün ór1ü2v ór1üz 2ósabl ó2s1a2d ó2s1a2g ó2s1alj ós1alt ós1amn ó2s1apr 2ósar ó2s1arcot ó2s1asp ós1ass ó2s1atl ó2s1au ósa2vo ó2s1ábr ó2s1áf óság1g ó2s1áll ós1á2lo ó2s1á2ro ós1áti 2ósáto ós1bl ós1br óscsap1á2 2óseb ós1e2gy 2ósej ós1elj ós1elm ós1e2lő ós1els ós1elv óse2m ós1emb ós1emi ó2s1en óse2p ós1epo ós1erő ó2s1es ó2s1e2t ó2s1ez ó2s1é2l 2ósém ós1é2ne ó2s1ép ó2s1ér. ó2s1érte 2ósét ósé2táka ó2s1é2te ós1étk ós1étt ós1fr ó2s1i2d ósi2g ós1ige ósi2kerb 2ósikl ós1ind ós1inf ósi2p ós1ipa ós1iro ó2s1isk ós1ist 2ósík ó2s1ính ós1í2rá ós1í2ró ó1s2kat ós2kic óski2s ós1kl ós1kv ós2lag 2óslá ó1s2ni 2ósokas 2ósokko 2ósoks ós1oli 2ósor ó2s1org ó2s1orj ó2s1orm ó2s1ott ó2s1ov ó2s1ó2r ó2s1ö2l ó2s1ös ó2s1öt ós1őr ó1s2pec 2ó1s2pek 2ó1s2pir ós1pl ó1s2pu ós1s2k ós1s2p ós3sze ós3szö 2ó1s2tab ó1s2tad ó1s2taf 2ó1stand 2ó1s2tat 2óstá ós2tább ó1s2tád ó1s2tát ó1s2tég 2óstí ós2topo 2óst2r ós1tré ós1tri ó1stru 2óstú 2ósug ó2s1u2r ó2s1u2t ós1úr. ós1ú2ri ós1úrn 2ósül 2ósür ó2s1üs ó2s1üz 2ósűrí 2ósza ó2s3zac ósza2k1ü ó2sz1a2lap 2ószá ószá2gol 2ószed 2ószeg ó2sz1e2gű 2ószek 2ószel 2ószem 2ószen 2ószer. 2ószere ósze2r1e2pé 2ószerk 2ószerv 2ószerz 2ószez 2ószé ószé2n1é2 2ószi ó2szima 2ószí 2ószk ósz2l 2ószob 2ószoc 2ószof 2ószol 2ószon 2ószó 2ószö ó2sz1ös 2ósző 2ószp ós3zs 2ószt ó1sz2tá ószt2rá 2ószú 2ószü ó2sz1üg 2ószűk 2ószűré 2ószűrő ó2s3zűrt ósz2v ót1adó 2ótag. 2ótaga óta2gal 2ótagb 2ótag1g 2ótagi 2ótagj 2ótagk 2ótagn 2ótago 2ótags 2ótagu ót1ajk 2ótalap 2ótalá ót1alk ó2t1alm 2ótan ót1anti 2ótap 2ótar ótas2 ó2t1ass 2ótat ót1a2ur 2ótax 2ótág ót1á2ga ót1ágg 2ótáp ótára2d ótá2r1ada 2ótáro 2ótárs 2ótávc 2ótávi2 ótá2v1ir 2ótáví 2ótávk ó2t1e2g ó2t1elh ó2t1e2lő ó2t1emb ó2terd ót1égé ó2t1é2ké óté2t1ö2 ót1fr ó2t1i2d óti2g ó2t1igé ót1ill ó2t1im ó2t1ing ót1i2pa óti2sz ó2t1í2r ó2t1í2v ó2t1íz ót1kr ótlé2ke 2ótoj 2ótol ótol2l1a2d ót1oml 2óton 2ótor ó2t1ors 2ótov 2ótó. 2ótón ót1öko ótőe2 ót2rad ót2raf ót2rak ót2ran ót2rén ót2rik ót2ril ót2rió ót2rom ót1sl ót1sp ótsze2r1ep ótu2sze ót1ülé ót1ü2lő ót1üst ó2t1ü2v ótű2z3s ó1u óu2bo óu2ga óugrás1s óuj2j1a2da óu2ni óu2no óu2ra óu2sz óu2ta óu2tá óu2to óu2tó óu2tu ó1ú óú2jí óú2ré óú2sz óú2ti óú2to ó1ü óü2gy óü2le óü2lé óü2lő óü2nő óü2re óü2rí óü2rü óü2sz óü2te óü2té óü2tő óü2ve óü2ze ó1ű óű2ző 2óvad 2óvag 2óvaj 2óvak. 2óvaks 2óvaku 2óvaló 2óvar 2óvas ó2vat 2óvág 2óvák 2óvál 2óván óvá2r1al óvárosi2h ó2vása 1ó2vási ó2váso 1ó2vásr 1ó2váss 1ó2vást 2óváz óve2r1a óveri2 óve2rip óv1in 1ó2vod ó2vom 2óvon óza1d2 óz1a2dá óz1a2dó 2ózaj óz1akc óza1kr óz1akt óz1a2la óz1arc óza1s óza2t1a2l óza2tan óza2tál óza2tés óza2told óza2t1ü2 2ózav ó2z1á2g óz1áll ó2z1á2ru ó2z1á2rú óz1bl 1ózdi ó2z1e2g ó2z1el óz1em óz1erő ó2z1ex óz1ez ó2z1é2l ó2z1é2te óz1fl óz1fr ózhajói2 óz1imp óz1ing ó2z1i2p ózi2s1e2 ózi2sir ózis3s ózi2s3z ó2z1old ózo2n1a2 ózo2n1á ózo2ni ózós2 ózó1sp óz1őr óz1pr ózsa1k2 ó2z3ser óz3sor óz3sz óz1t2r 2ózuh ó2z1u2r ó2z1u2t óz1ú2s ó2z1út óz1ü2g óz1ül óz1ü2z 2ö. ö1a ö1á öb1a2n öb1ál öb1á2r öb1át öb2b1a2 öb2b1á2 öb2b1eg öbbe2l öb2b1ele öbbe2m öbb1eme öb2b1e2r öb2b1esz öbb1eve öb2bél öb2bid öb2b1is öb2bí öb2b1ol öb2b1os öb2bot öb2bó öb2bö öbbü2 öb2b1ül ö2b1ef ö2b1eg ö2b1e2l ö2b1e2m ö2b1e2n ö2b1er ö2b1él ö2b1ér. ö2b1érté ö2b1érz öb1fr ö2b1i2d ö2b1ing ö2b1int 1öbli 1öblö öb1or öb1ón ö2böll 1öböltő öc1aj öccs1a2 öccs1i ö2c1ép ö2c1éve öc3he öc3hö öció2 öc1őr ö2cs1a öcs1éj öcs1ék ö2cs1é2te ö2csiz öcs1izz öcs1ó ö2cs1ö2l öcs1ű2r öc3sz öd1a2l öd1a2n öd1ar öd1á2l öd1ár ö2d1ef öd1ell ö2d1em öd1e2vé ödé2m1o ödé2sa ödés3s ödé2s3z ö2d1é2ves öd1é2vén öd1é2vér öd1gr öd1íz öd1os öd1óc öd1ó2r öd1sp öd1u2s öd1új öd1ú2s ö2d1üv ö2d1űz öd3zá ödzáró2 öd3zu ö1e ö1é öfés3s ög1ab ög1a2c ög1a2d ög1ag ög1a2k ög1a2l ög1a2n ög1ap ög1ar ög1as ög1a2t ög1áb ög1ág ög1á2l ög1á2r ög1át ög1dr ö2g1e2g ö2g1e2kéi ög1elb ö2ge2leme ö2g1elf ö2g1elha ö2g1elm ö2g1elo ö2gemel ö2g1er ö2g1esz ög1e2vé ö2g1é2g ög1ékt ö2g1é2p ö2g1ér. ö2g1érs ög1érté ögés3s ög1fr ö2g1id ö2g1i2m ög1inf ö2g1ist ö2g1iva ö2g1i2z ög1ín ög1ír ög1ív ög1kr ög1o2l ög1op ög1o2r ög1os ög1ó2r ög1öli ög1ölö ö2g1öv ög1pr ögre1p2 ög1sk ög1sp ög1tr ög1ud ög1u2n ög1u2t ö2g1üg ö2g1üs ö2g1üt ö2g1üv ö2g1üz ö2g1űz ög3ya ö1i ö1í öj2tél öj2t1o ök1ab ök1a2g ök1a2k ök1a2l ök1a2n ök1a2p ök1ar ök1as ök1a2t ök1au ök1a2v ök1ág ök1ál ök1á2p ök1á2r ök1át ök1áz ök1dr ö2k1e2d ö2k1e2g ö2k1eke öke2l ök1ela ök1ele ök1elh ök1elm ök1eln ök1elő ök1elv ö2k1e2m öke2né öken1s ök1erd ö2k1e2resz ö2k1e2rő ö2k1es öke2vés ö2k1ez ö2k1ég ö2k1ékn ök1éks ök1é2les ö2k1ép öké2r1e2l öké2r1em ö2k1é2rez ö2k1é2rés ökés3s ö2k1é2te ö2k1é2ve. ö2k1é2vek ök1é2vet ök1fr ök1gl öki2d ök1ide ök1ido öki2g ök1iga ö2k1igé ö2k1ikt ö2k1i2na ök1ind ö2k1ing ö2k1int ö2k1i2o ö2k1i2p ö2k1iro ö2k1is ö2k1iz ök1íj ö2k1ír ök1ív ök1íz ök1kl ök1k2r 1öklű ök1ok ök1old 1ökoló 1ökon ök1o2p ök1o2ro ök1orr ök1ors ök1o2v ök1ó2r ök1óv 1ökör. ökö2rö ökőár1a2d ökőé2 ök1pr 1ökrös 1ökrü 1ökrű ök1sp ök1sr ökszi2l1 ök1t2r ök1u2n ök1u2r ök1us ök1u2t ök1új ök1úr ök1út ö2k1üg ökü2l ö2k1ülé ö2k1ült ö2k1ü2t ö2k1ü2v ö2k1üz öl1a2d öl1ag öl1a2j öl1a2k öl1al öl1ap öl1a2r öl1au öl1a2v öl1á2g öl1ál öl1á2m öl1á2p öl1á2r öl1á2s öl1át öl1á2z öl1br ölcsa2l ölcs1á2p ölcs1á2r ölcs1ell öl2csev öl2csid öl2csiz öl2cs1ok ölcs1ol öl2csos öl2csüg öl2csül öl2dab öl2d1a2d öl2d1a2k öl2d1a2la öl2d1alj öl2d1alk öl2d1a2n öl2dap öl2d1as öl2d1á2 öl2deg öl2dep öl2dev öl2d1éd öl2dél öl2d1ing öl2dip öl2d1o2r öl2dos öl2d1ó2 öldő2 öl2dőr öl2dős öl1dró öl2dur öl2d3z 1ö2l1e2b öle2gel öleg1g ö2lel ö2l1e2r ö3l2e3sü öle2t1á2 öle2t1el öle2to öle2t1u ö2l1e2v ölé2d ö2l1éde 1ö2léé ö2l1é2g ö2l1é2kes ö2l1ékí ö2l1él. ö2l1é2le ö2l1é2lé ö2l1élh ö2l1é2li ö2l1élj ö2l1éln ö2l1éls ö2l1élt ö2l1élv ö2l1éme ö2l1é2neke ö2l1é2p ö2l1ér. ö2l1é2red ö2l1é2rek ö2l1é2rezn ö2l1éré ö2l1érh ö2l1é2ri ö2l1érj ö2l1érk ö2l1érl ö2l1érn ö2l1érs ö2l1érte ö2l1érté ö2l1értü ö2l1é2rü ö2l1érv ö2l1érz ölés3s ö2l1é2tet öl1fr ölgyá2 öl2gyer ö2l1i2d öli2g ö2l1iga ö2l1igé ö2l1igy ö2l1ij ö2l1il ö2l1im ö2l1i2n ö2l1i2p ö2l1i2r ö2l1i2s ö2l1i2ta ö2l1itt ö2l1iz öl1í2r öl1í2v öl1o2c öl1o2k öl1ol öl1or öl1o2s öl1ó2v ölö2ki ö2l1ökl ö2l1öl öl1önt ö2l1ör ö2l1ö2v öl1őrl öl1őrö ölpárba2 öl1p2r öl1sk öl1sr öl1st öl2t1ad öl2taj ölt1ala ölt1alj ölta2n öl2tid öl2til öl2tí öl1tro öl2tur öl1u2g öl1uj öl1u2s öl1u2t öl1új öl1ús ö2l1üd ö2l1üg ölü2le öl1ülté ö2l1ültö ö2l1ülve ö2l1üs ö2l1üt ö2l1üv ö2l1üz ö2l1űz ö2ly1a2 ö2ly1á öly1e2g ö2lyel öly2föl öm1a2d öm1a2g öm1al öm1a2n öm1a2p öm1ar öm1au öm1áb öm1ág öm1áh öm1ál öm1áp öm1á2r öm1á2t öm1áz öm2b1a2c öm2b1ak ömba2l öm2b1a2n öm2baz öm2b1á öm2bec ömb1ele öm2b1e2m öm2b1es öm2bék öm2b1i2d öm2bin öm2bí öm2b1os öm2b1ó2 öm2bú öm2bür ö2m1e2b öme2g1a2 ömeg1e2r öme2gesz öme2g1ék öme2gép ömeg3g öm1egy ö2m1e2l ö2m1ember ö2m1emel ö2m1e2r öme2s ö2m1ese ö2m1este ö2m1ég ö2méhs ö2m1é2l öm1é2nekb ö2m1é2neke ö2m1é2neké öm1é2nekh ö2m1é2nekk ö2m1é2nekr ömé2ny1ü ö2m1ép ö2m1ér. ö2m1érte ö2m1érté ömés3s öm1gr ömi2g ö2m1igé ö2m1in ö2m1i2p ö2m1i2ta ö2m1itt ö2m1izm ö2m1i2zo öm1í2z ömkész1 öm1kl öm1kr ömlés3s 1ömlöt öm1o2k öm1o2l öm1or öm1os öm1ó2d öm1ó2r ö2m1önt öm1p2r öm1sp öm1st öm1tr öm1u2g öm1uj öm1u2t ö2m1üg ö2m1ünn ö2m1üv ö2m1üz ö2m1űz ön1ab ön1a2d ön1a2g ön1a2j ön1a2k ön1a2l ön1am ön1a2n ön1a2p ön1ar ön1as ön1at ön1au ön1a2v ön1az ön1áb ön1ág ön1ál ön1ám ön1á2p ön1á2r ön1á2t önát1a2dó. önát1é ön1áz önbé2két. ön1bl ön2c1ál ön2ch ön2cő önc3ség önc3sz ön2cz ön2dab ön2dap önde2m ön2d1ér. ön2d1érn ön2d1érr ön2d1értő ön2d1or ön2d1ő ön2dz ö2n1eb ö2n1e2d ö2n1ef ö2n1e2g ö2n1e2l ö2n1e2m öne2n ön1ene ö2n1e2r ö2n1es ön1e2v ön1ex ön1é2g ö2n1éj ö2n1é2k ö2n1é2l ö2n1é2p ö2nérd ön1éri ön1érl ön1érte ön1érv önés3s ön1ész ö2n1éte ö2n1étt ö2n1év. ö2n1éves ön1évet ö2n1é2vér ö2n1é2vét ö2n1évv önfe2lem ön1f2r ön1g2l ön1g2r öngy1as ön2gyék öngy1ó2r 2öngyö ön2győ ö2n1i2d ön1if öni2g ö2n1iga ön1ige ö2n1igé ön1ill ö2n1im ö2n1in ö2n1i2p ö2n1i2r ö2n1is ön1ita ö2n1i2z ön1íj ö2n1ír ö2n1íz ön2k1ag ön2k1any önk1áru ön2kát önk1olt ön2k1ú önkü2 önmeg1g önna2k ön2n1á önny1a2d önny1á önny1e2dz ön3nyú ön1o2d ön1o2k ön1op ön1or ön1os ön1ox ön1ó2c ön1ó2r ön1óv ön1öb ö2n1ör ö2n1ö2v ön1őr önő2re ön1őz ön1pl ön1pr ön1ps önségü2ké ön1s2p ön1s2t2 önsz2 ön2t1ell öntgen1n öntös3s 1öntöz ön1t2ra ön1t2rá ön1t2ré ön1ud ön1un ön1u2r ön1u2s ön1u2t ön1új ön1ú2s ön1út ön1üd ö2n1ü2g ö2n1ür ö2n1ü2t ö2n1üz ö2ny1a2 ö2ny1á öny1d ö2ny1el ö2ny1id ö2ny1in ö2nyí ö2ny1o ö2nyüz öny2vaj öny2v1a2l öny2van öny2v1á2r öny2v1e2g öny2v1er öny2v1esz öny2vev öny2v1ég öny2vél öny2v1ér. öny2v1ill öny2v1í öny2v1o ö1o ö1ó ö1ö ö1ő öp1aj öp1a2l öp1ál öp1e2l öpe2nyá öp1e2r ö2p1ép öp1ö2lő ör1ab ör1a2c ör1a2d ör1a2g ör1aj ör1a2k ör1a2l ör1a2n ör1a2r ör1as ör1a2t ör1a2u ör1a2x ör1a2z ör1áb ör1á2c ör1á2g ör1á2l ör1á2r ör1á2s ör1á2t ör1br örcs1ál örcs1ell örcskész1 ör2csos 2ördí ör1d2r 2ördü ö2r1e2c ör1e2dz ö2r1ef öre2ga öre2g1ék ör1e2gy öre2j1á öre2k1e2sz öreké2 ö2r1e2l ö2r1em ör1enc ö2r1e2p ö2r1e2r ör1e2se ö2r1e2tető ö2r1e2v ö2r1ex ö2r1ez ö2r1é2de ö2r1é2g ö2r1éj. ör1éks ö2r1é2l ö2r1éneke ö2r1ép ö2r1éré ö2r1é2ri öré2sel öré2t1e2g ö2r1étv ör1é2ve. ö2r1évk ör2fá ör2f1év ör2f1i2p ör2fis ör2f1os ör2főr ör1g2r ö2r1i2d öri2g ö2r1iga ö2r1igá öri2k ör1iko ö2r1ill ö2r1im ö2r1ind ö2r1ing ö2r1inj ö2r1ink ö2r1int ö2r1inv ö2r1i2p ö2r1ira ö2r1i2s ö2r1i2ta ör1itt ö2r1ivá ör1i2zo ö2r1ír ö2r1í2v ö2r1í2z ör1k2l ör2k1öltő ör1k2r örle2ta ör2l1in örny1a2l örny1a2n örny1as örnye2l örny1ele ör2ny1er ör2nyéj ör2nyés örny1í2r ör2nyó ör1ob ör1o2k ör1o2l ör1op ör1o2r ör1os ör1ó2r 2örög örö3g2e 1örömü ö2r1önt ö2r1ör ö2rössze ö2r1ösz örpe1t2 ör1s2p ör1s2v örta2r örtá2v1 ör2t1éks örté2l ör2t1élé ör2t1élő ört1érne örté2sz ör2tív ör2t1ok ör2top ör1ud ör1uj ör1u2n ör1u2r ör1u2s ör1u2t ör1új ör1úr ör1ú2t ö2r1üd ö2r1ü2g örü2l1ék ö2r1ür ö2r1üs ö2r1üt ö2r1ü2v ö2r1üz 1örv. örva2s 1örvb 1örvek 1örvem 1örvet 1örvéb 1örvéh 1örvév 1örvh 1örvn 1örvr 1örvt 1örvü 1örvű 1örvv örz4s ör2zs1á2 ör2zs1e2l ör2zsid ör2zsin ör2zsir ör2zs1í2 ör2zs1o ör2zsó ör2zsu ör2zsú ös1a2g ös1al ös1ár ö2s1el öses3s ö2s1ez ösié2 ö2s1i2p ös1k2r ös1o2l ös1o2r összá2r 1összeg össz1emb 1összes ös3szí öst1arc ö2s1ü2v ö2sz1a2 ösz1e2r öszi2s ösz1isz ö2sz1o2 ö2sz1ő ösz2t1ell öt1ab öt1aj öt1a2k öt1a2l öt1am öt1as öt1a2t öt1áb öt1ág öt1ál öt1ár öt1á2s öt1eké öt1e2m öt1ep öt1es öte2t1a2 öte2tel öte2u öt1e2v öt1e2z ötélé2 öté2lék öté2l1o öt1érté öt1érz ötés3s öt1é2ves öt1fl öt1fr öt1gr öt1i2r öt1í2v öt1kr 1ötlet ötle2t1á 1ötlé öt1ok öt1ol öt1or öt1os öt1ó2r ö2tödb 1ö2tödd 1ö2tödne 1ötödöt 1ö2tödr 1ötödü ö2tös ötőa2 ötőe2 ötőé2 öt1pr öt1sc öt1st öt2t1a2c öt2tar öt2t1as öt2t1ál öttá2r ött1erk ött1érte öt2t1ut öt1uj öt1un öt1u2t öt1ü2l ötve2n1ez ö1u ö1ú ö1ü ö1ű öv1ab öv1ak öv1á2r öv1e2dz öve2g1a2 öveg1és öveg1g öve2go öv1e2r öve2t1a2 öve2teg öve2t1é2l öve2to öve2t1ú övetü2l öve2t1ülé ö2vé. öv1ég öv1é2j övé2nyel övé2nyer övé2nyö övé2sza övé2szá övé2szer övé2szo övé2szö övé2szül övi2dá ö2vih övis3s ö2viv öv1or öv1ó2d öv1ölt övőrés3s öv1ut öz1ab öz1a2c öz1a2d öz1a2j öz1a2k öz1a2l öz1a2m öz1a2n öz1a2p öz1a2r öz1at öz1au öz1az öz1á2g öz1ál öz1á2m öz1á2p öz1á2r öz1á2t özát1é öz1d2r ö2z1e2b ö2z1e2d öze2gel ö2z1egés özegész1 ö2z1e2gy ö2z1ela öze2leme ö2z1e2m öz1eng öz1ent öz1epr ö2z1er ö2z1es öze2t1é2k özető2 öze2t1őr ö2z1e2v ö2z1ég ö2z1é2je özé2k1e2l öz1élel öz1é2let. öz1é2lé öz1élm öz1élt özé2m öz1éme özé2p1a özé2p1el özé2p1em özé2pí öz1épít özé2p1o ö2z1ér. ö2z1érb ö2z1érd ö2z1érh ö2z1é2ri özér2t1e2h ö2z1értele ö2z1érté ö2z1értő ö2z1érv ö2z1érz öz1étk öz1fr özi2g ö2z1iga özigaz1 ö2z1igá ö2z1igé ö2z1igy ö2z1i2ko ö2z1ikt ö2z1ill ö2z1i2m ö2z1inf ö2z1ing ö2z1inp ö2z1int ö2z1inú ö2z1inv ö2z1ira öz1irá ö2z1i2ri öz1iro ö2z1iró öz1isko ö2z1ism ö2z1isp ö2z1i2sz ö2z1iz öz1ír öz1íz özmeg1g öz1ob öz1o2k öz1ol öz1op öz1os öz1ov öz1ó2h öz1ón 1özönt ö2z1ö2r öz1össz ö2z1öv özőa2 özőe2r öz1őr. öz1őrk öz1ő2rö öz1pl öz1p2r öz3sa öz3sá öz3se öz3sé öz3s2k öz3so öz3s2p öz3sú öz3sz öz1t2r öz1ug öz1u2n öz1ur öz1ut öz1ú2r öz1út ö2z1üd ö2z1ü2g öz1ünn ö2z1üt ö2z1üv ö2z1ü2z öz3zs 2ő. ő1a őa2da őa2dá őadás1s őadá2sz őa2do őa2dó őa2du őa2ga őa2gá őa2gi őa2gy őagyag1 őa2ja őa2já őa2ka őa2ká őa2kó őa2la őala2g1 őa2l1e őa2lo őa2mő őa2na őa2no őa2nó őa2nyá őa2pa ő2apar őa2pá őa2po őa2pó őa2pu őa2ra őa2rá őa2ri őa2ro őa2sz őa2to őa2ty őa2ul őa2ur őa2ut őautói2k őa2va őa2xi őa2zo ő1á őá2cs őá2gai őá2gak őá2gas őá2gat őá2gá őá2gé őá2gi őá2go őá2gú őá2gy őá2hí őá2la őá2lo őá2mí őá2po őá2ra őá2rá őá2re2 őár1em őá2ri őá2ro őá2ru őá2rú őá2sa őá2sá őá2so őá2só őá2su őá2sz őá2ta őá2t1á2 őá2t1e2 őá2té őá2tí őá2tü őá2vó őba1p őb2le őb2lo őb2ri őb2ro őb2ró őb2ru őc1ap őc3cso őc1gr őc3há őc3hé őc3hö őc2lu ő2cs1ala őcsa2p1á2g ő2cs1é2j ő2cs1é2rü őcs1őst őcs1s őc3sz őd1a2da őd1a2dá ő2d1a2lap ő2d1au őd1ál őd1á2z ődea2 ő2d1e2g őd1eld őd1elj őd1elk őd1e2lő őd1els ő2d1ép ő2d1érte ő2d1érz ődé2sa ődé2so ődés3s ődé2s3z ő2d1id ődi2g ő2d1iga őd1ind őd1int ő2d1isk ő2d1op őd1ost ő2d1ö2l ő2d1öv őd1őr. őd1ő2ré őd1őrn őd1őrr őd1őrt ő2d1őst őd1pr őd2ram őd2rap ő1d2rá ő1d2res ő1d2rog ő1d2ró ő1d2ru őd1st őd1t2r ő2d1üg ő2d1üz ő2d3zá ő1e őe2ce őe2cs őe2dé őe2dz őe2ge őe2gé őe2gy őe2ke. őe2kék őe2la őe2l1á2 őe2lek őe2lemé őe2lemg őe2lemh őe2lemm őe2lemn őe2lemr őe2lemü őe2li őe2lo őe2lö őe2lőd őe2lü őe2ma őe2me őe2mé őe2mu őe2ne őe2pi őe2po őe2re őe2ré őe2rőd őe2rőé őe2rőh őe2rői. őe2rők őe2rőm őe2rőrő őe2rü őe2sé őe2si őe2ső őe2ta őe2te őe2ti őe2un őe2vé őe2vi őe2vo őe2vő őe2ze ő1é őé2de őé2et őé2ge őé2gé őé2gi őé2gő őé2hem őé2hes őé2ji őé2ke őé2ké őé2kí őé2lé őé2lő őé2lű őé2nekb őé2neke őéne2kest őé2neké őé2nekk őé2nekr őé2pí őé2pü őé2rem őé2ren őé2rez őé2ré őé2ri őé2tek őé2va őé2ve. őé2vek őé2ves őé2vet őé2véb őé2vén őé2vér őé2vét őé2vi őfa2l1a2d őf2la őf2le őf2lo őf2ló őf2lö őf2lu őfo2kál őfo2kér őfo2kin őf2ra őf2rá őf2ri ő1f2ro őf2rö őgé2p1e2l őgépü2l őgép1ülé őgés3s őg2le őg2ló őg2nó ő2g1ö2l őg2ra őg2rá őg2ri őg2ró őguba2 őgy1a2la őgy1art ő2gyeg ő2gyel őgy1e2lő őgy1elv őgy1elz ő2gyin ő2gy1ör őhangá2 őhan2g1ára ő1i ői2dea ői2deá ői2deg ői2deo ői2dén ői2do ői2dő ői2ga ői2ge ői2gé ői2gy ői2ko ői2ma ői2má ői2mi őim1p2l ői2nas ői2on ői2pa ői2ra ői2rá ői2ri ői2ro ő2iru ői2si ői2sz ői2tala ői2talá ői2talé ői2tali ői2tall ői2va ői2vá ői2vó ői2zé ői2zo ő1í őí2gé őí2ja őí2ra őí2rá őí2ro őí2ró őí2ru őí2vá őí2ve őí2vé őí2vi őí2vükb őí2vüke őí2vün őí2vű őí2ze őí2zü őí2zű ője2gy1á2 őjob2b1ol őjob2b1ó őjogá2szi őke1k2 őke1p2 őkes2 őke1sp őke1st őké2p1el őké2s1el őkiá2 őkie2 ők2la ők2le ők2li ők2lí ők2ló ők2lu őkóro2 ő1k2ra ő1k2rá ő1k2reá ők2red ő1k2ré ő1k2ri ő1k2rí ő1k2ro ő1k2ró ők2va őleí2 őlés3s őlőé2r őlőt2 őlő1tr őma2gár őmag1g őma2g1ó2 őműé2h őműé2n őműt2 ő2n1e2ke őn1ems őnéve2 őnév1es ő2ny1a2d őnya2g ő2ny1aga őny1a2la őny1ára őny1á2ro ő2nyát ő2nyef őnye2lem ő2ny1elh ő2ny1ell ő2ny1elo ő2ny1em ő2ny1élv ő2ny1ő ő2nyüz ő1o őo2áz őo2be őo2dú őo2ká őo2k1i2 őo2kí őo2ko őo2la őola2j1á2r őola2je őo2pe őo2rá őo2ri őo2ro őo2so őo2ve őo2xi ő1ó őó2ce őó2ha őó2no őó2nu őó2ra őó2rá őó2ri őó2va őó2vó ő1ö őö2bö őö2dé őö2ko őö2kö őö2lé őö2lő őö2na őö2re őö2rö őö2ve őö2vé őö2vi őö2vö őö2zö ő1ő őő2re őő2ré őő2ri őő2rö őőr2s1égb őőr2s1égn őő2se őő2si őpárba2jo őp2la őp2le őp2lé őp2ne őponc1 őpo2ral őp2re őp2ré őprés1s őp2ri őp2ro őp2ró őp2sz őr1a2dó őr1a2gá őr1agg őr1ajk őraj2t1ól őr1akc ő2r1a2l őral1e őra2n őr1any őr1ap ő2r1a2r ő2r1a2s ő2r1at ő2r1au ő2r1a2z 1ő2r1áb őrádi2ók őr1ágy őrá2k1e ő2r1á2l ő2r1á2p őr1á2ru 1őrbí 1őr1bl 1őr1br 2őrea őreá2li őree2 őre2get őr1e2gye őrei2g ő2r1ekc ő2r1ekh őre2lem őr1elh ő2r1ell őr1e2lőa őr1els őr1elt ő2r1elv ő2r1emb őr1eml őren2d1ő2 őr1enz őreo2 őre1prog ő2r1e2ső őreu2 őreü2 ő2r1ex 1őrezr 1ő2r1ég. 1őrégn 1őr1égt 1ő2r1ékh őr1ékné őr1éks ő2r1é2l őr1épü ő2r1é2ri őré2sa őré2sza 1ő2réü őr1é2ve. őr1é2vek őr1fl 1őrfő őr1fr őr1g2r ő2r1i2d ő2r1if ő2r1i2ga ő2r1i2gá őr1iha őr1ill ő2rim őr1imi őr1i2na őr1ind ő2r1inf ő2r1int őr1i2pa őri2s1á őr1ivá őr1i2zé. ő2rizg őr1izm őr1i2zo őr1ír 1őrjö őr1k2l őr1k2r 1őrlö ő2r1okt őr1old 1ő2r1o2li őr1oll ő2r1or ő2r1osz ő2r1ó2r ő3rög 1ő2rökü ő2röl 1őrömü őr1öng ő2r1ör ő2r1össze 1ő2r1őr ő2r1ő2s 1őrősr ő2r1ő2z őr1pl őr1p2r 1őr1p2s 1őrs. őr2s1ál 1őrsí 1őrsö őr1s2pe őr1spi őr1srá őrs3s őr1sz2 1őrszen őr2s3zöm 1őr1t2r 1ő2r1un 1ő2r1u2r őr1utá ő2r1új őr1úr ő2r1út ő2r1üd őr1üld 1ő2rüle ő2r1üs ő2r1üt ő2r1üz 2őrzősö ő2s1ad ő2s1a2g ős1ajtób ő2s1ajtók ősa2n ős1ana ősa2p ős1arc ős1ass ős1au ő2s1áb ő2s1á2g ősá2l ős1áll ős1ára ős1árv ős1dr ős1e2d ő2s1e2ge ő2s1e2gy ős1elm ős1e2lő ős1elv ő2s1e2m őse2n ős1ene őse2p ős1epi ős1epo ős1e2rej ős1erő ős1ess ős1esz ős1etn ő2s1e2v ő2s1ez ősé2g1e2l ő2s1éger ősé2gés ő2s1ék ő2s1é2l ős1ép ős1fl ős1fr ős1gn ős1gr ő2s1i2d ő2s1if ősi2g ős1iga ős1i2ma ős1i2má ős1imi ős1inf ős1ing ős1int ő2s1i2pa ős1i2ra ős1ist ős1i2sz ő2s1i2z ősí2ka ős1í2ró ős1í2z ős2kál ős1kl ős1k2r ős1kv ős2lat ős2nit ős1ob őso2k ős1oko ő2s1o2l ő2s1op ő2s1org ő2s1os ős1óc ős1óri ő2s1ö2l ős1önz ősö2r ős1örd ős1öre ős1örö ős1örv ő2s1ö2z ős1őr ős1ő2s ős2pec ős2pek ős1p2l ős2pór ősp2r ős2rác ős1sk ős1s2p ős1s2t őssz2 ős3sza ős3szá ős3szeg ős3szek ős3szell ős3szem ős3szen ős3szer ős3szes ős3szék ős3szén ős3szf ős3szi ős3szí ős3szl ős3szo ős3szó ős3szö ős3sző ős3szu ős3szü ős2tad ős2tat ő1s2tát ő1s2teri ős2tég ős2til őst2r ős1tre ős1un ősu2t ős1uta ős1úr. ős1ú2s ősza2k1e ősza2k1ü ősz1e2lő 2őszerk ő2szerő ősz1est őszi2l1i2 ősz1ill ősz1ist őszö2l ősz1ölé ősz1ölő ősz1ölt ős3zse ősz3sir őszt2 ő2s3zűrű őtermo1 őtermosz2 őtes2t1ő őtol2l1a2d ő1t2ra ő1t2ré ő1t2ri őt2ro ő1t2ró őttes3s őt2tés őtt1int őt2t1o2 őt2t1u2 őtűfé2 őtűfél1 ő1u őu2go őu2ni őu2ra őu2rá őu2ru őu2ta őu2tó őu2tu ő1ú őú2jo őú2ré őú2ri őú2ro őú2sz őú2té őú2ti őú2to ő1ü őü2dü őü2ge őü2gy őü2le őü2re őü2rí őü2sz őü2te őü2té őü2ti őü2tö őü2tő őü2ve őü2vö őü2ze őü2zé ő1ű őű2ré őű2ri őű2rö őű2zé őű2ző ővasfé2 ővasfél1 ővár1al őve2r1a 2ővet ővé2res ővé2ret őz1abs ő2z1a2d őz1a2g ő2z1ak ő2z1a2l ő2z1a2t ő2z1au ő2z1ál őz1á2t1e2 őz1bl őzeg1g őze2g1i őz1e2gy 1ő2zekn őz1elo őz1els őz1elv ő2zem őz1emb őz1e2mel ő2z1e2r őze2t1a2 őze2t1eg őze2t1el őze2ter őze2t1o ő2z1ér. őzé2rem ő2z1é2ri ő2z1érl őz1érté 1ő2zié ő2zi2g őz1igé ő2z1in ő2z1iz őz1k2r őz1o2k őz1ol őz1os őz1össz őzőa2 őzőe2l őzőe2r őz1p2r őz3saj őz3sap őz3sát őz3sik őz3sis őz3s2t ő2z3sü őz3sz őz1t2r őz1út őz1üg ő2z1üs ő2z1ü2z őz1ű2z 2p. 1pa 2p1abl pa2cem pa2ch pa1cl pa2csú p1a2dag pad1ala pa2d1as pa2d1á2l pade2 pa2d1el pa2d1em pa2d1id pa2d1iga p1a2dott pa2du. pa2dut pa2dül pae2r paé2r pa1fl pa1f2r pa2ga. pai2dé 2p1ajtó pa2kad paka2r1ó pa2k1e2m pa2k1ér. 2pakku pa1klu pa2k1ó2 pa1k2ré 2p1akta. pak2tal pak2t1e2l pak2t1es pak2t1e2v 2p1akti pak2t1or. pak2t1orr pak2tos 2palag pala2g1ú pa2lapí paláza2d palá2z1adá pa2l1é2l 2p1alf 2p1alg 2p1alle 2p1almá pal1ud pam1ass pa2m1ur pamu2ta pana2d pa2n1ag pa2nal pan1ala pa2n1á2r panás1s pan1d2 pang1g pa2n1il pan1kro p1anny pa2nol pans2 pansz2 pan1szt pa2nü 2p1a2nya p1a2nyu pa2p1ad pa2p1a2pa papa2r pap1ara pa2p1aszt pap1áll pa2p1il pa2p1i2na. pa2p1i2p pa2p1o2ku pa2pö pap1p2 pa2p1ur pa2p1u2t pa2pú 2para. para2je par1a2la 2parann 2p1a2rany 2pa2r1a2r pa2r1ágá pa2r1ágn pa2r1ágo pa2r1ágv 2paráh 2p1a2ráj par1áll 2parár 2paráv 2parb 2p1arc. 2p1arca 2p1arcc 2p1arch 2parci 2p1arco 2p1arct 2p1arcu 2p1arcú pa2r1el pa2r1é2l 2parig 2paril pa2r1ill par1isk par2k1a2l par2k1á par2kel par2k1ing par2kov par2kó par2kön par2k1ö2v par2k1ő2 par2k1ü 2paros. 2parosi 2paroso pa2rö pa2rő 2parr pars2 par2tem par2t1ol par2t1ő2 pa2r1ü2 pa2rű past2 pasz1alj pasz1alt pa2szas pat1ada patakö2 pa2t1alk pat1anya pa2t1ara pat1álc pa2t1árk pa2t1e2g pa2t1ell pate2s pa2tél pa2t1ér. pa2t1érd pa2t1ére pa2t1érte pa2tid pa2t1int pa2tir 2p1atka. 2p1atkánk pa2t1old pa2t1olt 2patombe pa2t1osz pa2t1otth pa2t1ut pa2tús patü2 pa2t1üz 2p1a2tya 2p1a2tyá 2paur pau2ra p1a2vat pa1wh 2p1a2xi 1pá 2p1á2bé 2p1ábr 2páca 2pácá pá2c1e pácé2 pá2c3h pá2c3só pá2csö pá2csü 2p1ág. 2p1á2ga 2p1ágg 2p1ágy. 2p1á2gya. 2p1á2gyac 2p1á2gyad pá2gyaib pá2gyaid pá2gyaih pá2gyaik pá2gyaim 2p1á2gyain pá2gyair p1á2gyakb pá2gyaké pá2gyaki p1á2gyako 2p1á2gyakr pá2gyakt 2p1á2gyal 2p1á2gyam 2p1á2gyan pá2gyast 2p1ágyaz 2p1á2gyáb 2p1ágyál 2p1á2gyán pá2gyátó 2p1á2gyáv 2p1ágyb 2p1ágyc 2p1ágye 2p1á2gyé 2p1ágyf 2p1ágyga 2p1ágygo 2p1ágyh 2p1á2gyi 2p1ágyj 2p1ágyk 2p1ágyl 2p1ágym 2p1ágyná 2p1á2gyos 2p1á2gyö 2p1ágyp 2p1ágyr 2p1ágys 2p1ágyt 2p1á2gyu pá2gyú 2p1ágyü 2p1ágyv 2p1ágyz 2p1ájt pála2 pá2lab pá2lac 2p1álar 2p1áldo pá2le p1álla. 2pállap 2p1állí 2p1állom 2p1állv 2pálmo pá2lü p2ály pálya1s 2pámi 2p1á2mí pá2mu pána2 pá2naf pá2n1am pá2n1an pá2nar pá2n1as pá2nár pá2n1e2 pá2nék pá2nil pá2nir pá2nis pá2ní pán1kré 2pánkt pá2n1ó2 pá2nö pá2nő pán1sz pánte2 pán2tek pán2t1el pá2nü pá2ny1ad pá2ny1a2l pá2ny1a2n pá2nyar pá2nyat pá2nyau pá2nyaz pá2ny1e2 pá2nyérd pá2nyim pá2nyö 2p1á2po pár1adó 2páras 2páráé pár2d1a2 pár2del pá2r1e2 pá2r1i2p pá2rő pár1s2 pár2t1ag 2pártal párt1any pár2tari pár2tál párte2 pár2t1el pár2tem pár2tes pár2tet pár2tél pár2t1ér. pár2t1é2te pár2tiz pár2tott pártö2 pár2tök pár2t1ő pár2tus pártü2 pár2t1üz pá2ruh pá2ruk páru2t pár1utu pá2rún pá2rü 2p1á2sás pá2s1e pá2sir pá2ső pás3s pá2s1ü2 2p1ásván pá2t1a2 pá2tá pá2tel pá2t1e2m pá2tis 2p1átka. 2p1átkát 2p1átkáv p1átlag 2p1átló pá2t1or 2p1átrak 2p1átté pá2t1uk pát1úrt pá2tü 2p1átvét pba2l1 pbé2r1e2l pb2lo pb2ra pb2ri pb2ro pci2ófo pcsa2p1á2g pcső2s1orr pda2l1ad pdal1an pda2leg pda2lel pda2l1es pda2lén pda2l1í2 pd2ra pd2rá pd2ro pd2ró 1pe pea2p pea2r peca1 pec3c pe2cz pe2ed 2p1eff pe1fl 2p1e2gese pegész1 pe1g2r 2p1egz 2p1e2ke. 2p1e2kei pe1k2ré 2pektr pe2lál pe2lár pe2lekt 2pelemb 2pe2lemek pe2lemet 2p1e2lemé 2p1e2lemg 2p1e2lemh 2p1e2lemi 2p1e2lemk 2p1e2lemm 2p1e2lemn 2pelemr 2p1e2lemz pel1eró pele2t pel1ete 2p1elgo 2p1elha 2p1elhel 2peljá 2p1elleb 2p1elnev 2p1elny pe2los 2p1e2lö 2p1e2lőa 2p1e2lőá 2p1e2lőe pe2lőg 2p1e2lőh pe2lőí 2p1e2lőjá 2p1e2lőjeg 2p1e2lől 2p1e2lőz 2p1elren 2p1elsö 2p1eltá 2p1elto 2pelu 2p1elv. 2p1elvá pel2v1el 2p1elven 2p1elvh 2p1elvi 2p1elvo 2p1elvű 3pely 2p1elz 2p1ember 2p1e2mel 2p1e2més 2p1eml 2p1ems 2p1e2mu 2p1e2ner 2penged pen3ny. pen3nyb penny1ér pen3nyh 2p1ennyi. pen3nyj pen3nyk pen3nym pen3nyn pen3nyr pen3nyt pen3nyv pe2nya penyá2 pe2ny1e2l pe2ny1e2r peo2l peo2p peó2r pe2pe. 2p1e2pé pe1p2r pe2r1akt per1all pera1p2 perc1c per2c1el per2c1in 2perdő perec1c peregyez1 p1e2rej pe2r1elk pe2r1e2lőf pe2r1e2lőké pere2mért per1evé 2perfa pe2rid pe2r1il pe2r1i2na pe2r1i2ná pe2r1ind pe2r1ing pe2rí per1k2 p2erl per1okt pe2r1os pe2r1o2x pe2r1ó2r pe2rőd pe2rőf pe2rői pe2rőm pe2rőn pe2rőr 2p1e2rős pe2rőt pe2rőv per1st persz2 pe2rú pe2r1ü2g perü2l per1ülő per1ült p2erz pe2s1ebbel pe2s1ebbő pe2sésig 2p1e2sésű pe2sői pe1s2p 2p1esszév pes2t1a2 pes2t1er pe2szak pe2sz1ál pesz1ell pe2sz1elv pesze2m pe2szeme pe2szu pe2sz1ü2l pe2tal pe2t1a2n pet2á petet2 2petete 2peteté 2p1e2tető 2p1e2tika 2petim 2p1e2to pet2t1i pe2tűd pe2ug pe2vő 2p1ezr 1pé pé2csu pédü2 pé2d1ülé 2pééb 2pééi 2péén 2p1é2ge 2p1é2gé pégés3s 2p1é2hen 2p1é2hes 2p1é2het 2p1éhs 2p1éj. péje2 pé2j1eg 2p1é2ji 2p1éjj pé2k1as pé2k1au pé2k1á2 pé2k1er pé2k1ék pé2k1é2l péké2t pé2k1éte pé2k1i2n pé2kis 2p1él. 2p1élb pé2le. pé2lei pé2lek péle2l pél1ele pél1elmei pé2len pé2let 2p1é2lé 2pélm 2p1éln 2p1é2lő 2p1élt 2p1é2lű 2p1élv 2péneka 2p1é2nekb 2pénekd 2p1é2neké 2pénekf 2pénekg 2p1é2neki 2pénekí 2pénekj 2p1é2nekk 2p1é2nekn 2p1é2nekr 2p1é2nekt 2p1é2nekü pé2ny1el pén2z1a pén2z1á2 pén2zs pé2p1i2p 2p1é2pí 2pépü 2p1érc 2p1érd 2p1é2ré 2p1érh pé2rig 2p1é2rin 2p1érm 2p1érn 2p1é2rő. 2p1érr 2p1érte 2p1érté 2p1értő 2p1érv 2p1érz pé2s1aj pé2sal pé2s1e2l pé2sés péskész1 pé2so pés3sza pé2s1ü2t pé2sza pés3zaj pész1ak pés3zav pé2sz1á2 pé2sz1emb 2p1é2széné pé2szin pé2sz1o pé2sz1ö pész3s pé2szu pé2szú pé2sz1ű péta1 pé2tel 2p1étk 2pétl p1étla 2p1étr 2p1étv 2p1év. 2p1évb 2p1é2ve. 2pévei 2p1é2vek pé2ven pé2ves 2p1é2vet 2p1évf 2p1évh p1évk 2p1évn 2p1évr 2p1évs 2p1évt 2p1évv pé2zak pé2z1ár pé2zel pé2z1e2m pézi2 pé2zid pé2zin pé2ziz pé2zol pé2zsa pé2zu p2f1ép pfi2úé pfi2úkér pf2lo pf2ló pf2lu pf2rá p1f2re p1f2ri p1f2rí p1f2ro pf2ru pf1st pg2ra pg2ru pg2rü pha2de p2ha2i 1phanész 1p2hed phelyü2kü 1p2hia2 p2hic 1phila 1p2hoi phó2i 1pi pi2aa pi2aá pi2aba pia2cel pia2cél pia2cik pia2c3se pi2ad pi2ae pi2aé pi2ag pi2ah pi2aj pi2akén. pi2al pi2am pi2ao pi2aö pi2ap pi2aré pi2asza pi2at pi2aú pi2aü pi2ave pi2az 2picc pi2ce. 2picl pida2 pi2dan pi2dea pi2deá pi2dei pi2den pi2deo 2p1i2dom 2p1i2dő 2p1i2du pi2eg pi2er pi2ég pi1fr 2p1i2ga 2p1i2ge 2p1i2gé 2pigo 2p1ihl pi2k1ö pil2i pilis3s 2pilles 2p1illet 2pillés 2pillu 2p1i2ly 2p1i2má 2p1i2mi 2p1imm pinak2 pina1p 2pind 2p1inf pin2gas pin2g1á2r pin2gelj pin2gép pin2gos 2p1ingó 2pinj 2p1inp pin2tác pin2t1or pin2tőr pintu2 pin2tur pi2nü 2p1inv 2p1inz pion1n pi2óa pi2óá pi2óe pi2óf pi2óg pi2óki pi2ól pi2óma pi2ómé pi2óo pi2óp 2pipai 2pipar. 2p1i2pará 2piparb 2piparh 2piparn 2piparr 2p1irh 2p1i2rod pisau2 2pisko pi2s1op 2p1iste 2p1isza piszkos1s pi2t1aj pi2tala pi2tall pi2t1a2n pi2t1á2p pi1tä pi1the pitos1s pi2t1ü2 pi2vás 2p1i2zé 1pí pí2gé pí2já pí2né pí2r1a2 pí2rá pír1ál pír1á2r 2p1írás pí2r1e2 pí2r1in pír1i2s pí2rí pí2rol 2p1í2ró pí2r1ö2 pír1s pírt2 pír1tr pí2rü pí2rű 2pítél 2pítm pítőa2 pítőe2l pí2ve pí2ze pí2zé pí2zü pí2zű pke1p2 pke1s2 pkés1s pkia2 pkiá2 pkie2 pk2la pk2li pk2lí pk2lu pk2rá pk2re pk2ré pk2ri pk2ro pk2ró pk2va pk2vó p2lacc pla1k2l pla2pal plap1áll pla2p1osz p2latf 1plazmá pleí2 ple2t1a2n ple2t1e2l pléé2 plé2has pli2s3zá plo2m1e plo2mén plom1ol plót2 pló1tr plő2sa plő1stá plő2szár plu2m1e p2lur pmás1s pmeg1g 1po po2be pocsi2 po2cs1iz po2da. po2dz pogás1s po2in poki2 2p1o2k1ir po2kí 2p1okle po1k2ló 2p1okm poko2la pokol1l 2p1okta 2p1oktá polás1s pol2can polc3c pol2c3s 2p1olda polóá2 2poltár 2p1oltás 2p1olti 2p1oltó 2polvas po2n1a pon2c3so po2nel pon2g1e poni2 po2niz pon3n po2n1osz pon2t1a2d pon2tag pon2t1a2l pont1any pon2tál pon2tár ponte2 pon2t1el pon2tem pon2ten pon2tes pon2ték pon2t1ér. pon2t1éte pon2tisz pon2tí pon2t1ő2 2ponz po2ol po2p1a2 po2p1á2 2popc 2po2pe pop1el popi2 po2pik po2p1in po2p1ir po2pis po2p1o2l pop1p2 pop1s popsz2 2pop1t2 po2pú po2pü po2r1a2c po2r1ag po2rakk por1ala por1all po2ram pora2n por1any po2r1a2r po2rat por1ács por1áll por2can por2c3h por2c3sí pore2 po2rec po2res por1f2 por1g2 po2rid 2porie po2rih po2r1il po2r1i2m po2r1in por1k2 po2rö po2rő por2tamb por2t1au por2t1á2rá por2tárb por2tárn por2tej por2t1em por2tet por2tél por2t1ér. por2t1érk por2t1i2k por2tiz por2t1ív por2tur por2t1usz por2tut por2túr por2tű po2rü 2p1orvo pos3szo pos3szö 2postol 2p1osty po2sü po2sze po2szí 2p1oszl posz2tü po2tab po2tad po2t1a2l po2tan po2t1a2u po2t1e2l po2t1inf po2t1ip po2t1í2 po2tol po2tö po2tus po2tü po2vi 1pó pó2ce pó1fr pói2g pó2k1ass pó2kau pó2k1e2l pó2kem pó2ket pó2k1id pó2kim póki2s pók1isz pó2kiv pó2k1ös pó2k1ú pó2l1an pó2l1á pó2lom 2p1ó2né. pó1p2r p1ó2rad pór1á2sz póre2 pó2reg pó2rem p1ó2riá pó2rö pó2s1or pós3s pó2s1ü2v póta2 pó2t1ad pó2tal pó2t1an póté2r pó2til pótü2 pó2tül 2póün 2p1ó2vó pó2ze pó2z3sá 1pö pö2ka pö2ká pö2kel pö2ker pö2kid p1ö2ko pö2ku pö2kú pö2lye 2pönt pö2ra p1ördö pö2res 3pörg pö2ro pö2r1ő pö2rú 2p1öss p1ötl pötty1in 2p1ötv pö2ve 1pő pőa2n pőá2g pő1bl pő1dro pőe2r pőé2h pőé2l pő1kl pő1pl pő1pr 2p1őr. pő2ri. p1őrj p1őrl 2p1őrn p1őrs 2p1őrt p1ő2rü 2p1őrz pő1sz pp1ada ppai2 ppa2j pp1ajá pp1akk ppa2nad ppa2n1ell ppan1k2 pp1any pp1arc ppa1s pp1áll p2p1árj p2p1á2rok pp1átm p2p1á2to pp1átv p2p1e2gy p2p1e2kéh p2p1elo p2p1elr ppe2r1a ppe2ró p2p1ég p2p1éks pp2hó ppin2g1e2 pp1íg pp1kl pp2las pp2lat pp1o2ly p2p1o2rom ppor2t1á2r ppor2t1e2 ppor2t1ő2 p2p1ó2l pp1órá pp1ön pp1öv pp1ö2z p1p2ref p1p2rem p1p2rez p1p2rém pp2rin pp2rio p1p2roc p1p2rod p1prof p1prog p1proj p1p2ros p1p2rot pp2rób pp1sp p2p1úg p2p1úr. ppví2 ppvíz1 1p2rax p2remi 1p2repa pressz2b 2pret pret2á 1p2rédi p2rép pré2sa pré2s3zá p2riccs p2rius p2rizm prí2m1e2l prí2mem 1probl 1p2roce p2rof 1profe p2rog p2roj 1proje pro2mo p2ropa 1p2rote 1proté 1p2roto 1p2rovo 1próbá pró2d1e pró2dz 1p2róza pru2s1ág pru2se 1p2rüs p2s1a2d psé2gel ps1i2ha ps1í2ze p1s2ká p1s2mi p2s1ón p2s1ö2z p1s2pe ps2pi p1s2po ps1pr ps2rá ps3szó p1s2tá ps2ti p1s2tí ps2to p1st2r ps2tu p1s2tú psza2k1ü psz1any p2sz1as psz1atl p2sz1ág ps3záp p2szég psz2fé 1p2szic p2sz1ill pszis3s psz1k2 psz1old psz1orn p2sz1ön p2sz1ös psz3s pta2d pt1ada pta2n1á2s pta2ne ptá2raj ptáró2 ptá2rór p2t1eg p2t1e2ke. p2t1e2lő p2t1els pte2rál pté2ká pté2k1el p2t1érd pt1i2ma. p2t1i2n p2t1i2o p2t1i2r p2t1í2r pt1kl p2t1öt p1t2rag p1t2ran p1t2rá pt2ré ptu2sze ptu2szi p2t1úrr p2t1üt 1pu pua2d pu2csor pue2l 2p1ugr 2puká pul2tas 2p1u2ni 2puno 2p1u2nó puo2r pu1pr pu2rak pu2ral pu2sad pu2sal pusa2n pus1any pu2sap pu2sál pu2s1átl pu2s1e2 pu2s1érté pu2sik pu2sis pu2sí pu2sol pu2sö pu2ső puss2 pussz2 pust2 pu2sü pu2szag pu2szal pu2s3zár. pusz1é2p pu2szö pu2tab pu2t1a2d pu2tak puta2n 2p1u2taz put1ing pu2tol pu2tód 2p1u2tóp pu1trá 1pú 2p1úrf pú2sz 2p1útb pú2té 2p1ú2ti 2p1útj 2p1útk 2p1útn 2p1ú2to 2p1útp 2p1útr 2p1útt 2p1útv 1pü pü2ge pü2gy pü2kü 2püle püle2t1o 2p1ünn pü2re 2p1ü2rí 2p1üst 2p1ü2te pü2té 2p1ütk 2p1ü2tö pü2ve pü2ze 1pű pű2ző pvá2r1al pw2hi pwhisky2 py2ba py2bó py2do py2ho py2ja py2já py2ka py2ké py2ki py2ko py2ma py2na py2ná py2ra py2ró py1t2h py2tó py2va py2vá pze2t1a2 pze2t1á2 pze2t1e2r pzőa2 pzőe2 pzőé2 2q. 1qa 1qá 1qe 1qé 1qi 1qí 1qo 1qó 1qö 1qő 1qu qu2ae qu2at qu2er qu2ez que2zi qu2éb qu2ie qu2ij qu2il qu2in qu2is qu2od 1qú 1qü 1qű 2r. 1ra raa2d raáta2d ra2bad rab1asz rab1á2ra rab1árb rab1árr ra2b1át ra2b1ele ra2b1ell ra2bid rabi2g ra2b1iga ra2b1igá ra2b1im ra2b1i2na. ra2b1i2ná ra2bind ra2b1int 2rabla ra1bri ra2buj ra2c1aj rac3csa ra2cet ra2cha rac3hig ra2c3hok ra2c3hos ra2c3hot 2r1a2cid rac2kar rac2kit rac2k1ö2 rac2kü ra2dag ra2dalé rada2rad 2radaté radás1s ra2de. r2a3dí 2radíc 2radm 3radósi. 2r1a2dóz ra1drá ra1dru 2r1a2du. ra2dus rae2r raé2derb raé2dere raé2derh raé2dern raé2derr raé2dert raé2r rafikus1s ra1fl 2r1a2ga. ra2gak rag1alo ra2g1ác ra2gáé 2r1a2gán rag2de ragdi2 rag2din ra2gel ra2g1i2na. 2r1agy. ra2gyat 2r1agyn ra2gyon 2r1agyr rai2o 2raizá 2raizi 2raizn 2raizó 2raizu ra2j1a2d ra2j1au ra2j1á2ru ra2j1es ra2jin 2rajkáró 2r1ajkú rajob2 raj2t1e2l raj2t1en raj2zat raj2z1e raj2z1ón raj2z3s 2r1a2kara rak2kép rak2kis ra1k2li ra1klo ra1kló ra1klu 2raknáb 2raknái r1a2kóz rak2re ra1k2ré ra1k2ri rak2rom raktus1s 2r1a2kus r2alab 2r1a2la2g1 2ra2laku ra2lapa r1a2lapú ra2lázá ra2lázó 2r1alb 2r1aljai. 2r1alji 2ralk ralla2k ral2l1akó ral2l1at rallá2 ral2lág ral2lál ral2lev ralo2m1e ra2mab ram1ada 2ramai ram1akk rama2l ram1ala ra2m1any ram1áll ra2m1árá ra2m1árb ra2m1áre ra2m1árh ra2m1árn ra2m1árr ram1b ra2m1éhe ram1ide ram1i2ko ram1ill ra2m1im ram1ina ram1inf ram1ing ram1inj ra2m1i2p 2rammb 2rammet 2rammi 2rammj 2rammn 2rammr 2rammt ra2m1osz ra2m1ó2r ra2mö ra2mő ra2mü 2r1a2nal 2r1a2nat ranás1s ran2csal rancs1ág ran2cse ran2csik ran2cső rancs3z 2rand. ran2dat ran2d1au 2randj ran2dz ra2nek ran2g1a2 ran2g1á ran2ge rang1e2l ran2g1ó2 ran2gye ra2nil ra2nim 2ranka ran2szál ran2sze ransz1omb 2rany. ra2nyag rany1a2la ra2ny1a2n ra2nyap ra2ny1ar r1a2nyáit r1a2nyáka r1a2nyákh r1a2nyákk ra2ny1ál ra2nyás r1anyás. 2ranyb ra2ny1e2s 2ranyé ra2nyél 2ranyh ra2nyid ra2nyin ra2nyir rany1í2r 2ranyk 2ranyn ra2ny1ol 2ra2nyó rany1ó2r ra2nyö 2ranyr 2ranys 2ranyt ra2ny1ü 2ranza ra2óa ra2óá ra2óf ra2ólá ra2óm ra2óp ra2ósz 2rapa. ra2pák 2rapp rap2pin ra1p2re ra1pré ra1p2ri ra1p2ro 2rarann 2r1arany. 2r1a2ranya. 2r1a2ranyá 2raranyb 2raranyn 2raranyr 2r1aranyt ra2rat 2r1arco ra2rén 2r1art 2r1arz ra1s2ká ra1s2l ra1s2pe ra1s2po rassz1e 2rasszoc rast2 ra1s2ta ra1stá ra1str ra2sz1abl ra2sz1aj ra2szas ra2szat ra2szág ra2sz1árr rasz1emb ra2sz1étt ra2szób ra2szói ra2szón ra2szös rasz2t1a2ny rasz2t1el rasz2t1é2te rasz2tö rasz2tü ra2t1a2d rat1ajt rat1a2la rat1alt rat1ará 2r1a2tád rat1áll ra2t1árad ra2t1á2rai ra2t1á2rak ra2t1árb ra2t1árv ratát1a2 ratá2vi ra2t1e2g ra2t1elk ra2t1ell 2ratég rat1ége ra2t1érd rat1érke ra2térte ra2t1érv rat1ing ra2t1ír ra2t1íve 2r1atká 2ratlé 2ratoz. ra1t2ran 2r1attr ra2tür 2raty ra2tya ra2tyá ra2tyu ra2udi 2r1a2uk ra2ulá 2raum rau2n rau2ta rau2tá ra2uto 2r1autó rautóé2 raü2t raü2z 2ravató 2ravú ra2xü ra1ye ra1yé raz1ajt raza2n ra2z1any ra2zel ra2z1olt ra2zono 1rá rá1bre rá2cal rá2c1e rá2c3h rá2c1i2n ráci2óf rá2cö rá2csala rác3ság rá2csét rá2csir rá2cs1is rá2cú rá2cü rá2d1any 2rádáh 2ráddá 2rádju 2ráfha 2ráfhe 2ráfhi 2ráfid 2ráfre rág1ad 2rágam 2r1á2gaz rág1á2zá rá2gia rá2gil rá2gim rá2gis 2rágí rá2g1osz rágus4 rá2gü 2rágya 2rágyáb 2rágyáé 2rágyáh 2rágyái 2rágyáj 2rágyák 2rágyán 2rágyár 2rágyás 2rágyát 2rágyáv rá2gyu ráí2r ráj2k1a2 ráj2kel ráj2k1ó2 rá2jü rá2kát rá2k1ered rá2k1e2s rá1kla 2rákog rá2k1osz rá2k1ón rá2k1ó2r rá1krá rá1krét rá2l1ak rá2l1a2l rá2lana 2r1álar rála2t1e rá2lál rál1átl r1álcá 2r1áldá rá2lid rá2lim rá2lí 2r1állam 2r1állap 2r1állat 2r1állí 2r1állom 2r1álma rá2lü rá2lyal rá2ly1a2n rá2lyap rá2ly1as rá2lyav rá2lyús rá2lyút rá2mö rá2nal rá2n1a2n rá2n1a2t rá2n1ár rá2nás ránc1c rá2nék rán2gál rá2niz rá2ní rán1kl rá2nol rá2not rá2n1ó2 rán2sav ráns3s rán2t1ak rá2nü rá2ny1a2d rá2nyag rá2nyako rány1alt rá2ny1a2n rá2ny1ap rá2nyar rá2nyaz rá2ny1ár. rá2nyérm rá2nyérz rá2ny1í2r rá2nyol rá2nyó rá1p2l 2rápo rá2pol rá1p2r 2r1á2rad rár1a2dá 2r1á2rai 2r1á2ram 2r1á2ras 2r1á2rat rá2raz rá2ráb rá2ráh rá2r1ál rá2rár rá2rát rá2ráv rá2r1em rá2rér 2r1árh rá2riai 2r1á2riá rá2rin 2r1árj 2r1árl 2r1árn rá2r1ol r1ártó 2ráru rá2rul rá2run 2rárú rá2rú. rá2rút rá2rúv rá2s1a2d rá2s1akn rá2sal rása2r rás1ará rá2s1as 2rásatá rás1a2to rá2saz rás1á2ga rá2s1árad rá2s1árak rá2s1á2rá rá2s1á2ré rá2sás rá2ser rá2sis rá2s1ol 2r1á2só. 2rásób 2rásóé 2rásóg 2r1á2sóh 2rásói 2rásój 2rásók 2rásón rás1ó2ra 2rásóró 2r1ásós 2rásót 2r1ásóv rá2ső rást2 rás1tr rá2sut rá2szan rá2szas rá2sz1á2ru rá2sziv rás3zón rá2tad rát1a2da rát1ala r1á2tál rá2tég rá2tél 2rátép rá2t1i2o rá2tí 2r1átlé rá1tri rá1tro rátus1s rátú2 rá2túr 2r1á2tül rá2zal 2rázisb 2rázisé 2rázish 2rázisk 2rázisn 2rázisr 2ráziss 2rázist rázi2sz rá2zsal ráz4sá rázs1e2 rázsé2 rá2zsén rázsi2a rá2zsis rá2zsó rázs1ü2 rba2j1e rba2jokt rba2n1á rbátyá2t rbá2ty1áto r2b1ell r1b2la r1b2lo rb2lú rboc1c r2b1olda rbo2n1a2 r1b2ra r1b2rá rb2ri rb2ro r1b2ró rb2ru rbu2t1e rc1adá rc1ajt rca2lak r2c1alk r2c1ana rc1anya rca1p rc1ara rc1ará rc1ass rc1a2to r2c1ág r2c1á2l rc1ár. r2c1ári r2c1árn r2c1á2ro r2c1árr r2c1árt r2c1á2ru rc3csi rc3csí rc3cso rc3csó rc3csö rce2g1a2 rceg1g rc1egy rc1e2leg rc1elk rc1e2lőd r2c1els r2c1ember r2c1epe rc1e2ve r2c1ex r2c1ez rc1é2két r2c1éle r2c1é2lé r2c1é2li r2c1élm r2c1élü r2c1ép r2c1ér. r2c1érb r2c1é2ri r2c1érr rc1ész rc1fr rc1gr r2c3has rc3hel r2chen r2chig r2chom rc3hu r2c3hú r2c3hű rci2d r2c1ide r2c1i2ko r2c1ikr rc1ill r2cimá r2c1imi rc1i2na. rci2náb rci2náé rc1i2nár r2c1i2nát r2c1ind rc1i2oni r2c1i2pa r2c1isi r2c1isk r2c1ist rc1izm rc1i2zo r2c1íj r2c1ív r1c2ké. r1c2kéh r1c2kéi r1c2két r1c2ki. r1c2kia r1c2kig r1c2kok rc1k2ré rc1kv r1c2lu r2c1op r2c1o2r r2c1osz rc1ón rc1ó2r rc1óv r2c1öb r2c1ön r2c1ör r2c1ös rc1őr rc1pl rc1pr rcs1abl rcs1alak rcsa2p1á2g r2c3sara r2csarl r2c3sáp r2c3sár. rcs1áru r2c3sej r2cseleme r2cs1elr r2cs1érb r2csikr rcs1írás rc3s2ká r2c3sora r2c3soro rcsóna2k1á2 rcs1ős. rcs1p rc3s2pi rcs1s rc3sto rc3sz rc1tr r2c1ud r2c1ur r2c1ut r2c1új rc1üg r2c1ür r2c1üs r2c1üt rc1üv rc1üz rc1űz r2c3zá rc3zó rc3zs rc3zu rc3zú rda2cél rd1a2dat r2d1akc rda2l1í2 rd1alka rd1alko r2d1a2nya rda1p rd1a2rán r2d1arc rd1aszt r2d1azo rd1ács. rd1á2rak rd1árat rd1á2ron r2d1árv rdás1s rd1bl rd3dz r2d1e2g rde2k1a2 rde2ker rde2kék rde2kol rde2k1ö2 r2d1ela rde2sőt rd1exp rdező2p3 r2d1é2g rd1é2lé rd1élr rd1élt rd1é2lü r2d1ép r2d1ér. r2d1érd r2d1é2ri rdé2sa rdé2sza r2d1é2vé rd1fr r2d1i2d r2d1i2ga r2d1igé r2d1ima r2d1i2na. r2d1i2nai r2d1i2nát. rdio2x rd1izo r2d1íg r2d1íz rd1kl r2d1okta r2d1old rd1orr r2d1osz r2d1ou rdóa2 rd1ó2rá rdö2g1öl r2d1öl r2d1ös rd1öv rdő2s1orr rd1pr r1d2ram rd2rap r1d2raz rd2rog r1d2rót rd1sk rd1sp rd1st rdsza2k1 rd1t2r rd1udv r2d1urá rd1üg r2d1üt r2d3za r2d3zá rd3zo rd3zó r2d3zö rd3zsí r2d3zú 1re rea2d rea2j rea2ka rea2la rea2r 2reálá 2reáló 2r1eb. 2r1ebbő reb1egy 2r1e2béd 2r1ebh 2r1ebk 2r1ebm 2r1ebn 2r1ebs 2r1ebv re2caj re2cal re2cá 2recets re2ch rec3sar 2r1e2cset rec3sor re2cz re2dan red1elv 2redend re2d1e2r 2redeti 2redetű 2redény re2d1é2ves re2dir re2dor 2r1edzőb 2redzőj 2r1e2dzők 2redzőr 2r1e2dzőt 2redzőv re2et re2ew 2reff re2gap re2gas reg1áll re2gár reg1e2le reg1elh reg1ell re2g1elr reg1elv reg1eng reg1e2tető reg1e2vé regész1 re2gid reg1inj re2giz re2góc reg2óv re2gú regü2l re2g1ülé 2r1egy. 2r1egyb re2gye. re2gyed re2gyen 2r1e2gyes re2gyet 2r1e2gyez 2r1e2gyé 2r1egyh 2r1egyk 2r1egyl 2r1egyn 2r1egyr 2r1egys 2r1egyt re2gyün r1egyv rei2rá re2ja 2rejéé 2rejűe 2rejűn 2rejűr 2rejűt re2k1ag re2k1ará re2k1asz re2k1á2l re2k1á2p re2k1ár. re2kás rek1elh rek1elt rek1elü rek1erd re2k1e2rő reke2sz1á 2rekééh re2kéj re2kék 2r1ekék. rek1ékh re2kél 2r1e2kénk re2k1ér. re2k1érd re2k1érte 2r1e2kés. re2k1éss re2k1id re2kij re2kil re2k1ing re2k1int re2k1ip re2kír rek1k2 re1klu re2k1ok re2k1old rek1opt re2k1os rek1ott re2kór re2kök re2kötl re2kő rek1s reksz2 re2k1u2s re2küd re2k1üg rekü2l re2k1ülé re2k1ülő re2küt 2r1elad 2r1e2lág 2r1elbí 2r1elbo 2r1elc 2r1eldo 2r1e2lef 2relektr rele2ma 2re2leme. 2r1e2lemed rele2meg 2relemei 2re2lemek 2relemem. 2r1e2lememe 2relememm 2r1e2lemen rele2m1er 2relemes. 2r1e2lemese 2relemesn 2r1e2lemet re2lemezé rele2m1ér. 2r1e2lemtel 2relemük 2relemünk 2relemzé 2relemző 2r1e2l1eng 2relér 2r1elf 2r1elha 2r1elhá 2r1elhel 2r1elhú 2r1eljá 2r1elké rella2 rel2l1an 2r1ellá 2r1ellő 2r1elma 2r1elmééé 2relmééh 2r1elméi. 2relmél 2relméte 2r1elnev 2r1elnö 2r1elny 2r1e2los 2r1e2lőad 2relődei 2r1e2lődök 2relőnn 2r1előnye 2relőzm 2r1elso 2r1elszá 2r1elta rel2tár 2r1eltáv 2r1eltett. 2reltettk 2r1eltéré 2r1eltév 2relú 2r1e2l1ül 2relű 2r1elv. 2r1elvá 2r1elvb 2relved 2r1elvei 2r1elvek 2r1elvem 2r1elven 2r1elves 2r1elvé. 2r1elvéne 2r1elvér 2r1elvéü 2r1elvév 2r1elvh 2r1elvi 2r1elvk 2r1elvn 2r1elvo 2r1elvr 2r1elvs 2r1elvt 2r1elvü 2r1elvű 2r1elvv 2r1elz re2m1a2d re2m1asz re2maz re2m1ál re2mát 2rembar 2r1ember. 2r1emberb 2r1embere. 2rembered 2r1emberei 2r1emberek 2r1emberes 2r1emberé 2r1emberh 2r1emberi 2r1emberk 2r1embern 2r1emberr 2rembers 2r1embert 2r1emberü rem1ble r1embó 2rembr re2mel rem1e2lem 2r1emelé 2r1emelg r1emelk rem1előd rem1els re2m1eng re2m1esz re2m1ér. re2m1érm re2m1é2te re2migr re2m1ór re2mö re2m1ő2r rem1p2 2remuk 2r1e2mul rem1ur 2r1e2mus 2r1encik ren2d1e2r ren2d1ég ren2déj ren2dék ren2d1o ren2d1ö ren2d1ő2s 2r1e2ner renés3s 2r1enged 2rení ren2s1ég rens3s re2of re2óa re2óc re2óe re2óé re2óf re2óka re2ól re2óo re2óp re2ósá re2ósz re2p1aj rep1ana rep1asz re2pau re2paz rep1áll rep1álm re2pás re2pát re2p1e2g re2p1elf re2p1elk re2p1ell re2pelm re2p1eng re2p1ep 2r1e2per. re2p1erk 2repéd rep1é2j 2repénk 2r1e2pés re2p1i2d rep1ille rep1int re2pok 2reposz. 2reposzt. rep1osztó repö2 re2p1örö rep1pl rep1pr re2pú 2r1erd re2rei re2rej re2res re2rez 2r1erg re2róz 2r1e2rő 2r1ers re2sas re1s2c 2r1esemé res1epr rese2t1e2l 2r1esél 2reskü r1essi re2szaj 2r1e2szet resz1ív 2reszkö 2reszm reszta2 resz2t1an resz2tál resz2t1ár resz2t1í2v resz2t1o2r resz2t1os 2reszű. 2r1e2szűe re2t1ab re2t1akt re2tal ret1a2la re2tant re2t1a2ny re2tág re2t1ára re2t1áro ret1átf re2t1elb re2t1ell re2telm ret1emel re2t1erk rete2sz1á 2r1e2tetés. 2r1e2tetésé 2retetésn re2t1é2k re2t1él re2t1érb re2t1érd re2tid 2r1e2tika re2tiká ret1ill r1e2tilt re2t1ing re2t1int re2tis r1etnik re2t1ok re2t1old re2t1os re2tór re2t1örö re2t1ö2v ret2t1est ret2téne ret2t1in re2t1ut re2t1ült re2tűd re2ud re2ute re2vező 2r1e2vő 2r1exp 2rezetn 2rezetü 2rezor 2rezőkh 2r1ezr 2rezüs 1ré ré2bá ré2bis ré2biv ré2bí 2rébres ré2bü 2r1é2des 2réfá 2r1égb ré2gét 2r1égn ré2g1ó2 ré2gő 2régt 2r1éh. 2r1é2hen 2r1é2hes 2r1é2het 2r1éhs 2r1éht ré2jen 2r1é2jet 2r1é2jün ré2k1ab ré2kac ré2k1a2g ré2k1a2n ré2k1au rék1á2sá ré2k1e2b ré2k1eg ré2kel rék1ele rék1elő rék1elr rék1els ré2k1esz ré2k1éte ré2kik ré2kin ré2kit rék1ola rék1old ré2kör ré2k1ö2v ré2köz ré2kő réku2 ré2k1ut ré2k1ú ré2let. ré2letb 2r1é2lete ré2leté ré2leth ré2letn ré2letr ré2lett ré2letü 2r1élf 2r1élm 2rély ré2mad ré2m1a2l ré2m1an ré2mar ré2mau ré2m1ál ré2már ré2mel rém1e2le ré2mer ré2m1é2ré ré2mil ré2m1ist ré2mos ré2mó ré2mö 2rémtu réna1p2 2r1é2nekh 2r1é2neki 2rénekl 2r1é2nekü ré2nel 2réner ré2n1é2j ré2nö ré2ny1e2l ré2p1ed ré2peg ré2pes répi2 ré2p1ip 2r1é2pí ré2pol ré2pö ré2pü 2r1épül 2r1ér. 2r1érb 2r1érc 2r1érd 2r1é2ret 2r1é2rez ré2ré. ré2réb ré2rén ré2rér ré2rés. ré2rése ré2résé ré2résh ré2rési ré2résk ré2résn ré2résr ré2réss ré2rést ré2résü ré2rét 2r1érf 2r1érh ré2rie ré2rig 2r1érk 2r1érl 2r1érm 2r1érn 2r1é2rő. ré2rők 2r1érr 2r1értá 2r1érte 2r1érté 2r1értí 2r1értő 2r1é2rü 2r1érv 2r1érz résa2 ré2sal ré2sar ré2s1ár ré2sát ré2seg rés1ell ré2s1er ré2sés ré2s1ő2 rés3sza ré2sú ré2s1ü2t ré2s1ü2v rész1a2l ré2szan rés3zav rész1ál ré2sz1eml ré2sz1e2sz ré2sz1é2k ré2szinte rész1í2v ré2szok ré2szol ré2szó rész1ó2r ré2szőr rész3s rész1t2r ré2szu ré2szú részü2l ré2sz1ülő 2rétáz ré2t1egy 2ré2tel rét1elm 2réter ré2t1e2sz 2r1é2tető ré2t1é2k ré2tiz ré2tol ré2t1os ré1tré ré2tud révá2 ré2vát 2réve. 2révei rév1eké ré2v1é2l ré2v1éri 2révé2t ré2v1éte 2r1é2vév 2révf 2révh 2révt ré2vú 2révv ré2z1a2 rézá2 ré2z1ár ré2z1e2g réze2l réz1elő ré2zer ré2zes réze2t réz1ete ré2zid ré2zin ré2zio ré2zip réz1isz ré2zos rézó2 ré2z1ór ré2zö ré2zsa ré2z3sá ré2z3se ré2z3si ré2zsí ré2zso ré2zsu rf1ál r2f1ép rfé2sza rfé2szá rf1fl rfia2n rfi1b2 rfid2 rfii2 rfik2 rfi1kr rf1ind rf1isk rfi1sz2 rfit2 rfi1tr rf1kl rf1kr rf2la rf2lo rf2ló rf2lu rf1okt rf1őrü rf1pr r1f2rá rf2rí r1f2rö rf1sp rf1st r2f1út rga1k2 rgá2csal rgá2csan rgá2csav rgá2z1é rge2o rge2r1a rgés3s rg2ha. rgi2aia rgi2ako rgi2al rgi2aso rg2il rg2la rg2le rg2lo rg2ló r1g2nó rg2öl rgö3le rgőcsa2 rgő2z1ölt rgő2z1ős r1g2rá r1g2ru r2gyado r2gy1aj r2gyalak r2gy1alap r2gy1algá r2gy1alk r2gy1any r2gyap r2gyarc r2gy1asz r2gyau r2gy1az r2gyál r2gy1á2z r2gy1eg r2gy1e2l r2gy1enc r2gy1e2s r2gy1és r2gyévé r2gyim r2gy1int r2gyip rgy1ira r2gy1ok r2gy1öz r2győr rhajóé2r rhatá2s1út rháza2d rhá2z1ada rhá2zal rhá2zip rhá2z3s rhitköz1 1rhoeá 1ri ri2aa ri2aá ria1b ri2aba ri2abá ri2abo ri2ac ri2ae ri2aé ria1f ri2afag ri2afr ri2a1g2 ri2ah ri2ai2k ri2aí ri2aj ri2akén. ri2akó ri2ala ri2alá ri2alu ri2am ri2ana ri2ao ri2aó ri2aö ri2aő ri2a1p2 ri2ará ri2aré ri2asza ri2aszá ri2aszi ri2aszo ri2até ri2ato ri2a1t2r ri2au ri2aú ri2aü ri2av ri2az 2riásá 2riász r1i2ázós 2ribé ri2bol 2r1ibr 2ribü ri2c1e2l rics1il ri2d1a2l ri2dál rid1d ri2de. 2r1i2deá ri2dei 2ridej ri2del ri2deo rid1ere ri2d1esz 2ridil 2r1i2dom 2r1i2dő ri2du ri2ed 3rie2l 3rier ri1fl ri1f2rá 2r1i2ge. 2r1i2gé 2rigi ri1gla 2r1igr ri2har 2r1ihl rihó2 rihón1 2rijes ri1klo ri1k2ló ri1k2ri ri2lal ril2l1e2h ril2lét ril2l1in ril2l1ő 2rillu 2rillú 2riló 2rimáda 2rimádá 2r1imp ri2n1a2d 2r1i2nai ri2naj ri2n1a2l ri2n1a2n ri2n1a2r 2rinas. 2r1i2nasá 2rinasn 2r1i2naso ri2nass 2r1i2nast rina1sz2 ri2nat. rin2c1a rin2cá rinc3c rin2c1eg rin2cel rin2cer rin2co rin2csér rin2csi 2r1inde 2r1indu ri2neg 2rinfl rin2gál rin2gel 2r1ingét rin2gül 2r1inha 2r1i2nic ri2nil ri2n1ip 2r1injek rin1kré rin3n 2r1insp 2r1inst rin2t1ad rintá2r rin2tára rin2táro rin2társ 2rinten 2rinterf rinté2r rin2t1ér. rin2t1éré rin2t1éri 2rintő. 2rintők ri2nül ri2o1k2 rio2lok ri2om 2rionn 2riono 2riox ri2óa ri2óá ri2óc ri2ódar ri2óe ri2óg ri2óke ri2ól ri2ómá ri2ómé ri2óo ri2ó1p ri2óü 2r1i2pai 2ripar. 2r1ipara 2r1i2pará 2riparb 2riparé 2riparh 2riparil 2riparin 2riparn 2riparr 2ripars 2riparte 2ripartó 2riparu 2ripl ripor2ta 2r1i2ram 2r1i2rat 2r1i2rá 2r1irh 2r1i2ri 2r1i2ro 2r1i2rón 2r1irr 2r1irt ri2s1ar ri2s1as ri2s1ál ri2sáp ri2s1e2l ri2s1emb ri2s1e2r ri2sid ri2sii ri2sil ri2s1is 2rismérv ri2s1or. ri2s1ort 2r1ispá 2ristál ri2sut ris1üté ri2s1ü2tő. ri2s1ü2v 2r1i2szák ri2t1a2d ri2tal 2rital. 2r1italb rit1alk 2r1itall 2ritaln 2r1italo 2ritalr 2r1italt rit1a2ny ri2tág rit1ell ri2t1i2o ri2t1í riu2méne riumhid2 riumhidr1 riu2m1i2o 2r1i2vad ri2var 2r1i2vás 2rivo 2r1i2vó rixe2 ri2x1el ri2xí ri2xö 2riza r1i2zét 2r1izmi 2r1izmo 2rizmuk 2rizmú ri2zsar ri2zseb ri2zsel 2r1izza 2r1izzó 1rí rí2gé 2ríj. rí2jai rí2jak rí2jam rí2jas 2ríjá rí2ján rí2ját rí2jáv 2r1íjh 2r1íjj 2r1íjl 2r1íjr 2r1íjv rí2m1a2l 2rímá rím1emb rí2mo rí2mö rí2né 2r1íns rí2ra r1í2rá r1í2ró 2rítél rítés3s rítőa2 rítőe2 rítőkész1 2r1ív. ríva2 2r1ívb 2r1í2ve 2r1í2vé 2r1ívh rí2vi r1í2vü rí2vű 2r1ívv rí2za rí2z1el rízis3s rí2zo r2j1ado rj1any r2j1ág r2j1áp rjet2 r2j1id r2j1ös r2j1u2r rka1b rk1ang rka1pr rkaros3 rka2ró2r rka2s1ü2v rka1t2r r2k1ács. rká2csá rká2ne r2k1á2ri rkár1om r2k1á2ru r2k1e2dz rk1e2lem rk2elm r2k1eltá rke1p r2k1erd rk1eredő r2k1e2rei r2k1e2rez r2k1e2rő rke2szö r2k1ex rké2p1e2l rké2p1éss r2k1ér. r2k1érté r2k1étt r1k2hé rk2hón rkia2 rkie2 rki2g rk1iga rkigaz1 rkilenc1 r2k1imi rk1inga rki2ont. rki2sem rki2z1a rk1izo rk1kl r1klie r1k2lí r1k2lo r1k2ló rk1o2laj rko2nya rko2vi. rko2vit r2k1óné rk1ó2rá rk1ó2ri r2k1öltési r2k1ötl rkö2ző rk1őr. rk1ő2ré rk1őrk rk1őrn rk1ő2rö rk1őrr rk1őrs rk1őrt rk2rém r1k2ri r1k2rí r1k2rom rk1sh rktus1s rk1udv r2k1ug rku2sze r2k1ú2sz r2k1üd r2k1üg rk2vó rlag1g rla2g1ol rla2p1a rla2pál rlap1e rla2pol rla2p1osz rla1pro rla1s2t rla2t1a2n rla2t1ó2 rlá2pe rlás3s rlá2s1út rlá2t1e2 rlá2t1é rlá2tor rle2g1a2 rle2g1á rle2ger rleg1g rlegigaz1 rleí2 rle2t1á2 rle2t1eg rle2tell rle2t1elő rle2t1ék rle2tél rle2t1ér. rle2t1érv rleü2 rlésát1 rlésáta2 rlés3s rl1gr rló1g2 rlóó2 rlót2 rlőe2 rlő1sta r2m1akad rmaké2sz1ü r2m1a2kó rma1kré r2m1alt r2m1a2nya rmaó2 rma2t1á2ru rma2t1ur rma2zon rmá2lér rmá2nyan rm1á2ram r2m1á2ro r2máru rm1cl rmege2 rmeg1er rme2g1es rme2g1é rme3g2ö rme2k1an rme2kar rmeká2 rme2k1eg rme2k1e2l rme2kérd rme2kor rme2kot rme2k1ó2 rmekö2r rme2körö rm1elk r2m1elm rme2ran rme2ras rme2rin r2m1e2rői rme2rők. rme2rőke rme2rőkn r2m1e2rőm rmert2 rmer1tr rm1esem rme2t1él rme2tin rmé2k1e2l rmé2ker r2m1é2le r2m1ép r2m1ér. r2m1érte r2m1étk r2m1étr r2m1étt rmi2g r2m1iga r2m1igé rm1illa rminc3s rm1inte r2m1irá rmi2si r2m1isko r2m1ism rmite2 rmi2t1el r2m1íg rmjob2 rm1kl rmo2n1a rmo2nár rmo2n1e rmon1n rm1ope r2m1ors rmo1sz2fér rmő2szá rm1p2l rm1p2r rm1sk rm1st rm1sz2 rm1tr rm1üg rm1üz rmű1s rm1ya rna1b rna1f2 rna2gyú rnai2k rna1k2r rna2pes rna1pro rnas2 rna1sp rna1sz2 rna1t2 rná2cs r2n1el. r2n1elb r2n1elf r2n1elh r2n1elj r2n1ell r2n1eln r2n1elr r2n1elt rne2m1is r2n1est rne2t1a2 rne2t1e2l1 rnet1o rnés2 rné1st r2n1i2d rni2g r2n1iga rno2kis rnó1d2 rnö2ket rnus3sze rny1a2dó r2nyakad r2nyalako r2ny1alk r2nyarc rny1álm r2ny1ell r2nyelm r2ny1eln r2ny1elo rny1elvo rny1emb r2nyerd r2ny1e2rez rny1e2ső rny1ékné rny1ész r2ny1id r2nyiz rnyolc1 rny1old r2ny1or rny1ök r2nyöt rny1s r2ny1ur 1ro ro2ad roa2n 2r1obj 2robl r1obs roc2ke ro1cker roc2kén ro1c2kok ro1c2kon roc2kos. 2r1o2dú rofi2tár ro1fl ro1fr ro2g1ad ro2g1ak ro2gal ro2g1am ro2gar ro2g1á2r ro2g1áz rog1enc ro2ger ro1g2ló ro2g1o2l ro2gor ro2g1osz ro2gö 3rográ ro1g2ráf. ro1g2ráff rogu2 ro2gur ro2gü 3rogy ro2he ro2hö ro2is 3rojt ro2ka. ro2kab ro2kac ro2k1a2d ro2kait ro2k1aj ro2kak ro2k1al rok1any ro2k1a2s ro2káb r1o2kád ro2k1ál ro2kán ro2k1á2s roke2 ro2ked ro2k1en 2rokett. r2oké ro2kék ro2k1é2l ro2kép ro2kid ro2k1ing ro2k1í 2rokod rok1old ro2kő 2r1okság rok1t2 2r1oktat 2roktán ro2k1u2s rokú2 ro2kú. ro2kús ro2kü 2r1o2laj rola2n rolás1s 2r1oldá 2r1oldó ro2l1i2d roligar2 roligarc3 rol2l1a2d rol2lag rol2l1akn rol2lan rol2lat rol2leg rol2lel rol2lis 2r1olló 2r1oltás 2r1oltó. 2r1oltób 2roltóé 2roltóh 2r1oltói 2roltóké 2roltóm 2roltón 2r1oltót 2r1oltóv 2r1oltv ro2lü 2rolvad 2rolvas 2r1o2lyai 2r1o2lyáh 2r1o2lyán 2r1o2lyár 2rolyéb 2rolyéh 2rolyéi 2rolyén. 2rolyiér 2r1o2lyuk rom1ajt rom1akk rom1akó ro2m1a2ro ro2m1ál 2romám ro2m1á2ri ro2m1árk ro2m1árn ro2m1á2ro rombé2 rom2bén ro2meg ro2m1el ro2m1e2r ro2m1es ro2méj ro2m1é2ne rom2f1os ro2mim rom1iná rom1ist ro2mita ro2miz ro2mí romköz1 2r1omni ro2m1o2r ro2m1ó2r ro2mö ro2mő rom1pr ro2mü ron1alj ron1alt ron1alu ron1any rona1t2 rona2ut ro2n1áta ro2n1átr ron2csel ron2csem ro2nen ron1esz ro2n1ér. ron2gal ro2n1i2ko ro2n1i2m ro2ní ro2nop ro2nóc ro2n1ó2r ro2nö ro2nő ron1s2 ron2tab ron2tem ron2tev ron2t1én ron2tin ron2tí 2rontóé 2r1ontóh 2rontóig 2rontós ro2nü ro2nyac rony1a2l ro2nyid ro2nyik ro2nyir ro2nyó ron2zab ron2z1al ron2zer ron2zin ron2z1ol ron2z1or ron2z1ó2 ronz1z ro2om ro2os 2r1opc 2rope ro2per ro1p2l ropo1s rop2s ro2rak ro2r1a2l ro2rat ror1áll rore2 ro2reg ro2r1el ro2r1es ro2r1in ro2rosz rort2 ror1tr ro2rü ro2sar ros1ass ro2s1atl ro2s1av ro2s1árk ro2s1áro ro2sem ro2s1ist ro2s1ol ro2s1ó2 ro2sö ro2ső ros3sze ros3szék ros2tet 2rostob ros2tol 2rostya ro2s1út ro2szal ro2szan ro2szás 2r1oszlo ro2szó r1osztá 2roté ro1t2he roto2na ro1t2ró 2rotth ro2un ro2us rova2re rovás1s 2r1o2vi. 2r1o2vib 2r1o2vik ro2vis 2ro2xidb 2ro2xidr 2roxilc ro1xy ro1ya roza2tal ro2zsan 1ró róa2d rób1ajt 2róbá róc3c ró2c3h ró2cin ró2c1ö ró2c3sá ró2cz ró2dai ró2dep ródi2ad ró2dő ró2dü 2r1óév. 2róéve 2r1óévé ró2f1ag 2rófea 2rófeá ró2f1iv 2rófs ró2fur ró1g2r rói2g róke2rest róke2r1in ró1k2l ró1kré 2r1ólm r1ó2lom ró2m1a2l róma2r róm1ara ró2mál róme2l ró2mél róm1isz ró2mí 2rómk ró2mö ró2mü róne2m 2r1ó2néb 2rónéé 2r1ó2néh 2r1ó2nén 2rónér 2rónét 2rónév 2rónj 2rónn 2rónr rónus3s 2rónú ró2nü róo2k róó2r ró1p2l ró1pro 2r1ó2raa 2r1ó2rac 2r1ó2rad 2r1ó2rae 2r1ó2raf 2r1ó2rag 2róraje 2r1ó2ram 2r1ó2ran 2r1ó2rap 2r1ó2rar 2r1ó2ras 2r1ó2rat 2róraü 2r1ó2rav 2r1ó2ráb 2r1ó2rád 2r1ó2ráé. 2ró2ráén 2r1ó2ráév 2r1ó2ráh 2r1ó2rái ró2rája 2r1ó2ráka 2r1ó2rákb 2r1ó2ráké 2ró2rákh 2róráki 2r1ó2rákk 2r1ó2rákn 2r1ó2ráko 2r1ó2rákr 2r1ó2rákt 2r1ó2rán. 2r1ó2rána 2r1ó2ráná 2r1ó2ránk 2r1ó2rány 2r1ó2rár 2r1ó2rás 2r1ó2rát 2r1ó2ráv 2r1ó2riá rós1orom ró1spi 2rótb 2róth ró2tip rót1ist 2rótj 2rótk 2rótm 2rótn ró2t1ö2v ró1tri ró2tül 2r1ó2vó róza1t2 ró2z1e ró2z1in ró2zú ró2zü 1rö 2r1öbl 2r1ö2böl. 2r1öbölb 2r1öbölh 2r1öböli 2r1öböll 2r1ö2böln 2r1öbölr 2röböltő rö2ga rö2go rö2gó rö2k1é2l rö2k1érv 2rökí 2röklé rö2ko 2r1ö2kör 2rökösé 2rökösö 2r1ökrö rö2lős rö2lyü rö2ma rö2má 2röme. 2römed rö2meg 2römei 2römén 2römét 2römév rö2mí 2römmű rö2mo rö2mó 2römöd 2römök 2römöt rö2mu 2römü 2römű rön2d1e rön2k1a2 rön2k1e2 rön2kép rön2kol rön2kos rön2k1öl rön2k1ü rö2p1i2 rö2re rö2rö rö2sa rö2sá rö2so rös3sza 2r1öv. 2r1övb 2r1ö2ve r1ö2vé 2r1övh 2r1övn 2r1ö2vö 2r1övr r1ö2vü 2r1övv 1rő rőa2n rőát1 rőáta2 rő1bl rő1br rő2dá rő2d1e2l rő2dos rő2d1ő2r rőe2l rőe2r rőe2s rőé2h rőé2l rőé2r rőé2te rő2f1as rő1fl rő2f1ő rőgé2p1és rői2ta rő1kl rő1kv 2rőlt rő1pl rő1pr 2r1őr. rőr1ak rőr1eg r1ő2rei r1őrh rőr1in rő2riz rőrköz1 2r1őrl 2r1őrm 2r1őrn rő2rö 2r1őrp 2r1őrr 2r1őrs 2r1őrt 2r1ő2rü 2r1őrz rősá2 rő2sár rő2sír rő1ská rő2ső rő1spe rő1s2pi rő1sta rő1str rősü2l rő2s1ülő rő2s1ült rő2s1ü2t rő2s1ű2 rősza2kál rőu2t rőü2l rőva2s1 rő2zi. rő2zön rpei2 rpe2szel rp2he r2p1ig rpis1á2 rpi2t1a rpi2t1e2 r2p1ivá r1p2la rp2le rp2lé rp2lu rp2lü rprecíz1 r1p2ré r1p2ri r1p2rí r1p2ro r1p2ró rpu2szé r2p1üz r2r1a2lap rra2sza rra2szi rrata2n rrat1any rra2t1á2r rra2t1e r2r1ábr rrádiók2 rrádió1kb r2r1á2ga r2r1á2gy r2r1árb rrá2saj rrá2sar rrá2ság rrá2se rrás3s rrá2sü rrá2s3z rrá2tal r2r1áts rre2l1i rr1emb rren2d1ő2 r2r1ék rré2r r2r1éri rré2sem rr1fl rr1fr r2r1i2de rr1in. rr1ing r2r1ir rri2ta rr1i2zé rr1izg rr1izm rr1k2r rr1ope rro2rál rror1osz rró1dr rró1p r2r1öb r2r1ös rr1pl rr1pr rr1sp rr1t2r r2r1u2r r2r1ür r2r1üt rry2n r2s1a2dó r2s1a2g r2s1aia rsa2il2 rs1akku rs1alan rsa2lap r2s1ale rs1alm r2s1a2lomb r2s1ana rs1a2ny r2s1a2pá r2s1a2po rs1a2ra. r2s1arc rs1arom rs1arz rs1att rsa2v1ar rsa2v1é2 rsa2v1i r2s1ax r2s1a2z r2s1ábr rság1g rs1áld r2s1á2ré r2s1árn r2s1árr r2s1á2ru rs1áté rs1áti rs1bl rs1br rs2ch2 r1sche rsc3hé rs1d2r rs1edz r2s1ef rs1e2gét r2s1e2gy rse2il rse2k1a2 rse2keg r2s1e2leme rs1elf r2s1elk r2s1e2lőa r2s1e2lől rs1e2mi r2s1e2mu rse2ny1a2 rse2nyeg rse2ny1e2l rse2nyer rse2nyí rse2nyő r2s1erd r2s1erk rs1erő r2s1ess r2s1esz rsé2g1el r2s1él r2s1ép r2s1ér. r2s1érd r2s1érl r2s1érték r2s1és rs1é2te rs1étk rs1étt rs1fr rs1gl rs1gr rsi2d rs1ide rs1ido rsi2g rs1iga r2s1ikr r2s1ill r2simm rs1ind r2s1ing r2s1int r2s1i2o rs1i2pa rs1iro r2s1i2si r2s1isk r2s1ism r2s1ist rs1írn r2s1í2ró r2s1írt r1s2kál r1skj rs1kl rs1k2r r1s2lu rs2mink rs2ni rs1ond rsonya2 rso2nyal rso2nyan rso2nyat rso2nyé r2s1op r2s1ord r2s1org rs1osz rsócsa2 rsócsap1 r2s1ódá r2s1óné rsó2s3zárr r2s1öb rs1önt rs1örv r2s1ös r2s1ö2z rs1őr rs1pl rsp2r r1s2rác rs1s2t rs3szag rs3szak rs3szá rs3szem. rs3szemet rs3szer. rs3szerű. rs3szerűb rs3szerűe rs3szerűn rs3szerűs rs3szerűt rs3szerűv rs3szi rs3szí rs3szó rs3szö r1stand r1s2tat r1s2tác r1s2tát rs2top rst2r r1strat rs1tre rs1tré r1stró r1stru r1s2tú rsu2r rs1ura rsu2t r2s1uta rs1utá rs1úr. rs1ú2ri r2s1ú2s rs1úto r2s1üd rs1üld r2s1üz rsza2k1a2l rsza2k1e rsza2kö rsza2k1ü r2szaló r2s3zam rszág1g rszáraz1 rs3zárl r2s3zené r1sz2f rsz2lo rsz2m rszom2j1a2d rs3zse rs3zsi rsz2ta rszt1al rszt1árv rszt2rá r2s3zűr. r1sz2v r2t1abla r2t1abr r2t1a2dat rt1a2dó r2t1a2ga. rt1agit r2t1ajá rt1ajtó r2t1a2kara r2t1akc rta1kre rta1k2ré rt1alapj rt1a2láb r2t1alár r2t1alb r2t1alel r2t1alg r2t1alj r2t1alk r2t1alt r2t1alv rta2m1ér rt1anim rta2n1ó2r r2t1anto r2t1antr rt1a2nyag rt1app rt1arán r2t1arc rta2rén rt1a2ty rt1a2uto r2t1azo rt1ábr r2t1áf rt1ág. rt1á2ga rt1ágb rt1ágg rt1ágj rt1ágn rt1ágr rt1ágs rtá2lad rtá2lala rtá2rada rtá2raj rtá2ramr rt1ária rt1áriá r2t1árin rt1árszi rt1árszí r2t1árta rtá2ruké rtá2rukk rtá2rukn rtá2rukr rtá2rukt r2t1árur r2t1árut rtá2s1ág r2t1ásás rtá2s3z r2t1á2t1a r2t1átl r2t1áts r2t1átv rtá2v1é rtávi2 rt1bl rt1br rt1cl rt1cr rt1dr rtea2 rt1e2gé rt1e2gye rtei2 r2t1eks r2t1elad r2t1elb r2t1elf rt1eljá rt1elker rt1elkö rt1elkü rtel2la rtel2l1á2 rt1elma rt1e2lőa rte2lől r2t1elr r2t1ember r2t1eml r2t1enc r2t1ent rte1p rte2rac rte2rál rte2r1in rtermo1 rtermosz2 rte2r1os r2t1e2ró r2t1erő rte1sp rt1esték rt1estné r2t1estün rte2sze. rte2szei rte2szek rte2szem rte2szet r2t1eszk r2t1eszm r2t1e2szü r2t1é2d rt1é2gi rté2kaj rté2k1a2l rtékát1a2 rték1í rté2kos rté2ku r2t1é2let rté2lén rt1é2li r2t1élm r2t1é2neke r2t1é2nekk r2t1é2nekr r2t1épü r2t1érdem r2t1érem r2t1é2ré r2t1érin r2t1é2rit r2t1értek r2t1érté r2t1érv r2t1érz rté2s1ég rtéskész1 rtés3sza rté2sül rté2szá rté2szo rté2szö rtés3zsí r2t1étk r2t1étl r2t1étt r2t1étv r2t1é2ve. r2t1é2vet rté2véné r2t1é2vér rt1évk rt1fl rt1fr rt1gr r1t2ha. r1t2hág r2t1i2de rt1idé rt1idi rt1ifj r2t1i2gé r2t1ill r2timá r2t1i2mi r2t1imp r2t1i2náb r2t1i2náé r2t1i2náh r2t1i2nán r2t1ind r2t1inf r2t1ing rti2nik r2t1i2pa r2t1irá r2t1iro r2t1isi r2t1isk r2t1ism r2t1isza rt1i2tal r2t1izé rt1izm r2t1izz r2t1íg r2t1íj r2t1ín rtí2ra rtí2rá rt1í2ve rt1í2vű rtí2z rt1ízl rt1kl rt1kr rt1kv rtmű1 rtműt2 r2t1of rto2kad rto2k1a2l rto2k1ar r2t1o2li r2t1oml rto2n1a2 rtoná2 rto2nár rt1opá rt1ope rt1opt r2t1org r2t1o2rom r2t1orr r2t1ors r2t1orv r2t1osz rtóe3rejü rtó1p rtó2rák rtó2s1ín. rtó1sp rtó2s3zár r2t1ökl rt1ököl r2t1ö2lőse rtön3n rt1ö2rök rt1öröm r2t1össz rt1ö2vez rtőé2h rtőkész1 r2t1őrköd rt1őrl r2tőrül rt1pl rt1pr rt1ps rt2rad r1t2raf r1t2ranz r1t2rág r1t2riá r1t2rik r1t2ril r1t2rió r1t2rón r1t2rü rt1sk rt1sl rt1sp rt1st rtsz2 rt1t2r r2t1udv rtu2k rt1uká r2tunik rtu2rai rtu2ral rt1u2rá rtu2sze rt1u2tat rt1utá r2t1új r2t1ú2s r2t1üg r2t1üld r2t1ü2lé rt1ülő r2t1üt r2t1ü2v rt1ű2ző r2tying rty2j rty2s r1t2zé r1t2zi rt2ző 1ru ru2ac ru2b1i2k ru2c3h ru2cz 2r1udv rue2l rue2r ru1fr 2rugar 2r1u2gat rug3gy 2r1ugr ruhás1s 2r1ujj ru1k2l 2ruktu 2ruktú rum1agr ru2maj ru2mal ru2maz ru2m1eng ru2mer ru2mes ru2mél ru2m1i2k rum1ill ru2m1i2p ru2mis ru2m1iv ru2miz ru2mí ru2mol ru2m1o2r ru2mö ru2mő ru2mü 2r1unc run2da ru2nit r1u2nok ru2pad ru2pe ru2p1il ru2pü ru2rad ru2rai r1u2ral ru2ras ru2rat r1u2raz ru2rán ru2rát 2r1urb ru2ruk rus1abl ru2sad ru2sal rusa2n rus1any rusa2r rus1aro ru2sas ru2sál ru2s1iz ru2sír ru2s1ol ru2s1ó2 ru2ső russ2 russz2 rust2 rus1tra ru2s1ű2 ru2sz1é2p ru2szip r1u2tac r1u2tak r1u2tat r1u2taz 2r1utc r1u2tó. r1u2tób r1u2tód r1u2tói r1u2tój r1u2tók r1u2tón ru2tóp r1u2tór r1u2tós r1u2tót r1u2tóv 1rú rúda2 rú2dad rú2d1al rú2d1ar rú2d1á rú2del rú2din rú2du rú2dü rú1dy rú2d3z rú1gr 2r1újd rú2jí 2r1újk 2r1újs 2r1úr. 2r1úrb 2r1úrh 2r1ú2ri 2r1úrk 2r1úrn rú2ro 2r1úrr 2r1úrt rú2szó rú2t1a2l 2r1ú2t1e2 2r1ú2té. rú2tér rú2tit 2r1útk 2r1útle 2r1útm rúto2 2rúts 2r1ú2tü 2r1útv rú2zsad rú2zse 1rü rü2dí rü2dü rü2gyel 2rügyn rü2ha rü2la rü2lá rü2led rü2les rü2lép rü2lér rü2lí rü2l1o rü2ló rülö2 rü2l1ön rü2l1öz rü2l1őg rü2lu rü2lú rü2l1ül 2r1ünn 2r1ü2nő rü2rí rü2rü rü2te rü2té rü2tö rü2tő rü2vö rü2ze rü2zé 1rű rű1gr rű1kl rű1pr 2r1űr. 2r1űrh 2r1űrm rű2rö 2r1űrt rű2s1orr rűs1ors rű1sp rű1str r2v1agá r2v1akc rva2lap r2v1alj r2v1alk r2v1a2rán rva2sáb rva2sék rvasu2 r2v1a2szó rva1t2r rvavá2 r2v1ága rvá2gyi r2vállam r2v1állo rv1állv rvá2nyad rvá2nyan rvá2nyú r2v1áp rvá2r1al r2v1á2ram rváro2s1os rv1á2rú r2v1á2sás r2v1áta rvá2tors r2v1e2b r2v1e2dz r2v1e2gye rv1ela rv1e2led rve2lemb r2ve2leme rv1e2les r2v1elk r2v1ell r2v1elo r2v1e2lőa rv1e2lőá r2v1e2lőkép r2v1előr r2velőz r2v1eng r2v1ep rve2r1a rve2r1á2 r2v1e2retn rverés3s rve2rip rve2r1o r2v1e2rői r2v1e2sete r2v1e2sés r2v1ex rv1éke rv1ékk rv1ékn rv1ékü rv1é2lel r2v1é2lé rvé2ny1el r2v1ép r2v1é2rem r2v1é2ré. r2v1érés r2v1érp r2v1érté r2v1érv r2v1é2vet r2v1évi rv1fr r2v1ido r2v1iga rvigaz1 r2v1igé r2v1ik r2v1inf rv1inte rv1inté r2v1i2p r2virán r2v1isme rvis3sze rv1ital rvi2z1a2 rvi2z1á2 rvi2z1elv rviz1o rvi2zó rvíze2 rvíz1es rv1kl rv1kr r2v1ob r2v1olv r2v1op r2v1or rv1osz r2v1ov r2v1ó2h r2v1órá rv1öss rv1ős rv1pr rv1sk rv1sp rv1st rv1tr r2v1ub r2v1u2t r2v1üg rvü2l r2v1ülé r2v1ülő r2v1ült r2v1üt r2v1ü2v r2v1ü2z ry2be ry2bó ry2bő ry1é2n ry2ho ry2na ry2ne ry2ra ry2re rys2n ry2tó ry2tő ry2va ry2ve r2z1a2dot r2z1a2la r2z1alj r2z1alk rz1almás rza2sz r2z1aszó rza2tal rza2t1e2 rza2tol r2z1áll rzá2r1ó2r rzá2se rzás1s rz1e2be rze1p2 rz1est rze2tal rze2t1eg rze2t1e2l rzetes3s rze2t1o rzetü2két rzéna2 rzé2n1al rzé2nat rzé2ná r2z1érm rzé2so rzi2ab rzis3s r2z1ín rzo2r1ál rzó2s3zár rzőa2 rzőe2 rz1p2r rzs1ala rzs1any rzs1apa r2zsaz r2z3sár. rz3seben r2zs1e2g r2zs1e2r r2zség r2zs1ék r2zs1ér. r2zséva r2zs1iga rzs1inj rzs1int r2zsip r2zsita rzs1or r2zs1ö2r r2zs1ő2 rzs1s rzs1u2t rzs1úr rzs1ült rzu2sak rzu2san rzus3s rzu2s3z r2z1ut 2s. 1sa 2sabo 2sabr 2s1abs 2s1a2cé sa2dalé 2s1adap 2s1a2data 2s1a2dato 2s1adató sadás1s 2s1adm sa2dog sa2dóc sa2dód sa2dóé sa2dóh sa2dói sa2dój sa2dóm sa2dón sa2dór sa2dóu sa2dóz sae2r sa1f2r 2saga sa2gan sa2g1ál 2sagg sa1gne 2s1a2gó sa2gő sa1grá s1agy. s1agyb s1a2gyo sa2gyú 3sah. saha2r sa2hov sa2ig 2saja sa2jak sa2jág 2saján sa2j1ö saj2tal saj2t1a2n saj2tar sajté2r saj2t1éré saj2tor saj2t1ö saj2t1ü2 sa2k1ab 2s1a2kad sa2k1an sa2kas 2s1akci sak2k1a2r sak2k1as sakke2 sak2k1eg sak2ker sak2kes sak2kis sak2kol sak2k1orr sak2k1ó2 2sakku sa1klu 2s1akna. 2saknáb 2saknái 2s1aknák sak1ola sa2k1orm sa2k1ös sa1k2ru 2s1akt. 2s1akti 2s1aktu sa2k1ug 2s1a2kus sa1k2va 2salab sala2g1 sala2ka sa2laku 2s1a2lapa sa2lapí sa2lapl sa2lapoz s1a2lapr sa2lapt salá2da 2saláí salán1n salás1s 2s1aláté 2s1alb s1a2lel s1alépí salé2t sa2l1éte 2salf 2s1algáh 2s1algái 2s1algán 2salgásat 2s1aljai 2s1aljáh 2s1aljár 2s1alját. 2s1alka 2s1alkot s1alku 2salm 2s1a2lomn 2s1a2lomr sal2tag 2s1alte 2s1alth 2s1altit sa2l1ú sa2m1any sa2mec sa2m1il sa2m1í sa2mol sa2m1osz 2s1a2mő sa2nal sa2nat s2and 2sane sa2nek 2s1angy sa2nód sa3nö s1ante sa2nya. s1a2nyag sa3nyar 2sanyá saó2r sa2p1a2dó sa2p1a2g sapa2te sa2pác sap1á2cs sap1áll sa2p1átm sa2páto sa2p1el sa2p1ék 3sapka 3sapkáb 3sapkán 3sapkás 3sapkát 3sapkáv sa2p1osz s1a2pókr s1a2pósab 2sapp s1aprí sa1pro 2sapu sa2ratá sa2rató sa2rány sar2c3ho sar2cin sa2rén sa2rit sar2j1e sar2k1e2 3sarki sar2kin sar2kir sar2k1ö2 3sarkú 3sarló 2sarm 2sarom 2sarz sase2 sa2s1eb sa1s2m sa1s2po sas3sza sas3szá sas3sze 2s1asszo 3sast sa2s1u2t sa2sú s1aszf 2saszt sata2kés sa2t1alj sa2t1alt sa2t1a2nyá sat1apu sa2t1á2rak. sa2t1árka sa2t1érk sa2t1érr sa2t1i2k sa2t1ing s1atlé satmo1 satmosz2 2s1a2tombó 2s1a2tomo sa2t1orm sa2t1ó2d sa2t1ó2né sa1t2rá 2saty sa2tyá sa2ul sa2urá 2saut sa2uto s1autó. sautóé2r sautói2ko sa2uv 3sav. 3sava. sa2v1a2da sa2v1a2l 3saván sav1ára sav1ária sa2v1árt sa2v1el sa2v1ér sav1ill sa2v1i2n sa2vő sa2vü sa2xi sa2zon 1sá sá2b1ak sá2b1e2l sá2b1e2r sá2big sá2b1il sá2bö sá2buj sá2b1ut sá2bü sá2csá sá2gab sága2d ság1ada 2ságadd sá2gal sá2gan sá2gas 2s1ágas. ság1ass sá2gat 2s1á2gaz sá2g1ál sá2g1á2rak sá2g1árn sá2g1á2ru sá2g1e2 sá2gép sá2g1i2ko sá2gí sá2g1osz sá2g1ó2 sá2g1ö sá2gő ság1s sá2gü sá2gű 4s1á2gy ságy1a2d sáka2 sá2kal sá2k1an sá2kar sá2kát sá2k1e2 sákköz1 sá2k1ö sá2kü s1álc sá2l1in 2s1álm s1á2lomb 3sámá sán2c1é sán2c3so sán1k2r sánt2 sán1th sá2nü sá2p1ost sá2rad sár1adá sár1a2dó sá2r1ag sá2raj 2s1á2rak. sá2raka 2s1á2rakb 2s1á2rakh 2s1á2rakk 2s1á2rakn 2s1á2rako 2s1á2rakr sá2rakt sá2r1a2l 2s1á2ram sá2r1a2n 2sá2ras sár1ass sár1asz 2s1á2rat sá2rág sá2r1ál sár1d2 sá2r1e2 2sárét sá2r1év sá2ria. 2s1á2riá sár1iko sá2r1i2p sá2r1i2s sá2rí sár1k2 sá2r1osz sár1ott sár1óni sá2rö sá2rő 2sárro sár1s2 sárt2 sár1tr sá2rug 2s1á2ruh 2s1á2rul 2sárus sárú2 2s1á2rú. sá2rü sá2s1ad sá2sar sá2sás sá2s1e2 sá2sis sáskész1 sá2só 2s1ásó. sás1ó2r 2s1ásóv sá2sö sá2ső sás3sz sá2s3za sászá2r1a2d 2s1á2szo 2sáta s1átad sá2t1alj s1á2tál s1á2t1á2z 2s1átb 2s1átc 2s1átd 2s1á2t1e2 2sáté sá2tél 2s1átf 2sáth 2sáti sá2t1ir 2s1á2tí 2sátj 2sátk 2s1átm s1á2tokt 3sátor sátókész1 2s1á2t1ö 3sátra 3sátrá s1átre 2sáts 2sátt s1áttö 2sátu 2s1á2tü 2sátv s1átve s1átvé s1átvi 3sáv. sá2v1a2d sáva2l sá2v1a2r sá2v1ál sá2v1á2r 3sávb sá2v1e2 sá2v1érz sá2vis sá2viz 3sávj sá2v1or sá2vö 3sávr 3sávú 3sávv sba2l1 sbeá2 sbér2cs sb2lo sb2lú sb2ra sb2ri sb2ro sb2ró scar2 1scheie sc3hek sc3hen sc3het sc3hé. 1schébe. sc3héd 1schéére 1schére sc3hés sc3hi. sc3hig 1schil sc2ri sda2dal sdai2 sdeá2 sde1b2 sde2del sde1kr sdes2 sde1sp sde1st sdesz2t sdi2ale sd2ra sd2rá sd2ro sd2ru 1se sea2d sea2l sea2n seá2l seá2r se2bag se2b1ak seb1alt sebá2 se2b1ág se2bár se2b1e2g seb1ell seb1elz se2b1esh seb1esze s1e2béd 3sebés se2b1ó2 se2bö se2b1ő2 seb1p seb1s se2b1u se2bú se2bül 3sebzé secs1a2p se2csev se2cs1ék 2sedez sedél1 2sedény se1dra se1d2rá se2dzé se2dző see2l see2n 2seff se1f2ra 2s1e2ger 3segéd 2segér segés3s s1egész1 2segét 3segg seg2ga seg2go 3segí se2gyed segy1e2l s1e2gyé 2s1egyh 2s1együ sehü2 se2h1üv seí2r sej2t1a2 sej2t1e2ny sej2ter sej2tér sej2t1o sej2tö seka2r se2k1ál 2s1e2kés. sek2k1á sek2kos sek2k1ö se1klu se1k2ra se1k2ré se2kur se2kúr sel1ak se2lál 2selb s1eldö 2s1e2lef s1e2legy se2l1e2h se2l1eké se2lemek 2s1e2lemé se2lemk se2lemm 2s1e2lemz se2l1ere s1e2lesé sele2sz se2l1eszü sele2t1a2 sele2t1e2l se2l1e2vé se2l1e2vő selés3s 2self 2s1elha 2s1elhel s1elho sel1id se2lis 2s1eljá s1ellá 2selmél selnö2k1öl 2s1elny s1e2los 2s1e2lö se2lőad s1e2lőí 2s1e2lőz 2selr s1elta s1eltá 2s1eltö 2s1elv. 2s1elvek s1elvű 2s1elvv 2selz 2sember s1ember. s1emberb s1embern 2s1embr 2semén 2semlé se2nat se2n1ál sen2d1a sen2d1á s1e2ner senés3s 2s1enged sen1ist se2n1or s1enta seny1ag seny1ak se2ny1á2 seny1ell seny1ere se2ny1él se2ny1ér. se2nyérd se2nyérte 2senyhi. se2nyigé se2nyös se2nyu se2nyú se2ny1ü2l 2senyve. s1enz seó2r se2pid s1epiz sep2pa sep2p1á2 sep2per 2sepri se1p2ro se1p2ró se2r1agy se2ral se2ram se2r1a2n se2r1a2r se2r1as se2rau se2r1á2g ser1áll se2rár s1erde 2serdő sereg1g 3seregs 2serej se2r1e2lem. se2r1e2lő se2r1elt se2r1elv sere1p sere2pedő ser1e2sze. ser1eszk sere1t se2r1észb se2r1iga se2r1il seri2n se2r1ina ser1inf ser1ing ser1int se2ris se2riz ser1k se2r1ol se2ró s1eróz 2se2rő s1erő. s1erőb s1erőd s1erőé s1erőf s1erők s1erőm s1erőn ser1ős. s1erőt s1erőv ser1s sert2 ser1tr se2r1ü2g serví2 2s1esemé 2s1e2seté 2s1esél 2s1e2sés 2seskü 2s1e2ső se1s2p sessz1a2 sesszé2l sessz1o 2s1este se1sti s1eszen 2seszk s1eszkö 2s1eszm se2szű se2t1a2la se2tana se2t1a2ny se2tát se2t1e2g set1eleg se2t1elk se2t1elm 2setenk 2setes. 2setese 2s1e2teté 2s1e2tető seté2k se2t1ékb se2t1éké se2t1é2l se2t1énk se2t1ér. se2t1é2ri se2t1érté se2tika se2tiká se2tike se2t1ing se2tol set1old se1tran se1tri se1t2ro 2settk seü2t 2s1e2vés 2s1e2vő se1ye se1yé se1yi s1ezr 1sé 2s1ébr sé2f1a sé2f1á sé2g1a2 sé2g1á2 3sége. sé2g1eg 3ségei 3ségek ség1ele sége2lem sé2g1ell 3ségem sé2g1ent sé2ger ség1erk sé2g1esz sé2geté sé2g1e2ti sé2gev ség1é2je sé2g1é2k sé2gép sé2g1ér. sé2g1é2ré sé2g1érn sé2g1érr sé2g1értő sé2g1é2rü sé2g1érv ség1ész ség3g ség1iga sé2g1igé ség1ist sé2gí 3ségk ségo2 sé2g1ok sé2gol sé2g1ó2 sé2gör sé2gő2 ség1őr ség1ős ség1s sé2gu sé2gú 3ségü sé2g1ü2lő ség1ült 2s1éh. 2s1é2he. 2s1é2hek 2s1é2hes 2s1é2het 2s1é2hé 2s1éhh 2s1éhr 2s1éhs sé2jem s1é2ji s1éjs sé2kek s1ékho 2s1ékm 2s1éks sé2k1ú sé2lel s1é2let 2séll 2s1élm sélőkész1 sé2lű 2sély sé2lya sé2lyeg 3sémá sé2mu s1é2nekb 2s1é2neke s1é2neké 2s1é2nekh 2s1é2neki s1é2nekk 2sénekl 2s1é2nekn s1é2nekr s1é2nekt s1é2nekü 2s1é2pí 2s1é2pü sé2ral sé2ran sé2rát 2sérb 2sérc s1érde sé2réé sé2rie sé2rig s1érlel 2sérm sé3ró 2sérr s1értéke 3sérvb s1érvei 3sérvem 3sérves 3sérvh 3sérvr 3sérvv 4sé1ry 2s1érz 2sésdi 2séseki sé2s1el 2séssz 2séstú sész1ak sé2sz1á sé2sz1emb sé2szir sé2sz1o sész3s sét1abl sé2t1a2d 2sétk sé2t1o sétő2 sé2t1őr 2sétr 2sétt 2sétv 2s1év. 2s1évad 2s1évb 2séve. 2s1é2ved 2sévei 2s1é2vek 2s1é2ven 2sévet 2sévéb 2s1é2véi 2sévén 2sévét 2sévév 2s1évf 2sévh 2sévi. 2s1évk 2s1évn 2s1évr 2s1évt 2s1é2vü 2s1évv sfaá3gac sfa2gy1al sfenyőé2 sfé2má sfé2m1e2kéh sfé2m1é sfé2mi sfiúé2 sfi2úéra sfi2úét sf2le sf2lo sf2ló sf2lu sfo2k1út sf2ra sf2rá sf2re sf2ri sf2rí sf2ro sf2rö sga1b sga1d2 sga1p sga1tr sge2o sg2le sg2ló sg2nó s1g2ra sg2rá sg2ri sg2ró shelyü2kü 1s2hi. 1s2hih 1s2hij 1s2hik shitköz1 s2hop s2horr 3s2how shú2sár shús1s 1si si2ac sia2d si2aé si3ak sia2l sia2ny siá2ro si2b1á2 sibilis1 sidás1s si2dea si2deá si2deg si2dei si2den si2deo s2idet 2sidé s1i2dén si2dom 2s1i2dő si2du si2eg sie2l si2en si2eu 2s1ifj 2siga s1i2gazo 2sigá 2sige s1i2ge. s1i2gek s1i2ges 2s1i2gé sig2n1e sig2n1ó2 2siha 3sihed 2s1ihl si2k1a2n sike2r1esz sike2s si2k1in si2k1ir si2k1old s1i2konh s1i2konj 2s1i2konk s1i2konn 2s1i2kono s1i2konr 2s1i2kont s1i2konu sik1orr si1kré sikus1s 2simád si2m1el s1i2mit 3simí 3simog 2simp s1impor si2m1u2t 2s1i2nas 2sind s1indu si2ner 2sinf 2singa s1ingá s1inget s1ingé s1ingók si2nic 2sinj 2s1inku 2s1ins s1inte 2sinv s1invá 2s1inz si2onn s1i2ono si2óa si2óá si2óc si2óda si2óe si2óg si2ói2k si2óo si2óp si2óú 2sipar. 2sipara 2sipará 2siparb 2s1iparc 2siparh 2siparm 2siparn 2s1i2paro 2siparr 2sipartá 2sipartó 2siparu 3sipí 3sipka 3sipká 3sipol 2s1i2ram s1irg 2s1irh 2siro s1i2rod 2s1i2rón 2sirt s1irtó si2sad si2sél si2s1is si2s1í2 sis3s sist2 si2s1ü2 si2s3zab s1i2tal sita2li si2te. si2t1i si2t1ö sit2tin 3sity siú2t 2s1i2vad 2s1i2var 2sivás 3siví 2s1i2vó 2sizé si2zé. si2zéb s1izmo 1sí sí2gé sí2ja sí2ju sí2kas síke2 sí2k1er sí2kí sí2kü sína2 sí2nac sí2nal sí2nan sí2n1á2 sí2nel sí2nö 2síns sí2n1ú sí2r1ad sí2r1ál sírá2s3z sír1á2to sí2red sí2r1e2m sí2ren sí2res sí2r1e2t sí2r1én sí2rir sí2rí s1í2róa sí2róf sí2ról sí2róp sí2rö sír2t1e2v sí2r1ü sí1sp sí1st síté2kol 2sítél sítés3s sítőa2 sítőe2 sí1tr 2s1ív. sí2vá 2s1ívb s1í2vek s1í2ven s1í2vet sí2vé sí2vű sí2za sí2ze. 2s1ízl s1ízr 2sízü sí2zül sje2gy1á2 skao2 skapocs1 ska2r1i2m skaros3 ska2ró2r ska1sm skat2 ska1tr skau2 1skálák 1skálár ske1p2 ske1s2p ské2p1el skiá2 1s2kicc skie2 sk2jö sk2la sk2li sk2lí sk2lo sk2ló sk2lu skolás1s s2korpi sko2s1a2rai skó1p s1k2rá s1k2ré s1k2rit sk2rí sk2rón sk2ru sk2va sk2vi sk2vó sky1ér sky1i sla1d2 sla2g1e2 sla1s2p sla2t1a2l sla2t1a2n sla2tel sla2tev sla2tés sla2t1é2t s2lág 1slágerei slá2nyal slás3s slega2 sleg1g sleí2 sle2tal sle2t1el sle2t1em sle2tél sleves1s sléi2 sléke2 slé2kev slé2k1ol slés3s slic2c1elv sli2d sli2ká 1s2liss slős2 s2lus smaó2 smarc2 smas2 sma1sp 3s2már. 3s2máru sme2g1a2 sme2g1é smen2tel 1smirg sna2pal sna2p1e sna2p1or snap2sz1e2 sne1yi snit2t1elv snőé2h 1so s1obj so1c2k sodaéne2 soda1g2 so2d1e so2dén so2dév so2did so2dis so2dí so2dob so2d1org so2d1os so2dö so2dő sodrás1s so2dú sod1út so2dü so2d3z so2kab so2kai so2k1aj so2k1a2la so2k1ap so2kar soka2t so2k1ato so2k1ál so2k1árn so2k1e2 sok1ill so2kí 3sokk. sokka2l sok2k1ala sok2k1a2p 2sokke sok2k1el sok2kir sok2k1ö2v sok2k1ü 2sokl 2sokm so2kok sok1old 2so2kos 2s1o2koz so2k1ó2 2sokta s1oktat so2k1ú2 so2kü 2s1o2laj sola2j1á2r sola2je sola2tel solás1s 2s1olda 2s1oldá 2soldó s1oldó. s1oldók s1oldóm s1oldón s1oldór s1oldót s1oldóv so2lim 2s1olló solóó2 s1oltás 2solvas so2lyan so2lyó so2m1ad somag1g so2m1a2l soma2t som1ato so2m1e2 so2mél so2m1éte so2mil so2m1ita so2mí so2m1odo som1ort so2m1osz som1p so2mú so2mü son2ch 2sond so2n1e son2kál son2k1e2 2sonó son2tab son2t1a2l son2t1a2n son2tar son2t1á2r son2t1e2 sonté2r son2t1éré son2tik son2tip son2tö son2tő 2sonv so2nye so2nyis so2ór so2ós s1opc s1o2pe sor1ada sor1ala sor1áll so2r1átl 3so2r1e2 sor1f2 s1orgi so2rid 2sorie so2rif so2rim so2r1ing so2ris 3sorké sormű1 sorműt2 sor1oszt 3soroza so2r1ó2 so2rö so2rő 2s1orr. s1orrát 2sorrb 2s1orrn 2s1orro 2s1orrú 3sors. sor2sal sor2sar sor2sas sor2s1e2 sor2sir 2sorsó sor2sü sor1sz sor2szón sor1tre sorú2t so2r1úto so2rü so2rű 2s1osto 2s1ostr s1osty 2sosz s1oszl s1oszt so2ul so2ur so2ve so2vis so2xi 1só sóá2g sóá2r sócsapá2 só2dái só2dák só2dáv sógé2p1e2ké só1g2r sói2g sóí2v só2k1a2d só2kil só2kim só2kó só1kré sómű1 só2né. só2ni sóó2r só2rai só2ráb só2rái só2ráj só2rám só2rán só2rár só2rát só2riá só2s1ü2 só1sz sótá2ny1ér só1t2r 2s1ótv 2s1ó2vó 1sö sö2bű sö2ga sö2gá sö2g1e2l sö2g1em sö2g1ék sög3g sö2go sö2g1ö2lé sö2g1ölt sö2gű sö2ka sö2k1el sö2kid 2s1ö2ko s1ö2kör sö2kú sö2lőj s1ö2lőz s1öly sö2na sö2ná sön2d1a2 sö2no sö2n1öl sö2n1ő s1öntv sö2nú 3sör. sö2ra sö2rá 3sörb 2sörd sö2r1ed sö2reg sö2ren sör1f2 sö2r1iz 3sörk sö2ro sö2ró sö2r1ö2l sö2r1ő sör1s sö2ru 2sörv s1össz s1ösv s1ösz 2s1ötl 2s1ötv 2s1öv. 2söve s1övv s1ö2zön 1ső sőa2c sőa2l sőa2n 2sőá2g ső1bl 2sőbok ső2dad ső2dalk ső2dá ső2del ső2din ső2d1ő2r ső1dro sőe2l sőe2r sőe2s ső1gr ső1kl ső1pl ső1pn ső1pr ső2r1aj ső2r1á2csot ső2riz ső2rol sőr1ö2l s1őrti s1őrz ső2s1av ső2sim sős1orra. ső2s1orrá ső2s1orró ső1s2p ső1sta ső1str sősü2 ső2s1ül ső2s1üt ső2szap ső2sz1áll sőszé2k sősz1éké ső2sz1í spa2d1a2 1s2pann s2patu s2páj spá2n1a 1s2párg 3s2peci 1spektr 1s2peku 1s2pék s2p1ér 1spirálú spis3s sp2le2 s1p2lé sp2lu sp2ne 1s2pong sporta2 spor2t1al 1s2portág spor2tár 3s2portb spor2t1e2 1s2porté spor2t1érd 1s2porth spor2t1i2n 1s2portj 1s2portn 1s2portoka 1s2portol 1s2porton 1s2portos 3s2portot spor2t1ö spor2tő 1s2portra 1s2portró 1s2porttó 1s2portu spor2t1ü2 1spórák. 1spórol sp2ra s1prak 3spray s1p2re s1p2ré 1spric s1p2ro s1p2ró sp2sz 1s2raf srau2 1s2ráco sren2d1ő2 3s2róf srú2de ssab2b1i ssa2vo sság3g ssé2g1e2l ssé2g1é2j ssé2gid s2s1ékt s2s1i2z ss2kál ss2ko ss1k2r ss2lá sso2m1o ss2pó s1s2rá ss3sz ss2tad ss2tar ss2tat s1s2tí ss2to s1st2r ss2tú ss1ura ssy1ér ssy1ét s2sz sszae2 ssza1p2r sszat2 ssza1tr ssz1á2g ssz1á2ram ssz1á2ruk ssz1á2sz s3száza s3szedé sszeg1ér. sszegü2l ssze2g1ülő ssz1egye s3szekv ssz1e2lőa s3szeml s3szemm ssze1p2 ssze2reib ssze2reid ssze2rein ssze2reké ssze2rekt ssze2rem. ssze2remm ssze2rese sszer2t1á2r ssze1t2r s3széki ssz1é2lő sszér1in s3széto s3szige ssz1ing sszis1s sszí2vel ssz1k2 sszkész1 s3szob ssz1osz ssz1ósá s3szöc s3ször ssz1ös s3szöv ssz1p2 ss3zsi sszt2 ssz1tro s3szur sszus1s ssz1úr. 1stabil 1stadio st1a2dó 1stafí s2t1alj s2t1alk s2tand 1standa sta2n1ó2r stan2s1é st1a2nyag s2tarc 1s2tart. star2tas 1startos 1s2tartot 1startt sta1sl sta1s2t sta1t2r sta3u stau2t s2t1a2x st1azo 3stáb. 1stábj 1stábk 1stábn 1stábot st1ág. st1áld stán2c1ol stán2s1á2 stá2riá s2t1árka s2t1árká st1á2t1a2 st1áts 1s2tátu st1átv st1br st1dr ste2a 1s2teak s2t1ebé s2tedén s2t1e2gy s2t1e2ke. s2t1elf s2t1elh s2t1ellen s2t1elm s2t1e2lo s2t1elö s2t1e2lő s2t1elr s2t1elt s2t1elv s2t1ember s2t1e2mel s2t1eml ste2n1a ste2n1á ste2neg ste2n1és sten3n ste2nos ste2n1ő2 1stepp ste2rad ste2raj ste2ral ste2rav ste2rác ste2rál ste2r1e2le 1sterili ste2r1int ste2ris ste2r1o s2t1erő ste2sz s2t1eszm ste2u 1stégek 1stéget 1stégg 1stégr sté2k1a2 sté2ká stékát1 stékáta2 sté2k1el st1é2kesí st1ékí sté2k1o sté2ku s2t1é2le st1é2lé s2t1élm s2t1élt st1élv s2t1érc s2t1érem s2t1é2ré s2t1é2rőt s2t1érté s2t1érz stés3s s2t1észl s2t1étk s2t1é2ve. st1fl st1fr st1gr s2t1i2d sti2g s2t1ige s2t1igé s2t1i2ma s2t1i2má 1s2timm s2t1imp sti2na. s2t1ind s2tinf s2t1ing s2t1inv s2t1i2o st1i2pa st1irá st1iró stis3s sti2sz s2t1isza s2t1i2vá st1i2zo s2t1íj 3s2tíl s2tír st1írá st1í2v st1í2z stká2ro st1kr st1kv stola2t sto2lato sto2p1a 1s2topb 1s2toph 1s2topr 1s2topt sto2rál sto2rás sto2re sto2ris st1o2x 3s2tóla 3s2tólá st1ó2rá 1s2tós stö2k1ölt s2t1önt s2t1örö s2t1össz stőa2 stőe2 stőkész1 s2t1őra s2t1őrb s2t1őrc s2t1őreg s2t1őrei s2t1őré. s2t1őrén s2t1őrér s2t1őrév s2t1őrf s2t1őrg s2t1őrh s2t1ő2ri st1őrl s2t1őrm s2t1őrn st1őrp s2t1őrs s2t1ő2rü s2t1őrv st1pf st1pl st1pr 1strando 1st2rap 1straté s1trág 1st2réb s1t2rén st2riá st2róf 1strófá 1st2ruc 1struktú st1sc st1st st1sz st1t2r s2t1udv 1stukk st1uni st1u2ral 3s2túd st1úr. st1út s2t1üg s2t1ü2lő st1üst s2t1üt s2t1ü2v s2t1űr. s2t1ű2ri s2t1űrn s2t1űrt 1su suá2r subi1 s1udm 2s1udv 3sugár. 3sugárr 2s1ugr 3suhi 2sujj suj2j1a2da su2k1ará su2ke su2k1ö su2k1ü 3summ su2nal 2s1und 2s1u2ni su2no supe2 2sura s1u2rad su2rai su2rak su2ral su2rat su2rát 2surn 2s1u2ru su2szo 2s1u2tac 2s1u2tad 2sutak s1u2tal 2s1u2tam 2s1u2tan sutas1s 2s1u2tat 2su2tazi s1u2tazó 2s1utc 2sutó su2tód 2sutu 1sú sú2csal sú2csat sú2csem sú2cser sú2csip súcská2 sú2cs1ö sú2cs1ü2 súcs3z súdi2 súi2m s1újh 2s1ú2jí 2s1újs 3súly 2súr. 2súrb 2súré 2súrh 2súri 2súrk 3súrl 2súrn 2súrp 2súrr 2súrt sú2sén sú2só 2súsz súszó2s3z 2s1útb sút1en 2súté s1úth 2súti sú2tig 2s1útj 2s1útk s1útn 2súto s1ú2ton sú2t1ő 2s1útr 2s1útt sútü2 sút1üz 2s1útv 1sü sü2d1e sü2dí sü2dü 3sü3gé s1üggy 2s1ü2gy 3sü2k1a sü2kü 2süldö sü2led 3sültr sülye2 sü2lyes sü2ná süne2 sü2nev sü2n1é 2s1ü2nő sü2rí 2s1ü2rü 2süst 2s1ü2sz 2sütk 3sütőb sü2ze sü2zé 1sű sű1pr sű2r1a 3sűrí s1ű2ru sű2ző sva2s1u2 svá2gy1ón. svá2nyan svá2r1al svárosi2 sven1 svezetőé2 své2nyel své2tes svíze2 svíz1es s2vun sw2hi swhisky2 sy2bő sy1ig s2z 1sza szaa2 3szabáz 3szabd sz1a2dás 2sz1a2dó szaé2 3szaft 3szag. 3szagb 3szagú 2szagy. 2szagya 2szaj. 2szajá 2szajj 2szajú 2szakci 3szakm sza2k1ó2r sza2köz 2szalás 2sz1alb 2sz1alf 2szalg 2szalj sz1alj. sz1aljak sz1aljo 2szall 2szaln 2sz1alp 2sz1als 2szalt. 2sz1alte 2szalto 2szaltu 2szane sz1antr 2szanya 2szanyó 2szap. 2szapá 2szapb sza2pel 2szapé 2szaph 2szapi 2szapj 2szapn 2szapr 2szapt 2szarán 3szarb 2szarc 2szaré 3szart 3szarv 2szasp sz1assz sz1aszt sza2tala 3szaty 2szaut szau2ta 3szax 2szazo 1szá 2szábr 2szágó 2szágy szá2gyá szá2gyo szá2j1e szá2ke 2száldo szá2lin 3szálú szá2man szá2mar 3számá szá2mál 3számc szá2m1e2 3számé szá2m1érté 3számí 3számk 3száml 3számm 3számn szá2mor 3számt 3számú 3szánd 3szánt 2száp 2száradd 2szárás szá2r1e 2száriá 3szárí 3szárm szá2r1ó2ra szárt2 2száru. 2száruh 2szárus 2szásó. 2szátd 2sz1á2t1é 2száti 2szátl 2szátm 2szá2t1ö 2száts 2sz1átu 2sz1á2tü 2szátv sz1bl sz1br 1szcéna sz1cl sz1d2r 1sze 2szeb. 2szebé 2szech 2szecse 2szedz 2szeger 3szegfű 2szegz 2szeh 3szekcső. sze2keg 2szekéit 2szekés sze2kés. 3szekrén 3szekto 3szele. 2szelef 2szelemb 2szelemek 2szelemé 2sz1e2lemk 2szelemm 2sz1e2lemr 2szelemü 2szelemz 2szelere 3szelet 3szelén 2sz1elf 2sz1elgo 2sz1elha 2szelhá 2sz1eljá 2szelkü 2sz1ellá 3szellő 2sz1elm 2szelnev 2szelnö 2szelo 2szelö 2sz1e2lőá sze2lődö 2sz1e2lőf sze2lőré 2szelső 2sz1elszá 2sz1elta 2szeltá 2szeltű 2szelu 2sz1elül 2szelv. 2sz1elvá 2szelvek 2szelves 2szelvez sz1elvi 2szelvn 2szelvt 2sz1elz 2szember 3szemek 3személ 3szem1p2 3szemű. 2szenc 2szener 3szenny 3szentm 3szenz szeo2 2szepi sze2r1á2l 2szeredm szer1e2ge sze2rej 3szerel szer1eszt 3szerke 3szers 3szerta szer2tálo 3szerv szervíz1 3szerz 2sz1esd 2sz1esemé 2szesetb 2szesete 2szeseté 2szeseti 2szesetr 2sz1e2sés 2szeskü 2szeső sze1sp 2szeste 2szesté 2szesti 2szestj 2szestr sze2t1e2lő sze2t1é2k 2szetika sze2ton sze2tőr 2szeve 2szevő 2szexp 3szezo 2szezr 1szé 2széber 2szébr 2szég. 2szége 2szégő 2szégr 2széhe. 2széhen 2széhet 2széhs 2széji 3széke. 3széked 3székei 3székek 3székem 3székes 2székez 3székéb 3székév szé2k1ol szé2kos 3széks 3székü 3szélek 2széneke 2szénekn szé1pró 3széps 2sz1ér. 2sz1érb 2sz1érc 2sz1érd sz1é2rel 2szérem szé2rem. szé2remm 2sz1é2ren 2széré szé2ré. szé2rén szé2rér szé2rét szé2rév sz1érf sz1érg sz1érh 2sz1érin sz1érj 2sz1érk 2sz1érl 2sz1érm sz1érn 2szérő. 2szérői 2szérők 2szérőt sz1érp 2sz1érr sz1érs sz1értá 2sz1érte 2sz1érté sz1értí 2sz1értő 3széru 2sz1é2rü 2sz1érv 2sz1érz szé2tel széte2s 2szév. 2szévad 2szévb 2széve. 2szévei 2szévek 2sz1é2vet 2szévén 2szévét 2szévév 2szévf 2szévi 2szévk 2szévn 2szévr 2szévs 2szévt 2szévü 1szférai 1szféráé 1szféráso sz1fl sz1fr sz1gl 1szi szi2ab 2szide 2sz1idé 2szidő 2szifj 2sz1i2ga 2sz1igé 3szign szi2k1a2s szi2k1e2r szi2k1ó2 sz1imak 2sz1i2má 3szimb sz1impr 2szimpu 2szinas 2szinde 2szindí 2szindu sz1info 2szing sz1inko 2szinteg 2szio 2szirat 2szirá 2sz1i2ri 2szirod szi2sí 2sz1i2sza szi2szá 3szitu 2szivad 2szivás 2szivó sz1izg 2sz1izz 1szí 2sz1íg 3színe 2színna szí2vár 2szívi 3szívű 2sz1íz szka1pr 1szkarab szk1arch 1szkenn 1szlávh 1szlávok 1szleng. 1szlengn 1szlengr szle2t1e2l szle2t1o 1szloge 1sz2mok 1sznob 1szo 2szobj 2szoda. 2szodai 2szodak 2szodú 3szof 3szoká 2szokke 2szokoz 2szoksö 2szolaj szo2l1ál 2szolda sz1oldá 2szoldó 2szo2lim 2szolló 2sz1oltár 2szoltás 2szolvad 2szolvas 2szombor. 3szoms szo2nas szo2nár 3szond 2szora szo2r1ál 2szorm 2szorn 2szors 2szorv 2szostá 2szosto 2sz1otth 3szov 2sz1ox 1szó 2szólm 3szóló 2szónád 2szónái 2szóni 2szónod 2sz1ó2rán 2szórát 2szóri szó2sík 3szósz. szósza2k szó2száll szó2szón szó2szülő szó1tr 1szö 2szöbli 3szöge 2szöldes 2sz1öle 2szöre 2szöv. 2szövei 2sz1öz 1sző szőa2 szőe2r szőé2 3szőlő sző2ra sz1ősi 2szőz sz1őze 1sz2pí sz1pl 1szponz szrádi2 sz3saj sz3sap sz3sas sz3sav s3zsák sz3sán sz3sár sz3sás sz3sát sz3sáv sz3seg s3zsem s3zsen sz3sep sz3ser sz3sé sz3sh sz3sik s3zsin sz3sis sz3siv sz3sín sz3s2k sz3sl sz3sod sz3sok s3zsol sz3sor sz3só sz3sör sz3söv sz3s2p sz3s2r sz3s2t s3zsúll sz3sü sz3sz sz2t1álla sztá2r1a2d szt1á2ram sz2tá2ras sztá2rat sz2táre sz2tárf sz2tárh 1sz2tárj sz2tárny sztáró2 sz2táru szt1á2ruk sz2tárv szte2r1el 1sztereo szté2g szt1ége sz2térte sz2t1érv sz2t1été szt1örök sz2t1őrn 1sztrádá 1sztrájk sz2tür 1sztye 1szu szu2b szub1o szuc1 2szud sz1udv 2szugo 2sz1ugr 2szuh 2sz1uj 3szuká sz1u2ra 2sz1u2rá 2szuta sz1utó 2szutu 2s3zuz 1szú 2szúg 2szúj sz1úron 2sz1úrr sz1úrtó 2szús 2szúté 2szúth 2szúti 2szútj 2szútn 2szúto 2szútr 2szútt 2szútv 2szúz 1szü 2sz1üd 2szügg 3szüks 2szüld 2sz1ü2led 2szülőse 3szüne 3szürke 3szürkés 2sz1üs 2sz1üv 1szű 3szűk 2szűrödn 1szvit. 1szvitet 1szvitj 1szvitn 1szvitt sz3zs 2t. 1ta taa2d taa2l taát1 taáta2 taboz1 ta1bra 2t1abro ta1bró 2t1abs ta1cl ta2dalé 2t1adap ta2das t1a2data 2t1a2datb 2t1a2dato ta2datu 2t1a2dá 2tadio t1adj t1adl 2t1adm ta2dod 2t1a2dog 2t1a2dot 2tadó t1a2dóa ta2dóá ta2dób ta2dód ta2dóf ta2dóg t1a2dóh t1a2dóig t1a2dóik t1a2dóin t1a2dóit ta2dóí t1a2dój t1a2dóka t1a2dóké t1a2dóko t1a2dókra ta2dól t1a2dóna t1a2dóná ta2dóp t1a2dór t1a2dótó ta2dóü t1a2dóv ta1drá ta1d2re ta1dro t1ads ta2dun t1adv tae2l tae2r ta2ero taé2r 2tafí ta1f2r taf2ta ta2g1aj ta2gav taga2z tag1azo ta2gág ta2g1ál ta2gec ta2g1el ta2g1e2r ta2g1é2g 2taggo 2t1aggr ta2gid ta2giz ta2g1osz ta2g1ott ta2góc 2t1a2gón ta2g1ó2r ta2góv ta1g2raf ta1g2ram tagrádi2 ta2g1u2s ta2gut ta2g1ü2 2t1agy. ta2gya. ta2gyáb ta2gyáh 2t1agyb 2t1agyn 2t1agyr 2t1agyv ta2ire tai2rón tai2z ta2jé ta2j1u2s ta2jús 2t1a2kad ta2k1ál taká2r tak1áro ta2kás ta2kátk 2t1akce 2t1akci take2l tak1ele ta2k1ér. tak1é2sze 2t1akkora 2takkord 2t1akku ta1k2la ta1klu t1akna. ta2kó. ta2k1öb ta2k1öröm ta2k1ös ta1krá tak2reá ta1krí 2t1akro ta1k2rón 2t1akta. tak2tem 2takti. 2t1aktiv 2t1aktí 2t1aktj taktus1s ta2kus ta1k2va ta2l1a2da ta2l1a2dá ta2l1adh ta2l1adj ta2l1adn ta2l1a2do ta2l1a2dó ta2l1adt ta2l1a2du ta2l1adv 2tala2g1 t1a2lagu ta2lagú 2t1a2lakb tal1akc 2talakí 2t1a2lakj 2ta2laku 2t1alakz ta2l1a2l 2t1alany 2t1a2lapa 2t1a2lapí ta2lapk t1a2lapl 2t1a2lapsz ta2l1a2r ta2l1as tala2te 2talatti ta2l1au 2taláá ta2l1á2g 2taláí ta2l1állo tal1á2rak talás1s ta2l1áta tal1átr tal1ell ta2l1elő ta2l1eng tal1esi talé2g talé2k1e2 ta2l1ér. 2t1alge ta2l1i2ko tal1ikr tal1imp tal1ina. ta2lip ta2l1isk ta2l1í2r 2taljas 2t1alji 2taljz 2t1alkal 2talkím 2talkoh 2talkot 2taller tal3ly ta2l1ol talo2m1e ta2l1osz ta2l1őr tal2p1á2ro tal2pel tal2p1il tal2pus tal1t2re ta2lud 2t1a2lulj ta2l1u2r ta2l1u2t ta2lúr ta2l1út. ta2lü ta2lű 2talveo ta2mal tam1alm ta2maz ta2m1i2d 2t1a2mő t1ampa 2t1ampu 2t1amur ta2mü ta2n1aj ta2nal ta2nan 2t1a2nat tan1áll tan1álo tanás1s tan2del 2tandr ta2n1el ta2ner 2ta2n1es ta2n1ez ta2n1éj ta2n1ér. ta2n1érk tan1évb tan1é2vé tan1é2vi tan1évm ta2nid 2ta2nim tan1ist tanké2r tan2kére tan2kés tankó2 tan2k1óra 2tanny ta2n1osz ta2nód tan2te. tan2t1el tan2tors tan1trá ta2nü ta2nű 2tanyag 2tanyád 2t1a2nyó tao2l taó2r 2t1a2pa. 2t1a2pai ta2paké ta2pasá 2t1a2páb 2t1a2pád 2t1a2páé 2t1a2páh 2t1a2pái 2t1a2páj 2t1a2pák 2t1a2pám ta2pára ta2páró 2tapáu 2t1a2páv ta1p2la ta1plé t1a2pó. 2tapp ta1p2ré 2t1aprí ta1p2ro tap2sor taps3s tap2s1ü2 2tapun ta2rabe ta2rai 2t1a2ras 2t1a2rat 2t1a2ráb tarádi2 2t1a2ráh 2ta2rán 2t1a2rát 2t1a2ráv 2t1arbi 2t1arc. 2t1arch 2t1arco t1arcu 2t1arcú ta2r1i2k ta2romá tar1s2 tar2tab tar2t1e2l tar2t1em tar2t1en tar2t1ér. tar2tit tar2told 2tartos 2tartr 2tartt 2tasc ta2sem 2tasf ta1s2ká ta1slu ta1s2m 2tasnő ta2s1ol 2t1aspi ta1spr 2tasru 2tassz tas3szá tas3szt tast2 ta1s2ta 2taste ta1str 2tasv ta1sy 2t1aszk ta1szl ta2t1alj ta2t1alm ta2t1aszt tatá2rai. 2t1a2tei tate2s 2tatika 2tatiká ta2t1i2na. ta2t1i2ná ta2t1ing t1atlas t1a2tomo tat1orj ta2t1őr ta1t2ri 2t1atti tat1u2ra ta2tya ta2tyá 2t1a2uk tau2ta tau2tá 2tauto taü2z 2tavan 2tavatá 2tavató ta1wh ta2zon 1tá 2táb. tá2b1á tábe2sz1é2l 2tábé tá2big tá2bin 2tábj 2tábk 2tábn 2tábok 2tábon 2tábot tá2bö 2tábr t1ábrá tá2bü 2táciu tá2fa tá2fá 2tág. tá2ga. tága2d tág1ada 2t1á2gai tá2gaz 2t1á2gá 2tágb 2t1ágc 2t1á2ge 2t1á2gé 2t1ágf 2tágg 2t1ágh 2t1á2gi 2tágj 2t1ágk 2t1ágm 2tágn 2t1á2go 2tágr 2t1ágt 2t1á2guk 2t1á2gun 2t1á2gú 2t1ágv 2t1á2gy tá2hí tá2jal tá2jaz tá2j1e2g tá2j1e2l tá2jí tá2j1ok tá2j1ö2 tá2jő t1á2jul tá2lab tála2d tál1ada tá2laj tál1a2lap tá2lap 2t1álar tá2l1ál tá2l1áth 2t1áldá 2t1áldo tále2 tá2l1eg tá2l1el tá2lél 2t1áll. 2t1állam 2t1állan 2t1állat 2t1állás 2t1állh 2t1állí 2t1állj 2t1álln 2t1állo 2t1álls 2t1állt 2t1állu t1állú 2t1állv 2t1álma 2t1álmi 2t1álmok 2t1á2lomr tá2lomt tá2lö 2t1álru tá2lü tá2lyab tá2ly1a2c tá2lyad tá2ly1a2g tá2ly1a2l tá2ly1a2n tá2lyap tá2ly1at tá2lyau tá2lyátl tá2ly1á2z tá2lyid tá2lyir tá2lyis táma2sze tá2mí tá2mos 2t1á2mu tán1alm tá2nár tánc3c tán2c1e tán2céh tán2cél tán2cén tánckész1 táncs2 tán2csá tán2csor tán1d2 tá2n1e2 tá2ní tá2n1ó2 tá2nö 2tánpó tán2s1e tá2nü tá2nű tá2nyal tá2ny1as tá2nye 2tánz tá2p1a2 tápá2 tá2pál tá2p1ár tá2pát tá2p1e2 tá2p1il tá2p1in táp1oll tá2p1osz tá2pő tá2pü 2t1á2radá tár1a2dot tá2radó tá2r1a2g tár1ajt tá2r1a2l 2tárama. 2táramá 2tárami 2t1á2raml 2táramok 2táramol 2táramot 2t1á2ramt 2táramu 2táramú tára2n tá2r1any tá2rap tá2r1asz tá2r1att tá2r1au tá2r1av tá2rág tá2r1ál tá2r1á2sz tá2r1átl 2tárboc tá2r1e2 tá2réd tá2rés tár2gyö tá2r1i2k tá2r1i2p tár1isk tá2r1ism tá2rí tár1k2 2t1árkád 2t1árkána 2tárkár 2t1árnyé tár1okm tá2r1osz tá2róc tár1órá tá2rö tá2rő tár2s1alt 2tártás tárt1öltő tár1tro 2táru. 2tárua 2tárub 2táruc 2t1á2rug 2t1á2ruh 2tárui 2t1áruj 2táruna 2tárus 2tárut. tár1uta 2táruü 2táruv 2tárúé tá2rúj 2tárúk tá2rús tá2rü tá2rű tá2s1a2d tá2s1aj tá2sal tá2s1a2r tá2saz tás1á2ga tá2s1á2rai tá2s1á2rá tá2s1á2ré tá2s1árh tá2s1árn tá2s1á2ro tá2s1árr tá2s1árt tá2sás 2t1ásáso tá2s1á2to tá2s1e2 tá2sis tá2sodv tá2s1ol tá2sor tá2só 2tásók tás1ó2r tá2sö tá2ső tás3s tást2 tás1tr tá2sut tá2s1ü2 tá2sű t1ásván tá2sz1ak tá2szal tás3zav tá2s3zá tá2sze tás3zen 2tászi 2tászo tá2szos tá2s3zó 2tászt 2t1átad 2t1á2tál 2t1átc 2t1átd 2t1á2t1e2 2t1á2t1é 2t1átfo 2t1átg 2t1áthe 2t1áthi tá2t1ir 2t1á2tí 2t1átje 2t1átkö 2t1átlag 2t1átm 2t1á2t1ol 2t1á2t1ö 2t1á2tő 2t1átp 2t1átre 2t1átru 2t1átsz 2t1átte 2t1átté 2t1áttö 2t1áttű 2t1átut 2t1á2tü 2t1átvi 2t1átvo tá2v1a2d tá2vak táva2l tá2v1a2n tá2vas tá2vaz tá2v1ál tá2v1e2 tá2véd tá2v1érz tá2v1és tá2vin tá2vis tá2ví tá2v1or 2t1á2vó tá2vö tá2vő tá2vü tá2zsal tá2zsál tá2zsó tázs1p tbal2le tbeá2 tb2la tb2le tb2li tb2lo tb2lú tb2ra tb2re t1b2ri tb2ro tb2ró tb2ru tca1k tca1s tca1t2 tc2lu tc2re tcsap1á2g tdíja2d tdí2j1ada td2ra td2rá td2re td2ro td2ró td2ru 1te te2aa te2aá te2ab te2ac te2a3d te2ae te2aé te2ag te2ah teai2 te2aiv te2aí te2aj te2aku te2alap te2aláz te2ali te2ana te2ao te2aö te2aő te2apa te2apá teas2 te2a1sp te2asza te2aszá te2aszo tea1tró te2aú te2aü te2av te2az te2ber te2béd 2techó te2csá te2dit te2dí 2t1e2dz 2t1eff te1f2r te2gan te2g1a2r tega2z teg1azo te2gá teg1ál teg1ár te2g1eg teg1e2lem te2g1ell te2g1elr te2gene 2tegere. teg1ered te2g1él te2g1é2p tegész1 teg3g te2gid te2gis te2giz te2g1on te2g1ö te2gú te2g1ü2g tegü2l te2g1ülé te2g1ülő 2t1egy. 2t1e2gyes t1e2gyez t1egyén 2t1egyh 2t1egyl 2t1egys 2tegyüt tei2g tein1s te2j1a teje2g te2j1ell te2j1elv te2j1er te2jin te2jí te2jo te2j1ó te2j1ös te2jő te2j1u2 te2jú te2k1ag te2k1ál te2k1el tek1éret te2k1i2p te2kí te1klu te2k1ok te2k1ös te2k1und te2k1út te2lab te2lag te2laj te2l1an te2lap te2lar te2las te2lav te2l1á2g te2lál telá2r te2l1át 2telbü teleí3rá 2telej tel1ejt 2telektr tel1e2len te2l1elk te2l1ell te2lemba te2leme. 2telemei 2te2lemek te2lemes te2lemén 2t1e2lemű tel1esés te2l1e2ső te2l1este tel1esti tele2t1ér. t1e2lég tel1érét te2l1éte t1elfoga telié2h te2l1imi te2lind te2l1inf te2l1ing 2t1elix te2lír tel2l1eg 2tellenf 2tellenő 2tellenz 2t1ellniv 2telméle te2l1ó2 te2l1öl 2telőadá 2t1e2lőí 2telőnn 2t1e2lőny te2lőtt 2t1e2lőtu te2lővét tel1őzi. tel1p2 2t1elsa 2t1első 2t1eltelé 2t1eltett. 2t1eltéré te2lú telü2ké. 2t1elv. 2t1elvb 2t1elvei 2t1elvek 2t1elvet 2t1elvév 2t1elvh 2t1elvi. 2t1elvil 2t1elvk 2t1elvn 2t1elvr 2t1elvt 2t1elvü 2t1elvű 2t1elvv te2map te2m1as 2t1embl 2t1embr te2m1e2g tem1e2leg 2t1emelé 2t1emelk 2te2melő te2melv te2m1él te2m1ér. te2m1é2rő. tem1érté 2t1e2més te2m1éte te2m1étk te2mid te2migr tem1ill te2mim tem1ing te2m1int te2móc te2m1ó2r te2m1ő2 2tempá 2templi 2t1e2mul te2mus te2mut temü2l te2m1ülé te2nad te2n1a2g te2nal te2n1a2r te2n1as te2nat te2nau te2n1á2t ten1d2h tene2g ten1egy te2n1el te2ner 2tenerg te2n1esz te2n1ékt te2n1év. te2n1évi 2t1enged te2n1i2p te2n1ol te2n1ó2 te2nö ten2tin ten2t1í2v ten1tri te2n1u2 te2nú te2n1üg te2nünn 2t1enyh t1enyv te2oc te2of teo2s 2t1epiz 2t1e2pos 2tepp tep2p1é2k ter1abl ter1a2cé te2r1ada ter1aka te2r1a2n te2r1a2r te2rau ter1á2cs te2ráf te2r1áll ter1álm te2r1á2ri ter1áta ter2ch ter1d2 2terdő 2teredm te2r1e2dz ter1egé ter1egy 2t1e2rej te2r1e2ke. 2t1e2rekl te2r1elm tereme2 te2r1ent 2tereo tere2pa tere2p1e2l tere2p1ü2lé te2r1er te2r1e2ső te2r1este te2r1esté te2reta te2r1eti te2retn te2rég te2r1é2j ter1éka te2ré2l ter1éle ter1élv ter1g2 ter1iko 2terili ter1illa teri2na te2r1i2p te2rism ter1ist ter1izm ter1k2 t1erkölc termés1s te2r1old te2ror te2r1ox te2r1ó2r te2rök te2r1ön te2rő 2t1erő. 2t1erőb 2t1erőf 2t1erős t1erőt t1erőv ter1s2 tersz2 tert2 ter1tr te2rur te2r1ut te2r1út te2r1üg te2r1üld ter2vaj ter2van te2sar te2sár te2sel tes1ell 2t1esemé 2t1e2setb 2t1e2sete. 2t1e2setei 2t1e2seten 2t1e2setet 2t1e2seté 2t1e2seth 2t1e2seti 2t1e2setn 2t1e2setr 2t1e2sett te2sél 2teséll 2tesély 2t1e2sés te2s1int tesí2r te2sírn te2s1író te2síz 2teskü t1esni te2sot 2t1e2ső tesp2 2t1esszen tes2tak tes2t1áll testá2r tes2tára tes2t1elk tes2t1ell tes2t1er 2testéj 2testék tes2t1ékn tes2t1éks 2testém tes2tism tes2t1o testő2 tes2t1őre tes2t1őré tes2tur te2s1ú te2s1ü2v 2teszet 2t1eszmé tesz2t1a2 teszte2r tesz2t1ere tesz2t1é2te tesz2tor te2t1a2k te2t1a2l te2tana te2t1a2p te2tág te2t1ál tetá2r te2t1ára te2tát te2t1e2g te2t1ell tet1e2lő tet1elr te2t1elv te2tene tete2r te2t1eré te2t1esz te2t1éj tet1ékk te2t1é2l te2t1éri te2t1érv te2tid 2t1e2tika 2t1e2tiká te2tim te2t1int tetkész1 te2t1olt te2t1ot te2tór te2tur te2t1üz 2t1e2tűd te2t1ű2z tevés3s te2vol te2w1a 2t1exp 2t1e2zer tezőa2 t1ezred 1té 2t1ébr té2cő té2des 2tég. 2tégb 2téget 2tégé té2gép té2gés 2tégg 2tégj 2t1égk tégla1 2tégn 2t1é2gö 2t1é2gő 2tégr 2tégt tégü2 té2g1ül 2t1éh. 2t1é2hek 2t1é2hen 2t1é2hes 2t1é2het 2t1é2hé 2t1éhs 2t1é2jen té2jes 2t1éjr 2t1éjs 2t1éjt té2kab té2kad ték1ada té2k1aka ték1alk té2kam té2k1a2n té2k1ar téka2t té2k1att té2kaz té2k1ág té2k1e2c té2kedé té2k1e2g té2k1e2kéh té2k1e2lőá té2k1elr té2k1er té2k1esz té2k1eti té2k1é2k té2k1é2l té2kép té2k1ér. té2k1és tékfélé2 tékfé2l1év té2kid té2kik té2kim té2kirá té2k1i2s té2kí2 té2k1o2r té2k1osz tékó2 té2kór té2k1ö2 té2kő té2k1u2t tékü2l téla2 té2lak té2l1an té2lap té2las t2élá té2láb té2lál té2lár té2l1á2t té2lei té2le2l tél1ele tél1ell tél1elő tél1elv té2l1e2r té2les tél1est té2lez tél1ékb tél1éké té2lí té2ló té2l1ö2 télőkész1 télu2 té2lut 2té2lű té2lyeg télyigaz1 téma1p té2mé té2mil téna2 té2n1an 2t1é2nekb 2t1éneke. 2ténekek 2t1é2neké 2ténekl té2n1in té2n1ö2 té2ny1e2g té2ny1e2l té2nyék tényigaz1 té2nyim té2nyo té2nyö tépés3s 2t1é2pí té1p2la 2t1é2pül té2rab té2raj tér1akt té2r1a2n té2rar té2ras té2rav té2r1á2r 2térdekb 2térdekl 2térdekn 2térdekü 2térdekű tér2d1e2mel tér2d1í2j té2reg té2r1e2l té2rem tér1eml té2r1eng té2r1eső té2r1essz té2r1esz 2t1é2rett térés1s té2r1ész tér1éte téri2d té2r1ide té2ril té2rip té2ris 2térkez 2t1érmü té2r1os té2rö 2t1értes 2t1érték 2tértő. 2t1értők tér1t2r 2t1értv té2r1u2 2t1érv. 2t1érvei 2térvek 2t1érvény tésa2 té2sab té2sag té2s1aj té2sak té2s1al té2san té2sap té2s1as té2s1az té2s1á2 tésát1a2 té2s1eg té2s1e2l té2s1e2r té2sés tés1iko té2s1or té2só té2s1ő2 té2su tésü2l té2s1ülé tés1ülő té2s1üt tés3zav tész1ál tés3zár té2szeg té2sz1emb tés3zene té2szesz té2sz1ék tés3zsi té2t1a2l tétcsa2 té2t1e2g tét1e2lemt tét1elkés té2t1elve 2t1éteri té2t1ers té2t1e2v té2t1é2te té2tok té2tol té2t1os tétó2 té2tón té2t1ór 2t1év. 2t1évad 2t1évb 2t1évc 2t1é2vedb 2tévei 2t1é2vek 2t1é2vem 2téves. tévé1sz2 2t1évf 2tévh 2t1é2vi 2tévk 2t1évn 2t1évr 2t1évs 2tévt té2vú 2t1évü té2vükö té2vün 2t1é2vű 2t1évv té2zs tfa2l1aj tfa2lan tfa2le tfa2lom tf2jo tf2la tf2le tf2li tf2lo tf2ló tf2ra tf2rá tf2re tf2ri tf2rí tf2ro tf2rö tf2ru tgá2zak tgá2zár tgá2zé tge2n1el tge2né tgen1s tg2lo tg2ló tg2ne tg2ra tg2rá tg2ri tg2ró tg2ru tg2rü tha2de 1thagore t2har. 1t2hau 1t2he. the2i2d1 1theidp 1theusz t2holi thon1n tho1ny 1thosz th1sc 1thy 1ti ti2aa ti2ae ti2aé ti2af ti2ah ti2aj tiakész1 ti2ala ti2am ti2a1p ti2ata ti2atl ti2aü ti2av ti2chi ti2dea 2t1i2deá 2t1i2deg ti2dei 2tidej 2t1i2deo ti2dén 2tidéz ti2dio 2t1i2dom 2t1i2dő tie2le tie2n tié2b ti1fl 2t1i2ga 2t1i2gá 2t1i2ge. 2t1i2gék ti1g2lo ti1g2ra 2t1ihl ti3ki ti1kle ti1klu ti2konb ti2kono ti2konr tiko1sz2 ti1k2ri ti2lac ti2lad ti2lan ti2l1ág tile2g til1egy ti2lex ti2lim til1ing ti2l1i2p ti2lir til1isk 2t1illato 2tillú ti2l1ö2 2t1i2ly ti2mak ti2máb 2timádó ti2máj ti2már ti2máz ti2mes 2timmu 2timrei 2tinakat. 2t1inakk tin1akt ti2n1a2n tin1ará tina1t2 ti2n1au ti2n1áll tin1árt 2t1indá 2t1inde 2t1indí 2t1indu ti2ne. ti2neg ti2n1eké ti2nem 2t1infar 2tinfl 2t1infr tin2gal tin2gas tin2g1ár tin2g1e2l 2t1ingeni tin2g1eti tin2gos tin2g1ó2 2t1i2nic tini2g tin1iga ti2n1i2m tini1sz2 2t1inku 2t1inkv tin3n tin1órá ti2nö 2t1insp 2t1integ 2t1intéz ti2n1ut ti2nű ti2ol ti2onb ti2onh ti2oni ti2onj 2t1i2onn 2t1i2ono 2t1i2onr 2t1i2ont tio2x ti2pad ti1p2la tip2pin tip2po 2t1i2rat 2t1i2rán 2t1irg ti2rig 2t1irk 2t1i2rod 2tirol ti2rom ti2rón 2t1irr tir2s1 2t1irt tis2as ti2s1a2u ti2s1el 2t1i2si. ti2sim ti2sin ti2s1i2r 2t1i2sis 2t1isko ti2sor 2tistv tisz2tina ti2t1i2o ti1t2ri ti1t2ro tiu2mé tiu2m1i2 2tivad 2t1i2var 2t1i2ván 2t1i2vó ti2xa tize2n1 ti2zé. 2tizéj 2tizék ti2zér ti2zét ti2zév tizo2m 1tí tí2gé tí2ja tí2já tí2jú tí2la tí2l1ó2 2tínio 2t1í2no 2t1ínr 2t1íns 2t1í2ny tí2ra2n tí2rar tí2r1ál 2t1í2rás tí2r1e 2t1í2ró tí2rő tí2rü títés3s títőa2 títőe2 tí2v1ec 2t1í2vei tí2vel tí2ver 2t1í2véi tívi2 tí2vik tí2vir tí2viv tí2v1ó2 tí2vö tí2vő tív1s tí2za tí2zá tí2zel tíz1ele tí2z1emb tízi2 tí2zik tí2z1is tí2zí 2tízl tí2z1o tí2zö tí2zsá tí2zu tí2zül tíz1ülé 2t1í2zű tje2gy1á2 tjó2t1 tka1pr tka2ró2r tkende2 tké2p1e2kéh tkia2l tkiá2 tkie2 tkié2 tk2la tk2li tk2lí tk2ló tk2lu tkö2z1él tkőé2h tk2ra tk2rá t1k2reác t1k2ré t1k2ri tk2rí t1k2ro t1k2ró tk2ru tk2va tk2vi tk2vó tla2c3 tla2g1a2d tla2g1ar tla2gas tla2gál tla2g1e tlag3g tla2g1ó tla2n1e2 tlanká2 tla2nó tla2pár tleí2 tlen3n tle2t1a2n tle2tas tle2tele tle2t1elv tle2t1ér. tle2tos tle2tő tleü2 tlé2kal tlé2kem tlé3pe tlés3s tlé1trá tló1dr tma2gál tma1k tmá2nyir tme2g1e2 tme2g1é tme3gif tmu2sí tmus3s tmu2sz tna2gya tná2d1 tne2k1el tne2küld tne2m1e2r tne2r1a tne2r1á tne2sz1a tne2szi tne2sz1ó2 tnév1a tnómen1 tnómenk2 tnö2k1öl tnőé2n 1to 2t1obj 2t1obl 2t1obs to1cki to2daa to2das to2dí 2t1o2dú 2t1odv 2t1off togás1s to1g2ráf. to1g2ráff to2il to2k1aka to2k1a2n to2k1ap tok1ari to2k1ál tok1á2rok to2k1átl to2k1átm to2k1átr to2k1áts to2k1átt to2k1átv to2ker to2k1é2l to2kép to2kid to2k1im to2k1in to2k1ip to2k1iv to2kí t1o2kozá to2k1ö to2kő to1k2ro tok1s toksz2 to2k1ur to2kúr to2kü to2kű to2l1a2d 2t1o2laj to2l1akt tola2n to2l1any to2l1a2r tol1atom tol1ábr 2toldalo 2toldalt 2t1o2lim tol1k2 tol2l1árb tol2l1á2ré tol2l1árh tol2l1árr tol2leg tol2l1in tol2l1í2 to2l1o2r 2t1oltás to2l1ut 2tolvas to2m1ag to2m1ak to2m1a2l to2m1a2n to2m1ap to2m1ál to2m1á2r tom1b 2tombe to2m1el to2men tom1erő to2m1es to2mí to2m1osz to2m1ó2 to2mö tom1p2 tom1s 2tomtö 2tomú to2mü to2mű to2nalm tona1t2 tonau2 ton1áll ton1álm to2n1á2z to2n1el to2n1en to2ner ton1gr to2nil ton1k2 to2nol to2n1or to2n1osz to2nóc to2nór to2nö to2nő ton1s2 tont2 ton1tr to2n1út to2nü to2nű to2nyal to2nye to2p1at 2topc 2to2pe to2pik to2piz 2topp. 2toppo 2toppr top1t2 to2pü to2r1a2d to2r1ag to2r1aj to2r1aka to2r1akn to2r1ako to2r1a2l tora2n to2r1any to2r1a2p to2r1ar tor1ass to2rat to2r1au to2r1av tor1ács to2r1áll to2r1álm tor1áté to2r1átl to2r1á2z 2t1orcá tord2 tor1dr tore2 to2rec to2rek to2r1el to2ren to2r1er tor1f2 tor1g2 2t1organ 2torie to2r1ill to2r1int to2r1isk tor1k2 2tornó to2rop to2rosz tor1oszt to2r1ov toró2 to2rón to2r1ór to2rö to2rő 2t1orr. 2t1orráv 2t1orri tors2 tor1sc tor1sk 2t1orsó tor1sp tor1st tort2 tor1tr to2rü 3torvá 2torvos 2torvv to1ry to2s1as to2s1e to2sik to2s1in to2sis tos3sze t1osto 2t1osty to2sü to2szal to2szan to2sz1e tosz1k 2t1oszlop. tosz1tr 3t2ot. 2t1otthon to2ut tova1 2t1o2ve 2t1o2vi 2t1o2vu 2t1oxid 2t1o2xig to1yo toza2t1al 1tó tóá2gy tóá2r tóát1 tóáta2 tó1bl tó1bra tó1bró tó1cl tócsa2p1á2g tó2daj tó2d1a2n tó2d1esé tó1dro tó2dúr tó1fl tó1gl tó1g2r tói2g tóí2v tóká2rok tó1k2l tó1kre tó1kré tó1kro tónus3s tóo2k tóó2r tóp1ass tó2p1e2l tóp1int tó1pro tó2ras tó2ráb tó2ráh 2t1ó2rái tó2rár 2t1ó2rás tó2rát t1ó2ráv tó2sep tós1éták tós1é2tát tó2sír tó1s2kan tó1skál tó2s1ol tó1s2porto tó1s2portt tó1s2rác tó2s1ü2l tó2s3zene tó1sz2f tó1szk tó2taj tó2tág tó2tom tó1t2rá tó1t2re tó1tro 2tóvod 2t1ó2vó 1tö töb2bev töb2b1o 2t1öbl 2tödéé tö2dém tö2dí 2tödné tö2do 2tödöt 2tödü tö2ka tö2ká tö2k1e2v tö2k1ér. tö2k1érd tö2kid tö2kí 2tö2ko 2t1ö2kör tökös3s tö2k1ő 2tökrös tö2ku 2t1ölb 2t1ölci töl2gya töl2t1á2 t1öltön 2t1öltöz töm2b1a tömbe2 töm2bel töm2b1o t1ömle 2t1ömlé t1ömli tö2möl tö2na tö2ná tön1d2 tö2nen tö2n1í tön2kár tönkész1 tö2no tö2n1ő tön1s tö2nu tö2nú 2t1ö2reg törés3s 2töröks tör2t1a2 tör2teg tör2t1e2lem tör2ter tör2térn tör2t1és tör2t1o2 tör2t1öl tör2tös tör2zsa tör2zs1ö2l 2t1ösv 2t1ösz 2t1ötl töt2t1á 2t1ötv 2t1öv. 2t1övb 2t1övh 2t1ö2vie 2tövig 2t1övj 2t1övk 2t1övn 2t1övr 2t1övv 2t1ö2zön tözőe2 1tő tőa2c tőa2l tőá2g tő1bl tő1br tőe2ké tőe2r tőé2l tő1fl tő1gr tőí2t tőí2v tő1kl tő1kv tő1pl tő1pr tő1ps tő2rag t1őral 2t1ő2r1an tőr1egy 2t1őrez 2t1ő2rék 2tőréü tő2rin tő2r1is 2t1ő2rí 2t1őrjá 2t1őrjel 2tőrjö 2tőrka 2tőrl 2tőr1öl 2tőrp 2t1őrti 2tőrtr 2t1őrz tő2s1a2l 2t1ősny tő1spe tő1s2pi tő1spr tő1srá tő1sta tő1s2tá tő1sté tő1str 2tősű tő2sű. tősz2 tő1szt tő1tr tőü2l tőzá2 tőzár1 tpen3n tp2fe tp2la tp2lá tp2lé tp2lu tp2ra tp2re tp2ré tp2ri tp2ro tp2ró tp2ru tp2sz tpu2tin t2rafó 1t2ragé 1tragi tra1k2l tra1kro tran2d1a2 tran2dá trans1s tran2sz1ai tran2sz1o2m tra1s2p trat2 t2rati tra1tr 1trágya 1trágyáb 1trágyáé 1trágyáh 1trágyái 1trágyáj 1trágyák 1trágyán 1trágyár 1trágyás 1trágyát 1trágyáv t2rájk trán2sz trá2nyal trá2t1ér tre2csa tre2cso t2rego tren2da tren2d1ő2 1trení tréé2 1t2réni tré1p2 tré2sz1á2 tri1g2 trii2 t2rikó t2rill 1t2rió. t2riój t2riók trol2l1in tro2mad tro2maj trona2 tro2n1ag tro2nal tro2nan tro2nes tron3n tron1tr tr2os tro1sz2f tro1sz2ta t2r1o2x tró2de tró2nas tró2n1e 1trónj 1t2róno t2rónt tró1sz tró2zsi t3röm 1t2rös 1t2rub tru2mad 1t2rup tsa2vo ts2ch 1tsche tsé2g1éj ts2ká ts2ko ts2la ts2lá ts2le ts2li ts2má ts2mi ts2ni tsói2 ts2pa ts2pe ts2pi ts2po ts2pó tsp2r ts2rá t1s2ta t1s2tá ts2te ts2té ts2ti ts2tí ts2to tst2r ts2tu ts2tú 1t2sub tsza2ké tsza2k1ü tsza2t1e2 tsza2tö tszé2t t1sz2f t1sz2k t1sz2l tszö2g1e2le t1sz2p t1sz2t2 ttad2 tta2dó. ttag1g tta2g1o2ku tta2n1ér t2t1ará t2t1aszt tta1t2r ttaü2 t2t1a2z ttán2s1á2g ttá2v1i2 tte2leme t2t1e2lőa tte2r1in t2t1erő tte2s1a2 tt1ég. t2t1é2le tté2rak ttér1em tté2r1es tté2r1é2ne tté2rid ttér1in tt1éss tt1é2vér t2t1i2o t2t1iro t2t1isk t2tizz ttír1a tt1írá tt1kr ttornác1 t2t1ors ttó1dr ttó1p2 t2t1ó2rá ttó1s2r ttö2l tt1ölő tt1pr t1t2raf t1t2rag t1t2ran ttransz1 ttranszk2 t1t2rav t1t2róf tt2rón ttsé2gel tt2si t2t1ug t2t1üd t2t1üt t2t1ü2v ttwe2 t2ty tty1or tty1ö2l ttyü2 tty1ül ttyülés1 1tu tuá2r tubus1s tu1ck tuda2te tuda2t1ö 2tudí tu2ga tu2go 2t1ugr tu2hu tu2in 2t1ujj 2tuká tulo2 2t1ulti 2t1ultr tu2lü tu2mab tu2m1a2d tu2maj tu2mal tu2man tu2mar tu2maz tu2mál tu2meg tu2m1el tu2mer tu2mes tu2m1i2k tu2mim tu2m1inf tu2m1int tu2m1ir tu2mis tu2miz tu2mí tu2mol tu2mö tu2mő tum1p2 tu2mü tu2nal 2t1unc 2tunió tu2nit 2t1u2no 2t1u2nó 2t1unt tu1p2r tu2rac 2turai 2t1u2rak tu2ralo tu2ram 2t1u2ras tu2ráh 2turán tu2rár tur2g1a tu2run tus1abl tu2sar tu2ság tu2se tu2s1érté tu2sis tu2s1í tu2sor tu2s1ó2 tu2s1ö tu2ső tuss2 tus3sze tus3szi tus3szo tu2sü tu2szab tu2sz1a2d tu2szag tu2szal tu2szap tu2szar tus3zav tu2szál tusz1em tu2sz1é2l tu2sz1é2p tuszi2 tu2sz1il tu2szin tu2sz1ip tu2szir tu2szis tu2sz1it tu2szí tusz1k2 tu2szol tu2s3zó tu2szö tu2sző tusz3sa tus3zse tuszt2 tusz1tr tu2szü 2t1u2tad 2t1u2tak 2t1u2tal 2t1u2tam 2t1u2tas 2t1u2taz 2tutá tu2tán 2t1utc 2t1u2to tu2tód tu2tóp tu2tót tu2tun tu2um 2t1uzso 1tú tú2ja tú2jí tú2jo tú2ju tú2l1a2 tú2l1á2 tú2l1e2 tú2l1é2 tú2list tú2lí tú2lok tú2lop tú2l1ó2 tú2lö tú2l1ő túl1s túlt2 tú2lú tú2lü tú2lű túra1sz tú2rál tú2r1e2 tú2r1ér tú2r1és tú2r1ol tú2rot tú2rö tú2rü tú2sze tú2szö tú2szü tú2tá 2t1útb tú2t1e2 2t1ú2té 2t1úth 2t1ú2ti 2t1útj 2t1útl 2t1útn 2t1ú2to 2t1útr 2t1útt 2t1útv 1tü 2t1ü2dí 2t1ü2dü 2t1üdv tü2ge tü2gy tü2l1a tü2lá 2t1ü2led tü2l1e2m tü2len tü2lep tü2l1e2s tü2l1e2v tü2l1ér tü2lir tü2lí tü2l1o2 tü2l1ökl tü2löm tü2l1ön tü2l1öz tü2lők tü2lőr tü2lu tü2lú tü2ma tü2mék tü2m1ő tüne2tel 2t1ünn 2türeg 2türes 2t1ü2rí 2t1ü2rü 2tüst 2t1ü2te 2t1ü2té tü2ti 2t1ütk tü2tö 2t1ü2tő tü2vö 2t1ü2zen 2t1üzl 1tű tűcsa2p1 tű2d1al tű2dá tűe2két tűé2h tűfélé2 tű1gr tű1kv tűleü2 tű1pl tű1pr tűrés1s tű1sp tű2z1a2 tűzá2r tű2z1ára tű2zát tű2zene tű2zis tű2zí tű2zo tű2z1ös tűz3seb tű2zú tva2n1e tva2név tva2raj tvá2nyad tvá2nyí tvá2z1al tvá2zip tve2n1e2v tven3n tven3t tvenü2 tve2nül tve2n3y tve2raj tve2ral tve2r1á2 tve2reg tve2r1é2sz tve2rint tve2rip tve2r1o tvers2 tver1st tve3se tvé2nyel tvér1int tvé2r1o tviselőé2 tvis3szá t2víve t2y 1tya tyai2ko tya1kl tya1p2 tya1sz2 tyat2 tya1tr tyau2 1tyá 2ty1ág ty1áld ty1áll tyá2ran tyár1s tyás3s 1tye ty1e2gy ty1ela ty1ell ty1emb ty1e2rő 2ty1ex 1tyé 2ty1éte 1tyi 1tyí ty1í2r ty1ív tynk2 1tyo tyo2lan tyo2r1os 1tyó 1työ 1tyő ty1ős ty2pe ty1pr ty2sa ty1sp 1tyu 2ty1ug ty1u2tá 1tyú tyú2kü 1tyü 1tyű 1t2zekn 1tzekrő 1t2zen. t2zenj 1t2zer 1t2zes tz1ő2r tz3sc 2u. u1a ua2ch ua2da ua2dá u2ador. u2adorb u2adoré u2adorn u2adoro u2adorr u2adort ua2dó ua2es ua2gá ua2ja ua2já ua2la ua2lá ua2ny ua2sz ua2ty ua2ut ua1yá ua1yé ua1yi ua1yo ua2zo u1á uá2ga uá2gy uá2po uá2r1á uá2r1e uá2réj uá2r1is uá2sz uá2t1a2 uá2t1e ub1a2la ub1alk u2b1ang ub1arc ub1a2ri ub1ár. ub1á2ro ub1dr u2b1e2b u2b1ed ube2lá ube2lel ub1elö ub1e2se ub1est u2b1éj ub1éle u2b1é2n u2b1ép u2b1érd u2b1é2re u2b1érm u2b1érte u2b1éve ubi2g u2b1iga u2b1ige ubi2ke u2b1ina. ub1ism ub1kr ub1olda u2bork u2b1orv u2b1osz ub1óri ub1öl ub1ös ub1öv ub1pl ub1pr ub1sl ub1sp u2b1ud ubu2sz u2b1új ub1üd ub1üg ub1ü2l ub1üz uca2t1á2 uc2c1e uc2c3h uc2c1ina uc2cip uc2cö ucc3sz uc2cú uc2cü uc2cz uc1emb uc3há u2c3hé u2c3ho uciá2r uci1p u1c2kig u1c2kon u1c2kot uc2ky uc1ö2l uc1pr ucsa2p1á2 uc3ság u2cs1ál u2csáru u2cs1e2l u2cs1id ucs1s u2c3sü uc3sz u2c1ug uc1üg uc3zá uc3ze uda2tal uda2tál uda2t1á2ram uda2t1eg uda2ter udáskész1 udás3s udi2o u2d1isk udo1kr udó2se udó2sor u1d2rá u1d2ro u1e ue2bé ue2dz ue2gé uegész1 ue2gy uel1ér ue2lő ue2me ue2rő uervíz1 u2es. u2esb ue2s1e u2esh u2esi u2esk u2esn ue2ső u2esr u2est u2esu ue2s3zen ue2te ue2ve u1é ué2ge ué2gé ué2ké ué2le ué2pí ué2pü ué2te ufé2nye u1f2le uf2ri uf2ru uf2tü ug1agy ug1alj uga1p ug1apa 1u2garo uga2t1el uga2tés uga2tol uga2t1ó2r ug1ág ugára2 ugár1ad ugá2rá ugá2ros ugá2ru ugár1ú ugás3s ug1á2sz ug1el ug1e2v ug1é2l ugg2l ugi2e ug1ing ug1int ug1iro ugi2t ug1ita ug1ivá ug1ír ug1kl ugo2r1á2 ugó1sv ugó2s3zá ug1ös ug1pr ug1sk 2ugui u2g1ut u2g1új ug1üg ug1üz ug1űr ugya2n uh1a2dó uh1alk uha2r1as uha1t2r uh1att u2h1á2g uh1áll u2h1ár. u2h1árb u2h1árf u2h1árh u2h1árn u2h1árr u2h1árv uhá2szak uh1em uh1ex uh1ind uh1ing uh1orz uh1őr uh1pr uh1tr u2hu. u2huj uh1ujj uh1üz u1i ui2de ui2dő ui2eu ui2ga ui2gé u2i1gn ui2pa ui2rá ui2zé u1í uí2ja uí2ju uí2ve uí2vű u2j1an 1ujja. 1ujjad 1ujjai 1ujjak 1ujjam 1ujjas 1ujjat uj2j1á2ru 1ujjb 1ujjc 1ujjd 1uj2j1e2 1ujjé 1ujjf 1ujjg 1ujjh 1ujji uj2jí 1ujjk 1ujjl 1ujjm 1ujjn 1ujjp 1ujjr 1ujjs 1ujjt 1ujju 1ujjú uj2jü 1ujjv u2j1op uk1abl uka2c3se u2k1a2lap uka1pl uka2rán u2k1arc uka2szás uka1t2r uk1áll uká2sar u2k1ásó ukás3s u2k1átm uk1bl uke2l uk1e2m uk1ex u2k1ég u2k1érz u2k1i2p uk2k1alt uk2k1eg uk2k1em uk2k1ola uk2köl uklás1s ukló2s3zá u2k1old ukora2 uko2ras uko2r1á2 uko2ril uko2rin uko2r1o ukós2 uk1öb uk1pr u1k2rón uk1ü2t uk1űr ula2cs1ö2 ula1g2 ula2jas ul1aleg u2l1alj ula1s2p ulata2l ula2t1ala ula2t1a2n ula2tál ula2tem ula2tik ula2tol u2l1ábr ulá2k1e ulá2k1ü u2l1á2ria ulá2s1i2k uláskész1 ulás3s ulá2sza ulá2sze ul1bl ulcs1e2l ulcs1es ul2cs1ér. ul2csérv ul2cs1é2vé ul2csiga ul2csip ul2cs1í2 ul2csor ul2cs1ö2 ul2cs1ő ul2csut ul2csü ulcs3z ule2i uleí2 ule2l ul1elő ulet2ta u2l1ex ulé2kal ulé2k1e2 ulé2k1ol ulé2kut ul1épü u2l1érté uli2nar uli2nin ul1í2r ul1k2r ul2lef ul2l1e2l ul2l1em ul2l1en ul2l1ér ulot2 uló1f2 ulói2kon ulókész1 ulóó2 ulót2 uló2zan uló2z1á2ra uló2z3s ul1öt ul1pr ul1st ul2t1aj ulta2r ult1asz ul2taz ul2tül ul1úr ul1üt ul1űr u2lyi u2m1abl um1abr um1a2cé um1ach um1a2dat u2m1adm um1a2do um1a2dó 2umaé um1ajá u2m1a2ka umakész1 u2m1akk u2m1akt u2m1a2la um1alg um1all um1alt u2m1ana u2m1ank u2m1a2no u2m1a2ny 2umao 2uma1p2 u2m1a2rá um1arc um1arg u2m1a2ri um1a2ro um1asp u2m1atl u2m1au um1a2zo u2m1ág u2m1áll um1álm u2m1á2rak um1á2ram u2m1áras u2m1á2rá u2m1árf u2m1árk u2m1árn u2m1á2ro u2m1árr u2m1árt u2m1á2ru u2m1árv umát1a u2m1á2t1e u2m1átm u2m1átu um1bl um1b2r um1dr u2m1e2d u2m1ef ume2g um1egy um1ela um1elb u2m1e2le um1elé um1elh um1elí um1elj um1elm u2m1eln um1elo um1e2lő u2m1elt um1elv u2m1e2m ume2n1á ume2n1ó2 um1e2re um1erk um1e2rő um1e2se um1ess um1e2sz u2m1e2t u2m1e2v u2m1ex um1ezr u2m1ég u2méhs um1é2le um1élv u2m1ép u2m1ér. u2m1érc u2m1érm u2m1érte u2m1érté u2m1érv u2m1é2te um1fl um1f2r um1gl um1gr umia2 um1i2dő umig2 umi1gr um1imp umi2na. u2m1ind u2m1ing u2m1inv um1i2onb um1i2oné um1i2onh u2m1i2onj um1i2onk u2m1i2onn u2m1i2ono um1i2onr um1i2ont u2m1irt um1isk umi1sl um1ism umi1sp umi2szü umit2 umi1tr um1izé um1ív um1íz umkész1e um1kl um1kr um1kv umna2 u2m1o2koz um1ola um1old um1oll um1olt um1olv u2m1o2p umo2ran um1o2rat umo2rál umo2rin um1osto u2m1osz u2m1ox um1ó2rá um1ö2l um1öm um1ön um1ö2r um1ös um1öt um1öv um1ö2z um1ő2r um1ős umpe2l ump1ele um2p1ing um1p2r um1sk um1sp um1st um1sz um1t2r u2m1ud u2m1ug u2muni umu2r um1ura u2m1u2t um1üg um1ü2l um1ür um1üs um1üt um1üv um1üz umva2s una1b un1adu un1akt u2n1arc u2n1á2g un2cs1e un2csiv un2dz un1e2r un1e2t un1ég un2g1a2g un2g1eg un2g1er ung3g un2g1ol u2n1i2d 1u2nif 1u2niku u2n1il u2n1ingo 1u2nió 1u2niv unka1p2 unka1s un2k1eg u2nod u2n1orr un1ors u2not un1pr un1s2t2 unta2i u2nun un1útj un1ü2l u1o uo2la uo2li uo2r1a2 uore2 uo2r1et uo2r1i2o uo2xi u1ó u2óbu u2óne uó1p2r u2óré uó2ri u2óso u2ósz u2óve u1ö uö2ko uö2kö uö2rö uö2zö u1ő uő2re uő2ré uő2ri uő2rö uő2rü upa1b2 up1ada upa1pr upas2 upa1sp upa1t2r upda2 upe2r1a upe2rel upe2r1in uper1s up1e2s upé1p2 up2hi upli2n up1üz 1u2raim 1u2rak. 1u2rakh 1u2rakk 1u2rakn 1u2rakr u2ralh 1uralk 1u2ralm 1u2ram. ura2m1is 1u2rasa ura1s2p ur1áll urát1a ur2dar ur2d1e u2r1ef ur2fí ur2f1ú 1urná ur2ne urn2é uro1b2 uroka2 uro2kan uro2k1á uro2ke uro2ne uro1p uro1t2 ur1öl urpi2 ur2t1ag ur2t1e2t ur2t1e2v urti2t urt1ita ur2t1okta uru2c1e 2urul uru1p2 uru2szál u2rú. us1abla us1a2da us1a2dá u2s1a2dó u2s1a2g u2s1a2j usa2kar u2s1akc u2s1a2la us1alg us1alj us1alk u2s1alt us1alv u2s1ana us1ane us1ant us1apá u2s1a2ra u2s1a2rá u2s1arc us1arz u2s1ass u2s1att us1a2ty u2s1au u2s1a2z u2s1ábr u2s1á2gá us1ágb u2s1ágg us1ágh u2s1ágr us1áld us1áll u2s1á2p u2s1árad u2s1á2rai u2s1á2rak u2s1á2rá u2s1árb u2s1árh u2s1á2ri u2s1árk u2s1árn u2s1á2ro u2s1árr u2s1árt u2s1á2ru us1áta us1áth us1áti us1átk us1átt us1átu us1átv us1bl us1br us1dr us1e2c us1e2d u2s1ef us1e2gy u2s1e2l u2s1e2m u2s1e2n us1erd u2s1e2s use1t u2s1e2v u2s1ex us1ez u2s1ég u2s1éhe u2s1é2k u2s1é2l u2s1é2ne u2s1ép u2s1érd u2s1érte u2s1érv u2s1és u2s1é2te us1étk us1étt u2s1éve us1fr us1gr u2s1i2d usi2g us1iga u2s1i2ko u2s1ill u2s1i2ma u2s1i2má us1imi u2simm us1imp u2s1inc us1ind us1inf u2s1ing u2s1ink u2s1int us1inv u2s1i2p u2s1i2rat u2s1i2rá us1iro us1irt u2s1isk u2s1ism us1ita us1izé us1íg u2s1íj usí2r us1írá us1író u2s1í2v u1s2kál us1kl uskói2k us1k2r us1kv u2sodú u2s1of us1okl us1okm us1okta us1ola u2s1old us1oli u2s1oml us1ond u2s1op u2s1org u2sori u2s1orr u2s1ors us1osz u2s1ott us1óc us1ó2s u2s1ö2l u2s1ön us1örd us1ö2rö u2s1ös u2s1öt us1ö2v u2s1ö2z us1ő2r u1s2pec us1pl us1pn us1pr us1ps 2uss. us2se. us1ská us1spe us1spi us1sta us1sy us3szab us3szag us3szak us3szál us3szám us3szen us3szé us3szig us3szí us3szó us3szö us3sző usszü2 ussz1ül us3szű ust1á2rár us2teg us2t1il us1trad us1tre us1tré us1tro u1stru us2t1ül u2s1uj usu2s us1usz u2s1u2t u2s1új us1úté us1üd u2s1üg usü2l us1ülé u2s1ün u2s1ür us1üz usz1abl u2szaj usz1a2la usz1alk usz1alv u2sz1a2n usz1app usza2r usz1ará usz1aré usz1aro usz1asz u2sz1au u2sz1á2g usz1állá usz1á2p u2sz1á2rad u2s3zárako u2sz1á2ram usz1árje usz1ásv u2száth usz1átö u2sz1e2c u2szef usz1e2ge usz1e2gy usze2k usz1eke u2sz1e2l usz1emb usz1eml us3zene usz1eng u2sz1erd usz1e2ré usze2s u2sz1e2v u2sz1ex u2széne usz1éte usz1éto usz1imp usz1ind usz1inj usz1isk usz1ism u2sz1isz uszí2j1a2d u2sz1ír 1u2szodá u2szola u2sz1old u2szony u2szop u2szosz u2sz1ö2b usz1öl usz1ön u2sz1ös usz1p2 uszte2r1a usz1t2ran u2sz1u2s u2szut usz1útr uszü2 usz1üg u2sz1ül u2sz1üz usz1z ut1abl uta2csel ut1a2dó 2utakép 1u2taló 1u2talv utame2 uta2mel uta2mer uta1p ut1ará 1utasc uta2se 1utasf 1u2tasl 1utasv utaü2 2utav 1utazi 2utáb 2utáé 2utáib 2utáin 2utáju 2utákb 2utákt 2utám 2utáná után1n 1utánz 2utáró utá2rú ut1bl 1utca 1utcá u2t1e2g ute2r1a ute2rá ute2reg ute2rim ute2ru utén3n ut1fr uti2k1á2r uti2ke ut1ill uti2m uti2n1e2 uti2nér utini2 uti2nig uti2n1ik uti2n1ó utin1s u2t1i2pa u2t1isk ut1kl ut1okke u2t1old uto2l1é u2tols 2utomata uto2rim 2utos 2utot utó2dal u2tódá utó2del utó1p2 utó2s1aj utós3s utó1s2to utó1sz utó1tr utótűz1 ut1pr ut2rak ut2ran ut2rák ut1sp ut1st ut1t2r ut1üg ut1ü2z utya1s2 u1u uu2m1ag uu2mal uu2m1as uu2mál uu2m1e2 uu2m1é2r uu2mim uu2min uu2mö uum1p2 uu2mü uu2ta uu2tá uu2zs u1ú u1ü uü2gy uü2rí uü2té uü2ve uü2ze u1ű uva2r1a uva2r1á2 uva2r1e uva2rin uva2szál uvata2 uva2t1ag uvi1g2 uv2re uxi2t1a uxi2t1á uxi2t1e uzala2 uza2lac uza2lad uza2lan uza2lág uza2l1át uza2lel uza2l1ék uza1p2 uza1s2 2uzál. 2uzálb 2uzáll 2uzálr u2z1id uz1i2gye uz1ír uzki2 uzói2 uz3sap uz3sz uz1t2r uz1ü2g uzü2l 2ú. ú1a úa2da úa2dá úa2dó úa2gy úa2já úa2kar úa2kas úa2la úa2lá úa2ny úa2sz úa2ud úa2va ú1á úá2ga úá2gá úá2gi úá2go úá2gy úá2hí úá2lo úá2po úá2ra úá2ri úá2ru 2úbab 2úband 2úbar úb2lo 2úbód úb2ri úb2ro ú2c1aj ú2c1a2l ú2c1a2n ú2c1a2v úc1e2t úc3he úc3ho ú2c1i2d úci2ókép úc1pr 2úcsa ú2csab ú2csad ú2cs1ag ú2cs1aj ú2csakt úcs1ala ú2cs1a2n úcsa2p1á2 ú2cs1a2s ú2cs1au ú2csaz úcs1á2g ú2cs1ál ú2cs1árá ú2cs1árf ú2cs1ári ú2cs1árv ú2csátv 2úcse ú2cs1eb ú2cs1e2g úc3sej ú2cs1e2l úcs1emb ú2cs1en úcs1erő ú2cs1e2s ú2cs1él ú2cs1ér. ú2csérd ú2cs1érte ú2cs1érté ú2cs1é2v ú2cs1id ú2csigaz ú2cs1il ú2csim ú2cs1inf ú2cs1int úcs1i2pa ú2csirá ú2cs1is ú2cs1iz 2úcso ú2csokta ú2csosz 2úcsó ú2cs1ó2r úcs1öl úcs1ös úcs1p úcs1s úcs1t úcsús1s úcs1ü2t úcs3za ú2d1a2c úda2d úd1ada ú2d1a2k ú2d1a2n úd1ág úd1ál úd1á2r ú2d1e2g ú2d1ej úde2l úd1ele úd1elh úd1elő ú2d1e2m úde2ra úde2r1ec úd1erő úd1e2v ú2d1ék ú2d1ér. ú2d1érc údé2t úd1éte ú2d1i2d údi2g ú2d1igé úd1ing údi2ódar údi2óz ú2d1os úd1pr úd2rá úd2ro úd1üv údy1éh údy1ét údy1i údy2s úd3zá ú1e úe2bé úe2gé úegész1 úe2gy úe2la úe2le úe2lo úe2lö úe2lő úe2me úe2pi úe2re úe2ré úe2rő úe2rű úe2sz úe2ta úe2te úe2ve úe2vő ú1é úé2he úé2le úé2lő 2úé2ne úé2pí 2úér. úé2r1á úé2re úé2ri 2úérz úé2te úé2ve úfélé2 úfé2l1év úf2lö úf2rá úf2ri úf2rí úf2ro úg1a2d úgás1s úg1el úg1i2v úg1old úgós2 úg2rá úgy1ag úgy1el úgy1ér. úgyi2 úgy1is úgy1iv ú2gy1u2 úgy1út ú1i 2úi2de úi2dő úi2ga úi2gé 2úi2ke 2úikre 2úill 2úi2má úi2mi 2úing 2úint úi2pa úi2rat úi2rá 2úisk 2úism 2úist úi2ta 2úi2vad úi2vás ú1í úí2rá úí2ve úí2vi úí2vü 2újáté új1es új1ez új1éve új1évé új1k2r 1ú2jon új1or új1pl újra1 1újsá új1ud ú2jul 2úkab ú2k1a2g ú2k1a2j úk1a2lak 2úkalan ú2k1alk ú2k1any 2úkap ú2k1a2pó 2úkar 2úkate ú2k1atk ú2k1ál ú2káru úke2l úk1ele úk1ell ú2k1em úke2s úke2t úk1ete úk1e2vé 2úkérd 2úkéré 2úkés ú2k1éss ú2k1észr ú2k1é2te 2úkéz úkia2 ú2k1i2d 2úkin ú2k1is ú2k1i2t ú1k2li úk2lu 2úkol ú2k1olt 2úkom 2úkonf 2úkong 2úkorá 2úkoro 2úkos úk1ó2l úkö2l úk1ölő úk1pr ú1k2re úk1t2r ú2k1ud ú2k1úr úkü2l úk1ülő úk1ült ú2k1ür ú2k1ü2t ú2k1üz úl1a2d úl1a2ja úl1a2l úl1a2m úla2n ú2l1any úl1a2ro ú2l1á2g ú2l1ál úl1árn ú2l1á2sz úl1átv úl1br úl1d2r úl1e2d úle2l úl1ele úl1ell ú2l1emb úl1en ú2l1e2re úl1e2s ú2l1e2vő úl1ex ú3lé. úl1é2d úlé2g ú3l2é3va úl1fr úl1gl ú2l1i2d ú2l1igé ú2l1ij ú2l1il ú2limá ú2l1ind ú2l1inf ú2l1ing ú2l1inj ú2l1int ú2l1inv ú2l1i2p ú2l1irá ú2l1isk ú2l1i2sz ú2l1i2ta ú2l1itt ú2livás ú2livo ú2lizgato ú2l1izz úl1íg úl1í2v úl1k2l úl1kv úlo2k úl1oko ú2l1ol úl1ope ú2l1or ú2l1os ú2l1ox úl1öb úl1öl úl1ö2m úl1ö2n úl1ör ú2l1ös úlövés1s úl1őrü úl1p2l úl1p2r úl1p2s úl1sk úl1sm úl1sp úl1s2t úlsz2 úlsztá2 últ1agg últ1agy úl2t1aj úl2t1al úl2t1árn úl2tél úl2térte úl2t1és últ1éves últi2 úl2tid úl2t1im úl2t1in úl2t1ip úl2tis úl2tí últ1old úl2tös úl2t1ő2r úl1trá ú2l1ud ú2l1u2g ú2l1ur ú2l1u2t ú2l1úr úl1ús úl1üg úl1ül úl1ün úl1ür úl1üt úl1üv úl1üz úl1űz ú2ly1a2d ú2ly1a2l ú2ly1an ú2ly1a2r ú2ly1au ú2lyál ú2ly1átl ú2ly1e2 ú2lyél ú2lyés ú2lyol ú2ly1ö ú2lyő úly1s ú2lyug 2úmac 2úmad 2úmag 2úmaj 2úmar 2úmatr úmi2al 2úmoz 2únac 2únap únau2 ú2ny1a2n ú2ny1i2r úny1tr ú1o úo2ko úo2ve ú1ó úó2ra úó2rá úó2sá úó2vo ú1ö úö2le úö2lé úö2lő úö2rö úö2ve ú1ő úő2rö úp1eg úpe2l úp1es ú2p1in úp2la úp2lé ú2p1or úp1p2l úp2rí úp2ro úraát1 2úrab 2úraj úr1akk úr1alu ú2r1ant úr1a2nya úra1p2 úra1szp ú2rattas úrau2r ú2r1ábr úr1áll ú2r1á2ri úrás1s ú2r1átm úr1br úr1d2r úr1e2c úr1e2l úr1ez ú2rék úr1ékk ú2r1é2l úr1é2ne 2úrés úrfé2l1é2v úri2al ú2r1i2d ú2rie úr1ifj úri2g ú2r1iga úri3gényé úr1i2m ú2r1inf úr1ing ú2r1int ú2ris úr1ist úr1k2r 1úrnőr úr1ott úró1p2 úró1sp úr1ö2c úr1ö2l úr1ön úr1öt úr1ős úr1pr úr1s2k úr1sn úr1s2r úr1s2t úr1szn úr1u2t úr1ü2l úr1ü2v 2úsabl ús1abr ú2s1a2d ú2s1a2j ús1a2la úsa2n ús1any ús1apr úsa2r ús1ará ú2s1arc 2úsarj úsá2gol ús1áld ú2s1á2p ú2s1á2rai ú2s1á2rak ú2s1árb ú2s1áre ú2s1á2ro ú2s1á2ru ú2s1á2rú ú2s1árv 2úsát ús1átl ú2s1á2z ús1dr ús1e2c ús1e2l ús1e2v ús1ex ú2s1é2g ú2s1é2l ús1é2ne ú2s1é2ré ús1érm ú2s1érté ú2s1é2tá ú2s1é2te ús1étr ús1fr úsi2g ús1iga ú2s1il ús1imp ú2s1in ú2s1i2p ú2s1i2r ú2s1is ús1í2z ús1kl ús1kv ú2s1ola ú2s1old ús1org ú2s1orr ús1osz ús1ó2h ús1ös ús1őr ús2pe ús1pr ús1s2p ús3szag ússza2k1 ús3szav ús3sze ús3szi ús3szí ús3szó ús3szö ús3szú ús3szü ús2tat ús1t2r ú2s1u2ga ú2s1u2t ús1üg ús1ün ús1ü2t ús1üz úsvé2t1e ú2sz1a2d ú2sz1akc ú2sz1á2g úszás1s 2úsze úsz1ej úsz1e2s úsz1e2v 2úszé ú2sz1év ú2szigá 2úszí úsz1k2 úsz1old úsz1osz ú2szóe 2úszö úsz1ös úsz1p ús3zse ú2s3zú 2úszü úsz1ü2g úsz2ve út1a2d út1a2i ú2t1a2j út1a2v ú2t1ál út1á2ro út1á2s ú2t1á2t1 útá2v1i2 út1bl út1ef ú2t1e2g út1elá út1ell út1elz ú2téh út1é2l ú2tén ú2t1ép út1érd ú2t1é2ri út1érz útfélé2 út1gr ú2tiakh ú2tiakn út1id útie2 ú2tié úti2g út1igé 1ú2tij 1ú2t1i2ko út1ill 1ú2tiná út1ind út1inf út1ing út1int út1i2pa 1ú2tir út1irá út1ism út1ist 1ú2t1i2z út1íg út1íj út1ív út1okm ú2t1ola út1old út1oml úto2n1 út1ont út1op 2útor úto2ran úto2r1as úto2rál úto2re út1ost út1osz út1ös útő2r út1pl út1pr ú1t2rag 2ú1t2ri útsá2gi út1st útu2m1é útu2r út1urá ú2t1út ú2t1üg 1útvo ú1u úu2no úu2ra ú1ú ú1ü úü2gy úü2lé úü2re úü2te úü2ve úü2vö úü2ze ú1ű úű2ző 2úvál úv2ár úvá2rad úvá2ral úvá2ris úvá2rosz úvá2r1ó2 úváru2 úzae2 úzaé2 úzak2 úza1p2 úz1arc úza1t2r ú2z1ál ú2záru úzás1s úz1i2d úzido2 úzót2 úzó1tr úz1p2r ú2zs1a2l ú2zsál 2úzse úzs1e2c 2úzsi úz3sz úz1t2r 2ü. ü1a üa2já üa2la ü1á üá2ga üá2go üá2gu üá2ra üá2sz üb2lo ücsö2k1 ü2des 1ü2dít üd1íz ü2d1ör üdös3s üdőé2 1ü2dül üd2v1a2 üd2v1el üd2v1e2s üd2vél üd2vid üd2v1í üd2vo 1üdvö üd2völ üd2vő üd2vu üd2vú ü1e üe2bé üe2ge üe2gé üe2le üe2l1é2 üe2me ü1é üé2ke üé2pí üf2f1ö2 üfö3le üf2ro üge1k2 üge3l üg2ra ü2gy1a2 ü2gy1á ü2gyef ügy1e2lemb ügy1e2lemm ügy1elf ü2gy1ell ügy1elm ügy1elo ügy1éjé ügy1ékb ügy1éré ügy1érr ü2gyés ü2gyil 1ü2gyin ügy1int ügy1ira ü3gyí 1ügynö ügy1os ü2gy1ő2 üh1af üh1at üh1ás ü2h1e2le üh1elf üh1ellen ü2h1e2lő üh1elv ü2h1éh ü2h1ér. ü2h1in ü2h1it üh1or üh1ős ü1i üi2gé üi2ko ü1í üí2rá ük1a2n üka2p ük2kal ük2ká ükke2 ükkel1 ük2ker ükko2 ük2kop ük1u2n ül1ab ül1a2d ül1ag ül1aj ül1a2k ü2l1a2l ül1a2r ül1at ül1au ül1á2c ül1á2g ül1ál ül1á2p ül1á2r ül1á2s ül1br ül1d2r ü2l1ecse ül1e2dz ü2l1e2g 2ülek ül1ell ü2l1e2lőte ül1eng ül1enn ü2l1e2r ül1e2ső ületa2 üle2tal üle2t1an üle2t1as üle2tav üle2t1á2 üle2t1eg üle2t1e2l üle2t1ék üle2t1ér. üle2t1érn üle2t1é2rő. üle2térü üle2t1é2ve. ületo2 üle2t1or üle2tos üle2t1ó2 üle2t1ö2 ület1t2 ül1ette. ül1etted üle2t1u üle2tüz ü2l1ex ü2l1é2g ülé2k1a2 ülé2k1á2 ülé2k1e2l ülé2kev ülé2kir ülé2k1o ülé2ku ü2l1él ül1é2pü ü2l1ér. ü2l1é2ré ül1éri ül1érj ül1érn ül1érs ü2l1é2rü ül1érv ü2l1érz ülé2sa ülé2so ülés3s ülé2s3zá ül1fr ü2l1i2d üli2g ü2l1iga ül1ill ü2l1im ü2l1int ül1ira ü2l1itt ü2l1iz ül1íg ül1í2r ül1í2v ül2l1a2n ül2l1in ül2l1ö2vü ül2l1u2 ül3lyu ülnö2k1öl ül1o2d ül1o2l ül1om ül1op ül1or ül1ó2v ü2l1öb ü2l1ö2l ü2l1ömö ü2l1ör ü2l1ö2v ülőe2 ülőé2l ülő1sl ülő1s2p ülő1sta ülőt2 ül1p2l ül1p2r ül1sl ül1sp ül1st ül2t1ad ültá2r 1ültetl 1ültets ül2t1e2v ül1tra ül1ud ül1u2g ül1u2t ül1ús ü2l1üg ülü2l ül1ülé ül1ülh ül1üli ül1ülj ül1üln ül1ült ül1ülv ü2l1ür ü2l1üt ü2l1üv ü2lyel üly1ess üly1esz üm1a2l üm1a2n üm1a2r üm1á2r üme3gi üm1éks ü2m1ép ü2m1érd üm1fl üm1fr ümi2g ü2m1iga ü2m1il ü2m1im ü2m1i2p ü2m1is ü2m1iz üm1kl üm1kr üm1o2l üm1or üm1os ü2m1öss üm1őr üm1p2r üm1tr üm1új ü2m1ü2l ü2m1üv ü2m1üz ün1ál ün1á2r ün1e2l üne2t1elet üne2tés ün1evé ü2n1é2p ün1id ü2n1ing ü2n1irt 1ünnep ü1o üo2k1i2 ü1ó üó2rá ü1ö ü1ő üő2re üp2ri üp2ro ürdés1s 1ü2reg üre2g1a üre2gá üreg1g 1ü2res üre2tö ü2röm ür2t1a ür2t1á ür2t1e2 ür2tis ür2t1o2 ürtok1 ürtü2 ür2tül 1ü2rül üs2s1a2 üs2s1á üs2s1eg üs2s1o2 üss1s üssü2 üs2s1ül üs2t1a2 üs2tá2 üst1ág üst1ál üst1ár üs2t1e2 üst1ég üs2t1ék üs2tél üs2t1ér. üs2t1ére üs2t1érm üs2t1il üs2tim üs2tir üs2t1is üs2tí üs2t1o2 üs2t1ó2 üs2t1ör üs2t1ö2v üs2t1őr üs2t1ős üs2t1u2 üs2tú üstű2 üs2t1űz üsz1ál üszi2 ü2sz1iv üsz1í2v ü2sz1önt ü2szür üt1ab üt1aj 1ü2teg 1ü2tem. üte2m1a2 ü2temb 1ü2teme üte2m1el ü2teméb üte2mért üte2min ütési2 üté2sik ütés3s üté2s3z 1ütkö ütő1s2p üt2t1á üt2t1é2 ütty1e2g üt2zi ü1u üu2ta ü1ú ü1ü ü1ű üve2g1a2 üveg3g üvezé2r 1üze2m1a2 üze2m1á üze2meg üze2m1érté üze2m1étk 1ü2zemi üze2m1o ü2zemt üze2m1u2 ü2zemű üze2t1a üze2t1o üzé2ra üzé2r1e2l 1üzlet. 1üzletn 2ű. ű1a űa2da űa2dó űa2gy űa2ka űa2la űala2g1 űa2lo űa2na űa2ny űa3nyagoc űa2or űa2pa űa2pá űa2ra űa2rá űa2to űa2ut űa2va űa2xi űa2zo ű1á űá2bé űá2ga űá2gá űá2gy űá2hí űá2je űá2lo űá2po űá2ra űá2ri űá2ro űá2ru űá2sí űá2té űá2tí űba2l1 űbé2rel űb2lo űb2ró űcsapá2 űcsa2p1ág űcs1as ű2cs1ék űcs1i2pa űd1ál ű2d1e2l ű1d2rá űd2ro ű1d2ró űd1sk ű1e űe2cs űe2ge űe2gé űe2gy űe2kére űe2la űe2le űe2lé űe2l1í2 űe2lő űe2lü űe2me űe2pi űe2po űe2re űe2rő űe2se űe2sé űe2ső űe2te űe2ti űe2vé űe2vő ű1é űé2le űé2lé űé2nekb űé2neke űéne2kest űé2neké űé2nekr űé2pí űé2te űfa2j1e2 űf2lo űfo2g1a2l űf2ra űf2ri űf2ro ű2g1ö2lé ű2g1ö2lő. űg1ős űgő2z űg2ra űg2rá űholda2d űhol2d1ada ű1i űi2do űi2ga űi2gé űi2má űi2mi űi2pa űi2rá űi2ro űi2sz űi2ta űi2zé űi2zo ű1í űí2rá űí2ri űí2ró űí2té űí2ve űí2zü űí2zű űkia2 űk2la űk2li űk2lí űk2lo űk2rep ű1k2ré ű1k2ri ű1k2ro ű1k2ró űk2va űme2g1 űn1al űn1ar űn1ál űn1á2r űn1e2le űn1elh űn1e2li űn1elk űn1e2lő űn1elr űn1elt űn1eml űn1e2se űn1est űne1t2 ű2n1ér. ű2n1érte űni2g ű2n1iga ű2n1in ű2n1i2p ű2n1i2r ű2n1is űnme2 űn3ny űn1o2k űn1ol űn1os űn1ó2r űn1pr űn1s2k űn1s2t űn1u2n űn1u2t ű2n1üs ű2n1üz űn1űz ű1o űo2dú űo2ká űo2ko űo2la űo2rá űo2ro ű1ó űó2ce űó2ra űó2rá űó2ri ű1ö űö2lő űö2rö űö2ve űö2zö ű1ő űő2rö űp2la űp2lü űp2ne űp2ré űp2ri űp2rí űp2ro űp2ró űr1ad űr1a2l űr1a2m űr1a2n űr1au űr1a2v űr1áb űr1ál űr1ás űr1áz űr1egy űr1e2l űre2n ű2r1e2r űr1ex ű2r1é2j űr1é2l űr1ép űrés3szer űré2sza űré2szá űré2szí űré2szo űr1fl űr1id űri2g űr1iga ű2r1i2m űr1int űr1i2p űr1ist ű2r1ír űr1o2d ű2r1ol űr1o2p űr1or űros2t1a2 űr1ot űr1ón ű2r1ö2l űr1ör űrő1f2 űr1pl űr1pr űr1p2s űr1s2p űr1s2t űrszt2 űr1tra űr1uj űr1un űr1u2t űr1út űr1üg űr1üz ű2s1ajtó űs1ál űsé2g1el ű2s1ín. ű2s1í2r ű1s2ka ű1s2ká űso2rad űso2raj űso2ral űso2ran űso2rál űso2rosz űsor1s űsort2 űs2pe űs2pi űs2po űsp2r űs2rá űs3sz ű1s2ta ű1s2tí ű1s2to űst2r űs1tro ű2s1uj ű2s1ü2t űsze2r1á űsze2r1e2le űszere2p űsze2r1epé űsze2r1ült űsz2k űsz2t űtés3s űtőa2 űtőe2 ű1t2ra ű1t2rágá ű1t2re űt2ri ű1t2ro ű1u űu2ga űu2ra űu2sz űu2ta űu2tá űu2tu ű1ú űú2ri űú2sz űú2ti űú2to ű1ü űü2gy űü2lé űü2rí űü2te űü2té űü2tö űü2ve űü2vö űü2ze ű1ű űű2ző űvé2sz1a űvé2sz1á űvé2sz1e2l űvé2szer űvé2szint űvé2szo űvé2sz1ó2 űvé2szö űvé2szú űví2z1 űvíze2 ű2z1a2b űz1a2d űz1a2g űz1ak űz1a2l űzal1e űz1a2p űz1a2r űz1a2s űz1a2t űz1a2u űz1á2g ű2z1ál ű2z1árb ű2z1árj űz1átl űz1átu ű2z1ed ű2z1ef ű2z1e2l ű2z1em ű2z1e2r űze2s ű2z1ese ű2z1esé ű2z1est ű2z1esz űze2teg űze2tel ű2z1e2v ű2z1ég ű2z1é2l ű2z1érm ű2z1érté ű2z1érz ű2z1ész űz1fr űz1gl űz1g2r űzi2g ű2z1iga űzigaz1 ű2z1igé ű2z1i2m ű2z1i2r űz1isk űz1ism űz1ist űz1i2sz ű2z1iz űz1ín űz1ír űz1í2v űz1kl űz1kr űz1o2k űz1o2l ű3zom űz1on űz1op űz1or űz1os ű2z1óc ű2z1ó2r ű2z1ö2kö űzöl2d1el ű2z1ö2v ű2z1öz űzőa2 űzőe2 ű2z1őr. űz1ő2rei ű2z1ő2ri űz1őrk űz1őrm ű2z1őrn ű2z1ő2rö ű2z1őrr ű2z1őrs ű2z1őrt űz1őrz űz1p2r űz3sa ű2zsám ű2z3sár ű2z3sáv ű2z3ser ű2z3sé ű2z3só ű2z3sö űz3s2p ű2z3suga űz3sü ű2z3sű űz3sz űz1t2r ű2z1ug űz1úr űz1út ű2z1ü2g ű2z1ül űz1ünn ű2z1üt űz3zs 2v. 1va vaa2d vaát1 vaáta2 2v1abl va1bra v1abs vacs1ala va2cs1an va2csap va2csál va2cs1ü2 vacs3z 2v1a2dag va2d1aj va2dalé 2v1adap va2d1asz v1a2data v1a2datb v1a2datk v1a2dato v1a2datr va2daz va2d1ál va2deg va2d1e2l va2den va2dep va2d1e2r va2d1e2t va2dél vad1éte va2dib va2d1id va2d1ir va2d1i2t va2d1ír va2d1ol 2vadom va2dóh va2dói v1a2dój va2dór v1a2dóu va2d1ör va2d1ő2 va2d1ú va2dű va2dza va2dzá va2dze vaé2r va2g1as va2gav va2gás va2g1e2 va2g1é2n vag1g va2gid va1gle va2g1o2ku va2goli vag1ost va2g1osz va2g1ura va2gú 2v1a2gyú va2j1ar va2j1ác va2j1á2ro va2j1e2g va2jí va2j1ol va2j1ó2s va2jö va2jü 2va2kad vak1a2dá va2k1aj vak1akn vak1apá vak1árn va2k1ás va2k1át va2keg va2kem va2k1érté va2kis va2k1ír va2k1ó2s va1krí vak1t2 2vakti 2v1aktu 2vakup va2k1út va2lac va2laku va2lap. va2lapí va2lapú vallás1s 2v1amp 2v1a2nal va2n1e2g vane2m van1eme va2n1es vané2v van1éve van1évi 2vang van3n va2nol va2nó 2v1a2nyá 2v1a2nyó va1p2l va2pos va1p2r 2v1a2pu va2r1ab vara2c var1acé va2r1a2d var1ajt var1akt va2r1al va2rany var1a2nya va2r1a2p va2r1a2r va2r1assz va2r1at va2r1av va2rág va2r1ál 2v1a2rány va2r1ászn var1áta va2r1átf va2r1átm va2r1á2to va2r1á2zá varca2 var2cag var2cal var2can varc1c var2c3ho va2r1es va2r1e2t va2rev va2rég var1ék. var1éks va2r1é2l va2rép va2r1éré va2rid va2r1i2ko va2r1ikr va2r1ill va2rim var1inf var1ink va2r1inv va2r1i2p var1isk var1ism va2rí var2k1an var1k2b var1k2j var1k2ká var1kl va2r1okm var1old va2rop va2ror va2rön va2rő vars2 varsz2 2vartett. var2t1i2n var2tor vartó2 var2t1ór va2r1ut va2r1út va2r1ü2 va2rű vas1abl va2sag va2s1aj vas1arc vas1asz va2s1ábr va2s1ál va2s1árl va2sek va2s1e2l va2sem va2s1e2r va2set va2s1ék. vas1ékk va2s1ékn vas1ékt vasé2r va2s1ére va2s1érté va2s1érv vasfélé2v va2sid va2s1i2na. va2s1ing va2s1i2s va2s1iz va2s1ön va2ső vas3sze vas3szi vas3sző vast2 vas1tró va2sus va2s1ü2t va2sű vasz1e2l va2szis va2t1a2d va2t1aj va2tau va2t1ál va2t1á2ru va2t1e2v va2t1ék va2tél va2t1érte va2t1é2te va2t1id va2tim vat1inf vat1ing va2t1is va2t1ír vatmo1 vatmosz2 va2t1okm va2t1old va2t1ö2v vatő2 va2t1őr vatt2 2vattako va2t1ur 2v1a2uk vau2n vaza2t1e 2v1a2zon 1vá váb2baj váb2b1as váb2b1e2 váb2b1é váb2bil váb2bol váb2bos váb2bő váb2bu 2vábr vá2c3h vá2cs1a2p vá2cse vá2cs1ék vá2csip vá2cs1is vá2cső vá2csú vá2csü vács3z vá2d1al vá2d1a2n váde2 vá2des vádé2 vá2dén vá2dik vá2d1ir vá2d1or vá2dö vá2dü 2v1á2gaz 2v1ágr vá2gú vá2gyal vá2gyan vá2gyö vá2győ vá2k1e vá2k1ü vá2laj vá2l1a2l vála2n vá2l1any vá2l1ap vá2lar vála2szin vá2l1á2r vá2l1át vá2l1e2 vá2lél vá2lid vá2lin vá2lir vá2lism 2v1állás vál2l1e2 2v1állom 2v1álló vál2l1ö2 vá2lú vá2lü váma2 vá2m1ad vá2m1aj vá2m1ak vá2m1al vá2m1as vá2mau vá2m1á2 vám1b2 vá2m1e2 vá2m1ér. vá2m1érté vá2mil vá2m1in vá2m1ir vá2mis vá2mí vá2m1or vá2mö vá2mő vámu2 vá2m1ut vá2mü vá2naj vána2n ván1any vá2n1e vá2nis váns3s vá2n1ú vá2nü ványa2d vá2nyaj vá2ny1a2l ványa2n vá2nyany vá2ny1ap vá2nyar vá2ny1as vá2nyau vá2nyaz vá2ny1e2 vá2ny1ér. vá2nyérd vá2nyérr vá2nyérv vá2nyérz vá2ny1ing vá2nyis vány1í2r vá2ny1ó2 vá2nyö vá2po vár1a2dato vá2radá vá2r1a2dó vá2r1a2du vára2l vá2r1ala vár1ale vá2raml vára2n vá2r1any vá2r1ar vá2r1assz vá2r1a2sz vá2rág vá2r1ál várd2 vá2r1e2 vár1isk vár1ism vár1ist vá2rí vár1old vá2r1oml vá2r1ont váro2sz vár1oszt vá2r1ó2né vá2rö vá2rő várs2 vár1sp vár1sr vár2t1es vár2t1ér. 2váru. vá2ruh vár1u2r vár1usz vár1ut várú2 vá2rús vá2rü vá2s1a2d vá2sam vá2saz vásár1a2d vá2s1e vási2k vás1iko vá2sis vá2sír váskész1 vásó2 vást2 vás1tr vá2s1ü vá2sű vá2szan vá2s3zav vá2sz1e vá2szin váta2 vá2t1al 2v1átd 2v1á2t1e2r 2v1átfe vá2t1ir 2v1á2tí v1átlé 2v1átm 2v1á2t1ö 2v1átp 2v1á2tü 2v1átv vá2z1alj vá2z1alt vá2z1a2tom vá2z1a2v vá2z1e2 vázi1s2 vá2ziz vá2zí vá2zos vá2zö vá2ző vá2z3sa vá2z3sá váz3se vá2z3sé váz3sö vá2z3su váz3sz vá2zü vb2lo vb2ra vcsőé2ne vd2rá 1ve vea2g vea2l vea2n vea2r veá2l 2vece ve2cet ve1cl ve2cseg 2vedény ve2gab ve2gac ve2gar ve2g1as vega2z ve2g1á2 ve2g1eg ve2g1e2kéh ve2g1ell vege2lőké ve2g1elr ve2g1e2r ve2g1esem ve2g1esz ve2g1e2tet ve2g1ék ve2g1él ve2g1ép veg1éré veg1érte veg1érv vegés3s vegé2sz vegg2 veg1gr ve2gid ve2gik ve2gim ve2gí ve2gol ve2gor ve2g1ó2 ve2g1ö2 ve2g1u ve2gú ve2gyelem ve2gyemb ve2gyez 2v1egyl 2vegyv ve2k1ak 2v1e2ke. 2v1e2kei 2vekéb ve2kébő 2v1e2kék 2v1e2kés ve1klu 2vela 2v1e2lef 2v1e2lemz vele2t1e2l 2v1e2lég velés3s 2v1elf v1elgy 2v1elha 2v1elhel ve2lis 2v1e2l1í2 v1eljá 2v1elm ve2los 2v1e2lőirá 2v1e2lőí 2velőkés 2v1előleg 2v1elr 2v1elsa 2v1elszá 2v1elszo 2v1eltá 2v1elter 2v1eltér 2v1elto 2v1elv. 2v1elvá 2v1elvek ve2lyö ve2lyu 2v1elz 2v1embó 2v1e2mel 2v1eml 2v1e2mu ve2n1ad ve2nau ve2n1á ve2n1e2g ve2n1e2l ve2n1esz ve2n1é2vi ven1f2 ven1g2 ven3k2 ve2n1o ve2n1ó2 ve2nö ventü2 ven2t1ül ven1ülé ve2nyö 2v1enz veó2r ve2ör ve2pe ve1p2r ve2rab ve2r1a2c ve2r1a2d ve2r1a2g ve2rajá vera2l vera2n ve2r1a2r ve2r1au ve2raz ve2r1ág ve2r1ál 2verdő ver1egy ve2r1e2h ve2r1e2ke. ve2rekl ve2r1e2l ve2r1eng ve2r1er ve2r1e2ső ve2r1esz ve2r1é2l ver1g2 ve2r1iga ve2r1ill ve2rim ve2r1inc ve2rind ve2r1inf ve2r1ing ver1inte ver1ipa ve2ris ve2r1ol ve2ror ve2ró ver1ó2r ve2rö ver1p2 ver2s1al ver2sár versé2g ver2s1égé ver2s1égg ver2s1égn ver2s1égt ver2sir ver2s1í2 ver2só vers3s ver2s1üt vers3zár vers3zen ver1tra ve2rur ve2r1ut ve2rút ve2r1ü2g ve2san ve2sas ve2s1ál ve2s1e2kétő veset2 2v1e2sett ve2sip ve2sis ve2s1íz ve1ská 2v1e2ső ves3sza ves3szer vest2 ve2s1u2 2v1e2sze. 2v1e2szekn 2v1eszm 2v1e2szű veta2l ve2tas ve2tál ve2t1á2r vet1egy ve2t1e2lől ve2tég ve2t1é2k ve2tid 2v1e2tika v1e2tim ve2t1ing ve2t1ol ve2t1öl ve2töv vetőé2 ve2tur ve2t1ut ve2t1ű2z ve2vet 2v1e2vo vezőe2r vezőkész1 vező2sorr vezős1s 2v1ezr 1vé véá2g 2v1ébr vé2dak véda2l vé2d1as vé2dá vé2d1emb vé2dos vé2dóv vé2dö vé2dú vé2dz vé1f2r véga2 vé2gab vé2gak vé2gal vé2g1á2 vé2g1eg vé2g1e2le vé2g1elg vé2g1elh vé2g1eli vé2g1ell vé2g1els vé2g1elv vég2em vége2n vé2g1eny vé2g1ep vé2g1er vé2g1esem vé2g1e2sete vé2geté vé2gető vé2g1ér. vé2g1é2ren vé2g1é2ré vé2g1érr vég1érv vég3g 2véghü vé2g1id végigaz1 vé2gim vé2giz vé2g1í végkötés1 vé2gol vé2g1ó2 vé2gö vé2gú 2v1éh. 2v1é2he. 2v1é2hen 2v1é2hes 2v1éhs vé2kei vé2kít vé1k2l vé1k2ré vé1k2ri 2v1éks vé2kük vé2l1a2 vé2láb vé2lál vé2l1ár vé2leg vél1ell vél1els vél1elt vél1emb vé2l1eme vé2l1e2r vé2les vél1ess vél1est vé2lev vé2lez vé2l1é2k vé2lin vé2lir vé2lí vé2los vé2lői vé2lős véltá2v vé2l1u vé2lú vé2lű véna1p 2vénekl vé2n1emb vé2ny1eg vénye2l vény1ele vény1els vé2nyid vé2nyis vé2ny1í vé2nyú vényü2l vé2ny1ülé vé2ny1ült 2v1é2pí vé1p2l vé1p2r 2v1é2pü vé2ral vé2r1a2n vé2rap vé2rar vé2raz vé2r1ár vé2rát vér1d2 vé2r1e2l vér1eml véres3s vér1eti vé2rés vér1ész vér1éte vér1ikr vé2rir vé2r1o2k vé2rot vé2róv vér1s vértes1s vér2t1ón. vér2töv véru2 vé2rug vé2rut vé2r1ú vérü2kü 2v1érzet. vé2sak vé2sal vé2seg vése2l vés1ele vés1elt vé2s1er vé2só vé1s2pe vés3szer vés2táb vé2s1ü2v vés3zav vész1á2r vé2szeg vész1ell vé2sz1ékn vé2sz1ő2 vész3s vé2szu vészú2 vész1úr vészü2l vész1ülé vét1est 2v1év. vé3va 2v1évb 2vévei 2v1é2vek 2v1é2ven 2v1é2véé 2v1é2vér vé2vi. 2v1évr 2v1évt 2v1é2vü vfe2l1em vf2ra vf2re vf2ri vf2ro vge2o vg2ra vg2rá vhang2a3 vhez1 1vi vi2aa vi2ab vi2ac vi2aé vi2ag via2p via2szal via2sz1ál via2sz1árn via2sz1em viaszé2 via2szél via2szö viára2 viár1ad vic2c1a 2vické vi2csag vi2csal vi2cs1an vi2cs1as vi2csál vi2cs1e2l vi2cs1ér. vi2csérté vicsi2 vi2csim vi2csip vi2cs1ö2 vi2csú vics3z vi2deg vi2d1esz 2vidéz 2v1i2dő vi2dz vi2ew 2v1i2gaz 2v1i2gén vika2 vi2k1ag vi2k1el vi2kon vi2l1ék villa1s villasz2 2villu vi2má 2v1imm vina1t2 2vind vi2n1emb vi2n1ó vin2tess vin2tesz 2vinté vin2tos 2v1i2on 2vipa vi1p2s 2v1i2rat. 2v1i2ratot 2viratoz. 2v1i2rod visa2 vi2sal vi2s1au vi2s1á2g vi2ser vi2s1ék vi2sim vi2s1is vi2siz vi2sö vi2szár vi2szok vit2a vi3tad vitakész1 2vital vitelő2 2vitn vi2t1ú vi2zeg vi2z1ell viz1é2l vi2zin vi2zok vi2zol vi2zom viz1os vi2zsá viz3sz vi2zud vi2zú 1ví vídi2 ví2ge ví2ny vínyenc1 2v1í2ra 2v1í2rá 2v1í2ró 2vítélet. v2í3téletb 2vítélete 2v1ívb vívókész1 ví2z1a2 ví2zá ví2zel víz1e2le víz1elf víz1elh víz1ell víz1eln víz1elő víz1elp víz1els víz1elt víz1elv víze2m víz1emb víz1eme víz1emé ví2zék ví2zés ví2z1ing vízi1sk ví2z1ist ví2z1isz ví2zí ví2z1o ví2z1ó2 ví2zö ví2z1ő2 ví2z3s2 ví2zú vízü2 2v1í2zű víz3z vjára2t1út vje2gya vje2tel vje2tu vkia2l vkiá2 vk2li vk2ló vk2lu vk2ri vk2rí vk2ró vla2te vleí2 vleü2 vme2g1 vna2p1in 1vo vo2il vo2ji vo2kí 2v1okm voks3s 2v1okta vola1t 2v1oldá 2v1oldó. vol2t1a2d vome2 vomec3 vona2l1e2 vona2t1e vonás1s voná2s3z vo2od vo2pe vo2r1a2 vo2r1in 2v1orm vo2s1as vo2s1av vo2s1e vos3s2 vo2s1ú vo2sü vo2uc vo2vá vo2xi 1vó vóa2k vóá2g vóá2r vócsa2p1á2 vó1d2re vó1f2r vó1k2l 2v1ónn vóó2r vó1p2l vó1p2r vó2ran vó2rák vó2rán vó2rát vó2s1akk vó2s1a2l vó2seg vó2s1iv vó2sol vó2s1orr vó2só vó2sö vó2ső vó1spi vós3s vós1tr vó1sz2 vósza2k1 vó2s3zár vó2s3zen vóta1t2 vó1t2r vóváros1u 1vö vö2bö vö2dém 2v1ö2ko völ2gya 2v1ö2rök 2v1ötl vö2ve vö2vé 2v1özön vözőe3 vö2zs 1vő vőa2n vőá2g vőe2l vőe2r vőé2j vőé2n vő1fl vő1f2r vői3dejű vő1kl vőo2l vő1pl vő1pr v1őrm v1ő2rü vő1s2p vő1sta vő1str vő1t2r vőü2l vő2zi vp2la vp2ra vp2re vp2ré vp2ri vp2ro vp2ró vp2sz vs2ká vs2ki vs2ko vs2lá vs2pe vs2ta vs2ti vs2tí vs2to vst2r vs2tú vsz2p v1sz2t vta2n1á2s vta2n1á2to vta2n1ó2 vtá2raj vtá2r1ass vtá2ris vtáró2 vtá2r1ór vtelés1s vt2ra vt2ré vt2ri vt2ro 1vu vu2bo vu2mal vu2man vu2m1e2 vu2mis vu2mö 2v1u2ni vu2ra vu2ru 2v1u2tak 2v1u2tas 2v1u2tat vu2tá v1utc v1u2tó 1vú vú1fr v1újd v1ú2jí v1újs vú2r1ad vú2re vúré2 vú2rén vú2rö vú2szó v1útn 1vü vü2gy vü2kü vü2lá 2v1üld 2v1ünn vü1pr vü2rí vü1st vü1sz2 vü2te vü2té vü2zé 1vű 2v1űrl vű2ző vvágy1ób vverés3s vzá2r1ó2ra 2w. 1wa wa2ii wa2le war2d1i wa2re wa1s2h wa1ye wa1yé 1wá 1we we2b1a2 we2b1á2 we2b1ele we2b1é we2bir we2b1o we2b1ú we2bü we2ed we2ek we2ig we2is we2le we2ör 1wé whi2t 1wi wi2ch wi2cz 1wí 1wo wo2od 1wó 1wö 1wő wri2t wsto2 1wu 1wú 1wü 1wű wyo2m1 2x. 1xa x1a2da xa2dá xaé2d xa1fl xa1k2l 2x1akt 2x1a2la 2x1alg 2x1alj 2x1alk xa2na x1a2ny x1a2rá xa2ri xa2vi 1xá 2x1ábr xá2gy 2x1áll xá2rak 2x1á2ram xá2ras 2x1á2ro 2x1árr 2x1á2ru 2x1átj 2x1átr 2x1átv xba2l1 xb2la xb2lo xb2ra xd2ró 1xe x1e2gy 2x1e2ke. xe2l1a xe2l1á 2x1e2lekt xe2lel xe2l1emb 2x1e2lemr xe2l1esz xe2l1in xe2l1o 2x1emel 2x1eml 2x1e2rő 2x1e2sé 2x1e2zü 1xé 2x1éhs xé2pí 2x1ér. 2x1érte 2x1érté 2x1értő 2x1érz 2xévei xf2re xha2u 1xi xia2n xi2av xi2d1a2l 2xidá xi2dás 2xi2de 2xidé 2xidgá xi2d1i2 2xidjá 2xidjé 2xidl 2xidm xi2dol xi2dö 2xi2dő xid1őz xi1d2ro 2xidró 2xids 2xidu 2xidv 2xi2dz xi2el 2x1i2ga xigén1n 2xilc 2x1ill xina2 xi2n1an 2x1ind xine2 xi2n1et xi2n1i2 xi2nö xi2on xi2óc xi2óe xi2óg xi2ómé xi2óo xi2óö xi2óp xió2rá 2x1i2rá 2x1i2ro xi2sad xi2sal xise2 xi2s1el xi2s1es xi1s2ká xis1p xis3s xi2s1ü xi2t1e2g xi2t1e2r xi2t1é xi2t1i2 xi2t1ü2 1xí xí2ja xí2já xí2jo xí2ju x1í2rá xí2ró 2x1ívn 2x1í2vü 2x1ívv 1xo 2x1old xo2n1ai xo2n1al xo2n1e xo2pe xo1p2l 2x1osz 1xó 1xö xö2dé xö2rö xö2zö 1xő xő2sé xp2la xpor2t1a2 xpor2t1á2r xpor2t1e2 xpor2t1érd xpor2t1ü2 xp2ri x1p2ro x1p2ró xs2ká xs2pe xs2ta xst2r x2t1e2d xti2la xti2lá xti2leg xti2lin xti2lis xti2l1o xt1ört 1xu xu2sad xu2sal xu2s1a2n xu2s1e xu2s1érté xusi2 xu2sil xu2sim xu2sin xu2sit xu2s1ol xu2s1ó2 xu2s1ö2 xus3s xust2 xus1tr xu2sus xusú2 xu2s1út xu2sü xu2s1ű xu2s3z xu2ta 1xú 1xü xü2lé xü2ve xü2ze 1xű 2y. yaa2d y1abla y1a2bon y1abra ya1bri y1abs ya2cél. ya2dako ya2dalé y1adap y1a2data y1a2datb ya2dati y1a2dato ya2datu yadé2ki ya2d1és ya2dév y1admi ya2dóan ya2dóbó ya2dóé y1a2dói y1a2dój ya2dóké ya2dókt y1a2dóm ya2dóná y1a2dór y1a2dós y1a2dóu yae2r ya2ero yae2t yaé2r y1aff ya1f2r ya2g1a2d ya2g1ag ya2g1am ya2gan y1aganc ya2g1a2s ya2g1atl ya2g1ato ya2gau yaga2z yag1azo ya2g1áll yag1árá yag1árb yag1á2ré yag1árh yag1ári yag1árj yag1árk yag1á2ro yag1árra. yag1árs yag1árt ya2gás yag1át1a2 ya2g1átf ya2g1átl ya2g1átr yag1d2 ya2gec ya2g1el ya2g1es ya2g1é2g ya2gék y1aggr yag3gyú ya2gid ya2gim ya2g1io yag1isz ya2giz ya2gí ya2g1osz ya2g1ó2r ya2gő yag1s ya2gur ya2g1ut y1agy. y1a2gyat y1agyb y1agyf y1agyk y1a2gyon y1agyr y1a2jak y1a2ján y1ajk y1ajt y1akadá ya2k1áll ya2k1átk ya2k1átm yak1elm yak1elt yak1ékn ya2k1ér. ya2k1éri yak1i2zo ya1klu y1akna. y1aknák ya1kné y1a2kol. ya2k1ola ya2k1old ya2k1ón y1a2kós ya2k1örv ya1k2rém ya1kri ya1krí y1akt. y1akták y1aktb y1aktiv y1aktj y1aktot y1aktu yala2g1ú ya2l1agy yal1ajk ya2lakb y1a2lakj y1a2lakk y1a2lakok y1a2lakom y1a2lakot ya2lakt ya2laku y1alakz ya2l1a2l y1alany ya2lapa y1a2lapí ya2lapjá y1a2lapú yala2te yal1ága ya2l1ál yalás1s y1aláté ya2l1é2ne ya2lif yal1i2ko ya2l1inv y1aljai y1alji ya2lor yalókész1 ya2l1órá ya2l1ő2 y2alta yal1t2r y1altú ya2lü ya2lű y1amalg ya2m1any yam1a2rár yama2tal ya2m1árb ya2m1árn yamászás1 ya2m1á2to yam1b2 yam1emb yam1esés yami2k ya2m1iko ya2mind ya2m1i2o ya2m1is ya2m1osz ya2m1ó2r ya2mö ya2mő ya2mü y1a2nal ya2nan ya2nar yan1arr ya2nat yan1att ya2n3e. ya2n1e2g ya2nek ya2ner ya2n1et ya2nez y1a2ném y1ang ya2nid ya2n1in ya2n1is ya2nit y1a2niz y1anny yano2d yan1oda yan1onn ya2nő. ya2nyas y1anyj y1a2nyó y1a2nyuk yaó2r y1a2pa. y1a2pai y1a2pas y1a2páb y1a2pád y1a2páé y1a2pái y1a2pák y1a2pám y1a2pára y1a2páró y1a2pát. y1a2páto y1a2pátó y1a2páv y1a2pi. y1apjáh y1apjái y1apju ya1p2l ya2post yapo2tá y1a2pó. y1a2póé y1a2póh y1a2pói y1a2pój ya2póké ya2póna y1a2pós ya2pót. ya2pótó y1a2póv y1app ya1pre ya1p2ri y1aprí ya1pro ya2r1a2dá ya2r1a2dó ya2r1a2du ya2rasz ya2ránn y1a2rány ya2r1átv y1arc. y1arca y1arcá y1arcb y1arcc y1arch y1arck y1arcn y1arco y1arcr y1arcu y1arcú 1yard. 1yardn 3yardom 1yardos yar1drá yar1ell ya2roma ya2ror yar1ó2rá yar1óvá ya2róz yar1s2 yas1alj ya2sap ya2s1as yaság1g ya1sl ya1sne ya1s2pi ya1s2po ya1s2rá yast2 ya1s2ta ya1sto ya1str ya1svi yasz2tár y1a2tád yatékát1a2 y1atka. y1atká ya2tomh y1a2tomm y1a2tomo yat2rág ya1tré ya1tróf y1attr y1a2ty y1a2uk y1a2ulá yau2tá y1a2uto y1autó yautói2ko yaü2t yaü2z y1a2vat y1a2zon y1a2zúr y1á2bé y1ábr yá2ga yá2gá yá2gé yá2gi yá2go yá2gu yá2gú yá2gy yá2jal yá2j1e yá2j1ö yá2jő yáka2 yá2k1an yá2k1á yá2k1e yá2kü yálas3s yá2lál y1áldo yá2l1e y1állam y1állat y1állás y1állí y1állo y1álló y1állv yá2lü yáma2 yá2m1al yá2m1an yá2m1ap yá2m1as yámi2 yá2m1in yá2mü yá2n1e yá2nék yán3n yá2nö yánt2 yán1tr yá2nü yá1ny2 y1á2po yá2r1a2l y1á2raml y1á2ramo yára2n yár1any yá2rap yá2rar yá2r1ass yá2r1av yá2raz y1árazá yár1azo yá2r1ál y1árbev yár1d2 yá2r1e2 y1árem yá2réj y1á2riá yá2rim yá2r1is y1árnya yáró2 yá2rór yá2rö yá2rő y1árpá yár2sé y2árt. y1ártám yár1tr y1á2ruh y1árur yá2rú2 y1árú. yá2rü y1árva y1árver yá2sal yá2sas yá2s1á2g yá2s1á2rá yá2s1árt y1á2sás yá2se yáská2 y1á2só yá2sö yá2szab yá2szag yá2szal yá2szas yá2sz1ál yá2sze yász1el yász1em yás3zen yá2szét yá2szév yá2szim yá2szin yá2szis yá2szit yász1ó2d yász1ó2r yá2sz1ö2 yá2sző yá2sz1ü2 y1á2ta yát1a2l y1á2tá y1átb y1á2t1e2 y1á2té y1átf y1áth y1á2t1i2 y1átk y1átlag y1átlá y1átlé y1átm y1átn y1á2t1ö y1átp y1átr y1áts y1átt y1á2tü y1átv ybeá2 yb2la yb2le yb2lé yb2li yb2lo yb2lú yb2ra yb2ri yb2ro yb2ró ycsa2p1á2g ycsőé2 yc2vi yd2be y2desd yd2ni y1d2ra y1d2rá yd2ro yd2ró y1d2ru yea2v yeá2r ye1bl y1ecset ye2d1á ye2deg ye2d1esz ye2dol ye2d1ó2 ye2d1u2 ye2d1ú ye2d1ü2lő yed2vér yee2s y1eff yega2 ye2g1ala ye2gan ye2g1az ye2g1á2 ye2g1el yeg1e2red ye2g1él yeg1érbe y1egérr yegész1 yeg1észn yeg3g2 ye2gid ye2gí ye2gú ye2g1üg ye2gyed y1e2gyen y1e2gyes ye2gyet ye2gyez y1e2gyé y1egyh y1egyl y1egys y1együ y1egyv yei2g y1ejt y1e2ke. y1e2kei y1e2kek y1e2kéé ye2kéj y1e2kés. y1e2kése ye1k2ré y1elad y1e2lág ye2lál y1elc y1e2lef ye2lege ye2l1e2h ye2lemek y1e2lemez y1e2lemű y1e2l1e2re ye2légt ye2l1é2ké ye2l1ér. yelés3s yelé2s3z y1elhal y1elhel y1elhú y1e2l1in ye2liv y1e2l1í2 y1eljá y1elka y1elnev y1elnö y1elny ye2los y1e2lö y1e2lőad y1e2lőí ye2lőtt y1e2lőz y1elsa y1első y1eltér y1elto y1eltö yel2vad yel2v1áll yel2vás yel2v1eg yel2v1e2r yel2vessz yelve2sz yelv1esze y1elvevé yel2véd yel2v1ég yel2vél yel2v1érz yel2v1í yel2vol ye2mak ye2m1a2l ye2map yema2r ye2m1at ye2mál y1ember y1e2melé y1emelk ye2m1er y1e2més yemi2 yem1ing ye2m1is ye2mit yem1ita ye2miz y1emlék y1emlí y1emlő yem1ost ye2m1ö yem1p2 yemu2s yem1usz ye2n1á2 yen2csa yen2c3ser ye2n1elj ye2n1eln ye2n1elv y1e2ner yenes3s ye2n1é2l yenfé2l1é2v ye2nid ye2n1i2p yen1k2 ye2n1o ye2n1üg yenyá2 y1enz ye2pag yep1alo ye2p1ará ye2p1áll ye2pát ye2p1e2l ye2p1é2k y1e2pik y1epiz ye2pos yep2p1e2r ye1pro yep1t2 y1erde yere2ga yere2gete yereg1g y1e2rej yere2k1a yere2ká yere2k1e2sz yere2ko yere2k1ö2 y1e2rény y1erké y1erkö y1erny y1e2ro ye2rőér ye2rőig ye2rőné ye2rőrő ye2rősí ye2rőss ye2rővá yer2s1a y1erszé ye2sá yes1egé yes1egy ye2s1ej yes1e2kétő y1esemén ye2s1er y1e2setb y1e2seté y1e2seti y1e2setk y1e2setr y1e2setű y1esél ye2sip ye2s1í2r y1esőá ye2sőbe y1e2sőh ye2sője ye2sők. ye2sőkh ye2sőkr y1e2sőn y1e2sőr y1e2sős ye2sővé ye1s2pe yes2t1a2 y1estés y1estév y1estjü yes2tőr y1estű y1eszk y1eszm y1esztét y1e2szű y1e2tal yeteg1ér. y1e2tet ye2t1ért y1e2tik y1etn y1e2tűd ye2vet ye2vező y1e2vé y1e2vol y1e2vő y1e2zer yeze2t1ék yezőa2 yé2b1á yé2b1ér. yé2b1i2 yé2bü yé2des y1égb y1é2ge y1é2gé y1é2gi y1é2gő y1égt y1é2he. y1é2hen y1é2hes y1é2het y1éhs y1éj. y1éjb yé2jei yé2jen yé2jért y1é2ji y1éjj y1éjs y1éjt yé2kab yé2kad yé2k1aka yé2k1a2l y1é2kat yé2k1el yé2ker yé2k1é2k yé2k1é2l yé2k1ér. yé2kik yé2k1ó2 yé2k1ö yé2kő yé2kúr yé2l1á yé2le. yé2les y1é2let y1é2lén yé2lét yé2lim yél3l yé2lős y1élsp y1é2lű yéná2 yé2n1ár yén1e2ke. yé2nel yé2n1ikr yé2no yé2pí yé2pü yéra2 yé2r1aj yé2r1ak yé2ral yé2r1an yé2rar yé2r1á2 y1érch yér1d2 y1érdek yé2reg yé2r1e2l yé2rem y1érem. yér1eme yé2r1enc yér1eső y1é2ret yé2rev y1é2rez y1é2rés yé2ril y1é2rin y1érmü yé2r1osz yéró2 yé2r1ór y1é2rő. y1é2rői y1é2rők y1é2rőt y1érpa y1érték yéru2 yé2rut y1érv. y1érvén y1érvv y1érzet y1érzé y1érző yé2sz1á yé2sz1emb yé2sz1o yé2sz1ú yé2t1a y1é2tel y1é2ter yé2tén y1étke y1étl y1év. y1évad y1évb y1é2ve. y1é2vek y1é2vem y1é2ven y1é2ves y1é2vet y1évez y1é2véb y1é2vén y1é2vér y1é2vét y1é2vév y1évf y1évh y1é2vi y1évk y1évm y1évn y1évr y1évs y1évt y1é2vü y1é2vű y1évv yfas2 yfé2lá yf1gl yf2la yf2le yf2li yf2lo yf2ló y2föl. yf1ő2sö y1f2ra yf2ri yf2rí y1f2ro yf2rö yg2le yg2ló ygó1g2 ygót2 yg2ra yg2rá yg2ri yg2ró yg2ru yg2rü y2h1a2dó yha1p2 yha1t2r yhá2zal y2h1elv y1i2bo y1i2deá y1i2deg y1i2den y1i2deo y1i2dé y1i2dom y1i2dő y1i2ga y1i2gá y1i2géz y1igm y1i2har yi2hat y1ihl y1i2ker yi2k1érn yi2kont yi1k2ri y1i2ma. y1i2má y1i2mit y1imp y1i2nas y1inc y1ind y1inf y1inga yi2nic y1inj y1ins y1inv yi2ono yi2par y1i2ram y1i2rat. y1i2rata yira2t1é y1i2ratn y1i2rato yi2ratt y1i2rá y1i2ri y1i2rod y1irr y1irt y1ish y1isko y1ism y1isp y1ist y1i2sza yi2szel yi2szon y1i2tal y1i2tat y1i2var y1i2vás y1i2vó y1i2zé y1izg y1izm yi2zom yí2gé yí2ja yí2já yí2ju yí2ka yí2ká yí2ke yí2kí yí2kol yí2k1ö yí2la yí2l1e2 yí2lí yí2lö yí2ral yí2ráb yír1á2sz yí2rog yí2rő yítőa2 yí2vá yí2ve yí2vé yí2vó yí2vü yí2vű yí2zü yí2zű yje2gy1á2 y2jév yjob2b1o ykai2 yka1k2 yka2ró2ra yk2bó y2k1e2lem yk1é2jév yké2p1el yk2ho ykiá2 ykie2 yk1izm yk2ka yk2la yk2le yk2li yk2lí yk2ló yk2lu yk2ná ykóro2 yk2ra y1k2rá y1k2ri yk2rí yk2ro yk2ró yk2vó ylal2ta yla2t1a2n yla2t1é2t ylei2 yleí2 yle2tal yle2tá ylóá2 ylót2 yma1d2 y2mat. ymá2s1ik yme2g1é ym2ma yné2vér yn2ka ynk2r ynőé2n ynő2ié yo2be y1obj y1o2dú yo2gal yo2gál yo2g1ár yo2ge yog3g yogi2 yo2git yo2g1iv yo2gí yo2g1osz yo2gö yo2gü yo2gű yoka2 y1o2k1al y1o2ká y1o2k1ir y1okm y1o2kol y1o2kos y1o2koz y1okta yo2l1a2l yola2n yol1any yo2l1ári yol2cem yolci2 yol2cik y1oldá y1oldó y1o2lim y1oltás yol2ter yo2lú yo2lü yolví2 yo2m1a2l yoma2n yo2m1any yoma2s yo2m1aszó yo2maz yo2m1ál yo2m1árk yo2m1á2to yo2m1á2z yo2m1e yo2m1ik yo2mil yo2m1is yo2mí yo2m1ol yo2mö yo2mő yom1p2 yo2n1a2d yo2nag yo2naj yon1a2ka yo2n1a2l yo2n1am yo2n1a2n yo2nap yo2n1a2r yo2n1a2s yo2n1a2t yo2n1au yo2n1ál yo2n1át1a2 yo2n1áté yo2n1átj yon1átk yo2n1átr yo2n1áts yo2n1átv yo2n1á2z yon1d2 yo2n1e2 yo2néd yo2néh yo2nék yo2nén yon1f2 yo2nim yo2n1is yon1itt yo2niz yo2ní yon1k2 yon3n yo2n1ol yo2nop yo2n1osz yo2nö yo2n1ő2 yon1s2 yont2 yon1tr yo2n1ü y1o2pe y1opt yo2rad yo2r1a2k yo2r1a2p y1ord y1orgi y1orrú yor2sol y1orsó yors3s yo2se yos3s y1osto y1oszl yos3zs y1oszt yo2ut yo2ve yo2xi yóá2g yóá2r yócsa2p1á2 yó2dák y1ó2dár y1ó2dásak yó1f2l yó1g2r yó2gyár yó2gyi yó2gyú yóí2v yóo2k yóó2r yó1p2r y1ó2rac y1ó2rad yó2rag yó2rai y1ó2ras y1ó2ráb y1ó2rád y1ó2ráé y1ó2ráh y1ó2rái y1ó2ráj y1ó2rák y1ó2rám y1ó2rár y1ó2rás y1ó2rát y1ó2ráv y1ó2ri yó2s1aj yóscsa2 yó2sír yó2s1ol yó2s1orr yós1ors yós3s yósü2l yó2s1ű2 yö2bö yö2bű yö2cs yö2dém yö2ka yö2ká yö2kel yö2k1ék yö2kid yö2kí yö2ko yök1os yö2kó yö2kör yö2k1öss yö2ku yö2lők y1öltés y1öml y1ö2ná yön2gya yön2gyá yön2gyó yön2gy1öl y1önk y1önté y1önz yö2ra y1örd yö2rit yö2ro yö2ru yö2so y1össz y1ösv y1öszt y1ötl y1ö2töd. y1ö2töde y1ö2tödé y1ötp y1ött y1ötv yö2ve yö2vé yö2vi y1ö2vö y1ö2zön yőa2n yő1bl yőe2l yőe2r yő1fr yő1pr yő2ra y1ő2rei y1őrg y1őrl y1őrp y1őrszi y1ő2rül y1őrz yő2seg yő1str yősz2 yő2s3zár. yős3zs yő1szt yőzőkész1 ypen1n ype2te yp2la yp2le yp2lé yp2lu yponté2 yp2ra yp2re yp2ré yp2ri yp2rí yp2ro yp2ró y2prő yp2ru yp2sz yrádi2ón yrágás1 yrea2 yren2d1ő2 yreu2 ysa2van yság1g ys2ch ysé2g1e2l ysé2gés ys2ho ys2ka ys2ká ys2ki ys2la ys2lá ys2le ys2lu ys2mi ys2na ys2ni ys2pe ys2pi ys2po ys2pó ysp2r ys2ra ys2rá ys2rő ys2sa ys2sá ys2se y1s2tí y1s2to y1s2tó y1st2r y1s2tu y1s2tú ys2tü ysza2k1ü y2szaló y2száld yszáraz1 ysze2ra yszer2v1ó2 y1sz2f y1sz2k y1sz2l y1sz2m yszö2g1el y1sz2p y1sz2t y1sz2v yta2c yt1acé yta2n1é yta2n1ó2 ytá2l1é2 y2t1állá y2t1álló yt2raf yt2ran yt2rap y1t2rá y1t2re y1t2ré y1t2ri y1t2ro yt2rón yt2rö y1udv yu2g1á yu2ge y1ugr yu2gy yu2hu y1ujj yuj2j1a2da yu2kab yu2kar yu2k1aszá yu2k1ác yu2kál yuká2s yuk1ásá yu2k1e yu2k1ö yu2kő yuk1t2 yu2kű y1und y1u2ni y1u2no yu2rad yu2rai yu2rak yu2ral yu2ram yu2ras yu2rat y1u2rán y1u2ráv y1urn y1u2ru yu2sál yus3s yu2szá y1u2szo yu2tak yu2tal yu2tam yu2tat yu2taz yu2tál y1utc yu2tód y1u2tu y1u2tú yú1bl yú1br yú1gr y1újd y1ú2jé y1ú2jí y1újr y1újs yú2kel yú2k1es yú2ket yú2kev yú2kó yú2köl yú2l1ag yú2laj yú2lar yú2l1á2r yú2lát yú2l1eg yú2l1el yú2l1e2t yú2lin yú2l1is yúl2tag yú2lü yú2lű yú1pl yú1p2r y1úrb y1ú2ré. y1úrél y1ú2rév y1úrho y1ú2ri y1úrk y1úrnő y1úrr y1úrtó yú1sta yú2sü y1úszt y1útb yú2té. y1úth yúti2 yú2ti. yú2tig y1útj y1útk y1útm y1útn y1ú2ton y1útp y1útr y1úts y1útt y1útv yü2dü y1ü2gy yü2két yü2lá yü2led y1ülteté y1ünn yü2rí y1ü2rü y1ü2te y1ü2té y1ütk y1ü2tő y1ü2veg yü2völ y1ü2ze y1ü2zé y1üzl yű1bl yűé2n yű2g1ő yű1kl yű1pl y1űrb y1ű2ré. yű2réb yű2rén yű2rön y1űrr yű2sá yű2s1orra. yűs1s y1ű2zőb y1ű2zően y1ű2zőé y1ű2zőh y1ű2zők y1ű2zőn y1ű2zőr y1ű2zőt y1ű2zőv y2v1abr y2v1a2dó yva2d3z yvai2 y2v1akc y2v1alb y2v1alk y2v1ank y2v1ant yv1a2nya y2v1apo y2v1arz yva2s1u2 y2v1atk y2v1au y2v1azo yv1ábr yv1állo yv1állv yv1á2rai yv1á2rán y2v1áre y2v1árj y2v1árl yvárosi2b yv1árre y2v1á2ru y2v1árv y2v1áta y2v1áti y2v1átt yv1br yv1dr yv1e2gye yv1egys yv1e2kéb yv1ela y2v1e2lá y2v1ell y2v1elo y2v1elti y2v1ember yven3n y2v1e2p yve2r1a yve2r1á2 yve2reg yve2r1ész yve2rip yve2r1o yvert2 y2v1esszé y2v1eva y2v1e2vé yv1e2vő. y2v1ex yvezé2rel yvé2du yv1ékí yv1é2let y2v1élm y2v1élt y2v1ép y2v1érd y2v1é2ri y2v1érrő y2v1érté y2v1é2rü y2v1érze y2v1é2ve. yv1fr yv1gr yvigaz1 y2v1igé y2v1i2k y2v1ille y2v1im yv1ind y2vint y2v1i2p y2v1ism y2v1ist y2v1íg y2v1ín yví2zis yví2zü yv1kl yv1kr y2v1old y2v1olv y2v1or y2v1os yv1ó2r yv1öss y2v1ö2z yv1őr yv1pr yv1sk yv1sl yv1st yv1sz2 yv1tr y2v1ub y2v1ud y2v1ur y2v1u2t yv1új yv1út y2v1üg y2v1ü2z yza2t1a2l yza2t1e yza2t1érd yzá2r1ó2ra yzás3s yze2t1a2 yze2t1á yze2t1ér. yze2t1é2rő. yze2tés yze2téte yze2t1o yze2t1öl yzé2k1e2l yzőa2 yz2rí 2z. 1za 3zaba. zab2b1i2ko za2b1i2ga za1bre za1bri z1abro 2zabs za2ce za2c1ég za2cho zac1ikr za2c1im za2cipa za2c1iv za2cí zac1k2 zac3st za2dad 2zadag zad1alj za2dan za2data 2z1a2dato z1a2datr zadás1s zadi2a za2d1ír za2dóme za2dóz za1d2rá za2d1ut za2dzá za1fl za1f2r za2g1a2d za2gak za2ga2n zag1any za2gara za2g1a2t za2gau za2gág za2g1ál zag1árn zag1árt za2g1áz za2gel za2gés z1aggy 2zagi za2gin z1a2git za2g1osz zagren2 za2g1ü z1agy. z1a2gyak z1a2gyar z1agyb za2ijá zai2z 3zaj. 3zaja. za2j1a2d za2jan za2j1átv 3zajáv za2jes 3zajf za2jin 3zajj zajká2rok 3zajol za2j1or 2zajta 2zajtó. z1ajtók 2zajtót zaj1tr 3zajú za2j1ü2 2zakad za2k1a2dat. zakai2ko za2k1aka zak1alk za2k1alv za2kana za2k1ant za2kara z1akarat z1a2karás z1a2karó z1akarv za2k1atl za2k1á2p za2k1áta za2k1átl 2zakc z1akció za2k1e2g za2k1ele za2kelm za2k1eln za2k1elő za2ket za2k1é2l za2k1int za2k1i2p zak1iro za2k1ír zak1k2 za1klu 2z1aknák zak1oszt za2k1o2v za2kős za1krí 2zaktá 2zakti z1aktív 2zaktú zaku1p2 zaku2r zak1ura za2k1urá zakü2 za1kvó zal1acé zala2gá zalag1g 2zalakí za2lakj za2laku zala2n zal1any z1a2lapb za2lapj zal1átk zale2l zal1ele zal1ell zal1elő za2l1e2m z1algá z1alge za2lid z1alkal z1alkat z1alkot 2zalmás za2lól zalta2n zal2tel zal2tem z1alti za2m1a2d za2m1aj zam1ala za2m1a2p zama2t1ő2 za2maz 2z1ambu za2mem zam1ing za2m1is za2mí za2m1osz za2mü z1a2nal z1a2nek 2zang z1angy 2z1ankét zan2tes z1antil za2nya. z1a2nyag z1a2nyó zao2k zao2s zaó2h zaó2v z1a2pa. za2pad za2p1a2g z1a2pai za2p1ág z1a2pán za2p1ára z1a2pát z1a2páv zape2l zap1ele za2pem za2pes za2pí za1p2lán z1a2pó. z1a2póé z1a2pók 2zap1p2 zappa2ne zap3rof zap1s2 za2r1a2dá za2ran zar1a2nya zar1apa za2rar z1a2rái za2r1ál z1a2rány z1a2rár 2zarc z1arc. z1arca z1arcá z1arch z1arci z1arck z1arco z1arcú zare2t za2r1ete za2rev za2réna za2réná 2zarm za2r1ön za2r1ü zar2vág 2zarz za2sem za1s2ká za1s2ko za1s2li za1s2pó za1spr za2t1ab za2t1a2d za2t1aj zat1alap zat1alj zat1ana za2t1a2ny zat1ará zat1att za2tau za2taz za2t1áll zat1álo zatá2p zat1ápo za2t1árad za2t1áré za2t1á2ru za2t1elé zat1elk za2t1e2ré za2t1erk za2t1é2g za2tél zat1i2ko za2tim za2t1ind za2t1ing za2tins za2t1int za2t1ist za2tiz zat1k2 2z1atka. z1atlas zatmo1s zatmosz2 za2t1okos zat1olda 2zatomj zat1oml za2t1osz za2tök za2t1ön zat2rok za1trom zatt2 zat1tr za2tura za2tül za2tür 2zaty za2tya za2tyá za2ula za2ulá za2urá zau2tak z1a2uto z1autó zaü2t zaü2z za3vará 3zavarb 2zavat z1az. z1azh z1a2zo 1zá 2z1ábr zá2de zág1a2d zá2gak. zá2gako zá2g1al z1á2gas z1á2gat zá2gaz zág1azo zá2g1ál zá2g1á2rak zá2g1áru zá2g1e zá2gép zá2golta z1á2gói zá2g1út. zá2gü z1ágy. z1á2gya zágy1a2da z1ágyb z1ágyh z1ágyn z1ágyr z1á2gyu záí2r zá2j1ék zá2jí zá2j1ol zá2j1ös zá2jő zá2jü zá2jű zá2kin zá2k1ö2v zála2n zá2l1any zál1apr z1álar zál1assz z1álca z1álcá z1áldá zá2l1e2g zá2l1e2l zá2l1em zá2lib zá2lid zál1ing zá2lir z1állam z1állap z1álma z1álmá z1álmo zá2lob zálo2d zá2l1oda zá2los zá2lü zá2ly1a2l zá2mac zá2m1a2d zá2m1aj zá2m1a2l zám1any zá2m1a2p záma2r zám1ará zá2maz zá2m1átl zá2m1á2to zá2mél zá2m1é2rő zá2m1ik zá2mip zá2mir zám1orm zám1ors zá2mó zá2mö zá2mő zá2m1ut zá2mü zá2mű zá2naj zá2n1as zá2n1at zá2n1át zá2nem zá2nis zá2n1it zán3n zá2n1osz zán1sp zá2nü zány2 zá2p1ad zá2p1ag zá2p1orzó zá1p2r z1á2radd zá2r1a2dot zá2r1a2l z1á2ramk z1á2raml zára2n zá2r1any zá2r1ap zá2rar zá2r1ati zá2r1a2to zá2r1att zá2r1av zá2r1ál 3zárás. 3zárása 3zárásb 3zárási zárás1s zá2r1á2sz z1árbev 3zárdá zár2dem zár2d3z 2zá2r1em zá2réb 2zárf 2z1á2riá zá2rid zá2r1i2k zá2rim zá2r1is zá2r1iz zár1k2 3zárkák 2zárkö 3zárlat 2zárnö 2zárny zár2nyál zá2r1osz 3záró. 3záróa zá2r1óbo 3záród zár1óév zá2r1ó2rá zá2rő 2zárré zárs2 zár1sk zárt1anyá zár2t1es zárté2r zár1tro zá2rug z1á2ruh z1áruj 2zárunkn 2zárunkr zá2rü z1árvah zá2s1a2d zá2saj zá2sal zá2s1a2r zá2s1at zá2saz zá2s1á2g zá2s1árad zá2s1á2rá zá2s1á2ré zá2s1árh zá2s1árn zá2s1árt z1á2sás zá2sep zás1ikon zá2sis zá2s1í zá2s1ol z1á2só. zás1ó2r z1ásóv zá2sut zá2sü zá2s3zav 3zászl zász3se z1átad zát1a2dó. zát1a2dók zátá2r 2zátb 2z1átc z1átd zát1e2m zá2tél 2z1átf 2záth z1átha z1áthe zá1t2hi z1á2t1i2 2z1átj 2z1átm zá1tra zá1tro 2záts 2z1átv zá2z1ala záza2t zá2z1ato zá2z1e2 zá2zév zá2z1ol zá2zos zázó2 zá2zór zá2zö zá2zsaj zá2zsas záz4sá zá2zsál zá2zsol zba2ki zbeá2 zb2le zb2lo zb2lú zb2ri zb2ró zb2rú zc2lu zcsa2p1á2g zda1p2 zdas2 z2d1ass zd1áll zdés1s zdő1s2p zd2ri zd1u2r 1ze zea2d zea2g zea2k zea2l zea2s zeán2sze zeá2r zeá2z 2z1eb. 2zebe ze2be. ze2bei ze2bek z1e2béd z1ebf z1ebh z1ebk 2z1ebn ze1bru 2zece z1e2cet z1e2ch z1e2cset ze2d1ál. ze2d1álj ze2d1áln ze2d1ált ze2d1álv zede2r1e ze2dil ze2d1ó2 2z1e2dz zee2s z1eff ze1fr ze2g1a2l ze2gap ze2gar ze2g1ál ze2g1ár ze2g1eg zeg1ell ze2gep zeget2t1eb zeg1érr zegé2sz zeg1észb zeg1észé ze2gid ze2gil ze2gol ze2gú ze2gyed ze2gy1e2l ze2gyene ze2gyez z1egyl z1egys ze2het ze2ia zei2g zei2s zeí2r zekci2ósz zek1e2gy ze2k1ell z1e2kéit 2zekék ze2kil ze1k2lap ze2k1ott zek1övek ze2kő ze1k2reá zek1t2 ze2k1ü2lő z1ekviv ze2lag ze2lar ze2lál z1elbo 2zeledel z1e2lefá ze2leji 2zelekt ze2leme. ze2lemek zelem1el zele2m1ér. ze2lemű zele2pá zele2p1el zele2po zele2p1ü2l z1e2l1e2re ze2l1esz zele2tá zele2ter 2z1e2lég 2z1eléré zel1érh zelés1s z1elhá 2z1elhel 2z1elher ze2litet z1elkü 2z1elláto 2zellen z1ellene 2z1elnev z1elnö ze2lof z1e2los z1e2lö2l z1elön 2z1e2lőha zelő2saj z1e2lőző z1első z1eltá 2z1eltér 2z1elto 2z1eltű z1e2lu 2z1e2lú z1elv. z1elvek z1elves 2z1elvev z1elvez z1elvn z1elvt 2z1elvű z1elzá 2zema ze2mak ze2m1ág ze2m1ár ze2mát 2zember z1ember. z1emberb z1emberé z1emberh z1emberk z1embern z1emberr z1embert z1embl 2zeme. ze2m1egé 2zemei 2zemek ze2m1ell ze2m1eng 2zeméb 2zeméh ze2m1ék ze2m1éle ze2m1é2lé ze2m1é2lő ze2m1élt ze2m1élv ze2m1é2rét 2zemés zemé2te ze2m1éten ze2m1étet ze2m1étjé 2zemév ze2migr ze2m1ing ze2m1int ze2mis ze2m1iz ze2m1í 2zemk 2zeml 2zemmó ze2mol ze2m1osz ze2m1ó2 ze2m1ő 2zems z1emul zem1ur ze2mú 2zemü 2zemv zemvíz1 3zeneir 3zeneka zenesz2 3zenéé 3zenéi 3zenéj ze2nép zenké2 zenkét1 ze2n1o zen2tag zen2tal zen2t1an zen2t1as zente2g zen2t1egy zen2telm zen2t1ere zen2tev zen2t1é2j zen2t1imr zen2tip zen2tis zen2tí zen2tol zen2t1ó2 zen2t1ö zentő2s zen2t1őse 2zenz zeo2k zeo2m zeö2r 2zepééb 2zepééi 2zepéén 2zepéit 2z1epéj 2z1e2pém 2z1e2pés z1epiz ze1pla ze1ple 2zepr ze1p2ri ze1pró ze2r1a2d ze2rajá ze2r1ajt ze2rakr ze2r1al ze2ram ze2r1a2n ze2r1a2r ze2r1as ze2r1a2t ze2r1au ze2raz ze2r1ága ze2r1á2r ze2rás ze2r1á2t zer2bin zer1d2 z1erdé ze2r1eb ze2r1e2ce ze2redé ze2rege zer1e2ge. ze2r1e2gé ze2r1egg ze2r1egy z1e2reje zer1ejt z1e2rejü z1e2rejű ze2r1e2ke. z1e2rekl ze2relődj ze2r1ember ze2r1emi ze2r1eng zere2p1a ze2r1e2r ze2r1e2sés ze2r1essz ze2r1este zer1e2sze. zer1eszk ze2reszt ze2r1eu ze2r1e2v ze2rég ze2r1é2j ze2r1ék ze2r1é2l ze2r1ép zer1g2 ze2r1i2d ze2r1iga ze2r1iko ze2r1ill ze2r1i2m ze2r1ina ze2rind ze2r1inf ze2r1ing ze2r1inj ze2r1ink ze2r1intel ze2r1inté zer1intő ze2rio ze2rism ze2riz ze2r1í2j zer1k2 zer2nal ze2r1okt ze2r1old ze2rolv ze2ror ze2r1ost ze2r1osz ze2roti ze2r1ó2r ze2rök 2ze2rő z1erő. z1erőf z1erői z1erők z1eről z1erőn z1erős z1erőt z1erőv zer1őz zer1p2 zer1s zers2k zers2p zers2t zert1á2lom zer2tit zer2tór zer1tra zer1tren ze2r1un ze2rur ze2rus ze2r1u2t ze2r1út ze2r1ü2g 2zerű zer2v1a2dó zer2van zer2vel zer2vél 2z1e2sedék ze2s1e2kéh z1e2setb z1e2sete. z1esetes z1e2setet z1e2seté z1e2seti z1e2setr 2z1e2sés. 2z1e2sésb 2z1esésd 2z1e2sése. 2z1e2sései 2z1e2sések 2z1e2sésem 2z1e2sésen 2z1e2séses 2z1e2sésé 2z1e2sésh 2z1e2sési 2z1e2sésk 2z1e2sésn 2z1e2sésr 2z1e2séss 2z1e2sést ze2s1it ze1s2mi 2z1e2ső zesp2 ze1s2pe ze1spr 2zeste z1estek z1estem 2z1esté z1esti. ze1s2til 2z1estj ze1sto z1estre z1estt ze2s1ü2v zes3zac ze2szág zesz1e2get ze2szelle ze2szeng ze2széh ze2sz1é2le ze2sz1im ze2szip 2zeszk z1eszkö ze2szol zeszt2 zesz1tr ze2t1ab ze2tac ze2t1ala ze2t1a2ny ze2táj ze2t1á2l ze2t1á2p ze2t1át zet1egé zet1elá ze2t1ell ze2telm ze2t1e2lőá ze2t1e2lőd ze2t1elr zet1emel ze2t1eml ze2tene zet1erk zet1e2ró zete2s1ég zetest2 zetes1tr z1e2teté ze2t1eti ze2tetn ze2t1éd ze2t1é2j ze2t1é2l ze2térte ze2t1érté zet1értő ze2t1é2rü zeté2sz zet1észe zet1éter ze2tid z1e2tika ze2t1i2ko zet1ill ze2t1ing ze2tít zetkész1e ze2tom zet1ont ze2top ze2t1ó2r ze2t1ö2v zet1őri zet1őrö zet1őrt ze2tut ze2tür ze2t1ü2z ze2ty zeu2g z1e2ur zeü2t z1e2vő ze2x1id ze2xim ze2x1i2p z1expe zex2t1ö ze2xú z1e2zer z1ezr 1zé z1é2ber 2z1ébr zé2dak zé2d1a2l zé2d1a2r zé2d1as zé2dat zé2d1á2 zé2d1ekét zé2d1e2lem zé2delm zéde2r1 zéd1esem zé2d1esz zé2d1eti zé2d1és zé2dik zé2dó zé2d1ő zédren2 zédu2 zé2dur zé2dú zé2d3z zé2fá z1ég. z1égb z1é2ge zé2gé z1é2gi z1égn z1é2gő z1égr z1égt z1é2he. z1é2hen 2z1é2hes z1é2het 2z1éhs 2zéid z1éj. zé2jen z1é2ji zéjje2l1e2 z1éjs 2z1éjül 2z1é2jün zé2k1a2d zé2k1a2l zé2k1a2n zé2k1ap zé2k1as zé2kás zé2k1eg zé2k1e2két zé2k1elr zé2ker z1é2kez zé2k1ék zé2k1é2l zé2k1és zék1old zék1osz zé2k1ó2 zé2kör zé2kúr zékü2l zé2k1ülé zé2k1ülő zéla2 zé2lab zé2lad zé2lak zé2l1an zé2las zé2l1á2 2zé2le2l zél1ele zél1ell zél1elő zél1elt zé2l1e2r 2zélet. 2z1é2letb 2z1é2lete. 2z1é2leten 2z1é2leté zé2letf 2z1é2leth 2z1é2leti 2z1é2letn 2z1é2letp 2z1é2letr 2z1é2lets 2z1é2lettő 2z1é2letü 2z1é2letű 2zélé zé2l1ékh zé2lim zé2l1ist zé2lí 2zélm zé2l1o zé2l1ö2 2zélős 2zélt zé2l1u2 zé2lú zé2lya zé2lyá zé2ly1esh zé2lyo 2zéme zé2n1árn zéndio2 zé2neg 2z1é2nekb 2z1é2neke z1é2neké zé2nekk 2zénekl z1é2nekn zé2nekr zé2nekü zé2n1e2l zé2n1e2r zéni2 zé2nik zé2nil zé2nim zé2n1io zé2n1is zé2ní zé2nom zé2nö zé2nő zént2 zé2n1ü2lő zé2p1a2g zé2p1a2l zé2p1any zé2p1a2p zé2p1a2r zé2pas zé2pat zé2pau zé2pav zé2p1á2r zé2pát zé2peg zép1ell zé2pez zép1f2 zé2pin zé2p1i2p zé2pir zé2p1i2s 2zépít zépo2 zé2pol zé2pos zé2pó zé2pö zép1s zé2pud zé2p1us zé2pú 2zépül zé2rab zé2rag zé2r1a2l z1é2ram zé2r1a2n zé2rap zé2rar zé2r1as zé2rat zé2rav zé2r1á2 zér1d2 zé2r1e2lemé zé2r1e2lemk zé2r1e2lemn zé2remb zér1eml zé2r1esz 2zérett zé2rev zé2rés. zé2résb zé2rése zé2rési zé2résk zé2résn zé2r1id zé2rim zé2ris zé2r1o2k zé2r1os 3zérós zé2rö 2z1é2rő. z1é2rői z1é2rők zé2rős z1é2rőt zér1s zér2taj 2zértekez 2zértelm 2z1értetl 2z1értető 2z1érték 2z1érthet z1érto zé2rú zé2sab zé2san zé2sar zé2s1az zé2s1á2 zé2seg zé2s1e2l zé2s1e2r zé2s1eti zé2s1ég zé2sés zé2s1i2k zé2sok zé2só zés3s zé2s1ü2t zé2s3za z1észb z1é2szé z1észl zé2szó zés3zs zé2t1a2b zé2t1ad zé2tag zé2t1aj zé2t1a2k zé2t1a2l zé2t1ap zé2t1a2s zé2t1au zé2t1á2 zéte2n zéte2se zéte2sü zé2tég zé2t1é2n zé2t1i2 2zétk zé2tol zé2t1o2m zé2tor zé2t1o2s zé2tun zé2tú zé2t1ü2 zé2t1ű 2zétv 2z1év. 2z1évad z1évb 2z1é2ve. 2z1é2vek 2z1é2ven 2z1é2ves z1é2vén z1é2vét z1é2vév z1évf 2zévi z1é2vi. z1évk 2z1évn z1évr z1évs z1évt z1é2vü 2z1évv zfa2l1a2da zfa2l1aj zfa2l1e2l zfa2les zfe2l1em zfe2len zfe2reg zf2la zf2le zf2li zf2lo zf2ló zfora2 zfo2rat zfo2riz zföldié2 zf2ra zf2rá zf2re zf2ri zf2rí zf2ro zf2rö zgás3s zgá2s3z zgá2zó zgé2p1e2két zgé2sa zgé2sá zgé2sem zgés3s zg2la zg2ló zgó1g2 zgő2nyá zgő2z1á2 zgő2zér zgő2z1ő z1g2ra z1g2ráf. z1g2ráff z1g2ráfh z1g2ráfj z1g2ráfk z1g2ráfn z1g2ráfr zg2ró z1g2ru zhán2 zhá2t1a2d zházköz1 1zi zi2aa zi2aá zi2abo zi2ac zi2ad zi2ae zi2aé zi2ag zi2ah zi2aí zi2aj zi2akép zi2akó zi2al zi2am zi2ao zi2aö zi2a1p2 zi2ar zi2asza zi2aszo zi2aszó zi2at zi2au2 zi2aú zi2aü zi2av 2z1ibr 2zicc zi1ch z1i2deá z1i2deg z1i2deo zi2dén 2z1i2dő zie2l zie2m zi2éa zi2éá zi2éke zi2ép zi2éta zi2étá zi2éü z1ifj z2ig. zi2ga. 2z1igazg 2z1i2gazo z1i2gás zi2géj 2z1i2gén zi1g2r 2zigye zi2k1a2n zik1ékek zi2kik zi2kim zi2k1ing zi1klu zi2k1u2r zikus1s zi2ler zi2l1é2j zi2l1ék zi2l1ing zi2l1ü z1i2ma. zi2mak zi2máb zi2máj zi2mák zim1áll zi2már zi2mát zi2máz zim1b zi2m1e2g zi2m1e2l zi2m1é2ré zi2m1érté zim1ind zi2m1ip z1i2mit zi2mö zi2n1a2d zi2n1a2l zi2n1a2n zi2n1a2r 2z1i2nas zi2n1au zi2nái zi2n1áll z1indu zin1emb zi2nég zin2gas zin2gál zi2n1i2m zi2n1in zi2ní zin3n zi2nol zin1s2 zin2t1a2d zin2t1a2l zin2t1a2s zin2tát zin2t1á2z zinte2l zin2t1ele zin2telő zin2telt z1interj z1interp z1interv zin2tom zin2t1ón zi2n1u2t zi2nú zi2ol 2z1i2ono 2z1i2ons zi2ot zi2óa zi2óá zi2óc zi2óe zi2óg zi2óí zi2ókam zi2ókap zi2óká zi2óke zi2ó1kl zi2ól zi2ómá zi2ómé zi2óné zi2óny zi2óo zi2ó1p2 zi2órá zi2ósá zi2ósé zi2ó1s2ká zi2ó1sp zi2ószű zi2óta zi2ótá zi2óú zi2óü zi2óű zi2pai zi2pari zi2páj zi1p2l zi1p2r z1i2rat 2zirá z1i2rán z2i3re 2ziro z1i2rod zi2rón z2i3rő 2zirt zir2t1a2 z1irtá zir2to z1irtó zi2sad zi2sal zi2sam zi2sar zi2s1a2s zi2sál zi2s1áro zi2s1e2g zi2s1e2l zi2s1er zise2s zi2s1ese zi2s1esz zi2s1ék zi2sérte zis1évi zi2s1il zi2sin zi2s1is zi2sit zi2s1o2v zi2s1ó2 zi2sö zi2ső ziss2 zis3sza zis3szá zis3szo zist2 zis1tra zis1tre zi2sut zi2s1ü2v zi2s3zaj zis3zav zis3zón zi2t1áll zit1áru zi2t1e2g zi2t1elr zit1eng zi2tét zi2til zi2tin zi2tip zi2tir zi2t1or zitó2 zi2tór zi2t1út ziú2r z1i2vad 2z1i2vó 2z1i2zé 2zizm z1izmo z1i2zom 1zí zí2gé zí2jan zí2je zí2jö zí2jü zí2nac zí2nad zí2naku zí2nal zí2nan zí2nas zí2nat zí2n1áll zí2n1ár zí2nát zí2n1e2r zí2nél zí2ní z1ínna zín3nye zíno2 zí2n1od zí2n1ok zí2nos zí2n1ó2 zí2nö zí2nu zí2nú z1í2ny zínyenc1 zí2r1a 2z1í2rá zí2rog 2z1í2ró zítőa2 zítőe2 zítőkész1 zí2vaj zív1akt zí2val zí2var zí2ver zí2v1ő zí2vul zí2vú zí2ze zí2zü zí2zű zje2gy1á2 z2k1abl z2k1alak z2k1alj z2k1alt zka1p2l z2k1a2rád z2k1a2ráj z2k1a2rén zkaró2 zka2rór zka1s2k z2k1állv zk1bl zk1dr zk1egys z2kenn zk1eszk z2k1etű z2k1ér. z2k1érté z1k2hü zkia2 zkiá2 zkie2 zki2g z2k1igé zki2sé zk2la z1k2lá zk2ler z1k2lí zk2ló z1k2lu z2k1olda zkon2t1ár z2k1ontó zko2r1os z2k1oszl z3koszt z2kókor zk1ókort zkó2pá zkó2z3s zkö2zele zköz1ell zkö2z1é2l zkőé2h zk1pr z1k2rak zk2rá z1k2reá z1k2rém z1k2réta z1k2rétá zk2rí z1k2ro z1k2rón zkultú3 zkultúr2 z2k1u2rán z2k1u2rát. z2k1utá z1k2val zk2vó zky2b zky2h zky2j zky2k zky2n zky2r zky2t zky2v zla2tal zlata2n zlat1any zlá2m1e zlá2mis zlás3s z2láv. z2láve z2lávé z2lávk z2lávn z2lávo z2lávv zleg1g zlei2 zleí2 z2leng. zle2tak zle2tal zle2t1a2n zle2tál zle2t1á2r zle2t1eg zle2t1ell zle2tesz zle2tél zle2t1ér. zlet1érv zle2tés zle2t1é2té zle2t1é2ve. zletigaz1 zle2t1u zle2tüz zlé2sí zlé2so zlés3s zlina2 zli2nan zli2nin z2loge zlo2p1as zlo2pó zlóó2 zló2s1orr zma1pr zmas2 zma1sp zmeá2 zme2ge zme3gom zmi2n1a2 zmi2n1e zmuskész1 zmu2sö zmu2s3z zmu2tok zna2pes znie2 zni2ó z2nob znó1str znót2 znó1tr 1zo z1obj z1o2dú zo2es z1o2ka. z1o2k1a2d z1o2kai zo2k1ál zoki2 zo2k1ip z1o2k1ir z1okke z1okle 2z1o2koz 2zokta zo2lab 2z1o2laj zolajá2 zola2j1ár zola2je zo2l1a2l zo2l1as zol1ábr zo2l1áro z1oldal 2z1oldh 2z1oldó zo2l1e zol1f2 zol1inf zo2l1is zo2l1í z1olló zo2lö z1oltás z1oltó. zol1t2re zo2lü 2zolvad zo2m1a2g zo2mak zo2m1a2l zo2m1a2n zo2map zo2m1a2s zom1áll zo2m1á2r zom1b2 3zombor. 2zome zo2meg zo2m1el zo2men 2zomé zo2mél zomé2t zo2m1éte 2zomf 2zomg zomi2 zo2min zo2miz zom2jó 2zoml zo2m1ors zo2m1os 2zo2mö 2zom1p2 2zom1s 2zomz zo2n1aj zo2n1ak zo2n1a2la zo2n1alá zo2n1alk zona2n zo2n1any zo2n1a2r zon1asz zo2n1au zo2náld zo2n1áll zo2n1átl zone2 zo2neg zo2nel zo2n1er zo2nes zo2név zo2nin zo2n1i2o zo2n1or zono2sé zo2n1ó2 zo2nö zon1s2 zon2t1es zon2tin zon1tre zo2nü zo2ny1ad zo2ny1a2l zo2ny1a2n zo2nyar zo2nyav zo2nye zo2nyid zo2nyij zo2nyó zo2ol zo2om z1opál z1o2pe zo1pho zo2r1a2d zo2raf zo2r1ag zo2r1aj zo2r1a2l zo2ran zo2r1as z1o2rat zo2r1au zo2r1e2 zor1f2 zo2rid zo2r1il zor1ing z1ormá zo2r1ol zo2rop zo2rosz zo2r1ó2 zo2rö z1orr. z1orrú z1orsó zor1t2re zo2rü 2z1osko z1ostá z1osto zo1sz2f z1oszl zosz2tat 2zote 2zotó zotó2pa zo2vi zo2xi 1zó zóa2d zóá2g zóá2r zó1bl zó1b2r zó1cl zó2d1e2l zó1fl zó1f2r zó1gl zógyö2k1ér zói2g zóí2v zója1 zó1k2l zó1kré zókupac1 2zól. z1ólm zó2lomb 3zónád 3zónái z1ó2ni 2z1ónj 2z1ónn z1ó2nod 2z1ónt zóó2r zó1p2l zó1p2r z1ó2rad z1ó2rar zó2rasz zó2rái z1ó2ráj z1ó2rák z1ó2rár zórás1s z1ó2rát z1ó2ráv z1ó2riá zós1ík. zó2s1ín. zó1s2ká zó1sl zó1s2ta zó1sté zósz1akad zósz1állí zó2szene zó2sz1é2le zó2sz1íj zósz1ü2lő. zóta2g1a2 zóté2g zót1ége zó1tré z1ó2vó 1zö zö2bá zö2bo zö2bó z1öcc zö2dé zö2dú zö2ga zö2gá zög3g zö2gil zö2gí zö2go zögö2 zö2g1öl zö2gu zö2gy 2z1ökl 2z1ö2ko 2zökrü 3zöldes 3zölds 2zöleb zö2les 2z1ölniv z1ölyv 2z1öml z1ö2na z1ö2ná 2zönb 2zöne 2zöné 2zöni 2zönl 2zönne 2zönö 2zönr 2zönt 3zörej zör2f1e zör2f1o zör2nya zör2nyá zör2nyel zör2nyesz zör2nyék zör2nyí zö2rök zör2p1a2 zör2pá 2z1örv 2zössz z1ösv z1ösztö zö2te 2z1ötl 2z1ötv z1öv. z1ö2vei z1ö2vek zöve2t1e2l z1ö2vez zö2zö 1ző zőa2c zőa2l zőá2g ző1bl ző1br zőé2l ző1fl ző1f2r zőgépi2 zőgé2p1ip ző1gr ző1kl zőmű1 zőnyá2 ző2ny1er ző2ny1é2k ző2nyért ző1pl ző1pr ző2ran ző2r1e2c ző2r1ege ző2rel ző2r1er 2zőrk 2zőrl z1őrlő 2zőrm ző2rol 2zőrü ző2r1ü2g 2zőrz z1őrzé z1őrző ző2sis ző1ská ző1spe ző1s2pi ző1sta ző1sti ző1str zősz2 ző1szf ző1szt ző1tr zőü2l zpen1n zp2fe zp2la zp2lé zp2lo zpor2t1e2 zpor2t1ő2 zpor2t1ú z1p2ra z1p2ri z1p2ro z1p2ru zrae3le zrádiói2t zre2d1á2 zre2del zre2d1é2k zre2d3z zren2d1ő2 3z2rí. z2s 1zsa zs1abla 2zs1a2dat 2zs1a2dó zsag2 2zsah. 2zsajt 2zs1akc 2zs1alj 2zs1alm 2zs1alt zsa2nyá zsa2pa. 2z3sapk zsa2rán z3sarj 2z3sark 2z3sarl 2zs1arz 2zs1aszt zs1atl zsa1tr 2zs1a2ty 2zsautó. 2zsautón zs1azo 1zsá 2zs1ábr 2z3sáf 2z3ság zs1ággy zsá2kó 2zs1ála 2zsálc 2zsálm 2zs1á2p 2zs1á2rak 2zsárat 2z3sári 2zsáru 2zsáte 2zs1átk 2zsáto 2zsátö 2zs1áts 2zs1á2zós zs1bl zs1br z3s2ch zscsapá2 zsde1s zs1dr 1zse zse2ba zse2biro zse2b1o2 2zsebz zs1e2ce zs1e2dé z3sej 2zsell zs1elm 2zselö zs1e2lőf zs1e2lőr 2zsember 2zs1e2mel zs1enc zs1ene zse2raj zse2r1á2 zse2rel zsere2s zse2r1esz zse2r1ék zse2rin zse2r1o 2zsese zse2szü zs1evé 2zs1ex 2zsez 1zsé z3ség zsé2ge2l 2zséhs 2zsél zs1éle 2zsép 2zs1érd 2zs1érte 2zs1érté 3zséry 2zsérz 2zséte 2zs1étk 2zs1étr 2zs1étt 2zs1é2ve. zs1fl zs1fr zs1gr 1zsi 2zsidő 2zsigá 2zsigé zsi2kor 2zs1ill 2zs1i2má zsi2min zsi2m1u 2zsinas zs1i2pa z3sipk 2zsirat zs1irato 2zs1iro 2zs1irt 2zs1ism 2zsist zsi2tat 2zsivó zs1izé 2zs1izm 2zs1i2zo zs1izz 1zsí 2z3síb zs1íj 2z3sík 2z3síp zsí2r1a2 zsí2rá2 3zsírbó 3zsíré 3zsíros 3zsírr 3zsírt2 2zs1í2v 2zs1í2z zs1kl zs1k2r 1zso 2z3sof 2zs1okm 2zs1okta 2zsolaj zs1oli 3zsom 2zs1op 2zsor z3soro 2zsosty 2zs1osz 1zsó zs1óné zs1órá 1zsö 2zsökör 2zsölőz 2zs1ös zs1ö2ve 1zső zs2pir zs1p2l zsp2r zs1s2k zs1s2p zs1st zs3sz zssze2r1e2l z3s2tad z3s2tat z3s2top zst2r zs1tro z3s2tú 1zsu 2zs1ud 2zsugár. 2zsugárr 2zsugr 3zsul 2zsum zsu1s zsusz2 1zsú 2zs1új 2zsúl zsú2r1a 1zsü 2zsüg 2zsült 2zsünn zs1üs 2zsüt 2zs1üz 1zsű zs1wh zs3zac z3szag zsza2ké zsza2k1ü z3szav zs3záp zs3zás z3szem zs3zené z3szer z3szé zsz2f z3szi zszind2 z3szí z3sz2k zsz2l z3szo z3szó z3szö zsz2p zs3zs zsz2t2 z3szü z3szű zt1abla z2t1a2bor z2t1a2cé z2ta2dal zt1a2dat zt1a2dó z2t1agre z2t1a2ká z2t1akc z2t1akk zt1akn ztaköz1 z2t1akv zt1a2lapú ztale2l zta2lele z2t1anal ztan2e zt1anes zt1anké zta2n1ó2 zt1a2nyag zt1anyak zt1anyas zt1anyád zt1anyám zt1anyáu z2t1anyu zt1a2pán zt1a2pás zt1a2pát z2t1apó zt1app z2t1aps zt1a2puk z2t1a2ra. zt1arán z2t1arc ztaso2 zta1sp zt1assz z2taszt zt1aszta z2tatig z2t1atk z2t1aty z2t1a2ut zt1ábr ztá2cs zt1ácso zt1ág. z2t1á2ga z2táli z2t1álm ztá2raj ztá2r1ass zt1árem ztá2ris z2t1árnö zt1árnya z2tároc z2tárokk ztá2r1olt ztá2r1óra ztár1sm ztár1s2p ztárt2 zt1árví ztá2sz zt1ászo zt1ászt z2t1átha z2t1áts z2t1átv ztávi2 ztá2v1ir zt1bl zt1dr z2t1e2b z2t1ef z2t1e2gé z2t1egy z2t1e2ke. z2t1e2kés z2t1ela z2t1elá z2t1elb z2t1e2legy z2t1e2leme z2t1e2lemm z2telemz z2t1elf z2t1eljá z2t1ellát z2t1elm z2telnö z2t1e2lo zt1e2lőadá z2t1e2lőc z2t1elr z2t1eltá z2t1elto z2t1ember z2t1e2mel z2t1eml z2tent zt1ente zte2raj zte2rak zte2rál zte2rár z2terde ztere2ot zte2repo zte2rill zte2ris zte2riz zte2rosz z2t1e2rot z2t1e2ró z2t1erő zte2r1ü2lé zte2sz z2t1esze z2t1eszé z2t1eszk z2t1ezr zt1ég. zt1égb zt1é2gé zt1égr z2t1é2j zté2k1e2l z2t1ékné z2t1é2le z2télé zt1é2lés z2t1élm z2t1é2lő z2t1élt zt1élű z2t1épü zté2rá z2t1érd z2t1érl z2t1érté z2t1érz zté2sz z2t1észh z2t1észn zté2tét z2t1étk zt1é2ves. zt1évt zt1fl zt1fr zt1gr z1t2hen ztia2g zt1i2den z2t1idé z2tidi z2t1ifj z2t1i2gé z2t1i2kon z2t1ille z2timá z2t1imp z2t1ind z2tinfe z2t1info z2t1ing. z2t1ingá z2t1ingb z2t1inge z2t1ingé z2t1ingg z2tingu z2t1inte z2t1inté z2t1invá zti2p z2t1ipa z2t1irá z2t1isk z2t1ism z2t1istá z2t1iste z2tital z2t1i2tat z2t1íj z2t1í2r zt1í2veke zt1kl zt1kr zt1kv z2toi z2t1o2koz z2t1oltó zto2lyag zt1ope zto2ras zto2r1e z2t1orgi ztorkész1 zt1ornam z2torrú z2torvo z2t1oszl zt1osztá ztóá2 ztóigaz1 z2t1ó2ni ztó1p2 ztó1sp ztó1tr zt1öko ztö2l z2t1öle ztön3n ztö2röks z2t1öss zt1ö2vez zt1övig z2t1öz ztőa2 ztőe2l ztőé2b z2t1őrh zt1őrl z2t1őrs zt1ő2sei z2t1ő2sö zt1ősű zt1pl zt1pr zt1ps z1tranz zt2rádá z1t2rág z1tréf z1t2rén z1trikó z1tril z1t2rió z1t2rü zt1sl zt1sn zt1sp zt1st zt1sz zt1t2r z2t1udv z2t1ug z2t1ura z2t1uru ztus3s zt1u2tat z2t1utu z2t1új z2t1úr. z2t1úrb z2t1ú2ré z2t1úrh z2t1ú2ri z2t1úrk z2t1úrn z2t1ú2ro z2t1úrr z2t1úrt z2t1üg ztü2lé z2t1ülés ztül1l z2t1üt z2t1ü2v zt1ü2zem z2t1űr. z2t1ű2ri z2tye 1zu zu2b1a 3zubb zu2b1i zu2bu zu2c3s 3zug. zu2gag zu2gap zu2gáru zu2g1ás 3zugb zu2g1e2 zu2gé zu2gin zu2git zu2giv zu2gí 3zugo zu2g1or zu2gö zu2gü zu2gű 3zuha zule2 zu2lel zu2l1enc zu2l1es zuli2ná zu2lú zulya2 zu2ly1ag zu2mab zu2m1a2d zu2maj zu2mal zu2mar zu2m1as zume2 zumegyez1 zu2mel zu2m1en zu2mél zu2m1é2n zu2m1id zu2m1in zu2m1i2p zu2mí zumkész1 zu2mol zu2mő zu2mur zu2mü 2zund z1undo zu2ne zu2n1é 2zuni zu2n1ö2 zu2ral zu2ram zurat2 2z1urn zu2rú zu2sad zus1aka zu2sal zusa2n zus1any zu2sas zu2s1ág zu2s1e2 zu2s1érté zu2sis zu2s1í zuskész1 zu2s1ol zu2s1ó2 zu2ső zuss2 zussz2 zus3sze zus3szi zust2 zus1tr zu2s1ü2 zu2sz1i2k zu2szon zu2s3zó 2z1u2ta z1u2tá 2z1utc zu2tol zu2tó. zu2tób zu2tói zu2tój zu2tón z1u2tu 1zú zú1dr zú1fl 3zúgá z1újd z1ú2jé z1ú2jí z1újs zú2r1e2 zúré2t z1ú2szás zú2té. z1ú2tér z1úth z1úti zú2ti. zú2tiak. 3z2útiaka zú2tiakr zú2tib zú2tig zú2tih zú2tin zú2tiv z1ú2tí z1útj z1útn z1ú2ton z1útró z1útt zú2tü z1útv 3zúzá 3zúzd 3zúzó 1zü zü2dü zügy1és z1ügyk z1üldö z1ü2lep z1ü2lőseb z1ü2lőset zü2ni 2zünn zü2rí z1ü2rü z1ü2te z1ü2té z1ütk z1ü2tő zü2ve zü2vö zü2zen z1üzl 1zű zű2csa zű2csá zű2csip zű2cs1o zű2ra zű2rá zűrés3s zű2r1i2z z1űrla zű2ró zű2ru zű2z1a2 zű2z1á zű2ze zűzé2r zű2z1ére zű2zo z1ű2ző zű2zs zű2zú zva2su zvárosé2 zváro2s1om zve2gya zvé2nyel z2vit. zvi2tác z2vitj zy1ak z1yar zy2be zy2je zy2ne zy2né zy2re zy2rő zy2sa zy2so zy2tő zy2ve z2z1áll zzá2r1ó2r zzát2 zzá1tr zzi2n1é2 zz2le zz1ly z2zs z3zsák z3zsám z3zsi z3zsí z3zso}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-la.rme0000644000175000017500000001071611761001300024631 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Latin hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: lahyph.tex (2007-09-03) % Author: Claudio Beccari % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % ********** lahyph.tex ************* % % Copyright 1999- 2001 Claudio Beccari % [latin hyphenation patterns] % % ----------------------------------------------------------------- % IMPORTANT NOTICE: % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % ----------------------------------------------------------------- % % Patterns for the latin language mainly in modern spelling % (u when u is needed and v when v is needed); medieval spelling % with the ligatures \ae and \oe and the (uncial) lowercase `v' % written as a `u' is also supported; apparently there is no conflict % between the patterns of modern Latin and those of medieval Latin. % % Support for font encoding T1 with a 256-character set. % % Prepared by Claudio Beccari % Politecnico di Torino % Torino, Italy % e-mail beccari@polito.it % % 1999/03/10 Integration of `lahyph7.tex' and `lahyph8.tex' into % one file `lahyph.tex' supporting fonts in OT1 and T1 encoding by % Bernd Raichle using the macro code from `dehypht.tex' (this code % is Copyright 1993,1994,1998,1999 Bernd Raichle/DANTE e.V.). % % 2010/05/31 Removal of OT1 support % 2010/06/01 Removal of pattern 2'2 (probably a leftover from Italian) % % \versionnumber{3.2} \versiondate{2010/06/01} % % Information after \endinput. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \message{Latin Hyphenation Patterns `lahyph' Version 3.2 <2010/06/01>} % % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-de.rme0000644000175000017500000000176612161703335024646 0ustar norbertnorbert% generated by mtxrun --script pattern --convert German hyphenation patterns (reformed orthography) (more info about the licence to be added later) % dehyphn-x-2013-05-26.pat \message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2013-05-26 (WL)} % TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung % % % Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 Werner Lemberg % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % % The word list is available from % % http://repo.or.cz/w/wortliste.git?a=commit;h=6e4755b1055a5983ccf6929793a90d2fdfa4a203 % % The used patgen parameters are % % 1 1 | 2 5 | 1 1 1 % 2 2 | 2 5 | 1 2 1 % 3 3 | 2 6 | 1 1 1 % 4 4 | 2 6 | 1 4 1 % 5 5 | 2 7 | 1 1 1 % 6 6 | 2 7 | 1 6 1 % 7 7 | 2 13 | 1 4 1 % 8 8 | 2 13 | 1 8 1 context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-la.hyp0000644000175000017500000000017111761001300024640 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-la.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-la.lua0000644000175000017500000001520112161703335024635 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="la", ["source"]="hyph-la", ["texcomment"]="% Latin hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: lahyph.tex (2007-09-03)\ % Author: Claudio Beccari \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % ********** lahyph.tex *************\ %\ % Copyright 1999- 2001 Claudio Beccari\ % [latin hyphenation patterns]\ %\ % -----------------------------------------------------------------\ % IMPORTANT NOTICE:\ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ % -----------------------------------------------------------------\ %\ % Patterns for the latin language mainly in modern spelling\ % (u when u is needed and v when v is needed); medieval spelling\ % with the ligatures \\ae and \\oe and the (uncial) lowercase `v'\ % written as a `u' is also supported; apparently there is no conflict\ % between the patterns of modern Latin and those of medieval Latin.\ %\ % Support for font encoding T1 with a 256-character set.\ %\ % Prepared by Claudio Beccari\ % Politecnico di Torino\ % Torino, Italy\ % e-mail beccari@polito.it\ %\ % 1999/03/10 Integration of `lahyph7.tex' and `lahyph8.tex' into\ % one file `lahyph.tex' supporting fonts in OT1 and T1 encoding by\ % Bernd Raichle using the macro code from `dehypht.tex' (this code\ % is Copyright 1993,1994,1998,1999 Bernd Raichle/DANTE e.V.).\ %\ % 2010/05/31 Removal of OT1 support\ % 2010/06/01 Removal of pattern 2'2 (probably a leftover from Italian)\ %\ % \\versionnumber{3.2} \\versiondate{2010/06/01}\ %\ % Information after \\endinput.\ %\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %\ % \\message{Latin Hyphenation Patterns `lahyph' Version 3.2 <2010/06/01>}\ %\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvxzæœ", ["data"]=".a2b3l .anti1 .anti3m2n .circu2m1 .co2n1iun .di2s3cine .e2x1 .o2b3 .para1i .para1u .su2b3lu .su2b3r 2s3que. 2s3dem. 3p2sic 3p2neu æ1 œ1 a1ia a1ie a1io a1iu ae1a ae1o ae1u e1iu io1i o1ia o1ie o1io o1iu uo3u 1b 2bb 2bd b2l 2bm 2bn b2r 2bt 2bs 2b. 1c 2cc c2h2 c2l 2cm 2cn 2cq c2r 2cs 2ct 2cz 2c. 1d 2dd 2dg 2dm d2r 2ds 2dv 2d. 1f 2ff f2l 2fn f2r 2ft 2f. 1g 2gg 2gd 2gf g2l 2gm g2n g2r 2gs 2gv 2g. 1h 2hp 2ht 2h. 1j 1k 2kk k2h2 1l 2lb 2lc 2ld 2lf l3f2t 2lg 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2l. 1m 2mm 2mb 2mp 2ml 2mn 2mq 2mr 2mv 2m. 1n 2nb 2nc 2nd 2nf 2ng 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3m n2s3f 2nt 2nv 2nx 2n. 1p p2h p2l 2pn 2pp p2r 2ps 2pt 2pz 2php 2pht 2p. 1qu2 1r 2rb 2rc 2rd 2rf 2rg r2h 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt 2rv 2rz 2r. 1s2 2s3ph 2s3s 2stb 2stc 2std 2stf 2stg 2st3l 2stm 2stn 2stp 2stq 2sts 2stt 2stv 2s. 2st. 1t 2tb 2tc 2td 2tf 2tg t2h t2l t2r 2tm 2tn 2tp 2tq 2tt 2tv 2t. 1v v2l v2r 2vv 1x 2xt 2xx 2x. 1z 2z. a1ua a1ue a1ui a1uo a1uu e1ua e1ue e1ui e1uo e1uu i1ua i1ue i1ui i1uo i1uu o1ua o1ue o1ui o1uo o1uu u1ua u1ue u1ui u1uo u1uu a2l1ua a2l1ue a2l1ui a2l1uo a2l1uu e2l1ua e2l1ue e2l1ui e2l1uo e2l1uu i2l1ua i2l1ue i2l1ui i2l1uo i2l1uu o2l1ua o2l1ue o2l1ui o2l1uo o2l1uu u2l1ua u2l1ue u2l1ui u2l1uo u2l1uu a2m1ua a2m1ue a2m1ui a2m1uo a2m1uu e2m1ua e2m1ue e2m1ui e2m1uo e2m1uu i2m1ua i2m1ue i2m1ui i2m1uo i2m1uu o2m1ua o2m1ue o2m1ui o2m1uo o2m1uu u2m1ua u2m1ue u2m1ui u2m1uo u2m1uu a2n1ua a2n1ue a2n1ui a2n1uo a2n1uu e2n1ua e2n1ue e2n1ui e2n1uo e2n1uu i2n1ua i2n1ue i2n1ui i2n1uo i2n1uu o2n1ua o2n1ue o2n1ui o2n1uo o2n1uu u2n1ua u2n1ue u2n1ui u2n1uo u2n1uu a2r1ua a2r1ue a2r1ui a2r1uo a2r1uu e2r1ua e2r1ue e2r1ui e2r1uo e2r1uu i2r1ua i2r1ue i2r1ui i2r1uo i2r1uu o2r1ua o2r1ue o2r1ui o2r1uo o2r1uu u2r1ua u2r1ue u2r1ui u2r1uo u2r1uu", ["length"]=1756, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=335, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pt.pat0000644000175000017500000000315611761001300024661 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-pt.rme % used: - a b c d e f g h i j k l m n o p q r s t u v w x z á â ã ç é ê í ó ô õ ú \patterns{ 1b2l 1b2r 1ba 1be 1bi 1bo 1bu 1bá 1bâ 1bã 1bé 1bí 1bó 1bú 1bê 1bõ 1c2h 1c2l 1c2r 1ca 1ce 1ci 1co 1cu 1cá 1câ 1cã 1cé 1cí 1có 1cú 1cê 1cõ 1ça 1çe 1çi 1ço 1çu 1çá 1çâ 1çã 1çé 1çí 1çó 1çú 1çê 1çõ 1d2l 1d2r 1da 1de 1di 1do 1du 1dá 1dâ 1dã 1dé 1dí 1dó 1dú 1dê 1dõ 1f2l 1f2r 1fa 1fe 1fi 1fo 1fu 1fá 1fâ 1fã 1fé 1fí 1fó 1fú 1fê 1fõ 1g2l 1g2r 1ga 1ge 1gi 1go 1gu 1gu4a 1gu4e 1gu4i 1gu4o 1gá 1gâ 1gã 1gé 1gí 1gó 1gú 1gê 1gõ 1ja 1je 1ji 1jo 1ju 1já 1jâ 1jã 1jé 1jí 1jó 1jú 1jê 1jõ 1k2l 1k2r 1ka 1ke 1ki 1ko 1ku 1ká 1kâ 1kã 1ké 1kí 1kó 1kú 1kê 1kõ 1l2h 1la 1le 1li 1lo 1lu 1lá 1lâ 1lã 1lé 1lí 1ló 1lú 1lê 1lõ 1ma 1me 1mi 1mo 1mu 1má 1mâ 1mã 1mé 1mí 1mó 1mú 1mê 1mõ 1n2h 1na 1ne 1ni 1no 1nu 1ná 1nâ 1nã 1né 1ní 1nó 1nú 1nê 1nõ 1p2l 1p2r 1pa 1pe 1pi 1po 1pu 1pá 1pâ 1pã 1pé 1pí 1pó 1pú 1pê 1põ 1qu4a 1qu4e 1qu4i 1qu4o 1ra 1re 1ri 1ro 1ru 1rá 1râ 1rã 1ré 1rí 1ró 1rú 1rê 1rõ 1sa 1se 1si 1so 1su 1sá 1sâ 1sã 1sé 1sí 1só 1sú 1sê 1sõ 1t2l 1t2r 1ta 1te 1ti 1to 1tu 1tá 1tâ 1tã 1té 1tí 1tó 1tú 1tê 1tõ 1v2l 1v2r 1va 1ve 1vi 1vo 1vu 1vá 1vâ 1vã 1vé 1ví 1vó 1vú 1vê 1võ 1w2l 1w2r 1xa 1xe 1xi 1xo 1xu 1xá 1xâ 1xã 1xé 1xí 1xó 1xú 1xê 1xõ 1za 1ze 1zi 1zo 1zu 1zá 1zâ 1zã 1zé 1zí 1zó 1zú 1zê 1zõ a3a a3e a3o c3c e3a e3e e3o i3a i3e i3i i3o i3â i3ê i3ô o3a o3e o3o r3r s3s u3a u3e u3o u3u 1-}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sl.rme0000644000175000017500000000771311761001300024656 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Slovenian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: slhyph.tex (2007-01-29) % Author: Matjaž Vrečko % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % This is `slhyph.tex' as of 15. 4. 97. % % Copyright (C) 1990 Matjaž Vrečko, TeXCeX (SLO) % [slovenian hyphenation patterns] % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % This file contains slovene hyphen patterns with čšž % % Generation of hyphen patterns for TeX % % Matjaž Vrečko, TeXCeH (SLO), 1990 % Email: matjaz@mg-soft.si % % Changes: % 1990 First version of `hyphen.si' (Matjaž Vrečko, TeXCeX) % % Some cosmetic changes done later on, but none of these apply any more; % the patterns are still the same as they were originally: % % 1994-05-17 Use of code page 852 in patterns (Leon Žlajpah) % 1995-04-06 Release of `sihyph21.tex' % 1995-06-20 Added \slovenehyphenmins % Release of `sihyph22.tex' % 1997-15-04 Some changes concerning "c, "s, "z and ... % Release of `sihyph23.tex' % 2007-01-20 `sihyph23.tex' renamed to `slhyph.tex' % (sl is the proper language code for Slovenian) % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-it.rme0000644000175000017500000000320111761001300024640 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Italian hyphenation patterns (more info about the licence to be added later) % hyph-it.tex % % Italian hyphenation patterns % % This file is part of the hyph-utf8 package. % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % %% Copyright 2008-2011 Claudio Beccari % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3 of this license or (at your option) any later % version. The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions % of LaTeX version 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % This Current Maintainer of this work is Claudio Beccari % e-mail: claudio dot beccari at gmail dot com % % This work consists of the single file hyph-it.tex. % % \versionnumber{4.8i} \versiondate{2011/08/16} % % These hyphenation patterns for the Italian language are supposed to comply % with the Recommendation UNI 6461 on hyphenation issued by the Italian % Standards Institution (Ente Nazionale di Unificazione UNI). No guarantee % or declaration of fitness to any particular purpose is given and any % liability is disclaimed. % % ChangeLog: % - 2011-08-16 - Change the licence from GNU LGPL into LPPL v1.3. % - 2010-05-24 - Fix for Italian patterns for proper hyphenation of -ich and Ljubljana. % - 2008-06-09 - Import of original ithyph.tex into hyph-utf8 package. % - 2008-03-08 - (last change in ithyph.tex) % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-is.rme0000644000175000017500000000675011761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Icelandic hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: icehyph.tex (2004-03-08) % Author: Jorgen Pind % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % The Icelandic Plain TeX hyphenation tables % as of Nov 2 1988. % Jorgen Pind, Institute of Lexicography, Univ. of Iceland % jorgen@lexis.hi.is (Internet) % % Mar 2 2004: Uploaded a new version to CTAN, with a clarified license % statement, at the request of the author, Jorgen Pind. % Kristinn Gylfason (kristgy@ieee.org) % This file may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.2 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lv.hyp0000644000175000017500000000017111761001300024665 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-lv.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-es.pat0000644000175000017500000006637111761001300024655 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-es.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z á é í ñ ó ú \patterns{ 1b 4b. 2bb 2bc 2bd 2bf 2bg 2b1h 2bj 2bk 2bm 2bn 2bp 2bq 2bs 2bt 2bv 2bw 2bx 2by 2bz 1c 4c. 2cb 2cc 2cd 2cf 2cg 2cj 2ck 2cm 2cn 2cp 2cq 2cs 2ct 2cv 2cw 2cx 2cy 2cz 1d 4d. 2db 2dc 2dd 2df 2dg 2d1h 2dj 2dk 2dl 2dm 2dn 2dp 2dq 2ds 2dt 2dv 2dw 2dx 2dy 2dz 1f 4f. 2fb 2fc 2fd 2ff 2fg 2f1h 2fj 2fk 2fm 2fn 2fp 2fq 2fs 2ft 2fv 2fw 2fx 2fy 2fz 1g 4g. 2gb 2gc 2gd 2gf 2gg 2g1h 2gj 2gk 2gm 2gn 2gp 2gq 2gs 2gt 2gv 2gw 2gx 2gy 2gz 4h. 2hb 2hc 2hd 2hf 2hg 2h1h 2hj 2hk 2hl 2hm 2hn 2hp 2hq 2hr 2hs 2ht 2hv 2hw 2hx 2hy 2hz 1j 4j. 2jb 2jc 2jd 2jf 2jg 2j1h 2jj 2jk 2jl 2jm 2jn 2jp 2jq 2jr 2js 2jt 2jv 2jw 2jx 2jy 2jz 1k 4k. 2kb 2kc 2kd 2kf 2kg 2k1h 2kj 2kk 2km 2kn 2kp 2kq 2ks 2kt 2kv 2kw 2kx 2ky 2kz 1l 4l. 2lb 2lc 2ld 2lf 2lg 2l1h 2lj 2lk 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lx 2ly 2lz 1m 4m. 2mb 2mc 2md 2mf 2mg 2m1h 2mj 2mk 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2mx 2my 2mz 1n 4n. 2nb 2nc 2nd 2nf 2ng 2n1h 2nj 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns 2nt 2nv 2nw 2nx 2ny 2nz 1p 4p. 2pb 2pc 2pd 2pf 2pg 2p1h 2pj 2pk 2pm 2pn 2pp 2pq 2ps 2pt 2pv 2pw 2px 2py 2pz 1q 4q. 2qb 2qc 2qd 2qf 2qg 2q1h 2qj 2qk 2ql 2qm 2qn 2qp 2qq 2qr 2qs 2qt 2qv 2qw 2qx 2qy 2qz 1r 4r. 2rb 2rc 2rd 2rf 2rg 2r1h 2rj 2rk 2rl 2rm 2rn 2rp 2rq 2rs 2rt 2rv 2rw 2rx 2ry 2rz 1s 4s. 2sb 2sc 2sd 2sf 2sg 2s1h 2sj 2sk 2sl 2sm 2sn 2sp 2sq 2sr 2ss 2st 2sv 2sw 2sx 2sy 2sz 1t 4t. 2tb 2tc 2td 2tf 2tg 2t1h 2tj 2tk 2tm 2tn 2tp 2tq 2ts 2tt 2tv 2tw 2tx 2ty 2tz 1v 4v. 2vb 2vc 2vd 2vf 2vg 2v1h 2vj 2vk 2vm 2vn 2vp 2vq 2vs 2vt 2vv 2vw 2vx 2vy 2vz 1w 4w. 2wb 2wc 2wd 2wf 2wg 2w1h 2wj 2wk 2wl 2wm 2wn 2wp 2wq 2wr 2ws 2wt 2wv 2ww 2wx 2wy 2wz 1x 4x. 2xb 2xc 2xd 2xf 2xg 2x1h 2xj 2xk 2xl 2xm 2xn 2xp 2xq 2xr 2xs 2xt 2xv 2xw 2xx 2xy 2xz 1y 4y. 2yb 2yc 2yd 2yf 2yg 2y1h 2yj 2yk 2yl 2ym 2yn 2yp 2yq 2yr 2ys 2yt 2yv 2yw 2yx 2yy 2yz 1z 4z. 2zb 2zc 2zd 2zf 2zg 2z1h 2zj 2zk 2zl 2zm 2zn 2zp 2zq 2zr 2zs 2zt 2zv 2zw 2zx 2zy 2zz 1ñ 4ñ. c4h 4ch. 2chb 2chc 2chd 2chf 2chg 2chh 2chj 2chk ch2l 2chm 2chn 2chp 2chq ch2r 2chs 2cht 2chv 2chw 2chx 2chy 2chz l4l 4ll. 2llb 2llc 2lld 2llf 2llg 2llh 2llj 2llk 2lll 2llm 2lln 2llp 2llq 2llr 2lls 2llt 2llv 2llw 2llx 2lly 2llz b2l 4bl. 2bl2b 2bl2c 2bl2d 2bl2f 2bl2g 2bl2h 2bl2j 2bl2k 2bl2l 2bl2m 2bl2n 2bl2p 2bl2q 2bl2r 2bl2s 2bl2t 2bl2v 2bl2w 2bl2x 2bl2y 2bl2z c2l 4cl. 2cl2b 2cl2c 2cl2d 2cl2f 2cl2g 2cl2h 2cl2j 2cl2k 2cl2l 2cl2m 2cl2n 2cl2p 2cl2q 2cl2r 2cl2s 2cl2t 2cl2v 2cl2w 2cl2x 2cl2y 2cl2z f2l 4fl. 2fl2b 2fl2c 2fl2d 2fl2f 2fl2g 2fl2h 2fl2j 2fl2k 2fl2l 2fl2m 2fl2n 2fl2p 2fl2q 2fl2r 2fl2s 2fl2t 2fl2v 2fl2w 2fl2x 2fl2y 2fl2z g2l 4gl. 2gl2b 2gl2c 2gl2d 2gl2f 2gl2g 2gl2h 2gl2j 2gl2k 2gl2l 2gl2m 2gl2n 2gl2p 2gl2q 2gl2r 2gl2s 2gl2t 2gl2v 2gl2w 2gl2x 2gl2y 2gl2z k2l 4kl. 2kl2b 2kl2c 2kl2d 2kl2f 2kl2g 2kl2h 2kl2j 2kl2k 2kl2l 2kl2m 2kl2n 2kl2p 2kl2q 2kl2r 2kl2s 2kl2t 2kl2v 2kl2w 2kl2x 2kl2y 2kl2z p2l 4pl. 2pl2b 2pl2c 2pl2d 2pl2f 2pl2g 2pl2h 2pl2j 2pl2k 2pl2l 2pl2m 2pl2n 2pl2p 2pl2q 2pl2r 2pl2s 2pl2t 2pl2v 2pl2w 2pl2x 2pl2y 2pl2z v2l 4vl. 2vl2b 2vl2c 2vl2d 2vl2f 2vl2g 2vl2h 2vl2j 2vl2k 2vl2l 2vl2m 2vl2n 2vl2p 2vl2q 2vl2r 2vl2s 2vl2t 2vl2v 2vl2w 2vl2x 2vl2y 2vl2z b2r 4br. 2br2b 2br2c 2br2d 2br2f 2br2g 2br2h 2br2j 2br2k 2br2l 2br2m 2br2n 2br2p 2br2q 2br2r 2br2s 2br2t 2br2v 2br2w 2br2x 2br2y 2br2z c2r 4cr. 2cr2b 2cr2c 2cr2d 2cr2f 2cr2g 2cr2h 2cr2j 2cr2k 2cr2l 2cr2m 2cr2n 2cr2p 2cr2q 2cr2r 2cr2s 2cr2t 2cr2v 2cr2w 2cr2x 2cr2y 2cr2z d2r 4dr. 2dr2b 2dr2c 2dr2d 2dr2f 2dr2g 2dr2h 2dr2j 2dr2k 2dr2l 2dr2m 2dr2n 2dr2p 2dr2q 2dr2r 2dr2s 2dr2t 2dr2v 2dr2w 2dr2x 2dr2y 2dr2z f2r 4fr. 2fr2b 2fr2c 2fr2d 2fr2f 2fr2g 2fr2h 2fr2j 2fr2k 2fr2l 2fr2m 2fr2n 2fr2p 2fr2q 2fr2r 2fr2s 2fr2t 2fr2v 2fr2w 2fr2x 2fr2y 2fr2z g2r 4gr. 2gr2b 2gr2c 2gr2d 2gr2f 2gr2g 2gr2h 2gr2j 2gr2k 2gr2l 2gr2m 2gr2n 2gr2p 2gr2q 2gr2r 2gr2s 2gr2t 2gr2v 2gr2w 2gr2x 2gr2y 2gr2z k2r 4kr. 2kr2b 2kr2c 2kr2d 2kr2f 2kr2g 2kr2h 2kr2j 2kr2k 2kr2l 2kr2m 2kr2n 2kr2p 2kr2q 2kr2r 2kr2s 2kr2t 2kr2v 2kr2w 2kr2x 2kr2y 2kr2z p2r 4pr. 2pr2b 2pr2c 2pr2d 2pr2f 2pr2g 2pr2h 2pr2j 2pr2k 2pr2l 2pr2m 2pr2n 2pr2p 2pr2q 2pr2r 2pr2s 2pr2t 2pr2v 2pr2w 2pr2x 2pr2y 2pr2z r2r 4rr. 2rr2b 2rr2c 2rr2d 2rr2f 2rr2g 2rr2h 2rr2j 2rr2k 2rr2l 2rr2m 2rr2n 2rr2p 2rr2q 2rr2r 2rr2s 2rr2t 2rr2v 2rr2w 2rr2x 2rr2y 2rr2z t2r 4tr. 2tr2b 2tr2c 2tr2d 2tr2f 2tr2g 2tr2h 2tr2j 2tr2k 2tr2l 2tr2m 2tr2n 2tr2p 2tr2q 2tr2r 2tr2s 2tr2t 2tr2v 2tr2w 2tr2x 2tr2y 2tr2z v2r 4vr. 2vr2b 2vr2c 2vr2d 2vr2f 2vr2g 2vr2h 2vr2j 2vr2k 2vr2l 2vr2m 2vr2n 2vr2p 2vr2q 2vr2r 2vr2s 2vr2t 2vr2v 2vr2w 2vr2x 2vr2y 2vr2z 2b3p2t 2c3p2t 2d3p2t 2l3p2t 2m3p2t 2n3p2t 2r3p2t 2s3p2t 2t3p2t 2x3p2t 2y3p2t 4pt. 2b3c2t 2c3c2t 2d3c2t 2l3c2t 2m3c2t 2n3c2t 2r3c2t 2s3c2t 2t3c2t 2x3c2t 2y3c2t 4ct. 2b3c2n 2c3c2n 2d3c2n 2l3c2n 2m3c2n 2n3c2n 2r3c2n 2s3c2n 2t3c2n 2x3c2n 2y3c2n 4cn. 2b3p2s 2c3p2s 2d3p2s 2l3p2s 2m3p2s 2n3p2s 2r3p2s 2s3p2s 2t3p2s 2x3p2s 2y3p2s 4ps. 2b3m2n 2c3m2n 2d3m2n 2l3m2n 2m3m2n 2n3m2n 2r3m2n 2s3m2n 2t3m2n 2x3m2n 2y3m2n 4mn. 2b3g2n 2c3g2n 2d3g2n 2l3g2n 2m3g2n 2n3g2n 2r3g2n 2s3g2n 2t3g2n 2x3g2n 2y3g2n 4gn. 2b3f2t 2c3f2t 2d3f2t 2l3f2t 2m3f2t 2n3f2t 2r3f2t 2s3f2t 2t3f2t 2x3f2t 2y3f2t 4ft. 2b3p2n 2c3p2n 2d3p2n 2l3p2n 2m3p2n 2n3p2n 2r3p2n 2s3p2n 2t3p2n 2x3p2n 2y3p2n 4pn. 2b3c2z 2c3c2z 2d3c2z 2l3c2z 2m3c2z 2n3c2z 2r3c2z 2s3c2z 2t3c2z 2x3c2z 2y3c2z 4cz. 2b3t2z 2c3t2z 2d3t2z 2l3t2z 2m3t2z 2n3t2z 2r3t2z 2s3t2z 2t3t2z 2x3t2z 2y3t2z 4tz. 2b3t2s 2c3t2s 2d3t2s 2l3t2s 2m3t2s 2n3t2s 2r3t2s 2s3t2s 2t3t2s 2x3t2s 2y3t2s 4ts. san4c5t plan4c5t 2no. 2t2l 4caca4 4cago4 4caga4 4cagas. 4teta. 4tetas. 4puta4 4puto4 .hu4mea .hu4meo .he4mee 4meo. 4meable. 4meables. 4pedo4 4culo4 3mente. 4i3go. 4es. 4és 4e. 4e3mos. 4éis. 4en. 4ía. 4ías. 4ía3mos. 4íais. 4ían. 4í. 4í4s3te. 4í4s3tes. 4í3tes. 4í3mos. 4ís3teis. 4e3ré. 4e3rás. 4e3rés. 4e3rís. 4e3rá. 4e3re3mos. 4e3réis. 4e3rán. 4i3ga. 4i3gas. 4i3gás. 4i3gamos. 4i3gáis. 4a4i3gan. 4e3ría. 4e3rías. 4e3ríamos. 4e3ríais. 4e3rían. 4i3gá3mosme. 4i3gá3mosmele. 4i3gá3mosmelo. 4i3gá3mos3mela. 4i3gá3mosmeles. 4i3gá3mosmelos. 4i3gá3mos3melas. 4i3gá3moste. 4i3gá3mostele. 4i3gá3mostelo. 4i3gá3mos3tela. 4i3gá3mosteles. 4i3gá3mostelos. 4i3gá3mos3telas. 4i3gá3mosle. 4i3gá3mosla. 4i3gá3moslo. 4i3gá3mosele. 4i3gá3moselo. 4i3gá3mosela. 4i3gá3moseles. 4i3gá3moselos. 4i3gá3moselas. 4i3gá3monos. 4i3gá3monosle. 4i3gá3monoslo. 4i3gá3monosla. 4i3gá3monosles. 4i3gá3monoslos. 4i3gá3monoslas. 4i3gá3moos. 4i3gá3moosle. 4i3gá3mooslo. 4i3gá3moosla. 4i3gá3moosles. 4i3gá3mooslos. 4i3gá3mooslas. 4i3gá3mosles. 4i3gá3moslas. 4i3gá3moslos. 4ed. 4é. 4edme. 4édmele. 4édmelo. 4éd3mela. 4édmeles. 4édmelos. 4éd3melas. 4edte. 4édtele. 4édtelo. 4éd3tela. 4édteles. 4édtelos. 4éd3telas. 4edle. 4eedla. 4edlo. 4édsele. 4édselo. 4édsela. 4édseles. 4édselos. 4édselas. 4ednos. 4édnosle. 4édnoslo. 4édnosla. 4édnosles. 4édnoslos. 4édnoslas. 4eos. 4éosle. 4éoslo. 4éosla. 4éosles. 4éoslos. 4éoslas. 4edles. 4edlas. 4edlos. 4er. 4erme. 4érmele. 4érmelo. 4ér3mela. 4érmeles. 4érmelos. 4ér3melas. 4erte. 4értele. 4értelo. 4ér3tela. 4érteles. 4értelos. 4ér3telas. 4erle. 4erla. 4erlo. 4erse. 4érsele. 4érselo. 4érsela. 4érseles. 4érselos. 4érselas. 4ernos. 4érnosle. 4érnoslo. 4érnosla. 4érnosles. 4érnoslos. 4érnoslas. 4e3ros. 4é3rosle. 4é3roslo. 4é3rosla. 4é3rosles. 4é3roslos. 4é3roslas. 4erles. 4erlas. 4erlos. 4í3do. 4í3da. 4í3dos. 4í3das. 4o. 4as. 4a. 4ás. 4a3mos. 4áis. 4an. 4aste. 4astes. 4ó. 4ates. 4asteis. 4a3ron. 4a3ba. 4a3bas. 4á3bamos. 4a3bais. 4a3ban. 4a3ría. 4a3rías. 4a3ríamos. 4a3ríais 4a3rían. 4a3ré. 4a3rás. 4a3rés. 4a3rís. 4a3rá. 4a3remos. 4a3réis. 4a3rán. 4a3ra. 4a3ras. 4á3ramos. 4a3rais. 4a3ran. 4a3re. 4a3res. 4á3remos. 4a3reis. 4a3ren. 4a3se. 4a3ses. 4á3semos. 4a3seis. 4a3sen. 4ad. e5r4as. e5r4a3mos. e5r4áis. e5r4an. e5r4aste. e5r4astes. e5r4ates. e5r4asteis. e5r4a3ron. e5r4a3ba. e5r4a3bas. e5r4á3bamos. e5r4a3bais. e5r4a3ban. e5r4a3ría. e5r4a3rías. e5r4a3ríamos. e5r4a3ríais e5r4a3rían. e5r4a3ré. e5r4a3rás. e5r4a3rés. e5r4a3rís. e5r4a3rá. e5r4a3remos. e5r4a3réis. e5r4a3rán. e5r4a3ra. e5r4a3ras. e5r4á3ramos. e5r4a3rais. e5r4a3ran. e5r4a3re. e5r4a3res. e5r4á3remos. e5r4a3reis. e5r4a3ren. e5r4a3se. e5r4a3ses. e5r4á3semos. e5r4a3seis. e5r4a3sen. e5r4ad. 4adme. 4ádmele. 4ádmelo. 4ád3mela. 4ádmeles. 4ádmelos. 4ád3melas. 4adte. 4ádtele. 4ádtelo. 4ád3tela. 4ádteles. 4ádtelos. 4ád3telas. 4adle. 4eadla. 4adlo. 4ádsele. 4ádselo. 4ádsela. 4ádseles. 4ádselos. 4ádselas. 4adnos. 4ádnosle. 4ádnoslo. 4ádnosla. 4ádnosles. 4ádnoslos. 4ádnoslas. 4aos. 4áosle. 4áoslo. 4áosla. 4áosles. 4áoslos. 4áoslas. 4adles. 4adlas. 4adlos. 4ar. 4a4rme. 4á4rmele. 4á4rmelo. 4á4r3mela. 4á4r3meles. 4á4r3melos. 4á4r3melas. 4a4r3te. 4á4r3tele. 4á4r3telo. 4á4r3tela. 4á4r3teles. 4á4r3telos. 4á4r3telas. 4a4r3le. 4a4r3la. 4a4r3lo. 4a4r3se. 4á4r3sele. 4á4r3selo. 4á4r3sela. 4á4r3seles. 4á4r3selos. 4á4r3selas. 4a4r3nos. 4á4r3nosle. 4á4r3noslo. 4á4r3nosla. 4á4r3nosles. 4á4r3noslos. 4á4r3noslas. 4a3ros. 4árosle. 4ároslo. 4árosla. 4árosles. 4ároslos. 4ároslas. 4a4r3les. 4a4r3las. 4a4r3los. 4a3do. 4a3da. 4a3dos. 4a3das. e5r4a3do. e5r4a3da. e5r4a3dos. e5r4a3das. 4ando 4ándole. 4ándolo. 4ándola. 4ándoles. 4ándolos. 4ándolas. 4ándonos. 4ándoos. 4ándome. 4ándomelo. 4ándomela. 4ándomele. 4ándomelos. 4ándomelas. 4ándomeles. 4ándote. 4ándoteme. 4ándotelo. 4ándotela. 4ándotele. 4ándotelos. 4ándotelas. 4ándoteles. 4ándotenos. 4ándose. 4ándoseme. 4ándoselo. 4ándosela. 4ándosele. 4ándoselos. 4ándoselas. 4ándoseles. 4ándosenos. 4a3dor. 4a3dora. 4a3dores. 4a3doras. e5r4a3dor. e5r4a3dora. e5r4a3dores. e5r4a3doras. acto1h acto1a2 acto1e2 acto1i2 acto1o2 acto1u2 acto1á2 acto1é2 acto1í2 acto1ó2 acto1ú2 afro1h afro1a2 afro1e2 afro1i2 afro1o2 afro1u2 afro1á2 afro1é2 afro1í2 afro1ó2 afro1ú2 .a2 .an2a2 .an2e2 .an2i2 .an2o2 .an2u2 .an2á2 .an2é2 .an2í2 .an2ó2 .an2ú2. ana3lí .aná3li .ana3li .an3aero .an3e2pigr .ane3xa .ane3xá .ane3xe .ane3xé .ane3xio .ane3xió .an3h .ani3mad .ani3mád .ani3dar .ani3ll .ani3m .aniña .ani3q .an3i2so .an3i2só .ani3vel .ano5che .ano5din .ano5mal .ano5nad .anó3nim .anó5mal .ano5nim .ano5ta .ano3tá .anua3l .anua4lm .anu3bl .anu3da .anu3l asu3b2 aero1h aero1a2 aero1e2 aero1i2 aero1o2 aero1u2 aero1á2 aero1é2 aero1í2 aero1ó2 aero1ú2 anfi1h anfi1a2 anfi1e2 anfi1i2 anfi1o2 anfi1u2 anfi1á2 anfi1é2 anfi1í2 anfi1ó2 anfi1ú2 anglo1h anglo1a2 anglo1e2 anglo1i2 anglo1o2 anglo1u2 anglo1á2 anglo1é2 anglo1í2 anglo1ó2 anglo1ú2 ante1h ante1a2 ante1e2 ante1i2 ante1o2 ante1u2 ante1á2 ante1é2 ante1í2 ante1ó2 ante1ú2 .ante2o3je acante2 4ísmo. 4ísmos. 4ísta. 4ístas. 4ístico. 4ísticos. 4ística. 4ísticas. t4eo3nes. mante4a e4a3miento .anti1h .anti1a2 .anti1e2 .anti1i2 .anti1o2 .anti1u2 .anti1á2 .anti1é2 .anti1í2 .anti1ó2 .anti1ú2 ti2o3qu ti2o3co archi1h archi1a2 archi1e2 archi1i2 archi1o2 archi1u2 archi1á2 archi1é2 archi1í2 archi1ó2 archi1ú2 auto1h auto1a2 auto1e2 auto1i2 auto1o2 auto1u2 auto1á2 auto1é2 auto1í2 auto1ó2 auto1ú2 biblio1h biblio1a2 biblio1e2 biblio1i2 biblio1o2 biblio1u2 biblio1á2 biblio1é2 biblio1í2 biblio1ó2 biblio1ú2 bio1h bio1a2 bio1e2 bio1i2 bio1o2 bio1u2 bio1á2 bio1é2 bio1í2 bio1ó2 bio1ú2 bi1u2ní cardio1h cardio1a2 cardio1e2 cardio1i2 cardio1o2 cardio1u2 cardio1á2 cardio1é2 cardio1í2 cardio1ó2 cardio1ú2 cefalo1h cefalo1a2 cefalo1e2 cefalo1i2 cefalo1o2 cefalo1u2 cefalo1á2 cefalo1é2 cefalo1í2 cefalo1ó2 cefalo1ú2 centi1h centi1a2 centi1e2 centi1i2 centi1o2 centi1u2 centi1á2 centi1é2 centi1í2 centi1ó2 centi1ú2 centi5área ciclo1h ciclo1a2 ciclo1e2 ciclo1i2 ciclo1o2 ciclo1u2 ciclo1á2 ciclo1é2 ciclo1í2 ciclo1ó2 ciclo1ú2 o4i3dea. o4i3deas. o4i3dal. o4i3dales. 4o2i3de. 4o2i3des. 4i2dal. 4i2dales. 4i3deo. 4i3deos. cito1h cito1a2 cito1e2 cito1i2 cito1o2 cito1u2 cito1á2 cito1é2 cito1í2 cito1ó2 cito1ú2 3c2neor cnico1h cnico1a2 cnico1e2 cnico1i2 cnico1o2 cnico1u2 cnico1á2 cnico1é2 cnico1í2 cnico1ó2 cnico1ú2 .co2a2 .co2e2 .co2i2 .co3o4 .co2u2 .co2á2 .co2é2 .co2í2 .co2ó2 .co2ú2 co4á3gul co4acci co4acti co4adju co4a3dun co4adyu co3agen co4a3gul co4a3lic co4aptac co4art co4árt co4e3fic co4erc co4erz co4e3tá co3exis co4imbr co4inci co4i3to co3n4imbri co4o3per co4o3pér co4opt co4ord con1imbr con1urb cripto1h cripto1a2 cripto1e2 cripto1i2 cripto1o2 cripto1u2 cripto1á2 cripto1é2 cripto1í2 cripto1ó2 cripto1ú2 crono1h crono1a2 crono1e2 crono1i2 crono1o2 crono1u2 crono1á2 crono1é2 crono1í2 crono1ó2 crono1ú2 contra1h contra1a2 contra1e2 contra1i2 contra1o2 contra1u2 contra1á2 contra1é2 contra1í2 contra1ó2 contra1ú2 deca1h deca1a2 deca1e2 deca1i2 deca1o2 deca1u2 deca1á2 deca1é2 deca1í2 deca1ó2 deca1ú2 4e3dro. 4e3dros. 4é3drico. 4é3dricos. 4é3drica. 4é3dricas. .de2sa2 .de2se2 .de2si2 .de2so2 .de2su2 .de2sá2 .de2sé2 .de2sí2 .de2só2 .de2sú2 deca2i3mient decimo1 3sa. 3sas. de2s3órde de2s3orde de2s3abast de2s3aboll de2s3aboto de2s3abr desa3brid de2s3abroch de2s3aceit de2s3aceler desa3cert desa3ciert de2s3acobar de2s3acomod de2s3acomp de2s3acons de2s3acopl de2s3acorr de2s3acostum de2s3acot desa3craliz de2s3acredit de2s3activ de2s3acuart de2s3aderez de2s3adeud de2s3adorar de2s3adormec de2s3adorn de2s3advert de2s3aferr de2s3afic de2s3afil de2s3afin de2s3afor desa3gú desa3garr de2s3agraci de2s3agrad de2s3agravi de2s3agreg de2s3agrup de2s3agu desa3guisado de2s3aherr de2s3ahij de2s3ajust de2s3alagar de2s3alent de2s3alfom de2s3alfor de2s3aliñ desa3lin de2s3alien de2s3aline desa3liv de2s3alm de2s3almid de2s3aloj de2s3alquil de2s3alter de2s3alumbr desa3marr desa3mobl de2s3amold de2s3amort de2s3amuebl de2s3ampa de2s3and de2s3angel de3sangr de2s3anid de2s3anim de2s3aním de2s3anud desa3pañ desa3pacib de2s3apadr de2s3apare de2s3aparec de2s3aparic de2s3apeg de2s3apercib de2s3apes de2s3aplic de2s3apolill de2s3apoy de2s3aprend de2s3apret de2s3apriet de2s3aprob de2s3apropi de2s3aprovech de2s3arbol de2s3aren de2s3arm des4arme de2s3arraig de2s3arregl de2s3arrend de2s3arrim desa3rroll de2s3arrop de2s3arrug de2s3articul de2s3asent de2s3asist de2s3asn desa3soseg desa3sosieg de2s3atenc de2s3atend de2s3atiend de2s3atent desa3tin de2s3atorn de2s3atranc de2s3autor de2s3avis desa3yun desa3zón desa3zon de2s3embal de2s3embál de2s3embar de2s3embár de2s3embarg de2s3embols de2s3emborr de2s3embosc de2s3embot de2s3embrag de2s3embrág de2s3embrave de2s3embráve de2s3embroll de2s3embróll de2s3embruj de2s3embrúj de3semej de2s3empañ de2s3empáñ de2s3empac de2s3empaquet de2s3empaquét de2s3emparej de2s3emparéj de2s3emparent de2s3empat de2s3empé de2s3empedr de2s3empeg de2s3empeor de2s3emperez de2s3empern de2s3emple de2s3empolv de2s3empotr de2s3empoz de2s3enam de2s3encab de2s3encad de2s3encaj de2s3encáj de2s3encall de2s3encáll de2s3encam de3sencant de2s3encap de2s3encar de2s3encár de2s3ench de2s3encl de2s3enco de2s3encr de2s3encu de2s3end de3senfad de3senfád de2s3enfi de2s3enfo de2s3enfó de3senfren de2s3enfund de2s3enfur de3sengañ de3sengáñ de2s3enganch de2s3engar de2s3engas de2s3engom de2s3engoz de2s3engra de2s3enhebr de2s3enj de2s3enlad de2s3enlaz de2s3enlo de2s3enm de2s3enr de2s3ens de2s3enta de3sentend de3sentien de3sentién de2s3enter de2s3entier de2s3entiér de2s3ento de2s3entr de2s3entu de2s3envain de3senvolvim de3seo de2s3eq de3s4erci de3s4ert de3s4ért de2s3espa de3sesperac de2s3esperanz de3sesper de2s3estabil de2s3estim de3sider de3sidia de3sidio de3siert de3sign de3sigual de3silusi de2s3imagin de2s3iman de2s3impon de2s3impres de2s3incent de2s3inclin de2s3incorp de2s3incrust de3sinenc de3sinfec de3su3dar de3su3das de3su3dan de2s3inflam de2s3infl de2s3inform de2s3inhib de2s3insect de2s3instal ini3ci iní3ci de3s4integr de3s4inter de2s3intox de2s3inver de3sisten de3isti de2s3obedec de2s3oblig de2s3obstr de3socup de2s3odor de3solac de3solad de3soll de2s3orej de2s3orient de3sortij de2s3organi de3suell de3sonce de2s3ovi de2s3oxi de2s3oye de2s3oyé de3s4ubstan de3s4ustan de3s4oseg de2s3ub4ic de2s3unir de2s3unier de2s3unim .dieci1o2 dodeca1h dodeca1a2 dodeca1e2 dodeca1i2 dodeca1o2 dodeca1u2 dodeca1á2 dodeca1é2 dodeca1í2 dodeca1ó2 dodeca1ú2 ecano1h ecano1a2 ecano1e2 ecano1i2 ecano1o2 ecano1u2 ecano1á2 ecano1é2 ecano1í2 ecano1ó2 ecano1ú2 eco1h eco1a2 eco1e2 eco1i2 eco1o2 eco1u2 eco1á2 eco1é2 eco1í2 eco1ó2 eco1ú2 ectro1h ectro1a2 ectro1e2 ectro1i2 ectro1o2 ectro1u2 ectro1á2 ectro1é2 ectro1í2 ectro1ó2 ectro1ú2 .en2a2 .en2e2 .en2i2 .en2o2 .en2u2 .en2á2 .en2é2 .en2í2 .en2ó2 .en2ú2 .ene3mist .ene3míst .eno3jar .enu3mera .enu3merá .enu3mere 4o3lógico. 4o3lógica. 4o3lógicos. 4o3lógicas. 4o3lógicamente. 4o3logía. 4o3logías. 4ó3logo. 4ó3loga. 4ó3logos. 4ó3logas. endo1h endo1a2 endo1e2 endo1i2 endo1o2 endo1u2 endo1á2 endo1é2 endo1í2 endo1ó2 endo1ú2 ento1h ento1a2 ento1e2 ento1i2 ento1o2 ento1u2 ento1á2 ento1é2 ento1í2 ento1ó2 ento1ú2 4emboca entre1h entre1a2 entre1e2 entre1i2 entre1o2 entre1u2 entre1á2 entre1é2 entre1í2 entre1ó2 entre1ú2 euco1h euco1a2 euco1e2 euco1i2 euco1o2 euco1u2 euco1á2 euco1é2 euco1í2 euco1ó2 euco1ú2 euro1h euro1a2 euro1e2 euro1i2 euro1o2 euro1u2 euro1á2 euro1é2 euro1í2 euro1ó2 euro1ú2 extra1h extra1a2 extra1e2 extra1i2 extra1o2 extra1u2 extra1á2 extra1é2 extra1í2 extra1ó2 extra1ú2 u4teri .cau5t .deu5t fono1h fono1a2 fono1e2 fono1i2 fono1o2 fono1u2 fono1á2 fono1é2 fono1í2 fono1ó2 fono1ú2 foto1h foto1a2 foto1e2 foto1i2 foto1o2 foto1u2 foto1á2 foto1é2 foto1í2 foto1ó2 foto1ú2 gastro1h gastro1a2 gastro1e2 gastro1i2 gastro1o2 gastro1u2 gastro1á2 gastro1é2 gastro1í2 gastro1ó2 gastro1ú2 geo1h geo1a2 geo1e2 geo1i2 geo1o2 geo1u2 geo1á2 geo1é2 geo1í2 geo1ó2 geo1ú2 gluco1h gluco1a2 gluco1e2 gluco1i2 gluco1o2 gluco1u2 gluco1á2 gluco1é2 gluco1í2 gluco1ó2 gluco1ú2 hecto1h hecto1a2 hecto1e2 hecto1i2 hecto1o2 hecto1u2 hecto1á2 hecto1é2 hecto1í2 hecto1ó2 hecto1ú2 helio1h helio1a2 helio1e2 helio1i2 helio1o2 helio1u2 helio1á2 helio1é2 helio1í2 helio1ó2 helio1ú2 hemato1h hemato1a2 hemato1e2 hemato1i2 hemato1o2 hemato1u2 hemato1á2 hemato1é2 hemato1í2 hemato1ó2 hemato1ú2 hemi1h hemi1a2 hemi1e2 hemi1i2 hemi1o2 hemi1u2 hemi1á2 hemi1é2 hemi1í2 hemi1ó2 hemi1ú2 hemo1h hemo1a2 hemo1e2 hemo1i2 hemo1o2 hemo1u2 hemo1á2 hemo1é2 hemo1í2 hemo1ó2 hemo1ú2 2al. 2ales. hexa1h hexa1a2 hexa1e2 hexa1i2 hexa1o2 hexa1u2 hexa1á2 hexa1é2 hexa1í2 hexa1ó2 hexa1ú2 hidro1h hidro1a2 hidro1e2 hidro1i2 hidro1o2 hidro1u2 hidro1á2 hidro1é2 hidro1í2 hidro1ó2 hidro1ú2 hipe2r3r hipe2r1a2 hipe2r1e2 hipe2r1i2 hipe2r1o2 hipe2r1u2 hipe2r1á2 hipe2r1é2 hipe2r1í2 hipe2r1ó2 hipe2r1ú2 pe3r4e3mia histo1h histo1a2 histo1e2 histo1i2 histo1o2 histo1u2 histo1á2 histo1é2 histo1í2 histo1ó2 histo1ú2 homo1h homo1a2 homo1e2 homo1i2 homo1o2 homo1u2 homo1á2 homo1é2 homo1í2 homo1ó2 homo1ú2 icono1h icono1a2 icono1e2 icono1i2 icono1o2 icono1u2 icono1á2 icono1é2 icono1í2 icono1ó2 icono1ú2 .i2n2a2 .i2n2e2 .i2n2i2 .i2n2o2 .i2n2u2 .i2n2á2 .i2n2é2 .i2n2í2 .i2n2ó2 .i2n2ú2 .in3abord .in3abarc .in3acent .in3aguant .in3adapt .ina3movib .in3analiz .ina3nic .in3anim .iná3nim .in3apel .in3aplic .in3aprens .in3apreci .in3arrug .in3asist .iné3dit .in3efic .in3efici .in3eludi .ine3narr ini3cia iní3cia ini3ciá ini3cie .rei3na re3ini3cia re3iní3cia re3ini3ciá re3ini3cie .ini3cuo .ini3cua .ino3cuo .ino3cua .ino3cula .ino3culá .ino3cule .inú3til .inu3tiliz infra1h infra1a2 infra1e2 infra1i2 infra1o2 infra1u2 infra1á2 infra1é2 infra1í2 infra1ó2 infra1ú2 .inte2r3r .inte2r1a2 .inte2r1e2 .inte2r1i2 .inte2r1o2 .inte2r1u2 .inte2r1á2 .inte2r1é2 .inte2r1í2 .inte2r1ó2 .inte2r1ú2 .in3ter2e3sa .in3ter2e3se .in3ter2e3so .in3ter2e3sá .in3ter2e3sé .in3ter2e3só .de3s4in3ter2e3sa .de3s4in3ter2e3se .de3s4in3ter2e3so .de3s4in3ter2e3sá .de3s4in3ter2e3sé .de3s4in3ter2e3só 3te3ri3n 4te4r5i4nsu .in3te3r4rog .in3te3r4rupc .in3te3r4rupt .in3te3r4rump intra1h intra1a2 intra1e2 intra1i2 intra1o2 intra1u2 intra1á2 intra1é2 intra1í2 intra1ó2 intra1ú2 iso1h iso1a2 iso1e2 iso1i2 iso1o2 iso1u2 iso1á2 iso1é2 iso1í2 iso1ó2 iso1ú2 kilo1h kilo1a2 kilo1e2 kilo1i2 kilo1o2 kilo1u2 kilo1á2 kilo1é2 kilo1í2 kilo1ó2 kilo1ú2 macro1h macro1a2 macro1e2 macro1i2 macro1o2 macro1u2 macro1á2 macro1é2 macro1í2 macro1ó2 macro1ú2 mal2 ma4l3h .ma4l3e4du mal3b mal3c mal3d mal3f mal3g mal3m mal3p mal3q mal3s mal3t mal3v bien2 bien3h bien3v bien3q bien3m bien3t b4ien3do. .su3b4ien b4ien3das. maxi1h maxi1a2 maxi1e2 maxi1i2 maxi1o2 maxi1u2 maxi1á2 maxi1é2 maxi1í2 maxi1ó2 maxi1ú2 megalo1h megalo1a2 megalo1e2 megalo1i2 megalo1o2 megalo1u2 megalo1á2 megalo1é2 megalo1í2 megalo1ó2 megalo1ú2 mega1h mega1a2 mega1e2 mega1i2 mega1o2 mega1u2 mega1á2 mega1é2 mega1í2 mega1ó2 mega1ú2 melano1h melano1a2 melano1e2 melano1i2 melano1o2 melano1u2 melano1á2 melano1é2 melano1í2 melano1ó2 melano1ú2 micro1h micro1a2 micro1e2 micro1i2 micro1o2 micro1u2 micro1á2 micro1é2 micro1í2 micro1ó2 micro1ú2 mili1h mili1a2 mili1e2 mili1i2 mili1o2 mili1u2 mili1á2 mili1é2 mili1í2 mili1ó2 mili1ú2 familia3ri ia5res. amili6a a3rio li5área mini1h mini1a2 mini1e2 mini1i2 mini1o2 mini1u2 mini1á2 mini1é2 mini1í2 mini1ó2 mini1ú2 2os. 2o3so. 2o3sos. 2o3sa. 2o3sas. 2o3samente. mini4a5tur multi1h multi1a2 multi1e2 multi1i2 multi1o2 multi1u2 multi1á2 multi1é2 multi1í2 multi1ó2 multi1ú2 miria1h miria1a2 miria1e2 miria1i2 miria1o2 miria1u2 miria1á2 miria1é2 miria1í2 miria1ó2 miria1ú2 mono1h mono1a2 mono1e2 mono1i2 mono1o2 mono1u2 mono1á2 mono1é2 mono1í2 mono1ó2 mono1ú2 2i3co. 2i3cos. 2i3ca. 2i3cas. namo1h namo1a2 namo1e2 namo1i2 namo1o2 namo1u2 namo1á2 namo1é2 namo1í2 namo1ó2 namo1ú2 necro1h necro1a2 necro1e2 necro1i2 necro1o2 necro1u2 necro1á2 necro1é2 necro1í2 necro1ó2 necro1ú2 neo1h neo1a2 neo1e2 neo1i2 neo1o2 neo1u2 neo1á2 neo1é2 neo1í2 neo1ó2 neo1ú2 neto1h neto1a2 neto1e2 neto1i2 neto1o2 neto1u2 neto1á2 neto1é2 neto1í2 neto1ó2 neto1ú2 norte1h norte1a2 norte1e2 norte1i2 norte1o2 norte1u2 norte1á2 norte1é2 norte1í2 norte1ó2 norte1ú2 octo1h octo1a2 octo1e2 octo1i2 octo1o2 octo1u2 octo1á2 octo1é2 octo1í2 octo1ó2 octo1ú2 octa1h octa1a2 octa1e2 octa1i2 octa1o2 octa1u2 octa1á2 octa1é2 octa1í2 octa1ó2 octa1ú2 oligo1h oligo1a2 oligo1e2 oligo1i2 oligo1o2 oligo1u2 oligo1á2 oligo1é2 oligo1í2 oligo1ó2 oligo1ú2 omni1h omni1a2 omni1e2 omni1i2 omni1o2 omni1u2 omni1á2 omni1é2 omni1í2 omni1ó2 omni1ú2 i2o. i2os. paleo1h paleo1a2 paleo1e2 paleo1i2 paleo1o2 paleo1u2 paleo1á2 paleo1é2 paleo1í2 paleo1ó2 paleo1ú2 para1h para1a2 para1e2 para1i2 para1o2 para1u2 para1á2 para1é2 para1í2 para1ó2 para1ú2 para2is. aí5so. aí5sos. penta1h penta1a2 penta1e2 penta1i2 penta1o2 penta1u2 penta1á2 penta1é2 penta1í2 penta1ó2 penta1ú2 piezo1h piezo1a2 piezo1e2 piezo1i2 piezo1o2 piezo1u2 piezo1á2 piezo1é2 piezo1í2 piezo1ó2 piezo1ú2 pluri1h pluri1a2 pluri1e2 pluri1i2 pluri1o2 pluri1u2 pluri1á2 pluri1é2 pluri1í2 pluri1ó2 pluri1ú2 poli1h poli1a2 poli1e2 poli1i2 poli1o2 poli1u2 poli1á2 poli1é2 poli1í2 poli1ó2 poli1ú2 poli4u3r poli4o5mie poli4arq poli4árq poli4éste poli4andr poli4antea expoli4 .pos2t2a2 .pos2t2e2 .pos2t2i2 .pos2t2o2 .pos2t2u2 .pos2t2á2 .pos2t2é2 .pos2t2í2 .pos2t2ó2 .pos2t2ú2 .pos3tin .pos3tín pos3ta. pos3tas. s3te. s3tes. s3tal. s3ta3les. s3ti3lla. s3ti3llas. s3ti3llón. s3ti3llones. .pos3tó3ni .pos3terg .pos3te3ri .pos3ti3go .pos3ti3la .pos3ti3ne .pos3ti3za .pos3ti3zo .pos3tu3ra s3tor. s3tora. s3toras. s3tores. .pos3tu3la .pos3tu3lá .pos3tu3le .pos3tu3lé .post3elec .post3impr .post3ind .post3ope .post3rev .pre2a2 .pre2e2 .pre2i2 .pre2o2 .pre2u2 .pre2h2 .pre2á2 .pre2é2 .pre2í2 .pre2ó2 .pre2ú2 pre3elij pre3elig pre3exis pre3emin preo3cup preo2cúp pre3olí pre3opin .pro2a2 .pro2e2 .pro2i2 .pro2o2 .pro2u2 .pro2h2 .pro2á2 .pro2é2 .pro2í2 .pro2ó2 .pro2ú2 proto1h proto1a2 proto1e2 proto1i2 proto1o2 proto1u2 proto1á2 proto1é2 proto1í2 proto1ó2 proto1ú2 radio1h radio1a2 radio1e2 radio1i2 radio1o2 radio1u2 radio1á2 radio1é2 radio1í2 radio1ó2 radio1ú2 ranco1h ranco1a2 ranco1e2 ranco1i2 ranco1o2 ranco1u2 ranco1á2 ranco1é2 ranco1í2 ranco1ó2 ranco1ú2 .re2a2 .re3e4 .re2i2 .re2o2 .re2u2 .re2á2 .re2é2 .re2í2 .re2ó2 .re2ú2 ea3cio. ea3cios. ea3cia. ea3cias. .re3abr .re3ábr .re3afirm .re3afírm .re3ajust .rea3júst .rea3liza .rea3lizá .rea3líza .re3alim .rea3lism .rea3list .re3anim .re3aním .re3aparec .re3ubica .re3ubíca .reu3mati .reu3máti .re3unir .re3unír .re3usar .re3usár .re3utiliz .re3utilíz rmano1h rmano1a2 rmano1e2 rmano1i2 rmano1o2 rmano1u2 rmano1á2 rmano1é2 rmano1í2 rmano1ó2 rmano1ú2 retro1h retro1a2 retro1e2 retro1i2 retro1o2 retro1u2 retro1á2 retro1é2 retro1í2 retro1ó2 retro1ú2 romo1h romo1a2 romo1e2 romo1i2 romo1o2 romo1u2 romo1á2 romo1é2 romo1í2 romo1ó2 romo1ú2 sobre1h sobre1a2 sobre1e2 sobre1i2 sobre1o2 sobre1u2 sobre1á2 sobre1é2 sobre1í2 sobre1ó2 sobre1ú2 semi1h semi1a2 semi1e2 semi1i2 semi1o2 semi1u2 semi1á2 semi1é2 semi1í2 semi1ó2 semi1ú2 i2a. i2as. 2ótic emi2o2 seudo1h seudo1a2 seudo1e2 seudo1i2 seudo1o2 seudo1u2 seudo1á2 seudo1é2 seudo1í2 seudo1ó2 seudo1ú2 o2os. .so3a4s socio1h socio1a2 socio1e2 socio1i2 socio1o2 socio1u2 socio1á2 socio1é2 socio1í2 socio1ó2 socio1ú2 a3rio. a3rios. 3logía 4ón. 4ones. 4i4er. 4o2ico. 4o2icos. 4o2ica. 4o2icas. .su2b2a2 .su2b2e2 .su2b2i2 .su2b2o2 .su2b2u2 .su2b2á2 .su2b2é2 .su2b2í2 .su2b2ó2 .su2b2ú2 .sub2i3ll .sub2i3mien .sub3índ .sub3ími .su4b3ray .sub3aflue .sub3arr .sub3enten .sub3estim .sub3estím .sub3ofici .sub3urba .sub3alter .sub3insp .su3bién .su3bir .su3bam .su3bordin .su3bordín .sub3acuá .sub3espe .sub3esta .su3burbi .su4b5rein supe2r3r supe2r1a2 supe2r1e2 supe2r1i2 supe2r1o2 supe2r1u2 supe2r1á2 supe2r1é2 supe2r1í2 supe2r1ó2 supe2r1ú2 supe3r4a4r supe3r4á4r supe3r4á3vit. supe3r4á3vits. 4a3ción. 4a3ciones. 4e3rior. 4e3riores. 4e3riora. 4e3rioras. 4e3riormente. 4e3rioridad. 4e3rioridades. 4e3ra3ble. 4e3ra3bles. 4e3ra3blemente. pe5r4ante perpon5d6r supra1h supra1a2 supra1e2 supra1i2 supra1o2 supra1u2 supra1á2 supra1é2 supra1í2 supra1ó2 supra1ú2 sup6ra talmo1h talmo1a2 talmo1e2 talmo1i2 talmo1o2 talmo1u2 talmo1á2 talmo1é2 talmo1í2 talmo1ó2 talmo1ú2 tele1h tele1a2 tele1e2 tele1i2 tele1o2 tele1u2 tele1á2 tele1é2 tele1í2 tele1ó2 tele1ú2 4ósteo. 4ósteos. termo1h termo1a2 termo1e2 termo1i2 termo1o2 termo1u2 termo1á2 termo1é2 termo1í2 termo1ó2 termo1ú2 tetra1h tetra1a2 tetra1e2 tetra1i2 tetra1o2 tetra1u2 tetra1á2 tetra1é2 tetra1í2 tetra1ó2 tetra1ú2 topo1h topo1a2 topo1e2 topo1i2 topo1o2 topo1u2 topo1á2 topo1é2 topo1í2 topo1ó2 topo1ú2 tropo1h tropo1a2 tropo1e2 tropo1i2 tropo1o2 tropo1u2 tropo1á2 tropo1é2 tropo1í2 tropo1ó2 tropo1ú2 poi3de. poi3des. ultra1h ultra1a2 ultra1e2 ultra1i2 ultra1o2 ultra1u2 ultra1á2 ultra1é2 ultra1í2 ultra1ó2 ultra1ú2 xeno1h xeno1a2 xeno1e2 xeno1i2 xeno1o2 xeno1u2 xeno1á2 xeno1é2 xeno1í2 xeno1ó2 xeno1ú2 inter4és inter4esar inter4in inter4ino inter4ior mili4ar mili4ario para4íso para4ulata super4able super4ación super4ior tran4sacc trans4ar trans4eúnte trans4iber trans4ición trans4ido trans4igen trans4igir trans4istor trans4itab trans4it trans4itorio trans4ubsta ultra4ísmo wa3s4h .bi1anual .bi1aur .bien1and .bien1apa .bien1ave .bien1est .bien1int .bi1ox .bi1ó2x .bi1un .en1aceit .en1aciy .en1aguach .en1aguaz .en1anch .en1apa .en1arb .en1art .en2artr .en1ej .hepta1e .intra1o .intra1u .mal1acon .mal1acos .mala1e .mal1andant .mal1andanz .mal1est .mal1int .pa4n1a4meri .pa4n1europ .pa4n1afri .pa4n1ópti 3p2sic 3p2siq .re3a2eg .re3a2q .re3a2z .re3a2grup .re3i2m .re3inc .re3ing .re3ins .re3int .re3o2b .re1oc .re1oj .re3orga .re1unt .retro1a .su2d1a2fr .su2d1a2me .su2d1est su4d3oes .sur1a2me .sur1est .sur1oes .tele1imp .tele1obj .tra2s1a .tra2s1o .tra2s2oñ .tran2s1alp .tran2s1and .tran2s1atl .tran2s1oce .tran2s1ur .tri1ó2x}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cs.pat0000644000175000017500000005267611761001300024656 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-cs.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z á é í ó ú ý č ď ě ň ř š ť ů ž \patterns{ .a2 .a4da .a4de .a4di .a4do .a4dé .a4kl .a4ko .a4kr .a4ku .ale3x .a4ra .a4re .a4ri .a4ro .a4ry .a4rá .a4sa .a4se .a4so .as3t3 .a4sy .a4ta .a4te .at3l .a4to .a4tr .a4ty .a4ve .b2 .c2 .ch2 .cyk3 .d2 .dez3 .d4na .dne4 .dneš4k .d4ny .dos4 .d4ve .d4vě .d4ví .e2 .e4ch .e4ko .es3k .es3t .e4ve .f4ri .g2 .h2 .h4le .h4ne .i2 .i4na .i4ni .i4no .is3l .j2 .j4ak .je4dl .j4se .j4zd .jád4 .k2 .k4li .k4ly .kří3d .l2 .le4gr .li3kv .m2 .mi3st4 .moud3 .na3č4 .ne3c .neč4 .ne3š .ni2t .no4s3t .n4vp .ná1 .nář4k .o2 .o4bé .ode3 .od3l .od3rá .o4ka .o4ko .o4na .o4ne .o4ni .o4no .o4nu .o4ny .o4ně .o4ní .o4pe .o4po .o4se .o4sl .os4to .os3t3r .os4tě .ot3rá .ot3v .o4tí .o4tř .ově4t .o4za .oz3do .o4zi .o4zo .o4zu .o4šk .o4šl .o4ži .p2 .pa4re .pa3tř .polk4l .po3č4 .p4ro .p4rý .p4se .pu3b .r2 .rej4 .re3s .ro4k .roze3 .roz3r .ru4dl .s2 .s4ch .s4ci .sem4 .se3pn .s4ke .sk4l .s4ká .s4le .s4na .s4ny .s4pe .s4po .st2 .s4tá .s4ži .t2 .u2 .u4ba .u4be .u4bi .u4bo .u4de .u4di .u4do .u4du .u4dí .uh4n .uj4m .u4ko .u4ku .ul4h .u4ma .u4me .u4mi .u4mu .u4ne .u4ni .u4pa .u4pe .u4pi .up4n .u4po .u4pu .u4pá .u4pě .u4pí .u4ra .u4ro .u4rá .us2 .u4so .u4st .u4sy .u4sí .ut2 .u4vi .u4ze .u4če .u4či .u4čí .u4še .u4ši .u4šk .uš4t .u4ší .u4ži .už4n .u4žo .u4ží .v2 .va4dl .v4po .vy3 .v4zá .vý1 .v4ži .y4or .y4ve .z2 .za3 .zao3s .zar2 .zač2 .zd2 .z4di .z4dr .z4ky .z4mn .z4no .z4nu .z4ně .z4ní .z4pe .z4po .z4tř .z4ve .z4vi .č2 .č4te .é2 .í2 .ó2 .š2 .še3t .š4ka .š4ke .š4ky .š4ťo .š4ťá .ú2 .ú4dů .ž2 a1 2a. aa3t2 ab3lon ab4lý ab3ri ab4sb ab2st ac4ci a2d a3da a3de a3di ad2la a4dli a4dlá a4dlé ad4me ad4mu a3do ado4s a3d3ra ad3ri a3drž a3du a4duž 3a3dva ad3vo a3dy a3dá a3dé a3dě a3dí ad4úz ad4úř a3dů a3dý ae4vi afi2a a2g a3ga ag4fa a3go ag3ro a3gu a3gá ah4li ah3v a2i a3in ai4re a3iv a2jd a2jm aj4me aj2o a2k a3ke a3ki a3kl ak4ni a3ko a3kr a3ku a3ky a3ká a3ké a3kó a3ků a3ký al4fb al4kl al4tz al3ží am4bd am4kl am4nu amo3s am4ži a4nae a4name an4dt ane4sk aneu4 an4sc an4sg an4sl an4sm an2sp an4sv an4tč an4žh ao4ed ao4hm ao4stř ao4tč ap4r. a4pso ap3t a4př. a2r a3ra ar4dw a3re a4rer ar4gl a3ri ar4kh a3ro a4rox ar3st a3ru ar2va a3ry a3rá a3ró ar3š2 ar4šr a3rů arůs3 a3rý a2s a3sa a3se a3sh a3sin as3ná a3so as3pi as4tat a4stk as4tm a4stru. as3tv a3su a3sv a3sy a3sá a3sé a3sí a3sů a2t a3ta at4ch a3te a3ti a4tio at4kl at3lo a3to a3tr at3re at3ron at3rov a4tru at4rá at4th a3tu a3tv a3ty a3tá a3té a3tě a3tí a3tó at1ř a4tří. a3tů a3tý a2u au4gs a3uj auj4m aus3t a3uč 2av av3d av4d. av3lo a4vlu a4vlí av3t av4ti 2ay ay4on az3k az3la az4lé az3ni a3zp a2č a3ča a3če a3či a3čl ač4má a3čo a3ču a3čá a3čí a3čů a2ň a3ňo a3ňu aře4k a3ří a4špl a4špy a2ť aú3t 2b. 3ba. ba4br ba4chr ba3ka ba4se 2b1c b1d be4ef be4et bej4m be3p beu4r be2z3 beze3 b1h 1bi bi2b3 bis3 bist4 bi4tr b1j 2bk 3bl. bl4bl b2lem b2les 3blk b4lán b2lém b1m 2bn 1bo bo4et bo4jm bo4ok bo4tr bou3s bo4šk b2ral b2ran 2bri b4rodit b4rou broz4 b2ru b3ru. b3rub b2rán 2b1s2 bs3tr 2b1t btáh4 bu2c bu4en 3by. bys3 by4sm by4tč by4zn b2z 1bá 2b1č bé4rc 1bě. bě3ta 1bí 3bín bí4rc 2bň b3řa b3ře. bře4s b1ří 2bš2 2c. 1ca cad4l ca4es 2cc 1ce cech4 ced4l celo3 ce4ns ce4ov ce4ps cer4v ce2u 2ch. 1cha 4chalg 3che 4che. 2chl ch4ly ch4mb 2ch3n 2cht 4chte 1chu ch4u. 1chy 1chá 2chř 1ci cien4c cik4l 2ck2 c4ket ckte4rý 2cl c3la c3lé 2cn 1co co4at co4mm co4žp c2p 2ct c2ti ctis4 ct4la ct2n c3tv c2tě cuk1 1c2v cy2 1cá 1cí cí4pl 2cň 1ců 2d. 1da da3d da4jš da4kl da4tr d1b d2ba 4dbat. d2bá 2d1c dch4l 3dch4n d1d dd4ha 1de de4bre de3hn de3jd dej4mo de3kl de3kv de2na de2oz de3sl de4sm de4so de2sp des4t de3str de1x de4xt de2z de3zn dez3o de3čt de4žp 2d1h 1di di4gg 4dind dis3k di4so d1j dj4us 2dk d3kv 3dl. d1la d4lab d4lak d3li 1dln d2lou d3lou. d2lu d3luč d4láž d1lé 2d1lí d2lů d1m 1dmd dmýš4 2dn 1do 4dobl 4doboj dob4rat do3by do3bě do3bý do1d 4do4dd 4do4dj dod4n do3h doj4m 4dokn 4doly do3mn domoh4 do3p do4pc dop4n dor2v do1s dos4p dos4tiv do3t do3uk do3uč do3z2 doz4n do3č 4do4čn doč4t do4žp 4dran d4rap d1re d4ren 3drobn d3ros d3rou d3roš dr4sc d3ruš d3ré d3rý d4rýv 2d1s2 ds4ků ds4po d1t d3tl d3tř 1du dum3ř du3na du3p du4pn 2dur du3si du4í. d2v d4vac d3ve d3vl d3vr d3vy d3vá d3vě d3ví 1dy dy4su d3zb d3zd d3zn 1dá 2d1č 1dé 1dě 3děj 1dí 2dň d1řa dře4k d4řep dře4pn d4řev d1ří d2řít 2dš2 d3šk d3št 1dů 3dů. dů3s 1dý d2ž2 2e. e1a ea3dr e2ar e1b eb4er ebez2 eb4li e2bř e4ch. e3chl. e4chm e3cho e2chr e3chv e4chť ed4be ed4kv ed1l ed2ma e3dmn ed3v ed4ří e1e ee4th ee3xi eg4gi e1ha e1he ehno4 eh4ně e1ho e1hr e1hu e1hy e1há e1hý e1i eilus3 ej3ag e3jas e1je e3jed ej3ele e3jez ej3in e3jis ej1m ej3mo e3jmu ej1o ej1u eju3st ej3v e2k e3ka e3ke e4kly e3ko e3kr e3ku e3ky e3ká e3ké e3kó e3kř e3ků e1la e4lau el4dv e1le e1lo e1lu e1ly el4ze e1lá e1lé e1lí e1ml e4mlí emo3k e1mr e1my e3má e1mě e1mí e3mř e3mů e1mý em3že en4dv enitos4 en4sc en4si ent3r e1o eo3by eoch3r eod3l eo4du e4ole eo1s eo2st eo4tř eo3z eo4zb eo4zd eoše3 epa3t e2pl e4pni ep2no e4pný epoč3t epro4zř ep4tl ep4tm ep4tn e4ptu epy3 2er e1ra er4a. e1re e1ri e1ro er3s er4s. er4sn e1ru e1ry e1rá e1ré e1rů e1rý e1s e4sag e2sce e4sin esi4s e2sk es4k. e4s4kn es3ku. es3ky es3ké e2sl e4s3li e4sly es2m e4sp. es4pe e2st e4st. e4ste es3tiž es4tol e4strou es3tán e1t e4tki e4tkr e4tli e4tly et3ri et3ro et3rů et1ř et4ún e1u eu3b eu3ct eu3d eu3k eu3m eu4m. eu3n eu3p eu3r eu4r. e4ura eu4ras eu4rg eu3s2 eu3t e4u4t. eu4tra eu4ts eu3v eu3z eu3ž e3vd eve4š e3v2k e4vsk evy3 evyjad4 evypá4t evy4čk evě4tr ex4ta e3xu ey4or ey4ov ezaos3 ez4ap ez4bo ez3de ez3dov ez3du ez4dě e3ze ez4ed2 ez4ej ez4el ez4er ez4es ez4ez ez4eš ezis4 ez4it ez4le ez4ná ez4ně ez4py ez2t ez4ác ez4áh ez4če e3zí e3zř ez4ře e1á eč4kat e1čt eč4te e4čti e4čtí e2ň e3ňo e3ňu e3ňá e3ón e1ř eře4k eř4ku e3ří e2š e3še e3ši e4ška e3šl eš4lá e3šo eš4to eštíh4 e3ší eú1 eúmy4 eú3n eú3p eú3t eú3č ežíš4 1f 2f. fe4in fene4 fe4ue fi4em fi4fl f2l f3lí fló4r fm4no 2fn 2fr f4ran f4ras 3frek f1ri 2fs fs4te 2ft fu4ch 2fé f2ú 1g 2g. ga4uč ge2s ghou4 3gic 3gin gi4ím g4lom 2g1m 2gn g4noi g4nos go1 go4hm 3graf gu4el gu4it gu3m gu4m. gus4t gu3v 2h. ha4ag ha4ar ha4bl ha4br ha3dl ha4dla ha4ke has3t hatos4 ha4yd h2b h2c 2hd he4br he4id hej4s he2s he2u he3x hi4an hi3er hi4gh hi4re 2hk 4hla. h4led h3len 2hli 4h3lo. h3lob h3lop h3lov h3luj 2h1ly 4hlá. h4lás h3lí. 4hlík 2hlý h2m 2h2n h3ne h4ned h3niv h4noj 3hněd 3hodin ho3str hos4tě 4hove 4hovna 4hovny 4hovná 4hovně h2r hra4p 2h1t h4tin h2tě h4tít hu4ch hu3mo hu4tň 2h2v hyd1 hy4do hy4ps hys3 hy2t3r hy4zd h1č 2hň hř2 hř4by hý4bl h2ž 2i. i1a ia3d ia3g2 i4al. ias4t ia4tr i1b ib2l i2b1r i1ch i4chž i1d id4ge id2l id4lo. i4dlý i1em i1en i1et if1r ig4ne i1h i2hl i3hl. i4hli ih3n ih4na i3im i1j ijed4 ij4me ij4mi i2kl ik3le ik3lo. ik3m ik4ry i4kve ik4úř i1l il4ba ilič4n i4lnu ilu3 i1m i4mla i4mly i4mun i2n i3na ina3d in4cm in4dl i3ne 3infe in4gh in4gp in4gs in4gt i3ni i3no i3nu i3ny i3ná i3né i3ně i3ní in4šp i3nů i3ný i1o io4sk i2ps i1r iro4s i1sa is3c is4ch is4k. is3ka is3ke is3ko. is3kr is3ku is3kv is3ky i3slav is3lo is3lé is3pl is3po is1t is4tal is4tat is4th ist3v is3tí i1sy i3sá i1t it1r it4rh it4rp it4se it4su i2tv i1um iv3d i1x ix4td i3zp iz1r i1á i1čl ič3t ič4tl ič4to i2ď i1é ié4re. i1íc i1ím i1ó i1ř iř4kl iř4če i2š i3še i3ši iš3k iš4kr iš4kv i3šo iš4to i3šu i3šá i3ší i2ž i3ža i3že i3ži i3žo i3žu i3žá 2j. ja2b2 jac4k ja4cq ja3d ja3g j3akt j1b2 jbyst3 2j1c j2d j3dob j3dok j3dos j3dr j3dá jd4ří j3dů jech4 j3ef j3ex jez3dí jg4ra 2j1h 1ji ji4ch jih3l ji4mž j4ina jis3k jit4ro ji2zv j1j 2jk j3kv 2j1l j2m j3ma j3mi jmou3d 2jmí 2jn jne3 j1ob j1od jod2ř j1oh j1op j4ora j1os jo3sv j2ov j3ovl j1o3z2 2jp jpor4 jpo4zv jpříz4 2j1r 2j1s2 j4sem j4si. j4sk. js4ko js4ká j4s4ků j4s4me j3sn j4sou. j4souc js4po j4s4te 2j1t j3tl ju4an ju3na ju3p j1us ju3sp ju3t ju4t. ju3v ju4xt ju3z j1už ju3ži 2jv2 j3vd j3vn 2jz j3zb j3zd j3zk j3zn j3zp jád2r 2j1č 2jď 1jí j3št jš4ti j3šť 2jú1 jú3n jú3č jú3ž 2jž 1k 2k. ka4bl ka4ch ka3dl 3kaj ka3ka 3kami 3kaně ka2p3l ka2p3r ka2ps ka4pv ka2př kas3t kast3r 3kat ka4uč 3kav 3kač 3kař kaš3l ka4šp 2k1c k2d k2e ke4bl ke3jo ke4pr ke4ps 3ket 2kf 2kk k2l 3kl. 4k3la. k3lej 4k3li. k4lib k3lic 4klička 4klo. k3los 2k3ly k3lá. k3lé k3ló k3lý 2k2m k3mě 2kn kna4s ko3by 3kof ko4jm ko2př ko4sk ko2t3v kous3k 3kov ko3zá 4kroa k3rob k3rof kr2s kr4ú. 2ks 2k1t kt2r kuch4 ku4fř ku4hr 3kuj ku3se ku3si ku3su ku4th ku3v 2k2v k4vrň 3kyn ky2pr kyp3ř ky4zn 3kác ká4pl 3kár 3kář 2kč k2ň k2ř2 k3řej kš4ti 3ků. 2l. 1la. la4br lab4s la3ka la4nq la4ps 4la3si la4vš la4y. la2zm 2l1b 2l1c 2l1d ld4ne le4ad le4au lech3t leh3n le2i 1lej le3jo 4lejšk 1lel 4lench lepa3d lepo4s le4pr le4ps le4sc le4sm le4sv let4li let3m le2tr le4tč le4uk le4vh le4vk le3xi lez3n 2lf 2lg 2lh 3lhan 1li li4az li4bl li4bv li4dm lind4 3lio li4tň li4vr 2liž 2lj 2lk l4kat l2kl lk4nu 2ll 2l1m 2ln l4nul lo3br lo4id lo4is 1los lo3sp lo3stř lo3sv lo2tr lo4tř lo4u. lo3z loz4d lo4šk 2lp l2pě 2l1s2 l4sla ls3n lst4n l4stí 2l1t lt4ra lt4ru lt4ry lu4id lu4j. lu4k. lu4lk lu4m. lu4mn lu3pr lu3va lu3vl lu3vy lu3ví 2lv 2lz 1lá. lá4jš lá4vš 2l1č 1lé. 1lík lí4pl lí4zn 1líř 2lň 2lš2 l3št l4štý 1lů 1lý lý2t 2l2ž 2m. 1ma maj4s ma4kl ma4kr 4mald mas3k mat3r ma4tra ma4vš maz3l 2m1b 2m1c 2m1d2 m2dl 1me 3me. me4go me4is met3re me3x mezi3s 2mf mh4le 1mi mid3l mik3r mi4xt 2mk2 3m2kl mk4la mk4li m2l 4mla. 2mle ml3h ml4h. 2mli ml4sc ml4sk 4mlu. 2mn m3na mna4s m4noh m3nos m4noz 3množ m3ná m3né m4néz m3něj m3ný 1mo mod3r mo2hl mo2k mo2s mo4s. mot3ř 4mout moza4 mo3zř moú3 2mp m4plo mpo4s m2ps mp4se mp2t mr2s 2m1s2 m4stl 2m1t 1mu mu4fl mu3n mu4n. mu4nd mu4nn mu4ns mu4nš 2muš 2mv mys3lo my4šk 2mz 3má. málo3 má2s 2mč m2če mí1c mí4rň 2m2š mš4či mš3ť mš4ťan. 3mů. 3mý. m2ž 1n 2n. 3na. na3ch na4do na4em na3h na4h. na3jd na3ka nam4ne na3p2 na3s2 na4s. nat2 na3tl na3tř na3z naz4k na4zš na4č. na3š naž4n 2nb 2n1c n4chc 2n1d nd4hi ndo4t nd2re nd4ri nd4ří ne1d ne4gl ne1h ne3h4n ne2j nej3t nej3u ne3kl ne4kro ne3kv ne4m. ne3p ne3s2 ne4s. nes4le ne4ss 4nesti ne3tl net4r ne3ud ne3v2 ne4v. ne3z nez4n ne3šk ne3šť 2nf n3fr 2ng ng1l ng4la ng4le ng4lí n4gro ng4vi nik4t ni4mr ni4mž 3nio 3nisk 2nitř n1j 2nk 2n1l 2nn no3b2 no4bs no3hn no4hs no4ir no4mž no4sky no3sm no3str not4r no3z no4zd no4šk 2nož 2n1s2 n2sa ns3ak ns4ko n4soc ns3po nst4ra 2n1t nte4r3a nt4lem nt4r. nt3ru nt3rá 2nub nu4gg 3ny. 2nz 3nák ná3s2 ná4s. 2n1č 2nď 2nív 2níž 2nó 2nš2 n3št nš4ťo nů2 2nž 2o. o1a oang4 o1ba o1be obe3j obe3s obe3z ob1l ob1r ob4rň o1bu obys4 ob3z o3bé ob3řez o1c o4chl o2chr oc4ke oc4ko o4ct. oct3n ocy3 oc4ún od3b odej4m ode3p ode3s od1l o4doc odos4 odo4tk od3ra od4ran od3rů o3drž od3v od1ř o1e2 oe3g oe3ti o2fl ofrek4 og2 o3gn o1h oh4ne o1i oi4ce o4int o1j o4jar oje4dl o4jmi o4jmov o4jmu o4jmů oj2o o4juz 2oka ok2te o1l ol4gl ol4to o1m om4kl om2n o2n o3na ona4s o3ne o3ni o3no ont4ra o3nu o3ny o3ná onář4ka o3ně o3ní o3nů o3ný o1o oo4hř oote2 opoč3t opro4s o2ps o4ptu opá4t o4př. opřej4 opře4jm o1ra o4rae or4dm o1re o1ri o1ro or3st o1ru or4vá o1ry o1rá o3ré o1rů orůs3 o3rý o1sa o4sai ose4s osi4d o1sk o4s3ke o4sku osk3v o4ská o4ský o1sl os4la os4li os4lý os3mo os4mu o4st. o4stg o4stm os4tor os3trů o4sté o4stš o4stý o1sy o1t ot4kl o4tlý oto3s ot3ro ot3ví o3tí o3tř ot3ři o2u ou3bě ou3dě ou4fl ou4il ou4is ou4k. ou3ka o4ukl ou3kr ou3ká ou3m oup3n oupo4 ou4s. ou3sa ou3se ou4sk ou3sm ou4tv ou3v ou4vl ou4vn ouz3d o4učk ou3ži ovi4dla o4vsk ovy2p o2všt o1x o2z o3za oz1b oz4d. oz3dá oz3dě oz3dí o3ze oze3d2 ozer4 oz1h o3zi oz3j oz3k oz4ko oz1l oz3m o4zn. o3zo oz3p oz4py oz4pě oz4pí oz3ro oz3ru oz3rů oz3t o3zu o4zut oz3vr oz3vá o3zí o3zů ozů4s o1č oč2k oč4ka o2ň o3ňa o3ňo o1ř oři2s o3šk o4šku o4šky o3šl oš4lá oš4mo oš4ti oš4ťu o3žl ož4mo 1p 2p. pa4ed pa4es pa4kl pa3si pa4t. pat4ri 2p1c pe4al pede4 pe4ig pe4np peri3 pes3t3 pe4tra 3peč pi4kr pi4pl 2pk p2kl p2l 3pl. 4p3la. pl3h pl4h. 4p3li. 4plo. 2pn p2nu po1b2 po3c2 3pod podbě4h pod4nes po3dru po3drá po3h poly3 po3m2 po4mp po4ol po3p po4p. po4pm po1s2 pos4p post4r po3t2 po4t. po4tn po3uk po3uč po3už 3po3v po3z2 po4zd poč2 po3čk poč3te po3ří po4šv 2pp 4pra. pra3st pr2c pro1 prob2 pro3p pro3t4 pro3z pr2s 4prán prů3 pse4s 2p1sk p4sut 2pt p4tej p4ter p4tev pt4ri p3tu p4tá. pu4dl pu4tr pyt3l pá1 pá2c pád3l pá4nv pá4sl 2pč pé4rh 2př. pře3h pře3j pře3t4 pře3z pře3č2 při3 přih4 2pš pš4ti 2pť qu2 2r. 1ra. ra4br ra4em ra4es ra4ff ra4hl ra4hm ra4jg ra4jš 2rak ra4nh ra3si rast4r ra4vv ra4wl ra4y. ra4yo ra4ďm 4raži r1b r2bl r1c rca3 r3cha r3cho rc4ki r1d r4dla rdo2s re4ad re4au red4r re4et re3kl re3kvi re4mr re2sb res3l retis4 ret4r re4um r1ha r3hl. rh3n r1ho r3hu r1há ri4bb 1ric ric4ku ri4dg ri4dr ri4fl ri4gh ri4zm 2rk r2kl r1l 2r1m r4mio 2rn rna4vš rn4dr ro4ad ro3by rod2l ro3d4r 3rofy ro3h ro4h. ro4jb ro4kš rom3n romy4s ropát4 ro2sb ro4skv ro4sky ro3sv ro3ti ro3tl ro4tč ro3vd rově4t 3rový roz3d roz3n ro4zo roz3v ro3zá ro4čp rpa3d 2rr rr4ha rr4ho 2r1s r2st r4stu rs3tvě rs3tvý 2r1t r2th r4trá rt4sm rtu3 r2t3v rt4zu 1ru. ru3se ru3si rus3k ru3ži 3rvaní r1x 1ry. rych3 ryd2 rys3ky rys3t ry4zk ry4zn ry4í. ry4šk 2rz rz3d rz3l rád4l rá4dž 1rák rá3ri 1rář r1č 4rčitý. rč3t 3ré. 2ró 2rš rš4ní rů4m. růs3ta rů4v. 3rý. rý4zn 2s. sa4pf sa4pr sas3k s2b2 s2c s3ca s3ce. sch2 sch4l sch4n 3schop s3ci sci4e s3cí s2d 1se se4au se3h se4ig se4il sej4m se4ku 3sel se3lh 3sem ser4va se3s2 ses4k se4ss se4stra se4stru se4stř set2 se3tk se3tř se4ur se3z se3čt 2sf s3fo 3sfé s3fú 1si 3sic 3sif si4fl sig4no 3sik si3ste 3sit s2j s3ju s2k 4skac s4kak 4skam s4kok 2skon skos4 4skot sk4ra sk4ru sk4ry 4skve sk4vo s3kán s3ků 3sl. 4s3la. s4lav s3le. s4led s3lem s3len s3let s4lib s4liči 3sln 4s3lo. s2ly s3ly. s1lí s2ma s4mek s2mo 2sn s2na s3nat s2ne s3ne. sn4tl s2ná s3ná. s4níd 1so sob4l so3br so4sk so4tv sou3h sou3s souz4 so4šk s2p s4pol spro4s 1sr 2ss ss4sr 2st. 4sta. s3taj s2tan st4at 4stec s4tep st4er s4tero s4tich 2stil s4tink 4stit. 4stič st3lo 2stn 4sto. s4tona 4stou. 4str. 4stram s4trik 4strn 4strác 4stupni s2tv st4ve 3ství 4sty. s4tyl 3styš s2tá 4stá. s3tář 4stě. s4těd 3stěh s2těr s2těž s1tí 2stí. s3třej 1su su4ba su4bo suma4 su3ve s2v sy3c sych3r sy4nes sá2d 3sáh sá2kl 2s2č s3či 1sé 1sí 2sň 2sť s3ťo 1sů s2ž 2t. 1ta. ta2bl tac4tvo t2a3d 1taj ta4jf ta4jg 4talt 4tand 3taně t1ao 2tark tast4 ta3str ta4čk 2t1b 2t1c 1te 3te. te4ak te4fl te4in 4teném teob4 tep3l ters4 tes3ta te4tr te4uc te4ur te4ut 2tf 2tg 1ti ti4gr 2tih ti3kl tin4g ti4pl ti3sl tis4tr ti4tr 2titu tiz4r 4tizí tiú3 2tiž 2tk2 t4kal 4t2kan t4kat t2kl tk4la tk4li 4tkně t2ká 2tl 3tl. 4tla. t1le tles3 3tlm t3lo. t4lou tlu3 tlu4s t1ly t1lé 2tm t2ma 2tn t3ní 1to to4as to3b tob4l to3dr to4hm to4ir 2toj tol4s to4ol 4top. 4topt 4topu 2torn 2toup 2tp t3rant t4rea t4ref tre4t 4tric. trip4 t4rit t4rog t3rol tro4sk t4rou 4trouh 4troň. 4trun t4rus 4t4ruž t3ráln 4tráš 2trč t3rům t3rův 2trý 2t1s ts4ko ts2t 2t1t tt4ch tt4ri 1tu. tu4ff 1tuj tu4lk 2tup tu4r. tu3ry tu4s. tu4ť. tu3ži t2v 2tve 2t3vi t4vinn t4viš t4výc 1ty. ty4gř ty2la ty4ře ty4řh ty4řj ty4řo ty4řr ty4řú 3tá. tá4fl t2č t3či 2tčí 1té té2bl 3tém 1tě tě3d4l 2těh 2těnn 2těp 1tíc 4tíc. 4tíce 1tím 2tín 2tír 2tř t4řeb třeh3n t2řel t2řic t3řil tř4ti t1řu t2řá 3třáb tří4s 2tš t3št tš4ti 1tů 1tý. 1tým 1týř 3týš u1 2u. u2at u2b u3ba u3be u3bi u3bo ubs4t u3bu u3bá u3bí. u3bů uc4tí 2u2d u3de u3di u3do u3dru u3du u3dy u3dí ue4fa 2uf u2hl uh3lá uh3no u2in u2jm u2k u3ka. uk4aj uk4al uk4at u3ke uk3la uk3le u3ko u3ku u3ky uk4á. u3ků ul4fa ul1h ul4pí u2m u3ma u3me u3mi um4pl um4ru u3mu u3má 3umř u2n un4dl u3ne u3no u3nu u3ně u3ní u3nů un4žr u2p u3pa u3pe upe2r3 u3pi u3pln u3pu u3py u3pá u3pě u3pí u3pů u2r u3ra u3re u3ri 2u3ro u3ru u3ry. u3rá 1urč u3rů u2s us3ky us3ká us3ké us3ký us1l us2lo u3so u4ste u4sty u4sté u4stě u3stř u4stš u4stý u3su. u3sy u3sá u3sí u3sů u4tro u4trá u2v u3vi u3vu u2z u3ze u3zi uz1l u3zo u3zu u3zí u2č u3ča u3če u3či u3čo uč3t u3ču u3čá u3čí u2ď u2ň u2š u3še u3ši uš4kl u3šo uš3tí u3šu u3šá u3ší u2ž u3že u3žo u3žu u3žá u3ží 1v 2v. va3dl va4jť va4kl 2v1b 2v1c v2ch 2v2d v4dal v3di v4děk v4děč ve3dle ve3jd 3ven ve2p ve3ps vep3ř ves3l ve4sm ves4p ve3sta ve3t4ř ve2z3m vi4ch vide2 vi4dr vi4et vi4kr vi2tr 2vk v2kr v2l 2v3la. 4vle. 4vlem 2vlo 2vm 2vn v4nad vo3b vo4ic vo4ja vo4jb vo4jd vo4jj vo4jm vo4jř vo2s vo4tř vou3 vous2 v2p vr2c vr2dl 4vrny v1ro vr4st vrst3v vrs4tvě 2vs2 v1sk v3stv 2v2t vy3c vy3d2 vy4dra vyp2 vy3s2 vy4sn vys4t vy3t vy3č vyč4k vyš2 vy4š. vy4šm vy4šš vy4žl v2z2 vz4no vz4né vz4ně vz4ní vá3ri 2v2č v3čá v3čí v4čír vě4cm vě3t4a více3 ví4hat 3vín 2vň 2vří v3řín v2š2 vše3s v3ští. 3výs vý3t 3vý3z v2ž2 wa4fd 3war wa4re we2 2x. xand4 2xf xisk4 2xn 3xov x1t xt4ra xy4sm y1 y2a y2bl yb3ri y2ch y4chr y2d1l yd4lá y2dr yd4y. y2e y2gr y3hn yh4ne yj4ma yj4me y2kl yk3la y3klop yk4ly ymané4 ym4kl yna4s y3ni ype4r yp4si yp4tá y2př yr2v y2s y3sa y3se y3si ys3lu y3sm y3so y3sp ys2t ys3te yst4r y3su y3sv y3sy y3sá y3sé y3sí yt4me yu3ž y3vs yvě4t y3zb y3zd y3zk y3zn yz4ně yz4ní y3zp yz4po yč2k y2ň yř3b yřk4n yř4če y3ří y2š y3še y3ši y3šk yš1l y3šo y3šp y3šu y3ší yž2 y3žd 1z 2z. zab2l za4bs za4dk za3dl za4dn za3h za3i za3j za4jk za3k za4kt zal4k zam4n za3p2 za3s2 zat2 za3tl zat4r za4ut za3z zaz4n za4zš za4č. za3š zaš4k za4šs 2zb zban4 z2by zbys4 2z1c 2z2d z3di zdně4ní z4doba z4dobný zd4re zd4ví z2e ze3h ze3p2 4zerot ze3s2 zes4p zet2 zev2 ze3vn ze3z ze4z. 2z2f z1há z4ine z2j z3jí 2z2k z3ka. z3ky z3ké z3ků z3ký 2zl 3zl. zlhos4 zlik3 z3ly. z2m2 2zme z3mn z3my z4měn 2z2n 3znak z4nal z3ne. z3nic z3no z3nu z3ny z3né z3ně z4něl z3ní z4nít z4nív z3ný zo4tr zo4šk 2z2p z3pt z4pát 3zrak 2z1s2 2zt ztros3 z4trá z3tř 3zu. zu3mo zu3mě zu3mí zu3š z2v zva4d z3vař z3vi zvik4 zv4ně z3vod z3voj z4von zv4ro z4ván z4věs z3víj 3zy. 2zz zá1 záh2 zá4kl. 3záp zá3s2 zá3z záš2 2zč z3čl 2zň z2ř zřej3 z3řez z3řeš 2zš2 z3šk zš4ka z3št 2z2ú1 zú3č zú3ž zů3s á1b á2bl áb4ry á4bř. á3cho ác3ti3 á1d á2dl ádo4s ádos4ti ád1ř á1ha á3he áh1l á3hl. áh3n á1ho á1hr á1há á1j á4jmu áj4mů á4kli ák4ni á1la á1le á1lo á1lu á1ly á3lé á1lí á3my á3mé á1mě á3mí á3mý áne4v á1ra á1re ár2m á1ro á1ru á3rů á1s á2sc á2s3k ás4k. ás4kl ás4kn á2sla ás4ly á2sm ás4po á2st át3k át1r á1tu á1ty á1tí á3tý áv4si áv4sí áz3k áz3ni ázni4c áz4vi á2ň á1ř ář4ke ář4ků á2š á3še á3ší 2č. 1ča ča4br 2čb 2č1c 1če 3če. če1c čes3k 1či 2čk č3ka. č3ko č3ku č3ky 2č1m 2čn č2ne 1čo č2p 2čs č1sk čs4la čs4sr 2č2t č4tené. č4tený čt4la č4tový. 3čtv 4čtěn č3tí 1ču 1čá 1čí čís3l 1čů 2ď. 1ďa 1ďo ďs4te 2ď1t 3ďuj é1 é2d é3di é3do é2f é3fo éf1r é2kl é2l é2m é3ma é3me é3mi é3mo é3mu é3mů 4ére. é2s é2t é3ta é3to é3tá é2š é2ž ě1c ěd3r ě3ha ě3he ě3hl. ěh3lo ěh3n ě1ho ě3hu ě3hů ě3ja ě1je ě1jo ě3jů ě4klé ě3k2t ě1l ě1ra ěra3d ě1re ě1ro ěr3s ěrs4t ě1ru ě1ry ě1rů ěs3k ěs3n ět1a3 ět4ac ět1l ě1tr ět3ra ě4traj ět3v ě1tí ět3ří ě2v ě3va ě3ve ě3vl ě3vo ě3vu ě3vá ěv3č ě2z ě3ze ě3zi ěz3n ě3zo ě3zí ě1ř ě2š ě3še ě3ši ě3šo ě3šu ě3šá ě3ší ěš3ť ěš4ťs ě2ť ě3ťo ě2ž ě3že ě3ži ě3žo ě3žu ě3ží í1b íb3ř í3cho ích4t íd1l í1h í2hl íh3n í1j íjed4 íj4mů í2kr í1l í1má í3mé í1mě í1r í1sa í2s3k ís4kl ís4kn ís4l. ís3le ís4ln ísáh2 í1t ít3k í3t3ře íz3da íz3de íz3k í3zna í3z3ni í3zněn í2ň í1ř í2š í3še í3ši í3šo í3ší 1ň 2ň. 2ňa ňa3d 2ňk 2ňm 3ňov ň1s 2ň1t ó1 ó2z ó3za ó3zi ó3zo ó3zy 2ř. řa4pl řa4ďm 2ř2b 2řc 2řd ře3ch ře4dob ře1h ře3jd ře3kl ře3kv ře4kří řeo4r ře3p2 ře4p. ře4pk ře4pč řer4v 2řes ře3ska ře3sko ře2sp řes3po ře4sr ře3sta ře3stu ře3stá ře3stř ře3tl řet4ř ře3zd ře3zk 4řezl ře3čt ři1 řia3 ři3h ři4h. ři4hn ři4jď ři4l. ři4lb řil2n 4řine řis2 3ři4t. ři4v. ři4vk ři4vn ři3z řič4t ři3ř ři4š. 2řk ř2kl řk4la řk4li řk4ly řk4no 2ř1l 2ř1m 2řn 1řo 2řou 2ř2p 2ř1s řs4to 2ř1t ř2v 2řz řá4pl řá2sl 2ř1č 2říd ří4kř ří1s 2řš ř3št řš4ti 1š 2š. šab3 ša4vl 2š1c šej4d šep3t ši4mr 2š2k š3ka š3ke š3k3li 4š3kou 4škov 3škr šk4ro š3ku. š3ky 2šl š2la š2li š3liv š2lo šlá2 š2lé š2lý 2š1m šmi4d 2šn š2p 2š1s 2št š4tip št4ka št4kl š4těk š2těs š4těv š4típ š2v ší3d š2ň š3ší 2š2ť š3ťo š3ťu š3ťá 1ť 2ť. 3ťal 2ťk 2ťm 2ťt ťáč4k 1ú ú2c2 ú2d új4ma ú2k ú2l ú2n ú2p ú2t út4ko ú2v ú2z úz3k ú2č 3úče úře4z úš4ti ú2ž ů1b ů1c ů1hl ů3jd ů4jmový ů1le ů1my ů1mě ů1ra ůr4va ůr4vy ů1s2 ů2st ůs3te ůs3tán ůt2 ů3tkl ů2v ů3va ů3vo ů3vě ů2z ů3zo ů2ž ů3že ů3ži ů3žo ý1b ý3cho ý1d ýd4la ý1h ý1j ý1l ý1ml ý1mě ý2n ý3no ýpo3č4 ý1r ý1s2 ý2sk ý1t ýt4ku ýt4ky ý1u ý4vli ý3zk ý3zn ý4zvu ýč4ně ý1ř ýš3l 1ž 2ž. ža3d ža4tv 3žač 2ž1b 2ž1c 2ž1d že2b3 žeh3n že4ml že4zg ži4dl ži4jm 3žil ži2vl 2žk žk4ni 2žl ž4lic 3žlo 2ž1m 2žn žon2 2ž1s2 2ž1t ž2v žá4br žá4nr 2žď ží4zn 2žň 2žš žš4ti žš4tě}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-af.pat0000644000175000017500000022567411761001300024637 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-af.rme % used: ' - a b c d e f g h i j k l m n o p q r s t u v w x y z ä è ê ë î ï ô ö û ü \patterns{ .aan5s4 .aä7lawa .a6bc-b .a4b5la .ab7salo .a6b-ja .ac7cra. .a6farm .af7arm. .a6feet .af7eet. .a4f5en .a6fets .af7ets. .a6foes .af7oes. .a4f5oo .a4f5ra .af6ro' .a7fro's .af6ro- .a7fro-h .a6fry. .af3s .ag6aam .agte6r5 .a6guur .a9ha. .ah7lers .a3kw .a6leer .al7eer. .alf4 .al7fagr .al5fr .al6lda .a4l3o .al6oïe .a7loïen .al3p .al5st .al7thea .al7twee .al6zhe .amp4s .amps5w .a6naër .an7aëro .an6cpl .and4 .an5dr .ang4 .an5gl .angs5 .a4n5io .an7thro .a3pr .ap7side .a5rag .ara6p. .ar7thur .ar6zbe .as7jas. .a6snog .a6sof. .a5sti .a7straa .a7s6tral .at6hol .a7thol. .a5tsj .atte4 .au7drey .b6aanv .ba6din .ba4d5o .ba7loi. .ba7ragw .ba7rins .ba6sek .ba7tho. .be7deks .be6kaf .bek7af. .be5la .be7lol. .be7skos .be7thel .be7thul .bi7sho. .bli4 .blus5 .bo7kerf .bo7kies .bo7kors .bo7maat .b4on .bo7plaa .bo5ro .bo7sor. .bo5sta .bo7trit .bo7tswa .bo7uit. .bout5j .b4re .bu6eno .bu6lol .bu7thel .by6ldr .by6lho .by6lne .by6lpi .by7port .bys4 .by6tal .ca7thy. .ca7yenn .chlo7e. .ci6rca .ci7trus .cos7ta. .cy6pri .d2 .da7gon. .dag5s .da6kat .da6koo .da7tage .da6tji .dat7jie .da6wki .de6k7laa .de6klo .de6kwe .de5la .de7roga .de6sal .de6sok .de4sp .diep5l .di6jks .di4si .di7thak .do4m5a .do4m5o .dor7ste. .dr6oef .dun5s .du6pre .dut5j .dy7spie .e6bcu. .ed5wa .ed7win. .eer6sk .ee4t .e6fron .ef7ron. .eg7gofo .e6indu .ei5st .ek4s5k .ek7sopa .ek7sord .eks7tri .eks7tro .en7dres .enk4 .en5kl .e6noft .en7ofta .en4t5j .en7topt .ep7soms .er4d5a .er6dwo .er6fle .er6foo .er6inv .ern4 .er4t4 .er5te .ert5j .ert7se. .erts5w .e2s .e9sau .e4s3k .e3so .es3p .es8p. .es6pma .es3t .es6tco .es6tni .es5tr .e7tage. .et4sn .eur5a .eu7stac .ex7odus .e6zra. .f2 .fo6chv .fo6wle .f4ri .fy6tji .g2 .ga7lage .ga7lago .ga6lap .ga6loo .g6arbo .ga6sen .ge7dart .ge3g .ge7geks .ge7guil .gekun5 .gekuns6 .ge5la .ge7mopp .ge7muit .ge7nève .ge7rogg .ges4 .ge7sjab .ge7sjar .ge5sk .ge5so .ges7pe. .ge7sper. .ge7steg .gif3 .gi7gagr .gi6sen .gly3 .gly5k .g6lyna .g4oo .gou7da. .gr6äbe .g6ruba .gui7do. .hang5s .he6blu .he6gor .he6gra .h6eind .hek5o .he7rakl .he6r5en .he6wle .hi8v. .ho6fet .ho6laa .ho6loo .hooi5 .ho7taze .ho4t5o .hy6gro .ic7teru .i4gl .ile7us. .i2n1 .i9n8a. .in6ari .i7narie .ind4 .in7dwar .ing4 .in5gr .in5gw .in6iti .in5kl .in6kly .in5kn .in5kw .in6osi .i7nosie .in3s4 .in7snee .in7twyf .i5raa .i3sa .i4sk .i3so .ja6gli .jah7we. .ja6spa .ja7taga .j6äger .je7sopp .jo7dofo .jo7safa .ju6kos .juk7os. .j6ü6rge .jy6sel .k2 .kaar4 .kade4 .kadet5 .k4af .kaï7ro. .ka7nont .ka6pla .ka7plak .k6arbe .ka7thar .ka7thu. .ka6toë .kat7oë. .ka6tui .ke6ple .ker6k5a .ker6k5l .kerk5r .ker6sa .ker6sl .ker6s5p .ke4s5t .kie6st .ki6pli .ki4r .kit7se. .k4la .k6leyn .k4li .klip5 .knik5 .kn6opn .ko6maa .ko6maf .k4op .kope4 .koper7a .ko6pla .kop5o .ko7rag. .kor6st .kors7te. .k6rak. .kr6üge .kryt5 .ku7mon. .k4we .k4wo .ky7otop .l'7etji .la6eti .la6kwa .la5sa .lei5s4 .lek7oë. .le6poo .le5pr .le7shab .le6son .le4sp .les5t .le6suu .lig5e .li4gi .li6gom .li6gre .li7pase .l6loyd .lo6chn .lof7ui. .lo6glê .l6ontd .los5k .lu6gen .lui5sl .l6üder .m2 .m'7etji .ma6cdo .ma6nal .ma6nur .ma7stek .ma7thes .ma6zda .mel6k5a .mel6k5l .mer6k5l .mes5m .me4sw .me6tem .mi6dos .mi6rba .mi7traa .m4ne .mo7djad .mo7flam .mo6sin .mo4sk .mu4e .my6nen .my6n5in .my7unis .n2 .n6aand .na5fl .na6gro .na7groe .na7smaa .na7stor .na7uurs .ne4k5a .ne4k5o .ne6kri .nek7rin .ne6kys .ne4s3 .ne7serh .n6etik .ne4t5j .ne6tru .ne6wca .ne6wfo .ne6wla .ne6wma .ni4e .ni6jho .ni6rva .nix7on. .n6kosa .noet4 .noe5tj .no6gee .no4k .n6ondu .nu4l .ny7lont .oe5kr .oe4r .oe7ralg .oe7rang .oer7os. .oe4s3 .o4gl .oh7rigs .o6klah .ok7laho .ol6ieu .o7lieui .oms4 .o2n1 .ond6ui .on7duit .o6nemo .on6ias .o7nias. .on3k .on7parm .on3s4 .on6she .on6sse .on6t7eer .on6t5er .on4tr .ont7ras .ont5ri .o9nus .on6us. .oon4 .oon7de. .o4op .oor5n .oor5s4 .oo4s .o6peet .op7eet. .o6peg. .o6pein .o6p5erd .o4pof .o4pr .op5ra .ops4 .op7smuk .o7ragie .or6kne .o3ro .orto5 .o4sk .os5ko .os7oog. .ot6hel .o7thell .ou6doo .ou7nôi. .ou5tj .p2 .pa4d3 .pa7die. .pa6vlo .pe5la .pel6sk .per6st .pe4sk .pe4st .pie6tj .pi7laf. .pit5s .p4la .po6dzo .p6oefe .poen4 .p6ontw .po6sad .p4re .pu6tad .py6paa .py6pla .py6pol .pyp5r .py7thon .r2 .r'7etji .r6aard .ra7dart .ra6seg .ras7eg. .re7aumu .re6gru .rek5s .re6mas .rem7as. .re6mco .re4sl .rie4t .riet5j .riet5r .ri6ple .roc7ky. .ro6gak .ron7do. .rond5s .ro5py .ros5t .ro6tre .ro6wli .ru7klip .ruk4o .ru7kope .ru7staa .ru6suu .ry4k5a .ry6ste .s6aans .s4af .s4ag .sa7gopa .s6akty .s4am .sa6vlo .s4ca .se6an. .see5ra .see7ys. .se7khuk .se6laa .se6lop .se7reni .se6sle .ses5t .se6suu .se6tap .se4tr .sex5y .s6fale .s4fi .s4gr .s4ha4 .s4he .s4hi .s4ho .s4hu .s4in .si6nes .si7pho. .si7rag. .s4ja .s4ka .s4ke .s4kl .s4ko .s4kr .s4ku .slag5 .s4ma .s4me .s4mi .s4mo .s4mu .s6nags .s4ne .sod4 .so7dafa .so7dwan .so7iets .so6kop .some4 .s6oms. .s4on .so6neg .s4op .so6pek .so7phok .so7ross .s4pe .s4pl .spo4g .s6pren .s4py .s8ri. .s4ta .s6temp .ste7rol .ster6ta .ster6t7j .s4ti .s4to .straf5 .s6trei .s6tuar .stuc5 .su7biet .sub5m .sub5p .su8e. .s4ui .su5kr .su7ther .su7tra. .s4we .s4wi .s4wo .sy1 .sy6lvi .sy7nagr .sy7slag .t2 .t6afsy .t4ag .tee5k .te6flo .te7rafi .te7ragr .ter6tj .tert7ji .te4s5t .te7stud .ti6ene .tie6t5j .ti4k .ti6ner .t6jaai .tjok5 .toe7ys. .to6kla .to7ky7o. .to6lun .to7ront .tou3 .trap5r .trek5 .tre4s .trie4 .tries5 .t4sa .ts4h .ts6jaa .ty6daa .ty6dor .ty6dra .ui6laa .ui4t3 .ui5ti .ui5t6ji .um7hlan .uns4 .un5st .u5raa .u5tra .va6kad .va6kei .va6naf .va4n5o .va7raan .va6sen .va6swa .vas7ys. .ve7cino .ve7laar .ve7lare .ve7lêr. .ve7loer .ve7lome .ve7meng .ve7rema .ve7rena .ve7reve .ve7skaf .ve7tore .vlas5 .vo6gin .vo6lyw .vo6sko .wa7ghri .wa4n .wa7smou .wa6spa .web5m .we4bo .we6b-o .week7lan .wee4t5 .we6kuu .we4l5a .we6lin .wel7ing .we6nan .werk5l .wer6k5r .we4s5k .we6soe .we6swa .w8hê. .w4hi .wi6id. .wins5 .wi4p .wi4t .wî9e. .wy7kwas .wy7nand .wy6net .x2 .y6amin .y6anni .y6asud .yk7loon .ys3 .ys6ere .ys5la .ze5us .z6üric .z4wa .z4wi aa2 aad1 aa4da aa4de aa4do aa4d3r aaf7emme aaf6sat aag5al aag7asem aag7elas aag3r aag7rond aag5s4l aag5sp aag5st aag7swee aai7lag. aak1 aa4ka aa4ko aak3r aak7ster aak3w aal1 aal6dys aald7ys. aal5fe aal6fpo aal5sa aal7sfee aam1 aa4ma aa4me aa4mo aam7smul aan1 aan6dou aand6re aan7dren aan7dros aan7gons aan3k4 aan5kl 5aankon aan7kry. 5aanleg aan7sage aan6see aans7eer aan6sek 5aansig aan7skem aan5sl aan5sn aan6som aan6son aan5sp aan7tuig 5aanva aap1 aa4pa aa4po aap3r aa4pu aar3a aar6dan aard7ang aard7as. aar5de aar7ding aar4du aar3e aar3i aar7kwek aar6lbe aar6lka aar6lva aar6lzi aar6l-o aar3o aar7ser. aar7seri aar6sid aars8teek aars8tell aars6ti 5aartap aar6tin aar7tomo aar7tryb aar3u aas3 aa4so aas7omel aat1 aat7nagt aa4to aat3r aat6sef aat7sfee aat7slim aat6slo aat6sly aat7sonn aat6sow aat6sti aau6wbe aä5ron aba6kas abak7as. aba7komb abare4 aba7ster ab3d aber6sp ab5lau ab5rup 3abso abu7scha ab5wie ac5que a2d a3da a4d3aa adam4 adam7pe. ada4r a3de ades7lan ade7smee a3di adi6eus 5adjud 5admin a3do a4dow a3dr 5adres. ads7erwe ad4sn ads6op. ad5sor ads7teso ad4su a3du ad5uit adu7spel adu5tj 5advert a3dy ady7smit a1e ael7atoo ae4l5ei ae4lo aes5to aes5tr aes7tuur aë1 4afee af5eks afel5aa af4fre af5gha af5inr af3l a4fof af1r af5raa af5ram af5ran a4f3re 3afri a4f5rit a4f3ro a5frod a4f3ru af3s4w 3afva afval5 ag3aa a6gaanv a4gaar ag5adv a4g3ak ag5alg ag5api ag5are 4age. 4ageb 4aged age6ddo a4gei 4agem a4g5erv 4ages a6g5ewen agge7us. a3gi a5ging a4g5ins agi5s6tr ag1l ag5ogg ag5ord ag5ork ag5oud a4g3re ag5rei a4g3ru ag3sa ags7abno ag6sins ag5ska ags7koev ag5skol ag5skr ag5sky ags4lo ag4sn ags6oep ag5som. ags6oom ags6op. ag5spe ag5s6por ags4t ags7taal ag5sti ags6waa ags6wee ag4tu agt7uur. a4g3ui ag5ure ag5uur ag-7lag. aher4 ahe5ri a4hs. ai1 aig6ne. aiï5er ai4lp ain6ste aip6eis ai3s4k ai5sla ais4p ais7prys ais4t ai3tj ai3t4r a4k5aan ak5arb ake6lee ake6lof ak5ess ak5ins akis4 akis7te. 5akkoo a2k3l a5klank ak6leet a2k3n ako6bre ak5oms a1kr a4k3re ak5rig ak4sc ak5sme ak3sp a4k3ui a2kw ak3we ak5win a3ky a4kys a1la ala7gadi a5lagm al5agt ala7kled alan7gaa al5dei a4lef ale6str al4f3e alf6eni al4fh al5fie al4fj alf7olie alf6sko alf6sni alf6sta alfs7tan al4fu alf4- 5algori alien5s ali6gal ali7glas alk7aard alk7laag alk7oond alk5sp al4kui alk7wyk. 5alleen alm7eier alm7lont a1lo als4a als7agti als7ghaa al6skel als7kelk als5li al4s5oo als7pret als5waa als7werw alt6hea alt6hus alt7rots alt6sas alt6wee a1lu alve5o a2m a3ma ama3k4 aman6t5j ama7rins am5atoo 5ambag 5ambass a3me am5egt ame6sin ame5sm ame6spo a3mi ami7skyw amm6afu 5ammun a3mo amp7arre amp7lag. amp7leer amp7lig. amp7lug. amp7omhe amp7seël amp7sfee amp7sier amp7staf amp7staw ams7esel am6s5kop ams7lend am6smet ams7meti ams6mul am4s3o ams7pels am6swan am6swar ams7wyn. a3mu a4mui am5uit a3my an5agt ana7kwal an5alf ana6spi an4c- and7aans and7adel an6dakt an5dan and7anal an4dap an6dase an6datt and7attr an6degt and7egte and5eks and7emal an6derf and7erf. an6dete and7etes and7eval an6dinw and7inwa and6ja. and6jar an4d5om an4don an4d5op and7oud. an6drak an4dro and6ser and6s7kop and7spaa and7spre and7steg and7swee an7dwing and7wyn. ane6ron ang7aal. ang7adem ang7ghor ang6hai ang6lad an5g4li an6glig ang7lig. ang7lip. ang6nol ang6ons ang7ore. ang7repu ang7sakm ang6ska ang7snee ang6s7te. ang7stem ang6sur ang7ure. anie6t5r an5inl ani5sf ani7slaw an6kase ank7asem ank7refe an4kry ank3w an5ops an5opt an5opv an5ord an5org ano7roei ano7stoe anr6hyn ans7aalw an4s5am an6sass ans7asse an4sc ans7eila ans7eura an6sink ans7ink. an6sjek ans7jekk ans7jord an4ske ans5kei an6skin an6s5kop ans7kous an6slat ans7mada an4sn ans7oran an4s5pa an6sper ans7pet. an4spo ans4ti ans7toil ant5aan ant5aar an6tass ant7asso an4tei an6teks ant7ekst 5antenn ant7ete. an6tins ant5jo an4tol ant7opru ant7rest ant5rin ant7rob. ant6ski ant6sko an4tui 5antwo a1ny a1o a2p a3pa a4p5aan a4p5agt ap5aks ap5arm 5aparth a3pe ape6nop a3pi api6rfa ap3l a3po apo6kaa ap5ond apo5sta 5appar ap1r ap5rol ap3ru a4pry ap5ryk a5prys ap6sall aps7alli ap6seko aps7iden ap6skof ap6s5taa ap5sti aps7toet aps5we a3pu a4pui ap5uit a3py a1ra ara7gwan ara7klee ara6kop ara3p4 ara6ppa ar6d5agt ar6das. ar6datm ar5der ar6deti ar6d5opp 3area aree5s areg7swe ar3ei are7knip ar5fla arg4h ar5gha 5argite ar4gl arg4o arie4f ari6jke ar6k5ana ar6kini ark7leer ar5klo ark6los ark7onvo arko6v. ark7snui ark5sp ar4kw ark5wa arn6avo a1ro aroet6j aroe7tji aroo5h aroom4 aroo5p aroo5s ar3op aro6wva ar5rag arres5t ars5ag ars7elek 5arsena ar5sie ars6kou ars7krap ar6skre ars7kree ar6skro ars7pan. ar4spr ar6stal ars7tall ars7tee. ars6-in ar6taas art7aasv ar6talb art7albu ar4t5as ar4tc ar5te. art7eend ar5teh ar4tei art6hol art6hur art6omo art5oog art5oor ar4tor art7reek art7roep art6ryb art7samb art6slu art6spr art7spyn a1ru arus6o. a1ry ary7taal as3ag as5app as3c as4d. as4dh as5egt ase6rak as5ete as3f asg6hit as4hi asi7freu a4sj. a4sjm a2s3k a5skool a5skri as5kru a2s3l as5laag as3m a4smy a4sna as3no as9of. as5ogi a4s3oo as3op as3p as4por as3t as4t. a5staa as4th ast6les a5stof a7strak. a5s6tran a5s6troo as3w a4sys as5yst at5aar a4tag ata3s4 ata6sse atas7se. ata6wba ate5it 5atelj ate6rar ate6rer ate6ron a6tetes ath7cart a5t4hee ath7kinp ath7lone atie6te a2t3j atk6v-s 5atleet 5atmos at5oog at5ry. ats7alma at6sint ats7inte at4sj at6skin ats6kom at6skop ats7kop. ats7krip at4s5le ats7lykh at4sm ats6maa ats7nood at6somw ats7omwe at4son ats5ond ats7onko ats7onlu ats5op ats7ower ats7tend ats7trek ats8treke at6stro ats3w at5the att6hys at4tu atu6maa 2au aud6rey au5gra aug6sbu aul6spo au3p aure5u auri5s4 aus4t aus7tin. au5str aus7tus. aut6ste ava6lop ave7lott avlo6v. 3avon awa7glas awas4 awe5ga awe4r5a awer6ui aws6han ax5ofo a3ya ay4a. ay5ist ayn6ard ayn6or. a3yo a3yw azoo7ka. azz7agti az4zl azz7orke 1ä 1b2 2b. babak4 bab7wiër ba4d5ra bad5sp ba4kin ba3kl ba4kla ba6kleu ba4k3o ba4k3r bak3w bal6kla ba4lo bal7onts bal5or bal7tsas ban4da ban6dek ban4d5r ban7glad bang7ste bangs8te. ban4k5a ban6kre ban4kw bar7kaan bar4s3 bar5th bas7ekst bas7ghit bas7jan. ba4sn ba5spe bas7peer bat5aan ba3t4j 2bb b3ba b3be b3bi b3bl b3bo b3by 2bd b3de b3di b3do bed7slaa bed6sta beds7taa be3dw beel6dr bek7neus bek7wind bel6aga belk6li bel7klik bel6ldo ber6gaa berg7aar ber4gl ber4g5r ber7grys ber6gzi bers7pan ber6spr bers7pre bert6sk bes6aan bes4k be5ska be3sl be3sm be3so be5son be5sôr be3s4t be6s5ter be5sti be6stia bes7tial bes7trol bet4h be5tha bet7hesd be5ton be3tw 2b1f 2b1g b3ge bid3s bi4du bid7ure. bie6dui bie4g bieg5r bi4jl bin6dri bio7sfee bi4rc bis4a bis6ho. bis7scho bi3tr 2bj b3je 2b1k b3kl b3ko b3ku bla4d5a bla6don bla4d5r bla5so 4blau bleem5 ble4s ble7ser. bles5k ble6tji blet7jie blê6rfl blik5o blix7en. blo4k3 blo7kaal blo4m3 blu6sem bly7mare bly3s4 2b1n b3no bob7slee boe6kil boe6kom boe6koo boer6st boers7te boe4s5k bog7gher bog7skut bo2k1 bo3ka bok6aak bok6ale bok6as. bok6erf bok6ies bok3l bo7kleed bok6om. bok6ors bok6ost bok3r bok6rag bo4m5aa bom6aat bo4m3o bon6dam bon6dra bond7raa bon6tel bon4t5r bo9op. bop6laa bor6dak bor6des bor4g5a bor6gri b4ors bor6saa bor4s5k bor4s5l bor4s5t bo2s bos7anem bos7jamb bos7pepe bos7taai bo5s4tr bos7uil. bo5t4ha bot6sto bou6it. bou3s4 b3pr brand5a breek5 br4ei brei5s4 brengs7t brie6kw briek7wa 3bro bro4n bro4sk bro6vni bro6wni bru4l 4brup br4üm 2b1s b3se b3si b3sk b3so b3sp b3st bs4ti b3su 2bt b3te b3ti buc7cleu buik5s bui5t4j bult7af. bul4t5j bul6top bult7op. bul6tui bun7senb bus6had bus7toer but6hel buu7rend 2bv b3ve b3vi 2bw b3we by1 by3d by3k by4lb by4lt by3n4a by3s bys6kot bys4l bys6tek bys7ter. bys6tor bys4w byt7alka byt7eier by3tr 1c2 2c. ca4es cam5ph ca3pr ca3ra car6lto caru7so. cat4h ca5tha 2cc c3ca c3ch c3ci c3co ce4st ces5te 2ch. che6lan 5chemi che6reg che5r4i che7ryl. che7styl che6vvi ch5hoe ch5lei ch5nik cho7rage ch5sia 2cht 2ck c3ke cot7rand cove7ry. 2ct c3ta c3to c3tu cus5to cyp7rian 1d 2d. 4d5aanb d5aand 4d5aank d5aansl daard5u 4dabs 2d1af da2g da5gas dag5et da5gha dag6ham da5gra dag4sk dag5so dag7ster dak7lei. dak7oorh da4k3r dak5wa 4d5alar 4damb dam6plu 3dan dan6k7erk dan6sak dan6sko dans5m dan4so dan4s5t dan4t5r daph7ne. dap4l da5pla 4d3arm 4dart d5arti da4s. das7lag. das7traa da3t4j 2db dby6lvo 2dd dda5kl dda3s4 dde6lee ddel5so dder7aal dde6ras dder7as. d3dh dd4hi deba4t dee4g deeg5r dee4l dee7lig. 4d5eenh deë7skou 4deg. 2dei de3ka dek6aan de6klad de6k5lat de6klei dek7lei. de4kna 6dekono de6krie dek7riet 4deksa dek6ska del7appe del5eeu del5egg d5elekt del7elek 6d5eleme de6leng del7enge del6fer del5fi del6fos delf7os. del5oor del7oper del6ser del4so del7sold del7sone del4sp del6str del7stre delt6ag del7tagt del7weis 4demm dem6pla den6din 4d3eng 4denj den6kar den6kja den4k5l den4kr dens7pre den4t5j den6tri deo7plek deo7sfee 3dep der5ast de6reen der7een. der7emig der7ent. der7flap de6rin. derm7ins der5na de4ro de5rob de5roe der5of de5rol der5on der5ow der5ps der6sjo der5s6kr der6slu der6spu der7thal der6uit de5sag des7alni des5ap de6seng des7enge de4s5in deskat5 de6skor des7leed de4sn des7offe des7oksi de4s5on de4sor de4spa des7pari des7poës des7prik des7taal des7tele de4sti de5stig de4sw des7weë. 4d5ete. deten6te de3tw 4deuro deur5s6w 2d1f 2d1g dge5sp dg4li 2dh dias4 dia7stol dia6zvi dic7kie. dic7tio. die6fal die6kes 5diens die4pl die6tom die4t5u dig6ofa di4gre digs4 dig7skro dig7som. di6kamp dik7amp. di4k3l di4kr dik7ribs di4kw dik7wyn. di4l5al din6gas din4gr 4d3inl 4dins 4d3int 4d3inv di6sass dis7assi di4so di5son dis6pne dis7quis dit6hak dit7jies 2dj dja7dji. d4ji. d4jia 2d1k dklo4 2d1l d3la 2dm 2d1n doek5r doe6lon doe6sko does7kop 2dof 4dogi do4l5os dol6sou dols7ou. 3dom dom6pli dom6sap 4d5omse dom7slim dom6swê 4domt don4sk 4d5oord 4dopn dop6rof dop6rys 3dor 4d3org dor7othy dor4sl dor4st dos6tel dou3t do3y doy4e 2dp d2r 3dra dra6gaa 4d5rand dra7stan 4dreë 4d3reg d4rela d4rew 4driff d5rigt d5riss 4driv droë7ys. 4d5rond d5rooi 4d5roos dr4op dro6pan dro5pn dro7sfee 4d3rug d5ruim d5ruit 4d3rus 4d3ry. 4d3rye 4d3ryk 4drym d4ryw 2ds ds5aamb ds5aar d4s3ad d5sakr ds5aks ds5angs d4s3ar ds3as d3se d4s5een ds5eis. d4s5eko dse4l dse7leer d4s5eng d4s5era dser6tj dsert7ji d4s5erv d5sfeer ds3id ds5imp ds5inde d4s5ins ds5int d2s3j d5skee d4skin ds5kind d4skis d5skole d4skom d5skoo d6skraa d6skrit d6skroo d4s3le ds3li ds6luie ds3m d5s4mee ds6moor d4sna ds5neu ds5noo ds5not d2s1o d3soe d5some ds3on d7sonde. d7sondes dson4t ds5oog ds3op ds3ow d5s4pel d5spes d3spi ds5pop ds6prek d7spreker ds7preki d1st ds5taak d4staf d5stand ds5tea d5stel ds5tent d5ster. ds5terr d5sters ds4ti d3str d3stu ds3w d3sy 2dt dter6tj dtert7ji du4e- duns6te dur6rhe dusie5k dus6kap dus6pel 2dv dverdiens9 dverdien8st dve6sid dvie4 2dw d4waal d5waar 5d4wang dwa6nor 4dwarm dwar7se. d3wat d4weil 5dwerg dwerk5o dwe6tar d3wil d4wing 4dwoo d4wyn dys5ag dys6mit dys7tuin 2d- d-r6hod e1a eam6ses eang4 eate4 eau7mont e3ba eb5adr eb9cu. ebou5t ebou6t. eb4re ebrons5 eb5tui ec5cle e4chn ech7tiaa eda7gaat eda5go e3de ed5eis eder7as. ede7ring ede6sap ed5off edors5 ed4ra ed5rep ed6saks eds7kalm ed4sl eds7lafe eds5om ed3sp ed5s4we ed5uit ed2w ed5woo ed5yst ed3yw ee5agt eed6atu eed5we ee4dy ee2f eef7laag eef7lopi eef7rant eef7rek. eeg3l eeg5ru eeg3s4 eeg6sdi e5eila ee2k eek5ass ee5klaa ee5klag eek5lo eek3n eek5og eek7oors eek7rooi eek3w eek6wal eel5ap eel6doo eel7doos eel5een eel7eer. eel5ei eel7indr eeling7s6 ee6lins eel5int ee4l3o ee5lob eel6ood eel6oon eel5sa eel7snag eem7onde eem5ou ee2n1 5eendj een6ema ee5nen 3eenj eenk4 een5kl een7slot een5sm eens6pa een7swee een7topp ee4ny eep7esel eep7leer eep7loog ee4pop eep7roes eep6sam eep7skep eeps5ko eep7skui eep6sti ee2r eer5ap ee5red eer5ee eer5end eer5in ee5rob eer7oes. eer5om eer5on ee5row eer5ps eer7skur eers7lam eer7smed eer6sow eer3u eer6ust eery4 eer5ys ee2s3 ee4s. ees6ala ees6ap. ees6lep ees5me ees7muil ee5sna ee5sny ees6op. ees6pre ee5staa ees6tal ees4tr ee6styd ee4sw ee5syd ees6yfe eet7appe eet7eenh ee4ti eet5in eet7rek. ee6troe eet7roed eet7ruik eet7wiel eeu3g4 eeu5in eeus4 eeu7spoe eeu5tj eeu6ur. ee5yst e3êr eë5aan eëks5t eël7eier eël7yste eë4na e3ër eër7agti eë5ran eër7arm. eë5rod eër6ske eë4sk eët6ste eëts7te. e4faf ef5afs ef5eks 5effek ef5inh e1fl ef5loo e4fly ef5oms ef5oue ef3st efs6tal eg5amp ega5s4k e3ge ege6las egel7as. eges7per eges4t ege6vwo e6ginko eg5ogg eg5rig egs7enti eg6sins eg6s5int eg3sk egs6lot egs6pre egs6pri egs6pyk eg6s7taal egte6re e4g3ui eher6in ehe7rinn eho6kra eib7niz. eid7rok. eid7saam eid7salo eid7sirk eid7skou eid7sku. eid7spa. eid7spek eid7ste. eid7stoo eid7sug. ei1e eie7naan eig6h-n eig7opro eik7aard ei5kno eik7wydt eil6spa 3eind ei4n5ed ein7eed. ein7glas ei4non ein7oord ei4n5op ein7otte ein6sad ein6sep eis7angs ei5sei ei6s5ind ei5sja eis7kamm eis6kaw ei5skê eis6kot eis6laa 4eiso eis7ouer eis6pir ei5s6tel ei5s6tre eit2 eit7hand ei3tj eit7klin eit7nisp eit7onde ei5tra eits5ko eits5l eits5o eit7spor eit7stak eit7stra eits5w eï5mit eï4na eïn7klin eï4no eï4nu eï5oni eï4sl eja7stas ek5aan ekaars8te ek5aks e3kan ek5asg e3ke ek5een eke7naar eke6tam e3kê e4k5ins ek3k e4k5les e5kleu e4klê ek5log e3koe eko6mol ekom4s ek5omsl ekoms5t 5ekono ek5ooi e3kop eko6pap e4k5opm ek5opn ekor6da eko7rum. ekou6st ek5owe e1kr ek5rad e4k5rok e5krom ek5rug ek6sapp 5eksemp eks5esk eks7inge eks7logi eks7loks eks7outo eks5pir eks5po eks6poe eks6tel ek6sten ek4sti eks7uur. ek5uit e4kwê ek5wie e4kwu e1ky e1la e6l5aand el5aanh e6laanv el5aard el5adm el5adv el3af el3ag e5lag. ela7klon e4l3al e5lari e4l5arm ela7slan el5asp eld7adel el4dap el5de. el6d5ele eld7erfe eld7evan eld7olie eld7onde eld7smid e3le el5eien eleis6t elei7sta e6lelek el5erts ele7sett ele6too el4faa elf6abr elf6eit elf7en-d elf5erk elf6lan elf6les el4fon elf7onth elf7ontp el6foop elf7oops el6foor elf7oors elf6ron elf7twyf e3li eling8stell el5inh e6linko el5inv elk7nage elks4 el4kwi el4lv elm5agt e1lo el4ob e4lol el5oli el5ond el5ont e4loor e4l5opd el6ope. e4l3or el5phi els7angs el5sfe el6sind els7indr el6skan el6skom els7korr els7krit els7lof. el5smi els7mora els6nag els7nood els7onde els7oork el6stek el6s7tran els7ware el5swee elt7akke e1lu el5uit eluit6j elui7tji e3ly ely6kaa em5app e5masj eme6lek eme6lew eme6ron eme4s eme7sis. emes5m emes5t e5metf em5eva e4moef em3op em5org emp7laag emp6skr ems4p em5spl e4naf ena7glas en5agt en5akk en5alt e4n5art ena6spe en6d5agt ende7ro. end7raak end7rit. ends7oë. end7sons end7ure. end6wer en5eil en4en e4n5ent 5energ ener6tj enert7ji eng6hor eng4la eng6lor e3ni en4ig en4im en5inh e6n5ink. eni7soms 3enji en6kinh enkom4 enkoms5 enk3w e5nomm eno7ryn. en5out ens7adem en6sall ens7are. ens7eise ens7elek ens7elik en5sen ens5erv ens7esse ens6haw en5sie ens7inga en5sji ens7koei ens7kyke ens7luik ens6med ens7nuk. en4son ens7onru ens7onva en6spei ens7pist ens7pot. en6spou ens7pous ens7taak en6stak ens6tam en6steh ens6tei ens6tel ens7tele en7sters en7s6tes. ens6tet ens6teu ens6too ens7toom ens7trek ens7uil. ens7ure. en5sy. ent5akt en6teks ent7inte ent7rif. ent7rok. ent6sin ent6son ent6spa ent6wen en3ui enu6lin enu5sk enu5st e3ny en-7steg e1o eoe4s eo5fag eo3g4n eoi6ste eop6lek eo3ro eo1s eos4t eo3tr e4paf e4p3ag epe6loo ep5emm ep5epi epers7te 5epidem e4p5int ep4la ep5lap ep5ligg ep5lus epoet4 epo6nin ep5ops e4p5rei eps7ameu ep6s5eis eps5id ep4sj ep4sk eps7kano ep5ski eps7kohe ep4slu eps7luik eps6oms eps5on ep4s5pr eps7waar ep5uit e1ra er4a. er5aan er5afd er5afh er5afsk er5aft er5afv er5afw er3ag era7gree era7kles er5aks er5akt er5alb er6ald. er5alt er5ana e5randa e4rapp er3ar era6ser era7uitv erd7ryle erd7slip erd7tree er3dw er4eb er6eenk er5eers er5eff er5eie er5eil er4ek er5ekst er5elm e4r5emm e6rengt e4reni e4renj er5erg er5erv e3r4es er5esel ere7spio eres6ta ere6stp ere7temm e5rewa e1rê er4fh er6flaa erf7leen er6flet erf7lett er5flo erf7lug. erf7lus. erf7omhe erf7oom. er4fp erf7reuk erf7ruik erg7aren erg7lyn. erg7renm erg7rymp erg6rys erg6sho erg7stra erg7uitj er4id eri5fr e3rig eri4g5a e4r5ind e6rink. e6rinna er5ins e4r5int e6r5ital eri7trea erk5aan erk7esel erk6has erk7ink. er6kins erk7inwy er4kj er6klat er5kle erk7onde erk6opn erk6s5on erk7spas erk6sto erk7uurr er6kweë erk7weë. erk7ywer er5lik er5lui erm4a erm7aanh erm7afsl ern7eiwi ern7kwes er4nm er4nn ern7oes. er4nr e1ro er5oew er3oë er5ogg e3roï e5rok. e4r5oks e4r5oli er5om. er5omh er5oms er6ona. er5oog e5room er5oond e5roos e4r3op e5ropa er6opla e5ropo e4ror e5rora 5erosi e4r5oss ero7stil er5oud er5oue erou6t. erp7anke er6pinh erp7inho erp6lan erp7ruik erp6sig err6ein ers7assi er6s5eli ers7ete. ers7inda ers7jean ers7kaia er6skaj ers7kaju er7skake ers7kaki ers7kete ers7kiss ers7koet ers7koor ers7kop. er5sky ers7less ers7lone ers7luid ers6mal er7smara er6smat er4s5om ers7onvr ers6opn ers7ower ers7pien ers7put. ers7scen er5ste ers7tele ers6teo ers4ti ers7treg ers7waar ert5aan er6taap ert7aap. er5tap ert7ape. er6tend ert7end. er5tes ert6hal ert7jakk ert7opin ert7orre er6tres ert7rok. erts5l ert7uur. ert6wak er5twi e1ru erug3 er5uin er5uit er3uu e1ry ery7doel ery7salf erys6ma ery7smaa ery7suur ery7trek e5saan. e5sage es5agt es4ak es5all esa6mol es4an es3c es4dh e3se e4s5een e4s5epi es4er e3si es4ia es4ie es4if esi6gei e4sill esin6s5i es4it e2sj e4s5ke. es5kle eskor6s eskors7t e5s4kut e3sla es5lem es4lip e1sm es4me es5me. es5men es9mè. e5smou es4mu es5nie es5noo es4ny esoet6j esoe7tji eso7fagu es4ol e3s4oo es4ou e1sp e5spel es5pen e4sper es5pet es5pir es4pli es4pra ess6opv e1st es4t. e5stad es5tas e4s5te. es5tea es5teli e4s5tes estes5o est6her es6tik. es5toi es5tos e6strak es4tre e5stuk e3sw es4yd e4t3ag eta7stas e3te e4t5eie ete5r6aa etie4l5 5etike et7jie-k etk6ysi eto6nop et5opv e4t5ord e4t5ram e6treke e6treko etre7kor et5rim ets7fyn. et6skat ets7kato ets7kous ets7krie et6s5lap ets6maa ets5ong et6spaa et4spr et6stek ett6re. et5uits et5unie et4wi et5win et4wy et5yst 2eu. eug6rie e3uit euk7inte euk4l eul7eien eu4loo eu5mon eum7uitg eu4na eun6sla eup7aand eu4ra eur5aa eur6aal eu5ral eu4ree eur7eet. eu6reg. eu6regt eur7egth eur7ekst eur7elem eur7spar eu4sa eus7ape. eus7jig. eus6kot eus6tac eute4l eu5tem eu3tr e1uu 2eu- eva7kwaa eva6les evr6ore evu6es. ewal4s5 ew4ar ewee4 ewe7gaan ewe7goed ewe7inde e5weis ewe6nee ewen8stes ewe6res ewe7span ewik4s ewiks7te exy7ste. eyn4o e5yste e3yw e4zka ez9ra. è1r ê1 êe4ro êla7flui ê4rde êre6loe ê4rhe 1ë ë1g ëi3e ëk4sk ëks3p ëks6pek ëk4st ë3laa ël5agt ël5alb ël5as. ë4lei ël5ent ëlf4l ël5fle ë5loop ëls7kuil ën5agt ën4tr ënt5re ëpre4 ër5aan ër5afd ër5off ërog4 ëro3s ër5owe ërs7kent ë1ry ë1s 2f. 1fa f5aanb f3aar f3ad 2f1ag f4agi fah7renh fai6r-n fak6ste faks7te. fan4t5j fan4tr fant6s5t f3ap f3art faru6q. 2fb 2fd f5dein fde4s fde7sake fde7sess fde7skei fde7stor fde7stra fde7sust f3d2w 1fe 4feen 3f4ees f3eie fe4l5ap fel7asem fel7enti fe6loon fel7oond fel5s4m fel6spoo fe4lu fe4ly fel5ys fer6skr fers7kra fer6sku fers7kui f5erts fe2s fes3t fet7ete. f1f ffe6las ffe6ret ffe6tet ffi6eek ffies6m ff5rei f1g fge7sper fg4ha fg4li fg4ly fgod4s5 1fi fi3d fid6ji- fie7ekst fie7lafo fie7smaa fie4s5o fie6tol fi5lag fil4m5a 4finr fi5sto fit4z 2f1k fkom6st fkoms7te fla4p flap5o f2le f5lees f5lese fle4t flet5j flex7or. 2fli 5f4liek 3f4lit 2fm fmo4no f1n fni4s3 1fo f3of 4foff fok4s5t fol4k3 4foms 5fonds fond6sk fond6st fonds7te f5ontb 5fonte f5ontl f5oorl 2fop fo4po fop7spen f5orde f3org for7oksi fo5rom fo3ru fos7feen fout5j fox7hill fox7stra fp4sa 1f2r frag6aa 4fram f4ras f4ren fre4s5k 4f3rig fri6too f4rod fru5ga f3ry 2f1s fs5agt f4s5ank f4s5eko f4skon fs5log f3sm f4sma fs4me fs4mi f3sp fs4pl f4spro f4s5tak fs4ti 2ft ftre4 ftre5d ftrek5 1fu fu4ch fur6ore fu3so 4fuur f5uur. 2fv fva4l 2fw 1fy fyn7goud 2f1ys fyt7appe fyt7jie. 2g. 1ga g4aai gaam6s7te g4aan. g5aanbi g6aandh g5aanl g5aanw g4aat 4g3add 2g1af g4afo 2g1ag g4agr ga5gre gag6rep gak4l ga5kla gal7afsk gal7appe galei5 gal7oog. gan6gra 4g5anke gans7ke. g3app ga3ra 4g3arb 4g3arm gar4s3 gars6ti gar7stig g5arti ga6sarm gas7arm. gas6mok ga4so ga5sol gas6pel gas6tre ga4tr gat7ruik gay7nor. 2gb gbys4 2gd gde7roof gdut7jie g3dw gd4wa 1ge ge3d gedi4s g5eenh gee6tal geet7al. geës3 geë6sti ge3f 4ge4ff gef4l ge1g2 4geg. geges5p geg6uil g3eie geï7migr ge7k6lik. 4geks gek4y gel6agk gel6dad gel4do ge5lol ge5loo ge6loon gel7oond gel6s7te. gemi7au. gem6opp 3gen gen4dr gen6dur genes5t 4geng ge4oi gep4a ge5pag geper6st gepon6s 3ger ge5rap ger6ard ger5ete ger7iden ge6roef ger6ogg ger6spo ger5sw ger6uit ge3sa ge5sfe ge5sin ges7jagt ges4k ges7kade ge3sl ge3s4m ge5sne ge3sp ges7perb ges7pers ges7pes. ge3st ges6tas ges6tig ges4w ge5tja ge3tw ge3ui ge5um. gev7woes gewens7te ge1y 2g1f g3fl gf4li 2g1g2 g3ga gga7kwee gga7stre gga5t4j gge6sti 2gh 5g4hoer gho7ghok gho4l 5gholf g4hs. ghu6moe 1gi g5iden gie6far gi4fa 4gimp gin6gaa 4g5inri gip4s gip7siet gis7enti gi5tra git5sw 2g1k gkaar4 5g4lans gla4sa gla6sel gla6ska glas5o g4le. 5g4len. gli6don g4lif gli6gur 4glik g4lim g4lip 3glis g4lob 4glod 3g4loe g4lof 3g4lom g3lop 3g4lot g4lo- g3lus 3g4luu g4ly. 4glyn 2gm gma7skui 2g1n gneem5 gneet5 gnie6ko 1go god6sak god6sid 4g3oef goe7krui 4goes g5oes. g5oeta goe7the. goë7lary 2g1of 3gogi gol4f5o 4g5olie go4mag 4g3ong gon6sto g3ont goo5gl 4g3oor 2g1op go5pla 3g4opo g5orig go3sl gos7pelr g5osse go3s4t gou4d3 goud6a. gou7dief gou7dini gou7dink goud6s. gow7rie. go9ya. 2gp 1g2r g4rab g5rak. gra4ma gra7mado gra4m5o g4ras gra4s5a gra4se 4g3red g4ree4 g5reek greep5 4greë g4ren gren6st g5rese gre4sp gre6sur gre6tji gret7jie g4reu griek6s7t grie6t5j 4grig gri4p g5rit. 4g3rok g4ron 4g5rooi g5rook g5room g5rowe 4grug g5ruim 4g3ryk 4grym gry6ste 2gs g2s1a g5saam gs3ad gs6ade. g4saf gs5agt gs5aks g5sala g5sale gs5ana gs5ant gs5app gs6appe gs3ar gs3as g4s5een g4s3ef gs5eis. g6seise gs5eko gs5eks g5sekt g4s5ele g4s5eli g4s5ene g4s5est g4sew gs5ewe gs3f g5s6feer g4sid gs5ide g6simpa gs5inde gs5ini gs5inl gs5ins g2s3j g2s1k g5skaal gs5kab g5skad g6skapa g5skatt g5sked g5sker g7skeur. gs7keurd g3ski g4s5kin g4skl g5skof g5skole g4skom g5skoo g6s5koor gs5korr g5skot g5skou gs3kr g2s3l g3s4la g5s4lop gs3m g5snel g2s3o gs4ol gso6pro gs4ou gs3p g5s4pel gs5per g5spes g3s4pi g6spill gs4poe gs6pore g7sports g5s4pru g1st g6s5taak g4s5tab gs6tabi g4stak g4stal g4star g4s5tek g6stelg g6stera gs5teri g6sterr gster6s g6stese g4sti g5stigt g4stoe g7stoele gs5toer gs5toet g4s5ton gs5trad g6strak g6stran g6strap g6strib gs5troe gs7troon g6struu g4s3ui gs3w gs6werw 2gt gte7eenh gte7lagi gte6ras gte6rer gte4ro gte7roer gte7rol. gtes4 gte7sfee gte7smee gt5uri 1gu gu2a gu2e gu5ela guid6o. gui6rla 4guit 2gv 2gw g3yst 2g- 1h2 2h. 2ha. hal4f3 hal6m5ag 4halo hal4s5k hal6s5tr ham7pagn ham6skr hams7kra han6dan han7dja. han4dr han4du han6gli han6gor hangs6l hang5s6w han4s5k han6ska har6dop hard7op. har6sel har6sol har6spa har6t5aa har4t5j har4to har7toem ha4wk haw7shan hay6eli heb7lus. hee4l heer8s7te. hees6e. heg7orga heg7rank heg7spyk 5heid. heid7stem he4ko hek7saan he4k3w hel7ange hend4 hen4so he2r her3a he9ra. her6akl he7rald. he5r4an he3re her7egpa he4r5ek he4r5ev herf4 herfs5 her3i her6ib. he5rid he5rod he5rol her5ond her7ontm he5ros her6oss he5rou her5ow her7sche her3u her5yk he4sp hes7peru he4s3t hete5r6o heu6paa he3us hev3 he4vr hewen7st hie4r hier7in. hie7roni hie7rony hië1 hil6lbr 5hings hing6s5t hipe4 hi4rl hi4sp his5pa hi4v- 2hl h3li 2hm h3ma 2hn hode6sl hodes7la hoe7kaai hoe6kys hoe6spi hoe4s5t hoër7op. ho4fa hof5aa hof7amp. hof7uits hog6hok hoi7swer hok7rakk hol7aar. holes5 4holf hol5in hol7oog. 4hon. hon6daa hon6dag hon6dro hop7land hop7smaa ho3ro hor4s hor4t5j hos6hol ho4ta hou4t5a hout5j hou6tol hou6tom hou6who 2hr hre6sto hrie4 hries5 hris5t h3te h3to hu9go. hui6daa hui6dui hui6sef huit6ji hui7tjie huk6hun hul4p5a hul6pek hul6ple hul6por hul6ste huls7te. hu3mo hum7oes. humus5 huter6s hut7jie. hut6spo hut6ste huts7te. h5vill 2hw hyg7roma hys3k hys7tang i1a iaan6so iaan6sp iaan6st iaans7te iam7son. ia4nop ias6koo ia5spo ia5sta ia5s4tr i4baf i4bag ibou6s. ic5ky. i2d i3da ida7groe id5agt idde6ra i3de ide7snui i3dê i3di idia5s id4ja i5djan i3do i3dr id2s1 id4s5et ids7inoe id4ska ids7kerm ids5kr ids3l ids7lags ids7nye. ids3o ids3p ids6pa. ids6pek ids6pie id6spil ids6pri id6spry ids7taal ids7tee. ids7teks ids7tele ids5ti ids5toe id6s7trek ids7ure. i3du id3uu ieding6s7 ied7ione ied5rol ied3w i1ee i4eee ie5een ieë7aard ieë6lys ief7alar ie5fie ie4f3r ief7stal ief7uitg ie5gla ieg7loka ieg7riem ie6grit ieg5st iek7asyn ie5ke. ie6k5erv iek7esse ie5kie ie6klaa iek7laai ie4kni ie6k5ond iek7ople ie6kops iek7opse iek5opv ie4kre iek7revu iek7rigt iek7ware iek7wees ie4k5wi iek6wos iek7wyd. ie4laa iel6afo ie6lene iel7oor. iel6san iel6s5on ien7anal ien7glor ien6kro ien7olie ie4n5oo ien4s ien7sakk iens5or ien7sout ien7span iens5t ien7stam ien7stel ien8stele ien7stet ien7stoo ien5suu ie4n5ur ie6poog iep7oog. ie6proo iep7rooi ier7afma ie6rafs ier7engt ier7eter ier7neff ier7omtr ie4r5on ier6oni ier6ony ier7swee ies6amp ie5se. ie6senk ies7enke ies7ents ies7ferw ies7kaf. ie6skon ies7kop. ies7kraa ies6kry ies7laag ie6slep ies7lepe ies5li ies7luik ies7meub ies7mooi ie3so ies7oes. ies5ond ies7oorp ie6sopn ies7opne ies7pane ies5per ies7plig ie6s7taal ies6tas ies7tee. ie6steh ies7tele ies7tent ies6tin ies5uil ie4s3w iet7aans iet7aard iet7alba ie5te. iet7erts iet7omse iet7reke iet7reko iet4sl iet7uie. ie5twi ie4tys i1eu i4eub i4eud i4eug ieu7grie i4e3ui ieu7ing. i4eul i4eum ieu7skot i4euu i4euv i4euw ie5wie ie4w- ie5yst ie-7klik i3èr i1ê iël6sku iën6tji iënt7jie ië4s3t i4fei i4fim i4fin if1l i2f3r i4f3ui i4g5aan i4gap igare4 igaret5 ig5eff ige6naa ig5ete ig5ins ig1l ig5loe ig4op ig5opt ig5org igo7roos ig5res ig5roo i4g3ry ig3sa igs6ins igs7kaps ig7skend igs5ko ig5sku igs6mee igs6ona ig5soo igs7poei ig5sti ig7stoei igu7era. ihu6ahu i1i ike6roe iket5j ik5kli i2k3n iko6nat i1kr ik6sakt iks7akte iks7iden ik4sin iks7inve iks7juk. ik6skom iks7paar iks6pad iks7pare iks6tik iks6tuu iks6wel ik5wan i4k3we i4kwy 2il i1la il5agt ila6too ilbe6st ild7agti ild7smaa ild6stj ild7temm ilet5a ile6tji ilet7jie ilf4l il5fli il5gha ilinde6 illo4w 3illu il4m5at ilm7oper i1lo ilo5sk ils7insp ils7orde il4spr ilt7aar. i1lu i2m i3ma im5agt i3me i4mek im5eks ime7laar iment6s ime4s imes5t i3mê i3mi 5immigr i3mo i4m3o4p imo7theu 5implik i3mu imu6maa in5aard i4naf i4n3ag in5akk in5arg in4d5aa in4das inder7as 5indiv ind6oef in6doog ind7oogm in6d5oor ind7sleu ind5sw 3indu in5dwi inee7tji ine5ra 2inf ing7aars in5gan ing7eter ing6hpa in6gind in6ginf ing7infr ing7inst ing6leb ing6ope ing6opl ing5ou ing7pseu in4g5ru ing7saag ing7sap. ing7see. ing7sekr ing7seku ing7sfer ing7sin. ing7sinj ing7skal ing7skêr ing7skud ing7slep ing7slym ing7sofa ing7som. ing7somm ing6s7pil ings9telle ing7stin ing7suie ing7suil ing7swel ing7uil. i3ni ini6gaa in4ik in5inf 5inisia ink7erts ink7laag ink7ler. ink7nerf ink5nu ink7ogie in4kol ink7olie 5inkom ink7ring in6krol ink5st ink7wit. 5innam 5innemi innes6t inne7ste in5ong ino7skaa in5rag 5inrig ins7epou in6s5ete 5insets in4sg ins7kaps ins6kin in3sl ins7molt ins7moor ins6ond 5inspek ins7prie ins4t 5insti insti7t. ins6ton ins7twis int7appe int5ess inte6s5t int6he. int6uit int6wyf inu5e. 5invlo i1o io3pr ior6ubr io1s ios4k io5skl ios4p ios4t io3tr i2p i3pa i4p3ag i3pe i3pi i3pl ip4lo i3po ipo4s5t i3pr ipre4 ip4s. ips7kopi i3pu i4pui i3py i1r ir4ch irke4 irkel5o irop4 iro5pr iru4s i4rwa is3ag i5sagi i4s5aks i6sangs is3ar i4sarg is5asp i4sav is3c i4s3ei i4s3et ise5um i5sfeer ish7nie. i4s5int is5inv i2sj i4sj. is5jan is5joe i2s3k is4k. i4ska is6kaaf is5kan is4kê is5kui i2s3l is5laa i5slag is3m i5s4mit i2s3n is5oes is5ond is3or is3p is4p. is3t is4t. is4th isto7pho i5s4tyn i4s3ui i5suik isu6maa is3w i2t i3ta it3ag ita6tis it3b i3te ite7dwal ite7glas itek7te. ite6mas i5tenh it4er ite5ru i4t5ete i3tê i3ti it4in i4t5ins i3to ito5fa ito7plan ito7rowe it1r it3re it3ry it4sc it5ser its5ete its7jood it4s5oo its7perk its6tek its7tori its7uur. i3tu itu6saa it5win i3ty ity7sokk itz7laan i1u ium1 iu4ma iu4me iu4mi iu5mie ium6uur iwel6s5k iwe7mos. iwes4 iwe7spor iwe5st 1ï ï2m ïn5akt ïn3o ïns4t ïn5und ïs5lam ïs3t 1j 3jaa jaar6s7kr 3jac ja4cq 3jag ja4ga jan7ghai jan7knap jap4l ja5pla 3jare 3jari ja4sm jas7pant jas6tas jaz4z jaz7zeri je4kn je4kr jek7rasi je5rop jes7nië. jes4t je4t3r jet6sjn jeu4g 5jie5kn jie6nan jie6nol jien5s 5jieon 5jieop jie6ska jie7skap jies7kat jie6ski jie6skop jie6s5lo jie6slu jie6sol jie6son jie6spa jie6s5tr jie6sui jie7suik ji4eu jin7gope ji4rp job4s3 joe7kwee joen6sk 5joern 3jong jos6afa jou7kuit juit6sp juk7riem 3jun jun6kre 2k. 1ka k4aal k5aand kaan8s7te. k5aanw kaar7se. kaars7te 5kaart kaar6ti kaar6t5j kade6la kade6sl 4k3adv 5kafee kaf6oef 4kafr 4k3afs 2k1ag 5kagem k4agg 5kagge k4ago k4agr 4kaks kal4k5a kal4k5l 5kalko kal6koo kal4kw kal4s5p kal4st 3kam kam6par kam6ple kams4 3kana kaner5o 3kank kan6ont kan6sko kan6ste kans7te. 3kant kan4t5j kant7om. kan4t5r ka4pak 5kapas kap7inte 5kapit kap6lak kap7lat. kapo4 ka5pri kap7seis kap6spr kap6stek 5kapte 3kar. 5karak 4k5arbe k5arm. ka5roo kar6oor kar4st k5arti kar5to 3kas 4kasg kas7laai kas6maa kas7traa ka5s6tro 5kateg kat7etes kat6har kat6hu. ka4too kat7ryk. kats4 kat5sw kat7uil. kay6aku 2kb kbe6kwi kbout7ji 2kd k3de 1ke kede6lo kee2 keel5a 4keen keep6s5t keer6so keer6ste keë6laa keël7aar 4keff kei6dro keids7pr 4keik keis4 kei5st 4k3eks ke4l5ak ke6lane kel7anem kel7assi kel7eenh 4k5elem ke6linb kel7inbr kel6mag ke4l5ou kels8onde kem6afa 4k3emm ken6aar ken6dra ken7eel. 4k3enj 3kenm 3kenn ke4nou ken7son. kep7laai kep7ler. ke4p5lo kep5sk ker7een. ke4rel ker7els. ker7flan 3kerk ker6kal ker6kin ker6k5or ker6kow ker4kr ker7kris ker6kui kerk7uil kerk5wy ker6m7eng ker6naf ker6nei ker6nen ker4n5o ker7oes. ke4r5on ker6pru ker6set ker4sk ker7skil kers7kom ker6slo ker4sn ker4so ker7son. ker6s5pi kers5w 4kerts 6k5ervar kes6el. ke4sn ke6trol ket6ska 5ketti ke4tu keu6ror 3keus keut7jie key7kleu key7nooi kê4rb 2k1f 2k1g kga7laga kge5la 2kh kha7yeli k4hoi khu7khun 1ki ki2e kie6dro kie7laai kie6mas kiem7as. kie6sent kie4s5k kie7skry kies5l kie6slo kies7tan kie4ta kieu5s ki4kl ki4ma 4kimm 5kind. 6k5indel kin5dr 4kindu k3inh 4kinl 4k5inst kio4s kios7ke. kip7ling ki4rc 3kis. kis7obli ki5s4po ki5s6tew kit4s kits5k 2k1k kk4ag kka7smaa kka5str k3ke kke6nee kker5kr kk4li 1k2l k5ladi 4kland k5lang k4lank klas3 klas6e. kla6sin k5leerd 4kleg k5lege k4l4ei 4klel 4k3len 3kle4p klep7as. k4ler 5klere kle5us k3lê 4klied k4lier 4k3lig 4k3lik 5klikk kli6kop k4lim kli6moe k4lin 5klink k5linn kli4p3 k4lis kli7sjee 4klog klo6kon k5loos. k4lou klub5h klu6bre 4klug 2k3ly 2km kman7spo 1k2n k4nap 4knav 5kneg. 4knei 4knem kne4t knet5j 3kni kni6kla kni4p3 knoe4 knoe7te. 4k3nom k5noot k4nop knor7os. 1ko kob7rego 3kod 4k3oef 3koek koe6kei koe4l5o koe5pl 3koer koe4s3 koe7sist 3koë 4koë. k4ofi 4kogi kok7onth kok6skr ko5lag kol6for 3koll 3kolo 3kolw 3kom kom7aan. kom7bina 4komg kom7ghad k5omhu kom7miss kom7saal kom4sp kon7atoo 4k5ontl kon5tr 4k5onts 4k3oog ko4op 5koord 3koö ko4pag kop7ape. kope7la. kop7las. 4koplo 3kopm 4kopn 5kopno ko4po 6kopper kop7uits kord7aan kor6doe kor6foo k3org koring7s k3ork ko3ro 3korp kor4s5l kor7sten kor4t5a kor6tji kort7jie 3kos kos7eetp kos7inko kos7juff ko4sk ko5ski kos5ko kos5pe kos5taa ko4t5ak 5kotel kous7te. kou5tj kovi7ev. ko4vk ko4vs k5owerh 2kp kpro6pa kp4si k2r k5raad 3kra4g kra7gers krag5o k5rak. 4krand 5krank 5kredi 5kreet. k4reëe 4k3reg 4k3rek k3rel k5rese 3kret 4kri4f3 4krig kri4k3 kri6moo 3krin kri4p krip7lee 3kris 4k3riv k5roet k5rolp 5kroon kr4or 4k3row 4krub 3krui 4kruim kru6kas kruk6s. kru4l k5rusp kry6fin krygs5t 4k3ryk kry7sket 3kryt 2k1s ks6aan. ks5agt ks4ak ks5chi k4s5een k4s5erv k4s5eti k3si k6singe ks5ins ks6jari k4skan ks5kin k4skon k4slê ks3li k5s6maak ks5moo k5smou k2s3n k5snob k4sob ks5obj k4s5ond ks5onl ks5opk k2sp k5spek k5spel ks5pen ks5per k5spes k3spi k4spir k5spra k5spri ks5pur k6s5taal ks5tant k6steken k6stemp ks5tens k6stera k6s5teri k6sterr kster6t7j ks5tet ks5tip k7strado k6s5trah k5s6trak ks5tur ks5tuu k3sty ks3ui k4s5ure ks3w k5swei ksyn4 2kt kte6rad kte6ron kter6sp ktes4 k4the k3ti k3to kto6rev k3tu kt4wi 1ku kud7aksi 3kuik 4kuim kuin4 kuins5t 4kuit kul6der kul6plo kul6poo 3kult 3kun 4k3uni kun6sin 3kurs 3kus ku6seen kus7lang kus7node kus7taak kut3r kut6slu kuus6te kuu7ste. 2kv kvang6s 1k2w 4k5waar k3wae k4wan 3k4war kwa7skaa k4week 4kwees 4kweg 4k3wer kwê7lafl kwik3 kwi6kwa 3kwis 2k3wo 3k4wot k3wu ky4fa kyk7uit. k1ys 2k- k-5kli 2l. 4laanb 4laanh 4laard laat7slo laat6str lad7onde la4du 4ladv 2laf la4fa l3afd 2lag l4ag. la4ga la5ga. la5gas l4agi la5gie l4agl lag7lag. l4ago lag5ri lag7some lai6rgo lak7albu lak6led lak7okul lak7oore 4l5aksi lak3w lak7ware lamb7da. la4m5oo lam6pli lam6pol lamp7oli lam6sko lam6sle lam6spe 3land lan6daa land7aar lan6dad lan4d5r land6sta land6s7te lan6gaa lan7gnol lan4go lang7ste langs8te. lan6gur lan4k5a lan4k5l lan6kop lank7ope lan4k5r lan6kwi lan4s5k lan4sp lan4s5t lan6taa lan7taat lan4t5j lan6tre 4lantw lap3r 4l3art las7elek las6ie. la4sn la4so la5sol la4sp las5pa late5r6a 5lawaa lba6spe lbe6kne lbo6wvi lb4re ld5amb ldan7ha. ld5apt l4d5een ld5eis lde6rat lder7os. ld5ins ld3of ld5oor ld6oor. ld5ord l4dow ld5owe l5draa l4d3re lds4k lds6maa ld3so lds6ond ld3sp l4d5uit 1le lec5tr lee2 lee4g3 4leep3 leer5a leer7eis 5leerl leer5o leer5s lee4s lees7tra lee7tjie lee7vaar 4l3eff leg7slot 4leien lei7gleu lei6kaa lei6naa lei6not lei7skoo lei6spa leis7pan lei7spir leit5s lek7loti le4kn lek6suu 3leli 5lengt 4lenj len6sel len6ste lens7te. len6tji lent7jie le5pel lep5li lep7oog. lep7ratw lep5sk lep6szy leps7zy. ler4a 5leraa ler6kam lerk7amp lerk5sp 4lerts le4see le4set les5ete les6hab les7insl le4ske les7kes. les7lie. les7onde le4s5oo le3st les7taak le4ste le5stel les6tin les5tra les4ty les7uur. les7wete l5etan le4tc let5em let7oorb let7rol. let6sko 4leuf le3u4m leun5s leur7eg. leu4r5o leute4 lew6ein 6l5ewena 4l5ewig 3ley 1lê lê4rw lf5aan lfa7stra lf3ei l4fek lf5eks l4fen l4f3ev lf4ie l4fin lf5ing lf3l l5flap lf5onde l5fone lf5onts lf3op l2f3r lf6skar lfs7karm lfs7kop. lfs7kuil lfs7nier lfs7oog. lfs7perk lft4w l4f3ui l4f3uu l1g lg4ha l4gli lgo7lagn lg6ordy lgs6mee 1li liat6ji lia7tjie 3lid lid7onts 3lied lie6gli lie6kwy lie5la liers5w lie5sme lie7steg lie7stys lie7swak 4l3i4eu lig7inte lig6las lig6ny. lig7omge lig7rekl lig7riet li4gro lig7skag lig7sona lig5s4p lig5s4w lig7ure. lik7aspa 4likk 5likkew li4kl lik7opsi lik6see lik6sju lik6soo li4k5wa lin6gid lin6gin lin6gli lin6goo ling7ooi 4linh lin4k5l lin4kr l5inli 4l3inr l5insp lin4t5j 4linv li4pa li4p3l lip5la li5plo li6poml lip7omly li4p3r lips4 lip7soom 5lisen l5item liter6t7j lit3j litjie6 lit3r lit7sha. lit4sp lit4s5t lit6zdo ljus4 l1k l4kaf lka6tio lkat7ion lk5een lks7emos lks7epos lk6skap lk4sku lk4sl lk4son lks7ower lk5spe lk5spr lk6stel lks7tell lkter6t lktert7j lk5uil lk5wat lk5wit l4kwy lk5wyf 2l1l l3la llat6ji lla7tjie llei5s lle7knop lle6rui lle6swe lleve7ë. llo5sk lls7moor l4maf lmo6kal lmo4no lm3sm l1n lne4s lob7eend loe6dal loe6det loe7dja. loe6don loe4d5r 4loef loe6gos loeg7os. loers7te loe6skr loe4st lof7opri lof6spa 4logig log4o lo5gop log7sot. log4st log7stok lo4k3l lok7onde lok7swin lo5kwi l5olie. lomer4 lomert5 loms4 4lond lon6gaa long7aar lon6spa lon6ste lons7te. 4lont lon4t5j 3lood loofs5w l4oop 5loopb l5oore 5loosh loo7stra lop7emme 4lopl lop6rys lo3ro lo5ryn 5lose. lo4sj lo4sk los7laat los5ta los7trum los7wikk lo4tak lot7riet lot7ruïn lot7swan lot5ui loui7sa. lou3t lou6wna lou6wre lou6wtj lo4wr low5ry lox7era. lö4jd löj6don lp5aan lpe6nin lp4he l4pon lp5ond l1r 2l1s l4s5aar l4sad ls5arm l4s5asp l4s5eko lse4l lse5le lse6mek ls5erva ls5fei lsg6haa lsi6g5aa ls5jas l4s5kin l4skon l6skorr l4skre l4skru l5s6maak l5s4mee l4snaa ls5opw ls6plet l5s4pli l4spu l3st ls4ti l6stoeg ls5waar ls5wet ls5wyn l4t3ag l4t5amp lta7spie lter6sk lt5oond l5t4wak lu4bh lu4bl lub5le lub7loka lu2g1 lug6er. lu5gub 3lui. 4l5uie. lui7masi lui7slan 4luit luk5raa luk7rake luk6s5pa l5unie. luns6a. lur6pag lus7moor lu3t4h lut6zpu luus6te luu7ste. lva7soor lve5ti lwe4r5a lwe6rui 1ly lyce7um. ly4fe ly4fo lyk7aant lyk7lope lyk7lug. ly4kn ly4k3o lyk6ont lyk7rede lyk5sk ly4ma lym5ag lym7uint 3lyn lyn6aaf ly3pl ly3sp lyt7ring 1m 2m. mac7dona made7us. mae4s m1af 4mafd m4afo ma5fro 4mafs mag6sta ma4hd mah5di mak6lot ma3kw ma5lag mal7thus mamat6j mama7tji man7djar man3g4 man7gona man6n-p man7salm man7spen man6spr man6s7taa man6sto man7ure. map4l ma3ra mar6kek mar6kle mar6kom mar6kon mar4k5r mar6lpr mar4s5k mar4s5t mar6tro mary7na. mas6koo mas6kri mas6kui mas6tek ma5s4tr mat6hes mat7thys may7nard 2mb mb4re 2md mdo6poë mdop7oë. md5soo m3dw md4wa 4meder mee7kole mee5kr 5meel. mee5l4o mee5ne mee7reis mee7reke mee5sl mee7spre meest7al mee6tre me3ga megas4 mega5st 4megt mei6nee mel6aar mel7ekwa mel6kal mel6kjo mel6kla mel6kna mel4k5r melk5s mel4k5w mel7spul mel6too mem7phis men7angs men7eise men7opga men6sky men6snu men4s5p men6s5ta men6tin men4t5j men4t5r me5phi me4rak me6rass mer7asse mer5ast mer7dein me4rei me6reng mer7enge mer7esse mering8s9taa mer6kli mer6kna mer7kopn mer4kw mer7kwar mer5oes mer7onth mer7treë mes4a me4sal me4s5ka me6s7koor me6skor mes7kore me6skro mes7kroe me4sl me5slu mes7moss mes7port me6stas me4s5to mes7ware me4t5ee met7emps meter6so meu6las meul7as. 2m1f mfloer6 2m1g mgang4 mgangs5 mgeper6 mges7per 2mh mh4ei 4mid. mid7osea 4mids mids5t mie6kas mie6kwa mie6ret mie4r5y mie6skr mie6taa mie6tji miet7jie mig6re. migu7el. mih7rab. mil6taa min7gopl 4m5insp 6minstu mi4rl mi3sf mis7sêr. mis6tkr mis6tok mit7swa. mi4v- 2m1k mkaar4 mkom6st mkoms7te 2m1l m3la 2mm mma5sp mmas6to mma7stor mmat6ji mma7tjie mme7loor mme6res mme4r5o mmi7stok 2m1n 3mod mode4l mod6jad 3moe moed4s moe6nes moe4st mof6lam mok7alba mole4s5 m5olie. mol4m5a mon6dch mon6dop 4m5onts 3moon moor6da 2mop m3opl 4morg mo3ro mor6sju mor6spo mor4s5t mo5saa mos3f mos7fles mos7inen mo4ske mos7keë. mo5sta 3mot mote7us. mot6heu motor5a mou5fl mou7slip mou6ste mous7te. mou6tek mo9ya. 5môre. 2mp m4pag mpa7gne. mp5agt mpe6lys mpen6to mp4her mp5ops mps7kraa mp5sli mps7taal 2m1r 2m1s ms5app m4s5kat m4skon ms7kraal m5slin m3s4me ms3op ms5pen m6s5taal ms4te m5steg m5steo m3sw 2mt mter6t5j muc7klen mues7li. muf7smaa mui6les 4muit 3mul mum7aant muns4 mun5st mun6tou mur4g mur7gie. 3mus 2mv mvi6tra 2mw myl7afst myl6sla 3myn myn7ent. myn7impa myn7inge m1ys 2m- 2n. 1na 3naal 3n4aam 4n3aan 6n5aardi naar6skr n5admi 4n3adv nae6lys nael7yst n1af n4afi naf6lad nag6aand na6gaap na4g5ap na6gemm nag7emme nag6las n4ago nag5ron nag3s 4nagt n5agtig na4gu nai7set. na5kli nak6lip 4nalf 4nalt 3nam na3p4l na3pr nap7roet 4n3arb 4narea na3s4k nas7klip na3s4l nas6maa na3sp nas6pel nas4pr na5s4ta nas6ten nas6tor na5s4tr na5stu nas6tuu nas4w na5swe na5t4ha nat6jie nat7onde 3nav 5nawee na9yl. 2nb nba6chs 4nche 2nd nda7gesk nd5akt nd5app n4d5arb nd5art n4d5ass nda7stoe nde7eier n4d5een nd5eg. nd3ei nd5eksa ndel8s7kor ndel8s7taa nd5emm nde6rad nde6raf nder7af. nde6rar nde6rem nde6r7ent nde6r7ess nde6rim nder7in. n6deros nde7rosi nde7sill nde6zvo nd5ide ndi5go nd5ins nd3of n5dome nd5omt nd5ond nd5ont n4d5opb ndo5st nd5rak nd5rat n4d3re nd6resd nd5riff nd5riv nd5roe nd5rok nd5rot n6druim nds7ertj nds7geru nd6sinl nds7kenn nds7koor nds7kraa nd6s7laag nds6leg nd5s6maa nds6ons nds7oorn nd5sor nd6spre nd5spu nds7taal nd6stek nds7toet nds7troe nds6wee ndt6wis ndu4e n4d5uit ndu7kraa n4d3ys 1ne nebe6st nec7ticu 5neder nee2 nee4l neel5a n4eem 4n5eend 4n5eenh neer5o neer5s nee6tew neeu3 nee7uur. nee7woor 4neff 4neg. ne5gla n3eie 4neil 4neksp n5ekspe nel6lma ne6loon nel7oond nel6spo 3nem nem6afi nen4sl nep7olie 3ner. ner6faf nerf7af. ne4ros ner7psig ner6sle ner5sw ners6we nes7evan nes6tas ne4ste net7omge ne4tri ne5um. neu7moko neu7raal neu6sji neu6ska neu7stoo neu6toë neut7oë. ne4wt 3nez 1nê 2n1f2 n3fl nfy6tap 2ng n4gad n4g3ak n4g5apt n4g5ase ng5ass n4g5een n4g3ei ng5eks nge6r7aap nge6r5al nger6d5r nge6ret nges7per ng5eten n6geter ng5imp n4g5ink n6ginst ng1l ng6lasu n4goë ng5oë. n4g3on n4g5oog n4gou ngp6seu n6g5raad ng5ran ng5rat n4g3ri ng7sade. ngs7agit ng7sappe ng4see ngs7eise ng4sek ng6serk ngs7erke ng6sero ng6serv ngs6fer ngs7impa ng4sin ngs5int ngs5kan ng7skat. ng7skoel ngs7koep ngs7kop. ng7skors ngs7kort ngs7kurw ngs7kuur ng6s5laa ng6slab ngs7labo ngs7ladi ngs6lep ng7s6loop ngs6lym ng4sn ng5sni ngs6oet ngs6ofa ngs6omm ngs7pelo ngs7pill ng5spoe ng7stabi ngs7tal. ng6steh ng6stei ngs7teik ngs7telg ng6stem ngs7tema ng7stemm ngs7temp ng6s5ten ngs7tese ngs6tin ng6stou ngs7tou. ngs7trap ngs7truu ngs6uie ngs7ure. ngs6wel ng5uit 2nh 1ni nie6kaa nie7knik nie6raa nier7aar niers5w nie6uin nig7aard ni4g5ee ni4g5ie niks7py. nik7warm 4n3ind 4ninf nin6g7ele nin6get 4ninh 4n3ins 4n3int 4ninv n5invo n2is nis7alma nis6ara ni5see nis5id nis7insp nis6oms ni4son ni3tr nit7sare nje7glas nje7krui njie6st 2n1k nkaar4 nk5aard n4k3af n4kak nk5aks nk5eff n4kei nk5eie nke6las nke6lit nke6ree nkers6w nker7swe n4k3li n2kn nk3na nk5nes nk5neu n4k3of n5kofi nk5psi nk5rig nk5rol n4k5roo nk5ros nk5rye nks6noe nk4s5om nk3sp nks4t nk3s4w nk5uit n2kw nk5wat n5kwen 2n1l n3la nli4ga nlu4s n1n nna6spo nna7tjie nne6pol nne6sev nni4s 1no 4noef 4noes noe4st no4g5al nog7eens nok5as no9ko. nok7riww 3n4oma n4omm nomo7yi. no4n3a 4n3ond 4n3ont noo6dan n3oog noor6di 4nopb no5pla nop6laa 4noplo nop7omhu nop6rod 4norg n5orga nor6kla 3norm nor7tham nos6kaa no3sp 3nota 3note not4r no5tre 2np n1r nroet6j nroe7tji 2n1s n4s5aar ns3ag ns4an ns5angs ns4e. ns4el nse4pr nser6to nser6tr ns3f ns6feer ns5gel n3si ns4ia ns4ie ns4ig nsi6gar ns7inges nsi6tri ns4iu ns3ja n6skafe n5skap n4skar n4s5kel ns5kin n6skous n4s5kra n2sl n3sla ns5lam n6sland ns3le n4s3li n4s3lo ns6lotg ns6lott n3slu ns4mee n5snar n4sne n5snel ns5noo n5soek n4soë ns5oë. ns5ond nson4t5 ns5onw ns3op ns5par ns5pas n4s5per ns7portr n4spot n6sprat ns6prek n6staak n4staf ns5teh ns6tel. ns6tels n5s6ter. ns6ters ns5trak n3s4tu n4s3tw nst6wyf ns5tyd ns3w ns6weer n4syw ns5ywe 2nt nt5ags nt5ark n4t5art nta5tj n4t5eie nte6ram nte5sm nte6sti n5t4hon nti7kwaa nt5inv nt3ja n4tjo nto7fakt nt7oksie n4t5oli nto6nad nt5ond n4top nt5ops n4t5org nt7radin nt5raf n5tref ntre7kor nt5rim nt5roe nt5rom nt5ron nt5room n5troos n5trou nt5row nt5rui nt5ryk nt3sa nts7inge nt6skan nts7kand nt4s5le nt3s4m nts7onde nts5paa nt3st nt5uit ntu4m3 n4t3ys 1nu 3nua nu4e. nu4es. 2nui nuk4w nu5kwa nul7soms 4nuni nu5skr nu6skra nus4t nu3tr 4n3uur 2nv nva6lis 2nw ny4so nza6cs. o1a o4bag ob5agt o3bo ob5vor oby6nro ock7wyn. oda5gr od5een ode7leie ode7spaa od5lui od3op od3re ods7akke ods7kish od6slak ods7lake ods7lopi ods5oo ods6op. ods6org ods7paar ods7rogg ods6uit ods6waa ods6war ods6wyg odu4k oe4d5aa oe4d5ag oe4dei oed7eie. oed7ette oe6dind oed6ja. oed7onde oe4d5oo oe4d5op oe4d5or oe4d5ro oed7stry oe4du oed3w oed7wyn. oe4f5aa oe4f5an 3oefe oe4fek oe4f5lo oe4f3o oef7rit. oeg7aand oeg7laer oeg7lam. oe4gog oeg3s oeg7yska oei1 oeien6a oeis4 oei7sker oe4kaa oek7eier oe6kerf oek7erf. oek7eval oe4k3l oek6lap oek7olie oek7oort oe4kr oek5rak oek5re oek5ro oek7sten oe4k3w oe4lei oe5leie oe6lemm oel7emme oel7eter oeling6 oelings7 oe6lins oel7inst oel7onbe oel7opri oel6ser oel6skr oel7slik oe4nei oen7eike oe6nert oen7ertj oen7esse oenk4 oen5kl oen7knoo oen5kw oe4n3o oens5ko oen5sm oens4o oen7ysbe oep7aang oep7inst oe6pinv oe4pl oe5pla oep5li oe5plo oep6s5ee oep6s5in oep4sl oe4pu oeras5e oer3k oe4r5on oer5ou oer6ske oer7twak oe5ser oe5sie oe5sje oes7kraa oes7limt oe4s5lo oes7medi oes7pil. oe4s5po oes5ter oes7troe oe4swe oet7aanp oe4t5am oet6he. oe4t3j oe6t5oli oe4t5oo oe4t5ri oe4t5ru oets7kra oet6sna oet6spe oet6s5te oet6sti oet5wy oë5rug of3at of5een 5offis o4f3in of3l o4fok of5oks o4f3om of5psa o2f3r of6sant ofs7iden of6sins ofs7insi of4s5le of4s5oo ofs7paar o4fui o1g og4d. oge4s5t ogge6lo oggel7oo ogi7faal 3ogig og1l og4nat ogo7steo o4gry og5rye og4s. og4sg ogs6inf og5ska ogs7last ogs6ot. ogs4p ogs7pad. ogs7pris ogs6uip ogs6wan oi1 oig6aff oi3k oile4 ois4a oi5sag oi5ski ois6kuu oi5sky oi5sla ois4p ois4t ois7teïs ois6wer oi3tj oje4k ojek5l o4k5aas o4kag ok4am ok4an oke4t oket5j okie4 o4k5ins ok5lat ok6leed ok3n oko7seil oko6sol o4kou o1kr o4k3ro ok4s. ok5sig ok6sins ok4sj oks7kraa oks6lip ok3sp ok3st oks6win o2k3w ok4win o1la ol5agt olf7ent. ol5fèg olf6lap olf6sku olf6sme ol4gl olg7onde ol4g5or olg7smee 5olieb olies6m olie7sma 5olifa oli7gny. olk6sem olk6sep olk6sow olk6sti o1lo olo5kw o4l5oor olo5sp olp6hta ol4sar ols7are. olt6zha o1lu olyf5o o2m o3ma om5agt oma7pleg o4m5arm omat6ji oma7tjie o3me ome4s ome5us omg6had o3mi omka5s4 5omloop o3mo omos6fe omo7sfee omp7ligs omp7oor. om6pop. oms6aal om5sla oms6lag oms7perk 5omstan oms6tin o4n3ag o5n4age o3n4an ona6skl ona7sten ond7aap. ond5agt ond7ampt ond7dwaa 4ondes onde7us. on4did on4dom ond7rol. ond5sle ond5so ond5sp ond6spl ond7twis on5eff o4n3ei ong5aan on4g5os o3n4ik o4nil onin6gr onk7ert7j on4kj on5kno onk7omge onk7rugh onne5st o4n5oks ono7sfee on4s. onse4p5 ons7iden ons7kepe ons7kori ons7pamp ons7self ons4t on5ste ons7tol. on6t5aar 3ontd ont7elsi 5ontgi ont5raa on4tri ont7rol. on4t5ru ont7slik 3ontw o1ny ony7okol oo2 oo5agt ood3a oo5deb ood5ee oo5dek ood5er ood5et ood5ok ood7onge ood3r ood6san ood7smoo ood7sorg ood7spui ood7suit ood7swaa ood7swar ood5ui oof1 oof6ser oof6sid oog3 oog6enh oog6les 5oogpu oog7sinf oog7suip oog6-lo ooi6spa ook3 oo4ka ook6sst ool1 ool6and ool7snaa oom1 oo4ma oo4me oo4mo oon1 oon6ag. oong4 oons6ko oon5sl oop1 oo4pa oo4pe oop7klik o4opn oo4po oop6swe oor1 oor6daa oor7daad oor6dap oor7darm oor6dca oor6d5om oor7doop oor7frek oor3i oor7klik 5oorlog oor6ot. 4oort. oor6taa oor6t5in oort7ja. oor6tyl oort7yl. oorve7ë. oos3a oos3k oo4so oos7pers oot1 oo4ta oot6aai oot6en. oo4ti oo4to oo4t3r oo4tu oo3v oö5spo o2p o3pa o4paf op5agt opa6les o4p3am 5opdrag o3pe op5een op9eg. 5openi op4er oper7aar ope7rage op6horu o3pi opie6le opk6lik op3l op4lan op6lein 3oplo 1opn 4opno o3po opo7fagi op5off op5ont opo7sfee 5opperv op3r o5p4rot o4pru op6skre ops6maa ops7neus op5son ops5or op3st op3sw ops7wels o3pu o1ra or5afd or5agt ora6lee ora6loo orat6ji ora7tjie ord7akti ord6arm ord7eksa ord7ierl ord7inst ord5oes or4d5oo ord6oop or6dord ord7orde or4d5ri ord7roma ore7ster o3rê orf7oond 4org. or3gh or4glo 4orgp org7ring 3orië orings8ku or5kaa orkes5 ork7lag. ork6lik ork7ney. orkom6s orkoms7t or6maan or4mj or4nj or5ond or5ong o5rot. oro7thy. or3p4h orp6ski orp4sn ors7aar. ors5ag ors7jurk ors5mo ors7pot. ors7teri ors7tery or4sti ors7trek ort7aan. ort5aar ort5akt or4tar ort6ham 5ortod ort7onde ort7rol. ort7ruk. ort5sw or1u o3r4us o3ry. ory4s os3ag osa7phat os5api osas4 osa7tjie os5cen o3se ose7phin ose7phus o3si osi6nen o4sjo os1k o4s3ka os5kee os5kis os5koe os5kop. os5kor os5kou os5kow os3kr o5skri o4sku o2s3l os3m o2s3n os5oli os5oor o4sor os5ord os3p os4pe os5ste os3t os4t. os4ta os5taf os5tak os5tal os5tar os4td os4th ost7impe os4tm o5strat os6trev ost7revo ost6roo os4tw os4t- os3w os-7lond o2t o3ta ot5akk otas4 ota5st ota7tjie o3te oteek5 ote4s5a ote6sno ote6spr ote4s5t o4the oth7nage o3ti ot3j o3to ot5opm oto6ran oto6ren otor5o otos4 oto5sk ot3re o3tro ot5ryk ots7eila ots7karr ot4s5ko ot4sl ots5la ot4s5po ots7rûe. ots7tee. ot6stek ots7toet ot4stu otte6l5o o3tu o4tui otu6set oua6che oud7agti ou6dakt oud7akti oud6ief oud6ini oud6ink oud7oorg oud7styd ou4du oud7uitg oue6rio ou3g ou4gh ou4gl oug4r ou1i ou5ill ouis6a. ou1k oul7ontl ou3m ou5nyw ou5rei ous6kak ous6ken ou5ski ous6lip ous6ouw ou3s4p ous7pan. ou3s4t ous7tert ou7stiek ous7ties out7aar. out7aksy ou4t5as out7ekst out7emme 5outoma out7omhe ou4t5oo out3r out6rap out6rei ou4wb ouw7rens ou4wv ou4-o ove5re over6y. ovie6v. ov5ket owe6nal owen7al. owe6ral ower7al. ower7kon oy4a. oy4eu ô1 ô2i ôi3e ôre5st 1ö öjd7onde ö1l 1p 2p. 5paaie. 4paanv paar7dui 3pad. pa4da pad6ie. pa4d3r pad6-eg p1af pag6ne. 3pak pa4ke pak5es paki3 pakket5 pa4ko pak5os 4p5akti 3pale pal7esse pal5fr pal6mol pa4nop pan5sp pan4t5j 3pap pa5pri pap7ryp. paps4 pap7saf. pap7smee 3pa3ra pa6ramn par7amne 3park par6kar par4ko park5r 4parm par4sk par6ste pars7te. 5party pa5sja pa4so p5aspi 3pass 5paste pas7til. pa4taa pat7are. 4patel pat4j pa5tji 3patr pats4 pat5sj pav7lov. 2pb pbe6koo pbreng6 2pd p3dw pd4wa pd4wi 3pe. pe4ak pe4ar 3ped pede4r pe5dof pee2 peel5a peel5u 4peen peet3 3pei 4peie p5eien 4p3eis pek7nek. pe4k3r pel7aktr pe4l5oe pel7oond pels7kra pel6tak pel7yste 4pemm pe6nars 3penn pen7opsl pen6slu pen7smed pen6sop 4pepi 3pera pe6raap per7aap. per7admi per6ary per7asid pera5s6t 5perd. per6dag per6dry per6dwy per7enke per5est 3peri pe4rok 3pers pers5ag per6set per6sje pers7med 5perso per6s7ond pers8tel. 5pertj per6top per7tsja per7uran 3pes. 4pesi pe4sl pe4s5te peu6rel 2p1f p3fl pf4li 2p1g pges4 pge5sp pg4ly 2ph phe6ars p2hi phi5s4t p3hit piek5n pie6raf pie6rom pie4ru pie7samp pie6ska pik7erts pik3s4 6p5inges ping6la pin7glas pin5kl 4pinst pipe4 pipet5 pi3s4k pit3j pit4s5k pit4st pits5te pits7tek pit6suu pit6zko 2pj 2p1k pkom4s5 p2l pla6kal pla6kok 5plan. 5p4lant 4p3lap 3p4las 3p4lat pla4t5r plee4 pleet5 p5leie ple4k 5pleks 4p3lep pleu7ra. p3lê pli4g pli4t5e 4plits p5loos p5lose plu6ska 4plyn 2pm 2p1n p4neum poe6doe 3poei poe4s5t poe6tol po4fa pog7rest pog5sk pok5aa pok7olie 3pol 3pom 4pomh 3pone pon7opbr pon4s5k pons7te. 4pont 5pont. p5onts 4poor. 5poort. 3poot poo6tel po4pag 4popd pop6lek 4pops p5ordo po3ro por6tak 6portso por6t5ui 3pos po4sk pos6tim pos6tko pos6tna po4t5as 3pote pou6ste 2pp ppe6las ppel7as. ppe6rad ppe4ro ppie6sl ppoor6t ppoort7j p2r p4raa 4praak p5raam 5praat pra6esi 5prakt 3pren 3pres pre4s5t 4preu 3p4ria p3rib p4rie4 prie7ël. 5pries5 priet5j 5prins 3prio 3prob 3prod pr4oe 3prof 3p4rog 3proj 4p5rok. 3p4rop pro6pop pro5pr pr4or 3pros pro5sa pro7sopa pru4t 3pry pry4st 2p1s p4sad p4s5aks p4sakt 5psalm. p4sas ps5asp p4sat p4sid 5p4sigi 5psigo p4s5ing p4s5int ps3j p5skaa p4s5ket ps5kof p4skon ps5loj ps3m ps4my p4son p5son. p4s3oo p4sor ps7portr p6stera ps4ti p6stoet p4ston p5swar ps5wer 2pt ptos4 3pub pue4b 4puit 3pun pun4t5j pus7tipo put7adde put7emme put5ji put7rioo 2pv 2pw 3pyn 3pyp pyp7aard pyp3l pyp7las. pyp3o py4pr pys3k 4p5yste py5tha pyt6hon 2p- 1q qu2 qua7driv que6str qui7nas. 2r. raa6min 4raan r6aans. 4r5aard 4rabs rac5te 5radio 4r3adv 4rafd ra4fek 4rafh ra4foe 4raft ra4fu raf7urn. 4rafv 4rafw 2rag rag6aal 5rageb ra5gie ra6ginl rag7inli r4agr rag7raad rag7ryer rag6sab rag6sak rag6sin rag7soep ragu5e rag6wan rai7gne. rak6les rak7oper rak7wate 4ralb ral7eer. ral7oor. 4ralt ram7argi 4r5ameu ram6pla r4anda ran6daa ran7dafe ran6d7akk ran6dem ran6dev ran6doe ran4dr ran4g5o rank5l ran4k5r ran6saa ran6seu ran6sjo ran6sko ran6sor ran4s5p ran4s5t ran6tad ran6tet ran4t5j ran4tr 4r3any rapa7da. ra6pas. ra5pes rap7ewen rap6loï ra4pon rap7onge rap7para rap7rem. rap7righ r4ari 4rarm 4rarr 4rart r5asia ras6tan ra5s4to ra5s4tr ra4su ras5ui ra5t4ho 4r5atom rats5o rbo6lol rd5agti r4d5ame rd5eil r6delek rd5esel rde5sm rd5euro r3do r4d5oli r4d5ont r4d5oon rdô6nne rd7raais r6droma rds6lip rd3so rd3sp rdt6ree rdu6sol rd4wa r5dwar r4dwu r4d5yst 1re 3r2e. 3reak reed5a ree4k reek5e ree7kier ree7loon 4r5eend 4r5eenh 4reenv ree6pes ree6ple ree6pro 4reers ree7sala ree7stra 3reë 4reë. 4reff 3reg. reg7ruk. reg6sen reg6skw regs7om. reg7spre 4reie 4reil rei6nar 4reind rei6noo rei6ser rei6sou reit7ze. re4kn rek7naar rek5ne rek4r rek7spoe 4rekst re4kwa rel4d rel7dae. rel7diag rel7dopp reld7ran rel7duik rel7oest ren6agt r4end 5rend. r5enig ren7shaw ren4so ren4sp rens7te. ren6sto ren6str ren6tak ren6tcl ren4t5j ren4t5r 4rerg 4r3er4t rert5j 4resel re4s5ka res7lap. res5lo re3s4m res7ore. re4spi re4ste re5stel re4sti res7toet res7toma res7ure. ret5art reu6kin reu4kl reu4k5o re5usg r4ewa rey5no rê4rh r4faa rf5laa rf5lat r3fle r5f4lie r5flui rf5opv r4fre rf5reg rf4sl r1g r4gak rg5akt rgek6li rge7klik rg5eng rgeper6 rge6rid rg4hu rg5hut rg4len rg4let rg5loo r4g3lu rg4ly rgo6wri rgrie4 rg5ros rg3s rg4s. rgs4p rguit6j rgui7tji 1r2i 3rib. rib7file rie6dio rie6dop rieket5 rie6klo rie5me rie6pri ries6e. rie6skr rie6taa ri4fa rif6ree rig6ska rig7smee rig7styf ri4kl rik6sid rik5sj rik7spad ri4kw rim4s 4r3inf rin6gaa rin7gaan ring7aar 6r7ingest rin7gleb rin4g5r rin6gui 4r3inh rin6kar 4r5inko rink5w rin6kwa 4r3inl 4r3inr 4rins r5inst rin7the. r3inv 4rinve rio7rye. rip4s5t ri5s4ko ris4o ri5son ris5op ris6per rit5ji rit7oond rit6rea ri5tro rit6zri 5rivie rix7tont 2r1k r4kaan rk5een rk5eik rke6lap rke4s3 rke7sel. r6kink. rk5inl rk5leie r4klid r5klip r4k5los rk5nei rk5omg rkom6sti r4k5opd r4k5ops rk5rand rk5red rk5rib rk5rok rks6maa rk5spo rks6uid rk5twi rk5uit r4k5ure rk5wag r4k5wat rk5wee r4k5wet rk5wil rk5win r4kwy r1l r3la rli4g rlo6gja rloo7ple rlo6wpa 2rm r6maanh rma5gô rma6gun rma7klot rma7plaa rma7raan rme6raa rmer7aar rme5sa rmi4l rmos4 rmo7stro rm5uit rmy6nim 2r1n r5nagte rna6spl r4n5ele rne4s rne4t5a rne6tom rn5oor rn6stig rns6tin r3nu roduk5 roe6fas roef7as. roe4f5l roe6fri roe4ga roe7glas roe4n5a roe4pa roep5l roe4p5o roe4s5k roe6sla roes7lag roe4s5t roes5w roe6taa 4roew rog7akke 4rogg rog6lis ro5gna ro4kn rok4r rok7slip rok4s5p ro5kyn ro4l5aa rol7gord r6olien rol7mops romp7op. 4roms ron7aar. ron6dag ron6dak ron6d7er6t7 ron6d5et ron4d5o rond6o. ron4d5r ronds4 rond5sw ron4du ron6gaa ron6kaa ronker6 ron6kert ron4k5l ron6kow ron4kr ronk7wa. ron6ske ron6ste rons7te. ron7stel ron6s5ti r5ontp ron4t5r ron6tui 4rontw roo7dewa roo7dist 3roof 4roog roo7gron roo7mens roo7nag. 4roond roop6la 4r3oor roo7taai r4opa rop7aans rop7anys ro5pee rop6een 4r5open r4opi r4opo r1or r4ora ro3ro ros6afr 4r5osea ros7kie. ro3s4p ro5sta ros6til rot6hsc ro5ton ro3tr rot4sa 4roud rou7floe rou5sk rou3t rovi7ch. rov7nik. ro4w- rox9y. r2ö rpe4s3 r4pid rp5ide r4p5lik rp5opd r4p5reg rps7idio rp4sl rps5no rp6spri rp4stu 2r1r2 rre7glob rre7nagt rre4st rre7stau rres5tr rri6gin rron7kaa 2rs r4sakt rs5alm r4s3ar r5scha rs5eila rseuns6 rs3f r5s6feer rs4ie rsi7flag r6sinda rs5inko r6sinsp r6sinst r5sjam r6skaki r5skap r6skapa r6skapi r6skeus r4s5kin rs6kink r6skoet rs6komm rs6koni r4skor r5skors r5skou rs5krib r6skroo r4skur r4slê rs5lis r4s5los rs5lyf rs6maad rs6maai r5s6maak r6smaat rs6magt rs6mak. r6smake rs6mara rs6mede rs4mee r5smeer rs4mel rsnee5m r5snoo r4snot r4s3og rsonde6 rsonder7 rs5ong rs5oog r6soors rs3op rs4op. rs5ord r1sp r6spaar r4s5par r6spien r5spri r1st r6s5tal. r4stb r6stegn rs6terp r5s6ters rs6tigl rs4tik rs4tis r4s5tit r4stj r6s5toet r6streg r3sty rs3un rsu4s rs5wa. rs5wap rs3we rs6werf rs5wyk 2rt rt5afd rt7angel rt5art r6teend rte6loe rtie4s rting4 rti7saan r4t3om rt5ont rt5opr rt5org r6treda rt5reis rt5ren r4t5rie r6trol. r4t3ry rt6s5aar rts5ond rts6pyn rt5uits rt4wis rt4wyf 3rub ru4ga rug6-sk rui6lek rui6moe 5ruimte rui6niv 4ruit5s ru2k3 ru5kaa ruk6lip ruk6opp ruk6-en rul5aa rul7ape. rul7yste r2um rum7grok 4runi rup7lys. ru5spi rus6tak rus6tka rus6tma rus6tvo rus7uur. rut7oond 2ruu ruus6te ruu7ste. rweg5a rwe6gei rwe6skr rwi7sje. rwoes5 rwy6sak rwy6see ry4fa ryf7ink. ry4fo ryf7ode. ryf6sch ryf6sin ryf6ska ryg7stek ryg6str ry6kinr ryk3l ry5klu 3rym. ryn4s5l ryp7arm. ry5ple ryp7lus. ryp7nagt ry4s3a rys6alf ry6sinl rys5pi rys5po ry3st rys4ti ry4su ry4ta ry5tra s2 2s. s'9ie. 1sa 3sa. s4aad saa6dui 3saak 3saal 4s3aan 4s3aap 4s5aard 4s3aas 4s3adm s5adre 4s3adv 2s3af 2sag 3s4ag. sa4gal s3age s4agi s4ag4n sa5gne 3s4ago sag6opa 5sagte. 5s6agtew 3sak. s5akad 3sake 3sakk sa6k5rok sa6krus saks4 s3akt 4s5akti sa6lamm sal7ammo 4salb s5albu 3salf sal6fol 4s3alg 4salm sal6mei sal6tro 3sam 4samba same4n 4s3amp sam6swy 4sana s5anal san6d5ag san6dak sand7akk san6dru 3sang san4g5a san6gre sang7ste 4s5anke sap6hat s5appa s5appel sa3pr 4s3arb 4sarea sar7olie 4s3art 4sase s5asem 4s5aspe sa5spr sat6jie 4s3atl 4s5atta sav7lon. 2sb s3ba s3be s3bi s3bl s3bo s3br s3bu s3by s3ca s3ci 2sd s3da s3de s3di s3do s3dr s3du s3dw sd4wa s3dy 1se 3se. s5eed. see3f see3k s5eenhe see6plo see5ram seer7as. see5rei see7roet see3s4 see7soog see5sw seë7kran s5egpa 4segt 4s3eie 4seik s5eik. 4seila sei6nan 4seind 4seis. sek6huk 4seksa s5eksam sek4s5k sek4s5p sek4st 3sel sel5aan sel7anal se4l5el sel4f5a sel7fabr sel6fer self5i sel6fid 6seliks sel5of sel7oor. sel5op sels7kak sel6slo sel7spen sel6s7taa se4m5ag 4s5emal sem7ekst sen6dan sen7ghor sen7sord sen6str sep6hus ser7afse 4serf s5erf. ser6s5in ser6skr ser6sta sers7taa ser7stad sers7tal ser6tuu s5ervar ses6aan 4se4s5ka ses7lett se4s5po se4st se4s5ur ses7uur. se4sw ses7weke s4et. sewes6t sewe7ste sey7stof 1sê 2s1f2 s3fa s3fi s3fl s3fo s3fr s3fu 2s1g s3ga sga4s5e s3ge sges7per s3gi s3gl sg4ly s3go s3gr s3gu 2sh s3ha s4ha. sha7ron. s3he s3hi s3ho sho7shol s3hu 1si 4s5idea s5idee. 4s5ideo 3sie sie7kwos sies6li sies7mee si5fle sif6reu 4si3go si4gro 4simpl 3sin. si5nag s5indek 5sindr 4sindu sin7enti sin7este 4s3inf s4ing sin6gaa sing7aan 6singes sin7gle. sin6gre s5ingry 4s3inh sin6kch sin4kl 4sinko s5inlig 4s3inm 4s3inr sin6see sin6sin 6sinslu sin5sn 4sinv sip6ho. s4ist sit6are 4s5item si3tr si4tre sit7riem sit6sik sit5sl 3situ siu6mur 1sj 2sja sje6ans 5sjoko 4sjuf 1sk2 2sk. 5skaaf skaar6s 6skaart s5kafe 3skak 6skakeb s5kakt 4s5kalf 4skam 4skant 3skap ska6pin ska6pon skap5r 4skar. 4skara 4skas s5kata ska6tel ska6tit 5skawe 3skem 4skenn 3s4kep ske6pla ske4p5r 4skerk 4s5kern ske7smee 5skets 4skett s5kiem ski7klub s4kil 4s5kilj ski6lol s4kip 5skip. 4skis. 2s3kl 2s3kn 4skod 4s5koeë 5s4koen 4skoer sko6kaa sko4ko 4skoll 4skolo 4skolw 4skomb 4skomi 4skomp s3kon s4kone 4skonf 4skong 4skons 4skont 6skoord s4koot 4skoö 4skos sko6see 5skott 4skow 6skraan 4skrag 4skran sk4re 6skreet s5kres 5skrif 4skrin 5s4krip 4skris 4skrui 3s4kry 4s5kryt sku6dak 4skuik s5kuip 5skuld 4skult 4skun 5skurf 4skus sku6tar 2s3kw sky7drin s4kyf s4kyw 1sl s4laa 4s3lad s4la4g 4slam 4s5land s4lang s5lant 4s3las 4s3lat s4law 4s3led 5sleep 4s5leer 4s3leë s4leë. 4s3lei 4s3lek 4slel 4sleng sle6tji slet7jie s4leu 4s5leue s5leus 5sleut 4s3lew 4sley s3lê 2sli slib3 5slier s3li4g 5slinge slo6bee s4lof 4sloj 4slok 4s5loon 4s5loos 4slop slo4t5a s5loter s4low sl4öj 4s3lug 4slui. 4s5luia s5luih 5sluit 4s3lus 4s3lye 4slyf sly6mui 4slyn sly6paf 4s3lys 2sm s3ma s4mad 5s4mart s3me s5melk 5s4melt s3mi 5smid. smi4s smit4h5 3smok s5mol. s3mon s3mu 3smy smy6nin s4myt 1sn s5naai 4snaam s5naat 4s3na4g snag5e snag6s. 4snam sna6pro s4nar s3nas 4snat 4snav snee7tji 4s3nek 3s4nel 4s3nes 4s3net 4sneu sni6kwa sni6tre s4nob 5snoet 4s3nom 4snoo 4snorm s4nui sny3 s4nye 5snyer sny6-ys 1so 4soef 3s4oek soe6kal soe6kev soe6kol soe4k5u s4oen soe6nys 4soes 5soet. soets6t soet7ste sof6agu 4soff so3fr sof6ree sog4l soi6ets sok7opho 3sol s5olie. sol6lme solo5s s4om. s4ome 4s3omg 4s3oms 4s3omv 3s4on. s6onde. s7ondern 3s4one so6neek son7eekh son5eg 4son3g son7kwas so4n5op son4so 4s3ont son7uit. s4onv 4sonw 4soog 3s4ool 4s5oond soon4s 4s5oor. 4s5oorb 4s5oord 4s5oore s5oorg 4s5oorl s5oors 5soort. s5oortr 2s1op 3sop. sop7ekst so5phi sop6hok s4opi 5sopie s3opl 3sopo so3pr 5s4op4ra s3ops s3opt s3opv 4sord 5sorg. 4s5orga sor6gee sor6gra sorg7raa s5orke so5ror 4sorto sos4h so5sha so3th sot4ho so3tr 3sou 4soud s5oude sou6spa sou4s5t sou6taa sou6tak 4souto s5outom so9ya. s5paal 5spaan 4spad 4spak 3s4pan span5o spa6noo 4spap 4spark 4s5pas. 4spast spa6tar 4spatr 4spe. 3s4pee spe4k5l spe6kne spe6lak 5speler s4pell 6spelot 4spen s5pen. 4sperd 4sperk 5sperm. 4spers 4spes. 5spesi 4spet s4peu 4s5piek s4pio 2s3pl 5s4plee 5s4plin 5splits 3s4ply 4spoei 4spol 4spom spon6st 5spoor. 4spoot 5spore 6sportr 4spos 4spote s5poti 5spraak 6sprakt 4s5prat spreek5 s5prem 4spres 5spreu 4sprob 5sproei 4sprof 4sprog 5s4pron 4spros 5spruit 4spry s3ps sp4si 4spub 3s4pul 4spun 4spyn 4spyp 2s1r s3ra sra4e s3re s3ri s3ro s3ru s3ry 2s1s s3sa ss4af ss4ag ssa6rol ssay7is. s3se sse6nas sse4n5i sser4s sse5st s3si ssie6l7ei s3sk ss4ko s3sl s3sm ss4ma ss4me s3sn s3so s3sp ss4pl s3st ss4ti s3su s3sw s3sy 2st. 4sta. s4taa st5aard 5staat 3s4tad 4stafe sta6las stal7as. 4stale sta6lee sta6lem 4stali 5s4talt 5s4tam. sta4m5o 5s4tan. stand8s7ta 4stari 3s4tat s5tatr 4stea s4tedd 5s4tede s4tee4k 5s4teen 4steer 4steg ste6gre st4ei ste6kli ste6lek stel7eks 6stelev 5s6telse stel6tj stelt7ji 5s4tem. 5stemm ste6mom ste6nou 4stent s5teny 4steo 6sterap ste6r5ei 5sterkt 4sterm ste6rom ster5sm ste6rys ster7ys. ste6ser ste6sin ste6ska ste6ski ste4sl ste6sma 2sth s3ti 4stie s4tigt 4s5tiku sti6laa s4timu sting5a 5stinkh s4tip 4stir 4s5tite s3tj 4sto. s5toeg s5toek 5stoel. 6stoela s5toen 4stoer 4stoes s5toev s4tof sto6fek sto6fem sto6fen sto4fo 4stog sto4ka sto6kle sto6kre 3s4tom 4stone 4stoon st4op sto6poo 4stos sto4st 3s4tot s4tow s4traa 4strad s6trak. 4s5trei s4trew 4s5tril 6strins 4stroe s5trog str6ont 6stroon 6strosp 4strot s5trots 4strou 4strov s4tru 5struk 4s5trus 3s4try stu4c 3s4tud 4stuig 3s4tuk stu6kin stu7klep stu7stra stu4to stu6tys st4wi 2sty 4styd 5styf. 3s4tyl sty6loo 1su su2b1 sub3a sub7gids sub7hoof sub7nasi sub5oo sub7reko 3suid sui6daf sui6dei s4uik s4uil suip5l sui6pro 4s3uit s4uiw sul6tin sum7aans 2sun s3uni su4su sut6her su9yo. 2sv s3va s3ve s3vi s3vl s3vo s3vr s3vu s3vy svy7kraa 2sw 5s4waai 5swael s5waen 3s4wak 3s4wa4m swam5a s5wand 5swart s3wat 3s4waw 6sweefs s6weeft s5week 5s4weep 5s4weet 4sweg 5sweis s4welg 3s4we4m 5s4werm swe6tre s3wê s3wi s4wik 4swil s3wo 5swoeg swor6st 4swort s3wr s3wu 3swyg 1sy 5syfer sy3k syn6agr syn6sin syn5sm sy5pla sy3sk 4syst s5yster 4sywe s5ywer 2s- 1t 2t. 3ta. taa6nam 4taand taan5s6f 6taansi 4taant 4t5aanv 3tabb 4tadm ta4d5ro tad6ser tad4s5i tad6ska tads5n tads5p tad6ste tad6s5to 4taf. 4tafd 3tafe tafe4l 4ta4fr 4t3afs 4tafv 4t3afw t4age 4t5agen 4tags 4t3agt tai4l ta5inv tai7peis 5take. tak6lep ta5kli ta4kr tak7rol. 3takt tak7wyn. 3tale tal7eenh tal7emme 5talig tal6kaa tal6sor ta6mind tam7inde tan6dat tan4dr tand7rin tand6sto tang5st 4t5anna tan4sk tap5ro 3tari 4tark 4tarm t5arm. tar5oo t5artik ta4s. t5asem tas4p tas6tas tat7isol tat4j tat7jies ta4t5ra 2tb tba6lun tby6tei 2td tdy7ing. teby6s. 3tedo teek5r tee6lee tee7lood tee6mev tee4mo tee4n 4teenh 3teer tee7raad tee7renv tees4 tee5sk tee5sl tee5st tee7suik 4t3eeu tef7lon. 3tegn teg6ori teg7ren. 5tehui tei6noo tek2 5tekam tek7bak. 5teken teke8n7aap tek7haak tek7limi 5tekor tek7semp tek6sin teks5k teks5t tek7stel tek5vo te6laap tel7aap. te4l5ak te4l5ap tel7dwei te4l5el tel7fles tel7idee 5telik tel6lho tel7oes. tel7oog. te6loon tel7oond tel7smed tem7asse 4temm tem7omva te6moog tem7oog. 5tempo tena6ge 5tend. t4enh ten6kaa ten6koo ten7ouer ten6san ten7slot 5tenso ten4s5u ten4t5j ten4tr tent7reg ten7treu ten7twen 3teo te3p4h ter7adel 5te4r5af ter6afi ter6ago te4rak ter7akro ter7als. ter7aman ter7amer te6ramp ter7amp. 5terap ter5app ter6arg ter6dro terd7roo ter5een te4r5el te4rem 4terft te6rin. ter7ink. terk7wyn 3term ter7omra ter5ond ter5ont 5teror ter5os. te4r5ow ter7raan 5terrei ter7rein 5terri ter6sas ter6sef ter6seg ter6skop ter7sopn ters6we ter7swee ter7syst ter6tap te4rui ter7uie. te6ryst ter7yste ter6-in 3tesi tes7inst tes7loe. tes7lydi tes7mart tes7meto tes7proe tes7teri tes6tud te5sty te4s3w 3teti teun5s4 2t1f tf4li 2t1g tg4af tge6nap tg4li 2th 3tha. t4has 4thei 3t4hen ther6aa the7raan the5ro 3t2hi 4thit t5hitt th5leh t4ho. tho6nat ths7chil t4hy. tib7niet tie4f tief5o tie6gri tie6kap tie4k5l tie6kom tie4k5r tie4k5w tie6roë tie7smoo 4tif. 4tiff 4tigm tike4 ti4kla tik7lug. tik5ro tik6waa 4til. til7aan. 4tild 4til3s 4tilt 4t3ind tin7erts tin4ga tin7gaal ting7aan ting7eg. tin4g5r ting6su tings7uu 4tinkh tink7wa. 4t3inl 4tinv 5tipe. 5tipes ti4rp tis6aan ti3sj ti3tr tive5r t2j 2tja tje6sni tjo4k 2t1k tki6sob tkom4s5 2t1l t3la tla6sin t3li t3lo t5lont 2tm tme6sti 2t1n tne6ywe tnot4s5 3to. toe7eien 4toef 5toef. toe7gly. toe7klap toe5kr 4toel. 5toe5la 4toele toe6let toe6lop 4toelt 4toep. toe7plei 5toern toe6rou 5toeru 3toes toe5sl toe5sm toe7swel toë7roti to4fa tof7ekst tof7emis to4f5io tof7onde 3tog to4gl tok7las. tok7lett tok5ou t5olie. 4tom. 4tond 3tone ton4gr tong5s 4tont t5ontl t5onts 3toon t5oper to5p4he 4topm top7oorl 4topv tor7eien tor7eval to6rint tor7inte tor6m5ag tor6mom to1s to3sf tos6tro to3tr tot6ste tou3s4 tou7tjie tou6wsr to4wn toy7ota. 2tp tpen6sk tpie6tj tpiet7ji tplek5 tpoor6t tpoort7j tp4sa t5psal t2r 4t5raad t5raam 5tradis 4traf tra6fas traf5o tra6foo 5trakta 5transa 5transf tra6paf trap7as. tra6pew tra7ploï 5trapp trat4 tra5tj 4tratu 4trea t3rec t5reda t5redd t4ree 4treek 4t5reen 4treë 4treg. t5regi tr4ei t5reini tre6ink 4treis tre4ka tre4k5l tre4ko tre4kr trek5w tre6kwi t4rer t5rese tre4st tre4t tre7talb tret5j t5reuk t5rewo 5tribu t5rief trie6kl 5tries tri5g4l 4tring trobo5 4t5roer tro6las trol7as. tro6lin tro6naf troo4 4troom tro6ski 3trou 3trov 4trub 4t3rug truit6j trui7tji 4truk tru7kopp trust5r 4tryk 2t1s ts5agt t4sam t4sar ts5arg t4s5eks t4s5eng tse6raf tse6rys tser7ys. t6singr t4s5ins ts5inv tsi7tsik ts5jae t4skar ts5kok t4skon t4skor t6skrie t6skrip t4skru ts5lam t5s6maak t5s4mee ts4mel t4smo ts5mot t5smou ts5nat ts5neu ts5oon t4s5pas ts5pen ts5pot t4s5pro ts5tea t5stel t6stend ts4ti ts5toer ts5tron t3stu t3su ts5waar t5swar t5swen ts6wing ts5wyn 2tt tta5tj tte6loë tte6ral tte6ram tte7ridg tte4ro tte7ruil tte6slo tte6s5ta tte5us tt4he tting5a tt5uur 3tua 3tue 3tuig 3tuin 4tuits tu4kl tum7aanw tur6kna 4turt tus7aart tus7eter tussen5 tu5têr 2tv tv4li 2tw twee5k twee5l twees4 twerp5o twi6sap 3tyd tyd7aanw tyd7lont tyd7orde tyd3r tyd6sat 3tye tyl7oorw 3tyn tyn7spre ty3o t5yster 2tz tze6nel 2t- u1a ua4e4s uahu6a. u4b3ag ubas4 uba7slag ub5eko ub3f ub5gro ub5int u3bl u4blu ub5lun ub3or ub5sch ub3t ub3v ub5wyk uck6len u4d3ar udi6top u4d3re u4dri uds6med ud5sor ud6stoe uds6tyd u1e ueb5lo uer7ione ue4ron uer7onde ues7tria ue5uni u4fri uf5rin ufs6maa ug5aan u4gei uge6ska ug1l u2go ugo6mol ug3or u2g3r ug3s ugs4k ugs4l ug4soo ugs4p ug5ste ugs6tek ug5sto ug5sui ug4ub ui4dag uid7arts ui4d3o ui4dr uid7reek uid7simb uid7skat uid7skel uid7skil uid7slui uid5spr uids6to uid7stoe uid7uits ui1e uiers6w uies6ma uie7smaa ui4f3a uif7eend uif5le ui4go ui4g3r uig3s4 ui4k3a ui4k3l ui4k3r uik7sfee uik6sta uik7uitk ui4kw uil7aap. uil5eks uil7esel ui4l5oo uil7tjan ui4ma uim7oes. ui4na ui5nae uin5ar uin7asyn uind4 uin7drek uin7ivoo uin7kole ui4n3o uin7ser. uin5si uin6ska ui4pl ui4po uip5oo uip7ore. uip7roes ui4s3a uis3j ui4s3o uis5ta ui4t3a uit7dein ui4t5ee ui5ter uit3j uit3r uit4sj uit6-as uk4aa ukaar4 uk5loo u4kof uk5off u4kor u5krat uk3ry ukse4s uk4ski uks4m uks7pop. uk4sv uk4th uku7yama u2k3w u1la ul3ag uld5erk ule6sta ulê6r-w ulf6api ul5ins u1lo ul5oog ulp7eksa ulp7oort ulp7orga ul4saa uls6oms ult7inge ult7uit. u1lu u2m u3ma um5agt umat4 uma5tj u3me umg6rok u3mi um4ie um5ond um4s. ums7feld u3mu u4mui umu4s un5arm uner6st 5unifo 3univ unk7reda un2s3 uns6enb un4sid uns6kap un5s6kol un7s6kool uns7lagg uns7taal un5str unt7eenh un6tinn unt7real unt6roe unts6ko unt5sw unug6s. u1o upi6lop u4ply u4pon u1ra ur5aar ur3af ur5agt ur3ak u5ra5s4t ur5atl ur5een u4ref ur5eff ure5um urf7loop urg6h-s urg7laag u4r5int urke5s urk7nael u1ro uro7pesi urp7agti urr7heim urs7agte ur4s5ek urs6fee ur6sloo urs7mous ur4sno ur4s5oo urs7paar urs6par ur4spr urs6wee urs6wie ur6t5oor ur4top urt7room u1ru u1ry us3ag usa7lag. u4sap us5een use5st ush7die. ush7koal usie4k usiek5l u4s5ins u2s3k us4k. us4kok us4kri u2s3l u3s4lu u4sno u2s3o us4ol us4or us3p us4pie u4spo us5pot usse7us. us3t us4t. ust5akt usta6v. us4tb us4tf us4tg us4th us6tink us4to us6trek us5tru us4ts us3w u2t u3ta ut5adm u4t3ag uta7spek u3te ute7ling ute7rago u3ti u3to u4topl ut5org ut4rek uts7luis ut4spr u3tu u3ty uu2 uur1 uur3i uur6s5in uus3 uus6khe uut3j uwees4 uwe7smit u5yste u3yu û1 1ü1 1v2 vaar6st va4kar vak7eie. va4kes va4ki va5kie va4k3o va4kr val7este val7fees val7funk val7isog valk7oë. val7opto val4sa val6spa vals7pan val6spo val6spr val6s5te val6sth va4n5ee van7effe van6gap van6gre van7uit. vari5et var6kja var6kle var4k5n var4k5o var4k5r vas7ent. vas6oor vas7waai ve2 ve3d vee7kong vee5kr vee4l veer5a vee3s4 ve9ga. veis4 vei5st vel6don vel4d5r vel5oo ve5lop vel5sm vel7sple ve5lum ve3na ve3ne ve5nor ven4t5j ve3nu vep7legi 3ver1 ve9ra. verd4 verdien7s8 ve5reb ve5rek ver6ema ver6ena ve5rend ver6eve ver6flu ver6fru ve3ri ve6r5inn verk4 ver5kl ver5kw ve7rona. ver5sa vers6ki ver7skin vers8kop. ver5sl ver5sm vers6mag ver5sp ver7stal ver5s4w vers8waar ver4t5j ver5tw ves3p ves3t ves7taal ve5suv vet5in vet5ji vet7opga vet3r vets4 vet5sm vid5so vie7ring vig4s vi5rag vi4rg vi4r- vi4sar vi4so vis5ol vis7oog. vis5tr vi3tr vit7rate vlag5s vla4k vla7koek vla6sak vle4k vlek5l v4lie vlie6so voe6rek voe6rui voë4l voël7oë. vog7inho vo4gr vo4lei vol4g5a vol6gon vo4l3o vol7song vol7uit. vol7ywer vond6s7te von6klo voo7doo. voor5s4 vor4s5t vor7ster vou7pops vou5tj vra6gry v4re. vree6tj vreet7ji vrie6sp vri6jze vry7duik vry7kyk. vry3s4 vry5st vry7uit. vu4e. vu9yo. vyf7armi vy3s 1w 2w. 4wael wae6lat 4wa4eo 3wag. wag6las wal6ste wand6sk wan6gaa wan7inge wans4 wan5sm 5wapen 3warm war4s3 wars6e. 4wart war6thi war4t5j war6toë wart7oë. war6too war4t5r war6tys wa5shi was6kaa was5la was6mou was7pan. wa5str wate6ra water7aa wat5so we4bad we4bm we4b5ru web7taal web7vlie 3wed we4d3r we5dra we5dry we4dy 5weefse weeg6s. wee5ran wee5sa wee7skaa wee5sko wee5sl wee5s4p wee5st wee6tru 3weg we4ga weg7dof. weg3l we4go weg7orde we4g3r weg3s4 weg5st we4gu 4weis we4k5ro wek7uur. wel7aanb we6larg we4l5ee wel7flan wel7fron wel5oor we4l5op wel6ske we4m3o wem6os. we4nak we4n5as wen7eens wen6sad wen6san wen6sar wen6sei wen6ser wen6ses wen4sk wens5ka wen7skud wen4s5l wen4so wen6spr wen6ste wens7tes wen4s5u wer7esse wer6fom wer6gar wer6gre wer6int 3werk wer6kad wer6k5af wer6kes wer4kl werk7laa wer7klan wer7klap wer7klok wer6koms wer6kon wer7kony wer6kre wer6kro wer6kuu wer4kw wer5kwa wer4ky we4r3o wer6paf wer6pan wer6plo wer6pon wer6poo wer6por wer7smed wer7uil. wes6mit wes7oewe we4sp wes7pemi we4s3t we5sta wes4th we5s4tr wes7waar 3wet. wet7regu wet4s5o wet4s5t wet7wysi 3wêr 4wfon wids7tor wiel5a wie4t5j wi4gr wi4kl wi4ko wiks7te. wil6dag wil6sin wil4sk wind7as. win6del win6dop wind7op. win4dr wind7ruk win6kle win4sk win7sky. win4s5t win7ston win6tap win6tes wip7lig. wip7roos wit5el wit7inkb wit5ji wi4t3o wit5ro 2wj wje6tun 4woeg woe4s wo4l3a wol7invo wol6klo wo4l3o woor6dr wo5rum wou6dag w2r wree4 wri6gon 2ws wur4gr wur4m wurm5a 2ww wwe7rint wyd5oo wyd7uite wyk6was wyn6and wyn5sm 3wys wys7aksi wys3k wys3p wys5ta wyt7raak x'9ie. x1a xe1 x3em xerox7e. x2h x1i xys6te. y1a y4ama ybe6lil y2d y3da y3de yden4s ydgele6 ydg6leu y3di yd3of yd3re yd3ro yd4sin yd6skat yds7krit yds7orde y1e y4enn yer2 yer7hof. yer7maat yer4s yer7ton. yer7vill yer7voël yes6agt 3yeu yf3aa y4far yf5as. yf3l y2f3r yf5ren yf4sl yf4su y1g yg4le yg4li yg4ly yg5saa ygs7kans yg5sko ygs5le ygs6tek yg4sto yg4stu ykaar4 yker6st y4k5ins y2kl yk3li yk4lu yk5lui yk5lus ykoms4 y4kor yk3ri yk4s5ad yk4sk yks7kans yk3sp yks4t yk4su y2k3w y1la y1lo y4loe yls7laar y2n1a yn4a. y4nei y4n5ete yn1g2 yn5kli yn5kwa y2n1o y3n4om yns6agt yn4s5am yns5ins yn5sly yns4m yns7maan yn4s5or yn4sp yns7paar yns4t yn3u yo9yo. y2p y3pa y3pe y3pi y5plan yp3li yp5org y3pr y3pu y1r y4sam ys4ig y4s5ind y4s5ins y2sk ys5kar ys3ko y5s4koo y2s3l y2s3n y2s3o ys4ok ys4ou ys5poe ys3t ys4ta y4s5taf y5s4tel y4ster y3s4tr ys4tu ys3ui ys3w y2t y3ta yt3ag y3te yt4ha y3ti y3tj y3to y3tu y3ty yve7sant 1z 2z. 4zbur zee7rust zen7elle zi2c zi5cat 4zman zook6a. 2zz 2-1 -er4t -ert5j -ha-7ha. -k4li -na6gew -s4ti -t4we -5twee}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hu.lua0000644000175000017500000201422212161703335024661 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="hu", ["source"]="hyph-hu", ["texcomment"]="% Hungarian hyphenation patterns (v20110815)\ % \ % (more info about the licence to be added later)\ % \ % from https://github.com/nagybence/huhyphn/\ % ------------------------------------------\ % Huhyphn - hungarian hyphenation patterns v20110815\ %\ % ***** BEGIN LICENSE BLOCK *****\ % Version: MPL 1.1/GPL 2.0/LGPL 2.1\ %\ % The contents of this file are subject to the Mozilla Public License Version\ % 1.1 (the \"License\"); you may not use this file except in compliance with\ % the License. You may obtain a copy of the License at\ % http://www.mozilla.org/MPL/\ %\ % Software distributed under the License is distributed on an \"AS IS\" basis,\ % WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\ % for the specific language governing rights and limitations under the\ % License.\ %\ % The Original Code is the Huhyphn - hungarian hyphenation patterns.\ %\ % The Initial Developer of the Original Code is\ % Bence Nagy.\ % Portions created by the Initial Developer are Copyright (C) 2003\ % the Initial Developer. All Rights Reserved.\ %\ % Contributor(s):\ % Bence Nagy \ %\ % Alternatively, the contents of this file may be used under the terms of\ % either the GNU General Public License Version 2 or later (the \"GPL\"), or\ % the GNU Lesser General Public License Version 2.1 or later (the \"LGPL\"),\ % in which case the provisions of the GPL or the LGPL are applicable instead\ % of those above. If you wish to allow use of your version of this file only\ % under the terms of either the GPL or the LGPL, and not to allow others to\ % use your version of this file under the terms of the MPL, indicate your\ % decision by deleting the provisions above and replace them with the notice\ % and other provisions required by the GPL or the LGPL. If you do not delete\ % the provisions above, a recipient may use your version of this file under\ % the terms of any one of the MPL, the GPL or the LGPL.\ %\ % ***** END LICENSE BLOCK *****\ %\ % Encoding: UTF8\ %\ % \\message{Huhyphn - hungarian hyphenation patterns v20110815}\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzáäéíóöúüőű", ["data"]=".a2 .adatát1a2 .ada2t1e2 .adás1s .adá2s3z .ad1yé. .ad1yi .ag1os .ag2ra .agyag1g .agy1á2ram .agy1árt .agy1e2 .agyo2 .agyon1 .agy1ó2 .agy1ű2 .akác1c .aká2cs .ak2h .ako2 .ak2t1ér. .ak2t1orr .ak2t1ő2 .aku1p2 .ala2g1 .alak1a2 .ala2k1ö2 .ala2k1ő2 .ala2pa .ala2p1á .al1eg .al1is .al2járn .alje2 .al2j1el .aljel1ö2 .alo2m1 .al1os .al2t1a2k .al2t1erj .al2tén .al2térn .al2tért .al2tin .am1ak .ango2l1ó2 .an1th .anti1s .apa1p2 .apá2ly1á2z .ara2ny1e2 .ara2sze .ar1á2c .ar2cal .arc3c .ar2c1e2 .ar2cél .ar2c3há .ar2c3hoz .ar2cin .ar2cio .ar2col .ar2cö .ar2c3s .ar1kh .at2h .az1a2 .az1ám .aze2 .az1ó2 .á2 .ács1ék .ág1árn .ág1árt .ág1ó2 .ágy1ala .ágy1asz .ágy1árt .ágy1á2z .ál1a2 .ál1é .ál1i2 .áligaz1 .ál2l1alj .ál2l1alt .ál2lin .ál1o2k .ál1ú .ár1aj .ár1aktá .ár1a2l .ára2m1e .ár1a2p .ára2sz .ár1aszó .ár1ác .ár1ál .ár1á2z .ár1d2 .áre2 .ár1em .áré2 .ár1ir .ár2nyel .ár1ol .ár1om .ár1os .árrés1s .ár1s2 .ár1t2r .ász1ál .ász1árb .ász1á2ré .ász1á2ri .ász1á2ro .át1a2d .át1a2k .át1alt .át1a2n .át1ar .át1a2s .át1av .át1á2 .át1e2 .át1é2 .át1i2 .át1ol .át1o2r .át1o2s .átó2 .át1óh .át1óv .át1ö2 .át1u .át1ü2 .át1ű .b2 .ba2b1a2rá .ba2bál .ba2b1e2 .ba2bol .ba2j1á2rat .ba2j1e .bak1aszt .ba2kál .ba2k1á2ro .baké2 .ba2k1ö2 .ba2kur .ba2l1e2g .ba1ts .ba2u .bá2l1ó2 .bár1a .bá1th .be2at. .be1d2 .bei2 .be1kr .be1str .be1szk .beté2t1e2l .be1tr .bér2c3sí .bé2r1o .bi2ke .bi2os .bi2ot .bita2 .bi2tag .bi2t1á2 .bi2tel .bi2t1er .bi2t1orr .bi2tur .bo2g1ó2 .bol2ta .bo2ly1ó2 .bo2nav .bo2raj .bo2ran .bo2ras .bo2rat .bo2rác .bo2rál .bo2r1odv .bor2sét .bort2 .bo2tá .bra2i .bu2sz1e .c2 .cen2t1á .cen2t1ó2 .ce2t1e2l .ce2t1ű .cé2l1e2 .ci2n1á2 .cito1 .cs2 .csa2k1 .csa2p1á2g .csa2t1é2 .cse2l1ő2r .d2 .dac1c .da2c3s .da2i .dal1an .da2lás .da2l1e2 .da2l1ék .da2lén .da2l1í2 .da3lol .da2l1ó2 .dan1n .da2u .den2g1 .dé2la .dére2 .dé2res .dé2sa .di2afo .di2aka .di2al .di2csá .di2ómá .dó2mor .dú2ra .e2 .eb1eg .eb1ir .eb1í .eb1u2 .eg2é .egres1s .egy1a2 .egy1á2 .egy1e2lőr .egy1ev .egy1in .egy1ö2 .egy1ü2l .el1a2k .el1an .el1ap .ela2s .el1ass .el1aszn .el1aszo .el1aszv .el1á2 .el1e2c .el1eger .ele2gyá .el1e2h .el1ejt .el1e2l .ele2ma .ele2má .ele2meg .ele2mel .el1emele .el1emels .el1emelt .el1e2més .el1e2n .el1e2p .el1e2r .el1e2se .el1e2sés .el1esh .el1e2si .el1esn .el1e2ső .el1ess .el1este .el1estél .el1estü .el1e2sü .el1esv .el1e2sz .el1e2t .el1e2vet .el1e2vez .el1evi .elé2d .el1éde .el1é2gek .el1éh .el1ékez .el1é2le .elé2n .el1éne .el1é2p .el1é2r .el1é2tet. .el1é2v .el1id .el1ig .el1i2h .el1ik .el1i2mit .el1in .el1ir .el1i2s .eli2t1o .el1itta. .el1itták .el1izz .el1í .ellege2 .elo2 .el1okk .el1oko .el1or .el1ó2 .elö2 .el1ök .el1öle .el1ölé .el1ölh .el1öli .el1ölj. .el1ölje .el1öljé .el1öljü .el1ölne .el1ölné. .el1ölném .el1ölni .el1ölő .el1ölt. .el1ölte .el1ölté .el1öltn .el1öltü .el1ölün .el1ölv .el1öv .előé2 .el1s2 .el1t2 .el1u .elü2 .el1ül. .el1ülh .el1üli .el1ülj .el1üln .el1ülte .el1ülv .el2v1el .el2v1ég. .es1er .ese2tel .es2t1a .es2t1á .es2t1é2ke. .es2t1é2kek .et2h .etilén1g2 .evés1s .ex1el .ez1á .ez1e2l .é2 .édes3s .ég1a2 .ég1eg .ég1e2rei .ége2s .ég1esz .ég1ér. .ég1é2ré .ég1érn .égés3s .égé2sz .ég1észb .ég1észe .ég1észé .ég1észn .ég1észr .ég1ö2 .ég1u2 .éh1év .éj1a2 .éj1á2 .éj1el .éj1u .ék1a2 .ék1á .ékes1s .ék1ir .ék1o .él1a2 .él2c1i .éli2k .él1ike .él2v1á2 .ép1es .ép2pa .ép2p1el .ép2pé .ép2po .ér1a2n .ér2c1e2l .ér2c1é2j .ér2cék .ér2c3sí .ér1e2l .ér1e2s .éré2sz .ér1észé .ér1é2t .érü2 .ér1ül .ér2vad .ér2val .ér2v1ég. .ész1a2l .ész1á .észe2 .ész1el .ész1em .ész1es .ész1é2k .észigaz1 .ész1o .ész1ő2 .ész2t1örv .észü2 .ész1ülő .év1á2g .év1essz .év1é2g .év1é2k .f2 .fa2it. .fa2leg .fa2n1év .fa2r1ont .fas2 .fa1st .fat2 .fa1tr .fe2leme .fe2l1essz .fe2lev .fé2k1e2l .fé2m1a2 .fé2m1á2 .fil2méré .fin2ge .fogó2s3zá .fol2t1a2 .fö2lő .fö2lül. .fölül1e2 .g2 .ga2zan .gát1al .gá2te .gá2z1ó2 .gázs2 .gá2zsu .gáz1z .gene2a .ge2od .ge2os .gesz2t1í .gé2d1 .gé2na .gé2ná .gén3n .gé2pe2lem .gé2p1i2p .giga1s .gonor1 .gonorr2 .gó2ce .gó2la .gó2lá .gó2lel .gó2l1e2s .góli2g .gó2l1iga .gó2lis .gő2z1á2 .gő2zen .gő2z1ő .gő2zs .gu2i .h2 .ha2b1e2 .ha2b1ol .ha2bor .ha2b1ő .ha2b1u .ha2dal .ha2d1e2 .ha2dz .ha2ik .ha2j1e2 .ha2jom .ha2lác .halá2l1ó2 .ha2lárv .ha2leg .ha2l1el .ha2lep .ha2let .ha2l1e2v .ha2lis .han2gad .han2g1e .ha2sor .has3sz .ha2tag .ha2t1at .ha2t1e2 .ha2told .há2m1a .há2ny1in .háro2m1e .há2t1alj .há2tus .há2zol .há2zó .he2i .hé2t1ez .hé2t1o .hit1a .hi2tis .hodás1 .hol1l .hol2t1e .ho2ne .hő2sá .i2 .ike2r1i .ikerü2 .ike2r1ülé .ikon1s .ima1s .im1p2la .in1aktí .in2gin .inte2r1a .io2n1a2 .io2n1á .io2ne .ion3n .ipa2re .izo2m1ért .í2 .íjá2t .íj1áto .ín1e .írá2s1ág .írá2s3z .ív1a2 .ív1á2r .ív1ell .íz1a .íz1in .j2 .jaké2 .ja2kér .ja2kov .járműká2 .já2szá .já2szó .je2gy1a2 .je2gy1á2 .je2l1a .je2leg .je2lev .job2b1ol .jó2dal .jó2s1e2 .jó2t1á .k2 .kale2i .ka2nar .ka2n1e .kapolc1 .ka2rala .ka2ras .ka2r1á2s .kar2c3se .kare2 .ka2rem .ka2rék .ka2ring .ka2rí .ka2ró2ra .ka2r1ó2rák .ka2r1ü .ka1th .ka1tz .kár1a2d .kás2 .kása3l .ke2csó .ke2l1á2 .ke2l1e2g .ke2l1e2ve .kel1ö .ker2ta .ké2nét .ké2p1és .kéta2 .ké2tab .ké2tad .ké2t1ag .ké2taka .ké2tal .ké2tan .ké2tap .ké2tas .ké2tat .ké2tau .ké2t1á2 .ké2t1ele .ké2t1ez .ké2t1o2 .kéze2 .ké2z1el .ké2zem .ké2zs .kéz1z .kiá2 .ki1g2 .ki1krá .kió2 .ki2ság .kiű2 .kla2uz .kle2i .kló2re .ko2rác .ko2rí .ko2sis .kó2d1a2 .kó2r1e .kó2r1é2s .kö2b1öl .kö2d1ő .kö2zis .kö2z1ő .köz1z .kr2 .kun1a .kvar3k. .l2 .lak1a2d .la2kal .la2k1an .la2kép .la2kor .la2kő .lan2t1e .lan2t1ó2 .la2pal .la2p1ác .la2p1á2r .la2p1e2 .la2p1or .la2p1osz .la2pó .lá2b1e2 .lá2bil .lá2bor .lán2c3s .lá2nyan .lá2ny1e2 .lá2p1e .lá2p1il .lá2z1ó2 .lá2z3s .le3dé .le2g1 .le3g2ali .le3g2elés .le3g2esle2g1 .le3g2esle3g2esle2g1 .lege2t .le4géne .leg3g .le3gy .lei2d .leí2ro .leí2ród .leí2ru .le1kl .le1k2r .lemez1z .le1p2ré .le1s2m .le1t2r .leü2 .lé2c3s .lé2g1a2 .lé2g1á .lége2 .lé2g1el .lé2gér .lé2go .lé2gy1á2 .lé2p1a2 .lépü2 .lép1ülé .lé2t1a2 .lé2t1á2 .lét1elek .lé2t1e2lé .lé2t1érd .lé2tör .lisz2ta .lisz2t1á2 .lisz2ter .lito1s .lob1e .lobi2 .lo2bin .lo2mag .lo2mal .lo2m1á .lom2b1e2 .lo2me .lo2m1é2t .lon2csi .lófo2g1a2d .lő2cs1ö2v .lőrés3s .ly1o .m2 .ma2e .ma2gal .ma2gar .ma2gál .ma2g1e2 .mag1g .magó2 .ma2gór .ma2in. .ma2r1ác .ma2r1ing .masz2k1or .masz2k1ö .ma1th .ma2uz .má2r1is .me2g1e2 .me2g1é2 .meg1if .mego2 .me2g1ő2 .me2i .mel2lá .me2ny1u2 .me2zá .médi2af .mé2ná .mé2no .mé2sza .mé2szet .mé2szi .mé2szo .mé2zis .mi3rá .mo2lyan .műi2 .mű1kr .mű1s .n2 .na2gya .na2gyá .na2gye .na2gyú .na2pap .na2p1ar .na2pál .na2p1e .na2pés .na2p1o2r .na2pö .ne2ma .ne2meg .ne2m1el .ne2min .ne2ol .ne2szá .net2t1a2 .ne2um .né2gyá .né2pa .né2v1ál .né2vel .no2r1 .nya2k1á2ro .nya2k1e2 .nya2k1ö2 .nyol2c1an .o2 .oda1 .ok1a2d .ok1a2l .okka2 .ola2j1e2 .ola2sz1ó2 .olda2l1út .or2r1aj .or2r1alt .or2ran .or2r1e2 .orré2 .or2r1és .or2v1a2 .or2vá .or2v1é .orvi2 .or2vis .ot1tr .ó2 .ólo2m1a .óme3g2 .ón1a2 .ón1á2 .ón1e2 .ón1év .óvá2s1árt .ö2 .ön1d2 .ön1e2 .öni2 .ön1í .ön1k2 .ön3n .ön1o .ön1ő .ön1s .ön1ü .össz1a .össz1á .öte2 .öt1eg .öt1el .öt1t2 .öv1e2g .öv1e2l .öv1ő2 .ő2 .őa3l .ői3r .őr1ab .őr1an .őr1e2g .őr1é2g .őr1é2s .őr1ist .őr1o .őr2s1ág .őr1u2 .őr1üg .ős1a2 .ős1á2 .ős1eg .ős1e2l .ős1e2r .ős1e2s .ős1é2g .ős1ért .ős1í2 .ős1o .ős1ó2 .ős1p .ős1tr .ős1u2 .ős1ú .ősz1a2 .ősz1á .ősz1e2g .ősz1el .ősz1em .ős3zene .ős3zené .őz1a2 .őz1eg .őz1e2l .őze2t .őz1ete .őz1ék .őz1ére .őz1ő .őz3s .őz1u .p2 .pa2da .pa2d1á2 .pa2din .pa2d1ó2 .pa2i .pa2par .pa2pál .pa2pe .para1f2r .parke2 .par2ker .par2ta .par2tel .par2ter .pá2c3s .pán2ta .pár2t1ö .pen3ny .pe2r1a2 .pe2r1á .pe2r1enc .pe2rok .pe2rül .pe2s .pia2c3s .pina1 .pin2t1ó .ple2i .ponta2 .pon2te .po2rad .po2ral .po2ran .po2rác .po2rál .po2re .po2r1us .pó2kis .pó2k1ö .pó2rás .pó2t1e .pó2t1é .pre1k2 .prés3s .proto1p2 .q2 .r2 .ra2b1as .ra2b1á .ra2be .rabic1 .ra2b1il .ra2b1i2z .ra2bí .ra2bor .ra2bö .ra2b1ő2 .ra2bú .ra2gal .ra2j1ö2 .rajtó2 .raj2t1ór .rá2cs1á2z .rá1dr .rá1fr .rá1gr .rái2 .rán2c1e .rány2 .rá1spr .rá1s2t .rát2 .rá1tk .rá1tr .re1k2re .ren2d1a2 .ren2d1ő2 .re1p2ri .rep2ro .re1prod .rete2k1 .ré2m1emb .ré2mu .ré3p2a .ré2sa .rés3szer .ré2sza .ré2szá2 .ré2sz1e2le .ré2szell .ré2szer .ré2szí .ré2szo .ré2sző .ré2t1a2 .ré2t1á2 .ré2v1á .ré2zá .ré2zel .ré2zet .ré2zis .ré2z1o .réz1z .ri2zso .rizs3z .rí2má .ro1c2kos .romé2 .ro2m1ét .ro2min .ro2mis .ros2t1e2 .rug1g .ru2m1a .ru2mil .rú2de .s2 .sa2h1a .saj2te .sa2s1or .sa2vad .sa2v1ara .sa2v1ál .sa2vári .sa2v1e2 .sa2v1é2 .sá2r1ó .sá2rú .sás1s .sá2s3z .sá2v1a .sá2vá .sá2vó .sc2 .se2bal .se2b1á .se2bel .se2besz .se2b1o .sé2fi .s3gr .si2em .si2ók .sín3n .sí2p1ő2 .sí2r1a2 .sí2rát .sk2 .so2kél .so2kil .so2kis .so2kol .so2m1ag .so2mat .so1ny2 .so2ral .so2rál .sör1e2g .sp2 .spor2t1á2 .st2 .star2t1a2 .sz2 .szaba2d1e .sza2k1at .sza2k1ás .sza2k1e .sza2kö .sza2k1ü .szá2l1ó2 .száz1z .szeg1ér. .sze2gí .sze2i .sze2m1á .sze2m1ér. .sze2m1é2ri .sze2r1ág .szer2v1a2d .szer2v1e2v .sze2szá .sze2szeg .sze2sz1ó2 .szé2fa .szén1n .szé2t1 .széte2 .szín3n .szk2 .szo2l1ó .szókész1 .szó2szak .szószö2 .szó2sz1öv .szt2 .t2 .ta2gal .ta2g1a2r .ta2g1á .ta2g1e .ta2gép .tag1g .ta2g1i2n .ta2gö .ta2nag .ta2n1as .ta2nál .tan1d2 .ta2n1e2 .ta2n1év .tané2ve .ta2nis .tan1n .ta2n1ó2 .tant2 .ta2n1u2s .ta3rá .ta2t1ál .ta2t1árai .ta2t1e2 .ta2t1í .ta2tor .ta2tur .tá2l1ó2 .tán2cse .tá2p1ol .tár2sor .tár2s1ö2 .tár2t1es .tár2t1ölt .tá2v1a .távi2 .tá2v1ir .tbc1 .te2aka .te2ar .te2j1á2 .te2j1eg .terape2 .ter2v1a2 .ter2v1á2 .tes2ték .tes2t1öl .tetraé2 .teza2 .té3k .té2nyem .té2nyí .té2ra .té2rá .té2ret .tér1int .tí2z1ó2 .tí2zs .tízü2 .to2káro .tol2le .topa3u2 .to2r1á2l .to2r1odv .tor2z3se .tó1st .tó2t1ér. .tön2k1a .tőa2 .tőe2 .tő2gya .tő2r1éss .tő2r1é2sz .tra2u .turnus1s .tus3s .tu2sz .tus3zá .tú2r1att .tű2z1ért .tű2z1ő2r .tű2zse .tyú2ka .u2 .ugrás1s .un1in .uni2o .utas1s .utás4 .uto2 .utó2d1ö .ú2 .új1as .új1e .úr1a2 .úr1á2 .úr1e .úszós2 .úszó1sp .út1a2 .út1á2 .út1e2 .út1ol .út1ő .út1ü2 .ü2 .ügy1ér. .ük1a2 .üstö2l .üs2t1ölő .ütőkész1 .üve2g1e2l .ű2 .űr1a2 .űr1á2 .űr1e2 .űr1é2s .űr1éte .űri2 .űr1ita .űr1öss .űr1s .űrt2 .v2 .va2d1al .va2dár .va2dét .va2d1o2r .va2dóv .va2d1ö .va2d3z .va2gy1i .va2j1e .va2k1ak .va2kal .va2k1an .va2kap .va2k1ár .va2k1e2 .va2k1ö .va2rak .va2r1á2s .va2r1e2 .va2r1ing .va2sab .va2sar .va2s1a2tom .va2s1á2g .va2sárk .va2sás .va2s1e .va2sék .va2s1i2r .va2sol .va2s1or .va2só .vas3s .vas1tr .va2s1ü .va2s3z .vács1 .vá2dá .vá2d1e .vá2ma .vár1a2dá .vá2r1i2s .vá2r1ol .verés1s .ver2s1ég .ver2s1o .ver2sz .vé2g1é2k .vé2g1o .vé2nyel .vé2r1a2 .vé2rá .vé2r1eb .vé2r1eg .vé2rik .vé2r1o .vé2ró .vér2t1ék .vé2ru .vé2sza .vé2szá .vé2szer .vé2szí .vé2szo .vé2sz1ó2 .vi1g2n .ví2zed .ví2zem .vona2t1út .von2z1e2 .w2 .x2 .y2 .z2 .za2be .za2b1i2n .zai2 .za2j1e2 .za2j1ö .za2jut .zá2r1a2dá .zá2r1e .zá2r1ó2ra .zárta2n .zár2t1any .zár2t1é .zár2t1ö2v .ze2i .zé2t1 .zs2 .zű2r1ő 2a. a1a aa2be aa2cé aa2ch aa2da aadás1s aa2dássz aa2dó aa2du aa2fo aa2ga aa2gi aa2gó aa2gy aa2já aa2ka aa2ká aa2ko aa2ku a2al. aa2la aala2g1 aa2lá aal1eg aa2lé aalmana2 aalmanac3 aa2lo aal1os aa2lu aa2ma aa2na aa2ne aa2ni aa2no a2ans aa2ny aa2pa aa2pá aa2po aa2pu aa2ra aa2rá aa2ré aa2ri a2arl aa2ro aa2sz aa2to aa2ty aa2ur aa2ut aa2va a2avo aa2zo a1á aá2bé aá2cs aá2fá aá2ga aá2gá aá2gé aá2gi aá2go aá2gu aá2gy aá2hí aá2ju a2ál. aá2la aá2lo aá2po aá2ra aá2rá aá2r1e2 aá2ré aá2ri aá2ro aá2ru aá2rú aá2sa aá2sá aá2so aá2só aá2ta aá2t1á2 aá2t1e2 aá2té aá2t1i2 aá2tí aá2to aá2t1ö aá2tu aá2tú aá2tü aá2zá aá2zó 2abab ab1adó aba2dz 1a2bajg ab1akk 2abal 2aban aba2nal aba1pr 2abar aba2rat a2b1a2ráb a2b1au 2abáb abá2b1u2r 2abád 2abán a2b1áp abá2rak ab1á2ron ab1á2rú 2abáz abb2a 1abbah 2abea abeá2 a2b1e2b 2abec ab1edé 2abeé 2abef 2abeh 2abei 2abej ab1ejt ab1ela ab1e2lá 2abele abe2lem 2abels ab1elsz a2b1elt ab1elv 2abem ab1emb a2b1erd 2abetá 2abete 2abeté 2abeto 2abetö 2abev a2b1ex 2abék 2abél 2abén a2b1é2ne a2b1ép 2abér a2b1érz 2abétá a2b1éve ab1fl ab1fr 2abic ab1i2do 2abie ab1i2ke ab1iks a2b1i2nai abi2náb a2b1ing 2abir ab1irkái ab1ism 2abit a2b1i2ta 2abiz a2b1íj ab1írn ab1kr 1ablaká 1ablakh 1ablakk 1ablakos 1ablakr 2ablo a1b2lú 2abog 2aboh 2abok 2abolt ab1oltó 2abom abo2rak abo2r1as abo2rin 2abot a2b1öb abö2l ab1ölő ab1ölt a2b1ös a2b1öt a2b1ö2z ab1őrl ab1pr ab2rek 2abri a1b2rike ab2rin a1b2rit 2abró ab2rók ab1st a2b1urd ab1úr. ab1úrt abú2s1á ab1úsz ab1ü2l ab1üs ab1üv a2b1üz aca2la aca2lá aca2l1e2 aca2lét a2c1a2n aca2tá a2c1ág a2c1ál acci2ó ac2cö ac3cse ac3csí ac3csü acc3sz a2ce. ac1ebé a2c1eg ace2l a2c1ele a2c1elé a2c1elh ac1elle a2c1elm a2c1elo a2c1elv ac1emb 2acen ace2ta a2c1e2v a2c1ex a2célá acél1e2 a2célé a2c1ép a2c1é2re a2c1érte ac1fr a2chá ac3héj ac3hí a2c3hoz ac3hó a2c3hö a2c3hú ac1ide a2c1i2gá a2c1i2gé a2c1ike 2acin. a2c1ind ac1inf a2c1ist a2c1ír ac1ív ack1aro ac2kál ac2k1e2v acké2r ac2k1ére ack1éte ac2kil ac2k1osz ac2kös ac2kű ac2lu a2c1op ac1ös ac1őr ac1pl ac1pr 2acsal acs1alj. acsa2p1á2g a2cs1atk acs1áll a2csáru acse2c acs1egy ac3seml 1a2cséb a2cs1ék 2acsi 2acsí 2acson acs1orm a2cs1öc acs1s ac3str a2csúl a2cs1úr acsü2l a2csüt ac3szá ac3sze ac3szö ac1tr a2c1ud 2acula a2c1ut ac1új ac1üg ac1ür ac1üz ac3za ac3zá ac3ze ac3zs ac3zu a2d1a2da a2d1a2dá 1a2dag. ada2gá 1a2dagb a2dagg 1a2dagh 1adagi 1a2dagj 1a2dagn 1a2dago 1a2dagr 1a2dagt 1adagu 1a2dagú a2d1aktá ada2lap ada2l1es 1adalé ada2lén ada2l1osz ada2l1ó2 ada2l1út a2d1ana a2d1ann 1adapt 2adar ada2ral ada2re ada2r1és ada2r1in ada2rut ada2tab ada2tal ada2t1a2n ada2t1ár. ada2t1á2rak ada2t1á2ram ada2t1á2rat ada2t1á2rá ada2t1árb ada2t1árr ada2t1á2ru 1a2datáu ada2t1e2g ada2tel ada2t1es adaté2r ada2t1érd ada2t1érő 1a2datin ada2tint ada2tis ada2tív a2datm ada2t1old ada2t1öl ada2t1ő a2datv ad1azo a2d1ág adára2 adá2rak adá2ris ad2del ade2g ad1ege ad1egé ad1egy ade2i a2d1ej adel1ej ad1elh ad1elm ad1eln a2d1e2lő ad1elr ad1elt a2d1emb ad1e2mé a2d1eml a2d1emu ad1eng ad1e2pe ad1epr a2derd ad1erő ade2ti a2deu a2d1e2v a2d1ex adé2kat adé2k1e2 adé2kés adé2kis adé2kü adé2kű ad1éle 2adémont a2d1ép a2d1érz adé2s adé2te a2d1é2ve ad1fl adfo2k1út ad1gr 1adhé 2adia adia2n ad1i2bo 2adid adi2kut 2adin ad1i2na. ad1i2nai ad1ind a2d1ing adi2o1g2ra 2adip 2adis 2adiv a2d1í2z ad2ji adka2na ad1kr 2adob 2adoc a2d1okke 2adol ad1ola 1a2domá 2adomb 2adomi 1a2dop a2d1orc a2d1org 2adorh 2adorian 2adorig ad1orv a2d1orz a2d1osz a2dógu 1a2dóku a2dómé a2dórá 1a2dósat 2adósi. ad1ó2vás 1a2dózó a2d1ö2k a2d1ö2l ad1örd a2d1ös adőr1a adő2rel ad1ő2s ad1pl ad1pr a1d2rac ad2ram ad2raz 2adrá ad2rám 2adro ad2rog a1d2rót ad2ruk ad1sp ad1st 2adug 2adum 2adup ad1u2rá ad1úsz adú2t a2d1úto a2d1üg ad1ü2lé a2d1üt ad1üz a2d1űr ad1űz ad1yéh ad1yér ad3zab ad3zav ad3zár ad3zel ad3zón a2d3zö ad3zsí a1e ae2bé ae2ce ae2cs ae2dé ae2dz ae2ge ae2gé ae2gy ae2he ae2ke ae2ké ae2la ae2l1á2 ae2le ael1ej ae3len ael1érh ae2l1í2 ae2lo ae2l1ö2 ae2lő ae2lu ae2me ae2mé ae2mi ae2mu ae2ne ae2pe ae2pé ae2pi ae2po ae2red ae2ré aero1s ae2ró ae2rő ae2se aes1er ae2sé ae2si ae2ső ae2sü ae2sz ae2ta ae2tá ae2te ae2ti ae2tű ae2va ae2ve ae2vé ae2vi ae2vo ae2vő ae2xe ae2zü a1é aé2derv aé2ge aé2gé aé2gő aé2he aé2je aé2ke aé2kí aé2le aé2lé aé2li aé2lő aé2lü aé2lű aé2ne aé2pí aé2pü aérde2m1 aé2ri aé2te aé2va aé2ve aé2vé aé2vi aé2vü 2afa. 2afaj. 2afaja 2afajá 2afajb 2afa2j1e2 2afajj 2afajn 2afajo 2afajt. 2afaju 2afajz 2afak 2afal 2afam 2afao 2afar 2afas afe2l1e2m 2afék 2aféli 2afélő 2afélt 2afén 2afér 2afés 1affé afi2ap afi2asz afi2ke afi2t1a2 afi2t1e2 af2le a1f2lo a1f2ló a1f2lö a1f2lu 2afoc 2afog 2afok 2afol 2afon 2aford 2aforg 2aformác 2aformál 2aformátu 2aformáz 2aformu 2aforr 2afos 2afot af2rak 2a1f2re af2riz af2rí 2afro af2ron 2a1f2rö af3tá afus3s a2g1abl ag1abr ag1a2cé ag1aga a2g1a2ka a2g1akk a2g1akt 2agal a2g1a2lak a2g1a2lap a2g1a2lá a2g1alj a2g1alm aga2lom a2g1alt ag1ang ag1a2no ag1ant a2gany a2gap ag1apa ag1apá a2g1arc a2g1aré a2g1a2ro a2g1art aga2tom ag1a2tó a2g1a2ur ag1aut a2g1ava 2agaz ag1a2zon agá2c a2g1ács. a2g1ácsi ag1á2ga 1a2gák a3gála a2g1álm agá2lyan a2g1áp a2gár. a2g1árad a2g1á2rai a2g1á2rak a2g1áras a2g1árat a2gá2rá a2gárb a2g1árc a2gáre a2gáré agá2rév a2gárf a2gárh a2gá2ri a2gárj a2gárk a2gárm a2gárn ag1árná a2gáro a2gárr a2gárs a2gárt a2g1á2ru a2g1á2rú ag1ásv a2g1átá a2g1á2t1e2 ag1átfe a2g1áth a2g1átk a2g1átm agá2tol a2g1áts ag1átü a2g1átv ag1bl ag2del agdí2j1a2da a2ge. ag1e2cs a2g1e2d a2g1e2g age2l a2g1ela ag1elb ag1eld ag1ele ag1elé ag1elf ag1elh ag1eli ag1elm ag1eln a2g1elo a2g1elő ag1elr ag1els ag1elt ag1elű ag1elv ag1elz a2g1e2m ag1eng a2g1eny a2g1e2p a2g1erd age2red a2g1erk a2g1erő age2s a2g1e2v a2g1ex a2g1ez a2g1é2j a2g1ék. a2g1ékn a2g1é2l agé2né agé2p1i2p a2g1é2pül a2g1ér. a2g1é2re a2g1é2ré a2g1érh a2g1é2ri a2g1érk ag1érl ag1érm ag1érte ag1érté ag1érth a2g1értő ag1ész a2g1éte a2g1éve ag1fl ag1fr 1agg. ag2g1a2ty ag2g1em ag2git 1aggl 1aggod 1aggok ag3gyar ag3gye ag3gyi ag3gyo ag3gyü agi3a ag1ide a2g1i2ga a2g1ige a2g1igé ag1ike a2gill ag1inf a2g1ing a2g1int a2g1i2oni agi2ó a2g1ip ag1iro a2g1ist agi2sz a2gita ag1izé ag1izm a2g1íj ag1ín a2g1ír ag1ív a2g1íz agká2rok ag1kl ag1kr ag2ne. a1g2non a2g1ob ag1oltó ago2ly1a2 2agom 2agona agon3n ago2n1osz a2g1op a2g1org ag1orj a2g1orn a2g1orr a2g1ors a2g1orv a2g1otth agó2rái a2g1ö2l ag1önk ag1önt a2g1örö ag1örv a2g1ös a2g1öt a2g1ö2v a2g1ö2z a2g1őr a2g1ő2s ag1pl ag1pr 2agrammj a1g2rav 2agrá a1g2róf ag1sk ag1sp ag1sr ag1st agsz2 ag1szt ag1tr a2g1und a2guram agu2rat ag1u2rá ag1urn ag1u2tá a2g1új ag1úta a2g1úti ag1útt a2g1ü2l a2g1ür a2g1üs a2g1üt a2g1üv a2g1üz ag1űr ag1űz a2gy1a2c a2gyad agy1a2dó agy1a2gya a2gyaj 1a2gyak. a2gyakb agya2la agy1alap agy1alg a2gyalj agy1alko agy1alm 1a2gyam agy1ana a2gy1any a2gy1apa agy1apja agy1apjá a2gy1a2pó a2gy1apr agya2sz a2gy1aszó a2gyál agy1árv a2gy1e2c agy1e2g a2gy1el agy1em agy1est agy1esz a2gyev a2gy1ez agy1ék. agy1éke agy1ékk agy1ér. a2gy1é2re agy1érn agy1érr agy1érs a2gyima agy2nyá agyo2r a2gy1oro a2gyorr a2gy1ö2l a2gy1ő2r agyu2r agy1urá 1a2gyú. 1a2gyúa a2gyún agy1úr. agy1ú2sz a2gyút 2agyű aha2l1e aha2sábr ahelyü2kü ahert2 aher1tze ahé2j1út ah1ips ahitköz1 ah1o2vi ahú2sár ahús3s a1i ai2bo 2ai2de ai2dom 2ai2dő a2iék ai2ga ai2gá ai2ge ai2gé ai2gy ai2ia ai2ib ai2ih ai2ij ai2in ai2ir ai2it ai2je aika2 ai2kab ai2k1ad ai2k1al ai2k1ar ai2k1as ai2k1á ai2ke2 aik1el aiki2 ai2kik ai2kis ai2k1ol ai2k1osz ai2kő ai2kü a2ilb a2ile 2aill ail2le. ail2lo ai2ma. 2ai2má 2aimi ai2mit 2aimp ai2na. ai2na2l ain1ala 2ai2nas ainá2 ai2n1álo ai2nár 2aind ai2ne ai2nél 2ainf 2aing ai2n1in ai2nol 2ainp 2ains 2aint ai2nü ai2onb ai2onn ai2ono ai2onr ai2ont ai2pa a2ir. ai2ram 2ai2rat 2ai2rá ai2re. ai2ré ai2ri 2airo ai2rod a2i2se ai2si 2aisk 2aism 2aist 2aisz ai2sza ai2szo 2ai2ta ai2vad ai2var ai2vás 2ai2vó ai2zé ai2zom a1í aí2gé aí2ja aí2já aí2ju aí2ra aí2rá aí2ro aí2ró aí2ru aí2té aí2vá aí2ve aí2vé aí2vi aí2vó aí2vü aí2vű aí2ze aí2zé aí2zü aí2zű a2j1a2dó a2j1adu aj1aga aj1agr aja2kol a2j1akó aja2kú a2j1ana a2j1ant a2j1any aj1apr a2j1áa ajá2c aj1á2go 1a2jánd 1ajánl a2j1áp 2ajár a2j1árb a2j1árc a2j1áre a2j1áré a2j1árr aj1ásá aj1ásv a2j1á2t1e2 ajá2z aj1ázá aj1bl aj1br aj2d1alm aj2d1a2lom. aj2d1a2lomm aj2d1a2lomn aj2d1a2lomr aj2d1a2lomt a2j1e2c a2j1ef a2j1egé a2j1ela aje2leme a2j1elf aj1ellá a2j1elo aj1elő aj1elvá aj1elvo a2j1e2m aj1ene aj1enz a2j1e2r aj1e2se a2j1ex a2j1ez a2j1ége a2j1égé aj1égő a2j1é2k a2j1él a2j1ép ajé2r a2j1ére a2j1éte aj1fl aj1fr aj1g2r a2j1i2d a2j1ij a2j1ik a2j1im a2j1int a2j1io a2j1ip a2j1iz aj1ír aj1íz aj1kl 1ajkú. ajobb1o ajo2g1á2sza a2j1ola aj1old a2j1o2v a2j1ócskás ajó2sár aj1öb a2j1ök a2j1ör a2j1öz aj1őr aj1ő2s aj1pl aj1pr aj1sh aj1sk aj1sp aj2tág aj2teg aj2t1é2t ajt1org aju2hi a2j1új aj1úsz a2j1úto a2j1útr aj1üg aj1ül aj1üs aj1üz aj1űz ajz1aka ajz1atl aj2zer aj2zí aj2zü 2akab aka2cse a2kadag a2k1a2data a2k1a2datb a2k1a2datn a2k1a2dato a2k1a2datr a2k1a2datt 1akadál 1a2kadém a2k1adm a2k1aga 2akal ak1a2lag a2k1a2lak aka2lapú a2k1aleg ak1alko 2akam 2akan 2akao 2akap aka2pád ak1app ak1a2rai ak1arasz a2k1a2ráb a2k1a2rák 2akarc a2karch 2akard ak1a2rén 2akari 2akarr 2akasí 2akast aka2szaj ak1a2szat aka2szel aka2szö a2k1asztr 2akata aka2tab 2akate aka2tel aka2ter akati2 aka2tik aka2tim aka2tin 2akau a2k1autó 2akav 2akaz 1akác. a2k1áf a2k1ág aká2l1a aká2lis a2k1álló ak1árad a2k1árb a2k1árj a2kárk aká2rokn a2k1ártó a2k1á2ru aká2sad aká2saj aká2sal aká2sar aká2sav aká2sást akás3s ak1á2szán aká2szu a2k1ászun akát1a a2k1átla ak1bl akció2s1ű2 a2ke. ake2cs a2k1e2dz ak1e2ge ak1e2gé a2k1ela a2k1elá ake2lem ak1elh a2k1elj a2k1elo ake2lők a2k1elr a2k1elv a2k1emb ak1e2mel a2kerd ak1e2rei a2k1e2ró a2k1e2rő a2kesp a2k1est ak1eszk ak1eszm a2k1e2te ak1e2ti a2k1e2vez ak1é2kem ak1é2kes a2k1é2ké a2k1ékh ak1ékrő 2akém 2akény 2akép. 2aképb 2aképe 2aképé 2aképh 2aképk 2aképl 2aképn 2aképpel 2aképpé 2aképr 2aképt 2aképü 2aképz a2k1érc 2akérd a2kérdek 2akére 2akéré a2k1érm 2akérő a2k1é2rői a2k1é2rőj a2k1érr a2kérteke a2k1értel a2k1értet a2k1értő 2akérv a2k1érz 2akés a2k1észa a2k1é2te 2akéts a2k1étt 2akéz ak1fl ak1fr akgerinc1 ak1gr 2akia 2akib 2akic 2akid a2k1i2dé ak1idi 2akie2 2akié 2akif ak1iga a2k1igé 2akigy 2akih 2akií 2akij 2akil a2k1ill ak1ily 2akim a2k1i2má a2k1imi 2akin ak1ind a2k1ing a2k1ins a2k1ion 2akir aki2rom 2akis a2k1isi a2k1isk ak1ism a2k1ist 2akit 2akiv 2akiz a2k1izm a2kíté a2k1í2z ak2k1a2d ak2kaj ak2k1a2la akk1alk ak2k1arc ak2kál ak2k1á2p ak2k1ed akk1ell ak2kelm akk1elt ak2kem ak2k1eró akke2s akk1ese ak2ket ak2kola 1akkord akk1ölt ak2k1ös ak2kőr 1akku. 1akkum ak2lau ak2lav ak2lor ak2lón ak2lór 1aknai 1aknáb 1aknáh 1aknái 1aknáka 1aknáko 1aknás 1aknát. 1aknáv 1aknáz 2akoa ak1obj 2akoc 2akof 2akokt akolás3s a2k1olda a2k1o2ly 2akom 2akonc 2akond 2akonf 2akong 2akonk 2akons 2akont 2akonv 2akony 2akonz 2akoo 2akop a2k1o2pe ak1o2rat 2akorb 2akord a2k1org 2akori a2k1orj 2akorl 2akorm 2akoro 2akorp 2akorr 2akors 2akort 2akoru 2akorú a2k1orv 2akos 2akóni 2akó1p2 a2k1ó2rá ak1ó2ród 1a2kózá ak1össz akö2z1é2l aközrea3 ak1őr. ak1ős. ak1pl ak1pr ak1ps akrádi2 ak2rát 2akre ak2rea 2akré a1k2réme ak2réta ak2rétá 2akri a1k2rit 2akrí ak2ríz 1akrob 2akrónik ak1sp ak1sz2t ak2t1au aktár2s1a2d akt1emb 1akti. ak2tim 1aktívb aktí2ve ak2t1íve. 1aktívk 1aktívo 1aktívs 1aktívt akto2r1ál akt1osz ak1trá 1aktua 1aktú. a2k1udv a2k1ujj 2akun 1akupu a2k1úg a2k1új a2k1úrr a2k1üg a2k1ü2le a2k1ü2lé a2k1üln a2k1ü2t a2k1ü2v ak1ya a2l1abl alac1c alace2 alaci2 ala2cit ala2cor a2lacsé ala2c3sö ala2csü a2ladag a2l1a2datá ala2gál ala2g1e ala2gép ala2gol ala2gya ala2j1a2d ala2jas ala2j1e2 a2lakad ala2k1an a2l1a2kas ala2kál ala2k1áp ala2kes 1a2lakí a2l1akna. a2laknák a2laknát ala2kol a2l1a2kód ala2k1öl a2l1aktu 1alaku a2lakul. a2lakult al1alg a2l1alj a2l1alk al1all al1alm al1a2lo al1alt ala2n1e 1a2lanny a2lany ala2nyal ala2ny1e2 ala2p1a2d ala2pak ala2pal a2lapan ala2p1á2r ala2p1e2 ala2pill ala2pin ala2pir 1a2lapítv ala2p1ol ala2por ala2p1osz alap1ó2 alap1p al1a2ra al1a2rá al1arg ala1s2p a2l1aszp alaszta2l alat1any alatát1a2 ala2t1e2v ala2t1inf ala2tív ala2t1ol alató2 ala2tór a2l1attak 1a2latti ala2t1ü2 al1ava ala2zúr 1a2láa 1a2láá alába2d alá2b1ada al1ábrá 1a2lábúj alá2dal alá2d1ap 1a2láf a2l1ág. a2lága al1á2gá al1ágb a2l1ágg al1ágh al1á2gi al1ágk al1ágn al1á2go a2l1ágr al1ágt al1á2gú al1ágya 1a2láí 1a2lámo a2l1árad a2lárak a2lárá alá2rár a2l1árk aláste2 alás2tel alás2t1ér. a2l1átd a2láte a2láté al1átép a2l1átf alá2ti a2l1átl a2l1átm a2látö a2látr a2látú al1bl al1br 1album al1d2r a2le. 2alea 2aleb al1ebé 2alec al1ece ale2g1e2lé al1egés alegész1 al1egys a2legyü 2aleh 2aleí2 2alej ale2k1a a2l1ela a2l1elág a2l1eld al1e2led ale2lem. ale2lemb ale2leme ale2lemk ale2lemm ale2lemt a2l1elg a2l1elh al1elm a2l1eln ale2lők ale2lőt a2l1elr a2l1els al1elté a2l1elv 2alem a2l1emb a2l1e2mel al1e2mé a2l1eml 2alen a2l1ene 2alep ale2pe. a2lerd a2l1e2re a2l1erk a2l1ern 2ales al1esem a2lesi ale2sik ale2tet alet2t1est aleü2 2alev ale2vol ale2vői 2alex a2l1exp 2aléc 2alég al1égő alé2kal alé2k1an alé2kat alé2k1em alé2ker alé2kes alé2kor a2lél. al1é2len a2l1é2let a2l1élé a2l1éll al1é2lő a2l1élü 2alén a2léneke a2l1érd al1érs a2l1érte a2l1érté a2l1értő a2l1érz 2alét alé2tek a2l1é2tel al1étl a2l1évi 1alfás 1algásat 1algor al1gr 2alic al1ide a2lidé al1i2do al1ifj a2l1igé 2alik al1ill 2alim a2l1i2má a2linas ali2nin alió2ra al1i2pa a2l1irá a2l1iro a2l1i2si a2lism ali1s2po al1iste 2alite al1izma al1íj a2l1í2v alja2iké 1aljaka 1aljakb 1aljaké 1aljakk 1aljako 1aljas 1aljái alj1árna al2j1á2ro 1aljb 1aljc 1aljd 1aljer 1aljf 1aljg 1aljh 1aljia al2jí 1aljj 1aljk 1aljl 1aljm 1aljn 1aljr 1aljs 1aljt 1aljú 1al2jü 1aljv 1aljz al2k1a2pó alkele2 1alkím 1alkoh 1alkotá 1alkotm 1alkotó al1kre al1kro 1alku. 1alkud 1alkun al2l1aj al2l1akt al2l1akv alla2l al2l1ala al2lalk al2lau all1áll all1ázs al2led all1egy all1emb 1allerg all1ese all1est all1e2vő all1é2jé al2l1id al2lim all1int al2lip al2l1isk al2lí all1óri al2lös al2l1ő2 al2lü 1allű 1almád 2alob al1obe alogos1s alo2g1ó2 a2l1okta al2old. aloma2 alo2mad alo2mak alo2m1al alo2m1an alo2map alo2mar alo2mas alo2mác alo2már alo2m1át alo2mer alo2min alo2mis alo2mit alom1p2 alo2m1ú alo2n1á alon1d2 alon3n 2alop al1opc a2l1ope al1o2ra al1orc al1orn al1o2ro a2l1orr alos3s a2l1ostá a2l1oszl 2alov aló2c3se 3alóguses alóigaz1 alói2ko al1ó2lo al1ónn alóó2 aló2ráj aló2rák aló2zan aló2zis a2l1öb a2l1ö2l a2l1ön a2l1ör a2l1ös a2l1ö2z alpe2l alp1ele al2piz al1sh al1sk al1sl al1sm al1sp alsz2 al1szt al2tada al2t1alap alt1anya alt1elv alt1emb al2t1e2p al2t1e2v al2t1é2k alté2n alt1éne alt1érne al2t1é2rő al2t1érr alt1értő al2t1i2m alti2n alt1ina alti2p alt1ipa al2t1ir al2t1old 1altonk al2t1osz al2tóc al2tön al1trak al1tran al1trav al2tur al2t1út al2tür 1altvé al1ty alu1p 1a2luss alu1str a2l1új al1úr. al1úrb al1úrh al1úri al1úrk al1úrn al1úrr a2l1úté a2l1úth a2l1útj a2l1útn a2l1útt al1üg al1ül al1ün al1ür al1üs al1üt al1üv a2l1üz al1űr al1űz 1alveo 1alvó a2ly1ap a2lyar a2lyál a2ly1e2 a2lyév a2ly1id a2lyim a2lyis a2lyö a2lyug a2ly1ü2 am1abb am1abl 2amad a2m1a2dat am1a2dás a2m1adm a2m1a2dó a2m1a2du 2amag ama2gát 2amaj am1ajt ama2kar a2m1akt a2m1akv a2m1a2lak am1a2lap a2m1a2l1e ama2nya amaó2 2amap 2amas ama2sz1a2k ama2szeg ama2sz1em ama2szél ama2szö ama2tad amata2n ama2tárá ama2tel ama2told ama2t1osz ama2t1ó2 a2m1a2u a2mazo a2m1álm a2m1á2rai a2m1á2rak amá2rá amát1a2dó. a2m1átk a2m1átl a2m1átt am2b1ag am2bal am2b1at am2b1ászá am2b1e2g am2b1e2le am2bep am2b1e2te am2b1ér. 1ambula am1dr a2me. am1e2ce 2ameg am1elá am1e2lem a2m1e2l1i am1elj am1elk a2m1eln a2m1elo a2m1e2lő a2m1els a2m1elt a2m1elv a2m1e2me a2m1eng 2amenn amens1s amen2t1á2ro a2m1erd a2m1e2rő a2mesk 2amest a2m1e2v a2m1ex am1ezr amé2hes amé2k am1éké amé2let a2m1ép a2m1érd a2m1értek a2mértel a2m1étk a2m1évé 1amforá am1fr am1gr amid1i2 ami2g a2m1iga a2m1igá a2m1igé a2mimá am1imi am1imp ami2na. ami2nan ami2nin a2m1inté amió2 a2m1irá a2m1iro amise2 ami2sel ami2sep ami2sz 1amitbo 1a2mitha 1a2mitm 1a2mitö 1amitro 1amitrú 1a2mits 1a2mittá 1a2mittö a2míg am1kl am1kr amme2g am2m1egy am2meta am2m1é2t 2amod a2m1oke a2m1okm a2m1o2koz am1ola a2m1old a2m1oltá a2m1op a2m1ors 1a2mort a2m1orv 2amos amos3s 2amot 2amoz am1ó2ri am1ö2r am1ös am1öt am1ö2z am1ő2r am1ős am1pla am1p2r 1amput am1sk am1sp am1sr am1st am1t2r 2amun a2muni amu2riz amu1sl a2m1u2tas a2m1új am1üg am1ü2l am1üt am1üz 2anad a2n1a2dat a2n1adu a2n1aga a2n1agá an1a2gya a2n1ah 2anai 1a2nakr ana2lap 1analí an1alk an1alm 1a2naló an1a2mo a2n1ana 1a2naná an1ann an1a2ny 2anap ana2pa2 an1apa. a2n1apá a2n1a2pó an1appo an1a2rab an1a2rá a2narc ana2sz1e2 ana2szén ana2szin ana2sz1í2 ana2szó ana2szü ana2t1e ana2tö 2anav a2n1a2va a2n1az a2n1ág a2n1álmi a2n1á2lom a2n1á2p a2násat 2anát a2n1áta a2n1átk a2n1átr an1br anca3u an2c1ál ance2 an2ce. an2c1ér. an2c3hit an2cho anci2al an2c1ó2 an2csaj an2csar ancs1ell ancs1emb an2cs1en ancs1e2p ancs1et an2cséré an2cs1ill an2csiz an2cs1í2z an2cs1or an2csö ancső2 ancs1t an2csut an2cs1ü an2d1alk anda1s and1atl and1e2le and1elk an2d1elő and1els an2derd an2d1es 1andez an2dél an2dil an2d1ö an2d1ő2 an2dús an2dün an2dű an1dy an2dzá a2n1eb an1edd an1e2gé 1a2nekd ane2la ane2l1á ane2l1e2l ane2l1emb ane2lél ane2lő 2anem an1emu an1e2re an1ern an1err 2aneu 2anev a2n1ex ane2z an1ez. a2n1eze an1ezé an1ezt an1ezz a2n1é2ké a2n1éle an1épí a2n1éri a2n1érv a2n1étk a2n1étt a2n1évc an1évem an1éves an1évet ané2véb ané2vén ané2vét ané2vév an1évha ané2vig an1évke an1évkö a2n1évü a2névz anfé2l1é2v an1fl an1f2r anga2d an2g1ada an2g1ado an2g1ala an2g1a2ra an2g1ass ang1azo an2g1ác an2g1áll angár1a2d ang1áta an2g1átj an2g1átt an2g1ed an2g1eg an2g1elf an2g1elh an2g1elj an2g1ell an2g1eln an2g1elő an2g1elt an2g1elv an2gem ang1emb ang1eng an2g1e2r ang1ese ang1éle ang1élv an2g1é2ne an2g1ér. ang1érő an2g1és an2gim an2giz an2gí an2g1osz an2g1óri an2g1öl an2g1ös an2g1ő2 ang1sz an2gü an2gű angye2 angy1el an2gyék an1ide ani2g a2n1iga a2n1igé a2n1i2ko an1ind a2n1inf an1i2on 2anip a2n1i2pa an1i2rá a2n1iro a2n1isi a2n1isk a2n1ism a2nita an1itt a2n1íg a2n1íj 2anív a2n1íz ank1abl an2kaj an2k1a2k ank1ale an2k1a2n ank1arc ank1ari an2k1atl an2k1au an2kaz an2k1ál an2k1e2g an2k1ek an2k1e2l an2k1e2m an2k1e2reit an2k1erj an2k1es ank1érde ank1érem an2kérte an2k1érté an2k1i2d an2k1i2p an1klu an2k1old ank1oszt an2k1ö2römb an2kös an2k1ö2v an2kőr ank1t2 an2k1ü an2ne. an3ny. an3nye an3nyo a2n1oj a2n1okta a2n1old 1a2nomá 2anor a2n1o2ro a2n1orr a2n1ors 2anos a2n1ott a2nódd a2nódo anó1g2 a2n1óni a2n1óno a2n1ó2rá an1óri a2n1öl a2n1ön a2n1ör a2n1ös a2n1ö2t an1pl an1pr an2s1e2l an1ska an2sö an1s2p ans3sze an1sta an2szal an2sz1á2bó an2sz1á2h an2szár ansz1es an2szél an2sz1én an2sz1é2p an2szil an2szin an2szó ansz1t2 ansz1ü2l an2t1abl ant1aga an2t1eg 1anten an2t1e2se ant1esz anti1llát an2t1ing an1t2re a2n1ud a2n1ug a2n1uj 2anuk a2n1u2r anu2szi a2n1u2t a2n1úg an1ü2g anü2l a2n1ülő an1ü2z an1űr an1űz any1a2dó anyag1ár. anyag1árr 1anyagb 1a2nyagé anyag1g 1anyagh 1anyagk 1anyagm 1anyagr 1anyagt 1anyagú a2nyakad a2ny1a2kas a2ny1alk a2ny1all a2ny1ass any1aszt a2ny1a2tom a2nyaz 1anyádt 1anyáék any1álo a2ny1árá a2ny1árb a2ny1árf any1árk a2ny1árn a2ny1á2ro a2ny1árr any1á2sz any1d 2anye a2ny1e2c a2ny1ed a2nyeg any1egé any1egy a2ny1e2k a2nyela anye2leme any1elev a2ny1ell a2ny1elo a2ny1em a2ny1en any1e2re. any1e2rei any1e2ret any1e2rén any1e2rér any1e2rét any1e2rév any1e2rőm any1e2rőr any1e2rőt a2ny1ég a2nyéhe a2ny1é2j a2ny1ék any1élv a2ny1ér. a2ny1érb a2ny1érc a2ny1érd a2ny1ére a2ny1érg a2ny1érh a2ny1é2ri a2ny1érk a2ny1érm a2ny1érn a2nyérő a2ny1érp a2ny1érr a2ny1érs a2ny1érte a2nyérté a2ny1értő a2ny1érv a2nyéve a2nyévé anyha2j1ón anyha2j1ó2r 2anyi anyigaz1 any1ing a2ny1io 2anyí 2anyo any1old a2ny1o2r any1órá any1ök any1ö2r any1öz a2ny1ő2 any1s anyt2 any1tr a2nyur 2anyú 2anyü any1ül a1o ao2áz ao2be ao2cs ao2da ao2dú ao2ka ao2ká ao2la aolaja2d aola2j1ada ao2mo ao2pá ao2pe ao2ra ao2ro ao2so ao2ut ao2ve ao2vi ao2xi a1ó aóá2r a2óbar a2óbá a2óbi a2óbo aó2ce aó2dá a2ódi a2ófá a2ófe a2ófo a2ófő a2ófü a2óhé a2óhi a2óhü a2óil a2óis a2ói2v a2óká a2óke aó1kré a2óku aó2la a2óle a2ólé a2óli aó2lo aó2lu a2ómag a2ómar a2ómas a2óme a2ómi a2ómo a2óné a2ónö a2ónő aó2rá a2óré aó2ri a2ósí a2ósű a2óta a2óte a2óté aó2vo aó2vó a1ö aö2bö aö2cs aö2dé aö2ko aö2kö aö2le aö2lé aö2lő aö2ná aö2rö aö2ve aö2vi aö2vö aö2zö a1ő aő2re aő2ré aő2ri aő2rö aő2rü aő2se aő2sö aő2sz apa2cs1a2v apa2cs1i a2p1a2da a2p1aga a2p1ajá a2p1akc 2apal apa2lag apa2lak a2p1alb a2p1alj a2p1alt apa2mas a2p1ant 2apap apa2pán ap1a2rán 1apasá a2p1asp apa2tad apa2t1ala apata2n apa2t1as apa2tál apa2t1ö ap1aut 2apav a2pava ap1a2zo a2pájú ap1állap a2p1állá a2p1állo apán1n a2p1á2rad ap1á2rai a2p1á2rak ap1á2ram ap1á2ras ap1á2rat apá2ráé apá2ráh apá2rán apá2rár apá2ráv apárba2 a2p1áre a2p1á2ré a2p1árf ap1árka ap1árko a2p1árny ap1ártó a2p1áru a2p1á2rú apáská2 apá2túr 1a2páu ap1bl ap1dr a2pe. ap1e2dé a2p1e2g ap1e2l1a ap1elb ap1e2lé a2p1elf ap1elg a2p1elh ap1elj ap1elk a2pell ap1elm ap1eln ap1elo ap1e2lő ap1elr a2p1elt a2p1elv ape2m ap1emb ap1eme ap1ene ap1eni ap1e2ny ap1e2rő ape2s ap1ese ap1esé ap1eső a2p1e2v a2p1ex a2p1é2he a2p1éje a2p1é2le a2p1éll ap1élm a2p1é2ne ap1épü a2p1ér. ap1észl a2p1éte a2p1éve ap1fl ap1f2r ap1gr a2p1ide a2pidé apigaz1 ap1i2ko ap1ikr a2p1i2nár ap1ind ap1inj a2p1ins ap1i2rat a2p1i2rá a2p1irk a2p1ism a2p1íg a2p1ín a2píté ap1ív a2p1íz ap1kl ap1kr ap1kv ap2laz ap2léd apmeg1 apmű1 apműt2 a2p1ob ap1o2laj ap1oltár ap1opc ap1ope ap1opt apo2rad ap1orcá ap1orsó apor2t1ő2 apo2t1ál a2p1ov 1a2póká ap1ólo ap1óri a2p1öb ap1öl ap1ön ap1örv a2p1ös ap1öv a2p1ö2z ap1ő2r 1appará ap2p1árn ap1ph app1ing ap1pla ap1pri ap1pró ap1p2s ap1py ap2res ap2réd a1p2rém ap2rés. a1p2rím 2apro ap2roc a1p2rod 1apród 1aprózó ap2s1i2kon ap2síz aps1ork apsz1ert ap1szf apsz2t aptára2d aptá2r1ada ap1t2r apuá2 a2p1udv apu1p2 apus3s a2p1u2tas a2p1után a2putc a2p1új a2p1üd a2p1üg a2p1ü2l a2p1ün a2p1üt a2p1üv a2p1üz ap1űr ap1wh ara2b1ár ara2b1í2 ar1abla 2arad ar1a2data ar1a2dato ar1a2datr 2arag ara2g1e 2araj ar1ajkáró 2arak a2r1a2kol ara2kóh ara2kói ara2kós ara2kót a2r1akt. ar1alk a2r1alm a2r1ana 1a2rann arany1a2gá ara2nyal 1aranyb 1aranyh ara2nyí 1aranyk 1aranyn 1aranyr 1aranys ara2pa. ar1arc 1arasz. arasz2t1e ar1aszú ara2tal ara2tel ara2tin ara2t1ő2 aratű2 ara2tűr ar1aul aravasz1 1a2raw ara2zon 2arác a2r1ác. a2r1á2csi a2rácsom a2r1ág. a2r1á2ga. a2r1á2gai a2r1á2gak a2rágan a2r1á2gat ará2gáb ará2gáh ará2gán ará2gár ará2gát ará2gáv a2r1ágb a2r1áge a2r1á2gé a2r1ágf a2r1ágg a2r1ágh a2r1á2gi a2r1ágk a2r1ágl ará2gon a2r1ágr a2r1ágs a2r1ágt a2r1á2guk a2r1á2gun a2r1á2gú a2r1á2gy ar1álc a2r1állá a2r1állo 2arám ará2m1e2 ará2nye a2r1á2rak a2r1á2rá a2r1árk a2r1árr ar1á2ru ar1árú ar1árv ará2sze a2r1á2szoki ará2tal ará2t1ö aráz4s ará2zsál arázsi2 arázs3z ar2c1a2d arc1agy arc1ala arca2n arc1any ar2car ar2cat ar2ceg ar2c1es ar2cev ar2c1é2h arc1él. arc1élb arc1éll arc1élt ar2c1é2n ar2cés 1archí arc1ing ar2c1int ar2ciz arcolás1s ar2có ar2cő arcs1ala ar2csál arc3sere ar2csip ar2c3sor ar2cü ar2cű ard1acé ar2d1alj ar2d1áll arde2l ard1ele ard1elő ard1elt ar2d1e2m ar2d1é2l ar2d1ina ar2d1ing ar2dor ar2dö ar2d1ur ar2dü a2r1e2dz ar1egés a2r1e2gy are2i areil2 a2r1e2le ar1elh ar1elm ar1eln ar1elr ar1elt ar1elü ar1elű ar1elv a2r1emb ar1emel ar1e2més a2remu a2r1e2r ar1e2se ar1e2ső a2r1eszek a2r1eszé a2r1eszü ar1etű ar1e2ve ar1e2vé a2rew aréé2 ar1ég. ar1é2ge aré2k1a2l aré2kek ar1él. ar1élt 2arém aré2nek aré1p a2r1épü a2r1é2ri a2r1érő ar1észj aré1sz2tá aré1tra ar1f2r ar1gha 2ari. 2aria ar1i2de a2ridé a2r1i2ga a2rimád ar1i2mi a2r1i2na. a2r1i2naké a2r1i2nas a2r1i2nat a2r1i2náb a2r1i2náh a2r1i2nán a2r1i2nár a2r1i2nát a2r1i2náv a2r1ingé ari2nit arink2 a2r1inté ari2nü ar1i2ono a2r1i2ón 2arip a2r1isp a2r1iste ari1szf 2ariz ari2zom ar1í2té ar2j1áz ar2j1er arkas3s arká2p arká2s ar2k1eg ark1elá ar2kéj ar2képü ar2k1érd ar2k1in. ar2k1i2ont ar2kiz ar2k1orm ar2k1ovi ar2kud ar2k1u2s ar2les ar2m1a2gy arma2te arm1áll ar2me. ar2meo arme2s arm1ing ar2m1is ar2m1osz ar2m1ö ar2mü arnis3s aroka2 aro2kan aro2k1á2 aro2k1e aro2kin a2r1olda 1a2romát aro2mis a2r1opt ar1org ar1o2ro ar1ors a2r1ovi aró1p a2r1ó2rak a2r1ó2ráj a2r1ó2rám aró2s3zár aró2vár ar1ózd a2r1ö2b a2r1ök a2r1ö2l ar1öng a2r1ör a2r1ös a2r1ö2z ar1őr ar1ős ar1pl ar1pr ar1ry ar1ska ar1srá ar1sta ar1sto ar1str 2art. art1abl ar2t1a2lap arta2n1á2s art1aszt ar2t1a2u ar2t1álla ar2t1e2g art1e2lő art1emb art1e2rei ar2tég ar2t1é2l ar2t1érp ar2t1i2na. ar2t1i2nát ar2t1i2náv art1orz ar2t1ö2v ar2t1ut artvis1s ar1ty2 a2r1uml a2runi aru2tas a2r1új a2r1úsz ar1útj ar1útr a2r1üt ar1üz ar1ű2z ar2vala arvas1s arv1ágy ar2v1árh ar2v1á2ri 2asabl as1abr a2sadag asag2 as1aga as1agg as1a2gy 2asaj a2s1a2kar 2asal as1alab a2s1a2lap as1alf a2s1alján a2s1alji a2s1alk as1alm a2s1anó a2s1ant a2s1a2ny 2asap as1apr 2asar as1aran a2s1a2rá asa2t1ó2 as1a2ty 2asav asa2vo a2s1á2c asá2g1ikr as1áll 2asám a2s1árnak a2s1á2ro a2s1árr a2s1árt a2s1á2ru asás1s as1ásvá as1áth 2asáto 2asáv as1bl as1d2r a2s1e2d as1ege a2s1e2gy ase2k as1eke as1eké as1ell a2s1emb a2s1e2n a2serd as1e2ré as1erő a2s1es ase2t as1eti a2s1ez a2s1éhe a2s1éke a2s1é2l 2asém a2s1ép 2asér a2s1ér. as1érb as1érc a2s1érd asé1s2 as1étv as1é2ve as1fr as1gl as1gr as1ide as1ido as1i2ga as1i2gá as1inj a2s1i2o 2asiv as1izé as1i2zo a2s1íj 2asík 2asín 2asír asírta2 asír2tal a2s1í2v as1ízü 2aská as1kl asko2s1a2rá asko2s1á as2koz as1k2r as2luk as2már 2asodr a2s1of as1okke as1okl as1okos 2asoks as1okta asom1or aso2né 2asor a2s1ord a2s1orm as1osz a2s1ox asó1p2 as1ó2rá a2s1ö2k a2s1ö2l as1örd as1örv a2s1ös as1ö2ve as1őr as1p2l as2pot asp2r a1s2pu as1s2p as3szabá as3szin asszí2ve assz1íve. assz1ívek assz1ívne 1asszoc 1asszony as3szü as3szű 2asta a1stand 2astá a1s2tád 2asti astil2 as2tim 2astí 2asto as2top 2astr as1trag as1trav a1st2ru 2astú a2s1ud 2asug a2s1uj 2asuly asu2r as1ura as1urn a2s1u2sz as1u2tak a2s1u2tas a2s1u2tá as1u2tu a2s1ú2s a2s1ú2t asút1a2 a2s1üd a2s1ü2lő as1üst a2s1üz as1űz 2aszab a2sz1a2d 2aszak a2sz1akc asza2k1e a2sz1akt asza2k1ü a2sz1alk 1aszaló asz1asp asz1ass asza2t1a2 asza2t1e a2szath a2szati 2aszav a2sz1ág. asz1á2ga asz1á2gá asz1ágb asz1ágg asz1á2gi asz1ágk asz1á2go asz1ágr asz1ágt a2szálc a2szálm 2aszám aszá2rada a2száram asz1árnyé a2szárp a2száta a2száth asz1átl a2sz1á2to asz1áts 2aszed 2aszeg aszegész1 asz1eh 2aszek 2aszel asz1e2lem asz1elj 2aszemc 2aszeme 2aszemé 2aszemp a2szemu 2aszemü 2aszemű 2aszen a2sz1eng asz1e2pi 2aszer. 2aszere a2sz1erej 2aszeré 2aszerk 2aszern a2sz1ero a2szerő 2aszerr 2aszers 2aszert 2aszerv 2aszerz asze2s a2sz1ese asz1est 2aszez 2aszék aszé2k1el asz1é2let asz1élés aszé2n1ég aszén1n a2sz1é2re asz1éré 2aszét asz2fér a2sz1ill 2aszin a2sz1inf asz1ing 2aszir a2sz1ism asz1ist 2asziv a2sz1iz 2aszí a2sz1ír asz1í2vi asz2karc asz2k1áp asz2kell asz2kes 2aszob 2aszoc 2aszof aszon1n aszo2n1o a2sz1orr asz1ors a2sz1osz 1aszóa asz1ó2dá 2aszót 2aszök asz1ölt a2sz1ön 2aször asz1öss a2szöt 2aszöv 2asző aszőlőé2 asz3su asz2tab asz2t1apo asz2tác asz2táll asz2t1emb asz2téne asz2t1és asz2t1ing asz2t1olt asz2t1oro asz2t1orr asz2tors asz2t1osz asz2töv asz2tős asz2t1ül asztvíz1 2aszur 1aszús asz1útr 2aszü aszü2g asz1ügg a2sz1ü2z 2aszű asz2vit asz1z 2atab at1abla a2t1a2cé ata2dat at1a2dó 2atag a2t1agya a2taján 2atak a2t1akara ata2kár ata2kel ata2k1é2pes ata2k1ö2v a2t1aktu at1a2lag ata2lap. ata2lapb ata2lapj ata2lapo ata2lapp ata2lapr ata2lapú ata2lat a2t1aleg ata2lik a2t1alle a2t1almás 2atan a2t1anal ata2nó at1a2nyag at1a2nyás 2atap at1app ata2puk ata2pun 2atar a2t1a2rab ata2ran a2t1a2rén ata1st atau2r a2t1a2ut a2t1azo 2atáb at1ábr 2atág at1ág. a2t1á2ga at1ágr 2atáj 2atál a2t1állá a2t1álló a2t1álm 2atám atá2nal a2t1á2pol 2atár atá2rada atá2rado atá2ramh a2táramk atá2ramn atá2r1az atá2rét atá2ris at1árkár atársá2g atár2s1ágá at1ártás 2atás atá2s1á2g atá2sz atá2tal atátá2 atá2tár a2t1átb a2t1átf a2t1áth a2t1áti a2t1átj a2t1átk a2t1átl a2t1átr a2t1áts a2t1átt a2t1átu a2t1átv 2atáv at1bl at1br at1cl at1dr at1e2gé ate2jel ateké2r ate2kére ate2kó a2t1e2l1a a2t1elb at1elc a2t1eld at1e2led at1eleg at1e2lem at1e2l1en a2t1elf a2t1elh at1eljá at1elkö at1elkü a2t1elm at1eln a2t1e2lo at1e2lőn ate2lőt a2t1elr a2t1els at1elta at1eltá at1elté at1eltü a2t1elu a2t1elű a2t1elv a2t1elz a2t1emb at1e2mel a2t1emé a2t1eml a2t1emó a2t1enc a2t1ene at1epi at1epo a2t1erd at1e2rec ate2r1ék a2t1erő a2t1e2se a2t1esé a2tesk ates2t1á ates2tő at1eszm at1eszű ate2tol a2t1e2z 2atég até2get a2t1éhe até2k1a2l até2ke2 a2t1éke. aték1el 2atél a2t1é2le a2t1é2lé a2t1élm a2t1élv 2atém até2ne a2t1éps 2atér até2rá a2t1érdek a2t1érin a2t1érl a2t1érm a2t1értel at1érvek a2t1érz at1észa at1észl 2atét até2tét a2t1étv at1fj at1fl at1fr at1gl at1gr a1t2hus 2ati. a2t1iat a2t1i2de a2t1ido ati2g a2t1ige a2t1igé a2t1igy a2till at1ille at1i2má at2i3mádá at1i2mi a2t1imp 2atin a2t1ing. a2t1inga a2t1ingb a2t1inge atinó2 ati2n1ór at1inté at1into 2atip a2t1i2pa 2atir a2t1irá a2t1iro 2atis a2t1isk a2t1ism ati2sz a2t1iszo 2atit a2t1i2ta a2t1izé a2t1izg a2tizmo a2t1i2zo a2t1íg a2t1íj 2atíp 2atír a2t1í2t at1í2vek atív1e2l at1í2vet atí2vét a2t1íz 2atki 2at1kl 2atko 2atkö 2atku at1kv at1ojt atoka2 a2t1o2k1al ato2koss a2t1o2koz a2t1okta a2t1o2ku at1oldá a2t1oldó ato2m1á 1atombe ato2mer 1a2tomj a2toml 1a2tomok 1a2tomos 1a2toms 1atomú at1opc at1ope a2t1opt 2ator ato2rál a2t1ord a2t1org ato2rú a2t1orv a2t1orzá atos3s ato1sz2f a2t1oszl ató1p2 a2t1ó2rák ató2rán ató2riá ató1stá ató1sz ató2s3zár ató2s3zené ató1tr at1öko atö2l a2t1öle a2t1ölé a2t1ölő at1öná atön2k1a at1ö2röm a2t1ös a2t1öt atö2vi. a2t1ö2z atő2ra at1őrl a2t1ő2s atpen1 at1pl at1pr at1ps atrac1c a1t2rad 2atraj 2atrak at2ramb a1trap a1trau a1t2rav 2atré a1t2réf at2rén atré2szel a1t2ril at2roj a1t2róg 2atrón a1t2rü at2sán at1sh at1sk at1sl at1sp at1st at1s2v atszá2m1é atszáraz1 att1adó 1attakok 1attasé at2t1e2g at2tez att1ing attó2 at2t1ór at1t2re 2atud a2t1udv a2t1ug 2atul a2t1und a2tuni 2atur at1utá at1utó a2t1új 2atúl at1ú2sz a2t1üg 2atük at1ü2lé at1ült 2atün at1üst a2t1ü2v 2atüz at1üzem at1űri. at1űrl 2atűz a1u au2b1in au2bor a2udá au2de au2ga a2ug2h au2go 1a2ukc aul2l aul2t1a aul2ti a2umae a2umaf a2umak a2umam a2umar a2umav a2umáb a2umád a2umáé a2umáh a2umái a2umám a2umán a2umár a2umáv au1ph au2rad au2r1ikr au2rö au2sz1e a2ut. au2tad au2tal au2tam au2tas au2tat 2autá au2tál a2uti 1a2uton a2utó 1autób 1autóé 1autóh 1autói 1autóm 1autón 1autór 1autós 1autót 1autóv a2utr a2utt au2tu au2zí au2zs a2uzú au2z1ü a1ú aú2jí aú2jo aú2ré aú2r1i aú2sz aú2ti aú2to a1ü aü2dí aü2dü aü2ge aü2gy aü2le aü2lé aü2li aü2lö aü2lő aü2lü aü2nő aü2re aü2rí aü2rö aü2rü aü2sz aü2te aü2té aü2ti aü2ve aü2vö aü2zem. aü2zemb aü2zemen aü2zemet aü2zemé aü2zemh aü2zemm aü2zemn aü2zemr aü2zen aü2zé a1ű aű2ri aű2rö aű2ze aű2zé aű2zi aű2zö aű2ző 2avad 2avak av1akti a2v1anh 1a2vant a2v1a2nya a2vanz ava2rac ava2r1ag ava2r1e2 ava2rék ava2sze ava2szü 1a2vatá 1a2vató 2avád avá2nan 2avár avá2r1al avá2ria. avá2riai a2v1á2riá a2v1áta a2v1átt avá2zal av1bl av1e2le av1elv 2aves av1est 2avet 2avez avi2cse av1ing av1kr a2v1old av1oltó avo1s a2v1ox a2v1öm a2v1ös av1ős av1őz av1pr av1sp av1st a2v1ut av1ü2l av1ür av1ü2z a2wag aw2hi awhisky2 awhiskyk2 a2x1ab a2x1ad a2x1ak a2x1al a2x1an a2x1av ax1bl ax1eg ax1el ax1inf ax1ing ax1int axió2r axi2se ax1ír ax1ös ax1öz ax1pr a2x1ut ax1új ax1üz ax1űr a1ye. a1yed a1yei a1yek ay1e2l a1yen a1yes ayet2 ay1fl a1yi. ay1il ay1ing a1yit ayma2 ay1s2t aza2ch aza2cik azai2ko azal2t1a aza1p2 aza1s2 az1áll az1ált azá2nö azá2r1ó2ra azá2s1e azási2k azá2siko azás3s az2du a2z1e2g az1e2le az1elj az1elm az1elő a2z1em a2z1ex a2z1ég azé2k1e2 azé2kol a2z1érté a2z1ing a2z1i2o az1irá az1irt azma1g a2z1ob 2azol azo2nal azo2n1á azont2 a2z1op a2z1or a2z1osz azót2 azó1tr a1z2rí az4sé a2z3sike az3sor az3sp a2z3sü az3sz az1ut a2z1új azú2r1é az1üz 2á. á1a áa2da áa2dá áadás1s áa2do áa2dó áa2du áa2já áa2ka áa2la áa2lu áa2ra áa2sz áa2ut áa2va á1á áá2cs áá2ga áá2gy áá2ju áá2mu áá2ra áá2ru áá2sá áá2sí áá2so áá2só áá2su áá2zo áá2zu á2b1adu áb1akc á2b1a2la á2b1alk á2b1ambu á2b1a2ny ába1p áb1art ába3se á2b1á2g áb1áll áb1álm á2b1áp á2b1árá á2b1árn á2b1á2ru á2b1átj á2b1átl á2b1átm á2b1átv á2b1áz áb2b1a2d ábba2l áb2b1ala áb2b1and áb2b1ár áb2ben áb2b1e2r áb2b1é2l áb2bid áb2bim áb2b1i2s áb2b1ita ább1o2so ább1oss áb2bör áb2b1ül áb2bű áb1dr á2b1ed á2b1e2g ábe2l1a ábe2l1á ábe2l1eg ábe2l1el ábe2l1e2r ábe2lég ábe2l1in á2belnö á2b1e2m á2b1e2n áb1e2ro áb1erő 1á2béc á2b1é2g áb1é2ke á2b1éks á2b1é2les á2b1élt á2b1ép á2b1ér. á2b1é2ri á2b1érs á2b1érte á2b1érté áb1fr á2b1i2d ábi2g áb1iga áb1igé á2b1ikr áb1illa á2b1im ábi2nai á2binas á2b1ind á2b1ing á2b1int á2b1is áb1izm áb1izz á2b1ív áb1kl áb1kr ábla1kr ábla1p á2b1olda á2b1op ábo2raj ábo2ran ábo2rál ábo2ris á2b1osz á2b1o2v áb1öb áb1ö2d áb1öl áb1ön áb1ö2r áb1ös áb1öv áb1őr áb1pr 1ábrái áb2rek áb1sp áb1st áb1sz2 áb1tr á2b1ujjal ábu1sz2 áb1úr. áb1üg áb1ü2l áb1üs áb1üt áb1üv á2c1a2g ác1ajt áca1k2l ác1akn á2c1a2la ác1alm á2c1a2ny á2c1ág á2c1ál ác3cse ác3cso ác1e2l1 ácele2 ác1en ác1er á2c1ép á2c1ére á2c3ha á2c3há ác3he á2c3hé ác3hon á2c3hu áci2as á2c1il ác1inc ác1ing ácin2til áci2ósű á2c1i2s ác1ív á2c1or á2c1osz ác1ór ác1ö2l ács1abl á2cs1a2g á2cs1ajt á2csaka á2cs1akn ács1alap ács1alj ács1alom ács1app ács1atk á2csatom á2cs1á2c á2cs1ál ác3sárg á2cs1árk á2cs1árn á2csáru á2cs1á2ta ácsboz1 á2csef á2cs1e2g á2cs1e2l á2csene á2csent á2cser ácse2t á2cs1ev ács1é2g ácsé2k ács1éki ács1ékk ács1ékn á2csél á2csép ács1é2te ácsi2g á2cs1iga á2cs1ille á2csimi ács1int ácsi2p á2cs1ipa ács1isk ácsí2 ács1ír á2csokta 1á2csolat 1á2csomk ács1orr á2csosz á2cs1ov ác3só. ács1ó2r ác3sót ác3sóv ács1ö2k á2cs1ö2l á2cs1ös á2csöt ács1ő2s ács1s á2csuj á2csut á2cs1úr ács1ü2l á2cs1ü2t á1csy ács3zen á2c1ut ác1úr ác1ül ác1ür ád1abl á2d1a2do á2d1akc ád1a2lap á2d1alb á2d1alj á2d1alk ád1a2nya ád1a2nyá áda1p á2d1a2pá ád1arc á2d1aty á2d1ág á2d1ál ád1á2sz ád1átl ád1dr ád3dz ád1e2c á2d1e2g á2d1ej á2d1e2l ádele2 ádel1ej ádel1eme á2d1e2m á2d1ep áde2r1á ád1erő ád1e2ti ádéd2 ádé1dr ádé1g2 á2d1é2ge ádé1kré ád1éne á2d1érte á2d1érz ádé1st ádi2cse á2d1i2d á2d1i2ga ád1i2ko ád1ill ád1imi ád1ind á2d1int ádi2ódar ádióé2r ádi2óéra ádi2ói2v ádi2óko ádi2ó1k2ra á2d1i2p ád1ist ád1ív ád1kl ád1kr ádo2ga ádo2gá ádo2ge ádo2rak á2d1osz ádós2 ádö2b á2d1ös ád1öv ád1ö2z ád1ő2r ád1pr ád1ps á1d2rót ád1st ád1tr ád1udv á2d1ú2s á2d1üg ád1ü2lé á2d1üz ád3za á2d3zá á2d3ze ád3zú á1e áe2cs áe2dz áe2ge áe2gé áe2gy áe2le áe2lő áe2me áe2re áe2rő áe2se áe2sé áe2si áe2ső áe2sü áe2te áe2ve áe2vé áe2vő á1é áé2de áé2ge áé2gé áé2gő áé2he áé2ke áé2le áé2ne áé2pí áé2pü áé2re áé2ré áé2ri áé2rő áé2rü áé2te á2f1a2gya á2f1alg á2fáb á2f1ág 1á2fák á2f1áp 1á2fás á2fát áf1dr áf1elm á2f1e2m á2f1e2t áf1é2ne áfi2ad áfi2am á2f1i2d á2f1im á2f1ing. á2f1ordá á2f1osz áf2rec á1f2rö áfus3s á2f1ün á2g1abl ág1abr ága2c ág1acé 1ágacska á2gad ág1a2dá 1ágadd ág1a2dó á2g1a2j á2gaka ág1a2kar ág1a2kas 1á2gakb 1á2gakh 1á2gaki 1á2gakk 1á2gakn 1á2gakr á2gakt á2g1a2la á2g1alj á2g1all ág1alt 1á2gam ága2n ág1ana á2g1ang 1á2gank ág1ant á2g1any á2g1a2p á2g1a2r ág1asp á2g1asz ága2tol á2g1au 1á2gaza ága2zon á2g1á2g á2g1áld ág1álm ág1á2mu ágá2nyal á2g1áp á2g1árad á2g1árb á2g1á2ré á2g1árh á2g1á2ria ágá2rokb á2g1árv á2g1ásó ágás3s ágá2sz á2g1át1a2 á2g1átá á2g1áté á2g1átf á2g1áth á2g1áti á2g1átl á2g1átm á2g1átn ágá2tokk á2g1átr á2g1áts á2g1átt ág1átü á2g1átv ág1bl ág1br ág1d2r á2g1e2c á2g1e2d ág1ef á2g1e2g á2g1e2l á2g1e2m á2ge2n ág1enc ág1ene á2g1e2p áge2ra áge2rá áge2r1el á2g1e2s á2g1e2t á2g1e2v á2g1ex á2g1é2g á2g1é2he á2g1éj á2g1é2k á2g1é2l á2g1é2ne á2g1épí ág1é2pü á2g1ér. á2g1érá á2g1é2ré á2g1éri ág1érm á2g1é2rő ág1érte ág1érté á2g1érv á2g1és á2g1éte á2g1éve á2g1évé ág1fl ág1fr ág1g2l ág1gr ág3gyar ág3gye ág3gyú ághá2nyi ági2al ági2asz ági2d á2g1ide á2g1if ági2g á2g1iga á2g1igén á2gill ág1ima á2g1i2mi á2g1i2na. ág1inf á2g1ing ág1ins á2g1int á2g1iri ág1iro á2g1ist á2g1isz á2g1i2ta á2g1iz á2g1íg á2g1ín á2g1ír á2gíté á2g1íz ágká2rok ág1kl ág1kr ág1kv á2g1oá á2g1okl á2g1o2li ág1oltó á2g1op á2g1or á2g1osko ágos3s á2g1oszl ágó1dr á2g1ó2rá á2g1ö2k á2g1ö2l ág1önt ágö2r ág1örö ág1örv á2g1ös á2g1öt á2g1öv á2g1ö2z ág1ő2r ág1ő2s ág1pl ágport2 ágpor1tr ág1pr ág1ps ág1sh ág1sk ág1sl ág1sp ág1st ágsz2 ág1tr á2g1ud á2g1uj águ2n á2g1una á2g1und á2g1u2ra á2g1u2rá á2g1u2t á2g1új á2g1ús ág1útt ág1üd ág1ü2g ág1ü2l ág1ün ág1üv ág1üz ág1ű2r ág1űz ágya1g ágy1alj ágy1alk ágy1alm 1á2gyasn á2gyassa á2gy1á2l á2gy1á2ram ágyás1s á2gy1e2 á2gyél ágy1ér. 1ágygyű á2gyid á2gyil á2gyivad á2gyob á2gyosz ágy1otth á2gy1ó2s ágy1ö2l ágy1ös á2gyur á2gyúh á2gyút á2gy1ü2 áh1ajk áh1ass 1á2hít á2h1ors á1i ái2dom ái2dő ái2ga ái2gé ái2gy ái2ha ái2je ái2má ái2ram ái2rá ái2sz ái2ta ái2vá ái2vo ái2zé á1í áí2gé áí2rá áí2ve áí2vo á2j1adó á2j1akc á2j1akv á2j1a2la áj1ambu á2j1ana áj1ant á2j1any á2j1ar á2j1atl á2j1ax áj1azo á2j1ág á2j1ál á2j1áp ájás3s á2j1át1a á2j1átá á2j1átt áj1bl áj1br áj2ch á2j1e2c áj1egé áj1elm áj1eln áj1elő áj1elv á2j1em á2j1e2n á2j1es áj1e2t á2j1e2v áj1ex á2j1é2g á2j1él á2j1ép ájé2r á2j1ére á2j1éte áj1fl áj1fr á2j1i2d á2j1il á2j1im á2j1iz áj1íj áj1ír áj1ív áj1íz ájk1ell áj2k1ő2 áj2kü áj2lad ájl1akt áj2l1an áj2l1as áj2l1at áj2lik áj2lob áj2nár áj2nin áj2nü á2j1ob á2j1op á2j1or á2j1öb áj1ök áj1öl á2j1ör áj1őr áj1ős áj1pl áj1pr áj1sn áj1sp áj1st2 áj1t2r á2j1ud áj1úsz áj1üg áj1ül áj1ür áj1ü2t áj1üv áj1üz áj1űr áj2zab áj2zaj áj2z3sa ák1abr á2k1a2d á2k1aj ák1aka á2k1a2lapí ák1ale ák1alj ák1ant ák1ara á2k1a2rá ák1arm ák1arz á2k1ass á2k1atl á2k1a2u á2k1á2c á2k1á2l ák1áta ák1átk ák1bl ák1ebé á2k1e2g ák1e2le á2k1elk á2kellene á2k1elm á2k1e2lő ák1emb ák1e2rő á2k1e2vé á2k1e2vo á2k1é2l á2k1é2ne á2k1érm á2k1érte á2k1értő á2k1érv á2k1érz ák1éss á2k1é2te á2k1étk á2k1étt á2k1é2ve ák1fl ák1fr á2k1i2d á2k1if áki2g ák1iga á2k1igé ák1ill á2k1i2m ák1ing á2k1int ák1iro á2k1i2s áki2t ák1ita á2k1i2v ák1ír ák1k2l ák1k2r ák2lar á2k1oks á2k1o2la á2k1old á2k1o2li á2k1oll á2k1o2pe á2k1orv ákos3s á2k1ott ák1óni ákö2l á2k1ölő ák1ö2r ák1ő2r ák1pr ák2rák á1k2reá á1k2ris ák1sp ák1sr ák1st ák1sz2 ák1t2r á2k1uj á2kuni áku2r ák1ura ák1utó ák1új ákú2t á2k1úto ák1üd á2k1üg ákü2l ák1ün ák1ür ák1ü2t ák1űr á1k2vat 2ála. ál1abl ál1acé á2l1adag á2l1a2dó ál1a2já ál1ajt ála2kar á2l1akna. 2álal ál1alak á2l1alát ál1alg á2l1alk á2l1alm á2l1ane á2l1ang á2l1ant á2l1a2nya ál1a2nyái ál1a2nyán á2l1a2nyát ál1a2nyáv á2l1a2pos ál1apó ál1a2ra ála2szek ála2szel ála2sz1ék ála2szö ála2szű ála2tat ála2tet ála2t1ér. ála2tikr ála2tint ál1atlé ála2told ála2t1ó2 á2l1atti á2l1a2ty ál1aut á2l1ábr ál1ág. ál1á2gi á2l1á2gú ál1áll á2l1á2rak ál1árf ál1árk á2l1árn á2l1á2ro álá2s3z á2l1átc á2l1átk á2l1átm á2l1átú á2l1átvá ál1bl ál1br álcai2 1áldás 1áldoz ál1d2r ál1dy á2l1e2c á2l1e2d á2l1ef ál1elk ál1elm ál1elo ál1e2lő ál1elr ál1emu á2l1e2r ál1esem á2l1e2ső á2l1esz á2l1e2t ál1ez á2l1ég á2l1é2he álé2kal álé2k1an álé2k1e2l álé2kü ál1é2le ál1é2lő á2l1é2ne á2l1ér. á2l1érb á2l1érd á2l1érf á2l1érg á2l1érh á2l1é2ri á2l1érm á2l1érr á2l1érs á2l1értá á2l1érte á2l1érté á2l1érz á2l1év. á2l1é2vé ál1fl ál1fr ál1gr 1álhaja áli2as ál1i2bo áli2d ál1ide ál1idé áli2g á2l1iga á2l1ige á2l1igé ál1ill ál1imp á2l1ind ál1inf á2l1i2onb á2l1i2ont á2l1i2p ál1irá á2l1iro áli2s1e áli2s1ék áli2sis ális3s ál1iste á2l1iz ál1ín ál1í2r ál1ít ál1í2v álká2rok ál1k2l ál1k2r ál2l1a2dó 1állag ál2laj ál2l1a2lak 1államá álla2m1e 1államot 1államti ál2l1a2pá ál2l1a2r 1állata álla2tas álla2t1e2 álla2t1or álla2t1ö2 1állatu ál2l1á2g ál2l1á2l ál2l1árr állás1s ál2l1áth ál2l1átm ál2led ál2l1e2h ál2l1ej áll1éké ál2l1iz 1állomá ál2lü 1álmaim 1álmok. 1álmom 1álmot. 1álmuk 1álmunkb ál1obj á2l1o2ka. á2l1o2kai 1álokaih 1álokain 1álokair á2l1o2ká 1álokán 1álokát 1álokáu álo2kok 1álokonk álo2kos á2l1okta 1á2l1o2ku á2l1ol áloma2 álo2mad álo2m1al álo2m1an álo2mar álo2mas álo2m1á álo2m1e álo2m1it álo2mot á2loms álo2m1ú á2l1ont ál1opc á2l1ope á2l1or á2l1osz á2l1ox álóa2 álóá2 álóó2 áló2ráj áló2s1ű2 álót2 ál1öb á2l1öd á2l1ö2l á2l1ös ál1öz á2l1őr ál1p2l ál1p2r ál1p2s ál1sk ál1sl ál1st ál1trad ál1t2rak ál1t2ran ál1t2re ál1tré á2l1ug álu2n á2l1una á2l1u2r á2l1u2t á2l1uz á2l1új á2l1úr álú2t ál1útj ál1útk ál1útn á2l1úto á2l1útr á2l1útt ál1üg ál1ün ál1ür ál1üt ál1üv ál1üz ál1űr ál1űz ály1ada álya1g2 ály1ant ály1anya álya1p ály1ass á2lyál á2ly1e2 á2lyéj á2lyél á2ly1é2ne á2lyére á2lyéve á2lyide á2lyí ály1k2 ály1odv á2lyol á2ly1ó2 á2ly1ö á2lyő ály1s á2lyug á2ly1ü2 á2ly1ű2 á2m1abl á2m1abr ám1a2cé ám1adm ám1agg á2m1ajt á2m1akt ám1a2lap ám1all ám1alt ámaó2 á2m1app á2m1arc áma2sz1ál áma2szel áma2szív áma2sz1odv áma2sz1ü2 ám1atl á2m1att á2m1aty ám1aud ám1a2zo ámá2c ám1áf á2m1ág ám1álla ám1állo ámán1n ámán1tr á2m1á2rak ám1á2ram á2m1áras á2m1á2rá á2m1árb á2m1á2ri á2m1árn á2m1á2ro á2m1árr á2m1á2ru ám1ásv á2m1átb ám1á2t1e á2m1áti á2m1átm ám1á2zó ám1bl ám1dr á2m1e2b á2m1ej á2m1ela ám1elá ám1e2lem ám1elé á2m1elh ám1elí á2m1elj ám1elk á2m1elm ám1elo á2m1e2lő ám1els ám1elt ám1elü ám1elv á2m1e2m á2m1erd ám1e2rek á2m1erk á2m1e2ro áme2rők áme2rőt áme2rőv ám1e2se ám1ess ám1esz áme2t á2m1eti á2m1etű á2m1ev á2m1ex á2m1ez ám1éke á2m1é2le á2m1ép á2m1érc á2m1érd á2m1értel á2m1étk ám1fr ám1gr ámi2ab ámi2al ámi2am á2mide á2m1idé ám1i2dő á2m1iga á2m1igá á2m1igé á2m1ill á2mimá á2mimm á2m1imp á2m1ind á2m1inf á2m1ing á2m1inte á2m1inté á2m1inv á2m1i2pa á2m1irá á2m1iro á2m1irt á2m1isk á2m1ism ám1i2szá á2m1i2z ám1íg á2m1íj á2m1ír á2m1í2v ám1íz ám1kl ám1kr ám1kv ámla3t2 á2m1ob á2m1of á2m1oká á2m1okl á2m1okm á2m1okta ámo2lyas á2m1op ámo2r1á2l ámo2ris ámo2r1odv ámo2sas ámos3s ám1osto á2m1osz á2m1ov á2m1ox ám1ó2r ám1ö2k ám1öl ám1ön ám1ör ám1ös ám1öt ám1öv ám1ö2z ám1ő2r ám1ő2s ám1őz ámpa1p2 ám1p2l ám1p2r ám1p2s ám1sk ám1sm ám1sn ám1sp ám1st ám1sz2 ám1t2r á2m1ud á2m1ug á2m1uj á2m1und á2muni á2m1u2r á2m1utá á2m1új ám1üd ám1üg ám1ü2l ám1ür ám1üt ám1üv ám1üz á3műt ám1ű2z ámva2s1u2 á2n1abl á2n1a2cé án1ach án1ada ánae2 án1afr án1agya án1ajt á2n1aká á2n1akc á2n1akr á2n1a2la án1alk á2n1all á2n1anó án1anya á2n1a2o ána2p án1apa ánap1i án1ara á2n1arc án1assz ána2t1ér. ána2tol ána2tor ána2t1ű á2n1a2u án1ava án1ábr á2n1ág á2n1áll án1ár. án1árad án1á2ri án1árm án1árn án1áro án1áru án1ásv áná2t1a áná2t1á á2n1á2z án1bl án1br án2cac án2c1ad án2caj án2cal án2c1a2n án2car án2c1as án2cat án2c1au án2c1ál án2c1á2ro án2cás án2c1ed án2c1e2g ánce2l ánc1ele án2c1elt án2c1er án2c1e2s án2c1et án2cez ánc1éhe ánc1é2ne án2c1ér. án2c3h án2c1ill án2cim ánci2p ánc1ipa án2c1ir án2c1i2s án2c1ó2 án2c1ö2 án2cő áncs1an ánc3sás án2c3seb áncs1es ánc3spo ánc3sza án2cü án2cz áne2d án1edé á2n1ef á2n1e2g á2n1e2l án1emb án1e2mi án1eml án1e2mu á2n1en á2n1e2p án1es á2n1e2t án1e2u á2n1ex án1ez á2n1é2d á2n1é2g á2n1ék. á2n1ékn án1éks á2n1é2l á2n1é2ne án1épí án1épü á2n1ér. á2n1érc á2nérd á2n1éré á2n1érl án1éte á2névad á2n1éve á2n1é2vé án1f2r án2gab án2g1a2r án2g1ára ángás1s án2g1át án2ged án2g1el ánge2s án2g1ér. án2g1é2s áng3g án2g1it án2g1iv án2gí án2g1osz án2gőr án2g1us án2gü 1ángy. án2gyas á2n1i2d á2n1if á2n1i2ga án1igé áni2k1a áni2k1á áni2ke án1ill á2n1im án1ind án1inn á2n1i2p á2nirr án1irt án1isk án1ism á2n1i2sz áni2tá áni2t1e2 áni2t1í áni2tol áni2t1or án1izo án1íg án1ív án1íz án2kaj ánk1aro án2kern án1k2li án1k2lo án1klu án1k2rá án3nye án3nyí án3nyo án3nyu á2n1o2b á2n1okir á2n1okta á2n1o2ku án1old án1oli á3nom áno2n1i2m á2n1o2r án1oszl án1ott á2n1ox án1óri án1ök á2n1öl án1öm á2n1ön á2n1ör á2n1ös á2n1öt án1övö á2n1őr án1ő2s á2n1ő2z án1pl án1pr án2ses án2s1ér án2sis án2siz án1s2pe án1s2pi ánst2 án1str áns1üld án1szl ánt1acé ánt1a2ny án2taz án2t1á2g ántá2p án2t1árb án2t1ári án2t1ed ánt1eké ánt1elh án2tez ánt1éke án2térte án2tid án2t1ipa ánt1ist án2t1iz án2t1ív án2tök án2t1ös án1t2rak án1tran án2t1ü2l á2n1ud á2n1ug á2n1uj á2n1u2r á2n1u2t án1úr ánú2t án1útj á2n1úto án1útt án1ü2g án1ü2l án1ü2t án1ü2v án1ü2z án1űz ány1adás ány1a2dó ány1agg ány1akc ány1alap ány1alk ány1all ány1anya ány1anyá ány1apá ány1ara ány1ará ány1art ány1assz ány1aszt á2ny1á2l ány1á2ras á2ny1á2rá á2ny1árb ány1árc á2ny1árf ány1árh ány1árk á2ny1árn á2ny1á2ro á2ny1árr á2ny1árs á2ny1árt ány1áru ány1árú á2ny1átl á2ny1á2z ány1ed á2ny1e2g ányegyez1 ány1el ánye2le á2ny1e2m ány1en á2ny1ep ány1eső ány1et ány1e2v á2ny1éd á2ny1ég á2nyéhe á2ny1é2j á2ny1é2k á2ny1él á2ny1é2ne ány1érc. ány1érre á2ny1érte á2ny1érté ányé2r1ü ány1érvé á2ny1és á2nyéte á2nyétk á2ny1étt á2nyéve ányfé2l1é2v á2ny1id á2nyigé á2nyike á2ny1ikr á2nyirat á2nyiro á2nyisk á2ny1isz á2nyita ány1í2ró á2ny1oml á2ny1ont á2ny1o2r á2nyosz ány1ök ány1ö2r á2ny1ös ány1öz á2ny1ő2 ány1tr á2nyug á2ny1ur ány1ut á2nyúto á2ny1ü2 á2ny1ű2 án2zál á1o áo2cs áo2ká áo2ko áo2mo áo2pe áo2so áo2szan áo2sz1e áo2szis áo2sziv áo2szú á1ó áó2ha áó2va á1ö áö2le áö2mö áö2re áö2rö á1ő áő2sz á2p1a2dot ápa1tr ápa3u2 á2p1ág áp1áll áp1áta áp1dr áp1eg áp1e2l áp1e2m ápe2n á2p1e2s áp1e2t á2p1ég áp1é2te ápi2ac ápi2av á2p1im áp1inj áp1int ápi2t á2p1ita á2p1ín á2poll ápo2r1e áp1őr áp2ro áp1t2r á2p1ug á2p1u2t á2p1úr áp1üg áp1üz á2r1abl á2r1abr á2r1abs ár1adag á2radata á2radatá á2radatb 1áradaté á2radatn á2radato 1á2radatr á2radatt ár1a2gá á2r1ajk á2r1a2kad á2r1a2kas á2r1akc á2r1akna. á2raknát á2r1akt. ár1akti ár1aktí ár1alá á2r1alj. á2r1alja. á2raljak á2r1aljá ár1alk ár1all á2r1alm ár1alt á2r1alv 1á2rama. 1áramai 1á2ramá ára2mál ára2m1el ára2m1érté 1á2rami ára2m1in 1á2ramkö 1á2ramok 1á2ramol 1á2ramot 1á2rams 1á2ramu 1á2ramú ár1ana ár1ang ár1a2no á2r1ant ár1a2pá ár1a2pó ár1aps á2r1a2rá á2r1arc ár1a2ri á2r1asp ára2taj ára2tal ára2tav ára2tál ára2t1inf ár1atlé ára2t1ü2 ár1aty á2r1ábr árá2c árá2g ár1ága ár1ágr ár1ágy ár1á2lo á2r1á2p ár1ár. á2r1á2rak á2r1á2rá á2r1árb á2r1árf á2r1á2ri á2r1árk á2r1á2ro á2r1árr á2r1árt ár1á2ru ár1árú ár1árv á2r1ásás árá2szó á2r1á2ta árát1a2d á2r1átá ár1átb á2r1átc á2r1átd ár1á2t1e2 á2r1áté á2r1átf á2r1áth á2r1á2ti á2r1átj á2r1átk á2r1átm á2r1á2tö á2r1átr á2r1áts á2r1átt á2r1átú á2r1átv ár1bl 1árboc ár1br ár2d1ál árd1ell árd1eme ár2d1é2n ár2d1őr ár1drá ár2dud áre2á ár1e2d á2r1e2g ár1ej á2r1e2l árelői3r áre2ma áre2mél áre2n ár1ene ár1eng á2r1e2r ár1e2sé ár1e2ső ár1evé á2r1ex ár1ébr ár1éde á2r1é2g ár1éj. ár1é2je ár1éjs á2r1é2ke á2r1é2ké á2r1éks á2r1é2l á2r1é2ne á2r1ép á2r1éré á2r1é2ri ár1éss ár1ész á2rétk á2r1étr á2r1étt á2r1étv á2r1év. áré2vek á2r1évk á2r1évr ár1fl ár1f2r árgás1s ár1gl ár1g2r ár2gyárv ár2gyir ár2gyol ár2gyó á2r1i2de á2r1i2dé á3r2i3dőtl ár1ifj ári2g á2r1iga á2r1igá á2r1ige á2r1ill á2r1i2má ár1imb á2r1i2mi á2rinas á2r1inc á2r1ind á2r1inf á2r1ing ár1inn á2r1int á2r1inv á2rio á2r1i2paro ári2s1e ár1isko ár1iste ár1i2sza á2r1i2ta ár1i2zo á2r1ír ár1ív á2r1í2z árka1k2 1árkádo ár1k2l 1árkok ár1kré ár1k2v árnás3s árnya2n ár2ny1any árnye2l ár2ny1ele ár2nyelő ár2nyem ár2nyes ár2nyok ár2ny1ol ár2nyos ár2nyö ár2nyü ár1odv á2ro2ká áro2k1e á2rokha á2rokm áro2kol á2r1o2koz á2rokre 1á2roks á2rokta á2r1olda ároma2 áro2maj áro2mak áro2m1al áro2m1as áro2már áro2m1ok áro2m1os ár1opt á2r1o2r áro2sas áro2sál áros3s á2r1ostr á2r1osty ár1otth á2r1o2v áróé2r ár1ó2nét ár1ó2név áró1p2 á2r1ó2rak áró2rák á2r1óri áró1ská áró1s2p ár1ö2b ár1öc ár1ök á2r1ö2l á2r1ön ár1ör á2r1ös ár1öv á2r1ö2z ár1ő2r ár1ő2s 1árpa. ár1pl ár1p2r ár1p2s ár2s1ala árs1asz ár2s1ál ár2sed ár2s1e2l ár2sem ár2s1en ár2ses ár2s1é2g ár2sip ár2sirá árs1okt ár2s1ol ár2sóv ár2s1ön árs3s ár1s2tab ár2sut ársza2ké ár2s3zene ár2tado ár2t1aj 1ártalo árta2n1á2s árt1ará árt1a2ris árta3u2 árt1áll ár2t1árn ár2t1á2ru ár2t1e2g árt1elh árt1eli árt1ell árt1eln ár2t1elő árt1emb ár2t1erk árte2s árt1ese árt1esth árt1eti árt1éle ár2t1érd ár2t1érte ár2tid ár2tif ár2t1ins ár2t1int árt1izg ár2tít ár2t1okta ár2top árt1otth ár2t1ön ár2t1ös ár2t1ura árt1u2sz ár2t1ut 1á2ru. 1á2rua áruá2 1á2ru1b2 1á2ruc á2rud 1áruda 1árudá 1á2rue 1á2rué 1á2ruf 1árugy 1á2rui á2ruj 1árujá 1á2rum 1á2run. 1á2runa 1á2runá á2r1und á2runi 1á2ruo 1á2ru1p2 á2rur 1árura. ár1urá 1á2rus árus3s á2rut 1árut. áru2tal áru2tas 1árute áru1tr áru2tun 1á2ruü 1á2ruv ár1u2z 1á2rúé 1á2rúk ár1úré ár1úrf ár1úsz á2r1úta á2r1útb á2r1úté á2r1úth á2r1ú2ti á2r1útj ár1útl á2r1útn á2r1ú2to á2r1útr ár1úts á2r1útt ár1ü2g ár1ü2l ár1ün ár1ür ár1ü2s ár1üt ár1ü2v ár1üz ár1űr ár1ű2z 1árvác ása2b á2s1abl ás1abo ás1a2dat á2s1a2dá ás1a2do á2s1a2dó á2s1a2já ás1ajtó á2s1a2kar á2s1akc á2s1akv ás1a2la ás1alg ás1a2li ás1alj ás1alk ás1all ás1alm á2s1alt á2s1amb ása2n á2s1ana á2s1anó á2s1ant á2s1any ás1a2pá ás1app ás1apu ás1a2ra ás1a2rán á2s1arc á2s1aré á2s1a2ri ás1art ás1arz ás1asp á2sass 1á2satá á2s1atl á2sato ás1aty á2s1a2u á2s1azo á2sábé á2s1ábr ásá2gai á2s1ágb á2s1á2gig á2s1ágk ás1ágn á2s1á2gú á2s1ál á2s1á2p ás1áras ásá2rét ásáró2 ásá2rón 1á2sásb 1á2sási 1ásásk ás1ásv ás1á2ta á2s1átá ás1áté ás1áth ás1áti ás1átj ás1átk á2s1átl á2s1átr ás1áts ás1átt ás1átv á2s1á2z ás1bl ás1br áscsa2p1á2 ás1d2r ás1e2b á2s1e2d á2s1ef ás1e2gy á2s1e2l á2s1e2m á2s1e2n ás1epi ás1erk ás1erő á2s1e2s á2s1e2t ás1e2v ás1ex ás1ez á2s1é2g á2s1éhe á2s1éj á2s1é2k á2s1é2l á2s1é2ne á2s1ép á2s1ér. á2s1érd á2s1é2re á2s1é2ré á2s1é2ri á2s1érl á2s1érs á2s1érte á2s1érté á2s1értő á2s1érv á2s1é2s á2s1é2te ás1étk ás1étt á2s1é2ve ás1fl ás1fr ás1gl ás1gr á2s1i2d á2s1if ási2g ás1iga ás1ige ási2k1e á2s1ill á2s1imá ás1imp ás1ind ás1inf á2s1ing á2s1ini á2s1int ás1inv á2s1i2p á2s1i2rat á2s1i2rá ás1iro ás1irt á2s1isk á2s1ism ás1ist ás1i2sz ás1ita á2s1iz ás1íg á2s1íj ás1íns ásí2r ás1írá ás1író á2s1í2v á2s1í2z ás1kl ás1k2r ás1kv 1ásnu á2s1ob ásoda2 áso2d1al áso2d1an áso2d1as áso2dau áso2d1ál ás1okl ás1okm ás1okta ás1oldó ás1oli á2s1ont á2s1op ás1o2rá á2s1org á2sori á2s1ork ás1orr á2s1ors á2s1orv ás1osz á2s1o2v 1á2sób 1á2sóé 1á2sóg 1á2sói 1á2sój 1á2sók 1á2són ásó1p2 á2sór ás1ó2rá ás1óri 1ásóró á2sós ás1ó2sá 1á2sót á2sóv á2s1ö2k ás1ö2l ás1ön á2s1ö2r á2s1ös ás1ö2v á2s1ö2z ás1ő2r ás1ő2s á1spic ás1p2l á1s2pór ásp2r ás1ps ás1s2k ás1s2p ás1sr ás1s2t ássz2 ás3szab ás3szag ás3szaka ás3szaké ás3száj ás3szám ás3száz ás3sze ás3szél ás3szf ás3szi ás3szí ás3szk ás3szoc ás3szok ás3szol ás3szor ás3szó ás3szö ás3szt ás3szú ás3szű ás2teg ást1elem ás2tir ás2t1ös ás1t2re ás1tri ás1tróf á2s1ud á2s1uj á2s1u2r á2s1u2s ásu2t ás1uta á2s1utá ás1utó á2s1u2z ás1úr. ás1úrn ás1ú2sz ás1úti ás1úto ás1üd á2s1üg ás1üld ás1üle á2s1ün á2s1ür ás1ü2ve á2s1üz ás1űr ás1ű2z á2s3zac á2sz1a2d ász1aga ász1agá á2sz1agy á2szaj á2sz1akc ász1a2kol á2sz1akt ász1ale á2sz1alk ásza2n á2szana á2sz1ant á2sz1any á2sz1ap ásza2s ász1asz ásza2t1e á2sz1au ás3zavar ász1ágg ász1ágy ász1á2lo ás3záp ászá2r1as ász1á2rih á2sz1á2rú ászás1s á2száta á2sz1áz ász1e2b ászebé2 ászeb1éde ász1e2gé ász1e2gy ász1eln ász1elv ász1emb ás3zene ás3zené ász1eng ász1e2p á2sz1erd á2sz1e2ré á2sz1e2s ász1e2t ász1e2v ász1ex á2sz1éj á2sz1ékb á2sz1é2l á2sz1é2ne á2sz1ép ász1éré á2sz1éte á2sz1étt á2sz1éve á2szid á2szif á2sz1ill á2szind ász1ing ászi2p á2sz1ipa á2sziro á2sz1isk á2sz1ism ász1ist ász1ita á2sziz á2szír ász1k2 1ászkái á2szokl á2sz1okm ász1ors á2sz1osz ászó1s2p á2sz1ö2b ászö2l ász1ölt á2sz1ö2r á2sz1ös ász1övé ász1őr ász1ő2s ász3sa ás3zsu ászt2 ász1tr á2szuni á2szur á2szut ász1ú2s á2sz1ü2g á2sz1ün á2sz1ü2z ász1z át1abr át1a2já át1ajk át1ajt áta1kré á2t1akt. á2t1akto át1alh á2t1alja á2t1alm át1als át1a2lu át1alvá á2t1a2ra á2t1ará á2t1arc át1arz áta2sá át1aut át1azo átá2c át1ág. át1ál átá2p át1ápo á2t1á2rad á2t1á2rai át1áram á2t1á2rá á2t1árb á2t1árn á2t1á2ro á2t1árt á2t1á2ru 1á2t1ásás átá2s3z á2t1átf á2t1átu át1átv át1bl át1br 1átbu át1dr át1e2c át1ej át1ell át1eln át1elv á2t1emb át1eml át1eng áte2rá áteri2 áte2rik át1erő át1ex át1é2d átée2 áté2g át1ége át1égé áté2kaj áté2k1a2l áté2kas áté2ke áték1em áték1es áté2kol áté2k1ü át1é2l áté2p á2t1érb á2t1é2ri á2t1érr á2t1érz áté2t1á2 1átfés át1fr át1gr át2hi. át2hia 1áthid áti2ag áti2al áti2d áti2g á2t1igé át1ill á2t1ing át1i2pa á2t1irá át1isk át1ist á2t1i2ta á2t1izé á2t1izm á2t1i2zo át1íg á2t1í2r át1í2v 1átkel át1kl át1k2r átle2g1 átlege2 átműt2r át1oj áto2kol át1okol. át1o2koz át1okta 2átolj 2átolt át1oml át1ont át1op áto2ran áto2ras áto2rác áto2rál áto2re áto2ris áto2r1ol át1orzá á2t1o2x átói2ko átó1p2 át1óri át1öb átö2l át1ölé át1öml át1ön át1öt á2t1ö2v át1ö2z át1ő2r át1pl át1pr át1ps át2ril át1sk át1sl át1sm át1sp át1sr át1st 1átszű 1átteki át3t2é át1t2r á2t1udv á2t1ug á2t1uh á2t1uj átu2min átu2n á2t1u2r átu2sze á2t1u2t át1új á2t1úr. á2t1úrb á2t1úrh át1úri á2t1úrn á2t1ú2ro á2t1úrr á2t1ú2s á2t1üg át1ül á2t1üt á2t1ü2v át1űr 1átvár 1átvev á1u áu2ga áu2go áu2ná áu2no áu2nó áu2nu áu2sz áu2ta áu2tá á1ú áú2sz á1ü áü2ge áü2gy áü2le áü2lé áü2lö áü2lő áü2lü áü2rí áü2té áü2ti áü2tö áü2tő áü2tü áü2vö á1ű áv1adm á2v1ajk áv1akt áv1alk áv1alt áv1asp áva1st áva1sz2 áva1t2 á2v1au áv1azo áv1áls áv1áte áv1átf á2v1áth á2v1átj á2v1átk á2v1átu ávegész1 á2v1e2l ável1é áv1é2de ávé1dr á2v1é2ri á2v1érte á2v1érté áv1fr á2v1iga á2v1igé áv1ind á2v1inf á2v1ing á2v1int á2v1i2rá á2v1iro á2v1i2si áv1isk áv1ism áv1izm áv1izo áv1ír á2v1ob á2v1olv á2v1op á2v1osz áv1órá áv1ör áv1ös áv1öv áv1őr áv1pr áv1sk áv1sp áv1st áv1tr á2v1ug á2v1ur á2v1ú2sz ávú2t á2v1úti á2v1úto áv1üg áv1ü2z á2z1abl áz1abs áza2dal áza2d1e2 áza2dott áza2dü áz1ajt áz1akc á2z1a2kó á2z1akt. á2z1akta áz1aktá á2z1aktu áz1a2lap á2z1a2le á2z1alk áza2n á2z1ana á2z1ano á2z1any á2z1a2p áz1a2rá áz1arc áz1arm á2z1assz á2z1aszt áza2t1a2l áza2tan ázate2 áza2t1el áza2t1ér. áza2t1érv áza2tés áza2tik áza2tí áz1aty á2z1a2u á2z1á2g á2z1á2l á2z1á2rai á2z1á2rak á2z1á2ram á2z1á2ras á2z1á2rat ázá2rár ázá2rát á2z1árb á2z1árc á2z1árd á2z1á2ré áz1árf á2z1á2ri á2z1árjáb á2z1árjáv á2z1árka á2z1á2rokk á2z1á2rokr á2z1árp á2z1árrá áz1á2runkn áz1á2runkr ázá3rus. ázás3s á2z1á2ta á2z1á2t1á áz1átb á2z1á2t1e2 á2z1áté áz1áth á2z1átr áz1áts á2z1átü á2z1áz áz1bl áz1d2r áz1ef áz1e2g áz1e2m áz1ep áz1e2r áz1e2s áz1e2t áz1ex áz1e2z á2z1ég á2z1é2l á2z1é2p á2z1ér. á2z1érő á2z1érte á2z1érté á2z1értő á2z1érz á2z1é2te á2z1éve áz1évi áz1fl áz1fr áz1g2r á2z1i2d á2z1igé á2z1i2kon á2z1ill á2z1imá á2z1imi áz1imp á2z1inf á2z1ing á2z1inj á2z1int á2z1i2par áz1irá áz1iro ázi2s1e ázi2sir ázi2s1í2 ázis3s ázi2s1ü ázi2szó ázi2z áz1izm áz1izo áz1íj áz1í2v áz1k2l áz1k2r á2z1olda á2zoltal á2z1oltó áz1oml á2z1ont á2z1o2r á2z1osz ázói2ko áz1ól. áz1ó2rá á2z1óri ázó1s2p ázó1sz áz1öb áz1öd áz1ö2l áz1öm áz1ön áz1ös áz1ö2t áz1ö2v áz1öz áz1ő2r áz1pl áz1p2r á2zsab á2zs1a2d á2zs1a2g ázs1ajt á2zs1akn ázs1ala ázs1alk ázs1all á2zs1amu ázs1any á2zsar ázs1ará á2zsat á2zs1au á2zs1áll á2z3sár. á2zse áz3seb ázs1e2c ázs1ef ázs1eg ázs1e2l ázs1e2m ázs1es á2zséj á2zs1é2k ázs1éne á2zs1ére á2zs1éri ázsé2t ázs1éte á2zsia á2zsiá á2zside ázsi2g á2zs1iga ázs1igá á2zsige á2zsimm á2zs1ing á2zs1int á2zsinv á2zsió á2zsip ázs1isk á2zs1ita á2zsiz á2zs1í2 áz3sor áz3sóh ázs1ó2r á2zsö á2zs1ő2 ázs1s á2zs1uj á2zs1ut á2zsúto á2zsü ázs1ü2v á2z3sű áz3szá ázs3zon áz1t2r á2z1ud á2z1ug á2z1uj á2z1u2r á2z1ut á2z1új á2z1úr á2z1ü2g ázü2l áz1ür áz1ü2z ázy1i áz3zse 2b. 1ba baa2d ba2b1a2dat ba2b1ajk baba1k2 ba2b1ara ba2b1arc ba2b1aszt ba2b1ábr babá2c ba2b1ácsi ba2b1ág bab1áll ba2b1á2ro ba2bátv ba2b1érc babé2t bab1éte ba2bév ba2bik ba2b1i2na. ba2bola bab1old ba2b1ó2r ba2b1ult ba2bü ba2c3hu ba2csor 2b1a2dag ba2das 2b1a2dato ba2d1ár ba2deg ba2d1e2s ba2dog 2badomá ba2dód ba2dói ba2dój ba2dók ba2dót ba2duj ba2dús baegész1 bae2r baé2r ba1fl ba1f2r ba2gai ba1g2n ba1g2r 2b1agy. bai2z ba2jag ba2j1á2ru ba2j1á2to 2bajkú ba2j1ó2r ba2jü ba2jű ba2k1a2pó 2bakas ba2kaszt 2ba2kác bak1á2cs bak1áll 2bakc ba2keg ba2k1ér. ba2k1éri bak1k ba1k2li ba1klu ba2k1o2v ba1k2ri bak1t2 2b1aktu baku2r bak1ura bak1urá ba2ky 2b1alany 2b1a2lál ba2l1e2s ba2l1í bal2lak bal2lan bal2lál bal2l1ás bal2láz balle2 bal2leg bal2l1el bal2lem bal2les bal2l1é2l bal2lin bal2lór bal2té bal2tiz ba2lud 2b1amp 2banal 2b1a2nat banás3s ban2c1e banc3s 2b1angy ban2kab ban2k1a2d ban2k1a2l ban2kar banke2 ban2ker ban2kép ban2kérd ban2kir ban2kol banku2 ban2kut ba2nyó bao2k bao2l baó2r ba1p2l ba1pro 2b1arc. 2b1arcé 2b1arcn 2b1arco 2b1arcr bar2csad bar2csal bar2csan bar2csö 2b1arcú 2b1argu baro2ma 2b1arté baság1g ba2seb ba1slá ba1s2m ba1sni 2b1aspe ba1s2pó bas3sze ba1s2ta ba1s2tá ba2t1esti ba1t2rá ba1tre ba1tré ba2ud 2b1a2ul bau2r 2b1a2vat ba1yi 1bá bá2bal bá2b1ass bá2bál bá2b1es bá2bik bá2bö bá2b1ü bá2csor bá2csü 2b1á2ga b1á2gú bá2gyal bá2gyar bá2gyott bá2gyö bá2gyú bá2j1e2 báj2n1á bá2j1ó2 bá2j1ö2 báj2t1a2k bá2jü bákos1 bá2laj bá2l1ap bá2l1e2 bálé2 bá2l1éj bá2lid bá2l1ing bá2l1i2o bál2is 2b1állí 2b1állo 2b1állv 2bálm bá2lö bá2lü bá2lyad bá2ly1al bá2ly1a2n bá2ly1á2z báni2as bán2ré bánya2ié bá2po 2b1á2rad 2b1á2rai bá2r1aj 2b1á2ram bá2rap bá2ras 2bá2ra2t 2b1á2ráb bá2rág bá2rár bá2r1ás 2b1á2rát bár2das bár2d1á bár2de bá2r1e bá2rén 2b1á2riá bár1i2o bá2r1i2p bá2rí 2b1árny bá2r1ó2né. 2báru. 2báruf 2b1á2rug 2b1á2ruh 2b1áruj 2b1á2ruk 2b1árur bár1u2ra. 2bárus 2b1árut 2báruv 2bárú bá2rúr bá2rü bá2s1á2ré bá2se bá2sis bá2sz1ak bá2szan bá2szas bá2sz1ál bá2sz1á2ru bá2sze bá2szil bá2szip bá2szí bá2szö bá2szü bá2t1a2k bá2t1al bá2t1á2 2b1á2t1e2 bá2tö bá2tü bb1a2da bb1add bb1a2kas b2b1alk b2b1als b2b1alu b2b1alv b2b1a2ny b2b1ap b2b1a2ra bba2t b2b1au bbá2gyas b2b1áll bb1álm b2b1áp bb1árn bb1á2ru b2b1á2s b2b1át bb1dr bbe2g b2b1e2kén b2b1elv b2b1emb bb1eng bb1erj bb1ern bb1erő bb1e2rű bb1esté b2b1etn b2b1ex b2b1ég bb1él. bb1éle bb1élh bb1élj bb1éln bb1élt bb1é2lű bb1élv b2b1ép bb1érl b2b1érm b2b1érte b2b1érté bb1érv b2b1évi bb1fr bb1i2de b2b1iga bbigaz1 bb1illa b2b1ind b2b1int b2b1inv bbi2tat b2b1itt b2b1í2r b2b1ív bb1kl bb1kr b2b1okt bb1oltá b2b1olv b2b1op bb1ott b2b1ób bb1ó2r b2b1ö2m bbö2r bb1örö b2b1ös bb1őri bb1őrz b2b1ő2s bb1pl bb1pr bb1sk bb1sp bb1st2 bb1t2r b2b1ud b2b1u2g b2b1uj bbu2r bb1ura b2b1u2t bbúgás1 b2b1új b2b1ú2s b2b1üg b2b1ür b2b1üz bb1ű2z bb2ví bc3sz bda2cs1a2pá bda1d2 bda1p2 bda1s2 bdasz2 bda1t2 bdé2n bd2rá bd2ro bd2ró 1be be2ac bea2d bea2j bea2k bea2l bea2n bea2r bea2s bea2t1e be2ati bea2tin be2atk be2atl bea2v beá2j beá2s beá2z be1bl be1b2r be2csar be2csár be2csért be2cs1é2te be2dén be2dz bee2l bee2s beé2r be1fl be1fr begés3s begész1 be1g2r be2gyel b1egyl bei2g bei2s beí2r be2j1elt 2bejt 2b1e2ke. beke2csa 2b1e2kétő be1k2ré be1kri be1kró be1k2v be2lál beleí2 bel1els be2lemz bele1p2r belet2 bele1tr be2l1é2k be2l1ér. be2l1é2ren be2l1érr be2lí be2lof be2löl 2b1e2lőa be2lőr bel1p2 2bemel 2b1eml b1e2mus be2n1ál be2n1ék ben2n1a2 ben2ná ben2n1e2r ben2nég be2ny1e2g beo2k beo2l beo2m beó2v beö2r be2pe. be2ped 2b1e2pé be1p2l be1p2r be2r1ad ber1alá ber1all bera2n ber1any be2r1a2p be2r1a2r ber1ass be2r1a2t be2r1av be2raz be3rág ber1áll b1erdei 2berdő ber1egé ber1egy be2r1e2ke. bere2k1eg be2r1ekék be2r1ell be2r1elm be2relődö be2r1előn be2r1e2mé be2r1eml be2r1e2pé be2r1e2r ber1e2szü be2r1e2tet be2rég be2r1ékk ber1éss ber1ingü be2rism be2r1ist ber1iszo ber1old be2ror ber1osz be2ról be2r1ó2r be2rő 2b1erőd ber1ős. ber1ő2se ber1ő2si ber1ő2sü ber3s2 berta2n1á2s be2r1ub be2r1un be2rur be2r1ut be2r1ü2g berü2l be2r1üld be2r1ülé be2r1ült be2sem 2b1esél 2b1e2sés be1ska be1ská be1s2l be1s2m 2b1e2ső be1s2p2 bessz1a bessz1á be1s2ta 2beste 2besté be1s2til be1sto 2b1e2szet 2b1e2szét b1eszm besz2t1a2 besz2t1á beteg1ér. beté2t1elb beté2telk be1t2hi be1t2ra be1trá be1t2ré be1t2ro beu2g beu2t beü2t be2vező 2b1e2vol 2b1e2vő 2b1ezr 1bé 2b1ébr bé2csú bé2d1as bé2d1á 2bédé 2bédh 2bédj 2bédl bé2d1o bé2dö 2bédr 2bédü 2bédv bé2gő bék1alk 2b1éksz bé2l1akt bé2l1a2n bé2l1a2p bé2l1a2r bé2lál bé2l1áto bé2l1á2z bé2l1ed bé2l1e2g bé2lek bé2l1e2r 2b1é2let bé2l1é2j bé2liz bé2lí 2bélj bé2l1o bé2ló bé2lö 2b1é2lő bélt2 bél1tr bé2lul bé2lú bé2ly1ec bé2l3yen bé2lyin bé2lyö bé2pí bé2pü 2b1é2rai bé2r1aj bé2ral bé2r1a2n bé2rap bé2rar bé2rá 2b1éráb 2b1éráh 2b1éráv 2b1érde bé2reb bé2r1eleme bé2r1e2lemé bé2r1e2lemh bé2r1e2lemk bé2r1e2lemn bé2r1e2lemr bé2r1ell bé2relm bé2r1elői bé2r1eng bér1essz bé2r1esz bé2r1id bé2rir bé2rí b1érni bé2rö bér1s bért2 2bértel 2b1értés bér1tr bé2rut bé2rú bé2sz1a2 bé2szá bé2sz1o béta1s 2bétel bé1t2h 2b1étk 2b1étt 2b1év. bé2vek 2b1é2ven 2b1é2ves bé2vet bé2vi. 2b1évn bé2zsú bfej1els bfe2len bfé2n bf2la bf2rá bf2re bf2ri bf2ro bg2ra bg2rá bgyökö2 bgyö2k1öl 1bi bia2d bi2ae bi2ag bia2la bia2v bi1br bi1by bic3sz bida2 bi2d1ad bi2d1al bi2deg bi2del 2b1i2dő bi2ed bie2l bi1fr bi2gaz 2b1i2gáj 2bigén 2b1i2hat bik1ala bi2k1ál bi2k1em bi2kik bi1klu bi2k1ő2 bi1k2ro bik1s bil1ima bil1int bilis3s 2billé 2b1illő 2billu bi2lü bi2ma. 2b1i2mi 2b1imp bi2nab 2b1i2nad bi2naj 2b1i2nat. bi2n1árb 2b1indá bi2n1éte 2b1inká bin3n bi2nü bi1ny bi2oa bi2oá bi2ob bi2oc bi2od bi2oe bi2oé bi2of bi2oge bi2ok bi2ol bi2om 2b1i2on bi2or bió2r bi2par bi1p2l bi1pr 2b1i2ram 2b1i2rat 2b1i2rán 2birkái 2birodá 2b1irr 2b1irtá 2b1irtó bis2hi 2b1i2si 2bism bi2sö bi1s2p bis3s bi1s2to bit1ará bi2t1e2g bit1elh bit1elr bit1elt bite2r1a bi2t1ing bi2t1int bi2t1i2o bi2t1on bit1t2 bit1ura bi2t1ut biú2s bi2var 2b1i2vás 1bí bí2ja bíróé2r bí2ve bí2vé bí2vű 2b1í2zü bkés3s bk2li bk2lu bk2ra bk2rá bk2re bk2ré bk2ri bk2rí bk2ro bk2ró 1b2labl blai2k blak1a2d bla2kal bla2k1an bla2k1átm bla2k1átt bla2kem bla2kik bla2k1ol bla2kü blap1e bla1p2l bla1s2t blás1s bl2be ble2r1i bles2 ble2t1ak ble2t1a2n ble2t1á2 ble2t1e2l ble2ter ble2tesz ble2tél ble2t1érd ble2t1étk bletigaz1 ble2t1o ble2tó ble2t1ö2 ble2tu ble2tüz bleü2 bleves1s bl2he bli2af bli2as bli2of b1ljana bl2ne 1b2lok blok2k1ö2 blo2n1á blon3n b2l1őzé bl2re bl2rő bl2tő blu2esz 1bo bo2aá bo2ab bo2ad bo2ae bo2af bo2ah bo2aj bo2am bo2ar bo2at bo2av bo2c1ak bo2ce bo2cé bo2c3h bo2csé bo1dy bo2ei bo1fl bo2g1a2k bo2g1a2t bo2g1á2c bogás1s bo2g1e bo2g1osz bogó2szá bo2gyo boka1p 2b1o2kí b1o2koz bok2szak bok2szal bok2sz1ál bok2szel bokszé2 bok2szél bok2sz1in bok2szó bok2sz1ő 2b1okta 2bolaj. bolás1s 2b1oldó 2b1o2lim bolo1g2 bol2t1e bol2t1ö2 bol2t1ü2 2bolvas bona1 bon1ava bon2can bon2c1e bon2ch 2bond bo2n1e2 bo2n1ér. bo2n1or bon2t1i bo2nü bo2og bo2ok bo2om bo2ot bo2pe bo2r1a2d bo2r1aka bor1akk bo2r1akv bo2r1a2l bora2n bor1any bo2rar bor1asz bor1atr bo2r1au bo2r1av bo2raz bor1ács bo2r1áll bo2r1áz bor1d2 bo2re bor1e2c bor1el bor1e2r bor1es bor1f2 borfi2úké bo2r1i2ko bo2r1il bo2r1ing bo2r1int bo2r1isk bo2r1iss bo2r1ist bo2r1itt bo2r1iz bor1k2 2b1ornam bo2r1ond bo2r1ó2r bo2rö bo2rő 2b1orr. 2b1orrú bor2s1eprű bor2sors bor1str bor2sül bor2süt bor1tre bor1tré bo2rü borvíz1 bor2z1á2rak bor2zsa bor2z3se 2b1oszt bo2t1a2g bo2t1al bo2tar bo2tas bo2t1a2u bo2t1ác bo2tár bo2t1e2 bo2t1il bot1inf bot1int bo2t1i2p bo2tí bo2t1ó2 bo2tö bo2tur botú2 bo2túr bo2tü bo2tű bo2ui bo2ul bo2ur bo1ya bo1yá bo1yé bo1yi bo1yo bo1yu bo2zar bo2zál bo2z1e2 bo2zid bo2z1i2p bo2z1ir bo2zí bo2z1old bo2z3s bo2zü bo2zű 1bó bóa2d bóá2g bóá2r bó2bé bó2cal bó2ch bó2cü bó1fl bó1kré bóli2a b1ólm bó1p2l bó1p2r bó2r1ad bó2r1an bó2rat 2bórá bó2rás bór1ásv bó2reg bó2rel bó2r1in bó2riz bó2r1ol bóró2 bó2rós bó2rö bórt2 bó2rü bó1s2p bó1sz 1bö bö2ch bö2lá 2bölb böl2csü 2b1ö2lér 2bölhö 2bölig 2bölk b1ölkú 2bölr 2b1öltö 2böltő bö2lú bö2lyökö b1öml bö2ná 2b1önt bö2ra bö2r1e bö2ro 2b1össz 2b1ötl 2b1öts bö2ve 1bő bő2r1a2 bő2r1á2 bő2r1e2g bő2r1e2l bő2r1em bő2r1en bő2r1e2r bő2r1é2g bő2rék bő2r1és bő2ril bő2r1ing bő2rip bő2r1i2s bő2riz bőr1izg 2bőrl bő2r1o2 bőr1öl bő2rő bőrren2 bőr1s2 bő2r1u bő2rú bő2r1ü2g bő2r1ü2l 2bősi bp2la bp2lá bp2le bp2re bp2ré bp2rí bp2ro b1proj bp2ró bra2k1á2 bra2kös bra1p2 1braty brá2nag brá2nas brá2n1át bránt2 brá2sz1ál brá2sze b2ric bri2da bri2dá bri2der 1b2rig bri2no bri2ód bri2óf bri2óm bri2tel b2rosú bró2m1a bró2me 1b2rum bsé2g1el b1s2ká bs2lá bs2pe bs2pi bs2po bs2ta bs2tá bs2ti bs2tí bs2tú bszá2r1a2da bsz2f b1sz2k bsz2tá btermo1 btermosz2 bt2rá b1t2re bt2ré b1t2ri b1t2ro b1t2ró 1bu bu2ch 2b1udv bué2r bu2g1i2 bu2il 2b1ujj. 2bujja. 2bujjad buj2j1a2da 2bujjai 2bujjak 2bujjam 2bujjas 2bujjat 2b1ujjá 2bujjb 2bujjc 2bujjd 2bujje 2bujjé 2bujjf 2bujjg 2bujjh 2bujji 2bujjk 2bujjl 2bujjm 2bujjn 2b1ujjo 2bujjp 2bujjr 2bujjs 2bujjt 2bujju 2bujjú 2bujjv buk2j1e bu2maj bu2mel bu2m1i2k bu2m1ina bu2mis bu2mol 2b1ural b1urb 2burn 2b1u2rú bu2se bu2sin bu2sol bu1s2p bus3sze bu2szab busz1aj bu2szal bu2szas bu2sz1ál bu2sz1á2rak bu2sz1árn busz1en bu2sz1él bu2sz1é2p bu2szid bu2sz1il bu2szim bu2szin bu2szip bu2sziz buszí2 busz1íj busz3s bu2szü 1bú bú2jí 2búr. 2b1ú2ri 2búrt 2búsz bú2szá b1ú2ti b1útm 1bü bü2dü bü2ge bü2gy bü2ku 2b1üld bü2l1é2n bü2ne 2bürü 2b1ü2te 2b1ü2té b1ü2tő 2b1ü2ve bü2ze 1bű bű2na bű2ná bű2nel bű2nem bű2nes bű2n1e2t bűn1n bű2no bű2nó bű2n1ő2 bű2nu bű2nű bű2ri bű2v1e2 bű2z1a2 bű2z1á bű2zo bű2z1ő bű2z3s bvá2nyad bvá2nyí by2te 2c. 1ca 2c1abl ca1b2r ca2cél ca2ch ca2dás 2c1a2dó ca2es caéne2 ca1fro 2c1agg ca2gya cagy1a2d ca2gyu 2c1ajk 2c1a2kad ca2kác ca2k1áz 2c1akc cak2kol cak2k1ö ca1kri cala2g1 ca2lan ca2l1a2s 2c1albu ca2l1este ca2l1é2l calé2t cal1éte ca2lim ca2l1ip cal1osz cal1p cal1s ca2lü ca1ly ca2nal ca2nar 2c1a2ni can2ne caó2r ca2pó ca1p2ró ca1p2s ca2ran ca2rán 2c1arc ca2ris ca1s2p 2c1assz cast2 ca1sto ca1str 2c1aszt ca2tau ca2tem 2c1atl c1a2uk cau2n ca2vat 2c1a2zo 1cá 2c1ábr cá2ga cá2gú cá2gy cá2la c1állá 2c1álm cá2ne cá2nét cá2nir cá3p2a3 2c1á2po 2c1á2rad 2c1á2rak cá2r1as cá2ria cá2riá cá2r1i2n 2cárk 2c1árp 2cáru. 2c1á2ruh 2cárus cá2sás 2c1á2só 2c1ásv 2c1á2szai 2c1á2szo 2c1á2t1a2 c1áth 2c1á2t1i2 2c1átm 2c1átr 2c1átt 2c1á2tü 2c1átv cb2lo cb2ra c2c1a2j c2c1ak cc1alb cc1a2ny c2c1a2r c2c1au c2c1ág c2c1ál cc1bl cc1ef c2c1elm c2c1ember c2c1ép c2c1ér. c2c1érte cc3he cc3hí c2c3ho cc3hő cc3hú c2c1i2m cci2na. cc1ing cci2óv cc1i2pa cc1iro c2c1i2z cc1ír cc1kl cc1k2r cc1oá c2c1ov cc1ön cc1ös cc1öz cc1pl cc1pr c2cs c3csap c3csar ccs1as c3csat ccs1ál c3csáp ccs1ás ccs1átl ccs1eg ccs1elem ccs1ell ccs1elv ccs1embe ccs1eml c3csep ccs1él ccs1érté ccs1iv c3csop ccs1ork cc3soro ccs1ö2l ccs1önt ccs1s ccs1ut c3csú c3csű cc3sza cc3szá ccs3zen cc3szó cc1új c2c1üg cc1ür cc3zá cc3ze cc3zs cda2l1é2 cda2l1i cde2m1e2ké cde2m1el cd2ra cd2rá 1ce cea2l ce2at ce2au ceá2r ce2béd ce1bl ce2ch cec3he 2c1e2dz ce2gas ce2g1é2k cegés3s ce2gina ce2gor ce1g2rá ce2gu ce2gú c1egy. c1egyb ce2gyen c1e2gyi c1egym c1egyr 2c1egys 2c1e2ke. ce1kl 2c1elad 2c1e2lág cel1ér 2c1elf 2c1elha 2c1eljá 2c1e2los c1e2lőa 2celődöt. 2c1e2lőf 2c1e2lőí c1e2lőő 2c1első 2c1eltá c1elto 2c1elvá 2c1e2melő 2c1eml cenc1c cen2c1eg cen2c3s 2c1eng cen2s1ég cen2tau ceo2l ceo2r 2c1e2pe. 2c1e2pi ce1p2r cep2sz1a2 cep2sz1é2p cep2szi cep2t1a2 cep2t1ér. cep2tim cep2t1ol 2c1e2rej ce2róz 2c1e2rő cer2t1a2 certá2 cer2tár cer2teg cer2t1e2l cer2t1emb cer2t1est cer2tél cer2t1én cer2t1ol cer2t1ö cer2tu certü2 cer2t1üz ce2sem 2c1e2sés 2c1e2ső ces2t1é2j ces2t1ék ce1stra ce2t1e2g ce2t1essz ce2t1esz ce2t1é2t 2ceth cet1ill ce2t1i2n ce2tiz 2cetn 2ceton ce1t2ra ce2t1us ce2tűd cetű2z ceü2t ce2vés ce2vő 2c1e2zer 2cezrede 1cé 2c1ébr cé2dél cé2g1a2 cé2g1á2 cé2g1eg cé2g1e2l cé2ge2r cég1ere cég1eré cé2g1esem cé2geté cé2gető cé2g1ék cé2gép 2c1é2gés cég1g cé2g1i2d cég1iga cé2gigé cé2gim cé2gir cé2g1iz cégo2 cé2g1ok cé2gol cé2gó cé2gö cé2g1u2 cé2gú céha2 cé2hal cé2han cé2har cé2hed cé2h1e2g cé2hir cé2hu cé2hú 2c1éks cé2la cél1a2n cé3lap cél1a2r cé2láb cé2lál cé2l1á2r cé2l1á2t cé2le. cé2led cé2leg cé2lei cé2lek cé2l1e2l cé2lem cél1emb cé2len cé2l1er cé2l1e2s 2c1é2let 2c1é2lez cé2léb cé2l1é2k cé2lénk cé2lép cé2lére cé2lés cé2lim cé2lin cé2lir cé2l1is cé2liz cé2lí cé2ló cé2l1ö2 cé2l1ő2 célt2 cél1tr célu2 cé2l1ut cé2lü 2c1é2lű cé2pí cé2pü cé2rag 2c1érd 2c1é2rés cé2rin 2c1érint cé2ris cér1s 2c1érté 2c1értő. cé2rú 2c1érz cés3s 2c1észh 2c1étk 2c1étt 2c1év. 2c1évad 2c1é2ve. 2cévei 2c1é2vek 2c1é2ven 2c1é2ves 2c1é2vet 2c1é2vét cé2vi. 2c1évn 2c1é2vü cf2ló cf2ra cf2ri cf2ro cg2ra cg2ri c2h 1cha c3had 2c3haj 2cham 2chang 2c3harc 2charm 2chatá 2c3hav 1chá 2c3hám c3hány c3ház ch1bl 1che 2c3heg 2chev 2c3hez 1ché 1chi 2c3hib 2c3hió 2chitel 2chitet c3hiú 1chí 1cho cho1d2 2c3hor 2c3hoss 1chó 1chö 1chő ch1pr ch1sc ch1sp 1chu chu2r 2c3huz 1chú 1chü 1chű 1ci ci2aa ci2aá cia1b2 ci2aba ci2abo ci2abr ci2ac ci2a1d2 ci2ae ci2aé cia1f cia2fag ci2afr ci2a1g2 ci2ah ci2aik ci2aí ci2aj ci2akar ci2akas ci2akén. ci2akó ci2ala ci2alá ci2ale ci2alé ci2alo ci2am ci2any ci2ao ci2aó ci2aö ci2aő ci2a1p2 ci2ar ci2asza ci2aszá ci2aszé ci2aszo ci2aszó cia1t2 ci2ata ci2atá ci2até ci2ato ci2atű ci2au2 ci2aú ci2aü ci2aű ci2av ci2az ciá2lan ciá2nár ci2áó 2c1i2deg ci2deo 2c1i2dé 2c1i2dom 2c1i2dő cie2r 2c1ifj 2c1i2ga. 2c1i2gaz ci2ge. ci1g2r ci2ker cikka2 cik2kaj cik2kan cik2k1o ci1k2la 2c1ikrá ci2l1á2t 2cillu ci2mit 2cimpu ci2n1al ci2n1árt cin1d2 ci2n1e2re 2cinf 2c1inge 2c1ingr ci2nim cin2kac cin2k1a2l cin2kért cin2kol cin2kors cin2kö ci2nö cin2tar cin2t1es cinus1s ci2nü 2c1inv ci2od ci2of ci2og cio1gra ci2oi ci2ol ci3olo 2c1i2onn ci2op cio2v ci2óa ci2óá ci2óc ci2ódar ci2óe ci2óg ci2óí ci2ókal ci2ókam ci2óká ci2óke ci2ó1kl ci2ókom ci2ókos ci2óku ci2ól ci2ómag ci2ómá ci2óné ci2óo ci2óó ci2óö ci2óő ci2ó1p ci2ósá ci2óse ció2s1ér ci2ó1s2ká ci2ószo ci2ótá ci2óú ci2óü ci2ózón ciő2r ci2rat 2c1i2rán 2c1i2rod 2c1irt ci2si. 2c1isko 2c1ism 2c1isp ci1stad ci2sz1i ci2t1aj citá2r cit1ár. cit1ára cit1áré cit1áro cit1érr ci2tik ci2t1ol ci1ty ciumi2 ciu2min ciu2m1io ciumköz1 ciu2t 2c1i2vad 2c1i2vás 1cí cí2ja cí2jé cí2m1a2 cí2m1á cí2m1e2l cí2m1é2l cí2mí cí2mo cí2mö cí2mő cí2mu cí2rá cí2ró cí2vá cí2ve cí2vé cí2zs cí2zü ckaka2 c2k1alj c2k1arc cka2rom c2k1ág ck1áll c2k1árn c2k1e2g cke1p 1cker. 1ckerk 1ckern cké2p1e2l c2k1é2ré c2k1érl c2k1érté ck1fl ck1fr ck1ill c2k1íz ck1kl ck1k2r ck2lu c2k1o2la ck1o2pe c2k1orro c2korru c2korrú 1c2kosak c2k1ou c2k1öb ck1öss ck2reá c1k2ri c1k2rí ck1sp c2k1üg ck1ült c2k1üt c2k1ü2v ck1űr ck2va cli2s clu2b1a cmelo1 cnya2k cnyol2c1an 1co co2at co2áz co2be co2eu co2kar co2ká co2ke co2kél co2kép 2c1o2kí 2c1o2laj co2l1áro 2c1olda 2c1oldá 2c1oldó co2le co2l1ibr co2li2m col1ima co2l1i2na. co2l1ind co2l1ing co2l1inu co2l1o2r 2colvad 2colvas comba2 com2bal com2b1e2 com2biz com2bol com2bór com2bö 2c1oml co2ol 2c1o2pe cop2f1ő co1py 2c1orc 2c1o2ri 2c1orm c1o2rom 2c1orro 2c1orrú 2corv 2c1oskol co2s1o2ku cos3s cos3zs 2c1oszt co2ul co2un co2uv co2vi 1có c1ó2ni 2c1ó2rá c1ó2ri có2vó 1cö c1öltö c1ösv c1ösz c1ötb c1ö2t1e c1ö2té c1ötf c1öth c1ö2ti c1ötk c1ötm c1ötn c1ötr c1öts c1ött c1ö2tü c1öv. cö2zö 1cő cő2rü cp2la cp2ra cp2re cp2ré cp2ri cp2ro cp2ró c2s 1csa 2csabl 2cs1a2dat 2cs1a2dá 2cs1a2dó 2cs1akc csa2lakj csa2lapú 2csaláí 2csalát 2csalb 2cs1alg 2cs1alk cs1alle 2cs1alm csa2lomb cs1amb 2csant csa2pál 2csapka 2csapká csa2por 2csapóká 2csapókr 2csapósab 2cs1arc 2csarg 2csark 2cs1arz 2cs1ass csa2t1ó2r csavar1a2 cs1azo 1csá csá2be 2csáf 2cság cs1á2gak cs1á2gu 2cs1árad 2cs1á2rak 2csáram 2csárat csá2rát 2cs1árny cs1á2ruk 2cs1ásá 2c3sási 2cs1ásó 2csátásás 2csátf 2csátm 2csátr 2csáv. 2c3sávo cs1bl cs1br cs1d2r 1cse 2csebé cs1e2ce cse2csa 2cs1e2dé 2cs1edz cs1eff cs1e2ges 2csegí 2cs1e2ke. 2cself 2csellá 2cselőí 2cselta 2cseltá 2cselv. 2c3sely 2cs1ember 2cs1e2mel 2cseml 2csemu csen2d1ő2 cse2nis cse2n3yen 2csenz cse1p2ré cse2rál cse2r1e2ped 2cseró 2cserő 2cseső 2cseszm cse2tüz 2csevő 2cs1ex 1csé 2cség c3ség. c3ségb c3ségg c3ségh c3ségi c3ségn c3ségr 2cséhes 2cséhs 2cs1é2ka 2cséks 2cs1éle csé2m1a 2csénekb 2cséneke 2cséneké 2csénekk 2csénekr 2cséneks 2csénekt 2csénekü 2csépí 2csépü 2csérde csé2résk 2c3sérv. 2csérvb 2csérvh 2csérvr 2csérvv 2csérz csé2sza csé2tab 2csév. 2csévek 2csévn 2csévr 2csévv cs1fr cs1gl cs1gr 1csi csiá2 2csidő 2csigé 2csimí 2csimog 2csimpo 2cs1i2na. 2csinas 2cs1ind 2cs1inp 2cs1inv 2csiono 2csipí 2csiví 2csivó 1csí 2csíki 2c3sírb 2c3sírj cs1í2ró 2cs1í2v 2csíze 2csízl cs1ízn 2csízt cs1ízü cska1s cskasz2 cs1kl cs1kv c3slág 1cso 2cs1o2á 2csobj cso2k1á 2csokk. 2csokoz 2csolaj 2csolda 2csoldá 2csoldó. 2csoldók 2csoldóm 2csoldón 2csoldór 2csoldót 2csoldóv 2cs1oli 2csolló 2csolvas cso2mor cson2t1a2 2csopc 2cs1orc 2csori 2csork 2c3sorv 2csoszl 2csoszt 1csó cs1ódá csó2kes csó2k1ö2 2cs1óné 1csö 2csökrü cs1öml csön3n 2csör. c3söre 2csössz 2csöv. 2csözön 1cső 3cső. 3csőb csőé2h 2csőrz cső2sz1á2ra cső2szék cső2sző 3csőv c3s2pek cs1p2l csp2r cs1ps cs1sl cs1s2p cs1s2t cs3sz2 cssza2kü c3s2tab cs2top cst2r c3stru 1csu 2csudv 2csug 2c3suho cs1ujj 2cs1una 2csuni 2cs1ura 2cs1u2rá cs1u2tas 2cs1utá cs1utó 1csú csú1p2 2csútn 1csü 2csüd 2csügé 2csügy 2cs1ünn cs1ü2te 2c3süv 2cs1üz 1csű c4s3zac cs3zaj csza2ké cs3zam c3szál c3szám cs3záp cs3zát c3száz c3sz2c c3szer c3szé c3sz2f c3szi c3szí c3sz2l c3szob cs3zokn c3szol cs3zon c3szor cs3zón c3sző cs3zs csz2t cs3zug cs3zú c3szü c3szű c3sz2v ct2ra ct2re ct2ré ct2ri ct2ro ct2rü 1cu cucci2 cuc2cin cuko2r1a cula2te cu2lü 2c1und 2c1u2no 2c1u2ra 2c1u2tá 1cú cú2jí c1úr. c1úrr c1ú2ti cú2to 1cü cü2ge cü2gy 2c1ü2lé cü2lő c1ünn cü2re cü2rí cü2rü cü2te cü2té cü2tő cü2ve cü2ze 1cű cű2ző cva2nem cva2név cve2név cven3n c2z 1cza cza2ib cza2ié cza2ih cza2ik cza2in cza2ir cza2it cza2iv 1czá 1cze 2c3zen 1czé c3zéh 1czi 1czí 1czo 1czó 1czö 1cző 1czu 1czú 1czü 1czű 1czy 2d. 1da daa2d daát1 2d1abla da2c1ir da2cz da2dag dad1ala 2dadato 2d1a2dó da1drá da1dro dae2r daé2d daé2r da1f2l da1f2r da2g1el dag3g 2d1ahh da2ire 2d1a2ján 2d1ajt 2d1a2kad daká2r 2d1akkora d1akku da1kl da1k2ré da1k2ri 2d1aktu dal1a2ga dal1ajt da2lakj da2l1akta da2l1aktá da2laku da2lakú 2d1alakz da2l1a2l da2lapc da2lapk da2lapn da2lapr da2l1aps da2lapt 2d1a2lapú da2lar da2l1asz da2latt da2l1á2g da2l1ál dal1á2rak dal1árá da2l1árb da2l1árn da2l1árr dal1á2sz da2l1áti dale2l dal1elá dal1ele dal1ell dal1e2sé dalé2ke2 dal1él. da2l1é2ne da2l1ér. dal1f2 da2lid da2l1i2ko da2l1ikr da2l1i2m da2l1i2nát da2lind da2l1inf da2l1ing da2l1inj da2l1int da2l1i2nu da2l1itt dali2z dal1izo 2d1alji dal3l 2d1allo dalo2m1e dalomo2 da2l1or da2lőr dal1p2 dal1ud da2l1ur da2l1u2s da2l1u2t dalú2t da2l1úto dal1útr da2lü 2d1amc 2d1amf 2d1a2nal 2d1ang d1a2nyag 2d1a2nyó dao2k daó2r daó2v 2d1a2pa. 2d1a2pai da2paké da2páb da2pád da2páé da2páh da2pái da2pák da2pám da2pát da2páv 2d1apj da1p2l da2pó. 2d1app da1pro da1p2s 2dapt dara2be da2r1a2dó dar1ala da2rant da2r1azo da2r1áta da2r1átf dar2c1e2 dar2c3h dar2cso 2d1arcú dar2d1a2l dar2d1á dar2del dar2d1es dar2d1ó2 da2r1el da2r1il darus3s dar1uta da2r1ü da2sál da1s2l da1spe 2d1assz da1s2ta da1szl daszt2 dasz2tá 2daszú da2t1akt da2t1akv da2t1a2la da2t1alk dat1apu dat1ará dat1ass da2t1att da2taz da2t1áll da2t1árad datá2ramm datá2ramr da2t1áta da2t1átá da2telem dat1e2l1é dat1elí da2t1elk dat1ell da2t1elő dat1elt da2t1é2g da2térte da2t1érté da2t1érth da2t1érv da2tid dati2k da2t1iko da2tim da2t1inf dat1inte dat1ist da2tiz da2t1ír dat1íve dat1k2 2d1atlas da2t1osz da2tóc 2datóm da2t1ó2r dató2s dat1ósá dat1t2 da2t1u2t da2tút da2tűr da2tya da2tyá 2d1a2uk da2up 2d1a2ur dau2s dau2ta da3u2tóp daü2t daü2z 2d1a2vat 2d1avv da1ye da1yé 2d1az. da2zál 2d1a2zé da2zok da2zon 1dá 2d1á2bé 2d1ábr dá2c3ho dá2fá dá2ga dá2gá dá2gú 2d1á2gy dá2lál dá2lár dá2l1e 2d1állí dá2lü dá2ly1a2n dályú2 dá2ly1ús dámu2 dá2m1ut dá2m1ú dá2ny1a2d dá2ny1al dá2ny1a2n dá2nyaz dá2nyó dá2po 2d1á2rad dá2r1ag 2d1á2rai dá2r1a2j dá2ral 2d1á2ram dá2r1a2n dá2r1a2p dá2rar dá2ras dár1ass dá2rat dár1atk dá2rá dár1ál dá2r1e2 dá2réb 2d1á2ria. dá2rij dá2ril dá2r1i2p dár1isk dár1ism dá2rí dá2rod dá2r1ond dá2r1ot dá2rö dá2rő dár1s2 dárt2 dár1tr 2dáru. dá2ruk dáru2s1ág. dáru2s1á2ga dá2rú2 2d1árú. dá2rü dá2rű dá2s1a2d dá2sal dá2sar dá2s1á2g dá2s1árad dá2s1árh dá2s1á2ru d1á2sás dását1a2 dá2s1e2 dásfé2l1é2v dá2sim dá2sis dá2sol dá2sor dá2só2 dás1ór dá2sö dá2ső dást2 dás1tr dá2sut dá2s1ü2 dá2szag dá2szaka dá2szal dá2szar dá2szav dá2sz1ál dá2szárk dá2sz1á2ro dá2sze dász1el dász1em dász1er dá2széb dá2szip dá2szir dá2szis dá2sz1í2 2dászkái dá2sz1ö dá2sző dász3s dá2sz1us dá2sz1ú dá2sz1ü2 dá2sz1ű 2d1á2ta dát1al 2d1á2tá 2d1átd dá2t1e2 2d1á2té 2d1átf 2d1á2tí 2d1átj 2d1átk 2d1átm 2d1átr 3dátu 2d1á2tú 2d1átv dba2l1 db2lo db2lú db2ro db2ró dc2lu dcsa2p1á2g dd1elh d2d1i2d ddí2s d2d1o2d dd2rá dd2ró d2dz d3dzs 1de de2aa de2aá de2ac dea2d de2ae de2aé de2agy de2ah de2aí de2ala de2alá de2alo de2am dea2n de2ao de2ap dea1sz2 de2aszf de2at 2d1e2bé ded1ell 2d1e2dén de2d1ó2v de1dra de2d1ú2 2d1e2dz de2ep dee2s deé2r 2d1eff de1fr de2g1a2l de2g1a2n de2g1ál de2g1e2l degen3n de2ger de2g1ék deg1éri de2gés deg1éss degész1 deg3g de2giz 2dego de2gor degö2 de2g1öl de2gör de2g1ös 2de2gő 2d1e2gye degyez1 2degz 2d1ehh deho2g de2if dei2g deí2r de2k1a2k de2kaz de2k1e2g de2kellen de2kep dek1e2rő de2k1esz dek1ékb dek1é2ke de2k1él de2k1éri de2kérte de2k1érté de2k1érv de2k1érz de1klu dek1old dek1s deksz2 2d1elad de2lef 2d1e2legy dele2m1a dele2má dele2meg de2lemek dele2mel delem1ele dele2mu 2d1e2lemű 2d1e2lemz dele2t1a2 2d1eleteté 2d1e2l1é2k 2d1e2lél delés3s 2d1elha 2d1elho 2delkezdé 2delkezdő del2lal del2l1an del2l1e2g delle2l del2l1ele del2lelk 2dellená 2d1ellene del2l1ent del2ler del2l1é2j del2l1é2k del2l1in del2l1is del2los del2lór del2lőr 2d1elma 2d1elnö de2los 2delö de2löl de2lőad 2d1e2lőka 2delőrej 2d1elsa 2d1eltett. 2d1eltér 2d1elv. 2d1elvá 2d1elves 2d1elvo 2d1elvű. 2d1elvűe 2d1elvűk 2d1elvűn 2d1elvűr 2d1elvűs 2d1elvűt 2d1elvűv de2mad de2m1a2l de2maz de2m1ál de2mez de2m1é2rem de2m1érm de2mim dem1ing 2demoi dem1p de2mus demü2l de2nal 2d1e2ner denkié2ne de2nol de2n1ó2 dens1s de2od de2of de2o1g2 de2oj de2olo de2om de2ot de2pe. 2d1e2pé de1p2re de1pro de1p2s de2rad der1aka de2rala de2r1a2n de2r1ar de2r1á2g de2r1á2r de2rás der1ázt 2derdő dere2c 2deredm 2d1e2reje 2derején 2derejér 2d1e2rejét de2r1e2kei der1e2le der1ell der1e2lő der1elt de2rer de2r1e2ső de2r1él de2rid de2r1il de2r1i2m de2r1in de2r1i2p de2r1i2s der2nék de2r1osz de2r1ó2r de2rő d1erő. der1ős. d1erőt d1erőv der1sp deru2 de2rut de2r1ü2g de2r1üld der1üle der1ültet dervis1s 2de2s1a2 2desg de2sip 2deskü 2destes de1sto de2sur desú2 de2s1úr 2d1eszm de1sz2ta de2szű. de2t1ék de2tika de2tiká 2d1e2vő 2d1evv de2xa dexi2 de2xin de2xiz de2xí de2x1o de2xö 2deza de2zak de2zér de2zil de2zin de2z1or dezőe2 dezőkész1 2d1ezr 1dé 2d1ébr dé2dap dé2d1ő dé2du dé1fl dé2g1a2 dé2g1á2 dé2g1e2b dé2g1eg dé2gép dé2g1érk dé2gés dég1ész dég3g dég1iga dé2gigé dé2gin dé2gí dé2g1ok dé2got dé2gó dég1s dé2g1u2 dé2gú dé2gű 2d1é2hes 2d1éhs 2d1éj. 2d1éjb dé2k1ab dé2kac dé2k1a2d dé2k1a2l dé2k1a2n dé2k1ap dé2k1as dé2k1au dé2kaz dé2k1ág dé2k1árt dé2kás dékát1a2 dé2k1e2g déke2l dé2k1ele dék1ell dék1elő dé2k1elt dé2k1er dé2k1esz dé2k1eti dé2kez dé2k1é2j dé2k1é2k dé2k1é2l dé2k1ér. dé2k1éte dék1isz dé2kivá dé2kí dékkulcs1 dé2k1old dé2kop dé2k1or dé2k1osz dékó2 dé2kór dé2k1ö2v dé2köz dé2kő dék2rém dé2k1ut dé2lad dé2lam dé2l1á2 dé2leg dé2le2l dél1elő dé2les dél1est 2d1é2let dé2lim dé2lio délkö2z1ön dé2lo dé2l1ö2 2d1é2lő dé2l1u2 dé2lük dé2lyö dé2m1e2l dé2m1e2m déna2 dén1ac dénár1a2 2d1é2neke dé2ny1el dé2nyid dé2nyo dé2nyö dép2i 2d1é2pí 2d1é2pü dé2rag dé2ral dé2r1an dé2rar dé2ras dé2rá dér1d2 dé2reg dér1eml dér1esé dé2r1est dé2rez dé2rés dé2rif dé2r1ik dé2rí dé2rot déró2 dé2rór dé2rö 2d1érté 2d1érth dé2r1út dé1ry 2d1érzé désa2 dé2s1aj dé2sal dé2sap dé2sar dé2s1az désá2 dé2s1ár dé2seg dé2s1e2l dé2s1eti dé2s1ég dé2sí dé2sú dé2s1ü2t dész1ak dé2s3zá dé2sz1ék dé2szév dé2sz1o dé2szú dé2t1as dé2t1e2g dé2t1is 2d1étke dé2tőr 2d1év. 2d1évb 2d1é2ve. 2dévei 2d1é2vek 2d1é2vem 2d1é2ven 2d1é2ves. 2dévesb 2d1é2vesek 2d1é2vesen 2d1é2vesh 2dévesi 2dévesk 2d1é2vesn 2dévesr 2d1é2vess 2d1é2vet 2d1évez 2d1é2véb 2d1é2véi 2dévén 2dévér 2d1é2vét 2d1é2vév 2d1évf 2d1évh 2d1é2vi 2d1évk 2d1évn 2d1évr 2d1évs 2d1évt 2d1é2vu 2d1é2vü 2d1évv 2d1évz dfé2nyem df2lo df2ló df2rá df2re df2ri df2ro df2rö dgá2zár dgázát1 dgá2zi dgá2zó d2ge. dg2le dg2li dg2ló dg2ra dg2rá dg2ró d2gyu d2hali dhan2g1e dhé2t1 d2hi. d2hié d2hih d2hii d2hij d2hik d2hir dhú2s1á2 1di di2aa di2aá dia1b di2abá di2abi di2abr di2ac dia1d2 dia3da di2adi di2ado di2ae di2aé di2afa di2agy di2ah di2ai2k di2aí di2aj di2akép di2akol di2ala di2alá di2ali di2am di2ana di2aná di2ani di2anó di2ao di2aó di2aö di2aő di2a1p2 di2ara di2asza di2aszk di2aszó di2a1t2 di2au2 di2aú di2aü di2aű di2av di2az diá2k1e diá2kol dián3n di1c2k di2cs1aj di2cs1e2r 2d1i2deg 2didej di2deo 2d1i2dén di2d1i2o 2d1i2dő di2eu di1fl di2ga. 2d1i2gáná di2ge. di2g1e2l 2d1i2gén di2gét 2dijes di2kép di1k2l 2d1i2konh di1k2ro dik1u2ta di1k2v di2lan dile2m dilig2 di2lö di2l1ő di2lü di1ly di2ma. 2d1i2má di2mit 2d1imp 2d1i2naka 2dind 2d1inf dinga2 din2gal 2d1ingá 2d1inger 2d1i2nic di2n1ing 2d1inj di2nód di2n1óm di2n1ó2n di2n1ó2r 2d1inp 2d1inté 2d1inv di2oa di2oi di2ok di2ol di2ome di2ov di2óa di2óá di2óe di2óg di2óí di2ókam di2óká di2ó1kl di2ókok di2óku di2ómé di2óo di2óó di2óö di2óő di2ó1p2 di2órá di2óri dió2si2 diós1ik di3ósor. di2óspe di2ószű di2óu di2óú di2óü 2dipar. 2d1i2pará 2diparb 2d1i2pari 2d1i2paro 2d1i2rat 2d1i2rá 2d1i2rod 2d1irt di2saj 2d1i2si. 2d1isko 2d1ism 2d1iste di2tal dit1a2la dit1ará di2t1e2g dit1t2 di2tü diumé2 diu2m1én diu2mil diú2t di2vad 2d1i2var diva2t1a 2d1i2zé 1dí dí2gé dí2j1áto dí2je dí2jí dí2jö dí2jü 2d1í2rá díri2 dí2rik 2d1í2ró dí2sz1a dí2szer dí2szö dítés3s 2d1ív. 2d1í2ve 2dívn 2d1í2vü 2d1í2vű dí2zi dí2zs dí2zü dí2zű dj2eg dje2gya dj1is djo2n1 dka2n1á2 dkia2 dkie2 dk2la dk2li dk2lo dk2lu dk2rá dk2ré dk2ri dk2ro dk2ró dk2va dk2vi dlás3s dlá2s3z dleí2 dló1g2 dlót2 dlő1kr dme2g1ér dna2pe dné2v1á dnö2k1ö2l 1do do2áz do2b1ag do2b1a2l doba2n do2b1any do2b1ár do2bát dobe2 do2b1el do2b1ill do2bí 2dobje do2boá do2b1old do2b1or do2bö do2bü do2bű 2d1o2dú do2gar dogasz1 do2gár dogás1s do2g1ol do2gor dogos3s do1g2rá do2gü do2kal do2kas do2káj do2k1ál do2k1e do2k1é2l do2kép dokkö2 dok2k1öb dok2kő do2k1ott 2d1o2koz do2kö dokú2t dok1úto do2kü 2d1o2laj dola2tar dola2t1e dola2t1ör 2d1olda 2d1oldá 2d1oldo 2d1oldó 2d1oltár 2d1oltás 2dolvas dom1a2cé do2m1árb do2m1áré do2m1árh do2m1árj do2m1árk do2m1árl do2m1árn do2m1á2ron do2m1árr do2m1ártó dom2ba2l dom2bel dom2bol dom2bón do2mel 2domí 2doml do2m1ond do2mő 2domú do2mü do2n1ad dona2l don1ala do2n1a2r do2n1as do2n1ál do2n1áta do2n1átj do2n1áts do2n1átv don1d2 do2n1e donos1s do2n1osz do2nö don1s dont2 don1tr do2nü do2nyal do2nyar do2nye do2nyó 2d1o2pe do1p2l dor1akn do2r1a2l1 do2r1a2p do2r1as do2rat dor1áll do2r1á2lo dord2 dor1dr do2r1e2 do2rid do2r1il do2r1is do2r1ita dor1k2 do2r1okl dor1oszt do2rö do2rő 2d1orrú dors2 dor1sp dor1tró dorú2t do2rü 2dorvos do2ug do2ut do2vi do1ye 1dó dóa2d dóá2g dóá2r dó1bl 2dóez dó1fl dó1f2r 2dógá dó1g2r dói2g dóí2v dó1k2l dó1kré dó1k2v dó2mab dó2mak dóm1org dó2mő dóó2r dó1p2l dó1p2r dó2rád d1ó2rák dó2riá dó2sam dó2sas dó2sel 3dósi. dó2sip dó2sis dó2sír dó1s2ká dó1spe dó1spi dó1s2rá dós3s dó1stáb dó1str dó2s1ű2 dósz2 dó1szf dó1szp dó1t2r 2d1ó2vó 1dö d1öbl dö2ga dö2gá dö2g1el dö2gev dög3g dögna2 dö2go dö2gó dög1ö2lő dö2g1ő dö2gu dö2ka dö2ká dö2k1el dö2k1e2r dö2kék dö2k1ér. dö2kí 2döntöz dö2ra dö2rá dö2ro 2d1ö2röks 2d1ösz d1ötl döt2tért dö2ve dö2vi 1dő dőa2n dőá2g dő1bl dő1cl dő1dra dőe2l dőe2r dőé2l dőé2te dő1fl dő1f2r dőgé2p1e2ké dő1gr dőirá2 dői2ta dő1kl dő1kv dő2ny1a dő2nyele dő1pl dő1pr 2dőráb 2d1őrál 2d1ő2reb dőr1egy dőr1ele dőr1elő 2d1ő2rem 2d1ő2ré. 2d1ő2réh 2dőrék 2d1őrél 2dőrén 2d1őrh 2d1őrif 2d1ő2ril 2d1ő2r1in 2d1ő2rip dő2r1is 2dőrok 2d1őror 2dőros dő2röd dő2r1öz 2dőrőr 2dőrun 2dőrur 2d1ő2rut 2d1ő2rü2 dőr1üg dőr1ül 2d1őrz dő2s1érv dő1ská dő1s2m dő1sni dőso2d dős1odo dő1spe dő1s2pi dő1spó dő1s2ta dő1sté dő1str dő1sv dő1sz2 dőt1áll dő1t2r dp2la dp2le dp2lé dp2ra dp2re dp2ré dp2ri dp2rí dp2ro dp2ró dp2sz dra1ps dravasz1 drág1g drá2sz1ál drá2sze dráta2 drá2tal drá2t1e2 drá2t1ér dren2d1ő2 1d2ressz. 1d2resszb 1d2ressze 1d2resszh 1d2resszk 1d2resszr 1d2resszü dré2szá dro2g1a dro2gá dro2gen drogé2n1i2 drog3g dro2g1ó2 dro2n1a2 dro2nyi drosz2 dro1szf dro1t2r dró2baj dró2t1a2 dró2t1á2 dró2tis dró2t1ü2 d2rui dru2se dru2si dság1g dsé2g1el dsé2gül ds2ká ds2li ds2pe ds2pi ds2po ds2rá ds2ta ds2tá ds2tí dst2r dsza2ké dszá2las dszáraz1 dsz2e dsze2ra dsze2r1á dsze2r1elv dsze2r1o dszert2 d1sz2l d1szn d1sz2p d1sz2t2 d1sz2v dta2g1a2 dtalpa2d dtal2p1ada dtal2p1al dta2n1á2s d2t1ékn d1t2rá d1t2ré d1t2ri d1t2ro d1t2róf d2t1ül 1du du2cem du2c3h du2cö du2cü due2l du2gal du2g1ár 2d1ugr 2duit 2d1ujj dula1k2 dula2t1í du2l1e du2lép duli2 du2l1im du2l1in du2lis du2lí du2lö du2lű 2d1u2ni 2d1u2no 2d1unt du2óa du2óá du2ód du2óf du2ól du2óp du2rai du2rak du2ral 2d1u2rat du2ráb du2ráh du2rát du2ruk du2sal du2san du2sar du2s1as du2sál du2seg du2s1érté du2sin du2s1iv du2sol du2ső du2s1ű 2d1u2szod 2d1u2szoka 2d1u2szokb 2d1u2szoké 2d1u2szokh 2d1u2szokk 2d1u2szokn 2d1u2szoko 2d1u2szokr 2d1u2szokt 2d1u2szom dus3zs du2t1i 2d1u2to du2tó. du2tór du2tu 1dú dú2ce dú2ch dú2cse dú2c3so dúc3sz dú1dr dú2j1é2 dú2jí dú2r1a2c dú2ral dú2r1e2 dú2rén 2d1ú2ron dú2rö dú2szá dú2szó dú2t1a2 dú2té 2d1útj d1útl 2d1útn dú2ton 2d1útr 1dü dü2dü dü2gy dügy1érn dü2ha dü2há dü2hel dü2ho dü2hő dü2két dü2lá 2d1üld dü2lep dülős2 2d1ünne dü2rí dü2te dü2té dü2tő dü2ve dü2ze dü2zé 1dű dű1pr d1űrl dű1sz dű1tr dű2zé dű2ző dva2raj dva2r1e dva2r1ó2 dvá2nyan dvá2nyí dv1áta dv1áte dv1ece dv1e2leg dv1elk dven2t1í dve2ral dve2rár dve2rip dver1s d2v1e2sés dve1s2p d2v1e2teté dv1élm d2v1ép d2v1érd d2v1é2ri d2v1érté d2v1érz dv1fr dvi2csa dvi2csá d2v1iga dvigaz1 dvitéz1 dv1or dvö2l dv1ölő dv1ős dv1őz dv1pr dv1un dv1ú2t d2v1üg d2v1ü2z d2v1űz dwa1yi dy1as d1yéb d1yén dy1étő d1yév dy2jé dy2ke dyk2k dyk2n dyk2t dy2vé d2z 1dza dzaé2 2d3zaj dzak2 dza1kr 1dzá dzá2r1ó2ra dzás1s d3zász 1dze 1dzé dzé2sa 1dzi 2d3zil 1dzí 1dzo 1dzó 1dzö 1dző dzőa2 2dzőbő 2dződ 2dzőj 2dzőné 2dzőr 1dzsa 1dzsá 1dzse 2dzs1e2g 2dzs1esz 1dzsé 1dzsi 2dzsir 2dzs1is d3zsiv 1dzsí 2dzso2 dzs1ok 1dzsó 1dzsö 1dzső dzs1s 1dzsu 1dzsú 2dzsúj 1dzsü 1dzsű 1dzu 1dzú 1dzü 1dzű 2e. e1a ea2bál e2abo e2abő ea2da ea2dá eadás1s ea2dó ea1d2r ea2du eaé2d e2afá e2afe e2afi e2afo e2afö e2afő e2afü e2afű ea2gi e2agó e2aid e2ail e2aim e2aip e2ais ea2ja e2ak. ea2kas e2akat e2aká e2akb e2ake e2akép e2akh e2aki e2akí e2a1kl e2ako e2akó e2akö e2a1k2r e2akú e2akü e2alán eal1eg ea2lu e2am. e2ama e2amá e2amel e2amer e2amé e2amin ea2mo e2amu e2amú e2amű e2ane e2ané e2anö e2ans ea2nya e2api e2apo e2apó ea1p2ro e2ar. ea2ran ea2ras ea2rat ea2rá e2arb e2are e2arh e2arj e2arn e2aró e2arr e2aru e2arü e2aso e2a1st2 e2asü e2asű e2aszem e2aszé e2ata e2atá e2atc e2ate ea2t1eg e2até2 ea2tél ea2t1éne e2atf e2atg e2ath ea2tid eat1ing ea2tip ea2tir e2atm eatmo1s eatmosz2 e2atn e2ato ea2t1or e2ató e2atö ea1t2rak eat2rón e2ats e2atu e2a2tü e2atű e2atz e2au. ea2ut e2a2ux e2avi ea1vy ea2zo e1á eá2bé eá2cs eá2ga eá2gá eá2gi eá2go eá2gu eá2gy eá2hí eá2k1e eá2k1osk eála2 eá2lad eá2l1ak eá2lál eá2l1á2r eá2l1e2 eálé2 eá2lél eálfe2 eá2lid eá2l1in eá2lir eá2lism eá2lop eá2l1ór eá2lö eá2mu eá2nac eá2nal eá2n1at eáná2 eá2nár eá2n1át eá2n1e2 eá2ny1a2l eá2ny1a2n eá2nyap eá2nyar eá2ny1as eá2nyav eá2ny1e2 eá2nyén eá2ny1ér. eá2nyif eá2ny1ing eá2nyis eá2ny1o2ku eá2nyö eá2po eá2rad eá2ram eá2ras eá2raz eá2ru eá2rú eá2sa eá2sá eá2sí eá2só eá2su eá2sz eáta2 eá2t1e2 eá2té eá2tí eá2tu eá2tü e2ba2d eb1adó eb1adta eb1aga e2b1ajk e2b1a2la e2b1alk eb1ant eb1a2ny eb1atl e2b1au eb1a2zo eb1ágg e2b1áp eb1ára ebeá2 e2b1e2he eb1ejt ebe2l1á e2b1e2lef ebe2l1eme e2b1elhel e2b1enc eb1este eb1esté ebe2szek e2b1ex e2b1ég eb1ép e2b1érd e2b1érté e2b1érz eb1gr e2b1id e2b1i2na e2b1inf e2b1ing e2b1irá e2b1i2s e2b1izz eb1kl eb1kr eb2lat e1b2lú eb1okt eb1o2la eb1orv eb1öb eb1ös eb2rus eb1st2 eb1tr e2b1üg ebü2l eb1ülé e2b1ür eb1üz ec1ajt ec1alk e2c1a2n e2c1az ec1ág e2c1ál ec1ár ec1bl ec2c1a2 ec2c1ér ec2c3h ec2c1i eccs1át ec3cso ec2cú e2c1eg e2c1elo e2c1elv 2ecento e2cetb ece2t1o 1e2cets 1e2cett e2cetü ece2tüz e2c1evé ec3har ec3hen ec3hi. ech1in 1e2chó ech1u ec2le ec2lu e2csad e2cs1a2la e2cs1a2n ecsa2p1á2g e2cs1a2pák ecs1ará ecsá2r ecs1árá ecs1árb ecs1áro e2cs1á2t e2cs1é2l e2cs1ér. ecs1érté e2cs1ol e2cs1öl ecs1s ecsúszós1 e2c3sükb e2c3süt ec3sze e2c1ud ec3zá ec3ze e2d1ab e2d1a2dá ed1a2ny e2d1a2z e2d1á2c e2d1ág e2d1áp ed1egy edeleme2 e2d1elo e2d1eml ede2rak ede2r1ál ede2rel ede2r1ék ede2r1o ede2r1ü2l ede2s1o ede2tá ede2tel ede2t1ér. e2d1é2j edé2ká edé2kis edé2k1o edé2lyá edé2lyo 1e2dénn 1e2dény e2d1ép e2d1érd edé2sa edé2so edés3s edé2s3z ed1é2vén ed1é2vér ed1gr 2edic e2dide e2d1i2ga edigaz1 ed1ill e2d1int e2d1ira ed1iro e2d1ír ed1ívn e2d1íz ed1old ed1orv e2d1os e2d1ös e2d1őrs edő2s1ü ed1pl ed1pr ed2ram e1d2rog e1d2ró e2d1üg e2d1üt e2d1űz ed2v1a2 edvá2 ed2v1ár ed2vát edv1ér. ed2v1öz edy1i e2d3zá 1e2dzői 1edzőj 1edzőr 1e2dzőv 1edzv e1e ee2bé ee2cs ee2dz ee2ge ee2gé eegész1 ee2gy ee2he ee2ke e2el. ee2la ee2le e2eléb ee2léd e2elg ee2lo ee2lő ee2me ee3men ee2mé ee2mu e2en. e2enb e2enj e2ent e2enw ee2ny ee2pe ee2pé ee2po ee2re ee2ro ee2ró ee2rő ee2sé ee2sü ee2sz ee2te e2e1t2h ee2to ee2ve ee2vé ee2vi ee2vo ee2vő ee2zü e1é eé2de eé2ge eé2gé eé2gő eé2gü eé2he eé2je eé2jé eé2ke eé2kí eé2le eé2lé eé2li eé2lő eélőkész1 eé2lü eé2lű eé2me eé2ne eé2pí eépítés1s eé2pü eé2ré eé2ri eé2rő eé2rü eé2sz eé2te eé2ve eé2vé eé2vi eé2vü efa2x1i efek2tá efek2t1í2 efenyőé2 ef2f1in ef2f1o e1f2la efle2x1i2k ef2lu efo2n1alk efo2nik eforma2 efor2m1al ef1pl e1f2rá ef2rö e2g1a2bá ega2be eg1abl eg1abr e2g1a2cé ega2cs e2g1a2d e2g1a2g ega2i e2g1a2j e2g1a2k e3gaké ega2lac ega2lak ega2lan eg1a2lap e2g1a2lá e2g1alh e2g1alj e2g1alm e2g1als e2g1alt e2g1a2m eg1ang eg1ann eg1ant eg1a2ny e2g1a2pa eg1apá ega2po eg1a2pó e2g1apr eg1arc ega2ri eg1a2ro eg1art e2g1ass e2g1a2sza e2g1a2szo e2gaszú eg1atk ega1t2r e3g2aty e2g1a2u eg1a2va e3gazol ega2zon e3gába e3gábó eg1á2cs e2g1áf e2g1á2g eg1áh e3g2ái e3gája e3gájá egá2ju egá2m e3g2án e2g1áp e2g1á2rá e2g1árb e3g2árg e2g1árn egá2ro eg1árt egá2ru egá2rú egá2sa e3gát. e3g2átu e3gáva egá2zá egá2zi egá2zu eg1bl eg1br eg1d2r e2g1e2bé ege2cs1ö2 eg1edz eg1e2ge eg1ehe e2g1e2kés e2gela e3geled ege2leg ege2lej e2gelekt eg1e2lemb e2g1e2leme e2g1e2lemn e2g1e2lemr e2g1e2lemt ege2l1e2s eg1elég eg1e2lér e2g1elf e3g2elg e2g1elha e3g2elit e2g1eljá e2g1elm e3g2elne e2g1elo e3g2előá ege2lőbbe e3g2előd e3g2előf e3g2elői e3g2előm e3gelőnye e2g1eltá e3g2eltet e3g2eltü e2g1elvá e2g1elz e2gemel e3gend e3genye eg1epe eg1epr e3gerá e2gerd 1egere. e2gered 1e2gerek e2geré ege2rény eg1erk e3gerl e2g1eró e2g1erő eg2esek e2g1esete e2g1eszk e2getal eg1e2ve e2g1ex e2g1é2g e3gémb e2g1é2neke e2g1é2nekk egé2ny1e2l e2g1épí eg1éps e2gér. e2gérb egé2r1es egé2re2t egér1ete egé2rez e2géré egé2rés e2gérg e2géri egé2ri. e2gérk e2gérn eg1é2rő. e2gérr e2gérs eg1érté eg1érth e2gértő e2gérv e2gész eg1észl 1egészs eg1éte eg1fl eg2gim eg3gyal eg3gyan eg3gyás eg3gyú e3gi. eg1ibr eg1idd eg1i2de e3gie egi2g e3gig. e2g1iga e2g1igé eg1ij e2g1i2ko eg1ikr e2gill eg1imb e2gimm eg1inf e2g1ing eg1ino eg1ins e3g2io eg1ira eg1i2ro eg1iss eg1ist egi2sz e2g1i2ta e3gitá e2g1iva e2g1ivá e3give eg1izé eg1izg eg1izm eg1izz e2g1íg e2g1ín e2g1í2r e2g1ív e2g1íz eg1kl eg1kr eg1kv e2g1ob e2goc e2g1o2d e2goi e2g1o2k eg1o2la e2g1old eg1olv e3goly 2egom ego2mi e2gont e2g1op eg1org e3g2orom ego2ros e2g1orr e2g1orv e2g1o2s e2g1ot e3gó. e3g2ób egó2do e3g2ój eg1ó2ra eg1órá eg1óv e2g1öb eg1ök eg1önt eg1örö e3görög egö2röm eg1öt eg1öv e2g1ö2z egőkész1 e3gőre eg1őri eg1őrö egő2szi e3g2őz eg1pl eg1pr eg1ps e1g2rat e1g2róf eg1sk eg1sl eg1sm eg1sp eg1s2t egsz2 eg1szt eg1tr e3g2ub eg1ud e3g2um eg1u2n e2g1u2ra. e2g1u2rai e2g1u2rak e2g1u2ras e2g1u2rat e2g1u2rá e3guru e2g1u2s e2g1u2t eg1u2z eg1új e3g2ún eg1úr eg1ús eg1út e2g1üd egü2gye e2g1ü2le eg1ü2li e2g1üs e2g1üt e2g1üv e2g1üz e2g1űz egvárosi2 e2gy1a2d egy1a2g e2gy1aj egy1akt egy1a2la e2gy1ará e2gy1as egy1a2t e2gy1au egy1az e2gy1ál egy1á2rá egy1árf e2gyát egy1eleg egy1elf egy1ell egy1elo egy1e2lőj egy1e2lőv egy1elz e2gyeni 1e2gyenl 1e2gyens egy1eszt 1egyezm egy1éks 1egyéni egy1ér. e2gyip e2gyis e2gy1iz egy1ok e2gy1ol egyo2r e2gy1os egy1ot e2gy1ó2r egy1ö2l e2gy1ös e2gy1öz egy1ő2r egyu2 egy1ur egy1ut 1együt 1egzis eha2de ehá2zal eh1ellá ehe2lyes ehe2rál ehe2rát ehere2 ehe2r1el ehe2r1em ehe2ren ehe2res ehe2rin ehe2rol e2h1é2je ehé2ná ehé2név ehé2zá ehé2zo e2h1ors eh1sz e1i ei2áb ei2áh ei2áj ei2án ei2ár ei2át ei2áv e2ibn ei2deá ei2dei ei2deo ei2dén ei2dom ei2dő e2idp e2ier ei2gá ei2gé e2i1g2n ei2gy ei2ha eil2le. ei2ma. ei2man ei2má ei2mit e2imk e2ims e2imz ei2na2 ein1ad ei2n1á2 ei2neg e2inér e2inét ei2n1ita ei2nol ei2nő ein1t2r ei2nü ei2on ei2pa ei2ram ei2rat ei2ri ei2rod e2iró ei2ta e2itb e2itj e2itn e2itr ei2va ei2vá ei2vo ei2vó ei2zé e2izmi ei2zo e1í eí2gé eí2já eí2jú eí2ra eí2rá eí3rásbe eí3rásil eí3rásoc eí3rásonk eí2ró. eí2róa eí2róá eí2rób eí2ródn eí2róf eí2róg eí2róh eí2rói. eí2róik eí2róin eí2róit eíróí2 eí2rója eí2rójá eí2róje eí2róju eí2rók eí2róm eí2rón. eí2róna eí2róná eí2róny eí2rór eí2rót eí2róv eí2té eí2vá eí2ve eí2vé eí2vi eí2vo eí2vó eí2ze eí2zü eí2zű ej1ab e2j1a2d ej1a2g e2jak ej1akk ej1a2l ej1a2n ej1ar ej1au ej1a2z ej1áb e2j1á2g ej1ál e2j1ártó ej1á2t1e2 ej1átv ej1bl ej1br ejcsa2p1 ej1dr eje2c e2j1ecse e2j1ef ej1e2ged e2j1e2gé e2jekc e2j1ela e2j1elc e2jelede e2j1e2lemb e2j1e2leme ej1e2lemé e2j1e2lemn e2j1elf e2j1elha e2j1elhel e2j1elo ej1elszá ej1eltér e2j1elu e2j1eng e2j1enz e2j1essz eje2sz e2j1ex e2j1é2j e2j1é2k e2j1él e2j1ép e2j1éte ej1fr ej1g2r e2j1i2d e2j1im ej1ina e2j1int e2j1ip e2j1iz ej1íg ej1ív ej1kl ej1kv ej2mok ej1ol ej1op ej1óc ej1ón ejó2sá ej1ót ej1óv e2j1öb e2j1öl ej1ö2ve. e2j1őz ej1pl ej1pr ej1sp ej1st2 ej2tad ej2tau ej2tál ej2tát ej2t1elk ej2t1este ej2tev ejté2r ejt1éré ej2tin ej2tiz ej2tos ej2t1ó2r ej2töd ej2t1ö2l ej2tön ej2tös ej1tra ej1tró ej2tür ej1új ej1úr ej1ú2t e2j1üg e2j1ür e2j1ü2t e2j1üv e2j1üz e2k1abl ek1a2cé ek1a2dá e2k1a2dó eka2gy ek1a2ja e2k1ajtó. e2k1ajtói e2k1ajtók e2k1ajtón e2k1ajtór e2k1ajtót ek1a2kar e2k1alj e2k1a2lo ek1alt ek1ang e2k1ani ek1a2nyá ek1arc. ek1arca ek1arcr ek1arcú eka2sip e2k1au ek1azo e2k1ág ek1állo ek1álm ek1árad eká2rai ek1á2rak ek1áras e2k1á2rá e2k1árd e2k1árf e2k1árh e2k1árk e2k1árm e2k1árn e2k1á2ron e2k1árr e2k1á2ru e2k1á2rú e2k1árv ek1ásó ek1áta ek1átd e2k1áth ek1átj e2k1átm ek1á2to e2k1átt ek1bl ek1br 1ekcém ekci2óf ek1cl ek1dr e2k1ebé e2k1e2dz e2k1egg e2k1e2gye e2k1e2kébő e2k1e2kés e2kela e2k1e2leg eke2leme ek1elha e2k1elk e2kellá e2k1elm e2k1elo e2k1előn e2k1elr ek1elta ekel2t1é2r e2k1e2ma e2k1e2mel ek1e2més ek1e2pi e2k1estr eke2szele eke2szo e2k1e2vé e2k1evi 1e2kééh e2k1ég 1e2kéik ek1ékek e2k1ékt ek1é2le ek1éln ek1élő e2k1épí e2k1érin ek1értékb eké2rül e2k1ész. e2k1észh e2k1észn eké2tel e2k1étk e2k1étl e2k1étt e2k1é2ve. e2k1é2vek ek1é2vet e2k1évi ek1fr ek1gn ek1gr ekiá2 ek1i2ga ekigaz1 ek1i2ge e2k1igé ekii2 ek1ill e2k1ima eki2már e2k1iná ek1ind e2k1isk ek1ism e2k1isp ek1i2zo e2k1íj ek1írá ek1íz ekka2ró2 ek2k1ele ek2k1elf ekk1osz ek1kri ek2kű eklés3s ek2lim ek3nő e2k1oá ek1obj e2k1odv e2k1o2la ek1olló e2k1olv e2k1o2pe ekor2da ekor2d1á2 ek1o2rom ek1orra e2k1orv ek1otth e2k1ó2h ek1ó2ra ek1ó2rá ekö2k e2k1ökö e2k1ö2lé ek1ö2lő e2k1öm e2k1önk e2k1önt ekö2ri e2k1örv ek1pl ek1pr ek1ps e1k2ram e1krétá ek2ris e1k2rí ek2róm ek1sl ek1sm ek1sp ek1st eksz1al ekszes1 ek2szip ek2tau ek2taz ekt1elk ek2t1esz ek2t1érd ek2til ek2tim ek2t1i2o ek2t1ok ektus1s e2k1ud e2k1u2ra ek1uro e2k1utá e2k1utó e2k1uz e2k1új e2k1úr. ekú2t ek1úto ek1útv e2k1ünn ekü2t ek1ütő ek1üzl e1k2vó el1a2ba el1abl el1a2bort e2l1a2c e2l1a2d el1agg el1a2gy el1a2j e2l1akad e2l1a2kas el1akc e2l1a2l el1a2m el1ana elan2di el1a2ne el1a2ni el1ann ela2ny el1a2pa ela2r el1ara el1ará el1aré el1asza el1aszi el1aszó el1aszu e2l1a2u el1a2va el1a2ve el1azo elá2bé el1ág. e2l1á2ga el1ágg el1á2gi el1ágn el1á2go el1á2j el1áld el1áll el1á2lo elá2m el1ámí el2án elá2ná elá2ne elá2nó el1á2p el1ár. el1á2rá el1árb el1árc el1á2re el1á2ré el1árf el1árh el1árk el1árn el1á2ro el1árö el1árr el1árt el1á2ru el1á2rú elá2s eláta2 el1át1e2 el1átf el1átk el1átl el1átm el1átr el1ázi el1ázo el1ázt el1bl el1br 2eld. el1d2r ele1bre 2eled. 1e2ledel el1eff ele2g1e2lé el1e2gyene e2legyü el1egz eleí3ran ele1k2l ele2k1os ele1krá 1elektr e2l1elb e2l1e2lemb e2l1elm e2lelőz el1elr ele2mad e2l1ember 1eleme. 1e2lemei 1elemek ele2mell 1e2lemem. 1e2lememm 1e2lemes. 1e2lemesn ele2mesz ele2mélt ele2mérd 1e2lemük 1e2lemünk 1e2lemzé 1e2lemző 2elend e2lener ele2nél eleó2 ele2pal ele2pap ele2pele ele2pell ele2p1ő2r e2lerd el1e2red el1e2rei el1erj e2l1ern ele2róz ele2sege ele2sésb ele2sése ele2sésé ele2sésh ele2sési ele2sésk ele2sésn ele2sésr ele2séss ele2sést ele2sésü ele2sik. e2l1esnén ele2sőb ele2sős e2l1essél ele1sta ele2szek ele2t1e2két ele2teti ele2tetn ele2tető ele2t1ék ele2tél e2l1ették eleü2 1e2l1e2vők el1e2xi e2lébb elé2du el1é2ges el1é2get el1égj el1égtek el1égv el1é2het eléka2 elé2kak elé2k1an elé2k1á elé2k1e2le elé2kev elé2keze elé2kezi elé2kezt el1ékí elé2kö elé2ku el1él. el1éld elé2led el1é2let el1é2lé el1élh el1é2li el1élj el1éln el1éls e2l1élt el1é2lü e2l1élv e2l1é2neke e2l1é2nekh e2l1é2red e2l1é2rem elé2rend e2l1é2rez elé2rét. elé2ri. e2l1érp e2l1érrő e2lértel e2l1érté el1érth e2l1értő e2l1é2rü e2l1érz 2elésétő elé2so 2elész. 2elészel 2elészem 2elészne 2elészné 2elésző 2elészü 2elészv elé2tel e2l1é2tes elé2tete e2l1étk e2l1étt e2l1év. el1fl el1f2r el1gl 1elhap el2ib el1ideg el1idé el1i2do el1iga e2l1igé el1ill e2l1i2ma e2limá e2l1imp e2l1into el1i2on eliő2 e2l1i2p e2l1ira e2l1i2ro e2l1i2si e2lism el1iss el1iste eli2tin eli2tol elitu2 el1i2vá e2l2ix el1i2zo e2l1íg el1í2rá el1í2v elka2r1á 1elkezdé 1elkezdő el3ki el1k2l el1k2r el1kv el2l1a2dá el2l1a2dó ell1alk el2l1amb el2lamp ella1t el2lau el2l1ábr el2l1áll 1ellátáso 1ellátásü 1ellátm el2lef elle2g1ó2 ell1elké el2lelm 1ellená 1ellenes 1ellenf 1ellenő 1ellens 1ellenz el2lid ell1inf ell1ing. ell1int el2l1or ell1osz ell1órá el2lön el2lös el2l1űr 1elmééh 1elmél 1elméte 1elnép 1elnök el1obj el1off el1oj e2l1o2ká el1okm e2l1o2l el1oml el1omo el1ont el1opc e2l1ope el1oro el1orr el1os e2losz e2l1ox eló2ig eló2in e2l1ó2ri el1öb el1ö2m e2l1ön e2l1ör e2l1ös e2l1ö2z 2előáp 2előár 2előbé 2előbi 2előbo 1elődei elő2d1í2 1elődje. 2elődo 1elődöt. előe2r 1e2lőfú 2előfü 2előfű 1e2lőhív 1előhű 2előib 2előik 2előim 2előiv 2előja 2előké. 2előkért 1előkése 1e2lőkést 2előkl 2előkő 2előkt 2előku 2előkü 2előmö 2előmű 2előna 1előnn 2előnö 1előny. 1előnyb 2előnyer 1előnyh 2előnyi 1előnyk 1előnyn 1előnyö 1előnyr 1előnyt 1előnyü 2előö el1őr. 1e2lőreg 1előreh 1előrej el1őriz el1őrl 2előro e2l1őrü 2elősá 2előso 2elősö elő1s2p 2elősze 2előszé 2előszi 2előszó 2előtü 2előü 2elővis 2előviz 1e2lőz. e2lőze 2e3lőzene 1előzm el1p2l el1pró el1sk el1sl el1sm el1sz2t el2t1aj eltára2d eltár1ada 2elte. el2t1e2rei 2eltes 2eltet. 2eltete 2elteté 2elteth 2elteti 2eltetj 2eltetn 2eltets 1eltettk 2eltetü 2eltetv 2eltéb 2eltél 2eltét el1t2ra el1trá el1tré 2eltük e2l1ud el1u2g elu2n el1und el1u2r e2l1u2t e2l1uz el1új el1ús el1ú2t el1üc e2l1üd e2l1üg elügy1ér. elügy1érn elü2kén e2l1ültet e2l1ür e2l1üs e2l1üt e2l1üv e2l1üz el1űrt e2l1űz elv1ada elv1a2dó el2v1at el2v1árai el2v1áras el2v1árár elv1ász el2vát el2v1enc el2v1égü elv1éle el2v1ér. el2v1éri el2vik elv1olt el2v1ó2 el2vöd el2vő el2vú e2ly1a2 e2ly1á2 e2ly1e2kén. e2ly1el e2lyer ely1eszt ely1é2jé ely1é2ké e2ly1él e2lyés e2ly1i2ko e2ly1ira ely2kéj e2ly1o e2ly1ó e2lyöm e2lyön e2lyös e2lyő ely1ul elyü2l e2ly1ülé e2m1ab em1a2dat em1a2dás e2m1a2do e2m1a2dó e2m1adt e2m1a2gi em1a2ja e2m1ajá em1ajk e2m1ajt em1a2ka em1aká e2m1aku em1a2lap e2m1all em1almá em1alv e2m1ana 1emaná e2m1a2ny ema2p em1apá em1apr em1a2rán em1asszo e2m1atl e2m1a2u e2m1a2v e2m1a2zo e2m1áb emá2l em1ála em1áld em1áli e2m1áp emá2r e2m1ára e2m1árn e2m1áro e2m1áru em1árv e2m1ásá emát1a2 e2m1áte e2m1átl em1átm e2m1átt e2m1átu 1embarg 1embered 1emberf ember1ő2 1embers emb2len 1emblé em1bre 1embri em1bro em1dr e2m1ef eme3ger eme3gi em1egyet em1egyé e2m1egz e2m1e2kés e2m1ela em1elb 1emelet 1emelke e2m1ellá e2m1elm 2e2m1elo 1emelőb 1emelőe em1előny 1emelős 1emelőv 1emelty e2m1ember e2m1e2mel e2m1emu e2mener emenes1s e2m1e2p e2m1e2rény e2m1e2rő eme2sa em1e2seté e2m1e2sés em1e2szem e2m1e2szet e2m1eszk e2m1eszm e2m1eu e2m1e2v eme2z1a eme2z1á2 eme2z1o eme2z3s e2m1ég e2m1é2he. e2m1é2hen e2m1é2hes e2méhs e2m1é2j emé2k e2m1éke em1ékr em1é2let e2méneke e2m1ép e2mértel e2m1értéke e2m1értéké e2m1értékn em1észl emé2t1a2 emé2tár e2m1é2tek emé2tel e2m1étel. emét1elh emét1els em1fl emfoga2d emfo2gada em1f2r em1gr e2midé em1i2dő emi2g e2m1iga e2m1ige e2m1igé em1iks emi2m em1ima e2mimá e2m1inf e2m1ins e2m1inte e2m1i2p e2m1ira e2mirá e2m1iro e2m1irt e2m1isk e2m1ism e2m1iste emi2sza emi2szá emi2szo em1izé em1izg e2m1i2zo e2míg e2m1íj e2mír e2m1í2v em1kl em1kr 1emlékm 1emlékv emo2k e2m1okl em1oko e2m1okt em1ola e2m1old em1oll e2m1olt e2m1o2p e2m1ork e2m1ors e2m1orv emo1t2 emó2ra em1ó2rá e2m1öb emö2k e2m1ökö emö2l e2m1öld em1ölé e2m1ön e2m1ö2r e2m1ös em1öv e2m1ö2z em1őr. em1őrk em1őrn em1ő2rö em1őrr em1őrt 1empát em1pc em1p2re em1pré em1pro em1pró em1p2s em1sk em1sm em1sp em1s2t em1t2r 1e2mu. e2mud e2mug e2muj 1e2muk 1emulz 1e2mum em1uno e2mur e2musz em1utal e2m1u2tá e2mutc e2m1utó e2m1új em1úr e2m1út e2m1üd e2m1üg e2m1ü2lő e2m1ünn e2m1ür e2m1üt e2m1üv e2m1üz e2m1űz em1zr e2n1ab en1a2do en1agi e2n1a2j e2n1a2k en1a2la en1alk en1all en1alm e2n1a2n en1a2pá ena2p1e en1a2rá en1arc en1asz en1atk en1aut en1ábr en1ág en1áld en1álm e2n1ára en1árn en1á2ro e2n1áru en1átk en1átm en1átv e2n1áz en1bl en2c1a2 en2c1ár en2c3h en2c1ip en2cí en2c1ol en2c1os en2c1ö2 enc3ség en2c3sor enc3s2p enc3sz en2cu en2d1adá en2d1alk en2dano en2d1áll en2d1árn en2d1átl end1é2jé en2d1ér. en2d1érr en2d1értő en2d1érz en2d1or en2d1ón en2d1ó2r en2dös en1d2rá en2dú en2dza eneá2 e2n1egér e2n1egg en1e2lek en1eljá en1elk e2n1ell en1elm en1elny en1elü en1elvá e2n1eml eneó2 ene1p2 2enerá 1e2nerg e2n1ern e2nerv 2enes ene1sztá ene2tal ene2tos e2n1ex ené2k1a ené2kel enéki2 ené2kis en1épí en1épü e2n1ér. e2nérd e2n1éré e2n1éri e2n1érte e2n1érv ené2sza ené2szer ené2sz1in e2n1étk e2n1éves ené2vig en1f2l enfluo2 enga2 en2gan 1engedé enger1ő2 engés3s eng1g e2nidé enidi2o e2n1i2ga e2n1ige e2n1igé en1ill e2nimá e2n1ina en1ind e2n1inf e2n1inte e2n1inv e2n1ira en1i2rá en1isk e2n1ism eni2sza eni2szer eni2szo eni2sz1ó2 e2n1ív en1k2j en2n1eme en2nes enn1ége enné2k en2n1éke en2nér en2nir en2n1ol en2nú en2n1ül enny1a2d enny1as enny1á en3nyer enny1í2 en3nyu e2n1ob e2n1of e2n1oi en1old e2n1olv eno2ni en1opt eno2r1á2 e2n1ost en1oszt e2n1ox enóta2 enó2tal enó2t1e2 e2n1öb e2n1öl en1ön e2n1ös e2n1ö2t e3növ enő2rü en1pr en1ry en2s1ab en2s1a2l en2s1a2n en2sas en2s1el en2s1érté ens3szá en2s3zon en2t1a2c en2tada ent1agy enta1k2 en2t1a2la ent1alj en2t1alk ent1a2lo ent1and en2t1a2ny ent1ass en2t1á2rak en2t1á2rat en2t1árá en2t1á2rú en2t1elmé ente2r1a en2t1este en2t1esté en2t1esti ente1t2r en2t1é2g en2tép en2térm en2t1é2ve. en2tigé en2t1i2o enti2p ent1ipa enti2sz en2t1okt en2tön en1trad ent2ran en2tun en2t1u2r en2t1ü2z en1uta en1úr en1út e2n1űz e2nyab e2ny1a2d e2ny1ae enya2g eny1aga eny1agá e2ny1aj eny1alk e2ny1a2n eny1aré e2ny1as e2ny1at e2ny1au eny1d2 eny1e2dzé e2nyelm eny1előn eny1elvo eny1elvű e2ny1e2rő eny1eve e2nyéva 1enyhi. eny2h1ős e2ny1id e2nying e2ny1ira e2nyiz eny1í2ró e2nyok e2ny1o2l e2ny1or e2ny1os e2ny1ó2 enyö2k e2ny1ökö e2nyöt eny1s enyt2 eny1tr eny1út enyva2 eny2van 1enyve. eny2v1e2l enyves1s en2zal 1enzim e1o eo2áz e2obo e2ode eo2dú eog2rafi e2oka eo2kád e2okár e2oké e2o1k2l e2okon eo2kos eo2kö eo2laj e2oló eo2ly e2ome e2omé e2omi eo2n1al eo2nan eon1any eo2natom eo2n1au eo2n1ál eo2nár eon1d2 eo2ner eon1f2 eo2niz eo2nö eon1t2r eo2n1ú eo2nü e2opa eo2pe e2o1p2l eo1pro eo2r1a2 eo2r1á2 eo2res eo2r1és eorgi2a e2orgi2áb eori2tá eor1k2 eo2rö eor1s2 eo2so e2ost e2osza eo1sz2f e2otí e2oto eo1t2r eo2vi e1ó eóa2d e2óbö eó2ce eó2dá e2ófa e2óhe e2óje e2ókap e2ókép e2ókor e2ómi e2ómű e2óné eó2no eó1pr eó2rá e2óre e2ósu e2ószo e2óta e2ótá e2óte e2óté e2óti e2ótí eó1tré eó2vak e2óve e2óvé e2óví eó2vo eó2vó e1ö eö2bö eö2dé eö2kö eö2le eö2lé eö2li eö2lö eö2lő eö2lü eö2mö eö2nö eö2rö eö2rü e2ös. eö2ve eö2vi eö2vü eö2zö e1ő eő2re eő2rö eő2rü eő2sz e2p1ab e2p1a2da e2p1a2dá e2p1a2dó ep1a2gy e2p1aka e2p1akk e2p1akn ep1a2lak ep1a2lap e2p1alj e2p1alk epa2lom e2p1a2ny epa2rán ep1atró ep1aut ep1a2zo e2p1áb e2p1á2g ep1állá e2p1á2ra epá2s e2p1ása ep1áta ep1átc e2p1á2t1é ep1átf e2p1átm ep1á2t1o ep1átt ep1átü e2p1átv ep1bl ep1br ep1dr e2p1e2dz ep1e2lemr e2p1e2let e2p1ellá e2p1elo e2p1ene epe2ral epe2r1e2c epe2rev epe2rin epe2rül e2p1esti epe2szá e2peszmé e2p1ex 1e2péd 1epééb 1epééi 1epéén e2p1ég 1e2péit e2péj ep1ékh ep1éle ep1élm 1e2pénk e2p1ér. ep1fl ep1ido e2p1i2ko ep1ind e2p1inga e2p1i2rá e2p1irt e2p1ism e2piz e2p1íg e2p1íj e2p1ín e2p1ív ep1kl ep1kr ep2lag e1p2laká e1p2lan e1p2lán e2p1ob e2poch ep1okt e2p1olv ep1ope e2p1orn ep1orsó 1eposz. 1eposza 1eposzá 1eposzt. ep1osztá e2p1ö2l ep1önt e2p1ös e2p1öv e2p1őri ep2pan ep2pát ep2p1e2le ep2p1elh epp1eró eppó2 ep2pór ep2pö ep1pro ep1pró ep3ret e1p2réd e1p2rin e1proj e1p2rot ep1s2k ep1sp ep1st ep2tad ep2t1aj ep2t1í2v ep2t1op e2p1ug e2p1u2ta e2p1utó ep1új ep1út e2p1üg e2p1üt e2p1üz e2p1űz er1abla er1a2bor e2r1abr er1abs era2dat e2r1a2dá er1adm er1a2do e2r1a2dó era1dr er1a2ge er1agr e2r1a2ja e2r1ajk er1ajtó e2r1a2kad e2r1a2kas e2r1akc e2r1akti er1a2la e2r1alg e2r1alj er1alk e2r1a2lo er1als e2r1alt er1alv er1amb er1amp er1angy er1ann er1a2nya er1a2pa. er1app er1aps e2r1a2ro e2r1asp era2sz1a2l era2szav era2szárn era2szel era2sz1é2p e2r1atk e2r1atl era1t2r er1att er1aut e2r1a2zo e2r1ábr erá2fé er1áge er1á2gú e2r1á2gy er1állá er1állé er1állo er1álló er1állv er1ápo e2r1ár. er1á2rak er1á2rá e2r1árb er1áre er1áré er1árf er1árk e2r1á2ro e2r1árr er1árs er1á2ru er1árú er1árv er1ásá e2r1á2sz er1á2t1e2 e2r1áth er1á2ti e2r1átí e2r1átj e2r1átk er1átl e2r1átm e2r1átn e2r1átr e2r1átt e2r1átv erb1i2na er2c1a2l er2car er2c1ár er2c1át erc1ell er2c3ho er2cid er2c1ina er2c1iná er2c1i2pá er2cis erc1k2 erco2 er2cö er2csad er2cs1an ercs1ál er2cú er2cz 1erdej 1erdő ereá2 1eredetű e2redén 1e2redm eree2 er1eff ere2gál ere2gel e2r1e2ger erei2g 1e2rején 1e2rejér ere2k1el erek1e2szű erek1é2j ere2kot erek1t ere2k1ú2s e2r1e2leg er1elér e2r1ellen er1elli e2r1elö e2r1elr erem1egy ere2m1emb erem1érté ere2m1ut e2r1enz ereo1gra ere2pan ere2pas erepá2 ere2p1ál ere2p1e2sé ere2pin ere2pos er1erk er1ern er1eró e2r1esti e2r1estj e2r1estr e2resze. ere2szí e2reszü ere2tál ere2tát ere2t1eg ere2t1erj ere2t1é2rő. ere2t1é2ve. eretö2 er1e2vés e2r1ex 1e2rezet. 1e2rezete 1erezőkh erébe2 eré2bes er1ég. er1é2ge er1égé e2r1éj. e2r1éjb er1éjf e2r1éjn e2r1éjs eré2k1a2 eré2ká eré2kol eré2k1ö e2réneke e2r1é2neké eré2p1a eré2pá e2r1é2ren e2r1é2ré e2r1é2ri eré2sa eré2s1elv eré2sza eré2szá eré2szo eré2szö er1é2ter e2r1étk e2r1év. er1é2ve. e2r1é2vek e2réven e2r1é2ves e2r1é2vet e2r1é2vén er1é2vét er1évf er1évh e2r1é2vi e2r1évn e2r1évr er1évt er1évv erfé2l1é2v er1fl er1f2r er1gl e2r1i2deg e2ridé e2r1ido er1idu eri2ga e2r1i2gá e2r1i2kon e2r1i2mi eri2no erint2 e2rinteg erin1tr e2r1i2on eri2os e2r1i2par e2r1ira er1iró e2r1isk er1ism eri2szo e2r1ita e2r1i2zé e2r1izg er1íg er1íj. er1íjá e2r1ír e2r1í2z er1k2r er1k2v erme2k1a2 erme2ká erme2kesz erme2ko erme2köl erme2sz1á er2mind erm1isi ern1ala ern1ékn ern3n er2n1ó2d 1ernyő er1okl e2r1okm er1olda e2r1o2li ero2nal er1ope e2r1opt er1orc er1ord er1orm er1orn er1o2ro er1ors e2r1orv erosz2f e2r1o2ve e2r1ovi e2r1óc er1ó2dá er1ólo er1ó2rá er1óri e2r1ö2c erö2k er1ökl er1öko e2r1ökö e2r1ö2l e2r1ör e2r1ös e2r1öt e2r1ö2z e2rődd erőé2n 1erőlt 1e2rőmé 1erőmh 1e2rőnö 1e2rőö e2r1őri er1őrö er1p2l er1p2s er2rév er1ry er2s1a2d ers1alk er2s1an er2sat er2s1á2gi ers1ára ers1eml er2sérte er2s1érté er2s1értő er2sid er2s1im er2s1i2n er1ská er2s1od er2s1ol er2s1ón er1spor er1srá er1stra er2sut ersz2to er2t1ai ertá2p ert1ápo ertára2d ertár1ada er2t1elké ert1estj ert1esze er2t1é2j er2t1ékn er2t1évén er2t1é2vév er2tid er2t1i2m er2t1íz er2tos ert1órá er2t1ös er2t1öz er1t2ran er1trén ert1s er2t1út erubi2 1e2rup e2r1u2ra er1urá er1uru er1u2sz er1u2tá e2r1új e2r1úr e2r1ú2s er1útj er1útl er1ú2to er1útr e2r1üd e2r1ügg er1ügyb er1ügyn er1ügyr e2r1üled e2r1ür e2r1üs e2r1üt e2r1ü2v e2r1üz e2r1ű2z er2v1ala er2v1alt erva2n erv1any er2v1á2ru er2vása er2v1átk erv1e2lőké er2vereze er2v1e2sze er2vék er2vérte er2v1érz er2vos er2vös er2vú er1ya 2esa. e2s1a2b e2s1a2d 2esait e2s1alja es1alm esa2n es1any esa2p es1apá es1arc es1ass es1asz es1a2ty e2s1au 2esábó e2s1á2g 2esán es1ára es1á2ru 2esát es1bl es1br es2ch 1esdő es1dró 1esedez ese1fr ese2gye e2s1elm e2seng es1epri e2s1erd eseren2 1e2settü 2esé. esé2g1el 1eséll 1esély e2s1ép es1érc esés3s e2s1i2d esike2t1 e2s1ina es1i2pa e2s1isk 1esítőst es1í2zű e1s2kat e1s2kál es2kic 1eskü es2lat eslege2l esle2t1o es2lin e1s2lu e1s2mac esná2 2esok. 2esoka 2esokbó 2esokk 2esokr 2eson e2s1op 2esos. 2esosa es1osz es1ott e2s1ó2r esőká2 e2sőz es2pan es2pec es1p2l e1s2pó e1s2rá es1stá es3szab essz1aga essz1a2r 1esszenc es3szerű essz1élet essz1élt essz1int essz1ok es3szö e1s2tab es2taf es2t1a2l es2tana es2t1a2ny estapolc1 es2t1a2ra est1ará e1s2tat es2taz es2t1á2p est1áram es2t1ári es2t1árn es2t1át 1esteko es2tenz este2r1a es2t1este es2t1esti 1estéih 1estéj 1estém 1esténk es2t1ér. es2t1éri es2t1érr es2térte es2t1é2rü es2t1ill es2t1ina es2t1int es2tip es2t1isz es2tiz es2t1ol e1s2top esto2r es2t1os es2t1ó2r estö2 es2t1ös es2t1őr. es2t1őrk es2t1őrö es2t1őrr es2t1őrt es2tun es2tú es2tür es2t1ü2z e2s1ud esu2r es1ura es1urá e2s1utá es1úr. es1úrb es1úré es1úrh es1úri es1úrk es1úrn es1úrp es1úrr es1úrt e2s1ú2t e2s1üz e2sza2c esz1acé e2szad e2sz1a2e esz1ajt esza2k1é esz1akn esz1alj esz1any e2sz1ara e2sz1au e2száru e2sz1ás eszá2t esz1áts e2szece eszeg1ér e2sz1egy esz1ekés e2sz1ela e2sz1e2mel 1eszenc e2sz1erd e2szev e2sz1ex eszé2do esz1é2pí e2sz1é2ri esz1g2 esz1i2pa esz1isk esz1ist e2sz1ita e2sz1iz eszke2l 1eszme. 1eszméb 1eszméi 1eszméj 1eszmék 1eszmén 1eszmét 1eszmév e2sz1old eszö2l esz1ölő e2sz1ön es3zsá esz3se esz2tab esz2tad esz2t1a2gá esz2taj esz2t1ala esz2t1alj esz2t1ap eszt1árf esz2t1árn esz2t1e2v esz2t1ér. esztés3s 1esztéti esz2tid esz2t1ol esz2t1ó2r esztö2 esz2t1öl esz2t1őr. esz2tut esz2t1út esz2tüz e2sz1ü2g e2sz1ü2z 1e2szűs 1e2szűt esz1z et1abr eta2c et1acé e2t1a2d e2t1a2gá e2t1a2gy e2t1a2j et1a2kas e2t1akc et1akó e2t1aku eta2lag eta2lak et1a2lás e2t1alb et1ald et1alf e2t1alg et1alj e2t1alk 1e2talo eta2n1é eta2nyag e2tapr et1a2ra e2t1ará e2t1arc e2t1arz et1asp e2t1ass et1a2szá e2t1atk e2t1a2to e2t1aty e2t1a2u e2t1a2z et1ábr e2t1á2cs e2t1áf et1ág. e2t1á2ga et1ágb et1ágg et1ágn et1ágr e2t1áh et1áju et1áll e2t1álm e2t1á2rad et1áre et1árny etá2ron et1á2rú e2t1á2ta etát1a2d e2t1áth et1átl et1áts et1átu e2t1átv et1bl et1br et2ch et1dr etea2 eteg1á ete2g1e2l ete2gó e2t1e2ke. e2t1e2kei e2t1e2kek ete2k1ék e2t1e2kénk e2t1e2kés e2t1elc et1eldo ete2lege ete2legy et1e2lej e2telemz e2t1e2lesé e2t1eléré etelés1s e2t1elha e2t1elhá et1elhel e2t1eliga e2t1eljá e2t1ellá e2tellen e2t1elme e2t1elmén. e2t1elméne e2t1elmét e2t1elnev e2telnö e2t1elny e2t1e2lo ete2lőad et1elszá e2t1eltá e2t1elter et1eltérí e2t1elvá e2t1elvez e2t1elvo e2t1elz ete2mal e2t1ember ete2mel e2t1enz ete1p2 e2t1erd ete2rén etero1 e2t1erő ete2s1a e2t1este. e2t1eszté ete2teté ete2t1ér. 1e2tetésen 1e2tetésn ete2tos ete2t1ö ete1tra e2t1ezr etéé2 et1ég. et1égb et1é2gé et1égg e2t1é2gi et1égn eté2k1a2 eté2k1á2 eté2k1e2l et1ékí eté2kos e2t1élm e2t1érc e2t1é2ré. e2t1é2rén e2t1é2rér e2t1é2rét eté2rie e2t1érke e2t1érm e2t1é2rős e2t1értel e2t1érz eté2sa eté2s1ég eté2so etés3s eté2sza et1észl et1észr eté2t1a2 eté2ter. eté2tere eté1tra e2t1é2ven eté2ves. e2t1é2vet e2t1é2véh eté2véig e2t1é2véne eté2vétő et1évh et1évt et1fr et1gl et1gr et2hei eti2d et1ide et1ido eti2g e2t1ige e2t1igé e2t1igy e2till et1i2ma e2t1imá e2t1i2mi 1e2timo e2t1imp etina1 e2t1ind e2t1inf e2t1ins e2t1inte e2t1inv e2tinz e2t1i2pa e2t1i2ra e2t1iri e2t1iro e2t1iró e2t1ism e2t1iste e2t1i2sza e2t1i2szon e2t1i2ta et1izé e2t1izg e2t1izo e2t1izz e2t1íg e2t1íj e2t1ín e2t1í2r e2t1í2v e2t1íz et1kl et1k2r et1kv 1etnol et1oda e2t1okm e2t1okt e2t1oml eto2n1a2 eto2nál eto2n1is eton1n et1opc et1ope e2t1opt 2etor et1ord e2t1org e2t1orm et1orom e2t1ors e2t1orv et1ost etosz2f et1oszl et1oszt e2t1ou e2t1ó2c et1ó2ra et1ó2rá e2t1ó2v et1öko etö2l e2t1öl. et1ölé e2t1ölő e2t1ön e2t1ös e2t1öt et1ö2vü e2t1ö2z etőa2 etőe2l etőé2b etőfé2l1é2v e2t1őr. e2t1őrb et1őrc et1ő2réh ető2ri. et1őrk et1őrl e2t1őrn ető2rök et1őrp e2t1őrr e2t1őrs et1ő2rü ető1s2p et1pl et1pr et1ps e1trap e1trau e1t2rág e1tréf e1t2ril et1sk et1sn et1sp et1st et3tad ettai2 etta2n1ó2 et2telem et2t1ing et2tír et1t2rá et1tri etty1á2 e2t1ug et1una et1und et1u2ra etu2sz et1utá et1utó et1utu e2t1új e2t1ú2ri e2t1út e2t1üd e2t1üg e2t1üld e2t1üt e2t1ü2v et1ü2zem et3ya e1u eu2bo eu2ga eu1k2h eu2mal eu2m1e eu2mim eu2m1i2p eu2mis eu2m1iz eu2mí eu2mór eu2mő eum1p2 eu2mü eu2na eu2ná eu2ni eu2no eu2nó e2ur. eu2rá eur1áz eu2ri. eu2rig e2urt eu2szí e2utai eu2tal e2utan eu2taz e2utái e2utájá e2utáka e2utákk e2utákná e2utákr e2utánk e2utár eu2tó e2uts eu2zs e1ú eú2jí eú2sz eú2ti eú2to e1ü eü2dü eü2ge eü2gy eü2le eü2lé eü2li eü2lö eü2lő eü2lü eü2re eü2rí eü2rü eü2sz eü2te eü2tő eü2tü eü2ve eü2vö eü2ze e1ű eű2ri eű2ze eű2zé eű2zi eű2zö eű2ző evá2r1al eve2szö evé2lá evé2l1e2l evé2nyel evé2r1emb evé2rö evé2so evé2sza evé2szö evízi2óét ex1ab ex1al ex1ap ex1áb ex1á2r e2x1át ex1bl ex1br ex1dr e2xeg e2x1elm e2x1elvá e2x1er e2x1ék e2x1él e2x1ép ex1idő e2x1igé ex1inf e2x1ing e2x1int ex1izz e2x1íj e2x1ír e2x1ob ex1op ex1ön ex1ör ex1ös 1expan ex1sk ex1sp ex1st ex1új e2x1üg e2x1üv e2x1üz eza2c ez1acé e2z1a2d e2z1af ez1ajt e2z1a2l e2z1a2n ez1arz e2z1as ez1aut ez1áll ezá2ma ez1árb ez1árr ez1á2rú e2z1át ez1bl ez2dál ez1e2gy ez1e2kék e2z1ela e2z1e2leme e2z1elér e2z1elm e2z1el1ö e2z1e2mel ezen2t1e2 eze2r1a eze2rá eze2red eze2r1el eze2r1em eze2r1es eze2r1o ez1erő ez1este e2z1e2sz eze2t1a2 eze2t1á eze2t1eg eze2t1e2l eze2t1esz eze2t1ér. eze2t1é2rő. eze2t1é2ve. eze2t1o eze2tu e2z1ég e2z1é2j ezé2ká ezé2k1o e2z1él ezér1emb ezé2rett ezé2ru ezé2sa ezéskész1 e2z1é2te ez1fr ez1gr ez1i2do ezi2g e2z1igé e2z1i2ko e2z1ill ez1imp ez1iná ez1ind ez1inf ez1int ezi2o ez1ion e2z1i2p ez1i2r ezisé2g ezi2s1égé e2z1ism ezi2ta e2z1í2v ez1k2r ezkupac1 ez1kv e2z1ob ez1old ezo2nár ezon3n ez1opt e2z1ox e2z1ó2l e2z1ó2r ez1ó2t ez1ö2b ez1ös ez1ö2v ezőe2l e2z1ő2ri ez1őrl e2z1őrs ez1ő2rü ez1őrz ezős1orra ez1pl ez1p2r 1ezrede 1ezreds 1ezrel 1ezrem 1ezresn 1ezrű ez3saj ez3sap ez3sát ez3sáv e2z3sé ezsió2 ez3sl ez3sor ez3s2p ez3s2ta ez3str e2z3sü ez3sz ez1t2r ez1u2r ez1ut ez1új ez1ú2t e2z1üg 1e2züs e2z1üt e2z1ü2z 2é. é1a éa2da éa2dá éa2do éa2dó éa2ga éa2gi éa2já éa2ka éa2la éa2l1e éa2na éa2ny éa2ré éa2ri éa2ro éa2uk é1á éá2fá éá2gy éá2ju éá2ra éá2ro éá2ru éá2rú é2b1ag é2b1a2j é2b1a2k é2b1a2l éba2n é2b1any é2b1a2v éb1ál ébá2r éb2b1á éb1eszű é2b1é2k é2b1él é2b1ép ébié2 éb1isk éb1i2va éb1íz éb1kr éb1pl éb1pr 1ébres é2b1ug éb1üg éc1a2d éc1aj éc1a2k éc1a2l éc1a2n éc1ál éc1ár é2c1e2lem é2c1elv é2c1ember é2c1e2mel éc1gr éc3ha éc3há éc3hí éc3ho é2c1i2d é2c1il éc1ima éc1ob éc1os éc1őr éc1pr éc3sab écs1ol éc3sz é2c1u2t é2c1ül éc3zs é2d1ab é2d1a2c é2d1a2d é2d1a2g é2d1a2j éd1akc éd1akt éd1a2ku éd1alk é2d1a2n éd1apa éd1a2pá é2d1arc éd1asp éd1ass éd1a2ti éd1att é2d1ág éd1áp éd1dr é2d1e2g é2d1ej é2d1e2ke. éde2kétő é2d1e2l1a é2d1elk é2d1ell é2d1elo éd1ember é2d1eml é2d1enz é2d1ep éd1erd é2derei é2derem é2derg é2derl é2derné é2d1erő é2derrá é2derrő é2ders é2dertő 1édesa é2desem 1édesg 1é2desí é2d1ég é2d1é2j é2d1ékb é2d1é2ké é2d1ékk édé2l é2d1éle é2d1élm é2d1ép é2d1ér. é2d1é2ri é2d1érs é2d1érte é2d1értő é2d1érv é2d1érz éd1fr édi2ad édi2aka édi2al édi2ar édi2a1s édiasz2 é2d1i2d édi2g é2d1iga é2d1ige é2d1igé éd1i2ko éd1ill é2d1i2m éd1i2na éd1ind é2d1ini éd1ins é2d1int é2d1i2p é2d1iro é2d1i2z é2d1ín é2d1ír éd1ív éd1kl éd1okta é2d1op é2d1or é2d1osz éd1ott éd1ó2r éd1öl éd1ön é2d1ö2r éd1öt éd1öv éd1öz é2d1őrm é2d1őrn édős2 édő1sp éd1pl éd1pr é1d2ram éd2raz é1d2rám éd1sk éd1sp éd1sr éd1st éd1t2r é2d1ud éd1uj éd1ura é2d1u2t é2d1új éd1úr éd1ú2t é2d1üd é2d1üg é2d1üt é2d1üz éd3za éd3zá éd3ze éd3zó éd3zü é1e ée2bé ée2la ée2le ée2lő ée2me ée2pi ée2rő ée2se ée2sé ée2si ée2ső ée2sz1a2 ée2sz1á ée2szel ée2szép ée2szir ée2szis éeszt2 éesz1tr ée2uf ée2vé ée2vő é1é éé2ge éé2le éé2pí éé2ra éé2te éf1ai éf1ajtó éf1ing é2f1is éf1kl é2f1os ég1abl ég1abr ég1a2d ég1aka ég1akk ég1akn ég1alj ég1am ég1a2ny ég1a2p é2g1a2r ég1aut ég1a2v éga2z é2g1á2g é2g1ál ég1áp ég1árt égát1a2d ég1átá ég1á2t1e2 ég1átf ég1átj ég1átm ég1áts ég1átt ég1átv ég1bl ég1br ég1d2r ég1ece é2gedén é2g1edz ég1e2ge é2g1ej é2g1e2kés é2g1ela é2g1elb ége2leg ég2elek ége2lemb é2ge2leme ége2lemn ége2lemt é2g1elér é2g1elf é2g1elha ég1elhá ége2lin é2g1elis é2g1eljá é2g1elk é2g1ellá é2g1ellen é2g1elm é2gelnö ég1elny é2g1elö é2g1e2lőa ége2lőm é2g1e2lőn ég1e2lőt é2g1elp é2g1elr é2g1elsa é2g1elszí ég1elta é2g1eltá é2g1elvá é2g1elz é2g1enc é2g1e2ne é2g1eng ége1p ég1epi ége2rál é2g1erede ége2r1el égeri2 ége2rim ége2rin é2g1eró ég1erő ége2rül 1é2gesd é2g1essz ége2sze é2g1eszk é2g1eszt 1é2getj 1é2getőh 1é2getőn 1é2getőt ég1eva ég1e2ve ég1e2vé ég1evo é2g1ex é2g1é2g é2g1é2l é2g1é2neke é2g1é2neké é2génekk é2g1é2nekn ég1épí é2g1épü ég1é2ret é2g1é2rez égé2ré. é2g1érh é2g1é2ri ég1érl ég1érm ég1é2rő. ég1é2rők égért2 ég1érte ég1érté 1é2gésé 1é2gésn é2gést é2g1éva ég1fl ég1fr ég1g2l ég1g2r ég3gyo 1éghes 1éghü égi2as ég1i2den égi2g é2g1iga. égig1ap égig1as ég1igaz égig1á é2gill é2g1imá ég1ina ég1inf é2g1ing é2g1inj ég1ins é2g1int é2g1ira ég1iro é2g1i2ta é2g1iva é2g1i2zésn é2g1izg ég1íg ég1íj ég1ín ég1ír ég1ív ég1íz 1égj. égkia2 ég1kl ég1kr ég1kv 1égne. 1égnék 1égnén 1égnét 1égni é2g1ob ég1oki ég1ola ég1old ég1oli ég1oll ég1olt é2g1op é2g1o2r é2g1os ég1ott é2g1o2v é2g1ox é2g1óc ég1ó2r ég1öb é2g1ö2d é2g1ö2l ég1ön égö2r ég1örö é2g1ös é2g1öt é2göv é2g1ö2z 1égő. 1égők é2gőr ég1őri ég1őrö ég1ősi 1égőt 1égőv ég1pl ég1pr ég1ps ég1sk ég1sp ég1s2t égsz2 1égsz. égszáraz1 ég1tr é2g1ud ég1un é2g1u2t ég1úg ég1új ég1úr ég1ús ég1ú2t é2g1üd é2g1ü2g é2g1ür é2g1üs é2g1üt é2g1üv é2g1üz é2g1űz égvezé2 é2gy1a2 é2gyál é2gyedé é2gy1eg é2gyelek é2gyeleme égye2m é2gy1emb é2gy1eme égye2seké é2gy1esz é2gy1e2v é2gyeze é2gy1ék é2gyél égy1é2ne égyi2 é2gyin é2gyir é2gy1is é2gy1iv é2gyí égyo2 égy1ok égy1os égy1ot é2gy1ó2 égy1ö2l é2gy1u2 é2gy1ú é2gy1ü2l é2gyür éha2l éh1ala éh1any é2h1arc éh1art é2h1au é2h1a2v éh1edé 2éheg éh1e2gé éh1e2le éh1elé éh1elf éh1elh éh1ell éh1e2lő éh1elt éh1elv é2h1enz é2h1e2r é2h1esem é2h1e2to éh1evé é2h1ex é2heze 1é2hezé 1éhező 1é2hezt é2hezü é2hezv éh1ég éh1é2k é2h1é2l é2h1ép éh1érb éh1fl é2h1ic é2h1if é2h1i2n é2h1ip éhi2r éh1ira éh1irt é2hit éh1ita é2h1iz éh1ín éh1kr é2h1od éh1old éh1öb éh1ö2d éh1ös éh1pl éh1pr 1éhsé éh1sk éh1sp éh1ud éh1új é2h1üg é2h1ür é2h1üt é2h1űr é1i éi2dő éi2ga éi2gé éi2má éi2pa éi2rá éi2ro éi2ta éi2vás éi2vó é1í éí2rá éí2ro éí2ró éí2vá éí2ze é2j1ab é2j1a2da é2j1a2l é2j1any é2j1a2r é2j1á2l é2j1áp é2j1árn éj1eb é2j1e2lem é2j1elh éj1elm é2j1elv éj1emb é2j1esz é2j1e2v é2j1é2g éjé2j é2j1é2k é2j1él é2j1ép é2j1é2te 1é2ji. é2j1il é2j1im éj1i2n é2j1ip é2j1iz é2j1o2l éj1ó2r éj1öd éj1ön éj1ör éj1pl éj1pr éj1sp éj1sz éj1ud éj1u2r éju2t éj1uta é2j1úr é2jül é2j1űz ék1abl ék1a2cé éka2dat ék1a2dá ék1a2dó ék1ajt éka2kad é2k1aká é2k1akk é2k1akn éka2lag ék1a2lak é2k1alg é2k1alj ék1alko é2k1all é2k1alt ék1alu ék1amb ék1ang ék1app é2k1a2rá ék1arc ék1a2ré ék1arz é2k1asp é2k1ass ék1aszt ék1a2tom ék1a2ve ék1azo é2k1ál é2k1á2p ék1árad é2k1á2rak é2k1á2rá ék1árb é2k1á2ré ék1árh é2k1árk é2k1árn é2k1á2ro ék1árr é2k1á2ru ék1á2rú ék1ásó ék1ásv é2k1áta é2k1átá é2k1átc é2k1átd é2k1áte ék1áté é2k1átf é2k1áth é2k1áti é2k1átí é2k1átk é2k1átl é2k1átm é2k1átö é2k1átr é2k1áts ék1átt é2k1átu é2k1átv é2k1áz ék1bl ék1br ék1dr ék1egé é2k1e2kés é2k1elb é2k1e2leg ék1e2leme ék1e2lemé éke2lemm ék1e2lér é2k1elf é2k1elk é2kellá é2k1ellen é2k1elm é2k1elo ék1elp é2k1elta ék1eltá é2k1eltér ék1elül ék1elvi é2k1e2mel ék1eng éke1p2 é2k1erd é2k1e2rec é2kered é2k1e2rei é2k1e2rez é2k1erg é2k1e2ró é2k1e2rő é2k1e2sete ék1eszk éke1szl é2k1e2tet éke2tik éke2vés é2k1e2vo é2k1ex é2k1ég ék1éjs é2k1épí é2k1épü é2k1érc é2k1é2rem é2k1é2ren é2k1é2ré é2k1é2ri é2k1érk é2k1érl é2k1érm é2k1é2rő. é2k1é2rői é2k1é2rők é2k1érp é2k1érr é2k1érte é2k1érté é2k1értő é2k1é2rü é2k1érv é2k1érz 2ékés ékés3s ék1észl é2k1étk ék1étv é2k1é2ve. é2k1é2vek ék1é2vet é2k1é2véb é2k1é2vén é2k1é2vét é2k1é2vév é2k1évi ék1fj ék1fl ék1fr ék1g2r ékia2 éki2d é2k1ide ék1idé ék1ido é2k1idő éki2g ék1iga ék1ige é2k1igé ék1i2ko ék1ikr é2k1ill é2k1ima é2k1imá ék1imi ék1ind é2k1ing é2k1inh é2k1inn é2k1int é2k1inv é2k1i2o é2k1i2p é2kirán é2k1iro é2k1isk ék1ism é2k1ist éki2sza é2k1i2ta é2k1i2z ék1íj é2k1ír é2k1í2v é2k1í2z ék2kál ék1k2l ék1k2r ék1kv é1k2lu é2k1ob ék1of é2k1oká é2k1o2laj é2k1olda ék1oltás é2k1oml ék1opc ék1o2pe é2k1org é2k1orm é2k1orr é2k1orz é2k1osto é2k1ott é2k1ou é2k1ox é2k1óc ék1ó2l é2k1ón ék1ó2ra ék1ó2rá é2k1ó2v é2k1ó2z é2k1ö2b ékö2l é2k1öm ék1önt ék1ö2rö é2k1ös é2k1ötl ék1ö2vö ék1ö2zö ék1ő2r ék1ős ék1pl ék1pr ék1ps é1k2reá ék2rim ék1sh ék1sk ék1sl ék1sp ék1s2r ék1st ék1sz2 ék1t2r é2k1ud é2k1ug é2k1uj é2k1und é2kuni é2k1u2tac é2k1u2tak ék1u2tal é2k1u2tas é2k1utá é2k1új ék1úr. ék1úrn ékú2t é2k1úth é2k1úti é2k1útj é2k1útn é2k1úto é2k1útr é2k1útt é2kútv é2k1üd é2k1üg ék1ü2le é2k1ünn é2k1ür é2k1ü2s é2k1ü2t é2k1ü2v é2k1üz ék1űr. ék1űrb ék1ű2rö é2k1űz él1abl él1abr él1a2cé él1a2da él1a2do él1a2dó él1a2g é2l1a2j él1a2ka él1akc él1akn él1ako é2l1a2l él1amc él1a2me él1and él1apó él1arm él1asp él1ass él1asz él1a2to él1a2u é2l1a2va él1azo él1ábr é2l1á2g élá2l é2l1áll é2l1álmá é2lálmot é2l1álo é2l1á2p él1ár. él1á2rá él1árb él1árf él1á2ri él1árk é2l1árn él1á2ro él1árr él1á2ru él1á2rú él1árv él1át1a2 él1átc élát1e2 é2l1átf él1áth él1á2ti él1átj é2l1átm élá2tok él1átr él1áts él1átt él1átü él1átv él1bl él1br élc3sz él1d2r éle2b é2l1ebé é2l1e2dz él1eff él1e2gé élegész1 él1e2gy éle2k1a2 éle2k1á éle2k1e2l éle2kem éle2ker éle2k1es é2l1e2kés éle2kis éle2kol éle2k1on éle2kot éle2kó éle2k1ö2 éle2ku éle2k1ú él1e2l1a é2l1e2leg él1elf é2l1elo é2l1előe éle2lőj é2l1e2lők éle2lőt é2lemb é2l1e2mi é2l1emp éle2n é2l1ene é2l1eng é2lenj é2l1enn é2l1eny é2l1enz él1e2ró é2l1e2sés éle2szü éle2szű éle2t1a2 éle2t1á2 éle2t1eg éle2t1e2l éle2t1e2r éle2tesz éle2t1ék éle2tél éle2t1ér. éle2t1érd éle2t1é2rő. éle2térü éle2tés éle2téte éle2tété éle2t1étn éle2t1é2ve. éle2t1é2ved éle2t1é2vén éle2tik éle2tisz éle2t1o éle2tó életö2 éle2t1öl éle2t1ör éle2t1u2 éle2tüz éle2t1ű2z é2l1e2vő é2l1ex élé2d é2l1éde é2l1é2g él1é2hes él1ékek él1ékí é2l1é2l él1épü é2l1ér. é2l1érb é2l1érd él1é2rem é2l1é2ret é2l1é2ré é2l1érm é2l1érn é2l1érte é2l1érté é2l1é2rü é2l1érz élé2sa élés3s é2l1é2te é2l1étk é2l1év. é2l1é2v1á é2l1é2ves é2l1é2vet é2l1évez él1é2vén é2l1é2vér é2l1é2vi él1évü él1f2l él1f2r él1g2r é2l1i2d é2l1iga éli2gá é2l1i2ge é2l1igé é2l1i2ko él1ill éli2m él1ima él1imi él1imp é2l1ind é2l1inf é2l1ing él1int él1inv él1inz él1i2on é2l1i2p é2l1irá él1iro é2lism éli1s2p é2l1i2szá él1i2va é2l1i2vá él1izg é2l1izm é2l1i2zo él1íj él1í2r él1í2v él1íz él1k2l él1k2r él3lyu él2mat 1élmén é2l1ob é2l1okm é2l1oks é2l1ol é2l1o2r élos3s é2l1osz é2l1óc él1ó2n é2l1ó2r él1öb él1öc1 élö2k él1ö2l él1ön él1ör él1ös é2l1ö2z élőe2 él1őrü 1é2lősk él1p2l él1p2r élrádi2 élre1pr él1sk él1sp él1st él2sz1árnn él1szt éltal2p1al él1trá él1tré él1tri él1tró é2l1ud é2l1ug é2l1uj él1ult él1u2r é2l1u2tas él1utó é2l1új él1úr é2l1üg él1üll él1ült é2l1ür é2l1üs é2l1üt é2l1üv é2l1üz él1űz 1élvező é2ly1ab é2ly1a2d é2lyaj é2ly1a2l ély1a2n é2ly1ap ély1a2r é2ly1as ély1au é2ly1av ély1az é2ly1á2l élye2c é2lyef ély1egy é2lyekés é2ly1el é2lyeml é2lyene é2ly1ent é2lyer é2lyeti é2ly1é2j é2ly1ék é2lyél é2lyés ély1f2 é2ly1ira ély1k2 é2lyol é2ly1ó é2lyös é2ly1öz é2lyő ély1s élyú2 é2lyültet é2lyüt ém1abr éma1d2 ém1a2da ém1a2dó émae2 émai2k ém1ajt ém1akk ém1all ém1alm ém1app ém1arc ém1arm émas2 éma1sp émat2 éma1tr ém1aut ém1a2zo émá2c émá2l ém1álm ém1álo é2m1áp ém1árn é2m1áru émát1a é2m1átt ém1b2l ém1b2r ém1dr éme2c éme2g é2m1e2ke. é2m1e2kés ém1ela éme2led é2m1elh é2m1ell ém1e2lő ém1els é2m1elv ém1e2re ém1ern ém1e2rő éme2s1á é2m1esemé é2m1esz éme2ta éme2tel éme2t1ék éme2to é2m1e2v é2m1ex ém1éks é2m1é2l é2m1ép é2m1érc ém1érd é2m1éri é2m1érm é2m1érté é2m1és é2m1é2te ém1fl ém1fr ém1gr émi2al é2m1i2d émi2g é2m1igé ém1iks ém1ill ém1ind ém1inf é2m1inv é2m1i2o é2m1i2p ém1irá ém1irh é2m1iro ém1isk ém1ism émi2sz ém1i2ta ém1izo é2m1ír ém1í2v ém1íz ém1kl ém1kr émo2nac émo2ne émon1n émont2 ém1o2p ém1ost ém1ox ém1ó2l ém1ó2r ém1öb ém1ö2l ém1ön ém1ös ém1öt ém1öv ém1ő2r ém1p2l ém1p2r ém1sk ém1sl ém1sp ém1s2r ém1s2t ém1sz2 ém1t2r ém1uj ému2n ém1una é2m1u2r é2m1úr é2m1üg é2m1ür é2m1üt é2m1üv é2m1üz ém1wh én1abb é2n1abl é2na2dal én1adá én1a2do én1agá én1agr én1akc é2n1akn én1akt én1alk én1ana én1ano én1ant éna1pré én1arc énas2 éna1sp é2n1ass én1atm é2n1a2tom éna1t2r é2n1au é2n1ág éná2l én1ála én1álc én1áld é2n1áll é2n1á2p é2n1á2rak énás1s én1ásv én1áta én1átb én1áte én1átk én1átö é2n1átr én1átt én1átü é2n1átv énba2 én1bl én1br én1d2r é2n1ef én1e2gy 1é2ne2k1a2 1é2nekd é2neke. 1é2nekei 1é2nekek 1é2nekem éne2ker 1é2nekes éne2k1é2j 1é2nekf 1é2nekg éne2kiz 1é2nekí 1énekj 1énekka 1é2nekl éne2kó éne2k1ö 1é2neks én1ela én1elg én1elh én1elj én1ell én1eln én1e2lő én1elp én1els én1elt én1elv én1eml éne2n é2n1ene éne2r1a éne2r1á2 éne2reme én1eró é2n1e2sz éne2t1a2 éne2t1á2 éne2t1e2l éne2test éne2to é2n1e2v é2n1ex én1éjb én1ékb én1é2ké én1é2ki én1é2kű éné2l é2n1éle é2n1élő éné2m1a én1éneke é2n1ér. é2n1érc é2n1éré éné2ter 2énéz én1f2r énfüstö2 énfüs2t1öl én1g2r én1ido éni2g é2n1igé én1iko én1ill én1imi én1ina én1ind én1inf én1inh én1int é2n1i2p én1ism é2n1ita é2n1iva é2n1i2z én1íj én1ín é2n1ív én1k2l én1k2rá én1k2ré én1kri énmű1 én3nyo é2n1ol én1oml én1ond é2n1or é2n1osz én1ot é2n1ox én1óc é2n1ó2r én1ök én1öl én1ön én1ör én1öt 2énöv é2n1ö2z én1ő2s énpe2 én1pl én1pr én2sas én1s2p én1s2t2 én2sú én1tra én1trá én1t2ri én1tró é2n1u2t én1út é2n1ü2g é2n1üle é2n1ür é2n1üs é2n1ü2v é2n1ü2z é2ny1a2 é2ny1á2 énye2c é2ny1ece é2nyecse é2ny1e2dz é2nyef é2ny1egy é2nyekés é2nyela é2nyelá é2ny1ell é2ny1elo é2ny1elvá ény1elvű ény1elvv é2nyema ény1enc é2ny1ep é2nyerd ény1ered é2ny1e2rő é2ny1e2sett é2ny1e2sés é2ny1e2ső é2ny1essz é2ny1esté é2ny1e2sz é2nyeta é2nyeti é2nyetű é2ny1ev é2ny1ég é2ny1é2j ényé2k ény1éke ény1ékh ény1ékn ény1ékt é2ny1é2l é2ny1ér. é2ny1érd é2nyéré é2ny1é2ri é2ny1érn é2nyérte é2ny1érté é2ny1é2rü é2ny1érv é2ny1érz é2ny1és é2ny1é2te é2ny1étt é2nyéva é2ny1if ényi2g é2ny1igé é2ny1i2ko é2ny1ing é2ny1ira é2nyiro é2nyisk é2nyita é2nyiz ényí2r ény1írá ény1író é2ny1ok é2ny1o2l é2ny1o2r é2ny1os é2ny1ó2 ényö2 é2nyön ény1ör é2ny1ös ény1öz é2ny1ő2 ény1s ényt2 ény1tr é2nyu ény1u2r ény1us é2nyúj ény1út é2ny1ü2lő é2ny1üs é2ny1üv é2nyüz énza2 én2z1ad én2zag én2zak én2z1al én2zar én2zau én2z1ál én2z1ás én2z1át én2z1e2r én2z1im én2z1in én2zis én2zí énzo2 én2z1ol én2zor én2zos én2zör én2z1ő én2zsa én2zse én2zur én2zú énz1z é1o éo2la éo2pe éo2sz é1ó éó2ra éó2ri é1ö é1ő ép1ado é2p1a2j ép1alk épa2ny ép1apo épa1pr ép1arc ép1aré ép1ass ép1atl épau2s ép1aut ép1a2va é2p1á2g é2p1álla é2p1állo ép1áp ép1ár. ép1árb ép1árf ép1ári ép1á2ro ép1á2ru ép1á2rú ép1átb ép1átj ép1átl ép1átm ép1áts ép1átü ép1átv ép1bl ép1br ép1dr é2peb ép1e2gé ép1e2gy é2p1e2kés 2épel é2p1ela é2p1elá é2p1elb é2p1elc ép1e2lemb é2p1e2leme ép1e2lemr é2p1elér é2p1elf é2p1e2lin ép1eljá é2p1elk ép1ellá é2p1ellen é2p1elm é2p1elo é2p1e2lőke é2p1elr é2p1eltér ép1elu épe2n é2p1ene é2p1e2p é2p1er épe2rő é2p1esem é2p1e2ser é2p1e2sett é2p1e2sés é2p1e2ső é2p1este é2p1esté é2p1esti é2p1estj épe2sz é2p1esze é2p1eszk é2p1eta ép1e2tete épe2teté é2p1etű ép1eva é2p1ex é2p1ég é2p1é2k é2p1é2l é2p1é2neke é2p1ér. é2p1éri épé2sa é2p1éte ép1fl ép1gr é2p1i2d é2p1i2ko é2p1imp ép1ind ép1ing é2p1ins é2p1int ép1i2pai é2p1i2ra é2p1i2rá é2p1i2ro é2p1irt ép1isk é2p1ism é2p1ist é2p1i2ta é2p1iz ép1ín é2p1í2r 1építm é2p1ív épká2r ép1kl ép1kr ép1kv éple2t1ö ép1ob é2p1ok ép1old ép1olv ép1on ép1op ép1orm ép1ors ép1osz é2p1óc é2p1ó2h ép1ó2r ép1öl ép1öm ép1ön épö2r ép1ös ép1ö2z ép2p1ek ép2pí ép1p2l ép2p1od ép1p2r é1prog ép2rózá ép1sh ép1sk ép1s2n ép1sp ép1s2t épsz2 ép1t2r ép1udv ép1ug é2p1uj épu2n ép1uno é2p1u2r épu2s é2p1u2t ép1új ép1ús ép1út é2p1üd é2p1üg é2p1üld 1épüle é2p1ür ép1üs é2p1üv é2p1üz ér1abl ér1abs é2r1a2d ér1a2gá ér1agg ér1agy ér1a2ja ér1ajt é2r1a2ka é2r1akc é2r1a2la ér1alá ér1alg ér1alk ér1alm ér1alv ér1amb ér1amp ér1ane ér1ani ér1a2no ér1ant ér1a2pá ér1a2pó ér1app ér1apr ér1a2ra ér1a2rá ér1arc ér1asp ér1ass ér1a2ti ér1atk ér1atl ér1a2to éra1t2r ér1att ér1aty é2r1a2u ér1a2va é2r1a2x ér1a2zo é2r1ábr ér1ág. é2r1á2ga ér1ágb ér1ágg ér1ágy é2r1á2l ér1á2p ér1árá ér1árk ér1á2ro ér1árp ér1árr ér1á2ru ér1á2t1a2 ér1á2t1á2 ér1átc ér1á2t1e2 ér1áté ér1átf ér1áth ér1átj ér1átl ér1átm ér1á2tö ér1átr ér1átú ér1átü ér1átv é2r1áz 1érbán ér1bl ér1br ér2caj ér2c1a2l ér2c1a2n ér2c1as érc3c 1ércd ér2cedé ér2c1emb ér2c1esz ér2c3h ér2cil ér2c1im ér2ciz ér2c1o ér2có ér2c1ö ér2cő ér2c3seb ér2c3sis ér2cú ér2cz ér2d1am ér2d1á2 1érdekbő 1érdeke. 1érdekei 1érdekel 1érdekl 1érdekt 1érdekü 1érdekű 1érdemé ér2d1erő érd1este érdés3s ér2d1i2ná ér2d1iz ér1dra érdü2l ér2d1ülé ér2d1ülő ér2d3z ére2b ér1eba é2r1ebe é2r1ebé é2r1ebr ér1eff ére2g1a2 ére2g1á ére2ged ére2gel ére2g1em ére2gen ére2g1e2r ére2gev ére2g1él éreg1g ére2gin ére2go ére2g1ö2 é2r1e2gy éregyez1 é2r1ej é2r1e2kén. é2r1elá é2r1e2leg é2relemz ér1e2lég é2r1elis é2r1elk é2r1elo é2r1e2lőa ére2lőir é2r1e2lől é2r1e2lőme é2r1e2lőn ér1elr ér1eltá ére2m1a ére2má é2rember ére2m1eg é2r1emel ére2mes é2r1e2més ér1e2mis é2reml ére2m1o ére2m1ó é2re2mu ére2n é2r1ene é2r1e2r ére2ső é2r1eső. é2r1esőb é2r1esőj é2r1esőn éres1ő2r é2r1esőt é2r1esté ére2t1a ére2tá ére2t1eg ére2t1el ére2t1ér. ére2t1é2ve. ér1e2ve é2r1e2vé é2r1é2d é2r1é2g é2r1éj. é2r1é2jét é2r1é2k é2r1é2l é2r1é2neke é2r1ép é2r1é2ri éré2s1el éré2sza éré2szá éré2ter é2r1étk ér1é2ve. é2r1évn ér1évv érfiá2 ér1fl érfo2g1ón. érfo2g1ós érfoto1 ér1f2r ér1g2r éri2al éri2csi é2r1ido érié2n ér1ifj éri2g é2r1iga é2r1ige é2r1i2ko é2r1ill é2r1i2ma é2r1i2má é2r1i2mi é2r1i2na é2r1ind é2r1inf é2r1ing é2r1inj é2r1ins é2rint ér1inv é2rinz é2r1i2o é2r1i2pa ér1ira é2r1isk ér1ism é2r1ist é2r1i2sz é2r1i2ta é2r1iva é2r1ivá é2r1i2z ér1íg ér1íj é2r1ín é2r1ír é2r1í2v é2r1í2z ér2jan ér1k2l érkö2z1e2pé ér1k2r ér1k2v érle2t1öl 1érméé 1érméj 1érmék 1érmi. é2r1o2l ér1ont éro2p ér1ope é2r1o2r ér1ott ér1ovi é2r1o2x éró2l ér1ólo ér1óri é2r1ö2b é2r1ö2c ér1öko é2r1ö2l é2r1öm é2r1ön é2r1ör é2r1ös ér1öt ér1öv é2r1ö2z érő1f2 ér1pl ér1p2r 1érsek ér1s2k ér1sl ér1s2p ér1s2r ér1s2t érsz2 ér1szk ér2tat 1értekez ér2t1ela 1értelm 1értesí 1értékil 1értékm értés3s ért1ö2ve 1értőc 1értőg 1értőü ér1t2ran ér1trá ér1t2ren ér1t2ré 1ér1t2ro ér1tró ér1uga é2r1uj éru2m1e éru2n ér1una é2r1u2r éru2s1ér ér1u2sz ér1uta ér1utá ér1u2to é2r1u2z é2r1új ér1ú2r ér1ú2s érú2t é2r1ü2g érü2ké. é2r1ür é2r1üs é2r1üt é2r1ü2v é2r1üz é2r1ű2z érv1a2dó érv1ala ér2v1a2n ér2v1á2gy 1érvel ér2v1elem ér2v1égb ér2v1égh ér2vék ér2vél ér2vu 2érzá 1érzék. 1érzékb 1érzéké 1érzékh 1érzékk 1érzékn 1érzékr 1érzékt 1érzékü 1érzékű 1érzésil és1abl é2s1a2d és1agy és1ajt és1a2ka és1akl és1akn és1ako és1akt és1a2la és1alg és1alk és1all és1alt és1alv é2s1am és1ana és1ant és1a2ny és1apa és1apr és1ara és1a2rá és1arc és1aré és1arm és1arz és1asp és1ass é2s1a2u ésá2c é2s1ál és1árt ésá2s és1áta és1áth és1átl és1bl és1d2r ése2b é2s1ebé é2s1ef és1e2ge és1e2gy é2s1e2ke. é2s1e2kei é2s1e2kés é2s1eks é2s1ekv és1ela és1elá és1elb és1elk é2s1elm és1elo és1elr é2s1elvé és1elz és1ember é2s1e2mel é2s1eml ése2n é2s1ene é2s1eng é2s1eny é2s1e2p és1erő é2s1esz é2s1eto é2s1ev é2s1ex és1égb é2s1é2géb é2s1é2géé és1é2géh és1é2gén é2s1é2gév é2s1égh é2s1é2gi é2s1égn é2s1égv é2s1é2hen é2s1é2j é2s1é2k é2s1é2l é2s1ép é2s1ér. és1érb és1érc é2s1érd é2s1é2rem é2s1é2ren é2s1é2ré é2s1érh é2s1érl é2s1érn é2s1é2rő. é2s1é2rők é2s1é2rőv és1érr é2s1érte é2s1érté é2s1értő é2s1é2rü é2s1érv és1ész é2s1é2te és1é2ve. és1é2vet és1é2véb és1é2vét és1é2vév és1fl és1fr és1gr é2s1ic é2s1id é3sidet ésié2 ési2g és1iga és1ige é2s1ikt é2s1ill é2s1imi és1imp és1ind és1inf é2s1ing é2s1int és1inv é2s1i2p é2s1ira é2s1i2rá és1iro é2s1i2s é2s1i2ta é2s1i2vá é2s1í2r é2s1ív és2katu és1kl és1k2r és1kv é1slág é2s1ob és1oko és1okt é2s1o2l é2s1om é2s1op 2ésor és1org és1orn és1orv é2s1os é2s1ot és1o2v és1óc és1ó2l és1ón és1ó2r é2s1ö2l é2s1ön é2s1ös é2s1öt é2s1ö2v é2s1ö2z és1p2l és1p2r és2pri és1ps és1s2k és1s2p és1s2t éssz2 és3szab és3szag és3szak és3szap és3szá és4szel. és3szere és3széle és3szf és3szi és3szí és3szo és3szó és3szö és3sző és3szt és3szú és3szül és3szű ést2r és1tra és1trá és1tré é1stru és1ud és1u2r é2s1u2t é2s1ú2t é2s1üg é2s1ünn é2s1ür és1ü2té é2s1üz ész1abl é2sz1a2d ész1agy é2szaj északá2 észa2k1áz é2szakc észa2k1ü ész1ale ész1alg ész1all észa2n ész1ant ész1any észa2p ész1apo é2sz1a2r é2sz1as ész1a2to é2sz1au é2szaz 2észá é2száb é2sz1á2g észá2l ész1állá és3záp ész1áram é2szárá ész1árán ész1árf ész1árk é2sz1árn ész1á2ru é2szás é2sz1á2t ész1á2z é2sz1e2ge. é2sz1e2gei é2sz1e2gy é2sz1ej észe2k1a2 észe2ká ész1ekés észekö2 észe2köv é2sz1ela é2sz1e2leg ész1e2lemb ész1e2leme ész1e2lemé ész1e2lemm ész1e2lemn é2sz1elk ész1előd é2sz1előr é2szelőz ész1ember é2sz1emi é2s3zené é2sz1eng é2sz1ep ész1e2rez ész1e2rén ész1erkö é2szerő ész1e2sete ész1eszt észeta2 észe2t1ak észe2t1e2l észe2t1ér. észe2t1o észe2t1ör ész1e2ve é2sz1ex é2szég é2sz1ékt é2sz1é2l é2sz1é2p ész1éré é2széró é2szész é2sz1é2te é2sz1étk é2sz1i2d é2szif ész1i2ko é2sz1ikt é2sz1ill é2sz1im é2szina é2sz1ind é2sz1inf ész1ing é2sz1inté ész1io é2sz1i2p é2szira é2sziro é2szirt é2sz1i2s é2sz1ita é2sz1iz ész1í2j é2szír ész1í2vá ész1í2vé ész1í2vó ész1k2 ész1okt észo2l ész1old ész1olt é2szop ész1ors é2sz1os é2sz1ot é2s3zón 2észö és3zöld ész1ölt é2sz1ön é2sz1ös é2szöt ész1őrs ész1p2 ész3su ész3sű észtés1s ész2tors észtorz1 ész1tra ész1tri és3zul ész1ut ész1úrn é2sz1út é2sz1ü2g é2szünn é2szüt é2sz1ü2z é2szűz ész1z ét1abla ét1a2do ét1a2dó ét1adt ét1agg éta1gr étai2k é2t1ajk é2t1ajt ét1akc éta1kr ét1akt é2t1alj é2t1alk ét1als é2t1alt é2t1ani é2t1ann é2t1ant ét1anya ét1anyá é2t1aps é2t1arc é2t1arg ét1aszt état2 ét1atom étaü2 ét1azo ét1ábr é2t1á2g é2t1áll ét1á2rad ét1á2ram ét1á2rá é2t1á2ri é2t1á2rú ét1árv ét1áti é2t1átr é2t1átv ét1bl ét1dr étea2 é2tedén éte2g1a2 éte2gele éte2g1elv éte2ger éte2go é2t1e2ke. é2t1e2kei éte2la éte2l1á éte2l1e2l éte2lemü éte2l1er éte2l1ék éte2l1ér. éte2l1é2ren éte2léré é2telfog é2tellen éte2lo é2t1e2lől éte2l1ő2r é2t1e2mel étera2 éte2rad éte2r1ag éte2r1á2 éte2reg éte2rel étermo1 é2t1erő éte2sik é2t1estün é2t1esv é2t1eszm ét1e2vi été2g ét1ég. ét1ége ét1égé ét1égn ét1égt é2t1é2j é2t1é2l é2t1é2ren é2t1é2ré é2t1é2ri é2t1é2rőt é2t1érte é2t1érté é2t1é2rü é2t1érv é2t1érz ét1észl é2t1étb é2t1é2té é2t1étn é2t1étr é2t1é2ves ét1fl ét1fr ét1gr é2t1i2d éti2g é2t1ige é2t1igé é2t1i2ko é2t1i2m é2t1ind é2t1inf é2t1int éti2p é2t1ipa é2t1irá ét1iro étis3s éti2sz é2t1i2vá ét1izé é2t1í2r é2t1í2v ét1kl ét1kr 1étkű ét1kv étmeg1g ét1o2ká ét1o2ki ét1okm ét1o2l é2tola é2tolv ét1oml é2t1op ét1ord ét1org éto2ris ét1orm ét1ors é2t1óc ét1ó2ha ét1ón. ét1órá étö2k étö2l é2t1ömö é2t1ön étö2rül é2t1ös ét1ö2t ét1ö2v é2t1ö2z ét1őr. ét1őrb ét1őri ét1őrm ét1őrö ét1őrü é2t1ő2s é2t1ő2z étpen1 ét1pf ét1pl ét1pr é1t2rafá ét2réf étro2m1é2 ét1sl ét1sm ét1sp ét1st ét1t2r ét1udv é2t1ug é2t1uj étu2n ét1una ét1und é2t1u2r é2t1u2t ét1ú2s é2t1üg é2t1ür ét1üs é2t1üt é2t1ü2v é2t1ü2z étű2z é2t3ye é1u éu2ni éu2ta éu2tá éu2zs é1ú é1ü éü2gy éü2le éü2lé éü2lö éü2lő éü2rü éü2té éü2tö éü2tü éü2ze é1ű é2vad 1évad. év1adó 1évadr év1agy év1ajá é2v1a2la é2valá é2v1alk é2v1am é2v1a2n év1arc év1au év1ava é2v1a2z é2v1állo é2v1áta év1áth év1átk é2v1átr évá2z év1ázá 1évbeo é2v1e2g 1é2vei 1é2vekt év1ela 1évelf 1é2v1eli é2v1ell év1eln é2v1elo é2velő é2v1els é2v1elt é2v1elv é2v1eng 1é2venk 1é2vent év1e2ri é2v1e2rő 1é2vesb 1évesé év1e2sés 1évesf 1é2vesi 1é2vesk 1é2vesr év1esté év1eve év1é2ge év1é2gé év1égr év1égt év1ér. év1é2ré évé2ri. év1érr é2v1érte é2v1érté évé1ska évé1s2p évé1stá év1gr évi2g év1iga é2v1igé 1é2vih 1é2vik 1é2vim é2vin év1ind 1évine 1éviné év1ing év1int év1ism 1é2vitő 1é2viv é2v1ír 1évkös év1kr 1évny év1ok év1os év1ó2r év1ö2r év1ös év1öt 1é2vőd év1pr év1sk év1st év1sz évsza2k1as évtá2r1a2d 1évtő. év1ur év1új év1ú2t é2v1üg é2vük. é2vükb é2vüke é2vükh é2vüki é2vükn é2vükt é2vülj é2v1üt é2v1üz 1évzá éz1a2d éza2gal éza2ge éz1a2j éz1akr é2z1a2l éza2n éz1any éz1a2r éz1as é2z1a2t éz1az é2z1á2g é2z1á2l éz1ásv éz1áz éz1bl éz1d2r éze2c éz1ece é2z1e2dé éz1e2gé éz1e2gy é2z1ela é2z1eld é2z1e2le ézel1en é2z1elf é2z1elh é2z1ell éz1előb éz1előé éz1előg éz1elői éz1előj é2z1e2lőké éz1előn éz1előp éz1elős éz1előt éz1előv é2z1els é2z1elv é2z1emb éz2en. éze2n1á éz1enz é2z1e2p éze2r1a éze2r1á éze2r1in éze2rip éze2ro éz1erő éz1e2rű éz1esz éze2ta éze2t1á éze2t1eg éze2t1e2kéh éze2t1el é2z1e2v é2z1ex é2z1é2d é2z1ég é2z1ék é2z1é2l é2z1ér. é2z1érc é2z1é2ri é2z1érm é2z1érp é2z1érté é2z1érz éz1fr ézgé2 éz1g2r ézi2d éz1ido é2z1igé é2z1ill éz1imp éz1ind éz1ing é2z1int ézi2o éz1ion é2z1i2pa é2z1ipá é2z1i2r é3zire é3zirő ézis3s ézi2s1ú ézi2sza ézi2s3zá éz1i2ta é2z1i2vá éz1izm éz1izo é2z1izz éz1í2j éz1ír éz1í2v éz1íz ézkar2c3h éz1k2l éz1k2r éz1ola éz1old éz1op é2z1or éz1osz é2z1ox éz1öb éz1ö2k éz1ön éz1ör éz1ös éz1öt éz1ö2v ézőa2 éz1őr. éz1pl éz1p2r éz3saj éz3sar éz3seb éz3ser éz3sik éz3sín éz3sod ézsó2 é2z3sók ézs1ór éz3sö éz3spi ézs1s éz3sug ézs1ú2r é2z3sü éz3sz éz1t2r éz1ug éz1uj é2z1u2r éz1ut é2z1ü2g é2z1ür é2z1üs é2z1üt é2z1ü2z éz1űr éz3zsa 2f. 1fa faát1 fa1b2ro fa2chi fac3hi. fa2c3ho fa1d2r faegyez1 fae3lek fae2r faé2d fa1f2r fa1g2r fagyé2 fa2gyék fa2gyol fa2győ fa2gyúr fai2d fai2s fa2j1a2l fa2j1az fa2j1ág fa2j1á2ru fa2j1egys fa2jelem fa2j1elk fa2jelm fa2j1eln fa2j1elv fa2j1es fa2j1ö fa2jő fajt2 faj1tr faju2r faj1ura fa2jü fa1k2l fa1k2r fa1k2v fa2l1a2dá fa2l1a2dó fa2lajá fa2l1a2kó fa2l1a2l fala2n fal1any fa2lav fa2l1azú fa2l1ábr fa2l1ál fa2l1á2ro fa2l1áth fa2l1átv fal1e2gy fa2l1elem fa2l1elő fal1ese fa2l1éri fal1f2 fa2lid fa2l1inj fa2l1iz fa2l1í2 fa2l1ol fa2l1oml fa2lor fa2l1os fal1órá falö2 fa2lök fa2l1öv fa2l1őr fal1p2 fal2s1ín. falta2n fal2tem fal2tip fal2tüz fa2lü fa2n1e2vet fan1évb fan1évr 2f1a2nya. faó2r fa1p2l fa1p2r fa2r1a2dá fa2ragy fa2r1a2kó fa2r1a2l fa2r1at fa2r1a2v fa2r1ácc fa2r1ál fa2r1á2z fa2r1em fa2r1e2pe fa2r1id fa2r1iná fa2r1ing fa2r1izm fa2r1izo far2k1al far2kol far2mál far2min far2m1unká fa2r1okke fa2r1osz fa2r1ut fa1s2k fa1s2p fa1sta fa1sté fa2sz1ív. fa1tri fau2r fau2s fau2tá faü2t faü2z fa2xe faxi2 fa2x1ik fa2xin fa2xí fa2xö fa2xú fa2xü fa2xű fa1ya fa1ye 1fá f1ábr fá2c3h fá2gép fáj2lak fáj2lá fáj2l1e2 fáj2l1í2 fá2ní fánka2 fán2kar fán2ká fán2tad fán2t1a2g fán2tan fán2t1á2 fán2t1e2 fán2tis fán2tor fán2tö fá2po fá2ram f1á2rá fás3s fá2t1a2 fá2t1á fá2te fá2t1érd fá2t1i2s fátmű1 fá2t1ol fá2t1ü2 fázi2s1ág fázi2s3z fba2l1 fc2lu fd2ró 1fe fe2aa fe2aá fe2ab fe2ac fe2ad fe2ae fe2aé fe2af fe2ag fe2ah fe2ai fe2aj fe2am fe2an fe2a1p2 fe2ar fe2as fe2at fe2aú fe2av 2f1e2dz fe2ed fe2el fe1f2r fe2gy1i fe2győ fei2n1i fe2ja fe2j1á2 fe2j1egy fe2j1elm fe2j1e2r fe2j1esz fe2j1e2v fe2j1o fe2j1ös fej1tr fe2j1u fe2jú fek2t1emb fe2l1a2 fe2l1á2 fele2c fe2l1e2dz fe2l1e2g fe2l1e2h fe2l1elev fe2l1e2mel fe3lemen fe3lemet fe2l1e2més fe2l1eml fe2l1eng fe2l1enn fe2l1e2re fe2l1esd fe2lesed fel1eseg fe2l1e2sett fe2l1esés fe2l1esik fe2l1esk fe2l1esni fe2l1e2ső fe2l1essen fe2l1este fe2l1estü fe2l1e2sz fe2l1e2tes fe2l1e2tet fe2l1ettek fe2l1ettél fel1e2ve fel1e2vé fel1evi felé2d fe2l1éde fe2l1é2g fe2l1é2k fe2l1é2l fe2l1é2p fe2l1ér. fe2l1é2rek fe2l1éren fe2l1érh fe2l1éri fe2l1érj fe2l1érk fe2l1érn fe2l1érs fe2l1ért fe2l1érv fe2l1étet fe2l1i2 fe3lib fe2l1í2 fel3l fe2l1o2 fe2l1ó2 fe2l1ö2 fe2l1őg fe2l1őr fel1p2 felt2 fe2l1u2 fe2lú 2f1e2ner fen2n1a2 fen2ná fenne2 fen2nev fen1sc fer1abl fe2rak fe2r1áll fe2r1á2r fere2g fer1egy fe2r1old fe2r1olj fe2r1oln fe2r1olt fe2sem fe2s1er 2f1e2sé feu2m1é2 fe2vő fe2z1ér. fe2zó fe2zs 1fé féka2 fé2k1ad fé2k1ag fé2k1al fé2kas fé2k1au fé2k1á2 fé2k1e2g fék1ell fé2k1er fé2k1ék fé2k1é2l fé2k1ér. fé2k1o2l fé2k1or fé2kön fé2k1u2 fé2k1ú fé2l1a2 fé2l1á2j fé2l1á2r fé2leg fé2l1ekk fél1elé fé2l1ell fé2l1elő féle2m fél1emb fé2l1eme fé2l1e2r fé2l1ese fé2l1esz 2f1é2let fé2l1ez fé2l1éva féligaz1 fé2lin fé2lir fé2l1is fé2liv fé2lí fé2l1ok fé2los fé2ló fé2l1ö fé2lőr félpen1 fél1t2r fé2l1ú2 fé2mab fé2mad fé2m1a2g fé2m1a2j fé2m1a2n fé2m1ap fé2mau fé2maz fé2m1ác fé2m1ál fé2m1ec fé2medé fé2me2két. fé2m1e2l fé2m1emb fé2mer fé2mez fé2m1é2k fémé2r fé2m1éré fé2m1i2n fé2m1ir fé2m1is fé2mit fé2m1iz fé2mí fé2m1o fé2mó fé2mö fé2m1u fémü2 fé2m1ül fé2ny1e2g fé2ny1e2l fé2ny1e2r fé2ny1is fé2ny1í fé2nyo fé2nyö fé2nyú fé2pí fé2pü 2féraá 2féraf 2férai 2féral 2férar 2férád 2féráé 2férám fér2cem fére2g1e2 fé2s1orr fész1al fészá2 fész1ár fé2szeg fé2sz1el féta3u2 2f1évk fé2zs fézs1e2 fézs1o ffe3li ffi2ac ffi2ag ffi2aka ffi2am ffi2at ffli2 ff1sh 1f2fy fg2ló 1fi fi2aa fi2aá fi2ae fi2aé fi2af fi2ah fi2aí fia2la fi2ao fi2aó fi2aö fia1p fi2apa fia2ra fia2rá fi2aré fi2aszá fi2aszo fi2au fi2aü fi2avá fi2ave fiá2l fi2c3h fici2t1á fi2dan fi2d1á fi1drá fie2l fie2n fie2r fie2s fies1e fie2t fi1fl fi1fr 2f1i2gaz fi1k2l fi1krá fi1kré fi1kri fi1k2v fi2lac fil1ada fil1akn fil1akt fi2lal fi2lam fi2l1ál fi2lár fil1elt fi2l1en fi2les fil1esz fil1ért fi2l1i2d fi2l1i2m fi2l1in fil2mad fil2mak fil2man fil2m1as fil2mat fil2m1á2 fil2mos fil2mu fi2lö fi2lü 2f1i2má fimeg1 2f1i2nas 2find fin1osz fi2n1ó fint2 fin1tr fi2n1u2 fi2nú 2finx fio2v fi3ók fió2k1a2l fió2kar fió2k1e2 fió2kép fió2kol fió2kö fió2r fiő2r fi1p2l fi1p2r fi2rod fir2s1 fis1arc fi1s2p fist2 fi1str fi2t1ad fit1a2la fit1alj fi2tág fit1árak fitá2t fi2t1áta fi2t1éh fi2t1érd fi2tik fi2t1in fi2tir fi2t1i2z fito1p2 fi2t1osz fi2tön fi2t1őr fi2t1ur fiu2min fiu2t fi2úa fi2úá fi2úe fi2úf fi2úg fi2úí fi2úl fi2úo fi2úö fi2úő fi2úp fi2úsz fi2úti fi2úu fi2úú fi2úü fi2x1ár fi2x1el fi2xö 1fí fí2rá fírcsa2 fí2r1in f1í2ró fír1tr fí2rü fjú1sz fki2s1 fk2li fk2lu fk2ró f2lak f2lan f2lep f2lip fli2s1é flo2n1á flo2né f2lot f2luk 1fo fo2am fo2g1á2c fo2gál fo2g1árk fo2g1áro fo2g1e fog3g fo2gí fo2g1or fo2g1os fo2gö fo2gur fo2gü fohá2szat fo2kal fok1áll fo2k1árr fo2k1e2 fok1ing fo2kí fok1k2 fo2kola fo2k1or folta2n fol2t1e fol2t1ö fo2n1ada fo2nado fo2nak fon1alap fona2l1e2 fon1alja fon1aljo fona2n fon1any fo2n1asz fo2n1au fo2n1á2r fonás1s fo2n1át fond2 fon1dr fo2neg fo2n1el1 fo2ner fo2n1es fo2nék fon1f2 fon1i2ko fo2n1i2m fo2nin fo2n1is fo2niz fo2ní fon1k fo2n1or fo2n1osz fo2nö fo2nő2 fons2 fon1st fon2t1i2n fontó2 fon2tón fo2nü fonya1 fo2r1ad forakész1 fo2r1ala fo2r1a2n for1ato fo2reg fo2r1el fo2r1er forgás1s fo2r1il fo2r1i2o for2m1e2l for2m1em for2merő for2mes for2m1érté for2mil for2m1in fo2r1ol fo2rö 2f1orrú fors2 for1sp for2t1ál for2t1e2l for2t1érd for2tü fo2rü foto1s fo2vi 1fó fó2rá fósza2 1fö fö2la fö2lá föl2dök fö2l1e2 fö3le. 2f1ö2lésbel fö2liv fö2lí föl1k2 fö2lo fö2ló fö2lön fölt2 föl1tr fö2lu fö2lú fön2n1 fönne2 fö2sá 1fő főa2n főá2g fő1bl fő1br fő1dra főe2l főe2r főe2s főé2h főé2te fő1fl fő1f2r fő1gl fő1gn fő1gr fői2d főigaz1 fői2ta főí2t fő1kl fő1kv fő2n1ag fő2n1apj fő1pl fő1pr fő2r1aj fő2rem főre2s fő2r1ék főri2 fő2r1is fő2rül főr1ülé fő1sl 2fősö fő1sta fő1str fősz2 fő1szl fő1szp fő1szt fő1t2r főü2l főzőé2 fp2la fp2ro fra1s frá2ma frá2má frá2m1e2 frá2nye f2rás f2resk fré2ná fré2nén 1f2ric f3rich f2rig f3rip 1f2ris fron2t1a2 fron2t1e2 f2röc f2rus fs2ho fs2po fs2tí fst2r ft1aj fta1kr ft1alj ft1bl f2t1ef fte2m f2t1eme f2t1ér. fti2g f2t1ige f2t1ing ft1ös ft1út f2t1üg ft1üt f2t1ü2z 1fu fuga1 fura2t1e fu2s1as fu2seg fu2sis fu2sz1á2 fu2sz1ol fu2szü futókész1 futó1s2p 1fú fúj2tal 2f1ú2ré 2f1úrr fú2zs 1fü 2f1ü2gy fü2la fü2lá füle2c fü2l1eml fü2l1e2p fü2l1e2v fü2l1é2j fü2l1é2k fü2lí fül3l fü2lo 2fülő fü2lőt fül3t2 fü2ma fü2má fü2m1e fü2mo fü2mő fü2mú 2f1ünn für2t1ő füstü2 füs2t1ülé 2f1ü2té 2f1ü2tő 2f1üzl 1fű fű1dr fű1fr fű1pr fű1sr fűsze2r1el fű1t2r fű2zá fű2zis fű2zo fű2z1ölt fvárosé2 1fy 2g. 1ga 2g1abc 2gabr 2g1abs ga1by 2g1a2dag g1adap 2g1a2data 2g1a2datb gadás1s 2g1adm ga2dog 2gadomá gadói2ko 2gadósat 2g1a2du. 2g1a2duk gae2r 2g1aff ga1fl ga2ga. 2g1agg ga1g2rá g1agy. ga2gyu g1a2gyú 2g1aján 2g1ajk 2g1ajt 2g1a2kad ga2kác 2g1akc g2a3ké 2gakév ga1kl 2gaknai g1aktu g1akv gala2g1ú ga2lat 2galáf 2galáí ga2láv 2g1alb 2g1alc gale2g1e2 2g1alk galo2m1e 3galop g1a2los 2g1a2lud ga2lul ga2lusz 2galvó ga2m1a2gá 2g1amc 2g1amp ga2nab 2g1a2nal 2gancs gan2csal gancs1ág gan2cse gan1d2 3g2ané gan2ga g1a2nim ga2nyag ga2ny1at ganye2l ga2nyér g1a2nyó ga2nyö gaó2r ga2pa. ga2paá ga2pac ga2pas ga2pán ga2pát ga1p2l ga2pok ga2pó. ga2pób ga2pók ga2pón ga2póv 2g1app ga1p2ré ga1pro gara2t1í 2g1a2rák 2g1a2rány ga2rén gar1k2 ga2rő ga2seg ga2s1is ga2s1ín ga1s2pi ga1spr gas3sze gas3szí gast2 ga1s2ta ga1sto ga1str gasz1agg ga2sz1an ga2szág ga2szás ga2sz1es gasz2tár ga2t1a2d gat1ará ga2tav ga2t1ál ga2t1á2ram ga2t1eg ga2tep gaté2s ga1thi ga2tim gat1old ga2tomi g1a2uk ga2ul ga2us ga2van ga2var ga2vat 2g1a2vu gaza2n gaz1any gaza2te ga2zál 3g2azd 3g2aze ga2zer 2gazg 2gazítá gazmus1s 2gazod 2gazon ga2zü 1gá g2ába 2g1á2bé g2ábó 2g1ábr 3g2áci gács1a2va gá2cse gá2cs1il gá2csü gáda2 gá2d1al gá2dá gá2d1él gá2d1ia gá2dis gá2dő gá2d1ü gá2fo 2g1ág. gá2gak gá2gat gá2gaz 2g1ágg 2g1á2gi 2g1á2gú 2g1á2gy gágy1asz 2g1á2hí g2ája g2ájá gá2j1e2 gá2jü gála1p 2g1álc 2g1áldo gá2l1es g2áli 3gális 2g1áll. 2g1állí 2g1állu 2g1álmo 3g2ály g2ám. gá2mal gá2m1e2 2g1á2mí gá2mü gána2 gá2nac gá2nal gá2nap gá2n1at gá2nás gán2cse gán2csi gán2cs1ö2 gán1d2 gá2n1e 2gángy. gá2nig gá2n1io gá2nis 2g1á2niz gá2nol gá2n1ó2 gán1sz2 gánt2 gán1tr gá2n1ú gá2nü gá2ny1a2n gá2nyar gá2ny1as gá2ny1e2 gá2nyérd gá2nyérz gá2nyij gányká2 gá2nyö gá2po gá2rad gá2r1ag gá2r1aj 2g1á2ram gá2r1a2n gá2rar gá2ras gá2ra2t gár1ato gár1att gá2r1av 2g1á2raz gá2rág gá2r1ál gá2r1á2z gá2re2 gár1em gár1es gár1et gár1éte gá2rif gá2r1i2p gá2r1isk gá2r1ism gá2r1iz gá2rí 2g1árnyé gá2r1ol gá2rop gár1ost gá2r1osz gáró2 gá2r1ór gá2rö gá2rő gár1s2 gár1tr 2gáru. 2g1árud gá2rug 2g1á2ruh 2g1á2rulá 2g1á2ruló 2g1árur 2gárus gár1uta gár1utu gá2rúr gá2rút gá2rü gá2rű g2ás. gá2s1a2d gá2sal 2gásatá gá2s1á2g gá2s1árad gá2s1árn 2g1á2sás gá2s1á2to gá2s1e2 gá2s1im gá2sis gá2sí gá2sor gá2só gás1ó2r gá2sö gá2ső gás3szé gás3szü gást2 gás1tr gá2sut gá2s1ü2 gá2sű gá2szal gá2szas gá2szatl gá2s3zav gá2sz1ál gá2sz1e2 gá2szis gá2szit gá2szí 2g1ászká gászkész1 gá2sz1okta gá2sz1ól gá2s3zón gá2szöv gá2szü g2át. 2gátad gá2taj 2gá2tal gát1a2la gát1alj gátá2 gá2tál gá2t1ár gá2tát 2g1átbo gá2t1eg gá2t1e2l gá2t1e2m gá2ten gá2tél gáté2r gá2t1ér. gá2t1ére 2gátfe 2g1átg 2g1átha gá2til gá2tis gá2tiz 2g1á2tí g1átmé gá2t1olda gátó2 gá2tór 2g1á2t1ö gá2tő 2g1áttű 2gá2tü2 g1átvi g2áva g1á2vó gá2z1a2d gáz1akn gáz1akt gá2z1a2l gá2zar gá2z1a2t gá2z1av gá2z1ár. gá2z1árá gáz1áre gá2z1árh gá2z1árk gá2z1árn gá2z1á2ro gá2z1árr gá2z1árt gá2záru 2g1á2zásos gá2z1e2 gázi2g gá2z1iga gá2zim gá2z1i2p gá2z1i2s gá2z1iz gá2zí gá2zö gá2ző gáz3sp gáz3sta gáz3ste gáz3sug gá2zsú gáz3sü gáz3sz gá2zü gbeá2 gbé2lá gbé2rem gb2la gb2le gb2lo gb2lú gb2ra gb2ri gb2ro gb2ru gcsapá2 gcsa2p1ág gda2u gd1ell gde1p2 g2d1é2k g2d1ér. gd1ina. gd1ináb gd1ináh gd1inár gd1inát gd1ináv g1d2rá gd2re gd2ro gd1t2r g2d3zö 1ge gea2c gea2g gea2l geá2r g2ebe g1e2cet 3g2eci g1eddz 2gedénn 2gedény ge2dze ge2dzé ge2dzi ge2dző 2g1eff 2gege 2g1e2gé 3gegom ge2gye ge2gyé ge2gyo 2g1e2gyü ge2hes ge2het 2g1e2hü 2g1ejt 2g1e2ke. 2g1e2kei 2g1e2kek 2g1e2kéé ge2kéj ge2kék 2g1e2kés. ge1k2li 2g1eks 3g2el. g1elad ge2lag 3g2elap ge2las ge2lál ge2l1ár 2g1elcs 3geld. 2g1eldo 2g1eldö ge2lef ge2legi g1elegy 3g2elek. 2ge2lemé ge2lemi 2ge2lemk 2g1e2lemm 2g1e2lemz gele2n 3gelend ge2l1eng ge2l1eny gel1este ge2lev ge2lég 3g2elésb 3g2elések 3g2elésen 3g2elésén 3g2elésér 3g2elésh 3g2elési. 3g2elésk 3g2elésrő 3g2eléss 3g2eléstő 3g2elésü 2g1elész 3gelész. 3gelésző 3gelészü 3gelészv 2g1elhel 3g2elhes 3g2elhet 3g2eli. 3g2elik gel1int 3g2elj. 3g2elje 3g2eljé 3g2eljü 2g1elkü 2gellenő 2g1elmé 2g1elnev 3g2elnén 3g2elni 2g1e2los ge2lö 3g2elő. ge2lőbbr 3g2előbe 3gelőbé 3gelőbi 3gelőbo 3g2előbő 3g2előc 3g2előe 3g2előé 3g2előg 3g2előh 3gelőja 3g2előjé 3g2előjo 3g2előjü 3g2előjű 3g2elők. 3g2előka 3g2előkb ge2lőkel 3g2előker 3g2előket 3g2előkez 3gelőké. 3g2előkén 2g1előkés 3g2előkh 3g2előki 3g2előkk 3gelőkl 3g2előkn 3g2előkö 3gelőkő 3g2előkr 3gelőkt 3gelőku 3gelőkü 2g1e2lől 2g1előm 3g2előn. 3gelőna 3g2előne 3g2előné 3g2előnk 3gelőnö 3gelőnyi 3g2előo 3gelőö 3g2előő 3g2előp g2előre. 3g2előrés 3gelőro 3g2előrő 3g2elős. 3gelősá 3gelőso 3gelősö 3g2elősza 3gelősze 3gelőszé 3gelőszi 3gelőszó ge2lőszö 3g2előt. 3g2előtá 2g1előté 3g2előtő 3gelőtü 3gelőü 3g2elővá 3g2előve 3g2elővé 3gelővis 3gelőviz 2g1e2lőz g1első 3g2elsz. 2g1elszá 2g1elszo 3g2elt. 3gelte. 3g2eltek 3g2eltem 3geltes 2g1eltett. 2g1eltettn 3geltéb 3g2elték 3geltél 2g1eltér 3geltét 2g1elto 2g1eltű ge2lül 3g2elün 2g1elv. 2g1elvb 2g1elven 2g1elvét 2g1elvh 2g1elvn 2g1elvo 2g1elvr 2g1elvű 2g1elvv ge2ly1e2g ge2lyid ge2man 2g1ember 2g1embl g1e2mel 2gemelé 2gemelk ge3mell 2gemelő 2g1e2més 2g1eml ge2moc 2g1emp gena2 ge2n1ad ge2nar ge2n1as ge2nau ge2n1ál ge2nár ge2nát g2end ge2n1eg 3generá ge2nere 2generg ge2n1esz ge2n1e2vet ge2n1e2vez gené2k ge2n1éké ge2n1ékn ge2n1ékt geni2d1 ge2n1in ge2n1is gen1k2 g1enni g1ennü gen3nya ge2nop ge2n1or ge2n1os gen2sért gens3s gent2 gen1tr ge2n1ur g2enye 2g1enyh g1enyv 2g1enz ge2ob ge2oc ge2of ge2ok ge2om ge2orgia ge2ot geó2r ge2ped ge2per ge2pés 2gepi ge2pos ge2rab ge2r1ad ge2r1aj ge2ral ge2r1a2n ge2r1a2p ge2r1as ge2rau ge2ráb ge2r1á2g ger1áll gerá2r ge2r1ára ge2rát g1erde 3g2ereb 2geredm ge2reg g1erege ger1egy 2g1e2rej ge2r1e2lők ge2r1eml ge2r1eny ge2r1er ge2resz ge2r1e2v ge2réj ge2r1ék ge2rél ger1éle ger1é2lé ge2r1ép ge2r1étt ge2r1i2na ge2r1ing ge2r1i2p ger2is ge2r1iz ge2rog ge2ror ger1osz ge2rot ge2ró ge2rök ge2r1ön ge2rő g1erő. g1erők g1erőv ger1őz geru2 ge2rur ge2r1ü2g ger1üld ge2r1ü2lé g2es. ge2s1á ge1sc gesd2 g2eseb 3g2esei ge2s1e2l ge2s1emb g2esen. ge2send 2g1e2s1er 2g1e2setb 2g1e2setet 2g1e2seté ge2setl 2g1e2setr 2g1e2sett 2g1esél 2g1e2sés g1e2sik 2geskü gesleg1 g1esni 2g1e2ső g2esr gess2 3g2essé. 3g2esség g2est. 2g1este 2g1esté 2g1esti 2g1estj g1esvé 2g1e2szek ge2szes ge2szet g1eszl 2g1eszm ge2t1ak ge2tal ge2t1a2ny get1ap ge2t1as get1e2gy 2g1e2tetőn ge2t1é2k geté2l get1éle ge2t1ér. ge2t1é2rü ge2t1é2ve. getó2 ge2t1ór getőkész1 get1őrt ge1t2ró get2t1ebbé ge2tut ge2t1ü2z ge2ur geu2s ge2vic 2gevo ge2vol 2g1e2vő ge1yé ge2zo gezőa2 2g1ezr 1gé gé2ber 2g1ébr géc3c gé2d1a2 gé2d1á2 gé2d1e2l gé2d1e2r gé2d1esz gé2dik gé2din gé2dir gé2dí gé2d1o gé2dö gé2d1ő2 gé2d1u2 gé2d1ú2 gédü2 gé2d1ülé gé2dű gé2d3z gé2gi gé2gő gé2gü 2g1é2he. 2g1é2hek 2g1é2hen 2g1é2hes 2g1é2het 2g1éhh 2g1éhs 2g1éj. gé2jért 2g1éjh 2g1éjj 2g1éjs gé2kei g1é2kel g1é2kes gékes1s g1é2kez 2g1éks gé2lál gé2lel 2géles 2g1é2let 2g1é2lez gé2lén 2g1élm gélvvá2 gé2lya gé2lyá gé2lyeg gé2lyo gé2lyú gé2m1a2 gé2m1á g2émb gé2m1eg gé2mel gé2mer gé2mér gé2m1o géna2 gé2nab gé2n1ad gé2nag gé2n1al gé2n1an gé2n1ar gé2n1at géná2 gé2n1ár gé2nát 3g2énd gé2neg 2génekes 2génekl gé2n1e2l gé2n1e2r gé2n1e2t gé2n1é2g gé2n1in gé2ní g2énn gé2nó gé2n1ö gént2 gé2nú génü2 g2ény gé2ny1e2g gé2nyid gé2nyis gé2nyír gé2nyo gé2nyö gé2nyú 3gép. gé2p1a2 gé2p1á2 gé2p1e2g 3gépel gé2p1ell gé2p1esé gé2p1esz gé2pik gé2pí 2g1épít gé2p1o2 gé2pó gé2pö gé2pő 3g2épp géptá2v gé2p1u gé2pú gé2pülé géra2 gé2rag gé2rak gé2ral gé2r1an gé2rap gé2rar gé2ras gé2rá 2g1érc. 2g1érd gé2r1el gér1eml 2géret 2géré. gé2rie 2g1é2rin gé2ris gérká2 2gérl 2gérm gé2ro gé2rö 2gérő. 2gérők 2gérte 2gérté 2gérth g1érti g1értj g1értl g1értő. g1értőe g1értők g1értőv g1érts g1értv gé2r1u2 gé2r1ú 2g1érv. 2gérvé 2g1érz 3gérzá gé2sar gé2seg gé2s1e2l gé2s1é2g gé2sim gé2s1o gé2só gés3sza gé2sza gés3zav gé2szá 3gészítőü gé2sz1o gé2szó 2g1é2tel gé2ter gé2tet 2g1étk 2g1é2to 2g1étr 2g1étt 2g1év. 2g1évb 2g1é2ve. 2g1é2ved 2gévei 2g1é2vek 2g1é2ven 2g1é2vet gé2véb 2g1é2vén 2g1é2vét 2g1é2vév 2g1évf 2g1é2vi 2g1évj 2g1évk 2g1évn 2g1évr 2g1évs 2g1évt 2g1évv gé2zan gé2zőr géz3s2 gfala2d gfa2l1ada gfa2le gfi2úké gf2la gf2lo gf2ló gf2lu gfö2l1üle g1f2ra gf2rá g1f2re gf2rí g1f2ro g1f2rö gf2ru g2g1a2p gg1arc gga2s g2g1aszá g2g1aszó gge2lest ggés3s gg1i2ta g2g1iz gg1orv ggó2n g2g1óni ggős2 g1g2raf g1g2ran g2gre gg2ro gg1sp g2g1ü2g g2gy g3gyak g3gyalá g3gyap g3gyara ggy1aro g3gyat g3gyár g3gyáv ggy1á2z ggy1e2lő g3gyeng g3gyep g3gyer g3gyérü g3gyil ggy1ol g3gyom g3gyor g3gyó g3gyö g3győ g3gyu g4gyút ggy1ült g3gyür g3gyű gha2d1e2 ghajói2ko g2ham. g2hamb g2hame g2hamh g2hamm g2hamn g2hamr g2hamt gha2sábr g2hia 1ghy 1gi gi2aa gi2aá gia1b2 gi2aba gi2abá gi2abi gi2abo gi2ac gi2a1d2 gi2ae gi2aé gia1f gi2afr gi2a1g2 gi2ah gi2aim gi2aí gi2aj gi2akar gi2akas gi2ala gi2alá gi2alé gi2am gi2anó gi2any gi2ao gi2aó gi2aö gi2aő gi2a1p2 gi2ar gia1sz2 gi2asza gi2aszá gi2aszem gi2aszé gi2aszf gi2aszi gi2aszo gi2aszó gi2at gia1t2r gi2au2 gi2aú gi2aü gi2aű gi2av gi2az 2gibr 2g1i2dea 2g1i2deá 2g1i2deg gi2dei 2gidej 2g1i2deo 2g1i2dé gi2dió 2g1i2do 2g1i2dő gi1fl gig1ad gig1ara gig1ass gig1au 2gigaz gig1ál 2g1i2ge. gig1e2c gig1eg gig1eh gig1eng gig1enn gige2r gig1ere gig1e2s gig1et gig1e2v gi2gé gig1éh gig1é2l gig1ém gig1é2ne gig1é2r 2g1igéz gig3g gi2g1i2 gi2gí gi2g1o2 gi2g1ó2 gi2g1ö gi2g1u gi2gú gi2g1ü gi2gű g1i2gy 2g1i2ha 2g1ihl 2gijes gi2ker gi2kes 3gile g1ill gi2ma. gi2man gi2máb 2gimád gi2már 2g1i2máz gi2me. 2g1imp gina1p2 gi2nas gi2n1á2z 2g1ind 3giné 2ginf 2g1inkv g1inná g1inni g1inno g1innu 2g1inp 2gins 2g1inta 3gintc 2g1inte 2g1inté g1inth g1inti g1intj g1intő. g1ints g1intu g1intv 2g1inv 2g1inz gi2one 2g1ioné gi2ono gi2ot gi2óa gi2óá gi2óc gi2óe gi2óf gi2óg gi2óká gi2ókom gi2ól gi2ó1p gi2órá gi2ó1sp gi2óta gi2ótá gi2óú gi2óü gi2óz 2g1i2pa 3g2ips gip2sza gip2szá gip2szo gi2ram 2g1i2rat 2g1i2rá gi2rig 2giro gi2rod 2g1i2rón 2g1irt g1isc 2g1i2si 2g1isk 2g1isl 2g1ism 2g1isp 2g1istál 2g1iste 2g1i2szá 2g1i2szo gi2szu gi2tas g2itá 2gitác 3g2iti 3gitte g1ittu 2g1i2vad 2g1i2vás g1i2vo 2g1i2vó 2g1i2zé. gi2zév 2g1i2zo 1gí gí2gé gí2ja gí2já gí2m1a2 gí2má gí2né gí2ny gí2ra gí2rá gí2re gí2ri gí2ro gí2ró g1í2tész gí2vá gí2ve gí2vé gí2vo gí2vó gí2vü gí2ze gí2zü gí2zű gka2ró2r gké2p1e2l gkia3dóná gkiá2 gkis1s gk2la gk2li gk2lí gk2lo gk2ló gk2lu gkö2zén gkö2z1ér gkővá2 gk2ra gk2rá gk2re gk2ré gk2ri gk2rí gk2ro gk2ró gk2va gk2vó gla1p2l gla1s2t gla3t glá2sza gle2g1a2 glege2l gle2g1elé gleí2 gle2t1a2 gle2tá gle2t1el gle2t1é2rőt gle2t1étn gle2tos gleü2 glé2nyel g2lor 1g2los glóó2 glós2 glőre2 glő2reg glő2rel glő2ro gme2g1a2 gme2g1e gme2g1é gmens1s gmen2sz gmus3s gna2d gn1ada g2n1a2j g2n1alk gna2pe g2n1a2r 1g2náb 1g2náh 1g2nái g2nán. g2náná g2nára gná2s3z g2nát. g2nátó 1g2náv gn1br gne2i g2n1e2l gne2m1e2l gne2sir gnes3s gne2szá gneto1 gné2l g2n1éle gnév1a gné2v1á gni2g g2n1iga g2n1ing g2n1i2p g2n1i2r g2n1is gnit1a2 gni2tel g2n1okt g2nol gn1olt 1g2nora 1g2nore 1g2noré gn1ök gn1ös gn1pr gn1s2k gn1st gn1t2r g2núj gn1üg gn1üz 1go go2áz go2be 2g1obj 2g1o2dú go2et g1o2ka. gok1a2d g1o2kai 2g1o2k1a2l 2g1o2ká goki2 gok1ir goklá2 2g1okm g1o2kok 2g1o2kos g1o2kot 2g1o2koz 2g1okta 2g1o2laj go2l1a2l 2g1olda 2g1oldá 2g1oldó gol2f1a gol2f1e gol2fin go2lim go2l1ó2rá 2goltalo 2g1oltár 2g1oltás 2g1oltó. 2g1oltv 2golvad 2golvas go2m1as 3g2omb gom2b1árn gom2b1árt gom2b1e2 3g2ome 2g1oml go2n1a2to go2n1áll gonc3c gon2d1á2 gon2d1ér. gondi2 gon2dik gon2doks gon2d1or gon2dó go2n1e2 gon2g1a gon2gál g2ono go2nol 2g1onto go2nü go2nye go2od go2pá 2g1o2pe gor1ass gorasz2 gora1t2 gor1áll 2g1orc go2r1el 2gorie 2g1orm go2roz go2rö 2gorz go2se go2sö 2gosto 2g1ostr g1osty go2sü go2s3za go2s3zá go2szó go2ua go2ub go2ud go2ur go2ut go2vác 2g1o2ve go2xi go1ya go1yá 1gó góa2d góá2g góá2r gó1bl gó2c3h gó2c1ol gócsapá2 gócsa2p1ág gó2cü 2g1ó2dán gó2div gó1dru gó1f2r góí2v gó1kl gó1kré gó2lar góle2l gól1elő gó2l1é2h gó2lí gó2lü 2g1ó2nu góó2r gó1p2l gó1p2r g1ó2rad g1ó2ras gó2ráka gó2rár 3g2óro 3g2ósa gó2s1aj gó1s2ká gó1s2p gó1s2rá gós3s gó1s2ta gó1stá gó1str gó1sz2 gó2s3zám gó2s3záras gó2s3zárá gós3zárú gó2tau gó2t1is gó1tré gó1tri 3g2óval 2góvod 2g1ó2vó gó2vu 3g2ózá 3g2ózi 3g2ózo 3g2ózu 1gö 2g1öbl 2g1ö2ko gö2ku 2g1ö2lá 2g1ölb g1ö2le 2g1ölr 3g2ömb göm2b1a gömbe2 göm2bel göm2b1er 2g1öml 2g1ö2na g1ö2ná gö2ne gö2nö 2gönt gö2ra 3g2örb 3g2örc gör2csa gör2csá gör2csel gör2cső 3gördí 3gördü 2g1ö2re 3g2örg 3g2örn gö2rök g1ö2rü 2görv gösé2 gö2s1én 2g1össz 2g1ösz 2g1ötl g1öv. g1övb g1ö2ve g1ö2vé g1övh g1övn g1ö2vö g1övr g1övt g1ö2vü g1ö2vű g1övv 1gő gőa2n gőá2g gő1br gőe2l gőe2r gőé2b gő1fr gő1gl gő2g1ő2 gői2ta gő1kl gő1kv gőnyá2 gő1pl gő1pr 2g1őr. g1őrb g1őrh g2őrit gő2riz 2g1őrj g1őrk 2g1őrl g1őrn gő2rök 2g1őrr g1őrs g1őrt 2g1ő2rü 2g1őrz 3gőrzősö gő2s1ep gő2sib gő1spi gő1sta gő2s1ü2v gő1tr gőu2t gőü2l gő2zát gő2zeg gő2z1e2k gő2z1e2l gő2z1o gőző2s gő2zsö gő2z3su gő2z3sű gő2zú gpe2c3h gp1e2lu gpia2c1i2o gp2la gp2lá gp2le gp2lu gpon2ga gpo2re gp2ra gp2rá gp2re gp2ré gp2ri gp2rí gp2ro gp2ró gp2rű gp2sz 1graff grafo1 gra2mad gra2maj gra2mal gra2m1a2r gra2m1as gram1a2z gra2m1á2 gra2m1e2 gra2m1érté gra2mik gra2m1in gra2m1is 1grammj gramu2 gra2mut 1g2ra1p 1g2raví grá2cs1i gráfa2 1g2rá2f1an 1g2ráfb grá2f1e2 1g2ráffe 1gráfid 1g2ráfl 1g2ráft grá2lát grá2l1e2 g2ráná grán1d g2ráni grá2rá grá2r1i2p grá2s3za gre2e gren2d1ő2 g2ril gril2l1a gri2s1á gris3s grisü2 gri2süt g2ríz gróa2 gróá2 gró2f1a gró2fú gró1p 1g2rup gság1g gsé2gel gs2ho gs2ka gs2ká gs2ko gsk2r gs2la gs2lá gs2li gs2má gs2mi gs2mu gs2ná gso2k1o gsors3s gs2pa gs2pá gs2pe gs2pé gs2pi gs2po gs2pó gsp2r gs2rá g1s2ta gs2tá gs2te gs2té g1s2ti g1s2tí gsto2 gst2r g1stra g1stru gs2tu g1s2tú gsugá2 gs2vé gsza2ké gsza2k1ü gszála2d gszá2l1ada gszá2li gszá2r1a2da g1sz2c gszé2t g1sz2f g1sz2k g1sz2l gsz2m g1sz2p gszt2 g1sz2tá gta2g1ar gtag1g gta2n1ó2 gtára2d gtá2r1ada gtermo1 gtermosz2 gté2rá gti2m gt2ra gt2rá gt2re gt2ré gt2ri gt2ro gt2ró gt2rö gt2ru gt2rü gtű2z1ő2r 1gu gu2at gu2ay 2g1u2bo gu2el gu2er2 g1u2ga 3g2ugg g1u2go 2g1ugr gu2id gu2in gu2ir 2g1ujj gula2te gula2t1í gu2ná 2g1u2ni gu2nó gu2nu 3g2urí gus1abl gu2sad gu2s1a2n gu2sas gu2sat gu2s1av gu2sál gu2s1e2 gu2s1érté gu2sil gu2sis gu2s1í gu2sol gu2sor gu2s1ó2 gu2sö gu2ső gus3s2 gussz2 gust2 gu2sü gu2szá gus3zs gu2tac gu2tak gu2tal gu2tam gu2tan gu2tas gu2tat gu2taz 2g1utc 2g1u2tó gutó2d1o2ku 2g1u2tu gu1ya 1gú gú2ja gú2jí gú2ju gú2ny1e gú2ny1í2 2g1úr. gú2ré gú2ri 2g1úrn gú2ro 2g1ú2sz 2gú2t1a2 2g1ú2t1á2 2g1útb 2g1útc 2g1útd 2g1ú2t1e2 2g1ú2té 2g1útf 2g1útg 2g1úth 2g1ú2ti. 2g1ú2tia 2g1ú2tig 2g1ú2tih 2gútij 2gútiko 2g1ú2tina 2gútiná 2gútir gú2tis 2g1ú2tit 2g1ú2tiv 2gútiz 2g1útj 2g1útk 2g1útl 2g1útm 2g1útn 2g1ú2to 2g1útp 2g1útr 2g1úts 2gútt 2g1útv 2g1útz gú2zi 1gü gü2cs gü2dé gü2dí gü2dü gü2ge gügy1ér. 2g1ü2gyi 2g1ügyl 2g1ügyv 2g1üld gü2len gü2lep gü2lik gü2löm 2g1ünn 3g2ürc 2g1ü2re 3g2üri 2g1ü2rí 2g1ü2rü gü2te gü2té gü2ti gü2tö gü2tő gü2tü gü2ve gü2vö gü2ze gü2zé 1gű 2g1űr. 2g1űrb gűre2 g1űrh gű2ri 2g1űrj 2g1űrl 2g1űrm 2g1űrn 2g1ű2rö 2g1űrt gű2ru gű2rü gű2ze gű2zé gű2zi gű2zö gű2ző gva2s1u2 gvá2gy1a2da gvá2nyan gvás1s gverés3s gvezé2rel gvé2nyel gvi2na gvó1s2 g2y 1gya gy1abl 2gy1a2cé 2gyadag gya2dal 2gyadatb gy1a2dót 2gyag. 2gyagb gya2ge gya2gép 2gyagg 2gyagh gya2gis 2gyagk 2gyagn gya2g1ol 2gyagt 2gyagya gy1a2gyu 2gy1aja 2gy1akc 2gyaknák 2gyakt. 2gyaktu gya2laj gyal1akt gya2lapo gya2lapp gy1alat 2gyaláí gya2lel gya2lik gyan1ab gya2n1e 2gy1a2nya gy1a2nyá gya2pak gy1a2páh 2gyapái 2gyapák 2gyapám 2gy1a2pán gy1a2pás 2gyapátó 2gyapjá gya2pón gya2pór 2gyapp gy1aps gy1aran 2gyaraw gyard2 2gyardom gya2rel gy1argó 3gyari gya2r1ón gya2r1ó2r gya2róv 2gyarú 2gyasak 2gyasat 2gyasra 2gyaty 2gyazá 1gyá 2gyábr 2gy1ág gy1álc gy1áll gy1álm 3gyám 2gy1áp 2gyáre 2gyárf 2gy1á2rok 2gyárus 2gy1árú gyá2szó 2gyáta 2gyátk gy1átl 2gyátv gy1bl gy1br gy1dr 1gye gye2d1ős 2gy1e2dz gy1e2ge gy1e2gé gy1e2gye 2gyeke. 2gy1e2kés 2gyeleg gye2legy 2gyelemű 2gyelnö 2gyeltér 2gy1elvá gy1elvű 2gyembl 2gy1e2mel gy1eml 2gyenget 2gy1e2ny 2gyenz gye2pal 2gy1erd gy1e2red 2gyerej gy1e2res gye2rén 2gy1ern 2gyero 2gy1e2rő 2gy1ers gye2seg 2gyesél 2gyesg gy1e2ső 2gy1este 2gyestés 2gy1esti 2gyestű gye2szü 2gyetem 2gyetet 2gyezm 2gyezrede 2gyezrel 2gyezs 1gyé 2gyébr 2gy1ég 2gyéhes 2gyéhs 2gyéji gy1é2ke. gy1é2kes 2gy1é2le 2gy1élt gy1élv 3gyém 2gyéneke 2gyéni 2gy1ép 2gyér. 2gy1érd 2gy1érem 2gyérez gyé2rét gy1érg 2gy1érh 2gy1é2ri 3gyérí gy1érke 2gy1érm 2gyérn 2gyérr 2gy1érte 2gy1érté gy1értő 2gy1érv 2gy1érz 2gy1été 2gyétk 2gyév. 2gyévad 2gyévb 2gyéve. 2gyévei 2gyévek 2gyéven 2gyéves 2gyévet 2gyévh 2gyévi 2gyévn 2gyévr 2gyévt 2gyévü 2gyévv gy1fl gy1f2r gy1gl gy1gr 1gyi 2gy1ide 2gyidé 2gyidő 2gyiga 2gyigá 2gy1ige 2gy1i2gé 2gyigm gy1iha 2gyiker 2gy1ill 2gyimá 2gyind 2gyinf 2gy1ing 2gy1ipa 2gy1i2rat 2gyirá 2gy1iro 2gyirt 2gyish gy1isk 2gyism 2gy1isn 2gy1ita 2gyivó 2gyizg 2gy1i2zo 1gyí 2gy1íg 2gy1í2r 2gy1ív gy1íz gy1kl gy1k2r gy1kv gymás1s 1gyo 2gyokos 2gy1old 2gyolvas gyo2m1as gyo2mi 2gyope 2gy1orc gy1orm 2gyorsó 2gy1orv gy1ou 1gyó 2gyódár 2gyódásak gy1ó2rá 2gyóri 1gyö 2gy1öb gy1ödé 2gy1ökl 2gyötöd. 2gyötödd 2gyötöde 2gyötödé 2gyötödne 2gyötödöt 2gyötödr 2gyötödü 2gyött 2gyötv 2gyöv 2gyözön 1győ gy1őre gy1őrü 2gy1ő2s 3győz gypárba2 gypen1 gy1pl gy1pr gy1ps gyrövid1 gy1sc gy1sk gy1sl gy1sm gy1sn gy1sp gy1sr gy1s2t gy2sur gy1t2r 1gyu 2gy1ud 2gy1ug 2gy1uj 2gyund 2gyuni 2gy1u2ra 2gyurá 2gyuru 1gyú 2gyúd 2gyúé 2gyúi 2gyújí 2gyújr 2gyújs 2gyúm 2gyúrb 2gyúré 2gyúri 2gyúrk 2gyúrr gy1úti 2gyúü 1gyü 2gy1üd 2gyüg 3gyüle 3gyüm 2gyünn 2gyüre 2gyürü 2gyüs gy1üst 2gyüt 2gyüv gy1üve 2gy1üz 1gyű 3gyűl 2gyűré. 2gy1ű2z gy1zr gza2táp gza2t1e gza2tö gza2t1ű2 gzá2r1ó2r gzá2se gzás3s gze2t1a2 gze2t1á2 gze2t1el gze2tin gze2t1o gze2t1ő2 gzőa2 2h. 1ha haa2d 3hab. ha2bak ha2b1a2l ha2b1a2n ha2b1ág ha2b1árb ha2bed ha2b1ér. ha2bid hab1ill ha2b1im ha2b1i2na. ha2b1int 3habo hab1old hab1o2ra hab1orr ha2b1ost hab1sz habu2r ha2bü ha2d1ag had1alk ha2d1ap hada2s ha2d1asz ha2d1á2c ha2d1ál hadás1s ha2d1ásv ha2d1á2szo ha2deg ha2d1el ha2dem ha2dél hadia2 hadié2 hadi2n ha2d1ina ha2dor ha2dos ha2d1u2r ha2d1úr. ha2d1ú2ré ha2d1úrh ha2d1ú2ri ha2d1úrk ha2d1úrn ha2d1úrr ha2d1úrt ha2dús ha2dü ha2dza ha2d3zá hae2r ha1fl ha1f2r 2hagore ha2if ha2j1á2s ha2j1á2to ha2jáz ha2j1in haj1k2 haj1oml ha2jö ha2jő haj1s haj1t2r ha2jü ha2k1ál ha1k2li ha1k2r h1akt ha1k2v ha2l1ach ha2l1a2g ha2l1aj ha2l1a2l hala2n hal1any ha2l1a2r hala2sz ha2l1asza ha2l1aszá ha2l1aszó ha2l1atk ha2l1a2tom ha2l1att 3halá hal1á2cs ha2l1á2g halá2l1e2 hal1á2rak hal1á2rá ha2l1árb ha2l1á2ro ha2l1árr hal1árve hal1áte ha2leb ha2lec hal1e2gy hale2l hal1ele hal1elő ha2lem ha2l1en hal1epe ha2l1ese ha2l1e2ső hal1ete hal1e2to hal1evo hal1e2vő ha2lez ha2l1é2l ha2l1ér. ha2l1éte ha2l1étk ha2l1étt ha2lid ha2l1ik ha2l1i2m ha2l1ing ha2l1inv ha2l1i2ono ha2l1i2ont ha2lip hali2s hal1isz ha2l1iv ha2l1i2z ha2lí hal2k1a2pu halke2l1 hal2k1ele hal2l1aszt hallás1s hal2l1á2t hal2léj hal3ly 3halm halma2z1ó2 ha2l1ol ha2l1ó2ri ha2l1ö ha2l1ő2 hal1p2 ha2l1ug ha2l1u2s ha2l1u2t ha2lü ha2lű ha2l3ya ha2m1ál ha2m1árb hamb2 hame2l ham1ele ham1esz ha2mez ham1ism hamkész1 ha2m1osz 3hamu ha2mü hanás1s han2ch 2hanész 3hang han2gal hange2 han2gen han2g1es han2gél hang3g han2g1ó2 han2gö han2gut han2t1ó2 ha2nyél haó2r ha1p2r hara2g1ó2 harang1g ha2r1ál har2c1al har2can harc3c har2c1e2 har2c3h ha2rel ha2ret 3harmó ha2r1ol ha2r1osz ha2r1ór ha2rű 3hasa haság1g ha2s1iz ha2s1ol has1ors ha1s2pe ha1s2po ha3s2út ha2sür ha2s1ű2 ha1szp ha2t1ab hat1agy ha2t1aj 3hatá határa2d határ1ada ha2t1e2v ha2t1én ha2t1é2v ha2t1í2v hat1olda ha2t1osz ha2t1órá ha2t1ö2v ha1t2rá hatt2 hat1tr ha2tül ha2ue hau2n hau2s ha2ut haü2z 1há 3hábo há2gy há2jús háma2 há2m1al há2m1á há2m1e2 hámi2 há2m1is há2m1ol há2mö hán2cs1e hán2csi há2ny1a2l hánya2n há2ny1ar hányás1s há2ny1e2 há2nyö hára2 há2r1ad há2r1al há2r1au hári2 há2r1iv 3hárí hár1k2 hármas1s háro2m1a háro2mo hár2s1al hár2se 3hárt há2rü há1ry há2sí hász1a2tom há2sz1e há2sziv 2h1ászka. há2sző hát1a2dó há2t1a2la há2t1a2n há2tar há2táp há2t1e2 háté2 há2tél há2t1ér. há2t1ére há2t1érn há2t1i2s há2tí há2t1ol há2t1o2r hátó2 há2t1ós há2tö há2tő hát1u2sz há2t1ü há2tű hátvé2d1el há2z1a2dó há2zaj há2z1ala há2z1asz há2z1av há2z1á2p há2z1árn há2z1á2ru há2z1e2 há2z1isk há2z1ism há2z1ist há2z1í ház1okt ház1old há2zos ház1otth há2zö há2ző házs2 há2z3sa ház3se há2z3sé há2z3si ház3sp ház3st ház3sü ház3sz há2z1ü há1zy hb2le 1he he2ad he2av hec2c1emb hecc3s 2hecu he2dén he2e2s he2f1i he2f1u2 he2g1a2 hegész1 he2gy1a he2gyá he2gyeg hegyes1s he2gy1o he2gyó he2győ he2gyú 2heidp 2h1e2kék 3hekt he2lég helés1s 2helf hel2fr 2hellá 2hellen he2lyeg he2lyeml he2lyesz he2ly1é2j 2hema 2h1embl 2h1eml henés1s 3heng he2ny1e2ge. he2nyo he2ol he2rab he2r1a2d he2r1aj he2r1a2r he2rau her1áll her1át1a2 her1áté her1eng here1p her1ese herevíz1 her1int he2rö her1s2 he2rut he2rű he2s1a he2s1á h1e2sés hes2t1o 3hety 2heusz 2hevé he2vés 3heví he2z1á 2hezh 2hezi 2hezn 2hező 2hezz 1hé hé2hé 3héi. 3héit héje2 hé2j1eg hé2j1el hé2jö 3hékn hé2nal hé2nan hé2nar hé2nát héne2 hé2n1el hé2nem hé2n1et hén1év. hé2nid hé2nil hé2n1is hén3n hé2nö hént2 hé2nu hé2nü hé1ph hé2pü héra2 hé2rar hé2r1as hé2rat hé2rin 2h1érz hé2szá hé2szeg hé2szesz hé2sz1ö héta2 hé2t1ab hé2t1aj hé2tal hé2tar hé2tál hé2t1e2l hé2t1e2m hé2t1es hé2t1ezres hé2t1é2v hé2tí hé2tol hé2tor hé2t1os hétó2 hé2t1ór hé2t1ö hé2tu hé2t1ü2 hé2v1á hé2ve. hé2vég hé2v1érz héze2 hé2z1ek hé2zio hé2zip hézo2 hé2z3s hf2ló 1hi 2hia. hi2aa hi2aá hi2abelie hi2ac hi2ad hi2ae hi2aé hi2ag hi2ah hi2aj hi2al hi2am hi2ant hi2ap hi2ar hi2at 3hida hidro1s 2hiév higa2nye 3higi 2hila 2him. 2hime 2himé 2h1i2nán 3hinás 2hing h1ing. 2hink h1insp hi2om hi2pa 2hips h1ips. h1ipse h1ipsé h1ipsh h1ipsr h1ipss hipszes1 2hise hi2se. 2hisn 2hiso hi2ta hit1ak hita2l hit1a2n hi2t1á2 hi2t1e2gy 3hitel hite2l1e2l hi2t1elesé hi2t1elő hi2t1elve. hi2t1eng hi2t1er hi2t1esz 3hitet hi2tél hi2t1ér. hi2t1érte hi2t1érv hi2t1é2te hi2t1é2ve. hi2t1im hi2t1int hitkész1 hi2t1o hitó2 hi2t1ón hi2t1ór hitö2 hi2t1ör hi2t1őr hi2t1u2 hi2tú hi2tül hi2zo 1hí hí2da hí2dá hí2de hí2dí hí2dö hí2dő hí2dú hí2dü hí2dz hí2g1e hí2jé hí2m1a2 hí2má hí2m1el hí2m1emb hí2mer hí2mo hí2mö hí2mu hí2r1a2 hí2r1á2 hí2r1ing hí2rí hí2r1o hí2r1ó2 hí2rő hír1s hí2r1u hí2rú hkas3s hká2r hk2ri hle2g1e2lé hle2t1el hle2tö 1ho ho2dú 2ho2eá ho2ef ho2ii ho2it 2hokl hola2 ho2l1ad ho2l1al ho2lam ho2l1at ho2l1au ho2l1ál ho2l1á2r hol2dá hol2dem hol2d1ó2r ho2l1e2 ho2lig ho2l1in ho2lip ho2l1i2v hol1k2 hol2mes hol2nik ho2lor ho2l1osz ho2lot ho2l1ó2r ho2lö holta2n holt1any holte2 hol2t1el ho2lü ho2ly1al 3homb 3homo homo1s ho2n1a2g ho2n1a2l ho2n1a2n ho2n1a2p ho2n1au ho2n1a2v ho2n1ál ho2n1át1a2 ho2n1á2to hone2 ho2neg ho2n1el ho2n1ik ho2n1i2m ho2ní ho2n1orj ho2n1o2ro ho2n1orr ho2n1ó2 ho2nö ho2nő ho2nü hor2d1e2 ho2re 2ho1ry hossz1e2 hosszé2 hossz1ék hossz1ü2 2hosz ho1th ho2us ho2we ho2zál ho2z1e hozi2 ho2zü 1hó hóa2k hóá2g hó1bl hó2cal hó2cat hóc3c hó2cel hó2c1é2g hó2c3h hó2cim hó2có hó2c1ö hó2csü hó2cz hó2d1a2ra. hó2d1a2rá hó2d1á2 hó2dem hó2d1é hó2d1ó2 hó2dö hó2dü hó2d3z hó2l1ej hó2l1e2ped hó2l1e2vet hó2nal hón1apa 2hórá hó2rár hó1sh hóví2 hóza2t1e 1hö hökö1 höl2gya höl2gy1á höl2gyel 1hő hőa2n hő1br hőe2l hőe2m hőe2r hőé2n hő1fl hő1gl hő1gr hő1kv hő1pr hősa2 hő2s1al hő2sas hő2s1av hő2s1el hő2sep hő2ses hő2sim hő2sis hő1s2pi hős3s hő1s2tab hős1tr hő2sut hő2s1ú hő2s1ült hő2s1ü2v hősű2 hő2s1űr hő1tr hőü2l hp2la hp2ra hp2ré hp2ri hp2ro hp2ró hru1s2 hs2ch hsé2gel hs2ka hs2pi hs2po hs1s2t hsza2ké hszá2j1a2da hsz2l ht1cl ht1kl h2t1ol ht2rá h1tref h2t1u2t 1hu hu1hy 2hurá hur2t1e hur2tit 2hus. 2husi huszon1 1hú hú2gy1a2 hú2gye hú2gyi hú2gyú hú2r1a2 hú2r1á hú2re húrt2 húr1tr hú2s1ak hú2sal hú2san hú2sap hú2sar hú2s1á2g hú2s1ál hú2s1e2 hú2sim hú2sí hú2sor hú2sö hú2ső hús3szak hús3szá hús3szé hú2sü hú2s3zab hú2sz1ál hú2sz1e2 hú2sz1í2 hú2szol hú2szos hú2sz1ó2 hú2sz1ü2 1hü hü2gy 2h1ünn hü2re hü2rü hü2tő h1ü2vö 1hű hű2ré hű2ri hű2rö hy1ér hy1év hy1ig 2i. i1a iaa2d iaát1 iaáta2 i2abaj i2aber i2abes i2abí i2abon i2abor i2abö i2abő i2abu i2abú i2abü i2abű ia2c1al iac3c i2acet iac1élé ia2c1ér. ia2c3h ia2cid iac1i2ko ia2c1im ia2c1int i2ací ia2c1or ia2có ia2cö ia2cő ia2c3sé iac3sp iac3st iac3sz ia2cü ia2cz iadás1s i2ade i2adí ia2dot ia2dóe iadó1st i2adö i2adő i2adú iae2l iae2r iae2t iaé2r i2afá i2afe i2afi i2a1fl i2afó i2afö i2afő i2afri ia1fro i2afu i2afú i2afü i2afű i2agá i2age i2agé i2agi i2agö i2agő i2agu ia2gyu i2aig i2aip i2ai2z ia2ján i2aje i2ajo ia2kad i2aká i2ake i2akí i2a1k2l i2akód i2akór i2akö i2akő ia1k2re ia1k2ré ia1k2ri ia1krí i2aku i2akú i2akü i2a1kv ia3lan ia2lat i2aleg i2alib i2alí ia2lom i2alö ia2lud ia2lus i2aly i2amá i2ame i2amó ia2m1ur i2amú i2amű ia2nek i2ané i2anö i2anő iao2k iaó2r ia2pát i2ape i2apé ia1p2l i2apo ia1p2s iarádi2 i2are ia2rén i2aro i2aró i2arö i2aru i2arú i2ase i2a1sh i2asi ia1s2ká i2a1s2l i2a1s2m i2asó i2asö i2a1s2p iast2 ia1s2ta ia1s2tá ia1sti ia1sto ia1str i2asú i2asü i2asű ia2sz1an i3aszerű ia2szes ia2szép iasz2k1e2r ia2szop i2aszú i2ate i2ató i2atö i2atő ia1tré ia2ty i2aud i2au2r iau2s iaü2z ia2vat i2avé i2avi i2aví i2avo i2azá i2aze ia2zo i2azs i2azú i1á iá2cs iá2ga iá2gá iá2ge iá2gi iá2go iá2gy iá2hí iáka2 iá2kab iá2kak iá2k1al iá2k1an iá2k1ap iá2k1ar iá2k1as iá2k1á2 iá2keb iá2k1el iá2kem iá2k1en iá2k1e2s iá2k1ér. iá2k1érd iá2kés iáki2 iá2kin iá2kir iá2kit iá2kí iá2kop iá2k1or iá2k1osz iá2k1ó2 iá2k1ö iá2kő iá2kur iá2k1ut iá2k1ú2 iá2k1ü iá2kű iála2 iál1ana iá2lál iá2l1ár iá2l1e2 iá2lim iá2l1in iá2lop iá2nar iá2n1as iá2nem iá2nir iá2nis iá2nö iánt2 ián1tr iá2nü iá2ny1ad iá2ny1a2l iá2nyan iá2nyar iá2ny1e2 iá2nyérz iá2nyö iá2ói iá2po iá2rad iá2rak iá2ram iár2das iár2d1e iár2d3z iá2re iá2rim iár1s2 iá2ru iá3run iá2rú iá2sal iá2sar iá2s1as iá2s1á2g iá2s1ám iá2sás iá2s1e2 iá2sikr iá2sí iá2sor iá2só iá2sö iá2ső iás3szo iást2 iás1tr iá2s1ü2 iá2sű iásví2 iá2szás iá2s3ze iás3zs iá2ta iá2t1e2l iáti2 iá2t1ir iba1d2 ibas2 ibat2 ibau2 ibaü2 ibá2l1a ibe2lér ibe2r1in ibe1s ibi2o ib2lo ib2ró ib2ru ica1f2 ica1g2 ica1kl ica1k2r ica2los ica1pr ica1t2 icca2l ic2can ic2c1á2 ic2c3h ic2cin ic2cir ic2cí ic2c1o ic2c1ö iccse2l iccs1ol iccs1ő2 ic2cú ic2cz ic3ha. ic3hek i2chiná ic3hoz i2c3hű ici2t1a2 ici2tár ici2tel ici2ter i1c2lu i2c1ol i2cs1a2d ics1a2la icsa2p1á2g i2cs1au ics1ág ics1áll i2cs1eb i2cs1e2g icse2t i2cs1ete i2cs1ev ics1é2g i2cs1é2ré. ics1ipa ics1s ics1út i2cs1ül i2cs1ü2t ic3sze ic1üz i2d1a2j id1ana id1a2ny i2d1au id1áll id1áru i2d1ásv id1br 1iddo id3dz ide2av ide2g1á ide2g1él ideg1ér. 1i2dej ide1k2v 2idel id1elj id1elm id1elo id1elt i2d1emb ide1p2 ide2red i2dero ide3sa ideu2 i2d1é2g idé2kel i2dény idér2c3s 2idész 1i2déz id2ge idi2as 1i2dil id1ionj id1ionn i2d1i2ono i2d1i2ont idi2os idi2ód i2d1ita idíja2d idí2j1ada id1kr id1old i2d1olv ido2mac ido2m1an 1i2domá 1i2domo 1idomú id1ös 1i2dő. 1i2dőb 1i2dőd 1i2dőé 1i2dőh 1i2dői 1i2dők 1i2dőm i2dőne i2dőné i2dőnk 1i2dőp 1i2dőr 1i2dős idő2sod idő1s2p 1i2dőt idő2tál 1i2dőv i2dőz id1pr id2rót i1d2ru id1st id1t2r id1u2t id1üg i2d1üz i2d3zá i2d3ze i2d3zó i2dzs1a i2dzs1á i2dzsen i2dzsél i2dzs1í2 i1e ie2be ie2cs ie2dz ie2f1a2 ie2fá ie2f1i ie2f1ü2 ie2gé ie2gy ie2he i2eld ie2lo ie2lőa ie2ma ien2sá ien2s1o iens3s ie2ny ie2pe ie2r1a2d ie2rag ie2r1aj ie2r1a2k ie2ral ie2ram ie2r1an ie2ras ie2r1á ier1d2 ie2reg ier1egy ie2r1el ie2r1ember ie2r1est ie2r1iga ie2r1in ie2r1iste ie2rí ie2r1ol ie2ror ie2rö ie2rő iersz2 iert2 ier1tr ie2r1u2 ie2r1ú ie2r1ü2g ie2sel ie2sem ie2sett ie2sés ie2sik ie2ső ie2sz ieté1sz2 ietz1 ie2ur ie2ve ie2vé ie2vi ie2vő i1é i2édo i2éfe ié2ge ié2gé ié2gő ié2gü i2éha ié2hes i2éhi i2éil ié2le ié2lé ié2li ié2lő i2éme i2émé i2émo ié2neke ié2nekh ié2nekk ié2nekü ié2pí ié2pü ié2rek i2éren ié2rez ié2ré ié2ri ié2rő. ié2rők ié2rőt ié2rü i2észi iéta1s ié2tel i2étö ié2ve. ié2vek ifa1st ifa1t2 i2fe. ifenyőé2h ifio2 if1ír 1ifjí 1ifju 1ifjú. 1ifjúb 1ifjúé 1ifjúi 1ifjúké 1ifjún 1ifjúr 1ifjús 1ifjút 1ifjúv i1f2la if2le if2lo if2lö if2lu ifogo2 ifon1n i1f2ri i1f2ro i1f2rö if2ru if2t1a if2t1á2 if2t1e2l if2tin if2tö if2tú ig1a2git ig1a2ka ig1als ig1alv ig1and iga2nyal iganye2 iga2ny1es iga2ras 1i2garz iga1sl iga2szag igasz1al igau2r 1i2gaz. 1igazí ig1á2cs ig1álm ig1ásh i3gász ig1á2t1e2 ig1br ig1d2r ig1edz i2geg igek2 ige1kl ig1e2le ig1ell ig1elm 1i2genl ige2rá ig1erő ig1e2se ig1esi ige2tál ige2teg ige2tél ige2t1o ige2tőr ig1evi i2g1ex 1i2géd ig1é2g ig1é2li ig1é2lő ig1é2lü ig1élv i2gém igé2na igé2ná 1i2gény i3gépe ig1épí ig1ér. ig1érj ig1érl ig1érn ig1é2rü ig1érv ig1ész 1i2géü ig1fl ig1g2r ig1ív ig1íz ig1kl ig1kr ig2lac ig2nad ig2n1e2g igne2r ig2n1osz ig2nö ig2nü igo2rál ig1o2s igóé2 ig1öb ig1ö2k ig1öl ig1ö2z ig1pr i1g2raf ig1sk ig1sl ig1sm ig1sp ig1st ig1sz ig1tr ig1ug igu2n igu2t ig1ús ig1üc ig1üd ig1ü2g igü2l ig1üt ig1üv ig1űz i2gya. i2gyam i2gyák i2gyál i2gy1eg i2gy1e2kéh i2gy1ékt igy1ér. i2gy1ért iha2re i1i ii2de ii2dé ii2dő ii2ga ii2gá ii2gé ii2gy ii2ha ii2je ii2má ii2mi ii2pa ii2ram ii2rat ii2rá ii2ro ii2sz ii2ta ii2vá ii2vo ii2vó ii2zé ii2zo i1í ií2gé ií2ra ií2rá ií2ro ií2ró ií2ru ií2té ií2ve ií2ze 1i2jed ije2gy1á2 1i2jes ikabe2j1 ikabejá2 i2k1abl ik1ajt ika2lak ik1ang ikaó2 ika1p2l ika1p2r ika2ró2r ikas2 ika1sp ika1t2r i2k1árk i2k1áru ikás1s iká2tol ik1dr ik1ebé i2k1eg ik1elo ik1eng ike2r1a2 ike2r1á2 ike2r1e2dz ike2r1e2l ike2r1ev ike2ris ike2r1o ik1e2rő iker1s ike2ru ike2t1ült ik1evo iké2kekk i2k1épí i2k1épü i2k1érz ik1fl ik1fr i2k1id ik1i2ko ik1ikr ik1ind ik1ins i2k1int i2k1i2o ik1isk ikka2l ik2k1ala ikk1any ik2k1a2r ikk1ára ik2káz ik2kev ikk1érde ik2kin ik2k1i2p ik2k1ol ik2k1ó ik2k1ös ik2köt ik2k1ö2z ik2k1u2 ik2küz ikla1tr ik2ler ik2lor i1klub ik2lum i1knéd ikoma2 iko2m1ar 1ikonbá 1ikonén 1i2konl 1i2konta 1ikontö 1i2kontü 1ikonzs ikó1p ik1ó2rá ikó2s3zá ikő2res ik1pl ik1pr 1ikrei 1ikrek ik2rém i1k2róm i1k2ru ik1st ikszind2 iksz2t iktus1s iktu2sz 2iku. 2ikub ik1udv 2ikuf 2ikuh 2ikui 2ikuí 2ikuj 2ikuk 2ikur iku2sav 2ikut 2ikuv ik1ü2v il1abr il1a2ce il1a2cé il1a2dó il1a2la il1ald i2l1alk il1amb ila2n i2l1ana i2l1any ila2pin ila2pol i2l1a2r ilá2g1e2 ilág3g ilá2gö il1á2gyo ilányfé2 i2l1á2p i2l1árn il1á2ro il1áru il1á2rú ilá2sz i2l1ászo il1átf il1átm il1átr il1bl il2c1a2 ilc3c il2ch il2c3sap il2c3sik ilc3sz il2cz il1e2lem i2l1emb i2l1eml il1exp ilé2n1á i2l1é2nekh i2l1é2nekn ilé1sp il1f2l il1fr il1g2r i2l1icc il1ide i2l1igáh i2l1igáj i2l1igás i2l1igát ili1gra i2l1i2kon. i2l1i2konb i2likoné i2l1i2konh i2l1i2konj i2l1i2konn i2l1i2kono i2l1i2konr i2l1i2kont i2likonz il1ill ili2ma. il1i2mi il1imp ilin1n ili2p1á il1iró il1k2l il1k2r illa2g1ó2 1illatb 1illatr 1illatt il2l1este il2l1esté 1illésé illé2t ill1éte ill1étt il2l1id illig2 illi1gr il2l1ö 1illu 1illú ilm1ada il2m1agy il2m1aj ilm1aka il2m1a2l ilm1ank ilm1any il2m1ap il2m1arc ilm1atl il2m1a2z il2m1ál ilme2g il2m1egé il2m1egy il2m1e2l il2m1ep il2m1e2r il2m1esz il2m1é2j il2m1ék ilmé2l il2m1éle il2m1ér. il2m1érd ilm1é2rést il2mérte il2m1érté il2m1és il2mid il2m1i2k il2mim il2mir il2m1is il2miz il2m1í2 il2m1ok il2mol il2m1or ilm1osz il2m1ó2r il2mö il2mő ilmu2 il2m1ut ilo1g2 i2l1or ilót2 iló1tr il1öb il1ös il1p2l il1p2r il1sh il1sp il1s2t 2ilte ilumi2 ilumin1 ilus3s i2l1üg il1ür il1üv i2l1üz ilva1k2 ima1gl im1akk imaó2 ima1p 2imar. i2marit 1i2mád i2mákt im1dr imeg1g im1elem ime2m i2m1eme ime2ra ime2rin i2m1érd im1inh im1inté imi2t1a2 imi2t1á2r imi2tin 1immu i2m1old i2m1om im1ó2rá imót2 im1ös 1impé 1impu 1imrei i2m1ür iműt2r i2n1abl i2n1a2cé i2n1adá in1ade i2nado in1a2já in1ajt inaka2r 1i2nakat. i2n1akc i2nakk i2nakn i2nakt i2n1akv in1ald i2n1alk in1all 1i2nam. i2n1a2mit. in1ana ina1pla ina2rán 1i2nas. ina2sis 1i2nasn ina2tell i2n1ág iná2lad in1á2rak in1árh i2náru i2n1ásv in1bl in1br in2c1a2g in2cal inca2n inc1elt in2c1él in2chi in2c3ho in2c1is in2c1os in2có in2c1ö in2cő incs1an in2cs1e2r in2cs1é2j in2cs1ér. inc3sérv in2csor inc3sor. in2csú inc3süt inc3sza in2cú in2d1ab 1indai in2d1az in2deb in2d1ed in2d1e2g ind1ekö in2d1e2m in2d1ett 1index in2d1e2z in2d1ég in2d1én in2dés ind1ink 1indiv 1indít indö2 in2d1ör in2dös in1dra 1indul 2ine. i2n1e2dé i2n1ef ineg1g in1e2gy ine2ku i2n1e2l in1emu i2n1eny 2iner i2n1erd i2n1erj ine2t1a ine2t1ér ine2tül i2n1ex 2inéb in1é2ge iné1kré iné2l i2n1éle i2n1élt i2n1élv in1épí i2n1ér. i2nérd i2n1éré in1érte iné2tá iné2te 2inév 1infek 1infl in2gadó in2g1ala ing1áll ing1árá ing1áré ing1á2ro ing1árt ing1áru ingás3s 1ingec in2g1eg 1ingei ing1eljá ing1elk in2g1ell ing1els in2g1enc 1ingerb 1ingerc 1ingeré inge2r1és 1ingerg 1ingerh 1ingeri 1ingerk 1ingerm 1ingern 1ingerp 1ingerr 1ingers 1ingert 1ingerü in2g1e2v in2g1é2j in2g1ék in2g1él ingés3s ing3g ing1i2na in2gí in1glo in2gor in2g1öl in2g1ös ing2rád. ing2rádb ing2rádd ing2rádn ing2rádo ing2rádt 1inguj in2g1u2t in2gú ing1ült 2inie 2inié i2nigar i2n1ige in1ikra ini1kro i2n1ill i2n1i2ma. in1i2mi in1ind 2ining i2n1inh i2n1i2o 2inir ini2s1ég i2n1isk i2n1ism i2n1ital 2iniu i2n1íz 1injekc ink1acé in2k1a2d in2k1ato in2k1árn in2k1esz ink1érté in2kio ink1old ink1orsó in2kös 1inkub 1inna. in2nor i2n1ob i2n1okl i2n1old i2n1olt i2n1olv in1org i2n1ox in1óda in1ó2dá inó2rá i2n1öl in1ön in1őz in1pl in1pr in1s2k in1s2m 1inspi in1spr 1insta in1s2to in2t1aktu int1ann int1árai int1árak int1árat in2t1á2rá in2t1árf in2t1ári int1áron in2t1árr int1ársz in2t1áru int1á2ta 1intege 1integr in2t1e2gy int1előt int1elté in2t1enn in2t1e2ny 1intenz in2t1e2rez 1interfé int1essz inte2t1ős in2t1é2j in2t1ész 1intézé 1intézk 1intézm 1intéző 2intézőc in1t2hos in1thu in2tid in2tigé int1illa in2t1ing in2t1ip in2t1ivá in2t1i2z int1oml in2t1osz in2t1ös intőkész1 int1őr. int1ura intus1s in2t1ut in2tús in2t1út i2n1ug i2n1uj in1új in1ú2s i2n1ú2t i2n1ü2g in1ült in1ünn in1ür in1üs i2n1ü2t i2n1ü2v i2n1ü2z in1űr 1inven in2xa 1inzu i1o ioá2r io1b2r io2cs io1d2r io2dú i2ogá iog2raf io1g2ráf. io1g2ráff i2ogy io2ik io2ká io2kí io2ko io2ku i3old io2l1i2v iol1k2 iol1okk i2oló i3olv io2mar io2m1árt io2mil io2mö io2nad io2n1a2g io2nak io2n1a2n io2n1a2r io2n1as io2n1a2t io2n1av io2n1át io2neg io2n1el io2nen ionim1 io2nin ion1k2 io2nop io2n1oszt io2nö ions2 ion1st ion1t2r io2pe io1p2r io2r1a io2r1i2ko io2so io1sz2f i2ote io2xidj io2xidt i1ó ióa2d ió2ap ióá2g ióá2r ióát1a2 i2óbá i2óbes i2óbé i2óbí i2ó1bl i2óbo i2óbö i2óbő i2ó1b2r i2óbu i2óbú i2óbü i2óbű i2óce i2ócé i2óci i3ócsk i2ócu i2óde i2ódé i2ódi i2ódí i2ódó i2ódö ió1drá i2ódú i2ódü i2ódz i2óég i2óék i2óél i2óép i2óés i2óév. i2ófá i2ófe i2ófi i2ó1fl i2ófó i2ófö i2ófő i2ó1f2r i2ófu i2ófü i2ófű ió1g2r i2óha i2óhá i2óhe i2óhé i2óhi i2óhí i2óhó i2óhö i2óhő i2óhu i2óhü i2óhű iói2g i2óip i2óis i2óiz ióí2v i2óje i2ójo i2ójó ió2kad ió2kaj iók1arc ió2k1aszt ió2kál ió2k1e2g ió2k1i2d i2ókí iókköz1 iók1old i2ókort i2ókö i2ókő ió2küz i2óla i2ólá i2óle i2ólé i2óli i2ólo i2óme i2ómó i2ómu i2ómú i2ómű i2óne i2ónó i2ónö ióo2k ióó2r ió1p2s ió2rab i2órag i2órak i2óran i2órap ió2ras i2órád i2óre i2óré i2ória i2óro i2órö i2óru ió2s1aj ió2sel ió2si. ió1slá ió2só iós3s ió1s2tá ió1str i2ósú ió1sz2 i2óte i2óté i2óti i2ótí i2ótö i2ótő i2ó1t2r i2ótu i2ótú i2ótü i2ótű i2óug i2óun i2óur i2óut i2óvár i2óvás i2óve i2óvé i2óvi i2óví i2óvö i2ózár i2óze i2ózs i1ö iö2kö iö2le iö2lé iö2li iö2lö iö2lő iö2mö iö2re iö2rö iö2rü iö2tö iö2ve iö2zö i1ő iő1dr i2őha i2őké i2őku i2őra iő2ri2 i2ő1s2p i2ő1st i2őte i2őté i2őva i2ővá ipa2cse 1i2par. 1ipara. ipa2ral ipa2rál 1i2parán 1i2parát 1iparb ipa2r1en ipa2r1es 1i2paré 1i2parh 1iparil 1i2parin ipa2ris 1i2parm 1i2parn i2parok i2paron 1iparr 1i2pars i2parta 1i2partá 1i2parte 1i2partó 1i2paru ipau2 ipánk2 ipán1n ip1átm i2p1ef ip1e2gy ip1e2lu i2p1esé i2p1ev ip1fl ip2fu ip1kl ip1kr ipo1kl ipor2tel ipor2t1ő ip1ö2l ip1ös ip2p1a2d ip2paj ip2par ip2pár ipp1ing ip2pö i1prof i1prog i1proj ip2rop i1p2rot ipsz1a2l ipsz1ál ip2sz1emb ip2szip ip2sz1í2 ipsz1or i2p1ug iralo2 1i2rama 1i2ramá iramis1s ira2tal irata2n ira2t1any ira2t1as ira2t1at ira2tál 1i2ratb 1i2ratc 1i2ratd ira2tel 1i2raté 1i2ratf 1i2rati 2i3ratill 1i2ratm ira2t1ol 1iratoz. ira2t1ö2 1i2ratp 1i2ratr 1i2ratü irádi2ók irádi2ót irá2f1a2 irá2g1al irá2g1ál irá2g1á2rak irá2g1á2ro irá2g1áto irá2gáz irá2g1e irág1g irá2g1ol irá2g1ó2r irá2gö irá2l1a irá2l1e2 1i2ránn 1i2rány irá2nyal irá2nye2 ir2ch i2rei 1irga irin2c iri2zo irka1s irkasz2 irke1 2iro. 2irob 1i2roda. 1i2rodá iro1g2r iro2ka iro2ká iro2k1e iro2kér iro2l1a iro2m1a iros3s iró2ke i2róno 1irri irsa2 ir2s1al ir2s1á2 ir2sil irs3s ir2s1ü ir2sz irté2 ir2t1él ir2tiz ir2t1o2r ir2t1ö2 ir2tür iru2sze i2s1abl is1a2da is1a2dá is1a2do i2s1a2g is1aja is1ajk isa2k1e isa2kol is1a2la is1alf i2s1alj is1alk is1alm is1amb isa2n i2s1ana i2s1ano i2s1ant i2s1any isa2p is1apá is1apo is1a2rá is1ass is1aut i2s1a2z i2s1ábr is1ággy iságy1út is1áll is1á2po i2s1á2rak i2s1á2rá i2s1árb i2s1árf i2s1árh i2s1árké i2s1árn isá2ron i2s1árr i2s1árt i2s1á2ru isárus1 is1á2t1a2 is1átk i2s1átl is1átv is1bl is1br is1dr is1edz is1eff i2s1ege is1e2gér i2s1e2ke. is1elf is1elm i2s1elo i2s1eml i2s1enc i2s1ene is1eng i2s1e2pi is1epri is1erő is1e2set is1esé isé2ge2l isé2gés isé2gid iségkész1 is1élv i2s1ér. i2s1é2ri i2s1érté is1é2ve. is1é2vet is1é2vén is1é2vét is1évh isé2vi. isföl2 is1fr is2hin is2his is1ido isi2g is1iga is1ind is1inf is1int is1inv isió2 i2sipa isi2par is1iro i2s1isten is1ita is1i2zo i1s2katu is1kl is1k2r is1kv is2lag i1s2lat 1isme. 1ismek 1ismere 1ismérv 2ismo 2ismű i2s1ob i2s1o2l i2s1orc i2s1ord iso2rosz i2s1orra i2s1orró is1orv i2s1osko is1osz i2s1ott is1ó2rá i2s1öb i2s1ö2c is1öl is1ön isö2r is1örd is1öre is1ös is1ö2v is1ő2r i1s2pek isp2r i1s2pur is1s2p is1sta is1stá issz1e2rei issz1e2rek issz1erem issz1e2res is3szig is3szil is3szí is3szó is3szö is3sző is3szú is3szű ista1s istasz2 1istáp 1istenh iste2n1o i1s2til is1trez is1tré is1tri is1tro 1istv i2s1ud is1ujj isu2t is1uta is1utá i2s1új i2s1üg is1üst i2s1ü2tőt i2s1üz isva2d1áss i1svin isvíz1 isza2k1o isza2p1á2 isza2p1e is3zárá isz1árk is3zárl is3zárú isz1e2gy i2sz1elv is3zene isz1esem i2széj isz2fér i2szimi isz1ing isz1isk isz1ist isz1kl isz2k1ö2v isz2k1ú isz1öl isz1ös isz3s isz2tati iszt1áras isz2t1árb isz2tárt isz2t1ékn isz2t1ér. isz2t1ill iszt1i2nai isz2t1öl isz2t1őr. isz2tüz i2sz1ü2g i2szüt is3zűrödn it1a2cé ita1d2 it1a2dó ita1g2r it1agya i2t1akk i2t1akn 1i2tal. ita2lad ita2l1á2rú i2talb ita2l1el italé2 i2talh itali2n ita2lina i2talj i2talk it1allo 1i2talm 1i2taln i2talo ita2l1ó2 1i2talr i2talt2 i2talu it1anó it1ant i2t1ara i2t1au it1ács. it1ág. it1á2ga itána2 itá2n1at itá2rak i2t1á2ram it1á2ras it1á2rat itá2rár itá2rát i2t1á2ria itá2rig itá2ris itáró2 itá2r1ór itá2ruk itá2rú itáskész1 itá2s3z itá2tal it1átf it1bl it1br it1dr ite2l1a ite2l1á ite2leg i2telemz ite2leng ite2lesé ite2lex ite2lél ite2l1ér. ite2linj it1eljá i2t1ellen it2elmély ite2lo ite2lőz i2t1e2mel i2t1eml i2t1e2p 2iter i2t1e2rez i2t1erő i2t1e2sete it1ezr ité2g i2t1ége it1é2le it1élm i2t1é2ret i2t1érz ité2tek i2t1étt it1fl it1fr it1gl it1gn it1gr i1t2hot i2t1id iti2g itigaz1 i2t1igé it1i2ko it1ikr itikus1s it1ill it1imp i2t1ind i2t1inf it1i2pa i2t1irá i2t1iro it1iró it1isk i2t1ism it1isza it1i2szo i2t1íg i2t1íz it1kl itkos1s it1kr ito2b it1obe ito2k1aj ito2kak ito2k1ol ito2n1á2 itop2la ito2r1as ito2rál ito2ril 2itosz ito1sz2f i2t1ov itóa2 itó1f2 1i2tókán i2t1ó2né i2t1ónn i2t1ónt itó1p2 it1órá itós2 itó1sp itó1st it1önt i2t1ös it1őrl it1pl it1pr it1sp 1ittad 1ittam itta2n1á2s itta2n1é itta2n1ó2 2itte it2t1eg it2t1i2na it2t1ing it1tra it1tró 1ittuk 1ittun itty1i i2t1ug i2t1und itu2n1i itu2ral it1u2rán it1új i2t1üg it1üld it1üst i2t1üt i1t2zé i1t2zi i1u iu2ga iu2go iu2mab iu2mac iu2m1ad iu2maf iu2m1ag iu2mal iu2m1am iu2m1a2n iu2m1a2r iu2m1as iu2m1a2t iu2m1av iu2maz iu2m1á2l iu2meg iu2m1el iu2m1en iu2mer iu2m1es iu2mez iu2mél iu2m1éré iu2m1i2d ium1ill iu2m1im ium1inj iu2m1i2p iu2m1is iu2m1iz iu2mí iu2mol iu2m1or iu2m1ó2 iu2mö iu2mő ium1p2 iu2mü iu2na iu2no iu2ra iu2rá iu2ru ius3sze iu2ta iu2tó iu2tu iu2zs i1ú i2úbá i2úbe i2úbé i2úbi i2úbo i2úbö i2ú1br i2úci i2úcí i2údá i2úde i2údo i2údz i2úél iú1fr i2úha i2úhá i2úhe i2úhi i2úhö i2úhő i2úhu i2úhú i2úif i2úje iú2jí i2újó i2úke i2úkí i2ú1kl i2úkó i2úkö i2úku i2úme i2úmó i2úmu i2úmű i2úne i2úné i2únö i2úre iú2ri iú2ro i2úru i2úse i2úso i2ú1sp i2úta i2útá i2úte iú2té i2útí i2útö i2útú i2úve i2úvé i2úvi i2úvo i2úze i1ü iü2cs iü2ge iü2gy iü2le iü2lé iü2li iü2lö iü2lő iü2lü iü2re iü2rí iü2rü iü2te iü2té iü2ti iü2tö iü2tő iü2tü iü2ve iü2vö iü2ze i1ű iű2ze iű2zé iű2ző iva2csal iva2cs1e 1i2vadé iva2r1ai iva2raj iva2re iva2rin iva2rol iva2ró ivar1s iva2t1a2n iva2t1e2 iva2tin iva2tol iva2t1ó2 iva2t1ö 1i2vás. 1i2vásb 1i2vásé 1i2vásn 1i2vásr 1i2váss i2ve. 1ivot ivókész1 ivós2 ivőé2 iv2ré i2x1ab i2x1ad i2x1an i2x1ar ix1as i2x1ág ix1bl i2x1ef i2x1eg i2x1ex i2x1ép ix1fr i2x1im i2x1in i2x1io i2x1ir i2x1is ixi2t i2x1ob i2x1op ix1öd ix1ös ix1őr ix1ős ix1pl ix1pr i2x1új i2x1ül iz1akn izala2g1 iz1alk izas2 iza1sp iz1árny iz1bl ize2d1á2 ize2d1ék iz1egy i2z1e2lem izele2tel i2z1e2lér i2z1e2lőí iz1ember izene2g izen3n ize2s1á2 i2z1esemé i2z1ev i2zéd i2z1ég 1i2zéj 1i2zék i2zél i2z1é2p 1i2zésí iz1fl 1izgal 1izgatot i2z1iga i2z1igé iz1inf iz1int iz1iro i2z1isk i2z1ism izi1s2p 1izmok 1izmuk izmus1s 1izmú iz1okt 1i2zolá izo2m1a izo2mál 1i2zomb 1izomé 1izomf 1i2zomm 1i2zomn 1i2zomr 1izoms 1i2zomt 1izomz izo1p2 i2zos izo1szta 1izotó izó2d1a2 iz1órá iz1pl iz1pr i2zs1ad izsa2ik i2zsakn i2zs1all izs1ara izsa3u2tók iz4s1ág i2zs1ál i2zsec i2zs1embe i2zsev izsé2t izs1éte i2zsil i2zs1imp izs1ist i2zsita i2zsiz iz3sor i2zs1ő izs1s iz3str i2zs1ül iz3sze iztos1s iz1udv izura1 iz1ú2t i2z1ü2g i2z1üt i2z1ü2z 1izzi 1izzí 1izzot 2í. í1a í1á íba2l1 í2bis íbo2r1as ícius1s íd1a2c íd1a2d íd1a2l ídala2g1 íd1a2n íd1a2v íd1a2z íd1ág íd1ál íd1á2r íd1át íd1bl íd1e2g íd1e2l íd1e2m í2d1é2g í2d1él í2d1ép í2d1ér. í2d1érz ídi2g í2d1iga í2d1igé í2d1in í2d1i2r íd1ív í2d1ol í2d1om í2d1os íd1ös íd1ő2r íd1pr íd1st í2d1ud í2d1ug íd1új íd1üg íd1ün íd1üz íd3zá íd3zs í1e í1é íé2le í2g1a2g íg1e2p íge2s í2g2ér í2g1op íg1tr ígyá2 í1i íi2ro í1í í2j1a2dá í2j1a2dó í2j1a2j í2j1akc í2j1a2l íj1any í2j1a2r í2j1a2u í2j1á2c í2j1á2g í2j1árá í2j1áre í2j1árt í2j1áru 1í2jás íjá2sze íj1ászka í2j1áta í2j1á2te í2j1áth í2j1átl íjá2tos í2j1átt í2j1átu í2j1átv í2j1á2z íj1e2g íj1e2l íjel2i íj1e2m íj1en íj1e2r íj1e2s íj1ép íjé2r í2j1ére íj1fr í2j1i2d í2j1im í2j1int í2j1ir íjirá2 íj1íg íj1ín íj1kr í2j1o2d í2j1ok í2j1ol í2j1os í2j1ot íj1ön íj1ös íj1ö2v íj1öz íj1pl íj1pr íj1sk íj1sp íj1st2 í2j1ug í2j1u2t í2j1út íj1üg íj1ü2t í2k1abl í2k1a2c í2k1a2g í2k1a2l í2k1an ík1ar íka2s ík1asz ík1a2v í2k1áb í2k1ág ík1ál í2k1á2r í2k1eg í2k1e2l ík1em í2k1es ík1ev í2k1é2k í2k1ér. í2k1érb í2k1é2rő ík1fr í2k1i2d í2k1ing í2k1i2r ík1ín ík1ír ík1k2r í1k2lu ík1oll í2k1op í2k1orn í2k1orr í2k1ors íkö2l í2k1ö2v ík1pl ík1pr ík1sp ík1sz2 í2k1ug í2kuni í2k1u2r í2k1u2t í2k1ú2t ík1ü2v íl1aj íl1a2k íl1a2l í2l1á2g ílási2 ílá2s1ik ílás3s ílá2s3z í2l1át íl1bl íl1br íl1e2g í2l1érz íli2as í2l1i2m í2l1i2r í2l1is íl1í2r íl1í2v íl1kr íl1ös íl1ö2z íl1st íltá2 íl2t1árk íl2t1áro íl2t1árt íl2t1e íl2t1é2 í2l1u2r ílu2sab ílu2se ílus3s ílu2s3z íma2n íma1p í2m1á2l ímá2ris ímás1s ím1bl ím1b2r ím1dr í2m1e2g ím1elí í2m1elm íme2r1a2 íme2r1á íme2reg ím1e2rő í2m1esem í2m1e2v í2m1é2het í2m1é2k í2m1ép í2m1ér. í2m1é2ré í2m1é2rő. í2m1é2rői í2m1érr í2m1érte í2m1érté í2m1i2d ími2g í2m1iga í2m1igé í2m1ill í2m1ind í2m1inf í2m1ira í2m1is í2m1i2v ím1ír ím1kr ím1o2k1 ím1ol ím1on ím1o2p ím1os ím1ök ím1ö2l ím1ös ím1öt ím1ő2r ím1p2r ím1sp ím1st ím1u2r ím1u2t í2m1üg í2m1ünn í2m1üt í2n1ab ín1a2cé ína2d ín1ada ín1adá ín1ado í2n1a2g í2n1a2j í2n1aka í2n1akk ín1a2la ín1alj ín1alk ín1ana ín1a2ny í2n1a2p í2n1a2rá í2n1arc ín1ass ín1atl ín1att í2n1au í2n1az ín1ábr í2n1á2c í2n1ág í2nálhaj í2n1álm í2n1á2p ín1á2t1a2 ín1átc ín1áte ín1átf ín1áth ín1átl ín1átm ín1átt ín1átv í2n1á2z ín1bl ín1br ín1d2r í2n1ef í2n1e2g í2n1e2ke. í2n1elc í2n1e2le í2n1elh í2n1elj í2n1elk í2n1ell í2n1elm í2n1elny í2n1e2lo í2n1elö í2n1e2lőh í2n1elr í2n1eltá í2n1elto í2n1elvá í2n1e2mel í2n1eml í2n1e2mu íne2n í2n1ene í2nesd í2n1e2sz í2n1e2vé ín1ég íné2l í2n1éle ín1élé ín1élő ín1élt í2n1é2p í2n1ér. í2nérd í2n1éri í2n1érl í2n1érm í2n1érü íné2sza íné2szer íné2szint íné2szo í2n1éte í2n1é2ven ín1f2r ín1g2r íni2g í2n1iga í2n1igé í2n1i2ko í2n1ill ín1ind í2n1inf í2n1ing í2n1int 1í2nio ín1i2rá í2n1iro í2n1ism í2n1i2z ín1íz ín1k2l ín1k2r ín1k2v ín3nyú í2n1ob í2n1ol í2n1op í2n1or í2n1osz ín1ó2l ín1ön ín1ör ín1ös ín1öt ín1ö2v ín1ö2z ín1pl ín1pr ín1ps ín1s2k ínso2k1 ín1s2p ín1s2t2 ín1sz2 ín1t2r ín1ug ín1új í2n1üd í2n1ü2g í2n1ült í2n1ü2t í2n1ü2v íny1e2c íny1e2g íny1el íny1e2r íny1ing í1o í1ó íó2vo í1ö í1ő í2p1a2g í2p1a2n í2p1álc í2p1él ípés3s í2p1i2z íp3ro í2p1uj ípu2san ípus3s ípus3z ír1a2dó ír1akc ír1akn ír1akt ír1a2la ír1alj ír1alk íra1pl íra1pr ír1arc í2r1a2u í2r1ábr í2r1á2g í2r1á2p ír1ár. ír1árak í2r1á2ro ír1á2ru í2r1ásás írá2se íráskész1 írás3s í2rász ír1á2t1a ír1á2t1e2 í2r1áth ír1áts ír1átv ír1áza ír1bl ír1br ír1d2r ír1e2dé í2r1e2g í2r1e2kés í2r1e2l írel1a í2r1ember ír1eml ír1emu íre2n ír1ene í2r1e2r í2r1esem í2r1e2ső í2r1eszk í2r1ev í2r1é2g í2r1éj í2r1é2k í2r1é2l í2r1ép í2r1é2ri í2r1és í2r1é2te ír1évh ír1f2r ír1gl ír1g2r íri2g í2r1iga ír1iko í2r1ill í2r1im ír1ind í2r1inf í2r1inj ír1ins í2r1int í2r1i2p ír1ira í2ris íri2sz1á í2r1i2z ír1ín ír1ír ír1ív ír1í2z ír1k2l ír1k2r ír1kv 1írnok í2r1o2b 1írog í2r1okl í2r1okm íro2l í2r1ola í2r1old í2r1olv í2r1o2r í2r1osz í2r1o2v í2r1o2x íróá2 í2ródj í2ródo í2ródó í2ródt í2róí író1p2 író1s2p író1sz írót2 író1tr ír1ön ír1ör í2r1ös í2r1ö2z í2r1ő2r ír1ő2s ír1p2l ír1p2r ír1sh ír1s2k ír1s2p ír1s2r ír1s2t írsz2 írszt2 ír2t1ag írt1alap írt1é2te írtha2 ír1tran ír1tro ír2t1u2r íru2n í2r1und í2r1uni í2r1u2r íru2s1e2 írus3s í2r1u2t í2r1új í2r1úr í2r1ú2s í2r1útj í2r1útn í2r1ú2to í2r1útr í2r1útt í2r1ü2g írü2l ír1ür ír1ü2v í2r1üz ír1ű2z ís2po ís2tí ísz1aj ísza2k íszak1o ísz1a2l ísz1as ísz1at ísz1au í2sz1á2 í2sz1eb í2szedé í2sz1e2g í2sz1e2lem í2sz1ell í2szeln í2sz1e2lő í2sz1elv í2sz1emb í2sz1e2mel í2sz1eml í2sz1erk í2szég í2sz1é2l í2sz1é2p ísz1érem í2sz1ért í2sz1étk ísz1g2 íszi2 í2sz1id í2sz1in í2szír í2sz1ív ísz1k2 í2sz1o2 í2sz1ó2 ísz1öl ísz1ön í2sz1ő2 ísz1p2 ísz3s ísz1tr í2sz1u í2sz1ú íszü2l í2sz1ülé í2szünn í2szüt ísz1z íta3u2 ítá2s1á2g íté2k1a2l íté2k1e2l 1í2tél íté2sa íté2s1ég. íté2s1é2gé íté2s1égr íté2sza íté2szá íté2szo ítész3s ítóa2 ító1f ítógé2p1é2s ító1p2 ító1sp ító1sta ítót2 ító1tr ít2ré ítus3s í1u í1ú í1ü íü2dü í1ű í2v1a2d ív1a2já ív1ajk ív1ajt í2v1a2la í2v1alj í2v1a2na ív1ang í2v1anó í2v1a2ny ív1arc ív1a2ri í2v1aszt ív1ábr í2v1á2g í2v1ál ív1á2rad í2v1á2ram í2v1árk í2v1árn í2v1árt í2váru ívás3s ívá2s3z ív1áta ív1bl ív1dr íve2c í2v1e2dz í2v1e2g í2v1ej í2velek ív1e2lemb ív1e2leme ív1e2lemé ív1e2lemr í2velg ív1e2lől í2v1ember íve2n í2v1end í2v1ene íve2r ív1ere ív1eré ív1erő í2v1esemé í2v1esz í2v1e2tet í2v1é2g í2v1é2k í2v1é2le í2v1élm í2v1é2lő ív1élt í2v1ép í2v1ér. í2v1érd í2v1é2ri í2v1érr ív1érté í2v1érv í2v1érz í2v1é2te ív1fr í2v1i2d ívi2g í2v1iga ívi2k ív1ike í2v1ill í2v1im í2v1in í2v1i2p ív1iro ívi2s1el ívi2ses ívis1s ív1iva í2v1i2z ív1kl ív1kr í2v1ol í2v1op í2v1or í2v1osz í2v1ox ívó1s2p í2v1öb í2v1ö2r í2v1ös ív1öv í2v1ö2z ív1pl ív1pr ívren2de ív1sk ív1sp ív1st ívsz2 ív1szk ív1tr í2v1ug ív1ult í2v1ur í2v1u2t ív1új ív1út í2v1üg í2v1ür í2v1üt í2v1ü2v í2v1üz íz1ab íz1a2d íz1a2g íz1aj íz1a2k íz1a2l íza2n íz1ar íz1a2u íz1á2g íz1ál íz1á2p íz1á2r ízár1ó2 ízás1s íz1á2t ízát1a2d ízát1á ízát1e2 íz1bl íz1d2r í2z1ef í2z1e2g í2z1ej í3zelá íze2l1el íze2lö íze2lő í2z1emel í2zemé íze2n í2z1ene í2z1e2r 1í2zesí í2z1e2sz í2z1e2ti í2z1eu í2z1e2v í2z1ex í2z1e2z í2z1ég íz1ékk í2z1é2l í2z1é2p í2z1ér. í2z1érb í2z1érd í2z1érel í2z1é2ren í2z1érh í2z1é2r1i í2z1érk í2z1érm í2z1érn í2z1érr í2z1érs í2z1érte í2z1érté í2z1értő í2z1érv í2z1érz ízé2sa íz1ész íz1évi íz1fr íz1gl íz1icc ízi2g í2z1igé íz1iko í2z1ill í2zimá í2z1imi í2z1imp í2z1ind í2z1inf í2z1int ízióé2r ízi2óéra ízi2óto í2z1i2pa í2z1ira íz1irá ízi2so ízi2sza ízi2szo ízi2szó í2z1i2ta í2z1i2vá íz1í2v íz1íz íz1kl íz1k2r ízo2k íz1on íz1or íz1os íz1ó2rá íz1öb íz1öd íz1ök íz1ö2l íz1öm íz1ön íz1ör íz1ös íz1ö2v íz1öz ízpen1 íz1pf íz1pl íz1p2r í2zsa2 ízs1al ízs1as ízs1au íz4s1ág ízsá2r ízs1áro íz3sáv íz3seb í2zs1e2l ízse2s ízs1ese í2zs1in í2zs1it íz3sí í2zso ízs1ok íz3sor í2zs1ó2 í2zsö ízs1s íz3str í2z3su í2zsú íz3sz íz1t2r í2z1ug í2z1uj ízu2me ízu2m1i íz1und í2z1u2r í2z1ut íz1úr íz1ú2t í2z1ü2g í2züle í2z1ür í2z1üs í2z1üt í2z1üv í2z1ü2z í2zűe í2zűn 1í2zűr í2zűv 2j. 1ja j1a2cé 2j1a2dag 2j1a2dal ja2datá 2j1a2dato 2j1adm 2j1a2dom 2j1a2dot ja2dóh ja2dós ja2dót ja2dóv ja2dóz ja2dus ja1f2r ja2ga. 2j1agg 2j1a2gi 2jakad ja2kadé ja2k1ál ja2k1á2p ja2k1árn 2j1akci ja2k1ec ja2k1el ja2k1e2m ja2kes jak1ére ja2k1éri 2jakf ja2k1im. ja2k1iz ja2k1í2r jak1k2 2j1akku jako2v jak1ovi ja2kók ja2k1ölts ja2k1ös 2j1akro jakt2 2j1akt. 2j1akti 2j1aktu 2j1alg 2j1alk 2j1all 2j1alm jam2be 2jambu ja2mes 2jana. 2jana2i ja2nal ja2nat 2j1a2no jan2sze jan2szü ja2nya ja2ran 2j1a2rá 2j1arc ja2rom 2j1a2szás 2j1atk 2j1atró ja2ur ja2uto 2javat ja2xi ja2zon 1já já2ar 2j1á2bé 2j1ábr 2j1ág. 2j1á2ga. 2j1ág1a2d 2j1á2gai 2j1á2gak 2j1á2gas 2j1á2gat 2j1á2gaz 2j1á2gá 2j1ágb 2j1ágf 2j1ágg 2j1á2gi 2j1ágk 2j1ágr 2j1á2gy jáí2r 2j1áll já2n1e já2nék 2jánl já2po 2j1á2rada 2j1á2rai 2j1á2rak 2j1á2ram já2rar já2r1av 2j1á2rán járás3s járá2s3z 2j1á2rát 2j1á2ráv járe2 já2r1em já2res já2rér 2j1á2rig já2r1is 2j1árki 2j1árko 2j1árny 2j1á2ron já2r1ot já3ró já2rő 2j1ártal 2j1ártás 2j1á2ruk 2járus j1árut 2j1árvál 2j1árz já2s1ad já2sal já2san já2s1ág já2s1á2rai já2s1árak já2sás já2s1e2 já2sit já2s1í já2s1ol 2j1á2só já2sö jást2 já2s1ü2 já2sz1al jásze2 já2szis já2sz1okta jász1ói jász1ón jász1ó2r ját1a2dó. ját1a2dók. ját1a2dón. ját1a2dót 2j1á2tal já2t1á2 2j1átáz játék1e2 2j1átfe 2j1áthá 2j1á2ti 2j1átír 2j1átlé 2j1átm ját1osz 2j1á2t1ö 2játszű 2j1á2tü 2j1átvé 2j1átvi já3zs jba2l1 jb2lo jb2ri jb2ró jbű2n1ü2 jc3ho jcsapá2 jcs1s jdo2nal j1d2rá j1d2ro j1d2ru jdúköz1 1je jea2l jea2n je2bé 2j1e2dén 2j1e2dz jee2n je1f2r 2jeged je2gés jegész1 je2gyeg je2gyel jegy1els jegy1elv 2j1e2gyesí je2gy1é2k je2gy1in je2gy1o je2győ je2gyu je2gy1ú je2gy1ű2rű j1ekcé je1kri jek2t1a2 jek2t1á2r jek2t1e2l jek2ter je2laj je2l1an je2l1ap je2lar je2lav je2laz jelá2 je2l1áb je2lág je2lál je2l1ár je2l1át1 je2láz jel1e2gy je2l1e2l1e2v je2l1elk je2l1ell je2l1e2lőá je2l1e2lőb je2l1els je2l1emel 2jelemé je2l1eml 2j1e2lemz je2l1eng je2l1e2r jel1esés jel1esik je2l1esni je2l1e2ső jel1este je2l1esz je2l1etet jel1evo je2lég je2l1éj je2lél je2l1ép je2lérte je2l1ige je2lim je2l1i2na je2l1inf je2l1ing je2l1int je2l1í2 2j1ellen je2l1o2 je2l1öv je2lőa 2j1e2lőfe je2lőí 2j1e2lőtu jel1p2 2jelszá 2jelszo 2j1eltett. 2jeltér je2lu je2lú 2j1emba 2j1ember 2j1e2mel je2mu je2n1á jen1d2 je2n1e2ke. je2n1el je2ner jene2s je2n1esz je2n1in je2n1o je2n1ő2re je2n1ős je2n1ü je1p2r 2j1erd je2red je2ró 2j1e2rő je2s1a je2s1emb 2j1e2setb 2j1e2sett je2s1ér je2ső jest2 je1sta je1str je2su je2s1ü2v jes3zac je2t1am je2tál jet1ell je2t1em je2t1ék je2t1o je1tra je2tun je2tut jeu2r 2j1e2vő jezőkész1 1jé 2j1ébr jé2g1a2 jé2g1á2 jégár1a2d jé2gec jé2ged jé2g1e2k jé2g1el jé2g1em jé2g1erk jé2g1es jé2get jé2gép jé2g1ér. jé2gés jég3g jégi2 jé2g1id jé2gigé jé2gim jé2g1is jé2g1o jé2gó jé2gö 2jé2gő jé2g1u2 jé2gú 2j1é2hen 2j1é2hes 2j1éhs jé2k1os jé2kü 2j1é2le jé2lő 2j1élt jé2nad jé2n1ess jé2n1é2g jé2nil jé2no jé2nú jé2pí jé2pü 2j1ér. 2j1érb 2j1érd jé2reg 2j1é2ren 2j1é2ré 2j1érh 2j1é2ri 2j1érk 2j1érl 2j1érm 2j1érn 2j1érr 2j1érte 2j1érté 2j1értő 2j1é2rü 2j1érv 2j1érz jé2tel 2j1étk 2j1étt 2j1év. 2j1évb jé2ve. 2j1é2vek 2j1é2vet jé2vén jé2vér jé2vét j1évh j1é2vi j1évk 2j1évn 2j1évr j1évt 2j1é2vü j1évv jfeles1s jf2le jf2lo jf2ló jfölös1s jf2ra jf2re jf2ri jf2rí jf2ro jf2rö jfu2na j1g2le j1g2ló jg2ru jhá2r1e 1ji ji2do j1i2dő 2j1i2ga 2j1i2gé ji2je 2j1ikr 2j1ill ji2ma ji2má ji2mi 2j1i2na. ji2náb 2j1ind 2j1inf 2j1ing 2j1inj 2j1ins 2j1inte 2j1inté ji2on ji2pa 2j1i2rat 2j1i2rá 2j1i2ro 2j1irr 2j1irt 2j1isk 2j1ism 2j1ist 2j1i2ta 2j1i2vá 2j1i2vó ji2zé ji2zo 1jí jí2gé jí2rá jí2ró jítókész1 jí2ve jí2vé jí2vó jí2ze jí2zé jí2zü jí2zű j2j1alj j2j1a2z jjá1s jje2lesé jje2lesi jje2lest jje2l1ül jj1e2r j2j1im j2j1iz jj1ív jj1íz j2j1ol j2j1os jj1pr jj1üg jka1pr jk1ard jkau2 j2k1e2g j2k1e2lő j2k1e2s jké2p1e2ké jkia2 jkiá2 j2k1id jkie2 jk2la jk2lá j1k2li j1k2lo jkme2 j2k1old jko2r1á2s jko2r1in jk1órá jk1pl jk1pr j1k2ré j1k2ri j1k2rí jk1st j2k1u2s jk1üg jk2va j1k2vó j2l1abl jl1a2da j2l1a2lap j2l1all j2l1ar jla2t1e2 j2l1azo jlás3s jl1á2t1a jl1átn jl1bl jl1e2gy jleí2 jl1elé jl1ell jl1eln jle2t1é2te jlé2cel jlé2c3s j2l1év. jli2k jl1iko j2l1ind j2l1inf j2l1int jl1obj j2l1ol jlo2n1á jlo2ni j2l1ös jl1pr jl1sp jl1st jl1t2r jme2g jm1oká j2m1old jna2l1e jna2lég jna2lis jn1á2rá jn1á2ru jnév1a jn1ing jn1st jn1ü2g 1jo jo2g1a2d jo2g1aka jo2gal jo2g1an jo2g1a2z jo2g1á2c jo2g1á2l jo2g1e2 jog3g jo2g1í jo2g1ol jo2g1or jo2g1osz jogó2 jo2g1óv jo2gö jo2gő jo2gur jo2gü 2j1o2koz 2j1oks 2j1okta jo2laj jo2lim joma2 jo2m1ag jo2m1an jo2mar jo2m1as jo2m1á jo2m1e2 jo2m1é2t jo2mév jom1f2 jo2mij jo2m1ik jo2m1is jo2m1iv jo2m1ol jo2m1or jo2mö jo2mő jom1p2 jo2mü jo2mű jonc1c jon2ch jon2cil jon2c3s 2j1ond jo2ób jo2pá jo2pe jo2r1ing 2j1orr. jo2rü 2j1osto 2j1osz jo2ui jo2uk jo2ul jo2ur jo2ut jo2va 1jó jóa2k jóá2g jóá2r jó1bl jó1b2r jó2ce jó2dad jó2dak jód1all jó2d1a2n jóda2t jó2d1ato jóde2 jó2del jó2dig jó2diz jó2d1ol jódó2 jó2dór jó2dü jó2d3z jó1fl jó1kl jó1kro jó2l1e2s 2j1ónn jó1p2r jó2rák 2j1ó2ri jó2sal jó2sas jó2sál jós1árk jó2seg jó2sem jó2sén jó2sip jó2sis jó2s1o2do jó2sö jós3s jós1üld jó2s1ün jó2s3zár jó1t2r 1jö jö2dé jö2ko jö2lé 2j1önt jö2re jö2rö j1ösv j1ötv 2j1öv. 2jöve. j1ö2vez 2j1ö2vén jö2zö 1jő j1őrl jő2rö 2j1őrt jő2rü jő2ze jpárba2 jp2la jp2le jp2re jp2ré jp2ri jp2ro jp2ró jra3d2 jra1f jrai2 jra1p2 jra1s2 jrau2 jré2sz1e2l jré2szí jsa2v1e jsa2v1é jsa2vo jsa2v1ón. jsa2v1ó2r jság1g js2ho js2ká js2ki js2ni js2pe js2pi js2po js2pó jsp2r j1s2ta js2ti j1s2tí j1s2to j1st2ra j1st2ru j1s2tú jszabás1s jszá2l1a2da jszáraz1 jszín3n jsz2k jszt2 j2t1a2da jt1a2do jt1a2dó jt1akn jt1a2lap jt1alk j2t1all j2t1alv jt1a2nyag jta1p2 j2t1a2pá jt1a2rom j2t1arz jta1sp j2t1atk j2t1a2ut j2t1ác jt1ága j2t1áll jtá2rai j2t1á2rak j2t1árka jtá2s3z jt1á2t1a j2t1e2gy j2t1e2ke. j2t1e2leg j2t1e2leme j2telemz j2t1elf j2t1elh jt1eljá j2t1ell j2telmél j2t1e2lo j2t1e2lő j2t1elp j2t1elr j2t1els j2t1elv j2t1eml j2tener j2t1enz jt1e2red jt1e2rez j2t1erő j2t1e2tetőe jt1e2vés jt1evo j2t1e2vő j2t1é2le jt1élm j2t1érl j2t1érm jtés3s jt1fl jt1fr j2t1i2d jti2m j2timá j2t1imi j2t1imp jt1inf j2t1ing jt1int j2t1i2pa j2t1ir jti2s jt1isi j2t1izg jt1i2zo j2t1í2v j2t1í2z jt1kl jt1kr j2t1olda j2t1orjáb j2t1ors jt1osz j2t1o2x jtóa2 jtóé2ra jtó1p2 jtó1s2po jtó1sta jtó1str jtó1sz jtó1tr jt1ödé jt1öng jt1öss jtőa2 jtőe2 jtőé2 jtő1s2p jt1pl jt1pr j1t2ran jtrádi2 j1t2rág jt2ri j1t2roj jt2róf jt1sp jt1st jt1t2r j2t1udv j2t1und jt1utá j2t1új j2t1üg j2t1ü2l j2t1üt 1ju ju2ga jugo1 ju2had ju2h1a2k ju2hal ju2h1a2n juha2ra ju2hat ju2hál ju2h1e2 ju2h1éj ju2h1is ju2hor ju2hő ju2hü 2jula 2juls 2jural ju2ru ju2sz1a2v ju2szim ju2sz1í2 ju2tak 2j1u2tál 1jú jú1fr jú2jí jújjáé3 jú1pl jú1p2r jú1s2p jú1s2t jú2szó jú1szv 2j1útb jú2ton 2j1útv 1jü jü2ge jü2gy jü2le jü2lé j1ü2lő j1ült jü2re jü2rí jü2rü jü2ta j1ü2tő jü2ve jü2ze 1jű jű2ri jű2ző j2z1abl j2z1a2d jza2j j2z1ajá jz1ajt jza2kad jz1akc j2z1a2l j2z1a2ny j2z1ar j2z1as jza2tan j2z1ál j2z1á2rad j2z1á2rán j2z1e2l j2z1em jze2r jz1eré j2z1es j2z1él j2z1érté jz1fr jzi2g j2z1igé j2zill j2z1int j2z1i2r j2z1isk j2z1ism jz1k2l jz1k2r j2z1ob jz1okta j2z1olda j2zolvas j2z1osz j2z1ó2d j2z1ó2r jzó1s2 j2z1ös j2z1öt jz1pl jz1p2r jz3sab j2zs1a2l j2zs1ál jzscsa2p1 j2zs1eg j2zsen j2zs1er j2zs1in jz3sín jz3sor j2zs1ö2 j2zs1ő jzs1s j2zs1u2t jz3sza jz3szá jz3sze j2z1ut jz1ü2g 2k. 1ka kaa2d kaát1 kaáta2 kab2a 2kabbah 2k1abhá kabi2ná 2k1ablak. 2k1ablaka 2kablaká 2k1ablakb 2kablakh 2kablakk 2k1ablakok 2k1ablakon 2kablakos 2k1ablakot 2kablakr ka1b2le ka1bre 2k1abs ka2cél. ka2c3h kacs1á2g ka2cs1ús ka2cü ka2cz k1adap 2kadál kadás1s 2k1a2dot ka2dói ka2dój 2k1a2dóso ka2dóu ka2dóz ka1d2rá kaegész1 kae2l kae2r kaé2r ka1f2r ka2gan 2k1agg ka1g2r 2k1agy. ka2gyu kai2z 2kajánl 2k1ajk 2k1ajtóh ka2kadé ka2kadó kakas3s ka2kác 2k1akc ka1k2l ka2kó. ka1k2ré ka1kri 2k1akt. 2k1akti ka1k2va ka2lapa 2kalapítv 2k1alb kal1egy 2k1alf 2k1alj. 2k1alji 2k1alka 2kalko 2k1alle 2k1alti kama2te 2k1ambu kana2g ka2nalí 2k1a2nam k1a2nat ka2n1e2g ka2n1el 2kang ka2nim ka2nio ka2n1iv ka2nol ka2nód 2kante ka2nű 2k1a2nya. 2k1a2nyag 2k1a2nyai ka2nyáb ka2nyó ka2óa ka2óá ka2óc ka2óe ka2óg ka2óha ka2óí ka2óko ka2ókr ka2óp ka2óü ka2óz 2kapád ka2páto 2kapp ka1p2re ka1p2ré 2k1aprí ka1prof ka2r1a2d ka2rakk ka2r1a2kó kar1a2lap 2k1arank ka2r1a2r kara2s 2ka2rasz 2karat. 2karatn 2karato ka2rau ka2r1ácsh ka2r1ácsn ka2r1ácst ka2r1ál 2k1a2rány kar2c1el kar2dac kar2dál kar2dz ka2rel ka2rev kar1éke karé2kor ka2rél ka2r1éne karfe2l1 ka2rid ka2r1i2ko ka2r1ikr ka2rind ka2r1ing. kar1ingb kar1inge kar1ingg kar1ingr ka2r1isk ka2r1ism kari2z ka2r1izo 2k1a2roma. 2karomá ka2ror kars2 2k1arti ka2sag kaság1g ka2sál ka2sid kasi2p kas1ipa ka2siz ka2s1ol ka2s1ó2r ka1s2po kas3sze kas3szé 2k1asszi 2kasszony kas3sző kast2 ka1str ka2sür kasz1ajt 2kaszat ka2szág kat1ará ka2tél kat1iko kat1int ka2t1i2o 2k1atká ka2tolda katrádi2 ka1t2ri ka2tyá ka2ud 2k1a2ul kau2n kau2r kau2s kau2ta 2k1a2uto 2k1autó. 2kautób ka3utóc 2kautóé 2kautóh 2kautói 2k1autój 2k1autók 2kautóm 2kautón 2kautós 2kautót 2kautóv kaü2t kaü2z 2k1a2vat 2k1a2zon 1ká 2kábé 2k1ábr ká2cak ká2ce 2ká2c3h ká2có ká2c3sar ká2csat ká2cse ká2cs1ék ká2csip ká2csis ká2c3sor ká2csö ká2cső ká2cü ká2dab ká2dar ká2d1ác ká2dát ká2dil ká2dí ká2d1ö ká2d1ü2 ká2d3z ká2fá 2k1ág. ká2ga 2k1ága. 2kágacska ká3gacská 2k1ágai 2k1ágak 2k1ágat 2k1ágaz 2k1á2gá 2k1ágb 2k1á2ge k1á2gé 2k1ágg 2k1ágh 2k1á2gi 2k1ágk 2k1ágn 2k1á2go 2k1ágr 2k1ágs 2k1ágt 2k1á2gu 2k1á2gú 2k1á2gy 2k1á2hí ká2jö ká2jü ká2lág 2kálái 2kálák 2kálán 2káláv 2káláz 2k1álc k1áldo ká2l1e2 ká2lén 2kállamti 2k1állap 2k1állás kál2l1e2 kállé2 kál2lék 2k1állí 2k1állom ká2lü ká2lyod 2k1á2mí 2k1á2mu ká2n1ag ká2n1a2n ká2n1as ká2nem ká2n1is ká2n1ó2 ká2ny1ag ká2ny1a2l ká2ny1a2n ká2nyap ká2nyar ká2ny1á2to ká2ny1e2 ká2nyis ká2nyiv ká2nyö 2k1á2polá ká2poló 2ká2rad ká2r1a2g 2k1á2rakr ká2rakt kár1akta kár1aktá ká2r1a2l 2k1á2ram ká2r1a2p ká2rar ká2ras kár1ass 2k1á2rat ká2raz kár1azo kár1áll ká2r1á2z kár1d2 ká2r1e2 kár1éte 2k1á2riá k1árká kárkié2h ká2r1old ká2r1osz ká2rö ká2rő kárpszi2 kárpszic3 kár1s2 kárt2 kár1tr ká2ruh ká2rü kás1ajt kás1ass ká2s1á2go ká2s1á2rai ká2s1árak ká2s1á2rá ká2s1árb ká2s1á2ro ká2s1árr ká2s1árv ká2s1árz 2k1á2sásá 2kásást ká2s1e2 ká2s1i2k ká2sim ká2sis ká2sír káská2r ká2s1ol ká2s1ott ká2só ká2sö ká2ső kás1p kást2 kás1tr ká2sut ká2s1ü2 2k1á2száb ká2szár kás3zár. 2k1á2szát ká2sze ká2szé ká2szis ká2sziv 2k1á2szom ká2s3zü ká2tab 2k1átad ká2taj ká2tal kát1a2la ká2t1a2n ká2tar ká2tau ká2t1á2 2k1átbe ká2t1e2 ká2tég k1átfo ká2tip ká2t1ir ká2tis ká2tí k1átló 2k1átme ká2t1osz kátó2 ká2tór ká2t1ö ká2tü k1átvá kba2l1 kbé2rel kb2la kb2le kb2lo kb2rá kb2ri kb2ro kb2ró kci2ófa kci2ósi kci2óspe kc2lu kcsa2p1á2g kdi2al kd2ra kd2rá kd2re kd2ro kd2ró kd2ru 1ke kea2j kea2k kea2l kea2n kea2r kea2s keá2l keá2r keá2t1 2k1eb. ke2bei ke2bek ke2béd kecs1alj kecs1ón kecs1ó2r ke1d2ra keegyez1 kee2n ke2ep kee2s 2k1eff ke1fl ke1f2r 2k1e2gér kegész1 2kegyb ke2gyék ke2gy1in 2k1egyl 2kegyn ke2gyö 2kegyr 2kegys ke2gyu ke2gy1ú 2kegyü 2k1e2ke. 2k1e2kei 2k1e2kek 2k1e2kéé 2k1e2kék ke1k2l ke1k2ré kek2sza 2k1ekv 2k1elad ke2l1an ke2l1a2t 2k1elav ke2l1á2g 2k1e2lef ke2lekc 2k1e2lekt ke2l1e2l k1e2lemb 2keleme 2kelemé k1e2lemh 2kelemm 2k1e2lemn k1e2lemr 2k1e2lemz ke2l1e2pe. ke2l1e2pei kele2p1ü2 ke2l1e2sé ke2l1esze kele2t1el kele2t1o 2keley ke2l1é2k 2k1e2lél kel1érh kelés3s kelé2s3z 2k1elhel 2k1elho kel1id kel2ig 2k1e2lim ke2lio 2k1elism 2k1e2l1í2 2k1eljá k1ellá 2kellát 2kellená 2kellenő 2k1ellent 2k1elnev 2k1elny 2k1e2los 2ke2lö2l 2k1e2lőa kelőé2 2kelőfú ke2lőhí 2k1e2lőí 2k1e2lőképz 2k1e2lőkés 2k1e2lől ke2lőny 2k1e2lőo ke2lőté 2k1e2lőtt k1e2lőz k1elra 2k1elsa 2k1első 2k1elszá kel2t1é2rő. 2k1elto 2keltű 2kelül ke2lűr 2k1elv. 2k1elvá 2k1elvei 2k1elvek 2k1elven 2kelvi k1elvk 2k1elvo 2k1elvt 2k1elvű ke2lyemb ke2ly1ékn kelyköz1 2k1elz 2k1ember 2k1embl 2k1embr 2k1eml 2k1emul ke2nal 2k1enci kende2rül ken2d1ék 2k1endo 2k1e2ner 2k1enge ke2n1ip ke2nis ke2n1o kens3s kensz2 2k1enyv keo2l keo2r keó2d keó2h keó2l keó2r ke2pik ke2ral ke2rap ke2r1a2r ke2r1as ke2rau ke2r1ál ke2r1ár ke2rás ker2csá ker2csell kercsí2 ker2csír 2kerde 2kerdő 2k1e2rege 2k1e2rej kere2k1eg kerekes3s ker1ell ker1elv ke2r1ember ke2r1er kere2ta kere2t1e2l kere2t1ö ke2rég ke2r1é2l ke2r1ép ker1éte ke2r1id ker1iga ke2r1ill ke2rim ke2r1ind ke2r1int ke2r1inv ke2rio ker1ist ke2r1iz ker1k2 2kernel. ke2r1ol ke2ror ke2ród ke2r1ó2r ke2rőde ke2rőe ke2rőké ke2rőo ke2rősí ke2rőte kers2 ker1sp ker1st kersz2 ker2taj ker2táp ker2tás ker2t1ebbé ker2teg ker2t1este ker2t1esz ker2télv ker2t1é2vét ker2tön ker2töv ker2t1őr ker2t1ős ker1tró ke2rút kerü2g 2k1esemé ke2seté 2k1e2sett 2k1esél 2k1e2sés ke2sis 2kesítőst 2keskü 2k1e2ső ke1s2po kes3széke kes3szó ke1sta 2k1este 2k1esté 2k1esti 2k1estj 2k1estk 2k1estn ke1stra 2k1estre 2k1estt 2k1estün ke2szaj ke2szép 2keszmén ke2tál ke1tc ke2t1e2kéh 2k1e2teté ke2tid ke1t2ra ke1t2ré ke1t2ri kettes1s ke2tűd keu2r keu2s kevés3s ke2vid 2k1e2vő keze2tés kezőa2 kezőe2 kezőkész1 2k1ezr 1ké 2k1é2ber 2k1ébr ké2ge ké2gé ké2gő 2k1é2hem 2k1é2hen 2k1é2hes 2kéhezé 2kéhezt 2k1éhs ké2j1ak ké2j1elé ké2jö ké2jut 2k1é2ke. 2k1é2kei 2kékekk 2kékem ké2k1e2r kékes3s kéke2s3z ké2kén ké2k1o2 2k1é2kük 2k1é2kű ké2lel 2kéles 2k1é2letek 2k1é2letet 2k1élm ké2lőd 2k1é2lől 2k1élr 2k1é2lű ké2lya ké2ly1esz ké2lyid ké2ly1ü2l kéma2 ké2mad ké2m1al ké2m1an ké2map ké2m1as ké2m1á kémi2as ké2min ké2mis ké2mí ké2mo ké2mö ké2mő ké2m1u2 kéna2 ké2n1al ké2nan ké2n1ar ké2n1at kéndio2 2k1é2neke 2k1é2nekh 2k1é2neki 2k1é2nekk 2kénekl ké2n1e2l ké2n1em ké2n1er kén1éte ké2nig ké2nil ké2n1ing ké2no ké2ny1e2g ké2ny1elv ké2nyú ké2p1a2 ké2p1á képá2r ké2peg ké2p1e2lő ké2p1elté ké2p1elv képe2r ké2p1ill ké2pim ké2p1i2p ké2pí 2k1épít ké2p1o ké2pó ké2p1ö ké2pő kép1s ké2pu ké2pú ké2p1ü2lé ké2p1ü2lő kéra2 ké2rab ké2ral ké2ram ké2r1an ké2rar ké2r1as ké2rat ké2r1á2 2k1érdeke kér1dr 2k1é2retts ké2ro ké2rö 2kértelm 2kértékb 2k1értéke 2k1értékh 2k1értékn 2k1értékr 2k1értés kértő2iké ké2r1u2 ké2r1ú kérü2 kér1ülé 2k1érvek 2k1érzé késa2 ké2san ké2s1á2 ké2s1é2g ké2s1o ké2só kés3sza kés3szer kés3szél ké2su ké2süt ké2sza2 kész1al ké2sz1á2 ké2szeg késze2l ké2szeml ké2szesz ké2széd ké2sz1ékné ké2szin ké2szir ké2szo ké2sz1ó2 ké2szö ké2szőr készt2 ké2szu ké2sz1ú két1akar ké2takn ké2t1akó két1ala két1asp ké2tál ké2t1ed ké2t1eg ké2tel. ké2teln ké2t1e2m ké2t1ep 2ké2te2r két1ere két1erk két1erű ké2tesé ké2t1esté ké2t1esz ké2t1e2v ké2t1é2 ké2t1i2 ké2tí ké2tol ké2t1or kétó2 ké2t1ór ké2t1ö ké2tud ké2t1ü2 2kétv 2k1év. 2k1évad 2k1évb 2kévei 2k1é2vem 2k1é2ven 2kévet 2k1évf 2k1évh 2k1é2vi. ké2vig 2k1évin 2k1évk 2k1évn 2k1évr 2k1évs 2k1évt 2k1é2vü 2k1évv ké2z1a ké2z1á2 ké2zeg kéz1elt kéze2m kéz1eme ké2z1e2r ké2z1ism ké2zí ké2z1o ké2zö kézs2 ké2z3sé kéz3st ké2zsu ké2z1u2 kfe2l1em kfil2mér kfi2sar kf2jo kf2la kf2le kf2li kf2lo kf2ló kfolyói2k kfo2n1ó2 kf2ra kf2rá kf2re kf2ri kf2rí kf2ro kf2rö kf2ru kg2la kg2nó kg2ra k1g2ráf. kg2ri kg2rí kg2ru khá2t1al khelyköz1 1k2hia khiá2b k2hil kh2me 1ki kia2d ki2aé ki2af kia2g kia2j kia2kar kia2kas kia2lap kia2lá kia2n kia2p kia2ra kia2sz ki2aú kia2v kiá2z ki1b2l ki1b2r 2k1i2deá 2k1i2deg 2kidej 2k1i2dét 2kidéz 2kidi ki2dio 2kidőb 2kidők 2kidőm 2k1i2dőn 2kidőt ki1dró kie2l kie2m kie2r ki2eset. kie2t ki2ew kié2d kié2k 2k1ifj ki1f2r 2kiga ki2ga. 2kigá ki2gát 2kige ki2gén ki2géz ki1g2r ki1k2l ki2konn ki2kono ki1k2ré ki1k2ri ki1k2v 2k1ille 2kily ki2lye 2k1i2ma. 2k1i2mai ki2mak ki2máb 2kimád ki2mái ki2máj ki2mák 2k1i2mám ki2mán 2kimár ki2mát ki2máv ki2mit 2k1imp 2k1i2na. 2k1i2nai 2k1i2náb 2k1i2nár kin2csa kin2csá kin2csel kin2cso 2kind 2k1inf kin2gas 2k1inj 2k1integ kio2l kio2m 2k1i2onn 2k1i2ono 2kiont. ki3óh 2k1i2ón. 2kipar ki1pf ki1p2la ki1ple ki1p2r 2k1ips 2k1i2rat 2kiránn 2kirány 2kirg 2k1irh 2k1irk 2k1i2rod 2kirom 2k1irr 2k1irt ki2sad ki2s1ajtó ki2s1akn ki2sal ki2sap ki2sas ki2sál ki2s1e2c ki2s1elő ki2s1emb ki2s1es ki2s1é2k ki2si. ki2s1in kis1ipa ki2s1i2ra ki2s1isk ki1skál 2kism ki1smár ki1s2min kis2nyá kis1oko ki2s1oros ki2sör ki2ső kisp2 kis1pl ki1s2por ki1s2pó kis3sz kist2 ki1s2tar ki1steri ki1stí ki1stop ki1str ki1stu ki1t2r kit2t1er kit2t1ö kiu2s kiu2t kiú2s kiú2t kivíz1 2k1i2vó 1kí 2k1í2gé k1így. kí2ja kí2nal kí2n1árb kí2n1e kí2nél kí2n1ó2 kí2rá 2k1í2re 2k1í2ró 2kítm kítőa2 kítőe2 2k1ív. 2k1ívb 2k1í2ve 2k1í2vé 2k1í2vű kí2zé kí2zü kí2zű kk1abl k2k1a2da kk1ajt k2k1a2kad k2k1akk k2kalá k2k1alj k2k1alm kka2ró2ra k2k1a2u k2k1azo k2k1áll kk1árf kká2rok k2k1á2ru kká2s k2k1ásá k2k1áth k2k1átl kk1átu k2k1átv kk1á2zó kk1br kke2c kk1ecse kk1e2dz kk1e2gé kke2l1e2g k2k1e2lem k2k1ellő kke2lőá kk1emu kke2ra kk1erd kke2ró k2k1e2rő kk1e2ti kk1e2vé k2k1ég k2k1é2l k2k1épí k2k1érté k2k1érz kk1fr kk1gr kkiá2 kk1i2do kkie2 kk1i2ga k2k1igé k2kill kk1ind k2k1ing k2k1ink k2k1int kk1i2par k2k1i2ro kk1isko kk1ism k2k1í2r k2k1íz k1k2lí kk2ló. k1k2lu kko2laj kk1olló k2k1o2pe kkor2dá k2k1org kko2r1os kko2r1út k2k1orz k2k1oszl kkó1p2 kk1ó2rá kkö2l kk1ölő k2k1önt kk1ötl kk1ő2ri kk1ő2rö kk1őrs kk1őrü kk1pr kk2ris kk2rit kk2rí kk1sm kk1sp kk1st kk1t2r kk1udv kk1urt k2k1utá k2k1új k2k1üg kk1ü2lő k2k1ü2t k2k1ü2v kk1üzl kk1űr kk2vó kla1g kla3ko kla1kri kla2p1áta kla1pla kla1s2k kla2uzá kláma2 klá2mal klá2m1an klá2mas klá2m1á2 klámár1a2d klá2m1e2g klá2m1eh klá2mel klá2mer klá2m1ér. klá2m1érté klá2m1i2k klá2min klá2mis klá2mol kleí2 kle2t1a2n kle2tál kle2t1elv kle2t1e2r kle2t1e2v kle2t1ér. kle2t1étbe kle2t1é2té kle2t1é2ve. kle2tin k2lini klió2 kli2pel k2lisé kli2só 1k2lím k2loá k2lopf k2loty kló2rad kló2raj kló2ran kló2rat kló2ris kló2rol k2lub klu2b1a klu2bá klu2b1e klu2bir klu2bol klu2se klus3s klu2s3z kma1b kmai2ko kmas2 kmá2nyan knag2 knak2 kna1kr kni2a2 knika2 kni2k1al kni2k1as kni1sz2 knőc1c kn2ő3r 1ko ko2áz ko2be 2k1obs ko2cho 2k1o2dav 2k1o2dú kogás1s ko1g2ra ko2kád 2koke2 ko2k1er 2k1o2k1ir 2k1o2kí 2k1okl 2k1okm 2k1o2kol ko2k1o2v 2k1o2koz kok2sze 2k1okta kol1ajt kol1áro 2k1oldal 2k1oldá 2k1oldó ko2lid ko2l1igá ko2limp ko2l1i2na. ko2lita kol2l1ad kol2lál kol2lel kol2les kol2l1ét ko2lö 2k1oltár 2kolvas 2k1ombu ko2mil kom2p1ér. kom2p1ol ko2n1a2d ko2naj ko2n1a2l ko2n1a2n ko2n1ar ko2n1as ko2n1au ko2n1ál 2konbá 2konbet konc1c koncé2 kon2ch kon2csá kon2c3sor. kon2c3soro ko2n1e 2konén ko2n1ér. 2kongu 2konhab ko2nir 2konog ko2n1ol 2konola ko2nor 2konosn 2konosr 2konost 2konpa 2konpr 2konrét 2kontö ko2nü ko2nyag ko2nyal ko2nye ko2nyó konz2 2konzs ko2ón kopá2sé 2kopc ko1pro 2kopti ko2r1a2d ko2rag ko2r1aj ko2r1a2n kor1ass ko2r1aszt ko2r1átl 2k1orch kor2csal kor2dad kor2d1ag kor2d1a2s kor2dác kord1d kor2d1e2l kor2dem kor2des k1ordít kor2d1ö kor2d3z ko2r1e2c ko2reg ko2r1el ko2r1er ko2r1es kor1f2 korgás1s 2korie kor1ill ko2r1ing ko2r1inte kor1isk ko2r1i2zom ko2rosz ko2r1o2v ko2r1ói ko2rón ko2rö ko2rő 2k1orr. 2korrk 2k1orrt kor1s2 kor1t2r ko2r1úto ko2rü ko2s1as ko2sál ko2se kos3sze kos3szo kos3szü 2k1ostr ko2sü ko2szal ko2szer ko2szir ko2szí k2oszo ko2szó 2kosztá kotókész1 kotó1st ko2ut 2kovaria ko2vié ko2xi koza2tal kozókész1 kozóköz1 2kozóö 1kó kóa2d kó1bl kóc3c kó2cem kó2ch kó2d1ab kó2dak kó2d1a2l kó2d1a2n kó2daz kód1d kó2d1e2l kó2dem kó2d1e2r kó2d1es kó2d1és kó2din kó2dö kó2dü kó2dzá kóé2r kó1f2r kói2g kóí2v kó1kré kó1kv 2k1ó2né. kó2nét 2k1ó2ni. 2k1ó2no kó2pan kó2p1as kó2p1e2l kó2pir kópó2 kó2p1ór kó2pü 2k1ó2raa kó2r1a2c 2k1ó2rai kó2r1a2n kó2ras kó2ráb kó2rád kó2rág kó2rái k1ó2ráj kó2rám kó2rán kó2rár kó2rát kó2ráv kó2rel kóre2s kó2réj kó2r1éve kó2r1ir kó2r1ok kóro2ka kóro2ko kór1osto 2kóród kó2r1ódá kó2rő 2k1ó2ságú kó1slá kó2s1os kó1s2pe kó1spi kó1s2po kó1str kó2s1ü2 kó2s3zára 2k1ó2vó kó2z1a2m 1kö kö2ba köb1öll köb1öln köb1ölr köb1ölt kö2da kö2dá kö2del kö2der kö2dev kö2do kö2dó kö2du kö2dú kö2dz 2k1ö2ko 2k1ökrö köl2csal köl2csá köl2csel köl2cs1ő2 2k1ölel köles3s 2k1ö2léssz kö2lí kö2lőe költa2 köl2tal köl2t1e2v 2k1öng k1önté k1öntő k1öntv köny2v1a köny2vá kö2ra kö2rá k1ördö kö2red kö2r1e2g kö2rék kö2r1étt kör1f2 kö2rik kö2r1iz kö2ro kö2ró kö2r1ö2l kö2r1ő2 kör1p2 kör1s2 kört2 kör1tr kö2ru kö2rú körü2l1et körü2lé kö2r1ülés körü2lő kö2r1ülő. 2körv. 2körvb 2körvh 2körvn 2k1örvö 2körvr 2körvt 2körvü 2körvű 2körvv k1öszt 2kötlé k1ötvö 2k1öv. 2k1övb 2k1övh 2k1ö2vig 2k1övr 2k1övv kö2za kö2zá kö2zen kö2z1é2k kö2z1í kö2zo kö2zó közőe2 kö2z3s kö2zu kö2zú kö2z1ü2lé kö2z1ü2lő 1kő kőa2n kő1bl kő2ch kő1dra kőe2k kőe2l kőe2r kőé2l kőé2ne kő1f2r kő1gn kő1gr kői2t kő1kr kő1pl kő1pr kőr1an k1ő2rei kőre2s kőr1esz k1ő2ri. kő2ril kő2rip kő2riv k1őrl kőr1s2 kő2rül 2k1őrz kő1s2k kő2sö kő1s2t kő1tr kőu2t kpára2 kpá2rad kpá2r1at kpá2r1ál kpá2r1út kp2la kp2le kp2lé kp2lu kpó2t kp2ra kp2re kp2ré kp2ri kp2rí kp2ro kp2ró kp2sz k2rach kra2chi 1k2rajc k2rakk kra1p krá2sz1e kren2d1ő2 k2reo k2repá 1k2rémh 1k2réml 1k2rémr kré3p2 1k2rist 1k2riti kro1g2 1krokett. 1krokod kro2n1a2 kro2ná kron1d2 kro2n1e kro1p2 kro1str kro1sz2f kró2mar kró2m1e kró2mis k2rómo 1k2rónik k2rup k2s1a2rá ks1elo ksé2gele ksé2gis kségü2l ksé2g1ülé k1s2ká ks2ko k1s2la ks2lá ks2lu ks2mi k1s2ni ks2pa ks2pe ks2pi ks2po ks2pó ksp2r ks2rá k1s2ta k1s2tá ks2ti k1s2tí ks2to k1st2r k1s2tu k1s2tú k2sz1a2d kszae2 k2szagy k2sz1aj ksza2ke ksza2ké ksza2k1ü k2sz1am ksz1any ksz1aré k2sz1ág kszáraz1 k2sz1e2gy k2sz1ela k2szemu k2sz1eng k2szev ksz1élet kszé2t1 k2sz1id kszilá2 kszi2p ksz1ipa ksz1isk k2szír k2sz1old k2szoltó k2sz1osz kszö2g1ell kszö2g1elv kszt2 k2szuni k2szut k2sz1üg k2szüt k2sz1ü2z ksz1z kt1a2da kt1ajá kt1a2lap k2t1alb k2t1all kta2n1á2s kta2n1ó2 kta1p2 k2t1arm kt1a2ud kt1azo kt1ábr ktá2lal kt1álló k2t1álm ktára2d ktá2r1ada ktár1adó ktá2raj ktá2r1az k2t1átf k2t1átv k2t1e2g k2t1elg k2t1elh kt1eljá k2t1ell k2t1els k2t1elv k2t1enz kte2rad kte2ral kte2rár kte2rát kte2reg kte2r1e2l kte2r1in kte2rosz k2t1esem kté2lő k2t1érl k2térmi k2t1érte k2t1éss k2t1é2vet kt1fr kt1gr k2t1id kti2g k2t1igé kt1ill kti2m kt1ima k2t1ind k2t1inf k2t1i2r k2t1isk k2t1ism k2t1i2vás k2t1íg k2t1í2r ktív1e2l kto1g2ra kto2n1á kt1ope kto2ras kto2r1e kto2rol k2t1ös k2t1öt kt1pr k1t2ran k1trau k1tréf k1t2rén k1t2rió ktro2ná k1t2rón kt1sp kt1st kt1sz kt1t2r ktu2m1e ktu2min ktu2sab ktu2s1an ktu2szár ktu2sze ktu2szé ktü2l k2t1ülé k2t1üt k2t1ü2v 1ku kuá2r 2k1ucc kue2l kue2r kue2s ku1f2r 2k1u2go 2k1ugr ku2gya 2k1ujj. 2kujja. 2kujjad kuj2j1a2da 2kujjai 2kujjak 2k1ujjal 2kujjam 2kujjas 2kujjat 2k1ujjá 2kujjb 2kujjg 2kujjh 2kujji 2kujjk 2kujjn 2k1ujjo 2kujjp 2kujjr 2kujjs 2kujjt 2kujju 2kujjú kuk2k1ó2 kula1k kul2csal kul2cse kulus1s ku2m1a2d ku2mal ku2mü ku2nad ku2nal ku2n1ás ku2ne ku2n1in kun3n ku2nor ku2n1ó2 ku2nü 2k1up. 2kupr 2kupu ku2rad 2k1u2rai ku2rak 2kural ku2ram ku2ráu 2k1urn ku2rol kuru2c3s ku2sal ku2sas ku2sál ku2s1e2 ku2sis ku2s1i2z ku2s1ó2 ku2sö kus3sze ku2s1ú ku2sü ku2szal ku2szar kusz1es ku2sz1é2l ku2sz1é2p ku2szét ku2sz1il ku2szis ku2szü 2kutaló 2k1u2tasí 2k1u2taz ku2tál 2k1u2tán 2k1utc 2k1u2tol 2k1u2tód ku2tóp ku2zs 1kú kú2jí 2k1újs kú2p1a2 kú2p1á kú2p1e kú2t1a2 kú2t1á2 kú2t1e kútfé2 kútfél1 kú2tos kú2t1ő 2kú2tu kú2t1ü2 1kü kü2ge kü2gy 2k1ü2lep kü2lo kül2t1á 2küreg 2k1ü2rí kü2rü 2k1üst kü2szá kü2szí 2k1ütk küvés3s 2k1ü2vö 2k1ü2ze 1kű 2k1űrh 2k1űrm kű2ro kű2r1ős kű2zé kű2ző 1k2van k2varc 1k2vark kvá2nyol kvárosi2 kvé2sel kvé2so kvés3s 1k2vin 1k2vitt k2vóc k2vóta k2vótá kvőcsa2 1ky kyd2n ky2fajtán ky2fajtár ky2fajtát ky1i2s ky1i2v kyk2k kyk2ne ky2se ky2s1ü2 ky1üz kza2tal kza2t1e2 kza2t1ó2 2l. 1la laa2d laát1 laáta2 2labár 3labd 2labr 2l1abs la2c1ag la2c1aj la2c1al la2cem la2c1ete la2c3ha la2ché lac1ita lac2k1orr lac1orr la2c1ö2 la2cő la2csalj lac3ság la2c3sor lac3sül lac3süt lac3sz la2cú la2cü 2l1a2data 2l1a2datb 2l1a2datk 2l1a2datn 2l1a2dato 2l1a2datr 2l1a2datt 2l1a2datu ladás1s 2l1adl 2l1a2dog 2ladomá 3l2a3don ladói2ko 2l1a2duk la1dy2 lae2d lae2l lae2r laé2d laé2r 2laff la1fl la2gac lag1a2dó la2g1a2n lag1ass la2g1a2t la2gau la2gav la2gág lag1áll lag1ár. lag1árá lag1árb lag1áre lag1á2ré lag1árf lag1árh lag1árk lag1árm lag1árn lag1á2ro lag1árr lag1árs lag1árt la2g1ere la2gés la2gid la2g1i2k la2gim la2gis la2gí la2g1ont la2g1osz la2góc la2g1ó2rá la2góvá la2gön la2g1ud la2g1ur la2g1ut la2g1ü la2gű la2gyú la2ire la2jag la2j1a2l la2jap la2j1ar laj1ass laj1a2sz la2j1az la2j1ál 2lajánl la2j1ár. la2j1árh la2j1árn la2j1árs la2j1árt la2jás la2j1áth la2j1áts la2j1elt la2jen la2j1es laji2 la2jin la2j1is la2jí la2j1ol la2j1oml la2j1or 2lajoz la2j1ór la2j1ös la2jő l2ajs laj1sz la2j1u2t la2j1ü2 la2kad lak1alj la2k1alm la2k1a2lo laka2t1a2n la2k1ác la2k1álk lak1áll la2k1árn lak1ásás 2lakci la2k1eg la2k1e2l la2k1ér. la2kérte la2k1iko la2k1ír lak2k1as lak2kec lak2kel lak2kol 2l1akkor lak2köl la1klu 2laknáb 2laknáh 2laknás la2kob la2k1op la2k1orm la2k1osz la2k1ov 2lakóz la2k1ös la1k2rém lak2rip la1k2ru lakt2 2l1akt. 2l1aktiv la2kuj 2lakulá 2lakulg 2lakulh 2lakulj 2lakuln 2lakulo 2lakuló 2lakuls 2lakulu 2lakulv 2lakús la2k1ú2to 2lakúv 2lakza la2la2g1 la2laku 2laláí lalás1s 2l1alb 2l1alc 2l1alf 2laljn 2l1alka 2l1alkot 2l1alku 2l1alle lal2tár lal2te 2l1alti. 2laltonk lal2t1ó2 lal2t1ü2 2laltvé 2l1alvi lam1ada la2m1aka la2m1any la2m1a2p la2m1ará la2m1a2z lame2g la2m1egy la2m1ele lam1emb la2m1esz la2mék lam1éle la2méne la2m1érv la2minv la2m1ism la2m1ist la2m1í2 2l1ammó la2m1ol lam1org la2m1osz la2m1ó2r la2mö la2m1ur la2m1ü la2n1a2d lana2g la2n1aj la2nal lan1ala la2nam la2nar la2n1áll la2n1ár. la2n1á2rai la2n1á2rak la2n1á2rá la2n1árr la2n1árv lanás1s lan2csel lan2csem lan2csi lan2csol lan2d1ál lan2d1el lan2d1ér. lan2diz la2ner la2nes la2n1ép lan2g1as lan2gen lang3g 2l1angin la2nil la2nip la2nis 2l1ankét lan1kr la2n1osz lans2 lan2tag 2lantác la2nü la2nyag lany1a2la la2nyau 2lanyái la2ny1ál 2lanyán la2nyás 2lanyáv la2ny1e2lem lany1e2rő la2ny1í2r la2ny1ol la2nyó la2nyü laó2r 2l1a2pa. lap1akk lap1akt lap1a2la lap1alk la2p1atm la2p1att la2p1a2u la2paz la2páb la2p1á2g la2pák la2pán lap1á2rá lap1árh la2p1árr la2pe2l lap1ele la2pem la2p1en la2p1es la2pik lap1illa lap1ille la2p1im la2p1i2na. la2p1ing la2p1int la2p1i2p la2p1i2s la2p1ita la2p1iz lap2lat la2p1o2ku lap1org lap1orn lap1orz lapos1s la2pó. la2pób la2pón la2pór la2pö la2pő 2lappar 2laprí lap1s2 2lapún 2lapúv la2pű la2ra. la2ran 2l1arc larc3c 2l1a2rén lar2m1e lar2min 2l1art 2l1arz la1s2pa la1s2pi la1stra la2sz1abl lasz1alt. la2szas 2l1a2szat la2szás la2sz1én la2szód lasz3s lasz2t1alj l1asztam la2sz1út la2t1a2d la2t1aj lat1alak la2t1alk la2t1alt lat1ará la2t1a2ro lat1arti lat1aszt lat1att la2tau la2taz la2t1áj lat1áll la2t1árad la2t1á2rai la2t1á2rak la2t1á2ram la2t1á2rat la2t1á2ráb la2t1á2ráh la2t1á2rán la2t1á2ré la2t1árh la2t1árn la2t1á2rok la2t1árr lat1ártá la2t1ártó la2t1á2rú la2t1árv lat1ász la2t1áta latdi2al la2t1e2g la2telem la2t1ell la2tep la2t1erk late2s la2t1ess la2tesze la2t1eti la2t1eto la2t1e2vő la2t1éke lat1é2ké lat1ékk la2t1é2ré la2t1é2rő la2térte la2t1érv lat1éss la2t1i2ko lat1ikra lat1inte la2t1inv la2t1ist la2t1iz la2t1ír lat1ívé lat1k2 la2toj la2t1okm lat1olda la2toll lat1oml la2t1osz la2t1otth la2t1órá la2t1óri la2t1övi la2t1ö2vö la2t1őr 2l1attako latta2n1ó2 2lattv la2tut la2tül lat1üze latű2z la2t1űző la2tyá la2ub la2uk la2us la2uto laü2z la2vat 2l1a2vu la1yé la1yig 2layrő lazac1c laza2c3s lazma1 2lazmá 2l1a2zon 1lá lá2bar lábas1s lá2bál lá2b1e2l lá2b1ina lá2b1i2z láb1org láb1orr lá2bö lá2bő 2lábrá lá2b1u2s lá2bü lácsé2 lá2csét lá2cs1il lá2csip lá2csí láda1s lá2d1az lá2d1e2r lá2det lá2dim lá2d1or lá2d1ott lá2d1ó lá2dül lá2dz lá2gab lá2gac lág1a2da lá2g1a2g lá2g1al lá2gan lá2gas lág1ass lága2t lá2g1atl lá2g1ato lá2g1att lá2gál lág1áll lá2gám lá2g1á2rak lá2g1á2ro lá2g1á2to lá2gép lá2gid lá2gigé lá2gim lá2g1ott lá2g1ó2 lá2gő lág1s lá2gü lá2gű 2lágyá 2lágyo lá2has 2láhe láí2r lá2lad lá2l1aka lá2l1al lála2n lá2l1any lá2l1ar lá2lau lá2l1ág lá2l1á2l lálás1s lá2l1átj 2láldás 2láldoz lá2lel lá2l1est lá2l1e2v lá2lél lá2lim lá2l1is lá2lí 2l1állam 2l1állat 2l1állás 2l1állk 2l1állom 2l1állv 2lálmaim 2lálmok. 2lálmom 2l1álmos 2lálmuk 2lálmunkb 2lálokaih 2lálokain 2lálokair 2lálokán 2lálokát 2lálokáu lá2l1o2ko 2lálokonk 2láloku lál1órá lálö2 lá2l1öv 2l1álut lá2l1út lá2lü lá2lű lá2m1a2d lá2m1aj lám1ass lá2m1au lá2m1ál lá2m1á2z lám1b2 lám1ell lám1erő lá2mes lá2mék lá2m1érv lá2m1int lám1ist lá2mí lá2m1or lá2mó lá2mö lá2mő lá2m1út. lá2mü lá2mű lána2 lá2n1ag lá2nal lá2n1an lá2nar lá2n1as láná2 lá2nár lánc3c lán2cel lán2c1ég lán2csá lá2nem lá2n1er lá2nép lán2g1at lán2gál lán2g1e lá2nil lá2n1is lán2k1e2l lán2k1ó2ra lán2k1ö2v lá3nok lá2nol lán1sp lán1sz lánt2 lán1tr lá2nü lá2nyaj lá2nyala lá2nyam lánya2n lá2nyar lá2ny1as lá2nyav lá2nyel lá2ny1ér. lá2nyó lá2nyö lá2pét lápi2 2l1á2pol lá2rad 2l1á2rai lá2raka l1á2rakb l1á2rakk l1á2rakr lá2r1a2l 2l1á2ram 2l1á2rat lá2r1av l1á2raz 2láren lá2res l1árkot 2l1árnya lár1s2 lárt2 lár1tr 2láru. lá2rug 2l1á2ruh 2l1á2ruk 2l1á2rul 2lárus 2l1árut 2láruv lá2rúa lá2rü lá2s1a2d lá2s1aj lá2sal lá2s1a2r lá2saz lá2s1á2g lá2s1á2rai lá2s1árak lá2s1á2rá lá2s1árb lá2s1á2ré lá2s1árh lá2s1árr lá2s1árt 2l1á2sás lá2s1á2to lá2se lásegyez1 lá2sír lá2sott lás1otth lásó2 2l1á2só. lás1ór lá2ső lás3szé lá2sut lá2sű lá2szas lás3zav 2lászed lá2szeg lá2sz1e2m lá2szen lá2szip lászkész1 lászö2 lá2szöl lá2szöv lász3s lá2szü lá2taj lá2t1e2re láté2tel 2l1áthe lá2t1i2o 2l1á2tí 2látkö lá2t1osz lá1t2rá lá1tri 2l1átte 2l1áttö 2l1áttű l1átús 2l1átvé l1átvi 2lávi lá2viz 2l1á2vó 2lávu lá2z1adot lá2z1al lá2z1árh láz2árus 3lázb lá2z1el lá2z1i2s lázo2 lá2z1olt lá2zsal lá2zsan lá2zsó láz3sz l2b1is lb2li lb2lo lb2lú lb2ra lb2re lb2ri lb2ro lb2ró lb2ru lc1ajt lc1alk l2c1a2to l2c1ág l2c1ál lc3csi lc3cso lc3csö l2c1e2le lc1elr l2c1emb lc1emel lc1esz l2c1e2v lce2z l2c1eze l2c1ép lc1évi lc1fr lc3ha lc3há lc3ho lc3hu lc3hú lc3hü l2c1i2d lci2tér lc1ív lc1k2r l1c2lu l2c1ost l2c1osz lc1ó2r lc1ök lc1ös lc1pr l2cs1a2d l2csakt lcs1alap l2cs1a2n lcsa2p1á2g lcs1apr lcsa2r lcs1ara lcs1aro l2cs1a2s l2csaz lcs1ág l2cs1ál l2cs1á2t1a2 l2csátá l2cs1áth l2cs1átj l2csátv l2csec l2cs1e2g l2c3sej lcs1elf l2cs1elt l2cs1elv lcs1emb lcs1eml l2cserd lcse2r1e2l lcs1erő lcs1ese lcse2t l2cs1ete l2csél l2cs1é2rés l2csérle l2csérte l2cs1érté lcs1érve l2cs1érvé lcsé2sz1ék l2cs1é2te l2cs1étk l2cs1é2vét l2csidé l2csimi l2cs1inf l2cs1ing l2cs1int l2cs1i2pa l2cs1irt l2cs1isk l2cs1ism l2csita l2cs1í2z lcs1k2 l2cs1okm lcs1ors l2cs1ö2l lcs1ő2sé lcs1s lc3str lc3sug lcs1ült lc3szo lc3szó lc1tr l2c1uj lc1ül lc1üt lc3zá lc3zo ld1abl ld1abr l2d1a2cé ld1a2dato l2d1a2dá ldai2 lda2lag lda2laj lda2l1e2g lda2lel lda2les lda2l1é2l lda2liz lda2l1í2 lda2los ldalt2 l2d1ant lda2nya lda2nyá ld1apó l2d1aran l2d1arc l2d1ark lda2t1as lda2t1eg lda2t1in lda2tós ld1ág ld1áll ld1álm ld1árn ldás3s ld1br ld1egy l2d1e2kék l2d1e2kén l2d1e2kétő l2d1e2l1a l2d1e2leme l2d1e2lemi l2d1e2lemn l2d1elér l2d1elk l2d1ellá l2d1elo l2d1e2lőh l2d1e2lővez l2d1els l2d1eltá l2d1elvé l2d1ember l2d1e2mel l2d1eml lde1p2 ld1epe l2d1erő ld1e2vé l2d1ex l2d1é2g l2d1é2jér ld1élm l2d1ép l2d1érc l2d1éré l2d1é2ri l2d1érte l2d1érz l2d1ész ldé2ves ld1fl ld1fr ld1gl ld1gr l2d1i2ga l2d1igé l2d1ill l2d1imi ld1ind l2d1int ldi2p ld1ipa l2d1isza l2d1ín l2d1ír l2d1íz ld1kr ld1kv ldo2g1as l2d1ola l2d1old l2d1olt ld1oml ld1orc ld1org l2d1osz l2d1ó2rá l2d1óri l2d1öb ld1ökle l2d1örök l2d1öv ld1őri ld1ősk ld1pl ld1pr ld2rót ld1sp ld1st ld1udv ldu2r ld1ura ldus3s l2d1u2t l2d1új l2d1úr l2d1ú2t l2d1üg l2d1üle l2d1ür l2d1üz l2d1űr ld3zá ld3zó ld3zu 1le lea2bá lea2d lea2g lea2k lea2l lea2n lea2p le2aré lea2sz lea2v leá2j leá2s leá2z 2l1e2béd le2bin le1bla le1bra leb2rek leb2s 2lecc 2l1e2cet 2l1ecset l1eddi le1d2res le1dro lee2s leé2r lefona2 lefo2nal le1fr 2l1eft le2gala lega2r le2g1a2s le2g1áll le3g2áto le3g2áz le3geb le2g1e2g le3g2elem. leg1ell le3g2előa le3g2előj le3g2előké le3g2előt le3gelőze le3g2elve. le3g2elvé le2gene le3g2erj le3ges. le3geseb le3gesek le3gesen. le3g2esn le3gesr le3gest le2g1e2sz legé2d legé2l le3gén legg2 le2gid le2g1is legmeg1 le3g2on le2góv le3göng le2g1ös legpec1 legvíz1 legyá2 2legyb 2legyed l1e2gyel legy1e2lőr l1e2gyenge l1e2gyék le3gyi 2legyí 2l1egyl le3gyo 2legys l1egysé le3gyú le3gyű 2l1egyv le2ic lei2g lei2rá lei2s lej2ta lej2t1á le2kad le2k1a2pu. le2k1ál leká2p le2k1ár. le2k1ára le2k1árb 2l1e2ke. le2k1eg lek1els lek1emb lek1eme lek1erj lek1e2rő le2k1értő 2l1e2kés. le2k1id le2kij le2k1ik lek1ist le2kiz lekkész1 le1kli lek1olt le2k1orz le2k1ó2r le2k1ő2 2lektro 2lektró le2k1út le2küd 2l1elad l1eldo 2l1e2lekt lele2ma 2lelemei 2le2lemek 2l1e2lemes 2lelemz lele2t1a2 lele2tel lele2to 2lelég 2l1e2l1ér lelés1s lelé2s3z 2l1elgo 2l1elha 2l1elhá 2l1elhel l1elho le2lim lel1ing le2l1iz 2l1eljá 2l1ellá 2l1ellé 2l1ellő 2l1elméj 2l1elmés 2l1elnev 2l1elnö 2l1elny 2l1e2los 2l1e2l1ö2l 2l1e2lőél 2l1e2lőfo le2lőí le2lőszű l1elso l1elsö 2l1elszá 2l1elta l1eltáv 2l1eltér 2l1elto l1eltö 2l1elv. 2l1elvá 2l1elvét 2l1elvh l1elvn 2l1elvs 2l1elz 2l1e2mel. 2l1e2meld l1emeled l1emelek 2le2melé l1emelés 2l1e2melg le2melh l1emelhe 2l1e2meli 2l1e2melj l1emellek 2l1e2meln le2melő 2l1emelő. 2lemelős le2mels le2melt l1emelt. l1emelté l1emeltü 2l1e2melü le2melv l1emelve lem1erk le2m1essz lem1eszt le2m1e2ti le2m1ék le2m1éle lem1élte le2m1élv lem1érde 2l1e2méss le2m1ill le2mind le2m1ing le2m1isz le2mita le2m1itt l1emlege le2mok le2mol le2m1org le2m1osz le2m1ó2r le2möl le2m1ő2 lem1p2 lem1u2r le2n1a2d le2nal le2n1ál le2nát lenc1c len2cel len2ceme l2end le2n1e2g le2n1e2l le2ner lene2tel lené2k le2n1éke le2n1ékk le2n1ékt lené2l len1élé lenés3s le2n1ész le2n1év. len2g1e2l le2nid le2n1ip le2n1o2k le2nol le2n1or le2n1óv len1őré len1s2p len1sta len1tra len1t2ren lenu2 le2n1ur le2n1ut le2n1üg le2n1üt 2l1enyv le2oa le2oc leo2k le2oli leo2m le2oz leó2c leö2r le2p1aj lepa2p lep1apa lep1álla le2p1eg lepe2le le2pék le2pél lep1illé lep1iz le1p2lo le2p1osz le2p1ó2d lep2p1elv le1p2rése le1p2ri le1pro le1pró le2p1ü2lőh 2lerdő 2leredm le2rejé le2r1ék ler1éte le2r1il le2rir 2leróz 2l1e2rő le2s1al le2s1ál l1esdé 2lesege le2s1e2kéh 2l1esemé l1e2setb 2l1e2setei lese2tel 2l1e2seté l1e2seth l1e2seti l1e2setk l1e2setn lese2t1o2 l1e2setr le2sésű le1s2ka le1ski 2leskü le1sla le1s2li le1sma le1s2mi le1s2p2 les3sza les3szá le1s2tar le1stemp 2l1esten l1estébe 2lesti. le1s2til 2l1estj les2t1or 2lestr l1estt 2l1eszkö le1szto le2t1ab le2tac let1a2la let1all le2t1am le2t1ana let1apr le2t1e2kéb le2t1e2la le2t1elb let1eleg le2t1elf let1elk let1előa le2t1e2lőké let1elr let1emel le2t1eml le2tene le2t1ent let1ered le2t1eré le2t1erk le2testé let1eszk 2l1e2teté 2l1e2teth 2l1e2tetj 2l1e2tetv le2t1éd le2t1é2j leté2l let1éle let1élé let1élv le2t1é2nekn le2t1érb le2t1é2ren le2t1é2ri le2t1érr le2t1értő let1é2rül leté2sz let1éter let1é2té. leté2vede let1éves le2t1é2véb le2t1évéi le2t1é2vér le2t1é2vét le2t1é2vév le2tid let1ikr let1ill le2tim le2t1ing le2t1ist leti2sz let1iszo le2tivá le2tod le2t1o2k le2t1on let1ora le2t1ox le2t1ö2v letőe3d le2t1őri le1traf let2teg letü2l le2t1ülé let1üzé 2lety leu2g le2uk leu2r leu2t 2levene 2levení 2levenü l1e2vez. l1e2vezg l1e2vezh l1e2vezn l1e2vezt le2vezü l1e2vezv levél1l le2volú le2xá le2x1el le2x1e2p lexkész1 le2xö le1yé le2zer lezőa2 lezőe2r lezőé2n lező1s2p 2l1ezr 1lé 2l1ébr lé2ca lé2cá léc3c lé2c1ék lé2c3h léci2 lé2cim lé2co lécs2 léc3sk lé2d1as lé2d1el lé2d1emb lé2dél lé2d1és lé2dil lé2dos lé2dot lé2dö lé2d1ő2 lée2r léé2r lé1f2r lé2gal lé2g1e2c 2léged lé2g1eg lég1ell lég1els lé2g1em lé2g1e2r lég1ér. 2l1é2gés l1éghet lé2gil 2légí lé2g1ö 2lé2gő lé1g2ráf l1égtem l1égtet l1égtél lé2gú 2légü l1é2gün lé2gyel lé2gyes lé2gyi lé2gyo lé2gyö 3légz léh1asz 2l1é2he. lé2hed lé2h1em 2léhes 2léhet 2léhező lé2h1é lé2hol 2léhs 2l1éj. 2l1é2ji 2l1éjj 2l1éjs lé2kab lé2k1a2d lé2k1a2g lé2k1aj lék1aka lé2k1a2la léka2p lé2k1apo lé2k1as léka2t lék1ato lé2k1au lé2k1av lé2kaz lé2k1e2g lé2k1ep lé2kesí lé2k1e2sz lék1evé lé2k1é2k léké2l lé2k1éle lé2k1élv lé2k1é2te lé2kid lé2kít lékköz1 lék1ors lé2k1osz lé2k1öl lé2kör lé2köz lé2kő lé2k1u2r lékü2l lé2k1ülé lé2k1ült lékve2g l1élc 2l1é2le. 2l1é2lei 2l1é2les lé2léb lé2lén lé2lér 2l1élm lélőkész1 2l1élr lé2lük 2l1é2lű 2l1é2mel lé2nag léná2 lé2neg lé2nekb 2lénekl lé2nel 2lénkí lé2no lé2nyö lé2p1a2l lé2p1el lépés3s 2l1é2pí lé2pó 2lépül lé2pülé lé3rad lé2ral lé2rap lé2ras lé2rat lé2rav lé2r1á 2l1érc. 2l1ércb 2l1érde lé2reg lé2r1e2l lé2r1eső 2l1é2rez. 2l1é2rezv lé2r1é2j 2l1é2rés 2l1é2rik lé2ris lé2rit lé2rí 2l1érni 2l1érnü lé2r1osz lé2rö 2l1é2rő. lé2rőd 2l1é2rőe lé2rői 2l1é2rőj 2l1é2rők lé2rőn 2l1é2rőt 2l1é2rőv 2lértelm 2l1érték 2l1értj 2l1értő. lé2rut 2lérvel 2l1érvén 2l1érze 2l1érzé lésa2 lé2s1aj lé2sak lé2sal lé2sar lé2s1az lé2s1á2 lé2seg lé2s1e2l lé2s1eti lé2s1é2g lé2sés lé2s1ikr lé2só lé2s1ő lés3sza lés3szer lésü2l lé2s1ülé lé2s1ülő lé2s1üt lész1ék 2lészést 2l1észl lés3zse lé2tag lé2taz lé2t1eg lé2tel. lé2telek léte2leko lé2t1e2lem lé2t1e2let lé2telh lét1elha lé2telm lét1elo lé2t1elő lé2t1elv lé2tene lé2tesé 2l1é2teth lé2teti 2l1é2tetn lé2tev lé2t1ér. lé2t1é2te lé2t1is lé2tít 2létl lé2t1o2k 3l2étó lé2tóh lé3tól lé2t1ó2r létö2 lét1örö lét2rág lé2tun 2l1évad 2l1évb 2l1é2ve. 2l1é2ved 2lévei 2l1é2vek 2lévelf 2léveli 2l1é2vem 2l1é2ven 2l1é2vet. 2l1é2véb 2l1é2véh 2l1é2véi 2lévén lév1ért 2l1é2vét 2l1é2vév 2l1évf 2l1évh 2l1é2vi. 2l1é2vig lé2vir lé2vis 2l1évk 2l1évl 2l1évm 2l1évn 2l1é2vó 2l1évr 2l1évs 2l1évt 2lévü lé2vük lé2vün 2l1é2vű 2l1évv 2l1évz lfa2l1e2 lfat2 lfa1tr lf1aut lfá2t1i2 lf1cl lf1ese lfe2t lf1eti lfé2l1é2v l2f1élm lfé2m1e2ké lfi2d1é lfin3n lfi2nos lf1iro lf1isk lf1kl lf2lo lf2ló lf2lö lf2lu l2f1okta l2f1ó2r lf1pr lf2ri l1f2rí l1f2ro lf2rö lf2rő lf1sp lf1sz2 lf1ülő lga1p2 lgatói2ko lgau2 lgár1as lgés3s lgi2as lg2la lg2lo lg2ló lgör2cso l1g2ra lg2ru l2gy1ad l2gy1ag l2gyaj lgy1ala lgy1alj lgy1any l2gy1a2s l2gy1au l2gyáb l2gyál l2gyát l2gy1e2g l2gyelá l2gy1e2le l2gy1elz l2gyembe lgy1eré l2gy1esem l2gy1e2v l2gyél lgy1ér. l2gy1és l2gyid l2gyikr l2gyip l2gyis l2gy1ok l2gy1ol l2gyop l2gy1os l2gy1ó2r l2gy1ö2r l2gy1ös l2gy1u2t l2gy1út lhai2 lhón1al 1li li2aa li2aá li2abi li2abo lia2cé li2aci li2acs li2acu li2a1d2 li2ae li2aé li2ag li2ah li2aid li2aí li2aj li2akép li2ala li2ale li2ali li2amé li2amo li2ao li2aó li2aő li2ap li2ara li2aré li2asá li2aso lia1sz li2asza li2aszá li2aszé li2aszf li2aszi li2a1t2 li2aü li2av li2az li3be lic3sz li2cü li1cy li2deá 2li2deg li2dén li2dét 2l1i2di 2l1i2dő li2ec lie2d 2lien lié2d lié2k lié2n lié2vé lifé2l1é2v li2fí li1fl li1f2r l2ig. 2l1i2gaz ligán1n li2ge. 2l1i2geb 2l1i2gek 2l1i2gep li2géb li2géh li2géi li2géj li2gék li2gén li2gér li2gés li2gét li2gév li2géz li2hat 2l1ihl 2l1i2ker. 2l1i2kerb lik2k1ell lik2k1elv lik2k1e2r lik2kérd li1k2l 2l1i2konc 2l1i2konf 2l1i2kong 2l1i2konig 2l1i2konk 2likonl 2l1i2konm 2l1i2konp 2l1i2kons li1kré 2lill 2lima. 2limád li2mák li2máv l1imbo li2me. lime2rá lim1p2 2limpo limű1 li2nakr li2nal lin1any lin1ará 2linas. lin2cs1ö2 2l1indu li2ne. li2neg linék2 2l1inger lin1grá ling2rádi 2l1ingré lin1ing lin1inj lin1kl lin3ny li2nor 2l1integ 2l1intéz li2n1u2s li2n1ut 2l1i2nú li2oc lio2l li2oni li2óke lió2raj li2őá li2őd li2őe li2őf li2őg li2őm li2őp li2pa. li2pai li2p1aj li2p1á2r li2pát li2peg lip1ele li2p1elv li2p1esz li2pö li2p1ő2 li1pro 2l1i2ram 2l1i2rat 2l1i2rán 2l1irh li2rig li2rod 2l1irr 2l1irt li2sál li2s1el lise2s li2sid lis1isk 2l1iskol l1ism lis1p2 2l1ispá 2l1isten 2l1istr li2s1ü2t lis1ü2v 2l1iszl lisz2t1á2z li1sztir li2t1a2g 2lital. li2tala lit1alk li2t1áta li2t1e2g li2t1e2l li2t1emb li2tez li2t1érd li2térte li2til lit1int li2t1i2o li2t1is li2t1okt li2t1old li2tön litő2 li2t1őr l1ittak l1ittas l1ittat li2t1ura liú2t 2l1i2vad li2vot l1i2vó 3lix. l1izél 2l1i2zén 2lizésí l1izgu 2l1izmo 2lizzí 2l1izzó 1lí lí2gé lí2ja lí2ju líma1 2l1íns l1í2ny línyenc1 l1írd l1írh l1írj l1írl lí2rod lí2rog lí2rok lí2rom 2l1í2ró l1írs l1í2ru lítés3s lítőa2 lítő2p3r 2lív. líva1 lívak2 2l1íz. 2l1í2ze l2ízi lízis3s 2l1ízl 2l1í2zü l1í2zű l2j1a2da l2j1e2lő l2j1er ljes1s ljharc1 l2j1ip l2j1ir l2j1iz lj1ír l2j1or l2j1os lj1pr lj1sp lj1üz lka1sl lka2tel lka2t1é lka2tin lka2t1ó2 lké2p1ell lké2szel lkia2k lkiá2 l1k2lin lk2lí l1k2lu lkö2z1ön. l1k2rá lk2reá l1k2rémb l1k2ri l1k2rí lk2rom l1k2ró lk1sh lkukész1 lk2va lk2vá lk2vó lla2dój lla1f2 lla2g1ad lla2gal lla2g1a2s lla2gál lla2gen lla2gép llag3g lla2gol ll1a2ja ll1akad l2l1akc ll1a2kóz l2l1akti l2l1a2lap l2l1alm lla2mad lla2mal lla2mem lla2mél lla2mor l2l1anal lla2nyer llany1ó2 lla2pal ll1aszf llata2l lla2tala llat1any lla2t1ál lla2t1ár. llatár1a2d lla2t1árb lla2tés lla2tint lla2t1olt l2latomo lla2tors lla2t1ű l2l1aty l2l1aut l2l1á2ga l2l1ágb l2l1ágg ll1ágy. ll1ágyá l2l1állo l2l1álm llá2mag llá2m1al llá2m1e2 llá2m1érté llá2mik llá2mis llá2m1ut llán2k1e2 l2l1á2p llára2 llár1ad llá2rak llá2r1á2 llá2s1ikr llá2sü llá2sza l2l1átd l2l1átf l2l1á2ti l2l1átk ll1bl ll1br ll1cl ll1d2r l2l1e2dz ll1eff lle2ger lleg1g lle2gyé lleí2 l2l1e2kés lle2l1a lle2lin l2l1ell l2l1e2lőa l2l1e2lőd lle2m1a2 lle2m1á lle2m1e2g lle2mel ll1emelé llem1ell lle2mer lle2m1él lle2m1ér. lle2m1érté lle2m1o2 lle2mu lle2na llen3n lle2n1ő2r llens2 lle2r1in l2l1e2ró l2l1e2sőt ll1estr lle2tos l2l1e2vet l2l1ex ll1é2het l2l1é2jek llé2k1aps lléká2 llé2kár llé2k1ol llé2kos llé2kó llé2k1út l2l1é2let. l2l1é2letb l2l1é2lete l2l1é2letén l2l1é2letét l2l1é2letk l2l1élt l2l1élv llé3nya llé1sp l2l1é2ter llét2o l2l1év. ll1é2vén ll1f2l ll1fr ll1g2r ll1ide l2l1i2ga l2l1igé ll1ill l2l1i2ma l2l1imp ll1ina. l2l1ind ll1inga l2l1ingf l2l1ingm l2l1ings lli2nin l2l1inv lli2p l2l1ipa2 l2l1irá l2l1iro l2l1isi ll1isko l2lism l2l1iste lli2ta l2l1ita. l2lital l2l1izé ll1izma ll1izmá l2l1i2zo l2l1íg l2l1íj l2l1í2v ll1k2l ll1k2r ll1kv l2l1oá ll1obj l2l1off l2l1o2l ll1ope llos3s llóá2 lló1gr llóó2 lló2rák lló2rát lló2riá l2lóvo l2l1öb l2l1öl ll1önt l2l1ör ll1öss ll1ösz l2l1ö2z l2l1őr. ll1ő2rei l2l1ő2rö l2l1őrt l2l1ő2si l2l1ő2ze. ll1p2l ll1p2r ll2si. ll1sk ll1sp lls3s llsz2 ll1szt ll1tré ll1tri ll1tró ll1u2bo l2l1ug ll1ult llus1s l2l1u2t l2l1ús l2l1ú2to l2l1üd l2l1üg l2l1ür l2l1üt l2l1üz l2l1űz llvé2d1e2l l2ly lly1ö l3lyw lma2kad lma1kré l2m1ant lma1trá l2m1att lmá2l lm1álm lm1álo lmá2nyan lmá2ny1út lmá2ris lm1átk lm1átt lm1bl lm1b2r lm1cl lm1dr lme3gon lme1kl lm1elb lm1e2li lm1elm lm1e2lő l2m1ember l2m1enc l2m1eng lmeó2 lm1epi lm1e2seté l2m1essz l2m1etn l2m1etű l2m1ex l2m1ég l2m1élv l2m1é2neke l2m1ép l2m1értő l2m1éva lm1gl lm1gr lm1i2dő lmi2g l2m1iga lmigaz1 l2m1ind l2m1inf l2m1ing l2m1ins l2m1inte l2m1inté l2m1inv l2m1i2p lm1irá lm1iro lm1isk lm1izz lm1íg lm1ír lm1íz lm1kl lm1kr lm1old lm1olv l2m1o2p lm1ors l2m1ov l2m1ódá lm1ó2rá lm1ö2k lm1ön lm1ö2r lm1ös lm1öt lm1ö2z lm1ő2r lm1p2l lm1p2r lm1sk lm1sl lm1sn lm1sp lm1st lm1sz2 lm1t2r l2m1u2g l2m1u2r lm1utó l2m1új l2m1üg l2m1ünn l2m1üz lnak2 lna2p1e lná2ris lné2v1á lni2ker lni2s1 1lo lo2áz lo2b1a2r 2lobá lo2b1á2c 2lo2be lo2b1iv lo2b1ó2 2lobu lo1by lo2ch lo1cy lo2éc lo2éo lo2ép lo2éz lo2g1a2d lo2gal lo2g1ál logás1s lo2ger lo2gí lo2g1or lo2gö lo1g2ráf. lo1g2ráff lo2g1ú lo2gü lo2ir lo2kab lo2k1a2d lo2k1aj 2l1o2kak lo2kárb lo2k1á2ro lo2k1árr lo2k1áru lo2k1átj lo2káu lo2k1e2 lo2kék lo2kid lok1is lo2k1i2z lo2kí lokka2l lok2k1ala lok2k1el lok2k1ó2 lok2kös lok2k1ut lo2k1ol lo2konk lo2kor 2l1o2koz lo2kü lo2laj 2l1old 2l1o2li 2l1olló 2l1oltár lom1adá lom1aga lo2m1ajt lom1aka lom1a2lap lom1a2lo lom1ará lom1ass lo2m1att lo2maz lom1ács lo2mág lo2m1ál lo2m1áré lom1ári lom1árk lo2m1árn lo2m1á2ro lomba2l lom2bala lom2bav lo2med lo2meg lo2men lom1erk lom1erő lo2m1es lo2méd lo2mék lo2mél lom1é2ne lo2m1éri lo2m1i2d lo2m1i2k lo2m1im lo2mink lom1int lomi2s lom1isz lo2miz lo2m1í2 l1omló lo2m1okoz lo2mol lo2m1o2r lo2m1osz lom1ott lo2m1ó2 lo2mö lo2mő lom1p2l lo2mü lo2mű lo2nab lo2n1a2d lo2n1a2g lo2naj lo2nak lo2n1a2l lo2n1ar lo2n1as lo2n1au lo2n1av lo2n1á2z lon2ch lon2cil lon2d1ó2 lo2n1el lo2n1ir lon1k2 lo2nol lo2n1ó2 lo2nö lon1s2 lon1tr lo2nü lo2oi lo2oj lo2or lo2ós lo2pap lop1ál lo2pe lop1e2l lo2piz lo2pí lo2p1o2r lo2p1osz lo2pö lop2p1in lop1t2 2l1opti lo2pü lor2din lore2t 2l1org 2l1orm 2lorn 2l1ors 2l1orv 2l1orz l2os. l2osa l2osb lo2se lo2sü lo1t2ha 2lottl lo2xá lo2xi 1ló lóa2d lóá2r ló1bl ló1br lóc3c ló2cem ló2ch lócsa2p1á2g 2l1ó2dát ló1dro lófé2l1é2v lófi2úké ló1fl lóg1g ló2gí ló1grá lóí2v ló1k2l ló1kré ló2nar 2l1ó2ni. 2lónn 2lóno 2lónr 2lónt lópárba2 ló1p2l ló1p2r ló2rac lór1ada lór1a2la lóra2n lór1any ló2rar 2lórái 2lóráj ló2rámr 2lórár 2lórát ló2rem ló2r1e2s ló2r1ér ló2r1ing lór1ism ló2rí lór1old ló2rü ló2s1aj lósa2n lós1any ló1ski ló1sla ló1spe ló1s2po ló1s2rá lós3s ló1s2ta ló1str ló1sz ló1t2rá ló1tre ló1tré ló1tri ló1tro 2lóvod l1ó2vó ló2zad ló2z1a2k ló2zal lóza2n lóz1any lóza2t1e ló2zál ló2z1es ló2zim ló2z1ir lóz1isk lóz1ism ló2zolv ló2ző ló2zü ló2z1ű 1lö lö2bö lö2ca löc3c lö2ch lö2cő 2l1ö2dé lö2ka lö2ká lö2ko l1öldö löl2t1a löl2tá 2l1öltés l1ölthe löl2to l1öltöt l1öltöz l1öltő 2l1öml lö2möl lö2na lö2ná lön2b1ékét lö2ne lö2né lö2n1o lö2nó lö2nu lö2nú lö2pa lö2pá lö2pe lö2pöl löpü2 lö2p1ülé lö2p1ülő lö2re lö2rö lös3szá 2lössze lö2sü lö2sze lö2szis 2l1ötl löt2ter 2l1ötv 2l1öv. 2l1övb l1ö2ve. l1ö2vez 2l1övh 2l1övn l1ö2vön 2l1övr l1ö2vük 2l1övv 1lő lőa2c lőa2n lőá2g lő1bl lő1br lő2dad lő2dá 2lőde. 2lődei lő2del lő2d1ék lő2din lő2d1iv 2lődje. 2lődjét lődköz1 2lődöke 2lődökn 2lődökr 2lődöt. lő2d3ze lőe2l lőe2s 2lőesé lő1fl lő1f2r lőgépi2 lőgé2p1ip l1őgyel 2lőhű lői2ta 2lőít 2lőkése lő1kl lőko2r1út lő1kv 2lőlege 2lőnn 2lőny. lő2nyal lő2nyár 2lőnyb 2lőnye. 2lőnyei lő2ny1elvi 2lőnyéb 2lőnyén 2lőnyér 2lőnyét 2lőnyév 2lőnyh 2lőnyk 2lőnyn 2lőnyö 2lőnyr 2lőnyt 2lőnyü lőőr2s1é2g 2lőpán lő1pl lő1pr lő1ps 2lőreh 2lőrej lőre3m 2lőret 2lőréb lő2r1is lő2rül 2l1őrz lő2sál lő2sin lő1s2ka lő1ská lő1sla lősó2 lő2sór lő2s1ót lő2ső lő1s2pi lő1spr lő1srá lős3s lős2tar lő1str lő1sy lősz2 lős3zára lős3zárr lő1szf l1ő2szít lő1szt 2lőtét. 2lőtolá lő1tre lőu2t lőü2l 2lővig 2l1ő2zét 2lőzié 2lőzl 2lőzm 2l1ő2zük lp1a2lag l2p1a2lap l2p1alát l2p1a2láv l2p1alk lpanto1 l2p1any l2p1áll l2p1átm l2p1áts lpcsa2p1 l2p1eg lp1e2lu l2p1e2m lpen1n l2p1e2rő l2p1ég lpé2l l2p1éle lpé2r l2p1éri l2p1i2d l2p1i2na lp1izm lp1i2zo l2p1ív l1p2lá l2p1old lpo2n lpon1á lp1p2r l1prd l1p2ri l1p2ro l1p2rób lpu2s lp1uszo lrá2k1e lrei2 lre1p2ré lre1sz lreü2 lsa2v1a2m lság3g ls1eprik ls2ho ls2ka ls2ká ls2ki ls2la ls2lá ls2li ls2ma ls2mi lsors1s lsóé2r lső1sz2 l1s2pa l1s2pe l1s2pé l1s2pi l1s2po l1s2pó l1sp2r l1s2rá l1s2ró l1s2ta ls2tá lste2i l1s2ti l1s2tí l1s2to l1st2r l1s2tu l1s2tú lsza2ké lsza2k1ü lszá2rú l2sz1e2gű l1sz2f l1sz2l l1sz2p lszt2 lsz2tá l1sztr l1sz2v lta2gyá lt1ajá lta2lapb lta2l1á2s lta2l1á2z lta2len lta2l1ev lta2l1é2 lta2liz ltal1l lta2lö l2t1amp l2t1apr lt1ará l2t1arc lta2riá lt1assz lt1aszt l2t1a2u lt1azo lt1ág. lt1á2ga lt1ágb lt1ágg lt1ágn lt1ágr l2t1áll ltána2 ltá2nan ltá2rada ltár2s1ág lt1árur ltá2s1á2g ltá2tal l2t1átr lt1bl lt1br l2t1ell l2t1elö l2t1emu lte2rad l2t1e2reik l2t1erő l2teru lte2t1a2 lte2ték l2t1ékné lté2l lt1éle lt1élm lt1érc l2t1érz lté2sa lté2s1é2g ltés3s lté2t1é2 lté2ves. lt1fl lt1gl lt1gr lt1ide ltig2 l2t1i2gé lti1kl l2t1ill lt1imp l2t1ind l2t1ing l2t1i2o l2t1isi lt1ism l2t1ist l2t1i2ta l2t1ín l2t1í2r lt1ít l2t1í2v ltív1e2l l2t1í2z lt1kr l2t1oml l2t1ord l2t1org l2t1orj l2t1orr lt1ors ltos3s l2t1o2x ltó1p ltó1s2p ltó1sz ltót2 ltö2l l2t1ölé lt1önt lt1öss ltőa2 ltőe2l lt1ő2rö lt1pl lt1pr ltra1s lt2rág lt2rén lt2rik lt2ril lt2róf l1t2rón lt2róp ltsé2g1el lt1sl lt1sp lt1st lt1t2r l2t1udv l2t1una ltu2n1i lt1ura ltu2sze l2t1u2t ltú2ri l2t1üg lt1ü2lé lt1üst l2t1ü2v lt1ü2zem 1lu lua2g luá2r lu2b1a2d lu2bal luba2n lu2b1as lu2bár lu2b1e2g lube2r lu2bes lu2bél lu2b1in lubó2 lu2bór lu2bö lub1t2 lu2bü 2ludj 2ludv lu1dy lue2l lu2esé lugas1s lu2gat lu1g2l 2l1u2gor 2l1ugr lui2r 2l1ujj lu1kl lu2k1os lu2k1o2v lu2l1inf lu2lí 2lulr lu2mad lu2maz lu2mál lumen1n lu2mer lu2mes lu2m1i2k lu2m1ip 2lumí lum2pel 2lund l1unh 2l1u2ni l1unj l1unl l1unn l1u2no l1u2nó l1unv lu2rak lu2ram lu2rat 2l1u2ru 2l1u2rú lu2sad lu2s1aka lu2sakr lu2sal lu2s1a2n lu2s1ág lu2sál lu2s1e2r lu2s1érté lu2sim lu2sis lu2sír luskész1 lu2s1ó2 lusö2 lu2sör lu2ső lus3sze lus3szi lust2 2lutánz 2l1utc lu1t2h lu2tód lu1tra lu2zs 1lú lú2d1a lú2dá lú2de lú2dét lú2d3z lú2ga lú2g1á lú2ge lúg3g lú2gi lú2gol 2l1újd 2l1ú2jí lú2ju lú2ri lú2ru lú2rü 2l1ú2sz lú2té. 2l1útv lú2z1a2n 1lü lü2cs lü2dí lü2dü lü2ge lü2gy lü2lá l1üldö lü2lel lü2l1e2m l1ülep lü2lé lül1ér 2l1ülés 2l1ülhet. 2l1ülhetne 2l1ülhets lü2lí 2l1üljek 2l1ülnek 2l1ülnék 2l1ülni 2l1ü2lö 2l1ü2lő 2l1ülsz. 2l1ült. l1ülte. 2l1ültek 2l1ültem 2l1ültes 2l1ültet. 2l1ültete 2l1ülteti 2l1ültetj 2lültetl 2l1ültetn 2lültets 2l1ültett 2l1ültetü 2l1ültetv 2lülté l1ültéi l1ülték l1ültél l1ültén l1ültér l1ültét l1ültn 2l1ültü lü2lú lü2lü 2l1ülün 2l1ülve. 2l1ünn lü2re lü2rí lü2rü lü2sz lü2te lü2té lü2ti lü2tö lü2tő lü2tü lü2ve lü2vö lü2ze lü2zé 1lű lű2rá 2l1űrb 2l1ű2ri l1űrl lű2ze lű2zé lű2zi lű2zö lű2ző lű2zü lva2dat l2v1adm lvaj1ak lva2j1e lv1akad l2v1akc l2v1a2la l2v1alg l2v1alk l2v1ant l2v1a2ny l2v1a2rás l2v1a2z lvá2gy1ón l2v1állat l2v1állt l2v1áp lvá2rain l2v1á2rak. lvá2ras lvá2rár l2v1árny lvá2rol l2v1á2rul lvás3s lvá2szi lv1áta lv1áth lv1átk lv1br l2v1e2dz lv1egys lv1egyv lv1e2kéb l2ve2leme l2v1elk l2v1ell l2v1eró l2v1ex l2v1é2gés lvé2gül l2v1élm l2v1é2neke l2v1ép lvé2ri. l2vértel l2v1érté l2v1é2rü l2vérzési lvé2sza lv1fr l2v1i2de l2v1i2do l2v1iga lv1iko l2v1i2m lv1inté lv1i2pa l2v1iro l2v1irt l2v1isko l2v1ism l2v1izm l2v1izo l2v1í2ve lvíze2 lvíz1es lv1kl lv1kr l2v1ok l2v1old l2v1olv l2v1onto l2v1op l2v1or l2v1os lv1ödé lvö2l l2v1ölé l2v1ölt l2v1ön l2v1ös l2v1öv l2v1ö2z lv1ő2r lv1ős lv1pr lv1ps lv1sp lv1st l2v1ut lv1új l2v1üg l2v1üt l2y 1lya lya2dat 2ly1adm 2ly1a2dó 2lyagy. 2lyagyr 2lyajt 2ly1a2kas ly1akc 2ly1akná 2lyakós 2lyakt ly1a2lat 2ly1alb 2ly1alk 2ly1alm ly1a2lom ly1alt lya2maj lya2mará lya2m1el lya2mem lya2m1érté 2lyang 2lyani lya2nyag ly1a2nyá ly1a2pán lya1p2r 2ly1arc lya2sal ly1aspe ly1assz 2ly1atl lya1t2r 2lyaty 2lyazo 1lyá 2lyábé 2lyábr 2ly1ág ly1áld ly1áll 2ly1áp 2ly1á2rad 2ly1á2rak 2ly1á2ram 2ly1á2rat ly1árk 2ly1árn 2ly1árr 2ly1á2ru lyás3s lyá2sz 2lyáta 2lyátf 2lyáth 2lyátlá 2lyátlé 2lyátm 2lyáts 2lyátt 2lyátv ly1bl ly1br ly1dr 1lye lye2ga ly1e2gye lyegyez1 ly1ej 2lyeke. 2lyekek 2ly1e2kéb 2ly1e2kérő ly1e2le ly1elf ly1elh ly1ell ly1elm ly1e2lő ly1elr ly1els ly1elt ly1elü ly1elv ly1elz lye2m1a 2lyember 2ly1e2mel lye2min 2lyemlí 2ly1eng ly1erk ly1e2rő 2ly1esd 2ly1esemé 2ly1e2sete 2lyeseté 2ly1e2sett 2lyesél 2ly1e2sés 2ly1este 2lyeszk 2lyeszm 2lyeszű 2lyetet 2lyevő 2ly1ex 1lyé 2ly1ég 2lyéhe. 2lyéhen 2lyéhet lyé2l ly1éle ly1élm 2lyéneke 2ly1ép 2ly1ér. 2ly1érc 2ly1érd 2ly1é2ré 2ly1érm 2lyérő. 2lyérői 2lyérők 2ly1érr 2ly1érte 2ly1érté 2ly1é2rü 2ly1érv 2ly1érz ly1ész 2ly1étt 2lyév. 2lyéve. 2lyévei 2lyévek 2lyéven 2lyévet 2lyévév 2lyévi 2lyévr 2lyévv ly1fl lyf1ölt ly1gl ly1gr 1lyi 2lyibo 2lyideá 2lyideg 2lyiden 2lyidi 2ly1ido 2lyidő lyié2h lyi2g 2lyiga 2lyigá 2ly1ige 2ly1igé 2ly1iha 2ly1ill ly1ima 2lyimá 2lyimp 2lyind 2lyinf 2ly1ing 2ly1ini 2ly1int 2lyinv 2ly1i2p ly1i2rat 2lyirá 2lyiri 2ly1iro 2lyirr 2lyirt 2ly1isk 2lyism 2lyisp 2lyist 2ly1ita 2lyivad 2ly1i2z 1lyí 2ly1íg 2ly1ín 2ly1í2r ly1ív ly2kiz ly1kl ly1kró 1lyn. 1lyo 2ly1ob 2lyodú 2ly1of 2lyokal 2ly1okl 2lyokm 2lyokoz 2lyokta lyo2l ly1ola ly1old ly1oll ly1olt ly1olv lyo2m1as 2ly1op 2ly1o2r 2ly1osz 2ly1ott 1lyó ly1ódá lyó2s1á 1lyö 2ly1öb 2ly1ö2l 2ly1ö2r ly1öss 2ly1öv 1lyő ly1ő2r ly1pl ly1pr lyrádi2 lyre1p 1lys. ly1sk ly1sp lys2t lyszá2m1é ly2tac ly1t2r 1lyu 2ly1ud 2lyugr 2ly1uh 2ly1uj lyu2kás 2lyuni 2ly1u2r 2ly1u2t 1lyú 2lyújs 2ly1úr. 2lyúth 2lyútr 2lyútt 2lyútv 1lyü 2ly1üd 2ly1üg 2lyünn 2ly1ür 2ly1ü2v 2ly1üz 1lyű 2ly1űr. 2ly1űrh 2ly1űrl 1lywo lyze2t1el lzás1s lze2ta lze2t1e2l lze2t1ér. lzé2sa lzőa2 lzőe2 lző2s1orr lzus3s lzu2s3z 2m. 1ma maa2d ma1bra 2m1abs ma2cél. ma2célb ma2célt 2madag 2m1adap ma2datb ma2dato ma2datt madás1s ma2d1é2v madókész1 ma2dóz 3m2a3dz mae2r maé2r ma1f2ra ma1fri ma2gac ma2g1a2dato ma2g1a2dá ma2g1a2dó ma2g1a2du maga2l mag1ala ma2ga2n mag1any maga2r mag1ara magas1s ma2g1asza mag1azo ma2gág mag1áll mag1á2ré mag1árn mag1árr mag1árt mag1áta ma2g1áto ma2geb ma2g1el 2m1aggr ma2gid ma2g1i2k ma2g1í magkia3dó ma2g1or ma2g1osz mag1óra ma2g1óv ma2g1u2r ma2g1ü2 2m1agy. 2m1agyb 2m1a2gyu m1ahh ma2il. ma2ilt mai2z 2m1ajta maj2ti ma2kará ma2kác 2m1akc mak2k1e2 2makkr 2m1akku ma1klu 2m1a2kol. ma1k2rém ma1k2ri 2makro m1akti ma2kus malac3há mala2c3s 2malag mala2g1ú ma2laku 2m1alakz 2m1a2lan 2m1a2lapí malasz2t1a 2m1alb 2m1alc 2m1ald 2malg m1algo 2m1alj 2m1alk malo2m1e mal1os m1alr 2m1alt. mal1th 2m1a2lu 2malv 2m1amp 2m1a2nal ma2nat 2maná ma2n1eg 2m1angi 2m1anto 2m1antr 2m1a2nya. ma2nyag 2m1a2nyá 2m1a2nyó mao2k ma2pa. ma2pas 2m1a2pát ma1p2l ma1p2re ma1p2ré ma1p2ri ma1p2ro 2m1aps 2m1a2rány 2m1arb 2m1arc. 2m1arcc 2m1arch mar1cko 2m1arcu 2m1arcú 2m1a2rén ma2r1i2si mar2k1al mar2k1in mar2k1ón mar2k1ó2r 2marm maro2k1 ma2romá maros1s marók2 maró1kh maró1kk maró1kn maró1kr ma1ry 2m1arz ma1s2ká ma1s2pe ma1spr ma1s2rá mast2 ma1s2ta ma1ste ma1str masz1egy masz1e2me ma2sz1ét ma2szév ma2szis maszí2v masz1íve masz1ös mat1ada mat1alap mat1anya ma2taz ma2tág matá2raka ma2t1á2ras mat1á2rár ma2t1árn ma2t1á2rú ma2t1áz ma2t1e2g mat1eli ma2t1ell mat1elő mat1elt ma2t1eme mate2s ma2tél ma2t1érte matfé2 matfél1 matfélé2 ma2tid ma2t1ind ma2t1inf ma2t1ing ma2t1int ma2t1örö ma1t2ran mat2rág mat2tin ma2t1ut 2m1a2tya ma2tyá 2m1a2uk mau2ra ma2uri ma2us mau2ta 2m1a2uto 2m1a2vat ma2z1a2l ma2zál ma2z1átl ma2zel mazókész1 ma2z3sű 1má 2m1á2bé 2m1ábr má2cs1as má2cs1e2 má2csin má2csir má2csis má2csó má2csü má2fá 2m1ág. 2m1á2ga 2m1á2gá 2m1ágb 2m1á2gé 2m1ágg má2gi. 2m1á2gig 2m1ágk m1ágna 2mágo 2mágó 2m1ágr má2guk má2gun 2m1á2gú 2m1á2gy mágya2d mágy1ada má2hí má2jan má2j1árt má2j1e2 májo2 má2j1ol májren2 má2j1ul má2jü máka2 má2k1al má2kar má2k1e2 má2k1ér. má2kil má2k1ó má2kő má2k1ü má2l1a2l 2m1álar má2lál 2m1álc má2l1e2 mál1ért 2m1állam m1állap m1állat 2m1állí m1állom 2m1álma 2m1álmo má2los má2m1as 2m1á2mí mána2 má2n1as má2nav má2nár mánc1c mán2ce mán2c1ég mán2cip mán2csé má2n1e má2n1in má2nis má2n1it má2n1ö2 má2nő máns3s mán2tac mán2tag mán2t1al mán2t1as mántá2 mán2t1ék mán2t1öl má2nú má2nü má2ny1a2d má2ny1a2g má2nyaj má2ny1aka má2ny1a2l mánya2n má2nyany má2nyap má2nyar má2nyau má2nyav má2nyaz má2ny1e2 má2ny1ér. má2nyérd má2nyérz má2ny1í2 má2ny1ó2 má2nyö má2po 2m1á2rad má2r1a2g 2máram má2r1a2n má2ras már1ass 2m1á2rat má2r1au má2r1ál má2re2 már1em má2rés má2r1id má2r1ik má2r1i2p má2r1i2si már1isk már1istá má2rí 2márkok 2márol má2rö má2rő má2rug m1á2ruh má2ruk m1árur má2rü má2s1a2d má2sal má2sap má2s1a2r má2s1av má2saz má2s1á2rá má2s1árn má2sás 2m1ásásá 2m1ásásn 2m1ásásr másbe2j1 másbejá2 má2s1e2 má2sír má2sor 2m1á2só má2sö má2ső mást2 más1tr má2s1ü2 más3zav 2m1á2ta mát1a2k 2m1á2tá 2m1átc 2m1átd máte2 má2ten 2máté 2m1átf 2m1átg 2m1áth 2m1á2tir 2m1á2tí m1átj 2m1átló 2m1átn má2t1ol 2m1á2t1ö 2m1átp 2m1átre 2m1áts 2m1átte 2m1á2tú 2m1á2tü 2m1átv má2zal má2ze mázi2a mázi2é má2z1i2s má2ző má2zsal mázs1e máz3sz mb1akc m2b1akk mba1k2r mb1akv m2b1a2lag m2b1alj m2b1alk m2b1a2na m2b1a2nya mba1p mb1a2var mb1a2zo mb1á2gy m2b1áll m2b1á2ron m2b1árró mbá2száv m2b1ászná m2b1á2szoka m2b1á2szokk m2b1á2szoko m2b1á2szokr m2b1áta m2b1áth mbeá2 mb1e2ce mbe1k2 mbe2led mb1e2leg m2b1ell mb1elr mb1elsz mb1epe mbe2r1a2g mbe2ral mbe2ran mbe2ras mbe2rá mbe2reg mbere2sz mber1eszű mbe2rev mbe2r1él mbe2r1é2s mbe2rimá mbe2ring mbe2risz mbe2rol mbe2ros mbert2 mbe2r1ú m2b1é2g mb1é2ke m2b1ékí m2b1ép mbé2ress m2b1érté m2b1érz mb1gr m2b1ide mbi2k1al mbi2ke m2b1illa m2b1i2na. m2b1i2nai m2binam mb1ind m2b1inf m2b1ing. mb1inv m2b1ipa m2b1izm mb1i2zom m2b1izz m2b1ív mb1íz mb1kl m1b2lú mb1ly m2b1ob mb1olda mbo2lyak mb1ond m2b1op m2b1ormá m2b1ormú m2b1o2roz m2b1oszl mb1öle m2b1öv mb1ő2si m2b1ő2sz mb1pl mb1pr mbrádi2 mb2rev mb2rok mb2ron mb1sp mb1st2 mb1sz mb1tr mbu2sze mbu2szí m2b1u2t mb1új m2b1üg m2b1ül m2b1üs m2b1üt m2b1üz mbvezé2 mc2lu mcsa2p1á2g mda1b2 mda1g2 mda1p2 mdi2ale mdi3ap md2ra md2rá md2ro md2ró 1me mea2l mea2n me2av me2béd mede2r1e2 2medény me1d2rá 2m1e2dz mee2s me2et 2m1eff me2gaba me2g1ala me2g1alu me2g1alv me2g1an me2g1a2r mega1sz2 me2gav me2g1á me3gám megá2s megá2t megá2z me2g1eg me2g1el mege2le mege2lő me2ger me2g1esem meg1eszt me2geta me2g1e2te me2gez me2g1é2l megés3s megész1 meg1f megg2 meg1gr me2gi meg1igá meg1inn meg1ir meg1is meg1itt me2g1í me2g1o me2g1ó2 me2g1ö2 me2gőr me2g1u2 me2gú me2g1ü2g me2g1ü2l 2megyez 2m1egyh 2m1egyl 2m1egys 2megyüt me2hető mei2rá me2k1ad me2k1ag mek1alk me2k1am mek1arc me2k1a2s me2k1att me2k1á2l me2k1á2p me2k1ár. me2k1ára me2kát mek1egy mek1ell me2kep me2k1ers meke2sz me2k1esze me2keszm mek1eszte me2kev me2k1ék me2kél me2k1ér. mek1érde me2k1érk me2k1érte me2k1érté me2k1éss me2k1éte me2kido me2kij mek1imá me2k1ing me2k1int me2k1i2p me2k1ist me2k1ita me2kír me2kít mek1k2 mek3lu me2kob me2k1ok me2k1old me2k1olt me2k1onk me2kop meko2r mek1ora mek1oro mek1ort me2k1os mek1ott me2k1ó2v mek1öltö me2kön mek1öröm me2k1öt me2k1ő mek1s meksz2 mek1t2 me2kuj me2kun me2kur me2k1ú2 me2küd me2k1üg me2k1üld me2k1ü2lé me2k1ü2lő me2küz m1elad mel1ak me2lág me2lál 2melb 2m1e2lef me2lekt mel1e2l 2m1e2leme 2m1e2lemz 2m1e2les 2melet mele2t1ér. 2m1e2lég 2m1e2l1é2l 2m1e2l1ér melés3s 2m1elf 2m1elgo m1elha 2m1elhá 2m1elhel me2lit. 2me2l1í2 2m1eljá 2melk m1elké m1elkí m1elkö mel2lál m1ellene mel2ler mel2l1ér. mel2ling mel2l1iz mel2lo mel2lö mel2l1u2 2m1elmé 2m1elnö me2los m1előde 2m1e2lőí m1e2lőle m1e2lőtt 2melőz me2lőző 2m1elr 2m1elszá 2m1elta 2m1eltá m1elter 2m1eltett. 2m1eltettn 2m1eltér 2m1elti 2melty 2m1elv. 2m1elvá 2m1elves 2m1elvn 2m1elvo me2ly1ék 2m1elz 2m1eml 2m1e2mul me2n1a2d me2nal me2nar me2nau me2nát me2n1e2g me2n1el me2ner mene2t1á2 mene2tö menés3s 2m1enges me2nil me2n1ip me2ní me2nö men2s1é2g men2t1ell men2tip men2t1is me2n1u me2nú me2nya menye2ma me2om me2óe me1p2h me2pik me2pos me1p2r mera1p2 mer1ass 2merdő 2m1e2rec 2meredm mer1egy 2m1e2rej me2r1e2l me2r1eml mere2t1a mere2t1e2l mere2t1ér. 2merezőkh me2r1ép me2r1il me2rim mer1inf mer1ing me2r1ip 2mernyő me2r1ol me2ror me2r1os me2rov 2meről 2merősí mers2 mer1st mer1tró me2r1ü2g me2sas me2s1emb 2m1esemén mese1s 2meseté 2m1e2sett 2mesély 2m1e2sésé 2m1e2sésh 2mesésk 2mesésr 2meséss 2mesést 2m1e2ső me1s2po 2m1estb 2m1este. 2m1estek 2m1esté 2m1estf me1s2tó 2m1estr 2m1estün me2szan 2meszem me1sz2tá met1anya meta1s metasz2 me2t1e2gy met1ell 2m1e2teté met1ing me2tór me2tú me2tűd 2m1e2ug me2uk meus3s meu2t me2vő me2zac me2z1aj meza2k me2zau me2zál me2zedé me2zeg me2z1elj me2z1ell me2zelőh me2zer mez1ere me2z1ék me2z1ér. me2z1érd mez1éret me2z1é2ri me2z1id me2zim me2zin me2zio me2zír me2z1ol me2z1or me2z1ö mezőe2 me2z1ő2rö me2z1őss 2mezrem m1ezrese m1ezresr m1ezrest me2z3sa me2zsá me2zsö me2zu me2zú 1mé mé2ber 2m1ébr mé2cs1a2 mé2cso mé2g1a mé2ge még1eg mé2gé mé2gi még1is mé2g1o2 mé2gő mé2gú mé2h1a2 mé2h1á mé2heg mé2hel mé2hir mé2h1is mé2h1or mé2hö méhren2 2méhsé 2m1éj. 2m1éjb mé2jes 2m1éjs méka2 mé2k1ad mé2k1aj mé2k1ak mé2k1al mé2k1an mé2kar mé2kaz mé2k1á2 mé2k1e2g mék1elh mék1ell mék1e2lő mé2k1ese mé2kev mé2kez mé2k1é2k mé2k1é2l mé2kid mé2kirá mé2kí mé2k1o mé2k1ö mé2kő mé2k1u2 mé2k1ú mé2le. 2m1é2lel mé2les mé2lez 2m1é2lén 2m1élm mé2lya mé2lyá mé2lyeg mé2ly1ú mé2n1a2r mé2n1a2t 2ménekb 2ménekh 2ménekl mé2n1el mé2n1é2k mé2n1és mé2nid mé2nin mé2n1is mé2niv mént2 mé2ny1e2g mé2ny1e2l mé2nyer mé2nyék mé2nyim mé2nyír mé2ny1o mé2nyö mé2nyú ményü2l mé2ny1ülé mé2pí mé2pü 2m1érc. 2m1é2retts 2m1é2rén mé2rér mérés1s 2m1é2rév 2m1é2rie 2m1é2rin 2m1érké 2m1érlel mé2r1ón 2mérteke 2m1értes 2m1értér 2m1értés 2m1é2rül mér2v1a2 2m1érz mé2s1a2 mé2s1á2 mé2s1e2l mé2s1er mé2sez mé2sin mé2sö més3sza mésza2 mész1al mé2sz1ál mé2sz1á2ra mé2szed mé2sz1el 2mészl mé2sz1ő mész3s 2mészté 2mészth 2mészti 2mésztj 2mésztl 2mésztü 2mésztv mé2sz1ü2 mé2t1ad mé2t1ak mé2t1a2n mét1árt mét1elho mét1elta mé2t1e2v mé2tég 2m1étje 2m1étjér 2m1étjév 2m1étjü 2m1étke. mé2t1o mé2tö métő2 mé2tőr mé2t1u mé2t1ű 2m1év. 2m1évb 2m1é2ve. 2mévei 2m1é2vek mé2ven mé2ves 2m1é2vet 2m1é2véb mé2vén 2m1évf 2m1évh 2m1é2vi 2m1évk 2m1évn 2m1évr 2m1évs 2m1évt 2m1évv mé2z1a mé2z1á2 mé2zeg mé2zil mé2zim mé2zin méz1ism mé2zit mé2zí mé2z1o mé2z3s mé2zu mé2zű mfa2l1e2 mfa2lom mfa1s2 mfé2m1a2 mfit2 mfi1tr mf2la m1f2lo mf2ló mf2lu mfog1adat m1f2rak m1f2ran mf2rá m1f2re m1f2ri m1f2rí m1f2ro m1f2rö mgé2p1e2l mgépi2 mgé2p1ip mg2li mg2ló mgör2cso mg2ra mg2rá mha2sábr mhossz1út 1mi mi2aa mi2aá mi2abo mi2ac mi2ae mi2aé mia1f2 mi2afr mi2ag mi2ah mi2aí mi2ale mi2amé mi2ao mi2aó mi2aö mi2aő mi2a1p mi2aré mias2 mi2aszá mi2aszé mi2aszi mi2aszó mi2atá mi2ati mi2ato mi2aü mi2av 2m1i2áz mi1bl micsa2p1 2m1i2deá 2m1i2deg 2m1i2dei 2midej 2miden mi2dent 2m1i2deo mi2dén mi2dio mi2dió mi2dol 2midő m1időz mie2l mi2éf mi1fl mi1fr 2m1i2gaz 2m1i2gén mi1gri 2m1ihl mii2d mi1k2li mi1klu mi2kono mi2kont 2miks mi2lal 2mille 2millu 2millú mi2ma. mi2máh mi2mit mi2mór mi2naj 2m1i2nam mina2n min1any 2m1i2nas mi2n1ára min2c1e2 min2ch min2d1a2 2m1indá min2dek min2d1er min2din 2m1indí 2mindu mi2neg mine2s 2minfl 2m1infú min2g1á 2m1ingé min1g2h min1inj min2k1a2l min2k1an min2k1as min2kec min2kó min2kö 2m1insp 2m1i2nuk mi2nü 2m1inz mio2n1a mio2n1á mio2r mió2r mi1p2l mi1p2r mi2ram 2m1i2rat 2mi2rán 2mirg 2mirh miri2gyel 2m1irk 2m1i2rod 2m1i2rom mi2rón 2m1irr mi2sal mis1elv mis1epe mis1ing 2misit mi2s1í2r mi1s2pi mis3szab mis3szer mi2s1ü2t mi2s1ü2v mi2s1ű mi2szár mis3zár. mi1sz2f mi2tac mita2n mit1any 2m1i2tat 2mitác mit1ár. mit1árá mit1árh mit1ári mit1árk mit1árn mit1árr mit1árt mit1árú 2mitbo mit1ing miti2s 2mitlá mi2tök mi1tri 2mitro 2mitrú mi2tür miumé2 miu2min miu2s 2m1i2vad 2m1i2vó mi2x1i mi2xö mi2xő mi2zé. mi2zét 1mí m1í2gé mí2ja mí2já m1íns 2m1í2rá 2m1í2ró m1ív. mí2vá m1ívb mí2vé m1ívh m1ívr m1ívv mí2zü mí2zű mjé2ná mjobb1o mjo2g1á2s m2j1ol mj1ósá mj1ős mkaró2 mka2r1ór mke1p mkia2 mkiá2 mkie2 mk2la mk2li mk2lí mk2lo mk2lu mkó2rost mk2ra mk2rá mk2re mk2ré mk2ri mk2rí mk2ro mk2ró mk2va mk2vó mla1f mlapá2r mla2p1áro mla2p1e2 mla2pin mla1s2t mlás3s mlá2s3z mle1g2 mleí2 mle1kn mle1pla mlé2k1a2 mlé2k1á mlé2k1el mlé2k1est. mlé2k1ér. mlé2k1ol mlé2kos mlé2kó mlé2k1ú2 mlé2szé mlo2k1ál mlo2ké mlő2s1a2 mlő2s1ű2 mmag1g mma1gl mmai2 mmas2 m2m1atk m2me. mme2g1é mmifé2l1é2v 1mo mo2be 2m1obj moci1 2m1off mo1g2ráf. mo1g2ráff mo1g2ráfk mo1g2ráfn mo2gy1a2 mohu2 mo2is mo2kab mo2k1ad mo2k1a2k mo2k1a2l mo2k1a2n mo2kar mo2kád mo2k1ál mo2k1á2s mo2k1e2 mo2k1il mok1k2 mo2k1ol mo2k1or mo2k1ó2 mo2kö mok1t 2m1oktat moku2 mo2kur mokú2 mo2kús mo2k1úto mo2kü 2m1o2laj 2m1olda m1oldó 2m1o2lim molli2 mol2l1in 2m1olló molói2ko 2m1oltár 2m1oltás 2molvad 2molvas 2m1oml mon1acé mo2n1a2d mo2n1a2l mo2n1an mo2n1a2p mona2r mo2n1as mo2n1áll mo2neg mo2n1er mo2n1is mon2or mo2nö mons2 mon1sp mon1tré mo2nü mo2nű monyá2 mo2nyáz mo2or 2m1opc 2mope mo2per mo1p2l 2m1opt mo2r1ad mora2n mor1any morá2la 2m1ordí mo2r1el mo2ren mo2r1e2r mo2r1est mo2rid 2morie mori2s mo2r1isk mo2r1iszo mor1izg 2morjaia 2morjaié 2m1orjait mo2r1ol mo2r1ont mo2r1ón mo2r1ó2r mo2rós mo2rö 2m1orr. mor1s2 mort2 mor3tá mor1tr mo2rü mo2rű mo2sál mo2s1e 2mosto 2m1ostr 2m1osty mo2sü mo2szal mo2szis 2m1oszlo mo1t2h 2m1ottha mot2to mo2un mo2us2 mo2vi mo2xi mo3zso 1mó móá2g mó1bl mó2ch mócsa2p1 mócsapá2 mó2d1a2l mó2dau mó2dák mó2dár mó2d1e2 mó2dip mó2d1o2r módó2 mó2d1ór módu2 módus1 mó1fl mói2ko mó1k2l mókus1s mó2lar mó1p2r mó2rak mó2rar mó2rág mó2rái mó2ráj mó2rám móri2as móró2 mó2r1ón mó2rö mó1s2k mó1the 1mö mö2bö mö2ko möl2cs1a möl2csá möl2csel möl2cs1es möl2cs1ér. möl2cs1il möl2cs1o möl2cs1ő mö2le mö2nu mö2ro mö2r1ő m1ötl mö2ve mö2vö mö2vü mö2vű 1mő mőa2n mőá2g mőe2l mőe2r mőé2l mőé2te mő1kl mő1ps mő2r1á2r 2m1őrh 2m1ő2ri mő2si mő2sü mős3zár mőü2l mő2zi mpa1dr m2p1akc m2p1aktá m2p1áll m2p1árko m2p1átj m2p1átk mp2ci mp1elt mp1fr mp1ind mpi2re mp2lak mplo2mal m1p2lu mpon1d2 m2p1ord mporta2 mpor2t1al mpor2t1á2r mpor2t1e2 m2p1osztás m2p1ös m1p2ref m1p2rep m1p2rés m1prib m1p2ric mp2rio m1p2rod m1prof m1prog m1proj m1p2ro1p m1p2rot m1p2rób m1p2ru m1p2szi m2p1u2ta m2p1utó m2p1üz mra1p mren2d1ő2 mré2m1 msa2vo ms2ka ms2ká ms2ki ms2ko ms2lá ms2mi ms2ni ms1ond ms2pa ms2pe ms2pi ms2po ms2pó ms2rá ms2ta ms2tá ms2te ms2ti ms2tí ms2to mst2r ms2tú msza2ké msza2k1ü mszáraz1 msz2c mszé2dem m1sz2f mszín3n msz2l msz2m m1sz2p msz2tá m1sz2v mta2n1ó2 mtára2d mtá2r1ada mtés3s mtőkész1 mtran2s mtransz1 mt2rá mt2re mt2ré mt2ri m1t2ró mt2rö mt2rü 1mu 2m1udv 2m1ugr m1ujj 2mulet 2mulz mu2m1ad mu2m1el mu2mél mu2m1és mu2min mu2m1ir mu2mis mu2m1iv mumkész1 mu2m1ó2 mu2mö mu2mő mumus1s mun1g mu2nok 2mur. mu2ral mu2ram mu2rat mu2rál mur1izm mu2r1u2 mu2sal mu2san mu2sar mu2sas mu2sat mu2s1á2g mu2sál mu2s1e mu2s1érté mu2sir mu2sor mu2s1ó2 mu2ső muss2 mus3sze mus2tárá mus2t1erj mu2szal mus3zav mu2szál mu2szás mu2t1a2g mu2tal mut1a2la 2m1utalá 2mutalv muta2n mu2t1any mu2tasí m1u2taz mu2t1á2ra mu2t1árb mu2t1á2ru 2m1u2tás 2mutca mu2t1el mu2til mu2t1in 2m1u2tol 2m1u2tód 2m1u2tóp mu2t1ö mu2tü 1mú mú2jí múl2t1e2 múl2tol 2m1úr. mú2ri 2m1úrn 2m1ú2sz 2m1útb m1úth 2m1ú2ti 2m1útj 2m1útk 2m1útm 2m1útn 2m1ú2to 2m1útr 2m1útt 2m1útv 1mü mü2dí mü2dü mü2gy mü2ná mü2re mü2rí mü2rü mü2te mü2té mü2tő mü1tz mü2ve mü2vö mü2ze 1mű mű1bl mű1br mű1fl mű1fr mű1gr mű1kl mű1pl mű1pn mű1pr 2m1űrl mű1sp műsú2 mű1sz műtőkész1 műves3s mű2zé mű2zi mű2zö mű2ző mű2zü m2v1a2dot mvágya2d mvá2gy1ada mverés3s mw2hi mza2t1e mzás3s mze2r1o mze2t1a2 mze2t1á2 mze2t1e2g mze2t1el mze2ter mze2tesz mze2t1é2k mze2t1érd mze2to mze2t1ö2 mze2t1ő2 mzé2s1a mzé2so mzókész1 mzőe2r mz2rí 2n. 1na naa2d n1abbó 2n1abr 2n1abs na1cl 2n1a2dag 2n1a2dás 2n1add na2dek 2n1adm 2n1a2dó na1d2re 2n1adt na2du. na2dus na2ei naé2r 2n1aff na2ga. na2gár na2git na2gón na1grá nagy1agg na2gy1a2l na2gyapj na2gy1as na2gyav na2gy1é2k nagyú2 nagy1úr nagy1út na2ire na2ji 2n1ajk 2n1a2kad nakaró2 nak1á2sz na2k1át n1akko na1kli na1klu nako2l nak1ola 2n1a2kó. na1k2ré n1akti 2n1a2kus na2k1útn na2l1a2dó 2n1a2la2g1 na2l1aj na2l1a2l na2lana 2n1a2lapa 2n1a2lapd na2lapr na2lapt na2lar na2lav na2l1ábr na2lág na2l1á2l na2l1á2ro nal1á2t1ö na2l1áts na2l1elá na2l1ell nal1eng nal1ent nal1ég. na2l1ék na2l1éri na2lid na2l1ing na2l1i2o na2l1í2r 2nalízisb 2nalízise 2nalízisé 2nalízish 2nalízisi 2nalízisk 2nalízisn 2nalízisr 2nalízist 2nalízisü 2nalj. n1alja. 3naljac n1aljad n1aljai 2naljak n1aljam n1aljat n1alji 2naljon 2nalju 2naljz 2n1alkat na2l1ob na2l1ol na2lop nal1osz na2l1ó2r na2l1ő nalt2 nal1tr na2lulj na2l1ut na2lü na2mer 2namitbo 2n1a2mite 2n1a2mitg 2namitha 2n1a2mitk 2n1amitl 2namitm 2namitö 2n1a2mitp 2namitro 2namitrú 2namits 2namittá 2namittö 2n1amö 2n1amp 2n1a2nal 2n1ang 2n1anh nano1 nanog2 na2nód 2n1a2nyag nao2l naó2r 2napa. nap1adó na2p1a2g na2p1ala na2p1alk nap1a2pa nap1apá nap1ará na2p1as na2pád na2p1á2g na2pák nap1áll na2pám na2p1árb na2p1átm nape2l nap1ell na2pem nap1est na2p1ill na2p1ing na2p1int nap1isk na2pí nap2lat na2p1ola nap1orm napos1s na2p1ostá na2p1ott na2pó. na2p1ó2r napp2 2nappo nap1pr n1aprí 2napróz na2p1u2t na2p1úr 2n1a2rai 2narann 2n1arany. 2n1a2ranya. 2n1a2ranyá 2naranyb 2naranyh 2naranyk 2naranyn 2naranyr 2naranys 2n1aranyt 2n1arc. 2n1arcá narchi2ab 2n1arco 2n1arcu 2n1arcú n1arró 2n1arz na2sév nas1isk 2nask na1s2ka na1s2rá nast2 na1s2ta na1s2tá na1str na2sz1an na2sz1árad naszkész1 nasz1üg na2t1ab na2t1aj na2t1alk na2t1alt nat1ará nat1áll na2t1á2ré na2t1árn na2t1eg nate3le na2t1elé nat1elle na2tél nat1érke na2t1érv na2t1i2m na2t1ing na2t1old nat1ors na2t1osz na2t1u2t na2tül natű2z 2n1a2ty na2uc na2ul nau2ra na2urá nau2s na2uto naü2z na2vart na2vat 2n1avv na1wh 2n1azb na2zé 2n1a2zo 1ná 2n1á2bé 2nábr ná2caj ná2c3h ná2cí ná2csal ná2csap ná2cs1as ná2cse nác3sik ná2csis 2nácsolat nác3sor ná2csö ná2csü nác3sz ná2d1ala ná2dap ná2d1a2r ná2d1asz ná2d1a2v ná2dá nád1d ná2d1e2 ná2d1ö ná2dud ná2d1ü2 ná2d3z ná2ga ná2gá ná2gi ná2gu ná2gú ná2gy 2n1á2hí ná2k1ér. ná2kol ná2kü ná2lab ná2l1a2l ná2lana n1álar nála2te ná2l1az ná2l1át nále2 ná2l1eg ná2l1el ná2lem ná2les n2álé ná2l1ép ná2l1in ná2lir nál2is ná2lí 2n1áll. 2n1álla. 2n1állap 2n1állat 2n1állí 2n1állom nállóköz1 ná2lü ná2mí ná2mu ná2nad ná2n1al ná2nar ná2n1á2r nán2c1e ná2n1e2 náné2 ná2nét ná2nin ná2ní nán2se ná2nü ná2rad 2n1á2raka 2n1á2rakb 2n1á2rakh 2n1á2rakk 2n1á2rakn 2n1á2rako 2n1á2rakr 2n1á2rakt 2n1á2ram ná2r1a2n ná2rap ná2ras nár1ass 2n1á2rat. ná2r1att ná2r1av ná2r1ác ná2r1ál ná2r1e2 ná2r1éve 2n1á2riai 2n1á2riá ná2r1i2p ná2rí náró2 ná2r1ór ná2rő nár1s2 nárt2 nár1tr 2n1árud ná2rug 2nárun. nár1ur 2nárus náru2t nár1utá ná2rút ná2rü ná2s1as nás1áré ná2s1á2ru 2n1á2sás ná2s1e2 ná2s1i2k nást2 nás1tr ná2szan ná2szas ná2szág ná2szál ná2sze ná2szén ná2szil ná2szin ná2szis 2n1ászka. 2n1ászoks ná2sz1ö ná2sz1ú ná2sz1ü ná2tala ná2t1a2n ná2tál nát1ásv ná2t1e2 2n1áthi ná2t1i2o 2n1á2t1ir 2n1á2tí 2n1átlé ná2t1ö 2n1átru 2n1átug 2n1átut 2n1á2tú ná2tü 2n1átvi nba2ká nba2k1e2 n2b1é2kéb n2b1é2kén n2b1é2kér n2b1é2kév nb2la nb2lo nb2lú nbo2n1a2 nb2ra n1b2ri nb2ro nb2ró nburg2hi nc1acé n2c1ajá nc1ajt n2c1akn n2c1akt nc1a2la nc1alj n2c1alk nc1alt nc1alv nc1ana nc1ant nc1a2nya nc1ari nc1att nca2u n2c1ava n2c1ág nc1árb nc1árk n2c1árn nc1árt nc1á2sa nc1ásá nc1bl nc1br nc3csi nc3cso nc3csö nc3csu nc1dr ncea2 nc1egg n2c1eld nc1e2lek nc1e2lem nc1elm n2c1elv nc1e2red nc1eró n2c1eszt nc1etn n2c1ex ncé2g1ér ncé2hes n2c1ép n2c1évi nc1fl nc1fr nc1gr n2c3ha n2c3há n2che. nc3hel nc3het n2c3hé nc3hiá nc3hí nc3hol nc3hon n2c3hoz n2c3hó nc3hö n2c3hu n2c3hú nci2alis nci2aso n2c1ige n2c1i2gé n2c1i2ko nc1i2má n2c1i2na. n2c1ind nc1inf n2c1ing n2c1int n2c1irá nc1iro n2c1ist n2c1i2ta n2c1i2z nc1íj n2c1ír n2c1ív n2c1íz nc1kl nc1kre n2c1ob n2c1okta n2c1o2li nc1orv n2c1ott n2c1ölt. nc1öss ncö2t nc1őr nc1pl nc1pr n2cs1ab n2csac n2csad n2cs1ag n2cs1ajt n2csakt ncs1alap n2cs1alj n2csam n2csan ncsa2p1á2g ncsa2r ncs1ara ncs1arg ncs1aro n2cs1au n2csaz ncs1ágr n2cs1ál n2c3sár. n2cs1á2rá ncs1árb n2cs1árn ncs1árr n2csáru n2csáta n2csátá n2csátv ncs1elf ncs1é2rés n2csérte n2cs1érté n2c3sérü n2c3séta ncs1i2kon ncs1int n2cs1io n2csipa n2csirá ncs1irt n2cs1ism n2csita ncs1izz nc3síki n2cs1í2rá ncs1ízt n2csob n2cs1oks n2csokta n2csosz n2cs1ö2lé n2cs1ös n2cs1öz n2cs1őr. ncs1őrö ncs1s n2csur ncsu2t ncs1uta n2csút n2csüg n2csüt ncs3zár nc3sze nc3szó nc3szö nc1tr n2c1ud n2c1ug nc1uj n2c1ur n2c1új nc1út n2c1üg n2c1üt nc1üv n2c1üz n2c1űr nc1ya n2c3zá nc3ze n2c3zó nc3zö nc3zs nc3zü nczy1i nd1abl nda1br nd1a2dat nda2dás nd1add n2d1ajá n2d1akc n2d1akk nd1akt n2d1alj n2d1alr nd1ann nd1apó nd1a2rán nd1arr ndat1any nda2tap nda2t1eg nda2tin nda2tir nd1azo nd1azt nd1azz nd1á2rak ndás1s nd1bl nd1cl nd1dr nd1ebb n2d1e2kéb n2d1e2kéin nde2köz n2d1elf n2d1ellen n2d1elm nd1elö nde2mer nde2mu nde2m1ü nde2ná n2dennek nde1p2 nde2r1a nde2rál nde2ráz nde2rel nde2ro n2d1erő n2d1e2sett n2d1e2sés n2d1e2ső nde2sza n2d1e2szü nd1eza ndé2go ndé2kel nd1ékez ndé2kö n2d1éle nd1élm n2d1ép ndé2raj n2d1éssz n2d1észh n2d1észl n2d1észr n2d1é2te n2d1étt nd1fr nd1gr n2d1iga n2d1ige n2d1ill n2d1i2na. n2d1ing n2d1ins n2d1i2onj ndi2óé2 ndi2óf ndi2óm n2d1isza ndí2j1a2da nd1kl n2d1oá ndo2k1út ndo2rál n2d1orni ndo2r1ú n2d1ou n2d1ov ndóé2r nd1ó2ni n2d1ó2rá ndö2b nd1öss n2d1ö2z n2d1őr. n2d1ő2r1a2 n2d1őrb n2d1őrc n2d1őrd nd1ő2reg nd1ő2rei nd1ő2rek nd1ő2rel nd1ő2rék nd1ő2rén nd1ő2rér nd1ő2rét nd1ő2rév n2d1őrf n2d1őrg nd1ő2rig nd1őris nd1ő2rit n2d1őrj n2d1őrk n2d1őrl n2d1őrm n2d1őrn nd1őrok nd1őros n2d1ő2rö nd1őrős n2d1őrp n2d1őrr n2d1őrs n2d1őrt n2d1őrú n2d1őrv nd1pr nd2raz n1d2ruk nd1sl nd1sp nd1st ndszá2m1út ndsze2r1e2l ndtár2s1a2d ndu2t n2d1uta nd1új ndú2rá nd1úsz n2d1üg nd1ünn n2d1üz n2d1űr. n2d1űrr n2d1űrt n2d1űz ndy2b ndy2h ndy2n ndy2r ndy2t ndy2v nd3zav nd3zár n2d3ze n2d3zó n2d3zu 1ne nea2j nea2k nea2la ne2alo nea2n nea2r ne2bé ne1bl ne1dra ne1d2rá ned2v1el ne1dy 2n1e2dzé 2neff 2n1e2ger 2n1egér. ne2g1ö n1egy. n1egyb ne2gyek ne2gyen ne2gyes ne2gyet ne2gyez 2n1e2gyé n1egyf n1egyh ne2gyig n1egyk n1egym n1egyn n1egyr 2n1egys n1egyt ne2gyün nehéz1 2n1ehh nei2g neí2r ne2k1aj ne2k1a2n ne2kát ne2k1e2g nek1erő nek1é2jé ne2kék nek1ékn nekie2 2nekj nek1k2 2nekka 2nekki ne1klu ne2k1ok nekö2r ne1kreá nek1t2 ne2k1üg nek1üldö ne2lag ne2laj ne2l1an ne2lál nelá2r ne2lef ne2leg n1elegy. nel1e2le nele2ma nelem1el nel1e2més nel1eng ne2ler ne2l1ép nelfé2 nel1g2 2n1elha ne2l1id ne2lim ne2l1in n1elló 2n1elnev ne2l1ot ne2l1ó2 ne2l1ö2 2n1e2lőa 2n1e2lőá ne2lőd ne2lőf ne2lőhí 2n1e2lőí 2n1e2lőké ne2lől 2n1előny 2nelőrej 2n1e2lőté 2n1eltér ne2l1ül 2n1elz ne2mak 2nemba 2n1ember neme2g nem1egy 2nemele 2n1emelk ne2m1esz ne2m1ér. ne2m1id nem1isz 2nems 2nemul 2n1eng 2n1enn nen2sa nense2s nen2s1ese nens3s nen2s3z 2n1enyv 2n1enz ne2ob ne2od ne2of ne2og ne2oh ne2oko ne2ola ne2oli ne2oro ne2pad ne2pelm ne2p1est ne2pid ne2p1ó2r ne2p1ut ne2r1a2d ne2r1a2k ne2r1a2n ne2r1a2r ne2r1as ne2raz ne2ráb ner2co ne2r1e2g n1e2rej ne2r1e2ke. ne2r1e2l ner1emel ne2r1er ne2rez ne2rég ne2r1él ne2r1ép ne2r1étt ne2r1id ne2r1iga ne2r1il ne2r1i2m ne2r1inf ne2r1ing ne2r1int ne2ris ner1k2 ne2r1ol ne2ror ne2r1os ne2ró ne2r1ön 2n1e2rő 3n2e3rőkü ner1s ner1tr ne2r1u2 ne2r1üg ne2s1aljá ne2sas ne2s1ál ne2sár 2n1e2setb 2n1e2setr 2n1e2sés 2n1e2ső nes3sza nes3szá 2n1esté 2n1esti ne2s1ü2v nesz1ál ne2s3zár ne2sz1él ne2sz1ű2 ne2t1ab net1a2la ne2t1a2ny ne2tál ne2t1át1 ne2t1e2g net1elá net1elm ne2t1előa ne2t1eml net1este ne2t1esz ne2t1etet ne2t1eti ne2t1é2k ne2t1é2l ne2t1ér. ne2t1érd ne2t1éré ne2t1é2rő. ne2t1é2rők ne2t1érr ne2térte ne2t1értő ne2t1é2rü ne2t1ész ne2t1é2ve. ne2tid ne2t1i2ko ne2t1int ne2tip netké2sz1ü ne2t1o2k ne2tol net1old ne2t1ő2 net2tév ne2tun ne2t1ut netü2l net1ülé ne2t1ü2z 2n1e2vő 2n1evv nexpor2t1ő2 ne1yé 2n1e2zer 2n1ezred 2nezüs 1né 2n1ébr 2nédl né1f2r 2n1ég. 2n1é2gek 2n1é2geté 2n1é2gető. 2négetőh 2n1é2getők 2négetőn 2négetőt 2n1é2gé 2n1égj 2n1égn 2n1é2gő 2n1égs 2n1égt 2n1é2gü né2gyer né2gyén né2gy1o né2gyök 2n1é2hes 2n1éhs né2kaj né2kak né2k1a2n né2kar né2k1á néke2l nék1ele né2ker né2kév né2kid nék1isz 2n1é2kí né2kó nékü2 né2kül n1é2les 2n1é2let 2n1élm né2lői né2lőn 2néneke 2n1é2neké népa2 né2pad né2p1ak né2p1al né2p1an né2pap né2p1as né2pau népá2 né2p1ál né2p1ár né2pát né2p1áz né2peg né2p1e2l népe2r nép1etet né2p1etn né2pev né2p1és nép1f2 2né2pí né2p1o né2p1ö né2pő nép1s né2p1us né2pú 2népül néra2 né2raj né2r1an n1érd 2nérde 2n1é2rem né2ré. né2rés né2ri. né2rin né2rip né2rö 2n1é2rő. 2n1érté né2rü 2n1érz né2s1e2l né2s1ég nés3szer nész1ak nész1al né2sz1á né2szeg né2sz1e2l né2sz1emb né2sz1e2sz né2sz1ék né2szik né2sz1í nészkész1 né2szó né2sz1ö2 né2szu né2sz1ú né2szül né2t1eg 2n1é2tel né2t1es 2n1é2tet néti2 né2tir né2tö né1t2r néva2 név1ada név1adá né2vaj né2var né2vav né2v1ág 2n1évbú 2n1é2ve. 2névei 2n1é2vek néve2l né2v1ele név1elő 2né2vem 2névenk 2névent né2v1e2r né2ves név1esz 2né2vet 2névéb né2v1é2l né2v1éri né2vérő né2v1érz né2vis 2névny né2v1o né2vö né2vő né2v1u2 né2vú né2vün né2za néziu2m1i2 nfe2lemé n1f2la n1f2lo nfluor1e nfol2ta n1f2rak n1f2rá n1f2rek n1f2ri n1f2rí n1f2rö n1f2ru nfüs2t1ölé n2g1abl n2g1a2dat n2g1a2dá ng1a2dó n2gadó. n2gadóa n2gadób n2gadói n2gadój n2gadók n2gadór n2gadós n2gadót n2gadóv ng1akn n2g1akr n2g1akt nga2lag nga2lak nga2lap ng1alát ng1alel n2g1alg n2g1alj n2g1a2ny nga1p2 n2g1a2rán n2g1arc n2g1art n2g1arz n2g1asp ng1assz n2g1aszt nga1tr n2g1a2u n2g1ava nga2zon ngá2c n2g1á2g ng1állá ng1állo ng1álló n2g1áp ng1á2rak ng1áras ng1árat ngá2rát ngá2ráv ngá2ré n2g1árnya n2g1árta ngá2ruk n2g1á2rú n2g1á2szaib n2g1á2szair n2g1á2szait n2g1á2száv n2g1á2szé n2g1á2szi. n2g1á2szig n2g1á2szoké n2g1á2szos n2g1átá ng1átc n2g1á2t1e2 n2g1á2ti n2g1átk n2g1átl n2g1átm n2g1áts n2g1átv n2g1á2zój n2g1á2zós n2g1áztato ng1bl ng1br ng1d2r ng1edz ngegész1 n2g1ela nge2lis nge2r1a nge2rál nger1e2sz nger2im nge2ro n2g1esem n2g1eszk nge2tika n2g1ex n2g1é2g ngé2les n2g1épí n2g1érc ng1érl ng1é2rő. ng1érté ngé2sa n2g1éte ng1fr ng1g2r ng3gyi ng3gyo n2g1i2d ngi2g n2g1iga n2g1ige n2g1igé ng1i2ko n2g1ikr n2gill ngi2m ng1imi ng1inf n2g1ing ng1ins ng1iro n2g1izg ng1íg ng1ír ng1ív ng1íz ng1kl ng1kr ng1kv n1glec ngmeg1 n1g2nó n2g1of n2g1op ngora1 n2g1ord n2g1org n2g1ork ng1osto ng1oszt n2g1otth ngó2riá n2g1öb ng1önt ngö2r ng1örö ng1örv n2g1öv n2g1ö2z ng1őrö ngő2z1ős ng1pr ng1ps n1g2ram ng2rádih ng2rádj n1g2ráf ng2run ng1sh ng1sk ng1sp ng1tr n2g1ud n2g1ug n2g1uj n2g1und ng1u2ra n2g1uta n2g1új ng1útt n2g1üd n2g1ü2g ng1ür ng1üt n2g1üz ng1űr ngy1a2gya ngya2l1ó2 ngy1ass n2gy1á2l n2gy1em n2gy1es n2gyez n2gy1é2d ngy1éks ngy1ékt ngy1ér. n2gyid n2gyim n2gy1ut n2gy1ü2lő nha2b1i nhal1k2 nha2sábr nhá2z1alt nhá2zip nhá2zol nhá2zó nhá2z3s nhe2d3z nhe2i nhú2sá nhús3s 1ni ni2aa ni2aá ni2abo ni2ac ni2ad ni2ae ni2aé ni2afo nia1g2 ni2agy ni2ah ni2aí ni2aj ni2ala ni2alá ni2am ni2ao ni2aó ni2aö ni2aő ni2a1p ni2ar ni2asza ni2aszá nia1t2 ni2ato ni2atr nia3u ni2aü ni2av ni2az niát1a2 2n1i2bo ni1br ni2c1e2l ni2cha ni2c3he ni2c3hé ni2c3ho ni2de. 2n1i2deg 2n1i2dő ni2dü ni2et 2n1ifj 2n1i2gal 2nigaz. 2n1i2gá ni2ge. ni2géj 2n1i2gén ni2géz 2nigm 2n1ihl ni2keb ni2k1el ni2k1em ni2k1érté nikk2 ni1klu ni2konr 2n1ikrit. ni2kud n1ille 2nillu 2n1i2ly 2nimád n1i2máé 2n1imp 2n1i2na. ni2nas ni2n1áll 2nind 2n1info 2n1infú nin2gas nin2gá 2n1inge. 2ningei nin2g1e2l nin2g1ó2 nin1g2rá nin2gu 2n1ingük ni2n1i2p ni2nol 2n1inté 2n1i2onb ni2onc ni2onh ni2onj ni2onk 2n1i2onn 2n1i2ono 2n1i2onr 2n1i2ont ni2óa ni2ód ni2óe ni2óp ni2óta ni2ótá ni2óü nióvá2 nip2p1i ni1pr ni2rat 2nirá nirész1 2n1irg 2n1irh 2n1irk 2n1i2rod ni2rón ni2si. ni2s1in nisü2v nisz1ak ni2szeg ni2szeml ni2szese ni2sz1é2l ni2szip ni2szis nisz1okt nisz1ol 2n1iszon ni2szö ni2sz1ő ni2szu ni2t1a2d ni2t1ag ni2t1aj ni2tal nit1a2la ni2t1as 2n1i2tat nit1ell ni2t1ép ni2t1ér ni2tim ni2t1in ni2tir ni2tob nit1old nit1olt ni2t1osz ni2tür niu2m1i2o 2n1i2vad 2n1i2var 2n1i2vó ni2xa ni2xő ni2zén 2n1izg 2n1izmá n1izom ni2zsol 1ní ní2gé ní2ja ní2ju níli2a ní2ra2 2n1í2rá ní2r1é2 ní2r1ot 2n1í2ró ní2r1ú 2nítél nítőa2 ní2ve 2n1í2vi ní2ze ní2zű nk1a2dós nkai2k nk1ajt n2k1akk n2k1alv n2k1anó nka2nyá nkaó2 nka1p2l nk1app nka2ris nka1s2k nka1sp nka2tom nka1t2r nk1azo n2k1ág nk1árad nká2rál nká2rol nká2ruk nká2sad nká2sal nká2sav nkás3s nká2s3z nkáta2 n2k1átj n2k1átm n2k1áts n2k1átu nk1br nkci2ósű nk1dr nk1e2cse nk1e2dz nk1ela n2kellá n2k1eltá nke2r1a nk1ered n2k1e2rő n2k1e2ti n2k1e2vé n2k1é2l nké2p1el nké2p1és n2k1épí n2k1érc nk1é2szé nk1g2r nkia2 nkiá2 nk1i2ga n2k1igé n2k1imi nk1ind n2k1ing n2k1int n2kinz nk1i2on nki2s1i2 nk1ism nkká2 nk1k2r nk2lar n1k2ló n2k1ob nk1oke nkos3s n2k1oszl n2k1ox n2k1óné n2k1óni nkó1p2 n2k1ó2ri n2k1ö2lé n2k1ö2lő nk1öss nk1ötl nk1őrs nk1pl nk1pr nk2rac n1k2ris n1k2rí nk2roma nkron1n nk1sp nk1st nk1sz2 n2k1ud n2k1u2ra n2k1u2s nk1utal n2k1utá n2k1uz n2k1új n2k1ús n2k1üg nlac1 nla2pa nlap1e nla2p1osz nla2tal nla2t1a2n nla2t1e2 nla2t1é2te nlás3s nle2g1á nleí2 nle2t1o nletü2 nle2tüz nlé2tés nlé2t1é2ve. nme2g1a2 nme2g1é nműé2n nműt2 nna2ié nnak2 nna1kr nn1alv nna1p2ré nna1s2 nn1áll n2n1eml nne2p1a2 nne2se nn1ess nn1esz n2n1e2tet n2n1ett nn1evez nné2get nn1éri n2n1id nn1irt nn1ors nnőé2h nnőé2n nn1sy n2n1ug nn1ú2s n2n1ü2c nnü2l nn1ülő nn1ült nn1ülv n2ny n3nyak n3nyalá nny1a2n n3nyar nnyá2r nny1áz n3nydr nny1ell n3nyelő nny1elt nny1elvá nny1elvez nny1e2sett nny1e2sés nny1e2ső nny1ég nny1é2ké nny1é2ki nnyié2h nnyié2ne nnyi2g nny1igé n3nyjé nny1old nny1on nny1öz n3nyst 1no no1d2rá 2n1o2dú 2nog. 2nogh 2nogj 2nogn 2nogo 2nogs 2nogt 2nogv no2ir 2nokal nok1ala no2k1a2r no2kau no2k1ál no2k1é2l no2kép no2k1ing nok1ist nok1k2 2n1okke 2n1o2koz no2kö no2kő no1k2ro nok1s noksz2 no2kur no2kúr no2kü 2n1o2la nol1f2 2n1o2lim 2n1olló 2n1o2ly no2m1a2c nom1p nona2 no2n1al nonc3c non2ch nonc3sz no2n1e non1k2 no2nö no2nő non1s2 no1ny no2ok 2n1o2pe no1p2la no2r1al no2r1a2t no2raz no2r1el no2r1iv no2rí 2n1ormo 2n1orré nor1s2 no2rü 2n1orvo no2sál no2se nossz2 nos3sze nos3szf nos3szi no1s2tab nosza2u no1sz2f 2noszl no1t2r 2n1otth no1ty no2ui 2n1o2vi. no2xi 1nó nóa2k nóá2r nó2ce nó2ch nó2da. nó2d1a2n nó2dák nó2d1e2s nó2d1is nó1fl nó1fr nó1k2l nó2mac nó2m1em nó2mik nó2m1u2t nó2mü nó2nib nó2non nó1p2r n1ó2rac nó2r1ad n1ó2raf 2n1ó2rai nó2r1a2l n1ó2rar n1ó2ras n1ó2rat nórádi2 nó2rás nó2riá nó2rü nós1akk nó2seg nó1sl nó1s2p nó1s2rá nós3s nó1s2ta nó1sz2 nós3zene nós3zené nót1ala nó2til nó1trá nó2vó 1nö nö2ka nö2ká nö2k1el nöke2t nök1eti nö2k1é2j nö2k1ék nö2k1é2l nö2k1ér. nö2k1éri nö2k1érté nö2ko nö2kó nö2ku nö2kú n1ö2le n1ö2lé nö2lő n1öml 2n1ö2nö 2n1önz nö2rö 2n1össz 2n1ö2sz nö2te nö2té nö2ti n1ötl nöt1t2 nö2tü 2n1öv. n1övb n1ö2ve. nö2vön 2n1övr 2n1ö2zön 1nő nőa2l nőa2n nőá2g nő1br nő2ca nő2ch nő2csár nő2csős nő2csü nőe2r nőé2l nőfé2l1é2 nő1kl nő1pl nő1pr 2n1őr. 2n1ő2r1an 2n1őras 2n1őrb 2n1őrc 2n1ő2rei 2n1ő2réh 2n1ő2rén nő2rét. nő2rétő 2n1ő2rév 2n1őrg 2n1őrh 2n1ő2ri 2n1őrk 2n1őrl 2n1őrn 2n1ő2rö 2n1őrr n1őrs 2n1őrt 2n1őrü nő2rül nő2rün 2n1őrv 2n1őrz nő2s1a2l nő2s1e2l nő2ses nő2s1í2r nő2sok nő1spe nős3s nő1sz2t nő1t2r nőt2tin nőu2t nőü2l npa2dal npe2s npesz1 np2la np2lá np2le np2lé np2lo np2lü npon2t1a2 npo2r1a np2ra np2re np2ré np2ri np2ro np2ró np2sz npu2t1a npu2t1á2 npu2t1e2 npu2t1i nrefle2x1í2 nren2da n2s1a2d n2s1akc ns1alk ns1a2rá ns1ass n2s1au nsa2vár nsa2v1e2 nsa2vil nsa2vol n2s1a2z nság1g ns1áll n2s1á2rak ns1áta ns1átv ns2ch nsc3he. nsc3hei nsc3hé ns1dr ns1e2lé ns1elm ns1eln ns1elo ns1els ns1elv n2s1ene n2s1esz nsé2gel nsé2g1éj nségü2két n2s1ék n2s1é2l n2s1ép ns1é2ve. ns1fr n2s1i2d ns1imp ns1inf n2s1ing n2s1iró ns1isk nsi2z ns1izo n2s1í2r n2s1í2v n1s2kál ns1kl n2s1ob n2s1ol n2s1op ns1osz n2s1ott n2s1ó2r n2s1ös ns2pec ns1p2l ns2por n1s2rá ns1st ns1sy ns3szer ns3szi ns3szo ns3szö n1s2tab n1s2tác nste2i n1s2tim ns2top nsu2r ns1ura n2s1u2t ns1úr n2sz1a2d nsza2k1ü nsz1alk n2sz1a2n ns3zará n2sz1á2ba. ns3zárá nsz1á2ru n2sz1it n2sziz n2sz1omm nsz1p2 n2szut n2sz1ü2z nsz1z nt1abla n2t1abr nta2cél ntad2 nt1a2dó nt1a2ga. n2t1agg nta2gyu nta2gyú ntai2k n2t1ajk n2t1ajt n2t1akc n2t1aktá nt1alát nt1alel n2t1alf nt1anta nt1a2ra. nta2ran n2t1a2rá n2t1arc n2t1ark nta1s2p nt1assz n2t1aty nt1a2ura ntaü2 n2t1azo nt1ábr ntá2cs nt1ácsi nt1ácso ntá2r1a2d n2táram ntá2ráv nt1árny ntá2ruk n2t1ásó n2t1ásvá n2t1áti n2t1átl n2t1átr n2t1áts n2t1átv ntá2zsi nt1bl nt1br nt1dr nt1ebe n2tedén nt1edi nte3gá n2t1ela n2t1elb ntele2mé nt1elf n2t1eljá n2t1elk n2t1ellen n2telmél n2telnö n2t1e2lo nte2lőá n2t1elr n2t1elto n2t1elvá n2t1elz n2t1ember n2t1e2mel n2t1eml n2t1emu n2t1endr n2t1ent nte2rál nte2rele nte2r1in nter2v1e2l n2t1erz n2t1esth n2t1eszk n2t1eva nt1e2vet nt1e2vez nt1ég. nt1é2gé n2t1é2kek nté2kes nté2ké n2t1éks n2t1é2le n2t1é2lés n2t1élm n2t1élt nt1élű n2t1é2neke n2t1épü n2t1érin n2t1érmé n2t1érté n2t1érz ntés3s nté2ter n2t1é2ven n2t1é2vet n2t1é2véb n2t1é2vén n2t1é2vér n2t1é2vét nt1évh nt1évk nt1évt nt1fl nt1fr nt1gr nt2hon ntia2n ntia2t nt1ido n2t1ige nti1k2l ntil2lát. n2t1ille n2t1imp n2t1info n2t1ing. n2t1inga nti1nk. n2t1inté ntió1 nti2par n2t1irá n2t1iro n2t1isk n2t1ism n2t1iste nti2vás nt1izo n2t1íg n2t1íj nt1írá n2t1ívb n2t1í2z nt1kl nt1kr n2t1of ntoka2 n2t1o2k1al n2t1okl n2t1olda n2t1oldó n2t1o2ly nto2m1e2 nt1opc nto2ras nto2rék nto2rin nt1ormá nt1orro n2t1oszl n2t1oszt n2t1otth ntó1p n2t1ó2rá n2t1ó2ri ntót2 ntó1tr nt1ökl nt1ö2kö nt1ö2lő nt1önt n2t1örd ntőa2 ntőé2n nt1őrb nt1őrl nt1őrn n2t1őz nt1pl nt1pr nt2rans ntransz1 ntranszk2 n1t2réf n1t2róf nt1ry nt1sh nt1sk nt1sp nt1st ntsz2 ntszá2m1é nt1szv nt1t2r n2t1udv n2t1ug n2t1uj ntu2mor ntu2n n2t1una nt1und ntun1i nt1u2rá ntu2sza nt1utá n2t1úg n2t1új ntú2ral ntú2ran nt1ú2sz n2t1üg n2t1ü2lő nt1ült n2t1üt n2t1ü2v n2ty1a2l n2ty1a2n n2tyál n2ty1e2l n2ty1él n2ty1ik n2ty1int n2ty1iv n2tyí n2ty1ő2r n2tyut 1nu n1ucc nu2ga nu2go 2n1ujj nu1k2la nu1klu nu2mü 2n1und 2n1u2ni 2n1u2no 2n1unt nu2ram nu2rá nu2sal nu2sas nu2s1av nu2s1e nu2s1érté nu2sik nu2sol nu1s2po nuss2 nus3szi nu2szab nu2s3zav nu2szir nu2szí nu2sz1ol nu2tal nu2tat nu2taz nu2tál nu2te 1nú n1újd nú2jí 2n1újs núkész1 nú1pr 2n1úr. 2n1úrb 2n1úrh 2n1úrn 2n1úrr 2n1úrt 2n1ú2szá 2nútb 2núth 2nútj 2n1útk 2n1útn 2nútr 2n1úts 2nútt 2n1útv 1nü nü1bl 2n1ü2dí 2n1üdv nü1fr 2n1ügg nü1gr 2n1ügy. 2n1ügyb 2n1ügyc 2n1ü2gye. 2n1ü2gyei 2n1ü2gyek 2n1ü2gyes 2n1ü2gyet 2n1ü2gyé nügy1és 2n1ügyh 2n1ü2gyi 2n1ügyk 2n1ügyl 2n1ügyn 2n1ügyr 2n1üld nü1pr nü2rí nüst2 nü1str 2n1ü2tem nü2tés nü2ti nü2tő. nü2tők nü2tős nü2tü nü2vö nü2zé 2n1üzl 1nű nű2zé nű2ző nva2su nvágya2d nvá2gy1ada nvá2gy1ón nvá2r1al n2v1át nven2ta nvé2d1a nvé2d1ő2r nv1ind nvona2l1út n2v1os nv1sk nx1ar n2y 1nya 2ny1abl 2ny1abr nya2cél 2ny1adag 2nyadás 2nyadó nya2dóz 2nyaff nya2gar 2nyagáh 2nyagár 2nyagáv 2nyagc nya2gen 2nyagi 2nyagj 2nyagm 2nyagos 2nyagta 2nyaguk 2nyagú 2nyaján 2nyajk 2nyajt 3nyak. nya2k1ala nya2kara 2nyakc nya2kel nya2k1é2k nya2kiz 2nyakt. 2nyaktá 2nyaktb 2nyakti 2nyaktj 2nyakto 2nyaktu 2ny1a2lag 2ny1a2lak. 2nyalakj 2nyalakk 2ny1a2lakr 2nyalany nya2lapb nya2laph nya2lapo nya2lapp nya2laps 2ny1alász 2ny1alb ny1alép 2ny1alm ny1alte 2nyaltú 2nyamal 2nyanal 2nyang 2ny1ant 2nyaot ny1a2pad nya2pát 2nyapp nya2rén 2ny1arma 2ny1arz nya1sp 2nyassz 2nyaszt 2nyatká nya1trá 2nyaty 2nyauk 2nyavat 1nyá 2nyábr 2nyádná 2nyádt 2nyáék 2ny1ág 2nyáld 2nyállí nyá2lom 2nyámék 2nyámná 2nyáp 2ny1á2rad 2ny1á2rai 2ny1á2rak 2ny1á2ram 2nyáras 2ny1á2rat nyá2ráb nyá2rán nyá2rát nyá2ráv 2nyárc 2nyáre 2nyárh 2ny1árj 2nyárk 2nyárp 3nyárt. 2nyá2ru 2nyárú 2nyárv 2nyásó nyá2szak nyá2szár 2nyáta 2nyátá 2nyáté 2nyátf 2nyáth 2nyátk 2nyátm 2nyátn 2nyátö 2nyátr 2nyáts 2nyátt 2nyátü 2nyátv ny1bl ny1br ny1cv 1nydre. 1nye 2nyedén 2nyedzé 2nyeff 2nyegyl 2nyegys 2nyeke. 2nyekei 2nyekéé 2ny1elb 2nyelc 2nyelef 2nyelemz 2ny1elf ny1elha 2nyeljá ny1elk 2ny1ellá ny1elma 2nyelnö 2nyelőí 2ny1e2lőő 2nyelőz 2ny1elr 2nyelső 2ny1eltá 2nyeltér 2nyelto 2ny1elül nyel2vesz 2nyelvev 2nyember 2nyembl 2nyembr 2nyemel 2ny1emit 2ny1eml 2nyenc 2nyene 2ny1eng nye1p 2nyerdő 2nyerej nye2rekl 2ny1erk 2nyerny 2nyerőm 2ny1esemé ny1eser 2nyeseté 2nyesél 2nyestj 2nyeszk 2nyetik 2nyeve nye2vez 2nyevé 2nyevo 2nyevő 2ny1ex 2nyezr 2nyezüs 1nyé 2ny1ébr 2nyéhen 2nyéhes 2nyéhs ny1é2jek 2nyélet 2nyélm 2nyéneke 2ny1é2neké 2ny1é2nekn 2ny1ép 2nyérc. 2nyérem. nyé2r1e2s 2nyérin 2nyérő. 2nyérői 2nyérőt 2nyérték nyérü2 2nyérv. 2nyérzé 2nyétel 2nyétke 2nyétl 2nyév. 2nyévb 2nyéve. 2nyévei 2nyévek 2nyévem 2nyéven 2nyéves 2nyévet 2nyévez 2nyévéb 2nyévér 2nyévét 2nyévév 2nyévf 2nyévi 2nyévk 2nyévm 2nyévn 2nyévr 2nyévs 2nyévt 2nyévü 2nyévű 2nyévv ny1fl ny1f2r ny1gl ny1gr 1nyi 2nyibo 2nyideg 2nyidej 2nyidő nyié2b 2nyifjú. 2nyifjúb 2nyifjúé 2nyifjúi 2nyifjúké 2nyifjún 2nyifjúr 2nyifjús 2nyifjút 2nyifjúv 2nyiga 2nyiha 2nyihl 2ny1ill 2ny1ima 2nyimá 2ny1imb 2nyimp 2nyinas 2nyinc 2nyind 2nyinf ny1ing. 2nyinj 2nyins 2ny1int 2nyinv 2ny1i2p 2nyirá 2nyiri 2nyirod 2nyirt 2nyisko 2nyism 2nyisp 2nyist 2nyivad 2nyivás 2nyivó 2ny1izn 2ny1izt 1nyí 2ny1íg 2ny1íj 3nyíl 2ny1ín 2ny1ív 2ny1íz 1nyjéb 3nyk. nykar1óra 1nyket. 1nykk ny1kl 1nykn ny1k2r ny1k2v 1nym. 1nymet. 1nymt 1nyn. 1nyo 2ny1ob 2nyodú 2ny1of 2ny1okke 2ny1okl 2nyokos 2nyokoz 2nyokta 2ny1o2laj nyolc1c 2ny1olda 2nyoldá 2nyoldó ny1olló 2ny1oltár 2nyoltás 2nyolvas 3nyom. 3nyomat. 3nyomatk 3nyomatom 3nyomo 3nyomt 2ny1op ny1orc ny1orm ny1ors ny1orv 2ny1osko 2nyosto 2nyoszl 2nyoszt 2ny1ott 2ny1ov 2ny1ox 1nyó ny1ó2ni nyó2rác nyó2rán 2nyóri nyó2s1ü 1nyö 2ny1öb 2ny1öc 2ny1ö2l ny1önt 2ny1öv 1nyő 2nyőrs ny1pl ny1pr ny1ps 3nys. ny1sc 3nysek ny1sh ny1sk ny1sl ny1sp nys2t 1nyst. ny1sta ny1stá 1nyu 2nyud 2nyuj 2nyuká 2ny1ukrá 3nyul 2nyuni 2nyuno ny1urá 2nyut ny1u2ta ny1u2tá 1nyú 2nyújd 2nyújé 2nyújí 2nyújs 3nyúl nyú2lő 2ny1úr. 2nyúrb 2ny1úrh 2nyúri 2nyúrk 2ny1úrn 2ny1ú2ro 2nyúrr 2ny1ú2sz 2nyútb 2ny1úté 2nyúth 2ny1úti 2nyútj 2nyútk ny1útl 2nyútm 2nyútn 2nyútp 2nyútr 2nyútt 2nyútv 1nyü 2ny1üd 2ny1ü2g 2ny1üld ny1üle 2nyünn 2ny1ür 2ny1üt 2nyüze 1nyű 2ny1űr. 2nyűrb 2ny1űré 2ny1űrh 2ny1ű2ri 2ny1űrj 2ny1űrl 2ny1űrn 2ny1ű2rö 2nyűrr 2ny1űrt 2ny1ű2zé 2ny1ű2ző. 2nyűzőb 2nyűzően 2nyűzőé 2nyűzőh 2nyűzők 2nyűzőn 2nyűzőr 2nyűzőt 2nyűzőv ny2vék ny2v1isk ny2vó ny2vös ny2vő ny2vú nyzé2ke nza2c n2z1acé nz1adá nz1ado nz1adó nz1a2ga nz1agg nz1ajta nz1akc nz1akk nzak2o n2z1akt nz1ald n2z1alk nz1ang n2z1a2ny nz1app nz1ara nz1ará nz1arc nz1ari nz1aut nz1á2gy nz1áll n2z1á2rad nz1árny nzá2r1ó2ra n2z1á2ru nzá2s1e2 nz1ásó nzás3s nz1át1a2 nz1d2r n2z1e2g n2z1elb n2ze2leme n2z1e2lér n2z1elf n2z1elha n2z1elis n2z1elk n2z1ellá nz1ellen n2z1elm n2z1elny n2z1elo n2z1e2lőá n2z1e2lől n2z1e2lőt n2zelőz n2z1els n2z1elta n2z1eltü n2z1elver n2z1elvé n2z1elvo nz1ember n2z1e2mel nz1e2més n2z1emi nz1eml n2zener nz1erő nzer2t1a2 nzer2v1a2d nzervé2t nzer2v1éte nzer2vi nze2su nz1eszk n2z1ez n2z1ég nzé2k1el n2z1é2l n2z1ér. n2z1érd n2z1é2rem n2z1érk n2z1érm n2z1érté n2z1érv n2z1érz nz1étv nz1gr nzi2a n2z1i2ga n2z1igé n2z1ill nzi2m1a2 nzi2má nzi2mi nzi2n1á2 nzi2n1o nzi2n1ó2 n2z1i2p nz1irá nz1ism n2z1ist nzi2tár nzite2 nzi2t1el nzi2ten nzi2t1í2ve. n2z1íb nz1íg nz1ín nz1kl nz1kr n2z1okl nzo2lin nzo2ló nzo2n1a nzo2né nzo2rin n2z1osz nzókész1 n2z1ön nzö2r nz1örö n2z1ös n2z1ö2v n2z1öz nz1pl nz1pr nz3saj n2z3sár n2z3sát n2zsáv nz3seg n2z3ser nz3sik n2z3sis n2z3sod nz3sor n2z3só nz3s2p nz3s2t nz3sz nztá2r1a2d nz1t2r n2z1uj nzu2l1a nzu2mé nz1u2ra nzu2san nzus3s n2z1u2t nz1új nz1ú2t n2z1üd n2z1ü2g nz1üs nz1üv n2z1ü2z nz3zs 2o. o1a oa2cé oa1fr o2aki o2a1k2v o2ami oa2nali o2asi o2aszó o1á oá2ga oá2r1a2n oá2ril oá2rí oá2r1ol oá2zs oba1b2 oba1d2 o2b1alj obal2t1a2 oba1p ob1a2ra obau2 obás3s ob1átm ob2b1eg ob2bö o2b1eg ob1ele o2b1e2m o2b1erő o2b1ez o2b1é2g o2b1érz obi2ki obi2k1ó2 obi2lin obi2lip obina2 ob1ina. obi2n1al o2b1ing o2b1i2s ob1ív 1objek ob1kl 1o2boa o2b1oll obo2r1a obo2rin obo2r1os obo2t1á2 obo2tin obókész1 o2b1ó2né ob1ó2rá ob1öt ob1pr 1obst o2b1ut o2b1ú2s ob1üg ob1ür ob1üt ob1űr oca2ké o2c1ág o2c1ál oc1er oc1é2k o2c3hi. oc3hok oc3hot oci3a ocie2 oci1k2r oció2 oci1p oci1sz2 o1c2kef oc2k1é2l ocké2n ock1éne o1c2kér o1c2két o1c2ki. oc2kia o1c2kig o1c2kin o1c2kit o1c2kiv oc2kop o1c2kosn o1c2koso o1c2kosr o1c2koss oc1pr o2c3sap o2cs1ál ocsá2s o2cs1ász o2cs1á2z o2cs1e2 oc3sér ocsié2ra o2cs1ing ocs1izm o2csí2 oc3sín o2csop ocs1s ocs1t o2csuj o2cs1ü2 oc3sza ocs3zá oc3sze oc3zs o2daad oda1b2 o2d1adj oda1dr o2d1akk o2d1alj oda1p2 odas2 o2d1ass od1aszt odat2 oda1tr od1autó odáb2 od1állá o2dáru odáskész1 odás3s odá2s3z 1o2dáz od1ed ode2l odel2l1a ode2min od1e2v o2d1é2g od1é2ne o2d1ép o2d1érd o2d1é2te o2d1é2ve od1é2vé 2odéz od1ide odi2g o2d1iga o2d1ikre odi2l1e odi2lid odi2lik odi2l1is o2d1int o2d1iro od1isp od1í2z od1kl od1obo o2d1okt o2d1op odo2rak odo2rosz od1ö2l od1ö2r od1ő2r od1pr o1d2ram o1d2ráma od1st odu2l1a2l o2d1u2r 1odún od1üg od1ün od1üz 1odváb od3ze od3zo o1e oe2ir oe2le oe2mu oe2ne oe1t2he oe2ur oe2uv o1é o2éfa o2éfá o2éfo o2éke o2éki oéna2 oé2n1al oé2n1an oé2n1ar oéná2 oé2n1ár oé2nis o2ész o2évi ofi2lad ofi2lak ofi2l1á ofi2lel ofi2lér ofili2 ofi2l1iga ofi2l1igá ofi2lis ofi2l1osz ofi2tal ofi2t1e2 of2la of2ló ofona2 ofo2n1al ofo2nan ofo2n1á ofo2n1ér. ofon3n ofo2n1ó2 ofor2m1á2 ofő2r1e ofőrü2 of2rí og1abr o2g1a2g oga2kar o2g1aká o2g1a2la o2g1a2lá o2g1alj og1all og1alt og1alu o2g1a2ny o2g1ap o2g1a2ran og1arc o2g1a2sz oga2t1a2g oga2t1e2 oga2t1i2n og1a2ty 2ogaz o2g1á2g og1áll og1álm o2g1áp o2g1á2rak o2g1áre o2g1árja o2g1árját o2g1á2rok ogá2ros o2g1á2ru ogáskész1 o2gásó o2g1áta o2g1áte o2g1átj o2g1átk o2g1átl o2g1átn o2g1á2to o2g1átr o2g1áts o2g1átt og1átü o2g1átv og1bl ogdí2j1a2d og1dr o2g1e2d o2g1e2g ogegész1 o2g1e2l o2g1em o2g1e2p oge2r og1ere og1ern og1erő oge2s o2g1ese o2g1e2v o2g1ez o2g1é2g o2g1é2l ogén1n o2g1é2p o2g1ér. og1érte og1érté o2g1értő o2g1érv o2g1és og1fl og1fr og1g2l o2g1ic o2g1i2d o2g1if ogi2g o2g1iga o2g1igé o2gill og1inf o2g1ing og1ins o2g1int o2g1ip og1i2ro og1ita o2g1íj og1ín og1ír og1ív og1kl og1kr o1g2lic o1g2nai o2g1odv og1org og1orr og1orz o2g1oszl o2g1oszt o2g1o2v og1ö2b og1ö2l og1ö2r og1ös og1ő2r og1pl og1pr 2ografi 2ograp 2ográf. 2ográff o1g2ráffa o1g2ráfh o1g2ráfj o1g2ráfr o1g2rál og1sk og1sp og1s2t og1tr og1u2ra og1u2ru o2g1u2s o2g1u2t o2g1új og1ü2g og1ül og1ür og1üt og1üz og1űz ogy1a2c ogy1a2p ogy1is. ogy1os ogyóé2 oha2mal oha2mel oha2mes oha2mis ohas2 oha1sp o2h1ág o2h1ál ohá2nyad ohá2nyan ohá2r1e ohá2szi ohá2sz1odv o2h1á2z oh1e2c oh1ing oh2ni o2h1orr ohó2csi oh1órá oh1ö2v oh1urá o1i oi2ae oi2af oi2an oi2av oi2ába oida1 oi2d1ad oi2dan oi2dál oi2d1e2 oi2dol oi2d3z oilet2 oina2 oi2n1ad oi2ne oi2re oisel2 oi2zo o1í ojá2r1as ojás3s ojás3z ojek2t1á2 ojek2t1í2 ojek2t1o2 oj1in oj2t1ára oj2t1orják ojtóá2 ok1abl ok1a2cé o2k1a2dat o2k1a2dá o2k1a2dó o2k1a2kar ok1akv o2k1alj o2k1alk ok1alm ok1alt ok1ang ok1ani o2k1ant oka1p2l ok1app ok1a2ra ok1arc oka2ris o2k1asp o2k1ass ok1aszf ok1aszt o2k1att o2k1aty oka2u ok1aut o2k1ava o2k1ág ok1ájt ok1árad o2k1á2rak oká2rul o2k1árv oká2sal ok1ásó okás3s ok1ász o2k1áte ok1bl ok1br ok1dr o2ke. ok1e2b o2k1e2c oke2d ok1edé o2k1e2g o2k1e2l o2k1e2m ok1eré ok1erk ok1ernel. ok1e2rő o2ke2s ok1esé o2k1e2v ok1e2z o2k1ég ok1é2ke ok1é2ké o2k1él. ok1é2les ok1é2let ok1é2lé ok1éln ok1élt o2k1é2ne oké2p oké3pá ok1épí o2k1épü o2k1ér. o2k1érb o2k1érc o2k1érd o2k1érg o2k1érh o2k1é2ri o2k1érm o2k1érr ok1értá o2k1érte o2k1érté ok1értö o2k1érz oké1s2 okész2 o2k1étk o2k1étt o2k1é2ve ok1fl ok1fr ok1gr o2k1i2de o2k1i2do ok1i2ga okigaz1 ok1igá o2k1igé ok1ind o2k1int o2k1i2rá o2k1i2ro o2k1isk ok1ism o2k1isp ok1iste o2k1i2ta o2k1izm ok1íj ok1ír ok1ív ok1íz ok2kab ok2k1a2d ok2k1aj ok2k1ale okk1alk ok2k1as ok2kaz okk1elh okk1elö okk1elő okk1elr 1okkeré ok2k1es ok2képü ok2kid ok1kló ok2kob okk1öss okk1ö2vű ok1kri ok2kud ok2k1ur o1k2lí ok2lor o2k1ob okola2 oko2lár o2k1oltás okon1n oko2n1oks oko2ra oko2r1á oko2ril oko2ris o2k1ormú ok1o2ro o2k1osz ok1o2varia o2k1o2vi o2k1öb o2k1ö2d ok1ö2k o2k1öl o2k1ön okö2r o2k1ös o2k1ö2v ok1ö2z ok1ő2r ok1pl ok1pr o1k2ris o1k2róm ok2sel ok1sp oksz1alm ok2szan ok2sz1es ok2sz1is 1oktán o2k1ud o2k1ug o2k1uj ok1u2ra o2k1u2t ok1úr. ok1úrb ok1úrh ok1úrr ok1úsz o2k1útb o2k1úth o2k1ú2ti o2k1útj o2k1útk o2k1útn o2k1útr o2k1útt ok1útu o2kútv ok1üg ok1ü2l ok1ün ok1ür ok1ü2t ok1ü2v ok1üz ok1űz o3la. ol1abl ola1d2 ola1f2 1o2laj. 1o2lajb 1o2lajf 1o2lajg 1o2lajh 1o2laji 1o2lajj 1o2lajk 1o2lajm 1o2lajn 1o2lajp 1o2lajr 1o2lajs o2lajt o2laju 1o2lajú o2lajv ola1k2r o2l1alg ol1alk ol1amn ol1anya ola1p2 ola1s2p ola1s2t ola2t1ala olat1any ola2tál ola2táp ola2ték ola2t1inf ola2t1í2v ola2t1ol ola2t1orn ola2t1öl ola2tüz olau2r ol1ábrá o2l1á2g olá2ha ol1áll o2l1árb o2l1árh o2l1á2ria olá2riá o2l1árk o2l1árn olá2rok olá2ron o2l1árr o2l1árt o2l1á2ru olá2sza o2l1á2ti o2l1átv ol2caj ol2cal olca2n olc1any ol2c1e2k ol2cel ol2ces ol2c1év ol2c3h olc1iko ol2cí ol2có ol2cö ol2c3sor ol2csű olc3sz ol2cü ol2cz ol2dab 1oldal. 1oldalá 1oldalb olda2le 1oldalh 1oldalk 1oldall 1oldaln 1oldalo 1oldalr 1oldalt 1oldalu 1oldalú ol2d1any ol2dap olda2tel ol2d1au ol2dál ol2deg ol2d1elé ol2d1ell ol2d1elv old1emb ol2d1e2r ol2d1e2s ol2dev ol2dez ol2dés ol2d1éve ol2dip ol2d1is ol2dor 1oldós ol2d1ö2 ol2dud ol2d1u2g ol2d1ü ol2dű ol1e2g o2l1e2l o2l1é2d o2l1é2g o2l1él ol1ér. ol1érd ol1é2re ol1éré ol1érh ol1é2ri ol1érj ol1érl ol1érn ol1érő ol1érs o2l1érté ol1é2rü ol1érv o2l1érz olfa2k ol2fau ol2f1ár ol2fes ol2fet olf1ing ol2fir ol2fis olfu2 ol2f1ut ol2fúj ol1gl ol1g2r 2olib o2l1i2du 1o2liga oli2gáz o2l1igé ol1ill ol1i2ma. o2l1i2má 1olimp oli2nu o2l1i2pa olipe2 oli2p1et o2l1isk oli2szál ol1ív. oll1a2gy ol2l1aj olla2l ol2l1ala ol2l1alj ollan2d1ó2 oll1any ol2l1atk oll1att ol2l1á2g ol2l1e2c oll1ege oll1egé ol2l1e2gy ol2l1e2h olle2l oll1ele ol2l1emb oll1ese ol2l1é2k ol2l1éri ol2l1inf oll1inge oll1ingé oll1ingi oll1ingj oll1ingn oll1ingr oll1inj ol2lins ol2l1int oll1isk ol2lob ol2lor ol2l1osz ol2l1ö ol2l1ő2 oll1s ol2lub ol2lul ol2l1u2s ol2lü ol3lyu oln1ike o2l1o2l o2l1op olo2r1e ol1ott o2l1ox olóe3dénn oló1f2 o2l1ó2né ol1ónn ol1ó2no ol1ónr ol1ónt oló2rái oló2ráj oló2rák oló2rán oló2rár oló2rát ol1ó2ri olót2 oló1tr ol1ö2l ol1ör ol1ös ol1p2l ol1p2r ol1sk ol2t1aj 1oltalm 1oltalo ol2t1ari ol2t1ág ol2t1áta ol2t1eg ol2t1em olte2r ol2t1ere olte2s ol2t1e2v ol2t1ép ol2t1ér. ol2t1érr ol2t1és ol2tid ol2tim ol2tis ol2tiz ol2t1old 1oltóé 1oltóh 1oltóké 1oltólo 1oltóm 1oltón oltö2r ol2t1őr ol2tür o2l1ug o2l1ur o2l1u2tá ol1ús ol1üg ol1ül ol1üv ol1üz 1olvad 1olvas o2lyabr oly1ada oly1aggy olyame2 olya2mes oly1aszt o2lyál o2ly1e2 1o2lyéb 1o2lyéh 1o2lyéi o2lyél 1o2lyén. 1o2lyiér o2lyim 2olyó o2ly1ö o2lyő o2lyug o2ly1ü2 o2ly1ű2 o2m1abl om1a2dat o2m1adm o2m1a2dó o2m1adt oma1f omaga2 oma2ga. oma2g1ad oma2gal oma2g1á2 oma2ge omagi2 oma2g1in o2m1a2gya om1agyú o2m1ajá o2m1ajk oma1kré o2m1akt om1a2lag oma2lapo oma2lapr o2m1alm om1alt om1alv o2m1amb om1ang o2m1ann om1apad o2m1app oma1pr o2m1a2ra o2m1arc o2m1arg oma2t1árak o2m1atká o2m1aty o2m1au om1a2zo omá2cs omá2g om1ági om1ágo omá2nyan ományká2 o2m1áp o2m1á2rai om1á2rak om1á2ram om1áras o2m1á2rá o2m1árd o2m1áre omá2ré. omá2rét o2m1árg omá2ria omá2riá o2m1árm o2m1á2ru omá2sí omás3s omá2sz omás3zó o2m1á2t1e om1á2t1é o2m1átk o2m1átm om1átol o2m1átr om2b1a2lo om2bág om2b1eg omb1elh om2b1elt omb1éne om2b1éri omb1ón. ombó2r omb1óra om1bro om2buj omdio2 om1dr o2m1e2b o2m1e2ce o2m1e2dé om1ef ome2g ome3gá om1ege om1egé o2m1egy ome2l o2m1ela om1elá om1elb o2m1ele o2m1elé om1elk om1ellá o2m1elm o2m1eln o2m1elo o2m1elő o2m1els om1elte o2m1elu o2m1elv o2m1e2m om1ene om1eng om1eny om1enz ome2o o2mep om1erd o2m1e2red o2m1e2rei o2m1erny om1e2ro ome2rő o2m1erő. o2m1erőb o2m1erőh o2m1erőn o2m1erőr om1erősí omer1őss o2m1erőt o2m1erőv om1e2rű ome2s om1ese om1esé om1ess om1est o2m1e2ti o2m1etn o2m1etű o2m1e2v o2m1ex ome2z o2m1eze o2m1ezred o2m1ébe om1é2de o2m1ég o2m1é2he o2méhs om1éje o2m1é2ke o2m1é2le om1élé om1é2lő o2m1ép o2m1ér. o2m1érb o2m1érc o2m1é2re o2m1é2ré omé2ri. o2m1érm o2m1é2rő o2m1érr o2m1érte o2m1érté o2m1értő o2m1érv o2m1é2s omé2tel o2m1étt o2m1éve om1évé om1f2l om1gl om1gr om1ide omid1i2 om1i2dő omi2g o2m1iga o2m1igé om1iks o2m1ill om1imá omime2 omi2mel omi2m1é om1i2na. omi2náb omi2náv o2m1ind om1inf o2m1ing om1inv o2m1i2ono o2m1i2p o2m1irá o2m1i2ri o2m1iro o2m1irt o2m1isk o2m1ism o2m1iste omi2sz1á om1i2tal omi2tan omi2t1ás omi2t1e omi2tis om1izé om1izo om1izz om1íj o2m1ír om1í2v om1í2z omjó2 om2jő omká2rok. om1kl om1kr omlá2b1út omo2dor omo2kas 2omoly o2m1ont om1ope omo2ras omo2re omo2riz o2m1orjá om1osto omosz2f o2m1oszt o2m1ox om1ök om1ö2l om1ön om1ö2r om1ös om1ö2t om1öv om1ö2z om1ő2r om1ő2s om2pel om1pla om2p1ors om2pő om2p1u2tá om1sk om1sl om1sp om1st om2te. omtes2s om1t2r o2m1ud o2m1ug o2m1uj omu2n o2m1uno o2m1ur o2m1u2t o2m1u2z o2m1új om1üd om1üg om1ü2l om1ür om1üs om1üt om1üv om1üz om1űr om1űz om1ya o2n1abl ona2cél ona2dat ona1dr on1ads onae2 on1agg on1agi on1agó on1agyh on1ajn o2n1ajt 2onak on1akc o2n1akk on1akn o2n1akt ona2len ona2l1e2s ona2lint on1alj. on1alju ona2lok ona2los 1onani o2n1a2no o2n1ant on1app ona1pr ona1ps ona2rác onarádi2 ona1s2p ona2tál onatü2 ona2tüz on1ábr 2onác o2n1ág o2n1állo o2n1állv o2n1á2p on1árad o2n1á2rak on1á2rat on1árb o2n1árk o2n1árn o2n1á2ro o2n1árt o2n1á2ru o2n1á2rú on1árv o2n1á2sza o2n1á2szokr o2n1átál oná2tás o2n1átc o2n1áte oná2t1ér o2n1átf o2n1áthe o2n1átm o2n1átre on1bl on1br on2cal on2c1ál on2c1e2g once2s on2c1ez on2c1ék on2c1ér. on2c1éré on2che on2cid on2c1ikr onc1ill on2cös onc3ság on2cseg oncs1emb oncs1ég on2cs1ér. onc3sikk on2cs1im on2cú on2cü on2de. ond1iko on2d1o2kos ond1oksá on2d1osz 2ondoz on2d1öl on1e2b o2n1e2d on1e2ge on1egg o2n1e2gy on1e2h one2l o2n1ela o2n1ele on1el1é o2n1elh on1elj o2n1elm o2n1eln o2n1elo on1elő o2n1elr on1els on1elt o2n1elv o2n1e2m one2n on1ene on1erj on1erk on1ers one2s o2n1ese ones2s on1est o2n1e2v o2n1ex 2onéb oné2d on1éde o2n1é2g o2n1é2he on1é2ke on1éks o2n1é2l on1é2ne o2n1é2p o2n1érbe o2n1érc o2nérd o2n1éri o2n1érl o2n1érm o2n1érp o2n1érs o2n1érte o2n1érv o2n1év. o2névad o2n1évb o2n1é2ve on1é2vi o2n1évk o2n1évn on1évr on2g1áll ongás1s on2g1e2c on2ged on2g1eg on2g1e2l on2gik on1g2ló on2gü on2gyad on2győ onháro2 onhárom1 o2n1i2d oni2g o2n1iga o2n1ige o2n1igé o2n1ij on1i2ke o2n1ill o2n1inb on1ind o2n1inf o2n1ing o2n1inj o2n1inn o2n1inr o2n1ins o2n1int o2n1i2p on1i2rá o2n1iro o2n1irt o2n1isk o2n1ism on1iste onita2 o2n1i2zé on1izo o2n1izz on1íg o2n1ín o2n1ív on1íz onk1áll onká2rok. onké2t1 on2ne. on3nyár on3nye on3nyo on3nyú on3nyü o2n1ob ono1g2ráf. ono1g2ráfn onoka2 on1o2kal on1o2kos o2n1okta o2n1old on1oll on1opt on1oszl ono1sztr o2n1o2v o2n1ox o2n1óri onó2sak onó2si onó2szen on1öb on1öl on1ön on1ör on1ös on1ö2t on1ö2v on1ö2z on1ő2s on1pl on1pr on1ps 2ons. onsa2v1a2m on1s2k on1sl on1s2m on1spe on1spo on1spr on1sr on1sto onsz2 on1szf on1szt ont1agy on2t1aj on2t1alk on2t1ara on2t1atr on2taz on2t1áll ont1árv on2teb on2t1ed on2t1e2g ont1elá ont1eld ont1elh ont1ell ont1elm on2teln on2t1elő ont1elt ont1elv ont1emb onte2s on2t1ese ont1éké on2tél on2tigé on2t1i2ko ont1ikr on2t1i2m on2t1inf on2t1int onti2sz ont1iszo on2t1iz on2t1í2v on2t1oml on2t1ors ont1óni 1ontóst on2t1ös on2t1öz on2tül on2tür on2t1üz on2tye o2n1ud o2n1ug o2n1uj onu2n o2n1una o2n1u2r o2n1u2t o2n1új o2n1ú2s onú2t on1útb on1úté on1úth on1úti on1útj on1úto on1útr on1útt on1ü2c o2n1ü2g on1ü2l o2n1ün o2n1ür o2n1ü2t on1ü2v o2n1ü2z on1űr on1űz o2ny1acé ony1a2dó ony1akc ony1alj o2ny1alk ony1alt ony1anya onya1p2 o2ny1apó o2ny1ál ony1árk o2ny1árn ony1ázó ony1e2c ony1e2g o2ny1e2l o2ny1e2m o2nyen o2ny1e2r ony1e2s o2ny1ég o2ny1é2j o2ny1é2k o2ny1él o2ny1é2ne o2ny1ér. o2nyéré onygóc1 o2nyigé ony1iko ony1ing o2nyita o2nyitók o2ny1í2r ony1old ony1oml o2ny1o2r o2nyosz ony1ó2r o2ny1ö o2ny1ő2 o2nyug o2ny1ur o2ny1ü2 onz1abl on2zag onz1ajtó on2zar on2zág on2z1á2l on2z1ed on2z1e2l on2z1e2m on2z1es on2z1ék on2z1ére on2z1im onz1ing onz3sel on2zü o1o oo2ib oo2in oo2pe oo2re oo2xi o1ó o1ö o1ő o2p1a2b o2p1a2d o2pal op1a2la o2p1any op1a2po op1a2r opa2u o2p1a2z o2pál o2p1ám o2p1á2rat opáskész1 o2p1áth o2p1átl o2p1átm op1bl op1e2dé op1e2g op1ejt op1elő op1em opera1s operasz2 op1erd op1erk op1erő op1es op1e2t o2p1é2l o2p1é2n op1gr op1i2ko op1ikr o2p1im op1ind o2p1ing o2p1i2p o2piram o2p1i2rá op1isi op1ist o2p1i2ta opi2z op1izo op1izz op1ív op1kl op1kr o2p1ob 2opol o2p1orj o2p1orr opor2t1a2 opor2t1á2 opor2t1e2 opor2t1érd opor2tö o2p1orzó oposz2f o2p1ov op1ös op2pé op2p1is op1py 2opro op2roc op2rod op1sl op1sp op1sr op1s2t o2p1ud o2p1u2r o2p1u2t op1új o2p1ús op1üd op1üg op1üt op1üz o2r1abl o2r1abr ora2dat o2r1a2dá or1adm o2r1a2dó or1aff or1agg or1a2gó ora2kad ora2kas o2r1akc ora1kl ora2kol o2r1akt or1alg o2r1alj or1alk o2r1alm o2r1alt o2r1alv or1amp o2r1ana o2r1ane o2r1ank o2r1a2no o2r1ant or1a2nya oraó2 or1app o2r1a2rá o2r1arc or1a2ri or1aszk o2r1atk o2r1atl or1att or1aty o2r1a2zo o2r1ábr orá2cs or1ács. or1ácsa or1ácso o2r1á2g orá2le or1álló o2r1állv orá2lö o2r1á2p o2r1ár. o2r1á2rak o2r1árá o2r1árb o2r1árk o2r1á2ro o2r1árp o2r1árr o2r1árt or1á2ru or1árú o2r1árv o2r1ásv orá2sze o2r1áta o2r1á2t1e2 o2r1átf o2r1áth o2r1átj o2r1átk o2r1átm o2r1átr o2r1áts o2r1átt o2r1átv or1bl or1br or2c1a2l or2car 1orcád or2chá or2c3hé or2c3ho orc3ság or2c3seb or2c3sé or2cú or2cz or2d1au ord1eme ord1e2ső or2dex or2d1ing 2orea o3reá o2r1e2b or1ecs o2r1e2d o2r1ef or1e2ge or1e2gé o2r1e2gy 2ore2k or1eke or1eké ore2l or1ela or1ele or1elh or1elj or1elm or1eln or1elo or1elő or1elr or1els or1elt or1elv o2r1e2m ore2n or1ene o2r1eng or1eny o2r1ep or1eró ore2s or1ese or1esé or1eső o2r1ess o2r1esze o2r1e2v or1ez o2r1é2d o2r1é2g o2r1é2j oré2kás oré2k1e2 or1ékné o2r1é2l o2r1é2m o2r1é2ne o2r1ép o2r1éré o2r1é2te o2r1étk o2r1év. o2r1é2ve o2r1é2vé o2r1é2vi o2r1évn o2r1évr orfé2l1é2v orfi2úér 2orgiai or1gl o2r1ibo o2r1i2de o2r1i2dé oridi2 ori2d1io 1o2rie o2r1ifj o2r1i2ga o2r1i2gá o2r1i2gy or1iha o2r1i2ma. o2r1i2má o2r1i2na. o2rinas o2r1i2nán o2r1i2nát or1i2náv o2r1ind o2r1inf o2r1ing. o2r1ingc o2r1ingé o2r1ingi o2r1ingn o2r1ingr o2r1ings or1inh o2r1inj o2r1ins orin2t1a2 orin2tel orin2t1ő ori2og o2r1i2p o2r1i2si o2r1ism or1isp o2r1iste o2r1i2szá ori2tan o2r1i2zé o2r1íg o2r1í2j o2r1í2n o2r1ír o2r1í2v o2r1í2z 1orjaia 1orjaié or3já or1k2l orkö2z1e2p or1k2v or2m1app orma1t2re or2m1att or2m1azo or2m1eb orme2g or2m1egy orm1eli orm1elv orm1erők orm1esz ormé2t or2m1éte or2m1osz or2móv or2m1ö or2m1ő or2mü or2ne. ornis1s o2r1o2á orogkész1 oro2k1á2 oro2kor o2r1olda o2r1o2li o2roltól o2r1ontó. o2r1ontób or1ontóé or1ontóig o2r1ontój o2r1ontón o2r1ontór o2r1ontót o2r1ontóv oro2nya oro2nyo or1ope or1opt o2r1o2r o2r1osko o2r1osto 1o2roszi 1o2roszr o2rosztá o2r1o2x or1ó2ia or1ó2ni or1ó2rá or1óri or1ó2sá oróso2r oró2soro or1ö2b or1ö2c or1ö2l or1ön or1ör or1ös or1öt or1öv or1ö2z or1ő2r or1ő2s or1ph or1pl or1p2n or1p2r orr1abl or2r1a2r or2r1áta 1orrb 1orri. or2rin or2riz 1orrk 1orruk 1orrú. 1orrúc or2s1a2d or2s1ajtók ors1alk ors1ass or2s1ál or2sed or2s1e2s or2s1é2ne or2sérte ors1é2tát or2s1í2r or2sön or2ső or1srá or1s2tab ors1ült ors1ü2tő 1ország orszi2l1 ors3zóná or1sz2t or2t1agg or2t1alm or2tana orta2n1á2c or2t1aré or2tág ort1árad ort1á2ram ort1á2rán ort1á2rár ort1árbe ort1árná ort1á2ruk or2t1á2rú or2t1e2g ort1ejt or2t1ela ort1e2lem or2t1elé or2t1ell or2t1elm or2t1eln or2t1elo or2t1elő or2t1elt ort1elv ort1emb or2tene orte2r1a or2t1ess ort1eti ort1éle ort1élé ort1élt ort1élv or2t1érm or2tid ort1i2ku or2t1int or2t1ist or2t1ita or2tít or2t1okm or2t1o2kol or2t1okta or2t1old or2t1orm or2t1ott or2t1ó2r or2t1ön or2t1ös or2t1ö2v ort1ura ort1úr. or2t1ü2zér o2r1ud o2r1u2g o2r1u2r o2r1u2t o2r1útb o2r1úth o2r1ú2ti o2r1útj o2r1útn o2r1ú2ton o2r1útr or1úts o2r1útt or1üd or1ü2g or1ü2l or1ün or1ür or1ü2s or1üt or1ü2v or1üz or1űr 1orv. or2v1a2n 2orvá orv1isi 1orvos or2vő 1orvv or2z1a2var. or2z1e2c or2zes or2zsan orz1z o2s1abl o2s1a2da o2s1a2dó o2s1akc o2s1a2l osa2n o2s1ang o2s1ant o2s1any o2s1a2p os1arc os1assz os1a2ty o2s1au o2s1ábr o2s1á2g os1áld o2s1áll os1á2lom osára2 osá2rak osári2 osá2rik osá2rok o2s1áru osás1s os1á2t1a os1áté os1átj os1átk o2s1átr os1e2d o2s1e2g o2s1e2l os1emb os1e2n o2s1er o2s1es os1e2t os1ex os1ez o2s1é2g o2s1é2l o2s1ép o2s1érd o2s1érte o2s1érté osgé2 o2s1ide o2s1if osi2g os1iga os1ikr os1inf o2s1int o2s1i2p o2s1i2rá os1iro os1irt o2s1ism os1isp os1iste o2s1i2sz o2s1íj o2s1í2r o2s1í2z os1kl os1kró 2osok o2sonh o2sonn o2sono 1o2sont o2sonu 1osonv o2s1o2r os1osz osó1p os1ök os1ö2l os1ön os1ö2v os1ő2r os1p2l os1p2r os1ps os1sta ossu2 os2s1ur ossz1áll ossz1á2ro ossz1es ossz1íj osszó2 os3sző ost1e2te os2tip os2tir os2tiz 1ostob ost1old os2t1ös 2ostu os2t1ü2 1ostya o2s1ud o2s1uj o2s1u2r o2s1u2t os1úr. o2s1ú2s o2s1üg o2s1ün o2s1ü2v o2s1üz os3zabá o2szaj osz1alá osz1alk osz1alt osza2n osz1any o2szar osz1aré osza2t1e2 o2sz1ál o2sz1ed o2sz1e2g o2sz1e2l o2s3zen osz1ep osz1es o2szég o2széj o2sz1é2l o2sz1é2p o2sz1és o2szige osz1ing osz1ism osz1ist oszí2 osz1ív o1szkl o2sz1o2ro osz1ors o2sz1orz os3zón osz1ó2r o2szö os3zöl osz2t1alm oszt1any osz2t1apo osz2tár. osz2t1árn osz2ted osz2tell osz2t1em oszté2r osz2t1éré osz2t1ív osz2t1osz o2szur osz1úr o2szü osz1üg os3zül ot1abl ot1a2da otag2 ota1gr ota1k ot1ana o2t1ant ot1a2ny ota1p2 ot1arc ot1arz ot1ass o2t1a2z ot1ábr o2t1á2g ot1á2rak o2t1á2rá o2t1árb o2t1á2ré ot1árn ot1bl o2teb o2t1e2g otel1a ote2l1á ote2lel ote2lő ote2m1á ote2m1o ot1e2v o2t1é2l o2t1ép o2t1ér. o2t1érté o2t1érz ot1fr ot1gr oth2r o2t1id o2t1im otina2 ot1i2na. oti2nar oti2nár o2t1ind otinká2 2otipa 2otipi 2otipn 2otipt o2t1irá o2t1is o2t1izé ot1íj ot1ín ot1kl ot1k2r o2t1ob oto1gram ot1ola otona2 oto2n1á oto2n1in. oto2nis oton3n oto2rak oto2rál oto2rár oto2re oto2rim oto2rin oto2rol otosz2f otó1f2 2otóp otó2pan otó2pas otó2pin otó2p1osz otó2sétá otós3s otó1sta otó1sz otó2s3zár otót2 otó1tr ot1ö2l ot1ös ot1pl ot1pr ot1ps o1t2rag ot1sp ot1sr ot1st otta1g2 ot2t1é2g 1ottl ot1ura ot1u2sz o2t1új ot1úri ot1ü2l ot1üt ot1ü2z ot1űr otva1k2 otya1 o1u ou2ag ou2il ou2le o1ú o1ü o1ű ova2ga ova2g1i2n ova2r1an ova2rát ova2r1el ova2rék ova2rés ova2ris ovas3s ovau2 ováb2b1o ová2s1á2rá ová2sik ovio2 ow1el 1oxidb 1oxidr o2xigé 1oxilc oy2ce oza2g ozag1a oz1agi o2z1a2l oza2mal oza2m1e2 oza2m1érté oza2min oza2n o2z1any oza2r oz1ara oza2tat oza2tál oza2t1e2 oza2tés oza2t1é2te ozat1ill oza2t1í2 oza2t1ol o2z1au o2z1á2g ozá2ke oz1áll o2z1á2ro o2z1áru ozá2s1e ozás3s ozá2s3z o2z1átl oz1e2g oz1e2m oz1en ozé2k1e2 o2z1é2l o2z1é2p o2z1é2ré oz1i2do o2z1i2par oz1iro ozi2s1aj ozi1sl ozi1st ozi1sz2 ozi2t1a2 oz1í2n o2zor oz1ors o2z1osz ozóegyez1 2ozófia 2ozófiáb 2ozófiáh 2ozófiája 2ozófián. 2ozófiána 2ozófiár 2ozófiát. 2ozófiátó 2ozófiáva ozó2tan oz1p2r o2zs1a2l ozsa2n ozs1any o2zs1ő ozs1s o2zsü oz1ün oz1ü2z oz1űr ozzá1s2 2ó. ó1a óa2cé óa2dag óa2dá óa2do óa2dó óa2ga óa2gi óa2gy óa2já óajtói2 óa2kad óa2kar óa2ká óa2ku óa2la óala2g1 óa2lá óa2l1e óalmana2 óalmanac3 óa2lo óal1os óa2lu óa2ma óa2na óa2nó óa2ny óa2pá óa2po óa2pó óa2pu óa2ra óa2rá óa2ré óa2ri óa2ro óa2to2 óatom1 óa2ty óa2uk óa2ur óa2ut óa2va óa2xi óa2zo ó1á óá2bé óá2cs óá2ga óá2gi óá2go óá2gyú óá2hí óá2la óá2lo óá2po óá2rá óá2ru óá2rú óá2sa óá2só óá2sz óá2ta óát1a2dó. óá2tá óá2t1e2 óá2té óá2t1i2 óá2tí óá2to óá2t1ö óá2tu óá2tú óá2tü 2óbab 2óbaj 2óbak 2óbal 2óband 2óbank óba1p2 2óbará 2óbark 2óbarna óbas2 óba1t2r óbau2 2óbec 2óbef 2óbeg 2óbeh 2óbej 2óbek 2óbele 2óbelé 2óbels 2óbem 2óbeo 2óber 2óbet 2óbev 2óbez ó2bég 2óbil 2óbio 2óbir 2óbit 2óbiz ó1b2le ó1b2lo 2óbój 2óbólé ób2rá ó1b2ro ób2rók ó1b2ru óbuda2ik óbuszt2 óbu2sz1ú ó2c1aj ó2c1akr óc1a2la óc1alk ó2c1ar ó2c1ass óc1att ó2c1ál 1ó2ceá ó2c1e2g óce2l óc1ele óc1elm óc1elő óc1emb ó2c1e2v ó2c1ép ó2c1ét óc3há óc3he óc3ho óci2m óc1imi óc1ing ó2c1i2pa ó2c1is óc2lu ó2c1or ó2c1osz óc1ó2r óc1pr 2ócsa óc3ság ó2cs1áru 2ócse 2ócsé 2ócsi ó2csit 2ócsí 2ócso 2ócsö 2ócső ócs1p óc3s2pá óc3sz óc1tr ó2c1ud óc1ün óc1üz óc3za óc3ze óc3zu ód1ada ód1a2dá óda2j ód1ajá ód1akt 2ódal. 2ódala ód1alg ó2d1am ód1ana 2ódarabk 2ódará ód1aut ód1azo ó2d1áf ó2d1ág ó2d1ál ó2d1áp ó2d1árn ód1á2ru ódás3s ód1bl ód1br ó2d1e2d ó2d1e2g ód1e2lem ó2d1elh ód1elj ó2d1ell ó2d1elm ó2d1elo ód1elő ód1elr ó2d1elv ód1emb ód1eme ód1ep óde2ra ód1erő óde2sés ó2d1e2v ó2d1ez ó2d1é2g ó2d1ép ó2d1érte ó2d1érz ód1fr ód1gl ó2d1i2d ó2d1igé ó2d1int ódi2p ó2d1ipa ó2d1iro ódi2sz ód1izo ó2d1ír ód1kl ód1kr ód1kv 2ódob ódo2ga 2ódok 2ódol 2ódom ó2d1op ó2d1osz ó2d1o2x ódókész1 ód1órá ó2d1ö2l ód1ös ó2d1öt ó2d1öv ód1őr ód1pr 2ó1d2ram 2ódrá ód2rám ó1d2rog ó1d2rót ód2ruk ód1sp ód1st 2ódug ódu2r ó2d1ura ódus3s ódu2s3z ó2d1u2t ó2d1új ód1úr. ód1üg ó2d1ür ód1üv ód1üz ód3zár ó2d3ze ód3zso ó1e óe2bé óe2ch óe2cs óe2dé óe2dz óe2ge óe2gé óegész1 óe2gy óe2ke óe2ké óe2l1a2 óe2l1á2 óe2le óel1en óe2lé óel1ér óe2l2i óe2l1í2 óe2lo óe2lő óe2lü óembe2r1ék óe2me óe2mé óe2mu óe2ne óe2pé óe2pi óe2po óe2re óe2ré óe2ró óe2rő óe2se óe2sé óe2ső óe2sz óe2te óe2ti óe2tű óe2ve óe2vé óe2vő óe2zü ó1é óé2be óé2ge óé2gé óé2gő 2óé2he 2óéhs óé2ke óé2ké óé2kí óé2le óé2lé óé2lő 2óé2ne óé2pí óé2pü 2óér. 2óérd 2óé2re 2óé2ré óé2ri óé2rő 2óérte 2óérté 2óérz óé2te 2óétk óé2ve óé2vé óé2vi óé2vü 2ófa. 2ófaa 2ófaá 2ófab 2ófac 2ófad 2ófae 2ófaf 2ófag 2ófah 2ófak 2ófal 2ófao 2ófap 2ófar 2ófas ófa1st 2ófa1t2 2ófaü 2ófav 2ófaz ófe2l1em ófe2len ó2f1ev 2ófék 2ófélő 2ófélt 2ófén ó2f1ér. ófi2ab ófi2ad ófi2ag ó1f2la ó1f2lo óf2ló óf2lö óf2lu 2ófoc 2ófog 2ófok 2ófol 2óford 2óforg 2óformác 2óformáj 2óformál 2óforr 2ófos 2ófot ó2f1ov ó1f2rak ó1f2ri ó1f2rí ó1f2ro ó1f2rö ó2f1ud ófu2r óf1ura óf1úr. óf1úrn óga1p óg1dr óge2o ógé2p1i2p óg3gy ógi2al óg1ír óg2la óg2le ógo2ras ó1g2raf óg2rán ógu2sab ógu2s3z ó2gy1el ó2gy1es ó3gyi. ógy1int ógyö2k1érb ógyta2n1á2 ógyte2a ógy1ús óha2de 2óhal 2óhan 2óhas 2óhat óháza2d óhá2z1ada 2óhon 2óhor 2óhos óhús1s ó1i 2ói2de 2óidé ói2dén ói2di 2ói2dom 2ói2dő 2ói2ga 2ói2ge 2óigé ói2géb ói2géi ói2géj ói2gék ói2gén ói2gér ói2gét ói2gév ói2konb 2ói2konj 2ói2konn 2ói2kono ói2konr ói2kont óile2 2óill ói2ma. 2ói2má ói2mi 2óimp 2ói2na. ói2nai ói2naka ói2nas ói2nat ói2nán ói2nár ói2nát 2óind 2óinf 2óing 2ói2ni 2óinj 2óinp 2óint 2óinv ói2pa 2ói2rat 2ói2rá 2ói2ro ói2sz 2ói2ta ói2tók ói2vad ói2zé ói2zo ó1í óí2rá óí2ri óí2ro óí2ró óí2té óí2vé óí2vü óí2vű óí2ze óí2zé óí2zi óí2zü óí2zű ója1g2 2ójakén. ójak2r 2ójam ója1p2 2ójav 2ójárá 2ójárm 2ójáró. 2ójáru 2ójárv 2ójáté 2ójáts óje2gy1á2 2ójut 2ókab ók1a2da ók1ajt ó2k1akó ó2k1alj ók1alko 2ókaló 2ókamp 2ókamr 2ókapa 2ókapc 2ókaps 2ókar. 2ókara 2ókarr 2ókart 2ókata 2ókate óka1t2r ók1aut 2ókav 2ókaz ó2k1áll ók1árad ó2k1á2ri ó2k1árn ó2k1áru 2óke2d ó2k1edz ók1egé 2ókem ó2k1emb 2óker óker1este óke2r1ékné óke2rig ó2k1e2rő óke2r1üg óke2sz ók1esze óke2t ók1ete 2ókev 2ókez ó2k1é2l 2ókém 2ókény 2ókép. 2óképb 2óképe óké2p1e2l 2óképé 2óképl 2óképn 2óképpel 2óképr 2óképt 2óképz ó2k1ér. 2ókérd 2ókére 2ókéré 2ókérő 2ókés ó2k1étt ók1étv ók1gr ók2hiá 2ókia 2ókiá 2ókic 2ókie2 2ókié 2ókif óki2g ók1iga ó2k1igé 2ókií 2ókij ók1ill 2ókim ók1imi 2ókinc 2ókine ó2k1int 2ókiny 2ókio ó2k1isk ó2k1ist 2ókisz 2ókit 2ókiv ók1i2va ók1k2r ók2lim ó1k2lí 2ó1k2ló 2ó1k2lu 2ókock 2ókoco 2ókoe 2ókoh 2ókoll 2ókomé 2ókomf 2ókomp 2ókonc 2ókonf 2ókonj 2ókons 2ókont 2ókony 2ókonz 2ókoo 2ókop 2ókorá óko2r1á2s 2ókorb 2ókore ó2k1org 2ókori 2ókorl 2ókorm 2ókorn 2ókoro 2ókorr 2ókors 2ókoru ó2k1oszl 2ókód ók1ó2l 2ókór ó2k1óv 2óköl ók1ö2lé ók1ö2lő ók1örd ók1ötl ók1pl ók1pr ó1k2rá ók2reá 2ó1k2rém ók2rét 2ó1k2ri ó1k2rí ók2ron ók2ros 2ó1k2rón ók1sk ók1st ó2k1ug ó2kum 2ókup 2ókur óku2sz1ál óku2sze 2ókut 2ókúr ó2k1üg 2ókül 2óküs ók1üzl 2ó1k2vó ól1ajt óla2man óla2pa ó2l1a2pál óla2pol óla2p1osz ól1a2rá ól1azo ólá2b1út 1ó2lál ólás3s ólá2sü ól1átl óleí2 ól1e2se ól1e2sé ól1esh ól1esn ól1ess ól1est óle2ta ólete2 óle2t1ev ó2l1érz ólé2tel ólé2tés óli2ako óli2am óli2s ól1iszo ól1ín óloma2 ólo2m1al ólo2m1á ólo2m1e ólo2mis 1ó2lomr ó2l1osz ólóá2 óló1sl óló1sp ólót2 ó2l1öl ó2l1ör ó2l1ös ó2l1ö2z ól1p2r ólu2m1e ólus3s ólu2szá ól1üt ól1üv ólya2ga ólyag1g óly2á óm1abl ó2m1a2cé 2ómagn óm1akn óm1all 2óman 2ómara 2ómarc ómaren2 2ómarh 2ómark ómas2 óma1sp 2ómass 2ómate óm1a2to ó2m1au 2ómax 2ómág óm1áll 2ómárk 2ómárt 2ómáz óm1b2r óm1e2gy ó2men. 2óméd 2ómél óm1éle ó2m1ép 2ómére 2óméré 2ómérg 2ómérk 2ómérn 2ómérő 2ómérs 2ómérté ómiac1 ómi2as ó2m1i2b ómi2g ó2m1igé 2ómi2k óm1iko 2ómin ó2m1i2ono ó2m1i2ont ó2m1i2p 2ómis ó2m1isk ó2m1ist ómi2sz ó2m1i2z 2ómod 2ómog 2ómoh ó2m1ola ó2m1old 2ómond 2ómoni 2ómono 2ómont 2ómor 2ómos ó2m1osz 2ómot ó2m1ox 2ómoz óm1öt óm1őr óm1pr óm1üt óm1üz óműt2 2ónad 2ónag óna2kás óna2k1e2 óna2kol ón1alj. ón1aljak ón1aljá ón1aljo ón1alju 2ónap óna2pa. óna2pá ó2n1apába óna2pe ón1arc ó2n1asp ón1aszt óna1t2 2ónav óná2l ó2n1áll ó2n1álo ónás1s ón1br óne2d ón1ez 1ó2néé 2óném ón1épí 1ó2néra ón1érc ó2nérd 1ó2néró óné2v1á 2ónéz óni2g ó2n1igé ó2n1ist ón1odv 1ó2nokul 2ónor ón1ox ón1ön ó2n1ör ón1öt ónőé2h ón1pr ó2n1u2t ón1ür 2ónya 2ónye 2ónyil 2ónyitá 2ónyitó. 2ónyí 2ónyo 2ónyu 2ónyú ó1o óo2dú óo2ka óo2ká óo2k1i2 óo2ku óo2la óo2li óo2pe óo2ra óo2ri óo2ro óo2vi óo2xi ó1ó óó2la óó2lá óó2li óó2lo óó2ra óó2ri óó2sá óó2vá óó2vo óó2vó ó1ö óö2bö óö2ko óö2kö óö2lé óö2lő óö2rö óö2ve óö2zö ó1ő óő2re óő2ré óő2ri óő2rö óő2rü óő2sé óő2sö ó2p1a2da ó2p1alk óp1anal ó2p1a2no óp1ant ó2p1any óp1a2rán óp1áll ópcsa2p1 ó2p1ef ó2p1e2g óp1elo ó2p1id óp1ind ó2p1i2o óp1i2rá ó1p2lak ó1p2las ó1p2lu ó2p1ob ó2p1o2la ópo2rad óp1óra ó1p2ri óp2rod óp2rop ó1prób óp1t2r ópus3s ó2p1új óp1üv ó2rabé ór1ace 2órada óra2dat ó2raib ó2raié óra2iér ó2raih ó2raii ó2raij ó2raik óra2iké óra2iko ó2raim ó2rain ó2raip ó2rais ó2rait ó2raiv 1ó2raje 2órajo 2órajz óra1kv ó2rala ór1alk ó2ramo ó2r1ani ór1ant óra1p2l ór1arc 1órare óra1s2p ó2r1a2tom 1ó2raü 1óráén ór1ágg ór1á2gy 1órákh 1ó2ráki ó2r1ál 1ó2rámé 1ó2rámo 1órámr ó2r1á2p órá2se 2óráta ór1átv ór1br ór1ege ó2r1e2gy ó2r1e2le ór1ell ór1elm ó2r1elo ó2r1e2lő ór1elv ór1emb ór1eml ó2r1e2r ó2r1e2set ó2r1e2tá ó2r1e2té ó2rezü ór1é2je ó2r1é2l ór1é2ri óré2vek ór1fl órhá2zot óri2aka óri2al ó2riási óriás3s óri2ch ó2r1id ó2r1int ór1i2onn ór1i2ono 2órip ó2r1i2pa ó2r1i2si ó2r1isme 2órit óri2z ór1izo ór1í2j ó2r1ír ór1í2z ór1kl órmé2s ór1o2ká ó3roké ór1o2ki óro2kok óro2koz ór1o2ku ór1okú ó2r1osz ó2r1o2x ó2r1óda óró2dáj órói2ko óró1p ór1ósá 2óróz ó2r1ö2l ó2r1öml ó2r1ös ó2r1öt ór1őr ór1p2r ór1trá óru2mag óru2me ó2r1u2r óru2sab óru2san óru2se órus3s óru2sü óru2s3z ó2r1uta ó2r1ú2s ó2r1út ór1ün ór1ü2v ór1üz 2ósabl ó2s1a2d ó2s1a2g ó2s1alj ós1alt ós1amn ó2s1apr 2ósar ó2s1arcot ó2s1asp ós1ass ó2s1atl ó2s1au ósa2vo ó2s1ábr ó2s1áf óság1g ó2s1áll ós1á2lo ó2s1á2ro ós1áti 2ósáto ós1bl ós1br óscsap1á2 2óseb ós1e2gy 2ósej ós1elj ós1elm ós1e2lő ós1els ós1elv óse2m ós1emb ós1emi ó2s1en óse2p ós1epo ós1erő ó2s1es ó2s1e2t ó2s1ez ó2s1é2l 2ósém ós1é2ne ó2s1ép ó2s1ér. ó2s1érte 2ósét ósé2táka ó2s1é2te ós1étk ós1étt ós1fr ó2s1i2d ósi2g ós1ige ósi2kerb 2ósikl ós1ind ós1inf ósi2p ós1ipa ós1iro ó2s1isk ós1ist 2ósík ó2s1ính ós1í2rá ós1í2ró ó1s2kat ós2kic óski2s ós1kl ós1kv ós2lag 2óslá ó1s2ni 2ósokas 2ósokko 2ósoks ós1oli 2ósor ó2s1org ó2s1orj ó2s1orm ó2s1ott ó2s1ov ó2s1ó2r ó2s1ö2l ó2s1ös ó2s1öt ós1őr ó1s2pec 2ó1s2pek 2ó1s2pir ós1pl ó1s2pu ós1s2k ós1s2p ós3sze ós3szö 2ó1s2tab ó1s2tad ó1s2taf 2ó1stand 2ó1s2tat 2óstá ós2tább ó1s2tád ó1s2tát ó1s2tég 2óstí ós2topo 2óst2r ós1tré ós1tri ó1stru 2óstú 2ósug ó2s1u2r ó2s1u2t ós1úr. ós1ú2ri ós1úrn 2ósül 2ósür ó2s1üs ó2s1üz 2ósűrí 2ósza ó2s3zac ósza2k1ü ó2sz1a2lap 2ószá ószá2gol 2ószed 2ószeg ó2sz1e2gű 2ószek 2ószel 2ószem 2ószen 2ószer. 2ószere ósze2r1e2pé 2ószerk 2ószerv 2ószerz 2ószez 2ószé ószé2n1é2 2ószi ó2szima 2ószí 2ószk ósz2l 2ószob 2ószoc 2ószof 2ószol 2ószon 2ószó 2ószö ó2sz1ös 2ósző 2ószp ós3zs 2ószt ó1sz2tá ószt2rá 2ószú 2ószü ó2sz1üg 2ószűk 2ószűré 2ószűrő ó2s3zűrt ósz2v ót1adó 2ótag. 2ótaga óta2gal 2ótagb 2ótag1g 2ótagi 2ótagj 2ótagk 2ótagn 2ótago 2ótags 2ótagu ót1ajk 2ótalap 2ótalá ót1alk ó2t1alm 2ótan ót1anti 2ótap 2ótar ótas2 ó2t1ass 2ótat ót1a2ur 2ótax 2ótág ót1á2ga ót1ágg 2ótáp ótára2d ótá2r1ada 2ótáro 2ótárs 2ótávc 2ótávi2 ótá2v1ir 2ótáví 2ótávk ó2t1e2g ó2t1elh ó2t1e2lő ó2t1emb ó2terd ót1égé ó2t1é2ké óté2t1ö2 ót1fr ó2t1i2d óti2g ó2t1igé ót1ill ó2t1im ó2t1ing ót1i2pa óti2sz ó2t1í2r ó2t1í2v ó2t1íz ót1kr ótlé2ke 2ótoj 2ótol ótol2l1a2d ót1oml 2óton 2ótor ó2t1ors 2ótov 2ótó. 2ótón ót1öko ótőe2 ót2rad ót2raf ót2rak ót2ran ót2rén ót2rik ót2ril ót2rió ót2rom ót1sl ót1sp ótsze2r1ep ótu2sze ót1ülé ót1ü2lő ót1üst ó2t1ü2v ótű2z3s ó1u óu2bo óu2ga óugrás1s óuj2j1a2da óu2ni óu2no óu2ra óu2sz óu2ta óu2tá óu2to óu2tó óu2tu ó1ú óú2jí óú2ré óú2sz óú2ti óú2to ó1ü óü2gy óü2le óü2lé óü2lő óü2nő óü2re óü2rí óü2rü óü2sz óü2te óü2té óü2tő óü2ve óü2ze ó1ű óű2ző 2óvad 2óvag 2óvaj 2óvak. 2óvaks 2óvaku 2óvaló 2óvar 2óvas ó2vat 2óvág 2óvák 2óvál 2óván óvá2r1al óvárosi2h ó2vása 1ó2vási ó2váso 1ó2vásr 1ó2váss 1ó2vást 2óváz óve2r1a óveri2 óve2rip óv1in 1ó2vod ó2vom 2óvon óza1d2 óz1a2dá óz1a2dó 2ózaj óz1akc óza1kr óz1akt óz1a2la óz1arc óza1s óza2t1a2l óza2tan óza2tál óza2tés óza2told óza2t1ü2 2ózav ó2z1á2g óz1áll ó2z1á2ru ó2z1á2rú óz1bl 1ózdi ó2z1e2g ó2z1el óz1em óz1erő ó2z1ex óz1ez ó2z1é2l ó2z1é2te óz1fl óz1fr ózhajói2 óz1imp óz1ing ó2z1i2p ózi2s1e2 ózi2sir ózis3s ózi2s3z ó2z1old ózo2n1a2 ózo2n1á ózo2ni ózós2 ózó1sp óz1őr óz1pr ózsa1k2 ó2z3ser óz3sor óz3sz óz1t2r 2ózuh ó2z1u2r ó2z1u2t óz1ú2s ó2z1út óz1ü2g óz1ül óz1ü2z 2ö. ö1a ö1á öb1a2n öb1ál öb1á2r öb1át öb2b1a2 öb2b1á2 öb2b1eg öbbe2l öb2b1ele öbbe2m öbb1eme öb2b1e2r öb2b1esz öbb1eve öb2bél öb2bid öb2b1is öb2bí öb2b1ol öb2b1os öb2bot öb2bó öb2bö öbbü2 öb2b1ül ö2b1ef ö2b1eg ö2b1e2l ö2b1e2m ö2b1e2n ö2b1er ö2b1él ö2b1ér. ö2b1érté ö2b1érz öb1fr ö2b1i2d ö2b1ing ö2b1int 1öbli 1öblö öb1or öb1ón ö2böll 1öböltő öc1aj öccs1a2 öccs1i ö2c1ép ö2c1éve öc3he öc3hö öció2 öc1őr ö2cs1a öcs1éj öcs1ék ö2cs1é2te ö2csiz öcs1izz öcs1ó ö2cs1ö2l öcs1ű2r öc3sz öd1a2l öd1a2n öd1ar öd1á2l öd1ár ö2d1ef öd1ell ö2d1em öd1e2vé ödé2m1o ödé2sa ödés3s ödé2s3z ö2d1é2ves öd1é2vén öd1é2vér öd1gr öd1íz öd1os öd1óc öd1ó2r öd1sp öd1u2s öd1új öd1ú2s ö2d1üv ö2d1űz öd3zá ödzáró2 öd3zu ö1e ö1é öfés3s ög1ab ög1a2c ög1a2d ög1ag ög1a2k ög1a2l ög1a2n ög1ap ög1ar ög1as ög1a2t ög1áb ög1ág ög1á2l ög1á2r ög1át ög1dr ö2g1e2g ö2g1e2kéi ög1elb ö2ge2leme ö2g1elf ö2g1elha ö2g1elm ö2g1elo ö2gemel ö2g1er ö2g1esz ög1e2vé ö2g1é2g ög1ékt ö2g1é2p ö2g1ér. ö2g1érs ög1érté ögés3s ög1fr ö2g1id ö2g1i2m ög1inf ö2g1ist ö2g1iva ö2g1i2z ög1ín ög1ír ög1ív ög1kr ög1o2l ög1op ög1o2r ög1os ög1ó2r ög1öli ög1ölö ö2g1öv ög1pr ögre1p2 ög1sk ög1sp ög1tr ög1ud ög1u2n ög1u2t ö2g1üg ö2g1üs ö2g1üt ö2g1üv ö2g1üz ö2g1űz ög3ya ö1i ö1í öj2tél öj2t1o ök1ab ök1a2g ök1a2k ök1a2l ök1a2n ök1a2p ök1ar ök1as ök1a2t ök1au ök1a2v ök1ág ök1ál ök1á2p ök1á2r ök1át ök1áz ök1dr ö2k1e2d ö2k1e2g ö2k1eke öke2l ök1ela ök1ele ök1elh ök1elm ök1eln ök1elő ök1elv ö2k1e2m öke2né öken1s ök1erd ö2k1e2resz ö2k1e2rő ö2k1es öke2vés ö2k1ez ö2k1ég ö2k1ékn ök1éks ök1é2les ö2k1ép öké2r1e2l öké2r1em ö2k1é2rez ö2k1é2rés ökés3s ö2k1é2te ö2k1é2ve. ö2k1é2vek ök1é2vet ök1fr ök1gl öki2d ök1ide ök1ido öki2g ök1iga ö2k1igé ö2k1ikt ö2k1i2na ök1ind ö2k1ing ö2k1int ö2k1i2o ö2k1i2p ö2k1iro ö2k1is ö2k1iz ök1íj ö2k1ír ök1ív ök1íz ök1kl ök1k2r 1öklű ök1ok ök1old 1ökoló 1ökon ök1o2p ök1o2ro ök1orr ök1ors ök1o2v ök1ó2r ök1óv 1ökör. ökö2rö ökőár1a2d ökőé2 ök1pr 1ökrös 1ökrü 1ökrű ök1sp ök1sr ökszi2l1 ök1t2r ök1u2n ök1u2r ök1us ök1u2t ök1új ök1úr ök1út ö2k1üg ökü2l ö2k1ülé ö2k1ült ö2k1ü2t ö2k1ü2v ö2k1üz öl1a2d öl1ag öl1a2j öl1a2k öl1al öl1ap öl1a2r öl1au öl1a2v öl1á2g öl1ál öl1á2m öl1á2p öl1á2r öl1á2s öl1át öl1á2z öl1br ölcsa2l ölcs1á2p ölcs1á2r ölcs1ell öl2csev öl2csid öl2csiz öl2cs1ok ölcs1ol öl2csos öl2csüg öl2csül öl2dab öl2d1a2d öl2d1a2k öl2d1a2la öl2d1alj öl2d1alk öl2d1a2n öl2dap öl2d1as öl2d1á2 öl2deg öl2dep öl2dev öl2d1éd öl2dél öl2d1ing öl2dip öl2d1o2r öl2dos öl2d1ó2 öldő2 öl2dőr öl2dős öl1dró öl2dur öl2d3z 1ö2l1e2b öle2gel öleg1g ö2lel ö2l1e2r ö3l2e3sü öle2t1á2 öle2t1el öle2to öle2t1u ö2l1e2v ölé2d ö2l1éde 1ö2léé ö2l1é2g ö2l1é2kes ö2l1ékí ö2l1él. ö2l1é2le ö2l1é2lé ö2l1élh ö2l1é2li ö2l1élj ö2l1éln ö2l1éls ö2l1élt ö2l1élv ö2l1éme ö2l1é2neke ö2l1é2p ö2l1ér. ö2l1é2red ö2l1é2rek ö2l1é2rezn ö2l1éré ö2l1érh ö2l1é2ri ö2l1érj ö2l1érk ö2l1érl ö2l1érn ö2l1érs ö2l1érte ö2l1érté ö2l1értü ö2l1é2rü ö2l1érv ö2l1érz ölés3s ö2l1é2tet öl1fr ölgyá2 öl2gyer ö2l1i2d öli2g ö2l1iga ö2l1igé ö2l1igy ö2l1ij ö2l1il ö2l1im ö2l1i2n ö2l1i2p ö2l1i2r ö2l1i2s ö2l1i2ta ö2l1itt ö2l1iz öl1í2r öl1í2v öl1o2c öl1o2k öl1ol öl1or öl1o2s öl1ó2v ölö2ki ö2l1ökl ö2l1öl öl1önt ö2l1ör ö2l1ö2v öl1őrl öl1őrö ölpárba2 öl1p2r öl1sk öl1sr öl1st öl2t1ad öl2taj ölt1ala ölt1alj ölta2n öl2tid öl2til öl2tí öl1tro öl2tur öl1u2g öl1uj öl1u2s öl1u2t öl1új öl1ús ö2l1üd ö2l1üg ölü2le öl1ülté ö2l1ültö ö2l1ülve ö2l1üs ö2l1üt ö2l1üv ö2l1üz ö2l1űz ö2ly1a2 ö2ly1á öly1e2g ö2lyel öly2föl öm1a2d öm1a2g öm1al öm1a2n öm1a2p öm1ar öm1au öm1áb öm1ág öm1áh öm1ál öm1áp öm1á2r öm1á2t öm1áz öm2b1a2c öm2b1ak ömba2l öm2b1a2n öm2baz öm2b1á öm2bec ömb1ele öm2b1e2m öm2b1es öm2bék öm2b1i2d öm2bin öm2bí öm2b1os öm2b1ó2 öm2bú öm2bür ö2m1e2b öme2g1a2 ömeg1e2r öme2gesz öme2g1ék öme2gép ömeg3g öm1egy ö2m1e2l ö2m1ember ö2m1emel ö2m1e2r öme2s ö2m1ese ö2m1este ö2m1ég ö2méhs ö2m1é2l öm1é2nekb ö2m1é2neke ö2m1é2neké öm1é2nekh ö2m1é2nekk ö2m1é2nekr ömé2ny1ü ö2m1ép ö2m1ér. ö2m1érte ö2m1érté ömés3s öm1gr ömi2g ö2m1igé ö2m1in ö2m1i2p ö2m1i2ta ö2m1itt ö2m1izm ö2m1i2zo öm1í2z ömkész1 öm1kl öm1kr ömlés3s 1ömlöt öm1o2k öm1o2l öm1or öm1os öm1ó2d öm1ó2r ö2m1önt öm1p2r öm1sp öm1st öm1tr öm1u2g öm1uj öm1u2t ö2m1üg ö2m1ünn ö2m1üv ö2m1üz ö2m1űz ön1ab ön1a2d ön1a2g ön1a2j ön1a2k ön1a2l ön1am ön1a2n ön1a2p ön1ar ön1as ön1at ön1au ön1a2v ön1az ön1áb ön1ág ön1ál ön1ám ön1á2p ön1á2r ön1á2t önát1a2dó. önát1é ön1áz önbé2két. ön1bl ön2c1ál ön2ch ön2cő önc3ség önc3sz ön2cz ön2dab ön2dap önde2m ön2d1ér. ön2d1érn ön2d1érr ön2d1értő ön2d1or ön2d1ő ön2dz ö2n1eb ö2n1e2d ö2n1ef ö2n1e2g ö2n1e2l ö2n1e2m öne2n ön1ene ö2n1e2r ö2n1es ön1e2v ön1ex ön1é2g ö2n1éj ö2n1é2k ö2n1é2l ö2n1é2p ö2nérd ön1éri ön1érl ön1érte ön1érv önés3s ön1ész ö2n1éte ö2n1étt ö2n1év. ö2n1éves ön1évet ö2n1é2vér ö2n1é2vét ö2n1évv önfe2lem ön1f2r ön1g2l ön1g2r öngy1as ön2gyék öngy1ó2r 2öngyö ön2győ ö2n1i2d ön1if öni2g ö2n1iga ön1ige ö2n1igé ön1ill ö2n1im ö2n1in ö2n1i2p ö2n1i2r ö2n1is ön1ita ö2n1i2z ön1íj ö2n1ír ö2n1íz ön2k1ag ön2k1any önk1áru ön2kát önk1olt ön2k1ú önkü2 önmeg1g önna2k ön2n1á önny1a2d önny1á önny1e2dz ön3nyú ön1o2d ön1o2k ön1op ön1or ön1os ön1ox ön1ó2c ön1ó2r ön1óv ön1öb ö2n1ör ö2n1ö2v ön1őr önő2re ön1őz ön1pl ön1pr ön1ps önségü2ké ön1s2p ön1s2t2 önsz2 ön2t1ell öntgen1n öntös3s 1öntöz ön1t2ra ön1t2rá ön1t2ré ön1ud ön1un ön1u2r ön1u2s ön1u2t ön1új ön1ú2s ön1út ön1üd ö2n1ü2g ö2n1ür ö2n1ü2t ö2n1üz ö2ny1a2 ö2ny1á öny1d ö2ny1el ö2ny1id ö2ny1in ö2nyí ö2ny1o ö2nyüz öny2vaj öny2v1a2l öny2van öny2v1á2r öny2v1e2g öny2v1er öny2v1esz öny2vev öny2v1ég öny2vél öny2v1ér. öny2v1ill öny2v1í öny2v1o ö1o ö1ó ö1ö ö1ő öp1aj öp1a2l öp1ál öp1e2l öpe2nyá öp1e2r ö2p1ép öp1ö2lő ör1ab ör1a2c ör1a2d ör1a2g ör1aj ör1a2k ör1a2l ör1a2n ör1a2r ör1as ör1a2t ör1a2u ör1a2x ör1a2z ör1áb ör1á2c ör1á2g ör1á2l ör1á2r ör1á2s ör1á2t ör1br örcs1ál örcs1ell örcskész1 ör2csos 2ördí ör1d2r 2ördü ö2r1e2c ör1e2dz ö2r1ef öre2ga öre2g1ék ör1e2gy öre2j1á öre2k1e2sz öreké2 ö2r1e2l ö2r1em ör1enc ö2r1e2p ö2r1e2r ör1e2se ö2r1e2tető ö2r1e2v ö2r1ex ö2r1ez ö2r1é2de ö2r1é2g ö2r1éj. ör1éks ö2r1é2l ö2r1éneke ö2r1ép ö2r1éré ö2r1é2ri öré2sel öré2t1e2g ö2r1étv ör1é2ve. ö2r1évk ör2fá ör2f1év ör2f1i2p ör2fis ör2f1os ör2főr ör1g2r ö2r1i2d öri2g ö2r1iga ö2r1igá öri2k ör1iko ö2r1ill ö2r1im ö2r1ind ö2r1ing ö2r1inj ö2r1ink ö2r1int ö2r1inv ö2r1i2p ö2r1ira ö2r1i2s ö2r1i2ta ör1itt ö2r1ivá ör1i2zo ö2r1ír ö2r1í2v ö2r1í2z ör1k2l ör2k1öltő ör1k2r örle2ta ör2l1in örny1a2l örny1a2n örny1as örnye2l örny1ele ör2ny1er ör2nyéj ör2nyés örny1í2r ör2nyó ör1ob ör1o2k ör1o2l ör1op ör1o2r ör1os ör1ó2r 2örög örö3g2e 1örömü ö2r1önt ö2r1ör ö2rössze ö2r1ösz örpe1t2 ör1s2p ör1s2v örta2r örtá2v1 ör2t1éks örté2l ör2t1élé ör2t1élő ört1érne örté2sz ör2tív ör2t1ok ör2top ör1ud ör1uj ör1u2n ör1u2r ör1u2s ör1u2t ör1új ör1úr ör1ú2t ö2r1üd ö2r1ü2g örü2l1ék ö2r1ür ö2r1üs ö2r1üt ö2r1ü2v ö2r1üz 1örv. örva2s 1örvb 1örvek 1örvem 1örvet 1örvéb 1örvéh 1örvév 1örvh 1örvn 1örvr 1örvt 1örvü 1örvű 1örvv örz4s ör2zs1á2 ör2zs1e2l ör2zsid ör2zsin ör2zsir ör2zs1í2 ör2zs1o ör2zsó ör2zsu ör2zsú ös1a2g ös1al ös1ár ö2s1el öses3s ö2s1ez ösié2 ö2s1i2p ös1k2r ös1o2l ös1o2r összá2r 1összeg össz1emb 1összes ös3szí öst1arc ö2s1ü2v ö2sz1a2 ösz1e2r öszi2s ösz1isz ö2sz1o2 ö2sz1ő ösz2t1ell öt1ab öt1aj öt1a2k öt1a2l öt1am öt1as öt1a2t öt1áb öt1ág öt1ál öt1ár öt1á2s öt1eké öt1e2m öt1ep öt1es öte2t1a2 öte2tel öte2u öt1e2v öt1e2z ötélé2 öté2lék öté2l1o öt1érté öt1érz ötés3s öt1é2ves öt1fl öt1fr öt1gr öt1i2r öt1í2v öt1kr 1ötlet ötle2t1á 1ötlé öt1ok öt1ol öt1or öt1os öt1ó2r ö2tödb 1ö2tödd 1ö2tödne 1ötödöt 1ö2tödr 1ötödü ö2tös ötőa2 ötőe2 ötőé2 öt1pr öt1sc öt1st öt2t1a2c öt2tar öt2t1as öt2t1ál öttá2r ött1erk ött1érte öt2t1ut öt1uj öt1un öt1u2t öt1ü2l ötve2n1ez ö1u ö1ú ö1ü ö1ű öv1ab öv1ak öv1á2r öv1e2dz öve2g1a2 öveg1és öveg1g öve2go öv1e2r öve2t1a2 öve2teg öve2t1é2l öve2to öve2t1ú övetü2l öve2t1ülé ö2vé. öv1ég öv1é2j övé2nyel övé2nyer övé2nyö övé2sza övé2szá övé2szer övé2szo övé2szö övé2szül övi2dá ö2vih övis3s ö2viv öv1or öv1ó2d öv1ölt övőrés3s öv1ut öz1ab öz1a2c öz1a2d öz1a2j öz1a2k öz1a2l öz1a2m öz1a2n öz1a2p öz1a2r öz1at öz1au öz1az öz1á2g öz1ál öz1á2m öz1á2p öz1á2r öz1á2t özát1é öz1d2r ö2z1e2b ö2z1e2d öze2gel ö2z1egés özegész1 ö2z1e2gy ö2z1ela öze2leme ö2z1e2m öz1eng öz1ent öz1epr ö2z1er ö2z1es öze2t1é2k özető2 öze2t1őr ö2z1e2v ö2z1ég ö2z1é2je özé2k1e2l öz1élel öz1é2let. öz1é2lé öz1élm öz1élt özé2m öz1éme özé2p1a özé2p1el özé2p1em özé2pí öz1épít özé2p1o ö2z1ér. ö2z1érb ö2z1érd ö2z1érh ö2z1é2ri özér2t1e2h ö2z1értele ö2z1érté ö2z1értő ö2z1érv ö2z1érz öz1étk öz1fr özi2g ö2z1iga özigaz1 ö2z1igá ö2z1igé ö2z1igy ö2z1i2ko ö2z1ikt ö2z1ill ö2z1i2m ö2z1inf ö2z1ing ö2z1inp ö2z1int ö2z1inú ö2z1inv ö2z1ira öz1irá ö2z1i2ri öz1iro ö2z1iró öz1isko ö2z1ism ö2z1isp ö2z1i2sz ö2z1iz öz1ír öz1íz özmeg1g öz1ob öz1o2k öz1ol öz1op öz1os öz1ov öz1ó2h öz1ón 1özönt ö2z1ö2r öz1össz ö2z1öv özőa2 özőe2r öz1őr. öz1őrk öz1ő2rö öz1pl öz1p2r öz3sa öz3sá öz3se öz3sé öz3s2k öz3so öz3s2p öz3sú öz3sz öz1t2r öz1ug öz1u2n öz1ur öz1ut öz1ú2r öz1út ö2z1üd ö2z1ü2g öz1ünn ö2z1üt ö2z1üv ö2z1ü2z öz3zs 2ő. ő1a őa2da őa2dá őadás1s őadá2sz őa2do őa2dó őa2du őa2ga őa2gá őa2gi őa2gy őagyag1 őa2ja őa2já őa2ka őa2ká őa2kó őa2la őala2g1 őa2l1e őa2lo őa2mő őa2na őa2no őa2nó őa2nyá őa2pa ő2apar őa2pá őa2po őa2pó őa2pu őa2ra őa2rá őa2ri őa2ro őa2sz őa2to őa2ty őa2ul őa2ur őa2ut őautói2k őa2va őa2xi őa2zo ő1á őá2cs őá2gai őá2gak őá2gas őá2gat őá2gá őá2gé őá2gi őá2go őá2gú őá2gy őá2hí őá2la őá2lo őá2mí őá2po őá2ra őá2rá őá2re2 őár1em őá2ri őá2ro őá2ru őá2rú őá2sa őá2sá őá2so őá2só őá2su őá2sz őá2ta őá2t1á2 őá2t1e2 őá2té őá2tí őá2tü őá2vó őba1p őb2le őb2lo őb2ri őb2ro őb2ró őb2ru őc1ap őc3cso őc1gr őc3há őc3hé őc3hö őc2lu ő2cs1ala őcsa2p1á2g ő2cs1é2j ő2cs1é2rü őcs1őst őcs1s őc3sz őd1a2da őd1a2dá ő2d1a2lap ő2d1au őd1ál őd1á2z ődea2 ő2d1e2g őd1eld őd1elj őd1elk őd1e2lő őd1els ő2d1ép ő2d1érte ő2d1érz ődé2sa ődé2so ődés3s ődé2s3z ő2d1id ődi2g ő2d1iga őd1ind őd1int ő2d1isk ő2d1op őd1ost ő2d1ö2l ő2d1öv őd1őr. őd1ő2ré őd1őrn őd1őrr őd1őrt ő2d1őst őd1pr őd2ram őd2rap ő1d2rá ő1d2res ő1d2rog ő1d2ró ő1d2ru őd1st őd1t2r ő2d1üg ő2d1üz ő2d3zá ő1e őe2ce őe2cs őe2dé őe2dz őe2ge őe2gé őe2gy őe2ke. őe2kék őe2la őe2l1á2 őe2lek őe2lemé őe2lemg őe2lemh őe2lemm őe2lemn őe2lemr őe2lemü őe2li őe2lo őe2lö őe2lőd őe2lü őe2ma őe2me őe2mé őe2mu őe2ne őe2pi őe2po őe2re őe2ré őe2rőd őe2rőé őe2rőh őe2rői. őe2rők őe2rőm őe2rőrő őe2rü őe2sé őe2si őe2ső őe2ta őe2te őe2ti őe2un őe2vé őe2vi őe2vo őe2vő őe2ze ő1é őé2de őé2et őé2ge őé2gé őé2gi őé2gő őé2hem őé2hes őé2ji őé2ke őé2ké őé2kí őé2lé őé2lő őé2lű őé2nekb őé2neke őéne2kest őé2neké őé2nekk őé2nekr őé2pí őé2pü őé2rem őé2ren őé2rez őé2ré őé2ri őé2tek őé2va őé2ve. őé2vek őé2ves őé2vet őé2véb őé2vén őé2vér őé2vét őé2vi őfa2l1a2d őf2la őf2le őf2lo őf2ló őf2lö őf2lu őfo2kál őfo2kér őfo2kin őf2ra őf2rá őf2ri ő1f2ro őf2rö őgé2p1e2l őgépü2l őgép1ülé őgés3s őg2le őg2ló őg2nó ő2g1ö2l őg2ra őg2rá őg2ri őg2ró őguba2 őgy1a2la őgy1art ő2gyeg ő2gyel őgy1e2lő őgy1elv őgy1elz ő2gyin ő2gy1ör őhangá2 őhan2g1ára ő1i ői2dea ői2deá ői2deg ői2deo ői2dén ői2do ői2dő ői2ga ői2ge ői2gé ői2gy ői2ko ői2ma ői2má ői2mi őim1p2l ői2nas ői2on ői2pa ői2ra ői2rá ői2ri ői2ro ő2iru ői2si ői2sz ői2tala ői2talá ői2talé ői2tali ői2tall ői2va ői2vá ői2vó ői2zé ői2zo ő1í őí2gé őí2ja őí2ra őí2rá őí2ro őí2ró őí2ru őí2vá őí2ve őí2vé őí2vi őí2vükb őí2vüke őí2vün őí2vű őí2ze őí2zü őí2zű ője2gy1á2 őjob2b1ol őjob2b1ó őjogá2szi őke1k2 őke1p2 őkes2 őke1sp őke1st őké2p1el őké2s1el őkiá2 őkie2 ők2la ők2le ők2li ők2lí ők2ló ők2lu őkóro2 ő1k2ra ő1k2rá ő1k2reá ők2red ő1k2ré ő1k2ri ő1k2rí ő1k2ro ő1k2ró ők2va őleí2 őlés3s őlőé2r őlőt2 őlő1tr őma2gár őmag1g őma2g1ó2 őműé2h őműé2n őműt2 ő2n1e2ke őn1ems őnéve2 őnév1es ő2ny1a2d őnya2g ő2ny1aga őny1a2la őny1ára őny1á2ro ő2nyát ő2nyef őnye2lem ő2ny1elh ő2ny1ell ő2ny1elo ő2ny1em ő2ny1élv ő2ny1ő ő2nyüz ő1o őo2áz őo2be őo2dú őo2ká őo2k1i2 őo2kí őo2ko őo2la őola2j1á2r őola2je őo2pe őo2rá őo2ri őo2ro őo2so őo2ve őo2xi ő1ó őó2ce őó2ha őó2no őó2nu őó2ra őó2rá őó2ri őó2va őó2vó ő1ö őö2bö őö2dé őö2ko őö2kö őö2lé őö2lő őö2na őö2re őö2rö őö2ve őö2vé őö2vi őö2vö őö2zö ő1ő őő2re őő2ré őő2ri őő2rö őőr2s1égb őőr2s1égn őő2se őő2si őpárba2jo őp2la őp2le őp2lé őp2ne őponc1 őpo2ral őp2re őp2ré őprés1s őp2ri őp2ro őp2ró őp2sz őr1a2dó őr1a2gá őr1agg őr1ajk őraj2t1ól őr1akc ő2r1a2l őral1e őra2n őr1any őr1ap ő2r1a2r ő2r1a2s ő2r1at ő2r1au ő2r1a2z 1ő2r1áb őrádi2ók őr1ágy őrá2k1e ő2r1á2l ő2r1á2p őr1á2ru 1őrbí 1őr1bl 1őr1br 2őrea őreá2li őree2 őre2get őr1e2gye őrei2g ő2r1ekc ő2r1ekh őre2lem őr1elh ő2r1ell őr1e2lőa őr1els őr1elt ő2r1elv ő2r1emb őr1eml őren2d1ő2 őr1enz őreo2 őre1prog ő2r1e2ső őreu2 őreü2 ő2r1ex 1őrezr 1ő2r1ég. 1őrégn 1őr1égt 1ő2r1ékh őr1ékné őr1éks ő2r1é2l őr1épü ő2r1é2ri őré2sa őré2sza 1ő2réü őr1é2ve. őr1é2vek őr1fl 1őrfő őr1fr őr1g2r ő2r1i2d ő2r1if ő2r1i2ga ő2r1i2gá őr1iha őr1ill ő2rim őr1imi őr1i2na őr1ind ő2r1inf ő2r1int őr1i2pa őri2s1á őr1ivá őr1i2zé. ő2rizg őr1izm őr1i2zo őr1ír 1őrjö őr1k2l őr1k2r 1őrlö ő2r1okt őr1old 1ő2r1o2li őr1oll ő2r1or ő2r1osz ő2r1ó2r ő3rög 1ő2rökü ő2röl 1őrömü őr1öng ő2r1ör ő2r1össze 1ő2r1őr ő2r1ő2s 1őrősr ő2r1ő2z őr1pl őr1p2r 1őr1p2s 1őrs. őr2s1ál 1őrsí 1őrsö őr1s2pe őr1spi őr1srá őrs3s őr1sz2 1őrszen őr2s3zöm 1őr1t2r 1ő2r1un 1ő2r1u2r őr1utá ő2r1új őr1úr ő2r1út ő2r1üd őr1üld 1ő2rüle ő2r1üs ő2r1üt ő2r1üz 2őrzősö ő2s1ad ő2s1a2g ős1ajtób ő2s1ajtók ősa2n ős1ana ősa2p ős1arc ős1ass ős1au ő2s1áb ő2s1á2g ősá2l ős1áll ős1ára ős1árv ős1dr ős1e2d ő2s1e2ge ő2s1e2gy ős1elm ős1e2lő ős1elv ő2s1e2m őse2n ős1ene őse2p ős1epi ős1epo ős1e2rej ős1erő ős1ess ős1esz ős1etn ő2s1e2v ő2s1ez ősé2g1e2l ő2s1éger ősé2gés ő2s1ék ő2s1é2l ős1ép ős1fl ős1fr ős1gn ős1gr ő2s1i2d ő2s1if ősi2g ős1iga ős1i2ma ős1i2má ős1imi ős1inf ős1ing ős1int ő2s1i2pa ős1i2ra ős1ist ős1i2sz ő2s1i2z ősí2ka ős1í2ró ős1í2z ős2kál ős1kl ős1k2r ős1kv ős2lat ős2nit ős1ob őso2k ős1oko ő2s1o2l ő2s1op ő2s1org ő2s1os ős1óc ős1óri ő2s1ö2l ős1önz ősö2r ős1örd ős1öre ős1örö ős1örv ő2s1ö2z ős1őr ős1ő2s ős2pec ős2pek ős1p2l ős2pór ősp2r ős2rác ős1sk ős1s2p ős1s2t őssz2 ős3sza ős3szá ős3szeg ős3szek ős3szell ős3szem ős3szen ős3szer ős3szes ős3szék ős3szén ős3szf ős3szi ős3szí ős3szl ős3szo ős3szó ős3szö ős3sző ős3szu ős3szü ős2tad ős2tat ő1s2tát ő1s2teri ős2tég ős2til őst2r ős1tre ős1un ősu2t ős1uta ős1úr. ős1ú2s ősza2k1e ősza2k1ü ősz1e2lő 2őszerk ő2szerő ősz1est őszi2l1i2 ősz1ill ősz1ist őszö2l ősz1ölé ősz1ölő ősz1ölt ős3zse ősz3sir őszt2 ő2s3zűrű őtermo1 őtermosz2 őtes2t1ő őtol2l1a2d ő1t2ra ő1t2ré ő1t2ri őt2ro ő1t2ró őttes3s őt2tés őtt1int őt2t1o2 őt2t1u2 őtűfé2 őtűfél1 ő1u őu2go őu2ni őu2ra őu2rá őu2ru őu2ta őu2tó őu2tu ő1ú őú2jo őú2ré őú2ri őú2ro őú2sz őú2té őú2ti őú2to ő1ü őü2dü őü2ge őü2gy őü2le őü2re őü2rí őü2sz őü2te őü2té őü2ti őü2tö őü2tő őü2ve őü2vö őü2ze őü2zé ő1ű őű2ré őű2ri őű2rö őű2zé őű2ző ővasfé2 ővasfél1 ővár1al őve2r1a 2ővet ővé2res ővé2ret őz1abs ő2z1a2d őz1a2g ő2z1ak ő2z1a2l ő2z1a2t ő2z1au ő2z1ál őz1á2t1e2 őz1bl őzeg1g őze2g1i őz1e2gy 1ő2zekn őz1elo őz1els őz1elv ő2zem őz1emb őz1e2mel ő2z1e2r őze2t1a2 őze2t1eg őze2t1el őze2ter őze2t1o ő2z1ér. őzé2rem ő2z1é2ri ő2z1érl őz1érté 1ő2zié ő2zi2g őz1igé ő2z1in ő2z1iz őz1k2r őz1o2k őz1ol őz1os őz1össz őzőa2 őzőe2l őzőe2r őz1p2r őz3saj őz3sap őz3sát őz3sik őz3sis őz3s2t ő2z3sü őz3sz őz1t2r őz1út őz1üg ő2z1üs ő2z1ü2z őz1ű2z 2p. 1pa 2p1abl pa2cem pa2ch pa1cl pa2csú p1a2dag pad1ala pa2d1as pa2d1á2l pade2 pa2d1el pa2d1em pa2d1id pa2d1iga p1a2dott pa2du. pa2dut pa2dül pae2r paé2r pa1fl pa1f2r pa2ga. pai2dé 2p1ajtó pa2kad paka2r1ó pa2k1e2m pa2k1ér. 2pakku pa1klu pa2k1ó2 pa1k2ré 2p1akta. pak2tal pak2t1e2l pak2t1es pak2t1e2v 2p1akti pak2t1or. pak2t1orr pak2tos 2palag pala2g1ú pa2lapí paláza2d palá2z1adá pa2l1é2l 2p1alf 2p1alg 2p1alle 2p1almá pal1ud pam1ass pa2m1ur pamu2ta pana2d pa2n1ag pa2nal pan1ala pa2n1á2r panás1s pan1d2 pang1g pa2n1il pan1kro p1anny pa2nol pans2 pansz2 pan1szt pa2nü 2p1a2nya p1a2nyu pa2p1ad pa2p1a2pa papa2r pap1ara pa2p1aszt pap1áll pa2p1il pa2p1i2na. pa2p1i2p pa2p1o2ku pa2pö pap1p2 pa2p1ur pa2p1u2t pa2pú 2para. para2je par1a2la 2parann 2p1a2rany 2pa2r1a2r pa2r1ágá pa2r1ágn pa2r1ágo pa2r1ágv 2paráh 2p1a2ráj par1áll 2parár 2paráv 2parb 2p1arc. 2p1arca 2p1arcc 2p1arch 2parci 2p1arco 2p1arct 2p1arcu 2p1arcú pa2r1el pa2r1é2l 2parig 2paril pa2r1ill par1isk par2k1a2l par2k1á par2kel par2k1ing par2kov par2kó par2kön par2k1ö2v par2k1ő2 par2k1ü 2paros. 2parosi 2paroso pa2rö pa2rő 2parr pars2 par2tem par2t1ol par2t1ő2 pa2r1ü2 pa2rű past2 pasz1alj pasz1alt pa2szas pat1ada patakö2 pa2t1alk pat1anya pa2t1ara pat1álc pa2t1árk pa2t1e2g pa2t1ell pate2s pa2tél pa2t1ér. pa2t1érd pa2t1ére pa2t1érte pa2tid pa2t1int pa2tir 2p1atka. 2p1atkánk pa2t1old pa2t1olt 2patombe pa2t1osz pa2t1otth pa2t1ut pa2tús patü2 pa2t1üz 2p1a2tya 2p1a2tyá 2paur pau2ra p1a2vat pa1wh 2p1a2xi 1pá 2p1á2bé 2p1ábr 2páca 2pácá pá2c1e pácé2 pá2c3h pá2c3só pá2csö pá2csü 2p1ág. 2p1á2ga 2p1ágg 2p1ágy. 2p1á2gya. 2p1á2gyac 2p1á2gyad pá2gyaib pá2gyaid pá2gyaih pá2gyaik pá2gyaim 2p1á2gyain pá2gyair p1á2gyakb pá2gyaké pá2gyaki p1á2gyako 2p1á2gyakr pá2gyakt 2p1á2gyal 2p1á2gyam 2p1á2gyan pá2gyast 2p1ágyaz 2p1á2gyáb 2p1ágyál 2p1á2gyán pá2gyátó 2p1á2gyáv 2p1ágyb 2p1ágyc 2p1ágye 2p1á2gyé 2p1ágyf 2p1ágyga 2p1ágygo 2p1ágyh 2p1á2gyi 2p1ágyj 2p1ágyk 2p1ágyl 2p1ágym 2p1ágyná 2p1á2gyos 2p1á2gyö 2p1ágyp 2p1ágyr 2p1ágys 2p1ágyt 2p1á2gyu pá2gyú 2p1ágyü 2p1ágyv 2p1ágyz 2p1ájt pála2 pá2lab pá2lac 2p1álar 2p1áldo pá2le p1álla. 2pállap 2p1állí 2p1állom 2p1állv 2pálmo pá2lü p2ály pálya1s 2pámi 2p1á2mí pá2mu pána2 pá2naf pá2n1am pá2n1an pá2nar pá2n1as pá2nár pá2n1e2 pá2nék pá2nil pá2nir pá2nis pá2ní pán1kré 2pánkt pá2n1ó2 pá2nö pá2nő pán1sz pánte2 pán2tek pán2t1el pá2nü pá2ny1ad pá2ny1a2l pá2ny1a2n pá2nyar pá2nyat pá2nyau pá2nyaz pá2ny1e2 pá2nyérd pá2nyim pá2nyö 2p1á2po pár1adó 2páras 2páráé pár2d1a2 pár2del pá2r1e2 pá2r1i2p pá2rő pár1s2 pár2t1ag 2pártal párt1any pár2tari pár2tál párte2 pár2t1el pár2tem pár2tes pár2tet pár2tél pár2t1ér. pár2t1é2te pár2tiz pár2tott pártö2 pár2tök pár2t1ő pár2tus pártü2 pár2t1üz pá2ruh pá2ruk páru2t pár1utu pá2rún pá2rü 2p1á2sás pá2s1e pá2sir pá2ső pás3s pá2s1ü2 2p1ásván pá2t1a2 pá2tá pá2tel pá2t1e2m pá2tis 2p1átka. 2p1átkát 2p1átkáv p1átlag 2p1átló pá2t1or 2p1átrak 2p1átté pá2t1uk pát1úrt pá2tü 2p1átvét pba2l1 pbé2r1e2l pb2lo pb2ra pb2ri pb2ro pci2ófo pcsa2p1á2g pcső2s1orr pda2l1ad pdal1an pda2leg pda2lel pda2l1es pda2lén pda2l1í2 pd2ra pd2rá pd2ro pd2ró 1pe pea2p pea2r peca1 pec3c pe2cz pe2ed 2p1eff pe1fl 2p1e2gese pegész1 pe1g2r 2p1egz 2p1e2ke. 2p1e2kei pe1k2ré 2pektr pe2lál pe2lár pe2lekt 2pelemb 2pe2lemek pe2lemet 2p1e2lemé 2p1e2lemg 2p1e2lemh 2p1e2lemi 2p1e2lemk 2p1e2lemm 2p1e2lemn 2pelemr 2p1e2lemz pel1eró pele2t pel1ete 2p1elgo 2p1elha 2p1elhel 2peljá 2p1elleb 2p1elnev 2p1elny pe2los 2p1e2lö 2p1e2lőa 2p1e2lőá 2p1e2lőe pe2lőg 2p1e2lőh pe2lőí 2p1e2lőjá 2p1e2lőjeg 2p1e2lől 2p1e2lőz 2p1elren 2p1elsö 2p1eltá 2p1elto 2pelu 2p1elv. 2p1elvá pel2v1el 2p1elven 2p1elvh 2p1elvi 2p1elvo 2p1elvű 3pely 2p1elz 2p1ember 2p1e2mel 2p1e2més 2p1eml 2p1ems 2p1e2mu 2p1e2ner 2penged pen3ny. pen3nyb penny1ér pen3nyh 2p1ennyi. pen3nyj pen3nyk pen3nym pen3nyn pen3nyr pen3nyt pen3nyv pe2nya penyá2 pe2ny1e2l pe2ny1e2r peo2l peo2p peó2r pe2pe. 2p1e2pé pe1p2r pe2r1akt per1all pera1p2 perc1c per2c1el per2c1in 2perdő perec1c peregyez1 p1e2rej pe2r1elk pe2r1e2lőf pe2r1e2lőké pere2mért per1evé 2perfa pe2rid pe2r1il pe2r1i2na pe2r1i2ná pe2r1ind pe2r1ing pe2rí per1k2 p2erl per1okt pe2r1os pe2r1o2x pe2r1ó2r pe2rőd pe2rőf pe2rői pe2rőm pe2rőn pe2rőr 2p1e2rős pe2rőt pe2rőv per1st persz2 pe2rú pe2r1ü2g perü2l per1ülő per1ült p2erz pe2s1ebbel pe2s1ebbő pe2sésig 2p1e2sésű pe2sői pe1s2p 2p1esszév pes2t1a2 pes2t1er pe2szak pe2sz1ál pesz1ell pe2sz1elv pesze2m pe2szeme pe2szu pe2sz1ü2l pe2tal pe2t1a2n pet2á petet2 2petete 2peteté 2p1e2tető 2p1e2tika 2petim 2p1e2to pet2t1i pe2tűd pe2ug pe2vő 2p1ezr 1pé pé2csu pédü2 pé2d1ülé 2pééb 2pééi 2péén 2p1é2ge 2p1é2gé pégés3s 2p1é2hen 2p1é2hes 2p1é2het 2p1éhs 2p1éj. péje2 pé2j1eg 2p1é2ji 2p1éjj pé2k1as pé2k1au pé2k1á2 pé2k1er pé2k1ék pé2k1é2l péké2t pé2k1éte pé2k1i2n pé2kis 2p1él. 2p1élb pé2le. pé2lei pé2lek péle2l pél1ele pél1elmei pé2len pé2let 2p1é2lé 2pélm 2p1éln 2p1é2lő 2p1élt 2p1é2lű 2p1élv 2péneka 2p1é2nekb 2pénekd 2p1é2neké 2pénekf 2pénekg 2p1é2neki 2pénekí 2pénekj 2p1é2nekk 2p1é2nekn 2p1é2nekr 2p1é2nekt 2p1é2nekü pé2ny1el pén2z1a pén2z1á2 pén2zs pé2p1i2p 2p1é2pí 2pépü 2p1érc 2p1érd 2p1é2ré 2p1érh pé2rig 2p1é2rin 2p1érm 2p1érn 2p1é2rő. 2p1érr 2p1érte 2p1érté 2p1értő 2p1érv 2p1érz pé2s1aj pé2sal pé2s1e2l pé2sés péskész1 pé2so pés3sza pé2s1ü2t pé2sza pés3zaj pész1ak pés3zav pé2sz1á2 pé2sz1emb 2p1é2széné pé2szin pé2sz1o pé2sz1ö pész3s pé2szu pé2szú pé2sz1ű péta1 pé2tel 2p1étk 2pétl p1étla 2p1étr 2p1étv 2p1év. 2p1évb 2p1é2ve. 2pévei 2p1é2vek pé2ven pé2ves 2p1é2vet 2p1évf 2p1évh p1évk 2p1évn 2p1évr 2p1évs 2p1évt 2p1évv pé2zak pé2z1ár pé2zel pé2z1e2m pézi2 pé2zid pé2zin pé2ziz pé2zol pé2zsa pé2zu p2f1ép pfi2úé pfi2úkér pf2lo pf2ló pf2lu pf2rá p1f2re p1f2ri p1f2rí p1f2ro pf2ru pf1st pg2ra pg2ru pg2rü pha2de p2ha2i 1phanész 1p2hed phelyü2kü 1p2hia2 p2hic 1phila 1p2hoi phó2i 1pi pi2aa pi2aá pi2aba pia2cel pia2cél pia2cik pia2c3se pi2ad pi2ae pi2aé pi2ag pi2ah pi2aj pi2akén. pi2al pi2am pi2ao pi2aö pi2ap pi2aré pi2asza pi2at pi2aú pi2aü pi2ave pi2az 2picc pi2ce. 2picl pida2 pi2dan pi2dea pi2deá pi2dei pi2den pi2deo 2p1i2dom 2p1i2dő 2p1i2du pi2eg pi2er pi2ég pi1fr 2p1i2ga 2p1i2ge 2p1i2gé 2pigo 2p1ihl pi2k1ö pil2i pilis3s 2pilles 2p1illet 2pillés 2pillu 2p1i2ly 2p1i2má 2p1i2mi 2p1imm pinak2 pina1p 2pind 2p1inf pin2gas pin2g1á2r pin2gelj pin2gép pin2gos 2p1ingó 2pinj 2p1inp pin2tác pin2t1or pin2tőr pintu2 pin2tur pi2nü 2p1inv 2p1inz pion1n pi2óa pi2óá pi2óe pi2óf pi2óg pi2óki pi2ól pi2óma pi2ómé pi2óo pi2óp 2pipai 2pipar. 2p1i2pará 2piparb 2piparh 2piparn 2piparr 2p1irh 2p1i2rod pisau2 2pisko pi2s1op 2p1iste 2p1isza piszkos1s pi2t1aj pi2tala pi2tall pi2t1a2n pi2t1á2p pi1tä pi1the pitos1s pi2t1ü2 pi2vás 2p1i2zé 1pí pí2gé pí2já pí2né pí2r1a2 pí2rá pír1ál pír1á2r 2p1írás pí2r1e2 pí2r1in pír1i2s pí2rí pí2rol 2p1í2ró pí2r1ö2 pír1s pírt2 pír1tr pí2rü pí2rű 2pítél 2pítm pítőa2 pítőe2l pí2ve pí2ze pí2zé pí2zü pí2zű pke1p2 pke1s2 pkés1s pkia2 pkiá2 pkie2 pk2la pk2li pk2lí pk2lu pk2rá pk2re pk2ré pk2ri pk2ro pk2ró pk2va pk2vó p2lacc pla1k2l pla2pal plap1áll pla2p1osz p2latf 1plazmá pleí2 ple2t1a2n ple2t1e2l pléé2 plé2has pli2s3zá plo2m1e plo2mén plom1ol plót2 pló1tr plő2sa plő1stá plő2szár plu2m1e p2lur pmás1s pmeg1g 1po po2be pocsi2 po2cs1iz po2da. po2dz pogás1s po2in poki2 2p1o2k1ir po2kí 2p1okle po1k2ló 2p1okm poko2la pokol1l 2p1okta 2p1oktá polás1s pol2can polc3c pol2c3s 2p1olda polóá2 2poltár 2p1oltás 2p1olti 2p1oltó 2polvas po2n1a pon2c3so po2nel pon2g1e poni2 po2niz pon3n po2n1osz pon2t1a2d pon2tag pon2t1a2l pont1any pon2tál pon2tár ponte2 pon2t1el pon2tem pon2ten pon2tes pon2ték pon2t1ér. pon2t1éte pon2tisz pon2tí pon2t1ő2 2ponz po2ol po2p1a2 po2p1á2 2popc 2po2pe pop1el popi2 po2pik po2p1in po2p1ir po2pis po2p1o2l pop1p2 pop1s popsz2 2pop1t2 po2pú po2pü po2r1a2c po2r1ag po2rakk por1ala por1all po2ram pora2n por1any po2r1a2r po2rat por1ács por1áll por2can por2c3h por2c3sí pore2 po2rec po2res por1f2 por1g2 po2rid 2porie po2rih po2r1il po2r1i2m po2r1in por1k2 po2rö po2rő por2tamb por2t1au por2t1á2rá por2tárb por2tárn por2tej por2t1em por2tet por2tél por2t1ér. por2t1érk por2t1i2k por2tiz por2t1ív por2tur por2t1usz por2tut por2túr por2tű po2rü 2p1orvo pos3szo pos3szö 2postol 2p1osty po2sü po2sze po2szí 2p1oszl posz2tü po2tab po2tad po2t1a2l po2tan po2t1a2u po2t1e2l po2t1inf po2t1ip po2t1í2 po2tol po2tö po2tus po2tü po2vi 1pó pó2ce pó1fr pói2g pó2k1ass pó2kau pó2k1e2l pó2kem pó2ket pó2k1id pó2kim póki2s pók1isz pó2kiv pó2k1ös pó2k1ú pó2l1an pó2l1á pó2lom 2p1ó2né. pó1p2r p1ó2rad pór1á2sz póre2 pó2reg pó2rem p1ó2riá pó2rö pó2s1or pós3s pó2s1ü2v póta2 pó2t1ad pó2tal pó2t1an póté2r pó2til pótü2 pó2tül 2póün 2p1ó2vó pó2ze pó2z3sá 1pö pö2ka pö2ká pö2kel pö2ker pö2kid p1ö2ko pö2ku pö2kú pö2lye 2pönt pö2ra p1ördö pö2res 3pörg pö2ro pö2r1ő pö2rú 2p1öss p1ötl pötty1in 2p1ötv pö2ve 1pő pőa2n pőá2g pő1bl pő1dro pőe2r pőé2h pőé2l pő1kl pő1pl pő1pr 2p1őr. pő2ri. p1őrj p1őrl 2p1őrn p1őrs 2p1őrt p1ő2rü 2p1őrz pő1sz pp1ada ppai2 ppa2j pp1ajá pp1akk ppa2nad ppa2n1ell ppan1k2 pp1any pp1arc ppa1s pp1áll p2p1árj p2p1á2rok pp1átm p2p1á2to pp1átv p2p1e2gy p2p1e2kéh p2p1elo p2p1elr ppe2r1a ppe2ró p2p1ég p2p1éks pp2hó ppin2g1e2 pp1íg pp1kl pp2las pp2lat pp1o2ly p2p1o2rom ppor2t1á2r ppor2t1e2 ppor2t1ő2 p2p1ó2l pp1órá pp1ön pp1öv pp1ö2z p1p2ref p1p2rem p1p2rez p1p2rém pp2rin pp2rio p1p2roc p1p2rod p1prof p1prog p1proj p1p2ros p1p2rot pp2rób pp1sp p2p1úg p2p1úr. ppví2 ppvíz1 1p2rax p2remi 1p2repa pressz2b 2pret pret2á 1p2rédi p2rép pré2sa pré2s3zá p2riccs p2rius p2rizm prí2m1e2l prí2mem 1probl 1p2roce p2rof 1profe p2rog p2roj 1proje pro2mo p2ropa 1p2rote 1proté 1p2roto 1p2rovo 1próbá pró2d1e pró2dz 1p2róza pru2s1ág pru2se 1p2rüs p2s1a2d psé2gel ps1i2ha ps1í2ze p1s2ká p1s2mi p2s1ón p2s1ö2z p1s2pe ps2pi p1s2po ps1pr ps2rá ps3szó p1s2tá ps2ti p1s2tí ps2to p1st2r ps2tu p1s2tú psza2k1ü psz1any p2sz1as psz1atl p2sz1ág ps3záp p2szég psz2fé 1p2szic p2sz1ill pszis3s psz1k2 psz1old psz1orn p2sz1ön p2sz1ös psz3s pta2d pt1ada pta2n1á2s pta2ne ptá2raj ptáró2 ptá2rór p2t1eg p2t1e2ke. p2t1e2lő p2t1els pte2rál pté2ká pté2k1el p2t1érd pt1i2ma. p2t1i2n p2t1i2o p2t1i2r p2t1í2r pt1kl p2t1öt p1t2rag p1t2ran p1t2rá pt2ré ptu2sze ptu2szi p2t1úrr p2t1üt 1pu pua2d pu2csor pue2l 2p1ugr 2puká pul2tas 2p1u2ni 2puno 2p1u2nó puo2r pu1pr pu2rak pu2ral pu2sad pu2sal pusa2n pus1any pu2sap pu2sál pu2s1átl pu2s1e2 pu2s1érté pu2sik pu2sis pu2sí pu2sol pu2sö pu2ső puss2 pussz2 pust2 pu2sü pu2szag pu2szal pu2s3zár. pusz1é2p pu2szö pu2tab pu2t1a2d pu2tak puta2n 2p1u2taz put1ing pu2tol pu2tód 2p1u2tóp pu1trá 1pú 2p1úrf pú2sz 2p1útb pú2té 2p1ú2ti 2p1útj 2p1útk 2p1útn 2p1ú2to 2p1útp 2p1útr 2p1útt 2p1útv 1pü pü2ge pü2gy pü2kü 2püle püle2t1o 2p1ünn pü2re 2p1ü2rí 2p1üst 2p1ü2te pü2té 2p1ütk 2p1ü2tö pü2ve pü2ze 1pű pű2ző pvá2r1al pw2hi pwhisky2 py2ba py2bó py2do py2ho py2ja py2já py2ka py2ké py2ki py2ko py2ma py2na py2ná py2ra py2ró py1t2h py2tó py2va py2vá pze2t1a2 pze2t1á2 pze2t1e2r pzőa2 pzőe2 pzőé2 2q. 1qa 1qá 1qe 1qé 1qi 1qí 1qo 1qó 1qö 1qő 1qu qu2ae qu2at qu2er qu2ez que2zi qu2éb qu2ie qu2ij qu2il qu2in qu2is qu2od 1qú 1qü 1qű 2r. 1ra raa2d raáta2d ra2bad rab1asz rab1á2ra rab1árb rab1árr ra2b1át ra2b1ele ra2b1ell ra2bid rabi2g ra2b1iga ra2b1igá ra2b1im ra2b1i2na. ra2b1i2ná ra2bind ra2b1int 2rabla ra1bri ra2buj ra2c1aj rac3csa ra2cet ra2cha rac3hig ra2c3hok ra2c3hos ra2c3hot 2r1a2cid rac2kar rac2kit rac2k1ö2 rac2kü ra2dag ra2dalé rada2rad 2radaté radás1s ra2de. r2a3dí 2radíc 2radm 3radósi. 2r1a2dóz ra1drá ra1dru 2r1a2du. ra2dus rae2r raé2derb raé2dere raé2derh raé2dern raé2derr raé2dert raé2r rafikus1s ra1fl 2r1a2ga. ra2gak rag1alo ra2g1ác ra2gáé 2r1a2gán rag2de ragdi2 rag2din ra2gel ra2g1i2na. 2r1agy. ra2gyat 2r1agyn ra2gyon 2r1agyr rai2o 2raizá 2raizi 2raizn 2raizó 2raizu ra2j1a2d ra2j1au ra2j1á2ru ra2j1es ra2jin 2rajkáró 2r1ajkú rajob2 raj2t1e2l raj2t1en raj2zat raj2z1e raj2z1ón raj2z3s 2r1a2kara rak2kép rak2kis ra1k2li ra1klo ra1kló ra1klu 2raknáb 2raknái r1a2kóz rak2re ra1k2ré ra1k2ri rak2rom raktus1s 2r1a2kus r2alab 2r1a2la2g1 2ra2laku ra2lapa r1a2lapú ra2lázá ra2lázó 2r1alb 2r1aljai. 2r1alji 2ralk ralla2k ral2l1akó ral2l1at rallá2 ral2lág ral2lál ral2lev ralo2m1e ra2mab ram1ada 2ramai ram1akk rama2l ram1ala ra2m1any ram1áll ra2m1árá ra2m1árb ra2m1áre ra2m1árh ra2m1árn ra2m1árr ram1b ra2m1éhe ram1ide ram1i2ko ram1ill ra2m1im ram1ina ram1inf ram1ing ram1inj ra2m1i2p 2rammb 2rammet 2rammi 2rammj 2rammn 2rammr 2rammt ra2m1osz ra2m1ó2r ra2mö ra2mő ra2mü 2r1a2nal 2r1a2nat ranás1s ran2csal rancs1ág ran2cse ran2csik ran2cső rancs3z 2rand. ran2dat ran2d1au 2randj ran2dz ra2nek ran2g1a2 ran2g1á ran2ge rang1e2l ran2g1ó2 ran2gye ra2nil ra2nim 2ranka ran2szál ran2sze ransz1omb 2rany. ra2nyag rany1a2la ra2ny1a2n ra2nyap ra2ny1ar r1a2nyáit r1a2nyáka r1a2nyákh r1a2nyákk ra2ny1ál ra2nyás r1anyás. 2ranyb ra2ny1e2s 2ranyé ra2nyél 2ranyh ra2nyid ra2nyin ra2nyir rany1í2r 2ranyk 2ranyn ra2ny1ol 2ra2nyó rany1ó2r ra2nyö 2ranyr 2ranys 2ranyt ra2ny1ü 2ranza ra2óa ra2óá ra2óf ra2ólá ra2óm ra2óp ra2ósz 2rapa. ra2pák 2rapp rap2pin ra1p2re ra1pré ra1p2ri ra1p2ro 2rarann 2r1arany. 2r1a2ranya. 2r1a2ranyá 2raranyb 2raranyn 2raranyr 2r1aranyt ra2rat 2r1arco ra2rén 2r1art 2r1arz ra1s2ká ra1s2l ra1s2pe ra1s2po rassz1e 2rasszoc rast2 ra1s2ta ra1stá ra1str ra2sz1abl ra2sz1aj ra2szas ra2szat ra2szág ra2sz1árr rasz1emb ra2sz1étt ra2szób ra2szói ra2szón ra2szös rasz2t1a2ny rasz2t1el rasz2t1é2te rasz2tö rasz2tü ra2t1a2d rat1ajt rat1a2la rat1alt rat1ará 2r1a2tád rat1áll ra2t1árad ra2t1á2rai ra2t1á2rak ra2t1árb ra2t1árv ratát1a2 ratá2vi ra2t1e2g ra2t1elk ra2t1ell 2ratég rat1ége ra2t1érd rat1érke ra2térte ra2t1érv rat1ing ra2t1ír ra2t1íve 2r1atká 2ratlé 2ratoz. ra1t2ran 2r1attr ra2tür 2raty ra2tya ra2tyá ra2tyu ra2udi 2r1a2uk ra2ulá 2raum rau2n rau2ta rau2tá ra2uto 2r1autó rautóé2 raü2t raü2z 2ravató 2ravú ra2xü ra1ye ra1yé raz1ajt raza2n ra2z1any ra2zel ra2z1olt ra2zono 1rá rá1bre rá2cal rá2c1e rá2c3h rá2c1i2n ráci2óf rá2cö rá2csala rác3ság rá2csét rá2csir rá2cs1is rá2cú rá2cü rá2d1any 2rádáh 2ráddá 2rádju 2ráfha 2ráfhe 2ráfhi 2ráfid 2ráfre rág1ad 2rágam 2r1á2gaz rág1á2zá rá2gia rá2gil rá2gim rá2gis 2rágí rá2g1osz rágus4 rá2gü 2rágya 2rágyáb 2rágyáé 2rágyáh 2rágyái 2rágyáj 2rágyák 2rágyán 2rágyár 2rágyás 2rágyát 2rágyáv rá2gyu ráí2r ráj2k1a2 ráj2kel ráj2k1ó2 rá2jü rá2kát rá2k1ered rá2k1e2s rá1kla 2rákog rá2k1osz rá2k1ón rá2k1ó2r rá1krá rá1krét rá2l1ak rá2l1a2l rá2lana 2r1álar rála2t1e rá2lál rál1átl r1álcá 2r1áldá rá2lid rá2lim rá2lí 2r1állam 2r1állap 2r1állat 2r1állí 2r1állom 2r1álma rá2lü rá2lyal rá2ly1a2n rá2lyap rá2ly1as rá2lyav rá2lyús rá2lyút rá2mö rá2nal rá2n1a2n rá2n1a2t rá2n1ár rá2nás ránc1c rá2nék rán2gál rá2niz rá2ní rán1kl rá2nol rá2not rá2n1ó2 rán2sav ráns3s rán2t1ak rá2nü rá2ny1a2d rá2nyag rá2nyako rány1alt rá2ny1a2n rá2ny1ap rá2nyar rá2nyaz rá2ny1ár. rá2nyérm rá2nyérz rá2ny1í2r rá2nyol rá2nyó rá1p2l 2rápo rá2pol rá1p2r 2r1á2rad rár1a2dá 2r1á2rai 2r1á2ram 2r1á2ras 2r1á2rat rá2raz rá2ráb rá2ráh rá2r1ál rá2rár rá2rát rá2ráv rá2r1em rá2rér 2r1árh rá2riai 2r1á2riá rá2rin 2r1árj 2r1árl 2r1árn rá2r1ol r1ártó 2ráru rá2rul rá2run 2rárú rá2rú. rá2rút rá2rúv rá2s1a2d rá2s1akn rá2sal rása2r rás1ará rá2s1as 2rásatá rás1a2to rá2saz rás1á2ga rá2s1árad rá2s1árak rá2s1á2rá rá2s1á2ré rá2sás rá2ser rá2sis rá2s1ol 2r1á2só. 2rásób 2rásóé 2rásóg 2r1á2sóh 2rásói 2rásój 2rásók 2rásón rás1ó2ra 2rásóró 2r1ásós 2rásót 2r1ásóv rá2ső rást2 rás1tr rá2sut rá2szan rá2szas rá2sz1á2ru rá2sziv rás3zón rá2tad rát1a2da rát1ala r1á2tál rá2tég rá2tél 2rátép rá2t1i2o rá2tí 2r1átlé rá1tri rá1tro rátus1s rátú2 rá2túr 2r1á2tül rá2zal 2rázisb 2rázisé 2rázish 2rázisk 2rázisn 2rázisr 2ráziss 2rázist rázi2sz rá2zsal ráz4sá rázs1e2 rázsé2 rá2zsén rázsi2a rá2zsis rá2zsó rázs1ü2 rba2j1e rba2jokt rba2n1á rbátyá2t rbá2ty1áto r2b1ell r1b2la r1b2lo rb2lú rboc1c r2b1olda rbo2n1a2 r1b2ra r1b2rá rb2ri rb2ro r1b2ró rb2ru rbu2t1e rc1adá rc1ajt rca2lak r2c1alk r2c1ana rc1anya rca1p rc1ara rc1ará rc1ass rc1a2to r2c1ág r2c1á2l rc1ár. r2c1ári r2c1árn r2c1á2ro r2c1árr r2c1árt r2c1á2ru rc3csi rc3csí rc3cso rc3csó rc3csö rce2g1a2 rceg1g rc1egy rc1e2leg rc1elk rc1e2lőd r2c1els r2c1ember r2c1epe rc1e2ve r2c1ex r2c1ez rc1é2két r2c1éle r2c1é2lé r2c1é2li r2c1élm r2c1élü r2c1ép r2c1ér. r2c1érb r2c1é2ri r2c1érr rc1ész rc1fr rc1gr r2c3has rc3hel r2chen r2chig r2chom rc3hu r2c3hú r2c3hű rci2d r2c1ide r2c1i2ko r2c1ikr rc1ill r2cimá r2c1imi rc1i2na. rci2náb rci2náé rc1i2nár r2c1i2nát r2c1ind rc1i2oni r2c1i2pa r2c1isi r2c1isk r2c1ist rc1izm rc1i2zo r2c1íj r2c1ív r1c2ké. r1c2kéh r1c2kéi r1c2két r1c2ki. r1c2kia r1c2kig r1c2kok rc1k2ré rc1kv r1c2lu r2c1op r2c1o2r r2c1osz rc1ón rc1ó2r rc1óv r2c1öb r2c1ön r2c1ör r2c1ös rc1őr rc1pl rc1pr rcs1abl rcs1alak rcsa2p1á2g r2c3sara r2csarl r2c3sáp r2c3sár. rcs1áru r2c3sej r2cseleme r2cs1elr r2cs1érb r2csikr rcs1írás rc3s2ká r2c3sora r2c3soro rcsóna2k1á2 rcs1ős. rcs1p rc3s2pi rcs1s rc3sto rc3sz rc1tr r2c1ud r2c1ur r2c1ut r2c1új rc1üg r2c1ür r2c1üs r2c1üt rc1üv rc1üz rc1űz r2c3zá rc3zó rc3zs rc3zu rc3zú rda2cél rd1a2dat r2d1akc rda2l1í2 rd1alka rd1alko r2d1a2nya rda1p rd1a2rán r2d1arc rd1aszt r2d1azo rd1ács. rd1á2rak rd1árat rd1á2ron r2d1árv rdás1s rd1bl rd3dz r2d1e2g rde2k1a2 rde2ker rde2kék rde2kol rde2k1ö2 r2d1ela rde2sőt rd1exp rdező2p3 r2d1é2g rd1é2lé rd1élr rd1élt rd1é2lü r2d1ép r2d1ér. r2d1érd r2d1é2ri rdé2sa rdé2sza r2d1é2vé rd1fr r2d1i2d r2d1i2ga r2d1igé r2d1ima r2d1i2na. r2d1i2nai r2d1i2nát. rdio2x rd1izo r2d1íg r2d1íz rd1kl r2d1okta r2d1old rd1orr r2d1osz r2d1ou rdóa2 rd1ó2rá rdö2g1öl r2d1öl r2d1ös rd1öv rdő2s1orr rd1pr r1d2ram rd2rap r1d2raz rd2rog r1d2rót rd1sk rd1sp rd1st rdsza2k1 rd1t2r rd1udv r2d1urá rd1üg r2d1üt r2d3za r2d3zá rd3zo rd3zó r2d3zö rd3zsí r2d3zú 1re rea2d rea2j rea2ka rea2la rea2r 2reálá 2reáló 2r1eb. 2r1ebbő reb1egy 2r1e2béd 2r1ebh 2r1ebk 2r1ebm 2r1ebn 2r1ebs 2r1ebv re2caj re2cal re2cá 2recets re2ch rec3sar 2r1e2cset rec3sor re2cz re2dan red1elv 2redend re2d1e2r 2redeti 2redetű 2redény re2d1é2ves re2dir re2dor 2r1edzőb 2redzőj 2r1e2dzők 2redzőr 2r1e2dzőt 2redzőv re2et re2ew 2reff re2gap re2gas reg1áll re2gár reg1e2le reg1elh reg1ell re2g1elr reg1elv reg1eng reg1e2tető reg1e2vé regész1 re2gid reg1inj re2giz re2góc reg2óv re2gú regü2l re2g1ülé 2r1egy. 2r1egyb re2gye. re2gyed re2gyen 2r1e2gyes re2gyet 2r1e2gyez 2r1e2gyé 2r1egyh 2r1egyk 2r1egyl 2r1egyn 2r1egyr 2r1egys 2r1egyt re2gyün r1egyv rei2rá re2ja 2rejéé 2rejűe 2rejűn 2rejűr 2rejűt re2k1ag re2k1ará re2k1asz re2k1á2l re2k1á2p re2k1ár. re2kás rek1elh rek1elt rek1elü rek1erd re2k1e2rő reke2sz1á 2rekééh re2kéj re2kék 2r1ekék. rek1ékh re2kél 2r1e2kénk re2k1ér. re2k1érd re2k1érte 2r1e2kés. re2k1éss re2k1id re2kij re2kil re2k1ing re2k1int re2k1ip re2kír rek1k2 re1klu re2k1ok re2k1old rek1opt re2k1os rek1ott re2kór re2kök re2kötl re2kő rek1s reksz2 re2k1u2s re2küd re2k1üg rekü2l re2k1ülé re2k1ülő re2küt 2r1elad 2r1e2lág 2r1elbí 2r1elbo 2r1elc 2r1eldo 2r1e2lef 2relektr rele2ma 2re2leme. 2r1e2lemed rele2meg 2relemei 2re2lemek 2relemem. 2r1e2lememe 2relememm 2r1e2lemen rele2m1er 2relemes. 2r1e2lemese 2relemesn 2r1e2lemet re2lemezé rele2m1ér. 2r1e2lemtel 2relemük 2relemünk 2relemzé 2relemző 2r1e2l1eng 2relér 2r1elf 2r1elha 2r1elhá 2r1elhel 2r1elhú 2r1eljá 2r1elké rella2 rel2l1an 2r1ellá 2r1ellő 2r1elma 2r1elmééé 2relmééh 2r1elméi. 2relmél 2relméte 2r1elnev 2r1elnö 2r1elny 2r1e2los 2r1e2lőad 2relődei 2r1e2lődök 2relőnn 2r1előnye 2relőzm 2r1elso 2r1elszá 2r1elta rel2tár 2r1eltáv 2r1eltett. 2reltettk 2r1eltéré 2r1eltév 2relú 2r1e2l1ül 2relű 2r1elv. 2r1elvá 2r1elvb 2relved 2r1elvei 2r1elvek 2r1elvem 2r1elven 2r1elves 2r1elvé. 2r1elvéne 2r1elvér 2r1elvéü 2r1elvév 2r1elvh 2r1elvi 2r1elvk 2r1elvn 2r1elvo 2r1elvr 2r1elvs 2r1elvt 2r1elvü 2r1elvű 2r1elvv 2r1elz re2m1a2d re2m1asz re2maz re2m1ál re2mát 2rembar 2r1ember. 2r1emberb 2r1embere. 2rembered 2r1emberei 2r1emberek 2r1emberes 2r1emberé 2r1emberh 2r1emberi 2r1emberk 2r1embern 2r1emberr 2rembers 2r1embert 2r1emberü rem1ble r1embó 2rembr re2mel rem1e2lem 2r1emelé 2r1emelg r1emelk rem1előd rem1els re2m1eng re2m1esz re2m1ér. re2m1érm re2m1é2te re2migr re2m1ór re2mö re2m1ő2r rem1p2 2remuk 2r1e2mul rem1ur 2r1e2mus 2r1encik ren2d1e2r ren2d1ég ren2déj ren2dék ren2d1o ren2d1ö ren2d1ő2s 2r1e2ner renés3s 2r1enged 2rení ren2s1ég rens3s re2of re2óa re2óc re2óe re2óé re2óf re2óka re2ól re2óo re2óp re2ósá re2ósz re2p1aj rep1ana rep1asz re2pau re2paz rep1áll rep1álm re2pás re2pát re2p1e2g re2p1elf re2p1elk re2p1ell re2pelm re2p1eng re2p1ep 2r1e2per. re2p1erk 2repéd rep1é2j 2repénk 2r1e2pés re2p1i2d rep1ille rep1int re2pok 2reposz. 2reposzt. rep1osztó repö2 re2p1örö rep1pl rep1pr re2pú 2r1erd re2rei re2rej re2res re2rez 2r1erg re2róz 2r1e2rő 2r1ers re2sas re1s2c 2r1esemé res1epr rese2t1e2l 2r1esél 2reskü r1essi re2szaj 2r1e2szet resz1ív 2reszkö 2reszm reszta2 resz2t1an resz2tál resz2t1ár resz2t1í2v resz2t1o2r resz2t1os 2reszű. 2r1e2szűe re2t1ab re2t1akt re2tal ret1a2la re2tant re2t1a2ny re2tág re2t1ára re2t1áro ret1átf re2t1elb re2t1ell re2telm ret1emel re2t1erk rete2sz1á 2r1e2tetés. 2r1e2tetésé 2retetésn re2t1é2k re2t1él re2t1érb re2t1érd re2tid 2r1e2tika re2tiká ret1ill r1e2tilt re2t1ing re2t1int re2tis r1etnik re2t1ok re2t1old re2t1os re2tór re2t1örö re2t1ö2v ret2t1est ret2téne ret2t1in re2t1ut re2t1ült re2tűd re2ud re2ute re2vező 2r1e2vő 2r1exp 2rezetn 2rezetü 2rezor 2rezőkh 2r1ezr 2rezüs 1ré ré2bá ré2bis ré2biv ré2bí 2rébres ré2bü 2r1é2des 2réfá 2r1égb ré2gét 2r1égn ré2g1ó2 ré2gő 2régt 2r1éh. 2r1é2hen 2r1é2hes 2r1é2het 2r1éhs 2r1éht ré2jen 2r1é2jet 2r1é2jün ré2k1ab ré2kac ré2k1a2g ré2k1a2n ré2k1au rék1á2sá ré2k1e2b ré2k1eg ré2kel rék1ele rék1elő rék1elr rék1els ré2k1esz ré2k1éte ré2kik ré2kin ré2kit rék1ola rék1old ré2kör ré2k1ö2v ré2köz ré2kő réku2 ré2k1ut ré2k1ú ré2let. ré2letb 2r1é2lete ré2leté ré2leth ré2letn ré2letr ré2lett ré2letü 2r1élf 2r1élm 2rély ré2mad ré2m1a2l ré2m1an ré2mar ré2mau ré2m1ál ré2már ré2mel rém1e2le ré2mer ré2m1é2ré ré2mil ré2m1ist ré2mos ré2mó ré2mö 2rémtu réna1p2 2r1é2nekh 2r1é2neki 2rénekl 2r1é2nekü ré2nel 2réner ré2n1é2j ré2nö ré2ny1e2l ré2p1ed ré2peg ré2pes répi2 ré2p1ip 2r1é2pí ré2pol ré2pö ré2pü 2r1épül 2r1ér. 2r1érb 2r1érc 2r1érd 2r1é2ret 2r1é2rez ré2ré. ré2réb ré2rén ré2rér ré2rés. ré2rése ré2résé ré2résh ré2rési ré2résk ré2résn ré2résr ré2réss ré2rést ré2résü ré2rét 2r1érf 2r1érh ré2rie ré2rig 2r1érk 2r1érl 2r1érm 2r1érn 2r1é2rő. ré2rők 2r1érr 2r1értá 2r1érte 2r1érté 2r1értí 2r1értő 2r1é2rü 2r1érv 2r1érz résa2 ré2sal ré2sar ré2s1ár ré2sát ré2seg rés1ell ré2s1er ré2sés ré2s1ő2 rés3sza ré2sú ré2s1ü2t ré2s1ü2v rész1a2l ré2szan rés3zav rész1ál ré2sz1eml ré2sz1e2sz ré2sz1é2k ré2szinte rész1í2v ré2szok ré2szol ré2szó rész1ó2r ré2szőr rész3s rész1t2r ré2szu ré2szú részü2l ré2sz1ülő 2rétáz ré2t1egy 2ré2tel rét1elm 2réter ré2t1e2sz 2r1é2tető ré2t1é2k ré2tiz ré2tol ré2t1os ré1tré ré2tud révá2 ré2vát 2réve. 2révei rév1eké ré2v1é2l ré2v1éri 2révé2t ré2v1éte 2r1é2vév 2révf 2révh 2révt ré2vú 2révv ré2z1a2 rézá2 ré2z1ár ré2z1e2g réze2l réz1elő ré2zer ré2zes réze2t réz1ete ré2zid ré2zin ré2zio ré2zip réz1isz ré2zos rézó2 ré2z1ór ré2zö ré2zsa ré2z3sá ré2z3se ré2z3si ré2zsí ré2zso ré2zsu rf1ál r2f1ép rfé2sza rfé2szá rf1fl rfia2n rfi1b2 rfid2 rfii2 rfik2 rfi1kr rf1ind rf1isk rfi1sz2 rfit2 rfi1tr rf1kl rf1kr rf2la rf2lo rf2ló rf2lu rf1okt rf1őrü rf1pr r1f2rá rf2rí r1f2rö rf1sp rf1st r2f1út rga1k2 rgá2csal rgá2csan rgá2csav rgá2z1é rge2o rge2r1a rgés3s rg2ha. rgi2aia rgi2ako rgi2al rgi2aso rg2il rg2la rg2le rg2lo rg2ló r1g2nó rg2öl rgö3le rgőcsa2 rgő2z1ölt rgő2z1ős r1g2rá r1g2ru r2gyado r2gy1aj r2gyalak r2gy1alap r2gy1algá r2gy1alk r2gy1any r2gyap r2gyarc r2gy1asz r2gyau r2gy1az r2gyál r2gy1á2z r2gy1eg r2gy1e2l r2gy1enc r2gy1e2s r2gy1és r2gyévé r2gyim r2gy1int r2gyip rgy1ira r2gy1ok r2gy1öz r2győr rhajóé2r rhatá2s1út rháza2d rhá2z1ada rhá2zal rhá2zip rhá2z3s rhitköz1 1rhoeá 1ri ri2aa ri2aá ria1b ri2aba ri2abá ri2abo ri2ac ri2ae ri2aé ria1f ri2afag ri2afr ri2a1g2 ri2ah ri2ai2k ri2aí ri2aj ri2akén. ri2akó ri2ala ri2alá ri2alu ri2am ri2ana ri2ao ri2aó ri2aö ri2aő ri2a1p2 ri2ará ri2aré ri2asza ri2aszá ri2aszi ri2aszo ri2até ri2ato ri2a1t2r ri2au ri2aú ri2aü ri2av ri2az 2riásá 2riász r1i2ázós 2ribé ri2bol 2r1ibr 2ribü ri2c1e2l rics1il ri2d1a2l ri2dál rid1d ri2de. 2r1i2deá ri2dei 2ridej ri2del ri2deo rid1ere ri2d1esz 2ridil 2r1i2dom 2r1i2dő ri2du ri2ed 3rie2l 3rier ri1fl ri1f2rá 2r1i2ge. 2r1i2gé 2rigi ri1gla 2r1igr ri2har 2r1ihl rihó2 rihón1 2rijes ri1klo ri1k2ló ri1k2ri ri2lal ril2l1e2h ril2lét ril2l1in ril2l1ő 2rillu 2rillú 2riló 2rimáda 2rimádá 2r1imp ri2n1a2d 2r1i2nai ri2naj ri2n1a2l ri2n1a2n ri2n1a2r 2rinas. 2r1i2nasá 2rinasn 2r1i2naso ri2nass 2r1i2nast rina1sz2 ri2nat. rin2c1a rin2cá rinc3c rin2c1eg rin2cel rin2cer rin2co rin2csér rin2csi 2r1inde 2r1indu ri2neg 2rinfl rin2gál rin2gel 2r1ingét rin2gül 2r1inha 2r1i2nic ri2nil ri2n1ip 2r1injek rin1kré rin3n 2r1insp 2r1inst rin2t1ad rintá2r rin2tára rin2táro rin2társ 2rinten 2rinterf rinté2r rin2t1ér. rin2t1éré rin2t1éri 2rintő. 2rintők ri2nül ri2o1k2 rio2lok ri2om 2rionn 2riono 2riox ri2óa ri2óá ri2óc ri2ódar ri2óe ri2óg ri2óke ri2ól ri2ómá ri2ómé ri2óo ri2ó1p ri2óü 2r1i2pai 2ripar. 2r1ipara 2r1i2pará 2riparb 2riparé 2riparh 2riparil 2riparin 2riparn 2riparr 2ripars 2riparte 2ripartó 2riparu 2ripl ripor2ta 2r1i2ram 2r1i2rat 2r1i2rá 2r1irh 2r1i2ri 2r1i2ro 2r1i2rón 2r1irr 2r1irt ri2s1ar ri2s1as ri2s1ál ri2sáp ri2s1e2l ri2s1emb ri2s1e2r ri2sid ri2sii ri2sil ri2s1is 2rismérv ri2s1or. ri2s1ort 2r1ispá 2ristál ri2sut ris1üté ri2s1ü2tő. ri2s1ü2v 2r1i2szák ri2t1a2d ri2tal 2rital. 2r1italb rit1alk 2r1itall 2ritaln 2r1italo 2ritalr 2r1italt rit1a2ny ri2tág rit1ell ri2t1i2o ri2t1í riu2méne riumhid2 riumhidr1 riu2m1i2o 2r1i2vad ri2var 2r1i2vás 2rivo 2r1i2vó rixe2 ri2x1el ri2xí ri2xö 2riza r1i2zét 2r1izmi 2r1izmo 2rizmuk 2rizmú ri2zsar ri2zseb ri2zsel 2r1izza 2r1izzó 1rí rí2gé 2ríj. rí2jai rí2jak rí2jam rí2jas 2ríjá rí2ján rí2ját rí2jáv 2r1íjh 2r1íjj 2r1íjl 2r1íjr 2r1íjv rí2m1a2l 2rímá rím1emb rí2mo rí2mö rí2né 2r1íns rí2ra r1í2rá r1í2ró 2rítél rítés3s rítőa2 rítőe2 rítőkész1 2r1ív. ríva2 2r1ívb 2r1í2ve 2r1í2vé 2r1ívh rí2vi r1í2vü rí2vű 2r1ívv rí2za rí2z1el rízis3s rí2zo r2j1ado rj1any r2j1ág r2j1áp rjet2 r2j1id r2j1ös r2j1u2r rka1b rk1ang rka1pr rkaros3 rka2ró2r rka2s1ü2v rka1t2r r2k1ács. rká2csá rká2ne r2k1á2ri rkár1om r2k1á2ru r2k1e2dz rk1e2lem rk2elm r2k1eltá rke1p r2k1erd rk1eredő r2k1e2rei r2k1e2rez r2k1e2rő rke2szö r2k1ex rké2p1e2l rké2p1éss r2k1ér. r2k1érté r2k1étt r1k2hé rk2hón rkia2 rkie2 rki2g rk1iga rkigaz1 rkilenc1 r2k1imi rk1inga rki2ont. rki2sem rki2z1a rk1izo rk1kl r1klie r1k2lí r1k2lo r1k2ló rk1o2laj rko2nya rko2vi. rko2vit r2k1óné rk1ó2rá rk1ó2ri r2k1öltési r2k1ötl rkö2ző rk1őr. rk1ő2ré rk1őrk rk1őrn rk1ő2rö rk1őrr rk1őrs rk1őrt rk2rém r1k2ri r1k2rí r1k2rom rk1sh rktus1s rk1udv r2k1ug rku2sze r2k1ú2sz r2k1üd r2k1üg rk2vó rlag1g rla2g1ol rla2p1a rla2pál rlap1e rla2pol rla2p1osz rla1pro rla1s2t rla2t1a2n rla2t1ó2 rlá2pe rlás3s rlá2s1út rlá2t1e2 rlá2t1é rlá2tor rle2g1a2 rle2g1á rle2ger rleg1g rlegigaz1 rleí2 rle2t1á2 rle2t1eg rle2tell rle2t1elő rle2t1ék rle2tél rle2t1ér. rle2t1érv rleü2 rlésát1 rlésáta2 rlés3s rl1gr rló1g2 rlóó2 rlót2 rlőe2 rlő1sta r2m1akad rmaké2sz1ü r2m1a2kó rma1kré r2m1alt r2m1a2nya rmaó2 rma2t1á2ru rma2t1ur rma2zon rmá2lér rmá2nyan rm1á2ram r2m1á2ro r2máru rm1cl rmege2 rmeg1er rme2g1es rme2g1é rme3g2ö rme2k1an rme2kar rmeká2 rme2k1eg rme2k1e2l rme2kérd rme2kor rme2kot rme2k1ó2 rmekö2r rme2körö rm1elk r2m1elm rme2ran rme2ras rme2rin r2m1e2rői rme2rők. rme2rőke rme2rőkn r2m1e2rőm rmert2 rmer1tr rm1esem rme2t1él rme2tin rmé2k1e2l rmé2ker r2m1é2le r2m1ép r2m1ér. r2m1érte r2m1étk r2m1étr r2m1étt rmi2g r2m1iga r2m1igé rm1illa rminc3s rm1inte r2m1irá rmi2si r2m1isko r2m1ism rmite2 rmi2t1el r2m1íg rmjob2 rm1kl rmo2n1a rmo2nár rmo2n1e rmon1n rm1ope r2m1ors rmo1sz2fér rmő2szá rm1p2l rm1p2r rm1sk rm1st rm1sz2 rm1tr rm1üg rm1üz rmű1s rm1ya rna1b rna1f2 rna2gyú rnai2k rna1k2r rna2pes rna1pro rnas2 rna1sp rna1sz2 rna1t2 rná2cs r2n1el. r2n1elb r2n1elf r2n1elh r2n1elj r2n1ell r2n1eln r2n1elr r2n1elt rne2m1is r2n1est rne2t1a2 rne2t1e2l1 rnet1o rnés2 rné1st r2n1i2d rni2g r2n1iga rno2kis rnó1d2 rnö2ket rnus3sze rny1a2dó r2nyakad r2nyalako r2ny1alk r2nyarc rny1álm r2ny1ell r2nyelm r2ny1eln r2ny1elo rny1elvo rny1emb r2nyerd r2ny1e2rez rny1e2ső rny1ékné rny1ész r2ny1id r2nyiz rnyolc1 rny1old r2ny1or rny1ök r2nyöt rny1s r2ny1ur 1ro ro2ad roa2n 2r1obj 2robl r1obs roc2ke ro1cker roc2kén ro1c2kok ro1c2kon roc2kos. 2r1o2dú rofi2tár ro1fl ro1fr ro2g1ad ro2g1ak ro2gal ro2g1am ro2gar ro2g1á2r ro2g1áz rog1enc ro2ger ro1g2ló ro2g1o2l ro2gor ro2g1osz ro2gö 3rográ ro1g2ráf. ro1g2ráff rogu2 ro2gur ro2gü 3rogy ro2he ro2hö ro2is 3rojt ro2ka. ro2kab ro2kac ro2k1a2d ro2kait ro2k1aj ro2kak ro2k1al rok1any ro2k1a2s ro2káb r1o2kád ro2k1ál ro2kán ro2k1á2s roke2 ro2ked ro2k1en 2rokett. r2oké ro2kék ro2k1é2l ro2kép ro2kid ro2k1ing ro2k1í 2rokod rok1old ro2kő 2r1okság rok1t2 2r1oktat 2roktán ro2k1u2s rokú2 ro2kú. ro2kús ro2kü 2r1o2laj rola2n rolás1s 2r1oldá 2r1oldó ro2l1i2d roligar2 roligarc3 rol2l1a2d rol2lag rol2l1akn rol2lan rol2lat rol2leg rol2lel rol2lis 2r1olló 2r1oltás 2r1oltó. 2r1oltób 2roltóé 2roltóh 2r1oltói 2roltóké 2roltóm 2roltón 2r1oltót 2r1oltóv 2r1oltv ro2lü 2rolvad 2rolvas 2r1o2lyai 2r1o2lyáh 2r1o2lyán 2r1o2lyár 2rolyéb 2rolyéh 2rolyéi 2rolyén. 2rolyiér 2r1o2lyuk rom1ajt rom1akk rom1akó ro2m1a2ro ro2m1ál 2romám ro2m1á2ri ro2m1árk ro2m1árn ro2m1á2ro rombé2 rom2bén ro2meg ro2m1el ro2m1e2r ro2m1es ro2méj ro2m1é2ne rom2f1os ro2mim rom1iná rom1ist ro2mita ro2miz ro2mí romköz1 2r1omni ro2m1o2r ro2m1ó2r ro2mö ro2mő rom1pr ro2mü ron1alj ron1alt ron1alu ron1any rona1t2 rona2ut ro2n1áta ro2n1átr ron2csel ron2csem ro2nen ron1esz ro2n1ér. ron2gal ro2n1i2ko ro2n1i2m ro2ní ro2nop ro2nóc ro2n1ó2r ro2nö ro2nő ron1s2 ron2tab ron2tem ron2tev ron2t1én ron2tin ron2tí 2rontóé 2r1ontóh 2rontóig 2rontós ro2nü ro2nyac rony1a2l ro2nyid ro2nyik ro2nyir ro2nyó ron2zab ron2z1al ron2zer ron2zin ron2z1ol ron2z1or ron2z1ó2 ronz1z ro2om ro2os 2r1opc 2rope ro2per ro1p2l ropo1s rop2s ro2rak ro2r1a2l ro2rat ror1áll rore2 ro2reg ro2r1el ro2r1es ro2r1in ro2rosz rort2 ror1tr ro2rü ro2sar ros1ass ro2s1atl ro2s1av ro2s1árk ro2s1áro ro2sem ro2s1ist ro2s1ol ro2s1ó2 ro2sö ro2ső ros3sze ros3szék ros2tet 2rostob ros2tol 2rostya ro2s1út ro2szal ro2szan ro2szás 2r1oszlo ro2szó r1osztá 2roté ro1t2he roto2na ro1t2ró 2rotth ro2un ro2us rova2re rovás1s 2r1o2vi. 2r1o2vib 2r1o2vik ro2vis 2ro2xidb 2ro2xidr 2roxilc ro1xy ro1ya roza2tal ro2zsan 1ró róa2d rób1ajt 2róbá róc3c ró2c3h ró2cin ró2c1ö ró2c3sá ró2cz ró2dai ró2dep ródi2ad ró2dő ró2dü 2r1óév. 2róéve 2r1óévé ró2f1ag 2rófea 2rófeá ró2f1iv 2rófs ró2fur ró1g2r rói2g róke2rest róke2r1in ró1k2l ró1kré 2r1ólm r1ó2lom ró2m1a2l róma2r róm1ara ró2mál róme2l ró2mél róm1isz ró2mí 2rómk ró2mö ró2mü róne2m 2r1ó2néb 2rónéé 2r1ó2néh 2r1ó2nén 2rónér 2rónét 2rónév 2rónj 2rónn 2rónr rónus3s 2rónú ró2nü róo2k róó2r ró1p2l ró1pro 2r1ó2raa 2r1ó2rac 2r1ó2rad 2r1ó2rae 2r1ó2raf 2r1ó2rag 2róraje 2r1ó2ram 2r1ó2ran 2r1ó2rap 2r1ó2rar 2r1ó2ras 2r1ó2rat 2róraü 2r1ó2rav 2r1ó2ráb 2r1ó2rád 2r1ó2ráé. 2ró2ráén 2r1ó2ráév 2r1ó2ráh 2r1ó2rái ró2rája 2r1ó2ráka 2r1ó2rákb 2r1ó2ráké 2ró2rákh 2róráki 2r1ó2rákk 2r1ó2rákn 2r1ó2ráko 2r1ó2rákr 2r1ó2rákt 2r1ó2rán. 2r1ó2rána 2r1ó2ráná 2r1ó2ránk 2r1ó2rány 2r1ó2rár 2r1ó2rás 2r1ó2rát 2r1ó2ráv 2r1ó2riá rós1orom ró1spi 2rótb 2róth ró2tip rót1ist 2rótj 2rótk 2rótm 2rótn ró2t1ö2v ró1tri ró2tül 2r1ó2vó róza1t2 ró2z1e ró2z1in ró2zú ró2zü 1rö 2r1öbl 2r1ö2böl. 2r1öbölb 2r1öbölh 2r1öböli 2r1öböll 2r1ö2böln 2r1öbölr 2röböltő rö2ga rö2go rö2gó rö2k1é2l rö2k1érv 2rökí 2röklé rö2ko 2r1ö2kör 2rökösé 2rökösö 2r1ökrö rö2lős rö2lyü rö2ma rö2má 2röme. 2römed rö2meg 2römei 2römén 2römét 2römév rö2mí 2römmű rö2mo rö2mó 2römöd 2römök 2römöt rö2mu 2römü 2römű rön2d1e rön2k1a2 rön2k1e2 rön2kép rön2kol rön2kos rön2k1öl rön2k1ü rö2p1i2 rö2re rö2rö rö2sa rö2sá rö2so rös3sza 2r1öv. 2r1övb 2r1ö2ve r1ö2vé 2r1övh 2r1övn 2r1ö2vö 2r1övr r1ö2vü 2r1övv 1rő rőa2n rőát1 rőáta2 rő1bl rő1br rő2dá rő2d1e2l rő2dos rő2d1ő2r rőe2l rőe2r rőe2s rőé2h rőé2l rőé2r rőé2te rő2f1as rő1fl rő2f1ő rőgé2p1és rői2ta rő1kl rő1kv 2rőlt rő1pl rő1pr 2r1őr. rőr1ak rőr1eg r1ő2rei r1őrh rőr1in rő2riz rőrköz1 2r1őrl 2r1őrm 2r1őrn rő2rö 2r1őrp 2r1őrr 2r1őrs 2r1őrt 2r1ő2rü 2r1őrz rősá2 rő2sár rő2sír rő1ská rő2ső rő1spe rő1s2pi rő1sta rő1str rősü2l rő2s1ülő rő2s1ült rő2s1ü2t rő2s1ű2 rősza2kál rőu2t rőü2l rőva2s1 rő2zi. rő2zön rpei2 rpe2szel rp2he r2p1ig rpis1á2 rpi2t1a rpi2t1e2 r2p1ivá r1p2la rp2le rp2lé rp2lu rp2lü rprecíz1 r1p2ré r1p2ri r1p2rí r1p2ro r1p2ró rpu2szé r2p1üz r2r1a2lap rra2sza rra2szi rrata2n rrat1any rra2t1á2r rra2t1e r2r1ábr rrádiók2 rrádió1kb r2r1á2ga r2r1á2gy r2r1árb rrá2saj rrá2sar rrá2ság rrá2se rrás3s rrá2sü rrá2s3z rrá2tal r2r1áts rre2l1i rr1emb rren2d1ő2 r2r1ék rré2r r2r1éri rré2sem rr1fl rr1fr r2r1i2de rr1in. rr1ing r2r1ir rri2ta rr1i2zé rr1izg rr1izm rr1k2r rr1ope rro2rál rror1osz rró1dr rró1p r2r1öb r2r1ös rr1pl rr1pr rr1sp rr1t2r r2r1u2r r2r1ür r2r1üt rry2n r2s1a2dó r2s1a2g r2s1aia rsa2il2 rs1akku rs1alan rsa2lap r2s1ale rs1alm r2s1a2lomb r2s1ana rs1a2ny r2s1a2pá r2s1a2po rs1a2ra. r2s1arc rs1arom rs1arz rs1att rsa2v1ar rsa2v1é2 rsa2v1i r2s1ax r2s1a2z r2s1ábr rság1g rs1áld r2s1á2ré r2s1árn r2s1árr r2s1á2ru rs1áté rs1áti rs1bl rs1br rs2ch2 r1sche rsc3hé rs1d2r rs1edz r2s1ef rs1e2gét r2s1e2gy rse2il rse2k1a2 rse2keg r2s1e2leme rs1elf r2s1elk r2s1e2lőa r2s1e2lől rs1e2mi r2s1e2mu rse2ny1a2 rse2nyeg rse2ny1e2l rse2nyer rse2nyí rse2nyő r2s1erd r2s1erk rs1erő r2s1ess r2s1esz rsé2g1el r2s1él r2s1ép r2s1ér. r2s1érd r2s1érl r2s1érték r2s1és rs1é2te rs1étk rs1étt rs1fr rs1gl rs1gr rsi2d rs1ide rs1ido rsi2g rs1iga r2s1ikr r2s1ill r2simm rs1ind r2s1ing r2s1int r2s1i2o rs1i2pa rs1iro r2s1i2si r2s1isk r2s1ism r2s1ist rs1írn r2s1í2ró r2s1írt r1s2kál r1skj rs1kl rs1k2r r1s2lu rs2mink rs2ni rs1ond rsonya2 rso2nyal rso2nyan rso2nyat rso2nyé r2s1op r2s1ord r2s1org rs1osz rsócsa2 rsócsap1 r2s1ódá r2s1óné rsó2s3zárr r2s1öb rs1önt rs1örv r2s1ös r2s1ö2z rs1őr rs1pl rsp2r r1s2rác rs1s2t rs3szag rs3szak rs3szá rs3szem. rs3szemet rs3szer. rs3szerű. rs3szerűb rs3szerűe rs3szerűn rs3szerűs rs3szerűt rs3szerűv rs3szi rs3szí rs3szó rs3szö r1stand r1s2tat r1s2tác r1s2tát rs2top rst2r r1strat rs1tre rs1tré r1stró r1stru r1s2tú rsu2r rs1ura rsu2t r2s1uta rs1utá rs1úr. rs1ú2ri r2s1ú2s rs1úto r2s1üd rs1üld r2s1üz rsza2k1a2l rsza2k1e rsza2kö rsza2k1ü r2szaló r2s3zam rszág1g rszáraz1 rs3zárl r2s3zené r1sz2f rsz2lo rsz2m rszom2j1a2d rs3zse rs3zsi rsz2ta rszt1al rszt1árv rszt2rá r2s3zűr. r1sz2v r2t1abla r2t1abr r2t1a2dat rt1a2dó r2t1a2ga. rt1agit r2t1ajá rt1ajtó r2t1a2kara r2t1akc rta1kre rta1k2ré rt1alapj rt1a2láb r2t1alár r2t1alb r2t1alel r2t1alg r2t1alj r2t1alk r2t1alt r2t1alv rta2m1ér rt1anim rta2n1ó2r r2t1anto r2t1antr rt1a2nyag rt1app rt1arán r2t1arc rta2rén rt1a2ty rt1a2uto r2t1azo rt1ábr r2t1áf rt1ág. rt1á2ga rt1ágb rt1ágg rt1ágj rt1ágn rt1ágr rt1ágs rtá2lad rtá2lala rtá2rada rtá2raj rtá2ramr rt1ária rt1áriá r2t1árin rt1árszi rt1árszí r2t1árta rtá2ruké rtá2rukk rtá2rukn rtá2rukr rtá2rukt r2t1árur r2t1árut rtá2s1ág r2t1ásás rtá2s3z r2t1á2t1a r2t1átl r2t1áts r2t1átv rtá2v1é rtávi2 rt1bl rt1br rt1cl rt1cr rt1dr rtea2 rt1e2gé rt1e2gye rtei2 r2t1eks r2t1elad r2t1elb r2t1elf rt1eljá rt1elker rt1elkö rt1elkü rtel2la rtel2l1á2 rt1elma rt1e2lőa rte2lől r2t1elr r2t1ember r2t1eml r2t1enc r2t1ent rte1p rte2rac rte2rál rte2r1in rtermo1 rtermosz2 rte2r1os r2t1e2ró r2t1erő rte1sp rt1esték rt1estné r2t1estün rte2sze. rte2szei rte2szek rte2szem rte2szet r2t1eszk r2t1eszm r2t1e2szü r2t1é2d rt1é2gi rté2kaj rté2k1a2l rtékát1a2 rték1í rté2kos rté2ku r2t1é2let rté2lén rt1é2li r2t1élm r2t1é2neke r2t1é2nekk r2t1é2nekr r2t1épü r2t1érdem r2t1érem r2t1é2ré r2t1érin r2t1é2rit r2t1értek r2t1érté r2t1érv r2t1érz rté2s1ég rtéskész1 rtés3sza rté2sül rté2szá rté2szo rté2szö rtés3zsí r2t1étk r2t1étl r2t1étt r2t1étv r2t1é2ve. r2t1é2vet rté2véné r2t1é2vér rt1évk rt1fl rt1fr rt1gr r1t2ha. r1t2hág r2t1i2de rt1idé rt1idi rt1ifj r2t1i2gé r2t1ill r2timá r2t1i2mi r2t1imp r2t1i2náb r2t1i2náé r2t1i2náh r2t1i2nán r2t1ind r2t1inf r2t1ing rti2nik r2t1i2pa r2t1irá r2t1iro r2t1isi r2t1isk r2t1ism r2t1isza rt1i2tal r2t1izé rt1izm r2t1izz r2t1íg r2t1íj r2t1ín rtí2ra rtí2rá rt1í2ve rt1í2vű rtí2z rt1ízl rt1kl rt1kr rt1kv rtmű1 rtműt2 r2t1of rto2kad rto2k1a2l rto2k1ar r2t1o2li r2t1oml rto2n1a2 rtoná2 rto2nár rt1opá rt1ope rt1opt r2t1org r2t1o2rom r2t1orr r2t1ors r2t1orv r2t1osz rtóe3rejü rtó1p rtó2rák rtó2s1ín. rtó1sp rtó2s3zár r2t1ökl rt1ököl r2t1ö2lőse rtön3n rt1ö2rök rt1öröm r2t1össz rt1ö2vez rtőé2h rtőkész1 r2t1őrköd rt1őrl r2tőrül rt1pl rt1pr rt1ps rt2rad r1t2raf r1t2ranz r1t2rág r1t2riá r1t2rik r1t2ril r1t2rió r1t2rón r1t2rü rt1sk rt1sl rt1sp rt1st rtsz2 rt1t2r r2t1udv rtu2k rt1uká r2tunik rtu2rai rtu2ral rt1u2rá rtu2sze rt1u2tat rt1utá r2t1új r2t1ú2s r2t1üg r2t1üld r2t1ü2lé rt1ülő r2t1üt r2t1ü2v rt1ű2ző r2tying rty2j rty2s r1t2zé r1t2zi rt2ző 1ru ru2ac ru2b1i2k ru2c3h ru2cz 2r1udv rue2l rue2r ru1fr 2rugar 2r1u2gat rug3gy 2r1ugr ruhás1s 2r1ujj ru1k2l 2ruktu 2ruktú rum1agr ru2maj ru2mal ru2maz ru2m1eng ru2mer ru2mes ru2mél ru2m1i2k rum1ill ru2m1i2p ru2mis ru2m1iv ru2miz ru2mí ru2mol ru2m1o2r ru2mö ru2mő ru2mü 2r1unc run2da ru2nit r1u2nok ru2pad ru2pe ru2p1il ru2pü ru2rad ru2rai r1u2ral ru2ras ru2rat r1u2raz ru2rán ru2rát 2r1urb ru2ruk rus1abl ru2sad ru2sal rusa2n rus1any rusa2r rus1aro ru2sas ru2sál ru2s1iz ru2sír ru2s1ol ru2s1ó2 ru2ső russ2 russz2 rust2 rus1tra ru2s1ű2 ru2sz1é2p ru2szip r1u2tac r1u2tak r1u2tat r1u2taz 2r1utc r1u2tó. r1u2tób r1u2tód r1u2tói r1u2tój r1u2tók r1u2tón ru2tóp r1u2tór r1u2tós r1u2tót r1u2tóv 1rú rúda2 rú2dad rú2d1al rú2d1ar rú2d1á rú2del rú2din rú2du rú2dü rú1dy rú2d3z rú1gr 2r1újd rú2jí 2r1újk 2r1újs 2r1úr. 2r1úrb 2r1úrh 2r1ú2ri 2r1úrk 2r1úrn rú2ro 2r1úrr 2r1úrt rú2szó rú2t1a2l 2r1ú2t1e2 2r1ú2té. rú2tér rú2tit 2r1útk 2r1útle 2r1útm rúto2 2rúts 2r1ú2tü 2r1útv rú2zsad rú2zse 1rü rü2dí rü2dü rü2gyel 2rügyn rü2ha rü2la rü2lá rü2led rü2les rü2lép rü2lér rü2lí rü2l1o rü2ló rülö2 rü2l1ön rü2l1öz rü2l1őg rü2lu rü2lú rü2l1ül 2r1ünn 2r1ü2nő rü2rí rü2rü rü2te rü2té rü2tö rü2tő rü2vö rü2ze rü2zé 1rű rű1gr rű1kl rű1pr 2r1űr. 2r1űrh 2r1űrm rű2rö 2r1űrt rű2s1orr rűs1ors rű1sp rű1str r2v1agá r2v1akc rva2lap r2v1alj r2v1alk r2v1a2rán rva2sáb rva2sék rvasu2 r2v1a2szó rva1t2r rvavá2 r2v1ága rvá2gyi r2vállam r2v1állo rv1állv rvá2nyad rvá2nyan rvá2nyú r2v1áp rvá2r1al r2v1á2ram rváro2s1os rv1á2rú r2v1á2sás r2v1áta rvá2tors r2v1e2b r2v1e2dz r2v1e2gye rv1ela rv1e2led rve2lemb r2ve2leme rv1e2les r2v1elk r2v1ell r2v1elo r2v1e2lőa rv1e2lőá r2v1e2lőkép r2v1előr r2velőz r2v1eng r2v1ep rve2r1a rve2r1á2 r2v1e2retn rverés3s rve2rip rve2r1o r2v1e2rői r2v1e2sete r2v1e2sés r2v1ex rv1éke rv1ékk rv1ékn rv1ékü rv1é2lel r2v1é2lé rvé2ny1el r2v1ép r2v1é2rem r2v1é2ré. r2v1érés r2v1érp r2v1érté r2v1érv r2v1é2vet r2v1évi rv1fr r2v1ido r2v1iga rvigaz1 r2v1igé r2v1ik r2v1inf rv1inte rv1inté r2v1i2p r2virán r2v1isme rvis3sze rv1ital rvi2z1a2 rvi2z1á2 rvi2z1elv rviz1o rvi2zó rvíze2 rvíz1es rv1kl rv1kr r2v1ob r2v1olv r2v1op r2v1or rv1osz r2v1ov r2v1ó2h r2v1órá rv1öss rv1ős rv1pr rv1sk rv1sp rv1st rv1tr r2v1ub r2v1u2t r2v1üg rvü2l r2v1ülé r2v1ülő r2v1ült r2v1üt r2v1ü2v r2v1ü2z ry2be ry2bó ry2bő ry1é2n ry2ho ry2na ry2ne ry2ra ry2re rys2n ry2tó ry2tő ry2va ry2ve r2z1a2dot r2z1a2la r2z1alj r2z1alk rz1almás rza2sz r2z1aszó rza2tal rza2t1e2 rza2tol r2z1áll rzá2r1ó2r rzá2se rzás1s rz1e2be rze1p2 rz1est rze2tal rze2t1eg rze2t1e2l rzetes3s rze2t1o rzetü2két rzéna2 rzé2n1al rzé2nat rzé2ná r2z1érm rzé2so rzi2ab rzis3s r2z1ín rzo2r1ál rzó2s3zár rzőa2 rzőe2 rz1p2r rzs1ala rzs1any rzs1apa r2zsaz r2z3sár. rz3seben r2zs1e2g r2zs1e2r r2zség r2zs1ék r2zs1ér. r2zséva r2zs1iga rzs1inj rzs1int r2zsip r2zsita rzs1or r2zs1ö2r r2zs1ő2 rzs1s rzs1u2t rzs1úr rzs1ült rzu2sak rzu2san rzus3s rzu2s3z r2z1ut 2s. 1sa 2sabo 2sabr 2s1abs 2s1a2cé sa2dalé 2s1adap 2s1a2data 2s1a2dato 2s1adató sadás1s 2s1adm sa2dog sa2dóc sa2dód sa2dóé sa2dóh sa2dói sa2dój sa2dóm sa2dón sa2dór sa2dóu sa2dóz sae2r sa1f2r 2saga sa2gan sa2g1ál 2sagg sa1gne 2s1a2gó sa2gő sa1grá s1agy. s1agyb s1a2gyo sa2gyú 3sah. saha2r sa2hov sa2ig 2saja sa2jak sa2jág 2saján sa2j1ö saj2tal saj2t1a2n saj2tar sajté2r saj2t1éré saj2tor saj2t1ö saj2t1ü2 sa2k1ab 2s1a2kad sa2k1an sa2kas 2s1akci sak2k1a2r sak2k1as sakke2 sak2k1eg sak2ker sak2kes sak2kis sak2kol sak2k1orr sak2k1ó2 2sakku sa1klu 2s1akna. 2saknáb 2saknái 2s1aknák sak1ola sa2k1orm sa2k1ös sa1k2ru 2s1akt. 2s1akti 2s1aktu sa2k1ug 2s1a2kus sa1k2va 2salab sala2g1 sala2ka sa2laku 2s1a2lapa sa2lapí sa2lapl sa2lapoz s1a2lapr sa2lapt salá2da 2saláí salán1n salás1s 2s1aláté 2s1alb s1a2lel s1alépí salé2t sa2l1éte 2salf 2s1algáh 2s1algái 2s1algán 2salgásat 2s1aljai 2s1aljáh 2s1aljár 2s1alját. 2s1alka 2s1alkot s1alku 2salm 2s1a2lomn 2s1a2lomr sal2tag 2s1alte 2s1alth 2s1altit sa2l1ú sa2m1any sa2mec sa2m1il sa2m1í sa2mol sa2m1osz 2s1a2mő sa2nal sa2nat s2and 2sane sa2nek 2s1angy sa2nód sa3nö s1ante sa2nya. s1a2nyag sa3nyar 2sanyá saó2r sa2p1a2dó sa2p1a2g sapa2te sa2pác sap1á2cs sap1áll sa2p1átm sa2páto sa2p1el sa2p1ék 3sapka 3sapkáb 3sapkán 3sapkás 3sapkát 3sapkáv sa2p1osz s1a2pókr s1a2pósab 2sapp s1aprí sa1pro 2sapu sa2ratá sa2rató sa2rány sar2c3ho sar2cin sa2rén sa2rit sar2j1e sar2k1e2 3sarki sar2kin sar2kir sar2k1ö2 3sarkú 3sarló 2sarm 2sarom 2sarz sase2 sa2s1eb sa1s2m sa1s2po sas3sza sas3szá sas3sze 2s1asszo 3sast sa2s1u2t sa2sú s1aszf 2saszt sata2kés sa2t1alj sa2t1alt sa2t1a2nyá sat1apu sa2t1á2rak. sa2t1árka sa2t1érk sa2t1érr sa2t1i2k sa2t1ing s1atlé satmo1 satmosz2 2s1a2tombó 2s1a2tomo sa2t1orm sa2t1ó2d sa2t1ó2né sa1t2rá 2saty sa2tyá sa2ul sa2urá 2saut sa2uto s1autó. sautóé2r sautói2ko sa2uv 3sav. 3sava. sa2v1a2da sa2v1a2l 3saván sav1ára sav1ária sa2v1árt sa2v1el sa2v1ér sav1ill sa2v1i2n sa2vő sa2vü sa2xi sa2zon 1sá sá2b1ak sá2b1e2l sá2b1e2r sá2big sá2b1il sá2bö sá2buj sá2b1ut sá2bü sá2csá sá2gab sága2d ság1ada 2ságadd sá2gal sá2gan sá2gas 2s1ágas. ság1ass sá2gat 2s1á2gaz sá2g1ál sá2g1á2rak sá2g1árn sá2g1á2ru sá2g1e2 sá2gép sá2g1i2ko sá2gí sá2g1osz sá2g1ó2 sá2g1ö sá2gő ság1s sá2gü sá2gű 4s1á2gy ságy1a2d sáka2 sá2kal sá2k1an sá2kar sá2kát sá2k1e2 sákköz1 sá2k1ö sá2kü s1álc sá2l1in 2s1álm s1á2lomb 3sámá sán2c1é sán2c3so sán1k2r sánt2 sán1th sá2nü sá2p1ost sá2rad sár1adá sár1a2dó sá2r1ag sá2raj 2s1á2rak. sá2raka 2s1á2rakb 2s1á2rakh 2s1á2rakk 2s1á2rakn 2s1á2rako 2s1á2rakr sá2rakt sá2r1a2l 2s1á2ram sá2r1a2n 2sá2ras sár1ass sár1asz 2s1á2rat sá2rág sá2r1ál sár1d2 sá2r1e2 2sárét sá2r1év sá2ria. 2s1á2riá sár1iko sá2r1i2p sá2r1i2s sá2rí sár1k2 sá2r1osz sár1ott sár1óni sá2rö sá2rő 2sárro sár1s2 sárt2 sár1tr sá2rug 2s1á2ruh 2s1á2rul 2sárus sárú2 2s1á2rú. sá2rü sá2s1ad sá2sar sá2sás sá2s1e2 sá2sis sáskész1 sá2só 2s1ásó. sás1ó2r 2s1ásóv sá2sö sá2ső sás3sz sá2s3za sászá2r1a2d 2s1á2szo 2sáta s1átad sá2t1alj s1á2tál s1á2t1á2z 2s1átb 2s1átc 2s1átd 2s1á2t1e2 2sáté sá2tél 2s1átf 2sáth 2sáti sá2t1ir 2s1á2tí 2sátj 2sátk 2s1átm s1á2tokt 3sátor sátókész1 2s1á2t1ö 3sátra 3sátrá s1átre 2sáts 2sátt s1áttö 2sátu 2s1á2tü 2sátv s1átve s1átvé s1átvi 3sáv. sá2v1a2d sáva2l sá2v1a2r sá2v1ál sá2v1á2r 3sávb sá2v1e2 sá2v1érz sá2vis sá2viz 3sávj sá2v1or sá2vö 3sávr 3sávú 3sávv sba2l1 sbeá2 sbér2cs sb2lo sb2lú sb2ra sb2ri sb2ro sb2ró scar2 1scheie sc3hek sc3hen sc3het sc3hé. 1schébe. sc3héd 1schéére 1schére sc3hés sc3hi. sc3hig 1schil sc2ri sda2dal sdai2 sdeá2 sde1b2 sde2del sde1kr sdes2 sde1sp sde1st sdesz2t sdi2ale sd2ra sd2rá sd2ro sd2ru 1se sea2d sea2l sea2n seá2l seá2r se2bag se2b1ak seb1alt sebá2 se2b1ág se2bár se2b1e2g seb1ell seb1elz se2b1esh seb1esze s1e2béd 3sebés se2b1ó2 se2bö se2b1ő2 seb1p seb1s se2b1u se2bú se2bül 3sebzé secs1a2p se2csev se2cs1ék 2sedez sedél1 2sedény se1dra se1d2rá se2dzé se2dző see2l see2n 2seff se1f2ra 2s1e2ger 3segéd 2segér segés3s s1egész1 2segét 3segg seg2ga seg2go 3segí se2gyed segy1e2l s1e2gyé 2s1egyh 2s1együ sehü2 se2h1üv seí2r sej2t1a2 sej2t1e2ny sej2ter sej2tér sej2t1o sej2tö seka2r se2k1ál 2s1e2kés. sek2k1á sek2kos sek2k1ö se1klu se1k2ra se1k2ré se2kur se2kúr sel1ak se2lál 2selb s1eldö 2s1e2lef s1e2legy se2l1e2h se2l1eké se2lemek 2s1e2lemé se2lemk se2lemm 2s1e2lemz se2l1ere s1e2lesé sele2sz se2l1eszü sele2t1a2 sele2t1e2l se2l1e2vé se2l1e2vő selés3s 2self 2s1elha 2s1elhel s1elho sel1id se2lis 2s1eljá s1ellá 2selmél selnö2k1öl 2s1elny s1e2los 2s1e2lö se2lőad s1e2lőí 2s1e2lőz 2selr s1elta s1eltá 2s1eltö 2s1elv. 2s1elvek s1elvű 2s1elvv 2selz 2sember s1ember. s1emberb s1embern 2s1embr 2semén 2semlé se2nat se2n1ál sen2d1a sen2d1á s1e2ner senés3s 2s1enged sen1ist se2n1or s1enta seny1ag seny1ak se2ny1á2 seny1ell seny1ere se2ny1él se2ny1ér. se2nyérd se2nyérte 2senyhi. se2nyigé se2nyös se2nyu se2nyú se2ny1ü2l 2senyve. s1enz seó2r se2pid s1epiz sep2pa sep2p1á2 sep2per 2sepri se1p2ro se1p2ró se2r1agy se2ral se2ram se2r1a2n se2r1a2r se2r1as se2rau se2r1á2g ser1áll se2rár s1erde 2serdő sereg1g 3seregs 2serej se2r1e2lem. se2r1e2lő se2r1elt se2r1elv sere1p sere2pedő ser1e2sze. ser1eszk sere1t se2r1észb se2r1iga se2r1il seri2n se2r1ina ser1inf ser1ing ser1int se2ris se2riz ser1k se2r1ol se2ró s1eróz 2se2rő s1erő. s1erőb s1erőd s1erőé s1erőf s1erők s1erőm s1erőn ser1ős. s1erőt s1erőv ser1s sert2 ser1tr se2r1ü2g serví2 2s1esemé 2s1e2seté 2s1esél 2s1e2sés 2seskü 2s1e2ső se1s2p sessz1a2 sesszé2l sessz1o 2s1este se1sti s1eszen 2seszk s1eszkö 2s1eszm se2szű se2t1a2la se2tana se2t1a2ny se2tát se2t1e2g set1eleg se2t1elk se2t1elm 2setenk 2setes. 2setese 2s1e2teté 2s1e2tető seté2k se2t1ékb se2t1éké se2t1é2l se2t1énk se2t1ér. se2t1é2ri se2t1érté se2tika se2tiká se2tike se2t1ing se2tol set1old se1tran se1tri se1t2ro 2settk seü2t 2s1e2vés 2s1e2vő se1ye se1yé se1yi s1ezr 1sé 2s1ébr sé2f1a sé2f1á sé2g1a2 sé2g1á2 3sége. sé2g1eg 3ségei 3ségek ség1ele sége2lem sé2g1ell 3ségem sé2g1ent sé2ger ség1erk sé2g1esz sé2geté sé2g1e2ti sé2gev ség1é2je sé2g1é2k sé2gép sé2g1ér. sé2g1é2ré sé2g1érn sé2g1érr sé2g1értő sé2g1é2rü sé2g1érv ség1ész ség3g ség1iga sé2g1igé ség1ist sé2gí 3ségk ségo2 sé2g1ok sé2gol sé2g1ó2 sé2gör sé2gő2 ség1őr ség1ős ség1s sé2gu sé2gú 3ségü sé2g1ü2lő ség1ült 2s1éh. 2s1é2he. 2s1é2hek 2s1é2hes 2s1é2het 2s1é2hé 2s1éhh 2s1éhr 2s1éhs sé2jem s1é2ji s1éjs sé2kek s1ékho 2s1ékm 2s1éks sé2k1ú sé2lel s1é2let 2séll 2s1élm sélőkész1 sé2lű 2sély sé2lya sé2lyeg 3sémá sé2mu s1é2nekb 2s1é2neke s1é2neké 2s1é2nekh 2s1é2neki s1é2nekk 2sénekl 2s1é2nekn s1é2nekr s1é2nekt s1é2nekü 2s1é2pí 2s1é2pü sé2ral sé2ran sé2rát 2sérb 2sérc s1érde sé2réé sé2rie sé2rig s1érlel 2sérm sé3ró 2sérr s1értéke 3sérvb s1érvei 3sérvem 3sérves 3sérvh 3sérvr 3sérvv 4sé1ry 2s1érz 2sésdi 2séseki sé2s1el 2séssz 2séstú sész1ak sé2sz1á sé2sz1emb sé2szir sé2sz1o sész3s sét1abl sé2t1a2d 2sétk sé2t1o sétő2 sé2t1őr 2sétr 2sétt 2sétv 2s1év. 2s1évad 2s1évb 2séve. 2s1é2ved 2sévei 2s1é2vek 2s1é2ven 2sévet 2sévéb 2s1é2véi 2sévén 2sévét 2sévév 2s1évf 2sévh 2sévi. 2s1évk 2s1évn 2s1évr 2s1évt 2s1é2vü 2s1évv sfaá3gac sfa2gy1al sfenyőé2 sfé2má sfé2m1e2kéh sfé2m1é sfé2mi sfiúé2 sfi2úéra sfi2úét sf2le sf2lo sf2ló sf2lu sfo2k1út sf2ra sf2rá sf2re sf2ri sf2rí sf2ro sf2rö sga1b sga1d2 sga1p sga1tr sge2o sg2le sg2ló sg2nó s1g2ra sg2rá sg2ri sg2ró shelyü2kü 1s2hi. 1s2hih 1s2hij 1s2hik shitköz1 s2hop s2horr 3s2how shú2sár shús1s 1si si2ac sia2d si2aé si3ak sia2l sia2ny siá2ro si2b1á2 sibilis1 sidás1s si2dea si2deá si2deg si2dei si2den si2deo s2idet 2sidé s1i2dén si2dom 2s1i2dő si2du si2eg sie2l si2en si2eu 2s1ifj 2siga s1i2gazo 2sigá 2sige s1i2ge. s1i2gek s1i2ges 2s1i2gé sig2n1e sig2n1ó2 2siha 3sihed 2s1ihl si2k1a2n sike2r1esz sike2s si2k1in si2k1ir si2k1old s1i2konh s1i2konj 2s1i2konk s1i2konn 2s1i2kono s1i2konr 2s1i2kont s1i2konu sik1orr si1kré sikus1s 2simád si2m1el s1i2mit 3simí 3simog 2simp s1impor si2m1u2t 2s1i2nas 2sind s1indu si2ner 2sinf 2singa s1ingá s1inget s1ingé s1ingók si2nic 2sinj 2s1inku 2s1ins s1inte 2sinv s1invá 2s1inz si2onn s1i2ono si2óa si2óá si2óc si2óda si2óe si2óg si2ói2k si2óo si2óp si2óú 2sipar. 2sipara 2sipará 2siparb 2s1iparc 2siparh 2siparm 2siparn 2s1i2paro 2siparr 2sipartá 2sipartó 2siparu 3sipí 3sipka 3sipká 3sipol 2s1i2ram s1irg 2s1irh 2siro s1i2rod 2s1i2rón 2sirt s1irtó si2sad si2sél si2s1is si2s1í2 sis3s sist2 si2s1ü2 si2s3zab s1i2tal sita2li si2te. si2t1i si2t1ö sit2tin 3sity siú2t 2s1i2vad 2s1i2var 2sivás 3siví 2s1i2vó 2sizé si2zé. si2zéb s1izmo 1sí sí2gé sí2ja sí2ju sí2kas síke2 sí2k1er sí2kí sí2kü sína2 sí2nac sí2nal sí2nan sí2n1á2 sí2nel sí2nö 2síns sí2n1ú sí2r1ad sí2r1ál sírá2s3z sír1á2to sí2red sí2r1e2m sí2ren sí2res sí2r1e2t sí2r1én sí2rir sí2rí s1í2róa sí2róf sí2ról sí2róp sí2rö sír2t1e2v sí2r1ü sí1sp sí1st síté2kol 2sítél sítés3s sítőa2 sítőe2 sí1tr 2s1ív. sí2vá 2s1ívb s1í2vek s1í2ven s1í2vet sí2vé sí2vű sí2za sí2ze. 2s1ízl s1ízr 2sízü sí2zül sje2gy1á2 skao2 skapocs1 ska2r1i2m skaros3 ska2ró2r ska1sm skat2 ska1tr skau2 1skálák 1skálár ske1p2 ske1s2p ské2p1el skiá2 1s2kicc skie2 sk2jö sk2la sk2li sk2lí sk2lo sk2ló sk2lu skolás1s s2korpi sko2s1a2rai skó1p s1k2rá s1k2ré s1k2rit sk2rí sk2rón sk2ru sk2va sk2vi sk2vó sky1ér sky1i sla1d2 sla2g1e2 sla1s2p sla2t1a2l sla2t1a2n sla2tel sla2tev sla2tés sla2t1é2t s2lág 1slágerei slá2nyal slás3s slega2 sleg1g sleí2 sle2tal sle2t1el sle2t1em sle2tél sleves1s sléi2 sléke2 slé2kev slé2k1ol slés3s slic2c1elv sli2d sli2ká 1s2liss slős2 s2lus smaó2 smarc2 smas2 sma1sp 3s2már. 3s2máru sme2g1a2 sme2g1é smen2tel 1smirg sna2pal sna2p1e sna2p1or snap2sz1e2 sne1yi snit2t1elv snőé2h 1so s1obj so1c2k sodaéne2 soda1g2 so2d1e so2dén so2dév so2did so2dis so2dí so2dob so2d1org so2d1os so2dö so2dő sodrás1s so2dú sod1út so2dü so2d3z so2kab so2kai so2k1aj so2k1a2la so2k1ap so2kar soka2t so2k1ato so2k1ál so2k1árn so2k1e2 sok1ill so2kí 3sokk. sokka2l sok2k1ala sok2k1a2p 2sokke sok2k1el sok2kir sok2k1ö2v sok2k1ü 2sokl 2sokm so2kok sok1old 2so2kos 2s1o2koz so2k1ó2 2sokta s1oktat so2k1ú2 so2kü 2s1o2laj sola2j1á2r sola2je sola2tel solás1s 2s1olda 2s1oldá 2soldó s1oldó. s1oldók s1oldóm s1oldón s1oldór s1oldót s1oldóv so2lim 2s1olló solóó2 s1oltás 2solvas so2lyan so2lyó so2m1ad somag1g so2m1a2l soma2t som1ato so2m1e2 so2mél so2m1éte so2mil so2m1ita so2mí so2m1odo som1ort so2m1osz som1p so2mú so2mü son2ch 2sond so2n1e son2kál son2k1e2 2sonó son2tab son2t1a2l son2t1a2n son2tar son2t1á2r son2t1e2 sonté2r son2t1éré son2tik son2tip son2tö son2tő 2sonv so2nye so2nyis so2ór so2ós s1opc s1o2pe sor1ada sor1ala sor1áll so2r1átl 3so2r1e2 sor1f2 s1orgi so2rid 2sorie so2rif so2rim so2r1ing so2ris 3sorké sormű1 sorműt2 sor1oszt 3soroza so2r1ó2 so2rö so2rő 2s1orr. s1orrát 2sorrb 2s1orrn 2s1orro 2s1orrú 3sors. sor2sal sor2sar sor2sas sor2s1e2 sor2sir 2sorsó sor2sü sor1sz sor2szón sor1tre sorú2t so2r1úto so2rü so2rű 2s1osto 2s1ostr s1osty 2sosz s1oszl s1oszt so2ul so2ur so2ve so2vis so2xi 1só sóá2g sóá2r sócsapá2 só2dái só2dák só2dáv sógé2p1e2ké só1g2r sói2g sóí2v só2k1a2d só2kil só2kim só2kó só1kré sómű1 só2né. só2ni sóó2r só2rai só2ráb só2rái só2ráj só2rám só2rán só2rár só2rát só2riá só2s1ü2 só1sz sótá2ny1ér só1t2r 2s1ótv 2s1ó2vó 1sö sö2bű sö2ga sö2gá sö2g1e2l sö2g1em sö2g1ék sög3g sö2go sö2g1ö2lé sö2g1ölt sö2gű sö2ka sö2k1el sö2kid 2s1ö2ko s1ö2kör sö2kú sö2lőj s1ö2lőz s1öly sö2na sö2ná sön2d1a2 sö2no sö2n1öl sö2n1ő s1öntv sö2nú 3sör. sö2ra sö2rá 3sörb 2sörd sö2r1ed sö2reg sö2ren sör1f2 sö2r1iz 3sörk sö2ro sö2ró sö2r1ö2l sö2r1ő sör1s sö2ru 2sörv s1össz s1ösv s1ösz 2s1ötl 2s1ötv 2s1öv. 2söve s1övv s1ö2zön 1ső sőa2c sőa2l sőa2n 2sőá2g ső1bl 2sőbok ső2dad ső2dalk ső2dá ső2del ső2din ső2d1ő2r ső1dro sőe2l sőe2r sőe2s ső1gr ső1kl ső1pl ső1pn ső1pr ső2r1aj ső2r1á2csot ső2riz ső2rol sőr1ö2l s1őrti s1őrz ső2s1av ső2sim sős1orra. ső2s1orrá ső2s1orró ső1s2p ső1sta ső1str sősü2 ső2s1ül ső2s1üt ső2szap ső2sz1áll sőszé2k sősz1éké ső2sz1í spa2d1a2 1s2pann s2patu s2páj spá2n1a 1s2párg 3s2peci 1spektr 1s2peku 1s2pék s2p1ér 1spirálú spis3s sp2le2 s1p2lé sp2lu sp2ne 1s2pong sporta2 spor2t1al 1s2portág spor2tár 3s2portb spor2t1e2 1s2porté spor2t1érd 1s2porth spor2t1i2n 1s2portj 1s2portn 1s2portoka 1s2portol 1s2porton 1s2portos 3s2portot spor2t1ö spor2tő 1s2portra 1s2portró 1s2porttó 1s2portu spor2t1ü2 1spórák. 1spórol sp2ra s1prak 3spray s1p2re s1p2ré 1spric s1p2ro s1p2ró sp2sz 1s2raf srau2 1s2ráco sren2d1ő2 3s2róf srú2de ssab2b1i ssa2vo sság3g ssé2g1e2l ssé2g1é2j ssé2gid s2s1ékt s2s1i2z ss2kál ss2ko ss1k2r ss2lá sso2m1o ss2pó s1s2rá ss3sz ss2tad ss2tar ss2tat s1s2tí ss2to s1st2r ss2tú ss1ura ssy1ér ssy1ét s2sz sszae2 ssza1p2r sszat2 ssza1tr ssz1á2g ssz1á2ram ssz1á2ruk ssz1á2sz s3száza s3szedé sszeg1ér. sszegü2l ssze2g1ülő ssz1egye s3szekv ssz1e2lőa s3szeml s3szemm ssze1p2 ssze2reib ssze2reid ssze2rein ssze2reké ssze2rekt ssze2rem. ssze2remm ssze2rese sszer2t1á2r ssze1t2r s3széki ssz1é2lő sszér1in s3széto s3szige ssz1ing sszis1s sszí2vel ssz1k2 sszkész1 s3szob ssz1osz ssz1ósá s3szöc s3ször ssz1ös s3szöv ssz1p2 ss3zsi sszt2 ssz1tro s3szur sszus1s ssz1úr. 1stabil 1stadio st1a2dó 1stafí s2t1alj s2t1alk s2tand 1standa sta2n1ó2r stan2s1é st1a2nyag s2tarc 1s2tart. star2tas 1startos 1s2tartot 1startt sta1sl sta1s2t sta1t2r sta3u stau2t s2t1a2x st1azo 3stáb. 1stábj 1stábk 1stábn 1stábot st1ág. st1áld stán2c1ol stán2s1á2 stá2riá s2t1árka s2t1árká st1á2t1a2 st1áts 1s2tátu st1átv st1br st1dr ste2a 1s2teak s2t1ebé s2tedén s2t1e2gy s2t1e2ke. s2t1elf s2t1elh s2t1ellen s2t1elm s2t1e2lo s2t1elö s2t1e2lő s2t1elr s2t1elt s2t1elv s2t1ember s2t1e2mel s2t1eml ste2n1a ste2n1á ste2neg ste2n1és sten3n ste2nos ste2n1ő2 1stepp ste2rad ste2raj ste2ral ste2rav ste2rác ste2rál ste2r1e2le 1sterili ste2r1int ste2ris ste2r1o s2t1erő ste2sz s2t1eszm ste2u 1stégek 1stéget 1stégg 1stégr sté2k1a2 sté2ká stékát1 stékáta2 sté2k1el st1é2kesí st1ékí sté2k1o sté2ku s2t1é2le st1é2lé s2t1élm s2t1élt st1élv s2t1érc s2t1érem s2t1é2ré s2t1é2rőt s2t1érté s2t1érz stés3s s2t1észl s2t1étk s2t1é2ve. st1fl st1fr st1gr s2t1i2d sti2g s2t1ige s2t1igé s2t1i2ma s2t1i2má 1s2timm s2t1imp sti2na. s2t1ind s2tinf s2t1ing s2t1inv s2t1i2o st1i2pa st1irá st1iró stis3s sti2sz s2t1isza s2t1i2vá st1i2zo s2t1íj 3s2tíl s2tír st1írá st1í2v st1í2z stká2ro st1kr st1kv stola2t sto2lato sto2p1a 1s2topb 1s2toph 1s2topr 1s2topt sto2rál sto2rás sto2re sto2ris st1o2x 3s2tóla 3s2tólá st1ó2rá 1s2tós stö2k1ölt s2t1önt s2t1örö s2t1össz stőa2 stőe2 stőkész1 s2t1őra s2t1őrb s2t1őrc s2t1őreg s2t1őrei s2t1őré. s2t1őrén s2t1őrér s2t1őrév s2t1őrf s2t1őrg s2t1őrh s2t1ő2ri st1őrl s2t1őrm s2t1őrn st1őrp s2t1őrs s2t1ő2rü s2t1őrv st1pf st1pl st1pr 1strando 1st2rap 1straté s1trág 1st2réb s1t2rén st2riá st2róf 1strófá 1st2ruc 1struktú st1sc st1st st1sz st1t2r s2t1udv 1stukk st1uni st1u2ral 3s2túd st1úr. st1út s2t1üg s2t1ü2lő st1üst s2t1üt s2t1ü2v s2t1űr. s2t1ű2ri s2t1űrn s2t1űrt 1su suá2r subi1 s1udm 2s1udv 3sugár. 3sugárr 2s1ugr 3suhi 2sujj suj2j1a2da su2k1ará su2ke su2k1ö su2k1ü 3summ su2nal 2s1und 2s1u2ni su2no supe2 2sura s1u2rad su2rai su2rak su2ral su2rat su2rát 2surn 2s1u2ru su2szo 2s1u2tac 2s1u2tad 2sutak s1u2tal 2s1u2tam 2s1u2tan sutas1s 2s1u2tat 2su2tazi s1u2tazó 2s1utc 2sutó su2tód 2sutu 1sú sú2csal sú2csat sú2csem sú2cser sú2csip súcská2 sú2cs1ö sú2cs1ü2 súcs3z súdi2 súi2m s1újh 2s1ú2jí 2s1újs 3súly 2súr. 2súrb 2súré 2súrh 2súri 2súrk 3súrl 2súrn 2súrp 2súrr 2súrt sú2sén sú2só 2súsz súszó2s3z 2s1útb sút1en 2súté s1úth 2súti sú2tig 2s1útj 2s1útk s1útn 2súto s1ú2ton sú2t1ő 2s1útr 2s1útt sútü2 sút1üz 2s1útv 1sü sü2d1e sü2dí sü2dü 3sü3gé s1üggy 2s1ü2gy 3sü2k1a sü2kü 2süldö sü2led 3sültr sülye2 sü2lyes sü2ná süne2 sü2nev sü2n1é 2s1ü2nő sü2rí 2s1ü2rü 2süst 2s1ü2sz 2sütk 3sütőb sü2ze sü2zé 1sű sű1pr sű2r1a 3sűrí s1ű2ru sű2ző sva2s1u2 svá2gy1ón. svá2nyan svá2r1al svárosi2 sven1 svezetőé2 své2nyel své2tes svíze2 svíz1es s2vun sw2hi swhisky2 sy2bő sy1ig s2z 1sza szaa2 3szabáz 3szabd sz1a2dás 2sz1a2dó szaé2 3szaft 3szag. 3szagb 3szagú 2szagy. 2szagya 2szaj. 2szajá 2szajj 2szajú 2szakci 3szakm sza2k1ó2r sza2köz 2szalás 2sz1alb 2sz1alf 2szalg 2szalj sz1alj. sz1aljak sz1aljo 2szall 2szaln 2sz1alp 2sz1als 2szalt. 2sz1alte 2szalto 2szaltu 2szane sz1antr 2szanya 2szanyó 2szap. 2szapá 2szapb sza2pel 2szapé 2szaph 2szapi 2szapj 2szapn 2szapr 2szapt 2szarán 3szarb 2szarc 2szaré 3szart 3szarv 2szasp sz1assz sz1aszt sza2tala 3szaty 2szaut szau2ta 3szax 2szazo 1szá 2szábr 2szágó 2szágy szá2gyá szá2gyo szá2j1e szá2ke 2száldo szá2lin 3szálú szá2man szá2mar 3számá szá2mál 3számc szá2m1e2 3számé szá2m1érté 3számí 3számk 3száml 3számm 3számn szá2mor 3számt 3számú 3szánd 3szánt 2száp 2száradd 2szárás szá2r1e 2száriá 3szárí 3szárm szá2r1ó2ra szárt2 2száru. 2száruh 2szárus 2szásó. 2szátd 2sz1á2t1é 2száti 2szátl 2szátm 2szá2t1ö 2száts 2sz1átu 2sz1á2tü 2szátv sz1bl sz1br 1szcéna sz1cl sz1d2r 1sze 2szeb. 2szebé 2szech 2szecse 2szedz 2szeger 3szegfű 2szegz 2szeh 3szekcső. sze2keg 2szekéit 2szekés sze2kés. 3szekrén 3szekto 3szele. 2szelef 2szelemb 2szelemek 2szelemé 2sz1e2lemk 2szelemm 2sz1e2lemr 2szelemü 2szelemz 2szelere 3szelet 3szelén 2sz1elf 2sz1elgo 2sz1elha 2szelhá 2sz1eljá 2szelkü 2sz1ellá 3szellő 2sz1elm 2szelnev 2szelnö 2szelo 2szelö 2sz1e2lőá sze2lődö 2sz1e2lőf sze2lőré 2szelső 2sz1elszá 2sz1elta 2szeltá 2szeltű 2szelu 2sz1elül 2szelv. 2sz1elvá 2szelvek 2szelves 2szelvez sz1elvi 2szelvn 2szelvt 2sz1elz 2szember 3szemek 3személ 3szem1p2 3szemű. 2szenc 2szener 3szenny 3szentm 3szenz szeo2 2szepi sze2r1á2l 2szeredm szer1e2ge sze2rej 3szerel szer1eszt 3szerke 3szers 3szerta szer2tálo 3szerv szervíz1 3szerz 2sz1esd 2sz1esemé 2szesetb 2szesete 2szeseté 2szeseti 2szesetr 2sz1e2sés 2szeskü 2szeső sze1sp 2szeste 2szesté 2szesti 2szestj 2szestr sze2t1e2lő sze2t1é2k 2szetika sze2ton sze2tőr 2szeve 2szevő 2szexp 3szezo 2szezr 1szé 2széber 2szébr 2szég. 2szége 2szégő 2szégr 2széhe. 2széhen 2széhet 2széhs 2széji 3széke. 3széked 3székei 3székek 3székem 3székes 2székez 3székéb 3székév szé2k1ol szé2kos 3széks 3székü 3szélek 2széneke 2szénekn szé1pró 3széps 2sz1ér. 2sz1érb 2sz1érc 2sz1érd sz1é2rel 2szérem szé2rem. szé2remm 2sz1é2ren 2széré szé2ré. szé2rén szé2rér szé2rét szé2rév sz1érf sz1érg sz1érh 2sz1érin sz1érj 2sz1érk 2sz1érl 2sz1érm sz1érn 2szérő. 2szérői 2szérők 2szérőt sz1érp 2sz1érr sz1érs sz1értá 2sz1érte 2sz1érté sz1értí 2sz1értő 3széru 2sz1é2rü 2sz1érv 2sz1érz szé2tel széte2s 2szév. 2szévad 2szévb 2széve. 2szévei 2szévek 2sz1é2vet 2szévén 2szévét 2szévév 2szévf 2szévi 2szévk 2szévn 2szévr 2szévs 2szévt 2szévü 1szférai 1szféráé 1szféráso sz1fl sz1fr sz1gl 1szi szi2ab 2szide 2sz1idé 2szidő 2szifj 2sz1i2ga 2sz1igé 3szign szi2k1a2s szi2k1e2r szi2k1ó2 sz1imak 2sz1i2má 3szimb sz1impr 2szimpu 2szinas 2szinde 2szindí 2szindu sz1info 2szing sz1inko 2szinteg 2szio 2szirat 2szirá 2sz1i2ri 2szirod szi2sí 2sz1i2sza szi2szá 3szitu 2szivad 2szivás 2szivó sz1izg 2sz1izz 1szí 2sz1íg 3színe 2színna szí2vár 2szívi 3szívű 2sz1íz szka1pr 1szkarab szk1arch 1szkenn 1szlávh 1szlávok 1szleng. 1szlengn 1szlengr szle2t1e2l szle2t1o 1szloge 1sz2mok 1sznob 1szo 2szobj 2szoda. 2szodai 2szodak 2szodú 3szof 3szoká 2szokke 2szokoz 2szoksö 2szolaj szo2l1ál 2szolda sz1oldá 2szoldó 2szo2lim 2szolló 2sz1oltár 2szoltás 2szolvad 2szolvas 2szombor. 3szoms szo2nas szo2nár 3szond 2szora szo2r1ál 2szorm 2szorn 2szors 2szorv 2szostá 2szosto 2sz1otth 3szov 2sz1ox 1szó 2szólm 3szóló 2szónád 2szónái 2szóni 2szónod 2sz1ó2rán 2szórát 2szóri szó2sík 3szósz. szósza2k szó2száll szó2szón szó2szülő szó1tr 1szö 2szöbli 3szöge 2szöldes 2sz1öle 2szöre 2szöv. 2szövei 2sz1öz 1sző szőa2 szőe2r szőé2 3szőlő sző2ra sz1ősi 2szőz sz1őze 1sz2pí sz1pl 1szponz szrádi2 sz3saj sz3sap sz3sas sz3sav s3zsák sz3sán sz3sár sz3sás sz3sát sz3sáv sz3seg s3zsem s3zsen sz3sep sz3ser sz3sé sz3sh sz3sik s3zsin sz3sis sz3siv sz3sín sz3s2k sz3sl sz3sod sz3sok s3zsol sz3sor sz3só sz3sör sz3söv sz3s2p sz3s2r sz3s2t s3zsúll sz3sü sz3sz sz2t1álla sztá2r1a2d szt1á2ram sz2tá2ras sztá2rat sz2táre sz2tárf sz2tárh 1sz2tárj sz2tárny sztáró2 sz2táru szt1á2ruk sz2tárv szte2r1el 1sztereo szté2g szt1ége sz2térte sz2t1érv sz2t1été szt1örök sz2t1őrn 1sztrádá 1sztrájk sz2tür 1sztye 1szu szu2b szub1o szuc1 2szud sz1udv 2szugo 2sz1ugr 2szuh 2sz1uj 3szuká sz1u2ra 2sz1u2rá 2szuta sz1utó 2szutu 2s3zuz 1szú 2szúg 2szúj sz1úron 2sz1úrr sz1úrtó 2szús 2szúté 2szúth 2szúti 2szútj 2szútn 2szúto 2szútr 2szútt 2szútv 2szúz 1szü 2sz1üd 2szügg 3szüks 2szüld 2sz1ü2led 2szülőse 3szüne 3szürke 3szürkés 2sz1üs 2sz1üv 1szű 3szűk 2szűrödn 1szvit. 1szvitet 1szvitj 1szvitn 1szvitt sz3zs 2t. 1ta taa2d taa2l taát1 taáta2 taboz1 ta1bra 2t1abro ta1bró 2t1abs ta1cl ta2dalé 2t1adap ta2das t1a2data 2t1a2datb 2t1a2dato ta2datu 2t1a2dá 2tadio t1adj t1adl 2t1adm ta2dod 2t1a2dog 2t1a2dot 2tadó t1a2dóa ta2dóá ta2dób ta2dód ta2dóf ta2dóg t1a2dóh t1a2dóig t1a2dóik t1a2dóin t1a2dóit ta2dóí t1a2dój t1a2dóka t1a2dóké t1a2dóko t1a2dókra ta2dól t1a2dóna t1a2dóná ta2dóp t1a2dór t1a2dótó ta2dóü t1a2dóv ta1drá ta1d2re ta1dro t1ads ta2dun t1adv tae2l tae2r ta2ero taé2r 2tafí ta1f2r taf2ta ta2g1aj ta2gav taga2z tag1azo ta2gág ta2g1ál ta2gec ta2g1el ta2g1e2r ta2g1é2g 2taggo 2t1aggr ta2gid ta2giz ta2g1osz ta2g1ott ta2góc 2t1a2gón ta2g1ó2r ta2góv ta1g2raf ta1g2ram tagrádi2 ta2g1u2s ta2gut ta2g1ü2 2t1agy. ta2gya. ta2gyáb ta2gyáh 2t1agyb 2t1agyn 2t1agyr 2t1agyv ta2ire tai2rón tai2z ta2jé ta2j1u2s ta2jús 2t1a2kad ta2k1ál taká2r tak1áro ta2kás ta2kátk 2t1akce 2t1akci take2l tak1ele ta2k1ér. tak1é2sze 2t1akkora 2takkord 2t1akku ta1k2la ta1klu t1akna. ta2kó. ta2k1öb ta2k1öröm ta2k1ös ta1krá tak2reá ta1krí 2t1akro ta1k2rón 2t1akta. tak2tem 2takti. 2t1aktiv 2t1aktí 2t1aktj taktus1s ta2kus ta1k2va ta2l1a2da ta2l1a2dá ta2l1adh ta2l1adj ta2l1adn ta2l1a2do ta2l1a2dó ta2l1adt ta2l1a2du ta2l1adv 2tala2g1 t1a2lagu ta2lagú 2t1a2lakb tal1akc 2talakí 2t1a2lakj 2ta2laku 2t1alakz ta2l1a2l 2t1alany 2t1a2lapa 2t1a2lapí ta2lapk t1a2lapl 2t1a2lapsz ta2l1a2r ta2l1as tala2te 2talatti ta2l1au 2taláá ta2l1á2g 2taláí ta2l1állo tal1á2rak talás1s ta2l1áta tal1átr tal1ell ta2l1elő ta2l1eng tal1esi talé2g talé2k1e2 ta2l1ér. 2t1alge ta2l1i2ko tal1ikr tal1imp tal1ina. ta2lip ta2l1isk ta2l1í2r 2taljas 2t1alji 2taljz 2t1alkal 2talkím 2talkoh 2talkot 2taller tal3ly ta2l1ol talo2m1e ta2l1osz ta2l1őr tal2p1á2ro tal2pel tal2p1il tal2pus tal1t2re ta2lud 2t1a2lulj ta2l1u2r ta2l1u2t ta2lúr ta2l1út. ta2lü ta2lű 2talveo ta2mal tam1alm ta2maz ta2m1i2d 2t1a2mő t1ampa 2t1ampu 2t1amur ta2mü ta2n1aj ta2nal ta2nan 2t1a2nat tan1áll tan1álo tanás1s tan2del 2tandr ta2n1el ta2ner 2ta2n1es ta2n1ez ta2n1éj ta2n1ér. ta2n1érk tan1évb tan1é2vé tan1é2vi tan1évm ta2nid 2ta2nim tan1ist tanké2r tan2kére tan2kés tankó2 tan2k1óra 2tanny ta2n1osz ta2nód tan2te. tan2t1el tan2tors tan1trá ta2nü ta2nű 2tanyag 2tanyád 2t1a2nyó tao2l taó2r 2t1a2pa. 2t1a2pai ta2paké ta2pasá 2t1a2páb 2t1a2pád 2t1a2páé 2t1a2páh 2t1a2pái 2t1a2páj 2t1a2pák 2t1a2pám ta2pára ta2páró 2tapáu 2t1a2páv ta1p2la ta1plé t1a2pó. 2tapp ta1p2ré 2t1aprí ta1p2ro tap2sor taps3s tap2s1ü2 2tapun ta2rabe ta2rai 2t1a2ras 2t1a2rat 2t1a2ráb tarádi2 2t1a2ráh 2ta2rán 2t1a2rát 2t1a2ráv 2t1arbi 2t1arc. 2t1arch 2t1arco t1arcu 2t1arcú ta2r1i2k ta2romá tar1s2 tar2tab tar2t1e2l tar2t1em tar2t1en tar2t1ér. tar2tit tar2told 2tartos 2tartr 2tartt 2tasc ta2sem 2tasf ta1s2ká ta1slu ta1s2m 2tasnő ta2s1ol 2t1aspi ta1spr 2tasru 2tassz tas3szá tas3szt tast2 ta1s2ta 2taste ta1str 2tasv ta1sy 2t1aszk ta1szl ta2t1alj ta2t1alm ta2t1aszt tatá2rai. 2t1a2tei tate2s 2tatika 2tatiká ta2t1i2na. ta2t1i2ná ta2t1ing t1atlas t1a2tomo tat1orj ta2t1őr ta1t2ri 2t1atti tat1u2ra ta2tya ta2tyá 2t1a2uk tau2ta tau2tá 2tauto taü2z 2tavan 2tavatá 2tavató ta1wh ta2zon 1tá 2táb. tá2b1á tábe2sz1é2l 2tábé tá2big tá2bin 2tábj 2tábk 2tábn 2tábok 2tábon 2tábot tá2bö 2tábr t1ábrá tá2bü 2táciu tá2fa tá2fá 2tág. tá2ga. tága2d tág1ada 2t1á2gai tá2gaz 2t1á2gá 2tágb 2t1ágc 2t1á2ge 2t1á2gé 2t1ágf 2tágg 2t1ágh 2t1á2gi 2tágj 2t1ágk 2t1ágm 2tágn 2t1á2go 2tágr 2t1ágt 2t1á2guk 2t1á2gun 2t1á2gú 2t1ágv 2t1á2gy tá2hí tá2jal tá2jaz tá2j1e2g tá2j1e2l tá2jí tá2j1ok tá2j1ö2 tá2jő t1á2jul tá2lab tála2d tál1ada tá2laj tál1a2lap tá2lap 2t1álar tá2l1ál tá2l1áth 2t1áldá 2t1áldo tále2 tá2l1eg tá2l1el tá2lél 2t1áll. 2t1állam 2t1állan 2t1állat 2t1állás 2t1állh 2t1állí 2t1állj 2t1álln 2t1állo 2t1álls 2t1állt 2t1állu t1állú 2t1állv 2t1álma 2t1álmi 2t1álmok 2t1á2lomr tá2lomt tá2lö 2t1álru tá2lü tá2lyab tá2ly1a2c tá2lyad tá2ly1a2g tá2ly1a2l tá2ly1a2n tá2lyap tá2ly1at tá2lyau tá2lyátl tá2ly1á2z tá2lyid tá2lyir tá2lyis táma2sze tá2mí tá2mos 2t1á2mu tán1alm tá2nár tánc3c tán2c1e tán2céh tán2cél tán2cén tánckész1 táncs2 tán2csá tán2csor tán1d2 tá2n1e2 tá2ní tá2n1ó2 tá2nö 2tánpó tán2s1e tá2nü tá2nű tá2nyal tá2ny1as tá2nye 2tánz tá2p1a2 tápá2 tá2pál tá2p1ár tá2pát tá2p1e2 tá2p1il tá2p1in táp1oll tá2p1osz tá2pő tá2pü 2t1á2radá tár1a2dot tá2radó tá2r1a2g tár1ajt tá2r1a2l 2tárama. 2táramá 2tárami 2t1á2raml 2táramok 2táramol 2táramot 2t1á2ramt 2táramu 2táramú tára2n tá2r1any tá2rap tá2r1asz tá2r1att tá2r1au tá2r1av tá2rág tá2r1ál tá2r1á2sz tá2r1átl 2tárboc tá2r1e2 tá2réd tá2rés tár2gyö tá2r1i2k tá2r1i2p tár1isk tá2r1ism tá2rí tár1k2 2t1árkád 2t1árkána 2tárkár 2t1árnyé tár1okm tá2r1osz tá2róc tár1órá tá2rö tá2rő tár2s1alt 2tártás tárt1öltő tár1tro 2táru. 2tárua 2tárub 2táruc 2t1á2rug 2t1á2ruh 2tárui 2t1áruj 2táruna 2tárus 2tárut. tár1uta 2táruü 2táruv 2tárúé tá2rúj 2tárúk tá2rús tá2rü tá2rű tá2s1a2d tá2s1aj tá2sal tá2s1a2r tá2saz tás1á2ga tá2s1á2rai tá2s1á2rá tá2s1á2ré tá2s1árh tá2s1árn tá2s1á2ro tá2s1árr tá2s1árt tá2sás 2t1ásáso tá2s1á2to tá2s1e2 tá2sis tá2sodv tá2s1ol tá2sor tá2só 2tásók tás1ó2r tá2sö tá2ső tás3s tást2 tás1tr tá2sut tá2s1ü2 tá2sű t1ásván tá2sz1ak tá2szal tás3zav tá2s3zá tá2sze tás3zen 2tászi 2tászo tá2szos tá2s3zó 2tászt 2t1átad 2t1á2tál 2t1átc 2t1átd 2t1á2t1e2 2t1á2t1é 2t1átfo 2t1átg 2t1áthe 2t1áthi tá2t1ir 2t1á2tí 2t1átje 2t1átkö 2t1átlag 2t1átm 2t1á2t1ol 2t1á2t1ö 2t1á2tő 2t1átp 2t1átre 2t1átru 2t1átsz 2t1átte 2t1átté 2t1áttö 2t1áttű 2t1átut 2t1á2tü 2t1átvi 2t1átvo tá2v1a2d tá2vak táva2l tá2v1a2n tá2vas tá2vaz tá2v1ál tá2v1e2 tá2véd tá2v1érz tá2v1és tá2vin tá2vis tá2ví tá2v1or 2t1á2vó tá2vö tá2vő tá2vü tá2zsal tá2zsál tá2zsó tázs1p tbal2le tbeá2 tb2la tb2le tb2li tb2lo tb2lú tb2ra tb2re t1b2ri tb2ro tb2ró tb2ru tca1k tca1s tca1t2 tc2lu tc2re tcsap1á2g tdíja2d tdí2j1ada td2ra td2rá td2re td2ro td2ró td2ru 1te te2aa te2aá te2ab te2ac te2a3d te2ae te2aé te2ag te2ah teai2 te2aiv te2aí te2aj te2aku te2alap te2aláz te2ali te2ana te2ao te2aö te2aő te2apa te2apá teas2 te2a1sp te2asza te2aszá te2aszo tea1tró te2aú te2aü te2av te2az te2ber te2béd 2techó te2csá te2dit te2dí 2t1e2dz 2t1eff te1f2r te2gan te2g1a2r tega2z teg1azo te2gá teg1ál teg1ár te2g1eg teg1e2lem te2g1ell te2g1elr te2gene 2tegere. teg1ered te2g1él te2g1é2p tegész1 teg3g te2gid te2gis te2giz te2g1on te2g1ö te2gú te2g1ü2g tegü2l te2g1ülé te2g1ülő 2t1egy. 2t1e2gyes t1e2gyez t1egyén 2t1egyh 2t1egyl 2t1egys 2tegyüt tei2g tein1s te2j1a teje2g te2j1ell te2j1elv te2j1er te2jin te2jí te2jo te2j1ó te2j1ös te2jő te2j1u2 te2jú te2k1ag te2k1ál te2k1el tek1éret te2k1i2p te2kí te1klu te2k1ok te2k1ös te2k1und te2k1út te2lab te2lag te2laj te2l1an te2lap te2lar te2las te2lav te2l1á2g te2lál telá2r te2l1át 2telbü teleí3rá 2telej tel1ejt 2telektr tel1e2len te2l1elk te2l1ell te2lemba te2leme. 2telemei 2te2lemek te2lemes te2lemén 2t1e2lemű tel1esés te2l1e2ső te2l1este tel1esti tele2t1ér. t1e2lég tel1érét te2l1éte t1elfoga telié2h te2l1imi te2lind te2l1inf te2l1ing 2t1elix te2lír tel2l1eg 2tellenf 2tellenő 2tellenz 2t1ellniv 2telméle te2l1ó2 te2l1öl 2telőadá 2t1e2lőí 2telőnn 2t1e2lőny te2lőtt 2t1e2lőtu te2lővét tel1őzi. tel1p2 2t1elsa 2t1első 2t1eltelé 2t1eltett. 2t1eltéré te2lú telü2ké. 2t1elv. 2t1elvb 2t1elvei 2t1elvek 2t1elvet 2t1elvév 2t1elvh 2t1elvi. 2t1elvil 2t1elvk 2t1elvn 2t1elvr 2t1elvt 2t1elvü 2t1elvű 2t1elvv te2map te2m1as 2t1embl 2t1embr te2m1e2g tem1e2leg 2t1emelé 2t1emelk 2te2melő te2melv te2m1él te2m1ér. te2m1é2rő. tem1érté 2t1e2més te2m1éte te2m1étk te2mid te2migr tem1ill te2mim tem1ing te2m1int te2móc te2m1ó2r te2m1ő2 2tempá 2templi 2t1e2mul te2mus te2mut temü2l te2m1ülé te2nad te2n1a2g te2nal te2n1a2r te2n1as te2nat te2nau te2n1á2t ten1d2h tene2g ten1egy te2n1el te2ner 2tenerg te2n1esz te2n1ékt te2n1év. te2n1évi 2t1enged te2n1i2p te2n1ol te2n1ó2 te2nö ten2tin ten2t1í2v ten1tri te2n1u2 te2nú te2n1üg te2nünn 2t1enyh t1enyv te2oc te2of teo2s 2t1epiz 2t1e2pos 2tepp tep2p1é2k ter1abl ter1a2cé te2r1ada ter1aka te2r1a2n te2r1a2r te2rau ter1á2cs te2ráf te2r1áll ter1álm te2r1á2ri ter1áta ter2ch ter1d2 2terdő 2teredm te2r1e2dz ter1egé ter1egy 2t1e2rej te2r1e2ke. 2t1e2rekl te2r1elm tereme2 te2r1ent 2tereo tere2pa tere2p1e2l tere2p1ü2lé te2r1er te2r1e2ső te2r1este te2r1esté te2reta te2r1eti te2retn te2rég te2r1é2j ter1éka te2ré2l ter1éle ter1élv ter1g2 ter1iko 2terili ter1illa teri2na te2r1i2p te2rism ter1ist ter1izm ter1k2 t1erkölc termés1s te2r1old te2ror te2r1ox te2r1ó2r te2rök te2r1ön te2rő 2t1erő. 2t1erőb 2t1erőf 2t1erős t1erőt t1erőv ter1s2 tersz2 tert2 ter1tr te2rur te2r1ut te2r1út te2r1üg te2r1üld ter2vaj ter2van te2sar te2sár te2sel tes1ell 2t1esemé 2t1e2setb 2t1e2sete. 2t1e2setei 2t1e2seten 2t1e2setet 2t1e2seté 2t1e2seth 2t1e2seti 2t1e2setn 2t1e2setr 2t1e2sett te2sél 2teséll 2tesély 2t1e2sés te2s1int tesí2r te2sírn te2s1író te2síz 2teskü t1esni te2sot 2t1e2ső tesp2 2t1esszen tes2tak tes2t1áll testá2r tes2tára tes2t1elk tes2t1ell tes2t1er 2testéj 2testék tes2t1ékn tes2t1éks 2testém tes2tism tes2t1o testő2 tes2t1őre tes2t1őré tes2tur te2s1ú te2s1ü2v 2teszet 2t1eszmé tesz2t1a2 teszte2r tesz2t1ere tesz2t1é2te tesz2tor te2t1a2k te2t1a2l te2tana te2t1a2p te2tág te2t1ál tetá2r te2t1ára te2tát te2t1e2g te2t1ell tet1e2lő tet1elr te2t1elv te2tene tete2r te2t1eré te2t1esz te2t1éj tet1ékk te2t1é2l te2t1éri te2t1érv te2tid 2t1e2tika 2t1e2tiká te2tim te2t1int tetkész1 te2t1olt te2t1ot te2tór te2tur te2t1üz 2t1e2tűd te2t1ű2z tevés3s te2vol te2w1a 2t1exp 2t1e2zer tezőa2 t1ezred 1té 2t1ébr té2cő té2des 2tég. 2tégb 2téget 2tégé té2gép té2gés 2tégg 2tégj 2t1égk tégla1 2tégn 2t1é2gö 2t1é2gő 2tégr 2tégt tégü2 té2g1ül 2t1éh. 2t1é2hek 2t1é2hen 2t1é2hes 2t1é2het 2t1é2hé 2t1éhs 2t1é2jen té2jes 2t1éjr 2t1éjs 2t1éjt té2kab té2kad ték1ada té2k1aka ték1alk té2kam té2k1a2n té2k1ar téka2t té2k1att té2kaz té2k1ág té2k1e2c té2kedé té2k1e2g té2k1e2kéh té2k1e2lőá té2k1elr té2k1er té2k1esz té2k1eti té2k1é2k té2k1é2l té2kép té2k1ér. té2k1és tékfélé2 tékfé2l1év té2kid té2kik té2kim té2kirá té2k1i2s té2kí2 té2k1o2r té2k1osz tékó2 té2kór té2k1ö2 té2kő té2k1u2t tékü2l téla2 té2lak té2l1an té2lap té2las t2élá té2láb té2lál té2lár té2l1á2t té2lei té2le2l tél1ele tél1ell tél1elő tél1elv té2l1e2r té2les tél1est té2lez tél1ékb tél1éké té2lí té2ló té2l1ö2 télőkész1 télu2 té2lut 2té2lű té2lyeg télyigaz1 téma1p té2mé té2mil téna2 té2n1an 2t1é2nekb 2t1éneke. 2ténekek 2t1é2neké 2ténekl té2n1in té2n1ö2 té2ny1e2g té2ny1e2l té2nyék tényigaz1 té2nyim té2nyo té2nyö tépés3s 2t1é2pí té1p2la 2t1é2pül té2rab té2raj tér1akt té2r1a2n té2rar té2ras té2rav té2r1á2r 2térdekb 2térdekl 2térdekn 2térdekü 2térdekű tér2d1e2mel tér2d1í2j té2reg té2r1e2l té2rem tér1eml té2r1eng té2r1eső té2r1essz té2r1esz 2t1é2rett térés1s té2r1ész tér1éte téri2d té2r1ide té2ril té2rip té2ris 2térkez 2t1érmü té2r1os té2rö 2t1értes 2t1érték 2tértő. 2t1értők tér1t2r 2t1értv té2r1u2 2t1érv. 2t1érvei 2térvek 2t1érvény tésa2 té2sab té2sag té2s1aj té2sak té2s1al té2san té2sap té2s1as té2s1az té2s1á2 tésát1a2 té2s1eg té2s1e2l té2s1e2r té2sés tés1iko té2s1or té2só té2s1ő2 té2su tésü2l té2s1ülé tés1ülő té2s1üt tés3zav tész1ál tés3zár té2szeg té2sz1emb tés3zene té2szesz té2sz1ék tés3zsi té2t1a2l tétcsa2 té2t1e2g tét1e2lemt tét1elkés té2t1elve 2t1éteri té2t1ers té2t1e2v té2t1é2te té2tok té2tol té2t1os tétó2 té2tón té2t1ór 2t1év. 2t1évad 2t1évb 2t1évc 2t1é2vedb 2tévei 2t1é2vek 2t1é2vem 2téves. tévé1sz2 2t1évf 2tévh 2t1é2vi 2tévk 2t1évn 2t1évr 2t1évs 2tévt té2vú 2t1évü té2vükö té2vün 2t1é2vű 2t1évv té2zs tfa2l1aj tfa2lan tfa2le tfa2lom tf2jo tf2la tf2le tf2li tf2lo tf2ló tf2ra tf2rá tf2re tf2ri tf2rí tf2ro tf2rö tf2ru tgá2zak tgá2zár tgá2zé tge2n1el tge2né tgen1s tg2lo tg2ló tg2ne tg2ra tg2rá tg2ri tg2ró tg2ru tg2rü tha2de 1thagore t2har. 1t2hau 1t2he. the2i2d1 1theidp 1theusz t2holi thon1n tho1ny 1thosz th1sc 1thy 1ti ti2aa ti2ae ti2aé ti2af ti2ah ti2aj tiakész1 ti2ala ti2am ti2a1p ti2ata ti2atl ti2aü ti2av ti2chi ti2dea 2t1i2deá 2t1i2deg ti2dei 2tidej 2t1i2deo ti2dén 2tidéz ti2dio 2t1i2dom 2t1i2dő tie2le tie2n tié2b ti1fl 2t1i2ga 2t1i2gá 2t1i2ge. 2t1i2gék ti1g2lo ti1g2ra 2t1ihl ti3ki ti1kle ti1klu ti2konb ti2kono ti2konr tiko1sz2 ti1k2ri ti2lac ti2lad ti2lan ti2l1ág tile2g til1egy ti2lex ti2lim til1ing ti2l1i2p ti2lir til1isk 2t1illato 2tillú ti2l1ö2 2t1i2ly ti2mak ti2máb 2timádó ti2máj ti2már ti2máz ti2mes 2timmu 2timrei 2tinakat. 2t1inakk tin1akt ti2n1a2n tin1ará tina1t2 ti2n1au ti2n1áll tin1árt 2t1indá 2t1inde 2t1indí 2t1indu ti2ne. ti2neg ti2n1eké ti2nem 2t1infar 2tinfl 2t1infr tin2gal tin2gas tin2g1ár tin2g1e2l 2t1ingeni tin2g1eti tin2gos tin2g1ó2 2t1i2nic tini2g tin1iga ti2n1i2m tini1sz2 2t1inku 2t1inkv tin3n tin1órá ti2nö 2t1insp 2t1integ 2t1intéz ti2n1ut ti2nű ti2ol ti2onb ti2onh ti2oni ti2onj 2t1i2onn 2t1i2ono 2t1i2onr 2t1i2ont tio2x ti2pad ti1p2la tip2pin tip2po 2t1i2rat 2t1i2rán 2t1irg ti2rig 2t1irk 2t1i2rod 2tirol ti2rom ti2rón 2t1irr tir2s1 2t1irt tis2as ti2s1a2u ti2s1el 2t1i2si. ti2sim ti2sin ti2s1i2r 2t1i2sis 2t1isko ti2sor 2tistv tisz2tina ti2t1i2o ti1t2ri ti1t2ro tiu2mé tiu2m1i2 2tivad 2t1i2var 2t1i2ván 2t1i2vó ti2xa tize2n1 ti2zé. 2tizéj 2tizék ti2zér ti2zét ti2zév tizo2m 1tí tí2gé tí2ja tí2já tí2jú tí2la tí2l1ó2 2tínio 2t1í2no 2t1ínr 2t1íns 2t1í2ny tí2ra2n tí2rar tí2r1ál 2t1í2rás tí2r1e 2t1í2ró tí2rő tí2rü títés3s títőa2 títőe2 tí2v1ec 2t1í2vei tí2vel tí2ver 2t1í2véi tívi2 tí2vik tí2vir tí2viv tí2v1ó2 tí2vö tí2vő tív1s tí2za tí2zá tí2zel tíz1ele tí2z1emb tízi2 tí2zik tí2z1is tí2zí 2tízl tí2z1o tí2zö tí2zsá tí2zu tí2zül tíz1ülé 2t1í2zű tje2gy1á2 tjó2t1 tka1pr tka2ró2r tkende2 tké2p1e2kéh tkia2l tkiá2 tkie2 tkié2 tk2la tk2li tk2lí tk2ló tk2lu tkö2z1él tkőé2h tk2ra tk2rá t1k2reác t1k2ré t1k2ri tk2rí t1k2ro t1k2ró tk2ru tk2va tk2vi tk2vó tla2c3 tla2g1a2d tla2g1ar tla2gas tla2gál tla2g1e tlag3g tla2g1ó tla2n1e2 tlanká2 tla2nó tla2pár tleí2 tlen3n tle2t1a2n tle2tas tle2tele tle2t1elv tle2t1ér. tle2tos tle2tő tleü2 tlé2kal tlé2kem tlé3pe tlés3s tlé1trá tló1dr tma2gál tma1k tmá2nyir tme2g1e2 tme2g1é tme3gif tmu2sí tmus3s tmu2sz tna2gya tná2d1 tne2k1el tne2küld tne2m1e2r tne2r1a tne2r1á tne2sz1a tne2szi tne2sz1ó2 tnév1a tnómen1 tnómenk2 tnö2k1öl tnőé2n 1to 2t1obj 2t1obl 2t1obs to1cki to2daa to2das to2dí 2t1o2dú 2t1odv 2t1off togás1s to1g2ráf. to1g2ráff to2il to2k1aka to2k1a2n to2k1ap tok1ari to2k1ál tok1á2rok to2k1átl to2k1átm to2k1átr to2k1áts to2k1átt to2k1átv to2ker to2k1é2l to2kép to2kid to2k1im to2k1in to2k1ip to2k1iv to2kí t1o2kozá to2k1ö to2kő to1k2ro tok1s toksz2 to2k1ur to2kúr to2kü to2kű to2l1a2d 2t1o2laj to2l1akt tola2n to2l1any to2l1a2r tol1atom tol1ábr 2toldalo 2toldalt 2t1o2lim tol1k2 tol2l1árb tol2l1á2ré tol2l1árh tol2l1árr tol2leg tol2l1in tol2l1í2 to2l1o2r 2t1oltás to2l1ut 2tolvas to2m1ag to2m1ak to2m1a2l to2m1a2n to2m1ap to2m1ál to2m1á2r tom1b 2tombe to2m1el to2men tom1erő to2m1es to2mí to2m1osz to2m1ó2 to2mö tom1p2 tom1s 2tomtö 2tomú to2mü to2mű to2nalm tona1t2 tonau2 ton1áll ton1álm to2n1á2z to2n1el to2n1en to2ner ton1gr to2nil ton1k2 to2nol to2n1or to2n1osz to2nóc to2nór to2nö to2nő ton1s2 tont2 ton1tr to2n1út to2nü to2nű to2nyal to2nye to2p1at 2topc 2to2pe to2pik to2piz 2topp. 2toppo 2toppr top1t2 to2pü to2r1a2d to2r1ag to2r1aj to2r1aka to2r1akn to2r1ako to2r1a2l tora2n to2r1any to2r1a2p to2r1ar tor1ass to2rat to2r1au to2r1av tor1ács to2r1áll to2r1álm tor1áté to2r1átl to2r1á2z 2t1orcá tord2 tor1dr tore2 to2rec to2rek to2r1el to2ren to2r1er tor1f2 tor1g2 2t1organ 2torie to2r1ill to2r1int to2r1isk tor1k2 2tornó to2rop to2rosz tor1oszt to2r1ov toró2 to2rón to2r1ór to2rö to2rő 2t1orr. 2t1orráv 2t1orri tors2 tor1sc tor1sk 2t1orsó tor1sp tor1st tort2 tor1tr to2rü 3torvá 2torvos 2torvv to1ry to2s1as to2s1e to2sik to2s1in to2sis tos3sze t1osto 2t1osty to2sü to2szal to2szan to2sz1e tosz1k 2t1oszlop. tosz1tr 3t2ot. 2t1otthon to2ut tova1 2t1o2ve 2t1o2vi 2t1o2vu 2t1oxid 2t1o2xig to1yo toza2t1al 1tó tóá2gy tóá2r tóát1 tóáta2 tó1bl tó1bra tó1bró tó1cl tócsa2p1á2g tó2daj tó2d1a2n tó2d1esé tó1dro tó2dúr tó1fl tó1gl tó1g2r tói2g tóí2v tóká2rok tó1k2l tó1kre tó1kré tó1kro tónus3s tóo2k tóó2r tóp1ass tó2p1e2l tóp1int tó1pro tó2ras tó2ráb tó2ráh 2t1ó2rái tó2rár 2t1ó2rás tó2rát t1ó2ráv tó2sep tós1éták tós1é2tát tó2sír tó1s2kan tó1skál tó2s1ol tó1s2porto tó1s2portt tó1s2rác tó2s1ü2l tó2s3zene tó1sz2f tó1szk tó2taj tó2tág tó2tom tó1t2rá tó1t2re tó1tro 2tóvod 2t1ó2vó 1tö töb2bev töb2b1o 2t1öbl 2tödéé tö2dém tö2dí 2tödné tö2do 2tödöt 2tödü tö2ka tö2ká tö2k1e2v tö2k1ér. tö2k1érd tö2kid tö2kí 2tö2ko 2t1ö2kör tökös3s tö2k1ő 2tökrös tö2ku 2t1ölb 2t1ölci töl2gya töl2t1á2 t1öltön 2t1öltöz töm2b1a tömbe2 töm2bel töm2b1o t1ömle 2t1ömlé t1ömli tö2möl tö2na tö2ná tön1d2 tö2nen tö2n1í tön2kár tönkész1 tö2no tö2n1ő tön1s tö2nu tö2nú 2t1ö2reg törés3s 2töröks tör2t1a2 tör2teg tör2t1e2lem tör2ter tör2térn tör2t1és tör2t1o2 tör2t1öl tör2tös tör2zsa tör2zs1ö2l 2t1ösv 2t1ösz 2t1ötl töt2t1á 2t1ötv 2t1öv. 2t1övb 2t1övh 2t1ö2vie 2tövig 2t1övj 2t1övk 2t1övn 2t1övr 2t1övv 2t1ö2zön tözőe2 1tő tőa2c tőa2l tőá2g tő1bl tő1br tőe2ké tőe2r tőé2l tő1fl tő1gr tőí2t tőí2v tő1kl tő1kv tő1pl tő1pr tő1ps tő2rag t1őral 2t1ő2r1an tőr1egy 2t1őrez 2t1ő2rék 2tőréü tő2rin tő2r1is 2t1ő2rí 2t1őrjá 2t1őrjel 2tőrjö 2tőrka 2tőrl 2tőr1öl 2tőrp 2t1őrti 2tőrtr 2t1őrz tő2s1a2l 2t1ősny tő1spe tő1s2pi tő1spr tő1srá tő1sta tő1s2tá tő1sté tő1str 2tősű tő2sű. tősz2 tő1szt tő1tr tőü2l tőzá2 tőzár1 tpen3n tp2fe tp2la tp2lá tp2lé tp2lu tp2ra tp2re tp2ré tp2ri tp2ro tp2ró tp2ru tp2sz tpu2tin t2rafó 1t2ragé 1tragi tra1k2l tra1kro tran2d1a2 tran2dá trans1s tran2sz1ai tran2sz1o2m tra1s2p trat2 t2rati tra1tr 1trágya 1trágyáb 1trágyáé 1trágyáh 1trágyái 1trágyáj 1trágyák 1trágyán 1trágyár 1trágyás 1trágyát 1trágyáv t2rájk trán2sz trá2nyal trá2t1ér tre2csa tre2cso t2rego tren2da tren2d1ő2 1trení tréé2 1t2réni tré1p2 tré2sz1á2 tri1g2 trii2 t2rikó t2rill 1t2rió. t2riój t2riók trol2l1in tro2mad tro2maj trona2 tro2n1ag tro2nal tro2nan tro2nes tron3n tron1tr tr2os tro1sz2f tro1sz2ta t2r1o2x tró2de tró2nas tró2n1e 1trónj 1t2róno t2rónt tró1sz tró2zsi t3röm 1t2rös 1t2rub tru2mad 1t2rup tsa2vo ts2ch 1tsche tsé2g1éj ts2ká ts2ko ts2la ts2lá ts2le ts2li ts2má ts2mi ts2ni tsói2 ts2pa ts2pe ts2pi ts2po ts2pó tsp2r ts2rá t1s2ta t1s2tá ts2te ts2té ts2ti ts2tí ts2to tst2r ts2tu ts2tú 1t2sub tsza2ké tsza2k1ü tsza2t1e2 tsza2tö tszé2t t1sz2f t1sz2k t1sz2l tszö2g1e2le t1sz2p t1sz2t2 ttad2 tta2dó. ttag1g tta2g1o2ku tta2n1ér t2t1ará t2t1aszt tta1t2r ttaü2 t2t1a2z ttán2s1á2g ttá2v1i2 tte2leme t2t1e2lőa tte2r1in t2t1erő tte2s1a2 tt1ég. t2t1é2le tté2rak ttér1em tté2r1es tté2r1é2ne tté2rid ttér1in tt1éss tt1é2vér t2t1i2o t2t1iro t2t1isk t2tizz ttír1a tt1írá tt1kr ttornác1 t2t1ors ttó1dr ttó1p2 t2t1ó2rá ttó1s2r ttö2l tt1ölő tt1pr t1t2raf t1t2rag t1t2ran ttransz1 ttranszk2 t1t2rav t1t2róf tt2rón ttsé2gel tt2si t2t1ug t2t1üd t2t1üt t2t1ü2v ttwe2 t2ty tty1or tty1ö2l ttyü2 tty1ül ttyülés1 1tu tuá2r tubus1s tu1ck tuda2te tuda2t1ö 2tudí tu2ga tu2go 2t1ugr tu2hu tu2in 2t1ujj 2tuká tulo2 2t1ulti 2t1ultr tu2lü tu2mab tu2m1a2d tu2maj tu2mal tu2man tu2mar tu2maz tu2mál tu2meg tu2m1el tu2mer tu2mes tu2m1i2k tu2mim tu2m1inf tu2m1int tu2m1ir tu2mis tu2miz tu2mí tu2mol tu2mö tu2mő tum1p2 tu2mü tu2nal 2t1unc 2tunió tu2nit 2t1u2no 2t1u2nó 2t1unt tu1p2r tu2rac 2turai 2t1u2rak tu2ralo tu2ram 2t1u2ras tu2ráh 2turán tu2rár tur2g1a tu2run tus1abl tu2sar tu2ság tu2se tu2s1érté tu2sis tu2s1í tu2sor tu2s1ó2 tu2s1ö tu2ső tuss2 tus3sze tus3szi tus3szo tu2sü tu2szab tu2sz1a2d tu2szag tu2szal tu2szap tu2szar tus3zav tu2szál tusz1em tu2sz1é2l tu2sz1é2p tuszi2 tu2sz1il tu2szin tu2sz1ip tu2szir tu2szis tu2sz1it tu2szí tusz1k2 tu2szol tu2s3zó tu2szö tu2sző tusz3sa tus3zse tuszt2 tusz1tr tu2szü 2t1u2tad 2t1u2tak 2t1u2tal 2t1u2tam 2t1u2tas 2t1u2taz 2tutá tu2tán 2t1utc 2t1u2to tu2tód tu2tóp tu2tót tu2tun tu2um 2t1uzso 1tú tú2ja tú2jí tú2jo tú2ju tú2l1a2 tú2l1á2 tú2l1e2 tú2l1é2 tú2list tú2lí tú2lok tú2lop tú2l1ó2 tú2lö tú2l1ő túl1s túlt2 tú2lú tú2lü tú2lű túra1sz tú2rál tú2r1e2 tú2r1ér tú2r1és tú2r1ol tú2rot tú2rö tú2rü tú2sze tú2szö tú2szü tú2tá 2t1útb tú2t1e2 2t1ú2té 2t1úth 2t1ú2ti 2t1útj 2t1útl 2t1útn 2t1ú2to 2t1útr 2t1útt 2t1útv 1tü 2t1ü2dí 2t1ü2dü 2t1üdv tü2ge tü2gy tü2l1a tü2lá 2t1ü2led tü2l1e2m tü2len tü2lep tü2l1e2s tü2l1e2v tü2l1ér tü2lir tü2lí tü2l1o2 tü2l1ökl tü2löm tü2l1ön tü2l1öz tü2lők tü2lőr tü2lu tü2lú tü2ma tü2mék tü2m1ő tüne2tel 2t1ünn 2türeg 2türes 2t1ü2rí 2t1ü2rü 2tüst 2t1ü2te 2t1ü2té tü2ti 2t1ütk tü2tö 2t1ü2tő tü2vö 2t1ü2zen 2t1üzl 1tű tűcsa2p1 tű2d1al tű2dá tűe2két tűé2h tűfélé2 tű1gr tű1kv tűleü2 tű1pl tű1pr tűrés1s tű1sp tű2z1a2 tűzá2r tű2z1ára tű2zát tű2zene tű2zis tű2zí tű2zo tű2z1ös tűz3seb tű2zú tva2n1e tva2név tva2raj tvá2nyad tvá2nyí tvá2z1al tvá2zip tve2n1e2v tven3n tven3t tvenü2 tve2nül tve2n3y tve2raj tve2ral tve2r1á2 tve2reg tve2r1é2sz tve2rint tve2rip tve2r1o tvers2 tver1st tve3se tvé2nyel tvér1int tvé2r1o tviselőé2 tvis3szá t2víve t2y 1tya tyai2ko tya1kl tya1p2 tya1sz2 tyat2 tya1tr tyau2 1tyá 2ty1ág ty1áld ty1áll tyá2ran tyár1s tyás3s 1tye ty1e2gy ty1ela ty1ell ty1emb ty1e2rő 2ty1ex 1tyé 2ty1éte 1tyi 1tyí ty1í2r ty1ív tynk2 1tyo tyo2lan tyo2r1os 1tyó 1työ 1tyő ty1ős ty2pe ty1pr ty2sa ty1sp 1tyu 2ty1ug ty1u2tá 1tyú tyú2kü 1tyü 1tyű 1t2zekn 1tzekrő 1t2zen. t2zenj 1t2zer 1t2zes tz1ő2r tz3sc 2u. u1a ua2ch ua2da ua2dá u2ador. u2adorb u2adoré u2adorn u2adoro u2adorr u2adort ua2dó ua2es ua2gá ua2ja ua2já ua2la ua2lá ua2ny ua2sz ua2ty ua2ut ua1yá ua1yé ua1yi ua1yo ua2zo u1á uá2ga uá2gy uá2po uá2r1á uá2r1e uá2réj uá2r1is uá2sz uá2t1a2 uá2t1e ub1a2la ub1alk u2b1ang ub1arc ub1a2ri ub1ár. ub1á2ro ub1dr u2b1e2b u2b1ed ube2lá ube2lel ub1elö ub1e2se ub1est u2b1éj ub1éle u2b1é2n u2b1ép u2b1érd u2b1é2re u2b1érm u2b1érte u2b1éve ubi2g u2b1iga u2b1ige ubi2ke u2b1ina. ub1ism ub1kr ub1olda u2bork u2b1orv u2b1osz ub1óri ub1öl ub1ös ub1öv ub1pl ub1pr ub1sl ub1sp u2b1ud ubu2sz u2b1új ub1üd ub1üg ub1ü2l ub1üz uca2t1á2 uc2c1e uc2c3h uc2c1ina uc2cip uc2cö ucc3sz uc2cú uc2cü uc2cz uc1emb uc3há u2c3hé u2c3ho uciá2r uci1p u1c2kig u1c2kon u1c2kot uc2ky uc1ö2l uc1pr ucsa2p1á2 uc3ság u2cs1ál u2csáru u2cs1e2l u2cs1id ucs1s u2c3sü uc3sz u2c1ug uc1üg uc3zá uc3ze uda2tal uda2tál uda2t1á2ram uda2t1eg uda2ter udáskész1 udás3s udi2o u2d1isk udo1kr udó2se udó2sor u1d2rá u1d2ro u1e ue2bé ue2dz ue2gé uegész1 ue2gy uel1ér ue2lő ue2me ue2rő uervíz1 u2es. u2esb ue2s1e u2esh u2esi u2esk u2esn ue2ső u2esr u2est u2esu ue2s3zen ue2te ue2ve u1é ué2ge ué2gé ué2ké ué2le ué2pí ué2pü ué2te ufé2nye u1f2le uf2ri uf2ru uf2tü ug1agy ug1alj uga1p ug1apa 1u2garo uga2t1el uga2tés uga2tol uga2t1ó2r ug1ág ugára2 ugár1ad ugá2rá ugá2ros ugá2ru ugár1ú ugás3s ug1á2sz ug1el ug1e2v ug1é2l ugg2l ugi2e ug1ing ug1int ug1iro ugi2t ug1ita ug1ivá ug1ír ug1kl ugo2r1á2 ugó1sv ugó2s3zá ug1ös ug1pr ug1sk 2ugui u2g1ut u2g1új ug1üg ug1üz ug1űr ugya2n uh1a2dó uh1alk uha2r1as uha1t2r uh1att u2h1á2g uh1áll u2h1ár. u2h1árb u2h1árf u2h1árh u2h1árn u2h1árr u2h1árv uhá2szak uh1em uh1ex uh1ind uh1ing uh1orz uh1őr uh1pr uh1tr u2hu. u2huj uh1ujj uh1üz u1i ui2de ui2dő ui2eu ui2ga ui2gé u2i1gn ui2pa ui2rá ui2zé u1í uí2ja uí2ju uí2ve uí2vű u2j1an 1ujja. 1ujjad 1ujjai 1ujjak 1ujjam 1ujjas 1ujjat uj2j1á2ru 1ujjb 1ujjc 1ujjd 1uj2j1e2 1ujjé 1ujjf 1ujjg 1ujjh 1ujji uj2jí 1ujjk 1ujjl 1ujjm 1ujjn 1ujjp 1ujjr 1ujjs 1ujjt 1ujju 1ujjú uj2jü 1ujjv u2j1op uk1abl uka2c3se u2k1a2lap uka1pl uka2rán u2k1arc uka2szás uka1t2r uk1áll uká2sar u2k1ásó ukás3s u2k1átm uk1bl uke2l uk1e2m uk1ex u2k1ég u2k1érz u2k1i2p uk2k1alt uk2k1eg uk2k1em uk2k1ola uk2köl uklás1s ukló2s3zá u2k1old ukora2 uko2ras uko2r1á2 uko2ril uko2rin uko2r1o ukós2 uk1öb uk1pr u1k2rón uk1ü2t uk1űr ula2cs1ö2 ula1g2 ula2jas ul1aleg u2l1alj ula1s2p ulata2l ula2t1ala ula2t1a2n ula2tál ula2tem ula2tik ula2tol u2l1ábr ulá2k1e ulá2k1ü u2l1á2ria ulá2s1i2k uláskész1 ulás3s ulá2sza ulá2sze ul1bl ulcs1e2l ulcs1es ul2cs1ér. ul2csérv ul2cs1é2vé ul2csiga ul2csip ul2cs1í2 ul2csor ul2cs1ö2 ul2cs1ő ul2csut ul2csü ulcs3z ule2i uleí2 ule2l ul1elő ulet2ta u2l1ex ulé2kal ulé2k1e2 ulé2k1ol ulé2kut ul1épü u2l1érté uli2nar uli2nin ul1í2r ul1k2r ul2lef ul2l1e2l ul2l1em ul2l1en ul2l1ér ulot2 uló1f2 ulói2kon ulókész1 ulóó2 ulót2 uló2zan uló2z1á2ra uló2z3s ul1öt ul1pr ul1st ul2t1aj ulta2r ult1asz ul2taz ul2tül ul1úr ul1üt ul1űr u2lyi u2m1abl um1abr um1a2cé um1ach um1a2dat u2m1adm um1a2do um1a2dó 2umaé um1ajá u2m1a2ka umakész1 u2m1akk u2m1akt u2m1a2la um1alg um1all um1alt u2m1ana u2m1ank u2m1a2no u2m1a2ny 2umao 2uma1p2 u2m1a2rá um1arc um1arg u2m1a2ri um1a2ro um1asp u2m1atl u2m1au um1a2zo u2m1ág u2m1áll um1álm u2m1á2rak um1á2ram u2m1áras u2m1á2rá u2m1árf u2m1árk u2m1árn u2m1á2ro u2m1árr u2m1árt u2m1á2ru u2m1árv umát1a u2m1á2t1e u2m1átm u2m1átu um1bl um1b2r um1dr u2m1e2d u2m1ef ume2g um1egy um1ela um1elb u2m1e2le um1elé um1elh um1elí um1elj um1elm u2m1eln um1elo um1e2lő u2m1elt um1elv u2m1e2m ume2n1á ume2n1ó2 um1e2re um1erk um1e2rő um1e2se um1ess um1e2sz u2m1e2t u2m1e2v u2m1ex um1ezr u2m1ég u2méhs um1é2le um1élv u2m1ép u2m1ér. u2m1érc u2m1érm u2m1érte u2m1érté u2m1érv u2m1é2te um1fl um1f2r um1gl um1gr umia2 um1i2dő umig2 umi1gr um1imp umi2na. u2m1ind u2m1ing u2m1inv um1i2onb um1i2oné um1i2onh u2m1i2onj um1i2onk u2m1i2onn u2m1i2ono um1i2onr um1i2ont u2m1irt um1isk umi1sl um1ism umi1sp umi2szü umit2 umi1tr um1izé um1ív um1íz umkész1e um1kl um1kr um1kv umna2 u2m1o2koz um1ola um1old um1oll um1olt um1olv u2m1o2p umo2ran um1o2rat umo2rál umo2rin um1osto u2m1osz u2m1ox um1ó2rá um1ö2l um1öm um1ön um1ö2r um1ös um1öt um1öv um1ö2z um1ő2r um1ős umpe2l ump1ele um2p1ing um1p2r um1sk um1sp um1st um1sz um1t2r u2m1ud u2m1ug u2muni umu2r um1ura u2m1u2t um1üg um1ü2l um1ür um1üs um1üt um1üv um1üz umva2s una1b un1adu un1akt u2n1arc u2n1á2g un2cs1e un2csiv un2dz un1e2r un1e2t un1ég un2g1a2g un2g1eg un2g1er ung3g un2g1ol u2n1i2d 1u2nif 1u2niku u2n1il u2n1ingo 1u2nió 1u2niv unka1p2 unka1s un2k1eg u2nod u2n1orr un1ors u2not un1pr un1s2t2 unta2i u2nun un1útj un1ü2l u1o uo2la uo2li uo2r1a2 uore2 uo2r1et uo2r1i2o uo2xi u1ó u2óbu u2óne uó1p2r u2óré uó2ri u2óso u2ósz u2óve u1ö uö2ko uö2kö uö2rö uö2zö u1ő uő2re uő2ré uő2ri uő2rö uő2rü upa1b2 up1ada upa1pr upas2 upa1sp upa1t2r upda2 upe2r1a upe2rel upe2r1in uper1s up1e2s upé1p2 up2hi upli2n up1üz 1u2raim 1u2rak. 1u2rakh 1u2rakk 1u2rakn 1u2rakr u2ralh 1uralk 1u2ralm 1u2ram. ura2m1is 1u2rasa ura1s2p ur1áll urát1a ur2dar ur2d1e u2r1ef ur2fí ur2f1ú 1urná ur2ne urn2é uro1b2 uroka2 uro2kan uro2k1á uro2ke uro2ne uro1p uro1t2 ur1öl urpi2 ur2t1ag ur2t1e2t ur2t1e2v urti2t urt1ita ur2t1okta uru2c1e 2urul uru1p2 uru2szál u2rú. us1abla us1a2da us1a2dá u2s1a2dó u2s1a2g u2s1a2j usa2kar u2s1akc u2s1a2la us1alg us1alj us1alk u2s1alt us1alv u2s1ana us1ane us1ant us1apá u2s1a2ra u2s1a2rá u2s1arc us1arz u2s1ass u2s1att us1a2ty u2s1au u2s1a2z u2s1ábr u2s1á2gá us1ágb u2s1ágg us1ágh u2s1ágr us1áld us1áll u2s1á2p u2s1árad u2s1á2rai u2s1á2rak u2s1á2rá u2s1árb u2s1árh u2s1á2ri u2s1árk u2s1árn u2s1á2ro u2s1árr u2s1árt u2s1á2ru us1áta us1áth us1áti us1átk us1átt us1átu us1átv us1bl us1br us1dr us1e2c us1e2d u2s1ef us1e2gy u2s1e2l u2s1e2m u2s1e2n us1erd u2s1e2s use1t u2s1e2v u2s1ex us1ez u2s1ég u2s1éhe u2s1é2k u2s1é2l u2s1é2ne u2s1ép u2s1érd u2s1érte u2s1érv u2s1és u2s1é2te us1étk us1étt u2s1éve us1fr us1gr u2s1i2d usi2g us1iga u2s1i2ko u2s1ill u2s1i2ma u2s1i2má us1imi u2simm us1imp u2s1inc us1ind us1inf u2s1ing u2s1ink u2s1int us1inv u2s1i2p u2s1i2rat u2s1i2rá us1iro us1irt u2s1isk u2s1ism us1ita us1izé us1íg u2s1íj usí2r us1írá us1író u2s1í2v u1s2kál us1kl uskói2k us1k2r us1kv u2sodú u2s1of us1okl us1okm us1okta us1ola u2s1old us1oli u2s1oml us1ond u2s1op u2s1org u2sori u2s1orr u2s1ors us1osz u2s1ott us1óc us1ó2s u2s1ö2l u2s1ön us1örd us1ö2rö u2s1ös u2s1öt us1ö2v u2s1ö2z us1ő2r u1s2pec us1pl us1pn us1pr us1ps 2uss. us2se. us1ská us1spe us1spi us1sta us1sy us3szab us3szag us3szak us3szál us3szám us3szen us3szé us3szig us3szí us3szó us3szö us3sző usszü2 ussz1ül us3szű ust1á2rár us2teg us2t1il us1trad us1tre us1tré us1tro u1stru us2t1ül u2s1uj usu2s us1usz u2s1u2t u2s1új us1úté us1üd u2s1üg usü2l us1ülé u2s1ün u2s1ür us1üz usz1abl u2szaj usz1a2la usz1alk usz1alv u2sz1a2n usz1app usza2r usz1ará usz1aré usz1aro usz1asz u2sz1au u2sz1á2g usz1állá usz1á2p u2sz1á2rad u2s3zárako u2sz1á2ram usz1árje usz1ásv u2száth usz1átö u2sz1e2c u2szef usz1e2ge usz1e2gy usze2k usz1eke u2sz1e2l usz1emb usz1eml us3zene usz1eng u2sz1erd usz1e2ré usze2s u2sz1e2v u2sz1ex u2széne usz1éte usz1éto usz1imp usz1ind usz1inj usz1isk usz1ism u2sz1isz uszí2j1a2d u2sz1ír 1u2szodá u2szola u2sz1old u2szony u2szop u2szosz u2sz1ö2b usz1öl usz1ön u2sz1ös usz1p2 uszte2r1a usz1t2ran u2sz1u2s u2szut usz1útr uszü2 usz1üg u2sz1ül u2sz1üz usz1z ut1abl uta2csel ut1a2dó 2utakép 1u2taló 1u2talv utame2 uta2mel uta2mer uta1p ut1ará 1utasc uta2se 1utasf 1u2tasl 1utasv utaü2 2utav 1utazi 2utáb 2utáé 2utáib 2utáin 2utáju 2utákb 2utákt 2utám 2utáná után1n 1utánz 2utáró utá2rú ut1bl 1utca 1utcá u2t1e2g ute2r1a ute2rá ute2reg ute2rim ute2ru utén3n ut1fr uti2k1á2r uti2ke ut1ill uti2m uti2n1e2 uti2nér utini2 uti2nig uti2n1ik uti2n1ó utin1s u2t1i2pa u2t1isk ut1kl ut1okke u2t1old uto2l1é u2tols 2utomata uto2rim 2utos 2utot utó2dal u2tódá utó2del utó1p2 utó2s1aj utós3s utó1s2to utó1sz utó1tr utótűz1 ut1pr ut2rak ut2ran ut2rák ut1sp ut1st ut1t2r ut1üg ut1ü2z utya1s2 u1u uu2m1ag uu2mal uu2m1as uu2mál uu2m1e2 uu2m1é2r uu2mim uu2min uu2mö uum1p2 uu2mü uu2ta uu2tá uu2zs u1ú u1ü uü2gy uü2rí uü2té uü2ve uü2ze u1ű uva2r1a uva2r1á2 uva2r1e uva2rin uva2szál uvata2 uva2t1ag uvi1g2 uv2re uxi2t1a uxi2t1á uxi2t1e uzala2 uza2lac uza2lad uza2lan uza2lág uza2l1át uza2lel uza2l1ék uza1p2 uza1s2 2uzál. 2uzálb 2uzáll 2uzálr u2z1id uz1i2gye uz1ír uzki2 uzói2 uz3sap uz3sz uz1t2r uz1ü2g uzü2l 2ú. ú1a úa2da úa2dá úa2dó úa2gy úa2já úa2kar úa2kas úa2la úa2lá úa2ny úa2sz úa2ud úa2va ú1á úá2ga úá2gá úá2gi úá2go úá2gy úá2hí úá2lo úá2po úá2ra úá2ri úá2ru 2úbab 2úband 2úbar úb2lo 2úbód úb2ri úb2ro ú2c1aj ú2c1a2l ú2c1a2n ú2c1a2v úc1e2t úc3he úc3ho ú2c1i2d úci2ókép úc1pr 2úcsa ú2csab ú2csad ú2cs1ag ú2cs1aj ú2csakt úcs1ala ú2cs1a2n úcsa2p1á2 ú2cs1a2s ú2cs1au ú2csaz úcs1á2g ú2cs1ál ú2cs1árá ú2cs1árf ú2cs1ári ú2cs1árv ú2csátv 2úcse ú2cs1eb ú2cs1e2g úc3sej ú2cs1e2l úcs1emb ú2cs1en úcs1erő ú2cs1e2s ú2cs1él ú2cs1ér. ú2csérd ú2cs1érte ú2cs1érté ú2cs1é2v ú2cs1id ú2csigaz ú2cs1il ú2csim ú2cs1inf ú2cs1int úcs1i2pa ú2csirá ú2cs1is ú2cs1iz 2úcso ú2csokta ú2csosz 2úcsó ú2cs1ó2r úcs1öl úcs1ös úcs1p úcs1s úcs1t úcsús1s úcs1ü2t úcs3za ú2d1a2c úda2d úd1ada ú2d1a2k ú2d1a2n úd1ág úd1ál úd1á2r ú2d1e2g ú2d1ej úde2l úd1ele úd1elh úd1elő ú2d1e2m úde2ra úde2r1ec úd1erő úd1e2v ú2d1ék ú2d1ér. ú2d1érc údé2t úd1éte ú2d1i2d údi2g ú2d1igé úd1ing údi2ódar údi2óz ú2d1os úd1pr úd2rá úd2ro úd1üv údy1éh údy1ét údy1i údy2s úd3zá ú1e úe2bé úe2gé úegész1 úe2gy úe2la úe2le úe2lo úe2lö úe2lő úe2me úe2pi úe2re úe2ré úe2rő úe2rű úe2sz úe2ta úe2te úe2ve úe2vő ú1é úé2he úé2le úé2lő 2úé2ne úé2pí 2úér. úé2r1á úé2re úé2ri 2úérz úé2te úé2ve úfélé2 úfé2l1év úf2lö úf2rá úf2ri úf2rí úf2ro úg1a2d úgás1s úg1el úg1i2v úg1old úgós2 úg2rá úgy1ag úgy1el úgy1ér. úgyi2 úgy1is úgy1iv ú2gy1u2 úgy1út ú1i 2úi2de úi2dő úi2ga úi2gé 2úi2ke 2úikre 2úill 2úi2má úi2mi 2úing 2úint úi2pa úi2rat úi2rá 2úisk 2úism 2úist úi2ta 2úi2vad úi2vás ú1í úí2rá úí2ve úí2vi úí2vü 2újáté új1es új1ez új1éve új1évé új1k2r 1ú2jon új1or új1pl újra1 1újsá új1ud ú2jul 2úkab ú2k1a2g ú2k1a2j úk1a2lak 2úkalan ú2k1alk ú2k1any 2úkap ú2k1a2pó 2úkar 2úkate ú2k1atk ú2k1ál ú2káru úke2l úk1ele úk1ell ú2k1em úke2s úke2t úk1ete úk1e2vé 2úkérd 2úkéré 2úkés ú2k1éss ú2k1észr ú2k1é2te 2úkéz úkia2 ú2k1i2d 2úkin ú2k1is ú2k1i2t ú1k2li úk2lu 2úkol ú2k1olt 2úkom 2úkonf 2úkong 2úkorá 2úkoro 2úkos úk1ó2l úkö2l úk1ölő úk1pr ú1k2re úk1t2r ú2k1ud ú2k1úr úkü2l úk1ülő úk1ült ú2k1ür ú2k1ü2t ú2k1üz úl1a2d úl1a2ja úl1a2l úl1a2m úla2n ú2l1any úl1a2ro ú2l1á2g ú2l1ál úl1árn ú2l1á2sz úl1átv úl1br úl1d2r úl1e2d úle2l úl1ele úl1ell ú2l1emb úl1en ú2l1e2re úl1e2s ú2l1e2vő úl1ex ú3lé. úl1é2d úlé2g ú3l2é3va úl1fr úl1gl ú2l1i2d ú2l1igé ú2l1ij ú2l1il ú2limá ú2l1ind ú2l1inf ú2l1ing ú2l1inj ú2l1int ú2l1inv ú2l1i2p ú2l1irá ú2l1isk ú2l1i2sz ú2l1i2ta ú2l1itt ú2livás ú2livo ú2lizgato ú2l1izz úl1íg úl1í2v úl1k2l úl1kv úlo2k úl1oko ú2l1ol úl1ope ú2l1or ú2l1os ú2l1ox úl1öb úl1öl úl1ö2m úl1ö2n úl1ör ú2l1ös úlövés1s úl1őrü úl1p2l úl1p2r úl1p2s úl1sk úl1sm úl1sp úl1s2t úlsz2 úlsztá2 últ1agg últ1agy úl2t1aj úl2t1al úl2t1árn úl2tél úl2térte úl2t1és últ1éves últi2 úl2tid úl2t1im úl2t1in úl2t1ip úl2tis úl2tí últ1old úl2tös úl2t1ő2r úl1trá ú2l1ud ú2l1u2g ú2l1ur ú2l1u2t ú2l1úr úl1ús úl1üg úl1ül úl1ün úl1ür úl1üt úl1üv úl1üz úl1űz ú2ly1a2d ú2ly1a2l ú2ly1an ú2ly1a2r ú2ly1au ú2lyál ú2ly1átl ú2ly1e2 ú2lyél ú2lyés ú2lyol ú2ly1ö ú2lyő úly1s ú2lyug 2úmac 2úmad 2úmag 2úmaj 2úmar 2úmatr úmi2al 2úmoz 2únac 2únap únau2 ú2ny1a2n ú2ny1i2r úny1tr ú1o úo2ko úo2ve ú1ó úó2ra úó2rá úó2sá úó2vo ú1ö úö2le úö2lé úö2lő úö2rö úö2ve ú1ő úő2rö úp1eg úpe2l úp1es ú2p1in úp2la úp2lé ú2p1or úp1p2l úp2rí úp2ro úraát1 2úrab 2úraj úr1akk úr1alu ú2r1ant úr1a2nya úra1p2 úra1szp ú2rattas úrau2r ú2r1ábr úr1áll ú2r1á2ri úrás1s ú2r1átm úr1br úr1d2r úr1e2c úr1e2l úr1ez ú2rék úr1ékk ú2r1é2l úr1é2ne 2úrés úrfé2l1é2v úri2al ú2r1i2d ú2rie úr1ifj úri2g ú2r1iga úri3gényé úr1i2m ú2r1inf úr1ing ú2r1int ú2ris úr1ist úr1k2r 1úrnőr úr1ott úró1p2 úró1sp úr1ö2c úr1ö2l úr1ön úr1öt úr1ős úr1pr úr1s2k úr1sn úr1s2r úr1s2t úr1szn úr1u2t úr1ü2l úr1ü2v 2úsabl ús1abr ú2s1a2d ú2s1a2j ús1a2la úsa2n ús1any ús1apr úsa2r ús1ará ú2s1arc 2úsarj úsá2gol ús1áld ú2s1á2p ú2s1á2rai ú2s1á2rak ú2s1árb ú2s1áre ú2s1á2ro ú2s1á2ru ú2s1á2rú ú2s1árv 2úsát ús1átl ú2s1á2z ús1dr ús1e2c ús1e2l ús1e2v ús1ex ú2s1é2g ú2s1é2l ús1é2ne ú2s1é2ré ús1érm ú2s1érté ú2s1é2tá ú2s1é2te ús1étr ús1fr úsi2g ús1iga ú2s1il ús1imp ú2s1in ú2s1i2p ú2s1i2r ú2s1is ús1í2z ús1kl ús1kv ú2s1ola ú2s1old ús1org ú2s1orr ús1osz ús1ó2h ús1ös ús1őr ús2pe ús1pr ús1s2p ús3szag ússza2k1 ús3szav ús3sze ús3szi ús3szí ús3szó ús3szö ús3szú ús3szü ús2tat ús1t2r ú2s1u2ga ú2s1u2t ús1üg ús1ün ús1ü2t ús1üz úsvé2t1e ú2sz1a2d ú2sz1akc ú2sz1á2g úszás1s 2úsze úsz1ej úsz1e2s úsz1e2v 2úszé ú2sz1év ú2szigá 2úszí úsz1k2 úsz1old úsz1osz ú2szóe 2úszö úsz1ös úsz1p ús3zse ú2s3zú 2úszü úsz1ü2g úsz2ve út1a2d út1a2i ú2t1a2j út1a2v ú2t1ál út1á2ro út1á2s ú2t1á2t1 útá2v1i2 út1bl út1ef ú2t1e2g út1elá út1ell út1elz ú2téh út1é2l ú2tén ú2t1ép út1érd ú2t1é2ri út1érz útfélé2 út1gr ú2tiakh ú2tiakn út1id útie2 ú2tié úti2g út1igé 1ú2tij 1ú2t1i2ko út1ill 1ú2tiná út1ind út1inf út1ing út1int út1i2pa 1ú2tir út1irá út1ism út1ist 1ú2t1i2z út1íg út1íj út1ív út1okm ú2t1ola út1old út1oml úto2n1 út1ont út1op 2útor úto2ran úto2r1as úto2rál úto2re út1ost út1osz út1ös útő2r út1pl út1pr ú1t2rag 2ú1t2ri útsá2gi út1st útu2m1é útu2r út1urá ú2t1út ú2t1üg 1útvo ú1u úu2no úu2ra ú1ú ú1ü úü2gy úü2lé úü2re úü2te úü2ve úü2vö úü2ze ú1ű úű2ző 2úvál úv2ár úvá2rad úvá2ral úvá2ris úvá2rosz úvá2r1ó2 úváru2 úzae2 úzaé2 úzak2 úza1p2 úz1arc úza1t2r ú2z1ál ú2záru úzás1s úz1i2d úzido2 úzót2 úzó1tr úz1p2r ú2zs1a2l ú2zsál 2úzse úzs1e2c 2úzsi úz3sz úz1t2r 2ü. ü1a üa2já üa2la ü1á üá2ga üá2go üá2gu üá2ra üá2sz üb2lo ücsö2k1 ü2des 1ü2dít üd1íz ü2d1ör üdös3s üdőé2 1ü2dül üd2v1a2 üd2v1el üd2v1e2s üd2vél üd2vid üd2v1í üd2vo 1üdvö üd2völ üd2vő üd2vu üd2vú ü1e üe2bé üe2ge üe2gé üe2le üe2l1é2 üe2me ü1é üé2ke üé2pí üf2f1ö2 üfö3le üf2ro üge1k2 üge3l üg2ra ü2gy1a2 ü2gy1á ü2gyef ügy1e2lemb ügy1e2lemm ügy1elf ü2gy1ell ügy1elm ügy1elo ügy1éjé ügy1ékb ügy1éré ügy1érr ü2gyés ü2gyil 1ü2gyin ügy1int ügy1ira ü3gyí 1ügynö ügy1os ü2gy1ő2 üh1af üh1at üh1ás ü2h1e2le üh1elf üh1ellen ü2h1e2lő üh1elv ü2h1éh ü2h1ér. ü2h1in ü2h1it üh1or üh1ős ü1i üi2gé üi2ko ü1í üí2rá ük1a2n üka2p ük2kal ük2ká ükke2 ükkel1 ük2ker ükko2 ük2kop ük1u2n ül1ab ül1a2d ül1ag ül1aj ül1a2k ü2l1a2l ül1a2r ül1at ül1au ül1á2c ül1á2g ül1ál ül1á2p ül1á2r ül1á2s ül1br ül1d2r ü2l1ecse ül1e2dz ü2l1e2g 2ülek ül1ell ü2l1e2lőte ül1eng ül1enn ü2l1e2r ül1e2ső ületa2 üle2tal üle2t1an üle2t1as üle2tav üle2t1á2 üle2t1eg üle2t1e2l üle2t1ék üle2t1ér. üle2t1érn üle2t1é2rő. üle2térü üle2t1é2ve. ületo2 üle2t1or üle2tos üle2t1ó2 üle2t1ö2 ület1t2 ül1ette. ül1etted üle2t1u üle2tüz ü2l1ex ü2l1é2g ülé2k1a2 ülé2k1á2 ülé2k1e2l ülé2kev ülé2kir ülé2k1o ülé2ku ü2l1él ül1é2pü ü2l1ér. ü2l1é2ré ül1éri ül1érj ül1érn ül1érs ü2l1é2rü ül1érv ü2l1érz ülé2sa ülé2so ülés3s ülé2s3zá ül1fr ü2l1i2d üli2g ü2l1iga ül1ill ü2l1im ü2l1int ül1ira ü2l1itt ü2l1iz ül1íg ül1í2r ül1í2v ül2l1a2n ül2l1in ül2l1ö2vü ül2l1u2 ül3lyu ülnö2k1öl ül1o2d ül1o2l ül1om ül1op ül1or ül1ó2v ü2l1öb ü2l1ö2l ü2l1ömö ü2l1ör ü2l1ö2v ülőe2 ülőé2l ülő1sl ülő1s2p ülő1sta ülőt2 ül1p2l ül1p2r ül1sl ül1sp ül1st ül2t1ad ültá2r 1ültetl 1ültets ül2t1e2v ül1tra ül1ud ül1u2g ül1u2t ül1ús ü2l1üg ülü2l ül1ülé ül1ülh ül1üli ül1ülj ül1üln ül1ült ül1ülv ü2l1ür ü2l1üt ü2l1üv ü2lyel üly1ess üly1esz üm1a2l üm1a2n üm1a2r üm1á2r üme3gi üm1éks ü2m1ép ü2m1érd üm1fl üm1fr ümi2g ü2m1iga ü2m1il ü2m1im ü2m1i2p ü2m1is ü2m1iz üm1kl üm1kr üm1o2l üm1or üm1os ü2m1öss üm1őr üm1p2r üm1tr üm1új ü2m1ü2l ü2m1üv ü2m1üz ün1ál ün1á2r ün1e2l üne2t1elet üne2tés ün1evé ü2n1é2p ün1id ü2n1ing ü2n1irt 1ünnep ü1o üo2k1i2 ü1ó üó2rá ü1ö ü1ő üő2re üp2ri üp2ro ürdés1s 1ü2reg üre2g1a üre2gá üreg1g 1ü2res üre2tö ü2röm ür2t1a ür2t1á ür2t1e2 ür2tis ür2t1o2 ürtok1 ürtü2 ür2tül 1ü2rül üs2s1a2 üs2s1á üs2s1eg üs2s1o2 üss1s üssü2 üs2s1ül üs2t1a2 üs2tá2 üst1ág üst1ál üst1ár üs2t1e2 üst1ég üs2t1ék üs2tél üs2t1ér. üs2t1ére üs2t1érm üs2t1il üs2tim üs2tir üs2t1is üs2tí üs2t1o2 üs2t1ó2 üs2t1ör üs2t1ö2v üs2t1őr üs2t1ős üs2t1u2 üs2tú üstű2 üs2t1űz üsz1ál üszi2 ü2sz1iv üsz1í2v ü2sz1önt ü2szür üt1ab üt1aj 1ü2teg 1ü2tem. üte2m1a2 ü2temb 1ü2teme üte2m1el ü2teméb üte2mért üte2min ütési2 üté2sik ütés3s üté2s3z 1ütkö ütő1s2p üt2t1á üt2t1é2 ütty1e2g üt2zi ü1u üu2ta ü1ú ü1ü ü1ű üve2g1a2 üveg3g üvezé2r 1üze2m1a2 üze2m1á üze2meg üze2m1érté üze2m1étk 1ü2zemi üze2m1o ü2zemt üze2m1u2 ü2zemű üze2t1a üze2t1o üzé2ra üzé2r1e2l 1üzlet. 1üzletn 2ű. ű1a űa2da űa2dó űa2gy űa2ka űa2la űala2g1 űa2lo űa2na űa2ny űa3nyagoc űa2or űa2pa űa2pá űa2ra űa2rá űa2to űa2ut űa2va űa2xi űa2zo ű1á űá2bé űá2ga űá2gá űá2gy űá2hí űá2je űá2lo űá2po űá2ra űá2ri űá2ro űá2ru űá2sí űá2té űá2tí űba2l1 űbé2rel űb2lo űb2ró űcsapá2 űcsa2p1ág űcs1as ű2cs1ék űcs1i2pa űd1ál ű2d1e2l ű1d2rá űd2ro ű1d2ró űd1sk ű1e űe2cs űe2ge űe2gé űe2gy űe2kére űe2la űe2le űe2lé űe2l1í2 űe2lő űe2lü űe2me űe2pi űe2po űe2re űe2rő űe2se űe2sé űe2ső űe2te űe2ti űe2vé űe2vő ű1é űé2le űé2lé űé2nekb űé2neke űéne2kest űé2neké űé2nekr űé2pí űé2te űfa2j1e2 űf2lo űfo2g1a2l űf2ra űf2ri űf2ro ű2g1ö2lé ű2g1ö2lő. űg1ős űgő2z űg2ra űg2rá űholda2d űhol2d1ada ű1i űi2do űi2ga űi2gé űi2má űi2mi űi2pa űi2rá űi2ro űi2sz űi2ta űi2zé űi2zo ű1í űí2rá űí2ri űí2ró űí2té űí2ve űí2zü űí2zű űkia2 űk2la űk2li űk2lí űk2lo űk2rep ű1k2ré ű1k2ri ű1k2ro ű1k2ró űk2va űme2g1 űn1al űn1ar űn1ál űn1á2r űn1e2le űn1elh űn1e2li űn1elk űn1e2lő űn1elr űn1elt űn1eml űn1e2se űn1est űne1t2 ű2n1ér. ű2n1érte űni2g ű2n1iga ű2n1in ű2n1i2p ű2n1i2r ű2n1is űnme2 űn3ny űn1o2k űn1ol űn1os űn1ó2r űn1pr űn1s2k űn1s2t űn1u2n űn1u2t ű2n1üs ű2n1üz űn1űz ű1o űo2dú űo2ká űo2ko űo2la űo2rá űo2ro ű1ó űó2ce űó2ra űó2rá űó2ri ű1ö űö2lő űö2rö űö2ve űö2zö ű1ő űő2rö űp2la űp2lü űp2ne űp2ré űp2ri űp2rí űp2ro űp2ró űr1ad űr1a2l űr1a2m űr1a2n űr1au űr1a2v űr1áb űr1ál űr1ás űr1áz űr1egy űr1e2l űre2n ű2r1e2r űr1ex ű2r1é2j űr1é2l űr1ép űrés3szer űré2sza űré2szá űré2szí űré2szo űr1fl űr1id űri2g űr1iga ű2r1i2m űr1int űr1i2p űr1ist ű2r1ír űr1o2d ű2r1ol űr1o2p űr1or űros2t1a2 űr1ot űr1ón ű2r1ö2l űr1ör űrő1f2 űr1pl űr1pr űr1p2s űr1s2p űr1s2t űrszt2 űr1tra űr1uj űr1un űr1u2t űr1út űr1üg űr1üz ű2s1ajtó űs1ál űsé2g1el ű2s1ín. ű2s1í2r ű1s2ka ű1s2ká űso2rad űso2raj űso2ral űso2ran űso2rál űso2rosz űsor1s űsort2 űs2pe űs2pi űs2po űsp2r űs2rá űs3sz ű1s2ta ű1s2tí ű1s2to űst2r űs1tro ű2s1uj ű2s1ü2t űsze2r1á űsze2r1e2le űszere2p űsze2r1epé űsze2r1ült űsz2k űsz2t űtés3s űtőa2 űtőe2 ű1t2ra ű1t2rágá ű1t2re űt2ri ű1t2ro ű1u űu2ga űu2ra űu2sz űu2ta űu2tá űu2tu ű1ú űú2ri űú2sz űú2ti űú2to ű1ü űü2gy űü2lé űü2rí űü2te űü2té űü2tö űü2ve űü2vö űü2ze ű1ű űű2ző űvé2sz1a űvé2sz1á űvé2sz1e2l űvé2szer űvé2szint űvé2szo űvé2sz1ó2 űvé2szö űvé2szú űví2z1 űvíze2 ű2z1a2b űz1a2d űz1a2g űz1ak űz1a2l űzal1e űz1a2p űz1a2r űz1a2s űz1a2t űz1a2u űz1á2g ű2z1ál ű2z1árb ű2z1árj űz1átl űz1átu ű2z1ed ű2z1ef ű2z1e2l ű2z1em ű2z1e2r űze2s ű2z1ese ű2z1esé ű2z1est ű2z1esz űze2teg űze2tel ű2z1e2v ű2z1ég ű2z1é2l ű2z1érm ű2z1érté ű2z1érz ű2z1ész űz1fr űz1gl űz1g2r űzi2g ű2z1iga űzigaz1 ű2z1igé ű2z1i2m ű2z1i2r űz1isk űz1ism űz1ist űz1i2sz ű2z1iz űz1ín űz1ír űz1í2v űz1kl űz1kr űz1o2k űz1o2l ű3zom űz1on űz1op űz1or űz1os ű2z1óc ű2z1ó2r ű2z1ö2kö űzöl2d1el ű2z1ö2v ű2z1öz űzőa2 űzőe2 ű2z1őr. űz1ő2rei ű2z1ő2ri űz1őrk űz1őrm ű2z1őrn ű2z1ő2rö ű2z1őrr ű2z1őrs ű2z1őrt űz1őrz űz1p2r űz3sa ű2zsám ű2z3sár ű2z3sáv ű2z3ser ű2z3sé ű2z3só ű2z3sö űz3s2p ű2z3suga űz3sü ű2z3sű űz3sz űz1t2r ű2z1ug űz1úr űz1út ű2z1ü2g ű2z1ül űz1ünn ű2z1üt űz3zs 2v. 1va vaa2d vaát1 vaáta2 2v1abl va1bra v1abs vacs1ala va2cs1an va2csap va2csál va2cs1ü2 vacs3z 2v1a2dag va2d1aj va2dalé 2v1adap va2d1asz v1a2data v1a2datb v1a2datk v1a2dato v1a2datr va2daz va2d1ál va2deg va2d1e2l va2den va2dep va2d1e2r va2d1e2t va2dél vad1éte va2dib va2d1id va2d1ir va2d1i2t va2d1ír va2d1ol 2vadom va2dóh va2dói v1a2dój va2dór v1a2dóu va2d1ör va2d1ő2 va2d1ú va2dű va2dza va2dzá va2dze vaé2r va2g1as va2gav va2gás va2g1e2 va2g1é2n vag1g va2gid va1gle va2g1o2ku va2goli vag1ost va2g1osz va2g1ura va2gú 2v1a2gyú va2j1ar va2j1ác va2j1á2ro va2j1e2g va2jí va2j1ol va2j1ó2s va2jö va2jü 2va2kad vak1a2dá va2k1aj vak1akn vak1apá vak1árn va2k1ás va2k1át va2keg va2kem va2k1érté va2kis va2k1ír va2k1ó2s va1krí vak1t2 2vakti 2v1aktu 2vakup va2k1út va2lac va2laku va2lap. va2lapí va2lapú vallás1s 2v1amp 2v1a2nal va2n1e2g vane2m van1eme va2n1es vané2v van1éve van1évi 2vang van3n va2nol va2nó 2v1a2nyá 2v1a2nyó va1p2l va2pos va1p2r 2v1a2pu va2r1ab vara2c var1acé va2r1a2d var1ajt var1akt va2r1al va2rany var1a2nya va2r1a2p va2r1a2r va2r1assz va2r1at va2r1av va2rág va2r1ál 2v1a2rány va2r1ászn var1áta va2r1átf va2r1átm va2r1á2to va2r1á2zá varca2 var2cag var2cal var2can varc1c var2c3ho va2r1es va2r1e2t va2rev va2rég var1ék. var1éks va2r1é2l va2rép va2r1éré va2rid va2r1i2ko va2r1ikr va2r1ill va2rim var1inf var1ink va2r1inv va2r1i2p var1isk var1ism va2rí var2k1an var1k2b var1k2j var1k2ká var1kl va2r1okm var1old va2rop va2ror va2rön va2rő vars2 varsz2 2vartett. var2t1i2n var2tor vartó2 var2t1ór va2r1ut va2r1út va2r1ü2 va2rű vas1abl va2sag va2s1aj vas1arc vas1asz va2s1ábr va2s1ál va2s1árl va2sek va2s1e2l va2sem va2s1e2r va2set va2s1ék. vas1ékk va2s1ékn vas1ékt vasé2r va2s1ére va2s1érté va2s1érv vasfélé2v va2sid va2s1i2na. va2s1ing va2s1i2s va2s1iz va2s1ön va2ső vas3sze vas3szi vas3sző vast2 vas1tró va2sus va2s1ü2t va2sű vasz1e2l va2szis va2t1a2d va2t1aj va2tau va2t1ál va2t1á2ru va2t1e2v va2t1ék va2tél va2t1érte va2t1é2te va2t1id va2tim vat1inf vat1ing va2t1is va2t1ír vatmo1 vatmosz2 va2t1okm va2t1old va2t1ö2v vatő2 va2t1őr vatt2 2vattako va2t1ur 2v1a2uk vau2n vaza2t1e 2v1a2zon 1vá váb2baj váb2b1as váb2b1e2 váb2b1é váb2bil váb2bol váb2bos váb2bő váb2bu 2vábr vá2c3h vá2cs1a2p vá2cse vá2cs1ék vá2csip vá2cs1is vá2cső vá2csú vá2csü vács3z vá2d1al vá2d1a2n váde2 vá2des vádé2 vá2dén vá2dik vá2d1ir vá2d1or vá2dö vá2dü 2v1á2gaz 2v1ágr vá2gú vá2gyal vá2gyan vá2gyö vá2győ vá2k1e vá2k1ü vá2laj vá2l1a2l vála2n vá2l1any vá2l1ap vá2lar vála2szin vá2l1á2r vá2l1át vá2l1e2 vá2lél vá2lid vá2lin vá2lir vá2lism 2v1állás vál2l1e2 2v1állom 2v1álló vál2l1ö2 vá2lú vá2lü váma2 vá2m1ad vá2m1aj vá2m1ak vá2m1al vá2m1as vá2mau vá2m1á2 vám1b2 vá2m1e2 vá2m1ér. vá2m1érté vá2mil vá2m1in vá2m1ir vá2mis vá2mí vá2m1or vá2mö vá2mő vámu2 vá2m1ut vá2mü vá2naj vána2n ván1any vá2n1e vá2nis váns3s vá2n1ú vá2nü ványa2d vá2nyaj vá2ny1a2l ványa2n vá2nyany vá2ny1ap vá2nyar vá2ny1as vá2nyau vá2nyaz vá2ny1e2 vá2ny1ér. vá2nyérd vá2nyérr vá2nyérv vá2nyérz vá2ny1ing vá2nyis vány1í2r vá2ny1ó2 vá2nyö vá2po vár1a2dato vá2radá vá2r1a2dó vá2r1a2du vára2l vá2r1ala vár1ale vá2raml vára2n vá2r1any vá2r1ar vá2r1assz vá2r1a2sz vá2rág vá2r1ál várd2 vá2r1e2 vár1isk vár1ism vár1ist vá2rí vár1old vá2r1oml vá2r1ont váro2sz vár1oszt vá2r1ó2né vá2rö vá2rő várs2 vár1sp vár1sr vár2t1es vár2t1ér. 2váru. vá2ruh vár1u2r vár1usz vár1ut várú2 vá2rús vá2rü vá2s1a2d vá2sam vá2saz vásár1a2d vá2s1e vási2k vás1iko vá2sis vá2sír váskész1 vásó2 vást2 vás1tr vá2s1ü vá2sű vá2szan vá2s3zav vá2sz1e vá2szin váta2 vá2t1al 2v1átd 2v1á2t1e2r 2v1átfe vá2t1ir 2v1á2tí v1átlé 2v1átm 2v1á2t1ö 2v1átp 2v1á2tü 2v1átv vá2z1alj vá2z1alt vá2z1a2tom vá2z1a2v vá2z1e2 vázi1s2 vá2ziz vá2zí vá2zos vá2zö vá2ző vá2z3sa vá2z3sá váz3se vá2z3sé váz3sö vá2z3su váz3sz vá2zü vb2lo vb2ra vcsőé2ne vd2rá 1ve vea2g vea2l vea2n vea2r veá2l 2vece ve2cet ve1cl ve2cseg 2vedény ve2gab ve2gac ve2gar ve2g1as vega2z ve2g1á2 ve2g1eg ve2g1e2kéh ve2g1ell vege2lőké ve2g1elr ve2g1e2r ve2g1esem ve2g1esz ve2g1e2tet ve2g1ék ve2g1él ve2g1ép veg1éré veg1érte veg1érv vegés3s vegé2sz vegg2 veg1gr ve2gid ve2gik ve2gim ve2gí ve2gol ve2gor ve2g1ó2 ve2g1ö2 ve2g1u ve2gú ve2gyelem ve2gyemb ve2gyez 2v1egyl 2vegyv ve2k1ak 2v1e2ke. 2v1e2kei 2vekéb ve2kébő 2v1e2kék 2v1e2kés ve1klu 2vela 2v1e2lef 2v1e2lemz vele2t1e2l 2v1e2lég velés3s 2v1elf v1elgy 2v1elha 2v1elhel ve2lis 2v1e2l1í2 v1eljá 2v1elm ve2los 2v1e2lőirá 2v1e2lőí 2velőkés 2v1előleg 2v1elr 2v1elsa 2v1elszá 2v1elszo 2v1eltá 2v1elter 2v1eltér 2v1elto 2v1elv. 2v1elvá 2v1elvek ve2lyö ve2lyu 2v1elz 2v1embó 2v1e2mel 2v1eml 2v1e2mu ve2n1ad ve2nau ve2n1á ve2n1e2g ve2n1e2l ve2n1esz ve2n1é2vi ven1f2 ven1g2 ven3k2 ve2n1o ve2n1ó2 ve2nö ventü2 ven2t1ül ven1ülé ve2nyö 2v1enz veó2r ve2ör ve2pe ve1p2r ve2rab ve2r1a2c ve2r1a2d ve2r1a2g ve2rajá vera2l vera2n ve2r1a2r ve2r1au ve2raz ve2r1ág ve2r1ál 2verdő ver1egy ve2r1e2h ve2r1e2ke. ve2rekl ve2r1e2l ve2r1eng ve2r1er ve2r1e2ső ve2r1esz ve2r1é2l ver1g2 ve2r1iga ve2r1ill ve2rim ve2r1inc ve2rind ve2r1inf ve2r1ing ver1inte ver1ipa ve2ris ve2r1ol ve2ror ve2ró ver1ó2r ve2rö ver1p2 ver2s1al ver2sár versé2g ver2s1égé ver2s1égg ver2s1égn ver2s1égt ver2sir ver2s1í2 ver2só vers3s ver2s1üt vers3zár vers3zen ver1tra ve2rur ve2r1ut ve2rút ve2r1ü2g ve2san ve2sas ve2s1ál ve2s1e2kétő veset2 2v1e2sett ve2sip ve2sis ve2s1íz ve1ská 2v1e2ső ves3sza ves3szer vest2 ve2s1u2 2v1e2sze. 2v1e2szekn 2v1eszm 2v1e2szű veta2l ve2tas ve2tál ve2t1á2r vet1egy ve2t1e2lől ve2tég ve2t1é2k ve2tid 2v1e2tika v1e2tim ve2t1ing ve2t1ol ve2t1öl ve2töv vetőé2 ve2tur ve2t1ut ve2t1ű2z ve2vet 2v1e2vo vezőe2r vezőkész1 vező2sorr vezős1s 2v1ezr 1vé véá2g 2v1ébr vé2dak véda2l vé2d1as vé2dá vé2d1emb vé2dos vé2dóv vé2dö vé2dú vé2dz vé1f2r véga2 vé2gab vé2gak vé2gal vé2g1á2 vé2g1eg vé2g1e2le vé2g1elg vé2g1elh vé2g1eli vé2g1ell vé2g1els vé2g1elv vég2em vége2n vé2g1eny vé2g1ep vé2g1er vé2g1esem vé2g1e2sete vé2geté vé2gető vé2g1ér. vé2g1é2ren vé2g1é2ré vé2g1érr vég1érv vég3g 2véghü vé2g1id végigaz1 vé2gim vé2giz vé2g1í végkötés1 vé2gol vé2g1ó2 vé2gö vé2gú 2v1éh. 2v1é2he. 2v1é2hen 2v1é2hes 2v1éhs vé2kei vé2kít vé1k2l vé1k2ré vé1k2ri 2v1éks vé2kük vé2l1a2 vé2láb vé2lál vé2l1ár vé2leg vél1ell vél1els vél1elt vél1emb vé2l1eme vé2l1e2r vé2les vél1ess vél1est vé2lev vé2lez vé2l1é2k vé2lin vé2lir vé2lí vé2los vé2lői vé2lős véltá2v vé2l1u vé2lú vé2lű véna1p 2vénekl vé2n1emb vé2ny1eg vénye2l vény1ele vény1els vé2nyid vé2nyis vé2ny1í vé2nyú vényü2l vé2ny1ülé vé2ny1ült 2v1é2pí vé1p2l vé1p2r 2v1é2pü vé2ral vé2r1a2n vé2rap vé2rar vé2raz vé2r1ár vé2rát vér1d2 vé2r1e2l vér1eml véres3s vér1eti vé2rés vér1ész vér1éte vér1ikr vé2rir vé2r1o2k vé2rot vé2róv vér1s vértes1s vér2t1ón. vér2töv véru2 vé2rug vé2rut vé2r1ú vérü2kü 2v1érzet. vé2sak vé2sal vé2seg vése2l vés1ele vés1elt vé2s1er vé2só vé1s2pe vés3szer vés2táb vé2s1ü2v vés3zav vész1á2r vé2szeg vész1ell vé2sz1ékn vé2sz1ő2 vész3s vé2szu vészú2 vész1úr vészü2l vész1ülé vét1est 2v1év. vé3va 2v1évb 2vévei 2v1é2vek 2v1é2ven 2v1é2véé 2v1é2vér vé2vi. 2v1évr 2v1évt 2v1é2vü vfe2l1em vf2ra vf2re vf2ri vf2ro vge2o vg2ra vg2rá vhang2a3 vhez1 1vi vi2aa vi2ab vi2ac vi2aé vi2ag via2p via2szal via2sz1ál via2sz1árn via2sz1em viaszé2 via2szél via2szö viára2 viár1ad vic2c1a 2vické vi2csag vi2csal vi2cs1an vi2cs1as vi2csál vi2cs1e2l vi2cs1ér. vi2csérté vicsi2 vi2csim vi2csip vi2cs1ö2 vi2csú vics3z vi2deg vi2d1esz 2vidéz 2v1i2dő vi2dz vi2ew 2v1i2gaz 2v1i2gén vika2 vi2k1ag vi2k1el vi2kon vi2l1ék villa1s villasz2 2villu vi2má 2v1imm vina1t2 2vind vi2n1emb vi2n1ó vin2tess vin2tesz 2vinté vin2tos 2v1i2on 2vipa vi1p2s 2v1i2rat. 2v1i2ratot 2viratoz. 2v1i2rod visa2 vi2sal vi2s1au vi2s1á2g vi2ser vi2s1ék vi2sim vi2s1is vi2siz vi2sö vi2szár vi2szok vit2a vi3tad vitakész1 2vital vitelő2 2vitn vi2t1ú vi2zeg vi2z1ell viz1é2l vi2zin vi2zok vi2zol vi2zom viz1os vi2zsá viz3sz vi2zud vi2zú 1ví vídi2 ví2ge ví2ny vínyenc1 2v1í2ra 2v1í2rá 2v1í2ró 2vítélet. v2í3téletb 2vítélete 2v1ívb vívókész1 ví2z1a2 ví2zá ví2zel víz1e2le víz1elf víz1elh víz1ell víz1eln víz1elő víz1elp víz1els víz1elt víz1elv víze2m víz1emb víz1eme víz1emé ví2zék ví2zés ví2z1ing vízi1sk ví2z1ist ví2z1isz ví2zí ví2z1o ví2z1ó2 ví2zö ví2z1ő2 ví2z3s2 ví2zú vízü2 2v1í2zű víz3z vjára2t1út vje2gya vje2tel vje2tu vkia2l vkiá2 vk2li vk2ló vk2lu vk2ri vk2rí vk2ró vla2te vleí2 vleü2 vme2g1 vna2p1in 1vo vo2il vo2ji vo2kí 2v1okm voks3s 2v1okta vola1t 2v1oldá 2v1oldó. vol2t1a2d vome2 vomec3 vona2l1e2 vona2t1e vonás1s voná2s3z vo2od vo2pe vo2r1a2 vo2r1in 2v1orm vo2s1as vo2s1av vo2s1e vos3s2 vo2s1ú vo2sü vo2uc vo2vá vo2xi 1vó vóa2k vóá2g vóá2r vócsa2p1á2 vó1d2re vó1f2r vó1k2l 2v1ónn vóó2r vó1p2l vó1p2r vó2ran vó2rák vó2rán vó2rát vó2s1akk vó2s1a2l vó2seg vó2s1iv vó2sol vó2s1orr vó2só vó2sö vó2ső vó1spi vós3s vós1tr vó1sz2 vósza2k1 vó2s3zár vó2s3zen vóta1t2 vó1t2r vóváros1u 1vö vö2bö vö2dém 2v1ö2ko völ2gya 2v1ö2rök 2v1ötl vö2ve vö2vé 2v1özön vözőe3 vö2zs 1vő vőa2n vőá2g vőe2l vőe2r vőé2j vőé2n vő1fl vő1f2r vői3dejű vő1kl vőo2l vő1pl vő1pr v1őrm v1ő2rü vő1s2p vő1sta vő1str vő1t2r vőü2l vő2zi vp2la vp2ra vp2re vp2ré vp2ri vp2ro vp2ró vp2sz vs2ká vs2ki vs2ko vs2lá vs2pe vs2ta vs2ti vs2tí vs2to vst2r vs2tú vsz2p v1sz2t vta2n1á2s vta2n1á2to vta2n1ó2 vtá2raj vtá2r1ass vtá2ris vtáró2 vtá2r1ór vtelés1s vt2ra vt2ré vt2ri vt2ro 1vu vu2bo vu2mal vu2man vu2m1e2 vu2mis vu2mö 2v1u2ni vu2ra vu2ru 2v1u2tak 2v1u2tas 2v1u2tat vu2tá v1utc v1u2tó 1vú vú1fr v1újd v1ú2jí v1újs vú2r1ad vú2re vúré2 vú2rén vú2rö vú2szó v1útn 1vü vü2gy vü2kü vü2lá 2v1üld 2v1ünn vü1pr vü2rí vü1st vü1sz2 vü2te vü2té vü2zé 1vű 2v1űrl vű2ző vvágy1ób vverés3s vzá2r1ó2ra 2w. 1wa wa2ii wa2le war2d1i wa2re wa1s2h wa1ye wa1yé 1wá 1we we2b1a2 we2b1á2 we2b1ele we2b1é we2bir we2b1o we2b1ú we2bü we2ed we2ek we2ig we2is we2le we2ör 1wé whi2t 1wi wi2ch wi2cz 1wí 1wo wo2od 1wó 1wö 1wő wri2t wsto2 1wu 1wú 1wü 1wű wyo2m1 2x. 1xa x1a2da xa2dá xaé2d xa1fl xa1k2l 2x1akt 2x1a2la 2x1alg 2x1alj 2x1alk xa2na x1a2ny x1a2rá xa2ri xa2vi 1xá 2x1ábr xá2gy 2x1áll xá2rak 2x1á2ram xá2ras 2x1á2ro 2x1árr 2x1á2ru 2x1átj 2x1átr 2x1átv xba2l1 xb2la xb2lo xb2ra xd2ró 1xe x1e2gy 2x1e2ke. xe2l1a xe2l1á 2x1e2lekt xe2lel xe2l1emb 2x1e2lemr xe2l1esz xe2l1in xe2l1o 2x1emel 2x1eml 2x1e2rő 2x1e2sé 2x1e2zü 1xé 2x1éhs xé2pí 2x1ér. 2x1érte 2x1érté 2x1értő 2x1érz 2xévei xf2re xha2u 1xi xia2n xi2av xi2d1a2l 2xidá xi2dás 2xi2de 2xidé 2xidgá xi2d1i2 2xidjá 2xidjé 2xidl 2xidm xi2dol xi2dö 2xi2dő xid1őz xi1d2ro 2xidró 2xids 2xidu 2xidv 2xi2dz xi2el 2x1i2ga xigén1n 2xilc 2x1ill xina2 xi2n1an 2x1ind xine2 xi2n1et xi2n1i2 xi2nö xi2on xi2óc xi2óe xi2óg xi2ómé xi2óo xi2óö xi2óp xió2rá 2x1i2rá 2x1i2ro xi2sad xi2sal xise2 xi2s1el xi2s1es xi1s2ká xis1p xis3s xi2s1ü xi2t1e2g xi2t1e2r xi2t1é xi2t1i2 xi2t1ü2 1xí xí2ja xí2já xí2jo xí2ju x1í2rá xí2ró 2x1ívn 2x1í2vü 2x1ívv 1xo 2x1old xo2n1ai xo2n1al xo2n1e xo2pe xo1p2l 2x1osz 1xó 1xö xö2dé xö2rö xö2zö 1xő xő2sé xp2la xpor2t1a2 xpor2t1á2r xpor2t1e2 xpor2t1érd xpor2t1ü2 xp2ri x1p2ro x1p2ró xs2ká xs2pe xs2ta xst2r x2t1e2d xti2la xti2lá xti2leg xti2lin xti2lis xti2l1o xt1ört 1xu xu2sad xu2sal xu2s1a2n xu2s1e xu2s1érté xusi2 xu2sil xu2sim xu2sin xu2sit xu2s1ol xu2s1ó2 xu2s1ö2 xus3s xust2 xus1tr xu2sus xusú2 xu2s1út xu2sü xu2s1ű xu2s3z xu2ta 1xú 1xü xü2lé xü2ve xü2ze 1xű 2y. yaa2d y1abla y1a2bon y1abra ya1bri y1abs ya2cél. ya2dako ya2dalé y1adap y1a2data y1a2datb ya2dati y1a2dato ya2datu yadé2ki ya2d1és ya2dév y1admi ya2dóan ya2dóbó ya2dóé y1a2dói y1a2dój ya2dóké ya2dókt y1a2dóm ya2dóná y1a2dór y1a2dós y1a2dóu yae2r ya2ero yae2t yaé2r y1aff ya1f2r ya2g1a2d ya2g1ag ya2g1am ya2gan y1aganc ya2g1a2s ya2g1atl ya2g1ato ya2gau yaga2z yag1azo ya2g1áll yag1árá yag1árb yag1á2ré yag1árh yag1ári yag1árj yag1árk yag1á2ro yag1árra. yag1árs yag1árt ya2gás yag1át1a2 ya2g1átf ya2g1átl ya2g1átr yag1d2 ya2gec ya2g1el ya2g1es ya2g1é2g ya2gék y1aggr yag3gyú ya2gid ya2gim ya2g1io yag1isz ya2giz ya2gí ya2g1osz ya2g1ó2r ya2gő yag1s ya2gur ya2g1ut y1agy. y1a2gyat y1agyb y1agyf y1agyk y1a2gyon y1agyr y1a2jak y1a2ján y1ajk y1ajt y1akadá ya2k1áll ya2k1átk ya2k1átm yak1elm yak1elt yak1ékn ya2k1ér. ya2k1éri yak1i2zo ya1klu y1akna. y1aknák ya1kné y1a2kol. ya2k1ola ya2k1old ya2k1ón y1a2kós ya2k1örv ya1k2rém ya1kri ya1krí y1akt. y1akták y1aktb y1aktiv y1aktj y1aktot y1aktu yala2g1ú ya2l1agy yal1ajk ya2lakb y1a2lakj y1a2lakk y1a2lakok y1a2lakom y1a2lakot ya2lakt ya2laku y1alakz ya2l1a2l y1alany ya2lapa y1a2lapí ya2lapjá y1a2lapú yala2te yal1ága ya2l1ál yalás1s y1aláté ya2l1é2ne ya2lif yal1i2ko ya2l1inv y1aljai y1alji ya2lor yalókész1 ya2l1órá ya2l1ő2 y2alta yal1t2r y1altú ya2lü ya2lű y1amalg ya2m1any yam1a2rár yama2tal ya2m1árb ya2m1árn yamászás1 ya2m1á2to yam1b2 yam1emb yam1esés yami2k ya2m1iko ya2mind ya2m1i2o ya2m1is ya2m1osz ya2m1ó2r ya2mö ya2mő ya2mü y1a2nal ya2nan ya2nar yan1arr ya2nat yan1att ya2n3e. ya2n1e2g ya2nek ya2ner ya2n1et ya2nez y1a2ném y1ang ya2nid ya2n1in ya2n1is ya2nit y1a2niz y1anny yano2d yan1oda yan1onn ya2nő. ya2nyas y1anyj y1a2nyó y1a2nyuk yaó2r y1a2pa. y1a2pai y1a2pas y1a2páb y1a2pád y1a2páé y1a2pái y1a2pák y1a2pám y1a2pára y1a2páró y1a2pát. y1a2páto y1a2pátó y1a2páv y1a2pi. y1apjáh y1apjái y1apju ya1p2l ya2post yapo2tá y1a2pó. y1a2póé y1a2póh y1a2pói y1a2pój ya2póké ya2póna y1a2pós ya2pót. ya2pótó y1a2póv y1app ya1pre ya1p2ri y1aprí ya1pro ya2r1a2dá ya2r1a2dó ya2r1a2du ya2rasz ya2ránn y1a2rány ya2r1átv y1arc. y1arca y1arcá y1arcb y1arcc y1arch y1arck y1arcn y1arco y1arcr y1arcu y1arcú 1yard. 1yardn 3yardom 1yardos yar1drá yar1ell ya2roma ya2ror yar1ó2rá yar1óvá ya2róz yar1s2 yas1alj ya2sap ya2s1as yaság1g ya1sl ya1sne ya1s2pi ya1s2po ya1s2rá yast2 ya1s2ta ya1sto ya1str ya1svi yasz2tár y1a2tád yatékát1a2 y1atka. y1atká ya2tomh y1a2tomm y1a2tomo yat2rág ya1tré ya1tróf y1attr y1a2ty y1a2uk y1a2ulá yau2tá y1a2uto y1autó yautói2ko yaü2t yaü2z y1a2vat y1a2zon y1a2zúr y1á2bé y1ábr yá2ga yá2gá yá2gé yá2gi yá2go yá2gu yá2gú yá2gy yá2jal yá2j1e yá2j1ö yá2jő yáka2 yá2k1an yá2k1á yá2k1e yá2kü yálas3s yá2lál y1áldo yá2l1e y1állam y1állat y1állás y1állí y1állo y1álló y1állv yá2lü yáma2 yá2m1al yá2m1an yá2m1ap yá2m1as yámi2 yá2m1in yá2mü yá2n1e yá2nék yán3n yá2nö yánt2 yán1tr yá2nü yá1ny2 y1á2po yá2r1a2l y1á2raml y1á2ramo yára2n yár1any yá2rap yá2rar yá2r1ass yá2r1av yá2raz y1árazá yár1azo yá2r1ál y1árbev yár1d2 yá2r1e2 y1árem yá2réj y1á2riá yá2rim yá2r1is y1árnya yáró2 yá2rór yá2rö yá2rő y1árpá yár2sé y2árt. y1ártám yár1tr y1á2ruh y1árur yá2rú2 y1árú. yá2rü y1árva y1árver yá2sal yá2sas yá2s1á2g yá2s1á2rá yá2s1árt y1á2sás yá2se yáská2 y1á2só yá2sö yá2szab yá2szag yá2szal yá2szas yá2sz1ál yá2sze yász1el yász1em yás3zen yá2szét yá2szév yá2szim yá2szin yá2szis yá2szit yász1ó2d yász1ó2r yá2sz1ö2 yá2sző yá2sz1ü2 y1á2ta yát1a2l y1á2tá y1átb y1á2t1e2 y1á2té y1átf y1áth y1á2t1i2 y1átk y1átlag y1átlá y1átlé y1átm y1átn y1á2t1ö y1átp y1átr y1áts y1átt y1á2tü y1átv ybeá2 yb2la yb2le yb2lé yb2li yb2lo yb2lú yb2ra yb2ri yb2ro yb2ró ycsa2p1á2g ycsőé2 yc2vi yd2be y2desd yd2ni y1d2ra y1d2rá yd2ro yd2ró y1d2ru yea2v yeá2r ye1bl y1ecset ye2d1á ye2deg ye2d1esz ye2dol ye2d1ó2 ye2d1u2 ye2d1ú ye2d1ü2lő yed2vér yee2s y1eff yega2 ye2g1ala ye2gan ye2g1az ye2g1á2 ye2g1el yeg1e2red ye2g1él yeg1érbe y1egérr yegész1 yeg1észn yeg3g2 ye2gid ye2gí ye2gú ye2g1üg ye2gyed y1e2gyen y1e2gyes ye2gyet ye2gyez y1e2gyé y1egyh y1egyl y1egys y1együ y1egyv yei2g y1ejt y1e2ke. y1e2kei y1e2kek y1e2kéé ye2kéj y1e2kés. y1e2kése ye1k2ré y1elad y1e2lág ye2lál y1elc y1e2lef ye2lege ye2l1e2h ye2lemek y1e2lemez y1e2lemű y1e2l1e2re ye2légt ye2l1é2ké ye2l1ér. yelés3s yelé2s3z y1elhal y1elhel y1elhú y1e2l1in ye2liv y1e2l1í2 y1eljá y1elka y1elnev y1elnö y1elny ye2los y1e2lö y1e2lőad y1e2lőí ye2lőtt y1e2lőz y1elsa y1első y1eltér y1elto y1eltö yel2vad yel2v1áll yel2vás yel2v1eg yel2v1e2r yel2vessz yelve2sz yelv1esze y1elvevé yel2véd yel2v1ég yel2vél yel2v1érz yel2v1í yel2vol ye2mak ye2m1a2l ye2map yema2r ye2m1at ye2mál y1ember y1e2melé y1emelk ye2m1er y1e2més yemi2 yem1ing ye2m1is ye2mit yem1ita ye2miz y1emlék y1emlí y1emlő yem1ost ye2m1ö yem1p2 yemu2s yem1usz ye2n1á2 yen2csa yen2c3ser ye2n1elj ye2n1eln ye2n1elv y1e2ner yenes3s ye2n1é2l yenfé2l1é2v ye2nid ye2n1i2p yen1k2 ye2n1o ye2n1üg yenyá2 y1enz ye2pag yep1alo ye2p1ará ye2p1áll ye2pát ye2p1e2l ye2p1é2k y1e2pik y1epiz ye2pos yep2p1e2r ye1pro yep1t2 y1erde yere2ga yere2gete yereg1g y1e2rej yere2k1a yere2ká yere2k1e2sz yere2ko yere2k1ö2 y1e2rény y1erké y1erkö y1erny y1e2ro ye2rőér ye2rőig ye2rőné ye2rőrő ye2rősí ye2rőss ye2rővá yer2s1a y1erszé ye2sá yes1egé yes1egy ye2s1ej yes1e2kétő y1esemén ye2s1er y1e2setb y1e2seté y1e2seti y1e2setk y1e2setr y1e2setű y1esél ye2sip ye2s1í2r y1esőá ye2sőbe y1e2sőh ye2sője ye2sők. ye2sőkh ye2sőkr y1e2sőn y1e2sőr y1e2sős ye2sővé ye1s2pe yes2t1a2 y1estés y1estév y1estjü yes2tőr y1estű y1eszk y1eszm y1esztét y1e2szű y1e2tal yeteg1ér. y1e2tet ye2t1ért y1e2tik y1etn y1e2tűd ye2vet ye2vező y1e2vé y1e2vol y1e2vő y1e2zer yeze2t1ék yezőa2 yé2b1á yé2b1ér. yé2b1i2 yé2bü yé2des y1égb y1é2ge y1é2gé y1é2gi y1é2gő y1égt y1é2he. y1é2hen y1é2hes y1é2het y1éhs y1éj. y1éjb yé2jei yé2jen yé2jért y1é2ji y1éjj y1éjs y1éjt yé2kab yé2kad yé2k1aka yé2k1a2l y1é2kat yé2k1el yé2ker yé2k1é2k yé2k1é2l yé2k1ér. yé2kik yé2k1ó2 yé2k1ö yé2kő yé2kúr yé2l1á yé2le. yé2les y1é2let y1é2lén yé2lét yé2lim yél3l yé2lős y1élsp y1é2lű yéná2 yé2n1ár yén1e2ke. yé2nel yé2n1ikr yé2no yé2pí yé2pü yéra2 yé2r1aj yé2r1ak yé2ral yé2r1an yé2rar yé2r1á2 y1érch yér1d2 y1érdek yé2reg yé2r1e2l yé2rem y1érem. yér1eme yé2r1enc yér1eső y1é2ret yé2rev y1é2rez y1é2rés yé2ril y1é2rin y1érmü yé2r1osz yéró2 yé2r1ór y1é2rő. y1é2rői y1é2rők y1é2rőt y1érpa y1érték yéru2 yé2rut y1érv. y1érvén y1érvv y1érzet y1érzé y1érző yé2sz1á yé2sz1emb yé2sz1o yé2sz1ú yé2t1a y1é2tel y1é2ter yé2tén y1étke y1étl y1év. y1évad y1évb y1é2ve. y1é2vek y1é2vem y1é2ven y1é2ves y1é2vet y1évez y1é2véb y1é2vén y1é2vér y1é2vét y1é2vév y1évf y1évh y1é2vi y1évk y1évm y1évn y1évr y1évs y1évt y1é2vü y1é2vű y1évv yfas2 yfé2lá yf1gl yf2la yf2le yf2li yf2lo yf2ló y2föl. yf1ő2sö y1f2ra yf2ri yf2rí y1f2ro yf2rö yg2le yg2ló ygó1g2 ygót2 yg2ra yg2rá yg2ri yg2ró yg2ru yg2rü y2h1a2dó yha1p2 yha1t2r yhá2zal y2h1elv y1i2bo y1i2deá y1i2deg y1i2den y1i2deo y1i2dé y1i2dom y1i2dő y1i2ga y1i2gá y1i2géz y1igm y1i2har yi2hat y1ihl y1i2ker yi2k1érn yi2kont yi1k2ri y1i2ma. y1i2má y1i2mit y1imp y1i2nas y1inc y1ind y1inf y1inga yi2nic y1inj y1ins y1inv yi2ono yi2par y1i2ram y1i2rat. y1i2rata yira2t1é y1i2ratn y1i2rato yi2ratt y1i2rá y1i2ri y1i2rod y1irr y1irt y1ish y1isko y1ism y1isp y1ist y1i2sza yi2szel yi2szon y1i2tal y1i2tat y1i2var y1i2vás y1i2vó y1i2zé y1izg y1izm yi2zom yí2gé yí2ja yí2já yí2ju yí2ka yí2ká yí2ke yí2kí yí2kol yí2k1ö yí2la yí2l1e2 yí2lí yí2lö yí2ral yí2ráb yír1á2sz yí2rog yí2rő yítőa2 yí2vá yí2ve yí2vé yí2vó yí2vü yí2vű yí2zü yí2zű yje2gy1á2 y2jév yjob2b1o ykai2 yka1k2 yka2ró2ra yk2bó y2k1e2lem yk1é2jév yké2p1el yk2ho ykiá2 ykie2 yk1izm yk2ka yk2la yk2le yk2li yk2lí yk2ló yk2lu yk2ná ykóro2 yk2ra y1k2rá y1k2ri yk2rí yk2ro yk2ró yk2vó ylal2ta yla2t1a2n yla2t1é2t ylei2 yleí2 yle2tal yle2tá ylóá2 ylót2 yma1d2 y2mat. ymá2s1ik yme2g1é ym2ma yné2vér yn2ka ynk2r ynőé2n ynő2ié yo2be y1obj y1o2dú yo2gal yo2gál yo2g1ár yo2ge yog3g yogi2 yo2git yo2g1iv yo2gí yo2g1osz yo2gö yo2gü yo2gű yoka2 y1o2k1al y1o2ká y1o2k1ir y1okm y1o2kol y1o2kos y1o2koz y1okta yo2l1a2l yola2n yol1any yo2l1ári yol2cem yolci2 yol2cik y1oldá y1oldó y1o2lim y1oltás yol2ter yo2lú yo2lü yolví2 yo2m1a2l yoma2n yo2m1any yoma2s yo2m1aszó yo2maz yo2m1ál yo2m1árk yo2m1á2to yo2m1á2z yo2m1e yo2m1ik yo2mil yo2m1is yo2mí yo2m1ol yo2mö yo2mő yom1p2 yo2n1a2d yo2nag yo2naj yon1a2ka yo2n1a2l yo2n1am yo2n1a2n yo2nap yo2n1a2r yo2n1a2s yo2n1a2t yo2n1au yo2n1ál yo2n1át1a2 yo2n1áté yo2n1átj yon1átk yo2n1átr yo2n1áts yo2n1átv yo2n1á2z yon1d2 yo2n1e2 yo2néd yo2néh yo2nék yo2nén yon1f2 yo2nim yo2n1is yon1itt yo2niz yo2ní yon1k2 yon3n yo2n1ol yo2nop yo2n1osz yo2nö yo2n1ő2 yon1s2 yont2 yon1tr yo2n1ü y1o2pe y1opt yo2rad yo2r1a2k yo2r1a2p y1ord y1orgi y1orrú yor2sol y1orsó yors3s yo2se yos3s y1osto y1oszl yos3zs y1oszt yo2ut yo2ve yo2xi yóá2g yóá2r yócsa2p1á2 yó2dák y1ó2dár y1ó2dásak yó1f2l yó1g2r yó2gyár yó2gyi yó2gyú yóí2v yóo2k yóó2r yó1p2r y1ó2rac y1ó2rad yó2rag yó2rai y1ó2ras y1ó2ráb y1ó2rád y1ó2ráé y1ó2ráh y1ó2rái y1ó2ráj y1ó2rák y1ó2rám y1ó2rár y1ó2rás y1ó2rát y1ó2ráv y1ó2ri yó2s1aj yóscsa2 yó2sír yó2s1ol yó2s1orr yós1ors yós3s yósü2l yó2s1ű2 yö2bö yö2bű yö2cs yö2dém yö2ka yö2ká yö2kel yö2k1ék yö2kid yö2kí yö2ko yök1os yö2kó yö2kör yö2k1öss yö2ku yö2lők y1öltés y1öml y1ö2ná yön2gya yön2gyá yön2gyó yön2gy1öl y1önk y1önté y1önz yö2ra y1örd yö2rit yö2ro yö2ru yö2so y1össz y1ösv y1öszt y1ötl y1ö2töd. y1ö2töde y1ö2tödé y1ötp y1ött y1ötv yö2ve yö2vé yö2vi y1ö2vö y1ö2zön yőa2n yő1bl yőe2l yőe2r yő1fr yő1pr yő2ra y1ő2rei y1őrg y1őrl y1őrp y1őrszi y1ő2rül y1őrz yő2seg yő1str yősz2 yő2s3zár. yős3zs yő1szt yőzőkész1 ypen1n ype2te yp2la yp2le yp2lé yp2lu yponté2 yp2ra yp2re yp2ré yp2ri yp2rí yp2ro yp2ró y2prő yp2ru yp2sz yrádi2ón yrágás1 yrea2 yren2d1ő2 yreu2 ysa2van yság1g ys2ch ysé2g1e2l ysé2gés ys2ho ys2ka ys2ká ys2ki ys2la ys2lá ys2le ys2lu ys2mi ys2na ys2ni ys2pe ys2pi ys2po ys2pó ysp2r ys2ra ys2rá ys2rő ys2sa ys2sá ys2se y1s2tí y1s2to y1s2tó y1st2r y1s2tu y1s2tú ys2tü ysza2k1ü y2szaló y2száld yszáraz1 ysze2ra yszer2v1ó2 y1sz2f y1sz2k y1sz2l y1sz2m yszö2g1el y1sz2p y1sz2t y1sz2v yta2c yt1acé yta2n1é yta2n1ó2 ytá2l1é2 y2t1állá y2t1álló yt2raf yt2ran yt2rap y1t2rá y1t2re y1t2ré y1t2ri y1t2ro yt2rón yt2rö y1udv yu2g1á yu2ge y1ugr yu2gy yu2hu y1ujj yuj2j1a2da yu2kab yu2kar yu2k1aszá yu2k1ác yu2kál yuká2s yuk1ásá yu2k1e yu2k1ö yu2kő yuk1t2 yu2kű y1und y1u2ni y1u2no yu2rad yu2rai yu2rak yu2ral yu2ram yu2ras yu2rat y1u2rán y1u2ráv y1urn y1u2ru yu2sál yus3s yu2szá y1u2szo yu2tak yu2tal yu2tam yu2tat yu2taz yu2tál y1utc yu2tód y1u2tu y1u2tú yú1bl yú1br yú1gr y1újd y1ú2jé y1ú2jí y1újr y1újs yú2kel yú2k1es yú2ket yú2kev yú2kó yú2köl yú2l1ag yú2laj yú2lar yú2l1á2r yú2lát yú2l1eg yú2l1el yú2l1e2t yú2lin yú2l1is yúl2tag yú2lü yú2lű yú1pl yú1p2r y1úrb y1ú2ré. y1úrél y1ú2rév y1úrho y1ú2ri y1úrk y1úrnő y1úrr y1úrtó yú1sta yú2sü y1úszt y1útb yú2té. y1úth yúti2 yú2ti. yú2tig y1útj y1útk y1útm y1útn y1ú2ton y1útp y1útr y1úts y1útt y1útv yü2dü y1ü2gy yü2két yü2lá yü2led y1ülteté y1ünn yü2rí y1ü2rü y1ü2te y1ü2té y1ütk y1ü2tő y1ü2veg yü2völ y1ü2ze y1ü2zé y1üzl yű1bl yűé2n yű2g1ő yű1kl yű1pl y1űrb y1ű2ré. yű2réb yű2rén yű2rön y1űrr yű2sá yű2s1orra. yűs1s y1ű2zőb y1ű2zően y1ű2zőé y1ű2zőh y1ű2zők y1ű2zőn y1ű2zőr y1ű2zőt y1ű2zőv y2v1abr y2v1a2dó yva2d3z yvai2 y2v1akc y2v1alb y2v1alk y2v1ank y2v1ant yv1a2nya y2v1apo y2v1arz yva2s1u2 y2v1atk y2v1au y2v1azo yv1ábr yv1állo yv1állv yv1á2rai yv1á2rán y2v1áre y2v1árj y2v1árl yvárosi2b yv1árre y2v1á2ru y2v1árv y2v1áta y2v1áti y2v1átt yv1br yv1dr yv1e2gye yv1egys yv1e2kéb yv1ela y2v1e2lá y2v1ell y2v1elo y2v1elti y2v1ember yven3n y2v1e2p yve2r1a yve2r1á2 yve2reg yve2r1ész yve2rip yve2r1o yvert2 y2v1esszé y2v1eva y2v1e2vé yv1e2vő. y2v1ex yvezé2rel yvé2du yv1ékí yv1é2let y2v1élm y2v1élt y2v1ép y2v1érd y2v1é2ri y2v1érrő y2v1érté y2v1é2rü y2v1érze y2v1é2ve. yv1fr yv1gr yvigaz1 y2v1igé y2v1i2k y2v1ille y2v1im yv1ind y2vint y2v1i2p y2v1ism y2v1ist y2v1íg y2v1ín yví2zis yví2zü yv1kl yv1kr y2v1old y2v1olv y2v1or y2v1os yv1ó2r yv1öss y2v1ö2z yv1őr yv1pr yv1sk yv1sl yv1st yv1sz2 yv1tr y2v1ub y2v1ud y2v1ur y2v1u2t yv1új yv1út y2v1üg y2v1ü2z yza2t1a2l yza2t1e yza2t1érd yzá2r1ó2ra yzás3s yze2t1a2 yze2t1á yze2t1ér. yze2t1é2rő. yze2tés yze2téte yze2t1o yze2t1öl yzé2k1e2l yzőa2 yz2rí 2z. 1za 3zaba. zab2b1i2ko za2b1i2ga za1bre za1bri z1abro 2zabs za2ce za2c1ég za2cho zac1ikr za2c1im za2cipa za2c1iv za2cí zac1k2 zac3st za2dad 2zadag zad1alj za2dan za2data 2z1a2dato z1a2datr zadás1s zadi2a za2d1ír za2dóme za2dóz za1d2rá za2d1ut za2dzá za1fl za1f2r za2g1a2d za2gak za2ga2n zag1any za2gara za2g1a2t za2gau za2gág za2g1ál zag1árn zag1árt za2g1áz za2gel za2gés z1aggy 2zagi za2gin z1a2git za2g1osz zagren2 za2g1ü z1agy. z1a2gyak z1a2gyar z1agyb za2ijá zai2z 3zaj. 3zaja. za2j1a2d za2jan za2j1átv 3zajáv za2jes 3zajf za2jin 3zajj zajká2rok 3zajol za2j1or 2zajta 2zajtó. z1ajtók 2zajtót zaj1tr 3zajú za2j1ü2 2zakad za2k1a2dat. zakai2ko za2k1aka zak1alk za2k1alv za2kana za2k1ant za2kara z1akarat z1a2karás z1a2karó z1akarv za2k1atl za2k1á2p za2k1áta za2k1átl 2zakc z1akció za2k1e2g za2k1ele za2kelm za2k1eln za2k1elő za2ket za2k1é2l za2k1int za2k1i2p zak1iro za2k1ír zak1k2 za1klu 2z1aknák zak1oszt za2k1o2v za2kős za1krí 2zaktá 2zakti z1aktív 2zaktú zaku1p2 zaku2r zak1ura za2k1urá zakü2 za1kvó zal1acé zala2gá zalag1g 2zalakí za2lakj za2laku zala2n zal1any z1a2lapb za2lapj zal1átk zale2l zal1ele zal1ell zal1elő za2l1e2m z1algá z1alge za2lid z1alkal z1alkat z1alkot 2zalmás za2lól zalta2n zal2tel zal2tem z1alti za2m1a2d za2m1aj zam1ala za2m1a2p zama2t1ő2 za2maz 2z1ambu za2mem zam1ing za2m1is za2mí za2m1osz za2mü z1a2nal z1a2nek 2zang z1angy 2z1ankét zan2tes z1antil za2nya. z1a2nyag z1a2nyó zao2k zao2s zaó2h zaó2v z1a2pa. za2pad za2p1a2g z1a2pai za2p1ág z1a2pán za2p1ára z1a2pát z1a2páv zape2l zap1ele za2pem za2pes za2pí za1p2lán z1a2pó. z1a2póé z1a2pók 2zap1p2 zappa2ne zap3rof zap1s2 za2r1a2dá za2ran zar1a2nya zar1apa za2rar z1a2rái za2r1ál z1a2rány z1a2rár 2zarc z1arc. z1arca z1arcá z1arch z1arci z1arck z1arco z1arcú zare2t za2r1ete za2rev za2réna za2réná 2zarm za2r1ön za2r1ü zar2vág 2zarz za2sem za1s2ká za1s2ko za1s2li za1s2pó za1spr za2t1ab za2t1a2d za2t1aj zat1alap zat1alj zat1ana za2t1a2ny zat1ará zat1att za2tau za2taz za2t1áll zat1álo zatá2p zat1ápo za2t1árad za2t1áré za2t1á2ru za2t1elé zat1elk za2t1e2ré za2t1erk za2t1é2g za2tél zat1i2ko za2tim za2t1ind za2t1ing za2tins za2t1int za2t1ist za2tiz zat1k2 2z1atka. z1atlas zatmo1s zatmosz2 za2t1okos zat1olda 2zatomj zat1oml za2t1osz za2tök za2t1ön zat2rok za1trom zatt2 zat1tr za2tura za2tül za2tür 2zaty za2tya za2tyá za2ula za2ulá za2urá zau2tak z1a2uto z1autó zaü2t zaü2z za3vará 3zavarb 2zavat z1az. z1azh z1a2zo 1zá 2z1ábr zá2de zág1a2d zá2gak. zá2gako zá2g1al z1á2gas z1á2gat zá2gaz zág1azo zá2g1ál zá2g1á2rak zá2g1áru zá2g1e zá2gép zá2golta z1á2gói zá2g1út. zá2gü z1ágy. z1á2gya zágy1a2da z1ágyb z1ágyh z1ágyn z1ágyr z1á2gyu záí2r zá2j1ék zá2jí zá2j1ol zá2j1ös zá2jő zá2jü zá2jű zá2kin zá2k1ö2v zála2n zá2l1any zál1apr z1álar zál1assz z1álca z1álcá z1áldá zá2l1e2g zá2l1e2l zá2l1em zá2lib zá2lid zál1ing zá2lir z1állam z1állap z1álma z1álmá z1álmo zá2lob zálo2d zá2l1oda zá2los zá2lü zá2ly1a2l zá2mac zá2m1a2d zá2m1aj zá2m1a2l zám1any zá2m1a2p záma2r zám1ará zá2maz zá2m1átl zá2m1á2to zá2mél zá2m1é2rő zá2m1ik zá2mip zá2mir zám1orm zám1ors zá2mó zá2mö zá2mő zá2m1ut zá2mü zá2mű zá2naj zá2n1as zá2n1at zá2n1át zá2nem zá2nis zá2n1it zán3n zá2n1osz zán1sp zá2nü zány2 zá2p1ad zá2p1ag zá2p1orzó zá1p2r z1á2radd zá2r1a2dot zá2r1a2l z1á2ramk z1á2raml zára2n zá2r1any zá2r1ap zá2rar zá2r1ati zá2r1a2to zá2r1att zá2r1av zá2r1ál 3zárás. 3zárása 3zárásb 3zárási zárás1s zá2r1á2sz z1árbev 3zárdá zár2dem zár2d3z 2zá2r1em zá2réb 2zárf 2z1á2riá zá2rid zá2r1i2k zá2rim zá2r1is zá2r1iz zár1k2 3zárkák 2zárkö 3zárlat 2zárnö 2zárny zár2nyál zá2r1osz 3záró. 3záróa zá2r1óbo 3záród zár1óév zá2r1ó2rá zá2rő 2zárré zárs2 zár1sk zárt1anyá zár2t1es zárté2r zár1tro zá2rug z1á2ruh z1áruj 2zárunkn 2zárunkr zá2rü z1árvah zá2s1a2d zá2saj zá2sal zá2s1a2r zá2s1at zá2saz zá2s1á2g zá2s1árad zá2s1á2rá zá2s1á2ré zá2s1árh zá2s1árn zá2s1árt z1á2sás zá2sep zás1ikon zá2sis zá2s1í zá2s1ol z1á2só. zás1ó2r z1ásóv zá2sut zá2sü zá2s3zav 3zászl zász3se z1átad zát1a2dó. zát1a2dók zátá2r 2zátb 2z1átc z1átd zát1e2m zá2tél 2z1átf 2záth z1átha z1áthe zá1t2hi z1á2t1i2 2z1átj 2z1átm zá1tra zá1tro 2záts 2z1átv zá2z1ala záza2t zá2z1ato zá2z1e2 zá2zév zá2z1ol zá2zos zázó2 zá2zór zá2zö zá2zsaj zá2zsas záz4sá zá2zsál zá2zsol zba2ki zbeá2 zb2le zb2lo zb2lú zb2ri zb2ró zb2rú zc2lu zcsa2p1á2g zda1p2 zdas2 z2d1ass zd1áll zdés1s zdő1s2p zd2ri zd1u2r 1ze zea2d zea2g zea2k zea2l zea2s zeán2sze zeá2r zeá2z 2z1eb. 2zebe ze2be. ze2bei ze2bek z1e2béd z1ebf z1ebh z1ebk 2z1ebn ze1bru 2zece z1e2cet z1e2ch z1e2cset ze2d1ál. ze2d1álj ze2d1áln ze2d1ált ze2d1álv zede2r1e ze2dil ze2d1ó2 2z1e2dz zee2s z1eff ze1fr ze2g1a2l ze2gap ze2gar ze2g1ál ze2g1ár ze2g1eg zeg1ell ze2gep zeget2t1eb zeg1érr zegé2sz zeg1észb zeg1észé ze2gid ze2gil ze2gol ze2gú ze2gyed ze2gy1e2l ze2gyene ze2gyez z1egyl z1egys ze2het ze2ia zei2g zei2s zeí2r zekci2ósz zek1e2gy ze2k1ell z1e2kéit 2zekék ze2kil ze1k2lap ze2k1ott zek1övek ze2kő ze1k2reá zek1t2 ze2k1ü2lő z1ekviv ze2lag ze2lar ze2lál z1elbo 2zeledel z1e2lefá ze2leji 2zelekt ze2leme. ze2lemek zelem1el zele2m1ér. ze2lemű zele2pá zele2p1el zele2po zele2p1ü2l z1e2l1e2re ze2l1esz zele2tá zele2ter 2z1e2lég 2z1eléré zel1érh zelés1s z1elhá 2z1elhel 2z1elher ze2litet z1elkü 2z1elláto 2zellen z1ellene 2z1elnev z1elnö ze2lof z1e2los z1e2lö2l z1elön 2z1e2lőha zelő2saj z1e2lőző z1első z1eltá 2z1eltér 2z1elto 2z1eltű z1e2lu 2z1e2lú z1elv. z1elvek z1elves 2z1elvev z1elvez z1elvn z1elvt 2z1elvű z1elzá 2zema ze2mak ze2m1ág ze2m1ár ze2mát 2zember z1ember. z1emberb z1emberé z1emberh z1emberk z1embern z1emberr z1embert z1embl 2zeme. ze2m1egé 2zemei 2zemek ze2m1ell ze2m1eng 2zeméb 2zeméh ze2m1ék ze2m1éle ze2m1é2lé ze2m1é2lő ze2m1élt ze2m1élv ze2m1é2rét 2zemés zemé2te ze2m1éten ze2m1étet ze2m1étjé 2zemév ze2migr ze2m1ing ze2m1int ze2mis ze2m1iz ze2m1í 2zemk 2zeml 2zemmó ze2mol ze2m1osz ze2m1ó2 ze2m1ő 2zems z1emul zem1ur ze2mú 2zemü 2zemv zemvíz1 3zeneir 3zeneka zenesz2 3zenéé 3zenéi 3zenéj ze2nép zenké2 zenkét1 ze2n1o zen2tag zen2tal zen2t1an zen2t1as zente2g zen2t1egy zen2telm zen2t1ere zen2tev zen2t1é2j zen2t1imr zen2tip zen2tis zen2tí zen2tol zen2t1ó2 zen2t1ö zentő2s zen2t1őse 2zenz zeo2k zeo2m zeö2r 2zepééb 2zepééi 2zepéén 2zepéit 2z1epéj 2z1e2pém 2z1e2pés z1epiz ze1pla ze1ple 2zepr ze1p2ri ze1pró ze2r1a2d ze2rajá ze2r1ajt ze2rakr ze2r1al ze2ram ze2r1a2n ze2r1a2r ze2r1as ze2r1a2t ze2r1au ze2raz ze2r1ága ze2r1á2r ze2rás ze2r1á2t zer2bin zer1d2 z1erdé ze2r1eb ze2r1e2ce ze2redé ze2rege zer1e2ge. ze2r1e2gé ze2r1egg ze2r1egy z1e2reje zer1ejt z1e2rejü z1e2rejű ze2r1e2ke. z1e2rekl ze2relődj ze2r1ember ze2r1emi ze2r1eng zere2p1a ze2r1e2r ze2r1e2sés ze2r1essz ze2r1este zer1e2sze. zer1eszk ze2reszt ze2r1eu ze2r1e2v ze2rég ze2r1é2j ze2r1ék ze2r1é2l ze2r1ép zer1g2 ze2r1i2d ze2r1iga ze2r1iko ze2r1ill ze2r1i2m ze2r1ina ze2rind ze2r1inf ze2r1ing ze2r1inj ze2r1ink ze2r1intel ze2r1inté zer1intő ze2rio ze2rism ze2riz ze2r1í2j zer1k2 zer2nal ze2r1okt ze2r1old ze2rolv ze2ror ze2r1ost ze2r1osz ze2roti ze2r1ó2r ze2rök 2ze2rő z1erő. z1erőf z1erői z1erők z1eről z1erőn z1erős z1erőt z1erőv zer1őz zer1p2 zer1s zers2k zers2p zers2t zert1á2lom zer2tit zer2tór zer1tra zer1tren ze2r1un ze2rur ze2rus ze2r1u2t ze2r1út ze2r1ü2g 2zerű zer2v1a2dó zer2van zer2vel zer2vél 2z1e2sedék ze2s1e2kéh z1e2setb z1e2sete. z1esetes z1e2setet z1e2seté z1e2seti z1e2setr 2z1e2sés. 2z1e2sésb 2z1esésd 2z1e2sése. 2z1e2sései 2z1e2sések 2z1e2sésem 2z1e2sésen 2z1e2séses 2z1e2sésé 2z1e2sésh 2z1e2sési 2z1e2sésk 2z1e2sésn 2z1e2sésr 2z1e2séss 2z1e2sést ze2s1it ze1s2mi 2z1e2ső zesp2 ze1s2pe ze1spr 2zeste z1estek z1estem 2z1esté z1esti. ze1s2til 2z1estj ze1sto z1estre z1estt ze2s1ü2v zes3zac ze2szág zesz1e2get ze2szelle ze2szeng ze2széh ze2sz1é2le ze2sz1im ze2szip 2zeszk z1eszkö ze2szol zeszt2 zesz1tr ze2t1ab ze2tac ze2t1ala ze2t1a2ny ze2táj ze2t1á2l ze2t1á2p ze2t1át zet1egé zet1elá ze2t1ell ze2telm ze2t1e2lőá ze2t1e2lőd ze2t1elr zet1emel ze2t1eml ze2tene zet1erk zet1e2ró zete2s1ég zetest2 zetes1tr z1e2teté ze2t1eti ze2tetn ze2t1éd ze2t1é2j ze2t1é2l ze2térte ze2t1érté zet1értő ze2t1é2rü zeté2sz zet1észe zet1éter ze2tid z1e2tika ze2t1i2ko zet1ill ze2t1ing ze2tít zetkész1e ze2tom zet1ont ze2top ze2t1ó2r ze2t1ö2v zet1őri zet1őrö zet1őrt ze2tut ze2tür ze2t1ü2z ze2ty zeu2g z1e2ur zeü2t z1e2vő ze2x1id ze2xim ze2x1i2p z1expe zex2t1ö ze2xú z1e2zer z1ezr 1zé z1é2ber 2z1ébr zé2dak zé2d1a2l zé2d1a2r zé2d1as zé2dat zé2d1á2 zé2d1ekét zé2d1e2lem zé2delm zéde2r1 zéd1esem zé2d1esz zé2d1eti zé2d1és zé2dik zé2dó zé2d1ő zédren2 zédu2 zé2dur zé2dú zé2d3z zé2fá z1ég. z1égb z1é2ge zé2gé z1é2gi z1égn z1é2gő z1égr z1égt z1é2he. z1é2hen 2z1é2hes z1é2het 2z1éhs 2zéid z1éj. zé2jen z1é2ji zéjje2l1e2 z1éjs 2z1éjül 2z1é2jün zé2k1a2d zé2k1a2l zé2k1a2n zé2k1ap zé2k1as zé2kás zé2k1eg zé2k1e2két zé2k1elr zé2ker z1é2kez zé2k1ék zé2k1é2l zé2k1és zék1old zék1osz zé2k1ó2 zé2kör zé2kúr zékü2l zé2k1ülé zé2k1ülő zéla2 zé2lab zé2lad zé2lak zé2l1an zé2las zé2l1á2 2zé2le2l zél1ele zél1ell zél1elő zél1elt zé2l1e2r 2zélet. 2z1é2letb 2z1é2lete. 2z1é2leten 2z1é2leté zé2letf 2z1é2leth 2z1é2leti 2z1é2letn 2z1é2letp 2z1é2letr 2z1é2lets 2z1é2lettő 2z1é2letü 2z1é2letű 2zélé zé2l1ékh zé2lim zé2l1ist zé2lí 2zélm zé2l1o zé2l1ö2 2zélős 2zélt zé2l1u2 zé2lú zé2lya zé2lyá zé2ly1esh zé2lyo 2zéme zé2n1árn zéndio2 zé2neg 2z1é2nekb 2z1é2neke z1é2neké zé2nekk 2zénekl z1é2nekn zé2nekr zé2nekü zé2n1e2l zé2n1e2r zéni2 zé2nik zé2nil zé2nim zé2n1io zé2n1is zé2ní zé2nom zé2nö zé2nő zént2 zé2n1ü2lő zé2p1a2g zé2p1a2l zé2p1any zé2p1a2p zé2p1a2r zé2pas zé2pat zé2pau zé2pav zé2p1á2r zé2pát zé2peg zép1ell zé2pez zép1f2 zé2pin zé2p1i2p zé2pir zé2p1i2s 2zépít zépo2 zé2pol zé2pos zé2pó zé2pö zép1s zé2pud zé2p1us zé2pú 2zépül zé2rab zé2rag zé2r1a2l z1é2ram zé2r1a2n zé2rap zé2rar zé2r1as zé2rat zé2rav zé2r1á2 zér1d2 zé2r1e2lemé zé2r1e2lemk zé2r1e2lemn zé2remb zér1eml zé2r1esz 2zérett zé2rev zé2rés. zé2résb zé2rése zé2rési zé2résk zé2résn zé2r1id zé2rim zé2ris zé2r1o2k zé2r1os 3zérós zé2rö 2z1é2rő. z1é2rői z1é2rők zé2rős z1é2rőt zér1s zér2taj 2zértekez 2zértelm 2z1értetl 2z1értető 2z1érték 2z1érthet z1érto zé2rú zé2sab zé2san zé2sar zé2s1az zé2s1á2 zé2seg zé2s1e2l zé2s1e2r zé2s1eti zé2s1ég zé2sés zé2s1i2k zé2sok zé2só zés3s zé2s1ü2t zé2s3za z1észb z1é2szé z1észl zé2szó zés3zs zé2t1a2b zé2t1ad zé2tag zé2t1aj zé2t1a2k zé2t1a2l zé2t1ap zé2t1a2s zé2t1au zé2t1á2 zéte2n zéte2se zéte2sü zé2tég zé2t1é2n zé2t1i2 2zétk zé2tol zé2t1o2m zé2tor zé2t1o2s zé2tun zé2tú zé2t1ü2 zé2t1ű 2zétv 2z1év. 2z1évad z1évb 2z1é2ve. 2z1é2vek 2z1é2ven 2z1é2ves z1é2vén z1é2vét z1é2vév z1évf 2zévi z1é2vi. z1évk 2z1évn z1évr z1évs z1évt z1é2vü 2z1évv zfa2l1a2da zfa2l1aj zfa2l1e2l zfa2les zfe2l1em zfe2len zfe2reg zf2la zf2le zf2li zf2lo zf2ló zfora2 zfo2rat zfo2riz zföldié2 zf2ra zf2rá zf2re zf2ri zf2rí zf2ro zf2rö zgás3s zgá2s3z zgá2zó zgé2p1e2két zgé2sa zgé2sá zgé2sem zgés3s zg2la zg2ló zgó1g2 zgő2nyá zgő2z1á2 zgő2zér zgő2z1ő z1g2ra z1g2ráf. z1g2ráff z1g2ráfh z1g2ráfj z1g2ráfk z1g2ráfn z1g2ráfr zg2ró z1g2ru zhán2 zhá2t1a2d zházköz1 1zi zi2aa zi2aá zi2abo zi2ac zi2ad zi2ae zi2aé zi2ag zi2ah zi2aí zi2aj zi2akép zi2akó zi2al zi2am zi2ao zi2aö zi2a1p2 zi2ar zi2asza zi2aszo zi2aszó zi2at zi2au2 zi2aú zi2aü zi2av 2z1ibr 2zicc zi1ch z1i2deá z1i2deg z1i2deo zi2dén 2z1i2dő zie2l zie2m zi2éa zi2éá zi2éke zi2ép zi2éta zi2étá zi2éü z1ifj z2ig. zi2ga. 2z1igazg 2z1i2gazo z1i2gás zi2géj 2z1i2gén zi1g2r 2zigye zi2k1a2n zik1ékek zi2kik zi2kim zi2k1ing zi1klu zi2k1u2r zikus1s zi2ler zi2l1é2j zi2l1ék zi2l1ing zi2l1ü z1i2ma. zi2mak zi2máb zi2máj zi2mák zim1áll zi2már zi2mát zi2máz zim1b zi2m1e2g zi2m1e2l zi2m1é2ré zi2m1érté zim1ind zi2m1ip z1i2mit zi2mö zi2n1a2d zi2n1a2l zi2n1a2n zi2n1a2r 2z1i2nas zi2n1au zi2nái zi2n1áll z1indu zin1emb zi2nég zin2gas zin2gál zi2n1i2m zi2n1in zi2ní zin3n zi2nol zin1s2 zin2t1a2d zin2t1a2l zin2t1a2s zin2tát zin2t1á2z zinte2l zin2t1ele zin2telő zin2telt z1interj z1interp z1interv zin2tom zin2t1ón zi2n1u2t zi2nú zi2ol 2z1i2ono 2z1i2ons zi2ot zi2óa zi2óá zi2óc zi2óe zi2óg zi2óí zi2ókam zi2ókap zi2óká zi2óke zi2ó1kl zi2ól zi2ómá zi2ómé zi2óné zi2óny zi2óo zi2ó1p2 zi2órá zi2ósá zi2ósé zi2ó1s2ká zi2ó1sp zi2ószű zi2óta zi2ótá zi2óú zi2óü zi2óű zi2pai zi2pari zi2páj zi1p2l zi1p2r z1i2rat 2zirá z1i2rán z2i3re 2ziro z1i2rod zi2rón z2i3rő 2zirt zir2t1a2 z1irtá zir2to z1irtó zi2sad zi2sal zi2sam zi2sar zi2s1a2s zi2sál zi2s1áro zi2s1e2g zi2s1e2l zi2s1er zise2s zi2s1ese zi2s1esz zi2s1ék zi2sérte zis1évi zi2s1il zi2sin zi2s1is zi2sit zi2s1o2v zi2s1ó2 zi2sö zi2ső ziss2 zis3sza zis3szá zis3szo zist2 zis1tra zis1tre zi2sut zi2s1ü2v zi2s3zaj zis3zav zis3zón zi2t1áll zit1áru zi2t1e2g zi2t1elr zit1eng zi2tét zi2til zi2tin zi2tip zi2tir zi2t1or zitó2 zi2tór zi2t1út ziú2r z1i2vad 2z1i2vó 2z1i2zé 2zizm z1izmo z1i2zom 1zí zí2gé zí2jan zí2je zí2jö zí2jü zí2nac zí2nad zí2naku zí2nal zí2nan zí2nas zí2nat zí2n1áll zí2n1ár zí2nát zí2n1e2r zí2nél zí2ní z1ínna zín3nye zíno2 zí2n1od zí2n1ok zí2nos zí2n1ó2 zí2nö zí2nu zí2nú z1í2ny zínyenc1 zí2r1a 2z1í2rá zí2rog 2z1í2ró zítőa2 zítőe2 zítőkész1 zí2vaj zív1akt zí2val zí2var zí2ver zí2v1ő zí2vul zí2vú zí2ze zí2zü zí2zű zje2gy1á2 z2k1abl z2k1alak z2k1alj z2k1alt zka1p2l z2k1a2rád z2k1a2ráj z2k1a2rén zkaró2 zka2rór zka1s2k z2k1állv zk1bl zk1dr zk1egys z2kenn zk1eszk z2k1etű z2k1ér. z2k1érté z1k2hü zkia2 zkiá2 zkie2 zki2g z2k1igé zki2sé zk2la z1k2lá zk2ler z1k2lí zk2ló z1k2lu z2k1olda zkon2t1ár z2k1ontó zko2r1os z2k1oszl z3koszt z2kókor zk1ókort zkó2pá zkó2z3s zkö2zele zköz1ell zkö2z1é2l zkőé2h zk1pr z1k2rak zk2rá z1k2reá z1k2rém z1k2réta z1k2rétá zk2rí z1k2ro z1k2rón zkultú3 zkultúr2 z2k1u2rán z2k1u2rát. z2k1utá z1k2val zk2vó zky2b zky2h zky2j zky2k zky2n zky2r zky2t zky2v zla2tal zlata2n zlat1any zlá2m1e zlá2mis zlás3s z2láv. z2láve z2lávé z2lávk z2lávn z2lávo z2lávv zleg1g zlei2 zleí2 z2leng. zle2tak zle2tal zle2t1a2n zle2tál zle2t1á2r zle2t1eg zle2t1ell zle2tesz zle2tél zle2t1ér. zlet1érv zle2tés zle2t1é2té zle2t1é2ve. zletigaz1 zle2t1u zle2tüz zlé2sí zlé2so zlés3s zlina2 zli2nan zli2nin z2loge zlo2p1as zlo2pó zlóó2 zló2s1orr zma1pr zmas2 zma1sp zmeá2 zme2ge zme3gom zmi2n1a2 zmi2n1e zmuskész1 zmu2sö zmu2s3z zmu2tok zna2pes znie2 zni2ó z2nob znó1str znót2 znó1tr 1zo z1obj z1o2dú zo2es z1o2ka. z1o2k1a2d z1o2kai zo2k1ál zoki2 zo2k1ip z1o2k1ir z1okke z1okle 2z1o2koz 2zokta zo2lab 2z1o2laj zolajá2 zola2j1ár zola2je zo2l1a2l zo2l1as zol1ábr zo2l1áro z1oldal 2z1oldh 2z1oldó zo2l1e zol1f2 zol1inf zo2l1is zo2l1í z1olló zo2lö z1oltás z1oltó. zol1t2re zo2lü 2zolvad zo2m1a2g zo2mak zo2m1a2l zo2m1a2n zo2map zo2m1a2s zom1áll zo2m1á2r zom1b2 3zombor. 2zome zo2meg zo2m1el zo2men 2zomé zo2mél zomé2t zo2m1éte 2zomf 2zomg zomi2 zo2min zo2miz zom2jó 2zoml zo2m1ors zo2m1os 2zo2mö 2zom1p2 2zom1s 2zomz zo2n1aj zo2n1ak zo2n1a2la zo2n1alá zo2n1alk zona2n zo2n1any zo2n1a2r zon1asz zo2n1au zo2náld zo2n1áll zo2n1átl zone2 zo2neg zo2nel zo2n1er zo2nes zo2név zo2nin zo2n1i2o zo2n1or zono2sé zo2n1ó2 zo2nö zon1s2 zon2t1es zon2tin zon1tre zo2nü zo2ny1ad zo2ny1a2l zo2ny1a2n zo2nyar zo2nyav zo2nye zo2nyid zo2nyij zo2nyó zo2ol zo2om z1opál z1o2pe zo1pho zo2r1a2d zo2raf zo2r1ag zo2r1aj zo2r1a2l zo2ran zo2r1as z1o2rat zo2r1au zo2r1e2 zor1f2 zo2rid zo2r1il zor1ing z1ormá zo2r1ol zo2rop zo2rosz zo2r1ó2 zo2rö z1orr. z1orrú z1orsó zor1t2re zo2rü 2z1osko z1ostá z1osto zo1sz2f z1oszl zosz2tat 2zote 2zotó zotó2pa zo2vi zo2xi 1zó zóa2d zóá2g zóá2r zó1bl zó1b2r zó1cl zó2d1e2l zó1fl zó1f2r zó1gl zógyö2k1ér zói2g zóí2v zója1 zó1k2l zó1kré zókupac1 2zól. z1ólm zó2lomb 3zónád 3zónái z1ó2ni 2z1ónj 2z1ónn z1ó2nod 2z1ónt zóó2r zó1p2l zó1p2r z1ó2rad z1ó2rar zó2rasz zó2rái z1ó2ráj z1ó2rák z1ó2rár zórás1s z1ó2rát z1ó2ráv z1ó2riá zós1ík. zó2s1ín. zó1s2ká zó1sl zó1s2ta zó1sté zósz1akad zósz1állí zó2szene zó2sz1é2le zó2sz1íj zósz1ü2lő. zóta2g1a2 zóté2g zót1ége zó1tré z1ó2vó 1zö zö2bá zö2bo zö2bó z1öcc zö2dé zö2dú zö2ga zö2gá zög3g zö2gil zö2gí zö2go zögö2 zö2g1öl zö2gu zö2gy 2z1ökl 2z1ö2ko 2zökrü 3zöldes 3zölds 2zöleb zö2les 2z1ölniv z1ölyv 2z1öml z1ö2na z1ö2ná 2zönb 2zöne 2zöné 2zöni 2zönl 2zönne 2zönö 2zönr 2zönt 3zörej zör2f1e zör2f1o zör2nya zör2nyá zör2nyel zör2nyesz zör2nyék zör2nyí zö2rök zör2p1a2 zör2pá 2z1örv 2zössz z1ösv z1ösztö zö2te 2z1ötl 2z1ötv z1öv. z1ö2vei z1ö2vek zöve2t1e2l z1ö2vez zö2zö 1ző zőa2c zőa2l zőá2g ző1bl ző1br zőé2l ző1fl ző1f2r zőgépi2 zőgé2p1ip ző1gr ző1kl zőmű1 zőnyá2 ző2ny1er ző2ny1é2k ző2nyért ző1pl ző1pr ző2ran ző2r1e2c ző2r1ege ző2rel ző2r1er 2zőrk 2zőrl z1őrlő 2zőrm ző2rol 2zőrü ző2r1ü2g 2zőrz z1őrzé z1őrző ző2sis ző1ská ző1spe ző1s2pi ző1sta ző1sti ző1str zősz2 ző1szf ző1szt ző1tr zőü2l zpen1n zp2fe zp2la zp2lé zp2lo zpor2t1e2 zpor2t1ő2 zpor2t1ú z1p2ra z1p2ri z1p2ro z1p2ru zrae3le zrádiói2t zre2d1á2 zre2del zre2d1é2k zre2d3z zren2d1ő2 3z2rí. z2s 1zsa zs1abla 2zs1a2dat 2zs1a2dó zsag2 2zsah. 2zsajt 2zs1akc 2zs1alj 2zs1alm 2zs1alt zsa2nyá zsa2pa. 2z3sapk zsa2rán z3sarj 2z3sark 2z3sarl 2zs1arz 2zs1aszt zs1atl zsa1tr 2zs1a2ty 2zsautó. 2zsautón zs1azo 1zsá 2zs1ábr 2z3sáf 2z3ság zs1ággy zsá2kó 2zs1ála 2zsálc 2zsálm 2zs1á2p 2zs1á2rak 2zsárat 2z3sári 2zsáru 2zsáte 2zs1átk 2zsáto 2zsátö 2zs1áts 2zs1á2zós zs1bl zs1br z3s2ch zscsapá2 zsde1s zs1dr 1zse zse2ba zse2biro zse2b1o2 2zsebz zs1e2ce zs1e2dé z3sej 2zsell zs1elm 2zselö zs1e2lőf zs1e2lőr 2zsember 2zs1e2mel zs1enc zs1ene zse2raj zse2r1á2 zse2rel zsere2s zse2r1esz zse2r1ék zse2rin zse2r1o 2zsese zse2szü zs1evé 2zs1ex 2zsez 1zsé z3ség zsé2ge2l 2zséhs 2zsél zs1éle 2zsép 2zs1érd 2zs1érte 2zs1érté 3zséry 2zsérz 2zséte 2zs1étk 2zs1étr 2zs1étt 2zs1é2ve. zs1fl zs1fr zs1gr 1zsi 2zsidő 2zsigá 2zsigé zsi2kor 2zs1ill 2zs1i2má zsi2min zsi2m1u 2zsinas zs1i2pa z3sipk 2zsirat zs1irato 2zs1iro 2zs1irt 2zs1ism 2zsist zsi2tat 2zsivó zs1izé 2zs1izm 2zs1i2zo zs1izz 1zsí 2z3síb zs1íj 2z3sík 2z3síp zsí2r1a2 zsí2rá2 3zsírbó 3zsíré 3zsíros 3zsírr 3zsírt2 2zs1í2v 2zs1í2z zs1kl zs1k2r 1zso 2z3sof 2zs1okm 2zs1okta 2zsolaj zs1oli 3zsom 2zs1op 2zsor z3soro 2zsosty 2zs1osz 1zsó zs1óné zs1órá 1zsö 2zsökör 2zsölőz 2zs1ös zs1ö2ve 1zső zs2pir zs1p2l zsp2r zs1s2k zs1s2p zs1st zs3sz zssze2r1e2l z3s2tad z3s2tat z3s2top zst2r zs1tro z3s2tú 1zsu 2zs1ud 2zsugár. 2zsugárr 2zsugr 3zsul 2zsum zsu1s zsusz2 1zsú 2zs1új 2zsúl zsú2r1a 1zsü 2zsüg 2zsült 2zsünn zs1üs 2zsüt 2zs1üz 1zsű zs1wh zs3zac z3szag zsza2ké zsza2k1ü z3szav zs3záp zs3zás z3szem zs3zené z3szer z3szé zsz2f z3szi zszind2 z3szí z3sz2k zsz2l z3szo z3szó z3szö zsz2p zs3zs zsz2t2 z3szü z3szű zt1abla z2t1a2bor z2t1a2cé z2ta2dal zt1a2dat zt1a2dó z2t1agre z2t1a2ká z2t1akc z2t1akk zt1akn ztaköz1 z2t1akv zt1a2lapú ztale2l zta2lele z2t1anal ztan2e zt1anes zt1anké zta2n1ó2 zt1a2nyag zt1anyak zt1anyas zt1anyád zt1anyám zt1anyáu z2t1anyu zt1a2pán zt1a2pás zt1a2pát z2t1apó zt1app z2t1aps zt1a2puk z2t1a2ra. zt1arán z2t1arc ztaso2 zta1sp zt1assz z2taszt zt1aszta z2tatig z2t1atk z2t1aty z2t1a2ut zt1ábr ztá2cs zt1ácso zt1ág. z2t1á2ga z2táli z2t1álm ztá2raj ztá2r1ass zt1árem ztá2ris z2t1árnö zt1árnya z2tároc z2tárokk ztá2r1olt ztá2r1óra ztár1sm ztár1s2p ztárt2 zt1árví ztá2sz zt1ászo zt1ászt z2t1átha z2t1áts z2t1átv ztávi2 ztá2v1ir zt1bl zt1dr z2t1e2b z2t1ef z2t1e2gé z2t1egy z2t1e2ke. z2t1e2kés z2t1ela z2t1elá z2t1elb z2t1e2legy z2t1e2leme z2t1e2lemm z2telemz z2t1elf z2t1eljá z2t1ellát z2t1elm z2telnö z2t1e2lo zt1e2lőadá z2t1e2lőc z2t1elr z2t1eltá z2t1elto z2t1ember z2t1e2mel z2t1eml z2tent zt1ente zte2raj zte2rak zte2rál zte2rár z2terde ztere2ot zte2repo zte2rill zte2ris zte2riz zte2rosz z2t1e2rot z2t1e2ró z2t1erő zte2r1ü2lé zte2sz z2t1esze z2t1eszé z2t1eszk z2t1ezr zt1ég. zt1égb zt1é2gé zt1égr z2t1é2j zté2k1e2l z2t1ékné z2t1é2le z2télé zt1é2lés z2t1élm z2t1é2lő z2t1élt zt1élű z2t1épü zté2rá z2t1érd z2t1érl z2t1érté z2t1érz zté2sz z2t1észh z2t1észn zté2tét z2t1étk zt1é2ves. zt1évt zt1fl zt1fr zt1gr z1t2hen ztia2g zt1i2den z2t1idé z2tidi z2t1ifj z2t1i2gé z2t1i2kon z2t1ille z2timá z2t1imp z2t1ind z2tinfe z2t1info z2t1ing. z2t1ingá z2t1ingb z2t1inge z2t1ingé z2t1ingg z2tingu z2t1inte z2t1inté z2t1invá zti2p z2t1ipa z2t1irá z2t1isk z2t1ism z2t1istá z2t1iste z2tital z2t1i2tat z2t1íj z2t1í2r zt1í2veke zt1kl zt1kr zt1kv z2toi z2t1o2koz z2t1oltó zto2lyag zt1ope zto2ras zto2r1e z2t1orgi ztorkész1 zt1ornam z2torrú z2torvo z2t1oszl zt1osztá ztóá2 ztóigaz1 z2t1ó2ni ztó1p2 ztó1sp ztó1tr zt1öko ztö2l z2t1öle ztön3n ztö2röks z2t1öss zt1ö2vez zt1övig z2t1öz ztőa2 ztőe2l ztőé2b z2t1őrh zt1őrl z2t1őrs zt1ő2sei z2t1ő2sö zt1ősű zt1pl zt1pr zt1ps z1tranz zt2rádá z1t2rág z1tréf z1t2rén z1trikó z1tril z1t2rió z1t2rü zt1sl zt1sn zt1sp zt1st zt1sz zt1t2r z2t1udv z2t1ug z2t1ura z2t1uru ztus3s zt1u2tat z2t1utu z2t1új z2t1úr. z2t1úrb z2t1ú2ré z2t1úrh z2t1ú2ri z2t1úrk z2t1úrn z2t1ú2ro z2t1úrr z2t1úrt z2t1üg ztü2lé z2t1ülés ztül1l z2t1üt z2t1ü2v zt1ü2zem z2t1űr. z2t1ű2ri z2tye 1zu zu2b1a 3zubb zu2b1i zu2bu zu2c3s 3zug. zu2gag zu2gap zu2gáru zu2g1ás 3zugb zu2g1e2 zu2gé zu2gin zu2git zu2giv zu2gí 3zugo zu2g1or zu2gö zu2gü zu2gű 3zuha zule2 zu2lel zu2l1enc zu2l1es zuli2ná zu2lú zulya2 zu2ly1ag zu2mab zu2m1a2d zu2maj zu2mal zu2mar zu2m1as zume2 zumegyez1 zu2mel zu2m1en zu2mél zu2m1é2n zu2m1id zu2m1in zu2m1i2p zu2mí zumkész1 zu2mol zu2mő zu2mur zu2mü 2zund z1undo zu2ne zu2n1é 2zuni zu2n1ö2 zu2ral zu2ram zurat2 2z1urn zu2rú zu2sad zus1aka zu2sal zusa2n zus1any zu2sas zu2s1ág zu2s1e2 zu2s1érté zu2sis zu2s1í zuskész1 zu2s1ol zu2s1ó2 zu2ső zuss2 zussz2 zus3sze zus3szi zust2 zus1tr zu2s1ü2 zu2sz1i2k zu2szon zu2s3zó 2z1u2ta z1u2tá 2z1utc zu2tol zu2tó. zu2tób zu2tói zu2tój zu2tón z1u2tu 1zú zú1dr zú1fl 3zúgá z1újd z1ú2jé z1ú2jí z1újs zú2r1e2 zúré2t z1ú2szás zú2té. z1ú2tér z1úth z1úti zú2ti. zú2tiak. 3z2útiaka zú2tiakr zú2tib zú2tig zú2tih zú2tin zú2tiv z1ú2tí z1útj z1útn z1ú2ton z1útró z1útt zú2tü z1útv 3zúzá 3zúzd 3zúzó 1zü zü2dü zügy1és z1ügyk z1üldö z1ü2lep z1ü2lőseb z1ü2lőset zü2ni 2zünn zü2rí z1ü2rü z1ü2te z1ü2té z1ütk z1ü2tő zü2ve zü2vö zü2zen z1üzl 1zű zű2csa zű2csá zű2csip zű2cs1o zű2ra zű2rá zűrés3s zű2r1i2z z1űrla zű2ró zű2ru zű2z1a2 zű2z1á zű2ze zűzé2r zű2z1ére zű2zo z1ű2ző zű2zs zű2zú zva2su zvárosé2 zváro2s1om zve2gya zvé2nyel z2vit. zvi2tác z2vitj zy1ak z1yar zy2be zy2je zy2ne zy2né zy2re zy2rő zy2sa zy2so zy2tő zy2ve z2z1áll zzá2r1ó2r zzát2 zzá1tr zzi2n1é2 zz2le zz1ly z2zs z3zsák z3zsám z3zsi z3zsí z3zso", ["length"]=528089, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=62851, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ro.rme0000644000175000017500000001167511761001300024662 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Romanian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: rohyphen.tex (1996-11-11) % Author: Adrian Rezus % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% ROHYPHEN.TEX, version 1.1 <29.10.1996> R [7.11.1996] %% %% (C) 1995-1996 Adrian Rezus [adriaan@{sci,cs}.kun.nl] %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Romanian TeX hyphenation table: NFSS 2 encoding, medium. %% Contents: 647 Romanian hyphen patterns, with diacritics. %% %% This file is part of the Romanian TeX system. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Romanian TeX, version 1.3R <29.10.1996> %% %% (C) 1994-1996 Adrian Rezus %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% History: %% ROHYPHEN.TEX 1.0 <10.02.1995>: Plain TeX and LaTeX 2.09. %% ROHYPHEN.TEX 1.1 <29.10.1996>: Plain TeX and LaTeX2e. % % ------------------------------------------------------------------- % TODO: fix the notice below - it only holds for the old patterns % NB This file must be used in conjunction with either one of % % (1) ROMANIAN.TEX v1.2(R) [1994-1995] [(La)TeX] or % (2) ROMANIAN.STY v1.3R [1996] [(La)TeX(2e)] % % NB Romanian has LR-HYPHEN-MINs [2 2] (like German)! % NB Romanian has STRUCTURAL HYPHEN-AMBIGUA: % i.e., words that canNOT be hyphenated correctly without % additional (e.g., semantic, stress-mark) information. % -------------------------------------------------------- % The Romanian TeX encoding of the Romanian diacritics: % -------------------------------------------------------- % Romanian TeX DQ-macro encodings = (La)TeX macros % -------------------------------------------------------- % ă = \u{a} [-] \u{A} [not encoded] % â = \^{a} [-] \^{A} [not encoded] % î = \^{\i} "I = \^{I} % ș = \c{s} "S = \c{S} % ț = \c{t} "T = \c{T} % ------------------------------------------------------------- % NB Romanian \^{a} behaves like \^{\i} as regards hyphenation. % NB The capital \u{A} and \^{A} are rare in script; as such, % they occur only in records of the Romanian substandard. % ------------------------------------------------------------------- % % original patterns generated by PatGen2-output hyphen-level 9: do NOT modify the list by hand! % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-th.lua0000644000175000017500000015232312161703335024663 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="th", ["source"]="hyph-th", ["texcomment"]="% Thai hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Thai hyphenation patterns\ %\ % Copyright 2012-2013 Theppitak Karoonboonyanan \ %\ % This work may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either version 1.3\ % of this license or (at your option) any later version.\ % The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ % and version 1.3 or later is part of all distributions of LaTeX\ % version 2005/12/01 or later.\ %\ % This work has the LPPL maintenance status `maintained'.\ %\ % The Current Maintainer of this work is Theppitak Karoonboonyanan.\ %\ % http://linux.thai.net/projects/thailatex\ % http://linux.thai.net/svn/software/thailatex/trunk\ %\ % ", }, ["patterns"]={ ["characters"]="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮะัาำิีึืฺุูเแโใไๅ็่้๊๋์ํ๎", ["data"]=".ชี5วั .ทัศนู5 .ที่3 .บท1 .รง4 .ราย3 .ลำ3 .สน5ท .สู3ต .ใบ3 2ก1ก ก4กม กก4ส 2ก1ข ก4ขค กข5คณ ก4ขช กข5ชา ก4ขณ ก5ขณะ ก5ขณา ก4ขบ กข5บุ ก4ขภ กข5ภั ก4ขม ก5ขมั กข5มา กข5มู กข5ลา ก4ขเ กข5เท กข5เว ก4ข์ ก1ค กง5บว ก1จ ก1ช 2กซ ก3ซิ กญ5จน กฎ5หม กฎ5เก กฏ5หม ก5ดิน ก1ต ก4ตด กต5ดิ ก4ตส ก4ตเ ก1ท ก1น ก4นด ก4นธ ก1บ ก1ป กป4ร ก1พ ก1ฟ ก1ม ก4มม กม5ลา ก4มส ก4มเ กย5มุ ก3ย้ กร5กฎ ก5ร5ณั กร5ต๋ 1ก4รร กร5รา กร5ลา ก5ราค ก4รู กร5ไฟ กล5นค กล5บิ กล5มห ก2ว ก5วัต ก5ษณน ก3ษณะ ก5ษณา ก5ษมา ก5ษมี กษ5เท ก1ส กส4น ก4สโ ก1ห 3กอน กอ5อิ กะ5ถั กะ5ผล 4กะร 1กั 1กา กา5กะ กา5ดู กา5นี กา5น้ กา5บอ กา5ฝา กา5ร่ กำ5ด้ กำ5ทอ กำ5ผล กิ5กะ 1กิจ กิ4ต กิ5นี 3กิริ กี5รณ กี5รต กี5สถ 1กุ กุ5งอ กุ5ชิ กุ5ฎุ กุ5มุ กุ5รร กุ5ลี กุ5แห 1กู กู5ปร กู5รข กู5รม กู5ลิ ก1เ ก1แ ก1โ ก1ไ ก่5กอ ก่5บ้ ก่5ป่ ก์5ท็ ข2 ขม5หิ 4ขลา ขอ5ขม ขอ5ง้ ขอ5อภ 1ขั 1ขา ขา5ก๊ ขา5ทน ขิ5ปส ขิ5ไณ ขี้1 ข่5มุ ข่5หง ข้าว3 ค1ค คช5สี คช5เช คช5เม ค4ณิ ค4ทร คท5รี คท5วอ คน5ยอ 4คนิ คป5ซู คป5ผก 3คมน คม5ฟร คม5ลอ 2คย คร5ซอ คร5นอ คร5นี คร5พน คร5ฟิ คร5มเ คร5ร้ คร5ลิ คร5หา 4ค5รัก คฤ5หบ คฤ5หา คฤ5โฆ คล5คู ค2ว คว5ทอ 3ควา 2คส คส5ติ คห5กร คห5นิ คห5บด คห5สถ 3คอน 3คัน 1คา คา5ปู คา5พจ คา5พย คา5รว คา5วจ คำ5ดี คำ5โอ คำ5ไก คี5รี 1คุ คุ5ณู คุ5ลี 4คุ์ คู5ปอ คู5ลอ 2ค1เ ค1โ 2ค์ ค์5จำ 1ฆา ฆา5ณั ฆี5ยก ง1ก ง4กห งกะ4ร ง4กเ ง4ก์ ง1ข ง4ขก ง4ขต ง1ค ง4คจ ง4คช ง4คญ ง4คธ ง4คบ ง4คป งค5วั ง4คศ ง4คโ งฆ5ปร งฆ5สภ งฆ5เถ งฆ5เภ ง1ง ง4งเ ง1จ ง1ฉ ง1ช ง4ชี ง1ซ ง1ด ง1ต ง1ท ง1น งบ5ดุ ง1ป ง1ผ ง1พ ง1ม ง1ย ง1ร ง1ล ง1ว ง4วเ ง1ส งส5กล งส5กุ ง4สบ ง4สพ งส5พย ง4สภ ง1ห งห5นา ง4หบ งห5บั งห5รา 1งา งา5ช้ งา5รำ งู5สว ง1เ ง1แ ง1โ ง1ไ ง่5งอ จ1จ จ4จว จ1ฉ จด5จ่ จต5จำ จต5มู จป4ก จมบ5พ 3จริ จอ5งอ 1จั 1จา จา5มร จา5มี จา5รึ จำ5ทว จำ5อว 1จิ จิ5จู จิ5ตอ จี5ดี จุ5ฑา จุ5สม จ1เ ฉ2 ฉก5ฉว ฉก4ษ ฉท5ทิ ฉร5ฉิ 1ฉั 1ฉา ฉา5ก๊ ฉา5พย ช1ช ช1ฌ ช4ฌก ช4ฌฆ ช5นีก 4ชน์ ชฟ5รอ ชฟ5โร ชร5กล ชร5ริ ชร5ฤก ชร5หล ชร5หึ ชว4โ ชอง4 1ชั 1ชา ชา2ต ชา5ตร ชา5ปี ชา5มต ชา5ยต ชา5สง ชำ5งั 3ชิต ชิ5นี ชิ5รณ ชิ5แก ชี5ผะ ชี5ผ้ ชี5ฟอ ชี5รณ 3ชีว ชี5วน ชุ5ติ ชุ5ลด ชู5ปก ชู5ปถ ชู5ปโ ช่5อิ ช้5สอ ช้5ได ซน5ทร ซฟ5ตี ซ5ราม ซล5มอ 1ซา ซา5ชู ซา5มู ซิ5ตร ซิ5ตี ซิ5ฟิ ซิ5แล ซี5ดี ซี5นี ซี5รา ซี5ริ ซี5รี ซี5ร็ ซี5ลี ซู5ซู ซู5บิ ซู5ริ ซู5ลิ ซ1เ ซ1โ ซ่5ง่ ซ่5ซ้ 1ซ่า ญจ5ดุ ญ4จน ญ5จ5นท ญ5จ5นบ ญ5จนา ญจ5บร ญ5จ5มบ ญจ5รง ญจ5วี ญจ5ศี ญ4ฉน ญ1ช ญ1ญ ญประ4 1ญา ญา4ต ญ่5บ้ ฏ1ฐ ฏ4ฐบ ฏิ5ทิ ฏิ5ปท ฏิ5ปุ ฏิ5สน ฏิ5สว ฐ4ภั ฐม5ฌา ฐม5พย ฐม5ฤก 1ฐา ฐา5นี ฐุ5ชุ ฑา5มณ ฑา5สถ 3ฑูร ฒิ5สภ ฒิ5สม ณ1ฑ ณ4ฑก ณ4ฑฆ ณ4ฑน ณ5ฑนะ ณ4ฑบ ณ4ฑม ณฑ5ลา ณ4ฑส ณ5ฑสก ณฑ5สถ ณ5ฑ5สี ณฑ5โล ณ4ฑ์ ณย5รั ณ1ร ณ4วา ณสม4 ณห5พล ณห5ภู 1ณา ณา5ปี 1ณิ 1ณี ณี5สง ณู5ปโ ด1ก ด4กง ด4กด ดก5ดื ด4กเ ด4กแ ด1ข ด1ค ดง4ค ดง5ออ ด1ช ด4ชน ด5ชนะ ด1ด ด4ดเ ด1ต ด1ท ด1ป ด1พ ดร5ลิ ด3ร้ ด1ส ด4สก ด1ห 1ดั ดัส5ต 1ดา ดา5กอ ดา5มุ ดา5รก ดา5สว ดำ5ฤษ ดิ5ทอ ดิ5ทิ ดิ4บ ดิ5วร ดิ5ศว ดี5ดี 3ดีน ดี5ฝ่ ดี5รอ ดี5ลิ ดี5วี ดี5หม ดี5หว ดู5ถู ดู5ปอ ดู5รั ดู5หม ดู5แค ด1เ ด1แ ด1โ ด้5ยิ 2ด์ ด์5สป 2ตก ตก5ร้ ต1ค 2ต1ช 2ต1ต ต4ตภ ต4ตส ต4ตโ ต5ถกะ ต3ถา ต5ถุป ต5ถุศ ตถ5เล ตทัศนูป5 2ตน ตน5ฟอ ตน5วร ต4นาธ 2ต1บ ต4บช ตบ5ชว ตป5นี ต1ภ 2ตย 4ตรก ตร5กิ ตร5งอ ตร5จี ตร5จุ 4ตรฐ ตร5ตร ตร5ทว ตร5ผล ตร5ฝร ตร5พล ตร5รง ตร5ลด ต5ริยา ต4รู 2ตร์ ตฤ5ตี ตล5รั ต1ส ต4สค ตส5วา ตส4เ ต4สแ ตส5แต ตอ5ม่ ตอ5รอ ตะ5ใภ 1ตั 1ตา ตา5กล ตา5กว ตา5นึ ตา5ปร ตา5ปล ตา5ผิ ตา5ฟู ตา3มห ตา5มอ ตา5มะ ตา5ฬี 3ติก. ติ5จู ติ5ช่ ติ5ทิ ติ5นร ติ5บอ ติ5มศ ติ5มส ติ5มอ ติ5ยม ติ5อิ 4ติ์ ตี5ขล ตี5คู ตี5ตื ตี5รว ตี5ลั ตุ5ตถ ตุ5ทส ตุ5ป่ ตุ5มห ตุ5รก ตุ5ลั ตุ5สด ตู5ดิ ต1เ ต3แล ต1โ ต่5ถา ต่5ว่ ต่5สว ต้5ก๋ ต้5ตอ ต้5ฝุ ต๋5เต ต์5คล ต์5ฟู ต์5ศต ถด5ถอ ถม5ถื ถล5ไถ ถว5ไม ถะ5ถั ถ4าธ ถา5วร ถ4ีย ถี5ลิ 3ถุน ถ่5ถอ ถ่5ถา ทก5ซั 4ทกา ทค5ติ ทค5นี ทด5รอ ทด5ลอ ทธ5คย ท5ธชะ ทธ5ฎี ทธ5ปฏ ทธ5พร ทธ5รั ทธ5ศต ทธ5สี ทธ5อง ท5ธิก ท5ธิช ท5ธิบ ท5ธิป ท5ธิผ ท5ธิพ ท5ธิภ ท5ธิร ท5ธิฤ ท5ธิศ ท5ธิโ ทธ5เจ ทพ5ธิ ทพ5ยุ ทฟ5ลอ 2ทย ท5ยาน ทร5คต ทร5คร ทร5ธน 3ทรร ทร5สโ ทร5หว ทร5หึ 1ทรา ท5ราก 4ท5ราห 1ทรี ทว5ทห ทว5สถ ทศ5ทิ ทศ5วร ทสน5ท ทส5โก ทห5วั ทห5ฬิ 1ทั 1ทา ทา5ฐิ ทา5ฒิ ทา5นอ ทา5มร ทา5รพ ทำ5ขว ทำ5ซ้ ทำ5ท่ ทำ5โท ทิ5ฆั ทิ5ฐิ ทิ4พ ทิ5พา ทิ5วง ที5นว ที5นี ที5รา ทุ5คต ทุ5ลั ทุ5ศี 1ทู ทู5น่ ท1เ ท์5ดอ 1ธร 4ธรส 4ธรั 1ธา ธา1รณ ธิ5ฤท ธิ5ศี ธิ5สม ธี5รี ธุ5ดง ธุ5ลี ธู5ปน น1ก น4กค น4กป นก5ยู นก5รู น1ข นข5ลิ น1ค นค5ริ น1จ น4จอ นจ5อน น1ช น4ชญ น1ซ น1ด น4ดร น1ต นต5กว น5ตกะ นต5ดิ น4ตท นต5ทิ นต5ปิ น4ตภ น5ตระ น5ตรั น3ตรา น5ต5ริ นต5ฤด น3ติ น5ตุก น5ตุฏ น4ต์ นถ5ธุ นถ5รจ นท5ขี นท5นน น5ทนะ นท5ผล นท4ย น5ทรง น5ทรล น5ทรั น5ทรุ นท5ฤก น5ทลา น5ทวย น3ทอ น1ทิ น3ที นธ5กร น5ธกะ น5ธนะ น5ธุก น5ธุร น5ธุว น5ธุศ นธ5ไม น1น น4นต น4นท น4นร นน5รา น1บ นบ5นอ น1ป น4ปจ นป5จู น4ปท น1พ นพ5ปฎ นพ5ศู นภ5ศู น5ยนต นฤ5คห นฤ5ปเ นฤ5เท นฤ5เบ น1ล น4ลล นว5ร่ น1ศ นษ5กร น1ส น4สซ น4สส นส5แด น4สโ น1ห นอ5กะ 3นอน 1นั 1นา นา4คร นา5ณั นา5ปร นา5รย นา5วต นา5วล นา5สณ นา5สน นา5สว นา5ฬิ 4นาะ 1นิ นิ5ด้ นิ5ฟอ นิ5มน นิ5ยม นิ5ยา นิ5รอ นิ5ลุ นิ5วร นิ5สง นิ5สถ นิ5สี นิ5แด นี5มี นี5มู 1นุ นุ5พย 1นู 2น1เ น1แ น1โ น1ไ น่5อี 3น้อ 1น้ำ น์5สไ บ1ก บ4กษ บกิส5 บ4กแ บ1ข บ1ค บ4คท บค5ที บ4คโ 1บดี บ1ท บบ5ฉบ บบ5ฝึ บบ5อย บ1ป บ1พ บร5มี บ1ส บ4สบ บส4เ บ1ห บอ5ดี บอ5ระ 3บอล 1บั บัพพาชนี5 1บา บาจ5ร บา4ต บา5ตอ บา2ท บา5ทา บา5ทุ บา5รน บา5รอ บา5สม บี5คิ บี5ร่ 1บุ บุค3 บุ5ตร บุ5ถุ บุ5รพ 1บู บู4ช5น บู5ติ บ1เ บ1แ บ1โ บ๊5จี บ๊5เบ ปก4ส ป4จั ป4จา ปฐ5ปท ปฐ5พี ปต5ถก ปต5พล ป4ทา ป1ป ป4ปเ ปม5ด้ ป4ยุ ปร5ตอ ปร5ตี ปร5ตุ ปร5ผั ปร5ษณ 1ประ ปร5แก ปร5แท ปล5ญว ป4วา ปส4ต 1ปั 1ปา ปา5ฐก ปา5ณก ปา5นี ปา5ปิ ปาร4 ปา5รเ ปิ5ดอ ปิ5ยภ ปิ5ยอ ปิ5หก ปี5ชี ปี5มะ ปี5ฬก ปี่3 ปุ5คล ปุ5ถุ ปู5จ๋ ปู5ติ ป1เ ป1ไ ผก5ผั ผณิ5ศ ผน5ผั ผ4นิ ผ4ยา ผล5พล ผล5ไม ผ4สา ผี5ดิ ผี5ตอ ผี5ถ้ ผี5ห่ ผ้า3 3ฝอย ฝี5มะ ฝ่5ฝั 3พจน พจ5นี พช5ฉล พช5รา พทัก4 พน5ทะ พ4นั พนิ4 พ1พ 2พ2ย พย5ก๊ พร5ชย พร5ซี พร5มี 1พรร พ4รู 3พฤก พฤ5ฒา พล5ทิ พล5ร่ พส5เฟ พอ5คว พอ5สม 1พั 1พา 4พาจ พา5ชน พา5นร 1พิ พิ5ถั พิ5ถี พิ5ปล พิ5รอ พิ5รี พิ5ลึ พิ5ศุ พิส5ม พี5ระ พุ5ชิ พุ5พอ พู5ทว พู5พอ พ1เ พ4เย พ่5ป๊ พ่อ3 พ้5ท้ 2พ์ พ์5ดี 1ฟั 1ฟา ฟิ4ลา ฟี5ฟ่ ฟู5ฟ่ ฟ1เ 1ฟ้ ภค5ทร ภค3ว ภช5นี 1ภั 1ภา ภา5ณก ภา5ณว ภา5รด ภา5รต ภา5รย ภา5วน ภิ5ชน ภิ5มห ภิ3ร ภิ5สม ภิ5ไธ ภุ5ชง 1ภู ภู5ฏา ภู5ริ ม1ก ม4กม ม4กษ ม1ข ม4ขล ม1ค ม4คค ม4คอ มค5อิ 1มงคล มง5ฟอ ม1จ ม1ช มช4ว ม1ซ 3มณฑ มณ5ฑน มณ5บร มณ5พร มณ5เฑ มด5ยอ มด5ลู ม1ต ม4ตธ ม4ติ ม4ตไ มต5ไต ม1ท 3มนตร มน5ฮั ม4นุ ม1บ มบ4พ ม1ป มป4ช มป5ฤด มป5ฤๅ ม4ป์ ม1พ ม4พก ม4พว ม1ภ มภ5กถ ม1ม ม4มเ ม4มโ มย5รา 3มรร ม3รั ม3ริ มฤ5คิ มฤ5เค มล5ทิ ม3ลิ ม3ล้ ม1ว มว5มอ ม4วล ม1ส มส4เ มห5กร ม3หน มห5ภา ม5หาญ ม5หาย มหา3ส มอ5ขว มอ5คร มอ5ดู มอ5ตำ มอ5นว มอ5นอ มอ5ระ 4มอั มะ5ถั มะ5ฝ่ มะ5ฮอ 1มั ม4ั่ 1มา มา4ก มา5ดร มา5นร มา5ป่ มา5พจ มา5มก มา5มุ มา5ม่ มา5ยณ มา5ยอ มา5ร่ มา3ว4 1มิ มิ5กภ มิ5ชิ มิ5ซร มิ5ตล มิ5ถิ มิ5น่ มิ5ฟล มิ5ลำ มิ5แพ มี5ขม มี5หน 3มืด 1มือ. มุ5ทะ มุ5ทั มุ5ทิ มุ5ทุ มุ5ฮั มู5ซี มู5ป่ มู5รต มู5ลิ มู5หย มู5หร มู5ฮั มู5แด มู5แผ มู5แฮ ม1เ ม1แ ม1โ ม1ไ ม4่า 3ม้า ม์5ภิ ยก5ย่ ย1กร ย4ก5ร้ ย1ค ยง5บ่ ยง5ฝ้ ยง5อย ยจ5คร ยด5ย้ ย1ต ย1ท ย1ธ ยบ5ร้ ย1ป ย1พ ย1ภ ยม5ยอ ยม5รา ยม5หา ยม5อี ย4มิ ย1ย ยย4ส ยร5ถี ย5รบั ยล5ไท ยว5ข้ ยว5จ๊ ยว5ดอ ยว5นี ยว5ย่ ยว5รั ยว5ไส ย1ศ ย1ส ย1ห ย4หฐ ยห5ฐา ย4หป ยห5ปร ยอ5บี ยอ5รม 1ยั 1ยา ยา5กฤ ยา5กว ยา5ฉุ ยา5ณม ยา5ณว ยา5ถ่ ยา5บร ยา5สล ยา5สี ยา5ฬั ยำ5ทว ยี5รา 1ยุ ยุ5คล ยุ5ตก 4ยุภ ยุ5แย ยุ5แห ยู5ถิ ยู5ฟ่ ยู5ริ ยู5ไน ย1เ ย1แ ย1โ ย์5กล ย์5ถ่ ย์5มน ย์5หน 2รก รก5ซอ รก5ซึ รก5ซ้ ร1กร รก5รา รก5ร้ รค5พว รง5พย รง5รอ รจ5ถร รณ5คด รณ5ตร รณ5ถั รณ5พฤ รณ5สถ ร5ณาญ รณู5ป 4รณ์ ร1ด ร4ดป ร4ดแ ร4ดโ ร4ดไ รด5ไอ รถ1 รถ5พย ร1ท ร4ทฤ รท5ฤด ร4ท4ว รท5วิ รธ5ขึ รธ5สร รธ5เก รน5ทุ 4รนา ร1บ ร4บค ร4บถ รบ5ถ้ ร4บม ร4บั ร4บไ รบ5ไก ร1ป ร4ปณ ร5พชา ร5พชิ รพ5ทิ ร1ภ ร4ภย รม5รอ รมาว5 รม4เห ร4ยั รร4ก รร5คา รร5จถ รร5จว รร5ชิ รร5ณึ รร5ถา รร5ยง รร5ยเ รร3ล รร5หา รร5แท รร5แส รร5ไก รร5ไต รศ5นี รษ5ตร ร1ส ร4สก ร4สช ร4สเ ร4สโ ร3หิ ระ1 ระ5สา ระ5หก 5รังส 3รัฐ 1รัต รา5กฏ รา5กฤ รา5กว 1ราช รา5ชู รา5ดร รา5ดว รา5ดู รา5ม่ รา5วณ รา5สง รา2ห รา5หุ รำ5งั รำ5จว ริ5ซึ ริ5ตร ริ5ทึ 4ริพ ริ5มน 4ริยจ 4ริยย 4ริร ริ5อ่ ริ5แล 4ริ่ รี5คู รี5ฑา รี5ดู รี5ตร รี5ตอ รี5มู รี5รั รี5รา รี5ริ รี5ลั รี5ลิ รี5ล่ รี5สอ รี5สะ รุ5กว รุ5ขร รุ5คร รุ5ทว รุ5ธิ รุ5มุ รุ5วน 1รู รู5ที รู5นี รู5บิ รูป5ก รู5ปิ รู5มา รู5มู รู5หร 2ร1เ ร1โ ร่5กะ ร่5ตร ร่5ร่ ร่5หล ร์5กิ ร์5กี ร์5ติ ร์5ตี ร์5ตู ร์5ทิ ร์5ฟอ ร์5ฟู ร์5ลี ร์5วอ ฤ4ดา ฤป4เ ฤษ5ฎี ฤห5บด ล5กนะ ลก5ลา ลก5วั ล3กอ ล4กัย ลข5คณ ลข5หม ลชี4 ลด5ระ ลด5ลิ ล4ดา ล1ต ล4ตฟ ลต5ฟอ ลบ5ตะ ลบ5มุ ลบ5ล้ ลบ5ไส ลป5ตอ ลม5งว 2ลย ล1ล ล4ล์ ล3วี ลว5ไห ลส5ไต ลห5กุ ลอก5ล ลอ5จี ลอ5สร ละ5ผล 1ลักษ ลา5กล ลา5นี ลา5ป๋ ลา5พอ ลา5มี 3ลาร ลา5รอ ลา5ร้ ลา5ฤก ลา5ส้ ลิ5ก่ ลิ5จู ลิ5ซึ ลิ5ตอ ลิ5นอ ลิ5น่ ลิ4บ ลิ5บา ลิ5ฟอ ลิ5มู ลิ5อิ ลิ5ไท ลิ5ไล ลี5ตะ 3ลีน ลี5ผล ลี5ลา ลี5วู ลุก5ร ลุก5ล ลุ5ล่ ลูก1 ลู5ที ลู5มิ ลู5ลอ ลู5ออ 2ล1เ 2ล1แ ล1โ ล่5ติ ล่5ที ล่5หล ล่5ออ ล้5โพ ล์5สต ว3กร วก5ว่ ว5การ ว1ค 1วงศ วจ5ตร วจ5สอ วช5นี วด5ถ่ วด5มว วด5ยิ วด5ระ วด5ลา วด5ล้ วด5อ้ ว1ต ว4ตฉ วน5ถี วน5ท้ วน5ผส วน5รว วน5ร่ วน5อิ วบ5ยอ วบ5รว วบ5รั วบ5ฮา ว1ป ว1พ วม5รอ ว3มู วย5กิ วย5ก้ วย5จี วย5ริ วย5รื วย5ล้ วย5ไท วย5ไม วร5ธิ วร5มณ วร5มห ว4รย 1วรร4 ว4ร์ วล5ระ ว1ห วอ5ชิ 1วั วัน3 วันต5 วันท4 1วา วา4ต วา5ตก วา5ติ วา5นร วา5นึ วา5บร วา5มน วา5รณ วา5สนะ วา4ห วา5หน วา5หิ 1วิ วิ5กล วิ5กส วิ5คห วิ5จุ วิ5ดี วิ5ตก วิ5ตร วิ5ตี วิ5ถี 3วิท วิ5ทิ วิ5ธุ วิ5ธู วิ5ปก วิ5ปฏ วิ5ปล วิ5ปว วิภู5 วิ5มล วิ5รง วิ5วร วิ5ศร วิ5ศุ วิ5ษุ วิ5สร วิ5สฤ วิเล5 วิ5ไล วี5คู วี5ชน วี5ดิ 1วุ ว1เ ว1แ ว1โ ว่5ห้ ว้5ชื ว้5ทุ ว้5ลา ว์5ลิ ศ1จ ศพิ4 3ศรี ศ2วร ศษ5ซ้ ศษ5เก ศษ5เห 1ศั ศัก5ร 1ศา2 ศา5กา ศา5ขบ ศา5นุ ศา5ภิ ศา5รย ศา5รั ศา5ริ ศา5ลา 1ศิ ศิ5รพ ศิ5รว ศิ5ศี 1ศึ ศุ5กล ศู5ลิ ศเจ5ร ษ3ฎา ษฐ5ภค ษ5มณี ษ4มา 1ษั 1ษา ษา5คเ 1ษิ ษ์5พย สก5ลิ สก5ลึ สก5วั สก5วา ส4กา 4ส4กุ สข5บุ สง5ขล ส1ซ ส5ดิก ส5ดิน ส5ดิภ ส5ดิม สต5ทิ ส3ตรา 2สต์ สถ5วี 4สถ์ สน5ธย สน5ธิ ส5นียะ ส4นุ สนูป5 ส4ปา สพ5ติ ส2ม สม5ดุ 3สมบ สม5ผส สม5ผุ สม5ผเ สม5ยอ สม5ฤด สม5ฤต สม5หว ส5มัท ส5มัน สมุ4 สรร5ช สร5ลอ สล5บร สว4ก สว5ยม ส4วร สว5ริ ส4วา 4สวิ ส1ส สห5กร สห5กา สห5ชา สห5ธร สห5ปร สห5พั สห5ภา สห5รา สห5ศึ สอ5พล สอ5พอ สะ5ใภ 1สั สัญประ5 สัน3ถ สัม3 1สา สา5กิ สา5คเ 4สาธ สา5นึ สา5มน สา5มี สา5วพ สำ5ออ สำ5โร 1สิ สิ5ถิ สี5ข้ สี5ชอ สี5ดว สี5ตล สี5ตโ สี5ถ่ สี5ผึ สี5ฝุ สี5ละ สี5ลั สี5วล 1สุ สุ5กร สุ5กำ สุ5กี สุ5ขิ สุ5ขุ สุ5คต สุ5คร สุ5นี สุ5บร สุ5บิ สุ5ปร สุ5มน สุ5สง สุ5ไห 2สุ์ 1สู ส1เ ส4เฟ ส1โ ส4โก ส4โค 3ส่ว ส่5ไค ส้5กร ส้5ติ ส้5ไก 2ส์ ส์5หย ห2 2ห1ก หก5ระ หก5ล้ 5หการ หง4ส หง5สา หฤ5หร หฤ5โห หล5สะ หอ5คอ หอ5สม 1หั หา5กฐ หา5บพ หา5ปณ หา5พร หา5รื หา5ฤก หิ5รก หิ5ศว หุ5คู หู5กร หู5กว หู5หน ห้5ท่ ห้5ท้ ห้5ร้ 2ห์ ห์5กร ห์5สน ฬว5รา ฬห5บู 1ฬา ฬา5มณ ฬา5รึ อก5ซอ อก5ซั อก5ถล อก5รณ อก5รี อก5รู อก5ร่ อก5ฤท อก5ลว อก5ลอ อก5ลา อก5ล่ อก5ว่ อก5ใบ อค5ที อฆ5สง อง4คม อง5ถิ อง5บร อง5บิ อง5ฟอ อง5ฟุ อง5ระ อง5อ้ อด5ถอ อด5น่ อด5ฝา อด5ยอ อด5รั อด5อย อด5ออ อด5อ้ อ3ดิ อต5ดอ อต5ด็ อ1ท อน5ง้ อน5ดร อน5ทำ อน5ผั อน5ฝู อน5ฟิ อน5ย้ อน5รา อ4นา อ4นุ1 อบ5ช้ อบ5ถา อบ5บี อบ5อว อบ5อ้ อบ5ไล อป5กิ อป5ติ อป5พร อป5พล อป4ร อป5วา อป5โล อพ5ริ อฟ5ฟิ อฟ5ฟี อฟ5ริ อฟ5ไล อ4ภั อม5ฎอ อม5ดอ อม5ถอ อม5ยิ อม5รา อม5ร่ อม5ฤต อม5หล อม5หว อม5ห้ อ5มอน อย5กอ อย5ก๋ อย5นว อย5ร่ อย5ร้ อย5อิ อ4ยา อย5ได อร5ชุ อร5มน อ3รั อ3รา อ1ริ อ1รี อ3ร้ อร์1 อล5จี อล5ซั อล5นี อล5ฟ่ อล5มอ อล5หม อ3ลั อ1ลิ อว5รุ อศ5กร อษ5ฐช อษ5ฐภ อส5กา อส5ติ อส5นี อส5พล อส5ฟอ อส5มิ อส5เฟ อส5แอ อส5ไพ อ1ห 3ออน ออ5อว อะ5ธี 1อั 1อา อา5ค5เ อา5ฏา อา5ณั อา5ดุ อา5ดู อา2ต อา5ถร อา5นน อา5ปณ อา5มล อา5ย5ต อา5รด อา5รต อา5รบ อา3รย อา5ลป อา5วร อา5วี อา5สว อำ5ยว อำ5อว อิ5ชย อิ5ดะ อิ5ระ อิ5ศว อี5จู อี5ซู อี5ยิ อี5รุ อี5ลุ อี5ศว อี5หร 1อุ อุ5กฤ อุ5กล อุ5คร อุ5ดม อุ5ดร อุ5ด้ อุ3ตรา อุ5ตุ อุ5ทร อุ5ทิ อุ5ทุ อุ5ธั อุ5บล อุ5บ๊ อุ5มง อุ5รพ อุ5ลก อุ5แว อู5คู อู5รา อู5ลา อ1เ อเป5ร อเสก5 อเส5ข อเห5ต อ1แ อ1โ อโร3 อ1ไ 3อ่อ อ่5อว อ่5อ่ อ่5โถ อ้5อว อ้5โถ อ้5โล ฮก5ฮา ฮก5ฮื ฮน5รี ฮฟ5วี ฮล5ซิ ฮล5ดิ 3ฮอล ฮา5นอ ฮา5ป่ ฮิ5บร ฮี5บร 3ฮื้ ฮู5ลา ฮู5ล่ ฮ1เ ฮ่5กึ ะ1ก ะ1ข ะ1ค ะ1ง ะ1จ ะ1ฉ ะ1ช ะ1ซ ะ1ด ะ1ต ะตะ4 ะ1ท ะ1น ะ1บ ะ1ป ะผี4 ะ1พ ะ1ม ะ1ย ะ1ร ะ1ล ะ1ว ะ1ส ะ1ห ะ1อ ะ1เ ะ1แ ะ1โ ะ1ไ ั2 ัก5ง่ ัก5ซ้ ัก5ตบ ัก5ผ่ ัก5ฝ่ ัก5ยอ ัก5ยิ ัก5รั ัก5ร้ ัก3ล ัก5วิ ัก5ษร ัก5อิ ัก5อี ัก5อ่ ัก5ใค ัก5ใฝ ัค5ฆิ ัค5ซี ัค5สถ ัง5ถึ ัง5ศุ ัง4ส5ว ัง5อว ัง5ฮี ัจ5กล ัจ5ญะ ัจ5ถร ัจ5นึ ัจ5โจ ัช5ฎา ัช5นี ัช5พย ัช5พื ัช5รา ัช5ริ ัช5สม ัช5เร ัช5แพ ัช5โญ ัญ1 ัฏ5ทุ ัฏ5สง ัฐ5ทิ ัฐ5บร ัฐ5สภ ัฐ5เค ัณ5ฏก ัณ3ฐ ัณ5ยก ัณ5เฑ ัณ5โร ัด1 ัต5ดึ ัต5ถล ัต5ถั ัต5ถิ ัต5มณ ัต5มห ัต5รา ัต5รี ัต5ฤก ัต5ลั ัต5หล ัต5หี ัท5คี ัท5ทว ัท5ธน ัท5ธิ ัท5รา ัท5ลี ัท5ลุ ัธ5ยม ัน5ฉ่ ัน2ต ัน5ตภ ัน5ตะ ัน5ตั ัน5ตา ัน5ถธ ัน5ทึ ัน5ทุ ัน5ท่ ัน4ธ ัน5ธา ัน5ธิ ัน5ผว ัน5ฝร ัน5ฝ่ ัน5ภิ ัน5ยะ ัน5ย่ ับ1 ัป5คั ัป5ผา ัป4ร ัป5ลา ัป5หง ัป5โป ัป5โห ัพ5ยอ ัพ5ยา ัพ5โพ ัพ5โห ัฟ5ฟิ ัฟ5ริ ัม4ช ัม5ลา ัม5หม ัย5มร ัย5รุ ัล5ดี ัล5ปน ัล5ปพ ัล5ปิ ัล5ฟิ ัล5มอ ัล5มุ ัล5ออ ัล5ไซ ัล5ไฟ ัว1 ัศ5นี ัศ5มี ัศ5เจ ัส5กา ัส5ดง ัส5ดน ัส5ดี ัส5ติ ัส5ถา ัส5ปู ัส5มั ัส5มิ ัส5ยิ ัส5รั ัส5ลิ ัส5วด ัส5วร าก5ถา าก5ฝร าก5ฝั า1กร า5กรร าก5รุ าก5ฮอ า3กี า1ข า4ขบ าข5บู า1ค า4คจ า4คท า4คบ า4คป าค5ปร า4คพ าค5พื า4คภ า5ครี าง5บำ าง5ฝี าง5ฟิ าง5ออ าง5อิ า1จ า4จญ า4จห าจ5หา า4จอ า4จเ าช5กร าช5คร าช5คฤ าช5ทิ า5ชนะ าช5นี าช5ปะ าช5ลั าช5วโ าช5สก าช5สี าช5อง า1ชิ า3ชี าช5เป าช5เล าช5โอ า1ซ าญ5รอ า5ฏกะ าฏ5ดน า5ฏลิ าฏ5ลี า3ฏิ าฐ5กถ าณ5คด าณ5สถ าด5ผว า3ดอ า3ดิ าด5ไท าด5ไห า1ต า4ตญ า4ตภ าต4ว า1ท า4ทธ า4ทน า5ทนะ าท5บง าท5บร าท5สก าท5หล า4ท์ า1ธ า4ธน า2ธย าธ5ยม าน5ญ่ าน5ผู าน5รว าน5รั าน5รา าน5ฤด าน5อว านุ1 าบ5จ้ าบ5ฉว าบ5ช้ าบ5ซึ าบ4พ าบ5รื าบ5ละ า3บิ าป5สร าป5ส่ าป5แช าพ5ถ่ าพ5ยน าพ5รั าพ5ลว าฟ5ต้ าฟ5ริ า3ฟิ า1ภ า4ภป า4ภล าภ5ลอ าม5ง่ าม4น4 าม5สก าม2ห าม5หม าม5หล าม5หา าย5กล าย5กอ าย5ขว าย5ข้ าย5ชน าย5ดิ าย5ด้ า5ยตน า5ยนธ า5ยนม าย5นอ า5ยนเ าย5บร าย5ผอ าย5ฝั าย5มุ าย5ม่ าย5รุ าย5ร้ าย5ลั าย5ล่ าย5วอ าย5อำ า3ยิ าย5ไห าร5กำ าร3ค าร5ชุ าร5ณู าร5ตร า5รทะ าร5ธุ าร5บั าร5ผจ าร5พร า5รภย า1รม าร5รา าร5ละ าร5วด าร5ว่ าร5หน า1ระ า1รั า1รา า1ริ า5ริก า5ริยะ า3รี า1รุ า1ล า4ลก าล5กิ า4ลค า4ลจ าล5ฎี า4ลด าล5ดี าล5ทห า4ลป าล5ปก าล5พร า4ลว า4ลโ า4ล์ าว5ก่ าว5ข้ า3วดี าว5ดึ าว5นี าว5บอ าว5ยอ าว5ยื า5วรณ าว5รภ าว5รา า5ว5รี าว5รุ าว5ร้ าว5ฤก า5วอน าศ5นี า3ศร าศ5เล าษ5ดื าษ5ตร าษ5รา าษ5แก าส5กา าส5ด้ าส5ต้ าส5นี าส5ปอ าส5มห า1ห าห3ก าห5มง าฬ5โร า1อ าอนา4 า1ฮ า1เ าเม5ศ า1แ า1โ า1ไ ำ1ก ำ1ค ำท4ว ำ1น ำ1บ ำ1ป ำ1พ ำ1ม ำม5รง ำม5ลา ำ1ร ำ1ล ำ1ส ำ1ห ำ1เ ำ1แ ิก5ซี ิก5ถอ ิ1กร ิก5ร้ ิ3กฤ ิก5ล้ ิก5วา ิก5ษุ ิ3กิ ิกิ5ส ิ1ข ิ4ขส ิข5สิ ิ1ค ิ4คต ิค5ตอ ิ4คหะ ิฆ5เน ิง5ชี ิง4สต ิง4ห ิง5หา ิง5ห้ ิง5อร ิจ5ศี ิช4น ิช5ลิ ิช5เช ิญ5หน ิญ5โญ ิด5ฉิ ิด5นี ิด5ผน ิด5รอ ิด5ระ ิด5ลั ิด5ออ ิด5อ่ ิต5ซู ิต5ถี ิต5ฟอ ิต5ลด ิต5ลา ิต5วส ิ1ติ ิ3ตุ ิท5ธั ิท5สน ิ3ธี ิน5งอ ิน5ฟร ิน5ยว ิน5ยอ ิน5ย้ ิน5ระ ิน5ริ ิน5ร้ ิ5นอบ ิน5อิ ิน5ฮุ ินู5ป ิบ5บิ ิบ5ผย ิบ5ยื ิบ5ระ ิบ5รี ิบ5ลั ิบ5ลิ ิบ5ล้ ิป4ก ิป5ซั ิป5ทอ ิป5ผล ิ3ปร ิป5สต ิป5ฮอ ิป5โป ิป5โย ิ1พ ิ4พพ ิ4พโ ิพ5โส ิฟ5ฟอ ิ1ภ ิม5ฝี ิม5ลา ิ1มุ ิย5มิ ิร5ชร ิร5วด ิ1รั ิ1รา ิ1ริ ิ1รุ ิล5ปิ ิ1ลั ิ1ลา ิ1ลิ ิว5กิ ิว5ซี ิว5ทร ิว5บิ ิว5ยอ ิว5ริ ิว5ลิ ิว5ลึ ิวา5ส ิศ5พร ิศ5ร้ ิศ5เล ิศ5แพ ิษ5ณุ ิษ5ตร ิส5กร ิส5กี ิ5สตร ิส5ติ ิส5ที ิส5นี ิส5บอ ิส5รา ิส5ริ ิส5ลา ิส5ไซ ิ1ห ิหา4 ิ1เ ิเน4 ิ1โ ี1ก ี4กต ี4กย ีก5ย่ ีก5ริ ีฆ5สร ีช5คณ ีซ5สถ ีด5ฆ่ ีต5กว ีต5ปฏ ี1ท ีท4น ีบ5รั ีบ5รุ ีบ5ร้ ี1ป ี1พ ี4พจ ีย5กถ ีย5รย ีย5รอ ีย5ระ ีย5รั ี5ยวน ีร5ณั ีล5จุ ี4วั ีวา4 ีษ5มา ีห5นา ี5หน้ ีห5บั ีห5มุ ีห5รา ี3หล ีห5โม ีห5ไส ี1อ ีอ4ร ีอา4 ี1เ ี1แ ี1โ ี1ไ ี่5ก่ ี่5ถ้ ี่5ปุ ี่5ปู ี่3ห ี่5โค ี่5โป ี้5กร ี้5จ้ ี้5ซั ี้5ตะ ี้5ริ ี้5ลั ี้5ลุ ี๊5กร ี๋5จ้ ี๋5อ๋ ึก5ซึ ึก5ดำ ึก5ดื ึก5ยื ึก5ระ ึก5ลั ึก5ล้ ึก5ฮั ึด5ถื ึด5ฮั ึน5ทึ ืด5ฮา ือ5กล ือ5กอ ือ5กำ ือ5ข่ ือ5จ้ ือ5ชื ือ5ดำ ือ5ตร ือ5ถื ือ5นำ ือ5บิ ือ5ปล ือ5ปื ือ5ป่ ือ5พว ือ5พ่ ือ5ยน ือ5ยา ือ5รื ือ5ลา ือ5ล้ ือ5สอ ือ5สำ ือ5อี ุก5งอ ุก5ฉก ุก5ซ่ ุก5ดิ ุก5ผา ุก5รา ุก5รุ ุก5ละ ุก5ลี ุก5ล้ ุก5อี ุก5ฮื ุข5นา ุข5ปา ุข5ภั ุข5ภา ุข5ลั ุข5ศา ุข5ศึ ุข5เด ุค5ทอ ุ3คน ุง5ถุ ุจ5ลิ ุจ5หน ุช5รา ุช5เช ุญ5จน ุญ5ฤท ุญ5แจ ุฎ5ฐั ุฑ5พ่ ุณ5ค่ ุณ5ฑก ุณสม5 ุณ5หญ ุณ5หา ุณ5หิ ุณูป5 ุด5ผา ุด5ผ่ ุด5ลอ ุด5ลุ ุด5อู ุต5กว ุต5กิ ุต5ซอ ุต5ตก ุ5ตระ ุ5ตริ ุต5ลุ ุ3ทก ุท5ธั ุ5ทริ ุท5ลุ ุท5โธ ุน5ทร ุน5ผล ุน5รอ ุบ5งิ ุบ5ซิ ุบ5บิ ุบ5ผล ุบ5ยิ ุบ5อิ ุป5กร ุป5กิ ุป5จา ุป5ถั ุป5ทา ุป5ยุ ุป3รา ุ5ปริ ุ4ปส ุป5สง ุป5สร ุป5ฮา ุป5โภ ุป5โล ุพ5พา ุพ5ภิ ุภ5ชล ุภ5เค ุม4น ุม5นุ ุม5รุ ุม5หย ุย5ช่ ุย5ฝ้ ุ1ร ุร5ข่ ุ4รค ุ4รฉ ุ4รช ุ4รท ุ4รธ ุ4รบ ุ4รพ ุ4รภ ุ5รภี ุ4รย ุ4รร ุ4รล ุ4รว ุ4รศ ุ4รส ุ4รอ ุ4รแ ุ4รโ ุล5จอ ุล5ชี ุล5ธิ ุล5มุ ุล5สต ุล5สแ ุ3ลา ุ3ลิ ุศ5โล ุษ5จี ุษ5ฎี ุษ5ปร ุ4ษย ุษ5รา ุษ5ร้ ุษ5เพ ุส5รา ุ5สละ ุส5ลิ ุส5วา ุ1ห ุห5กล ุห5นา ุ4หย ุห5ยา ุ4หเ ุห5เท ุห5เส ุ4หโ ุห5โย ุ1เ ุ1โ ุ๊5ต๊ ูก5วั ู1ช ูญ5หา ูญ5เป ูญ5เส ูด5บึ ูด5รี ูต5รู ูธ5เร ูบ5ไล ูป4ก ูป5ฌา ูป5ถ่ ูป5ทร ูป5พร ูป5ร่ ูป5แบ ูป5โฉ ูฟ5วี ู2ม ู5มิน ูร5ข่ ูร4ณ ู5รณภ ู5รณม ู5รณะ ู5รณาก ูร4พ ู5รพะ ู5รพา ูร4ม ูล5กร ูล5ค่ ู3ลั ูส4ว ู1เ ู1โ ู่1 ู้1 ู๊5ตึ ู๋5กร ู๋5จี ู๋5อี เ2 เก5ยู เก5วั เก5ศว เก5อิ เค5ซอ เค5มี เค5ศว เจ5ดี เจ5นี เ4จร เจ5ลิ เจ5โต เซ5ซั เซ5ทิ เซ5นอ เซ5รุ เซ5แค เด5ซิ เด5บิ เด5รั เด5ลา เด5ลิ เด5ลี 2เตช เต5ปุ เต5มี เต5มู เต5ริ เต5ลุ เต5ศว เต5หะ เถ5รา เท5กร เท5คร เท5คว เท5โว เท5โศ เน4ต เน5ติ 4เนย เน5ระ เน5รั เน4ส เน5สา เน5เว เบ5ต้ เบ5บี เบ5ริ เบ5รุ เบ5ลี เป5ตอ เป5สก เป5สล เพ5ชุ เพ5ทุ เพ5สล เพ5โท เฟ5อี เภ5ตร เภ5ทุ เม5ฆิ เม5ดิ เม5ลา เร5กะ เร5ซิ เร5มอ เร5รว เร5วด เล5กร เล5คอ เล5ดี เล5วร เล5วู เล5หล เล5ฮุ เลิ4 เว5ก้ เว5ทิ เว5ฬุ เส5ฉว เส5นีย์ เส5รี เส5วก เส5วน เส5แส เห5มั เห5ยง เห5ระ เห5รั เห5ศว เห5ศั เห5สั เฬ5วร เอ5กว เอ5ซิ เอ5ธิ เอ5ฬก เฮ5ละ เฮ5ลิ เฮ5โม เฮ5โร แก5วั แค5รอ แค5ริ แค5ลอ แค5ลิ แค5แต แค5แส แช5บ๊ แช5เช แซ5ยิ แด5รี แต5แต แน2 แป5ซิ แ4ปร 3แพท แฟ5รี แ4ฟ้ แม2 แม5ชี แม5รี แม5เร แม่3 แอ5นะ โก4ฐ โก5ลอ โก5ลา โก5ลิ โก5วา โก5วี โก5ฮา โข5ทั โข5ภิ โข5เภ โข5โล โค5ตม โค5ติ โค5มู โค5ม่ โค5ริ โค5ลอ โค5ลั โค5ออ โค5อะ โค5แท โค5ไซ โจ5ปก โฉ5เบ โช5ดึ โช5ห่ โซ5กร โซ5นี โซ5ฟิ โซ5ยู โซ5ลู โซ5สเ โญ4ช โญ5ปว โด5จี โด5นี โด5รา โด5ลิ โต5กร โต5รอ โต5รา โต5ริ โต5ลิ โท5กร โท5คอ โท5พล โท5รอ โท5แอ โธ5ทน โธ5ปก โธ5วน โธ5เฟ โน5ทุ โน5ปจ โน5รม โน5รา โบ5ชุ โบ5ซอ โบ5ต้ โบ5รอ โบ5รั โบ5รา โบ5ลิ โบ5ล่ โบ5ไฮ โป5กส โป5ลิ โป5แล โป5โป โป5โล โพ5ซิ โพ5ทะ โพ5ระ โพ5ลา โพ5ลิ โพ5ลี โพ5หา โพ5แท โพ5ไซ โฟ5กร โฟ5นี โภ5คิ โภ5ไค โม5ฆี โม5ดู โม5ร็ โม5หา โย5ถิ โร5กะ โร5คิ โร5งั โร5ชิ โร5ธนะ โร5รา โร5ล่ โรส4 โร5สเ โร5หน โร5อี โร5ฮิ โร5แม โร5ไล โล5กร โล5กิ โล5กี โล5จน โล5ปุ โล5มก โล5มอ โล5รา โล5วะ โล5หิ โว5นอ โศ5ธน โศ5ภิ โส5กร โส5ติ โส5ธน โส5ภิ โส5ลิ โส5วร โส5หุ โส5โค โห5ฐา โห5รส โห5ระ โห5รา โห5สิ โห5ฬา โอ5กิ โอ5คล โอ5ค็ โอ5ดี โอ5รส โอ5ละ โอ5สถ โอ5อิ โฮ5โล 3ใช้ 1ให ไก5ลา ไก5วั ไข5ข้ ไข5คว ไข5มั ไข5สั ไข5สื ไค5ศว ไช5น่ ไช5ศว ไซ5ดอ ไซ5บอ ไซ5บี ไซ5ปร ได5ฟุ ได5ฟู ได5ลิ ได5ออ ไท5ฟอ ไท5รอ ไท5แท 3ไนย ไป5ริ ไพ5ชย ไพ5ธอ ไพ5รั ไพ5ริ ไพ5ลิ ไพ5หา ไพ5โร ไพ5โอ ไฟ5แช ไฟ5แน ไภ5ริ ไม5ถิ ไม้1 ไร5ตี ไล5บร ไล5บี ไว5กิ ไว5รั ไว5อะ ไห5รณ ไห5ศว ไห5หม ไห5หล ไอ5กร ไอ5ซี ไอ5ดอ ไอ5ติ ไอ5พอ ไอ5พ็ ไอ5ศว ไอ5ศุ ไอ5ศู ไฮ1 ็ก5ซั ็ก5ซี ็จ5ขบ ็จ5สร ็ด5ลอ ็ด5อร ็ด5อึ ็น5ฉ่ ็น5ทร ็น5รอ ็น5วู ็น5อย ็น5อ้ ็บ5ด้ ็ป5ท็ ็ม5หม ่ก5ลั ่1ค ่ง5ริ ่ง5อร ่ง5อำ ่ง5อ่ ่4ฉี ่น5ง่ ่น5ฉ่ ่น5ทะ ่น5มื ่4นย ่น5ยน ่น5ย่ ่น5รม ่ม1 ่ม5พว ่ย5กะ ่ย5ฉุ ่ย5รา ่ย5ร่ ่ว5ช้ ่ว5ถึ ่ว5ยว ่ว5ไห ่อ5กร ่อ5กว ่อ5กะ ่อ5กี ่อ5ก้ ่อ5ข่ ่อ5ตร ่อ5ตะ ่อ5ต้ ่อ5ถื ่อ5บื ่อ5ผส ่อ5มว ่อ5ม่ ่อย3 ่อ5ยอ ่อ5ย่ ่อ5รอ ่อ5ร่ ่อ3ล ่อ5ว่ ่อ5สร ่อ5ฮั ่อ5ฮ่ ่า5กล ่า5ช้ ่า5ดง ่า5ด้ ่า5ฝื ่า5พร ่า5มง ่า5รึ ่า5ร้ ่าว3 ่ำ5ชอ ่ำ5ช้ ่ำ5ต้ ่ำ5ต๊ ่ำ5ไห ่1เ ่1แ ้ก5อ้ ้ง5ถ่ ้ง5ฝุ ้น5งู ้น5ฉบ ้น5ฉ่ ้น5ทะ ้น5ทุ ้น5ท้ ้น5รุ ้น5ร่ ้ม5งว ้ม5ฉุ ้ม5น้ ้ม5ยิ ้ม5ละ ้ม5ลุ ้ม5อล ้ย5กล ้ย5งช ้ย5ล่ ้ย5อ้ ้ย5ใบ ้ว5รอ ้1ห ้อ5กร ้อ5กล ้อ5คร ้อ5คู ้อ5งอ ้อ5ฉี ้อ5ดึ ้อ5ด้ ้อ5ต๊ ้อ5ถอ ้อน3 ้อ5ผ้ ้อ5ฝั ้อ5ฟื ้อ5มู ้อ5ระ ้อ5ร่ ้อ5อึ ้อ5ฮื ้า5จอ ้า5ชื ้า5ชู ้า5ช่ ้า5ช้ ้า5ดี ้า5ถิ ้า5ถึ ้า5บ่ ้า5บ้ ้า5บ๋ ้า5ปี ้า5ผา ้า5ฝร ้า3พ ้า5มุ ้า5ว่ ้า5สม ้า5สร ้า5สล ้ำ1 ้1เ ้1แ ๊ก5ซอ ๊ก5ริ ๊ก5ลุ ๊ก5ฮว ๊ป5ซี ๊ย5ก่ ๋ย5อิ ๋อ5ด๋ ์ค5สเ ์ค5แล ์1บ ์1พ ์1ร ์1เ ์1แ ์1โ .ก6 .ข6 .ฃ6 .ค6 .ฅ6 .ฆ6 .ง6 .จ6 .ฉ6 .ช6 .ซ6 .ฌ6 .ญ6 .ฎ6 .ฏ6 .ฐ6 .ฑ6 .ฒ6 .ณ6 .ด6 .ต6 .ถ6 .ท6 .ธ6 .น6 .บ6 .ป6 .ผ6 .ฝ6 .พ6 .ฟ6 .ภ6 .ม6 .ย6 .ร6 .ฤ6 .ล6 .ฦ6 .ว6 .ศ6 .ษ6 .ส6 .ห6 .ฬ6 .อ6 .ฮ6 6ก. 6ข. 6ฃ. 6ค. 6ฅ. 6ฆ. 6ง. 6จ. 6ฉ. 6ช. 6ซ. 6ฌ. 6ญ. 6ฎ. 6ฏ. 6ฐ. 6ฑ. 6ฒ. 6ณ. 6ด. 6ต. 6ถ. 6ท. 6ธ. 6น. 6บ. 6ป. 6ผ. 6ฝ. 6พ. 6ฟ. 6ภ. 6ม. 6ย. 6ร. 6ล. 6ว. 6ศ. 6ษ. 6ส. 6ห. 6ฬ. 6อ. 6ฮ. 6ก์. 6ข์. 6ฃ์. 6ค์. 6ฅ์. 6ฆ์. 6ง์. 6จ์. 6ฉ์. 6ช์. 6ซ์. 6ฌ์. 6ญ์. 6ฎ์. 6ฏ์. 6ฐ์. 6ฑ์. 6ฒ์. 6ณ์. 6ด์. 6ต์. 6ถ์. 6ท์. 6ธ์. 6น์. 6บ์. 6ป์. 6ผ์. 6ฝ์. 6พ์. 6ฟ์. 6ภ์. 6ม์. 6ย์. 6ร์. 6ล์. 6ว์. 6ศ์. 6ษ์. 6ส์. 6ห์. 6ฬ์. 6อ์. 6ฮ์. 6กิ์. 6ขิ์. 6ฃิ์. 6คิ์. 6ฅิ์. 6ฆิ์. 6งิ์. 6จิ์. 6ฉิ์. 6ชิ์. 6ซิ์. 6ฌิ์. 6ญิ์. 6ฎิ์. 6ฏิ์. 6ฐิ์. 6ฑิ์. 6ฒิ์. 6ณิ์. 6ดิ์. 6ติ์. 6ถิ์. 6ทิ์. 6ธิ์. 6นิ์. 6บิ์. 6ปิ์. 6ผิ์. 6ฝิ์. 6พิ์. 6ฟิ์. 6ภิ์. 6มิ์. 6ยิ์. 6ริ์. 6ลิ์. 6วิ์. 6ศิ์. 6ษิ์. 6สิ์. 6หิ์. 6ฬิ์. 6อิ์. 6ฮิ์. 6กุ์. 6ขุ์. 6ฃุ์. 6คุ์. 6ฅุ์. 6ฆุ์. 6งุ์. 6จุ์. 6ฉุ์. 6ชุ์. 6ซุ์. 6ฌุ์. 6ญุ์. 6ฎุ์. 6ฏุ์. 6ฐุ์. 6ฑุ์. 6ฒุ์. 6ณุ์. 6ดุ์. 6ตุ์. 6ถุ์. 6ทุ์. 6ธุ์. 6นุ์. 6บุ์. 6ปุ์. 6ผุ์. 6ฝุ์. 6พุ์. 6ฟุ์. 6ภุ์. 6มุ์. 6ยุ์. 6รุ์. 6ลุ์. 6วุ์. 6ศุ์. 6ษุ์. 6สุ์. 6หุ์. 6ฬุ์. 6อุ์. 6ฮุ์. 6ะ 6า 6ๅ 6ำ7 6ิ 6ี 6ึ 6ื 6ุ 6ู แ6 โ6 5ไ6 7ใ6 6็ 6่ 6้ 6๊ 6๋ 6์ 6ํ 6ฺ 6๎ เ6ข เ6ฃ เ6ค เ6ฅ เ6ฆ เ6ง เ6จ เ6ฉ เ6ช เ6ซ เ6ฌ เ6ญ เ6ฎ เ6ฏ เ6ฐ เ6ฑ เ6ฒ เ6ณ เ6ด เ6ต เ6ถ เ6ท เ6ธ เ6น เ6บ เ6ป 7เ6ผ เ6ฝ เ6พ เ6ฟ เ6ภ เ6ม เ6ย เ6ร เ6ล เ6ว เ6ศ เ6ษ เ6ส เ6ห เ6ฬ เ6อ เ6ฮ ช6วา. ช6ไ ธ6ไน ม6ไห ส6ไต เลส7ไต ส6ไน ส6ไบ ส6ไป ส6ไล บ6ทคว ม6วก ม6วน ม6วด ม7วดี ม6วย ะม6วง ล7ชน ัต5ถุ ัต6ถุ์ 6ตร. ธา6ตุ. บุ6ตร. ค6รู ฮิบ6รู ฮีบ6รู ส6ภา ส7ภาร เส7ภา โส7ภา ผ6วา น6คร. .เห6ยง เปี่6 เขี้6 ม6ณี คาม7ณี .รม7ณี .รัม7ณี หม7ณี ง6วด ง6วน วัง7วน ง6วย มง6วง อย6อด พ6ญา จุ6รณ ฤ6ชา .ฤ6ทัย พรร6ดิ สวา6ดิ อ6ริ. จน6ที. ธค6ยา นิม6นา ย์ม6นา า7ณะ ิ7ณะ ุ7ณะ ณ7ณะ ก7ณะ ท7ณะ ล7ณะ ุษ7ณะ รป7ณะ หม7ณะ สม7ณะ ลว7ณะ รว7ณะ ร5ณะ ณร6สี ก6นะ ยก7นะ ค7นะ ย7นะ ภว7นะ มท7นะ รต7นะ ลว7นะ วจ7นะ วท7นะ วส7นะ ศม7นะ ภช7นะ ไช7นะ าลป7นะ รรธ7นะ สธ5นะ โสธ6นะ สว5นะ เสว6นะ สาว7นะ ัจ7นะ ัช7นะ ัฏ7นะ ัฒ7นะ ัต7นะ ัท7นะ ัป7นะ ัส7นะ ุจ7นะ อาส7นะ ุ7นะ 5ผี 7จำ 5งำ ห6งำ น7รำ ย7รำ ร7รำ โค7รำ ไพ7รำ น7ยำ ม7ยำ 5งง. ห6งง น7งก 5ชน. เ6ชน โ6ชน 5กร. ั6กร า7นะ ถ7ระ า7ยก. า7ยน. า7ฐี า7นี า7วี ป5โ ป6โย ป6โภ วิป7โย อุป7โภ ศ7นะ รร7มะ ต5ถี ุต6ถี 5บท. ส6บท 5บถ. ข6บถ ส6บถ 7ฟู 7ษุ 5ตะ. ค6ตะ ร6ตะ สร7ตะ า7มี มิ7ผ า7กิ า7กล ิ7กล. ์7กล 5นำ ห6นำ รี7ผ 7ณุ 5นี. ห6นี ฉ6นี าร6นี วีช6นี สส6นี มท6นี รม6นี น7ยิ ิ5ลี ุ5ลี า7ลี โค7ลี โม7ลี ท7ลี ร7ลี ก7ยะ ค7ยะ ป7ยะ ท7ยะ ธ7ยะ น7ยะ ษ7ยะ า7ยะ ิ7ยะ คี7ยะ ฆี7ยะ ณี7ยะ นี7ยะ รี5ยะ เปรี6ยะ มโห5 ิ7รี ี7รี ู7รี หา7รี ม7รี. น5รี. เต7รี. ช7รี. ถ7รี ภ7รี ภม7รี โม7รี ภุม7ร พ7รี. เว7รี 5ผล 5ดล. 5รส. ก6รส จ6รส โค6รส ท6รส พ6รส ด6รส 5คน. ณ7หา ฤๅ5 ฤา5 .ยี่7 า7วะ เท7พี เท7วี บรร7จ บรร7ถ บรร7พต 5ทก. 5ดร. น7ทร. า7ทร. โค7ทร. โล7ทร. โส7ทร. 7อู. 5พล. ไพร่7 5ศก. อัฐ5 อัฐ6ม อัฐ7มี ี7วี ู7วี ถ7วี. ส7วี. ฏ7วี. น7ตี ร7ตี อ7ตี า7ตี ู7ตี า7สี ณ7สี ห7สี เว7สี ู7สี ิ7สี ก7สี โบ7ลา ู7ลา อจ7ลา เว7ลา บิว7ลา มข7ลา เอ7ลา ี7ลา โร7ลา โอ7ลา โซ7ลา ิ7กะ ุ7กะ อ7กะ นว7กะ ิณ7กะ เภ7กะ ัย7กะ ิย7กะ รธ7กะ ัฏ7กะ ัฒ7กะ ิช7กะ ศต7กะ มล7กะ 7ทุ. โซ6ร ธ6นู ัส7ดุ. ร7คต ดง7คต 5กง. เ6กง 7ฎก ณ7มี ว7มี ศ7มี ู7มี ี7ติ รุ7ติ สุ7ติ ฮ7ติ อร7ติ วีส7ติ ติงส7ติ คุป7ติ มุต6ติ ภัต6ติ ก7ดี ต7ดี พ7ดี ม7ดี ย7ดี ศ7ดี อ5ดี า7ดี ี7ดี ุ7ดี ุว7ดี ดิบ7ดี นัก7 กุณ5 กุณ6ฑ์ 7ซี. 5ที. จน6ที ี7รา ู7รา ์7รา ิต7รา ม7รา ย7รา .มก7รา รบ7รา ลิก7รา เห7รา. 7กฎ. 7กฏ. 5หะ ค6หะ นิค7หะ เค7หะ ท6หะ เท7หะ ู7หา ฬ7หา ค7หา เน7หา ่7หา 5มะ ร6มะ ห6มะ ต6มะ 5หู 5ดำ ส6ดำ 7คำ 5สะ ว6สะ 5ฐะ ส6ฐะ 7ธะ 5พี. ร6พี ทร7พี ปฐ7วี ิ7ดา ษ7บ ษ7ป ิ7ระ ี7ระ ู7ระ ช5ระ ิต7ระ ทห7ระ ท7ระ. ุก5ระ. สว7ระ ัส7ระ ิส7ระ เป7ระ อ7ยา. เก7ยา รร7ยา สา7วก ิ7ธิ ุท7ธิ. ิท5ธิ. .สิท6ธิ. บุริมสิท6ธิ. ไกรสิท6ธิ. ป7ธิ ขัดสมา6ธิ พยา6ธิ. 5ษี. ด6นู ิ7วะ ี7วะ ุ7วะ ี7วก ย7วะ เท7วะ ไท7วะ ัท7วะ าช7วะ ไศ7วะ 7ถะ 7ษะ 5พร. 5ผง 5ธี า7ชะ ิ7ชะ ร5ชะ ส7ชะ โอ7ชะ 5ฆะ 5ฟะ า7ฟี ิ7ถี ร7ถี 5ฮา 5ญี 5ผา 5หิ. สิน7ธพ สิน7ธุ. สิน7ธู 5ชู 5ศะ ิ7ละ ุ7ละ ู7ละ ย7ละ ด7ละ .วส7ละ อเจ7ล เต7ละ ่7ละ น7ทะ ท7ทะ ส7ทะ น7ตุ. รร6ตุ มา7ตฤ ิ7รพ า7รพ. ไก7รพ 5ศุ. า7ถา า7สพ พ7สพ ุ7ขี 7สอ. า7ดะ 5บะ. 5ยี. ห6ยี 5กี. 5หก. ง7อร. ม7อร. ี7วร ส7วร. พู7นท 5จร. โ6จร. 7ศพ. โป7ลี 7ภพ. 7นพ. 7ณพ. า7รก. ทก7รก ย7รก. ยว7รก. 5มล. ุ5บล. โล7บล. 5ชล. 5ชก. 7โพ 5ณู 7ปี. า7บี. 5ฏะ. า7ฬี 5ปะ. ฉ6ปะ ส6ปะ ู7ลู 5ตู. 5ยู. ิ7ชิ 7ฆี. ิ7จี ี7จี ุ7จี ู7จี เว7จี 5ศี. 5มน. 5ยอ. ผ6ยอ. 5สง. 7สร. 5ดก. ส6ดก 7โก. ก7ฝ า7มก. 5ซอ า7ขะ ู7ขะ ส5ขะ ร7ษา 5ภะ ศ7ภ ิ7ลก ุ7ฎี ศา5ข 5สา. ั6สา 7ซู 5ษก. ษ7ฐี 5ดม. ส6ดม ด7ลม. ส7ลม. ว7ลม. ี7ลม. 5ศล. นิ7ยต 7งู 5จะ. า7สก. โป7สก 5ยศ. 5ธก. 5กบ. 7คู. ส5มา. 5แล. 5พก. โส7ภ รร6ดิ. า7วก. น7นร. 5จอ. 5จบ. 5คบ. 5ฉล. ม7รม อบ7รม ิ7รม. ี7รม. 5ซน. 5ดอ. 5กิ. ซู7ซุ ซู7ฮก 5บส. น7รน. ตก7ลง ม7ตน ตัว7ตน ี7วง ศ7วง. แตร7วง แวด7วง า7ฑู 5หด. อบ7นบ นา7คร. ี7ฑา ู7ดู า7รภ. า7ฝ ล7รบ. ว7รบ. อ7รบ. า7รณ. น7ยง ม7ยง ุ7ยง ิ7ยง ิ7ยน หา7พน า7งิ ช7รถ. น7รถ. ส7รถ. ัน7ธร. มณ7ฑก มณ7โฑ มร7กต มร7ฑป ยอด7อก โล่ง7อก ยืด7อก ห7ห 5ทด. ว7นม. ทพ7นม. โค7นม ษ7ฎร. ิ7ปุ ิ7ปู ี7รอ. ย7ลำ อ7ลำ ้7ลำ น7ทม. ป7ทม. วก7วน อล7วน ิ7จล. ช7ญะ ี7ข ศีล7 5ธม. สม7รด สัก7วา สัป7ด สัป7ท า7สม. อ7สม. า7นล. ี7รุ ู7รุ เน7รุ ง7หล สีห7นุ 5ภร. 5จด. บ7ยก. ดิ7ศร ร7ศร อพ7ยพ ร7ชร. รส7กา ลส7กา อาจ7อง ี7มู อึง7อล ุ7ชุ ุ7สภ. เก7ชา เก7ศา ช7ตก. บ7ตก. เข7ฬะ ห7ณี อ7ปน. ย7ชม. เบื้อง7 5คะ ง7ออ. อ7ออ. เรือ7ธ เรือ7บ เลี้ยว7 5กก. เ6กก อ7ขอ. า7กอ. แด7วู บ7ยล. โฉ7เก โด7มร โต7มร 7โผ โท7โส ้7ปด. 7คี. โย7นก. โส7มม 7ฬส. ต7ถิ 7โฮ ใจ7 5ฟง ไช7โย 5พต. กรร7กศ ล7บก. ศ7ยป. า7นน. ุ7ฎา ู7ฏา า7มอ. ท7โท ุ7ทส จ่า7ร ฬ7หี า7ฒะ ธต7รฐ ท7คล. ต7ถร. ิ7ฐิ ป7ผะ พฤ7ษภ. ิ7ธุ า7ฬก. ห7สิ ฏ7ฏิ. ษ7ฏิ. ศิษ7ฎิ ษ7ฏี 5ษส. ิ7ปิ ู7ริ. ฑ7ฑุ ษ7ฏุ า7ตา ว7ตก ง7ตก เก6ตุ. ส7ตุ ลิ7บง ฮ7โ", ["length"]=53112, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4275, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-eu.rme0000644000175000017500000000350311761001300024642 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Basque hyphenation patterns (more info about the licence to be added later) % Hyphenation patterns for Basque. % % This file has first been written by Juan M. Aguirregabiria % (juanmari.aguirregabiria@ehu.es) on February 1997 based on the % shyphen.sh script that generates the Spanish patterns as compiled % by Julio Sanchez (jsanchez@gmv.es) on September 1991. % % In June 2008 the generating script has been rewritten into ruby and % adapted for native UTF-8 TeX engines. Patterns became part of hyph-utf8 % package and were renamed from bahyph.tex into hyph-eu.tex. % Functionality should not change apart from adding ñ by default. % % The original Copyright followed and applied also to precessor of this file % whose last version will be always available by anonymous ftp % from tp.lc.ehu.es or by poynting your Web browser to % http://tp.lc.ehu.es/jma/basque.html % % For more information about the new UTF-8 hyphenation patterns and % links to this file see % http://www.tug.org/tex-hyphen/ % % COPYRIGHT NOTICE % % These patterns and the generating script are Copyright (c) JMA 1997, 2008 % These patterns are made public in the hope that they will benefit others. % You can use this software for any purpose. % However, this is given for free and WITHOUT ANY WARRANTY. % % You are kindly requested to send any changes to the author. % If you change the generating script, you must include code % in it such that any output is clearly labeled as generated % by a modified script. % % END OF COPYRIGHT NOTICE % % Open vowels: a e o % Closed vowels: i u % Consonants: b c d f g j k l m n ñ p q r s t v w x y z % % Some of the patterns below represent combinations that never % happen in Basque. Would they happen, they would be hyphenated % according to the rules. % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-et.hyp0000644000175000017500000000017111761001300024654 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-et.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tr.pat0000644000175000017500000000564011761001300024663 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-tr.rme % used: a b c d e f g h i j k l m n o p r s t u v y z â ç î ö û ü ğ ı ş \patterns{ 2a1 2â1 2e1 2ı1 2i1 2î1 2o1 2ö1 2u1 2ü1 2û1 1b1 1c1 1ç1 1d1 1f1 1g1 1ğ1 1h1 1j1 1k1 1l1 1m1 1n1 1p1 1r1 1s1 1ş1 1t1 1v1 1y1 1z1 2e2cek. 2bb 2bc 2bç 2bd 2bf 2bg 2bğ 2bh 2bj 2bk 2bl 2bm 2bn 2bp 2br 2bs 2bş 2bt 2bv 2by 2bz 2cb 2cc 2cç 2cd 2cf 2cg 2cğ 2ch 2cj 2ck 2cl 2cm 2cn 2cp 2cr 2cs 2cş 2ct 2cv 2cy 2cz 2çb 2çc 2çç 2çd 2çf 2çg 2çğ 2çh 2çj 2çk 2çl 2çm 2çn 2çp 2çr 2çs 2çş 2çt 2çv 2çy 2çz 2db 2dc 2dç 2dd 2df 2dg 2dğ 2dh 2dj 2dk 2dl 2dm 2dn 2dp 2dr 2ds 2dş 2dt 2dv 2dy 2dz 2fb 2fc 2fç 2fd 2ff 2fg 2fğ 2fh 2fj 2fk 2fl 2fm 2fn 2fp 2fr 2fs 2fş 2ft 2fv 2fy 2fz 2gb 2gc 2gç 2gd 2gf 2gg 2gğ 2gh 2gj 2gk 2gl 2gm 2gn 2gp 2gr 2gs 2gş 2gt 2gv 2gy 2gz 2ğb 2ğc 2ğç 2ğd 2ğf 2ğg 2ğğ 2ğh 2ğj 2ğk 2ğl 2ğm 2ğn 2ğp 2ğr 2ğs 2ğş 2ğt 2ğv 2ğy 2ğz 2hb 2hc 2hç 2hd 2hf 2hg 2hğ 2hh 2hj 2hk 2hl 2hm 2hn 2hp 2hr 2hs 2hş 2ht 2hv 2hy 2hz 2jb 2jc 2jç 2jd 2jf 2jg 2jğ 2jh 2jj 2jk 2jl 2jm 2jn 2jp 2jr 2js 2jş 2jt 2jv 2jy 2jz 2kb 2kc 2kç 2kd 2kf 2kg 2kğ 2kh 2kj 2kk 2kl 2km 2kn 2kp 2kr 2ks 2kş 2kt 2kv 2ky 2kz 2lb 2lc 2lç 2ld 2lf 2lg 2lğ 2lh 2lj 2lk 2ll 2lm 2ln 2lp 2lr 2ls 2lş 2lt 2lv 2ly 2lz 2mb 2mc 2mç 2md 2mf 2mg 2mğ 2mh 2mj 2mk 2ml 2mm 2mn 2mp 2mr 2ms 2mş 2mt 2mv 2my 2mz 2nb 2nc 2nç 2nd 2nf 2ng 2nğ 2nh 2nj 2nk 2nl 2nm 2nn 2np 2nr 2ns 2nş 2nt 2nv 2ny 2nz 2pb 2pc 2pç 2pd 2pf 2pg 2pğ 2ph 2pj 2pk 2pl 2pm 2pn 2pp 2pr 2ps 2pş 2pt 2pv 2py 2pz 2rb 2rc 2rç 2rd 2rf 2rg 2rğ 2rh 2rj 2rk 2rl 2rm 2rn 2rp 2rr 2rs 2rş 2rt 2rv 2ry 2rz 2sb 2sc 2sç 2sd 2sf 2sg 2sğ 2sh 2sj 2sk 2sl 2sm 2sn 2sp 2sr 2ss 2sş 2st 2sv 2sy 2sz 2şb 2şc 2şç 2şd 2şf 2şg 2şğ 2şh 2şj 2şk 2şl 2şm 2şn 2şp 2şr 2şs 2şş 2şt 2şv 2şy 2şz 2tb 2tc 2tç 2td 2tf 2tg 2tğ 2th 2tj 2tk 2tl 2tm 2tn 2tp 2tr 2ts 2tş 2tt 2tv 2ty 2tz 2vb 2vc 2vç 2vd 2vf 2vg 2vğ 2vh 2vj 2vk 2vl 2vm 2vn 2vp 2vr 2vs 2vş 2vt 2vv 2vy 2vz 2yb 2yc 2yç 2yd 2yf 2yg 2yğ 2yh 2yj 2yk 2yl 2ym 2yn 2yp 2yr 2ys 2yş 2yt 2yv 2yy 2yz 2zb 2zc 2zç 2zd 2zf 2zg 2zğ 2zh 2zj 2zk 2zl 2zm 2zn 2zp 2zr 2zs 2zş 2zt 2zv 2zy 2zz a3a2 a3â2 a3e2 a3ı2 a3i2 a3î2 a3o2 a3ö2 a3u2 a3ü2 a3û2 â3a2 â3â2 â3e2 â3ı2 â3i2 â3î2 â3o2 â3ö2 â3u2 â3ü2 â3û2 e3a2 e3â2 e3e2 e3ı2 e3i2 e3î2 e3o2 e3ö2 e3u2 e3ü2 e3û2 ı3a2 ı3â2 ı3e2 ı3ı2 ı3i2 ı3î2 ı3o2 ı3ö2 ı3u2 ı3ü2 ı3û2 i3a2 i3â2 i3e2 i3ı2 i3i2 i3î2 i3o2 i3ö2 i3u2 i3ü2 i3û2 î3a2 î3â2 î3e2 î3ı2 î3i2 î3î2 î3o2 î3ö2 î3u2 î3ü2 î3û2 o3a2 o3â2 o3e2 o3ı2 o3i2 o3î2 o3o2 o3ö2 o3u2 o3ü2 o3û2 ö3a2 ö3â2 ö3e2 ö3ı2 ö3i2 ö3î2 ö3o2 ö3ö2 ö3u2 ö3ü2 ö3û2 u3a2 u3â2 u3e2 u3ı2 u3i2 u3î2 u3o2 u3ö2 u3u2 u3ü2 u3û2 ü3a2 ü3â2 ü3e2 ü3ı2 ü3i2 ü3î2 ü3o2 ü3ö2 ü3u2 ü3ü2 ü3û2 û3a2 û3â2 û3e2 û3ı2 û3i2 û3î2 û3o2 û3ö2 û3u2 û3ü2 û3û2 tu4r4k m1t4rak}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tr.rme0000644000175000017500000000320011761001300024650 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Turkish hyphenation patterns (more info about the licence to be added later) % hyph-tr.tex % % Turkish hyphenation patterns % % This file is auto-generated from source/generic/hyph-utf8/languages/tr/generate_patterns_tr.rb that is part of hyph-utf8. % Please don't modify this file; modify the generating script instead. % % Copyright (C) 1987 Pierre A. MacKay % 2008, 2011 TUG % % This program can redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or (at your option) any later version. % % Credits: % - algorithm developed by P. A. MacKay for the Ottoman Texts Project in 1987 % - rules adapted for modern Turkish by H. Turgut Uyar % - initiative to improve Turkish patterns by S. Ekin Kocabas % - script written by Mojca Miklavec in June 2008 % % See also: % - http://www.ctan.org/tex-archive/language/turkish/hyphen/turk_hyf.c % - http://www.tug.org/TUGboat/Articles/tb09-1/tb20mackay.pdf % % Differences with Ottoman patterns: % - adapted for the use on modern TeX engines, using UTF-8 charactes % - only letters for Modern Turkish + âîû (the first one often needed, the other two don't hurt) % - (if needed, support for Ottoman Turkish might be provided separately under language code 'ota') % % Changes: % - 2008-06-25/27/28 - create this file by adapting Ottoman rules for modern Turkish % - 2011-08-10 - add LPPL licence with permission of Pierre A. MacKay % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-agr.rme0000644000175000017500000000326411761001300025006 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Hyphenation patterns for Ancient Greek (more info about the licence to be added later) % **************************************************************** % % File name: hyph-grc.tex % % Created: June 6, 2008 % Last modified: Sept. 12, 2011 % % Unicode hyphenation patterns for Ancient Greek. % % Author: Dimitrios Filippou, (c) 2008-2011 % Licence: LaTeX Project Public Licence % % This file was first created by mechanical translation from % GRAhyph5.tex via "elhyph-utf8 -a -c" (version 0.1 by Peter % Heslin -- p.j.heslin at durham dot ac dot uk). Some additions % were also made by hand. % % Created by Dimitrios Filippou with some ideas borrowed from % Yannis Haralambous, Kostis Dryllerakis and Claudio Beccari. % Mojca Miklavec adapted it for the "hyph-utf8" package. % % These hyphenation patterns are explained in "ancient.pdf", which % can be found in the "elhyphen" or "hyphenation-greek" package. % Hyphenation examples are given in the file "anc-test.pdf", also % to be found in the "elhyphen" or "hyphenation-greek" package. % Questionable patterns are marked by three question marks "???". % % Documentation in English can be found in: D. Filippou, % "Hyphenation patterns for Ancient and Modern Greek," in % "TeX, XML, and Digital Typography" (A. Syropoulos et al., % eds.), Lecture Notes in Computer Science 3130, Springer-Verlag % Berlin-Heidelberg, 2004. ISBN 3-540-22801-2. % % Thanks to Thomas Schmitz (thomas.schmitz at uni-bonn dot de) % for pointing out a few mistakes. (Marked by %%%TS%%%) % % **************************************************************** % % \message{UTF-8 hyphenation patterns for Ancient Greek} % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fr.lua0000644000175000017500000003613712161703335024663 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="fr", ["source"]="hyph-fr", ["texcomment"]="% French hyphenation patterns (V2.12, 2002/12/11)\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: frhyph.tex <2006-10-20>\ % Author: R. Bastian, D. Flipo, B. Gaulle \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % French hyphenation patterns\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ % This file is available for free and can used and redistributed\ % asis for free. Modified versions should have another name.\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ % \\message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}\ %\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ % *BEFORE* using this file *PLEASE* run checksum on it: %\ % checksum -v frhyph.tex %\ % to make sure that it hasn't been damaged. %\ % Then if you notice anything wrong in french hyphenation please report to %\ % R. Bastian, D. Flipo, B. Gaulle at the email address: %\ % cesure-l@gutenberg.eu.org %\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %% checksum = \"37208 1458 3078 34821\"\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %%%%%%%% The most famous good guys who worked hard to obtain something usable.\ % Jacques Desarmenien, Universite de Strasbourg :\ % - << how to run TeX in a French environment: hyphenation, fonts,\ % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference\ % - << La division par ordinateur des mots francais :\ % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-\ % Gauthier-Villars\ % Norman Buckle, UQAH (nb; many additions)\ % Michael Ferguson, INRS-Telecommunications (mjf) June 1988\ % Justin Bur, Universite de Montreal (jbb; checked against original list)\ % all patterns including apostrophe missing from nb list\ % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle\ % did their best effort to improve the list of patterns.\ %\ % -----------------------------------------------------------------\ %\ % Adaption of these patterns for\ % - TeX Version 3.x and MLTeX 3.x (2.x)\ % and\ % - all fonts in T1/`Cork' and/or CM/OT1 encoding\ % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'\ % as of 1994-02-13 maintained by Bernd Raichle).\ % (An adaption for the old MLTeX 2.x exists but can not be\ % tested in lack of an executable.)\ %\ % -----------------------------------------------------------------\ %\ % ", }, ["patterns"]={ ["characters"]="'abcdefghijklmnopqrstuvwxyzàâçèéêîïôûœ’", ["data"]="2'2 2’2 .a4 'a4 ’a4 .â4 'â4 ’â4 ab2h .ab3réa 'ab3réa ’ab3réa ad2h a1è2dre .ae3s4ch 'ae3s4ch ’ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c ’amino1a2c .ana3s4tr 'ana3s4tr ’ana3s4tr 1a2nesthési .anti1a2 'anti1a2 ’anti1a2 .anti1e2 'anti1e2 ’anti1e2 .anti1é2 .anti2enne 'anti2enne ’anti2enne 'anti1é2 ’anti1é2 .anti1s2 'anti1s2 ’anti1s2 .apo2s3ta 'apo2s3ta ’apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta ’as2ta a2s3tro 1ba 1bâ .bai2se3main 1be 1bé 1bè 1bê 4be. 4bes. 2bent. 1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. 1bo 1bô 1b2r 4bre. 4bres. 2brent. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 1ce 1cé 1cè 1cê 4ce. 4ces. 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. .chè2vre3feuille 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 .cons4 .contre1s2c .contre3maître co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. 1cu 1cû 1cy .cul4 1d' 1d’ 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. .dé1a2 .dé1io .dé1o2 .dé2s .dé3s2a3cr .dés2a3m .dé3s2a3tell .dé3s2astr .dé3s2c .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p .dé3s2t .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. 1do 1dô 1d2r 4dre. 4dres. 2drent. d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 ’e4 .ê4 'ê4 ’ê4 .é4 'é4 ’é4 .è4 'è4 ’è4 éd2hi 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 ’en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 ’en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 ’eu2r1a2 eu1s2tat extra1 extra2c extra2i 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. 1fi 1fî 1f2l 4fle. 4fles. 2flent. 1fo 1fô 1f2r 4fre. 4fres. 2frent. f1s2 1fu 1fû 1fy 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ’ar3gent. ser3gent. ter3gent. résur3gent. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. 1g2n 'a2g3nat ’a2g3nat .a2g3nat a2g3nos co2g3niti 'i2g3né ’i2g3né .i2g3né 'i2g3ni ’i2g3ni .i2g3ni .ma2g3nicide .ma2g3nificat .ma2g3num o2g3nomoni o2g3nosi .pro2g3nath pu2g3nable pu2g3nac .sta2g3n .syn2g3nath wa2g3n 4gne. 4gnes. 2gnent. 1go 1gô 1g2r 4gre. 4gres. 2grent. 1gu 1gû g1s2 4gue. 4gues. 2guent. .on3guent. 'on3guent. ’on3guent. 1gy 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 ’i4 .î4 'î4 ’î4 i1algi i1arthr i1è2dre il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l 1informat .in1a2 'in1a2 ’in1a2 .in2a3nit 'in2a3nit ’in2a3nit .in2augur 'in2augur ’in2augur .in1e2 'in1e2 ’in1e2 .in1é2 'in1é2 ’in1é2 .in2effab 'in2effab ’in2effab .in2é3lucta 'in2é3lucta ’in2é3lucta .in2é3narra 'in2é3narra ’in2é3narra .in2ept 'in2ept ’in2ept .in2er 'in2er ’in2er .in2exora 'in2exora ’in2exora .in1i2 'in1i2 ’in1i2 .in2i3miti 'in2i3miti ’in2i3miti .in2i3q 'in2i3q ’in2i3q .in2i3t 'in2i3t ’in2i3t .in1o2 'in1o2 ’in1o2 .in2o3cul 'in2o3cul ’in2o3cul .in2ond 'in2ond ’in2ond .in1s2tab 'in1s2tab ’in1s2tab 'inte4r3 ’inte4r3 .intera2 'intera2 ’intera2 .intere2 'intere2 ’intere2 .interé2 'interé2 ’interé2 .interi2 'interi2 ’interi2 .intero2 'intero2 ’intero2 .inte4r3 .interu2 'interu2 ’interu2 .inters2 'inters2 ’inters2 .in1u2 'in1u2 ’in1u2 .in2uit 'in2uit ’in2uit .in2u3l 'in2u3l ’in2u3l io1a2ct i1oxy i1s2tat 1j 2jk 4je. 4jes. 2jent. 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé 1mè 1mê .mé2g1oh .mé2sa .mé3san .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal m1s2 1mu 1mû 1my moye2n1â2g 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. 2nent. réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny .o4 'o4 ’o4 'ô4 ’ô4 .ô4 o2b3long 1octet o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou ’oua1ou .ovi1s2c 'ovi1s2c ’ovi1s2c oxy1a2 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. 2pent. re3pent. .ar3pent. 'ar3pent. ’ar3pent. ser3pent. .pen2ta per3h pé2nul .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis 1pi 1pî 1p2l 4ple. 4ples. 2plent. .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. .pré1a2 .pré2a3la .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py 1q 4que. 4ques. 2quent. é3quent. élo3quent. grandilo3quent. 1ra 1râ radio1a2 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi .re2s3ciso .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 .ré2uss .rétro1a2 4re. 4res. 2rent. .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. 2sent. ab3sent. pré3sent. .res3sent. .seu2le .sh4 1s2h 4sh. 4she. 4shes. 2shent. 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. 2tent. .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty .u4 'u4 ’u4 .û4 'û4 ’û4 uni1o2v uni1a2x u2s3tr 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. 2vent. conni3vent. .sou3vent. 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. 1vu 1vû 1vy 1wa 1we 4we. 4wes. 2went. 1wi 1wo 1wu 1w2r 2xent. .y4 'y4 ’y4 y1asth y1s2tom y1algi 1za 1ze 1zé 1zè 4ze. 4zes. 2zent. privatdo3zent. 1zi 1zo 1zu 1zy", ["length"]=9581, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=1208, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sl.lua0000644000175000017500000002447512161703335024674 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="sl", ["source"]="hyph-sl", ["texcomment"]="% Slovenian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: slhyph.tex (2007-01-29)\ % Author: Matjaž Vrečko \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % This is `slhyph.tex' as of 15. 4. 97.\ %\ % Copyright (C) 1990 Matjaž Vrečko, TeXCeX (SLO)\ % [slovenian hyphenation patterns]\ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ %\ % This file contains slovene hyphen patterns with čšž\ %\ % Generation of hyphen patterns for TeX\ %\ % Matjaž Vrečko, TeXCeH (SLO), 1990\ % Email: matjaz@mg-soft.si\ %\ % Changes:\ % 1990 First version of `hyphen.si' (Matjaž Vrečko, TeXCeX)\ %\ % Some cosmetic changes done later on, but none of these apply any more;\ % the patterns are still the same as they were originally:\ %\ % 1994-05-17 Use of code page 852 in patterns (Leon Žlajpah)\ % 1995-04-06 Release of `sihyph21.tex'\ % 1995-06-20 Added \\slovenehyphenmins\ % Release of `sihyph22.tex'\ % 1997-15-04 Some changes concerning \"c, \"s, \"z and ...\ % Release of `sihyph23.tex'\ % 2007-01-20 `sihyph23.tex' renamed to `slhyph.tex'\ % (sl is the proper language code for Slovenian)\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzčšž", ["data"]=".av5r .di6spo .ek3s .ek5v .is1 .iz1 .obi4d .ob5it .od1 .po4d5n .po4v5s .pre6d7n .se4k5s .si4s .st4 .voz5l .voz5n .zliz6 a1a a1b ab5ba ab6rod a1c ac5ci a1č a1d ad2l a6dobl ad6rl. ad6rla ad6rob ad5ur a1e1 a1f af5ga af1t a1g a1h a4hm ah5mi ah5mo a1i ai2n1 a1j a4j5ek a4jf aj5fi aj5fo aj5ha aj5he aj5im aj6imo aj3os aj6stb a5ju. aj3uč aj3ug aj5žn a1k ak4s a4kst a1l a1m a4mz a1n an6dga an6dhi a4nm an5mi an5zi a1o ao2b1 a1p a4ph a1ra ar6dwa a1re a1ri a1ro a1ru ar5xa ar5xo ar5xu a1s a4sš as5šč a1š a1t a4tf at4i a1u1 a4uf a2uk a4ul a1v av5ši a4vž av5ža ay5to a1ze az5fo a4zig az3la az3le az4lil az4lit az4liv a4zob a4z3oč az5ora az5oro a4zra az4red az5vp a1ž až5mi ba6bba ban3č4 ba4u 2b1c 2b1č 2b1d be1 be4v b1h bi1 b1ja b4ja. b5jel b3jem b5jet 2b1k b3lep b5leta b5lil b5lit b5liv b1m 4bmi 2b1n bo1 bo6chm b5ord bo5vp b3rab b5ras b3raš b3rez bre4zg bre4zi bre4zr b5reže b3rob br6žda 2b1s 2b1š 2b1t bu5ki bu5ku bu5kv bu5ry 2b1v b1z b1ž 2cc 2ch. ch5ma 2ck c1ka ck1o2 c5ko. ckov3 ck1s ck5we 2c1n 2c1t 2č1b 2č1g či1 1čj 2č1k 1čl 4č3let č5mes 2č1n 4čop 2č1p 2č1s 4čup 2d1b 2d1c 2d1č 2d1d dd6voj d2e 6d5elem de4min de4mn de4z3i 2d1g 2d1h di5ck 4dind d4i5no dis1 di4skr di6spr 2d1j 2d1k 5dlet d2li d5lit d5liv d1lo 2d3m 4d3nac 4d5nač 4d5nap 4d3nar 4dnas 4d5neb d5niv 4d5niz 4d5njač 4d3nož d2o 4dobč 4d5obd 2d3o2f do5rd do5vč do5v4z 2d1p d5raz d3rep dre6pn d4rev 2d1s 2d1š 2d1t dteks6 d4ur du5ro du5um 2d1v 4d3vi 2d1z2 e1a e1b eb4j eb6liz e1c e1č e4čd eč5de eč5di eč5do eč3le eč5op e4čt eč5ti eč5to eč5tr eč5up e2č1v eč6vrs e1d e4df ed5ig ed2l ed5ob ed6obe ed6obr e4dobs e4d3oč ed5vč ed5zb e1e e4ep e1f e4ff ef5fe ef5ta e1g e1h e1i ei6pzi ei2z eiz5e e1j e1k ek6mal ek6tre e1l e1m e1n e1o1 eob4j eob4r eo4dl eo4z5n e1p ep5nik e1ra era6z5l era5z4r era5z4v e1re e4rf e1ri e1ro e4rr e1ru e1s es5da e5sta e5sti. e5stih e5stil e1š e4šp eš5po e1t 4eth e4tinš e1u1 e1v eve6t5l ev5ha ev6pre ev6ste ev5stv 2ew ew6ind ew5le e4wt ew5to e4yw e1z ez5dj e3z4dr ez2g ez5gl e5zij ez6ijo ez5imn e5zis ez6ist ez5iz ez4l ez6lom ez6man ez4mo e4zob e4z5or ez4re e4zt e4z5u4m5 e4zž e1ž 1fa fe1 fe6ljt ff5ma fi6zlj 2f1n fo6uri fre4u 2f1s 2ft ft5ve fu1 2g1d ge6ige gel5č4 ge6njč gi6tpr go1 go5vz 2g1t gu1 ha4u 2h1č he4i 2h1k 4hl. h4lo 2h1n h5ren 2h1š 2h1t 1hu hu6ffm i1a i1b i1c i4cs i1ča i1če i1či ič5ra i1ču ič5vr i1d 4idor i1e1 i1f i1g 4igh i1h i1i ii2n1 i1j i1k i4kč ik5ča i1l il5č4k 4ile 4ilo i1m i4mh im5hi i1n 1ind 2ine 3i4n3os 1inp 3inse 1inš 4inšk 3intr i1o1 i1p i1r 4ire i1s is4a is6ert isis4 i4skv 2iss i1š i1t it5pr i1u i1v iv5jo i1x i1z iz1l iz4la izli4z iz5me iz5mo iz6ode iz5po i2zr iz1u iz6ure i1ž j5akt 2j1b 2j1c 2j1č 2j1d je4ks4 2j1g 2jh j1hi 4jime 4j5int 2j1k 2j1l 2j1m 2j1n 4job 2j1od jod4l 2jos 4jož 2j1p 2j1r jra1 jraz4 2j1s jsis6t 2j1š 2j1t ju1 2juč ju5dm 2jus ju2ž1 2j1v 2j1z jz6ves 2k1c 2k1d ke5ti ki1 2k1m 1kn ko1 kok4 ko5kd ko6vše koz6lo 1kre 2ks. k5sat ks1c ks1p ks4po ks1t 4kst. ks6taz ks5te 2k1t 3ktr 4ktra ku5ro k5vip la4ir la6vz. 2l1b 2l1c 2l1č 2l1d le1 le4e le6ipz le5me 2l1f 2l1g lg5ča 2l1h l2i1 li6dž. 1liz 4l5izd 2lj. 4ljc 2ljč 2ljk 2ljn 2ljs 2ljš lju5d6j 2l1k 2l1l 2l1m 2l1n lo1 1loč 2l1p 2l1s 2l1š 2l1t lu5ki lu5ku 2l1v 2l1z 2l1ž 2m1b 2m1c 2m1č 2m1d me4d5n me6dos me4dr 2m1f 4mind 4minp 4minš mi6th. 2m1k 2m1m m5niv mo6št. mo6vš. 2m1p 2m1s 2m1š 2m1t m5urn 2m1v my5hi 2m1ž na1 5načel na4d5nj nad5r na6dra na4dre na6dur 1naj na6jak na4j5en naj3o na6joč na4j3u 1nas na4v3z navze6 1naz naz6or 2n1b 2n1c 2nč n1ča n1če n1či n1ču 2n3d2 nd5ga nd5hi n4dm ne1 ne3d2 1neh ne3zm nez4v 2n1f 2n1g n4gh ng5ha n4gv ng5vi 2n1h 2nj. 2njc nje4v5s 2njk 2njs 2njš 4njv 2n1k 2n1l 2n1n no5rd n4ost 2n1p 2n1s nsis4 2n1š 2n1t nteks4 n4tg nt5ga nt5ge n4tv nt5vi nu1 2n1v ny5qu 2n1z nz4i 2n1ž o1a o4as o1b ob5gl ob5ide ob5jo 5obla 5obro o4bz o1c oc5ke oc5ki o4cr o1č o1d od5dv od5nal o6drep od5zd o2d1ž o1e oele4 o1f o1g 4ogl o1h o1i oiz2 o1j o1k o4kb ok5ba ok5be o4kt o1l o6l5avt ol6gča o4lr ol5re o1m o1n o1o ood4l o2ol o4om o1p o4pm op5me 4opy o1ra or4deč o1re o1ri o1ro o1ru o1s 5oseb ose4m5 o1š o1t o1u ou5ki ou5ku o1v ov5sem ov5šk o2v1z o5vza ov3zd o1y o1z oz4b ozd5j oz4g oz5lo oz6lož oz2n oz5nic oz5niš oz2o oz2r oz2v o1ž ož5mi 2p1c 2p3č2 pč5ka pe1 1peč pe4kt pet3l pe4tle pe4v5s pev5t4 4phs ph5so pi5zo 2p1k 4ploz po1 po6dfa po4d3l po4dna po4d5oč po6lob po6std prez4 2p1s 2p1š 2p1t pz6ig. qu2 3raču 2rae ra6jžn rav5z ra6vza ra4z5id 3razl ra4z5or 2r1b 2r1c 2r1č 2r1d re1 3real re6cht re5čv 5redč re6dig re6dnju re6iba re5jo re5km re6sda rev6sk re6znač re6zus re6zve r1f 2r1g 2r1h ri1 r4in ri5n4o riz4g riz4l riz4n 2r1j 2r1k 2r1l 2r1m 2r1n ro1 rob6id 3rodi ro5zo 2r1p r1r 2r1s 2r1š 2r1t r4th rt5ha ru5kl 2r1v r3v2j rv5jo ry5an 2r1z rz2l r1ž rž5da 2s1b 1sc 4sc. s2ci se4k5sa sek5si se5ma se5vp 2s1f si1 s4id si6gn. sis1 2s1j 2sk. s2kn 4skre s4lav s4on soni5 sonič4 1sp s4plod spod4l 2s1s 2st. 3ste s4ten 4stf s4tič 5stim s4tir 2stk 2stm 1str s4tra. su1 su4bo sve5t š2č 2šč. 2ščk 2ščn še2s 2š1j ta5wi taz4 2t1b 2t1c tch5o 2t1d tek6st 5tema te5xa t1f 4tind 4tinos 4tinp 4tinse 4t3int 2t1k 6tletno 2t1m 4tnaj to6vž. trt5u tr6tur 2t1s 2t1t tu1 4tz. 2u1a u1b ub4j u4bp ub5po u1c u1č u1d ud6mi. u1e u1f u1g u1h u1i u1j u1ka u1ke u1ko u1l u1m u1n u1p up6čka u1ra u1re 4urg u1ri u1s 1usp u1š uše3s u1t u4th uth5o u1v ux5em u1z u1ž 2v1b 2v1c 2vč v1ča v1če v4čer v1či 2v1d ve4čl ve4čm ve4i ve4tin vetle6t v1f v1g vi5dv vid6va 1viv vi6žg. 2v1j 4vjo 2v1k 2v1m 2v1n vo5rd voz5le 2v1p 3v2pa v4pij v4pil v5skn v5šek 4všk 2v1t vt4k vz2 v2za 3v2zg 2v3zk 2vzo v3zp v2zu 1wa wo2 x1f 1ye 2y1f y1j y1l y1w 1z2a z6ane. za5uk za3vp za1z2 za5zd 2z1b 3zbir z1c 2z1č 2z1d2 zd5ju z3dv z1g z4gni z5got 2z1h 1zi z1ig 2z1is 4z5išč 2z1j 2z1k z3ku z5las z1li 3zlil 5zlit 5zliv zliz5 1zlj 3zlog z5lom 3zlož z1lu 2z1m 1zn 1zo z1ob 2z1od z1og z2ol z4om 2z1p 1z1r 4zredč 4zreš 4zrez 4zrež 4zri 4zru 2z1s z1š z1t 1zu z4uj 2z1up 2z1uz z1v2 z4ven z3vn 3z4voj z4vok 2z1z2 z1ž 2ž1b 2ž1c 2ž1č 2ž1j 2ž1k 4žmi .č8 .š8 .ž8 8ž. 8š. 8č.", ["length"]=6052, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=1068, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ca.lua0000644000175000017500000002647612161703335024644 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abcdeghijklnoprstuvwxy", ["data"]="cu-rie cu-ries gei-sha gei-shes goua-che goua-ches hip-py hip-pies hob-by hob-bies jeep jeeps joule joules klee-nex klee-nexs lar-ghet-ti lar-ghet-to lied lieder nos-al-tres ro-yal-ties ro-yal-ty vos-al-tres whis-ky whis-kies", ["length"]=225, ["n"]=26, }, ["metadata"]={ ["mnemonic"]="ca", ["source"]="hyph-ca", ["texcomment"]="% Catalan hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: cahyph.tex (2003-09-08)\ % Author: Gonçal Badenes \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % Hyphenation patterns for Catalan.\ % This is version 1.11\ % Compiled by Gonçal Badenes and Francina Turon,\ % December 1991-January 1995.\ %\ % Copyright (C) 1991-2003 Gonçal Badenes\ %\ % -----------------------------------------------------------------\ % IMPORTANT NOTICE:\ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ % -----------------------------------------------------------------\ %\ %%% ====================================================================\ %%% @TeX-hyphen-file{\ %%% author = \"Gonçal Badenes\",\ %%% version = \"1.11\",\ %%% date = \"15 July 2003\",\ %%% time = \"15:08:12 CET\",\ %%% filename = \"cahyph.tex\",\ %%% email = \"g.badenes@ieee.org\",\ %%% codetable = \"UTF-8\",\ %%% keywords = \"TeX, hyphen, catalan\",\ %%% supported = \"yes\",\ %%% abstract = \"Catalan hyphenation patterns\",\ %%% docstring = \"This file contains the hyphenation patterns\ %%% for the catalan language\",\ %%% }\ %%% ====================================================================\ %\ % NOTICE: Version 1.11 is identical to version 1.10 (issued on January 17,\ % 1995) except for the updated copyright notice above.\ %\ % The macros used were created for ghyph31.tex by Bernd Raichle (see the\ % German hyphenation pattern files for further details)\ %\ % This patterns have been created using standard, conservative\ % hyphenation rules for catalan. The results have refined running them\ % through patgen. In that way, the number of hits has been increased.\ %\ % These rules produce no wrong patterns (Results checked against the\ % ``Diccionari Ortogr\\`afic i de Pron\\'uncia'', Enciclop\\`edia\ % Catalana. The percentage of valid hyphen misses is lower than 1%\ %\ % Some of the patterns below represent combinations that never\ % happen in Catalan. We have tried to keep them to a minimum.\ %\ % *** IMPORTANT ***\ % \\lefthyphenmin and \\righthyphenmin should be set to 2 and 2\ % respectively. If you set them below these values incorrect breaks\ % will happen (specially at the beginning of foreign words and words\ % which begin with some prefixes).\ % *** IMPORTANT ***\ %\ % Please report any problem you might have to the authors!!!\ %\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ % \\message{Catalan Hyphenation Patterns `cahyphen' Version 1.11 <2003/07/15>}\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijlmnopqrstuvxyzàçèéíïòóúü", ["data"]="1ba 1be 1bi 1bo 1bu 1ca 1ce 1ci 1co 1cu 1da 1de 1di 1do 3du 1fa 1fe 1fi 1fo 1fu 1ga 1ge 1gi 1go 1gu 1ha 1he 1hi 1ho 1hu 1ja 1je 1ji 1jo 1ju 1la 1le 1li 1lo 1lu 1ma 1me 1mi 1mo 1mu 1na 1ne 3ni 1no 1nu 1pa 3pe 3pi 3po 1pu 1qu 1ra 1re 1ri 1ro 1ru 1sa 1se 1si 1so 1su 1ta 1te 1ti 1to 1tu 1va 1ve 1vi 1vo 1vu 1xa 1xe 1xi 1xo 1xu 1za 1ze 1zi 1zo 1zu 1bé 1bí 1bó 1bú 1bà 1bè 1bò 1cé 1cí 1có 1cú 1cà 1cè 1cò 1ço 1ça 1çu 1çó 1çú 1çà 1çò 1dé 1dí 1dó 1dú 1dà 1dè 1dò 1fé 1fí 1fó 1fú 1fà 1fè 1fò 1gé 1gí 1gó 1gú 1gà 1gè 1gò 1gü 1hé 1hí 1hó 1hú 1hà 1hè 1hò 1jé 1jí 1jó 1jú 1jà 1jè 1jò 1lé 1lí 1ló 1lú 1là 1lè 1lò 1mé 1mí 1mó 1mú 1mà 1mè 1mò 1né 1ní 1nó 1nú 1nà 1nè 1nò 1pé 1pí 1pó 1pú 1pà 1pè 1pò 1qü 1ré 1rí 1ró 1rú 1rà 1rè 1rò 1sé 1sí 1só 1sú 1sà 1sè 1sò 1té 1tí 1tó 1tú 1tà 1tè 1tò 1vé 1ví 1vó 1vú 1và 1vè 1vò 1xé 1xí 1xó 1xú 1xà 1xè 1xò 1zé 1zí 1zó 1zú 1zà 1zè 1zò 3l2la 1l2le 1l2li 3l2lo 1l2lu 1b2la 1b2le 1b2li 1b2lo 1b2lu 1b2ra 1b2re 1b2ri 1b2ro 1b2ru 1c2la 1c2le 1c2li 1c2lo 1c2lu 1c2ra 1c2re 1c2ri 1c2ro 1c2ru 1d2ra 1d2re 1d2ri 1d2ro 1d2ru 1f2la 1f2le 1f2li 1f2lo 1f2lu 1f2ra 1f2re 1f2ri 1f2ro 1f2ru 1g2la 1g2le 1g2li 1g2lo 1g2lu 1g2ra 1g2re 1g2ri 1g2ro 1g2ru 1p2la 1p2le 1p2li 1p2lo 1p2lu 1p2ra 1p2re 1p2ri 1p2ro 1p2ru 1t2ra 1t2re 1t2ri 1t2ro 1t2ru 1n2ya 1n2ye 1n2yi 1n2yo 1n2yu 1l2lé 1l2lí 1l2ló 1l2lú 1l2là 1l2lè 1l2lò 1b2lé 1b2lí 1b2ló 1b2lú 1b2là 1b2lè 1b2lò 1b2ré 1b2rí 1b2ró 1b2rú 1b2rà 1b2rè 1b2rò 1c2lé 1c2lí 1c2ló 1c2lú 1c2là 1c2lè 1c2lò 1c2ré 1c2rí 1c2ró 1c2rú 1c2rà 1c2rè 1c2rò 1d2ré 1d2rí 1d2ró 1d2rú 1d2rà 1d2rè 1d2rò 1f2lé 1f2lí 1f2ló 1f2lú 1f2là 1f2lè 1f2lò 1f2ré 1f2rí 1f2ró 1f2rú 1f2rà 1f2rè 1f2rò 1g2lé 1g2lí 1g2ló 1g2lú 1g2là 1g2lè 1g2lò 1g2ré 1g2rí 1g2ró 1g2rú 1g2rà 1g2rè 1g2rò 1p2lé 1p2lí 1p2ló 1p2lú 1p2là 1p2lè 1p2lò 1p2ré 1p2rí 1p2ró 1p2rú 1p2rà 1p2rè 1p2rò 1t2ré 1t2rí 1t2ró 1t2rú 1t2rà 1t2rè 1t2rò 1n2yé 1n2yí 1n2yó 1n2yú 1n2yà 1n2yè 1n2yò a1a a1e a1o e1a e1e e1o i1a i1e i1o o1a o1e o1o u1a u1e u1o a1é a1í a1ó a1ú a1à a1è a1ò a1ï a1ü e1é e1í e1ó e1ú e1à e1è e1ò e1ï e1ü i1é i1í i1ó i1ú i1à i1è i1ò i1ï i1ü o1é o1í o1ó o1ú o1à o1è o1ò o1ï o1ü u1é u1í u1ó u1ú u1à u1è u1ò u1ï u1ü é1a é1e é1o é1ï é1ü í1a í1e í1o í1ï í1ü ó1a ó1e ó1o ó1ï ó1ü ú1a ú1e ú1o ú1ï ú1ü à1a à1e à1o à1ï à1ü è1a è1e è1o è1ï è1ü ò1a ò1e ò1o ò1ï ò1ü ï1a ï1e ï1o ï1é ï1í ï1ó ï1ú ï1à ï1è ï1ò ï1i ü1a ü1e ü1o ü1é ü1í ü1ó ü1ú ü1à ü1è ü1ò a1i2a a1i2e a1i2o a1i2u a1u2a a1u2e a1u2i a1u2o a1u2u e1i2a e1i2e e1i2o e1i2u e1u2a e1u2e e1u2i e1u2o e1u2u i1i2a i1i2e i1i2o i1i2u i1u2a i1u2e i1u2i i1u2o i1u2u o1i2a o1i2e o1i2o o1i2u o1u2a o1u2e o1u2o o1u2i o1u2u u1i2a u1i2e u1i2o u1i2u u1u2a u1u2e u1u2i u1u2o u1u2u a1i2é a1i2í a1i2ó a1i2ú a1i2à a1i2è a1i2ò a1u2é a1u2í a1u2ó a1u2ú a1u2à a1u2è a1u2ò e1i2é e1i2í e1i2ó e1i2ú e1i2à e1i2è e1i2ò e1u2é e1u2í e1u2ó e1u2ú e1u2à e1u2è e1u2ò i1i2é i1i2í i1i2ó i1i2ú i1i2à i1i2è i1i2ò i1u2é i1u2í i1u2ó i1u2ú i1u2à i1u2è i1u2ò o1i2é o1i2í o1i2ó o1i2ú o1i2à o1i2è o1i2ò o1u2é o1u2í o1u2ó o1u2ú o1u2à o1u2è o1u2ò u1i2é u1i2í u1i2ó u1i2ú u1i2à u1i2è u1i2ò u1u2é u1u2í u1u2ó u1u2ú u1u2à u1u2è u1u2ò é1i2a é1i2e é1i2o é1i2u é1u2a é1u2e é1u2o é1u2i é1u2u í1i2a í1i2e í1i2o í1i2u í1u2a í1u2e í1u2o í1u2i í1u2u ó1i2a ó1i2e ó1i2o ó1i2u ó1u2a ó1u2e ó1u2o ó1u2i ó1u2u ú1i2a ú1i2e ú1i2o ú1i2u ú1u2a ú1u2e ú1u2o ú1u2i ú1u2u à1i2a à1i2e à1i2o à1i2u à1u2a à1u2e à1u2o à1u2i à1u2u è1i2a è1i2e è1i2o è1i2u è1u2a è1u2e è1u2o è1u2i è1u2u ò1i2a ò1i2e ò1i2o ò1i2u ò1u2a ò1u2e ò1u2o ò1u2i ò1u2u ï1i2a ï1i2e ï1i2o ï1i2é ï1i2í ï1i2ó ï1i2ú ï1i2à ï1i2è ï1i2ò ï1i2u ï1u2a ï1u2e ï1u2o ï1u2é ï1u2í ï1u2ó ï1u2ú ï1u2à ï1u2è ï1u2ò ï1u2i ï1u2u ü1i2a ü1i2e ü1i2o ü1i2é ü1i2í ü1i2ó ü1i2ú ü1i2à ü1i2è ü1i2ò ü1i2u ü1u2a ü1u2e ü1u2o ü1u2é ü1u2í ü1u2ó ü1u2ú ü1u2à ü1u2è ü1u2ò ü1u2i ü1u2u .hi2a .hi2e .hi2o .hi2u .hu2a .hu2e .hu2i .hu2o .i2è .i2ò .u2è .u2ò .hi2é .hi2ó .hi2ú .hi2à .hi2è .hi2ò .hu2é .hu2í .hu2ó .hu2à .hu2è .hu2ò gu2a gu2e gu2i gu2o qu2a qu2e qu2i qu2o gu2é gu2í gu2ó gu2à gu2è gu2ò qu2é qu2í qu2ó qu2à qu2è qu2ò gü2e gü2é gü2í gü2è gü2i qü2e qü2é qü2í qü2è qü2i a1isme. e1isme. i1isme. o1isme. u1isme. a1ista. e1ista. i1ista. o1ista. u1ista. a1um. e1um. i1um. o1um. u1um. .antihi2 .be2n .be2s .bi2s .ca2p .ce2l .cla2r .co2ll .co2n .co2r .de2s .di2s .en3a .hipe2r .hiperm2n .in3ac .in3ad .in3ap .in3es .in3o .inte2r .ma2l .mal1t2hus .pa2n .pe2r .pe3ri .pos2t .psa2l .rebe2s .re2d .su2b .sub3o .subde2s .supe2r .tran2s g2no p2si p2se p2neu g2nò p2sí .ch2 .th2 ein1s2tein ru1t2herford ni2etz1sc2he 3exp 3nef 3nei 3pr 3ser a3ne a3ri bi3se des3ag des3ar des3av des3enc e3ism e3le e3rio e3ris es3aco es3af es3ap es3arr es3as es3int ig3n in3ex n3si o3ro qui3e s3emp s3esp sub3a ui3et o3gnò", ["length"]=5195, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=869, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nl.rme0000644000175000017500000001101111761001300024633 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Dutch hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: nehyph96.tex (yyyy-mm-dd) % Author: Piet Tutelaers % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % PURPOSE: 8-bit hyphenation patterns for TeX based upon the new Dutch % spelling, officially since 1 August 1996. These patterns follow % the new hyphenation rules in the `Woordenlijst Nederlandse % Taal, SDU Uitgevers, Den Haag 1995' (the so called `Groene % Boekje') described in section 5.2 (Het afbreekteken). % % The main differences with our earlier patterns based upon the % CELEX dictionary are: % (1) provide 8-bit patterns based upon the T1 character encoding % (the encoding for DC/EC compatible TeX fonts) % (2) don't hyphenate if this results in a syllable of one letter % before or after the hyphen (hence hyphens in a-drenaline, % studi-o, mensa-pen and vide-oachtig are invalid) % (3) handle words derived from other languages (`bastaard % woorden') according to the new rules % % Like the CELEX patterns these patterns don't hyphenate: % (4) in a changing syllable (menuutje can not be hyphenated as % menu-tje) % (5) in words that have different hyphenations according to % there meaning (buur-tje/buurt-je) % % COPYRIGHT (C) 1996: Piet Tutelaers % % ----------------------------------------------------------------- % IMPORTANT NOTICE: % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % ----------------------------------------------------------------- % VERSION: 1.1 (November 1996) Copyright changed March 2000 % % AUTHOR: Piet Tutelaers P.T.H.Tutelaers@tue.nl % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-af.hyp0000644000175000017500000000021111761001300024625 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-af.rme % used: a d l n s \hyphenation{ sandaal}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-us.rme0000644000175000017500000000343611761001300024665 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Hyphenation patterns for American English (more info about the licence to be added later) % This file has been renamed from ushyphmax.tex to hyph-en-us.tex in June 2008 % for consistency with other files with hyphenation patterns in hyph-utf8 package. % No other changes made. See http://www.tug.org/tex-hyphen for more details. % ushyphmax.tex -- patterns for more hyphenation pattern memory (12000+). % Also known as ushyphen.max. % % version of 2005-05-30. % Patterns of March 1, 1990. % % Copyright (C) 1990, 2004, 2005 Gerard D.C. Kuiken. % Copying and distribution of this file, with or without modification, % are permitted in any medium without royalty provided the copyright % notice and this notice are preserved. % % Needs extended pattern memory. % Hyphenation trie becomes 7283 with 377 ops. % % These patterns are based on the Hyphenation Exception Log % published in TUGboat, Volume 10 (1989), No. 3, pp. 337-341, % and a large number of incorrectly hyphenated words not yet published. % If added to Liang's before the closing bracket } of \patterns, % the patterns run errorfree as far as known at this moment. % % These patterns find all admissible hyphens of the words in % the Exception Log. ushyph2.tex is a smaller set. % % Please send bugs or suggestions to tex-live (at) tug.org. % % 2005-05-30 (karl): in the past, ushyphmax.tex was a file containing % only the additional patterns, without the \patterns command, etc. % This turned out not to be very useful, since in practice the TeX % distributions need one self-contained file for a language. Therefore, % ushyphmax.tex now contains both the additional patterns from % Dr. Kuiken, and the original patterns and hyphenations from Knuth's % hyphen.tex. % % The Plain TeX hyphenation tables. context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-deo.pat0000644000175000017500000031232612161703335025023 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-deo.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z ß à á â ä ç è é ê ë í ñ ó ô ö ü \patterns{ .ab1a .ab3l .abo2 .ab3ol .ab1or .ack2 .ag2a .ag4r .ag2u .ai2s .akt2a .al2e .al5l4en .al4tei .alt3s .ampe4 .amt4s1 .an3d2 .anden6k .and4ri .ang2 .an3gli .ang4s2 .angst3 .an3s .an4si. .ans2p .an4tag .an3th .an3z2 .aos4 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .ar6t5erh .as6sest .as2t .ata1 .at4h .au3d .au4f3 .aufs2 .au2s1 .ausch3 .au6stes .ax2 .äm3 .är6schl .ät2s .äu3 .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .bus5sen .bu7sser. .ch2 .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .derma3 .dermas6 .de3sk .dien2 .do2mo .do1pe .dorf1 .dü1b .ebe2r1 .ehe1i .ei3e2 .ei4na .einbus6 .einen6g .ei2sp .ei4s1t .ei2tr .eke2 .el2bi .em3m2 .en1 .en4d3er .en5der. .en2d3r .en2gl .enn2 .en2t3 .epi1 .ep3p .er8brecht .er2bu .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .ers2 .er8stein .erster6 .er8sterb .er8stritt. .er8stritten. .er4zen4 .esel4s .es3p .es2st .es2t .est4e .est2h .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fe4sta .fi4le. .fi4len .fi2s .flö8s7se. .flö8s7sen. .flö8sses .fs4 .fu2sc .ga2t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .ge3r2a .ge3r2e .ge3s2 .get4 .ge3u .grif8fes .guss1 .haft3s .hal2s .hau2t1 .he2 .her3an .he3ri .he6r5inn .ho4met .ia2 .il3 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ken6num .ker3s .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4ve. .lo4g3in .lo3ver .lö4ss .lös3se .lu4str .ma3d .ma3la .mal4e .ma4str .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi2t .mm2 .näs5c .ni2e .nob4 .no2c .no2s .no4th .nul2 .nus2 .ob1a .obe2 .ohr5s .om2a .oper4 .or2a .ort2 .orts3e .ort4st .os5t6alg .oste2 .ost5end .osten8de .oste6re .ost3r .ozo4 .öl3l .pa4r1e .par3t4h .pe4c .pe4ste .pf4 .ph2 .poka2 .po4str .ps2 .rabe4 .ra3me .ra4sp .ra4s3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .ri2as .rich5te .ro4a .ro3m4a .rö2s1c .ru5s6ses .rü1b .rücker6 .rü4ss .sali1 .sas2 .sa5sse .säs4 .sä5ss .sch4 .scho7s8se. .scho7s8ses. .sen3s .ser2u .se2t1 .sha2 .si2te .ski1e .spas4 .spä5s4 .spiege8lei .st6 .sto4re .stras4 .sucher6 .tan4k3l .ta2to .te2e .te2f .te3no .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .to4nin .to4pl .to2w .tras3 .tra4ss .tri3e4s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .une4 .un3g .uni2t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .weg5s .wei4ta .wi4e .wor2 .wort5en6 .xe3 .ya4l .zeit3s .zel4la4 .zelle4 .zel6lei .zi2e .zin4st .zol2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k aar5sc aas1t aa2th aa2t3r aat4s1 2a3au a1ä a1b 2aba ab1auf ab1ä ab2äu 1abd ab1eb abe1e ab1eil 2abel abe2la a3beri ab1er2k ab1er2r ab1er2z ab3esse abes2t ab1eß 2abet 2abew 1abf 3abfi 1abg 1abh 2abi a3bil ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu abma3s 1abn a2bo. ab2of 1a2bon 2abor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abs4t2 2abst. ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in 2ack. ackmu4 ackmus3 ack2se ack3sl ack3sta4 a1cl a3co acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag adai4 ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ades2 ade3sp ades6s 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3sz ad2t1 adta2 2adu 2a1e1 ae2b ae2d ae2i a2ek a2ela a2ele ae2o3 ae2p 3a2er2o ae4sc a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r aft5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1am ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ages5s ag3esse age6stem ag3gl 3aggr 3a2git 2a2gl ag4la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3sah ag4sam ag3sc ags3p ag6spo ag4sti ag2s1tr 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh a1h2i ahin3 ahl3a4 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1o2s a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr4tri 2ahs ah2ta aht3h ah2t5r aht1s a1hu ah1w a1hy ai3a4 aian3 aid4s aids1t ai1e2 aif4 ai1fr ai3g4 a3ik. ai3ke ai3k4r ai2lo aim2o ain4a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e aiss2 ais3sen ais5st ait4 a3iv. a3ivl a3ivs a1j ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr ak3rau 3akro3 2aks ak3sh 2akta 2aktb ak3te ak4tei 2aktik ak2t3r ak3t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2a5la. al1ab ala5ch2 al1af ala2g al1age a3lal al1am alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala2s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 1algo 2ali ali4ene al2imb ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 al2l1ab alla3d al2lan al2l3a4r al6later al2län al3läu al4lec alle4gi al4leh al5lein al3lend all5erfa al3les alle3se al2leu 1allgä alli5er. alli7ers. al2lob al2lo2c al2lo2k al4lo2s al2lö2 all3öse al2luf allu4s al2lü4s al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1ope al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al2sum al3sun al4tak al3tar alt3eig al4t3erf alt1op al2tö al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä am2e 2ame. a2meb 2amel am4e2n1 amer2a am3erf a2meri ame3ru a4mesh a3met a2mew a3mi. a3mie 2a3mir a3mis ami3t2a ami3ti 2aml 2amm. am2ma2c 2ammal amma4n am2mar am2mas amma4sc am2maß am4ma4te am2mä ammen8ge. am2min am2mit 2amml am4mod 2ammt ammu2 amm3unt am4mü a2mö amp2fa2 am3pr 2ams am4schl 1amt. am2t1a am2t1ä am2tel am4t3ern am2tö am2t3r am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2anas an4at an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande4sc an2dex an4drau an2d3rü and4sas and6spas and6s5paß and2su 2andu and1ur 2ane an3ec a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi anft3s an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang3sc ang6s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl anma3s2 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 1anr 1an3s2ä 1ansc ans2en an2seu 2ansh 2ansk an3skr an3s1pa 1anspr ans2te an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr 2anto anton4 3antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i4 a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2a3pa 2ape a2pef a2pé a2pf ap2fa a3pfl a3phä a2ph3t 2ap3l ap4la ap2n a2pot ap2pf 3appl 2apr 3apri ap2str 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3ra3li 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein 4arem a3ren 4aren. aren4se are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2a3ri ar2ia ari3e4n ari3erd ari3erg ari5ers. ar1im arin3it a4r1int a4rinw ar2kal ark3amt ar2k1ar ark3aue ar2kl ar4k3lag ar2kor ar4k3ri ark3sa ark3she ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arp 2arr ar2r3ad ar2rek arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar3t2e artel6li6 ar2the artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as2ad as1ala asas2 asa3sse as3au asau2s1 a2sca a4schec asch3la a2schm a3schu 4a3s2e a4seb as3e2m a5s4es a4sex 4ash a4s3ha as4hi asin2g 4a5sis asi4st a3skop a4s3l a4sn a1so1 as1o2f a3sol as1or as1p a4s2ph as2pi a4spl as2po a1spu as3s2a ass2e as2s3ei as3sel as3ser asserma6 as3s2i as2s1p as4st ass1ti ass1to as5str as5stu 2asta a4stec a4s3tep as2ter a4stese 2astr as4trau a4strä ast3räu a2s2t3re a4strol a2stum a3su a4sw aswa2s 3a2syl aße2 aßen3 2a1t at1ab at2a1f at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c a2teb ateien4 at1eig a4teli at2en a2tep ate2ru atex3 at2h at3ha 4athe1 3athl 4a3ti atingma5 3atm 4atmus ato4man 4ator a2t1ort a2t1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si ats1p at3ta 3attac at4tak at2ta2l att3ang at4tau at2tä at4tec at2tei at3t4hä at2t3rä att3s at3tu atu2n atz1er at4zerk at4zerw at2z1i at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au3en. au2ere au5erein au2fa auf1an 3aufber 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 2auh au3ha au2hu 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s2 4aun au3n4a aun2e au4nei au2nio au1nu a4unz 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 1ausf 1ausg 1ausl au2so au2spr 1ausr auss2 3aussag au3sse aus4se. au8ssende au2sta 2auste au4stec aus3tie aust2o aus3tri 1ausü 1ausz au3ße a4ut au2t1äu au4ten4g au4t3erh 1auto 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4a3vi a2vr av2s 2a1w awi3 awi1e a1x ax2am ax2e axi2s 2a1ya a1yeu aysi1 ay3t 2a1z a3z2a3 az2o az2u ä1a äand4 ä1b ä5be ä2b3l äb2s ä1che äche1e ächenma5 ächenmas8 ä1chi äch3l ä2chr äch2sp ä1chu äck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf2s äft2 äft4s ä1g ä5ge äge1i äge2ra ä2g3l äg2n ä2g3r äg4ra äg2s äg3sc äg3str 1ä2gy äh1a 2ä3he ä1hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2äh2s 2äh3t ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl ä5le äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml äm2ma4 ämmas2 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l är4ment ärme3s är1o2 ä1rö ärse2 är2seb är2si ärt4e är2th ärt4s1 ä2rü är2zw ä3s äs4c äs4e äse3g2 äser4ei äse4ren äser2i äse3t ä5si ä4sko äskop2 äskopf3 äs2kr ä4sl ä4s1p äs2s äs4s1c äss2e äss3erk ä5sses äs4s1t äst2 äs2te ä4str ä4sw ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ä2t2h ä1ti ä1to ät1ob ät3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l äts1p ät2s1t ät4s3te ät4sti ät2tei ät2tr ä1tu ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äu4g3l 2äul 2äum äu2ma äum2s1 ä2un äun2e äu1nu 2äur äu1s 2ä3us. äu4schä äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äu3s2s äuss1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs2 b1a2dr 2b1af bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4lan balle4b bal6lerg bal4li4g bal4lok bal3lö3 2b1am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en ba4r3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2str ba4t3ent bauer4l bauer4s bau3g bau3s2k bau3sp ba1yo 3b2äc bä1ch b2är b2ä4s3 4b1b bbe4p b4be2se bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 1be. 3bea be3an be3ar 3beb b2ebe 1bec be1ch be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime be1imm b2ein be1ind be1in2h bei3s2 beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la bel3lä bel3li be2l3ö bel3sz bel3t4 1bem bema5sse bemas8sen 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 3bensv 2bentb b2enti bent4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran beras4s berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss berma7sse bermas8se. berma8ssen ber3na b1ernt be1rop berö4 ber3st4a be3rum ber2zö 3bes bes2a besä5s be2s1er be5slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol be4stor best4r be3s2ze 3bet be2tap be3tha bet2to be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 bflö4 bflös3 2b1g2 bgas1 bga4st bge3 bges2 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bie4str bik2a bi2ke. bi2kes bil2a bi2lau 2b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis4s1c bis3si bi2stu bi2stü b2it. b2ita b2ite bit4ta4 bi2tu bi3tum b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7s 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig b4lis b2lit 3blitz b2lo b4loc b3los2 blo3sse blös4s 2blun 3blut 3blü 2b1m bmas2 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo1ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig b1ort bor2t3r bo2sc bo3se bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra4sp bra4ss brast4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif b3rek 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio bro1 b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü brü4ss 4b1s b2sad b3sand bs3ar bsas2 bsa3sse bsat2z b3sä b4sär b5sc bs2ca b6schan b6schef bs4cu b3se. bs1e2b b3sel. bs1ele bse2n1 b3sen. bs1ent bs1er b2serf bs3e4r3in b2sers b3ses b3set bsi2t b4sl b2s1of bs1op bso2r b2sö b3s2pi bs2pl b3s2pu b4ss2 bs2t bst1a2b bst3ac bs3tag bst1ak bs3tät bst1er b4stern b2s3tip b3sto b4stob b4stod b3stö b3stra b2s3trä bs3treu b2st3ro b3stü b4stüb b2s1un 4b1t b3ta bta4st3r b5te b2th bt4r bts2 btü1 bu3ches bu2chi bu2e3 bu2f 2b3umk bunde4s b3ungn b2urg bu3r4i 2burn burt4s bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu4sses bu6s5term bu2s1tr bu2s1u bü1c bügel3e bü3s4 2b1v 2b1w bwel3 by1 by3p bys2 2b1z2 bzeit1 bzu1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t c4an ca2pe 3car car3n carri1 ca3s2a3 cas2t ca3t4h ca1y2 cä1 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen ce1nu 1cer cere3 ce1ro ce3s2h 1cet 2ceta ce1u 1cé c1f c4h 4ch. 2chab ch3a2bi 2ch1ak ch2anb 3chanc ch1ang ch3anst 2chanz 1chao 2char. 1chara 3charta cha2sc 1chato ch1ärm ch1äs 1châ 2chb 6chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 2chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 2chre chre3s ch3rh 1chron 4chs ch4stal chst3ri 2cht 2chuf 2chuh 2ch1unf 2chunt 2chü 2chv 2chw 5chy 2chz ci1c ci1es cil3l ci2s c1j 4c4k ck1a ck3an cka4r1 ck1ä ck1ehe ck1ei cke2ra ck2ere ck1erh ck2ern ck1err ck1ese ck1id ck1im ck1in ck3l ck3n ck1o2 ck3r ck4stro ckt2e ckt2i ck1um3 ck1up c4l2 cle4a clet2 clo1 1clu c2m2 1co co1ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cor3t cos4 co2te 2cp c1q 1c4r2 cre2 cre4mes cry2 2c1s2 c2si 4c1t cte3e cti2 cti4o ctur6 3cu cu2p3 cussi4 1cy c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho 4d3achse d1af d1ag dagi2o dah3l da1ho 3dai2 da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d2amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ars d1art 2dart. da2ru d2arw d1arz dasch4 da3s2h 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c dbu3s2 2dc d1ch dco4r 2d1d2 ddar2m d3dä d3dh d5do 1de de2ad de3a2t de3b4 2d1e4ben 3dec de1ch de3e4 2d1eff deg2 de3gl dehe2 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2d1elek 2delem 2delfm del4lan dell3eb del4lei del4ler del2lö2 de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del3t4 dem2ar 2d1emp d2en. de4n3end 4denerg d2enh de2ni den4k3li den2kn 4den4sem den4s3en den6s5tau den3th 2dentw de1nu 2deol de1on depi4so d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t d4erfi d2erh 4der4höh 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop derö4 der3r 4der4sat der4spa der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum d2es. de2s1a de4sa4g de4sam des3an des1än de4seh des1en1 des1et des1in 3desk des1o de2sor de2s1p des5s2 dest5alt de4stam de6stant de4stei de4stit dest5rat de3stri de3stro de2s1u deten4t 2d1etw de1un de1url de3us d1exi de2xis 2dexp 2d1f4 2d1g2 d2ge. dge2ta dge4t1e 2d1h2 d2his 1di di4ab di2ad di4am 3dic di1ce dich5ter di2e di3e2d di3end die4neb di3eni di3ens. die4s3c diet3 die2th dige4s dik2a dil2s3 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion5s di1p di4re. di2ren di2ris 2d1irl di2sp di3s4per 2d1isr dist2 di2ta di4teng di4t3erl di4t3erm di4t3ers di2t3r dit1s di2tu di5v diz2 2d1j 2d1k4 4d1l2 d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 dni3v d1ob d2oba 2dobe dob4l d2obr do1chi 2d1o2f doll2a do2mar do5na doni1 do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta dor4ter d2os. dos3s dost1 do4sta dot6h do3un d1ö dö2d dö2l3 dölla3 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri 3d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4ril d4rin. 3d4risc 2driß 3d4rit 4dritu d3rob d3roc 2d3rod d4roi drom2 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh drunge3 2d5rut drü1b 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse2t d2s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pa4s d2spä ds2po d3spri d2spro ds2pu dss2 ds3si dst4 d4stabe ds3tauf d4s3täti d4stea ds2til ds2tip d2s1tis d2stod dstras4 ds1ums d2sun ds2zen 2d1t dta2d dtam3m d3tea d2th d4thei dt3ho dto2 dt3r dtran2 dt5s2 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf 2d1ungl dun3ke dun2kl 2dunr dun4st3r 2dunt 2dunw du1o 5dur2c 2d1url 2dursa du4schn du4schr du4schw 2düb 3düf 3dün 2d1v2 2d1w dwa2 dwest1 dy1 dy2s1 2d3z2 2e1a e3a2b eab3l ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei e4aler. eal5le eal3lö eallö3s e2alti2 e2ame eam3m eam1o eam3t ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas5s eat4e2 eater1 e3ath eat3s2 e3at3t4 e3au2f e3aug eaus3s eau3st e3ä4 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en e3ben. ebens3e e3ber ebe4rel ebert4 2ebet 2ebl eb2laß eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebö2s 2ebr eb3rei eb4ru eb2s eb6sche ebse2 ebs1i ebs1o ebs1p ebs3pa eb4stät ebs3t2h eb4s3ti eb4s3tot eb3str ebs1u 2e3bu ebus3s ebu2t1 2eca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a eck3se eck4sta 2eckt 2e1cl 2eco eco3d 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e eden4se eden4s3p ede2r edert2 edi4al 2edip edma3s2 e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho eede3 eed3s2 ee1e e1eff eef4l eeg2 e1ei ee1im eein4se eei5se eel2e e1e2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi eera4 ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere4s1 ee4ret ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ees2 ee3sh ees3k ee3ta ee4tat ee2th ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat efäs4 efä5sse e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e3fen. e2fent ef2er 2eff. ef2fä2 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4s3to ege4str ege1u e2glo e2glu e2gn eg3ni egro5sse eg4sal eg3se eg4sei egs3e4r1 egs2pe eg4sto egs3tü eg2th 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä ehäs3 e1he eh4ec eh1eff eh2el ehe5na ehen2t3 1e2hep e3her ehe1ra e1hi eh1int ehis4 eh1lam eh1lä eh3le ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1ec eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of eh2s2 eh3se eh3sh eh3si eh3so eh3sp eh3sta e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3err 2eidn ei3dra ei1e ei3el 4ei3en eienge4 eie4s eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 ei4l3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom ein3n2 1einna ei2n1o2 1einri e4insa einsas4 einsa7sse 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei6schin ei4s3erw eis2pe ei3spru ei3s2s ei2str eistra6s ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek2u e3k2w e1la ela4ben el3abi el2abt el3a4der e3ladu el1af ela2h e2l1ak el3al e2l1a2m e4landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a4r el3ari el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e2ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r 2eli e2l1id e3lie e2lim eli2ne el1ita 2elk elks2 elk3sc ella3d el3lan el2lap ella2s el2lä el3läd ell3ein el3ler el2leu el3lie el2lil el3l2in el2log el2lot ell3sp el2lu2m el2lü 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri el2sum elt2ak 3eltern el3tes elto2 elt3r elt1s2 elt3se elt3sk 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2mans 3emanz emas8sens em4d3a2 e3m2en emen4t3h e6mentsp e2m1erw 1e2meti e2m1im emi5n2a em1int emi3ti 2emm em2map emma3u e2mop 3empf4 em3pfl em2sa em3se em2spr em3t2 3emul 2emü emü3s4 e2n1a 4ena. 2enac en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en2ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när enä4s enbu4s3 en2ce. en3d2ac en2dal endermas8 en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1ec e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e2n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng1s eng3sc eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r eno2s enost3 e3not eno2w 2e1nö en1ö2d en3sac ensas2 ensa5sse en2sau en5sche en2seb 3ensem ensen1 en2sep en3ska en3s2po enst5alt en4s3tät en6s5test 2ensto ens5trie e4nt ent4ag ent4ark 1entd en2teb en4terb en3tes 1entf 2entfo 1entga en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eos2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep2pin ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a6si era4sp era4s3s er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1ä4s erb2e er3br erb2sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in erd3erw 4ere. er1eb e3rech er3echs er1eck er1edi ere4dit er1eff e2r1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3r2em 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh e4rerl 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess er1eß ere4t er3eti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3els 1ergol 4ergrem e2rh 1erhab 4erhals er3he 4erhöhe er3hu 4erhü 2eri e2riat e3rib 4e3ric er1i2de e3rie eri3e4n3 eri5ers. e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä 2erkli er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row e1roz erö2d 2erök er1ös er3p4 er3rä erri3er 2errü ers2a ersch2 er3se er5sen er3s2i er3sk ersma3s4 er5smo er3sn er3sp er3sto er3sz ert2ak er6terei er4t3erf er4terh er4ters er2tho 4erti ert3ins ert3s2e 2ertür 2eru eruf4s er1u2m er1und er1uns er3uz erü4b 3erweck e1s e4s3ab e3sac esa2d es2an es4and es3ant e3s2as esa3sse esas6sen e4s3ato esäs4 es2äu 2esb e3sc es2ca es3cap es2ce esch2 e4sco e4scu e3se. es1ebe es3ehr e2sein es3eva 2esf 4esh es3ha es4har esi1er e3sig e2s1il es1ini e4s3ins es3int es2kat e4s3ke e4sky e4s3l es4log 2esm e4sn es2ort es2ö 2esp e3s2pek e3spi e3s2por e3s4pra e3s2pu 2esr es2sau 4essem ess4e3re ess3erg es3si 2esso es2sof es2s1pa es2spu es4ste estab4b est1ak e3stan e4starb 1e2stas es2tau es2te e4st3eng e4st3erh e4st3ess e5stev e3sti e4stip estmo6de e2stod est3ori 2estro es3trop es2tu e3s2tü es2ty e2s1um es1ur e4sw e3sy eße3r2e e1t e3ta. etab4 etal4la4 etal6li6n et1am 1etap etari1 et4at et1äh e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of e2torg 2etr e4traum et3rec e2tres etsch3w et1s2p et1su etta2 et2tab et2tad etta3ge et2ta4s et2tau et2tä et2tei ette4n1 et4teu et4th et2tö4 et2t3r et4tro ett3sz et2t1um et2tur et2tü4 etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif eu2e5sc 2euf eu2ga eu4gent eu3g2er eug1s2 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu1p2 e2u3r2e 1euro eu1s4 eu3sp eu3ss eust4 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo ev2s e1w 2ewa e3wä4 ewä6s 2ewe e2we. e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey2n eys2 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p 1fa 3fa. fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho fa2ci f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl falla2 fal4lei fal6lenk fal6l5er6k fal2li4 fal6scha fal6schl fal6schm fal3te 3fam f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br 2f3arc 3fari farre2 far4rec far4reg f3art 2f3arz 3fas. fa3s4a fa3sh f3at fa2to 2f1auf f3aug fau2s f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä4s fä6s3ser fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1ei3s fek2ta fe2l1a fel4da fel2dr 2f1e2lek fe2l1er fe2les fel3la fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fens2t2 fen6stri f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. fers2t f2ert f1erw fes4t fe2st1a fe4st3ei fe2str 2f1eta fe2tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ffa2b ffa2ce f3fal ff1ans ff3ar ff4arb ff4art ffa4s ff1au ffa2z ff2e ffe2e f2f3ef ff3ei ffe1in ffel3l ffe2m f2f3emi f2fetz f2fex f2fil ffi2xi ff3li f3flu f3flü ffo2 f2fö f3f4rä ff2sa ff2sp ffs1ta 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni 2f1int fi2o fi3ol fi2r fi3ra 3fis fis4a fisch3o fisch3w fi3so fis2p fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f5land f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop flo7s8ses. 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger flus3se f4lü f5lüd f5lüm 2f1m2 fma2d fmas2s fma3sse 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin for4m3a4g forni7er. for4sta for4sti for4t3ei for2th for2t3r fort1s for3tu 2f1o2x 1fö 2fö2f 2f1ök 2f1öl 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad f1rah fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein4 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc fri6ster f3roc 1f4ron fro2na fro2sc f3rot f3ru f3rü 4f1s fs2amm f2san fs3ar f2s1as f2sauf f2saus f2saut fsä4 f3sc f4sce f4schan f4schef f2s1e2b f4s3ehr f2s1em f2s1ent f2s1er fse2t f2s1eta fsi2d f3s2kie f2s1o2 f3span f2s1pas f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 f2stas f4s3täti f5stel f2stip f2s1tis fst4r f4s3tres fs1trü f3stü f4s3tüte f2sty f2s1un f3sy 4f1t f2ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f2t1ent f2t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f2t3ro f2trö f3t4ru fts1 ft2sa ft4sa4g ft4sam fts2c ft4sche ft2se4 ft4s3eh fts3el ft2si ft4stä ft4ster ft4stes fts2ti fttra4 f2tum ft1url ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2 fu3sse fus6sen fu4sser fuss1p fus4s1t fu2ß1er 3fut 1fü 2füb fü2r fü3s4 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1ch 2gadl 2ga2dr ga1fl ga1k ga2ka gal2a 2g1a4lau g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2s ga3sc gas3ei ga4sem ga3sp ga4spe ga4spr gas5s ga3s6ses gas3tan ga4st3el ga3str ga4stra4 gastras5 gas4trä ga4stre gas1tu gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs2 gä4u 2g3b2 gbau5s gber2 gbi2 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is4 2g1eise2 gei3sh gei4sta 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2g1e4lek geler3ö ge4l3ers ge4less gel3l2a gel3le ge3lor gel3sa gels2p gels2t gel3sz gel3t2a ge3lum ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe genma7sse. gen3n gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t germas6s ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer ges2c ges3elt ge2s1er ge3s2i ges2p ges4pi gess2t gest2 get2a ge3tan 2getap ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga2t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gia2s gie3g gi2e1i gi2el gien2e1 gift5s gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland gla4s3ti gla4stu 3g2laub 4g1lauf g1läß 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu2 2g3luf 2glun 4glu3s g2lut g1lüg g2ly 2g1m2 gmül3 g1n 2gn. g2n2a g4na. 2gnac 4gnah g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no1 g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i2 gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs5c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g3rek g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 gros2 2g3rose gro5sse. gro7ssen. gro7sser. gro5sses g4roß gro4u 2gröh g4ruf 2g3rui 2g3rum 3g4rup grus2s gru3sse 2grut 2g3rüc 3g4rün 4gs g2sa gs1ac gsa2d gs1af gs1ag g4s3a2k g3sal gs3all g4salt gs3ama g4s1amb gs3an gs3ar gs1as gs1ä g4sca g4sce gsch4 g4schef gs3cr g2s1e2 gse3e g3s2eil g3sel. gs3eli g3seln gsen1 g4ser g4seu g2s1i gsi2d g3sig g5sil gs3l gs1o2 gs1p4 g3s2pek gs4pie gs3pl g5s2por gsrat4 gs3s2 g3star gs1tau g4s1tä g5stäm g5stel g4stemp gst3ent g4sterm gst3err g4s3test gst2he g3sti gs1tis g3sto g4ston g4s1tor gs1tot gst4ra gst5reit gst4ri gst5rit gst3ros gs1trü g3stun gs1tü gs2tüc gs1u g3sy 4g1t g3te gti2m gt4r gt2se 1gu gu1an. gu1ant gu1as gu4d3r gu2e 2gued guet2 2g1u2f 2g1uh gu1ins gu1i4s 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2uns 2gunt2 3gur 4g1url gurt3s gu2s3a guschi5 gus2sp gus4st gu3sti gu2ß1 gu2t gut1a gu4ted gu4t3erh gut3h 2güb gür1 gü3st 2g1v 2g1w 2g3z2 3haa hab2a hab2e ha2cho ha2del ha4din h1adle haf3f4l haft2s hafts3p h1ah 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal4lei hal6lerf hal4leu hal4lok h1alp halt5r h1amt h2an. 2hanb h2and han2da han2kr h4ann 2hanr 2hant hao2s h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 ha2ß1 hatt2 hau5f6lie 2h1aufm h1aukt hau2sa hau2sc hau4spa hau4ss haus5sen hau4s3ti hau4sto h2aut. hau6terk 2hauto hau2tr h1äff h1ärz hä4s hä5sc hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad hea5t he3be he4b1ei he2bl he3br he5ch2e he1cho h3echt hed2g he3di he2e3l hee2s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1i4st heit4s1 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hell3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk hen3s2t2 h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b 2herap he3ras herau2 he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm herma3s he3ro he4r3o4b h1erö hers2t hert2 her3th her2z1w he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x2a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 4hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin2t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro his2a hi2se hi2spa hi3ti 2hiu 2h1j 2h1k4 hklo3s 4hl hl2ag hlam8meng hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läß h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit hl3l hlle3b hlma3s h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös3 hlö4ss hl2ser hl3sku hl3slo hlst4 hls2te hl2sto hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mas hma3sse h3maß h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3meist h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s1p h2mu h3musc h3musi 2hn h2na h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stra8s h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hns2t hnsuch4 hntra4 hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2c hoch3 hock3t 2hod hoe4 ho2ef ho4fa hof3fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hols h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo ho1ra hor3d 2h1org ho3sl ho2sp ho4sta ho2str 2hot. ho3th hotli4 2hot1s2 3hov 2ho2w1 h1o2x ho1y2 hô1 1h2ö hö2c h4ör hö4s hös1c hös3se h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3r2en h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h5rerlag h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3sch hr2s1en hr2ser hr2set hr2s1in hrs3k hr2s1of hr4stec hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se hrt4ste h3ruh hr1ums h3rü h4rüb h2ry hrz2 4h1s h4s3acht h2sa2d h4samt h2san h2sau h2säh hsä4s h3sc h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2sper h2sph hs2por h2sprä h2spro hss2 h2staf hst3alt h3st2an h4starb h2stau h2stäl h4stea h5stel hst2he hs1tie h2stin h2s1tor h3stö h3str hst3ran h2stu h3stun h3stü h2s1u hs2ung h3sy 4h1t ht1a h2tak h3t4akt. ht2al h2talo ht3alt hta2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h2tax h2t1är h3te. ht1ec h2t1ef ht1eh h3teha h3tehä hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit htelma4 htelmas5 h2temp h3ten h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1erh ht5erken h4terkl h6t5erleu h4t3erre h6t5er6spa h4t3er4st ht6erste h2t1erz h2t1ese h2t1ess h3tet h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in h4tl htni2 hto2 h2toly h2torg ht3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h3trec ht3reif ht3reit ht4ri ht5rieg h2t5rin h3trit ht3ro h2trol h2tros ht4rot ht3rös h2t3ru h2t3rü h4ts hts3an ht4s3end ht4spin ht3spri ht4stab hts2ti ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs ht3z2 hu2a hu2b1a hu2bei hu2b1en hu2b3l hu4b3r hu2bu hu2h1a hu2h1i huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu4ler hu2let hu2l1in hul3l hu2lo hu3ma h1ums hu2n h1una hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus3se hus2sp hus4st hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg hyl4 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3al5l ia2lor ial3s ial3t4 ia2lu ial3z2 i2am4 i4amo 2ian ia2nal i3and2 ian2e i3ann i2a3no i3ant i3anz i2ap ia3pf ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a1sp ias5s iast4 i3at. i3a2ta i4ate i3at4h 1iatr i3ats i3au ia3un iau2s1 2iav 2iä i1äm i1äp i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib3be ib2bli ib1ei i2beig i2beis ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibus1c ibus3s 2ic ic1c ich1a ich1ä i1che ich1ei ichermas8 ichgro3 i1chi i2chin ich3l i3chlo ich3m ichmas4 i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci icks2 ick3sa i1cl i1d id2ab4 i3d2ac i3dam id2an i2d1au 1i2dee idein3 i4deis idel2ä ide3sa ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g3l ie3g4n ie2g3r ie3g4ra ieg2s iegs1c ieg4se ieg4s1t i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i1ell iel3lä ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä ien3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm ienma3s4 i3enn i3e2no i3enö i3enp i3enr ien3s2e iens2k ien6st5er ien6stop iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k4 ierken4 i1ern i3ern. i2er5ni ie2rö iers2e ier4s3eh ier3sta ier3te ie3s2 ie4sh ie4sk ie4spu ies4s ie5sset iess1t ie4stas iest6e ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie2t3ö2 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fa iffe4s if6feste if2fl if4form iff2s if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if3sa if2ta ift3erk if2top if2t3ri ift1sp ifts2t ift3sz 2i1g iga1i i2g1ang ig1art iga3s i4gefar ige4na ige2ra ige3ran igerma3 ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu ig4no i3go ig4ra ig3rei igro3 ig3s2a ig4sal igsau4g ig1so ig4sti ig4s1to ig2stö ig4s3tre 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ih2s ih3sp i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2k1är ikbu2 4ike i2k1ei ike2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 ikot3t i2köl i2k3ra ik3rä ik3re ikro3 ik3so ik3s2z ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 4ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1ec ileid4 il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s1 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il4lad ill4an il2lä2 il2leg ille4ge il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or il3t2h il3tr i1lu2 i2lum i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2meg i2mej i2mek i2m1ele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im4m3ent im4mit im4mod imni2 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2str 2imt imtu2 2imu in3ac i4nack i2n1ad in2af ina4lin in1am i3nap in2ars ina4s i2n3au2 inaus1 in1äh in1äs in2dal in2dan in3dau indes4t 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng inenma3 inenmas6 in3erbe i4nerbi in2erh iner4lö i4n3er4tr i3nes i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ingmas4 ing3sc 1inhab 2inhar 2inhau 4inhe in2i3d 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn ink4ste in3k2ü inma4le 2inn. in4n3erm in2neu in4ni2v 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or inos4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 2inse. in2seb 2insen ins3ert in3skan in3skr in4s3tät ins2te ins2ti in3su 1insuf in4s3um in3s2z i4nt 2inta 1integ int2h in3t4r int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o ioa4 io1c io2d i2oda io3du io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3on4s1 ions3p i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en i3p4l ipo6i5den ip2pf ip2pl i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak ira4s irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek i3ré irg2 ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron i1rö irpla2 ir2rei ir8re8ligio irr2h irs2 ir4schl ir4schm ir4sch3w ir3sh irt4s1t 2iru iru2s1 i1s i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot 2isp is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is3sc is4s3che is3senk issermas8 is3so is3spa is4sper is3spi is3spo is2s1t is3sta is4ste is3sto is3stu is2su i2stab ist3ac i4stam ist2an i4stea iste4n is2ter ist4ra is3tras3 ist3re is1trü i2stur is1tüm i2sty isum3p i2sü i1ß iß1ers i1ta it1ab. i3tag ital1a ital5l it1alt it1am it1ang it3a4re it1art i3tat it1au i3tauc i2tauf i2t1ax 4i1tä i2t1äs ität2 i1te i2tei i4t1eig i4t1ein 2itel ite2la ite4n itens2 i4tepo i2tex i3thr i1ti i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn i3tis i3tiv i4tl itmen2 i1to i3toc i2t1of i1tö i1tr i3tra. it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa it4s1a4g it2s1e4 its3er1 it4set its1pe it4stec it4s3tem it4s3tes it2sti it4stie it2sto it6stra6s it2teb it4temp it2tri i1tu it1uh i2t1um i2tuns it1urg itut4 i1tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 ius1t i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em ixt2 4i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l jah4rei jahr4s ja3l2a ja3ne jani1 jani3t2 2jat je2a jean2s je2g jek4ter jektor4 jek2tr je3na je2p je2t1a je2t3h je2t3r jet3t je2t1u2 ji2a ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung5s ju3ni jur2o jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kal3lö3 kalo5 kal2tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw kasi1 ka2sp kas3s ka3tan ka3t4h ka2t3r kat3se 2katt kau2f1o 4kaufr kauf4sp kauf6s5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 2k1ärm kä4s5c käse3 kä3th 2k3b2 kbe1 kbo4n kby2 2k3c 2k3d2 kdamp2 2k1ec k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehrs3o kehr4st 2k1eic 2k1eig k1ein ke1in2d 2keinh 2k1eise ke2l1a ke3l2ag ke2lä kel3b4 2k1e2lek ke2len ke2l1er 2ke3let kel3la kell4e kel3li kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kenbu5s4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5s4te ken3sz k3enten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad ke1ral k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke2t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1ch 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o kin3s 2k1inse 2k1int ki3or kio4s 5kir kis2p kis5s kist2 kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor klos2 2klos. klo3sse klost6 k2löt k1lu k2lud kluf2 k2lug k1lüc 2kly 2k1m kmas2 k2n2 3knab k3ne k4nec k4nei 2knes kni4e kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol2a ko3le kol2k5 3kom ko4mu k2on ko3n2e kons4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n3a k2os ko2sp ko3ta kot1s2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k4ral kra4s3 k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron kro4ss 2kruf krü1b 2k1s k4s1amt k2san ks4ana k2sau k2s1äl ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu kss2 kst4 k2stal k4s3tanz kstat4 k4stea k2s1tis k2s1tor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad k3tag kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktau2s ktä5s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras kt4ro kt3run kt3s2 ktt2 k2tuns kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 2kulp 2k3uml kum2s k2u3n2a kun4s kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e ku2ro kur2sp kur4st ku4schl ku2sp kus3ses ku2su ku2ß 1kü kü1c kür2s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb 4l3aben 2labf 2labg 2labh 2l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3labu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a4dr l1adv 2laf la2fa laf1r laf3t la2ga la2gio la2gn lago2 la2g1ob lag5s2e 2la1ho 1lai lai4s1t la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min lammen8ge 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 3l2and lan2da2 land3ad lan4d3au lan6d5erw lan6d5erz lan2dr 2lanf lan2gl lang3s2 l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi 2l1ar3t l3arti la2ru la2sau 4lasd la5se 2lash 2lasi la2so 2la2sp 3lasser la2sta last1o la2str las3tur la2stü 1la2ß3 lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2ta lat4tal lat4tan lat4t3in lat2t3r 1laub. laub4se lau2fo 1laug 3laun l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lä1c 2läf 2l1ähn 1länd lär2m1a l1ärz lä4s5c lä4s3s 4lät 2läub 2läuc 2läue 1läuf 1là 4l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb3si lb4sk lb3sp lb4st1e lb4sto lb2u l2b3uf lbus3s lbzei2 2l1c l3che l5chen lchermas8 l3chi lch3l lch3n lch3r lch3s lch3ü lch1w l3cl l3co 4l1d ld3a2b1 l3d2ac ld3ack l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a4r ld3ari l3das ld1au ld1är l3de. l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex ldi2c l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa lds2t ldt4 ld3th l2d1um ldy3 ldys2 1le 3le. le2a le3an le3ar 3le3ba leben4s le2bl 2lec le2chi lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl 3leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig l2ein. leinbu4 leinbus5 l2eind lein4du l2eine lei6nerb 4leink l1einn l2eint l2einu lei6schw lei6ss5er lei4str lei4ßer l2eit lei2ta lei8t7er8sc lekt2a 2lektr 3l2ela 2l1e2lek lel3s 3lemes le2m1o2 4lemp l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 4l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lep4pi 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lergro3 lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k ler3t 3lerw l4erwa 2lerwo 2l1erz l2erza les2am les2e 2l1esel le3sh lesi1 le3sk les3s leste3 4lesw 2lesy le2tat 2le3th 2leto let2to2 le2u 4leud 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfäs3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf4s1ti lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lgoa3 lg3re l3gro lgro3s lg2s lg4s1t 2l3h2 3lhi. 1li 3l4ia li3ac li3ak li3ar li3b4 libi3 li1c 3lic. li3chi 4lick li3d2a 2l1ido li4d3s l2ie liebe4s li3ene lie4s3c lie5sse lie4sta lif2fo 3lig lig4n li2gre lig1s li3ke li3ko li2kr lik2sp lik4ter li3l2a li3li li3m2a 2l1imb 3limo 2limp li3n2a lin3al 2l1indu li4ned li2nef li2neh li2nep li2nes 2l1inf ling4s3 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2l1int l1inv 2linz li2o li4om lion5s li3os. li2p3a 2li2po 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i2so li2sp liss2 2liß li2tal li3te li1t2h lit1s2 lit3sz li2tur 3liu liv2e 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lk4stä lk2ü 2l1l ll1abb lla2be l2labt lla2de ll1aff ll1akt l3l2al l2l1a2m ll3ama lla2n ll2anw ll1anz ll1arm lla6tern l2lau ll3aufg ll3aufk ll3aug ll1aus l4lausf l2la2w l2läd l2l1äm l2läu llb4 llch4 ll3d4 l2le2b l3lec ll1ech l2l1ef lle2gu lle2he l2leib ll1eim ll3eise ll2em l3len. lle4n3a ll3endl llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll6erwei ll2es l2le2se l2leuc l3leur. l2lex llf4 llg4 l2lic l2lieb l2lieg l3lik lli4la ll1imp l2l1ind l2l1ins llin6sen llk4 ll5m lln2 ll1ob l2lobe l2lo2d l2l1of llo2gi ll1opf l2l1o2r l3lor. l3lore llo2te l2l1ou l3löh ll3sä ll3sh ll3s2k ll2spr ll4s3tor ll3t4 llti2m llt5s2 llu2d llu2f llu2me l2lu2p ll1ur llust6 l2lüc llü2d ll3z2 4l1m l3ma. l2m3a2b l2marc lm1art lmas2 lma3sse lmä2s lm1ä4st lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins lm3m l2möl lm3p lmpf4 lm3s2z lm3t 4ln lna4r ln3are l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri 3lodr l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min l4on lo2n1o lo2o 2lopf lop2pr 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4steu lo2s3to lo2s3t4r lo2ßu lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lpi4p lp3t4 l3pu 2l1q 2l3r2 lra4ss lrat4s lrom2 lrö4 lrös3 lrut4 lrü1b 4l1s l3sac l2sa2d l3s2al l4s1amb l4samt l2sanf l2sang l2sann l2sanz l3sare l2sau2 ls2äm lsä4s l4schin l4schmü l3se. l2s1e2b l2s1ec l2s1em ls1ere ls1erg ls1erl l2s1ers l2s1erw l3ses l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3pun ls3s2 lst2a lstab6 ls2taf l4s3täti l2s1tis l2stit ls2tr ls1um l2sun lsu3s 6l1t l2tab ltag4 lt1ak lt1am l3tami lt3and lt1ang l4tarm lt1art l2t3ato l2t1au l3te. lt1eh lt1ein l2t1eis lte4lem lt3eli l3t2en l5ten. lten6gel lter3a l3t2erg lt2erö lte3se l2t1esk lte3str l3tet. lte2th l2t1eu l2th l3thas l4thei lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tön lt1ös lt1öt lt4rak ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l4ts lt1spa lt4stab lt5ste ltt2 lt1uh l2t1um ltu4ran ltu2ri lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lug3erp lu4g3l lu2go lu2g3r lug3sa lu2gu 2l1uh lu1id. lume2 2lumf 2lumk 2luml l2ump 1lumpe 2l1ums l1umw 1lu2n 2l1una 2l1unf 4l1uni 2lunt 2lunw 4lu2o lu2pf 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c lus3sen lus2s1o lus2s1p lus4s1t 1lus2t lu2st1a lu4stä lu3str lust3re lu2s1u 4lu2ß1 lu2t1a lut2ed lu4teg lu4t3erg lut1o2f lu2top lu2t3r lut5schl 3lux 2lüb 2lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o lys2 ly3te ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1äp l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lzug4s lz1w lz2wec 1ma maa2 m1ab m2abe 2mabk m2ab4r 2mabs 2mabt ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers 2magm ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3le mal2er mali1 mal3l mallö3 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann m1ans m2ans. 2mansa 2mansä 2mansc 2mantw 2manz ma2or 2m1apf m2app 2m3arb mar3g2 mar2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m3arz 3mas. ma1s2pa 2m1aspe ma3sses mas6ses. mas6sest ma6sset ma3s2su 3mas2t ma2ta2b ma2tan mat4c ma2tel ma4t3erd mat3se mat1sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 4m1änd 3männ m1ärg mä1t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby2 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega3 3meh 2m1eif 2m1eig mei3l2 mein4da m2eis2 me1i2so me3lam me2lau 3meld me2lek me2ler melet2 2melf. mel2se mel2sp mel3t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta 2mentn 4m3entwi me1o 2meou 2meö 3m2er. me1ra me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes me2sal me2sä mes2e 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p meste2 me2str 4mesu 3me2ß1 me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1ch mi3da mie3dr mi2e1i mie3l mi2er mierer4 mi2et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che 4milz 2m1imp min2en min2eu min2ga mi3ni 3min2o mi1nu 3minz 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis4s1c mis4ser mis3si mis4st mi2sta mi2ß1 3mit1 mi2ta mi2th mi2tr mit3s2 mit5sa mi3tsu mit3ta mi2tu 4mitz 2m1j 2m1k4 m3ka mk5re. 2m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2mans mm1anz mm1art mma2ß m2m1au mmä4 mmd2 m2me2c m4meh m2mei mm1ein mm3eise mme4lin mme4na m4mentw m2me2nü mme2ra mme4rec mme2s3a m2me4te mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc m4mita mmo2du m2mo2l m2mor mm3p2 mmpf4 mms2 mm3te m2mum mm2un m2mus 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 2mol. 3mom mom2e 3m2on mo3ne mo4n1er mon3s 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer 3mos mo3se moster4 3mot m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi m4p3lem. m2p3len m2p3les mp4lif m3pon mpot2 mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and ms1as m3sä msch2 m4s1ef ms1erf ms1erw ms1ini mso2r ms1ori m2spä m2sped ms2por m2spot m2spro ms2pu ms3s2 m4stag m2stal m2sü 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m2t1erg m2t1erl m2t1ers m2t1ert m2t1eta m2t1eu m2th mt3ho m2t1im m2t1ins m2tint mti2s mtmen2 m2töl mt1ös mtra4s3 m2trö m4ts mt2sa mt2s1e mt3s2ka mts1p mt1spa mtt2 mt1um mt1urt mt3z 1mu mu1a 2m3uh 3mul mu3la 4muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f 3mus. mu4s1a mu2s1o mu2sp mu3s4se. mu3s4ses mu2s1to mu2str mu2su muße3 mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül2 mül3lu 3mün mü3s4si 3müt 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4t3 mwu1 1my 2m1z mzug4 1na 3na. 2n1ab na2bä na3ber 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2a2c nach1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3la nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly 3name na3me. n2amen namen4s3 4n1a2mer na3m4n 3namo nam2sp 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3naß 3nat n4ata na3t4h 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 2n1ä2m 2n1än n1ärz 3näs nä4sc n2ä6s3s 3näß 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbu3s nby2 2n1c n3ce2n3 nch3m 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6laß nder6läs nde4rob nde2s ndes1e ndi2a3 n2dob ndo2be nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2drui n4d3run nd2sor nd2spr nd3th ndt4r n2duns n2dü ndy3 1ne 3ne. ne2ap nea4s ne3at ne2bl 2n1ebn 2nec 3neca 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la4 nel4lif 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n2en. n2en3a2 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n1erk n2erli 2n1erlö nerma3 nermas4 ner4mit n2ern. 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz n2es n4es. nes2c ne2sei ne2sev ne3ska nes1o ne2sor ne2s1p 4n3essi ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt2 n3far n3fi nfi4le. nf4l nf5lin nflös4 nf2o nf4r nf2tan nft2o nf2t3r nft2s nft4ste n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g1a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a ngens2 n3ger nge4ram n4g3erse ng6es nges2t nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngro3s ng2s ngsa4g ngs1ah ngs3au ng4s3e4h ngs3pa ng3ts n2gum 2n1h2 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nibu2 nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n ni3ene ni1ero nig2a 2n3i2gel nig3r ni2gre 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl nikma3 ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis5s2 ni2stu ni3stun ni2s1u 2nit ni1th ni2ti nit4r nit4tec nit4tie nitt4sa ni3tu 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3au4s n2käh nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2sal nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s nmül3 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nn2erh nn2erk nne2rö4 n4n3er4wa nner2z nne2s1e n2ness nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3se nn3s2p nnst4 nn2th n2n1uf n2n1unf nn1ur 1no 3no. no2bla n2o3ble 3noblo 2n1obs no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3se no3sh no2s3p no4ss n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l nö4s3s n2öt 2n3p4 npa2g npf4 npsy3 2n1q 4n3r2 nra4s3s nräu3s nre3sz nrö2s1 6n1s n2sa2d n2sall n2sang n2sant n3s2arg n2saus n3sav n2s1än nsä4s n2s1äus ns2ca n3schu nsch7werd ns1eb nse2ha2 nseh5ere n3senk nsen4sp ns1ent ns1erf n4serfo ns1erg n2serh n3seri n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n2simp n2s1ini nsinn4s nsi2te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 nspas2 n2spat n4speri n2sph ns2pi n2spo ns3pon n2sprä n4s3prie n4spro ns3s2 ns2t1ak n2stas n4stat. n4s3tate ns2tau n5s2te. n4st3eif n5stel ns4tem. ns4ten. n4stent ns2ter ns3term ns4tes. n5steu ns2tob n6stoffi nst5opfe ns2tor n4strac n6strieb nst4ru ns2tum nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns2unr n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt4at n2tauf nt1äm n2t1äu n3te. nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei n3t2en nt4ene nten6te. n3ter ntera4 nte4ras nt4ern nt4ers nt4ert n2t1ess n3tet nte3v nt2her n2t3ho n3thr n3t4hu nti3k4l n2tinf n2t1inh ntini1 n3tit nt4lem ntmen2 ntmo2 n3to nton2s1 ntras3s nt3rec n3t4ree nt3reif n3trep nt4rig n3trop n2t3rü n4t1s nt3sa nt4sau nts2o nts2p nt4s3par nts2ti nt4s1to nttü3 3n4tu. ntum2 ntu2ra ntu4re. ntu4res nt3z 1nu. 1nu1a nu3ar nubi1 1nuc 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl nu4s1t 1nu2ß 1nut nu2ta nu2t3r 1nuu 1nux 1nuz 2nü4b nür1c 1nüt 2n1v2 n3ver nvol7ler 4n1w nwei4st 2nx 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nze4l3a nzel3l n4zense n4zentw n4zentz nz3erwe nzi2ga n2zinh nz1ini nz3le n2zor nz2öl nzug2s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oak1l o4a3la o4a3mi o2ar o2a3s 3oase oa4si o4at oa3te o5au o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi2t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re o3bri obs2 ob3sh ob3sk ob2sta ob3sz 2o3bu obus3s 2o3bü 2oby2 2oc oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r ocht4 och3te o1chu ochu2f och1w o1ci ock2er ock3sz o1cl o3co o1ç o1d o3d2a od2dr o3deb ode2c o3d2e1i odein3 ode2n1 odene2 o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2odu 2o1e oe4b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1ac of1au o2f1ei of2en o3fer of2fa of2f1in of2fir of2fix 1offiz of2f3l of2fo of2f3r offs2 off3sh of2fu of2fü 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr ofstra8ssen of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i ogenmas6 o3gh ogi2er o3gis og2lo o3g4n ogoi3 og2s og3sc og3si og3s2p o1ha o1hä o1he o2h1eis o2h1ert o2h1erz o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n3ac 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la o2h1o2p o2h3ö ohr3a oh4rin oh1ro o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. oi3se o1ism oiss2 oi4st 2o1j 2o1k oka2la okale4 o3kat 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp olf3st ol2gl ol2gr ol2i oli3k4 oli3tu ol2kl olk3r ol2kre ol2la2d ol2lak oll3ans ol2las ollä2 ol4l1ec ol4lei oll3ein ol2l1el oll5ends ol4lerk oll3erw ol4li4st ol2lo2c ol2log ol2lö2 ol2lu ol3lus o3lo ol2of olo1p2 ol1ort ols2t ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3meis o2mel o2mene o2mep o2meru om1erz om2es omiet1 omil3l o2m1ind om1ing om1ins o2m1int om3ma om3me om3mu om1org om3pf omp4l oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal ona4lin on1ap o2narb on2au 2onä onbe3 2onc onderer5 2one one4i one2n1 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4n onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on2seb ons3e2l on4sh onsi2d ons3l ons1p onst2h on3t2a on4t3end ont3erw on2t3ri o1nu 2onuk on3v 1ony on3z o1ñ oo2k3l o1op o1or oo4sk oos5s oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan o1pec o1pei o1pe4n 2opf. op2f3a op3fah op4ferd opf5erde opf1l opf3la op1flü op3for 4oph2 o3phe o1pi opi5a2 opi3er. opi5ers. opin2 op3lag o2p3le op3li 2o3po op4pl 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2oral o2r3alm or4alt 3or2am or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 2orda or2d1am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords or2dum 2ordw 4ore ore2a ore2b o2r1eck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s2 or3g4a 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins 2orit ork2a or2k3ar ork4r ork3s 2orm or4mans or4ment 2orn or2nac or2n3ar or2n3ä or5ne. or3n2o 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3re or3rh 2ors2 or3s4a or3sh or3si or3sz or2t1ak or2t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the or2tin ort3ins or4t3off or2tor or2tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un orus3 o2r3ü o2rya o1s 2o3s2a os3ad os4an osch3ar o4schä o3sche osch3le 2ose ose3e o2s1ei ose2n 2osh o3s2hi 2osi o3sk o4s3ka os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1ac oss3and os4sä o6ssel o3ssem oss3en4k o3ssent oss3enz os3si os2s3o os4son os2s3p os4s1t os2su os2t o2st1a2b o3stal. o4st1am ost3ang osta4s ost1au o4sterd oster3e ost5er6we ost3h o2stin o4s3ton. ost3ran o2st3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf oß3t 2o1t ota2go o3tark o2t1au ot3aug o3tax ot1ä otäugi4 o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot4em3 otemp2 otens2 o2t1erw 4ot2h ot4he ot5hel o4t3hi ot3hos o2thr o2til o2t1i2m ot2in o4tl otli2 ot4ol ot1opf ot2or oto2ra o3tra o2t3re ot3rin ot2sa ots1p ot2spa ots2pe ott1a ot2tan ot2tau ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oung5 oun4ge. oungs2 o4up 2our ouri2e our4ne. ou3s2i ous2t outu4 2ouv 2o1ü o1v 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r ö1ch öch1l ö2chr öchs2t öch4str ö1d öde1r ödi3 1ödu ö1e 1öf öf2fa öf2fl öf3l ögen4s1 ög3l ög3r ög2s ö1he öh3l2e öh3ri öh2s ö1hu ö3ig. ö1ke ö2ko ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl2f1ei ölf3s öl1im öl1in öl2k3l öl2la2 öllma4 öllmas3 öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w ö1m öm2s ön2e ö3ni önizi1 önn2e ö1nu öo1 ö1pe öpf3l ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö1s ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw 2öse ö2s1ei ös4en ös4es ö2sp ö3s2s ös4s1c ös3ses ös3set ös4st ös4t ö2sta ös4u ö1ß ö1t ö2t3a öte4n3 öt2h öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa1s2p pa2ßu pat1a pat4c pate2 1pati 1pat4r 1pau p3auf pa3uni 1pä 3päc 3päd 3pär 3pä4s3 pä4t1e2h pä4t3ent pät3h pä2to pät3s 2p1b pbe1 2p3c 2p1d2 pda2 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 3pel pe2l1a4 pe4lein pe2let pe2lex pe3li4n pe4l3ink pel3k pel3la pel3lä pel3l4e pel3li pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o pens2 3pensi 1pensu penz2 1pep pe1ra per2an 1perle per4na 3pero per2ra2 perr3an per4rä2 per4ric per6rieg 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pes2t 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 pffa3 p2f1ins pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra pfs2 pf3sl pf3sz pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d2 phen3s 2ph1ers 2phf 2phg phi2ka 2phk ph2l 2phm 2phn 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a1 pia3k piap2 pia3s pi3as. pi3chl p4id piegelei8 pi2el piela2 pie4lei 1pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi4pel pi3ri 3pirin 3pis 4piso pis2t pi3t2a pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3pla p3lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler p3lic p3lif 2plig p4lo 2p3lu 2p1m2 pma1 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li pol3lo po4lor 2pond 2ponn po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau porf4 2porn por4tre por4tri po3s2e pos4t po2sta post3ag po4stä po4st3ei post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppa2p ppe1e ppe2n1 ppf4 pp1fr p2p1h p3p2ho pp3lä p2p3le pp3oh ppp2 p2p3ra pp3ren p2pri pp3sa ppt2 p3puc p2pul p2punk p3pur p2r2 1prak pra4s3 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 2preg 1prei 3preis prei4ss 2preiz 2p3rer 3p4res 1preß pri4e 2prig 3prinz 1p4ro1 3prob 2proc 3prod 3prog 3proj 2pross 2proß 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po ps2te pst3re p2stu 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w ptpo4 p2t3r pt1s2 ptt2 pt1um p3tung pt1urs p2tü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 3pulv 2pund pun2s 2punt 2pur 3put put2s 1püf 2pül pül3l 2p1v 2p1w pwa4r 3py1 py3t 2p1z qu4 quel4la 1queu qui3s 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2a3b2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin rachter6 racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad3t 1rae r2af raf3ar ra2fer raf1r ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la4 ral3ab r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la ral5l2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t 2ralta r4alt2h ra2lu 3raly r2ame ra2mer 1r2ami ram4man ram6m5ers ram4mit ram4mu 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra4r1in r2ark 2r3arz r2a3s2 r4as. ras4a ra4schl ra5sen ra5si ra4sk 2rasph ra4ssi 2raß 1rat ra2t1a ra3ta. ra3te rat4r 2r3atta 4ratz 4rau. 3raub. 4raud 4raue rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp rau4sti raus3tr 4raut raut5s 1raü r2ax raxe3 raxi4s1 räch4s 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sa rä4sc rä5sse rä2st 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä r3ben. rb1ent rbe3r2e rber4gl rb2la rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rbmas3 rb2o rb4ri rb2sa rb2sei rb3ska rb2s1o rb2sta rb4stä rb2stu rb2su rb2u rbu2sc 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rchs2 rch3sp rchst4r rch3t2a rch6terg rch6terw rch1w r1ci r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d2 rde3re rder4er rderin6s r4d3ernt rde3sp rdga4 rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os rdo4st r2dö rd3rat rd4ri rdrü4 rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. 2recki 3red. 4redd 2redi re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 reis5tro re2ke re3la 2r1elb rel2e relea4 re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen re3ri r1erk 4r3erken r2erki 2r1erl 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa res3an re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest res3tem re2stu 3resu 2re2ß1 re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f rfall4s rfäs3 r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü r3for rf4ru rf4rü rf2sa rf2s1ä rf2s1id rf2spr rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rga5ssen rgas2t rga4str rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan rgleich8s7 r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rgro5sse r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 2r3her r2hoe rho2i3 2rhol 2rhö 2rhs 1ri ri3am ri3at rib2bl ri1ce ri1cha rid2 ri2dan 2ridol 2ridy r2ie rieb4s3t rie2fr ri1el ri3els riene4 ri3eni rie2nu ri1er. ri4ere ri3e4sti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 4rimp rim2s r2i3na 2r1ind rin4dex rin4diz 4rindu ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 4rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins2 3r4ins. rin2so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris4a ri4scho ri4schw 3risik rismu2 ri3so ri2s1p 3riss ris3si rist5ers ristes4 ri6stess ri2ß1 r2it r3i2tal ri3t2i ri3t4r rit4tei rit2tr 5ritu rix1 ri3xi 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk2um rku2n rk1uni rkus3s rku4s1t 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i rle2st r3let r3l2i r3l2o rlös5s rl2s1p rl2s1to rl3t r3lu rlu4str rlz2 4r1m r3m2ag rma2la r2m1ald r2m1ank rm1anz rm1a2p r2maph rma5ssen rmas8sens rm3d2 r3me. r2m1ef r2meo r2m1erp rm2es r2mide r2m1im rm3m rmmo3 r2m1o2ri rm3sa rms2t rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna4r rn2arb rn3are rn3ari r2nau rn3d4r r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1ch 3rock. 4rockn r2o3de ro3e2 4rog. 4rogs roh1l 3r2ohr 3roi ro3le rol4lan rol3l4en rolli4n rol6lini 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ro2pf ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3se ro3sh ro5s2i ro5smo ros6san ross1c ro3sta ro2st1r ro2ßu ro2tag ro2tä ro2tei ro2tho ro2tri rot1s rots2o ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl rölla4 3römi 4röp r1ör r2ös. 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli r3po rpo4str rps1t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rra4s3s rrat2s rr1äm rrb2 rr1c rr2e rre4ale rrer4s r3res r2rew rr2he r3r4hen rrik2 rr2n3a rr2o r2r3ob rro3m2 rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2sa2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ar r6scherl rs1ebe r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3sho rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no rson4e r2s1op r4s3ort. rs2p4 rspa3s2 rs4pel r2s3ph r4s3s2 r5stad r4stant rs2tau r6st5eing rster2 r6sterbt r4st3erw rs2th r5stim rst3ing r2stip r2s1tot rs2tr rst3ran r6strang rs2tu r2sumf rsü3s r3swi 4r1t r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är r3te. rte1e2 rtei3la rt1ein r2telf rtel6lei r4tempf rte2n1 r3ten. rte4na rtens2 rt3erei r4terfa r4terfo rt1erh r4t3er4la r4t3ernä rter4re rt1ers r3tes2 rte3sk r2thi rt3hol rt2hum r2t1id r2t1ima rto1p rt1or rto2ri r2t3rak rtra4s3 rt3rec rt3ros r4ts rt4s3eh rt1spe rt3t4 r2t1urt rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ru3ches rude2a ru2dr 3ruf ru2fa ruf2s1 ruf4st ruf4ter 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus3sen rus2s1p rus6s3t 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch rücks2 4rümm rün3z rü3s2s 2r1v rve4n1e rve5s rv2s 2r1w r5wei rwun3s 4r1x 1ry ry2c 2r1z rz2an r2zar r2zas rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. s1ad 2s3ada s3adm 2s3a2dr sa2fe 2s3aff 3safi sa1f4r 3saft 3sag sa4gent sag4n 4s1a2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4s3akt 3sal. 4s1alar sa4l3erb sa2l1id s1all sal5lo3 3salo sal2se 2s1alt 3s2alz 3sam s2ame s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na 2s3anb s2an2c s2and s4and. san4dar san4dri 3sang. sang4s 2s3anh 3s4ani 2s3anl 2sanp 2s3ans san4sk 4santr 2s3anw s3anz 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1a2sp sas6sest 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb 2s3av sa2vo 3säc s1äh s3ähn 2s1ält 2s1äm 2s1änd 2s1är sä2s3 3s2ät 1säu 2säuß 4s3b4 sba4n sbe3r2e sbus3 1sc 2sc. 2scam s2cap 4scar 2s1ce 6sch. sch2ab 3schaf 2schak sch2al 4schanc 4schang 5schanz 4schao s2chau 3s2chä 2schb 2schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 4schf 2schg 2schh schi4e 3sching 4schiru 3schis 2schk 4schl. sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox 3schö 4schöl 4schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs2 sch3sk 6sch3t scht2a scht4r s2chu 4schunt sch2up 5schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 6s1cl 2sco 3s2cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sdien4e sd4r 1se se3at. seau4 2s1e2ben seb4r 2s1echo s1echt 2s1eck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l 3seg se2gal se2gl seg4r 3s2eh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh3s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s2ein. 2seinb sein4du sei3n2e sein4fo 2seing 2seinh 4seink 2seinl 2seinn 2seinr s4eins. 4seinsp 4seinst 2seinw 2s1eis 5s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam 3selb sel1ec 2selem se4lerl sel3ers 2self. s3elix 3selk sel3le se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp s2en. se4nag se2nä 3sendet 4s1endl 5seni 3senku se2no s2ens s2ent. 2sentf 4s3entg s2enti 2s1ents 2sentw 2sentz se2n3u 3senva seo2r 4s1e2pos 3seq s4er. ser3a2d ser3al se5ref s3ereig se4r3eim se4r3enk ser2er s1erfo s2erfr s3erfü 4serfül s1ergä s2ergr s1erh 5serie serk4 s3erken s1erkl 3serl. s2ern. s1ernä 4s3ernt se1rot s3eröf s2ers. 2sersa sers2t s4ert. seru2 se4r1uf se3rum se3rund 3s4erv se2sel 2sesh se3sk se3su 2se4tap se2tat s1e2th 3setz se1u2n 2s1ex se2xe 4sexp sex3t2 6s3f4 sfal6l5er sflo4 4s3g2 sges2 sgro3 2s1h 4sh. sh2a 3s2ha. sha2k 4s3han 4shc s3h2e 3shi. 3shid shi4r 4shk sh3n 4shof 3s2hop sho4re 3show sh4r 4shs 4sht 4s3hü 1si si3ach. si2ad si3am. sia4s 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s si3ene si1err si1f4 si2g1a 3sigh sig4n si3gnu si2g3r si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s2 sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 2s1inh sin1i1 4s1inq 2s1ins s2ins. 4sinso 4sinst 2s1int 4s1inv 3sio 3siru 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s2 si2stu 3s2it si2tau sit3r si2tra si3tu 3siv siv1a sive3 si2vr 1sí 4s3j 2s1k2 4sk. 1skala 4skam 4skanz 4skas ska4te. 4skateg ska4tes 4skä 4skb skelma4 skelmas5 s4kep 3s2ki. s2kif s2kig 3s2kik 4skir 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4s3kor 4skow 4skö 4sks 4sk3t 3skulp skus3 2s1l2 4sl. 3slal 4slan sla2ve s2law sl3b s5le s3li 3s4lip 4sln s3lo. slo3be s3loe s3lu 4s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 3so. so4a 2s1o2b so3et 3soft 3sog s1o2he 6sohng 2s1ohr 1sol so3la so2l1ei sol2la4 sol4ler 2so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2s1opf 3sor. so1ral s1orc 2s1ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3so3s2 s4os. 4s1ost 1sou so3unt 3sov 4s1o2ve 3sow 2s1ox 5soz sö2f 2s1ök s1ö2l s1ö4s sp2 2sp. 2spaa 2spak 2spala spani7er. 2spano 4spap 2spara 1spare 2sparo 3sparu spa3sse spa3ssi 3s2paß 2spau s2paz s2pä 2spär 2s3pe. 2spel 4spensi spe3p4 s1peri 2spero s2perr 2spers 4spet 1s2pez 2s3pf 2spha s4phä s3phe 1spi 3s2pi4e 4s3pier4 spi2k 4spil 3spio 4spi4p 4spis 2spl 4spla 4splä 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 1spon 1spor 2s3pos s2pott 4spr. s2prac s2pran 2sprax 2spräm 4spräs 3s4prec 2spred s2pren 2spres s2prit 2sprob 2sprop 5spross 1spru 2sprüf 3sprün 2s3ps 2s4pt 1spuk 2spup 3spur 4sput 1spü 4spy 2s1q 4s3r4 sra4s3s srat2s srat4sc sret3 srom2 srö2s srös1c srücker6 srü2d 2s1s 6ss. 4ssa ssa3bo ss2ad ss1aj s3sal s4s1alb s4s3amt s5sand s4s3ang s2sano s4sans ss2ant s4sanz s3sas ss3att 4s3s2ä 4ssb 6ssc ssch2 4ssd 4ss1ec 4ssee 4sseg s4s1ega 4sseh 4ssei sse3inf sse3in4t 4ssek 6ssendet 4s3sendu ssenmas6 4ssentz sse6r5att s2s1erö 4ss3erse s3sersu ss2es 4ssesc 3ssesh 4sset sse3ta 4ssez 4ssf 4ssg 4ssh 4ssic 4ssie s2sig s4sind s4sinf s4sint 4ssio 4ssit 4ssk s3skala 4s4s3l 4ssm 4ssn 4sso ss1off ssoi4 s2s1op ss1ori s2söl 4ssp s3spe ss2po s3spru ssquet4 4ssr 4s4s3s2 4sst sst2a s5stad ss2tar ss1te s4ste. s5stel s4sten s4stes s4stet s5steu ss2th ss2tip ss1tis ss2top s3strec ss2tur s3s2tü 4ssum ss1ums 4ssü 4ssv 4ssw 4s3sy 4ssz 1st 6st. s4ta. 3staa 2stabb 2stabh s2tabi 2stabt 2stabz st2ac 3s2tad 4stada 4stadr 3staff 2stag 3stah 2stak 2stal. 2stale 3sta3li 2stalk st1alm st1alp 3stam st1ami 4stamt sta4na 3stand 4stanf 4stanl 4stann 2stanw 4stanza s2tar. s2tars 3start st1asi 3stat 2stat. 5statu 3s4tau. 2stauf 2staum 5staur 2staus 3staus. 2stax 3stä 4stäg 4stält 4stämt s2tär 5stätt 4stäus 4stb 4st3c 4std 3ste s2tean 4stechn 4stee ste2gr ste4i 4st1eid 5s2teig 4s3teil stei4na s2t2el s3telem 5stell stel4l3ä ste4mar 4stempf ste4na 4st3ends 4stentf 4stentw 4stepi st5erbie ste4rec ste6rers st3erfü st2erg st5ergeb sterma7sse s2tern 6sterras s2ters stes3ta ste4stä 4stests s2teu 4steuf 4st3ev 4stex 4stf 2stg 4sth st3heu st3ho 5s2tic 3stie 4stief. stierma5 3stim 2stinb 2stinf 2st1ins s4tio sti2r st3i2so 2stj 2stk 4stl 4stm stma3s2 2stn 2stob 3stoc sto3d s2tode s2tof stoffen6 stof8fens 2st3om 2stopo 2stord 2storg 3stos 4stou 2stöch 2stöl 2stön 5s2tör 2stöt 4stp 2stq 3s2traf 2strag 3strah 4strai 3s2tral 4strans 3s2tras 3straß 4straum s2träf 2sträg s2trän 4sträne 2stre. 4strech 4stred 4stref 4streg s3treib 3st4reif 4streis st3renn 2strep 2stret 2strev 2stri. 3s4tria 2strib 4strig stri2k 4strisi 2stroc 3s2trof 3s2trok st3roll stro4ma s2trö 2ströp 3struk 2st3run 2strup 4st3s2 stsas2 sts4k 2st3t4 st2u 5s2tub 4stuc 3stud 2stue 3stuf 5stuh 2stuk 2stumr stum2s 2stumz stu2n 2stun. 2stunf 2st3uni 2stuns 2stunt 3stuö stu3re st3url 2s3turn 2st3urt 4stüch s4tück 2stür. 2stüre 2stürg 2stürs 2stv 2stw 2sty. 2stys 4st3z 1su. su1an 3su2b3 su4ba2 4subi 5su1c su2cha such4st 2s1u2f 4s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2m1el su6m5ents s3umfa s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n sun6d5erh su4ne s1unf s3ungl 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt su2s1 su3sa su3si sus3s 2sü2b 3süc sü2d1 süden2 sü3den. 3sün 1süs4 sü3sse sü3ssi 1süß 4s3v 2s1w s3we sweh2 4swie 4swil s3wö s3wu 1s2y syl1 sym3 sy4n3 sy5s 2s1z2 4s3za 4szä 4s3zei s2zena 5s2zene 4s3zent s2zes s2zeß s3zet s2zis sz3ta 4s3zu 4s3zw 2ß3a2 ß1ä 2ß1b2 ßbus3 2ß1c 2ß1d4 ßdie3 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2le ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t ße2s ße2t ß1ex 2ß1f 2ß3g2 ßge2bl 2ß1h2 1ßi ßi2g1a 2ß1in ß1j 2ß1k4 2ß1l2 2ß1m 2ß1n2 ß1o2 ß1ö 2ß1p2 2ß1q ßquet2 4ß3r2 ßrus3 2ß3s2 ßsch2 ßst2 2ß1t ß2th ßts2 1ßu2 ß1uf 2ß1uh 2ß1um ß1uni ß1ü 2ß1v 2ß1w 2ß1z2 2tab. ta2b1an 2t1abb 1tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 1table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 1taf2e 2taff t1afg t1af4r 1t2ag 3tag. ta2ga2 ta2g1ei 4t3a4gent ta3gl t3ago tag2s tag4st tah2li tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. 1tak t3a2ka ta2kro tak2ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk 1talbu tal3d 1t4ale tal2en ta4lens tal2ga tal4leg tal4lei tal4let tal6leut tallin6s tal4lus ta2l1op tal2se 2talt 2tam ta2mer ta2mi tam2ma2 tam4mi tam4mut t1ampl t1amt t1a2na 2tanb t2and tand4ar ta3ne 4tanf 2tang t2ank t3ankl 2tanl t1anm 2tanme 4t1anna t1ans t2ans. 4t3ansi 2t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza 4tanzei tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4rens ta4r3ere 3t4ari 2tark 2t1arm 2tart tar2ta t1arti tar2to ta2ru 2t1arz ta3sa 1tasc t1asp 1tas2t ta3str 1tat. ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 1tats ta2t1um 4taud t1auf 4taufg tau3f4li 4taufn 2taufw 1taug t1auk 3taum 1taus t1ausb tau6schr tau6schw t2ause t3ausg t1ausk 2tausl 2t3auss 4t1ausw 1tax taxi3s tä1c 2täd 3täe 1täg 2tägy 2täh 2t1ält 2täm t1ämt t1ängs 1tänz t1äp t2är. tä2ru tä4s t2ät 2tätt 2täug 1täus 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 tbus3 2t1c t3cha t3che tch2i tch3l t2chu tch1w t3cl t3cr 2t3d4 tdun2 1te2a4 te3al teamma5 te3an 3t4ebb 4t1e2ben 1t2ech te1cha 3techn 2teck teck2e te3der 1tee te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 2teign teik4 1teil 2tein teinbus6 tein3ec t3einge t3einla 4teinn t1eis. t1eisb tei3st te2kel tek3t2 tela4 te2l3ab te2l1ac te2l1au telb4 tel3d4 te3le tel1eb tele4be te4l1ec 3telef 3teleg te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. te2l1in te2lit tel3lau tel3lä tel3l2e tel6lein tel6li6st te4lost te2l1ö tel3s2k tel3ta tel3th telt4r te3mä te2m1ei te2min 2temo te2m1o2r 3temper 1tempo te4m1u t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 2t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag t3engla t4enh te2ni te4n3in t4enj t2enk t2enl t4enm ten3n t2eno t2ens tens2e 4tensem t4enta t1entb 4tentd t4ente 4tentn ten4t3ri 4t3entw 4tentz t2enz ten6zerh ten3zw t1e2pi t6er. ter3ac te1raf te1ral ter3am te3ran. ter3as 4terbs 4terbt 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül ter3g2 6tergrei t4ergru 2t1ergu 4tergü t4eri te3ria te2rid 4terklä 2t3erlö 1term termas4 ter4mer ter4n3ar 4t3erneu t4ero t1erö 3terras ter4re. 1terro t4ers. ter5sc ter4ser terst4 t4erst. t4ersti t4erstu tert4a tert2o teru2 te4r1uf 6terwerb ter3za 2t1erzb t2erzu te2s tes1ac te3sä t1esel tes1er te3si te3so te3sp te4spr 3tesse. t2es2t tes3tät te4st3ei tester4 te6sterg te6sterk testes4 1tests t2et. te2tat 4tetl 3teuf te1un teu2r3a4 te2vi 1tex te1xa t1e2xe 2t1e2xi 4texp 3text 2t1exz 2t1f4 tfäs3 tfi2l 2t1g2 tger2 tgro3 t1h 4th. 2th2a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä 4thc 1th2e t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem t4hene t4heni 3theo 2therr t2hes 3these t2heu 1thi. t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 2t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy ti2ad ti3a2m tib4 ti1ce ti3chr tiden2 ti4dend t2ie 1tief. tie2fr ti1el ti2el. tiel3a ti3e4n1 ti2er tie4rec tiermas6 1tierr tie5sse 2tieß ti1et ti1eu 1tif. tif3f ti1fr ti4gerz tihi4 ti2kam ti2kar ti2kin ti2krä tiks2 ti2kü ti2lar ti2lau ti2lei ti2lel 1tilg tille4b ti2l3ö tilt4 ti2lu ti2ma2g t2imi tim2ma2 4t1imp t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l t2ins. 4t1inse t1int ti1nu 4t1inv 3tio ti3or 1tip 3tip. ti4que. ti1rh t2is ti4scha tisch3w ti2sei ti2sp 3ti3te tium2 ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 2t3k4 2t3l tl4e 3tlem tle2r3a 4t5li tli3ni 2t1m2 tmal2 tmen4t3 tmo4des t3mu 2t3n2 t5na tnes4 to4as to5a4t 1tob 2tobj tob2l t1obs to1ch 3tocht 2tock 1tod 3tod. tode2 to2d1er tode4s1 to2d1u toi4r to3la tom1e2 2tomg 1ton to2nau to2neh 3too to2pak to2pat 1topo 2topt to1ra to2rau to4rän 2torc t1ord 1tore. to2r1el t1org t3orga tor3int to2rö 1tort t1ort. to2ru t2orw to3s2 to4sk tost4 1toten to2tho tots2 3t4ou touil4 to3un tö2c 1töch 2töf 2t1ök 1tö4l 1tön t1ö4st 1töt 4t3p2 tpf4 2t1q t2r4 2tr. 1trac tra3cha t3rad. tra4dem tra4far 1trag 2trahm 3t4rai tra4lin 1tram 2t3rams 3t4ran. 2trand 1trank t3rann 1trans t3rase t3rasi tra4str 2traß 1traum 2traup traus2 1trä 3träg 2träh 3träne 2träs 2träß 2träus 2träuß 4t5re. tre4ale tre2br 2trec t3rech t4reck 2t3red 1tref 2trefe 3treff 2trefo 2treg t4rei. 1t4reib 2treif t3reig 2t3reih t3rein 2t3reis 2treit t3reiz 2t3rek 2t3rel t4rem t4ren. 1trend t3rent 1trep 2trepe 2trepo t4repr t4rer t4res. 1t4ret tre2t3r t5rett t4reu 2t3rev 2trez 3t4ré 2t3rh 1trib 3trieb. 3triebs 6trieg tri2er 1trigg 1trin t3rind 2tring tri3ni 3trio t4rip t3riß t4rit 1triu tri2x trizi1 1troc 4trock. t4roi tro2ke tro2mi 2t3roo t4rop 3tropf 2troß t3röc 2tröh 3tröp 2trö4s3s 2t3röt 2truf 1trug 2truk trum2 trums1 2t3rund 1t4runk 3t4rup t3ruß tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg 3trümm try1 2ts t4sab t3s2ac t2sa2d t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as tsa3sse t2sau t1sä t2säh t2s1än t4schar t3sche t4schef t3schl tsch4li t4schro ts2cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t3sens t2s1ent t2s1er t6s5essen t3set t4seth t2s1i2d tsing4 ts1ini t2s1ir t3skala ts3kr ts1o tso2r t1spal t1span ts1par ts4pare t1spas ts2ped t1spek ts2pi ts3ple ts2pon ts2por ts3s2 tst4 t2staf ts2tat ts2tau ts3täti t4stea t4s1tep t4sterm t4s3terr ts1tie t2s1tis t2stit t2ston ts1tor t4s3trad t2strä t2s1tri ts2tro t4strop t2s1trü ts1u 1tsub t1sü 4t1t tt1ab tt2ac tta6gess tt1ak t4tals tt3ank t2tanz tt1art t2tän tt1ebe tt1eif tt1ein tt1eis tte2la tte4leb t4te4leg tte4len ttel3l ttel1o t3ter tte4rec tt2erg ttermas7s tte4sa tte4s1ä tt2häu t2t3ho t3to. t3tos ttras3s t3tro tt3rü tt2sen tts1p tt4s3tem tt4ster tt4sti ttu2 t2tuc tt2un t2tu4s ttü2 tu1alm tu3an tub2 tuba3b 1tuc tu2chi 1tue tu3en tu2ere 2tuf tuf2e tu3fen t3u2fer tuf4fel 2tuh tu2is t3u2kr tul2a 1tum t2um. t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2tump 2t3umr tum2si tum2so 2t3umt 2t1umw t3umz 1tun. 2t1una 2t1und 2t3unf t3unga tung6s 2tunif 2t1u2nio 1tunn 1tuns 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e2t turin1 1turn tu2ro tur3s tu4ru tu2sa tu4schl tu2so tu3ta 2tüb 1tüch tück2s 1tüf 1tür. tür1c 1türe 1türg 1türs 1tüten 2tütz 2t3v 4t3w twa2 twä4 twi4e 1ty 3ty. 3typ ty2pa 3tys 4t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1ec t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3zes tzes3t tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4r u1ah u1al. ua2lau u1alb u3alet u1alf ual3l ualle2 u3a2lo u1alr u1als u1al3t ua2lu u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au uau2s u1ay u1äm u1än uäs4 u1äu 2u1b u8becken. ub3ein u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa ubus3 u2büb 2uc uc1c u1ce4 uces3 uch1a u1cha. uch1ä u1che u2ch1ec uch1ei ucherma8s u1chi uch1il uch1in uch3l uch3m uchma6ss uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu u2chum uch3ü uch1w u1ci uck2er uck3erl u1cl 2u1d u3d2a uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e u2ed ue2en u2eg u2ela ue2le ueli4 uel2la ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2sa uen2zu u2ep ue2r3a ue2r1ä uere2 ue2rec ue3reig u3eremp u3erent ue4rerg ue4rerk uer3g2 u3erinf u3erin4t uerma6s uer2ne uer4ner uer3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue4s ue5se ue5sp ue2ta ue4tek u3fac u3fah uf1ak u3fal uf3ar uf1au u2f1ä6s u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern u2f1eß 2uff uffel2 uff4l uf2fro uf3l u2fob ufo2r uf1ori uf3r uf3sä uf2spo uf4ster uf2t1eb uf3ten uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak ugang4 u2g1ap uga4s ug1au ug3d2 u2g1ei ugenma3 ugenmas6 u2g1erf u2g1erl ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ro3s ug3rüs ug3sc ug3se ug3si ugsma3 ugsmas4 ug1spa ug5stä u2gü u1h uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uh1un uh1w 2ui ui2c u1ie ui1em u3ig u4ige u1im u1in. uin3n u1is. u3isch. u3ischs uisi4n ui2st u1j uk2a u3käu u1ke u1ki u1k2l ukle1i u1k4n u3ko uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab ul1am ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ulf4 ulg4 uli2k ul1ins ul3ka ul2kn ulla2g ul2lä ul3len ul2les ulli2n ul2lö2 ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2t 2ulta ul3th ul2tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um2an um3anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 4umm umm2a um4mess u2möl umpf4li um2pho um2p3le 1umr 3umsat um2sau um2ser um2sim um2s1pe um4stem um2s1u um3t2 um2un u2m1ur 1umz un1 2un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at unau2s 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp un2d1um undü4 1undv 1undz u3ne une2b une2h un2ei. un3ein un3eis unen2t u4n3erz unes2 1unget 1ungew 1unglü un3gn un2gr ung3ri ung4s1 un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku un2n3a2d un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1unsi un3sk un3sp unst1r 1unt un3ta unte4ri un3tr unt3s 2untu u1nü unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u1op u1or u3or. u3or3c u3ors u1os. uote2 u1pa u1pe2 uper1 up2fa upf2e upf1i u1pfl u3pi up2pl u1pr upt3a2 upt3erf upt3erg upt1o u1q 2ur. u1ra u2rab u3raba ura2be u2r1a2m ur3ame u2r1ana u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 ur3d2i ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri uri2c ur1im ur1ini ur3ins ur1int urk3se ur4matt 4u1ro u3rol u1rö ur3p 2urr ur3re ur2san ur2sau ur2ser urst4r ur4sw urs2ze urt2 u3ru ur2z1a ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u4saf us4ann us5art u1sä u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko usmas2 usma5sse u1so us3oc u3soh u3sol u2s1op us1ou u1sö u1sp u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u3s2piz u2spo us2por u2spu u4s3sel us2sen us5sende us6seni ussenma7s us2ser us4serf uss5erfa us2sez u3ssig us2sof u2stab ust3abe u3stal us2tat us2ten us2ter us2th ust2in u3stis u2s1tor u2strä u4strit u3s4trop u2s1tur u2sty u1su us2ur 2uß u2ß1u 2u1t u3ta. ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te ut1e2d ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu utmas2 utma5sse u3to. uto4ber uto3c u3tom ut1opf u2tops ut4or ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut1sp ut2spa utt4an ut3te ut3t4l utt1s2 utu4re utu5ru utz3eng ut2z1in ut2zo ut2z1w 2u1u2 u1ü2 u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe4n3 über3 üb3l üb3r 2üc ü1che üch3l üch4s1c üch5t4e ück1er ück3eri ück4spe ü4d3a4 üden2g ü3d2ens üd1o4 üdö4 üd3r üd3s2 üdsa1 üd3t4 üdwe2 ü4f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1erk ü2h1erz üh1i ühl1ac üh1lam üh3l2e üh3mo üh3ne üh1o üh3r2e ühr3ei. üh1ro ühr3ta ühs2 üh3stu üh3t üh4th üht4r ü1hu üh1w ü1k2 2ül ül1a ül2c ü3l4e ülla4 üll1au ül2lei ül3ler ül4leu ül2lo ü1lu ü2ment ü2n1a ün2da ün2dr ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ür4ster ürt2h ür2zö ür2zw üs2a ü2schl ü5se üse3h üse3l ü1sp üs2s1c üss2e ü4s3sel üs3si üs4st üs2su ü2sta ü2str ü1su ü1ß 2üt ü1ta ü2t1al ü1te ü1ti üt3r üt4s1 üt2tr ü1tu ü1v ü1z 2v1ab va1c val2s 2vang 2varb vas2 v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u vat3z 2v1au vä1 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits1 ve3la ve4l1au ve3le ve3li vel3l ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3nü ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 verf4 verg4 vergas6 ve3ri ve4rin ver3k vermas8sen ver3sta vert2 ver5te ver3u ve3s 2vesc 2vese ve4sh ve4s1p ves4t ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in vil3l 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol vol2la voll7auf. vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 vorö4 3voy 2v1p v2r 2v3ra v3re v4ree 2v3ro 2v1s vs2e v3s2z 2v1t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les wal4li4n 2walm wal2ta wal2to walt4st 3walz wa3na wang4s 1wann wa2p 1war2e ware1i wart4e 1was wa3sa wa4scha wa3sche wa3schi wa3sh wass4e 1wäh 1wäl wäm3 2wäng 1wäs3 wä5sc wä4ss 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg1s weg3sa 1weh we4i wei4bl 2weie weifel6d weik4 wei3sc weis4s3p wei4tr weit1s wel6schl wel6schr wel2t1 welt3a4 wel6t5en6d wem2ma2 wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer4sta wer2t1a wer4t3ei wer6t5erm wer2to 1werts 1wese wesen4s3 we2s1p wes2t we2st1a we4st3ei we4steu we4sti we2st1o2 we2stö we2st3r we4stu 1wet wet2s wett3s 2w1ey 2w1g 2w3h 1wid wi2e wie3l2 wien2e wie4st wik2 1wil wim2ma wim4m3u win4d3ec win2dr win2e 2wing win8n7er8sc win4num 1wi4r wi3s2e wi2sp 1wiss wi3st wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s1 wol4la wol2lä wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k 2w1t wti2 w2u 1wuc wuch4sc wuls2 wun2da wun4g3r wun2s 4wur. wur2fa 1wurst wus4 1wu4t1 1wüh wüs4 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag xa2m xand4 x2anz 1x2as xau3 xaus2 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. xemp4 x2en xen3s2 x2er. x2ere xers2 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is xi2s1e xi2s1o2 xis5s xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3ta. x3t2as xt1ä x2tän x2t1e2d x2t1ei x2tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt1s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere yes2 y2es. ye4st ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl5b yl3c y4le. yli4n yllo2 yllö2 yloni1 y2l1u yma2t ymp2 ym2pha ympi1 y2n1o yno4d ynt2 y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 y1s ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2pa yst4 y2s1u2 y3s2z y1t2 y2te. y2tes y3to yu2r yure3 y1v y1w y1y y1z2 za2 2z3ab zab3l za3cha za3chä 2z1ad 2z1af za3ge za3gr 3z2ah zah4ner 2z3ak za3li 2z1all 2z1am z1an za3ne 2z3anf 3zani 3z2ank zan4kl 2z3anl za3no za3ra 2zarb 2zarc za3re 2z1arm za3ro z1arti zar2tr 2z1arz z1as zast4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1äc 3z2äh zä3hi 2z1äm 2zängs z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 zeau3 zeaus4 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeik4 zei3la zeile4 2z1ein zeinbus6 zei3s2 zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 zelau2 ze2len ze2l1er ze2l1in zel3l2a zel4leh zel4li4n zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zent3s zen4z3er z2er. zer3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2s zes1e zes1i ze3sku zessen4 zes6s5end zes2sp zes1tr ze2ß1 ze2tr 2zetts 2z1ex 2z1f4 zfäs3 2z1g2 zger2a 2z1h z2hen 3zi. zi3alo zi3ar zi2dei zid3r zie4lei zi1erh zi1es. 3zig zil2e zil3l z2imm 2z1imp zim2t3 zin2e zin3ei zin4er 2z1inf z1inh zin1it zin2sa zin4ser 4zinsuf z1inv zi2o3 zi3op zirk2 zirk6s1 zis4t zistras6 zi3s2z zit2h ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zolla2 zol3le zol2li2 zol3lu zon4ter zo2o 2z1ope z1or zo2ri zor4ne zo3se 2z1osz 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3str z3sz 2z1t z2t1au z4tehe zte3str z3t2her zt3ho zt1ins zt3rec zt3s2 zu3a zub4 3zu4c zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug4ste zug1un 2z1uhr zuh2u zu1i zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s2 zu3t2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig zwei3s 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 2z1z z3z4a zze3s z3z2o zz2ö}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tk.pat0000644000175000017500000003217011761001300024652 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-tk.rme % used: - a b d e f g h i j k l m n o p r s t u w y z ä ç ö ü ý ň ş ž \patterns{ 1-4 ä1bä ä1be ä1bi ä1bö ä1bü ä1çä ä1çe ä1çi ä1çö ä1çü ä1dä ä1de ä1di ä1dö ä1dü ä1fä ä1fe ä1fi ä1fö ä1fü ä1gä ä1ge ä1gi ä1gö ä1gü ä1hä ä1he ä1hi ä1hö ä1hü ä1jä ä1je ä1ji ä1jö ä1jü ä1kä ä1ke ä1ki ä1kö ä1kü ä1lä ä1le ä1li ä1lö ä1lü ä1mä ä1me ä1mi ä1mö ä1mü ä1nä ä1ne ä1ni ä1nö ä1nü ä1pä ä1pe ä1pi ä1pö ä1pü ä1rä ä1re ä1ri ä1rö ä1rü ä1sä ä1se ä1si ä1sö ä1sü ä1tä ä1te ä1ti ä1tö ä1tü ä1wä ä1we ä1wi ä1wö ä1wü ä1ýä ä1ýe ä1ýi ä1ýö ä1ýü ä1zä ä1ze ä1zi ä1zö ä1zü ä1ňä ä1ňe ä1ňi ä1ňö ä1ňü ä1žä ä1že ä1ži ä1žö ä1žü ä1şä ä1şe ä1şi ä1şö ä1şü e1bä e1be e1bi e1bö e1bü e1çä e1çe e1çi e1çö e1çü e1dä e1de e1di e1dö e1dü e1fä e1fe e1fi e1fö e1fü e1gä e1ge e1gi e1gö e1gü e1hä e1he e1hi e1hö e1hü e1jä e1je e1ji e1jö e1jü e1kä e1ke e1ki e1kö e1kü e1lä e1le e1li e1lö e1lü e1mä e1me e1mi e1mö e1mü e1nä e1ne e1ni e1nö e1nü e1pä e1pe e1pi e1pö e1pü e1rä e1re e1ri e1rö e1rü e1sä e1se e1si e1sö e1sü e1tä e1te e1ti e1tö e1tü e1wä e1we e1wi e1wö e1wü e1ýä e1ýe e1ýi e1ýö e1ýü e1zä e1ze e1zi e1zö e1zü e1ňä e1ňe e1ňi e1ňö e1ňü e1žä e1že e1ži e1žö e1žü e1şä e1şe e1şi e1şö e1şü i1bä i1be i1bi i1bö i1bü i1çä i1çe i1çi i1çö i1çü i1dä i1de i1di i1dö i1dü i1fä i1fe i1fi i1fö i1fü i1gä i1ge i1gi i1gö i1gü i1hä i1he i1hi i1hö i1hü i1jä i1je i1ji i1jö i1jü i1kä i1ke i1ki i1kö i1kü i1lä i1le i1li i1lö i1lü i1mä i1me i1mi i1mö i1mü i1nä i1ne i1ni i1nö i1nü i1pä i1pe i1pi i1pö i1pü i1rä i1re i1ri i1rö i1rü i1sä i1se i1si i1sö i1sü i1tä i1te i1ti i1tö i1tü i1wä i1we i1wi i1wö i1wü i1ýä i1ýe i1ýi i1ýö i1ýü i1zä i1ze i1zi i1zö i1zü i1ňä i1ňe i1ňi i1ňö i1ňü i1žä i1že i1ži i1žö i1žü i1şä i1şe i1şi i1şö i1şü ö1bä ö1be ö1bi ö1bö ö1bü ö1çä ö1çe ö1çi ö1çö ö1çü ö1dä ö1de ö1di ö1dö ö1dü ö1fä ö1fe ö1fi ö1fö ö1fü ö1gä ö1ge ö1gi ö1gö ö1gü ö1hä ö1he ö1hi ö1hö ö1hü ö1jä ö1je ö1ji ö1jö ö1jü ö1kä ö1ke ö1ki ö1kö ö1kü ö1lä ö1le ö1li ö1lö ö1lü ö1mä ö1me ö1mi ö1mö ö1mü ö1nä ö1ne ö1ni ö1nö ö1nü ö1pä ö1pe ö1pi ö1pö ö1pü ö1rä ö1re ö1ri ö1rö ö1rü ö1sä ö1se ö1si ö1sö ö1sü ö1tä ö1te ö1ti ö1tö ö1tü ö1wä ö1we ö1wi ö1wö ö1wü ö1ýä ö1ýe ö1ýi ö1ýö ö1ýü ö1zä ö1ze ö1zi ö1zö ö1zü ö1ňä ö1ňe ö1ňi ö1ňö ö1ňü ö1žä ö1že ö1ži ö1žö ö1žü ö1şä ö1şe ö1şi ö1şö ö1şü ü1bä ü1be ü1bi ü1bö ü1bü ü1çä ü1çe ü1çi ü1çö ü1çü ü1dä ü1de ü1di ü1dö ü1dü ü1fä ü1fe ü1fi ü1fö ü1fü ü1gä ü1ge ü1gi ü1gö ü1gü ü1hä ü1he ü1hi ü1hö ü1hü ü1jä ü1je ü1ji ü1jö ü1jü ü1kä ü1ke ü1ki ü1kö ü1kü ü1lä ü1le ü1li ü1lö ü1lü ü1mä ü1me ü1mi ü1mö ü1mü ü1nä ü1ne ü1ni ü1nö ü1nü ü1pä ü1pe ü1pi ü1pö ü1pü ü1rä ü1re ü1ri ü1rö ü1rü ü1sä ü1se ü1si ü1sö ü1sü ü1tä ü1te ü1ti ü1tö ü1tü ü1wä ü1we ü1wi ü1wö ü1wü ü1ýä ü1ýe ü1ýi ü1ýö ü1ýü ü1zä ü1ze ü1zi ü1zö ü1zü ü1ňä ü1ňe ü1ňi ü1ňö ü1ňü ü1žä ü1že ü1ži ü1žö ü1žü ü1şä ü1şe ü1şi ü1şö ü1şü a1ba a1by a1bo a1bu a1ça a1çy a1ço a1çu a1da a1dy a1do a1du a1fa a1fy a1fo a1fu a1ga a1gy a1go a1gu a1ha a1hy a1ho a1hu a1ja a1jy a1jo a1ju a1ka a1ky a1ko a1ku a1la a1ly a1lo a1lu a1ma a1my a1mo a1mu a1na a1ny a1no a1nu a1pa a1py a1po a1pu a1ra a1ry a1ro a1ru a1sa a1sy a1so a1su a1ta a1ty a1to a1tu a1wa a1wy a1wo a1wu a1ýa a1ýy a1ýo a1ýu a1za a1zy a1zo a1zu a1ňa a1ňy a1ňo a1ňu a1ža a1žy a1žo a1žu a1şa a1şy a1şo a1şu y1ba y1by y1bo y1bu y1ça y1çy y1ço y1çu y1da y1dy y1do y1du y1fa y1fy y1fo y1fu y1ga y1gy y1go y1gu y1ha y1hy y1ho y1hu y1ja y1jy y1jo y1ju y1ka y1ky y1ko y1ku y1la y1ly y1lo y1lu y1ma y1my y1mo y1mu y1na y1ny y1no y1nu y1pa y1py y1po y1pu y1ra y1ry y1ro y1ru y1sa y1sy y1so y1su y1ta y1ty y1to y1tu y1wa y1wy y1wo y1wu y1ýa y1ýy y1ýo y1ýu y1za y1zy y1zo y1zu y1ňa y1ňy y1ňo y1ňu y1ža y1žy y1žo y1žu y1şa y1şy y1şo y1şu o1ba o1by o1bo o1bu o1ça o1çy o1ço o1çu o1da o1dy o1do o1du o1fa o1fy o1fo o1fu o1ga o1gy o1go o1gu o1ha o1hy o1ho o1hu o1ja o1jy o1jo o1ju o1ka o1ky o1ko o1ku o1la o1ly o1lo o1lu o1ma o1my o1mo o1mu o1na o1ny o1no o1nu o1pa o1py o1po o1pu o1ra o1ry o1ro o1ru o1sa o1sy o1so o1su o1ta o1ty o1to o1tu o1wa o1wy o1wo o1wu o1ýa o1ýy o1ýo o1ýu o1za o1zy o1zo o1zu o1ňa o1ňy o1ňo o1ňu o1ža o1žy o1žo o1žu o1şa o1şy o1şo o1şu u1ba u1by u1bo u1bu u1ça u1çy u1ço u1çu u1da u1dy u1do u1du u1fa u1fy u1fo u1fu u1ga u1gy u1go u1gu u1ha u1hy u1ho u1hu u1ja u1jy u1jo u1ju u1ka u1ky u1ko u1ku u1la u1ly u1lo u1lu u1ma u1my u1mo u1mu u1na u1ny u1no u1nu u1pa u1py u1po u1pu u1ra u1ry u1ro u1ru u1sa u1sy u1so u1su u1ta u1ty u1to u1tu u1wa u1wy u1wo u1wu u1ýa u1ýy u1ýo u1ýu u1za u1zy u1zo u1zu u1ňa u1ňy u1ňo u1ňu u1ža u1žy u1žo u1žu u1şa u1şy u1şo u1şu a1bi a1be y1bä y1bi y1be o1bi o1be u1bi u1be i1ba i1bo e1ba e1bo ä1bo ä1ba ö1ba a1çi a1çe y1çä y1çi y1çe o1çi o1çe u1çi u1çe i1ça i1ço e1ça e1ço ä1ço ä1ça ö1ça a1di a1de y1dä y1di y1de o1di o1de u1di u1de i1da i1do e1da e1do ä1do ä1da ö1da a1fi a1fe y1fä y1fi y1fe o1fi o1fe u1fi u1fe i1fa i1fo e1fa e1fo ä1fo ä1fa ö1fa a1gi a1ge y1gä y1gi y1ge o1gi o1ge u1gi u1ge i1ga i1go e1ga e1go ä1go ä1ga ö1ga a1hi a1he y1hä y1hi y1he o1hi o1he u1hi u1he i1ha i1ho e1ha e1ho ä1ho ä1ha ö1ha a1ji a1je y1jä y1ji y1je o1ji o1je u1ji u1je i1ja i1jo e1ja e1jo ä1jo ä1ja ö1ja a1ki a1ke y1kä y1ki y1ke o1ki o1ke u1ki u1ke i1ka i1ko e1ka e1ko ä1ko ä1ka ö1ka a1li a1le y1lä y1li y1le o1li o1le u1li u1le i1la i1lo e1la e1lo ä1lo ä1la ö1la a1mi a1me y1mä y1mi y1me o1mi o1me u1mi u1me i1ma i1mo e1ma e1mo ä1mo ä1ma ö1ma a1ni a1ne y1nä y1ni y1ne o1ni o1ne u1ni u1ne i1na i1no e1na e1no ä1no ä1na ö1na a1pi a1pe y1pä y1pi y1pe o1pi o1pe u1pi u1pe i1pa i1po e1pa e1po ä1po ä1pa ö1pa a1ri a1re y1rä y1ri y1re o1ri o1re u1ri u1re i1ra i1ro e1ra e1ro ä1ro ä1ra ö1ra a1si a1se y1sä y1si y1se o1si o1se u1si u1se i1sa i1so e1sa e1so ä1so ä1sa ö1sa a1ti a1te y1tä y1ti y1te o1ti o1te u1ti u1te i1ta i1to e1ta e1to ä1to ä1ta ö1ta a1wi a1we y1wä y1wi y1we o1wi o1we u1wi u1we i1wa i1wo e1wa e1wo ä1wo ä1wa ö1wa a1ýi a1ýe y1ýä y1ýi y1ýe o1ýi o1ýe u1ýi u1ýe i1ýa i1ýo e1ýa e1ýo ä1ýo ä1ýa ö1ýa a1zi a1ze y1zä y1zi y1ze o1zi o1ze u1zi u1ze i1za i1zo e1za e1zo ä1zo ä1za ö1za a1ňi a1ňe y1ňä y1ňi y1ňe o1ňi o1ňe u1ňi u1ňe i1ňa i1ňo e1ňa e1ňo ä1ňo ä1ňa ö1ňa a1ži a1že y1žä y1ži y1že o1ži o1že u1ži u1že i1ža i1žo e1ža e1žo ä1žo ä1ža ö1ža a1şi a1şe y1şä y1şi y1şe o1şi o1şe u1şi u1şe i1şa i1şo e1şa e1şo ä1şo ä1şa ö1şa b1b .b2b b1ç .b2ç b1d .b2d b1f .b2f b1g .b2g b1h .b2h b1j .b2j b1k .b2k b1l .b2l b1m .b2m b1n .b2n b1p .b2p b1r .b2r b1s .b2s b1t .b2t b1w .b2w b1ý .b2ý b1z .b2z b1ň .b2ň b1ž .b2ž b1ş .b2ş ç1b .ç2b ç1ç .ç2ç ç1d .ç2d ç1f .ç2f ç1g .ç2g ç1h .ç2h ç1j .ç2j ç1k .ç2k ç1l .ç2l ç1m .ç2m ç1n .ç2n ç1p .ç2p ç1r .ç2r ç1s .ç2s ç1t .ç2t ç1w .ç2w ç1ý .ç2ý ç1z .ç2z ç1ň .ç2ň ç1ž .ç2ž ç1ş .ç2ş d1b .d2b d1ç .d2ç d1d .d2d d1f .d2f d1g .d2g d1h .d2h d1j .d2j d1k .d2k d1l .d2l d1m .d2m d1n .d2n d1p .d2p d1r .d2r d1s .d2s d1t .d2t d1w .d2w d1ý .d2ý d1z .d2z d1ň .d2ň d1ž .d2ž d1ş .d2ş f1b .f2b f1ç .f2ç f1d .f2d f1f .f2f f1g .f2g f1h .f2h f1j .f2j f1k .f2k f1l .f2l f1m .f2m f1n .f2n f1p .f2p f1r .f2r f1s .f2s f1t .f2t f1w .f2w f1ý .f2ý f1z .f2z f1ň .f2ň f1ž .f2ž f1ş .f2ş g1b .g2b g1ç .g2ç g1d .g2d g1f .g2f g1g .g2g g1h .g2h g1j .g2j g1k .g2k g1l .g2l g1m .g2m g1n .g2n g1p .g2p g1r .g2r g1s .g2s g1t .g2t g1w .g2w g1ý .g2ý g1z .g2z g1ň .g2ň g1ž .g2ž g1ş .g2ş h1b .h2b h1ç .h2ç h1d .h2d h1f .h2f h1g .h2g h1h .h2h h1j .h2j h1k .h2k h1l .h2l h1m .h2m h1n .h2n h1p .h2p h1r .h2r h1s .h2s h1t .h2t h1w .h2w h1ý .h2ý h1z .h2z h1ň .h2ň h1ž .h2ž h1ş .h2ş j1b .j2b j1ç .j2ç j1d .j2d j1f .j2f j1g .j2g j1h .j2h j1j .j2j j1k .j2k j1l .j2l j1m .j2m j1n .j2n j1p .j2p j1r .j2r j1s .j2s j1t .j2t j1w .j2w j1ý .j2ý j1z .j2z j1ň .j2ň j1ž .j2ž j1ş .j2ş k1b .k2b k1ç .k2ç k1d .k2d k1f .k2f k1g .k2g k1h .k2h k1j .k2j k1k .k2k k1l .k2l k1m .k2m k1n .k2n k1p .k2p k1r .k2r k1s .k2s k1t .k2t k1w .k2w k1ý .k2ý k1z .k2z k1ň .k2ň k1ž .k2ž k1ş .k2ş l1b .l2b l1ç .l2ç l1d .l2d l1f .l2f l1g .l2g l1h .l2h l1j .l2j l1k .l2k l1l .l2l l1m .l2m l1n .l2n l1p .l2p l1r .l2r l1s .l2s l1t .l2t l1w .l2w l1ý .l2ý l1z .l2z l1ň .l2ň l1ž .l2ž l1ş .l2ş m1b .m2b m1ç .m2ç m1d .m2d m1f .m2f m1g .m2g m1h .m2h m1j .m2j m1k .m2k m1l .m2l m1m .m2m m1n .m2n m1p .m2p m1r .m2r m1s .m2s m1t .m2t m1w .m2w m1ý .m2ý m1z .m2z m1ň .m2ň m1ž .m2ž m1ş .m2ş n1b .n2b n1ç .n2ç n1d .n2d n1f .n2f n1g .n2g n1h .n2h n1j .n2j n1k .n2k n1l .n2l n1m .n2m n1n .n2n n1p .n2p n1r .n2r n1s .n2s n1t .n2t n1w .n2w n1ý .n2ý n1z .n2z n1ň .n2ň n1ž .n2ž n1ş .n2ş p1b .p2b p1ç .p2ç p1d .p2d p1f .p2f p1g .p2g p1h .p2h p1j .p2j p1k .p2k p1l .p2l p1m .p2m p1n .p2n p1p .p2p p1r .p2r p1s .p2s p1t .p2t p1w .p2w p1ý .p2ý p1z .p2z p1ň .p2ň p1ž .p2ž p1ş .p2ş r1b .r2b r1ç .r2ç r1d .r2d r1f .r2f r1g .r2g r1h .r2h r1j .r2j r1k .r2k r1l .r2l r1m .r2m r1n .r2n r1p .r2p r1r .r2r r1s .r2s r1t .r2t r1w .r2w r1ý .r2ý r1z .r2z r1ň .r2ň r1ž .r2ž r1ş .r2ş s1b .s2b s1ç .s2ç s1d .s2d s1f .s2f s1g .s2g s1h .s2h s1j .s2j s1k .s2k s1l .s2l s1m .s2m s1n .s2n s1p .s2p s1r .s2r s1s .s2s s1t .s2t s1w .s2w s1ý .s2ý s1z .s2z s1ň .s2ň s1ž .s2ž s1ş .s2ş t1b .t2b t1ç .t2ç t1d .t2d t1f .t2f t1g .t2g t1h .t2h t1j .t2j t1k .t2k t1l .t2l t1m .t2m t1n .t2n t1p .t2p t1r .t2r t1s .t2s t1t .t2t t1w .t2w t1ý .t2ý t1z .t2z t1ň .t2ň t1ž .t2ž t1ş .t2ş w1b .w2b w1ç .w2ç w1d .w2d w1f .w2f w1g .w2g w1h .w2h w1j .w2j w1k .w2k w1l .w2l w1m .w2m w1n .w2n w1p .w2p w1r .w2r w1s .w2s w1t .w2t w1w .w2w w1ý .w2ý w1z .w2z w1ň .w2ň w1ž .w2ž w1ş .w2ş ý1b .ý2b ý1ç .ý2ç ý1d .ý2d ý1f .ý2f ý1g .ý2g ý1h .ý2h ý1j .ý2j ý1k .ý2k ý1l .ý2l ý1m .ý2m ý1n .ý2n ý1p .ý2p ý1r .ý2r ý1s .ý2s ý1t .ý2t ý1w .ý2w ý1ý .ý2ý ý1z .ý2z ý1ň .ý2ň ý1ž .ý2ž ý1ş .ý2ş z1b .z2b z1ç .z2ç z1d .z2d z1f .z2f z1g .z2g z1h .z2h z1j .z2j z1k .z2k z1l .z2l z1m .z2m z1n .z2n z1p .z2p z1r .z2r z1s .z2s z1t .z2t z1w .z2w z1ý .z2ý z1z .z2z z1ň .z2ň z1ž .z2ž z1ş .z2ş ň1b .ň2b ň1ç .ň2ç ň1d .ň2d ň1f .ň2f ň1g .ň2g ň1h .ň2h ň1j .ň2j ň1k .ň2k ň1l .ň2l ň1m .ň2m ň1n .ň2n ň1p .ň2p ň1r .ň2r ň1s .ň2s ň1t .ň2t ň1w .ň2w ň1ý .ň2ý ň1z .ň2z ň1ň .ň2ň ň1ž .ň2ž ň1ş .ň2ş ž1b .ž2b ž1ç .ž2ç ž1d .ž2d ž1f .ž2f ž1g .ž2g ž1h .ž2h ž1j .ž2j ž1k .ž2k ž1l .ž2l ž1m .ž2m ž1n .ž2n ž1p .ž2p ž1r .ž2r ž1s .ž2s ž1t .ž2t ž1w .ž2w ž1ý .ž2ý ž1z .ž2z ž1ň .ž2ň ž1ž .ž2ž ž1ş .ž2ş ş1b .ş2b ş1ç .ş2ç ş1d .ş2d ş1f .ş2f ş1g .ş2g ş1h .ş2h ş1j .ş2j ş1k .ş2k ş1l .ş2l ş1m .ş2m ş1n .ş2n ş1p .ş2p ş1r .ş2r ş1s .ş2s ş1t .ş2t ş1w .ş2w ş1ý .ş2ý ş1z .ş2z ş1ň .ş2ň ş1ž .ş2ž ş1ş .ş2ş ý2t1b ý2n1b ý2d1b r2t1b ý2p1b l2p1b l2t1b g2t1b n2t1b r2k1b r2p1b k2t1b r2h1b s2t1b l2k1b w2p1b n2s1b r2s1b l2m1b ý2t1ç ý2n1ç ý2d1ç r2t1ç ý2p1ç l2p1ç l2t1ç g2t1ç n2t1ç r2k1ç r2p1ç k2t1ç r2h1ç s2t1ç l2k1ç w2p1ç n2s1ç r2s1ç l2m1ç ý2t1d ý2n1d ý2d1d r2t1d ý2p1d l2p1d l2t1d g2t1d n2t1d r2k1d r2p1d k2t1d r2h1d s2t1d l2k1d w2p1d n2s1d r2s1d l2m1d ý2t1g ý2n1g ý2d1g r2t1g ý2p1g l2p1g l2t1g g2t1g n2t1g r2k1g r2p1g k2t1g r2h1g s2t1g l2k1g w2p1g n2s1g r2s1g l2m1g ý2t1j ý2n1j ý2d1j r2t1j ý2p1j l2p1j l2t1j g2t1j n2t1j r2k1j r2p1j k2t1j r2h1j s2t1j l2k1j w2p1j n2s1j r2s1j l2m1j ý2t1k ý2n1k ý2d1k r2t1k ý2p1k l2p1k l2t1k g2t1k n2t1k r2k1k r2p1k k2t1k r2h1k s2t1k l2k1k w2p1k n2s1k r2s1k l2m1k ý2t1l ý2n1l ý2d1l r2t1l ý2p1l l2p1l l2t1l g2t1l n2t1l r2k1l r2p1l k2t1l r2h1l s2t1l l2k1l w2p1l n2s1l r2s1l l2m1l ý2t1m ý2n1m ý2d1m r2t1m ý2p1m l2p1m l2t1m g2t1m n2t1m r2k1m r2p1m k2t1m r2h1m s2t1m l2k1m w2p1m n2s1m r2s1m l2m1m ý2t1n ý2n1n ý2d1n r2t1n ý2p1n l2p1n l2t1n g2t1n n2t1n r2k1n r2p1n k2t1n r2h1n s2t1n l2k1n w2p1n n2s1n r2s1n l2m1n ý2t1p ý2n1p ý2d1p r2t1p ý2p1p l2p1p l2t1p g2t1p n2t1p r2k1p r2p1p k2t1p r2h1p s2t1p l2k1p w2p1p n2s1p r2s1p l2m1p ý2t1s ý2n1s ý2d1s r2t1s ý2p1s l2p1s l2t1s g2t1s n2t1s r2k1s r2p1s k2t1s r2h1s s2t1s l2k1s w2p1s n2s1s r2s1s l2m1s ý2t1t ý2n1t ý2d1t r2t1t ý2p1t l2p1t l2t1t g2t1t n2t1t r2k1t r2p1t k2t1t r2h1t s2t1t l2k1t w2p1t n2s1t r2s1t l2m1t ý2t1ý ý2n1ý ý2d1ý r2t1ý ý2p1ý l2p1ý l2t1ý g2t1ý n2t1ý r2k1ý r2p1ý k2t1ý r2h1ý s2t1ý l2k1ý w2p1ý n2s1ý r2s1ý l2m1ý ý2t1z ý2n1z ý2d1z r2t1z ý2p1z l2p1z l2t1z g2t1z n2t1z r2k1z r2p1z k2t1z r2h1z s2t1z l2k1z w2p1z n2s1z r2s1z l2m1z ý2t1ş ý2n1ş ý2d1ş r2t1ş ý2p1ş l2p1ş l2t1ş g2t1ş n2t1ş r2k1ş r2p1ş k2t1ş r2h1ş s2t1ş l2k1ş w2p1ş n2s1ş r2s1ş l2m1ş s2k1d l1s2k l1s2t s1t2r n2g1l n1g2r s2k1w}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-us.hyp0000644000175000017500000000051211761001300024672 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-us.rme % used: a b c d e f g h i j l m n o p r s t u y z \hyphenation{ as-so-ciate as-so-ciates dec-li-na-tion oblig-a-tory phil-an-thropic present presents project projects reci-procity re-cog-ni-zance ref-or-ma-tion ret-ri-bu-tion ta-ble}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tk.rme0000644000175000017500000000113011761001300024641 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Turkmen hyphenation patterns (more info about the licence to be added later) % Hyphenation patterns for Turkmen (hyph-tk.tex) % % Author: Nazar Annagurban % License: Public domain % Version: 0.1 % Date: 16 March 2010 % % ---------------------------------------------------------------------- % % The file has been auto-generated from generate_patterns_tk.rb % that is part of hyph-utf8. % % For more information about UTF-8 hyphenation patterns for TeX and % links to this file see % http://www.tug.org/tex-hyphen/ % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-de.hyp0000644000175000017500000000017111761001300024634 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-de.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-th.rme0000644000175000017500000000147112161703335024662 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Thai hyphenation patterns (more info about the licence to be added later) % Thai hyphenation patterns % % Copyright 2012-2013 Theppitak Karoonboonyanan % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Theppitak Karoonboonyanan. % % http://linux.thai.net/projects/thailatex % http://linux.thai.net/svn/software/thailatex/trunk % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-af.lua0000644000175000017500000023045412161703335024640 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="adlns", ["data"]="sandaal", ["length"]=7, ["n"]=1, }, ["metadata"]={ ["mnemonic"]="af", ["source"]="hyph-af", ["texcomment"]="% Afrikaans hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Hyphenation patterns for Afrikaans\ %\ % This work may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either version 1.3\ % of this license or (at your option) any later version.\ % The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ % and version 1.3 or later is part of all distributions of LaTeX\ % version 2005/12/01 or later.\ % -----------------------------------------------------------------\ % VERSION: 0.9 (October 2010)\ %\ % AUTHORS: Tilla Fick and Chris Swanepoel\ % hyphen at rekenaar dot net\ % -----------------------------------------------------------------\ %\ % Define lefthyphenmin to one and righthyphenmin to two\ % (although righthyphenmin could technically be made one,\ % in allmost all cases a value of two gives better results):\ % \\lefthyphenmin=1 \\righthyphenmin=2\ %\ % -----------------------------------------------------------------\ % ", }, ["patterns"]={ ["characters"]="'-abcdefghijklmnopqrstuvwxyzäèêëîïôöûü’", ["data"]=".aan5s4 .aä7lawa .a6bc-b .a4b5la .ab7salo .a6b-ja .ac7cra. .a6farm .af7arm. .a6feet .af7eet. .a4f5en .a6fets .af7ets. .a6foes .af7oes. .a4f5oo .a4f5ra .af6ro' .af6ro’ .a7fro's .a7fro’s .af6ro- .a7fro-h .a6fry. .af3s .ag6aam .agte6r5 .a6guur .a9ha. .ah7lers .a3kw .a6leer .al7eer. .alf4 .al7fagr .al5fr .al6lda .a4l3o .al6oïe .a7loïen .al3p .al5st .al7thea .al7twee .al6zhe .amp4s .amps5w .a6naër .an7aëro .an6cpl .and4 .an5dr .ang4 .an5gl .angs5 .a4n5io .an7thro .a3pr .ap7side .a5rag .ara6p. .ar7thur .ar6zbe .as7jas. .a6snog .a6sof. .a5sti .a7straa .a7s6tral .at6hol .a7thol. .a5tsj .atte4 .au7drey .b6aanv .ba6din .ba4d5o .ba7loi. .ba7ragw .ba7rins .ba6sek .ba7tho. .be7deks .be6kaf .bek7af. .be5la .be7lol. .be7skos .be7thel .be7thul .bi7sho. .bli4 .blus5 .bo7kerf .bo7kies .bo7kors .bo7maat .b4on .bo7plaa .bo5ro .bo7sor. .bo5sta .bo7trit .bo7tswa .bo7uit. .bout5j .b4re .bu6eno .bu6lol .bu7thel .by6ldr .by6lho .by6lne .by6lpi .by7port .bys4 .by6tal .ca7thy. .ca7yenn .chlo7e. .ci6rca .ci7trus .cos7ta. .cy6pri .d2 .da7gon. .dag5s .da6kat .da6koo .da7tage .da6tji .dat7jie .da6wki .de6k7laa .de6klo .de6kwe .de5la .de7roga .de6sal .de6sok .de4sp .diep5l .di6jks .di4si .di7thak .do4m5a .do4m5o .dor7ste. .dr6oef .dun5s .du6pre .dut5j .dy7spie .e6bcu. .ed5wa .ed7win. .eer6sk .ee4t .e6fron .ef7ron. .eg7gofo .e6indu .ei5st .ek4s5k .ek7sopa .ek7sord .eks7tri .eks7tro .en7dres .enk4 .en5kl .e6noft .en7ofta .en4t5j .en7topt .ep7soms .er4d5a .er6dwo .er6fle .er6foo .er6inv .ern4 .er4t4 .er5te .ert5j .ert7se. .erts5w .e2s .e9sau .e4s3k .e3so .es3p .es8p. .es6pma .es3t .es6tco .es6tni .es5tr .e7tage. .et4sn .eur5a .eu7stac .ex7odus .e6zra. .f2 .fo6chv .fo6wle .f4ri .fy6tji .g2 .ga7lage .ga7lago .ga6lap .ga6loo .g6arbo .ga6sen .ge7dart .ge3g .ge7geks .ge7guil .gekun5 .gekuns6 .ge5la .ge7mopp .ge7muit .ge7nève .ge7rogg .ges4 .ge7sjab .ge7sjar .ge5sk .ge5so .ges7pe. .ge7sper. .ge7steg .gif3 .gi7gagr .gi6sen .gly3 .gly5k .g6lyna .g4oo .gou7da. .gr6äbe .g6ruba .gui7do. .hang5s .he6blu .he6gor .he6gra .h6eind .hek5o .he7rakl .he6r5en .he6wle .hi8v. .ho6fet .ho6laa .ho6loo .hooi5 .ho7taze .ho4t5o .hy6gro .ic7teru .i4gl .ile7us. .i2n1 .i9n8a. .in6ari .i7narie .ind4 .in7dwar .ing4 .in5gr .in5gw .in6iti .in5kl .in6kly .in5kn .in5kw .in6osi .i7nosie .in3s4 .in7snee .in7twyf .i5raa .i3sa .i4sk .i3so .ja6gli .jah7we. .ja6spa .ja7taga .j6äger .je7sopp .jo7dofo .jo7safa .ju6kos .juk7os. .j6ü6rge .jy6sel .k2 .kaar4 .kade4 .kadet5 .k4af .kaï7ro. .ka7nont .ka6pla .ka7plak .k6arbe .ka7thar .ka7thu. .ka6toë .kat7oë. .ka6tui .ke6ple .ker6k5a .ker6k5l .kerk5r .ker6sa .ker6sl .ker6s5p .ke4s5t .kie6st .ki6pli .ki4r .kit7se. .k4la .k6leyn .k4li .klip5 .knik5 .kn6opn .ko6maa .ko6maf .k4op .kope4 .koper7a .ko6pla .kop5o .ko7rag. .kor6st .kors7te. .k6rak. .kr6üge .kryt5 .ku7mon. .k4we .k4wo .ky7otop .l'7etji .l’7etji .la6eti .la6kwa .la5sa .lei5s4 .lek7oë. .le6poo .le5pr .le7shab .le6son .le4sp .les5t .le6suu .lig5e .li4gi .li6gom .li6gre .li7pase .l6loyd .lo6chn .lof7ui. .lo6glê .l6ontd .los5k .lu6gen .lui5sl .l6üder .m2 .m'7etji .m’7etji .ma6cdo .ma6nal .ma6nur .ma7stek .ma7thes .ma6zda .mel6k5a .mel6k5l .mer6k5l .mes5m .me4sw .me6tem .mi6dos .mi6rba .mi7traa .m4ne .mo7djad .mo7flam .mo6sin .mo4sk .mu4e .my6nen .my6n5in .my7unis .n2 .n6aand .na5fl .na6gro .na7groe .na7smaa .na7stor .na7uurs .ne4k5a .ne4k5o .ne6kri .nek7rin .ne6kys .ne4s3 .ne7serh .n6etik .ne4t5j .ne6tru .ne6wca .ne6wfo .ne6wla .ne6wma .ni4e .ni6jho .ni6rva .nix7on. .n6kosa .noet4 .noe5tj .no6gee .no4k .n6ondu .nu4l .ny7lont .oe5kr .oe4r .oe7ralg .oe7rang .oer7os. .oe4s3 .o4gl .oh7rigs .o6klah .ok7laho .ol6ieu .o7lieui .oms4 .o2n1 .ond6ui .on7duit .o6nemo .on6ias .o7nias. .on3k .on7parm .on3s4 .on6she .on6sse .on6t7eer .on6t5er .on4tr .ont7ras .ont5ri .o9nus .on6us. .oon4 .oon7de. .o4op .oor5n .oor5s4 .oo4s .o6peet .op7eet. .o6peg. .o6pein .o6p5erd .o4pof .o4pr .op5ra .ops4 .op7smuk .o7ragie .or6kne .o3ro .orto5 .o4sk .os5ko .os7oog. .ot6hel .o7thell .ou6doo .ou7nôi. .ou5tj .p2 .pa4d3 .pa7die. .pa6vlo .pe5la .pel6sk .per6st .pe4sk .pe4st .pie6tj .pi7laf. .pit5s .p4la .po6dzo .p6oefe .poen4 .p6ontw .po6sad .p4re .pu6tad .py6paa .py6pla .py6pol .pyp5r .py7thon .r2 .r'7etji .r’7etji .r6aard .ra7dart .ra6seg .ras7eg. .re7aumu .re6gru .rek5s .re6mas .rem7as. .re6mco .re4sl .rie4t .riet5j .riet5r .ri6ple .roc7ky. .ro6gak .ron7do. .rond5s .ro5py .ros5t .ro6tre .ro6wli .ru7klip .ruk4o .ru7kope .ru7staa .ru6suu .ry4k5a .ry6ste .s6aans .s4af .s4ag .sa7gopa .s6akty .s4am .sa6vlo .s4ca .se6an. .see5ra .see7ys. .se7khuk .se6laa .se6lop .se7reni .se6sle .ses5t .se6suu .se6tap .se4tr .sex5y .s6fale .s4fi .s4gr .s4ha4 .s4he .s4hi .s4ho .s4hu .s4in .si6nes .si7pho. .si7rag. .s4ja .s4ka .s4ke .s4kl .s4ko .s4kr .s4ku .slag5 .s4ma .s4me .s4mi .s4mo .s4mu .s6nags .s4ne .sod4 .so7dafa .so7dwan .so7iets .so6kop .some4 .s6oms. .s4on .so6neg .s4op .so6pek .so7phok .so7ross .s4pe .s4pl .spo4g .s6pren .s4py .s8ri. .s4ta .s6temp .ste7rol .ster6ta .ster6t7j .s4ti .s4to .straf5 .s6trei .s6tuar .stuc5 .su7biet .sub5m .sub5p .su8e. .s4ui .su5kr .su7ther .su7tra. .s4we .s4wi .s4wo .sy1 .sy6lvi .sy7nagr .sy7slag .t2 .t6afsy .t4ag .tee5k .te6flo .te7rafi .te7ragr .ter6tj .tert7ji .te4s5t .te7stud .ti6ene .tie6t5j .ti4k .ti6ner .t6jaai .tjok5 .toe7ys. .to6kla .to7ky7o. .to6lun .to7ront .tou3 .trap5r .trek5 .tre4s .trie4 .tries5 .t4sa .ts4h .ts6jaa .ty6daa .ty6dor .ty6dra .ui6laa .ui4t3 .ui5ti .ui5t6ji .um7hlan .uns4 .un5st .u5raa .u5tra .va6kad .va6kei .va6naf .va4n5o .va7raan .va6sen .va6swa .vas7ys. .ve7cino .ve7laar .ve7lare .ve7lêr. .ve7loer .ve7lome .ve7meng .ve7rema .ve7rena .ve7reve .ve7skaf .ve7tore .vlas5 .vo6gin .vo6lyw .vo6sko .wa7ghri .wa4n .wa7smou .wa6spa .web5m .we4bo .we6b-o .week7lan .wee4t5 .we6kuu .we4l5a .we6lin .wel7ing .we6nan .werk5l .wer6k5r .we4s5k .we6soe .we6swa .w8hê. .w4hi .wi6id. .wins5 .wi4p .wi4t .wî9e. .wy7kwas .wy7nand .wy6net .x2 .y6amin .y6anni .y6asud .yk7loon .ys3 .ys6ere .ys5la .ze5us .z6üric .z4wa .z4wi aa2 aad1 aa4da aa4de aa4do aa4d3r aaf7emme aaf6sat aag5al aag7asem aag7elas aag3r aag7rond aag5s4l aag5sp aag5st aag7swee aai7lag. aak1 aa4ka aa4ko aak3r aak7ster aak3w aal1 aal6dys aald7ys. aal5fe aal6fpo aal5sa aal7sfee aam1 aa4ma aa4me aa4mo aam7smul aan1 aan6dou aand6re aan7dren aan7dros aan7gons aan3k4 aan5kl 5aankon aan7kry. 5aanleg aan7sage aan6see aans7eer aan6sek 5aansig aan7skem aan5sl aan5sn aan6som aan6son aan5sp aan7tuig 5aanva aap1 aa4pa aa4po aap3r aa4pu aar3a aar6dan aard7ang aard7as. aar5de aar7ding aar4du aar3e aar3i aar7kwek aar6lbe aar6lka aar6lva aar6lzi aar6l-o aar3o aar7ser. aar7seri aar6sid aars8teek aars8tell aars6ti 5aartap aar6tin aar7tomo aar7tryb aar3u aas3 aa4so aas7omel aat1 aat7nagt aa4to aat3r aat6sef aat7sfee aat7slim aat6slo aat6sly aat7sonn aat6sow aat6sti aau6wbe aä5ron aba6kas abak7as. aba7komb abare4 aba7ster ab3d aber6sp ab5lau ab5rup 3abso abu7scha ab5wie ac5que a2d a3da a4d3aa adam4 adam7pe. ada4r a3de ades7lan ade7smee a3di adi6eus 5adjud 5admin a3do a4dow a3dr 5adres. ads7erwe ad4sn ads6op. ad5sor ads7teso ad4su a3du ad5uit adu7spel adu5tj 5advert a3dy ady7smit a1e ael7atoo ae4l5ei ae4lo aes5to aes5tr aes7tuur aë1 4afee af5eks afel5aa af4fre af5gha af5inr af3l a4fof af1r af5raa af5ram af5ran a4f3re 3afri a4f5rit a4f3ro a5frod a4f3ru af3s4w 3afva afval5 ag3aa a6gaanv a4gaar ag5adv a4g3ak ag5alg ag5api ag5are 4age. 4ageb 4aged age6ddo a4gei 4agem a4g5erv 4ages a6g5ewen agge7us. a3gi a5ging a4g5ins agi5s6tr ag1l ag5ogg ag5ord ag5ork ag5oud a4g3re ag5rei a4g3ru ag3sa ags7abno ag6sins ag5ska ags7koev ag5skol ag5skr ag5sky ags4lo ag4sn ags6oep ag5som. ags6oom ags6op. ag5spe ag5s6por ags4t ags7taal ag5sti ags6waa ags6wee ag4tu agt7uur. a4g3ui ag5ure ag5uur ag-7lag. aher4 ahe5ri a4hs. ai1 aig6ne. aiï5er ai4lp ain6ste aip6eis ai3s4k ai5sla ais4p ais7prys ais4t ai3tj ai3t4r a4k5aan ak5arb ake6lee ake6lof ak5ess ak5ins akis4 akis7te. 5akkoo a2k3l a5klank ak6leet a2k3n ako6bre ak5oms a1kr a4k3re ak5rig ak4sc ak5sme ak3sp a4k3ui a2kw ak3we ak5win a3ky a4kys a1la ala7gadi a5lagm al5agt ala7kled alan7gaa al5dei a4lef ale6str al4f3e alf6eni al4fh al5fie al4fj alf7olie alf6sko alf6sni alf6sta alfs7tan al4fu alf4- 5algori alien5s ali6gal ali7glas alk7aard alk7laag alk7oond alk5sp al4kui alk7wyk. 5alleen alm7eier alm7lont a1lo als4a als7agti als7ghaa al6skel als7kelk als5li al4s5oo als7pret als5waa als7werw alt6hea alt6hus alt7rots alt6sas alt6wee a1lu alve5o a2m a3ma ama3k4 aman6t5j ama7rins am5atoo 5ambag 5ambass a3me am5egt ame6sin ame5sm ame6spo a3mi ami7skyw amm6afu 5ammun a3mo amp7arre amp7lag. amp7leer amp7lig. amp7lug. amp7omhe amp7seël amp7sfee amp7sier amp7staf amp7staw ams7esel am6s5kop ams7lend am6smet ams7meti ams6mul am4s3o ams7pels am6swan am6swar ams7wyn. a3mu a4mui am5uit a3my an5agt ana7kwal an5alf ana6spi an4c- and7aans and7adel an6dakt an5dan and7anal an4dap an6dase an6datt and7attr an6degt and7egte and5eks and7emal an6derf and7erf. an6dete and7etes and7eval an6dinw and7inwa and6ja. and6jar an4d5om an4don an4d5op and7oud. an6drak an4dro and6ser and6s7kop and7spaa and7spre and7steg and7swee an7dwing and7wyn. ane6ron ang7aal. ang7adem ang7ghor ang6hai ang6lad an5g4li an6glig ang7lig. ang7lip. ang6nol ang6ons ang7ore. ang7repu ang7sakm ang6ska ang7snee ang6s7te. ang7stem ang6sur ang7ure. anie6t5r an5inl ani5sf ani7slaw an6kase ank7asem ank7refe an4kry ank3w an5ops an5opt an5opv an5ord an5org ano7roei ano7stoe anr6hyn ans7aalw an4s5am an6sass ans7asse an4sc ans7eila ans7eura an6sink ans7ink. an6sjek ans7jekk ans7jord an4ske ans5kei an6skin an6s5kop ans7kous an6slat ans7mada an4sn ans7oran an4s5pa an6sper ans7pet. an4spo ans4ti ans7toil ant5aan ant5aar an6tass ant7asso an4tei an6teks ant7ekst 5antenn ant7ete. an6tins ant5jo an4tol ant7opru ant7rest ant5rin ant7rob. ant6ski ant6sko an4tui 5antwo a1ny a1o a2p a3pa a4p5aan a4p5agt ap5aks ap5arm 5aparth a3pe ape6nop a3pi api6rfa ap3l a3po apo6kaa ap5ond apo5sta 5appar ap1r ap5rol ap3ru a4pry ap5ryk a5prys ap6sall aps7alli ap6seko aps7iden ap6skof ap6s5taa ap5sti aps7toet aps5we a3pu a4pui ap5uit a3py a1ra ara7gwan ara7klee ara6kop ara3p4 ara6ppa ar6d5agt ar6das. ar6datm ar5der ar6deti ar6d5opp 3area aree5s areg7swe ar3ei are7knip ar5fla arg4h ar5gha 5argite ar4gl arg4o arie4f ari6jke ar6k5ana ar6kini ark7leer ar5klo ark6los ark7onvo arko6v. ark7snui ark5sp ar4kw ark5wa arn6avo a1ro aroet6j aroe7tji aroo5h aroom4 aroo5p aroo5s ar3op aro6wva ar5rag arres5t ars5ag ars7elek 5arsena ar5sie ars6kou ars7krap ar6skre ars7kree ar6skro ars7pan. ar4spr ar6stal ars7tall ars7tee. ars6-in ar6taas art7aasv ar6talb art7albu ar4t5as ar4tc ar5te. art7eend ar5teh ar4tei art6hol art6hur art6omo art5oog art5oor ar4tor art7reek art7roep art6ryb art7samb art6slu art6spr art7spyn a1ru arus6o. a1ry ary7taal as3ag as5app as3c as4d. as4dh as5egt ase6rak as5ete as3f asg6hit as4hi asi7freu a4sj. a4sjm a2s3k a5skool a5skri as5kru a2s3l as5laag as3m a4smy a4sna as3no as9of. as5ogi a4s3oo as3op as3p as4por as3t as4t. a5staa as4th ast6les a5stof a7strak. a5s6tran a5s6troo as3w a4sys as5yst at5aar a4tag ata3s4 ata6sse atas7se. ata6wba ate5it 5atelj ate6rar ate6rer ate6ron a6tetes ath7cart a5t4hee ath7kinp ath7lone atie6te a2t3j atk6v-s 5atleet 5atmos at5oog at5ry. ats7alma at6sint ats7inte at4sj at6skin ats6kom at6skop ats7kop. ats7krip at4s5le ats7lykh at4sm ats6maa ats7nood at6somw ats7omwe at4son ats5ond ats7onko ats7onlu ats5op ats7ower ats7tend ats7trek ats8treke at6stro ats3w at5the att6hys at4tu atu6maa 2au aud6rey au5gra aug6sbu aul6spo au3p aure5u auri5s4 aus4t aus7tin. au5str aus7tus. aut6ste ava6lop ave7lott avlo6v. 3avon awa7glas awas4 awe5ga awe4r5a awer6ui aws6han ax5ofo a3ya ay4a. ay5ist ayn6ard ayn6or. a3yo a3yw azoo7ka. azz7agti az4zl azz7orke 1ä 1b2 2b. babak4 bab7wiër ba4d5ra bad5sp ba4kin ba3kl ba4kla ba6kleu ba4k3o ba4k3r bak3w bal6kla ba4lo bal7onts bal5or bal7tsas ban4da ban6dek ban4d5r ban7glad bang7ste bangs8te. ban4k5a ban6kre ban4kw bar7kaan bar4s3 bar5th bas7ekst bas7ghit bas7jan. ba4sn ba5spe bas7peer bat5aan ba3t4j 2bb b3ba b3be b3bi b3bl b3bo b3by 2bd b3de b3di b3do bed7slaa bed6sta beds7taa be3dw beel6dr bek7neus bek7wind bel6aga belk6li bel7klik bel6ldo ber6gaa berg7aar ber4gl ber4g5r ber7grys ber6gzi bers7pan ber6spr bers7pre bert6sk bes6aan bes4k be5ska be3sl be3sm be3so be5son be5sôr be3s4t be6s5ter be5sti be6stia bes7tial bes7trol bet4h be5tha bet7hesd be5ton be3tw 2b1f 2b1g b3ge bid3s bi4du bid7ure. bie6dui bie4g bieg5r bi4jl bin6dri bio7sfee bi4rc bis4a bis6ho. bis7scho bi3tr 2bj b3je 2b1k b3kl b3ko b3ku bla4d5a bla6don bla4d5r bla5so 4blau bleem5 ble4s ble7ser. bles5k ble6tji blet7jie blê6rfl blik5o blix7en. blo4k3 blo7kaal blo4m3 blu6sem bly7mare bly3s4 2b1n b3no bob7slee boe6kil boe6kom boe6koo boer6st boers7te boe4s5k bog7gher bog7skut bo2k1 bo3ka bok6aak bok6ale bok6as. bok6erf bok6ies bok3l bo7kleed bok6om. bok6ors bok6ost bok3r bok6rag bo4m5aa bom6aat bo4m3o bon6dam bon6dra bond7raa bon6tel bon4t5r bo9op. bop6laa bor6dak bor6des bor4g5a bor6gri b4ors bor6saa bor4s5k bor4s5l bor4s5t bo2s bos7anem bos7jamb bos7pepe bos7taai bo5s4tr bos7uil. bo5t4ha bot6sto bou6it. bou3s4 b3pr brand5a breek5 br4ei brei5s4 brengs7t brie6kw briek7wa 3bro bro4n bro4sk bro6vni bro6wni bru4l 4brup br4üm 2b1s b3se b3si b3sk b3so b3sp b3st bs4ti b3su 2bt b3te b3ti buc7cleu buik5s bui5t4j bult7af. bul4t5j bul6top bult7op. bul6tui bun7senb bus6had bus7toer but6hel buu7rend 2bv b3ve b3vi 2bw b3we by1 by3d by3k by4lb by4lt by3n4a by3s bys6kot bys4l bys6tek bys7ter. bys6tor bys4w byt7alka byt7eier by3tr 1c2 2c. ca4es cam5ph ca3pr ca3ra car6lto caru7so. cat4h ca5tha 2cc c3ca c3ch c3ci c3co ce4st ces5te 2ch. che6lan 5chemi che6reg che5r4i che7ryl. che7styl che6vvi ch5hoe ch5lei ch5nik cho7rage ch5sia 2cht 2ck c3ke cot7rand cove7ry. 2ct c3ta c3to c3tu cus5to cyp7rian 1d 2d. 4d5aanb d5aand 4d5aank d5aansl daard5u 4dabs 2d1af da2g da5gas dag5et da5gha dag6ham da5gra dag4sk dag5so dag7ster dak7lei. dak7oorh da4k3r dak5wa 4d5alar 4damb dam6plu 3dan dan6k7erk dan6sak dan6sko dans5m dan4so dan4s5t dan4t5r daph7ne. dap4l da5pla 4d3arm 4dart d5arti da4s. das7lag. das7traa da3t4j 2db dby6lvo 2dd dda5kl dda3s4 dde6lee ddel5so dder7aal dde6ras dder7as. d3dh dd4hi deba4t dee4g deeg5r dee4l dee7lig. 4d5eenh deë7skou 4deg. 2dei de3ka dek6aan de6klad de6k5lat de6klei dek7lei. de4kna 6dekono de6krie dek7riet 4deksa dek6ska del7appe del5eeu del5egg d5elekt del7elek 6d5eleme de6leng del7enge del6fer del5fi del6fos delf7os. del5oor del7oper del6ser del4so del7sold del7sone del4sp del6str del7stre delt6ag del7tagt del7weis 4demm dem6pla den6din 4d3eng 4denj den6kar den6kja den4k5l den4kr dens7pre den4t5j den6tri deo7plek deo7sfee 3dep der5ast de6reen der7een. der7emig der7ent. der7flap de6rin. derm7ins der5na de4ro de5rob de5roe der5of de5rol der5on der5ow der5ps der6sjo der5s6kr der6slu der6spu der7thal der6uit de5sag des7alni des5ap de6seng des7enge de4s5in deskat5 de6skor des7leed de4sn des7offe des7oksi de4s5on de4sor de4spa des7pari des7poës des7prik des7taal des7tele de4sti de5stig de4sw des7weë. 4d5ete. deten6te de3tw 4deuro deur5s6w 2d1f 2d1g dge5sp dg4li 2dh dias4 dia7stol dia6zvi dic7kie. dic7tio. die6fal die6kes 5diens die4pl die6tom die4t5u dig6ofa di4gre digs4 dig7skro dig7som. di6kamp dik7amp. di4k3l di4kr dik7ribs di4kw dik7wyn. di4l5al din6gas din4gr 4d3inl 4dins 4d3int 4d3inv di6sass dis7assi di4so di5son dis6pne dis7quis dit6hak dit7jies 2dj dja7dji. d4ji. d4jia 2d1k dklo4 2d1l d3la 2dm 2d1n doek5r doe6lon doe6sko does7kop 2dof 4dogi do4l5os dol6sou dols7ou. 3dom dom6pli dom6sap 4d5omse dom7slim dom6swê 4domt don4sk 4d5oord 4dopn dop6rof dop6rys 3dor 4d3org dor7othy dor4sl dor4st dos6tel dou3t do3y doy4e 2dp d2r 3dra dra6gaa 4d5rand dra7stan 4dreë 4d3reg d4rela d4rew 4driff d5rigt d5riss 4driv droë7ys. 4d5rond d5rooi 4d5roos dr4op dro6pan dro5pn dro7sfee 4d3rug d5ruim d5ruit 4d3rus 4d3ry. 4d3rye 4d3ryk 4drym d4ryw 2ds ds5aamb ds5aar d4s3ad d5sakr ds5aks ds5angs d4s3ar ds3as d3se d4s5een ds5eis. d4s5eko dse4l dse7leer d4s5eng d4s5era dser6tj dsert7ji d4s5erv d5sfeer ds3id ds5imp ds5inde d4s5ins ds5int d2s3j d5skee d4skin ds5kind d4skis d5skole d4skom d5skoo d6skraa d6skrit d6skroo d4s3le ds3li ds6luie ds3m d5s4mee ds6moor d4sna ds5neu ds5noo ds5not d2s1o d3soe d5some ds3on d7sonde. d7sondes dson4t ds5oog ds3op ds3ow d5s4pel d5spes d3spi ds5pop ds6prek d7spreker ds7preki d1st ds5taak d4staf d5stand ds5tea d5stel ds5tent d5ster. ds5terr d5sters ds4ti d3str d3stu ds3w d3sy 2dt dter6tj dtert7ji du4e- duns6te dur6rhe dusie5k dus6kap dus6pel 2dv dverdiens9 dverdien8st dve6sid dvie4 2dw d4waal d5waar 5d4wang dwa6nor 4dwarm dwar7se. d3wat d4weil 5dwerg dwerk5o dwe6tar d3wil d4wing 4dwoo d4wyn dys5ag dys6mit dys7tuin 2d- d-r6hod e1a eam6ses eang4 eate4 eau7mont e3ba eb5adr eb9cu. ebou5t ebou6t. eb4re ebrons5 eb5tui ec5cle e4chn ech7tiaa eda7gaat eda5go e3de ed5eis eder7as. ede7ring ede6sap ed5off edors5 ed4ra ed5rep ed6saks eds7kalm ed4sl eds7lafe eds5om ed3sp ed5s4we ed5uit ed2w ed5woo ed5yst ed3yw ee5agt eed6atu eed5we ee4dy ee2f eef7laag eef7lopi eef7rant eef7rek. eeg3l eeg5ru eeg3s4 eeg6sdi e5eila ee2k eek5ass ee5klaa ee5klag eek5lo eek3n eek5og eek7oors eek7rooi eek3w eek6wal eel5ap eel6doo eel7doos eel5een eel7eer. eel5ei eel7indr eeling7s6 ee6lins eel5int ee4l3o ee5lob eel6ood eel6oon eel5sa eel7snag eem7onde eem5ou ee2n1 5eendj een6ema ee5nen 3eenj eenk4 een5kl een7slot een5sm eens6pa een7swee een7topp ee4ny eep7esel eep7leer eep7loog ee4pop eep7roes eep6sam eep7skep eeps5ko eep7skui eep6sti ee2r eer5ap ee5red eer5ee eer5end eer5in ee5rob eer7oes. eer5om eer5on ee5row eer5ps eer7skur eers7lam eer7smed eer6sow eer3u eer6ust eery4 eer5ys ee2s3 ee4s. ees6ala ees6ap. ees6lep ees5me ees7muil ee5sna ee5sny ees6op. ees6pre ee5staa ees6tal ees4tr ee6styd ee4sw ee5syd ees6yfe eet7appe eet7eenh ee4ti eet5in eet7rek. ee6troe eet7roed eet7ruik eet7wiel eeu3g4 eeu5in eeus4 eeu7spoe eeu5tj eeu6ur. ee5yst e3êr eë5aan eëks5t eël7eier eël7yste eë4na e3ër eër7agti eë5ran eër7arm. eë5rod eër6ske eë4sk eët6ste eëts7te. e4faf ef5afs ef5eks 5effek ef5inh e1fl ef5loo e4fly ef5oms ef5oue ef3st efs6tal eg5amp ega5s4k e3ge ege6las egel7as. eges7per eges4t ege6vwo e6ginko eg5ogg eg5rig egs7enti eg6sins eg6s5int eg3sk egs6lot egs6pre egs6pri egs6pyk eg6s7taal egte6re e4g3ui eher6in ehe7rinn eho6kra eib7niz. eid7rok. eid7saam eid7salo eid7sirk eid7skou eid7sku. eid7spa. eid7spek eid7ste. eid7stoo eid7sug. ei1e eie7naan eig6h-n eig7opro eik7aard ei5kno eik7wydt eil6spa 3eind ei4n5ed ein7eed. ein7glas ei4non ein7oord ei4n5op ein7otte ein6sad ein6sep eis7angs ei5sei ei6s5ind ei5sja eis7kamm eis6kaw ei5skê eis6kot eis6laa 4eiso eis7ouer eis6pir ei5s6tel ei5s6tre eit2 eit7hand ei3tj eit7klin eit7nisp eit7onde ei5tra eits5ko eits5l eits5o eit7spor eit7stak eit7stra eits5w eï5mit eï4na eïn7klin eï4no eï4nu eï5oni eï4sl eja7stas ek5aan ekaars8te ek5aks e3kan ek5asg e3ke ek5een eke7naar eke6tam e3kê e4k5ins ek3k e4k5les e5kleu e4klê ek5log e3koe eko6mol ekom4s ek5omsl ekoms5t 5ekono ek5ooi e3kop eko6pap e4k5opm ek5opn ekor6da eko7rum. ekou6st ek5owe e1kr ek5rad e4k5rok e5krom ek5rug ek6sapp 5eksemp eks5esk eks7inge eks7logi eks7loks eks7outo eks5pir eks5po eks6poe eks6tel ek6sten ek4sti eks7uur. ek5uit e4kwê ek5wie e4kwu e1ky e1la e6l5aand el5aanh e6laanv el5aard el5adm el5adv el3af el3ag e5lag. ela7klon e4l3al e5lari e4l5arm ela7slan el5asp eld7adel el4dap el5de. el6d5ele eld7erfe eld7evan eld7olie eld7onde eld7smid e3le el5eien eleis6t elei7sta e6lelek el5erts ele7sett ele6too el4faa elf6abr elf6eit elf7en-d elf5erk elf6lan elf6les el4fon elf7onth elf7ontp el6foop elf7oops el6foor elf7oors elf6ron elf7twyf e3li eling8stell el5inh e6linko el5inv elk7nage elks4 el4kwi el4lv elm5agt e1lo el4ob e4lol el5oli el5ond el5ont e4loor e4l5opd el6ope. e4l3or el5phi els7angs el5sfe el6sind els7indr el6skan el6skom els7korr els7krit els7lof. el5smi els7mora els6nag els7nood els7onde els7oork el6stek el6s7tran els7ware el5swee elt7akke e1lu el5uit eluit6j elui7tji e3ly ely6kaa em5app e5masj eme6lek eme6lew eme6ron eme4s eme7sis. emes5m emes5t e5metf em5eva e4moef em3op em5org emp7laag emp6skr ems4p em5spl e4naf ena7glas en5agt en5akk en5alt e4n5art ena6spe en6d5agt ende7ro. end7raak end7rit. ends7oë. end7sons end7ure. end6wer en5eil en4en e4n5ent 5energ ener6tj enert7ji eng6hor eng4la eng6lor e3ni en4ig en4im en5inh e6n5ink. eni7soms 3enji en6kinh enkom4 enkoms5 enk3w e5nomm eno7ryn. en5out ens7adem en6sall ens7are. ens7eise ens7elek ens7elik en5sen ens5erv ens7esse ens6haw en5sie ens7inga en5sji ens7koei ens7kyke ens7luik ens6med ens7nuk. en4son ens7onru ens7onva en6spei ens7pist ens7pot. en6spou ens7pous ens7taak en6stak ens6tam en6steh ens6tei ens6tel ens7tele en7sters en7s6tes. ens6tet ens6teu ens6too ens7toom ens7trek ens7uil. ens7ure. en5sy. ent5akt en6teks ent7inte ent7rif. ent7rok. ent6sin ent6son ent6spa ent6wen en3ui enu6lin enu5sk enu5st e3ny en-7steg e1o eoe4s eo5fag eo3g4n eoi6ste eop6lek eo3ro eo1s eos4t eo3tr e4paf e4p3ag epe6loo ep5emm ep5epi epers7te 5epidem e4p5int ep4la ep5lap ep5ligg ep5lus epoet4 epo6nin ep5ops e4p5rei eps7ameu ep6s5eis eps5id ep4sj ep4sk eps7kano ep5ski eps7kohe ep4slu eps7luik eps6oms eps5on ep4s5pr eps7waar ep5uit e1ra er4a. er5aan er5afd er5afh er5afsk er5aft er5afv er5afw er3ag era7gree era7kles er5aks er5akt er5alb er6ald. er5alt er5ana e5randa e4rapp er3ar era6ser era7uitv erd7ryle erd7slip erd7tree er3dw er4eb er6eenk er5eers er5eff er5eie er5eil er4ek er5ekst er5elm e4r5emm e6rengt e4reni e4renj er5erg er5erv e3r4es er5esel ere7spio eres6ta ere6stp ere7temm e5rewa e1rê er4fh er6flaa erf7leen er6flet erf7lett er5flo erf7lug. erf7lus. erf7omhe erf7oom. er4fp erf7reuk erf7ruik erg7aren erg7lyn. erg7renm erg7rymp erg6rys erg6sho erg7stra erg7uitj er4id eri5fr e3rig eri4g5a e4r5ind e6rink. e6rinna er5ins e4r5int e6r5ital eri7trea erk5aan erk7esel erk6has erk7ink. er6kins erk7inwy er4kj er6klat er5kle erk7onde erk6opn erk6s5on erk7spas erk6sto erk7uurr er6kweë erk7weë. erk7ywer er5lik er5lui erm4a erm7aanh erm7afsl ern7eiwi ern7kwes er4nm er4nn ern7oes. er4nr e1ro er5oew er3oë er5ogg e3roï e5rok. e4r5oks e4r5oli er5om. er5omh er5oms er6ona. er5oog e5room er5oond e5roos e4r3op e5ropa er6opla e5ropo e4ror e5rora 5erosi e4r5oss ero7stil er5oud er5oue erou6t. erp7anke er6pinh erp7inho erp6lan erp7ruik erp6sig err6ein ers7assi er6s5eli ers7ete. ers7inda ers7jean ers7kaia er6skaj ers7kaju er7skake ers7kaki ers7kete ers7kiss ers7koet ers7koor ers7kop. er5sky ers7less ers7lone ers7luid ers6mal er7smara er6smat er4s5om ers7onvr ers6opn ers7ower ers7pien ers7put. ers7scen er5ste ers7tele ers6teo ers4ti ers7treg ers7waar ert5aan er6taap ert7aap. er5tap ert7ape. er6tend ert7end. er5tes ert6hal ert7jakk ert7opin ert7orre er6tres ert7rok. erts5l ert7uur. ert6wak er5twi e1ru erug3 er5uin er5uit er3uu e1ry ery7doel ery7salf erys6ma ery7smaa ery7suur ery7trek e5saan. e5sage es5agt es4ak es5all esa6mol es4an es3c es4dh e3se e4s5een e4s5epi es4er e3si es4ia es4ie es4if esi6gei e4sill esin6s5i es4it e2sj e4s5ke. es5kle eskor6s eskors7t e5s4kut e3sla es5lem es4lip e1sm es4me es5me. es5men es9mè. e5smou es4mu es5nie es5noo es4ny esoet6j esoe7tji eso7fagu es4ol e3s4oo es4ou e1sp e5spel es5pen e4sper es5pet es5pir es4pli es4pra ess6opv e1st es4t. e5stad es5tas e4s5te. es5tea es5teli e4s5tes estes5o est6her es6tik. es5toi es5tos e6strak es4tre e5stuk e3sw es4yd e4t3ag eta7stas e3te e4t5eie ete5r6aa etie4l5 5etike et7jie-k etk6ysi eto6nop et5opv e4t5ord e4t5ram e6treke e6treko etre7kor et5rim ets7fyn. et6skat ets7kato ets7kous ets7krie et6s5lap ets6maa ets5ong et6spaa et4spr et6stek ett6re. et5uits et5unie et4wi et5win et4wy et5yst 2eu. eug6rie e3uit euk7inte euk4l eul7eien eu4loo eu5mon eum7uitg eu4na eun6sla eup7aand eu4ra eur5aa eur6aal eu5ral eu4ree eur7eet. eu6reg. eu6regt eur7egth eur7ekst eur7elem eur7spar eu4sa eus7ape. eus7jig. eus6kot eus6tac eute4l eu5tem eu3tr e1uu 2eu- eva7kwaa eva6les evr6ore evu6es. ewal4s5 ew4ar ewee4 ewe7gaan ewe7goed ewe7inde e5weis ewe6nee ewen8stes ewe6res ewe7span ewik4s ewiks7te exy7ste. eyn4o e5yste e3yw e4zka ez9ra. è1r ê1 êe4ro êla7flui ê4rde êre6loe ê4rhe 1ë ë1g ëi3e ëk4sk ëks3p ëks6pek ëk4st ë3laa ël5agt ël5alb ël5as. ë4lei ël5ent ëlf4l ël5fle ë5loop ëls7kuil ën5agt ën4tr ënt5re ëpre4 ër5aan ër5afd ër5off ërog4 ëro3s ër5owe ërs7kent ë1ry ë1s 2f. 1fa f5aanb f3aar f3ad 2f1ag f4agi fah7renh fai6r-n fak6ste faks7te. fan4t5j fan4tr fant6s5t f3ap f3art faru6q. 2fb 2fd f5dein fde4s fde7sake fde7sess fde7skei fde7stor fde7stra fde7sust f3d2w 1fe 4feen 3f4ees f3eie fe4l5ap fel7asem fel7enti fe6loon fel7oond fel5s4m fel6spoo fe4lu fe4ly fel5ys fer6skr fers7kra fer6sku fers7kui f5erts fe2s fes3t fet7ete. f1f ffe6las ffe6ret ffe6tet ffi6eek ffies6m ff5rei f1g fge7sper fg4ha fg4li fg4ly fgod4s5 1fi fi3d fid6ji- fie7ekst fie7lafo fie7smaa fie4s5o fie6tol fi5lag fil4m5a 4finr fi5sto fit4z 2f1k fkom6st fkoms7te fla4p flap5o f2le f5lees f5lese fle4t flet5j flex7or. 2fli 5f4liek 3f4lit 2fm fmo4no f1n fni4s3 1fo f3of 4foff fok4s5t fol4k3 4foms 5fonds fond6sk fond6st fonds7te f5ontb 5fonte f5ontl f5oorl 2fop fo4po fop7spen f5orde f3org for7oksi fo5rom fo3ru fos7feen fout5j fox7hill fox7stra fp4sa 1f2r frag6aa 4fram f4ras f4ren fre4s5k 4f3rig fri6too f4rod fru5ga f3ry 2f1s fs5agt f4s5ank f4s5eko f4skon fs5log f3sm f4sma fs4me fs4mi f3sp fs4pl f4spro f4s5tak fs4ti 2ft ftre4 ftre5d ftrek5 1fu fu4ch fur6ore fu3so 4fuur f5uur. 2fv fva4l 2fw 1fy fyn7goud 2f1ys fyt7appe fyt7jie. 2g. 1ga g4aai gaam6s7te g4aan. g5aanbi g6aandh g5aanl g5aanw g4aat 4g3add 2g1af g4afo 2g1ag g4agr ga5gre gag6rep gak4l ga5kla gal7afsk gal7appe galei5 gal7oog. gan6gra 4g5anke gans7ke. g3app ga3ra 4g3arb 4g3arm gar4s3 gars6ti gar7stig g5arti ga6sarm gas7arm. gas6mok ga4so ga5sol gas6pel gas6tre ga4tr gat7ruik gay7nor. 2gb gbys4 2gd gde7roof gdut7jie g3dw gd4wa 1ge ge3d gedi4s g5eenh gee6tal geet7al. geës3 geë6sti ge3f 4ge4ff gef4l ge1g2 4geg. geges5p geg6uil g3eie geï7migr ge7k6lik. 4geks gek4y gel6agk gel6dad gel4do ge5lol ge5loo ge6loon gel7oond gel6s7te. gemi7au. gem6opp 3gen gen4dr gen6dur genes5t 4geng ge4oi gep4a ge5pag geper6st gepon6s 3ger ge5rap ger6ard ger5ete ger7iden ge6roef ger6ogg ger6spo ger5sw ger6uit ge3sa ge5sfe ge5sin ges7jagt ges4k ges7kade ge3sl ge3s4m ge5sne ge3sp ges7perb ges7pers ges7pes. ge3st ges6tas ges6tig ges4w ge5tja ge3tw ge3ui ge5um. gev7woes gewens7te ge1y 2g1f g3fl gf4li 2g1g2 g3ga gga7kwee gga7stre gga5t4j gge6sti 2gh 5g4hoer gho7ghok gho4l 5gholf g4hs. ghu6moe 1gi g5iden gie6far gi4fa 4gimp gin6gaa 4g5inri gip4s gip7siet gis7enti gi5tra git5sw 2g1k gkaar4 5g4lans gla4sa gla6sel gla6ska glas5o g4le. 5g4len. gli6don g4lif gli6gur 4glik g4lim g4lip 3glis g4lob 4glod 3g4loe g4lof 3g4lom g3lop 3g4lot g4lo- g3lus 3g4luu g4ly. 4glyn 2gm gma7skui 2g1n gneem5 gneet5 gnie6ko 1go god6sak god6sid 4g3oef goe7krui 4goes g5oes. g5oeta goe7the. goë7lary 2g1of 3gogi gol4f5o 4g5olie go4mag 4g3ong gon6sto g3ont goo5gl 4g3oor 2g1op go5pla 3g4opo g5orig go3sl gos7pelr g5osse go3s4t gou4d3 goud6a. gou7dief gou7dini gou7dink goud6s. gow7rie. go9ya. 2gp 1g2r g4rab g5rak. gra4ma gra7mado gra4m5o g4ras gra4s5a gra4se 4g3red g4ree4 g5reek greep5 4greë g4ren gren6st g5rese gre4sp gre6sur gre6tji gret7jie g4reu griek6s7t grie6t5j 4grig gri4p g5rit. 4g3rok g4ron 4g5rooi g5rook g5room g5rowe 4grug g5ruim 4g3ryk 4grym gry6ste 2gs g2s1a g5saam gs3ad gs6ade. g4saf gs5agt gs5aks g5sala g5sale gs5ana gs5ant gs5app gs6appe gs3ar gs3as g4s5een g4s3ef gs5eis. g6seise gs5eko gs5eks g5sekt g4s5ele g4s5eli g4s5ene g4s5est g4sew gs5ewe gs3f g5s6feer g4sid gs5ide g6simpa gs5inde gs5ini gs5inl gs5ins g2s3j g2s1k g5skaal gs5kab g5skad g6skapa g5skatt g5sked g5sker g7skeur. gs7keurd g3ski g4s5kin g4skl g5skof g5skole g4skom g5skoo g6s5koor gs5korr g5skot g5skou gs3kr g2s3l g3s4la g5s4lop gs3m g5snel g2s3o gs4ol gso6pro gs4ou gs3p g5s4pel gs5per g5spes g3s4pi g6spill gs4poe gs6pore g7sports g5s4pru g1st g6s5taak g4s5tab gs6tabi g4stak g4stal g4star g4s5tek g6stelg g6stera gs5teri g6sterr gster6s g6stese g4sti g5stigt g4stoe g7stoele gs5toer gs5toet g4s5ton gs5trad g6strak g6stran g6strap g6strib gs5troe gs7troon g6struu g4s3ui gs3w gs6werw 2gt gte7eenh gte7lagi gte6ras gte6rer gte4ro gte7roer gte7rol. gtes4 gte7sfee gte7smee gt5uri 1gu gu2a gu2e gu5ela guid6o. gui6rla 4guit 2gv 2gw g3yst 2g- 1h2 2h. 2ha. hal4f3 hal6m5ag 4halo hal4s5k hal6s5tr ham7pagn ham6skr hams7kra han6dan han7dja. han4dr han4du han6gli han6gor hangs6l hang5s6w han4s5k han6ska har6dop hard7op. har6sel har6sol har6spa har6t5aa har4t5j har4to har7toem ha4wk haw7shan hay6eli heb7lus. hee4l heer8s7te. hees6e. heg7orga heg7rank heg7spyk 5heid. heid7stem he4ko hek7saan he4k3w hel7ange hend4 hen4so he2r her3a he9ra. her6akl he7rald. he5r4an he3re her7egpa he4r5ek he4r5ev herf4 herfs5 her3i her6ib. he5rid he5rod he5rol her5ond her7ontm he5ros her6oss he5rou her5ow her7sche her3u her5yk he4sp hes7peru he4s3t hete5r6o heu6paa he3us hev3 he4vr hewen7st hie4r hier7in. hie7roni hie7rony hië1 hil6lbr 5hings hing6s5t hipe4 hi4rl hi4sp his5pa hi4v- 2hl h3li 2hm h3ma 2hn hode6sl hodes7la hoe7kaai hoe6kys hoe6spi hoe4s5t hoër7op. ho4fa hof5aa hof7amp. hof7uits hog6hok hoi7swer hok7rakk hol7aar. holes5 4holf hol5in hol7oog. 4hon. hon6daa hon6dag hon6dro hop7land hop7smaa ho3ro hor4s hor4t5j hos6hol ho4ta hou4t5a hout5j hou6tol hou6tom hou6who 2hr hre6sto hrie4 hries5 hris5t h3te h3to hu9go. hui6daa hui6dui hui6sef huit6ji hui7tjie huk6hun hul4p5a hul6pek hul6ple hul6por hul6ste huls7te. hu3mo hum7oes. humus5 huter6s hut7jie. hut6spo hut6ste huts7te. h5vill 2hw hyg7roma hys3k hys7tang i1a iaan6so iaan6sp iaan6st iaans7te iam7son. ia4nop ias6koo ia5spo ia5sta ia5s4tr i4baf i4bag ibou6s. ic5ky. i2d i3da ida7groe id5agt idde6ra i3de ide7snui i3dê i3di idia5s id4ja i5djan i3do i3dr id2s1 id4s5et ids7inoe id4ska ids7kerm ids5kr ids3l ids7lags ids7nye. ids3o ids3p ids6pa. ids6pek ids6pie id6spil ids6pri id6spry ids7taal ids7tee. ids7teks ids7tele ids5ti ids5toe id6s7trek ids7ure. i3du id3uu ieding6s7 ied7ione ied5rol ied3w i1ee i4eee ie5een ieë7aard ieë6lys ief7alar ie5fie ie4f3r ief7stal ief7uitg ie5gla ieg7loka ieg7riem ie6grit ieg5st iek7asyn ie5ke. ie6k5erv iek7esse ie5kie ie6klaa iek7laai ie4kni ie6k5ond iek7ople ie6kops iek7opse iek5opv ie4kre iek7revu iek7rigt iek7ware iek7wees ie4k5wi iek6wos iek7wyd. ie4laa iel6afo ie6lene iel7oor. iel6san iel6s5on ien7anal ien7glor ien6kro ien7olie ie4n5oo ien4s ien7sakk iens5or ien7sout ien7span iens5t ien7stam ien7stel ien8stele ien7stet ien7stoo ien5suu ie4n5ur ie6poog iep7oog. ie6proo iep7rooi ier7afma ie6rafs ier7engt ier7eter ier7neff ier7omtr ie4r5on ier6oni ier6ony ier7swee ies6amp ie5se. ie6senk ies7enke ies7ents ies7ferw ies7kaf. ie6skon ies7kop. ies7kraa ies6kry ies7laag ie6slep ies7lepe ies5li ies7luik ies7meub ies7mooi ie3so ies7oes. ies5ond ies7oorp ie6sopn ies7opne ies7pane ies5per ies7plig ie6s7taal ies6tas ies7tee. ie6steh ies7tele ies7tent ies6tin ies5uil ie4s3w iet7aans iet7aard iet7alba ie5te. iet7erts iet7omse iet7reke iet7reko iet4sl iet7uie. ie5twi ie4tys i1eu i4eub i4eud i4eug ieu7grie i4e3ui ieu7ing. i4eul i4eum ieu7skot i4euu i4euv i4euw ie5wie ie4w- ie5yst ie-7klik i3èr i1ê iël6sku iën6tji iënt7jie ië4s3t i4fei i4fim i4fin if1l i2f3r i4f3ui i4g5aan i4gap igare4 igaret5 ig5eff ige6naa ig5ete ig5ins ig1l ig5loe ig4op ig5opt ig5org igo7roos ig5res ig5roo i4g3ry ig3sa igs6ins igs7kaps ig7skend igs5ko ig5sku igs6mee igs6ona ig5soo igs7poei ig5sti ig7stoei igu7era. ihu6ahu i1i ike6roe iket5j ik5kli i2k3n iko6nat i1kr ik6sakt iks7akte iks7iden ik4sin iks7inve iks7juk. ik6skom iks7paar iks6pad iks7pare iks6tik iks6tuu iks6wel ik5wan i4k3we i4kwy 2il i1la il5agt ila6too ilbe6st ild7agti ild7smaa ild6stj ild7temm ilet5a ile6tji ilet7jie ilf4l il5fli il5gha ilinde6 illo4w 3illu il4m5at ilm7oper i1lo ilo5sk ils7insp ils7orde il4spr ilt7aar. i1lu i2m i3ma im5agt i3me i4mek im5eks ime7laar iment6s ime4s imes5t i3mê i3mi 5immigr i3mo i4m3o4p imo7theu 5implik i3mu imu6maa in5aard i4naf i4n3ag in5akk in5arg in4d5aa in4das inder7as 5indiv ind6oef in6doog ind7oogm in6d5oor ind7sleu ind5sw 3indu in5dwi inee7tji ine5ra 2inf ing7aars in5gan ing7eter ing6hpa in6gind in6ginf ing7infr ing7inst ing6leb ing6ope ing6opl ing5ou ing7pseu in4g5ru ing7saag ing7sap. ing7see. ing7sekr ing7seku ing7sfer ing7sin. ing7sinj ing7skal ing7skêr ing7skud ing7slep ing7slym ing7sofa ing7som. ing7somm ing6s7pil ings9telle ing7stin ing7suie ing7suil ing7swel ing7uil. i3ni ini6gaa in4ik in5inf 5inisia ink7erts ink7laag ink7ler. ink7nerf ink5nu ink7ogie in4kol ink7olie 5inkom ink7ring in6krol ink5st ink7wit. 5innam 5innemi innes6t inne7ste in5ong ino7skaa in5rag 5inrig ins7epou in6s5ete 5insets in4sg ins7kaps ins6kin in3sl ins7molt ins7moor ins6ond 5inspek ins7prie ins4t 5insti insti7t. ins6ton ins7twis int7appe int5ess inte6s5t int6he. int6uit int6wyf inu5e. 5invlo i1o io3pr ior6ubr io1s ios4k io5skl ios4p ios4t io3tr i2p i3pa i4p3ag i3pe i3pi i3pl ip4lo i3po ipo4s5t i3pr ipre4 ip4s. ips7kopi i3pu i4pui i3py i1r ir4ch irke4 irkel5o irop4 iro5pr iru4s i4rwa is3ag i5sagi i4s5aks i6sangs is3ar i4sarg is5asp i4sav is3c i4s3ei i4s3et ise5um i5sfeer ish7nie. i4s5int is5inv i2sj i4sj. is5jan is5joe i2s3k is4k. i4ska is6kaaf is5kan is4kê is5kui i2s3l is5laa i5slag is3m i5s4mit i2s3n is5oes is5ond is3or is3p is4p. is3t is4t. is4th isto7pho i5s4tyn i4s3ui i5suik isu6maa is3w i2t i3ta it3ag ita6tis it3b i3te ite7dwal ite7glas itek7te. ite6mas i5tenh it4er ite5ru i4t5ete i3tê i3ti it4in i4t5ins i3to ito5fa ito7plan ito7rowe it1r it3re it3ry it4sc it5ser its5ete its7jood it4s5oo its7perk its6tek its7tori its7uur. i3tu itu6saa it5win i3ty ity7sokk itz7laan i1u ium1 iu4ma iu4me iu4mi iu5mie ium6uur iwel6s5k iwe7mos. iwes4 iwe7spor iwe5st 1ï ï2m ïn5akt ïn3o ïns4t ïn5und ïs5lam ïs3t 1j 3jaa jaar6s7kr 3jac ja4cq 3jag ja4ga jan7ghai jan7knap jap4l ja5pla 3jare 3jari ja4sm jas7pant jas6tas jaz4z jaz7zeri je4kn je4kr jek7rasi je5rop jes7nië. jes4t je4t3r jet6sjn jeu4g 5jie5kn jie6nan jie6nol jien5s 5jieon 5jieop jie6ska jie7skap jies7kat jie6ski jie6skop jie6s5lo jie6slu jie6sol jie6son jie6spa jie6s5tr jie6sui jie7suik ji4eu jin7gope ji4rp job4s3 joe7kwee joen6sk 5joern 3jong jos6afa jou7kuit juit6sp juk7riem 3jun jun6kre 2k. 1ka k4aal k5aand kaan8s7te. k5aanw kaar7se. kaars7te 5kaart kaar6ti kaar6t5j kade6la kade6sl 4k3adv 5kafee kaf6oef 4kafr 4k3afs 2k1ag 5kagem k4agg 5kagge k4ago k4agr 4kaks kal4k5a kal4k5l 5kalko kal6koo kal4kw kal4s5p kal4st 3kam kam6par kam6ple kams4 3kana kaner5o 3kank kan6ont kan6sko kan6ste kans7te. 3kant kan4t5j kant7om. kan4t5r ka4pak 5kapas kap7inte 5kapit kap6lak kap7lat. kapo4 ka5pri kap7seis kap6spr kap6stek 5kapte 3kar. 5karak 4k5arbe k5arm. ka5roo kar6oor kar4st k5arti kar5to 3kas 4kasg kas7laai kas6maa kas7traa ka5s6tro 5kateg kat7etes kat6har kat6hu. ka4too kat7ryk. kats4 kat5sw kat7uil. kay6aku 2kb kbe6kwi kbout7ji 2kd k3de 1ke kede6lo kee2 keel5a 4keen keep6s5t keer6so keer6ste keë6laa keël7aar 4keff kei6dro keids7pr 4keik keis4 kei5st 4k3eks ke4l5ak ke6lane kel7anem kel7assi kel7eenh 4k5elem ke6linb kel7inbr kel6mag ke4l5ou kels8onde kem6afa 4k3emm ken6aar ken6dra ken7eel. 4k3enj 3kenm 3kenn ke4nou ken7son. kep7laai kep7ler. ke4p5lo kep5sk ker7een. ke4rel ker7els. ker7flan 3kerk ker6kal ker6kin ker6k5or ker6kow ker4kr ker7kris ker6kui kerk7uil kerk5wy ker6m7eng ker6naf ker6nei ker6nen ker4n5o ker7oes. ke4r5on ker6pru ker6set ker4sk ker7skil kers7kom ker6slo ker4sn ker4so ker7son. ker6s5pi kers5w 4kerts 6k5ervar kes6el. ke4sn ke6trol ket6ska 5ketti ke4tu keu6ror 3keus keut7jie key7kleu key7nooi kê4rb 2k1f 2k1g kga7laga kge5la 2kh kha7yeli k4hoi khu7khun 1ki ki2e kie6dro kie7laai kie6mas kiem7as. kie6sent kie4s5k kie7skry kies5l kie6slo kies7tan kie4ta kieu5s ki4kl ki4ma 4kimm 5kind. 6k5indel kin5dr 4kindu k3inh 4kinl 4k5inst kio4s kios7ke. kip7ling ki4rc 3kis. kis7obli ki5s4po ki5s6tew kit4s kits5k 2k1k kk4ag kka7smaa kka5str k3ke kke6nee kker5kr kk4li 1k2l k5ladi 4kland k5lang k4lank klas3 klas6e. kla6sin k5leerd 4kleg k5lege k4l4ei 4klel 4k3len 3kle4p klep7as. k4ler 5klere kle5us k3lê 4klied k4lier 4k3lig 4k3lik 5klikk kli6kop k4lim kli6moe k4lin 5klink k5linn kli4p3 k4lis kli7sjee 4klog klo6kon k5loos. k4lou klub5h klu6bre 4klug 2k3ly 2km kman7spo 1k2n k4nap 4knav 5kneg. 4knei 4knem kne4t knet5j 3kni kni6kla kni4p3 knoe4 knoe7te. 4k3nom k5noot k4nop knor7os. 1ko kob7rego 3kod 4k3oef 3koek koe6kei koe4l5o koe5pl 3koer koe4s3 koe7sist 3koë 4koë. k4ofi 4kogi kok7onth kok6skr ko5lag kol6for 3koll 3kolo 3kolw 3kom kom7aan. kom7bina 4komg kom7ghad k5omhu kom7miss kom7saal kom4sp kon7atoo 4k5ontl kon5tr 4k5onts 4k3oog ko4op 5koord 3koö ko4pag kop7ape. kope7la. kop7las. 4koplo 3kopm 4kopn 5kopno ko4po 6kopper kop7uits kord7aan kor6doe kor6foo k3org koring7s k3ork ko3ro 3korp kor4s5l kor7sten kor4t5a kor6tji kort7jie 3kos kos7eetp kos7inko kos7juff ko4sk ko5ski kos5ko kos5pe kos5taa ko4t5ak 5kotel kous7te. kou5tj kovi7ev. ko4vk ko4vs k5owerh 2kp kpro6pa kp4si k2r k5raad 3kra4g kra7gers krag5o k5rak. 4krand 5krank 5kredi 5kreet. k4reëe 4k3reg 4k3rek k3rel k5rese 3kret 4kri4f3 4krig kri4k3 kri6moo 3krin kri4p krip7lee 3kris 4k3riv k5roet k5rolp 5kroon kr4or 4k3row 4krub 3krui 4kruim kru6kas kruk6s. kru4l k5rusp kry6fin krygs5t 4k3ryk kry7sket 3kryt 2k1s ks6aan. ks5agt ks4ak ks5chi k4s5een k4s5erv k4s5eti k3si k6singe ks5ins ks6jari k4skan ks5kin k4skon k4slê ks3li k5s6maak ks5moo k5smou k2s3n k5snob k4sob ks5obj k4s5ond ks5onl ks5opk k2sp k5spek k5spel ks5pen ks5per k5spes k3spi k4spir k5spra k5spri ks5pur k6s5taal ks5tant k6steken k6stemp ks5tens k6stera k6s5teri k6sterr kster6t7j ks5tet ks5tip k7strado k6s5trah k5s6trak ks5tur ks5tuu k3sty ks3ui k4s5ure ks3w k5swei ksyn4 2kt kte6rad kte6ron kter6sp ktes4 k4the k3ti k3to kto6rev k3tu kt4wi 1ku kud7aksi 3kuik 4kuim kuin4 kuins5t 4kuit kul6der kul6plo kul6poo 3kult 3kun 4k3uni kun6sin 3kurs 3kus ku6seen kus7lang kus7node kus7taak kut3r kut6slu kuus6te kuu7ste. 2kv kvang6s 1k2w 4k5waar k3wae k4wan 3k4war kwa7skaa k4week 4kwees 4kweg 4k3wer kwê7lafl kwik3 kwi6kwa 3kwis 2k3wo 3k4wot k3wu ky4fa kyk7uit. k1ys 2k- k-5kli 2l. 4laanb 4laanh 4laard laat7slo laat6str lad7onde la4du 4ladv 2laf la4fa l3afd 2lag l4ag. la4ga la5ga. la5gas l4agi la5gie l4agl lag7lag. l4ago lag5ri lag7some lai6rgo lak7albu lak6led lak7okul lak7oore 4l5aksi lak3w lak7ware lamb7da. la4m5oo lam6pli lam6pol lamp7oli lam6sko lam6sle lam6spe 3land lan6daa land7aar lan6dad lan4d5r land6sta land6s7te lan6gaa lan7gnol lan4go lang7ste langs8te. lan6gur lan4k5a lan4k5l lan6kop lank7ope lan4k5r lan6kwi lan4s5k lan4sp lan4s5t lan6taa lan7taat lan4t5j lan6tre 4lantw lap3r 4l3art las7elek las6ie. la4sn la4so la5sol la4sp las5pa late5r6a 5lawaa lba6spe lbe6kne lbo6wvi lb4re ld5amb ldan7ha. ld5apt l4d5een ld5eis lde6rat lder7os. ld5ins ld3of ld5oor ld6oor. ld5ord l4dow ld5owe l5draa l4d3re lds4k lds6maa ld3so lds6ond ld3sp l4d5uit 1le lec5tr lee2 lee4g3 4leep3 leer5a leer7eis 5leerl leer5o leer5s lee4s lees7tra lee7tjie lee7vaar 4l3eff leg7slot 4leien lei7gleu lei6kaa lei6naa lei6not lei7skoo lei6spa leis7pan lei7spir leit5s lek7loti le4kn lek6suu 3leli 5lengt 4lenj len6sel len6ste lens7te. len6tji lent7jie le5pel lep5li lep7oog. lep7ratw lep5sk lep6szy leps7zy. ler4a 5leraa ler6kam lerk7amp lerk5sp 4lerts le4see le4set les5ete les6hab les7insl le4ske les7kes. les7lie. les7onde le4s5oo le3st les7taak le4ste le5stel les6tin les5tra les4ty les7uur. les7wete l5etan le4tc let5em let7oorb let7rol. let6sko 4leuf le3u4m leun5s leur7eg. leu4r5o leute4 lew6ein 6l5ewena 4l5ewig 3ley 1lê lê4rw lf5aan lfa7stra lf3ei l4fek lf5eks l4fen l4f3ev lf4ie l4fin lf5ing lf3l l5flap lf5onde l5fone lf5onts lf3op l2f3r lf6skar lfs7karm lfs7kop. lfs7kuil lfs7nier lfs7oog. lfs7perk lft4w l4f3ui l4f3uu l1g lg4ha l4gli lgo7lagn lg6ordy lgs6mee 1li liat6ji lia7tjie 3lid lid7onts 3lied lie6gli lie6kwy lie5la liers5w lie5sme lie7steg lie7stys lie7swak 4l3i4eu lig7inte lig6las lig6ny. lig7omge lig7rekl lig7riet li4gro lig7skag lig7sona lig5s4p lig5s4w lig7ure. lik7aspa 4likk 5likkew li4kl lik7opsi lik6see lik6sju lik6soo li4k5wa lin6gid lin6gin lin6gli lin6goo ling7ooi 4linh lin4k5l lin4kr l5inli 4l3inr l5insp lin4t5j 4linv li4pa li4p3l lip5la li5plo li6poml lip7omly li4p3r lips4 lip7soom 5lisen l5item liter6t7j lit3j litjie6 lit3r lit7sha. lit4sp lit4s5t lit6zdo ljus4 l1k l4kaf lka6tio lkat7ion lk5een lks7emos lks7epos lk6skap lk4sku lk4sl lk4son lks7ower lk5spe lk5spr lk6stel lks7tell lkter6t lktert7j lk5uil lk5wat lk5wit l4kwy lk5wyf 2l1l l3la llat6ji lla7tjie llei5s lle7knop lle6rui lle6swe lleve7ë. llo5sk lls7moor l4maf lmo6kal lmo4no lm3sm l1n lne4s lob7eend loe6dal loe6det loe7dja. loe6don loe4d5r 4loef loe6gos loeg7os. loers7te loe6skr loe4st lof7opri lof6spa 4logig log4o lo5gop log7sot. log4st log7stok lo4k3l lok7onde lok7swin lo5kwi l5olie. lomer4 lomert5 loms4 4lond lon6gaa long7aar lon6spa lon6ste lons7te. 4lont lon4t5j 3lood loofs5w l4oop 5loopb l5oore 5loosh loo7stra lop7emme 4lopl lop6rys lo3ro lo5ryn 5lose. lo4sj lo4sk los7laat los5ta los7trum los7wikk lo4tak lot7riet lot7ruïn lot7swan lot5ui loui7sa. lou3t lou6wna lou6wre lou6wtj lo4wr low5ry lox7era. lö4jd löj6don lp5aan lpe6nin lp4he l4pon lp5ond l1r 2l1s l4s5aar l4sad ls5arm l4s5asp l4s5eko lse4l lse5le lse6mek ls5erva ls5fei lsg6haa lsi6g5aa ls5jas l4s5kin l4skon l6skorr l4skre l4skru l5s6maak l5s4mee l4snaa ls5opw ls6plet l5s4pli l4spu l3st ls4ti l6stoeg ls5waar ls5wet ls5wyn l4t3ag l4t5amp lta7spie lter6sk lt5oond l5t4wak lu4bh lu4bl lub5le lub7loka lu2g1 lug6er. lu5gub 3lui. 4l5uie. lui7masi lui7slan 4luit luk5raa luk7rake luk6s5pa l5unie. luns6a. lur6pag lus7moor lu3t4h lut6zpu luus6te luu7ste. lva7soor lve5ti lwe4r5a lwe6rui 1ly lyce7um. ly4fe ly4fo lyk7aant lyk7lope lyk7lug. ly4kn ly4k3o lyk6ont lyk7rede lyk5sk ly4ma lym5ag lym7uint 3lyn lyn6aaf ly3pl ly3sp lyt7ring 1m 2m. mac7dona made7us. mae4s m1af 4mafd m4afo ma5fro 4mafs mag6sta ma4hd mah5di mak6lot ma3kw ma5lag mal7thus mamat6j mama7tji man7djar man3g4 man7gona man6n-p man7salm man7spen man6spr man6s7taa man6sto man7ure. map4l ma3ra mar6kek mar6kle mar6kom mar6kon mar4k5r mar6lpr mar4s5k mar4s5t mar6tro mary7na. mas6koo mas6kri mas6kui mas6tek ma5s4tr mat6hes mat7thys may7nard 2mb mb4re 2md mdo6poë mdop7oë. md5soo m3dw md4wa 4meder mee7kole mee5kr 5meel. mee5l4o mee5ne mee7reis mee7reke mee5sl mee7spre meest7al mee6tre me3ga megas4 mega5st 4megt mei6nee mel6aar mel7ekwa mel6kal mel6kjo mel6kla mel6kna mel4k5r melk5s mel4k5w mel7spul mel6too mem7phis men7angs men7eise men7opga men6sky men6snu men4s5p men6s5ta men6tin men4t5j men4t5r me5phi me4rak me6rass mer7asse mer5ast mer7dein me4rei me6reng mer7enge mer7esse mering8s9taa mer6kli mer6kna mer7kopn mer4kw mer7kwar mer5oes mer7onth mer7treë mes4a me4sal me4s5ka me6s7koor me6skor mes7kore me6skro mes7kroe me4sl me5slu mes7moss mes7port me6stas me4s5to mes7ware me4t5ee met7emps meter6so meu6las meul7as. 2m1f mfloer6 2m1g mgang4 mgangs5 mgeper6 mges7per 2mh mh4ei 4mid. mid7osea 4mids mids5t mie6kas mie6kwa mie6ret mie4r5y mie6skr mie6taa mie6tji miet7jie mig6re. migu7el. mih7rab. mil6taa min7gopl 4m5insp 6minstu mi4rl mi3sf mis7sêr. mis6tkr mis6tok mit7swa. mi4v- 2m1k mkaar4 mkom6st mkoms7te 2m1l m3la 2mm mma5sp mmas6to mma7stor mmat6ji mma7tjie mme7loor mme6res mme4r5o mmi7stok 2m1n 3mod mode4l mod6jad 3moe moed4s moe6nes moe4st mof6lam mok7alba mole4s5 m5olie. mol4m5a mon6dch mon6dop 4m5onts 3moon moor6da 2mop m3opl 4morg mo3ro mor6sju mor6spo mor4s5t mo5saa mos3f mos7fles mos7inen mo4ske mos7keë. mo5sta 3mot mote7us. mot6heu motor5a mou5fl mou7slip mou6ste mous7te. mou6tek mo9ya. 5môre. 2mp m4pag mpa7gne. mp5agt mpe6lys mpen6to mp4her mp5ops mps7kraa mp5sli mps7taal 2m1r 2m1s ms5app m4s5kat m4skon ms7kraal m5slin m3s4me ms3op ms5pen m6s5taal ms4te m5steg m5steo m3sw 2mt mter6t5j muc7klen mues7li. muf7smaa mui6les 4muit 3mul mum7aant muns4 mun5st mun6tou mur4g mur7gie. 3mus 2mv mvi6tra 2mw myl7afst myl6sla 3myn myn7ent. myn7impa myn7inge m1ys 2m- 2n. 1na 3naal 3n4aam 4n3aan 6n5aardi naar6skr n5admi 4n3adv nae6lys nael7yst n1af n4afi naf6lad nag6aand na6gaap na4g5ap na6gemm nag7emme nag6las n4ago nag5ron nag3s 4nagt n5agtig na4gu nai7set. na5kli nak6lip 4nalf 4nalt 3nam na3p4l na3pr nap7roet 4n3arb 4narea na3s4k nas7klip na3s4l nas6maa na3sp nas6pel nas4pr na5s4ta nas6ten nas6tor na5s4tr na5stu nas6tuu nas4w na5swe na5t4ha nat6jie nat7onde 3nav 5nawee na9yl. 2nb nba6chs 4nche 2nd nda7gesk nd5akt nd5app n4d5arb nd5art n4d5ass nda7stoe nde7eier n4d5een nd5eg. nd3ei nd5eksa ndel8s7kor ndel8s7taa nd5emm nde6rad nde6raf nder7af. nde6rar nde6rem nde6r7ent nde6r7ess nde6rim nder7in. n6deros nde7rosi nde7sill nde6zvo nd5ide ndi5go nd5ins nd3of n5dome nd5omt nd5ond nd5ont n4d5opb ndo5st nd5rak nd5rat n4d3re nd6resd nd5riff nd5riv nd5roe nd5rok nd5rot n6druim nds7ertj nds7geru nd6sinl nds7kenn nds7koor nds7kraa nd6s7laag nds6leg nd5s6maa nds6ons nds7oorn nd5sor nd6spre nd5spu nds7taal nd6stek nds7toet nds7troe nds6wee ndt6wis ndu4e n4d5uit ndu7kraa n4d3ys 1ne nebe6st nec7ticu 5neder nee2 nee4l neel5a n4eem 4n5eend 4n5eenh neer5o neer5s nee6tew neeu3 nee7uur. nee7woor 4neff 4neg. ne5gla n3eie 4neil 4neksp n5ekspe nel6lma ne6loon nel7oond nel6spo 3nem nem6afi nen4sl nep7olie 3ner. ner6faf nerf7af. ne4ros ner7psig ner6sle ner5sw ners6we nes7evan nes6tas ne4ste net7omge ne4tri ne5um. neu7moko neu7raal neu6sji neu6ska neu7stoo neu6toë neut7oë. ne4wt 3nez 1nê 2n1f2 n3fl nfy6tap 2ng n4gad n4g3ak n4g5apt n4g5ase ng5ass n4g5een n4g3ei ng5eks nge6r7aap nge6r5al nger6d5r nge6ret nges7per ng5eten n6geter ng5imp n4g5ink n6ginst ng1l ng6lasu n4goë ng5oë. n4g3on n4g5oog n4gou ngp6seu n6g5raad ng5ran ng5rat n4g3ri ng7sade. ngs7agit ng7sappe ng4see ngs7eise ng4sek ng6serk ngs7erke ng6sero ng6serv ngs6fer ngs7impa ng4sin ngs5int ngs5kan ng7skat. ng7skoel ngs7koep ngs7kop. ng7skors ngs7kort ngs7kurw ngs7kuur ng6s5laa ng6slab ngs7labo ngs7ladi ngs6lep ng7s6loop ngs6lym ng4sn ng5sni ngs6oet ngs6ofa ngs6omm ngs7pelo ngs7pill ng5spoe ng7stabi ngs7tal. ng6steh ng6stei ngs7teik ngs7telg ng6stem ngs7tema ng7stemm ngs7temp ng6s5ten ngs7tese ngs6tin ng6stou ngs7tou. ngs7trap ngs7truu ngs6uie ngs7ure. ngs6wel ng5uit 2nh 1ni nie6kaa nie7knik nie6raa nier7aar niers5w nie6uin nig7aard ni4g5ee ni4g5ie niks7py. nik7warm 4n3ind 4ninf nin6g7ele nin6get 4ninh 4n3ins 4n3int 4ninv n5invo n2is nis7alma nis6ara ni5see nis5id nis7insp nis6oms ni4son ni3tr nit7sare nje7glas nje7krui njie6st 2n1k nkaar4 nk5aard n4k3af n4kak nk5aks nk5eff n4kei nk5eie nke6las nke6lit nke6ree nkers6w nker7swe n4k3li n2kn nk3na nk5nes nk5neu n4k3of n5kofi nk5psi nk5rig nk5rol n4k5roo nk5ros nk5rye nks6noe nk4s5om nk3sp nks4t nk3s4w nk5uit n2kw nk5wat n5kwen 2n1l n3la nli4ga nlu4s n1n nna6spo nna7tjie nne6pol nne6sev nni4s 1no 4noef 4noes noe4st no4g5al nog7eens nok5as no9ko. nok7riww 3n4oma n4omm nomo7yi. no4n3a 4n3ond 4n3ont noo6dan n3oog noor6di 4nopb no5pla nop6laa 4noplo nop7omhu nop6rod 4norg n5orga nor6kla 3norm nor7tham nos6kaa no3sp 3nota 3note not4r no5tre 2np n1r nroet6j nroe7tji 2n1s n4s5aar ns3ag ns4an ns5angs ns4e. ns4el nse4pr nser6to nser6tr ns3f ns6feer ns5gel n3si ns4ia ns4ie ns4ig nsi6gar ns7inges nsi6tri ns4iu ns3ja n6skafe n5skap n4skar n4s5kel ns5kin n6skous n4s5kra n2sl n3sla ns5lam n6sland ns3le n4s3li n4s3lo ns6lotg ns6lott n3slu ns4mee n5snar n4sne n5snel ns5noo n5soek n4soë ns5oë. ns5ond nson4t5 ns5onw ns3op ns5par ns5pas n4s5per ns7portr n4spot n6sprat ns6prek n6staak n4staf ns5teh ns6tel. ns6tels n5s6ter. ns6ters ns5trak n3s4tu n4s3tw nst6wyf ns5tyd ns3w ns6weer n4syw ns5ywe 2nt nt5ags nt5ark n4t5art nta5tj n4t5eie nte6ram nte5sm nte6sti n5t4hon nti7kwaa nt5inv nt3ja n4tjo nto7fakt nt7oksie n4t5oli nto6nad nt5ond n4top nt5ops n4t5org nt7radin nt5raf n5tref ntre7kor nt5rim nt5roe nt5rom nt5ron nt5room n5troos n5trou nt5row nt5rui nt5ryk nt3sa nts7inge nt6skan nts7kand nt4s5le nt3s4m nts7onde nts5paa nt3st nt5uit ntu4m3 n4t3ys 1nu 3nua nu4e. nu4es. 2nui nuk4w nu5kwa nul7soms 4nuni nu5skr nu6skra nus4t nu3tr 4n3uur 2nv nva6lis 2nw ny4so nza6cs. o1a o4bag ob5agt o3bo ob5vor oby6nro ock7wyn. oda5gr od5een ode7leie ode7spaa od5lui od3op od3re ods7akke ods7kish od6slak ods7lake ods7lopi ods5oo ods6op. ods6org ods7paar ods7rogg ods6uit ods6waa ods6war ods6wyg odu4k oe4d5aa oe4d5ag oe4dei oed7eie. oed7ette oe6dind oed6ja. oed7onde oe4d5oo oe4d5op oe4d5or oe4d5ro oed7stry oe4du oed3w oed7wyn. oe4f5aa oe4f5an 3oefe oe4fek oe4f5lo oe4f3o oef7rit. oeg7aand oeg7laer oeg7lam. oe4gog oeg3s oeg7yska oei1 oeien6a oeis4 oei7sker oe4kaa oek7eier oe6kerf oek7erf. oek7eval oe4k3l oek6lap oek7olie oek7oort oe4kr oek5rak oek5re oek5ro oek7sten oe4k3w oe4lei oe5leie oe6lemm oel7emme oel7eter oeling6 oelings7 oe6lins oel7inst oel7onbe oel7opri oel6ser oel6skr oel7slik oe4nei oen7eike oe6nert oen7ertj oen7esse oenk4 oen5kl oen7knoo oen5kw oe4n3o oens5ko oen5sm oens4o oen7ysbe oep7aang oep7inst oe6pinv oe4pl oe5pla oep5li oe5plo oep6s5ee oep6s5in oep4sl oe4pu oeras5e oer3k oe4r5on oer5ou oer6ske oer7twak oe5ser oe5sie oe5sje oes7kraa oes7limt oe4s5lo oes7medi oes7pil. oe4s5po oes5ter oes7troe oe4swe oet7aanp oe4t5am oet6he. oe4t3j oe6t5oli oe4t5oo oe4t5ri oe4t5ru oets7kra oet6sna oet6spe oet6s5te oet6sti oet5wy oë5rug of3at of5een 5offis o4f3in of3l o4fok of5oks o4f3om of5psa o2f3r of6sant ofs7iden of6sins ofs7insi of4s5le of4s5oo ofs7paar o4fui o1g og4d. oge4s5t ogge6lo oggel7oo ogi7faal 3ogig og1l og4nat ogo7steo o4gry og5rye og4s. og4sg ogs6inf og5ska ogs7last ogs6ot. ogs4p ogs7pad. ogs7pris ogs6uip ogs6wan oi1 oig6aff oi3k oile4 ois4a oi5sag oi5ski ois6kuu oi5sky oi5sla ois4p ois4t ois7teïs ois6wer oi3tj oje4k ojek5l o4k5aas o4kag ok4am ok4an oke4t oket5j okie4 o4k5ins ok5lat ok6leed ok3n oko7seil oko6sol o4kou o1kr o4k3ro ok4s. ok5sig ok6sins ok4sj oks7kraa oks6lip ok3sp ok3st oks6win o2k3w ok4win o1la ol5agt olf7ent. ol5fèg olf6lap olf6sku olf6sme ol4gl olg7onde ol4g5or olg7smee 5olieb olies6m olie7sma 5olifa oli7gny. olk6sem olk6sep olk6sow olk6sti o1lo olo5kw o4l5oor olo5sp olp6hta ol4sar ols7are. olt6zha o1lu olyf5o o2m o3ma om5agt oma7pleg o4m5arm omat6ji oma7tjie o3me ome4s ome5us omg6had o3mi omka5s4 5omloop o3mo omos6fe omo7sfee omp7ligs omp7oor. om6pop. oms6aal om5sla oms6lag oms7perk 5omstan oms6tin o4n3ag o5n4age o3n4an ona6skl ona7sten ond7aap. ond5agt ond7ampt ond7dwaa 4ondes onde7us. on4did on4dom ond7rol. ond5sle ond5so ond5sp ond6spl ond7twis on5eff o4n3ei ong5aan on4g5os o3n4ik o4nil onin6gr onk7ert7j on4kj on5kno onk7omge onk7rugh onne5st o4n5oks ono7sfee on4s. onse4p5 ons7iden ons7kepe ons7kori ons7pamp ons7self ons4t on5ste ons7tol. on6t5aar 3ontd ont7elsi 5ontgi ont5raa on4tri ont7rol. on4t5ru ont7slik 3ontw o1ny ony7okol oo2 oo5agt ood3a oo5deb ood5ee oo5dek ood5er ood5et ood5ok ood7onge ood3r ood6san ood7smoo ood7sorg ood7spui ood7suit ood7swaa ood7swar ood5ui oof1 oof6ser oof6sid oog3 oog6enh oog6les 5oogpu oog7sinf oog7suip oog6-lo ooi6spa ook3 oo4ka ook6sst ool1 ool6and ool7snaa oom1 oo4ma oo4me oo4mo oon1 oon6ag. oong4 oons6ko oon5sl oop1 oo4pa oo4pe oop7klik o4opn oo4po oop6swe oor1 oor6daa oor7daad oor6dap oor7darm oor6dca oor6d5om oor7doop oor7frek oor3i oor7klik 5oorlog oor6ot. 4oort. oor6taa oor6t5in oort7ja. oor6tyl oort7yl. oorve7ë. oos3a oos3k oo4so oos7pers oot1 oo4ta oot6aai oot6en. oo4ti oo4to oo4t3r oo4tu oo3v oö5spo o2p o3pa o4paf op5agt opa6les o4p3am 5opdrag o3pe op5een op9eg. 5openi op4er oper7aar ope7rage op6horu o3pi opie6le opk6lik op3l op4lan op6lein 3oplo 1opn 4opno o3po opo7fagi op5off op5ont opo7sfee 5opperv op3r o5p4rot o4pru op6skre ops6maa ops7neus op5son ops5or op3st op3sw ops7wels o3pu o1ra or5afd or5agt ora6lee ora6loo orat6ji ora7tjie ord7akti ord6arm ord7eksa ord7ierl ord7inst ord5oes or4d5oo ord6oop or6dord ord7orde or4d5ri ord7roma ore7ster o3rê orf7oond 4org. or3gh or4glo 4orgp org7ring 3orië orings8ku or5kaa orkes5 ork7lag. ork6lik ork7ney. orkom6s orkoms7t or6maan or4mj or4nj or5ond or5ong o5rot. oro7thy. or3p4h orp6ski orp4sn ors7aar. ors5ag ors7jurk ors5mo ors7pot. ors7teri ors7tery or4sti ors7trek ort7aan. ort5aar ort5akt or4tar ort6ham 5ortod ort7onde ort7rol. ort7ruk. ort5sw or1u o3r4us o3ry. ory4s os3ag osa7phat os5api osas4 osa7tjie os5cen o3se ose7phin ose7phus o3si osi6nen o4sjo os1k o4s3ka os5kee os5kis os5koe os5kop. os5kor os5kou os5kow os3kr o5skri o4sku o2s3l os3m o2s3n os5oli os5oor o4sor os5ord os3p os4pe os5ste os3t os4t. os4ta os5taf os5tak os5tal os5tar os4td os4th ost7impe os4tm o5strat os6trev ost7revo ost6roo os4tw os4t- os3w os-7lond o2t o3ta ot5akk otas4 ota5st ota7tjie o3te oteek5 ote4s5a ote6sno ote6spr ote4s5t o4the oth7nage o3ti ot3j o3to ot5opm oto6ran oto6ren otor5o otos4 oto5sk ot3re o3tro ot5ryk ots7eila ots7karr ot4s5ko ot4sl ots5la ot4s5po ots7rûe. ots7tee. ot6stek ots7toet ot4stu otte6l5o o3tu o4tui otu6set oua6che oud7agti ou6dakt oud7akti oud6ief oud6ini oud6ink oud7oorg oud7styd ou4du oud7uitg oue6rio ou3g ou4gh ou4gl oug4r ou1i ou5ill ouis6a. ou1k oul7ontl ou3m ou5nyw ou5rei ous6kak ous6ken ou5ski ous6lip ous6ouw ou3s4p ous7pan. ou3s4t ous7tert ou7stiek ous7ties out7aar. out7aksy ou4t5as out7ekst out7emme 5outoma out7omhe ou4t5oo out3r out6rap out6rei ou4wb ouw7rens ou4wv ou4-o ove5re over6y. ovie6v. ov5ket owe6nal owen7al. owe6ral ower7al. ower7kon oy4a. oy4eu ô1 ô2i ôi3e ôre5st 1ö öjd7onde ö1l 1p 2p. 5paaie. 4paanv paar7dui 3pad. pa4da pad6ie. pa4d3r pad6-eg p1af pag6ne. 3pak pa4ke pak5es paki3 pakket5 pa4ko pak5os 4p5akti 3pale pal7esse pal5fr pal6mol pa4nop pan5sp pan4t5j 3pap pa5pri pap7ryp. paps4 pap7saf. pap7smee 3pa3ra pa6ramn par7amne 3park par6kar par4ko park5r 4parm par4sk par6ste pars7te. 5party pa5sja pa4so p5aspi 3pass 5paste pas7til. pa4taa pat7are. 4patel pat4j pa5tji 3patr pats4 pat5sj pav7lov. 2pb pbe6koo pbreng6 2pd p3dw pd4wa pd4wi 3pe. pe4ak pe4ar 3ped pede4r pe5dof pee2 peel5a peel5u 4peen peet3 3pei 4peie p5eien 4p3eis pek7nek. pe4k3r pel7aktr pe4l5oe pel7oond pels7kra pel6tak pel7yste 4pemm pe6nars 3penn pen7opsl pen6slu pen7smed pen6sop 4pepi 3pera pe6raap per7aap. per7admi per6ary per7asid pera5s6t 5perd. per6dag per6dry per6dwy per7enke per5est 3peri pe4rok 3pers pers5ag per6set per6sje pers7med 5perso per6s7ond pers8tel. 5pertj per6top per7tsja per7uran 3pes. 4pesi pe4sl pe4s5te peu6rel 2p1f p3fl pf4li 2p1g pges4 pge5sp pg4ly 2ph phe6ars p2hi phi5s4t p3hit piek5n pie6raf pie6rom pie4ru pie7samp pie6ska pik7erts pik3s4 6p5inges ping6la pin7glas pin5kl 4pinst pipe4 pipet5 pi3s4k pit3j pit4s5k pit4st pits5te pits7tek pit6suu pit6zko 2pj 2p1k pkom4s5 p2l pla6kal pla6kok 5plan. 5p4lant 4p3lap 3p4las 3p4lat pla4t5r plee4 pleet5 p5leie ple4k 5pleks 4p3lep pleu7ra. p3lê pli4g pli4t5e 4plits p5loos p5lose plu6ska 4plyn 2pm 2p1n p4neum poe6doe 3poei poe4s5t poe6tol po4fa pog7rest pog5sk pok5aa pok7olie 3pol 3pom 4pomh 3pone pon7opbr pon4s5k pons7te. 4pont 5pont. p5onts 4poor. 5poort. 3poot poo6tel po4pag 4popd pop6lek 4pops p5ordo po3ro por6tak 6portso por6t5ui 3pos po4sk pos6tim pos6tko pos6tna po4t5as 3pote pou6ste 2pp ppe6las ppel7as. ppe6rad ppe4ro ppie6sl ppoor6t ppoort7j p2r p4raa 4praak p5raam 5praat pra6esi 5prakt 3pren 3pres pre4s5t 4preu 3p4ria p3rib p4rie4 prie7ël. 5pries5 priet5j 5prins 3prio 3prob 3prod pr4oe 3prof 3p4rog 3proj 4p5rok. 3p4rop pro6pop pro5pr pr4or 3pros pro5sa pro7sopa pru4t 3pry pry4st 2p1s p4sad p4s5aks p4sakt 5psalm. p4sas ps5asp p4sat p4sid 5p4sigi 5psigo p4s5ing p4s5int ps3j p5skaa p4s5ket ps5kof p4skon ps5loj ps3m ps4my p4son p5son. p4s3oo p4sor ps7portr p6stera ps4ti p6stoet p4ston p5swar ps5wer 2pt ptos4 3pub pue4b 4puit 3pun pun4t5j pus7tipo put7adde put7emme put5ji put7rioo 2pv 2pw 3pyn 3pyp pyp7aard pyp3l pyp7las. pyp3o py4pr pys3k 4p5yste py5tha pyt6hon 2p- 1q qu2 qua7driv que6str qui7nas. 2r. raa6min 4raan r6aans. 4r5aard 4rabs rac5te 5radio 4r3adv 4rafd ra4fek 4rafh ra4foe 4raft ra4fu raf7urn. 4rafv 4rafw 2rag rag6aal 5rageb ra5gie ra6ginl rag7inli r4agr rag7raad rag7ryer rag6sab rag6sak rag6sin rag7soep ragu5e rag6wan rai7gne. rak6les rak7oper rak7wate 4ralb ral7eer. ral7oor. 4ralt ram7argi 4r5ameu ram6pla r4anda ran6daa ran7dafe ran6d7akk ran6dem ran6dev ran6doe ran4dr ran4g5o rank5l ran4k5r ran6saa ran6seu ran6sjo ran6sko ran6sor ran4s5p ran4s5t ran6tad ran6tet ran4t5j ran4tr 4r3any rapa7da. ra6pas. ra5pes rap7ewen rap6loï ra4pon rap7onge rap7para rap7rem. rap7righ r4ari 4rarm 4rarr 4rart r5asia ras6tan ra5s4to ra5s4tr ra4su ras5ui ra5t4ho 4r5atom rats5o rbo6lol rd5agti r4d5ame rd5eil r6delek rd5esel rde5sm rd5euro r3do r4d5oli r4d5ont r4d5oon rdô6nne rd7raais r6droma rds6lip rd3so rd3sp rdt6ree rdu6sol rd4wa r5dwar r4dwu r4d5yst 1re 3r2e. 3reak reed5a ree4k reek5e ree7kier ree7loon 4r5eend 4r5eenh 4reenv ree6pes ree6ple ree6pro 4reers ree7sala ree7stra 3reë 4reë. 4reff 3reg. reg7ruk. reg6sen reg6skw regs7om. reg7spre 4reie 4reil rei6nar 4reind rei6noo rei6ser rei6sou reit7ze. re4kn rek7naar rek5ne rek4r rek7spoe 4rekst re4kwa rel4d rel7dae. rel7diag rel7dopp reld7ran rel7duik rel7oest ren6agt r4end 5rend. r5enig ren7shaw ren4so ren4sp rens7te. ren6sto ren6str ren6tak ren6tcl ren4t5j ren4t5r 4rerg 4r3er4t rert5j 4resel re4s5ka res7lap. res5lo re3s4m res7ore. re4spi re4ste re5stel re4sti res7toet res7toma res7ure. ret5art reu6kin reu4kl reu4k5o re5usg r4ewa rey5no rê4rh r4faa rf5laa rf5lat r3fle r5f4lie r5flui rf5opv r4fre rf5reg rf4sl r1g r4gak rg5akt rgek6li rge7klik rg5eng rgeper6 rge6rid rg4hu rg5hut rg4len rg4let rg5loo r4g3lu rg4ly rgo6wri rgrie4 rg5ros rg3s rg4s. rgs4p rguit6j rgui7tji 1r2i 3rib. rib7file rie6dio rie6dop rieket5 rie6klo rie5me rie6pri ries6e. rie6skr rie6taa ri4fa rif6ree rig6ska rig7smee rig7styf ri4kl rik6sid rik5sj rik7spad ri4kw rim4s 4r3inf rin6gaa rin7gaan ring7aar 6r7ingest rin7gleb rin4g5r rin6gui 4r3inh rin6kar 4r5inko rink5w rin6kwa 4r3inl 4r3inr 4rins r5inst rin7the. r3inv 4rinve rio7rye. rip4s5t ri5s4ko ris4o ri5son ris5op ris6per rit5ji rit7oond rit6rea ri5tro rit6zri 5rivie rix7tont 2r1k r4kaan rk5een rk5eik rke6lap rke4s3 rke7sel. r6kink. rk5inl rk5leie r4klid r5klip r4k5los rk5nei rk5omg rkom6sti r4k5opd r4k5ops rk5rand rk5red rk5rib rk5rok rks6maa rk5spo rks6uid rk5twi rk5uit r4k5ure rk5wag r4k5wat rk5wee r4k5wet rk5wil rk5win r4kwy r1l r3la rli4g rlo6gja rloo7ple rlo6wpa 2rm r6maanh rma5gô rma6gun rma7klot rma7plaa rma7raan rme6raa rmer7aar rme5sa rmi4l rmos4 rmo7stro rm5uit rmy6nim 2r1n r5nagte rna6spl r4n5ele rne4s rne4t5a rne6tom rn5oor rn6stig rns6tin r3nu roduk5 roe6fas roef7as. roe4f5l roe6fri roe4ga roe7glas roe4n5a roe4pa roep5l roe4p5o roe4s5k roe6sla roes7lag roe4s5t roes5w roe6taa 4roew rog7akke 4rogg rog6lis ro5gna ro4kn rok4r rok7slip rok4s5p ro5kyn ro4l5aa rol7gord r6olien rol7mops romp7op. 4roms ron7aar. ron6dag ron6dak ron6d7er6t7 ron6d5et ron4d5o rond6o. ron4d5r ronds4 rond5sw ron4du ron6gaa ron6kaa ronker6 ron6kert ron4k5l ron6kow ron4kr ronk7wa. ron6ske ron6ste rons7te. ron7stel ron6s5ti r5ontp ron4t5r ron6tui 4rontw roo7dewa roo7dist 3roof 4roog roo7gron roo7mens roo7nag. 4roond roop6la 4r3oor roo7taai r4opa rop7aans rop7anys ro5pee rop6een 4r5open r4opi r4opo r1or r4ora ro3ro ros6afr 4r5osea ros7kie. ro3s4p ro5sta ros6til rot6hsc ro5ton ro3tr rot4sa 4roud rou7floe rou5sk rou3t rovi7ch. rov7nik. ro4w- rox9y. r2ö rpe4s3 r4pid rp5ide r4p5lik rp5opd r4p5reg rps7idio rp4sl rps5no rp6spri rp4stu 2r1r2 rre7glob rre7nagt rre4st rre7stau rres5tr rri6gin rron7kaa 2rs r4sakt rs5alm r4s3ar r5scha rs5eila rseuns6 rs3f r5s6feer rs4ie rsi7flag r6sinda rs5inko r6sinsp r6sinst r5sjam r6skaki r5skap r6skapa r6skapi r6skeus r4s5kin rs6kink r6skoet rs6komm rs6koni r4skor r5skors r5skou rs5krib r6skroo r4skur r4slê rs5lis r4s5los rs5lyf rs6maad rs6maai r5s6maak r6smaat rs6magt rs6mak. r6smake rs6mara rs6mede rs4mee r5smeer rs4mel rsnee5m r5snoo r4snot r4s3og rsonde6 rsonder7 rs5ong rs5oog r6soors rs3op rs4op. rs5ord r1sp r6spaar r4s5par r6spien r5spri r1st r6s5tal. r4stb r6stegn rs6terp r5s6ters rs6tigl rs4tik rs4tis r4s5tit r4stj r6s5toet r6streg r3sty rs3un rsu4s rs5wa. rs5wap rs3we rs6werf rs5wyk 2rt rt5afd rt7angel rt5art r6teend rte6loe rtie4s rting4 rti7saan r4t3om rt5ont rt5opr rt5org r6treda rt5reis rt5ren r4t5rie r6trol. r4t3ry rt6s5aar rts5ond rts6pyn rt5uits rt4wis rt4wyf 3rub ru4ga rug6-sk rui6lek rui6moe 5ruimte rui6niv 4ruit5s ru2k3 ru5kaa ruk6lip ruk6opp ruk6-en rul5aa rul7ape. rul7yste r2um rum7grok 4runi rup7lys. ru5spi rus6tak rus6tka rus6tma rus6tvo rus7uur. rut7oond 2ruu ruus6te ruu7ste. rweg5a rwe6gei rwe6skr rwi7sje. rwoes5 rwy6sak rwy6see ry4fa ryf7ink. ry4fo ryf7ode. ryf6sch ryf6sin ryf6ska ryg7stek ryg6str ry6kinr ryk3l ry5klu 3rym. ryn4s5l ryp7arm. ry5ple ryp7lus. ryp7nagt ry4s3a rys6alf ry6sinl rys5pi rys5po ry3st rys4ti ry4su ry4ta ry5tra s2 2s. s'9ie. s’9ie. 1sa 3sa. s4aad saa6dui 3saak 3saal 4s3aan 4s3aap 4s5aard 4s3aas 4s3adm s5adre 4s3adv 2s3af 2sag 3s4ag. sa4gal s3age s4agi s4ag4n sa5gne 3s4ago sag6opa 5sagte. 5s6agtew 3sak. s5akad 3sake 3sakk sa6k5rok sa6krus saks4 s3akt 4s5akti sa6lamm sal7ammo 4salb s5albu 3salf sal6fol 4s3alg 4salm sal6mei sal6tro 3sam 4samba same4n 4s3amp sam6swy 4sana s5anal san6d5ag san6dak sand7akk san6dru 3sang san4g5a san6gre sang7ste 4s5anke sap6hat s5appa s5appel sa3pr 4s3arb 4sarea sar7olie 4s3art 4sase s5asem 4s5aspe sa5spr sat6jie 4s3atl 4s5atta sav7lon. 2sb s3ba s3be s3bi s3bl s3bo s3br s3bu s3by s3ca s3ci 2sd s3da s3de s3di s3do s3dr s3du s3dw sd4wa s3dy 1se 3se. s5eed. see3f see3k s5eenhe see6plo see5ram seer7as. see5rei see7roet see3s4 see7soog see5sw seë7kran s5egpa 4segt 4s3eie 4seik s5eik. 4seila sei6nan 4seind 4seis. sek6huk 4seksa s5eksam sek4s5k sek4s5p sek4st 3sel sel5aan sel7anal se4l5el sel4f5a sel7fabr sel6fer self5i sel6fid 6seliks sel5of sel7oor. sel5op sels7kak sel6slo sel7spen sel6s7taa se4m5ag 4s5emal sem7ekst sen6dan sen7ghor sen7sord sen6str sep6hus ser7afse 4serf s5erf. ser6s5in ser6skr ser6sta sers7taa ser7stad sers7tal ser6tuu s5ervar ses6aan 4se4s5ka ses7lett se4s5po se4st se4s5ur ses7uur. se4sw ses7weke s4et. sewes6t sewe7ste sey7stof 1sê 2s1f2 s3fa s3fi s3fl s3fo s3fr s3fu 2s1g s3ga sga4s5e s3ge sges7per s3gi s3gl sg4ly s3go s3gr s3gu 2sh s3ha s4ha. sha7ron. s3he s3hi s3ho sho7shol s3hu 1si 4s5idea s5idee. 4s5ideo 3sie sie7kwos sies6li sies7mee si5fle sif6reu 4si3go si4gro 4simpl 3sin. si5nag s5indek 5sindr 4sindu sin7enti sin7este 4s3inf s4ing sin6gaa sing7aan 6singes sin7gle. sin6gre s5ingry 4s3inh sin6kch sin4kl 4sinko s5inlig 4s3inm 4s3inr sin6see sin6sin 6sinslu sin5sn 4sinv sip6ho. s4ist sit6are 4s5item si3tr si4tre sit7riem sit6sik sit5sl 3situ siu6mur 1sj 2sja sje6ans 5sjoko 4sjuf 1sk2 2sk. 5skaaf skaar6s 6skaart s5kafe 3skak 6skakeb s5kakt 4s5kalf 4skam 4skant 3skap ska6pin ska6pon skap5r 4skar. 4skara 4skas s5kata ska6tel ska6tit 5skawe 3skem 4skenn 3s4kep ske6pla ske4p5r 4skerk 4s5kern ske7smee 5skets 4skett s5kiem ski7klub s4kil 4s5kilj ski6lol s4kip 5skip. 4skis. 2s3kl 2s3kn 4skod 4s5koeë 5s4koen 4skoer sko6kaa sko4ko 4skoll 4skolo 4skolw 4skomb 4skomi 4skomp s3kon s4kone 4skonf 4skong 4skons 4skont 6skoord s4koot 4skoö 4skos sko6see 5skott 4skow 6skraan 4skrag 4skran sk4re 6skreet s5kres 5skrif 4skrin 5s4krip 4skris 4skrui 3s4kry 4s5kryt sku6dak 4skuik s5kuip 5skuld 4skult 4skun 5skurf 4skus sku6tar 2s3kw sky7drin s4kyf s4kyw 1sl s4laa 4s3lad s4la4g 4slam 4s5land s4lang s5lant 4s3las 4s3lat s4law 4s3led 5sleep 4s5leer 4s3leë s4leë. 4s3lei 4s3lek 4slel 4sleng sle6tji slet7jie s4leu 4s5leue s5leus 5sleut 4s3lew 4sley s3lê 2sli slib3 5slier s3li4g 5slinge slo6bee s4lof 4sloj 4slok 4s5loon 4s5loos 4slop slo4t5a s5loter s4low sl4öj 4s3lug 4slui. 4s5luia s5luih 5sluit 4s3lus 4s3lye 4slyf sly6mui 4slyn sly6paf 4s3lys 2sm s3ma s4mad 5s4mart s3me s5melk 5s4melt s3mi 5smid. smi4s smit4h5 3smok s5mol. s3mon s3mu 3smy smy6nin s4myt 1sn s5naai 4snaam s5naat 4s3na4g snag5e snag6s. 4snam sna6pro s4nar s3nas 4snat 4snav snee7tji 4s3nek 3s4nel 4s3nes 4s3net 4sneu sni6kwa sni6tre s4nob 5snoet 4s3nom 4snoo 4snorm s4nui sny3 s4nye 5snyer sny6-ys 1so 4soef 3s4oek soe6kal soe6kev soe6kol soe4k5u s4oen soe6nys 4soes 5soet. soets6t soet7ste sof6agu 4soff so3fr sof6ree sog4l soi6ets sok7opho 3sol s5olie. sol6lme solo5s s4om. s4ome 4s3omg 4s3oms 4s3omv 3s4on. s6onde. s7ondern 3s4one so6neek son7eekh son5eg 4son3g son7kwas so4n5op son4so 4s3ont son7uit. s4onv 4sonw 4soog 3s4ool 4s5oond soon4s 4s5oor. 4s5oorb 4s5oord 4s5oore s5oorg 4s5oorl s5oors 5soort. s5oortr 2s1op 3sop. sop7ekst so5phi sop6hok s4opi 5sopie s3opl 3sopo so3pr 5s4op4ra s3ops s3opt s3opv 4sord 5sorg. 4s5orga sor6gee sor6gra sorg7raa s5orke so5ror 4sorto sos4h so5sha so3th sot4ho so3tr 3sou 4soud s5oude sou6spa sou4s5t sou6taa sou6tak 4souto s5outom so9ya. s5paal 5spaan 4spad 4spak 3s4pan span5o spa6noo 4spap 4spark 4s5pas. 4spast spa6tar 4spatr 4spe. 3s4pee spe4k5l spe6kne spe6lak 5speler s4pell 6spelot 4spen s5pen. 4sperd 4sperk 5sperm. 4spers 4spes. 5spesi 4spet s4peu 4s5piek s4pio 2s3pl 5s4plee 5s4plin 5splits 3s4ply 4spoei 4spol 4spom spon6st 5spoor. 4spoot 5spore 6sportr 4spos 4spote s5poti 5spraak 6sprakt 4s5prat spreek5 s5prem 4spres 5spreu 4sprob 5sproei 4sprof 4sprog 5s4pron 4spros 5spruit 4spry s3ps sp4si 4spub 3s4pul 4spun 4spyn 4spyp 2s1r s3ra sra4e s3re s3ri s3ro s3ru s3ry 2s1s s3sa ss4af ss4ag ssa6rol ssay7is. s3se sse6nas sse4n5i sser4s sse5st s3si ssie6l7ei s3sk ss4ko s3sl s3sm ss4ma ss4me s3sn s3so s3sp ss4pl s3st ss4ti s3su s3sw s3sy 2st. 4sta. s4taa st5aard 5staat 3s4tad 4stafe sta6las stal7as. 4stale sta6lee sta6lem 4stali 5s4talt 5s4tam. sta4m5o 5s4tan. stand8s7ta 4stari 3s4tat s5tatr 4stea s4tedd 5s4tede s4tee4k 5s4teen 4steer 4steg ste6gre st4ei ste6kli ste6lek stel7eks 6stelev 5s6telse stel6tj stelt7ji 5s4tem. 5stemm ste6mom ste6nou 4stent s5teny 4steo 6sterap ste6r5ei 5sterkt 4sterm ste6rom ster5sm ste6rys ster7ys. ste6ser ste6sin ste6ska ste6ski ste4sl ste6sma 2sth s3ti 4stie s4tigt 4s5tiku sti6laa s4timu sting5a 5stinkh s4tip 4stir 4s5tite s3tj 4sto. s5toeg s5toek 5stoel. 6stoela s5toen 4stoer 4stoes s5toev s4tof sto6fek sto6fem sto6fen sto4fo 4stog sto4ka sto6kle sto6kre 3s4tom 4stone 4stoon st4op sto6poo 4stos sto4st 3s4tot s4tow s4traa 4strad s6trak. 4s5trei s4trew 4s5tril 6strins 4stroe s5trog str6ont 6stroon 6strosp 4strot s5trots 4strou 4strov s4tru 5struk 4s5trus 3s4try stu4c 3s4tud 4stuig 3s4tuk stu6kin stu7klep stu7stra stu4to stu6tys st4wi 2sty 4styd 5styf. 3s4tyl sty6loo 1su su2b1 sub3a sub7gids sub7hoof sub7nasi sub5oo sub7reko 3suid sui6daf sui6dei s4uik s4uil suip5l sui6pro 4s3uit s4uiw sul6tin sum7aans 2sun s3uni su4su sut6her su9yo. 2sv s3va s3ve s3vi s3vl s3vo s3vr s3vu s3vy svy7kraa 2sw 5s4waai 5swael s5waen 3s4wak 3s4wa4m swam5a s5wand 5swart s3wat 3s4waw 6sweefs s6weeft s5week 5s4weep 5s4weet 4sweg 5sweis s4welg 3s4we4m 5s4werm swe6tre s3wê s3wi s4wik 4swil s3wo 5swoeg swor6st 4swort s3wr s3wu 3swyg 1sy 5syfer sy3k syn6agr syn6sin syn5sm sy5pla sy3sk 4syst s5yster 4sywe s5ywer 2s- 1t 2t. 3ta. taa6nam 4taand taan5s6f 6taansi 4taant 4t5aanv 3tabb 4tadm ta4d5ro tad6ser tad4s5i tad6ska tads5n tads5p tad6ste tad6s5to 4taf. 4tafd 3tafe tafe4l 4ta4fr 4t3afs 4tafv 4t3afw t4age 4t5agen 4tags 4t3agt tai4l ta5inv tai7peis 5take. tak6lep ta5kli ta4kr tak7rol. 3takt tak7wyn. 3tale tal7eenh tal7emme 5talig tal6kaa tal6sor ta6mind tam7inde tan6dat tan4dr tand7rin tand6sto tang5st 4t5anna tan4sk tap5ro 3tari 4tark 4tarm t5arm. tar5oo t5artik ta4s. t5asem tas4p tas6tas tat7isol tat4j tat7jies ta4t5ra 2tb tba6lun tby6tei 2td tdy7ing. teby6s. 3tedo teek5r tee6lee tee7lood tee6mev tee4mo tee4n 4teenh 3teer tee7raad tee7renv tees4 tee5sk tee5sl tee5st tee7suik 4t3eeu tef7lon. 3tegn teg6ori teg7ren. 5tehui tei6noo tek2 5tekam tek7bak. 5teken teke8n7aap tek7haak tek7limi 5tekor tek7semp tek6sin teks5k teks5t tek7stel tek5vo te6laap tel7aap. te4l5ak te4l5ap tel7dwei te4l5el tel7fles tel7idee 5telik tel6lho tel7oes. tel7oog. te6loon tel7oond tel7smed tem7asse 4temm tem7omva te6moog tem7oog. 5tempo tena6ge 5tend. t4enh ten6kaa ten6koo ten7ouer ten6san ten7slot 5tenso ten4s5u ten4t5j ten4tr tent7reg ten7treu ten7twen 3teo te3p4h ter7adel 5te4r5af ter6afi ter6ago te4rak ter7akro ter7als. ter7aman ter7amer te6ramp ter7amp. 5terap ter5app ter6arg ter6dro terd7roo ter5een te4r5el te4rem 4terft te6rin. ter7ink. terk7wyn 3term ter7omra ter5ond ter5ont 5teror ter5os. te4r5ow ter7raan 5terrei ter7rein 5terri ter6sas ter6sef ter6seg ter6skop ter7sopn ters6we ter7swee ter7syst ter6tap te4rui ter7uie. te6ryst ter7yste ter6-in 3tesi tes7inst tes7loe. tes7lydi tes7mart tes7meto tes7proe tes7teri tes6tud te5sty te4s3w 3teti teun5s4 2t1f tf4li 2t1g tg4af tge6nap tg4li 2th 3tha. t4has 4thei 3t4hen ther6aa the7raan the5ro 3t2hi 4thit t5hitt th5leh t4ho. tho6nat ths7chil t4hy. tib7niet tie4f tief5o tie6gri tie6kap tie4k5l tie6kom tie4k5r tie4k5w tie6roë tie7smoo 4tif. 4tiff 4tigm tike4 ti4kla tik7lug. tik5ro tik6waa 4til. til7aan. 4tild 4til3s 4tilt 4t3ind tin7erts tin4ga tin7gaal ting7aan ting7eg. tin4g5r ting6su tings7uu 4tinkh tink7wa. 4t3inl 4tinv 5tipe. 5tipes ti4rp tis6aan ti3sj ti3tr tive5r t2j 2tja tje6sni tjo4k 2t1k tki6sob tkom4s5 2t1l t3la tla6sin t3li t3lo t5lont 2tm tme6sti 2t1n tne6ywe tnot4s5 3to. toe7eien 4toef 5toef. toe7gly. toe7klap toe5kr 4toel. 5toe5la 4toele toe6let toe6lop 4toelt 4toep. toe7plei 5toern toe6rou 5toeru 3toes toe5sl toe5sm toe7swel toë7roti to4fa tof7ekst tof7emis to4f5io tof7onde 3tog to4gl tok7las. tok7lett tok5ou t5olie. 4tom. 4tond 3tone ton4gr tong5s 4tont t5ontl t5onts 3toon t5oper to5p4he 4topm top7oorl 4topv tor7eien tor7eval to6rint tor7inte tor6m5ag tor6mom to1s to3sf tos6tro to3tr tot6ste tou3s4 tou7tjie tou6wsr to4wn toy7ota. 2tp tpen6sk tpie6tj tpiet7ji tplek5 tpoor6t tpoort7j tp4sa t5psal t2r 4t5raad t5raam 5tradis 4traf tra6fas traf5o tra6foo 5trakta 5transa 5transf tra6paf trap7as. tra6pew tra7ploï 5trapp trat4 tra5tj 4tratu 4trea t3rec t5reda t5redd t4ree 4treek 4t5reen 4treë 4treg. t5regi tr4ei t5reini tre6ink 4treis tre4ka tre4k5l tre4ko tre4kr trek5w tre6kwi t4rer t5rese tre4st tre4t tre7talb tret5j t5reuk t5rewo 5tribu t5rief trie6kl 5tries tri5g4l 4tring trobo5 4t5roer tro6las trol7as. tro6lin tro6naf troo4 4troom tro6ski 3trou 3trov 4trub 4t3rug truit6j trui7tji 4truk tru7kopp trust5r 4tryk 2t1s ts5agt t4sam t4sar ts5arg t4s5eks t4s5eng tse6raf tse6rys tser7ys. t6singr t4s5ins ts5inv tsi7tsik ts5jae t4skar ts5kok t4skon t4skor t6skrie t6skrip t4skru ts5lam t5s6maak t5s4mee ts4mel t4smo ts5mot t5smou ts5nat ts5neu ts5oon t4s5pas ts5pen ts5pot t4s5pro ts5tea t5stel t6stend ts4ti ts5toer ts5tron t3stu t3su ts5waar t5swar t5swen ts6wing ts5wyn 2tt tta5tj tte6loë tte6ral tte6ram tte7ridg tte4ro tte7ruil tte6slo tte6s5ta tte5us tt4he tting5a tt5uur 3tua 3tue 3tuig 3tuin 4tuits tu4kl tum7aanw tur6kna 4turt tus7aart tus7eter tussen5 tu5têr 2tv tv4li 2tw twee5k twee5l twees4 twerp5o twi6sap 3tyd tyd7aanw tyd7lont tyd7orde tyd3r tyd6sat 3tye tyl7oorw 3tyn tyn7spre ty3o t5yster 2tz tze6nel 2t- u1a ua4e4s uahu6a. u4b3ag ubas4 uba7slag ub5eko ub3f ub5gro ub5int u3bl u4blu ub5lun ub3or ub5sch ub3t ub3v ub5wyk uck6len u4d3ar udi6top u4d3re u4dri uds6med ud5sor ud6stoe uds6tyd u1e ueb5lo uer7ione ue4ron uer7onde ues7tria ue5uni u4fri uf5rin ufs6maa ug5aan u4gei uge6ska ug1l u2go ugo6mol ug3or u2g3r ug3s ugs4k ugs4l ug4soo ugs4p ug5ste ugs6tek ug5sto ug5sui ug4ub ui4dag uid7arts ui4d3o ui4dr uid7reek uid7simb uid7skat uid7skel uid7skil uid7slui uid5spr uids6to uid7stoe uid7uits ui1e uiers6w uies6ma uie7smaa ui4f3a uif7eend uif5le ui4go ui4g3r uig3s4 ui4k3a ui4k3l ui4k3r uik7sfee uik6sta uik7uitk ui4kw uil7aap. uil5eks uil7esel ui4l5oo uil7tjan ui4ma uim7oes. ui4na ui5nae uin5ar uin7asyn uind4 uin7drek uin7ivoo uin7kole ui4n3o uin7ser. uin5si uin6ska ui4pl ui4po uip5oo uip7ore. uip7roes ui4s3a uis3j ui4s3o uis5ta ui4t3a uit7dein ui4t5ee ui5ter uit3j uit3r uit4sj uit6-as uk4aa ukaar4 uk5loo u4kof uk5off u4kor u5krat uk3ry ukse4s uk4ski uks4m uks7pop. uk4sv uk4th uku7yama u2k3w u1la ul3ag uld5erk ule6sta ulê6r-w ulf6api ul5ins u1lo ul5oog ulp7eksa ulp7oort ulp7orga ul4saa uls6oms ult7inge ult7uit. u1lu u2m u3ma um5agt umat4 uma5tj u3me umg6rok u3mi um4ie um5ond um4s. ums7feld u3mu u4mui umu4s un5arm uner6st 5unifo 3univ unk7reda un2s3 uns6enb un4sid uns6kap un5s6kol un7s6kool uns7lagg uns7taal un5str unt7eenh un6tinn unt7real unt6roe unts6ko unt5sw unug6s. u1o upi6lop u4ply u4pon u1ra ur5aar ur3af ur5agt ur3ak u5ra5s4t ur5atl ur5een u4ref ur5eff ure5um urf7loop urg6h-s urg7laag u4r5int urke5s urk7nael u1ro uro7pesi urp7agti urr7heim urs7agte ur4s5ek urs6fee ur6sloo urs7mous ur4sno ur4s5oo urs7paar urs6par ur4spr urs6wee urs6wie ur6t5oor ur4top urt7room u1ru u1ry us3ag usa7lag. u4sap us5een use5st ush7die. ush7koal usie4k usiek5l u4s5ins u2s3k us4k. us4kok us4kri u2s3l u3s4lu u4sno u2s3o us4ol us4or us3p us4pie u4spo us5pot usse7us. us3t us4t. ust5akt usta6v. us4tb us4tf us4tg us4th us6tink us4to us6trek us5tru us4ts us3w u2t u3ta ut5adm u4t3ag uta7spek u3te ute7ling ute7rago u3ti u3to u4topl ut5org ut4rek uts7luis ut4spr u3tu u3ty uu2 uur1 uur3i uur6s5in uus3 uus6khe uut3j uwees4 uwe7smit u5yste u3yu û1 1ü1 1v2 vaar6st va4kar vak7eie. va4kes va4ki va5kie va4k3o va4kr val7este val7fees val7funk val7isog valk7oë. val7opto val4sa val6spa vals7pan val6spo val6spr val6s5te val6sth va4n5ee van7effe van6gap van6gre van7uit. vari5et var6kja var6kle var4k5n var4k5o var4k5r vas7ent. vas6oor vas7waai ve2 ve3d vee7kong vee5kr vee4l veer5a vee3s4 ve9ga. veis4 vei5st vel6don vel4d5r vel5oo ve5lop vel5sm vel7sple ve5lum ve3na ve3ne ve5nor ven4t5j ve3nu vep7legi 3ver1 ve9ra. verd4 verdien7s8 ve5reb ve5rek ver6ema ver6ena ve5rend ver6eve ver6flu ver6fru ve3ri ve6r5inn verk4 ver5kl ver5kw ve7rona. ver5sa vers6ki ver7skin vers8kop. ver5sl ver5sm vers6mag ver5sp ver7stal ver5s4w vers8waar ver4t5j ver5tw ves3p ves3t ves7taal ve5suv vet5in vet5ji vet7opga vet3r vets4 vet5sm vid5so vie7ring vig4s vi5rag vi4rg vi4r- vi4sar vi4so vis5ol vis7oog. vis5tr vi3tr vit7rate vlag5s vla4k vla7koek vla6sak vle4k vlek5l v4lie vlie6so voe6rek voe6rui voë4l voël7oë. vog7inho vo4gr vo4lei vol4g5a vol6gon vo4l3o vol7song vol7uit. vol7ywer vond6s7te von6klo voo7doo. voor5s4 vor4s5t vor7ster vou7pops vou5tj vra6gry v4re. vree6tj vreet7ji vrie6sp vri6jze vry7duik vry7kyk. vry3s4 vry5st vry7uit. vu4e. vu9yo. vyf7armi vy3s 1w 2w. 4wael wae6lat 4wa4eo 3wag. wag6las wal6ste wand6sk wan6gaa wan7inge wans4 wan5sm 5wapen 3warm war4s3 wars6e. 4wart war6thi war4t5j war6toë wart7oë. war6too war4t5r war6tys wa5shi was6kaa was5la was6mou was7pan. wa5str wate6ra water7aa wat5so we4bad we4bm we4b5ru web7taal web7vlie 3wed we4d3r we5dra we5dry we4dy 5weefse weeg6s. wee5ran wee5sa wee7skaa wee5sko wee5sl wee5s4p wee5st wee6tru 3weg we4ga weg7dof. weg3l we4go weg7orde we4g3r weg3s4 weg5st we4gu 4weis we4k5ro wek7uur. wel7aanb we6larg we4l5ee wel7flan wel7fron wel5oor we4l5op wel6ske we4m3o wem6os. we4nak we4n5as wen7eens wen6sad wen6san wen6sar wen6sei wen6ser wen6ses wen4sk wens5ka wen7skud wen4s5l wen4so wen6spr wen6ste wens7tes wen4s5u wer7esse wer6fom wer6gar wer6gre wer6int 3werk wer6kad wer6k5af wer6kes wer4kl werk7laa wer7klan wer7klap wer7klok wer6koms wer6kon wer7kony wer6kre wer6kro wer6kuu wer4kw wer5kwa wer4ky we4r3o wer6paf wer6pan wer6plo wer6pon wer6poo wer6por wer7smed wer7uil. wes6mit wes7oewe we4sp wes7pemi we4s3t we5sta wes4th we5s4tr wes7waar 3wet. wet7regu wet4s5o wet4s5t wet7wysi 3wêr 4wfon wids7tor wiel5a wie4t5j wi4gr wi4kl wi4ko wiks7te. wil6dag wil6sin wil4sk wind7as. win6del win6dop wind7op. win4dr wind7ruk win6kle win4sk win7sky. win4s5t win7ston win6tap win6tes wip7lig. wip7roos wit5el wit7inkb wit5ji wi4t3o wit5ro 2wj wje6tun 4woeg woe4s wo4l3a wol7invo wol6klo wo4l3o woor6dr wo5rum wou6dag w2r wree4 wri6gon 2ws wur4gr wur4m wurm5a 2ww wwe7rint wyd5oo wyd7uite wyk6was wyn6and wyn5sm 3wys wys7aksi wys3k wys3p wys5ta wyt7raak x'9ie. x’9ie. x1a xe1 x3em xerox7e. x2h x1i xys6te. y1a y4ama ybe6lil y2d y3da y3de yden4s ydgele6 ydg6leu y3di yd3of yd3re yd3ro yd4sin yd6skat yds7krit yds7orde y1e y4enn yer2 yer7hof. yer7maat yer4s yer7ton. yer7vill yer7voël yes6agt 3yeu yf3aa y4far yf5as. yf3l y2f3r yf5ren yf4sl yf4su y1g yg4le yg4li yg4ly yg5saa ygs7kans yg5sko ygs5le ygs6tek yg4sto yg4stu ykaar4 yker6st y4k5ins y2kl yk3li yk4lu yk5lui yk5lus ykoms4 y4kor yk3ri yk4s5ad yk4sk yks7kans yk3sp yks4t yk4su y2k3w y1la y1lo y4loe yls7laar y2n1a yn4a. y4nei y4n5ete yn1g2 yn5kli yn5kwa y2n1o y3n4om yns6agt yn4s5am yns5ins yn5sly yns4m yns7maan yn4s5or yn4sp yns7paar yns4t yn3u yo9yo. y2p y3pa y3pe y3pi y5plan yp3li yp5org y3pr y3pu y1r y4sam ys4ig y4s5ind y4s5ins y2sk ys5kar ys3ko y5s4koo y2s3l y2s3n y2s3o ys4ok ys4ou ys5poe ys3t ys4ta y4s5taf y5s4tel y4ster y3s4tr ys4tu ys3ui ys3w y2t y3ta yt3ag y3te yt4ha y3ti y3tj y3to y3tu y3ty yve7sant 1z 2z. 4zbur zee7rust zen7elle zi2c zi5cat 4zman zook6a. 2zz 2-1 -er4t -ert5j -ha-7ha. -k4li -na6gew -s4ti -t4we -5twee", ["length"]=76601, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=10349, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-eu.hyp0000644000175000017500000000017111761001300024655 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-eu.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nn.rme0000644000175000017500000000221711761001300024645 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Norwegian Nynorsk hyphenation patterns (more info about the licence to be added later) % Adapted to the new pattern-loading scheme. % Original file name was nnhyph.tex % TeX hyphenation patterns for Norwegian Nynorsk % % Version 2007-02-10 % % Copyright (C) 2007 Karl Ove Hufthammer. % Copying and distribution of this file, with or without modification, % are permitted in any medium without royalty, provided the copyright % notice and this notice are preserved. % % This file contains hyphenation patterns for Norwegian Nynorsk. % It uses the Norwegian hyphenation patterns from nohyphbx.tex, % created by Rune Kleveland and Ole Michael Selberg. Please see % that file for copyright information on those patterns. % % The patterns in nohyphbx are based on both Norwegian Bokmal % and Norwegian Nynorsk, and works about equally well for both % languages. This file, nnhyph.tex, contains only a few hyphenation % exceptions, for words that needs to be hyphenated differently for % the two languages. % % Please send bugs or suggestions to karl@huftis.org. % \input hyph-no.tex \hyphenation{ att-en-de bet-re } context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-agr.hyp0000644000175000017500000000017211761001300025016 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-agr.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ca.pat0000644000175000017500000001241611761001300024620 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-ca.rme % used: a b c d e f g h i j l m n o p q r s t u v x y z à ç è é í ï ò ó ú ü \patterns{ 1ba 1be 1bi 1bo 1bu 1ca 1ce 1ci 1co 1cu 1da 1de 1di 1do 3du 1fa 1fe 1fi 1fo 1fu 1ga 1ge 1gi 1go 1gu 1ha 1he 1hi 1ho 1hu 1ja 1je 1ji 1jo 1ju 1la 1le 1li 1lo 1lu 1ma 1me 1mi 1mo 1mu 1na 1ne 3ni 1no 1nu 1pa 3pe 3pi 3po 1pu 1qu 1ra 1re 1ri 1ro 1ru 1sa 1se 1si 1so 1su 1ta 1te 1ti 1to 1tu 1va 1ve 1vi 1vo 1vu 1xa 1xe 1xi 1xo 1xu 1za 1ze 1zi 1zo 1zu 1bé 1bí 1bó 1bú 1bà 1bè 1bò 1cé 1cí 1có 1cú 1cà 1cè 1cò 1ço 1ça 1çu 1çó 1çú 1çà 1çò 1dé 1dí 1dó 1dú 1dà 1dè 1dò 1fé 1fí 1fó 1fú 1fà 1fè 1fò 1gé 1gí 1gó 1gú 1gà 1gè 1gò 1gü 1hé 1hí 1hó 1hú 1hà 1hè 1hò 1jé 1jí 1jó 1jú 1jà 1jè 1jò 1lé 1lí 1ló 1lú 1là 1lè 1lò 1mé 1mí 1mó 1mú 1mà 1mè 1mò 1né 1ní 1nó 1nú 1nà 1nè 1nò 1pé 1pí 1pó 1pú 1pà 1pè 1pò 1qü 1ré 1rí 1ró 1rú 1rà 1rè 1rò 1sé 1sí 1só 1sú 1sà 1sè 1sò 1té 1tí 1tó 1tú 1tà 1tè 1tò 1vé 1ví 1vó 1vú 1và 1vè 1vò 1xé 1xí 1xó 1xú 1xà 1xè 1xò 1zé 1zí 1zó 1zú 1zà 1zè 1zò 3l2la 1l2le 1l2li 3l2lo 1l2lu 1b2la 1b2le 1b2li 1b2lo 1b2lu 1b2ra 1b2re 1b2ri 1b2ro 1b2ru 1c2la 1c2le 1c2li 1c2lo 1c2lu 1c2ra 1c2re 1c2ri 1c2ro 1c2ru 1d2ra 1d2re 1d2ri 1d2ro 1d2ru 1f2la 1f2le 1f2li 1f2lo 1f2lu 1f2ra 1f2re 1f2ri 1f2ro 1f2ru 1g2la 1g2le 1g2li 1g2lo 1g2lu 1g2ra 1g2re 1g2ri 1g2ro 1g2ru 1p2la 1p2le 1p2li 1p2lo 1p2lu 1p2ra 1p2re 1p2ri 1p2ro 1p2ru 1t2ra 1t2re 1t2ri 1t2ro 1t2ru 1n2ya 1n2ye 1n2yi 1n2yo 1n2yu 1l2lé 1l2lí 1l2ló 1l2lú 1l2là 1l2lè 1l2lò 1b2lé 1b2lí 1b2ló 1b2lú 1b2là 1b2lè 1b2lò 1b2ré 1b2rí 1b2ró 1b2rú 1b2rà 1b2rè 1b2rò 1c2lé 1c2lí 1c2ló 1c2lú 1c2là 1c2lè 1c2lò 1c2ré 1c2rí 1c2ró 1c2rú 1c2rà 1c2rè 1c2rò 1d2ré 1d2rí 1d2ró 1d2rú 1d2rà 1d2rè 1d2rò 1f2lé 1f2lí 1f2ló 1f2lú 1f2là 1f2lè 1f2lò 1f2ré 1f2rí 1f2ró 1f2rú 1f2rà 1f2rè 1f2rò 1g2lé 1g2lí 1g2ló 1g2lú 1g2là 1g2lè 1g2lò 1g2ré 1g2rí 1g2ró 1g2rú 1g2rà 1g2rè 1g2rò 1p2lé 1p2lí 1p2ló 1p2lú 1p2là 1p2lè 1p2lò 1p2ré 1p2rí 1p2ró 1p2rú 1p2rà 1p2rè 1p2rò 1t2ré 1t2rí 1t2ró 1t2rú 1t2rà 1t2rè 1t2rò 1n2yé 1n2yí 1n2yó 1n2yú 1n2yà 1n2yè 1n2yò a1a a1e a1o e1a e1e e1o i1a i1e i1o o1a o1e o1o u1a u1e u1o a1é a1í a1ó a1ú a1à a1è a1ò a1ï a1ü e1é e1í e1ó e1ú e1à e1è e1ò e1ï e1ü i1é i1í i1ó i1ú i1à i1è i1ò i1ï i1ü o1é o1í o1ó o1ú o1à o1è o1ò o1ï o1ü u1é u1í u1ó u1ú u1à u1è u1ò u1ï u1ü é1a é1e é1o é1ï é1ü í1a í1e í1o í1ï í1ü ó1a ó1e ó1o ó1ï ó1ü ú1a ú1e ú1o ú1ï ú1ü à1a à1e à1o à1ï à1ü è1a è1e è1o è1ï è1ü ò1a ò1e ò1o ò1ï ò1ü ï1a ï1e ï1o ï1é ï1í ï1ó ï1ú ï1à ï1è ï1ò ï1i ü1a ü1e ü1o ü1é ü1í ü1ó ü1ú ü1à ü1è ü1ò a1i2a a1i2e a1i2o a1i2u a1u2a a1u2e a1u2i a1u2o a1u2u e1i2a e1i2e e1i2o e1i2u e1u2a e1u2e e1u2i e1u2o e1u2u i1i2a i1i2e i1i2o i1i2u i1u2a i1u2e i1u2i i1u2o i1u2u o1i2a o1i2e o1i2o o1i2u o1u2a o1u2e o1u2o o1u2i o1u2u u1i2a u1i2e u1i2o u1i2u u1u2a u1u2e u1u2i u1u2o u1u2u a1i2é a1i2í a1i2ó a1i2ú a1i2à a1i2è a1i2ò a1u2é a1u2í a1u2ó a1u2ú a1u2à a1u2è a1u2ò e1i2é e1i2í e1i2ó e1i2ú e1i2à e1i2è e1i2ò e1u2é e1u2í e1u2ó e1u2ú e1u2à e1u2è e1u2ò i1i2é i1i2í i1i2ó i1i2ú i1i2à i1i2è i1i2ò i1u2é i1u2í i1u2ó i1u2ú i1u2à i1u2è i1u2ò o1i2é o1i2í o1i2ó o1i2ú o1i2à o1i2è o1i2ò o1u2é o1u2í o1u2ó o1u2ú o1u2à o1u2è o1u2ò u1i2é u1i2í u1i2ó u1i2ú u1i2à u1i2è u1i2ò u1u2é u1u2í u1u2ó u1u2ú u1u2à u1u2è u1u2ò é1i2a é1i2e é1i2o é1i2u é1u2a é1u2e é1u2o é1u2i é1u2u í1i2a í1i2e í1i2o í1i2u í1u2a í1u2e í1u2o í1u2i í1u2u ó1i2a ó1i2e ó1i2o ó1i2u ó1u2a ó1u2e ó1u2o ó1u2i ó1u2u ú1i2a ú1i2e ú1i2o ú1i2u ú1u2a ú1u2e ú1u2o ú1u2i ú1u2u à1i2a à1i2e à1i2o à1i2u à1u2a à1u2e à1u2o à1u2i à1u2u è1i2a è1i2e è1i2o è1i2u è1u2a è1u2e è1u2o è1u2i è1u2u ò1i2a ò1i2e ò1i2o ò1i2u ò1u2a ò1u2e ò1u2o ò1u2i ò1u2u ï1i2a ï1i2e ï1i2o ï1i2é ï1i2í ï1i2ó ï1i2ú ï1i2à ï1i2è ï1i2ò ï1i2u ï1u2a ï1u2e ï1u2o ï1u2é ï1u2í ï1u2ó ï1u2ú ï1u2à ï1u2è ï1u2ò ï1u2i ï1u2u ü1i2a ü1i2e ü1i2o ü1i2é ü1i2í ü1i2ó ü1i2ú ü1i2à ü1i2è ü1i2ò ü1i2u ü1u2a ü1u2e ü1u2o ü1u2é ü1u2í ü1u2ó ü1u2ú ü1u2à ü1u2è ü1u2ò ü1u2i ü1u2u .hi2a .hi2e .hi2o .hi2u .hu2a .hu2e .hu2i .hu2o .i2è .i2ò .u2è .u2ò .hi2é .hi2ó .hi2ú .hi2à .hi2è .hi2ò .hu2é .hu2í .hu2ó .hu2à .hu2è .hu2ò gu2a gu2e gu2i gu2o qu2a qu2e qu2i qu2o gu2é gu2í gu2ó gu2à gu2è gu2ò qu2é qu2í qu2ó qu2à qu2è qu2ò gü2e gü2é gü2í gü2è gü2i qü2e qü2é qü2í qü2è qü2i a1isme. e1isme. i1isme. o1isme. u1isme. a1ista. e1ista. i1ista. o1ista. u1ista. a1um. e1um. i1um. o1um. u1um. .antihi2 .be2n .be2s .bi2s .ca2p .ce2l .cla2r .co2ll .co2n .co2r .de2s .di2s .en3a .hipe2r .hiperm2n .in3ac .in3ad .in3ap .in3es .in3o .inte2r .ma2l .mal1t2hus .pa2n .pe2r .pe3ri .pos2t .psa2l .rebe2s .re2d .su2b .sub3o .subde2s .supe2r .tran2s g2no p2si p2se p2neu g2nò p2sí .ch2 .th2 ein1s2tein ru1t2herford ni2etz1sc2he 3exp 3nef 3nei 3pr 3ser a3ne a3ri bi3se des3ag des3ar des3av des3enc e3ism e3le e3rio e3ris es3aco es3af es3ap es3arr es3as es3int ig3n in3ex n3si o3ro qui3e s3emp s3esp sub3a ui3et o3gnò}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ru.rme0000644000175000017500000000676511761001300024674 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Russian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: TODO:WRITEME (2003-03-10) % Author: Alexander I. Lebedev % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % Russian hyphenation patterns, version 2003/03/10 % Copyright 1999-2003 Alexander I. Lebedev % % This program may be distributed and/or modified under the conditions % of the LaTeX Project Public License, either version 1.2 or any later % version. % % Patterns were generated with patgen from a 990,000-word list and then % manually corrected. % % The program consists of the files ruhyphal.tex, cyryoal.tex and two % document files README.ruhyphal and hyphen.rules. The file cyryoal.tex % can be regenerated using mkcyryo script (a part of ruhyphen package) % and the latest release of rus-ispell dictionaries % . context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sk.lua0000644000175000017500000005657412161703335024700 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abdeikmnoprstyóť", ["data"]="dosť me-tó-da me-tó-dy ne-do-stat-ka-mi sep-tem-bra", ["length"]=54, ["n"]=5, }, ["metadata"]={ ["mnemonic"]="sk", ["source"]="hyph-sk", ["texcomment"]="% Slovak hyphenation patterns (Jana Chlebikova, 1992)\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: skhyphen.tex (yyyy-mm-dd), skhyphen.ex (yy-mm-dd)\ % Author: Jana Chlebíková \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % Slovak hyphenation (version 2.0) 24.4.1992\ % Autor: Jana Chlebíková, department of Informatics Education,\ % Comenius University, 842 15 Bratislava, Slovakia\ % \ %\ % This is free software; you can redistribute it and/or modify\ % it under the terms of the GNU General Public License as published by\ % the Free Software Foundation; either version 2 of the License, or\ % (at your option) any later version.\ %\ % This file is distributed in the hope that it will be useful,\ % but WITHOUT ANY WARRANTY; without even the implied warranty of\ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\ % GNU General Public License for more details.\ %\ % You should have received a copy of the GNU General Public License\ % along with this program; if not, write to the Free Software\ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\ %%% --------------------------------------------------------------------\ % \\message {Loading SK hyphenation patterns: Jana Chlebikova, 1992}\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvwxyzáäéíóôúýčďľňŕšťž", ["data"]="a1 á1 ä1 e1 é1 i1 í1 o1 ó1 ô1 u1 ú1 y1 ý1 i2a i2á i2e i2u o2u c2h d2z d2ž 2b1b 2b1c 2b1č 2b1d 2b1ď 2b1f 2b1g 2b1h 2b1c2h 2b1j 2b1k 2b1l 2b1ľ 2b1m 2b1n 2b1ň 2b1p 2b1r 2b1s 2b1š 2b1t 2b1ť 2b1v 2b1w 2b1x 2b1z 2b1ž 2b1d2z 2b1d2ž 2c1b 2c1c 2c1č 2c1d 2c1ď 2c1f 2c1g 2c1c2h 2c1j 2c1k 2c1l 2c1ľ 2c1m 2c1n 2c1ň 2c1p 2c1r 2c1s 2c1š 2c1t 2c1ť 2c1v 2c1w 2c1x 2c1z 2c1ž 2c1d2z 2c1d2ž 2č1b 2č1c 2č1č 2č1d 2č1ď 2č1f 2č1g 2č1h 2č1c2h 2č1j 2č1k 2č1l 2č1ľ 2č1m 2č1n 2č1ň 2č1p 2č1r 2č1s 2č1š 2č1t 2č1ť 2č1v 2č1w 2č1x 2č1z 2č1ž 2č1d2z 2č1d2ž 2d1b 2d1c 2d1č 2d1d 2d1ď 2d1f 2d1g 2d1h 2d1c2h 2d1j 2d1k 2d1l 2d1ľ 2d1m 2d1n 2d1ň 2d1p 2d1r 2d1s 2d1š 2d1t 2d1ť 2d1v 2d1d2z 2d1d2ž 2ď1b 2ď1c 2ď1č 2ď1d 2ď1ď 2ď1f 2ď1g 2ď1h 2ď1c2h 2ď1j 2ď1k 2ď1l 2ď1ľ .as4t4ro3 .atmo3 .a2u1to3 2ď1m 2ď1n 2ď1ň 2ď1p 2ď1r 2ď1s 2ď1š 2ď1t 2ď1ť 2ď1v 2ď1z 2ď1ž 2ď1d2z 2ď1d2ž 2f1b 2f1c 2f1č 2f1d 2f1ď 2f1f 2f1g 2f1h 2f1c2h 2f1j 2f1k 2f1l 2f1ľ 2f1m 2f1n 2f1ň 2f1p 2f1r 2f1s 2f1š 2f1t 2f1ť 2f1v 2f1z 2f1ž 2f1d2z 2f1d2ž 2g1b 2g1c 2g1č 2g1d 2g1ď 2g1f 2g1g 2g1h 2g1c2h 2g1j 2g1k 2g1l 2g1ľ 2g1m 2g1n 2g1ň 2g1p 2g1r 2g1s 2g1š 2g1t 2g1ť 2g1v 2g1z 2g1ž 2g1d2z 2g1d2ž 2h1b 2h1c 2h1č 2h1d 2h1ď 2h1f 2h1g 2h1h 2h1c2h 2h1j 2h1k 2h1l 2h1ľ 2h1m 2h1n 2h1ň 2h1p 2h1r 2h1s 2h1š 2h1t 2h1ť 2h1v 2h1z 2h1ž 2h1d2z 2h1d2ž 2c2h1b 2c2h1c 2c2h1č 2c2h1d 2c2h1ď 2c2h1f 2c2h1g 2c2h1h 2c2h1c2h 2c2h1j 2c2h1k 2c2h1l 2c2h1ľ 2c2h1m 2c2h1n 2c2h1ň 2c2h1p 2c2h1r 2c2h1s 2c2h1š 2c2h1t 2c2h1ť 2c2h1v 2c2h1w 2c2h1ž 2c2h1d2z 2c2h1d2ž 2j1b 2j1c 2j1č 2j1d 2j1ď 2j1f 2j1g 2j1h 2j1c2h 2j1j 2j1k 2j1l 2j1ľ 2j1m 2j1n 2j1ň 2j1p 2j1r 2j1s 2j1š 2j1t 2j1ť 2j1v 2j1w 2j1x 2j1z 2j1ž 2j1d2z 2j1d2ž 2k1b 2k1c 2k1č 2k1d 2k1ď 2k1f 2k1g 2k1h 2k1c2h 2k1j 2k1k 2k1l 2k1ľ 2k1m 2k1n 2k1ň 2k1p 2k1r 2k1s 2k1š 2k1t 2k1ť 2k1v 2k1w 2k1x 2k1z 2k1ž 2k1d2z 2k1d2ž 2l1b 2l1c 2l1č 2l1d 2l1ď 2l1f 2l1g 2l1h 2l1c2h 2l1j 2l1k 2l1l 2l1ľ 2l1m 2l1n 2l1ň 2l1p 2l1r 2l1s 2l1š 2l1t 2l1ť 2l1v 2l1z 2l1ž 2l1d2z 2l1d2ž 2ľ1b 2ľ1c 2ľ1č 2ľ1d 2ľ1ď 2ľ1f 2ľ1g 2ľ1h 2ľ1c2h 2ľ1j 2ľ1k 2ľ1l 2ľ1ľ 2ľ1m 2ľ1n 2ľ1ň 2ľ1p 2ľ1r 2ľ1s 2ľ1š 2ľ1t 2ľ1ť 2ľ1v 2ľ1z 2ľ1ž 2ľ1d2z 2ľ1d2ž 2m1b 2m1c 2m1č 2m1d 2m1ď 2m1f 2m1g 2m1h 2m1c2h 2m1j 2m1k 2m1l 2m1ľ 2m1m 2m1n 2m1ň 2m1p 2m1r 2m1s 2m1š 2m1t 2m1ť 2m1v 2m1z 2m1ž 2m1d2z 2m1d2ž 2n1b 2n1c 2n1č 2n1d 2n1ď 2n1f 2n1g 2n1h 2n1c2h 2n1j 2n1k 2n1l 2n1ľ 2n1m 2n1n 2n1ň 2n1p 2n1r 2n1s 2n1š 2n1t 2n1ť 2n1v 2n1w 2n1x 2n1z 2n1ž 2n1d2z 2n1d2ž 2ň1b 2ň1c 2ň1č 2ň1d 2ň1ď 2ň1f 2ň1g 2ň1h 2ň1c2h 2ň1j 2ň1k 2ň1l 2ň1ľ 2ň1m 2ň1n 2ň1ň 2ň1p 2ň1r 2ň1s 2ň1š 2ň1t 2ň1ť 2ň1v 2ň1z 2ň1ž 2ň1d2z 2ň1d2ž 2p1b 2p1c 2p1č 2p1d 2p1ď 2p1f 2p1g 2p1h 2p1c2h 2p1j 2p1k 2p1l 2p1ľ 2p1m 2p1n 2p1ň 2p1p 2p1r 2p1s 2p1š 2p1t 2p1ť 2p1v 2p1w 2p1x 2p1z 2p1ž 2p1d2z 2p1d2ž 2r1b 2r1c 2r1č 2r1d 2r1ď 2r1f 2r1g 2r1h 2r1c2h 2r1j 2r1k 2r1l 2r1ľ 2r1m 2r1n 2r1ň 2r1p 2r1r 2r1s 2r1š 2r1t 2r1ť 2r1v 2r1w 2r1x 2r1z 2r1ž 2r1d2z 2r1d2ž 2s1b 2s1c 2s1č 2s1d 2s1ď 2s1f 2s1g 2s1h 2s1c2h 2s1j 2s1k 2s1l 2s1ľ 2s1m 2s1n 2s1ň 2s1p 2s1r 2s1s 2s1š 2s1t 2s1ť 2s1v 2s1z 2s1ž 2s1d2z 2s1d2ž 2š1b 2š1c 2š1č 2š1d 2š1ď 2š1f 2š1g 2š1h 2š1c2h 2š1j 2š1k 2š1l 2š1ľ 2š1m 2š1n 2š1ň 2š1p 2š1r 2š1s 2š1š 2š1t 2š1ť 2š1v 2š1w 2š1x 2š1z 2š1ž 2š1d2z 2š1d2ž 2t1b 2t1c 2t1č 2t1d 2t1ď 2t1f 2t1g 2t1h 2t1c2h 2t1j 2t1k 2t1l 2t1ľ 2t1m 2t1n 2t1ň 2t1p 2t1r 2t1s 2t1š 2t1t 2t1ť 2t1v 2t1w 2t1x 2t1z 2t1ž 2t1d2z 2t1d2ž 2ť1b 2ť1c 2ť1č 2ť1d 2ť1ď 2ť1f 2ť1g 2ť1h 2ť1c2h 2ť1j 2ť1k 2ť1l 2ť1ľ 2ť1m 2ť1n 2ť1ň 2ť1p 2ť1r 2ť1s 2ť1š 2ť1t 2ť1ť 2ť1v 2ť1w 2ť1x 2ť1z 2ť1ž 2ť1d2z 2ť1d2ž 2v1b 2v1c 2v1č 2v1d 2v1ď 2v1f 2v1g 2v1h 2v1c2h 2v1j 2v1k 2v1l 2v1ľ 2v1m 2v1n 2v1ň 2v1p 2v1r 2v1s 2v1š 2v1t 2v1ť 2v1v 2v1w 2v1x 2v1z 2v1ž 2v1d2z 2v1d2ž 2z1b 2z1c 2z1č 2z1d 2z1ď 2z1f 2z1g 2z1h 2z1c2h 2z1j 2z1k 2z1l 2z1ľ 2z1m 2z1n 2z1ň 2z1p 2z1r 2z1s 2z1š 2z1t 2z1ť 2z1v 2z1z 2z1ž 2z1d2z 2z1d2ž 2ž1b 2ž1c 2ž1č 2ž1d 2ž1ď 2ž1f 2ž1g 2ž1h 2ž1c2h 2ž1j 2ž1k 2ž1l 2ž1ľ 2ž1m 2ž1n 2ž1ň 2ž1p 2ž1r 2ž1s 2ž1š 2ž1t 2ž1ť 2ž1v 2ž1z 2ž1ž 2ž1d2z 2ž1d2ž 2d2z1k 2d2z1n 2d2z1r 2d2z1s 2d2ž1š 2x1t 2x1n 2b1ŕ 2ŕ1b 2d2z1ŕ 2ŕ1d2z 2d2z1ľ 2ŕ1d2ž 2d2ž1ľ a1í2 a1o2 e1á2 e1í2 e1o2 e1ó2 e1u2 i1o2 o1a2 o1e2 o1i2 o1o2 u1a2 u1á2 u1i2 u1í2 u1o2 u1u2 y1a2 y1e2 y1ó2 y1u2 a2u1 a2i1 b2l3b 3b2l3č b2l3c2h 3b2l3k 3b2ľ3k 3b2l3ň b2l3š b2ľ3š 3b2r3b b2r3d 3b2r3k 3b2ŕ3k 3b2r3l 3b2ŕ3ľ 3b2r3n 3b2r3ň 3b2r3v b2r3z b3s2c b3s2t c3k2t 3c2r3č 3c2ŕ3č 3c2r3k 3c2ŕ3k c3t2v 3č2l3n 3č2r3č č2r3p 3č2r3t 3č2r3v d3c4h4n 3d2l3b 3d2l3h d2l3n 3d2l3ž 3d2ľ3ž 3d2r3d 3d2r3g d2r3l 3d2r3k 3d2r3m d2r3n 3d2r3v 3d2r3z 3d2r3ž 3d2ŕ3ž d3s2v d3s2t d3v2r 3f2r3č 3f2r3f 3f2r3k 3f2ŕ3k 3f2r3m 3f2r3n 3g2l3g 3g2r3c 3g2r3g 3h2l3b 3h2ľ3b 3h2l3t 3h2m2l 3h2r3b 3h2ŕ3b 3h2r3č 3h2r3d 3h2r3d2z 3h2r3k 3h2r3m 3h2r3n 3h2r3ň 3h2r3t 3h2r3v 3c2h2l3p 3c2h2r3b 3c2h2r3č c2h2r3c4h 3c2h2r3l 3c2h2r3t j2c2h3n j3s2t j3š2le j3t2m j3t2r 3k2l3b 3k2ľ3b 3k2l3č 3k2l3z 3k2ľ3z k2r3b 3k2r3č 3k2ŕ3č 3k2ŕ3d 3k2r3k 3k2ŕ3k 3k2ŕ3m 3k2r3p 3k2r3s 3k2r3t 3k2r3v k3s2ľ k2s3n k3t2r l3d2r ľ3k2n l3t2r m3b2l m3b2ľ m3b2r m3f2l m3f2r m3k2n 3m2l3č 3m2l3k m3p2l m3p2ľ m3p2r m3p2s 3m2r3h m2r3c4h 3m2r3k m2r3l m2r3š m2r3t 3m2r3v 3m2r3z 3m2ŕ3z m3s2t m3š2t n3dľa n3d2r n3f2l n3f2r n3g2h n3g2l n3g2ľ n2g3n n3g2r n3g2v n3k2c n3k2h n3k2n n3k2r n3k2v n3s2c n3š2p n3š2t n3t2g n3t2l n3t2n n3t2r n2ž3m 3p2l3n 3p2l3ň 3p2ľ3ň 3p2l3z 3p2ľ3z 3p2ľ3ž 3p2ŕ3c 3p2r3č 3p2r3d 3p2r3s 3p2r3š p3š2ť p3t2r r2b3n r3g2ľ r3g2r r3g2s r3k2d r2k3n r3k2t r3k2v r3p2c r3p2č r3p2r r3s2p r3š2č r3š2l r3š2r r2t3m r3t2n r2t3ň r3t2r r3t2v 3s4c4h4n s2k3l s2k3m s2k3n s3k2r s3k2v 3s2l3n 3s2l3ň 3s2l3z s3p2r 3s2r3d 3s4ŕ3k 3s4r3š s3t2k ôs4t3k2ár3s4t4v s2t3l s3t2m s2t3n s3t2r s3t2v s2ť3h s2ť3m s2ť3p š3k2l š3k2r š3t2r 3š4t4v t3k2l t3k2n 3t2l3č 3t2l3k t3h2l 3t4r3č 3t4r3h 3t2r3l 3t2r3k 3t2r3m a4t2r3n 3t2r3n 3t2ŕ3n 3t2ŕ3ň 3t4r3p 3t2r3v 3t2ŕ3ž 3v2l3č 3v2ľ3č 3v2l3h 3v2l3k 3v2l3n 3v2r3h 3v2r3c2h 3v2r3l 3v2ŕ3š 3v2ŕ3t 3v2r3z 3v2ŕ3z 3v4z4d 3v4z4h 3v4z4n 3v3z2ť z3d2n noz5d4r 3z4d4r 3z4d4v z3g2n 3z4h4r 3z2r3k 3z2r3n 3z4v4l ž2d3n 3ž2l3č 3ž2l3t 3ž2ľt 3ž2r3ď ž3s2t x3p2l x3p2r x3t2r 3b2l4č3n 3b2ľ4č3k 3b2l4n3k 3b2ľ3k2n 3b2r4b3l 3b2r4b3t 3b2r4č3k 3b2r4d3c 3b2ŕ4d3n 3b2r3h2l 3b4ŕ4k3n 3b4r4m3b 3b4r4n3č 3b4r4n3k 3b4r4š3l 3b4r4t3l 3b4r4t3n 3b4r4v3n 3b4r4z3d 3b4r4z3l 3b4r4z3n b3s2t2r 3c4ŕ4č3k 3c4r4k3n 3c4v4r3č 3c4v4r3k 3c4v4ŕ3k 3c4v4r3l 3č4l4n3k 3č4r3č4r 3č4r4c4h3n 3č4r4p3k 3č4r4p3n 3č4r4t3n 3č4v4r3k 3č4v4r3l 3d4l4b3n d4ľ4ž3k d4l4ž3n d4ľ4ž3n 3d4r4c3n 3d4r4g3ľ 3d4r4g3n 3d4r4h3n 3d4r4n3č 3d4r4n3k 3d4r4s3n 3d4r4ž3b 3d4r4ž3k 3f4r4c3k 3f4r4c3n 3f4r4č3k 3f4r4f3l 3f4r4k3n 3f4r4n3d 3f4r4n3d4ž 3f4r4n3g 3f4r4n3k 3g4l4g3n 3g2r4c3k 3h2ľ4b3k 3h2l3t4n 3h2r4b3č 3h2r4č3k h2r4d3l 3h2r4g3ľ 3h2r4k3ľ 3h2r4k3n 3h2ŕ4k3n 3h2r4n3č 3h2r4s3t 3h2r4s3ť 3ch4ľ4p3k 3c2h2r4b3t 3c2h2r4c4h3l 3c2h2r4c4h3ľ 3c4h4r4s3t j3s4t4r j3s4t4v 3k4l4b3č 3k4l4b3k 3k4l4z3k 3k4l4z3n 3k4r4č3m 3k4r4č3n 3k4r4k3v 3k4r4m3n 3k4ŕ4m3n 3k4r4p3č 3k4r4s3t 3k4r4š3t 3k4r4t3k 3k4r4v3n 3m2l4č3k 3m2ľ4k3n 3m2ľ4k3v 3m2l4s3n m3p4r3p m3p4r3v 3m4r4k3n 3m4r4k3v 3m4r4m3l 3m4r4n3č 3m4r4n3k 3m4ŕ4š3t 3m4ŕ4t3v 3m4r4z3l 3m4r4z3k 3m4r4z3n n4g3s4t n3š4t4r n3t4l3m 3p2l4z3l 3p2ľ4z3n p2ŕ4c3n 3p2r4č3k 3p4r4d3n 3p4ŕ4c2h3n 3p4r4s3k 3p4r4t3k r2s3k4d r2s3k4t čer4s3t4v 3s4l4n3k 3s4k4r3z 3s4m4r3c 3s4m4r3č 3s4m4r3d 3s4m4r3k 3s4m4r3t 3s4p4r3c4h 3s4r4d3c 3s4r4k3n 3s4r4s3t 3s4t4ľ3k s3t4r3b ko4s3t4r3č 3s4t4r3č 3s4t4ŕ3h 3s4t4r3k s4t4r3v 4s4ť5k4rát 3š4k4l3b 3š4k4r3k 3š4k4ŕ3k maš3k4r3t 3š4k4r3t 3š4p4l3h 3š4t4r3b š4t4r3n 3š4t4v4r3t 3š4t4v4r3ť 3t2ľ4c3ť 3t2r4b3l t2r4č3k 3t2r4d3l 3t2r4h3l 3t2r4h3n 3t2r4k3n 3t2r4k3v 3t2r4m3n 3t4ŕ4p3n 3t2r4ž3k 3t2r4ž3n 3t2v4r3d 3t2v4r3d4z 3t2v4ŕ3d4z 3v2l4h3č 3v2l4h3k 3v2l4h3n 3v2l4n3k 3v2l4n3n 3v4r4h3n 3v4r4k3n 3v4ŕ4z3g 3v4r4z3g 3v4r4z3n 3v4r4ž3l 3z4h4ŕ3ň 3z4r4n3n 3ž4l4č3n 3ž4l4t3n 3ž4r4d3k 3b4r4n3k4n b3d4ľ4ž3n 3c4v4r4č3k 3c4v4r4n3k 3č4ŕ4s3t4v 3č4r4t4t3n 3č4v4r4k3n 3d4r4ž3g4r 3f4r4n4g3n h2ŕ4s3t4k 3c4h4r4s4t3n 3k4r4s4t3n 3k4r4s4t3ň 3s4m4r4š3ť 3s4m4r4t3k s3t4r4n3k 3š4k4l4b3n maš3k4r4t3n 3š4k4r4t3n 3š4k4v4r3č 3š4k4v4r3k 3š4k4v4ŕ3k 3š4k4v4r3n 3š4m4r4d3k 3š4m4r4n3c 3š4p4l4h3n 3š4t4r4k3n 3š3t4r4n3g 3t4v4r4d3n 3v4r4s3t4v 3v4r4z3g4n 3c4v4r4n3g4n 3š4k4v4r4k3n 3š4k4v4ŕ4k3n k4č3ný. k4č3ného. k4č3nému. k4č3nom. k4č3ným. k4č3né. k4č3ná. k4č3nej. k4č3nú. k4č3nou. k4č3ní. k4č3ných. k4č3nými. k4t3ný. k4t3ného. k4t3nému. k4t3nom. k4t3ným. k4t3né. k4t3ná. k4t3nej. k4t3nú. k4t3nou. k4t3ní. k4t3ných. k4t3nými. n4č3ný. n4č3ného. n4č3nému. n4č3nom. n4č3ným. n4č3né. n4č3ná. n4č3nej. n4č3nú. n4č3nou. n4č3ní. n4č3ných. n4č3nými. n4k4č3n n4t3ný. n4t3ného. n4t3nému. n4t3nom. n4t3ným. n4t3né. n4t3ná. n4t3nej. n4t3nú. n4t3nou. n4t3ní. n4t3ných. n4t3nými. r4d3ný. r4d3ného. r4d3nému. r4d3nom. r4d3ným. r4d3né. r4d3ná. r4d3nej. r4d3nú. r4d3nou. r4d3ní. r4d3ných. r4d3nými. r4m3ný. r4m3ného. r4m3nému. r4m3nom. r4m3ným. r4m3né. r4m3ná. r4m3nej. r4m3nú. r4m3nou. r4m3ní. r4m3ných. r4m3nými. r4p4č3n r4t3ný. r4t3ného. r4t3nému. r4t3nom. r4t3ným. r4t3né. r4t3ná. r4t3nej. r4t3nú. r4t3nou. r4t3ní. r4t3ných. r4t3nými. s4t3ný. s4t3ného. s4t3nému. s4t3nom. s4t3ným. s4t3né. s4t3ná. s4t3nej. s4t3nú. s4t3nou. s4t3ní. s4t3ných. s4t3nými. z4d3ny. z4d3neho. z4d3nemu. z4d3nom. z4d3nym. z4d3ne. z4d3na. z4d3nej. z4d3nu. z4d3nou. z4d3ni. z4d3nych. z4d3nymi. z4d3ný. z4d3ného. z4d3nému. z4d3ným. z4d3né. z4d3ná. z4d3nú. z4d3ní. z4d3ných. z4d3nými. b2l4š3k l2t3k2a. l2t3k2y. l2t3k2e. l2t3k2u. l2t3k2ou. l2t3k2ám. l2t3k2ách. l2t3k2a1mi. n2t3k2a. n2t3k2y. n2t3k2e. n2t3k2u. n2t3k2ou. n2t3k2ám. n2t3k2ách. n2t3k2a1mi. n2k2t3k p2t3k2a. p2t3k2y. p2t3k2e. p2t3k2u. p2t3k2ou. p2t3k2ám. p2t3k2ách. p2t3k2a1mi. s2t3k2a. s2t3k2y. s2t3k2e. s2t3k2u. s2t3k2ou. s2t3k2ám. s2t3k2ách. s2t3k2a1mi. 5p4r4s3t b3s4k d3s4k j3s4k l4p3s4k l3s4k ľ3s4k l4t3s4k 4m3s4k 4m4p3s4k n4d3s4k n4k4t3s4k n3s4k n4t3s4k p3s4k p4t3s4k r3s4k r4t3s4k r4z5s4k 5s4r4b3s4k š3s4k t3s4k v3s4k z3s4k ž3s4k n2d3č z3š2t2 r4z3š2t2 b3s4t4v č3s4t4v d3s4t4v ď3s4t4v ľ3s4t4v m3s4t4v n3s4t4v n4t3s4t4v p3s4t4v r3s4t4v r4v5s4t4v š3s4t4v t3s4t4v v3s4t4v ž3s4t4v .a2e2ro .a2e2ro3d2r .aero3g2r .a2e2ro3k2l .aero3p2l .aero3s2k .aero3s2t .aero3t2r .akcie3s2c2h .ane3s2teti .ane3s2téz .anti5k4l .anti5k4r .apo5p4le .ap4rio .ap4rió .arci5k4 .aristo5k4 .as3k2lep .austro5s4 .bac2k3hand .balne2o3 .belo5 .belo5h4 .bez5 .bez5b4 .bez5d4 .bez5h4 .bez5k4 .bez5m4 .bez5p4 .bez5s4 .bez5t4 .bez5v4 .bez5z4 .bielo5 .bielob4 .bieloh4 .bielov4 .bi2o5 .biok4 .biop4 .bios4 .blaho5 .blahop4 .blahos4 .bledo5 .boha5p4 .boho5s4 .bože5 .bože5d4 .božec2h4 .brato5v4r .b2z2d .cáro5v4ra .celo5d4 .celo5k4 .celo5p4 .celo5s4 .celo5u4 .ceno5t4 .ces2t5maj .cirkevno5 .cirkevno5p4 .c4t4n .cudzo5k4 .cudzo5o4 .cudzo5s4 .cudzo5t4 .cudzo5v4 .cyto5p4 .čaro5k4 .čaro5s4 .čaro5v4 .čaro5z4 .černo5b4 .černo5h4 .černo5k4 .černo5o4 .červeno5a4 .červeno5b4 .červeno5h4 .červeno5k4 .červeno5o4 .červeno5p4 .čierno5b4 .čierno5h4 .čierno5o4 .čo5ch4 .čo5s4 .čudo5t4 .da3k2d .ďatelino5t4 .de5f4 .de5g4 .dek4l .desať5 .de5š4t2 .dez5i2 .dez5o2 .dis2k3d4 .divo5t4 .dlho5h4 .dlho5p4 .dobro5d4 .dobro5p4 .dobro5s4 .do5č2m .do5d4 .do5f4 .do5h4 .do5c4h4 .do5i4 .do5k4 .do5o .do5p4 .do5s4 .do5š4p .do5š4tie .do5š4tí .do5t4l .do5t4m .do5t4r .do5t4v .do5u .do5v4 .do5z4 .do5ž4 .drevo5p4 .drevo5o .drevo5v4 .drobno5z4 .druho5s4 .dvoj5al .dvoj5č4 .dvoj5d4 .dvoj5h4 .dvoj5i4 .dvoj5k4 .dvoj5p4 .dvoj5s4 .dvoj5t4 .dvoj5u .dvoj5v4 .dvoj5z4 .elektro5 .ex5k4 .fol2k5 .foto5 .gala5p4 .gama5g4 .ge4o .hnedo5o .hnedo5u .holo5b4 .holo5h4 .holo5k4 .hore5z4 .horno5u4 .hrôzo5s4t4 .hrôzo5v4 .hrôzy5p4 .hrubo5s4 .hydro5 .chorobo5p4 .jasno5o .jasno5z4 .jedno5h4 .jedno5i4 .jedno5p4 .jedno5s4 .jedno5u4 .jedno5z4 .juho5a .juho5s4 .južno5s4 .kata5k4 .kata5s4t4 .kmeňo5t4 .koso5d4 .koso5š4 .koso5u .krivo5p4 .kruto5v4 .krvi5p4 .krvi5s4 .krvi5t4 .ktovie5a2 .lásky5p4 .lesos4 .ľ4s4t .ľudovo5u .makro5k4 .makro5o4 .makro5s4 .málo5k4 .malo5o .málo5v4 .márno5t4 .medzi5h4 .medzi5i4 .medzi5p4 .medzi5š4 .medzi5t4 .melo5d4 .meru5ô2 .miesto5d4 .miesto5p4 .mikro5e4 .mikro5k4 .mikro5o .mikro5p4 .mimo5š4 .mimo5ú .mimo5v4 .mnoho5s4 .mnoho5t4 .mnoho5u .mnoho5v .mnoho5z .modro5o .mrako5d4 .mravo5u .mucho5t4 .m4z4d .na5a4 .na5b4 .na5c4 .nad5h4 .na5d4nes. .nad5p4 .na5d4p4. .na5d4ŕ4. .na5d4robno. .na5h4 .na5i4 .na5k4 .na5m4 .na5o4 .na5p4 .ná5p4 .národno5o .na5s4 .na5st4 .ná5s4 .ná5st4 .na5š4 .na5šk4 .na6š5sk .na5t4 .na5u4 .na5ú4 .ná5u4 .ná5ú4 .na5v4l .na5v4na .na5v4r4 .ná5v4r4 .na5v4z4 .na5z4r .na5z4v .na6z5vyš .náz5v4 .na5ž4 .ne5a4 .ne5do3u2k .ne5e4 .ne5i4 .ne5m4 .ne5na5h4 .ne5na5i4 .ne5na5k4 .ne5na5m4 .ne5na5p4 .ne5na5s4 .ne5na5t4 .ne5p4 .ne5s4 .ne6s5tor .ne5š4 .ne5t4 .ne6t5t .ne5u2 .ne5ú2 .ne5v4 .ne5z4d4r .ne5z4d4v .ne5z4l .ne5z4m .ne5z4n .ne5z4r .ne5z4v .nie5k4 .ni5k4 .ni6k5toš .nízko5k4 .novo5u2 .novo5z2 .obi5d4 .ob5k4 .obo5s4 .obo5z4 .ob5s4 .ob5t4 .ob5z4 .od5b4 .od5c4 .od5d4 .od5f4 .od5h4 .od5c4h4 .od5i4 .od6i5ó .od5í4 .od5k4 .odo5b4 .odo5h4 .odo5k4 .odo5m4k4 .odo5p4 .odo5s4 .od5p4 .od5s4 .od5š4 .od5t4 .od5v4 .od5z4 .t4v4r .o5h4l .o5h4ľ .o5h4na .o5h4nú .o5h4r .o5c4h4 .o5k4l .o5k4ľ .okolo5i .okolo5s4 .o5k4ra .o5k4rá .o5k4resať .o5k4resávať .o5k4ri .o5k4rí .o5k4ru .o5k4rú .o5m4l .o5m4n .o5m4r .o5p4 .o6p5lan .o6p5rat .o5s4lab .o5s4lad .o5s4lav .o5s4láv .o5s4lep .o5s4lo .o5s4p4 .o5s4tar .o5s4tať .o5s4tan .o5s4taň .o6s5tatn .o5s4tatok .o5s4tatk .o5s4táv .o5s6to5 .o5s6t4rap .ostro5u .o5s4ved .o5s4vetl .o5s4viet .o5s4viež .o5s4vit .o5s4voj .o5š4k4 .o5š4ľ4 .o5š4m4 .o5š4p4 .o5š4v4 .o5t4ras .o5t4rav .o5t4ráv .o5t4rep .o5t4ria .o5v4dov .o5v4lád .o5v4laž .o5v4p4 .o5v4r .o5z4l4 .o5z4n .o5z4re .o5z4v4l .päť5izbo .plno5a .plno5p4 .plno5š4 .plno5kr4 .plocho5d4 .po5b4 .po5č4 .poda5k4 .pod5b4r .pod5h4 .pod5c4h .pod5k4 .pod5p4 .po5d4ráž .po5d4rep .pod5re .po5d4rh .po5d4rie .po5d4rm .po5d4rv .po5d4r4ž .pod5s4koč .pod5v4 .pod3zem .pod3zol .pod3ža .pod3žu .po5h4 .po6h5reb .po5c4h4 .po5i4 .po5k4 .pol5d4 .pol5i4z .polo5a .polo5b4 .pol5o4blú .polo5d4 .polo5h4l .polo5i .polo5k4 .polo5m4 .polo5o4 .polo5p4 .polo5s4 .polo5t4 .polo5u4 .polo5ú4 .polo5v4 .polo5z4 .pol5s4t .po5m4 .po6m5ník .po5o4 .po5ob4h .po5ob4l .po5s4 .po6s4t5s4k4rip .po6s5tul .po5š4 .po6š5ta .po6š5tov .po6š5v .po5t4k4n .po5t4ľ .po5t4r .poroz5p4 .poroz5s4 .poroz5v4 .po6st5g4r .po6s5ti .po5t4 .po5u .po5v4 .po4v5ra .povy5h4 .povy5k4 .povy5p4 .povy5s4 .povy5v4 .povy5z4 .po5v4z4b .po5z4 .pra5o4 .pra5p4 .pravicovo5o .pra5v4l .pra5v4nu .pra5v4nú .prá5vo5p4 .pra5vo5s4 .pre5b4 .pre5c4 .pred5c4 .pred5h4 .pred5ch4 .pred5i .pred5k4 .pred5m4 .predo5h4 .pred5op .pred5ostatn .pred5p4 .pre5d4rah .pre5d4rap .pre5d4rať .pre5d4raž .pre5d4ri .pre5d4rž .pred5s4 .pred5v4 .pred5z4 .pre5č4 .pre5e2 .pre5f2 .pre5h4 .pre5c4h4 .pre5i4 .pre5k4 .pre6k5vap .pre5m4 .pre5o4 .pre5p4 .pre5s4 .pre6s5n .pre5š4 .pre5t4 .pre5v4 .pre5z4 .pre5ž4 .pri5b4 .pri5č4 .pri5d4 .pri5h4 .pri5c4h4 .pri5k4 .prí5k4 .pri5m4 .pri5p4 .pri5s4 .prí5s4 .prí6s5p .pri6s5p .pri5s4pô .pri5š4 .pri6š5la. .pri6š5li. .pri6š5lo. .pri5t4 .pri5v4 .pri5z4 .pri5ž4 .re5g4 .re5k4 .re6k5v .re5p4 .re6p5n .re5š4 .re5t4 .ro4z5i4 .ro6z5í4 .rozo5b4 .rozo5d4 .rozo5c4h4 .rozo5m4 .rozo5p4 .rozo5r4 .rozo5s4 .rozo5š4 .rozo5z4 .rozo5ž4 .ro6z5u4 .ro6z5v4 3s4polu5 3s4polu5h4 3s4polu5p4 3s4polu5v4 .šikmo5o .široko5 .široko5p4 .štáto5 .št4vor5 .su4b5s4 .sú5h4 .sú5k4r .sú5m4r .sú5s4 .sú5v4 .sú5z4 .troj5 .t4v4r4do5 .viac5k4 .viac5v4 .vide2o5 .vnútro5s4 .vnútro5š4 .vo5p4ch .vo5p4r .vo5s4p .vo5t4 .vo5v4 .vy5 .vý5 .vy5b4 .vy5c4 .vý5c4 .vy5č4 .vý5č4 .vy5d4 .vý5d4 .vy5h4 .vy6h5ň .vy6h5ne .vý5h4 .vy5c4h4 .vy5k4 .vý5k4 .vy5m4 .vy5p4 .vý5p4 .vy5s4 .vý5s4 .vy5š4 .vy6š5š .vý6š5k .vy5t4 .vý5t4 .vy5v4 .vy5z4 .vý5z4 .za5b4 .zá5b4 .za5c4 .za5č4 .za5d4 .za5h4 .za5c4h4 .za5k4 .za5m4 .za5p4 .za5r4 .za5s4 .za5š4 .za5t4 .za5v4 .za5z4 .za5ž4 .zá5k4 .zá5z4 .zo5b4 .zo6d5p .zo5d4r .zo5d4v .zo5h4 .zo5m4l .zo5m4r .zo5s4 .zo5š4 .zo5t4 .zo5v4 .zo5z4 .zo5ž4 5alkohol auto4rk auto4rs 5b4lah 5b4ledn 5b4lesk 5b4lok 5b4lúd 5b4lysk 5b4lysn 5boh3vi4e3a2k 5boh3vi4e3o2d3k 5boh3z4 5boles4t5n 5b4rať 5b4rázd 5b4rec2h 5b4ronz 5b4ruč 5b4rús 5b4rýzg 5c4muk 5c4nie 5c4vak 5c4vič 5c4vik čí6s5lov 5č4len 5č4lánk 5č4lánok 5č4lov 5d4ňov 5d4ramat 5d4rať 5d4vanás4ť5 5d4vih 5d4viž 5d4voj 5d4vor 5e2u2róp 5f4ľak 5f4lias 5f4rancú 5f4rekven 5f4ráz 5g4raf 5g4ram pro6g5ram 5g4réč 5g4rob 5g4vardej 5h4lad 5h4las 5h4lav 5h4ľad 5h4liad 5h4luch 5h4mat 5h4mot 5h4nať 5h4ned 5h4nev 5h4niezd 5h4noj 5h4nut 5h4núť 5h4nút 5h4rab 5h4r3mot 5h4ran 5h4rať 5h4rob 5h4rom 5h4roz 5h4rub 5h4ryz 5h4viezd 5c6h4lap 5c6h4leb 5c6hran 5c6h4rán 5c6h4ráň 5c6h4vál 5c6h4vát 5c6h4vat 5c6h4vost 5jedenás4t5k 5jedenás4ť5 5k4lad 5k4laď 5k4ľak 5k4lam 5k4lásť 5k4liat 5k4liať 5k4lep 5k4les 5k4ľúč 5k4resb 5k4resť 5k4ritic 5k4rídl 5k4rôch 5k4ruh 5k4rúž 5k4ryt 5k4valif 5k4valit 5k4vet 5k4vadr 5m4ladis4t3v 5m4nož 5m4rav 5m4ráz na5d4ž4ga na5d4ž4gá nav3š4tev náv3š4tev nav3š4tív 5p4lán 5p4lastik 5p4lat 5p4lav 5p4leta 5p4letie 5p4letú 5p4liesť 5p4ne2umat 5p4ráv s6práv 5p4riam 5p4rirod 5p2risám 5p4roduk 5s4fér 5s4c2hopn 5s4k4lad 5s4k4lon 5s4koč 5s4kok 5s4kop 5s4kor 5s4kôr 5s4k4romne 5s4k4rot 5s4k4rúc 5s4k4rutk 5s4k4rýv 5s4kúsen 5s4kutoč 5s4k4vúc 5s4ladk 5s4lav 5s4láv 5s4led 5s4lep 5s4lovn 5s4love 5s4lova 5s4lovk 5s4luh 5s4lúž 5s4ľub 5s4maž 5s4mel 5s4mer 5s4piev 5s4pev 5s4por 5s4potreb 5s4p4ravod 5s4p4raved 5s4p4rávn 5s4p4ravo 5s4tarost 5s4tatic 5s4tav 5s4t4rach 5s4t4ran 5s4t4rán 5s4t4ráda 5s4t4raš 5s4t2rat 5s4t2red 5s4t2rek 5s4t4rel 5s4t4reľ 5s4t4riel 5s4t4rieľ 5s4t4rih 5s4t4riž 5s4t4rom 5s4t4rúh 5s4t4run 5s4t4ruž 5s4tati 5d2ve5s4to 5t2ri5s4to 5š4tyri5s4to 5päť5s4to 5šes4ť5s4to 5sedem5s4to 5osem5s4to 5deväť5s4to 5päť5 5šes4ť5 5s4t4la 5s4tup 5s4ved 5š4ľah 5š4liap 5š4kola 5š4k4rab 5š4k4rie 5š4pin 5š4p4liech 5š4print 5š4tart 5š4tát 5š4tep 5š4tít 5š4t4ruktúr 5š4tude 5š4tudo 5š4t4vera 5š4t4vorec 5š4tyli 5š4ťast 5štiep4 5š4t4v4r4ť5k4 5š4t4v4r4ť5l4 5š4t4v4r4ť5r4 5š4t4v4r4ť5s4 5t4lač 5t4lak 5t4ran4s5 5t4ras 5t4resk 5t4retin 5t4ried 5t4rub 5t4r4vaj 5t4r4val 5t4r4van 5uholník 5uhoľn 5viac5h4 5v4čera 5v4lád 5v4las 5v4rás 5v4rav 5v4rat 5v4rát 5v4šimn 5v4ták 5v4tip 5vy5s4t4rája 5v4z4du 5v4z4ťah 5v4z4ťaž 5z4lom 5z4luč 5z4mysel 5z4mysl 5z4nak 5z4nám 5z4náša 5z4rak 5z4väz 5z4vest 5zv4esť 5z4vod 5z4vuk 5z4vuč 5ž4ráč 5ž4rane 5ž4reb 5ž4rút .cv6 .ch6 .sp6 .st6 .šk6 .šp6 .št6 .tk6 .uh6 .uc6h6 .uk6 .um6 .up6 .us6 .ús6 .usc6h6 .úsc6h .usk6 .úsl6 .usm6 .úsm6 .ús7ta. .ús7tami. .ús7toč .ús7ti .ust6l .úst7ny .ust6r .ús7tret .us7t4ric .ús6t6r .úš6 .ut6 .uv6 .uz6 .vd6 .vh6 .vk6 .vp6 .vs6 .vš6 .vt6 .vz6 .vzh6 .vzk6 .vzl6 .vzp6 .vž6 .zb6 .zd6n .zd6r .zd6v .zg6 .zh6 .zm6 .zr6 .zv6 4b4s4ť. 8c4h. 8d4z. 8d4ž. 4c4ht4. 4j4s4ť. 4lt. 4m4p4r. 4m4p4s. 4m4š4t. 4n4k4t. 4p4r4v. 4rd. r4p4t. r4š4č. r4t4z. 4st. 4sť. 5k4rát. 5s4to5k4rát. 5t4ľ4c4ť. akci3a2 akvári3u2m gymnázi3um le2u3kémia t2ri3u2mf kli3e2nt", ["length"]=19364, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=2467, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pl.pat0000644000175000017500000007350411761001300024655 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-pl.rme % used: a b c d e f g h i j k l m n o p r s t u v w x y z ó ą ć ę ł ń ś ź ż \patterns{ .ćć8 .ćł8 .ćń8 .ćś8 .ćź8 .ćż8 .ć8 .ćb8 .ćc8 .ćd8 .ćf8 .ćg8 .ćh8 .ćj8 .ćk8 .ćl8 .ćm8 .ćn8 .ćp8 .ćr8 .ćs8 .ćt8 .ćv8 .ćw8 .ćwier2ć3 .ćx8 .ćz8 .łć8 .łł8 .łń8 .łś8 .łź8 .łż8 .ł8 .łb8 .łc8 .łd8 .łf8 .łg8 .łh8 .łj8 .łk8 .łl8 .łm8 .łn8 .łp8 .łr8 .łs8 .łt8 .łv8 .łw8 .łx8 .łz8 .ńć8 .ńł8 .ńń8 .ńś8 .ńź8 .ńż8 .ń8 .ńb8 .ńc8 .ńd8 .ńf8 .ńg8 .ńh8 .ńj8 .ńk8 .ńl8 .ńm8 .ńn8 .ńp8 .ńr8 .ńs8 .ńt8 .ńv8 .ńw8 .ńx8 .ńz8 .ść8 .śł8 .śń8 .śś8 .śź8 .śż8 .ś8 .śb8 .śc8 .śd8 .śf8 .śg8 .śh8 .śj8 .śk8 .śl8 .śm8 .śn8 .śp8 .śró2d5 .śródr2 .śr8 .śs8 .śt8 .śv8 .św8 .światło3w2 .śx8 .śz8 .źć8 .źł8 .źń8 .źś8 .źź8 .źż8 .ź8 .źb8 .źc8 .źdź8 .źd8 .źf8 .źg8 .źh8 .źj8 .źk8 .źl8 .źm8 .źn8 .źp8 .źr8 .źs8 .źt8 .źv8 .źw8 .źx8 .źz8 .żć8 .żł8 .żń8 .żś8 .żź8 .żż8 .ż8 .żb8 .żc8 .żd8 .żf8 .żg8 .żh8 .żj8 .żk8 .żl8 .żm8 .żn8 .żp8 .żr8 .żs8 .żt8 .żv8 .żw8 .żx8 .żz8 .a2b2s3t .a2d3 .ad4a .ad4e .ad4i .ad4o .ad4u .ad4y .ad5apt .ad5iu .ad5op .ad5or .ae3ro .aeroa2 .aeroe2 .aeroi2 .aeroo2 .aerou2 .antya2 .antye2 .antyi2 .antyo2 .antyu2 .arcy3ł2 .arcy3b2 .arcy3bz2 .arcy3k2 .arcy3m2 .arcya2 .arcye2 .arcyi2 .arcyo2 .arcyu2 .au3g2 .au3k2 .au3t2 .auto3ch2 .autoa2 .autoe2 .autoi2 .autoo2 .autotran2s3 .autou2 .bć8 .bł8 .bń8 .bś8 .bź8 .bż8 .b8 .bb8 .bc8 .bd8 .be2z3 .be3z4an .be3z4ec .be3z4ik .bezch2 .bezm2 .bezo2 .bezo2b1j .bezw2 .bezzw2 .bf8 .bg8 .bh8 .bj8 .bk8 .bl8 .bm8 .bn8 .bp8 .br8 .brz8 .bs8 .bt8 .bv8 .bw8 .bx8 .bz8 .cć8 .cł8 .cń8 .cś8 .cź8 .cż8 .c8 .cało3ś2 .cało3k2 .cb8 .cc8 .cd8 .cf8 .cg8 .ch8 .chrz8 .cienko3w2 .ciepło3kr2 .cj8 .ck8 .cl8 .cm8 .cn8 .cp8 .cr8 .cs8 .ct8 .cv8 .cw8 .cx8 .cz8 .czarno3k2 .czk8 .cztere2ch3 .czterechse2t3 .cztero3ś2 .czwó2r3 .czwó3r4ą .czwó3r4ę .czwó3r4a .czwó3r4e .czwó3r4o .dć8 .dł8 .długo3tr2 .długo3w2 .dń8 .dś8 .dź8 .dż8 .d8 .daleko3w2 .db8 .dc8 .dd8 .de2z3 .de3z4a3bil .de3z4a3wu .de3z4el .de3z4er .de3z4y .deza2 .dezo2 .df8 .dg8 .dh8 .dj8 .dk8 .dl8 .dm8 .dn8 .do3ć2 .do3ł2 .do3ś2 .do3ź2 .do3ż2 .do3b2 .do3c2 .do3d2 .do3f2 .do3g2 .do3h2 .do3k2 .do3l2 .do3m2 .do3p2 .do3r2 .do3s2 .do3t2 .do3w2 .do3z2 .do4ł3k .do4k3t .do4l3n .do4m3k .do4r3s .do4w3c .do5m4k2n .dobr2 .dobrz2 .doch2 .docz2 .dodź2 .dodż2 .dodz2 .dogrz2 .dopch2 .doprz2 .dorż2 .dorz2 .dosch2 .dosm2 .dosz2 .dotk2 .dotr2 .dp8 .dr8 .drogo3w2 .drz8 .ds8 .dt8 .dv8 .dwó2j3 .dwó3j4ą .dwó3j4ę .dwó3j4a .dwó3j4e .dwó3j4o .dw8 .dx8 .dy2s3 .dy2z3 .dy3s4e .dy3s4o .dy3s4ta .dy3s4y .dy3sz .dy3z4e .dyzu2 .dz8 .dziesięcio3ś2 .dziewięćse2t3 .dziewię2ć3 .dziewięcio3ś2 .e2k2s3 .e2m3e2s5ze2t .e2s1e2s1ma .e2s1ha .e2s1t .egoa2 .egoe2 .egoi2 .egoo2 .egou2 .eks4y .elektroa2 .elektroe2 .elektroi2 .elektroo2 .elektrou2 .fć8 .fł8 .fń8 .fś8 .fź8 .fż8 .f8 .fb8 .fc8 .fd8 .ff8 .fg8 .fh8 .fj8 .fk8 .fl8 .fm8 .fn8 .fp8 .fr8 .fs8 .ft8 .fv8 .fw8 .fx8 .fz8 .gć8 .gł8 .gń8 .gś8 .gź8 .gż8 .g8 .gb8 .gc8 .gd8 .ge2o3 .gf8 .gg8 .gh8 .gj8 .gk8 .gl8 .gm8 .gn8 .go2u3 .gp8 .gr8 .grubo3w2 .grz8 .gs8 .gt8 .gv8 .gw8 .gx8 .gz8 .hć8 .hł8 .hń8 .hś8 .hź8 .hż8 .h8 .hb8 .hc8 .hd8 .hf8 .hg8 .hh8 .hipe2r3 .hipe3r4o .hipera2 .hipere2 .hj8 .hk8 .hl8 .hm8 .hn8 .hp8 .hr8 .hs8 .ht8 .hv8 .hw8 .hx8 .hz8 .i2n3 .i2s3l .i3n4ic .i3n4o .i3n4u .i4n5o2k .in4f3lan .ino3w2 .izoa2 .izoe2 .izoi2 .izoo2 .izou2 .jć8 .jł8 .jń8 .jś8 .jź8 .jż8 .j8 .jadło3w2 .jb8 .jc8 .jd8 .jf8 .jg8 .jh8 .jj8 .jk8 .jl8 .jm8 .jn8 .jp8 .jr8 .js8 .jt8 .jv8 .jw8 .jx8 .jz8 .kć8 .kł8 .kń8 .kś8 .kź8 .kż8 .k8 .kb8 .kc8 .kd8 .kf8 .kg8 .kh8 .kilkuse2t3 .kilkuseto2 .kj8 .kk8 .kl8 .km8 .kn8 .koło3w2 .kon2t2r3 .kon3tr4a .kon3tr4e .kon3tr4o3l .kon3tr4o3w .kon3tr4y .kon4tr5a2gi .kon4tr5a2se .kon4tr5a2sy .kon4tr5a2ta .kon4tr5adm .kon4tr5akc .kon4tr5alt .kon4tr5arg .kontro2 .kontru2 .kp8 .krótko3tr2 .krótko3w2 .kr8 .kro2ć3 .krz8 .ks8 .kt8 .kv8 .kw8 .kx8 .kz8 .lć8 .lł8 .lń8 .lś8 .lź8 .lż8 .l8 .lb8 .lc8 .ld8 .lf8 .lg8 .lh8 .lj8 .lk8 .ll8 .lm8 .ln8 .lp8 .lr8 .ls8 .lt8 .ludo3w2 .lv8 .lw8 .lx8 .lz8 .mć8 .mł8 .mń8 .mś8 .mź8 .mż8 .m8 .mb8 .mc8 .md8 .mf8 .mg8 .mh8 .mili3amp .mj8 .mk8 .ml8 .mm8 .mn8 .możno3w2 .mp8 .mr8 .ms8 .mt8 .mv8 .mw8 .mx8 .mz8 .nć8 .nł8 .nń8 .nś8 .nź8 .nż8 .n8 .na2d2 .na2j .na3ć2 .na3ł2 .na3ś2 .na3ź2 .na3ż2 .na3b2 .na3c2 .na3dą .na3dę .na3dź2 .na3d4łub .na3d4ir .na3d4much .na3d4ręcz .na3d4r2w .na3d4repcz .na3d4rept .na3d4ruk .na3d4rz .na3d4worn .na3daj .na3de .na3do .na3dy .na3dzi .na3f2 .na3g2 .na3h2 .na3ją .na3ję .na3jazd .na3je .na3k2 .na3l2 .na3m2 .na3p2 .na3r2 .na3s2 .na3t2 .na3u2 .na3w2 .na3z2 .na4d3o2b2ł .na4d3o2bojcz .na4d3o2bowi .na4d3o2brot .na4d3o2drz .na4d3o2kien .na4d3olbrz .na4d5rzą .na4d5rzę .na4d5rzecz .na4d5rzy .na4d5ziem .na4f3c .na4f3t .na4j3e2f .na4j3e2g .na4j3e2k2s .na4j3e2ko .na4j3e2n .na4j3e2r .na4j3e2s .na4j3e2w .na4j3emf .na4j3eu .na4r3c .na4r3d .na4r3k .na4r3r .na4r3t .nabrz2 .nach2 .nacz2 .nadśrod5ziem .nad3ć2 .nad3ł2 .nad3ś2 .nad3b2 .nad3c2 .nad3d2 .nad3e2tat .nad3f2 .nad3g2 .nad3h2 .nad3i2 .nad3j2 .nad3k2 .nad3l2 .nad3m2 .nad3n2 .nad3p2 .nad3r2 .nad3s2 .nad3t2 .nad3u2 .nad3w2 .nad5ż2 .nad5zó .nad5z2mys .nad5zo .nad5zwycz .nadch2 .nadcz2 .naddź2 .nade3ć2 .nade3ł2 .nade3ś2 .nade3ź2 .nade3ż2 .nade3b2 .nade3c2 .nade3d2 .nade3f2 .nade3g2 .nade3h2 .nade3k2 .nade3l2 .nade3m2 .nade3p2 .nade3r2 .nade3s2 .nade3t2 .nade3w2 .nade3z2 .nade4p3c .nade4p3n .nade4p3t .nadech2 .nadecz2 .nadedź2 .nadedż2 .nadedz2 .naderż2 .naderz2 .nadesz2 .nadsz2 .nadtr2 .nadz2 .nagrz2 .naj3ć2 .naj3ł2 .naj3ś2 .naj3ź2 .naj3ż2 .naj3akt .naj3au .naj3b2 .naj3c2 .naj3d2 .naj3f2 .naj3g2 .naj3h2 .naj3i2 .naj3k2 .naj3l2 .naj3m2 .naj3o2 .naj3o2ć2 .naj3o2ł2 .naj3o2ś2 .naj3o2ź2 .naj3o2ż2 .naj3o2b2 .naj3o2c2 .naj3o2d2 .naj3o2f2 .naj3o2g2 .naj3o2h2 .naj3o2k2 .naj3o2l2 .naj3o2m2 .naj3o2p2 .naj3o2r2 .naj3o2s2 .naj3o2t2 .naj3o2w2 .naj3o2z2 .naj3p2 .naj3r2 .naj3ro2z3 .naj3s2 .naj3t2 .naj3u2 .naj3w2 .naj3z2 .najbe2z3 .najbezw2 .najch2 .najcz2 .najdź2 .najdż2 .najdo3ć2 .najdo3ł2 .najdo3ś2 .najdo3ź2 .najdo3ż2 .najdo3b2 .najdo3c2 .najdo3d2 .najdo3f2 .najdo3g2 .najdo3h2 .najdo3k2 .najdo3l2 .najdo3m2 .najdo3p2 .najdo3r2 .najdo3s2 .najdo3t2 .najdo3w2 .najdo3z2 .najdoch2 .najdocz2 .najdodź2 .najdodż2 .najdodz2 .najdorz2 .najdosz2 .najdotk2 .najdz2 .najkr2 .najob3ć2 .najob3ł2 .najob3ś2 .najob3ź2 .najob3ż2 .najob3c2 .najob3d2 .najob3f2 .najob3g2 .najob3h2 .najob3j2 .najob3k2 .najob3l2 .najob3m2 .najob3n2 .najob3p2 .najob3s2 .najob3t2 .najob3w2 .najobch2 .najobcz2 .najobdź2 .najobdż2 .najobdz2 .najobrz2 .najobsz2 .najoch2 .najocz2 .najodź2 .najod3ć2 .najod3ś2 .najod3c2 .najod3d2 .najod3f2 .najod3g2 .najod3h2 .najod3j2 .najod3k2 .najod3l2 .najod3m2 .najod3n2 .najod3p2 .najod3s2 .najod3t2 .najod3w2 .najod5ż2 .najodch2 .najodcz2 .najoddź2 .najoddż2 .najoddz2 .najodsz2 .najodz2 .najorz2 .najosz2 .najro3z4u .najrz2 .najsm2 .najsz2 .najtk2 .najtr2 .najucz2 .najzw2 .nakr2 .napo2d2 .napo3ć2 .napo3ł2 .napo3ś2 .napo3ź2 .napo3ż2 .napo3b2 .napo3c2 .napo3f2 .napo3g2 .napo3h2 .napo3k2 .napo3l2 .napo3m2 .napo3p2 .napo3r2 .napo3s2 .napo3t2 .napo3w2 .napo3z2 .napo4m3p .napoch2 .napocz2 .napodź2 .napodż2 .napod3d .napomk2 .naporz2 .naposz2 .naprz2 .narż2 .naro2z3 .narz2 .nasm2 .nasz2 .natch2 .natk2 .naz3m2 .nazw2 .nb8 .nc8 .nd8 .ne2o3 .nf8 .ng8 .nh8 .nie3ć2 .nie3ł2 .nie3ś2 .nie3ź2 .nie3ż2 .nie3b2 .nie3c2 .nie3d2 .nie3f2 .nie3g2 .nie3h2 .nie3k2 .nie3l2 .nie3m2 .nie3p2 .nie3r2 .nie3s2 .nie3t2 .nie3u2 .nie3w2 .nie3z2 .nie4c3c .nie4c3k .nie4dź3 .nie4m3c .nie4m3k .niech2 .niecz2 .niedż2 .niedo3ć2 .niedo3ł2 .niedo3ś2 .niedo3ź2 .niedo3ż2 .niedo3b2 .niedo3c2 .niedo3d2 .niedo3f2 .niedo3g2 .niedo3h2 .niedo3k2 .niedo3l2 .niedo3m2 .niedo3p2 .niedo3r2 .niedo3s2 .niedo3t2 .niedo3w2 .niedo3z2 .niedobrz2 .niedoch2 .niedocz2 .niedodź2 .niedodż2 .niedodz2 .niedokr2 .niedomk2 .niedopch2 .niedorz2 .niedosz2 .niedotk2 .niedz2 .nieoć2 .nieoł2 .nieoś2 .nieoź2 .nieoż2 .nieo2 .nieob2 .nieob3ć2 .nieob3ś2 .nieob3ź2 .nieob3ż2 .nieob3c2 .nieob3d2 .nieob3f2 .nieob3g2 .nieob3h2 .nieob3j2 .nieob3k2 .nieob3m2 .nieob3p2 .nieob3s2 .nieob3w2 .nieobch2 .nieobcz2 .nieobdź2 .nieobdż2 .nieobdz2 .nieobsz2 .nieoc2 .nieoch2 .nieocz2 .nieodź2 .nieod2 .nieod3ć2 .nieod3ł2 .nieod3ś2 .nieod3c2 .nieod3d2 .nieod3f2 .nieod3g2 .nieod3h2 .nieod3j2 .nieod3k2 .nieod3l2 .nieod3n2 .nieod3p2 .nieod3s2 .nieod3t2 .nieod3wr .nieod5ż2 .nieodch2 .nieodcz2 .nieoddź2 .nieoddż2 .nieoddz2 .nieodsz2 .nieodw2 .nieodz2 .nieof2 .nieog2 .nieoh2 .nieok2 .nieol2 .nieom2 .nieop2 .nieor2 .nieorz2 .nieos2 .nieosz2 .nieot2 .nieow2 .nieoz2 .niepo2d2 .niepo3ć2 .niepo3ł2 .niepo3ś2 .niepo3ź2 .niepo3ż2 .niepo3b2 .niepo3c2 .niepo3dź2 .niepo3d4łu .niepo3d4much .niepo3d4ręcz .niepo3d4raż .niepo3d4rap .niepo3d4repcz .niepo3d4rept .niepo3d4waj .niepo3d4woj .niepo3do .niepo3du .niepo3dz2 .niepo3f2 .niepo3g2 .niepo3h2 .niepo3k2 .niepo3l2 .niepo3m2 .niepo3p2 .niepo3r2 .niepo3s2 .niepo3t2 .niepo3w2 .niepo3z2 .niepo4d3o2choc .niepo4d3o2strz .niepoch2 .niepocz2 .niepod3ć2 .niepod3ł2 .niepod3ś2 .niepod3b2 .niepod3c2 .niepod3d2 .niepod3f2 .niepod3g2 .niepod3h2 .niepod3j2 .niepod3k2 .niepod3l2 .niepod3m2 .niepod3n2 .niepod3p2 .niepod3r2 .niepod3s2 .niepod3t2 .niepod3w2 .niepod5ż .niepodch2 .niepodcz2 .niepoddź2 .niepoddż2 .niepodsm2 .niepodsz2 .nieporz2 .nieposm2 .nieposz2 .nieprzełk2 .nieprze2d2 .nieprze3ć2 .nieprze3ł2 .nieprze3ś2 .nieprze3ź2 .nieprze3ż2 .nieprze3b2 .nieprze3brz2 .nieprze3c2 .nieprze3dź2 .nieprze3d4łuż .nieprze3d4much .nieprze3d4ramat .nieprze3d4ruk .nieprze3d4ryl .nieprze3d4rz2 .nieprze3d4um .nieprze3dy .nieprze3dz2 .nieprze3e2k2s3 .nieprze3f2 .nieprze3g2 .nieprze3h2 .nieprze3k2 .nieprze3l2 .nieprze3m2 .nieprze3n2 .nieprze3p2 .nieprze3r2 .nieprze3s2 .nieprze3t2 .nieprze3w2 .nieprze3z2 .nieprze4d5łużyc .nieprze4d5ż2 .nieprze4d5z2a .nieprze4d5zg2 .nieprze4d5zim .nieprze4d5zj .nieprze4d5zl .nieprze4d5zw2r .nieprze4d5zwoj .nieprzech2 .nieprzecz2 .nieprzed3ć2 .nieprzed3ł2 .nieprzed3ś2 .nieprzed3c2 .nieprzed3d2 .nieprzed3f2 .nieprzed3g2 .nieprzed3h2 .nieprzed3i2 .nieprzed3j2 .nieprzed3k2 .nieprzed3l2 .nieprzed3m2 .nieprzed3n2 .nieprzed3p2 .nieprzed3r2 .nieprzed3s2 .nieprzed3sz2 .nieprzed3t2 .nieprzed3u2 .nieprzed3w2 .nieprzedch2 .nieprzedcz2 .nieprzeddź2 .nieprzeddż2 .nieprzeddz2 .nieprzegrz2 .nieprzekl2 .nieprzekr2 .nieprzepch2 .nieprzerż2 .nieprzerz2 .nieprzesch2 .nieprzesm2 .nieprzesz2 .nieprzetk2 .nieprzetr2 .niero2z3 .niero3z4e .niero3z4u .nierozś2 .nierozbrz2 .nieroze3r2 .nierozm2 .nieroztr2 .nierz2 .niesu2b3 .niesu3b4ie .niesz2 .nietk2 .nietr2 .nieucz2 .nieuw2 .niewy3ć2 .niewy3ł2 .niewy3ś2 .niewy3ź2 .niewy3ż2 .niewy3b2 .niewy3c2 .niewy3d2 .niewy3f2 .niewy3g2 .niewy3h2 .niewy3k2 .niewy3l2 .niewy3m2 .niewy3p2 .niewy3r2 .niewy3s2 .niewy3t2 .niewy3w2 .niewy3z2 .niewybrz2 .niewych2 .niewycz2 .niewydź2 .niewydż2 .niewydz2 .niewyrz2 .niewysz2 .niewytk2 .niewytr2 .niezw2 .nj8 .nk8 .nl8 .nm8 .nn8 .np8 .nr8 .ns8 .nt8 .nv8 .nw8 .nx8 .nz8 .oć2 .oś2 .ośmio3ś2 .oź2 .oż2 .o2b2 .o2d2 .o2t3chł .o3b4łą .o3b4łę .o3b4łoc .o3b4luzg .o3b4rać .o3b4raso .o3b4roń .o3b4ron .o3b4ryź .o3b4ryz .o3b4rz2 .o3be .o3bi .o3d4iu .o3d4ręt .o3d4rap .o3d4robin .o3d4rut .o3d4rwi .o3d4rzeć .o3d4rzw .o3d6zia .o3d6zie .o3de .o3l2śn .o4b5łocz .o4b5rzą .o4b5rzęd .o4b5rzez .o4b5rzuc .o4b5rzut .o4b5rzyn .o4d7ziar .o4d7ziem .oa3z .ob3ć2 .ob3ł2 .ob3ś2 .ob3ź2 .ob3ż2 .ob3c2 .ob3d2 .ob3f2 .ob3g2 .ob3h2 .ob3j2 .ob3k2 .ob3l2 .ob3m2 .ob3n2 .ob3o2strz .ob3p2 .ob3r .ob3s2 .ob3t2 .ob3u2m2 .ob3w2 .obch2 .obcz2 .obdź2 .obdż2 .obdz2 .obe3ć2 .obe3ł2 .obe3ś2 .obe3ź2 .obe3ż2 .obe3b2 .obe3c2 .obe3d2 .obe3f2 .obe3g2 .obe3h2 .obe3k2 .obe3l2 .obe3m2 .obe3p2 .obe3r2 .obe3r3t .obe3s2 .obe3t2 .obe3w2 .obe3z2 .obe4c3n .obe4z3w .obech2 .obecz2 .obedź2 .obedż2 .obedz2 .oberż2 .ober3m .oberz2 .obesch2 .obesz2 .obetk2 .obi3b2 .obsz2 .oc2 .och2 .ochrz2 .ocz2 .odź2 .od3ć2 .od3ś2 .od3au .od3b2 .od3c2 .od3d2 .od3f2 .od3g2 .od3h2 .od3i2 .od3i2zo .od3j2 .od3k2 .od3l2 .od3m2 .od3n2 .od3o2s .od3p2 .od3r2 .od3s2 .od3t2 .od3u2cz .od3u2m2 .od3w2 .od5ż2 .od5z2 .odbe2z3 .odch2 .odcz2 .oddź2 .oddż2 .oddz2 .ode3ć2 .ode3ł2 .ode3ś2 .ode3ź2 .ode3ż2 .ode3b2 .ode3c2 .ode3d2 .ode3f2 .ode3g2 .ode3h2 .ode3k2 .ode3l2 .ode3m2 .ode3mk2 .ode3p2 .ode3r2 .ode3s2 .ode3t2 .ode3w2 .ode3z2 .odech2 .odecz2 .odedź2 .odedż2 .odedz2 .odepch2 .oderż2 .oderz2 .odesz2 .odetch2 .odetk2 .odkrz2 .odrz2 .odsz2 .of2 .ogólno3k2 .og2 .ognio3tr2 .oh2 .ok2 .oka3m2 .okr2 .ole2o3 .om2 .op2 .opch2 .or2ż2 .or2tę .or2z2 .os2 .osie2m3 .osiemse2t3 .osz2 .ot2 .ow2 .oz2 .pć8 .pł8 .płasko3w2 .pń8 .półk2 .półkr2 .półm2 .póło2 .półob3r .półom2d .półprzy3m2k .pó2ł3 .pó3ł4ą .pó3ł4ę .pó3ł4ecz .pó3ł4y .pś8 .pź8 .pż8 .p8 .pb8 .pc8 .pch8 .pd8 .pełno3kr2 .pe2r3 .pe3c2k .pe3r4e .pe3r4i .pe3r4o .pe3r4u .pe3r4y .pe4r5i2n .pee2se2l .pepee2r .pepee2s .peze2t1pee2r .pf8 .pg8 .ph8 .pięćse2t3 .pię2ć3 .pięcio3ś2 .pierwo3w2 .piono3w2 .pj8 .pk8 .pl8 .pm8 .pn8 .połk2 .po2d2 .po3ć2 .po3ł2 .po3ś2 .po3ź2 .po3ż2 .po3b2 .po3c2 .po3dą .po3dę .po3dź2 .po3d4łu .po3d4much .po3d4naw .po3d4ręcz .po3d4rętw .po3d4róż .po3d4r2wi .po3d4raż .po3d4rap .po3d4repcz .po3d4rept .po3d4roż .po3d4robó .po3d4roba .po3d4robo .po3d4roby .po3d4rocz .po3d4ruzg .po3d4ryg .po3d4rze .po3d4wójn .po3d4wór .po3d4waj .po3d4woi .po3d4woj .po3d4worz .po3da .po3de .po3dej .po3diu .po3do .po3du .po3dy .po3dz2 .po3e2k2s3 .po3f2 .po3g2 .po3h2 .po3k2 .po3l2 .po3m2 .po3p2 .po3rż .po3r2 .po3s2 .po3t2 .po3w2 .po3z2 .po4ń3c .po4cz3d .po4cz3t .po4d3ów .po4d3e4k2s3 .po4d3o2bóz .po4d3o2biad .po4d3o2bojcz .po4d3o2braz .po4d3o2choc .po4d3o2dm .po4d3o2f .po4d3o2g .po4d3o2kien .po4d3o2kn .po4d3o2kręg .po4d3o2kres .po4d3o2piecz .po4d3o2ryw .po4d3o2siniak .po4d3o2strz .po4d3obsz .po4d3odd .po4d3olbrz .po4d3u2cz .po4d3u2dz .po4d3u2pa .po4d3u2ral .po4d3u2sta .po4d3u2szcz .po4d5ręczn .po4d5zakr .po4d5zam .po4d5zast .po4d5zbi .po4d5ze .po4d5zielenią .po4d5zielenić .po4d5zielenię .po4d5zielenił .po4d5zielenic .po4d5zielenien .po4d5zielenil .po4d5zielenim .po4d5zielenio .po4d5zielenis .po4d5ziem .po4d5ziom .po4d5zw2r .po4l3s .po4m3p .po4r3c .po4r3f .po4r3n .po4r3t .po4st3d .po4st3f .po4st3g .po4st3h .po4st3i2 .po4st3k .po4st3l .po4st3m .po4st3p .po4st3rom .po4st3s .po5d4uszczyn .po5r4tę .pobr2 .pobrz2 .poch2 .pochrz2 .pocz2 .pod3ć2 .pod3ł2 .pod3ś2 .pod3śró2d5 .pod3alp .pod3b2 .pod3c2 .pod3d2 .pod3f2 .pod3g2 .pod3h2 .pod3i2n .pod3j2 .pod3k2 .pod3l2 .pod3m2 .pod3n2 .pod3p2 .pod3r2 .pod3s2 .pod3t2 .pod3w2 .pod5ż2 .podch2 .podcz2 .poddź2 .poddż2 .pode3ć2 .pode3ł2 .pode3ś2 .pode3ź2 .pode3ż2 .pode3b2 .pode3c2 .pode3d2 .pode3f2 .pode3g2 .pode3h2 .pode3k2 .pode3l2 .pode3m2 .pode3p2 .pode3r2 .pode3s2 .pode3t2 .pode3tk2 .pode3w2 .pode3z2 .podech2 .podecz2 .podedź2 .podedż2 .podedz2 .podepch2 .poderż2 .poderz2 .podesch2 .podesz2 .podro2z3 .podsm2 .podsz2 .pogrz2 .pokl2 .pokr2 .pom4pk .pomk2 .pona2d2 .pona3ć2 .pona3ł2 .pona3ś2 .pona3ź2 .pona3ż2 .pona3b2 .pona3c2 .pona3cz2 .pona3dź2 .pona3do .pona3f2 .pona3g2 .pona3h2 .pona3k2 .pona3l2 .pona3m2 .pona3p2 .pona3r2 .pona3s2 .pona3t2 .pona3w2 .pona3z2 .pona4f3t .ponabrz2 .ponach2 .ponad3ć2 .ponad3ś2 .ponad3c2 .ponad3ch2 .ponad3cz2 .ponad3dź2 .ponad3f2 .ponad3g2 .ponad3h2 .ponad3j2 .ponad3k2 .ponad3l2 .ponad3p2 .ponad3s2 .ponad3t2 .ponadz2 .ponarz2 .ponasm2 .ponasz2 .ponaz3m2 .ponazw2 .ponie3k2 .ponie3w2 .popch2 .popo3w2 .poprz2 .por4t1w .por4tf .por4tm .poro2z3 .poro3z4u .porz2 .posch2 .posm2 .posz2 .potk2 .potr2 .poz4m2 .poza3u2 .pozw2 .pp8 .pr8 .pra3s2 .pra3w2nu .pra3w2z .prapra3w2nu .predy2s3po .prz8 .przełk2 .prze2d2 .prze3ć2 .prze3ł2 .prze3ś2 .prze3ź2 .prze3ż2 .prze3b2 .prze3c2 .prze3dą .prze3dę .prze3dź2 .prze3d4łuż .prze3d4much .prze3d4o3br .prze3d4o3st .prze3d4o3zo .prze3d4ramat .prze3d4ruk .prze3d4ryl .prze3d4rz2 .prze3d4um .prze3dy .prze3dz2 .prze3e2k2s3 .prze3f2 .prze3g2 .prze3h2 .prze3k2 .prze3l2 .prze3m2 .prze3n2 .prze3p2 .prze3r2 .prze3s2 .prze3t2 .prze3u2 .prze3w2 .prze3z2 .prze4d5łużyc .prze4d5ż2 .prze4d5o4stat .prze4d5za .prze4d5zg2 .prze4d5zim .prze4d5zj .prze4d5zl .prze4d5zw2r .prze4d5zwoj .przebr2 .przebrz2 .przech2 .przechrz2 .przeci2w3 .przeci3w4ie .przeciwa2 .przeciww2 .przecz2 .przed3ć2 .przed3ł2 .przed3ś2 .przed3a2gon .przed3a2kc .przed3alp .przed3b2 .przed3c2 .przed3d2 .przed3e2gz .przed3e2mer .przed3f2 .przed3g2 .przed3h2 .przed3i2 .przed3j2 .przed3k2 .przed3l2 .przed3m2 .przed3n2 .przed3o2 .przed3p2 .przed3r2 .przed3s2 .przed3się3w2 .przed3sz2 .przed3t2 .przed3u2 .przed3w2 .przedch2 .przedcz2 .przeddź2 .przeddż2 .przeddz2 .przedgrz2 .przedy2s3ku .przegrz2 .przekl2 .przekr2 .przemk2 .przepch2 .przerż2 .przerz2 .przesch2 .przesm2 .przesz2 .przetk2 .przetr2 .przetran2s3 .przy3ć2 .przy3ł2 .przy3ś2 .przy3ź2 .przy3ż2 .przy3b2 .przy3c2 .przy3d2 .przy3f2 .przy3g2 .przy3h2 .przy3k2 .przy3l2 .przy3m2 .przy3p2 .przy3r2 .przy3s2 .przy3t2 .przy3w2 .przy3z2 .przybr2 .przych2 .przycz2 .przydź2 .przydż2 .przydz2 .przygrz2 .przymk2 .przyoz2 .przypch2 .przyrż2 .przyrz2 .przysch2 .przysz2 .przytk2 .ps8 .pt8 .pv8 .pw8 .px8 .pz8 .rć8 .rł8 .rń8 .rś8 .rź8 .rż8 .r8 .rb8 .rc8 .rd8 .retran2s3 .rf8 .rg8 .rh8 .rj8 .rk8 .rl8 .rm8 .rn8 .ro2z3 .ro3z4a .ro3z4e .ro3z4e3ć2 .ro3z4e3ł2 .ro3z4e3ś2 .ro3z4e3ź2 .ro3z4e3ż2 .ro3z4e3b2 .ro3z4e3c2 .ro3z4e3d2 .ro3z4e3f2 .ro3z4e3g2 .ro3z4e3h2 .ro3z4e3k2 .ro3z4e3l2 .ro3z4e3m2 .ro3z4e3p2 .ro3z4e3r2 .ro3z4e3s2 .ro3z4e3t2 .ro3z4e3w2 .ro3z4e3z2 .ro3z4ej .ro3z4u .ro4z5a2gi .ro4z5a2nie .ro4z5e2mo .ro4z5e4g3z .ro4z5e4n3t .rozś2 .rozbrz2 .rozd2 .rozech2 .rozecz2 .rozedź2 .rozedż2 .rozedz2 .rozepch2 .rozerż2 .rozerz2 .rozesch2 .rozesz2 .rozi2 .rozm2 .rozo2 .rozpo3w2 .rozt2 .roztr2 .rozw2 .rp8 .rr8 .rs8 .rt8 .rv8 .rw8 .rx8 .rz8 .sć8 .sł8 .sń8 .sś8 .sź8 .sż8 .s8 .samo3ch2 .samo3k2 .samo3p2 .samo3w2 .samoro2z3 .sb8 .sc8 .sch8 .sd8 .sf8 .sg8 .sh8 .siede2m3 .siedemse2t3 .siedmio3ś2 .sj8 .ską2d5że .sk8 .skl8 .skr8 .sl8 .sm8 .sn8 .sobo3w2 .spó2ł3 .sp8 .spo2d2 .spo3ć2 .spo3ł2 .spo3ś2 .spo3ź2 .spo3ż2 .spo3b2 .spo3c2 .spo3dz2 .spo3f2 .spo3g2 .spo3h2 .spo3k2 .spo3l2 .spo3m2 .spo3p2 .spo3r2 .spo3s2 .spo3t2 .spo3w2 .spo3z2 .spo4r3n .spo4r3t .spoch2 .spocz2 .spodź2 .spodż2 .spod3d .sporz2 .sposz2 .sr8 .ss8 .st8 .stere2o3 .stereoa2 .stereoe2 .stereoi2 .stereoo2 .stereou2 .su2b3 .su3b4ie .su3b4otn .supe2r3 .supe3r4at .supe3r4io .supe4r5a2tr .super5z2b .supere2 .supero2d1rzut .sv8 .sw8 .sx8 .sz8 .sześćse2t3 .sześcio3ś2 .sze2ś2ć3 .sze2s3 .tć8 .tł8 .tń8 .tś8 .tź8 .tż8 .t8 .ta2o3 .ta2r7zan .tb8 .tc8 .tch8 .td8 .te2o3 .tf8 .tg8 .th8 .tj8 .tk8 .tl8 .tm8 .tn8 .toa3 .tp8 .tró2j3 .tró3j4ą .tró3j4ę .tró3j4ecz .tr8 .tran2s3 .tran3s4e .tran3s4ie .tran3s4y .tran3sz .tran4s5eu .transa2 .transo2 .trz8 .trze2ch3 .trzechse2t3 .ts8 .tt8 .tv8 .tw8 .tx8 .tysią2c3 .tysią3c4a .tysią3c4e .tysią3cz .tysią4c5zł .tz8 .uć2 .uś2 .u3ł2 .u3ź2 .u3ż2 .u3b2 .u3c2 .u3d2 .u3f2 .u3g2 .u3h2 .u3k2 .u3l2 .u3m2 .u3n2 .u3p2 .u3r2 .u3s2 .u3t2 .u3w2 .u3z2 .u4d3k .u4f3n .u4k3lej .u4l3s .u4l3t .u4m3br .u4n3c .u4n3d .u4p3p2s .u4r3s .u4st3n .u4stc .u4stk .u4z3be .ube2z3 .ubezw2 .ubr2 .uch2 .ucz2 .udź2 .udż2 .udz2 .ukr2 .umk2 .upch2 .upo2d2 .upo3ć2 .upo3ł2 .upo3ś2 .upo3ź2 .upo3ż2 .upo3b2 .upo3c2 .upo3da .upo3f2 .upo3g2 .upo3h2 .upo3k2 .upo3l2 .upo3m2 .upo3p2 .upo3r2 .upo3s2 .upo3t2 .upo3w2 .upo3z2 .upoch2 .upocz2 .upodź2 .upodż2 .upod3d .uporz2 .uposz2 .urż2 .uro2z3 .urz2 .usch2 .usz2 .utk2 .utr2 .uze3w2 .vć8 .vł8 .vń8 .vś8 .vź8 .vż8 .v8 .vb8 .vc8 .vd8 .vf8 .vg8 .vh8 .vj8 .vk8 .vl8 .vm8 .vn8 .vp8 .vr8 .vs8 .vt8 .vv8 .vw8 .vx8 .vz8 .wć8 .wł8 .wń8 .wś8 .wź8 .wż8 .w8 .wb8 .wc8 .wd8 .we3ć2 .we3ł2 .we3ś2 .we3ż2 .we3b2 .we3c2 .we3d2 .we3f2 .we3g2 .we3h2 .we3k2 .we3l2 .we3m2 .we3n2 .we3p2 .we3r2 .we3s2 .we3t2 .we3w2 .we3z2 .we4ł3n .we4k3t .we4l3w .we4n3d .we4n3t .we4r3b .we4r3d .we4r3n .we4r3s .we4r3t .we4s3prz .we4s3tch2 .we4z3br .we4z3gł .wech2 .wecz2 .wedź2 .wedż2 .wedz2 .wemk2 .wepch2 .werz2 .wesz2 .wetk2 .wewną2trz3 .wf8 .wg8 .wh8 .wielo3ś2 .wielo3d2 .wielo3k2 .wieluse2t3 .wilczo3m2 .wj8 .wk8 .wl8 .wm8 .wn8 .wniebo3w2 .wodo3w2 .wp8 .wr8 .ws8 .współi2 .współo2b3w .współu2 .współw2 .wspó2ł3 .wsze2ch3 .wszecho2 .wszechw2 .wt8 .wv8 .ww8 .wx8 .wy3ć2 .wy3ł2 .wy3ś2 .wy3ź2 .wy3ż2 .wy3b2 .wy3c2 .wy3d2 .wy3f2 .wy3g2 .wy3h2 .wy3k2 .wy3l2 .wy3m2 .wy3o2d3r .wy3p2 .wy3r2 .wy3s2 .wy3t2 .wy3w2 .wy3z2 .wy4ż3sz .wy4cz3ha .wybr2 .wybrz2 .wych2 .wycz2 .wydź2 .wydż2 .wydr2 .wydz2 .wye2k2s3 .wygrz2 .wyi2zo .wykl2 .wykr2 .wykrz2 .wymk2 .wypch2 .wyprz2 .wyrż2 .wyrz2 .wysch2 .wysm2 .wysz2 .wytch2 .wytk2 .wytr2 .wz8 .xć8 .xł8 .xń8 .xś8 .xź8 .xż8 .x8 .xb8 .xc8 .xd8 .xf8 .xg8 .xh8 .xj8 .xk8 .xl8 .xm8 .xn8 .xp8 .xr8 .xs8 .xt8 .xv8 .xw8 .xx8 .xz8 .zć8 .zł8 .zło3w2 .zń8 .zś8 .zź8 .zż8 .z8 .za3ć2 .za3ł2 .za3ś2 .za3ź2 .za3ż2 .za3b2 .za3c2 .za3d2 .za3f2 .za3g2 .za3h2 .za3k2 .za3l2 .za3m2 .za3o2b3r .za3o2b3s .za3p2 .za3r2 .za3s2 .za3t2 .za3u2 .za3w2 .za3z2 .za4k3t .za4l3g .za4l3k .za4l3t .za4m3k .za4r3ch .za4uto .za5m4k2n .zabr2 .zabrz2 .zach2 .zacz2 .zadź2 .zadż2 .zadośću4 .zado2ść3 .zadr2 .zady2s3po .zadz2 .zagrz2 .zai2n3 .zai2zo .zain4ic .zakl2 .zakr2 .zakrz2 .zanie3d2 .zarż2 .zarz2 .zasch2 .zasm2 .zasz2 .zatk2 .zatr2 .zb8 .zc8 .zd8 .zde2z3 .zde3z4awu .zde3z4el .zde3z4er .zde3z4y .zdy2s3kont .zdy2s3kred .zdy2s3kwal .ze3ć2 .ze3ł2 .ze3ś2 .ze3ź2 .ze3ż2 .ze3b2 .ze3c2 .ze3d2 .ze3f2 .ze3g2 .ze3h2 .ze3k2 .ze3l2 .ze3m2 .ze3p2 .ze3r2 .ze3s2 .ze3t2 .ze3tk2 .ze3w2 .ze3z2 .ze4r3k .ze4t3e2m1e2s .ze4t3e2s1e2l .ze4t3emp .ze4t3hap .zech2 .zecz2 .zedź2 .zedż2 .zedz2 .zekl2 .zepch2 .zerż2 .zerz2 .zesch2 .zesm4 .zesz2 .zf8 .zg8 .zh8 .zimno3kr2 .zj8 .zk8 .zl8 .zm8 .zmartwy2ch3 .zmartwychw2 .zn8 .znie3ć2 .znie3ł2 .znie3ń2 .znie3ś2 .znie3ź2 .znie3ż2 .znie3b2 .znie3c2 .znie3d2 .znie3f2 .znie3g2 .znie3h2 .znie3k2 .znie3l2 .znie3m2 .znie3n2 .znie3p2 .znie3r2 .znie3s2 .znie3t2 .znie3w2 .znie3z2 .znie4dź3 .znie4m3c .zniech2 .zniecz2 .zniedż2 .zniedz2 .znierz2 .zniesz2 .zo2o3 .zp8 .zr8 .zro2z3 .zro3z4u .zs8 .zt8 .zv8 .zw8 .zx8 .zz8 ą1 ę1 ó1 ó4w3cz ś1c ź2dź 1ś2ci 2ć1ń 2ć1ś 2ć1ź 2ć1ż 2ć1b 2ć1c 2ć1d 2ć1f 2ć1g 2ć1k 2ć1m 2ć1n 2ć1p 2ć1s 2ć1t 2ć1z 2ł1ć 2ł1ń 2ł1ś 2ł1ź 2ł1ż 2ł1b 2ł1c 2ł1d 2ł1f 2ł1g 2ł1h 2ł1j 2ł1k 2ł1l 2ł1m 2ł1n 2ł1p 2ł1r 2ł1s 2ł1t 2ł1w 2ł1z 2ń1ć 2ń1ł 2ń1ń 2ń1ś 2ń1ź 2ń1ż 2ń1b 2ń1c 2ń1d 2ń1f 2ń1g 2ń1h 2ń1j 2ń1k 2ń1l 2ń1m 2ń1n 2ń1p 2ń1r 2ń1s 2ń1t 2ń1w 2ń1z 2śćc 2ś1ś 2ś1ź 2ś1ż 2ś1b 2ś1d 2ś1f 2ś1g 2ś1k 2ś1p 2ś1s 2ś1t 2ś1z 2ślm 2śln 2ź1ć 2ź1ś 2ź1ż 2ź1b 2ź1c 2ź1d 2ź1f 2ź1g 2ź1k 2ź1l 2ź1m 2ź1n 2ź1p 2ź1s 2ź1t 2ź1w 2ź1z 2ż1ć 2ż1ł 2ż1ń 2ż1ś 2ż1ź 2ż1b 2ż1c 2ż1d 2ż1f 2ż1g 2ż1j 2ż1k 2ż1l 2ż1m 2ż1n 2ż1p 2ż1r 2ż1s 2ż1t 2ż1w 2ż1z 2błk 2b1ć 2b1ń 2b1ś 2b1ź 2b1ż 2b1c 2b1d 2b1f 2b1g 2b1k 2b1m 2b1n 2b1p 2b1s 2b1t 2b1z 2brn 2c1ć 2c1ń 2c1ś 2c1ź 2c1ż 2c1b 2c1d 2c1f 2c1g 2c1k 2c1l 2c1m 2c1n 2c1p 2c1s 2c1t 2ch1ć 2ch1ń 2ch1ś 2ch1ź 2ch1ż 2ch1b 2ch1c 2ch1d 2ch1f 2ch1g 2ch1k 2ch1m 2ch1n 2ch1p 2ch1s 2ch1t 2ch1z 2cz1ć 2cz1ń 2cz1ś 2cz1ź 2cz1ż 2cz1b 2cz1c 2cz1d 2cz1f 2cz1g 2cz1k 2cz1l 2cz1m 2cz1n 2cz1p 2cz1s 2cz1t 2cz1z 2dłb 2dłsz 2dź1ć 2dź1ń 2dź1ś 2dź1ź 2dź1ż 2dź1b 2dź1c 2dź1d 2dź1f 2dź1g 2dź1k 2dź1m 2dź1n 2dź1p 2dź1s 2dź1t 2dź1z 2dż1ć 2dż1ń 2dż1ś 2dż1ź 2dż1ż 2dż1b 2dż1c 2dż1d 2dż1f 2dż1g 2dż1k 2dż1m 2dż1n 2dż1p 2dż1s 2dż1t 2dż1z 2d1ć 2d1ń 2d1ś 2d1b 2d1c 2d1f 2d1g 2d1k 2d1m 2d1n 2d1p 2d1s 2d1t 2drn 2dz1ć 2dz1ń 2dz1ś 2dz1ź 2dz1ż 2dz1b 2dz1c 2dz1d 2dz1f 2dz1g 2dz1k 2dz1l 2dz1m 2dz1n 2dz1p 2dz1s 2dz1t 2dz1z 2f1c 2f1k 2f1m 2f1n 2głb 2g1ć 2g1ń 2g1ś 2g1ź 2g1ż 2g1b 2g1c 2g1d 2g1f 2g1k 2g1m 2g1p 2g1s 2g1t 2g1z 2h1ć 2h1ł 2h1ń 2h1ś 2h1ź 2h1ż 2h1b 2h1c 2h1d 2h1f 2h1g 2h1j 2h1k 2h1l 2h1m 2h1n 2h1p 2h1r 2h1s 2h1t 2h1w 2h1z 2j1ć 2j1ł 2j1ń 2j1ś 2j1ź 2j1ż 2j1b 2j1c 2j1d 2j1f 2j1g 2j1h 2j1k 2j1l 2j1m 2j1n 2j1p 2j1r 2j1s 2j1t 2j1w 2j1z 2kłb 2k1ć 2k1ń 2k1ś 2k1ź 2k1ż 2k1b 2k1c 2k1d 2k1f 2k1g 2k1m 2k1n 2k1p 2k1s 2k1sz 2k1t 2k1z 2l1ć 2l1ł 2l1ń 2l1ś 2l1ź 2l1ż 2l1b 2l1c 2l1d 2l1f 2l1g 2l1h 2l1j 2l1k 2l1m 2l1n 2l1p 2l1r 2l1s 2l1t 2l1w 2l1z 2m1ć 2m1ł 2m1ń 2m1ś 2m1ź 2m1ż 2m1b 2m1c 2m1d 2m1f 2m1g 2m1h 2m1j 2m1k 2m1l 2m1n 2m1p 2m1r 2m1s 2m1t 2m1w 2m1z 2n1ć 2n1ł 2n1ń 2n1ś 2n1ź 2n1ż 2n1b 2n1c 2n1d 2n1f 2n1g 2n1h 2n1j 2n1k 2n1l 2n1m 2n1p 2n1r 2n1s 2n1t 2n1w 2n1z 2ntn 2p1ć 2p1ń 2p1ś 2p1ź 2p1ż 2p1b 2p1c 2p1d 2p1f 2p1g 2p1k 2p1m 2p1n 2p1s 2p1sz 2p1t 2p1z 2pln 2r1ć 2r1ł 2r1ń 2r1ś 2r1ź 2r1ż 2r1b 2r1c 2r1d 2r1f 2r1g 2r1h 2r1j 2r1k 2r1l 2r1m 2r1n 2r1p 2r1s 2r1t 2r1w 2rz1ć 2rz1ł 2rz1ń 2rz1ś 2rz1ź 2rz1ż 2rz1b 2rz1c 2rz1d 2rz1f 2rz1g 2rz1h 2rz1j 2rz1k 2rz1l 2rz1m 2rz1n 2rz1p 2rz1r 2rz1s 2rz1t 2rz1w 2słb 2s1ź 2s1ż 2s1b 2s1d 2s1f 2s1g 2s1s 2snk 2stk 2stn 2stsz 2sz1ć 2sz1ś 2sz1c 2sz1f 2sz1k 2sz1l 2sz1m 2sz1n 2sz1p 2sz1s 2sz1t 2sz1w 2sz1z 2szln 2t1ć 2t1ń 2t1ś 2t1ź 2t1ż 2t1b 2t1c 2t1d 2t1f 2t1g 2t1k 2t1m 2t1n 2t1p 2t1s 2t1z 2tln 2trk 2trzn 2w1ć 2w1ł 2w1ń 2w1ś 2w1ź 2w1ż 2w1b 2w1c 2w1d 2w1f 2w1g 2w1j 2w1k 2w1l 2w1m 2w1n 2w1p 2w1r 2w1s 2w1t 2w1z 2z1ć 2z1ś 2z1c 2z1d 2z1f 2z1k 2z1p 2z1s 2z1t 2zdk 2zdn 3d2niow 3k2sz2t 3m2k2n 3m2nest 3m2nezj 3m2sk2n 3p2neu 3w2ład 3w2łos 3w2czas 4ć3ć 4ł3ł 4ź3ź 4ż3ż 4b3b 4c3c 4d3d 4f3f 4g3g 4h3h 4j3j 4k3k 4l3l 4m3m 4n3n 4p3p 4r3r 4t3t 4w3w 4z3z 8ć. 8ćć. 8ćł. 8ćń. 8ćś. 8ćź. 8ćż. 8ćb. 8ćc. 8ćd. 8ćf. 8ćg. 8ćh. 8ćj. 8ćk. 8ćl. 8ćm. 8ćn. 8ćp. 8ćr. 8ćs. 8ćt. 8ćv. 8ćw. 8ćx. 8ćz. 8ł. 8łć. 8łł. 8łń. 8łś. 8łź. 8łż. 8łb. 8łc. 8łd. 8łf. 8łg. 8łh. 8łj. 8łk. 8łl. 8łm. 8łn. 8łp. 8łr. 8łs. 8łt. 8łv. 8łw. 8łx. 8łz. 8ń. 8ńć. 8ńł. 8ńń. 8ńś. 8ńź. 8ńż. 8ńb. 8ńc. 8ńd. 8ńf. 8ńg. 8ńh. 8ńj. 8ńk. 8ńl. 8ńm. 8ńn. 8ńp. 8ńr. 8ńs. 8ńt. 8ńv. 8ńw. 8ńx. 8ńz. 8ś. 8ść. 8śł. 8śń. 8śś. 8śź. 8śż. 8śb. 8śc. 8śd. 8śf. 8śg. 8śh. 8śj. 8śk. 8śl. 8śm. 8śn. 8śp. 8śr. 8śs. 8śt. 8śv. 8św. 8śx. 8śz. 8ź. 8źć. 8źł. 8źń. 8źś. 8źź. 8źż. 8źb. 8źc. 8źd. 8źf. 8źg. 8źh. 8źj. 8źk. 8źl. 8źm. 8źn. 8źp. 8źr. 8źs. 8źt. 8źv. 8źw. 8źx. 8źz. 8ż. 8żć. 8żł. 8żń. 8żś. 8żź. 8żż. 8żb. 8żc. 8żd. 8żf. 8żg. 8żh. 8żj. 8żk. 8żl. 8żm. 8żn. 8żp. 8żr. 8żs. 8żt. 8żv. 8żw. 8żx. 8żz. 8b. 8bć. 8bł. 8bń. 8bś. 8bź. 8bż. 8bb. 8bc. 8bd. 8bf. 8bg. 8bh. 8bj. 8bk. 8bl. 8bm. 8bn. 8bp. 8br. 8brz. 8bs. 8bt. 8bv. 8bw. 8bx. 8bz. 8c. 8cć. 8cł. 8cń. 8cś. 8cź. 8cż. 8cb. 8cc. 8cd. 8cf. 8cg. 8ch. 8chł. 8chrz. 8chw. 8cj. 8ck. 8cl. 8cm. 8cn. 8cp. 8cr. 8cs. 8ct. 8cv. 8cw. 8cx. 8cz. 8czt. 8d. 8dć. 8dł. 8dń. 8dś. 8dź. 8dż. 8db. 8dc. 8dd. 8df. 8dg. 8dh. 8dj. 8dk. 8dl. 8dm. 8dn. 8dp. 8dr. 8drz. 8ds. 8dt. 8dv. 8dw. 8dx. 8dz. 8f. 8fć. 8fł. 8fń. 8fś. 8fź. 8fż. 8fb. 8fc. 8fd. 8ff. 8fg. 8fh. 8fj. 8fk. 8fl. 8fm. 8fn. 8fp. 8fr. 8fs. 8ft. 8fv. 8fw. 8fx. 8fz. 8g. 8gć. 8gł. 8gń. 8gś. 8gź. 8gż. 8gb. 8gc. 8gd. 8gf. 8gg. 8gh. 8gj. 8gk. 8gl. 8gm. 8gn. 8gp. 8gr. 8gs. 8gt. 8gv. 8gw. 8gx. 8gz. 8h. 8hć. 8hł. 8hń. 8hś. 8hź. 8hż. 8hb. 8hc. 8hd. 8hf. 8hg. 8hh. 8hj. 8hk. 8hl. 8hm. 8hn. 8hp. 8hr. 8hs. 8ht. 8hv. 8hw. 8hx. 8hz. 8j. 8jć. 8jł. 8jń. 8jś. 8jź. 8jż. 8jb. 8jc. 8jd. 8jf. 8jg. 8jh. 8jj. 8jk. 8jl. 8jm. 8jn. 8jp. 8jr. 8js. 8jt. 8jv. 8jw. 8jx. 8jz. 8k. 8kć. 8kł. 8kń. 8kś. 8kź. 8kż. 8kb. 8kc. 8kd. 8kf. 8kg. 8kh. 8kj. 8kk. 8kl. 8km. 8kn. 8kp. 8kr. 8ks. 8kst. 8kt. 8kv. 8kw. 8kx. 8kz. 8l. 8lć. 8lł. 8lń. 8lś. 8lź. 8lż. 8lb. 8lc. 8ld. 8lf. 8lg. 8lh. 8lj. 8lk. 8ll. 8lm. 8ln. 8lp. 8lr. 8ls. 8lt. 8lv. 8lw. 8lx. 8lz. 8m. 8mć. 8mł. 8mń. 8mś. 8mź. 8mż. 8mb. 8mc. 8md. 8mf. 8mg. 8mh. 8mj. 8mk. 8ml. 8mm. 8mn. 8mp. 8mr. 8ms. 8mst. 8mt. 8mv. 8mw. 8mx. 8mz. 8n. 8nć. 8nł. 8nń. 8nś. 8nź. 8nż. 8nb. 8nc. 8nd. 8nf. 8ng. 8nh. 8nj. 8nk. 8nl. 8nm. 8nn. 8np. 8nr. 8ns. 8nt. 8nv. 8nw. 8nx. 8nz. 8p. 8pć. 8pł. 8pń. 8pś. 8pź. 8pż. 8pb. 8pc. 8pd. 8pf. 8pg. 8ph. 8pj. 8pk. 8pl. 8pm. 8pn. 8pp. 8pr. 8prz. 8ps. 8pt. 8pv. 8pw. 8px. 8pz. 8r. 8rć. 8rł. 8rń. 8rś. 8rź. 8rż. 8rb. 8rc. 8rd. 8rf. 8rg. 8rh. 8rj. 8rk. 8rl. 8rm. 8rn. 8rp. 8rr. 8rs. 8rsz. 8rt. 8rv. 8rw. 8rx. 8rz. 8rzł. 8s. 8sć. 8sł. 8sń. 8sś. 8sź. 8sż. 8sb. 8sc. 8sch. 8sd. 8sf. 8sg. 8sh. 8sj. 8sk. 8skrz. 8sl. 8sm. 8sn. 8sp. 8sr. 8ss. 8st. 8str. 8strz. 8stw. 8sv. 8sw. 8sx. 8sz. 8szcz. 8szczb. 8szk. 8szn. 8szt. 8sztr. 8t. 8tć. 8tł. 8tń. 8tś. 8tź. 8tż. 8tb. 8tc. 8td. 8tf. 8tg. 8th. 8tj. 8tk. 8tl. 8tm. 8tn. 8tp. 8tr. 8trz. 8ts. 8tt. 8tv. 8tw. 8tx. 8tz. 8v. 8vć. 8vł. 8vń. 8vś. 8vź. 8vż. 8vb. 8vc. 8vd. 8vf. 8vg. 8vh. 8vj. 8vk. 8vl. 8vm. 8vn. 8vp. 8vr. 8vs. 8vt. 8vv. 8vw. 8vx. 8vz. 8w. 8wć. 8wł. 8wń. 8wś. 8wź. 8wż. 8wb. 8wc. 8wd. 8wf. 8wg. 8wh. 8wj. 8wk. 8wl. 8wm. 8wn. 8wp. 8wr. 8ws. 8wt. 8wv. 8ww. 8wx. 8wz. 8x. 8xć. 8xł. 8xń. 8xś. 8xź. 8xż. 8xb. 8xc. 8xd. 8xf. 8xg. 8xh. 8xj. 8xk. 8xl. 8xm. 8xn. 8xp. 8xr. 8xs. 8xt. 8xv. 8xw. 8xx. 8xz. 8z. 8zć. 8zł. 8zń. 8zś. 8zź. 8zż. 8zb. 8zc. 8zd. 8zdr. 8zdrz. 8zf. 8zg. 8zh. 8zj. 8zk. 8zl. 8zm. 8zn. 8zp. 8zr. 8zs. 8zt. 8zv. 8zw. 8zx. 8zz. a1 a2u a2y aa2 ae2 ai2 ao2 be2eth be2f3sz2 be2k1hend bi2n3o2ku bi2sz3kop bi2z3ne2s3m bi2z3nes birmin2g1ham blo2k1hauz bo2s3ma br2d bro2a2d3way bu2sz3me buk2sz3pan busine2ss3m busines2s c4h c4z cal2d1well ch2ł ch2j ch2l ch2r ch2w chus1t cu2r7zon dż2ł dż2j dż2l dż2r dż2w dże4z3b dże4z3m d4ź d4ż d4z deut4sch3land drz2w du2sz3past e1 e2r5zac e2u e2y e3u2sz ea2 ee2 ei2 eo2 fi2s3harm fi2sz3bin fo2k2s3t fo2r5zac fol2k1lor fos2f1a2zot ga3d2get gado3p2ta gol2f3s golfsz2 gran2d1ilo gro4t3r hi2sz3p hu2cz1w hu2x3ley i1 i2ą i2ę i2ó i2a i2e i2i i2o i2u i2y in4nsbruck in4sbruc j2t1ł j2t1r ja4z4z3b ja4z4z3m karl2s1kron karl2s1ruhe kir2chhoff kongre2s3m led1w lu2ft3waffe lu2ks1fer ly2o ma2r5zł ma2r5zl ma2r5zn mi2sz1masz mie2r5zł mie2r5zi mon2t3real moza2i3k mu2r7zasich3l na4ł3kows na4r3v o1 o2y oa2 och3mistrz oe2 of2f3set oi2 oo2 ou2 pa2n3a2mer pa2s3cal pa2s3ch połu3d2ni po3d4nieprz po3m2ną po3m2nę po3m2ni po4rt2s3mo2uth po4rt3land poli3e2t poli3u2re powsze3d2ni pr2chal pre2sz3pa r4z ro2e3nt2gen ro2k3rocz ro2s3to3c2k s4z se2t3le sko2r5zoner sm2r sowi3z2 sy2n3opt sy2s1tem sza2sz1ły sze2z1long sze4ść szto2k1holm szyn2k1was to3y2o3t turboo2d3rzut tygo3d2ni u1 u2y ua2 ue2 ui2 uo2 uu2 vo2lk2s3 we2e2k1end we4st3f we4st3m y1 ya2 ye2 yi2 yo2 yu2 ze4p3p}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cy.rme0000644000175000017500000000201211761001300024636 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Welsh hyphenation patterns (more info about the licence to be added later) %% hyph-cy.tex, Welsh hyphenation patterns %% Copyright 1996 Yannis Haralambous %% % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.0 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work (patterns) is Yannis Haralambous. % % This work consists of the file hyph-cy.tex and is part of hyph-utf8 % maintained by tex-hyphen team which also contains derived files. % % For more unformation see % % http://tug.org/tex-hyphen % % CHANGES: % - 1996 - last change to patterns % - 2008 - inclusion into hyph-utf8 and file rename (cyhyph.tex -> hyph-cy.tex) % - June 2011 - added LPPL licence context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sr.lua0000644000175000017500000010260212161703335024667 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="абвгдезиклмнопрстуцшјњћ", ["data"]="на-дно на-тка на-тка-ти на-тка-ше о-дно о-тка о-тка-ти о-тка-ше по-дно по-дне по-тку по-тки по-тке по-тка у-дно и-где и-гдје сву-где све-где сву-гдје све-гдје по-не-где по-не-гдје и-зби и-збе и-зба и-зби-ци и-зби-це и-зби-ца и-звит и-зим изо-ба-ру изо-ба-ри изо-ба-ре изо-ба-ра и-скок и-ско-ку и-ско-ка и-скон и-ско-ну и-ско-ни и-ско-на и-скру и-скре и-скри и-скра и-скрав и-спод и-спо-да и-стру и-стри и-стро и-стре и-стра на-ју на-ји на-јо на-је на-ја на-јам на-јест о-браз о-брет о-дви-ка о-дран о-дра-ти пре-двој ра-зму ра-зми ра-змо ра-зме ра-зма ра-зну ра-зни ра-зно ра-зне ра-зна ра-склоп ра-спе-лу ра-спе-ло ра-спе-ла ра-спе-ћа ра-спе-ћу ра-спе-ће ра-сту ра-сти ра-сте ра-ста ра-стом ра-стер ра-шћу ра-шћи ра-шћо ра-шће ра-шћа у-зно у-зна у-зни у-зник у-зрок у-ску у-ски у-ско у-ске у-ска ус-кос у-спио у-спео у-спор у-шћу у-шће у-шћа ин-те-рес тран-су тран-са тран-сом те-ле-ви-зор те-ле-ви-зо-ру те-ле-ви-зо-ром те-ле-ви-зо-ра те-ле-ви-зо-ри при-ти-сак при-ти-с-ком при-ти-с-ку при-ти-с-ка по-ја-ви-ће на-пу-шта про-гра-ми-ра-ње сни-ма-ња сни-ма-ње", ["length"]=1800, ["n"]=130, }, ["metadata"]={ ["mnemonic"]="sr", ["source"]="hyph-sr-cyrl", ["texcomment"]="% Serbian hyphenation patterns in Cyrillic script\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: srhyphc.tex (2003-06-09)\ % Author: Aleksandar Jelenak , Dejan Muhamedagić\ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % This is `srhyphc.tex' file. It contains hyphenation patterns for Serbian\ % language in the Cyrillic alphabet. TeX font encoding is T2A.\ %\ % This file is distributed under the terms of the GNU General Public License.\ % Latest version of the license is at .\ %\ % Version: 1.0a\ % Last change: 2003-06-09\ %\ % Credits:\ % - Initial hyphenation patterns for T1 font encoding by Dejan Muhamedagić\ % - Improvements and adaptation to T2A font encoding by Strahinja Radić\ % - Further improvements and integration into one file by Aleksandar Jelenak\ %\ % Current maintainer: Aleksandar Jelenak \ %\ % \\message{Serbian Cyrillic Hyphenation Patterns `srhyphc.tex' v1.0a <2003-06-09>}\ %\ % ", }, ["patterns"]={ ["characters"]="абвгдежзиклмнопрстуфхцчшђјљњћџ", ["data"]=".ђ2 .ћ2 .ч2 .ш2 .ж2 .а2б3алиј .а2б3анац .а2б3ерац .а2б3ерир .а2б3евак .а2б3ирит .а2б3ју .а2б3ла .а2б3лег .а2б3леп .а2б3лок .а2б3лу .а2б3ориг .а2б3реак .а2б3рог .а2б3узус .а2д3ерац .а2д3ј .а2д3лат .а2д3рен .а2д3рог .а2д3верб .а2н3а4е2ро .а2н3афиј .а2н3афрод .а2н3аго .а2н3акуз .а2н3алд .а2н3алфа .а2н3алг .а2н3амерт .а2н3андр .а2н3ант .а2н3апто .а2н3арх .а2н3егер .а2н3екл .а2н3екум .а2н3елек .а2н3енер .а2н3епи .а2н3ерг .а2н3ерит .а2н3есте .а2н3идр .а2н3ирид .а2н3изог .а2н3изом .а2н3изур .а2н3јон .а2н3офт .а2н3окс .а2н3опис .а2н3орг .а2н3орх .а2н3овар .а2набап .а2набат .а2набаз .а2набио .а2набол .а2надем .а2надипл .а2надоз .а2нафаз .а2нафила .а2нафон .а2нафор .а2наген .а2нагно .а2награ .а2нахор .а2нахро .а2накал .а2накам .а2накат .а2накеф .а2накла .а2накли .а2накој .а2накол .а2накрон .а2накру .а2налеп .а2налис .а2налит .а2нализ .а2намне .а2нанео .а2напла .а2напле .а2напне .а2напно .а2напро .а2напти .а2нарт .а2насар .а2насеи .а2наспаз .а2наста .а2настиг .а2настом .а2натим .а2натоц .а2натом .а2натре .а2натри .а2натро .а2неор .а3г2нос .а3г2ноз .а4е2ро .б2 .бе2ш3ћ .бе2ш3ч .бе2с3ц .бе2с3к .бе2с3п .бе2с3т .бе2з3алкохол .бе2з3атомск .бе2з3б .бе2з3д .бе2з3г .бе2з3и .бе2з3л .бе2з3љ .бе2з3м .бе2з3н .бе2з3њ .бе2з3о .бе2з3р .бе2з3у .бе2з3в .бе3с4крупул .бе3с4покоја .бе3с4покојн .бе3с4пора .бе3с4порн .бе3с4тид .бе3с4тија .бе3с4тиљ .бе3с4тилу .бе3с4трана .бе3с4трас .бе3с4твар .бе3з4беда .бе3з4бедн .бе3з4бели .бе3з4бједа .бе3з4бједн .бе3з4бол .бе3з4истан .бе3з4истен .бе3з4јач .бе3з4јак .бе3з4лоба .бе3з4лобн .бе3з4начај .бе3з4рача .бе3з4рачн .бе3з4уб .бе3з4уп .бе3з4вуча .бе3з4вучн .бе4о .бес4тселер .би4о .ц2 .д2 .џ2 .ди2с3акор .ди2с3јунк .ди2с3конт .ди2с3корд .ди2с3кре .ди2с3кри .ди2с3кур .ди2с3квал .ди2с3ло .ди2с3ориј .ди2с3парит .ди2с3пон .ди2с3поз .ди2с3проп .ди2с3тон .ди2с3трак .ф2 .г2 .ге4о .х2 .и2ш3ћ .и2ш3ч .и2ж3ђ .и2н3абруп .и2н3адек .и2н3афек .и2н3акце .и2н3акур .и2н3амор .и2н3аниц .и2н3аплик .и2н3апст .и2н3арт .и2н3аугур .и2н3аура .и2н3ед .и2н3ефек .и2н3ег .и2н3екс .и2н3екв .и2н3елиг .и2н3епц .и2н3евид .и2н3јек .и2н3јур .и2н3јуст .и2н3обл .и2н3офиц .и2н3окуп .и2н3опер .и2н3опор .и2н3опсе .и2н3умбр .и2н3унда .и2н3унк .и2н3утил .и2ноген .и2нокор .и2с3ц .и2с3к .и2с3п .и2с3т .и2з3аба .и2з3ака .и2з3анал .и2з3б .и2з3бија .и2з3бива .и2з3д .и2з3дај .и2з3г .и2з3и .и2з3л .и2з3љ .и2з3м .и2з3н .и2з3њ .и2з3о .и2з3р .и2з3у .и2з3в .и2з3ведб .и2з3веде .и2з3веди .и2з3ведн .и3с4как .и3с4кариот .и3с4кат .и3с4кин .и3с4кита .и3с4коч .и3с4конск .и3с4крам .и3с4крат .и3с4крен .и3с4крењ .и3с4крич .и3с4криш .и3с4криц .и3с4крит .и3с4крој .и3с4крса .и3с4крсн .и3с4купља .и3с4квас .и3с4кврч .и3с4лаб .и3с4лам .и3с4леђ .и3с4лед .и3с4лијеђ .и3с4лијед .и3с4лик .и3с4лин .и3с4љеђ .и3с4љед .и3с4лов .и3с4луш .и3с4луж .и3с4ме .и3с4мије .и3с4мје .и3с4паљив .и3с4пав .и3с4пира .и3с4плић .и3с4плит .и3с4покој .и3с4полин .и3с4пон .и3с4порав .и3с4права .и3с4прави .и3с4правк .и3с4прављ .и3с4правн .и3с4пупч .и3с4пур .и3с4ред .и3с4рк .и3с4таћ .и3с4такн .и3с4там .и3с4тар .и3с4тас .и3с4тави .и3с4тављ .и3с4тиц .и3с4тифан .и3с4тин .и3с4тир .и3с4точа .и3с4точн .и3с4точњ .и3с4ток .и3с4тори .и3с4трад .и3с4тран .и3с4трав .и3с4трић .и3с4триж .и3с4триц .и3с4труг .и3с4туп .и3с4уш .и3с4ук .и3с4ус .и3с4ут .и3з4бав .и3з4бичкава .и3з4блеушан .и3з4бојак .и3з4бојк .и3з4драв .и3з4гомет .и3з4гред .и3з4грн .и3з4грт .и3з4иђ .и3з4ид .и3з4ими .и3з4јежљ .и3з4лож .и3з4лог .и3з4лопаћ .и3з4лоз .и3з4ним .и3з4ној .и3з4олац .и3з4олат .и3з4олир .и3з4олов .и3з4рачи .и3з4раел .и3з4раиљ .и3з4ун .и3з4упч .и3з4вала .и3з4вале .и3з4вали .и3з4ваљи .и3з4валу .и3з4вижд .и3з4виискр .и3з4вија .и3з4вијен .и3з4вин .и3з4вињ .и3з4вир .и3з4витоп .и3з4вјед .и3з4војац .и3з4војц .и3з4вор .инте2р3а .инте2р3е .инте2р3и .инте2р3је .инте2р3о .инте2р3у .инте3р4ежџ .инте3р4егн .инте3р4еса .инте3р4есе .инте3р4еси .инте3р4есн .инте3р4есо .инте3р4есу .инте3р4ије .инте3р4огат .ист2к .из3бе2з3обр .из3бе2з3ум .из3г2н .из3ва2н3евр .из4оанем .из4оаном .из4обат .из4оброн .из4одим .из4один .из4одоз .из4офон .из4офот .из4огам .из4огео .из4оглос .из4огон .из4ограф .из4охал .из4охаз .из4охел .из4охиј .из4охим .из4охипс .из4охит .из4охор .из4охро .из4оклин .из4околон .из4олекс .из4олукс .из4омер .из4ометр .из4оморф .из4онеф .из4оном .из4опат .из4опер .из4опле .из4опол .из4опсеф .из4орах .из4осеи .из4осинт .из4осист .из4оскел .из4оскоп .из4остаз .из4осте .из4отах .из4отал .из4отер .из4отон .из4отоп .из4отро .иза3г2н .иза3т2к .изд2на .изд2но .изд2ну .изр2к .јури2с3к .јури2с3п .к2 .љ2 .м2 .н2 .на2д3жањ .на2д3ждр .на2д3же .на2д3жир .на2д3жив .на2д3жњ .на2д3жуп .на2д3игр .на2д3инж .на2д3ина .на2д3иск .на2д3јач .на2д3јах .на2д3јеч .на2д3јек .на2д3јез .на2д3јун .на2д3л .на2д3љ .на2д3оч .на2д3офи .на2д3ора .на2д3осе .на2д3осје .на2д3осо .на2д3рач .на2д3рашћ .на2д3ран .на2д3раст .на2д3реал .на2д3реп .на2д3руч .на2д3руг .на2д3рук .на2д3уч .на2д3удар .на2д3ум .на2д3в .на2ј3а .на2ј3е .на2ј3и .на2ј3о .на2ј3у .на3д2нев .на3д2нич .на3д2ниц .на3д4лан .на3д4леш .на3д4леж .на3д4вал .на3д4веси .на3д4вест .на3д4виј .на3д4вит .на3д4вла .на3д4воје .на3д4вор .на3ј4аш .на3ј4ажи .на3ј4ада .на3ј4аде .на3ј4ади .на3ј4ах .на3ј4ака .на3ј4ако .на3ј4ало .на3ј4ами .на3ј4амл .на3ј4амн .на3ј4арц .на3ј4ари .на3ј4арм .на3ј4ати .на3ј4аук .на3ј4ава .на3ј4аве .на3ј4ави .на3ј4ављ .на3ј4ази .на3ј4еже .на3ј4ежи .на3ј4ежу .на3ј4ец .на3ј4еда .на3ј4еди .на3ј4едн .на3ј4едр .на3ј4ести .на3ј4етк .на3ј4езд .на3ј4езн .на3ј4урен .на3ј4ури .на3т2ках .на3т2кам .на3т2касм .на3т2каст .наг2н .наг2њ .ну2с3пос .ну2с3про .ну2з3бел .ну2з3биљ .ну2з3љуб .ну2з3ре .ну2з3рје .ну2з3уж .о2б3игр .о2б3истин .о2б3истињ .о2б3ј .о2б3лај .о2б3лакш .о2б3лам .о2б3ласк .о2б3лећ .о2б3леж .о2б3леден .о2б3лег .о2б3леп .о2б3лет .о2б3лијеж .о2б3лијег .о2б3лијеп .о2б3лијет .о2б3лист .о2б3лив .о2б3лизат .о2б3лизав .о2б3лизи .о2б3љ .о2б3лока .о2б3луч .о2б3лук .о2б3ору .о2б3р .о2б3уж .о2б3убож .о2б3уд .о2б3уме .о2б3уми .о2б3умр .о2б3уз .о2д3жал .о2д3жаљ .о2д3же .о2д3жи .о2д3жв .о2д3арг .о2д3и2з3д .о2д3и2з3в .о2д3игр .о2д3иск .о2д3исти .о2д3ј .о2д3л .о2д3љ .о2д3ок .о2д3онд .о2д3онл .о2д3оно .о2д3ону .о2д3озд .о2д3озг .о2д3р .о2д3уч .о2д3ук .о2д3ул .о2д3ум .о2д3уве .о2д3уви .о2д3узд .о2д3узе .о2д3узи .о2д3узл .о2д3в .о3б4јеш .о3б4јек .о3б4јер .о3б4јеси .о3б4јет .о3б4љан .о3б4љут .о3б4љуз .о3б4рђ .о3б4рч .о3б4рш .о3б4раћ .о3б4рашч .о3б4рашн .о3б4раже .о3б4рамб .о3б4ран .о3б4рањ .о3б4рат .о3б4раза .о3б4разд .о3б4рази .о3б4разн .о3б4разо .о3б4разу .о3б4ређ .о3б4реч .о3б4реж .о3б4рец .о3б4ред .о3б4рем .о3б4рес .о3б4рети .о3б4ретн .о3б4рич .о3б4риц .о3б4риј .о3б4рис .о3б4рит .о3б4рив .о3б4рк .о3б4рл .о3б4рљ .о3б4рн .о3б4роћ .о3б4роч .о3б4рок .о3б4рон .о3б4рова .о3б4ровц .о3б4рс .о3б4руч .о3б4руш .о3б4рук .о3б4рун .о3б4рус .о3д4јећ .о3д4јен .о3д4јев .о3д4лаж .о3д4лаг .о3д4лака .о3д4лаз .о3д4луч .о3д4лук .о3д4рж .о3д4раћ .о3д4рачи .о3д4раж .о3д4рана .о3д4ране .о3д4рани .о3д4рано .о3д4рану .о3д4рапа .о3д4рапи .о3д4рапљ .о3д4раз .о3д4ређ .о3д4ред .о3д4рем .о3д4рен .о3д4рич .о3д4риш .о3д4риб .о3д4риц .о3д4рин .о3д4рињ .о3д4рл .о3д4рљ .о3д4рн .о3д4рон .о3д4роњ .о3д4рп .о3д4рт .о3д4руж .о3д4руг .о3д4рвеч .о3д4рвен .о3д4рвењ .о3д4важ .о3д4вај .о3д4веса .о3д4весн .о3д4вест .о3д4вић .о3д4викав .о3д4викн .о3д4вис .о3д4вој .о3т2ках .о3т2кам .о3т2касм .о3т2каст .обе2ш3ћ .обе2ш3ч .обе2с3ц .обе2с3к .обе2с3п .обе2с3т .обе2з3б .обе2з3д .обе2з3г .обе2з3ј .обе2з3л .обе2з3љ .обе2з3м .обе2з3н .обе2з3о .обе2з3р .обе2з3у .обе2з3в .обе3с4тан .обе3с4тиј .обе3с4тран .обе3з4нач .обе3з4нан .обе3з4нањ .обе3з4уб .обе3з4виј .од3г2н .од3м2н .ода3д2н .ода3г2н .по2д3адм .по2д3игр .по2д3изв .по2д3ј .по2д3лакат .по2д3лакт .по2д3лећ .по2д3леж .по2д3лег .по2д3леп .по2д3лет .по2д3лијећ .по2д3лијеж .по2д3лијег .по2д3лијеп .по2д3лијет .по2д3лист .по2д3лиз .по2д3љут .по2д3лок .по2д3лом .по2д3луч .по2д3луж .по2д3луп .по2д3оч .по2д3ош .по2д3оф .по2д3окн .по2д3ра2з3д .по2д3рад .по2д3рам .по2д3ран .по2д3рањ .по2д3рас .по2д3равн .по2д3равњ .по2д3разр .по2д3разу .по2д3реп .по2д3рес .по2д3рез .по2д3рик .по2д3рит .по2д3рож .по2д3рон .по2д3ров .по2д3руча .по2д3ручи .по2д3ручн .по2д3руб .по2д3рук .по2д3упла .по2д3усм .по2д3усн .по2д3вариј .по2д3веч .по2д3веж .по2д3вез .по2д3вик .по2д3вил .по2д3вир .по2д3влаш .по2д3влас .по2д3вођ .по2д3вож .по2д3вод .по2д3воз .по2д3врћ .по2д3врж .по2д3враћ .по2д3врат .по2д3врг .по2д3врис .по2д3врс .по2д3вућ .по2ст3егз .по2ст3инду .по2ст3лим .по2ст3онк .по2ст3опер .по3д2нев .по3д4јеч .по3д4јен .по3г2н .по3м2н .по3м2њ .по3р2ђ .по3т2ках .по3т2кам .по3т2кат .по3т2кав .пре2д3же .пре2д3жи .пре2д3ид .пре2д3игр .пре2д3испи .пре2д3исто .пре2д3истр .пре2д3изб .пре2д3ј .пре2д3обј .пре2д3одре .пре2д3окус .пре2д3осе .пре2д3осје .пре2д3осв .пре2д3рач .пре2д3рад .пре2д3рат .пре2д3руч .пре2д3убеђ .пре2д3убијеђ .пре2д3убјеђ .пре2д3удар .пре2д3угов .пре2д3упис .пре2д3усло .пре2д3увер .пре2д3увјер .пре2д3увјет .пре2д3в .пре3д4јен .пре3д4вај .пре3д4вар .пре3д4вест .пре3д4воја .пре3д4воје .пре3д4воји .пре3д4вор .пре3д4вос .пре3т2ках .пре3т2кам .пре3т2кат .пред3м2н .пред3м2њ .про3г2н .про3т2ка .про3т2ки .проти2в3акц .проти2в3оф .проти2в3отр .проти2в3р .проти2в3уд .проти2в3ус .р2 .ра2ш3ћ .ра2ш3ч .ра2ж3ђ .ра2с3ц .ра2с3к .ра2с3п .ра2с3т .ра2з3анал .ра2з3б .ра2з3д .ра2з3е .ра2з3г .ра2з3и .ра2з3л .ра2з3љ .ра2з3м .ра2з3н .ра2з3њ .ра2з3оба .ра2з3обл .ра2з3обр .ра2з3од .ра2з3орат .ра2з3орав .ра2з3орт .ра2з3ору .ра2з3от .ра2з3р .ра2з3уда .ра2з3удб .ра2з3уди .ра2з3улар .ра2з3умр .ра2з3уве .ра2з3узд .ра2з3узе .ра2з3узи .ра2з3в .ра3ш4ћењ .ра3ш4чић .ра3с4как .ра3с4канд .ра3с4кин .ра3с4клад .ра3с4клањ .ра3с4клап .ра3с4клон .ра3с4клопа .ра3с4клопи .ра3с4клопљ .ра3с4кош .ра3с4кроп .ра3с4пај .ра3с4пав .ра3с4пета .ра3с4пете .ра3с4пети .ра3с4пето .ра3с4пику .ра3с4пињ .ра3с4плин .ра3с4плињ .ра3с4пн .ра3с4полож .ра3с4пон .ра3с4пор .ра3с4прав .ра3с4прем .ра3с4рђ .ра3с4рд .ра3с4ре .ра3с4тај .ра3с4тан .ра3с4тат .ра3с4тав .ра3с4тењ .ра3с4тил .ра3с4тињ .ра3с4тир .ра3с4тис .ра3с4тит .ра3с4тој .ра3с4трел .ра3с4трет .ра3с4трој .ра3с4трт .ра3с4тућ .ра3с4туп .ра3с4тур .ра3з4башур .ра3з4бад .ра3з4бан .ра3з4бар .ра3з4бау .ра3з4бој .ра3з4бор .ра3з4ев .ра3з4гађ .ра3з4грт .ра3з4иђ .ра3з4ић .ра3з4ид .ра3з4иј .ра3з4ин .ра3з4ир .ра3з4из .ра3з4лаг .ра3з4лаз .ра3з4лич .ра3з4лик .ра3з4лож .ра3з4лог .ра3з4лоз .ра3з4мећ .ра3з4мет .ра3з4мрск .ра3з4нат .ра3з4ред .ра3з4роч .ра3з4рок .ра3з4вал .ра3з4веде .ра3з4вест .ра3з4вић .ра3з4виго .ра3з4вија .ра3з4вије .ра3з4вију .ра3з4вит .ра3з4вој .ра3з4вон .ра3з4врћ .ра3з4враћ .ра3з4врат .ра3з4врт .ра4с5турч .раз3д2ни .раз3г2н .раза3г2н .раза3т2ка .с2 .су2б3а .су2б3инв .су2б3јунк .су2б3л .су2б3окс .су2б3орд .су2б3реп .су2б3рог .су3б4аш .супе2р3а .супе2р3е .супе2р3и .супе2р3о .супе2р3у .супе3р4иор .тран2с3а .тран2с3ц .тран2с3е .тран2с3к .тран2с3л .тран2с3м .тран2с3н .тран2с3о .тран2с3п .тран2с3т .тран2с3у .тран2с3в .тран3с4еп .тран3с4кри .тран3с4уд .тран3с4ум .у2ш3ћ .у2ш3ч .у2с3ц .у2с3к .у2с3п .у2с3талас .у2с3тара .у2с3тећ .у2с3тег .у2с3тер .у2с3тов .у2с3трћ .у2с3трч .у2с3трај .у2с3трал .у2с3треб .у2с3треп .у2с3трес .у2с3трг .у2с3трк .у2с3трн .у2с3трп .у2с3тућ .у2с3тум .у2с3тур .у2с3тврђ .у2с3тврд .у2з3б .у2з3д .у2з3г .у2з3и .у2з3игр .у2з3инат .у2з3искр .у2з3л .у2з3љ .у2з3м .у2з3н .у2з3њ .у2з3обест .у2з3обијест .у2з3охо .у2з3орат .у2з3орав .у2з3р .у2з3угар .у2з3в .у3г2ми .у3г2н .у3с4как .у3с4клађ .у3с4клад .у3с4ко .у3с4куп .у3с4пало .у3с4пав .у3с4пеш .у3с4пех .у3с4пел .у3с4пем .у3с4пент .у3с4пет .у3с4пев .у3с4пија .у3с4пије .у3с4пијуш .у3с4пикуш .у3с4пјеш .у3с4пјех .у3с4пјел .у3с4пјем .у3с4пјет .у3с4пјев .у3с4пон .у3с4пора .у3с4пореч .у3с4порен .у3с4порењ .у3с4пори .у3с4пособ .у3с4према .у3с4преми .у3с4рђ .у3с4рж .у3с4ра .у3с4рд .у3с4ре .у3с4ријед .у3с4рк .у3с4рљ .у3с4рн .у3с4рп .у3з4бор .у3з4диц .у3з4лан .у3з4лат .у3з4лић .у3з4лиц .у3з4лим .у3з4лит .у3з4лов .у3з4лудоб .у3з4нач .у3з4нак .у3з4неве .у3з4невје .у3з4нич .у3з4ниц .у3з4ној .у3з4рет .у3з4рев .у3з4ријет .у3з4ријев .у3з4рн .у3з4рњ .у3з4роч .у3з4рока .у3з4роко .у3з4року .у3з4руј .у3з4ван .у3з4ват .у3з4виж .у3з4вија .у3з4вије .у3з4вијо .у3з4вију .у3з4вој .у4с5кош .у4с5коко .у4с5коле .у4с5колу .у4с5ком .у4с5копа .у4с5кора .у4с5коси .у4с5котр .у4с5ков .уза3т2ка .ва2н3евр .ва2н3устав .з2 .за3г2н .за3т2ка 2ђ1ђ 2ђ1ћ 2ђ1ч 2ђ1ш 2ђ1ж 2ђ1б 2ђ1ц 2ђ1д 2ђ1џ 2ђ1ф 2ђ1г 2ђ1х 2ђ1к 2ђ1љ 2ђ1м 2ђ1н 2ђ1р 2ђ1с 2ђ1з 2ћ1ђ 2ћ1ћ 2ћ1ч 2ћ1ш 2ћ1ж 2ћ1б 2ћ1ц 2ћ1д 2ћ1џ 2ћ1ф 2ћ1г 2ћ1х 2ћ1к 2ћ1љ 2ћ1м 2ћ1н 2ћ1р 2ћ1с 2ћ1з 2ч1ђ 2ч1ћ 2ч1ч 2ч1ш 2ч1ж 2ч1б 2ч1ц 2ч1д 2ч1џ 2ч1ф 2ч1г 2ч1х 2ч1ј 2ч1к 2ч1љ 2ч1м 2ч1н 2ч1р 2ч1с 2ч1т 2ч1з 2ч3вј 2ч3вл 2ч3вљ 2чв. 2ш1ђ 2ш1ш 2ш1ж 2ш1б 2ш1д 2ш1џ 2ш1ф 2ш1г 2ш1х 2ш1ј 2ш1р 2ш1с 2ш1з 2ш3чв 2ш3цј 2ш3цв 2ш3мј 2ш3мл 2ш3мљ 2ш3пј 2ш3пл 2ш3пљ 2ш3тј 2ш3тл 2ш3тљ 2ш3вл 2ш3вљ 2шћ. 2шч. 2шчћ 2шчч 2шчш 2шчж 2шчб 2шчц 2шчд 2шчџ 2шчф 2шчг 2шчх 2шчј 2шчк 2шчљ 2шчм 2шчн 2шчр 2шчс 2шчт 2шчз 2шц. 2шцћ 2шцч 2шцш 2шцж 2шцб 2шцц 2шцд 2шцџ 2шцф 2шцг 2шцх 2шцк 2шцљ 2шцм 2шцн 2шцр 2шцс 2шцт 2шцз 2шк. 2шкђ 2шкћ 2шкч 2шкш 2шкж 2шкб 2шкц 2шкд 2шкџ 2шкф 2шкг 2шкх 2шкк 2шкм 2шкн 2шкс 2шкт 2шкз 2шљ. 2шм. 2шмђ 2шмч 2шмш 2шмж 2шмб 2шмц 2шмд 2шмџ 2шмф 2шмг 2шмх 2шмк 2шмм 2шмн 2шмс 2шмт 2шмз 2шн. 2шп. 2шпђ 2шпч 2шпш 2шпж 2шпб 2шпц 2шпд 2шпџ 2шпф 2шпг 2шпх 2шпк 2шпм 2шпн 2шпс 2шпт 2шпз 2шт. 2штђ 2штч 2штш 2штж 2штб 2штц 2штд 2штџ 2штф 2штг 2штх 2штк 2штм 2штн 2штс 2штт 2штз 2шв. 2швђ 2швч 2швш 2швж 2швб 2швц 2швд 2швџ 2швф 2швг 2швх 2швк 2швм 2швн 2швс 2швт 2швз 2ж1ћ 2ж1ч 2ж1ш 2ж1ж 2ж1ц 2ж1џ 2ж1ф 2ж1х 2ж1ј 2ж1к 2ж1р 2ж1с 2ж1т 2ж1з 2ж3бј 2ж3бл 2ж3бљ 2ж3бр 2ж3дј 2ж3дл 2ж3дљ 2ж3дв 2ж3гј 2ж3гл 2ж3гљ 2ж3гр 2ж3гв 2ж3мј 2ж3мл 2ж3мљ 2ж3мр 2ж3вл 2ж3вљ 2жђ. 2жб. 2жбђ 2жбч 2жбш 2жбж 2жбб 2жбц 2жбд 2жбџ 2жбф 2жбг 2жбх 2жбк 2жбм 2жбн 2жбс 2жбт 2жбз 2жд. 2ждч 2ждш 2ждб 2ждц 2ждд 2ждџ 2ждф 2ждг 2ждх 2ждк 2ждм 2ждн 2ждс 2ждт 2ждз 2жг. 2жгч 2жгш 2жгж 2жгб 2жгц 2жгд 2жгџ 2жгф 2жгг 2жгх 2жгк 2жгм 2жгн 2жгс 2жгт 2жгз 2жл. 2жљ. 2жм. 2жмђ 2жмч 2жмш 2жмж 2жмб 2жмц 2жмд 2жмџ 2жмф 2жмг 2жмх 2жмк 2жмм 2жмн 2жмс 2жмт 2жмз 2жн. 2жњ. 2жвђ 2жвч 2жвш 2жвж 2жвб 2жвц 2жвд 2жвџ 2жвф 2жвг 2жвх 2жвк 2жвм 2жвн 2жвс 2жвт 2жвз 2а1 2б1ђ 2б1ћ 2б1ч 2б1ш 2б1ж 2б1б 2б1ц 2б1д 2б1џ 2б1ф 2б1г 2б1х 2б1к 2б1м 2б1н 2б1с 2б1т 2б1з 2бј. 2бл. 2бљ. 2бр. 2ц1ђ 2ц1ћ 2ц1ч 2ц1ш 2ц1ж 2ц1б 2ц1ц 2ц1д 2ц1џ 2ц1ф 2ц1г 2ц1х 2ц1к 2ц1љ 2ц1м 2ц1н 2ц1с 2ц1т 2ц1з 2ц3вл 2ц3вљ 2цј. 2цр. 2цв. 2д1ђ 2д1ћ 2д1ч 2д1ш 2д1б 2д1ц 2д1д 2д1џ 2д1ф 2д1г 2д1х 2д1к 2д1м 2д1н 2д1с 2д1т 2д1з 2д3вл 2д3вљ 2д3вр 2џ1ђ 2џ1ћ 2џ1ч 2џ1ш 2џ1ж 2џ1б 2џ1ц 2џ1д 2џ1џ 2џ1ф 2џ1г 2џ1х 2џ1ј 2џ1к 2џ1љ 2џ1м 2џ1н 2џ1р 2џ1с 2џ1т 2џ1з 2џ. 2дј. 2дл. 2дљ. 2др. 2дв. 2е1 2ф1ђ 2ф1ћ 2ф1ч 2ф1ш 2ф1ж 2ф1б 2ф1ц 2ф1д 2ф1џ 2ф1ф 2ф1г 2ф1х 2ф1к 2ф1м 2ф1н 2ф1с 2ф1т 2ф1з 2фј. 2фл. 2фљ. 2фр. 2г1ђ 2г1ћ 2г1ч 2г1ш 2г1ж 2г1б 2г1ц 2г1д 2г1џ 2г1ф 2г1г 2г1х 2г1к 2г1м 2г1н 2г1с 2г1т 2г1з 2г3вј 2г3вл 2г3вљ 2г3вр 2гј. 2гл. 2гљ. 2гр. 2гв. 2х1ђ 2х1ћ 2х1ч 2х1ш 2х1ж 2х1б 2х1ц 2х1д 2х1џ 2х1ф 2х1г 2х1х 2х1к 2х1м 2х1н 2х1с 2х1т 2х1з 2х3вј 2х3вл 2х3вљ 2х3вр 2хј. 2хл. 2хљ. 2хр. 2хв. 2хвђ 2хвч 2хвш 2хвж 2хвб 2хвц 2хвд 2хвџ 2хвф 2хвг 2хвх 2хвк 2хвм 2хвн 2хвс 2хвт 2хвз 2и1 2ј1ђ 2ј1ћ 2ј1ч 2ј1ш 2ј1ж 2ј1б 2ј1ц 2ј1д 2ј1џ 2ј1ф 2ј1г 2ј1х 2ј1ј 2ј1к 2ј1љ 2ј1м 2ј1н 2ј1р 2ј1с 2ј1т 2ј1з 2к1ђ 2к1ћ 2к1ч 2к1ш 2к1ж 2к1б 2к1ц 2к1д 2к1џ 2к1ф 2к1г 2к1х 2к1к 2к1м 2к1н 2к1с 2к1т 2к1з 2к3вј 2к3вл 2к3вљ 2кј. 2кл. 2кљ. 2кр. 2кв. 2љ1ђ 2љ1ћ 2љ1ч 2љ1ш 2љ1ж 2љ1б 2љ1ц 2љ1д 2љ1џ 2љ1ф 2љ1г 2љ1х 2љ1ј 2љ1к 2љ1љ 2љ1м 2љ1н 2љ1р 2љ1с 2љ1т 2љ1з 2м1ђ 2м1ћ 2м1ч 2м1ш 2м1ж 2м1б 2м1ц 2м1д 2м1џ 2м1ф 2м1г 2м1х 2м1к 2м1м 2м1н 2м1с 2м1т 2м1з 2мј. 2мл. 2мљ. 2мр. 2н1ђ 2н1ћ 2н1ч 2н1ш 2н1ж 2н1б 2н1ц 2н1д 2н1џ 2н1ф 2н1г 2н1х 2н1к 2н1љ 2н1м 2н1н 2н1р 2н1с 2н1т 2н1з 2о1 2пј. 2пл. 2пљ. 2пр. 2р1ђ 2р1ћ 2р1ч 2р1ш 2р1ж 2р1б 2р1ц 2р1д 2р1џ 2р1ф 2р1г 2р1х 2р1ј 2р1к 2р1љ 2р1м 2р1н 2р1р 2р1с 2р1т 2р1з 2с1ђ 2с1ћ 2с1ч 2с1ш 2с1ж 2с1б 2с1д 2с1џ 2с1ф 2с1г 2с1х 2с1с 2с1з 2с3кј 2с3кљ 2с3тл 2с3вљ 2сц. 2сцђ 2сцћ 2сцч 2сцш 2сцж 2сцб 2сцц 2сцд 2сцџ 2сцф 2сцг 2сцх 2сцк 2сцљ 2сцм 2сцн 2сцр 2сцс 2сцт 2сцз 2сј. 2ск. 2скђ 2скћ 2скч 2скш 2скж 2скб 2скц 2скд 2скџ 2скф 2скг 2скх 2скк 2скм 2скн 2скс 2скт 2скз 2сл. 2сљ. 2см. 2смђ 2смћ 2смч 2смш 2смж 2смб 2смц 2смд 2смџ 2смф 2смг 2смх 2смк 2смм 2смн 2смс 2смт 2смз 2сн. 2сњ. 2сп. 2спђ 2спћ 2спч 2спш 2спж 2спб 2спц 2спд 2спџ 2спф 2спг 2спх 2спк 2спм 2спн 2спп 2спс 2спт 2спв 2спз 2ср. 2ст. 2стђ 2стћ 2стч 2стш 2стж 2стб 2стц 2стд 2стџ 2стф 2стг 2стх 2стк 2стм 2стн 2стп 2стс 2стт 2стз 2св. 2свђ 2свћ 2свч 2свш 2свж 2свб 2свц 2свд 2свџ 2свф 2свг 2свх 2свк 2свм 2свн 2свп 2свс 2свт 2свв 2свз 2т1ђ 2т1ћ 2т1ч 2т1ш 2т1ж 2т1б 2т1ц 2т1д 2т1џ 2т1ф 2т1г 2т1х 2т1к 2т1м 2т1н 2т1п 2т1с 2т1т 2т1з 2т3вј 2т3вл 2т3вљ 2тј. 2тл. 2тљ. 2тр. 2тв. 2у1 2в1ђ 2в1ћ 2в1ч 2в1ш 2в1ж 2в1б 2в1ц 2в1д 2в1џ 2в1ф 2в1г 2в1х 2в1к 2в1м 2в1н 2в1п 2в1с 2в1т 2в1в 2в1з 2вј. 2вл. 2вљ. 2вр. 2з1ђ 2з1ћ 2з1ч 2з1ш 2з1ж 2з1ц 2з1џ 2з1ф 2з1х 2з1к 2з1п 2з1с 2з1з 2з3бљ 2з3дл 2з3дљ 2з3дв 2з3гј 2з3гљ 2з3мл 2з3мр 2з3вл 2з3вљ 2зб. 2збђ 2збћ 2збч 2збш 2збж 2збб 2збц 2збд 2збџ 2збф 2збг 2збх 2збк 2збм 2збн 2збп 2збс 2збв 2збз 2зд. 2здђ 2здћ 2здч 2здш 2здб 2здц 2здд 2здџ 2здф 2здг 2здх 2здк 2здм 2здн 2здп 2здс 2здз 2зг. 2згђ 2згћ 2згч 2згж 2згб 2згц 2згд 2згџ 2згф 2згг 2згх 2згк 2згм 2згн 2згп 2згс 2згз 2зј. 2зл. 2зљ. 2зм. 2змђ 2змћ 2змч 2змш 2змж 2змб 2змц 2змд 2змџ 2змф 2змг 2змх 2змк 2змм 2змн 2змп 2змс 2змв 2змз 2зн. 2зњ. 2зр. 2зв. 2звђ 2звћ 2звч 2звш 2звж 2звб 2звц 2звд 2звџ 2звф 2звг 2звх 2звк 2звм 2звн 2звп 2звс 2звв 2звз 3ч2лан 3ч2лањ 3б2дењ 3б2дет 3б2дјењ 3б2дјет 3ц2мач 3ц2мак 3ц2миз 3ц2мок 3г2дегод. 3г2декад 3г2декак 3г2дјегод. 3г2дјекад 3г2дјекак 3г2мил 3г2миљ 3г2миз 3г2нај 3г2нежђ 3г2нев 3г2незд 3г2нијежђ 3г2нијезд 3г2њав 3г2њеч 3г2њес 3г2њет 3г2њев 3г2њил 3г2њиљ 3г2њио 3г2њит 3г2њур 3г2ној 3г2нос 3г2ноз 3х2тел 3х2тењ 3х2тети 3х2тев 3х2тјел 3х2тјењ 3х2тјети 3х2тјев 3к2неж 3к2нез 3к2њиж 3к2њиг 3м2наж 3м2нож 3м2ног 3п2сич 3п2сик 3п2сов 3п2суј 3р2ђа 3с2фер 3т2маст 3т2мул 3т2муљ 3т2муо 3т2мур 4р3је. 4р3јем ч2в ш2ч ш2л ш2љ ш2м ш2н ш2п ш2т ш2в ж2ђ ж2б ж2д ж2г ж2л ж2љ ж2м ж2н ж2в а3а а3е а3и а3о а3у б2ј б2л б2љ б2р ц2ј ц2р ц2в д2ж д2ј д2л д2љ д2р д2в е3а е3е е3и е3о е3у ф2ј ф2л ф2љ ф2р г2л г2љ г2р г2в х2л х2љ х2р х2в и3а и3е и3и и3о и3у к2л к2љ к2р к2в л2ј м2л м2љ м2р не3г2де. не3г2дје. ни3г2де. ни3г2дје. о3а о3е о3и о3о о3у п2ј п2л п2љ п2р с2ц с2к с2л с2љ с2м с2н с2п с2р с2в т2ј т2л т2в у3а у3е у3и у3о у3у в2л в2љ в2р з2б з2д з2г з2ј з2л з2љ з2м з2н з2р з2в", ["length"]=28148, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=2425, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-is.pat0000644000175000017500000006315511761001300024656 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-is.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z á æ é í ð ó ö ú ý þ \patterns{ .að3 .aða4 .aðk2 .aðl4a .af3n .af3re .afr3í .af1s4 .agn5ú .al3e .al4l .am4s .an3k .ann4e .ar2 .ar3a4b5 .arth5 .asp3 .aum5a .ám4 .án4a .ba4 .da4 .dam5a .dav3 .dr4 .ds4 .du4 .dust5 .ed5ik .eftir5 .eigin5g .eink4 .ekt4 .er4m .eyf2 .fa4 .fi4 .fjár3 .fl4 .fla4 .fr4 .frá1 .ga2 .gar4 .gas5l .gd4 .gem5 .gja2 .gl2 .gr4 .gu4 .her5sk .il4 .ingj5 .is4m .ís1l .ja2 .jar4 .ka4 .kal5e .kam5e .kapí3 .kart5 .kast3 .kn4 .kr4 .kur4 .la4 .lag5e .leik5sv .líb5 .lu4 .ma2 .maj5 .mak5r .mi4 .mj4 .mu4 .mynst4 .na2 .ní5f .ný5f .ol4íu. .óa4 .óð5al .óf4 .óg2 .ók4 .óm4i .ós2 .pa4 .pl4 .ra2 .ram4 .rí4 .róð4 .rúm3 .saman5 .sk4 .ski4 .skj4 .skr4 .sl2 .sm4 .smá3l .sn4 .snar5a .sp4 .spr4 .st4 .sta2 .ta4 .ti2 .til3 .tí5f .tr4 .tu2 .tví1 .ung3l .unn5usta .úr1 .út1 .út5s .vegg5s .vist3 .yfir3 .ævi3s .öfl3 .ögr5 .ör3s .öt3u 2a3a4 a4ab a4ad 2a1á2 2a1b ab4a 3abís a5by abæk4l 4ac 2a1d4 a5dó a4du 1að 4aðað að3al að3ar 2aðfa 4aðfö að3g að3i 2aðl að4li 4að2m 2aðsh 3aðu. 2aðv 2a1e a5ei a4es 2af af3ald af3arn a3fá af4fr af3g a1fj a3fló a1flu af5ork a1fr af3ré afr4u a5fræ 4afsd af1sk 4afsso af2u a1ful a1fun 3afurð 2ag a3gau ag5ál ag5is a5gj agn4ara ag2ne ag5ot a1gr ag4ra ags4ið ag4sp ag4stj ag4ul ag3æð 4a1h 4ai a3ið a4in aí4h 2aj a3jö 2ak akaup4s a5ká a1ke a5kinnin a5kistu a1kj ak5rei aks4l 4akss ak3u a3kv a5ky a5ký a3kö 2al a1lag 4aland a5landið a5landinu alas4 alá4 a4lem al3er al1f al1g 5alge 3alh alis4 al4ín al3kj alk5s al3k2u al4lí all2s allst4 al4lý 4almað al5mann al5m2i a3log a5lok al5op a5lóð al4sæt al5up al5ú al3v4 a3ly a1læ a1lö 2am am3ang a3mann am3ari am3ars am3a4s am3dr a3mí am3k am2m amm4is a1mó am3se ams2i am1t 1an 3an. 3ana. an3ada 4anag 2anal 4anau 2aná 4and. and1e 4an4dí andr4 4andö 4ane an5ei 2ang an4ga ang1d an4gj ang5spi an2g3ö 4anib 4anið an5ín 2ank ank5l ank3v 3anm ann5d 4annf 4annh ann1k 4annl 4anns annsk4 4an4o anst4 an3sti an3tí 3anu 4anú 4aný 4anæ 4anö 2a3o 2a3ó 2ap ap3al a3per a3pil a3po a5pre ap3te a5p4un a5pör 1ar 3ar. ar3afu ara5kr ar3ang 4arani ar4arp ar2as ar5ast. ar3au 2ará4 4aráð 5ar3ák 3ar3ár 3ar1ás ar1át 3ard2 4ardí 4arð. arðar5á 4arði 4arðs 3arðu. 2are 3ar1ef 4aref. 5areig 5arein a3rek ar3el ar3en ar5er a3ret 4a1ré 2arf 3arfe 3arfé arfs3k ar1fu ar3gj ar4græ args4 arg3sl 4ar5ið 4arif ar3in ar4ind ar5ist. 4a5rit 4a1rí ar3j4 4ark. ark4is ar5kj ar3kr4 4arms ar3mú 4arna. 4aroð 4arol 4arot 2aró 2arp 4arra arr2i arr4u ar4sá 3arse ar1sk ar4spi arst4 5arstí ar3su ar5til artr2 ar5trað ar3u ar4uð 4ar4ug 5arum 2ar1ú a5rús ar3v4 ar3yf 4arý 2aræ a3ræð ar5æv 4arö as2 4a1sa as3an 2a3sá 4ase 4asé 2asi a5sinna 2asj 4a1sk 2asl a3slag 2a1sm 4asn 4aso 4asó 2asp aspít4 4ass ass4v 1ast 4astað ast4and 4astau 4aste 4asté 4astig 4astin ast4ing 4astirð 4a1stí 4astj ast3l 4asto 2astó 4astrá ast5ráð 4astrí 4a3stræ 4aströ 4astul 4a3st4un 4astú 4a3sty 4astæ 4astö 2a1su 2a1sv 4as4y 2asý 4asæ 2asö 2at at3að a3tak a3tal at4anv ata4r a1te at3ey 3ath a1til a3tj 3atk atns3 a4tó atr4a at1re 3at1ri at2sp a5t2un a1tú at4ve 3atvi a1tö 2a4u2 4auð. auð5li 5auðn aug4as au4m aum5ba aum5un aun5dr aup5e aup3l a5upp au4s ausa5m au4t 2a1ú 2a1v av4ar. a3vir 2ay a5yf 4az 2a1þ a2þó 2a3æ 4a5ö á1a áak4 áa5lo á1b á4bu á1d4 4áð áð2s áð3sn áð3sta áð2u áð3us á1e áf2 á5fá á5fí á3fl áflæð4 áf5un ág2i ágl4 ágr2 ág1s ág3v á1h á1i ák2a ákam4 ákap4 ákó4 ála3m ál3arf ál2as á5lau á3let álf3d4 álf5sk ál4m álm5an álm5u álp3 ál4se ál5sva ál5ug á5lú ál3æð 2ám ámál5a ámsl4 á2n án4aro án2as án4o á3ný 5ánæ á3o 4áp ára5g ár3an árar4 á5ré ár3f4 ár5g ár5k4 ár1m árns4 árn5sl ár2st ár5t ár1u ár3v á5ræ ás5en á1sk á2ska á4ske á3s4l ás2m ást2 ást5i ást5ráð ást5rík ást5v 4ásu4 ás5va át3að á1te átr4as áttar3 5áttin. átt3un á1tæ á1u áuk4 á3ve á3ví á1væ á1þ á5æð b2a 4ba. baðk4 ba4h bak5sl ba2n 4bana 4baní bank5an 4bans b5ant bar2b barð4as bar2n bá4s 2b4b bb3að bb3an bb5arn bb3i bb3uð 1be bess4 b2i2 bið5i bið5lis bið5r4 bif1 bilj5 bill5 4binn bisk3 b4it bit2a 4bía 2b3ís 2b3íu 3bj bjar2 b4l2 bl4íunn 4bn 5bo 3bó4 bók3s b4r2 br5að bra4s 3bro br4u 3brú 4bum4 bur2 3burð burst5að bu4s 1bú búf4 bú3sta 1by 1bý bæk2i bæn4a 1bær b5ættism 1bö 4böki c4a ci4 ck4 4da. daf4 dak2 3dal. 5dals da1m4 d5ang d4aní d4arad d4ar4að dar4ár d3arf d5arp dask4 da3sl 4dav d1b 2dd 4dea d5ef 3deg 1deil d1en d5eó 5dep d1f4 d1g2 d4gi d1h d1i di5fu d3ill dim4 di3ma di3nav d2ine dir3s dí3d d5íð d5ínu 3dís dív3 3dj4 djarf5a d1k2 d1l2 d2la dl3að d3lag d3lau d4lið dl3u d1m d5olf d5óð d3óf dó5lí 1dó2m dóm5an dó5ne 3dór dó2s dós5e 4dq d5raðf dr4aðs5 d5raðst drafn4 dr4ara 3dreg d5reip d5rey d5riða d3rík d5roð dru4 d4ræt 2ds d5sal d4sjö dsk2 ds4ko ds5kun ds1l d5snö ds1s4 d1st4 d4sti ds4uð d4söf d1t2 d1u duf4 5duft duk4 d4umb du5ræ d4usta d3ún dún4a dút4 d1v4 4dw 1dy 1dý d3þ 1dæ 4dæf 4dær 3dö ð1a ðaf4 ða3g ðak4 ð4albo ð3ald ðal4is ð4a1m4 ð3a4n ðanmeg4 ðar1a ð3ar3f ðar3l ðar4lis ðar3t4 ð3arú ðat4a ð3au ð3á2 ð1b ð1d2 ð1e ð3f4 ð1g ð2ga ð2gi ðg4l ð4gn ðgu4 ð3g4ul ð1h ð1i ði3g ðik4 ð3in ðis5l ðist4 ð4ista ðis4ve ðj3as ð3jó ð4ju ð3ke ð1kr ðk2un ð3kunn ð1kv ð1lá ðl2in ðl4ist ð3lí ðl4ur ð1læ ð1m2 ðnum4 ð3o ð3ó ð1p2 ðr5át ð1re ð1ré ð3rik ð3rík ð5ró ðr1u ð3rú ð1ræ ðræðis5 ðs5afl ðs5á ð4seg ðs4inn ð1sk ðskr4 ð4skú ðs5kv ð4skö ðs4lu ð2so ðs3or ðss4 ð1st2 ð2stí ð3stö ðs4u ð4svi ð2sæ ð1t4 ð1u ð3uð ð3ug ð3ull ð5uls ð5unn ð3unu ð3ur ður5á ður3f ður5g4 ður5st ð1v ðv5að ðv3ann ðv3arn ð1y ð5ý ð1þ eat4 ebr5e ed4e e1dik ed3it eð3a2 eðal1 eð3il eð4is e2f e3fal ef3i efj5an ef4n 4eft. 2efts5 eg4ge eg3i egr5u eg3u4l egur4s e4i eið5ar eið4st eif4as ei4ka eik3li eik3u eil3ag eil5ö ei2m eim5u eing4 1eink 4eino eist5að e4k ek2is ekj5a ekn3 ek3u ek5ú e2l el5ás el4d el3eg elf3in el4gr el1i 4elí el3ín el4ke el2l ell5an ell3e elleg4 el3ó el3r el1sí 5elsk el4te elu5s e2m em4ba 1embe em5ens em3i4 emj3 em4l eml2i empl5 em5u e2n 4enc en4g eng3a enik4 2enn enn4t en4t ep4h ep3i epl5i e4pr ep4t e4r er3al er5au er5á 4erð 5ere er5et erf5ar er2fr erf3u erg5l er4gr er3i er2k er4la erl3i er4lí er4mi erm5in er5ól er5skj er1un er2v er3ö eröf4 e2s es3a es4ban es4bu 4esj e5ske 4eso esp3a es2s est3að est5ö e3sæ etik4 et5ils etna4 et5o etr5an etr3u etul4 et2us ext4u 5eyrar é3b é1d éð2s é3fe é1g4 é5ky é1l éla4g él4ara é2li é4lj él3r ér1 ér4á ér4r érs4 ér4un ér3v é3sm étt4ug ét4un étur4 f3að fa2g fa5k 1fall fal4u fa4ná fa5p4 f2ar f3arð f4are f4arg farka5l f3arl fast3e fá3f f5áns fá3rá fá3ta fá3v f1b4 fd2an f1dr f5dú fða4l 1fe f3ef f3ein 3fel f3end ferl5i fer3t f1ey 1fé f4fa f2fo f1fr ff4st ffær4a f1g2 f2ga f2gi fg4n f1h f3ið fik4 f5il. f5ili f3ill f5ils f5ilv fim3a f4ine f3inu 3firði f3irðu firg2 f3irn 1firs 3f4isk fi5so f3ist. f3istu fis5v fí4 f5íkv f3ís fj4a fj5aðu fj5ann fj4e f1k2 fl3and fl4at 3flata f5lát f4len fl5g 1flo 5flut flv4 4flý 1flö f1m 4fn fn1g f5n4í fn3k fn5ok 1fo 4fop forf4 fork4 1fó fr2 4fra. fr3að fra4m fram3l fr5and 4frar 2fri. fr5in frí5m4 f3róf fru4 fr3uð 1fræ 2f3ræk 4fræn fs3á f4sel f4skaf fsl4 fs3li fs5na f2so fs5or fsr4 fss4 f4sti f5s4tæ fs1v f4sæ ft3að fta4sk ft5á f3te ft2s fts5l ft3u ft4ul f1u 4fu. f3uð 3fugl fund4as 2f3ur 5furðul fur5e furs4 fur3t 4f2us f5ust. f3ustu f1v4 1fy f3yrt f1þ 1fæ 1fö för4l g1a 4ga. 4g3að gaf4ar gagl4 3gagn gak4 ga4lag gal4is 5gals 5galt gam3al gam4i g5and 1gang gap4a g4ard. g2arð 3garð. 3garða 3garði 3garð4s 5garður g3ar3f gar4kl gar3l gar3t 4gas g4as. g4así g3ast. ga5stað 1gata gat4r gá2 3gáf gá5le g1b gd4ans g3de g4du gd4v gð4aro 1ge 3gei 2g1el gen4 g5end 3geng g3ent 5gerð ger5í germ4 gerv5a get3r g1f2 ggis5 ggjaf3 ggj5ar gg5rá gg3ræ ggs4v gg3ug gg2v g4gö g1h g1i 4gi. 4gik gi5kv 3gild g5ill 5gilt gim4a 4g3i4n gis4a g4isp g5istæ gír5a gís4 gjaf5ar gjaf5o gjak4 gjal4 gj4asta 1gjö g1k4 gkal4 g1lá g4leð g3leg gl5é gl3f2 g3lit g5lín gl3ót glsk4 3glugg glu3s gl4y g3lær g1m4 gnap4 gnart4 g4ná gn3g g3nó gn4se gn5ug g4ný. 3gol g3or 3góð gór5 gó4ur g1p g3rak4 gr4an gra2s gras5sv g2rá 1grei g3reis g5reyð gr2i 2gri. grið4 g3rík 3gró 3grund 3grunn g3ræði g2ræn 4gs gs1á g4sei gsk4 gs4len gsl2u gs4lö gs3m gs5or gs3s4 gs4si gs1v gt3að g3te gt4s 2g1u g4uði guðl4 5g2uðs guð4só g3uðu 5gufu gu4lagi g5ulin g3ull g3uls gu5mið g3un gurf4 gur3g g4usta g3ú gúst5a g1v g2va g3val 5gyð g1þ 1gæ gæð4as gæl4 gær3 1gö4 h2a4 4ha. hað4 haf4sp hand5r hat3r há3g hál4 há3re há4ski há5sta hás4u hát4 há5ti hátr4 há1v he4 hei2 hellis5 hen2r herk4 her3l4 hersk4 4hersla hey5st 4hg h4i hig4 him5b hin4 hit4as hit4n 2hí2 h5ía hí5b hj4 h2l2 4hl. 4hls hlu4 h4n2 hnja4 hnjá3l holl3u horm5 hó2 hóm5e hót3 hr4 4hs hu4 hug1r hug3u hul5i hundr4 hú2 húm3 4húr hús5k hv4 hvar4 hvik3 5hy hæf5a hætt4us höst3 2ia i5as 4i5á 4i1b ibb3 ibl3í 4ic 2id4 i3da i1de i3dr 1ið. 4iðf 2ið3g ið5jarð 4iðr 4iðs ið5sal 2iðu 4ie i3ef 4if if5arn ifat4 i2fen if4g if3is if4t i4fy 4i2g iga3m igð5u ig1en ig5rí 2i1h 2ii i5ið 4ij 4ik ik5á ik3i ik4is ikt5o i4kvö 2il ila2g il4ara i1lá 4ile ilf4a il1fi il1g4 i5liðu il5in il3ip il5ís ilí4um il4kv il3lag ill5an il3lá i1lo il4sa il1sk il3sn ilst4 ilæk4 i5lön 4im im4b imb3u im3i im4ið im4la im4m i5mó im4sv 1i2n 4inaf in3an 4inar inat5r 2i3nau 2ina2v inav3í 4iná 4ind. in4ga ingj6arni 4ingr ingv4 2inns 2innu in1o 4inó in1s4k in2sp in3sta in5ul 4iný 2i3o 4ió 2ip i5pil 3ir. 4ira 2i1rá 2irði 4irðn 4ire 4iré irf2i 4irfs 4irig 2irit 4i1rí 2irk irk3u ir3l ir1m4 4irnd 4irni. 4irnin 4irnis 4iró irs4á irst4 ir3tal irt5i 4irtl irt4ö ir3ug 4irú 4irö i2s 1is. 2isa 4isag i5saga i3sam is2as 3isd 2ise 4ishv 3isins 4isí4 4isj i3sjó 2isk is4ka isk5el iski3m isk5inn. 3isko isk2u isk1v 5iskö 2islé is3læ 5isma is5me 4isni isp3að isp3u iss2i is5sú ist3al 2iste 4isté 4istig i5stik ist4is ist5ín 4isto 4istó 4isty 4istæ 2istö is5tök is1v 4isvi is4við 5isvin i3svæ 2isö 2it it3að it5ann i5tei 4ith it4ha it5ill itis4m it2ka itn5es it3rí it4stö it3un it4urn it4ve 4iu 4iú 4i1v i2v5ís 4ixs 2i3þ 4iæ 4iö í1a 4í5ak íal3 í5ald í3ali í2as í5at í5au í5á íb4a í5bar í4be 5íbú í5dag íð2s3 íðsk4 í3el í3en íet3n í5ett í2f íf3eð í4f3i íf5rí ífs3k íf4sp í2g íg3e í3gil í1h í1i ík3a4 4ík4anar 4ík4ani ík5is íkk2i 5íkm ík2n íkn5e ík4s ík3us 2íl ílak4 íl2as íl5ár íl5f4 í3lí 5ílmá íl3sk 4ím ím3að íma3l4 ím3an ím4g ím5o ím5t ím3un í2n í5ná ín5e ín3ge ín5t ínu3g4 ín3ú í3óp íóp5íu 4íp ír5ak íra4s í4r5i ír4sv ír3t í1ræ ír5ö í2se í4s5j ísl2 3íslen ísl5i ís2m í2st ís5ter ít5að ít5als ít3i ítj5 ít3re ítr5ó 4íub í5uð 4íul íu1ma í3un íu5p í3ur í4ura 4íusa íu3t 4íuv ívo4 í5þ j2a j3að j5aði 3jaf4n ja5kl jal2 jal5ið ja5ló j4am j3an j4aram j3ari jark4i jarn4ið j4aræ jas4 jask4u j3ast jál5as jál4f jálf3a 3járn jár4u jáv3 jávar5 j1e jend4a j4ep j4er j4et j1i jó5b jó5fr jó2s jó5ug jó3ve j1u juf4 jug2 jug5as ju4gó j4u1l2 jur4e 5j2urt jurt4i j2us4 j3ust. 3jöfn 3jök jöl3k jöl1m kað4s kaf4an ka4fr kag4as ka4j kaj5a kak4l kal2 3kald 4kalf k4all 3kam4b kam2s5 k3ana k4anaf k3ann. k4anó k4ant 5kanta 4kapa kark4 1k2ar2l k4arm k3arn kar2r k4art kar4v kask4 3kass 5kastal k5astu. 1kau 5kaup kák5 kám3 k1b k1d4 2k1end 3kenn 3kerf 5kerl ker4m k1f4 kfalls5 k3g kgl4 k1h k3ið kið5l kig4 k5ill k5ilsi kim2 k5ing k4ip k1ir k3irð 5kirk k5irn k4irt k1is k5ise kisk4 k3ist. k4it ki3te 3kíl kís3 kít3u kja4l kjar4a kjar5f kju3g 1kjö 3kjör kka5l kk5e kkj1ó k2kl kk1lá kk4li kk3rí kk4se kkul4 kkv5ið kl2 kl3að kl3ann klá4 5klef kleif5a k4lem k1lin 3klj 3kluk 3klú 1klæ k1m2 k4mið. kn3ar k2ney kni5svi 3knú 1ko 2kob koff5 kol5d kol4l kol5sv 3kon 4kons 3kos kot4as kó3d kó3m4 kór5a k1ótt kra5l kr2as k2rá k5ré kr2i krif3a 1krö 3kröf 4ks ks4lí ks4lö ks4má ks4n ksp4 k4ste k4stó k4str ksyf4 kt3að kt5er k4tí k3tora k5ty 2k1u k3uð k4uði kuf4 kuk4 kulegr4 kum4 kumb5 k5un. k5una. k3unar k5uni 5kunnátta k3unu k3ups k2urð kur5k k2us ku5sl k3ust. k5ustum ku3sty kú2 3kúlu k3ún kú3re kút4us 3kven 4kvé 4kvu kv4un. 1k4væ 3kvö 4kvör k5þ 3kök 5köld 5könn 5kös 2la. 4lac la4dan 2lað lað4al 4laf laf4as laf4r l3afs 3lagð 4lage 2lak la5kó la1l2 l3ald lam4b 2lana l2and 3land. 3lands 1lang lank5as 4lann l5anna. l4anó lan4t la3pl4 2lar l4aram l4are larg4 l4aris l3arn la3ró lart4 l4ary 2las las3i las3le la5sli last5að lat3ín lat4u 1lau 2laum laut5as lá2g lám5a lán5e 4lár lá4t 5látum lá3v 2l1b 2ld ld3ar ld3d ldem4 ld3ey ldig4 ldr4as ld5rau l4dri ld5ro ldr3ó 1le 4le. 2lef l1efn 4legn leif5as leik3v 4lein 4lek 4lel 4lenn 4lep 2ler le5rí les5e 2let l3ex 2ley. 4leyj 2leym lf4as lf5át lf4dr lf3f lf2i lf5inn. l3fj lf2l lfla4 l4fó lf4sp lftr4 lft4un 4lg lg2a lgar4s lg5ast l1gá l4ges lgil4 lg4isi lg3í lgl4 lgni5s l1gr lg4ú l1h 4li. lik4a li5kv lil2 li5la li3li l2ind 4lingsá l3inn l5inn. 2l3inu 4l3ir l1is l5is. l4isá l3isi lisk4 l5isr l4isti l5istu. lit4ar 3litl l3ía. lí4b 1líf líf5a lík3k lím5ug 4líp 1lít l1íu l4íuf l4íuh l4íutr lj3ar lj5arð 1ljós ljós5k ljós3l lj3ug ljur4 lj4uru 2lk lkap4 lk4as l1ke l3kr l3kúr l1kv l3ky 2ll ll3et l4ley ll3f ll1g2 ll3iða lli3g lliss4 l1lit llít4 ll3k4 ll3m ll1ót lls5tæ ll5te ll5ug ll3v 2lm lm5ari lm3ars lmb4 l3me l1mó lnar4 ln4ið l5no lo4 5loð 5loki 4lon 4l1or 5los lóð3r ló5gr ló4ma lp5t 2l1r l2ri l3rit 2ls lsí4 l2sj4 l5skin ls4kon ls4nesi l3stað lst4in ls1ve 4lt lt3að l5til lt4s lt4ú l1tæ 2lu 4lu. l3uð lugl4 luk4i l4u1l4 l1um lu1ma l1un 3lund l3unu lu5pe l1ur 2l1v l2va lv3að l3val l4víu ly4 3lyf 1lyn l1yr 1lý 2lýf lýt4a 4lýti 2l1þ 1læg lækj3 lækjar5 5lækk 1læti 1lög l5öl 4löt m2a 2ma. m4ab m4ad m3að. m3aða m3aði m3aðr m5aðs 1maðu maf4 m4ag 3mag4n m4ak mal4as mal3dr m3alf m3all m4alp mal4t ma1m4 4man. 4mana. m4aná m3anb 2m3and2 m3ank m3anl mann4as 3manni 3manns mann5t 2m3ans man5sa m3ant 4manu ma2r m3ara m3arb m3arð 1m4ark marks5 m3arn mar3o mar4s mars5m m4arú m1as mask4 ma4sp m3ast. 1má 4má. 3má2l mál3f4 2mám má5mu má5p 4már 4mb mb5aði m1ban mb3i mb4ir mb3un md2as md5asta md4v 1me 4me. með3 m5ef megin3 5m2eis meltr4 m1end 3menn m5erh m3er3í mest5a m1f4 m4fí mför4u m1g2 mgl4 m1h mið3i miðr4 mi3ge 3mik milj3 mil4l millj3 m3ing 5minj m3inn. min4s m3inu m3ir m1is mis3k mis3lu mism4 2mí mjó3sl m1k m2ka mk4arg mk4as mk2i mk4l m1l m2la m3lag m3lau m2lá ml3ár m2li m5luk 4mm m2m3a mm5b m4mó mm4sv mm3u m4nesku 2mog 4mok 3mol mong5 mód3 móð4s mó5g4 m5óní mó3rau mó4s 3mót mp3á m5pe mp3i m3rau m5rá m3re m3rý m1ræ 4ms ms5ál m2se ms5ei m5skau ms5kj ms5lá msn4 mssetr4 m1sv m4sví mt3að m4ti mt2is m3tug mt5un mt4us mt2v m1tö m1u 4mu. mug4u 4mul 4mum m2un 1mund m3ung 4mur m4uru mu5sta m3úð múg4u m1ún mús4a m1v4 1my 3mý mý5m m1þ 1mæ 1mö mör4 n1a 4na. na2da na4dí naðar3 naf4 nafl4 nafl5an 3nafn nak4a na4kr nal2 na3la n3ald na3li na1ma n4anaf n5ang n5ann n4arak n3ar3f n4arfi n4arfö narg4 n4aris nar5m nar5rin n4aru n4arú nat4 n5aug n3auk naum5a 1ná ná1g ná1k 3ná4m nán5ast n1b nbæj4 nd3er nd4isv n4dj nd3ót nd3rek ndr1u nd1ræ nd4sen nd3ug nd5ul ndur5g nd3ú 1ne neð2s 3n2ef 4nefl n4em nem5a 2n1en 4n4er nestr4 netl4 n5eyi n3eyj né5sk n1f2 nfr4 nga1m ng5are ng2as n2ge ng5ek n3ger n3get ng1ey ngi5k ngil4i ngi5lið ng5lag ngl2i ngl5ið ng5ólfs ng4ra ngr5an n3grí ngr3u ng3ræ ng4sj ng4sp ng4ste ngurs3 ngu3t n1h 4n1i n4iði ni5fr ni3gr ni3lu ni5m n4iru n3isa n4isá nisk4 ni3skó nis2m nis5s ni3ste ni5stæ n3ía n3ísk n1íu ní4um njál4 nk2 nk3að nk5and nk3ans n5ká n1ke nk3i n5kó n3kunn n5ky n5kö n1l2 nli4 n4list. n1m4 n2n nn1á nn1e nn3g2 nnk4i nn4sj nn5ske nn4sto nn5stun nn5tó nn3ug nn2us nn3úð n1or 1not n5ólf 5nóttin n3p4 n1r n3ram n5rau n2r4i n3rit n3sak n5sát n4seg ns5es ns5is ns1í n3skil nskír4 ns5kja n5skö nsn4a ns5r nst4e nt3að n5tak. n5taki n3tal n1te ntgen5 n3til n2tí nt2s nt5sk nt5sm nt3ug nt4v n1tý n1tö n1u nuf4 n4ugr nuk2 nu1l nu1ma 5numd nungs3 nur5f nur4l n3ust. nu5stað nu4sv nu5ta 3núm3 nú4s n1v n5yf n3yrk 1ný n3ýg ný3l ný5sk n1þ 1næ næl4a 3nöf n3öld n5ön 5obs oða3l oðr4 oðs5l oð4ug o2f of3ang off4u of3o of5r of4sj of5su oga3l4 ogast4 ogs4u ok4as olak4 old3u ol2g oll5eg ol5lit oll4st ol3m ol3ó oltal4 o2m om3a om4m3 om2u om3un on3sv on4t on5tó on4us opa5p op2h3 op5u4 ora4 or4di or1e or2fe or2gr 3orí orlag4 or2ma or4mi 4orn or4ne or4sta ortr4 ort3ug or1u or3ug or3v4 or4við or3y o4s osk3i os3m os2s ost5i ost5un 4o4t ot3að ota5l4 otam4 ot3ro ots4á ot5un o4u o3ve ox4 ó1a óaflat4 ó5an óar4s ób3ak ód4a óði4 óðl4 óðm4 óðv4 ó5e óf3ar óf4as óflu5s ófr4 óf5us ó2fy ó4fö ó2g ó1h ó1i ók5lo ó3kr ók2u óla3m ól2as ól5ik ól4is ól4kv ól5om 3ólsk ó4m3að óm3ar óm4bæ óm2g óm4is óml4 óm3p óm3stu óm3u ó2mö ó4n ón3í ón5kv óp4e óp2h5 ór4as órá4 ór2d ór4dö ór5es órf4 órg4 ó4ri ór4is órík4 órj4 órk4 órm4 órn4o ór3ón órr4 órs4a ór1u ósa5f ósak4 ó3sem ós3end ó5skaf ósk4as ósk5in ós2l óslav3 ó2só ósp4 ós4se ó4ta ót3að ótap4 ót5ef ótil4t ó5tí ót4ó ót2v ó1u óum5b óv4a ó5vat óy4 ó5þ p1a pag4 pa4le pa3m pa4n pan3gó pa2r p4arat pari3f par5í p2art par5te p4aru p2ák p4ál pá5m p4ár pá2s p4át p1b p5d p1el 1peni 3pers p1f2 p1g2 p1h p1i pil5ar 5pilt p4ink pist5i pit4 3píp pí2t pl2 pl3að pla4s p4læ 3plö p1m4 1pok 3pós p2p pp5aks pp5e pp3í ppk4 pp1l pp3ó pp1r ppsk4 4pra pr2i p4ris prí4 3prj 1pró pró5fas pró5m p1sa pss4 p1st pt2ú p1u puk4i pu1l pur4a 3pú púf4 p1v qu4 2ra 4ra. 5raðsh raf4f r3ald ral4i r4all r3als 3ranal r4ani. 3ranns r4anó 4r3ar r4arað r4arú r4ary r4aræ ras3i ra3tu r4aum 1ráð ráf4i rá5kvæ rárs4 r4ása r1b4 rba4 r1d r2dí r4ð rð4ar4á rð5is rð1l2 rð4mu rð5rá rð5su rð3sv rðv4 r4ef. r4efs 5reftsk 1regl r3eig 3reik r5enu r5eu r4eyn r4é r1fal2 rfa5li rf4ar r3fá r5feð rf1is r1fj rfjár4 rf4lö rfóg5 r1fr rfr4u rf4st r3fund rf4urð rgj4að rgj4ar rg2l4 r5gly r1gr r2gra r4grey r5h 4ri. 4r3ið. rig2 riga5s r3ild 4rin rin5e ringj5ar r3inu rip4s 4r3ir ri3sk ris5l2 3risn rist5að ris4un 1ri4t rit3li 4rí. 4ríf ríkis3 4ríl ríst4 4ríu 4ríþ rj3ar rjá4l rjó3sa rjósk5a rka1m rkaup4s r3ká r1ke rk1ef r4kell r4kelss rkju3s rk4se rk1sm rk4sp rk4ú rk5vei r3kö r1l2 rl3að rl5ann r2li4 rl4ið rlis5s r3lit rl3m rlof4 rmak4 r1man rmáls5 rmb4 rm2i r1mið rmil4 r5mj rmk4 rml4 r3móð rmr4 rn3ar rnar5l rn1g rn5ór rn5sí rn5sm rn4so r4nu r5numi ro4 rog4as ron4 r1or ró5gr ró4m ró4sa rós3ó 5róti r5pal r3pó r1pr r4pri rp2s rp3sk r5py rr5ar r1rá r1re r1ré r1rí rr2k r3ró rr1u r5rú r1ræ r1sa r4saf rs4ár rsegl4 r3ser rs4inn r3ske r5skil rs4lan rs2má r1st r2sti rst4v r3stö rs2u r5sund r4sú r1sv rt3að rta5g r3tak rta4sk r5tá rt5er rt3ey rt2hu r4tík r3tó r3trö rt4se rt5sl rtt4 rt4uru rt4ú r4tv rt4ve r1tæ rt1öf r1uð r4uðun ruk4i ru5li ru2m r1ur r4uss r3ust. rut4v r4úð 3rúm rúst5 r1v rv3að r3ve r2vi rvi3g rv3ing rv4un r3væ r3yr 1rým r1þ 1rækt ræmd5a 1ræn ræt3i röf4ug rök1r röl4 2sa. 4sab 2s3að s4aðf 1sag 4sagr 4sagt sal5at 4s3ald 1sa2m sam5b 4sam1e sam3m sam1s sam5y 2san s4ands 2s3ar s4are sarg4 s4aro s4arp 2s1as 2sat sat4a 2sau s3auk 4sav sá4 s3áb s5áf sálar5 s1ár s3ás s1b s3d4 1se 2s1ef 4seld. 5semi 5sens 2ser 2ses 3set sex3 2s1ey s4eyð 1sé s5f4 sfl4 sfr4 s1g4 sgl2 s1h shá4s s1i s3ið. 5s4iða s4iði sif2 si5fi 1sig sind4ar sind4as 5sinnu 2s5ins s3ir s3ist s4isv si3ta sí3br 1síð síðk4 sígl4 s3ík sí4m sínk5a s3ír s1ís s5íu. sí3v sí4ve 1sj s3jaf sjar4 s4já sjó5l sjó3m4 sjó3s 4sju 3sjú s2k 2sk. 4ska. 4skað skaf4a 4skal 2skan 1ska4p 4skas 1ská 1skei 3skemm 4sken 3skey s4k2i 2ski. 4skið sk3inu 3skip 2skir 4skis 3skír 5skjá 4sk4n 3skoð 4skon 4skos 1s4kot 1skó 5skóg 1skrá 4skró 3skrú 4sks sk3uri sk3ust 2skv 1sky 3ský 1skæ sla2 sla3f s4lam slands5 3s4lé sl2is s1lí s4líð s3lof s3lok 1sló slu3s 1slys s3læk s1m2 4sma smá1s smá5v 4sme s4mek s2mi 1smí smj4 4smö s2ne 3sneið 5sner s3nes 3sneyd sn4ið sn2o 1snú 4snúm s4ný snæð5 1so 4sod 3son 2sor s5orði 1só4 s4ól sól3e sól3s 2sóm s5ómag 4sós 1sp2 spít3 spj4 4spl 4spra 2spró s5pund sr2an s5rau s1rá s1re s1ré s1rí s5ro s5ræ s3rö s3s4á ss3er ss5í s1s4k4 ssl2 ssm4 ss5or s1st s4stir s1sv s2t 2st. s4ta 2sta. 4stal 4stap 5starfi 5starfs 4staæ 1ste 3stef 3stein 5stekk 4stet 1sté st4he 4sti. 1stig st4isl 3stíg 2stím 4stíu 1stj4 4stjón 5stjór 5stjör 4stl st3le 1sto 3stof 1stó 4stón 3stór st2r str5al 5stranda 5strang 5straum 5strá. 1stre 3strí 4strú s3try 5strön st5t 2s4tu 3stund 1st2ú 4stv 3stý 1stæ 2stæk 1s4tö 3stöð 4stöl 5stöng s1u su3f4 5sum3a s2ung s5upp s5ura sust4i sú4 súln4 s5ún s5úrs sút5 sv4 4svag 4sval s3vat s5veð s4vef s2vei s3veik 3svein 5svep 4svex s4viði 5sviði. s4vik svik3u s5vin s1vo s2væ 1svæð 1sy 2s3yfi 3syn 4s3yr 3s4ý s1þ 1sæ 4sæð sæf4 sæ5fa 3sæj 3sæl 4sæs 1sö 3sög sögu5s 2s3öld 3söm 2s3ör t2að ta2fr 1taka 5takend t4al. tala4m 4tam ta1ma t5amt ta4ná 3tang 4tar t4ar4að tar5is5 tark4 tarp4 tar5sá taræv4 t1as t4as. ta5sl tat4 ta4ví t4á4 5tákn 4tánd t1b t1d 4tegí 5tegu tei4 tein5g t1eis 1tek 3tekj tekkj5 t1end ten5ó 4tepl t3ett 2tey té4l t3f2 tfirr4 t1g t1h th5ers t1i ti4an ti5kis tild4 4tin tirk4 t4iræ tist4 t5ist. ti3sta tistil4 t2isv 1tit 1tí 4tí. 4tía 3tíð tí4l 3tím 4tín 4tít tív3 t4jö t1k tk4a t4k2i tlaf4 t3lag t4lag. tl2an tl5ann t1lá tl2i tlur4 t1læ 2t3m4 tn2s tnsk4 tnskr4 to4 1tog t3on 3torg 5toru 1tóm tóm3a tóm5as 5tónl tór1 tór5au tóri3s t1ót t3p tra2b 5traðari tr3alí tr2an tr3ann tr5ar 3traus t4rey 1tré tr4is t5risi t5ríka 3trj t5róf tr3ótt tr3ug tr3una tr5uni 1t4rú 1try t5ryð t3ræn 3tröð 4ts t1sa ts4inn t5sí tsj4 t1sk4 ts1s t1st4 ts4u t2sy tt3að ttak4i ttar5f tt5á tte5rí tt5ern t4tí tt5j tt1l tt1or tt3ræ tt3ug tt4ugl ttv4 t1tæ t1u 4tu. t4uði tugl4 tuk4 tu3l4ið tum2 tu5min t2ung 3t4ungl tup4 t3ur3e tur3k t5urs t4usa t4usu tutr4 túd3 t3úð tú4l 1tún tún4a t1úr tú3sk t1v 5tveggj t5ver 5týs t1þ 3tæk 1tök 1töl t5öls 2u1a u3af u5au 2u1á4 uáætl4 4u1b4 4uc 4ud4 u1da u5dá u3de u3dó u3dr 2uða uð4are uð3k4 2uðl uðm4 2uð4n 2uðr uð5ris uð4se uð3sv uð5sæ 4uðul 2u5e 4ué 4uf uf5á ufd4 u5fit u3fj u1fr u3ful u5fú 2ug 4ugal 4ugat 4uge 4ugil 4u1gj 4ugla ug1lj 4uglu ug4n 4ugó u5gran 4ugre 4ugrj 4ugró ug3ræ ug3ta 4ugö 4u1h 4ui u5ið 4uí4 2uj 2uk ukak4 uk4as u1ke u5kinnin ukku3s u5kó u3kv 2ul 3ul. 4u1lag ul3ar 3ulb 4ule u5lind ul4is u1lí ul3k2 ul4la 4ulln ullt4 4u3lo u3ló ul5sv ult4i ul3us ul5v4 u3læ 4u1lö 3um. 2uma umak4 u1man um4aran 2umá umál4ar um4ba um5bæ um4bö 2umd 2ume um3ein 4umi umj4 um4ki 4uml umm4a 4u5mo 2umó 4ump 2umr ums4 um3sl 3umst. um1t4 4umu um5unn 4umú 2umy 2umý 2umæ 2umö un3ar1 unar5a un2as 4unat 2u1nau 2uná 2und 4une 4unk 2unná 4unns 2unnu unn5ug 4uno 4unó uns4an 4unt 1unu 4unur 4unæ 4unö 2u3o uol4 4uó 2up upp1 upp5a uppal5 upp4i 3ur. 2ura ura4f ur5a4m ur2an ur5anna 2urá urða5rá 2ure u1rek ur3ey 4u1ré urf4a ur3fl urg4e ur3gj ur5in 4urit 4urí u3rík ur3j4 urk4a ur1m ur3ní 4uro 4uró ur1sk4 ur3sna ur4sta ur4svö ur5til urt4ir ur1u ur4unn 4urus ur3v4 ur4vis 4uryk 4urý 2uræ 4urö 2usa u3sal 4us4á 2use 4usí 2usj 4u1sk 4usl 2u3s4m 2usn 4uso 4usó 4usp u5starf 4ustá 4uste 2usté 2usti 2ustí 4usto 4ustó 4ustr 3ustu. 2ustú 4usty 4ustý 4ustæ 4ustö u5sund 4u3sv 4usy 2usý 2usö 2ut ut3að ut2as u3te u5til u3tó ut4stó ut2ú u1tæ 2u3u 4u5ú 4u3v 2uy u3yf 2u1þ 4uæ 2u5ö ú1a úal4 ú3arf úb3an úbli3 úð3ar úð5g ú3e úf5ar úfl2 úf5li úf5ly úfs4á ú5gala úgó3 ú4gæ 4ú1i úk1l úkr1u úk4s úl5er 5úl4f úlf5al úl4í3 úlíp4 ú3lo 4ú2m úm4r úm4si ú4n únd4ug ún4gö úpl5i úr5ef úrít4 úr5sl úr1t úr3un úr5v ú3ræ 2ús ú4sa ús3ei ús3í ús4sti ús4sv ús1v út3e út2he úti5f út2is útj4 út1l2 út1r 4ú1u ú1v ú4va ú5þ v2a2 vaðr5 va5fo va5h 5vallag va4n var4ma varps3 var5ú var4v v3ast va4t 3vax veð5l ve3fe 1veg v2ei 3veið vein4as 5veis 4velg 2vep v4er 1verð ver3gj 3verk ver2s vé2 v5és v3ét5 2v3h v2i 2vi. v4ið 5viðar við3l vil4i vi3lið 3viln vi4lo vin3gj 4vip 3virk visk5un 3viss vis4v 5vita vitk5 vit2n 4viv 4víb 2víð 5vík 3vísi vísl3a ví1v 2vn vo3k vol4 vork4 vor4r 4vr1 4vs 2vu v1uð v1un 5væg wa4 win4s4 x5ar x2as x3e x3f x5i xis4 xí3 xík4 x5íu xt5að x1u4 y5ba yð2s yf5a yf1i yfj5að yft4is y1i yj3ar yj5ó yk5e yk3i yk3su yk3u yk3v ylf5i ylgn4 yll5a yl4v ym3a ymp5í y4n ynj5ar ynj3ó yn4k yn4t yn5u yp2us yr5e yr1i yr3il yrir3 yrj3 yrkv3a yr2l yr2s yr1u y2s ysj3 ys2s yst3ug yt4h ytil4 yt4k y3v ý5a ýaf5 ý5á ýð2s ýfl4 ý3flu ýg4r ýg4uð ý1i ýja5f4 ým4a ým4k ýpru4 ýp2s ýrf4 ýri3m ýri5p4 ýr3l ý4si ýsig4 ýs4l ýs4m ý3stá ý5u ý5ú ý3v ý5y zó4 þ2a þam4 þarf5a þar4m 4þb þ2i þist3i þjó4 þol5a þor3f4 þor3g þorm4 þ1ól 3þór þór5i þ2r2 þra4 þrás4 þris4 þríl4 þrí3t þru4 þum5a þumb3 þur2 þús3 þ2v þver5sk æ1b æðn5 æðnis5 æð2s æð4ug 4æf æf1a æ4fi æf3ust æg5ist æ1i æj3 æj4al æjark4 æk1a æk1li æk3u æ2l æl3an æl3e æl3us æm3a æm4al æ4mundu ænak4 æn4k ær1a ær3e ærgöng5 ærif4 ær3ist æri3sv ær3l ær4n ær2s ær5un ær1us æ5rú æs4is æt5ise ætl5i æ5u æva5g æ5val æv3ar æv4ara æ3ve æv3in öð2 öðl3 öðm5 öð3un öðv5an öðv3ar ö1fa öfl3ó öfn5 öfr3u öf3u ö4g ög3gj öggv3 ög1re ög2us ök5e ök5rá ök3st ök3ul ökv3a ö4l öl1f4 ölk2 ölu5mi öl5un öl2v ölv5an öm4b öm3u önd4l öng5sv öng4us öng4v öngv3a önk3 önn4l ön3ug ön5un ör1e ör4ge ör4lan örm5un ör3ó ör3ug ör1un ör3und örus4 ör2v 4örva örv5al örv5an örv5ar örv4i ör1y ör5æ ö4s ösk3ul ös3u öt4s ö3tug öt2v ötv3a ö5u þ6ó}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sk.rme0000644000175000017500000000760111761001300024651 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Slovak hyphenation patterns (Jana Chlebikova, 1992) (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: skhyphen.tex (yyyy-mm-dd), skhyphen.ex (yy-mm-dd) % Author: Jana Chlebíková % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % Slovak hyphenation (version 2.0) 24.4.1992 % Autor: Jana Chlebíková, department of Informatics Education, % Comenius University, 842 15 Bratislava, Slovakia % % % This is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This file is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %%% -------------------------------------------------------------------- % \message {Loading SK hyphenation patterns: Jana Chlebikova, 1992} % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-deo.hyp0000644000175000017500000000017211761001300025014 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-deo.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-uk.lua0000644000175000017500000013441012161703335024664 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="uk", ["source"]="hyph-uk", ["texcomment"]="% Ukrainian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: TODO:WRITEME (yyyy-mm-dd)\ % Author: Maksym Polyakov , \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % Ukrainian hyphenation patterns in LCY (cp866nav) encoding.\ % Copyright 1998-2001 Maksym Polyakov.\ % Released 2001/05/10.\ % This file can be redistributed and/or modified\ % under the terms of the LaTeX Project Public License (lppl).\ % Please, send bug reports via e-mail:\ % polyama@auburn.edu\ % mpoliak@i.com.ua\ % ", }, ["patterns"]={ ["characters"]="'-абвгдежзийклмнопрстуфхцчшщьюяєіїґ’", ["data"]="2а1 а3а а3е а3і а3о а3у а3ю а3я а3є а3ї 2е1 е3а е3е е3і е3о е3у е3ю е3я е3є е3ї 2и1 и3а и3е и3і и3о и3у и3ю и3я и3є и3ї 2і1 і3а і3е і3и і3о і3у і3ю і3я і3є і3ї 2о1 о3а о3е о3і о3о о3у о3ю о3я о3є о3ї 2у1 у3а у3е у3і у3о у3у у3ю у3я у3є у3ї 2ю1 ю3а ю3е ю3і ю3о ю3у ю3ю ю3я ю3є ю3ї 2я1 я3а я3е я3о я3у я3ю я3я я3є я3ї 2є1 є3у є3ю є3є є3ї 2ї1 ї3е ї3о ї3ю 2б1к 2б1п 2б1с 2б1т 2б1ф 2б1х 2б1ц 2б1ч 2б1ш 2б1щ 2в1б 2в1г 2в1д 2в1ж 2в1з 2в1к 2в1л 2в1м 2в1н 2в1п 2в1р 2в1с 2в1т 2в1ф 2в1х 2в1ц 2в1ч 2в1ш 2в1щ 2в1й 2в'3 2в’3 2г1к 2г1п 2г1с 2г1т 2г1ф 2г1ц 2г1ч 2г1ш 2д1к 2д1п 2д1с 2д1т 2д1ф 2д1х 2д1ц 2д1ч 2д1ш 2д1щ 2ж1к 2ж1п 2ж1с 2ж1т 2ж1ф 2ж1х 2ж1ц 2ж1ч 2ж1ш 2з1к 2з1п 2з1с 2з1т 2з1ф 2з1х 2з1ц 2з1ч 2з1ш 2з1щ 2к1б 2к1г 2к1д 2к1з 2л1б 2л1в 2л1г 2л1ґ 2л1д 2л1ж 2л1з 2л1к 2л1м 2л1н 2л1п 2л1р 2л1с 2л1т 2л1ф 2л1х 2л1ц 2л1ч 2м1б 2м1в 2м1г 2м1д 2м1ж 2м1з 2м1к 2м1л 2м1н 2м1п 2м1р 2м1с 2м1т 2м1ф 2м1х 2м1ц 2м1ч 2м1ш 2м1щ 2м'3 2м’3 2н1б 2н1в 2н1г 2н1д 2н1ж 2н1з 2н1к 2н1л 2н1м 2н1п 2н1р 2н1с 2н1т 2н1ф 2н1х 2н1ц 2н1ч 2н1ш 2н1щ 2н'3 2н’3 2п1б 2п1д 2п1з 2р1б 2р1в 2р1г 2р1ґ 2р1д 2р1ж 2р1з 2р1к 2р1л 2р1м 2р1н 2р1п 2р1с 2р1т 2р1ф 2р1х 2р1ц 2р1ч 2р1ш 2р1щ 2р1й 2р'3 2р’3 2с1б 2с1г 2с1д 2т1б 2т1г 2т1д 2т1ж 2т1з 2ф1б 2ф1г 2ф1з 2х1г 2х1д 2ц1б 2ц1г 2ц1д 2ц1з 2ч1б 2ч1д 2ч1ж 2ш1б 2ш1г 2й1б 2й1в 2й1г 2й1д 2й1ж 2й1з 2й1к 2й1л 2й1м 2й1н 2й1п 2й1р 2й1с 2й1т 2й1ф 2й1х 2й1ц 2й1ч 2й1ш 2й1щ 2дь1к 2дь1с 2дь1т 2дь1ц 2зь1к 2зь1с 2зь1т 2ль1б 2ль1в 2ль1г 2ль1д 2ль1ж 2ль1з 2ль1к 2ль1м 2ль1н 2ль1п 2ль1р 2ль1с 2ль1т 2ль1ф 2ль1х 2ль1ц 2ль1ч 2ль1ш 2ль1щ 2ль1й 2нь1б 2нь1г 2нь1з 2нь1к 2нь1л 2нь1м 2нь1с 2нь1т 2нь1х 2нь1ц 2нь1ч 2нь1ш 2нь1й 2рь1к 2рь1ц 2сь1б 2сь1д 2ть1б 2к1сп 2к1ст 2к1ськ 2п1сп 2п1ст 2п1ськ 2с1пк 2с1пп 2с1пс 2с1пт 2с1пх 2с1пч 2с1ськ 2с1тк 2с1тп 2с1тс 2с1тсь 2с1тт 2с1тф 2с1тц 2с1шт 2сь1кк 2сь1кс 2сь1кт 2т1ск 2т1сп 2т1ст 2т1ськ 2т1шк 2ф1сп 2ф1ст 2ф1ськ 2ф1шт 2х1ст 2х1ськ 2ц1ст 2ц1шк 2ш1тк 2ш1тсь 2б1б 2в1в 2г1г 2ґ1ґ 2д1д 2ж1ж 2з1з 2к1к 2л1л 2м1м 2н1н 2п1п 2р1р 2с1с 2т1т 2ф1ф 2х1х 2ц1ц 2ч1ч 2ш1ш 2щ1щ 2й1й 3ння 3ття 3ттю 3лля 3ллє 3ллю 3ддя д4ж д4з а2й е2й и2й і2й о2й у2й ю2й я2й є2й ї2й 3й6о ь6о 6' 6’ 6ь .б'8 .б’8 .в'8 .в’8 .д'8 .д’8 .з'8 .з’8 .м'8 .м’8 .н'8 .н’8 .п'8 .п’8 .р'8 .р’8 .т'8 .т’8 .ф'8 .ф’8 .ш'8 .ш’8 .бд6 .бр6 .вб6 .вб6'6 .вб6’6 .вв6'6 .вв6’6 .вг6 .вд6 .вж6 .вз6 .вз6д6 .вк6 .вл6 .вм6 .вм6'6 .вм6’6 .вп6 .вп6'6 .вп6’6 .вп6х6 .вс6 .вс6т6 .вт6 .вш6к6 .дж6 .дз6 .дл6 .дс6 .зб6 .зв6'6 .зв6’6 .зг6 .зд6 .зд6з6 .зл6 .зм6'6 .зм6’6 .зс6 .зс6к6 .зс6т6 .зч6 .зш6 .зш6к6 .зґ6 .йш6 .кл6 .кп6 .кс6 .кх6 .кш6 .лк6с6 .лс6 .ль6 .мс6 .мф6 .нб6 .пр6 .пс6 .пх6 .рт6 .ск6 .ск6л6 .сл6 .сп6 .сп6'6 .сп6’6 .сп6л6 .сп6х6 .ст6 .сх6 .сх6л6 .тк6 .тр6 .тх6 .ть6 .фл6 .хл6 .ць6 .чх6 .шк6 .шл6 .шп6 .шт6 6бв. 6бз. 6бй. 6бл. 6б6ль. 6бн. 6бр. 6бс. 6б6ст. 6б6с6тв. 6б6с6тр. 6б6с6ьк. 6б6ць. 6вб. 6вв. 6вд. 6в6др. 6в6дь. 6вж. 6вз. 6в6зь. 6вй. 6вк. 6вл. 6в6ль. 6вм. 6вн. 6вп. 6вр. 6вс. 6в6с6тв. 6в6с6ть. 6в6сь. 6в6с6ьк. 6вт. 6вх. 6в6ць. 6вч. 6вш. 6вщ. 6гв. 6гг. 6гд. 6гл. 6г6ль. 6гм. 6гн. 6гр. 6гс. 6г6с6тв. 6г6сь. 6гт. 6дж. 6дз. 6д6зь. 6дл. 6дм. 6дн. 6др. 6д6с6тв. 6д6с6ьк. 6дт. 6дь. 6д6ь6сь. 6жб. 6жв. 6ж6дь. 6ж6сь. 6зв. 6зг. 6зд. 6з6дв. 6з6дн. 6з6дь. 6зк. 6зл. 6зм. 6зн. 6з6нь. 6зр. 6з6сь. 6зь. 6з6ьб. 6з6ьк. 6йб. 6йв. 6йг. 6йд. 6йз. 6йк. 6й6кл. 6йл. 6й6ль. 6йм. 6й6мс. 6йн. 6й6нс. 6йп. 6йр. 6йс. 6й6ст. 6й6с6тв. 6й6с6тр. 6й6сь. 6й6с6ьк. 6йт. 6й6тс. 6йф. 6йх. 6йц. 6йч. 6йш. 6кв. 6кк. 6кл. 6к6ль. 6кр. 6кс. 6к6ст. 6к6сь. 6кт. 6к6тр. 6кх. 6кш. 6лб. 6лг. 6лд. 6лк. 6лл. 6л6ль. 6лм. 6л6мс. 6лн. 6лп. 6лс. 6лт. 6л6хв. 6ль. 6л6ьб. 6л6ьв. 6л6ьг. 6л6ьд. 6л6ь6дс. 6л6ьз. 6л6ьк. 6л6ьм. 6л6ьн. 6л6ьп. 6л6ьс. 6л6ь6ств. 6л6ь6сь. 6л6ь6ськ. 6л6ьт. 6л6ь6тр. 6л6ьф. 6л6ьх. 6л6ьц. 6л6ьч. 6л6ьш. 6л6ьщ. 6мб. 6м6б6ль. 6м6бр. 6мг. 6мж. 6мк. 6мл. 6м6ль. 6мм. 6мн. 6мп. 6мр. 6мс. 6м6с6тв. 6м6сь. 6м6с6ьк. 6мт. 6мф. 6мх. 6мш. 6нв. 6нг. 6н6гл. 6н6г6ль. 6н6гр. 6н6гс. 6нд. 6н6дж. 6н6дз. 6н6дп. 6н6др. 6нж. 6нз. 6нк. 6н6кс. 6н6кт. 6нм. 6нн. 6нр. 6нс. 6н6ск. 6н6ст. 6н6с6тв. 6н6с6тр. 6н6с6ьк. 6н6с6ькй. 6нт. 6н6тк. 6н6тр. 6н6т6ств. 6н6ть. 6нф. 6нх. 6нц. 6н6ць. 6нч. 6нш. 6нь. 6н6ьб. 6н6ьг. 6н6ьк. 6н6ь6сь. 6пд. 6пл. 6пр. 6пс. 6п6с6тв. 6п6сь. 6пт. 6п6тр. 6пф. 6пц. 6рб. 6рв. 6рг. 6рд. 6р6дв. 6р6дж. 6р6дь. 6рж. 6рз. 6р6зн. 6р6зь. 6рк. 6р6кс. 6р6кт. 6рл. 6р6ль. 6р6л6ьз. 6рм. 6рн. 6р6нс. 6р6н6ст. 6р6нь. 6рп. 6рр. 6рс. 6р6ср. 6р6ст. 6р6с6тв. 6р6с6ть. 6р6сь. 6р6с6ьк. 6рт. 6р6тв. 6р6тр. 6р6ть. 6рф. 6рх. 6рц. 6р6ць. 6рч. 6рш. 6рщ. 6р6щ6сь. 6рь. 6с6дп. 6с6д6рп. 6ск. 6сл. 6с6ль. 6см. 6сн. 6сп. 6сс. 6ст. 6с6тв. 6с6тй. 6с6тм. 6с6тр. 6с6т6рь. 6с6ть. 6с6ць. 6сь. 6с6ьб. 6с6ьк. 6с6ьм. 6тв. 6т6вт. 6т6зт. 6тл. 6т6ль. 6тм. 6т6мр. 6тр. 6тс. 6т6с6тв. 6т6с6ьк. 6тт. 6тц. 6тч. 6ть. 6т6ь6сь. 6фм. 6фр. 6ф6с6тв. 6фт. 6ф6ть. 6фф. 6фь. 6хв. 6хм. 6хн. 6хр. 6хт. 6хш. 6ц6тв. 6ць. 6ц6ьк. 6чб. 6чм. 6чн. 6чт. 6шв. 6ш6ль. 6шм. 6шн. 6ш6нл. 6ш6сь. 6шт. 6ш6тв. 6щ6сь. .бе4з'3 .бе4з’3 .бе4з3 .безу4 .бе5з4о3д .без5о4соб .безві4д3 .без3ро4з3 виї4 .ві5д4ом .ві5д4озв .ві5д4ун віду4ч .ві5д4а .ві5д4ер .ві5д4і .ві4д3 .від'3 .від’3 .мі4ж3 безві4д3 ові4д3 ді4єві4д3 за4вві4д3 неві4д'3 неві4д’3 неві4д3 про4ф3ві4д3 спе4ц3ві4д3 співві4д3 те4х3ві4д3 .пере4д3бач .пере4д3виб .пере4д3г .пере4д3д .пере4д3м .пере4д3ост .пере4д3пла .пере4д3пок .пере4д3р .пере4д3св .пере4д3умов .пере4д3усі .пере4д3фр .пере4д3ч .пере4д'3 .пере4д’3 .пере3 .пона4д3 .пона5д4і .пона5д4и .пона5д4я 3п4ре 3п4ри приї4 3п4ро 3п4рі .пі5д4о .пі5д4і .під'3 .під’3 .пі4д3 .пі5д4е .пі5д4и .пі5д4у .пі4в3 .спі4в3 .напі4в3 .ро5з4і .ро5з4е ро5з4йом .ро5з4а .ро4з'3 .ро4з’3 .ро4з3 .чере4з'3 .чере4з’3 .чере4з3 оо4б ооб'3 ооб’3 ооб3м ооб3ро об'3 об’3 од'3 од’3 на4д'3 на4д’3 за5о4р до5о4р по5о4р пере5о4р пі6д5о4р бе4з5і4дей до3в'4є до3в’4є за3в'4є за3в’4є зі3в'4є зі3в’4є обі3в'4є обі3в’4є по3в'4є по3в’4є уі3в'4є уі3в’4є з3в'4я з3в’4я по3в'4я по3в’4я від3в'4я від3в’4я за3в'4я за3в’4я зі3в'4я зі3в’4я за3ю4ш на3в'4я на3в’4я непо3в'4я непо3в’4я об3в'4я об3в’4я при3в'4я при3в’4я під3в'4я під3в’4я у3в'4я у3в’4я з3м'4я з3м’4я зі3м'4я зі3м’4я у3м'4я у3м’4я в3м'4я в3м’4я но3м'4я но3м’4я за3м'4я за3м’4я на3м'4я на3м’4я об3м'4я об3м’4я пере3м'4я пере3м’4я по3м'4я по3м’4я при3м'4я при3м’4я піді3м'4я піді3м’4я су3м'4я су3м’4я до3в'4ю до3в’4ю за3в'4ю за3в’4ю зі3в'4ю зі3в’4ю на3в'4ю на3в’4ю по3в'4ю по3в’4ю уі3в'4ю уі3в’4ю інтер3в'4ю інтер3в’4ю за3я4ло коу4роч зу4роч наду4роч позау4роч поу4роч приу4роч на4й3у4бог нао4р прио4р неу4к 3в4б4лаг 3в4к4лад 3в4п4лив 3в4п4равн 3в4р4одлив 3в4т4рут 3в4т4руч 3з4б4рой 3з4б4рою 3з4б4роє 3з4в4'яз 3з4в4’яз 3й4ш4л 3м4к4не 3м4к4ну 3м4к4ні 3п4с4ков 3с4к4лад 3с4к4ле 3с4к4лит 3с4к4ло 3с4к4рипт 3с4п4лав 3с4п4лат 3с4п4лач 3с4п4рав 3с4п4ритн 3с4п4рият 3с4п4ромо 3с4т4вор 3с4т4ражд 3с4т4рах 3с4т4риб 3с4т4риж 3с4т4рой 3с4т4рок 3с4т4ром 3с4т4роф 3с4т4роч 3с4т4рою 3с4т4роя 3с4т4роє 3с4т4рої 3с4т4рукт 3с4т4рукц 3с4т4рій 3с4т4ріл 3с4т4річ 3т4к4нен 3т4ь4мар 3т4ь4мяні 3у4п4рав 3блаж 3ближ 3близ 3блиск 3блок 3блоці 3бран 3брати 3брест 3бризк 3британ 3бруд 3в4бив 3в4веден 3в4дал 3в4довз 3в4довол 3в4живан 3в4лад 3в4ласн 3в4лашт 3в4лов 3в4певн 3в4поряд 3в4разлив 3в4рожай 3в4сюд 3в4тіл 3глад 3глиб 3глин 3глоб 3глуз 3глуш 3гляд 3глян 3гнан 3гнил 3гноз 3гнучк 3грав 3град 3грай 3грам 3гран 3грати 3граф 3граш 3граю 3грає 3грес 3грець 3гроб 3грож 3гроз 3громад 3груван 3грунт 3груп 3грів 3гріт 3гріш 3г4ідро 3д4ан 3д4бав 3д4бал 3д4бан 3д4бат 3д4бає 3двиг 3двою 3двоє 3двій 3двір 3двічі 3драж 3дром 3друж 3друк 3дряп 3дріб 3дріма 3жвав 3жміть 3жріть 3з4бага 3з4баланс 3з4був 3з4бут 3зваж 3зван 3звед 3звел 3звест 3звись 3звич 3звищ 3зворуш 3звук 3звуч 3звіт 3з4год 3з4дат 3з4довж 3з4доров 3з4дійсн 3змін 3зйом 3зміш 3знав 3знай 3знак 3знал 3знан 3знат 3знаход 3знач 3знаю 3знає 3зниж 3знім 3зрозум 3зрюв 3зрів 3зріл 3зрін 3з4чеп 3й4ма 3й4менн 3й4мищ 3й4мовірн 3й4му. 3й4муть 3й4міть 3й4шов 3м4нож 3м4ріть 3м4щен 3п4сов 3п4сон 3п4сув 3р4вав 3р4вати 3р4віть 3с4кид 3с4кок 3с4коп 3с4кор 3с4короч 3с4коч 3с4кіль 3с4кіпл 3с4пад 3с4пект 3с4перм 3с4пин 3с4повід 3с4пожив 3с4постер 3с4пі 3с4піть 3с4піш 3с4табіл 3с4тав 3с4тад 3с4таз 3с4тайн 3с4тал 3с4тан 3с4тар 3с4тара 3с4тат 3с4тач 3с4тає 3с4теп 3с4тереж 3с4теріг 3с4тиг 3с4тиж 3с4тисл 3с4титу 3с4товб 3с4той 3с4торон 3с4торін 3с4тосо 3с4тосу 3с4тою 3с4тоян 3с4туп 3с4тяг 3с4тіб 3с4тій 3с4тіль 3с4тір 3с4фер 3с4хил 3с4хов 3с4хід 3т4кан 3х4то 3ш4код 3ш4кол 3ш4кідл 3ш4кіл 3ш4кір 3ш4таб 3ш4туч 3ґрунт 3а4вторит 3а4гент 3а4грес 3а4декват 3а4дитив 3а4зарт 3а4ктив 3а4ктуал 3а4курат 3а4куст 3а4кцепт 3а4кциз 3а4лергі 3а4матор 3а4наліз 3а4натом 3а4парат 3а4пеляц 3а4постол 3а4птеч 3а4ргумен 3а4ромат 3а4соці 3а4спект 3а4тлет 3а4халі 3е4колог 3е4коном 3е4легант 3е4лектр 3е4лемент 3е4моці 3е4мігр 3е4нерг 3е4стакад 3е4стет 3е4тап 3о4б'єдн 3о4б’єдн 3о4б'єкт 3о4б’єкт 3о4береж 3о4бира 3о4борон 3о4бід 3о4біц 3о4даль 3о4дяг 3о4збро 3о4крем 3о4перат 3о4плат 3о4птим 3о4пуст 3о4пуше 3о4пуще 3о4рдинац 3о4ренд 3о4соб 3о4сяжн 3о4холо 3о4хорон 3о4хоч 3о4чисн 3о4чищ 3у4ваг 3у4важ 3у4гав 3у4згод 3у4клад 3у4компл 3у4крупн 3у4люблен 3у4мит 3у4міл 3у4перед 3у4разлив 3у4рбан 3у4рочист 3у4ряд 3у4рядов 3у4спіш 3у4станов 3у4стпіш 3у4сувати 3у4твор 3у4тробн 3я4дерн 3я4зик 3я4кіс 3я4рус 3я4скрав 3є4д3н 3є4дин 3є4писк 3є4рей 3і4зотоп 3і4люстр 3і4мовір 3і4нтенс 3і4нформ 3і4ніціат 3і4снув 3ї4ждж 3ї4зд 3ї4ст 3ї4хав 3ї4хат .заї4к .заї4ц .заї4ч .наї4д 'ї4в ’ї4в 'ї4з ’ї4з 'ї4д ’ї4д 'ї4ж ’ї4ж 'ї4л ’ї4л 'ї4м ’ї4м 'ї4с ’ї4с 'ї4х ’ї4х аві4а авої4д ае4тил альбі5он ахої4д ауді4о ай4с3берг бактері4о ба4с3енер ба4с3антра .бе5зе. бей4сбол бе5кон б'4єть б’4єть бйор4нс бі4о3 бо4г3дан бран4д брі4дж3порт без5і4мен бо4є3гол бо4є3гот бо4є3зап бо4є3здат бо4є3комп бо4є3пост бо4є3прип бори4с5п 4в3антрац вер4х3н ви3й4д вина3й4д ви3й4т вина3й4т від7зна ві5д4ен ві5д4е4о ві5д4ом від5о4браж від5о4браз во4с5ко водо5с4ток водо5з4бір воль4т3метр воль4т3ампер 3в'4яз 3в’4яз ге2ть3ман ге4о го4с4п5роз гі4д5ро5мет 4д7зем дер4ж5а4том дер4ж5а4дм дер4ж5бюдж дер4ж5вид дер4ж5дум дер4ж5замов дер4ж5ком дер4ж5нафт дер4ж5реєс дер4ж3без дер4ж3резерв дер4ж5стр дер4ж5служ двох4а5том джен4тль дисбаланс ди4с3гарм ди4с3квал ди4с3комф ди4с3конт ди4с3кред ди4с3крет ди4с3крец ди4с3крим ди4с3кусі ди4с3куту ди4с3лок ди4с3парит ди4с3перс ди4с3петч ди4с3пле ди4с3плей ди4с3пози ди4с3проп ди4с3пут ди4с3тил ди4с3триб ди4с3троф ди4с3функц ді3й4т ді3й4д д4ні3п4р .дої4в .дої4л .дої5ль дої4д дої4м дої4х дої4ж дої4ст до3з4вол до3з4віл дорого5в4каз еу4стр ео4сві енерго3з4береж енерго3з4беріг ек2с1к ек2с1п ек2с1т ек2с1ц єв4р3атом єпі4с5коп єпи4с5коп за4п3част заї4д заї4ж заї4з заї4л заї4м заї4х зе4кономити 3з'4ясо 3з’4ясо зна3й4д зна3й4т зо4ка зо4ке зо4ки зо4ку зо4кі игої4д ий4ти іе4тил і4л3е4тил ій4ти інфор4м3аген йо4сві каза4х3стан квої4д корої4д квар4т3плат киї4венер кон4трре кон4тр3арг жко4м5а4том кому4ненерг мі4н5е4ко мі4н5е4нер мо4к5рий 3м'4якш 3м’4якш 3м'4ят 3м’4ят на3б4лиз на3в4ряд на3в4ча на3з4в на4д7з4в наї4вс наї4вш наї4ж наї4з наї4л наї4м наї4с наї4х на4й3а на4й3е на4й3обереж на4й7о4бер на4й7о4гид на4й7о4гол на4й7о4гряд на4й7о4пук на4й7о4хай на4й3масл на4й3спри на4й3якіс на3в4чен на3в4чіть не3в4том не3д4бан на3д4бан не3з4вич не3з4важ нео4пал недої4 неї4ст на5п4лив ні4т5рат оної4д оо4пал ео4пал обі3д4ран обі3й4д обі3й4т об5у4мов онаї4д оо4сві оо4к оу4стр оа4том об4лдер4ж об4л3а4дмін переї4д переї4ж переї4з переї4л переї4с переї4х пере5п4лив пере3й4д пре4й4с пере3й4т перег4ній перед5о4бід пере3в4том пере4д5см перед5у4мов під5о4дин пів5о4с4тр пі5в4ень по3б4лизу по3в4тор поч4не поч4ни поч4ну поя4в по3в4чен по3в4чіть по3д4роб по3д4раз по3д4во по5ж4ніть по5з4бав .пої4 пої4д прої4 пої4зд по4с4т5радян по4с4т5кому по4с4т3декр по4с4т3контра по4с4т3менопауз по4с4тприват по4с4т3раді по4с4т5соці пос4т3кап пос4т3ком пос4т3нат пос4т3проц пос4т3соц пос4т3фікс при3й4т про3с4тирад про4ф3с полі4т5екон пор4т3н пор4т3рет пор4т3фел при3й4д при4нцип про4ект3н про3б4лем про4м3май пр4о5плат раді4о рай3в4но ро4з5д4во ро4з5мінний роз5у4чен роз5і4мен роз5вант роз5вин роз5вит ро4з5діл ро4з5гор ро4з5вер ро4з5чеп ро4з'5єдн ро4з’5єдн з'4єдн з’4єдн руко5с4тиск ро5з4ум ро4з3гром ро4з3лив рмої4д сан4к4т3 сеї4д серцеї4д спе4ц3кур спе4ц3мон спе4цпр спе4ц3с спор4т3вир спор4т3зал спор4т3ком спор4т3клуб спор4т3май спор4т4с3ме сор4тн 3с4промож сь4квуг стат5упр тор4г3пред тран4с3 тур4к3мен цук3ро у4к4р укр3а4вт укр3а4гр укр3е4кс укр3і4н4банк убої4д чорно3б4рив цен4т4р3енерг ясої4д ви3у4ч за3у4ч на3у4ч недо3у4ч не3у4ч під3у4ч пед3у4чи пере3у4ч само3у4ч вия4в з'я4в з’я4в зая4в ная4в уя4в во4євод во4єнач сво4єчас сво4єкорис сво4єрід хво4є3г4риз гелі4о ді4о еті4о мі4о і4он полі4о соці4о фізі4о хімі4о гоме4о ді4алог ді4оген дея4к оо4динок ао4пік ао4ха ео4ха зо6о ка5нал оі4зол міжу4соб мете4о абия4к нія4к вия4сн най3я4сн нея4сн поя4сн проя4сн роз'я4сн роз’я4сн ро5з4ора. ро5з4о5рам ро5з4орах ро5з4ори ро5з4оро ро5з4ору ро5з4оря ро5з4орю ро5з4орі ро6з5о4ри. розо4ра розо4ре розо4реш розо4рн напоу4м неа4би ео4цін оо4цін доу4к доу4м ео4бур ео4голош ео4зор бальне4о не4оліт не4омальт не4оклас не4окомун не4оландш не4олог не4олібер не4онац не4офіт нею4н нея4к нея4рок но4к3а4ут пі5в4оні піво4с пале4о па4н3о4тець .пе4ом. д3у4сім п4о5бере ао4хот ое4ко ео4хот ео4щад ао4щад оо4чищ поя4с роз'я4р роз’я4р те4одоліт те4олог те4ософ оо4біг оу4сун оу4ком пів3о4вал а3у4дар о3у4дар з3у4дар в3у4дар контр3у4дар о3о4кисл и3о4кисл ень7о4кисл е3о4кисл х3о4кисл и3і4стор о3і4стор і3і4стор а3і4стор я3і4стор е3і4стор наді4стор най3і4стор пів3і4стор перед3і4стор пост3і4стор ар4т3афіш ар4т3взвод ар4т3десант ар4т3кафе ар4т3майс ар4т3медіа ар4т3мейс ар4т3мін ар4т3о4бстр ар4т3о4дин ар4т3о4збр ар4т3під ар4т3рин ар4т3у4стан ар4т3факт ар4т3хім ар4т3центр наді4стот найі4стот еі4стот оі4стот ау4т3екол оо4чист з3а4кт оа4кт еа4кт гіпер3а4кт найа4кт піва4кт ао4браз ео4браз оо4браз граф3о4браз най3о4браз супер3о4браз ар4т3мейст баге4р3мейст бале4т3мейст бран4д3мейст ва4ль4д3мейст ве4ль4т3мейст го4ф3мейст гро4с3мейст декре4т3мейст до4к3мейст капе4ль3мейст кварти4р3мейст конце4р4т3мейст кра4н3мейст полі4ц3мейст по4ш4т3мейст фо4р4с4т3мейст хо4р3мейст шапі4т3мейст шта4л3мейст єге4р3мейст иа4варі яа4варі оа4варі еа4варі беза4варі між3а4варі над3а4варі пост3а4варі напів3а4варі перед3а4варі супер3а4варі аа4дрес еа4дрес оа4дрес іа4дрес без3а4дрес ае4фект ее4фект ое4фект най3е4фект супер3е4фект ое4місі ие4місі яе4місі ее4місі безе4місі гіпер3е4місі еу4бог й3у4бог ий4ня зай4ня здій4ня най4ня обій4ня перей4ня підій4ня прий4м пій4м дій4ма вий4м най4ма зай4м д4о3й4м обой4м прой4м обій4м перей4м безу4гл безу4пин бло4к3пост .блі4ц3ана .блі4ц3криг .блі4ц3опит .блі4ц3торг .блі4ц3тур .блі4ц3і4спит о3а4наліз бак3а4наліз ц3а4наліз ген3а4наліз з3а4наліз м3а4наліз нт3а4наліз між3а4наліз полі3а4наліз ре3а4наліз оу4год ау4год еу4год пів3у4год роз3у4год гос4п3у4год ео4пис оо4пис ао4пис бо4р4т3мех бо4р4т3о4пер бо4р4т3про бо4р4т3рад бо4р4т3і4нж оа4каці оу4с оо4держ оа4на біблі4о .на3в4ч .ви3в4ч .до3в4ч .за3в4ч .по3в4ч .при3в4ч ана3в4ч ена3в4ч мона3в4ч жона3в4ч іона3в4ч ови3в4ч еви3в4ч едо3в4ч оза3в4ч по3в4ча .ом4рі е3м4рій .ви3м4р .віді3м4р .зав3м4р .за3м4р .зі3м4р .на3м4р .пере3м4р .по3м4р .при3м4р .роз3м4р .ум4ри .ум4рі .ум4ру .ум4ре во4станнє най3о4станн перед3о4станн ие4стет ое4стет ее4стет й3е4стет пан3е4стет пар3е4стет оо4ктан іо4ктан оо4плачув ео4плачув перед3о4пла виу4ди о3в4каз е3в4каз 8-7 --8 .а-8 .б-8 .в-8 .г-8 .ґ-8 .д-8 .е-8 .є-8 .ж-8 .з-8 .и-8 .і-8 .ї-8 .й-8 .к-8 .л-8 .м-8 .н-8 .о-8 .п-8 .р-8 .с-8 .т-8 .у-8 .ф-8 .х-8 .ц-8 .ч-8 .ш-8 .щ-8 .ь-8 .ю-8 .я-8 .'-8 .’-8 -а8а8 8а8а- -а8б8 8а8б- -а8в8 8а8в- -а8г8 8а8г- -а8ґ8 8а8ґ- -а8д8 8а8д- -а8е8 8а8е- -а8є8 8а8є- -а8ж8 8а8ж- -а8з8 8а8з- -а8и8 8а8и- -а8і8 8а8і- -а8ї8 8а8ї- -а8й8 8а8й- -а8к8 8а8к- -а8л8 8а8л- -а8м8 8а8м- -а8н8 8а8н- -а8о8 8а8о- -а8п8 8а8п- -а8р8 8а8р- -а8с8 8а8с- -а8т8 8а8т- -а8у8 8а8у- -а8ф8 8а8ф- -а8х8 8а8х- -а8ц8 8а8ц- -а8ч8 8а8ч- -а8ш8 8а8ш- -а8щ8 8а8щ- -а8ь8 8а8ь- -а8ю8 8а8ю- -а8я8 8а8я- -а8'8 -а8’8 8а8'- 8а8’- -б8а8 8б8а- -б8б8 8б8б- -б8в8 8б8в- -б8г8 8б8г- -б8ґ8 8б8ґ- -б8д8 8б8д- -б8е8 8б8е- -б8є8 8б8є- -б8ж8 8б8ж- -б8з8 8б8з- -б8и8 8б8и- -б8і8 8б8і- -б8ї8 8б8ї- -б8й8 8б8й- -б8к8 8б8к- -б8л8 8б8л- -б8м8 8б8м- -б8н8 8б8н- -б8о8 8б8о- -б8п8 8б8п- -б8р8 8б8р- -б8с8 8б8с- -б8т8 8б8т- -б8у8 8б8у- -б8ф8 8б8ф- -б8х8 8б8х- -б8ц8 8б8ц- -б8ч8 8б8ч- -б8ш8 8б8ш- -б8щ8 8б8щ- -б8ь8 8б8ь- -б8ю8 8б8ю- -б8я8 8б8я- -б8'8 -б8’8 8б8'- 8б8’- -в8а8 8в8а- -в8б8 8в8б- -в8в8 8в8в- -в8г8 8в8г- -в8ґ8 8в8ґ- -в8д8 8в8д- -в8е8 8в8е- -в8є8 8в8є- -в8ж8 8в8ж- -в8з8 8в8з- -в8и8 8в8и- -в8і8 8в8і- -в8ї8 8в8ї- -в8й8 8в8й- -в8к8 8в8к- -в8л8 8в8л- -в8м8 8в8м- -в8н8 8в8н- -в8о8 8в8о- -в8п8 8в8п- -в8р8 8в8р- -в8с8 8в8с- -в8т8 8в8т- -в8у8 8в8у- -в8ф8 8в8ф- -в8х8 8в8х- -в8ц8 8в8ц- -в8ч8 8в8ч- -в8ш8 8в8ш- -в8щ8 8в8щ- -в8ь8 8в8ь- -в8ю8 8в8ю- -в8я8 8в8я- -в8'8 -в8’8 8в8'- 8в8’- -г8а8 8г8а- -г8б8 8г8б- -г8в8 8г8в- -г8г8 8г8г- -г8ґ8 8г8ґ- -г8д8 8г8д- -г8е8 8г8е- -г8є8 8г8є- -г8ж8 8г8ж- -г8з8 8г8з- -г8и8 8г8и- -г8і8 8г8і- -г8ї8 8г8ї- -г8й8 8г8й- -г8к8 8г8к- -г8л8 8г8л- -г8м8 8г8м- -г8н8 8г8н- -г8о8 8г8о- -г8п8 8г8п- -г8р8 8г8р- -г8с8 8г8с- -г8т8 8г8т- -г8у8 8г8у- -г8ф8 8г8ф- -г8х8 8г8х- -г8ц8 8г8ц- -г8ч8 8г8ч- -г8ш8 8г8ш- -г8щ8 8г8щ- -г8ь8 8г8ь- -г8ю8 8г8ю- -г8я8 8г8я- -г8'8 -г8’8 8г8'- 8г8’- -ґ8а8 8ґ8а- -ґ8б8 8ґ8б- -ґ8в8 8ґ8в- -ґ8г8 8ґ8г- -ґ8ґ8 8ґ8ґ- -ґ8д8 8ґ8д- -ґ8е8 8ґ8е- -ґ8є8 8ґ8є- -ґ8ж8 8ґ8ж- -ґ8з8 8ґ8з- -ґ8и8 8ґ8и- -ґ8і8 8ґ8і- -ґ8ї8 8ґ8ї- -ґ8й8 8ґ8й- -ґ8к8 8ґ8к- -ґ8л8 8ґ8л- -ґ8м8 8ґ8м- -ґ8н8 8ґ8н- -ґ8о8 8ґ8о- -ґ8п8 8ґ8п- -ґ8р8 8ґ8р- -ґ8с8 8ґ8с- -ґ8т8 8ґ8т- -ґ8у8 8ґ8у- -ґ8ф8 8ґ8ф- -ґ8х8 8ґ8х- -ґ8ц8 8ґ8ц- -ґ8ч8 8ґ8ч- -ґ8ш8 8ґ8ш- -ґ8щ8 8ґ8щ- -ґ8ь8 8ґ8ь- -ґ8ю8 8ґ8ю- -ґ8я8 8ґ8я- -ґ8'8 -ґ8’8 8ґ8'- 8ґ8’- -д8а8 8д8а- -д8б8 8д8б- -д8в8 8д8в- -д8г8 8д8г- -д8ґ8 8д8ґ- -д8д8 8д8д- -д8е8 8д8е- -д8є8 8д8є- -д8ж8 8д8ж- -д8з8 8д8з- -д8и8 8д8и- -д8і8 8д8і- -д8ї8 8д8ї- -д8й8 8д8й- -д8к8 8д8к- -д8л8 8д8л- -д8м8 8д8м- -д8н8 8д8н- -д8о8 8д8о- -д8п8 8д8п- -д8р8 8д8р- -д8с8 8д8с- -д8т8 8д8т- -д8у8 8д8у- -д8ф8 8д8ф- -д8х8 8д8х- -д8ц8 8д8ц- -д8ч8 8д8ч- -д8ш8 8д8ш- -д8щ8 8д8щ- -д8ь8 8д8ь- -д8ю8 8д8ю- -д8я8 8д8я- -д8'8 -д8’8 8д8'- 8д8’- -е8а8 8е8а- -е8б8 8е8б- -е8в8 8е8в- -е8г8 8е8г- -е8ґ8 8е8ґ- -е8д8 8е8д- -е8е8 8е8е- -е8є8 8е8є- -е8ж8 8е8ж- -е8з8 8е8з- -е8и8 8е8и- -е8і8 8е8і- -е8ї8 8е8ї- -е8й8 8е8й- -е8к8 8е8к- -е8л8 8е8л- -е8м8 8е8м- -е8н8 8е8н- -е8о8 8е8о- -е8п8 8е8п- -е8р8 8е8р- -е8с8 8е8с- -е8т8 8е8т- -е8у8 8е8у- -е8ф8 8е8ф- -е8х8 8е8х- -е8ц8 8е8ц- -е8ч8 8е8ч- -е8ш8 8е8ш- -е8щ8 8е8щ- -е8ь8 8е8ь- -е8ю8 8е8ю- -е8я8 8е8я- -е8'8 -е8’8 8е8'- 8е8’- -є8а8 8є8а- -є8б8 8є8б- -є8в8 8є8в- -є8г8 8є8г- -є8ґ8 8є8ґ- -є8д8 8є8д- -є8е8 8є8е- -є8є8 8є8є- -є8ж8 8є8ж- -є8з8 8є8з- -є8и8 8є8и- -є8і8 8є8і- -є8ї8 8є8ї- -є8й8 8є8й- -є8к8 8є8к- -є8л8 8є8л- -є8м8 8є8м- -є8н8 8є8н- -є8о8 8є8о- -є8п8 8є8п- -є8р8 8є8р- -є8с8 8є8с- -є8т8 8є8т- -є8у8 8є8у- -є8ф8 8є8ф- -є8х8 8є8х- -є8ц8 8є8ц- -є8ч8 8є8ч- -є8ш8 8є8ш- -є8щ8 8є8щ- -є8ь8 8є8ь- -є8ю8 8є8ю- -є8я8 8є8я- -є8'8 -є8’8 8є8'- 8є8’- -ж8а8 8ж8а- -ж8б8 8ж8б- -ж8в8 8ж8в- -ж8г8 8ж8г- -ж8ґ8 8ж8ґ- -ж8д8 8ж8д- -ж8е8 8ж8е- -ж8є8 8ж8є- -ж8ж8 8ж8ж- -ж8з8 8ж8з- -ж8и8 8ж8и- -ж8і8 8ж8і- -ж8ї8 8ж8ї- -ж8й8 8ж8й- -ж8к8 8ж8к- -ж8л8 8ж8л- -ж8м8 8ж8м- -ж8н8 8ж8н- -ж8о8 8ж8о- -ж8п8 8ж8п- -ж8р8 8ж8р- -ж8с8 8ж8с- -ж8т8 8ж8т- -ж8у8 8ж8у- -ж8ф8 8ж8ф- -ж8х8 8ж8х- -ж8ц8 8ж8ц- -ж8ч8 8ж8ч- -ж8ш8 8ж8ш- -ж8щ8 8ж8щ- -ж8ь8 8ж8ь- -ж8ю8 8ж8ю- -ж8я8 8ж8я- -ж8'8 -ж8’8 8ж8'- 8ж8’- -з8а8 8з8а- -з8б8 8з8б- -з8в8 8з8в- -з8г8 8з8г- -з8ґ8 8з8ґ- -з8д8 8з8д- -з8е8 8з8е- -з8є8 8з8є- -з8ж8 8з8ж- -з8з8 8з8з- -з8и8 8з8и- -з8і8 8з8і- -з8ї8 8з8ї- -з8й8 8з8й- -з8к8 8з8к- -з8л8 8з8л- -з8м8 8з8м- -з8н8 8з8н- -з8о8 8з8о- -з8п8 8з8п- -з8р8 8з8р- -з8с8 8з8с- -з8т8 8з8т- -з8у8 8з8у- -з8ф8 8з8ф- -з8х8 8з8х- -з8ц8 8з8ц- -з8ч8 8з8ч- -з8ш8 8з8ш- -з8щ8 8з8щ- -з8ь8 8з8ь- -з8ю8 8з8ю- -з8я8 8з8я- -з8'8 -з8’8 8з8'- 8з8’- -и8а8 8и8а- -и8б8 8и8б- -и8в8 8и8в- -и8г8 8и8г- -и8ґ8 8и8ґ- -и8д8 8и8д- -и8е8 8и8е- -и8є8 8и8є- -и8ж8 8и8ж- -и8з8 8и8з- -и8и8 8и8и- -и8і8 8и8і- -и8ї8 8и8ї- -и8й8 8и8й- -и8к8 8и8к- -и8л8 8и8л- -и8м8 8и8м- -и8н8 8и8н- -и8о8 8и8о- -и8п8 8и8п- -и8р8 8и8р- -и8с8 8и8с- -и8т8 8и8т- -и8у8 8и8у- -и8ф8 8и8ф- -и8х8 8и8х- -и8ц8 8и8ц- -и8ч8 8и8ч- -и8ш8 8и8ш- -и8щ8 8и8щ- -и8ь8 8и8ь- -и8ю8 8и8ю- -и8я8 8и8я- -и8'8 -и8’8 8и8'- 8и8’- -і8а8 8і8а- -і8б8 8і8б- -і8в8 8і8в- -і8г8 8і8г- -і8ґ8 8і8ґ- -і8д8 8і8д- -і8е8 8і8е- -і8є8 8і8є- -і8ж8 8і8ж- -і8з8 8і8з- -і8и8 8і8и- -і8і8 8і8і- -і8ї8 8і8ї- -і8й8 8і8й- -і8к8 8і8к- -і8л8 8і8л- -і8м8 8і8м- -і8н8 8і8н- -і8о8 8і8о- -і8п8 8і8п- -і8р8 8і8р- -і8с8 8і8с- -і8т8 8і8т- -і8у8 8і8у- -і8ф8 8і8ф- -і8х8 8і8х- -і8ц8 8і8ц- -і8ч8 8і8ч- -і8ш8 8і8ш- -і8щ8 8і8щ- -і8ь8 8і8ь- -і8ю8 8і8ю- -і8я8 8і8я- -і8'8 -і8’8 8і8'- 8і8’- -ї8а8 8ї8а- -ї8б8 8ї8б- -ї8в8 8ї8в- -ї8г8 8ї8г- -ї8ґ8 8ї8ґ- -ї8д8 8ї8д- -ї8е8 8ї8е- -ї8є8 8ї8є- -ї8ж8 8ї8ж- -ї8з8 8ї8з- -ї8и8 8ї8и- -ї8і8 8ї8і- -ї8ї8 8ї8ї- -ї8й8 8ї8й- -ї8к8 8ї8к- -ї8л8 8ї8л- -ї8м8 8ї8м- -ї8н8 8ї8н- -ї8о8 8ї8о- -ї8п8 8ї8п- -ї8р8 8ї8р- -ї8с8 8ї8с- -ї8т8 8ї8т- -ї8у8 8ї8у- -ї8ф8 8ї8ф- -ї8х8 8ї8х- -ї8ц8 8ї8ц- -ї8ч8 8ї8ч- -ї8ш8 8ї8ш- -ї8щ8 8ї8щ- -ї8ь8 8ї8ь- -ї8ю8 8ї8ю- -ї8я8 8ї8я- -ї8'8 -ї8’8 8ї8'- 8ї8’- -й8а8 8й8а- -й8б8 8й8б- -й8в8 8й8в- -й8г8 8й8г- -й8ґ8 8й8ґ- -й8д8 8й8д- -й8е8 8й8е- -й8є8 8й8є- -й8ж8 8й8ж- -й8з8 8й8з- -й8и8 8й8и- -й8і8 8й8і- -й8ї8 8й8ї- -й8й8 8й8й- -й8к8 8й8к- -й8л8 8й8л- -й8м8 8й8м- -й8н8 8й8н- -й8о8 8й8о- -й8п8 8й8п- -й8р8 8й8р- -й8с8 8й8с- -й8т8 8й8т- -й8у8 8й8у- -й8ф8 8й8ф- -й8х8 8й8х- -й8ц8 8й8ц- -й8ч8 8й8ч- -й8ш8 8й8ш- -й8щ8 8й8щ- -й8ь8 8й8ь- -й8ю8 8й8ю- -й8я8 8й8я- -й8'8 -й8’8 8й8'- 8й8’- -к8а8 8к8а- -к8б8 8к8б- -к8в8 8к8в- -к8г8 8к8г- -к8ґ8 8к8ґ- -к8д8 8к8д- -к8е8 8к8е- -к8є8 8к8є- -к8ж8 8к8ж- -к8з8 8к8з- -к8и8 8к8и- -к8і8 8к8і- -к8ї8 8к8ї- -к8й8 8к8й- -к8к8 8к8к- -к8л8 8к8л- -к8м8 8к8м- -к8н8 8к8н- -к8о8 8к8о- -к8п8 8к8п- -к8р8 8к8р- -к8с8 8к8с- -к8т8 8к8т- -к8у8 8к8у- -к8ф8 8к8ф- -к8х8 8к8х- -к8ц8 8к8ц- -к8ч8 8к8ч- -к8ш8 8к8ш- -к8щ8 8к8щ- -к8ь8 8к8ь- -к8ю8 8к8ю- -к8я8 8к8я- -к8'8 -к8’8 8к8'- 8к8’- -л8а8 8л8а- -л8б8 8л8б- -л8в8 8л8в- -л8г8 8л8г- -л8ґ8 8л8ґ- -л8д8 8л8д- -л8е8 8л8е- -л8є8 8л8є- -л8ж8 8л8ж- -л8з8 8л8з- -л8и8 8л8и- -л8і8 8л8і- -л8ї8 8л8ї- -л8й8 8л8й- -л8к8 8л8к- -л8л8 8л8л- -л8м8 8л8м- -л8н8 8л8н- -л8о8 8л8о- -л8п8 8л8п- -л8р8 8л8р- -л8с8 8л8с- -л8т8 8л8т- -л8у8 8л8у- -л8ф8 8л8ф- -л8х8 8л8х- -л8ц8 8л8ц- -л8ч8 8л8ч- -л8ш8 8л8ш- -л8щ8 8л8щ- -л8ь8 8л8ь- -л8ю8 8л8ю- -л8я8 8л8я- -л8'8 -л8’8 8л8'- 8л8’- -м8а8 8м8а- -м8б8 8м8б- -м8в8 8м8в- -м8г8 8м8г- -м8ґ8 8м8ґ- -м8д8 8м8д- -м8е8 8м8е- -м8є8 8м8є- -м8ж8 8м8ж- -м8з8 8м8з- -м8и8 8м8и- -м8і8 8м8і- -м8ї8 8м8ї- -м8й8 8м8й- -м8к8 8м8к- -м8л8 8м8л- -м8м8 8м8м- -м8н8 8м8н- -м8о8 8м8о- -м8п8 8м8п- -м8р8 8м8р- -м8с8 8м8с- -м8т8 8м8т- -м8у8 8м8у- -м8ф8 8м8ф- -м8х8 8м8х- -м8ц8 8м8ц- -м8ч8 8м8ч- -м8ш8 8м8ш- -м8щ8 8м8щ- -м8ь8 8м8ь- -м8ю8 8м8ю- -м8я8 8м8я- -м8'8 -м8’8 8м8'- 8м8’- -н8а8 8н8а- -н8б8 8н8б- -н8в8 8н8в- -н8г8 8н8г- -н8ґ8 8н8ґ- -н8д8 8н8д- -н8е8 8н8е- -н8є8 8н8є- -н8ж8 8н8ж- -н8з8 8н8з- -н8и8 8н8и- -н8і8 8н8і- -н8ї8 8н8ї- -н8й8 8н8й- -н8к8 8н8к- -н8л8 8н8л- -н8м8 8н8м- -н8н8 8н8н- -н8о8 8н8о- -н8п8 8н8п- -н8р8 8н8р- -н8с8 8н8с- -н8т8 8н8т- -н8у8 8н8у- -н8ф8 8н8ф- -н8х8 8н8х- -н8ц8 8н8ц- -н8ч8 8н8ч- -н8ш8 8н8ш- -н8щ8 8н8щ- -н8ь8 8н8ь- -н8ю8 8н8ю- -н8я8 8н8я- -н8'8 -н8’8 8н8'- 8н8’- -о8а8 8о8а- -о8б8 8о8б- -о8в8 8о8в- -о8г8 8о8г- -о8ґ8 8о8ґ- -о8д8 8о8д- -о8е8 8о8е- -о8є8 8о8є- -о8ж8 8о8ж- -о8з8 8о8з- -о8и8 8о8и- -о8і8 8о8і- -о8ї8 8о8ї- -о8й8 8о8й- -о8к8 8о8к- -о8л8 8о8л- -о8м8 8о8м- -о8н8 8о8н- -о8о8 8о8о- -о8п8 8о8п- -о8р8 8о8р- -о8с8 8о8с- -о8т8 8о8т- -о8у8 8о8у- -о8ф8 8о8ф- -о8х8 8о8х- -о8ц8 8о8ц- -о8ч8 8о8ч- -о8ш8 8о8ш- -о8щ8 8о8щ- -о8ь8 8о8ь- -о8ю8 8о8ю- -о8я8 8о8я- -о8'8 -о8’8 8о8'- 8о8’- -п8а8 8п8а- -п8б8 8п8б- -п8в8 8п8в- -п8г8 8п8г- -п8ґ8 8п8ґ- -п8д8 8п8д- -п8е8 8п8е- -п8є8 8п8є- -п8ж8 8п8ж- -п8з8 8п8з- -п8и8 8п8и- -п8і8 8п8і- -п8ї8 8п8ї- -п8й8 8п8й- -п8к8 8п8к- -п8л8 8п8л- -п8м8 8п8м- -п8н8 8п8н- -п8о8 8п8о- -п8п8 8п8п- -п8р8 8п8р- -п8с8 8п8с- -п8т8 8п8т- -п8у8 8п8у- -п8ф8 8п8ф- -п8х8 8п8х- -п8ц8 8п8ц- -п8ч8 8п8ч- -п8ш8 8п8ш- -п8щ8 8п8щ- -п8ь8 8п8ь- -п8ю8 8п8ю- -п8я8 8п8я- -п8'8 -п8’8 8п8'- 8п8’- -р8а8 8р8а- -р8б8 8р8б- -р8в8 8р8в- -р8г8 8р8г- -р8ґ8 8р8ґ- -р8д8 8р8д- -р8е8 8р8е- -р8є8 8р8є- -р8ж8 8р8ж- -р8з8 8р8з- -р8и8 8р8и- -р8і8 8р8і- -р8ї8 8р8ї- -р8й8 8р8й- -р8к8 8р8к- -р8л8 8р8л- -р8м8 8р8м- -р8н8 8р8н- -р8о8 8р8о- -р8п8 8р8п- -р8р8 8р8р- -р8с8 8р8с- -р8т8 8р8т- -р8у8 8р8у- -р8ф8 8р8ф- -р8х8 8р8х- -р8ц8 8р8ц- -р8ч8 8р8ч- -р8ш8 8р8ш- -р8щ8 8р8щ- -р8ь8 8р8ь- -р8ю8 8р8ю- -р8я8 8р8я- -р8'8 -р8’8 8р8'- 8р8’- -с8а8 8с8а- -с8б8 8с8б- -с8в8 8с8в- -с8г8 8с8г- -с8ґ8 8с8ґ- -с8д8 8с8д- -с8е8 8с8е- -с8є8 8с8є- -с8ж8 8с8ж- -с8з8 8с8з- -с8и8 8с8и- -с8і8 8с8і- -с8ї8 8с8ї- -с8й8 8с8й- -с8к8 8с8к- -с8л8 8с8л- -с8м8 8с8м- -с8н8 8с8н- -с8о8 8с8о- -с8п8 8с8п- -с8р8 8с8р- -с8с8 8с8с- -с8т8 8с8т- -с8у8 8с8у- -с8ф8 8с8ф- -с8х8 8с8х- -с8ц8 8с8ц- -с8ч8 8с8ч- -с8ш8 8с8ш- -с8щ8 8с8щ- -с8ь8 8с8ь- -с8ю8 8с8ю- -с8я8 8с8я- -с8'8 -с8’8 8с8'- 8с8’- -т8а8 8т8а- -т8б8 8т8б- -т8в8 8т8в- -т8г8 8т8г- -т8ґ8 8т8ґ- -т8д8 8т8д- -т8е8 8т8е- -т8є8 8т8є- -т8ж8 8т8ж- -т8з8 8т8з- -т8и8 8т8и- -т8і8 8т8і- -т8ї8 8т8ї- -т8й8 8т8й- -т8к8 8т8к- -т8л8 8т8л- -т8м8 8т8м- -т8н8 8т8н- -т8о8 8т8о- -т8п8 8т8п- -т8р8 8т8р- -т8с8 8т8с- -т8т8 8т8т- -т8у8 8т8у- -т8ф8 8т8ф- -т8х8 8т8х- -т8ц8 8т8ц- -т8ч8 8т8ч- -т8ш8 8т8ш- -т8щ8 8т8щ- -т8ь8 8т8ь- -т8ю8 8т8ю- -т8я8 8т8я- -т8'8 -т8’8 8т8'- 8т8’- -у8а8 8у8а- -у8б8 8у8б- -у8в8 8у8в- -у8г8 8у8г- -у8ґ8 8у8ґ- -у8д8 8у8д- -у8е8 8у8е- -у8є8 8у8є- -у8ж8 8у8ж- -у8з8 8у8з- -у8и8 8у8и- -у8і8 8у8і- -у8ї8 8у8ї- -у8й8 8у8й- -у8к8 8у8к- -у8л8 8у8л- -у8м8 8у8м- -у8н8 8у8н- -у8о8 8у8о- -у8п8 8у8п- -у8р8 8у8р- -у8с8 8у8с- -у8т8 8у8т- -у8у8 8у8у- -у8ф8 8у8ф- -у8х8 8у8х- -у8ц8 8у8ц- -у8ч8 8у8ч- -у8ш8 8у8ш- -у8щ8 8у8щ- -у8ь8 8у8ь- -у8ю8 8у8ю- -у8я8 8у8я- -у8'8 -у8’8 8у8'- 8у8’- -ф8а8 8ф8а- -ф8б8 8ф8б- -ф8в8 8ф8в- -ф8г8 8ф8г- -ф8ґ8 8ф8ґ- -ф8д8 8ф8д- -ф8е8 8ф8е- -ф8є8 8ф8є- -ф8ж8 8ф8ж- -ф8з8 8ф8з- -ф8и8 8ф8и- -ф8і8 8ф8і- -ф8ї8 8ф8ї- -ф8й8 8ф8й- -ф8к8 8ф8к- -ф8л8 8ф8л- -ф8м8 8ф8м- -ф8н8 8ф8н- -ф8о8 8ф8о- -ф8п8 8ф8п- -ф8р8 8ф8р- -ф8с8 8ф8с- -ф8т8 8ф8т- -ф8у8 8ф8у- -ф8ф8 8ф8ф- -ф8х8 8ф8х- -ф8ц8 8ф8ц- -ф8ч8 8ф8ч- -ф8ш8 8ф8ш- -ф8щ8 8ф8щ- -ф8ь8 8ф8ь- -ф8ю8 8ф8ю- -ф8я8 8ф8я- -ф8'8 -ф8’8 8ф8'- 8ф8’- -х8а8 8х8а- -х8б8 8х8б- -х8в8 8х8в- -х8г8 8х8г- -х8ґ8 8х8ґ- -х8д8 8х8д- -х8е8 8х8е- -х8є8 8х8є- -х8ж8 8х8ж- -х8з8 8х8з- -х8и8 8х8и- -х8і8 8х8і- -х8ї8 8х8ї- -х8й8 8х8й- -х8к8 8х8к- -х8л8 8х8л- -х8м8 8х8м- -х8н8 8х8н- -х8о8 8х8о- -х8п8 8х8п- -х8р8 8х8р- -х8с8 8х8с- -х8т8 8х8т- -х8у8 8х8у- -х8ф8 8х8ф- -х8х8 8х8х- -х8ц8 8х8ц- -х8ч8 8х8ч- -х8ш8 8х8ш- -х8щ8 8х8щ- -х8ь8 8х8ь- -х8ю8 8х8ю- -х8я8 8х8я- -х8'8 -х8’8 8х8'- 8х8’- -ц8а8 8ц8а- -ц8б8 8ц8б- -ц8в8 8ц8в- -ц8г8 8ц8г- -ц8ґ8 8ц8ґ- -ц8д8 8ц8д- -ц8е8 8ц8е- -ц8є8 8ц8є- -ц8ж8 8ц8ж- -ц8з8 8ц8з- -ц8и8 8ц8и- -ц8і8 8ц8і- -ц8ї8 8ц8ї- -ц8й8 8ц8й- -ц8к8 8ц8к- -ц8л8 8ц8л- -ц8м8 8ц8м- -ц8н8 8ц8н- -ц8о8 8ц8о- -ц8п8 8ц8п- -ц8р8 8ц8р- -ц8с8 8ц8с- -ц8т8 8ц8т- -ц8у8 8ц8у- -ц8ф8 8ц8ф- -ц8х8 8ц8х- -ц8ц8 8ц8ц- -ц8ч8 8ц8ч- -ц8ш8 8ц8ш- -ц8щ8 8ц8щ- -ц8ь8 8ц8ь- -ц8ю8 8ц8ю- -ц8я8 8ц8я- -ц8'8 -ц8’8 8ц8'- 8ц8’- -ч8а8 8ч8а- -ч8б8 8ч8б- -ч8в8 8ч8в- -ч8г8 8ч8г- -ч8ґ8 8ч8ґ- -ч8д8 8ч8д- -ч8е8 8ч8е- -ч8є8 8ч8є- -ч8ж8 8ч8ж- -ч8з8 8ч8з- -ч8и8 8ч8и- -ч8і8 8ч8і- -ч8ї8 8ч8ї- -ч8й8 8ч8й- -ч8к8 8ч8к- -ч8л8 8ч8л- -ч8м8 8ч8м- -ч8н8 8ч8н- -ч8о8 8ч8о- -ч8п8 8ч8п- -ч8р8 8ч8р- -ч8с8 8ч8с- -ч8т8 8ч8т- -ч8у8 8ч8у- -ч8ф8 8ч8ф- -ч8х8 8ч8х- -ч8ц8 8ч8ц- -ч8ч8 8ч8ч- -ч8ш8 8ч8ш- -ч8щ8 8ч8щ- -ч8ь8 8ч8ь- -ч8ю8 8ч8ю- -ч8я8 8ч8я- -ч8'8 -ч8’8 8ч8'- 8ч8’- -ш8а8 8ш8а- -ш8б8 8ш8б- -ш8в8 8ш8в- -ш8г8 8ш8г- -ш8ґ8 8ш8ґ- -ш8д8 8ш8д- -ш8е8 8ш8е- -ш8є8 8ш8є- -ш8ж8 8ш8ж- -ш8з8 8ш8з- -ш8и8 8ш8и- -ш8і8 8ш8і- -ш8ї8 8ш8ї- -ш8й8 8ш8й- -ш8к8 8ш8к- -ш8л8 8ш8л- -ш8м8 8ш8м- -ш8н8 8ш8н- -ш8о8 8ш8о- -ш8п8 8ш8п- -ш8р8 8ш8р- -ш8с8 8ш8с- -ш8т8 8ш8т- -ш8у8 8ш8у- -ш8ф8 8ш8ф- -ш8х8 8ш8х- -ш8ц8 8ш8ц- -ш8ч8 8ш8ч- -ш8ш8 8ш8ш- -ш8щ8 8ш8щ- -ш8ь8 8ш8ь- -ш8ю8 8ш8ю- -ш8я8 8ш8я- -ш8'8 -ш8’8 8ш8'- 8ш8’- -щ8а8 8щ8а- -щ8б8 8щ8б- -щ8в8 8щ8в- -щ8г8 8щ8г- -щ8ґ8 8щ8ґ- -щ8д8 8щ8д- -щ8е8 8щ8е- -щ8є8 8щ8є- -щ8ж8 8щ8ж- -щ8з8 8щ8з- -щ8и8 8щ8и- -щ8і8 8щ8і- -щ8ї8 8щ8ї- -щ8й8 8щ8й- -щ8к8 8щ8к- -щ8л8 8щ8л- -щ8м8 8щ8м- -щ8н8 8щ8н- -щ8о8 8щ8о- -щ8п8 8щ8п- -щ8р8 8щ8р- -щ8с8 8щ8с- -щ8т8 8щ8т- -щ8у8 8щ8у- -щ8ф8 8щ8ф- -щ8х8 8щ8х- -щ8ц8 8щ8ц- -щ8ч8 8щ8ч- -щ8ш8 8щ8ш- -щ8щ8 8щ8щ- -щ8ь8 8щ8ь- -щ8ю8 8щ8ю- -щ8я8 8щ8я- -щ8'8 -щ8’8 8щ8'- 8щ8’- -ь8а8 8ь8а- -ь8б8 8ь8б- -ь8в8 8ь8в- -ь8г8 8ь8г- -ь8ґ8 8ь8ґ- -ь8д8 8ь8д- -ь8е8 8ь8е- -ь8є8 8ь8є- -ь8ж8 8ь8ж- -ь8з8 8ь8з- -ь8и8 8ь8и- -ь8і8 8ь8і- -ь8ї8 8ь8ї- -ь8й8 8ь8й- -ь8к8 8ь8к- -ь8л8 8ь8л- -ь8м8 8ь8м- -ь8н8 8ь8н- -ь8о8 8ь8о- -ь8п8 8ь8п- -ь8р8 8ь8р- -ь8с8 8ь8с- -ь8т8 8ь8т- -ь8у8 8ь8у- -ь8ф8 8ь8ф- -ь8х8 8ь8х- -ь8ц8 8ь8ц- -ь8ч8 8ь8ч- -ь8ш8 8ь8ш- -ь8щ8 8ь8щ- -ь8ь8 8ь8ь- -ь8ю8 8ь8ю- -ь8я8 8ь8я- -ь8'8 -ь8’8 8ь8'- 8ь8’- -ю8а8 8ю8а- -ю8б8 8ю8б- -ю8в8 8ю8в- -ю8г8 8ю8г- -ю8ґ8 8ю8ґ- -ю8д8 8ю8д- -ю8е8 8ю8е- -ю8є8 8ю8є- -ю8ж8 8ю8ж- -ю8з8 8ю8з- -ю8и8 8ю8и- -ю8і8 8ю8і- -ю8ї8 8ю8ї- -ю8й8 8ю8й- -ю8к8 8ю8к- -ю8л8 8ю8л- -ю8м8 8ю8м- -ю8н8 8ю8н- -ю8о8 8ю8о- -ю8п8 8ю8п- -ю8р8 8ю8р- -ю8с8 8ю8с- -ю8т8 8ю8т- -ю8у8 8ю8у- -ю8ф8 8ю8ф- -ю8х8 8ю8х- -ю8ц8 8ю8ц- -ю8ч8 8ю8ч- -ю8ш8 8ю8ш- -ю8щ8 8ю8щ- -ю8ь8 8ю8ь- -ю8ю8 8ю8ю- -ю8я8 8ю8я- -ю8'8 -ю8’8 8ю8'- 8ю8’- -я8а8 8я8а- -я8б8 8я8б- -я8в8 8я8в- -я8г8 8я8г- -я8ґ8 8я8ґ- -я8д8 8я8д- -я8е8 8я8е- -я8є8 8я8є- -я8ж8 8я8ж- -я8з8 8я8з- -я8и8 8я8и- -я8і8 8я8і- -я8ї8 8я8ї- -я8й8 8я8й- -я8к8 8я8к- -я8л8 8я8л- -я8м8 8я8м- -я8н8 8я8н- -я8о8 8я8о- -я8п8 8я8п- -я8р8 8я8р- -я8с8 8я8с- -я8т8 8я8т- -я8у8 8я8у- -я8ф8 8я8ф- -я8х8 8я8х- -я8ц8 8я8ц- -я8ч8 8я8ч- -я8ш8 8я8ш- -я8щ8 8я8щ- -я8ь8 8я8ь- -я8ю8 8я8ю- -я8я8 8я8я- -я8'8 -я8’8 8я8'- 8я8’- -'8а8 -’8а8 8'8а- 8’8а- -'8б8 -’8б8 8'8б- 8’8б- -'8в8 -’8в8 8'8в- 8’8в- -'8г8 -’8г8 8'8г- 8’8г- -'8ґ8 -’8ґ8 8'8ґ- 8’8ґ- -'8д8 -’8д8 8'8д- 8’8д- -'8е8 -’8е8 8'8е- 8’8е- -'8є8 -’8є8 8'8є- 8’8є- -'8ж8 -’8ж8 8'8ж- 8’8ж- -'8з8 -’8з8 8'8з- 8’8з- -'8и8 -’8и8 8'8и- 8’8и- -'8і8 -’8і8 8'8і- 8’8і- -'8ї8 -’8ї8 8'8ї- 8’8ї- -'8й8 -’8й8 8'8й- 8’8й- -'8к8 -’8к8 8'8к- 8’8к- -'8л8 -’8л8 8'8л- 8’8л- -'8м8 -’8м8 8'8м- 8’8м- -'8н8 -’8н8 8'8н- 8’8н- -'8о8 -’8о8 8'8о- 8’8о- -'8п8 -’8п8 8'8п- 8’8п- -'8р8 -’8р8 8'8р- 8’8р- -'8с8 -’8с8 8'8с- 8’8с- -'8т8 -’8т8 8'8т- 8’8т- -'8у8 -’8у8 8'8у- 8’8у- -'8ф8 -’8ф8 8'8ф- 8’8ф- -'8х8 -’8х8 8'8х- 8’8х- -'8ц8 -’8ц8 8'8ц- 8’8ц- -'8ч8 -’8ч8 8'8ч- 8’8ч- -'8ш8 -’8ш8 8'8ш- 8’8ш- -'8щ8 -’8щ8 8'8щ- 8’8щ- -'8ь8 -’8ь8 8'8ь- 8’8ь- -'8ю8 -’8ю8 8'8ю- 8’8ю- -'8я8 -’8я8 8'8я- 8’8я- -'8'8 -’8’8 8'8'- 8’8’-", ["length"]=43681, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4565, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hr.rme0000644000175000017500000000150211761001300024637 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Croatian hyphenation patterns (more info about the licence to be added later) % % Hyphenation patterns for Croatian language % % Copyright (C) 1994, 1996, 2011 Igor Marinović % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % Changes: % - The first version was realised in late 1994. % - Second, much more improved version was realised in the beginning of 1996. % (Date of the last change: 19.03.1996). % - In summer 2008 the patterns have been incorporated into hyph-utf8 % and renamed from hrhyph.tex to hyph-hr.tex. % - LPPL licence added on 06.06.2011. % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ro.pat0000644000175000017500000000703611761001300024657 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-ro.rme % used: a b c d e f g h i j k l m n o p r s t u v x z î ă ș ț \patterns{ .a3ic .a4n3is .a2z .cre1 .de2aj .de2z1 .g4 .i2a .i2e .i3ț .i4u3 .i3v .î4m .n2 .ni2 .p4 .pre3ș .s4 .ș4 .u4i .u5ni .z2 a1 2acă achi5 a3e afo3 a3i2a a3i2e a3il ai3s2 a3iu alie6 2alt a2m a2n 2an. a5n2e ani2e ani3ș4 an4s 2anu an2z ao2g ati4a 2atr a5t4u 2ața 2ață 2au a3ua a3ud a3ug a3ul a3un a3ur a3us a3ute a3u2ț a3uz 2ă1 ă3i ăi2e ă2m2 ănu3 ărgi5 ă3ș ă4ș3t ă2ti. ăti4e ă3u ă3v ă2zi 1b 2b. ba2ț bănu5 2bc 2bd bi2a. bi2at bi2e 3bii b2l 3b4lim b4lu bo1 bo3ric 2bs 2bt 2bț bți4ne. bu3 1c 4c. ca3ut că2c cătu5 2cc ce2a ce2ț 2chi. 2ci. ci3ale ci2o cis2 ci3sp ciza2 c4l 2cm 2c5n copia2tă co2ț 2cs 2ct 2cț cu3im 3cul cu2ț 2cv 1d 4d. da4m da2ț 2dc de4sc dez3in di2an dia2tă 2dj 2dm 2d1n do4il 3du e1ac e1aj e1al e1aș e1at ea2ț e1av ebu5i 2ec eci2a ecla2re edi4ulu e3e ee2a 1efa e1h e3i2a e3i2e e3ii e3il e3im e3in e3i2o e3i3s2 e3it e3i4u e1î 2el e2m emon5 2en e5ne e1o1 e3on e1r 2era 2eră 2erc 2e2s es3co es5ti 2eș e3și etan4ț 2eț e3u eu5ș 1evit e2x 2ez eză5 ezi3a e2z1o 1f4 2f. 3fa 3făș 2fi. fi3e 3fo 2ft f5tu 1g2 2g. gă3ț 2ghi. 2gi. g4l 2g3m 2g3n go5n 3gu3 2g3v 2h. 2hi. hi2a hi3c hi4u 2h1n 2i1 4i. 3i2ac ia3g4 i2ai i2aș ia2ț i3că i2ed i3ia i3ie i3ii i3il i3in i3ir i3it iitu2ră i2î 4ila i3le i3lo imateri6 i2n i4n1ed in2gă inți4i 3inv i3od i3oni io2ț ipă5 i2s is3f 4isp iș3t i5ti iți2a i3ți2o i3ua i3ul i3um i3und i3unu i3us i3ut iz3v î2 î3d î3e î3lo îna3 în5ș î3ri î3rî îr5ș îș3t î3t î4ti î3ț î4ți î5ții î3z 1j 2j. 2jd 2ji. ji2ț 2jl j4u ju3t 1k 1l 4l. larați2 lă2ti lătu5 2lb 2lc 2ld le2a 2lf 2lg 4li. li3a li3e li3o 2lm 2l5n 2lp 2ls 2l3ș 2lt 2lț 3lu 2lv 1m 2m. 3ma 3mă 2mb mblîn3 3me me2z 2mf 3mi 4mi. mi2ț 3mî 2m1n 3mo mon4 2mp 2m3s2 2mt 2mț 3mu mu2ț 2mv 4n. 3na 4n1ad na3in 3nă 2nc n2cis n2ciz 2nd 3ne ne1ab ne1an ne1ap 4nef 4n1eg ne3s2 4nevi 4n1ex 2ng ng3ăt 3ni 4ni. ni3ez 3nî n3j n1n 3no no4ș n1r 2n3s2 ns3f n4sî ns3po n3ș2 n4și 2nt n5ti n5t4u 2nț 5nu nu3a nu3ă nu5m nu3s2 2nz o1ag o2al o2bi. 2oca ocu5i 2od odi2a o3e o3i2 oiecti2 oi3s2p omedi2e. om4n 2on o1o opi3e opla2 oplagi2 o1ra o1ră or2c o1re o1ri o2ric o1rî o1ro or2te. o1ru os5ti o3și otați4 o5ti ot3od o3u 1p2 2p. 3pa păr3ț 2p3c pecți2 pe2ț 2pi. pi2e pi3e. pi3ez pi3o pi2ț pi2z p4l po4ș po2ț 2p3s 2p3ș 2p3t 2p3ț p4ți. pu3b4 puri2e pu4ș 4r. 2rb 2rc 2rd r2e re2bi recizi2 re3s2cr re4și 2rf 2rg 2r1h 4ri. ri3a ri4ali ri3eț ri3ez ri5mi 2ri3un ri3v 2rk 2rl 2rm 2r1n rna2ț rografi6 2rp 2r1r 2rs2 r3sp r3st 2r3ș 2rt rtua2le 2rț ru3il ru3sp 2rv 2rz 1s 4s. 5sa 5să să4m să4ș 2sc 4sc. 3s2co 3se se2a se4e. ses2 se3sp se4ș 4s2f 5sfî 3si si3p 3sî 3s4l 4sm s1n 3so so3ric 2sp 2st sto3 5su su2ț 2ș 4ș. 3șa șa2ț 3șă2 3șe 1și 4și. 5șii 5șil 3șin 3șî 4ș5n șnu5 3șo ș2p ș2ti 4ști. 4ș3tr 3șu 1t2 4t. ta3ut 2t3c 2t3d te2a te5ni teri6ală te3s2p 2t3f 4ti. ti3a ti3e 3tii. 3til 3tin ti2ț 2tî. t4l 2t3m 3tol 3tor to2to 3tru. 3trul 3truo 4t3s2 2t3t tu3a tu3im 4t3un tu4ș 4t3z 1ț 2ț. 3ța 3ță țe2ț 2ți. 3ția ți3a. 3ție 3ții 3țil ți2ț 3țiu țu3 țu5i 2u1 6u. u2a. u2ad u3au uă3 uăs2 u2bia u2b3l u2b1o ub3s2 u3e 4ugu u3i2a u3i2e u3in u3ir u3is u3it u3i2ț u3iz u2l u3la u3lă u3le u3lii u3lî u3lo umi5r ur2z u2s us2pr u4st u3ș u4șt u2to 3utor u3ui u3um 1v 2v. ve5ni ve2ț ve2z 2vi. vi2ț 2v1n vorbito2 3vr 1x 2x. 3xa 3xă 3xe xe2z 3xi 3xo 3xu 1z 2z. za2ț 2zb 2z2g 2zi. zi2an zi2ar 3zii 3zil z4m 2z1n 3z2ol 3zon zu2ț 2z2v z3vă}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-it.pat0000644000175000017500000000335711761001300024655 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-it.rme % used: ' a b c d e f g h i j k l m n o p q r s t u v w x y z \patterns{ .a3p2n .anti1 .anti3m2n .bio1 .ca4p3s .circu2m1 .contro1 .di2s3cine .e2x1eu .fran2k3 .free3 .li3p2sa .narco1 .opto1 .orto3p2 .para1 .poli3p2 .pre1 .p2s .re1i2scr .sha2re3 .tran2s3c .tran2s3d .tran2s3l .tran2s3n .tran2s3p .tran2s3r .tran2s3t .su2b3lu .su2b3r .wa2g3n .wel2t1 2'2 a1ia a1ie a1io a1iu a1uo a1ya 2at. e1iu e2w o1ia o1ie o1io o1iu 1b 2bb 2bc 2bd 2bf 2bm 2bn 2bp 2bs 2bt 2bv b2l b2r 2b. 2b' 1c 2cb 2cc 2cd 2cf 2ck 2cm 2cn 2cq 2cs 2ct 2cz 2chh c2h 2ch. 2ch'. 2ch''. 2chb ch2r 2chn c2l c2r 2c. 2c' .c2 1d 2db 2dd 2dg 2dl 2dm 2dn 2dp d2r 2ds 2dt 2dv 2dw 2d. 2d' .d2 1f 2fb 2fg 2ff 2fn f2l f2r 2fs 2ft 2f. 2f' 1g 2gb 2gd 2gf 2gg g2h g2l 2gm g2n 2gp g2r 2gs 2gt 2gv 2gw 2gz 2gh2t 2g. 2g' 1h 2hb 2hd 2hh hi3p2n h2l 2hm 2hn 2hr 2hv 2h. 2h' 1j 2j. 2j' 1k 2kg 2kf k2h 2kk k2l 2km k2r 2ks 2kt 2k. 2k' 1l 2lb 2lc 2ld 2l3f2 2lg l2h l2j 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lz 2l. 2l'. 2l'' 1m 2mb 2mc 2mf 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2m. 2m' 1n 2nb 2nc 2nd 2nf 2ng 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3fer 2nt 2nv 2nz n2g3n 2nheit 2n. 2n' 1p 2pd p2h p2l 2pn 3p2ne 2pp p2r 2ps 3p2sic 2pt 2pz 2p. 2p' 1q 2qq 2q. 2q' 1r 2rb 2rc 2rd 2rf r2h 2rg 2rk 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt r2t2s3 2rv 2rx 2rw 2rz 2r. 2r' 1s2 2shm 2sh. 2sh' 2s3s s4s3m 2s3p2n 2stb 2stc 2std 2stf 2stg 2stm 2stn 2stp 2sts 2stt 2stv 2sz 4s. 4s'. 4s'' 1t 2tb 2tc 2td 2tf 2tg t2h t2l 2tm 2tn 2tp t2r t2s 3t2sch 2tt t2t3s 2tv 2tw t2z 2tzk tz2s 2t. 2t'. 2t'' 1v 2vc v2l v2r 2vv 2v. 2v'. 2v'' 1w w2h wa2r 2w1y 2w. 2w' 1x 2xb 2xc 2xf 2xh 2xm 2xp 2xt 2xw 2x. 2x' y1ou y1i 1z 2zb 2zd 2zl 2zn 2zp 2zt 2zs 2zv 2zz 2z. 2z'. 2z'' .z2}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-mn.pat0000644000175000017500000003147311761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-mn.rme % used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё ү ө \patterns{ 1ба 1бе 1бё 1би 1бо 1бө 1бу 1бү 1бы 1бь2ю 1бэ 1бю 1бя 1ва 1ве 1вё 1ви 1во 1вө 1ву 1вү 1вы 1вь2ю 1вэ 1вю 1вя 1га 1ге 1гё 1ги 1го 1гө 1гу 1гү 1гы 1гь2ю 1гэ 1гю 1гя 1да 1де 1дё 1ди 1до 1дө 1ду 1дү 1ды 1дь2ю 1дэ 1дю 1дя 1жа 1же 1жё 1жи 1жо 1жө 1жу 1жү 1жэ 1жю 1жя 1за 1зе 1зё 1зи 1зо 1зө 1зу 1зү 1зы 1зь2ю 1зэ 1зю 1зя 1ка 1ке 1кё 1ки 1ко 1ку 1кү 1кэ 1кю 1кя 1ла 1ле 1лё 1ли 1ло 1лө 1лу 1лү 1лы 1лэ 1лю 1ля 1ма 1ме 1мё 1ми 1мо 1мө 1му 1мү 1мы 1мэ 1мю 1мя 1на 1не 1нё 1ни 1но 1нө 1ну 1нү 1ны 1нь2ю 1нэ 1ню 1ня 1па 1пе 1пё 1пи 1по 1пө 1пу 1пү 1пы 1пь2ю 1пэ 1пю 1пя 1ра 1ре 1рё 1ри 1ро 1рө 1ру 1рү 1ры 1рэ 1рю 1ря 1са 1се 1сё 1си 1со 1сө 1су 1сү 1сы 1сэ 1сю 1ся 1та 1те 1тё 1ти 1то 1тө 1ту 1тү 1ты 1ть2ю 1тэ 1тю 1тя 1фа 1фе 1фё 1фи 1фо 1фу 1фы 1фэ 1фю 1фя 1ха 1хе 1хё 1хи 1хо 1хө 1ху 1хү 1хы 1хэ 1хю 1хя 1ца 1це 1цё 1ци 1цо 1цө 1цу 1цү 1цы 1цэ 1цю 1ця 1ча 1че 1чё 1чи 1чо 1чө 1чу 1чү 1чэ 1чю 1чя 1ша 1ше 1шё 1ши 1шо 1шө 1шу 1шү 1шэ 1шю 1шя 1ща 1ще 1щи 1щу 2а1я 2аа 2б3ю4у 2б3ю4ү 2в3ю4у 2в3ю4ү 2г3ю4у 2г3ю4ү 2д3ю4у 2д3ю4ү 2ж3ю4у 2ж3ю4ү 2з3ю4у 2з3ю4ү 2и1е 2й1е 2й1ё 2й1ю 2й1я 2л3ю4у 2л3ю4ү 2м3ю4у 2м3ю4ү 2н3ю4у 2н3ю4ү 2о1е 2о1ё 2о1я 2оо 2ө1е 2өө 2п3ю4у 2п3ю4ү 2р3ю4у 2р3ю4ү 2с3ю4у 2с3ю4ү 2т3ю4у 2т3ю4ү 2у1я 2у3ю 2уу 2үү 2х3ю4у 2х3ю4ү 2ц3ю4у 2ц3ю4ү 2ч3ю4у 2ч3ю4ү 2ш3ю4у 2ш3ю4ү 2ъ3е 2ъ3ё 2ъ3ю 2ъ3я 2ь3е 2ь3ё 2ь3я 2э3е 2ээ 2ю3а 2ю3и 2ю3о .авто3а4г .авто3а4д .авто3а4к .авто3а4л .авто3а4н .авто3а4с .авто3б4л .авто3б4р .авто3в4в .авто3в4л .авто3г4р .авто3д4р .авто3и4м .авто3и4н .авто3и4о .авто3к4л .авто3к4р .авто3о4б .авто3о4к .авто3о4п .авто3о4т .авто3п4р .авто3с4к .авто3с4л .авто3с4м .авто3с4п .авто3с4т .авто3с4ц .авто3т4р .авто3ф4л .авто3ф4р .авто3х4р .авто3х4т .авто3ц4в .авто3э4к .авто3э4л .авто3э4м .авто3э4п .анти3а4в .анти3а4д .анти3а4л .анти3а4н .анти3а4п .анти3а4р .анти3а4с .анти3а4т .анти3а4у .анти3б4л .анти3г4л .анти3г4р .анти3д4р .анти3и4д .анти3и4з .анти3и4м .анти3и4н .анти3к4в .анти3к4л .анти3о4б .анти3о4з .анти3о4к .анти3п4л .анти3п4н .анти3п4р .анти3п4с .анти3с4в .анти3с4к .анти3с4т .анти3с4ц .анти3т4р .анти3у4з .анти3у4р .анти3у4т .анти3ф4л .анти3ф4р .анти3х4л .анти3х4р .анти3э4м .анти3э4н .анти3э4р .астро3б4л .астро3г4л .астро3г4р .астро3и4н .астро3о4р .астро3с4п .астро3ш4т .аэро3д4р .аэро3к4л .аэро3п4л .аэро3с4т .аэро3ф4л .би3а4к .би3а4л .би3а4ф .би3к4в .би3к4р .би3о4р .би3п4р .би3э4к .био3а4к .био3а4н .био3а4п .био3а4с .био3б4л .био3г4р .био3и4н .био3к4л .био3к4р .био3о4р .био3п4л .био3п4р .био3с4к .био3с4п .био3с4т .био3с4ф .био3х4р .био3э4к .био3э4л .био3э4н .био3э4т .бь4 .въ4 .вь4 .газо3а4б .газо3а4д .газо3а4н .газо3а4п .гео3а4к .гео3б4л .гео3г4р .гео3и4з .гео3и4н .гео3к4р .гео3с4к .гео3с4т .гео3с4ф .гео3т4р .гео3ф4л .гео3х4р .гео3э4к .гео3э4л .гидро3а4б .гидро3а4в .гидро3а4г .гидро3а4д .гидро3а4к .гидро3а4л .гидро3а4м .гидро3а4р .гидро3а4э .гидро3г4р .гидро3и4з .гидро3и4н .гидро3и4о .гидро3к4л .гидро3к4р .гидро3о4к .гидро3п4л .гидро3п4н .гидро3с4т .гидро3с4ф .гидро3т4р .гидро3у4д .гидро3у4з .гидро3у4р .гидро3х4л .гидро3э4к .гидро3э4л .гидро3э4н .гипе2р3а4д .гипе2р3а4з .гипе2р3а4к .гипе2р3а4л .гипе2р3а4м .гипе2р3а4р .гипе2р3а4ц .гипе2р3а4э .гипе2р3е4а .гипе2р3е4м .гипе2р3е4р .гипе2р3е4с .гипе2р3и4з .гипе2р3и4м .гипе2р3и4н .гипе2р3о4в .гипе2р3о4к .гипе2р3о4с .гипер3б4р .гипер3г4л .гипер3г4р .гипер3к4в .гипер3к4р .гипер3м4н .гипер3п4л .гипер3п4н .гипер3п4р .гипер3с4п .гипер3с4р .гипер3с4с .гипер3с4т .гипер3т4р .гипер3у4р .гипер3ф4р .гипер3х4л .гипер3х4р .гипер3э4к .гипер3э4л .гипер3э4н .гипер3э4о .гипер3э4с .голо3б4л .голо3э4д .гомо3а4з .гомо3а4к .гомо3а4т .гомо3к4л .гомо3п4л .гомо3с4п .гомо3т4р .гомо3ф4т .гомо3э4н .гомо3э4п .гь4 .ди1а3г4н .ди4ст5ри .ди4ст5ро .диа3д4р .диа3к4л .диа3к4р .диа3с4к .диа3с4п .диа3с4т .диа3т4р .диа3ф4р .диазо3т4р .диазо3э4т .диазо3э4ф .дина3т4р .дь4 .евро3а4з .евро3а4т .евро3и4е .евро3к4р .евро3о4б .евро3с4п .евро3с4т .изо3а4в .изо3а4г .изо3а4д .изо3а4з .изо3а4к .изо3а4л .изо3а4м .изо3а4н .изо3б4р .изо3в4р .изо3г4л .изо3г4р .изо3д4р .изо3и4о .изо3й4о .изо3к4л .изо3к4р .изо3л4г .изо3л4ж .изо3о4к .изо3п4л .изо3п4р .изо3с4т .изо3т4к .изо3т4р .изо3х4р .изо3ш4л .изо3э4в .изо3э4д .изо3э4й .изо3э4л .изо3э4н .ин3а4кт .ин3а4п .ин3а4у .ин3б4р .ин3г4р .ин3к4л .ин3к4р .ин3с4тр .инте2р3а4к .интер3г4р .интер3к4в .интер3к4р .интер3п4р .интер3ф4л .кило3а4м .кило3г4р .кило3э4л .кино3а4к .кино3а4н .кино3а4п .кино3а4ф .кино3б4л .кино3д4р .кино3и4с .кино3к4л .кино3к4р .кино3о4п .кино3п4л .кино3п4р .кино3с4к .кино3с4ъ .кино3ф4л .кино3ф4р .кино3х4р .кино3э4к .ко3а4г .ко3а4д .ко3а4к .ко3и4н .ко3о4п .ко3о4р .ко3п4л .ко3э4ф .кь4 .ль4 .макро3а4н .макро3а4с .макро3б4л .макро3б4р .макро3г4л .макро3г4н .макро3г4р .макро3и4н .макро3и4с .макро3к4л .макро3к4р .макро3о4в .макро3о4п .макро3о4р .макро3п4л .макро3п4р .макро3с4к .макро3с4п .макро3с4т .макро3с4х .макро3т4р .макро3ф4л .макро3ф4т .макро3э4в .макро3э4к .макро3э4л .макро3э4н .макро3э4р .макро3э4с .мега3о4м .мега3п4р .мега3с4к .мега3с4п .мега3э4л .микро3а4в .микро3а4г .микро3а4д .микро3а4м .микро3а4н .микро3а4р .микро3а4с .микро3а4у .микро3а4э .микро3б4л .микро3б4р .микро3г4р .микро3д4в .микро3и4з .микро3и4н .микро3и4с .микро3й4о .микро3к4л .микро3к4н .микро3к4р .микро3о4б .микро3о4п .микро3о4р .микро3о4с .микро3п4л .микро3п4р .микро3с4к .микро3с4п .микро3с4т .микро3с4ф .микро3с4х .микро3т4р .микро3ф4л .микро3х4р .микро3э4в .микро3э4л .микро3э4м .микро3э4н .микро3э4р .милли3а4м .милли3г4р .милли3о4м .милли3э4к .моно3а4в .моно3а4з .моно3а4л .моно3а4м .моно3а4н .моно3а4р .моно3а4т .моно3а4ц .моно3б4л .моно3б4р .моно3г4л .моно3г4р .моно3и4з .моно3и4м .моно3и4н .моно3к4л .моно3к4р .моно3о4к .моно3о4л .моно3п4л .моно3п4р .моно3п4с .моно3с4п .моно3с4т .моно3т4р .моно3ф4т .моно3х4л .моно3х4р .моно3э4д .моно3э4н .моно3э4п .моно3э4т .моно3э4ф .мото3д4р .мото3к4р .мото3п4л .мото3п4р .мото3с4п .мото3ш4л .мь4 .на3у .нано3а4д .нано3п4р .нео3а4д .нео3а4н .нео3а4р .нео3б4л .нео3г4л .нео3г4н .нео3г4р .нео3и4з .нео3и4м .нео3и4н .нео3к4л .нео3к4р .нео3п4л .нео3п4р .нео3х4р .нео3э4з .нео3э4н .нео3э4п .нео3э4с .нь4 .орто3а4л .орто3а4м .орто3а4н .орто3а4р .орто3д4р .орто3и4з .орто3к4р .орто3п4л .орто3п4р .орто3п4с .орто3с4в .орто3с4к .орто3с4т .орто3т4р .орто3х4л .орто3х4р .орто3э4т .орто3э4ф .пара3а4к .пара3а4л .пара3а4м .пара3а4н .пара3а4п .пара3а4ц .пара3б4л .пара3г4н .пара3г4р .пара3к4л .пара3к4р .пара3о4к .пара3п4л .пара3п4с .пара3с4п .пара3с4ф .пара3с4ц .пара3т4р .пара3х4л .пара3х4р .пара3э4л .пара3э4т .паро3п4р .поли3а4в .поли3а4д .поли3а4з .поли3а4к .поли3а4л .поли3а4м .поли3а4н .поли3а4р .поли3а4ц .поли3б4р .поли3г4л .поли3г4р .поли3и4з .поли3и4м .поли3к4л .поли3к4р .поли3о4к .поли3о4л .поли3п4л .поли3п4н .поли3п4р .поли3с4п .поли3с4т .поли3у4р .поли3х4л .поли3х4р .поли3э4д .поли3э4к .поли3э4л .поли3э4н .поли3э4т .поли3э4ф .пре3э4к .пре3ю4д .про3а4г .про3а4к .про3а4м .про3а4н .про3а4у .про3г4р .про3и4г .про3и4з .про3и4л .про3и4н .про3к4л .про3с4п .про3х4р .про3э4к .про3э4м .про3э4н .про3э4р .про3э4с .прото3х4л .прото3х4р .прото3э4р .проф3г4р .пъ4 .пь4 .ре3а4б .ре3а4г .ре3а4д .ре3а4к .ре3а4с .ре3а4ф .ре3а4э .ре3г4р .ре3и4м .ре3и4н .ре3и4ф .ре3к4р .ре3п4р .ре3т4ра .ретро3а4к .ретро3а4у .ретро3г4р .ретро3о4т .ретро3ф4л .санти3г4р .стерео3а4д .стерео3а4к .стерео3б4л .стерео3г4р .стерео3и4з .стерео3с4к .стерео3с4п .стерео3т4р .стерео3э4л .стерео3э4н .стерео3э4ф .супер3а4г .супер3а4д .супер3а4к .супер3а4н .супер3а4р .супер3а4э .супер3г4р .супер3е4с .супер3и4з .супер3и4к .супер3и4м .супер3и4н .супер3к4л .супер3п4р .супер3с4к .супер3с4п .супер3с4т .супер3х4р .супер3э4в .супер3э4к .супер3э4ф .съ4 .сь4 .ть4 .фь4 .хризо3и4д .хризо3п4р .хризо3с4т .хь4 .элек3тро .элек3тро3а4в .элек3тро3а4г .элек3тро3а4к .элек3тро3а4н .элек3тро3а4э .элек3тро3б4л .элек3тро3и4з .элек3тро3и4с .элек3тро3о4б .элек3тро3о4в .элек3тро3о4г .элек3тро3о4д .элек3тро3о4к .элек3тро3о4п .элек3тро3о4с .элек3тро3о4т .элек3тро3о4ф .элек3тро3о4ч .элек3тро3с4т .элек3тро3т4р .элек3тро3э4к .элек3тро3э4н .элек3тро3э4р 3авто 3актив 3аппа 3г4рад 3г4рам 3г4раф 3им4пул 3ин3ст4ру 3ин3те4р 3к4ва 3к4лас 3к4ри 3оп3тик 3п3роек 3п4ро 3с4коп 3с4фе 3с4хе 3ск4ла 3ск4ле 3ск4ло 3ск4ля 3ск4ра 3ск4ре 3ск4ри 3ск4ро 3ск4ру 3ск4ры 3сп4ла 3ст4ра 3ст4ре 3ст4ри 3ст4ро 3ст4рук 3ф4рагм 3х4лор 3х4ром 3ш2таб 3ш2тат 3э4к5ви 3э4ко 3э4лек4т 3э4леме 3э4нерг 3э4нтро 3эффе}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fi.pat0000644000175000017500000000326311761001300024633 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-fi.rme % used: a b c d e f g h i j k l m n o p q r s t u v y ä ö \patterns{ 1ba 1be 1bi 1bo 1bu 1by 1da 1de 1di 1do 1du 1dy 1dä 1dö 1fa 1fe 1fi 1fo 1fu 1fy 1ga 1ge 1gi 1go 1gu 1gy 1gä 1gö 1ha 1he 1hi 1ho 1hu 1hy 1hä 1hö 1ja 1je 1ji 1jo 1ju 1jy 1jä 1jö 1ka 1ke 1ki 1ko 1ku 1ky 1kä 1kö 1la 1le 1li 1lo 1lu 1ly 1lä 1lö 1ma 1me 1mi 1mo 1mu 1my 1mä 1mö 1na 1ne 1ni 1no 1nu 1ny 1nä 1nö 1pa 1pe 1pi 1po 1pu 1py 1pä 1pö 1ra 1re 1ri 1ro 1ru 1ry 1rä 1rö 1sa 1se 1si 1so 1su 1sy 1sä 1sö 1ta 1te 1ti 1to 1tu 1ty 1tä 1tö 1va 1ve 1vi 1vo 1vu 1vy 1vä 1vö 1st2r ä2y y1a2 y1o2 o1y ö2y u1y2 y1u2 ö3a2 ö3o2 ä3a2 ä3o2 ä1u2 ö1u2 a1ä a1ö o1ä o1ö u1ä2 u1ö2 ä2ä ö2ö ä2ö ö2ä aa1i2 aa1e2 aa1o2 aa1u2 ee1a2 ee1i2 ee1u2 ee1y2 ii1a2 ii1e2 ii1o2 uu1a2 uu1e2 uu1o2 uu1i2 e1aa i1aa o1aa u1aa u1ee a1uu i1uu e1uu o1uu ää1i ää1e ää3y i1ää e1ää y1ää i1öö a1ei a1oi e1ai i1au y1ei ai1a ai1e ai1o ai1u au1a au1e eu1a ie1a ie1o ie1y io1a2 io1e2 iu1a iu1e iu1o oi1a oi1e oi1o oi1u o1ui ou1e ou1o ue1a ui1e uo1a uo1u e1ö2 ö1e2 .ä2 u2s yli1o2p ali1a2v 1sp2li alous1 keus1 rtaus1 2s1ohje 2s1a2sia 1a2sian 1a2siat 1a2sioi r2as l2as 2s1o2pisk 2n1o2pet 2s1a2loi 2n1o2pist 2s1o2pist 2s1o2sa 2n1o2sa alkei2s1 perus1 2s1i2dea. 2s1i2dean 2s1e2sity 2n1e2dus 2s1ajatu 2s1ase 2s1apu 2s1y2rit .ydi2n1 .suu2r1a2 2s1y2hti 2n1otto 2n1oton 2n1anto 2n1anno 2n1a2jan 2n1aika 2n1o2mai 2n1y2lit 2s1a2len 2n1a2len 1a2siaka2s1 ulo2s1 2n1a2jo 2s1a2jo b2l 1b2lo bib3li b2r 1b2ri 1b2ro 1b2ru d2r 1d2ra f2l 1f2la f2r 1f2ra 1f2re g2l 1g2lo g2r 1g2ra k2l 1k2ra 1k2re 1k2ri 1k2v 1k2va p2l p2r 1p2ro c2l q2v 1q2vi sc2h ts2h ch2r}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-gb.pat0000644000175000017500000015323111761001300024626 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-gb.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z \patterns{ .ab4i .ab3ol .ace4 .acet3 .ach4 .ac5tiva .ad4din .ad3e .ad3o .ae5d .aer3i .af3f .af3t .ag4a .ag5n .air3 .al5im .al1k .al3le .am5ar .ama5te .am2i .am3pe .am3ph .an1 .ana3b .ana3s .and2 .an5da .an4el .an4en .an4gl .an4on. .an3s .ant3a .an3ti3 .ant4ic .an4t5o .any5 .aph5or .ap4i .ar5ab .ar5ap .ar4ci .ar5d .ar4e .ari4 .ar4ise .ar4isi .ar5sen .art5icl .as1 .as4q .as5sib .at5ar .ateli4 .at5omise .at5omiz .at3r .at3t .au3b .au3g4u .aur4e5 .aus5 .authen5 .av4 .av5era .bap5tism .barri5c .bas4i .ba5sic .be3di .be3lo .be5r4a .be5sm .bi4er .blaz5o .bo3lo .bos5om .boun4d .bov4 .bra5ch .bre2 .burn5i .ca3de .ca4gin .cam5i .cam3o .can1 .can5ta .ca5pitu .car4i .cas5ual .ca4ti .cen5so .cen5tena .cent5ri .cer4i .ch4 .cit4a .clem5e .clima5to .co5it .co3pa .cop5ro .co3ru .co3si .co5ter .cotyle5 .cri5tici .custom5 .dav5 .dea5co .de5lec .del5eg .de3li .deli5r .de1m .de5nit .de3no .der2 .de3ra .de5res .de3ri .de5scrib .de5serv .de5signe .de5sir .de5sis .de5spoi .determ5i .de3ve .de4w .di4al. .dia3s .di4at .din4a .dio5c .do2 .do4e .domest5 .du4al. .du4c .dys3 .east5 .echin5 .eco3 .ec3t .ed5em .ed4it. .ed4iti .eg4 .ei3d .ei5r .el3ev3 .el2i .elu5s .em3b .em5in .emp4 .em5py .en1 .en5c .en4ded .en3s .ent2 .en5ta .eos5 .epi1 .epi3d .er2a .er5em5 .er4i4 .er4o2 .eros4 .erot3 .er4ri .es1 .escal5 .es3p .es3t .etern5 .eth3e .eu1 .eur4 .eval3 .evol5ut .ew4 .ex1 .ex3a .eye3 .fal4le .far4i .fec5unda .fen4d .feoff5 .fi2 .fi5lia .fil5tr .fin5ess .fin3g .fi5n4it .fis4c5 .fo3c .fran5ch .fu5ga .ga4m .gam5et .gen4et .ge5neti .gen5ia .ge3ro .glor5io .gnost4 .go3no .gos3 .hab2 .ha5bili .hama5 .han4de .hast5i .he4i .hem5a .hi2 .hi3b .ho2l .ho5rol .hov3 .hy3lo .ico3s .idi2 .ig3 .ig1n .il4i .im5b .in1 .in3d .in3e2 .in2i .in3o .in3t .invest5i .ir3r .is4c .is4li .is4o .iso5m .ka5ro .ki4e .kin3e .lab4o .la4me .lam5enta .lan5i .lash4e .le4m .len5ti .le2p .lep5r .les5son .le5van .librar5 .lig3a .li3o .li4ons .li4p .loc3a .lo4gia .lo2p .loph3 .lous5i .lov5er .lub3 .lyo3 .mac5u .mal5ad5 .ma5lin .mar5ti .math5 .me5lodio .ment4 .men5ta .me5rid .me5rin .met4er .mi4e .mi3gr .min5ue .mirk4 .mis1 .mi5to .mo3bi .mo5lec .mon3a .mor5ti .mu3ni .mu3si .musi5co .myth3 .na5k .nari4 .nast4 .nas5ti .nec3t .ni4c .ni5tro .no4c .nom3o .nos3t .no5tic .nucle5 .obed5 .ob3el .ob3l .od4 .oed5 .oe5so .of5t .oi4 .ol4d .ome2 .om5el .on4ce .on4e .op2i .opt5a .or1 .or4at4 .ora5tori .or5che .or3d .ore4 .or3eo .or4i .orner4 .or2o .os1 .osi4 .oth5 .out1 .ov4 .pal5i .para5dis .par5af .para5t .pa5ta .pa4tio .pec3t4 .pecu3 .ped3e .pend4 .pen5de .pep3t .peri5n .perse5c .pe5titi .ph2 .phe5nom .phon4i .pi2e .pi3la .plast4 .plic4 .plica4 .plos4 .po3la .po5lite .po2p .pop5l .po5sitio .pos5si .pro5bat .pur4r .put4te .ra5cem .ran5gi .re3ca .ref5ere .re5gar .re1i .re5lin .re1m .re5o .res5ci .re5sen .re5spo .re5stat .re5store .re5str .re3ta .re5u .re3w .rib5a .rin4 .rit2 .rol4la .ros3a .sa2 .sac5r .sal4i .sa5lin .salt5er .sanc5 .sap5a .sa3vo .sci3e .sea3s .sect4 .sec5to .se3gr .sen3t .se1q .ser4ie .ses1 .sev5era .sh2 .si5gno .sis3 .st4 .stat4o .stra5to .string5i .su5da .sulph5a .sul3t .tact4i .tac5tic .ta4m .tamar5 .tar5o .tect4 .tel5a .tell5e .te4m .te5ra5t .ter4p .th4 .tho4 .thol4 .ti2 .til4 .ti5ni .tit4is .tor1 .tran4c .tri5bal .tri3d .trin4a .tri5sti .tro4ph .troph5o .tro4v .tular5 .turb4 .turi4 .tu5te .tu3to .ul4l .ulti5mat .un5ce .un5ch .un3d2 .under5 .un3e .un3g .uni3c .uni3o .un3k4 .un5s .un3t4 .un5u .up1 .up3l .ura4 .ur5eth .ur4o .va5led .ve2 .vec5 .ve5lo .vent5il .ver4ie .ver3n .vic5to .vi2s .vis3i .vi5so .vo1c .vo5lut .wine5s .xy3l .za5r a4a 1ab 2ab. 2aba ab5are abay4 2abb ab5ber 2abe4 ab3erd ab3err a3bet ab1ic a3bie 2abin 4abio abi5on ab3ita ab4itu ab3la abli4 4abolic ab3om ab3ota 3about ab1r 2abs. ab1ul abu4lo ab3use ab3usi 2aby ac2a ac5abl ac3al 5acanth ac5ard a5cat ach5al a5chini ach5ism achro4 ach5ur 2aci a4cic aci4ers acif4 4acit ack5a ac3li 4aco. aco3d ac5onr 4acos 4acou ac1r ac3ry act5ate act5ile ac2to act5ory ac2t5r ac5uat a5dai ada3v 4adee ad5eni ad4ha ad3ica a5dif 4adil adi4op adi4p adis4i a3diti 3adju 5admit a2do 4adoe 4adoi ad3ol a3dos ad1ow ad1r adram4 4a2du ad3ula ad3um 4ady ae5a ae4cit aeco3 4aed aed5is ae5g ae3on ae5p aerody5 ae4s ae5si aes3t aet4a aeth4 aet4or. aev3a 4af. 4afe af5ta a4fu ag4ari 4ageri a5ghe a5gia agi4as 4agino 4agl agli4 4ag1n ag3oni agor4a ag5ot a2gr ag3ri agru5 2ah a1h2a ahar2 aha5ra a1he ah4n a5hoo 2ai2 4ai. ai3a a1ic aid4a aid5er aig2 ai5gu ail3er ail3o aim5er ain5ders ai5nea a3ing. ain3i ain5o aint5er air5a air5p air3s ais1i a5ism 2a1j a4ju 2ak akel4 ak5u al5abl alact4 a1lae al5ais ala3ma al5ance al3at a5lav alc3at al3ch ald5ri 2ale a3lec aleg4 ale5ma al5ende a1leo a2let al3ibr ali4ci al5ics al1id al3if 5alig al1in a5lini alin5o al5ipe al5ipot 4alis. 4aliu 4alk alk5ie al4lab al4lag alli5an allig4 al4lish a5loe al3ogr a3lom a3loo al1or al4orim alos4 a4lou al3ous a5low al5pen al3ph al5tati al3tie alu3b al5ued al3ues a5lumnia al1va al5ver alv5u 2a1ly4 a5lyn 2a2m a5mad ama4g aman5d a5marine a3mas. am1at a5m4atic am5atu am4bin 3ambu am5elo a3men amen4d am3era am5erl am1i ami2c am5ica amic5r 3amid a3mili am5ily amini4f am5iniz aminos4 a5mis. a4mium. a3mon amor5a amort3 am5ose am2p am5peri amphi5g amp3li ampo5l am3ul amyl5 a2n an2a a5nadi an3ae an3age ana5k an3ali an3arc a5nast an4con an3d4at and5au and5eer an5del an5dif and5ist an5dit an4doni an4ea an5eer an3ell anel5li an3eu an3gan angov4 an4gur 4anh an3ic ani3f an5ifo 4anig an5ion anis5te 4anity 4aniu an5no 4anny an1o an2oe an3oma anor3 an2os an5ot an2s an3sc an4sco ans3il an4sur an2t2a ant5abl an3tal an5tam an2te 1anth an4thi 3anthr 4antic an4tie an4ting ant4iv an4tone ant4r an4tus an5tym an3ul an3um. an5ums a3nur a5nut an2y an5ya a5nyi 2ao aol3i 5aow 2ap 4ap. 4apa a1pac ap3al ap5aro ape5li a5peu aph5em aph3i aph5ol aphyl3 ap1i ap5icu ap3in ap4ine a5pir a3plan ap5li apo5str apo3th a2pr ap5ron 4aps apt5at apu5lar a5pun a4q a5qui a2r 4arabi ara5bo aract4i ara2g ar3age ar4aged ar5agi ar3ago a3raj ar3all ara3m aran4g aran5te ar5apa ar1at a3rau ara3v ar3ba arb5et ar4bid ar4bl arb3li ar4bul ar5chet arch5o ar5dina ar4done ar3en aren5d ar5ett ar3ev5 ar5gh ar3gu ar3h ar1i ar5iff ar4ill a5ri5net ar5ini a5rishi arm3er ar5mit ar3nal ar3nis ar3od ar5oid aro4mas aro4n a5roti a5rouc ar3ox arp5ers ar4pu 2arr ar2rh ar2s ars5al ar3so art5at ar2th arth4e arth3r ar5tiz 2aru ar3um ar5un4 a3ryo a5ryt ar5z as1a as4af asan2 2asc as5con as5cot as2cr as2e as3ect 4ased asep4 ash5ay ash5il as5ily as3in a5sio a3sit as5iv ask5er aski4 as4la as4lo 2aso as5och a4soned as5or as3ph ass2 assa5gi ass5ibl as4sil assit5 2asta as4tat as4tia as3tis as4tit 4asto2 as3tra as4tri as1u as4un as5ur 2a2ta 4atabi a5talis atam4 ata3p atar3a ata3s ata3t4 at3eau at3ech at5eer a5tel. ate5le at5enat at3ent 4ater at3era at5ernis at5erniz 4atess at5et 4a2th ath3a a3then ath5erin ath5ero ath5ete ath3i ath3od a5thon ath5r 4a3tia ati2c at5icis ati5cit at5iciz a2tif a4t1i4l a4tim a2t3in 4atina at5ing 4at4is. at1it atit3u atitud5i 4atiu at4ivi a5tiviz a2to 5at5od 4atog 2atol 4aton a3too a4tops a5torian a4tory atos4 a5toz 2a2tr at3ra a4tre 5at5ress at1ri atric5u at3ron at5rou at4tag 2a2tu at1ul atu4m at3ura at3urg 4a2ty 2au2 4au. aub5i 4auc au5cer auc3o aud5er audic4 aul3i aul4t aul5ted ault5er ault5i au3ma aun2 aun5chie aun3d aun4dre au5reo aur4o au5ror 4aus. aus5er aus5p aus4ted aut3ar aut3er au3th 2av av4ab ava4g av3age ava5la av5alr av5ant av5ar avas3 av3end av3ern av3ig aviol4 av1is aw5er. aw5ers aw1i aw5nie aw5y a4x ax2id 4ay ay5la ay3m ayn4 ays2 ay5si ay5sta ayth4 2az2 az3ar aze4 az5ee azyg4 azz4l 2ba. ba5bir 3back baen4 bag4a 5bah ba4i bal3a balm5i ba5lon bal5u bam4a ban4a ba5nan b4ane 5bang b4aniti b4ans ba4p1 5barb bar4d bardi4 bar4n ba5rom bar3on 5bars 1bas bas4te ba4th4 3batic ba5tio bat5on battle5 2b1b2 b4bata b3bli b4bone b1c2 bcord4 2b1d bdeac5 bde4b bdi4v b2e 4be. 3bea 4beas be3ca 3becu 2bed be3da bed5el bed2i be4do be5dra be4du 5bee 3bef be3go be5gr be3gu 1bel be3la 2bele be3lit bel4t be3m ben4d bend5a bend5er be1ne be5nig be5nu 4beo be3q 2bere berga5m berl4 5berr ber5s b5ertin be1s2 2bes. be3sl be3tr be3w 2b1f bfa4 4b1h b4ha 2bi. 1bia bi4b1 bicen5 3b2id bid5i b4ie bi4ers bif4 bi4fid. bi5ga bigu3 b1il b2ile 5biles 3b2ill 4bim bimet5 5bina 5bin4d bind3e bin5et bin5i4 1bi2o bio3l bio5m bi3ou bip4 bi5q bir4 bi3re4 bi5rus b2is 5bism bis4o bisul5 3bitua 4bity bi5ve b1j 4b5k4 2bl2 5blac blag4 b3lan 5blast bla5tu blem5at 3bler 5blesp 4blik blim3a bli3o bli2q b3lis 4bly 2b1m bment4 bmi4 4b1n bo2 4bo. 3boa bo5am 5bob bod5i bo5h 2boid 4boke bol4e 4boled bol3i bol4t 3bon bon4c bon4e bon4ie boni4f bon4sp 1boo b3orat bor3d bor5ee bor5et 3bori bor5ic bor5io bor4n bot3an 5boti boun5ti 3bour bous4 bow2 bow3s 4boxy 5boy br4 3brach 4bral bram4 b2ran bran4d 4bre. b4reas 4b2res brev5et b2rid 5brief bring5 bri4os b5rist b4roa bro4ma bros4 brum4 4bry. 4b1s2 b3sc bscon4 bsen4 bserv5an b5si bsin4 bso2 bsol3e bso3lu b4stac bstupe5 2b1t b5tlet 4bu. 5bub buf5fer b4uli b4ulos bun2 bun4a b5u5nat bunt4 bur3e bur4ri busi4e buss2 bus5si 3bust bu5tar b3ute b5utin 3butio but4iv b5ut5o b1v 4b3w 2by 4by. 3byi bys4 5byt 2ca. cab5in c4ace caco3 cad4r 5caf ca3go 5cai 5cak c1al c4ala ca5laman cal5ar 3calc ca5lef call5in cal4m ca3ly ca3ma cam4i ca5nar c2an4e c4ano ca3noe can5tar can5ted can4tic can4tr 5cao 1cap ca5pil capt4 cap3ti cap3u 1car ca3ra5c car5ame ca3ree ca3r4i3c car3if car5m car3ni car3ol car5on car5oo ca3rou car4v case5 cashi4 3cas3s cas5tig 3casu3 c1at c4at. c2atc c4atom ca3t2r c4ats cat4u 3cau caulk4i cav3il 3cay c1c4 ccent5r cces4sa c3ch cci3d4 ccip4 ccle3 4ce. 4ceab cean3 3ceas ce4ci 2ced 5ceda ce3dar 3cede 3cedi 4cef ce5g 3ceiv cel3ai cel5ib5 5cell cel5lin celo4 ce5lom 4cely 2cem ce4met 3cemi ce4mo 1cen2 5cenc cen5ci cen5ded cend5en cend5er cen3i 2cenn 3cent cent4a cen5ted cen5ter. cen5ters cen5tes 1cep cept3a cep5tic 3cera cer4bi 3cerd ce3rem 5cern 5cess cest5o ces5tr ce2t cew4 2ch 4ch. 4chab 3chae 3chai cham5per chan5gi cha3pa chec4 4ched 3chee 3chem che3ol ch1er ch4eri 5cherin ch4erl 4ches 3chete ch5eu che5va 3chew ch5ex 5chi. 3chia 3chico ch3ily ch4in. ch3inn 3chio 5chip chizz4 ch5k 5chlor 4chm 1cho cho3a 5choc 4choi ch5oid 3chor 4chored chor5ol 4choso 3chot 4choti ch5ous chow5 3chr chur4 3chut 5chyd 3chyl 3chym 1c2i2 4ci. 4ciac cia4m ci3ca 4cids 4cie. ci3er ci3est ci5et ci3f cifi4 4cig ci3ga cigar5 3cil cil5lin 2cim cim3a ci3me 5cimen 4cinab 4cind cine5a cine5mat ci5ness 4cint ci3ol ci5om ci4po cisi4 cit3r ck1 ckar5 cka5t c4ke ck5if ck4sc cl2 cla5rif 3clas c2le2 2cle. c5lec clemat4 clev3 cli1m c3ling cli2q clo4q c4lotr clue4 clyp5 5clys cn2 c3ni 1c2o2 4co. 3coa co5ba 3coc co3ci co5cu co3dic co3dif 4cody 3coe co5et co3gr 4c3oid co3inc 4col. col3a co3log 5colou co5ly co5mas co4me co3mo4 comp4 con1 con4ati con4ch cond5er con4ey con4ie con3s con3t conta5d 3coo coop4 co3or cop4e co3ph co5pl co3po cop4t 2cora cor5ded cord5er 4cored co3rel 3corn 4coro co5rol 5cort 3cos. cost3a cost5er co5ta 3co3tr 5coty cous5t cov1 co3va cow5a coz4 co5zi c1q cr2 5craf craft5i c4ran 5crani cra5niu cras3t cra4te c2re 4crean cre3at cre4p3 5creti cre4to cret5or cri3l cron4 crost4 4crou 5c4rus cry2 crym3 cryo3 4c5s4 csim5 2ct c2ta c3tac ctac5u c5ta5g ct1an ct5ant c5taria c3tato c1te c4tea c2t5ee c4tent cter4ia ct5es ct5et ct2ic c5ticia c4tics ctifi4e c3tim ct4in. ct4ina ct5ing c3tini c5tin5o c5tio c3t2is c3tit c4titu c4tity ct5ive ct4ivit ct5olo c1tom c3ton c5toris c5toriz c1tr c2tre ctro5t c1tu c2tum c1ty cub3at c4uf cu5ity cul5ab c2uli cull5er cull5in 1c2ult cu4mi 5cuna cun4e 5cuni 5cuol cu5pa cu3pi c3upl 1cur cur4er cur5ial 4cur4o 1cus cus5a c3utiv c3utr 5cuu cu5v 2cy. cy4bi 1cyc cyl3 cy4m cy5no cys4 cys5to cy4t cz2 4da. d4abr 1d2ac dach4 d5ache 3dact d1ag d4a4gi d4ale d4alg dal5ler dam5a 3dame d3ami da5mu 3dang d1an4t d3ap d3ard 5darm 3d4as2 dast5a d1at dativ4 dat4u daugh3 daun5te 3dav d3b d3c4 d1d4 d4dere d3di d3dler d3dli d3dyi 2de. deac3t de5aw de4bi deb5it 3dec de5cant de4cil de1cr 4dect ded3i defor5e de4fy. de3g de4gu de3io 5de3is de3lat deli4e del5ler del5li de5lo 1d4em 4demie 4dem4is demo4n de4mons de3mor de4mos 4demy de1n2a den4d 4dene d3enh deni4e dens5a dens5er den5tit de3od deo3l deon2 deont5 de1p depen4 deposi4 de2pu d3eq derac4 de3rai d4ere 4dered de5reg 3derer 1deri der3k 3derm der4mi der5min 5derne 3dero4 der5os der3s 5deru 4des. de3sa 5desc des4ca de5scal de3sec des4i de3sid des5igna des1p des5pon de3sq d3est. des3ti 1de1t de3tes de5th de2ti dev3il de3vis de3vit de4voi devol5u 3dex 2d5f dfol4 d2g dg4a dgel4 d4gen d3gr 4d1h dhot4 d4hu 4di. 1dia di2ad 3diar diat5om 4d1ib d1ic. dic5am di4ce di3ch d5icl dic5ol 1dict dic5tat dic4te 5dicul d5icur 1did di4ers 3di3ev d4ifo dig3al di3gam dil4 5dill dilo4 di3lu di5mer dimet4 di1mi 2d1in din4e din5gi di5nos 3di1o dio4c di4ola dip5t 3dire di3ri 4d5iro di4s1 d4isc disen3 3disia 3diss d4itas d4iter dithe4 d3ito ditor3 2dity 1diu 1di1v2 di4val di5vine dix4i d1j 2dl4 d1la 5dlef 5dlest 3dlew dlin4 d1lo d5lu 2d1m 4d1n2 1do 4do. d4ob do4c3u dog4a do4j d4ol. dol3en do5line dol5it do4lon d4ols 5dom. doman4 domin5 dom5ino dom5it do5mo don4at 4dony 3doo d2or 4dor. dor4m dort4 d4os do5sim dossi4 dot1a dot4tin 2dous d4own 3dox d1p dr2 d5rail d3ral 3dram dran4 d4ras drast4 3drel dres4 dress5o dri4e d4rif dri4g3 d4rom dropho4 drunk3 4d1s2 d5sl ds3m ds4mi d4sw dt4 dt5ho 1du 2du. du1at 3duc duch5 duci5an du4co du5eli du5ell du5en du5ett du5in dul3c d3ule dul4l dum4be dun4a d5un4c du2p du3pl 5duro d5use dust5er du3u d1v dver2 dvert3 dvoc5at 2d1w dwell3 2d2y dy4ad. dy5ar 5dy4e 5dyk dyl2 dyll3 5dymi 3dyn dys3p d3zo ea2 4eab e1act eac4te ea5cu e5add ead3er ead1i ead3li ea4g eak1 eal3a eal3er ea3log eam4bl eam3er ean5i eap2 eap5er e3app ear3a ear3er ear4li e5ar2r ear4te earth5i eas5er ea4soni e1as1s eassem4 eas4t east5i eat5eni eat3er eat5ie e3atif eatit4 eat4itu e3atri e4atu eau3 eav5i eavi4e eav5ou eaz5i e1b ebar4 eb2b ebe4 e4bel. e4bels e2ben eb5et eb2i e5bil e4bin e4bis e4bl e4bos ebot3o e2br eb1ra eb2t e4buc ebus5i ec2a ec3ade ecad5en ecal5e e5cam e4capo ec3at ec5ath e1ce ecent5o ech3i e4cib eci4f ecip5i e1cl ec3lip econ4sc econstit5 ec3ora ec5oro ec3rat ec5rean e4crem ec1ro ect5ati ec4ter ecti4c ec4tit ec4t5us ec1ul e5culi 2ed e5dans e2dat ede2 e4ded e5deh e4dele edes3t ede3te edeter5 e3dev e5dew ed4g edi4als ed5ical ed5ics ediges4 ed5igr ed3ime ed1it edi2v ediv5id ed3li edor4 e4dox ed1ro edu5cer e2dul ed3ulo e4d5ur ee4ce eed3er ee4do ee2f ee5g ee1i ee2l1i ee2m eem5er eem3i eep1 ee4pa eer4ine eesi4 ee3to e1f efact5o efal4 ef5eree ef5inite e4fite ef4l efor5est 2efu e4fug efut5a egel3 egi5a e4gib e3gla eg3le eg4mi eg5nab e5g4on e2gr e5gur e1h2 e5ho eh5s ehy2 ehyd5r eid4 5eido 4eif eig2 e5ignit e4in. e3inc e2ine e1ing ein5i e4ins. ei4p4 eir3o 4eis eis3i eit5er eith4 e2iv eiv3er e2iz e1j ejudic4 ek3en ek5is ek4l e4lac e5lad el5age elam4 el5anc elast3 e4lates el5ative elch5er eld3er 2ele elea5g 4e4led el5eni el3eno ele3o ele5ph el1er e1les e5less e4leste el3et3o elev3a ele3vi el5ex e4l3ica4 e1lie eli4ers e3lim el3ing eli3on e4li4s elit4t e3liv el4lab ell5iz e3loa e3loc elo5ca eloc3u elo4di e2log elom5ate el5op. el5ops elp5in el3so el5tie e1lu elu4m elus4 elv4 e5lyi 3elyt em3ago em3ana emar4 emarc5a em5atiz emat5ol em5bi e1me4 e4mee e4mel e3mem e4m3era em5ero emet4e em4icis e4mie e2mig emig5ra em3ina em5ing e3mio em3ism e4mita e4miu em4mae 4emnit emo3bi emod4u e2mog e4moi em3olo em5om 4emon e3moni emon5ol e2mor em5oris em3orr e4motic e5moz empa5r empara5 em5pes 4empli. em4pre em3um e5mut en3ac e4nal en3am3o en4ann e2n3ar en3as. ena5ture 3encep en4cile enct4 2end en4d5al en4dedl end5rit 4ene ene5d en3ee e5nelle e5nep e2ner e5nereo ener5v en5esi e3ness en1et en4ett e2n3eu e3new en3gi en3ic en5ier en3ig3r en5in enit5u en3k en1o en3oi eno2m en3oty enov3 en2s ens5al en3sp en4sum en4sus ent3ar en4ters en5tia en4tify en2to en4tri ent5rin ent5up en4tus 4enu en3ua en3uf en3ur en5ut 5enwa eo3b e4och e4oda eof2 eo2l eol5ar. eol5at eologi4 e5olu eo3m eon4a e3ont eop4t e1or1 eor4de eor3e eor5o eo1s2 eo4to e1pa ep4al ep5arc epa4t epend5en ep5ert e4pete epe5titio ep5ex eph1 eph4i e2pig e5pla ep3lic epol3a epol3i epolit5 ep3reh epres5e ep5rim e4p5rob5 ept3or e1p4u e3pur5 e4puta equin4 equi5no er1 era4cie era4do era4g era4l er3aph er3api er3apy 4erati. 4eratim er5atu er3bat er3be erb5os 2erc er3ch er3cl 2erd erd5ar erdi4e 2ere er3eal 4ered er3egr er5el. er5ell er5els e4reme er3en 5erend eren4e ere5ol e3req er3er ere4s er5ese er3esi er5este er5esti eres5tr eret4 er3et. er3ets er3ett ere4v er3ex ergi3v er3gl er3ia. er4ian eri4cid 5er5ick er2id er3ie er3iff er4imet er3in eri4na eri4on er3iou er4isc eri5sta 4eri2t e3riv er5iz 4erj erk4 er3me er4moi 5ernacl er5nalis ern3er ern3is ern3it 4ero. er3oid ero5is ero5st erpent5in erre5la er4rep er5sine er5ted er4ter ert5er. ert5ers er4thi ert5iz 2eru eru4b eru5d erund5 er4vil 5erwau eryth3 2erz 4es. es5am es5an e2sc es5can es5che esci5e escut5 e3sea e3sect e5see e5seg5 ese4l es5enc e3sh4a e1shi e5shu esi4an es5ic. e5sick es5iden esi5diu es5ies es3im es3in e5sion e4sit es4it. es4its e3skin e3s4mi es4od es3ola es3ol3u es3ona eso3p e1sor es3per3 es5pira es5pit es4pl esplen5 es5pot e5s2pr es4s3an essar5 ess5ee es4sil es2so esta4b est3an e5star es5tau e2sti est5ifi est5igati e3stoc es5too est4r estud4 e1su e2s3ul es4ur5 et2a et3al. et5allis et3al5o eta5me eta3p et3ari et5ary et4as et3ate et3ati et5ay et3eer etell5i etend5er et5eni eter2 et3er3a et5eria etex4 e2th1 ethyl3 2etia e3ticu eti4gi e5tim et3in eti4na e3tir et5itiv eti4u et5olo e5tomete e2ton et3ona etor3i etra5g 4e4tral etra5m et4ran et5ress et1ri et4ria etrib5a e4trim et1ro et2t et3ter etud4 et3ude e4tum et4we et5z eudio5 eue4 euk5 4eum e3urg eur5i eus4 eu5ten eu3ter eut3i ev4abi eval5e eva2p3 ev3ast ev3at ev5eli eve4n ev5erat ev5eren ever4er e4veri e4ves e1via e4viab e2vic evictu4 evid3 ev5ig ev4ile ev5ish evis5in evis5o e4viu evoc3 evol5e evol5ute evu4 e1wa e4wag e5way ew1er e3wh ew5ie ew1in ew5ish e3wit e1wr ex5ic ex4on. 1exp 4ey. ey4as eyl4 ey3s2 ez5er. ez5ers ez5ie 1f2a 2fa. fab4i fa3cet fact2 fa2c3u 2f3ag fall5in 5falo fa5lon fals5ifie 4fan3a fan5tasiz fant3i 5far far3i 5faw 4f5b 2f5d 2fe. 3feas fea3tu feb5r 3fec 2fed1 5fei fe1li fem3i femin5 fend5er f5eni 4fered fer3ee 3fero fe5roc fer5om 3ferr fer3v 2fes. fess3o fest3a fest5i fe4t fet4al fet4in fet4o 3feu fe5veri 2ff f1fe ffec4te f5fet f1fi f5fia f3fic f5fie ffil3 f2f3is ff4le ff3lin ffoc3 ffoni4 ffor3e f3fr ffranch5 4f5h fi5ance fib5u 4fic. 4fical 3fici 4fics fi5del fid3en fiel4 fier4c fight5 1fi2l 2fin fin2a fi3nal find3 fin2e f1ing 5finin fin4ni fir2m1 f3ita f5itee fl2 3fla fle2s f3lica flin4 3flo flo5ric 3flu flum4i 1fo 4fo. 3foc fo2e foeti4 fo1l4i fo4lie foment4 fo2n fon4de 3foo fo5ram for5ay for5b for4di fore3t 5form for4m3a fortu5na fo3v 1fr2 frag5a frant4 frar4 fratch4 fre4s frost5i fruc4 2f3s fs4p 2ft f1ted f4ter. ft5es fti4et ft4ine 3fu 4fu. fu4c fuel5li fug4a fu4min fun2g 4fured fur3n fu3sil fus5o fu5til 4ga. ga4cie gadi4 ga4dos 3gag 3gai 3gale ga5len gali4a gal5ler 3galo gam4bl gan5at 4ganed gang5er g5ant. gan4tr g5ants g5arc g4are gar3ee gariz4a ga5rot gar5p 5garr 1ga4s gas5i gas3o gasol5 gass5in gast3r g1at g4at. gat5iv g4ato. g4atos g4att gat5u gaud5 ga5za g1b g5d4 2ge. 5geal 3gean 2ge4d 3gedi 5gedn 4gef 1gel 4gele ge4li gel4in gel5li ge4lu 2gely gem3i 5gemo 3gen gen4du gen5it gen3o gen5ti ge4o geo3lo 4gere 3germ4 2ges. 5gess gest5at 3get get3a 2g1f 2g1g gg4a g2ge g5gedl g3ger g5gerer ggi4a5 g3gli gglu3 g5gly ggrav3 g4gro 2gh g5hai gh5eni g3ho g4hos gh2t 1g2i 4gi. gi4all gi4at 3gib gi5co gi4g gi5gan gin5gi 3gio gi4or gi4ot 5gip gi5pa g4i4s 5gis. gi2t1 5gitu giv5en. 2gl2 g3lar 5glass. glec4 3gler g4leto g4letr g4ley gli5on g5lis4 3glo 4g5lod glom3 4glop 3glu glu5te glu5ti 3glyp 2g1m4 2gn2 g1na g4nab g5nate 5gnath g5nati gna5tur gn5edl gn5ee gn3er g1ni g4nia g2n3in gn4in. g4ni2o g2no 5gnori gno4s 2go. 5goa 3goc 5god 3goe go4et go4ge 4gogram g5oid go3is go2me 5gonn go5nom 3goo goph4 4gor. 5gorg 4gors g4ory 3gos gos4t 2gou gour4i g1ous gov1 g3p 1gr2 grab4 3gram 4grame gra2p g4re gril4 grim3a g4ro gro4g g5ron grop4 3gru gru3en gru5i grum4b 2g1s gs4c gs4t g4sti gth5eni g5to g4u2a gu5ab 5guan 3guard g5uat 2gue 5gueu 5guit4 gui5ta gu2ma gu4mi 3gun g4uras g4ured gur4n gur4u 4gury gust5a 2g1w 2gy gy2b 5gym 3gyn gyn5o g5z2 ha2 4ha. h4ac hadi4e had4ine hae3o haged5 hagi3o hag5u ha5ic hais4 hak4ine hal5ant ha4m ham5an han4cro han2g h1ani4 h5aniz han4t hant3a ha4pe hap3l har1a har5b har4d har5die harge4 ha5rism har3o har4ted har4ti has4te hat5o haught5 havel4 hav5ersi hav5o h1b h1c h1d hdeac5 hdu4 he2 4he. h2ea 1head 3hear hearch4 heast5 heav5en hec3t4 he5del he3do heek4 h4ei he3is he5lat h5elin he3lio he5liu hel4li h3el3o hem1a he3men hemis4 he5mop hem4p hende5 he3or hep1 h1er. her4as her2b herb3a herb3i here3a here3o h5erett h5erh her5ial h5erine h1erl her5om h4eron h1ers h5erwa hes3tr het1 h4et3a het3i het4ted heu2 heum3 heumat5 he4v4 hev5i hex5o h1f h5h 2hi. hi4ar h1ic hi3c4an hi4cin h4icl h5ie. h1ier h4i4ers h1ies h3ifi4 h3ify hig4o hi5ka hi4l hi5ma4 hi5mer himos4 h1in hin4d h2in2e hi5nie h5iniz hi5nop h2ins hio5lo h4ior hi2p hip3l h4ir hir4r hirr5i hit4a hiv5a 4hl h3la h1le h3let h1l2i hli4a 2h1m h4manic h5mica 2h1n2 hnocen5 4ho. ho3an ho4co ho3don ho5du ho5ep hol3ar hold1 hol4is. ho5lys ho4mag hom5in h2o4n hon5em ho5neu hon3ey hong3i ho5nio hon1o 1hood hoo5r h4ope ho2p5r h4op4te hor5et h4orn horn5i ho5rog hort5h hosi4 ho4ton h2ou 3house3 4h1p 2hr hras5eo hre4 hre5ma hr5er hres4 hri4 hrill5in hrim4 h5rit h3rod hrom4i hry4 h3rym3 2h1s hsi4 h4sk ht5ag ht5ee ht3en. ht5ener ht3eni ht3ens ht5eo ht5es ht4foo h1th ht4ine hu4g hu4mat hu5mer hu4min hun4c hunk4 hun4t hur3i hu3sia huz4 h1w h4wart h2y hy2l hyl5en hy2m hyn4 hy3o hyol5i hy1pe hy3ph hyr4 hys3te hy4t 2i1a2 ia4bl iab5olis iab5oliz i2ach iac3o i2ac2r ia5cri ia5dem i5ae iaf4 i2ag4 ia3gn i5a4g5o ia3gr i3ah i5ai ialect4 i3alit ial5li 4ialn i2a3lo ia5ly i5amb ia3me ianch5 i3ant i5ape ia3ph i2ard 4iarit i3at ia5the i5atom iat4u iatur4a i3au iav4 ib3era ib1i ibio4 ibios4 ib5li 4ibo i4bon ibor4 i4bose i5bou ib1ri 4ibu ib3uta ic3ac ic5ado i4cal ic1an 2icar iccu4 4ice i5ceo 4ich ich4i ich5ing ich5ol 4icin i5cio 2ick ic4lo 2i2co ico3c ic5ola icon3o i5cop icotyle5 2i1cr i4cri i4cru i4cry ic4tedl ic4ter ict5ic 2icu icu4lu ic3um i5cun4 i5cut 2i1cy i2d id1a i5day ide4m id3enc id3era iderm5 i3dicu id3if i5dig i5dil i3dim id4ines idios4 idir4 id1is4 id4ist 2i4d1it idi4v id3li id3ol idol3a 4idomi id3ow 4idr id5ri id3ul ie2 4iec 2ieg2 ie3ga ie5i i5ell 4iem 2i1en ien2d i1er i3eres i2eri ieri4n 4iern ier2o i4ert i3esc ies3el i1es2t i3est. 2i1et i4et. iet3ie 4ieu i5euti iev3a iev3er iev3o 2i1f i2fe if4fa iff5ler if3ic. i4ficac if5ics ifi4d ifi4n 4i2fl i3fo ifoc5 if5tee i3fy 2ig i3gad ig3and 3igar i1ge i3ger ight5er. ight5ers 4igi ign5iz igno5m i3gon ig1or ig3ot i5gret i4g5ro igu5it ig1ur 2i1h ihy4 2ii i5in ija4 4iju 2ik2 ik5an ike4b i2l3a ila4g ila5tel i5later il4ax il5dr il4du i3len ilesi4 il3f il3ia. il3iar ili4arl i3lici i5lien ili4er ili4fe il4ific il1in il5ine. 4iliou il5ipp il5iq il4ite ilit5u il4mo i5lon il3ou ilth4 il2tr 4ilu il5ul i5lum il5ure il3v 4ilym ima4c im2ag im3age im1al im5am i5m2as i4mated i4matin imat5u im1i i3m2ie im4ine im5ino im5mes i2mo i5mog i3mon im5oo i3mos. impar5a imparad5 im5pie impot5 im5pr impu4 im1ul im5um in3ab 4inace in4ado in5agl in3air ina4l 4inalit in5am in3an in3ap in4ars i3nas. 4inata inator5 in3au in4aw 2inc inc4tua 2ind in5dar inde5p indes5 inde3t indeterm5 in5dro 4inea 4ined in5ee in5ega 4in5eo ine4s in3esi ine5te 4ineu inev5 infilt5 infol4 4infu 4inga in5gal 4inge ing5ha 4ingi 4ingle 4ingli 4ingo 4ingu ing3um 2ini in5ia. 4inic in4ici in3ion in4itud 4ink ink4ine 4inl 2inn 2ino 4ino. in3oi i5nole 4inos i3nos. in5ose in3osi 4inq ins2 in4sch5 inse2 insect5 insec5u in3si 5insk insolv5 in4tee int5ess in3til int5res intu5m 2inu in5ul in5um in3un in3ur invol5u 2io2 ioact4 i1od iod3i4 iod5o ioe4 io3gr 4i1ol io3ma i4omani io3mo i5ope io3ph i5opo iop4s i1or iora4m 4iore 4iorit 5ioriz 4iorl ior4n io3sc i3ose i3osi i4oso io5sta i3ot iot4a io5th iot5ic io5tr i4oty i4our. i4ours i5ox 2ip ip3al ipap4 ipar3o ipart5ite ip1at i3pend i1ph2e iphen3 i5pheri iphi4 i4phu ip3id i5pil ip3in ip4ine ipir4 ip5is ip1i4t ip4iti ip3lin ip3lo i3po i4pog i4poli i4pom ipon3 i4pow ip2pl ip3pli ip4re ip5tori ip1ul i5put ipy4 2iq i3qua 2ir ir1a ir4abi ira4c ir4ae. ir4ag ir4alin ir4alli i5raso irassi4 iray4 ird3i ire3a ir3ec ir5ee irel4 ire5li ires4 ir5ess ir1i ir2i4d ir4im ir4is. 5iriz irl5ing ir5och ir5ol ir3om ir4q ir2s ir5ta ir5tee irwo4me i4sa is5ad is3age is1al is3am is1an is3ar is5av 4isb i2s3c is5chi isci5c 4i1sec ise5cr is3ell 4is3en is2er is5ere i2s3et 4iseu is3har ish5ee 4ishio ish3op is5hor 2isia is5ic is3ie 4isim is3inc 4isis is4ke is1l islun4 2isma is1on is5oner iso5p is1p i3s2ph 5ispr 2is1s iss5ad is4sal is5san iss4iv iss4o 4ista is4tal ist5enc ist5ent is5terer 4isth is4t3ic 4istl i4s1to 4is4tom is1tr 3istry 4isty i5sul is3ur 2isy it1a it5ab ita4c 4itai it3am it4ana it4as it3at i3tect it3ee it3enc it3ent it3era 2ith itha5l ith5i i5thol ith3r ithy5 2itia iti4co it5icu it1ie it3ig 4itim it4in. it4ins 4itio. 4itione i5tiq 4i5tit it3iv it4li it5lo 4ito. it5ol 2iton it1ou 2itr it5ress i4tric 2itt it4tit itu4als it5uar 4itue it1ul it1ur it3us 2i1u2 i3um iur5e 2iva iv5anc iv1at i4ved iv5el. iv5eling iv5els i4ver. iv3eri i4vers. iver5sal ives4 iv3et i4vie iv3if i5vilit 5ivist. 5ivists iv1it i2vo ivoc3 i5vore 2i1w 2ix ix3o i5ye 1iz 4izah iz3i2 2izo iz5oi 2izz 1ja 2ja. 3jac ja2c5o jac3u jag5u jal4 ja5lo ja5pan jel5la jeo2 jeop3 4jes jeu4 jew3 2ji 3jig jil4 jill5 5jis. 3jo2 4jo. joc5o joc5u jol4e 4jr 4js ju1di jui4 ju5l ju3ni juscu4 jut3a ju1v k4abi k2a5bu kach4 k3a4g kais5 ka4l ka5lim kal4is k4an ka3o kap4 kar4i 1kas. kaur4 kav4 k1b4 k1c kcom4 k5d2 kdo4 kdol5 4ked ke5da k5ede 3kee ke4g ken4d keno4 kep5t ker5a k4ere k5erel ker4j ker5o kes4i ket5a key4wo k1f kfur4 k3ho 5kih ki2l kilo3 k1in k2in. 3kind kinema4 kin5et k3ing kin4i k2ins kir3m kir4r kis4 3kis. k1ish kit5c ki4w kk4 k5ker k2l2 k3la k5lea k3ler k3let k3li k3lo k1m kn2 k2no 1know ko5a kol4 ko5mi ko5pe k1p k5ro4 k3ru 4k1s k3sl ks2mi ks4t k1t kur5 k5v k1w 3kyl l2a 4la. 5laa lab5ar label4 5labr l4ac la2ca la5ceo la5cer la4ch la2co 5la5col lac5on la3cu la4de l5adm l4ae l4af la3ger la4gis lag3r 5lah4 la4ic. l4al 4lale 5lamandr la5melli lam4ie lam1o l5amu lan3at lan2d 3land. land3i 3lands lan4er lan3et lan5tine lan4tr la4p lapi4 lar5an lar5de 4lared l4as lat5al la4te 5latilis 5latiliz 5latini lat5us l4au 5laur lav5at l4aw 4laz l3b lbe4 l4bit l4by l1c2 l2cat lce4 lcen4 l4cere lch4e l3dar l3ded l3deh l5dera ld3est l5dew ldi2 l3die ld4ine l5di5nes ld3ish ld5li l3do 4le. 3leagu le5atio leav5er l3eb5ra le3ca le5cha lect5ica 2led le5dr leg1a l3egan 3legg le4gin leg3o le3gra lek4 4leled lel5o lelu5 lem5enc lem3is l5emiz 5lemm l3emn le2mo lem5on l5enda len5dar lend4e len4do le1ne le5nie len3o 4lentio len5u le3on leo4s le5q 2ler le5rec 5l4eria l4eric le5rig ler3om leros4 ler3ot 4les. le3sco 3les4s 1let le5tra le5tre 5le5tu5 leur5 2lev l3eva 5leve lev5ita le4wi l5exa 1ley lf5id l2fo lf3on l1g2 l4gal l4gem lgi4a l4gid l4goi l3h 4li. li4ani lias4 lib1r l1ic. 5lich li4cie 5licio l3ic3on lict4o li4cu l3ida l4idar 5lidif 3lieu l4ife l4ifo lift5er 1lig li5ger light5i 5lih 3lik 1l4il lil4i lim2b limet4e lim4p l4ina. l4inas lin4d l4ine 5lin3ea lin4er. lin4ers lin4ger ling3i 5lingt 3lingu 3linq lint5i 3liog li4ol lio3m liot4 li3ou 5liph lipt5 li1q 3lir l1is l4isk 5lisse l1it l2it. l3it5a 5liter 3lith 5litia 3litr lit4u l4iv l5ivat liv3er liv5id lkal5o lk5at lk3er. lk3ers ll2 l1la lla4ba llact4 l5las l4law l5leb l1lec l1leg l3lei l1lel lle5m l1len l3lep l3leu l3lev ll3f l1li lli5am lli4an llib4e llic4 l4licl lli5co l5lie lligat4 l2lin l5lin. l3lina l3line l5lio lli5v ll3m l1lo lloc3a lloc5u llo2q l4lov llow5er ll3p ll3s ll5t l1lu llun4 l5lya l3lyc l3lyg l3lyh l3lyi l5lym lm2 l1ma l1me l4mer lm3ing l5mip l2m3od l1n4 l3ne lneo4 2lo. 5load 5lob3a 1loc loc3al loc5ul lo4cus. 2locy l3odis 3lo3dr 1log lo5gan 4loi. lo5mi lom4m lon4al lon4e l5onel lo5ney long5in 3lonia loni4e l3onis l3oniz loom5er lop4e 5lo5pen l3opm 1lo1q l4ored lor5iat lor4ife lo5rof loros4 l4os. lo1so loss4 los5sie lot5at loth4ie lo5tu 5loup lp1at lp3er lph2 l5phe l3phin l2pho l3pie l3pit lr4 l3ri l3ro l5ru 4ls l5sam ls5an lsi4fia lsi4m ls4is l5sk ls4p l1s2t ltan3e l4tang lt5ant l5tar l1te l4tei ltern3 lth3i lti4ci ltim4a ltin4 lti3t l3t4iv lt4or l1tr ltramont5 l1tu l4tus 4lu. lu1a luch4 lu2c5o luc5ra lu4cu 4lue lu1en lu5er lu1i lu4it lum4bri lu4mo 5lump lu2m5u lunch5eo 5lune l3unta lu3ori 5lup 3lur3o lusk5 luss4 lut5an 4lut5ar 5lutioniz lu5toc lut5r lu1v lv5ate l5vet4 l4vi l4vor l3w lx4 2ly 4ly. ly1c ly4ca lyc4l lyc5os lym2 lymph5 lyp2 ly4pa lypt5o 3lyr lys5er 3lyw 3lyz lz4 4ma. m4aca mac3ad ma5chine 5machy ma4cis mact4 4mad. 4mada 4mads ma4ge 5magn 2mago4 2mah ma5ho 3ma4i 4mai. maid3 5mak mal3ap mal5ari 5male2 mal5ed mal3ef m3alg m3alis mal4is. mal3le mal4li 2mam mament4 m5ament. 1man 3m4an. man3a man5dar man3dr manic4 man4ica ma5nil m4ans mantel5 2map m3aph 1mar 5maran mar5ol ma5ron ma3roo mar5ri mar4shi mar3v ma3son massi4 mass5ing 3mas1t mas4ted mast4ic mas4tin m4at. m4aten ma3ter mater5n4 m4atit mat4iti m4atiza ma3tog mat5om ma3top m4ats 3m4att ma5ture mav4 2m1b mbat4t mb4d m5bec m5berer m4bery m4bes mb2i m2bic m5bil5 m4b3ing m4bis mb5ist mbival5 m5bler m3bli mbru4 mbu3l mbur4 m1c m5d m2e 2me. mea5g me5and me4ba me4bi 2med 4med. 3media med5icat 4medie m5ed5ies 3medit me4do m5edy me2g 5meg2a1 mega5t 4mele mel5ee mel5ler mel3on mel4t melt5er me2m 4m5eme 1men 3men. 2mena men4ag mend5er mend5o me1ne ment5or 5ments 5meog me4p m5eran 4mere mer4ia 2me2s mes5en me5si4a mes5q 3mesti4 1me2t meta3t met1e 4meted meth4i meti4c met5ici met3o met3ri m1f 4m3h 4mi. m1ic mi4cin mi3co 3micro m4ict mi3cul mi4cus m4idi mid4in mid5on mi5fi mig5a migh5ti mi2gr 4mij mi5ka m2il m3ila mil4ad 4m5ilie mil5ies 3mill mi5lo mil4t 3m2im mim5i 5min4d mind5er min4er. min4ers ming5li min5ie m4init min3ol 1m4int minth5o mi3o mi3p mirab4 mi5racu m2is. m4isc mi4se 4misem mis3ha 5missi m3ist. mis4tin m3ists mi2t m5itan 4mity 3miu 5mix 4m1l mlo5cuti mlun4 2m1m2 mman4d mmand5er m3medi mmel5li mmet4e mmig3 mmin3u mmis3 mmob3 m5moc mmor3 mmut3a 4m1n2 mnif4 m4nin mni5o mnis4 mno5l 1mo 4mo. 2moc mod1 mod5ifie mogast4 mo4go mog5ri m5oir mok4i mol3a 4molog. 4mologs 4mologu mo3ly mo1m mo4mis m4on mona4 4moned mon1g mo4no monolo4 monolog5i m4op mophil5i mop4t m3orab m3orat4 mor4ato m5ord mo5rel 3moria m5oriz mor5on 3morp 3morse mor5tal mo3sp 5most mo3sta 2m1ous m1p m3pa m4panc m4pant mpath3 mpel5li m5perer mper3i mpet5it mphal5o m4phe m4phl m2pi mp5id m5pig mp3ily mp1in m3pir mp3is m3po mpol5it mpo2t mpov5 mp3to mp5tr m3pu m5q m3r m4ry 4m1s msel5f m5si msol4 mtu4 muck4e muff4 mul1t2 m5unc mu5nio mun3is mus5co mu4se mus5ke mu3til m1v m3w 2my 5my3c my4d my3e 3myi 5myst4 3myt n1a 2na. na2c nach4 na5cious. na5ciousl nac4te nac5tiva na5culari na4d4a nadi4 nad4op n2ae. naffil4 nag4a n4agen 5na5geri na4gi n5ago 5n4a3gr 5nah 5nail na5iv nak2 4naled n5alg n4alia na3ly 1nam 3name nam4n na5nas nannot4 nan4ta nan5ted nan4to na5o 4n4ard nar5tisti n2as nas5i nas5p nas3s nas5te nat5al na5tat n4atee na3the nath4l nati4 n4ati. nat5ic n4ato. na3tom na4tos nat4r na5turi naugh5ti naus3 3naut naut3i na2v na5vel n3b4 nbarric5 nbeau4 nbe4n nbene4 nbet4 nbit4 n1c2a n4cal. ncarn5at ncel4i ncent5ri n4cept. n3cer ncer4e n4ces. n5cet n5cey n3cha nch4ie n3cho nch5olo n3chu n4cic ncid5en n4cif ncip5ie n1c2l n4cles ncoc4 nco5pat n1cr nc1t nc4tin nct4ivi nct2o n1cu ncu4lo n4cun n4curvi ncus4t 4nd n2da n3da4c n3dal n4dale n3dam nd3anc nde2 n3dea nde3ci n1ded nde4l ndeleg4 nd3enc ndepre4 n3derl nde4s ndes5cr n5dez nd4hi n1dic ndic5u ndid5a n3die nd5ily nd4ine nd3ise nd5is4i nd5ism. nd5ity nd3ler nd1li n5doc ndor4 n2dou nd5our ndrag5 ndram4 n5dron ndu4b nduct5iv n4dun nd2we n3dyi 2ne. ne3alo n3ear ne2b3u 5neck ne4cl ne2co n5ectom 2ned 3nedi ne4du4 neg3a ne3go 5negu neis4 2nele ne5lia neli4g n4ely ne2mo 4n1en n3end neo3l neon4 ne2p n1er 4nered 5nering ner5o ner4r5 ner2v nerv5in 2nes. n1esc ne3sia 1ness n1est nes3tr net3a net3ic ne4tog net1r neuma5to neut5r nev5er n4ew news3 n4eys. n3f nfo4 nform5er nfortu5 nfran3 4ng ng2a n4gae n5gee n3geri n5gero ngh4 n2gi n5gic ngio4g n5glem n3glie n5glio ng1n n1go n4gry n1gu n2gum n1h2 nhab3 nho4 nhy2 nhyd5 n1i 4ni. 3niac ni3ba n4icab ni4cen 4nicl nict5a ni4cul4 ni4dio n2ie ni4ers nif4f nift4 nif5ti ni2g night5i n3igm 3nign nik5e n2il nil4a n3im1 n4ime 5nimet n4ines nin4j 5ninn n4inu 5niol ni1ou 3nipu 5niq n4is. n4isk nis4l nis4o n5iss nis5ter. nis5ters nitch4 ni4te ni3tho n4itos ni5tra nit5res ni3tri nit4ur n2iv niv4a ni3vo nivoc4 niz5en n1j njam2 njur5i 4n2k nk5ar n5kero n3key nk5if nk5il 4n1l2 nland5 n3le nlet4 n3m nmater4 nmor5ti n1n4 nne4 nnel5li nnerv5a n3ni nni3ki nnov3 n5nyi 4no. n5obi no5bil nob4l no5blem nobser4 n5ocula no4di n4ody noe4c no4fa nois5i n5ol. no3la nol4i nom3al 1nomi no2mo 4none 3nonic 5nood nop5i nora4t nor5di nor4ia nor4is nor3ma n4oro nor4t n4os. nos4o no3sp not1a 3note n1ou n4oug 3noun 2nous nou5v nova4l nove2 nov3el novel5e n4ow now5er now3l n3p4 npil4 npla4 npoin4 npo5la npos4 npri4 n1q n4quef n1r nre4i nre3m nres5tr 4n1s ns2c n2sco ns3cot n4scu n5sec nsec4te n2ses n5seu n3sh2 n2si ns3ib n4sic n5sick n3sid n3sie ns5ifi ns3ing n3sio n3s2is nsi2t ns3iv nsolu4 n5son n4sore n4sory n3spir n3s2t nsta4 nstil4 n3su nsur4e n3swa ntab4u nt3age nt1al n4t3anc nt5and ntan5eo n4t3ant nt4ariu n5tasis nt3ast nt1at nt5ath nt3ati nt5ativ n5tau n1te n4tec n4tee. n4tees n3tel ntend5en n4teo n4ter. n3teri n5tern ntern5al nter5nat nth2 n1the nther5 nth5ine nt2i nt4ib n4tic. n5ticis n5ticiz n4tics ntic4u4 n3tid4 n1tie n4tify. n3tig nt5ilati n5till nt3ing nt5ing. nti3p n4tipar n4tis. nt3ism nt3ist n5titio nt3iz n2tj n1t2o n3tom ntoni4 n5top n1tr ntra3d nt3ral n4trant n3trat nt5ress nt3ril ntrol5ler n5trym n1tu n3tua ntub5 ntup5li n5tur n2ty n2u nu1a 5nuc 3nud nud5i nu3en nug4a nu3i nu4is 5nuk n4ulo n3ult nultim5 nu1me 5numenta 5numer 5numi 3nunc nu3tat n5utiv nu4to nu1tr n3v2 nve2 nvel3 nven4e nven5o nvers5an nvi4t nvoc5at n5w nwin4 nwom4 n2x4 2ny2 5nyc nym5it nyth4 n1z2 nzy4 2oa2 o5ace o3act oad5er oad5i o3ag oak5er o3ales oal4i oal5in o5alit oan4t oap5i oar5er oar4se oast5er oat5a oat5ee oat5er 4oba obe4l ob2i ob3ing 2obi3o ob3it o3bla ob1li 4obo ob3oc o5bol o5bot o3bra obrom4 ob5t ob3ul o3bus 2oc oc2a o4cab o3cad oc5ag o5calli o4c5ativ oc5ato 4o3ce2 o4cea ocen5o ocess4i och4e och5in o3chon ochro4n o5chu oci3ab oci4al o1cl o2cle o1cr ocre3 oct2 oc2te oc1to ocu4lu ocum4 oc5uo ocuss4 ocus5si ocut5r o1cy o5cyt ocyt5o od3al. ode4c o5deg ode4ga o5dend o3dent odes4 od3ica o4d1ie od3iga od4il od1is2 odis5ia od5it 5odiz od3li o2do od5olo od5ous o3dro od5ru o2du odu5cer o4duct. o4ducts od3ul o5dyt oe3a oe4bi oe5cu oe4d o5ee oe5ic o3elec oelli4 oelo4 oe3o4p oep5 o5eq o3er oes3t o1et o4et. oet3i oet4r 3oeu o3ev o3ex oflu4 4ofo o4ful ofun4 2o1g o2ga o3gam og5ar5 o3gas ogen1 o5gey o3gi o4gio og2na ogoni4 o4got o2gri o4gro og4sh o2gu o5gyr o1h2 o3ha ohab3 o3he oher4er o3ho4 ohy4 2oi oi4c o3ic. oi5ch o2i4d 4oide oig4 oi5ki5 oil3er oil5i oin3de o3ing oin4t5er oin4tr oi4o 4ois o3ism oi4t oit4al oith4 o1j ok4ine ok3l ok5u ola4c o4lack o5lali ol4an olan5d ol5ast olat5er ol5ch ole2c4 ol5eci ol5efi o3leo ole4on o3lep ol1er o3lest o3leu o1lia ol3ica o3lice ol5iciz ol5ick ol3ics ol5id. oli2e o3lier ol5ies. o5lif oli4f3e oli5go o5lina ol3ing oli5os ol5ip4 olis4 ol2it olle2 ollim3 ol4lope ol4lyi ol3mi o1lo 4oloc ol3oid o4lona olon5el ol1or o3los ol1ou 4ol1ub o3lumi o5lunte ol3us. oly3ph 4olyt 2om o1ma o4mab o2mac o2mal o4mane omast4 o3mat om4be ome4d ome4g omeg5a ome3li om3ena omen4t o3meri om1i o3mia omi2c omic5r om4ie. omil4 om4iny omiss4 om2it omme4 om2na omni3 o4moi omoli3 o2mo4n om5ony o4mos. omot5iv o2mou om5pil ompt5er ona4d on3ai o5nas. onast5i on5ativ 4onau on1c oncat3 on4cho 5ond5ar ond5ent on3der on3dr on5dy o2ne 4onea onec4r 4oned on1ee on5ell o3neo on3ess on1et ong3at on4gu 4onh 4o1nia on5iar 2oni4c onic5a onical4 on4id on3ies on3if o5nig o1nio onk4s 4onnes on5odi on5oi ono4mi 4o5nomic ono3s o5nota ons2 2ont ont5ane. on4ter onti5fi onton5 ont4r on4tre on5ur o5nus onvo5lu on2z 2oo oof3er oo1i ook3er ook3i oo4le ool5ie oo4m oon3i oo2p oop4ie o3opt oo4se oost5er oo2t oot3er ooz5er o1pa o4pab o5pali opa5ra opath5 o5pec opens4 op1er 3opera 4operag o1pha o4phe oph4ie o5phil op5hol o1phy ophy5la op1i op3ies op5ing o3p2it 4opl oplast4 o4poi opol3i opon4 op5ony op5ori opoun4 o2p5ov op2pl op5pli oprac4 op3ran opre4 opro4l op5rop op5so 1op1t op2ta op1u o5quial or1a or5ado ora4g o5rai or5al 4orals oram4 oran3e orator5 orb3in or4ch orch3i or4du 2ore or5ead ore5ar ore5ca ore3f ore3g or3ei oreo5l or3esc ore3sh or3ess orest5at or5este or5ett ore4v 5orex or4fr or5gn or1i 4ori. or3ia. 4orian ori4ci ori5cid orien4 or3if 5orig ori5ga ori4no 4orio. or5ion 4orios ork5a 2orm orm1i or3n4a 5ornis or3nit or3one o5roo or5ose or5oso or1ou orrel3 orres3 or4sc or4sey or4sti 2ort ort3an ort3at ort3er or5tes. or3thi or4thr or4tit ort3iz or4tor or5tra ort3re 4or1u or4un ory5p osa5i os3al osar5 o1sc os4ca os4ce o2sch o4sci osclero5s o3sec osec3u ose5g os5enc osens4 os5eo oser4 o2set os5eu o3sia osi4al osi4an os5ide o3sier os5if os1in o4sis o5ske o5son o3soph os3opo 4osp o3spec os1pi os4sa oss5ar os4sit 4osta ost5age os4tar os5tee os5ten osten5t ost5ica os3til o5stome ost3or 4osu os1ur 2ot ot3a4g o5talit ot3am ot4anic o3tap ot4atio o5ta5v o3tax o4ted oter4m ot5esta 4oth othalam5 oth5erin o5therm otherm5a o5thor o5tia o5till 5ot5iniz ot4iv o3tiva o5tivi o1t2o o5tone o4torn o4tou 4o1tr oturi4 oty3le o4u2 5ou3a oub2 ou5br ou5ca ou5co oud5i 4oue ou3et oug4 ou5ga ought5i ou5gi oul4t oult5i ou3m 2oun oun2d ound5a ound5el oun5gin oun3tr oup5li our3er ou5san 2ouse 5ousia ouss4 out5ish ouv5a ova3le o5var 4ovati ov5eling o4ver. over3b over3s ov4ete ovid5en o1vis ovis5o o2v5os ow3ag ow3an o5way owd4i owd3l ow1el owel5li ow5ha owhith4 ow1i ow5in owi5ne ows4 ow5sh ow5sl ow5y o4x ox3i oxic5ol ox5o 2oy oy5a oys4 2oz o1zo ozo5i o3zyg 4pa. pac4te pa5dou pad4r paes4 pa3gan 4pagat pag4ati pain2 4pairm pa5lan pal3in pa3lo p4als pan5ac pan1e pan3i pa4pa pa3pe pap3u pa3py 1par para5s par3l pa3roc pa3rol par5on 1p4as pass5ive pas1t pas4tin pa3ter pati4n p5ato pat4ric pa5tricia 5pau paul5e pau3p pa5vil 5paw pawk4 paw5ki 2p1b p1c4 p5d2 2pe. pearl5i pe4co pec4tu 2ped 5ped3a 3pede 3pedi ped3is 3peds pe2du p4ee pe2f 4pele pe5leo pel5v pen4at 5p4enc pend5er pen5dr pen4ic 3p4enn pens5ati pen5u pe5on 5perc percent5 4pere perem5i p4eri 5p4er3n p3eron per4os. per5tin pert5is per3v p4ery 2pes pes4s3 pes5til 3pet pet5all pet3en pe2ti pet3r pe4wa 4pex p1f p5g 2ph. 4phae pha5ged ph5al. ph2an phant5i phe4 ph5esi ph3et 3phib 4phic 1phil phi4n ph1is phi5th ph2l 1pho 4phobl 4phoned 3phor ph5oriz phos3p ph3ou 3phra 4phs 1phu phu5i 2phy. 3phyl 4pi. 3piar 4pica p5ical pi3co pi4cr pict4 p2ie p4iest pi5eti p5ifie pig3n p2il 3pile pill5in 5pilo pi3lot pim2 pin4e pin5et 3pinge p4inn 5p4ins 3pi1o pip4a pi4pe 5piq pir5ac pir4t p4is. p4isc pis2s piss5a pis5til pis4tr p2itu 2p3k2 p2l2 1pla pla5no plant5er plas5tici pla5t4o 4ple. 4pled. 3pleg 3plen 2ples 4plism 4plist plu2m plum4be plumb5er p4ly 2p1m 2pn pnos4 1po 4po. po3ca 3pod 4pof 2p5oid pois5i po5lemic po4ly1 poly3s poman5 pom4e p4o2n pon4ac pon4ce pon4i4e 3ponif pon5ta 2pony po4pa po5ple 4porato por3ea 4pored pori4f por3p 3port por5tie 3p4os pos1s2 po1te poult5e pound5er pout5er p5oxi 5poy 4p1p2 ppar3 pparat5 p4pene ppet3 pph4 ppi4c p4pled p5pler p5plet ppress5o pprob5a 1pr2 prac1 pra5d prar4 4pre. preb3 pre1d pref5ere prel5ate 3prem pre5mat pren3 pres3a pre5scin p3rese 5pressi 5prici pri4es 4pri4m pring5er pring5i 4prio p5riol pri4os pris5in priv2 4priva 4pro. pro3bo p3roc3a pro4ch pro1l pron4a proph5e propyl5 pro3r2 pros4i pros5tr pro3th 4pry 2ps2 p3sac psal5t p3sh p1si p5sin. pso3m p1st psul3i 3psyc 2pt2 pt3ab p4tad p4tan p2tar pt5arc p1ted p5tena pt5enn 5ptery p5tet pt4ic p5tie p3til p2t3in pt4ine p3tise p5tisi p5tom p4tr p1tu pub1 pu5be puc4 puch4 pudi4c pu5er puff5er pu4lar pu5lar. pu5lis p4u4m pum4o p4un pun4a 3punc pun5gi pun3i pun2t pu3pi pur5b pur3c p4us push4ie pu3tat p5u5tis pu3tr 4p1w 2p4y py3e 3pyg 3pyl pyr3e py5t 4qf qu4 5quak 4quar qua5tio 2que. 3quera 4quere 4ques. 1quet 5quina 5quir 3quito 4quitu 4ra. ra3ba 5rabe 3ra3bin r2abo ra3bol rac4a r2acu rac5ula ra5culo r2ad ra4de rad4ine rag5ou ra3gr 3raill ra5ist 4ralia ra3ly r5amn ra3mu r4andi ran5dish ran4du ra5nee ran4gen ra3nia ra3noi ran2t ran5ted 5rantel rant5in rant5o rapol5 rap5to 4rarc rare2 rar3ef rar5ia. ras2 ras3c r2ase r4ask ra3so rass5a rass5in r4as5te ra5tap ra5tat rat5eu rath4e rat3if rat4in. ra5toc 5ra5tol 4r4atom ra4tos ra5tui rat5um rat3ur rav5ai rav5eli rav3it rawn4 ra3zie r1b r2ba r4bag rb3ali rb1an rbar3 r2be rbe5c r3bel rbel5o rb3ent r4bes rb2i rbic4 rbic5u r2bin r5bine rbit1 r2bos r4bum rbu5t4 r1c2 rcant5 rca4s r4cele rcen5er rcen5tena r2ces rcha3i rch3al rch5ard rch5ate r3cheo r4cher rch4ier r4chin rch3is r3chit rcil4 rci5nog rcis2 rciz4i r2cl r4cle r5clo rcolo4 rcrit5 rcriti4 rct4 rc5ti r5dam r4d1an4 rd4an. r2dar r5de4l r3dens r4des rd5ess rd5ian r4die r5dig rd2in rd3ing rdi3o rd1is2 rd5ler rd3li r4dol rd5ous r2e 4re. rea4 r4ea. react5iv re3af re3ag re5alt re5amb re3ani re5ant re5asc reas3o r5eau 3reav r5ebrate reb5uc re3cal rec4ce re3ce reced5en re3cha reci5si r4e1c2r rec4t3r re3cu 2r4ed re1de re3dis re4dol re1dr reed5i ree3m 3reer re2fe re3fin re5gali re5gra re3gre reg3ri re3gro reg3ul rei4 re3if re1in re3is reit3 reit4i re1la re1le 4reled re3lia rel3ic re5lig reli4q rel3li r5em. rem5ac reman4d rem5ato r3emp rem5ul rena4 ren5at r4endi rene2 ren4es r4eni renic5 ren4it ren4ter re5num re3oc 3reog re5ola re3oli 3reos re1pe re4per re5ph rep5id re3pin re3ple re4pre re1q rer4a rere4 re5rea re3r2u 2res. re3scr re3sel re3sem re3ser res5ist re5sit re3spe r3esq re5stal rest5er re5stu 3retar re3ten re4t4er3 re5term re1t2o re5ton re3tra re3tre re5tri re3tu re3un reur4 re1v rev3el revi4t r1f rf4l rfu4m r1g2 r4gag rgal4 r2ge r5gee r4gene r3geo r3ger rg5li rgu5f rh2 r5hel4 rhe5ol rhos4 3r2hy 4ri. ri3am ri5ap 2r2ib ri3bo rica5tu 2rice rich5om rick4en r4icl ri5cli ri3col ri5cor ri4cra 2ricu rid4al rid4e ri5el ri3er ri2es rift5er rif5tie 5rifuga ri5gam rig5ant ri5l4a r4ile rill5er. rill5ings 4rim. ri2ma rima4g rim5an4 rim3at r4imb rimen4 4rimm 4rims rin4e r4inet ring5ie rink5er r4ino rin4s rins5i rin4t5er ri3o rio4g 5rione ri4op ri5or ri5p2a ri5pie rip5lica ri5r ris4c ris4is r2isp ris4pa ris4pe ris5ter 4risti ri3ton r5it5r r2i4v riv4al ri5vall riv5eli riv3en riv3il 5ri5zo r1j r2k r5kas rk5ati r5kell rk5eni rk1er r3ket r3key r3kier r5kiest r5kin. r5kins rks4me r1la rlat3 r1le r3l4ic r3line r5lins r4lit r1lo r3mac rma5ce r5mad r2mal r4manc r4mano r4mari r4mary rm4as r4m3ati rma5toc r5ma5tol rme2a r2mic rm4ica r5m2id rm4ie r5mig rmil5 rmin4e rm3ing r4ming. r4mite. r3moc rmol4 r1mu rmu3li r2n2 rn3ab r3nac r5nad rn5ar rn3ate rn5atin rn5edl r3nel r3ness rn5est r3net r3ney r5nia rn5ib r3nic rn3in rn4ine r1nis rn3ist rni5v rn3iz rn5n r3noc r5nog rnt4 rnuc4 r5nut 4ro. ro4be rob3le ro5br 5rocc ro3cu r2od ro3do rody4n ro1fe ro3gn 4roi ro3ic roid3 ro3la r4oled rol5ite ro3ly romant4 ro5mel ro3mit romolec5 rom4p ro3mu ron4ac 4ronal ro5nate ron5ch ron4do rong5i r5onme ro1no ron4ton roo4 1room 5root r2op 4rop. ro3pel rop4ine r4opr r5opte ror5d 4rore r4osa rosi4a ro5sol 4ross ro5stat ros4ti ros5tit ro3tat ro1te ro4ter ro3tu 5roue roul3 round5er rou5sel 4rouss r4out r4ow row3er 4rox rpass5in rp3at rpe2 r3pent rp5er. r2ph rph5e r3phol rp3ing rp5is rpol3a r2p5ou rpre4 rpret5er r3pu r1q 4r1r4 rra4h rran5gi rrap4 rre2l r4reo4 rrhe3 r3ri rric4 rricu4 rri4fy. rrin5ge rri4os rrob3 rrog5 rro4t r5ru rry5 r3ryi r3rym 2r1s2 r4sag r2sal r5salis r5saliz r2san r4sar r2se r3sea r3sec rsel4 rsell5 rs3er. rs3ers r3set r3sha r3shi r4shie r5si2a rs3ib r5sie r4sil rs3ing r3sio r4sit rs3iv rs5li rstor4 rstrat4 r3su r4sus rswear4 rt2 rt3ab rta4g rt3age r3tar r4tare rt3c r1ted r4tedl r3tel4 r5tend rt3eni r5terer r5tet r5teu r4thene rth2i rth5ing. rth3ri r1t4ic r4ticl r5tiet r5tila r5till rtil5le rt5ily r2tin r3tina rt3ing r3titi rti5tu rt3iv r2tiz rt5let rt3li r1t4o rto5l rt5rid rt5si r1tu r4tus rtwis4 ru3a r4ube rub3r ru4ce r2ud rue4l r4uf ru3in ruis5i ru2l r4ume r4umi ru4more run4cl runcu4 runcul5 run2d4 run2e ru5net run4g run4t ru2p rup5lic ru3pu rur4i rus4p rust5at rust5ee rus5tic rus4t5u ru3tal ru3ti r1v2 r4vanc r2ve rvel4i r3ven rven4e rv5er. rv5ers. r3vest r3vet r3vey rvi4t r1w 2r2y ry5er 5rygm ry4go rym4b 3ryngo 4ryngol ryp5a ry2t ryth4i r2z 2sa. 2sab s3abl 5sack sac4q s3act sac4te sad5i sad5o 5sae sa4g 3sai sain4t 5sak sa2l sa5lac 3sale sa3lie s4al4t sa3lu sa4m sa5min sam5o samp4 san3a san4ded s4an4e san5gar san5if 2sant sant5ri s3ap sap3r sar5s 3sas. sas3s sassem4 s2a1t sa2te s5ativ s5atory sat1u 1sau sau5ci saur5 savi2 sa3vou 4s3b s4bei sbe4s sby3 sc2 s1ca sca5len sca2p scar4c scav3 s1ce s4ced 4scei 4s4ces sch2 scid5 s2co scof4 s4coi 3s4cope 5scopic 5scripti 2s1cu 4scura. 4scuras 2s1d2 2se. se2a s4eam seas4 sea3w sec4a sec5an se2co secon4 2sed se4da sed4it 3seed 3sei sei3g 5sela 4sele se3lec selen5 5self 2s4eme sem2i semi5d sem4o sen5g 3sens sen5sati sen5sori sent5ee 5sentm seo5log se2p sep3a sep4si 3sept sep3ti ser4an se5rene ser4to 4servo s2es 4ses. se5sh s5esta 1set 5seum 3sev sev3en sewo4 3sex sexo2 3sey 2s1f sfact5o sfi4 sfor5e sfran5 2s1g4 s2h 4shab sh4abi sh1er sh5et shil5li sh5iness sh3io 5ship s3hon 4shu4 shys4 si4all siast5 4s1ib s3icat 3sicc 2s5icl si4cu si5cul s4id 4sid. si4de side5l sid3en sid5eri 4sids 5sid5u4a si4ers sif4 sif5f si4g 1sili sim4ply 2sin s2ine sin5et 5sing5er sin3i 5sink si5nol si3nus 1sio4 4sio. si5o5s 3sip si4pr s1is2 4sish 4sism sist3a sist3o s1it si4te sit5om 4s1iv 5siva s1j s2k2 4sk. s5kar ske2 s3ket s5key s3kier s5kiest sk5ily sk5ines 4sks sky3l 2sl4 slang5i s1lat 3slau slav5eri s2le s5lea s3let s5ley s3lit slo3c slov5 s5luc 2s1m4 s3man smas4 s3men smi3g 3smith smo4d smu5tatio s1n2 s2na 2so. 2s3od sod3o sody4 3soe 4s3oid s2ol sol3a so5lan sol4er so3lic 3solve solv5er 1so2m soma5to 3some. so5mete so3mo s2ona son5at s4one son5or s2o2p 4sor3ie 5sorio sor4it s5oriz sor3o s3ory sos4 4sose so5th 3sou sov5e so3vi spast4 spens5a 4speo 3sperm s5pero spers5a sph2 s3pha 3spher spic5ul s2pid sp5id. s5pier spil4l s2pin sp3ing spi5ni spital5 s1pl sple2 s4ply s2po 5spom spon5gi 3spons 3spoon spru5d s4py s1r sre2 sreg5 srep5u sre4s 4ss s1sa s5sam2 s1sel s5seng s3sent ssent5er ss3er. s5seri ss3ers s5seu ssev3 s3sia s1sic s1sif ss1in ss4in. s4sine ss4is. s3s2it ss4ivi ss5li ss3m s4sn s1so ssol3u ssolu4b s4sore ssor5ial ss5po s1su ss3w st2 4st. stab2 sta3bi 4stak s4tale stant5iv s3tas. 5static st3c ste2 ste5ar ste5at s4teb s4tec 4s1ted s4tedl s4tedn 4stere ster4ia s4tern. s3tero st5est s1th s4tha s4thu s3ti3a 3stick s3ticu stil5ler s4tily st3ing 5s4tir s5tiz 4stl st3ler st3li s4toe 3ston stone3 ston4ie s5torat stor5ian s4tose s2tou s4tray stre4 strep3 3struc stru5d 2st3s s1tu s4tud stu4m stur4e 4stw s4ty 1styl 4su. su5an su4b1 subt2 suct4 sud4a su3et suf3f sug3 3sui sui5c su5ing 1s2ul s4u2m sum3i sun4a su5pe su3pin supra3 sur4as sur3c s4urg sur3pl su5su su5z 2s3v svers5a sves4 svest5i sw2 5swee swell5i 4swered 2swo s2y 4sy. sy4bi sy1c sy4ce sy4chr sy4d 1syl 3syn syn5e sy5pho syr5i 2ta. 2tab ta5blem 3tabli t2abo ta3bol ta4bou t4a3ce ta5chom ta3chy ta4cid t5ade tad4i 5t2adj ta5dor tad2r tae5n taf4 tage5o ta5gog 3tagr 3tah 1tai 3tail 2tair t4ais 1tak tal2c tal5ent ta5lep t4alia t4alin tal4l3a 5tallu t2alo4 ta3ly tam5ari 5ta3met tamorph5 tan5at tand5er t4ane 5tanel tan5ie t5aniz tant5an ta4pa 1tard tar5ia. tark5i tar3n 3tarr tas3i t3asm 5tass tas4t ta3sta tast5i4c t4ateu 3tatis t4ato. tat4ou tat4r tat3ut tau3to t5awa tawn4 t4ax 4t3b 2tc2 t1ca tcas4 tch5ett tch5u 4t1d4 4te. te5cha 5techn te3cr t4ed te5d2a 4tedd 4tedo 4teei te2g 5tegic t3ego teg1r teg3u tei4 te2l 4teled tel5iz 1tell 4te3lo 3tels tem3a 4teme te5mon ten4ag 4tenar 4tene t5enm 5tenna 4teno te5nog tent4a te2o teo5l 2tep te3pe tep5i tera4c t4erag t4erato 3ter3b 5terd 2tere4 ter3eb ter5ec 5terel te3reo 3teres4 1teri ter3ia ter5id ter5if t4erin ter5iorit ter3it ter5k 5ternit ter5no 3terr 2t2es 4tes. tesi4 t3esq t3ess. t5esses tes4t test3a 5teste test5er test5in test5or tes5tu teti4 tet1r tetr5o tew3ar 3tex 2t3f t3g 2th. tha4 th5al. thal3m 4the. 4thea th5eas 4thed 1thei 3theo theo3l t4her 5therap th5erc t5herd 4thered th3ern th3ery 4thi. t5hill 3think 5th4io th4is. th5lo 2thm2 th4mi th3oli 4t5hoo 4thopt 4thores 3thot 5thoug 1th2r 2ths 5thur 5thym 3thyr thys4 4ti. 1ti2a ti3ab 2t3ib 5ti5bu t1ic t3ic. tic5as t2ici tici5ar 3ti3cin t4icity ti3col tic1u 4ticule t3id. t4ida 3tidi ti3die t5ids 3ti2en 1tif2 ti3fe 4tiff 4tific. 3tigi tigi5o 4tigm 5tigu ti4ka ti4let 5tilin t4ill til4l5ag t4ilt 1tim tim1a 5timet4 t1in 5ti5nad 4tined tin3et ting5ing 3tinn 4tins t4int tin4te tin5ted tint5er tin3ue 1tio ti3oc tiol3a ti5omo 4tionem 1tip ti5plex ti3pli ti4q ti5qua t3iris 2t1is 3tisan tis4c tish5i 3tiss tis2t 5t4iste t4istr ti5t4an tith4e tit5il t3itis 3titl ti3tra 3tiu 2t1iv tiv5all t3ive tiv3is 2tl t1la tlant4 5tleb 5tledr 3tlef 3tlem 5tlen 5tletr 5tlew t1li tlin4 4t3m tmet2 tmo4t5 2t3n2 t4nere 2to. toas4 to1b 4tocc tode5c tod4i to5do 3toe 1tog 2t3oid 5tok 4toled tol4l tolu5 to5ly tom3ac toma4n tomat5ol tom4b to4mog tom5os ton4e ton5ea 3tonn ton3s top4e to5pia to4pos t1or to5rad 4tore tor5er tori4as tor5oi tor5p tor4q 3tos. to3s4p tos4t to5str to5talis to5taliz to3tem tot5u tou4f 5tour t3ous 4tov to3war t3p tr2 tra4co 4tradd 4traist tra5q trarch4 tra5ven tra5vers trav5est 3tray 4tre. 4tred tre4mo tren4 trend5i tre5pr tres4s 4trew t5ricl 3tricu t2rie tri5fli trifu5ga 2tril tri3li tri3me t2rit 4trix t4rod tro5f 5troop tro4pha tro3sp t2rot t5roto tro1v 3troy t4ruc tru3i 2t4ry trys4 4t1s t2sc ts4h ts2i t4sil tstay4 2t1t4 tta4 t3tab t5tan t5tas t3ted t4tere t5terer t5test t3ti tti3tu ttitud4 ttitu5di t3tler t3tli t5toi t5tor t3tos tt5s t4tupe t2ty 4tu. tu1a tu4al5li tuari4 tu4bin tu5bu tu5den tud5ie tu5en 4tuf tu1i tu4is 2tum. 3tumi 4tums 3tun tun4a tu4ne tun5it tup5let tup5lic tu5rac t4uran turb3a tur4d turf5i 5turit tur4n 5tur5o 1tut 4tut4iv t1w t3wa4 t2wi twi5li t3wit t3wo twon4 4ty. ty4a 5tych ty4let tyl5i ty5mi 1typ 3type 1tyr1 2tz2 t5zia t5zie 2ua2 ua3ci u2ag ua5h u1al ua5lu uan4o uant5is uant5it uar3a uar2d uar3i uari4n uar5ters uar4t5i ua5tern uba4 ub5bly u1b2i u4bicu ub3lin ub5lo ub3ra 4uc u1c2a uccen5 u4cend u4ch u5chr uc3l u4com uco5t uc2tr uc3ub uc5ul u5cum u5dac ud1al ud4e ud5ep u4der udev4 ud4g udi4cin ud3ied u5dinis udi3o u5ditio u2do u5doi ud5on u5dor ueb4 u4ed uen4o uen4ter uer3a ues4s uest5rat ues5tri ue4t uf2 3ufa u3fl u4fo uft4 uga4c ug5lif ug2ni u4go ug3ul ug3ura uhem3 2ui2 ui3al u2ic uicent5 uid5o uil4a uild5er ui3lib uil4t uinc5u uin4s uint4 uin4ta ui5pr uis3er uis4t uisti4 uit5er ui5val5 ui3vo u2iz 4ul. u1la u4lab 4ulac ul5ard u5lat ul4bo ul3ca ul4ch 5ulche 5ulchre 4ulea u5lee u1len4 4ulenci u5lent ulet4 ul4ev ul2fa ul2i ul4ia u3line ul3ing ul5ish u5liti u5lity 4ull ul4lat ul4l5ib ul4lis ul4lit ul3m u1lo u5lom ulph3i ulph3o ulp5ing ul4po 2uls ul3sif u1lu ul1v4 u1ma um3am umar4 u5mas um4bar. um2bi umen4t u1mi u4mic u2m5if umi4fy umi5lia umin4ar u4mined u4m3ing u4mora u4mos um2p um4pa ump3er ump5li umpt4 ump5te u1mu umu4lo un1 u4n3a4 un5ab unabu4 un4ae un4as. un2ce un4dal un3ded unde4t undeter5m undi4c un4die un3do un4dus u3n2er unho5li un2i u1nic un4ie un3in un4ine uni5p uni3so un3ist uni1v un3iz unk5eri un5ket un3kn 2unn un4nag un5o un5r un3s4 un5sh un2ti until4 unu4 un3us uo3de uodent4 u5oros u3os uo5tatio u1ou 2up u1pat u1pe u5pee uper3 u1ph u5pid up3ing u4po u5pol u2pr upre4 u5quet u4r ur1a 4ura. ura4ci 4urae ura2g 4uranti uras5 urb5ing ur2c urc3a ur5den. ur5deni ur5die ur4du ur3ea ur5ee ur1er ur3ers ur1e2t ur3ett ur2f ur3fa ur1i u5ri5cu ur4ie. ur5ifie uril4 ur4ili ur5ion uri4os. url5er ur5lie url5ing ur1m4 urn3al urn3er urn5s ur1o uro4d ur5o4m ur5ot uroti4 urpen5t urph4 ur2s urs5al urs5er ur3sh urs3or ur5ta ur1te ur5tes urth2 ur3the urti4 ur1u ur4va u3sad us3ag us3al us4ap us3at 2usc us4can ush5a us5ian usil5 u4s1in usk5er us1p us4pa uss4e 4ust us3tac us5tan ust4ic us5tici ust5ig ust3il us1to4 us1tr us4tre usur4e us5uri u3tane utch4e ut5eni u5teo u4tere ut2i u3tie ut3ing u5tini u3tio ut5ism ut3ist 5u5tiz ut3le utli4 ut2o u4to5s u4t1ra uts2 ut5sm ut4tone u3tu u4tul uu4 uv2 u4va uve2 uven3 uv5eri u5vin ux2o uy4a uy5er 4va. 2v3ab 5vac va1ca va5ceo vacu1 v4ad 3vag3a va4ge 4vaged vager4 vag5r v1al. 1vale vali2 va5lie val4ise 5valu 5val4v vam4i va5mo 5vann vanta4 4vantl var4is 4vase vas5el5 v5a4so vast3a v4at. 5vatee vat4ina 4vatu 2ve. vect4 ve3g 3vei 2vel vel3at 4vele v3eler ve5line v1ell v4ella vel5ler vel3li vel5opi ven4al ven4do ve1ne ve5nia vent5o ven4tr 4venu v5en5ue 5ve3o 5verb verde5v 4v4ere4 ver5ea ver3ei v5erie ver3m4 ver4ne 5verse 4ves. 4vi. 5vialit vi4atr vi1b4 vic2 vi4ca vi5cari vice3r 5vict2 5vicu 5vider vign3 vi4l vil3i 3vili4a v5ilise v5ilize vil5lin vim4 5vime 2v1in vin4ac 3vinci vin2e 5vinit v5iniz vint4 vin5ta 3vi1o viol3 vi5om 5vi3p vire4 vi5rid vir3u 5visecti 5visio v3ism 2v5ist vi2t vit2a vi3tal vi5tel v5itie vit1r vi3tu v3ity viv5al viv5or vi5zo 1vo 2vo. vo2l vo5litio vol4ubi volv4 4von vo5rac 3vorc 4vore 3voro vo3tar 2vow vr4 v5ra4 v5ri v5ro vrot4 4vs v3ure 2vv2 v5ver v5vi 4vy 4wab wag3o wais4 w3al. wall5er w3als wan5gli wank5er war5ded ward5er ward5r war4f war4te war5thi wass4 was4t wa1te wav4ine w1b4 w4bon w5c w5die w3dr we4b w4ed 3weed 5wei weight5i weir4 wel3i weliz4 wel4izi wel4li went4 wes4 west3 w5est. w5f wh2 w5hid wi2 wid4e wi5er will5in wim2p win2e wing5er win4tr 3w4ise with5eri w3la wl1er wl1i wl4ie w1m 1wo wol4 wol5ver 3wom won2t word5i wotch4 woun4 wp5in wra4 ws5ing w5ster wt4 w5te w3to wy2 wz4 x1a x4ach x4ade x2ag x3agg xa5met x3ami xan5d xano4 x2as xas5p x3c4 xcav3 xcor5 xe4 x1ec xec3r xe5cutio xecut5o xe2d x5edl x5edn x5eg x1em x3en xen4op x3er xer4g xer3o x1h xhort4a x1i x3ia. x4ias xi4c x5ige xim3a x4ime ximet4 x3io xi4p x4it. x4its x1o x4ode x5om xo4mat xo4n x4os xotrop4 x3p xpel4 xpo5n2 xpoun4 x1s2 x1t2 x4ted xtens5o xter3i xter4m3 xtern3 x4th xti4 xtra5d xtra3v xtre4 xu4o x1ur xur4b x5us x5w xx4 xys4 xy3t y1a2 y5ac 1y2ar 3yard yas4i 4y1b yb2i yca5m y5chede ych5is y3cho y4chose yc1l yclam4 y4coli y4coll ycom4 y2cos y1d4 yda4 yder4 ydro5s y4drou y3ee yel5o y3en y1er y3est. yes5te y5ett y5f y1g ygi2 ygi5a y3gl ygo4i y1h y1i y3in yle2 ylin5de yllab5i yl3os yl5ou y1me4 y3men y5met y5mia ym5in ymot4 ym4pha yn1 ynago4 ynand5 yn5ap4 yn5ast yn4ci ynd4 yn2e yn3er yng4 yn4gol yni4c yn4y y1o2 yo3d yo4gis youn4 young5 2yp yp5al yper3 y5pere y4peri y4pero y4pet y2ph yph4e yph3i y4p1i yp1n ypo1 y4pox y2pr yp5ri yp4si yp5syf ypt3a y5pu y3rag yr3at yr3ic y5rig yr3is yr3i4t yr5olo yr4r yr4s yr5u 4y2s ys5ag ys5at y3s2c y3sh ys1ic ys3in ysi4o yso5 ys4so ys1t ys4to y3u yv4 y3w yz5er yzy4 z1a1 2za. za4bi za2i z4as za4te zd4 zeb4 ze4d zen4a z5eng zer5a z3et4 z1i zib5 5zic4 z2ie zi5m zin4c3i z3ing zing5i z4is 3zlem z3ler z3li 4zo. 5zoa zo3an 3zoo2 zo3ol zo3on zo5op zo5oti zo5p zot2 z5s 5zum 4zy. zz2 z3zar z5zas z3zie zzo3 z5zot}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-it.lua0000644000175000017500000000742312161703335024664 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="it", ["source"]="hyph-it", ["texcomment"]="% Italian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % hyph-it.tex\ %\ % Italian hyphenation patterns\ %\ % This file is part of the hyph-utf8 package.\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ %% Copyright 2008-2011 Claudio Beccari\ %\ % This work may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either\ % version 1.3 of this license or (at your option) any later\ % version. The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ % and version 1.3 or later is part of all distributions\ % of LaTeX version 2003/12/01 or later.\ %\ % This work has the LPPL maintenance status \"maintained\".\ %\ % This Current Maintainer of this work is Claudio Beccari\ % e-mail: claudio dot beccari at gmail dot com\ %\ % This work consists of the single file hyph-it.tex.\ %\ % \\versionnumber{4.8i} \\versiondate{2011/08/16}\ %\ % These hyphenation patterns for the Italian language are supposed to comply\ % with the Recommendation UNI 6461 on hyphenation issued by the Italian\ % Standards Institution (Ente Nazionale di Unificazione UNI). No guarantee\ % or declaration of fitness to any particular purpose is given and any\ % liability is disclaimed.\ %\ % ChangeLog:\ % - 2011-08-16 - Change the licence from GNU LGPL into LPPL v1.3.\ % - 2010-05-24 - Fix for Italian patterns for proper hyphenation of -ich and Ljubljana.\ % - 2008-06-09 - Import of original ithyph.tex into hyph-utf8 package.\ % - 2008-03-08 - (last change in ithyph.tex)\ %\ % ", }, ["patterns"]={ ["characters"]="'abcdefghijklmnopqrstuvwxyz’", ["data"]=".a3p2n .anti1 .anti3m2n .bio1 .ca4p3s .circu2m1 .contro1 .di2s3cine .e2x1eu .fran2k3 .free3 .li3p2sa .narco1 .opto1 .orto3p2 .para1 .poli3p2 .pre1 .p2s .re1i2scr .sha2re3 .tran2s3c .tran2s3d .tran2s3l .tran2s3n .tran2s3p .tran2s3r .tran2s3t .su2b3lu .su2b3r .wa2g3n .wel2t1 2'2 2’2 a1ia a1ie a1io a1iu a1uo a1ya 2at. e1iu e2w o1ia o1ie o1io o1iu 1b 2bb 2bc 2bd 2bf 2bm 2bn 2bp 2bs 2bt 2bv b2l b2r 2b. 2b' 2b’ 1c 2cb 2cc 2cd 2cf 2ck 2cm 2cn 2cq 2cs 2ct 2cz 2chh c2h 2ch. 2ch'. 2ch’. 2ch''. 2ch’’. 2chb ch2r 2chn c2l c2r 2c. 2c' 2c’ .c2 1d 2db 2dd 2dg 2dl 2dm 2dn 2dp d2r 2ds 2dt 2dv 2dw 2d. 2d' 2d’ .d2 1f 2fb 2fg 2ff 2fn f2l f2r 2fs 2ft 2f. 2f' 2f’ 1g 2gb 2gd 2gf 2gg g2h g2l 2gm g2n 2gp g2r 2gs 2gt 2gv 2gw 2gz 2gh2t 2g. 2g' 2g’ 1h 2hb 2hd 2hh hi3p2n h2l 2hm 2hn 2hr 2hv 2h. 2h' 2h’ 1j 2j. 2j' 2j’ 1k 2kg 2kf k2h 2kk k2l 2km k2r 2ks 2kt 2k. 2k' 2k’ 1l 2lb 2lc 2ld 2l3f2 2lg l2h l2j 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lz 2l. 2l'. 2l’. 2l'' 2l’’ 1m 2mb 2mc 2mf 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2m. 2m' 2m’ 1n 2nb 2nc 2nd 2nf 2ng 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3fer 2nt 2nv 2nz n2g3n 2nheit 2n. 2n' 2n’ 1p 2pd p2h p2l 2pn 3p2ne 2pp p2r 2ps 3p2sic 2pt 2pz 2p. 2p' 2p’ 1q 2qq 2q. 2q' 2q’ 1r 2rb 2rc 2rd 2rf r2h 2rg 2rk 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt r2t2s3 2rv 2rx 2rw 2rz 2r. 2r' 2r’ 1s2 2shm 2sh. 2sh' 2sh’ 2s3s s4s3m 2s3p2n 2stb 2stc 2std 2stf 2stg 2stm 2stn 2stp 2sts 2stt 2stv 2sz 4s. 4s'. 4s’. 4s'' 4s’’ 1t 2tb 2tc 2td 2tf 2tg t2h t2l 2tm 2tn 2tp t2r t2s 3t2sch 2tt t2t3s 2tv 2tw t2z 2tzk tz2s 2t. 2t'. 2t’. 2t'' 2t’’ 1v 2vc v2l v2r 2vv 2v. 2v'. 2v’. 2v'' 2v’’ 1w w2h wa2r 2w1y 2w. 2w' 2w’ 1x 2xb 2xc 2xf 2xh 2xm 2xp 2xt 2xw 2x. 2x' 2x’ y1ou y1i 1z 2zb 2zd 2zl 2zn 2zp 2zt 2zs 2zv 2zz 2z. 2z'. 2z’. 2z'' 2z’’ .z2", ["length"]=1806, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=377, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sk.hyp0000644000175000017500000000032011761001300024655 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sk.rme % used: a b d e i k m n o p r s t y ó ť \hyphenation{ dosť me-tó-da me-tó-dy ne-do-stat-ka-mi sep-tem-bra}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sv.rme0000644000175000017500000001250611761001300024664 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03) (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: sehyph.tex (2003-09-08) % Author: Jan Michael Rynning % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % Swedish hyphenation patterns. % % Copyright 1994 by Jan Michael Rynning. All rights reserved. % This program may be distributed and/or modified under the conditions of % the LaTeX Project Public License, either version 1.2 of this license or % (at your option) any later version. The latest version of this license % is in http://www.latex-project.org/lppl.txt and version 1.2 or later is % part of all distributions of LaTeX version 1999/12/01 or later. % % Last update: 1994-03-03 (March 3, 1994). % Revision history: % 1991-01-08: First version available for anonymous FTP. % 1991-08-08: Changed \aa to \aa0 at end of line, to stop TeX from % concatenating the patterns. % 1991-09-03: Cleaned up lots of inconsistencies in the dictionary. % As a consequence, the patterns shrunk a lot. Also % added some 4000 one-syllable words, some of which were % hyphenated by the old patterns, and some 1500 compound % words, about half of which were incorrectly hyphenated % by the old patterns. % 1991-11-01: Added another some 6200 compound words, all of which were % incorrectly hyphenated by the old patterns. % 1991-11-13: Added another some 6500 compound words, all of which were % incorrectly hyphenated by the old patterns. % 1992-01-30: Changed macros to ^^, for use with LaTeX and dc fonts. % 1994-03-03: The hyphenated dictionary now contains about 118,000 words. % The hyphenation now works much better for compound words. % Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1 10000 4. % % This file contains Swedish hyphenation patterns for TeX. It assumes % that you have fonts with the Swedish letters in the positions where % they occur in ISO Latin 1 (ISO 8859/1): % Letter: \AA \"A \"O \'E \aa \"a \"o \'e % Position: "C5 "C4 "D6 "C9 "E5 "E4 "F6 "E9 % % Load this file into initex after plain.tex (or lplain.tex, splain.tex, % or whatever). % % The patterns were generated in such a way that they will hyphenate % correctly if \lefthyphenmin>=1 and \righthyphenmin>=2. % % These hyphenation patterns work quite well for simple words, but not % quite as well for compound words. I'm working on improving the quality, % by adding more words. If you know any Swedish words which are not % correctly hypheneted using these patterns, or if you have questions or % comments, please contact me: % % Jan Michael Rynning % -------------------------------------------------------------------------- % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sr.hyp0000644000175000017500000000370511761001300024676 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sr.rme % used: а б в г д е з и к л м н о п р с т у ц ш ј њ ћ \hyphenation{ на-дно на-тка на-тка-ти на-тка-ше о-дно о-тка о-тка-ти о-тка-ше по-дно по-дне по-тку по-тки по-тке по-тка у-дно и-где и-гдје сву-где све-где сву-гдје све-гдје по-не-где по-не-гдје и-зби и-збе и-зба и-зби-ци и-зби-це и-зби-ца и-звит и-зим изо-ба-ру изо-ба-ри изо-ба-ре изо-ба-ра и-скок и-ско-ку и-ско-ка и-скон и-ско-ну и-ско-ни и-ско-на и-скру и-скре и-скри и-скра и-скрав и-спод и-спо-да и-стру и-стри и-стро и-стре и-стра на-ју на-ји на-јо на-је на-ја на-јам на-јест о-браз о-брет о-дви-ка о-дран о-дра-ти пре-двој ра-зму ра-зми ра-змо ра-зме ра-зма ра-зну ра-зни ра-зно ра-зне ра-зна ра-склоп ра-спе-лу ра-спе-ло ра-спе-ла ра-спе-ћа ра-спе-ћу ра-спе-ће ра-сту ра-сти ра-сте ра-ста ра-стом ра-стер ра-шћу ра-шћи ра-шћо ра-шће ра-шћа у-зно у-зна у-зни у-зник у-зрок у-ску у-ски у-ско у-ске у-ска ус-кос у-спио у-спео у-спор у-шћу у-шће у-шћа ин-те-рес тран-су тран-са тран-сом те-ле-ви-зор те-ле-ви-зо-ру те-ле-ви-зо-ром те-ле-ви-зо-ра те-ле-ви-зо-ри при-ти-сак при-ти-с-ком при-ти-с-ку при-ти-с-ка по-ја-ви-ће на-пу-шта про-гра-ми-ра-ње сни-ма-ња сни-ма-ње}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-tk.hyp0000644000175000017500000000017111761001300024662 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-tk.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-gb.rme0000644000175000017500000000475111761001300024627 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Hyphenation patterns for British English (more info about the licence to be added later) % This file has been renamed from ukhyphen.tex to hyph-en-gb.tex in June 2008 % for consistency with other files with hyphenation patterns in hyph-utf8 package. % No other changes made. See http://www.tug.org/tex-hyphen for more details. % File: ukhyphen.tex % TeX hyphenation patterns for UK English % Unlimited copying and redistribution of this file % is permitted so long as the file is not modified % in any way. % % Modifications may be made for private purposes (though % this is discouraged, as it could result in documents % hyphenating differently on different systems) but if % such modifications are re-distributed, the modified % file must not be capable of being confused with the % original. In particular, this means % %(a) the filename (the portion before the extension, if any) % must not match any of : % % UKHYPH UK-HYPH % UKHYPHEN UK-HYPHEN % UKHYPHENS UK-HYPHENS % UKHYPHENATION UK-HYPHENATION % UKHYPHENISATION UK-HYPHENISATION % UKHYPHENIZATION UK-HYPHENIZATION % % regardless of case, and % %(b) the file must contain conditions identical to these, % except that the modifier/distributor may, if he or she % wishes, augment the list of proscribed filenames. % $Log: ukhyph.tex $ % Revision 2.0 1996/09/10 15:04:04 ucgadkw % o added list of hyphenation exceptions at the end of this file. % % % Version 1.0a. Released 18th October 2005/PT. % % Created by Dominik Wujastyk and Graham Toal using Frank Liang's PATGEN 1.0. % Like the US patterns, these UK patterns correctly hyphenate about 90% of % the words in the input list, and produce no hyphens not in the list % (see TeXbook pp. 451--2). % % These patterns are based on a file of 114925 British-hyphenated words % generously made available to Dominik Wujastyk by Oxford University Press. % This list of words is copyright to the OUP and may not be redistributed. % The hyphenation break points in the words in the abovementioned file is % also copyright to the OUP. % % We are very grateful to Oxford University Press for allowing us to use % their list of hyphenated words to produce the following TeX hyphenation % patterns. This file of hyphenation patterns may be freely distributed. % % These patterns require a value of about 14000 for TeX's pattern memory size. % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-us.lua0000644000175000017500000010222312161703335024671 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abcdefghijlmnoprstuyz", ["data"]="as-so-ciate as-so-ciates dec-li-na-tion oblig-a-tory phil-an-thropic present presents project projects reci-procity re-cog-ni-zance ref-or-ma-tion ret-ri-bu-tion ta-ble", ["length"]=168, ["n"]=14, }, ["metadata"]={ ["mnemonic"]="us", ["source"]="hyph-en-us", ["texcomment"]="% Hyphenation patterns for American English\ % \ % (more info about the licence to be added later)\ % \ % This file has been renamed from ushyphmax.tex to hyph-en-us.tex in June 2008\ % for consistency with other files with hyphenation patterns in hyph-utf8 package.\ % No other changes made. See http://www.tug.org/tex-hyphen for more details.\ % \ % ushyphmax.tex -- patterns for more hyphenation pattern memory (12000+).\ % Also known as ushyphen.max.\ %\ % version of 2005-05-30.\ % Patterns of March 1, 1990.\ %\ % Copyright (C) 1990, 2004, 2005 Gerard D.C. Kuiken.\ % Copying and distribution of this file, with or without modification,\ % are permitted in any medium without royalty provided the copyright\ % notice and this notice are preserved.\ %\ % Needs extended pattern memory.\ % Hyphenation trie becomes 7283 with 377 ops.\ %\ % These patterns are based on the Hyphenation Exception Log\ % published in TUGboat, Volume 10 (1989), No. 3, pp. 337-341,\ % and a large number of incorrectly hyphenated words not yet published.\ % If added to Liang's before the closing bracket } of \\patterns,\ % the patterns run errorfree as far as known at this moment.\ %\ % These patterns find all admissible hyphens of the words in\ % the Exception Log. ushyph2.tex is a smaller set.\ %\ % Please send bugs or suggestions to tex-live (at) tug.org.\ %\ % 2005-05-30 (karl): in the past, ushyphmax.tex was a file containing\ % only the additional patterns, without the \\patterns command, etc.\ % This turned out not to be very useful, since in practice the TeX\ % distributions need one self-contained file for a language. Therefore,\ % ushyphmax.tex now contains both the additional patterns from\ % Dr. Kuiken, and the original patterns and hyphenations from Knuth's\ % hyphen.tex.\ %\ % The Plain TeX hyphenation tables.\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyz", ["data"]=".ach4 .ad4der .af1t .al3t .am5at .an5c .ang4 .ani5m .ant4 .an3te .anti5s .ar5s .ar4tie .ar4ty .as3c .as1p .as1s .aster5 .atom5 .au1d .av4i .awn4 .ba4g .ba5na .bas4e .ber4 .be5ra .be3sm .be5sto .bri2 .but4ti .cam4pe .can5c .capa5b .car5ol .ca4t .ce4la .ch4 .chill5i .ci2 .cit5r .co3e .co4r .cor5ner .de4moi .de3o .de3ra .de3ri .des4c .dictio5 .do4t .du4c .dumb5 .earth5 .eas3i .eb4 .eer4 .eg2 .el5d .el3em .enam3 .en3g .en3s .eq5ui5t .er4ri .es3 .eu3 .eye5 .fes3 .for5mer .ga2 .ge2 .gen3t4 .ge5og .gi5a .gi4b .go4r .hand5i .han5k .he2 .hero5i .hes3 .het3 .hi3b .hi3er .hon5ey .hon3o .hov5 .id4l .idol3 .im3m .im5pin .in1 .in3ci .ine2 .in2k .in3s .ir5r .is4i .ju3r .la4cy .la4m .lat5er .lath5 .le2 .leg5e .len4 .lep5 .lev1 .li4g .lig5a .li2n .li3o .li4t .mag5a5 .mal5o .man5a .mar5ti .me2 .mer3c .me5ter .mis1 .mist5i .mon3e .mo3ro .mu5ta .muta5b .ni4c .od2 .odd5 .of5te .or5ato .or3c .or1d .or3t .os3 .os4tl .oth3 .out3 .ped5al .pe5te .pe5tit .pi4e .pio5n .pi2t .pre3m .ra4c .ran4t .ratio5na .ree2 .re5mit .res2 .re5stat .ri4g .rit5u .ro4q .ros5t .row5d .ru4d .sci3e .self5 .sell5 .se2n .se5rie .sh2 .si2 .sing4 .st4 .sta5bl .sy2 .ta4 .te4 .ten5an .th2 .ti2 .til4 .tim5o5 .ting4 .tin5k .ton4a .to4p .top5i .tou5s .trib5ut .un1a .un3ce .under5 .un1e .un5k .un5o .un3u .up3 .ure3 .us5a .ven4de .ve5ra .wil5i .ye4 4ab. a5bal a5ban abe2 ab5erd abi5a ab5it5ab ab5lat ab5o5liz 4abr ab5rog ab3ul a4car ac5ard ac5aro a5ceou ac1er a5chet 4a2ci a3cie ac1in a3cio ac5rob act5if ac3ul ac4um a2d ad4din ad5er. 2adi a3dia ad3ica adi4er a3dio a3dit a5diu ad4le ad3ow ad5ran ad4su 4adu a3duc ad5um ae4r aeri4e a2f aff4 a4gab aga4n ag5ell age4o 4ageu ag1i 4ag4l ag1n a2go 3agog ag3oni a5guer ag5ul a4gy a3ha a3he ah4l a3ho ai2 a5ia a3ic. ai5ly a4i4n ain5in ain5o ait5en a1j ak1en al5ab al3ad a4lar 4aldi 2ale al3end a4lenti a5le5o al1i al4ia. ali4e al5lev 4allic 4alm a5log. a4ly. 4alys 5a5lyst 5alyt 3alyz 4ama am5ab am3ag ama5ra am5asc a4matis a4m5ato am5era am3ic am5if am5ily am1in ami4no a2mo a5mon amor5i amp5en a2n an3age 3analy a3nar an3arc anar4i a3nati 4and ande4s an3dis an1dl an4dow a5nee a3nen an5est. a3neu 2ang ang5ie an1gl a4n1ic a3nies an3i3f an4ime a5nimi a5nine an3io a3nip an3ish an3it a3niu an4kli 5anniz ano4 an5ot anoth5 an2sa an4sco an4sn an2sp ans3po an4st an4sur antal4 an4tie 4anto an2tr an4tw an3ua an3ul a5nur 4ao apar4 ap5at ap5ero a3pher 4aphi a4pilla ap5illar ap3in ap3ita a3pitu a2pl apoc5 ap5ola apor5i apos3t aps5es a3pu aque5 2a2r ar3act a5rade ar5adis ar3al a5ramete aran4g ara3p ar4at a5ratio ar5ativ a5rau ar5av4 araw4 arbal4 ar4chan ar5dine ar4dr ar5eas a3ree ar3ent a5ress ar4fi ar4fl ar1i ar5ial ar3ian a3riet ar4im ar5inat ar3io ar2iz ar2mi ar5o5d a5roni a3roo ar2p ar3q arre4 ar4sa ar2sh 4as. as4ab as3ant ashi4 a5sia. a3sib a3sic 5a5si4t ask3i as4l a4soc as5ph as4sh as3ten as1tr asur5a a2ta at3abl at5ac at3alo at5ap ate5c at5ech at3ego at3en. at3era ater5n a5terna at3est at5ev 4ath ath5em a5then at4ho ath5om 4ati. a5tia at5i5b at1ic at3if ation5ar at3itu a4tog a2tom at5omiz a4top a4tos a1tr at5rop at4sk at4tag at5te at4th a2tu at5ua at5ue at3ul at3ura a2ty au4b augh3 au3gu au4l2 aun5d au3r au5sib aut5en au1th a2va av3ag a5van ave4no av3era av5ern av5ery av1i avi4er av3ig av5oc a1vor 3away aw3i aw4ly aws4 ax4ic ax4id ay5al aye4 ays4 azi4er azz5i 5ba. bad5ger ba4ge bal1a ban5dag ban4e ban3i barbi5 bari4a bas4si 1bat ba4z 2b1b b2be b3ber bbi4na 4b1d 4be. beak4 beat3 4be2d be3da be3de be3di be3gi be5gu 1bel be1li be3lo 4be5m be5nig be5nu 4bes4 be3sp be5str 3bet bet5iz be5tr be3tw be3w be5yo 2bf 4b3h bi2b bi4d 3bie bi5en bi4er 2b3if 1bil bi3liz bina5r4 bin4d bi5net bi3ogr bi5ou bi2t 3bi3tio bi3tr 3bit5ua b5itz b1j bk4 b2l2 blath5 b4le. blen4 5blesp b3lis b4lo blun4t 4b1m 4b3n bne5g 3bod bod3i bo4e bol3ic bom4bi bon4a bon5at 3boo 5bor. 4b1ora bor5d 5bore 5bori 5bos4 b5ota both5 bo4to bound3 4bp 4brit broth3 2b5s2 bsor4 2bt bt4l b4to b3tr buf4fer bu4ga bu3li bumi4 bu4n bunt4i bu3re bus5ie buss4e 5bust 4buta 3butio b5uto b1v 4b5w 5by. bys4 1ca cab3in ca1bl cach4 ca5den 4cag4 2c5ah ca3lat cal4la call5in 4calo can5d can4e can4ic can5is can3iz can4ty cany4 ca5per car5om cast5er cas5tig 4casy ca4th 4cativ cav5al c3c ccha5 cci4a ccompa5 ccon4 ccou3t 2ce. 4ced. 4ceden 3cei 5cel. 3cell 1cen 3cenc 2cen4e 4ceni 3cent 3cep ce5ram 4cesa 3cessi ces5si5b ces5t cet4 c5e4ta cew4 2ch 4ch. 4ch3ab 5chanic ch5a5nis che2 cheap3 4ched che5lo 3chemi ch5ene ch3er. ch3ers 4ch1in 5chine. ch5iness 5chini 5chio 3chit chi2z 3cho2 ch4ti 1ci 3cia ci2a5b cia5r ci5c 4cier 5cific. 4cii ci4la 3cili 2cim 2cin c4ina 3cinat cin3em c1ing c5ing. 5cino cion4 4cipe ci3ph 4cipic 4cista 4cisti 2c1it cit3iz 5ciz ck1 ck3i 1c4l4 4clar c5laratio 5clare cle4m 4clic clim4 cly4 c5n 1co co5ag coe2 2cog co4gr coi4 co3inc col5i 5colo col3or com5er con4a c4one con3g con5t co3pa cop3ic co4pl 4corb coro3n cos4e cov1 cove4 cow5a coz5e co5zi c1q cras5t 5crat. 5cratic cre3at 5cred 4c3reta cre4v cri2 cri5f c4rin cris4 5criti cro4pl crop5o cros4e cru4d 4c3s2 2c1t cta4b ct5ang c5tant c2te c3ter c4ticu ctim3i ctu4r c4tw cud5 c4uf c4ui cu5ity 5culi cul4tis 3cultu cu2ma c3ume cu4mi 3cun cu3pi cu5py cur5a4b cu5ria 1cus cuss4i 3c4ut cu4tie 4c5utiv 4cutr 1cy cze4 1d2a 5da. 2d3a4b dach4 4daf 2dag da2m2 dan3g dard5 dark5 4dary 3dat 4dativ 4dato 5dav4 dav5e 5day d1b d5c d1d4 2de. deaf5 deb5it de4bon decan4 de4cil de5com 2d1ed 4dee. de5if deli4e del5i5q de5lo d4em 5dem. 3demic dem5ic. de5mil de4mons demor5 1den de4nar de3no denti5f de3nu de1p de3pa depi4 de2pu d3eq d4erh 5derm dern5iz der5s des2 d2es. de1sc de2s5o des3ti de3str de4su de1t de2to de1v dev3il 4dey 4d1f d4ga d3ge4t dg1i d2gy d1h2 5di. 1d4i3a dia5b di4cam d4ice 3dict 3did 5di3en d1if di3ge di4lato d1in 1dina 3dine. 5dini di5niz 1dio dio5g di4pl dir2 di1re dirt5i dis1 5disi d4is3t d2iti 1di1v d1j d5k2 4d5la 3dle. 3dled 3dles. 4dless 2d3lo 4d5lu 2dly d1m 4d1n4 1do 3do. do5de 5doe 2d5of d4og do4la doli4 do5lor dom5iz do3nat doni4 doo3d dop4p d4or 3dos 4d5out do4v 3dox d1p 1dr drag5on 4drai dre4 drea5r 5dren dri4b dril4 dro4p 4drow 5drupli 4dry 2d1s2 ds4p d4sw d4sy d2th 1du d1u1a du2c d1uca duc5er 4duct. 4ducts du5el du4g d3ule dum4be du4n 4dup du4pe d1v d1w d2y 5dyn dy4se dys5p e1a4b e3act ead1 ead5ie ea4ge ea5ger ea4l eal5er eal3ou eam3er e5and ear3a ear4c ear5es ear4ic ear4il ear5k ear2t eart3e ea5sp e3ass east3 ea2t eat5en eath3i e5atif e4a3tu ea2v eav3en eav5i eav5o 2e1b e4bel. e4bels e4ben e4bit e3br e4cad ecan5c ecca5 e1ce ec5essa ec2i e4cib ec5ificat ec5ifie ec5ify ec3im eci4t e5cite e4clam e4clus e2col e4comm e4compe e4conc e2cor ec3ora eco5ro e1cr e4crem ec4tan ec4te e1cu e4cul ec3ula 2e2da 4ed3d e4d1er ede4s 4edi e3dia ed3ib ed3ica ed3im ed1it edi5z 4edo e4dol edon2 e4dri e4dul ed5ulo ee2c eed3i ee2f eel3i ee4ly ee2m ee4na ee4p1 ee2s4 eest4 ee4ty e5ex e1f e4f3ere 1eff e4fic 5efici efil4 e3fine ef5i5nite 3efit efor5es e4fuse. 4egal eger4 eg5ib eg4ic eg5ing e5git5 eg5n e4go. e4gos eg1ul e5gur 5egy e1h4 eher4 ei2 e5ic ei5d eig2 ei5gl e3imb e3inf e1ing e5inst eir4d eit3e ei3th e5ity e1j e4jud ej5udi eki4n ek4la e1la e4la. e4lac elan4d el5ativ e4law elaxa4 e3lea el5ebra 5elec e4led el3ega e5len e4l1er e1les el2f el2i e3libe e4l5ic. el3ica e3lier el5igib e5lim e4l3ing e3lio e2lis el5ish e3liv3 4ella el4lab ello4 e5loc el5og el3op. el2sh el4ta e5lud el5ug e4mac e4mag e5man em5ana em5b e1me e2mel e4met em3ica emi4e em5igra em1in2 em5ine em3i3ni e4mis em5ish e5miss em3iz 5emniz emo4g emoni5o em3pi e4mul em5ula emu3n e3my en5amo e4nant ench4er en3dic e5nea e5nee en3em en5ero en5esi en5est en3etr e3new en5ics e5nie e5nil e3nio en3ish en3it e5niu 5eniz 4enn 4eno eno4g e4nos en3ov en4sw ent5age 4enthes en3ua en5uf e3ny. 4en3z e5of eo2g e4oi4 e3ol eop3ar e1or eo3re eo5rol eos4 e4ot eo4to e5out e5ow e2pa e3pai ep5anc e5pel e3pent ep5etitio ephe4 e4pli e1po e4prec ep5reca e4pred ep3reh e3pro e4prob ep4sh ep5ti5b e4put ep5uta e1q equi3l e4q3ui3s er1a era4b 4erand er3ar 4erati. 2erb er4bl er3ch er4che 2ere. e3real ere5co ere3in er5el. er3emo er5ena er5ence 4erene er3ent ere4q er5ess er3est eret4 er1h er1i e1ria4 5erick e3rien eri4er er3ine e1rio 4erit er4iu eri4v e4riva er3m4 er4nis 4ernit 5erniz er3no 2ero er5ob e5roc ero4r er1ou er1s er3set ert3er 4ertl er3tw 4eru eru4t 5erwau e1s4a e4sage. e4sages es2c e2sca es5can e3scr es5cu e1s2e e2sec es5ecr es5enc e4sert. e4serts e4serva 4esh e3sha esh5en e1si e2sic e2sid es5iden es5igna e2s5im es4i4n esis4te esi4u e5skin es4mi e2sol es3olu e2son es5ona e1sp es3per es5pira es4pre 2ess es4si4b estan4 es3tig es5tim 4es2to e3ston 2estr e5stro estruc5 e2sur es5urr es4w eta4b eten4d e3teo ethod3 et1ic e5tide etin4 eti4no e5tir e5titio et5itiv 4etn et5ona e3tra e3tre et3ric et5rif et3rog et5ros et3ua et5ym et5z 4eu e5un e3up eu3ro eus4 eute4 euti5l eu5tr eva2p5 e2vas ev5ast e5vea ev3ell evel3o e5veng even4i ev1er e5verb e1vi ev3id evi4l e4vin evi4v e5voc e5vu e1wa e4wag e5wee e3wh ewil5 ew3ing e3wit 1exp 5eyc 5eye. eys4 1fa fa3bl fab3r fa4ce 4fag fain4 fall5e 4fa4ma fam5is 5far far5th fa3ta fa3the 4fato fault5 4f5b 4fd 4fe. feas4 feath3 fe4b 4feca 5fect 2fed fe3li fe4mo fen2d fend5e fer1 5ferr fev4 4f1f f4fes f4fie f5fin. f2f5is f4fly f2fy 4fh 1fi fi3a 2f3ic. 4f3ical f3ican 4ficate f3icen fi3cer fic4i 5ficia 5ficie 4fics fi3cu fi5del fight5 fil5i fill5in 4fily 2fin 5fina fin2d5 fi2ne f1in3g fin4n fis4ti f4l2 f5less flin4 flo3re f2ly5 4fm 4fn 1fo 5fon fon4de fon4t fo2r fo5rat for5ay fore5t for4i fort5a fos5 4f5p fra4t f5rea fres5c fri2 fril4 frol5 2f3s 2ft f4to f2ty 3fu fu5el 4fug fu4min fu5ne fu3ri fusi4 fus4s 4futa 1fy 1ga gaf4 5gal. 3gali ga3lo 2gam ga5met g5amo gan5is ga3niz gani5za 4gano gar5n4 gass4 gath3 4gativ 4gaz g3b gd4 2ge. 2ged geez4 gel4in ge5lis ge5liz 4gely 1gen ge4nat ge5niz 4geno 4geny 1geo ge3om g4ery 5gesi geth5 4geto ge4ty ge4v 4g1g2 g2ge g3ger gglu5 ggo4 gh3in gh5out gh4to 5gi. 1gi4a gia5r g1ic 5gicia g4ico gien5 5gies. gil4 g3imen 3g4in. gin5ge 5g4ins 5gio 3gir gir4l g3isl gi4u 5giv 3giz gl2 gla4 glad5i 5glas 1gle gli4b g3lig 3glo glo3r g1m g4my gn4a g4na. gnet4t g1ni g2nin g4nio g1no g4non 1go 3go. gob5 5goe 3g4o4g go3is gon2 4g3o3na gondo5 go3ni 5goo go5riz gor5ou 5gos. gov1 g3p 1gr 4grada g4rai gran2 5graph. g5rapher 5graphic 4graphy 4gray gre4n 4gress. 4grit g4ro gruf4 gs2 g5ste gth3 gu4a 3guard 2gue 5gui5t 3gun 3gus 4gu4t g3w 1gy 2g5y3n gy5ra h3ab4l hach4 hae4m hae4t h5agu ha3la hala3m ha4m han4ci han4cy 5hand. han4g hang5er hang5o h5a5niz han4k han4te hap3l hap5t ha3ran ha5ras har2d hard3e har4le harp5en har5ter has5s haun4 5haz haz3a h1b 1head 3hear he4can h5ecat h4ed he5do5 he3l4i hel4lis hel4ly h5elo hem4p he2n hena4 hen5at heo5r hep5 h4era hera3p her4ba here5a h3ern h5erou h3ery h1es he2s5p he4t het4ed heu4 h1f h1h hi5an hi4co high5 h4il2 himer4 h4ina hion4e hi4p hir4l hi3ro hir4p hir4r his3el his4s hith5er hi2v 4hk 4h1l4 hlan4 h2lo hlo3ri 4h1m hmet4 2h1n h5odiz h5ods ho4g hoge4 hol5ar 3hol4e ho4ma home3 hon4a ho5ny 3hood hoon4 hor5at ho5ris hort3e ho5ru hos4e ho5sen hos1p 1hous house3 hov5el 4h5p 4hr4 hree5 hro5niz hro3po 4h1s2 h4sh h4tar ht1en ht5es h4ty hu4g hu4min hun5ke hun4t hus3t4 hu4t h1w h4wart hy3pe hy3ph hy2s 2i1a i2al iam4 iam5ete i2an 4ianc ian3i 4ian4t ia5pe iass4 i4ativ ia4tric i4atu ibe4 ib3era ib5ert ib5ia ib3in ib5it. ib5ite i1bl ib3li i5bo i1br i2b5ri i5bun 4icam 5icap 4icar i4car. i4cara icas5 i4cay iccu4 4iceo 4ich 2ici i5cid ic5ina i2cip ic3ipa i4cly i2c5oc 4i1cr 5icra i4cry ic4te ictu2 ic4t3ua ic3ula ic4um ic5uo i3cur 2id i4dai id5anc id5d ide3al ide4s i2di id5ian idi4ar i5die id3io idi5ou id1it id5iu i3dle i4dom id3ow i4dr i2du id5uo 2ie4 ied4e 5ie5ga ield3 ien5a4 ien4e i5enn i3enti i1er. i3esc i1est i3et 4if. if5ero iff5en if4fr 4ific. i3fie i3fl 4ift 2ig iga5b ig3era ight3i 4igi i3gib ig3il ig3in ig3it i4g4l i2go ig3or ig5ot i5gre igu5i ig1ur i3h 4i5i4 i3j 4ik i1la il3a4b i4lade i2l5am ila5ra i3leg il1er ilev4 il5f il1i il3ia il2ib il3io il4ist 2ilit il2iz ill5ab 4iln il3oq il4ty il5ur il3v i4mag im3age ima5ry imenta5r 4imet im1i im5ida imi5le i5mini 4imit im4ni i3mon i2mu im3ula 2in. i4n3au 4inav incel4 in3cer 4ind in5dling 2ine i3nee iner4ar i5ness 4inga 4inge in5gen 4ingi in5gling 4ingo 4ingu 2ini i5ni. i4nia in3io in1is i5nite. 5initio in3ity 4ink 4inl 2inn 2i1no i4no4c ino4s i4not 2ins in3se insur5a 2int. 2in4th in1u i5nus 4iny 2io 4io. ioge4 io2gr i1ol io4m ion3at ion4ery ion3i io5ph ior3i i4os io5th i5oti io4to i4our 2ip ipe4 iphras4 ip3i ip4ic ip4re4 ip3ul i3qua iq5uef iq3uid iq3ui3t 4ir i1ra ira4b i4rac ird5e ire4de i4ref i4rel4 i4res ir5gi ir1i iri5de ir4is iri3tu 5i5r2iz ir4min iro4g 5iron. ir5ul 2is. is5ag is3ar isas5 2is1c is3ch 4ise is3er 3isf is5han is3hon ish5op is3ib isi4d i5sis is5itiv 4is4k islan4 4isms i2so iso5mer is1p is2pi is4py 4is1s is4sal issen4 is4ses is4ta. is1te is1ti ist4ly 4istral i2su is5us 4ita. ita4bi i4tag 4ita5m i3tan i3tat 2ite it3era i5teri it4es 2ith i1ti 4itia 4i2tic it3ica 5i5tick it3ig it5ill i2tim 2itio 4itis i4tism i2t5o5m 4iton i4tram it5ry 4itt it3uat i5tud it3ul 4itz. i1u 2iv iv3ell iv3en. i4v3er. i4vers. iv5il. iv5io iv1it i5vore iv3o3ro i4v3ot 4i5w ix4o 4iy 4izar izi4 5izont 5ja jac4q ja4p 1je jer5s 4jestie 4jesty jew3 jo4p 5judg 3ka. k3ab k5ag kais4 kal4 k1b k2ed 1kee ke4g ke5li k3en4d k1er kes4 k3est. ke4ty k3f kh4 k1i 5ki. 5k2ic k4ill kilo5 k4im k4in. kin4de k5iness kin4g ki4p kis4 k5ish kk4 k1l 4kley 4kly k1m k5nes 1k2no ko5r kosh4 k3ou kro5n 4k1s2 k4sc ks4l k4sy k5t k1w lab3ic l4abo laci4 l4ade la3dy lag4n lam3o 3land lan4dl lan5et lan4te lar4g lar3i las4e la5tan 4lateli 4lativ 4lav la4v4a 2l1b lbin4 4l1c2 lce4 l3ci 2ld l2de ld4ere ld4eri ldi4 ld5is l3dr l4dri le2a le4bi left5 5leg. 5legg le4mat lem5atic 4len. 3lenc 5lene. 1lent le3ph le4pr lera5b ler4e 3lerg 3l4eri l4ero les2 le5sco 5lesq 3less 5less. l3eva lev4er. lev4era lev4ers 3ley 4leye 2lf l5fr 4l1g4 l5ga lgar3 l4ges lgo3 2l3h li4ag li2am liar5iz li4as li4ato li5bi 5licio li4cor 4lics 4lict. l4icu l3icy l3ida lid5er 3lidi lif3er l4iff li4fl 5ligate 3ligh li4gra 3lik 4l4i4l lim4bl lim3i li4mo l4im4p l4ina 1l4ine lin3ea lin3i link5er li5og 4l4iq lis4p l1it l2it. 5litica l5i5tics liv3er l1iz 4lj lka3 l3kal lka4t l1l l4law l2le l5lea l3lec l3leg l3lel l3le4n l3le4t ll2i l2lin4 l5lina ll4o lloqui5 ll5out l5low 2lm l5met lm3ing l4mod lmon4 2l1n2 3lo. lob5al lo4ci 4lof 3logic l5ogo 3logu lom3er 5long lon4i l3o3niz lood5 5lope. lop3i l3opm lora4 lo4rato lo5rie lor5ou 5los. los5et 5losophiz 5losophy los4t lo4ta loun5d 2lout 4lov 2lp lpa5b l3pha l5phi lp5ing l3pit l4pl l5pr 4l1r 2l1s2 l4sc l2se l4sie 4lt lt5ag ltane5 l1te lten4 ltera4 lth3i l5ties. ltis4 l1tr ltu2 ltur3a lu5a lu3br luch4 lu3ci lu3en luf4 lu5id lu4ma 5lumi l5umn. 5lumnia lu3o luo3r 4lup luss4 lus3te 1lut l5ven l5vet4 2l1w 1ly 4lya 4lyb ly5me ly3no 2lys4 l5yse 1ma 2mab ma2ca ma5chine ma4cl mag5in 5magn 2mah maid5 4mald ma3lig ma5lin mal4li mal4ty 5mania man5is man3iz 4map ma5rine. ma5riz mar4ly mar3v ma5sce mas4e mas1t 5mate math3 ma3tis 4matiza 4m1b mba4t5 m5bil m4b3ing mbi4v 4m5c 4me. 2med 4med. 5media me3die m5e5dy me2g mel5on mel4t me2m mem1o3 1men men4a men5ac men4de 4mene men4i mens4 mensu5 3ment men4te me5on m5ersa 2mes 3mesti me4ta met3al me1te me5thi m4etr 5metric me5trie me3try me4v 4m1f 2mh 5mi. mi3a mid4a mid4g mig4 3milia m5i5lie m4ill min4a 3mind m5inee m4ingl min5gli m5ingly min4t m4inu miot4 m2is mis4er. mis5l mis4ti m5istry 4mith m2iz 4mk 4m1l m1m mma5ry 4m1n mn4a m4nin mn4o 1mo 4mocr 5mocratiz mo2d1 mo4go mois2 moi5se 4mok mo5lest mo3me mon5et mon5ge moni3a mon4ism mon4ist mo3niz monol4 mo3ny. mo2r 4mora. mos2 mo5sey mo3sp moth3 m5ouf 3mous mo2v 4m1p mpara5 mpa5rab mpar5i m3pet mphas4 m2pi mpi4a mp5ies m4p1in m5pir mp5is mpo3ri mpos5ite m4pous mpov5 mp4tr m2py 4m3r 4m1s2 m4sh m5si 4mt 1mu mula5r4 5mult multi3 3mum mun2 4mup mu4u 4mw 1na 2n1a2b n4abu 4nac. na4ca n5act nag5er. nak4 na4li na5lia 4nalt na5mit n2an nanci4 nan4it nank4 nar3c 4nare nar3i nar4l n5arm n4as nas4c nas5ti n2at na3tal nato5miz n2au nau3se 3naut nav4e 4n1b4 ncar5 n4ces. n3cha n5cheo n5chil n3chis nc1in nc4it ncour5a n1cr n1cu n4dai n5dan n1de nd5est. ndi4b n5d2if n1dit n3diz n5duc ndu4r nd2we 2ne. n3ear ne2b neb3u ne2c 5neck 2ned ne4gat neg5ativ 5nege ne4la nel5iz ne5mi ne4mo 1nen 4nene 3neo ne4po ne2q n1er nera5b n4erar n2ere n4er5i ner4r 1nes 2nes. 4nesp 2nest 4nesw 3netic ne4v n5eve ne4w n3f n4gab n3gel nge4n4e n5gere n3geri ng5ha n3gib ng1in n5git n4gla ngov4 ng5sh n1gu n4gum n2gy 4n1h4 nha4 nhab3 nhe4 3n4ia ni3an ni4ap ni3ba ni4bl ni4d ni5di ni4er ni2fi ni5ficat n5igr nik4 n1im ni3miz n1in 5nine. nin4g ni4o 5nis. nis4ta n2it n4ith 3nitio n3itor ni3tr n1j 4nk2 n5kero n3ket nk3in n1kl 4n1l n5m nme4 nmet4 4n1n2 nne4 nni3al nni4v nob4l no3ble n5ocl 4n3o2d 3noe 4nog noge4 nois5i no5l4i 5nologis 3nomic n5o5miz no4mo no3my no4n non4ag non5i n5oniz 4nop 5nop5o5li nor5ab no4rary 4nosc nos4e nos5t no5ta 1nou 3noun nov3el3 nowl3 n1p4 npi4 npre4c n1q n1r nru4 2n1s2 ns5ab nsati4 ns4c n2se n4s3es nsid1 nsig4 n2sl ns3m n4soc ns4pe n5spi nsta5bl n1t nta4b nter3s nt2i n5tib nti4er nti2f n3tine n4t3ing nti4p ntrol5li nt4s ntu3me nu1a nu4d nu5en nuf4fe n3uin 3nu3it n4um nu1me n5umi 3nu4n n3uo nu3tr n1v2 n1w4 nym4 nyp4 4nz n3za 4oa oad3 o5a5les oard3 oas4e oast5e oat5i ob3a3b o5bar obe4l o1bi o2bin ob5ing o3br ob3ul o1ce och4 o3chet ocif3 o4cil o4clam o4cod oc3rac oc5ratiz ocre3 5ocrit octor5a oc3ula o5cure od5ded od3ic odi3o o2do4 odor3 od5uct. od5ucts o4el o5eng o3er oe4ta o3ev o2fi of5ite ofit4t o2g5a5r og5ativ o4gato o1ge o5gene o5geo o4ger o3gie 1o1gis og3it o4gl o5g2ly 3ogniz o4gro ogu5i 1ogy 2ogyn o1h2 ohab5 oi2 oic3es oi3der oiff4 oig4 oi5let o3ing oint5er o5ism oi5son oist5en oi3ter o5j 2ok o3ken ok5ie o1la o4lan olass4 ol2d old1e ol3er o3lesc o3let ol4fi ol2i o3lia o3lice ol5id. o3li4f o5lil ol3ing o5lio o5lis. ol3ish o5lite o5litio o5liv olli4e ol5ogiz olo4r ol5pl ol2t ol3ub ol3ume ol3un o5lus ol2v o2ly om5ah oma5l om5atiz om2be om4bl o2me om3ena om5erse o4met om5etry o3mia om3ic. om3ica o5mid om1in o5mini 5ommend omo4ge o4mon om3pi ompro5 o2n on1a on4ac o3nan on1c 3oncil 2ond on5do o3nen on5est on4gu on1ic o3nio on1is o5niu on3key on4odi on3omy on3s onspi4 onspir5a onsu4 onten4 on3t4i ontif5 on5um onva5 oo2 ood5e ood5i oo4k oop3i o3ord oost5 o2pa ope5d op1er 3opera 4operag 2oph o5phan o5pher op3ing o3pit o5pon o4posi o1pr op1u opy5 o1q o1ra o5ra. o4r3ag or5aliz or5ange ore5a o5real or3ei ore5sh or5est. orew4 or4gu 4o5ria or3ica o5ril or1in o1rio or3ity o3riu or2mi orn2e o5rof or3oug or5pe 3orrh or4se ors5en orst4 or3thi or3thy or4ty o5rum o1ry os3al os2c os4ce o3scop 4oscopi o5scr os4i4e os5itiv os3ito os3ity osi4u os4l o2so os4pa os4po os2ta o5stati os5til os5tit o4tan otele4g ot3er. ot5ers o4tes 4oth oth5esi oth3i4 ot3ic. ot5ica o3tice o3tif o3tis oto5s ou2 ou3bl ouch5i ou5et ou4l ounc5er oun2d ou5v ov4en over4ne over3s ov4ert o3vis oviti4 o5v4ol ow3der ow3el ow5est ow1i own5i o4wo oy1a 1pa pa4ca pa4ce pac4t p4ad 5pagan p3agat p4ai pain4 p4al pan4a pan3el pan4ty pa3ny pa1p pa4pu para5bl par5age par5di 3pare par5el p4a4ri par4is pa2te pa5ter 5pathic pa5thy pa4tric pav4 3pay 4p1b pd4 4pe. 3pe4a pear4l pe2c 2p2ed 3pede 3pedi pedia4 ped4ic p4ee pee4d pek4 pe4la peli4e pe4nan p4enc pen4th pe5on p4era. pera5bl p4erag p4eri peri5st per4mal perme5 p4ern per3o per3ti pe5ru per1v pe2t pe5ten pe5tiz 4pf 4pg 4ph. phar5i phe3no ph4er ph4es. ph1ic 5phie ph5ing 5phisti 3phiz ph2l 3phob 3phone 5phoni pho4r 4phs ph3t 5phu 1phy pi3a pian4 pi4cie pi4cy p4id p5ida pi3de 5pidi 3piec pi3en pi4grap pi3lo pi2n p4in. pind4 p4ino 3pi1o pion4 p3ith pi5tha pi2tu 2p3k2 1p2l2 3plan plas5t pli3a pli5er 4plig pli4n ploi4 plu4m plum4b 4p1m 2p3n po4c 5pod. po5em po3et5 5po4g poin2 5point poly5t po4ni po4p 1p4or po4ry 1pos pos1s p4ot po4ta 5poun 4p1p ppa5ra p2pe p4ped p5pel p3pen p3per p3pet ppo5site pr2 pray4e 5preci pre5co pre3em pref5ac pre4la pre3r p3rese 3press pre5ten pre3v 5pri4e prin4t3 pri4s pris3o p3roca prof5it pro3l pros3e pro1t 2p1s2 p2se ps4h p4sib 2p1t pt5a4b p2te p2th pti3m ptu4r p4tw pub3 pue4 puf4 pul3c pu4m pu2n pur4r 5pus pu2t 5pute put3er pu3tr put4ted put4tin p3w qu2 qua5v 2que. 3quer 3quet 2rab ra3bi rach4e r5acl raf5fi raf4t r2ai ra4lo ram3et r2ami rane5o ran4ge r4ani ra5no rap3er 3raphy rar5c rare4 rar5ef 4raril r2as ration4 rau4t ra5vai rav3el ra5zie r1b r4bab r4bag rbi2 rbi4f r2bin r5bine rb5ing. rb4o r1c r2ce rcen4 r3cha rch4er r4ci4b rc4it rcum3 r4dal rd2i rdi4a rdi4er rdin4 rd3ing 2re. re1al re3an re5arr 5reav re4aw r5ebrat rec5oll rec5ompe re4cre 2r2ed re1de re3dis red5it re4fac re2fe re5fer. re3fi re4fy reg3is re5it re1li re5lu r4en4ta ren4te re1o re5pin re4posi re1pu r1er4 r4eri rero4 re5ru r4es. re4spi ress5ib res2t re5stal re3str re4ter re4ti4z re3tri reu2 re5uti rev2 re4val rev3el r5ev5er. re5vers re5vert re5vil rev5olu re4wh r1f rfu4 r4fy rg2 rg3er r3get r3gic rgi4n rg3ing r5gis r5git r1gl rgo4n r3gu rh4 4rh. 4rhal ri3a ria4b ri4ag r4ib rib3a ric5as r4ice 4rici 5ricid ri4cie r4ico rid5er ri3enc ri3ent ri1er ri5et rig5an 5rigi ril3iz 5riman rim5i 3rimo rim4pe r2ina 5rina. rin4d rin4e rin4g ri1o 5riph riph5e ri2pl rip5lic r4iq r2is r4is. ris4c r3ish ris4p ri3ta3b r5ited. rit5er. rit5ers rit3ic ri2tu rit5ur riv5el riv3et riv3i r3j r3ket rk4le rk4lin r1l rle4 r2led r4lig r4lis rl5ish r3lo4 r1m rma5c r2me r3men rm5ers rm3ing r4ming. r4mio r3mit r4my r4nar r3nel r4ner r5net r3ney r5nic r1nis4 r3nit r3niv rno4 r4nou r3nu rob3l r2oc ro3cr ro4e ro1fe ro5fil rok2 ro5ker 5role. rom5ete rom4i rom4p ron4al ron4e ro5n4is ron4ta 1room 5root ro3pel rop3ic ror3i ro5ro ros5per ros4s ro4the ro4ty ro4va rov5el rox5 r1p r4pea r5pent rp5er. r3pet rp4h4 rp3ing r3po r1r4 rre4c rre4f r4reo rre4st rri4o rri4v rron4 rros4 rrys4 4rs2 r1sa rsa5ti rs4c r2se r3sec rse4cr rs5er. rs3es rse5v2 r1sh r5sha r1si r4si4b rson3 r1sp r5sw rtach4 r4tag r3teb rten4d rte5o r1ti rt5ib rti4d r4tier r3tig rtil3i rtil4l r4tily r4tist r4tiv r3tri rtroph4 rt4sh ru3a ru3e4l ru3en ru4gl ru3in rum3pl ru2n runk5 run4ty r5usc ruti5n rv4e rvel4i r3ven rv5er. r5vest r3vey r3vic rvi4v r3vo r1w ry4c 5rynge ry3t sa2 2s1ab 5sack sac3ri s3act 5sai salar4 sal4m sa5lo sal4t 3sanc san4de s1ap sa5ta 5sa3tio sat3u sau4 sa5vor 5saw 4s5b scan4t5 sca4p scav5 s4ced 4scei s4ces sch2 s4cho 3s4cie 5scin4d scle5 s4cli scof4 4scopy scour5a s1cu 4s5d 4se. se4a seas4 sea5w se2c3o 3sect 4s4ed se4d4e s5edl se2g seg3r 5sei se1le 5self 5selv 4seme se4mol sen5at 4senc sen4d s5ened sen5g s5enin 4sentd 4sentl sep3a3 4s1er. s4erl ser4o 4servo s1e4s se5sh ses5t 5se5um 5sev sev3en sew4i 5sex 4s3f 2s3g s2h 2sh. sh1er 5shev sh1in sh3io 3ship shiv5 sho4 sh5old shon3 shor4 short5 4shw si1b s5icc 3side. 5sides 5sidi si5diz 4signa sil4e 4sily 2s1in s2ina 5sine. s3ing 1sio 5sion sion5a si2r sir5a 1sis 3sitio 5siu 1siv 5siz sk2 4ske s3ket sk5ine sk5ing s1l2 s3lat s2le slith5 2s1m s3ma small3 sman3 smel4 s5men 5smith smol5d4 s1n4 1so so4ce soft3 so4lab sol3d2 so3lic 5solv 3som 3s4on. sona4 son4g s4op 5sophic s5ophiz s5ophy sor5c sor5d 4sov so5vi 2spa 5spai spa4n spen4d 2s5peo 2sper s2phe 3spher spho5 spil4 sp5ing 4spio s4ply s4pon spor4 4spot squal4l s1r 2ss s1sa ssas3 s2s5c s3sel s5seng s4ses. s5set s1si s4sie ssi4er ss5ily s4sl ss4li s4sn sspend4 ss2t ssur5a ss5w 2st. s2tag s2tal stam4i 5stand s4ta4p 5stat. s4ted stern5i s5tero ste2w stew5a s3the st2i s4ti. s5tia s1tic 5stick s4tie s3tif st3ing 5stir s1tle 5stock stom3a 5stone s4top 3store st4r s4trad 5stratu s4tray s4trid 4stry 4st3w s2ty 1su su1al su4b3 su2g3 su5is suit3 s4ul su2m sum3i su2n su2r 4sv sw2 4swo s4y 4syc 3syl syn5o sy5rin 1ta 3ta. 2tab ta5bles 5taboliz 4taci ta5do 4taf4 tai5lo ta2l ta5la tal5en tal3i 4talk tal4lis ta5log ta5mo tan4de tanta3 ta5per ta5pl tar4a 4tarc 4tare ta3riz tas4e ta5sy 4tatic ta4tur taun4 tav4 2taw tax4is 2t1b 4tc t4ch tch5et 4t1d 4te. tead4i 4teat tece4 5tect 2t1ed te5di 1tee teg4 te5ger te5gi 3tel. teli4 5tels te2ma2 tem3at 3tenan 3tenc 3tend 4tenes 1tent ten4tag 1teo te4p te5pe ter3c 5ter3d 1teri ter5ies ter3is teri5za 5ternit ter5v 4tes. 4tess t3ess. teth5e 3teu 3tex 4tey 2t1f 4t1g 2th. than4 th2e 4thea th3eas the5at the3is 3thet th5ic. th5ica 4thil 5think 4thl th5ode 5thodic 4thoo thor5it tho5riz 2ths 1tia ti4ab ti4ato 2ti2b 4tick t4ico t4ic1u 5tidi 3tien tif2 ti5fy 2tig 5tigu till5in 1tim 4timp tim5ul 2t1in t2ina 3tine. 3tini 1tio ti5oc tion5ee 5tiq ti3sa 3tise tis4m ti5so tis4p 5tistica ti3tl ti4u 1tiv tiv4a 1tiz ti3za ti3zen 2tl t5la tlan4 3tle. 3tled 3tles. t5let. t5lo 4t1m tme4 2t1n2 1to to3b to5crat 4todo 2tof to2gr to5ic to2ma tom4b to3my ton4ali to3nat 4tono 4tony to2ra to3rie tor5iz tos2 5tour 4tout to3war 4t1p 1tra tra3b tra5ch traci4 trac4it trac4te tras4 tra5ven trav5es5 tre5f tre4m trem5i 5tria tri5ces 5tricia 4trics 2trim tri4v tro5mi tron5i 4trony tro5phe tro3sp tro3v tru5i trus4 4t1s2 t4sc tsh4 t4sw 4t3t2 t4tes t5to ttu4 1tu tu1a tu3ar tu4bi tud2 4tue 4tuf4 5tu3i 3tum tu4nis 2t3up. 3ture 5turi tur3is tur5o tu5ry 3tus 4tv tw4 4t1wa twis4 4two 1ty 4tya 2tyl type3 ty5ph 4tz tz4e 4uab uac4 ua5na uan4i uar5ant uar2d uar3i uar3t u1at uav4 ub4e u4bel u3ber u4bero u1b4i u4b5ing u3ble. u3ca uci4b uc4it ucle3 u3cr u3cu u4cy ud5d ud3er ud5est udev4 u1dic ud3ied ud3ies ud5is u5dit u4don ud4si u4du u4ene uens4 uen4te uer4il 3ufa u3fl ugh3en ug5in 2ui2 uil5iz ui4n u1ing uir4m uita4 uiv3 uiv4er. u5j 4uk u1la ula5b u5lati ulch4 5ulche ul3der ul4e u1len ul4gi ul2i u5lia ul3ing ul5ish ul4lar ul4li4b ul4lis 4ul3m u1l4o 4uls uls5es ul1ti ultra3 4ultu u3lu ul5ul ul5v um5ab um4bi um4bly u1mi u4m3ing umor5o um2p unat4 u2ne un4er u1ni un4im u2nin un5ish uni3v un3s4 un4sw unt3ab un4ter. un4tes unu4 un5y un5z u4ors u5os u1ou u1pe uper5s u5pia up3ing u3pl up3p upport5 upt5ib uptu4 u1ra 4ura. u4rag u4ras ur4be urc4 ur1d ure5at ur4fer ur4fr u3rif uri4fic ur1in u3rio u1rit ur3iz ur2l url5ing. ur4no uros4 ur4pe ur4pi urs5er ur5tes ur3the urti4 ur4tie u3ru 2us u5sad u5san us4ap usc2 us3ci use5a u5sia u3sic us4lin us1p us5sl us5tere us1tr u2su usur4 uta4b u3tat 4ute. 4utel 4uten uten4i 4u1t2i uti5liz u3tine ut3ing ution5a u4tis 5u5tiz u4t1l ut5of uto5g uto5matic u5ton u4tou uts4 u3u uu4m u1v2 uxu3 uz4e 1va 5va. 2v1a4b vac5il vac3u vag4 va4ge va5lie val5o val1u va5mo va5niz va5pi var5ied 3vat 4ve. 4ved veg3 v3el. vel3li ve4lo v4ely ven3om v5enue v4erd 5vere. v4erel v3eren ver5enc v4eres ver3ie vermi4n 3verse ver3th v4e2s 4ves. ves4te ve4te vet3er ve4ty vi5ali 5vian 5vide. 5vided 4v3iden 5vides 5vidi v3if vi5gn vik4 2vil 5vilit v3i3liz v1in 4vi4na v2inc vin5d 4ving vio3l v3io4r vi1ou vi4p vi5ro vis3it vi3so vi3su 4viti vit3r 4vity 3viv 5vo. voi4 3vok vo4la v5ole 5volt 3volv vom5i vor5ab vori4 vo4ry vo4ta 4votee 4vv4 v4y w5abl 2wac wa5ger wag5o wait5 w5al. wam4 war4t was4t wa1te wa5ver w1b wea5rie weath3 wed4n weet3 wee5v wel4l w1er west3 w3ev whi4 wi2 wil2 will5in win4de win4g wir4 3wise with3 wiz5 w4k wl4es wl3in w4no 1wo2 wom1 wo5ven w5p wra4 wri4 writa4 w3sh ws4l ws4pe w5s4t 4wt wy4 x1a xac5e x4ago xam3 x4ap xas5 x3c2 x1e xe4cuto x2ed xer4i xe5ro x1h xhi2 xhil5 xhu4 x3i xi5a xi5c xi5di x4ime xi5miz x3o x4ob x3p xpan4d xpecto5 xpe3d x1t2 x3ti x1u xu3a xx4 y5ac 3yar4 y5at y1b y1c y2ce yc5er y3ch ych4e ycom4 ycot4 y1d y5ee y1er y4erf yes4 ye4t y5gi 4y3h y1i y3la ylla5bl y3lo y5lu ymbol5 yme4 ympa3 yn3chr yn5d yn5g yn5ic 5ynx y1o4 yo5d y4o5g yom4 yo5net y4ons y4os y4ped yper5 yp3i y3po y4poc yp2ta y5pu yra5m yr5ia y3ro yr4r ys4c y3s2e ys3ica ys3io 3ysis y4so yss4 ys1t ys3ta ysur4 y3thin yt3ic y1w za1 z5a2b zar2 4zb 2ze ze4n ze4p z1er ze3ro zet4 2z1i z4il z4is 5zl 4zm 1zo zo4m zo5ol zte4 4z1z2 z4zy .con5gr .de5riva .dri5v4 .eth1y6l1 .eu4ler .ev2 .ever5si5b .ga4s1om1 .ge4ome .ge5ot1 .he3mo1 .he3p6a .he3roe .in5u2t .kil2n3i .ko6r1te1 .le6ices .me4ga1l .met4ala .mim5i2c1 .mi1s4ers .ne6o3f .noe1th .non1e2m .poly1s .post1am .pre1am .rav5en1o .semi5 .sem4ic .semid6 .semip4 .semir4 .sem6is4 .semiv4 .sph6in1 .spin1o .ta5pes1tr .te3legr .to6pog .to2q .un3at5t .un5err5 .vi2c3ar .we2b1l .re1e4c a5bolic a2cabl af6fish am1en3ta5b anal6ys ano5a2c ans5gr ans3v anti1d an3ti1n2 anti1re a4pe5able ar3che5t ar2range as5ymptot ath3er1o1s at6tes. augh4tl au5li5f av3iou back2er. ba6r1onie ba1thy bbi4t be2vie bi5d2if bil2lab bio5m bi1orb bio1rh b1i3tive blan2d1 blin2d1 blon2d2 bor1no5 bo2t1u1l brus4q bus6i2er bus6i2es buss4ing but2ed. but4ted cad5e1m cat1a1s2 4chs. chs3hu chie5vo cig3a3r cin2q cle4ar co6ph1o3n cous2ti cri3tie croc1o1d cro5e2co c2tro3me6c 1cu2r1ance 2d3alone data1b dd5a5b d2d5ib de4als. de5clar1 de2c5lina de3fin3iti de2mos des3ic de2tic dic1aid dif5fra 3di1methy di2ren di2rer 2d1lead 2d1li2e 3do5word dren1a5l drif2t1a d1ri3pleg5 drom3e5d d3tab du2al. du1op1o1l ea4n3ies e3chas edg1l ed1uling eli2t1is e1loa en1dix eo3grap 1e6p3i3neph1 e2r3i4an. e3spac6i eth1y6l1ene 5eu2clid1 feb1rua fermi1o 3fich fit5ted. fla1g6el flow2er. 3fluor gen2cy. ge3o1d ght1we g1lead get2ic. 4g1lish 5glo5bin 1g2nac gnet1ism gno5mo g2n1or. g2noresp 2g1o4n3i1za graph5er. griev1 g1utan hair1s ha2p3ar5r hatch1 hex2a3 hite3sid h3i5pel1a4 hnau3z ho6r1ic. h2t1eou hypo1tha id4ios ifac1et ign4it ignit1er i4jk im3ped3a infra1s2 i5nitely. irre6v3oc i1tesima ith5i2l itin5er5ar janu3a japan1e2s je1re1m 1ke6ling 1ki5netic 1kovian k3sha la4c3i5e lai6n3ess lar5ce1n l3chai l3chil6d1 lead6er. lea4s1a 1lec3ta6b le3g6en2dre 1le1noid lith1o5g ll1fl l2l3ish l5mo3nell lo1bot1o1 lo2ges. load4ed. load6er. l3tea lth5i2ly lue1p 1lunk3er 1lum5bia. 3lyg1a1mi ly5styr ma1la1p m2an. man3u1sc mar1gin1 medi2c med3i3cin medio6c1 me3gran3 m2en. 3mi3da5b 3milita mil2l1ag mil5li5li mi6n3is. mi1n2ut1er mi1n2ut1est m3ma1b 5maph1ro1 5moc1ra1t mo5e2las mol1e5c mon4ey1l mono3ch mo4no1en moro6n5is mono1s6 moth4et2 m1ou3sin m5shack2 mu2dro mul2ti5u n3ar4chs. n3ch2es1t ne3back 2ne1ski n1dieck nd3thr nfi6n3ites 4n5i4an. nge5nes ng1ho ng1spr nk3rup n5less 5noc3er1os nom1a6l nom5e1no n1o1mist non1eq non1i4so 5nop1oly. no1vemb ns5ceiv ns4moo ntre1p obli2g1 o3chas odel3li odit1ic oerst2 oke1st o3les3ter oli3gop1o1 o1lo3n4om o3mecha6 onom1ic o3norma o3no2t1o3n o3nou op1ism. or4tho3ni4t orth1ri or5tively o4s3pher o5test1er o5tes3tor oth3e1o1s ou3ba3do o6v3i4an. oxi6d1ic pal6mat parag6ra4 par4a1le param4 para3me pee2v1 phi2l3ant phi5lat1e3l pi2c1a3d pli2c1ab pli5nar poin3ca 1pole. poly1e po3lyph1ono 1prema3c pre1neu pres2pli pro2cess proc3i3ty. pro2g1e 3pseu2d pseu3d6o3d2 pseu3d6o3f2 pto3mat4 p5trol3 pu5bes5c quain2t1e qu6a3si3 quasir6 quasis6 quin5tes5s qui3v4ar r1abolic 3rab1o1loi ra3chu r3a3dig radi1o6g r2amen 3ra4m5e1triz ra3mou ra5n2has ra1or r3bin1ge re2c3i1pr rec5t6ang re4t1ribu r3ial. riv1o1l 6rk. rk1ho r1krau 6rks. r5le5qu ro1bot1 ro5e2las ro5epide1 ro3mesh ro1tron r3pau5li rse1rad1i r1thou r1treu r1veil rz1sc sales3c sales5w 5sa3par5il sca6p1er sca2t1ol s4chitz schro1ding1 1sci2utt scrap4er. scy4th1 sem1a1ph se3mes1t se1mi6t5ic sep3temb shoe1st sid2ed. side5st side5sw si5resid sky1sc 3slova1kia 3s2og1a1my so2lute 3s2pace 1s2pacin spe3cio spher1o spi2c1il spokes5w sports3c sports3w s3qui3to s2s1a3chu1 ss3hat s2s3i4an. s5sign5a3b 1s2tamp s2t1ant5shi star3tli sta1ti st5b 1stor1ab strat1a1g strib5ut st5scr stu1pi4d1 styl1is su2per1e6 1sync 1syth3i2 swimm6 5tab1o1lism ta3gon. talk1a5 t1a1min t6ap6ath 5tar2rh tch1c tch3i1er t1cr teach4er. tele2g tele1r6o 3ter1gei ter2ic. t3ess2es tha4l1am tho3don th1o5gen1i tho1k2er thy4l1an thy3sc 2t3i4an. ti2n3o1m t1li2er tolo2gy tot3ic trai3tor1 tra1vers travers3a3b treach1e tr4ial. 3tro1le1um trof4ic. tro3fit tro1p2is 3trop1o5les 3trop1o5lis t1ro1pol3it tsch3ie ttrib1ut1 turn3ar t1wh ty2p5al ua3drati uad1ratu u5do3ny uea1m u2r1al. uri4al. us2er. v1ativ v1oir5du1 va6guer vaude3v 1verely. v1er1eig ves1tite vi1vip3a3r voice1p waste3w6a2 wave1g4 w3c week1n wide5sp wo4k1en wrap3aro writ6er. x1q xquis3 y5che3d ym5e5try y1stro yes5ter1y z3ian. z3o1phr z2z3w", ["length"]=31488, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4938, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fi.lua0000644000175000017500000001253112161703335024642 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="fi", ["source"]="hyph-fi", ["texcomment"]="% Finnish hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: fihyph.tex (yyyy-mm-dd)\ % Author: Kauko Saarinen\ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % -----> Finnish hyphenation patterns for MLPCTeX <------\ % First release January -86 by Kauko Saarinen,\ % Computing Centre, University of Jyvaskyla, Finland\ %\ % Completely rewritten January -88. The new patterns make\ % much less mistakes with foreign and compound words.\ % The article \"Automatic Hyphenation of Finnish\"\ % by Professor Fred Karlsson is also referred\ % ---------------------------------------------------------\ %\ % 8th March -89 (vers. 2.2), some vowel triples by Fred Karlsson added.\ % 9th January - 95: added \\uccode and \\lccode by Thomas Esser\ %\ % ********* Patterns may be freely distributed **********\ %\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvyäö", ["data"]="1ba 1be 1bi 1bo 1bu 1by 1da 1de 1di 1do 1du 1dy 1dä 1dö 1fa 1fe 1fi 1fo 1fu 1fy 1ga 1ge 1gi 1go 1gu 1gy 1gä 1gö 1ha 1he 1hi 1ho 1hu 1hy 1hä 1hö 1ja 1je 1ji 1jo 1ju 1jy 1jä 1jö 1ka 1ke 1ki 1ko 1ku 1ky 1kä 1kö 1la 1le 1li 1lo 1lu 1ly 1lä 1lö 1ma 1me 1mi 1mo 1mu 1my 1mä 1mö 1na 1ne 1ni 1no 1nu 1ny 1nä 1nö 1pa 1pe 1pi 1po 1pu 1py 1pä 1pö 1ra 1re 1ri 1ro 1ru 1ry 1rä 1rö 1sa 1se 1si 1so 1su 1sy 1sä 1sö 1ta 1te 1ti 1to 1tu 1ty 1tä 1tö 1va 1ve 1vi 1vo 1vu 1vy 1vä 1vö 1st2r ä2y y1a2 y1o2 o1y ö2y u1y2 y1u2 ö3a2 ö3o2 ä3a2 ä3o2 ä1u2 ö1u2 a1ä a1ö o1ä o1ö u1ä2 u1ö2 ä2ä ö2ö ä2ö ö2ä aa1i2 aa1e2 aa1o2 aa1u2 ee1a2 ee1i2 ee1u2 ee1y2 ii1a2 ii1e2 ii1o2 uu1a2 uu1e2 uu1o2 uu1i2 e1aa i1aa o1aa u1aa u1ee a1uu i1uu e1uu o1uu ää1i ää1e ää3y i1ää e1ää y1ää i1öö a1ei a1oi e1ai i1au y1ei ai1a ai1e ai1o ai1u au1a au1e eu1a ie1a ie1o ie1y io1a2 io1e2 iu1a iu1e iu1o oi1a oi1e oi1o oi1u o1ui ou1e ou1o ue1a ui1e uo1a uo1u e1ö2 ö1e2 .ä2 u2s yli1o2p ali1a2v 1sp2li alous1 keus1 rtaus1 2s1ohje 2s1a2sia 1a2sian 1a2siat 1a2sioi r2as l2as 2s1o2pisk 2n1o2pet 2s1a2loi 2n1o2pist 2s1o2pist 2s1o2sa 2n1o2sa alkei2s1 perus1 2s1i2dea. 2s1i2dean 2s1e2sity 2n1e2dus 2s1ajatu 2s1ase 2s1apu 2s1y2rit .ydi2n1 .suu2r1a2 2s1y2hti 2n1otto 2n1oton 2n1anto 2n1anno 2n1a2jan 2n1aika 2n1o2mai 2n1y2lit 2s1a2len 2n1a2len 1a2siaka2s1 ulo2s1 2n1a2jo 2s1a2jo b2l 1b2lo bib3li b2r 1b2ri 1b2ro 1b2ru d2r 1d2ra f2l 1f2la f2r 1f2ra 1f2re g2l 1g2lo g2r 1g2ra k2l 1k2ra 1k2re 1k2ri 1k2v 1k2va p2l p2r 1p2ro c2l q2v 1q2vi sc2h ts2h ch2r", ["length"]=1546, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=286, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nl.lua0000644000175000017500000025564712161703335024676 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abcdefghijklmnoprstuvw", ["data"]="aan-dachts-trek-ker aan-dachts-trek-kers acht-en-der acht-en-ders acht-en-der-tig acht-en-der-tig-ste be-heers-ta-ken be-scherm-en-gel be-scherm-en-ge-len be-stuurs-la-gen be-stuurs-ta-ken bij-stands-trek-ker bij-stands-trek-kers bui-ten-an-ten-ne bui-ten-an-ten-nes don-der-aal han-dels-taal her-e-nen ket-ting-ste-ken lands-taal meest-al mi-nis-ters-por-te-feuil-le mi-nis-ters-por-te-feuil-les ont-hoof-din-gen pa-ling-ste-ken rechts-taal schil-ders-ta-lent sou-ve-niertje sou-ve-niertjes spie-gel-ei ver-en-gels-te ver-hol-lands-te ver-in-lands-te ver-kinds-te ver-ne-der-lands-te ver-rechts-te ver-steeds-te wals-te wa-ter-staats-in-ge-ni-eur wa-ter-staats-in-ge-ni-eurs", ["length"]=675, ["n"]=40, }, ["metadata"]={ ["mnemonic"]="nl", ["source"]="hyph-nl", ["texcomment"]="% Dutch hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: nehyph96.tex (yyyy-mm-dd)\ % Author: Piet Tutelaers\ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % PURPOSE: 8-bit hyphenation patterns for TeX based upon the new Dutch\ % spelling, officially since 1 August 1996. These patterns follow\ % the new hyphenation rules in the `Woordenlijst Nederlandse\ % Taal, SDU Uitgevers, Den Haag 1995' (the so called `Groene\ % Boekje') described in section 5.2 (Het afbreekteken).\ %\ % The main differences with our earlier patterns based upon the\ % CELEX dictionary are:\ % (1) provide 8-bit patterns based upon the T1 character encoding\ % (the encoding for DC/EC compatible TeX fonts)\ % (2) don't hyphenate if this results in a syllable of one letter\ % before or after the hyphen (hence hyphens in a-drenaline,\ % studi-o, mensa-pen and vide-oachtig are invalid)\ % (3) handle words derived from other languages (`bastaard\ % woorden') according to the new rules\ %\ % Like the CELEX patterns these patterns don't hyphenate:\ % (4) in a changing syllable (menuutje can not be hyphenated as\ % menu-tje)\ % (5) in words that have different hyphenations according to\ % there meaning (buur-tje/buurt-je)\ %\ % COPYRIGHT (C) 1996: Piet Tutelaers\ %\ % -----------------------------------------------------------------\ % IMPORTANT NOTICE:\ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ % -----------------------------------------------------------------\ % VERSION: 1.1 (November 1996) Copyright changed March 2000\ %\ % AUTHOR: Piet Tutelaers P.T.H.Tutelaers@tue.nl\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzäçèéêëîïñöûü", ["data"]=".a4 .aan5 .aarts5 .aat5 .ab5l .acht5end .ac5re .adi5 .af3 .af5l .af5s .aftu5re .al3ee .al3f .alk4 .al5ko .alko5v .al5ma .al3om .al4st .ana3s .an3d2 .an3en .an3gl .an5th .ar5d .ar5tr .as5h .as5l .as3t .as5tra .as3u .at4a .ave5n .b4 .be3la .be5ra .be5ri .bos1 .c4 .coo5 .co3ro .cus5 .d4 .daar5 .da4gi .dag5r .da2k .dan2 .debe4 .de2k .dek5l .dek5s .den4k5r .de5od .de3ro .de5sta .di4a .die4p .di3o .doet3 .do3v .du4w .e4 .ede2 .edel5a .ed3w .ee4n .eer5ste .eest3 .eesto4 .eet3 .ei3l .ei5sc .ei3sp .ei5t .el4s5 .en5s .en5th .ep4a .ere5s .er2f .erf3l .er3in .ert4 .erts3 .es3 .es5c .es5pe .es5tr .eten4 .et4h .ets5te. .eu3 .eus5 .é2 .f4 .fel4s .g4 .gaat5 .gang5s .gea5v .ge3l4a .ge5le .gelo5v .ge3n4a .gena5z .ge5ne .ge5no .ge3ra .ge5r4e .ge5r4o .gerst5a .ge3s .ge5sk .ge5ta .ge5tj .ge5to .gid4 .go4m .goot3 .h2 .handels5 .her5in .hits5t .ho4lo .houd5s .i4 .ide5o .ij4s .ijs5l .ijs3p .ijs3t .ik3 .in1 .in5d4 .in3g4 .in5gr .ink2 .in5kr .in5kw .in3s4 .in5sl .in5st .in5ta .is5c .j4 .jor5 .k4 .ka3d .ka5g .ka4taa .kerk5l .kerk5r .kerk5u .ker5sten .ke4s .koot5 .ko5pe .kop5l .ko3v .kun2 .l4 .laat5ste .le4b5 .leg3o .le4g3r .leid5st .len4s3 .le5r4 .le4s3 .le5th .lin5d .lof5 .loot3 .lo4s1 .lu3e .lui5t4j .lu4s .m4 .ma5d .ma5ï .meel5d .me5la .me5ni .merk5l .me2s .me4st .met5ee .mij4n5i .moot3 .mor5sten .mo4s .n4 .naat5 .na3d .na3n .na3s4 .nee5s .ne2p .nep3a .ne4s .ne5te .ne4t3j .neu4t5j .nie4t5j .noot5 .nos5t .no5v .o4 .oe4r5 .oe4s5 .oeve4 .ol3f .om1 .omme3 .on3a .on3d .onde4r .on1e .on5g .on3i .on5k .on1o .ono5v .on2t3 .on4tee .on4ter .ont5s .ooi5tj .oot5jes .op5ee .opi5 .op5l .op3r .op5s .org4 .os5 .ove4 .p4 .pee5tj .peri5 .pers5te. .piet5j .pits5te. .poort5j .po4st .puit4 .pui5tj .pu2t .r4 .raads5le .ran4d .rand5a .re4men .ren4o .reno5v .re5o .rie4t3 .rij5sp .ring5s4 .roe5tj .ro4l .ro4st .ro4t3h .ro5v .s4 .sap3 .sa5v .sci3 .see3 .seks5te .se5re .set3 .se5v .side3 .ski3s4 .sneu3 .sno2 .so2k3 .song5 .spoor5tj .st4 .ste4m .t4 .taart5j .tan4da .te4a .te4f .tek2 .te3le .ten5ac .te3no .ten4t5j .te3ra .ter4p5a .ter5s .te4s .ti2n .tin3a .tin3e .toe5pr .to4lo .to4p .to5v .tri3s4 .ts4 .tsa3 .tuit5j .ty2r .u4 .ui2 .ui5s .uit1 .uit4je .uke5 .ur4a .vaat5j .ven4t5j .ve4r3 .ves5p .vet3j .vie4r .vol5s .w4 .wals5te. .wee4ko .wee4t3 .we4l3 .wen4s5t .west5r .win4s .xe3 .y2 .z4 .zes5 .zit5 .zooi5 4a. a4a4 4aad aad1a aad1o aad1r aad5sap aaf5a 4aag aag1a aag3e aag3o aag5r aags4 aag3sa aag5so aag3sp aai3l aak1a aak3e2 aak1o aak5r aak3sp aal5a2 aal1e aal5f4o aalfo5l aal1i aal5k aal5m aal1o2 aal3sl aal5so aal5spe aal5ste aal1u aam1a aam3o aam4sta aam4ste aan1a 5aandee aand4r aan1e2 aan5g aan5i 3aanj aan5k4 3aann aan3o aan3sp aans4po aant4 3aanta 3aanv aap1a aap3i aap3o2 aap3r aar3a aar4d5as aar3e4 aar1i 4aarn aar1o2 aar5spel aar4t5on aarts5l aar3u aas3e aas3i 4aast aas5tr aat3a aat5e aat3h aat3i aat1o aat5r abak4s5 aba4l abat4s ab5eun ab3ijz a2bon aboot4j abot4j 2abr ab3ru 4ac. a3cal a3car 4ace ace3st 4ach. a3cha 2a1che 4a1chi ach3l a1cho a3chr 4achs ach5tec a1chu achuut5 4ack ac3kl 2acl 2a3co 2acr ac5res 4acta 4acu 4ad. a5da. ad3ac ada2d ada4l ada2r3 adas5 2add a5de. ad3ei ade5re a5des a3det a5deta ad3e4te 2adh 4ad4i adi3al adi4oc adi4od 4adk 2adl 4ado. a3doo 2adp ad3rei a3d4ri ad3rol 2ads ad5se ad3so ad1s4t ad5sta ad3ui ad3w 2ady 4ae aege4 ae5k4 a3e2p ae3r ae2s3 ae4s5t a3eu a2ë a4ër 4afa af3aa a2f3ac af4as af4at afd4i afd2r af5d4w 4afe afee4 4afi af3l 4afo a5fo. a2foe afon4d af3op af5org af1r af3s4 afs2c af5se 3afsl 3afsp aft4a af5tr af3ui 2afy 4ag. ag1a2d ag3af ag3a2m ag3ar ag3di a5ge. agee5t 4a5gen. ager4s ag3ex a4gil ag3ind a4g3ins agi5ot 4ag1l ag3of a4g3or ag4o3v a2gr ag4ra ag5rap ag3ru ag3sl ag4sle ag5slu ags2p ag3spe ag3spi ag1st ag3sta ag5str 2agt agu5a a2g3ui ag3u4r a2g3uu 2ah 4a1ha 4a5he ahe5ri a1hi ah3l a3ho ah5r ah5t2 a3hu a3hy ai5a2 ai4dr ai1e a1ij ai5k ail3m ai2lo a2in aio4 ai3ov ai3s4 ai5sc ai4s5l ai5sn ai1so ai1st ai5tj ai3tr aiu4 aïn4 aïns5 aïs3o4 2a1j ajaars5 aka2 ak3af ak3ag a4k3ar a4k3ed ak3emi ake2t ak3id ak3ink ak5is 1akko 4a2k3l a2k3n ak5ne ak4ni a3kof ak3on ak3o2p a2kr ak5ru 2aks ak4so ak5spe ak1st ak5to ak5t4w a2k3u4 ak1w ak3wi a1la a4l3ach al3adr a3l4ag a3lal a5lapr al3art 4ald a1le a5le. al3eff 2aleg a2l3el ale5ro ale5ste ale4tj a3lè al4fen alf3l al5fon alfu4 al2gl a3lie al3int alk5ei al5kle alk3s al4kui al5le al4mac al5me a1lo a4l3ol alo2n al3ou a4l3o4v 2alp al3s4ag al3san al3scr als5j al2sl als5li als5m al4sn al4s3oo al4stem al5sten als5tou altaar5 al3tha al4t3ro alt4st a1lu a2lui al3uit al3u4r alu2s5 4am. a4m3ac am3adr ama4f 4amag am3art 5ambt ament4j ame4ran ame5tj a2meu am4i 4amm am3oli a2m3o4v 3ampè am2pl am4ple am4sm am4s3o am4spr ams5te. a2m3ui a3nad an3alg an4a3n an3arc 2anc 4anda anda4d and5ank an4d3e4d an4dex 2andj an4dom an5d4ri and5roo ands5lo an4d3ul a4nem a3nen anen3i 4aner an3est ane3us 4ang. an4gan anga5p ange5st ang5le an2gr ang5sna angs4te aniet3 anij4 3anima an5ion a4n5isl ani5t 4aniv 4ank. an4kaa anka4n an4k3as an2k3j an4klu ank3of an2k3r a1no an3och a4n3oor an3ork ano3s ano3t4 a4n3ou ano5v 4ans an3san ans3cr an4seg an4serv an4sid an2so4 ans5or ans3pi ans5pir an1st an4s5te. an5stru an4tac ante4n an3th 2anti ant5sl ant3w 4a1nu a5nuf an3ui an3ur an3uu anze5s 2a1o ao4g ao2l a4om a2op2 aor5t a3os aos3p aos5t 4ap. a1pa a4pak a4pas ap3as. ap3ass a1pe ap5eten 4a1pi apij4t5j ap3ijz ap1j 2apl ap3le ap3li ap3lo a1plu apon5 ap3oo apo3p apo5sta ap3o4v 1appa 4appen 4apr ap3ra a3pre a4prem a5p4ris ap3ru ap2sa ap4si ap2s3l ap3sn ap4ste. 2apt ap3tj 2apu a2q 4ar. a1ra araat5j a4r3app ara3s4 ar2da ard3ac ard3ak ardo4 ar4d3om ar4d3op ar4d3ov ar2d1r ar4dra ard3re ar4du ard3w a1re 5a2rea a3reg a3rem ar4en are4no are3sp a3rev ar3gh ar2gl a1ri arie4tj arij3s ar3ins ark2 ark3ac ar3k4l ar4map arm3u a1ro a2r3ob ar3oge a3rok aro4ko ar3oog a2r1o2p a3rot arpi4 ar2s ar5sch ar3scr ars2e ar5see ar3si ars3l ar4sla ars5m ar3sni ar4so ar4sp ar5spo ars3ta ars5tal ar4s5tek ar4str ar4su art4aa ar4t3ak ar4tan art5ank ar4tap ar3tar 4arte ar4tei ar2th ar5tij 4ar4tj art5jesv 4arto ar5tof art5o4ge art5oog ar4t3o4v ar2t3r ar4tro art5ru art4sl art5ste a3ru ar3ui 4arw arwe3s a1ry 4asa as3ad as4ag as3ak as1ap a2sc as5ce 2ase a4sec a4s3eg aser5a ase5tj aseve4 as5ha asis1 a4sj as5ja as3ji as3k as5ka as5ki as3l as4lu as3m as5mi as3n as4ne as4ni 4aso as3ob aso2l aso4r as1p as3pl a4s5q as5sa 4assm 3assu a2st 4as3ta a4sta. as5tag as4tas as4tat as3te a3stek a3stem as5ten as3tè asting5sp as1to as3tob ast3op 4astr ast5rem as5tro. as4tu a1t ataart5j at1ac at3ade at3af. at3ank ata3s 2atek a5tell ate2n ate3no aten4t5r ater5ad ater5sl at4eu 2atg at3hu ati5ni a2t3j at4je atjes5 at5jesb at5jesh at5jesm at5jesp 2atm 2atn a2too at3oog atos5f ato3st at3rac at3rei at3rib at4roe at5ru at4s3a2 at4s3ec atsi4 at4s3id at2s3l at4slo ats5m ats3n at4sne ats3pr at2st at4staa at4s5tak at4ste. at5sten at5stij ats5tol ats5top. ats5trek at4t3u4 a2t3ui at3w aua4 au3ch au3co au5de aud4j 1aug au3na aun3t aup2 aur4 au5re aure3u 4aus au3so au4s5p au3sto au3t4 4aut. 1auto auto3p 2auts3 auw3a 4auz a4ü avast4 ave3c avee4 ave4n3i aven5sp aver3a ave3re ave3r4u 4avi a2vo 1a4von a5voo a5vor 4avy 2a1w axis4 ay2a 4azif ä3h ämme3 ä3r 1b 4b. 3ba baar5ste baar5tj ba4da bad3ar ba4d3r bad3s ba3g4h ba3gl 5b2ak ba4k3o4 bak4sp ba3lan ba4lar bal3dw bale4 bal3ev ba3lië bal4kl ba3lo bals4 bal3sf ba4me ba5n2a ban4k3a ban4kl ban4k3o ban4kr bank3w ba3sa ba4st ba2tr ba3tro 4bb bbe4l5ag bbe4l5ee bbe2n bben3a 4b1c 4b1d4 b5de bdi5a 3b4e be1a be3as be2au be3ch be5dwe be5dwi be5dwo bee4 beet1 be5g beie4 bei3s bei5tj be5ki be3k4l be1kw be3lar be5l4as bel5dr be3le be4l3ec be4lex bel5f be3li be4l5int bel3k bel4o be3lo5v bel3sc bel3sp belt4 bemen4s be3nep be5n4o be5ot be1ra bere5s4 ber4g5af ber4g5et ber4gl ber4gr ber4i be1r4o bero5v be3ru be3ry be1s4 bes5ac be4sh be4sje be3so be5sp bes5s bes5te. bes5ten. be5stie bet2 be3t4h be5ton bet5ren be3tw be5twi be3und beur4s 4b3f 2b1g 4b3h 3b2i bid3s bi2du bie4li bi4en bie4t3j bij5d bij3f bij3g4 bij5k4 bij1p bij1s2 bik4a 5bil bi3lo bil3s2 bin4dr bin4st bin4t3j bi5ob bi3ok bi5om bi3oso bi5ow bir3 bi4st bis5troo bi1tr bit4se bit4s3p 4b1j 4b1k 3b4l blad5ij 2b5lap b5led bles3 ble5spe ble2t3 b5lid blijs4 blij5ste bli2k 4b5loi blok5l bloot5j blu2s 2b1m 4b1n b4o bo4d3ec body3 boe4g3a boe4kn boe4ko boes4 boe3st boet5st bo3f4l bo2k bok3an bokje5 bok4st bolk4 bo2m3a4 bo2m3o bo5na bond2 bond4s5 3bone bo3no bon4t3j bon4t5o4 boot3j boots5te. bo3p2 bor4sta borst5o bor4st5r bo4s bos3a bo5sco bo5si bo5so bos5p bos5to bot3j bo4to bot3r bot4sp bot4st bo2tu bou5ta bouw5s bo3v bove4 4b1p 3br4 braad5s bran4da bra5str brei5s4 brie4t brie5tje. bri4l bro2n bron3o4 bru2l 4b1s4 b2s5a b5sc b3si bsi3d bs5je b2s5la b2s5m bs5s b4stij 4bt4 b3ta b1tr bts5 3b4u buit4j bul4k bu4lu bune5t b5urb bu5ri bus5c bus3o but4a but3j bu2to but4s buts5te buur4tj 4bv 2b3w by3 4bz 4c. 1ca 3ca. ca3b ca1ch 5cada ca3do ca3dr cae3 ca3g2 cal4l3 ca3lo came5r ca3na cant4 ca2of ca1pr ca4pra ca5pri ca3ra car4u ca5se ca3s2p cas3t cas5tr ca3ta cate4n ca3t4h cau3 cau4st ca3v 2cb 4c1c cca3 cces5 c4d c5do 1ce 3ced cee4 3ceel 3cel cel3d celes5 ce5li cel5k ce4l3o 2ce3n4a 2cene ce3no 5cent cen4t3j ceo4 ce3ra cer2n ce5ro cer4t3r ce2s ce3s2a ce5sc ce3s2h ce3sta ce3s4ti cesu5r ce3ta ce4t3j ceto4 cet3og cet3oo 1cé c3g 4ch. 3chaï 5chao 3chas 1chau 5chauf 2chc 1chef 5chef. 5chefs 5chemi 5cheq che5ri che3ru 5ches che3us 1ché 5chir 4chn 2chp 5chromo 4cht 4chw 1chy 3ci ci5ab ci3am cie3k cier4s5 ci1eu 5cij 5cil ci5le cil3m 4cind ci3o ci5om 5cir ci3t2 ci5ta c3j c2k3a c4k3ed ck3ef cke5re c5k4et ck3id c2k3l ck4le c2k3n c2k3o4 c4k3r ck5se ck3so ck5st c3ky 1c4l cla2n cle3u 5clu 2c1n 1co co3ad co3d co4i coin5 co3k4 co3la 5com 5cond con1g 2co1no 5cons 3con5t4 2coo 2co1p2 3copa 4copi cor4dr co4rel co5ri cor2o 5corr cors4 co3ru co5sc co5se co5sp co3th co3tr 5coun 2cout co5v c3p4 1c4r2 3cras cre5d 2crip 3cris cro5f cro5k croo3 cro5v crus5 c3so c3sp c3ste 2c1t ct3act ct3ad ct5c ctee5t cte2n3 c2t1h c2t3j c4t3of c3tol c2t1on ct4or ct3rap c4t3re ct3sl ct3sp 1c2u cu5d4 cu3en cu3és cui5s cui2t cuit5e cu3k4 cula5p cu3ra 5cur3s cus3o c3w 1cy 1ç ça4o 4d. 1da 3da. 3daag d4aal d3aap daar5e 5daat 4dabo 2d3acc da4ce da5den 4dadr 3dae 2d1af 3dag da2g3a4 da3ge da4g3ed da4g3e4t da4g3on da4g3r dag4s3t da2gu 3dai da3ï da3ke da4ker 2dakk da4k1r 4dala d3alar d3alc da3le 4dalf da3li 2dalm da2l3u d4am dam4a da5mac d3a4mat d2a5me4 dames3 dam4pl 2da2na dan3as dank3l danoot5 dan4si dan4sm dan4s3p dan4st dans5ta 4d3antw 2d1ap 4d3a2pe 5dapu da2r3a d3arb 3dare 3dari dar4mo darm5on 3daro dar3s dar5st 3das3 5dasa da3stu 3d4at da3ta dat5j 4d5atl 4d5atm da2t3r 5daue 4d1aut 3dauw 2db dbei5 dbou4w5i 2d5c 4d3d4 ddags4 ddag5sp ddel5ev dde2n dden5a ddera4 dder5al ddere4 dder5ee dder5ep dder3o ddi3a d5dles d5do ddo3p 1de 3de. de2al de1ch d4e5den 5dedir de4dit dee4g3 dee4l deel3i 4d3een dee4r 4d3eff de3g 4d5eg. 4d5egg 2d5egy 2dei d3eie d3eig d3eil d1eis d3eiw 5dek de3ke dek3lu dek3w del4aa del5da del5dr del5eek 4d3e4lek 4delem de4lev 4d3e4lit del3k del2s del4s3e dels3i del4so 4d3e4mai 2demh 5demi dem5ond d2en. den4ac den5ate den3ei den3e4p den3ev 4d3engt den4k5of de4noc den3o4r den3sh den5str de3nu 5denvl de4o de5ofo de5ol deo4li deo3v de3rab de4r3ad der3a4g de3rak de3ram de3ran de3rap de3ras de4r5as. de4r5ass der2e der5ede der5egd de4r3ei de4r3em de5re4n de4rep de4ret de5rij de4r3im der3k4 der3on dero4r 4d3eros der4s3a der4s5om der5ste der5sto der5stra der5th 4d3erts der5tw de2r3u de3rup de2s de3sav des3m des3n des3p de3spe de5spel de4spl des5sm de3st des5tak de5stal de4s3te de4sti de5stic des5top de3t4 4d3e4tap de5tw deu4r3o4 de3us. deu4tj deve4 2dex 4d1exa 4dexp 3dè 2d1f 2d3g d4gaf dge3la dge2t dgeto4 dget5on dget5ov dge4tr dg4l 2d1h d5he dheer4 3d4hi. 1di di2a di5ae di4ak di4ano dia3s4 di4atr 5dich di4do die2f die4r3o di3esr die3st die2t diet3r di1eu 3dig di2ga dig5aa diges5 dijk3r di3jo 2d3ijz di2k3o4 5dil 2d3imp di5n2a 2d3ind 2dinf 3d4ing. 4d5ingel 4d3inj 4d3inko 2d5inr 2d3ins 4d3int dintel5 2d3inv 2d3inw 2d3inz di2o di5ofon di4ol di4one di4oni dio1s dio5sc 2d3i2ro 2d3irr 3di4s dis5ag di5se di5si dis4kr dis5p dis1t dis5tr di3th dit3j dit3r 5div 2d1j 2d3k2 4d3l d5le. dli4n dlot4s 2d1m 2d3n2 d5ne dni3s 1do 3do. do3a 2dobj 4d3obs 3d4oe 5doe. doe5d 4doef d5oefe 5doek 5doen 5doet 4d5oev 3doi d4ole 2do2li d4olin dolk5s 5dol5s 3d4om. 5domi do4m3o4 d3omr dom4sn 5domu d3omv 4domz 5don. d4ona 5done do5ni 5d4onn 5do3n4o do3nu do5ny 5donz 2dop do3pa d3opb d3opd do3pee 5dopj 4d1opl 3dopo d3ops d3opz 4d5org do4rië d3ork dors5m do3sp do3sta dot3j 5dou 2dov dover5s 3dovl 3dovo 2d3p dpren4 1dr4 3dra 5dra. d3raam d3raap d4rac d5race 5drach d3rad. d3rada 5draf 5d4rag d4rama d3rame 4d3rand 4drap 4dras 4d3raz 2dre 4d1rec d5reco d1red d2ree 4d3reek 4drend d4ress 4dret 3d2rev 5dreve d3ric dries4 5d2rif dri5ga d3rijd d3rijk d3rijm d3rijs 5d4rin 3dris 4d3rit 4d3roei d3roer 5d2rog 4d3rok d3roma d3rond 3droog 4droos 5drop 2drou 2d3ro5v 2droz drug4s d3ruim d3ruit 5d4ru4k 4d3rus 2ds d2s1a2 d4saa dsa4b d3sal ds4ate ds2ch d5schi dse2 ds3eco d4s3ed d4s5ee d4sef d4sei ds3eis ds3elf dse4li d5sen d4s3es d4set d2sh ds3ho d2s1i2 d4s5id dsig5a ds2im ds4ing ds5is d4s3j ds4jo ds5jon ds4l d1sla ds5las ds5lic d4s5lie ds5lim d3slin d2sm ds4mak d3smij ds5mo ds3n ds4ne ds5neu d3snu ds1o4 ds3ob ds3om d4son ds2oo ds3op d4spa d5span ds5pati d5spec d5s4pel d4s3pet d1spi d4s3pl d5spoe d5spok d5spor ds5s dst4 d1sta d5staat d4stab ds3tak d4s3tal ds4tan d3s4tat d5stav d3ste ds4te. d5stee d4stek ds4ter d4sterr d4stev ds3th d3s4ti d4stit d1sto ds5tram ds5trekk ds5ty d2su4 ds3ure ds3uu d1sy 2dt d1ta dtaart5j d1th d2tj d1to d1tr d1tu 1du 2duca 5due du3en du3et 5duid 5duif 5duik d3uil 2duit 4duit. d3uitd 5duite 4duitg d3uitv 5duiv du4n dun5i du2o du4ol 3durf 3durv 5du1s dut3j du5wen 2dv dvaat5 dvee3 dve5na dvies5 2dw d3wac d3was d3wat d1we 3d2wei d3wek d3wet d3wez d1wi 4d1wo d3wor d3wr 1dy 4d3yo dy4sp dy2s4t 2dz 4e. 4ea e3aa e1ab ea3bo e3ac ea4ca eac5t e1ad ea3da e5adem ea3do ead3s2 ead5sh e1af e1ag e3ai ea4k3o4 e1al ea3la e3ali e4als ea5mi e3an e4an. eang3 ean4s e5ap ea3pr e3aq e1ar ear2c e1as e2asc ea5s4e ease5t ea3so e1at e4at. eat3s eau3s4t e1av e3bo ebots5te. e5br 3ecd e3ce e1che e1chi echt5ec echts5o e3chu 4eck ec5le 4ecor 4ect ec3ta ec4taa 3ecz e1d ed4ag e3dam e3d4an e4d4as ede3a ed3ei. ede5le edem4 ede5nac ede5o ed4er e4d5erns ede5rog edi3al edi3am e5die 4edir edoe5tj e3d4oo ed3opv edors5te ed3ov e3d2r ed3rod ed3rol ed1s ed5se ed2sl ed4so ed5sp ed3su ed3uit e4d2w e5dwan e4e eea4 ee5b ee5ca ee5che ee2d3a eed4ac eed5as ee5de ee5do eed3ru eed3si eed3w ee2f ee3fa eef3ac ee3fi eef3l eef3r ee4gap eeg3l ee3i ee2k ee3ka ee5kaa eek3ak eek5all eek1e ee5ket ee3ki ee3kl ee4k3lo eek3n eek3re ee3kri eek3ro eek5st eek3w ee2l eel3a ee3lad eel4as. eel5d4u ee3le eel4ee ee3li ee5lij eel5k4 ee3lob eel3og eelo4ge ee3lu4 eel3ur eel3uu 4eem eema4 ee2n een3a eena4r een3e2 een5g ee3ni een5ie een5k ee5o2 ee2pa eep3an ee3pl eepo4 ee4p3re eep3ru ee2r eer1a eer3aa ee4rad eera4l ee3ram ee3ran ee3re ee4ree ee5rei ee4r3i ee5ric eer5k eer3og eer5oom ee3rot eer5ston eer5str ee2s3 ee5sch ee4s5em ees5et ee3sj ees5lo ee3sn ee3s4p ees5pl ees5pot ees5ten ee3stu ee2t eet5aa ee3tal ee3tan ee5te eet5h ee3tj eetna4 ee3to eet3og eeto4ge eet3oo eeto4r ee3tr ee4tro eet5rok eet3sp eet5ste ee5v ee5z eën3 e5ër ef3ad efa4z efde5l ef3do ef3ei e5fer 4efi efie4t efiet5j ef3ins e3fis5 e1fl ef3li ef3loo e3flu ef3om e3foo ef3op e1fr ef3rij e5fron ef3sf 4e1g egas4 eg3as. ega5sk eg3ebb e4ge4c eg3eig egel5ei. ege4l5ov ege4net egen5of ege4ra eger5eng ege4ro eger5on e3g4i eg3ijz egip4 egiste4 e2gl e4go. eg3org e2gos eg3oud e5graf eg3s4 eg5sle eg5so e2g3u4r egut4 e4g3uu e1h4 e5ha eheis5 ehit4 e2i ei5a 4eid ei3do eid4sc ei1e 4eien eien5s eie5re ei3f4 ei3gl 4eign e3ij eik4l ei3kn ei5kr eiks4 4eil. eil5ant 4eild4 eil5dr 4eile ei4lev eil5m ei2l3o ei4n3ab ei3n4ac ein4do eind5oo ein4d3r ein5gr ein5k ei2no ein5sl ei3o ei2sa ei5sha ei3s4la ei3slo eis4p ei3s4ta 4eit2 ei4too eit4s3 eits5c eits5n eits5te. eit5sten eits5tr eive4 4eiz e1j2 e3je ek3aan ekaart5j ekaat4 ek3af. e4k3a4g ek3al. ek3alt e5kam ek3ang ek4ee ek1ei e3kem e5ker. e5kers ekes3 ekes4t ekes5tr e3ket ek5eter e5kic e4kil e5kis ekla4m eklam5a ek3lev e5klim ek5loos ek4ni e3ko e4k3ob e5kof ek3oli ek3opz e5kor ek5os. ek5oss e5kran ek3roz eks4e eks5erv ek5set ek4str eks5tra ek5t4e ek3to eku4 ek3uit ek3ur ek1uu ekwet5ste ek3win e1la el3aan el5aand el1ac el4ade el3adj el3adm el3adr el3adv el1a4f el1al e3lan el5ana e3lap e5lap. e4lapp el3arb el3arc el3arm el3art e4l3as. el3asi e4l3asp e4l3ass el1au e4laut e3laz el5azi el4dec el4dr el4du e1le e3le. el3eeu el5eff e5leid el5eier el3eig el3ei5s e4lel 3e2lem el3emp e5l4en e3ler ele5r4a eler4s el3erv e3les eles4t e4l3eta ele4tr e4l3etu el3exc e3lé elfi4d el1fl elf3s4 el3gu 2eli e5lie e5lig eli5kw el3imp e4l3ind e3ling e4l5inkt el5inz 3elix el4kee elk3s el4k3u4r el4kw 4e1lo e5loep el3oes e3lok el3ol el3oms el5ond el5ont e3loo e5lood e5loos el3ops el5opt el5opv el3o2r el5org elot4j e5lou el3o4ve e5loz elp4o el4ps el4s5em el4s3k el5smed el5twe 4e1lu el3uit eluks5 2ema e4mana ema3sc ema5to emees5 emens5te emer4s emes3 emie4tj e5mok em3oli em3op em3org emor5sten e4mo4v em3sa em5sc em4sli em4sm em1st em3su em3uit emut4 en3aap e3naar e4n3aas en1ac e5n4acc en5af e2n1ak e2nal en3al. en3als en3amb en4ame e2nan e4n3ang en1a2p e5nari en3ars e2n3a2s enas3p e3nat ena4tel e4n3att en1av e2n3a2z enci4 3ency. en3da en5daa end5ama 5enderti en3d4o en3dr en5drek e2n3e2c enede4 e3nee en3eed enee5t en5eg. en5egg en3ela en3elf en3ema e4n3en5t e2ne2p en3epo e5nere 5energ e4nerv en3eta en3ete ene4ten e3neu 4enf en5ga en3gl en4g5le eng4r en5gri engs4 eng5se eng3sm e3nie e5nijd e2n3im e4ninga e4n3ink e3niv e4n3i4vo en3k2a e4n3och en3off e4n3oli e2n1on e4n3oor enoot5 e2n1o2p e3nor. en3ord eno3s en3ou e2n1ov 3enq en5sce en4sei ens5ein ensek5 3ensem ens4fe en4sin en5slak en4s3on en1s2p ens5pot en5stan en5sten enst5ijv en4stin en4stu4r en3su en4tac en5tee en5tei ente5re en4terv 3entè en1t2h en5tom ent4r en3tre ent5rol ent4sl ents3m ent4s3p en3tw e1nu e4n1ui e2nun en3ur en3uu 5envelo eny4 e3o eo3d eodo3 e5oe eoes3 e5off eo3fr e4o3k4 e5on eo5ni e5oo eo3pa eo3pe eo3pl eop4la eo3p2r e5ops eor5d e5org e5ori eo3ro eo3s4 eo5st e4ot eo5te e5o3t4h e1pa e3paa ep3aak ep3ac e4paf epa4k ep5ake e3pal e3pap e4p3app e3par ep3asp e1pe e5pe. ep5een e5per epers5te. e1pi 3epid ep3ijs ep3ijz ep5ingr ep3ins epit4s epits5te ep1j e1pl ep3led e4p3lod e5ploe ep3lus e1po e4p5o4ge epoort5j epoot4j 3e4pos. e3pot epou4 e1pr ep4ra e3pri ep5rode eprot4 ep2s ep4s5ee ep4ser eps3l eps5n eps3p eps3ta eps5taa eps5tal eps5to eps3tr eps5tro ep4tak ep2tj ep4tr ept3ra ep5tro ep3uit 4equa e3ra. e1raa e5raad e4raak. er3aan er5aanp e4raap. e5raat e4r1ac e5rac. e5race e5raco e3rad e5rad. er3ado er3af e3raff era4gen e1rai e4r3all er3ama er3ana e5randa e5rane e5ra3pl er3arc e3rare e3rari e1rat4 er3a4tr er3azi er3d2a er3d4i erd4o er3d2r erd5uit. er3d4w e1re er5eat 4erec er5editi er3een e5reep er5eers er3eet er3ef er5eff er5eg. er3egd er5egg er5egt er3eie er3eig er3eil er5eind ere3kl er3elk e4r3emm er3emp e3rend e5rendel ere4ne eren5eg er5enen. e3renm e3rent er5enth e5rento eren5tw ere2o ere4og er3epi er3e2q er3eri e3res. er3esk e3ress ere4st ere4t3j er3etn e4r3ets e4r5ex erg2l e3ri eri5ab e5rif e5rig erig5a er3ijl er3ijs e4rijs. er3ijv e4r3ijz e5rik er5ind e4r3ini er5inkt er3ins er3int e5rio e5ris erkeers5 er2kn er3m4i er5mo er5nu e1ro. e3rob er3oc e4r3oed er3oef e5roep eroe5tj er3oev er3of ero2g e3rok e1ro2l e5rol. er3oli e5roll er3om er1on e3ron. e3rone er3onv er3oog er3oor e5roos e4r3op erop3a ero5pen e2r3or er1ov er3oxi e3roz e3rö er4plu errie5tj er3scr er3sj er5slag er5span ers4pot er5stem er5te er3t2h er5t4i er5t4o er3tr ert5se erts5l er3t4u er3t4w e1ru e3rub e3rug5 e2rui er3uit erui5t4j e2run e3runs e4r3ur e3rus er5uu 3ervar 3erwt e4saf e4s3a2g e3sam e5san es3ap es3arr e3sa3s e3scop e3s2cr es4e e5sec es5een e5sel es5ene e4s5eng es5ex es2fe es5he e4shi e3sid e3sie es1in e4sir es5je. es5jes e3s4jo es5jon e4s3ka es5kr e3sl es4la e5sla. e5slag es3lak es5lat es4le es5leg es2m es4mui e5smuil. e1sn e3s4ne e1so e3sol es4oo es5oor. eso4p es3ore e1sp es5pas es4pel espit5ste e3spl e4sprie esp5riem es4sm e3stak e3s4tal e3stap es4tar es5tatie e4s3te. es4tea es4teel est5ei. e4steka es5tekam e3s4tem es5temo es3ten e4sten. es5tenb es3ter estere5o es5tes es4tet e3steu es4tic e4stie e3stot es5tra. es5trac es5trak e5stral est5rap es5trei est4sc es4tur e3sty e3su esu4r e3sy e1ta e3ta. et3aan et3ac et3ad et3afz 3e2tag e3tak e5tak. et4ana e5tand e2tap e4tapp e5tat e4tau e2tav e3te e5tea et3edi e5tek 4etel e5tel. e4t5elf e5tels et5emb et5emm etens5u eten5tj ete5r4a ete3ro eters5la eter5sm e5tes e1th et3ha et3hor et5hu e4t5i4d e5tie e4t3inc e4tiq e5tis e4tja e1to e5toc e3toe e5toev e3tol eto4p et3ope et3opl e4t3ork eto3sf e1tr et3rec e4t5res e3troe e5tron e5troo etros4 e4t3ru et4sl ets5lap et5slu ets3n et4s3oo et3spe ets3pr et3spu et4ste ets5tek et5sten et5sti ets4u et5su5r et5suu e1tu etui5tj etu4r et3we et2wi 1eua4 1euc eudi5o eu5dr eu3e eugd3r eu3g2r eu4ler eu4li e1um e3um. e2umd eu2na eun3t 1eu1o eu2po eu4rad eu4rec eu3ren eu4res eu4rij eur5k euro5v eur4sta eurs5taa eurs5te. eur4s5tr eur4su eu5sch eus4p eu3spa eu4st eu5str eu3tj eu1tr e3uu 2euw eu4wa eu5win euw4str evaar5tj eval4s evari5 eve4lo evel5op eve5n4aa 4ever eve3ra 4e1w e5wa e5we ewen4s ewens5te. ewest5r ew2h e5wi ewo3v 4ex. 2ex3aa ex3af 4exco 3exeg 3exem 4exi ex3in ex5op 1exp e3y4o eys4 ey3st e5za e3zee 4e3zen ezers5 e3zo ezz4 é3a é1d édee4 édi3 é1g égee5 é3h é3j é3n é3p é3r é1t è1 4èc è2l è2s è5t èta5 ê1 ê2p ê3per ê5t 3ë 4ë. ë2b ë3c ë3d ëe2 ëen3 ë3j ë1l 5ën ënce3 ën4e ëns2 ën5sc ënt2 ën5th ën5tw ë3p ë1ra ë1re ë1ri ë1ro ëro1g2 ëro3s ë2s ë3si ës3t ë1t ët4s ëts3te ëve5 ëven4 4ëzu 4f. 1fa f3aanb f4aat 3fab fa2bo f3acc face4 f1ach 2fad 2f1af fa3g fal3s fa3m f3ang fant2 fan4t3j fant4s5 2f3a2p f4arm 3fa5se fa2to fa3v 4fb fbe5dw f1c 4fd f3da fda4g f5dan fd1ar fde4k fdek3l fde4s3 fdes5e fdes5l fde5sm fdes5t f2d3in fd3of fdors5te fd4ra f3d4ru fd5se fd3si fd3so fd3sp f4d2w fd3wo 1fe fe2a fec4tr fede3 fe4del f3een 5fees feest5r fel5dr fe4l3ee 3feli fe4lom fe4l3op fel3sp fe3no f4er fe3rab fe3ran fe4r3et fe3rom fe3ron 3fes3 fe4t3j fetu5r 2f3ex 1fé 3fè 3fê 4f1f f5fe f5fi ffs2 ff3sh ff3si f3fu f3g2 fge3 fge5r4 fge5t 4f5h 1fi fi5ac fi4al fi3am fi3apa fi3apo fia4s 3fib fi1ch 5fie 5fig f3ijs 2f1ijz fik4st 3f2il fil4m3a film5on fi3lo 4find 3fini f3inj 4fink 2finr fi3o fi4r fi4s fi5se f5iso f1j fjes5 4f1k4 f3ke f2l2 4f3laa f1laf f4lam f3lei flen4st flens5te. f4les fle2t flet3j 4flev f4lex f3lez 2flie 2flij f4lik f4lip f4lit f3lok 3f4lor flu4t3 4f1m f1n 1fo 3fob 5foc foe5d foe5ta 2f3of 5fok 2foms fo5na fond5en fonds5l fon5eng fo1no 4font fon5te foo4 fooi5 f3oom 5foon 2fo4p fop5s4 f4or 3fo5re fo5ri 5form for4t3j fo1ru fo3t 2f3oud 4f1ov 3fö 4f5p4 fpers5te. fpits5te. fr4 f4raak. fraam5 5frac f3rad f2ras 5frau f1rec f3rek 5freq frie4s frie4t friet5j f4rik f4rod 4f3rol f4rolo f3roma frus3 4f1s f2sa4 fs3ad fs3an fs3ar f3sc f5sch f4scr fse2 f4s3ec f4s5ee f4sei f4s3eth fs4fe f2sh fs5he f2si f3sie fs3im fs1in f5slaa f5slac f5slag fs3lap fs2m fs3ma fs4mi fs3mo fs3mu f2s1o4 fs3ob fs3om fs4oo fs2p fs4pre fs4t fst3as f3ste fs5tec f5stell fste4m3 f4sterr f3sti f5stif f3sto f4st3oc f4ston f3str f3stu f3sy 4ft f1ta ft1ac fta4kl fta4p ft3art fter5sh ft3h f1to f5tond f4tont f1tr ft2s3l ft4sm fts3n ft4so fts3p f1tu ftu4r 1fu 2fuit fu4ma fum3ac 3f2un fur4o 3fus 2fuu 4fv fva2 fval3 4f1w4 3fy1 2fz fzet5 4g. 1ga 3ga. gaar5tj g4aat 2g1ac 4g3adm g4af. g3afd ga3fr 4g3afs 4g3afw 2g3a4h 4gal. ga3la ga4l3ap ga5ler gal3s 4gamb g4a3mi 3gan gan5d 5gane gan4s5t ga3pl 3gar. 4g3arb ga3re g1arm 3gars 2g3art gar5tj ga4s gas5c gas3i ga5sla. ga3sli ga5slo gas3o gas3p gas3tr gas5tra gast5rol 3gat gat5j gat3s 4gaut ga5ve g1avo 2g5b 2g1c 4gd g5dac g5dag gd3art gd3at gd5ate g3de g4d3elf g5der. gd3erv g4d3id gd3im g2din g3dr g5dru gd3sa gd5sp g3du 1ge 3ge. ge3a gea3dr gea5na gea3q ge4ari ge5au 4g3eb. 2gebb ge3c ge3d4 gedi3a ge4dit ge5dr ge5dw 3gee4 geest5r geet3a ge3f4 2g3eff ge5g4 gege4s 4geig 2g3eik gei4l5a 5geit geit3j ge3k4a ge3ke ge5ki ge5k4l ge3kr gek4st gek4u ge3k4w ge3lau gel4d3a4 ge3l4e 4ge4lem gel5f gel5k 5ge3l4o gel5si gel3sl gel3sp gel5ste ge5ma 4gemb 4g3emf ge5mo 2g3emp gems3 ge3m4u g4en. ge3nak gen4az 3ge3ne ge4n3ed ge4nend 4g3engt 3geni gen5k ge1no ge4n4of ge4nog gen5sfe gen5ston gen5stu genstu5r 5genw ge5om geo5pe georke5 ge5os ge5ot ge5p4 ge1ra ger5aal ger5aap. ge4r3a4l gera4p ger5ape ger5as. ge5reg ge3rem ge5ren. ger4i ger5ini ge1r2o ger4of ge5rol ger5slan ger4sli gers5lij ger4sp 4g3erts ge3r4u 3ge1s4 ge3sa ge3sc ge5se ge3si 4ge3sk ge5sl ge3sn ge3so ge5spend ge5sper ge5spo ge5stan ges5te. ges5ten. ge3str ge5sw ge3ta get4aa ge5tam ge2th ge5t4i ge3t4j get4o ge3tr ge5tra ge5tro ge5tru ge5tsj ge5tu ge5t4w ge3ui 5g4ev 4gex 5g4ez 1gé gédi4 3gè 4g1f gfijn5ste 4g3g4 g5ge gge3la gge4r5on gges5ti g4g5h g5gi ggings5 g5gl 2g1h g2het ght4 gh5te g2hum 1gi gids5te gie5ra gier4s gi1eu gi2f gif5r gi3ga 5gigere 5gigste 2gij g3ijs 4gijz gi2m gi3na 4g3inb 4g3inf g5infe g5infr 5ging 2g3inh gin3o 2ginr gi4oc gi2od gi4onet gi2or gip4st 5gir 3gis 4g1j 4g1k gl4 g5lab 3glai 1gla4s glas3e g5lat 3g4laz 3gle. g5leer glee5t g3len 2g5lep 4g5ler g3les 3gle4t glet3j g5lev g5lice g5lich 3glië g2lif g5lijs g2lim 3g4lio g2lob 3glof g5log 3glom 4g3lon g3loon g3lop 3g2los g5loz 3g2ly 4g1m gmaat5j 2g1n g3na gn4e gne5g gne5m gne4t3j gnie4tj 4gnu 1go 3go. 3go2a 3gob 2goc g1och go4d3a god4s3 gods5t 4goef goe1r 2gof go3f2r g4og 4goh go2k 5gom. go2ma g3oml 4gomz go4n3az 2g3ong go5no 2g1ont g2oo 2g3oor 3goot 2g1op go3pa g4opr g4ora 4go4re go5re. 5g4ori gor2s gos1 go3tr gou4d5ee 2g3ov 2g5p gpes3 1gr4 3gra 5gra. graat5j g5rak gra2m g4ram. gram3a g3ramp gra4s3 5grav 2g3rec 2g3red 5gredi g5redu g3reek g3reel g4reep g3reis 4g3rek 2g3rem gren4s gre4s g4reu g3rev 5gria grie4t5j g5rijd g5rijk g5rijm g5ring 5g4ris grit5s 2g3riv groet5j grof5 g3rok g3rook g3room groot5j 2grou gro5v 2g3rug g3ruim g3rup 4gs gs1a2 gsa4g gs5alar gs3alt g2sc gse4 gs3eco g4s3ed gs5een gs3ei gs3en gs5ene gs3erv gs3et gs3ev gs5he g2s1i2 g3sie gs5is gs1j g3s4ke. gs3l gs4la gs5laag gs5lam gs5las gs1le g3slep g4sleu gs5lie gs4lin g5sling gs4lo gs5log gs5lok gs5lon gs4lu g4s5ma gs3n g4sna g3snij g4s1o4 g5sol g5som. gs5ons gs3op gs3p gs5pand g3spec g3s4pel g3s4pet gs4pi g3spie g3spil g5spin. g5spinn gs5pir gs5pol g3s4pon gs5ps gs5q gs5sc gst2a gs5taal gst5aang gs5tac g5stad g5s4tan g4st3ap g5stat g1ste g5s4te. g5sted g5stee g3stei gs3tek g5stel g3sten g3ster g5ster. gs5terr g5sters gs3th g5s4tic g3s4tig gs5tijg g5stof g5stop g5stor gst3o4v g4s3tra gs5trad gs5trak gst5ram gs5trap g5strat gst5res gs5troe gs5tron g4stru g5struc g3stu gs5ty g2s1u4 gsver3 gs5w g5sy 4gt g1ta g2t3ap g3te gte3ro gtes4 gte3st g1to g3tr g1tu 1gu 5gu. 3gue gu4eu 2guit gu4ni gu2s3 gut4st guts5te. 4gv g5vo 4g1w g5wa 1gy 4gyp 2gz 4h. haams5ta haar5sl haar5sp haars5te haar5tj haats5te. h3afd haf4t3u ha3g ha5ge hal2f1 5hals hal4sto 5halz 2hamp 4han. han4dr hand5sl han3ga hang5l hang5s han4s3l han3so han4st hap2s hap4se har4ta harte5l hart3j har4t3o4 har5tre hart5sl hat5j ha2t3r hat3s ha3v 4have. 4hb 2hd h4e 2hea he2ar 3hech he3co 4hee. hee3g4 hee4k heek3a heek5l hee4l3o heep4s heeps5c heers5tak hee5sto hee5tjes he2f he4i heids5p heis4 hei5tj he2k3a he2kl hek4st heks5te. hek5sten hek3w he3le he4l3ee he3li hel4m3a helo4 hel4p3a hel3sm he5mo he5ne hen4kr he3n4o 4he5o he4pij he2p3l he2pr he1ra her4aa he4r3ad he3r4au he4r3i herm5eng he3ros hero5v her4p5aa 3herst hert4 herts5te he2ru he5se he2sp he2s5t hets5te. heu5le 2h3f 4h5g h3h hi5d hie4f3 hielsges5 hie4r3 hie5ren hier5u hie4t5o hie4tr hiet5s hij4sl hik4s5 hi3kw hil3m him4pl him4pr hin5d h3ins hin4t3j hi2p5l 2hir2 his5p hi3tr hit4st hits5te. hit5sten h3j 2hl h3la h4lag h3lep h3loc 2h2m h3ma h3me h4mer h1n h2na hno3 2ho. ho3a hoa3n hoboot4 ho3ch hoe4ker hoe4s hoes5l hoe3t ho2f hof5d hof3e ho3g2 ho2ka ho5mo hon3dr hond4s hon3g honi4 ho1no hool3e 4hoom hoort4 hoor5tr 2hoot ho3pa ho1pe ho2p3o hop3r hop4str hor5de 5horl ho3ro hor4st hors5te. hor5sten hor4t3j ho3ru ho3sa hot3j ho3tr ho4t3re hot4st hots5te. ho3v 2ho4w how3o 2h1p hpi4 2hr hra4b h4re h5rea hri4 hro2k hrok3o hroot3 4hs h3sa h3sp h3st 2ht h4t1a2 ht3ac h3tal ht3ala h5tans h3te. h4t3ec ht4eco h2t3ee h2t3ef h2t3ei ht5em h3ten h4ten5t ht5entw hter3a hte4r5o h4t3esk h4tev ht5eve h5tevo ht3ex h2t5h h4t3int h2t1j ht1o4 ht5oef ht5op h4t1r ht5roo ht4sap htse4 ht4ser ht2si ht4sl ht5sla ht5slot ht3sme ht5smij ht4s3o ht3spe hts3pl ht3spr hts5taal ht4s5tak ht4s5tek ht4sti hts5tore hts5trekk ht1u2 ht3w hu4ba 3huiz hul4der hur4t5 hut3j huts5te. huur5s 4h1w hy4la 3hyp hypo1 4i. i1a i3aa i4ab i5abi i4ac i3ady i3ae i5ae. i2a3f4 i2a3g2 i3agr i3ai i5ak. i3ake4 ia4kem ia3kl ia3kr i3al. i4a3la i3ali i2am i5am. i3ami i3an ian4o ia3o i2a1p4 ia5pa i5api ia3sc ia5se ia3so ia4s5po ia3sta i3at ia3t2h i5atri iave4 i5ble iboot4 4ic i3ce 5i4cepa i1cha i1che ichee4t i1chi i1cho i3chr ick5l icos4 ic4t3op ict4s5c i3dam idde4r5a ide3a i4dee. ider4sp ider4st ides4 idi3a idi5ab i2di5o id4mak i3dok i2dr id3ran id3ru id2s1 id4s3a id4ser ids5i ids5j ids5l id4sm ids5ma id5s4mee id4s3o ids3ta ids5tak ids5tek id4stem id4sti ids5tr id3u4r id3uu idu3w id3w 4ie ie1a2 ie4d3ac ie3de ie4dro ied3w i1ee4 ieë2 ie3fi ie2fl ie3fle ie3fon ie4fr ie4gas ie3ge ie4g5ins i2ek iek3e4v ie4kl iek3li ie5klu ie2kn iek5ond iek4s5n iek4sp ie2ku ie3kwa ie5lan ie5lap iel5do iel5d4r iel4e iel5ei. iel5k iel3sc ie3ma iem3ov ien4dr ien3ij i3enn i5enne. ien3s4m ien5sp ien4sta ien4st5o ien4str ienst5ur ieo4 i4ep ie5pen iepiet5 iep5oog iepou5 iep5rel iepro4s iep3s4 iep5st iep5tr ie4pui ie5r4ad ier3a4l ie3ram ie3rap ier3as ie4rat ier5el. ier5els ie5ren. ie5ring ierk4 ie3r2o ie4rof ier4sl ier5slu ie3ru ier4ui ie3sf ie2si ie4sl ie5sle ies3li ies3m ie2s3n ie2so4 ie4s3pl ie3sta ies5te. ie5stel ies5tere ie3sto ie4taa ie5tal iet5ant ie5ten ie3tj ie3to4 ie4t3og ie4too ie4top ie4tor ieto5re ie4t3ov ie5troe iets5te. iet3ur iet3uu ie3twi i3ety ie2u ieu3k i1eur ieu5r4e i1eus ieu3sp i1euz ie3v ie3z iezel5a i3és i1ét i1è i4ëg i4ëva 4if if3aa if3ad if3l if3r if4ra if4taa if4tar if4tre iftu5r if3ui ig4a ig3aa ig5ac i5gal i4g5av i3ge ige2s ig3esk ig3ij i4gind igi3o ig5no i3g4om ig4op igs4 ig3sk ig3sl ig3sp ig3sto ig3un i1h i3i i5ie ii2n i5is i2j 4ij. ij5a ija4d 4ijd 4ije ij3ef ij3ei ij3el ij5e4n3 ij1er ij3i 4ijn ij3o4 i3jou 4ijso 4ijsp 4ijst ij5te ij4tr ij5u 4ijvo 4ijzo 4ik ik3aar i4kam i3ke ik3ef ike4ra iket3 i2kij i3kl ik3la i4k3lo i4k3lu i2k4n i4k5na ik5o2g i3kom i2koo iko2p ik3ope ik3ord i4kr ik3re ik3ri ik3ro ik5se ik5si ik3s4l iks3n ik3sno ik3sp ik4spa ik1st ik5sta iks5te. ik1w ik5war i1la i3la. il4aa il5aan il3ac il4act il3ad il3af i3lak il3al i5land il2da il4d3r ilds4 4i3le il3een ile3l i4l3erv ile4t ilet5r ile3u il3e4ve ilevin4 i4l3e2z i3lé il5f i3li ilie5g ilie5t il3ink ilk4l ilk3s2 illa3s 1illu il2m ilme2 il4min il4mo i1lo ilo4ge il3ond i3loo i5loon il3oor il1or ilo4re ilo4ve il3s2h ils5j il4sti il2th i1lu 4im. i2mag i4mago im5au imee4 im3een i4m3em im3enc im3ex 4imf i2m3of im3op im3org im5pa im4s3oo im1st i3mu in1ac i2nau ind4aa in4dene ind3sc ind5ste 1indu in3e4de in3edi in3eed inek4 ineo2 inet4s i5neu 1inf in2ga4 ing3aa ing3ag ing3al 3ingan ing5lo in2go in4gr ing4st 4ini. i3nie ini5on ini5sl ini5sta 4inkj in2kn 3inkom in4kri 3inno i1no i3noc i3nod in4o2g in1on ino5pe ino3s4t in3ov 1inri 4ins. in5sch in5se in3sl in3smi in3so in1sp in5spo in5sten in5swi in4t3ap in5te intes5 in3th 1int4r i1nu inuut3 4i1o io5a ioas5 io5b i3o1c i3ode ioes3 io3f io3g2 i3ol i5ol. i5olen i5olus i3on ioneel4 i5ong ion4s3 ions5c i5oo i2op4 io3pa io3pr i3opt io3ra i3ori io3ru io4s i3os. ios3c i3o5se i3o5sf io5sh io5si i5osi. io5so io5sp io5s4t i5o5su i3osy i5othek i3oti iot3j i5otorens io3tr i2o3v i3ox i2oz i1pa i2p1ac ip3af i3pap i1pe i4perw ipe4t3j i1pi ip1j i1pl ip3lu i1po ipo4g i1pr i2pri ip3ru i4ps ipse4 ip4si ip4sle ips5te. ip5sten i3ra ira3k i1r2e ires4 ire3st i3ré i1ri irk4s i1ro iro3p iro5v ir2s ir4sc ir3sp ir5ste irt3r i1ru 4is i1sa i2saa i4s3ad is3a2g is3ap i2s1ar i2s3as i4sc i5scha i5schr is5col i5scoo i5scope ise2d i4s3ei is3ell is5eng i4s3erv ise3st iset3j is4fee is4fer i4sh is5ho isi2d i2sij i2s3im is3ja i4sk is3ka is3ke is3l is5lag is5las is5le i4s5m i4s3n is5ned is5nij is5no 5isol i4soo is4oor iso3s i2sot is3ott is3p is5pas is2pi is5pl is5q is5sa is5so i2s3t is1ta i3stak ist3ap i4s5tas is4tat is5terd is5tere is4th is1to ist5ong i3str is5tri i5stro. i3sty isu2m i5sy 4it i1ta it3ac ita5d it3een i3ten i3ter ite5rei ites4 ite3st ite4t it3hie it1ho it1hu it2i itie5st i4tj i1to it5oef it3oog i3t2ou i4to4v itper5st it3red it1ru it3sje it3sli it3sop it1sp its4te it4ste. it4too i3tu it3w 4i3u2 iu4m ium3a4 ium3e ium3o iu3r i3ve iven5s ive3re i5w iwi2 iwie2 iwit3 4iz i3ze ize3t î3 ît4 1ï 2ï. ï5a ï1c ï1d ïe4n3 ïe5nen. ï2n3a ïns5m ïn3sp ïn3u ï3n4ur ï3o ï3ri ï3ro 4ïs. ïs3a ï4sc ï5sche ïs3l ï3so ïs3t ï1t ï5z 4j. 1jaar jaar5tj ja3b 2jaf 1jag jagers5 ja3kn ja3mi jan4s3l jan4st ja3pl ja1po 1jar jare4 1jas3 jas5p 3jaw jaz4 j3b jba4l jbe4l3i j1c jda2 j2d3aa jd3an j4d3ar j2d3ee jde4n3e jden4s jdens5p j4d3erv jdes4 jde3sp jde5st jdi3a j2do4 j3dom jd5on jd3op j3dr j4d3re j4d1ri j4d3ro j4d3ru jd5sei jd3spo jd1st j2d3u jd3w j3d4wan jea4 3jeba je3ch jec4ta 2j1ee jel4 je3la j1en je2na2 je3n4o 5jep jepiet5 je3ro jers4 jer3sp je4s3 3jesa 5jesal je5sch 3jeskn jes5l jes5m jeso2 jes5pa jes4pr 3jesr jes5tr 5jesvo 3jeswa 3jeswi je2t jet3er jeto4v jet5st 5jeu 3jevr 2jew j3ex j2f1a j2f3ei j2f1en5 j4f3ij jf3ink jf3l j3f4lat jf5le j2f3o4 jf3r j3f4ra j3f4ro jf2s jfs3a jf4sc jf4s3er jfs5f jfs3l jfs5m jfs3n jfs3p jfs5pa jf3st jf4sta jfs5tak jf5stan jf4stel jf4sti jf4s5to jft2 jf5ti jf5tw j1g j3ge jger5sl j2g3l jg4s5e jg3sn jg2st jg3s4te j3h jif3 j3ig jin3g ji5t2j j3j 2jk j3ka j4kaa jk5aard j4kar jk3arb j4kau j4kav j2kij j2k4l j3klaa jk5lak jk5lap jk5las j4kle j5kled jk5les jk5li j3klon jk5lop jk5luc j2kna j2k3of j4k3o4l j2k3on j2ko4p jk3opb jk3ope jk3opl j3kops j2kr j4kra jk3raa j5kran jk3re jk3ro j4k5ru jk3slo jks3pl jk4sta jks5taak jks5taal jks5tak jk5stan j2k3ui jk3w j3k4was j1la j3laa jl5ana j1le j2l3ef j2l3el jl5f jl3ink j1lo j2loe j3lu j2m3af j5m4ar j3mi jm3op jm3s j2n1a4 j4naa jn5ac j3na5g jn3ak jn2am jna5me j3n4an jn5d2r j2nef jne4n j4n3erk j4n3erv jn3gl j4n3im j4n3ink jn3k4 j2n1o4 jn4si jn2s3l jns5lac jn3slu jns5or jn2sp jns3pl jn1st jn4ste. jnt4 jn3tr joet3 4joi jol4e jo5lij j3om 1j4on jone2 j3op jo3pe jo3ra jo3ru j4ou 1jour jou5re joy3 j3pa j4p3ac jp3arm j1pe j2p3em jp3ij j1pin j3pio jp1j j1pla jp3li j1po j2p3or j4pre jp3ri jp3rok jps4 j3r jraads5 2js js1a j4sef j4s3ela j5seli j4s5em j4s3e4r j2s1i js5in js4ir js4le js3lee js3li js5lie js4me js5mel js5met js3n j4s1o4 j5soe js3ol js3pac js3par j3spe js3pl j4spo js3poo jspoort5j j5spor j1sta j4star j2s3te j3stee j3s4tek j3s4tel j5s4teng js3th js4tij j5stond j4stoo js3tou jst5ran j5strok j2su j3sy j3taal jt3aar jt1ac j1tag j3tak j3tan j3te. jt1h j3toe jt3opt j3tr jt3ra j5tred j5tree jt3rei j5trek jt3ri j5trok jt3rot jt1s j1tu 1j4u ju3d 4jum jus3 juve5 j3v jve2n jver4s jvers5p jve3t jvie5s j1w jze4r5o 4k. 1ka k3aanb k3aanl 5kaart kaart5jes kaats5te. kabe2 ka3bo 2k1ac kade4t5 4k3adm ka3do k3adv 2kaf k3afd k4aff ka3fl 3k4aft ka4ga k3a4gen k3ah ka3i 2k3alb ka3le 5kalf kalf4s5 ka3l4i kal2k kalk3a 4kalt 5kalv 3kam 4kamb kamen4 kame4re kam4pa kam4pl kam4pr ka5naa kan5d 4kang kan4sl kan4st kan4t3j kao3 5kap. ka3pe kap3l ka1po 4kappa ka3pr kap3s k3arc k4a3ro kart4 4k3arti kar3tr ka4s kas5c 4k3asi kast3o4 ka3str kast5ra ka5stro kas3u4r kat5aal ka4t5a4le ka4tan kati4 ka4t5io kat5j k3atl kato4 ka4t3og ka5tr kat3s 2k1aut 2kavo 2k3b 2k1c k3ca 2k5d kdi3a 1ke k4eb 2k3ec ke4di 2k3een kee4p5l kee4r keer4s keers5to 2kef 4keff k4ei. k4eie k2eil kei3s4 kei5t ke4lap kel5da kel5dr ke5lel 4kelem kel5f ke4l5int ke4lom ke4l3op kel3sp 5k4ema 2kemm 2kemp ke4n3an ke4nau ken4ei. ke5nen ken5k ke2n1o kens5po kepie5t 4k3e4q ke3ram ke4r5enk ker3kl ker4kle ker4kn ker4k3r ker4ku ker4kw ker4n3a ker4no ker3o4 ke3ros ker4sm ker5spe ker4spr ker4sta ker5ste. ker4sti 4k3erts 4kerva 4kerwt ke2s ke3s4p ke3sta kes5ten ke3sto ke5straa k2et 5ketel ke2t3j ke3to ke2t3r kets5te. ketting5s 4k3e2tu ket3w 3k2eu keviet5 ke4vl 4k1ex 2k3e2z 2k1f 2k3g 2k1h4 k3ho khoud5s 1ki 2ki2d 4kied kie4sp kie4s4t kie5ste kie4tj kieze4 2kië kijk5l k3ijs 4kijv 4k1ijz ki3lo kilo5v ki3na 4kinb 4k5indel kinds5te. 4kindu kin3en 5king kings5l 2k3inh kinie4 k3inko 4k1inr 2k1ins 2k3int 4k3inv ki3o ki2p3l ki5se ki3s4p kit4s kits5te k1j 2k3ja k3jew k3jo 2k3ju 4k5k4 kke5nei kker4s kkers5ten kke3st 1k2l4 5klac k3ladi kla2p1 k4las 5klas. 5klass k3last k3lat. k3latt 3k4lav 3k4led 5kledi 5kleed k5leer. 4k5leg 5klem 4k5len k3ler. 4klera k3lers k3les 5k4le4u k5lic 4klid k3lig 2k3lij 4klijs k4lim kli4me 3k4lin k5lob 4klod 3klok 5klok. k5loka k3loke k3lood 5kloof k3lope 5klos klots5te. 2k5loz 4kluc 4kluih 2k1m k3ma 1k2n4 4knam k4nap 3k4nar 5knec k5nem kni2 5knie. knip1 4k5niv 3knol k3note 2knum 1ko ko4bl k4oc 2k5oct 4k1oef 5koek koe4ket koers5p koes3 koe3tj koets5te. koge4 5ko5gr 3k4ok ko5ko kol2e2 kolen3 2kolm 5kolo ko4ly ko2m3a 4komg kom5p k3omsl kom4str 4komz konge4 k4oni k3ontb kon4t3j kon4t3r koo4 2k1oog kooi5tj koot3 koot4j ko3pa 4kopb 4k3opd ko1pe ko5pen. 4kopg 3ko5pi 5kopj ko2pl 2kops 4kopz 2kord kor5do 2k1org 2k3ork kors5te. kor4ta kor4t3o4 kor4tr ko3ru 3k4o4s3 4k3os. kos4j ko5sjere koso4 4koss kot4st kots5te. 4k1ov 4k3ox 2k3p kpi3s k4plam kpren4 1kr4 3kra k5raad kraads5 kra4b 4k5rad k5rand 2k1rea 2k3rec 4k3rede k4ree4 k5reep kreet3 k3ref k2reg 2k3rel 2k1ric k3rijk k3rijp krij4t krijt5j k4rit k5ritm kroet5j 2krol k4ron kron3t 5kroon krop3a kro4to 2krou k3ro5v 3k4ru k5rub 5kruis kru4l krul5a 2ks k3sal ks3alm ks3an ks3ap ks1ar ks3as ks2e2 k5sec ks3ed ks5ei. ks3ep k4serv ks3et kse3v ksges5t k4si k5sil ks1in k5sis k5sit ks1j k1sla ks3lab k4slan ks3le ks3li k4smo ks3na ks3no ks3nu kso4 ks3om k5song k2s3pa ks5pand k4spar k1spe k3spi ks3poo k5spor ks3pot ks3pru k3spu ks5s ks4t k1sta k5staan k5staat k1ste ks5tec k4st3ed k3sten ks5tent kste4r kster5a k4sterr ks3th k3sti k3sto ks5ton k5stoo k4stop k5stot ks5trek ks3tri k3stue kst5uit k1sy 4kt k1ta kt3aan k3taar ktaat5 kt3ac kt3art k3te kte2c kt3eco k4tex kt1h k5tij kt3im kt3in k5tit kt3j k1to kt3om kto4p kt4or kt5ord kt5org kt5ori kt3o4v k1tr kt3res k5troll ktro3s k3tu 1ku ku5be kui2f 2kuit ku5k ku5me 3k4u2n 4k5uni 5kuns ku2r ku3ra ku3re kur3s 3ku2s kut3 2kû 2kv k3ve kven4t3 5k4waal 2k3wac k2wad k1wag 5k2wal 5k2wam 3k4war k5ware 4kwat k3weer 2kweg k1wei 5kwel kwen4st kwens5te. 4k1wer 5k2wes1 kwes5tr 5kwets k2wie k3wijz k4wik 2kwil 2kwin k3wind 4k1wo ky3 2kz 4l. 2laan 4laand l3aanh laa5re laar5tj laat5sta l3abon 2lac la4ca 5lach. la4cha 5lache lach5te lacht4s l4aci la2d5a la4det 2ladj 4ladm la2d3o 4la2dr lad5s la2du 4ladv 3lae3 2laf la2fa la3fl lafo2 4l3afs la2g3a la4gent la2go lag3r lags4 lag5sa la2k3a la4ki la3kr 2lal 3lald lal4o lam4p3j lam4p5l lam4po4 lam4s3p l4an 4la2na lan3ac 3land lan4da land5aa lan4d5oo lan4d3r lands5te. la4n3ec lanel5 5lange. lang5l lang5sp lang5sta lan4k3a lan4k3l lank3w 4lann la4nor lan2s lans3l lan4st lan4t3j lap3ac la3pi lap3l lap3o4 la5pre la2p3u la3q lar3da 2larm 4larm. lar5st las3a4 lase4 la2si las3to 5lastt la3te la4t3he lat5j la4t3ro 4lats4 lat3sl 2lau 5lauf lau4st l2auw la3v lava3 la4vo 5law l4az 4lazi la4zij 2lb4 lber4t lbert5j lboot4 2l1c lce4l5 4ld ldaat5 l2d3ac ldak4 ld3alf l4da4r ld3arc ld3ari ld3art l2dau ld3eco ldeks5 l4d3e4z ldi3a ld5oef ld3oli l2d3om l2d3on ld3oog l4do4p ld3opi ld3ord ld1ov l3dr l5drade ld3ram ld5rang ld3rat ld1re l5dree ld3rij ld3roe ld3rol ld3rom ld3rui ld3sa ld3sl ld3sma ld5sp ld5ste l3du ld3uit ld3uu ld1w le2a le4ane le3at leba4l lecht5st lee4 leeg3 leege4 leeg5i 4leekh lee5l leem3 3leen 4leep leep3o lees5e lees5l lees5po 2leeu 2leff lega5s leg3ec leg3l le4go le5go. leg5s 3leidi 4leier 4leig lei5tj leit5s le4ko4 4leks lek5str 5leld le2le 5leli l3elp le4n3a4d len3a4k 3lene le4n3e4m len5kw le2no len3op len3sf len3sm 4l3en5th le5o 4lep. 3le1ra le4r3a4k le5rei le4r3e4v ler5g4 le3r4o le4ron ler4sl ler5spo 4l3erts le2s le4sa le3sc les5et le3s4h les3m le4sp le3spe 4l3essa les3t les4ta les5taa le5s4tel le3str le4s3u le4t4h le3tha let4i le5tin le4top le2t3r le3t4re let4st lets5te. le2t3u leu3ko leum3a leur4o leus4 leu5ste 5leuz leven4s levink5j 4lexc 4lexp l2fac l3f4ag lfa3s l2fau lfe4n l4f3end lf3ene l2fe2z lf3li l3f4lo lf3lu l4fo l5foe lf3o4l lf1op lf5ord lf5org l5fou l1fra l3fru lfs5ei lf4sl lfs3le lf2s3m lf4so lft4 lf5ta lf5tw lf3uu 2l1g l5gaar l4gap lge4n5a l3gla l3g4oe l3gog l3goo lg3s4 lgse5 4l1h 1li li3ag li3am licht5st 3lid 5lid. 5lidm lid3s4 lie4g3a lie4gr lie3ka lie4sp lie3s4t lie4to li3eu 3liè 3lift l4ig li3go lijk3a lij4m3a 4lijmv 5lijn 4lijp 3lij2s lijst5a 4lijt 4l3ijz li5kr lik5sp li4kw li3kwi lim4a li3mi 2limp lim4p3j lin4da 4linf 4l3inh li5ni lin4k3a 3linn l3inna 2linr 2l3ins lin4t3j l3inv 4linz li3ob li5om li5o5s4 li3ot li2pa li3pi li2p3l li5see 2liso l5isw li1t2h lit3r lit4sa lit4sl lit4st lits5te. lit5sten 2lix 4l1j2 lk3af l4k3ank lk3arm lk3art l3ke l4k3ei l4k3em lken5e lken4s l4k3ep l3ki lking4 lk3laa lk3lag l5klas l4k3lev l5klim l3ko l5koe lk3ont lkooi5 lk3opb l5kor l5kou l5kra l2kre lk3rep lk3res lk3rij l2k3ro lk2s lk4se lk4so lk3son lks3oo lks5taa lk3ste lks5tel lks5tr l4k3uu l3kw lk3wi l3ky 2l1l l5la lla3d lla3g4 lla5tr ll3eig lle3k ll4el lleo4 ller5on lle3s4m lle5th llevie5 l3l4i l3lo llo5f l5lon ll3sh 2lm l3maa lmaat5 lm3a4ca lm3af lma5ï l3mak lm3arc lm3art lma3s2 lm3au l3me l4med lm3edi l4m3ep lme2s lme5te l3mi l3mo l5mog lm3oli lm3or lmro4z lm5sc lm3sh lm3su 2l3n lni4s lo3a 2lobj lo4boo loe4d5a loed3r 4loeg loe4gr loen4st loens5te. 4loes l3oeu 5loev lo4faa lof5d2 lof4s4 log4 log5l lo3go 5logr log2s3 lo4k3ar lo2k3o2 lo4kr lo2ku 2lo2l lo3la l3oml lom4p3j lom4p3l l3omt l3omv 4lomz 3lon. 4lond 5long lon4gaa lon4g3o lon4gr lon3o 2lont lon4t3j 3look loo5pi 3loosh loot3e lo3pa 4lopb l3opd lo1pe 2l3oph 2l3opl lop4la 2lopn lo3p2r 4lopt 4l3opv 4l3opw 2lor 3l4or. lo3re 4l1org lo3ri l4o1r2o3 3l4ors lo3ru lo3spe lost4 los5to lo4s5tr lo5s2u lo2ta lot3a4l lo4tet lo2t3h lot3j lo4tof lot3r lou3s lo3v 2love 3lo5z 4lp l1pa l3paa lp3aan lp3a4g lp3am l3par l3pas l1pe lpe2n l2pex l3pi l5ping lp3ins lp3j l1pl l3p4la l4plam l1po lp3of l3pom lp3on lp3ope l3pos l3pot l1pr lp3ram 4l3r lraads5 lrus5 4ls l4saa ls1a2d ls3a2g l1sam ls3an l3sap ls3as l2sat ls4cor ls4cu ls3eco l4s3e2d l4sef l5sen l4s3e2p lsge4st l3s2hi l3si l4s3im l4sin ls3inj ls3ink ls3int ls4j ls5ja l3s4kel l3s2ki l1sl l3sla l2s4le ls5led ls5lee ls5leg ls5len l2s3li ls4lin l3slo ls4maak ls4med ls4mee l3smid ls3na l3sne l3sno ls3nor l3soc ls3of l3sol ls3op ls3o4r ls1ov l1sp l2spa ls3pac l3span ls3par ls4pe l3spi ls3pli l3spoo l4s5poot l3spor l2spr ls3pra l1st l3sta l4staf l4stak ls5tak. l3ste l4stek l4stev ls4ti l3sto l5straa ls5trak l5strat l3stu ls5ty l2su l3sur ls3us l3sy 4l1t lt4aa lt1ac l4tam l5tame l5t4an lt4han l4t3hi l2t3ho l3thu lto4l lt3oli l2t3o4v l3tr ltra3s lt3rug lt3sl lt3sp lts5te. l3tu lu4b1 lub5e lub5l lu1en 3lui. 5luia 5luid luids3 5luie. 2luit luk2s luks3t lu3na 3lunc 2l3u2ni lu3sta lu3ta lut3j lut4st luts5te. lu3wi lven5s lvera4 l1w 1ly ly5i ly3st 4lz lzooi5 4m. 1ma maas3 maat5st m3act 2m3adv ma5esto m3afl ma3fr 2m3afs 4m3afw m4ag ma3gl ma5go ma3gr maï4 ma5ka ma5ke 5ma3k4r ma3kw ma3l4a ma5lac ma4l5ent mal5st 5m4an. man3ac m3anal man5da man5do mand4s 5m4ann ma5no 5man2s man4se mans5ee man4so mans3p man4s3t mans5ta man4th mant4r ma5pa ma3pr ma3q m4a5ri mariet5 5m4ark mar3sh mar4s5t mar5ti ma1so ma3s4po 5mass ma4ste ma3str ma5ta 5mater mat5j ma4tom ma3tr mat4st mats5te. ma3v 4mb m5bl mboot4j mbo5st mb4r 2m1c 2m1d m5da mdi3a mdis5 m3do mdo3p m3dr m3dw 1me me1c me5de 5media 5mediu mee5g mee3k4r mee5las mee3lo mee5re mee5ri 5mees meest5al mee5stov mee5str m5eg. me3g2a mega5s m5egd m5egg m5egt me4i mei2n mei5tj m2el me4l4as mel5as. mel5dr mel4ko mel4kr 5melo mel3s4m me4mi 3men m4en. me3na men4as meng5ra men5k me5nor 4menq men4s5uu men4t3j ment3w me5nu me3p2j 2m3e2q me1ra me4r5aak me4r3a4k me4r4am mer5ante me4rap me3rau me4rav mer3ei 5merk mer4kl mer4kn mer4kw mer5oc me5rong me3roo 4m3eros me3rot mer4si mer4sl mers5m mers5ta me2ru4 m4es me3s4h me4s4l mes5li me5slo mes3m me3so me4sp mes3pa me5spe me5spot me5stel mesto4 mest5ov me3stu me5ta5n me3t4h 3meti me5tr mets5te. meve4 m3e4ven 2mex 3mé 3mè 3mê 2m1f mfa3t mf4l mf3li mf5lie m5fo 2m5g mger4 2m1h 1mi 3mid 4mid. 5midd mie5kl mie3st 4m3ijs 4m3ijz mi3kn 5mili mi3lo mimie4 m3imp mi5nar 2minf 5ming 4minh 2m5inr 2m3ins mi5nu 4m3inw m2is mis5f mi2s3i mi3s4la mi4st mi5stra mis5tro mi3t4a mi1tr mit4st mits5te. mit5sten 2m1j 2m3k2 mkaart5j 2m3l 2m1m 2m1n m5na 1mo 5mo. mo3a 5moda 5mode moed4s 2moef 5moei moers5t moe2s moes3p moes4te mog2 5moge mogen4s mo3gl 4mok 5mole 2moli mo4lie mol4m3a 4molt 3mom 4m3omv mond3r mo5no 5mons mon4so mon5ta 3mooi 2mop mo3pa m1ope m4opp mop4s mo3ra mo3r4e mo3ro mor4sp mor4st mors5te. 5mos mo5sc mo4s5l mo3sta mo3t2h mot3j mot3ol mot4st mots5te. 2m3oud 5mouw mou4wi mo3v m3ox 2m1p mp3ach m4p3af m5pan mp3arm mp5arts m4p3ec m5pen m4p3erv mp3ins m3pl mp3lam m5plan mp3leg mp3lei mp3lev mp3lie m4plu mp5olie m5pon mpon4g mp3ope mp2r mp3rec mp3red m5pres m4ps2 mp5sc m5p4se mp3sh mp5su 2m1r 2ms m3sam ms3ana ms3ap ms2c ms3co ms3cu ms2j m3sje m1sl m2sle ms3len ms3lie m3s2m ms3ma m1sn ms3nee mso4 m3sol ms3or m3s2p ms4t m3sta m1ste ms5tec m5stel m5sten m1sti m1sto ms5toc m4s5ton mst5s m3sy 2mt m1ta mte5re mtes4 mte5sta m1th m1to m3tr m1tu 1mu mu5da mue4 5muilde. 2muit 2muk mul3p mu2m3 mu3no munt3j mu3sa mus5ta 5mut mut3j muts2 muts5te 3muu 5muz 2mv mvari5 mve4 mvee3 mver3e 2m1w 1my my3e 2mz mze4 mzet5 4n. 1na 3na. 3naal 5n4aam 4n1aan 2naap n4aar. 4n3aard 5naars naars5tr naar5tj 5naast 5naat n3abd 5nabe 2nac na2ca nacee5t n2aci 3naco 4n3act na5d4a nad4e 3nade. 5n4a5den 3nades 3nadi 4n3adm na5dra 2n1adv 5nae n3aë 4n1af na3f4lu n2a3g4 na1h 3nai 3naï n2ake na3k4l na3kr n3alb 3n4ale 5nalen 4n3alf n3alm 2naly 4nalys 3nam 4namb name5st n4ami n3amp n3a2na n3ank 3nant 5nant. 5nante n5antenn nan4t3j 2nap nap3ac 3na3p4l na3p4r nap3s nap5st 2n1arb 5nares 2n3arg narie5t 2n1arm 3naro 4nars nar4st nars5te. nar5sten 4n1art nas2 3na3sa na1s4l na1sp na3sta na3stu n4at. 3n4ati nat5j 4n3atl na3to nats4 nat3sp 5nau. 5naus 2na3v 5naven 3navi 3nazif na4zij 2nb nbe5st nbe5t nbots5te. 2n1c n3ce nces4t n3che ncht2 nch5tr nch3u n5co 4nd n5da. nd3aan nd5aas nd3abo nd3act nd5adel nd3adr ndags5p nd3alf nd3alm n4d3ana n4dap n2dar nd3art n4das nd3ass nda3st n4dav n4d3a4z n3de n4d3edi n4d1ei nde5laa n4d3emm n5den. ndera4 nder5aal nder5al nde4r5an n4d5e4rec nder5in. nder5og nde4ten ndi3a ndie4tj n4dijs nd5ijs. n4d3ink ndi3o n3d2ji n5do. n5doc n4d5of nd3oli nd3omd n4don n5dona nd5ond n5dons nd3ont nd3oog nd3ope nd3opp nd3ov nd5rap nd3rat nd1re nd4rek n4dres nd3rot nd3rug nd3s4cu nd4sec nd5set nd3s4i nd3sjo nd4sm nd3sp nd4spo nd4spra nds5taal nd3su nd3uit n2d3u4r nd5ure n4d3uu nd1w n3dy 1ne 3ne. ne5ac ne3am nebe4s 3neck ne2cl ne4dit ne3do n3edu ne5dw nee4 4need nee5k neel5d neel3o 3neem 4n1een nee5ri nee5se neet3a neet5o neet3r neet5s 4n1eff ne3g2 ne4gel negen5en nege4re 4n1ei 5neien n5eier n2eig 5neigd 5nei5t ne4k3r ne2la 4nelem 4nelf 3nem 4n3emb 5n4eme 4n3e4mig 4n3emm 4n3emp ne2n 3n4en. 5nenb 5n4end. nen5do ne4n5enk ne4ni ne5nig nen5k4 nen1o4 5nenp nen5t4a ne5oc ne5ok ne5om neo5p ne5os ne5ot nep3ag ne3pe nepi3s ne1ra nera4d 3n2e5re n3erfe 2nerg ne4r3id ne3ros ner4sl ner4sp ner4st ners5te ner3u ne3ry 3nes ness5a ness5t ne3sta nes3te nes4tei ne5s4tek ne4ter net3on net4si ne2u 4neum ne3ums neu5ste 2nex 3né 2n3f 2ng ngaat5j n2g1a2d ng3af ng3ana n4ga4p n2gar nga5sl n3gav nge4ad n4g3een ngels5te. ng3emb n5gen nge4rap nge4ras n4giger n4gigs ng3ij n4gind ng3ink n4g3ins ng4l ng5lad ng5lam ng5lan ng5led ng5leu ng2li ng5lin ng5lop n3goe ng3of n3goï n2g1on ng5oor ng5op ng3ore ng3org n3got n3gr ng3rac ng3rad ng3rai n4gras ng5rass ng4red n4g4ri ng5rie ng3rij n5gron ng3rui ng2s ng4se ngs5lop ngs5lu ng4s5ne ngs5tak. ngs5take ngs5trek ng5stri ng3uit 4n3h nhek5 1ni n4i2d nie5kle ni3eri nie4s3p nie4tr 3nieu ni4g3ee nig3ra nij3f nij3k 2n3ijz ni5kr nik4s niks3p 3nil 3nim. 5nimf n3imp 2n3in. n3inb 2n1ind 2ninf ning3r 2n3inh n3inj 2ninr 2n1ins 2n1int 2n3inv ni3o ni4on. ni4one ni5or ni5o5s4 nip3l 3nis ni4sau ni4sel ni4s3ev ni3sfe ni2s3i ni4sl nis5n ni3sot ni5stel nis5to ni3t2h ni1tr nits4 n1j4 n3je njes4 nje5sp nje5st nje3t 4n1k nk3aan nk5aard nkaart5j nk3af n5k4am n4k3arb nkar5s n4k3asp n3kef nk3eff nk3emp n3ken nken4e nker5ku nk3id nk2j nk3lad nk3lod nk3luc nk3lus n2k3na n3kne n4ko4g nk3oge nkoot5 nk4ra n4krim nk3rol nk5se nk5si nk3sl nk3s4m nk3sn nk4s5o nk1sp nk1st n4kw nk3waa nk3wez nk3wi 2n3l 2n3m4 n3n n5n2e nnee5t nne3ne nnepo4 nne4p5ol nne5te nnet4j nn4i nning5r nnoot5 nno5v 3no. 1noc 1no3d 2noef noen5s noes3 noet5s n5offi n3o2ge n5ogi 1nogr 3noï no3kl no3k2w no2li 1nolo 1nom 4n3om. n2oma n3oml n1oms n3omv 2n3omw 2nomz 3n2on. 3n4onb 3nonc 4n5ond n4o5ni 4nont 3nood 4n5oof 4n1oog nooi5tj 3noot3 noot4j 3no3pa no4p3as 4n3opb no1pe n1opg n5opleidi no4poo no4por 2nops 2n3opz 2nord no3re 2n1org 1norm 4norr 3nors 3norz 1nos no3sf no3sn no3sp 1not 3nota not5a4p 5noti not3j not3r 3nou. no3v 3nova no4ve 3nox 3noz 2n1p npers5te. npi4s5 npoor4 npoort5j n3ps 2n3r nraads5l n5re n5ri 2ns ns3a4d n3sag n1sal ns3alp n1sam ns3an n3sanc n1sap n3s4cal n5scho ns4ci n4sco nsee5t n4sef nse4g ns5ege ns3eis ns5emp n3si ns3idi n2sin n5sing ns3inj ns3ink ns3int n1sjo n1sl n5sla. n3s4laa ns5laag n5slag ns5lap. ns5lapp n4sle n5slep ns4let n5sleu n5slib ns3lie n5s4liep n5slim n5slip ns5lot. ns3m ns5mac n3s4me n3smij n3smol n4smu n1sn n2sna n5sne ns3nod n4snoo n4snot n1so n2s3ob n2sof n3sol n2son ns3ong ns3onz ns4opp ns4or n2s3ou ns1ov n4s3paa ns3pad n1spe n5spee n5spel ns3per n4spet ns4pi ns1po ns3pol n4spot n1spr ns5q ns5s ns4t n1sta nst5aang nst5aans nst3a4g n3stal n3ste ns5tec n4st3ei n4s5teko ns5teks n5sten. ns5tent n5ster. ns5tes ns3the n1sti n3stig n4stijv n1sto nst5oef n4ston n3stor nst5rade n5stree ns5trekk ns5troe ns5trog nst5roos ns5ty ns3uil n3sy 2nt n3ta n5taal n4t5aard ntaar5tj n5tab nt3ach nt4act nt1ad nt3aga n4t3art nt4as n5t4at n3te n5tec n4t3ei nte4lo n5tem n5te2n nte5nach ntene5ten nte5rad nte4rof n3tè nt3ha n4tho n5thol n5tig nt3inw nt4jo n3to nt4og nt4ol n4t5oli n5ton nt4oo nt5oog n4top nt3opl nt3opm nt3opt n1tr nt3rec nt3rei nt3rel ntre4s nt5ribb nt5rij n5troos nt4rou nt3rus n5try nts3a nt5slu nt1sn nt4sno nt1sp nt4spr nts5pre nt1st nt5ste n3tu n4t3uit ntu4n n5twijf n5t4wis 3nu. 3nuc 3nue nu3en nu3et 4nuf 2nui 4n3uil nu2lo 3num nu2m3a 5numm nu2n 3nunc n3uni 2nu4r 3n4u5ri nu5ro 1nus nu4s3o nu3tr nut4st 4nuu 5nuut nuw5a nu2w3i 2nv nve5na 2n1w nx3 n3xe nxo4 1ny 4n3yi 4n3yo 2nz nzet5s 3ñ 4o. 4oa o3aa o2ad o3af o1ag o3ah o3ai o1al oa2m o1a2n oa4tiev o3au o3av o3ax 2o3b 4ob. obal4 obalt3 3obj 1o4bli ob5oor o4b5o4r 4obr 4oca ocaat5 5o2cea o3cha o1che o3chi o3cho o3chr ocke4 4o3co oco3a oco3s4 oc3t4 od5ac oda3g ode4m5ar ode4mo ode5re odes4 odi3a o5dru od5sc od5sei od3s4i od2sl ods5lam od5slan od3sli od5smak od4s3o od3spo od4spr ods4t od5sta od4ste ods5te. od5stek od5sten od3w o4e oe5an oe3as oe2d3a oeda4d oede4n oe2d3o2 oe4dr oed3re oed3ri oed3ro oe2d3u oed3w oe3e oe5er oe4f1a 1oefe oe2fi oe2fl oef3la oef5le oef3lo oe4f5o4 oe2f3r oege3l oeg5ij oeg1l oe4gou oeii4 oei3n oei5s4 oei5tj oei3tr oe4kaa oek5erk oeke4t oe2k3l oe4k3op oe4k3r oe2ku oek1w oe4lap oe4lar oel5dr oe4l3ei oe3lem oel5f oelo4 oe5loe oelo5p oel3sp oe4m3ac oem3o4 oen3al oe5n4e oen5gr oen3o oen4sn 2oep oep5ind oe4pl oe5plo oe4p3r oe3pra oe4ps oeps3e oe2p3u 4oer oe1ra oe4raa oer5aal oe4r3a4l oer4e oer5ei. oer5eie oero2 oe3roe oer3og oer5om oer4sl oer4sp oer4sta oers5tak oers5te. 4oes. oe3sfe oe3si oe4sli oe4s3o4 oes4ta oes4th oe3sto oe4taa oe2t3h oe5t4i oe2tj oe4t3o4 oe5toe oe4t3ra oet4s3p oet3w 2oë of3ar of3at o4fav of4d1a4 ofd3ei of2d3o of2d3r ofd3w of3l o4fli o4flo 4ofo of3om o3foo of3op o3for of3ox of1r o3f2ra of5se of4sl of5sla ofs3le of2sp of3spe ofs3pl of3spo ofs3pr ofs3tr ofs5tra 4oft of4tu oft3ur oft3uu of3ui og5ac oga4l og3al. og5de og3di oge4d oge5laa ogel5ei 2ogem o3ger oge4ro oger5on oge4s3t 2og5h 1ogig og1l og5ne og3op og3sp og3sta og4st5ei og3sto og4ston og4str ogs5tro og3ui o3gy 2o1h 3ohm 4oi oi3do oi1e oi3j oi5k o3ing oi3o4 oi3s4 oi5sc ois2p oist2 ois5tj o3ï 2o1j 2ok o3ka. o3kaa o4k3aas ok3ab ok3ag o3kal ok3ank o4k3a4z ok3ef o2k4l ok5let o4kli ok5lu o2k3n ok3o2l ok3op. ok3o4pe okos5 o2k3ou o2k3r ok4ra ok1sa ok3s4l ok3sn ok5spri ok1st4 oks5te. ok5sten ok4s5tr ok5te okter4s oku4 ok3ur ok3uu ok1w ok2wi o1la o3l4ab ol3ac o3lal ol3a2p ol3arm ola3s4m 4old ol3d4o ol3d2w o1le o3le. ole5g ol1ei ol3eks ol3emm o3len o5ler oleu2 ole3um ol3exa ol2fa olf3l ol3fr olf5sl ol2gl ol2g1o olg5rap ol4gre ol4g3ri ol2g3u o3lia o3lic o5lid o3lik o3lin o5ling ol3int o3lit ol3kaf ol5ke ol2kr olk4s olk2v ollie4 o3lo o5loc olo3k ol4om o4lop ol3op. ol3opp olo3s4t olo4ve ol4pra 4ols ol5se ol4s5h ol5si ol1sj ol3s4l ol3s4n ol3so ol3sp ol5ster 4o1lu ol3uit olu4r 4oma om2aa om1ac om1af o3man 4ome o4m3ef om3ela omen4s omen5ste. ome5ren omer5kl ome5sp ome5t om2i o4m3int 4omm 4omo omo5l omo3s om4p5ei 5omro om3sl om4ste. om3ui 3omz on1ac on4ag o4n3am on4an on3ap ona3th 2onc on4d3ac on5d4as on5der ond5ete on4d3id ond5ijs ond5om. on2dr ond3re ond3ro ond5sj ond5slo on3d4u on4dur o5ne. o3neb o2n1e2c on3ei on3erf on3erv one3st 4onet. on1e3v ong5aan ong5aap ong3ap 4ongen ong5le ong2r ongs4 ong5se ong3sp ong3st on5id o5nig on4k3ap onke5lap on3k2i on4k3lo on3kn on5kw onnes4 onne5st o4n3of ono3l on1on o2n1ov on3sc ons4e on5sei ons2f on3s4m on2s3n ons5op on3sor on1s2p ons4pe on3spl on1st on5sten on5str 4ont. on4taa 3ont1h on4tid 3ont1s4 ont5sp 3ontv 1ont3w on1ui on3ur o4o2 4oo. oo3c 4oo4d ood1a ood1e4 oo5de. ood1o ood1r ood3sl ood3sp 4oof oo3fi oo4g oog1a oog3e oo5gi oog1r oogs4 oog3sh oog3sl ook3a oo3ke ook5l ook3s4 ook5st oo4k5w oo4l ool5a2 oole2 ool3ed ool5f ool5g oo5lig ool3ij ool3k ool1o4 ool1u oom5a4 oo3me oom3i oom1o4 ooms5te. 4oon oon5a oon5du oon3in5 oon5k4 oon1o oon5ta oo4p1 oopa2 oop5ee oop3o4 oop3r oop4sp oor3a oord5aa oor5dop oor1e4 oor3g4 oor5i oor5k oor5m oor1o oor3sm oor5ste oor5sto 4oort oor4th oo4s oos3a oo5se oos5n oo4t oot1a oot3es oot3h oot5o oot3r oot4sl o1ö 2opa o4p3ac op3ad o4p3af o4p3ak op3am o3pan op3and op3at. op3att 3opbre 3opdr o3pe. op3ee op5eet op3ei o1pel o3pen. 3o4peni o5per. o4pera op3e4te op3e4v 4opf o1pi o5pic op3i2d opie5t op3ijz op3in. o5pina o5pis 4op1j op3l op5los 1opn o1po opoe3 op1of o5pog o5poi o5pol op3ond o5poni op3ont op3ord op3o4re op3o4v op1r op3ric o4pru o4ps op5s2c op5se op5si 3ops4l ops4m op3sma op3sn op3so op3sp op3sta op3su 2opt 4opt. op5tr op3ui o2p3u2n o1ra or3ach or3act or3adm or1af ora4g o4r3alg or3ana o5rate or4daa or4d3as or4denv or4do ord5ond ord3or ord3o4v or3dr or4drad ord3w o1re ore5ad 4orec oree4 ore4no or2gl o1ri o5ria 3orië o5rig. o5rigere o4r3ink or3ins ork2a or5k4e or3kl or5kn or3kw or4m3ac or4mas or4m3ei or4n3ac or3ni orno3s4 or3oe o3rol or1on or3ont or1oo or1o2p or3or o3ros or5ov 4orp or4p3ac orp4s5c or3sag or5sc or5se or3sli or3smi or3so or4son or3sp or5s4pa or5spu or4t3ak ort5een or4t5ijl or2to or4tof or4t3oo or4tred ort5sp ort5ste or1u o3ry orzet5 2os o4sac o5sas o3sau 4o3s2c osca4 o4sci o5s4cl os3cu o5sed os4el o5ser os3f os4fe o4sha o3shi os2ho o3si o4sj os5jer. o4sk os5ko os3l os5li4 o4s3m os4n os5no o3s2o os3pa os3per os1pi os4pir o4spr os4s5m o2s3t os4ta os5taal os5taar osta3c ost3a4g os5tan os5tar o3stas o3stat os5te. os4tem o5steroï os4th os4to os5toli os5tou ost3o4v os5tra. os5traa ost3re ost3ri o3stro os5trum os1tu o3sty o3su o5sy 4o1ta ot3aar ot1ac ot3af o3tag ot3akt ot3app ot3art otas4 o5tat o3te ot3e2d o5tee. o5tees o5teg ot3ei ote4lan o5ten o5ter oter5sp ote4st ote4t ot3eta o1th o2t1ho ot3hu o4tj otje5sp otli2 o1to ot3off ot3olv o5tom ot3ont ot3opm oto5po ot3opr o5t4or oto3s 2otr o1t4ro ot3ru ot5s4i ot2sl ot3sla ots3li ot3smo ot3sn ot3sp ot4s3pa ot4ste. ots5tek ot5sten ot4stu o1tu ot3ui o3tul ot5w 4ou. ou5a ou1c ou4d1a ou4des ou2do ou1e oue2t3 ou3k4 ou4ren ou5ren. ou5renn ou2r3o2 4ous ou3sa ous5c oust4 ou2ta out3h out1j ou2t3o out1r out5sp out5ste ouw3a ouw5do ouw5ins o2v 2o3va o5ve. 2o5vee 3o4verg over5sp over5ste o5ves 2ovi ovi5so 4ovl 4o3vo 4ovr ovu3 4ow o1wa o1we o5wen ow3h o1wi ow2n o3wo ow3r o4x oys4 ozet5 ö3l ö1p öpe1 ö4r ös4 ös5t ö5su 4p. 4paan paar5du paar5tj 5paas 3pab p3acc 2pach pacht5s p4aci 5pacu 3pad. pa4da 4padv pa3e 4p3afd 1pag pag2a pa4gen pa3gh p4a5gi 3pak pa2k3a 4p4ake pa4ki pa4k5l 2p3alb 3pale pal3f pa3li paling5s palle4 palm5ac pal4mo pa4m pa3na pa4n3a4d 5panee 5panel 4pank pan5sp pan4tr 1pap pa4pe4t 5papi pap3l pa3po pa3pr 4par. 3pa3ra p3arb pard4 par3da 3park par4ka par4k5l 3parl 4parm pa5ro 4parr par5ta 3parti part3j 3partn pa5ru paru5r 1pa4s3 pa5sa pas5c pa5se pa5so pas4th pas5to pas5tr pa5te 1path p3atl 3pa3tr pats5te. 2paut 5pauz pa4vl 5paz 2pb4 2p1c 2p3d2 pe4al 4peci p3e2co 3pectu 1ped pe3de pe3do p4ee4 3pee. 3peeë pee5li 4peen 5pees 3peg 1p4eil pei4l3a 4peis pek5ee pe2k3l pe2k3n pek5s p4el pe3l4aa pe4l3ak pel5dr pe3le pe4l3ee pe4l3e4t pe3l4i pe3l4or pel5si pel3so pel3sp 2p3emm pe3na pe4nak pe4nap pe4nau pe4naz p3ency pen5d4r penge5 pen5k 5penn pen3sa pen5sl pen3sm pen5sp pent4 pen5to 2p3epi pep3o pep5s p4er. pe1ra pera3s4 per4at 3perc pe4r5eg pe5req 1peri peri3s per1o pe3ron pe5ros 3pers per4sm per5sti per4str p2ert 3pes pe3sa 3pet. pe5ta 5pe5ter 3peti pe4t3ra pets5te petu5 3peuk 5peut 1pé 3pê 2p1f 2p1g pge5s 2p1h4 4p3ha 3p4hec p4his 4pho pi3am pi5an pi4at 2pid piek5la 5piep pie4r3o pie4s3p pie4tj pi2g5a pi3gl 3pij. pij3k pij5ke pij4li 3pijn 5pijp pij4p3a 2pijz pi4k3l pilo5g pi5nam 2pind 3pinda 3p4ing 5ping. pin4ga pin5gri 4p3inj pink3r pink5s 4pinr 2pins pin4ta pi5o pis5n pis5ta pi3th pit3j pit3r pit4sp 2p1ja pjes5 p3ji p1jo 2p1k pkaart5j p2l2 p3la. plaat5j 2p3lad pla3di 4p3lamp 4p3lang p4lant p3lap 1p4las 3p4lat pla4t3r 5p4lay p4lec plee5tj p3leid 3p4len p3lep pleu5ro p4lex 2p3lig 4plij p4lom p3lone p5lood plooi5tj p3loon p3luie 2p1m pmans5t 2p1n p3na 3pneum 3po. poda5 3poei poe2s3 poes5t poets5te. 3poez 3poë p2ofa 3pogi po5gr po2k3i2 po4kol 1pol po5l4o polo3p pol4s pols5te. 1pom 2p3oml 3ponds pon4sm pon4st pons5te. pon5ta 5pony poo3d poo5de 4poog. 3pool poo5len 4poor. poor4tj poot3 po4p3a 4popd 2pope pop5h 2p3org 2p3ork po3ro p4ort 5portef por4to por4t5ra po3ru 1pos po1sa po3sf po4taa po4t3as po5te potes5t pot1j pot3r 3poul po3v 4p3p p5pa p5pe ppe4l3o ppe5ni pper5ste ppie5k ppij5p p4ps pr4 p2ra 3pra. p5raad praat5j p5rad 3prakt 4pram p5rand 3prao 4p3rap p4rat p4rax 4preeku 1prem p3remm 3prent pren4t5j 3pres p3reso 3pret pre4t3j pret3r 4pric 4p3riek 4priet prie4t5j 1prij 3prik 3princ pring5s4 5prins 3p4rio 3p4riu 5priv 5p4rob 3p2roc 1p2rod p3roed 3proef proet5j 3proev 5p4rof 5p2rog 1proj pro3la 3prom p3rood prooi5 pro5pa p4roq 3pros pro5sc pro4s5t pro3t4a 3proto 3pro5v 4proy pru2t prut3o4 2ps p3sab ps3a2g p3sak ps3ar ps3ass 4pse ps3erk p4s3et p3si p4s3i2d p4sin p5sis p1sl ps3le ps2me ps5mi p4s3na ps3neu p4sof p3sol ps3opt pso4r p1sp ps2pl ps3ple p1s4t p3stat p3ste ps5tent ps5tes ps5th ps3tor ps5tron p3stu ps5ty 3psy 5psyc p3sys 4p1t pt3ad pt3alb p3te p2t1h p5ti pt3j p4t3o4v p3tr pt3ric 1p2u 3pub pu3ch pu3e puil3o pul4st 3pun 4pun. punt3j 3put. puter5in put1j pu2t3o put3r put4st puts5te. 2pv pvan4 pvari5 2p1w 1py1 2p5z 1q 5qe qu4 que4s 5quo 4r. r2aa 2raan 4raand 3raar 5raar. 4r3aard 5raars raar5tj 2rac ra4ca ra3ce 5racl rad4a 3radb ra5den ra3di 5radia 3radio 4radm 4r3adr 3rad3s 4radv 2rafd r4aff raf5ond ra3fra 3ragez ra5gi ra3g2n ra5go rag4s 3rais raket3 ra3k4l rak5r 4r3a2la ra4l3ee 4r3alf r3a4lim r3alt ra4man r5ameu ra3mi r2amp 4rana ran4dr ran4g3o ran4gr r5angst. ra4nim 4ranj ran4kl rank3w ran4sa ran4st ran4t3j r3antw ra3o 4rap. ra3po 4rappa rap5roe ra3q 2r3arb r4a5re 4rarit 2r1arm 4r3arr 2r1art ra5sei ra4sk ra4sl ra1so ra2sp ras3po rast5ri r4ati rat5j ra4tom ra4tra ra5tri rat3sp rat4st rats5te. ra3t4u 2rau 3raus r1aut 5ravr ra4zij rbe4ti r1c r3ce rces3 r3chi r3co 2r1d r4d3act rd3alk rda2m rd5ama r3dan r2d3ar rd3ei r4d5e4las rden5dr rde5o4 r4derva rde5s4t rdi3a rdi5o rd5l r3do r5doc r4d3ol rd5olie rd3ont rd3oos rdo3pe rdo3v rd3ras rd3res rd5roos rd2ru rd3sa rd3s4c rd3so rd1sp rds4t rd5sta rd5ste rd3su r3du rd2wi rd5wo 3re. 1reac re4ade 4reak re3amb 4re5at re3co 3recr rec5ta 3reda 3redd rede4s3 4re4diti 3redu re5dw ree4k 2r1een ree3n4e r5eenh ree2p reeps5 ree5r4ad 4reers reer5ste r3eerw ree4s ree5sh r4ef 4refb 2reff 3refl re3fu 1reg 4reg. 4regd rege5ne rege4s 4regg 3regi re3gl 4regt 4reie 4reil 4reind rei5tj 5reiz re4kap 5rekeni re2k3l re2k5n re4ko re4k3re rek3sp re4ku re1kw rel4di rel4d3o reld3r re4l3ei rel5k re4lu4r 3rem. re4mai remie5tj re5mo5v 2remp 3r4en. re2na re4naa ren5aar re5nade re3nal re4n3an ren3a4r r4end 5rendee r5endert re5ne. re4nel re5nen. ren5enk ren3e4p re5ner. ren5erf ren5erv 5renf 2r1eni 5r4enkl r4enn re4noc ren4og ren4opl re3nov 5r4enp 4renq ren4sl r4ento r3entw r5enveer re4of re4op4 re5pa 3repet re4pie 4req re3qua 4r1erf 2r1erg re3r2o rer4s 2r3ert 4r5erv 2rerw re3sa re5se re4sl res5le res3m re2s1p res3t re4tem re3t4h ret4i re4tik re5tin 2retn re4t3o4g re4t3oo rets5te. re2u reur5es reus4t reu5ste 3revis 3revo 2r3ex r4f3aa rf3act r2f3a4g rf3al r3fas r3fe r4f3eng r1fl r4f3lag rf3lev r2f3li rf3lus r4f3op r1fr r4f3re r5frea rf2s2 rf3sm rf3sp r4f3u4r rf3uu r1g r4g3ab rg3amb r4g3een rg3ei rg4eis rgel5dr r5gen. rge4ra rge5rap r4g3ins r5glas r3glo r4g3lu rg4o3v r5grij rg3rit r3g4ro rg1s4 rg2sm rg5so rg4s5pr r3h ri5abel ri4ag ri2ak ri5an rias4 ri4av ri4bl 4rice ri3co ridde4 ri3di ri4dol ri4doo rie5dr rie4k5ap rie5kl rie3kw rie4la riel5aa rie4lei rie4ro rie4ta riet3o ri1eu ri3fl ri3fr r4ig ri4gaa ri3gl 5rigste r4ijl 4r5ijl. r5ijld r5ijlt rij5o rij3pl rij3pr rij3sp rij5ster rij4str 4rijv ri4k5l rik5n ri3k4o ril5m ri3ma rim4pr 4r3inb 4rind ri5ne 4r5inf r4ing 4r5ingan r5ingeni ring5l 4r3inh ri4nit rin4k3l r3inko 4rinkt r3inl 4r3inna 4r1inr 4rins r3inst 4rint 4r1inv ri5on ri3o5s ri4sam ri3sc ri3sot ris5to rit3j rit3ov rit4st rits5te. rit5sten 3ritt r5j4 rjaars5 r5ka. rkaart5j rk3adr rk3af r2kah rk3ang r4k3art r2k3ei rke4n rken4s rker4sl r4k3erv rke4s rke5stree rke5strer rk5iep rk3ijv rk3inb r4k3ink rkjes5 rk3lag r4k3lat rk5leid r2klo rk3loo rk3lus r3kn r4kne r2kob rk3olm rk3omg rkoot5 rk3opg rk3ord rk5os. rk5oss rk2r r5k4ran rk4ri r5kris r5kron rk1s rk3s4f rk5si rks4p rk4t5e4v rkt3h rk4ti rkt3o rkt1r rk3uit r1kwa rk3waa rk5wat rk3wee r1kwi rk3win r3l rlaat5ste rle4g3r rlink4s rlinks5te rlofs5 rlui5t4 r1m rmaf4r r4m3art r2m3eb r2m5eg rme4r3a4 rmes3 rme4t3j rmet5st rm3inh rmi2s r3mo r5moe r4mop rm3opm rmors5te rmos5f rm3s4a rm1st rm3uit rmun4 2r1n r3na r5n4am r4n3ap rn3ars rnee5t r4n3ene rnes3 rne5te rne4t3j r2n5id r2nin r2n1on rn3oor r5noot rn3ops r5not rn3ove rns4 rn3sm rn3sp rn1st rn3sta rn3th rn5tj rn5to r3nu rnu5r ro1a ro5ac r4oc ro1ch ro3d4o 3roe. 4roef 4roeg roe4g3r 3roem roens4 roen5sm roep3l roe4rei roet4j 4roev 3roë r5offi r4ofi ro3fl roges5 1roï ro3kl 3rokm rok3sp r4ol. ro2l3a role5st rol3g2 2roli rol3ov ro5ma ro3mo 4romz r2on. ron3a4d 5r4onal ron4da ron4d3o ron4d3r ron4d5u r2one r2oni r2onk ron4ka r2onn r2o1no r2ons ron4ste rons5te. 4ron2t ront3j ront3r ro3nu 4ronv 3roof 2roog 4roon 2r1oor root5ste ro3pa ro4paa ro4pan 4ropb ro1pe ro5pee ro4pin ro3p4la 4ropn r4opo rop5rak rop3sh r4opte ro4pu ror5d ro3ro ro3sa ro5se ro3sf ro3sh r4o5si ro3sp ros4s5t ro5stel ros5tra ro5te ro3t2h rot3j ro5ton ro3tr rot4ste rots5te. r1oud 3rou5t4 ro3v ro4ve ro5veri 4roxi 3roy r1p r3pa rp3aan rp3adv rp3ank r5pee rp3eis rpi3s r2p3j rp4lo rp5lod rpoort5j r4p3o4v r4p3rec rp3ric rp4ro r3psa rp4si rp2sl rp3sli rp5spe rp4s5to 2r5r rre4l3u rren5s4 rre5o rreu2 rri5er. rrie4t rron5k rrot4j 4rs rs3a2d rs3a2g r3sal rs3alm rs3amb r3san rs3ana rs3ap rs3ar rs3as rs4asse rsa4te r5schi rs2cr r4s3eis rsek5ste rs4et rseve3 r2s3ez rs4fer rs4hal r3s2hi r3s4hoc rs3hot rs3ini rs3int r4sj4 r5sjac r5sjou r5sjt r3s4kat r1sl r4slan r5slec r5slep r5sleu r5slib rs4lie r5sling rs3lob rs5loep r4s3loo r5sluis rs4m r5smaak rs5maal rs5mak r3sme r3smij rs5mis r5smit rs5mu r1sn r2s3na rs3neu r2s3no r1so r5sol rs3ong r2sor rsorkes5 rs1ov r1sp r3spaa rs3pad r4s3par rs4pare r3spe r5spec r5spee r5spek rs4pene r4s3pet r5spit r5spoe r5spog r5spon r5spoo rs3pot r5spraa r4spu r5spul rs3put r1s4t r4s5taak rst5aang rs5tas r5stat r3ste r4s3te. r5ster. r5sterk rs5term r5sters r5stes rste5st r4steva r3sti r4stit r3sto rs5toma r4ston rst5ora r3str rs5trap r4st5red rs5trei r5stren rs5trog rst5roz r3sty r3su rs3usa r3sy 4rt r1ta r5ta. r4t3aan rt5aand rt5aanv r4t1ac rt1ad rt3af. rt3aff rt3am r5tans r2tar rt3art r4tau r2tav rt5c r5teco rt3eig rt3eil rte4lei rt5emb r5ten. rte5nach rte3no rte3ro rtes4 rte5sta r2t5e2v r4tha rt1he r3ther rt3hi r1tho rt3hol rt3hu rt3hy rt4ij rtij3k r4t3ini r4t3ink rt5jesc r3to rt3off r5tofo r5tok rt3om. rt3ond r4t3op r5tori r1tr r3tra rt4rap r4t3ras rt3rec r5treden. r3t4rek r4t3res rt3ri r4t3rol r2t4ru rt5ruk rt5rus rt4s5eco rt5sei rt2s3l rt3sle rts5li rt4slu rts5m rts5no rt4soo rt1sp rt4s3pr rts5ten r1tu rt3ui4t rt3w rt2wi 5rubr rude3r ru1e 4ruf ru2g ru4gr r5uitr ru2k 4ru3ke ruk3i rul3aa rul3ap ru2li ru4l3ij ru3lin rul5s r2um ru2mi 3run. r2und runet3 4r5u2ni ru3niv ru4r ru5ra ru5re. ru5res r2u4s rus3e rus5tr 4rut rut3j rut4st ruts5te. 4ruu ru3wa rvaat5 rval4st rvals5te. rvers5te. rves4 rve3sp rvloot5 r1w rwen4st rwens5te. r4wh rw2t3j r3x r3yu 4rz rzet5st 4s. 5sa. s1aa 1saag 5s2aai saai4s 3s2aal 3s4aat 1sab sa3bo 2s1ac sa2ca 3sacr s1adv 2s1af 3safe 3safo sa3fr s5agg s4a3gi 3sagn sa3go 3sah 3sai 3saj 2sak 3saks s1akt s2al 5sal. 3sa3la 3sald 5salh s3all 4salm sal5ma s3aln 3s4a3lo 3s2ame 5samm sam5p 4sa2na sa3nat s4anc s2a3ne s4ant san4t3j sa2p 3sap. sa3pa 2s3ape sa4pr sa5pro sa3ra s1arb 3sard sa2re s1arm saro4 sar3ol s4ars 4s1art sart5se 4sas. 3sasa sa3sc 3s4ast 1sat 3sa3te 5sati 2s3atl 2s1att s3aud 1saur 3s2aus s1aut 3sauz 1sax 4s3b s5ba s5be s5bo 1sc 2sca 4sce 5scena 5scè 3s4ch2 4sch. sch4a 5schak 5schap 4schau 5sche. s5chec 4schef 5schen 4scheq 5scher 5schev 5schew s2chi 4schir 5schol 5schoo 5schot sch5ta 2sci 4scl 2sco 3s4cola 3scoo 3scope 5scopi 3s4co5re 3scout 2scr 4scris 2scu 2scy 4s1d s5de s4dh sdi5a sdis5 s3do s5dr s3dw 3se 5se. se2a se3ak se3al sear4 se3au s4eb 4s3ech se3cr 5sect 4secz s4ee 4s5eed 5seei 4s1een s5eenh see4t see5ts 4seev s1eff se3ge 2s5e2go seg2r 4s3ei. 4s3eig s4ein 5sein. 5seine 2seis seis4t sei5tj 5seiz sek4st seks5ten se1kw s2el 5s4el. sel3ad se4l3a4g se4lak se4las se3le 4s3e4lek sel3el 4se4lem 4self se5ling 4s3elit sel5k 5selm selo4 5selp 5s4els sel3sp 5selt se2l3u s4em se4m3ac s5emm sem3oo s4en 5sen. se4n3a4g se5nan se4net 5sengr 5senh sen5k se4n3o 4s5enq sen5tw 5s4er. se1r4a ser5au 5se3r4e se4ree se5ren s4erg 5sergl s5ergo 5sergr ser4i se5rij 4s3ern se3ro se5rop ser2s sers3p ser3st sert5w se3ru s4es se5sc se3sf 2s5esk 5sess se4t se5ta 4s3ete se5ti se3tj set3r se5t4ra set5st 4s5etu set3w se3um se4ven 4s1ex 4sez se2ze 3sé 3sè 2s1f 4sfed s5fei 4sfi 4s5fr 4sfu sfu5m 4s5g sgue4 s1h s4ha. sha4g s5hal. 3shamp 4she sheid4 sheids5 s5hie 5s4hir sh3l 4shm s3hoe s3hoo 3s4hop s2hot s3hote 3show s5hul 1si 5si. 5s4ia si5ac si3am si5an 5sic sici4 si3co 3sie. 3sieë sie5fr sie5kl siep4 sies4 sie5sl sie3so sie3st sie5ta sie5to si5è si1f4 5s2ig si5go5 s3ijv 4s1ijz 5sile 4s5imper 3simu 5sina s3inb 4s3inc 4s1ind 2sinf sing4 3sing. s3inga s5ingeni sin3gl s3in5gr s3inh 4si2ni 4s3inko sin5kr 4s3inm s4inn 4sinr 2s1ins 2sint 4s5inv 4s3inz 3sir 5siro s3irr si4s sis3e4 sis5ee sis3i sis5tr 3sit si5to sito5v si3tr si4tru si5tu 3siu 3siz sj2 4sj. 3s4ja. 5sjab 4sj3d s1je 2s3je. s5jeb 3sjee 3s2jei 1sjer sje4ri s3jes 3sjew 3s4jez 4sj5k4 5sjof 4s3jon sj3s2 sjt4 s5ju 2s1k2 skaart5j s5kad s4kele s5ken 3s2kes sk4i 3s2ki. 3skied skie3s 3skië ski5sc s2k3j s3ko s5kre sk5ruim sk3ste 4sku s3k4w s2l4 3s4la. 5s4laan 5slaap 4s5laar 4slab s4lac 4s3lad 3s4lag 5slagm sla4me s5lamp. s5lampe 4s5land 3slang 3slap 5slape sla3pl 4s3las 2s3lat 3s4la5v 4slaw 3s4laz s3led 3s4lee. 5sleep 4s5leer s4leet slee5tj 4s3leg 2s5lei s5leng s3leni slen4st slens5te. 3slent s4lep 4s5ler s5les sle4t3j 3s4leu s5leug s5leus 5sleut 2s5lev s3li. 4s3lic 4slid 2slie s5lied s3lief 3s4lier s3lif s5lig 4s3lijf 5slijp 4s5lijs s4li4k sli2m slim5a s5lini 4slinn s4lip 4s3lit slo4b5 2s3loc 3s4loe 3slof 4s3log s3lol s3lood s5loon s5loos 5s4loot3 s3los 3slot slo4tr 4s3lou 4s5loz 4s5luc 1s4lui 4s5lui. 4sluid 5sluis. sluis4t slui5ste 5sluit 5sluiz 4slun 2s5lus 4s3ly s1m 4s5maat 3smad 3smak. 3smal 2s5man s5map s4mart 4s5mat 4s5mec 5smeden 3smeed 5s4meet 4s5mei 4smelo 4s5men 4s5mes3 5smid. smie2 smies5 s4mij s5min 5smok s3mon 5smuilden s5muile 5smuilt s2n4 s5nam 5s4nap s4nar 3snau 3s4nav 3s4ned 3snee snee5t s5neg 5s4nel 2s5nes 4s5net sneus4 sneu5st s5neuz s3nie 1s4nij s5nim 3s4nip 4s5niv 4snod 3s4noe s3nog 2snoo s4nor. s3norm sno5v 3snuf s4nui 2snum 3so. so4bl so1c s3oce 3s4o3d 1soe 2soef 3soep soes3 2s1off 3soft 2so2g 3so3ga s1oge so3gl 3sogy 5soi 3soï 3sok s2ol 5sol. so3la so3le so3lis 3so5l4o3 solo5v 5sols s2om 3s4om. 5somm 2s3oms s3omv 2somz 5s4on. 3sona so5nar s3onb 2s1ond 2song 3sonn 3so3no s4ons 2s1on4t3 4s3onv s3onw 3soo 4s5oog 4s3ook 4s3oor. s3oord 4s3oorl 5soort 2s1op 3s4op. 4s5ope so3phi s2o5po so3pr 3s4opra sop4re s2orb s3ord 2s1or3g 4s5ork sor4o so3ror sor4st 3s2ort sos4 so3sf s4ot s3oud sou2l sou3t 2sov s1ove 3so5z 4sp. sp4a 5spaak s3paal 5spaan 5spaat 2spad 2spak 5spake s4pan 3spann 4s5pap 5spar. s4pari 5sparr 2spas5 5spatt s3pau 5s4pea 4spectu 3s4pee speet3 4s3pei s4pek 5spell 4s3pen s5pen. spe4na s5pep 4sper s4per. s5peri s4perm 5s4perr 4spes s3pez s3pid 1s4pie spie5tj 4spijn 4spijp s5ping 5s2pio s3pis spi5sto 2s1p4l 4s5pla s4plet s2pli4 5splin 3split s3plo s3plu sp4o s2poe s3poes 4spoë 4spog 4spol 2s3pom s4pon. s4ponn s2poo s3pop 5s4pore s4pori 4s3pos 5spots 4spou 4sprakt 5spray s5pred 5sprei s4prek 4sprem 4spres 5spreu 5spriet 4s5prij 4sprik 4sprob 4sproc 4s5prod 4sprof 4sprog 5s4pron s4proo 4spros 4s3ps 4spt s2p4u 4spub 5s4pui 4spun s4pur 5spuw s4q 4s5r sraads5l sro5v 4s3s4 ssa1s2 s4sco s4s5cu s5se ssei3s sseo4 s5si s5sl s4spa s5spaa ss5pas s5su s5sy s2t 4st. 5staaf 5staan. 4staang 4staanw staart5j s4taat staat5j st3abo 2s4t1ac 3stad 5stads 2staf 5staf. sta4fo s4tag s4tak 5staki 4stakk st3akt 4s3tali 5stam. 5stamm 3stamp 3s4tand stan4s s4tap 4stapo s4t3arc 4stari 2stas stasie4 5statio 4stau st3aut s4tav 4stavo 4s5tax 4staz 2stb 2st5c 2std 4stea 5steak 4stec s5tech 5steco 3s4ted 4stedu 3steek 3steen 4steenh s5teer stee5t 5stein 5stekar 5stekk 5steldh ste4lee st5elem 3stell 5stem. 5stemd 5stemm 4stemo 4stent 4stenu ste5ran 4sterm ster5og st5e4ros 5sterren s5teru 4ste4s 4s4t3ex s4t3e2z 2stf 4stg 4sth s4tha st3hed st5heer st3hek s5them s3ther st1hi s4t1ho s4t1hu s4t3hy 2stia 2stib 4sticu s4t3id 5stiefe s5tiev 4stijd 3s4tijg 5s4tijl st3ijs 3stils s4tim st3imp sti5ni 4stins 4s5tint 4stite 2stiv st3ivo 4s4t1j 2stk 4stl 2stm 2stn 2stob 2stoc 4stoef 3stoel 5stoel. 5stoele 4stoen 4stoer 4stoes 4stoez 3s4tof st3o4ge 5s4tok s4tol sto5li 4stoma 4stomz s4tong 3s4too 4st3oog stoot5j s4top st3o5pe st5opto 4stora sto4rat 4stord sto5ri 4s5tos s4tov 2stp 1s4tr 4stra. straat5j 4st4rad 3stra4f 5straf. s5trag 4strai 4st3rec s5tref 4streg 4s3trei 5strel 3strep st3rif st5rijp s5tris 4s3troe s5troep st4rom 5strook 5stroom 4stroos st5roos. 4s5trou 4stroz 3stru 4strui. 5struik 4st1s4 st3sc st5se st3sf st3sk st3sl st3so st5sp st5st 2st5t2 1stu 4stub 4stuc 5s4tud 4stuin stui5tj st5uitk 5stuk 2s4tun st3uni stu4nie 4stus 2stv 2st3w 2s4ty 1styl s5typ 2stz 1su 5su. 5sua 5su4b1 suba4 sub5e su5bl 5suc 5sud 3sug 2sui 5suik 4s1uit 5suit. s5uitl 5suits. 5suk 3sul 5sum 4s1u2n 5sup 5surv su4s sus3e suur5 4s5v svaat5 svari5 sve4r sve5ri 4s1w s5wo s4y 3sy. 4syc 3syn sy4n3e 1sys5 4s5z 4t. 3taak. t4aal t5aando t3aank taan4st t3aanw t3aap taar5sp 4t3aas taat4st taats5ta 3tabe 3tabl 2tac ta2ca 3t4aci 4tad ta4de t3ader 5tado t3adr tad4s3 t3adve 2taf. 2t3afd 5ta3fe 4taff t3afha t4afr ta3fro 4t1afs 2t3afw 4tafz ta4gaa 5tagee 5ta5g4l tag3r 5taka 5takg 5takken ta3kl 5takn 5takp 5tak3r 5taks t2al ta3laa ta5lact 4talb 5tale. 5talent ta3li 5talig t5allia talm3a 4talt ta4mak 4tamb t3amba 5tamen tament5j 4tamp t3ampu 5tan. 4t3a2na ta3nag ta3nat tan4d3r tan4k5r ta3o t4ape 5tapi ta3pl 5tapo ta3q ta3ra 4t3arb 5tari 4t1arm ta2ro4 tar5sp tar5taa t3arti 3tarw 3tas 5tasa 5tasj 5taso ta3s2p ta3sta ta3str ta3sy 4tata 4tatio tat5j 4t3atl 3tatr 3tau 4taut 2t1avo 3tax t3a2z 4t3b tba2l 4t3c t4ch t5cha t5che t5chi t5chu 4t3d2 tdor5st tdo3v 1te 3tea te3akt 5tea4m 3tec 4t3echt 4teco te4dit t3edu tee2 teeds5te. tee4g 4teek tee4k3l teem1 4tee4n t5eenhe 3teer tee5rin tee4t 4t3eeu t4ef t5eff 3tefl 3teh 4t3eier 4teig tei4lo t4ein t5eind 5teit tei5tj 2t3eiw 5tekene 5tekens 4teker 4tekk 3teko te4k3om 3teks te3kw te4k3wi t4el tel5ant te4lap tel5da 4telec 5teleco t5elect tel5een 5telef 5teleg tel5ei. tel5eie tel5eit te5lel 5telev 5te5lex tel3f tel5k te4loe te4l3o4g tel5oog te4l3op telo4r tels4 4telse tel3so tel5su te4l3uu t4em 2temb 4temm te4mor tem3ov 5temper 5tempo t4en ten4ach ten3a4g te3nak te5nare te4nau tene2 ten3ed ten3el tene4t 3tenh ten5k4 te5nore 4t5enq ten5scr ten3sn ten3sp tensu4 tens5uu 3tent 5tenta 5tenten. ten5to t3entw 5tenu t2er teraads5 te4r5aak ter3a4b tera5ca te4rad tera4de te4r5af ter3ag te3ral te4ran ter3ap ter3as 5terec te4rei ter5eik te4rel te4rem te5ren. te4r5enk te4r5env 4t4erf. 4terfd ter3fr 4t4erft te4r5in. 3terj 4terk. 4terkt ter3k4w 3term 5term. 5termi ter5oc te3rod te3rof te3rog 5teron te5rons tero5pe tero4r te3ros 5terrei 5terreu 5terror ter4spr ter5ste. ter5ston 3tes te3s4ap tes3m te3so tes3ta te5stel tes5ten test5op test5ri test3u te3ta te5tr 4t3euv t4ev t5e4van teve4r 5tevl 3tevr 2tex 3tex. 4t3exe 4texp 1té tè3 4t3f 4t3g2 tgaat5 t5ge tge3la tger4 4th. 2t1ha t3haa t4haan t4had t3hak t5ham t4hans t3har t3hav 5thea t3heb 5thee. 4t3hei 4t3hel 3t2hen 5theo 1t2her 5the3ra 4t3here 3thes 3thet t4hin 4thm t1hoe t2hog t3hok t1hoo thoof5di 4t1hou t3houd 5thous 4t3hov 3thr 2thu t1hul 4thum t4hur 3ti 5ti. 5tia ti5ab ti5ae ti3ap 5tib 5tica 5tice 5tici 5ticu ti3d4 5tie. tie5d4 5tiefs tie3kn tie4kon ti3enc tien5st 5tiep 5ties tie5s4l tie5ta tie5to tie5tw ti1eu 5tieven ti3fe ti3fr ti2ga tig5aa 4tigm ti4gu4 tig3ur 5tijd tije4 tij5ka tij4kl 5tijn tij5p t3ijs. tij3st tij3t2 tij5tr tij5tw 4t1ijz ti3ko ti5kr t4il 4tils 5timm 5timo tina4d tin3as 4t3incu 4t1ind 4tinf tin4g3i ting4sa t3inh ti4nit 4t3inj t3inko 4t3inl t3inq 4tinr 4t3ins ti3nu 4t3inv 4tinw ti5om ti3o4p5 t2is ti5sa ti3s4j ti3sl ti3so ti4son ti3s4p ti3sta 5tite ti3th ti1t2r 5tivi ti4vo 1tj2 2t1ja t5jaa t5jee t5jek t3jen t5jet 4tjeu 2tjo t1jou 2tju 4t3k2 tkars3 4t3l t5le. 5tleb t5les tli4n 4t3m tmen4st tmens5te tmos5 4t3n tna4m3o tne4r tnes4 5to. toa2 to3ac to3ar to5bl 3toc 1toch 3tod to3da t4oe toe5d4 3toej toe5k 5toe3l4a toe5le 5toelic toemaat5 5toen to5ende toe5pl 3toer 5toeri 5toern 5toe1s4 toe5st toe3tj 3toets 5toets. 5toetse toets5te. 3toev 5toez to2f tof5ar tof5d to4fr tof3th 3togn 5togr 3toi to4kan tok3s t2ol to3la 5tolaa to5le 5tolet t3olf 2toli 5tolic to4lie tolk5s 5tolo tolp3r t3oly 4tom. 5tomaa tomaat5 t3oml to3mo tom4p3j 4t3om5s 5ton. 4tond 3t2one 5tonee 5to5nen to5ner 3t4ong 5tong. 3t4oni 5t4onn to3no 5tons ton3sk too4m toom3e 5toon t4op. top5art top3as to3pen to3pet to3pi 2topm to4po to5pos t4opp to4pu to5pus t3opva 5tor. to3ra to4r3ag t3ord to5rec 5torens 4t1org t5orga t4ori 3toria to4rië tor3k tor4m3a toro4 to4r5oli to3rom 5torr 3tors tors5te. to3r2u 3tos4 to3sa to1sl to1s2p tos5te 5tota to3tr 2t3oud 3tour tou4r3e to3v tove5na to4vens 4toverg to3w4 4t3p4 tpe4t3 tpi3s tr4 3tra. 4t3raad 5tracé 5trafo. 3trag 4tragez 3t4rai 5train 5traka t3rake 3trakt 3trans 5transa 5trap. 5trau 4t3raz 3t4re. 4trea 2trec 5tred. 4treda t5redes 4tredu 3tref 4t5reg 4t3reis 4treiz 4trel t3rese t3resu tre2t3 t4reu t3rib. 5tribu 5trico trie5ta trig2 2trij 5t4ril tri5ni 5t4rio4 t3risi t3rit. 5t4riti 5trody t3roed t3roes 5trofy 3trog t4roï 5troj 4trol. 5trola 5trolo 5tromm 5tron. 5trona t5rond 3trone 5tronn 5trono 5trons tront5j t3rood 5troon t4roos tro5pi t4ros 5trotu 3trou 4t5rout tro5v 5truc. 5truf 4trug 5trui. 5truie t3ruim trui5t4 t3ruk t4rum 4ts ts3a2d tsa4g ts1am t3sap ts3as tse4d ts5een t4s3ei ts5eind t4s5ene t4s3eng t4s3erg ts5erge t4s3e2v t2sij t4s3ink ts3int ts2j ts3ja t3sjen 3tsji t1sl ts4laa t3slac t5slag. ts3lam t2s3le t5slib t5sloe t3s4lu ts2me ts4moe ts3neu ts4no ts5nor ts5not ts3nu ts3ob tso2l ts3oli ts3om ts1on ts4opp ts1o4r ts1ov ts3pad t3span t5spec t4s3pet t3spi t4s3pil t3spoe t3spoo t5s4por ts3pot t4spro ts4pru ts5q ts5s t3sta t4staak t4s5tank ts5tant t4star t4stas t3ste t5sted t5stee ts5teko t5stell t5stels t5stem t5ster. t4sterr t5sters t5s4tes. t5steu ts3th t1s4ti t3stij t5stijg t5stil ts5tin ts5t4j t1sto ts5toep ts5tong t4store ts5trad ts5trei t3stri ts5troe ts5ty t4su4 ts3ur ts3us ts3uu t1sy 4t3t t5t4a t5te tte5loe tte5l4op tte2n tten4t5j tte5ri t5tlet tt3oog ttop2 t5t4r t5tum tt3uu 3tua 3tub 3tuch 3tu3e 5tueu tu3és 3tuig 5tuin 4tuip 2tuit tuit4j 4tuk tu4k3i tul5pi t4um 5tune 5tunn tu1o 5turb tu3ri 3tu4s3 tut3j tuurs5la tu3wa 4tv tvaat5 t3ve 4t1w 3t4wijf t2win 1ty1 3typ tys4 4tz t3za t3zi t5zw u1a u3ac u3an ua5ne ua3p u5ar. uar5t ua3sa uat4 2u2b ub3ac ube4li ub5em u5bi u3bo ub5or 4uc u1che ucht5sl uc4ki ucle3 uc4t3a uc4tin u1d uda2 u5da. ud5am ud3ei ud3ess u4de4z ud3eze udi4o udi5ologe udi3om udoe2 ud3ond ud3oo ud3ov u4d1r uds5lo uds4m uds5ma ud3sme ud3smi ud1st ud4sta uds5tak ud4sti ud1w u3ec ue2co u1ee4 u3ef u3ei u1el u4ene u1er uer3il ue3st u1eu u5eul u3ez u3è u4f3an u1fl u1f4r uf2s u5ga ug4da2 ug4der ug2do ug4dr uge4l5o ug3ij ug1l u2go ug3or u2g1r ug5sce ug4sec ugs4p ugs5pa ug1s4t ugs5tra u1h u2i ui5ac ui2d3a ui2d1o uid4s uid3sp uid5spre uid5ste. uid3u ui3e uien4t ui2fa uif1l uif5r ui2fu 4uig ui4g5aa uig1l ui2g3o ui4g3r ui4gu 4uik ui2k3a ui4k3l ui2ko ui2ku ui2la uil5aa ui4l3em uil5m ui4l3og ui4loo uil3ov 4uim ui2m3a ui3mag ui4n1a uin5g ui2no uin5og uin3or uin4s5lo uin5to ui2p3l ui4p3o4 ui2p3r 4uis ui2s3a uis5c ui4sl ui5slu uis5p ui4st ui4t3a4 uit5aa uit5al ui5tar 1uitg uit1j 3uitl ui2t1o 1uit5r uit3sl uit3sn uit5sp uits5te. 3uitw 3uitz ui3v 4u3j 2uk u2k3al uk3as ukkers5 u2k3l u3klas u2k3n u2k3o u3koc uko2p uk4o3pl u4k3r uk3s2m uk3spa uk3spl uk4sti uk1w u1la ul3ac ulam4 ula4p ul4d3a uld5erk ul5dop ul4d3u u1le ule5sp ul3fl ul5fo ul3fr ul3in. u5ling ul3inn ul3k2a ul5ke ul2k3l u1lo ul3o2p u3los ul2pa ulp3ac ul4pi ul2p3l ul2po ul4p3r ul3sa ul3so ul2s3p uls5te. uls5tel u3lu um3af um3ar 3umda 2ume umee4 umes4 ume3st um3om um3op um3so um3st u2m3ui un3ac un2c unch3r un4dra und4s unds5ta und5ste une4t un3g 1univ un4k3r un4o uno3g un5o2p unst3a un4ste. unst3o un4st5r unst5ui un4tag unt5een un2tj un4t5o4 unt3s4m un4t3u u3ol u3on u3oo u1or uo3ru u3os uota3 4up u1pa u1pe upe3k upe4ro uper5st u3ph u3pi u1pl u4p3lei u1po u3pol up3om up3op u1pr up4tr u1ra ur3aan ur1ac ur3ada ur3adv u2r3a4r uras3 u4r3a2z urd4o u1r2e ur3ech ur3een uree5s ure5lu urelu5r u4rem ur3emb ure4n u3res ur3ess ure3st ur3eta 4urf ur2fa ur3gi u1ri uri4gl ur3ijz ur3ind ur3int 4urk urken5s ur4kie ur3k4l urk4s5t u1ro ur5opb ur3or uro5s ur5pr ur4serv ur4s3ev ur3s4fe ur2sl urs5laa urs5li ur4s5m ur2sn ur4sp urs5pa ur5spel ur5spor urs5take urs5th ur4sti urs5tik ur3ta ur4tro ur5troe u3ru ur3ui 4urv u1r4y 4usaa us3ad us3a2m us1ap u4sc u5s2cr use5tj u5sie u4sj u4s5l u4sm u2s5n uso2 us3oï us3os u2s3p us5pi us5pu us4ta us5tag ust3al u2s3te us4t3ei u4sti ust3oo us5tra. us5tre. us5tro us5tru ustu4 ust3ur ust3uu u1ta ut3aan utaar5 ut1ac ut3af u3tan uta3s4 ut5c u4t3ees u4tek ut3eks ut3em ut5emm uter5an ut3ex ut2h ut3ho u2tj u1to uto5f ut3oog uto3pe utop4l uto5po utop4r uto5s ut3saa ut3s2c uts5eng uts2m ut1sn ut3sp ut4spa ut4spo ut2st uts5tak ut4ste. ut5sten ut3str ut5su utt4 u1tu ut5w u4u4 uur3a4 uur3e4 uur5i uur3k uur1o2 uur5ste uur5sti 4uut uut3a uut3r uvel4s uve5na uw1a u3wag uw3ar uw5art u1we uw3ec uwe5d uw3een u2w3ei uwe4nen uwes4 u1wi u2w3ij uw5ijz u4wind u3wing u4wins uw3inz uw1o u3woe uwo4ge uw1r uw3u uxa3 u3ya 4uz uze3t4 uzie2 ût3s4 1ü ü4b ü1n ü3ri üs3l 1v2 2v. vaar4ta vaart5r va3de va3g4 va2ki va4kl va2ko va2l3a val5m va3lo va4loe val5si val4s5p vals5tek valu5 va2n van3ac vand4 vang3a van4gr va3no va4noc va1p va3re va5se va3s4o vast3r va3su va3te va2t3h vat5j va3z v4b 4v3c v4e 3ve. 5veb vee4l veel5e vee3p4 vees4 ve3g4h vei3s4 vei5tj 3vek 5vel ve4l3a4g vel4d3o ve3le vel3k 5vem vem4a ve4na ve5nare 5vend ven5k ve2n3o 2venr ven4s3e ven4sl vens5lan vens5lo ven4sp vens5taak vens5take vens5tek ven4s3u4 ve2r ver1a ver5aas ve4rad vera4g ve4rand ver5do ve3rec ver3ed ve3reg ve3rei ver5eis ve5ren. ve5rend ver3e4t ver5ijd ver5ijl ver5ijs ve5ring ver5k4 ver3o ve3rom vero5v ver5p ver5spe ver5sta ver5sto ver5tw ver1u ve3ry ve2s3 ves5ti ve2tj ve2to4 vet3og vet3oo ve3tor ve2t3r vet4roe vet5ste 5ve5z 3vi 4vicepa vid5st vie4r3a vie4s3 vies5n vie4tj vi3eu vijf5 vik4s vil4t3j ving4 vings3 vi3o vi5om vi4s3an vi1so vis5ot vis5p vi4st vis5tr vi1tr v3j vje4 vjet1 3vl v3lar vlei3s4 vlie4s5 vlot5s v3lov 5vo. 3voe voe4t3a voe4t3r voet5sp 3vog voge4 3voi vo2le vol4g3a vol4gra vo2li vol3ij vol5p von4det vond5u 3voo voo5d vooi5t voorn4 voor5na vo3ra vorm3a vors5te. vor5sten vos3 3vot vot3j 3vou vous5 3v4r2 vrei5 vrie4s vrij5k4 vrijs4 vrij5ste v3t vues4 vu2l vul5p vuur5s vy3 2w. waad3 w2aar waar5e waar5ste wa4b3 wa2ba wa5bl w2ad wa3dr w4ag wa2la wa3lan 4wam wan4d5r wan4gr wang5sl wa2n1o wan3s4 3wap w4ar w5arc 5ward war4st wars5te wart3j war4to wa2si wa4s5l wa4s5p was5tr 1wate wat5j wa3tr 3way 2wb w1c 2w1d w4doo wd3oom we2a 2we2c 3wed wede4 we2d3i we4d3r wee4ki wee4k3r wee3lo wee3s4t wee5ste 3weg we4g1a we4gerv weg3l we2g3o we4g5r wei3s wei5tj we4k3r we4le2 4welem we3li we2lo wel3s we2m wem3a we3me we2n wena4 wen3ad we3ne4 we4nem we5nen. wen5enk we3ni wen4k3a wen3o wen5to wer2f 4werg wer4ka wer4k5l wer4kn wer4k3o wer4k3r werk5ru wer4k3u4 wer4k3w wer4p3a wer4p3l wer4pr wer4s wer5ste we2s3 we3spo wes4t5o 3wet. we2th we2t3j wet4st we2t3u 2wex wezen4s5 2w1f w1g w1h wie4la wie4t w4ij 3wijd wij4ka wij4s wijs3l wijs3p wijs5ta wi4k 3wil wind3a win4d3r w4ing 2winr win2s winst5aa winst5r wi4t3h wit3j wi2t3o4 wit3r w1j 2w1k 2w1l 4w1m 2wn wn3ac w3ne w3ni w3no w3ob w2oe woes3 woest5a wo4l wol3a wolf4s5 woon5sf woor4d5r wor4g3e w1p wren4st wrens5te. 2ws ws3a2 w3sc w1sl w2s3le w3som w3sp ws2pl w4spr w5spra w1s4t w4stij 2wt wtes3 wtje5sp w1to w1tr wu2 wva2 w1w xaf4 xa3g xamen5t xan3 xan5t x1c x4e xen4d xe3ro x1f x1h xie4t xi3g xi5o xi3sta xi3sto xi4t3i x3l x1m xo3no x4op xo3s4 x1p xpre2 xpres5 x3r x3so x3sp x1t x2tak xtie2 x3w xy3 y1a ya3s4 ya4s5p y3at yba2l3 yber4t3 y1c ycho3 y3co y1d4 ydi3a y5dr ydro3 y1e yes3 y3és y3è y1f y1g ygu2 y1h y1i y4in y5is yksge4 y3la yl3al y3le y4l3et y3lo ylo3l ym2f5l ym5pa y3na yn3er y3no yn1t y1o y3on y3os yo3t y1p y3p4h ypo3 ypot4 yp3s yp5si y1r y3r4e y5ri ys3 y1s4a y3s4c y5s4e yse5t y3s4f y3s4h ys4i y3s4o y3s4p ys5pl ys4ta ys5tr y3sy y1t yt3hu yto3 y2tof ytop4 yu5a y3ui y3u2r yvari5 y1w4 1z 4z. zaar5t za3f2 zags4t za2k3a zak3r zan2d zand5a4 zan3di zan4dr zang3s za3po za3s4 4zb 4zc 4zd z4e zee3k zeel5d zee3r4o zeero5v zeer5s zee3s4 ze5ge zeg4sl zei3sp ze5k zel5dr ze3lem zel2f1 zel4so zen4d3a ze4nin zen5k zen3o4 zen4og ze3non ze4r3a ze3ro zer2s zer4s5e ze4s3 ze5sch zes5e zes5l ze5ste ze2t3a ze2t3h ze4ti ze2t3j ze2t3r zeve2 zeven3 4zf 4zg 2z3h z2i ziek3l zie4k3o ziek3w ziel4s zie5sl 3zif zi2g5a zij5kl zij3po zij5s4 zik2w zi4n3a4 zings3 zin4k3l zin4s zins3t zins5ta zin5str zi3o5 zipi3 zi4t zit3e zit3j zit3u4 4z3k 4z3l 4zm zodi5 zoet3j zoet5ste zo3f2 zoi4 zo5ie zo3la zome4 zo2na zon3sf zon5ta zooi5tj zo1p zor4g3a zor4gl zor4gr zo2t zot3h zo3tr zo3v 4z3p 4z3r 2zs 4z5t zui4d3i zui4dr zus3 2zv z4w zwets5te. 5zy 2z3z zz3in zz3or z4z5w", ["length"]=83148, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=12724, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nb.pat0000644000175000017500000057063511761001300024650 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-nb.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z å æ è é ê ò ó ô ø \patterns{ .a4 .aa4 .ab4ba .ab7be .ab6s5t .ac6tin .adel4s .ad8la. .ad6le. .ad2r .ad1s2 .af7f .af5t4 .af5f8u .ag6na. .ag6ne. .ag4r .ai2 .a6k .ak6ka. .ak6ke. .ak3kl .ak3kr .ak6ne. .ak6r .ak8sa. .ak4se. .ak6s3t .ak6ta .ak4te. .akte4r .akter5e .ak5tr .akva7 .a6l .albu5en .alfa3 .al4ge. .al5gi .al6ka. .al4ke. .al4kom .al4la. .al4le. .al5leg .al5lo .all5s6 .al4ma. .al8me. .al5m6in .al4na .alpe5 .al6s7k .als5o .alt4a .al4ta. .al5tar .al4te. .alt3o .al6ve. .am7b .a6me .am6ma. .am4me. .am4s4 .am6ta .a6n .ana3b .an4da. .an4de. .an5d4ra .an4d5ø .and6ø6v .an3er .anes5 .an4ga. .an3ge .an4ge. .ange4s .an4ja. .an4ka. .an4ke. .an4la. .an3n .an4na. .an7nal .ann4e .an4ne. .an5s8 .an4sa. .an4se. .ant2 .an4ta. .an4te. .an5tem .an5tep .an4ti. .an6tin .an4tis .an4tiv .ap8lan .ap1p6 .ap8t .arbi5 .ar6de. .are4o7 .ar4ge. .ar5ges .ari6a .ari8e .arie5ne .ar5ka .ar8ka. .arlan9 .ar4me. .ar7mea .ar4na. .ar3ne .ar4ne. .ar5nes .ar6ra. .ar6r7u .ar6ta. .ar4te. .ar3t4h .ar9ti .ar6va. .ar4ve. .ar4ved .ar4ver .arvi6 .a6s .as8ka .as4ke. .as5kese .as4le. .as6pa. .as5s .ast5ru .at4h .at4ki .at4le. .at4na. .at2o4 .at3s .atte4 .att6r .a5ty .au8de .au6e .au8ga .au4ge .au4ka. .au8le. .au4r .au6sa. .au6se. .aus9k .au4sp .avi2 .av7i6d .av7inde .av4la. .av4le. .av7s6 .b6 .ba6by .ba6la. .ba4le. .ba4ne. .ban4k3l .ba4re. .ba4ri. .ba8te. .be4de. .bede4n .be6d5ene .be4d5et .be8di. .be3e4d .be6ke. .be4la. .be9nar .be4ne. .be6ra. .be6re. .be4res .ber6ett .be8ri. .be7ska .be6sten .be4ta. .be6te. .be5t4v .bi6de. .bi6en .bi4le. .bilet5 .bi6t3r .bl4 .bla4d .ble4k3 .ble5k4e .blek4k3f .blekk3s4t6 .blekk9s8v4 .bling5 .bo8da .bo8de. .bogs8 .bok5 .bo4k4en. .bo8la .bon2 .bo4na. .bor6t5 .bort6e .bor8ti8 .bort9r .brudd7s6 .bruddså7 .bu6da. .bu3d6r .bu4et .bul4k5 .bus6sy .by6de. .by8ta. .bæ2 .bø6k5a .bø8nen .bø8ner .c4 .ca4en. .car4s5 .ca6se .ce6b .cos1 .co4st .d6 .da4ge. .da4le. .dags6e .da2m .da4ne. .da4ta .dau3s .deka9r .deko7d .de4le. .de4l5ei .del5s6 .de4mi. .demo7e .den5sl .de4re. .de4r5et .de4ri. .de6r3i4 .de7r4i5v .de4r5om .de8ru .de6s5m .de4so .de4sto .de4u .devi5s .di2a .di5e4l .di6er .di4et. .di9f6t .di4ne. .dings7a .di4sk .di8s3t .do4en .do4er .do8et .dome5 .do4ra .do6re. .drau4m .ds4 .du4a .du4en. .du4er .duft3 .du4ge. .duk3n .du4se. .du4st .dy4re. .dø6la. .dø6r3 .dø7r4a .dø7r4e .dø4ve. .då5ren .då7ret .e6 .eb4ba .ecu6 .ed4da .ed4le. .efo7 .ef4ta .efta5s .ef6ter .eg8de. .ege2 .ege5l .eg6ga. .eg4ge. .eg4gel .eg8la. .eg4le. .eg6na. .eg4ne. .ego7t8 .egs4 .eg8se. .eg5si .ei2 .eid5a .ei5den .ei4ga. .ei7ger .eik5a .ei4ke. .ei3l .ei3m .ei8ma. .ei8me. .ein7as .ei3ni .ein5og5 .ein5s6ta .ein8s7to .ei9rar .ei5res .eir9u .ei5te .eit9r .ekk4o .ek4le. .ek3li .ek6ne. .ek4r .ek8sa. .ek3se .ek8se. .ek4sp .eks6pi .eks3t4 .ek5s4ta .ek8ta .ek4te. .ek7to .el8da. .el4de. .el4g5r .eli5ne .el3k .el5l .el6s .els6a .els4kl .els6t .el6ta. .el6te. .elve7l8 .el6veg .em3b2 .emfa9 .em4ma. .em8me. .em6na. .em5p .en5a .en4da. .en4de. .end5r .en4ga. .en6gav .en3ge .en4ge. .en6g5r .engs6 .en6ka .en4ke. .en5og5 .en6sa .en4se. .en5so .en3sp .en5t .en6te. .ent4r .en6t5ra .ent8re .en3ø4 .ep6t .er8a .er4e .er4g5r .er4ke .er4la. .er4le. .er6ma. .er4me. .er4mek .er4na. .er6ta. .er4te. .es9ast .es1k .es3ka .es8ka. .es4ke. .es5l .es8la. .es8le. .es3p .es6pa. .es6r .es8sa. .es4se. .es4so .es5ta .es3te .es6te. .es7tet .es5ti .es6t6r .es7tu .et8la. .et8le. .et4na .et4ne. .et4s .et8sa. .et5s4e .et6se. .ets4i .et1te4 .et6ter5 .et6ti .euro5 .ev8ja .ev4je. .ev4ne. .ex4 .f4 .fa2e .fag3s4 .fa4ne. .fan3t4o .fe4e .fei8e .feil5i .fe2l .fela9 .fel5l .fel4ta .fe4ma .fe8me .fem5o6g5 .fem5t .fer8ro .fer6s .fe8sl .fe8st5 .fes3t6e .fett5a .fi4b5 .fi6a .fi4le. .fire5o6g5 .fis6k .fjel4 .fjor4d3 .fla4t5o .fo4bi. .fol2 .fo2r .for3d6ri .for7d6ra .for5en. .form5s .for7s6o .fre6e .fri5e6re .fug2 .fu6ge. .ful2 .fu8se. .fy8se .fø8rel .g6 .gaf7 .ga4le. .ga8li. .ga4me .ga4ne. .gang5s4 .gas4 .gas5ta .ga2t .ga4ve. .ga9vee .ge2a .gel4e .ge3ne .ge6ni5 .gen5s .ge4o .ge4st .ge5s6tap .ge9sv .gha5 .gift5s .gi4n .gi4s .gis7p .gi8v3a .gje8n7 .gl6 .glo6i .glo9v .gly5s .glø9se .gnå7la .go5des .gos7 .gra4v3end .grei4e .grunn5s .grus5s .gu4de. .gud3v4 .gu4lat .gus1 .gu4tu. .gø2 .gås4e5 .gå4v .h4 .hai5s6 .ha6ka. .ha8ma. .hand5s6l .handsla9 .ha6v5ak .ha6vi .he4er. .hei5e .hel3u .he2n .hen3i2 .he6r5i6 .he6r5o6 .he9r6oe .he7r6oi .he7r6ol .he9r8os .he8ru .hes4s5 .het6s5 .het7s6e .he4t5 .he5t6e .hil4l .hi4n .hi6re. .ho2d .ho2e .ho4re. .ho5ren .ho7ret .ho8ta. .ho8va. .hu4di .hull7s .hu4s3en .hus6val .hvit3 .hvi3t4e .hvo8r5 .hy6ra. .hy4re. .høi5 .hø4re .hø4va .hø4ve. .høy6st5æ .hå8en. .hå8er .hånd5s6l .i2 .i3a4 .i3bl .i4da .ifø5re .ig8la. .ig4le. .i4her .ik2 .ik6k .ikke5 .ikkes8 .i3k6l .ik5t .ik8te. .i5kv .i3la .i4la. .i8lande .ilbo8da .il6d3r .il6de. .i3leg .i6les .il4ja .il6je. .il6ke. .il4le. .il6sk .il4te. .i6me .imø5te. .in5ad .in5de .in8ga. .in4ge. .in3gr .in6gri .in5k6 .in6ka. .in4n3 .in4ne. .in5n6e .in6n7eks .in6n7ets .in6n7ett .in4n3i .in5s .in7tes .io4na .io4nom .i4rer .ir7k8 .ir8ra. .ir6re. .i6sa .i3sc .i6se .is7k6 .isla8ga .is6lam .is4le. .is4let .is4me. .is8na. .is8ne. .is5pa .i5s8pe .is3s4 .is6sa. .is4se. .is5sk .ist6 .is8te. .i5sted .i5stem .is7ti .i6s7tj .i6s7tr .is8ut. .i6s5ø .i5ti .i3va .i4van .i4var. .i3ve .i4vel .i6ven .i4ver. .i4vere .iv8ra. .iv6re. .i3ø .j4 .ja4de. .ja6e .ja4ne .ja8se. .ja4va. .je2a .je2l .je2m .je5re .jern5s4 .je4ta .ji4 .jo8en. .jor8d7r .jor8d7s8 .jor8d7u .jo4se. .ju6a .ju6la .jule3 .ju4li3 .jø4dep .k6 .kaf2 .ka6la. .ka6li. .kal7t8 .kalve5l8 .ka5me .ka3na .ka4ne. .ka4p3r .ka4ra. .ka5r6a5v .ka6re. .ka5rin .kar8t7r .ka4te. .ka5t6h .kau9k .ka6va. .ka4ve. .ke6e .kel3 .kier3 .ki4na .ki7ni .kino3 .kir2 .ki4se. .ki8va. .ki6ve. .kje3de5 .kje4k .kjek7l .kjønn4 .kle4s .kli5ne .klo9va .kly7sa .klø7s8 .kna7se .kne4p3r .kne7r8 .ko6da. .ko7gr .ko4la .ko3le .ko8le. .kol5j .ko3pe .ko6pe. .kor6s5ed .ko4se. .ko6ta. .ko4te. .ko6ve. .kring5s .kru4s3t .ks6 .ku5f4l .ku4le .ku8ra. .ku4re. .ku8ta. .ku8te. .kva4r1a .kve9ka .kve5ke .ky8la. .ky4le. .ky6te. .kø3s .kå6pa .l6 .la4da. .la4de. .la4ga .la4ge. .la5ger .la4ma. .lapp8e7 .lap5s4e5 .la6ta. .la4te. .la3tr .la4va .la3ve .la4ve. .la6v5æ .le8ar .le4da. .le4de. .le4er .le6et .le2f .lef3l .lega5ta .le4ge. .le4gel .le8gi. .lei8e .lei7er. .lei4ve .le4ke. .le4k5r .lemu9 .le4ne. .le6o7 .le7s6a .le4se. .le4sek .le4ses .le4s5p .le2t .le7ta .let6tan .le2u3 .le3va .le4va. .le4ve. .le4ves .li8a .li4de. .li4e4 .li5ene .li2g .liga3 .li2k .lik5k6 .lik3o .lik3s4 .li4ma .link6 .li6ra .li4re. .li4sa .li4se. .li4ta. .li4te. .li5ti .li4ve. .li4v5en .liv8s7u6 .liv4s5v .lo5e6 .lo6ge. .lo8gi. .lo6g5r .lo4i .lo6na .lo8o .lo6ri .lo8sa. .lo4se. .lo6te .lo4va .lo3ve .lo4ve. .lu4d .lu2e .lu4na .lu6pa .lu4pe. .lu6ra. .lu4re. .lu6se. .lu4ta. .lu9tas .ly4de. .lyd3s .ly8e .ly8ge .ly4se. .ly4sk .ly5s6e .lys5s6 .ly8str .ly4te. .ly4ve. .lø8de. .lø6en. .lø8ne. .lø6pa. .lø4pe. .lø8s7a .lø8s7i .lø8s7m .lø8s7p .løv5i .løye5ne .lå8ma .lå5re .lå6re. .lå4te. .m8 .ma4ge. .mag9r .mah6 .ma3ka .ma4ke. .mak6t5at .makt5s .ma4le. .ma4li. .ma4na. .mande8l .ma4ne. .ma4ni. .ma4ra. .ma4re. .ma4ri. .mar8sj7ø .ma4sa. .ma4si .ma6st .ma8ta .ma6t8h .mat5t8o .ma4v .me4d3 .me6d5ei .me6d4i .me6d7in .me6d5r .mei5er. .mei5et .mek5l .me6la. .mel3l6o .me4l5ø .me4ne. .me3ri .me8s7al .me4sk .me2t6a3 .me3ta4ll .mes5ti .me4tri .mi6kj .mi4le. .mi4me. .mi4ni. .mi4nik .min4k3 .min5k4e .mi6s3t4 .mne6 .mo5de .mo6er .mo4na. .mo8ne. .mon4st .mons6t5r .mor5d6e .mo4re. .mor3t6a5 .mo4se. .mo4ta .mo4tek .mo4ter .mo4tr .mo5v .mu8ga .mu8ge. .mu6le. .mul5es .mur7 .mu5r8e .my8ka .my4ke. .mø4re. .mø5res .mø2t .må6la. .mål3o .n8 .nabo3 .na6ge. .nak2 .na8ke. .nan5s .na4r .na4sa. .nat2 .na3tr .nat6tr .ne4de. .ne4den .ne4d5i .ne4d3r .ned3s4 .ne4f5r .ne4g7 .nei5e .ne6k6r .ne4o7 .ne4o8n .ne8pa. .ne6pe. .ne2s .ne4t .ni8ar .ni6er .nig4l .ni4na. .ni5o6g5 .ni4pa. .ni6pe. .ni8sa .ni6se. .nita9 .ni4to .ni4va .no6de. .no6e .no8ka .no4me. .no8mi. .no4r .no8se .no8si. .no4va. .nu4e .ny5a .ny3o .ny8sa. .ny6se. .ny4te. .nær9ast. .næ4re. .nød4d .nø4re. .nå4de. .nå6le. .o6 .obo5e .od4da. .od4de. .odel8s7 .od8la. .od8le. .offsi6 .of4te. .of5teb .og4 .ok1k .ok8ka. .ok8ke .ok4se. .old3s .ol4ga. .oli5 .ol8la .ol8le. .oli5v6 .ol6m .om1 .om4ar. .om6bo. .om4e6n .om4gå. .om4me .om5s2 .on4de. .on5des .ond3s .on6kl .on6na .on8ne. .op5ar .op4pa .op4pe .opp7el .op4pi .opp3l .oppla8te. .opp5s6 .op7r .opt6 .or4da .or4de. .or4del .or4dr .ord5s4 .or5ga .or6ka. .or4ke. .or6me. .or4re. .ort6 .or6va .osa5 .os3el .os4k .os4s .os4te. .ot5r .ot7t8a .ot4ta. .ot4te. .ot4tes .ot3to .ot4to. .ove6 .over3 .overen6d .over3i4 .over5k8 .ov8re .ov5u .ov6ul .p6 .pa8la. .pa4le. .pal6i .pa8n7a .pa5n6e .pa6n7eu .pa5n6i .pa6re. .pe3do .pe4ke. .pek5t .pel4sj .pe4ne. .pe2p .pep3r .pe8ri7 .per6m7 .pe8sa. .pese5t .pe4st .ph2 .pi6le. .pi6p .pi9ra .pi2s .plen5g6 .plus6s5 .plus7s6e .plø7se .po4et .po3la .po8la. .po4le. .po4log .po2p1 .po2p2e .pop3p .po3p2u .po8ra .po6re. .po4res .po6st .po8ta. .po6tek .pro7k8 .ps2 .pøn3 .pøn9s6 .på5d6 .r6 .ra6da. .ra6et .ra4ga. .ra4ge. .ra4ja. .ra4ka .raks7 .ra2m .ra4na .ra4ne. .ran7s6a .ra6pa. .ra6pe. .rap4s .rap5s4e .rap5s4o4 .ra4re. .ra6sa. .ra7ti .ra6va. .ra4ve. .re4al .re6da. .re4de. .ree6l .rege4l .re4gi. .rei2 .rei7de .rei5er. .re4ins .re6ka. .re4ke. .re8klar .re8kle .re4kli .re6kn .re8le. .re4ma. .re4na. .re4ne. .ren6sk .ren4t .rep5s .res9s .re5s6tan .rett7s8kri .re4ve. .re4ves .rev9n .ri2d .ri8e .rie5ne .ri6ka. .ri6ma .ri4me. .ri4pa. .ri4pe. .ri4p5o .ri4sa. .ri4se. .ris5ko .ri4s3ø .ri4ta. .ri6te. .ri6va. .ri4ve. .ro4an .ro4de. .ro8di .ro4e .ro8ke. .ro4ma. .ro4mi .ro6pa .ro9par .ro3pe .ro4pe. .ro4sa .ro9sar .ro4se. .ro4sed .ro4ta. .ro4te. .ro4tek4 .ro8va .ro3ve .ro8ve. .ru8ga. .ru4ge. .rug9le .ru8ka .ru4na. .ru4ne. .runes6 .run7g .ru4se. .ru4sk .ru8va. .ru4ve. .ry2e .rye7ne .ry6ke. .rød2 .rød7s4 .rø8le. .rø4re. .rø1v .rø8va. .rø4ve. .røy7e .rå8da. .rå4de. .rå4en .rå8er. .råg8 .rå6ka. .rå4ke. .rå3k4l .rå6na. .rå8sa. .s6 .sa4ge. .sag6n .sa4la. .sa4le. .sa4me. .sa4mer .san6d7 .san7d8e .san7d8i .san8s7ku .sau6e .sch6 .se2b .se2e .se4i .se4k5l .sek4s5o6g5 .sel4v5 .sel4v5i6 .se6na. .se4ne. .sen7s .se4ra. .ser7vel .se4te. .sha9ke. .si2d .si6er .si6ga. .si4ge. .sik5k6e .si8la. .si4le. .si4ne. .sinn6s5 .si4ra. .si5str .si4va .si4ve. .sje4i .sju5o6g5 .sk6 .ska7ka .ska5ke .skat4 .skei5d .ski6n .skinns6 .sko7de. .skog5u .skritt9s8 .skudd5s6 .skuddså7 .sku6m5 .sky6f7la .skå5ra .sle6s5v .sli6b7r .slim5 .slotts5 .slu9ka .slu5ke. .slø5se .sma4s .smas5k .smi6g7r .smo9g .små3 .små7k6 .små9l .små5t4 .småt5t .sn4 .sne3 .sne4k .snitt5s6 .snø3k .soa8 .so8de .somma4 .son6a .sop4pa .sor4t5 .so4ta. .s8p6 .spa5ra .spe6e .spi9la .spri5s6 .st6 .sta9ka .sta5li .stat4s .sted4s .ste4i .stein7a8 .stein7s8 .stem4m .stev9na .sti7me .sto5ne .sto6ra .strek5s6 .stu8a .stu9va .stål5l6 .sund5s6 .su4ri .su5te .sv8 .sva5la .sva5ra. .sva5re .svar5s .sver8n .syd5 .sy3d6a .sy5d6e .sy6na. .sy4ne. .sy5ter .sy3ti .sy6v5 .sy6v5o6g5 .sz6 .sæ2 .sær1 .sær3e4g .sø8ka .sø4ke. .søl6v5 .sør3a .søye5 .søy6en .så5pen .så3re .t8 .ta8ke. .tak9r .tak5sk .tak9s8p .ta4la. .ta4le. .ta4les .tal4li .tam5m .tan5de .ta4p5r .ta4ra. .ta4re. .ta2s .te4e .te6i .tei9er .te8ke. .te4ma. .te6o .te8ne. .te4se. .te7si .te4sta .te4str .th2 .ti8a .tid5r .tid6s3 .ti4de. .ti4e .ti4g3r .ti4ki .ti4l5 .tili6 .ti4med .ti4na. .ti4ne. .ti4p5l .ti4s .to5arm .to6en. .to4er. .to6et. .tokk8 .to6le. .to6na. .to5o6g5 .to4ra. .to4re. .to6reb .tor6g5a .to3ro .torsk6e5 .tor4s5v .to5rye .to4str .tota9la. .to5t8 .to8te. .to6va .to4ve. .tr6 .tra7c .tre3b .tre7p .tre5o6g5 .tre6skja .tre3s8ko .tre7sl .tre3sp .tre5s6t .ts2 .tsj2 .tu4en. .tu6na .tu4ne. .tu6ra. .tu4re. .tu8ve. .tve6n .tver6r5a6 .två7g .ty6da. .ty4de. .ty8et .ty8re. .tyr8s9 .ty5ter .ty5ti .tæ4re. .tøv9d .tø6ve. .tø9ver .tø5vet .tå5ker .tå4le. .tåp9n .tå5ren .tå7ret .u5a6 .u1b2 .u6berg .u3d2 .u7de .u3e6 .u4er. .u6era .u4ere .uf4f .uf8sa .u4ga .u5gi .ug6la. .ug8n .u1i .ui6m .u1k6 .u4ka. .u6ke .u7kn .u3le .u4le. .ule8k .ulen4d .u6lende .u8lene .u6let .u4lin .ul6ka .ul4ke. .ul4la. .ul8le. .ul8ma. .ul4me. .ul4ne. .ul5t .ul6te .u1lu .ul4v5i .u1ly .u3lå .u5ma .umu7 .u2n .unde6ri .und5r .une8 .u5nek .u9net .un4ge. .un2n .unn3s .u3no .un4se. .un4t .u5nu .u1o .u1p .u4pi .up2l .up4p3 .u2ra .u5raf .ur6an .u6rane .ur4d .ure4n .u4ret. .u6rets .u2r2i .ur4ke .ur6na .ur4ne. .u1ro .ur1s .ur8ta .ur4te. .urte5m8 .ur6tet .u5rut .u3ry .u5rå .u1s2 .u4sa. .u4sas .u5se .u3ska .u5sn .u7sp .us3se .us6t4 .u7stek .u5stel .usy5r .u2t .uta4g .ut5age .u3tak .u4ten. .ut5esk .ut6e7sko .u4ti. .ut3kan6t5 .ut4ne. .u5tol .ut3o6v .ut6rer .ut6rov .u3trø .ut6se. .ut4si. .ut3t4 .u3tu .v6 .va4da. .va4de. .vai4 .va4ke. .va6les .valg5s .va4ne. .van4n5 .vann5s4 .va6reta .vari4e .var5sk .ve8en. .ve4ga. .ve6ge. .ve4g3i .veg3s4 .vei3g4 .vei3s .vei4ta .ve4l3 .ve5l4ar .ve6l5art .vel5d .ve4l3e .vel5l .ve5l4os .ve4l5ov .ve4ly .ve8læ .ve4ne. .ve4net .ve4ra. .ve4ras .ve6re. .vermo9 .vers4t .ver5ste .ve4sl .ve4st .vete5 .ve8te. .ve4ve. .vi4da. .vide4 .vi6de. .vi4d5å4 .vi2e .vi4ka. .vil5l6a5t .vi6ma. .vi8me. .ving7s .vin5n .vi4sa. .vi4se. .vi6seri .vi4ta. .vi4te. .vi5tr .vok4s3 .vok5s6e .vo6r .vo6ta. .vy4 .vye5ne .væ4ra .væ4re. .vå4d .vå4r3 .vårs6 .wa4r .we4g .wi6e .xe2 .y6 .ye4 .yn8da. .yn4de. .yn6ge. .yn8ka. .yn6ke. .yn4kv .yns2 .yp8pa. .yp4pe. .yr8ja. .yr8je. .yr8ka .yr4ke. .yrkes5 .yr6t .ys4 .ysterie8 .yt9ren .yt5t .yt6te. .yv6 .z4 .zj8 .æ8 .ære4s5a .ære4st .æt4te. .ø6 .øg8la .øg4le. .øi5 .øi6e .øko5 .øk6ta .øk4te. .øl3ed .øl3s6 .øl3v6 .øm4me. .øres8t .ør4je .ør5k .ør8na. .ør4ne. .ør6ski .ør9sm .ør3st .ør8ta .ørt9an .ør8te. .øs2 .øs4t .øv4d .øve4r5 .øve4r6s .øv4re. .øy6de. .øy2e .øyele8ge. .øy5ene .øy4n .øy6na .øy6ra .øy4re .øy8rer .øy4str .å2 .å6e .å6f .å6g .å6k4 .å8l .ål6t .ål8ut. .å8m .ån8da. .ån4de. .ånd6s5 .åp6na .års3k .å6se .ås3k .ås7l .ås3m .å3ste .ås5v .å4t .åt4te. .åtte5o6g5 .å6v a1ad 4aaf a3aft aa4g a1aks aak5v aa3la aa2m a1a2n a6an. aans9t a7antr a1ap aa4ri6 aarie9ne aar5n aa2s 3aase aa5t6h a1av a6bab ab7av ab9b8l ab4but abe4lei abel5t4 abe9na. abes9ka 4abev a5bh abie6 abi9er abi9la a4bist ab1l ab9lara ab4lok abl7u a5bo9a abo3b abo3e a3boer abo3kl a3bord 5aborte ab1r ab8re ab2sl abu5e a4buel a4buf a6busk a4bute a4by. a4byb a4byk aby3r 8ac aca5 a6ca. ache3a ack3 a1co 6ada a5dal ad5ant a4dart ad9da a2deb ade5i6s a2dek a4del a4d5elv a5dend a3dene a2deo a2dep a5der. aderle7 a2des a5de4ser a3desl a3det. a3dets 3adfer 1adg ad8ge adi4ene ad1j 1adju 2adl 1adm ad5n ado7a a4dob ad7opp 4ador a7dora ad5raf ad7ran a2dre ad7rel ad5rep ad3ret ad3rid ad1ro a7drø ad4s5amt ad4si adsle6ge. ad5s4let ads5te ad5s6tek ad3str ad5un 1adv adva5re 2adve a4dy. a4d5øy 2a1e2 4aea a4ed 8a7ede aed7r aek5t a4el. ae5la ae3li ael5o aen5t a3ep aes8ke. aes4t 6afa 6afc a4fe. afei5 af4fan af4fei affe3s af7fi. affi3d af5f4u af4i afia1 afi5an a2fib a6f5inn afi7re a4fiti a5fjo af9la. af9lar af3le af5li a4frik 6afo afo7ra. afo7r8e afore5ne afra5s 1afri afs1l aft5ei af4t5e4l af6t5o aft1s4 af5yr afø4r afø5ri 4aga a2gaa a5gae a4ganf agang7s8 a4gart a5gas. aga6ve. ag5de a7gelen a2gem 3a4gent age4r3a age6rek age5risk a7gers a5geru age5s2 a4geta a4gé ag5gar ag4gas ag5ge agg1s2 agg7u ag6gut a4gi. ag5id agi6s ag1la ag4lem ag6lesa ag5lå agmo8e agn5om 4ago ago5d8 ag1or a5gos a3got ag5ov ag7ras ag1re ag1ri 4a3gru ag1rå ag4samb ags4ang ag3s4ei ag4sel ag3sem ag5s6ing ag6sju ag4ska ags4kul ag2sl agsmå6la ags3tr ags3t2v ag2sy a6gu. agu3ay agå8va agå8ve. a1h a5hi ah4n5 ah4v ai1a4 ai3e2 ai3er. ai4is ai5ke. ai5ko ai9kv ai5ne a3ing a1inn ai4n5o4 ain8sm ai1ro ais4e ai4s3k aisk2h ai8sm ais6om ais5s ai5s4v ai5ve ai5ø a1j aja9d a7je a8je. ajes7 a4jé a4ji a6jl 6ak. a1ka 4aka. 1a2kad 6akaf ak3aks 6akan aka4o5 4akar ak6arb aka4t5r ak4au 2akd 2ake a9kec a2keh a3kei5 a6kek akel8e akelei9er ake5l4i ake4rek a4kerø ake5sm akes6p a8kete akhe6n 4a1ki a6kid a6kik ak7ind akis1 2a1kj akk6and ak5ke. ak3ken akk5erst ak4kes akki4 ak5kim ak4k5is ak6kj ak1ko akk3ol ak6k5ri ak1ku ak4kul ak4k5v 2ak1l ak3lev ak6lik ak6lus 6akn ak5ne a5kno 2a1ko ak5om. a5kon a7kos ak1o2v ak4pe6 akra8sa ak5reg akregi4 ak3res ak3ro. ak3roe ak1ru ak4s5and ak4sek akse3l4o ak4s5elv ak4ses ak7s6id 3aksje ak2s1k ak7sku ak6sl 4akso 4aksr aks5ti ak5stol aks4tr akst7ren 4aksu ak4tab ak4tai ak4tak akta6le. akt5all ak6tam ak6tans ak4tap ak4tas ak4tav ak4teg ak4tek ak5teme 4akth 7aktig ak5tit aktle6ge. ak2tr ak6tre akt3rå akt5s4la 5aktue ak8t7æ akut2 2akv ak3val ak5øl a5kå 8ala. al7adr ala4g ala9ga a5lagm alag8ra a5lah a1lai al3all al3a4me al3ana a3land a5lande. a5lane alan5gr al3anl al3anv ala4o ala5pr a5lar. a3lara a5laren al3ark a7larl 3a4larm al5arr a5lars al3art a7larv al3a4si 2alat ala7tr 4alau al5auk al1av ala4va al4ba. albo4g albu7er. 5album al3de al7der 4aldo ald3re 2ale a2lef a2leg a9leg. aleie6n a9l8eik a5leke a4leks a4leli a2lem al5e4mu al8en. a4l3enh a4l5en5tr ale4pos a7lept a4lered alere6de. a4le5ro a4leru ale1s2 ale7se a4lesk ale6s5kr a4lesl a6lesu a4leta a4le3te a2leu ale5v a4leva a4levi 3alfab 2alg. al3geb al2gu al4går al3ill a2lim a9lin. ali5na. a4l3ind a4l3ins al3int al9ja. al3je. alj5end al3jer al1jo al4jor al2j1u al1jø alj5ø6v al9kera alk7s6 alla4ga alla6ge. al4lap all5art al5lea alle6ge. al4lek al5len. all5erst alle3s4 al4lest al5let 3allia al4lid 5alli5e alli9ne al6list. al4lo3m all4sen all4sti al6lul al6løs. al4løse al8løst al6lå 8almal al6mek al4met 4aln a5lo. al1o4b a5loi al1om a1lon al3ope al7ord alori5 alo6rit al3ove alow7 alp2 al3ps 2als al7sed al9skap al7skare als1l als5lø al2sn al6spu als4te als6ter 6alsu alt6ak alta8le. al3ted al7tema 5alterna alte4t al4t5eta al4t5ete al4t3op a4l5u4k alul8la al5und alu8re. al5va. alv5aks alvak8se. al4ved al5v6er al8v9er8m alve5s al9ves. alvi8se al1vo alv3s 6a1ly a2l5y4te alø5se al3øv a1lå al7å6t a4mah ama5is a2mak a5maki am3aks a2mal am5ald a3man a3mar. a5mara a7mas. amaso7 3a4matø am4bar 3ambas am4bat am5be a2mei am3eie a3meis a2mek am3eks amen8de. amen4s3 amen6t7arv ame4ram a4meret 3a4meri 4amerin ame5u amhu7 2ami ami7na ami7ne amisk3 amis4ku am4lese am6lest am4mad 6amn. am4ned a2mo amo5e am1op am1or amo6ve am4pap am4pare amp5ei am8peria am6perie ampes6 amp7inn am2p3l am5p4let am4p4re am4pun am2på amru4 am5rå am1s am7s6ku ams4l amst6 am4s3tr ams9ut ams2v am4s5ve am2sø am3ti amti5da 5amtm am7tv am6ul am5yr am5øy 6ana. anak8te. ana3la anal4f 3analy 8anan a3nane a5nang anant8 4anar a6narb an5art ana3to 6an7au anaus7 an9av. 3anbef 4and. an4da5m6 anda5ta an4dek an5den anderle7 an9det 6ando an4dos 4ands and4sel and8send and7slet and5s6tre a2ned an5egg a4n5elv ane8l7u a2nem 2anen 2aner a8n7erme ane3ru a5nes. a4nest ane5sv an5e6tika a5netike an5e6tikk an5e4tis a2nev 3anfal anfø5re. ang4e an4ged an4g5enh ang5erme an8geste an4gi. 5angiv ang5of an5gos an4g9ra an4gre. an6gres an4gret an4g3ry ang4sm angs6tro angs8t9rå angst5y ang5sva ang6søy ang4t5re ang5t6ve an4gun an4gå. ania7 a6nib a4nisj 4aniv an4kana 4anki 4ankj an4kob an4kop an4kos an2k1r ankra8na. ank3re ank3ut 8an2kv an4kø an6k5å6 2anla anland6 anlø9pa ann5ans an6neme an5nen an5ner an5nid an4ninn an4nom 5annon an4nov ann4sei ann4sid ann6s7kå ann6sl ann3st ann5sta ann4s3u an4ny an2nø a3no. a9noa. ano6deb 2anog a7norm a6not a2no4v ano5va an3ove anri7ke ans5aft ansa7ka 4ansan 3ansat an4sek an4sent anseri8e9ne an4ses 3ansik ans5ind ans5ins an4ski an3skj ans4k3l ans6kun an5skø an6slø an4sn ans5or an4s3pi ansport7s6 an1st6 6anstar ans4te4 an8s7tu 6ans6ti 2ansu an9s6und 5ansunda 1an1sv 4ansve 6ansy an4så anta8la an5t6and an4tans an3ted ant5emi 5antenn an4tesl anti7kl an4tim an5toi ant5ord ant5rab ant7rom ant5ryg ant5s6 an4tul antus4t 2anu anus7a an5ut 3anven 6anvin 6any a4nya a2n1æ2 anær8 2anø a2nøk an7å a1o ao9a aog9 a2oi ao6k6 aon8de. ao2p ao4r a5pea a7pé a1pi a2pia ap1id a6pik a6pins a2pio api6r5 api7r6e api7se ap1j a1pla a5p6las ap3li ap9lo ap2ly 4apol a4pon a4poo apo3p apo5s4ti a2pot 3ap3par 4appar. 6appare app7esk ap5plas ap4ple ap5pli ap6pri ap3ra ap5ren ap5ret ap3rin ap2s1 apsa4 ap3sel apse4s ap8s9l a3psy ap4s5ø 8apu a6p5ut a1py ap7ø a3p8øls a5på. a1ra ara9bi ar5aks arak5t ar3alt a4rami 2aran a4ranor a4rans a4ranv 2arar a4r5ass ara5te. ar5aug ar7auk arau9ken ar7avh 1arb 2arba arba8ne. 6arbeh 4arben 6arbet 2arbi 4arbj 6arbl 2arbo arbo8da 2arbr 2arbu 2arby 2arbø 4arbå ar7deb ar6deli ardfø5re ard3re ard5sta a1re 1a2rea 4arear a4reb areba4r a2red a2ref a2rei are3in a2rek a6r5ekt a4rela ar7elek a4r6eli ar7emn a5remo. 3arena a6r5eng a4reni aren5tes a2reo a2rep a6rerel a4r5erfa a6rerk a4rero a6rerø a5res. ares8ka ar4et a7reta. a4rev ar7e6va ar3evn arev6ne. 8a1ré 6arf ar7g6h ar5g6i 6argj arg4l ar7go arg5stj 2a1ri aria7ne a3rib ariba9 ar5idr a4rim ar3inn ar3ins arins9k ar3int ari3se arise4a a4risto a2riv ar4kau ar3ke ar4ke5s ar5kha 3arkit 3arkiv ar4kle ar4k5løf ar6kod ark6ste ark4str ark7veg ar4køy arla4ga ar4map 5armbå ar4medi arme7t ar6metr ar4minf armle6ne. armå6la 2ar2n ar4nad ar4nal arneva7la ar3ni ar3no ar3nu ar3nå a1ro. aro8de. a5rok a1ron ar1op aro6pa a4r1o4r a1ros ar7ost a1rot ar3ove ar6ped ar9po arp5ret 1arra ar5ree ar7resk arri8e7 arrå6da 2ars arsa6ka ars5ans ar3sel ar6s5ers ar4sin ars5kam ar5skar ars5kes ars7kre ar4spr ars6tr ars4vei ars7æ arta4la arta6le. ar3te ar7tele 8artets art4ha. art4has ar4tika 6ar4tim 4artn 4arto ar4top 6artr art9ra ar6trin art6s5t arts5ø 6artu 8arty ar4tyv ar1ul ar1un ar5u6r a1rus ar5utb ar5utn arve3s ar6vete arvi8sa arvi8se. a1ry ar7æ6 arø8ve. ar1øy a1rå arå8de. ar7åp a6r5åt 6as. 4a1sa asab4 asak4 a4salo as6an as7aug asbe2 a1sc a2se. asea4 a2sed a2seg a2sek as4el ase5le a2sem a6senet a4senk a7seol a2se5s a6sest a4sete a2se3u as2h as5hu a4sib a2sip a2sir a7sis. asis5t a2siv as4ja a6sjett as5jor as3kar ask6et as5keti ask2i as5kis a5skj as5ko. as5koe a4s5kopi as3kor as3kot a1skr as7kra as3kul a5s6kula as6kule ask9u8t as4kv ask5øy as1l a5s4lag asla8ga as4lev as4lit a1so a4so. a2s5om as5ov as4pan as3pe as7pis as5pl as9sa. as4sab as4sal ass5ald ass5alt as4sam as5se. as4sed as4sek asseri7e6 as4serv as4ses as6sifr as5sing assi3s as4sit as2sj as6s1k assku6le. as2s3n as5so. asso9a as7sos. as6s1p as2s3t as4stan as4str ass5tru as2s1v as4sys as4søk as2s5å as1ta as6tab a6stande a4statu as5te. as3ted as4teg as4tek as4t5enh a1stj a9stof a5stok as5t6os ast5ov ast5ren as4tro as9tua astu8ve. ast5ø4v a1su asu3n asu9sa as1va a6sym asyn7d as7øye as5å 4at. 4ata1 a5taene at6af ata8ka. ata8la. a4tang ata9rar a6t7arv atas4 a5tas. atat8 a2tau at5avh atch5 a2tea a2tec at7edd a2tee a4tei at5eid at3eig ate3in a4teka ate5k8e ateke7ta a6t5ekte ate7le at3emb 4aten a5tene. a4teni a4tenu a2teo 4ater a5ter. a6terat a8terek a4teril a2tes a4t3ett at6e5u a4té 3atfer at4ha. at8has 4ati atik6ka atili5 ati5nea ati4rep ati8sta at3jo 5atlant atl9øy 3atmos at4nel ato5a ato5gr at1oi a2tom a6t5oppr a1tor a5tose a3to1v a1tra at5reg at3ren at3rer a4trif at3rin at5rot a9tru at5røs at5røy 2ats at3ser at7sje at7s6kat at7skj ats6kul at2s3ø 4att. at6tat 4at5te. at5tens attfø7re at4tid atti4s att5ise at3tit att1o att7o6p atto6v at1tr at4traf at4t3re at6trin att3s6k att5s8l att3sp att3sv at6tys at2t3ø2 a1tu atu5e4 a2tut at5v atvi5er. a3t3w a1ty atyr8ke. a5t6yv a1tø atør3s atø9se a4t5øy a3tå. a7tåa a1tåe at5år at5å4se at7åt8 4au. 8a8ua au9ar. 4au5b auba6ne. au3c au5da. au9det au4di. 4a6ue au7en au7er aue5re au3est au6e5ta au5e6te. au4gal au4gas au4gel augele8ge. 5aug2n 3augu au5i au5keli au5ket auk5la 1auk7s6 au5kve au6las au4lat aul5l aul8la au5lu au9men au6mo aum5s6k aum7s4t a5und au5rae aure5s au5ret au5ri aur5s6 au1ru auru4e au1sa aus9kj au6skr au1so aus5s au6s8tas aus8tett austi6s aus6t7ise aus6ton au5str au6stra au6stri au1su au4sun au2s5ø4 aut6a au3ta. au7tar au5te 1auto auto5v au3t4re au4ty 2aux a1va av5ab a5vae ava7g 6aval av3alv a4v3and av3ang a4v5anl 3a4van5s a9var. av3art avar6ta. 4avas avat6a 5avbi 1avd 3avdel 2a1ve a2ve3d2 a5vede. a7veil ave3in a2vek a4vela a4vele a5veleg avens4 a5ver. ave7ras aver5d a6verei a2ves a2vev 1avfa 1avg avi4ar 4a5vig a1vik avi9ke a1vin a4v5int 2avir 5avisa avi5sa. 3a6vise av5ising avis3t a5vit avlu9t avlø5se 6avn av7na av4nes a1vo a4vok avo3r avo4v av1r av4res av5ri av1sa av5seg avs2i avsko7g 3avsni av1s2p avspe9g4 avs4te av5su av1s2v 1avt avta9ka 2avu 1avvi av3øl 4a1vå a6v7å6l a1wa awat4 a5we awe9ne a1wi ay2a ay7ane. ay5ar ay9s8t a5y4t a5zu azz3o a1ø a7å6 1b4a ba3a baby5 ba4bys ba5cl ba2d ba4da. ba7dan b5add ba8de. ba4deb ba5den. ba7dens ba3di bad1s 4baf ba2k ba5kan7 ba3kar bakars7 ba3ken ba4k5end baken6de. ba3ker bake3s ba9ket. bak9ett ba3ki ba8ki. bak6kers bak6ko bak5kr 4bakr bak4re ba5kri bak3ro bak3sm bak5sp bak5s6ti bak5str bak7t6 bak1v ba3la bal7ak ba4les ba4li. bal3j bal4lag bal4lan bal4led bal4leg bal4lei bal4lev bal4lig bal6lov ball5s6 bal6læ ba1lo bal5t ba1lu ban4a ba4na. ba5nan ba5nar ban9da ba4nel ba4nes ban6kap ban4kor ban2k3u bantu5 ba3re baret5t ba3ri bari6e7n bark5s bar5skr bar5tr ba5ru ba5sen ba4seru ba4set ba3si ba2s1k bas6sak bas4san bassi4 bassis5 bas4so bas4st bass6tr ba2st ba7s8u ba1ta 2ba1tr bat6ti bau9la 6bav ba5z 2b1b b3ba b6bak b4b5arb b6base b3be. b4beb b4beda b2bef b4beg b6beh b2bei bb3eie bb5eig b2bek b6belo bbel6t3 bbelte4 b4bem b9bene. b2beo b3ber b4b5erf b4bes6 b7beska b6beta b6beten b4beti b6beto b6betr b2bev b8b1h b3bi bbi9e8 b4b5inn b2b1l bb7len bb5op bb5rek bbu9ra bb5ut. bb5ute b2by5 bby3e bby1k b4bø b6bå 2bc 2b1d b2dek b7den b4dep 1be be2au be4bo. bebo5er. bebo9k be4da. be9dar be3der bedi9e8 be4dre bed5red bed2s1 bedy9ra be1då3 2bee be5ed be6ef b4ef befa5re be3g bega7 be4ga. be4gi. be4gn be5go be4g5re. be4g5rene. be4gå. be6ha. beha7g behers7 4behu behå4r be6i be5ke be2k3i bek6kel bekke5r bek4kes bek6l 4beks be4l3ab bela9ga bel5eie bel5eig bel5ein be4lek beli9na beli9v belle5sa bel5let bel5læ be2l1o bel5s4p bel7s4t bel4tag bel4te5s bel4t3ø bel3u bel5v belæ5re belå7ne be4na be5nat be3ne 4bened be4nest ben5g be5ni ben5s4i ben5skj ben5sp ben5te 2bep b4er 4berai be7ras ber5d be4rep 8berest bere5te ber4ga ber4g5ende ber5ges berg3j berg3l berg3o ber4g3å be5rib beri5ke be7ris ber6kl ber5na ber5ne be1ro be4ro. bero9a berri6 ber5te ber5ti be1ru beru9sa berø5v b4e1s2 5bes. be4se. be5s4i 4besik 6besj bes5ke bes6k5n be3sn bes7ne 4be3so beso9v be5sp bes3s bes6s7a6 bes6sel bes7si bes7tens bes6tes be5stes. be6så 3b4et 5bet. be4tab be3te 4betei be7tes beto5ne be6trar be6tre. be4t3ri 4betu be4ty. beva5re be6ve. bevi5se. be9vo bev9r 6beå beån9 7bé 2b5f 6bg 2bh bhu1 1b4i bi5ak bi6bla bi5ce bi1d bi5dee bi8dé bid6r bidu8 bi5el bi6ele bi5erv 4bifa bi5g bi3ka bik1k bik6ki bi5k4l 4bi7kr bi6la. bi4l5ap bi4las bi4lau bi3let bilet5r bi4lin bil3j bil5la billa8ga bil5leg bil5m6 bil1o 6bi5m bi4nans bingo5 bin4gol bi7no 4b5int bio7 bi3o8m3s4 4bip bi4ri5 bi7ris. bir4ken bi1ro bis2a bi3se b5ish bis6hi bis7ke bi5s4la 8bisn bi4sp bis4p5i bis5se bi1st bi5s6ta bis4til bis5tru bi3s4v bi6ta. bi4te. bi5tes bi8ti. bi4tre bi6tri bjar3 bjek4t5o bjø6r 2b1k4 b5kh bl2 1b2lad blad3a bla6f3 bla8ga blak5r bla5me blan9da b4lank blan5ke b4lant b1lar b8larar b3lat bla4u b4lef blei8e5 blei5er b4lek ble4k3a ble5kes ble4mo b3ler ble7r6a b6lesa blesse9ne b4lest 2blet bli9ke bli5ma bli5me blings6i blis3s b5lj blja4 blo6dr 1blok blom5m b6lu blues3 blu9sa bly7gl blæ5re. blå5n blå3r blå7sa blå5se. 6b5m 6bn b3ne. b3ner b7nes. b7ni b2o boa5s4 bobba6ne. bob5by. bob9bye bo2bl bob7la bobs4 bo3de bo6din bo6d7r bo2dø 4boef 1boen bo2er bo4et. 2bo3f6 bo4gel bogn7 bog1s 2boh 2boj 3bok. bo2ka bo6kel bo4k3et bok1i bok1k bo6kop bo6k5ri 5bok1s boksi8da boks4p bo2ku bok3ve b4ol bol5eie bo7li boli7n bo7lo. bo5loi bo4l5o4r bol5s4p bolst6 1bomb bom4bel bom5m bo6mo bom1s4 bo5nap bon5ato 4bonn bon5ne bons4 bo5nus boo6 boom1 bo1p4 bo1ra bo4ra. bo6re. bo7rel bo3ren bo3ret bo4rete bo6ri. bo3ro bor6t7ef bor6tei bor4tes bor6t7et bor4ti bort5s6 b4o1s bose8te. 3boska bo2sl bos5se bo4sto 1bot bo4ta. bo4tak bo4tal bo6te. 2bo7to 4bot6r 4bot4v bou3c 4bo1v bow4e bo6y 4bp b7pl br8 1b4ra bra5ka brak5s bra5se bred5sp brei5e brei3s bret7te b6rev brevi9er. bre4vin bri5a b4rio b2ro bro9ar bro1s4 3b4ru bru5ke bruk4s3 bru4na bru7na. bru5nes bru5pl bru7ren bru5sa brus4l 1bry bryn4s 3b4rø brø5de bråe6 brå9ne brå5te. 6b1s bs4e b5s6e6a5m4 b4s5el b5s6i bsk4 b4sli b2sm b2s1of bs2t6 b6st7f b7s6v bså5 6b5t b7t6s 1b2u bu4ar 4bub bu3da bud5d6h bu3de 4bu3em bu4en. bu9ene bu4er. bue5s bu1i bu6is 6buki buk3l bu5la bu4le. bul3le bun7de bund4s3 bun8ge. bunk3r bunnla8ga bunn3s 2bu3o bu1p bu6ra. bu4re. 4bu3ro bu3ru bus6e bu4se. bus4h5e busk7ø bus6sek bus4sel bus6sent bus6set busse6te. bus6sj bus4sn bus4sp bus4st buss3v bu1st 4bustr 4busy bu1ta bu4tal bu7tem b5utg 4butst bu2tu bu1tø 4buv 6buø 2b1v 4b5w 1by bya2 by5al by9are by7dep by4en. by7ene by5ens by2er by3ers by4ge. byg3l 3byi by1lo 4bylø by5n by1re by6re. by1s 5bys. 4byse 6bysi 6bysp byst4 by4ste 4bysv by5tar by4te. by1tr 2by5v bæ5rar bæ6rar. bæ4re. bæ5ren bæ5rer. bæ5rere bæ5res. bæ5ret. bæ3ri bæ4r5is bæ3ru 1b4ø bø4e bø7ens bøf3 bø4kes bø6la. bø6le. bø2n bøne5 bøn6nes bøn7o bø6re. bør4s5k bør4sp børs3t børs8ta. børs3v bø5ta bø1v bøy7ar bøye5 bøy4ene bøy4es bøy4et 1b4å bå4de bå9des bå6e bå7ene bå4la bå1re bå6reg bå4rep bå4s3te bå6s7ti bå6t5j bå6to båt5r 1c4a cab4 ca4e ca5le ca5me ca5mo ca4pe. cap1r ca6pris ca3ra car5n ca5ro car4te. ca2sa3 ca6set cash5 ca5s4til cas5to ca1t cath5 ca3th6r ca4to. 6cb 4cc c1ci c2d cde6 cebo9 ce3d ce1i 1cel ce5le cel4les cel4lev 3cen. ce4ned ce4nee ce4nem ce4ne5s4 ce5nes. ce4net ce4nev 5cens cen4ti9m cen6to ce5o4 1cer cerba6ne. ce3re ce1ro5 cer3t 6ceru cest3o 2ch. cha5le 3cham4 cha7ne cha5t 2chb 4chei chel5s che7te chi4li 4ch3h 6ch5m 4chn ch5ne chom4 cho5s6 2chp 8chs 6cht ch1v ci1c 3cid ci2e cie8n cie2s5 cil5l ci3ne ci5ta 2c6k ck5ar. ck5art ck1en ck3er. ck4ere ck5e4t3 ck5et. cke8y5 ck1i ck1k ck1o2 ck7r ck5s2 cku6 ckup3 ck9ut c2l clai4r5 cly4 c1m cmini4 coa6 coat5 co6bid 1co4c 2cod 6cof 6cog co4la. co4lab co4lak co4la5r co2m co5ma com5t co6n5os con5s con7t co2o co7pa 2cor co3r6a co1re co4so 4cost co4ver c1pr cr8 cras4h crack4 cre2e creen7 cros2 5cru 4c4s 4c1t c6ta cty5 1cu 4cu. cu5la cu5le cu5lu cup1l cu6po cup1r cup7s cu4på 2cur cures4 cu6t cy2a cy6p7 cys3 c6z cæ5 1da 4daa 4daber 8dabo d5abs 6d5adel d4adg dadø4 dadør5 4daef 2daf 5dagb da4gev 4dagj dag7l da6go. da4g1r da6gun 4dagå 4dahe 5dahl da1i 2daka 4dako 4dakr dak4se. 4daktig da5kv 7d6al5j da1la da8la. da4las 6dalau dalbu8er 4d5ald da4les dal6so da1lu da4ma. da4man da3mas da4me. da3men 4d7ameri dame3s dame5t6 da3mo dam7pe 5dan. 6danal d8ane 9dani 2d1anl 3dann dan5neb 4danno 7dano d4ans. dan3sa dan4sel dan9s8kan 4dansv 9dant. 9danti 8dany 2da3o 2dap da3pe d3app 3dar. 5dara 2darb dard3s4 4darea da4res d5arn da2ro dar5os. dar5s6 dar4ta. dar6va. dar8ve. 4dasei 2dash 6dasi 4dasjef da4sk da9sko 6dast6r 6dasu data5 4da4tal data6le. datali8na da4tek 7d6ato da3toa 4da5tr dats6j d6aud daud7s8 dau5go 2daut 2dav d5avb d5avis d1avl d3av5s 4daø 2d1b2 dba8le. dba4ne. dbe5s6t dbe8ta. dbe6te. dbling7 dbo6en. d6byf 4d1c 6d1d d2dad ddag4 d4dak d4d5arm dd3eie d2dek dde4lap dde4l5o ddel5sv d4demi dder5s d4desu ddie8 d7dom d8d7orm d4d1re dd5run ddsa4 dd4sala dd4skap dds5tab dd3s4te dds5tr d2dyb ddø2 ddør3 d4d5øy dd1år 1de 2dea deak3 de2al de7b 6debar 4debas 3debat 2debe 4debl 2debo 5debon. 2debr 3debut 2deby 4debø de1c 5ded. 2deda 6d7edd 7dede. 4dedek 4dedel 4dedia 2ded4r 2dedy 2dee 5dee. de7er 2def d5eff d5eft 2deg 6d6e5ge 5degg de3gl 2deh 5dehavs 2dei dei4d dei4ene 3deig. dei8ge. 5deigen dei4g5r 5deik d2e1in 3deir de5is. de3ist 7de7it 2dej 8deka 2deke 2deki 2dekj 5dekk dekk3a dek4kan dek4kel dekk8s dekk7s6t de6k6kv dek2l 6dekly 5dekni de5ko 4dekod 4dekon 4dekos 2de5k6r dek6st deks7ti deks6tr 5dekt 2deku 4dekv 4dekø 4dekå d4el. 6delad 6delage de6lans 4delau 4deled de4lef 4delei del5ei4d del5eie 4de4lek de5lele 4d5elem de4lest 6d3e4lev 4delid 6delinj del5int 4delis 4deliv del4lap del6lei del4lek del6lerf del6lig d4els del4s5at del3se delses7 del4si del4spo d4elt del6tala del3te del7tr 6deluk de8l7ur del5ve 4dely 4delæ 2delø delø6pa. 6deløy 2delå 2de5ma d3emb 2deme demie4 4demj dem8na. de4mo. de4mog 5demok 4demol demo5no 5demos dem5pe 3demr 5dems 4demu 2demø 2demå d2en. 4dena de7nak 6d5en6den. 8d7en6dene 6d5en6der. de5neb 4dened 6denel 4denem 4denet 4denev 6d5engen. 4deni 4deno de4nom d2ens den4sin den4s3t8 den6t5ant 4dentif 4dentit dent3o den4tr dent5s8 den6t5u6 den6tå 4denu 2denæ 2denø de2ob de4og 2deol 4deopp 4de3or de4ove 4depak 4depap 2depe 4depi 4depl 6depu d2er der8am de6rant de4rare de4rark 5de7rast dera5te der3av der5d 4derea 4dered de4r5edd de4ref 4dereg 4derep 6deresi der5est 8derest. 6dereste 4derett de4rif de4ril 5derin de4rinæ der5k der5ne de5rob 4derog 4deros de5rose dero8se. 6de7rot dero4v der5s6n der4sp der3t der5un de5rup 6derus der3v 4derør 2derå de1s 3d6es. 2desa 4desc 2dese de5seg des5ers 4desho de8s9hop desi4s5t 2desj 2desk 9desk. 5deske 4des4le 2deso 2desp 7despl 6de5s6pr d4es2t 5dest. 5deste. des6tem de5sti 4destj 4desto 4destrå 4destu 6desty de4s3tå 6desup des6v 2desy deså7 d2et. 2deta deta8ka. de3te 4detea 6deteg 6detekk 4detel 4deten 4detep detes7 2deti 2detj 4deto 4det6r 2detu 4dety 4detø 6detå 2deu d1eur 5deus 2dev deva8ne. devi9er. 3devik d7ev8n de5vu 2dey 4deø 2deå 2d1f dfø6rarar 2d1g4 d4gel d5gi dgi6n dgjø6re7n6h d3go 2d1h dhav4s dheim2s5 dhu9ga dhø4r 1di di6ak di5alg dia5li di1ar dia3re dia1s dia7sp dias6t diats4 2diav 2dib did5ri di7ell di5en. 4di5end di1er dies4 3diff diffe5 3diful 4difø di8g9and di4gat di3ge4s5 dig7g 2digj dig8la. dig6le. 4digren dig5ret 4digru di2gu 4dih 4dii 2dij di5ka di8ka. di5kem 2dikj 6dikn 2diko 2di1kr dik7v 2dili dil4les di5ma 6dimed 6d5i6mel 4dimes 4dimet 2dimo 4d5imp 4dimå di5na 2d1ind di7nen 4d5ingk din3gr ding8s5en ding6s5er din8g9å dini4 di4ni. 4d1inn 2dino 2dinv 4dinø 3diog 7diol dio3na dio4no di3ori dio5tr 2dip 3dipl dippe7 4dired 4direg 4d5irs 5dis. di6sc di6sed dis4i disie5ne d6isk dis6kam di4skj dis6k7l di4sk6o dis5ko. dis7koe dis7ku dis5s dis1t dis7tik di5sv dis4vi 2disy di4tal di7te 4ditek dit4tet ditt3r di9us. di4va. 4dival di7van 4divek div6i 2divu 2diøk d1ja d1je. d1jen djer5ve d7jes. dje9ve d6jingan d6jingar d1jo dju8la. 5djup 6djupar d4jø. 2d5k2 dka8ra. dki6 d5kj dko2r 8d7out dku4le. 4d1l4 d3la dla4ga dland7as dla6te. dla4v d4ledi d2lef d4lega d7legar dle3ge dlei7er. d5leka d2lel dlem4st d4lenet d4leru dleva8ne. d5li dli4f dli5ke d5lo dly8se. dlø8pa. d5lå dlå9re 2d1m 4d1t dme6la. dmo4e dmors6 dmo8s dmø4re. dmå6la. 8d1n dn6a dno8de. 1do 2doav do2b3 4doba do3be 8do9b8lan 2dobå do4da dodø4 dodør5 4doeu 2dof d3off d5ofr dog6med dog4me5s 2dogr 6do5i do3ki 4dokine dok6kan 4dokn do5le 4doled doli8ne. 4dolinj 6dolis 4dolj dol5l4 4domes do5mis 4doml do4mo dom7p 2domr dom8sa dom8s5e6 dom6s5i dom4s3k doms3l domsla6ga dom4so do4mu do4na. don5g 4donke 6d7on6kl don5st don5t4 2dop do4pa. do4pe. 3dopi d6o1ra do5ran 2d1ord dor4da do1re dor6gest d5orie dorm8 do3ro 5dorp 3dorr dors6 dors7ke do1ru do7rye 5dos. do4se. do4set do1sk 6do7s6l 2doso 4dosp 2dost do3str 4dotr 2dov do5va do5ven do4ver dov9n 4doø 2d7p8 5dq dr4 d1ra. d5raa d9rad. d5rade 1d6rag dra5gen dra6kes 3drakt 1dram 5d6rang 3drap. 5drapa 3drape d3rapp d1rar d6rarar d3rarb dra6ret d5rarm d5rarr d9ra8sa 9dratt drau7ma 2dre. 5dreass 2dred d5rede. d5reder dre7d6r d5reds 9dreg. 9drege. d3regj 3dreie drei5en drei5er. drei7ern d5rej d6reka d7rekk 3drekt 4drel d7relig 4drem d1ren 4drer d3ret. d3retn d6retr d3rets drett4 dretts5 5drevet 3drevn 4dria 3d2rif 2d1rig d2rik d3rik. dri8ka. d3rike 3drikk drik7s6 d9rikt 5d4ril 2d1rin dring6 drit7tr drit5u dritun8ge. 1d2riv 3dronn dro6pa. drop5s 2d1ror 3d4ros dro8ta. 2d1rov dro5va dro3ve 2dru 3druk d1rul d1rum d3rup 6d5rut 2dryk drykk4 d2rys d4røm drø6re. d7røt drø3ve 5d8røye d1råd drå4de. 3dråp 8ds d5sa. d3sabl ds1ad ds3a6del d1sag dsa9ga dsak6se. d1sal dsa8la. d4s3alf d6sall d9same ds1a6n ds5ane ds1a2r d2sas d4satf dsbø6n d5se. dse4d ds1ef d2s1ei ds7eks ds3ela dsel4s5a dse2m ds3emi d6s7enda dsen8de. d4s3eng d5sens ds3e2p d7ser. d6serf ds5erk d4s5e4sk ds5e4st ds3eta dse4te. d5setj ds1ev d2s1i d3s2id d7sida ds5ident d4s5ide4o3 ds3idr d7sil ds5ind d3sir ds3i4s dsi4ve d4s3jen d2sjo ds7jor ds6ju ds5kab d4s3kan ds3kar d4skat d1skj ds5kjen d6s5kjøt ds1ko d5skot ds3kro d4s1kv ds1l ds5la. ds5lan ds6lem dsli6k ds6lo. d9slott. ds4luk ds3ma d6smo dsmå6la ds3ne ds5no ds1o2 d7somst d4s5os d7sot ds1p d3spek d3spel ds2pi d9s8py 6d7run ds5s4 dst4 ds3tak d4s3tal d3s8tar d5s4tat ds6tau dss8t d8s9te. ds9teik dste6ma. d6s5temp ds5teo d3s4tig d3s4tik d5stilli ds1tj d3stor d3stri dstu8na d5stund ds3tv dsty8e ds3tyv ds1u2 dsure6 d5s6us d6s7usk ds1v dsva8ne. d3s4vet dsvi6ka. d5syk d3syn dsy6na ds1yt d2s1ø d6sør ds1å6 6dt. d3t4a dta6la. dta4le. dta4s d3tem dte4ma. dt4eng dterle7 dte4se. d5t4et d4tg d3ti dt6j d7to d5t4rag d6troc d5t4rø d6t1s2 d3t2va dtø8 dt6øk dtørs3 dtå4 1du dub5b dub5l du1c du9ene du9ens due5s 4dufo 3dug 4dugu duit6 du6ka. dul5l 4duly dums2 du4na. dun7de 4d5uni dun5s6 dun7sta 7duo d3upk dupp6e5 3dur du6ra. du6re. du6rei dur8ta du1s du5s4a du9sem du5s2i du2sk du2sl du2sp duss4 dust4 du2sv 2d1ut d6utt du6va. du4ve. 2d1v 5d8va6le dva4ne. dve6s dve6va dve8ve. d7vo dvo8r 2d1w 1dy dy9a 2dyba 2dyf dy5ke. 4dykl 4dykø 2dyl dy4na. dy4ne. 4dynk dynk6s5 dy3pes dy2p3r dy4ra. dy5reba dyrle8ge. dyr5s4 dy2r5u dyr5ø 7dys. dy8sa 4dyse dy6se. dys7s dyst7r dy2t d5z 8dz. 1dæ dærs4 1dø 4dø. død2s1 dø3gr 2døk d5økn dø4ma dø4pe. dø4pen d2ør dør3i 2døs d6øs. dø2st3 døt3 dø9va dø3vel dø1vi 6døvl døv8le. 2døy. døya8 døy8g 4d9øys 1dåd dåd6s5 då8na. 1dåp då8ra. då5ri d3ås. då8sa. d8åse då7sem d7åt. 2ea e1a2b e1ad ea2d1i eadli5 e1af ea2gu e1a2k e4akr 6eakt eak6se. e1al. e5alle eal8le. ea4lov e3alte ea2lø ea4m1 e3aman e5amn e1an e2an. ea4ne. e6a5net e4ani ean7n ea4nor e6ans. ean3sl e1ap ea4pe e1ar ea2re ea5rer ea5ret ea5r4i ear6ka. ear8ma. ear4ta. ea2s1i e3asp e1ass ea7ta e5a4tel eate6ren ea4t3et eat8h eat6le e8ato ea5tri e1att e1au eau6ga eau6ge. eau8ra. eau6re eau5s eau8sa eau8se. e1av eav8la eav8le. 2e1b2 eba3d eba4ne. eb3be eb4be. ebe4d3e6 ebei7er. eben6s5k ebers6 ebesku5 ebet5s eb3h e5b6lo eblæ5 ebob3 ebo4da ebo5ers. ebo6kr ebo6la eb5s ebu4e5re ebu5ern ebu6et eby4ta ebø6n 2ec e4ca ec4c e1ce e5cha e3com e2dad ed5ad. e5d4ag edag4s5 e2dar ed3ark ed3arv ed7dela ed4dyr e3de. ed5e6ge ed5eg4n ed3eie e4deks ede8le. e4denf e8d5eng eden5t e6depr ede4ra e4derø e4desk ede4sl ede4sm e4desn ede4s5p ede4ta e6d5ett e8dé e5d6ia edi6a5ne edi4ene edi6gj ed4is edi3si edi4s5k 3e4dit e7div edle6ge. ed8ob edok8se. e4dol ed1op ed1ov e1dr ed2ra ed3reg e5drev. ed3rom e6d5ryg ed7ski ed3skr ed3s4la ed2sm ed5ta ed3te edt6r edu8a ed7va edvi6s e3dyk ed5ynk edyr6ke. edæ4 e3d6ø1r e3e2 eea7 ee3b e2ed ee3di eeg4ga eeg6n ee5gå eei4d eei7ni eek1e eek4te ee3la e5e4li eem6na ee4n e5enb een3in e5en6k een5t e3epl ee8ra eer3en ee3ri e4er3l eer4me. e6e5sh ees8ka ees6ke. e3e6t eev4ne. e1f 4efa efal6s7 e4fana ef3ank e4fark efar6s5 ef7ea ef5ef ef3fe 3effek ef3fo 4efi e4f3id e5fig e5f4ilm efi7ren efisken8 4e3fj 2efl efle6ge. eflå3 e2fn efo8bi. efo4no 8efr ef2sj ef2sk ef2sp ef6str e8ft ef2ta efta5r eft5ei ef5ter eftle8ge. eft1s4 6efu efyrs5 e3fæ 4efø efø5le eføy9 2ega e3gaf e6gala e7gam ega4ve. egde8l eg7des e5gedo egei9e ege4let e2gem e3geme egen5s 3e4gensk e7geom e2ges2 ege5sp eg9gen egg3l eg8g9ut egi3an egie2 e4giko egis4p e3g6lad e3g4led eg7lesa e5g4lit eg7ly e5g6lø 6egm e9g8nag eg4nem eg6no e7gnå 4ego e4go. 7egoi eg2r egrans5 e7g8rø egs4am egs4ki egs4ta e1gø egøy6e5ne 4egå egå4va egå4ve. e1h ehea4 ehei9e eh5er. e4h5ere eh7ern eher4s ehog5 ehov2 ehy6re. ehø8va e6hå. 2e8ia e9iakt ei9a4n ei7ar. ei4c e8id. ei3d8ar e3idea e3ideo ei9der ei5det 5eidf 5eidg e6i2do e1idr ei3d4u e8i7e eie5d ei8eg eie2n ei9en. eier3a ei4ert ei6es ei1fl 8eig. ei3ga eig6e ei6gev ei5gi ei6gra ei6gu 4eii ei5kaa ei3ke. ei6kee ei6keh ei4kel ei6keri ei4ket ei1kr eiks3a eik6se eik4so 4eil ei9led eil5egg e3illu ei3lo. ei9loa eil5op ei5los eil5s6 4eim ei7ma. e5imag ei4m5a6l ei4med ei6mei ei7men ei4me5s ei4met eim9ett ei6mo 8e1imp ei4n3al ei4nans ein5ant ei7nare ein1d 4e3indu ei5ned ei7nel ein9f einga6 ein3gr e4ini 6ei6nit ein3k4 e5inkar 4e1inn ei4nom ei4nov einsi9d ein4s3l eins6o e4inspi ein7sto ei2n1u4 ei3num 6einv ei2n3ø ei5or e4ip ei9pa ei3pe eip5s 2eir eir9ak ei7ren ei3ri eir5s 2eis ei5sar e4ise ei3se. eise5i ei3sen eiseri9e8 ei3s4ha ei4sil e3isk. e3iske ei6s3kj eis3ko ei3s4pe ei4spi ei4tek ei4tera ei4tere ei2to eit7ta ei6t7ut ei3tve ei6t7ø ei4vak eiva9r ei9ven ei3vi eiv5s4 e1j ejo8en. eju6la 4e1ka ekali7 ekalie6 ekam6s5 eka6ra. e5kavr ek3eie e4kero e4kes ek5e4ta e6key e5k6hov e1ki e4ki. 4e1kj 2ekk ekke7le ekk9ist ek1kj ek4kjø ekk3l ek5kok ekko5v ek6ku ek4ky e1kl e8klane ek6leg e6klen ek5let e3klu e5klæ ek2lø 4ekn ek9na. e3knek ekne7s ekni7p ek3no e3k4nok e1knu e5knø e1k2o e4ko. eko7le ekords8 eko6te. e4kov 2e1kr e3k2ra e3k4red e7kref e3kren e4k5ret. e5krets e5k4rev e3k2ri e3kro ek4ry e3k4rå ek5råd ek3s4ak ek4sal 3eksam ek3sel 3eksem ek4sig eks1k ek4ska ek8sn 1eksp eks5pe ek4sta ek7s6tel ek3sti ek4stil ekst5o ekst3å ek4sæ ek6t7arm ekt3av ek3tef 5ek3tep ek5tes ek6test ek4tid ekti5m ek5tiv 4ekto ektori6a ek4t3ra e6k6t7ro e1ku eku4le. e1k2v ek4val ek6var. 6ekve e4k5ve4d e4k5vik ek4vin ek6vis 3ekviv 6e5kw e5ky eky6te. e3kæ e1kø e1kå ekå6pa 2e1la ela4ga el3agg e2l1ak e5lake elak8se. el7akt el1al e8lame el3anl e6l5arg e4larr el7arti e5las. e5lase ela4te. el5ato el5avl el3avs elbo8da el4ch el5do eld4rer eld5sle 4eled e4ledi e4ledr e3lee eleg5d ele7ger eleg8na e7leir e7leis e5leke e2lel e2lem e5lem. e5lemat 5elemen e5lemet e3lemm e3lemp 4elen ele9na e4l5enh elens3 e4lentu e5lepa 2e3ler ele8ra. e7leret e6l7erg ele3sk e6lesku e4leta e4lete 5e8lev. ele4vak 6e5levn el5fi el9ga. el5gele el5gi elg3s8 2eli e9lie eli5e6rer e4lif e4li5g4r e4l3ind elin5es e4linsp eli6o5s eli8ta. eli4tet 6e5litt eli6v7en el1j elk2 el6k5al el4ke5s el4kete el3kn el5la. el5l6ar el4led el4leg ell5eie el5ler el3le4s el6lete elli7ga. el4lisj ell7sa ell5sk ell5s4l ell5sp ell5sv el5l4ur el4læ el5m4o el5mu el5n 2e1lo elo6ka. e2lom e3lomm el3omn el3oms el1op e2l1or e3lort el3ost el4ot elo7vers. e4l5ovn el4pet el5ph elro4s el4sei els5eie el3sen el3se6s3 el3si el4sje el4skal 7elskand els5kare els1l el6sno el4spe el3spr els4ten el4sti el4stj el2sø els5øk el5s6åpe elta8le. el5te. el6teg el4tero el4t5ett el4t3op el4tro elt5rop el2tu e3lua e1lu2e e4lu4he e3luk e7lum el3ung elun6ge. e7lup elu8pe. e1lur e7lus el3utr elv3an el4ve3d el4vei el6vere elv1r 5elvs. elvæ6re. 4e1ly ely8et. el5ynd 2elæ elæ5res el9ærv e6l5æt 2elø e4l3ø4r el3øy. el5øya el5øyd e6l3øyn 2e1lå el1år e5låt 4em. e2mad emafo5 ema4ge. e4magr e2mah ema4ke. e4mako em5akti e4maku ema6le. 5e4malj e4mam e4mana ema4ni. e6manu e4mare em7ar8m e4masi e6masku e4mata ema3uk ema5ve 5emball 3embed embe6r5 3embet 6emd 8eme emei9e eme4li e4mend eme5tri eme6trisk em5e4v e4mib emi5ert e4mig 4emin emi5ni emini6st e4minor e6mir emi9sa em7je e5mju em5le emle6s em5me. em5men em8mi. 8emnd em4ne. em4ned em4nem 6emni emo5nol em1op e2m3o4v em4ped em6peri em2p3l emp9lane. em6pli empo3 em4pol em4pos em4ses emse8te. em4s5ju em4s1l em2sn em4sor em1st8 ems4te ems3u emta8la em4til e3mug e2muk e5my emy4k 6emø emø8r e5møy emå4la emå9lan emål4s em1å8r 2ena en1ak en3ald ena5li en3all en5and e5nane e6n7ang e4n3ant e5nar. en8are e4narr en3ass enat6s5p ena2v en3avi 4enb enbe9na en4d5and en4dek en3del endelø7se en5demi en3der en4desl end5l 1endr en4d3ro end3st en7dø endø4r endør5e en5egg eneg8ga en3eie en5eks e3nekt 4enem 2enen en5eng 3energ e4nesk 4enev ene7ven eng6a en7gar en4gem en4geri enge6r5u en4gle eng4les eng4r eng3s4e eng5so eng5sp engs4ti en4gut en4g5å 4enhj e4ni. e4nierk e2nif e5nir en4kera en4keri 2enna en9nal 2enne en4nem ennes6t enne4s5v enn2i enn2o enn4sj enn5sta enn7ø 2eno en3ok en3og e8n7old en3om. en1op e6n5ord 2enp en4pås en4rem en5sab ens5af en6s7a6ker en4sek en4seli 5ensemb en4ses4 ense3u en3si ensi8de. ensi5ert en4sim ensle7g ens6lev en7s6opt en1st en6s7tal ens4ter ens4ti ens7und ens4ve ensvi6 en2sø ens3øk ens7å en5ta. en4tap en5te. en4tec en4teg en4tel en3ti en5tie en5tig en5tik en9tima en7timen en4to4r ent5ori ent5rab en4tre ent5ren en4t5rol entropi5 en4t3rå en6tul entun6ge. 3entus 2enu e2n7ul e4n5ur 2en3v 4enw e4ny. e2nyb e6nyr e2nys e4nyta 4e7næ enæ8m enø4k e2n3øv en5øyd 4enå en1ås en6ås. e3o6 eo3a e6obe eo2bl eo5d eod8de. e1og1 eo7gr e2o1i e2ok e3oks e2ol e4o7lo eom1s4 eon8de. eo5ne e7onk eon4kl e3ont eo2p eo3pa eo5pl eopo3 eopp5r eo3pr eor4da eo9re e2ori eo4rid eori5e6 eo4rik eo4ris eo1ro eo1s eos6l e2o1u 2e1p epa3t e6peno epe6p eper5r e3pes epe4st e4peta e6peu 3epid epi6ka. epi7kr 8e7pin 3episo ep2l e8plen ep5lene ep5ler eple9s6 3eplet epo6et 3epoke epp2s ep6sem ep4ses4 ep6s5lu eps1t ep2su e3p2sy ep6tin ept6r 2e1ra e4r3abb era8da. e4rael e2raf er3aft e4ra4g e2r1ak e3rake era5kl eral3u e4rama era6na. e5rande. e5ra7ne er7anli era4no er5ape. er5aper er5a4pin er3apo er5appe e5rar. e4rarg e5rasane e5rasar e4rasje e4rask e6raso e4r3ass er6ast e4ratek era7tor e4ratr er5att e2rau er5auk erau9ken erau8s er3av. er3avh er5avl e3ravn er3avr er3avs 4erb erbi9ti erbo8da erbo8de. er8byl erd2e er4ded erden8s er4dis er1dr erd4ra erd8re erd4skj erds3t erd4sto erdsto8ga er3d4v e1re er3eff er3eft er5e4gen er3eid er3eie ere6ka ere6ke. e4r3eks e6r5ekte e4r3e4le ere4lit e6relli e4r3els e9rem. e5remm er3emn er5enden e4r3eng e4r5enh e3re4o7 er8er. e4r3erf e5reri er3ess ere4t e5ret. e4r3eta eret6h ere5to e7rets 6erett eretts5 e4r3e4va e4r5e4ve e4r3evn erev6ne. e8ré 5erfari 6erfi 4erfr 2erg erg5elv ergi3f er6gli er4go. erg5ret erg5sko erg5sp 2erh erhø6re. e1ri e4riad e4riak erib3b eri3bl e4rice e2rid e5rid. e5ridn eri4kat e6rikn 4eril e7ri6ma. er3ind e3ring 6eringar ering6si er3inn er3ins er3int e5riori e5ris. e4risa eri3se e4riso e6risp e5rist. e7rista e5riste eri5stil e4ri5s6to eri5sø e4rite e4rito er7ivo er7jes. 4erka 8erke erkeri6e er4kesa er4kese er4kete er6k5ett 3erklæ 6erkn 4er5k4o 4erkr erland7as erle6ge. erle7s8t er3me ermo8de. erm1s ermå6la. 2ern er4nad er4ned er5nede er6nee er4nero er4nest er2no er3nob 2ero e3roa er3obl 5ero4b7r e1roe er3off e1rog er5oks e1rol er3oly e1rom er5omk ero5mo e1ron er5ond erono5 er1op e5rop. e7ro6pa e5ropen er1o2r e5ror. e3rore e7ro4sa 3erosj er3osl ero4ta er1ov 2erp 2err er3ra er4rae er4rel errie9n 6ersa ersa8ka ers6al er3sep 6ersj er1sk er3ska ers4ka. er8skaran er9s6karar ers5kor er1sl ers4la ers6led ers4mi er5sne 6ersp ers5tens ers5ter er7stev er1su 4ersv er4sva ers4ve er1så er4s5år 2erta er4tare er4te3s4 er5tia er3tib erti4e er5til erti4mo er4top ert5rol 4erts ert3sa erty6e ertå7ren 2eru e1rua e5rud3 e1rui er1u2k e3rum e4r3ung er3uni e3rup. er1u8r erure8 e1rus er5ut. e5ruta e3rute er5utn er9uto e4ruts er7u6v ervele8 6ervi ervs3 ervæ6re. e1ry4 e2r3ya erye7ne er1yr erys3 e1ræ e9r4ære 2e1rø er5økn e4røko er1ø4l e4r5øn e5r6ønn erø8ra e6r5ør6s er3øya e4r5øy7e erøy4n e4r5øys. er7øysk 2e1rå e9rå. erå4da erå8de. erå6e erå4k er5åke er3å4l e2r1ån er3å4p er3å4se erå6t er7åta9 e6råv 2es. e1sa es5aa e2sad esag6 es4al esa6la. esa9met e4s3ant es5arab es5arv esbi9e es8ce 2ese es5ege es3ei4d es5eie. es3eig esei8ge. e3sek e4seku esel5s4 e3s2en e5ser. e5sere e5seri e4s3erk ese5s2 e3sest e4sesv ese5tas ese4te. e5setj e9sets e4seu e4sha es6har esh9ar. es4h5er e4shi e1sho e7s8hop esi6ar esi5ert e4sil e5sili es3ill e4s3ins esi6v esi3st es3jor e5skab es6ked es4kee es4ker 8eskil e4sking eskinns5 e1skj e8s9kjer. es4kjæ e6skjøn es5k4n e5sko. es7koa e3skot e1skr e1sku esku5et es3kvi e5sky e6skyr e1skø e7skå eskå7r e1sla es4lek es4let es7let. es7lets es4lit e4s5lok es4løk es4løv es4make e7s4mett es9na. es4ner es2no es4nu es2ny esnæ5re 4e1so eso4b e2s3od e2s1of es3oks e2som e3somm e4s3ori e1s2p espa9ra es3pas es5pe. e4s4ped es5perm es3pl es4p5le es3pol e3spor es3pun es4sed es4see es4seg esse7i es6sendi es4s5enk es4ses es4sete ess5e4va es4s3ja es4sje es4skr ess4let ess3om es4sos es4spa ess5tilt es4stol ess5tor ess9tua ess5tue esstu8en. 4essu es2s1v es6s5å e7stad es5tae es7takt es9tala e8stane e5stans es5tant es3tap e5start e3stat es5tato e4s3tau e7stav. est5avs e6s5te. es4teg est5eie est5eig es4tek es4tel e5stell es5tels e4stema e6steme e4stemo es5temp 6esten e7steng es5tenk e8s7ter. e5s6terk esterne8 este3s4 es4test es4tien e3stif es4tig e3stik es4tikk 5e6s5tima es4tis e4stiv e1stj es3t6on e4stog e3stok e3s4tol es6tone est5ord est5ori es5trak est5rene est5rer est9ré es5trib e5stryk e3strå e1stu e5stud es5tus 8estå estå5ren estå6s est7åse e1su es5ut esva5re e5s4vek es5vig e5svikt es3vis 2e3sy esy4na e4s5yt es5øvi es7øye e1ta 4eta. e4tae e2taf etafo7 e3tak e6tako e3tal eta3la eta4la. et5ald 8e7tank eta5le 4e5tall etal6list etall5s6 etal4s7 et3amb e6tand eta4nen et4ap e9tapa e5tape 3etappe et8ar. et8are et5art 5e6tasjes 1e2tat 4e5tati e5tato e3tatt et5aun e8tax et1c 2ete e4teie e4teka ete4ma. e5teran ete5ru etes5i e4tesl et8et e5tet. e7tets 4eté 4eth et6her 2eti e3tit 2e1tj e7tjer et3jø 6etl et5m 2etn et6nev etning4 etnings7 2e1to eto4er et5oppd et3ord e4tot 2e1tr e5t4rad e7t6rak 8etre e5tree e5tref e4t3ris e9tru. et5rum ets1 et9sar. et4sku etsku8le. ets7l etsla8ga etsnæ4 et2sø et4tak et4tal etta6le. ett5alt et4tank et8tap et5te. et6tei et6telt et4tenk et4tenn ettera4 etter5at et5t6erf 5etterk 5etterr ett5esk 2etti et6tia ettian8 et4til et2tj etto5a et4tr ett3re ett4ski ett4sti et3tug et4tur ettvi5se et2ty 2e1tu 5e6tui etu6na et3uni 2e3t2v e4t3va e5t6vang 2e1ty 4etz 4etæ etæ3ra e1tø e1tå etå5re e1u eu4a e8uf eug8la eu4h eu4ka. eu2ke eu5kem eu7kr eu2l eum2 e3u2n eun4ge. eu5nu e4up5a e6upk e2ur eu6rat eure4 2euri e3urn eur8na eur6ne. euro1 3europ e3urt e2us eu4si eu1ta e3uts eut7t e4u3z e1v evad6r ev5akti eva4la evann4s e4v5anta e4varar e4varb e4v5ark e6vatf 6eved eve5d6a eve5del 6eveg e5vegg evei6s5 6evenn even5s 5eventy e4veny e9ver. e5ves. e5veta e5vev. evi4e evi5ere evi5ert evin4s evi4se. evis3t e2vj ev2na evn5a4k ev7nu ev7oms e4vre e7vri. ev9rå ev1s evs8v evta8la evti4 e2v3un e5vyrk e2vø ew3a ey1 eybal4 e1y2d ey5k e1yng e1yr eyr6ka eyr4ke. e1y2t e7yti ey3tr e3zi e1zu e1æ2 eær3 e1ø4 eør6na. eøy4 eøy9an eøy7en e1å6 eåk4 eån8da eåt8t é1a é1b é1d édø4r5 é5e8 é1f é1g é1h é1i é1k é1l é1m é4n5e é5n6et é5o é1p é1r é2rj é1s ése2 é1t é1v éva8la évo8re. é5å è1r è2red è2ref è2rek4 è4rener è2rep ère3s2 è4rest è2rev è6ves ê8lan ê6ra ê1re êr7o êr9sl 1fa 4fabo fac8 fa1ci fa3de fa6de. 6fadm fa4f fa2g1a fa5ger fage4t fag5eti fa2gi fa2go fa2gr 6f5agro fag3sk fa2g1u fai5 2fakr fakse9t fakta3 fa1ku 5fal fa1la fal6kes fal4k3l fal6lers fal5m fa4lo fal4sk 4fa5mo fa4na. 7fan5d 5fane fanfa5 fang4s fangst7ev 4fank 2f3anl fan5s6 fan7tesk fan5ti fan3to fan4try 6fanu 2fap 3far 9f8ar. fa3ra fa4ra. fa4re. fa4res far4gel far4ges fa4rit far5n far6skj fart2 far4vel 4fary fa7sa fa4sel fa4seru 2fasl fast3r fa3tal fa4te. fa6t7ers fa1to fat2r fa3t6re fav5ne fa1vø 2f1b fba4ne. 2f1d 1fe 3fe. 2fe1a4 5fea. fe5a6l 2fec fe4da 3fede fe2dr fe3dra fe3d4ri fe7ene 2fef 2fe3g 2fehj fei9en fei9er feig4de fei5ge feil5es fei4li 9fein. 7feine fei7ter 8fej 2fek4a 4fekl 2feko 4fekr fek6tes fekt5ev fe5lag fe5len fe5li feli7e6 6felik felles5 fel7læ 2felo fel5ok fel9ta. fel4tek fel4ti fel4tra fem5ak fem9b fem9ne fe4mo fem5s fem4tid fe2m1ø 5fen. 4fena fend9r 4feni 5fens fentleg5 2feo 2fe3p2 5fer. fe6ral 4feram fe5ras fer6at fer4dam fer5de 4ferea 4fereg fe4rek fer6en fe7rer. fer5ers feri6e feri8e5ne 7fern fer2r fers9kar fers7ke 2fe1ru 3fes. 2fesi 2fe1sk fe2st fes9t6i fes8t3r fes9tum fe6st9ø 4fesy fe6ta. 4fetap fe4te. 4fetea fe5ti 4fetil 2fet6r fett5j fett7s6 4fe4ty 2feu 2fev fe4ven 2feø fe6øy. 2feå 1fér 2ff f7fa. f4fab f2f3a2g f4f3ak ffa7l f6fann f4farb ffar6d ffa7re f9fas f6fat f8f9au f2f3av f2feb f2fe3d f2fee f6feh ffel7t8 f2fem f6ferdi ffe4rer f2fes f4feti f4feto ff5eve f2fib f4fice f2fid f9fien f4finn ff5int f2fip ffi5s4 f2fj ff3la ffla8ga ff9leg ff5lek ff3li f2fo ff4ol f2f3re ff1ro ff5sl ff5t4 ffu6r f6f7ut f3fæ f4fø 2f3g2 2f1h 1fi fia7l fia4n 4fiap fi4as1 fibi6en fi9cen fici7 fi7di fie2 fi1er fi7e6re fi4f fi5fi fi5fo fi7fl f6ig figh9t fi7g6r 4fih fi9ka fikali7 fikalie6 fi7ken fik6ka fik6k5n fi5ko fik7sa 4fiku fi4la. fi3li fil6lel fil6leri fil4les fil7leti fil8m7at fi1lo filt6re fil7tres fil4tri 4filæ fin5art fin5d fi4ne. fi5ner fing3r 6finj finn5ei 6finnsa fi4n3o fi9nor 2fins fin6sleg fin6te5s fi2nu 7fio5 fi2r fi3ra fi6ra. fi9rene fi5res. fi3ri fi5s4a 4fisc fi6se. fiser6s fi8si. fi2sk fi6ska fisk5a6d fis7kal fisk5and fis6kart fis6k5end fis4k3l 6fiskol 6fisku fis5ti 6fistu fiti6me. 4fitr fitt5s fi7ty fi4ve. 1fj f1jeg fjel6lend f5jen fjer5ne fje4sk fje2t3 f5ju fjære5 fjæ4res8 2f5k6 f2l2 f5lag. f6lagg fla7ke f4las 2fleg fle6i f4lek f6lel fle6r5u6 fle4sl f4lett f3lev fli7ne flis7t flit9t8 1flo flo9ga flok9s flo2m3 flo6r5o flos6kl f6lu flue3s flus8 fl5ut 3fly fly3s4 f3løn flø5s 1flå flå9sa flå7se 2f1m fn6 1fo 2fo. fo9ar 6fobs 2foe 4fof foi7la fo8ke. fo6la. fol4dr fo4le. fo5led fol6k5v fol9ler fol5lese folke5s6 fol5li fo4lu 3fon fo4na fond2 fo5ne fo3n4id fo4nin fon1s2 f1op for1a for9drev for7dro for5d6u fo6re. for9ei for7e6n for5ent for5ess for4et for9e8te. for9e8ten for9g6 forh6 fo4r9in fork8 forlo7v forlø9pa forlø9se formo9r for3n foro6 for5p4 for3se forsi9da forsi7de. for3s4m fors8t for9ste fors4v forta8le. for5t6e fortei9e for7t6i forti5da for3t4v for3u4l for7v6 forva9re fo8r5æ4 for5ø4 for9å fo9se fosfo5re 4fosj fo4ta fo6te. foto5 fo4tok fo4tom fo6top fo4tor fot3s fots6v fot3t 4f1ov 3fô 2f3p2 fpo6e fr2 1fra fra5l fra4m5e fra6mi framma8ne. franko5 fran7se fra7r8 fra1s fra5se. fra7sep frasi8e fra7sk fras6p fra7v fra7v6r f2re. fred8sel freds5t fre4e3 8freg f4rek fre4m5 fremma8ne. frems4 fre7ne fre6sk fres7ko. fres5koe fre8s9v fri5a6re 6f5ridi fri4erf f1rin fris6ka fri5s4p fri5s6til frite8re. friti8me. 6froc fro7f fronta9le fro8st frus1 fruta6le. f1ryt frø5b f4røk frø7ko frå9r fråve4 2f1s fs2h fsho6 fsi2 f5sjuk f2sl fsle6ge. f4sm f2sn fs7ne8 fs5ov fs2t f2s3tab f6s5tan f4s9v 2ft f1ta f3ta. fta7f ft1ak fta8la. ft3alg f2t1am f4tana f7tane ft3anl f5tar. ft8as4 f6t1av f2tea f3ted f4tee f2teg f2tei f2tek f6tem fte4na ften3d f4t3enh ften5s6v f2teo fte4r5a4 f4terin fter5s f4test f4teta f4t5ett f8t7id ft3ind f2t5i4s ft5l ft7n f2t1o2 f5tog 3fton ft3r fts5alt fts3ei fts5ers fts5erv ft2s1i fts1k ft2skaf ftsla6ga ft5s4lan ftsle6ge. ft3sto ft6s5top ft5s6tri ft5stø fts1u ft2s1ø4 ft5t4 ftta8ka ft1u 1fu fu8ga. fug9le. fug6l7eg fu6le full3 ful9lar fulle6 ful9le. ful4len fullen8de. ful4ler ful7les fullfø7re funn2 funns3 funnsla8ga fu6ra. fu6re. fu9ret fu7ro furu1 fu7sel fu6sk fus6o7 fu4s5t fut4h futu1 4f1v fva8la 1fy fy5la fyr2 fy8ra. fy4r5a4b fy1re fy4re. fyr7k fyr8ke. fyr5t fy3s fysa7 fy8sa. 2fæ1 1fø fø4da. fø4dek fø5den fø4des fø5des. fødsel8s7 fø1f 2føk fø4le. f8ør før6a fø5rar fø4re. fø4res fø7resv fø8rete før6tin 4få få7ren få7ret få5ri får7u få7va 1ga 4gaba ga1bo 6gabø ga3da ga4ded 4gadg 2gadm 4g5adr ga4e5k gaffel5 6gaflo g3aft 6gah 6gak g1aks gak8ta. gak8te ga3kv ga1la ga4la. galei5 ga7len gal4les 4galli 5ga7lo ga4ma. 4gamb ga5mer gamme6l5 6gand. 6ganden 9gane gan5g6en gan4g5j 4gan5k 2g1anl 4gann 4gansa 4gansv 4g5antre ga6pa. ga4pe. ga4p5l gap3s2 ga6p7u 9gar. ga6raf ga6r5ak 2garb 5garbr 5garby gar4dek 7gare. 4garea gar5es gares6ke. gar2i 4garki gar3ne gar6ta. g5arte gar8te. g3arti gart5s6la gar4un ga4ryl ga4sc ga5s2i gas8ka. gas8ke. ga6ski 4gasp gas6sel gas5sen gas7ser gass5ett gass3l 5gast gas5te ga5sto ga6s6t6r g2at ga4te. ga5tens gate5s ga3ti ga1to ga3tr gat6tap gau5la. 9gav. 2gavd 6ga4vei ga4veri 4gavg g5avk 2g1avs 2gavt 4gavv 2gaw 4gaø 2g1b gba4ne. g6byk 2g1c 8g1d gd5alt g6d5au gde3a g2deb g3deba g4dedi gde5lo g2dem g4dend g2de5o g4dera g4de5re g6dero g2des g2det g3det. gdevi8sa gd5op gd1or gdy4d g6d1øy 1ge 2ge1a geak8ta geak6te. gea7ren ge4ark 2geb 6geba 4ge5be 3gebri 4gebrå 3gebyr ged4 4gedan 6gedel gedia5 9gedom. 7gedoma 9gedome 7gedomme 6gedoms 4gedos 2gedr 2gedy 2gedø 2gee geen8de. 2gef g5eft 3gefæ 2ge1g2 g5egg g3e2gn 2geh gehø8ve. 2gei g1eie g4e1in gei4r3 gei9re gei8s7p gei6st5 3geit geit3a geit3o gei4t3r 2gej 2gek2 ge9kl ge3kn g1eks 6gekt 5gel. ge4lar 4gelau ge6le. ge7lea 4geled 4gelei gelei5er 4gelek 4g3elem ge5len. ge5lens 5gelet gel5ett 3geli 4gelid 6geligg 4gelit 6geliv 2gelo ge5lov 7gels4 gel3se gel5si gelsk7l gel5t4 4gelu ge5lun gel7ve 4gely 2gelæ 2gelø 2gelå 5gem. 2gema 9gema. 2gemi 3geml 4g5emn gem6na 2gemo 9gemr 3gems 3gem4s5t ge3mu 2gemy 2gemø 2gemå g2en 3gen. ge2n1a ge7n6am gends6t ge3nea 4genem gen5erf ge5nes gene4t gen5eti 4genev gene5ve. gen8ga. gen5gr ge4ni6n 6geniv gen5k genle6ge. gen3n gens5l gen6sun gen5tr 4genum 4geny 4genæ 4genø 2geo 5geog 3geol geome5 geomet4 ge5on 6geop ge9ope 2gep g2er 3ger. ge5ra. ge6ral ge4r5ant ge9ras ger5di 4gered 4geref 4gereg 4gerek ge6rene 4gerep 6gerese 4gerett ger4i5d 4gerik geri8ka 6gerike ge4rim ge4ris ge4rit ge4riv gerle9g g9er8ma. ger3n gerne6 4geroa 4gerom. 4geromm 6gerop. 4gerope ger5p ger4s5af 5gerud ge5rup ger5v gerø6re. ge4r3ø4v 4gerå g6es 5ges. 2gesa 2gese 5gesen. 5gesens 4gesi 4ge5sja 4gesje 2ge1sk ge1sl geslu7 ges4lø 4geso 4gespe ge4spr ge5spra 2ge1st 3gest. gesta7b6l 5geste. ges6tekk ges8ti. gest5rid gestri8de. 6gestå 2ge9s8u ges5vik. 2gesy 6gesæ 2gesø 2ge1så geså5re 5get. ge5tak geta6le. 6getat. 6getate 4ge3te 5gete. 2geti 2getj 2geto 2getr 5get5s 2getu 2gety gety8e 2getø 2geu g2ev 2ge7v8a 2geve 4gevir gevi6sa 4g5evn gev6ne. 4ge5vo 5gevå 2gey 4geæ 2geø 2geå 1gé 2g1f gfe2l 4g1g g6g5al gg5ask g2g1av g4gedi gg1ei g4gela g4gele g2gem g4genu g6gerei gge4rin g4gerø gges6b gges5l g4gesm g6geso g4gesp g6ges6tio g6ge5sv g2gev ggie6 g4gif g4g5i4m gg4je ggje5s g2gl g7glu g4gn g2g1o2 g3go. g5gos gg3rad ggra6da gg5rat gg8re. gg3red gg7rek gg5s4par ggs7s gg3sto gg4sy gg3sø g7g8ud g4g5u4r 2g1h ghe8n ght5ene gh4to ghæ8 1gi 3gi. 4giak gi1ar 4giarb 6giav 2gib gi8c 2gid gi3de gi1e 4giek 3gien gi9end 5gier 4gifa 2gifo 4gifr 4gifu gi6ga. 2gigr 2gih 2gii 5gika 3gike 4giki 3gikk gi5k4r 4giku gi5le 4gimess gi4metr 4gimi 4gimø 2g1ind 6gingeni gi4nin 2g1inn gin5nu 4gino 4g1ins 4g1int 2ginv 4gi5om 2gi1op gio4r 2gip gip5si 6gira gi3re gi4re. giro3 gi6rob 5gis. 2gisa gi3se 4gisel 4gisen 5gisk 6giska gis8lu gis4lø 4giso 4gisp gi3s4pa gi5s4pr giste6ru gis5ti gist5ra gi5stré gi6st5rer 4gistu 6gisty gi5ta 4gi5te gite4s gi2t9r git5te 2giu gi7va 4gival 4givo 4givu 1gj 8gjag 2g1jak g5jarn 2gjaz gje5f 4g3jeg gjels4 gje2n gjen7n8 gjen1opp3s4 gjen5s8 6gjent 3gjer gje7sk gje4s3p gje8v9ak 2gjob 2g1ju 7g6jut gjø9de 2g3k2 gkly9 gl2a 6gla. gla3de 4glag gla4ga gla8ge. g3land g1lar gl5art glar7v 1g2las 7glase gla6s7k g6lass 6glast g5last. 3glat g5lau gl6e gle6dero 4g3lef gle3ge gleg8ga 6glei glei7er. g2lek g7lek. g5leke g2lel 3glemt 4glen g9len. g9lene. g9lenes g9lens gle9pl 4gler gle4ra glere8de. g9les. gle6se. g4le5sk g6le7sm 4glet g2lev 1g2lid gli4del gli7e6n gli8er glig1 3g2lim gli9me 4glio glitt4 6g7liv 4glj gl7ja gl5l g4lo. g2loa 5glob 5g6lome 1g4lor gloria7 glori6an glorie7ne g4los glo5ste 6glov gls4 8glu 5glug g5luk 6glun gl5ung glun8ge. gl5ut g5lyd 3glyf gly4se. g2løg glø8pa 2gløs gl7øy. 5gløym 2g1m g4mete g4metr g5mé gmini6 gmo4e g3mu gmu8le. gmå6la g1n gn1ak gna5lem gna4lo g2nav gn1d gndø6 gndør5 gn4e g2nee g4nelo g6nero g6nerø gne1s4 gne8se. g4nesk g4nest g5net g6netr g2nev g4nib g4nid 5g6nik gning4 gnings5 gni4s g6ni5sk gni6st gnist9r gn5k4 g2nom gn5o6p gn7o6v gn5r gn1s gn4skr gn6sm gn4som gns4pr gn4sti gn2s1v gn5t4 gnu5re gnæ6re g2nå 1go 7goan go1ar 7goar. 2gob gobe5 go4da go5dal god5ar 2godd go4de. gods9t 2gof go9ga go5ge. go9g8r 6goi 2gok gok4se. go3le gol6fa go5lo gol4va gol6var go4lå 2gom g7o6ma 6gometris 7gomm go4n5and go9ne. go7ni go5nok gon9s 2g1op 3g6or4a5 go5ra. go7rae go7ras 2gord gor6da go1re gore8a7 2gorg g4ori gori5e6 g5orv gor8va go5rø gos3p 8g7ost 6goto got6r 4gov go8ve. go8vi. 2g3p6 1gr4 8gr. 4grab 6grac gra5ce 9grads graf5f graf5t6 gra4m5 grand3s4 gran5to grant4r gra9se. gra9set gra6sk gras3t gra5t gra8te. grati4s gra4u gra4v3ak gra7vis gravta8 2grea 4g5reds gre4en 2gref g7refe g4rega greie5n grei6ene 6g3reis 4grek 2g5rel g5rent 4grepi grep4s3 g7rese gres6sak gres6sent 6g5rest 4grett 4g5ri. grib3 4grid 4grif 4g1rig 7g6rip gri4s5o gri4s5ø gri5sete 4grit gro9ar g4ro7i grom5m g4ron gro5sk gro3ve gro6v5in 4g5rui 4g3rul grun7g 5g4rup gru7sa grus5t 2g1rut 2gryd 4g5ryg 6g5rytm grø5de. 6g5rør 4g5røv grø5ve 4grøy gr7øy. 6gråd grå6da gråk4 grå7n grå5te. 8gs1 gsa2 gs5akers g7sal. g7sale g5salg. g5salge gsam3 gs3amb gs7amn g7s8ang g3s6ank g5sard g2sas g7sast gsbø6n gs2ce gs5ef g2seg g2sei g2sek g5sekr g7sekv gse9la. gsel4s5a gsel4st g2sem gs6ende. gsen6ke. g5sens g3sent g2ser g5ser. g3seri gse4st gse4t g3sete gs3eti g9sets gs4ett gse2v gsfø2 g2si g5sider gs5is gsi2v gs4jar g3sjef g5sji g2sjo g5sjå gs4ka. g5skad gs4kal g5skall g6skam g4skan g4skapa g5skape g4skapi gs7kav g5skilt g7s4kj g7s6kjæ g3skot g5skren g7skug g6skv gsla6ga gsle6ge. gs6leri g4sluk gs4lun gsl9ut. g5slyn gs5med g9s6mert g7snel g5sog gs9ope g7s8opp g7s8oppe g5spal g3spel gs2pi gs5pik g3spil gs5pile g6s5pors g3spur gs3s4 gsse4e gs5tak g9s8tand g5stang gs4tasj g7s4tat gstatsrå7 gst6e gs5te. g5ste4e gs4tell gs5tema gste6ma. g7stemt gs4tere g5s4terf g5s4terk g5s4tern g5s4ters g5s4terv gst7evnen g5s4ti. g3s4tie g3stif g3s4tig gs5tiå g5sto. gs4tol g5stol. g7stola g5stole gs5toll gs4trap g5strau gst5rea g5strede gst5rei g5streke gs6tret gstri8de. g5s4trof g3strø g5s6trå g5stue gst5ut gstyr8ka gs4tør g5s4tå gsu2 gsu5g gs4vane gs5vik gs7væ gsy2d g7sym gsy6na gsy6t g2sø gsø6ki gs6øt gså4 2g1t g3ta gta8ka. gta8ke. gta6la. gta4le. g9t6e gte6ke. gte6ma. g3ti gti8de. g4t5if gt6re. gtråd5s6 gt7sv gt5t gtu8en. gtvek8 gty8e gt9yt 1gu 4g5u4bå gu2di guds3t gu4el 6gug g5ug6l gui4d guid5ar gu4le. 4g5ulk gul8ke. gul4la gul5o gul7ø 7gum gun4g gur2g gu4ri gur8na gur6ne. gu5rua gu3rue gu4st gu1ta 2gutb 4gutd g5ute. 6gutg g7utl 4gutn 2guts gut4tak gut4tes 4guttr 2g1v gva4ke. gva8la gvedli6 gvi8ta 6g1w 1gy g9y8a gy4da. 7gym gy3ne gyr6 gy8sa. gy6se. gy4te. gy4ve. g5æt 4g5øk gør3s 2g3øv gøy9a gøye6r gøy5n 1gå gå6as gå6en. gå4er. 4g5å4k 4gåm 4g3ån gån8da 2g1å4p 2g3åre gå2s gå3st gå9ven gå4vet h2a ha4a haba9 4hae ha2el 4hafi ha2g ha3ga ha4ga. ha3gen hai1 ha7ism ha5ka ha4ke. ha5ken ha7kera ha4ke5s ha1la ha6la. hald4s7 ha4le. ha4lev hal6lei hal6lø hal4s3k hal4so hal4s3t ha5lu hal4v5 hal5v6ar hal5v6o ha5ma ha8me. ham6nest ha5mo ham4st hams4t7r ha5na han6d5r hand7skr hand5ø ha4ne. hani1 hanis4 han2n3 han4ne han6nel han5nen han5n4es han5n4o5 han3se han4sk ha4pe ha4re. ha5rei ha4rel ha3rem ha4res har5k ha5rov har7se har5tre har4tri ha4sj hasj5e ha2sl has6p7l has5v ha3tar ha4te. hat6le h4au hau5ke. hau6st hau4t5r hav4a ha4va. ha5van5 ha4ve. ha4veg ha4vei have3s ha8v7ert ha1vi ha4vo hav4sl ha6vu6 hav1ø 4havå 2h1b hba4ne. 4hc 2he. he2a he7ans heat4r heb5n he4de. heder6s5 he2d9r hef9ta hef7tes he3ge he4ge. he2g3r he2i heia3 hei5en 3heim he3ins hei4sk heit4s he2k hek4sek hek6serin hel1a he4la. he4le. he4l5ei4 hel6lesu hel3o hel2s2 hel3sa hel4se7 helses4 hel3sk hel5sp hel5ste hel3sv hel4tes hel9ve he4mak hem5ne hem3s8k henfø5re hen5o6 hen1s2 hen5se hera9da he5ret he4ri. her5j herle9ge herli9ga 4her5n he1ro he4ro. hero9a her7p her6rei her6resi her6ret her6ska. her8s7kare her6sv her5un4 he2r3ø he4se. he2sp hes7pa hes5pel hes5pen hes9per heste5ri hes4tes he6stø het2 he4te. he5t6i het4s3a4 het4s5p het3t he6va. he6v7arm he4ve. hev9na. 2hf 2hh h5hu hi5ao hi4bak hie4n hi2et hi4f1 hiff2 hif9r hi6ge. hik7e himme6l5o hi6n7an hin4nes hins4 hins9ke hi4pl hip3p hi1ro hi2s1 hi9se. hi3sen hi5s4i 4hisk hit7o hi4t5r hit5ti hi8va. hi4ve. hiv1s hjar4 hje4 hjem7e hjorte5 hju6l7 hju7l8e 2hl h5lan 2h1m hma8n 2hn h2na hne6n hn1s h4o ho5ar. hob6 ho6da ho4de. ho5den hode3r ho5der. ho5dy hof4f3 hof4f3a4 hof4f3e4 hof5f6er hof4fi hogs6 hog6str hog7stra hoi5 ho2la ho5lag ho5lan ho4le. ho4lin hol5l ho4lom hols4 ho4lu hol7ut ho4me. ho4mo. ho4mod ho4mos ho5n6o ho4o ho8pa. ho4pe. ho8pi. ho5ra ho6ra. hor2e1 ho1ro 2hort ho4s hos5a ho5sen ho5ser ho5si5 hou2 ho1v hove5re ho4vé 2how h1p 2hr h1ra h1re hri5ne hri2s3 6h1s h5s4e 4ht h5ter htere4 h1tr ht5t hu4da hu4d3 hud5s6 hudså9re hu4er hu6et. hu4ga hu4ge. hu8ja. hu6ka. huk8ra hu4la hu4le. hu4leg hu5les hu4lev hul5v hu5ma hun6des hun2n3 hu1ru4 hus1a hu8sa. hu5s6a6r hu6s7arr husa7r8e hu4se. hu4s3ed hu2s1i hu2s5j hu2s1k hus7m hus5s4 hus1t hu8str hust9ran hus4tre hu6sty hu6s5u6 hu2sø hu4va hu4ve. hu4ves hv4 hva5le hvas5 hve2r hver3a hvi5l6i h4v4ir hvits4 hvo2 hvor5 hvor5i6 h6y hya3 hy2bl hyd4 hy2e hye5ne. hye9nes hyg5gel hy6la. hyldes7 hy4le. hyr4des hys3 hy8sa hy4se. hy2s1j hys5t hæ5g hærfø9 hær3s6 hø4e høf5 hø2g høg3ri høg7rø høk6 hø6le. hø4na hø4ne. hø5rar hø5ren hø5rer hø4res hør6sp hø2s høst7a høst5ø hø1va hø1ve hø1vi høy5a6 høy5k høy7n høy7rar høys4 høyse6te. h6å hå7a hå8le hå6na. hån8dr hånd5skr hå5nel hå6pa. hå4pe. hå4p5l hå1re hå1ri hår3s hår7u hå8va. hå4ve. ia9al i1abl ia1bo i2a3de i1adj ia5d8r ia1g2 ia2ge ia1in ia1kr i1aks iak8se. ia5ku i1al. ial1a ial5ein iale4t ial5eti ia4l5ett i2alf ial3g ia4lin i4alk ial3op ia6lov i5als. ials4t i3alt. ial1u ia2lø i1an. i2ana ia4nal ian5ald ia5nar i7andr i5a4ne. ia8nes ia7net i5ank i1anm ia2no1 i1ans ian3sa ian3sl i1ant ia7nø ia2pa i3app i1ar. iar4do iard5s4 iar4du i2are i5area ia5r6e8l i5arn. i9arns i7arska i6asi i1asm ia4sp ias3s6 i3assi i1ast i7ast. ia1t ia5te iat6r iaty6ra i1att i7auk i1av i1b2 iba4ne. ib5bo ib3bu i3bere ibe4ro ibi5er. ib7lar i2b3le ib4leg ib4le5s i5bo ibo4e ibo7n ib4r ib3st ib8t ibya7 iby9ar. 8icanarar ice5ne i1ci ick1 ick7ete i1co i5cy 2ida i5dal i3das id1av id3del iddel5u id6dep 2ide. 3ideal i2deb i6def id5e4ge i7deki i9del. id3elv 2iden i5dend iden5sv 5identif 5identit ideo3v i6derap i9de5re. i7deren i9deres iderla8ga iderle7g i7dern i5ders i6desm id6gem id4ges idi4en 1i2dio i8dj id7jer id9na 1i4dol id9ran id5reg 4i3drev 2idri id2s1 id5sam idse4 id6sel id5sim ids5l idsla6ga ids3t id4s5tu id2t1 i2d1un i2dy 3idyl i3dyr i3dø i6d7øy id7å 2ie ie1a2 i2ed i1eff ie4ge iego4 ie1i iei6d i1eie i3eig i5eini iek8l i1eks ie5l6a i2ele i5elem ie4lev i7e6lim i1els i9elt ielø8pa i8e9ma iem7b8 ie3me i1en ie7na i2end ien6dela ie8né i2e5ni ien7n ie5no i5ens ien4sk ien4s5v ien4t3r ie5nu i6eny ie4ran i4erd ie6re. ie5reg ie4r5eng i6eret i2eri ie4ril ie4ris ie4riv i2erl i6ero ie7ro. ier4ra ier4sp iers3v ier5t ie3run ier5v i2e1s i6es. ies4c ie3se ies5s ies4ti i8es6v i1et i2eta i5e4tabl i3etat ie9te ie5té iet4re ieu2 ie7ved 2if ife4s1 if2fa ifi6e ifjø8 if3le if4les iform4 if1re i8ft if4tal if4tere ifte5s ift2s i3fø 2ig i2gae ig3ann i7gark ig4art iga3ru iga7te ig3att i2gav ig3d i6geb i6gedi i6gedomm igedoms5 i2gem i3gen ige6no i5gers i4gerø i4gesp ig3e4ta ig5ett ig4ged igges4 ig4gra igg7s2 i6gh i2g1ia i5gib i4gim igion4 igje9va ig1l igl6d igli6se. ig5loa ig5neu ig5no igof6 igo5fr ig1om igo4no ig2ra ig2re i2g1rø ig3råd igrå5t igs4al ig5sel igs2j ig5s4ka ig3s4kr igs4mu ig3s4pa igst4 igs4ta ig4ste ig5stek ig7stel ig5stem igs4tra ig5s4va ig1un ig9ut i3h ihen3 iho7le. i4huk ihu9la ihu5le. i1i i5in i7is. i4is8e i6ita i1j 2ik i1k2a i2kab i5kabel i2kaf i2kak ikan9d i2kao i4kapo i5kar. i5kara ika5re i4karei i6kasa ika3sp i2ke. i2ked ik8ei i9keleg i5keli ike5lu i5ken. i4kena i5kene i9kens i3ker. i4kera i5kere. ike5ri ike4r5o i2ke1s2 ike3si i6kesk i5keso ike5su i5ket. i5kets i1ki iki9ne ik5inn iki5st i1kj ik4kaf ik6kana ik4kap ikk5arv ik4kas ik4kat ikk5att ik6k7ent ik4keru ik8kesk ik4kest ik3kjø ik4kjøp ik4kl ikk5lag ik2ko ikk5ord ik4kr ikk3re ikk5sv 4ik2ku2 ikk5und ik2kv ik6ky ik1l i5klæ i1ko i2koa i9koar i2kob i4kod iko5de i2ko3f i4kog i4koh i2kok iko5na. i2koo i5k6ord i4kore i2kov ik1r ik4rak ik5rem ik5robe ik3ros ik2ry ik2sa ik4sek iksmå8la ik7sot ik5spel iks5ti iks5to ik8stu ik4tav ik4teg ik2t1r iktsla8ga i1ku iku6le. i6k7u6t ik1v ik4vin i1ky i3kø i3kå ikå8pa i1la il5adr il7af i2l3ak il3al i4lana il6and i4lark il3art il5ass ilas5t6 ila5t il5av il4dak il4deko il4dete il7dj ild3re ildsfa9re ild3s4t ilea9r ile8are i3le7e i2lef ile4ge. i4l3egn i2l1ei i6leig i2lek i2lel i4leno i4lero ile1s i4lese i4le5sk i4lest ile6tri ilet5te ile4tu i1lé ilfø5re il5ge il1gl i4lid ili5ers ili9ga i5lik i2l1im i4l3ind i7line i4lins i4l3i4r ili5s6tik il3ja. il1je il5jese il1jo il1ju ilke3 il5ker il4kes ilk4o6s il5ku il4lab il6lam illan8da il6lap il9lau il4lee illei9e il6l7ender il6lesk il4lev illi9ga il4lo5m ill3s2 ills5kå illæ4 illæ9re. il4m5est ilm5e4v il4mi ilm5s i1loe i9lolo i4lom il5omv i5lon il3opp i4l1o4r i5loso ilot3u i4love ilo1w ilret4 ilset8je il3sl ilsla7 ilsle7ge il6s7li ils4mu ils2p ils2t il5str il7su il3s2v ilsva9ra ilsva5re ilta9la ilt5rett il6t7å ilu4h i5luk il7ul8 il3un i5lur i9lus il1ut il5v6 ilve8d ilve4r i1ly il1å8 ilår6 8im. 4ima i2mad i4maen i2mag i6m5akk i4mako imal8n i2mam i9man i2map i5mar. ima5s i4matr i8mb2 i4mee i2me1g i2mek i6melu im5enh im8et i9met. i4meta i4meti i6mey i8mé imi9la imini6 i7mj im4lev im8l9u im5m i6mog imo9l im5ord imor8da im7o6v imp2 5imperi imp4l 1impo imp9s impse8 1impu im4ref im4rek im4res im9se ims4k5l ims3kr im5s4me im1s4t im6sti imta8la 4imu i3mø2 2in. 6ina i4nag in5agg i5nakk ina4let i4na2m in3ame in2an i9nane in5ann i2nap in5app i5nar. i5nars i4nask i4nasp i4n5ass ina4t5ak ina7t8r i6nau in7auk in5avl in5avr ince2 in7der 6indig in4dog ind9ra in3dru indr5ø ind5sk ind3sp ind5s4t 5industr ind7å 4ine ine8are i2ned inedy6 in5egg in5eid in3eie i6nele ine4li in7eng ine8pa ine8pe. i7nere. i5neren i9neres ine4rik i7nern i5nert i5nes. i4nesk ines8ka ines8ke. ines4st ine5s4ti i4nesø i2nev 8iné 3infek in4fos in4fot infu9 4infy in4g5ald in4gav in5gebj in6gem 5ingeni in5geri in4geru in3gev ing5jen in4goa in4gos in2gr ing5rep ing7ris ing2s ings5om ingst8 ings5v 6ingu in4g5un in2g5ø i7nia ini9ar. i2nib i5nie i4nif i2nig i4nil ini7m i4ninn i2nip i4nisa ini3se i4nises 5initia i4nito 5injek 2ink in5kel in4kero in4k3la in4kok in5l inla8ga 2inn. in4nal in4nem in4nerø in4nesi innes6t 4innet in6n7ette innfa9s 1inng 5innhal 3innho 2inni4 in4ni. in4n5om in5n6ova inn1s4 6inns. 3innsa inn5se inn9sen inn9ste inn7sve 1innt in4n5u4 4innæ in2nø4 2ino ino5a i5noar i4nod inok6 in7oks in7org in1s 4ins. 8insa in9sa. in7sal in5sar in5se. in4sek in3sen inseri8e9ne in3si insis5 6insj in4sja in3sje 4insk in9s8kas in5skat inske4t ins4ki in3skj ins5kjøt ins6kor ins4k3v ins6kø insle7g ins8lega in3slo in3s2lø in5s4ma in3sop 1insp in4spa in5s4pl ins4po 5instal in8s5te. ins5ten. ins9tens 3in3s4ti in4stin 4in3s6to in5stra inst5rel 5instru in6stå in7sul in2sv 6in3sy 8int. 2in3ta inta8la 4inte. 5in7teg in8t7ege in5ter int5ess in5te4t5 4in5ti inti5me int2r intran4 int4rer in5tres 6inu inu6i i8n9ul8 in7ut. in9u8te 1inv 6invev iny4i iny4t 6inø in7øk i7nøt in3øv 4io io1a4 i2ob io8d8 io4dere i1off io5gn io1i i1oks iol4 io3le iol7jen io3mu io4nans io4narr io6n5erst ion3g4 io4nin io4nu io1pl i1opp io5ra. ior8da io1re io4rie io4r5in iorla8ga iosk3v io1st iota6le. io3t4e io4tra i5pap ipa4ti. i4pee ipela9 i7pe6p i1pi ipi1e ipi9ne i4p5ings i1pl i2ple ip4peli ippel7s6 ipp6lan ipplæ8re. ip2pr ipp4s3t ippsy8na ipp4sø ip7pun i1pr i6pra ip5ru ipru8te. ips1a ipse4l ipsfø5 ip2si ip2s1k ipsle6ge. ips1t ip6tar i5py7 i3pø 2ir i1ra i9r6and ir5ark i9rast ira6tr ir5de ird5s i1re ir3eie ir6ek i3repo i3rer ire6r5a ire7st i3ret i8reto ir7g i1ri iri4a iri8ka. ir3ind ir3inn ir5inst iri9t ir5ka. ir4kat ir5ker. irke3s6 ir4kest ir4kle ir5kv irk5ø ir4mag ir4mal ir4mast ir9mé i5roa i1roe i4roi i1rol ir5opp iro1s ir3re ir7sko irs2p ir3s4t irt6 ir3ta irti6g5r i1ru ir5u4k iru8m iru7sa. i1rø i1rå ir7å6l i1sa i4saks i4sanb i4s3ang is3ann i4s3ans is3ant i7sas is5aud 3isbry is6cen isch5 is3co i5scr i2sed i4seel i4seen ise5ern i2s2e3g4 i2sei is3eie is5eig ise5is i2sek i3sekt i4sekte i6s7eld is4e5li i2sem ise5ne i4seno isensi6 i5ser. i5sers i2ses is5ess i4sete iset8je i2seu 8isé isha7ne 3ishav is4h5in ishø9ve isi6ene is5ild i4s3ind isis5t is7jun is9ka. is3kal is3kar isk9art. isk5arte i8ske is5ke. is8kee is4kel isk5els iske5s4 is3kje i3skjo iskla8ga is6k5le isk3lo isko5g is7kogr is3kop is3kot is1kr is6k5rin is1ku is4kul i5skula is1kv is4kvi is1l i6slu isl7ut isl9øy. i5smak is4med ismo5e i6smus is5ne is5nu 1isol 6isold 5isomo is5omr iso3pa iso5pe iso7pr 3isot is1ov is1p is4pan is5pane. is6pis is7pru is4ses is5si issis5 is6s7kj is4sko is7skr is5sky is4skå is5sok is7sto is6sve is5svo is9s4ær is4søk i5stab ista9le is5tane is5tap i4s5tar ist5avb ist7avi i2ste is5te. is4tek ist5ekt istel5l iste6ma. ist6en is5ten. is5tene is5ter. is5tern is6terø is6té is4tik is5tilb is5tis is3tok is3tol i2str i8s8tre. i4st5ren i5strer i6strer. i4stres i6stret is3try is3tus 6isu is5uf is5ul is1un is1v is4vak is7w isy8na isy5r i7s8ys is5yt i2s1øk i4søy is7åk is3år i1ta ita4l3a ita6l5ers ita4lo ita4ly i6tang itan7s6v itau4 i4tav i4tec i2teg ite8ke. i7teky i6t7elg i4teni i2teo ite3re i4tero iter6s5 i4te5ru i2te1s ite6se. itet6s5 i1té it2i iti6er. i4ties i2tif i4tikam i4ti3kv iti5me i2tio i2tip iti3r i4tisa i4tisen i4tisi i4tisj i4tisko i4ti3sp i4tist iti5str i2tiu itiv4 itivs5 it7jaran it7jer it7ji itma6le. itnes4s i1to ito9a i4tom it5ord ito4s itostra6 ito8v i1tr i4tra. i6trae it3rel it3ren it5rim itri8ma it3rin i5tris it7ro6s it1sa it4s3ei it3ser it6ses it5sku itsla8ga it1sn it6sti it3sun it4tag it6tak it4tal itta9la it6tann it6tap it4t5at it5ted itte4l5o it4tenk itte5s4 itt5ett it4tid it4til it4tj itt1o it6tof it7ton it4tr itt5skr itt4sø it4ty it7tys i1tu itu5e itær1 i1tø i5tå9 i1u iu6a iu2b i5u6l i5um. ium4f5ar iu2m1i ium5m iu4mo i6umse i4um5s4t i4umsu iu2n iu8p i2ur iu5se 4i1va i4vad i6vaj i4v3aks i5val iva6la. i4vana i4v5ank i4varb ivar5s6 i4v5ass ivat3t i1ve i2veg ive6ge iv5eg6n i4vei iv7eig i2vek ive4ra ive5ras iver5d i6veret i4vesk i4vesti i6vesv i6vetø i2vev i1vé i1vi iv5ins iv5is. iv5isb ivle6ge. iv3n i1vo iv7om iv3r iv4sal iv2si iv2sk iv2sl iv2sn iv4so ivs5v i2v3un i5v6y ivyr8ke. i9væ iv7åpn i1wa iwi5 i5wie6 i5y iyr8ke. i5za. i7zas i4ze i1zo i1ø i1ø4k i1ør. iør5i iør5s i4øs iø3se i1øy i1å4 iårs7l iåt4te. ja1ak ja9ar ja4da 1jae ja7en 5jag. ja4ga. ja7gar ja4ge. jag6r ja4ha ja4hv ja4j jak4kel jak7kele jak4ko ja8k7ok jakk5s4 ja1k8r ja8kre jaktel jakts8 ja7ku ja3lo ja1lu jam7b 6jambi jamhø8ve. 5jamm jams2 jan4gr j5anl ja6ra. ja6r5ap ja9rek jarn3s4 jar5ta jar5te. jar5tet. jar7ti 6jarø ja6rå ja7se ja8ski ja5sti ja5ta jau4ere ja9vi 1jaz j1b 2jd j2e 2je1a2 je5ak 2jeb jeb9b je4deb 6je4dek 4jedr je4ep1 6jeev 2jef je4f3et je2fj jef5lag je4f3re jef4sa jef6s5i jef3t4r je5ge jeg5ge 6jegl jeg6les 4jego 4jegr 4jegy 2jeh je1i je5i8s 4jej 2jeka jek6keru 4jekl je4kli 2jeko jekt3a jek4tan jek6tes jekt5ev jek4t5in jek4t3r jekts4t 4jekø 2jel je6legr jelei7er je7lele je4les jel7ge jel6lag jell5ang jel5len jel4lo jelt3 jel4tr jel9ut jel7va. 2jem je4mia je4mit jemp6 jem5pl jem5se jem4sti 2je7na jen1d jendis5 4jendr je3ne. je7ne8s 4jenet jen5ged jen7g8la jeng5s4 2jeni jen3k 4jenl 4jeno 4jenu je2n1y4 4jenæ 2je5o4 2jep je3raf je4r5ant jer4dep jerd6s je3r6e 4jered 6jereg 6jerei 6jerenn je5rik je6rim je6rinæ jer4kes jer6k5l jer4kv jerle7 jer6mu jer6n5as jern5sl je6ron jer4sp jert5s 4je1ru 6jerå 5jesf 5jesh jes4kil 2je3sp jes4tea je6stim je3str 5jesut je5sve je4t3ag jeta6ka je9tar. je7tara je9tare je4t3ru jets2 jet4t5an jet6term jett3o jett5s6 je4t3v jety8e 2jeu6 4jev6a je7vark je6vas 4jeve jevi4s jev7na. jev7ne 6jeø j1f 4jg j1h 4ji. jib5b ji7e6 6jik 2j3inf ji7ro ji6sj 4jiø 2j1k j4kap 6j1l 6j1m 6j1n 6jn. j5ni j2o 1job 5joc jo4da. jo6dat jo6dis jo4fl jojo5 jok9ker jokk9o8 jol5t6 j3omr jon2 jo5ne jon7n jons1 jons5a jonse4 jons3p jons5t jon6sti jon4str jonsu4 4jop jo5ra jor6dek jor6d7erv jor6d7is. jor4d3o jord3r jord5s jords4l jor6du jo1re jo4rie jort6a jor5tet jo3r4u 2jos jo3se jo4ses jo5stei 1jou jour5 j1p 4j1r 2j3s2 j1t ju8are 1jub jubi3 ju9bo juda8s7 ju3de ju2do ju7doe jue7ni ju4e5re jue9s jug9le 5jugo 4ju2k ju3ka ju3ke. ju3ken juk9sar ju2l ju3la. ju5lar ju5las ju8l9ei ju4li. ju6lid ju4lik jul7inn jull6 1jung jun7ge j6u6ni 8jup jup7s ju6p5å6 ju4ra ju7ras 3juris ju9ro ju3ru 5jury 1jus ju5so5 ju1ta jut5o ju6va. ju6vak ju1å j5v jy1 jy8de. jy2p3 jæ5le. jæ3ra. jæ9ran jæ9res. jæ7te. j2ø 1jø. 1jøa. jø5b4 1jøe 2jøef 4jøeg 6jøei 2jøek 4jøend 4jøeng 4jøeta jø1f jø3gr jø9kj 4jøl jø4les jøl6ver jø5me jøn5ne jø5pa jør4kel jør4sp jørs5v jør4tel jø3ru jør7ut jø1rø jø4ses jøst2 jø5ta jø6t7av jø3te. jøte4t jøt5eta jø1tr jøtte4 4jø1v jø4vel 2jå jå5ar. jå9ge. jå6la. jå4le. jå7les jå5let 1ka. 2kaa 5kaa. 5ka4an4 k3aas ka3at 6kabes ka7bo 4ka1br 4kaby ka3da 6kadale ka5del ka6del. ka4deri 4kadg kadi7e 2kadr 5kadu 4kady 3kaen ka3fe kaf5fere 2kafo ka9fr 2kaft kaf5ta 6kafø 2kag k5a4gi kag2r 2kah ka5isk ka5ism 6kajo ka4ka. ka4ke. ka4ked ka4kel ka4kes ka4ki. ka4kis 6k5aksj 4kakt ka3ku ka3lam ka3lan ka6lant ka3las kald5s 5kaldt kal2e 3kalen ka5lev 5kalis k6al8k5 kal7k6e 5kalky kal7la kal6lero kall4s ka1lo kal3p kal7s6v kal4ves 1kam ka6ma. ka8me. 4kameri 4kammel kam4p3i kam4pr 7kamu 1kana ka8na. 4kanda kan6da. 5k6ande. 1kane ka5ner kan4i ka5nin 2k1anl 4k1anm k3anno 5kano ka4no. ka8nom 4kansa 6kansi 3kansl 1kant kan6t7end kan6t9r 2kap. 5kapad ka4pak 3kapas ka5pe 5kapell 4kapen 3kapit 1kapp kap3re kap4s3t 1kar. 1kara 4karab 4karam karan5 ka3rav 1karb 4karbei 4karea ka6rek ka5rel 1karf 5karg ka4ri. ka6rid 6k3arki 6k5arkt 1karm kar3n ka3rol kar3om kar5pes karp3s 3karri 7karsj kars4t 1kart kar5ti 5karu 4karå 1kas 7kas. ka5se4i ka3sek kas5ev kas2ju 6kasjø ka4sk kas3ka kasko5 6kasp ka4spi kass6 kas6sad kas4sak 4k3assi kas4so ka4st 8kas5to ka6su8s7 kas2t3r 1ka7t6a ka8tak8 ka3ted 3kateg ka3tet ka1to ka4t5op 4ka1t4r kat7s kat5ta kat6tak kat4tel kat6term katte5s kat4til kat4tri ka4t5y k7au4r 2kav ka7ves k9avis kav8l9u 9kay 6k1b4 2kc k5ce kcen4 2k1d k5d6v 1ke 2ke1a8 ke9al 2keb 4kebr 4kebuk 4kec ked4 ke5da 4kedag 4kedal 5kedan. 9kedant ke5de 6kedei 4kedem 4kedes 7kedes. 2kedi 2ke5dr ked8sk kedu6 4kedy 2kedø 2keeg 2keek 2keel ke4ep ke7ern 2keev 4kef k3eff k5eft 2ke1g k3egg keg8ga 5kegladh ke5h 3kehet 4kehj 2kei k3ei2d k1eig ke5il ke1im k6e1in keis2 2kej 2kek kek2l ke3kn k1eks k5ek4t k6el. 2kela ke3l4ak 5kelal ke6lans ke6lat kel5eier kel5eig kel7eik kelei8ke. 6keleis kel3e4l 4k5elem 4keleng 4ke5lep 4keles 7k6elet 4kelev keli8e8 keli9en 3kelig 4kelign 4kelinj kel5int 4kelis ke4lise 5kelit 4keliv kel5l 4kelof 6kelov. 4kelove kels4 kels7kar kel5sl kel5sp kel5st kel3sv kelsva9 kel2t kelt3e 6kelua 4kelue kel9uka kel5uke ke4l3ur 6keluv kel5v 2kely 2kelæ 2kelø kelø8pa. 6ke5l4å kelå7re 2kem ke4mit 5kena. 6kenam ken6ap ke4nas 5kenatts ken5de 6k5en6den 6k5en4der 4kend5r ke3ne 4keneb 4kenek 4kenel 4kenem 6kenett 4kenev 3kenf ke4ni 5k6enh 4ke5niv ken3k ken7n kenne4l3 ke4nom ken1s2 4k5ense kens6t ken7te ken5t6r 4k3entu 6ke3ny 6kenø 2keo ke7of ke3on 4kep 5kepi. 9kepia 7kepie 6kepl kera7l 4keram ke4ran ker5ant 6kerau 4kered 4kereg kerei4d 4kereir 6kereis 4kerek 4ke5rem kere6n 6kerene ke6r5eng 4kerenn 4kerep ke4r5ert ke3res 4keress 4kerest 4keresu 4keret 5keret. 5kereta 7kerets 3keri ke4rif 6kerik. 4kerike 6kerikt ke4rim ke4rine 6keringi 6keringj ke4rinæ ke4ris 8kerist. 8kerista 6keriste 3kerm 7kerop 5keror 4ke3ros kero6se. ke3rot k4ert ker5to ker3t4v ker3un 4kerus keru6se. kerø6re. 8ker8øya 6ker6øye 2kerå 5kes. 4kesam 9kesam. 7kesdale 5kese. k5esel ke5sil 4kesit 2kesj k9es8ka. 4k5eske kes8ke. 4keski 4keskj 6keskå kesle6ge. kes5ped 5kespot 5ke4spu 5kest. 4ke3sta 5keste. 4ke5sted 4ke5stei kes6tem 4ke5s4ten ke3sto 4kestri 4ke5stru 4kestu 4kestø ke4s5un kes1v 2kesy kes1å 2keta keta6ka keta6le. 5ketals k6etar ke3te 5kete. 4ketek 7keth 2keti 2ketj 2keto 2ket2r kets2 ket6t7enh ket8tes 2ketu 2kety kety6e 4ketæ ketøy6s5 2ketå 2keu2 ke5ur 2kev kev2a keva8ne. 5kevas 3kevel kevi6sa. k1evj kev6ja kev4je. k3evn kev6ne. ke3vr kevæ8ra ke2yt 6keæ 2keø 2keå 1ké4 két5 2k1f k5fi 4k5g2 k3ge k5gh kgu4 4k1h kh5ak k4har khe4o khjul8s kh6m ki3a2r k3ideo 4kidol ki3dr k4ie2 kie5re ki6el ki3er. 2kif ki5g4 ki6ka. kikk8s9 ki1k8l ki3k2r kik4s ki8la. 3kilde 6kildr ki4le. ki5li 4kilj kil9ja kil6le5st ki7loa ki4log ki3los ki4lov 2kilt ki7lå ki8ma. ki4me. 5kimo5 ki4mol 2k1imp kin9and ki4nark ki5nas. 6kind ki5ne ki6ne. 2kinf 1king king5and kin3ge kin5ing 2kinn kinnsi8da kinnsi8de. kinn4sp ki2no kin5ov 2kins kinsi6de. 2kint kinti8me. ki6nu 2kinv kio4 4kiol 7kios 2kip ki5pe ki4p5l kip5pe kip2s3 1kir ki5re ki5ri 4kirs ki3se ki5sko ki3smu ki1s2p ki5stav ki5str ki6ten ki7ti 5kito ki4ton 4kiu k6iv ki4vek ki4v5enh ki6vi. kiv3s kj2 3k8jan kjap5pe 6k7jarn kje7fj kje7f6r 4kjegg 3kjeld kjel7leg 5kjemas 3kjemp 6kjenk kje9ny kje1s kje6t5r kjet5t 6kjor k8juk kju5le. kju5len kju9r 3kjærl k5jødi 1kjøp 3kjøri kjø4tr 8kk k1ka k2kab kk3aft k2k1ak k2k3al k2kam k4kanb kk5and k8kand. k6kanden k4k5ang k4kann k4kao k4karb k6karg k4k7art kkar6ta. k5kast k6kasu k6katt k2k1au kk1av k6kedo k4kedu k2kee k2keh kk1ei k5kel. kke6lei kk5e4lev kkel3t4 kkelu4 kke4luk kkel5un kke6nan k5ker. k4kerei k4kerel k6kerent k4kerig k4kerit kke5r6und k4kesa k5kesau k4kese k4kesi kke3s4l k4kesp k6kestad k4kete k5ketet k4ketø k4k9g2 k1ki kk3ind kk3inf kk9inn kk3ins kk3int k2kir k1kja kkjek8 kk5jent k4k5jern kkje7t kk5ju kk5k kkla4g kk3lan kk8lar kk7lau kk1lo kk1ly kk3læ k4kn kk5ne kk5ny kk6s5v k1kod k1koe k4k1of kko6lig kk5oml kk7oms kk9omt k6koo kk1op kko7s k4kosi k6kosk k4kost kk3ove kk5p k4kra kk5ram kk3rap kk3rea kk5rei kk3ren kk3res kkri6k kk3ro kkro8e kkro4s kk3ru kk4rus kk7rø kk7rå k8k7s kks6al kk4sar kk5sed kk3s4ei kk4sin kk1sk kks4kj kks4l kk3sla kk7sle kk5sli kk3spe kk1s2t kks5tak kks7tep kkst4r kk8s7va kk5s4å7 kk7t8 kk5uk k4kuni k2k1u6t kk1v k2kvo k1ky6 kkyl4 kk5yr kk7yt k2k1ø k8køl kkø6r kkøy6 kk1å2 kl4 6kl. 4kla. 4k5lagt 2klak kla9ke. kla4mel 3k2las k7lati kla4tr kleby7t 3k4ledd kle4deb kle4des 2kleg klei9e k7leik k4leiv k2lem 5k6lem. 7k4leno k6lerik kles7j kle5sno kle4sp kle5sti kles7s8 2klet 8klia 4klie. 4klig 1k2lim2 3k4lini k5linj 1klip 4klit klon7a8l 1klos 2klov k3lukt 4klun klun5t k5lyd 6k7lyf 3k4lyng klyse7te k2læ klæ5res klø7na k6lør 6kløs klø9va klø5ve 6k1lån klå5re 2k3m kmann6 kmål2 2k1n2 3k2nap kna5t4re kne4b3l k4nedi 5k2nee kne8se. k4nest kn5f knas8t7a8 3k4nip knippe6 kni2t3 7k6niv kno7g kno6kl 5knop kno9ta kno5te 3k2nu 4k3num 3k2ny kny4s k2nø knø9le kn3øy 9koa. 4ko1ak 9koane ko7ar ko2b3 ko3bo 4ko3br ko5da 4kodd ko4de. 3kodek 5koden 2kodø ko3e 3koef 4koek 4koel 4koes 4koev ko4g5eng kog9ger kog3l ko4gre kogst6 ko4gu ko6gå 2koi koi4e5ne ko7i6k ko1in 2koj ko8ja. ko4ka. ko4kab ko4ke. ko6kel ko1ki kokk6o k3okku 4kok4l 4koko 2koku kolba5 kol8d7a 2kole ko4leg ko4lei ko6lel ko4let ko4leu 3kolle ko5lo. kol5p 4koly 2kolå 1kom ko4ma. 4komaf ko4me. 6komg ko4mi. 4komil 4komisb ko4mise 2komr 4komse kom3sl kom5so kom4st 4kom5t 4komu 4komå k6on ko4na. kon3d kon6dr kone5l6å 4koniv kon3s2 kon6s7v kon6ton ko4nu 1ko1o 4koom ko5pa ko5pers 4kopet ko4pi. ko4pip ko4p9l 4kopo kop5per 2kopr ko1ra ko4ra. kor6da. kor4d3o kord5s4ø kor4du ko1r6e 6koref 4ko7rei9 ko5rem ko7ret ko3ri ko6rik 4korm ko5rol 6korpa 6korpe 1kor3r kor4sal kor6s5inn kor4s5l kor6str kor4sv kor5tes kor6top kor4t5r kort5s4 ko5ru ko6rume 1kos 2kosa ko6sa. ko4sed ko4sek 5kosele ko5sen ko4ses ko9si kosi9d ko2sk ko1sl 4kosmu 2koso 2ko1s2p ko6sta kost7as kos6t5ers kost5j ko8s8t7ø8 4kosø kotes7 ko5t4i 4kotil 4kotr ko6tre kot2s kots5tr kot4ti kott4s kotts5t 4koty 2kou4 kout3 kou7ta ko1va kover7e 4kovr 1kov4s3 4koø 4koå 6k1p kr6 k3rad 1k4raf 5krag 3krakk krani6e7n 6krank 3krans 4krap kra9se 7k8ra4sj kras5s kra4to kra4u 1krav 4kred. 3kredi 4k1reg kregi3 4krei krei9e krei5s 6krek kre4kli 2krel k5rela kre8m7o 4k3renn 4krent 6kreo k5repr 5kreps 5kresj 4k3ress kreta9 6k7retn k4rets k3rett 2krib 4krif 7k6rig krig6s5 kri9ga 4krik kri5ke kri4kj krik6ka 1krim kri4me 3k6rins krin6s7t kri2p 1k2ris 7krisene k2rit 3krite 6kriv k2ro kro5b4 kro5de k3rofo k4rofor krok7k k6roni k5ronl kro4nom k4rop krop9n kropp4 k4rost kro9t8e kroten9 kro3v kru3i4 krum3 kru5sa krutt5i kru3tr 2k5ryg kry7pa kry5pe kry4pi 3krys krø5ke 6k5rør krø3v 4kråd krå8da kråe6 5kråk krå5le krå9m krå7ne k1sa k3sa. k2s3ad ks3alt ksa5me k3sane k4sans k4s3ant k3sar. k7sara k6s3ark k7sas k1sc k2sed k2see kse6ge k2s1ei k5sekt k5sela kse5lev ksen5to k4serf ks3erk k5serol k4sesa k4ses6k k4se3sm k5seso kses4p k5sess kses6sel kses8serie kses4sp kses4st kse6te. ksfø4 k5sia k2sif ksi5ko ks3ind k3sing ksi7ni ks3inn k4s3ins k7sio ksi3st k4siti 6ksj ks9kab k6s3kal k6skio ks1kj ks5kl ksko7na ksko5ne ks1kr ksk8u ks9ku. ks7kua ks8kut ks1k6v ks1l ksla8ga. ks5lo k7s6lu k8s7lug k8s5løs kslø8va kslø8ve. k5s4mak ks4mel k8smid ksmå k5s4no k7s8nø k1so k6s7oa k6s5o6d k4sog k4somb k2s1or k2sot ks1ov k3spal ks3pek ks5pio ks3pir kspor6t5r 6k6s5pors ks1pr k8sr k3spy k8s7s ks3sm k5stad k4stak ks3tal ks5tant k7s8vak ks6tav kste4da ks4teg k3stei k4stek kst3ev kstev6ne. ks4til k4stin ks1tj ks1tr kst6ran ks4t5rek k6stren k6strer ks4tri ks4tro ks9tum k5stus ks3tyv k2stå k1su k6sun k8suni ks1v k9s8vake ksva8ne. ks5veg k7s6vert k5s4vin k8svis ks5w ksy8na ksy8s7m ks5ær ksø4ke. k6s3øl ks1å k3så. k4såp ksår4 ksåt4 6k1t k5ta. kta7f6 k4tag kta6ka k4t3aks k4takt kta6la. k4t3ana kta9na. kt3anl k4t3ann k4tanv kt3app k9tar. k4t3arr k4t3art k6tass k5tast k6t7atl kt5avh kt5avk k6t3avl k3ted k4teda k6tee k4tefø kt5e4ge k2te5i k6teka kte5le k6t5elsk kt5e4lit ktem8 kt7emn k4t3enh k9ter. kterie5n kterie7ns kter5s6 k7tes. k6tesa k6tese kt5eske ktes6ke. kt5esti k4t5e4ta k4tete kt5evn ktev6ne. k5tib k3til k4t3ins k5tir ktis5t kt7i6te kti6v7end k2tja kt7ju kto9a kt5off k6togram k4toli k2tom kt5omf k2t1op k9tor. k7tora kt5ord. k5tore ktori9e8 ktor7s kt1ov kt3ral k2t1re kt2ro ktro5s k2t1ru kt4s5amb kts5ar kt5sek kt7sem kt4s5er kt6sin kts5kra kt5sku kts4kv ktsle6ge. kt6sok kt4spa kt5spre kt4sta kts6ton kts5top kt4stå kt3t8 ktu9er. k4tuk kt7und k2t1ut kt8yo kt7yrk ktyr8ke. ktør7 ktør8e k6t5øs kt1øv k2t3år ku2a ku9an ku4be. ku3bj 2kud ku4dal ku4er. kue4r5a ku4et 6kuf ku4f3l 6kug k5u4gr ku7is kuit6 ku7k8l 6kuldi kuld3r ku4led ku4leg ku6lei ku4lem ku5len ku4let ku4lev ku5li ku6li. 3kull 1kult ku4man kumen6tal ku6mi kum2s 3kumu 1kun kund5s6l 2k1ung kun4ge. k6unn ku4o 1kup ku4pe. kup4pl ku7ra ku4rek ku8r7o ku7r6op kuro8pa 1kurs kur6sk kur4sp kur4s3t kurs3v kur3t ku5ru6 kuru9ken kuru7ker 1kurv kur4v3i 1kus 5kus. ku7sa. kus5a6k kus5ar 5kuse ku4s5el ku4ska ku7s6pe kus3t 6k1ut. ku1ta 4ku5te. ku5to ku6t7r 2kuts 1kuu8 kuøy6 kv2 kva8ke k4vali k6vard kvari6e5n 5k6vart kva9se kve3d2 kve7e kve8g7r k4veik k6veil 7k8vein kvei9se 1k4vel kve5la 4k3verd 5kvern kverns8 2kves kves5t 7k6via 4kvid 3k4vie kvi4ene kvi5er kvi7la 3kvinn kvi5se 7kvist 2kviv 1kvo k1vog 6kvok k4vot k2vu 4k3væ k1vå k7we k5wu ky5a ky6el 4kyf kyf5le 2kyg ky4leg 2k3yns kyn6skjer ky2p1 ky4p5r 1kyr kyrie5ne kyr8ke. ky8sa 4kyse ky6se. kyse8te. ky3skr kys6sk 1ky4st kyst3a kys4tel 2kyt ky6ta. kyte3s k1æt3 1kø. kø2ar 1køe kø4en. kø2er 6k1øk kø4le k1øn køn6skjer k3ørr køs4 kø5se køy7ar. k7øyd køy4e5ne 1k6øyr 4kåke kå3le kån8da kå5ne kå4pe. kå7pen kå9ras kå1re kå1ri kå2t5 k5åt6t 1la. 2laa la1b 4laba la6bl 1labo 2l3abon 4laby 4lad. l6ade la4dem 4ladg ladi9e8 2ladm 2ladr lad3s4 1lae 2laei 4laent 4laep 2laf la3fl 4lagg lagi4 6lagne la2go8 lag5om la2g1r lag5san lag4sj 2laha 2la1in la5ka la4ke. 4lakj l2akk la2kr 8l7aksel l7aksj l5aksl 4lakt lakterie6 la5kø 2lal l1alk la5mab 4lamb la4mes la4met la3mo l8a8mu 4l3anal lan2c lan6das lan6deb land3r l6a3ne 3lane. 4lanet lan6gel lan4gem lan6germ lan4gr lang3s4 lang4s5e lan6g5ø6 4lanl 4lann l3anno la4nor 6l5ansi lan8s7p lan5ti 4lanv l3anvi 2lao la6pal la7pi la8pl lap8p7r8 lapp7s8 lap5sa lap5sen lap5s4i 1l8ar. 6l7arab 2larb l8are. 4l7area la9red la5rem l6aren. 4larena lare6t la6r7eta 5larf la7ria lariar lari6e7n 4l3arki l2arm lar3n 6l7arr 4lart lar6ta. lar7vet la6sc la5se lasi9e la2sk 7laskj 4lasm la5smi 4la4sp las6sak las6sam las6sat las6sel l6ast 4lastr las3v la1ta lat5ang 6latau la4teg lat6ek la4teno late5s4 la5ti la6ti. 4latm la1to lat7ra. lat9ran lat5rar lat4t5is lat4tra latt6u lau7a 2laud laue6 4laun 4laur lau7se lau6st 2laut 2lav la4v5al la4vel l5avh lav5inn 6lavs 7lavå 1law la6y5 6l1b2 lba3de lba4k lba5ke. lba4ne. l5be lbe9na lbe8re. l4boa l6buh lby4e l5bå 2l1c l4ce. 6ld l7da. ld5aks ld5akt l9dand lda6t5o lda6t5y l2deb l5den l2de5o l2dep l3der l7der. lder7a l4derek l6derik l6derklæ lderle9g lder5s6te lder6s5ti l4desh l6destr l9dé ldis7k ldo9a l8d5oks l2dol l4dore ld5ovn l3drak ld3ran ld5ras l6dre. ld7regn ld5rer. l8dres. ld1ri l7dry ld1rø ldse8 ld4sek ld4sel ld4ses lds1k ld4ska lds4kj ldsla8ga lds6leg lds4let ld4s9m ld5s4om lds3tr ld6tus ldø2 ldø5d ldø5l ld7øy 1le 2lea le7ag le3ak le1al lea5la 3leas le5at 2leb le4bem le6bosta 5lebæk lec4 2leda 5ledar led4dø 4ledeb le4dem 6ledep le5der le3des 2ledo 3ledop 5ledov le4dro le5dry led1s2 6ledu 4ledy 2ledø 4le3då 2lee 6leei 6lefa lefa6ne. 4l1eff 2lefi 4lefl 4lefor 4lefot 2lefr l1eft 6lefy 4lefø 6legap 5legas 3lege le4ged le9gen le4gera le9geran le9geras le4gero le4geta le4gev 7leggi le3gi 6legif 4legj 2le1g2l le4gol 4legre leg3s4 2legu 2legå 2leh 6lehal 6lehamr 6lehan 6lehau 6lehave le3ido lei8e l6eie. lei5ende lei4e5ne lei9er l6ei8et leig6d lei4ger lei7ger. lei4get leig4h5 leig6na leig8ne 2lein le3int lei6r7u leis7t l6eit 2lej 2leka le4ka. 6lekan lek6e le3ki 2lekj lekk7s 2lek2l 2lekn lek4na 2leko 2lekr 4l3ekso 4leksp lekt5ord lekt4s5t 2leku 2lekv 4lekø 4lekå 2le3la 8l9eld 2lele l3elem 4l5elg 5lelig 2lelo 3lels 4l3elsk le1lu 4leluk l5elv 2lely 4lelæ 2lelø lelø6pa 4lema le3me le8me. 4lemet 8lemetrisk 8l9emn lem8na 2lemo lem9ped lem5pes 3lemr lem4si lem4s5ø 2lemt lem5ti 2lemu 6lemy 4lemø 2lemå le4na. le4nal 4lenav lend8a len9dan 6lenden l6endre 4lendri 4lened 4lenem 4lenev l4engd len4g5r leng9u le5ni 4leniv lensa4 len4s5ak 4lensem len5ses len4sta len4tam len4tr len8t9ra 2lenø 4lenå 2leo 5leol 2lep le5pa le4pel le8p9enden le2p3j le8pla. le4ple 4lepo 4leraba 4leram le2r3amb ler5d l8ere le9re. 6lerea 4leref 4lereg 4le9r8ei 4lerek le5res 4lereso 4leresu 4leret 4lerev 9leri. 7lerie le6riei le7rina le4riv 4l5ernæ le5ro. 4lerom 6lerope le3ros 4le3rot 7lers. lers4p ler7te le1ru 4lerus leru8se. 2lery 5leryr 2lerø 2lerå 5l6es. le4sab 4lesam 7lesar 4lesau 2lesc le5sed le4seg 4lesek le5sen le3ser 4leset 4lesho le6si. 4lesig le7sing les5inn 4lesit 4lesju le7skap le4s3kj 6leskol le6sk9u8t 4lesla 2lesp 6lespal les3s6 lesse6ne. 4lesta 9lesta. 7lestal le5sted le5steg le5stel le4stim le3sto 4lestrø 4lestyr 4lestø 4lestå 4lesug les1v le5s6vi 4le5sy 4lesø 5lesøy 3let. le4tab 6letak leta8ka leta8le. l5e4tas 5lete. 6letea 4leteg 4letek le5ten 6letenk 6le7tep le5ter. 4letes 2le3ti l5e4tik 2letj 2leto 2let2r le7tre le5t4ri 3lets let6sj lets8k let6tea let6tr lett3s4 2letu le4tv 2lety lety8e 4letø 8letå 4leul 2leun l1eur 2leut le4ute 2lev. le6vad le6valu le4ved 4leveg 4levei 4levek 6levern 4le4vev levi6d lev5n 2levo lev1r 4levs 4levæ lex1 4leø 2leå 5lée 1lér 7lét. 7lè 5lê 4l1f l4fa. lf5ant l5far l5fe lf3f l5fig l5f6in lf5ja l7fje l6f3nul l4fom l4fut 2lg l6gaf lga8le. l4g5alt l4g3ana lga5t lga4ve. l2ged l4gela l4gele l2gem lge3na lge4r5an lge4rap lge5ri lger5un l4gery l4gesl l6ge7sp lg5g lgie8n lg1lo lg5ly lg5n lg3ob lgo2d lg1ok lg1om lg5ov lg3ref lgr9øy lg3s2e lg2sk lg5s4kre lgsle9g lg5s4tr lgu4l lg3un lg3ur l1gæ lg5ø l6gå. lg5år. lgå8va lgå8ve. 8l1h lha8ka. lhav6s5 l5hj 1li li1a li4ala li2am li5ans li4as liba5 libe5ro libi5 libie6 liby5e li4dak li4ded li4do. 2l1idr lid3t li4ene li3er. li5ers. lie5s 3lif 4lifat lif5f 3lig li4ga. li4g3an li4gar lig9art li8gas. li4g5enh li4get 5lign li4g3re lig3se lig3s4i lig3sl lig3s4p lig5s4ti lig5str li2gu 4lih li5kan li9kar li7kas li5kee li3ken li5keså li9ki likk3o li1k2l 9likn liks4t li5ku 6lila 8l5ild li3le lil5lebe lil5let li4mar li4mas li6mate l6ime li4me. 4limh limp3r lim7r lim9u li4na. 4lina6l lin6c linch5 5l4indr 4lindu lind3s4 l5indus li4ne. li3ne6a li6nem 2l1inf lin4g3j ling5l ling7sen. 5lingv 4l5inju lin5kes lin5kle lin4kv 2l1inn lin5net 3linni 6linns 6l5inntr li4nor l4inse 5linsk 4l3inst 4lint 2linv li6n5ø6 lio4no lion5sp lion5sv li5o6s 2lip lipes4 lipp4s3 li9rar li4rek 4lisak li5set lis4kl 2liso 4lisp lis6sp lis7tan lis6terk lis5ti 4lis6til list3o li6s8tr list7rø lis4t3u4 li4st5y listyr8ke. li4tee li4tek li4ti3a li4tid li4tig li4til li4tim liti5st li4tiv lit5j 6litn li5to li2t1r lit5rer lit6tele lit6terk lit6term litt5s6 li5ty 7liu li6va. li4v3ak liv5eg livi5e liv2s3 2lj l1jan l1jar l4jarb ljar5s6 ljas4 l4jed l6jee l2jei l2jek lje3l lj9elv l1jen l3jer. l4je1s l5jes. ljes4t l5jet. l4jete l5jete. l6je5t6r l2jev l5jé l1ji 3l2jod ljo8e l4jom lj5ori 3ljos lj5un l7jur lj7ut ljø3 l5jøs. 6l1k l3ka l5ka6l lkali9e8 lk4an l6k5b lk4e l3ke. l2ked l5kedal l3kede lkeei4 l6keh l5keleg l8k7els l3ken l7ker. l4kera l4keri l4k5ers l4ke3ru l5kestad l5ket. l5kets lk2l l7k8lem lk4li l5k4lu l6k5nin l6ko. lko9ma lko9sa l2kot lkras5 lk5ri6k lk4ser l4k3s2h lk1s4t lku4le. lku8t lk9ute l6kveg lkå1 6l1l l5la6a ll6a5f l2lak ll1al l4lami l5lane ll3anl l4l5ano llans4 ll5ansk ll7apa llap3s ll4as ll5asp ll5aur llau6re ll7avl ll5avr ll3d2 lle5a l5leak lle8da. lle4d3r l3lee l2lef lle5gev lle5gr l5leha l5leho l5lehå l4l5eig l4leki l6l5ekst l4leli l2lem llen6da. ll5enden l4lendr l6lendt l4lenk l5l8ens l4lentu l4lenu ll5eple l6l5e6rik l4lerob ll6es lle4so lles5pr lle5stø l5let. l4leta l5lets llet6tele l8letæ l2leu ll5even lle7vev l5levå lle6y l2lé. ll7g2 lli1e lli5e4n l9lig l2lim l4l3ind l4lins ll3int l9lint. l3lip l4lir lli6sen l4liv ll1j ll7k2 ll5m llmue9ne llmu7ens llmu9er l5lo. llob5 l2lod l4l3off llo5id ll5oks llo2m1 llom5s6 ll3op ll5opp l2l1or l4loso l6lote ll5p llra7n ll4sak llsa6me. ll4sem lls5end llsk4 lls6kar lls5kv ll5skå lls5lag ll3smy lls4no lls4te lls6tig lls7øk ll3t4 llto4e l8lua l4lu4e l4luf ll7ug llu4k l8l7uka l4l3uke l6luks l5lum l4l1un llun6ge. llu4pi l2l1ur l3lus l2l1ut ll1v4 llva8n lly4se. l4løk ll5øks llø6pa. l4løve ll7øy. ll5øya ll3øye lløy6er ll5øy6n ll1å8r ll3å2s 2l1m l5ma. lm3anm l4map l4marki lm3av lm7b l4m3els l4melu lm5e4po l4m5erf lme7ri lme7sti lme5t4r l5mil lmi8le. lm3ind l5ming lmini6 lmin7ne lm3ins lm5int l7mis lm5l lm5m lm1op lm1s lms6j lm5s2p lm3t lmu4le. lm3ut lmyr8ke. l4mø. l6m5øs lm5øy6 lmøya9 lmå6la. lm5å4r l4m5ås 2l1n l2nab l3ne lni4u l7ny lo1al 7loane lo1a4r 5loar. 2lob lob5by. lob9byan lob9byar. lob5bye lo2bl lo2d3a lo3de lo4d3ri lod3s4m lod7ste lod7s6v lo6d5u 6loeng 6lofj 3loft 1log lo5ge lo6g5e8v lo4gir log2o lo3gop log8res lo6g5ro log5sa 4loh lo5id. lo3ide lo1in 3loja lo1ki lok4ko lok6kul 2lo1k4l 4lokon 2lok7s4 lok8se. lo1k4v lole6ge. 2lolj lolo9 l5omdr lo4m5in lom4mel lomst9r lo4nal 6lond lo5ne lon4g3r lo4nit lon7skj 2lop lo3pa lo4pea lop5pa 5l4opt lo1ra 2lord lor6da. lo1re 4l1org lor4g5l lorie6 6lorm lo1ro lo7rød lo7sa lo6sek lo4ses lo5sev los4kle lo1sl lo7sp 2lost lo9tes lo8ti. lo3to 4lottet lo1un 1lov lov7ald lo3van lo9vand lo7vane lo3var lo3ve7d6 l6over. love5re l5overn 6l5overs 6l5overt 7lovo lov3sa 2l1p l7pa lpa5re lpas5 l4pedo l4pee l2pei l2pel l5peleg l3peli l4pelin l3pesm l4peti l2peu lp2h lp2i lpin3e lpi5ne. lp2l lpo6et l4put l5q 2l5r4 lra8da lradi4u lra6ne. lre4de lre4i lre8ka lre8ke. lre8va lri8ma lri4ve. lro8de. lro6pa. lro8sa. lro4se. lrot5s lrø6re. lrø5v lrå8da. lrå4de. 8l1s l2sad lsag6 ls5ald ls4am l7sana lsan6ke. l4s5ano l4s3ans ls5ark l4sat. l4scu l3se. l2sed l2see ls3eid ls5eig l4s3ele l4s3elv l2sem ls5emb l4seno l7ser. lse2s lses5ku lses3l lses5pa lses5s lse8s5tr lse4te. l2seu l6sev l4sf l2sh l5sig l5sik l6s5ill l4sim l5simu l4s3inn ls5jakk l5sjef ls3jeg ls3jen 8lsk. ls5kabi l4s5kan ls5kari lsk5art l6s5ke lskif5 l2s3kild lskinn6 lskinns5 ls1kjed ls3kjo l6skl lsk3læ ls3koa ls5kor ls3kov l4skra ls8ks lsk5un ls7kva ls3kvi l4skå ls3kåp lskå6pa l2sl lsla4ga l7slagn lsle6ge. ls5lo l5s4luk l6s5løs l2sm l5smør lsmå6la l2snu lsok3 ls5ond lson6de. l2s1or ls7o6se l5sot ls1ov l2spa l9speg l5spei l9spel l5spi l4spr l5spred ls3pri l8s7s l4s3tak l4s3tal l6stank 8l7s8tat l6ste. ls4ted l4steg l3ste4i ls4tel ls5terr ls6ti. ls4tie ls6ton ls5tren l9stri l2su l5sub l3suk ls1un l2s1v ls7vea ls5vee lsve8en. l6s5vek lsve7re l4svik ls6vind l4sør l2s1øy l2s1å 2l1t l4taa l4taf lt3akt l3tal lta4la. l4t3alb lta6lev lt3anl lta6no lt3art lta4st lta8tes lta4t3o ltat3r lt3avk l5tavæ lt9b l3tede l4teka lte6ma. lt4en. l4t5enh lt3epi l4teras l4t5erst ltesa8me. ltid6s l4tiet l2tif lti6g5 l2tik l4tina lt3ind lt9inn lt3ins l4tivi l2t1ja ltle8ge. lt9n lto9ar l3tog lto4s lt3ost lt8ep lt2r l3tra lt3reg lt3rei l6treko l6t5rel l6t7rem l4trens lt3res l5t4rest l5trev l4t5rit lt3rol lt3rom ltro8pa l5tros l4t5rød l5trå lt1s2 ltsa8me. lt5s4i lt7s6t lt2s3v lts4vi lt7t8 lt3und ltu4ra ltur5e6 ltu5r6en ltu5r6er ltur5s6 ltur5å6 l2tut l5tv. ltva8la l3tvs l4t5w l3ty lty8d lt7øl lt3øv lua8r 2lub lub6band lu6bri lu5c lu7ere 1luf 3lugar lu7go lui6 luid6er 1luj 4luk. lu4ka. 4luket luk6keri lu3kr 5l6ukt 4luly l4um lu6mel lu2mo lum6sk lu4mø lun5d4r lu4ne. lun4gel l7u2ni lun5ne 3lunsj 4lunt lu6o lup4s lu2p3u lur2e 6lurei lu5ren lu5ri 6l5urn lur8na lur8ne. lur8ta 1lus. lusa5 lu7sak lu6sel lush7e lu2s5k lus4o5 lus4sid lus4s3t lus1t lus2t3r luta3 lu3ta. lu7tet 6lutf 4lutg luth 3lu5t6he lutla9 lut6m lu1to lu4t5r 2luts lut4tal lut4tap lut4t5at 6lutv 1luv lu4va lu4ve. lu9ven lu9ver 8lv l1va l4va. lva6k l4vakti lva6la l4va4m l4vana lv8and lv7a8p l7var. lv7asa l4v5ass lve3d4a lve5i6s l4vela l4vele lv4en lve9ne l9ver. lve9rau l4veru l4vesk lve5sl l7v6et. lve5str l9vé l1vi lvi8ene lvi9er lvi6ka. lv9im lvin5g6r lv3iro lv1j lvly8se. l6v3n lv1of lvoks6 lv9op lvo8re. lvor4s lv5o4v l6v5p lvra8r lv9ri lv1s2 lv5se lv7s6k lvs6l lv9ta lv1å l3våg lvå4p4 lvå6r l5w ly1a 2lyb ly4d7r ly5e lyes3 ly4gel ly5g6l ly8is 2lykj lyk6keri ly5ku ly7kv 6lykø ly5l ly5me 2lymp ly2n3a ly4ne. ly4n5il lyn3s2 2lyo ly5ok ly3pe ly1r8 ly8ra. ly6re. 6l7yrk ly4sa. ly4s5a4k lyse6te. lysk4 lys3kj lys9kl ly2s1l 4lysp lyst9ra 6lysy ly8ta. 4lytek ly4teri lyte5s l5y4tin ly1tr ly5vak ly3ve l3z l6z5b 1læ1 6læd læ6ra. læ5rar lær4arm læ4re. lære3i læ3rer læ4re3s læ5res. lær6sv læ6ta 1lø lø3de. lø4del lø5dem lø4er løk5kj 4l1økn 2løko lø4k5r l5ø6l lø9me lø2na løns5t løp6s5 5l4ørd lør5k6 lør5n 4l5ørr 5løs. lø2sa lø5san lø5ser løs3k løs3s 2løt lø9ta. lø3te. lø4teg løva9r 6l7øv8d lø4ve. lø3ver lø5ves 6løy. 4løya 2løyd 4løye løy8ed løy5el 2løyf løy4g løyg5e 4løym 6l5øys. løy5ter lå6gal lå6gre lågs4 lå4gå 2låi lå1k4 lå6ke. lå9me lå2m5o lå2n 6l5ånd lån2s1 2låp l1åp9n 2lår lå8ra. lå9rar lå5ras lå3rin lå1ru lå6sa. lå1sk lå6sko lå4s5l lå4ste lås7ten lås5ter lå5su lå3te. lå4teg lå4tek lå8ti. 4lått lå4ve. 1ma 2maa 3maa. ma3ar 2mab ma5br ma3che mada5me ma4del ma3dra m6ad9s 4maef 4maek 7maene 2ma1f 3mafia 3mafr 6mafrå ma8ga. ma4ged ma4gel ma4ges 3magn ma2gr 2mahe ma4is ma4ja 2mak. ma5kab 4makad ma4kes mak7ke 4makl mak6le ma4kot mak2r ma3kre mak5ron mak4tal 4m3akti mak4to makts4t ma1ku 2ma1kv ma1la ma7leb ma6leng ma4let mali9e8n mal5l ma4lov mals4 mal4t5ek mal3u mal3å 4mamer ma3mo m4an. ma3nak m3anal 6manam 4manav man8ce man4dom man4don ma3ne m4anf man5g4a m6ange 4mangr mania8 2manl m3anle 4manm 5m4ann man4nem manns5l ma4no 2mao 4mapa 2mapr 4marb mar5d6 7mare. 6mareg ma3rei ma7rel 5ma9ren ma5res 3mar4i mari8e9ne ma3rin m4arka 4markit mar4kv mar5m marmo9ra. mar7n ma1ro ma4ro6p mar3s4h mar7sl mar5te ma4ry. ma6rå 4masel ma5set mash3 ma4sia ma4sik ma4sis 6masju mas4ki 4masko 4masp mas4see mas6set massø9 7mast. ma5stem 4masto 4ma5str 2masy m6at ma1ta ma5tad ma3te ma4te. ma6ted ma4tel 7maten 7mater. 6matera 7matet 6m7atfe 4matil 7matil. ma1to ma1tr 4matra ma4t5ras ma4t3re ma6t7rom mat3s2 mats8l mat5ta m8at7t8r 2mau mau4k mau7l ma1un 5maur mau7su 2mav 5m6a6ve ma5ven m7avh m5avk ma4ze ma3zo 2m1b m4bao mbar3d m2bea m4beb mbe9da m4bedø m2bef m2bek m4beli m2bem m4bena m4beo m4bereg m4bero mbet2 mbi6ar m2bib m3b4l mboe2 mbo4end mbo5er. mbo5ere mbo5id mbo5n m4bop mbo5re mbo9t mbu7ar. mbu4e mbue7re mbus5 m1c m6co 2m1d2 m3de md7om 1me 2mea2 me5al mea5m 2meb 2mec meck4 4medat 2medb 5mede. me4ded med5ei me7den me7det 4medf me3di 4medik 4medir 2medm me6dok 4medom 2medr me6dret med1s4 4medu me6dun me5d4us med5v 7medve 2medy 4medå me7e 2meef 6meek 2meel 4mees 4meev 2mef m3eff 6me2ga me7gal 2megr 2megu 4meh mei2e meie5n m1eig me3ild me3ind mei5ni me7isk 4meiso 2mej 4meki 4mekj 2mekk me2k1l me3kn 4meko 2me5k8r 4meks mek5t 6mekte m2el 4mela me5l4aks 5melane 5melar me3le me4le. 4meled 4melei 4melek 6m5e6lem me4l5eng 4melik 4melis 4melit 4meliv mel5le mello6m3 4melok 4melov mel4si mel2s3j melsk4 mel5s4t mel7tr me1lu mel5v melvi6 2mely 2melæ 4melø 4me5l4å5 2mem me6mo. me6n5e6d me6n5ers 4m5enga men5k menle6ge. m6enn men4ny me4nom me4nor men4si men3sm men5spl men5te men6tek men4tom men5tr me4nyt 2me3o me6os 2mep 5mer. me6rab 4merad me4ra5l me4r5ant mer5di 4mered 4mereg 4merei 4merek 4merel me6rense me3res 4meress mere6t m4eri 4me5rib meri5ke 5merin merle7g mer9n mer5os 5mers mer5sk me3run mer5und 4merus 2mery me2r3ø 2merå me4råk 5mes. 2me5sa 4me5s4h 2mesj 2me1sk mes5ke 2me1sl mes6le 4me3s4o 2mesp 5mess messe7s8 7mest. 4mesta 5meste. mes4ti 6me7sto mest3r me5stro 6mestrø 4mestrå 4mestu 4mesu 2mesy 2mesø 4metab metall7s8 4me9tap me4tar me3te 4meteg 4metei 4metek 4metel 4metep 4metil 2metj 4meton me4t3ra me4tre met5ren met7rer met5res met5rik me4tru 4metræ 2metu 4metv 2mety 2metø 4metå 2meu4 7m4eu3s 2mev meva8n 2meø 2meå 2mé 2m1f mfa9ra mfar8ta mfav5 m2fek m6f3ess m4fi. m4fibr m2fit m5fru5s6 m5funn8s5 mfu6se. 2m5g6 m4ga. m4gi. mgå8va mgå8ve. 2m1h mhea4 m4hu. 1mi mi1a 5mi6al mia2n 9miane 7miar. 2miav mi6c miche6l 8m9idé 2midi mid5j mid3s4 mid4t 4mi3ele mi3er. mie9s8 2mi5f 5migraf 2mih 2mii 4mij mik6h 4mikj 2miko mik5ro. mik5ron mik5sa 6miku mi4la. mile6t mil7eti mi4lev mi7li 4milin mil6s5v 4milæ 2mim mi8ma. 5mimo m7imp mi4na. mi5nar mi4ne. mi4n5ers 4m3innh 4m3inns 6minnt min2s min3sp mins4t mi3nu m4inv mi4n5y mi7ov 2mip 4misa mi4san mi3se 4misek 4misel 9misé misha9ge 4mi7si mi2sk mis4ko mi3s4la mis9le 7mism mis4s5k mis4s7p mista9k 5mis7te mis4tra 4mistu 2misy 4miså 6mita mi3te 4mitj 4mito 2mit6r mitt3s mi5ur 2miv mi5vå m6ja. m6jan m5jar. m7jarn 2mje m7je. m1ji m8jingan m8jingar 8mjo mju7ke 1mjø mjøs5t 2m3k2 m4ko. mkro5 mku6le. mkå8pa 4m3l m7la mla6ga m2lef mlei5er. m2lek m2lel m2lem m4lera mle6se. m4lesk m6le5s8v m4leta mle4ve. ml6i ml5ja mly6se. mlø6pe. mløy3 2m7m4 m6mai mma5kl mmal5 mma8le. m4mam mmando5 mman6dol m5mar mmar7in mmar7o mmatik7ka m4medø m2meg m2mei m2me3k2 m4melu m6meni m4menu mmer5t mme4run m2me1s mmest6 m5met. m4meta m4meti m4metra mme5t6re mme3u m3mé m4mia m7mian m2mib m4mid mmie6n m2mik mmi5sk mmi5so mmi3st mm5n m3mu mmø2 mmå8la. 2m1n m2nee mn7eid m2ne9l mne4ra m5nese m4nesk m4nesta mnes9tie m9net. m4nete m2nev m6nip mn7sk 1mo 3moa mo2ar 4moba 5mode mo3dem mo5di mo6di. 2mody 3moe mo4en. m1off mofo6bi. mo6gi 5mogl mo5go m5ogs 4moh 2moka mo8ka. mo8ke mo1ki mo6la. mo3le mo4le. mo7le6s 4molt mo3ly m5om. 4momf 2momr mom4s5ø mo5ne mo4nisa mo2no mon1s mon4ste mon5t6 2mop 5mo1ra mo4ra. mo4rar mo7rar. mor5d6e 4mordl mor6d5r mo3re mores7 m2ori mo4ri. mo6rid 4m3o4rie mor4kl morla8ga mo5rok mo4rom mor4si mor4skj mor7sky mor4sp mo1rø mo9sen mo2s7k mos4o 6mostab 4motap mo4te. mo6te6g6e mo4tei mote7kl mo5ter. mo4tes mo5to 4motr mot7re mot1s2 6motsagd motsva5 mot7t mour5 3mo3va mo5w 8m1p m4pana m4p5anta m4pee m4pelot m6pena m6pep mpera8te. mpe5res m6peress m4p5erfa mperi6e7n mpes2 mpes6te mpe4sti m5pett m2pe5u mp3id m4pinje m8pla. m3p4lan mp5le. m6p5lin m6p5n m6p5ob mpoe4 m4poeta m4pog m6pok m2pop mp3opp mp1p8 mp3rad mp5ret mp3rop mpro8pa mp1s mp3sek mps4p mp5s6t mpun6ge. m9pur mp5ut. mp5ys mpø5 m9på. m3q 2m1r6 mro8sa. mro6se. mru7te. mrø9de m9rår 6ms m5sa. ms1ak ms5ant m1sc mse5lu m9s6ei m4sem m4s3eng ms5e4pl m4serv mse5s m5s6etn mse6t7jare mse8t9jas msi6e ms4ing ms3inn m4s5ja ms5kab mska9k ms6kin msk5ing ms3k4n ms3kor ms5kren msk8u ms3lan ms6lega ms9lua ms3lue ms4ly m2sm m1s2n ms9ne ms5no ms3næ m1so m4soms ms3ori ms1ov ms3s2 m4s3tal ms8tav m8s7te. ms7tea ms2ti ms5tilb ms3tim m1sto m4s5top m5s6topp mst5ord m8strand m5strane mst5red ms5tref mst5ren ms5trik ms4tru ms3unn msu9ta msu7ten ms1v msva9ra msva5re m3s4vet ms3ynd msø4ke. m4s5ør ms1øy ms1å 2m1t m3ta mt4b mtbe6 m2tee m2teg mteks7 m6te7kv m4tel m6testu mti9a m9tida mti5e m6tien. m6tif m2tik m6tini m4tiø mtiør6 m5to mt4r mt6ve mt4vin mtå5 1mu mu6a m1u2b mu2e mu3el mue7r mues1 2mug mug5l mu4he mu2k 8m9uka 4m1uke mu5la mu4leg mule6s mull2 mull6s7 mul6tiv 4muly 7mum mu3mi mum2s mun2c munes6 4mung mun6ge. 6m5univ mun3k munn5s6 mun4t3r mu6ra. mu4re. 2murn murs4 6murt m2us mu4se. mu4ses4 mu4sé mu2s3k muske6l5a must4 mus5tan 2mut 3mu1ta mu8ta. mutsa8la mut7t6r 2m1v mvak5t mva6la mvari6 mveg5s4 mvi7e6 mvi6se. 2mw 1my my5a myg4ga my3ke myk4kes myk3l my8kr my2ra my9ran my9rar my1re my4re. 4myrk m5yrke my4r5u mys3 my6sa my4se. my4so my4te. mytt6s5 5mæ mæ6la. 1mø møb3l mø7des mø6e mø9ens møkk6a m3økn 2møko mø6na mø4ne. møne9s mø8nest 6m5ønsk mø2o 3mørke mør4k5r mør5sm mør3ø mø5se 7møt mø9tas mø4tere møt9t 2møy møy9ar m5øys. 1må 2må. må5a 6måenh må7g2 må1k må4ka. må4ke. må4kes m6ål må5lar må4le. må6led måle3i målø6pe. må4ne5s6 må9nese må8pa. må4pe. må7pl 2mår måra6r må1re må1ro må1ru må1s4 må6tak 6måtf må5tr må3tø 1na na6ans 2nabo 7na7bortr na6bot 4naby na4ded na8dem nadi4 n3adop nad2s1 4nadv 8naf n1aff nafo7r na3fr naf7t na8ga. na3ge 4nagen nag3s4 nagså5 na7gø 6nah 4nair 2nak n6akk nak7ka nak6ko 5nakl na1kr n1aks nak8sa nak8se. 8n1akt nak6ta. na7kv na9lag na6lare 6nalarv na7leg na4l3ei na4lek nal5epo na4les na4l5ett na4lev nal5g nal6ge. na4lil nal6lag nal4løp nal3op nal5s2 nal3t na3lur 2naly na2l5ø 4nalå na3lå5r 5nam. na7mere na5mes na5mo9 5nams 2namø 9nan. 4nana n3anal n6ane nanfø8 4n5angr nan5k nan6ke. 4n3anl 6n5anle nan4ne na4n5o n4n5ans nan4sin nan4skj nan4s5t 4nany na7o na5pe nape4s nap3s4 na7p8 n4ar. na4rap 2narb nar5dr 4narea nar7ei 4na5rek nari4e5n 7nariksk 4narkiv 8n7arm 6n5armé 6n5arme nar8ma. nar5s nar8ste 2nart nar6ta. nar5ti nar7v nar5ø nasa3r na4sas nas7h 8nasik na4ski na2s5t4 nasta5 8nasu na1ta nate8k na7tem 4natl 4natom natori5e6 nat8ra nat3sp nat6tak nat6tea naty5 2nauk naus6p na6va. 4navd 6navf 2navg 2n3avh na1vi 4n5avk 4navl nav4les 3navn 6navo 4navr n1avs 4navt 4n1b2 n5ba2 nba3d nba9ser nben4s nbo5et n6buf n6butr nbyr5 nbø9le nbø6n n1c n5ca ncel5 n3che nch3ei n6cot n2cy1 8nd n7daa. n6dabi n4dad nda5f n7dag4 ndags5 n4daks n3dal n4dalf n4d5all ndals3 n4dark n6d3art n8dask nda5tal nd5d4 n3de. nde5a n2deb n2ded n5defi nd1ei nd4ein nd6ek n4dekl n4deko n5d4e5l nde4le. n4delik ndel4sk ndel4st nde6lt n2dem n5dem. nde5mo n5den. n6dener n5dens n2de5o2 n2dep n4derab n4deras n4derei n4derim nd6erk nderla6ga n4desi n4dest n4desu n1dé ndi4en n4d3int ndi6sk nditori5 nditorie6 ndit4t5a nd3jer nd1ju nd5k nd4lem nd4lese nd4lest nd4lev n8d7m ndo9a n6dob n6d5okk nd4om4s3 n2doo nd1op n2dor nd3org nd5orm n6dote nd5rae n4d3ram nd3ran nd6rek ndre4ra nd5resen nd5rett nd1ri n1dro nd4sag nds3ak nd4s5amb nds5elv nds5ende nd4ser nd4sje nd4skj nds7kul ndsla6ga nds6lett nd7spu nd3s4te nds9teg nds5trek nd5stry ndta6ka. n6duf ndu3is n4dun nd3ung ndun6ge. n2dup ndu6si ndus7k nd7v n2dyg ndy1k n2dys ndy5sp ndø5l n2d1øy 1ne 2nea 5neae nea4g ne7a6le ne5alp ne5als nea9m6 ne9a8r9an nea9ren ne1as 6ne7av 2neb 3nebb 4nebe ne4ble neck5 2neda 3nedal ned3d 6n5eddik 4nedeb 4nedeg 4nedel 5nedg ne4di. nedi4s 2nedo ned5over7 ned1r ne6dre 5neds ned3st 6nedu 4nedø ne5dår 4neeg 4neei 2neek 5ne4e4r5 2nef n1eff n5eft 2neg 5negati ne3gla neg5lesp neg8r 6negru 6neh 2nei n2eid nei8dan n5eig n2e1in n3eini 5neir 5n6eisk 2nej 2nek ne4ka. 6nek2l ne3kn nek2r nek5rin n7ekser nek5t 4nela nel3de 4neled 6nelegg 7neleggj 4nelei nelei5er 4n3elem 6nelê 4nelid 4neliga 4nelis 4nelit 4neliv nel4lov nel7s 2ne1lu 4nely 2nelæ 2nelø nelø8pa 4nelås 2nema 4n3emb 4nemel 4nemer 6nemes 2nemi nemie8 6nemj nem6k 5nemn nem5ne. nem7nel 2nemo 2nemu 2nemy 2nemø 2nemå 3nen 4nena nen5at. 6n5en6den 6nendr nene4 4nened 4nenem ne3nes 4nenesl 4nenet nen5eta 4nenev nen4ga. 4n3enhe 6nenhet 4neni nen5se nent5ei 6n3en5tr 4nenu 4neny 4nenæ 2neo 5neo. ne5o4r 7neos 2nep ne5pe 3n4er. 4nerad 6nerap 3nerb 4nerea 4nered nere6de. 4neref 4nereg 4nerek 4nerent 4nerep ne5res 4neress 4neresu 4neret 4nerev 4nerfar 4ner2g ner3ga ner3ge 4ne3rib 4nerik 4nerit ne4ri9v 5nerl nerla8ga n3erob 6neroc ne7rof ne5rok 4nerom ne5rot ne1r4ov n6ers. ner7se ner5s4i ners4p ners8ten 4ne3rul ner5un 2nery 3neryr 4nerør 2nerå 2nesa ne4sa. 5nesar 4nesc 4nese 6nesek nes6er 5nesets nes5eva ne3si nes5ind 4nesit 2ne5sj ne5skam 4ne5skar nesk4e 4neski 5neskins 4neskj 4ne5sko 4neskr 6nesku 2nesl ne3sli ne7slø nes6mi 6nesn ne7snø 2neso 3nesot 2nesp nes6sam nes4stu 5nest. 4nestas nes9te. 4nesto nes5tor 4ne3str 4nestu 4nestø 2nesu 2ne1sv nes8va 6nesy 4nesæ 5nesøy 4ne5så neså5re 3net. 2neta 4netaks n7e8tas neta6le. ne3te 5nete. 4ne3ti 6netid 2netj 2ne5to 6netom 2net4r 3nets net5s4p nett3a4 net6tel 2netu ne4tv 4nety 4netå netå5ker 2neu neu1r ne5us ne6va. ne4ve. 6ne8vent 5nevik nevi8sa 3nevn nev1r ne4y5t 2neø 4neå 1né 4néb 4néd 2néf 6néh 2nél 4ném 6néo 2nép 5nér 4név 4néå 4n1f nfall4 nfalls5 nfan5t n6foa n4fob n4fole n4fom n4fora nfor9en. nfos4 nfø5des nføy8ed 8ng n8g8ad n4gaf n6gag ng1ak ng5and. n8gan8da ng3ank n4g5arm n4gart ng5art. n5garta ngar5u n2gat ng5ato nga4ve. ng7avi ngd4 ng4ded ng4del ng4dep ng3dr n4geda n4gela n3gen n4gena n7gene n4g3eng n6geno n4genu n3ger n4geret nge5run n2ges nge3sl n4geta n2ge7v ngfø4 ng5g2 ng5id ngjen5g ng1l n5glem ng4lu ng7n ngo4d ng5odd n7goe n3g4ok n8g7o8m ng9ome ng5ond ng7o6pe n2gor ng5ord ng3ork ngos6p n2got ng3ra. n5grad. ng5rand ng7rea ng3reg ng3ren n4grend n4grer ng5rest ng3ret ng3rev ng3rid ng3rin ng7ro. ng9roa ng7roe n5g6ros5 ng3råd ng8sa. ngs5elv ng4sem ng4ses ng2sj ng2sk ng6skj ngs7leg ng5sløy ngsmå6la. ngs3ne ngs7tep ngst5rid ngstyr8ke. ngs9tør ng3und ngu5ru. ngvi4s ng5ye n1gø n2g1øy ngå8va ngå8ve. 4n1h2 nhat5 nhet4s 1ni ni1ak ni1a2n nian5dep ni2bl 4niby 4nibå 4nicr n8ida ni4del ni7dele n5idé ni6do nid7r nids4 nid5st 4nieg ni1el 7ni3e2n ni3er. nie5ri ni7ers ni5ert 4n3i4fr ni5gla ni9glo 2nih 8nij ni3ke 2nikj 4ni5ko 2nikr 4nikv ni5l4i 5nilu 4nimar 4nimas 4nimo 2nimp ni6n7al 2n1ind 4ninf ning3o nin5gr ning6s5 ningse4 nings5te 2n1inj n1inn 4ninnb 4ninnh 4ninns 4ninnt 2n1ins 2n1int 2ninv 5nio. nion2 nions3 4niop 7nios 4ni5ov ni4pet ni9pet. ni9pets ni2pl nip3li nip5si 4nir nir7kel 4nisem ni5set nis5im 4ni3skj nis4k3o ni9sol niso5ne niss4 4nistas 6nistat nis5tik 4nistil ni3str 4nisty 4nistø 6nisu 6nisy n4it ni3ted 6nitj ni4tog ni4tos nitt4r nitt4s3 nitt6sk 4nitu ni3ty nit5z nitær6e 2niub ni4umf 2niut 4niva 2nive ni8v7eg niv5ei8 4n5ivo niv3s2 6niå 4n1j n6jah njav9 n2jed n5jede. n4jee n6jei n2je1s n3jes. n2jet n3jet. njet6r n5jett 2nk n1ka n2kak nk3aks nkal5l n2kau n4kedo n4keer n4keh nk5eie nkel5s nkelt3 n4k5enh n8keno n4k5erfa nker4st n4ke1s4 n6ketø n1ki n4kid n4kie nk3ier nk5ind nk7inf nk3inn nk7int n5kj nk1k4 n1kla n5k6lang n7k4lis nk3lok n1klu nk3ly n3klæ nk1lå n1knu n1kny n3ko n4kof nkofi8 nk5oks nko5le nkol4la n6kot n6kov n1kr n3krav n7k8ry nk1s2 nk4tak nk6tal nk4tin nkt3sk n1ku nku4le. nkuri9 nkurie8 n4ku6t nk9ute n1kv nk3ve n7kvit n6kvo n9ky n1kø n1kå nkå6pa 4n1l nland9a nland6se n5le nlei7er. nle8ma. nli4en. n3lj nlu4e nly6de. nly6di nly4se. nlø6pa. n7lå 4n3m nma4le. nmik3 nmi8l nmini6 nmo6se. nmusik7k nmå6la. 4nn nn4ab n2nad nn5ad. nn9aft nn5air n6n1ak n4nala nn5alg n4name nn4an nn5ana n9nane nna8ni n4n5ank n5nanl n6n7anta n9nar. n4nari n6nasi n4nask n2nat n2nav nn3avl nnbo9e nnbu9e nn5d2 nndø4 nndør3 n5nea. n5neap n5nebar nnebe8r n5nebu n4nedi n2nee n6nef nn1ei n3neke n4nelo n3n4en nne6nat nne4n3o n9ner. n4nerel n4nero n7nes. n6nesj n5nes4la n4ne3st n5n6et. n4nesø n4nete n2nev n2ney nn7g8 nnhø8re. n4nid nn3ide nni3e n2nim nn7inf n5nis nni4sj nni4s3t6 nn7k2 nnle6ge. nnlø6pe. n4no. nn5of nno2m1 nn6oms nnomsy8na nn1op n2n1o4r nn7ord n4n3o4ve nn9r nnsa9ka nn4s5amb nns5and nns3ar nn5seg nnsei8g nn4s3em nn6s5enk nn4s3es nnse6te. nnsi7da nn4s3in nn4s5i6s nn6s5jak nns5kan nn5s4kli nns5op nns3or nnst6 nn6s5tab nns5tal nns5telt nns4ten nns5tep nns7tin nns5top nn6s5tre nns5tro nns3tv nn4s5ul nns3va nn6s5vo nnsy8na nn2sø nns3øk nn3så5r nn7t4 nnte6se. nnto9ga nnu1i nn6ung nn1ut nnvi4s nn1yn nny4t nn7øk nn1øv nn1å 1no noa4g no1ak 5noane no7ar. 2nob nobe4l no4bl nob5le no3b4r no5co nodi4e5n 3noe 4noef 4noei 4noek 4noent 2nof n1off 3no3ft n6ogra no5id no3in 2nok no1ki nok8r nok6se. n3oksi no9le 2nolj no6mid no6mik no4mil 4nomj nom9m nom7s2 5nomy non1s4 non5t 2noo 2nop n1opp nopp7s8 no1r4a no5ran no5rar no5ras nor4da nor6d5end 4nordn nor4d5r nord3s4 nor4dø no9ree no3rek no3ren no7ret nor5g 3norge norges5 n3o4rie 7norit 4nork nor6kla nor6kle n4orm normlø7se nor2s nors6ka. no3ræ no4sel no4ses nose8te. 4nosp no3stj nostra4 2nosy no4ta. no4te. note5i 5notek no4tel no4tes not3s 4noty 4nou no1v no3ve 4no5vi 4n5ovn 7nó 6n3p2 n5pe npo8ta n4påk n3q 2n1r2 n9ra nra8na nra8sa n3re n4reb nrei7e n6renem n6reo n6ri. nro6de. nro6t nry6 nrå8da 6ns n1sa. ns1a4d n5sag n5sakk n5sa4kr ns3aks nsak6se. 6n5akti ns5akv n3sala ns3ald n6s5alp n5sane n4sanf n5s6ann n5sanse ns5ansi ns5ant n5saren. ns6arm n6sart n4sati n1sch n3sco nse9a8l n2sed ns5edd ns8ede n2see nse5ei nse6er n6sef n2seg ns5ege nsei6d ns5eie. ns9eig n4seks n4s3elv n2sem n5sen. n5sene. n4sener n9senes n4senet n4seni n7sens n3ser. n4sera nseri7e6 n4sesa n4sesi n4se3sk nse3sl n4ses4p n4sest n6sesu n4se3s4v n4sete n9sets n2seu ns5fr n2sh ns3ha ns7he ns5hi nsi5de. nsi4ent nsi6er. nsin5d n3s4ing ns3inn n4sinte nsi8ra nsis7k ns3jak n4sjav n5sjef n6s5jord n4skan n6s5kauk ns7kele ns4kete n9skim ns5kir n5skis n6skja n6skjele ns5kjen n3skjæ n8s7kåp nskog6s ns4kolli ns5kor ns3kro nsku9et n4skug ns5kuli n5skum ns1kv n5s6ky. n5s4kye n5skyss n5slang n7slarar ns5las nsle6ge. n3s4lekt ns6leri ns5lid n5slyn n1slå ns3mi n4smal n4s5mo n4smur n4smus nsmå6la. n5s4nar ns5nes nso4d ns1of n3s2ok n1sol n4sond nson6de. nso5ris ns1ov n3sovn nspa9ra ns5pels n5spet ns1pr n6spros n7spur ns7s6 nsse4e nsså5 ns4ta. n4stak n4stag ns5take n3stam n4stank nst5art nstar8ta. ns4tau n3s6ted n3s4tei ns4tel nste6ma. ns5tenk n6step n5s4tik ns5tild ns7tilf n4s5tils ns4tin ns4t3i4s ns1tj n5sto. n3stru ns7trøy n3stue n6stuk ns5tur nst3ut n1su ns1uk n4sung n5sup ns5vang nsva9ra n2s3ve ns9veg ns5verd ns5vern ns1vi n5s4vill ns4vind ns9vis n4svu n3s4væ nsy4d ns1yt n5søn n4s1øv ns5øya n5såpe nså7pen ns7ås. 6n1t n5tab n4tagr nta4lan ntall4 nta5na. n4t5and nt3anl nt4anv nt3app n7tart n6t5arvi nt6as nta5sia nt4at nt3avi nt5avr nt7avs n2tea n5teat n2tee n4tef n4tege n4tegi n7tegn n2tei nt5eini nte5ins n5teis n4teka n7tekn n4tekse n9teleg n5telig n5tell n4tels n9telt nte4ma. nt3emb nte4mis n5ten. n4te7na n5tene. n4t3enh n5tens n2teo n5teori n5tepp nt4er n5ter. n7terek n6terest nte6risk nteriø7ra. n5ters n7tes. n4tesel n4teta n4tete nt4e3u nt5e4va nt9g nti1a n4tiat n4tid n5tiem n4tig n4tikap n5tiki n4tikl nti5kli n5tile nti3lo n9time. n7times n4t3ind nti6net n6tini n2tio n2tip n4tisa n4ti5sti nt5l nt5n nto3a n2tob nt5omf nt5omn nt3oms n2t1op n5tor. n5to5re n6torg n2tou nt1ov nt6ran n4trep n5trer nt5resi ntres9kjare n4t3rin ntrol6li n6trom n6trul ntrøy4 nt5skj nt5s6la nts2t nt3t4 n6t7ub ntu9e ntu4l n2t1u2n n4t5uro n2t1ut ntva8la nty6e ntyr3s nt7år. 1nu 4nu. nu3an nu4av nuft4 nufts5 2nug nug6la 4nu4h nuit8e nuk5 nul9t8 4nulu 6nuly nu9me 2n1un nun4ge. nuo2 6nup nu3pl nu4re nu5sa. nu5sen nu7ser nus4k5l nus7l nuss4 nu6st nus3ta 2nut nu7ta nu3te. nute6r nut5eri n7utl nu6ume 6n1v nva6la nvand5 nverle9 nves1 n5vi nvi4et nvi4ka. nvi5ke n3vu nvæ8ra n3w 1ny ny5ar. ny9ast 2nyd ny4de. 4nyef 4nyg ny5ge 5n6yhe ny3ke ny3k4le 4nyko ny1lo 2nyn nyn8da. nyn4de. 4nyo 4nyp ny8pa ny6ra. ny4re. ny7rev ny4ru ny1s ny5se ny9s6k nyst4 nystu4 ny3te ny3tr 2nyv ny8va. ny5vak ny8ve. 4nyø n1z 1næ1 næ8ra. nær9and næ8rast. 1nø nø2da 4nødd nødde5 nød3sk nød5sto nø9dun 2nøe 4nøf nø1fl nø1fr nø7gr 4nøko 4nøks nø4le. nø9mo nø5mu nø3p4 nø7ra nø6red nø1ry nø3se nø1sk nøs4l nø7te nø7tr n6øtt nøtt6r nøv4d nø3ver nøy1 2n1øy. nøy8a9n n7øyh 4nøys n3øys. nå6as 1nåd nå5ded nå8en nå6et nå8j n1å2k4 1nål nå2la nå5lev nå8ma nån6de. n1å4p nåp8na n1å6r nå2s nå5sa nåse4 2oa oa5c o1af oa4k oak6kana oak4ku o1all o3alt o1a2m o3a6n o9and o1a6p oar6d7e oar4d5in oa4r5e4g oa4r5enh oa6ré oa4r5i oar5m oa9té o1au o1a4v 2o3ba obakk8s obb4l ob4bo ob4b5r ob4b3u ob4e o4bea ober5et ober4s obers5ta obers5te o3bes 2o3bi obi5e6 1ob1j o1b2l ob5la. ob3le. ob3len o2b5li 3oblig ob4lo o1b4o obo9a 2obr ob5rar ob1re ob1ri 3obser ob5st 2o3bu 2oby obyl5 o5bø o3bå 4oc ock5ers o5cy 2o1d o6dab oda4f od7att odd5ei od4del od4dest od9do od4e o2deb o6d5ei o4deko o5deku o2dep oderle7 o2des o5det. o5dets odie4n o4d3igl o4dj odko5 od3oml od3ov o2d5re o4d3rø od3sk ods4ka od3s4po od5s4tol ods8t odu7s o4dy. o4dyb od5øk o5døs od5øy o2d1å6 6o1e oe6f o4ein oek6s oe2l oe4mu oe2n oen5a o7ene oeng5d oen2g7r oeng3s oeng3u o5ens4 o7ens. oen5t o3e4re o6erer oer8ma o3ersk o2es oe6sip oe6sit oes8ka oes8ke. o4etan oet2h oe5ti oev6ne. 2ofa o2fa. ofag6a o4fara ofa4se o2fav o2feb o4fei o4fera o4fe3st o1fé off9and of4fek of5fes of6fia off5id of6fr of2fu of6fy 2ofi o4fip o1fl of5le 2ofo o6fra. of9ras of1re 6o5fri of8sa of8se. 6oft of4tel oft2s3 2ofy 2og o2ga. og7ank o4gare o2g7av 4oge o2ge. o4ged og1ei oge7na. o3get og4gera og4g5j ogg3s4 og6g7u ogi3a4 ogie2 o4giev o2gif o6gig o4giko o2gil o2gim o2gin o3ging o2gi1o o6gista o6gi7str o2giv og5jer og7la ogly7 og4ned 5o4g5ni og6nel o5g6nos o2go. og6ra og4re. o4g3reg o4g3rei og4rer og7rett o4g3ri og3ryd o4g5rø og5rå og3s4 ogs4a ogs6an og3s2e og1sk ogs4kj og5sl ogs4le og1s4p ogs5pa og5ste og3sti og4s5tj ogs4to ogs4tr ogs5t6ra og5stre og5sy 5og5s6y4v3 ogt6r 5o4g5åt og1un og5ø og7ås 2o1h6 ohe5te ohm9a o4ho. ohø4 oia4 o1i2d9i o1idr oid5t oie4n oi5er oi6es oi5k oi4la o1im o3in. o1ing oi2n1o4 o4insp oi6r o1is o2is. o6isa o2ise o4isi 4o1j o8je. o4jo. o1ka ok7aft ok1ak oka4n5i6 ok2ar ok5ark o3kas ok1ef ok5els5 ok5elv o5k6en o4kesk o6kev o1kj ok4kand 4okke ok6kera ok4ke5s ok3kje ok3ko. ok5kol okk8s7m ok4kun 4okl ok8la. okla5m ok8le. o1klu ok7lut oklå5 2okn okna8sa o3ko o8ko. ok8ol o4k3oms ok3omt oko5pe ok5opp ok3orm oko4s oko9se o6kov o1kr ok5reo o6kret o4k5ru oks4al oks4e ok4sek okse5kr ok4sem ok7sen ok6serin ok4ses okse9te ok5s4i oksi7da okst2 oks6ti ok6s5vi oks6tr ok5ta 3oktan ok8t8a8v7 ok3ti ok5to okto4r5i okt6r o1ku ok5u4k oku8le. oku6t ok7ute o5kva o6kvak o3kvi ok5øy o3kå 8ol. 4o1la ola6ded ola8ga ol5anl ol3ant o9lar. o6larbe ola5t olber4 olbo7e olbo7ge. ol4bol olbu7 2old ol7dan ol5de. ol4dem ol4dest ol5det ol3do oldo7ve7 ol5drev ol3dri old3s4kr 2ole o5leaks o6leb o2led o2lef ol5eig ole5in o2lek o7leki o2lel olele6ge. o2lem o5lem. o5lems o7lene. o9lenes o4lenet o4leni o4leno o6lered o4leru o2les ole5sta ole5str o9let. o2lev o1lé ol4f5i ol4fj ol3g4e ol1g4l 2oli o4liba oli9e6n oli7ert oli5ne 3o6lj olke3s4 ol4kese ol4kesk ol4kest ol2k3l ol9ko ol6ku ol5kv ol5la. oll3ak ol4lam ol7le. ol4led ol4lel ol7len ol4les ol6linj ol4log ol4lom ol5los ol4lov oll5over olls4t oll5sv ol2lu ol4løp ol6løs ol6løy ol2lå olme5s ol4mest ol4må ol9n 2o1lo o4lo. o5loan o3loe o4lof olo3i ol5oks ol3oms ol3op o6l7os. o6l7o6se o6l5osf olo5ve o8l7ovn ol4ped ol7so ols8t ol5sva ols5vik ol3ted ol5tep ol2tr ol6t7ra olt5re. olt5rer olt5ret o1lu olu5l o4l3ung olun8ge. o4l5ur ol5va ol1vo o1ly oly7d ol5ør o1lå 2om. 2oma om3ald o2ma2m om5ang oma4nif omann4 oman5t om3ars omar7ø8 om4as om1av omb6 om4bet om4bis om3bl 5ombod 1ombu 2ome o2m1ek o5meka o7menes omer6s o6mese o5met ome4tak ome7tar om1eu 3omfan 3omgre 8omh o2mia o2mib omi3e4 o4miek o2mig o7mikk o7mine om7inn om3in5s o4mio o2mir o4misj o4mist o2miu om1j 2omm om6mat om4med om4metr 3ommø 2omo o4mofo om1op omo1v omp2 ompa3t 1omr 2omre 2omro 2omru 6oms. oms3al om4sek 3omset omsko9d omsku9la om4som oms3un oms4ø omt2 3omtal om4tes om3ti om3tv o2m1u o3mus omvæ8re. 6omy omyr8ke. o2møk omø4r om5øy6 o5må 2on on3abo o4nac o6nak o4n3ang o4nap on3app o6narb o4n3arg o4n3arv o7n8a7sj onat5r o2n1a4v on5b on4dar onder6e ond3re on4d5ri onds4i o4ne. on5eie o4nele o7nell o2nem o3ner o4neru onesi6 o4nesk o4ne3s8t o4nete o2nev on7f on7ga. ong3d on5ge. on6ged onges4 on5gi on5go. ong2r on8gro ong9ros ongs4j on2gu on4gy on4g5ø o9ni. o2n3i2d oni1e o2nil on5ild o2nim oni6mi on3inf o6n7inn o2ni1o o4ni5p o6niso on3j on1k on5k6a 3onkel on5k6i on4kle on5ku onle6g on5nad on3ni on5ny o4no. o5nor. o4no4v on3ove on4sh ons1i onsi3s onsi4v ons1k4 ons7ke ons1l onsla6ga onstitue9ra onstitue9re onst5rum ons5und ons1v on4sve ons1å ont6a on3te on4ted on5ten on5ti on4tok on5tor ont2r on7ul8 on5ur onu4sk o4n5ø4 on6øy. on7å6 2oo ood1s o1off oo2k1 oo5k8a ook5es ool7a oo4m5i oo6mo o1o2p oopa8 oop9an oo4pe oop5en oop5et o6opi o1o4r oor6da oo5s oo6sp o1o4v 2op. 2opa o4pab o2pak opan9d o4pa3re o7paren o4pasj o4pau o3pea ope1i opel6lø 2open o4pena o9pend o4penet o7pent o2per 6o3per. 3opera ope6rar o7pero o5pert 2opet o4peta 4oph o1pi o4piek oping9s o4pir 2opl o1pla o4p5land op3li op9lu op4na. op4ne 2o3po 2opp. 4oppa op4p5art op4pas 4oppe 1oppg op4pi. op6pia op4pis opp3li 3opply op6poe op6pr opp5rop opp5und opp1å2 2o1pr op6re op7ru op7rå op6sa. o8p8si op2t1r o4q 4or. o6r7add or3adr o2rag or1ak 2oral or5ald o4r5alg oral4st or6alt. o3r4am o4rana o3rane o4rang o4rans or6ap or3att o4rau ora3uk or1a4v 4orb orbit5 or7by 4orc orda9ta or3dea 6ordel ord7e6pl or7dik ordi4s or4d5ise ord3it 1ordn ordre8gi. or7d6rø ordsa6me. ords6e ord3st ordy9ra 8ore orear8a orear8e o5rebra o8redi or1ei or1el o4rela o6reld ore6na. ore4ned ore4net or3enk oren3s ore6o5g6 o6rerf o4rero ore1s2 o5resc ores6te o4reta or9et8n o6retv o2rev 2orf orfa6re. orfi7ne orfø9re. 1or3g4a 4orga. or3ge or5ger orge4s orgi6e5ne org4sk orha9g orha9le o1ri o3ria ori5b4 ori4e5ne 5orient o7riet o2rig ori7ka o6rim or3ind or3ink or3inn or3ins oriro8 6oris oris4a 6orit o4riti oriti6me. or5ka 3orkes or5ko orko6se. ork7s2 6orl orla7te or5le orm6al5t orm5ang or6map or5mel or4m3un ormæ9 or4nar orned5 orne6dr or5net or4nol orn3t 4oro o3roa o3roe or3off o5rog oro5i o1ron or1op o4r1or oror9da o5rosa o5rot or3ove or5ovn orpe6s 4orr 2ors ors5alt or5sen or4serk orse9ta orse7te. or3si ors5kar orsk5ei4 ors8k9l ors4ku or1s4l orsmå8la or1sn or3s2o orso9na orso9ne orso9v ors4pa ors4ten or1su orsva9re or3sy or9sø 2ort or4t3ak orta8la. or4t5and orta9pe or4t5av orte5i6g or4tek or3tem or6t5erf or8t7erm or5tii or7til or5tis 3ortod or6tok orto9ne orto4r ort5ori or4tou ort5res ort5råd ortå4 or4t3år or1u oru8d or9ude oru4h o5rum oru4t5 oruta4 or4utf orva9ra or5veg orv3s 4ory o7rya or1yn 2orø or9ø8k orøk8t or5ør or3ø4v orøv8d or1øy or5ås 2os o1sa o4sa5b o6sad o2saf o4saku 6o5sau osbi7 osefi5 o2seg o5selei o2sem os2en o6sena ose5sl ose5sm oses4sk oses6sp oses4st o4seu osfa9ta os2hi os7his osi6e7ne osi5ere osi5ert o2s1ing osk3ei oskei6e o4skil osk9lar osk5len o1sko osko5p o3skri os8k3v os2l os3le oslo1 os2lo5d4 os5lu os5lø os9ma os5me os3mo o2sn o3so os7ove os6pa. os6pe. os4pil os4por os4sek os3sem os5sens osseri7e6 osse5v ossis5te os6ski oss3kj os4s5ko oss9l os6spa oss7tro os7sty os8sv ost5adr os5tal osta5le o8ste. os4teg ost5egg os4tek ost6el os5teo o4sti. o8stia o4stie o4stin os5tis ost1o os6tons os6trad ost5ran ost3re o3stro ost5rup ost7rå o5stø os1v os5øy os7år 2ot o1ta o5tad ota4l5a ot5ald otal7ev ota4lov o9tane o9tar. ot3arg o8t9arm o5tas ote7d ot6ei ote5int otek5i ote6k7la otekla8ga ote4kle ot5elem ote5lev otel6lan otel6lek otel4li otel8lø o4tena o4t5ende oten8de. oten4s5p o2teo o4teram o4teret o6terev o4tero oter5s ote5r8u o4terå otes6ter ote5sté otet5a otet5o otet3s6 otfø4 oti7ert oti2k otika3 ot7i6ko o1tj o6tja ot5jer ot6nero otno7te. ot6nå o1to o2to. o4to3a o5toa. o2tob oto6en. o6tof ot3off o6toga o6togram o4toi o2tol oto5ne oto4ral otor5d o2tot o2tou o1tr ot7red ot5rer ot5rev o6t7ri o6t5rom o6t5rø ots5el ot6sh otshusvæ8 ot4s3ki ots6op otsopp6 ots5pr ots5tab ot7ste ots6å ot6tank ot5tas ot5tegn ot6tenk ot5tese ot5tin ot5toa ott4s3k otts5po otts4ti ot7tug ot4typ o1tu o6t5ut o1ty oty8e ot1yt o1tø ot7å oub8 oul5l oun6ge. ou4r ou7ri ou5ro ou9sa out8a ouve4 o5vae o1vak ovanfø8 ovan9o ov3anv o7var. o6varb ova9re ov5art ov7arv oved3 o1vei o1vel ove4la 4oven o4vend o5vende ove6nya ove2r over3a ove7ra. ove9ras o6verdr overe6 ove8r5es 3o6verf 3overg o5verks 5overr 5oversik overs4p over9v o1vet 6ovh 2o1vi oviso3 2ovj 6ovna ov4nes 2ovni 4ovo o5vo. o7vom ov1or o5vot ov1o2v ov5sal ov4sek ov4sen ov9ske ov4sle ovs1p ovs5te ov4sti ov7sun ovsy5k ovta6le. ovveg7i ow1 owa8 o7was owat2 ow5h ox3 oy9ar oys5l o1y2t o1za o3zy o1ø o1å ô6ra ô2re ôr5ei ô1ri ô4t ó9sa ó7t ó8v ò9re 1pa 4paa 2pac pa8cen p5ad. pa3deb p4adg pads4 2paj 6pak. 6paka 4pake pak4kas pakke4s pakk7esl 4pakti pa3kv 3pa1la pa3le pa6le4o7 pa7lim pal5in pal1j pal5lø 5palm 4palø 2pam pa5me p3anal pa4nap pan9de pa5ne pang5s6 pan3ka n7k8rea 9panne. pan5se pan5sl pant8r 4panv pa4ny 2papa pa8pa. pa3pe 4papo pap4pr 4papr pap3ri pa4ra. 5parad 2parb 4parek 4parena par5ess par5g 2pari pa4ri. pa3ris 4parki par6k7l par4kv par3m8 pa1ro 4parr par8ra. par9s4 par6tid par4tig par4tin par5u par7v parvi6 6parø 4parå p6as pasa5 pa9se pase6r5 4pasp 3pass pas5sab pa4s3t pas4tar pas5ti pas9v pa1t pa3te pa4tist pa6tre p8atta pat6tak 2patu p8at6v pau7k 2pav pa4ve. 3pa1vi 2p1b6 pba4ne. pbo6da pce6 2p1d4 pde4le. pdø2 pdø9d 1pe 2pea peak3 pe4a3re 4peb pec3 pe7d6a 5pedas 4pedd pe3de pedfø9 pedi9e8 pe6doa pe6don 4pedr pe4dro 4pedu 4pedy6 2pedø pe7då pee6 pe3er 2pef p5eft 2peg p5egg peg8ge. pego4 2peh pe4il pei4leg 2pe1in pe6ism 2pej 2pek pe8ka. pek4l pek4tro pekt7ros 8peku p6el 4pela pe5l4aks 5pelal pe5lar pel9d 4peled pe4lef 4pelei pe6lep 4peler pe6lev 6peliv 6pelj pel4lo 4pelov pel5s6e pel5s4i pel7st 4pelu pe5lun 2pely 2pelø 6pelå 2pem p1emb pe4nan pe4n3ar pen3de 6p5enden. 4pener pe3net 5peng8 pen4gel pen7gl peni4n 4peniv penly4 pen7s8a pensa7k pensa8la pen5sk pen4s5l pen3s6m pen5s6o pens4t pen9sta pen7ste pen7tag pen5tr 6peny 2penå 2peo pe7o6s 2pep pep5ar. pep7p pera3a 4pe4rab 4perad pe4rai pe4ral 4perap pera5t 4perate 5p6erc 4pered 4perei 4perek 4peresp 4perest 4peresu 4peret pe4rev 3peri perie8ns 4pe5rik peri3s4 4perit per7k8 per6les per5mu per5n 4pero pe3ros pero6se. per6regj per6rei 5perro pers6m per4tro per4t5rå pervi6k 2pery 6perø 4pe7rå 2pe1s 3pes. pe3se pe6se. pe7si pes8ka. p3eske pes4ke. 6pesl pes4n 5pess 3pest. 5peste. pes5til pe7t8 4petab peta6ka 4petal 4petas 4petau pe3te 5pete. 4peted 6petei 6petek 4petel 4petem pe3ti 4petid 4petil pe4tim 2petj 2peto 2pet4r pe4t5ru pet1s6 4pett 2petu 4petø 4petå pe2u 2pev peva8ne. pe5vi p5evn pev6ne. 4peø 4peå 3pér 2p1f 3p6fenn p3fo p5fr pfri4 pfø5re 2p1g2 pgjer4 2p1h phav2 pha9va phavs5 3p4her phe9te phe7va phe5ve phi5li 7pi3ane 7piar pi4as 7piase 4piav 4pib pi6ca. 2pid pid3s2 pie2n 6piend pi3er. pi9ers 2pif pi9fr pig5ge pig6g9u p7i6gj 2pih 6pii pi4keh pi6kel pike5r6o pi4ké 8pikk pik3ko 4pikl piku5 pi5la pi6la. pi3lep pil4lag pillba6 pil6led pil4leg pillega6 pille6ra pil4le5s6 pi1lo 2pim pi4na. pi4ne. pi9ned pi4nel pine4v 3ping pin6go ping3r ping5sk 6pinns pin4sl pi2nø pio6n5an pion5s 7pi2p pi4pi pip9la p8pip pi4rar pi4res pi4rut pisi9e pi4ski 2piso piss4l pis4sp pis4st pis1t pis4t5r pis9t8ra. 1pit pi9ta pita7la. pi5té 2piti 4pitj 4pitr pit5t 2piu 2pi5v 4piø 4p5k4 pka5v pka8va pl6 8pl. 2plad pla8de. p4lak p4lan. plan7de 4plane. 4p5lan5g plan5s plap3 4p1lar p2las pla4st p2lat platina5 2ple. 2pled p8legi 4pleis p2lek p6le5n4u ple5n4a ple6r5u ple8se. 4plev p2li 4plit p3liv pli7va plo4gj p4lo8i p1lok 4p5lov plu4e p4luk plun3 plun6d7ri p1ly ply5d8 plæ5re plø6pa p1lå 2p3m 2p1n4 p7ner pne6se. 1po po9a pod8 po6da. po4de. po6em 2pof po6f7r pog6 4poh po5id 2poke po6lan po3le po4lek 6polj pol5li po6lom pol6s4ka po2lu 2pom pom6p9u pom5s 4pon. pon5d pon4gr pongs6 2pon1s pon5sa pon4sv po2p1a po6pe. p5opn pop1s 2por. po1ra 2p5ord po1r4e po4ref po6reg po8ré 2p1org 2pori 2pork por6s7v por4tor por4t5ro por4trå 2porv po1ræ po1rø po4se. po4ses 4posj po2st po4sta pos5tas po5stat pos3te 4pos4v 5pot. 7pota potak9 po3te po4te. potek5l po5t6ha 3poti 4potr 4pou 2po4v pove6 pover6n pow4 2pp p2pad p2pak pp3akt p2p3a4l p9pane pp5angr pp5ank p4p3anl p2pap p9par. pp5arr p7past p4p7at p4pee p2pe5i4 ppel5s6 p4pena p8p9ender p4pendr ppe9nes ppe5p8 p4penø ppe5ra p7pere. p4perkl pp7e6sen pp9esn ppes8ti p4peta pp5e4tas p4pete pp5ett p2peu pph8 p1pi pp1id p2p1il pp5im pp3inf p4p5inn pp7ir ppir8re. p4pist pp1j pp3k pp1l pp5last pp3led pp5lei pp9lev pp5n pp1of p2pol4 pp3old pp5om p2p1op pp3ork pp1ov pp5p pp1r pp5rei pp5rin pp4ris pp7riss pp9riv pp9ro. ppropri6 pp7rot pp1s ppse6te. pp3ska ppska9k pps2p pp9spe pp3spl pps2t pp7sto pp7t2 p2pu pp1uk pp5ut pp3ø4 ppøs8 p6på pr6 4pr. 4prad 3praks pra7li 2pran pran3s 5prat. 5prate pra5te. 4pray 5pref prei7er. 4preii pr5elem 1prem pren4s 1pres 6pres. pres6sak p6restas pre7t6en7 4prett p3rif pri5ke pri4l3e 4pring 5prino 3pr6in6s5 3pr6in7s6e 3pr6in7s6i 1pris pri6s5k pris3t 2prit pri9ve 1p2ro 8pro. 6p7roc 3prof 4prog. 4proge 4progl 4p3roi p5rop. 3pros 7prose 6pru prun7ge pru5ta pru5te 6prør prørs5t prø5s4 5prøv prø5vels 2prøy 4prå prå8da pråk3i prå4ko pråk5k6 2ps p1sa. ps5a6n p1sc p3se. psei8ge p2sek p2s1el ps5e4ly p3sen. p5sens p7ser. p5sete p5sets p2sh p6sib ps5ins p7sis p3s4jo p4s3kil ps7kjen p2s1ko p7s6ko. p3skod p5s4koe p2sle p9s8lo. pslø8va pslø6ve. p3s4lå p2sm psmå8la. p2sn ps4no ps1o p3sod pspi9la ps5ple p3s4pre p4s5pro ps5pu ps3s2 pst2 ps7tal p4s5tem ps3tv p5s6tå psu4r p3s4us ps1v p2sva p2sve ps4ving p4svæ ps5w psy3ke 3psyko 4psys p2s1ø p3s2øk psø4ke. psøy8 psøy9ene ps1å 2p1t pta8la. pta4le. pt7ark p3te pte6k pte4ma. pte7re p5ti pto7g p4tou ptus5t p4tut 1pu pu4br 5puc 6pu6dy p5ugl pu2k pu7la pu8le. pull6 5pum pu4ma. punk4t5 punk5t6e 2punn 2pur pu4re. pu8rea 3puri 3purk pur5u pur3v pu7sa pus4h pusl7u pu1ta pu4ta. pu5tas pu5ter pu5tev 4putg 2puts put6tr put4tu 2putv 6putø 2p1v pver7 pvi4se. py4dr py8o 3pyra py1re py1ro 6pys py6sa. py4se. pys6t 4p5z 1pæ pæ4re. pø1kj pør4ret pø8sa. pø9ta pø9te p1ø2v8 5påb på4by. på1k2 1pål på4la. på4le. p5ån på3pe på1pl p1åpn på1r 1pås på7sko på5sm på3t2 6påtå7 1påv qa5 qu2 qu9ar. 1que que7r 4raam 4raar 4rabis ra1bo4 4rabr 2raby ra3cet ra3ch 5raci ra3d2a 4radf 3radio3 4radir 4radj 2radm 2ra1dr r3adre rad2s3 radvi4 ra5ede rael4 4raerk raf4fer ra4fiu ra2fj 2rafo ra5fo. ra4fos 2rafr ra5fre 6raft ra4fu ra6fy ra7gea ra5gee 2ragl 2rah6 7raid ra5int ra3isk 6r5akad ra9kar ra7kel ra5k6ha r2akk rak4kel r6akr ra5kro 2raks rak6sa rak3s4e rak6se. rakst6 4rakti rakt3r r4a5ku 4rakv ral5ans 6ralbum 5ralds 4raled ra5leo ral3g 4r5alge 4r5algo rali5e6n ra4lin ral1j ral5le ral7m ralo6i ral3op ra5ly 4ralø 4ra5l8å ra4mag ra4mas ram3b 6r9ambi rambu9ens 6ramed 4ra4mer ram8et. 4ramil ram1o ramperi8 ram6p3u ramse8te. ramta8la. ramta6le. 4ramu 6ramy r4an. ra4naa 6r3anal ra5nar ran9cs r4an9de. r5andel rand3r rand5s6a r4ane 4ranfa ran5ge 6rangi rang5st rania8 ra6nin ran3kv 2r5anl r6anli 2r1anm r4ann ran6n5ett ran4n5in rann3s4 rans7kar 4ransv ran4tik ra5nu ran6ut 4ranø 2rao 4rapa ra4pel 4rapin ra4pir ra4pis ra6pit ra1pl 4rapo ra4pos 4rappa 4r5appl 3rappo 2ra1pr 4raps 4rapu 1r4ar. 2rarb 7rarbeh 4rarea 4rareg rar5e6l 4ra3rep rar7eta r1arg 6rargu 8rarinna 6rarinne rar8ka. 4r1arm rar8ma. 6rarn 4rarr rar3re rar5s 2r1ar5t rar6ta. ra3rø 4rasa 2rasc ra3sea 4rasel ras3h raska8ra ras3ke ra4ski ra7s6ko ra6sl rass4l ras7st 4rasti ra5s4til 4rastj rast5re 6rasty ras7v ra1ta ratak9 r6ate ra4te. 6ra5teg 8r7a6teli 4ratfe ra1to ra1t4r ra4t5ro ra4trø ra5t6røy rat5tel ratte4s 4ratub rat5ut 6raty 7raud raud3s 6raug rau6ga rau6ge. 4rau4k raus6s 2rav 6ravd rave5s4 4ravg ra1vi r3a4vis 4ravl rav8l9ut ravlø8pa ravlø8s rav6r 4ravt ra5vy ra3vør 4raw raz5z6 2raø raøy4 2r1b8 rba3d rbe2d rbede4 rbed5en rbed5et rbed9ra rbie8 rbi9er r2big r2bik rbist6 rbis5tr rbo8di. rbo4ni rbon7s rbo5re rbra5s rbrei6 rbu5en r5bø r1c 4rd r4dab r5dag rdag4s5 r5dah r4d5ak rdal4 r4dala rda4le. rdals5 rda4mes rda8n9o r4dant rd5anta r4d3arm r4d3art rd5atl r4datm r4d3au rd3d2 r6dedi rde4en r3defi rd5e4ge rd1ei r9deka r4dekl r4deks r6delo r6demi r7dena r6d7eng r6d7enh rden4s3 rdense4 rdenta8le. r4deo r6depo r4derik r4d5erst rde6sm rd3e4ta r6d7ett r8dé rdfes5 rdi3an r4diana r4dians r6diau r4did rdi3e2 r2dif rdi6gres rdig3s4 r4dika r4dikl r4diku r2dil r6dimi r2dio rdi3ov r4dish r2dit r2diu rd5je r1dju r8d7m rd3n rdnæ4 r9dob r4d5o4d r4dol rdon8na. rd1op r6dor rd3ost rd1o4v rdover5 r9drad r3drak rd5ran rd7rara rd3ras r3drei rd3ret r5drev. rd1ri rd3rot rd3sei rd8ske rds4kv rds5tan rd3sto rdsto5g rds7tre rds7tu rdsva9r rd5t rdta8ka rd5tr rd7tø rd3und rd5ve rdvi8ka. r4dyg rdy5pe rdy3re r6d7yt r6d5æ r7d6ær r7d6æ5r6e rd1øs6 rdø4ve. rd3år rd7å6s 1re. 2rean re7a6r7an rear5e 4reav 2reb 3redak 6redam re3def re5den re3des re3di 3redig r1edl 2redo 2redr re4d5ri red5sku red4sl reds5la red7s6led 3reduk 6redy 2redø 2ree re4el. re3er 8refa 4reff 4refi 2refj 6refos 6refr 4reft 2refø 4regar rega7ta re3ge 4regeb re5gel 4regen 4reger 4regg 1regi re4gia re4gil reg1l 2regr 4regub 4regud 2regå 2reh 2reid 2reie 2r1eig rei8ga. rei8ge. 4reik rei9l rei5na. rei7nas re5inde rei5ne. rei7nes rein6skj re4inva rei9ra rei5sa rei3si rei7ska reis6led re7ism rei7v4a rei5ve 2rej 6rek. re5ka. re5kav re7ken 4rekj rekk6an rek4k5v 5reklam rek4led re5k6lir re7ko 4rekob 4rekom 4rekon 6rekos 4rekra 3rekru r3eksa 6reksp rek4ter 4reku r8el. re9la 4relag 9relandsk. 9relandske 2r2ele rele8ge. r4e5lei 6relek re7len 7relene 6relg r3elit 4re3lj r2ell rel4lag rel6land rel5led rel4lev 5r4elm rel5ses rel4sk 4re1lu 4relv 2re5ly 2relæ 2relø 4re7l6å relå7r 2rem remann6 r1emb remi6ene remi6l re7mis rem9ji remmed5 6remn rem8na rem5p4 rem1s remti9da 4remu 8remy 4remå 2re3na ren4del 4rendr 8rened re5neg re7nei 4renek r3e4nel 4renest 6renet 6rengd reng5l 4rengn reng5st re5ni 2renk ren6kl r3enl ren8ne8sl rennes9la re5no ren5sa r3enss 6r7entit 4r3en5tr 6rentu 4renu 5renz 6renæ 4renø re5og 2reop re3o2r 5reou 8repen 6r5e6pi 1repu 6repus 1rer 6rerad 6re9rang 4rer6at re5re. 4rered 4reref 4rereg 4rerei re4rek 4rerent 4rerep 4rerese 4reresu 4reret 6rerfa 4rerig 4rerik 4r3ernæ 4rerol 4rerom re3ros rero6se. re5rot 3rers rers4p 4rerute re6r7øy 2rerå 1res. 2resa re2s3c re3se 4resel re4sem 4reset resi7ere 4resin 2resj 2resk res5ke re6s7kje. res6kl res7kod re6sky 6re1sl re4slu 1resm re5smo re3sov re9spe 4respi 4respr 2ress res4sal res4sek res4sit res4sj res6sk res6sort res4sp res4st res4sy res9tane 5restau res6t5erv res4tes res3té 4re3sti res4til re3str 4restre 7restv 4re5sty 4restå 1resu 6resuk 4resun re3s4ve re3svi 2resy 2resø 4retaki 4retal re4tap 4retea 8retek. 6reteke 4retekn 6retel 6re5tem re5ten 4re5ti 4retj 4retoa 2re5t2r rets4i ret4st ret7ted ret5ter rett8o rett6set 4re5tu 2rety 2retø 5retøya. 7retøyets 4re7tå 2reu reu6r 4revak re5van reva5re. 6reveg 4revei 4revel re6v7enh re5ver reve5s r3e4vig re4v5inn re7vom 1revy re4v5åp 3rew 2reå 2r1f rfa5re rfat5 rfe8en. rfe8er rfe4et. rfei5li r4fik rflå3 rfe5m6ø rft2 rfu8se rfyr4 r9fæ rfø8rarar 2r1g r5ga. rga8le. rga8li rg5and r7gann r4g5anv rga3ri rg3art rga4ve. r6gedi r4gef r2gem rgent4 r3geo r4gerei r4geret r4ge3ru r4gesj r4gesl r4gesta rgi1a rgie4n r2gik r2gil r2gim r2gio r2gir rg3i4ri rgi7sl r2giø rg2le rg5le. rglem5 rg3len rg3ler r2gn r4gog r3gom r2got rg5rab rg3rea rg3rel rg5reps r6g5ri r3gru rg5sc rgs6kor rg5s4le rg1sn rg5s6till rg5sto rg9stu rg2sy rgu7d rg6ut rgå9as rgå6va rgå6ve. 2r1h rhav2 rhavs3 rhjul8s rho3d r7hu rhø5re rhånd6s9 rhå9ne ri1an 4rianf 4rianl 6riansv ri1ar 4riarb 4riarr 6riau 2riav ri4ava 3ri6avo 2rib ri2b3l ri8ca. ri4co. ri5da 4ridale ri5der ri5di 2r1idr rid3t 4rieie 4rieig 4rieks ri1el 6rield 4rielem 6rielim riel4la rie4n ri3end 4rienh 4rient rien5t4r ri1er rie5ra rie5ri 4rietat ri5even 2rifa riferi9e8 rif4fi rifiserba8 6rifj 1rifl rif5la 2rifo 2rifu 4rifø4 ri4ga. rig4gr ri3gi 4rigj 4rigre rig2s rig6s7t 2rih 2rii 2rij 5rij. ri4kali ri5kan 5rikd ri3kes ri7ki rik7ken rikk5j 4rikl ri8k9la 2ri7ko 6rikon 2ri1k2r rik4sk rik4s5u rikt6 rikts3 riku6m ri3k4v 4rikå 2rila 6r5ilde 6riled ri5lei ril6lest 2ri5lo ril4sn 2rilø 4rima ri9mab ri9mar 6rimes ri5met 2rimi ri4mi. 7rimis rim7l 4rimm 4rimo ri4mor 4r1imp 4rimu rim9ut 4rimy rina5l ri5n6am 4rinas 4r5inc 4rind r3indu ri4nee ri4nes 2r1inf rin7gom ring3r ring4sa4 rings5ak ring8spa 2r3inj 2rink 4rinn rin9nes 4rinor 2rins rins6k rin6sm 2rint rin4t5j rin4tr 2rinv ri6nø 2ri1of 6ri3om 2ri1op 2rior rio5s4 riot3r 2rip 4ripe ripo4s3 4ri1r 4risau 4rised rise5i 6risek 4risel ri4seli 4rish 5risiko 2risj ri6sju 4riska ri4ski 6risku 4risky 6ristad 4ri5sted ris5tik 4ristil ri4sto ris5tof ri5stun 6ristø ri6stå 4risv 4risy 4risø ri3te 6riteo ri7ti riti9da 4ritil 4ritj ri5t6o ri5tr rit1s6 ri6tun 4rity 2riun riu4r 2riut 4rivar ri6ved rive9ge ri5vei 4riverk 2rivi ri4vi4s riv5ise 6rivo 4riøk riø4r3a 8riøya 4riå r1j rj7ambi r4jere r2jes r4jeti r4jetr r4jetu rju6la 8r1k rk3akt r6kanf r4kao r4kapr r6katr r3ke. r2keh rk5eik rkei8ka r6kek r4kelo r4ke3lu r3ken. r4kenav r3kene r4keni r5kens rke5ri r4keris r4kero r5kers r4ke3ru r4kerø rke4se rkeslø7se r9ket. rk4han r3ki rki3d rki3e rki4vi rkjek8 rk5jor rk1k2 r5k8led rk2li rk5lun rk9lut rklæ5re rk2lø rklå9ra r3knek r5knep rk7nes r3kno r2kob rko6b5r r6kofo r2koh r4kola r4koli r4kope r4kora r4koru r4kosel rko6sele r4kosj r6k7ras rk5rei r5k6rem r8ks rk4sar r6k6seg rk2s1i rk4ska rk1st rk6stal rk4sten rk4s5ti rk4stj rk4sto rk6s5vi rk5ti rkti4s rk5to rku4le. r6k7u6t r4k5ve6d rk5vei r5kvel r4kver rk3ves rk5vik r4k5øl r2k3øy rk9øys rkå4k rk5åke rkå6pa rk5å4s 2r1l rla4te. rle4a r2lef r3lep r4l5e4ri r6le7sl rle4st r4lesu r4leu r3l4i rli9ke rling3s4 rli8ta rli4te. r3lj rl6o rlog2 rlo5ve rl4sk rlu4e r3ly rlys7k r6l5z rlø8pa. r5løy9 2r1m rma6ge. rma5k4l r4m5alte rm3anl rm4ans r6manv r4mare r4marr rm5av rm3b r2me7g r2mek rme6lap rme5ne r4menet r6merev r4mese rme9tar r4mey r4m5ide rmi6ene rmini6 rmin5ski r6m5inst rm5i4v rm1je rmlø8pa rmo4e r2mof rm1op rmo7st rm7p rm5s6ko rm1sl rms6n rm1st rms5til rm1su rmta8la rm3te rmu7an rmue4 rmue5ne rmu8la. rmu6le. rm5øy. r9må. rmål4 r6m5åp r9mår r6m7åta 4rn r3na r4n1ak r4n3ald r6n5appar r4narb r4n3art rnat7r r4natv r6n9a6vis rn3avl rn3d rndø4 rndør5 r3ne. rne5a2 r5neboe r2nec r4nef r2nel rnele6ge. r3nell r3nels r4n3eng r4nenh rne7p r4nerei r6neris rne3ro rne1s2 r5nes. rne6se. r8nesi r4ne3sk r4nesm rne3so rn5e4tab r4nete r2nev rne5vr r2nés rn5g6 r4ninn rn5k4 rn3n r5no. r4noa rno5b r4nod r4noi r6nok r2nom rn5omn rn3oms r4n1op rn3ork r2nos r4n1o4v rn7se rn4s3in rn5ske rn3skr rn5sla rnsle7ge rn7s6mi rn6s3ovn rn5spon rn3s4pr rn1st rn4sti rn3te rn5ti rn7tr rntre4 rnt4v rnu4 rn5ug r6n3ut r7nøt r4n5øv rnå8le. rn3ås ro1ak roa4s ro5asi 9roban 9robar 1robe ro4bed ro4bef 5roben ro4bes 5robølgj 1roc r3odds 7rodo ro5end ro7ens ro7fa ro4fel ro4fem roff5ri ro7ga. roga9ta ro7ge. rog5ret ro6gry rog1s4 ro2gu 1roi ro4kel ro5ki rok6kat rok6keri rok5kl rok4kom ro7k6l rok5n rok7s rok8se. rok5v roli7ga 4rolj rol4lab rol4lap rol4leg rolle8ge. rolle8se. rol4lis rol6ly rolo9v 2roly ro6mak ro4mal 3ro5m8an ro4mate 2rom7b 4ro3me rome5d 4romk 4r3omn ro4mor 2romr rom5sla r7omsy romsø3 rom3t ro5ne. ro7nim 6ronism 6ronista 8roniste 6ronisti 4ronn ron4na rono5s ron1s4 ronta6le. ro4pad 5ropet ro4pia ro8pla. 2ropp ro9py ror3a ror6da. ro3re ro1ru ro4sat ro5sel ro3sen 4rosl ros3la ro4sm ro6sov ro1s1p ros4st ros4sy ros7tas ro3sti ro3str rost7rø rot5ekte ro5tes rote7ster roti7ka rot5ord ro5tu 6roty roun2 round3 ro5ut ro5va. ro9vare ro7vas ro5vek ro7ven rove5re rov5sm rovve6 rò6te. 8r1p r5pa r6parb r5pefo r4peno r6penø r5pesk r5pet rp6j rp2l rp3lad 4rp3n rprø5ve r3pu rpun7g r6p5ut. r6p5øy r2påk 8r1r r8raa r2rag rra3r r4raro rr3d rr6e r4reb r7rebart. r2ref rre7int r4rekl r5relat r4reo r4repl r4re3ru rre5sk r4resm r4reso r4respe r3ress rre4st rres5ta rre7sti rre5str rret6s5 rre5u r3ri rri6ka. r6rip rri5v rr3m4 rrmå8la rro6e r5rom rro8sa rro8se. rro8ta rr5s2 r2r3un rr5v rrå5de 4rs 6rs. r1sa rs3ab r2s7ad r3sak rsa5ka r6sakt rsa6la. r8s9ald rs3all r5sam r4sarr rs3arv r1sc 5s6ch6l r8sedi rse6g7 r4seku rs4ela rs7eld r4seli r4s3elv rs5e4rik r3ses r4sesi r6sesu rse4te. rs6ett rsett8o r7sim6 rsimp7 rs1in r5s4ing r4sins rsis5t r7sja r4sjh rsj3or r3skad r6s7kaf rs4kam r3skap r4skar. r4skas r4ski r5skil rsk7inns r1skj rs5kjens r6skl rskla8g rsk5lar rs4k5le rs4k3læ r5sko. r5skoe rsk3op r4skor r3skot r1skr r4s3kra r5skriv r4s3kro r1sku r5sku. r5skue rsku7et rsk5und rsk5var rs5kys rsk5ø rs4lef r4slei rs4lek rs4les r5s6lit rs3lok r4slun rs4make rs4mo. rsmål4 rs6nev r1so rso9a rs5oml rs8o6n5 rso7n6al rso5n8e rso5n6i rsons4 r2s1or rs5ord rso7ris rs1ov r1sp rs4pan rs6pat r5spel r4sper r7spes r5spi rs4por r5spred r4spå rs3s6 r1s2t r4s5tabb rs5tank rs3tap r6st7b rs4ted rs4tem rs5tend rsten6s rs5ter. rstev9na r3stil r4s5tilf r4s5tilh r4s5tils r4s5tilv r5stis r4stit r6st5k rst4r rs9tre. rs7tree r4strin r4s5tro r5strø rst7ut rstu9va rstyg7 r3st6ø r7stå rs5ukl rsu9r rsu7sa rs5usi r1sv rs8vak rsva9ra rsvar4s5 rs1ve r3s4vek rs5vit rsy4na rsy3t r1sz rsøks3 rs9øye 6r1t rt5ad r4t5af rta4ka. r4tana rt3anl rta9pa r4tarr rt3art rt3avs r4tec r4teda r3tede r2tee r4tego r4tegr r4teie r4te3in r4teka rte6ke. r4teki r4teku rt5e4lit rte6ma. r3temp rten4s5k rtentle8 r2teo r7t6er r5terd r5teres r4teris r5terk r4terå r4tese r6tesk r6testi r4teta r4tete rteus8 r4tev r4th rtian8d r4tians r4tiar rti8ar. rti5en rti6gra r4ti3kv r4tila r4tili r4tilo r4ti7na r2tio r2tip rti7sa r6tiska r4tiski rt6i9so r4tisp rtis3s r4ti5str r3titu r2tiv rtma6le. r5to. rt3off r9tofo r9tok. rt3omk r4t3opp rt6opp. rt3ord r6t7o6s rt1o4v rt2r rt8ra r9tre. rt6red rt3reg rt3rei r4t5reko rt5rel rt5rep r7trib r4t3ris r4t5ros rt3rut r5t6rål rts3ar rt4seg rts5eng rt2si rt4s5ja rt5ske rt3skj rt5s4no rt3s4pe rt4sti rt7s6trek rt4s5tøy rts5unde rt3t4 rtu6en. r7tug rt3und r2t1ut rtu8ve. rty8da. rty8de. rtyr5s rty6ra rt5yt rtæ9ra rt5øl r6t5ås3 ru3and 6ruav ru6avh rub6a ru8bl ru5bo ru4di. rud4r ruds4l ru4ele rue4r rue3s4 ruga8l ruga5t rui3d6 4ruk ruk4su rukt3s ru9la 4ruli 6r7ulk rul8ke. r2ull r7ulv r4um rum3al rum4p9l 5r2unde run5del 6r3under 7r4under. r5unders rund3r rund3s4 run6ge. 4ru2ni run5kr r7uly ru4nøy ru2r ru5ra ru8ran ru8rar ru9rer rur8ta r4us rus2h3 6r7u6sik rus5j rus7lu ru1s4o rus5sel rus4st ru4s4t3r r4uta ru3tal ruta8la. r7utan. r4utbe 4rutd rut8e rute3i ru4tel ru9tene. ru9ter 2rutg r1utk rut9o 6rutr rut4re ru6trø rutto5 2rutv rut5ø ru5va ru4ved ru4veg ru4vei ru4vel ru4vere ru4ves ruvi8 ru6v7is 2r1v rv4a rva7ka rva6la r8v7arb rve3de rve4den r4ve5dr r4vega r4vegi r4vegr r4veim rveis7e6 rve5kl r4vela rvel9le r4v5eng r5ver. rve5re r2ves r2vev rvil9l rville9d rv2j r4vos r4vov r3vr rv2s1 rv5ung rvå7r 4r1w rx1 ry1a4 ry2dr ry7fe ry5fl ry5ke. 2ry1kl ry7le ryl4l5i8s 4r5yndl ry4nes ry5nes. ry4pa. 2ryr ry8re r1yrk ryr4ke. ry9ro ry5rø rys6sal ry5ta ry4tek 1rytm r3ytr r4z ræ7le 8r3æ4re 8r3æ4ren rær5in rær8t ræ8v 2rø. rø8ar 6røb rø4be. rø4dek rød1s 4røep røf5l rø4ke. rø4kero røk3l 4røkn røk5s4 røk7t røk1v 2røl rø6m røm1a røn5nes rønn5s4a rønn5sk røn5sko 5r6øntg rø4pe. røp9l 1rør rør5d6 r6ørende. rø7ret 5rørl rø2r3o rør4sp r8øs. rø3se rø5sla røs5v rø8ta røt9as rø1va rø5vede rø9vers rø1vi r4ø5væ 2r1øy. 4røya røy9ar røy6ed røy6ene røy5es røy4et 5r6øyk 3røyr røy5re røy8senes 6røy4s3k røy4st 2rå. rå7a 4råag 4råb 3rådet rådy9ra rå9ene 2råf 4rå5g4 2råkj råk3re rå2k3u råk1v 4rål råle7s8 rå4let rå5let. rå5lu r5ånd rån6da 2råp 2r1år rårs5k rå5ru rå1s 4råsb 2råse rå5si 2råsj rås4t 6råta råta8ka. rå5tr rå5tu 2saa 5saa. sa4ba. s6abe s8abl sa5bok s3abon sa5by sa3ce sa4dag 4sadam sa4dere 4sadm sa4do 2sadv sae5d 3saen 7saer 5safa 1safe 4s3affæ 5saga sa4ga. sa4gas sa4gat 6sagent 6s5agg 6s5a6gi sag8na sa6go. sa4gog 2s1a2gr sag3s4 sa3ik sa5ir sa1is 5sak. sa2ka 3saka. 4sakad sa5kai 3sakb 3sakd 3s4a3ke 5sakf 1sakh sakh5e 1saki sa4kj sak5kr s4akky 5sakl 5sakm 4sako 3sakp sa1k2r 5s4aks. sak4s3i 4s3aksj sak4sp 5saksr 5saksu 2s1akt sak6ta. 5s4akto s4aku 4sa7kø 1s4al. sa1la 4s5alarm 7sala. 5sa5lat 4salb 1sa3le sa9let 1salg s4alge 4s5algo salg6s5 s6ali sal4mes sa5lo 5sal2s3 sals4a 4salter sa1lu 3salv sal5ved 2saly 1s2am 5sam. sa2ma sa5ma. sam4an7 sa5mas sam5ei sa4mel sa4met 5saml sam4lev 5samm sammen5 sa4my 4s1a2na sa9na. sa7nar sa3nat san6da. san7d8al 5s6ande. sand5r sand5s6lo sand5st san4d5ø 1s2a5ne 4s3a6nek 5sang. 3sange 4s3angr 8s7angst s7anken 2s1anl s5anm san5ne 6sanno sa2no 4s5anor san5os san1s 5s4ans. 4sansa 5s4ansen san7s6k 4s5ans8l 6sansv s8ant. san9te 6santr 4santy 4s1anv 2s1ap sa2po 1s2ar. 1sara 6sarab 2sarb s4ard 9s8are. 4sareal 4sareg sa5rev 3sari sa4ri. sar6ka. 4s3arki 2s1arm sar5me sar8me. s1arr 2s1art sar4ta. sa4ru 4sarv s4ary 1sas 8sasju 2s1a4sp 4s1ass s6ast 4sasty 2sasu 4sasy 1sat sa1ta sa5ten sa3ti 2s1atl 4s3atmos sa1to 4sa5t6r s5atsk 5satt. 4s3atta 6s5atten satte4s 5sau. sau4d sau5di. 5saue 4saug sau6ga s3auge sau6ge. 2s1auk 5saum 3saus 4saut 2s1av s2ava sa4ve. 5s6a5v6in sav5n 3savu 8s9b4 sba4ne. sbi6e sbo4da sbu6et s6bug sbul3 sby8ta 4sca 5s4can 1sce 2scel s4cene s3cer 6s6ch. 8schl. sch8m 6s7cl 4sco. 6scoc 4scos s4cus 8s9d6 sdag4s5 sdam9p sde6le. sdu8en. sdu8er sdø8v 1se 2se1a 3sea. sea4g se3an5d se7ansa sea9re 5se4au3sk 2seb 4sec 4sedag sed5d se3de 5sede. 5sedl 4sedo 2sedr 2sedu 6sedvanle 2sedø 5see. see3d 2seef 2seeg se6e3i se3e4l se5en seer1 5sees 2seev 2sef s1eff 4s1eft 6sega sega6l se2ge se6ges se3gev seg8ga. 9segl. 7seglet 3segm 4s2e7g8r 2seh 2seid sei8dan sei9den sei8e9nes s5ei4et 2seig sei6ga. sei5ge sei5k 3se8il 6seim 2sein se3ind s3eini se6ink se3ins se3int sei5r 3seis 2sej 5sej. 2se5ka 3seke 4seki 2sekj 5sekk sek4kes 2sek4l 4se3kn 2seko se2k1r 4sekra 4sekri 4sekro 3s4eksj 4seksp sek4st sek2t3an sek6te. sekte9ra 3sek5to 4seky 4sekå s2el 2sela se6la. 3selak 5selane 5selar sel5art s3e4las se6l5at sel1d se4le. 4se5led 6selega 4selei 4s3elem 4seleng 4seles 4s3e4lev 5s6elg 4selik 4selil 4selis 4s3e4lit sel6løp 2selo 7selol se3lom 3sels sel4sin 8s5elske sel9s8lag sel4spo sel5t6 2selu se6l7u6r sel4v5ak sel4van selv3e4 sel4ve. selvei4 sel4ver sel8vin 2sely 2selæ 2selø selø8pa. 6selå 2se3ma 3semb 7semd se5me se4mi. semini6 2s1emn sem4na 9semnd 2semo sem5pe 2semå s2en. se5nak 6senau sen9d8a sen6dela 6senden 4sendr s2ene 4sened se3neg 4senem 8senesa 6senese sene8se. s5engas 2s1enh se6nin s3enkj 5sen3n s2ens 4s5ensem sen6s5end sen4sj sen3so 7s6ent sen5ter 8s7en5trep 4senum 4seny 2senæ 6senø 2seo2 7seod se3or 2sep se3pe seperso5 3sept s2er. se3ra 4seram 5seran 4serap 5seras 6serau ser5d s2e5r4e 5sere. 4serea 4sered 4seref 4sereg 4serei 4serek 4serel 4serenn 4serent 4serep 4sereso 4seress 4serest 4seresu 4seret 4serev s1erf s2eri seri6e5ne 4serik 4serkje 5serkr 5sern ser7nev 2se1ro se4rop se4ror se4ros 9s6ert ser4tak ser6tat ser4tr se1ru 4serul se4r3un ser4ved ser4vel 2sery 2se5r6ø 2serå 5ses. ses5ald 5sesals ses5alt 4sesc 2sese se4sene ses5in se3sj 4sesje 4sesjuk ses5kal ses5kar ses5kv ses5lit se3sna 5seso ses3pr ses4s5in se1st 5sest. 5seste. 4sesto ses5un ses1v 2sesy 4sesø ses3å 3s2et. 2se2t6a 3seta. se5tae seta8ka se5tar 6setea 4seteg 4setei 4setek se7tel se4tera se5tero 4setes 2se3ti se8ti. s3e4tik s3e4tis se8t7ja 4setje 5setje. 7setl 5setn 2seto 2set6r s4ets s5etters 2setu 2setv 2sety 6setø 3seum 4seun seure9ne seu2t 2sev seva6ne. s8e5var sev4d sevi4sa s1evn sev4ne. se3vr 3sevåg 2seyn 2seø 2seå 1sé 2séa 6séb 4sée 4séf 4séj 4sék 2sél 4séo 6sép 9sér 4sés 2sév 4s3f sfa4ne. 6sfe sfe6et. sfes5 sfisken8 sflå3 s5fo sfo8ra sforlø9 sfra5s sfri5e6re sfyrs5 5s4fæ sfø9ren sfø5rer sfø5ri 6s9g6 sga4l sga8va sga4ve. sgen9s sge4st sgå4va sgå4ve. s1h 4sh. sha2k s7hat s3hau 6she shea4 s5hei5 7sh6e4rif 8s5hett s4hi. s6hip sh5isk 4shj 6s7hopp 3short 5show 6shs 2shu 4s5hy s5h6ø shø8l shø6va shø6ve. s7hå 1si sial5v6 4sia5m si7ans 4siap 4siav si2bl 3si2da 3si4de. 3si3den si4de5o s4ider si5der. si4dete 2si2do 4s1idr sid8ra 4sidy 4sieg si1el sie4n si5er. si6eren sie4s si3est 6sife si3fl 2sifo si4f3r 2sifu 4sifø 3sig siger4s 4sigi 4s3iglo si5gr 4sih 3sik si3ka si5ke. sik2h7 sik4ka sikk8artet sik4k5el sik4ko siko3 si4kom si4kop si4kos si4kot sikt4s3 s2il 5sil. 3sild sil4del sil4der sil4des sil5j sil2k sil4les 2silø si6mel 4simet 2simp si3mu 4sinde 4s3indu si3nek 2s1inf sing4s5a4 7singu si4ni 4sinj 2sinn 3s4inn. 7s4inna s6inne. 5sinnet s3innh s5innk s3innl 4sinnt si5nob sinsk5e 2s1int 4sinv si6nø 4si5ov si4pa. si8pe. si6re. si7ren si4ri. sir8kl s2is si5sel si4serf sis5e4v si6sin 6sisju si4sk sis5ke si4sn si4s5te si4sti sis3to 4sisy 3s2it si5ta sit8ji si6t7ra si4t5re si4tri sit3s4 sitsva9 sit6term sit4tes si4umf 4siut 5siva si9van si6vek si8vi. si9våt 1sj 2sj. s2ja. 8s5ja9g 7s8jakk. 4sjam s4jan 4sjanl s7jarn 2sj3av 6s7jaz 2sjb 6sjd 5s4je. sje4f3i sje4fla sjef5t sje3g sjek4t5o 3sjel sje4lev 3s2jen. 5s2jene 4s3jent 5s4jer. s2je5s4 5s4jet. sjet4ti 2sjf 2sjg s6jim 2sjk 2sjl 2sjm 2sjn 2sjob 5sjok 4sjom 9sjon sjons7 2sjor 2sjou 2sjp 2sjr 2sjs 2s6jt s6j3t6sj sju1a 6sjub 6s7jug 4s5juks sju8la 4sjun 4sjur 2s7jus 5s2jø sjø3k6 sjø1p sjø9rø sjø1s2 sjø3t8 8sk. 1ska 2ska. 4skab skabe3 s2kad 8skae 4s6kag 2skak 5s4kal8a ska5lar 2skam s4kaml 8s7kamp 4s5kana 4skande 4skane 4skano 6skant 5s6kap. 9s8kapa. 4skapas 5skapen. 6skapit 4skapp 2sk2ar sk5arab sk7arbe 5skard 4s5kark 5s6karp 6skars 4skart 3s8karv 2skas 4skate 8skay 4skb 6skd 2ske s4keda s6kedo s2keh s6kei skei5er. s8k5e4lev s6kelik skel3t s4kelu s3ken. s4kena s6kenav s4keno s5kens 5skept s5ker. s4kero s5kers s2ke1s ske3si skes4m ske5sn s4ketet s3ke4t3j s6kev s2key 2skf 2skh 1ski 5s6ki. 7skia 4skid 5skie 5skif 5s4kik s6kill 5s4kilt ski6net ski4nin 5sk8inns5 4skino6 5skiol 5skip 2skir s4kire 6s5kirk sk5irs s6kis. 7skiss 4s5kist 5s2kiv s6kje. 5skjema 6skjemas 5s6kjer4m3 3skjer5m4e 7skjers 3skjor 4s5kjærl 5skjøn 6skjøp skjø5res 2sk1k4 2s1k2l 6skla sk5lak s6k5lan s5klas sk9leg s6klei sk3lek 7s8klero sk5ling sk5lit s4k5luf s2klyd 2skm 2skn s1knu 4skoa 7skodd 4skof 3s2kog 2s3koi 1skol 7s4kola 3skole 4s3koll 4skom s6koma s5k6ome 6s1kon 4skoo sk5ord s6korpi s7kors s8korst 4skort 2skos s2kot 3skott sk8ra s4k9ra. 5s4kral s4krat s2k7re. 4s3kref 6skreg 5s8krek 4s3kret 5skrevn 3skrib 3skrif 4skrig 3skrik 3skrip 4skrite 3skriv 5s4krog s3kron 4s3krop sk6rud skru3s6 6skryss 1s2krå 2sk1s2 2sk3t4 5skud 1s4kue sku4end sku4er skue5re 1skuf 5skulan 5skular 3skule 6s5kulis 4skull s4kulp 4skult skum3s 2skun s6k5underv 4skup 8s5kurs 8skurv 2skv sk5va. 3skvad sk3vas s6kven sk3ver sk5vit 3skvu 1sky s6kya s6kye 4skyr sky3re 4skys 6s6kyss 5s6kysk 3skyt 6skæ 6skø. 6s5køa 4skøe 1skå skå5re 6skåt sl4 sla8da s3lade sla5ge sla8ge. sla5ke s5laks 3slakt 3slal 4s3land 4s5langs slap5pe s5laran s5lare 4s5last s1lat sla4te. 4s1lau 8s5laus sla1v 3slave sla4vin 2sle. s8leda 4slega s4legi s4legn s6legr 6slei slei5er. s4leiv 8s5leke s5lekk s2lel s4leme 4sle7ne s6lener s6len6t3 2sler 8s5les s6lesj s4leso s6lest s4leta s5lev s4leva 4sley s5lia 2slid sli4en. 6slig sli5ke s4likk 2slin 8s3linj slin6t5 3slip 5s4lit. 3s4lite 4s5liv slob5b slott4 s6lott. 7slottet 1slu 8slu7a 2slu2e slu5es 6sluf 4slug sluk3s6 slum4p5 slum5p6e s3lund s5luns s6lup slu7sa s4lut s1ly sly8et. 1s4lyn 4s5lys sly8t 6s7lær slæ6rari 2sløn 8s5løp slø4pa. s6lør 2sløs slø8s5a 3s4løsi slø5va slø5ve slø5vi 5sløyd sløye7 9s4lå. s4låe s1lån slå5ner 1slåt s1m sma6d 3smak. 5s4maken sma9let 8sman s4med. s4mede 6s5medi s4medk smeg5 4smei smek7l s4mekt 8s5meld 3s4mell 5s4melt 2s5men 3s4mert 6smes s6mesi s6mia s4mie smi4ene s4mig s6mil. smi7la s6mile smini6 s2mit smo7a smo8de. s2mok 6smot 3smug 6s5mugg smul2 s6mula s4muld s6mule 5smurt 1s2my4k 6smøn 1s2mør smør3s 4smøt 5små. små5r s8mått s1n 8sna. s4nab 7snak 4s3nas 6s3nat 4snav 4sne. 4sneb 4sned 5s8nedd s6nee s4neg 3snei snei5er sne4kri s7nekt s4nel 2snem 4sner 6snes sne9sa snes9v 4snet s6nif sni6gl s2nik snik5ko 3s2nil 6s3nin 3s2nip snir4 5s2nit 2s3niv s8no. s6noe s5nord 6s7not 5s6nud s3num s4nur 7snut 8snyh 2snæ snæ4re. 5s6nø. snø5d4r 5snøe 1s2nør snø1s snø5vi so3al so8ar 4soav 2s1ob so2bl 1sod so4da. 5soe sofa1 so4fag so4fas 6s5off 6s5ofre soft1 so2ga so8gi so7gl sog6nem 6soh 5s4oi4 so5id 5sokn 4soks sok4se. 7sol. so4la. sol5av 1sold so4le. solei5er so4lene sol5f6 1so7li 8s7olj so2lo so8lo. sol3s2 sol5t4 so4lum so4lø 3som. so6mend s3omf 4s3omfa 4s1omg 5somh 2s1omk 4soml 1som5m sommar5a 3s6omme somme6r5e6 2somr 7somren 5somrer 6s3områ s1oms som5sl s4omst som5sti 4somsy 1s2omt 5somt. 6somta 3son so4na. son7da 7s6one so8nea song3s4 so4n3o sons4k son5st so2nu so4ny. 2s1o2p so7pak so9par so7pet 3sopp. 5soppa 3soppe sop4pi 8sopple so3pr 1sor. 7sora so3ran 5sorb 4s1ord sor4da 1so1re so4rek 7sorga. sor4gl so2ri 4s3orie 7soris so5riu 4sorke sor5n 3sor5s 7s8ort 1sos 4s5osc so8se. 6sosf 4sosj so4sl so5te so8te. so4tra sots4 sot5te sot4ti 4sou 2sov so3va so4ve. so5ven sover5e sove3s4 5sovet 3sovj sp2 4sp. spa5g6h 7spak. 7spaka 5spake 8spakk s2pal s3pall 5spalt 3s4pann 3spari 4spas 5s6paser 4spe. spe4a 8speda spe9dé s4pee 1s2pei s2pel spe4leg spe4les 5spelet 8s7peng 3s4penn s4pent s5pep spe4r5and 6speri 4sperl s4perr s3pers 3spesi s4pest s9pet. 1spi 6s5pilo 4sping s2pio 2spip spi7res spi7ri spi7ro 5s6piss 2s3piz 2s1pl 8s9plant sp9lar 4sple s4plin 3split sp6o 2spoe spo6et 2spol 5s6pole 6s7poli s4pora s4pore 5s4pors sport6s5 3sporv 2s5pos 4spot s3pote spo5v 9sprag 5spran 6s3preg 5sprei 8s7preik s4prek spre5ke s3prem 5s4pren 6s5pres 5s4pret s6print s5prio 8sprinsi 8s3pris 6s5prob s3prod 4sprof 5s6prog 6s7progn 6s7progr 5s6pross 1spru s4pry 3sprøy 5språ 2s3ps 8spub 2spul 3s2pyd 5s2pø 6s3pøl sp5øy 9spå. 5spåd 8s9r sre8ka sre8ke. sri8e9 sri8ka sri8ma sri4ve. s5ro sro4e sro6pa sro6sa sro6se. sro2t sro9te srot5o srø1v srå4da. sråde9r srå6ders srå8ma 4s1s s7sabel s7sabl s6sae s4saj ssa8ke. ssa6la. ss5all ssa4me. ss5amp s5sane s7s8ar. ssari8e9n s7s6arm s4sarr ssar8ve. ss6as ssau8sa ssau6se. s6seet s2seg sse5ge ss5egg ss4el sse5li ssel5s ss9elv. ssel5v6å s2sem s5sen. sse8na. ss5enden s5sene s4seni ssen6ke. s4senu s6senå s5ser. s6serab s6serat sse7sk s4seski s4sest s7set. s9sets s2seu s4sey s2sh ssi4a ssi7e6rer s4siff s6silo s8s9ime s6s3ind ss5init ss3inj ss3inn s4s3ins s5sis4 ssis5m ssi6v7end s5s6jarg ss4kape ss3kar sska8ra ss3kn ss3kof s7skog s4skor ss6ky. ss4kye ss4kå ss5kål s7skåp s2sl s8slip ss1lo ss5ly s2sm ss6nar ss2no ss4nø s4s5nød ss5nøk s2sof s4sok6 sso5lo s2som ss4oma sso3ra s4sorga ss3ove ss6pil ss4por ss9ri ss2t s5stad ss4ted ss3tek sstel6li ss5tep ss7tilp s7stip sst6r ss5tren ss4trå ss3tus ss3t4v s2s3ul s3sur ssva7ra ss1ve ss8vek ssy6na ssy5r ss7øye s6så 6st. 2s1ta. stabs3 3s6t2ad stad3a sta6d3o s5tafa 3stafe sta5fl st3aft sta7ge 4stah sta6ka. 5stakk 4stakl 6stal. 6sta4la sta5lak st5ald 4stale sta4le. 5s6tali 5stalt s3tame 3stamm sta5na. 3s4tand 6stande. st8ane s4tanf s4tang stang5s6 st3anl sta8n9o s6t5antr st3anv 4stao 2stap s7tapa s4tapp s8tapå s3tari 1stas 3s8tasj 4s5tast 1stat 4stato sta5top sta3tu 3stave 2s4t5b st7c 2std 2s3te. 2stea 2steb 3sted. s4teda 5stedt s2tee ste4en 2s4tef 3s6teg. stega6l s4tege 3stegh 4s5tegn s4tegr 4stegsp 5stegspl ste4her s2t4ei stei5er 4steikn ste6in6s5 3s4tek. 4s4teka s6teke ste4ket s4teki 4s5tekn 4steko v4s5tekst s4tekt s8te5kv 4stela ste5le. s5teleg ste5lev s5telig 5stemd 3s4temm 5stemn 4stemø sten5a ste4nar 5s4tenen s4tener 4ste5nes 3s6teng s4teni 6stenk 4steno stens5l 4steo s5teol 2step step7per st8er. 8s5tera s4teram s6terest s4terev s7t6erf s4terid ste7ris s6teri6v 4s3term 6sterr ste5run ster8ø 2stes s4tese ste7sle 4stet s4teta ste7t6r s6tetø 4steve 4stevi 6stevl 5stevn 6steå 2s4t5f 2stg stga6ve. stgå8va stgå8ve. 2s6t5h st5he 2s3tia 4stib s5tibe s9tibl 3stic s6tick 6s7tid s6tidel sti5en s2tif 3stift s4tigen 7s6tigi st9i8gj 3stign s5tij 6s5tika 4s5tike s4tikl 3s6til. 5s4tila sti4lag 4stild 3stile stile9ge s6tilk 6stiln s4tilo 6s5tils 5s4tilt. 6s5tilta 5stilte 4stime sti7mer 6stimé 3s6timu s6t3ind s6tini 4s6tinn s6tinst s6tint 1s2tip 4s3tipp 6stips 5stir 2stis 6s7tisk 4stitt 4stiå s4tja 5stjel 8s7tjene s6t5jent 3stjer 4stju 2stk 2stl 2stm 2st5n2 s2to. 1stof 2s3tog 4stoks 6stokt 3stoli 4stolj s5toll 4stom s9tomm st3oms 6s5tomt 4stoni st3ope st5oppl 6s8t5ord sto4ret s6torm stor3o 4stors st5o4s s1tot sto4t5r 5s6tore. st5ou 5stova 2stp 8str. st3ra. 4s5trad s8traff 6strafi 6strail st3ral st4ran stra8na. 5strand 4strane 6strans 6strap 4strar st7ras. st7rast. 5s4traum s4tre3a s4tred 7s6treik st5reis 7strek. st5rekl strek4sa8 6streni st5rer. 6strers 6strh 9stria 9s8trid 5strie st5rige st3rin 3s4t6rip 5stri3s 6stroe s5t4rog 5s4trok st3rol 6s4t5rom st3ron st7rop. st7ro6pa s6trope s6t7rug 9s6truk st5rum. 2stry 6stryg s7trykt st5ryt 4s3træ 1s2trø 6s5trøb s5trøkk st6røm 4strør 4strøs st5røse s5trøst 4strøy 6stråd 2st5s6 stsa6me. stsy8na 4st7t6 stta6le. st3t4r s4tua 1s2tub 3s4tud s2tue stu4el stu4er stue5re 3s4tum 6s3tung 6stunn 3s8tunt 6s5tur 2s4tut 2stv s3t4ved 1sty 2stya 2styd 3s4tyk sty6l 2s5tyn 2s7typ 3s4tyr styrs3 6stysk 4styv sty5ve 1stø 2støk 5støl 6støm 5støp 6størk 5støt stø7va. stø5var stø3ve stø5vi st8øy 1stå 5s4tåe stå5k 4su. 1su4a su7a8l 1su2b sub7l sub3o 5subs s3ubå 1sue su8er su2f 5s2ug su6ga. su4ge. sug3g su2h 3sui6 su3is5 suit5a su2k 4s1uke 3suk5k suk3r 1suk5s su4le. 3s4ulf su4lik sul4t5r s1ulu 2suly sulæ5 3s2um 4s3umid su2mo sums6 5sund. 8s5under 5sundet 5s4undi sun6d7r 9sunds sun4ge. 6s7u2ni su4o 3s2up su4pe. super3 supi9 su8p4r su8pre sur5d su4re. 4s3u4rei 1surf su4rie su4riu surs5k sur4sp sur4sti 1sus su3san su4se. su6s5es 4susi su4sik sus3p sus3s su2sy 2s1u4t1 sut6ra. sut8reg 7suv 8s5u6vi sv2 6sv. sva5a svai5 5svak. 3svake 6svaks sva4la sva4les 6svalet 5s6vali 7s6vam s4var. s4varet s3varm 3s4vart 6s1vas 6s1veg sve6g7i s5veie 3s4veis s5veka 6s5veks 5s4vens sverd5s4 sve4re sve8res 3s4verg 5s4verj s5verk sver4ki s4verm 6s7verv 7s4vev s4vie svi6e3l 8svift 4svig svi5ke. 6svikg 4sviks. 3svikt 4s5vikti 4svil s6vindel svi4nes sving5s4 8s7vink ll6svint 4svir 6s7virk2 2svis svi4sa. svi4se svi5sen svi5ser s8viv svi9ve 4svol 5s2vor svor7t s3vr 3svul 5s6vulm s3vy4 svye7ne 1s2vø 4svæs 2s7vå 1sy sy4c sy4de. sy5den 5sye sy2er sy8ka sy4ker sy5kere 2syko sy6kog 7s4ym sy7me s2yn 4s5yndl synk4 sy6n5o6 syn6sk syn3te sy4ra sy5rar s6yre sy4re. 2s1yrk syr4ka syr4ke. 3sy1s sy4se sy2sl sy6s7t sys4tr 2sy2t sy5ten sy5t6h 9sytt sy2vå s4z sz3c4z 6szt. 1sæ sæ2l 8s3æ4re 8s3æ4ren sæ4r1i særle9 sær5s8 7s6æ5te4 4sætt 1sø 4sø. sø2d s1øde 4søf søg4 4søj 9søk. 3s6øke 5søkj 5søkk søk7kj 3s6økna 2søko søk4sk søk6s3e6 5s6øksm søk4ta 3s4øl sø4la. sø4le. sø5let 3s2øm sø6må 3sønn s1øns s4øp sø4ras sø4re. sø4r5end søren6de. sø8ret sør9ett 7sørl sør3s sør5ø 3s2øs 4søs. sø8sa 7søt sø7tast sø7tel sø5tes 2søv s1øve 3søvn 2s5øy. 4s3øya søy8de. 6s5øyd 8søye 3søyl 6s5øy4n søy2r 2s7øys 5såg s3å2ke 5s4ål så4le. 6s1ån sån4da sån6de. så2p 9såpa så5pet 6s1åpn såp9u så2r så6ra sår9ast. så4re. sår3sk sår7ø så2s s7åsa s4åsb s5åse sås5k sås5t 9såv såva7 ta1a 4tabo tab2r tab2s ta4bu. 4tabø ta1c 4tad ta2da ta8d3ei ta6d3e4t tad5spa tad7s6v ta6du t8ae 6taei 4taek 4tael 1taen 4taend 4taenh ta6es 2ta5fe taf7f6 5tafis 4tafl 1tage 4tagj 8tah ta7is 1tak. ta4ka. 4takau ta7ken ta5ker tak7kel tak5k4l ta8k9la 2takr tak4sal tak6se. tak4si 4t3aksj 5takst tak4tal 4taktig tak4to t5aktø ta1ku tak3v 1tal. ta9lam ta3lan tal5ang ta7las 3tale ta4lei tal5eie ta4lek ta5ler. tale7s6 1talg tal6ge. 7talj talj5es tal4led tal4leg 8t7allerg tall7es tal8lign tall6s7a tal4ly tal3op 6talter t5altern ta6l9u ta6lå 2tamb tamba6ne. t3ambi t4ame 4tamet tam4i 2ta3m4o tam5v t6an. ta2na tan5ab 4t3anal ta3nar ta5nas ta5nat t5andak 5t6ande. t7andel. t5andele tand5r tandø4 tandør5e 1tane ta4nel ta5nem 4tanett t3anfa tanfø6 6tangf 6t3angr 1tank 2tanl t3anle 2t1anm 3tannl t5anno tanns4 tan6sk tans5ka t5an5sl 4t5anstr 4tansv 8tantil tan4tra 6t7antre t3anve 2ta3o4 5tap. ta4pa. 1tape ta4pe. 3tapi 4tapl 4tappa 5tappi 1t4ar. t6ara ta4r3ak 4taram ta6rare 2tarb 3tarbo 5tarbø 4t9arena 6t7ark. tar8ka. 4t5arke 4t3arki 4tarra tar9si tar7sp tars6v 4tart tart7est t5artik tar7tit tar4t3r ta6r5å8k 4tasa ta3se 6t9asf t3a4sia tasi3e ta4sif ta4sil ta4si5s4 tas4p tas5s4 tas8tas 6ta7sto ta7str 4tasu ta1ta ta7tes tate8se. tat5e4v tati1 tat3op tat2s1 tat3te t3attr 1tau 9tau. 7taue 4t5aug 2t1a4uk 4taun tau4ne. tau4sk 2taut 2tav 6tavin 3tavl 4tavli ta9xy 6t1b2 tba3d tba2n t6be. tbe6te. tbe6t7r tbe6t8ra tbo6da tbu8da tby3k tby4s tby7te 2tc t1ce tcen4 tch5e t5co 2t3d tdy5pe 1te 4tead 4te3ag 2teak 2te9a8l tea6m 2tea2n 2teap 2tear te5arb tea4s 3teatr 4teatt 2teau 2teav 4teb t5ebb tebu8da 4tecel te1co 2ted 6t5eddi 3tede. 4tedeb te7def 4tedek 4tedel 4tedem te5den 4tedi 5tedil 4tedo tedo6en. tedo4er tedo8et. te4dor ted4sk ted4sl 6tedu 4tedy tedyr9k 4tedø te3e4 2tef 8tefa 4tefi 4tefl 4tefo tefo8r t3efte 3tefø 2tega 5tegat 4t3egd te7gea te9gee 4tegg teg8ga. 2tegh te4gim 2tegj 2tegl te3gla te9g8li 8tegs. 6tegspl 6tegsv 2tegu tegvi8 2tegå 5tegås 4teh 5tei. 2tei4d t3eie t3eiga tei6ga. t7ei6ge. 6teigr 3teikn tei5le te1im 6teinf te4inne te5inte te5i4s 6teiso 2tej te7ken te5ker 4tekil 2tekj 5tek1k 2tekl te5k4la tek6lede. tek4li 4teknu 2teko 2tekr te7kra te6k5ru 9teks. 4t3eksa t3ekse 4teksp t4ek8st tek8t9r tekt4s tek6ty 2teku te2k3v 4teky 2tekø 4tekå 2te3la tel6ak 5te4l5ar 3telav 8te4le. 4teled 4telei 4telek 4teleme te4lene 6teler te4les te5lesk 4te4lev te6leva 4telid 4telik 4telil 4telin te4lir 4telis 4telit 4teliv tel5lef tel4lei tel4lev tel8lign tel4lo 2telo tel3se telses5 t3elsk tel7s6v 5teltet 2te1lu 7telut 2tely 6telæ 2telø telø8pa. 2telå 2tem 3temae 6teman te4mans t5emba 6temenn 5temik tem9ma 6temn tem5ne. tem5ord tem5pe tempe8l7 3tempo tem3s 4temø 3ten. te5nab te4n5al ten8am te4nan te4nat ten5at. 6t7enc 6t5en6den 4tendr 4tened te5neg 6tenem 6tenerg 5tenes 4tenet 2teng 7tengon t5e4nig 7tenik 5tenis 4teniv ten9no te4nom te5nor 6tenorm 4tenot te6nov 6tenó ten3sa ten5sko ten6slu ten3so tens5v ten4t5in tentle8ge. 4tenum 4teny 4tenæ 2tenø ten5øks 2teom 5teon 4teop te6ora te6ori 4teord 2teov 2tep te3pa 4tepak tepa9ra 4tepas 4te5pe 7tepee 9tepé tep6pere t5e6ple 4tepr 4terac te7rakk 6teramm ter7apa 4terapp te4rare 6terasa 4terase 7terast terba6ne. t6er5d 4tered 4teref 4tereg 4tereis te4rel 8terem. 6teremm te4r5eng teren6ga 6terenn 4terep te4rerk ter5esti 4terett 6terevo 3ter5g 3terh te4rig 4terik 4terisi te4riv ter5j 4terk. 4terke 4terkh 7terkr 6terks4 4terkt terla6ga terle7ge terle6ve. ter8ma. ter3no tern5s te5ro. tero6e te3rof 4teroll 4terom 5teromr 4te3ros 4te3rot tero6v ter5r 5ters. 5tersjøo ters4kl ter7s6ko ters4l ters4h ter3s4m ters6ne ter5sv tersø6ke. 3ter3t ter9to ter9ul 8terum ter7v tervi6se 2tery ter5ør 4terøt te4r3øv 4teråd te4r3ås t4es 5tes. 2tesa 5tesar te7sen 2te1sh 4tesid 4tesik 6te3sin 4tesit 4tesj 6tesjef 4te1sk t9es6ka. 6teski te5sko 2te1s2m 7tesmåe 2te1sn 2te3so 6tesp 5tesr 3tess 5test. 4testaf tes5tas 4testat 5tes7te. 4te5stei te5s6tiv 5testid tes4tik 4te5s4til 4te3sto 4te3str 4testy 4testø 2tesu 4te1sv tes8væ 2tesy 2te3sø te7så te8sår teså9re 3tet. teta6ka teta6le. te4tap te3te 5tete. tete4e 4teteg 4tetei 4tetek 4tetem 2teti 3tetik 3tetis 2tetj 2teto 2t8et2r 3tet2s tet5ti tett3s 2tetu 5tetu. 2tetv 2tety te2t3å 2teu teu8k t1eur 3teus 2tev t6eva te4valu 3tevl tevo6r te3vr 2tey6 2teø 2teå 4téa 2téb 2téf 2téh 2téi 4téle 2tém 2tése 4tést 6t1f tfe6e tfe4l tflå3 t7fo 2t3g2 t4ga. tge4a tgei5 t4gi. tgi5ros tgrei9e t4gå. 2t1h t4hap t4hea3 thei5m t6hesi tho7li tho3re 3thr thu5le thu6s thy5r 1ti 2tiad ti3ag 2ti1ak 4ti3all ti5als 2tia2m 2ti1ap ti3asp 4tiau 2tiav 2tib 2tick 3tid ti2da 4tidan tid7d 6t3idee 4ti5dem 4t7idé 4tidis 4tido 4tidr 2tidu tidvi4 6tidy 4tidø ti1e2 2tief 2tiei 2tiem 4tienh tie5ra 4tierf 4tierk ti4ert ties3 ti3esk ti3et 4tieta 4tiett 2tifa tifa8ne. 2tife 4tifl 2tifo 2ti5f6r t8ifrå 4tift tif5te 2tifu 4tifø ti9ge. 4tigj 2tign 3tigno ti6gun 2tih 2tii 2tij ti3ka. 6tikarr ti5ke 4tiket 4ti5ki 6tikj tik4kj 2ti3ko 2ti1k2r ti3ku 6tikular 6tikult 6tiky 4tikø t4il tila6ga til1d4 3tilde 2tile ti3lei 3tilfe 3tilg til3id 4tilke 3tilkn 4tille. 4tillh 4tillin tillø7 4tilm 7tilnæ 3tilst til3t4 4tilte 2tilu 2tilø ti7mab 5timat ti4me. 5timedie ti4mera 5timeri 2timl 4timo7 4tim6o8r 2t1imp tim7s 2timu 2timy 2timø ti6nab tin5art 4tinaz 2tind t3indu ti4nem 4t1inf tin5ge4s 6ti4nit 6t5inj 2tink 7tinks 4t1inn 6t5inne ti5no tinsk5 4tinsp 4t3inst 4t1int 2tinv 4tinva 4tiny 9tiol 6ti7om tion9s6 4tiop ti1or ti1ov ti3pa ti6pla 4tipr 3tips 2tir tira4t ti4ref ti1ro 6tisak 4tisam ti5s6an ti3se 4tis4ei 4tisek 4tisel 4tisem 4tisep tise8ra. 4tisers 6tisig 4tisio 4tisje 4tisju tis4ka 4tiskan 4tiskil tis5kok 6tisku tis5l 4tisn 4tiso 6tisprå 4tistat tis4ti. tis4til ti5stre 4tisty 4tistø ti8støy 2tisy 2tit ti7ta ti8tar ti3te ti1tj 3titl tit4r tit3s 3titt 4tiub 2tiut ti4v5and tiva9re ti4v5art tiv6is 2tivo tiv5si tiv5sk 4tiy ti5ær. ti7ære ti9ært. ti1ø8 2tiå 6t3jag 2t1jak t5jarn 2t1je. 2t1jeg 2tjel 1tjen tjen6st 6tjep 2tjer t5jev 2t1ji 6t5jing 2tjo t5jord 2tjub tju4e 2tjun 6tjur 3t8juv tjæ4res 2tjø 4tjå 4t3k2 t6kag tka8ra. tkly9 tku6le. tkå8pa 6t3l6 tla4ga tla8te. tle6da. t4ledr t6lef tlei5er. tle8se. tle5ti tligh6 tlight5 tli6nes tli4te. tlu4e t6l7ut tlø4pa. tl7øy. tlå3ne tlå7r 2t1m tma3d tma8ge. t6maku t2mam t2meg4 tme3in t2mek tmini6 tmin5s6 t2mos tmå4la. 8t1n t3na t6nee t4neli t7nelig tne4rek tne4r5ø tne8se. t4nesk t4nest t5ni t8no. tn5sk tnæ6re 7toan 7toar. toa6t 6toau 2toav tobe6r t3o2bl 6tobs 4toc to5da to9de. to4dera 3todo 1toe 2toek 6toel toe4t 2tof 6toff. t3ofre to5fri to2g3at to7gen 4togg to6gl 6tograv to4gre tog3st to2gu 2toh toil3 2to1in 4toj t6ok 1to3ke to3ki 2tokj 2tokk tokk5end to3kl 5toksi 5tokt 2toku to4l5arm 5tolat to5lel tolele7 5tolera toli8ne. 2tolj 1to4l3k 7tolki tol4lab tol4lag tol6leg tol6lett 3tolo tol5tr 4tolå to9ma. 2tomb to5mene. 2tomf 4tomg to3mi to5mise to7mist 4tomk tomlø8pa t8omm 2tomr 4tom1s 5toms. 1ton to5na to4ned to4nel tong5s4 to8nib 2tono ton3sa ton5s4l ton5sp 2tonu to4ny. 2to3o 4to1pl 4toppd 6toppg 6t5opple 4t5opplæ top4po 4toppt 4topr to1ra to4rak tor5alt tor5ang to4r5ant to4r3as 4tord tor8da. to1re 6toreg to4rek tor7eks to7rem 6torent 5torer tore4t tor5ete 4torga tor5int tor7k8u tor7me torm5s tor5na tors4i tor5t8 torvei5 to4rø 4torå to1s 4tosa 4to3se to2sh 6tosj tos5ke to8sku 4tos2p 2tosy 4tota to5te to8ti. to5to. to4tor 6toty 2tov to1va to7veg to5verd tove7re t5overs 5tow 4toø 6t3p2 t7pa tpi7ne tpi7pi tpo4et t4påk tr4 8tr. 6t9rabat 3trafi tra7in tra8ka. trak7to tra7mu t5rane 3t6rans tran7ske 5trap tra3pe tra5po tra5r4 5trase tra5se. tra5ses 5trasé t2rat t5rate. 3trav tre4al. tre1c 4t3reds t3refu 6t1reg t5regi 4trei tre5int 6trek. 4treke 4trekl 4t3rekor 4trela 3t6re7na tre5ne t6reng 3t6reni 4t3renn tren6sk t7repe t5repres t2rer t4rero t4re3ru 2tres 6tresi tre5sko tres4l 3tresn t5resu t1ret t4reta t6reto t5retted 5t6rettel 4trev tre9va t6rib 4t1ric 4t4rid tri7ei t5rig. t4rikk t8rina t4ri5ne 4t5ring 3trinn 7t6rio 6t5risk t4rist tri5to t4riu t2riv tri7vi 5trix 3t4ro. 5troa tro9ar 3troe t4rof tro5g 3t2roi tro3in t4rok t2rol 4t3rom. t6rond 5t4rong tro5per t2ros 5t6rosk tros3l tro1v t8ru. t8rua 7trua. 5trued 5truet 3trug tru1i 5trukn t3rull 2t1run9 t3rund 4trupe tru5sa. 7t6rusk 2trut t5ruta t3rute t3ruti tru5v try3dr 3t2ryg tryg5ge 7trykk. 5trykke try7pe. t6ræ trø8a t5rød. t5rødt 4trøk 4trøm 2trør 5trøt 5trøya 5trøye5 trøy9et 4trøyr 6trøys 5trøyt trå8da. 4trådet trå4dr t6råkl t3råst 4ts 6ts. t5sa. t5sab tsa2g tsak6se. ts1an ts4ang tsau6r t1sc t6scha t6sch5k t5se. tse6d tse4er ts5ege tsei4d ts3eig ts2em t3sen. ts4ende t5sendi tsen8ka tsen6ke. t5sens t4sentu t5ser. t3seri t4s3erk tser3o t5s6ers. ts4es t4sesk ts5e6st ts3eta tse4te. ts1e4v ts3f ts4fæ t7s8hop ts7ill ts3inn t4s3ins t5sir ts5jeg tsje5t6sj ts5jor 5t6sjov. t7sjuk t4sjur t5skad t4skan ts6kis t4s5kjed ts6kjø t5skol t6skoll t7skot ts5kren tsk5ru ts5krø ts1k6v ts9kvi ts6ky. t6s7kyn ts1l t7s6lo. t3s4lot ts2lu ts5lø t5smit tsmå6la. ts1o t4s5o4d t5sok t5somst t5spek t3spel ts2pi t2s3pike t3s4por ts5s4 t1st4 t2s3tabb t5stad ts3tak t4s3tal t5stand t5stang t5star t5stat ts6tau t3sted t4steg t4stek ts6tig ts4tik t4stilk t4stin t4stit t2s1tj t8stolk ts5ton ts5tors ts5tree t4s5tren t4s5tro ts3try ts6trål t5stu ts3tv t4sua tsu7ge tsu4l ts3uli ts3u4r ts5usi ts1v t3svik ts1w t5syk ts5yt tsø8ka ts5økni ts5øv tsøy8er ts1å tsåt8 8tt t1ta t3ta. t2tab ttaba6ne. tt9abo tt5adr t2taf tta9fr tt3aft tta4la. t6t3ald tta7lel ttall4 t4t3ana t5t6ane t4t3ang t4tans t4tanv tt5appe t7t8ar. ttare6 t4tarr tt5ar5t tt6arta t4tase t4tasj t4tav tt3avi tt5avk tt5avr t3te. t2tea t3ted t4teda t5tede. t8tedr t2tee t4tef tt3eff t2teg t2tei tt7eid tte3in t2tek tte7kv tt7elev tteli6te. t4tem tte4ma. tt5emn ttem8na ttem6ne. t3ten t5ten. t4tena t5tene. t4teni tten5s t9tens. t4t5ense t2teo t5ter. t4terei tter5un tte4r5ø t4terå t4tese t4tesi ttes6ke. t4tesl t5tet. t4teta t4tete t1té t8th tt5he tti5a t4tidel tti3e t2tif t5tig tti4g5j tt3ind t5tine t7tiné t5ting t4tini t4t3ins t4tisj t6tisti t7tite ttle6de. ttlin5 t1to. t5tofr tt5om. t7tomr t2ton tton6na tt3opp t5tora tt3ord tto5re tt5o4ri tt3orm tto5u ttpar4 tt6pås tt9raka tt5rake tt3ram tt3rap tt7rat t4t3rep tt3res tt3rev tt5rom t5trop t5try t2t1rø t6ts tt7saf tts3ar tts5kan tts5kj ttsla6ga tt3sok tt5still tts5top tts5tra tts5tøy tt3ugl t1tum tt1un ttun6ge. tt1ut tt8ute ttva8la tt5ve tt6vun t5tw t5ty. tty8e tt1y6t ttæ6 tt3ø4l t1tør tt3øv tt7øy6r tt1å4 5tual 4tu4av tuba3 tu4be. tu6bå tu6dem 5tuel tu4er. tug8la tu1in tu2k t5uka t1uke 7tukt 3tula 1tule tul5les tum5m tum4s 3tun. 4tund 3tune tun5gesv 6tungd tung9s 6t5uni tu4nio 5t4un5n 9tuns 3t2ur tur7ant tu4ras 4tu4rei tu4rek turi4 tu4rin tur1o tur3p tur5s4 tur3uk tu5rus tur1ø 1tus. tu1sa 3tusb 3tusf tu4sin tu4sm tus5o tus7s6t tust6r tus5u 2tutg t5utj t5utk t1utr tut8t7rå tut6tenk tut5tor tutt5ov tu8va. 2t1v tv4a tva8k tva6ne. 3tvang t4v5anl 8t9var tve5del 3tveit 4t7ver tvert5 t2vet 3tvet. 7tvets t5vik tvi8ka. t8viklas 5t4vil. tvi5la 5t4vile t4vi5l4i t6ving tvi4sa. tvi4se. 6t7vo 3tvung 6tw twa2 1tyd tyg9gel tyg5ges 6tyh tykk5s6 ty4med 1tyn ty4ne. 6t5yo 1typ 5t6ype ty4pere ty4pet ty4rak 5tyrann 6tyreg ty4rep tyre5st ty4ri. tyri9e ty4ri5s ty2s 3tysk tys3t 2ty2t ty8ta t3ytel ty5ten ty4ve. 2tz t5za 5t6zel 6t6z5l 1tæ tæ5l tær6ene tæ4renh tær4er tær4et tær5s4 tøf3l 2t1øk tø9ket tøk8ta 4tøl t7ø4let 5t4øm5 tøn5nes 4tøp tøp5se t2ør tø4r3as tør3in tørk4 7tørk. 9tørka 5tørke tør5ne tørs7ta. tørs7ter tørs5tin tør3t tøs4 tø8sa 4tøt tøt5a tø5ta. tø3te tøtt6 2tøv tøv6d tø7vele t4øy tøy5a t9øyem tøy5r tøy5te tå4en. tå2k tå5ket. tå5ki tåk6r tå2l3a tå9la. tå4leg tå7lel tål5s4 tån8da tån6de. tå3ne 4tåp tå6pe. t1åpn tå6re. tå4rep t3året 4t5åri 3t8årn 2t1års1 tå3s tå2t t3åtak tå7ten ua7g u1ak uak3s u1al. ua7la ual5l ual3o ual3u u3a4ne. u5anl u3ans u1ar. uar5d u4arr u5ars. uash3 ua3t u5au8 u1av 1uavh u4ba. ub7alt ub7ant ub5ark ub4bo ub2br ub4bu ubel5s ub5h ubi6s ubis7t ub1j ub7lande. uble3s4 u1b4r ub5rin 2ubs ubu8e u4bå uch5en uch5er u1ci uck1 ucu5 2ud u3da. u7das. ud4dag ud2dr udd4s5e ud2då udea9 ude8are u2deb udeie5 udei5er u2dek ude3lu u2dep u6dero u2des u3d2et u6d5ett u5devo udia2 udi3an udi4en udio5 ud7ir ud7ji ud5leg udle6ge. u7dob u6doe u2dot udover7 ud1r udse4 ud3t ud5v 3u4dy udy9ra ud5å4s ue5a8 u5ei u1el uem8na u1e2n uend5r u7ene u8e7net uensar4 ue7o u1er u5e6rast ue4re. ue5ren ue4rer ue4res ue5ri uerle7 u2erm ue4se ue2si ue4skj ues6n u1et uet8r ueul8 u4fe. u6feb ufe6e uf1f4 uf4f5erm ufi9l ufi5ne u1fl u6foa ufor3s u1fr uft3a uf4tan uft5s4la uft3sp ufø6 u5gag u5gar u6g5av ugby7 u2gem u5gen u3ger u4gerø u2ge5s4 u9get. u8geta u2gev ugg3s4 u5gis u4gl ug1la u5g4lad ug9lar. ug4le. ug9ler. ugle7s ug5ly ug7na ug7ne. ugo1 u4go. ug4re ugrei9er u4grø ug5s4i ugs4k ug7so ug3s4pr ug5s4va7 uguay7ans ug5øyn u1h 3uhel ui8a u4i6c ui2d uid5el uid5en. uid5ens uid5er uid5in ui3e6 u4il uil5l u1im ui3ne u1ing uinnsmi8 uinnsmig9 u1ism uista7 uit3en uit5er u1itt u1j u4jas u8je. u7jå 4uk. u1k2a u7kar ukare6 ukar5t4 u5kat u2ke. u4ked uke5l4 4ukem uker5an uke4rek uker5i ukho7 u7ki u1kj 4ukk ukk6a uk7kestal uk8k9l ukk7n ukks6 u5klem uk8lu ukl7ut u5k4no u1ko u4k5og u2kra uk3rus 2uks uk2sa uk4sek uk4sel ukse7te uk2si uk2s1k uk7ski uk2so uks5t uk4s3un uk2sø ukt5e4sk ukteslø9se uk4t3id uk6tj uk4t5ori uk2t7r ukts6l ukt3sp ukt9s6v ukt4sti uktu8e9ra uktue5re u1ku uku6e uku5le uk5vik ukys8 uk3ø4 uk5å4 6ul. u1la u4la. ula7d u6l1af u8l7aks ul5art ul4det u4lef u2lek u2lel ulele8ge. ule5ma u3len. u6leni u3lens u5ler. u5lere. ule3ri u2l3erl u4lero u2les ule3st u5lest. u5leste. u2leu u1lé ul5f6l ul4fo ul4fr u3l4i ulie8 uli9en uli5ke. 3ulikh uli9na. uli5ne u7linj ul1j ul5ka ul5k6e ul4k3v ul4lag ul4lam ull7arm ul4leg ull5egg ulleg8ga ul6leng ul9lere ul4le3s4 ul8li. ul8lig ulling7s ull5i4v ul4l3o6s ul8lot ullo3v ull5sle ull3s6m ulls4t ull3sv ul2lu4 ul6ly ul2lø ulm4u u1lo ulo6i ul5op ulo7va ul4sk uls4po ul8sn ulss8 ul2st ul8s3t6r 4ult ul4teg ul4tek ul4tes ul4til ul4tim ul4to ul7tor ul4t3re ult3ri u7lua u3lue 1uluk u5lup u5lus ul9ut. u7luta u9lute ul7va. ul5van ul4var ul4ve. ul4veg ul4vei ul4ves ulv3t ul4v3u 1uly ulyk5kes ulæ6ra ulæ5re ulø3se uløy6e ul5å6l 2uma uma8ge. u6mare um5au umau7ken um3av 2umb um5be 4umc 4umd 2ume u4mend u4m3enh umen4t5i ume5ra 2umfo 2umh 2umi u6midd umie6n umi9na u4mint um9ja 2umk 4uml 4umm um3me um4mil um4mis um3n umna8 4umo umo6g um5ok 2ump um7pan um4ple um4p7ut 4umr ums1 um7se. um4sku umsku8le. um2sn um4sor ums3t ums4tø 6um7t umta8l um5ut 4umve umør3s um7øy umå7 2un. una6da un5alg u4n3ap u9nar u7nas u3nat 2und. 6unda 6unde. un4dek un4del 6unden 5undersk 5underv 4undet un6d7im 4unds und5s4i u2ned u4nee u9nei. u2nel unele6ge. u4n5eng u4neno u2ne1s2 u3nes. u2nev unev5n 1ungd ungele8ge. un4gem un2g1j un4g5l un4go un2g1r un9g8ru ung3s4i un6i u4ni. u2nid 1u2nif u4nim u3nin 3union uni4st 4unk un4k5l un7ko un4kr un7nak unn5erf un4n5ers un4n5erv un5nes un4niv un2no unn5ste unnta8la un4n3y u4no. u2n3os uno7t 4uns un6sj5i un3skr un5s6kv un5sn un5s4p un3stek unst5e6l un7s6tenk unst3o un1s2v un4tal un4tam un4tas un3t2r unt5rep un4tri untun8ge. unu6 un5ut u3ny u3nø un5øy6d u7nøyg u3nå uo9a u1ob u1om uom7s u1op uor8da uo1re uo5ro u1ov up3av u3pea4 u5per uper3a upe6ren u4peta 6upf up6h u3pi u8pi. up3ins up3li up6nev upo9pe up1p2 up4ped up4pla up6pre upp5s 4upr u3pra 6ups up6sen up2s3k ups4ke ups5pr 6upt 6upu u1på upåvi6 u1ra u2rad u2raf ur3aft u2r1ak ura6ly u4ram u5rane u3rans uran6t5re u5rar. u6r7arl ur3arv u9ras. ur5asp ur3att ur7au urau9ken ur1av ur4bod ur4c urd4 ur3di ur4d5o u1re ure8al ureer6e ur5egg uregi6 uregist5 3urein ure4l ur3ele u4reli u7r8ell u7r8elt u4r3els u4r5eng u7reom ure7o6s u4resu u4reta u4rete ur4e5v 2urf ur4feb ur6fed ur3ge u1ri u4ri. uri6a7ne uri9en. uri4e5ne uri9er. u3rik u3rim uri5ne ur3inn ur3ins ur3int uri6sp ur4ke5s ur7k6j ur6k7ja ur8kla ur4kle ur6k5n urk5s urla8ga urle6ge. urle8se. urma7g ur3nea urn1s2 urnæ6re u4ro. u6roc 5uroe urom5s u2rop uro7pi ur3opp ur1or uro3s4 uro4sta uro8ta ur4pel ur7pi ur6p9ut ur7re ursa8ka ur4sal ur4s3el ur4sin ur4skr ur4spe ur5ste urs5til ur4stj ur2sv urs3va ur2s1ø ur3teo ur5ti ur4to ur6t5ri urts4t urue7re u6rug8 ur7ugl uruk6 uru4ke uru7kn ur6ul urumo7 urun4g u7runk uru7v ur4vel urv3s u6rys urø2 ur1ød ur1øy 4usa u9sane us3ang u9sar. u8s7arb u7saren u6s7ark us7au us1c 2use u5seal use4al. us7edvanle u2s1ei u2sek u4sele u2sem u6s5endi us7erk u4s5erm u6sesi uset8je us3eva 4usg u2sh u2s3h4a u2s3h4o us4id us3ind us5inn us7jag u4sji us5kaf u4s3kan uska8ra us7kat us5ken u6s5kis usk4l us6k5le us5klo us1ko u1skr us7kru usk7u6t u8s7kå us4ky us1l usle6ge. us5lin u4slu us7mø u4sn us1ok uso5l uso6l5d us1or u3sori usove7r6e us1p u1s2pin us5sar us6sat us4sjå us4skj uss5kor us4skur uss1l us7smi uss7mø us4s5ti us4str us2sv u6stande u4stat us3tav u2ste us3ted u5stei us7ten ust9ette us5ti u5s6tig us1tj ust5of uston8 ust7onn us5tor ust5o6v us8tra. us8tran us8trar u6stre ust5ren us4tri us3tro ust5rød u6st5rå ust7ut u4stå us3ung u2sur us1v u5svale u7s6valt usva8n usvi8ka. 6usæ usæ9le usø6m us1øy u1tae u2tag u7tagg u9tal. ut3alb ut5ald u3tall u5tande uta7no ut6anv ut3arm ut3art uta1s4 u5tas. u6t5a6sa u6t5a6se u2ta1u4 1utb ut4ba. utbe8d 4utbi ut6by. utch5 1utd 4utdat utda7ta. u2te. u2tea u4tee u4tei u2tek ut3eks u5tekst ute6ma. u5temm u9temt ut2en u6tena u3tenk u4tenu u2teo 2uter u6terø u2te1s6 u4teta u3tett ut6eu uteva9 1utf utfa7s utfø5re 1utg 8utgåe 6u3ti u4t5if utikk6u utiku9 u4tili u6tiven ut1j u5tjen ut6ju 3utlei utlø5se utlå7na utmå5le u8tni 1utny 2uto ut7oms uto5s uto4v 3utpr ut4på ut1r u5t4radi ut3re u5treng u3triv u3trol u3tros 5utru u5t6rul ut4rø ut9rød u7t8råk 1ut1s4 4uts. 4utsei utse8t9ja 2utsj ut3sk 5utst 7uttak. 5uttake ut4terk utt5eva ut4tid ut4til ut5torea ut1tr ut4tra 3uttry utt1s2 ut8tår u1tu utu5e u6t5un utun8ge. u2t5ut 1utv u3t4vil utvi5se 2u3ty 3u4t6yd u8ty. 8utz ut1ø u5tør ut4ø8s utøs7t 1utø4v ut5øya ut7åk u3tål ut1ån ut7år u1u u7uma u5ume u7ut u1v uve5di uve3in uve6ris uve3s u7ves. uvet5ø u6vev u5vi uvi6k uv5ra uv9sa u5vu uvø9re u1w 4ux1 ux4a4 uy6a u7yn u1æ uærle9ge u1ø6 uøv5 u9åra u7åre va3am va8an 4vab 6vadj vad1r vaf3 vaf6r vai5r vai5s va6ka. va7kan va5ker 6vakh va8ki. 4vako vak3r 7v6aksi 4v3aksj vak5s6t 1vakt vakt5r va1ku vak3v va3lan va4led val9eks 4valel val4g3r vali9e8 val3la val6mes va6l1o va1lu va4lun 4valv va4løy val7å vam8pu 4v3anal vand5s v4ane vane5s va4net 2vang van4gr vang4s7 va8ni. 1v4ann van4nan van4niv vann6sti va4nom v4ans van5sem 5vansk van5s6ki van3sm van3ti van9tr va4ny 2vap va5po va4ra. va6rak va4ral va4ram va4rap va4re. va4reg va6rem va4res var8ka var5ma var4mee var4sa var4sk var4s5ti var4sv varta9la var6tem var4t5i4s 4vasa va4sa. va9set 6vasid va6sie va4sif va4sik va4sil va6sis va2sk vass5a vas4sau vas4sel vas6s7ø 4vasta vat5a va3ta. va6t7e8l va2terf vatle6ge. 5vatn va1to va6tr vat7ra vat1s 4vau 2v1av va4z 2v1b2 vba4ne. vber5g vbo6da 6v1d v7dev vding5s4 v7doi v7don vd6r vdu6en. vdu6er v7dø 1ve. 2ve1a2 ve6ag ve6ar. 2veb 2vec ve2d1 ve9dob vedom5 veds2 ved5s4k 3ve8d5t vedø4 vedå6 2vee ve4er 2vef ve6g5av ve5ge 3vegg veggs4 2vegj 4vegl ve3gle ve5g6lød veg5n 2vego 6vegre veg5rett 4vegru ve4gut ve4g5å 2veh 1vei1e vei8eb vei3en 4veill 6veit 2vej 4veka 5ve4ka. ve4ke. ve4ked 4vekee 2veki 4vekj 2vekl vek8la vek8le ve4kli 2veko 2vekr 3veks vek4st veks4t5r 1vekt vek4t5an vek5to vek4t5r 2vekå 5vel. ve4l5as 5velat. 5velatp 6veld. vel4del 8velds 4veled 6velei 7velet 4velis 4velit 6veliv 2velo 5veloc vels2 vel3se velses5 vel3sm vel5sp vel5st 4velug vel5un vel5v 2vely 2velæ 2velø velø8pa 2vem ve5ma 1ven ve8na. 4venem ve5net ve6nete 4venev ve4nin ven6n5i vennle7 ve2no ven6sti ven6str vent6a ven5t6r vent4s 4venty 2venu ve4nus ve5ny. 4venya ve4nym 2ve3o4 2vep 1v8er. ver5ak ver3al 8verau ver6des ver6din ver6dir verd7v ve3re. 4vered 4vereg 5vereig 4verek ve4rel ve6r7eng 4verenn 4verep ve5rer ve5res. 4verett 4veretu verfø5re ve9ri. veri3a ve4rial ve7rie 4verik ver3il 5verkn ver5m6 ver6nal vern6s5 ve9ro. ve3rom ver8ska. ver5ski ver7spo verta8la. verta6le. ve1ru 5verum. 6very verø6 ver3øs4 4verå v4es 3ves. 2ves4a ve5san 4veset 4vesh 4vesi 4vesj 4veski 2vesl ve9sli ve1s2m 6ve3so 4vesp ve6s3per ve5sted ves6t5end vest5o4v 4vestr 4vestu 4vestø ve3sv vesva7 5vesynds 2vesø ve1så veså5re v4et 1vet. 2veta 8vetaka 4veteg 4vetek ve5te6s7 6vetev 2ve7ti 4vetj 2veto ve4to. veto7e 9vetoke 9vetoks. ve4tor 2vetr 1vets vett5sk 6vetv 4vety vety8e 2veu ve8um 2veva ve6vak ve5van ve9var 2vevi vevi8sa vev4sm vev4sp 2veø 2veå 1vê 2v1f vfall4 vfø7re. 2v1g2 v4ga. vga4le. vga6li vga8ve. v9ge v4gi. vgjer6s7 vgo4 v4gå. 2v1h vhø4re. 1via vi1an vi6bl vice5s 1vid vi5de vide4o7 vi4d5o4 vid3r vid3s4 vi1el vi5end vig4m vi4gu vi5gø vi4kat 5vikb vi5ked 7vikg vik5ke vik5n vi2k3o6 3viks. vik5sa vik5s6l 4vikt 5vikti vi4k5ø4 vi2l1a vi5la. vi4les4 vi4l3in 1vilj vil4l5an vil4led ville6de. vil4lei vill9ep 6v5illu vil5m vil1o vil4sti vilt7o vil6tret vil4tri vi2lø 4vim vim7p vim7u vin6d5au 4vindl 5vindu vine5st v6ing 4vingn vin5gom. ving3r vin8g9u vin3na vin4ned 6vinnh 4v5innl 4v5inns 4vinnt vi6n5o6ver v2in2s vin7sja vin4tes vin5tre vi8pa. vi6pe. vip5s 1vir 4viro 7viru vis3ab vis3ak vis5and vi4see vi3sen vi6seng vi2s1k visk6re vis5m vi1so vis3om vi4sp vis9pa viss4p vis5ti vi4tak vi5tese 5vi6t5j vi4t3o vi4tr vit7ra vit5re vit5skr vit6te6s7 vi4t5un vitun6ge. vi4t5øy4 vi4va. vi6ves vivi3 v1ja v1je vje4t5a vje5t6e vje4t5r vjet3t vje4tu v1ji 4v5jo vju3t 6v3k6 vk4le vk4ler vku4le. 6v1l2 v6lab vla6ga v9led v9leg vlei9e vl6el vle4se. v5lesn vle5str v6lesv vli7v vls9 vlu9sa 2v1m vma8le. vmo8de. vmord4 vmå8la 2v1n v3nad vna8ke. vn5al v9nar vn5dy vne7b v2ned vne7de v4nele v4neli v4nelo v2nem vne5r6e v4nero vne1s v4nesta v6neste v2nev vnor9s8kas vn4s5pa vn1s4t vn5t4 vnæ4re. vn5ør vo1al vo2ar 6vob 2vof vof8fan vo4gu voi1 1vok 4voko voks3k vok6s5 1vol voli7 vo4litu vol4tes 2vom vo4na vo9nal vo9nar von5de vons6 von5sh 2v1o6p 2vord vor8da. vo1re vo9ren 2v1org 4voro vors7k 1vos 4vosj vos4se vo4teg vo4tel 6votr vo1v vo4ve. vo6vi. 2v1p4 2vr8 3v6rak v7rar v1re vregi3 6vrenge 4vrengi v6rengj v6rengt vrett4s v6ri. 3vrid 7vrie v6rigas vri6ma. vri8me. v3ring vrin5s vri6ve. v1ro v4rob v4rof v4rok v4rop vro8te. v1ru v7ry vrø3ve v1rå vrå8da. 8vs v6sa. v7sali v6se. v4seg vs3egg v3s4el v4s5e4li vse4n v5sen. v4s5eng v5s4ens v2ser v6si. vs1in v1sk vs8ke v6s5kum vs1kv v1sl vs3lan vs6let v6slik vsmå8la v1s2n v6s7na vs3ne vs3ny vs3næ v4s3nø vs5od vsom5 vs5oms4 v7son vs1or vs2pe vsre6de. vs7s6t vs4s5å v1s2t2 vste6ma. vs3til vs1v v6s7va vsø6ke. vsøl5 v2s5øy vsøy4er v8så. vså7re 2v1t vta1 v4ta. vta8ka. vta6led vta9len vta4lev vta6s v5tepp v5t4i vti8na vti8ne. v5t4r vt7s v3t2v vty8e 1vu vu2d1 vud5d vuden5t vuds4 8vué vu8k 2vul 2vung vun4ge. 6vu6o 2v1ut 2v1v vva8la vve8g9ing. vve6g7inga vven7n6i vvi5ke vvi6k7l vvi8s9an vvi4se. 2vy1 vya4 vy7ens 1væ væ1ra væ9ret væ8ta. v3ø4d 8v7øks vø4l vø7li vøm4met 3vøre vø6re. v3ørke vør8na. vø3se. v5øv 4v1øy vøy6e vøy7ene. vøy9enes 1våa 1våe 4våend v4åk vå8ka. vå4ke. vå4kene vå9kene. vå4le. 1vån vå5ne 4vånu vå3ren vå8sa. vå5tes 6våtf våt7å w2a wa6l 5wald wal4k walk5o4 wal4l 2wap war6d7er wash3 1wat wa3z w1b wboy5 we2 weate7 we7b we3g we5re wes2 wes3s wester6 western7 wet5 wett4 w4i2 wi9ar. wich3 3wicz wi3d 5wi6en wi9er. wi5f wi3ni wi5ra wi3ren wi5ta wk3r w1l w1m wn5s wob5 wou6 wout7 w3s4 ws6k wurs6 wy2 w1yo wyor2 wyork3 w1z xan5t x7b x3f xga6 x7h x1ic 5x6id xi5e4 x5k x1l x1p6 x3r x1s2 x7t x6u xy2 ya7b 1yac ya5f ya4h y1ak yak6te. ya2l y7am y1an y6an. y2ana ya4ne. yan7k yan7sl y1ark y7arr yas4 ya5si ya5t y1av y1b yba4ne. yb4bed ybde3 ybo2 ybu6er ybue7re ybu7ern ybyg5 y1c y8ce. y8cé y2co3 y6dab yd5av 4ydd yd6dela yd4dep y6d7enh y4deo y2dep y4dero y2d1is yd6je yd1ji ydo4 yd3op yd5ov y1dr y4d4r5au yd1re yd5rem y8d7ri y4dro y4d4r5oks yd3si yds4v y2du yd1un ydø4 y4døm ydør5 yd1øs 4y1e yed8l ye6dre y2ek y5eks ye4len ye6let yel4s5j yel4sk yels3m yel6s5t y2em ye2n y7e6ne y8ener y2enh ye5ni y2enk y2enl yenle6ge. yens4 y4ense y3e6re ye4rel y3ern yer8sk y4erst yes2 ye5sm ye2t ye9te ye5ty y2ev y1f yfan9 yfjell4 y4fle yf5le. y8ga. yga8ve. yg4dal yg4dek yg4del yg4dep yg2do yg2d1r yg2d1y yg2dø yge5i ygen5s y6geret y2ges y4gev yg6gam ygg7art ygges4 yg5gj ygg5l yg6gr ygg3s2 yg6gu yg6g5å ygi2 y5glo yg7m yg6r y1h yhes5 y1i y9in. yis7t y1j 6yk y1ka ykap3 y6kara y2ke y7kel. y5kelen y3keli y7kels y3ken y3ker y4kerel y4kero y5ket. y9kets y1ki y1kj y4kjar y5kjare ykjeva8ne. yk4kana yk4k5enh yk5kesj ykke6s5ta yk1kj ykk5ni ykk8s5k ykk8s5o ykk8s5s yk8k5vi6 yk4ky yk1la yk6lest y1klo y3klub yk3lus y5klæ y1ko y2koa y6koli y4komo y5kosa y2kot y5koti y1kr yk1s yku6le. yk3var y1la yla8ga yl4dan yl4derk ylde4s yld1r yld5s6k yle6ge. y7les y4lev yligh9 yl5k8 ylke2 ylke4s3 ylkesla8ga yl4lev yll5is. yl3s6 ylst7re yl5tet y8luse 3ylven y1ly ylæ7re y6mei y4mete ym4fe5d6 ym5jara y4mo. ymo5e ym3p2 ym1s ym8sa. ym4se ym8sl ym6ta. ym6te. ymå6la y9n8and yndes8 yn5det y2nel yn7eld yner3g yne5s4 ynesi8 y6nev yn5gel yn4gem yn2gr yn4g5ø ynko3 yn6k5v yn5na yn5ne ynn3s4 ynn4ø y3no y4no. yns1 yns6are yn4sem yn9set yn2si yn2sk yns9ket. yns7ki yn5skj yns7kjele yn8s9kjer. yn4st yn2su yn4s5ver yn4tap yn8teg ynt5ei yn4tek yn6tete yn8t7r yo4gat yo6gi. y1om yon4 yon5nen yo6nu y1o2p y1o2r yor6da yo5re you4 yout5 yp8e y2pe. y4pee y4pena y4penet ype4rel y6peta y1pi y4pi. y7ping yp5inn ypin8na y1p2l y5po yp7p6a yp3pe y1pr yp5s8 yp4tok y3pu y1ra yra8ka y4r3a6l y7rarb y4r5au yr5av yr7da yr5dø y7real y8r7edd yre3in y5reis yrek4 y7rek7k y3rels y5rems y1ren yre9ne y4reo y6rerel y4rero yre5sc y5rest. yre5ste y5reste. yres6ten y1ret y4reta y4rete y4reto y7retø yr7ga y1ri yrin5g6 yri6ene. y4rif yri8ka. yr3inn yris6p yr4kee yrke4s yr5kj yr3m y7roe y3romm yr1op y5rosk yr5r8 yr4san yr7set yr5sk yr6skj yr6skr yr2sp yrs7tan yrs5tar yrs7tene yrs5tens yr3sti yr4sv yr3te yr6tek yr2t3r yr3tra yrty8 y1ru yrul8la. yr5ut5r yr3v y1ry yr3øk yrøy4 y1rå1 yråd2 yrå8da yråde7r yrå6ders y4rådi y2råm y6råst y4råt y4råv 2ys y1sa ys6a7kers y8s7al ys4e yse4bu y4sed y4see yse5ei y2seg y2sek y8s7ekte y2sem y4sera yse7rid yseri7e6 y4sesj y4sesk y4se5s6l y4sest y5seste y6sesu y9set. y4seu ys6i ysi8e y5sjk y7skag ys6kara ys7kare ysk9au ys2k3l ysk5øs ys4mi ys4nø y1so y4s5or ys2pe ys5pis y5s4po ys6sak ys6sam ys4s3ei ys4s3ek ys4s5il ys2sj ys8s7ko ys4sku ys2so ys2sp yss5pe ys4sta yss5tab ys4s5ti ys4su ys2s5v ys2t ys3ta y8star. ys4tat ys3tel ys3ten y4s3ter ysterie7n ys7tesl y2s3ti yst3op yst3r ys8tra ys5t6ry y7s8tu ys6ty y1su ys1ve y8s7øm ys5år y1ta y4t3ana y2tee y4tef y2teg yt5e4ge yte3in y4teka y4teki y4tena y4teno y2teo y4teret yte6ro yters6 yter5ske yte5r6ø y2tes2 y2tet y3t2hi 6y5til y6tj yt9ja yt5jen yt9jer yt4mei yt4mes y3to yt8ra yt4re. yt5rer yt1ri yt4rik y5trå yt4s3en yt3sk yt5sv 4ytt yt5t6a ytt4e ytte8r9end yttes6 yt4test yt8tien. yttsa6me. 2y3tu y1ty yt4ys y7tå8 y1u y6ua y8ue yu8g yu4l y1v y4vak yva8la y2ved yve4ria yve4ris y4vese y6vesy y6vev yvi8sa yvi6se. yv1år yvå5te y1w y5æ y5ø y1å2 za5b 3zae 4zaes za4g5 za5k6h zani4 zania5 5za5v z1b4 zbu4 z1c z1d 1ze zea1 zebu9 zeli5 zen3s 4z3ense 4z3ent z1f 8z1g 5zha z3hi z5hu 5zie 1zifi 5zing z5int 1zis 6zisty 4zi5s4v 2zisy z1k 4z1l z1m 5zo. 5zoe zo1f2 zo4no zo5re 6zos z1p z5r z1s 4z1t zu3e z1un z1v z1za. z2z3el æ5by æ2bø æ5de æ7di æ1f æg6 æ2k æ3ke æ5ki æ8kj æk1ja æk7je. æk9jer. ække7 ækkel6 æk6l æ1la æ4le. æ2le3d æ4lena æ4lev æl5j ælsle9 æ4r1ak æ3rane æ4rans æ4rarb æ6rarbe ær4arte æ4r1at ærbu5e ær1d4 æ1re æ2rea æ4red æ2ref æ2reg æ8r7ei ærei6e æ2rek æ6r7eld ære5ne. ære7nes æ2rep æ5rern æresa4m ære6skr ære4sl ære4sp æ4reta æ4retek æ9rets æ2rev 4ærf ærgen5 ærhø8 æ1ri æri6e7ne æ4r3il ær3ins æri6s ær5is. 4ærk2 ærle6ge. 4ærm ærmå8la ær3n ær5ne4 ær4nå æ2r7o6 ærom5 æroms4 ær5r ær6sel ær4s5il ær1sk ær7s6no ær2sp æ2r1u ærut5 ær3v æ2r1ø4 ærøy7e ær3å4 æ8se. æ2sj æ2s1k æ5ta 4æte æ4te. æt6he æt4r æt4ta æ5va ævar5 æve4s æ5vi 6ø1a2 øa7re øau4 ø1b øbe6lev øbe4li ø2bl ø3b6li øbl9u øb4r ød3ag ø4dak ød3d ød9de. ø2de. ø4dede ø6def ø4dela ø4dem ø4deo ø4deri ø4dero ø5dj ød1r ød4red ød4rek ød4rep ød2sc ød6s5ek øds7ke øds4ko ød6sku6 øds4mu ød8t5om ødt6r ø2du ød3und ø4d5ur ø6d5ø 4ø1e2 ø4ed ø5ene ø5ep ø3e6re øfe8 øf3fe øf6j øf8la. øf8le. øffe8l7a ø5fn øfte5s øg1 øg2a øg5ak øg5al ø7gar ø5gas ø3ger øg5gl øg8gå ø7g4j øglo8ve øgn6s7p ø2g2r øg5re. øg5res. øgs2 øg4ste øg4str øgta5 4øg4u ø1h ø4i øi4e øi5er. øi5e4ne. ø5ing ø5isk ø4it ø1j 6øk. 6ø1ka ø5kav øka8ve. ø6keh ø4kelo ø6kerada ø6kerel ø4ke5ru øke1s ø6kese ø8kesl ø4kest ø4kete ø1ki 4økj ø5kjare ø5kjas ø1kje 2økk øk5kel øk5ket øk4k5l økk5r øk3lag øk3lan 2økna 1øko øk5opp ø1kr ø8krar øk8sa. øk6se. øk4ses øk4si øk2so øks1t6 øks5ti øku4r øk5ur. øk5ure øk7ve ø7ky ø1la ø2lah ø6lam øl3d øled ø4ledi ø6lelu ø4lero ø6leta ø4le5te ø2lev øl4gera ølge5s6v øl1j øl2ke ølke7s øl4lese øl9leti øl6lev ø1lo øl7op ølrå4 øl6sel øl4sere øl4se3s øls6t4 øl5s4v ø5luk øl7ut ølva6 øl4var øl4v3ei øl6vek øl8vel ølv7erk øl4v3in ølv5o ølv7r ø1ly ø4me. ø9met 1ømfi ø5mi ømini6 øm4med øm4mero ømmet6 øm4metr øm3op øm4pel øm7s6p øm1st øm5svi ø2m1u ømå8la øn2ad ø6n5al ø5nas ø2nem ø3nes. ø9nese ønhø8re. øn8k7r 4ønn øn4nal ønni4 øn4n5it ønns5al ønn4s3e ønn4s5i4d ønns5kje ønns5kre ønns5ku ønns3l ønns3t øn2nø ø6nom øn2s øn9sa. øn5sak øn5sam øn5se. øn3ser øn3skj øn8skjer. ønst3r ønst9ra ønt1 øn2ta øn2to øn7u8 ø1o ø4peda ø6pe5i ø4penu ø5pero ø4peru øpes4 ø4pete ø4peti ø1pi øp3li øp5p øp6pl ø1pr øp6s1 øpsa4 øpsla8ga øps8leg øp5ste øp7s8tik øp4s5ø ø1ra ø2ra. ø2r1af ø2r1ak ø2r1a2m ø4rans ø4r3ant øra8sa øra6si ø4r7au ørd4e ø1re ø2rea ør7edd ø6redu ø2ref ø2reg ø6rein ø2rek ørek6l ør3eks ør5ekt ørele8se ø9relet ø4r5eng ø2re5o4 ø2rep ø6reret ø4reru øre1s2 ø5res. ø4rese ø6resi ø7reskrivi ø8reso ø4rest øre6s7v ør6et ø4reta ør1eu ø2rev ør5fe ørge5s ø1ri øri8m ør4jet ør4keri ør4kes ør8k9lag ør6k5n ør4kve ør4kå ørla8ga ørm9ut ørn4e ør4nere ør4nes4 ør4n3u ør4n5ø ør1o ø5r6ok ø1ros ø4r3ost øro4v ør4rek ør4rep ørri4 ør4r5is ør4råt ør4sak ørsa8ka ørsa6me. ør4sc ør6ses ør2si ør5ski ør4skr ørs6lev ør4som ør4spe ør2st ørs9tar ørste5i ørs5tens ørs5tig ør3sto ørs9u ør2sv ørs1å ør9tar ør4tek ør6ti9a ør4tide ør8tien. ør6tif ør3to ørum5 ø6rut ør5v ør1ø2s ørø1v ør1åp ø1sa øsa6me. ø8sarar ø1sc ø2se. ø2sem øse4n5o øseri7 øserie6 øs5jo øs7kar øs1l øs4lag ø4slu øs2me ø1s2p øss8n øs8tas øst9ast øs6teg øs5terse øst9ett østo2 øst5of øst5ov øst1r øst3re østø4 ø2s1ø2 4øt øt3ak ø9tar øta4s øt5asa ø2te. ø2tea ø6tef ø6tege ø2tei øte5k ø2t5eks ø2tel ø5tela. ø3ten ø4teni ø3ter. øte3ru ø2te1s øte7sn ø4teta øt7ri øt1sa øt3s4p øt7s6å øtså9re øt4tero øt6test øtt5av øtt5eks øtt5eta øtt5ete øtt5ra øtt7ri øtt1s2 øttså7re øt4tur øt4ty ø1tu ø5ty ø1u2 øug8la øv5aa øv5ans øve5in ø4vek øve5no øveren8 øve1s øves4t øve3te ø5vik øv6l7ut øv7ne øv6nø øv9o8 øv1r øv5reb øv1s øv9sa ø5vå øy3al øya2n 7øyan. 9øy8ans øy4dek øy4dere øyd8i 5øyeb øy7e4de øy2ee øy4ele øye4n øy4ep øy4erf øy1gl øy3ke. øyks4 øyk5t 2øyl øy4led øy4leg øy5na øy5ni øy3o 6øyp øy3pe. øy4pel øy4ra. øy5rer. øyri6v øy3rø øy1s øy5s4ar øy5si øys2l øy4sm øy4spi 5øysund øy4tei øy4tel øy4tere øyte5s6 øyti7da øy1tr øyt5s øy2t3y6 øy5tø øy4vei 5øyvå ø1ø2 ø5å6 å1a åak6ta åa4n5 åan8ka. åan6ke. å2ar å5aran åau4re å1b4 åba8ne. åber2 åbo9ta 6å1d å7dan å9dar å4ded å4dek å4dem å4deo å4dep å4dere å4deri å6dero å2des å7di åd4ra åd8re åds1 åd2sk åd3s4la åd7slo åd3slå åd1s2n åd3s4pe åd7spu åd5st åd6s7te 4å1e å2ele åem8na åe2n å7ens å3er å3e6re. å7e8ri å1f åfe6 åfø5re 2åg å4ga. åg7ald å4ge. åg7ei å2ges ågna5 åg5ne åg4r åg5rin ågs6k åg5sl åg7sp ågs4t ågu4l åg5ø å4gå. å1h å1i å1j å1ka å3kan å3kar å4karb åk7av å4keh å3ken å4kena å4k3enh å4kere åke5s å4kesl å5kevi å1ki å6kid å1kj åk1k åk5ka åkk6l åk7kr åk7lau åklist7 åk3læ å1ko åk3opp åko4s åk6ra åk5røk åk3rå åk1s2 åks7l åk3t4 åku8 å5k8ul åkva8la. åkøy8rar. å2k3å å1la å5l6amp å6larb å9las ål5au8 ål9av ål3d å2lef ål5eini å2lek å2lem å4l5enh å4leni åle6ris å2le1s2 åle9s6und å4lete å2lev ål5g ålgå6 å6lio ål5j ålla6ga ål3or ål4san ål4sek ål4ser åls7i ål2sp ål4sti ålsy8na ål5ti ålti5d ål1u ålul8la å1ly å2l1øy åløy4e ål5å6k ålå8te. 6åm å6me. åm4li. åm1om åm5øy 8åna å3nar å9nas ånd3r ånd4sa ånd4se ånd4so å4ne. åned4 åneds5 åne5i6 å2nel ånely6 å5nes. å3net å4netr å3ni ån5o å9ny å3o åp2e åpe4n3a åpe4n5i åpen3s å5per å6pero å1pi åp6j å1pla åp4ne. åp7p å1pr åpra5 åp2s1 åp6ta å4på år3ak å9ran å7rara ård5str å2re. å5rei å6rel åre7s å4rest årfi4 å7riv år3k2 år4le. 2årn årn5s år3on år3op årpo8 år2s års5af års3el år3sem års3ko år8sku årsla8ga år3sol års3ta år7ste års3ti år7sto år5stu års1u års1v år5sy år5u4k år3un år5y4 å1rø å5r8å ås2 å1sa ås7au å4se. å4see ås5eid å4sek å4sem åseri7e6 åse3s2 å4sesm å4seso åse5ta ås3h å8si. ås5ka. ås9kene ås8ki å1skj å2s3kjør ås7kop å1skr å5sku å1sl ås5ne ås3ni å5so å1sp ås7pl ås5sa ås5se ås3si åss3k å8s7s6kå 4å1st å7stei åsu4 ås3un ås7ut ås7væ ås5øy åså7 å1ta å4ta. åtaks5 åta2l åta9la åtale3 åta5le. åta5len å4tang å4tark å4t5arm å2te. å2tea å4tee å2t1ei åte6ke. å4teo å9ter å2tes 5åtferd å5ti åti7da 2åtn å1to åt7ov 6åtp åt1re åtri6pa. åtri8pe. åt1ru åt5sk åt1t åt4ted åt4ti ått3o åt4tri åtts4 åt6t5æ åt1u åt4un åtva5ra åtva7re åt5ve å5ty åt1øv å3u åun8ge. å1v åv4a å2ve7d å4veg åve5l å4veni å9ver. å2vev åv7s6 å7vy åvæ4re. å1ø8 åøy4}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nb.hyp0000644000175000017500000000022611761001300024644 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-nb.rme % used: a b d e n r t \hyphenation{ at-ten-de be-tre}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-da.lua0000644000175000017500000002346612161703335024641 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="da", ["source"]="hyph-da", ["texcomment"]="% Danish hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: dkcommon.tex (yyyy-mm-dd), dkspecial.tex (yyyy-mm-dd)\ % Author: Frank Jensen \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % This file contains the hyphenation patterns for Danish.\ %\ %% Copyright 1994 Frank Jensen (Frank.Jensen@hugin.com)\ %\ % This work may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either version 1.3\ % of this license or (at your option) any later version.\ % The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ % and version 1.3 or later is part of all distributions of LaTeX\ % version 2003/12/01 or later.\ %\ % Changes:\ % - 2011-01-11 - remove support for OT1 encoding\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzåæø", ["data"]=".ae3 .an3k .an1s .be5la .be1t .bi4tr .der3i .diagno5 .her3 .hoved3 .ne4t5 .om1 .ove4 .po1 .til3 .yd5r ab5le 3abst a3c ade5la 5adg a1e 5afg 5a4f1l af3r af4ri 5afs a4gef a4gi ag5in ag5si 3agti a4gy a3h ais5t a3j a5ka a3ke a5kr aku5 a3la a1le a1li al3k 4alkv a1lo al5si a3lu a1ly am4pa 3analy an4k5r a3nu 3anv a5o a5pe a3pi a5po a1ra ar5af 1arb a1re 5arg a1ri a3ro a3sa a3sc a1si a3sk a3so 3a3sp a3ste a3sti a1ta1 a1te a1ti a4t5in a1to ato5v a5tr a1tu a5va a1ve a5z 1ba ba4ti 4bd 1be be1k be3ro be5ru be1s4 be1tr 1bi bi5sk b1j 4b1n 1bo bo4gr bo3ra bo5re 1br4 4bs bs5k b3so b1st b5t 3bu bu4s5tr b5w 1by by5s 4c1c 1ce ce5ro 3ch 4ch. ci4o ck3 5cy 3da 4d3af d5anta da4s d1b d1d4 1de de5d 4de4lem der5eri de4rig de5sk d1f d1g d3h 1di di1e di5l d3j d1k d1l d1m 4d1n 3do 4dop d5ov d1p 4drett 5d4reve 3drif 3driv d5ros d5ru ds5an ds5in d1ski d4sm d4su dsu5l ds5vi d3ta d1te dt5o d5tr dt5u 1du dub5 d1v 3dy e5ad e3af e5ag e3ak e1al ea4la e3an e5ap e3at e3bl ebs3 e1ci ed5ar edde4 eddel5 e4do ed5ra ed3re ed3rin ed4str e3e 3eff e3fr 3eft e3gu e1h e3in ei5s e3je e4j5el e1ka e3ke e3kl 4e1ko e5kr ek5sa 3eksem 3eksp e3ku e1kv e5ky e3lad el3ak el3ar e1las e3le e4lek 3elem e1li 5elim e3lo el5sa e5lu e3ly e4mad em4p5le em1s en5ak e4nan 4enn e4no en3so e5nu e5ol e3op e1or e3ov epi3 e1pr e3ra er3af e4rag e4rak e1re e4ref er5ege 5erhv e1ri e4rib er1k ero5d er5ov er3s er5tr e3rum er5un e5ry e1ta e1te etek4s e1ti e3tj e1to e3tr e3tu e1ty e3um e3un 3eur e1va e3ve e4v3erf e1vi e5x 1fa fa4ce fags3 f1b f1d 1fe fej4 fejl1 f1f f1g f1h 1fi f1k 3fl 1fo for1en fo4ri f1p f1s4 4ft f3ta f1te f1ti f5to f5tvi 1fu f1v 3fy 1ga g3art g1b g1d 1ge 4g5enden ger3in ge3s g3f g1g g1h 1gi gi4b gi3st 5gj g3k g1l g1m 3go 4g5om g5ov g3p 1gr gs1a gsde4len g4se gsha4 g5sla gs3or gs1p g5s4tide g4str gs1v g3ta g1te g1ti g5to g3tr gt4s g3ud gun5 g3v 1gy g5yd 4ha. heds3 he5s 4het hi4e hi4n5 hi3s ho5ko ho5ve 4h3t hun4 hund3 hvo4 i1a i3b i4ble i1c i3dr ids5k i1el i1en i3er i3et. if3r i3gu i3h i5i i5j i1ka i1ke ik1l i5ko ik3re ik5ri iks5t ik4tu i3ku ik3v i3lag il3eg il5ej il5el i3li i4l5id il3k i1lo il5u i3mu ind3t 5inf ings1 in3s in4sv inter1 i3nu i3od i3og i5ok i3ol ion4 ions1 i5o5r i3ot i5pi i3pli i5pr i3re i3ri ir5t i3sc i3si i4sm is3p i1ster i3sti i5sua i1ta i1te i1ti i3to i3tr it5re. i1tu i3ty i1u i1va i1ve i1vi j3ag jde4rer jds1 jek4to 4j5en. j5k j3le j3li jlmeld5 jlmel4di j3r jre5 ju3s 5kap k5au 5kav k5b kel5s ke3sk ke5st ke4t5a k3h ki3e ki3st k1k k5lak k1le 3klu k4ny 5kod 1kon ko3ra 3kort ko3v 1kra 5kry ks3an k1si ks3k ks1p k3ste k5stu ks5v k1t k4tar k4terh kti4e kt5re kt5s 3kur 1kus 3kut k4vo k4vu 5lab lad3r 5lagd la4g3r 5lam 1lat l1b ldiagnos5 l3dr ld3st 1le. 5led 4lele le4mo 3len 1ler 1les 4leu l1f lfin4 lfind5 l1go1 l3h li4ga 4l5ins 4l3int li5o l3j l1ke l1ko l3ky l1l l5mu lo4du l3op 4l5or 3lov 4l3p l4ps l3r 4ls lses1 ls5in l5sj l1ta l4taf l1te l4t5erf l3ti lt3o l3tr l3tu lu5l l3ve l3vi 1ma m1b m3d 1me 4m5ej m3f m1g m3h 1mi mi3k m5ing mi4o mi5sty m3k m1l m1m mmen5 m1n 3mo mo4da 4mop 4m5ov m1pe m3pi m3pl m1po m3pr m1r mse5s ms5in m5sk ms3p m3ste ms5v m3ta m3te m3ti m3tr m1ud 1mul mu1li 3my 3na 4nak 1nal n1b n1c 4nd n3dr nd5si nd5sk nd5sp 1ne ne5a ne4da nemen4 nement5e neo4 n3erk n5erl ne5sl ne5st n1f n4go 4n1h 1ni 4nim ni5o ni3st n1ke n1ko n3kr n3ku n5kv 4n1l n1m n1n 1no n3ord n5p n3r 4ns n3si n1sku ns3po n1sta n5sti n1ta nta4le n1te n1ti ntiali4 n3to n1tr nt4s5t nt4su n3tu n3ty 4n1v 3ny n3z o3a o4as ob3li o1c o4din od5ri od5s od5un o1e of5r o4gek o4gel o4g5o og5re og5sk o5h o5in oi6s5e o1j o3ka o1ke o3ku o3la o3le o1li o1lo o3lu o5ly 1omr on3k ook5 o3or o5ov o3pi op3l op3r op3s 3opta 4or. or1an 3ordn ord5s o3re. o3reg o3rek o3rer o3re3s o3ret o3ri 3orient or5im o4r5in or3k or5o or3sl or3st o3si o3so o3t o1te o5un ov4s 3pa pa5gh p5anl p3d 4pec 3pen 1per pe1ra pe5s pe3u p3f 4p5h 1pla p4lan 4ple. 4pler 4ples p3m p3n 5pok 4po3re 3pot 4p5p4 p4ro 1proc p3sk p5so ps4p p3st p1t 1pu pu5b p5ule p5v 5py3 qu4 4raf ra5is 4rarb r1b r4d5ar r3dr rd4s3 4reks 1rel re5la r5enss 5rese re5spo 4ress re3st re5s4u 5rett r1f r1gu r1h ri1e ri5la 4rimo r4ing ringse4 ringso4r 4rinp 4rint r3ka r1ke r1ki rk3so r3ku r1l rmo4 r5mu r1n ro1b ro3p r3or r3p r1r rre5s rro4n5 r1sa r1si r5skr r4sk5v rs4n r3sp r5stu r5su r3sv r5tal r1te r4teli r1ti r3to r4t5or rt5rat rt3re r5tri r5tro rt3s r5ty r3ud run4da 5rut r3va r1ve r3vi ry4s s3af 1sam sa4ma s3ap s1ar 1sat 4s1b s1d sdy4 1se s4ed 5s4er se4se s1f 4s1g4 4s3h si4bl 1sig s5int 5sis 5sit 5siu s5ju 4sk. 1skab 1ske s3kl sk5s4 5sky s1le s1li slo3 5slu s5ly s1m s4my 4snin s4nit so5k 5sol 5som. 3somm s5oms 5somt 3son 4s1op sp4 3spec 4sper 3s4pi s1pl 3sprog. s5r4 s1s4 4st. 5s4tam 1stan st5as 3stat 1stav 1ste. 1sted 3stel 5stemo 1sten 5step 3ster. 3stes 5stet 5stj 3sto st5om 1str s1ud 3sul s3un 3sur s3ve 3s4y 1sy1s 5ta. 1tag tands3 4tanv 4tb tede4l teds5 3teg 5tekn teo1 5term te5ro 4t1f 6t3g t1h tialis5t 3tid ti4en ti3st 4t3k 4t1l tli4s5 t1m t1n to5ra to1re to1ri tor4m 4t3p t4ra 4tres tro5v 1try 4ts t3si ts4pa ts5pr t3st ts5ul 4t1t t5uds 5tur t5ve 1typ u1a 5udl ud5r ud3s 3udv u1e ue4t5 uge4ri ugs3 u5gu u3i u5kl uk4ta uk4tr u1la u1le u5ly u5pe up5l u5q u3ra u3re u4r3eg u1rer u3ro us5a u3si u5ska u5so us5v u1te u1ti u1to ut5r ut5s4 5u5v va5d 3varm 1ved ve4l5e ve4reg ve3s 5vet v5h vi4l3in 1vis v5j v5k vl4 v3le v5li vls1 1vo 4v5om v5p v5re v3st v5su v5t 3vu y3a y5dr y3e y3ke y5ki yk3li y3ko yk4s5 y3kv y5li y5lo y5mu yns5 y5o y1pe y3pi y3re yr3ek y3ri y3si y3ti y5t3r y5ve zi5o .så3 .ær5i .øv3r a3tø a5væ brød3 5bæ 5drøv dstå4 3dæ 3dø e3læ e3lø e3rø er5øn e5tæ e5tø e1væ e3æ e5å 3fæ 3fø fø4r5en giø4 g4sø g5så 3gæ 3gø1 3gå i5tæ i3ø 3kø 3kå lingeniø4 l3væ 5løs m5tå 1mæ 3mø 3må n3kæ n5tæ 3næ 4n5æb 5nø o5læ or3ø o5å 5præ 5pæd på3 r5kæ r5tæ r5tø r3væ r5æl 4røn 5rør 3råd r5år s4kå 3slå s4næ 5stø 1stå 1sæ 4s5æn 1sø s5øk så4r5 ti4ø 3træk. t4sø t5så t3væ u3læ 3værd 1værk 5vå y5væ æb3l æ3c æ3e æg5a æ4gek æ4g5r ægs5 æ5i æ5kv ælle4 æn1dr æ5o æ1re ær4g5r æ3ri ær4ma ær4mo ær5s æ5si æ3so æ3ste æ3ve øde5 ø3e ø1je ø3ke ø3le øms5 øn3st øn4t3 ø1re ø3ri ørne3 ør5o ø1ve å1d å1e å5h å3l å3re års5t å5sk å3t", ["length"]=6152, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=1144, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cs.lua0000644000175000017500000006337712161703335024667 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="acefhijklnoprtyíúčř", ["data"]="koe-fi-ci-ent koe-fi-ci-en-ty pro-jek-ční úhlo-příč-ka úhlo-příč-ky", ["length"]=77, ["n"]=5, }, ["metadata"]={ ["mnemonic"]="cs", ["source"]="hyph-cs", ["texcomment"]="% Czech hyphenation patterns (Pavel Sevecek, v3, 1995)\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: czhyphen.tex (), czhyphen.ex ()\ % Author: Pavel Ševeček \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ %%% ====================================================================\ % This is CZHYPHEN.TEX, containing czech hyphenation patterns.\ % Prepared by:\ % Pavel Ševeček\ % Lingea s.r.o., Brno, Czech Republic\ % E-mail: pavel@lingea.cz\ %\ % This is free software; you can redistribute it and/or modify\ % it under the terms of the GNU General Public License as published by\ % the Free Software Foundation; either version 2 of the License, or\ % (at your option) any later version.\ %\ % This file is distributed in the hope that it will be useful,\ % but WITHOUT ANY WARRANTY; without even the implied warranty of\ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\ % GNU General Public License for more details.\ %\ % You should have received a copy of the GNU General Public License\ % along with this program; if not, write to the Free Software\ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\ %%% --------------------------------------------------------------------\ % \\message {Czech Hyphenation Patterns (Pavel Sevecek, v3, 1995)}\ %\\lefthyphenmin=2\\righthyphenmin=2\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzáéíóúýčďěňřšťůž", ["data"]=".a2 .a4da .a4de .a4di .a4do .a4dé .a4kl .a4ko .a4kr .a4ku .ale3x .a4ra .a4re .a4ri .a4ro .a4ry .a4rá .a4sa .a4se .a4so .as3t3 .a4sy .a4ta .a4te .at3l .a4to .a4tr .a4ty .a4ve .b2 .c2 .ch2 .cyk3 .d2 .dez3 .d4na .dne4 .dneš4k .d4ny .dos4 .d4ve .d4vě .d4ví .e2 .e4ch .e4ko .es3k .es3t .e4ve .f4ri .g2 .h2 .h4le .h4ne .i2 .i4na .i4ni .i4no .is3l .j2 .j4ak .je4dl .j4se .j4zd .jád4 .k2 .k4li .k4ly .kří3d .l2 .le4gr .li3kv .m2 .mi3st4 .moud3 .na3č4 .ne3c .neč4 .ne3š .ni2t .no4s3t .n4vp .ná1 .nář4k .o2 .o4bé .ode3 .od3l .od3rá .o4ka .o4ko .o4na .o4ne .o4ni .o4no .o4nu .o4ny .o4ně .o4ní .o4pe .o4po .o4se .o4sl .os4to .os3t3r .os4tě .ot3rá .ot3v .o4tí .o4tř .ově4t .o4za .oz3do .o4zi .o4zo .o4zu .o4šk .o4šl .o4ži .p2 .pa4re .pa3tř .polk4l .po3č4 .p4ro .p4rý .p4se .pu3b .r2 .rej4 .re3s .ro4k .roze3 .roz3r .ru4dl .s2 .s4ch .s4ci .sem4 .se3pn .s4ke .sk4l .s4ká .s4le .s4na .s4ny .s4pe .s4po .st2 .s4tá .s4ži .t2 .u2 .u4ba .u4be .u4bi .u4bo .u4de .u4di .u4do .u4du .u4dí .uh4n .uj4m .u4ko .u4ku .ul4h .u4ma .u4me .u4mi .u4mu .u4ne .u4ni .u4pa .u4pe .u4pi .up4n .u4po .u4pu .u4pá .u4pě .u4pí .u4ra .u4ro .u4rá .us2 .u4so .u4st .u4sy .u4sí .ut2 .u4vi .u4ze .u4če .u4či .u4čí .u4še .u4ši .u4šk .uš4t .u4ší .u4ži .už4n .u4žo .u4ží .v2 .va4dl .v4po .vy3 .v4zá .vý1 .v4ži .y4or .y4ve .z2 .za3 .zao3s .zar2 .zač2 .zd2 .z4di .z4dr .z4ky .z4mn .z4no .z4nu .z4ně .z4ní .z4pe .z4po .z4tř .z4ve .z4vi .č2 .č4te .é2 .í2 .ó2 .š2 .še3t .š4ka .š4ke .š4ky .š4ťo .š4ťá .ú2 .ú4dů .ž2 a1 2a. aa3t2 ab3lon ab4lý ab3ri ab4sb ab2st ac4ci a2d a3da a3de a3di ad2la a4dli a4dlá a4dlé ad4me ad4mu a3do ado4s a3d3ra ad3ri a3drž a3du a4duž 3a3dva ad3vo a3dy a3dá a3dé a3dě a3dí ad4úz ad4úř a3dů a3dý ae4vi afi2a a2g a3ga ag4fa a3go ag3ro a3gu a3gá ah4li ah3v a2i a3in ai4re a3iv a2jd a2jm aj4me aj2o a2k a3ke a3ki a3kl ak4ni a3ko a3kr a3ku a3ky a3ká a3ké a3kó a3ků a3ký al4fb al4kl al4tz al3ží am4bd am4kl am4nu amo3s am4ži a4nae a4name an4dt ane4sk aneu4 an4sc an4sg an4sl an4sm an2sp an4sv an4tč an4žh ao4ed ao4hm ao4stř ao4tč ap4r. a4pso ap3t a4př. a2r a3ra ar4dw a3re a4rer ar4gl a3ri ar4kh a3ro a4rox ar3st a3ru ar2va a3ry a3rá a3ró ar3š2 ar4šr a3rů arůs3 a3rý a2s a3sa a3se a3sh a3sin as3ná a3so as3pi as4tat a4stk as4tm a4stru. as3tv a3su a3sv a3sy a3sá a3sé a3sí a3sů a2t a3ta at4ch a3te a3ti a4tio at4kl at3lo a3to a3tr at3re at3ron at3rov a4tru at4rá at4th a3tu a3tv a3ty a3tá a3té a3tě a3tí a3tó at1ř a4tří. a3tů a3tý a2u au4gs a3uj auj4m aus3t a3uč 2av av3d av4d. av3lo a4vlu a4vlí av3t av4ti 2ay ay4on az3k az3la az4lé az3ni a3zp a2č a3ča a3če a3či a3čl ač4má a3čo a3ču a3čá a3čí a3čů a2ň a3ňo a3ňu aře4k a3ří a4špl a4špy a2ť aú3t 2b. 3ba. ba4br ba4chr ba3ka ba4se 2b1c b1d be4ef be4et bej4m be3p beu4r be2z3 beze3 b1h 1bi bi2b3 bis3 bist4 bi4tr b1j 2bk 3bl. bl4bl b2lem b2les 3blk b4lán b2lém b1m 2bn 1bo bo4et bo4jm bo4ok bo4tr bou3s bo4šk b2ral b2ran 2bri b4rodit b4rou broz4 b2ru b3ru. b3rub b2rán 2b1s2 bs3tr 2b1t btáh4 bu2c bu4en 3by. bys3 by4sm by4tč by4zn b2z 1bá 2b1č bé4rc 1bě. bě3ta 1bí 3bín bí4rc 2bň b3řa b3ře. bře4s b1ří 2bš2 2c. 1ca cad4l ca4es 2cc 1ce cech4 ced4l celo3 ce4ns ce4ov ce4ps cer4v ce2u 2ch. 1cha 4chalg 3che 4che. 2chl ch4ly ch4mb 2ch3n 2cht 4chte 1chu ch4u. 1chy 1chá 2chř 1ci cien4c cik4l 2ck2 c4ket ckte4rý 2cl c3la c3lé 2cn 1co co4at co4mm co4žp c2p 2ct c2ti ctis4 ct4la ct2n c3tv c2tě cuk1 1c2v cy2 1cá 1cí cí4pl 2cň 1ců 2d. 1da da3d da4jš da4kl da4tr d1b d2ba 4dbat. d2bá 2d1c dch4l 3dch4n d1d dd4ha 1de de4bre de3hn de3jd dej4mo de3kl de3kv de2na de2oz de3sl de4sm de4so de2sp des4t de3str de1x de4xt de2z de3zn dez3o de3čt de4žp 2d1h 1di di4gg 4dind dis3k di4so d1j dj4us 2dk d3kv 3dl. d1la d4lab d4lak d3li 1dln d2lou d3lou. d2lu d3luč d4láž d1lé 2d1lí d2lů d1m 1dmd dmýš4 2dn 1do 4dobl 4doboj dob4rat do3by do3bě do3bý do1d 4do4dd 4do4dj dod4n do3h doj4m 4dokn 4doly do3mn domoh4 do3p do4pc dop4n dor2v do1s dos4p dos4tiv do3t do3uk do3uč do3z2 doz4n do3č 4do4čn doč4t do4žp 4dran d4rap d1re d4ren 3drobn d3ros d3rou d3roš dr4sc d3ruš d3ré d3rý d4rýv 2d1s2 ds4ků ds4po d1t d3tl d3tř 1du dum3ř du3na du3p du4pn 2dur du3si du4í. d2v d4vac d3ve d3vl d3vr d3vy d3vá d3vě d3ví 1dy dy4su d3zb d3zd d3zn 1dá 2d1č 1dé 1dě 3děj 1dí 2dň d1řa dře4k d4řep dře4pn d4řev d1ří d2řít 2dš2 d3šk d3št 1dů 3dů. dů3s 1dý d2ž2 2e. e1a ea3dr e2ar e1b eb4er ebez2 eb4li e2bř e4ch. e3chl. e4chm e3cho e2chr e3chv e4chť ed4be ed4kv ed1l ed2ma e3dmn ed3v ed4ří e1e ee4th ee3xi eg4gi e1ha e1he ehno4 eh4ně e1ho e1hr e1hu e1hy e1há e1hý e1i eilus3 ej3ag e3jas e1je e3jed ej3ele e3jez ej3in e3jis ej1m ej3mo e3jmu ej1o ej1u eju3st ej3v e2k e3ka e3ke e4kly e3ko e3kr e3ku e3ky e3ká e3ké e3kó e3kř e3ků e1la e4lau el4dv e1le e1lo e1lu e1ly el4ze e1lá e1lé e1lí e1ml e4mlí emo3k e1mr e1my e3má e1mě e1mí e3mř e3mů e1mý em3že en4dv enitos4 en4sc en4si ent3r e1o eo3by eoch3r eod3l eo4du e4ole eo1s eo2st eo4tř eo3z eo4zb eo4zd eoše3 epa3t e2pl e4pni ep2no e4pný epoč3t epro4zř ep4tl ep4tm ep4tn e4ptu epy3 2er e1ra er4a. e1re e1ri e1ro er3s er4s. er4sn e1ru e1ry e1rá e1ré e1rů e1rý e1s e4sag e2sce e4sin esi4s e2sk es4k. e4s4kn es3ku. es3ky es3ké e2sl e4s3li e4sly es2m e4sp. es4pe e2st e4st. e4ste es3tiž es4tol e4strou es3tán e1t e4tki e4tkr e4tli e4tly et3ri et3ro et3rů et1ř et4ún e1u eu3b eu3ct eu3d eu3k eu3m eu4m. eu3n eu3p eu3r eu4r. e4ura eu4ras eu4rg eu3s2 eu3t e4u4t. eu4tra eu4ts eu3v eu3z eu3ž e3vd eve4š e3v2k e4vsk evy3 evyjad4 evypá4t evy4čk evě4tr ex4ta e3xu ey4or ey4ov ezaos3 ez4ap ez4bo ez3de ez3dov ez3du ez4dě e3ze ez4ed2 ez4ej ez4el ez4er ez4es ez4ez ez4eš ezis4 ez4it ez4le ez4ná ez4ně ez4py ez2t ez4ác ez4áh ez4če e3zí e3zř ez4ře e1á eč4kat e1čt eč4te e4čti e4čtí e2ň e3ňo e3ňu e3ňá e3ón e1ř eře4k eř4ku e3ří e2š e3še e3ši e4ška e3šl eš4lá e3šo eš4to eštíh4 e3ší eú1 eúmy4 eú3n eú3p eú3t eú3č ežíš4 1f 2f. fe4in fene4 fe4ue fi4em fi4fl f2l f3lí fló4r fm4no 2fn 2fr f4ran f4ras 3frek f1ri 2fs fs4te 2ft fu4ch 2fé f2ú 1g 2g. ga4uč ge2s ghou4 3gic 3gin gi4ím g4lom 2g1m 2gn g4noi g4nos go1 go4hm 3graf gu4el gu4it gu3m gu4m. gus4t gu3v 2h. ha4ag ha4ar ha4bl ha4br ha3dl ha4dla ha4ke has3t hatos4 ha4yd h2b h2c 2hd he4br he4id hej4s he2s he2u he3x hi4an hi3er hi4gh hi4re 2hk 4hla. h4led h3len 2hli 4h3lo. h3lob h3lop h3lov h3luj 2h1ly 4hlá. h4lás h3lí. 4hlík 2hlý h2m 2h2n h3ne h4ned h3niv h4noj 3hněd 3hodin ho3str hos4tě 4hove 4hovna 4hovny 4hovná 4hovně h2r hra4p 2h1t h4tin h2tě h4tít hu4ch hu3mo hu4tň 2h2v hyd1 hy4do hy4ps hys3 hy2t3r hy4zd h1č 2hň hř2 hř4by hý4bl h2ž 2i. i1a ia3d ia3g2 i4al. ias4t ia4tr i1b ib2l i2b1r i1ch i4chž i1d id4ge id2l id4lo. i4dlý i1em i1en i1et if1r ig4ne i1h i2hl i3hl. i4hli ih3n ih4na i3im i1j ijed4 ij4me ij4mi i2kl ik3le ik3lo. ik3m ik4ry i4kve ik4úř i1l il4ba ilič4n i4lnu ilu3 i1m i4mla i4mly i4mun i2n i3na ina3d in4cm in4dl i3ne 3infe in4gh in4gp in4gs in4gt i3ni i3no i3nu i3ny i3ná i3né i3ně i3ní in4šp i3nů i3ný i1o io4sk i2ps i1r iro4s i1sa is3c is4ch is4k. is3ka is3ke is3ko. is3kr is3ku is3kv is3ky i3slav is3lo is3lé is3pl is3po is1t is4tal is4tat is4th ist3v is3tí i1sy i3sá i1t it1r it4rh it4rp it4se it4su i2tv i1um iv3d i1x ix4td i3zp iz1r i1á i1čl ič3t ič4tl ič4to i2ď i1é ié4re. i1íc i1ím i1ó i1ř iř4kl iř4če i2š i3še i3ši iš3k iš4kr iš4kv i3šo iš4to i3šu i3šá i3ší i2ž i3ža i3že i3ži i3žo i3žu i3žá 2j. ja2b2 jac4k ja4cq ja3d ja3g j3akt j1b2 jbyst3 2j1c j2d j3dob j3dok j3dos j3dr j3dá jd4ří j3dů jech4 j3ef j3ex jez3dí jg4ra 2j1h 1ji ji4ch jih3l ji4mž j4ina jis3k jit4ro ji2zv j1j 2jk j3kv 2j1l j2m j3ma j3mi jmou3d 2jmí 2jn jne3 j1ob j1od jod2ř j1oh j1op j4ora j1os jo3sv j2ov j3ovl j1o3z2 2jp jpor4 jpo4zv jpříz4 2j1r 2j1s2 j4sem j4si. j4sk. js4ko js4ká j4s4ků j4s4me j3sn j4sou. j4souc js4po j4s4te 2j1t j3tl ju4an ju3na ju3p j1us ju3sp ju3t ju4t. ju3v ju4xt ju3z j1už ju3ži 2jv2 j3vd j3vn 2jz j3zb j3zd j3zk j3zn j3zp jád2r 2j1č 2jď 1jí j3št jš4ti j3šť 2jú1 jú3n jú3č jú3ž 2jž 1k 2k. ka4bl ka4ch ka3dl 3kaj ka3ka 3kami 3kaně ka2p3l ka2p3r ka2ps ka4pv ka2př kas3t kast3r 3kat ka4uč 3kav 3kač 3kař kaš3l ka4šp 2k1c k2d k2e ke4bl ke3jo ke4pr ke4ps 3ket 2kf 2kk k2l 3kl. 4k3la. k3lej 4k3li. k4lib k3lic 4klička 4klo. k3los 2k3ly k3lá. k3lé k3ló k3lý 2k2m k3mě 2kn kna4s ko3by 3kof ko4jm ko2př ko4sk ko2t3v kous3k 3kov ko3zá 4kroa k3rob k3rof kr2s kr4ú. 2ks 2k1t kt2r kuch4 ku4fř ku4hr 3kuj ku3se ku3si ku3su ku4th ku3v 2k2v k4vrň 3kyn ky2pr kyp3ř ky4zn 3kác ká4pl 3kár 3kář 2kč k2ň k2ř2 k3řej kš4ti 3ků. 2l. 1la. la4br lab4s la3ka la4nq la4ps 4la3si la4vš la4y. la2zm 2l1b 2l1c 2l1d ld4ne le4ad le4au lech3t leh3n le2i 1lej le3jo 4lejšk 1lel 4lench lepa3d lepo4s le4pr le4ps le4sc le4sm le4sv let4li let3m le2tr le4tč le4uk le4vh le4vk le3xi lez3n 2lf 2lg 2lh 3lhan 1li li4az li4bl li4bv li4dm lind4 3lio li4tň li4vr 2liž 2lj 2lk l4kat l2kl lk4nu 2ll 2l1m 2ln l4nul lo3br lo4id lo4is 1los lo3sp lo3stř lo3sv lo2tr lo4tř lo4u. lo3z loz4d lo4šk 2lp l2pě 2l1s2 l4sla ls3n lst4n l4stí 2l1t lt4ra lt4ru lt4ry lu4id lu4j. lu4k. lu4lk lu4m. lu4mn lu3pr lu3va lu3vl lu3vy lu3ví 2lv 2lz 1lá. lá4jš lá4vš 2l1č 1lé. 1lík lí4pl lí4zn 1líř 2lň 2lš2 l3št l4štý 1lů 1lý lý2t 2l2ž 2m. 1ma maj4s ma4kl ma4kr 4mald mas3k mat3r ma4tra ma4vš maz3l 2m1b 2m1c 2m1d2 m2dl 1me 3me. me4go me4is met3re me3x mezi3s 2mf mh4le 1mi mid3l mik3r mi4xt 2mk2 3m2kl mk4la mk4li m2l 4mla. 2mle ml3h ml4h. 2mli ml4sc ml4sk 4mlu. 2mn m3na mna4s m4noh m3nos m4noz 3množ m3ná m3né m4néz m3něj m3ný 1mo mod3r mo2hl mo2k mo2s mo4s. mot3ř 4mout moza4 mo3zř moú3 2mp m4plo mpo4s m2ps mp4se mp2t mr2s 2m1s2 m4stl 2m1t 1mu mu4fl mu3n mu4n. mu4nd mu4nn mu4ns mu4nš 2muš 2mv mys3lo my4šk 2mz 3má. málo3 má2s 2mč m2če mí1c mí4rň 2m2š mš4či mš3ť mš4ťan. 3mů. 3mý. m2ž 1n 2n. 3na. na3ch na4do na4em na3h na4h. na3jd na3ka nam4ne na3p2 na3s2 na4s. nat2 na3tl na3tř na3z naz4k na4zš na4č. na3š naž4n 2nb 2n1c n4chc 2n1d nd4hi ndo4t nd2re nd4ri nd4ří ne1d ne4gl ne1h ne3h4n ne2j nej3t nej3u ne3kl ne4kro ne3kv ne4m. ne3p ne3s2 ne4s. nes4le ne4ss 4nesti ne3tl net4r ne3ud ne3v2 ne4v. ne3z nez4n ne3šk ne3šť 2nf n3fr 2ng ng1l ng4la ng4le ng4lí n4gro ng4vi nik4t ni4mr ni4mž 3nio 3nisk 2nitř n1j 2nk 2n1l 2nn no3b2 no4bs no3hn no4hs no4ir no4mž no4sky no3sm no3str not4r no3z no4zd no4šk 2nož 2n1s2 n2sa ns3ak ns4ko n4soc ns3po nst4ra 2n1t nte4r3a nt4lem nt4r. nt3ru nt3rá 2nub nu4gg 3ny. 2nz 3nák ná3s2 ná4s. 2n1č 2nď 2nív 2níž 2nó 2nš2 n3št nš4ťo nů2 2nž 2o. o1a oang4 o1ba o1be obe3j obe3s obe3z ob1l ob1r ob4rň o1bu obys4 ob3z o3bé ob3řez o1c o4chl o2chr oc4ke oc4ko o4ct. oct3n ocy3 oc4ún od3b odej4m ode3p ode3s od1l o4doc odos4 odo4tk od3ra od4ran od3rů o3drž od3v od1ř o1e2 oe3g oe3ti o2fl ofrek4 og2 o3gn o1h oh4ne o1i oi4ce o4int o1j o4jar oje4dl o4jmi o4jmov o4jmu o4jmů oj2o o4juz 2oka ok2te o1l ol4gl ol4to o1m om4kl om2n o2n o3na ona4s o3ne o3ni o3no ont4ra o3nu o3ny o3ná onář4ka o3ně o3ní o3nů o3ný o1o oo4hř oote2 opoč3t opro4s o2ps o4ptu opá4t o4př. opřej4 opře4jm o1ra o4rae or4dm o1re o1ri o1ro or3st o1ru or4vá o1ry o1rá o3ré o1rů orůs3 o3rý o1sa o4sai ose4s osi4d o1sk o4s3ke o4sku osk3v o4ská o4ský o1sl os4la os4li os4lý os3mo os4mu o4st. o4stg o4stm os4tor os3trů o4sté o4stš o4stý o1sy o1t ot4kl o4tlý oto3s ot3ro ot3ví o3tí o3tř ot3ři o2u ou3bě ou3dě ou4fl ou4il ou4is ou4k. ou3ka o4ukl ou3kr ou3ká ou3m oup3n oupo4 ou4s. ou3sa ou3se ou4sk ou3sm ou4tv ou3v ou4vl ou4vn ouz3d o4učk ou3ži ovi4dla o4vsk ovy2p o2všt o1x o2z o3za oz1b oz4d. oz3dá oz3dě oz3dí o3ze oze3d2 ozer4 oz1h o3zi oz3j oz3k oz4ko oz1l oz3m o4zn. o3zo oz3p oz4py oz4pě oz4pí oz3ro oz3ru oz3rů oz3t o3zu o4zut oz3vr oz3vá o3zí o3zů ozů4s o1č oč2k oč4ka o2ň o3ňa o3ňo o1ř oři2s o3šk o4šku o4šky o3šl oš4lá oš4mo oš4ti oš4ťu o3žl ož4mo 1p 2p. pa4ed pa4es pa4kl pa3si pa4t. pat4ri 2p1c pe4al pede4 pe4ig pe4np peri3 pes3t3 pe4tra 3peč pi4kr pi4pl 2pk p2kl p2l 3pl. 4p3la. pl3h pl4h. 4p3li. 4plo. 2pn p2nu po1b2 po3c2 3pod podbě4h pod4nes po3dru po3drá po3h poly3 po3m2 po4mp po4ol po3p po4p. po4pm po1s2 pos4p post4r po3t2 po4t. po4tn po3uk po3uč po3už 3po3v po3z2 po4zd poč2 po3čk poč3te po3ří po4šv 2pp 4pra. pra3st pr2c pro1 prob2 pro3p pro3t4 pro3z pr2s 4prán prů3 pse4s 2p1sk p4sut 2pt p4tej p4ter p4tev pt4ri p3tu p4tá. pu4dl pu4tr pyt3l pá1 pá2c pád3l pá4nv pá4sl 2pč pé4rh 2př. pře3h pře3j pře3t4 pře3z pře3č2 při3 přih4 2pš pš4ti 2pť qu2 2r. 1ra. ra4br ra4em ra4es ra4ff ra4hl ra4hm ra4jg ra4jš 2rak ra4nh ra3si rast4r ra4vv ra4wl ra4y. ra4yo ra4ďm 4raži r1b r2bl r1c rca3 r3cha r3cho rc4ki r1d r4dla rdo2s re4ad re4au red4r re4et re3kl re3kvi re4mr re2sb res3l retis4 ret4r re4um r1ha r3hl. rh3n r1ho r3hu r1há ri4bb 1ric ric4ku ri4dg ri4dr ri4fl ri4gh ri4zm 2rk r2kl r1l 2r1m r4mio 2rn rna4vš rn4dr ro4ad ro3by rod2l ro3d4r 3rofy ro3h ro4h. ro4jb ro4kš rom3n romy4s ropát4 ro2sb ro4skv ro4sky ro3sv ro3ti ro3tl ro4tč ro3vd rově4t 3rový roz3d roz3n ro4zo roz3v ro3zá ro4čp rpa3d 2rr rr4ha rr4ho 2r1s r2st r4stu rs3tvě rs3tvý 2r1t r2th r4trá rt4sm rtu3 r2t3v rt4zu 1ru. ru3se ru3si rus3k ru3ži 3rvaní r1x 1ry. rych3 ryd2 rys3ky rys3t ry4zk ry4zn ry4í. ry4šk 2rz rz3d rz3l rád4l rá4dž 1rák rá3ri 1rář r1č 4rčitý. rč3t 3ré. 2ró 2rš rš4ní rů4m. růs3ta rů4v. 3rý. rý4zn 2s. sa4pf sa4pr sas3k s2b2 s2c s3ca s3ce. sch2 sch4l sch4n 3schop s3ci sci4e s3cí s2d 1se se4au se3h se4ig se4il sej4m se4ku 3sel se3lh 3sem ser4va se3s2 ses4k se4ss se4stra se4stru se4stř set2 se3tk se3tř se4ur se3z se3čt 2sf s3fo 3sfé s3fú 1si 3sic 3sif si4fl sig4no 3sik si3ste 3sit s2j s3ju s2k 4skac s4kak 4skam s4kok 2skon skos4 4skot sk4ra sk4ru sk4ry 4skve sk4vo s3kán s3ků 3sl. 4s3la. s4lav s3le. s4led s3lem s3len s3let s4lib s4liči 3sln 4s3lo. s2ly s3ly. s1lí s2ma s4mek s2mo 2sn s2na s3nat s2ne s3ne. sn4tl s2ná s3ná. s4níd 1so sob4l so3br so4sk so4tv sou3h sou3s souz4 so4šk s2p s4pol spro4s 1sr 2ss ss4sr 2st. 4sta. s3taj s2tan st4at 4stec s4tep st4er s4tero s4tich 2stil s4tink 4stit. 4stič st3lo 2stn 4sto. s4tona 4stou. 4str. 4stram s4trik 4strn 4strác 4stupni s2tv st4ve 3ství 4sty. s4tyl 3styš s2tá 4stá. s3tář 4stě. s4těd 3stěh s2těr s2těž s1tí 2stí. s3třej 1su su4ba su4bo suma4 su3ve s2v sy3c sych3r sy4nes sá2d 3sáh sá2kl 2s2č s3či 1sé 1sí 2sň 2sť s3ťo 1sů s2ž 2t. 1ta. ta2bl tac4tvo t2a3d 1taj ta4jf ta4jg 4talt 4tand 3taně t1ao 2tark tast4 ta3str ta4čk 2t1b 2t1c 1te 3te. te4ak te4fl te4in 4teném teob4 tep3l ters4 tes3ta te4tr te4uc te4ur te4ut 2tf 2tg 1ti ti4gr 2tih ti3kl tin4g ti4pl ti3sl tis4tr ti4tr 2titu tiz4r 4tizí tiú3 2tiž 2tk2 t4kal 4t2kan t4kat t2kl tk4la tk4li 4tkně t2ká 2tl 3tl. 4tla. t1le tles3 3tlm t3lo. t4lou tlu3 tlu4s t1ly t1lé 2tm t2ma 2tn t3ní 1to to4as to3b tob4l to3dr to4hm to4ir 2toj tol4s to4ol 4top. 4topt 4topu 2torn 2toup 2tp t3rant t4rea t4ref tre4t 4tric. trip4 t4rit t4rog t3rol tro4sk t4rou 4trouh 4troň. 4trun t4rus 4t4ruž t3ráln 4tráš 2trč t3rům t3rův 2trý 2t1s ts4ko ts2t 2t1t tt4ch tt4ri 1tu. tu4ff 1tuj tu4lk 2tup tu4r. tu3ry tu4s. tu4ť. tu3ži t2v 2tve 2t3vi t4vinn t4viš t4výc 1ty. ty4gř ty2la ty4ře ty4řh ty4řj ty4řo ty4řr ty4řú 3tá. tá4fl t2č t3či 2tčí 1té té2bl 3tém 1tě tě3d4l 2těh 2těnn 2těp 1tíc 4tíc. 4tíce 1tím 2tín 2tír 2tř t4řeb třeh3n t2řel t2řic t3řil tř4ti t1řu t2řá 3třáb tří4s 2tš t3št tš4ti 1tů 1tý. 1tým 1týř 3týš u1 2u. u2at u2b u3ba u3be u3bi u3bo ubs4t u3bu u3bá u3bí. u3bů uc4tí 2u2d u3de u3di u3do u3dru u3du u3dy u3dí ue4fa 2uf u2hl uh3lá uh3no u2in u2jm u2k u3ka. uk4aj uk4al uk4at u3ke uk3la uk3le u3ko u3ku u3ky uk4á. u3ků ul4fa ul1h ul4pí u2m u3ma u3me u3mi um4pl um4ru u3mu u3má 3umř u2n un4dl u3ne u3no u3nu u3ně u3ní u3nů un4žr u2p u3pa u3pe upe2r3 u3pi u3pln u3pu u3py u3pá u3pě u3pí u3pů u2r u3ra u3re u3ri 2u3ro u3ru u3ry. u3rá 1urč u3rů u2s us3ky us3ká us3ké us3ký us1l us2lo u3so u4ste u4sty u4sté u4stě u3stř u4stš u4stý u3su. u3sy u3sá u3sí u3sů u4tro u4trá u2v u3vi u3vu u2z u3ze u3zi uz1l u3zo u3zu u3zí u2č u3ča u3če u3či u3čo uč3t u3ču u3čá u3čí u2ď u2ň u2š u3še u3ši uš4kl u3šo uš3tí u3šu u3šá u3ší u2ž u3že u3žo u3žu u3žá u3ží 1v 2v. va3dl va4jť va4kl 2v1b 2v1c v2ch 2v2d v4dal v3di v4děk v4děč ve3dle ve3jd 3ven ve2p ve3ps vep3ř ves3l ve4sm ves4p ve3sta ve3t4ř ve2z3m vi4ch vide2 vi4dr vi4et vi4kr vi2tr 2vk v2kr v2l 2v3la. 4vle. 4vlem 2vlo 2vm 2vn v4nad vo3b vo4ic vo4ja vo4jb vo4jd vo4jj vo4jm vo4jř vo2s vo4tř vou3 vous2 v2p vr2c vr2dl 4vrny v1ro vr4st vrst3v vrs4tvě 2vs2 v1sk v3stv 2v2t vy3c vy3d2 vy4dra vyp2 vy3s2 vy4sn vys4t vy3t vy3č vyč4k vyš2 vy4š. vy4šm vy4šš vy4žl v2z2 vz4no vz4né vz4ně vz4ní vá3ri 2v2č v3čá v3čí v4čír vě4cm vě3t4a více3 ví4hat 3vín 2vň 2vří v3řín v2š2 vše3s v3ští. 3výs vý3t 3vý3z v2ž2 wa4fd 3war wa4re we2 2x. xand4 2xf xisk4 2xn 3xov x1t xt4ra xy4sm y1 y2a y2bl yb3ri y2ch y4chr y2d1l yd4lá y2dr yd4y. y2e y2gr y3hn yh4ne yj4ma yj4me y2kl yk3la y3klop yk4ly ymané4 ym4kl yna4s y3ni ype4r yp4si yp4tá y2př yr2v y2s y3sa y3se y3si ys3lu y3sm y3so y3sp ys2t ys3te yst4r y3su y3sv y3sy y3sá y3sé y3sí yt4me yu3ž y3vs yvě4t y3zb y3zd y3zk y3zn yz4ně yz4ní y3zp yz4po yč2k y2ň yř3b yřk4n yř4če y3ří y2š y3še y3ši y3šk yš1l y3šo y3šp y3šu y3ší yž2 y3žd 1z 2z. zab2l za4bs za4dk za3dl za4dn za3h za3i za3j za4jk za3k za4kt zal4k zam4n za3p2 za3s2 zat2 za3tl zat4r za4ut za3z zaz4n za4zš za4č. za3š zaš4k za4šs 2zb zban4 z2by zbys4 2z1c 2z2d z3di zdně4ní z4doba z4dobný zd4re zd4ví z2e ze3h ze3p2 4zerot ze3s2 zes4p zet2 zev2 ze3vn ze3z ze4z. 2z2f z1há z4ine z2j z3jí 2z2k z3ka. z3ky z3ké z3ků z3ký 2zl 3zl. zlhos4 zlik3 z3ly. z2m2 2zme z3mn z3my z4měn 2z2n 3znak z4nal z3ne. z3nic z3no z3nu z3ny z3né z3ně z4něl z3ní z4nít z4nív z3ný zo4tr zo4šk 2z2p z3pt z4pát 3zrak 2z1s2 2zt ztros3 z4trá z3tř 3zu. zu3mo zu3mě zu3mí zu3š z2v zva4d z3vař z3vi zvik4 zv4ně z3vod z3voj z4von zv4ro z4ván z4věs z3víj 3zy. 2zz zá1 záh2 zá4kl. 3záp zá3s2 zá3z záš2 2zč z3čl 2zň z2ř zřej3 z3řez z3řeš 2zš2 z3šk zš4ka z3št 2z2ú1 zú3č zú3ž zů3s á1b á2bl áb4ry á4bř. á3cho ác3ti3 á1d á2dl ádo4s ádos4ti ád1ř á1ha á3he áh1l á3hl. áh3n á1ho á1hr á1há á1j á4jmu áj4mů á4kli ák4ni á1la á1le á1lo á1lu á1ly á3lé á1lí á3my á3mé á1mě á3mí á3mý áne4v á1ra á1re ár2m á1ro á1ru á3rů á1s á2sc á2s3k ás4k. ás4kl ás4kn á2sla ás4ly á2sm ás4po á2st át3k át1r á1tu á1ty á1tí á3tý áv4si áv4sí áz3k áz3ni ázni4c áz4vi á2ň á1ř ář4ke ář4ků á2š á3še á3ší 2č. 1ča ča4br 2čb 2č1c 1če 3če. če1c čes3k 1či 2čk č3ka. č3ko č3ku č3ky 2č1m 2čn č2ne 1čo č2p 2čs č1sk čs4la čs4sr 2č2t č4tené. č4tený čt4la č4tový. 3čtv 4čtěn č3tí 1ču 1čá 1čí čís3l 1čů 2ď. 1ďa 1ďo ďs4te 2ď1t 3ďuj é1 é2d é3di é3do é2f é3fo éf1r é2kl é2l é2m é3ma é3me é3mi é3mo é3mu é3mů 4ére. é2s é2t é3ta é3to é3tá é2š é2ž ě1c ěd3r ě3ha ě3he ě3hl. ěh3lo ěh3n ě1ho ě3hu ě3hů ě3ja ě1je ě1jo ě3jů ě4klé ě3k2t ě1l ě1ra ěra3d ě1re ě1ro ěr3s ěrs4t ě1ru ě1ry ě1rů ěs3k ěs3n ět1a3 ět4ac ět1l ě1tr ět3ra ě4traj ět3v ě1tí ět3ří ě2v ě3va ě3ve ě3vl ě3vo ě3vu ě3vá ěv3č ě2z ě3ze ě3zi ěz3n ě3zo ě3zí ě1ř ě2š ě3še ě3ši ě3šo ě3šu ě3šá ě3ší ěš3ť ěš4ťs ě2ť ě3ťo ě2ž ě3že ě3ži ě3žo ě3žu ě3ží í1b íb3ř í3cho ích4t íd1l í1h í2hl íh3n í1j íjed4 íj4mů í2kr í1l í1má í3mé í1mě í1r í1sa í2s3k ís4kl ís4kn ís4l. ís3le ís4ln ísáh2 í1t ít3k í3t3ře íz3da íz3de íz3k í3zna í3z3ni í3zněn í2ň í1ř í2š í3še í3ši í3šo í3ší 1ň 2ň. 2ňa ňa3d 2ňk 2ňm 3ňov ň1s 2ň1t ó1 ó2z ó3za ó3zi ó3zo ó3zy 2ř. řa4pl řa4ďm 2ř2b 2řc 2řd ře3ch ře4dob ře1h ře3jd ře3kl ře3kv ře4kří řeo4r ře3p2 ře4p. ře4pk ře4pč řer4v 2řes ře3ska ře3sko ře2sp řes3po ře4sr ře3sta ře3stu ře3stá ře3stř ře3tl řet4ř ře3zd ře3zk 4řezl ře3čt ři1 řia3 ři3h ři4h. ři4hn ři4jď ři4l. ři4lb řil2n 4řine řis2 3ři4t. ři4v. ři4vk ři4vn ři3z řič4t ři3ř ři4š. 2řk ř2kl řk4la řk4li řk4ly řk4no 2ř1l 2ř1m 2řn 1řo 2řou 2ř2p 2ř1s řs4to 2ř1t ř2v 2řz řá4pl řá2sl 2ř1č 2říd ří4kř ří1s 2řš ř3št řš4ti 1š 2š. šab3 ša4vl 2š1c šej4d šep3t ši4mr 2š2k š3ka š3ke š3k3li 4š3kou 4škov 3škr šk4ro š3ku. š3ky 2šl š2la š2li š3liv š2lo šlá2 š2lé š2lý 2š1m šmi4d 2šn š2p 2š1s 2št š4tip št4ka št4kl š4těk š2těs š4těv š4típ š2v ší3d š2ň š3ší 2š2ť š3ťo š3ťu š3ťá 1ť 2ť. 3ťal 2ťk 2ťm 2ťt ťáč4k 1ú ú2c2 ú2d új4ma ú2k ú2l ú2n ú2p ú2t út4ko ú2v ú2z úz3k ú2č 3úče úře4z úš4ti ú2ž ů1b ů1c ů1hl ů3jd ů4jmový ů1le ů1my ů1mě ů1ra ůr4va ůr4vy ů1s2 ů2st ůs3te ůs3tán ůt2 ů3tkl ů2v ů3va ů3vo ů3vě ů2z ů3zo ů2ž ů3že ů3ži ů3žo ý1b ý3cho ý1d ýd4la ý1h ý1j ý1l ý1ml ý1mě ý2n ý3no ýpo3č4 ý1r ý1s2 ý2sk ý1t ýt4ku ýt4ky ý1u ý4vli ý3zk ý3zn ý4zvu ýč4ně ý1ř ýš3l 1ž 2ž. ža3d ža4tv 3žač 2ž1b 2ž1c 2ž1d že2b3 žeh3n že4ml že4zg ži4dl ži4jm 3žil ži2vl 2žk žk4ni 2žl ž4lic 3žlo 2ž1m 2žn žon2 2ž1s2 2ž1t ž2v žá4br žá4nr 2žď ží4zn 2žň 2žš žš4ti žš4tě", ["length"]=21736, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=3636, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-uk.rme0000644000175000017500000000621511761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Ukrainian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: TODO:WRITEME (yyyy-mm-dd) % Author: Maksym Polyakov , % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % Ukrainian hyphenation patterns in LCY (cp866nav) encoding. % Copyright 1998-2001 Maksym Polyakov. % Released 2001/05/10. % This file can be redistributed and/or modified % under the terms of the LaTeX Project Public License (lppl). % Please, send bug reports via e-mail: % polyama@auburn.edu % mpoliak@i.com.ua context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-gb.lua0000644000175000017500000016103512161703335024640 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="aceghimnoprstuvwy", ["data"]="uni-ver-sity uni-ver-sit-ies how-ever ma-nu-script ma-nu-scripts re-ci-pro-city through-out some-thing", ["length"]=102, ["n"]=8, }, ["metadata"]={ ["mnemonic"]="gb", ["source"]="hyph-en-gb", ["texcomment"]="% Hyphenation patterns for British English\ % \ % (more info about the licence to be added later)\ % \ % This file has been renamed from ukhyphen.tex to hyph-en-gb.tex in June 2008\ % for consistency with other files with hyphenation patterns in hyph-utf8 package.\ % No other changes made. See http://www.tug.org/tex-hyphen for more details.\ % \ % File: ukhyphen.tex\ % TeX hyphenation patterns for UK English\ % \ % Unlimited copying and redistribution of this file\ % is permitted so long as the file is not modified\ % in any way.\ %\ % Modifications may be made for private purposes (though\ % this is discouraged, as it could result in documents\ % hyphenating differently on different systems) but if\ % such modifications are re-distributed, the modified\ % file must not be capable of being confused with the\ % original. In particular, this means\ %\ %(a) the filename (the portion before the extension, if any)\ % must not match any of :\ %\ % UKHYPH UK-HYPH\ % UKHYPHEN UK-HYPHEN\ % UKHYPHENS UK-HYPHENS\ % UKHYPHENATION UK-HYPHENATION\ % UKHYPHENISATION UK-HYPHENISATION\ % UKHYPHENIZATION UK-HYPHENIZATION\ %\ % regardless of case, and\ %\ %(b) the file must contain conditions identical to these,\ % except that the modifier/distributor may, if he or she\ % wishes, augment the list of proscribed filenames.\ % \ % $Log: ukhyph.tex $\ % Revision 2.0 1996/09/10 15:04:04 ucgadkw\ % o added list of hyphenation exceptions at the end of this file.\ %\ %\ % Version 1.0a. Released 18th October 2005/PT.\ %\ % Created by Dominik Wujastyk and Graham Toal using Frank Liang's PATGEN 1.0.\ % Like the US patterns, these UK patterns correctly hyphenate about 90% of\ % the words in the input list, and produce no hyphens not in the list\ % (see TeXbook pp. 451--2).\ %\ % These patterns are based on a file of 114925 British-hyphenated words\ % generously made available to Dominik Wujastyk by Oxford University Press.\ % This list of words is copyright to the OUP and may not be redistributed.\ % The hyphenation break points in the words in the abovementioned file is\ % also copyright to the OUP.\ %\ % We are very grateful to Oxford University Press for allowing us to use\ % their list of hyphenated words to produce the following TeX hyphenation\ % patterns. This file of hyphenation patterns may be freely distributed.\ %\ % These patterns require a value of about 14000 for TeX's pattern memory size.\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyz", ["data"]=".ab4i .ab3ol .ace4 .acet3 .ach4 .ac5tiva .ad4din .ad3e .ad3o .ae5d .aer3i .af3f .af3t .ag4a .ag5n .air3 .al5im .al1k .al3le .am5ar .ama5te .am2i .am3pe .am3ph .an1 .ana3b .ana3s .and2 .an5da .an4el .an4en .an4gl .an4on. .an3s .ant3a .an3ti3 .ant4ic .an4t5o .any5 .aph5or .ap4i .ar5ab .ar5ap .ar4ci .ar5d .ar4e .ari4 .ar4ise .ar4isi .ar5sen .art5icl .as1 .as4q .as5sib .at5ar .ateli4 .at5omise .at5omiz .at3r .at3t .au3b .au3g4u .aur4e5 .aus5 .authen5 .av4 .av5era .bap5tism .barri5c .bas4i .ba5sic .be3di .be3lo .be5r4a .be5sm .bi4er .blaz5o .bo3lo .bos5om .boun4d .bov4 .bra5ch .bre2 .burn5i .ca3de .ca4gin .cam5i .cam3o .can1 .can5ta .ca5pitu .car4i .cas5ual .ca4ti .cen5so .cen5tena .cent5ri .cer4i .ch4 .cit4a .clem5e .clima5to .co5it .co3pa .cop5ro .co3ru .co3si .co5ter .cotyle5 .cri5tici .custom5 .dav5 .dea5co .de5lec .del5eg .de3li .deli5r .de1m .de5nit .de3no .der2 .de3ra .de5res .de3ri .de5scrib .de5serv .de5signe .de5sir .de5sis .de5spoi .determ5i .de3ve .de4w .di4al. .dia3s .di4at .din4a .dio5c .do2 .do4e .domest5 .du4al. .du4c .dys3 .east5 .echin5 .eco3 .ec3t .ed5em .ed4it. .ed4iti .eg4 .ei3d .ei5r .el3ev3 .el2i .elu5s .em3b .em5in .emp4 .em5py .en1 .en5c .en4ded .en3s .ent2 .en5ta .eos5 .epi1 .epi3d .er2a .er5em5 .er4i4 .er4o2 .eros4 .erot3 .er4ri .es1 .escal5 .es3p .es3t .etern5 .eth3e .eu1 .eur4 .eval3 .evol5ut .ew4 .ex1 .ex3a .eye3 .fal4le .far4i .fec5unda .fen4d .feoff5 .fi2 .fi5lia .fil5tr .fin5ess .fin3g .fi5n4it .fis4c5 .fo3c .fran5ch .fu5ga .ga4m .gam5et .gen4et .ge5neti .gen5ia .ge3ro .glor5io .gnost4 .go3no .gos3 .hab2 .ha5bili .hama5 .han4de .hast5i .he4i .hem5a .hi2 .hi3b .ho2l .ho5rol .hov3 .hy3lo .ico3s .idi2 .ig3 .ig1n .il4i .im5b .in1 .in3d .in3e2 .in2i .in3o .in3t .invest5i .ir3r .is4c .is4li .is4o .iso5m .ka5ro .ki4e .kin3e .lab4o .la4me .lam5enta .lan5i .lash4e .le4m .len5ti .le2p .lep5r .les5son .le5van .librar5 .lig3a .li3o .li4ons .li4p .loc3a .lo4gia .lo2p .loph3 .lous5i .lov5er .lub3 .lyo3 .mac5u .mal5ad5 .ma5lin .mar5ti .math5 .me5lodio .ment4 .men5ta .me5rid .me5rin .met4er .mi4e .mi3gr .min5ue .mirk4 .mis1 .mi5to .mo3bi .mo5lec .mon3a .mor5ti .mu3ni .mu3si .musi5co .myth3 .na5k .nari4 .nast4 .nas5ti .nec3t .ni4c .ni5tro .no4c .nom3o .nos3t .no5tic .nucle5 .obed5 .ob3el .ob3l .od4 .oed5 .oe5so .of5t .oi4 .ol4d .ome2 .om5el .on4ce .on4e .op2i .opt5a .or1 .or4at4 .ora5tori .or5che .or3d .ore4 .or3eo .or4i .orner4 .or2o .os1 .osi4 .oth5 .out1 .ov4 .pal5i .para5dis .par5af .para5t .pa5ta .pa4tio .pec3t4 .pecu3 .ped3e .pend4 .pen5de .pep3t .peri5n .perse5c .pe5titi .ph2 .phe5nom .phon4i .pi2e .pi3la .plast4 .plic4 .plica4 .plos4 .po3la .po5lite .po2p .pop5l .po5sitio .pos5si .pro5bat .pur4r .put4te .ra5cem .ran5gi .re3ca .ref5ere .re5gar .re1i .re5lin .re1m .re5o .res5ci .re5sen .re5spo .re5stat .re5store .re5str .re3ta .re5u .re3w .rib5a .rin4 .rit2 .rol4la .ros3a .sa2 .sac5r .sal4i .sa5lin .salt5er .sanc5 .sap5a .sa3vo .sci3e .sea3s .sect4 .sec5to .se3gr .sen3t .se1q .ser4ie .ses1 .sev5era .sh2 .si5gno .sis3 .st4 .stat4o .stra5to .string5i .su5da .sulph5a .sul3t .tact4i .tac5tic .ta4m .tamar5 .tar5o .tect4 .tel5a .tell5e .te4m .te5ra5t .ter4p .th4 .tho4 .thol4 .ti2 .til4 .ti5ni .tit4is .tor1 .tran4c .tri5bal .tri3d .trin4a .tri5sti .tro4ph .troph5o .tro4v .tular5 .turb4 .turi4 .tu5te .tu3to .ul4l .ulti5mat .un5ce .un5ch .un3d2 .under5 .un3e .un3g .uni3c .uni3o .un3k4 .un5s .un3t4 .un5u .up1 .up3l .ura4 .ur5eth .ur4o .va5led .ve2 .vec5 .ve5lo .vent5il .ver4ie .ver3n .vic5to .vi2s .vis3i .vi5so .vo1c .vo5lut .wine5s .xy3l .za5r a4a 1ab 2ab. 2aba ab5are abay4 2abb ab5ber 2abe4 ab3erd ab3err a3bet ab1ic a3bie 2abin 4abio abi5on ab3ita ab4itu ab3la abli4 4abolic ab3om ab3ota 3about ab1r 2abs. ab1ul abu4lo ab3use ab3usi 2aby ac2a ac5abl ac3al 5acanth ac5ard a5cat ach5al a5chini ach5ism achro4 ach5ur 2aci a4cic aci4ers acif4 4acit ack5a ac3li 4aco. aco3d ac5onr 4acos 4acou ac1r ac3ry act5ate act5ile ac2to act5ory ac2t5r ac5uat a5dai ada3v 4adee ad5eni ad4ha ad3ica a5dif 4adil adi4op adi4p adis4i a3diti 3adju 5admit a2do 4adoe 4adoi ad3ol a3dos ad1ow ad1r adram4 4a2du ad3ula ad3um 4ady ae5a ae4cit aeco3 4aed aed5is ae5g ae3on ae5p aerody5 ae4s ae5si aes3t aet4a aeth4 aet4or. aev3a 4af. 4afe af5ta a4fu ag4ari 4ageri a5ghe a5gia agi4as 4agino 4agl agli4 4ag1n ag3oni agor4a ag5ot a2gr ag3ri agru5 2ah a1h2a ahar2 aha5ra a1he ah4n a5hoo 2ai2 4ai. ai3a a1ic aid4a aid5er aig2 ai5gu ail3er ail3o aim5er ain5ders ai5nea a3ing. ain3i ain5o aint5er air5a air5p air3s ais1i a5ism 2a1j a4ju 2ak akel4 ak5u al5abl alact4 a1lae al5ais ala3ma al5ance al3at a5lav alc3at al3ch ald5ri 2ale a3lec aleg4 ale5ma al5ende a1leo a2let al3ibr ali4ci al5ics al1id al3if 5alig al1in a5lini alin5o al5ipe al5ipot 4alis. 4aliu 4alk alk5ie al4lab al4lag alli5an allig4 al4lish a5loe al3ogr a3lom a3loo al1or al4orim alos4 a4lou al3ous a5low al5pen al3ph al5tati al3tie alu3b al5ued al3ues a5lumnia al1va al5ver alv5u 2a1ly4 a5lyn 2a2m a5mad ama4g aman5d a5marine a3mas. am1at a5m4atic am5atu am4bin 3ambu am5elo a3men amen4d am3era am5erl am1i ami2c am5ica amic5r 3amid a3mili am5ily amini4f am5iniz aminos4 a5mis. a4mium. a3mon amor5a amort3 am5ose am2p am5peri amphi5g amp3li ampo5l am3ul amyl5 a2n an2a a5nadi an3ae an3age ana5k an3ali an3arc a5nast an4con an3d4at and5au and5eer an5del an5dif and5ist an5dit an4doni an4ea an5eer an3ell anel5li an3eu an3gan angov4 an4gur 4anh an3ic ani3f an5ifo 4anig an5ion anis5te 4anity 4aniu an5no 4anny an1o an2oe an3oma anor3 an2os an5ot an2s an3sc an4sco ans3il an4sur an2t2a ant5abl an3tal an5tam an2te 1anth an4thi 3anthr 4antic an4tie an4ting ant4iv an4tone ant4r an4tus an5tym an3ul an3um. an5ums a3nur a5nut an2y an5ya a5nyi 2ao aol3i 5aow 2ap 4ap. 4apa a1pac ap3al ap5aro ape5li a5peu aph5em aph3i aph5ol aphyl3 ap1i ap5icu ap3in ap4ine a5pir a3plan ap5li apo5str apo3th a2pr ap5ron 4aps apt5at apu5lar a5pun a4q a5qui a2r 4arabi ara5bo aract4i ara2g ar3age ar4aged ar5agi ar3ago a3raj ar3all ara3m aran4g aran5te ar5apa ar1at a3rau ara3v ar3ba arb5et ar4bid ar4bl arb3li ar4bul ar5chet arch5o ar5dina ar4done ar3en aren5d ar5ett ar3ev5 ar5gh ar3gu ar3h ar1i ar5iff ar4ill a5ri5net ar5ini a5rishi arm3er ar5mit ar3nal ar3nis ar3od ar5oid aro4mas aro4n a5roti a5rouc ar3ox arp5ers ar4pu 2arr ar2rh ar2s ars5al ar3so art5at ar2th arth4e arth3r ar5tiz 2aru ar3um ar5un4 a3ryo a5ryt ar5z as1a as4af asan2 2asc as5con as5cot as2cr as2e as3ect 4ased asep4 ash5ay ash5il as5ily as3in a5sio a3sit as5iv ask5er aski4 as4la as4lo 2aso as5och a4soned as5or as3ph ass2 assa5gi ass5ibl as4sil assit5 2asta as4tat as4tia as3tis as4tit 4asto2 as3tra as4tri as1u as4un as5ur 2a2ta 4atabi a5talis atam4 ata3p atar3a ata3s ata3t4 at3eau at3ech at5eer a5tel. ate5le at5enat at3ent 4ater at3era at5ernis at5erniz 4atess at5et 4a2th ath3a a3then ath5erin ath5ero ath5ete ath3i ath3od a5thon ath5r 4a3tia ati2c at5icis ati5cit at5iciz a2tif a4t1i4l a4tim a2t3in 4atina at5ing 4at4is. at1it atit3u atitud5i 4atiu at4ivi a5tiviz a2to 5at5od 4atog 2atol 4aton a3too a4tops a5torian a4tory atos4 a5toz 2a2tr at3ra a4tre 5at5ress at1ri atric5u at3ron at5rou at4tag 2a2tu at1ul atu4m at3ura at3urg 4a2ty 2au2 4au. aub5i 4auc au5cer auc3o aud5er audic4 aul3i aul4t aul5ted ault5er ault5i au3ma aun2 aun5chie aun3d aun4dre au5reo aur4o au5ror 4aus. aus5er aus5p aus4ted aut3ar aut3er au3th 2av av4ab ava4g av3age ava5la av5alr av5ant av5ar avas3 av3end av3ern av3ig aviol4 av1is aw5er. aw5ers aw1i aw5nie aw5y a4x ax2id 4ay ay5la ay3m ayn4 ays2 ay5si ay5sta ayth4 2az2 az3ar aze4 az5ee azyg4 azz4l 2ba. ba5bir 3back baen4 bag4a 5bah ba4i bal3a balm5i ba5lon bal5u bam4a ban4a ba5nan b4ane 5bang b4aniti b4ans ba4p1 5barb bar4d bardi4 bar4n ba5rom bar3on 5bars 1bas bas4te ba4th4 3batic ba5tio bat5on battle5 2b1b2 b4bata b3bli b4bone b1c2 bcord4 2b1d bdeac5 bde4b bdi4v b2e 4be. 3bea 4beas be3ca 3becu 2bed be3da bed5el bed2i be4do be5dra be4du 5bee 3bef be3go be5gr be3gu 1bel be3la 2bele be3lit bel4t be3m ben4d bend5a bend5er be1ne be5nig be5nu 4beo be3q 2bere berga5m berl4 5berr ber5s b5ertin be1s2 2bes. be3sl be3tr be3w 2b1f bfa4 4b1h b4ha 2bi. 1bia bi4b1 bicen5 3b2id bid5i b4ie bi4ers bif4 bi4fid. bi5ga bigu3 b1il b2ile 5biles 3b2ill 4bim bimet5 5bina 5bin4d bind3e bin5et bin5i4 1bi2o bio3l bio5m bi3ou bip4 bi5q bir4 bi3re4 bi5rus b2is 5bism bis4o bisul5 3bitua 4bity bi5ve b1j 4b5k4 2bl2 5blac blag4 b3lan 5blast bla5tu blem5at 3bler 5blesp 4blik blim3a bli3o bli2q b3lis 4bly 2b1m bment4 bmi4 4b1n bo2 4bo. 3boa bo5am 5bob bod5i bo5h 2boid 4boke bol4e 4boled bol3i bol4t 3bon bon4c bon4e bon4ie boni4f bon4sp 1boo b3orat bor3d bor5ee bor5et 3bori bor5ic bor5io bor4n bot3an 5boti boun5ti 3bour bous4 bow2 bow3s 4boxy 5boy br4 3brach 4bral bram4 b2ran bran4d 4bre. b4reas 4b2res brev5et b2rid 5brief bring5 bri4os b5rist b4roa bro4ma bros4 brum4 4bry. 4b1s2 b3sc bscon4 bsen4 bserv5an b5si bsin4 bso2 bsol3e bso3lu b4stac bstupe5 2b1t b5tlet 4bu. 5bub buf5fer b4uli b4ulos bun2 bun4a b5u5nat bunt4 bur3e bur4ri busi4e buss2 bus5si 3bust bu5tar b3ute b5utin 3butio but4iv b5ut5o b1v 4b3w 2by 4by. 3byi bys4 5byt 2ca. cab5in c4ace caco3 cad4r 5caf ca3go 5cai 5cak c1al c4ala ca5laman cal5ar 3calc ca5lef call5in cal4m ca3ly ca3ma cam4i ca5nar c2an4e c4ano ca3noe can5tar can5ted can4tic can4tr 5cao 1cap ca5pil capt4 cap3ti cap3u 1car ca3ra5c car5ame ca3ree ca3r4i3c car3if car5m car3ni car3ol car5on car5oo ca3rou car4v case5 cashi4 3cas3s cas5tig 3casu3 c1at c4at. c2atc c4atom ca3t2r c4ats cat4u 3cau caulk4i cav3il 3cay c1c4 ccent5r cces4sa c3ch cci3d4 ccip4 ccle3 4ce. 4ceab cean3 3ceas ce4ci 2ced 5ceda ce3dar 3cede 3cedi 4cef ce5g 3ceiv cel3ai cel5ib5 5cell cel5lin celo4 ce5lom 4cely 2cem ce4met 3cemi ce4mo 1cen2 5cenc cen5ci cen5ded cend5en cend5er cen3i 2cenn 3cent cent4a cen5ted cen5ter. cen5ters cen5tes 1cep cept3a cep5tic 3cera cer4bi 3cerd ce3rem 5cern 5cess cest5o ces5tr ce2t cew4 2ch 4ch. 4chab 3chae 3chai cham5per chan5gi cha3pa chec4 4ched 3chee 3chem che3ol ch1er ch4eri 5cherin ch4erl 4ches 3chete ch5eu che5va 3chew ch5ex 5chi. 3chia 3chico ch3ily ch4in. ch3inn 3chio 5chip chizz4 ch5k 5chlor 4chm 1cho cho3a 5choc 4choi ch5oid 3chor 4chored chor5ol 4choso 3chot 4choti ch5ous chow5 3chr chur4 3chut 5chyd 3chyl 3chym 1c2i2 4ci. 4ciac cia4m ci3ca 4cids 4cie. ci3er ci3est ci5et ci3f cifi4 4cig ci3ga cigar5 3cil cil5lin 2cim cim3a ci3me 5cimen 4cinab 4cind cine5a cine5mat ci5ness 4cint ci3ol ci5om ci4po cisi4 cit3r ck1 ckar5 cka5t c4ke ck5if ck4sc cl2 cla5rif 3clas c2le2 2cle. c5lec clemat4 clev3 cli1m c3ling cli2q clo4q c4lotr clue4 clyp5 5clys cn2 c3ni 1c2o2 4co. 3coa co5ba 3coc co3ci co5cu co3dic co3dif 4cody 3coe co5et co3gr 4c3oid co3inc 4col. col3a co3log 5colou co5ly co5mas co4me co3mo4 comp4 con1 con4ati con4ch cond5er con4ey con4ie con3s con3t conta5d 3coo coop4 co3or cop4e co3ph co5pl co3po cop4t 2cora cor5ded cord5er 4cored co3rel 3corn 4coro co5rol 5cort 3cos. cost3a cost5er co5ta 3co3tr 5coty cous5t cov1 co3va cow5a coz4 co5zi c1q cr2 5craf craft5i c4ran 5crani cra5niu cras3t cra4te c2re 4crean cre3at cre4p3 5creti cre4to cret5or cri3l cron4 crost4 4crou 5c4rus cry2 crym3 cryo3 4c5s4 csim5 2ct c2ta c3tac ctac5u c5ta5g ct1an ct5ant c5taria c3tato c1te c4tea c2t5ee c4tent cter4ia ct5es ct5et ct2ic c5ticia c4tics ctifi4e c3tim ct4in. ct4ina ct5ing c3tini c5tin5o c5tio c3t2is c3tit c4titu c4tity ct5ive ct4ivit ct5olo c1tom c3ton c5toris c5toriz c1tr c2tre ctro5t c1tu c2tum c1ty cub3at c4uf cu5ity cul5ab c2uli cull5er cull5in 1c2ult cu4mi 5cuna cun4e 5cuni 5cuol cu5pa cu3pi c3upl 1cur cur4er cur5ial 4cur4o 1cus cus5a c3utiv c3utr 5cuu cu5v 2cy. cy4bi 1cyc cyl3 cy4m cy5no cys4 cys5to cy4t cz2 4da. d4abr 1d2ac dach4 d5ache 3dact d1ag d4a4gi d4ale d4alg dal5ler dam5a 3dame d3ami da5mu 3dang d1an4t d3ap d3ard 5darm 3d4as2 dast5a d1at dativ4 dat4u daugh3 daun5te 3dav d3b d3c4 d1d4 d4dere d3di d3dler d3dli d3dyi 2de. deac3t de5aw de4bi deb5it 3dec de5cant de4cil de1cr 4dect ded3i defor5e de4fy. de3g de4gu de3io 5de3is de3lat deli4e del5ler del5li de5lo 1d4em 4demie 4dem4is demo4n de4mons de3mor de4mos 4demy de1n2a den4d 4dene d3enh deni4e dens5a dens5er den5tit de3od deo3l deon2 deont5 de1p depen4 deposi4 de2pu d3eq derac4 de3rai d4ere 4dered de5reg 3derer 1deri der3k 3derm der4mi der5min 5derne 3dero4 der5os der3s 5deru 4des. de3sa 5desc des4ca de5scal de3sec des4i de3sid des5igna des1p des5pon de3sq d3est. des3ti 1de1t de3tes de5th de2ti dev3il de3vis de3vit de4voi devol5u 3dex 2d5f dfol4 d2g dg4a dgel4 d4gen d3gr 4d1h dhot4 d4hu 4di. 1dia di2ad 3diar diat5om 4d1ib d1ic. dic5am di4ce di3ch d5icl dic5ol 1dict dic5tat dic4te 5dicul d5icur 1did di4ers 3di3ev d4ifo dig3al di3gam dil4 5dill dilo4 di3lu di5mer dimet4 di1mi 2d1in din4e din5gi di5nos 3di1o dio4c di4ola dip5t 3dire di3ri 4d5iro di4s1 d4isc disen3 3disia 3diss d4itas d4iter dithe4 d3ito ditor3 2dity 1diu 1di1v2 di4val di5vine dix4i d1j 2dl4 d1la 5dlef 5dlest 3dlew dlin4 d1lo d5lu 2d1m 4d1n2 1do 4do. d4ob do4c3u dog4a do4j d4ol. dol3en do5line dol5it do4lon d4ols 5dom. doman4 domin5 dom5ino dom5it do5mo don4at 4dony 3doo d2or 4dor. dor4m dort4 d4os do5sim dossi4 dot1a dot4tin 2dous d4own 3dox d1p dr2 d5rail d3ral 3dram dran4 d4ras drast4 3drel dres4 dress5o dri4e d4rif dri4g3 d4rom dropho4 drunk3 4d1s2 d5sl ds3m ds4mi d4sw dt4 dt5ho 1du 2du. du1at 3duc duch5 duci5an du4co du5eli du5ell du5en du5ett du5in dul3c d3ule dul4l dum4be dun4a d5un4c du2p du3pl 5duro d5use dust5er du3u d1v dver2 dvert3 dvoc5at 2d1w dwell3 2d2y dy4ad. dy5ar 5dy4e 5dyk dyl2 dyll3 5dymi 3dyn dys3p d3zo ea2 4eab e1act eac4te ea5cu e5add ead3er ead1i ead3li ea4g eak1 eal3a eal3er ea3log eam4bl eam3er ean5i eap2 eap5er e3app ear3a ear3er ear4li e5ar2r ear4te earth5i eas5er ea4soni e1as1s eassem4 eas4t east5i eat5eni eat3er eat5ie e3atif eatit4 eat4itu e3atri e4atu eau3 eav5i eavi4e eav5ou eaz5i e1b ebar4 eb2b ebe4 e4bel. e4bels e2ben eb5et eb2i e5bil e4bin e4bis e4bl e4bos ebot3o e2br eb1ra eb2t e4buc ebus5i ec2a ec3ade ecad5en ecal5e e5cam e4capo ec3at ec5ath e1ce ecent5o ech3i e4cib eci4f ecip5i e1cl ec3lip econ4sc econstit5 ec3ora ec5oro ec3rat ec5rean e4crem ec1ro ect5ati ec4ter ecti4c ec4tit ec4t5us ec1ul e5culi 2ed e5dans e2dat ede2 e4ded e5deh e4dele edes3t ede3te edeter5 e3dev e5dew ed4g edi4als ed5ical ed5ics ediges4 ed5igr ed3ime ed1it edi2v ediv5id ed3li edor4 e4dox ed1ro edu5cer e2dul ed3ulo e4d5ur ee4ce eed3er ee4do ee2f ee5g ee1i ee2l1i ee2m eem5er eem3i eep1 ee4pa eer4ine eesi4 ee3to e1f efact5o efal4 ef5eree ef5inite e4fite ef4l efor5est 2efu e4fug efut5a egel3 egi5a e4gib e3gla eg3le eg4mi eg5nab e5g4on e2gr e5gur e1h2 e5ho eh5s ehy2 ehyd5r eid4 5eido 4eif eig2 e5ignit e4in. e3inc e2ine e1ing ein5i e4ins. ei4p4 eir3o 4eis eis3i eit5er eith4 e2iv eiv3er e2iz e1j ejudic4 ek3en ek5is ek4l e4lac e5lad el5age elam4 el5anc elast3 e4lates el5ative elch5er eld3er 2ele elea5g 4e4led el5eni el3eno ele3o ele5ph el1er e1les e5less e4leste el3et3o elev3a ele3vi el5ex e4l3ica4 e1lie eli4ers e3lim el3ing eli3on e4li4s elit4t e3liv el4lab ell5iz e3loa e3loc elo5ca eloc3u elo4di e2log elom5ate el5op. el5ops elp5in el3so el5tie e1lu elu4m elus4 elv4 e5lyi 3elyt em3ago em3ana emar4 emarc5a em5atiz emat5ol em5bi e1me4 e4mee e4mel e3mem e4m3era em5ero emet4e em4icis e4mie e2mig emig5ra em3ina em5ing e3mio em3ism e4mita e4miu em4mae 4emnit emo3bi emod4u e2mog e4moi em3olo em5om 4emon e3moni emon5ol e2mor em5oris em3orr e4motic e5moz empa5r empara5 em5pes 4empli. em4pre em3um e5mut en3ac e4nal en3am3o en4ann e2n3ar en3as. ena5ture 3encep en4cile enct4 2end en4d5al en4dedl end5rit 4ene ene5d en3ee e5nelle e5nep e2ner e5nereo ener5v en5esi e3ness en1et en4ett e2n3eu e3new en3gi en3ic en5ier en3ig3r en5in enit5u en3k en1o en3oi eno2m en3oty enov3 en2s ens5al en3sp en4sum en4sus ent3ar en4ters en5tia en4tify en2to en4tri ent5rin ent5up en4tus 4enu en3ua en3uf en3ur en5ut 5enwa eo3b e4och e4oda eof2 eo2l eol5ar. eol5at eologi4 e5olu eo3m eon4a e3ont eop4t e1or1 eor4de eor3e eor5o eo1s2 eo4to e1pa ep4al ep5arc epa4t epend5en ep5ert e4pete epe5titio ep5ex eph1 eph4i e2pig e5pla ep3lic epol3a epol3i epolit5 ep3reh epres5e ep5rim e4p5rob5 ept3or e1p4u e3pur5 e4puta equin4 equi5no er1 era4cie era4do era4g era4l er3aph er3api er3apy 4erati. 4eratim er5atu er3bat er3be erb5os 2erc er3ch er3cl 2erd erd5ar erdi4e 2ere er3eal 4ered er3egr er5el. er5ell er5els e4reme er3en 5erend eren4e ere5ol e3req er3er ere4s er5ese er3esi er5este er5esti eres5tr eret4 er3et. er3ets er3ett ere4v er3ex ergi3v er3gl er3ia. er4ian eri4cid 5er5ick er2id er3ie er3iff er4imet er3in eri4na eri4on er3iou er4isc eri5sta 4eri2t e3riv er5iz 4erj erk4 er3me er4moi 5ernacl er5nalis ern3er ern3is ern3it 4ero. er3oid ero5is ero5st erpent5in erre5la er4rep er5sine er5ted er4ter ert5er. ert5ers er4thi ert5iz 2eru eru4b eru5d erund5 er4vil 5erwau eryth3 2erz 4es. es5am es5an e2sc es5can es5che esci5e escut5 e3sea e3sect e5see e5seg5 ese4l es5enc e3sh4a e1shi e5shu esi4an es5ic. e5sick es5iden esi5diu es5ies es3im es3in e5sion e4sit es4it. es4its e3skin e3s4mi es4od es3ola es3ol3u es3ona eso3p e1sor es3per3 es5pira es5pit es4pl esplen5 es5pot e5s2pr es4s3an essar5 ess5ee es4sil es2so esta4b est3an e5star es5tau e2sti est5ifi est5igati e3stoc es5too est4r estud4 e1su e2s3ul es4ur5 et2a et3al. et5allis et3al5o eta5me eta3p et3ari et5ary et4as et3ate et3ati et5ay et3eer etell5i etend5er et5eni eter2 et3er3a et5eria etex4 e2th1 ethyl3 2etia e3ticu eti4gi e5tim et3in eti4na e3tir et5itiv eti4u et5olo e5tomete e2ton et3ona etor3i etra5g 4e4tral etra5m et4ran et5ress et1ri et4ria etrib5a e4trim et1ro et2t et3ter etud4 et3ude e4tum et4we et5z eudio5 eue4 euk5 4eum e3urg eur5i eus4 eu5ten eu3ter eut3i ev4abi eval5e eva2p3 ev3ast ev3at ev5eli eve4n ev5erat ev5eren ever4er e4veri e4ves e1via e4viab e2vic evictu4 evid3 ev5ig ev4ile ev5ish evis5in evis5o e4viu evoc3 evol5e evol5ute evu4 e1wa e4wag e5way ew1er e3wh ew5ie ew1in ew5ish e3wit e1wr ex5ic ex4on. 1exp 4ey. ey4as eyl4 ey3s2 ez5er. ez5ers ez5ie 1f2a 2fa. fab4i fa3cet fact2 fa2c3u 2f3ag fall5in 5falo fa5lon fals5ifie 4fan3a fan5tasiz fant3i 5far far3i 5faw 4f5b 2f5d 2fe. 3feas fea3tu feb5r 3fec 2fed1 5fei fe1li fem3i femin5 fend5er f5eni 4fered fer3ee 3fero fe5roc fer5om 3ferr fer3v 2fes. fess3o fest3a fest5i fe4t fet4al fet4in fet4o 3feu fe5veri 2ff f1fe ffec4te f5fet f1fi f5fia f3fic f5fie ffil3 f2f3is ff4le ff3lin ffoc3 ffoni4 ffor3e f3fr ffranch5 4f5h fi5ance fib5u 4fic. 4fical 3fici 4fics fi5del fid3en fiel4 fier4c fight5 1fi2l 2fin fin2a fi3nal find3 fin2e f1ing 5finin fin4ni fir2m1 f3ita f5itee fl2 3fla fle2s f3lica flin4 3flo flo5ric 3flu flum4i 1fo 4fo. 3foc fo2e foeti4 fo1l4i fo4lie foment4 fo2n fon4de 3foo fo5ram for5ay for5b for4di fore3t 5form for4m3a fortu5na fo3v 1fr2 frag5a frant4 frar4 fratch4 fre4s frost5i fruc4 2f3s fs4p 2ft f1ted f4ter. ft5es fti4et ft4ine 3fu 4fu. fu4c fuel5li fug4a fu4min fun2g 4fured fur3n fu3sil fus5o fu5til 4ga. ga4cie gadi4 ga4dos 3gag 3gai 3gale ga5len gali4a gal5ler 3galo gam4bl gan5at 4ganed gang5er g5ant. gan4tr g5ants g5arc g4are gar3ee gariz4a ga5rot gar5p 5garr 1ga4s gas5i gas3o gasol5 gass5in gast3r g1at g4at. gat5iv g4ato. g4atos g4att gat5u gaud5 ga5za g1b g5d4 2ge. 5geal 3gean 2ge4d 3gedi 5gedn 4gef 1gel 4gele ge4li gel4in gel5li ge4lu 2gely gem3i 5gemo 3gen gen4du gen5it gen3o gen5ti ge4o geo3lo 4gere 3germ4 2ges. 5gess gest5at 3get get3a 2g1f 2g1g gg4a g2ge g5gedl g3ger g5gerer ggi4a5 g3gli gglu3 g5gly ggrav3 g4gro 2gh g5hai gh5eni g3ho g4hos gh2t 1g2i 4gi. gi4all gi4at 3gib gi5co gi4g gi5gan gin5gi 3gio gi4or gi4ot 5gip gi5pa g4i4s 5gis. gi2t1 5gitu giv5en. 2gl2 g3lar 5glass. glec4 3gler g4leto g4letr g4ley gli5on g5lis4 3glo 4g5lod glom3 4glop 3glu glu5te glu5ti 3glyp 2g1m4 2gn2 g1na g4nab g5nate 5gnath g5nati gna5tur gn5edl gn5ee gn3er g1ni g4nia g2n3in gn4in. g4ni2o g2no 5gnori gno4s 2go. 5goa 3goc 5god 3goe go4et go4ge 4gogram g5oid go3is go2me 5gonn go5nom 3goo goph4 4gor. 5gorg 4gors g4ory 3gos gos4t 2gou gour4i g1ous gov1 g3p 1gr2 grab4 3gram 4grame gra2p g4re gril4 grim3a g4ro gro4g g5ron grop4 3gru gru3en gru5i grum4b 2g1s gs4c gs4t g4sti gth5eni g5to g4u2a gu5ab 5guan 3guard g5uat 2gue 5gueu 5guit4 gui5ta gu2ma gu4mi 3gun g4uras g4ured gur4n gur4u 4gury gust5a 2g1w 2gy gy2b 5gym 3gyn gyn5o g5z2 ha2 4ha. h4ac hadi4e had4ine hae3o haged5 hagi3o hag5u ha5ic hais4 hak4ine hal5ant ha4m ham5an han4cro han2g h1ani4 h5aniz han4t hant3a ha4pe hap3l har1a har5b har4d har5die harge4 ha5rism har3o har4ted har4ti has4te hat5o haught5 havel4 hav5ersi hav5o h1b h1c h1d hdeac5 hdu4 he2 4he. h2ea 1head 3hear hearch4 heast5 heav5en hec3t4 he5del he3do heek4 h4ei he3is he5lat h5elin he3lio he5liu hel4li h3el3o hem1a he3men hemis4 he5mop hem4p hende5 he3or hep1 h1er. her4as her2b herb3a herb3i here3a here3o h5erett h5erh her5ial h5erine h1erl her5om h4eron h1ers h5erwa hes3tr het1 h4et3a het3i het4ted heu2 heum3 heumat5 he4v4 hev5i hex5o h1f h5h 2hi. hi4ar h1ic hi3c4an hi4cin h4icl h5ie. h1ier h4i4ers h1ies h3ifi4 h3ify hig4o hi5ka hi4l hi5ma4 hi5mer himos4 h1in hin4d h2in2e hi5nie h5iniz hi5nop h2ins hio5lo h4ior hi2p hip3l h4ir hir4r hirr5i hit4a hiv5a 4hl h3la h1le h3let h1l2i hli4a 2h1m h4manic h5mica 2h1n2 hnocen5 4ho. ho3an ho4co ho3don ho5du ho5ep hol3ar hold1 hol4is. ho5lys ho4mag hom5in h2o4n hon5em ho5neu hon3ey hong3i ho5nio hon1o 1hood hoo5r h4ope ho2p5r h4op4te hor5et h4orn horn5i ho5rog hort5h hosi4 ho4ton h2ou 3house3 4h1p 2hr hras5eo hre4 hre5ma hr5er hres4 hri4 hrill5in hrim4 h5rit h3rod hrom4i hry4 h3rym3 2h1s hsi4 h4sk ht5ag ht5ee ht3en. ht5ener ht3eni ht3ens ht5eo ht5es ht4foo h1th ht4ine hu4g hu4mat hu5mer hu4min hun4c hunk4 hun4t hur3i hu3sia huz4 h1w h4wart h2y hy2l hyl5en hy2m hyn4 hy3o hyol5i hy1pe hy3ph hyr4 hys3te hy4t 2i1a2 ia4bl iab5olis iab5oliz i2ach iac3o i2ac2r ia5cri ia5dem i5ae iaf4 i2ag4 ia3gn i5a4g5o ia3gr i3ah i5ai ialect4 i3alit ial5li 4ialn i2a3lo ia5ly i5amb ia3me ianch5 i3ant i5ape ia3ph i2ard 4iarit i3at ia5the i5atom iat4u iatur4a i3au iav4 ib3era ib1i ibio4 ibios4 ib5li 4ibo i4bon ibor4 i4bose i5bou ib1ri 4ibu ib3uta ic3ac ic5ado i4cal ic1an 2icar iccu4 4ice i5ceo 4ich ich4i ich5ing ich5ol 4icin i5cio 2ick ic4lo 2i2co ico3c ic5ola icon3o i5cop icotyle5 2i1cr i4cri i4cru i4cry ic4tedl ic4ter ict5ic 2icu icu4lu ic3um i5cun4 i5cut 2i1cy i2d id1a i5day ide4m id3enc id3era iderm5 i3dicu id3if i5dig i5dil i3dim id4ines idios4 idir4 id1is4 id4ist 2i4d1it idi4v id3li id3ol idol3a 4idomi id3ow 4idr id5ri id3ul ie2 4iec 2ieg2 ie3ga ie5i i5ell 4iem 2i1en ien2d i1er i3eres i2eri ieri4n 4iern ier2o i4ert i3esc ies3el i1es2t i3est. 2i1et i4et. iet3ie 4ieu i5euti iev3a iev3er iev3o 2i1f i2fe if4fa iff5ler if3ic. i4ficac if5ics ifi4d ifi4n 4i2fl i3fo ifoc5 if5tee i3fy 2ig i3gad ig3and 3igar i1ge i3ger ight5er. ight5ers 4igi ign5iz igno5m i3gon ig1or ig3ot i5gret i4g5ro igu5it ig1ur 2i1h ihy4 2ii i5in ija4 4iju 2ik2 ik5an ike4b i2l3a ila4g ila5tel i5later il4ax il5dr il4du i3len ilesi4 il3f il3ia. il3iar ili4arl i3lici i5lien ili4er ili4fe il4ific il1in il5ine. 4iliou il5ipp il5iq il4ite ilit5u il4mo i5lon il3ou ilth4 il2tr 4ilu il5ul i5lum il5ure il3v 4ilym ima4c im2ag im3age im1al im5am i5m2as i4mated i4matin imat5u im1i i3m2ie im4ine im5ino im5mes i2mo i5mog i3mon im5oo i3mos. impar5a imparad5 im5pie impot5 im5pr impu4 im1ul im5um in3ab 4inace in4ado in5agl in3air ina4l 4inalit in5am in3an in3ap in4ars i3nas. 4inata inator5 in3au in4aw 2inc inc4tua 2ind in5dar inde5p indes5 inde3t indeterm5 in5dro 4inea 4ined in5ee in5ega 4in5eo ine4s in3esi ine5te 4ineu inev5 infilt5 infol4 4infu 4inga in5gal 4inge ing5ha 4ingi 4ingle 4ingli 4ingo 4ingu ing3um 2ini in5ia. 4inic in4ici in3ion in4itud 4ink ink4ine 4inl 2inn 2ino 4ino. in3oi i5nole 4inos i3nos. in5ose in3osi 4inq ins2 in4sch5 inse2 insect5 insec5u in3si 5insk insolv5 in4tee int5ess in3til int5res intu5m 2inu in5ul in5um in3un in3ur invol5u 2io2 ioact4 i1od iod3i4 iod5o ioe4 io3gr 4i1ol io3ma i4omani io3mo i5ope io3ph i5opo iop4s i1or iora4m 4iore 4iorit 5ioriz 4iorl ior4n io3sc i3ose i3osi i4oso io5sta i3ot iot4a io5th iot5ic io5tr i4oty i4our. i4ours i5ox 2ip ip3al ipap4 ipar3o ipart5ite ip1at i3pend i1ph2e iphen3 i5pheri iphi4 i4phu ip3id i5pil ip3in ip4ine ipir4 ip5is ip1i4t ip4iti ip3lin ip3lo i3po i4pog i4poli i4pom ipon3 i4pow ip2pl ip3pli ip4re ip5tori ip1ul i5put ipy4 2iq i3qua 2ir ir1a ir4abi ira4c ir4ae. ir4ag ir4alin ir4alli i5raso irassi4 iray4 ird3i ire3a ir3ec ir5ee irel4 ire5li ires4 ir5ess ir1i ir2i4d ir4im ir4is. 5iriz irl5ing ir5och ir5ol ir3om ir4q ir2s ir5ta ir5tee irwo4me i4sa is5ad is3age is1al is3am is1an is3ar is5av 4isb i2s3c is5chi isci5c 4i1sec ise5cr is3ell 4is3en is2er is5ere i2s3et 4iseu is3har ish5ee 4ishio ish3op is5hor 2isia is5ic is3ie 4isim is3inc 4isis is4ke is1l islun4 2isma is1on is5oner iso5p is1p i3s2ph 5ispr 2is1s iss5ad is4sal is5san iss4iv iss4o 4ista is4tal ist5enc ist5ent is5terer 4isth is4t3ic 4istl i4s1to 4is4tom is1tr 3istry 4isty i5sul is3ur 2isy it1a it5ab ita4c 4itai it3am it4ana it4as it3at i3tect it3ee it3enc it3ent it3era 2ith itha5l ith5i i5thol ith3r ithy5 2itia iti4co it5icu it1ie it3ig 4itim it4in. it4ins 4itio. 4itione i5tiq 4i5tit it3iv it4li it5lo 4ito. it5ol 2iton it1ou 2itr it5ress i4tric 2itt it4tit itu4als it5uar 4itue it1ul it1ur it3us 2i1u2 i3um iur5e 2iva iv5anc iv1at i4ved iv5el. iv5eling iv5els i4ver. iv3eri i4vers. iver5sal ives4 iv3et i4vie iv3if i5vilit 5ivist. 5ivists iv1it i2vo ivoc3 i5vore 2i1w 2ix ix3o i5ye 1iz 4izah iz3i2 2izo iz5oi 2izz 1ja 2ja. 3jac ja2c5o jac3u jag5u jal4 ja5lo ja5pan jel5la jeo2 jeop3 4jes jeu4 jew3 2ji 3jig jil4 jill5 5jis. 3jo2 4jo. joc5o joc5u jol4e 4jr 4js ju1di jui4 ju5l ju3ni juscu4 jut3a ju1v k4abi k2a5bu kach4 k3a4g kais5 ka4l ka5lim kal4is k4an ka3o kap4 kar4i 1kas. kaur4 kav4 k1b4 k1c kcom4 k5d2 kdo4 kdol5 4ked ke5da k5ede 3kee ke4g ken4d keno4 kep5t ker5a k4ere k5erel ker4j ker5o kes4i ket5a key4wo k1f kfur4 k3ho 5kih ki2l kilo3 k1in k2in. 3kind kinema4 kin5et k3ing kin4i k2ins kir3m kir4r kis4 3kis. k1ish kit5c ki4w kk4 k5ker k2l2 k3la k5lea k3ler k3let k3li k3lo k1m kn2 k2no 1know ko5a kol4 ko5mi ko5pe k1p k5ro4 k3ru 4k1s k3sl ks2mi ks4t k1t kur5 k5v k1w 3kyl l2a 4la. 5laa lab5ar label4 5labr l4ac la2ca la5ceo la5cer la4ch la2co 5la5col lac5on la3cu la4de l5adm l4ae l4af la3ger la4gis lag3r 5lah4 la4ic. l4al 4lale 5lamandr la5melli lam4ie lam1o l5amu lan3at lan2d 3land. land3i 3lands lan4er lan3et lan5tine lan4tr la4p lapi4 lar5an lar5de 4lared l4as lat5al la4te 5latilis 5latiliz 5latini lat5us l4au 5laur lav5at l4aw 4laz l3b lbe4 l4bit l4by l1c2 l2cat lce4 lcen4 l4cere lch4e l3dar l3ded l3deh l5dera ld3est l5dew ldi2 l3die ld4ine l5di5nes ld3ish ld5li l3do 4le. 3leagu le5atio leav5er l3eb5ra le3ca le5cha lect5ica 2led le5dr leg1a l3egan 3legg le4gin leg3o le3gra lek4 4leled lel5o lelu5 lem5enc lem3is l5emiz 5lemm l3emn le2mo lem5on l5enda len5dar lend4e len4do le1ne le5nie len3o 4lentio len5u le3on leo4s le5q 2ler le5rec 5l4eria l4eric le5rig ler3om leros4 ler3ot 4les. le3sco 3les4s 1let le5tra le5tre 5le5tu5 leur5 2lev l3eva 5leve lev5ita le4wi l5exa 1ley lf5id l2fo lf3on l1g2 l4gal l4gem lgi4a l4gid l4goi l3h 4li. li4ani lias4 lib1r l1ic. 5lich li4cie 5licio l3ic3on lict4o li4cu l3ida l4idar 5lidif 3lieu l4ife l4ifo lift5er 1lig li5ger light5i 5lih 3lik 1l4il lil4i lim2b limet4e lim4p l4ina. l4inas lin4d l4ine 5lin3ea lin4er. lin4ers lin4ger ling3i 5lingt 3lingu 3linq lint5i 3liog li4ol lio3m liot4 li3ou 5liph lipt5 li1q 3lir l1is l4isk 5lisse l1it l2it. l3it5a 5liter 3lith 5litia 3litr lit4u l4iv l5ivat liv3er liv5id lkal5o lk5at lk3er. lk3ers ll2 l1la lla4ba llact4 l5las l4law l5leb l1lec l1leg l3lei l1lel lle5m l1len l3lep l3leu l3lev ll3f l1li lli5am lli4an llib4e llic4 l4licl lli5co l5lie lligat4 l2lin l5lin. l3lina l3line l5lio lli5v ll3m l1lo lloc3a lloc5u llo2q l4lov llow5er ll3p ll3s ll5t l1lu llun4 l5lya l3lyc l3lyg l3lyh l3lyi l5lym lm2 l1ma l1me l4mer lm3ing l5mip l2m3od l1n4 l3ne lneo4 2lo. 5load 5lob3a 1loc loc3al loc5ul lo4cus. 2locy l3odis 3lo3dr 1log lo5gan 4loi. lo5mi lom4m lon4al lon4e l5onel lo5ney long5in 3lonia loni4e l3onis l3oniz loom5er lop4e 5lo5pen l3opm 1lo1q l4ored lor5iat lor4ife lo5rof loros4 l4os. lo1so loss4 los5sie lot5at loth4ie lo5tu 5loup lp1at lp3er lph2 l5phe l3phin l2pho l3pie l3pit lr4 l3ri l3ro l5ru 4ls l5sam ls5an lsi4fia lsi4m ls4is l5sk ls4p l1s2t ltan3e l4tang lt5ant l5tar l1te l4tei ltern3 lth3i lti4ci ltim4a ltin4 lti3t l3t4iv lt4or l1tr ltramont5 l1tu l4tus 4lu. lu1a luch4 lu2c5o luc5ra lu4cu 4lue lu1en lu5er lu1i lu4it lum4bri lu4mo 5lump lu2m5u lunch5eo 5lune l3unta lu3ori 5lup 3lur3o lusk5 luss4 lut5an 4lut5ar 5lutioniz lu5toc lut5r lu1v lv5ate l5vet4 l4vi l4vor l3w lx4 2ly 4ly. ly1c ly4ca lyc4l lyc5os lym2 lymph5 lyp2 ly4pa lypt5o 3lyr lys5er 3lyw 3lyz lz4 4ma. m4aca mac3ad ma5chine 5machy ma4cis mact4 4mad. 4mada 4mads ma4ge 5magn 2mago4 2mah ma5ho 3ma4i 4mai. maid3 5mak mal3ap mal5ari 5male2 mal5ed mal3ef m3alg m3alis mal4is. mal3le mal4li 2mam mament4 m5ament. 1man 3m4an. man3a man5dar man3dr manic4 man4ica ma5nil m4ans mantel5 2map m3aph 1mar 5maran mar5ol ma5ron ma3roo mar5ri mar4shi mar3v ma3son massi4 mass5ing 3mas1t mas4ted mast4ic mas4tin m4at. m4aten ma3ter mater5n4 m4atit mat4iti m4atiza ma3tog mat5om ma3top m4ats 3m4att ma5ture mav4 2m1b mbat4t mb4d m5bec m5berer m4bery m4bes mb2i m2bic m5bil5 m4b3ing m4bis mb5ist mbival5 m5bler m3bli mbru4 mbu3l mbur4 m1c m5d m2e 2me. mea5g me5and me4ba me4bi 2med 4med. 3media med5icat 4medie m5ed5ies 3medit me4do m5edy me2g 5meg2a1 mega5t 4mele mel5ee mel5ler mel3on mel4t melt5er me2m 4m5eme 1men 3men. 2mena men4ag mend5er mend5o me1ne ment5or 5ments 5meog me4p m5eran 4mere mer4ia 2me2s mes5en me5si4a mes5q 3mesti4 1me2t meta3t met1e 4meted meth4i meti4c met5ici met3o met3ri m1f 4m3h 4mi. m1ic mi4cin mi3co 3micro m4ict mi3cul mi4cus m4idi mid4in mid5on mi5fi mig5a migh5ti mi2gr 4mij mi5ka m2il m3ila mil4ad 4m5ilie mil5ies 3mill mi5lo mil4t 3m2im mim5i 5min4d mind5er min4er. min4ers ming5li min5ie m4init min3ol 1m4int minth5o mi3o mi3p mirab4 mi5racu m2is. m4isc mi4se 4misem mis3ha 5missi m3ist. mis4tin m3ists mi2t m5itan 4mity 3miu 5mix 4m1l mlo5cuti mlun4 2m1m2 mman4d mmand5er m3medi mmel5li mmet4e mmig3 mmin3u mmis3 mmob3 m5moc mmor3 mmut3a 4m1n2 mnif4 m4nin mni5o mnis4 mno5l 1mo 4mo. 2moc mod1 mod5ifie mogast4 mo4go mog5ri m5oir mok4i mol3a 4molog. 4mologs 4mologu mo3ly mo1m mo4mis m4on mona4 4moned mon1g mo4no monolo4 monolog5i m4op mophil5i mop4t m3orab m3orat4 mor4ato m5ord mo5rel 3moria m5oriz mor5on 3morp 3morse mor5tal mo3sp 5most mo3sta 2m1ous m1p m3pa m4panc m4pant mpath3 mpel5li m5perer mper3i mpet5it mphal5o m4phe m4phl m2pi mp5id m5pig mp3ily mp1in m3pir mp3is m3po mpol5it mpo2t mpov5 mp3to mp5tr m3pu m5q m3r m4ry 4m1s msel5f m5si msol4 mtu4 muck4e muff4 mul1t2 m5unc mu5nio mun3is mus5co mu4se mus5ke mu3til m1v m3w 2my 5my3c my4d my3e 3myi 5myst4 3myt n1a 2na. na2c nach4 na5cious. na5ciousl nac4te nac5tiva na5culari na4d4a nadi4 nad4op n2ae. naffil4 nag4a n4agen 5na5geri na4gi n5ago 5n4a3gr 5nah 5nail na5iv nak2 4naled n5alg n4alia na3ly 1nam 3name nam4n na5nas nannot4 nan4ta nan5ted nan4to na5o 4n4ard nar5tisti n2as nas5i nas5p nas3s nas5te nat5al na5tat n4atee na3the nath4l nati4 n4ati. nat5ic n4ato. na3tom na4tos nat4r na5turi naugh5ti naus3 3naut naut3i na2v na5vel n3b4 nbarric5 nbeau4 nbe4n nbene4 nbet4 nbit4 n1c2a n4cal. ncarn5at ncel4i ncent5ri n4cept. n3cer ncer4e n4ces. n5cet n5cey n3cha nch4ie n3cho nch5olo n3chu n4cic ncid5en n4cif ncip5ie n1c2l n4cles ncoc4 nco5pat n1cr nc1t nc4tin nct4ivi nct2o n1cu ncu4lo n4cun n4curvi ncus4t 4nd n2da n3da4c n3dal n4dale n3dam nd3anc nde2 n3dea nde3ci n1ded nde4l ndeleg4 nd3enc ndepre4 n3derl nde4s ndes5cr n5dez nd4hi n1dic ndic5u ndid5a n3die nd5ily nd4ine nd3ise nd5is4i nd5ism. nd5ity nd3ler nd1li n5doc ndor4 n2dou nd5our ndrag5 ndram4 n5dron ndu4b nduct5iv n4dun nd2we n3dyi 2ne. ne3alo n3ear ne2b3u 5neck ne4cl ne2co n5ectom 2ned 3nedi ne4du4 neg3a ne3go 5negu neis4 2nele ne5lia neli4g n4ely ne2mo 4n1en n3end neo3l neon4 ne2p n1er 4nered 5nering ner5o ner4r5 ner2v nerv5in 2nes. n1esc ne3sia 1ness n1est nes3tr net3a net3ic ne4tog net1r neuma5to neut5r nev5er n4ew news3 n4eys. n3f nfo4 nform5er nfortu5 nfran3 4ng ng2a n4gae n5gee n3geri n5gero ngh4 n2gi n5gic ngio4g n5glem n3glie n5glio ng1n n1go n4gry n1gu n2gum n1h2 nhab3 nho4 nhy2 nhyd5 n1i 4ni. 3niac ni3ba n4icab ni4cen 4nicl nict5a ni4cul4 ni4dio n2ie ni4ers nif4f nift4 nif5ti ni2g night5i n3igm 3nign nik5e n2il nil4a n3im1 n4ime 5nimet n4ines nin4j 5ninn n4inu 5niol ni1ou 3nipu 5niq n4is. n4isk nis4l nis4o n5iss nis5ter. nis5ters nitch4 ni4te ni3tho n4itos ni5tra nit5res ni3tri nit4ur n2iv niv4a ni3vo nivoc4 niz5en n1j njam2 njur5i 4n2k nk5ar n5kero n3key nk5if nk5il 4n1l2 nland5 n3le nlet4 n3m nmater4 nmor5ti n1n4 nne4 nnel5li nnerv5a n3ni nni3ki nnov3 n5nyi 4no. n5obi no5bil nob4l no5blem nobser4 n5ocula no4di n4ody noe4c no4fa nois5i n5ol. no3la nol4i nom3al 1nomi no2mo 4none 3nonic 5nood nop5i nora4t nor5di nor4ia nor4is nor3ma n4oro nor4t n4os. nos4o no3sp not1a 3note n1ou n4oug 3noun 2nous nou5v nova4l nove2 nov3el novel5e n4ow now5er now3l n3p4 npil4 npla4 npoin4 npo5la npos4 npri4 n1q n4quef n1r nre4i nre3m nres5tr 4n1s ns2c n2sco ns3cot n4scu n5sec nsec4te n2ses n5seu n3sh2 n2si ns3ib n4sic n5sick n3sid n3sie ns5ifi ns3ing n3sio n3s2is nsi2t ns3iv nsolu4 n5son n4sore n4sory n3spir n3s2t nsta4 nstil4 n3su nsur4e n3swa ntab4u nt3age nt1al n4t3anc nt5and ntan5eo n4t3ant nt4ariu n5tasis nt3ast nt1at nt5ath nt3ati nt5ativ n5tau n1te n4tec n4tee. n4tees n3tel ntend5en n4teo n4ter. n3teri n5tern ntern5al nter5nat nth2 n1the nther5 nth5ine nt2i nt4ib n4tic. n5ticis n5ticiz n4tics ntic4u4 n3tid4 n1tie n4tify. n3tig nt5ilati n5till nt3ing nt5ing. nti3p n4tipar n4tis. nt3ism nt3ist n5titio nt3iz n2tj n1t2o n3tom ntoni4 n5top n1tr ntra3d nt3ral n4trant n3trat nt5ress nt3ril ntrol5ler n5trym n1tu n3tua ntub5 ntup5li n5tur n2ty n2u nu1a 5nuc 3nud nud5i nu3en nug4a nu3i nu4is 5nuk n4ulo n3ult nultim5 nu1me 5numenta 5numer 5numi 3nunc nu3tat n5utiv nu4to nu1tr n3v2 nve2 nvel3 nven4e nven5o nvers5an nvi4t nvoc5at n5w nwin4 nwom4 n2x4 2ny2 5nyc nym5it nyth4 n1z2 nzy4 2oa2 o5ace o3act oad5er oad5i o3ag oak5er o3ales oal4i oal5in o5alit oan4t oap5i oar5er oar4se oast5er oat5a oat5ee oat5er 4oba obe4l ob2i ob3ing 2obi3o ob3it o3bla ob1li 4obo ob3oc o5bol o5bot o3bra obrom4 ob5t ob3ul o3bus 2oc oc2a o4cab o3cad oc5ag o5calli o4c5ativ oc5ato 4o3ce2 o4cea ocen5o ocess4i och4e och5in o3chon ochro4n o5chu oci3ab oci4al o1cl o2cle o1cr ocre3 oct2 oc2te oc1to ocu4lu ocum4 oc5uo ocuss4 ocus5si ocut5r o1cy o5cyt ocyt5o od3al. ode4c o5deg ode4ga o5dend o3dent odes4 od3ica o4d1ie od3iga od4il od1is2 odis5ia od5it 5odiz od3li o2do od5olo od5ous o3dro od5ru o2du odu5cer o4duct. o4ducts od3ul o5dyt oe3a oe4bi oe5cu oe4d o5ee oe5ic o3elec oelli4 oelo4 oe3o4p oep5 o5eq o3er oes3t o1et o4et. oet3i oet4r 3oeu o3ev o3ex oflu4 4ofo o4ful ofun4 2o1g o2ga o3gam og5ar5 o3gas ogen1 o5gey o3gi o4gio og2na ogoni4 o4got o2gri o4gro og4sh o2gu o5gyr o1h2 o3ha ohab3 o3he oher4er o3ho4 ohy4 2oi oi4c o3ic. oi5ch o2i4d 4oide oig4 oi5ki5 oil3er oil5i oin3de o3ing oin4t5er oin4tr oi4o 4ois o3ism oi4t oit4al oith4 o1j ok4ine ok3l ok5u ola4c o4lack o5lali ol4an olan5d ol5ast olat5er ol5ch ole2c4 ol5eci ol5efi o3leo ole4on o3lep ol1er o3lest o3leu o1lia ol3ica o3lice ol5iciz ol5ick ol3ics ol5id. oli2e o3lier ol5ies. o5lif oli4f3e oli5go o5lina ol3ing oli5os ol5ip4 olis4 ol2it olle2 ollim3 ol4lope ol4lyi ol3mi o1lo 4oloc ol3oid o4lona olon5el ol1or o3los ol1ou 4ol1ub o3lumi o5lunte ol3us. oly3ph 4olyt 2om o1ma o4mab o2mac o2mal o4mane omast4 o3mat om4be ome4d ome4g omeg5a ome3li om3ena omen4t o3meri om1i o3mia omi2c omic5r om4ie. omil4 om4iny omiss4 om2it omme4 om2na omni3 o4moi omoli3 o2mo4n om5ony o4mos. omot5iv o2mou om5pil ompt5er ona4d on3ai o5nas. onast5i on5ativ 4onau on1c oncat3 on4cho 5ond5ar ond5ent on3der on3dr on5dy o2ne 4onea onec4r 4oned on1ee on5ell o3neo on3ess on1et ong3at on4gu 4onh 4o1nia on5iar 2oni4c onic5a onical4 on4id on3ies on3if o5nig o1nio onk4s 4onnes on5odi on5oi ono4mi 4o5nomic ono3s o5nota ons2 2ont ont5ane. on4ter onti5fi onton5 ont4r on4tre on5ur o5nus onvo5lu on2z 2oo oof3er oo1i ook3er ook3i oo4le ool5ie oo4m oon3i oo2p oop4ie o3opt oo4se oost5er oo2t oot3er ooz5er o1pa o4pab o5pali opa5ra opath5 o5pec opens4 op1er 3opera 4operag o1pha o4phe oph4ie o5phil op5hol o1phy ophy5la op1i op3ies op5ing o3p2it 4opl oplast4 o4poi opol3i opon4 op5ony op5ori opoun4 o2p5ov op2pl op5pli oprac4 op3ran opre4 opro4l op5rop op5so 1op1t op2ta op1u o5quial or1a or5ado ora4g o5rai or5al 4orals oram4 oran3e orator5 orb3in or4ch orch3i or4du 2ore or5ead ore5ar ore5ca ore3f ore3g or3ei oreo5l or3esc ore3sh or3ess orest5at or5este or5ett ore4v 5orex or4fr or5gn or1i 4ori. or3ia. 4orian ori4ci ori5cid orien4 or3if 5orig ori5ga ori4no 4orio. or5ion 4orios ork5a 2orm orm1i or3n4a 5ornis or3nit or3one o5roo or5ose or5oso or1ou orrel3 orres3 or4sc or4sey or4sti 2ort ort3an ort3at ort3er or5tes. or3thi or4thr or4tit ort3iz or4tor or5tra ort3re 4or1u or4un ory5p osa5i os3al osar5 o1sc os4ca os4ce o2sch o4sci osclero5s o3sec osec3u ose5g os5enc osens4 os5eo oser4 o2set os5eu o3sia osi4al osi4an os5ide o3sier os5if os1in o4sis o5ske o5son o3soph os3opo 4osp o3spec os1pi os4sa oss5ar os4sit 4osta ost5age os4tar os5tee os5ten osten5t ost5ica os3til o5stome ost3or 4osu os1ur 2ot ot3a4g o5talit ot3am ot4anic o3tap ot4atio o5ta5v o3tax o4ted oter4m ot5esta 4oth othalam5 oth5erin o5therm otherm5a o5thor o5tia o5till 5ot5iniz ot4iv o3tiva o5tivi o1t2o o5tone o4torn o4tou 4o1tr oturi4 oty3le o4u2 5ou3a oub2 ou5br ou5ca ou5co oud5i 4oue ou3et oug4 ou5ga ought5i ou5gi oul4t oult5i ou3m 2oun oun2d ound5a ound5el oun5gin oun3tr oup5li our3er ou5san 2ouse 5ousia ouss4 out5ish ouv5a ova3le o5var 4ovati ov5eling o4ver. over3b over3s ov4ete ovid5en o1vis ovis5o o2v5os ow3ag ow3an o5way owd4i owd3l ow1el owel5li ow5ha owhith4 ow1i ow5in owi5ne ows4 ow5sh ow5sl ow5y o4x ox3i oxic5ol ox5o 2oy oy5a oys4 2oz o1zo ozo5i o3zyg 4pa. pac4te pa5dou pad4r paes4 pa3gan 4pagat pag4ati pain2 4pairm pa5lan pal3in pa3lo p4als pan5ac pan1e pan3i pa4pa pa3pe pap3u pa3py 1par para5s par3l pa3roc pa3rol par5on 1p4as pass5ive pas1t pas4tin pa3ter pati4n p5ato pat4ric pa5tricia 5pau paul5e pau3p pa5vil 5paw pawk4 paw5ki 2p1b p1c4 p5d2 2pe. pearl5i pe4co pec4tu 2ped 5ped3a 3pede 3pedi ped3is 3peds pe2du p4ee pe2f 4pele pe5leo pel5v pen4at 5p4enc pend5er pen5dr pen4ic 3p4enn pens5ati pen5u pe5on 5perc percent5 4pere perem5i p4eri 5p4er3n p3eron per4os. per5tin pert5is per3v p4ery 2pes pes4s3 pes5til 3pet pet5all pet3en pe2ti pet3r pe4wa 4pex p1f p5g 2ph. 4phae pha5ged ph5al. ph2an phant5i phe4 ph5esi ph3et 3phib 4phic 1phil phi4n ph1is phi5th ph2l 1pho 4phobl 4phoned 3phor ph5oriz phos3p ph3ou 3phra 4phs 1phu phu5i 2phy. 3phyl 4pi. 3piar 4pica p5ical pi3co pi4cr pict4 p2ie p4iest pi5eti p5ifie pig3n p2il 3pile pill5in 5pilo pi3lot pim2 pin4e pin5et 3pinge p4inn 5p4ins 3pi1o pip4a pi4pe 5piq pir5ac pir4t p4is. p4isc pis2s piss5a pis5til pis4tr p2itu 2p3k2 p2l2 1pla pla5no plant5er plas5tici pla5t4o 4ple. 4pled. 3pleg 3plen 2ples 4plism 4plist plu2m plum4be plumb5er p4ly 2p1m 2pn pnos4 1po 4po. po3ca 3pod 4pof 2p5oid pois5i po5lemic po4ly1 poly3s poman5 pom4e p4o2n pon4ac pon4ce pon4i4e 3ponif pon5ta 2pony po4pa po5ple 4porato por3ea 4pored pori4f por3p 3port por5tie 3p4os pos1s2 po1te poult5e pound5er pout5er p5oxi 5poy 4p1p2 ppar3 pparat5 p4pene ppet3 pph4 ppi4c p4pled p5pler p5plet ppress5o pprob5a 1pr2 prac1 pra5d prar4 4pre. preb3 pre1d pref5ere prel5ate 3prem pre5mat pren3 pres3a pre5scin p3rese 5pressi 5prici pri4es 4pri4m pring5er pring5i 4prio p5riol pri4os pris5in priv2 4priva 4pro. pro3bo p3roc3a pro4ch pro1l pron4a proph5e propyl5 pro3r2 pros4i pros5tr pro3th 4pry 2ps2 p3sac psal5t p3sh p1si p5sin. pso3m p1st psul3i 3psyc 2pt2 pt3ab p4tad p4tan p2tar pt5arc p1ted p5tena pt5enn 5ptery p5tet pt4ic p5tie p3til p2t3in pt4ine p3tise p5tisi p5tom p4tr p1tu pub1 pu5be puc4 puch4 pudi4c pu5er puff5er pu4lar pu5lar. pu5lis p4u4m pum4o p4un pun4a 3punc pun5gi pun3i pun2t pu3pi pur5b pur3c p4us push4ie pu3tat p5u5tis pu3tr 4p1w 2p4y py3e 3pyg 3pyl pyr3e py5t 4qf qu4 5quak 4quar qua5tio 2que. 3quera 4quere 4ques. 1quet 5quina 5quir 3quito 4quitu 4ra. ra3ba 5rabe 3ra3bin r2abo ra3bol rac4a r2acu rac5ula ra5culo r2ad ra4de rad4ine rag5ou ra3gr 3raill ra5ist 4ralia ra3ly r5amn ra3mu r4andi ran5dish ran4du ra5nee ran4gen ra3nia ra3noi ran2t ran5ted 5rantel rant5in rant5o rapol5 rap5to 4rarc rare2 rar3ef rar5ia. ras2 ras3c r2ase r4ask ra3so rass5a rass5in r4as5te ra5tap ra5tat rat5eu rath4e rat3if rat4in. ra5toc 5ra5tol 4r4atom ra4tos ra5tui rat5um rat3ur rav5ai rav5eli rav3it rawn4 ra3zie r1b r2ba r4bag rb3ali rb1an rbar3 r2be rbe5c r3bel rbel5o rb3ent r4bes rb2i rbic4 rbic5u r2bin r5bine rbit1 r2bos r4bum rbu5t4 r1c2 rcant5 rca4s r4cele rcen5er rcen5tena r2ces rcha3i rch3al rch5ard rch5ate r3cheo r4cher rch4ier r4chin rch3is r3chit rcil4 rci5nog rcis2 rciz4i r2cl r4cle r5clo rcolo4 rcrit5 rcriti4 rct4 rc5ti r5dam r4d1an4 rd4an. r2dar r5de4l r3dens r4des rd5ess rd5ian r4die r5dig rd2in rd3ing rdi3o rd1is2 rd5ler rd3li r4dol rd5ous r2e 4re. rea4 r4ea. react5iv re3af re3ag re5alt re5amb re3ani re5ant re5asc reas3o r5eau 3reav r5ebrate reb5uc re3cal rec4ce re3ce reced5en re3cha reci5si r4e1c2r rec4t3r re3cu 2r4ed re1de re3dis re4dol re1dr reed5i ree3m 3reer re2fe re3fin re5gali re5gra re3gre reg3ri re3gro reg3ul rei4 re3if re1in re3is reit3 reit4i re1la re1le 4reled re3lia rel3ic re5lig reli4q rel3li r5em. rem5ac reman4d rem5ato r3emp rem5ul rena4 ren5at r4endi rene2 ren4es r4eni renic5 ren4it ren4ter re5num re3oc 3reog re5ola re3oli 3reos re1pe re4per re5ph rep5id re3pin re3ple re4pre re1q rer4a rere4 re5rea re3r2u 2res. re3scr re3sel re3sem re3ser res5ist re5sit re3spe r3esq re5stal rest5er re5stu 3retar re3ten re4t4er3 re5term re1t2o re5ton re3tra re3tre re5tri re3tu re3un reur4 re1v rev3el revi4t r1f rf4l rfu4m r1g2 r4gag rgal4 r2ge r5gee r4gene r3geo r3ger rg5li rgu5f rh2 r5hel4 rhe5ol rhos4 3r2hy 4ri. ri3am ri5ap 2r2ib ri3bo rica5tu 2rice rich5om rick4en r4icl ri5cli ri3col ri5cor ri4cra 2ricu rid4al rid4e ri5el ri3er ri2es rift5er rif5tie 5rifuga ri5gam rig5ant ri5l4a r4ile rill5er. rill5ings 4rim. ri2ma rima4g rim5an4 rim3at r4imb rimen4 4rimm 4rims rin4e r4inet ring5ie rink5er r4ino rin4s rins5i rin4t5er ri3o rio4g 5rione ri4op ri5or ri5p2a ri5pie rip5lica ri5r ris4c ris4is r2isp ris4pa ris4pe ris5ter 4risti ri3ton r5it5r r2i4v riv4al ri5vall riv5eli riv3en riv3il 5ri5zo r1j r2k r5kas rk5ati r5kell rk5eni rk1er r3ket r3key r3kier r5kiest r5kin. r5kins rks4me r1la rlat3 r1le r3l4ic r3line r5lins r4lit r1lo r3mac rma5ce r5mad r2mal r4manc r4mano r4mari r4mary rm4as r4m3ati rma5toc r5ma5tol rme2a r2mic rm4ica r5m2id rm4ie r5mig rmil5 rmin4e rm3ing r4ming. r4mite. r3moc rmol4 r1mu rmu3li r2n2 rn3ab r3nac r5nad rn5ar rn3ate rn5atin rn5edl r3nel r3ness rn5est r3net r3ney r5nia rn5ib r3nic rn3in rn4ine r1nis rn3ist rni5v rn3iz rn5n r3noc r5nog rnt4 rnuc4 r5nut 4ro. ro4be rob3le ro5br 5rocc ro3cu r2od ro3do rody4n ro1fe ro3gn 4roi ro3ic roid3 ro3la r4oled rol5ite ro3ly romant4 ro5mel ro3mit romolec5 rom4p ro3mu ron4ac 4ronal ro5nate ron5ch ron4do rong5i r5onme ro1no ron4ton roo4 1room 5root r2op 4rop. ro3pel rop4ine r4opr r5opte ror5d 4rore r4osa rosi4a ro5sol 4ross ro5stat ros4ti ros5tit ro3tat ro1te ro4ter ro3tu 5roue roul3 round5er rou5sel 4rouss r4out r4ow row3er 4rox rpass5in rp3at rpe2 r3pent rp5er. r2ph rph5e r3phol rp3ing rp5is rpol3a r2p5ou rpre4 rpret5er r3pu r1q 4r1r4 rra4h rran5gi rrap4 rre2l r4reo4 rrhe3 r3ri rric4 rricu4 rri4fy. rrin5ge rri4os rrob3 rrog5 rro4t r5ru rry5 r3ryi r3rym 2r1s2 r4sag r2sal r5salis r5saliz r2san r4sar r2se r3sea r3sec rsel4 rsell5 rs3er. rs3ers r3set r3sha r3shi r4shie r5si2a rs3ib r5sie r4sil rs3ing r3sio r4sit rs3iv rs5li rstor4 rstrat4 r3su r4sus rswear4 rt2 rt3ab rta4g rt3age r3tar r4tare rt3c r1ted r4tedl r3tel4 r5tend rt3eni r5terer r5tet r5teu r4thene rth2i rth5ing. rth3ri r1t4ic r4ticl r5tiet r5tila r5till rtil5le rt5ily r2tin r3tina rt3ing r3titi rti5tu rt3iv r2tiz rt5let rt3li r1t4o rto5l rt5rid rt5si r1tu r4tus rtwis4 ru3a r4ube rub3r ru4ce r2ud rue4l r4uf ru3in ruis5i ru2l r4ume r4umi ru4more run4cl runcu4 runcul5 run2d4 run2e ru5net run4g run4t ru2p rup5lic ru3pu rur4i rus4p rust5at rust5ee rus5tic rus4t5u ru3tal ru3ti r1v2 r4vanc r2ve rvel4i r3ven rven4e rv5er. rv5ers. r3vest r3vet r3vey rvi4t r1w 2r2y ry5er 5rygm ry4go rym4b 3ryngo 4ryngol ryp5a ry2t ryth4i r2z 2sa. 2sab s3abl 5sack sac4q s3act sac4te sad5i sad5o 5sae sa4g 3sai sain4t 5sak sa2l sa5lac 3sale sa3lie s4al4t sa3lu sa4m sa5min sam5o samp4 san3a san4ded s4an4e san5gar san5if 2sant sant5ri s3ap sap3r sar5s 3sas. sas3s sassem4 s2a1t sa2te s5ativ s5atory sat1u 1sau sau5ci saur5 savi2 sa3vou 4s3b s4bei sbe4s sby3 sc2 s1ca sca5len sca2p scar4c scav3 s1ce s4ced 4scei 4s4ces sch2 scid5 s2co scof4 s4coi 3s4cope 5scopic 5scripti 2s1cu 4scura. 4scuras 2s1d2 2se. se2a s4eam seas4 sea3w sec4a sec5an se2co secon4 2sed se4da sed4it 3seed 3sei sei3g 5sela 4sele se3lec selen5 5self 2s4eme sem2i semi5d sem4o sen5g 3sens sen5sati sen5sori sent5ee 5sentm seo5log se2p sep3a sep4si 3sept sep3ti ser4an se5rene ser4to 4servo s2es 4ses. se5sh s5esta 1set 5seum 3sev sev3en sewo4 3sex sexo2 3sey 2s1f sfact5o sfi4 sfor5e sfran5 2s1g4 s2h 4shab sh4abi sh1er sh5et shil5li sh5iness sh3io 5ship s3hon 4shu4 shys4 si4all siast5 4s1ib s3icat 3sicc 2s5icl si4cu si5cul s4id 4sid. si4de side5l sid3en sid5eri 4sids 5sid5u4a si4ers sif4 sif5f si4g 1sili sim4ply 2sin s2ine sin5et 5sing5er sin3i 5sink si5nol si3nus 1sio4 4sio. si5o5s 3sip si4pr s1is2 4sish 4sism sist3a sist3o s1it si4te sit5om 4s1iv 5siva s1j s2k2 4sk. s5kar ske2 s3ket s5key s3kier s5kiest sk5ily sk5ines 4sks sky3l 2sl4 slang5i s1lat 3slau slav5eri s2le s5lea s3let s5ley s3lit slo3c slov5 s5luc 2s1m4 s3man smas4 s3men smi3g 3smith smo4d smu5tatio s1n2 s2na 2so. 2s3od sod3o sody4 3soe 4s3oid s2ol sol3a so5lan sol4er so3lic 3solve solv5er 1so2m soma5to 3some. so5mete so3mo s2ona son5at s4one son5or s2o2p 4sor3ie 5sorio sor4it s5oriz sor3o s3ory sos4 4sose so5th 3sou sov5e so3vi spast4 spens5a 4speo 3sperm s5pero spers5a sph2 s3pha 3spher spic5ul s2pid sp5id. s5pier spil4l s2pin sp3ing spi5ni spital5 s1pl sple2 s4ply s2po 5spom spon5gi 3spons 3spoon spru5d s4py s1r sre2 sreg5 srep5u sre4s 4ss s1sa s5sam2 s1sel s5seng s3sent ssent5er ss3er. s5seri ss3ers s5seu ssev3 s3sia s1sic s1sif ss1in ss4in. s4sine ss4is. s3s2it ss4ivi ss5li ss3m s4sn s1so ssol3u ssolu4b s4sore ssor5ial ss5po s1su ss3w st2 4st. stab2 sta3bi 4stak s4tale stant5iv s3tas. 5static st3c ste2 ste5ar ste5at s4teb s4tec 4s1ted s4tedl s4tedn 4stere ster4ia s4tern. s3tero st5est s1th s4tha s4thu s3ti3a 3stick s3ticu stil5ler s4tily st3ing 5s4tir s5tiz 4stl st3ler st3li s4toe 3ston stone3 ston4ie s5torat stor5ian s4tose s2tou s4tray stre4 strep3 3struc stru5d 2st3s s1tu s4tud stu4m stur4e 4stw s4ty 1styl 4su. su5an su4b1 subt2 suct4 sud4a su3et suf3f sug3 3sui sui5c su5ing 1s2ul s4u2m sum3i sun4a su5pe su3pin supra3 sur4as sur3c s4urg sur3pl su5su su5z 2s3v svers5a sves4 svest5i sw2 5swee swell5i 4swered 2swo s2y 4sy. sy4bi sy1c sy4ce sy4chr sy4d 1syl 3syn syn5e sy5pho syr5i 2ta. 2tab ta5blem 3tabli t2abo ta3bol ta4bou t4a3ce ta5chom ta3chy ta4cid t5ade tad4i 5t2adj ta5dor tad2r tae5n taf4 tage5o ta5gog 3tagr 3tah 1tai 3tail 2tair t4ais 1tak tal2c tal5ent ta5lep t4alia t4alin tal4l3a 5tallu t2alo4 ta3ly tam5ari 5ta3met tamorph5 tan5at tand5er t4ane 5tanel tan5ie t5aniz tant5an ta4pa 1tard tar5ia. tark5i tar3n 3tarr tas3i t3asm 5tass tas4t ta3sta tast5i4c t4ateu 3tatis t4ato. tat4ou tat4r tat3ut tau3to t5awa tawn4 t4ax 4t3b 2tc2 t1ca tcas4 tch5ett tch5u 4t1d4 4te. te5cha 5techn te3cr t4ed te5d2a 4tedd 4tedo 4teei te2g 5tegic t3ego teg1r teg3u tei4 te2l 4teled tel5iz 1tell 4te3lo 3tels tem3a 4teme te5mon ten4ag 4tenar 4tene t5enm 5tenna 4teno te5nog tent4a te2o teo5l 2tep te3pe tep5i tera4c t4erag t4erato 3ter3b 5terd 2tere4 ter3eb ter5ec 5terel te3reo 3teres4 1teri ter3ia ter5id ter5if t4erin ter5iorit ter3it ter5k 5ternit ter5no 3terr 2t2es 4tes. tesi4 t3esq t3ess. t5esses tes4t test3a 5teste test5er test5in test5or tes5tu teti4 tet1r tetr5o tew3ar 3tex 2t3f t3g 2th. tha4 th5al. thal3m 4the. 4thea th5eas 4thed 1thei 3theo theo3l t4her 5therap th5erc t5herd 4thered th3ern th3ery 4thi. t5hill 3think 5th4io th4is. th5lo 2thm2 th4mi th3oli 4t5hoo 4thopt 4thores 3thot 5thoug 1th2r 2ths 5thur 5thym 3thyr thys4 4ti. 1ti2a ti3ab 2t3ib 5ti5bu t1ic t3ic. tic5as t2ici tici5ar 3ti3cin t4icity ti3col tic1u 4ticule t3id. t4ida 3tidi ti3die t5ids 3ti2en 1tif2 ti3fe 4tiff 4tific. 3tigi tigi5o 4tigm 5tigu ti4ka ti4let 5tilin t4ill til4l5ag t4ilt 1tim tim1a 5timet4 t1in 5ti5nad 4tined tin3et ting5ing 3tinn 4tins t4int tin4te tin5ted tint5er tin3ue 1tio ti3oc tiol3a ti5omo 4tionem 1tip ti5plex ti3pli ti4q ti5qua t3iris 2t1is 3tisan tis4c tish5i 3tiss tis2t 5t4iste t4istr ti5t4an tith4e tit5il t3itis 3titl ti3tra 3tiu 2t1iv tiv5all t3ive tiv3is 2tl t1la tlant4 5tleb 5tledr 3tlef 3tlem 5tlen 5tletr 5tlew t1li tlin4 4t3m tmet2 tmo4t5 2t3n2 t4nere 2to. toas4 to1b 4tocc tode5c tod4i to5do 3toe 1tog 2t3oid 5tok 4toled tol4l tolu5 to5ly tom3ac toma4n tomat5ol tom4b to4mog tom5os ton4e ton5ea 3tonn ton3s top4e to5pia to4pos t1or to5rad 4tore tor5er tori4as tor5oi tor5p tor4q 3tos. to3s4p tos4t to5str to5talis to5taliz to3tem tot5u tou4f 5tour t3ous 4tov to3war t3p tr2 tra4co 4tradd 4traist tra5q trarch4 tra5ven tra5vers trav5est 3tray 4tre. 4tred tre4mo tren4 trend5i tre5pr tres4s 4trew t5ricl 3tricu t2rie tri5fli trifu5ga 2tril tri3li tri3me t2rit 4trix t4rod tro5f 5troop tro4pha tro3sp t2rot t5roto tro1v 3troy t4ruc tru3i 2t4ry trys4 4t1s t2sc ts4h ts2i t4sil tstay4 2t1t4 tta4 t3tab t5tan t5tas t3ted t4tere t5terer t5test t3ti tti3tu ttitud4 ttitu5di t3tler t3tli t5toi t5tor t3tos tt5s t4tupe t2ty 4tu. tu1a tu4al5li tuari4 tu4bin tu5bu tu5den tud5ie tu5en 4tuf tu1i tu4is 2tum. 3tumi 4tums 3tun tun4a tu4ne tun5it tup5let tup5lic tu5rac t4uran turb3a tur4d turf5i 5turit tur4n 5tur5o 1tut 4tut4iv t1w t3wa4 t2wi twi5li t3wit t3wo twon4 4ty. ty4a 5tych ty4let tyl5i ty5mi 1typ 3type 1tyr1 2tz2 t5zia t5zie 2ua2 ua3ci u2ag ua5h u1al ua5lu uan4o uant5is uant5it uar3a uar2d uar3i uari4n uar5ters uar4t5i ua5tern uba4 ub5bly u1b2i u4bicu ub3lin ub5lo ub3ra 4uc u1c2a uccen5 u4cend u4ch u5chr uc3l u4com uco5t uc2tr uc3ub uc5ul u5cum u5dac ud1al ud4e ud5ep u4der udev4 ud4g udi4cin ud3ied u5dinis udi3o u5ditio u2do u5doi ud5on u5dor ueb4 u4ed uen4o uen4ter uer3a ues4s uest5rat ues5tri ue4t uf2 3ufa u3fl u4fo uft4 uga4c ug5lif ug2ni u4go ug3ul ug3ura uhem3 2ui2 ui3al u2ic uicent5 uid5o uil4a uild5er ui3lib uil4t uinc5u uin4s uint4 uin4ta ui5pr uis3er uis4t uisti4 uit5er ui5val5 ui3vo u2iz 4ul. u1la u4lab 4ulac ul5ard u5lat ul4bo ul3ca ul4ch 5ulche 5ulchre 4ulea u5lee u1len4 4ulenci u5lent ulet4 ul4ev ul2fa ul2i ul4ia u3line ul3ing ul5ish u5liti u5lity 4ull ul4lat ul4l5ib ul4lis ul4lit ul3m u1lo u5lom ulph3i ulph3o ulp5ing ul4po 2uls ul3sif u1lu ul1v4 u1ma um3am umar4 u5mas um4bar. um2bi umen4t u1mi u4mic u2m5if umi4fy umi5lia umin4ar u4mined u4m3ing u4mora u4mos um2p um4pa ump3er ump5li umpt4 ump5te u1mu umu4lo un1 u4n3a4 un5ab unabu4 un4ae un4as. un2ce un4dal un3ded unde4t undeter5m undi4c un4die un3do un4dus u3n2er unho5li un2i u1nic un4ie un3in un4ine uni5p uni3so un3ist uni1v un3iz unk5eri un5ket un3kn 2unn un4nag un5o un5r un3s4 un5sh un2ti until4 unu4 un3us uo3de uodent4 u5oros u3os uo5tatio u1ou 2up u1pat u1pe u5pee uper3 u1ph u5pid up3ing u4po u5pol u2pr upre4 u5quet u4r ur1a 4ura. ura4ci 4urae ura2g 4uranti uras5 urb5ing ur2c urc3a ur5den. ur5deni ur5die ur4du ur3ea ur5ee ur1er ur3ers ur1e2t ur3ett ur2f ur3fa ur1i u5ri5cu ur4ie. ur5ifie uril4 ur4ili ur5ion uri4os. url5er ur5lie url5ing ur1m4 urn3al urn3er urn5s ur1o uro4d ur5o4m ur5ot uroti4 urpen5t urph4 ur2s urs5al urs5er ur3sh urs3or ur5ta ur1te ur5tes urth2 ur3the urti4 ur1u ur4va u3sad us3ag us3al us4ap us3at 2usc us4can ush5a us5ian usil5 u4s1in usk5er us1p us4pa uss4e 4ust us3tac us5tan ust4ic us5tici ust5ig ust3il us1to4 us1tr us4tre usur4e us5uri u3tane utch4e ut5eni u5teo u4tere ut2i u3tie ut3ing u5tini u3tio ut5ism ut3ist 5u5tiz ut3le utli4 ut2o u4to5s u4t1ra uts2 ut5sm ut4tone u3tu u4tul uu4 uv2 u4va uve2 uven3 uv5eri u5vin ux2o uy4a uy5er 4va. 2v3ab 5vac va1ca va5ceo vacu1 v4ad 3vag3a va4ge 4vaged vager4 vag5r v1al. 1vale vali2 va5lie val4ise 5valu 5val4v vam4i va5mo 5vann vanta4 4vantl var4is 4vase vas5el5 v5a4so vast3a v4at. 5vatee vat4ina 4vatu 2ve. vect4 ve3g 3vei 2vel vel3at 4vele v3eler ve5line v1ell v4ella vel5ler vel3li vel5opi ven4al ven4do ve1ne ve5nia vent5o ven4tr 4venu v5en5ue 5ve3o 5verb verde5v 4v4ere4 ver5ea ver3ei v5erie ver3m4 ver4ne 5verse 4ves. 4vi. 5vialit vi4atr vi1b4 vic2 vi4ca vi5cari vice3r 5vict2 5vicu 5vider vign3 vi4l vil3i 3vili4a v5ilise v5ilize vil5lin vim4 5vime 2v1in vin4ac 3vinci vin2e 5vinit v5iniz vint4 vin5ta 3vi1o viol3 vi5om 5vi3p vire4 vi5rid vir3u 5visecti 5visio v3ism 2v5ist vi2t vit2a vi3tal vi5tel v5itie vit1r vi3tu v3ity viv5al viv5or vi5zo 1vo 2vo. vo2l vo5litio vol4ubi volv4 4von vo5rac 3vorc 4vore 3voro vo3tar 2vow vr4 v5ra4 v5ri v5ro vrot4 4vs v3ure 2vv2 v5ver v5vi 4vy 4wab wag3o wais4 w3al. wall5er w3als wan5gli wank5er war5ded ward5er ward5r war4f war4te war5thi wass4 was4t wa1te wav4ine w1b4 w4bon w5c w5die w3dr we4b w4ed 3weed 5wei weight5i weir4 wel3i weliz4 wel4izi wel4li went4 wes4 west3 w5est. w5f wh2 w5hid wi2 wid4e wi5er will5in wim2p win2e wing5er win4tr 3w4ise with5eri w3la wl1er wl1i wl4ie w1m 1wo wol4 wol5ver 3wom won2t word5i wotch4 woun4 wp5in wra4 ws5ing w5ster wt4 w5te w3to wy2 wz4 x1a x4ach x4ade x2ag x3agg xa5met x3ami xan5d xano4 x2as xas5p x3c4 xcav3 xcor5 xe4 x1ec xec3r xe5cutio xecut5o xe2d x5edl x5edn x5eg x1em x3en xen4op x3er xer4g xer3o x1h xhort4a x1i x3ia. x4ias xi4c x5ige xim3a x4ime ximet4 x3io xi4p x4it. x4its x1o x4ode x5om xo4mat xo4n x4os xotrop4 x3p xpel4 xpo5n2 xpoun4 x1s2 x1t2 x4ted xtens5o xter3i xter4m3 xtern3 x4th xti4 xtra5d xtra3v xtre4 xu4o x1ur xur4b x5us x5w xx4 xys4 xy3t y1a2 y5ac 1y2ar 3yard yas4i 4y1b yb2i yca5m y5chede ych5is y3cho y4chose yc1l yclam4 y4coli y4coll ycom4 y2cos y1d4 yda4 yder4 ydro5s y4drou y3ee yel5o y3en y1er y3est. yes5te y5ett y5f y1g ygi2 ygi5a y3gl ygo4i y1h y1i y3in yle2 ylin5de yllab5i yl3os yl5ou y1me4 y3men y5met y5mia ym5in ymot4 ym4pha yn1 ynago4 ynand5 yn5ap4 yn5ast yn4ci ynd4 yn2e yn3er yng4 yn4gol yni4c yn4y y1o2 yo3d yo4gis youn4 young5 2yp yp5al yper3 y5pere y4peri y4pero y4pet y2ph yph4e yph3i y4p1i yp1n ypo1 y4pox y2pr yp5ri yp4si yp5syf ypt3a y5pu y3rag yr3at yr3ic y5rig yr3is yr3i4t yr5olo yr4r yr4s yr5u 4y2s ys5ag ys5at y3s2c y3sh ys1ic ys3in ysi4o yso5 ys4so ys1t ys4to y3u yv4 y3w yz5er yzy4 z1a1 2za. za4bi za2i z4as za4te zd4 zeb4 ze4d zen4a z5eng zer5a z3et4 z1i zib5 5zic4 z2ie zi5m zin4c3i z3ing zing5i z4is 3zlem z3ler z3li 4zo. 5zoa zo3an 3zoo2 zo3ol zo3on zo5op zo5oti zo5p zot2 z5s 5zum 4zy. zz2 z3zar z5zas z3zie zzo3 z5zot", ["length"]=54768, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=8527, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cs.hyp0000644000175000017500000000035711761001300024657 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-cs.rme % used: a c e f h i j k l n o p r t y í ú č ř \hyphenation{ koe-fi-ci-ent koe-fi-ci-en-ty pro-jek-ční úhlo-příč-ka úhlo-příč-ky}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pl.lua0000644000175000017500000010461112161703335024660 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abcdeghijklmnoprstwyzóąłż", ["data"]="be-zach be-zami by-naj-mniej gdzie-nie-gdzie ina-czej na-dal ni-gdy ni-gdzie niech-że niech-by ow-szem pó-łach pó-łami pó-łek pod-ów-czas przy-naj-mniej skąd-inąd tró-jach tró-jami tró-jek", ["length"]=201, ["n"]=20, }, ["metadata"]={ ["mnemonic"]="pl", ["source"]="hyph-pl", ["texcomment"]="% Polish hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: plhyph.tex (1995-06-26)\ % Author: Hanna Kołodziejska, Bogusław Jackowski, Marek Ryćko\ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % This is PLHYPH.TeX - the Polish hyphenation patterns\ % version 3.0a, Wednesday, May 17th, 1995\ % to be used for the inclusion of Polish hyphenation patterns in any format,\ % not necessarily in the MeX or LaMeX ones. The patterns are exactly\ % the same as in the version 3.0 being the part of the MeX package,\ % only the surrounding of the \\pattern command is changed. The authors\ % claim the upward compatibility, i.e., the version 3.0a can also be used\ % with the MeX or LaMeX formats.\ % \ % The history of development of the Polish hyphenation patterns:\ %\ % The first version of the patterns was developed\ % by Hanna Kołodziejska (1987).\ %\ % The adaptation to the LeX format (see below) and extensive modification\ % were done by Bogusław Jackowski & Marek Ryćko (1987--1989).\ %\ % The hyphenation rules were further improved and adapted to the\ % TeX 3.x requirements by Hanna Kołodziejska (1991).\ %\ % Lone-standing version (3.0a) of patterns was prepared (under pressure\ % from LaTeX users) by Bogusław Jackowski and Marek Ryćko, following\ % Mariusz Olko's suggestions, 1995.\ % \ % The LeX format mentioned above was the first version of the adaptation\ % of TeX to the Polish language. The next version is called MeX.\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvwxyzóąćęłńśźż", ["data"]=".ćć8 .ćł8 .ćń8 .ćś8 .ćź8 .ćż8 .ć8 .ćb8 .ćc8 .ćd8 .ćf8 .ćg8 .ćh8 .ćj8 .ćk8 .ćl8 .ćm8 .ćn8 .ćp8 .ćr8 .ćs8 .ćt8 .ćv8 .ćw8 .ćwier2ć3 .ćx8 .ćz8 .łć8 .łł8 .łń8 .łś8 .łź8 .łż8 .ł8 .łb8 .łc8 .łd8 .łf8 .łg8 .łh8 .łj8 .łk8 .łl8 .łm8 .łn8 .łp8 .łr8 .łs8 .łt8 .łv8 .łw8 .łx8 .łz8 .ńć8 .ńł8 .ńń8 .ńś8 .ńź8 .ńż8 .ń8 .ńb8 .ńc8 .ńd8 .ńf8 .ńg8 .ńh8 .ńj8 .ńk8 .ńl8 .ńm8 .ńn8 .ńp8 .ńr8 .ńs8 .ńt8 .ńv8 .ńw8 .ńx8 .ńz8 .ść8 .śł8 .śń8 .śś8 .śź8 .śż8 .ś8 .śb8 .śc8 .śd8 .śf8 .śg8 .śh8 .śj8 .śk8 .śl8 .śm8 .śn8 .śp8 .śró2d5 .śródr2 .śr8 .śs8 .śt8 .śv8 .św8 .światło3w2 .śx8 .śz8 .źć8 .źł8 .źń8 .źś8 .źź8 .źż8 .ź8 .źb8 .źc8 .źdź8 .źd8 .źf8 .źg8 .źh8 .źj8 .źk8 .źl8 .źm8 .źn8 .źp8 .źr8 .źs8 .źt8 .źv8 .źw8 .źx8 .źz8 .żć8 .żł8 .żń8 .żś8 .żź8 .żż8 .ż8 .żb8 .żc8 .żd8 .żf8 .żg8 .żh8 .żj8 .żk8 .żl8 .żm8 .żn8 .żp8 .żr8 .żs8 .żt8 .żv8 .żw8 .żx8 .żz8 .a2b2s3t .a2d3 .ad4a .ad4e .ad4i .ad4o .ad4u .ad4y .ad5apt .ad5iu .ad5op .ad5or .ae3ro .aeroa2 .aeroe2 .aeroi2 .aeroo2 .aerou2 .antya2 .antye2 .antyi2 .antyo2 .antyu2 .arcy3ł2 .arcy3b2 .arcy3bz2 .arcy3k2 .arcy3m2 .arcya2 .arcye2 .arcyi2 .arcyo2 .arcyu2 .au3g2 .au3k2 .au3t2 .auto3ch2 .autoa2 .autoe2 .autoi2 .autoo2 .autotran2s3 .autou2 .bć8 .bł8 .bń8 .bś8 .bź8 .bż8 .b8 .bb8 .bc8 .bd8 .be2z3 .be3z4an .be3z4ec .be3z4ik .bezch2 .bezm2 .bezo2 .bezo2b1j .bezw2 .bezzw2 .bf8 .bg8 .bh8 .bj8 .bk8 .bl8 .bm8 .bn8 .bp8 .br8 .brz8 .bs8 .bt8 .bv8 .bw8 .bx8 .bz8 .cć8 .cł8 .cń8 .cś8 .cź8 .cż8 .c8 .cało3ś2 .cało3k2 .cb8 .cc8 .cd8 .cf8 .cg8 .ch8 .chrz8 .cienko3w2 .ciepło3kr2 .cj8 .ck8 .cl8 .cm8 .cn8 .cp8 .cr8 .cs8 .ct8 .cv8 .cw8 .cx8 .cz8 .czarno3k2 .czk8 .cztere2ch3 .czterechse2t3 .cztero3ś2 .czwó2r3 .czwó3r4ą .czwó3r4ę .czwó3r4a .czwó3r4e .czwó3r4o .dć8 .dł8 .długo3tr2 .długo3w2 .dń8 .dś8 .dź8 .dż8 .d8 .daleko3w2 .db8 .dc8 .dd8 .de2z3 .de3z4a3bil .de3z4a3wu .de3z4el .de3z4er .de3z4y .deza2 .dezo2 .df8 .dg8 .dh8 .dj8 .dk8 .dl8 .dm8 .dn8 .do3ć2 .do3ł2 .do3ś2 .do3ź2 .do3ż2 .do3b2 .do3c2 .do3d2 .do3f2 .do3g2 .do3h2 .do3k2 .do3l2 .do3m2 .do3p2 .do3r2 .do3s2 .do3t2 .do3w2 .do3z2 .do4ł3k .do4k3t .do4l3n .do4m3k .do4r3s .do4w3c .do5m4k2n .dobr2 .dobrz2 .doch2 .docz2 .dodź2 .dodż2 .dodz2 .dogrz2 .dopch2 .doprz2 .dorż2 .dorz2 .dosch2 .dosm2 .dosz2 .dotk2 .dotr2 .dp8 .dr8 .drogo3w2 .drz8 .ds8 .dt8 .dv8 .dwó2j3 .dwó3j4ą .dwó3j4ę .dwó3j4a .dwó3j4e .dwó3j4o .dw8 .dx8 .dy2s3 .dy2z3 .dy3s4e .dy3s4o .dy3s4ta .dy3s4y .dy3sz .dy3z4e .dyzu2 .dz8 .dziesięcio3ś2 .dziewięćse2t3 .dziewię2ć3 .dziewięcio3ś2 .e2k2s3 .e2m3e2s5ze2t .e2s1e2s1ma .e2s1ha .e2s1t .egoa2 .egoe2 .egoi2 .egoo2 .egou2 .eks4y .elektroa2 .elektroe2 .elektroi2 .elektroo2 .elektrou2 .fć8 .fł8 .fń8 .fś8 .fź8 .fż8 .f8 .fb8 .fc8 .fd8 .ff8 .fg8 .fh8 .fj8 .fk8 .fl8 .fm8 .fn8 .fp8 .fr8 .fs8 .ft8 .fv8 .fw8 .fx8 .fz8 .gć8 .gł8 .gń8 .gś8 .gź8 .gż8 .g8 .gb8 .gc8 .gd8 .ge2o3 .gf8 .gg8 .gh8 .gj8 .gk8 .gl8 .gm8 .gn8 .go2u3 .gp8 .gr8 .grubo3w2 .grz8 .gs8 .gt8 .gv8 .gw8 .gx8 .gz8 .hć8 .hł8 .hń8 .hś8 .hź8 .hż8 .h8 .hb8 .hc8 .hd8 .hf8 .hg8 .hh8 .hipe2r3 .hipe3r4o .hipera2 .hipere2 .hj8 .hk8 .hl8 .hm8 .hn8 .hp8 .hr8 .hs8 .ht8 .hv8 .hw8 .hx8 .hz8 .i2n3 .i2s3l .i3n4ic .i3n4o .i3n4u .i4n5o2k .in4f3lan .ino3w2 .izoa2 .izoe2 .izoi2 .izoo2 .izou2 .jć8 .jł8 .jń8 .jś8 .jź8 .jż8 .j8 .jadło3w2 .jb8 .jc8 .jd8 .jf8 .jg8 .jh8 .jj8 .jk8 .jl8 .jm8 .jn8 .jp8 .jr8 .js8 .jt8 .jv8 .jw8 .jx8 .jz8 .kć8 .kł8 .kń8 .kś8 .kź8 .kż8 .k8 .kb8 .kc8 .kd8 .kf8 .kg8 .kh8 .kilkuse2t3 .kilkuseto2 .kj8 .kk8 .kl8 .km8 .kn8 .koło3w2 .kon2t2r3 .kon3tr4a .kon3tr4e .kon3tr4o3l .kon3tr4o3w .kon3tr4y .kon4tr5a2gi .kon4tr5a2se .kon4tr5a2sy .kon4tr5a2ta .kon4tr5adm .kon4tr5akc .kon4tr5alt .kon4tr5arg .kontro2 .kontru2 .kp8 .krótko3tr2 .krótko3w2 .kr8 .kro2ć3 .krz8 .ks8 .kt8 .kv8 .kw8 .kx8 .kz8 .lć8 .lł8 .lń8 .lś8 .lź8 .lż8 .l8 .lb8 .lc8 .ld8 .lf8 .lg8 .lh8 .lj8 .lk8 .ll8 .lm8 .ln8 .lp8 .lr8 .ls8 .lt8 .ludo3w2 .lv8 .lw8 .lx8 .lz8 .mć8 .mł8 .mń8 .mś8 .mź8 .mż8 .m8 .mb8 .mc8 .md8 .mf8 .mg8 .mh8 .mili3amp .mj8 .mk8 .ml8 .mm8 .mn8 .możno3w2 .mp8 .mr8 .ms8 .mt8 .mv8 .mw8 .mx8 .mz8 .nć8 .nł8 .nń8 .nś8 .nź8 .nż8 .n8 .na2d2 .na2j .na3ć2 .na3ł2 .na3ś2 .na3ź2 .na3ż2 .na3b2 .na3c2 .na3dą .na3dę .na3dź2 .na3d4łub .na3d4ir .na3d4much .na3d4ręcz .na3d4r2w .na3d4repcz .na3d4rept .na3d4ruk .na3d4rz .na3d4worn .na3daj .na3de .na3do .na3dy .na3dzi .na3f2 .na3g2 .na3h2 .na3ją .na3ję .na3jazd .na3je .na3k2 .na3l2 .na3m2 .na3p2 .na3r2 .na3s2 .na3t2 .na3u2 .na3w2 .na3z2 .na4d3o2b2ł .na4d3o2bojcz .na4d3o2bowi .na4d3o2brot .na4d3o2drz .na4d3o2kien .na4d3olbrz .na4d5rzą .na4d5rzę .na4d5rzecz .na4d5rzy .na4d5ziem .na4f3c .na4f3t .na4j3e2f .na4j3e2g .na4j3e2k2s .na4j3e2ko .na4j3e2n .na4j3e2r .na4j3e2s .na4j3e2w .na4j3emf .na4j3eu .na4r3c .na4r3d .na4r3k .na4r3r .na4r3t .nabrz2 .nach2 .nacz2 .nadśrod5ziem .nad3ć2 .nad3ł2 .nad3ś2 .nad3b2 .nad3c2 .nad3d2 .nad3e2tat .nad3f2 .nad3g2 .nad3h2 .nad3i2 .nad3j2 .nad3k2 .nad3l2 .nad3m2 .nad3n2 .nad3p2 .nad3r2 .nad3s2 .nad3t2 .nad3u2 .nad3w2 .nad5ż2 .nad5zó .nad5z2mys .nad5zo .nad5zwycz .nadch2 .nadcz2 .naddź2 .nade3ć2 .nade3ł2 .nade3ś2 .nade3ź2 .nade3ż2 .nade3b2 .nade3c2 .nade3d2 .nade3f2 .nade3g2 .nade3h2 .nade3k2 .nade3l2 .nade3m2 .nade3p2 .nade3r2 .nade3s2 .nade3t2 .nade3w2 .nade3z2 .nade4p3c .nade4p3n .nade4p3t .nadech2 .nadecz2 .nadedź2 .nadedż2 .nadedz2 .naderż2 .naderz2 .nadesz2 .nadsz2 .nadtr2 .nadz2 .nagrz2 .naj3ć2 .naj3ł2 .naj3ś2 .naj3ź2 .naj3ż2 .naj3akt .naj3au .naj3b2 .naj3c2 .naj3d2 .naj3f2 .naj3g2 .naj3h2 .naj3i2 .naj3k2 .naj3l2 .naj3m2 .naj3o2 .naj3o2ć2 .naj3o2ł2 .naj3o2ś2 .naj3o2ź2 .naj3o2ż2 .naj3o2b2 .naj3o2c2 .naj3o2d2 .naj3o2f2 .naj3o2g2 .naj3o2h2 .naj3o2k2 .naj3o2l2 .naj3o2m2 .naj3o2p2 .naj3o2r2 .naj3o2s2 .naj3o2t2 .naj3o2w2 .naj3o2z2 .naj3p2 .naj3r2 .naj3ro2z3 .naj3s2 .naj3t2 .naj3u2 .naj3w2 .naj3z2 .najbe2z3 .najbezw2 .najch2 .najcz2 .najdź2 .najdż2 .najdo3ć2 .najdo3ł2 .najdo3ś2 .najdo3ź2 .najdo3ż2 .najdo3b2 .najdo3c2 .najdo3d2 .najdo3f2 .najdo3g2 .najdo3h2 .najdo3k2 .najdo3l2 .najdo3m2 .najdo3p2 .najdo3r2 .najdo3s2 .najdo3t2 .najdo3w2 .najdo3z2 .najdoch2 .najdocz2 .najdodź2 .najdodż2 .najdodz2 .najdorz2 .najdosz2 .najdotk2 .najdz2 .najkr2 .najob3ć2 .najob3ł2 .najob3ś2 .najob3ź2 .najob3ż2 .najob3c2 .najob3d2 .najob3f2 .najob3g2 .najob3h2 .najob3j2 .najob3k2 .najob3l2 .najob3m2 .najob3n2 .najob3p2 .najob3s2 .najob3t2 .najob3w2 .najobch2 .najobcz2 .najobdź2 .najobdż2 .najobdz2 .najobrz2 .najobsz2 .najoch2 .najocz2 .najodź2 .najod3ć2 .najod3ś2 .najod3c2 .najod3d2 .najod3f2 .najod3g2 .najod3h2 .najod3j2 .najod3k2 .najod3l2 .najod3m2 .najod3n2 .najod3p2 .najod3s2 .najod3t2 .najod3w2 .najod5ż2 .najodch2 .najodcz2 .najoddź2 .najoddż2 .najoddz2 .najodsz2 .najodz2 .najorz2 .najosz2 .najro3z4u .najrz2 .najsm2 .najsz2 .najtk2 .najtr2 .najucz2 .najzw2 .nakr2 .napo2d2 .napo3ć2 .napo3ł2 .napo3ś2 .napo3ź2 .napo3ż2 .napo3b2 .napo3c2 .napo3f2 .napo3g2 .napo3h2 .napo3k2 .napo3l2 .napo3m2 .napo3p2 .napo3r2 .napo3s2 .napo3t2 .napo3w2 .napo3z2 .napo4m3p .napoch2 .napocz2 .napodź2 .napodż2 .napod3d .napomk2 .naporz2 .naposz2 .naprz2 .narż2 .naro2z3 .narz2 .nasm2 .nasz2 .natch2 .natk2 .naz3m2 .nazw2 .nb8 .nc8 .nd8 .ne2o3 .nf8 .ng8 .nh8 .nie3ć2 .nie3ł2 .nie3ś2 .nie3ź2 .nie3ż2 .nie3b2 .nie3c2 .nie3d2 .nie3f2 .nie3g2 .nie3h2 .nie3k2 .nie3l2 .nie3m2 .nie3p2 .nie3r2 .nie3s2 .nie3t2 .nie3u2 .nie3w2 .nie3z2 .nie4c3c .nie4c3k .nie4dź3 .nie4m3c .nie4m3k .niech2 .niecz2 .niedż2 .niedo3ć2 .niedo3ł2 .niedo3ś2 .niedo3ź2 .niedo3ż2 .niedo3b2 .niedo3c2 .niedo3d2 .niedo3f2 .niedo3g2 .niedo3h2 .niedo3k2 .niedo3l2 .niedo3m2 .niedo3p2 .niedo3r2 .niedo3s2 .niedo3t2 .niedo3w2 .niedo3z2 .niedobrz2 .niedoch2 .niedocz2 .niedodź2 .niedodż2 .niedodz2 .niedokr2 .niedomk2 .niedopch2 .niedorz2 .niedosz2 .niedotk2 .niedz2 .nieoć2 .nieoł2 .nieoś2 .nieoź2 .nieoż2 .nieo2 .nieob2 .nieob3ć2 .nieob3ś2 .nieob3ź2 .nieob3ż2 .nieob3c2 .nieob3d2 .nieob3f2 .nieob3g2 .nieob3h2 .nieob3j2 .nieob3k2 .nieob3m2 .nieob3p2 .nieob3s2 .nieob3w2 .nieobch2 .nieobcz2 .nieobdź2 .nieobdż2 .nieobdz2 .nieobsz2 .nieoc2 .nieoch2 .nieocz2 .nieodź2 .nieod2 .nieod3ć2 .nieod3ł2 .nieod3ś2 .nieod3c2 .nieod3d2 .nieod3f2 .nieod3g2 .nieod3h2 .nieod3j2 .nieod3k2 .nieod3l2 .nieod3n2 .nieod3p2 .nieod3s2 .nieod3t2 .nieod3wr .nieod5ż2 .nieodch2 .nieodcz2 .nieoddź2 .nieoddż2 .nieoddz2 .nieodsz2 .nieodw2 .nieodz2 .nieof2 .nieog2 .nieoh2 .nieok2 .nieol2 .nieom2 .nieop2 .nieor2 .nieorz2 .nieos2 .nieosz2 .nieot2 .nieow2 .nieoz2 .niepo2d2 .niepo3ć2 .niepo3ł2 .niepo3ś2 .niepo3ź2 .niepo3ż2 .niepo3b2 .niepo3c2 .niepo3dź2 .niepo3d4łu .niepo3d4much .niepo3d4ręcz .niepo3d4raż .niepo3d4rap .niepo3d4repcz .niepo3d4rept .niepo3d4waj .niepo3d4woj .niepo3do .niepo3du .niepo3dz2 .niepo3f2 .niepo3g2 .niepo3h2 .niepo3k2 .niepo3l2 .niepo3m2 .niepo3p2 .niepo3r2 .niepo3s2 .niepo3t2 .niepo3w2 .niepo3z2 .niepo4d3o2choc .niepo4d3o2strz .niepoch2 .niepocz2 .niepod3ć2 .niepod3ł2 .niepod3ś2 .niepod3b2 .niepod3c2 .niepod3d2 .niepod3f2 .niepod3g2 .niepod3h2 .niepod3j2 .niepod3k2 .niepod3l2 .niepod3m2 .niepod3n2 .niepod3p2 .niepod3r2 .niepod3s2 .niepod3t2 .niepod3w2 .niepod5ż .niepodch2 .niepodcz2 .niepoddź2 .niepoddż2 .niepodsm2 .niepodsz2 .nieporz2 .nieposm2 .nieposz2 .nieprzełk2 .nieprze2d2 .nieprze3ć2 .nieprze3ł2 .nieprze3ś2 .nieprze3ź2 .nieprze3ż2 .nieprze3b2 .nieprze3brz2 .nieprze3c2 .nieprze3dź2 .nieprze3d4łuż .nieprze3d4much .nieprze3d4ramat .nieprze3d4ruk .nieprze3d4ryl .nieprze3d4rz2 .nieprze3d4um .nieprze3dy .nieprze3dz2 .nieprze3e2k2s3 .nieprze3f2 .nieprze3g2 .nieprze3h2 .nieprze3k2 .nieprze3l2 .nieprze3m2 .nieprze3n2 .nieprze3p2 .nieprze3r2 .nieprze3s2 .nieprze3t2 .nieprze3w2 .nieprze3z2 .nieprze4d5łużyc .nieprze4d5ż2 .nieprze4d5z2a .nieprze4d5zg2 .nieprze4d5zim .nieprze4d5zj .nieprze4d5zl .nieprze4d5zw2r .nieprze4d5zwoj .nieprzech2 .nieprzecz2 .nieprzed3ć2 .nieprzed3ł2 .nieprzed3ś2 .nieprzed3c2 .nieprzed3d2 .nieprzed3f2 .nieprzed3g2 .nieprzed3h2 .nieprzed3i2 .nieprzed3j2 .nieprzed3k2 .nieprzed3l2 .nieprzed3m2 .nieprzed3n2 .nieprzed3p2 .nieprzed3r2 .nieprzed3s2 .nieprzed3sz2 .nieprzed3t2 .nieprzed3u2 .nieprzed3w2 .nieprzedch2 .nieprzedcz2 .nieprzeddź2 .nieprzeddż2 .nieprzeddz2 .nieprzegrz2 .nieprzekl2 .nieprzekr2 .nieprzepch2 .nieprzerż2 .nieprzerz2 .nieprzesch2 .nieprzesm2 .nieprzesz2 .nieprzetk2 .nieprzetr2 .niero2z3 .niero3z4e .niero3z4u .nierozś2 .nierozbrz2 .nieroze3r2 .nierozm2 .nieroztr2 .nierz2 .niesu2b3 .niesu3b4ie .niesz2 .nietk2 .nietr2 .nieucz2 .nieuw2 .niewy3ć2 .niewy3ł2 .niewy3ś2 .niewy3ź2 .niewy3ż2 .niewy3b2 .niewy3c2 .niewy3d2 .niewy3f2 .niewy3g2 .niewy3h2 .niewy3k2 .niewy3l2 .niewy3m2 .niewy3p2 .niewy3r2 .niewy3s2 .niewy3t2 .niewy3w2 .niewy3z2 .niewybrz2 .niewych2 .niewycz2 .niewydź2 .niewydż2 .niewydz2 .niewyrz2 .niewysz2 .niewytk2 .niewytr2 .niezw2 .nj8 .nk8 .nl8 .nm8 .nn8 .np8 .nr8 .ns8 .nt8 .nv8 .nw8 .nx8 .nz8 .oć2 .oś2 .ośmio3ś2 .oź2 .oż2 .o2b2 .o2d2 .o2t3chł .o3b4łą .o3b4łę .o3b4łoc .o3b4luzg .o3b4rać .o3b4raso .o3b4roń .o3b4ron .o3b4ryź .o3b4ryz .o3b4rz2 .o3be .o3bi .o3d4iu .o3d4ręt .o3d4rap .o3d4robin .o3d4rut .o3d4rwi .o3d4rzeć .o3d4rzw .o3d6zia .o3d6zie .o3de .o3l2śn .o4b5łocz .o4b5rzą .o4b5rzęd .o4b5rzez .o4b5rzuc .o4b5rzut .o4b5rzyn .o4d7ziar .o4d7ziem .oa3z .ob3ć2 .ob3ł2 .ob3ś2 .ob3ź2 .ob3ż2 .ob3c2 .ob3d2 .ob3f2 .ob3g2 .ob3h2 .ob3j2 .ob3k2 .ob3l2 .ob3m2 .ob3n2 .ob3o2strz .ob3p2 .ob3r .ob3s2 .ob3t2 .ob3u2m2 .ob3w2 .obch2 .obcz2 .obdź2 .obdż2 .obdz2 .obe3ć2 .obe3ł2 .obe3ś2 .obe3ź2 .obe3ż2 .obe3b2 .obe3c2 .obe3d2 .obe3f2 .obe3g2 .obe3h2 .obe3k2 .obe3l2 .obe3m2 .obe3p2 .obe3r2 .obe3r3t .obe3s2 .obe3t2 .obe3w2 .obe3z2 .obe4c3n .obe4z3w .obech2 .obecz2 .obedź2 .obedż2 .obedz2 .oberż2 .ober3m .oberz2 .obesch2 .obesz2 .obetk2 .obi3b2 .obsz2 .oc2 .och2 .ochrz2 .ocz2 .odź2 .od3ć2 .od3ś2 .od3au .od3b2 .od3c2 .od3d2 .od3f2 .od3g2 .od3h2 .od3i2 .od3i2zo .od3j2 .od3k2 .od3l2 .od3m2 .od3n2 .od3o2s .od3p2 .od3r2 .od3s2 .od3t2 .od3u2cz .od3u2m2 .od3w2 .od5ż2 .od5z2 .odbe2z3 .odch2 .odcz2 .oddź2 .oddż2 .oddz2 .ode3ć2 .ode3ł2 .ode3ś2 .ode3ź2 .ode3ż2 .ode3b2 .ode3c2 .ode3d2 .ode3f2 .ode3g2 .ode3h2 .ode3k2 .ode3l2 .ode3m2 .ode3mk2 .ode3p2 .ode3r2 .ode3s2 .ode3t2 .ode3w2 .ode3z2 .odech2 .odecz2 .odedź2 .odedż2 .odedz2 .odepch2 .oderż2 .oderz2 .odesz2 .odetch2 .odetk2 .odkrz2 .odrz2 .odsz2 .of2 .ogólno3k2 .og2 .ognio3tr2 .oh2 .ok2 .oka3m2 .okr2 .ole2o3 .om2 .op2 .opch2 .or2ż2 .or2tę .or2z2 .os2 .osie2m3 .osiemse2t3 .osz2 .ot2 .ow2 .oz2 .pć8 .pł8 .płasko3w2 .pń8 .półk2 .półkr2 .półm2 .póło2 .półob3r .półom2d .półprzy3m2k .pó2ł3 .pó3ł4ą .pó3ł4ę .pó3ł4ecz .pó3ł4y .pś8 .pź8 .pż8 .p8 .pb8 .pc8 .pch8 .pd8 .pełno3kr2 .pe2r3 .pe3c2k .pe3r4e .pe3r4i .pe3r4o .pe3r4u .pe3r4y .pe4r5i2n .pee2se2l .pepee2r .pepee2s .peze2t1pee2r .pf8 .pg8 .ph8 .pięćse2t3 .pię2ć3 .pięcio3ś2 .pierwo3w2 .piono3w2 .pj8 .pk8 .pl8 .pm8 .pn8 .połk2 .po2d2 .po3ć2 .po3ł2 .po3ś2 .po3ź2 .po3ż2 .po3b2 .po3c2 .po3dą .po3dę .po3dź2 .po3d4łu .po3d4much .po3d4naw .po3d4ręcz .po3d4rętw .po3d4róż .po3d4r2wi .po3d4raż .po3d4rap .po3d4repcz .po3d4rept .po3d4roż .po3d4robó .po3d4roba .po3d4robo .po3d4roby .po3d4rocz .po3d4ruzg .po3d4ryg .po3d4rze .po3d4wójn .po3d4wór .po3d4waj .po3d4woi .po3d4woj .po3d4worz .po3da .po3de .po3dej .po3diu .po3do .po3du .po3dy .po3dz2 .po3e2k2s3 .po3f2 .po3g2 .po3h2 .po3k2 .po3l2 .po3m2 .po3p2 .po3rż .po3r2 .po3s2 .po3t2 .po3w2 .po3z2 .po4ń3c .po4cz3d .po4cz3t .po4d3ów .po4d3e4k2s3 .po4d3o2bóz .po4d3o2biad .po4d3o2bojcz .po4d3o2braz .po4d3o2choc .po4d3o2dm .po4d3o2f .po4d3o2g .po4d3o2kien .po4d3o2kn .po4d3o2kręg .po4d3o2kres .po4d3o2piecz .po4d3o2ryw .po4d3o2siniak .po4d3o2strz .po4d3obsz .po4d3odd .po4d3olbrz .po4d3u2cz .po4d3u2dz .po4d3u2pa .po4d3u2ral .po4d3u2sta .po4d3u2szcz .po4d5ręczn .po4d5zakr .po4d5zam .po4d5zast .po4d5zbi .po4d5ze .po4d5zielenią .po4d5zielenić .po4d5zielenię .po4d5zielenił .po4d5zielenic .po4d5zielenien .po4d5zielenil .po4d5zielenim .po4d5zielenio .po4d5zielenis .po4d5ziem .po4d5ziom .po4d5zw2r .po4l3s .po4m3p .po4r3c .po4r3f .po4r3n .po4r3t .po4st3d .po4st3f .po4st3g .po4st3h .po4st3i2 .po4st3k .po4st3l .po4st3m .po4st3p .po4st3rom .po4st3s .po5d4uszczyn .po5r4tę .pobr2 .pobrz2 .poch2 .pochrz2 .pocz2 .pod3ć2 .pod3ł2 .pod3ś2 .pod3śró2d5 .pod3alp .pod3b2 .pod3c2 .pod3d2 .pod3f2 .pod3g2 .pod3h2 .pod3i2n .pod3j2 .pod3k2 .pod3l2 .pod3m2 .pod3n2 .pod3p2 .pod3r2 .pod3s2 .pod3t2 .pod3w2 .pod5ż2 .podch2 .podcz2 .poddź2 .poddż2 .pode3ć2 .pode3ł2 .pode3ś2 .pode3ź2 .pode3ż2 .pode3b2 .pode3c2 .pode3d2 .pode3f2 .pode3g2 .pode3h2 .pode3k2 .pode3l2 .pode3m2 .pode3p2 .pode3r2 .pode3s2 .pode3t2 .pode3tk2 .pode3w2 .pode3z2 .podech2 .podecz2 .podedź2 .podedż2 .podedz2 .podepch2 .poderż2 .poderz2 .podesch2 .podesz2 .podro2z3 .podsm2 .podsz2 .pogrz2 .pokl2 .pokr2 .pom4pk .pomk2 .pona2d2 .pona3ć2 .pona3ł2 .pona3ś2 .pona3ź2 .pona3ż2 .pona3b2 .pona3c2 .pona3cz2 .pona3dź2 .pona3do .pona3f2 .pona3g2 .pona3h2 .pona3k2 .pona3l2 .pona3m2 .pona3p2 .pona3r2 .pona3s2 .pona3t2 .pona3w2 .pona3z2 .pona4f3t .ponabrz2 .ponach2 .ponad3ć2 .ponad3ś2 .ponad3c2 .ponad3ch2 .ponad3cz2 .ponad3dź2 .ponad3f2 .ponad3g2 .ponad3h2 .ponad3j2 .ponad3k2 .ponad3l2 .ponad3p2 .ponad3s2 .ponad3t2 .ponadz2 .ponarz2 .ponasm2 .ponasz2 .ponaz3m2 .ponazw2 .ponie3k2 .ponie3w2 .popch2 .popo3w2 .poprz2 .por4t1w .por4tf .por4tm .poro2z3 .poro3z4u .porz2 .posch2 .posm2 .posz2 .potk2 .potr2 .poz4m2 .poza3u2 .pozw2 .pp8 .pr8 .pra3s2 .pra3w2nu .pra3w2z .prapra3w2nu .predy2s3po .prz8 .przełk2 .prze2d2 .prze3ć2 .prze3ł2 .prze3ś2 .prze3ź2 .prze3ż2 .prze3b2 .prze3c2 .prze3dą .prze3dę .prze3dź2 .prze3d4łuż .prze3d4much .prze3d4o3br .prze3d4o3st .prze3d4o3zo .prze3d4ramat .prze3d4ruk .prze3d4ryl .prze3d4rz2 .prze3d4um .prze3dy .prze3dz2 .prze3e2k2s3 .prze3f2 .prze3g2 .prze3h2 .prze3k2 .prze3l2 .prze3m2 .prze3n2 .prze3p2 .prze3r2 .prze3s2 .prze3t2 .prze3u2 .prze3w2 .prze3z2 .prze4d5łużyc .prze4d5ż2 .prze4d5o4stat .prze4d5za .prze4d5zg2 .prze4d5zim .prze4d5zj .prze4d5zl .prze4d5zw2r .prze4d5zwoj .przebr2 .przebrz2 .przech2 .przechrz2 .przeci2w3 .przeci3w4ie .przeciwa2 .przeciww2 .przecz2 .przed3ć2 .przed3ł2 .przed3ś2 .przed3a2gon .przed3a2kc .przed3alp .przed3b2 .przed3c2 .przed3d2 .przed3e2gz .przed3e2mer .przed3f2 .przed3g2 .przed3h2 .przed3i2 .przed3j2 .przed3k2 .przed3l2 .przed3m2 .przed3n2 .przed3o2 .przed3p2 .przed3r2 .przed3s2 .przed3się3w2 .przed3sz2 .przed3t2 .przed3u2 .przed3w2 .przedch2 .przedcz2 .przeddź2 .przeddż2 .przeddz2 .przedgrz2 .przedy2s3ku .przegrz2 .przekl2 .przekr2 .przemk2 .przepch2 .przerż2 .przerz2 .przesch2 .przesm2 .przesz2 .przetk2 .przetr2 .przetran2s3 .przy3ć2 .przy3ł2 .przy3ś2 .przy3ź2 .przy3ż2 .przy3b2 .przy3c2 .przy3d2 .przy3f2 .przy3g2 .przy3h2 .przy3k2 .przy3l2 .przy3m2 .przy3p2 .przy3r2 .przy3s2 .przy3t2 .przy3w2 .przy3z2 .przybr2 .przych2 .przycz2 .przydź2 .przydż2 .przydz2 .przygrz2 .przymk2 .przyoz2 .przypch2 .przyrż2 .przyrz2 .przysch2 .przysz2 .przytk2 .ps8 .pt8 .pv8 .pw8 .px8 .pz8 .rć8 .rł8 .rń8 .rś8 .rź8 .rż8 .r8 .rb8 .rc8 .rd8 .retran2s3 .rf8 .rg8 .rh8 .rj8 .rk8 .rl8 .rm8 .rn8 .ro2z3 .ro3z4a .ro3z4e .ro3z4e3ć2 .ro3z4e3ł2 .ro3z4e3ś2 .ro3z4e3ź2 .ro3z4e3ż2 .ro3z4e3b2 .ro3z4e3c2 .ro3z4e3d2 .ro3z4e3f2 .ro3z4e3g2 .ro3z4e3h2 .ro3z4e3k2 .ro3z4e3l2 .ro3z4e3m2 .ro3z4e3p2 .ro3z4e3r2 .ro3z4e3s2 .ro3z4e3t2 .ro3z4e3w2 .ro3z4e3z2 .ro3z4ej .ro3z4u .ro4z5a2gi .ro4z5a2nie .ro4z5e2mo .ro4z5e4g3z .ro4z5e4n3t .rozś2 .rozbrz2 .rozd2 .rozech2 .rozecz2 .rozedź2 .rozedż2 .rozedz2 .rozepch2 .rozerż2 .rozerz2 .rozesch2 .rozesz2 .rozi2 .rozm2 .rozo2 .rozpo3w2 .rozt2 .roztr2 .rozw2 .rp8 .rr8 .rs8 .rt8 .rv8 .rw8 .rx8 .rz8 .sć8 .sł8 .sń8 .sś8 .sź8 .sż8 .s8 .samo3ch2 .samo3k2 .samo3p2 .samo3w2 .samoro2z3 .sb8 .sc8 .sch8 .sd8 .sf8 .sg8 .sh8 .siede2m3 .siedemse2t3 .siedmio3ś2 .sj8 .ską2d5że .sk8 .skl8 .skr8 .sl8 .sm8 .sn8 .sobo3w2 .spó2ł3 .sp8 .spo2d2 .spo3ć2 .spo3ł2 .spo3ś2 .spo3ź2 .spo3ż2 .spo3b2 .spo3c2 .spo3dz2 .spo3f2 .spo3g2 .spo3h2 .spo3k2 .spo3l2 .spo3m2 .spo3p2 .spo3r2 .spo3s2 .spo3t2 .spo3w2 .spo3z2 .spo4r3n .spo4r3t .spoch2 .spocz2 .spodź2 .spodż2 .spod3d .sporz2 .sposz2 .sr8 .ss8 .st8 .stere2o3 .stereoa2 .stereoe2 .stereoi2 .stereoo2 .stereou2 .su2b3 .su3b4ie .su3b4otn .supe2r3 .supe3r4at .supe3r4io .supe4r5a2tr .super5z2b .supere2 .supero2d1rzut .sv8 .sw8 .sx8 .sz8 .sześćse2t3 .sześcio3ś2 .sze2ś2ć3 .sze2s3 .tć8 .tł8 .tń8 .tś8 .tź8 .tż8 .t8 .ta2o3 .ta2r7zan .tb8 .tc8 .tch8 .td8 .te2o3 .tf8 .tg8 .th8 .tj8 .tk8 .tl8 .tm8 .tn8 .toa3 .tp8 .tró2j3 .tró3j4ą .tró3j4ę .tró3j4ecz .tr8 .tran2s3 .tran3s4e .tran3s4ie .tran3s4y .tran3sz .tran4s5eu .transa2 .transo2 .trz8 .trze2ch3 .trzechse2t3 .ts8 .tt8 .tv8 .tw8 .tx8 .tysią2c3 .tysią3c4a .tysią3c4e .tysią3cz .tysią4c5zł .tz8 .uć2 .uś2 .u3ł2 .u3ź2 .u3ż2 .u3b2 .u3c2 .u3d2 .u3f2 .u3g2 .u3h2 .u3k2 .u3l2 .u3m2 .u3n2 .u3p2 .u3r2 .u3s2 .u3t2 .u3w2 .u3z2 .u4d3k .u4f3n .u4k3lej .u4l3s .u4l3t .u4m3br .u4n3c .u4n3d .u4p3p2s .u4r3s .u4st3n .u4stc .u4stk .u4z3be .ube2z3 .ubezw2 .ubr2 .uch2 .ucz2 .udź2 .udż2 .udz2 .ukr2 .umk2 .upch2 .upo2d2 .upo3ć2 .upo3ł2 .upo3ś2 .upo3ź2 .upo3ż2 .upo3b2 .upo3c2 .upo3da .upo3f2 .upo3g2 .upo3h2 .upo3k2 .upo3l2 .upo3m2 .upo3p2 .upo3r2 .upo3s2 .upo3t2 .upo3w2 .upo3z2 .upoch2 .upocz2 .upodź2 .upodż2 .upod3d .uporz2 .uposz2 .urż2 .uro2z3 .urz2 .usch2 .usz2 .utk2 .utr2 .uze3w2 .vć8 .vł8 .vń8 .vś8 .vź8 .vż8 .v8 .vb8 .vc8 .vd8 .vf8 .vg8 .vh8 .vj8 .vk8 .vl8 .vm8 .vn8 .vp8 .vr8 .vs8 .vt8 .vv8 .vw8 .vx8 .vz8 .wć8 .wł8 .wń8 .wś8 .wź8 .wż8 .w8 .wb8 .wc8 .wd8 .we3ć2 .we3ł2 .we3ś2 .we3ż2 .we3b2 .we3c2 .we3d2 .we3f2 .we3g2 .we3h2 .we3k2 .we3l2 .we3m2 .we3n2 .we3p2 .we3r2 .we3s2 .we3t2 .we3w2 .we3z2 .we4ł3n .we4k3t .we4l3w .we4n3d .we4n3t .we4r3b .we4r3d .we4r3n .we4r3s .we4r3t .we4s3prz .we4s3tch2 .we4z3br .we4z3gł .wech2 .wecz2 .wedź2 .wedż2 .wedz2 .wemk2 .wepch2 .werz2 .wesz2 .wetk2 .wewną2trz3 .wf8 .wg8 .wh8 .wielo3ś2 .wielo3d2 .wielo3k2 .wieluse2t3 .wilczo3m2 .wj8 .wk8 .wl8 .wm8 .wn8 .wniebo3w2 .wodo3w2 .wp8 .wr8 .ws8 .współi2 .współo2b3w .współu2 .współw2 .wspó2ł3 .wsze2ch3 .wszecho2 .wszechw2 .wt8 .wv8 .ww8 .wx8 .wy3ć2 .wy3ł2 .wy3ś2 .wy3ź2 .wy3ż2 .wy3b2 .wy3c2 .wy3d2 .wy3f2 .wy3g2 .wy3h2 .wy3k2 .wy3l2 .wy3m2 .wy3o2d3r .wy3p2 .wy3r2 .wy3s2 .wy3t2 .wy3w2 .wy3z2 .wy4ż3sz .wy4cz3ha .wybr2 .wybrz2 .wych2 .wycz2 .wydź2 .wydż2 .wydr2 .wydz2 .wye2k2s3 .wygrz2 .wyi2zo .wykl2 .wykr2 .wykrz2 .wymk2 .wypch2 .wyprz2 .wyrż2 .wyrz2 .wysch2 .wysm2 .wysz2 .wytch2 .wytk2 .wytr2 .wz8 .xć8 .xł8 .xń8 .xś8 .xź8 .xż8 .x8 .xb8 .xc8 .xd8 .xf8 .xg8 .xh8 .xj8 .xk8 .xl8 .xm8 .xn8 .xp8 .xr8 .xs8 .xt8 .xv8 .xw8 .xx8 .xz8 .zć8 .zł8 .zło3w2 .zń8 .zś8 .zź8 .zż8 .z8 .za3ć2 .za3ł2 .za3ś2 .za3ź2 .za3ż2 .za3b2 .za3c2 .za3d2 .za3f2 .za3g2 .za3h2 .za3k2 .za3l2 .za3m2 .za3o2b3r .za3o2b3s .za3p2 .za3r2 .za3s2 .za3t2 .za3u2 .za3w2 .za3z2 .za4k3t .za4l3g .za4l3k .za4l3t .za4m3k .za4r3ch .za4uto .za5m4k2n .zabr2 .zabrz2 .zach2 .zacz2 .zadź2 .zadż2 .zadośću4 .zado2ść3 .zadr2 .zady2s3po .zadz2 .zagrz2 .zai2n3 .zai2zo .zain4ic .zakl2 .zakr2 .zakrz2 .zanie3d2 .zarż2 .zarz2 .zasch2 .zasm2 .zasz2 .zatk2 .zatr2 .zb8 .zc8 .zd8 .zde2z3 .zde3z4awu .zde3z4el .zde3z4er .zde3z4y .zdy2s3kont .zdy2s3kred .zdy2s3kwal .ze3ć2 .ze3ł2 .ze3ś2 .ze3ź2 .ze3ż2 .ze3b2 .ze3c2 .ze3d2 .ze3f2 .ze3g2 .ze3h2 .ze3k2 .ze3l2 .ze3m2 .ze3p2 .ze3r2 .ze3s2 .ze3t2 .ze3tk2 .ze3w2 .ze3z2 .ze4r3k .ze4t3e2m1e2s .ze4t3e2s1e2l .ze4t3emp .ze4t3hap .zech2 .zecz2 .zedź2 .zedż2 .zedz2 .zekl2 .zepch2 .zerż2 .zerz2 .zesch2 .zesm4 .zesz2 .zf8 .zg8 .zh8 .zimno3kr2 .zj8 .zk8 .zl8 .zm8 .zmartwy2ch3 .zmartwychw2 .zn8 .znie3ć2 .znie3ł2 .znie3ń2 .znie3ś2 .znie3ź2 .znie3ż2 .znie3b2 .znie3c2 .znie3d2 .znie3f2 .znie3g2 .znie3h2 .znie3k2 .znie3l2 .znie3m2 .znie3n2 .znie3p2 .znie3r2 .znie3s2 .znie3t2 .znie3w2 .znie3z2 .znie4dź3 .znie4m3c .zniech2 .zniecz2 .zniedż2 .zniedz2 .znierz2 .zniesz2 .zo2o3 .zp8 .zr8 .zro2z3 .zro3z4u .zs8 .zt8 .zv8 .zw8 .zx8 .zz8 ą1 ę1 ó1 ó4w3cz ś1c ź2dź 1ś2ci 2ć1ń 2ć1ś 2ć1ź 2ć1ż 2ć1b 2ć1c 2ć1d 2ć1f 2ć1g 2ć1k 2ć1m 2ć1n 2ć1p 2ć1s 2ć1t 2ć1z 2ł1ć 2ł1ń 2ł1ś 2ł1ź 2ł1ż 2ł1b 2ł1c 2ł1d 2ł1f 2ł1g 2ł1h 2ł1j 2ł1k 2ł1l 2ł1m 2ł1n 2ł1p 2ł1r 2ł1s 2ł1t 2ł1w 2ł1z 2ń1ć 2ń1ł 2ń1ń 2ń1ś 2ń1ź 2ń1ż 2ń1b 2ń1c 2ń1d 2ń1f 2ń1g 2ń1h 2ń1j 2ń1k 2ń1l 2ń1m 2ń1n 2ń1p 2ń1r 2ń1s 2ń1t 2ń1w 2ń1z 2śćc 2ś1ś 2ś1ź 2ś1ż 2ś1b 2ś1d 2ś1f 2ś1g 2ś1k 2ś1p 2ś1s 2ś1t 2ś1z 2ślm 2śln 2ź1ć 2ź1ś 2ź1ż 2ź1b 2ź1c 2ź1d 2ź1f 2ź1g 2ź1k 2ź1l 2ź1m 2ź1n 2ź1p 2ź1s 2ź1t 2ź1w 2ź1z 2ż1ć 2ż1ł 2ż1ń 2ż1ś 2ż1ź 2ż1b 2ż1c 2ż1d 2ż1f 2ż1g 2ż1j 2ż1k 2ż1l 2ż1m 2ż1n 2ż1p 2ż1r 2ż1s 2ż1t 2ż1w 2ż1z 2błk 2b1ć 2b1ń 2b1ś 2b1ź 2b1ż 2b1c 2b1d 2b1f 2b1g 2b1k 2b1m 2b1n 2b1p 2b1s 2b1t 2b1z 2brn 2c1ć 2c1ń 2c1ś 2c1ź 2c1ż 2c1b 2c1d 2c1f 2c1g 2c1k 2c1l 2c1m 2c1n 2c1p 2c1s 2c1t 2ch1ć 2ch1ń 2ch1ś 2ch1ź 2ch1ż 2ch1b 2ch1c 2ch1d 2ch1f 2ch1g 2ch1k 2ch1m 2ch1n 2ch1p 2ch1s 2ch1t 2ch1z 2cz1ć 2cz1ń 2cz1ś 2cz1ź 2cz1ż 2cz1b 2cz1c 2cz1d 2cz1f 2cz1g 2cz1k 2cz1l 2cz1m 2cz1n 2cz1p 2cz1s 2cz1t 2cz1z 2dłb 2dłsz 2dź1ć 2dź1ń 2dź1ś 2dź1ź 2dź1ż 2dź1b 2dź1c 2dź1d 2dź1f 2dź1g 2dź1k 2dź1m 2dź1n 2dź1p 2dź1s 2dź1t 2dź1z 2dż1ć 2dż1ń 2dż1ś 2dż1ź 2dż1ż 2dż1b 2dż1c 2dż1d 2dż1f 2dż1g 2dż1k 2dż1m 2dż1n 2dż1p 2dż1s 2dż1t 2dż1z 2d1ć 2d1ń 2d1ś 2d1b 2d1c 2d1f 2d1g 2d1k 2d1m 2d1n 2d1p 2d1s 2d1t 2drn 2dz1ć 2dz1ń 2dz1ś 2dz1ź 2dz1ż 2dz1b 2dz1c 2dz1d 2dz1f 2dz1g 2dz1k 2dz1l 2dz1m 2dz1n 2dz1p 2dz1s 2dz1t 2dz1z 2f1c 2f1k 2f1m 2f1n 2głb 2g1ć 2g1ń 2g1ś 2g1ź 2g1ż 2g1b 2g1c 2g1d 2g1f 2g1k 2g1m 2g1p 2g1s 2g1t 2g1z 2h1ć 2h1ł 2h1ń 2h1ś 2h1ź 2h1ż 2h1b 2h1c 2h1d 2h1f 2h1g 2h1j 2h1k 2h1l 2h1m 2h1n 2h1p 2h1r 2h1s 2h1t 2h1w 2h1z 2j1ć 2j1ł 2j1ń 2j1ś 2j1ź 2j1ż 2j1b 2j1c 2j1d 2j1f 2j1g 2j1h 2j1k 2j1l 2j1m 2j1n 2j1p 2j1r 2j1s 2j1t 2j1w 2j1z 2kłb 2k1ć 2k1ń 2k1ś 2k1ź 2k1ż 2k1b 2k1c 2k1d 2k1f 2k1g 2k1m 2k1n 2k1p 2k1s 2k1sz 2k1t 2k1z 2l1ć 2l1ł 2l1ń 2l1ś 2l1ź 2l1ż 2l1b 2l1c 2l1d 2l1f 2l1g 2l1h 2l1j 2l1k 2l1m 2l1n 2l1p 2l1r 2l1s 2l1t 2l1w 2l1z 2m1ć 2m1ł 2m1ń 2m1ś 2m1ź 2m1ż 2m1b 2m1c 2m1d 2m1f 2m1g 2m1h 2m1j 2m1k 2m1l 2m1n 2m1p 2m1r 2m1s 2m1t 2m1w 2m1z 2n1ć 2n1ł 2n1ń 2n1ś 2n1ź 2n1ż 2n1b 2n1c 2n1d 2n1f 2n1g 2n1h 2n1j 2n1k 2n1l 2n1m 2n1p 2n1r 2n1s 2n1t 2n1w 2n1z 2ntn 2p1ć 2p1ń 2p1ś 2p1ź 2p1ż 2p1b 2p1c 2p1d 2p1f 2p1g 2p1k 2p1m 2p1n 2p1s 2p1sz 2p1t 2p1z 2pln 2r1ć 2r1ł 2r1ń 2r1ś 2r1ź 2r1ż 2r1b 2r1c 2r1d 2r1f 2r1g 2r1h 2r1j 2r1k 2r1l 2r1m 2r1n 2r1p 2r1s 2r1t 2r1w 2rz1ć 2rz1ł 2rz1ń 2rz1ś 2rz1ź 2rz1ż 2rz1b 2rz1c 2rz1d 2rz1f 2rz1g 2rz1h 2rz1j 2rz1k 2rz1l 2rz1m 2rz1n 2rz1p 2rz1r 2rz1s 2rz1t 2rz1w 2słb 2s1ź 2s1ż 2s1b 2s1d 2s1f 2s1g 2s1s 2snk 2stk 2stn 2stsz 2sz1ć 2sz1ś 2sz1c 2sz1f 2sz1k 2sz1l 2sz1m 2sz1n 2sz1p 2sz1s 2sz1t 2sz1w 2sz1z 2szln 2t1ć 2t1ń 2t1ś 2t1ź 2t1ż 2t1b 2t1c 2t1d 2t1f 2t1g 2t1k 2t1m 2t1n 2t1p 2t1s 2t1z 2tln 2trk 2trzn 2w1ć 2w1ł 2w1ń 2w1ś 2w1ź 2w1ż 2w1b 2w1c 2w1d 2w1f 2w1g 2w1j 2w1k 2w1l 2w1m 2w1n 2w1p 2w1r 2w1s 2w1t 2w1z 2z1ć 2z1ś 2z1c 2z1d 2z1f 2z1k 2z1p 2z1s 2z1t 2zdk 2zdn 3d2niow 3k2sz2t 3m2k2n 3m2nest 3m2nezj 3m2sk2n 3p2neu 3w2ład 3w2łos 3w2czas 4ć3ć 4ł3ł 4ź3ź 4ż3ż 4b3b 4c3c 4d3d 4f3f 4g3g 4h3h 4j3j 4k3k 4l3l 4m3m 4n3n 4p3p 4r3r 4t3t 4w3w 4z3z 8ć. 8ćć. 8ćł. 8ćń. 8ćś. 8ćź. 8ćż. 8ćb. 8ćc. 8ćd. 8ćf. 8ćg. 8ćh. 8ćj. 8ćk. 8ćl. 8ćm. 8ćn. 8ćp. 8ćr. 8ćs. 8ćt. 8ćv. 8ćw. 8ćx. 8ćz. 8ł. 8łć. 8łł. 8łń. 8łś. 8łź. 8łż. 8łb. 8łc. 8łd. 8łf. 8łg. 8łh. 8łj. 8łk. 8łl. 8łm. 8łn. 8łp. 8łr. 8łs. 8łt. 8łv. 8łw. 8łx. 8łz. 8ń. 8ńć. 8ńł. 8ńń. 8ńś. 8ńź. 8ńż. 8ńb. 8ńc. 8ńd. 8ńf. 8ńg. 8ńh. 8ńj. 8ńk. 8ńl. 8ńm. 8ńn. 8ńp. 8ńr. 8ńs. 8ńt. 8ńv. 8ńw. 8ńx. 8ńz. 8ś. 8ść. 8śł. 8śń. 8śś. 8śź. 8śż. 8śb. 8śc. 8śd. 8śf. 8śg. 8śh. 8śj. 8śk. 8śl. 8śm. 8śn. 8śp. 8śr. 8śs. 8śt. 8śv. 8św. 8śx. 8śz. 8ź. 8źć. 8źł. 8źń. 8źś. 8źź. 8źż. 8źb. 8źc. 8źd. 8źf. 8źg. 8źh. 8źj. 8źk. 8źl. 8źm. 8źn. 8źp. 8źr. 8źs. 8źt. 8źv. 8źw. 8źx. 8źz. 8ż. 8żć. 8żł. 8żń. 8żś. 8żź. 8żż. 8żb. 8żc. 8żd. 8żf. 8żg. 8żh. 8żj. 8żk. 8żl. 8żm. 8żn. 8żp. 8żr. 8żs. 8żt. 8żv. 8żw. 8żx. 8żz. 8b. 8bć. 8bł. 8bń. 8bś. 8bź. 8bż. 8bb. 8bc. 8bd. 8bf. 8bg. 8bh. 8bj. 8bk. 8bl. 8bm. 8bn. 8bp. 8br. 8brz. 8bs. 8bt. 8bv. 8bw. 8bx. 8bz. 8c. 8cć. 8cł. 8cń. 8cś. 8cź. 8cż. 8cb. 8cc. 8cd. 8cf. 8cg. 8ch. 8chł. 8chrz. 8chw. 8cj. 8ck. 8cl. 8cm. 8cn. 8cp. 8cr. 8cs. 8ct. 8cv. 8cw. 8cx. 8cz. 8czt. 8d. 8dć. 8dł. 8dń. 8dś. 8dź. 8dż. 8db. 8dc. 8dd. 8df. 8dg. 8dh. 8dj. 8dk. 8dl. 8dm. 8dn. 8dp. 8dr. 8drz. 8ds. 8dt. 8dv. 8dw. 8dx. 8dz. 8f. 8fć. 8fł. 8fń. 8fś. 8fź. 8fż. 8fb. 8fc. 8fd. 8ff. 8fg. 8fh. 8fj. 8fk. 8fl. 8fm. 8fn. 8fp. 8fr. 8fs. 8ft. 8fv. 8fw. 8fx. 8fz. 8g. 8gć. 8gł. 8gń. 8gś. 8gź. 8gż. 8gb. 8gc. 8gd. 8gf. 8gg. 8gh. 8gj. 8gk. 8gl. 8gm. 8gn. 8gp. 8gr. 8gs. 8gt. 8gv. 8gw. 8gx. 8gz. 8h. 8hć. 8hł. 8hń. 8hś. 8hź. 8hż. 8hb. 8hc. 8hd. 8hf. 8hg. 8hh. 8hj. 8hk. 8hl. 8hm. 8hn. 8hp. 8hr. 8hs. 8ht. 8hv. 8hw. 8hx. 8hz. 8j. 8jć. 8jł. 8jń. 8jś. 8jź. 8jż. 8jb. 8jc. 8jd. 8jf. 8jg. 8jh. 8jj. 8jk. 8jl. 8jm. 8jn. 8jp. 8jr. 8js. 8jt. 8jv. 8jw. 8jx. 8jz. 8k. 8kć. 8kł. 8kń. 8kś. 8kź. 8kż. 8kb. 8kc. 8kd. 8kf. 8kg. 8kh. 8kj. 8kk. 8kl. 8km. 8kn. 8kp. 8kr. 8ks. 8kst. 8kt. 8kv. 8kw. 8kx. 8kz. 8l. 8lć. 8lł. 8lń. 8lś. 8lź. 8lż. 8lb. 8lc. 8ld. 8lf. 8lg. 8lh. 8lj. 8lk. 8ll. 8lm. 8ln. 8lp. 8lr. 8ls. 8lt. 8lv. 8lw. 8lx. 8lz. 8m. 8mć. 8mł. 8mń. 8mś. 8mź. 8mż. 8mb. 8mc. 8md. 8mf. 8mg. 8mh. 8mj. 8mk. 8ml. 8mm. 8mn. 8mp. 8mr. 8ms. 8mst. 8mt. 8mv. 8mw. 8mx. 8mz. 8n. 8nć. 8nł. 8nń. 8nś. 8nź. 8nż. 8nb. 8nc. 8nd. 8nf. 8ng. 8nh. 8nj. 8nk. 8nl. 8nm. 8nn. 8np. 8nr. 8ns. 8nt. 8nv. 8nw. 8nx. 8nz. 8p. 8pć. 8pł. 8pń. 8pś. 8pź. 8pż. 8pb. 8pc. 8pd. 8pf. 8pg. 8ph. 8pj. 8pk. 8pl. 8pm. 8pn. 8pp. 8pr. 8prz. 8ps. 8pt. 8pv. 8pw. 8px. 8pz. 8r. 8rć. 8rł. 8rń. 8rś. 8rź. 8rż. 8rb. 8rc. 8rd. 8rf. 8rg. 8rh. 8rj. 8rk. 8rl. 8rm. 8rn. 8rp. 8rr. 8rs. 8rsz. 8rt. 8rv. 8rw. 8rx. 8rz. 8rzł. 8s. 8sć. 8sł. 8sń. 8sś. 8sź. 8sż. 8sb. 8sc. 8sch. 8sd. 8sf. 8sg. 8sh. 8sj. 8sk. 8skrz. 8sl. 8sm. 8sn. 8sp. 8sr. 8ss. 8st. 8str. 8strz. 8stw. 8sv. 8sw. 8sx. 8sz. 8szcz. 8szczb. 8szk. 8szn. 8szt. 8sztr. 8t. 8tć. 8tł. 8tń. 8tś. 8tź. 8tż. 8tb. 8tc. 8td. 8tf. 8tg. 8th. 8tj. 8tk. 8tl. 8tm. 8tn. 8tp. 8tr. 8trz. 8ts. 8tt. 8tv. 8tw. 8tx. 8tz. 8v. 8vć. 8vł. 8vń. 8vś. 8vź. 8vż. 8vb. 8vc. 8vd. 8vf. 8vg. 8vh. 8vj. 8vk. 8vl. 8vm. 8vn. 8vp. 8vr. 8vs. 8vt. 8vv. 8vw. 8vx. 8vz. 8w. 8wć. 8wł. 8wń. 8wś. 8wź. 8wż. 8wb. 8wc. 8wd. 8wf. 8wg. 8wh. 8wj. 8wk. 8wl. 8wm. 8wn. 8wp. 8wr. 8ws. 8wt. 8wv. 8ww. 8wx. 8wz. 8x. 8xć. 8xł. 8xń. 8xś. 8xź. 8xż. 8xb. 8xc. 8xd. 8xf. 8xg. 8xh. 8xj. 8xk. 8xl. 8xm. 8xn. 8xp. 8xr. 8xs. 8xt. 8xv. 8xw. 8xx. 8xz. 8z. 8zć. 8zł. 8zń. 8zś. 8zź. 8zż. 8zb. 8zc. 8zd. 8zdr. 8zdrz. 8zf. 8zg. 8zh. 8zj. 8zk. 8zl. 8zm. 8zn. 8zp. 8zr. 8zs. 8zt. 8zv. 8zw. 8zx. 8zz. a1 a2u a2y aa2 ae2 ai2 ao2 be2eth be2f3sz2 be2k1hend bi2n3o2ku bi2sz3kop bi2z3ne2s3m bi2z3nes birmin2g1ham blo2k1hauz bo2s3ma br2d bro2a2d3way bu2sz3me buk2sz3pan busine2ss3m busines2s c4h c4z cal2d1well ch2ł ch2j ch2l ch2r ch2w chus1t cu2r7zon dż2ł dż2j dż2l dż2r dż2w dże4z3b dże4z3m d4ź d4ż d4z deut4sch3land drz2w du2sz3past e1 e2r5zac e2u e2y e3u2sz ea2 ee2 ei2 eo2 fi2s3harm fi2sz3bin fo2k2s3t fo2r5zac fol2k1lor fos2f1a2zot ga3d2get gado3p2ta gol2f3s golfsz2 gran2d1ilo gro4t3r hi2sz3p hu2cz1w hu2x3ley i1 i2ą i2ę i2ó i2a i2e i2i i2o i2u i2y in4nsbruck in4sbruc j2t1ł j2t1r ja4z4z3b ja4z4z3m karl2s1kron karl2s1ruhe kir2chhoff kongre2s3m led1w lu2ft3waffe lu2ks1fer ly2o ma2r5zł ma2r5zl ma2r5zn mi2sz1masz mie2r5zł mie2r5zi mon2t3real moza2i3k mu2r7zasich3l na4ł3kows na4r3v o1 o2y oa2 och3mistrz oe2 of2f3set oi2 oo2 ou2 pa2n3a2mer pa2s3cal pa2s3ch połu3d2ni po3d4nieprz po3m2ną po3m2nę po3m2ni po4rt2s3mo2uth po4rt3land poli3e2t poli3u2re powsze3d2ni pr2chal pre2sz3pa r4z ro2e3nt2gen ro2k3rocz ro2s3to3c2k s4z se2t3le sko2r5zoner sm2r sowi3z2 sy2n3opt sy2s1tem sza2sz1ły sze2z1long sze4ść szto2k1holm szyn2k1was to3y2o3t turboo2d3rzut tygo3d2ni u1 u2y ua2 ue2 ui2 uo2 uu2 vo2lk2s3 we2e2k1end we4st3f we4st3m y1 ya2 ye2 yi2 yo2 yu2 ze4p3p", ["length"]=30338, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4053, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-es.rme0000644000175000017500000000153011761001300024636 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Spanish hyphenation patterns (more info about the licence to be added later) % DIVISI'ON DE PALABRAS % ~~~~~~~~~~~~~~~~~~~~~ % hyph-es.tex 4.6 % This files corresponds to eshyph.tex 4.6. % % (c) Javier Bezos 1993 1997. % (c) Javier Bezos and CervanTeX 2001-2010 % Some parts, (c) by Francesc Carmona % Licence: LPPL % % For further info, bug reports and comments: % % http://www.tex-tipografia.com/spanish_hyphen.html % % I would like to thanks Francesc Carmona for his permission % to steal parts of his work without restrictions. % % 2010-05-18 % % _____________________________________________________________ % Javier Bezos | http://www.cervantex.es/ % ............................................................. % TeX y tipografia | http://www.tex-tipografia.com/ context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-bg.rme0000644000175000017500000000307411761001300024624 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Bulgarian hyphenation patterns (more info about the licence to be added later) % Bulgarian hyphenation patterns, version 1.7, July 2008 % Copyright 1994-2008 Georgi Boshnakov % Georgi dot Boshnakov at manchester dot ac dot uk % % This file can be redistributed and/or modified under the terms % of the LaTeX Project Public License distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % % First version: 1994 % Modified: June 2000 (minor changes) % Modified: May 2006 (added copyright notice) % Modified: June 2008 (changed encoding to utf-8) % % Please send wrongly hyphenated words and suggestions for % corrections to the address given towards the beginning of this % file. % % % Note: The original name of this file was 'bghyphsi.tex' which is % part of the package 'bghyphen'. The package 'bghyphen' is now % obsolete but it is still available on CTAN and currently (June 2008) % gives the same hyphenation results. % % % % To make TeX use these patterns: % % (1) Make sure that the hyph-utf8 package is present in your TeX % system. % % (2) generate the necessary formats (TeX, LaTeX, pdfLaTeX, etc), % instructing TeX to load 'loadhyph-bg.tex' for Bulgarian % hyphenation. % % The LaTeX babel package sets \lefthyphenmin and \righthyphenmin to 2 % when the language is switched to Bulgarian. Developers who write % support for Bulgarian outside LaTeX and/or babel need to take care % of this. % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-zh.rme0000644000175000017500000000752212161703335024673 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0) (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: pyhyph.tex (yyyy-mm-dd) % Author: Werner Lemberg % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % This is the file pyhyph.tex of the CJK package % for hyphenating Chinese pinyin syllables. % % created by Werner Lemberg % % Version 4.8.0 (22-May-2008) % % Copyright (C) 1994-2008 Werner Lemberg % % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program in doc/COPYING; if not, write to the Free % Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, % MA 02110-1301 USA % % \message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)} % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-zh.lua0000644000175000017500000001210212161703335024657 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="zh", ["source"]="hyph-zh-latn-pinyin", ["texcomment"]="% Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0)\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: pyhyph.tex (yyyy-mm-dd)\ % Author: Werner Lemberg \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % This is the file pyhyph.tex of the CJK package\ % for hyphenating Chinese pinyin syllables.\ %\ % created by Werner Lemberg \ %\ % Version 4.8.0 (22-May-2008)\ %\ % Copyright (C) 1994-2008 Werner Lemberg \ %\ % This program is free software; you can redistribute it and/or modify\ % it under the terms of the GNU General Public License as published by\ % the Free Software Foundation; either version 2 of the License, or\ % (at your option) any later version.\ %\ % This program is distributed in the hope that it will be useful,\ % but WITHOUT ANY WARRANTY; without even the implied warranty of\ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\ % GNU General Public License for more details.\ %\ % You should have received a copy of the GNU General Public License\ % along with this program in doc/COPYING; if not, write to the Free\ % Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,\ % MA 02110-1301 USA\ %\ % \\message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)}\ %\ % ", }, ["patterns"]={ ["characters"]="'abcdefghijklmnopqrstuwxyzü’", ["data"]="a1b a1c a1d a1f a1g a1h a1j a1k a1l a1m a1p a1q a1r a1s a1t a1w a1x a1y a1z e1b e1c e1d e1f e1g e1h e1j e1k e1l e1m e1p e1q e1s e1t e1w e1x e1y e1z 1ga g1b g1c g1d 1ge g1f g1g g1h g1j g1k g1l g1m g1n 1go g1p g1q g1r g1s g1t 1gu g1w g1x g1y g1z i1b i1c i1d i1f i1g i1h i1j i1k i1l i1m i1p i1q i1r i1s i1t i1w i1x i1y i1z 1na n1b n1c n1d 1ne n1f n1h 1ni n1j n1k n1l n1m n1n 1no n1p n1q n1r n1s n1t 1nu 1nü n1w n1x n1y n1z o1b o1c o1d o1f o1g o1h o1j o1k o1l o1m o1p o1q o1r o1s o1t o1w o1x o1y o1z 1ra r1b r1c r1d 1re r1f r1g r1h 1ri r1j r1k r1l r1m r1n 1ro r1p r1q r1r r1s r1t 1ru r1w r1x r1y r1z u1b u1c u1d u1f u1g u1h u1j u1k u1l u1m u1p u1q u1r u1s u1t u1w u1x u1y u1z ü1b ü1c ü1d ü1f ü1g ü1h ü1j ü1k ü1l ü1m ü1n ü1p ü1q ü1r ü1s ü1t ü1w ü1x ü1y ü1z '1a ’1a '1e ’1e '1o ’1o", ["length"]=802, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=194, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-et.lua0000644000175000017500000006526012161703335024663 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="et", ["source"]="hyph-et", ["texcomment"]="% Estonian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: eehyph.tex (2004-04-13)\ % Author: Een Saar \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % Estonian hyphenation patterns\ % Copyright 2003 Een Saar\ %\ % This work may be distributed and/or modified under the conditions\ % of the LaTeX Project Public License, either version 1.3 of this\ % license or (at your option) any later version. The latest version\ % of this license is in http://www.latex-project.org/lppl.txt and\ % version 1.3 or later is part of all distributions of LaTeX\ % version 2003/12/01 or later.\ %\ % This work has the LPPL maintenance status \"author-maintained\".\ % This work consists of this file only (eehyph.tex).\ %\ % The patterns were generated long ago by applying patgen to\ % an Estonian dictionary; a few patterns were added later manually\ % to prohibit aa-bits type cases.\ % Declare the special characters\ %\ % ", }, ["patterns"]={ ["characters"]="abdefghijklmnoprstuvzäõöüšž", ["data"]=".aa4 .aasta5 .ahe4li .al4a .al4gas .antiik5 .ap3l .ap3r .art5r .au3a .eba3 .ee4 .eela4 .ek3l .ek5r .gu4a .hie5 .idi4 .inim5a .ise5e .is4o .ja4e .ja4t .ka4e .ka2o .ke5hi .kip5r .ku4pl .ku5sa .kusee4 .la4pl .le4e .le5hi .lemmik5 .le5se .lõpp3 .ma4a .maa5a .ma5j .mi5sa .mo4e .nek3 .ni4p .nisu5 .noa3 .oa3 .oo4 .pap4p .pea3a .raadio5 .re4a .re2o .rep3r .re5so .rü5hi .sak5r .sap3r .se4a .sk4 .skaa5 .so5li .sp4 .st4 .teoo4 .tet3r .tina5 .toa3 .ts4 .tsi4s .turba5 .tus2 .tu3sa .ul4ga .ulu4k .um2b .uu4 .vaa3l .vask3 .vere3 .õppe5 .ää4 .õõ4 .öö4 .ühi4s .üle3e .ür2 .üü4 aaa5l a1aas 4aab aa4bi. 5aadel. aadio5a a1ae a4aer aa4fe aa4gan aa2h aa4has aa1i aai4g aa4is a5ait aa2j aa2la aa4lae aala4r aa4las aa4leh aa4lek aa4lel aalg4 aali4ke aal3k a5allik aal3t4 aa2l3õ aa4lü aa4mad aa4man aa4mee a5ameer aa4mö 4aan aa4nam aa4nat a5andm aan4duu aa5ni aant4 aa4pek aa4pen aa4ra4b aa4raf aa4raj aara4l a5arter aa2r3õ aa4rö aa4rü aa4sab aa4sai aa4sar aa2se4 aa4so 3aas5ta a5a4sul aa4sut aa4sü 4aat aa4taa aa4tas aa4teh 5aatom aa4tõ aa4tüh a1au aaši5 a1b 4a3ba a5be 3abie a4bij 5abs a1d a4dad a4deo a2der a3di adu4r adu3se a4dö a5eali ae2d 3aed. 2aee a3ees ae4f 1aeg. ae4ga4j ae4gi 3aegn 2a1e2h 4aei 4aek a3eks 2ael a5elani ae2le ae4lo ae4lu. 4ae2m 4aen ae4pi ae2s a3esi 4aett a1f a4fek a1g 3a4gent agia4 a3go 5agreg agud4 1a2hi. ah4kar 5ahnu 4ai. ai2a 5aian ai4hu ai4ke ai4kl a3ilm ai4lu ai4me. aimp4 4ain. a5inf a5inime 4ains a3inse ai4pr ai2sa 5aistin aist4r ai4va a1j a3ja. a4jale 5ajalo a4jalu 1a2jam 4ajo ajut4 a1k akaa4s a4kaat ak4as 3aken. a3ki ak4kis ak4kr a3klas ak4lau a5klii a3krii ak3ro 4aks ak4te4l a2ku. aku4map a5kvali 3alald ala4mas a4laüh ale4le al4et alet4t 5algat al4ged a3li ali4san a4liste 5allee. al4le4h al4luj al2lü a4lob als4 4alt 4alu. a4lud 1alun alü4h a4lüt a1m 4am. a5ma. a4maad 3ametn amit4 am4o am4pal 5amper. 4amü 2an. 3analü 5anatoom an4das an4deo an4dog 2ane a4neh a3ni a4niso 4anj an4kr 3anku an4nah 4ano anos4 3ansam 4anst 3anten 5antilo ao4d ao4he a3oht ao4j ao2le ao2lu ao2m a3oma ao4nu aoo4p ao2pe a5opera ao2r a5oras a1osa ao4su a1ots a1p a2par 5aparaa a5part a3parv a3pi a3pla a3po ap4pal ap4pin ap4pis ap3ri ap3ron a4pru a3pä 4ara arak4k a4rase 5areng 3aretu 3arhit 2ari ari4al ari4ap 4ark ar4kel 5armast 5armee. a4ro4l 1arst 5artikk 3arua 3arvam 5arvestus 1arvu ar4vää asa4las a4same a4sau ase4ma as5ema. 1a2sen a4seos a4sese a4sett 3a4setu as4fä 1a2si. asi4ala asi3an a4sind asip4 5asjan askõ4 as4kõl a5slaav a4sok as3ole aso4p as4pet as3pl as2po a3spor as4san ass5t 4asti 5astme ast4rak a4su4b a4sud asui4 a4suss a5suu a1t a3ta a4taž 5ateljee atii4v atmi4k 5atroo at4ros at4rus at4soo ats4p at4sü att4s 4atu au2a aua3l au4ba. 4aud au4de. a3ui 4au2j au4ke aulu3 aulus4 au4pü4 a5urg aus4o au2su a3usul 1auto autoo4 auto5s aut4r a1v av4a a4vans a3var a4veh a1õ2 a1ö2 a1ä2 a1ü2 až4ni 4a1š 5baa baa4g baa4k baa4s bab4 bae4 bag4 ba4he ba4ju. ba3k4r bak4s bak4v bap4l bap4r ba4rõ basa4s bas4ko bas4pe bat4r 4bb 2bd be3a4 beb2 bef4 beg4 be4lü4 be2ra2 berk4 bero4 be4rõ4 be4si be4st bes4tis bet4r 4bf 4bh bha4 bi4ala bia4v 2bi1e bi4en 4binõ bi4pla bis4a bi4si bis4k 2b1j 2b1k 2b1l bl4e blet4 b2lon 2bm 2bn 4bort 2bp 2b1r 3brig bros4 2bs b3so 2bt4 4buks bu4lõ 3bum buse5 bu4si4 bus4kr 2b3v 1da daa2 da5ab daala4 da4do dae4 daf4 d5ain da4leh da4lum da4lus 5dam 4dann da4num dao4 darat4 4darb dar4de 4da4re 4daru 2darv d3arv. 4dasen da4sum 2d5b2 2dd 1de dea2 2deaa de5av ded4 2dee. dee4le 4dehe dek3l dek4s 5del. de4lau 4de4lek 4deluv de4pr dep5ressi dere4 de4rel de4rep 5dero deru4 2df 2d5g 2d1h 1di dia4v did4 dig4 dii4g diina4 dii4sa dii4su 4dilm 4dini di2os di4plo dis4ai di4sar di4sas dis4pr dit4r 2d1j 2d3k4 dkop4 2d1l dle4v dlust4 2d1m dmee4 dmi4k 2d1n 1do do4h doi4r 2dos d3osa 5dosk 2d3p4 2d1r4 5draama. drao4 3dreen d4rel d2ren 3drena 2d1s4 dsar4 2d3t2 1du du4b due4 2d5uks d4u2s du4s1a du4see dusk4 2d1v 2dõ dõ4l 4dä 2dül dü4li 4dü4r 5düü 4dž 2d2š 3dšem eaa2 ea3aj e1aas ea2b e3abi e1ae ea2hi e1ai ea2j eak4s eak4v ea2la e3ala. e1a4lu ea2me e5amet e5ann ea4nu eao4 ea2pa e1ar ea4re ea2s e4ass e5aste e5asut e3au ea2v e3ava. e1b e1d ed4a e3eali e3ees ee4fe eei4 eek4r ee2la 3eelar e5elekt eel5uu ee4nai ee4nal ee4nam ee4no eent4 ee4pai e5e4pit 5eepos ee4ral eer5ap ee4ros ee4rot ee4sin e5esine ee4s5ist 5eeskir ee4sü ee4tõm ee4tä e1f e1g egaa4 egas4t e4goi 4eha e2he. e2hi e3hin 5ehist 1e4hit 5ehiti eh4ta4 4ehä ei4dul ei4e eie5ri ei2ga e3iga. ei4ha ei4he e3ilm ei2lu ei4mem 5eine. ei4roo e5i4sa. ei4sist ei4tau ei4tõ ei4va. e3j e3ka e4kahi e3ke ek4kap ek2l ek4lo e3k4o ek3re e3krii 4eks. 5eksam. 3eksem eksi3k 3ekska eksp3r 5ekstr ek4tül e3kü elaa4v e4lagr e2lam 3elamu el4an 5elanik eleis4 e4leks 5elektro 3eleme 5elevaato e3li e4lid elii4t el4kus e4l4ob elo4p els4t elt2r el4tü e2lu 1elu. e5lub elu5i4 1e4lun e3lus. e4luss el5uss. el4üh e1m 5emand. e5mat emne3 emos4 emp4r 5emuls endus3 5enelas e5nem 3energ e4nese e4nesl enk5l enk4r en4sal en4tos en4tü eo5a eo4ja e3o4le eo2lu eo2ma eoo4p eo5pl e3osa. e3osak e5osali e5osav eos4f e3ots. e1p e3pl e4pli ep4lu e1r e3raa 5erakon 5erald e4rao erei2 erek4 5ergut erih4 eri4uu er4nau e4ro4r erp4 er2pr ers4k er4taa er4tak er4tes e4rud es1an 1e2se. e5sek e5sen e5sil eska4j eska4s eske4 es5kel esk3l esk3r es2k5ö es4laa es3ole es4or es2po e3spor es4sist 4est es4tü e3su esup4 e1t e3t4a e2ten 5etendus. etii4s et2ra et4sin et4soo et4sü et4taj 1ette et4tru et4tä et4tü 4etu e4tõ4d e4tüm eu4de e3u2j e3u2l e5u2n eu4p eu4s e5usk e3uu e1v e3v4a e1õ2 e3ö4 e1ä2 e1ü4 e1š 5faa faa4n 4fa4d 2ff 1fi fii4t 4fj 4fk 2f1l f2lo 5floora 2f1n 1fo folk5 fo4ro 2f1r f2re 3frees 2fs 2f1t ftat4 3fu 3gaa gaa4r 4gaast 4gab 4gaed gag4 2gah ga2hi gai4g ga5is ga3k4 5gam ga3o ga3p 4gart 4garv g4as 4ga4suk 5gata gat4r gau4 ga4va. ga4van 2g3b 2gd4 gea4 ge4du. gek4 ge5kl 4gekse ge4lah gela4s ge4leh ge3lu ge4lä ge4nan geok4 ge4or 4geos 4gerg ge4rus 4gf 4gg 2g1h gi2aj gii4s gi3k 4ginf 4gint gio4r gi3pl gi4san gi4sil gi4sö git4r gi4vaj 2g1j 2g1k 2g1l g4lüt 2g1m 2g1n gne4ta gne4te4 4goh go4le go4ma go4po 2g1p4 2g1r g2ran 5granaa 3g2rav g2ru 3grup 4g1s4 2g1t2 g3tr 3gu gub4 gue4 gu5i gu4nel gu3o gup4 gu4sen gu4sä guu4j 2g1v 2g3õ4 4gä gü4l 3ha haa4ri haa4s hal4lai 5har hasa4 hat4r 1he hee4m hee4s hei4s hek4v 2hel. hels4 het4r 4h1h hhe4l 1hi hia2 hii4s 5hil 5him hio2 hi4san hi4sar hise4l hi4st4 hi4sü 5hits h1j hjaa4 4hk h4kal h4kas h4kis hk3l h4ko4 hk3r hks4 hkt4 h4kusk h4ku4su h4kõ h4kä h1l hle4n 4h1m h4mo4 h4mü h1n hnika5 1ho hom4o 4hp4 hrs4 4ht h2ta hta2j h5tak hta4l ht5ar hta4su h4teg hte4n hte4r h4tid h4to h4tr ht5s4 h4tö h4tä 1hu hu3a hue4 hui4d huk4l hup4 hu3sa 2h1v hvad4 hvast4 hve4l h4vini h4vo hvu4s 1hõ 3hö 1hä 3hü 4ia iaa2 iaa4l ia5alane i3aast i5a4bi ia4bo i1ae ia2g ia2h i3aine i1a2j ia4kr i3akt i1a2la i5alb i3alli i1a2lu ia2me i5amet. ia2na i5andj i5andm ia4ne i5anne ia2p4 i3apar ia5pr ia2re i3arm ia4ru i1arv ia2s ias4ke i5aste. i3asu ia4tel iat4r i1au iau4l i5a4vaj i5avald i1b i4bad i4bau i1d 5ideaa idii4 idlu4 ie2 i3eali i1eel iei4 i1eks i5elani i1elu i3eos ie4ri iers4 i3esi ie5so i5ess ie4st i3eten ietu4s i1f i1g i4ga4g i5gar 5igatsu i4gav ig4ram ih4le ih4te ih4tin ii4a ii4deo ii4du. iie3 ii4es ii4gaa ii4ga4s ii4ha iika4 ii4kis iik4ro iiks4t iikt4 ii4lab ii4lad ii4lae ii4last ii4leh ii4lel ii4les ii2lõ4 ii4lü ii4mai iimat4 ii4met ii4nai ii4nau i5inde i5inf ii3ni i5inimen iinit4 iink4 iino4 ii4nol ii4nos ii4nõ ii4pr ii4ran ii4rau iirs4 ii4rü ii4san iise4l ii4sev ii4sik. ii2ta ii4teh iito4 ii4tom ii4tos iit5re ii4tõ ii4tü ii4ves ii4vet ii2vo i1j i1k i4kalu i4ka4re i4kark i4kaut i4k5elu ike4si i3klaa i3klas ik4ler i5klub ikop4 ikos4 i4kov i3kre ik3ro ik4sar iks4k iks4po ik3t2r i3ku iku3a il4a ila4s i4lasi ilia4 i4lisi il4kan il4kõ ille5s illo4 5ilme. il4mot 3ilmut ilo5g2 ilp3l il4ti i5lun ilu3sa 5ilustu ilü4h i1m i4melu imi4g imisu4 i4mo4l 5imper i1n ind3al 5indeks inde4r ind4re 2ine inee4s i4neh i4neks ini4kü i2nim ini4mas i4nime 5inimene 5iniml i4nini inna5a inni4si 3insen 1insp 1inst 3inven io4de io4h i3oht i5ohv io4j i5oks. io2le i3olek io2lu i5oluk io4lü io2ma i5oman ioo4da ioo4ne iooni3 io2p i3oper i5ork i1osa ios4f ios4p ios4t iost4r io4su i3ots. i3otsi io4tü i1p i3pla ip4lu ip4ro ip4sas ipse4 ip4sep ip4sus i4ra4b i4rase ir4dis ir4nõ i2rui iruu4 isaa4v isa4ja i4sana isa4re i4sarh i4selo i3sem iset4s isi4g i2so 3isola i5soli is5oma iso4r i3sot i3s4pek is3pl i3s4por is3sp 5istand i5s4tiil 5istme ist4ru ist4se i5stsee 5istutu i3su i4sõm i2sü4l isü4r 2it itaa2 itee4l it4rak it4ras it2ru4 its3k it4so itte1 itt4s iu4b iu2da iu4gi iu2j i3uju iu4la iu4mar iu4me4 iu2mo iu4ni iu4pu iu5sa i5uss. iu2su iuti4 i3uu i1v i4vad i4vakt i4va4lus i4vant i4vau i4veh ive4l iviil5 i4vü i1õ2 i1ä4 i1ü2 i1ž j4a 3jaa ja1aj jaa4l jaa4r jaa4s jab4 jad4 ja5el jae4r jag4 ja3i2 ja5kra 5jama 5jame jao4h ja3p4 jas4ke jas4tii jat4r jat4su jau4b jau4l je3lu 3jo joo4k jue4 5juma ju4sei juse4l 5jõ 5jä 1ka kaa4da kaa3de ka5aj ka4al kaa4ra kaa4sis kaa4ta 4kader 4kaed 4kaeg kae3lu kag4 kahe5i 4kaia 2kain ka5ist kaitse5 ka4jav ka4ju. k5a4lus ka4pl ka2pr 4karm 4kaset k5asj kat4r 2k3b 2kd4 1k2e ke4el kee3lu 2kehi 4keks ke4laj ke4lak ke4lok 4kemb 2ken. 5kene keo2 kes2k kesk3a4 ket5ra ket4te4 2kf4 4kg 2k1h4 1ki kie4 kik4r 4kinf kio4 ki4pr kis4a ki4san ki4sik 4kiste kit4r kiu4d kiu3su 2k1j 4k1k k3kra kks4 kku4ro 2k1l4 k2la k3la. 3klaas k3lai 3k4lamb k3lan 3klapp 5klassi k3lat 5klaver kle4a k4lee k2lei 3kleit k3lem k4lib 5klibu klig4 k2lii 3kliim 5kliiste k3lik k3lin k4link k2lo k3loom 3klots k2lub k3lus. klu4sa klu4sõ k4lut 2k1m 2k1n knaa4 k4nip 1ko 2koks k4ol ko4len koo4sa 4ko4rie 4korpi k5osa. ko4va 2k3p4 2k2r k4raan 5kraana 3kraav 3krab 3k4rae k3rai 3kramp 4kran k3rau 5kredii 3k4reem 4kreg 5k4res k5ret 4krip 5kristal k4roh 3krohv k4rook k3rut 3kruu 3kruvi 4k3rü 4k1s k5sae k4sai ksek4 ksi2k ksika4 ksit4 ksk4l ks5kõ ksp5lo ks2pr kst3r ks4tü 2kt kt2ra 1ku kui4s 4kujuj 4kujum kuk3la 4kuks kul2d 2kulp kumi4su4 kummi5 3kus ku4siv kut4r kuu4ni kuuse5 4kuž 2k1v k4van 3kvart 5kviitu 1kõ kõ4de. 2kõi k5õis 4kõp 1kö 4köd 1kä käi5s 2käk 4käm 1kü 2kühe 4küle 4küll. 2kž4 4kš 1la 5laag la4aj laa2r laar5a laa4sa 2laav 5laava 4ladj 5ladu lae4r 3laev 4lahv lai5ek5 lai4ga la4jap la4jav la3k4r lak4v la4la. 4lald la4les 4lals la4lus 3lama 3lamp 4lams la4nes 2lani lap4l 4l1arv 4larü la4sas 4lasb la4sei la4sem 4lasen l2asi 4la4sut 3lau 5laud lau4n lau5su 4lavh 2l1b l4bau lb4lo 4l1d l4dala l5dist l4don l4dü 1le le1a2 3lee leek5l lee4le leep5r le3hi 4lehit 5leht 3lej 4lekk 5leks. 4lektr lektri5 4lele le4lek 5lema. le4mor lenaa4 leo2 le3oh le5olu le4pl le2s 4lese. le3sõ 3let 4lette 4l1f lfoo4 lf4t l1g l4gae l4gai l4gall l4gann l4gase lgas4k l4ge4le l4gi4d l2go l4gu4j 2l1h 1li li4ala li5am lia4v 3lid li4dan li4ga. 4liia liie4 5liig lii4na 5lik. likai4 li3kla lik4ro 4lilm 4li4lus limi4s 4linf 4linim 4lins lin4te 4linv lio4k li3p4l li4sah li4sik 4lisol li4suj li4sõl li4sö lit4r li5tu 2liže 2l1j lja1a lja5os 2l1k lkk4 l4kli lk4lu l3kr 2l1l l5ler lli3tr l2lor l4lots llp4 lls4 llt4 l3lu l4lää 2l1m lmaa4v lmat4 l4mau l4meks lmp4 2l1n 1lo lod4r lof4 lo4gal 4loha 4lohv 5loi lok4r 2lo2l l1ole l3olij 3lolo lo4man 5loog loo4ram 4lord 4lorn 2losa l3osa. 2l1p l3plaa lp4le l4puk 2l1r lrih4 2l1s ls4ka lske4 ls4o lste4 2lt l4tau lti4l l4tok lt4sel lt4sis l4tuk l4tõm l4tää l4tüt 1lu 3lua lu3al lud4 lue4 3lug4 4luhk 4luim lu4juk 4luk. 3lukk 2lun lu4nin lu4nio luo3r lu4rau lu4see lus4tii lu4sum lu4sö 3luta lut4r 3luu 2l1v lvel4 1lõ 4lõd 4lõie 5lõik 4lõis 4lõit lõ4l lõ3pe lõp2p 1lö 4löe 1lä 4län län4gi lääne5 1lü lü3h lü4ma 1ma 3maa maa2b4 ma3abi maa3la maa3p ma4bi ma1e2 mag4l 5mahl 4mahv 4majam 4ma4ju. ma3kl mak4v 3mal ma4la. mal4ma ma4om ma3pl 4mart 4marv ma5se ma5sin ma4st 4ma4sul ma4sä 4maut 2m1b mbat4 mbe2r3 mblu4 mbo4j mb5usa 2md4 1me me1a4 me4an 3mee mee5la mee4s me3hi 4mekv mers4 mert4 me5s4o m4et 4met. 4metl 2metn met4se 4mett me5u4 2m1f 4mg4 2m1h 1mi mia4m mia4r 4mide mi4kaj mi4nah 4minf mi3ni mip4 mi2s mis1a2 mi3si mi4sig mi4sih 4mi4sik mi4sil mis3k4 mis4tii mist4r mis3ts mitte3 2m1j 2m3k4 2m1l 2m1m m4maat mma4s mm4e mme4r mmika4 mmi4kal m4mor 2m1n4 1mo 4moh mo4ha m3oks 4morg 4morn mo3sa 2mp mpa4l m4pap mp3l mp3r 2m1r mruu4 2m1s ms4o ms4p 2m1t2 m5ts 1mu mua4 mu5ah mud4 mue4 mui4m 4muls mup4 5mus mut4ra 2m1v mõ4d 4mõig 4mõp 3mö 4mök 3mä 4mäk mär4gel 3mü 4müh 4mž 1na n4aa na5ah naa4lu naa4r5a nad4 na5ei nag4l nah4ke nai4d nai4si na4kru 2nal4ü 4na4mer na4mii n5amiid nants5a na3o4 nap4l na4ret 4narv n4as 4nasb nass4 nat4ra nau4b 4nb4 4n1d n4daas n4dab n4dae nda4ko nda4l n4dau ndif4 ndip4 n4do4r n4duj ndu4sõ n4dü 1ne 5ne. nea2 nee3la nee4le nee3lu nei4v ne4lah 4nelas ne4lek neo4d ne4pl 2nerg n4es ne4tan ne4tõm 2n1f 2n1g n4gai n4gall n4gase n4gau ng4lü n4go4r ng3r ngud4 ngus4t n2gü 2n1h 1ni ni3ap nia4v nig4 nii4g nii4tu nikkel5 4nilm 5nima nima4s 5nimet 3nimi ni4mig 4niml 4nint ni4sid nis4ke 4nisl 2n1j 2nk n4ka4n nk3r nk4se nkst4 2n1l4 2n1m 2n1n nna3e nna5i nnak4r n4ne4f nnio4 nnk4 1no 4nob nod4 4noks noo4na n4or 2n3p4 2n1r 2ns n4salp ns4e nsk5r n3so nso4r nste4 ns4tee ns4tem nstis4 nst3r ns4tu nsu4s 2nt ntaa4r n4teh nte4l ntig4 n4tiso n4tots n4tr nt3ra nt3re nt4sab nt4sal nt4san nt4sar nt5sü ntt4 n4tüh n4tük 1nu nu4da nui4g nur2k nus4p 2n1v 1nõ nõ4l 4nõli 1nö 1nä 1nü 4nül 4nž 4nš oa2 oa4a o1ae o5aku o3anal o5apa oau4b o1b oba4s 1obj 4o1d odaa4 odaal3 o4deh odu4sõ od4š oe5a4 oe4fe oe2l o3ele oe4mi oe4mu o4eo oe4rah oe4rõ oe4si oet4r o1f of5r o1g og4la og4li 3ohaka oh5to 5ohvits oi2ta oiu5a o1j oju2s okast4 okku5 ok3la ok5liin okoos4 ok3r ok4re ok4ri o5kris ok4ru o3la o4lae olag4 ola4las ola4su ol4do ole4an 3olek. o4lend olig4 o3lii olii4g o4li4lu o3lis 4olj ol4lae ollis4 ol4lü ol4mai 4o3lo ol4tam ol4tar 1olu. 5olukor o4luks olõ4 o4lä 3omadu om4baj om4ban o4mok ona4a o4naj ona4ko o4neh o4nele on4gos onit4r oniu4 onsoo4 ont4re o4nuu 2o2o oo1a oo4kal ook4r oo4kää oo4lau oo4lee oo4lig oo4list oo4log oo4lõ oo4lü oo4nah oo4nar oo4nau oon4dee oonk4 oono4 oo4noh oons4 oon5t4 o5opti oo4rat oo4ree oo3sa oo4sel oo4tõ o3pa op5last. op4lu op3ra op3ri o2r3ai o4ralg ora4mii o4rana 5orav 3order 1org org4r oria4 3orju 5orkeste 3orna or4nel or4tal ort3r oru4s or4võ o2sa o4sake 3osako 4o3sau 4ose o4seks 4osf o2si. 4osin 3oskus 4osl 4oso o4sok os1ol os4pa 4oss os4saj os4sü os5taas os4tem 4osto ost4ru 5osuti 4osõ oto5a otok4 ot2ra o3tran 3otsa o5tsö ot4ta ot4teo otus4ta otü4l ou4b ou4n o1v ovaa4l ovio4 ovol4 o4vu4n o3õ4 oü2 1pa paa4ka pa3a2m paa4tel pa4e pa4lus pans4 pa4pr 5paras 3park 4parta pa4sp 4pb 4pd 1pe pe2a pea5j peas4 pe4au pea3v pe4f 4pektr pela4 4pe4lev pel4t pe4lü4 p4em pe4ol 5perd pe4tap peti4k 2pf4 pg4 2ph 1pi pii4v pik5r pin2d pin4gis pip3r pis5ta piu4g 2p1j 2p1k 2p2l4 4pla. p4laa p5laasi 3plaat p4lak p3lam p5lane. 3plasm 5plastik plek2 3plekk 4p3lem p3li 5pliia pliig4 3plok p3lom p3lu 3pluus 4plõ 2p1m 2p1n p4neu 1p4o 5po4e 3pon 3poo poo4la poola4v pordi5 4p1p ppa4k p4pas ppe3a ppee4 pp3l p2p3r pps4 p4pud p4põ p4pü p2r4 2pra 3praa 3prag 3prakt p5rau p4rep p4resi 4prib 2prii p5riit p4rog p4roo 4p4ros 3p4rot 4prum 5pruu 2p1s ps4a p4sor 3p2sü 2p1t p4tak 3pu pua4 pu4da puha4 pui4t puk4k pul4ti 4purt pus4p 2p1v 3põ põhi3 p4õi põi4s põli4 5pö 1pä pär4gu 4päs 3pü pü3he 4pž 4pš 1ra raal3a 4raale 5raalne raa4lu raamatu5 raa4ta4 4raatt raa4tu 4raav 5raaš raie3 2rain r3aine rai4si r5a4la. ral4t ra4lus 3rame ran4dem ra3om 4rapa ra4pl 4rapt 4rarb ra4ren 4rars 2rarv ra4sal 4rasen ra4sis rast4r ra4suk ra4sul ra4sut 5ratas ratiiv5a rat4sen raua3 rau2d raud5o 2rauk 4raum 4raur rau4te 5ravi 2r1b r4bae 4r1d r4dae r2dar rde3a rd4re r4duj r4dü 1re 5re. 5rea reb2 ree4le ree4ma. ree4man 3reer 3reet 5reg 2rehi rei4se rek3l 4reks re4lai re4liit 5relv re4mää 4repp re2pr rep3re re4sin re3te ret4k re4tr ret5s 2r1f rf4r 2r1g r4gae rg3ah rga4re r4geh rgi4me r5g2ra 2r1h 1ri 3ria ri3am ri5ast 5rid 2rig ri4ga. 3rige rig4r 2riib 5riie 4riinu ri4kis ri3k4r 4rilm 3rim ri5oks rio4r 3rip rip4li 4rip2p 4ri4sa. ri4sah ri4sar ri4ses 4risol ri4tol ri3t2r 5riu 5riv 4riö 2r1j 2r1k r4kad rk5ain rka4se r4kek rkt4 2r1l 2r1m r4mald r4me4le r4mig rmo4ra rmo4s rmp4 rms4 2r1n r4nad r4neh rnk4 1ro roa4 ro3e2 rok4k rol4la rol4le 4romb 2romi ro4nop roo4ga 4rosa ros4po ro5staati rost4r 4rož 2r1p rp5ret 2r1r r3ri 2rs rsaa4l rs4l rs4o r5s2po rs4tak 2rt r4tah r4tos rt2r rt4ra r4tri rt5roo rt4sai 1ru 2rua4 rud4 r4uj ru3kr 3ruma 4rumb 2rumm 4rump 5rus. ru4set ru4sin ru4sul rut4r ruum5a 4ruur 2r1v rva4la rva4lu r4vann rvas5k rvis4k r4voh r4vok 1rõ 2rõ2l r5õli rõn4gu 4rõr 3rö 4rök röö4pe rööp5l 1rä 4rä4r 1rü 4rük 4rüm 4rü4r 4rž 4rš 1sa 3s2aa saa5j saa4lu sa4an 4s3aas 3saba sa4bi. 4sabo s4ad 5sada 4sade s5ader 2s1ae sae4l 5sa5ga s4age sa4gu 4sahv 3sai. 4saia s1ain s4ajan sa4ju. sak4ro 5saks 4saku. sa4kää 4s3a4la. 4salas s4alat 5salat. sa4lev 4salla 4sallu 3salt sa4lum 5salv 3s4am 4samp 4sank 4s5ann s4ant 4santi s4anu sa4num sa2pr sa4ris s4arv. sar4va sase4 3sasti sas4tii sa4suk sa4sum 3sat 4satl s5avald 2s3b2 2s3d2 1se 3sead se3ala s5eali se5aval se4du. 4seela see4le s5eeln see4ma 4seepi 3seer see4si see4ta4 4se4fe 5seg sega5a 2seh 3seha 3seho 5sehu 5sehä 3sei sei4d sei4si 3seka se3kl 4s5eksp se4laj 4selek 5seli 4sellu 3selt 2selu 4sens se5oh seo4k se5om seo4p seo4r 3sep sepat4 4serem 4sese. se4si. 4se4sin s5esit ses4k 3sest 4s5eten se3t2r 4sette 2s1f2 2s1g2 2s1h 1si 3sia sia4h sie4 5sign sig4ra s5i4ha. sii4g sii4sa sii4se 4siits sii4tu si4ket siko4d siks4p sikt4 sik4vi 4sinim s5inime 4sins sio4le si4pro 4sirr 5siru 4si4sa. si3se s5i4sik sis2p sisse3 s5istuj 5sisu 2s1j sja5ar 2s1k 4ska 5skaa5la ska4no 5skeem. s4kela 5skelet s5ken ski4g sk2l s5klas 5skler skuk4 3skulp sku4si 2s1l 4s1m sma4sa 2s1n sne4p 1so 3sobi 3soe s1oht 3soi s5oks. 2so2l s3olek s3olij 5solo so3lut so2ma 3son 3soo soo5o 4so4pe so4pr 5sor. s3orj 3sort 2s1os 4sotsu 2s1p s5per 2s1r 2s1s ssel4l ss2fä ssin4 s4sinf ssk4 ss4ke ss2p s5spor ss2t s5stat ss4ti sst5r s4suss 2s1t s2taa 3staad 5staaš s4tain 4stam 5standard 3start s4tati 5statis s4teno 5stepp stet4 s4toh s4top s4tot 5streik 5strek 5struktu st4so stt4 stu2s stu4s5a 3stuud stä4 s4tär s4tüh 1su sua2 su4bar sud4r su4du su5e su4jul 4suks s5uks. 5sulg sul4ga sun4de4 su4nis supe4 supe5s su4pr 4surb 5sus. sus4aa su4ses s5uss. sus4ti su4sun sut4r sut4ü 4suug suu4ra suusa3 2s1v svus4t 1sõ 5sõda sõ4de 4s3õh 3sõid 4sõie 2s1õig 2s5õis 3sõit sõ2l 2s3õli 3sõlm 3sõn 2s1õp 5sõr sõsa4 2s3õu 1sö 4söd sö2k 2sön 1sä 4säk 4säm 1sü 4süa 5süd 5süg 2süh s3ühi 2sük s3üks sü4la sül5di sü3lem 4sülo sü4ra 3süs 3süü 4sž 1ta 3ta. 3taat. 2tabi 4t3aed t3aine 4tais 4ta4ko t2al 4ta4laj ta4lev tal4las ta3lu ta4lus 3tam 5tama 4tanda ta4ot ta4pla ta4pr 4ta4ret 4tarm 2tart ta4se4r ta4ses ta4set ta4sis ta4sü 2taut 3tav ta4vaj 2t1b4 2td2 1t2e te4aa tea4g tea4h te3an te5as 3tee tee5lu te4et te3hi tehi4s te3kl tek4r tek4v tel4ke te4lok te3lu. 4tepiv tep4l 2tepp 3ter 5ter. te5r4a terd4 4terg ters4 tes4a te4sin tes4k 2t1f 4t1g4 2t1h thõl4 3ti tia2 ti3e tii2k tii4ma tii4sa tii4ve tik4o ti3k4r tik4vi 4tilm 5tima 4tinf tin4ga ti4sai tisa4v ti4sik titee4 2t1j 2t1k2 t3kl t3kr 2t1l4 tlu4 2t1m tmika4 tmis3 2t1n 3t2o 4to4da toen4 tog6 4toks. toksi5k to4lek to4lu. to4lum tonis4 to4o too4no too4pe to4rau tos4p tost4 2t3p4 2t1r t4rad t2raf 3trafo t4rahh 5trall t2ran 3trans t4rate 5traum t2re 3treen t4rei 5treim 3trep t3rig 5triib 5triip 5trikoo. tri4pl t4ross 3trumm 5t4rup 3t2ruu 3t2rü 4trüü 2t1s t3s2a ts4aa tsa5is t4saju tsa4lan 3tsehh tse3la 5tsellu 5tsemen 4tsena 5tsensu tsig4 5tsiitsi t4sink 5tsiste ts4laa t2soo t4sor tsp4 t4suss 2t1t t4tad ttee2 ttes2 t5tsem 3tu 4tuim tu4raj tus1a tu4s5ee tu2si tus3s 4t5uss. tus3t2 tu5su tu4sä4 tusü4 4tutop 4tuud tuule5 2t1v 1tõ 5tõb 2tõi tõ4l 4tõ4n 4tõp 2t5õun 1tö 4töe 4tök töö5k töö3p 1tä täh4t3a tä5ke 4täm 1tü tü5he. tü3hi 2t1ž t2že 5tžek 3tžem uaa4 u3aast ua2b u5abi u1ae ua4he uai4k u3ain ua2ja u3akt ua2l u3all u3amet u1an ua4nu u5apar ua2re ua5ree u5art ua2s u3ast u1au uau4d ua2v u5avald u1b u4dalu u4deh udeo4 udo4r u5eal u3eel u3eks ue2ma ueo4 ue4r u1f u1g u4gi4d ug2ra u5graa u4gü uh4tem uh4ter uh4tin uh4tis uidu5 ui2ga ui4h u3iha u3ilm 5uim. uina2 uinas5 ui4si 3uisut uite4h ui4to ui4vala ui4vel ui4vo u1j u5ja u4juj u4jum 3ujumi u1k ukaa4s ukii4g ukki5 ukop4 u3kraa u5kro uku4sa uk4vi ul4a ul4deh uldi4 ul4kr ul4len ul4lui ultra5 u3lu uluo4 4u1m umaf4 u4mau 5umbroh umet4 umf4 umia4 umit4 um5p4r unaa4 unaal5 un4dak un4dan un4das un4do u4ni. u1o2 uo4h u2or u3org u1p u3pla up3le uppe4 up4pis uraa4l u4rag ura4ju u4rala u4rap ur5auk ura4va 3urb. urde3 urea4 u4reos ures4k u4rett urgas4 5urge. u4ri4met u4rini uris4k urka4v uro4r u4rulu u2sa2 u5sa. usad4 u4sae u4salu us5aste u3sea useg4 us5elek u4sett u3setu u5sev us4fä us5g u4si4d usi4g u4si4h us5ind usi4va us3kr u2so us5o2h us3ole uso4r us3p4 u3s4por usui4 3usuli u4suss u2sõ u2sü us3üh u1t ut4kl utos2 utot4 ut4ru ut4so utt4r utu4s utü4h uu5al 4uud uu4du. uu4kak uuk5ri uu4mal uu4mis uu4pü uu4ran uu4ras uu4rau uu4rav uu3sa uusa3k uus4ke u3uss. uu4sul 4uut uu4tas uu4tis uu4tüh u5uuri u1v u4vau u1õ2 uä2 u3är u1ü2 už4l vaa4re4 va4as 4vabi vae4r vag4 va5he 4vaia 4v3ain vak4v va4la. va4lai 4valdi val4ga4 va4lü vana5i vane2 4vanku van4ta van4te vap4r v4ar 4varm var4p 2vart 4varuh 4varve va4sas vas4k vast4r vat4r 4vatud vau4d vav4 4vb 2v1d 3ve vee3a vee3k vee5la vee3sp 4vehi vei4sa ve4ol veot4 ve4rah ves4p 2vf 2vg4 2v1h 3vi via2 vid4 4videa vip4 vi3pl vir4k vi4sak vis4ko4d 2v1j 2v1k 2v1l 2v1m 2v1n voo5lu 2v5p 2v1r 2v1s 2v1t2 v3tr vu4sa vu4su4 2v1v 3võ 4võig 4võ4li 4võm võr4k5 3vä vää4re4 vää4ru 3zo zook4 zoos4 õ1b õbe3 õ1d õea4 õe4lan õe3lu õet2 õeu4 õ1g õh4vu õi4a õi4b õie5k 3õiel 3õigu õi4ko õise4 õi4su4 õ1j õk4kõ õl2d õ4lim õ4lit õl4mad 3õmbl õnet4s õ2p õ3pa õpi5e õp2pa 4õp3r õranda5 õra4s õr4da õr4gaa õr4gar õr4go 4õs õs4a õ4tü4 õude3 õ1v4 õõ5p õõre4 õõ4rel õõ4ta öa2 ö1b ö1d 5ö2dee ödi4k 3öeld öep4 öet4r ö1g4 ö1h öi4a öi4g öi4s ö1j ö1k ö2kon 3ökono ök4v ö1l öli2s ölis5a ö1m öo2 ö2p3au öp4lu ö4raa ö4rau ör4da ör4dell ör4e ö4ri4l ö4ro4 ö4rä ö4rül ös4tii ö4to4 ö4tü4 ö1v ö3õ öö3a öö3e4 öö5i 3öölan öö3o ööt4r öü4 äa4 ä1b äbus5 äbut4 ä1d äe3a4 äe1o ä1g äga4ri ähe5a äidi4s äike3 äi4lo äi4lu äi2s äisa4 äi4sõ äi4tar ä3j ä2ke 3äke. ä5ker ä4kõ äli2s äl4ko 5ämbl ä4nah än4deo änet4 än4to4 äok4 ä4ra5a ära3o4 ä4rar äre4lis äret4 ärge4l ärii4 äri4kl äri4sel ä4riste är4kar ä4ro 5ärrit är4ta är2va ä4rõ äs4ko äs4nai äs4p äs4san äs4so ät4ri äu4d ä1v ävee4 ää4kin ääo4 ää4rase 5ääris. üaa4 ü1b üdame5 ü1g ü2h ühe5i4 1ühen 3ühik. ü3hit ü1j ükan4 ük4kas ük3l ül2d üld5a2 ü2le 3ülek ü5lel üle4mas 1üles ülesä4 ül4gav ül4gee ü4lih ülii4 3üliko ü4liõ ül5kl ül5la ül4mei ülo4r ülp4 ült4 üma4rak üma4ru ümi4ko ü5ne üni4s üot4 üp3l üp5p4 üp3r üpsu4 ürd4 ürik4 üs4o üs4pr üs4tal üs4tas üta4r ütee4l 5ütlev ü4t3r üt4ru ü1v ü4ü üü2l3a2 üü4le üü4lo üü4pe 1ža 4žb 1že 5žee 5žer 4žf 1ži 4žj 4žk 4žl 4žm 4žn 3žo 4žp 4žt 5žö 5žü 2žž 3ša 4šak 4šau 1še 3š4i šis4k 4šk 5šo 4št 3šu4", ["length"]=23265, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=3691, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sv.lua0000644000175000017500000010502212161703335024672 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="sv", ["source"]="hyph-sv", ["texcomment"]="% Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03)\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: sehyph.tex (2003-09-08)\ % Author: Jan Michael Rynning\ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % Swedish hyphenation patterns.\ %\ % Copyright 1994 by Jan Michael Rynning. All rights reserved.\ % This program may be distributed and/or modified under the conditions of\ % the LaTeX Project Public License, either version 1.2 of this license or\ % (at your option) any later version. The latest version of this license\ % is in http://www.latex-project.org/lppl.txt and version 1.2 or later is\ % part of all distributions of LaTeX version 1999/12/01 or later.\ %\ % Last update: 1994-03-03 (March 3, 1994).\ % Revision history:\ % 1991-01-08: First version available for anonymous FTP.\ % 1991-08-08: Changed \\aa to \\aa0 at end of line, to stop TeX from\ % concatenating the patterns.\ % 1991-09-03: Cleaned up lots of inconsistencies in the dictionary.\ % As a consequence, the patterns shrunk a lot. Also\ % added some 4000 one-syllable words, some of which were\ % hyphenated by the old patterns, and some 1500 compound\ % words, about half of which were incorrectly hyphenated\ % by the old patterns.\ % 1991-11-01: Added another some 6200 compound words, all of which were\ % incorrectly hyphenated by the old patterns.\ % 1991-11-13: Added another some 6500 compound words, all of which were\ % incorrectly hyphenated by the old patterns.\ % 1992-01-30: Changed macros to ^^, for use with LaTeX and dc fonts.\ % 1994-03-03: The hyphenated dictionary now contains about 118,000 words.\ % The hyphenation now works much better for compound words.\ % Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1 10000 4.\ %\ % This file contains Swedish hyphenation patterns for TeX. It assumes\ % that you have fonts with the Swedish letters in the positions where\ % they occur in ISO Latin 1 (ISO 8859/1):\ % Letter: \\AA \\\"A \\\"O \\'E \\aa \\\"a \\\"o \\'e\ % Position: \"C5 \"C4 \"D6 \"C9 \"E5 \"E4 \"F6 \"E9\ %\ % Load this file into initex after plain.tex (or lplain.tex, splain.tex,\ % or whatever).\ %\ % The patterns were generated in such a way that they will hyphenate\ % correctly if \\lefthyphenmin>=1 and \\righthyphenmin>=2.\ %\ % These hyphenation patterns work quite well for simple words, but not\ % quite as well for compound words. I'm working on improving the quality,\ % by adding more words. If you know any Swedish words which are not\ % correctly hypheneted using these patterns, or if you have questions or\ % comments, please contact me:\ %\ % Jan Michael Rynning \ % --------------------------------------------------------------------------\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzäåéö", ["data"]=".a4b .ab5i .ab5ol .ab3r .ac3 .a4d .a3dr .ad3s .a5g4ra .a5gre .a5kl .a5le .al4pr .a3lu .am4br .amp3l .a5mu .and4rar .a2n5es .ang4er .an5go .an5s .ap1p .as2k .a3sket .as4t .a5sten .a3sti .a5ta .at3t .au3st .a4val .av3s4 .b4 .bak5s .ben5s .bild3s .bo2k .bort1 .cis4 .cy5klop .d4 .där3 .ek1v .e3l4a .e2l5in .en5st .e4nä .e2r3i .e2s .e5skad .es3kal .es5kap .es4t .e5strad .e3tr .evan5 .ex3 .f4 .feb3r .fram3 .fres5 .fågel3 .för1a .för1en .g2 .gu4lä .gus3 .he2m .hu5sa .ib4 .ik4 .im3p .i2n1 .i4na .in3d .in4ger .ink2 .in3s2 .in3t .is5ka .i3so .k4 .kans4k .ko5li .kort5s .kring3 .krings2 .köp5s .l2 .lak5r .lek5tr .lu2st .m2 .mas2ke .ma5skeri .me4re .minis4 .mjölk5s .mon2s .mån3s .må4st .män5sko .mörk5r .n4 .ner1 .no4n .nöd5r .oc1ku .ok3t .o3kv .o2ma .o2mo .om3s4 .o3mu .on4k .o3o .ord3s .o5sc .o1s4k .o3sl .o3stra .o3sv .o3tr .o1u .p4 .papp5s .pa3ste .pa5sti .pi5sti .pres2s .pub3lika .r2 .re4gr .re2ste .runs4 .rym2d .röve5 .s4 .sa2k .seg3r .si5o .sjö1 .sk4 .skott3s .slut3s .st4 .sta2m .sten3s .string4 .sup3p .t4 .ta3bl .ta4k .tak5l .tes3ta .tig3r .til4l .ti3o .topp5s .tred2s .tre3s .trä5k .u3k .ult5r .ung2e .up2 .u4ra .ur3s .u2t1 .u4ta .u5trer .ut5s .v2 .var4t .vatten3 .ved5s .vä2g .väg3s .x2 .y2a .y4e .ång3 .år4s5 .å3st .åter1 .ä3ro .ö3ro a2b ab4bu a5be abel4s abe2s ab1l ab3la ab3ort ab5ric ab3rio ab4sc ab4sk a5bu ac4kes ac4kis ack3sk ack3u4p a5dag a5dek a5del ad5ep ad3j ad3op a5dran a3dre 1adres ad3ril ad3ru ad2s a5ed af4fo 3affä 1af3ri af4tor a1ga aga4ra a1ge a2ge. ag1gr ag1l ag5ord ag3ro a4gur a4hj aib4 a3iv a1j a3ka a4kart a5ke a1ki ak3n a1ko ak5ram akri5s ak3rob ak4sta 1aktig ak3tri a1ku a5kvari ak3ve a5kår ak5åt 4akö a1la al5adm ali2br a2lin a5lin. a3line al3ins ali5stik a4lj alk3ak al2kv al4kä all3st al3lå alms4k a1lo al5ort als5pa al3tr al4tu al4tä a1lu alu5s alv3s a1ly a4maf am4i am4pr am1s am3åt a3mö ana4bo an3alf an3ark an3c anci5 an5dak andel2s an4dun an4dän a4nef ang4es an3gi an1gr aniu4 ank3r ano2i a4nok a4nop an5sce ansis3t an4sj ans5ku ans3li ans3par an1st an4sto an4sty 1ansvar an4tj an4tre a1nu a5ny a3nö a1o a1pe a2pe. ape4n3 a1pi ap4lan apo3str 1appara apps4k ap3ric ap3rif a5pris ap2s ap3se aps5l aps3p apu5s a5py a5pä 2ara a4rann a4rarv 1arb 4arbi 2arbo 4arbr ar3dr ard5st a4rend arg5si 2arh a1ri a4rigen ar3ka ark3lan ar5kr 4arl 4arn. ar4nal a1ro a2rob 4arp ar2sa ar5skal arsk5l ar2sv ar4tro arts5p ar4tur 4aru a4rur a5rus ar4väg a3ry a3rä 2asa asbe4 a1sc as2h asis5t as3kis a2sko a4skr as3ku as5l as3pa as3pig as2sk as2s5op as2sp as2st ass5up as3ta a5stard as5ter as5tiker asti5o as3to as4tr ast5rak a5stral ast3rol as5tör a3su a4sul a4sund as2ut as3v a1sy a2s5å a2sö a1t ata5ra a5te ati5ö a4tj a2tr a3tral 4atrar a4t3re at3ria a3tric at3rie a5trik a3tris a3t4ro a4tro. at4ska 1attac at2tak at4tj at4tos att3s a4tung 2au au5b au2t5a 3autom aut5s 2a1va a4vart 1avg 2a1vi av3r 4a3vä a5å 1b2 3ba ba4di ba4do bad3s4 bak5l ba4ko ba4ku bank5l bas4ta ba5stu 4bb b4bak b4batt bbb4 bb3l bb4ler b4b3r bb4so 4b3d 3be be3d4r be5e be1k 4beld be5lu be3ly be3lå be5lö beng4 be3nå be1rö be1s be3sl bes5s be4sta be4ste be5su be3tr be3tv be3u 4bex 2b3f 2b5h 3bi bi3d4 4binv bis3ko bi5skv b3je b3k b5lar b5lat ble4mo b5len 5blera 3bles 5blid 3blikr 3bliks 4b3m 2b3n 3bo bo4gr bo2kl bo1mu 5bon bors5te bor4ti bort3r borts2 bort3sl bo1s bo4sc boy5 4b3p 2b5raf 4brar 2b5rati 3brik. b3rika 3brike 3briks b5rikö bru4st 3bry 3brö 4b3s b5sce bs3ch b4slan b4sof b4sp bst4 b4stj 4b3t 3bu bund4s bus2st b3v 3by by5r 3bå bång3 båt2s 3bä 3bö bör2s c2 5cap c3c 1c4e cens3t 3centr ceu4s 4ch. 3chau 3chef 5choc 4cht chäs3 chör4 1ci ci4lu cim2 cipp4 4ck c3ka c3ke c3ki ck5j ck1l ck5lis ck3n c3ko c4kordn ck3org c4kort ck3r ck4re ck3sla ckus2 ck3va ck3ve ck3vä ck5ä ck3ö cle2a co2a co4m 4cr cros2 4cs 1cy 1d 3da 5da. 4dadr dags3 2dak 5dako da3li 5dam da3må 4dand. 4d1ap 4darb 4dart da4tr dat5t 4dax 2db 4dc dcen3 2dd ddd4 ddi4s d3dj d4dos dd3ra dd3re dd3ri d3drä dd2s dds3v 3d2e de1k4 4deko 4deld del2sa dels5ti de5lut d4en denti5ö den2to de3pr 5der der1k de2ro de5rol der5sti de4ru de2s de3se de3sp des3ti d4et de3tr 4dex 2d1f dfö3ra 2d1g d3gl 2d5h 3di dias4 di5el di2gr di3ka di5ku 4dinf din3g4o 4dinr 4dins 2dinsp 4dint di1o di4od di3sc di4sj dis3ko dis1kr dis1p dis5to dis3tra di4tre 2dj d3jor djup5p 3djur 2d3k2 4d5l 2d1m 2d1n 3do d2ol do5lo 4domr dom2sk 5don do4pak 4d5ord 4dori 4dort d5ost do3y 2d1p 2d2r2 d3rad 3d4rag d3rand d5rarb d5rassera d5ratu 3drej d3ren 5dres d3ret d4ric 3drif d3rig 4d5rik d3rin 3d4riv d5roc 3dropp d3ror 4drot drotts3 d3räkn 3dräkt 5drän d3rät d5röd 4ds d2s1an d2se ds5enh d4sf d2si ds3ins d2sj dsk2 d3skef ds4ken d3ski ds3kl ds5kn ds1l ds4lot ds4mo d4små ds5nå d2so ds3pl ds3s4 ds3tal d5stat ds4te dste4a d5stig ds3tin ds5tro d2su ds1v d2sö 2d3t 3du dub3ble 4dup du1s du2sc du4ste du5sö 4dut du4vu 2d1v d3vr 2d3w 3dy dy4kan dy4ro 4dz 5dåg 2dås 4dåt 4däg dä2r 3dö döds1 4dög 4döp d5öst dé4 e1a e2ake e4am 4eb e2br eb3ril 4ec e3ch echiff5 ecis4 e3co e2d e4dans edd4r edi4u ed3j e5dral ed1sk ed2sko ed3s2l edso4 e3då e1e e2ed e4ei ee2k5 e4en. e4ene e1f ef4s 3efte e1g e3ga e3ge ege2l eg1l eg2ler e3glera e5gleri e4gran eg5rat eg3rin e5gru egs3 e5gå eig2 ei5gn e3ik e1in ei5sh e1isk e1jo e3ju e3jä e5jö e3ka e1ki e1kl ek3lat ek4le ek3n e1ko ekord5s ek3orr ek4ret. ek5ro e1ku e1kve ek5vis e1ky e1kä e1la el1akt el4arb 3eld. eleb3r elekt3ri el4fra eli5ku el3k4 el3li ell3s el3lä e1lo e4lob el3p el2si el5ug e5luv 2e1lä e1m e5mat e5mis emon1s em5ort emp5le en5art e2nav en4ce e4ned e4nek ene3rö 2enj en5klo en3kn en5kr en5kä enning5 ennings2 eno2m en3si ens5ke ens2m en2sp ens4te ens4vin en4så ent4ha en2t1r ent4rat. ent3rati ent3ri ent5ru e5nus 2eny 2e1nä e1o e2og eo4i e5or 2ep e1pe e1pi e3pla ep5le epp2s3 epps5t e1pr ep3s ep4tr epu3b e3på er1ak 4eras er3d4 erg4l er4gu er4gås e1ri e5rib e4rinf erings3 eri5stik erk4lin erlä4 er5na e1ro e3rob e2rom erp4 er3ra er5sc ers4ken er3sl ers4le er4sta er2ste er3str er3sv e1ru e5rum e3ry e5råd e1rä e2sal es5all es3arm e1sc 2ese es4hi esi4u es2k e4skan es5kar e4s3ken es3ker es5kul e1sl e5slag es2mi e1sp es3pl es2sk ess5lä es2st e3stal es5ten. esti2ge es3tin es5tor. es4tr est5rer e3stru est4rö e3stå es2u e1sy eta3b e5ti eti3ö e1to e5tri. et3ris e5trä et2s ets2ad ets3kr ets1l ets3m ets5pa et4sv ett3r e1tu etu4ri et4va et5vu e1ty 2etz e1tä etäc4 euk4 e5um. e5up4 4eur eu4se. eu5tro e1v e4varm e4vj ev3r 3exp ext4r 4eä f2 3fa fac4 fac5ke 4fans 4farb fa3sh fa4st fa4tö 4fav 4f3b f3d 3fe 4fef fe2l fes5ta fe3sto 4fex 2f1f fff4 ff3l ff3n f3fo ff3r ffs4 f3fä ffö5re f3g2 f5h 3fi fi2br fib5rig fi3li fin5sm fi3skal fisk3r fi2ti 2f3k 1fl flo4da 4f3m fma4 1fo 4fof fol2 folk1 2f5om fo2na for4mo fost3r 4f3p fra2m fram5p f4rer 5freri fre4s f4ri. fri5sp 5frit fros5ta fru5str från5 2f3s fs2k f4sl f4sm f4sn f4sp f4st f4sv 2ft f3ta f4taf f4tak f4tap f4tarm fte4r f4tex f3ti f4tin f3to f4t3r ft2sa ft4set ft2s5i ft4sj fts4t fts5vä ft5t ft1v 3fu furs5te fu5ru fu3tu 4fv 5fy fy4ma få3tö 1fä fäs5ti 3fö fö2ra fö2ren fö2ri för3k för3sm för3su fört4 för1ö ga5br 3g2ag 4gakt 3g2al gall3s ga5lä ga4no 2garb 4garm ga2ro 4gart ga4st ga4su 5g2ati gaus4 g4av g5avsn 4gax 2gb 2gd g3d4r ge2a ge5b4 2gef 2ge4j g2eli 3gelis gel5st gel5y 3gelä gel5än g4em ge4nap gen5g 3g2eni 3genj 4genm genom5 gen4sa g4ense 1g2ent 4genv ge5ny 3genä ge2o 1g2era 4gerarb 3g2eri gers5n 5gese ge4to get5s 5g2ett 2g1f 2gg g1ga g4gap g1ge gg5g gg1l g4gos ggs4la ggs4m gg3s4t gg3s4v g4gu 2gh gh4te 1g2i gi1o gi5sn gi4ste gis4tr gi5stral gi5st4rat 3giv gi2ö g2jo 3gjor g3jä 2g3k2 2gl g4lans g1lar g2las 5glase glas5k 5glasö g4lid 4glj g4lög 5glöm 2g1m 2g1n g4nag g2no 1g2o 3go. 3gol gon3s4 4gont 2gord 4gorm 4gort go3sl 2g1p g2r4 3graf 5gral gra2m5 5grans 4gras 5grec 5grett g3rig 4g5rik 5grip 3gris g5roi gro2v 4grum grus5t g4rå 5grå. grä4n 5gräns 2g2s gs1an g5satt g3sel g4sf gsi4d g3sju g5skaf gs4ki gs3kn gs4kot g3sky gs1l gs1m g4sme gs3n gs4ni gs4nö gs1or gs3pl gs3po gs4por gs5pre gs3pu gs3s gs3tak gs3tal g3stark gs4ten g3stif gs3till gs3tj g3stol gs3tra gst4re g3stäm g4sug gs1v g4s3ve gs3vi gs3vå gs3yt gs1ä 2g1t g3tr 1g2u 4gug guld3 gul4da 4gulä gu2ma 4gup gu5ru gus4k 2gut g3utb 2g1v 4gw 3gy gytt3j 1g2å gårds5 2g5åri g4äl g2är gä4s 1g2ö 4gög gö5ro 2g5ört 1h ha3bl ha5ge ha4li hal4so halv3å ham4st handels3 hands4l han5g2a ha5ra ha4sc ha4sp hasp5l has3t hav2 havs3 h5c 4hd he4at he4fr he4lä hets1 hets3t hets3v h3g h2i 4hir his2sk hi4t hjäl3s h1k 2hl h4le 2hm 4hn h2na h2nit ho5nu hop5plo hop3s hos3p hos5ti 4how h3p h5ru h1s 2ht hu2s hust5r hyg5r hys4t hys5ta hy3ster hård5s4 häll2 hälls1 hälso3 hä4ri hä4s hä4var h2ö hö2g hö5gen hög5r hörn5s hö4s höst5r i1a ia3fr ia3g ia4lu ia4sk ia3tr i2b3l i5bril i3ca i4ce. i5cha ic4kord ick3u4 i5co i2d iden3s id4ge i4dom id1r id3ro id2s ids3v i4dun i3då i4dö 2i1e ifes4 i5fn i1fr 3ifrån i1g 4igan i2geb ig5ej ig1l ig3no i3i i4kart i1ki i3klo ik5län ik3n i1ko ik3re i5krob ik5rof ik5ros ik5s2h ik5skor i3kul i3kum ik5u4t ik1v i3ky i3kå i3kö i1la il4dan i2lin il1jö il5k il5lak il4lik ill3s2 3illu il5lär il2min i1lo il2tj i3lu ilufts5 i4lup i5lä im2b3r im5sm im4so i1mu i5må i3mä i5mö i4nau ind5skä ind5sti 1indu in4ga in4ge. ing4es. ing5is in5glas ings5te i3ni i4nif in5j in5kve 1inneh 5inre 1inri 3inrä in4sem in3skrä in3sl ins4m in3sn 1inspe 5inspeln in5spr 3instink 3instru in4stå in5te 1intr in4tra int3s i1nu i4nun in3ym i1nä i5oc i1og i3ok io4kr i1ol io5li i5om ion2 i3ono ions3 i1op i1or i1os i1ot i1pe i1pi ipos4 ip5pi i3ra i4res i1ri irk5l i1ro iro3p i1ru i5sce isel4 is2h i2sk is5kep isk5na is3kopa is3ku is4kun is3ky i5slam is3län is3m is3n i2s3p is4pri is3sa is3se iss5n is4s3tr iss3tä i1stal i1stans ist5att is5ten. i1stent is4tes is3tig is5ting is5tor. is5tore ist5ro istå4 is5v i3sy i4så i1t it5c i4tei i4tex i4tj it5ran i5trin i3tris it2t5op it4t3r it4tu i2t5å 4i1u i1va i2vak i1vi i4vin iv3r iv2s i1vå ix2t ix5tu i1ö 1ja 3jakt. 4jarb jas5p 2jb 2jd jd3r jd4sty j4du 1je je2a 5jef je5sta 2j1f 4j3g 4jh 1ji 4jin 4jk j4kl j3ko jk3v 2j1l 2jm 2j1n j2o 3job jo4kr 4jolj jo5lö jor4din jord3s4 3jou 4jp j5pl 2j3r 2j1s j5sa j4sk js4me js4te 2jt jts4 2j2u ju4kos juk3s jul3k 4jur jus5kr juss4 jus4t jus5ta jut4sta jä5lo jäl4p5r jäl4sa järn3sk jär5s jör2s jös4t 5jé 1k2a 3ka. 3kad. 3kade. ka4dr 2kaf 5kafä ka3i ka5ju 2kak k3akti 4kalf 4kalg kal4lo kall3s 3kamp 3kamr 3kan. 4kand. 5kano 2kap 3kapi ka5pla kap4pr kaps5t 5kapten 3kar. ka3ra 4karb k5arbet ka5ri 4kark 3karna 4karp karp5s 4kart. 4karte 4karv 3kas ka4sk kas3ti 3kat. 3kats. 4kau 2kb 4kc 2k3d4 kdom4 1k2e 3ke. 2ked. 2keda ke3dr ked4s ke4er 2kefu 4keld kels4 4kense ke5nå 2kep 3kern ke2s kes3s 4kex 2k1f kfö2 kfö3ri 2k5g4 2kh4 kid3s 4kif 1kig kik4s kilt4 5kimå king3r 4kinne 4kins 2kint ki4nu ki4tr kiv3s 4kj 5kjol k3jä 2k3k kl2 1klag k2lama kla4mi 3klang. 3klass 2klat 5klav 2kle k2lej 2klig k2lim 3klip k2lis 5klist3r k5lock. 5klocka 3klos 1klub 4kluk 1kläd 2k3läg 2k1m 2k2n k4nal 3k4nap 5knip 3k4niv 3k4nu k4ny k5nyk k2o 4koc ko5de k5odl kog3n ko4gr kog4s3 4kola ko2lin 4kolj kol5tr 5kolv. 1kom 3komm 5komp 2k3omr kom4s 1kon 3konf 3konst 3kont ko3nu 1kor 3korg ko3ri 2korr 3korres 5kortera ko5s4k ko3sl 3kost ko4str 4k3ou 2k1p k2r4 3kraf 5kra3ge 4krang 5krera k4reten krid5s2 1krig krigs3 krings2k 4kriv 3kropp kropps5 kru5stad k3ryg kråk5s krå4pa k5rädd. kräk5l 4kräl k3rät 2ks ksaks5 k2s5as ks3ch k4ser ks2k4 ks3kl ks5kra ks5kv k3skä k3skö k5slag. ks2li k5sly k2so ks3pl k1s4t kstavs3 ks5tid k2su 4k1t k4tex kti5ge k4tinn k2tins k2tod k2tom k2tr kt3re kt3rin k5trod kt5rog kt3rol kt5rät kt2st kt5t4 k4tug k2tut k4täl 4kug k5ugn ku5la 4kuld 3kulö kum5pl kungs5 5kunn ku4pen ku4ro 3kurs 3kus kust3a kv4 3kvali k5vare 3kvarn kvar3s 3kvart k4vato k2ve 2kvente 1kvinn 5kvire k4vo k1vå 3kväll k1vär kydds3 ky4lin 3kyrk käl4m 5kämp 5känn 3käns 3kärl 4kög köks5t 5köp. kör4l kör4sl 3la. 1lade. 2ladm 4ladr 2laf 3lagd. la4gin 5lagm lag3r 2lak 5lakan. 5laki 3laktis la5lo 3lande. lan4di 2lappara 2larb 1larn lar5s 4lart las3h 4lask la4st 5laste. 1lat. la5tr lat4tis 2lau 2lav la5vu 2lb4 4l1c 2l2d lder4s l3dj ld3ra l5dry lds4an 1le 3le. le4ge. le5ig le2kl le4kv lem4sö 2l5enl 3ler. ler5k 3lern ler3ste le5s2l le5tå le3um le4vu 2lex 2l1f 2l1g l2gj l3g2l lgs4 lg5st 2lh 1li li5ch 3lif 3lig li4go lig3s lik2l li5kli lik3s 5limer 2lind 2linga. ling5o 4lingr lings5t 2lini 5linj 2lint li1o 2lip lis3c li4sta li3strö li4vo livs1 l2jak 4l1jo 1lju l5jå l1jä l3jör 2l1k l3ke l5kju l2kl lk5lag l5klä l2kr l3k4ra lk3t l1la lld4 ll3dr lle5b ll3k ll1l l1lo llok5v ll3p ll4san ll2se ll3ska ll2so ll4sva ll4tig ll3tr l1lu ll5un llust3ra ll5v l5ly lläggs5 l5löd llör4 ll5ört 4l1m l4mol lm3st l1n lo2af loc4ku 4lodl lo4do lod3st lo2ge. 2lolj 2lom 4lord 2lorg lor4s lo4vo l4pak l1pe l1pi l5pla lp5lö lp4st 4l3r 2l1s l2sc l4sjo l4sjä l2sk l4skensv l3ski lsk3n l5skot l3skrä l3sky l3skå lskå4p l3skä l3slu l4sm ls4mo ls5nyt l2sp l3spe ls3pl ls3pol ls5s l2st l3sta l4stak ls4te ls5ter l3sto l3sty l4styg l3stå l3stä l5stö l2su l5sur l2sv l4svi ls5vid l4så 4l1t lta2tu l4tef l4tif l4tih l4tos lt5rati l4tret l4trö lt5sk ltu4 lu5i luk4to 4lull. 2lun lung3 2lupp lu4pu lus2s5p 5lust. 4lutb 4luts 2lv l1va l4varm lvers4 l1vi l4vos lv3ri lv3sp l1vä lväv4 lycks5t ly4gat lyg3r lyg3s2 3lyste 5lystn ly4str 2lå. låg3s 1lång lång3s lå4sk lås5te lå4stå 4läc läg5r 1länds 5längder lä4san lä4sp lätt3s 4löl 4löm 3lön 3lörer 1lös lö4vä 3lé 1ma ma5fr mag5n mag5s ma5ju mak3r ma3li mand4 mang2a man5g4o ma5ni mani1k 5ma3ri mash5 mas3ko mask3ro ma5skö mas3ti mas4v 2mb mb4sk 2mc 2md m4dat m4di m4do m3d4r 1me 2meds me4du me4kl me4ko 4meld melo5 me5lu men5k me5nu me5ny mer2sko me4so mes4t me3sti 2meta me5trin met3ro meu4 2mex 2m1f m4fes m4fn 2m1g4 2mh 1mi mid3s mi4lu 2mind ming4o 4mink min4kr 4minv mi3nö mis2 mi5sf mi4sp miss3t mi4te. mi4tr mitt3s 2m1k 2m3l 2m1m2 mme5d mm3s4 m4mul 2m1n m2nam mnas3t m4nav mn5dr mn3g4 mn5st mn5tu m2n3å 1mo m4od mo4i 2momr mo3na mos3k mo2ta mo4tin mo4tu mot3v 2m1p m2pak m4part m2pl mp3lad m5plane mp3lat mp3lin mpos4 mp5p4 mps4k mp5sp m4på 2m1r 4ms m4sal m4ske m3slag ms3lä ms2m mste2 m1sto m2str mst3rin ms5äp 2m1t 4mud mulls3 mult5r 5mum 4mun3g4 mun4ko 3mur 3musi mu3sta mut4sl 2m3v 1myn mys4te måg4 1mål. 5målet. 5mån. 4mår må1s 4mäg mäk3 1män mäns4 3märk 1mäs mäs5ta 1mät mö4bl mö4gen. 3möj mör4kl 3mös 4möv 1na 3na. 3nad nads3 2naf na5gr 2nak 3nako 3nakr na3kro n1akt 2nalf 5nalfl 4nalg nal3s na2lu n5amb 5namn 4nand. 4nanv na4rap 2narb 2nark 4narm 2nart nast3r 2nb4 2n1c n2ch n3cha n3che n3chi ncis4 ncyk3l 2nd n4dak n4dav nd3d4 n5de nde3s n4dil nd5rak nd5ras nd3rat nd3ri n5dril n3drop nd5ros nd5skal nd3sn nds3or nds5vä nd5ås 1ne 3ne. ne4di 5nedl ne4d3r ned3s ne4dö ne2gr ne5gres 4nek. ne5ly 4nenl ner5sm nes3s4 ne4sta ne5s4ti ne3tre ne1ut 2nex 2n1f4 nfalls5 nfis3 2ng1 n4gar n4gen. n4gend n4gens n4genti n4germ n4get n2gi ng3ig ngi4s ng4ly n2go ng5om ng3or ng3rad n4grö ng4ser ngs1k ngs3pa ngs5tim ngs3val n4göd 2nh 1n2i 4nid ni5ec ni4ki ni5li 3nin nings1 nings3k nings5v ni1o 4nip nip4pr ni5steri nist3ra ni3t4r niv5sk niv5st 2n1j n4jar n3jun nju4s n3jä 2nk n4kart n1ki n4kis. n3kny n1ko nkrafts5 nk3ri n1kro nkrus4 nk5sl nk3sp nk4tin n1ku n1kö 2n1l 2n1m 2n1n nn3d n3ne nnis4 nn3k nn3s4t 1no 2nodl no4kl 2nolj 2nomr nom3s4 2nord 2norg no5sa no5sc no4tu 2n1p 2n1r 4ns ns2i n4sint n4sis. n4sise ns2k ns3kan n1ski ns3kor nslags5 ns5las ns5mit n4soc n1spi ns3pl ns3po ns3s4 n3stans n3stap ns4tel n3stif ns3tig ns4tra n2strik nst5up nst5vil n3s4ty n1sva ns3vi ns3vär 2n1t n4tark nter5s4 n4tinf n2t5omb nt3rad n3trah n3trak n5trala nt3rali n5tram nt3rep n3trer nt3ria nt3rin nt3ris n4tropin n4tror n4trö nts3c nt4se nts5kor nt4str n4tut n3två nufts4 4nug n5ugn 3nui 3num nums5 2nup n3upp 2nutb 2n1v ny5gr n5z 4når 4nä. 4näc 3näm 3nät 4nög4 3nöj nö2ja nö5kr 4nöl nös4 nös5ke o1a o2ard o2b 5o4bj o4bli oby4 oc4k5r ock3sk oc3ku o2d ode4k odi4a 1odli o5dral o3dro ods4k od2st ods4ti od5stu o3dä o1e offs5t o4fl o3fr oförmå4 o1g o4gav og3gr o4gj o5glo o5gly ognos4 ogno5st o4gri o4grö og3se og4s3t o4gä o1i o4il o1j o1k o4kli ok3n ok3sl ok4su o2kv o1la o5lak ol5au olfö4 1olj ol3ka olk3r ol4ku ol4kä oll4si oll5slä ol3lä olm4s oln3s o1lo olo5kv ol4sa ol4tå o1lu o4lug o4lur o1ly ol5år o1lä om4brä o3men o4mord om5pa om3pl 1omr 4omra om1sk om4ste 3omsät om4tr om3tv on3c on5gi on1gr ongs4l o4nins on3j on1k4 ons3c onsi3s ons3m on5stel ons4ter on3tras on4tre ont4s o1ny on5å o1nä o3nö oo4d oom5s o3or o1pe o1pi o5pline op4pl opp3le op4pr op4pu o3pri op4st o3på o5q 4ora o3rak oran3g4 o2rap 1ordn or4d5ä o4reh 1orga 5organi or4gr or4gå o1ri 3orient 4ork or4mö or4nu or4nä o1ro or4pl or5pr or4spa ors5tig or5te or2tr ort3re ort3ro o1ru o3ry o1rä o1rö o3s2fä osk4l o1skop o3som os5pig os4sk os4s4t os3tig os5tiker o5still os4tr ost5ron ost5rö os3tul ota2lan 4oti. 4otie 4otin o1to o5tro ot5run ot3sv ot5ti ot4trä ott2s o1tu o5tun otvin4 o1ty o5tå o3tä oun4 oup4 4our ou3rö ou4s o3ut3t o1va ova4n o1vi ov3r ov4si ov3sl ovs4me o1vä o3we ox5 oy2 o3å o3än o3ö 1pa 4paf pag4 paki3 pakis4 pa5la pals5 pa5lä 4pand. pan4tr 3pap 2parb 4parm par3s 2pask pa5ski pa2st 3patr pa3u 2pb4 2pc 2p3d4 pek5tri pekt3ro 4peld pel3s4i 4pem 5peng 3penn pent5r per4bl 3perio 3pers per4sl pe5tro 4pex 2p1f 4p3g 2ph pi4el 1pig pi1o 3pip pi5so pi5sta pi5sto p2j 3pjäs 4p3k2 p2l p4lac 5plan. p4lane p3larn p3lev 3plex 3plic 1plik 4plit p3lj 1plom p3lop 2p1m 4p1n p3ni 1po 5poa 2poc 2pof po2i 3polit 4polj poly3 2porg 3pos pos4ter 4pov po4vä 2pp p4part pp5ask p4pax p3pe p1pi p4pins pp3j pp1l pp3la pp3lin pp5lis pp5lu pp3ly pp3lån pp3låt pp3lä pp3lö pp5oc pp3of pp3p4 pp1r pp3ra pp3ri pp3ru pp3ry pp3rä pp3tr p2pu p5py pp3å p2r2 2pra 5prax 1pres pres4t pre3sta pres5to p3rig p3rik 5pril 3princ pring3 p5riol 3pro pro3g p3ror 4prå 3präs 3pröv 2ps p2sal 3psalm p5s2ho ps4ken ps2li p3sna 4pso p3sod p1s4t p4stak p4stäv p2sö 2p1t p3tri 1pu 4pug pul2l5ov pul5tr 5pung 3punk pus3t 2p1v på3dr 3päl pä5ro 4pör 3pé qu4 3que 1ra 3ra. raci4t 3rade. 4radr ra4du 5ra1e 2raffä ra3fr ra5is 2rak ra2lo r4ande 3rande. 4ran4d3r rand3s 2ransv ra3pl 3rar r4ar. 4rarb r4are 4rarg r4ark 4rarm r4arn r4ars 4rart r3arta ra5rö r4as ras3h ra2st 3raste. 3rativ ra3tri 2rav ra5yo 2rb 2r1c 2r2d r4daf rda5gr r3dj r4dos rd3ran rd3rat r4dul r3då r3dä r4dös 1re 3re. 4reaus re3b 4rec 5reco re3d4r re5du 4reft 4regg 3regn. re1kr rek5tri 4reld re3lu rem5p 3rems r4en. 2reni 2renk 2renl re3nö re3o 3rer. 3rern 3reso ress5k re1sti 3ret. 4retet ret3ro 4rety re5tå 2revig 4rex 2r1f rfö3ri 2r1g rg3g2 rgs5top 2rh rhands5 3rial 4rib 3rifi 2rifr r3ifrå 3rifu 3rigt rik2s 3riktn ri4mo 2rind rind3s 5ringen. ring3r 2rinr 2rins 2rint ri1o 3riot ri5ple ri2stä ri4tut ri4vis riv3s 4rj r4jis r3jo r5ju r5jö 2rk rk3akt r4kek rkes3 r1ki r3klas rk2le r4klö rk3n rk4ne r1ko r4kod rk3tr r1ku r4kup r1kä r5kör 2r1l r5laka r5lav rld2 rlds3 rl5sp 2r1m r4marb r4mil rm2s5j rm5tr 2r1n rnal4 rn3g4 rn1k r2nom rns4k rns4t rn3t ro3b ro4gro ro2kr 2rolj rol4li rom4a 5roman 5ronau 5rond. ron4v ro3pl ropp2s ro4ra 2rord 2rorg 2rorie 3rorn ro4sin ro4sn ros3v ro5te 2r1p r4plö r4pö 4r1r rra4n rrd4 rreligi5 rres4 r5rib rr5k4 r4rob r4rom rr1s rrs2k r4rur 2rs r4seld r4sex r2sin r1ski r4skid rsk3na rs5koll rs4kos rskotts3 r2sku r3skö rslags4v r4sle r4slo r4s5lö rs4mo rs5nat rs5nä r1sp r2spl r2spo rs3s4 rs5tak rs4te r5stek rs5tend r5steni rs5till r1sto r4ston rst4r r3strö r3stu r1sv rs4vag r2svä r1sy 2r1t r2taf r2takti rt4an r4tins r4tom r5trit r3trä rt3t r4tut rubb5l ru3br ru4dan ruks1 ruks3v 5rullera 3rum. runn2 runns5 4rupp rus2h ru5sha 2rut 5rutig rut4ra ru4vi 5ruö 2r1v rv4sj rv2s5kä r3w rydd5s ry5o råge5l 4rål rång3s rå5ra rå3st räck5s 4räkt 4räm räng3s räns5t 4räs rä4san räs3s rä5sti räv5s röd5el röd5r röd3s 2rög r3öi rök3s röns4t 4röp 3rör rör4s rö4st röst3r r1övr 1sa 3sa. 3sad. 3sade 4sadj 2sa3dr sad5s 2saf sa3i sak5ri 2s1akt sa5lo 3s2am sa2ma samman3 sa2mor sand3s 4sang 2sanl s3anlä san3sla 2sap 3s4ar. 2sarb 2sarm s5arm. 3sarn 2sart 4sarv 4sass 5sat. sa4tu 2sau s3auk 2s1av 4sb s2c 2sch. 1scha 2schau 4schb 1schen 1scher 1schet 1schi 4schk 4schm 4schp 3schy 3schö sci3p 4s3d 1se se4at. se2g 2s3egg 3segl seg3ra sek5le sek3r sek5tr 3sel. se5ly sem2 3sen. s5ersä 3set. 2sexp 2s1f s4fär. sfö2 4s3g2 2sh 5s2haw shi1s s5hö 1si sid5s 5sie si4eri si4esk si2ett 3s2ig 3sik sikts3 5sill. silver3 silv3r 2s1ind 2s1inf sinne2s3 3sinni 4sinr 2sin1s s1inst 5sint. 2sintr 3sio sis4t siu4 1s2j 2sjak s3jakt 4sjn 4sjt s4ju 5sjuk 4sjur själs3 3sjö 4sk. 2ska. 3s2kada s2kado 3skaffn 1skaft s4kag s2kal 3skal. 1skap 5skap. 5skapet 4skapi skaps1 4skar s4kara 5skarv 4skas s2kat s4kav 4ske. 3sked. s4kene 3skepp 4skh sk4i 3skif 5skin 4skis. 5skiv 5skjor 3skju 4skl sk5lap s3klas 4skn 3s4ko. 1s4kog 4skogsg 1skol 3skola s4kolo s4korp skor1st 1skot s5kran. 3skrat sk4ret 3skrev 1skri 3skrif s3krig 5skrin 3skrip s5kris 3skriv s5kron s4kru 5skrub 3skruv 5skräc sk3s 2skt 3skulp s3kup 2skv s4kve 1s2ky s4kyn 2skyrk 1skå s4kål 5skåp. 4skår 5skänk 3skärv 2sl2 4sla. s5lad. s3land 3s2lang s4lant s3lar. 4slas s1lat s2lev 3slev. s4lic slins3 4slis s2lit s5lor slotts3 s2lu s3luc s3luf 4slus s3lust 3slut slu4to 3slå. 5s4lår s4läk s5läm s5länn 3s4läp 4s3lär s2lät 3s2löj 2sm s2mak 3smak. s3makt s2mal s2met. s2mid s2mit 3smitta s3mj 5smug 5smyg små5g små3k små3s 3smäd 3smäl 4smäs 3smör 2s2n4 3snab 3s4nac s3nam s5nare s3nast s5ner 3snib 3snil 3snit 1snitt s3niv 3snut s4nå 5snår 5snäc s4när 3snö. snö5g 3snör snö3s 1so 3soc 5sock 2sod 5soi 2solj sol3s2 2som 5somm 3son son4st so5pra so4pu 3sor. 2sord s5ord. 2sorg 3sorn 3sot 4sott s2p2 5spann. s4park 5sparv 4spas s3pass spa5tr 1spe 4sped 3s4pek 3s4pel 4spelsl 2spen 2sper 5spets 3spill 3spir 4spl s1pla s3plan s3plats spli4 s4plin 5split s5plä 4spre s3pres 4s3pris 3sprit 2spro s3pry 3språ 5sprän s3ps 1s4på 3spån 3spår 5spän 3spö 4s1r 4s1s s5sad sse4lin s5sil ss2k ss5kl ss3kun ss1l ss2lag. ss2lä ss2lö ss3na sss4 ss3unn s2sv ss3vi s2t 2st. 4sta. 5stac 3stadi s4taf 5stalgis 3stalla 2stalli 5stam. 5stamm 1stant 5stark. 5startad 1state 3statl 1stau st3c 2s5te. 4stea 5steg. s4tek. 2stekn 5stekt s4tell 3stem. 3steme 5stenar 3s4tene 3stense 5stensm 1stera 1stering s4teriu 3sterne 5stetis 2stia 2stib 3stick 2stid s4tiken 2stil 3stil. 3stink 3stisc 1stit 2stj s5tju 3stjäl 3stjär 2stm 5stoc 1stol 4stolk 4stom stori4eu 5storis stor3s 3straff 4strativ 3strato 3strec 3strej st3ren 1strer 2stria 1strid 5stride 2striel st4rif 1strikt st5risk 1stru 3struk 2strumm s3tryc 5stryk 5stråk 3strål 3sträc 4sträd 3sträng 5sträv 3ström 2st3s4 st3t 4stv s3tvis 1sty 2styp 1stå 4ståg 5stål 1stä 3stäl 1stö 1su su4b 3sug su3i 3sum 2sun 5sun. s1under 5sune s5ung 2sup 5supa su2pu 5sus 2s1ut su4to su4tr s2v2 5svag. s3vagn 4s3vak 5svam 4svap svars3 3svart 4svas s3vat 4svec 3sven 5svep 4s3ver s5ves 4s3vil s4vine 4svis s5vitt s5våd 3svåri 3sväng 5svärm. s3väs s3vät 4syk 5syl 3syn syn3k s3yrk 3sys sys4t sys5ter syt2 sy5th 1så 5såg 4såk 2sålde sång3 1sä s4äd 2s5ägg s4äl 2säp 5säs 3sät 4säta 1sö 4söd 2sög s5öga sö4ko 4söl 4söp sör2s 2s3ört 1ta 3ta. ta1ch 3tade. 4tadi 4tads5 2taff 3taga 5tak. ta5kre 2taktig tak4to 4talf 5tallise tall5s 4talv 3tame 3tami 3tan. ta4nab 3tande. 2t3anfa 4tanl t4ap3l 2tappar 3tar. 4tarb tar4mi 3tarn tars4 4tart 5tartavl 4tarv 4task 3tast ta1str tat2 ta4tan tats3 2tatt 2tav 4tave 5tavla. 3tavlan 3tavlo tav2s 3tax 2tb4 2tc t3cha t3che 2t3d4 3t2e te4as te3b4 5tec 4teg te2g1r te3gre te3i te4int 4tej tej2s te4kl 5teknik 5teknis 4teld 5te5lö 5tema 4temo te4mu ten3g4 5tensi ten3tr te4nä te5nör 5ter. 5teriö ter3k4 5term 5terna 5ters ter3t te4ru 5tes. 5test tes4te te5stik te5stu 5tetik tets3 4texa 2texp 2t1f4 2t3g4 2th t4hen 1ti 3tial 5tib 5tici 3tid 5tide ti4du 4tidö ti4ed tifts5 ti2gel 3tigh ti4go ti2gr 3tigt tik3l 3tiks 5tikul t2il 5tilj 3tillst 3tillv 3tillä 5time 2tind 2tinr 2tint ti4od 3tion ti2os 3tis 4tisc 5tisk 3tiva ti4van 5tivite ti2ö t2j 4tje 4tjob 2tjou 4tjäl 4tjäm 3tjän 2t3k2 2t3l 2t1m 2t5n4 tne4r 4todl 3tok 4tol. 4tolj 2tomr 4toms t2op 5torap t5ord. 5toriett 4torm torm3s 3torn tor1st 4tort. tos4k t5ost. t4ov 2t1p t2r4 2tra t4raf 3trafi 3t4ral. t4rala 3t4rale 5tralo 3trals t4ralt 3trans tran2s5a 4trar t3ras. t3rat. t4rato 4treg 4tren 4trer. 4trern t3rets. 2tri 3tribu 5trick trids3 t5riel t1ring t3ring. 2troc t3rock t4rog t5ronik t3rono 4tropi. 5tross 5trotn t4rump t4rup 3trupp trus5ta 1tryc 5tryck. 5tryggh 4tråk 5trä. 3träd träds4 3träf 3träg 4träk t3räkn t4rän 5träni 5tröja t4röt 5tré 2ts t5s4and ts5art t3s4at t3se t4seg ts4en t4sex ts2k t5skall t3skatt t1ski ts3kl tskotts5 t5slot ts5läk ts3nä t3snö t2so ts3ord ts3pl tss4 t1st ts4te ts5ter ts5tillf ts3tj t3stol t4ston t2stra t4stry t4stur t5styr t2su t3sud t5sy 2tt t3tac t4tau t4ted tte5g4 t4tem tte2n ttes4 t4tex t4tins t4tip tt3ja t1to tt3rad tt3rand tt3rat tt3re tt3ri tt4ry tt4se tt2si tt4sta t3tu t4tug tt1v tt4vå t3ty t3tä t3tör 4t5ugn 2tund 3tunga tung3s 5tunn 2tupp tu5re 2tutb t3utv t3utö tu4vu 5tuö 2tv t1va 4tve t3vig 3tving t3vit 3tviv t3våg 3tvån t3vän tvär3s 3tvätt ty5da 5tyg. 3tyngd 3typ ty3pi 5tys 2tz 3tåg tås4 4tåt täc4ko 4t5äg 4täm 4tärm 3tävl 4tö4d tö5de 4tög 4töp tö4pi 3törer törs3t tö4vas 5té u1a u2b ub5al ubb4le ub3lic u4bo u3cha u5cl u2d u4dak u5de ud3r ud4ret uds4a u4du u4dy u1e u2es uf4fä uf4tan uf4to 4u1ga u1ge ugg3s ugn4 ugns5 ug3s4 u5ie u1in u3is u3itet u3j u2keb u5ki u4kl uk5la uk3n u1ko ukos4 uk2s uks5ko uk3tris ukt5s uk4tä u3ku uk3v u1la ul4di ulds2m ul4du ul4dö ull3ste ull3än u1lo uls5ti ul2tr u3lu u1lä u1lö um4fä um4so ums4t u1mu u3mör 5underl 1undersö 1underv un4dom und3r un4då un5g2ef un3gersk ung5it ung3r ungs4p 3unif unk3l unk3n un4kr un1sk un4tr un5trati u5nu u1o u1pe u4pern u1pi u2pl u3plet up3lik 3uppfa 1uppg up4pin 1uppla 5upplä up4p3r upp3s upp5sp up5ut ur5ak ur5arv u3re u1ri u1ro u4rob u4rom urs5tin ur4stä u5ry u2sak us5anl u3scha u3se usen3 u2s1k us3ka us4kla us4kr u5sky us4kå us5lä us3n u2sp us3pen us5tat us3tig u3stik us5tin ust5ro u4stå u4stä us3v u4så u4sä u2sö u4tak 1utb u4tef ute3s utik2 u5til uti3ö ut3j 3utjäm utlands3 u1to u3top uto5s ut3r ut4rer ut4ro ut5rop 1utru 2utsid ut3sl 3utslä 2utt utt4j ut1v 3utvec u5ty ut3öv u5u 2u1v u2vak u4vj u4vä u5å u3ö va5dro 1vagn 2v1akti val3k val4li val4st 5valv 5vama 4vand. 4vanp van4st van5tr 5vap 2varb va4res va4ri. 4vark var2s vart5r va1ru vas5ti 5vattn 4vau 4vav 5vavi 2vb4 2v1c 2v3d4 1ve 5vec ve2k ve3ke 4veld vensk3ä 5ventera ve3ny ve5nö 4vep ver5g 3verk ves4 ve2s5p ve1st 3veta 3vete vet5sa vett5s 2v1f 2v1g 2vh v4i vi4c vid3s vild3s vil4t 3vind. ving3s4 3vinkl vi2no 5vinst. 5vinste vi5ny 3vis. vi5sa vis5h vis5ko vi4st vis3ta vi2tr vi4var 4vjo 2v3k2 2v1l 2v1m vmörk4 2v1n4 1vo 4vok. 2vom 4vord 2vorg vos4 2v1p 2v2r 5vrak 3vrera v3ru 2vs v4sc v1s2k v2skri vs4mi v3sni v2so v1st vs4te vs5trå v5styc vs3vå v2sö 2v1t vu4d1 v1und 4v5up 4vut 2v1v 3vy 5våld vångs3 3vård 4våri vå3ru 3väg vägg5s vä4l väll4s3 3vänl 3värde vä4ril 4värj 5värk 3värld 2vät 3väx 4vög 4vöp 3vör 1wa we2 w2h whi2 wi2e w4na x1 xan5d4 xem3pla xis4 xk2 xli4 xs4 xti2 x4tå 2y y1a y4bris yb4s y2d y4da y5dan y4do yd3r yds4 y4du y4dö y1e y1ga y1ge ygg3r yg4gå ygs4p y1i y1ki y5klist yk5lon yk3n y1ko y1la yl4gj y3li yl5k yl5lä y1lo yl4tr ym2fl ym4for y3må yng3r ynk5l yn4sa yns4t y3or y5ou y1pe y5po yp3ri yre4s y1ri yr4ku yrk5v y1ro yrs4k yr5st yr5tu y1rå3 y5scho ys2st ys3ta ys3ti ys4tik. yst3ra y2tak y4te. y4tea y1to ytt3r yt5v y3va y3vi y3vä y5w y5å 1za 1ze ze4ro 1zi 1zo zo4nal 4zp z5s 3zu z4zin å1a å3dj åds4l å1e å1f å1ga å1ge åge2l åg3l åg3s4k åg3st ågå4 å3i å1ki 5åklag åk4strä å1la 1ålder å2lin ål3k åll4sp ål2s5e ål3st å1lä å1m åman4s ånd4r ån4du åns4t åns4v å3o å1p å2pl å5pla å4pö år4do ård4ra ård2s ård4s3t å4rel å1ri å5ror 5årsav år5s2li år2sv år5ö ås4ke ås3n åss4 ås4skr ås4t åte2 åt3ri å3trå åt2sj ått5s å1v ä1a ä2b 2äc äck5v ä2d ädd3s äd4du äde4s äd3r äd5se äd3st ä3e ä1ga ä1ge äg4go äg1l äg3r äg4re äg3se ä3i ä5jo 4äk ä1ki äk3n äk3r ä1la äl4pap äl4seg äls5kog äl4slu äl2t3r äl2tu äl4vin ämp3l 4ändligh änd3r änd1st äng5r änni3s änn3s ä4no äns1l än4st äns5te än4sv än2t3r ä3pe äpp3l ä4pr äp4st ä4rap är2bre ärg5l är4gr ä1ri ärib4 är4kä är4nis ärn3st är2nå är4nö är5ob ä5rol ä3rop ä5ror ä5ros är2si är4sko är2so är4sp är2sv är4tand är2tr ärt3s 4äs äs3pa äs5pi äs4sk äs4sp äs3ta äst3r ä4stä ä4så 2ät ä3to ä5tre ät4s3k ät5te ät4top ätt3r ät4tu ät4tv ä1va ä2vak ä3vi ä5vu ö1a ö2d ö4dak ö4dal ö4darv öde4s5 ö4dis öd3ra öd2s öd3se ö4du ö4dö ö1e ö1ga ög5ak ö5gar 1ögd ö1ge ö5ger ögg4 ög1l ög2n ögn3e 1ögo ög3si ög3sk ö1i ö3jo öj4sv ö4karm ö1ki ök3n ök2s ök3sl ö1la öl4kv öl4kö öl2p ö5lä öman4 öm2kl ö4nal ö2nom öns3ke ön4so önst3r ö3pe ö4pel ö3pi öp5li ö5plo 1öppn ö4pr ö3rande ö3ras ö4rask örb4 ör3d4r ör1eni ö3res ö4restr ö3ret ör5evig ör3g ö1ri ö5rig ö3ring ör3int ör5ir ör5iv ör4kal ör1k2l ör5kli ör4nis ör3ol ör1or ör2p5la ör1s2k ör3sl ör4slä ör5te ört5s ör1u ör3vr ör3y ör1ä örö4d ö2sak ös3n ös4sj ös2sk ös4sp ös3ta öst3v ö2tak öts5ko öt4st ö1v öve4 över1 5övere ö2vj öv3ra öv3ri öv4sk é3e", ["length"]=29397, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4693, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-pl.rme0000644000175000017500000001002211761001300024636 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Polish hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: plhyph.tex (1995-06-26) % Author: Hanna Kołodziejska, Bogusław Jackowski, Marek Ryćko % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % This is PLHYPH.TeX - the Polish hyphenation patterns % version 3.0a, Wednesday, May 17th, 1995 % to be used for the inclusion of Polish hyphenation patterns in any format, % not necessarily in the MeX or LaMeX ones. The patterns are exactly % the same as in the version 3.0 being the part of the MeX package, % only the surrounding of the \pattern command is changed. The authors % claim the upward compatibility, i.e., the version 3.0a can also be used % with the MeX or LaMeX formats. % The history of development of the Polish hyphenation patterns: % % The first version of the patterns was developed % by Hanna Kołodziejska (1987). % % The adaptation to the LeX format (see below) and extensive modification % were done by Bogusław Jackowski & Marek Ryćko (1987--1989). % % The hyphenation rules were further improved and adapted to the % TeX 3.x requirements by Hanna Kołodziejska (1991). % % Lone-standing version (3.0a) of patterns was prepared (under pressure % from LaTeX users) by Bogusław Jackowski and Marek Ryćko, following % Mariusz Olko's suggestions, 1995. % The LeX format mentioned above was the first version of the adaptation % of TeX to the Polish language. The next version is called MeX. context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-da.pat0000644000175000017500000001427211761001300024623 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-da.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z å æ ø \patterns{ .ae3 .an3k .an1s .be5la .be1t .bi4tr .der3i .diagno5 .her3 .hoved3 .ne4t5 .om1 .ove4 .po1 .til3 .yd5r ab5le 3abst a3c ade5la 5adg a1e 5afg 5a4f1l af3r af4ri 5afs a4gef a4gi ag5in ag5si 3agti a4gy a3h ais5t a3j a5ka a3ke a5kr aku5 a3la a1le a1li al3k 4alkv a1lo al5si a3lu a1ly am4pa 3analy an4k5r a3nu 3anv a5o a5pe a3pi a5po a1ra ar5af 1arb a1re 5arg a1ri a3ro a3sa a3sc a1si a3sk a3so 3a3sp a3ste a3sti a1ta1 a1te a1ti a4t5in a1to ato5v a5tr a1tu a5va a1ve a5z 1ba ba4ti 4bd 1be be1k be3ro be5ru be1s4 be1tr 1bi bi5sk b1j 4b1n 1bo bo4gr bo3ra bo5re 1br4 4bs bs5k b3so b1st b5t 3bu bu4s5tr b5w 1by by5s 4c1c 1ce ce5ro 3ch 4ch. ci4o ck3 5cy 3da 4d3af d5anta da4s d1b d1d4 1de de5d 4de4lem der5eri de4rig de5sk d1f d1g d3h 1di di1e di5l d3j d1k d1l d1m 4d1n 3do 4dop d5ov d1p 4drett 5d4reve 3drif 3driv d5ros d5ru ds5an ds5in d1ski d4sm d4su dsu5l ds5vi d3ta d1te dt5o d5tr dt5u 1du dub5 d1v 3dy e5ad e3af e5ag e3ak e1al ea4la e3an e5ap e3at e3bl ebs3 e1ci ed5ar edde4 eddel5 e4do ed5ra ed3re ed3rin ed4str e3e 3eff e3fr 3eft e3gu e1h e3in ei5s e3je e4j5el e1ka e3ke e3kl 4e1ko e5kr ek5sa 3eksem 3eksp e3ku e1kv e5ky e3lad el3ak el3ar e1las e3le e4lek 3elem e1li 5elim e3lo el5sa e5lu e3ly e4mad em4p5le em1s en5ak e4nan 4enn e4no en3so e5nu e5ol e3op e1or e3ov epi3 e1pr e3ra er3af e4rag e4rak e1re e4ref er5ege 5erhv e1ri e4rib er1k ero5d er5ov er3s er5tr e3rum er5un e5ry e1ta e1te etek4s e1ti e3tj e1to e3tr e3tu e1ty e3um e3un 3eur e1va e3ve e4v3erf e1vi e5x 1fa fa4ce fags3 f1b f1d 1fe fej4 fejl1 f1f f1g f1h 1fi f1k 3fl 1fo for1en fo4ri f1p f1s4 4ft f3ta f1te f1ti f5to f5tvi 1fu f1v 3fy 1ga g3art g1b g1d 1ge 4g5enden ger3in ge3s g3f g1g g1h 1gi gi4b gi3st 5gj g3k g1l g1m 3go 4g5om g5ov g3p 1gr gs1a gsde4len g4se gsha4 g5sla gs3or gs1p g5s4tide g4str gs1v g3ta g1te g1ti g5to g3tr gt4s g3ud gun5 g3v 1gy g5yd 4ha. heds3 he5s 4het hi4e hi4n5 hi3s ho5ko ho5ve 4h3t hun4 hund3 hvo4 i1a i3b i4ble i1c i3dr ids5k i1el i1en i3er i3et. if3r i3gu i3h i5i i5j i1ka i1ke ik1l i5ko ik3re ik5ri iks5t ik4tu i3ku ik3v i3lag il3eg il5ej il5el i3li i4l5id il3k i1lo il5u i3mu ind3t 5inf ings1 in3s in4sv inter1 i3nu i3od i3og i5ok i3ol ion4 ions1 i5o5r i3ot i5pi i3pli i5pr i3re i3ri ir5t i3sc i3si i4sm is3p i1ster i3sti i5sua i1ta i1te i1ti i3to i3tr it5re. i1tu i3ty i1u i1va i1ve i1vi j3ag jde4rer jds1 jek4to 4j5en. j5k j3le j3li jlmeld5 jlmel4di j3r jre5 ju3s 5kap k5au 5kav k5b kel5s ke3sk ke5st ke4t5a k3h ki3e ki3st k1k k5lak k1le 3klu k4ny 5kod 1kon ko3ra 3kort ko3v 1kra 5kry ks3an k1si ks3k ks1p k3ste k5stu ks5v k1t k4tar k4terh kti4e kt5re kt5s 3kur 1kus 3kut k4vo k4vu 5lab lad3r 5lagd la4g3r 5lam 1lat l1b ldiagnos5 l3dr ld3st 1le. 5led 4lele le4mo 3len 1ler 1les 4leu l1f lfin4 lfind5 l1go1 l3h li4ga 4l5ins 4l3int li5o l3j l1ke l1ko l3ky l1l l5mu lo4du l3op 4l5or 3lov 4l3p l4ps l3r 4ls lses1 ls5in l5sj l1ta l4taf l1te l4t5erf l3ti lt3o l3tr l3tu lu5l l3ve l3vi 1ma m1b m3d 1me 4m5ej m3f m1g m3h 1mi mi3k m5ing mi4o mi5sty m3k m1l m1m mmen5 m1n 3mo mo4da 4mop 4m5ov m1pe m3pi m3pl m1po m3pr m1r mse5s ms5in m5sk ms3p m3ste ms5v m3ta m3te m3ti m3tr m1ud 1mul mu1li 3my 3na 4nak 1nal n1b n1c 4nd n3dr nd5si nd5sk nd5sp 1ne ne5a ne4da nemen4 nement5e neo4 n3erk n5erl ne5sl ne5st n1f n4go 4n1h 1ni 4nim ni5o ni3st n1ke n1ko n3kr n3ku n5kv 4n1l n1m n1n 1no n3ord n5p n3r 4ns n3si n1sku ns3po n1sta n5sti n1ta nta4le n1te n1ti ntiali4 n3to n1tr nt4s5t nt4su n3tu n3ty 4n1v 3ny n3z o3a o4as ob3li o1c o4din od5ri od5s od5un o1e of5r o4gek o4gel o4g5o og5re og5sk o5h o5in oi6s5e o1j o3ka o1ke o3ku o3la o3le o1li o1lo o3lu o5ly 1omr on3k ook5 o3or o5ov o3pi op3l op3r op3s 3opta 4or. or1an 3ordn ord5s o3re. o3reg o3rek o3rer o3re3s o3ret o3ri 3orient or5im o4r5in or3k or5o or3sl or3st o3si o3so o3t o1te o5un ov4s 3pa pa5gh p5anl p3d 4pec 3pen 1per pe1ra pe5s pe3u p3f 4p5h 1pla p4lan 4ple. 4pler 4ples p3m p3n 5pok 4po3re 3pot 4p5p4 p4ro 1proc p3sk p5so ps4p p3st p1t 1pu pu5b p5ule p5v 5py3 qu4 4raf ra5is 4rarb r1b r4d5ar r3dr rd4s3 4reks 1rel re5la r5enss 5rese re5spo 4ress re3st re5s4u 5rett r1f r1gu r1h ri1e ri5la 4rimo r4ing ringse4 ringso4r 4rinp 4rint r3ka r1ke r1ki rk3so r3ku r1l rmo4 r5mu r1n ro1b ro3p r3or r3p r1r rre5s rro4n5 r1sa r1si r5skr r4sk5v rs4n r3sp r5stu r5su r3sv r5tal r1te r4teli r1ti r3to r4t5or rt5rat rt3re r5tri r5tro rt3s r5ty r3ud run4da 5rut r3va r1ve r3vi ry4s s3af 1sam sa4ma s3ap s1ar 1sat 4s1b s1d sdy4 1se s4ed 5s4er se4se s1f 4s1g4 4s3h si4bl 1sig s5int 5sis 5sit 5siu s5ju 4sk. 1skab 1ske s3kl sk5s4 5sky s1le s1li slo3 5slu s5ly s1m s4my 4snin s4nit so5k 5sol 5som. 3somm s5oms 5somt 3son 4s1op sp4 3spec 4sper 3s4pi s1pl 3sprog. s5r4 s1s4 4st. 5s4tam 1stan st5as 3stat 1stav 1ste. 1sted 3stel 5stemo 1sten 5step 3ster. 3stes 5stet 5stj 3sto st5om 1str s1ud 3sul s3un 3sur s3ve 3s4y 1sy1s 5ta. 1tag tands3 4tanv 4tb tede4l teds5 3teg 5tekn teo1 5term te5ro 4t1f 6t3g t1h tialis5t 3tid ti4en ti3st 4t3k 4t1l tli4s5 t1m t1n to5ra to1re to1ri tor4m 4t3p t4ra 4tres tro5v 1try 4ts t3si ts4pa ts5pr t3st ts5ul 4t1t t5uds 5tur t5ve 1typ u1a 5udl ud5r ud3s 3udv u1e ue4t5 uge4ri ugs3 u5gu u3i u5kl uk4ta uk4tr u1la u1le u5ly u5pe up5l u5q u3ra u3re u4r3eg u1rer u3ro us5a u3si u5ska u5so us5v u1te u1ti u1to ut5r ut5s4 5u5v va5d 3varm 1ved ve4l5e ve4reg ve3s 5vet v5h vi4l3in 1vis v5j v5k vl4 v3le v5li vls1 1vo 4v5om v5p v5re v3st v5su v5t 3vu y3a y5dr y3e y3ke y5ki yk3li y3ko yk4s5 y3kv y5li y5lo y5mu yns5 y5o y1pe y3pi y3re yr3ek y3ri y3si y3ti y5t3r y5ve zi5o .så3 .ær5i .øv3r a3tø a5væ brød3 5bæ 5drøv dstå4 3dæ 3dø e3læ e3lø e3rø er5øn e5tæ e5tø e1væ e3æ e5å 3fæ 3fø fø4r5en giø4 g4sø g5så 3gæ 3gø1 3gå i5tæ i3ø 3kø 3kå lingeniø4 l3væ 5løs m5tå 1mæ 3mø 3må n3kæ n5tæ 3næ 4n5æb 5nø o5læ or3ø o5å 5præ 5pæd på3 r5kæ r5tæ r5tø r3væ r5æl 4røn 5rør 3råd r5år s4kå 3slå s4næ 5stø 1stå 1sæ 4s5æn 1sø s5øk så4r5 ti4ø 3træk. t4sø t5så t3væ u3læ 3værd 1værk 5vå y5væ æb3l æ3c æ3e æg5a æ4gek æ4g5r ægs5 æ5i æ5kv ælle4 æn1dr æ5o æ1re ær4g5r æ3ri ær4ma ær4mo ær5s æ5si æ3so æ3ste æ3ve øde5 ø3e ø1je ø3ke ø3le øms5 øn3st øn4t3 ø1re ø3ri ørne3 ør5o ø1ve å1d å1e å5h å3l å3re års5t å5sk å3t}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-cs.rme0000644000175000017500000000764111761001300024645 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Czech hyphenation patterns (Pavel Sevecek, v3, 1995) (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: czhyphen.tex (), czhyphen.ex () % Author: Pavel Ševeček % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % %%% ==================================================================== % This is CZHYPHEN.TEX, containing czech hyphenation patterns. % Prepared by: % Pavel Ševeček % Lingea s.r.o., Brno, Czech Republic % E-mail: pavel@lingea.cz % % This is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This file is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %%% -------------------------------------------------------------------- % \message {Czech Hyphenation Patterns (Pavel Sevecek, v3, 1995)} %\lefthyphenmin=2\righthyphenmin=2 context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-eu.pat0000644000175000017500000000213611761001300024644 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-eu.rme % used: a b c d e f g i j k l m n o p q r s t u v w x y z ñ \patterns{ 1ba 1be 1bo 1bi 1bu 1ca 1ce 1co 1ci 1cu 1da 1de 1do 1di 1du 1fa 1fe 1fo 1fi 1fu 1ga 1ge 1go 1gi 1gu 1ja 1je 1jo 1ji 1ju 1ka 1ke 1ko 1ki 1ku 1la 1le 1lo 1li 1lu 1ma 1me 1mo 1mi 1mu 1na 1ne 1no 1ni 1nu 1ña 1ñe 1ño 1ñi 1ñu 1pa 1pe 1po 1pi 1pu 1qa 1qe 1qo 1qi 1qu 1ra 1re 1ro 1ri 1ru 1sa 1se 1so 1si 1su 1ta 1te 1to 1ti 1tu 1va 1ve 1vo 1vi 1vu 1wa 1we 1wo 1wi 1wu 1xa 1xe 1xo 1xi 1xu 1ya 1ye 1yo 1yi 1yu 1za 1ze 1zo 1zi 1zu 1l2la 1l2le 1l2lo 1l2li 1l2lu 1r2ra 1r2re 1r2ro 1r2ri 1r2ru 1t2sa 1t2se 1t2so 1t2si 1t2su 1t2xa 1t2xe 1t2xo 1t2xi 1t2xu 1t2za 1t2ze 1t2zo 1t2zi 1t2zu 1b2la 1b2le 1b2lo 1b2li 1b2lu 1b2ra 1b2re 1b2ro 1b2ri 1b2ru 1d2ra 1d2re 1d2ro 1d2ri 1d2ru 1f2la 1f2le 1f2lo 1f2li 1f2lu 1f2ra 1f2re 1f2ro 1f2ri 1f2ru 1g2la 1g2le 1g2lo 1g2li 1g2lu 1g2ra 1g2re 1g2ro 1g2ri 1g2ru 1k2la 1k2le 1k2lo 1k2li 1k2lu 1k2ra 1k2re 1k2ro 1k2ri 1k2ru 1p2la 1p2le 1p2lo 1p2li 1p2lu 1p2ra 1p2re 1p2ro 1p2ri 1p2ru 1t2ra 1t2re 1t2ro 1t2ri 1t2ru su2b2r su2b2l}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-la.pat0000644000175000017500000000360711761001300024633 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-la.rme % used: a b c d e f g h i j k l m n o p q r s t u v x z æ œ \patterns{ .a2b3l .anti1 .anti3m2n .circu2m1 .co2n1iun .di2s3cine .e2x1 .o2b3 .para1i .para1u .su2b3lu .su2b3r 2s3que. 2s3dem. 3p2sic 3p2neu æ1 œ1 a1ia a1ie a1io a1iu ae1a ae1o ae1u e1iu io1i o1ia o1ie o1io o1iu uo3u 1b 2bb 2bd b2l 2bm 2bn b2r 2bt 2bs 2b. 1c 2cc c2h2 c2l 2cm 2cn 2cq c2r 2cs 2ct 2cz 2c. 1d 2dd 2dg 2dm d2r 2ds 2dv 2d. 1f 2ff f2l 2fn f2r 2ft 2f. 1g 2gg 2gd 2gf g2l 2gm g2n g2r 2gs 2gv 2g. 1h 2hp 2ht 2h. 1j 1k 2kk k2h2 1l 2lb 2lc 2ld 2lf l3f2t 2lg 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2l. 1m 2mm 2mb 2mp 2ml 2mn 2mq 2mr 2mv 2m. 1n 2nb 2nc 2nd 2nf 2ng 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3m n2s3f 2nt 2nv 2nx 2n. 1p p2h p2l 2pn 2pp p2r 2ps 2pt 2pz 2php 2pht 2p. 1qu2 1r 2rb 2rc 2rd 2rf 2rg r2h 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt 2rv 2rz 2r. 1s2 2s3ph 2s3s 2stb 2stc 2std 2stf 2stg 2st3l 2stm 2stn 2stp 2stq 2sts 2stt 2stv 2s. 2st. 1t 2tb 2tc 2td 2tf 2tg t2h t2l t2r 2tm 2tn 2tp 2tq 2tt 2tv 2t. 1v v2l v2r 2vv 1x 2xt 2xx 2x. 1z 2z. a1ua a1ue a1ui a1uo a1uu e1ua e1ue e1ui e1uo e1uu i1ua i1ue i1ui i1uo i1uu o1ua o1ue o1ui o1uo o1uu u1ua u1ue u1ui u1uo u1uu a2l1ua a2l1ue a2l1ui a2l1uo a2l1uu e2l1ua e2l1ue e2l1ui e2l1uo e2l1uu i2l1ua i2l1ue i2l1ui i2l1uo i2l1uu o2l1ua o2l1ue o2l1ui o2l1uo o2l1uu u2l1ua u2l1ue u2l1ui u2l1uo u2l1uu a2m1ua a2m1ue a2m1ui a2m1uo a2m1uu e2m1ua e2m1ue e2m1ui e2m1uo e2m1uu i2m1ua i2m1ue i2m1ui i2m1uo i2m1uu o2m1ua o2m1ue o2m1ui o2m1uo o2m1uu u2m1ua u2m1ue u2m1ui u2m1uo u2m1uu a2n1ua a2n1ue a2n1ui a2n1uo a2n1uu e2n1ua e2n1ue e2n1ui e2n1uo e2n1uu i2n1ua i2n1ue i2n1ui i2n1uo i2n1uu o2n1ua o2n1ue o2n1ui o2n1uo o2n1uu u2n1ua u2n1ue u2n1ui u2n1uo u2n1uu a2r1ua a2r1ue a2r1ui a2r1uo a2r1uu e2r1ua e2r1ue e2r1ui e2r1uo e2r1uu i2r1ua i2r1ue i2r1ui i2r1uo i2r1uu o2r1ua o2r1ue o2r1ui o2r1uo o2r1uu u2r1ua u2r1ue u2r1ui u2r1uo u2r1uu}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-uk.pat0000644000175000017500000012111511761001300024651 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-uk.rme % used: ' - а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ь ю я є і ї ґ \patterns{ 2а1 а3а а3е а3і а3о а3у а3ю а3я а3є а3ї 2е1 е3а е3е е3і е3о е3у е3ю е3я е3є е3ї 2и1 и3а и3е и3і и3о и3у и3ю и3я и3є и3ї 2і1 і3а і3е і3и і3о і3у і3ю і3я і3є і3ї 2о1 о3а о3е о3і о3о о3у о3ю о3я о3є о3ї 2у1 у3а у3е у3і у3о у3у у3ю у3я у3є у3ї 2ю1 ю3а ю3е ю3і ю3о ю3у ю3ю ю3я ю3є ю3ї 2я1 я3а я3е я3о я3у я3ю я3я я3є я3ї 2є1 є3у є3ю є3є є3ї 2ї1 ї3е ї3о ї3ю 2б1к 2б1п 2б1с 2б1т 2б1ф 2б1х 2б1ц 2б1ч 2б1ш 2б1щ 2в1б 2в1г 2в1д 2в1ж 2в1з 2в1к 2в1л 2в1м 2в1н 2в1п 2в1р 2в1с 2в1т 2в1ф 2в1х 2в1ц 2в1ч 2в1ш 2в1щ 2в1й 2в'3 2г1к 2г1п 2г1с 2г1т 2г1ф 2г1ц 2г1ч 2г1ш 2д1к 2д1п 2д1с 2д1т 2д1ф 2д1х 2д1ц 2д1ч 2д1ш 2д1щ 2ж1к 2ж1п 2ж1с 2ж1т 2ж1ф 2ж1х 2ж1ц 2ж1ч 2ж1ш 2з1к 2з1п 2з1с 2з1т 2з1ф 2з1х 2з1ц 2з1ч 2з1ш 2з1щ 2к1б 2к1г 2к1д 2к1з 2л1б 2л1в 2л1г 2л1ґ 2л1д 2л1ж 2л1з 2л1к 2л1м 2л1н 2л1п 2л1р 2л1с 2л1т 2л1ф 2л1х 2л1ц 2л1ч 2м1б 2м1в 2м1г 2м1д 2м1ж 2м1з 2м1к 2м1л 2м1н 2м1п 2м1р 2м1с 2м1т 2м1ф 2м1х 2м1ц 2м1ч 2м1ш 2м1щ 2м'3 2н1б 2н1в 2н1г 2н1д 2н1ж 2н1з 2н1к 2н1л 2н1м 2н1п 2н1р 2н1с 2н1т 2н1ф 2н1х 2н1ц 2н1ч 2н1ш 2н1щ 2н'3 2п1б 2п1д 2п1з 2р1б 2р1в 2р1г 2р1ґ 2р1д 2р1ж 2р1з 2р1к 2р1л 2р1м 2р1н 2р1п 2р1с 2р1т 2р1ф 2р1х 2р1ц 2р1ч 2р1ш 2р1щ 2р1й 2р'3 2с1б 2с1г 2с1д 2т1б 2т1г 2т1д 2т1ж 2т1з 2ф1б 2ф1г 2ф1з 2х1г 2х1д 2ц1б 2ц1г 2ц1д 2ц1з 2ч1б 2ч1д 2ч1ж 2ш1б 2ш1г 2й1б 2й1в 2й1г 2й1д 2й1ж 2й1з 2й1к 2й1л 2й1м 2й1н 2й1п 2й1р 2й1с 2й1т 2й1ф 2й1х 2й1ц 2й1ч 2й1ш 2й1щ 2дь1к 2дь1с 2дь1т 2дь1ц 2зь1к 2зь1с 2зь1т 2ль1б 2ль1в 2ль1г 2ль1д 2ль1ж 2ль1з 2ль1к 2ль1м 2ль1н 2ль1п 2ль1р 2ль1с 2ль1т 2ль1ф 2ль1х 2ль1ц 2ль1ч 2ль1ш 2ль1щ 2ль1й 2нь1б 2нь1г 2нь1з 2нь1к 2нь1л 2нь1м 2нь1с 2нь1т 2нь1х 2нь1ц 2нь1ч 2нь1ш 2нь1й 2рь1к 2рь1ц 2сь1б 2сь1д 2ть1б 2к1сп 2к1ст 2к1ськ 2п1сп 2п1ст 2п1ськ 2с1пк 2с1пп 2с1пс 2с1пт 2с1пх 2с1пч 2с1ськ 2с1тк 2с1тп 2с1тс 2с1тсь 2с1тт 2с1тф 2с1тц 2с1шт 2сь1кк 2сь1кс 2сь1кт 2т1ск 2т1сп 2т1ст 2т1ськ 2т1шк 2ф1сп 2ф1ст 2ф1ськ 2ф1шт 2х1ст 2х1ськ 2ц1ст 2ц1шк 2ш1тк 2ш1тсь 2б1б 2в1в 2г1г 2ґ1ґ 2д1д 2ж1ж 2з1з 2к1к 2л1л 2м1м 2н1н 2п1п 2р1р 2с1с 2т1т 2ф1ф 2х1х 2ц1ц 2ч1ч 2ш1ш 2щ1щ 2й1й 3ння 3ття 3ттю 3лля 3ллє 3ллю 3ддя д4ж д4з а2й е2й и2й і2й о2й у2й ю2й я2й є2й ї2й 3й6о ь6о 6' 6ь .б'8 .в'8 .д'8 .з'8 .м'8 .н'8 .п'8 .р'8 .т'8 .ф'8 .ш'8 .бд6 .бр6 .вб6 .вб6'6 .вв6'6 .вг6 .вд6 .вж6 .вз6 .вз6д6 .вк6 .вл6 .вм6 .вм6'6 .вп6 .вп6'6 .вп6х6 .вс6 .вс6т6 .вт6 .вш6к6 .дж6 .дз6 .дл6 .дс6 .зб6 .зв6'6 .зг6 .зд6 .зд6з6 .зл6 .зм6'6 .зс6 .зс6к6 .зс6т6 .зч6 .зш6 .зш6к6 .зґ6 .йш6 .кл6 .кп6 .кс6 .кх6 .кш6 .лк6с6 .лс6 .ль6 .мс6 .мф6 .нб6 .пр6 .пс6 .пх6 .рт6 .ск6 .ск6л6 .сл6 .сп6 .сп6'6 .сп6л6 .сп6х6 .ст6 .сх6 .сх6л6 .тк6 .тр6 .тх6 .ть6 .фл6 .хл6 .ць6 .чх6 .шк6 .шл6 .шп6 .шт6 6бв. 6бз. 6бй. 6бл. 6б6ль. 6бн. 6бр. 6бс. 6б6ст. 6б6с6тв. 6б6с6тр. 6б6с6ьк. 6б6ць. 6вб. 6вв. 6вд. 6в6др. 6в6дь. 6вж. 6вз. 6в6зь. 6вй. 6вк. 6вл. 6в6ль. 6вм. 6вн. 6вп. 6вр. 6вс. 6в6с6тв. 6в6с6ть. 6в6сь. 6в6с6ьк. 6вт. 6вх. 6в6ць. 6вч. 6вш. 6вщ. 6гв. 6гг. 6гд. 6гл. 6г6ль. 6гм. 6гн. 6гр. 6гс. 6г6с6тв. 6г6сь. 6гт. 6дж. 6дз. 6д6зь. 6дл. 6дм. 6дн. 6др. 6д6с6тв. 6д6с6ьк. 6дт. 6дь. 6д6ь6сь. 6жб. 6жв. 6ж6дь. 6ж6сь. 6зв. 6зг. 6зд. 6з6дв. 6з6дн. 6з6дь. 6зк. 6зл. 6зм. 6зн. 6з6нь. 6зр. 6з6сь. 6зь. 6з6ьб. 6з6ьк. 6йб. 6йв. 6йг. 6йд. 6йз. 6йк. 6й6кл. 6йл. 6й6ль. 6йм. 6й6мс. 6йн. 6й6нс. 6йп. 6йр. 6йс. 6й6ст. 6й6с6тв. 6й6с6тр. 6й6сь. 6й6с6ьк. 6йт. 6й6тс. 6йф. 6йх. 6йц. 6йч. 6йш. 6кв. 6кк. 6кл. 6к6ль. 6кр. 6кс. 6к6ст. 6к6сь. 6кт. 6к6тр. 6кх. 6кш. 6лб. 6лг. 6лд. 6лк. 6лл. 6л6ль. 6лм. 6л6мс. 6лн. 6лп. 6лс. 6лт. 6л6хв. 6ль. 6л6ьб. 6л6ьв. 6л6ьг. 6л6ьд. 6л6ь6дс. 6л6ьз. 6л6ьк. 6л6ьм. 6л6ьн. 6л6ьп. 6л6ьс. 6л6ь6ств. 6л6ь6сь. 6л6ь6ськ. 6л6ьт. 6л6ь6тр. 6л6ьф. 6л6ьх. 6л6ьц. 6л6ьч. 6л6ьш. 6л6ьщ. 6мб. 6м6б6ль. 6м6бр. 6мг. 6мж. 6мк. 6мл. 6м6ль. 6мм. 6мн. 6мп. 6мр. 6мс. 6м6с6тв. 6м6сь. 6м6с6ьк. 6мт. 6мф. 6мх. 6мш. 6нв. 6нг. 6н6гл. 6н6г6ль. 6н6гр. 6н6гс. 6нд. 6н6дж. 6н6дз. 6н6дп. 6н6др. 6нж. 6нз. 6нк. 6н6кс. 6н6кт. 6нм. 6нн. 6нр. 6нс. 6н6ск. 6н6ст. 6н6с6тв. 6н6с6тр. 6н6с6ьк. 6н6с6ькй. 6нт. 6н6тк. 6н6тр. 6н6т6ств. 6н6ть. 6нф. 6нх. 6нц. 6н6ць. 6нч. 6нш. 6нь. 6н6ьб. 6н6ьг. 6н6ьк. 6н6ь6сь. 6пд. 6пл. 6пр. 6пс. 6п6с6тв. 6п6сь. 6пт. 6п6тр. 6пф. 6пц. 6рб. 6рв. 6рг. 6рд. 6р6дв. 6р6дж. 6р6дь. 6рж. 6рз. 6р6зн. 6р6зь. 6рк. 6р6кс. 6р6кт. 6рл. 6р6ль. 6р6л6ьз. 6рм. 6рн. 6р6нс. 6р6н6ст. 6р6нь. 6рп. 6рр. 6рс. 6р6ср. 6р6ст. 6р6с6тв. 6р6с6ть. 6р6сь. 6р6с6ьк. 6рт. 6р6тв. 6р6тр. 6р6ть. 6рф. 6рх. 6рц. 6р6ць. 6рч. 6рш. 6рщ. 6р6щ6сь. 6рь. 6с6дп. 6с6д6рп. 6ск. 6сл. 6с6ль. 6см. 6сн. 6сп. 6сс. 6ст. 6с6тв. 6с6тй. 6с6тм. 6с6тр. 6с6т6рь. 6с6ть. 6с6ць. 6сь. 6с6ьб. 6с6ьк. 6с6ьм. 6тв. 6т6вт. 6т6зт. 6тл. 6т6ль. 6тм. 6т6мр. 6тр. 6тс. 6т6с6тв. 6т6с6ьк. 6тт. 6тц. 6тч. 6ть. 6т6ь6сь. 6фм. 6фр. 6ф6с6тв. 6фт. 6ф6ть. 6фф. 6фь. 6хв. 6хм. 6хн. 6хр. 6хт. 6хш. 6ц6тв. 6ць. 6ц6ьк. 6чб. 6чм. 6чн. 6чт. 6шв. 6ш6ль. 6шм. 6шн. 6ш6нл. 6ш6сь. 6шт. 6ш6тв. 6щ6сь. .бе4з'3 .бе4з3 .безу4 .бе5з4о3д .без5о4соб .безві4д3 .без3ро4з3 виї4 .ві5д4ом .ві5д4озв .ві5д4ун віду4ч .ві5д4а .ві5д4ер .ві5д4і .ві4д3 .від'3 .мі4ж3 безві4д3 ові4д3 ді4єві4д3 за4вві4д3 неві4д'3 неві4д3 про4ф3ві4д3 спе4ц3ві4д3 співві4д3 те4х3ві4д3 .пере4д3бач .пере4д3виб .пере4д3г .пере4д3д .пере4д3м .пере4д3ост .пере4д3пла .пере4д3пок .пере4д3р .пере4д3св .пере4д3умов .пере4д3усі .пере4д3фр .пере4д3ч .пере4д'3 .пере3 .пона4д3 .пона5д4і .пона5д4и .пона5д4я 3п4ре 3п4ри приї4 3п4ро 3п4рі .пі5д4о .пі5д4і .під'3 .пі4д3 .пі5д4е .пі5д4и .пі5д4у .пі4в3 .спі4в3 .напі4в3 .ро5з4і .ро5з4е ро5з4йом .ро5з4а .ро4з'3 .ро4з3 .чере4з'3 .чере4з3 оо4б ооб'3 ооб3м ооб3ро об'3 од'3 на4д'3 за5о4р до5о4р по5о4р пере5о4р пі6д5о4р бе4з5і4дей до3в'4є за3в'4є зі3в'4є обі3в'4є по3в'4є уі3в'4є з3в'4я по3в'4я від3в'4я за3в'4я зі3в'4я за3ю4ш на3в'4я непо3в'4я об3в'4я при3в'4я під3в'4я у3в'4я з3м'4я зі3м'4я у3м'4я в3м'4я но3м'4я за3м'4я на3м'4я об3м'4я пере3м'4я по3м'4я при3м'4я піді3м'4я су3м'4я до3в'4ю за3в'4ю зі3в'4ю на3в'4ю по3в'4ю уі3в'4ю інтер3в'4ю за3я4ло коу4роч зу4роч наду4роч позау4роч поу4роч приу4роч на4й3у4бог нао4р прио4р неу4к 3в4б4лаг 3в4к4лад 3в4п4лив 3в4п4равн 3в4р4одлив 3в4т4рут 3в4т4руч 3з4б4рой 3з4б4рою 3з4б4роє 3з4в4'яз 3й4ш4л 3м4к4не 3м4к4ну 3м4к4ні 3п4с4ков 3с4к4лад 3с4к4ле 3с4к4лит 3с4к4ло 3с4к4рипт 3с4п4лав 3с4п4лат 3с4п4лач 3с4п4рав 3с4п4ритн 3с4п4рият 3с4п4ромо 3с4т4вор 3с4т4ражд 3с4т4рах 3с4т4риб 3с4т4риж 3с4т4рой 3с4т4рок 3с4т4ром 3с4т4роф 3с4т4роч 3с4т4рою 3с4т4роя 3с4т4роє 3с4т4рої 3с4т4рукт 3с4т4рукц 3с4т4рій 3с4т4ріл 3с4т4річ 3т4к4нен 3т4ь4мар 3т4ь4мяні 3у4п4рав 3блаж 3ближ 3близ 3блиск 3блок 3блоці 3бран 3брати 3брест 3бризк 3британ 3бруд 3в4бив 3в4веден 3в4дал 3в4довз 3в4довол 3в4живан 3в4лад 3в4ласн 3в4лашт 3в4лов 3в4певн 3в4поряд 3в4разлив 3в4рожай 3в4сюд 3в4тіл 3глад 3глиб 3глин 3глоб 3глуз 3глуш 3гляд 3глян 3гнан 3гнил 3гноз 3гнучк 3грав 3град 3грай 3грам 3гран 3грати 3граф 3граш 3граю 3грає 3грес 3грець 3гроб 3грож 3гроз 3громад 3груван 3грунт 3груп 3грів 3гріт 3гріш 3г4ідро 3д4ан 3д4бав 3д4бал 3д4бан 3д4бат 3д4бає 3двиг 3двою 3двоє 3двій 3двір 3двічі 3драж 3дром 3друж 3друк 3дряп 3дріб 3дріма 3жвав 3жміть 3жріть 3з4бага 3з4баланс 3з4був 3з4бут 3зваж 3зван 3звед 3звел 3звест 3звись 3звич 3звищ 3зворуш 3звук 3звуч 3звіт 3з4год 3з4дат 3з4довж 3з4доров 3з4дійсн 3змін 3зйом 3зміш 3знав 3знай 3знак 3знал 3знан 3знат 3знаход 3знач 3знаю 3знає 3зниж 3знім 3зрозум 3зрюв 3зрів 3зріл 3зрін 3з4чеп 3й4ма 3й4менн 3й4мищ 3й4мовірн 3й4му. 3й4муть 3й4міть 3й4шов 3м4нож 3м4ріть 3м4щен 3п4сов 3п4сон 3п4сув 3р4вав 3р4вати 3р4віть 3с4кид 3с4кок 3с4коп 3с4кор 3с4короч 3с4коч 3с4кіль 3с4кіпл 3с4пад 3с4пект 3с4перм 3с4пин 3с4повід 3с4пожив 3с4постер 3с4пі 3с4піть 3с4піш 3с4табіл 3с4тав 3с4тад 3с4таз 3с4тайн 3с4тал 3с4тан 3с4тар 3с4тара 3с4тат 3с4тач 3с4тає 3с4теп 3с4тереж 3с4теріг 3с4тиг 3с4тиж 3с4тисл 3с4титу 3с4товб 3с4той 3с4торон 3с4торін 3с4тосо 3с4тосу 3с4тою 3с4тоян 3с4туп 3с4тяг 3с4тіб 3с4тій 3с4тіль 3с4тір 3с4фер 3с4хил 3с4хов 3с4хід 3т4кан 3х4то 3ш4код 3ш4кол 3ш4кідл 3ш4кіл 3ш4кір 3ш4таб 3ш4туч 3ґрунт 3а4вторит 3а4гент 3а4грес 3а4декват 3а4дитив 3а4зарт 3а4ктив 3а4ктуал 3а4курат 3а4куст 3а4кцепт 3а4кциз 3а4лергі 3а4матор 3а4наліз 3а4натом 3а4парат 3а4пеляц 3а4постол 3а4птеч 3а4ргумен 3а4ромат 3а4соці 3а4спект 3а4тлет 3а4халі 3е4колог 3е4коном 3е4легант 3е4лектр 3е4лемент 3е4моці 3е4мігр 3е4нерг 3е4стакад 3е4стет 3е4тап 3о4б'єдн 3о4б'єкт 3о4береж 3о4бира 3о4борон 3о4бід 3о4біц 3о4даль 3о4дяг 3о4збро 3о4крем 3о4перат 3о4плат 3о4птим 3о4пуст 3о4пуше 3о4пуще 3о4рдинац 3о4ренд 3о4соб 3о4сяжн 3о4холо 3о4хорон 3о4хоч 3о4чисн 3о4чищ 3у4ваг 3у4важ 3у4гав 3у4згод 3у4клад 3у4компл 3у4крупн 3у4люблен 3у4мит 3у4міл 3у4перед 3у4разлив 3у4рбан 3у4рочист 3у4ряд 3у4рядов 3у4спіш 3у4станов 3у4стпіш 3у4сувати 3у4твор 3у4тробн 3я4дерн 3я4зик 3я4кіс 3я4рус 3я4скрав 3є4д3н 3є4дин 3є4писк 3є4рей 3і4зотоп 3і4люстр 3і4мовір 3і4нтенс 3і4нформ 3і4ніціат 3і4снув 3ї4ждж 3ї4зд 3ї4ст 3ї4хав 3ї4хат .заї4к .заї4ц .заї4ч .наї4д 'ї4в 'ї4з 'ї4д 'ї4ж 'ї4л 'ї4м 'ї4с 'ї4х аві4а авої4д ае4тил альбі5он ахої4д ауді4о ай4с3берг бактері4о ба4с3енер ба4с3антра .бе5зе. бей4сбол бе5кон б'4єть бйор4нс бі4о3 бо4г3дан бран4д брі4дж3порт без5і4мен бо4є3гол бо4є3гот бо4є3зап бо4є3здат бо4є3комп бо4є3пост бо4є3прип бори4с5п 4в3антрац вер4х3н ви3й4д вина3й4д ви3й4т вина3й4т від7зна ві5д4ен ві5д4е4о ві5д4ом від5о4браж від5о4браз во4с5ко водо5с4ток водо5з4бір воль4т3метр воль4т3ампер 3в'4яз ге2ть3ман ге4о го4с4п5роз гі4д5ро5мет 4д7зем дер4ж5а4том дер4ж5а4дм дер4ж5бюдж дер4ж5вид дер4ж5дум дер4ж5замов дер4ж5ком дер4ж5нафт дер4ж5реєс дер4ж3без дер4ж3резерв дер4ж5стр дер4ж5служ двох4а5том джен4тль дисбаланс ди4с3гарм ди4с3квал ди4с3комф ди4с3конт ди4с3кред ди4с3крет ди4с3крец ди4с3крим ди4с3кусі ди4с3куту ди4с3лок ди4с3парит ди4с3перс ди4с3петч ди4с3пле ди4с3плей ди4с3пози ди4с3проп ди4с3пут ди4с3тил ди4с3триб ди4с3троф ди4с3функц ді3й4т ді3й4д д4ні3п4р .дої4в .дої4л .дої5ль дої4д дої4м дої4х дої4ж дої4ст до3з4вол до3з4віл дорого5в4каз еу4стр ео4сві енерго3з4береж енерго3з4беріг ек2с1к ек2с1п ек2с1т ек2с1ц єв4р3атом єпі4с5коп єпи4с5коп за4п3част заї4д заї4ж заї4з заї4л заї4м заї4х зе4кономити 3з'4ясо зна3й4д зна3й4т зо4ка зо4ке зо4ки зо4ку зо4кі игої4д ий4ти іе4тил і4л3е4тил ій4ти інфор4м3аген йо4сві каза4х3стан квої4д корої4д квар4т3плат киї4венер кон4трре кон4тр3арг жко4м5а4том кому4ненерг мі4н5е4ко мі4н5е4нер мо4к5рий 3м'4якш 3м'4ят на3б4лиз на3в4ряд на3в4ча на3з4в на4д7з4в наї4вс наї4вш наї4ж наї4з наї4л наї4м наї4с наї4х на4й3а на4й3е на4й3обереж на4й7о4бер на4й7о4гид на4й7о4гол на4й7о4гряд на4й7о4пук на4й7о4хай на4й3масл на4й3спри на4й3якіс на3в4чен на3в4чіть не3в4том не3д4бан на3д4бан не3з4вич не3з4важ нео4пал недої4 неї4ст на5п4лив ні4т5рат оної4д оо4пал ео4пал обі3д4ран обі3й4д обі3й4т об5у4мов онаї4д оо4сві оо4к оу4стр оа4том об4лдер4ж об4л3а4дмін переї4д переї4ж переї4з переї4л переї4с переї4х пере5п4лив пере3й4д пре4й4с пере3й4т перег4ній перед5о4бід пере3в4том пере4д5см перед5у4мов під5о4дин пів5о4с4тр пі5в4ень по3б4лизу по3в4тор поч4не поч4ни поч4ну поя4в по3в4чен по3в4чіть по3д4роб по3д4раз по3д4во по5ж4ніть по5з4бав .пої4 пої4д прої4 пої4зд по4с4т5радян по4с4т5кому по4с4т3декр по4с4т3контра по4с4т3менопауз по4с4тприват по4с4т3раді по4с4т5соці пос4т3кап пос4т3ком пос4т3нат пос4т3проц пос4т3соц пос4т3фікс при3й4т про3с4тирад про4ф3с полі4т5екон пор4т3н пор4т3рет пор4т3фел при3й4д при4нцип про4ект3н про3б4лем про4м3май пр4о5плат раді4о рай3в4но ро4з5д4во ро4з5мінний роз5у4чен роз5і4мен роз5вант роз5вин роз5вит ро4з5діл ро4з5гор ро4з5вер ро4з5чеп ро4з'5єдн з'4єдн руко5с4тиск ро5з4ум ро4з3гром ро4з3лив рмої4д сан4к4т3 сеї4д серцеї4д спе4ц3кур спе4ц3мон спе4цпр спе4ц3с спор4т3вир спор4т3зал спор4т3ком спор4т3клуб спор4т3май спор4т4с3ме сор4тн 3с4промож сь4квуг стат5упр тор4г3пред тран4с3 тур4к3мен цук3ро у4к4р укр3а4вт укр3а4гр укр3е4кс укр3і4н4банк убої4д чорно3б4рив цен4т4р3енерг ясої4д ви3у4ч за3у4ч на3у4ч недо3у4ч не3у4ч під3у4ч пед3у4чи пере3у4ч само3у4ч вия4в з'я4в зая4в ная4в уя4в во4євод во4єнач сво4єчас сво4єкорис сво4єрід хво4є3г4риз гелі4о ді4о еті4о мі4о і4он полі4о соці4о фізі4о хімі4о гоме4о ді4алог ді4оген дея4к оо4динок ао4пік ао4ха ео4ха зо6о ка5нал оі4зол міжу4соб мете4о абия4к нія4к вия4сн най3я4сн нея4сн поя4сн проя4сн роз'я4сн ро5з4ора. ро5з4о5рам ро5з4орах ро5з4ори ро5з4оро ро5з4ору ро5з4оря ро5з4орю ро5з4орі ро6з5о4ри. розо4ра розо4ре розо4реш розо4рн напоу4м неа4би ео4цін оо4цін доу4к доу4м ео4бур ео4голош ео4зор бальне4о не4оліт не4омальт не4оклас не4окомун не4оландш не4олог не4олібер не4онац не4офіт нею4н нея4к нея4рок но4к3а4ут пі5в4оні піво4с пале4о па4н3о4тець .пе4ом. д3у4сім п4о5бере ао4хот ое4ко ео4хот ео4щад ао4щад оо4чищ поя4с роз'я4р те4одоліт те4олог те4ософ оо4біг оу4сун оу4ком пів3о4вал а3у4дар о3у4дар з3у4дар в3у4дар контр3у4дар о3о4кисл и3о4кисл ень7о4кисл е3о4кисл х3о4кисл и3і4стор о3і4стор і3і4стор а3і4стор я3і4стор е3і4стор наді4стор най3і4стор пів3і4стор перед3і4стор пост3і4стор ар4т3афіш ар4т3взвод ар4т3десант ар4т3кафе ар4т3майс ар4т3медіа ар4т3мейс ар4т3мін ар4т3о4бстр ар4т3о4дин ар4т3о4збр ар4т3під ар4т3рин ар4т3у4стан ар4т3факт ар4т3хім ар4т3центр наді4стот найі4стот еі4стот оі4стот ау4т3екол оо4чист з3а4кт оа4кт еа4кт гіпер3а4кт найа4кт піва4кт ао4браз ео4браз оо4браз граф3о4браз най3о4браз супер3о4браз ар4т3мейст баге4р3мейст бале4т3мейст бран4д3мейст ва4ль4д3мейст ве4ль4т3мейст го4ф3мейст гро4с3мейст декре4т3мейст до4к3мейст капе4ль3мейст кварти4р3мейст конце4р4т3мейст кра4н3мейст полі4ц3мейст по4ш4т3мейст фо4р4с4т3мейст хо4р3мейст шапі4т3мейст шта4л3мейст єге4р3мейст иа4варі яа4варі оа4варі еа4варі беза4варі між3а4варі над3а4варі пост3а4варі напів3а4варі перед3а4варі супер3а4варі аа4дрес еа4дрес оа4дрес іа4дрес без3а4дрес ае4фект ее4фект ое4фект най3е4фект супер3е4фект ое4місі ие4місі яе4місі ее4місі безе4місі гіпер3е4місі еу4бог й3у4бог ий4ня зай4ня здій4ня най4ня обій4ня перей4ня підій4ня прий4м пій4м дій4ма вий4м най4ма зай4м д4о3й4м обой4м прой4м обій4м перей4м безу4гл безу4пин бло4к3пост .блі4ц3ана .блі4ц3криг .блі4ц3опит .блі4ц3торг .блі4ц3тур .блі4ц3і4спит о3а4наліз бак3а4наліз ц3а4наліз ген3а4наліз з3а4наліз м3а4наліз нт3а4наліз між3а4наліз полі3а4наліз ре3а4наліз оу4год ау4год еу4год пів3у4год роз3у4год гос4п3у4год ео4пис оо4пис ао4пис бо4р4т3мех бо4р4т3о4пер бо4р4т3про бо4р4т3рад бо4р4т3і4нж оа4каці оу4с оо4держ оа4на біблі4о .на3в4ч .ви3в4ч .до3в4ч .за3в4ч .по3в4ч .при3в4ч ана3в4ч ена3в4ч мона3в4ч жона3в4ч іона3в4ч ови3в4ч еви3в4ч едо3в4ч оза3в4ч по3в4ча .ом4рі е3м4рій .ви3м4р .віді3м4р .зав3м4р .за3м4р .зі3м4р .на3м4р .пере3м4р .по3м4р .при3м4р .роз3м4р .ум4ри .ум4рі .ум4ру .ум4ре во4станнє най3о4станн перед3о4станн ие4стет ое4стет ее4стет й3е4стет пан3е4стет пар3е4стет оо4ктан іо4ктан оо4плачув ео4плачув перед3о4пла виу4ди о3в4каз е3в4каз 8-7 --8 .а-8 .б-8 .в-8 .г-8 .ґ-8 .д-8 .е-8 .є-8 .ж-8 .з-8 .и-8 .і-8 .ї-8 .й-8 .к-8 .л-8 .м-8 .н-8 .о-8 .п-8 .р-8 .с-8 .т-8 .у-8 .ф-8 .х-8 .ц-8 .ч-8 .ш-8 .щ-8 .ь-8 .ю-8 .я-8 .'-8 -а8а8 8а8а- -а8б8 8а8б- -а8в8 8а8в- -а8г8 8а8г- -а8ґ8 8а8ґ- -а8д8 8а8д- -а8е8 8а8е- -а8є8 8а8є- -а8ж8 8а8ж- -а8з8 8а8з- -а8и8 8а8и- -а8і8 8а8і- -а8ї8 8а8ї- -а8й8 8а8й- -а8к8 8а8к- -а8л8 8а8л- -а8м8 8а8м- -а8н8 8а8н- -а8о8 8а8о- -а8п8 8а8п- -а8р8 8а8р- -а8с8 8а8с- -а8т8 8а8т- -а8у8 8а8у- -а8ф8 8а8ф- -а8х8 8а8х- -а8ц8 8а8ц- -а8ч8 8а8ч- -а8ш8 8а8ш- -а8щ8 8а8щ- -а8ь8 8а8ь- -а8ю8 8а8ю- -а8я8 8а8я- -а8'8 8а8'- -б8а8 8б8а- -б8б8 8б8б- -б8в8 8б8в- -б8г8 8б8г- -б8ґ8 8б8ґ- -б8д8 8б8д- -б8е8 8б8е- -б8є8 8б8є- -б8ж8 8б8ж- -б8з8 8б8з- -б8и8 8б8и- -б8і8 8б8і- -б8ї8 8б8ї- -б8й8 8б8й- -б8к8 8б8к- -б8л8 8б8л- -б8м8 8б8м- -б8н8 8б8н- -б8о8 8б8о- -б8п8 8б8п- -б8р8 8б8р- -б8с8 8б8с- -б8т8 8б8т- -б8у8 8б8у- -б8ф8 8б8ф- -б8х8 8б8х- -б8ц8 8б8ц- -б8ч8 8б8ч- -б8ш8 8б8ш- -б8щ8 8б8щ- -б8ь8 8б8ь- -б8ю8 8б8ю- -б8я8 8б8я- -б8'8 8б8'- -в8а8 8в8а- -в8б8 8в8б- -в8в8 8в8в- -в8г8 8в8г- -в8ґ8 8в8ґ- -в8д8 8в8д- -в8е8 8в8е- -в8є8 8в8є- -в8ж8 8в8ж- -в8з8 8в8з- -в8и8 8в8и- -в8і8 8в8і- -в8ї8 8в8ї- -в8й8 8в8й- -в8к8 8в8к- -в8л8 8в8л- -в8м8 8в8м- -в8н8 8в8н- -в8о8 8в8о- -в8п8 8в8п- -в8р8 8в8р- -в8с8 8в8с- -в8т8 8в8т- -в8у8 8в8у- -в8ф8 8в8ф- -в8х8 8в8х- -в8ц8 8в8ц- -в8ч8 8в8ч- -в8ш8 8в8ш- -в8щ8 8в8щ- -в8ь8 8в8ь- -в8ю8 8в8ю- -в8я8 8в8я- -в8'8 8в8'- -г8а8 8г8а- -г8б8 8г8б- -г8в8 8г8в- -г8г8 8г8г- -г8ґ8 8г8ґ- -г8д8 8г8д- -г8е8 8г8е- -г8є8 8г8є- -г8ж8 8г8ж- -г8з8 8г8з- -г8и8 8г8и- -г8і8 8г8і- -г8ї8 8г8ї- -г8й8 8г8й- -г8к8 8г8к- -г8л8 8г8л- -г8м8 8г8м- -г8н8 8г8н- -г8о8 8г8о- -г8п8 8г8п- -г8р8 8г8р- -г8с8 8г8с- -г8т8 8г8т- -г8у8 8г8у- -г8ф8 8г8ф- -г8х8 8г8х- -г8ц8 8г8ц- -г8ч8 8г8ч- -г8ш8 8г8ш- -г8щ8 8г8щ- -г8ь8 8г8ь- -г8ю8 8г8ю- -г8я8 8г8я- -г8'8 8г8'- -ґ8а8 8ґ8а- -ґ8б8 8ґ8б- -ґ8в8 8ґ8в- -ґ8г8 8ґ8г- -ґ8ґ8 8ґ8ґ- -ґ8д8 8ґ8д- -ґ8е8 8ґ8е- -ґ8є8 8ґ8є- -ґ8ж8 8ґ8ж- -ґ8з8 8ґ8з- -ґ8и8 8ґ8и- -ґ8і8 8ґ8і- -ґ8ї8 8ґ8ї- -ґ8й8 8ґ8й- -ґ8к8 8ґ8к- -ґ8л8 8ґ8л- -ґ8м8 8ґ8м- -ґ8н8 8ґ8н- -ґ8о8 8ґ8о- -ґ8п8 8ґ8п- -ґ8р8 8ґ8р- -ґ8с8 8ґ8с- -ґ8т8 8ґ8т- -ґ8у8 8ґ8у- -ґ8ф8 8ґ8ф- -ґ8х8 8ґ8х- -ґ8ц8 8ґ8ц- -ґ8ч8 8ґ8ч- -ґ8ш8 8ґ8ш- -ґ8щ8 8ґ8щ- -ґ8ь8 8ґ8ь- -ґ8ю8 8ґ8ю- -ґ8я8 8ґ8я- -ґ8'8 8ґ8'- -д8а8 8д8а- -д8б8 8д8б- -д8в8 8д8в- -д8г8 8д8г- -д8ґ8 8д8ґ- -д8д8 8д8д- -д8е8 8д8е- -д8є8 8д8є- -д8ж8 8д8ж- -д8з8 8д8з- -д8и8 8д8и- -д8і8 8д8і- -д8ї8 8д8ї- -д8й8 8д8й- -д8к8 8д8к- -д8л8 8д8л- -д8м8 8д8м- -д8н8 8д8н- -д8о8 8д8о- -д8п8 8д8п- -д8р8 8д8р- -д8с8 8д8с- -д8т8 8д8т- -д8у8 8д8у- -д8ф8 8д8ф- -д8х8 8д8х- -д8ц8 8д8ц- -д8ч8 8д8ч- -д8ш8 8д8ш- -д8щ8 8д8щ- -д8ь8 8д8ь- -д8ю8 8д8ю- -д8я8 8д8я- -д8'8 8д8'- -е8а8 8е8а- -е8б8 8е8б- -е8в8 8е8в- -е8г8 8е8г- -е8ґ8 8е8ґ- -е8д8 8е8д- -е8е8 8е8е- -е8є8 8е8є- -е8ж8 8е8ж- -е8з8 8е8з- -е8и8 8е8и- -е8і8 8е8і- -е8ї8 8е8ї- -е8й8 8е8й- -е8к8 8е8к- -е8л8 8е8л- -е8м8 8е8м- -е8н8 8е8н- -е8о8 8е8о- -е8п8 8е8п- -е8р8 8е8р- -е8с8 8е8с- -е8т8 8е8т- -е8у8 8е8у- -е8ф8 8е8ф- -е8х8 8е8х- -е8ц8 8е8ц- -е8ч8 8е8ч- -е8ш8 8е8ш- -е8щ8 8е8щ- -е8ь8 8е8ь- -е8ю8 8е8ю- -е8я8 8е8я- -е8'8 8е8'- -є8а8 8є8а- -є8б8 8є8б- -є8в8 8є8в- -є8г8 8є8г- -є8ґ8 8є8ґ- -є8д8 8є8д- -є8е8 8є8е- -є8є8 8є8є- -є8ж8 8є8ж- -є8з8 8є8з- -є8и8 8є8и- -є8і8 8є8і- -є8ї8 8є8ї- -є8й8 8є8й- -є8к8 8є8к- -є8л8 8є8л- -є8м8 8є8м- -є8н8 8є8н- -є8о8 8є8о- -є8п8 8є8п- -є8р8 8є8р- -є8с8 8є8с- -є8т8 8є8т- -є8у8 8є8у- -є8ф8 8є8ф- -є8х8 8є8х- -є8ц8 8є8ц- -є8ч8 8є8ч- -є8ш8 8є8ш- -є8щ8 8є8щ- -є8ь8 8є8ь- -є8ю8 8є8ю- -є8я8 8є8я- -є8'8 8є8'- -ж8а8 8ж8а- -ж8б8 8ж8б- -ж8в8 8ж8в- -ж8г8 8ж8г- -ж8ґ8 8ж8ґ- -ж8д8 8ж8д- -ж8е8 8ж8е- -ж8є8 8ж8є- -ж8ж8 8ж8ж- -ж8з8 8ж8з- -ж8и8 8ж8и- -ж8і8 8ж8і- -ж8ї8 8ж8ї- -ж8й8 8ж8й- -ж8к8 8ж8к- -ж8л8 8ж8л- -ж8м8 8ж8м- -ж8н8 8ж8н- -ж8о8 8ж8о- -ж8п8 8ж8п- -ж8р8 8ж8р- -ж8с8 8ж8с- -ж8т8 8ж8т- -ж8у8 8ж8у- -ж8ф8 8ж8ф- -ж8х8 8ж8х- -ж8ц8 8ж8ц- -ж8ч8 8ж8ч- -ж8ш8 8ж8ш- -ж8щ8 8ж8щ- -ж8ь8 8ж8ь- -ж8ю8 8ж8ю- -ж8я8 8ж8я- -ж8'8 8ж8'- -з8а8 8з8а- -з8б8 8з8б- -з8в8 8з8в- -з8г8 8з8г- -з8ґ8 8з8ґ- -з8д8 8з8д- -з8е8 8з8е- -з8є8 8з8є- -з8ж8 8з8ж- -з8з8 8з8з- -з8и8 8з8и- -з8і8 8з8і- -з8ї8 8з8ї- -з8й8 8з8й- -з8к8 8з8к- -з8л8 8з8л- -з8м8 8з8м- -з8н8 8з8н- -з8о8 8з8о- -з8п8 8з8п- -з8р8 8з8р- -з8с8 8з8с- -з8т8 8з8т- -з8у8 8з8у- -з8ф8 8з8ф- -з8х8 8з8х- -з8ц8 8з8ц- -з8ч8 8з8ч- -з8ш8 8з8ш- -з8щ8 8з8щ- -з8ь8 8з8ь- -з8ю8 8з8ю- -з8я8 8з8я- -з8'8 8з8'- -и8а8 8и8а- -и8б8 8и8б- -и8в8 8и8в- -и8г8 8и8г- -и8ґ8 8и8ґ- -и8д8 8и8д- -и8е8 8и8е- -и8є8 8и8є- -и8ж8 8и8ж- -и8з8 8и8з- -и8и8 8и8и- -и8і8 8и8і- -и8ї8 8и8ї- -и8й8 8и8й- -и8к8 8и8к- -и8л8 8и8л- -и8м8 8и8м- -и8н8 8и8н- -и8о8 8и8о- -и8п8 8и8п- -и8р8 8и8р- -и8с8 8и8с- -и8т8 8и8т- -и8у8 8и8у- -и8ф8 8и8ф- -и8х8 8и8х- -и8ц8 8и8ц- -и8ч8 8и8ч- -и8ш8 8и8ш- -и8щ8 8и8щ- -и8ь8 8и8ь- -и8ю8 8и8ю- -и8я8 8и8я- -и8'8 8и8'- -і8а8 8і8а- -і8б8 8і8б- -і8в8 8і8в- -і8г8 8і8г- -і8ґ8 8і8ґ- -і8д8 8і8д- -і8е8 8і8е- -і8є8 8і8є- -і8ж8 8і8ж- -і8з8 8і8з- -і8и8 8і8и- -і8і8 8і8і- -і8ї8 8і8ї- -і8й8 8і8й- -і8к8 8і8к- -і8л8 8і8л- -і8м8 8і8м- -і8н8 8і8н- -і8о8 8і8о- -і8п8 8і8п- -і8р8 8і8р- -і8с8 8і8с- -і8т8 8і8т- -і8у8 8і8у- -і8ф8 8і8ф- -і8х8 8і8х- -і8ц8 8і8ц- -і8ч8 8і8ч- -і8ш8 8і8ш- -і8щ8 8і8щ- -і8ь8 8і8ь- -і8ю8 8і8ю- -і8я8 8і8я- -і8'8 8і8'- -ї8а8 8ї8а- -ї8б8 8ї8б- -ї8в8 8ї8в- -ї8г8 8ї8г- -ї8ґ8 8ї8ґ- -ї8д8 8ї8д- -ї8е8 8ї8е- -ї8є8 8ї8є- -ї8ж8 8ї8ж- -ї8з8 8ї8з- -ї8и8 8ї8и- -ї8і8 8ї8і- -ї8ї8 8ї8ї- -ї8й8 8ї8й- -ї8к8 8ї8к- -ї8л8 8ї8л- -ї8м8 8ї8м- -ї8н8 8ї8н- -ї8о8 8ї8о- -ї8п8 8ї8п- -ї8р8 8ї8р- -ї8с8 8ї8с- -ї8т8 8ї8т- -ї8у8 8ї8у- -ї8ф8 8ї8ф- -ї8х8 8ї8х- -ї8ц8 8ї8ц- -ї8ч8 8ї8ч- -ї8ш8 8ї8ш- -ї8щ8 8ї8щ- -ї8ь8 8ї8ь- -ї8ю8 8ї8ю- -ї8я8 8ї8я- -ї8'8 8ї8'- -й8а8 8й8а- -й8б8 8й8б- -й8в8 8й8в- -й8г8 8й8г- -й8ґ8 8й8ґ- -й8д8 8й8д- -й8е8 8й8е- -й8є8 8й8є- -й8ж8 8й8ж- -й8з8 8й8з- -й8и8 8й8и- -й8і8 8й8і- -й8ї8 8й8ї- -й8й8 8й8й- -й8к8 8й8к- -й8л8 8й8л- -й8м8 8й8м- -й8н8 8й8н- -й8о8 8й8о- -й8п8 8й8п- -й8р8 8й8р- -й8с8 8й8с- -й8т8 8й8т- -й8у8 8й8у- -й8ф8 8й8ф- -й8х8 8й8х- -й8ц8 8й8ц- -й8ч8 8й8ч- -й8ш8 8й8ш- -й8щ8 8й8щ- -й8ь8 8й8ь- -й8ю8 8й8ю- -й8я8 8й8я- -й8'8 8й8'- -к8а8 8к8а- -к8б8 8к8б- -к8в8 8к8в- -к8г8 8к8г- -к8ґ8 8к8ґ- -к8д8 8к8д- -к8е8 8к8е- -к8є8 8к8є- -к8ж8 8к8ж- -к8з8 8к8з- -к8и8 8к8и- -к8і8 8к8і- -к8ї8 8к8ї- -к8й8 8к8й- -к8к8 8к8к- -к8л8 8к8л- -к8м8 8к8м- -к8н8 8к8н- -к8о8 8к8о- -к8п8 8к8п- -к8р8 8к8р- -к8с8 8к8с- -к8т8 8к8т- -к8у8 8к8у- -к8ф8 8к8ф- -к8х8 8к8х- -к8ц8 8к8ц- -к8ч8 8к8ч- -к8ш8 8к8ш- -к8щ8 8к8щ- -к8ь8 8к8ь- -к8ю8 8к8ю- -к8я8 8к8я- -к8'8 8к8'- -л8а8 8л8а- -л8б8 8л8б- -л8в8 8л8в- -л8г8 8л8г- -л8ґ8 8л8ґ- -л8д8 8л8д- -л8е8 8л8е- -л8є8 8л8є- -л8ж8 8л8ж- -л8з8 8л8з- -л8и8 8л8и- -л8і8 8л8і- -л8ї8 8л8ї- -л8й8 8л8й- -л8к8 8л8к- -л8л8 8л8л- -л8м8 8л8м- -л8н8 8л8н- -л8о8 8л8о- -л8п8 8л8п- -л8р8 8л8р- -л8с8 8л8с- -л8т8 8л8т- -л8у8 8л8у- -л8ф8 8л8ф- -л8х8 8л8х- -л8ц8 8л8ц- -л8ч8 8л8ч- -л8ш8 8л8ш- -л8щ8 8л8щ- -л8ь8 8л8ь- -л8ю8 8л8ю- -л8я8 8л8я- -л8'8 8л8'- -м8а8 8м8а- -м8б8 8м8б- -м8в8 8м8в- -м8г8 8м8г- -м8ґ8 8м8ґ- -м8д8 8м8д- -м8е8 8м8е- -м8є8 8м8є- -м8ж8 8м8ж- -м8з8 8м8з- -м8и8 8м8и- -м8і8 8м8і- -м8ї8 8м8ї- -м8й8 8м8й- -м8к8 8м8к- -м8л8 8м8л- -м8м8 8м8м- -м8н8 8м8н- -м8о8 8м8о- -м8п8 8м8п- -м8р8 8м8р- -м8с8 8м8с- -м8т8 8м8т- -м8у8 8м8у- -м8ф8 8м8ф- -м8х8 8м8х- -м8ц8 8м8ц- -м8ч8 8м8ч- -м8ш8 8м8ш- -м8щ8 8м8щ- -м8ь8 8м8ь- -м8ю8 8м8ю- -м8я8 8м8я- -м8'8 8м8'- -н8а8 8н8а- -н8б8 8н8б- -н8в8 8н8в- -н8г8 8н8г- -н8ґ8 8н8ґ- -н8д8 8н8д- -н8е8 8н8е- -н8є8 8н8є- -н8ж8 8н8ж- -н8з8 8н8з- -н8и8 8н8и- -н8і8 8н8і- -н8ї8 8н8ї- -н8й8 8н8й- -н8к8 8н8к- -н8л8 8н8л- -н8м8 8н8м- -н8н8 8н8н- -н8о8 8н8о- -н8п8 8н8п- -н8р8 8н8р- -н8с8 8н8с- -н8т8 8н8т- -н8у8 8н8у- -н8ф8 8н8ф- -н8х8 8н8х- -н8ц8 8н8ц- -н8ч8 8н8ч- -н8ш8 8н8ш- -н8щ8 8н8щ- -н8ь8 8н8ь- -н8ю8 8н8ю- -н8я8 8н8я- -н8'8 8н8'- -о8а8 8о8а- -о8б8 8о8б- -о8в8 8о8в- -о8г8 8о8г- -о8ґ8 8о8ґ- -о8д8 8о8д- -о8е8 8о8е- -о8є8 8о8є- -о8ж8 8о8ж- -о8з8 8о8з- -о8и8 8о8и- -о8і8 8о8і- -о8ї8 8о8ї- -о8й8 8о8й- -о8к8 8о8к- -о8л8 8о8л- -о8м8 8о8м- -о8н8 8о8н- -о8о8 8о8о- -о8п8 8о8п- -о8р8 8о8р- -о8с8 8о8с- -о8т8 8о8т- -о8у8 8о8у- -о8ф8 8о8ф- -о8х8 8о8х- -о8ц8 8о8ц- -о8ч8 8о8ч- -о8ш8 8о8ш- -о8щ8 8о8щ- -о8ь8 8о8ь- -о8ю8 8о8ю- -о8я8 8о8я- -о8'8 8о8'- -п8а8 8п8а- -п8б8 8п8б- -п8в8 8п8в- -п8г8 8п8г- -п8ґ8 8п8ґ- -п8д8 8п8д- -п8е8 8п8е- -п8є8 8п8є- -п8ж8 8п8ж- -п8з8 8п8з- -п8и8 8п8и- -п8і8 8п8і- -п8ї8 8п8ї- -п8й8 8п8й- -п8к8 8п8к- -п8л8 8п8л- -п8м8 8п8м- -п8н8 8п8н- -п8о8 8п8о- -п8п8 8п8п- -п8р8 8п8р- -п8с8 8п8с- -п8т8 8п8т- -п8у8 8п8у- -п8ф8 8п8ф- -п8х8 8п8х- -п8ц8 8п8ц- -п8ч8 8п8ч- -п8ш8 8п8ш- -п8щ8 8п8щ- -п8ь8 8п8ь- -п8ю8 8п8ю- -п8я8 8п8я- -п8'8 8п8'- -р8а8 8р8а- -р8б8 8р8б- -р8в8 8р8в- -р8г8 8р8г- -р8ґ8 8р8ґ- -р8д8 8р8д- -р8е8 8р8е- -р8є8 8р8є- -р8ж8 8р8ж- -р8з8 8р8з- -р8и8 8р8и- -р8і8 8р8і- -р8ї8 8р8ї- -р8й8 8р8й- -р8к8 8р8к- -р8л8 8р8л- -р8м8 8р8м- -р8н8 8р8н- -р8о8 8р8о- -р8п8 8р8п- -р8р8 8р8р- -р8с8 8р8с- -р8т8 8р8т- -р8у8 8р8у- -р8ф8 8р8ф- -р8х8 8р8х- -р8ц8 8р8ц- -р8ч8 8р8ч- -р8ш8 8р8ш- -р8щ8 8р8щ- -р8ь8 8р8ь- -р8ю8 8р8ю- -р8я8 8р8я- -р8'8 8р8'- -с8а8 8с8а- -с8б8 8с8б- -с8в8 8с8в- -с8г8 8с8г- -с8ґ8 8с8ґ- -с8д8 8с8д- -с8е8 8с8е- -с8є8 8с8є- -с8ж8 8с8ж- -с8з8 8с8з- -с8и8 8с8и- -с8і8 8с8і- -с8ї8 8с8ї- -с8й8 8с8й- -с8к8 8с8к- -с8л8 8с8л- -с8м8 8с8м- -с8н8 8с8н- -с8о8 8с8о- -с8п8 8с8п- -с8р8 8с8р- -с8с8 8с8с- -с8т8 8с8т- -с8у8 8с8у- -с8ф8 8с8ф- -с8х8 8с8х- -с8ц8 8с8ц- -с8ч8 8с8ч- -с8ш8 8с8ш- -с8щ8 8с8щ- -с8ь8 8с8ь- -с8ю8 8с8ю- -с8я8 8с8я- -с8'8 8с8'- -т8а8 8т8а- -т8б8 8т8б- -т8в8 8т8в- -т8г8 8т8г- -т8ґ8 8т8ґ- -т8д8 8т8д- -т8е8 8т8е- -т8є8 8т8є- -т8ж8 8т8ж- -т8з8 8т8з- -т8и8 8т8и- -т8і8 8т8і- -т8ї8 8т8ї- -т8й8 8т8й- -т8к8 8т8к- -т8л8 8т8л- -т8м8 8т8м- -т8н8 8т8н- -т8о8 8т8о- -т8п8 8т8п- -т8р8 8т8р- -т8с8 8т8с- -т8т8 8т8т- -т8у8 8т8у- -т8ф8 8т8ф- -т8х8 8т8х- -т8ц8 8т8ц- -т8ч8 8т8ч- -т8ш8 8т8ш- -т8щ8 8т8щ- -т8ь8 8т8ь- -т8ю8 8т8ю- -т8я8 8т8я- -т8'8 8т8'- -у8а8 8у8а- -у8б8 8у8б- -у8в8 8у8в- -у8г8 8у8г- -у8ґ8 8у8ґ- -у8д8 8у8д- -у8е8 8у8е- -у8є8 8у8є- -у8ж8 8у8ж- -у8з8 8у8з- -у8и8 8у8и- -у8і8 8у8і- -у8ї8 8у8ї- -у8й8 8у8й- -у8к8 8у8к- -у8л8 8у8л- -у8м8 8у8м- -у8н8 8у8н- -у8о8 8у8о- -у8п8 8у8п- -у8р8 8у8р- -у8с8 8у8с- -у8т8 8у8т- -у8у8 8у8у- -у8ф8 8у8ф- -у8х8 8у8х- -у8ц8 8у8ц- -у8ч8 8у8ч- -у8ш8 8у8ш- -у8щ8 8у8щ- -у8ь8 8у8ь- -у8ю8 8у8ю- -у8я8 8у8я- -у8'8 8у8'- -ф8а8 8ф8а- -ф8б8 8ф8б- -ф8в8 8ф8в- -ф8г8 8ф8г- -ф8ґ8 8ф8ґ- -ф8д8 8ф8д- -ф8е8 8ф8е- -ф8є8 8ф8є- -ф8ж8 8ф8ж- -ф8з8 8ф8з- -ф8и8 8ф8и- -ф8і8 8ф8і- -ф8ї8 8ф8ї- -ф8й8 8ф8й- -ф8к8 8ф8к- -ф8л8 8ф8л- -ф8м8 8ф8м- -ф8н8 8ф8н- -ф8о8 8ф8о- -ф8п8 8ф8п- -ф8р8 8ф8р- -ф8с8 8ф8с- -ф8т8 8ф8т- -ф8у8 8ф8у- -ф8ф8 8ф8ф- -ф8х8 8ф8х- -ф8ц8 8ф8ц- -ф8ч8 8ф8ч- -ф8ш8 8ф8ш- -ф8щ8 8ф8щ- -ф8ь8 8ф8ь- -ф8ю8 8ф8ю- -ф8я8 8ф8я- -ф8'8 8ф8'- -х8а8 8х8а- -х8б8 8х8б- -х8в8 8х8в- -х8г8 8х8г- -х8ґ8 8х8ґ- -х8д8 8х8д- -х8е8 8х8е- -х8є8 8х8є- -х8ж8 8х8ж- -х8з8 8х8з- -х8и8 8х8и- -х8і8 8х8і- -х8ї8 8х8ї- -х8й8 8х8й- -х8к8 8х8к- -х8л8 8х8л- -х8м8 8х8м- -х8н8 8х8н- -х8о8 8х8о- -х8п8 8х8п- -х8р8 8х8р- -х8с8 8х8с- -х8т8 8х8т- -х8у8 8х8у- -х8ф8 8х8ф- -х8х8 8х8х- -х8ц8 8х8ц- -х8ч8 8х8ч- -х8ш8 8х8ш- -х8щ8 8х8щ- -х8ь8 8х8ь- -х8ю8 8х8ю- -х8я8 8х8я- -х8'8 8х8'- -ц8а8 8ц8а- -ц8б8 8ц8б- -ц8в8 8ц8в- -ц8г8 8ц8г- -ц8ґ8 8ц8ґ- -ц8д8 8ц8д- -ц8е8 8ц8е- -ц8є8 8ц8є- -ц8ж8 8ц8ж- -ц8з8 8ц8з- -ц8и8 8ц8и- -ц8і8 8ц8і- -ц8ї8 8ц8ї- -ц8й8 8ц8й- -ц8к8 8ц8к- -ц8л8 8ц8л- -ц8м8 8ц8м- -ц8н8 8ц8н- -ц8о8 8ц8о- -ц8п8 8ц8п- -ц8р8 8ц8р- -ц8с8 8ц8с- -ц8т8 8ц8т- -ц8у8 8ц8у- -ц8ф8 8ц8ф- -ц8х8 8ц8х- -ц8ц8 8ц8ц- -ц8ч8 8ц8ч- -ц8ш8 8ц8ш- -ц8щ8 8ц8щ- -ц8ь8 8ц8ь- -ц8ю8 8ц8ю- -ц8я8 8ц8я- -ц8'8 8ц8'- -ч8а8 8ч8а- -ч8б8 8ч8б- -ч8в8 8ч8в- -ч8г8 8ч8г- -ч8ґ8 8ч8ґ- -ч8д8 8ч8д- -ч8е8 8ч8е- -ч8є8 8ч8є- -ч8ж8 8ч8ж- -ч8з8 8ч8з- -ч8и8 8ч8и- -ч8і8 8ч8і- -ч8ї8 8ч8ї- -ч8й8 8ч8й- -ч8к8 8ч8к- -ч8л8 8ч8л- -ч8м8 8ч8м- -ч8н8 8ч8н- -ч8о8 8ч8о- -ч8п8 8ч8п- -ч8р8 8ч8р- -ч8с8 8ч8с- -ч8т8 8ч8т- -ч8у8 8ч8у- -ч8ф8 8ч8ф- -ч8х8 8ч8х- -ч8ц8 8ч8ц- -ч8ч8 8ч8ч- -ч8ш8 8ч8ш- -ч8щ8 8ч8щ- -ч8ь8 8ч8ь- -ч8ю8 8ч8ю- -ч8я8 8ч8я- -ч8'8 8ч8'- -ш8а8 8ш8а- -ш8б8 8ш8б- -ш8в8 8ш8в- -ш8г8 8ш8г- -ш8ґ8 8ш8ґ- -ш8д8 8ш8д- -ш8е8 8ш8е- -ш8є8 8ш8є- -ш8ж8 8ш8ж- -ш8з8 8ш8з- -ш8и8 8ш8и- -ш8і8 8ш8і- -ш8ї8 8ш8ї- -ш8й8 8ш8й- -ш8к8 8ш8к- -ш8л8 8ш8л- -ш8м8 8ш8м- -ш8н8 8ш8н- -ш8о8 8ш8о- -ш8п8 8ш8п- -ш8р8 8ш8р- -ш8с8 8ш8с- -ш8т8 8ш8т- -ш8у8 8ш8у- -ш8ф8 8ш8ф- -ш8х8 8ш8х- -ш8ц8 8ш8ц- -ш8ч8 8ш8ч- -ш8ш8 8ш8ш- -ш8щ8 8ш8щ- -ш8ь8 8ш8ь- -ш8ю8 8ш8ю- -ш8я8 8ш8я- -ш8'8 8ш8'- -щ8а8 8щ8а- -щ8б8 8щ8б- -щ8в8 8щ8в- -щ8г8 8щ8г- -щ8ґ8 8щ8ґ- -щ8д8 8щ8д- -щ8е8 8щ8е- -щ8є8 8щ8є- -щ8ж8 8щ8ж- -щ8з8 8щ8з- -щ8и8 8щ8и- -щ8і8 8щ8і- -щ8ї8 8щ8ї- -щ8й8 8щ8й- -щ8к8 8щ8к- -щ8л8 8щ8л- -щ8м8 8щ8м- -щ8н8 8щ8н- -щ8о8 8щ8о- -щ8п8 8щ8п- -щ8р8 8щ8р- -щ8с8 8щ8с- -щ8т8 8щ8т- -щ8у8 8щ8у- -щ8ф8 8щ8ф- -щ8х8 8щ8х- -щ8ц8 8щ8ц- -щ8ч8 8щ8ч- -щ8ш8 8щ8ш- -щ8щ8 8щ8щ- -щ8ь8 8щ8ь- -щ8ю8 8щ8ю- -щ8я8 8щ8я- -щ8'8 8щ8'- -ь8а8 8ь8а- -ь8б8 8ь8б- -ь8в8 8ь8в- -ь8г8 8ь8г- -ь8ґ8 8ь8ґ- -ь8д8 8ь8д- -ь8е8 8ь8е- -ь8є8 8ь8є- -ь8ж8 8ь8ж- -ь8з8 8ь8з- -ь8и8 8ь8и- -ь8і8 8ь8і- -ь8ї8 8ь8ї- -ь8й8 8ь8й- -ь8к8 8ь8к- -ь8л8 8ь8л- -ь8м8 8ь8м- -ь8н8 8ь8н- -ь8о8 8ь8о- -ь8п8 8ь8п- -ь8р8 8ь8р- -ь8с8 8ь8с- -ь8т8 8ь8т- -ь8у8 8ь8у- -ь8ф8 8ь8ф- -ь8х8 8ь8х- -ь8ц8 8ь8ц- -ь8ч8 8ь8ч- -ь8ш8 8ь8ш- -ь8щ8 8ь8щ- -ь8ь8 8ь8ь- -ь8ю8 8ь8ю- -ь8я8 8ь8я- -ь8'8 8ь8'- -ю8а8 8ю8а- -ю8б8 8ю8б- -ю8в8 8ю8в- -ю8г8 8ю8г- -ю8ґ8 8ю8ґ- -ю8д8 8ю8д- -ю8е8 8ю8е- -ю8є8 8ю8є- -ю8ж8 8ю8ж- -ю8з8 8ю8з- -ю8и8 8ю8и- -ю8і8 8ю8і- -ю8ї8 8ю8ї- -ю8й8 8ю8й- -ю8к8 8ю8к- -ю8л8 8ю8л- -ю8м8 8ю8м- -ю8н8 8ю8н- -ю8о8 8ю8о- -ю8п8 8ю8п- -ю8р8 8ю8р- -ю8с8 8ю8с- -ю8т8 8ю8т- -ю8у8 8ю8у- -ю8ф8 8ю8ф- -ю8х8 8ю8х- -ю8ц8 8ю8ц- -ю8ч8 8ю8ч- -ю8ш8 8ю8ш- -ю8щ8 8ю8щ- -ю8ь8 8ю8ь- -ю8ю8 8ю8ю- -ю8я8 8ю8я- -ю8'8 8ю8'- -я8а8 8я8а- -я8б8 8я8б- -я8в8 8я8в- -я8г8 8я8г- -я8ґ8 8я8ґ- -я8д8 8я8д- -я8е8 8я8е- -я8є8 8я8є- -я8ж8 8я8ж- -я8з8 8я8з- -я8и8 8я8и- -я8і8 8я8і- -я8ї8 8я8ї- -я8й8 8я8й- -я8к8 8я8к- -я8л8 8я8л- -я8м8 8я8м- -я8н8 8я8н- -я8о8 8я8о- -я8п8 8я8п- -я8р8 8я8р- -я8с8 8я8с- -я8т8 8я8т- -я8у8 8я8у- -я8ф8 8я8ф- -я8х8 8я8х- -я8ц8 8я8ц- -я8ч8 8я8ч- -я8ш8 8я8ш- -я8щ8 8я8щ- -я8ь8 8я8ь- -я8ю8 8я8ю- -я8я8 8я8я- -я8'8 8я8'- -'8а8 8'8а- -'8б8 8'8б- -'8в8 8'8в- -'8г8 8'8г- -'8ґ8 8'8ґ- -'8д8 8'8д- -'8е8 8'8е- -'8є8 8'8є- -'8ж8 8'8ж- -'8з8 8'8з- -'8и8 8'8и- -'8і8 8'8і- -'8ї8 8'8ї- -'8й8 8'8й- -'8к8 8'8к- -'8л8 8'8л- -'8м8 8'8м- -'8н8 8'8н- -'8о8 8'8о- -'8п8 8'8п- -'8р8 8'8р- -'8с8 8'8с- -'8т8 8'8т- -'8у8 8'8у- -'8ф8 8'8ф- -'8х8 8'8х- -'8ц8 8'8ц- -'8ч8 8'8ч- -'8ш8 8'8ш- -'8щ8 8'8щ- -'8ь8 8'8ь- -'8ю8 8'8ю- -'8я8 8'8я- -'8'8 8'8'-}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nb.lua0000644000175000017500000057351612161703335024662 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["characters"]="abdenrt", ["data"]="at-ten-de be-tre", ["length"]=16, ["n"]=2, }, ["metadata"]={ ["mnemonic"]="nb", ["source"]="hyph-nb", ["texcomment"]="% Norwegian Bokmal hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % Adapted to the new pattern-loading scheme.\ % Original file name was nbhyph.tex\ % \ % TeX hyphenation patterns for Norwegian Bokmal\ %\ % Version 2007-02-10\ %\ % Copyright (C) 2007 Karl Ove Hufthammer.\ % Copying and distribution of this file, with or without modification,\ % are permitted in any medium without royalty, provided the copyright\ % notice and this notice are preserved.\ %\ % This file contains hyphenation patterns for Norwegian Bokmal.\ % It uses the Norwegian hyphenation patterns from nohyphbx.tex,\ % created by Rune Kleveland and Ole Michael Selberg. Please see\ % that file for copyright information on those patterns.\ %\ % The patterns in nohyphbx are based on both Norwegian Bokmal\ % and Norwegian Nynorsk, and works about equally well for both\ % languages. This file, nbhyph.tex, contains only a few hyphenation\ % exceptions, for words that needs to be hyphenated differently for\ % the two languages.\ %\ % Please send bugs or suggestions to karl@huftis.org.\ %\ % \ % \\input hyph-no.tex\ % \ % \\hyphenation{\ % at-ten-de\ % be-tre\ % }\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzåæèéêòóôø", ["data"]=".a4 .aa4 .ab4ba .ab7be .ab6s5t .ac6tin .adel4s .ad8la. .ad6le. .ad2r .ad1s2 .af7f .af5t4 .af5f8u .ag6na. .ag6ne. .ag4r .ai2 .a6k .ak6ka. .ak6ke. .ak3kl .ak3kr .ak6ne. .ak6r .ak8sa. .ak4se. .ak6s3t .ak6ta .ak4te. .akte4r .akter5e .ak5tr .akva7 .a6l .albu5en .alfa3 .al4ge. .al5gi .al6ka. .al4ke. .al4kom .al4la. .al4le. .al5leg .al5lo .all5s6 .al4ma. .al8me. .al5m6in .al4na .alpe5 .al6s7k .als5o .alt4a .al4ta. .al5tar .al4te. .alt3o .al6ve. .am7b .a6me .am6ma. .am4me. .am4s4 .am6ta .a6n .ana3b .an4da. .an4de. .an5d4ra .an4d5ø .and6ø6v .an3er .anes5 .an4ga. .an3ge .an4ge. .ange4s .an4ja. .an4ka. .an4ke. .an4la. .an3n .an4na. .an7nal .ann4e .an4ne. .an5s8 .an4sa. .an4se. .ant2 .an4ta. .an4te. .an5tem .an5tep .an4ti. .an6tin .an4tis .an4tiv .ap8lan .ap1p6 .ap8t .arbi5 .ar6de. .are4o7 .ar4ge. .ar5ges .ari6a .ari8e .arie5ne .ar5ka .ar8ka. .arlan9 .ar4me. .ar7mea .ar4na. .ar3ne .ar4ne. .ar5nes .ar6ra. .ar6r7u .ar6ta. .ar4te. .ar3t4h .ar9ti .ar6va. .ar4ve. .ar4ved .ar4ver .arvi6 .a6s .as8ka .as4ke. .as5kese .as4le. .as6pa. .as5s .ast5ru .at4h .at4ki .at4le. .at4na. .at2o4 .at3s .atte4 .att6r .a5ty .au8de .au6e .au8ga .au4ge .au4ka. .au8le. .au4r .au6sa. .au6se. .aus9k .au4sp .avi2 .av7i6d .av7inde .av4la. .av4le. .av7s6 .b6 .ba6by .ba6la. .ba4le. .ba4ne. .ban4k3l .ba4re. .ba4ri. .ba8te. .be4de. .bede4n .be6d5ene .be4d5et .be8di. .be3e4d .be6ke. .be4la. .be9nar .be4ne. .be6ra. .be6re. .be4res .ber6ett .be8ri. .be7ska .be6sten .be4ta. .be6te. .be5t4v .bi6de. .bi6en .bi4le. .bilet5 .bi6t3r .bl4 .bla4d .ble4k3 .ble5k4e .blek4k3f .blekk3s4t6 .blekk9s8v4 .bling5 .bo8da .bo8de. .bogs8 .bok5 .bo4k4en. .bo8la .bon2 .bo4na. .bor6t5 .bort6e .bor8ti8 .bort9r .brudd7s6 .bruddså7 .bu6da. .bu3d6r .bu4et .bul4k5 .bus6sy .by6de. .by8ta. .bæ2 .bø6k5a .bø8nen .bø8ner .c4 .ca4en. .car4s5 .ca6se .ce6b .cos1 .co4st .d6 .da4ge. .da4le. .dags6e .da2m .da4ne. .da4ta .dau3s .deka9r .deko7d .de4le. .de4l5ei .del5s6 .de4mi. .demo7e .den5sl .de4re. .de4r5et .de4ri. .de6r3i4 .de7r4i5v .de4r5om .de8ru .de6s5m .de4so .de4sto .de4u .devi5s .di2a .di5e4l .di6er .di4et. .di9f6t .di4ne. .dings7a .di4sk .di8s3t .do4en .do4er .do8et .dome5 .do4ra .do6re. .drau4m .ds4 .du4a .du4en. .du4er .duft3 .du4ge. .duk3n .du4se. .du4st .dy4re. .dø6la. .dø6r3 .dø7r4a .dø7r4e .dø4ve. .då5ren .då7ret .e6 .eb4ba .ecu6 .ed4da .ed4le. .efo7 .ef4ta .efta5s .ef6ter .eg8de. .ege2 .ege5l .eg6ga. .eg4ge. .eg4gel .eg8la. .eg4le. .eg6na. .eg4ne. .ego7t8 .egs4 .eg8se. .eg5si .ei2 .eid5a .ei5den .ei4ga. .ei7ger .eik5a .ei4ke. .ei3l .ei3m .ei8ma. .ei8me. .ein7as .ei3ni .ein5og5 .ein5s6ta .ein8s7to .ei9rar .ei5res .eir9u .ei5te .eit9r .ekk4o .ek4le. .ek3li .ek6ne. .ek4r .ek8sa. .ek3se .ek8se. .ek4sp .eks6pi .eks3t4 .ek5s4ta .ek8ta .ek4te. .ek7to .el8da. .el4de. .el4g5r .eli5ne .el3k .el5l .el6s .els6a .els4kl .els6t .el6ta. .el6te. .elve7l8 .el6veg .em3b2 .emfa9 .em4ma. .em8me. .em6na. .em5p .en5a .en4da. .en4de. .end5r .en4ga. .en6gav .en3ge .en4ge. .en6g5r .engs6 .en6ka .en4ke. .en5og5 .en6sa .en4se. .en5so .en3sp .en5t .en6te. .ent4r .en6t5ra .ent8re .en3ø4 .ep6t .er8a .er4e .er4g5r .er4ke .er4la. .er4le. .er6ma. .er4me. .er4mek .er4na. .er6ta. .er4te. .es9ast .es1k .es3ka .es8ka. .es4ke. .es5l .es8la. .es8le. .es3p .es6pa. .es6r .es8sa. .es4se. .es4so .es5ta .es3te .es6te. .es7tet .es5ti .es6t6r .es7tu .et8la. .et8le. .et4na .et4ne. .et4s .et8sa. .et5s4e .et6se. .ets4i .et1te4 .et6ter5 .et6ti .euro5 .ev8ja .ev4je. .ev4ne. .ex4 .f4 .fa2e .fag3s4 .fa4ne. .fan3t4o .fe4e .fei8e .feil5i .fe2l .fela9 .fel5l .fel4ta .fe4ma .fe8me .fem5o6g5 .fem5t .fer8ro .fer6s .fe8sl .fe8st5 .fes3t6e .fett5a .fi4b5 .fi6a .fi4le. .fire5o6g5 .fis6k .fjel4 .fjor4d3 .fla4t5o .fo4bi. .fol2 .fo2r .for3d6ri .for7d6ra .for5en. .form5s .for7s6o .fre6e .fri5e6re .fug2 .fu6ge. .ful2 .fu8se. .fy8se .fø8rel .g6 .gaf7 .ga4le. .ga8li. .ga4me .ga4ne. .gang5s4 .gas4 .gas5ta .ga2t .ga4ve. .ga9vee .ge2a .gel4e .ge3ne .ge6ni5 .gen5s .ge4o .ge4st .ge5s6tap .ge9sv .gha5 .gift5s .gi4n .gi4s .gis7p .gi8v3a .gje8n7 .gl6 .glo6i .glo9v .gly5s .glø9se .gnå7la .go5des .gos7 .gra4v3end .grei4e .grunn5s .grus5s .gu4de. .gud3v4 .gu4lat .gus1 .gu4tu. .gø2 .gås4e5 .gå4v .h4 .hai5s6 .ha6ka. .ha8ma. .hand5s6l .handsla9 .ha6v5ak .ha6vi .he4er. .hei5e .hel3u .he2n .hen3i2 .he6r5i6 .he6r5o6 .he9r6oe .he7r6oi .he7r6ol .he9r8os .he8ru .hes4s5 .het6s5 .het7s6e .he4t5 .he5t6e .hil4l .hi4n .hi6re. .ho2d .ho2e .ho4re. .ho5ren .ho7ret .ho8ta. .ho8va. .hu4di .hull7s .hu4s3en .hus6val .hvit3 .hvi3t4e .hvo8r5 .hy6ra. .hy4re. .høi5 .hø4re .hø4va .hø4ve. .høy6st5æ .hå8en. .hå8er .hånd5s6l .i2 .i3a4 .i3bl .i4da .ifø5re .ig8la. .ig4le. .i4her .ik2 .ik6k .ikke5 .ikkes8 .i3k6l .ik5t .ik8te. .i5kv .i3la .i4la. .i8lande .ilbo8da .il6d3r .il6de. .i3leg .i6les .il4ja .il6je. .il6ke. .il4le. .il6sk .il4te. .i6me .imø5te. .in5ad .in5de .in8ga. .in4ge. .in3gr .in6gri .in5k6 .in6ka. .in4n3 .in4ne. .in5n6e .in6n7eks .in6n7ets .in6n7ett .in4n3i .in5s .in7tes .io4na .io4nom .i4rer .ir7k8 .ir8ra. .ir6re. .i6sa .i3sc .i6se .is7k6 .isla8ga .is6lam .is4le. .is4let .is4me. .is8na. .is8ne. .is5pa .i5s8pe .is3s4 .is6sa. .is4se. .is5sk .ist6 .is8te. .i5sted .i5stem .is7ti .i6s7tj .i6s7tr .is8ut. .i6s5ø .i5ti .i3va .i4van .i4var. .i3ve .i4vel .i6ven .i4ver. .i4vere .iv8ra. .iv6re. .i3ø .j4 .ja4de. .ja6e .ja4ne .ja8se. .ja4va. .je2a .je2l .je2m .je5re .jern5s4 .je4ta .ji4 .jo8en. .jor8d7r .jor8d7s8 .jor8d7u .jo4se. .ju6a .ju6la .jule3 .ju4li3 .jø4dep .k6 .kaf2 .ka6la. .ka6li. .kal7t8 .kalve5l8 .ka5me .ka3na .ka4ne. .ka4p3r .ka4ra. .ka5r6a5v .ka6re. .ka5rin .kar8t7r .ka4te. .ka5t6h .kau9k .ka6va. .ka4ve. .ke6e .kel3 .kier3 .ki4na .ki7ni .kino3 .kir2 .ki4se. .ki8va. .ki6ve. .kje3de5 .kje4k .kjek7l .kjønn4 .kle4s .kli5ne .klo9va .kly7sa .klø7s8 .kna7se .kne4p3r .kne7r8 .ko6da. .ko7gr .ko4la .ko3le .ko8le. .kol5j .ko3pe .ko6pe. .kor6s5ed .ko4se. .ko6ta. .ko4te. .ko6ve. .kring5s .kru4s3t .ks6 .ku5f4l .ku4le .ku8ra. .ku4re. .ku8ta. .ku8te. .kva4r1a .kve9ka .kve5ke .ky8la. .ky4le. .ky6te. .kø3s .kå6pa .l6 .la4da. .la4de. .la4ga .la4ge. .la5ger .la4ma. .lapp8e7 .lap5s4e5 .la6ta. .la4te. .la3tr .la4va .la3ve .la4ve. .la6v5æ .le8ar .le4da. .le4de. .le4er .le6et .le2f .lef3l .lega5ta .le4ge. .le4gel .le8gi. .lei8e .lei7er. .lei4ve .le4ke. .le4k5r .lemu9 .le4ne. .le6o7 .le7s6a .le4se. .le4sek .le4ses .le4s5p .le2t .le7ta .let6tan .le2u3 .le3va .le4va. .le4ve. .le4ves .li8a .li4de. .li4e4 .li5ene .li2g .liga3 .li2k .lik5k6 .lik3o .lik3s4 .li4ma .link6 .li6ra .li4re. .li4sa .li4se. .li4ta. .li4te. .li5ti .li4ve. .li4v5en .liv8s7u6 .liv4s5v .lo5e6 .lo6ge. .lo8gi. .lo6g5r .lo4i .lo6na .lo8o .lo6ri .lo8sa. .lo4se. .lo6te .lo4va .lo3ve .lo4ve. .lu4d .lu2e .lu4na .lu6pa .lu4pe. .lu6ra. .lu4re. .lu6se. .lu4ta. .lu9tas .ly4de. .lyd3s .ly8e .ly8ge .ly4se. .ly4sk .ly5s6e .lys5s6 .ly8str .ly4te. .ly4ve. .lø8de. .lø6en. .lø8ne. .lø6pa. .lø4pe. .lø8s7a .lø8s7i .lø8s7m .lø8s7p .løv5i .løye5ne .lå8ma .lå5re .lå6re. .lå4te. .m8 .ma4ge. .mag9r .mah6 .ma3ka .ma4ke. .mak6t5at .makt5s .ma4le. .ma4li. .ma4na. .mande8l .ma4ne. .ma4ni. .ma4ra. .ma4re. .ma4ri. .mar8sj7ø .ma4sa. .ma4si .ma6st .ma8ta .ma6t8h .mat5t8o .ma4v .me4d3 .me6d5ei .me6d4i .me6d7in .me6d5r .mei5er. .mei5et .mek5l .me6la. .mel3l6o .me4l5ø .me4ne. .me3ri .me8s7al .me4sk .me2t6a3 .me3ta4ll .mes5ti .me4tri .mi6kj .mi4le. .mi4me. .mi4ni. .mi4nik .min4k3 .min5k4e .mi6s3t4 .mne6 .mo5de .mo6er .mo4na. .mo8ne. .mon4st .mons6t5r .mor5d6e .mo4re. .mor3t6a5 .mo4se. .mo4ta .mo4tek .mo4ter .mo4tr .mo5v .mu8ga .mu8ge. .mu6le. .mul5es .mur7 .mu5r8e .my8ka .my4ke. .mø4re. .mø5res .mø2t .må6la. .mål3o .n8 .nabo3 .na6ge. .nak2 .na8ke. .nan5s .na4r .na4sa. .nat2 .na3tr .nat6tr .ne4de. .ne4den .ne4d5i .ne4d3r .ned3s4 .ne4f5r .ne4g7 .nei5e .ne6k6r .ne4o7 .ne4o8n .ne8pa. .ne6pe. .ne2s .ne4t .ni8ar .ni6er .nig4l .ni4na. .ni5o6g5 .ni4pa. .ni6pe. .ni8sa .ni6se. .nita9 .ni4to .ni4va .no6de. .no6e .no8ka .no4me. .no8mi. .no4r .no8se .no8si. .no4va. .nu4e .ny5a .ny3o .ny8sa. .ny6se. .ny4te. .nær9ast. .næ4re. .nød4d .nø4re. .nå4de. .nå6le. .o6 .obo5e .od4da. .od4de. .odel8s7 .od8la. .od8le. .offsi6 .of4te. .of5teb .og4 .ok1k .ok8ka. .ok8ke .ok4se. .old3s .ol4ga. .oli5 .ol8la .ol8le. .oli5v6 .ol6m .om1 .om4ar. .om6bo. .om4e6n .om4gå. .om4me .om5s2 .on4de. .on5des .ond3s .on6kl .on6na .on8ne. .op5ar .op4pa .op4pe .opp7el .op4pi .opp3l .oppla8te. .opp5s6 .op7r .opt6 .or4da .or4de. .or4del .or4dr .ord5s4 .or5ga .or6ka. .or4ke. .or6me. .or4re. .ort6 .or6va .osa5 .os3el .os4k .os4s .os4te. .ot5r .ot7t8a .ot4ta. .ot4te. .ot4tes .ot3to .ot4to. .ove6 .over3 .overen6d .over3i4 .over5k8 .ov8re .ov5u .ov6ul .p6 .pa8la. .pa4le. .pal6i .pa8n7a .pa5n6e .pa6n7eu .pa5n6i .pa6re. .pe3do .pe4ke. .pek5t .pel4sj .pe4ne. .pe2p .pep3r .pe8ri7 .per6m7 .pe8sa. .pese5t .pe4st .ph2 .pi6le. .pi6p .pi9ra .pi2s .plen5g6 .plus6s5 .plus7s6e .plø7se .po4et .po3la .po8la. .po4le. .po4log .po2p1 .po2p2e .pop3p .po3p2u .po8ra .po6re. .po4res .po6st .po8ta. .po6tek .pro7k8 .ps2 .pøn3 .pøn9s6 .på5d6 .r6 .ra6da. .ra6et .ra4ga. .ra4ge. .ra4ja. .ra4ka .raks7 .ra2m .ra4na .ra4ne. .ran7s6a .ra6pa. .ra6pe. .rap4s .rap5s4e .rap5s4o4 .ra4re. .ra6sa. .ra7ti .ra6va. .ra4ve. .re4al .re6da. .re4de. .ree6l .rege4l .re4gi. .rei2 .rei7de .rei5er. .re4ins .re6ka. .re4ke. .re8klar .re8kle .re4kli .re6kn .re8le. .re4ma. .re4na. .re4ne. .ren6sk .ren4t .rep5s .res9s .re5s6tan .rett7s8kri .re4ve. .re4ves .rev9n .ri2d .ri8e .rie5ne .ri6ka. .ri6ma .ri4me. .ri4pa. .ri4pe. .ri4p5o .ri4sa. .ri4se. .ris5ko .ri4s3ø .ri4ta. .ri6te. .ri6va. .ri4ve. .ro4an .ro4de. .ro8di .ro4e .ro8ke. .ro4ma. .ro4mi .ro6pa .ro9par .ro3pe .ro4pe. .ro4sa .ro9sar .ro4se. .ro4sed .ro4ta. .ro4te. .ro4tek4 .ro8va .ro3ve .ro8ve. .ru8ga. .ru4ge. .rug9le .ru8ka .ru4na. .ru4ne. .runes6 .run7g .ru4se. .ru4sk .ru8va. .ru4ve. .ry2e .rye7ne .ry6ke. .rød2 .rød7s4 .rø8le. .rø4re. .rø1v .rø8va. .rø4ve. .røy7e .rå8da. .rå4de. .rå4en .rå8er. .råg8 .rå6ka. .rå4ke. .rå3k4l .rå6na. .rå8sa. .s6 .sa4ge. .sag6n .sa4la. .sa4le. .sa4me. .sa4mer .san6d7 .san7d8e .san7d8i .san8s7ku .sau6e .sch6 .se2b .se2e .se4i .se4k5l .sek4s5o6g5 .sel4v5 .sel4v5i6 .se6na. .se4ne. .sen7s .se4ra. .ser7vel .se4te. .sha9ke. .si2d .si6er .si6ga. .si4ge. .sik5k6e .si8la. .si4le. .si4ne. .sinn6s5 .si4ra. .si5str .si4va .si4ve. .sje4i .sju5o6g5 .sk6 .ska7ka .ska5ke .skat4 .skei5d .ski6n .skinns6 .sko7de. .skog5u .skritt9s8 .skudd5s6 .skuddså7 .sku6m5 .sky6f7la .skå5ra .sle6s5v .sli6b7r .slim5 .slotts5 .slu9ka .slu5ke. .slø5se .sma4s .smas5k .smi6g7r .smo9g .små3 .små7k6 .små9l .små5t4 .småt5t .sn4 .sne3 .sne4k .snitt5s6 .snø3k .soa8 .so8de .somma4 .son6a .sop4pa .sor4t5 .so4ta. .s8p6 .spa5ra .spe6e .spi9la .spri5s6 .st6 .sta9ka .sta5li .stat4s .sted4s .ste4i .stein7a8 .stein7s8 .stem4m .stev9na .sti7me .sto5ne .sto6ra .strek5s6 .stu8a .stu9va .stål5l6 .sund5s6 .su4ri .su5te .sv8 .sva5la .sva5ra. .sva5re .svar5s .sver8n .syd5 .sy3d6a .sy5d6e .sy6na. .sy4ne. .sy5ter .sy3ti .sy6v5 .sy6v5o6g5 .sz6 .sæ2 .sær1 .sær3e4g .sø8ka .sø4ke. .søl6v5 .sør3a .søye5 .søy6en .så5pen .så3re .t8 .ta8ke. .tak9r .tak5sk .tak9s8p .ta4la. .ta4le. .ta4les .tal4li .tam5m .tan5de .ta4p5r .ta4ra. .ta4re. .ta2s .te4e .te6i .tei9er .te8ke. .te4ma. .te6o .te8ne. .te4se. .te7si .te4sta .te4str .th2 .ti8a .tid5r .tid6s3 .ti4de. .ti4e .ti4g3r .ti4ki .ti4l5 .tili6 .ti4med .ti4na. .ti4ne. .ti4p5l .ti4s .to5arm .to6en. .to4er. .to6et. .tokk8 .to6le. .to6na. .to5o6g5 .to4ra. .to4re. .to6reb .tor6g5a .to3ro .torsk6e5 .tor4s5v .to5rye .to4str .tota9la. .to5t8 .to8te. .to6va .to4ve. .tr6 .tra7c .tre3b .tre7p .tre5o6g5 .tre6skja .tre3s8ko .tre7sl .tre3sp .tre5s6t .ts2 .tsj2 .tu4en. .tu6na .tu4ne. .tu6ra. .tu4re. .tu8ve. .tve6n .tver6r5a6 .två7g .ty6da. .ty4de. .ty8et .ty8re. .tyr8s9 .ty5ter .ty5ti .tæ4re. .tøv9d .tø6ve. .tø9ver .tø5vet .tå5ker .tå4le. .tåp9n .tå5ren .tå7ret .u5a6 .u1b2 .u6berg .u3d2 .u7de .u3e6 .u4er. .u6era .u4ere .uf4f .uf8sa .u4ga .u5gi .ug6la. .ug8n .u1i .ui6m .u1k6 .u4ka. .u6ke .u7kn .u3le .u4le. .ule8k .ulen4d .u6lende .u8lene .u6let .u4lin .ul6ka .ul4ke. .ul4la. .ul8le. .ul8ma. .ul4me. .ul4ne. .ul5t .ul6te .u1lu .ul4v5i .u1ly .u3lå .u5ma .umu7 .u2n .unde6ri .und5r .une8 .u5nek .u9net .un4ge. .un2n .unn3s .u3no .un4se. .un4t .u5nu .u1o .u1p .u4pi .up2l .up4p3 .u2ra .u5raf .ur6an .u6rane .ur4d .ure4n .u4ret. .u6rets .u2r2i .ur4ke .ur6na .ur4ne. .u1ro .ur1s .ur8ta .ur4te. .urte5m8 .ur6tet .u5rut .u3ry .u5rå .u1s2 .u4sa. .u4sas .u5se .u3ska .u5sn .u7sp .us3se .us6t4 .u7stek .u5stel .usy5r .u2t .uta4g .ut5age .u3tak .u4ten. .ut5esk .ut6e7sko .u4ti. .ut3kan6t5 .ut4ne. .u5tol .ut3o6v .ut6rer .ut6rov .u3trø .ut6se. .ut4si. .ut3t4 .u3tu .v6 .va4da. .va4de. .vai4 .va4ke. .va6les .valg5s .va4ne. .van4n5 .vann5s4 .va6reta .vari4e .var5sk .ve8en. .ve4ga. .ve6ge. .ve4g3i .veg3s4 .vei3g4 .vei3s .vei4ta .ve4l3 .ve5l4ar .ve6l5art .vel5d .ve4l3e .vel5l .ve5l4os .ve4l5ov .ve4ly .ve8læ .ve4ne. .ve4net .ve4ra. .ve4ras .ve6re. .vermo9 .vers4t .ver5ste .ve4sl .ve4st .vete5 .ve8te. .ve4ve. .vi4da. .vide4 .vi6de. .vi4d5å4 .vi2e .vi4ka. .vil5l6a5t .vi6ma. .vi8me. .ving7s .vin5n .vi4sa. .vi4se. .vi6seri .vi4ta. .vi4te. .vi5tr .vok4s3 .vok5s6e .vo6r .vo6ta. .vy4 .vye5ne .væ4ra .væ4re. .vå4d .vå4r3 .vårs6 .wa4r .we4g .wi6e .xe2 .y6 .ye4 .yn8da. .yn4de. .yn6ge. .yn8ka. .yn6ke. .yn4kv .yns2 .yp8pa. .yp4pe. .yr8ja. .yr8je. .yr8ka .yr4ke. .yrkes5 .yr6t .ys4 .ysterie8 .yt9ren .yt5t .yt6te. .yv6 .z4 .zj8 .æ8 .ære4s5a .ære4st .æt4te. .ø6 .øg8la .øg4le. .øi5 .øi6e .øko5 .øk6ta .øk4te. .øl3ed .øl3s6 .øl3v6 .øm4me. .øres8t .ør4je .ør5k .ør8na. .ør4ne. .ør6ski .ør9sm .ør3st .ør8ta .ørt9an .ør8te. .øs2 .øs4t .øv4d .øve4r5 .øve4r6s .øv4re. .øy6de. .øy2e .øyele8ge. .øy5ene .øy4n .øy6na .øy6ra .øy4re .øy8rer .øy4str .å2 .å6e .å6f .å6g .å6k4 .å8l .ål6t .ål8ut. .å8m .ån8da. .ån4de. .ånd6s5 .åp6na .års3k .å6se .ås3k .ås7l .ås3m .å3ste .ås5v .å4t .åt4te. .åtte5o6g5 .å6v a1ad 4aaf a3aft aa4g a1aks aak5v aa3la aa2m a1a2n a6an. aans9t a7antr a1ap aa4ri6 aarie9ne aar5n aa2s 3aase aa5t6h a1av a6bab ab7av ab9b8l ab4but abe4lei abel5t4 abe9na. abes9ka 4abev a5bh abie6 abi9er abi9la a4bist ab1l ab9lara ab4lok abl7u a5bo9a abo3b abo3e a3boer abo3kl a3bord 5aborte ab1r ab8re ab2sl abu5e a4buel a4buf a6busk a4bute a4by. a4byb a4byk aby3r 8ac aca5 a6ca. ache3a ack3 a1co 6ada a5dal ad5ant a4dart ad9da a2deb ade5i6s a2dek a4del a4d5elv a5dend a3dene a2deo a2dep a5der. aderle7 a2des a5de4ser a3desl a3det. a3dets 3adfer 1adg ad8ge adi4ene ad1j 1adju 2adl 1adm ad5n ado7a a4dob ad7opp 4ador a7dora ad5raf ad7ran a2dre ad7rel ad5rep ad3ret ad3rid ad1ro a7drø ad4s5amt ad4si adsle6ge. ad5s4let ads5te ad5s6tek ad3str ad5un 1adv adva5re 2adve a4dy. a4d5øy 2a1e2 4aea a4ed 8a7ede aed7r aek5t a4el. ae5la ae3li ael5o aen5t a3ep aes8ke. aes4t 6afa 6afc a4fe. afei5 af4fan af4fei affe3s af7fi. affi3d af5f4u af4i afia1 afi5an a2fib a6f5inn afi7re a4fiti a5fjo af9la. af9lar af3le af5li a4frik 6afo afo7ra. afo7r8e afore5ne afra5s 1afri afs1l aft5ei af4t5e4l af6t5o aft1s4 af5yr afø4r afø5ri 4aga a2gaa a5gae a4ganf agang7s8 a4gart a5gas. aga6ve. ag5de a7gelen a2gem 3a4gent age4r3a age6rek age5risk a7gers a5geru age5s2 a4geta a4gé ag5gar ag4gas ag5ge agg1s2 agg7u ag6gut a4gi. ag5id agi6s ag1la ag4lem ag6lesa ag5lå agmo8e agn5om 4ago ago5d8 ag1or a5gos a3got ag5ov ag7ras ag1re ag1ri 4a3gru ag1rå ag4samb ags4ang ag3s4ei ag4sel ag3sem ag5s6ing ag6sju ag4ska ags4kul ag2sl agsmå6la ags3tr ags3t2v ag2sy a6gu. agu3ay agå8va agå8ve. a1h a5hi ah4n5 ah4v ai1a4 ai3e2 ai3er. ai4is ai5ke. ai5ko ai9kv ai5ne a3ing a1inn ai4n5o4 ain8sm ai1ro ais4e ai4s3k aisk2h ai8sm ais6om ais5s ai5s4v ai5ve ai5ø a1j aja9d a7je a8je. ajes7 a4jé a4ji a6jl 6ak. a1ka 4aka. 1a2kad 6akaf ak3aks 6akan aka4o5 4akar ak6arb aka4t5r ak4au 2akd 2ake a9kec a2keh a3kei5 a6kek akel8e akelei9er ake5l4i ake4rek a4kerø ake5sm akes6p a8kete akhe6n 4a1ki a6kid a6kik ak7ind akis1 2a1kj akk6and ak5ke. ak3ken akk5erst ak4kes akki4 ak5kim ak4k5is ak6kj ak1ko akk3ol ak6k5ri ak1ku ak4kul ak4k5v 2ak1l ak3lev ak6lik ak6lus 6akn ak5ne a5kno 2a1ko ak5om. a5kon a7kos ak1o2v ak4pe6 akra8sa ak5reg akregi4 ak3res ak3ro. ak3roe ak1ru ak4s5and ak4sek akse3l4o ak4s5elv ak4ses ak7s6id 3aksje ak2s1k ak7sku ak6sl 4akso 4aksr aks5ti ak5stol aks4tr akst7ren 4aksu ak4tab ak4tai ak4tak akta6le. akt5all ak6tam ak6tans ak4tap ak4tas ak4tav ak4teg ak4tek ak5teme 4akth 7aktig ak5tit aktle6ge. ak2tr ak6tre akt3rå akt5s4la 5aktue ak8t7æ akut2 2akv ak3val ak5øl a5kå 8ala. al7adr ala4g ala9ga a5lagm alag8ra a5lah a1lai al3all al3a4me al3ana a3land a5lande. a5lane alan5gr al3anl al3anv ala4o ala5pr a5lar. a3lara a5laren al3ark a7larl 3a4larm al5arr a5lars al3art a7larv al3a4si 2alat ala7tr 4alau al5auk al1av ala4va al4ba. albo4g albu7er. 5album al3de al7der 4aldo ald3re 2ale a2lef a2leg a9leg. aleie6n a9l8eik a5leke a4leks a4leli a2lem al5e4mu al8en. a4l3enh a4l5en5tr ale4pos a7lept a4lered alere6de. a4le5ro a4leru ale1s2 ale7se a4lesk ale6s5kr a4lesl a6lesu a4leta a4le3te a2leu ale5v a4leva a4levi 3alfab 2alg. al3geb al2gu al4går al3ill a2lim a9lin. ali5na. a4l3ind a4l3ins al3int al9ja. al3je. alj5end al3jer al1jo al4jor al2j1u al1jø alj5ø6v al9kera alk7s6 alla4ga alla6ge. al4lap all5art al5lea alle6ge. al4lek al5len. all5erst alle3s4 al4lest al5let 3allia al4lid 5alli5e alli9ne al6list. al4lo3m all4sen all4sti al6lul al6løs. al4løse al8løst al6lå 8almal al6mek al4met 4aln a5lo. al1o4b a5loi al1om a1lon al3ope al7ord alori5 alo6rit al3ove alow7 alp2 al3ps 2als al7sed al9skap al7skare als1l als5lø al2sn al6spu als4te als6ter 6alsu alt6ak alta8le. al3ted al7tema 5alterna alte4t al4t5eta al4t5ete al4t3op a4l5u4k alul8la al5und alu8re. al5va. alv5aks alvak8se. al4ved al5v6er al8v9er8m alve5s al9ves. alvi8se al1vo alv3s 6a1ly a2l5y4te alø5se al3øv a1lå al7å6t a4mah ama5is a2mak a5maki am3aks a2mal am5ald a3man a3mar. a5mara a7mas. amaso7 3a4matø am4bar 3ambas am4bat am5be a2mei am3eie a3meis a2mek am3eks amen8de. amen4s3 amen6t7arv ame4ram a4meret 3a4meri 4amerin ame5u amhu7 2ami ami7na ami7ne amisk3 amis4ku am4lese am6lest am4mad 6amn. am4ned a2mo amo5e am1op am1or amo6ve am4pap am4pare amp5ei am8peria am6perie ampes6 amp7inn am2p3l am5p4let am4p4re am4pun am2på amru4 am5rå am1s am7s6ku ams4l amst6 am4s3tr ams9ut ams2v am4s5ve am2sø am3ti amti5da 5amtm am7tv am6ul am5yr am5øy 6ana. anak8te. ana3la anal4f 3analy 8anan a3nane a5nang anant8 4anar a6narb an5art ana3to 6an7au anaus7 an9av. 3anbef 4and. an4da5m6 anda5ta an4dek an5den anderle7 an9det 6ando an4dos 4ands and4sel and8send and7slet and5s6tre a2ned an5egg a4n5elv ane8l7u a2nem 2anen 2aner a8n7erme ane3ru a5nes. a4nest ane5sv an5e6tika a5netike an5e6tikk an5e4tis a2nev 3anfal anfø5re. ang4e an4ged an4g5enh ang5erme an8geste an4gi. 5angiv ang5of an5gos an4g9ra an4gre. an6gres an4gret an4g3ry ang4sm angs6tro angs8t9rå angst5y ang5sva ang6søy ang4t5re ang5t6ve an4gun an4gå. ania7 a6nib a4nisj 4aniv an4kana 4anki 4ankj an4kob an4kop an4kos an2k1r ankra8na. ank3re ank3ut 8an2kv an4kø an6k5å6 2anla anland6 anlø9pa ann5ans an6neme an5nen an5ner an5nid an4ninn an4nom 5annon an4nov ann4sei ann4sid ann6s7kå ann6sl ann3st ann5sta ann4s3u an4ny an2nø a3no. a9noa. ano6deb 2anog a7norm a6not a2no4v ano5va an3ove anri7ke ans5aft ansa7ka 4ansan 3ansat an4sek an4sent anseri8e9ne an4ses 3ansik ans5ind ans5ins an4ski an3skj ans4k3l ans6kun an5skø an6slø an4sn ans5or an4s3pi ansport7s6 an1st6 6anstar ans4te4 an8s7tu 6ans6ti 2ansu an9s6und 5ansunda 1an1sv 4ansve 6ansy an4så anta8la an5t6and an4tans an3ted ant5emi 5antenn an4tesl anti7kl an4tim an5toi ant5ord ant5rab ant7rom ant5ryg ant5s6 an4tul antus4t 2anu anus7a an5ut 3anven 6anvin 6any a4nya a2n1æ2 anær8 2anø a2nøk an7å a1o ao9a aog9 a2oi ao6k6 aon8de. ao2p ao4r a5pea a7pé a1pi a2pia ap1id a6pik a6pins a2pio api6r5 api7r6e api7se ap1j a1pla a5p6las ap3li ap9lo ap2ly 4apol a4pon a4poo apo3p apo5s4ti a2pot 3ap3par 4appar. 6appare app7esk ap5plas ap4ple ap5pli ap6pri ap3ra ap5ren ap5ret ap3rin ap2s1 apsa4 ap3sel apse4s ap8s9l a3psy ap4s5ø 8apu a6p5ut a1py ap7ø a3p8øls a5på. a1ra ara9bi ar5aks arak5t ar3alt a4rami 2aran a4ranor a4rans a4ranv 2arar a4r5ass ara5te. ar5aug ar7auk arau9ken ar7avh 1arb 2arba arba8ne. 6arbeh 4arben 6arbet 2arbi 4arbj 6arbl 2arbo arbo8da 2arbr 2arbu 2arby 2arbø 4arbå ar7deb ar6deli ardfø5re ard3re ard5sta a1re 1a2rea 4arear a4reb areba4r a2red a2ref a2rei are3in a2rek a6r5ekt a4rela ar7elek a4r6eli ar7emn a5remo. 3arena a6r5eng a4reni aren5tes a2reo a2rep a6rerel a4r5erfa a6rerk a4rero a6rerø a5res. ares8ka ar4et a7reta. a4rev ar7e6va ar3evn arev6ne. 8a1ré 6arf ar7g6h ar5g6i 6argj arg4l ar7go arg5stj 2a1ri aria7ne a3rib ariba9 ar5idr a4rim ar3inn ar3ins arins9k ar3int ari3se arise4a a4risto a2riv ar4kau ar3ke ar4ke5s ar5kha 3arkit 3arkiv ar4kle ar4k5løf ar6kod ark6ste ark4str ark7veg ar4køy arla4ga ar4map 5armbå ar4medi arme7t ar6metr ar4minf armle6ne. armå6la 2ar2n ar4nad ar4nal arneva7la ar3ni ar3no ar3nu ar3nå a1ro. aro8de. a5rok a1ron ar1op aro6pa a4r1o4r a1ros ar7ost a1rot ar3ove ar6ped ar9po arp5ret 1arra ar5ree ar7resk arri8e7 arrå6da 2ars arsa6ka ars5ans ar3sel ar6s5ers ar4sin ars5kam ar5skar ars5kes ars7kre ar4spr ars6tr ars4vei ars7æ arta4la arta6le. ar3te ar7tele 8artets art4ha. art4has ar4tika 6ar4tim 4artn 4arto ar4top 6artr art9ra ar6trin art6s5t arts5ø 6artu 8arty ar4tyv ar1ul ar1un ar5u6r a1rus ar5utb ar5utn arve3s ar6vete arvi8sa arvi8se. a1ry ar7æ6 arø8ve. ar1øy a1rå arå8de. ar7åp a6r5åt 6as. 4a1sa asab4 asak4 a4salo as6an as7aug asbe2 a1sc a2se. asea4 a2sed a2seg a2sek as4el ase5le a2sem a6senet a4senk a7seol a2se5s a6sest a4sete a2se3u as2h as5hu a4sib a2sip a2sir a7sis. asis5t a2siv as4ja a6sjett as5jor as3kar ask6et as5keti ask2i as5kis a5skj as5ko. as5koe a4s5kopi as3kor as3kot a1skr as7kra as3kul a5s6kula as6kule ask9u8t as4kv ask5øy as1l a5s4lag asla8ga as4lev as4lit a1so a4so. a2s5om as5ov as4pan as3pe as7pis as5pl as9sa. as4sab as4sal ass5ald ass5alt as4sam as5se. as4sed as4sek asseri7e6 as4serv as4ses as6sifr as5sing assi3s as4sit as2sj as6s1k assku6le. as2s3n as5so. asso9a as7sos. as6s1p as2s3t as4stan as4str ass5tru as2s1v as4sys as4søk as2s5å as1ta as6tab a6stande a4statu as5te. as3ted as4teg as4tek as4t5enh a1stj a9stof a5stok as5t6os ast5ov ast5ren as4tro as9tua astu8ve. ast5ø4v a1su asu3n asu9sa as1va a6sym asyn7d as7øye as5å 4at. 4ata1 a5taene at6af ata8ka. ata8la. a4tang ata9rar a6t7arv atas4 a5tas. atat8 a2tau at5avh atch5 a2tea a2tec at7edd a2tee a4tei at5eid at3eig ate3in a4teka ate5k8e ateke7ta a6t5ekte ate7le at3emb 4aten a5tene. a4teni a4tenu a2teo 4ater a5ter. a6terat a8terek a4teril a2tes a4t3ett at6e5u a4té 3atfer at4ha. at8has 4ati atik6ka atili5 ati5nea ati4rep ati8sta at3jo 5atlant atl9øy 3atmos at4nel ato5a ato5gr at1oi a2tom a6t5oppr a1tor a5tose a3to1v a1tra at5reg at3ren at3rer a4trif at3rin at5rot a9tru at5røs at5røy 2ats at3ser at7sje at7s6kat at7skj ats6kul at2s3ø 4att. at6tat 4at5te. at5tens attfø7re at4tid atti4s att5ise at3tit att1o att7o6p atto6v at1tr at4traf at4t3re at6trin att3s6k att5s8l att3sp att3sv at6tys at2t3ø2 a1tu atu5e4 a2tut at5v atvi5er. a3t3w a1ty atyr8ke. a5t6yv a1tø atør3s atø9se a4t5øy a3tå. a7tåa a1tåe at5år at5å4se at7åt8 4au. 8a8ua au9ar. 4au5b auba6ne. au3c au5da. au9det au4di. 4a6ue au7en au7er aue5re au3est au6e5ta au5e6te. au4gal au4gas au4gel augele8ge. 5aug2n 3augu au5i au5keli au5ket auk5la 1auk7s6 au5kve au6las au4lat aul5l aul8la au5lu au9men au6mo aum5s6k aum7s4t a5und au5rae aure5s au5ret au5ri aur5s6 au1ru auru4e au1sa aus9kj au6skr au1so aus5s au6s8tas aus8tett austi6s aus6t7ise aus6ton au5str au6stra au6stri au1su au4sun au2s5ø4 aut6a au3ta. au7tar au5te 1auto auto5v au3t4re au4ty 2aux a1va av5ab a5vae ava7g 6aval av3alv a4v3and av3ang a4v5anl 3a4van5s a9var. av3art avar6ta. 4avas avat6a 5avbi 1avd 3avdel 2a1ve a2ve3d2 a5vede. a7veil ave3in a2vek a4vela a4vele a5veleg avens4 a5ver. ave7ras aver5d a6verei a2ves a2vev 1avfa 1avg avi4ar 4a5vig a1vik avi9ke a1vin a4v5int 2avir 5avisa avi5sa. 3a6vise av5ising avis3t a5vit avlu9t avlø5se 6avn av7na av4nes a1vo a4vok avo3r avo4v av1r av4res av5ri av1sa av5seg avs2i avsko7g 3avsni av1s2p avspe9g4 avs4te av5su av1s2v 1avt avta9ka 2avu 1avvi av3øl 4a1vå a6v7å6l a1wa awat4 a5we awe9ne a1wi ay2a ay7ane. ay5ar ay9s8t a5y4t a5zu azz3o a1ø a7å6 1b4a ba3a baby5 ba4bys ba5cl ba2d ba4da. ba7dan b5add ba8de. ba4deb ba5den. ba7dens ba3di bad1s 4baf ba2k ba5kan7 ba3kar bakars7 ba3ken ba4k5end baken6de. ba3ker bake3s ba9ket. bak9ett ba3ki ba8ki. bak6kers bak6ko bak5kr 4bakr bak4re ba5kri bak3ro bak3sm bak5sp bak5s6ti bak5str bak7t6 bak1v ba3la bal7ak ba4les ba4li. bal3j bal4lag bal4lan bal4led bal4leg bal4lei bal4lev bal4lig bal6lov ball5s6 bal6læ ba1lo bal5t ba1lu ban4a ba4na. ba5nan ba5nar ban9da ba4nel ba4nes ban6kap ban4kor ban2k3u bantu5 ba3re baret5t ba3ri bari6e7n bark5s bar5skr bar5tr ba5ru ba5sen ba4seru ba4set ba3si ba2s1k bas6sak bas4san bassi4 bassis5 bas4so bas4st bass6tr ba2st ba7s8u ba1ta 2ba1tr bat6ti bau9la 6bav ba5z 2b1b b3ba b6bak b4b5arb b6base b3be. b4beb b4beda b2bef b4beg b6beh b2bei bb3eie bb5eig b2bek b6belo bbel6t3 bbelte4 b4bem b9bene. b2beo b3ber b4b5erf b4bes6 b7beska b6beta b6beten b4beti b6beto b6betr b2bev b8b1h b3bi bbi9e8 b4b5inn b2b1l bb7len bb5op bb5rek bbu9ra bb5ut. bb5ute b2by5 bby3e bby1k b4bø b6bå 2bc 2b1d b2dek b7den b4dep 1be be2au be4bo. bebo5er. bebo9k be4da. be9dar be3der bedi9e8 be4dre bed5red bed2s1 bedy9ra be1då3 2bee be5ed be6ef b4ef befa5re be3g bega7 be4ga. be4gi. be4gn be5go be4g5re. be4g5rene. be4gå. be6ha. beha7g behers7 4behu behå4r be6i be5ke be2k3i bek6kel bekke5r bek4kes bek6l 4beks be4l3ab bela9ga bel5eie bel5eig bel5ein be4lek beli9na beli9v belle5sa bel5let bel5læ be2l1o bel5s4p bel7s4t bel4tag bel4te5s bel4t3ø bel3u bel5v belæ5re belå7ne be4na be5nat be3ne 4bened be4nest ben5g be5ni ben5s4i ben5skj ben5sp ben5te 2bep b4er 4berai be7ras ber5d be4rep 8berest bere5te ber4ga ber4g5ende ber5ges berg3j berg3l berg3o ber4g3å be5rib beri5ke be7ris ber6kl ber5na ber5ne be1ro be4ro. bero9a berri6 ber5te ber5ti be1ru beru9sa berø5v b4e1s2 5bes. be4se. be5s4i 4besik 6besj bes5ke bes6k5n be3sn bes7ne 4be3so beso9v be5sp bes3s bes6s7a6 bes6sel bes7si bes7tens bes6tes be5stes. be6så 3b4et 5bet. be4tab be3te 4betei be7tes beto5ne be6trar be6tre. be4t3ri 4betu be4ty. beva5re be6ve. bevi5se. be9vo bev9r 6beå beån9 7bé 2b5f 6bg 2bh bhu1 1b4i bi5ak bi6bla bi5ce bi1d bi5dee bi8dé bid6r bidu8 bi5el bi6ele bi5erv 4bifa bi5g bi3ka bik1k bik6ki bi5k4l 4bi7kr bi6la. bi4l5ap bi4las bi4lau bi3let bilet5r bi4lin bil3j bil5la billa8ga bil5leg bil5m6 bil1o 6bi5m bi4nans bingo5 bin4gol bi7no 4b5int bio7 bi3o8m3s4 4bip bi4ri5 bi7ris. bir4ken bi1ro bis2a bi3se b5ish bis6hi bis7ke bi5s4la 8bisn bi4sp bis4p5i bis5se bi1st bi5s6ta bis4til bis5tru bi3s4v bi6ta. bi4te. bi5tes bi8ti. bi4tre bi6tri bjar3 bjek4t5o bjø6r 2b1k4 b5kh bl2 1b2lad blad3a bla6f3 bla8ga blak5r bla5me blan9da b4lank blan5ke b4lant b1lar b8larar b3lat bla4u b4lef blei8e5 blei5er b4lek ble4k3a ble5kes ble4mo b3ler ble7r6a b6lesa blesse9ne b4lest 2blet bli9ke bli5ma bli5me blings6i blis3s b5lj blja4 blo6dr 1blok blom5m b6lu blues3 blu9sa bly7gl blæ5re. blå5n blå3r blå7sa blå5se. 6b5m 6bn b3ne. b3ner b7nes. b7ni b2o boa5s4 bobba6ne. bob5by. bob9bye bo2bl bob7la bobs4 bo3de bo6din bo6d7r bo2dø 4boef 1boen bo2er bo4et. 2bo3f6 bo4gel bogn7 bog1s 2boh 2boj 3bok. bo2ka bo6kel bo4k3et bok1i bok1k bo6kop bo6k5ri 5bok1s boksi8da boks4p bo2ku bok3ve b4ol bol5eie bo7li boli7n bo7lo. bo5loi bo4l5o4r bol5s4p bolst6 1bomb bom4bel bom5m bo6mo bom1s4 bo5nap bon5ato 4bonn bon5ne bons4 bo5nus boo6 boom1 bo1p4 bo1ra bo4ra. bo6re. bo7rel bo3ren bo3ret bo4rete bo6ri. bo3ro bor6t7ef bor6tei bor4tes bor6t7et bor4ti bort5s6 b4o1s bose8te. 3boska bo2sl bos5se bo4sto 1bot bo4ta. bo4tak bo4tal bo6te. 2bo7to 4bot6r 4bot4v bou3c 4bo1v bow4e bo6y 4bp b7pl br8 1b4ra bra5ka brak5s bra5se bred5sp brei5e brei3s bret7te b6rev brevi9er. bre4vin bri5a b4rio b2ro bro9ar bro1s4 3b4ru bru5ke bruk4s3 bru4na bru7na. bru5nes bru5pl bru7ren bru5sa brus4l 1bry bryn4s 3b4rø brø5de bråe6 brå9ne brå5te. 6b1s bs4e b5s6e6a5m4 b4s5el b5s6i bsk4 b4sli b2sm b2s1of bs2t6 b6st7f b7s6v bså5 6b5t b7t6s 1b2u bu4ar 4bub bu3da bud5d6h bu3de 4bu3em bu4en. bu9ene bu4er. bue5s bu1i bu6is 6buki buk3l bu5la bu4le. bul3le bun7de bund4s3 bun8ge. bunk3r bunnla8ga bunn3s 2bu3o bu1p bu6ra. bu4re. 4bu3ro bu3ru bus6e bu4se. bus4h5e busk7ø bus6sek bus4sel bus6sent bus6set busse6te. bus6sj bus4sn bus4sp bus4st buss3v bu1st 4bustr 4busy bu1ta bu4tal bu7tem b5utg 4butst bu2tu bu1tø 4buv 6buø 2b1v 4b5w 1by bya2 by5al by9are by7dep by4en. by7ene by5ens by2er by3ers by4ge. byg3l 3byi by1lo 4bylø by5n by1re by6re. by1s 5bys. 4byse 6bysi 6bysp byst4 by4ste 4bysv by5tar by4te. by1tr 2by5v bæ5rar bæ6rar. bæ4re. bæ5ren bæ5rer. bæ5rere bæ5res. bæ5ret. bæ3ri bæ4r5is bæ3ru 1b4ø bø4e bø7ens bøf3 bø4kes bø6la. bø6le. bø2n bøne5 bøn6nes bøn7o bø6re. bør4s5k bør4sp børs3t børs8ta. børs3v bø5ta bø1v bøy7ar bøye5 bøy4ene bøy4es bøy4et 1b4å bå4de bå9des bå6e bå7ene bå4la bå1re bå6reg bå4rep bå4s3te bå6s7ti bå6t5j bå6to båt5r 1c4a cab4 ca4e ca5le ca5me ca5mo ca4pe. cap1r ca6pris ca3ra car5n ca5ro car4te. ca2sa3 ca6set cash5 ca5s4til cas5to ca1t cath5 ca3th6r ca4to. 6cb 4cc c1ci c2d cde6 cebo9 ce3d ce1i 1cel ce5le cel4les cel4lev 3cen. ce4ned ce4nee ce4nem ce4ne5s4 ce5nes. ce4net ce4nev 5cens cen4ti9m cen6to ce5o4 1cer cerba6ne. ce3re ce1ro5 cer3t 6ceru cest3o 2ch. cha5le 3cham4 cha7ne cha5t 2chb 4chei chel5s che7te chi4li 4ch3h 6ch5m 4chn ch5ne chom4 cho5s6 2chp 8chs 6cht ch1v ci1c 3cid ci2e cie8n cie2s5 cil5l ci3ne ci5ta 2c6k ck5ar. ck5art ck1en ck3er. ck4ere ck5e4t3 ck5et. cke8y5 ck1i ck1k ck1o2 ck7r ck5s2 cku6 ckup3 ck9ut c2l clai4r5 cly4 c1m cmini4 coa6 coat5 co6bid 1co4c 2cod 6cof 6cog co4la. co4lab co4lak co4la5r co2m co5ma com5t co6n5os con5s con7t co2o co7pa 2cor co3r6a co1re co4so 4cost co4ver c1pr cr8 cras4h crack4 cre2e creen7 cros2 5cru 4c4s 4c1t c6ta cty5 1cu 4cu. cu5la cu5le cu5lu cup1l cu6po cup1r cup7s cu4på 2cur cures4 cu6t cy2a cy6p7 cys3 c6z cæ5 1da 4daa 4daber 8dabo d5abs 6d5adel d4adg dadø4 dadør5 4daef 2daf 5dagb da4gev 4dagj dag7l da6go. da4g1r da6gun 4dagå 4dahe 5dahl da1i 2daka 4dako 4dakr dak4se. 4daktig da5kv 7d6al5j da1la da8la. da4las 6dalau dalbu8er 4d5ald da4les dal6so da1lu da4ma. da4man da3mas da4me. da3men 4d7ameri dame3s dame5t6 da3mo dam7pe 5dan. 6danal d8ane 9dani 2d1anl 3dann dan5neb 4danno 7dano d4ans. dan3sa dan4sel dan9s8kan 4dansv 9dant. 9danti 8dany 2da3o 2dap da3pe d3app 3dar. 5dara 2darb dard3s4 4darea da4res d5arn da2ro dar5os. dar5s6 dar4ta. dar6va. dar8ve. 4dasei 2dash 6dasi 4dasjef da4sk da9sko 6dast6r 6dasu data5 4da4tal data6le. datali8na da4tek 7d6ato da3toa 4da5tr dats6j d6aud daud7s8 dau5go 2daut 2dav d5avb d5avis d1avl d3av5s 4daø 2d1b2 dba8le. dba4ne. dbe5s6t dbe8ta. dbe6te. dbling7 dbo6en. d6byf 4d1c 6d1d d2dad ddag4 d4dak d4d5arm dd3eie d2dek dde4lap dde4l5o ddel5sv d4demi dder5s d4desu ddie8 d7dom d8d7orm d4d1re dd5run ddsa4 dd4sala dd4skap dds5tab dd3s4te dds5tr d2dyb ddø2 ddør3 d4d5øy dd1år 1de 2dea deak3 de2al de7b 6debar 4debas 3debat 2debe 4debl 2debo 5debon. 2debr 3debut 2deby 4debø de1c 5ded. 2deda 6d7edd 7dede. 4dedek 4dedel 4dedia 2ded4r 2dedy 2dee 5dee. de7er 2def d5eff d5eft 2deg 6d6e5ge 5degg de3gl 2deh 5dehavs 2dei dei4d dei4ene 3deig. dei8ge. 5deigen dei4g5r 5deik d2e1in 3deir de5is. de3ist 7de7it 2dej 8deka 2deke 2deki 2dekj 5dekk dekk3a dek4kan dek4kel dekk8s dekk7s6t de6k6kv dek2l 6dekly 5dekni de5ko 4dekod 4dekon 4dekos 2de5k6r dek6st deks7ti deks6tr 5dekt 2deku 4dekv 4dekø 4dekå d4el. 6delad 6delage de6lans 4delau 4deled de4lef 4delei del5ei4d del5eie 4de4lek de5lele 4d5elem de4lest 6d3e4lev 4delid 6delinj del5int 4delis 4deliv del4lap del6lei del4lek del6lerf del6lig d4els del4s5at del3se delses7 del4si del4spo d4elt del6tala del3te del7tr 6deluk de8l7ur del5ve 4dely 4delæ 2delø delø6pa. 6deløy 2delå 2de5ma d3emb 2deme demie4 4demj dem8na. de4mo. de4mog 5demok 4demol demo5no 5demos dem5pe 3demr 5dems 4demu 2demø 2demå d2en. 4dena de7nak 6d5en6den. 8d7en6dene 6d5en6der. de5neb 4dened 6denel 4denem 4denet 4denev 6d5engen. 4deni 4deno de4nom d2ens den4sin den4s3t8 den6t5ant 4dentif 4dentit dent3o den4tr dent5s8 den6t5u6 den6tå 4denu 2denæ 2denø de2ob de4og 2deol 4deopp 4de3or de4ove 4depak 4depap 2depe 4depi 4depl 6depu d2er der8am de6rant de4rare de4rark 5de7rast dera5te der3av der5d 4derea 4dered de4r5edd de4ref 4dereg 4derep 6deresi der5est 8derest. 6dereste 4derett de4rif de4ril 5derin de4rinæ der5k der5ne de5rob 4derog 4deros de5rose dero8se. 6de7rot dero4v der5s6n der4sp der3t der5un de5rup 6derus der3v 4derør 2derå de1s 3d6es. 2desa 4desc 2dese de5seg des5ers 4desho de8s9hop desi4s5t 2desj 2desk 9desk. 5deske 4des4le 2deso 2desp 7despl 6de5s6pr d4es2t 5dest. 5deste. des6tem de5sti 4destj 4desto 4destrå 4destu 6desty de4s3tå 6desup des6v 2desy deså7 d2et. 2deta deta8ka. de3te 4detea 6deteg 6detekk 4detel 4deten 4detep detes7 2deti 2detj 4deto 4det6r 2detu 4dety 4detø 6detå 2deu d1eur 5deus 2dev deva8ne. devi9er. 3devik d7ev8n de5vu 2dey 4deø 2deå 2d1f dfø6rarar 2d1g4 d4gel d5gi dgi6n dgjø6re7n6h d3go 2d1h dhav4s dheim2s5 dhu9ga dhø4r 1di di6ak di5alg dia5li di1ar dia3re dia1s dia7sp dias6t diats4 2diav 2dib did5ri di7ell di5en. 4di5end di1er dies4 3diff diffe5 3diful 4difø di8g9and di4gat di3ge4s5 dig7g 2digj dig8la. dig6le. 4digren dig5ret 4digru di2gu 4dih 4dii 2dij di5ka di8ka. di5kem 2dikj 6dikn 2diko 2di1kr dik7v 2dili dil4les di5ma 6dimed 6d5i6mel 4dimes 4dimet 2dimo 4d5imp 4dimå di5na 2d1ind di7nen 4d5ingk din3gr ding8s5en ding6s5er din8g9å dini4 di4ni. 4d1inn 2dino 2dinv 4dinø 3diog 7diol dio3na dio4no di3ori dio5tr 2dip 3dipl dippe7 4dired 4direg 4d5irs 5dis. di6sc di6sed dis4i disie5ne d6isk dis6kam di4skj dis6k7l di4sk6o dis5ko. dis7koe dis7ku dis5s dis1t dis7tik di5sv dis4vi 2disy di4tal di7te 4ditek dit4tet ditt3r di9us. di4va. 4dival di7van 4divek div6i 2divu 2diøk d1ja d1je. d1jen djer5ve d7jes. dje9ve d6jingan d6jingar d1jo dju8la. 5djup 6djupar d4jø. 2d5k2 dka8ra. dki6 d5kj dko2r 8d7out dku4le. 4d1l4 d3la dla4ga dland7as dla6te. dla4v d4ledi d2lef d4lega d7legar dle3ge dlei7er. d5leka d2lel dlem4st d4lenet d4leru dleva8ne. d5li dli4f dli5ke d5lo dly8se. dlø8pa. d5lå dlå9re 2d1m 4d1t dme6la. dmo4e dmors6 dmo8s dmø4re. dmå6la. 8d1n dn6a dno8de. 1do 2doav do2b3 4doba do3be 8do9b8lan 2dobå do4da dodø4 dodør5 4doeu 2dof d3off d5ofr dog6med dog4me5s 2dogr 6do5i do3ki 4dokine dok6kan 4dokn do5le 4doled doli8ne. 4dolinj 6dolis 4dolj dol5l4 4domes do5mis 4doml do4mo dom7p 2domr dom8sa dom8s5e6 dom6s5i dom4s3k doms3l domsla6ga dom4so do4mu do4na. don5g 4donke 6d7on6kl don5st don5t4 2dop do4pa. do4pe. 3dopi d6o1ra do5ran 2d1ord dor4da do1re dor6gest d5orie dorm8 do3ro 5dorp 3dorr dors6 dors7ke do1ru do7rye 5dos. do4se. do4set do1sk 6do7s6l 2doso 4dosp 2dost do3str 4dotr 2dov do5va do5ven do4ver dov9n 4doø 2d7p8 5dq dr4 d1ra. d5raa d9rad. d5rade 1d6rag dra5gen dra6kes 3drakt 1dram 5d6rang 3drap. 5drapa 3drape d3rapp d1rar d6rarar d3rarb dra6ret d5rarm d5rarr d9ra8sa 9dratt drau7ma 2dre. 5dreass 2dred d5rede. d5reder dre7d6r d5reds 9dreg. 9drege. d3regj 3dreie drei5en drei5er. drei7ern d5rej d6reka d7rekk 3drekt 4drel d7relig 4drem d1ren 4drer d3ret. d3retn d6retr d3rets drett4 dretts5 5drevet 3drevn 4dria 3d2rif 2d1rig d2rik d3rik. dri8ka. d3rike 3drikk drik7s6 d9rikt 5d4ril 2d1rin dring6 drit7tr drit5u dritun8ge. 1d2riv 3dronn dro6pa. drop5s 2d1ror 3d4ros dro8ta. 2d1rov dro5va dro3ve 2dru 3druk d1rul d1rum d3rup 6d5rut 2dryk drykk4 d2rys d4røm drø6re. d7røt drø3ve 5d8røye d1råd drå4de. 3dråp 8ds d5sa. d3sabl ds1ad ds3a6del d1sag dsa9ga dsak6se. d1sal dsa8la. d4s3alf d6sall d9same ds1a6n ds5ane ds1a2r d2sas d4satf dsbø6n d5se. dse4d ds1ef d2s1ei ds7eks ds3ela dsel4s5a dse2m ds3emi d6s7enda dsen8de. d4s3eng d5sens ds3e2p d7ser. d6serf ds5erk d4s5e4sk ds5e4st ds3eta dse4te. d5setj ds1ev d2s1i d3s2id d7sida ds5ident d4s5ide4o3 ds3idr d7sil ds5ind d3sir ds3i4s dsi4ve d4s3jen d2sjo ds7jor ds6ju ds5kab d4s3kan ds3kar d4skat d1skj ds5kjen d6s5kjøt ds1ko d5skot ds3kro d4s1kv ds1l ds5la. ds5lan ds6lem dsli6k ds6lo. d9slott. ds4luk ds3ma d6smo dsmå6la ds3ne ds5no ds1o2 d7somst d4s5os d7sot ds1p d3spek d3spel ds2pi d9s8py 6d7run ds5s4 dst4 ds3tak d4s3tal d3s8tar d5s4tat ds6tau dss8t d8s9te. ds9teik dste6ma. d6s5temp ds5teo d3s4tig d3s4tik d5stilli ds1tj d3stor d3stri dstu8na d5stund ds3tv dsty8e ds3tyv ds1u2 dsure6 d5s6us d6s7usk ds1v dsva8ne. d3s4vet dsvi6ka. d5syk d3syn dsy6na ds1yt d2s1ø d6sør ds1å6 6dt. d3t4a dta6la. dta4le. dta4s d3tem dte4ma. dt4eng dterle7 dte4se. d5t4et d4tg d3ti dt6j d7to d5t4rag d6troc d5t4rø d6t1s2 d3t2va dtø8 dt6øk dtørs3 dtå4 1du dub5b dub5l du1c du9ene du9ens due5s 4dufo 3dug 4dugu duit6 du6ka. dul5l 4duly dums2 du4na. dun7de 4d5uni dun5s6 dun7sta 7duo d3upk dupp6e5 3dur du6ra. du6re. du6rei dur8ta du1s du5s4a du9sem du5s2i du2sk du2sl du2sp duss4 dust4 du2sv 2d1ut d6utt du6va. du4ve. 2d1v 5d8va6le dva4ne. dve6s dve6va dve8ve. d7vo dvo8r 2d1w 1dy dy9a 2dyba 2dyf dy5ke. 4dykl 4dykø 2dyl dy4na. dy4ne. 4dynk dynk6s5 dy3pes dy2p3r dy4ra. dy5reba dyrle8ge. dyr5s4 dy2r5u dyr5ø 7dys. dy8sa 4dyse dy6se. dys7s dyst7r dy2t d5z 8dz. 1dæ dærs4 1dø 4dø. død2s1 dø3gr 2døk d5økn dø4ma dø4pe. dø4pen d2ør dør3i 2døs d6øs. dø2st3 døt3 dø9va dø3vel dø1vi 6døvl døv8le. 2døy. døya8 døy8g 4d9øys 1dåd dåd6s5 då8na. 1dåp då8ra. då5ri d3ås. då8sa. d8åse då7sem d7åt. 2ea e1a2b e1ad ea2d1i eadli5 e1af ea2gu e1a2k e4akr 6eakt eak6se. e1al. e5alle eal8le. ea4lov e3alte ea2lø ea4m1 e3aman e5amn e1an e2an. ea4ne. e6a5net e4ani ean7n ea4nor e6ans. ean3sl e1ap ea4pe e1ar ea2re ea5rer ea5ret ea5r4i ear6ka. ear8ma. ear4ta. ea2s1i e3asp e1ass ea7ta e5a4tel eate6ren ea4t3et eat8h eat6le e8ato ea5tri e1att e1au eau6ga eau6ge. eau8ra. eau6re eau5s eau8sa eau8se. e1av eav8la eav8le. 2e1b2 eba3d eba4ne. eb3be eb4be. ebe4d3e6 ebei7er. eben6s5k ebers6 ebesku5 ebet5s eb3h e5b6lo eblæ5 ebob3 ebo4da ebo5ers. ebo6kr ebo6la eb5s ebu4e5re ebu5ern ebu6et eby4ta ebø6n 2ec e4ca ec4c e1ce e5cha e3com e2dad ed5ad. e5d4ag edag4s5 e2dar ed3ark ed3arv ed7dela ed4dyr e3de. ed5e6ge ed5eg4n ed3eie e4deks ede8le. e4denf e8d5eng eden5t e6depr ede4ra e4derø e4desk ede4sl ede4sm e4desn ede4s5p ede4ta e6d5ett e8dé e5d6ia edi6a5ne edi4ene edi6gj ed4is edi3si edi4s5k 3e4dit e7div edle6ge. ed8ob edok8se. e4dol ed1op ed1ov e1dr ed2ra ed3reg e5drev. ed3rom e6d5ryg ed7ski ed3skr ed3s4la ed2sm ed5ta ed3te edt6r edu8a ed7va edvi6s e3dyk ed5ynk edyr6ke. edæ4 e3d6ø1r e3e2 eea7 ee3b e2ed ee3di eeg4ga eeg6n ee5gå eei4d eei7ni eek1e eek4te ee3la e5e4li eem6na ee4n e5enb een3in e5en6k een5t e3epl ee8ra eer3en ee3ri e4er3l eer4me. e6e5sh ees8ka ees6ke. e3e6t eev4ne. e1f 4efa efal6s7 e4fana ef3ank e4fark efar6s5 ef7ea ef5ef ef3fe 3effek ef3fo 4efi e4f3id e5fig e5f4ilm efi7ren efisken8 4e3fj 2efl efle6ge. eflå3 e2fn efo8bi. efo4no 8efr ef2sj ef2sk ef2sp ef6str e8ft ef2ta efta5r eft5ei ef5ter eftle8ge. eft1s4 6efu efyrs5 e3fæ 4efø efø5le eføy9 2ega e3gaf e6gala e7gam ega4ve. egde8l eg7des e5gedo egei9e ege4let e2gem e3geme egen5s 3e4gensk e7geom e2ges2 ege5sp eg9gen egg3l eg8g9ut egi3an egie2 e4giko egis4p e3g6lad e3g4led eg7lesa e5g4lit eg7ly e5g6lø 6egm e9g8nag eg4nem eg6no e7gnå 4ego e4go. 7egoi eg2r egrans5 e7g8rø egs4am egs4ki egs4ta e1gø egøy6e5ne 4egå egå4va egå4ve. e1h ehea4 ehei9e eh5er. e4h5ere eh7ern eher4s ehog5 ehov2 ehy6re. ehø8va e6hå. 2e8ia e9iakt ei9a4n ei7ar. ei4c e8id. ei3d8ar e3idea e3ideo ei9der ei5det 5eidf 5eidg e6i2do e1idr ei3d4u e8i7e eie5d ei8eg eie2n ei9en. eier3a ei4ert ei6es ei1fl 8eig. ei3ga eig6e ei6gev ei5gi ei6gra ei6gu 4eii ei5kaa ei3ke. ei6kee ei6keh ei4kel ei6keri ei4ket ei1kr eiks3a eik6se eik4so 4eil ei9led eil5egg e3illu ei3lo. ei9loa eil5op ei5los eil5s6 4eim ei7ma. e5imag ei4m5a6l ei4med ei6mei ei7men ei4me5s ei4met eim9ett ei6mo 8e1imp ei4n3al ei4nans ein5ant ei7nare ein1d 4e3indu ei5ned ei7nel ein9f einga6 ein3gr e4ini 6ei6nit ein3k4 e5inkar 4e1inn ei4nom ei4nov einsi9d ein4s3l eins6o e4inspi ein7sto ei2n1u4 ei3num 6einv ei2n3ø ei5or e4ip ei9pa ei3pe eip5s 2eir eir9ak ei7ren ei3ri eir5s 2eis ei5sar e4ise ei3se. eise5i ei3sen eiseri9e8 ei3s4ha ei4sil e3isk. e3iske ei6s3kj eis3ko ei3s4pe ei4spi ei4tek ei4tera ei4tere ei2to eit7ta ei6t7ut ei3tve ei6t7ø ei4vak eiva9r ei9ven ei3vi eiv5s4 e1j ejo8en. eju6la 4e1ka ekali7 ekalie6 ekam6s5 eka6ra. e5kavr ek3eie e4kero e4kes ek5e4ta e6key e5k6hov e1ki e4ki. 4e1kj 2ekk ekke7le ekk9ist ek1kj ek4kjø ekk3l ek5kok ekko5v ek6ku ek4ky e1kl e8klane ek6leg e6klen ek5let e3klu e5klæ ek2lø 4ekn ek9na. e3knek ekne7s ekni7p ek3no e3k4nok e1knu e5knø e1k2o e4ko. eko7le ekords8 eko6te. e4kov 2e1kr e3k2ra e3k4red e7kref e3kren e4k5ret. e5krets e5k4rev e3k2ri e3kro ek4ry e3k4rå ek5råd ek3s4ak ek4sal 3eksam ek3sel 3eksem ek4sig eks1k ek4ska ek8sn 1eksp eks5pe ek4sta ek7s6tel ek3sti ek4stil ekst5o ekst3å ek4sæ ek6t7arm ekt3av ek3tef 5ek3tep ek5tes ek6test ek4tid ekti5m ek5tiv 4ekto ektori6a ek4t3ra e6k6t7ro e1ku eku4le. e1k2v ek4val ek6var. 6ekve e4k5ve4d e4k5vik ek4vin ek6vis 3ekviv 6e5kw e5ky eky6te. e3kæ e1kø e1kå ekå6pa 2e1la ela4ga el3agg e2l1ak e5lake elak8se. el7akt el1al e8lame el3anl e6l5arg e4larr el7arti e5las. e5lase ela4te. el5ato el5avl el3avs elbo8da el4ch el5do eld4rer eld5sle 4eled e4ledi e4ledr e3lee eleg5d ele7ger eleg8na e7leir e7leis e5leke e2lel e2lem e5lem. e5lemat 5elemen e5lemet e3lemm e3lemp 4elen ele9na e4l5enh elens3 e4lentu e5lepa 2e3ler ele8ra. e7leret e6l7erg ele3sk e6lesku e4leta e4lete 5e8lev. ele4vak 6e5levn el5fi el9ga. el5gele el5gi elg3s8 2eli e9lie eli5e6rer e4lif e4li5g4r e4l3ind elin5es e4linsp eli6o5s eli8ta. eli4tet 6e5litt eli6v7en el1j elk2 el6k5al el4ke5s el4kete el3kn el5la. el5l6ar el4led el4leg ell5eie el5ler el3le4s el6lete elli7ga. el4lisj ell7sa ell5sk ell5s4l ell5sp ell5sv el5l4ur el4læ el5m4o el5mu el5n 2e1lo elo6ka. e2lom e3lomm el3omn el3oms el1op e2l1or e3lort el3ost el4ot elo7vers. e4l5ovn el4pet el5ph elro4s el4sei els5eie el3sen el3se6s3 el3si el4sje el4skal 7elskand els5kare els1l el6sno el4spe el3spr els4ten el4sti el4stj el2sø els5øk el5s6åpe elta8le. el5te. el6teg el4tero el4t5ett el4t3op el4tro elt5rop el2tu e3lua e1lu2e e4lu4he e3luk e7lum el3ung elun6ge. e7lup elu8pe. e1lur e7lus el3utr elv3an el4ve3d el4vei el6vere elv1r 5elvs. elvæ6re. 4e1ly ely8et. el5ynd 2elæ elæ5res el9ærv e6l5æt 2elø e4l3ø4r el3øy. el5øya el5øyd e6l3øyn 2e1lå el1år e5låt 4em. e2mad emafo5 ema4ge. e4magr e2mah ema4ke. e4mako em5akti e4maku ema6le. 5e4malj e4mam e4mana ema4ni. e6manu e4mare em7ar8m e4masi e6masku e4mata ema3uk ema5ve 5emball 3embed embe6r5 3embet 6emd 8eme emei9e eme4li e4mend eme5tri eme6trisk em5e4v e4mib emi5ert e4mig 4emin emi5ni emini6st e4minor e6mir emi9sa em7je e5mju em5le emle6s em5me. em5men em8mi. 8emnd em4ne. em4ned em4nem 6emni emo5nol em1op e2m3o4v em4ped em6peri em2p3l emp9lane. em6pli empo3 em4pol em4pos em4ses emse8te. em4s5ju em4s1l em2sn em4sor em1st8 ems4te ems3u emta8la em4til e3mug e2muk e5my emy4k 6emø emø8r e5møy emå4la emå9lan emål4s em1å8r 2ena en1ak en3ald ena5li en3all en5and e5nane e6n7ang e4n3ant e5nar. en8are e4narr en3ass enat6s5p ena2v en3avi 4enb enbe9na en4d5and en4dek en3del endelø7se en5demi en3der en4desl end5l 1endr en4d3ro end3st en7dø endø4r endør5e en5egg eneg8ga en3eie en5eks e3nekt 4enem 2enen en5eng 3energ e4nesk 4enev ene7ven eng6a en7gar en4gem en4geri enge6r5u en4gle eng4les eng4r eng3s4e eng5so eng5sp engs4ti en4gut en4g5å 4enhj e4ni. e4nierk e2nif e5nir en4kera en4keri 2enna en9nal 2enne en4nem ennes6t enne4s5v enn2i enn2o enn4sj enn5sta enn7ø 2eno en3ok en3og e8n7old en3om. en1op e6n5ord 2enp en4pås en4rem en5sab ens5af en6s7a6ker en4sek en4seli 5ensemb en4ses4 ense3u en3si ensi8de. ensi5ert en4sim ensle7g ens6lev en7s6opt en1st en6s7tal ens4ter ens4ti ens7und ens4ve ensvi6 en2sø ens3øk ens7å en5ta. en4tap en5te. en4tec en4teg en4tel en3ti en5tie en5tig en5tik en9tima en7timen en4to4r ent5ori ent5rab en4tre ent5ren en4t5rol entropi5 en4t3rå en6tul entun6ge. 3entus 2enu e2n7ul e4n5ur 2en3v 4enw e4ny. e2nyb e6nyr e2nys e4nyta 4e7næ enæ8m enø4k e2n3øv en5øyd 4enå en1ås en6ås. e3o6 eo3a e6obe eo2bl eo5d eod8de. e1og1 eo7gr e2o1i e2ok e3oks e2ol e4o7lo eom1s4 eon8de. eo5ne e7onk eon4kl e3ont eo2p eo3pa eo5pl eopo3 eopp5r eo3pr eor4da eo9re e2ori eo4rid eori5e6 eo4rik eo4ris eo1ro eo1s eos6l e2o1u 2e1p epa3t e6peno epe6p eper5r e3pes epe4st e4peta e6peu 3epid epi6ka. epi7kr 8e7pin 3episo ep2l e8plen ep5lene ep5ler eple9s6 3eplet epo6et 3epoke epp2s ep6sem ep4ses4 ep6s5lu eps1t ep2su e3p2sy ep6tin ept6r 2e1ra e4r3abb era8da. e4rael e2raf er3aft e4ra4g e2r1ak e3rake era5kl eral3u e4rama era6na. e5rande. e5ra7ne er7anli era4no er5ape. er5aper er5a4pin er3apo er5appe e5rar. e4rarg e5rasane e5rasar e4rasje e4rask e6raso e4r3ass er6ast e4ratek era7tor e4ratr er5att e2rau er5auk erau9ken erau8s er3av. er3avh er5avl e3ravn er3avr er3avs 4erb erbi9ti erbo8da erbo8de. er8byl erd2e er4ded erden8s er4dis er1dr erd4ra erd8re erd4skj erds3t erd4sto erdsto8ga er3d4v e1re er3eff er3eft er5e4gen er3eid er3eie ere6ka ere6ke. e4r3eks e6r5ekte e4r3e4le ere4lit e6relli e4r3els e9rem. e5remm er3emn er5enden e4r3eng e4r5enh e3re4o7 er8er. e4r3erf e5reri er3ess ere4t e5ret. e4r3eta eret6h ere5to e7rets 6erett eretts5 e4r3e4va e4r5e4ve e4r3evn erev6ne. e8ré 5erfari 6erfi 4erfr 2erg erg5elv ergi3f er6gli er4go. erg5ret erg5sko erg5sp 2erh erhø6re. e1ri e4riad e4riak erib3b eri3bl e4rice e2rid e5rid. e5ridn eri4kat e6rikn 4eril e7ri6ma. er3ind e3ring 6eringar ering6si er3inn er3ins er3int e5riori e5ris. e4risa eri3se e4riso e6risp e5rist. e7rista e5riste eri5stil e4ri5s6to eri5sø e4rite e4rito er7ivo er7jes. 4erka 8erke erkeri6e er4kesa er4kese er4kete er6k5ett 3erklæ 6erkn 4er5k4o 4erkr erland7as erle6ge. erle7s8t er3me ermo8de. erm1s ermå6la. 2ern er4nad er4ned er5nede er6nee er4nero er4nest er2no er3nob 2ero e3roa er3obl 5ero4b7r e1roe er3off e1rog er5oks e1rol er3oly e1rom er5omk ero5mo e1ron er5ond erono5 er1op e5rop. e7ro6pa e5ropen er1o2r e5ror. e3rore e7ro4sa 3erosj er3osl ero4ta er1ov 2erp 2err er3ra er4rae er4rel errie9n 6ersa ersa8ka ers6al er3sep 6ersj er1sk er3ska ers4ka. er8skaran er9s6karar ers5kor er1sl ers4la ers6led ers4mi er5sne 6ersp ers5tens ers5ter er7stev er1su 4ersv er4sva ers4ve er1så er4s5år 2erta er4tare er4te3s4 er5tia er3tib erti4e er5til erti4mo er4top ert5rol 4erts ert3sa erty6e ertå7ren 2eru e1rua e5rud3 e1rui er1u2k e3rum e4r3ung er3uni e3rup. er1u8r erure8 e1rus er5ut. e5ruta e3rute er5utn er9uto e4ruts er7u6v ervele8 6ervi ervs3 ervæ6re. e1ry4 e2r3ya erye7ne er1yr erys3 e1ræ e9r4ære 2e1rø er5økn e4røko er1ø4l e4r5øn e5r6ønn erø8ra e6r5ør6s er3øya e4r5øy7e erøy4n e4r5øys. er7øysk 2e1rå e9rå. erå4da erå8de. erå6e erå4k er5åke er3å4l e2r1ån er3å4p er3å4se erå6t er7åta9 e6råv 2es. e1sa es5aa e2sad esag6 es4al esa6la. esa9met e4s3ant es5arab es5arv esbi9e es8ce 2ese es5ege es3ei4d es5eie. es3eig esei8ge. e3sek e4seku esel5s4 e3s2en e5ser. e5sere e5seri e4s3erk ese5s2 e3sest e4sesv ese5tas ese4te. e5setj e9sets e4seu e4sha es6har esh9ar. es4h5er e4shi e1sho e7s8hop esi6ar esi5ert e4sil e5sili es3ill e4s3ins esi6v esi3st es3jor e5skab es6ked es4kee es4ker 8eskil e4sking eskinns5 e1skj e8s9kjer. es4kjæ e6skjøn es5k4n e5sko. es7koa e3skot e1skr e1sku esku5et es3kvi e5sky e6skyr e1skø e7skå eskå7r e1sla es4lek es4let es7let. es7lets es4lit e4s5lok es4løk es4løv es4make e7s4mett es9na. es4ner es2no es4nu es2ny esnæ5re 4e1so eso4b e2s3od e2s1of es3oks e2som e3somm e4s3ori e1s2p espa9ra es3pas es5pe. e4s4ped es5perm es3pl es4p5le es3pol e3spor es3pun es4sed es4see es4seg esse7i es6sendi es4s5enk es4ses es4sete ess5e4va es4s3ja es4sje es4skr ess4let ess3om es4sos es4spa ess5tilt es4stol ess5tor ess9tua ess5tue esstu8en. 4essu es2s1v es6s5å e7stad es5tae es7takt es9tala e8stane e5stans es5tant es3tap e5start e3stat es5tato e4s3tau e7stav. est5avs e6s5te. es4teg est5eie est5eig es4tek es4tel e5stell es5tels e4stema e6steme e4stemo es5temp 6esten e7steng es5tenk e8s7ter. e5s6terk esterne8 este3s4 es4test es4tien e3stif es4tig e3stik es4tikk 5e6s5tima es4tis e4stiv e1stj es3t6on e4stog e3stok e3s4tol es6tone est5ord est5ori es5trak est5rene est5rer est9ré es5trib e5stryk e3strå e1stu e5stud es5tus 8estå estå5ren estå6s est7åse e1su es5ut esva5re e5s4vek es5vig e5svikt es3vis 2e3sy esy4na e4s5yt es5øvi es7øye e1ta 4eta. e4tae e2taf etafo7 e3tak e6tako e3tal eta3la eta4la. et5ald 8e7tank eta5le 4e5tall etal6list etall5s6 etal4s7 et3amb e6tand eta4nen et4ap e9tapa e5tape 3etappe et8ar. et8are et5art 5e6tasjes 1e2tat 4e5tati e5tato e3tatt et5aun e8tax et1c 2ete e4teie e4teka ete4ma. e5teran ete5ru etes5i e4tesl et8et e5tet. e7tets 4eté 4eth et6her 2eti e3tit 2e1tj e7tjer et3jø 6etl et5m 2etn et6nev etning4 etnings7 2e1to eto4er et5oppd et3ord e4tot 2e1tr e5t4rad e7t6rak 8etre e5tree e5tref e4t3ris e9tru. et5rum ets1 et9sar. et4sku etsku8le. ets7l etsla8ga etsnæ4 et2sø et4tak et4tal etta6le. ett5alt et4tank et8tap et5te. et6tei et6telt et4tenk et4tenn ettera4 etter5at et5t6erf 5etterk 5etterr ett5esk 2etti et6tia ettian8 et4til et2tj etto5a et4tr ett3re ett4ski ett4sti et3tug et4tur ettvi5se et2ty 2e1tu 5e6tui etu6na et3uni 2e3t2v e4t3va e5t6vang 2e1ty 4etz 4etæ etæ3ra e1tø e1tå etå5re e1u eu4a e8uf eug8la eu4h eu4ka. eu2ke eu5kem eu7kr eu2l eum2 e3u2n eun4ge. eu5nu e4up5a e6upk e2ur eu6rat eure4 2euri e3urn eur8na eur6ne. euro1 3europ e3urt e2us eu4si eu1ta e3uts eut7t e4u3z e1v evad6r ev5akti eva4la evann4s e4v5anta e4varar e4varb e4v5ark e6vatf 6eved eve5d6a eve5del 6eveg e5vegg evei6s5 6evenn even5s 5eventy e4veny e9ver. e5ves. e5veta e5vev. evi4e evi5ere evi5ert evin4s evi4se. evis3t e2vj ev2na evn5a4k ev7nu ev7oms e4vre e7vri. ev9rå ev1s evs8v evta8la evti4 e2v3un e5vyrk e2vø ew3a ey1 eybal4 e1y2d ey5k e1yng e1yr eyr6ka eyr4ke. e1y2t e7yti ey3tr e3zi e1zu e1æ2 eær3 e1ø4 eør6na. eøy4 eøy9an eøy7en e1å6 eåk4 eån8da eåt8t é1a é1b é1d édø4r5 é5e8 é1f é1g é1h é1i é1k é1l é1m é4n5e é5n6et é5o é1p é1r é2rj é1s ése2 é1t é1v éva8la évo8re. é5å è1r è2red è2ref è2rek4 è4rener è2rep ère3s2 è4rest è2rev è6ves ê8lan ê6ra ê1re êr7o êr9sl 1fa 4fabo fac8 fa1ci fa3de fa6de. 6fadm fa4f fa2g1a fa5ger fage4t fag5eti fa2gi fa2go fa2gr 6f5agro fag3sk fa2g1u fai5 2fakr fakse9t fakta3 fa1ku 5fal fa1la fal6kes fal4k3l fal6lers fal5m fa4lo fal4sk 4fa5mo fa4na. 7fan5d 5fane fanfa5 fang4s fangst7ev 4fank 2f3anl fan5s6 fan7tesk fan5ti fan3to fan4try 6fanu 2fap 3far 9f8ar. fa3ra fa4ra. fa4re. fa4res far4gel far4ges fa4rit far5n far6skj fart2 far4vel 4fary fa7sa fa4sel fa4seru 2fasl fast3r fa3tal fa4te. fa6t7ers fa1to fat2r fa3t6re fav5ne fa1vø 2f1b fba4ne. 2f1d 1fe 3fe. 2fe1a4 5fea. fe5a6l 2fec fe4da 3fede fe2dr fe3dra fe3d4ri fe7ene 2fef 2fe3g 2fehj fei9en fei9er feig4de fei5ge feil5es fei4li 9fein. 7feine fei7ter 8fej 2fek4a 4fekl 2feko 4fekr fek6tes fekt5ev fe5lag fe5len fe5li feli7e6 6felik felles5 fel7læ 2felo fel5ok fel9ta. fel4tek fel4ti fel4tra fem5ak fem9b fem9ne fe4mo fem5s fem4tid fe2m1ø 5fen. 4fena fend9r 4feni 5fens fentleg5 2feo 2fe3p2 5fer. fe6ral 4feram fe5ras fer6at fer4dam fer5de 4ferea 4fereg fe4rek fer6en fe7rer. fer5ers feri6e feri8e5ne 7fern fer2r fers9kar fers7ke 2fe1ru 3fes. 2fesi 2fe1sk fe2st fes9t6i fes8t3r fes9tum fe6st9ø 4fesy fe6ta. 4fetap fe4te. 4fetea fe5ti 4fetil 2fet6r fett5j fett7s6 4fe4ty 2feu 2fev fe4ven 2feø fe6øy. 2feå 1fér 2ff f7fa. f4fab f2f3a2g f4f3ak ffa7l f6fann f4farb ffar6d ffa7re f9fas f6fat f8f9au f2f3av f2feb f2fe3d f2fee f6feh ffel7t8 f2fem f6ferdi ffe4rer f2fes f4feti f4feto ff5eve f2fib f4fice f2fid f9fien f4finn ff5int f2fip ffi5s4 f2fj ff3la ffla8ga ff9leg ff5lek ff3li f2fo ff4ol f2f3re ff1ro ff5sl ff5t4 ffu6r f6f7ut f3fæ f4fø 2f3g2 2f1h 1fi fia7l fia4n 4fiap fi4as1 fibi6en fi9cen fici7 fi7di fie2 fi1er fi7e6re fi4f fi5fi fi5fo fi7fl f6ig figh9t fi7g6r 4fih fi9ka fikali7 fikalie6 fi7ken fik6ka fik6k5n fi5ko fik7sa 4fiku fi4la. fi3li fil6lel fil6leri fil4les fil7leti fil8m7at fi1lo filt6re fil7tres fil4tri 4filæ fin5art fin5d fi4ne. fi5ner fing3r 6finj finn5ei 6finnsa fi4n3o fi9nor 2fins fin6sleg fin6te5s fi2nu 7fio5 fi2r fi3ra fi6ra. fi9rene fi5res. fi3ri fi5s4a 4fisc fi6se. fiser6s fi8si. fi2sk fi6ska fisk5a6d fis7kal fisk5and fis6kart fis6k5end fis4k3l 6fiskol 6fisku fis5ti 6fistu fiti6me. 4fitr fitt5s fi7ty fi4ve. 1fj f1jeg fjel6lend f5jen fjer5ne fje4sk fje2t3 f5ju fjære5 fjæ4res8 2f5k6 f2l2 f5lag. f6lagg fla7ke f4las 2fleg fle6i f4lek f6lel fle6r5u6 fle4sl f4lett f3lev fli7ne flis7t flit9t8 1flo flo9ga flok9s flo2m3 flo6r5o flos6kl f6lu flue3s flus8 fl5ut 3fly fly3s4 f3løn flø5s 1flå flå9sa flå7se 2f1m fn6 1fo 2fo. fo9ar 6fobs 2foe 4fof foi7la fo8ke. fo6la. fol4dr fo4le. fo5led fol6k5v fol9ler fol5lese folke5s6 fol5li fo4lu 3fon fo4na fond2 fo5ne fo3n4id fo4nin fon1s2 f1op for1a for9drev for7dro for5d6u fo6re. for9ei for7e6n for5ent for5ess for4et for9e8te. for9e8ten for9g6 forh6 fo4r9in fork8 forlo7v forlø9pa forlø9se formo9r for3n foro6 for5p4 for3se forsi9da forsi7de. for3s4m fors8t for9ste fors4v forta8le. for5t6e fortei9e for7t6i forti5da for3t4v for3u4l for7v6 forva9re fo8r5æ4 for5ø4 for9å fo9se fosfo5re 4fosj fo4ta fo6te. foto5 fo4tok fo4tom fo6top fo4tor fot3s fots6v fot3t 4f1ov 3fô 2f3p2 fpo6e fr2 1fra fra5l fra4m5e fra6mi framma8ne. franko5 fran7se fra7r8 fra1s fra5se. fra7sep frasi8e fra7sk fras6p fra7v fra7v6r f2re. fred8sel freds5t fre4e3 8freg f4rek fre4m5 fremma8ne. frems4 fre7ne fre6sk fres7ko. fres5koe fre8s9v fri5a6re 6f5ridi fri4erf f1rin fris6ka fri5s4p fri5s6til frite8re. friti8me. 6froc fro7f fronta9le fro8st frus1 fruta6le. f1ryt frø5b f4røk frø7ko frå9r fråve4 2f1s fs2h fsho6 fsi2 f5sjuk f2sl fsle6ge. f4sm f2sn fs7ne8 fs5ov fs2t f2s3tab f6s5tan f4s9v 2ft f1ta f3ta. fta7f ft1ak fta8la. ft3alg f2t1am f4tana f7tane ft3anl f5tar. ft8as4 f6t1av f2tea f3ted f4tee f2teg f2tei f2tek f6tem fte4na ften3d f4t3enh ften5s6v f2teo fte4r5a4 f4terin fter5s f4test f4teta f4t5ett f8t7id ft3ind f2t5i4s ft5l ft7n f2t1o2 f5tog 3fton ft3r fts5alt fts3ei fts5ers fts5erv ft2s1i fts1k ft2skaf ftsla6ga ft5s4lan ftsle6ge. ft3sto ft6s5top ft5s6tri ft5stø fts1u ft2s1ø4 ft5t4 ftta8ka ft1u 1fu fu8ga. fug9le. fug6l7eg fu6le full3 ful9lar fulle6 ful9le. ful4len fullen8de. ful4ler ful7les fullfø7re funn2 funns3 funnsla8ga fu6ra. fu6re. fu9ret fu7ro furu1 fu7sel fu6sk fus6o7 fu4s5t fut4h futu1 4f1v fva8la 1fy fy5la fyr2 fy8ra. fy4r5a4b fy1re fy4re. fyr7k fyr8ke. fyr5t fy3s fysa7 fy8sa. 2fæ1 1fø fø4da. fø4dek fø5den fø4des fø5des. fødsel8s7 fø1f 2føk fø4le. f8ør før6a fø5rar fø4re. fø4res fø7resv fø8rete før6tin 4få få7ren få7ret få5ri får7u få7va 1ga 4gaba ga1bo 6gabø ga3da ga4ded 4gadg 2gadm 4g5adr ga4e5k gaffel5 6gaflo g3aft 6gah 6gak g1aks gak8ta. gak8te ga3kv ga1la ga4la. galei5 ga7len gal4les 4galli 5ga7lo ga4ma. 4gamb ga5mer gamme6l5 6gand. 6ganden 9gane gan5g6en gan4g5j 4gan5k 2g1anl 4gann 4gansa 4gansv 4g5antre ga6pa. ga4pe. ga4p5l gap3s2 ga6p7u 9gar. ga6raf ga6r5ak 2garb 5garbr 5garby gar4dek 7gare. 4garea gar5es gares6ke. gar2i 4garki gar3ne gar6ta. g5arte gar8te. g3arti gart5s6la gar4un ga4ryl ga4sc ga5s2i gas8ka. gas8ke. ga6ski 4gasp gas6sel gas5sen gas7ser gass5ett gass3l 5gast gas5te ga5sto ga6s6t6r g2at ga4te. ga5tens gate5s ga3ti ga1to ga3tr gat6tap gau5la. 9gav. 2gavd 6ga4vei ga4veri 4gavg g5avk 2g1avs 2gavt 4gavv 2gaw 4gaø 2g1b gba4ne. g6byk 2g1c 8g1d gd5alt g6d5au gde3a g2deb g3deba g4dedi gde5lo g2dem g4dend g2de5o g4dera g4de5re g6dero g2des g2det g3det. gdevi8sa gd5op gd1or gdy4d g6d1øy 1ge 2ge1a geak8ta geak6te. gea7ren ge4ark 2geb 6geba 4ge5be 3gebri 4gebrå 3gebyr ged4 4gedan 6gedel gedia5 9gedom. 7gedoma 9gedome 7gedomme 6gedoms 4gedos 2gedr 2gedy 2gedø 2gee geen8de. 2gef g5eft 3gefæ 2ge1g2 g5egg g3e2gn 2geh gehø8ve. 2gei g1eie g4e1in gei4r3 gei9re gei8s7p gei6st5 3geit geit3a geit3o gei4t3r 2gej 2gek2 ge9kl ge3kn g1eks 6gekt 5gel. ge4lar 4gelau ge6le. ge7lea 4geled 4gelei gelei5er 4gelek 4g3elem ge5len. ge5lens 5gelet gel5ett 3geli 4gelid 6geligg 4gelit 6geliv 2gelo ge5lov 7gels4 gel3se gel5si gelsk7l gel5t4 4gelu ge5lun gel7ve 4gely 2gelæ 2gelø 2gelå 5gem. 2gema 9gema. 2gemi 3geml 4g5emn gem6na 2gemo 9gemr 3gems 3gem4s5t ge3mu 2gemy 2gemø 2gemå g2en 3gen. ge2n1a ge7n6am gends6t ge3nea 4genem gen5erf ge5nes gene4t gen5eti 4genev gene5ve. gen8ga. gen5gr ge4ni6n 6geniv gen5k genle6ge. gen3n gens5l gen6sun gen5tr 4genum 4geny 4genæ 4genø 2geo 5geog 3geol geome5 geomet4 ge5on 6geop ge9ope 2gep g2er 3ger. ge5ra. ge6ral ge4r5ant ge9ras ger5di 4gered 4geref 4gereg 4gerek ge6rene 4gerep 6gerese 4gerett ger4i5d 4gerik geri8ka 6gerike ge4rim ge4ris ge4rit ge4riv gerle9g g9er8ma. ger3n gerne6 4geroa 4gerom. 4geromm 6gerop. 4gerope ger5p ger4s5af 5gerud ge5rup ger5v gerø6re. ge4r3ø4v 4gerå g6es 5ges. 2gesa 2gese 5gesen. 5gesens 4gesi 4ge5sja 4gesje 2ge1sk ge1sl geslu7 ges4lø 4geso 4gespe ge4spr ge5spra 2ge1st 3gest. gesta7b6l 5geste. ges6tekk ges8ti. gest5rid gestri8de. 6gestå 2ge9s8u ges5vik. 2gesy 6gesæ 2gesø 2ge1så geså5re 5get. ge5tak geta6le. 6getat. 6getate 4ge3te 5gete. 2geti 2getj 2geto 2getr 5get5s 2getu 2gety gety8e 2getø 2geu g2ev 2ge7v8a 2geve 4gevir gevi6sa 4g5evn gev6ne. 4ge5vo 5gevå 2gey 4geæ 2geø 2geå 1gé 2g1f gfe2l 4g1g g6g5al gg5ask g2g1av g4gedi gg1ei g4gela g4gele g2gem g4genu g6gerei gge4rin g4gerø gges6b gges5l g4gesm g6geso g4gesp g6ges6tio g6ge5sv g2gev ggie6 g4gif g4g5i4m gg4je ggje5s g2gl g7glu g4gn g2g1o2 g3go. g5gos gg3rad ggra6da gg5rat gg8re. gg3red gg7rek gg5s4par ggs7s gg3sto gg4sy gg3sø g7g8ud g4g5u4r 2g1h ghe8n ght5ene gh4to ghæ8 1gi 3gi. 4giak gi1ar 4giarb 6giav 2gib gi8c 2gid gi3de gi1e 4giek 3gien gi9end 5gier 4gifa 2gifo 4gifr 4gifu gi6ga. 2gigr 2gih 2gii 5gika 3gike 4giki 3gikk gi5k4r 4giku gi5le 4gimess gi4metr 4gimi 4gimø 2g1ind 6gingeni gi4nin 2g1inn gin5nu 4gino 4g1ins 4g1int 2ginv 4gi5om 2gi1op gio4r 2gip gip5si 6gira gi3re gi4re. giro3 gi6rob 5gis. 2gisa gi3se 4gisel 4gisen 5gisk 6giska gis8lu gis4lø 4giso 4gisp gi3s4pa gi5s4pr giste6ru gis5ti gist5ra gi5stré gi6st5rer 4gistu 6gisty gi5ta 4gi5te gite4s gi2t9r git5te 2giu gi7va 4gival 4givo 4givu 1gj 8gjag 2g1jak g5jarn 2gjaz gje5f 4g3jeg gjels4 gje2n gjen7n8 gjen1opp3s4 gjen5s8 6gjent 3gjer gje7sk gje4s3p gje8v9ak 2gjob 2g1ju 7g6jut gjø9de 2g3k2 gkly9 gl2a 6gla. gla3de 4glag gla4ga gla8ge. g3land g1lar gl5art glar7v 1g2las 7glase gla6s7k g6lass 6glast g5last. 3glat g5lau gl6e gle6dero 4g3lef gle3ge gleg8ga 6glei glei7er. g2lek g7lek. g5leke g2lel 3glemt 4glen g9len. g9lene. g9lenes g9lens gle9pl 4gler gle4ra glere8de. g9les. gle6se. g4le5sk g6le7sm 4glet g2lev 1g2lid gli4del gli7e6n gli8er glig1 3g2lim gli9me 4glio glitt4 6g7liv 4glj gl7ja gl5l g4lo. g2loa 5glob 5g6lome 1g4lor gloria7 glori6an glorie7ne g4los glo5ste 6glov gls4 8glu 5glug g5luk 6glun gl5ung glun8ge. gl5ut g5lyd 3glyf gly4se. g2løg glø8pa 2gløs gl7øy. 5gløym 2g1m g4mete g4metr g5mé gmini6 gmo4e g3mu gmu8le. gmå6la g1n gn1ak gna5lem gna4lo g2nav gn1d gndø6 gndør5 gn4e g2nee g4nelo g6nero g6nerø gne1s4 gne8se. g4nesk g4nest g5net g6netr g2nev g4nib g4nid 5g6nik gning4 gnings5 gni4s g6ni5sk gni6st gnist9r gn5k4 g2nom gn5o6p gn7o6v gn5r gn1s gn4skr gn6sm gn4som gns4pr gn4sti gn2s1v gn5t4 gnu5re gnæ6re g2nå 1go 7goan go1ar 7goar. 2gob gobe5 go4da go5dal god5ar 2godd go4de. gods9t 2gof go9ga go5ge. go9g8r 6goi 2gok gok4se. go3le gol6fa go5lo gol4va gol6var go4lå 2gom g7o6ma 6gometris 7gomm go4n5and go9ne. go7ni go5nok gon9s 2g1op 3g6or4a5 go5ra. go7rae go7ras 2gord gor6da go1re gore8a7 2gorg g4ori gori5e6 g5orv gor8va go5rø gos3p 8g7ost 6goto got6r 4gov go8ve. go8vi. 2g3p6 1gr4 8gr. 4grab 6grac gra5ce 9grads graf5f graf5t6 gra4m5 grand3s4 gran5to grant4r gra9se. gra9set gra6sk gras3t gra5t gra8te. grati4s gra4u gra4v3ak gra7vis gravta8 2grea 4g5reds gre4en 2gref g7refe g4rega greie5n grei6ene 6g3reis 4grek 2g5rel g5rent 4grepi grep4s3 g7rese gres6sak gres6sent 6g5rest 4grett 4g5ri. grib3 4grid 4grif 4g1rig 7g6rip gri4s5o gri4s5ø gri5sete 4grit gro9ar g4ro7i grom5m g4ron gro5sk gro3ve gro6v5in 4g5rui 4g3rul grun7g 5g4rup gru7sa grus5t 2g1rut 2gryd 4g5ryg 6g5rytm grø5de. 6g5rør 4g5røv grø5ve 4grøy gr7øy. 6gråd grå6da gråk4 grå7n grå5te. 8gs1 gsa2 gs5akers g7sal. g7sale g5salg. g5salge gsam3 gs3amb gs7amn g7s8ang g3s6ank g5sard g2sas g7sast gsbø6n gs2ce gs5ef g2seg g2sei g2sek g5sekr g7sekv gse9la. gsel4s5a gsel4st g2sem gs6ende. gsen6ke. g5sens g3sent g2ser g5ser. g3seri gse4st gse4t g3sete gs3eti g9sets gs4ett gse2v gsfø2 g2si g5sider gs5is gsi2v gs4jar g3sjef g5sji g2sjo g5sjå gs4ka. g5skad gs4kal g5skall g6skam g4skan g4skapa g5skape g4skapi gs7kav g5skilt g7s4kj g7s6kjæ g3skot g5skren g7skug g6skv gsla6ga gsle6ge. gs6leri g4sluk gs4lun gsl9ut. g5slyn gs5med g9s6mert g7snel g5sog gs9ope g7s8opp g7s8oppe g5spal g3spel gs2pi gs5pik g3spil gs5pile g6s5pors g3spur gs3s4 gsse4e gs5tak g9s8tand g5stang gs4tasj g7s4tat gstatsrå7 gst6e gs5te. g5ste4e gs4tell gs5tema gste6ma. g7stemt gs4tere g5s4terf g5s4terk g5s4tern g5s4ters g5s4terv gst7evnen g5s4ti. g3s4tie g3stif g3s4tig gs5tiå g5sto. gs4tol g5stol. g7stola g5stole gs5toll gs4trap g5strau gst5rea g5strede gst5rei g5streke gs6tret gstri8de. g5s4trof g3strø g5s6trå g5stue gst5ut gstyr8ka gs4tør g5s4tå gsu2 gsu5g gs4vane gs5vik gs7væ gsy2d g7sym gsy6na gsy6t g2sø gsø6ki gs6øt gså4 2g1t g3ta gta8ka. gta8ke. gta6la. gta4le. g9t6e gte6ke. gte6ma. g3ti gti8de. g4t5if gt6re. gtråd5s6 gt7sv gt5t gtu8en. gtvek8 gty8e gt9yt 1gu 4g5u4bå gu2di guds3t gu4el 6gug g5ug6l gui4d guid5ar gu4le. 4g5ulk gul8ke. gul4la gul5o gul7ø 7gum gun4g gur2g gu4ri gur8na gur6ne. gu5rua gu3rue gu4st gu1ta 2gutb 4gutd g5ute. 6gutg g7utl 4gutn 2guts gut4tak gut4tes 4guttr 2g1v gva4ke. gva8la gvedli6 gvi8ta 6g1w 1gy g9y8a gy4da. 7gym gy3ne gyr6 gy8sa. gy6se. gy4te. gy4ve. g5æt 4g5øk gør3s 2g3øv gøy9a gøye6r gøy5n 1gå gå6as gå6en. gå4er. 4g5å4k 4gåm 4g3ån gån8da 2g1å4p 2g3åre gå2s gå3st gå9ven gå4vet h2a ha4a haba9 4hae ha2el 4hafi ha2g ha3ga ha4ga. ha3gen hai1 ha7ism ha5ka ha4ke. ha5ken ha7kera ha4ke5s ha1la ha6la. hald4s7 ha4le. ha4lev hal6lei hal6lø hal4s3k hal4so hal4s3t ha5lu hal4v5 hal5v6ar hal5v6o ha5ma ha8me. ham6nest ha5mo ham4st hams4t7r ha5na han6d5r hand7skr hand5ø ha4ne. hani1 hanis4 han2n3 han4ne han6nel han5nen han5n4es han5n4o5 han3se han4sk ha4pe ha4re. ha5rei ha4rel ha3rem ha4res har5k ha5rov har7se har5tre har4tri ha4sj hasj5e ha2sl has6p7l has5v ha3tar ha4te. hat6le h4au hau5ke. hau6st hau4t5r hav4a ha4va. ha5van5 ha4ve. ha4veg ha4vei have3s ha8v7ert ha1vi ha4vo hav4sl ha6vu6 hav1ø 4havå 2h1b hba4ne. 4hc 2he. he2a he7ans heat4r heb5n he4de. heder6s5 he2d9r hef9ta hef7tes he3ge he4ge. he2g3r he2i heia3 hei5en 3heim he3ins hei4sk heit4s he2k hek4sek hek6serin hel1a he4la. he4le. he4l5ei4 hel6lesu hel3o hel2s2 hel3sa hel4se7 helses4 hel3sk hel5sp hel5ste hel3sv hel4tes hel9ve he4mak hem5ne hem3s8k henfø5re hen5o6 hen1s2 hen5se hera9da he5ret he4ri. her5j herle9ge herli9ga 4her5n he1ro he4ro. hero9a her7p her6rei her6resi her6ret her6ska. her8s7kare her6sv her5un4 he2r3ø he4se. he2sp hes7pa hes5pel hes5pen hes9per heste5ri hes4tes he6stø het2 he4te. he5t6i het4s3a4 het4s5p het3t he6va. he6v7arm he4ve. hev9na. 2hf 2hh h5hu hi5ao hi4bak hie4n hi2et hi4f1 hiff2 hif9r hi6ge. hik7e himme6l5o hi6n7an hin4nes hins4 hins9ke hi4pl hip3p hi1ro hi2s1 hi9se. hi3sen hi5s4i 4hisk hit7o hi4t5r hit5ti hi8va. hi4ve. hiv1s hjar4 hje4 hjem7e hjorte5 hju6l7 hju7l8e 2hl h5lan 2h1m hma8n 2hn h2na hne6n hn1s h4o ho5ar. hob6 ho6da ho4de. ho5den hode3r ho5der. ho5dy hof4f3 hof4f3a4 hof4f3e4 hof5f6er hof4fi hogs6 hog6str hog7stra hoi5 ho2la ho5lag ho5lan ho4le. ho4lin hol5l ho4lom hols4 ho4lu hol7ut ho4me. ho4mo. ho4mod ho4mos ho5n6o ho4o ho8pa. ho4pe. ho8pi. ho5ra ho6ra. hor2e1 ho1ro 2hort ho4s hos5a ho5sen ho5ser ho5si5 hou2 ho1v hove5re ho4vé 2how h1p 2hr h1ra h1re hri5ne hri2s3 6h1s h5s4e 4ht h5ter htere4 h1tr ht5t hu4da hu4d3 hud5s6 hudså9re hu4er hu6et. hu4ga hu4ge. hu8ja. hu6ka. huk8ra hu4la hu4le. hu4leg hu5les hu4lev hul5v hu5ma hun6des hun2n3 hu1ru4 hus1a hu8sa. hu5s6a6r hu6s7arr husa7r8e hu4se. hu4s3ed hu2s1i hu2s5j hu2s1k hus7m hus5s4 hus1t hu8str hust9ran hus4tre hu6sty hu6s5u6 hu2sø hu4va hu4ve. hu4ves hv4 hva5le hvas5 hve2r hver3a hvi5l6i h4v4ir hvits4 hvo2 hvor5 hvor5i6 h6y hya3 hy2bl hyd4 hy2e hye5ne. hye9nes hyg5gel hy6la. hyldes7 hy4le. hyr4des hys3 hy8sa hy4se. hy2s1j hys5t hæ5g hærfø9 hær3s6 hø4e høf5 hø2g høg3ri høg7rø høk6 hø6le. hø4na hø4ne. hø5rar hø5ren hø5rer hø4res hør6sp hø2s høst7a høst5ø hø1va hø1ve hø1vi høy5a6 høy5k høy7n høy7rar høys4 høyse6te. h6å hå7a hå8le hå6na. hån8dr hånd5skr hå5nel hå6pa. hå4pe. hå4p5l hå1re hå1ri hår3s hår7u hå8va. hå4ve. ia9al i1abl ia1bo i2a3de i1adj ia5d8r ia1g2 ia2ge ia1in ia1kr i1aks iak8se. ia5ku i1al. ial1a ial5ein iale4t ial5eti ia4l5ett i2alf ial3g ia4lin i4alk ial3op ia6lov i5als. ials4t i3alt. ial1u ia2lø i1an. i2ana ia4nal ian5ald ia5nar i7andr i5a4ne. ia8nes ia7net i5ank i1anm ia2no1 i1ans ian3sa ian3sl i1ant ia7nø ia2pa i3app i1ar. iar4do iard5s4 iar4du i2are i5area ia5r6e8l i5arn. i9arns i7arska i6asi i1asm ia4sp ias3s6 i3assi i1ast i7ast. ia1t ia5te iat6r iaty6ra i1att i7auk i1av i1b2 iba4ne. ib5bo ib3bu i3bere ibe4ro ibi5er. ib7lar i2b3le ib4leg ib4le5s i5bo ibo4e ibo7n ib4r ib3st ib8t ibya7 iby9ar. 8icanarar ice5ne i1ci ick1 ick7ete i1co i5cy 2ida i5dal i3das id1av id3del iddel5u id6dep 2ide. 3ideal i2deb i6def id5e4ge i7deki i9del. id3elv 2iden i5dend iden5sv 5identif 5identit ideo3v i6derap i9de5re. i7deren i9deres iderla8ga iderle7g i7dern i5ders i6desm id6gem id4ges idi4en 1i2dio i8dj id7jer id9na 1i4dol id9ran id5reg 4i3drev 2idri id2s1 id5sam idse4 id6sel id5sim ids5l idsla6ga ids3t id4s5tu id2t1 i2d1un i2dy 3idyl i3dyr i3dø i6d7øy id7å 2ie ie1a2 i2ed i1eff ie4ge iego4 ie1i iei6d i1eie i3eig i5eini iek8l i1eks ie5l6a i2ele i5elem ie4lev i7e6lim i1els i9elt ielø8pa i8e9ma iem7b8 ie3me i1en ie7na i2end ien6dela ie8né i2e5ni ien7n ie5no i5ens ien4sk ien4s5v ien4t3r ie5nu i6eny ie4ran i4erd ie6re. ie5reg ie4r5eng i6eret i2eri ie4ril ie4ris ie4riv i2erl i6ero ie7ro. ier4ra ier4sp iers3v ier5t ie3run ier5v i2e1s i6es. ies4c ie3se ies5s ies4ti i8es6v i1et i2eta i5e4tabl i3etat ie9te ie5té iet4re ieu2 ie7ved 2if ife4s1 if2fa ifi6e ifjø8 if3le if4les iform4 if1re i8ft if4tal if4tere ifte5s ift2s i3fø 2ig i2gae ig3ann i7gark ig4art iga3ru iga7te ig3att i2gav ig3d i6geb i6gedi i6gedomm igedoms5 i2gem i3gen ige6no i5gers i4gerø i4gesp ig3e4ta ig5ett ig4ged igges4 ig4gra igg7s2 i6gh i2g1ia i5gib i4gim igion4 igje9va ig1l igl6d igli6se. ig5loa ig5neu ig5no igof6 igo5fr ig1om igo4no ig2ra ig2re i2g1rø ig3råd igrå5t igs4al ig5sel igs2j ig5s4ka ig3s4kr igs4mu ig3s4pa igst4 igs4ta ig4ste ig5stek ig7stel ig5stem igs4tra ig5s4va ig1un ig9ut i3h ihen3 iho7le. i4huk ihu9la ihu5le. i1i i5in i7is. i4is8e i6ita i1j 2ik i1k2a i2kab i5kabel i2kaf i2kak ikan9d i2kao i4kapo i5kar. i5kara ika5re i4karei i6kasa ika3sp i2ke. i2ked ik8ei i9keleg i5keli ike5lu i5ken. i4kena i5kene i9kens i3ker. i4kera i5kere. ike5ri ike4r5o i2ke1s2 ike3si i6kesk i5keso ike5su i5ket. i5kets i1ki iki9ne ik5inn iki5st i1kj ik4kaf ik6kana ik4kap ikk5arv ik4kas ik4kat ikk5att ik6k7ent ik4keru ik8kesk ik4kest ik3kjø ik4kjøp ik4kl ikk5lag ik2ko ikk5ord ik4kr ikk3re ikk5sv 4ik2ku2 ikk5und ik2kv ik6ky ik1l i5klæ i1ko i2koa i9koar i2kob i4kod iko5de i2ko3f i4kog i4koh i2kok iko5na. i2koo i5k6ord i4kore i2kov ik1r ik4rak ik5rem ik5robe ik3ros ik2ry ik2sa ik4sek iksmå8la ik7sot ik5spel iks5ti iks5to ik8stu ik4tav ik4teg ik2t1r iktsla8ga i1ku iku6le. i6k7u6t ik1v ik4vin i1ky i3kø i3kå ikå8pa i1la il5adr il7af i2l3ak il3al i4lana il6and i4lark il3art il5ass ilas5t6 ila5t il5av il4dak il4deko il4dete il7dj ild3re ildsfa9re ild3s4t ilea9r ile8are i3le7e i2lef ile4ge. i4l3egn i2l1ei i6leig i2lek i2lel i4leno i4lero ile1s i4lese i4le5sk i4lest ile6tri ilet5te ile4tu i1lé ilfø5re il5ge il1gl i4lid ili5ers ili9ga i5lik i2l1im i4l3ind i7line i4lins i4l3i4r ili5s6tik il3ja. il1je il5jese il1jo il1ju ilke3 il5ker il4kes ilk4o6s il5ku il4lab il6lam illan8da il6lap il9lau il4lee illei9e il6l7ender il6lesk il4lev illi9ga il4lo5m ill3s2 ills5kå illæ4 illæ9re. il4m5est ilm5e4v il4mi ilm5s i1loe i9lolo i4lom il5omv i5lon il3opp i4l1o4r i5loso ilot3u i4love ilo1w ilret4 ilset8je il3sl ilsla7 ilsle7ge il6s7li ils4mu ils2p ils2t il5str il7su il3s2v ilsva9ra ilsva5re ilta9la ilt5rett il6t7å ilu4h i5luk il7ul8 il3un i5lur i9lus il1ut il5v6 ilve8d ilve4r i1ly il1å8 ilår6 8im. 4ima i2mad i4maen i2mag i6m5akk i4mako imal8n i2mam i9man i2map i5mar. ima5s i4matr i8mb2 i4mee i2me1g i2mek i6melu im5enh im8et i9met. i4meta i4meti i6mey i8mé imi9la imini6 i7mj im4lev im8l9u im5m i6mog imo9l im5ord imor8da im7o6v imp2 5imperi imp4l 1impo imp9s impse8 1impu im4ref im4rek im4res im9se ims4k5l ims3kr im5s4me im1s4t im6sti imta8la 4imu i3mø2 2in. 6ina i4nag in5agg i5nakk ina4let i4na2m in3ame in2an i9nane in5ann i2nap in5app i5nar. i5nars i4nask i4nasp i4n5ass ina4t5ak ina7t8r i6nau in7auk in5avl in5avr ince2 in7der 6indig in4dog ind9ra in3dru indr5ø ind5sk ind3sp ind5s4t 5industr ind7å 4ine ine8are i2ned inedy6 in5egg in5eid in3eie i6nele ine4li in7eng ine8pa ine8pe. i7nere. i5neren i9neres ine4rik i7nern i5nert i5nes. i4nesk ines8ka ines8ke. ines4st ine5s4ti i4nesø i2nev 8iné 3infek in4fos in4fot infu9 4infy in4g5ald in4gav in5gebj in6gem 5ingeni in5geri in4geru in3gev ing5jen in4goa in4gos in2gr ing5rep ing7ris ing2s ings5om ingst8 ings5v 6ingu in4g5un in2g5ø i7nia ini9ar. i2nib i5nie i4nif i2nig i4nil ini7m i4ninn i2nip i4nisa ini3se i4nises 5initia i4nito 5injek 2ink in5kel in4kero in4k3la in4kok in5l inla8ga 2inn. in4nal in4nem in4nerø in4nesi innes6t 4innet in6n7ette innfa9s 1inng 5innhal 3innho 2inni4 in4ni. in4n5om in5n6ova inn1s4 6inns. 3innsa inn5se inn9sen inn9ste inn7sve 1innt in4n5u4 4innæ in2nø4 2ino ino5a i5noar i4nod inok6 in7oks in7org in1s 4ins. 8insa in9sa. in7sal in5sar in5se. in4sek in3sen inseri8e9ne in3si insis5 6insj in4sja in3sje 4insk in9s8kas in5skat inske4t ins4ki in3skj ins5kjøt ins6kor ins4k3v ins6kø insle7g ins8lega in3slo in3s2lø in5s4ma in3sop 1insp in4spa in5s4pl ins4po 5instal in8s5te. ins5ten. ins9tens 3in3s4ti in4stin 4in3s6to in5stra inst5rel 5instru in6stå in7sul in2sv 6in3sy 8int. 2in3ta inta8la 4inte. 5in7teg in8t7ege in5ter int5ess in5te4t5 4in5ti inti5me int2r intran4 int4rer in5tres 6inu inu6i i8n9ul8 in7ut. in9u8te 1inv 6invev iny4i iny4t 6inø in7øk i7nøt in3øv 4io io1a4 i2ob io8d8 io4dere i1off io5gn io1i i1oks iol4 io3le iol7jen io3mu io4nans io4narr io6n5erst ion3g4 io4nin io4nu io1pl i1opp io5ra. ior8da io1re io4rie io4r5in iorla8ga iosk3v io1st iota6le. io3t4e io4tra i5pap ipa4ti. i4pee ipela9 i7pe6p i1pi ipi1e ipi9ne i4p5ings i1pl i2ple ip4peli ippel7s6 ipp6lan ipplæ8re. ip2pr ipp4s3t ippsy8na ipp4sø ip7pun i1pr i6pra ip5ru ipru8te. ips1a ipse4l ipsfø5 ip2si ip2s1k ipsle6ge. ips1t ip6tar i5py7 i3pø 2ir i1ra i9r6and ir5ark i9rast ira6tr ir5de ird5s i1re ir3eie ir6ek i3repo i3rer ire6r5a ire7st i3ret i8reto ir7g i1ri iri4a iri8ka. ir3ind ir3inn ir5inst iri9t ir5ka. ir4kat ir5ker. irke3s6 ir4kest ir4kle ir5kv irk5ø ir4mag ir4mal ir4mast ir9mé i5roa i1roe i4roi i1rol ir5opp iro1s ir3re ir7sko irs2p ir3s4t irt6 ir3ta irti6g5r i1ru ir5u4k iru8m iru7sa. i1rø i1rå ir7å6l i1sa i4saks i4sanb i4s3ang is3ann i4s3ans is3ant i7sas is5aud 3isbry is6cen isch5 is3co i5scr i2sed i4seel i4seen ise5ern i2s2e3g4 i2sei is3eie is5eig ise5is i2sek i3sekt i4sekte i6s7eld is4e5li i2sem ise5ne i4seno isensi6 i5ser. i5sers i2ses is5ess i4sete iset8je i2seu 8isé isha7ne 3ishav is4h5in ishø9ve isi6ene is5ild i4s3ind isis5t is7jun is9ka. is3kal is3kar isk9art. isk5arte i8ske is5ke. is8kee is4kel isk5els iske5s4 is3kje i3skjo iskla8ga is6k5le isk3lo isko5g is7kogr is3kop is3kot is1kr is6k5rin is1ku is4kul i5skula is1kv is4kvi is1l i6slu isl7ut isl9øy. i5smak is4med ismo5e i6smus is5ne is5nu 1isol 6isold 5isomo is5omr iso3pa iso5pe iso7pr 3isot is1ov is1p is4pan is5pane. is6pis is7pru is4ses is5si issis5 is6s7kj is4sko is7skr is5sky is4skå is5sok is7sto is6sve is5svo is9s4ær is4søk i5stab ista9le is5tane is5tap i4s5tar ist5avb ist7avi i2ste is5te. is4tek ist5ekt istel5l iste6ma. ist6en is5ten. is5tene is5ter. is5tern is6terø is6té is4tik is5tilb is5tis is3tok is3tol i2str i8s8tre. i4st5ren i5strer i6strer. i4stres i6stret is3try is3tus 6isu is5uf is5ul is1un is1v is4vak is7w isy8na isy5r i7s8ys is5yt i2s1øk i4søy is7åk is3år i1ta ita4l3a ita6l5ers ita4lo ita4ly i6tang itan7s6v itau4 i4tav i4tec i2teg ite8ke. i7teky i6t7elg i4teni i2teo ite3re i4tero iter6s5 i4te5ru i2te1s ite6se. itet6s5 i1té it2i iti6er. i4ties i2tif i4tikam i4ti3kv iti5me i2tio i2tip iti3r i4tisa i4tisen i4tisi i4tisj i4tisko i4ti3sp i4tist iti5str i2tiu itiv4 itivs5 it7jaran it7jer it7ji itma6le. itnes4s i1to ito9a i4tom it5ord ito4s itostra6 ito8v i1tr i4tra. i6trae it3rel it3ren it5rim itri8ma it3rin i5tris it7ro6s it1sa it4s3ei it3ser it6ses it5sku itsla8ga it1sn it6sti it3sun it4tag it6tak it4tal itta9la it6tann it6tap it4t5at it5ted itte4l5o it4tenk itte5s4 itt5ett it4tid it4til it4tj itt1o it6tof it7ton it4tr itt5skr itt4sø it4ty it7tys i1tu itu5e itær1 i1tø i5tå9 i1u iu6a iu2b i5u6l i5um. ium4f5ar iu2m1i ium5m iu4mo i6umse i4um5s4t i4umsu iu2n iu8p i2ur iu5se 4i1va i4vad i6vaj i4v3aks i5val iva6la. i4vana i4v5ank i4varb ivar5s6 i4v5ass ivat3t i1ve i2veg ive6ge iv5eg6n i4vei iv7eig i2vek ive4ra ive5ras iver5d i6veret i4vesk i4vesti i6vesv i6vetø i2vev i1vé i1vi iv5ins iv5is. iv5isb ivle6ge. iv3n i1vo iv7om iv3r iv4sal iv2si iv2sk iv2sl iv2sn iv4so ivs5v i2v3un i5v6y ivyr8ke. i9væ iv7åpn i1wa iwi5 i5wie6 i5y iyr8ke. i5za. i7zas i4ze i1zo i1ø i1ø4k i1ør. iør5i iør5s i4øs iø3se i1øy i1å4 iårs7l iåt4te. ja1ak ja9ar ja4da 1jae ja7en 5jag. ja4ga. ja7gar ja4ge. jag6r ja4ha ja4hv ja4j jak4kel jak7kele jak4ko ja8k7ok jakk5s4 ja1k8r ja8kre jaktel jakts8 ja7ku ja3lo ja1lu jam7b 6jambi jamhø8ve. 5jamm jams2 jan4gr j5anl ja6ra. ja6r5ap ja9rek jarn3s4 jar5ta jar5te. jar5tet. jar7ti 6jarø ja6rå ja7se ja8ski ja5sti ja5ta jau4ere ja9vi 1jaz j1b 2jd j2e 2je1a2 je5ak 2jeb jeb9b je4deb 6je4dek 4jedr je4ep1 6jeev 2jef je4f3et je2fj jef5lag je4f3re jef4sa jef6s5i jef3t4r je5ge jeg5ge 6jegl jeg6les 4jego 4jegr 4jegy 2jeh je1i je5i8s 4jej 2jeka jek6keru 4jekl je4kli 2jeko jekt3a jek4tan jek6tes jekt5ev jek4t5in jek4t3r jekts4t 4jekø 2jel je6legr jelei7er je7lele je4les jel7ge jel6lag jell5ang jel5len jel4lo jelt3 jel4tr jel9ut jel7va. 2jem je4mia je4mit jemp6 jem5pl jem5se jem4sti 2je7na jen1d jendis5 4jendr je3ne. je7ne8s 4jenet jen5ged jen7g8la jeng5s4 2jeni jen3k 4jenl 4jeno 4jenu je2n1y4 4jenæ 2je5o4 2jep je3raf je4r5ant jer4dep jerd6s je3r6e 4jered 6jereg 6jerei 6jerenn je5rik je6rim je6rinæ jer4kes jer6k5l jer4kv jerle7 jer6mu jer6n5as jern5sl je6ron jer4sp jert5s 4je1ru 6jerå 5jesf 5jesh jes4kil 2je3sp jes4tea je6stim je3str 5jesut je5sve je4t3ag jeta6ka je9tar. je7tara je9tare je4t3ru jets2 jet4t5an jet6term jett3o jett5s6 je4t3v jety8e 2jeu6 4jev6a je7vark je6vas 4jeve jevi4s jev7na. jev7ne 6jeø j1f 4jg j1h 4ji. jib5b ji7e6 6jik 2j3inf ji7ro ji6sj 4jiø 2j1k j4kap 6j1l 6j1m 6j1n 6jn. j5ni j2o 1job 5joc jo4da. jo6dat jo6dis jo4fl jojo5 jok9ker jokk9o8 jol5t6 j3omr jon2 jo5ne jon7n jons1 jons5a jonse4 jons3p jons5t jon6sti jon4str jonsu4 4jop jo5ra jor6dek jor6d7erv jor6d7is. jor4d3o jord3r jord5s jords4l jor6du jo1re jo4rie jort6a jor5tet jo3r4u 2jos jo3se jo4ses jo5stei 1jou jour5 j1p 4j1r 2j3s2 j1t ju8are 1jub jubi3 ju9bo juda8s7 ju3de ju2do ju7doe jue7ni ju4e5re jue9s jug9le 5jugo 4ju2k ju3ka ju3ke. ju3ken juk9sar ju2l ju3la. ju5lar ju5las ju8l9ei ju4li. ju6lid ju4lik jul7inn jull6 1jung jun7ge j6u6ni 8jup jup7s ju6p5å6 ju4ra ju7ras 3juris ju9ro ju3ru 5jury 1jus ju5so5 ju1ta jut5o ju6va. ju6vak ju1å j5v jy1 jy8de. jy2p3 jæ5le. jæ3ra. jæ9ran jæ9res. jæ7te. j2ø 1jø. 1jøa. jø5b4 1jøe 2jøef 4jøeg 6jøei 2jøek 4jøend 4jøeng 4jøeta jø1f jø3gr jø9kj 4jøl jø4les jøl6ver jø5me jøn5ne jø5pa jør4kel jør4sp jørs5v jør4tel jø3ru jør7ut jø1rø jø4ses jøst2 jø5ta jø6t7av jø3te. jøte4t jøt5eta jø1tr jøtte4 4jø1v jø4vel 2jå jå5ar. jå9ge. jå6la. jå4le. jå7les jå5let 1ka. 2kaa 5kaa. 5ka4an4 k3aas ka3at 6kabes ka7bo 4ka1br 4kaby ka3da 6kadale ka5del ka6del. ka4deri 4kadg kadi7e 2kadr 5kadu 4kady 3kaen ka3fe kaf5fere 2kafo ka9fr 2kaft kaf5ta 6kafø 2kag k5a4gi kag2r 2kah ka5isk ka5ism 6kajo ka4ka. ka4ke. ka4ked ka4kel ka4kes ka4ki. ka4kis 6k5aksj 4kakt ka3ku ka3lam ka3lan ka6lant ka3las kald5s 5kaldt kal2e 3kalen ka5lev 5kalis k6al8k5 kal7k6e 5kalky kal7la kal6lero kall4s ka1lo kal3p kal7s6v kal4ves 1kam ka6ma. ka8me. 4kameri 4kammel kam4p3i kam4pr 7kamu 1kana ka8na. 4kanda kan6da. 5k6ande. 1kane ka5ner kan4i ka5nin 2k1anl 4k1anm k3anno 5kano ka4no. ka8nom 4kansa 6kansi 3kansl 1kant kan6t7end kan6t9r 2kap. 5kapad ka4pak 3kapas ka5pe 5kapell 4kapen 3kapit 1kapp kap3re kap4s3t 1kar. 1kara 4karab 4karam karan5 ka3rav 1karb 4karbei 4karea ka6rek ka5rel 1karf 5karg ka4ri. ka6rid 6k3arki 6k5arkt 1karm kar3n ka3rol kar3om kar5pes karp3s 3karri 7karsj kars4t 1kart kar5ti 5karu 4karå 1kas 7kas. ka5se4i ka3sek kas5ev kas2ju 6kasjø ka4sk kas3ka kasko5 6kasp ka4spi kass6 kas6sad kas4sak 4k3assi kas4so ka4st 8kas5to ka6su8s7 kas2t3r 1ka7t6a ka8tak8 ka3ted 3kateg ka3tet ka1to ka4t5op 4ka1t4r kat7s kat5ta kat6tak kat4tel kat6term katte5s kat4til kat4tri ka4t5y k7au4r 2kav ka7ves k9avis kav8l9u 9kay 6k1b4 2kc k5ce kcen4 2k1d k5d6v 1ke 2ke1a8 ke9al 2keb 4kebr 4kebuk 4kec ked4 ke5da 4kedag 4kedal 5kedan. 9kedant ke5de 6kedei 4kedem 4kedes 7kedes. 2kedi 2ke5dr ked8sk kedu6 4kedy 2kedø 2keeg 2keek 2keel ke4ep ke7ern 2keev 4kef k3eff k5eft 2ke1g k3egg keg8ga 5kegladh ke5h 3kehet 4kehj 2kei k3ei2d k1eig ke5il ke1im k6e1in keis2 2kej 2kek kek2l ke3kn k1eks k5ek4t k6el. 2kela ke3l4ak 5kelal ke6lans ke6lat kel5eier kel5eig kel7eik kelei8ke. 6keleis kel3e4l 4k5elem 4keleng 4ke5lep 4keles 7k6elet 4kelev keli8e8 keli9en 3kelig 4kelign 4kelinj kel5int 4kelis ke4lise 5kelit 4keliv kel5l 4kelof 6kelov. 4kelove kels4 kels7kar kel5sl kel5sp kel5st kel3sv kelsva9 kel2t kelt3e 6kelua 4kelue kel9uka kel5uke ke4l3ur 6keluv kel5v 2kely 2kelæ 2kelø kelø8pa. 6ke5l4å kelå7re 2kem ke4mit 5kena. 6kenam ken6ap ke4nas 5kenatts ken5de 6k5en6den 6k5en4der 4kend5r ke3ne 4keneb 4kenek 4kenel 4kenem 6kenett 4kenev 3kenf ke4ni 5k6enh 4ke5niv ken3k ken7n kenne4l3 ke4nom ken1s2 4k5ense kens6t ken7te ken5t6r 4k3entu 6ke3ny 6kenø 2keo ke7of ke3on 4kep 5kepi. 9kepia 7kepie 6kepl kera7l 4keram ke4ran ker5ant 6kerau 4kered 4kereg kerei4d 4kereir 6kereis 4kerek 4ke5rem kere6n 6kerene ke6r5eng 4kerenn 4kerep ke4r5ert ke3res 4keress 4kerest 4keresu 4keret 5keret. 5kereta 7kerets 3keri ke4rif 6kerik. 4kerike 6kerikt ke4rim ke4rine 6keringi 6keringj ke4rinæ ke4ris 8kerist. 8kerista 6keriste 3kerm 7kerop 5keror 4ke3ros kero6se. ke3rot k4ert ker5to ker3t4v ker3un 4kerus keru6se. kerø6re. 8ker8øya 6ker6øye 2kerå 5kes. 4kesam 9kesam. 7kesdale 5kese. k5esel ke5sil 4kesit 2kesj k9es8ka. 4k5eske kes8ke. 4keski 4keskj 6keskå kesle6ge. kes5ped 5kespot 5ke4spu 5kest. 4ke3sta 5keste. 4ke5sted 4ke5stei kes6tem 4ke5s4ten ke3sto 4kestri 4ke5stru 4kestu 4kestø ke4s5un kes1v 2kesy kes1å 2keta keta6ka keta6le. 5ketals k6etar ke3te 5kete. 4ketek 7keth 2keti 2ketj 2keto 2ket2r kets2 ket6t7enh ket8tes 2ketu 2kety kety6e 4ketæ ketøy6s5 2ketå 2keu2 ke5ur 2kev kev2a keva8ne. 5kevas 3kevel kevi6sa. k1evj kev6ja kev4je. k3evn kev6ne. ke3vr kevæ8ra ke2yt 6keæ 2keø 2keå 1ké4 két5 2k1f k5fi 4k5g2 k3ge k5gh kgu4 4k1h kh5ak k4har khe4o khjul8s kh6m ki3a2r k3ideo 4kidol ki3dr k4ie2 kie5re ki6el ki3er. 2kif ki5g4 ki6ka. kikk8s9 ki1k8l ki3k2r kik4s ki8la. 3kilde 6kildr ki4le. ki5li 4kilj kil9ja kil6le5st ki7loa ki4log ki3los ki4lov 2kilt ki7lå ki8ma. ki4me. 5kimo5 ki4mol 2k1imp kin9and ki4nark ki5nas. 6kind ki5ne ki6ne. 2kinf 1king king5and kin3ge kin5ing 2kinn kinnsi8da kinnsi8de. kinn4sp ki2no kin5ov 2kins kinsi6de. 2kint kinti8me. ki6nu 2kinv kio4 4kiol 7kios 2kip ki5pe ki4p5l kip5pe kip2s3 1kir ki5re ki5ri 4kirs ki3se ki5sko ki3smu ki1s2p ki5stav ki5str ki6ten ki7ti 5kito ki4ton 4kiu k6iv ki4vek ki4v5enh ki6vi. kiv3s kj2 3k8jan kjap5pe 6k7jarn kje7fj kje7f6r 4kjegg 3kjeld kjel7leg 5kjemas 3kjemp 6kjenk kje9ny kje1s kje6t5r kjet5t 6kjor k8juk kju5le. kju5len kju9r 3kjærl k5jødi 1kjøp 3kjøri kjø4tr 8kk k1ka k2kab kk3aft k2k1ak k2k3al k2kam k4kanb kk5and k8kand. k6kanden k4k5ang k4kann k4kao k4karb k6karg k4k7art kkar6ta. k5kast k6kasu k6katt k2k1au kk1av k6kedo k4kedu k2kee k2keh kk1ei k5kel. kke6lei kk5e4lev kkel3t4 kkelu4 kke4luk kkel5un kke6nan k5ker. k4kerei k4kerel k6kerent k4kerig k4kerit kke5r6und k4kesa k5kesau k4kese k4kesi kke3s4l k4kesp k6kestad k4kete k5ketet k4ketø k4k9g2 k1ki kk3ind kk3inf kk9inn kk3ins kk3int k2kir k1kja kkjek8 kk5jent k4k5jern kkje7t kk5ju kk5k kkla4g kk3lan kk8lar kk7lau kk1lo kk1ly kk3læ k4kn kk5ne kk5ny kk6s5v k1kod k1koe k4k1of kko6lig kk5oml kk7oms kk9omt k6koo kk1op kko7s k4kosi k6kosk k4kost kk3ove kk5p k4kra kk5ram kk3rap kk3rea kk5rei kk3ren kk3res kkri6k kk3ro kkro8e kkro4s kk3ru kk4rus kk7rø kk7rå k8k7s kks6al kk4sar kk5sed kk3s4ei kk4sin kk1sk kks4kj kks4l kk3sla kk7sle kk5sli kk3spe kk1s2t kks5tak kks7tep kkst4r kk8s7va kk5s4å7 kk7t8 kk5uk k4kuni k2k1u6t kk1v k2kvo k1ky6 kkyl4 kk5yr kk7yt k2k1ø k8køl kkø6r kkøy6 kk1å2 kl4 6kl. 4kla. 4k5lagt 2klak kla9ke. kla4mel 3k2las k7lati kla4tr kleby7t 3k4ledd kle4deb kle4des 2kleg klei9e k7leik k4leiv k2lem 5k6lem. 7k4leno k6lerik kles7j kle5sno kle4sp kle5sti kles7s8 2klet 8klia 4klie. 4klig 1k2lim2 3k4lini k5linj 1klip 4klit klon7a8l 1klos 2klov k3lukt 4klun klun5t k5lyd 6k7lyf 3k4lyng klyse7te k2læ klæ5res klø7na k6lør 6kløs klø9va klø5ve 6k1lån klå5re 2k3m kmann6 kmål2 2k1n2 3k2nap kna5t4re kne4b3l k4nedi 5k2nee kne8se. k4nest kn5f knas8t7a8 3k4nip knippe6 kni2t3 7k6niv kno7g kno6kl 5knop kno9ta kno5te 3k2nu 4k3num 3k2ny kny4s k2nø knø9le kn3øy 9koa. 4ko1ak 9koane ko7ar ko2b3 ko3bo 4ko3br ko5da 4kodd ko4de. 3kodek 5koden 2kodø ko3e 3koef 4koek 4koel 4koes 4koev ko4g5eng kog9ger kog3l ko4gre kogst6 ko4gu ko6gå 2koi koi4e5ne ko7i6k ko1in 2koj ko8ja. ko4ka. ko4kab ko4ke. ko6kel ko1ki kokk6o k3okku 4kok4l 4koko 2koku kolba5 kol8d7a 2kole ko4leg ko4lei ko6lel ko4let ko4leu 3kolle ko5lo. kol5p 4koly 2kolå 1kom ko4ma. 4komaf ko4me. 6komg ko4mi. 4komil 4komisb ko4mise 2komr 4komse kom3sl kom5so kom4st 4kom5t 4komu 4komå k6on ko4na. kon3d kon6dr kone5l6å 4koniv kon3s2 kon6s7v kon6ton ko4nu 1ko1o 4koom ko5pa ko5pers 4kopet ko4pi. ko4pip ko4p9l 4kopo kop5per 2kopr ko1ra ko4ra. kor6da. kor4d3o kord5s4ø kor4du ko1r6e 6koref 4ko7rei9 ko5rem ko7ret ko3ri ko6rik 4korm ko5rol 6korpa 6korpe 1kor3r kor4sal kor6s5inn kor4s5l kor6str kor4sv kor5tes kor6top kor4t5r kort5s4 ko5ru ko6rume 1kos 2kosa ko6sa. ko4sed ko4sek 5kosele ko5sen ko4ses ko9si kosi9d ko2sk ko1sl 4kosmu 2koso 2ko1s2p ko6sta kost7as kos6t5ers kost5j ko8s8t7ø8 4kosø kotes7 ko5t4i 4kotil 4kotr ko6tre kot2s kots5tr kot4ti kott4s kotts5t 4koty 2kou4 kout3 kou7ta ko1va kover7e 4kovr 1kov4s3 4koø 4koå 6k1p kr6 k3rad 1k4raf 5krag 3krakk krani6e7n 6krank 3krans 4krap kra9se 7k8ra4sj kras5s kra4to kra4u 1krav 4kred. 3kredi 4k1reg kregi3 4krei krei9e krei5s 6krek kre4kli 2krel k5rela kre8m7o 4k3renn 4krent 6kreo k5repr 5kreps 5kresj 4k3ress kreta9 6k7retn k4rets k3rett 2krib 4krif 7k6rig krig6s5 kri9ga 4krik kri5ke kri4kj krik6ka 1krim kri4me 3k6rins krin6s7t kri2p 1k2ris 7krisene k2rit 3krite 6kriv k2ro kro5b4 kro5de k3rofo k4rofor krok7k k6roni k5ronl kro4nom k4rop krop9n kropp4 k4rost kro9t8e kroten9 kro3v kru3i4 krum3 kru5sa krutt5i kru3tr 2k5ryg kry7pa kry5pe kry4pi 3krys krø5ke 6k5rør krø3v 4kråd krå8da kråe6 5kråk krå5le krå9m krå7ne k1sa k3sa. k2s3ad ks3alt ksa5me k3sane k4sans k4s3ant k3sar. k7sara k6s3ark k7sas k1sc k2sed k2see kse6ge k2s1ei k5sekt k5sela kse5lev ksen5to k4serf ks3erk k5serol k4sesa k4ses6k k4se3sm k5seso kses4p k5sess kses6sel kses8serie kses4sp kses4st kse6te. ksfø4 k5sia k2sif ksi5ko ks3ind k3sing ksi7ni ks3inn k4s3ins k7sio ksi3st k4siti 6ksj ks9kab k6s3kal k6skio ks1kj ks5kl ksko7na ksko5ne ks1kr ksk8u ks9ku. ks7kua ks8kut ks1k6v ks1l ksla8ga. ks5lo k7s6lu k8s7lug k8s5løs kslø8va kslø8ve. k5s4mak ks4mel k8smid ksmå k5s4no k7s8nø k1so k6s7oa k6s5o6d k4sog k4somb k2s1or k2sot ks1ov k3spal ks3pek ks5pio ks3pir kspor6t5r 6k6s5pors ks1pr k8sr k3spy k8s7s ks3sm k5stad k4stak ks3tal ks5tant k7s8vak ks6tav kste4da ks4teg k3stei k4stek kst3ev kstev6ne. ks4til k4stin ks1tj ks1tr kst6ran ks4t5rek k6stren k6strer ks4tri ks4tro ks9tum k5stus ks3tyv k2stå k1su k6sun k8suni ks1v k9s8vake ksva8ne. ks5veg k7s6vert k5s4vin k8svis ks5w ksy8na ksy8s7m ks5ær ksø4ke. k6s3øl ks1å k3så. k4såp ksår4 ksåt4 6k1t k5ta. kta7f6 k4tag kta6ka k4t3aks k4takt kta6la. k4t3ana kta9na. kt3anl k4t3ann k4tanv kt3app k9tar. k4t3arr k4t3art k6tass k5tast k6t7atl kt5avh kt5avk k6t3avl k3ted k4teda k6tee k4tefø kt5e4ge k2te5i k6teka kte5le k6t5elsk kt5e4lit ktem8 kt7emn k4t3enh k9ter. kterie5n kterie7ns kter5s6 k7tes. k6tesa k6tese kt5eske ktes6ke. kt5esti k4t5e4ta k4tete kt5evn ktev6ne. k5tib k3til k4t3ins k5tir ktis5t kt7i6te kti6v7end k2tja kt7ju kto9a kt5off k6togram k4toli k2tom kt5omf k2t1op k9tor. k7tora kt5ord. k5tore ktori9e8 ktor7s kt1ov kt3ral k2t1re kt2ro ktro5s k2t1ru kt4s5amb kts5ar kt5sek kt7sem kt4s5er kt6sin kts5kra kt5sku kts4kv ktsle6ge. kt6sok kt4spa kt5spre kt4sta kts6ton kts5top kt4stå kt3t8 ktu9er. k4tuk kt7und k2t1ut kt8yo kt7yrk ktyr8ke. ktør7 ktør8e k6t5øs kt1øv k2t3år ku2a ku9an ku4be. ku3bj 2kud ku4dal ku4er. kue4r5a ku4et 6kuf ku4f3l 6kug k5u4gr ku7is kuit6 ku7k8l 6kuldi kuld3r ku4led ku4leg ku6lei ku4lem ku5len ku4let ku4lev ku5li ku6li. 3kull 1kult ku4man kumen6tal ku6mi kum2s 3kumu 1kun kund5s6l 2k1ung kun4ge. k6unn ku4o 1kup ku4pe. kup4pl ku7ra ku4rek ku8r7o ku7r6op kuro8pa 1kurs kur6sk kur4sp kur4s3t kurs3v kur3t ku5ru6 kuru9ken kuru7ker 1kurv kur4v3i 1kus 5kus. ku7sa. kus5a6k kus5ar 5kuse ku4s5el ku4ska ku7s6pe kus3t 6k1ut. ku1ta 4ku5te. ku5to ku6t7r 2kuts 1kuu8 kuøy6 kv2 kva8ke k4vali k6vard kvari6e5n 5k6vart kva9se kve3d2 kve7e kve8g7r k4veik k6veil 7k8vein kvei9se 1k4vel kve5la 4k3verd 5kvern kverns8 2kves kves5t 7k6via 4kvid 3k4vie kvi4ene kvi5er kvi7la 3kvinn kvi5se 7kvist 2kviv 1kvo k1vog 6kvok k4vot k2vu 4k3væ k1vå k7we k5wu ky5a ky6el 4kyf kyf5le 2kyg ky4leg 2k3yns kyn6skjer ky2p1 ky4p5r 1kyr kyrie5ne kyr8ke. ky8sa 4kyse ky6se. kyse8te. ky3skr kys6sk 1ky4st kyst3a kys4tel 2kyt ky6ta. kyte3s k1æt3 1kø. kø2ar 1køe kø4en. kø2er 6k1øk kø4le k1øn køn6skjer k3ørr køs4 kø5se køy7ar. k7øyd køy4e5ne 1k6øyr 4kåke kå3le kån8da kå5ne kå4pe. kå7pen kå9ras kå1re kå1ri kå2t5 k5åt6t 1la. 2laa la1b 4laba la6bl 1labo 2l3abon 4laby 4lad. l6ade la4dem 4ladg ladi9e8 2ladm 2ladr lad3s4 1lae 2laei 4laent 4laep 2laf la3fl 4lagg lagi4 6lagne la2go8 lag5om la2g1r lag5san lag4sj 2laha 2la1in la5ka la4ke. 4lakj l2akk la2kr 8l7aksel l7aksj l5aksl 4lakt lakterie6 la5kø 2lal l1alk la5mab 4lamb la4mes la4met la3mo l8a8mu 4l3anal lan2c lan6das lan6deb land3r l6a3ne 3lane. 4lanet lan6gel lan4gem lan6germ lan4gr lang3s4 lang4s5e lan6g5ø6 4lanl 4lann l3anno la4nor 6l5ansi lan8s7p lan5ti 4lanv l3anvi 2lao la6pal la7pi la8pl lap8p7r8 lapp7s8 lap5sa lap5sen lap5s4i 1l8ar. 6l7arab 2larb l8are. 4l7area la9red la5rem l6aren. 4larena lare6t la6r7eta 5larf la7ria lariar lari6e7n 4l3arki l2arm lar3n 6l7arr 4lart lar6ta. lar7vet la6sc la5se lasi9e la2sk 7laskj 4lasm la5smi 4la4sp las6sak las6sam las6sat las6sel l6ast 4lastr las3v la1ta lat5ang 6latau la4teg lat6ek la4teno late5s4 la5ti la6ti. 4latm la1to lat7ra. lat9ran lat5rar lat4t5is lat4tra latt6u lau7a 2laud laue6 4laun 4laur lau7se lau6st 2laut 2lav la4v5al la4vel l5avh lav5inn 6lavs 7lavå 1law la6y5 6l1b2 lba3de lba4k lba5ke. lba4ne. l5be lbe9na lbe8re. l4boa l6buh lby4e l5bå 2l1c l4ce. 6ld l7da. ld5aks ld5akt l9dand lda6t5o lda6t5y l2deb l5den l2de5o l2dep l3der l7der. lder7a l4derek l6derik l6derklæ lderle9g lder5s6te lder6s5ti l4desh l6destr l9dé ldis7k ldo9a l8d5oks l2dol l4dore ld5ovn l3drak ld3ran ld5ras l6dre. ld7regn ld5rer. l8dres. ld1ri l7dry ld1rø ldse8 ld4sek ld4sel ld4ses lds1k ld4ska lds4kj ldsla8ga lds6leg lds4let ld4s9m ld5s4om lds3tr ld6tus ldø2 ldø5d ldø5l ld7øy 1le 2lea le7ag le3ak le1al lea5la 3leas le5at 2leb le4bem le6bosta 5lebæk lec4 2leda 5ledar led4dø 4ledeb le4dem 6ledep le5der le3des 2ledo 3ledop 5ledov le4dro le5dry led1s2 6ledu 4ledy 2ledø 4le3då 2lee 6leei 6lefa lefa6ne. 4l1eff 2lefi 4lefl 4lefor 4lefot 2lefr l1eft 6lefy 4lefø 6legap 5legas 3lege le4ged le9gen le4gera le9geran le9geras le4gero le4geta le4gev 7leggi le3gi 6legif 4legj 2le1g2l le4gol 4legre leg3s4 2legu 2legå 2leh 6lehal 6lehamr 6lehan 6lehau 6lehave le3ido lei8e l6eie. lei5ende lei4e5ne lei9er l6ei8et leig6d lei4ger lei7ger. lei4get leig4h5 leig6na leig8ne 2lein le3int lei6r7u leis7t l6eit 2lej 2leka le4ka. 6lekan lek6e le3ki 2lekj lekk7s 2lek2l 2lekn lek4na 2leko 2lekr 4l3ekso 4leksp lekt5ord lekt4s5t 2leku 2lekv 4lekø 4lekå 2le3la 8l9eld 2lele l3elem 4l5elg 5lelig 2lelo 3lels 4l3elsk le1lu 4leluk l5elv 2lely 4lelæ 2lelø lelø6pa 4lema le3me le8me. 4lemet 8lemetrisk 8l9emn lem8na 2lemo lem9ped lem5pes 3lemr lem4si lem4s5ø 2lemt lem5ti 2lemu 6lemy 4lemø 2lemå le4na. le4nal 4lenav lend8a len9dan 6lenden l6endre 4lendri 4lened 4lenem 4lenev l4engd len4g5r leng9u le5ni 4leniv lensa4 len4s5ak 4lensem len5ses len4sta len4tam len4tr len8t9ra 2lenø 4lenå 2leo 5leol 2lep le5pa le4pel le8p9enden le2p3j le8pla. le4ple 4lepo 4leraba 4leram le2r3amb ler5d l8ere le9re. 6lerea 4leref 4lereg 4le9r8ei 4lerek le5res 4lereso 4leresu 4leret 4lerev 9leri. 7lerie le6riei le7rina le4riv 4l5ernæ le5ro. 4lerom 6lerope le3ros 4le3rot 7lers. lers4p ler7te le1ru 4lerus leru8se. 2lery 5leryr 2lerø 2lerå 5l6es. le4sab 4lesam 7lesar 4lesau 2lesc le5sed le4seg 4lesek le5sen le3ser 4leset 4lesho le6si. 4lesig le7sing les5inn 4lesit 4lesju le7skap le4s3kj 6leskol le6sk9u8t 4lesla 2lesp 6lespal les3s6 lesse6ne. 4lesta 9lesta. 7lestal le5sted le5steg le5stel le4stim le3sto 4lestrø 4lestyr 4lestø 4lestå 4lesug les1v le5s6vi 4le5sy 4lesø 5lesøy 3let. le4tab 6letak leta8ka leta8le. l5e4tas 5lete. 6letea 4leteg 4letek le5ten 6letenk 6le7tep le5ter. 4letes 2le3ti l5e4tik 2letj 2leto 2let2r le7tre le5t4ri 3lets let6sj lets8k let6tea let6tr lett3s4 2letu le4tv 2lety lety8e 4letø 8letå 4leul 2leun l1eur 2leut le4ute 2lev. le6vad le6valu le4ved 4leveg 4levei 4levek 6levern 4le4vev levi6d lev5n 2levo lev1r 4levs 4levæ lex1 4leø 2leå 5lée 1lér 7lét. 7lè 5lê 4l1f l4fa. lf5ant l5far l5fe lf3f l5fig l5f6in lf5ja l7fje l6f3nul l4fom l4fut 2lg l6gaf lga8le. l4g5alt l4g3ana lga5t lga4ve. l2ged l4gela l4gele l2gem lge3na lge4r5an lge4rap lge5ri lger5un l4gery l4gesl l6ge7sp lg5g lgie8n lg1lo lg5ly lg5n lg3ob lgo2d lg1ok lg1om lg5ov lg3ref lgr9øy lg3s2e lg2sk lg5s4kre lgsle9g lg5s4tr lgu4l lg3un lg3ur l1gæ lg5ø l6gå. lg5år. lgå8va lgå8ve. 8l1h lha8ka. lhav6s5 l5hj 1li li1a li4ala li2am li5ans li4as liba5 libe5ro libi5 libie6 liby5e li4dak li4ded li4do. 2l1idr lid3t li4ene li3er. li5ers. lie5s 3lif 4lifat lif5f 3lig li4ga. li4g3an li4gar lig9art li8gas. li4g5enh li4get 5lign li4g3re lig3se lig3s4i lig3sl lig3s4p lig5s4ti lig5str li2gu 4lih li5kan li9kar li7kas li5kee li3ken li5keså li9ki likk3o li1k2l 9likn liks4t li5ku 6lila 8l5ild li3le lil5lebe lil5let li4mar li4mas li6mate l6ime li4me. 4limh limp3r lim7r lim9u li4na. 4lina6l lin6c linch5 5l4indr 4lindu lind3s4 l5indus li4ne. li3ne6a li6nem 2l1inf lin4g3j ling5l ling7sen. 5lingv 4l5inju lin5kes lin5kle lin4kv 2l1inn lin5net 3linni 6linns 6l5inntr li4nor l4inse 5linsk 4l3inst 4lint 2linv li6n5ø6 lio4no lion5sp lion5sv li5o6s 2lip lipes4 lipp4s3 li9rar li4rek 4lisak li5set lis4kl 2liso 4lisp lis6sp lis7tan lis6terk lis5ti 4lis6til list3o li6s8tr list7rø lis4t3u4 li4st5y listyr8ke. li4tee li4tek li4ti3a li4tid li4tig li4til li4tim liti5st li4tiv lit5j 6litn li5to li2t1r lit5rer lit6tele lit6terk lit6term litt5s6 li5ty 7liu li6va. li4v3ak liv5eg livi5e liv2s3 2lj l1jan l1jar l4jarb ljar5s6 ljas4 l4jed l6jee l2jei l2jek lje3l lj9elv l1jen l3jer. l4je1s l5jes. ljes4t l5jet. l4jete l5jete. l6je5t6r l2jev l5jé l1ji 3l2jod ljo8e l4jom lj5ori 3ljos lj5un l7jur lj7ut ljø3 l5jøs. 6l1k l3ka l5ka6l lkali9e8 lk4an l6k5b lk4e l3ke. l2ked l5kedal l3kede lkeei4 l6keh l5keleg l8k7els l3ken l7ker. l4kera l4keri l4k5ers l4ke3ru l5kestad l5ket. l5kets lk2l l7k8lem lk4li l5k4lu l6k5nin l6ko. lko9ma lko9sa l2kot lkras5 lk5ri6k lk4ser l4k3s2h lk1s4t lku4le. lku8t lk9ute l6kveg lkå1 6l1l l5la6a ll6a5f l2lak ll1al l4lami l5lane ll3anl l4l5ano llans4 ll5ansk ll7apa llap3s ll4as ll5asp ll5aur llau6re ll7avl ll5avr ll3d2 lle5a l5leak lle8da. lle4d3r l3lee l2lef lle5gev lle5gr l5leha l5leho l5lehå l4l5eig l4leki l6l5ekst l4leli l2lem llen6da. ll5enden l4lendr l6lendt l4lenk l5l8ens l4lentu l4lenu ll5eple l6l5e6rik l4lerob ll6es lle4so lles5pr lle5stø l5let. l4leta l5lets llet6tele l8letæ l2leu ll5even lle7vev l5levå lle6y l2lé. ll7g2 lli1e lli5e4n l9lig l2lim l4l3ind l4lins ll3int l9lint. l3lip l4lir lli6sen l4liv ll1j ll7k2 ll5m llmue9ne llmu7ens llmu9er l5lo. llob5 l2lod l4l3off llo5id ll5oks llo2m1 llom5s6 ll3op ll5opp l2l1or l4loso l6lote ll5p llra7n ll4sak llsa6me. ll4sem lls5end llsk4 lls6kar lls5kv ll5skå lls5lag ll3smy lls4no lls4te lls6tig lls7øk ll3t4 llto4e l8lua l4lu4e l4luf ll7ug llu4k l8l7uka l4l3uke l6luks l5lum l4l1un llun6ge. llu4pi l2l1ur l3lus l2l1ut ll1v4 llva8n lly4se. l4løk ll5øks llø6pa. l4løve ll7øy. ll5øya ll3øye lløy6er ll5øy6n ll1å8r ll3å2s 2l1m l5ma. lm3anm l4map l4marki lm3av lm7b l4m3els l4melu lm5e4po l4m5erf lme7ri lme7sti lme5t4r l5mil lmi8le. lm3ind l5ming lmini6 lmin7ne lm3ins lm5int l7mis lm5l lm5m lm1op lm1s lms6j lm5s2p lm3t lmu4le. lm3ut lmyr8ke. l4mø. l6m5øs lm5øy6 lmøya9 lmå6la. lm5å4r l4m5ås 2l1n l2nab l3ne lni4u l7ny lo1al 7loane lo1a4r 5loar. 2lob lob5by. lob9byan lob9byar. lob5bye lo2bl lo2d3a lo3de lo4d3ri lod3s4m lod7ste lod7s6v lo6d5u 6loeng 6lofj 3loft 1log lo5ge lo6g5e8v lo4gir log2o lo3gop log8res lo6g5ro log5sa 4loh lo5id. lo3ide lo1in 3loja lo1ki lok4ko lok6kul 2lo1k4l 4lokon 2lok7s4 lok8se. lo1k4v lole6ge. 2lolj lolo9 l5omdr lo4m5in lom4mel lomst9r lo4nal 6lond lo5ne lon4g3r lo4nit lon7skj 2lop lo3pa lo4pea lop5pa 5l4opt lo1ra 2lord lor6da. lo1re 4l1org lor4g5l lorie6 6lorm lo1ro lo7rød lo7sa lo6sek lo4ses lo5sev los4kle lo1sl lo7sp 2lost lo9tes lo8ti. lo3to 4lottet lo1un 1lov lov7ald lo3van lo9vand lo7vane lo3var lo3ve7d6 l6over. love5re l5overn 6l5overs 6l5overt 7lovo lov3sa 2l1p l7pa lpa5re lpas5 l4pedo l4pee l2pei l2pel l5peleg l3peli l4pelin l3pesm l4peti l2peu lp2h lp2i lpin3e lpi5ne. lp2l lpo6et l4put l5q 2l5r4 lra8da lradi4u lra6ne. lre4de lre4i lre8ka lre8ke. lre8va lri8ma lri4ve. lro8de. lro6pa. lro8sa. lro4se. lrot5s lrø6re. lrø5v lrå8da. lrå4de. 8l1s l2sad lsag6 ls5ald ls4am l7sana lsan6ke. l4s5ano l4s3ans ls5ark l4sat. l4scu l3se. l2sed l2see ls3eid ls5eig l4s3ele l4s3elv l2sem ls5emb l4seno l7ser. lse2s lses5ku lses3l lses5pa lses5s lse8s5tr lse4te. l2seu l6sev l4sf l2sh l5sig l5sik l6s5ill l4sim l5simu l4s3inn ls5jakk l5sjef ls3jeg ls3jen 8lsk. ls5kabi l4s5kan ls5kari lsk5art l6s5ke lskif5 l2s3kild lskinn6 lskinns5 ls1kjed ls3kjo l6skl lsk3læ ls3koa ls5kor ls3kov l4skra ls8ks lsk5un ls7kva ls3kvi l4skå ls3kåp lskå6pa l2sl lsla4ga l7slagn lsle6ge. ls5lo l5s4luk l6s5løs l2sm l5smør lsmå6la l2snu lsok3 ls5ond lson6de. l2s1or ls7o6se l5sot ls1ov l2spa l9speg l5spei l9spel l5spi l4spr l5spred ls3pri l8s7s l4s3tak l4s3tal l6stank 8l7s8tat l6ste. ls4ted l4steg l3ste4i ls4tel ls5terr ls6ti. ls4tie ls6ton ls5tren l9stri l2su l5sub l3suk ls1un l2s1v ls7vea ls5vee lsve8en. l6s5vek lsve7re l4svik ls6vind l4sør l2s1øy l2s1å 2l1t l4taa l4taf lt3akt l3tal lta4la. l4t3alb lta6lev lt3anl lta6no lt3art lta4st lta8tes lta4t3o ltat3r lt3avk l5tavæ lt9b l3tede l4teka lte6ma. lt4en. l4t5enh lt3epi l4teras l4t5erst ltesa8me. ltid6s l4tiet l2tif lti6g5 l2tik l4tina lt3ind lt9inn lt3ins l4tivi l2t1ja ltle8ge. lt9n lto9ar l3tog lto4s lt3ost lt8ep lt2r l3tra lt3reg lt3rei l6treko l6t5rel l6t7rem l4trens lt3res l5t4rest l5trev l4t5rit lt3rol lt3rom ltro8pa l5tros l4t5rød l5trå lt1s2 ltsa8me. lt5s4i lt7s6t lt2s3v lts4vi lt7t8 lt3und ltu4ra ltur5e6 ltu5r6en ltu5r6er ltur5s6 ltur5å6 l2tut l5tv. ltva8la l3tvs l4t5w l3ty lty8d lt7øl lt3øv lua8r 2lub lub6band lu6bri lu5c lu7ere 1luf 3lugar lu7go lui6 luid6er 1luj 4luk. lu4ka. 4luket luk6keri lu3kr 5l6ukt 4luly l4um lu6mel lu2mo lum6sk lu4mø lun5d4r lu4ne. lun4gel l7u2ni lun5ne 3lunsj 4lunt lu6o lup4s lu2p3u lur2e 6lurei lu5ren lu5ri 6l5urn lur8na lur8ne. lur8ta 1lus. lusa5 lu7sak lu6sel lush7e lu2s5k lus4o5 lus4sid lus4s3t lus1t lus2t3r luta3 lu3ta. lu7tet 6lutf 4lutg luth 3lu5t6he lutla9 lut6m lu1to lu4t5r 2luts lut4tal lut4tap lut4t5at 6lutv 1luv lu4va lu4ve. lu9ven lu9ver 8lv l1va l4va. lva6k l4vakti lva6la l4va4m l4vana lv8and lv7a8p l7var. lv7asa l4v5ass lve3d4a lve5i6s l4vela l4vele lv4en lve9ne l9ver. lve9rau l4veru l4vesk lve5sl l7v6et. lve5str l9vé l1vi lvi8ene lvi9er lvi6ka. lv9im lvin5g6r lv3iro lv1j lvly8se. l6v3n lv1of lvoks6 lv9op lvo8re. lvor4s lv5o4v l6v5p lvra8r lv9ri lv1s2 lv5se lv7s6k lvs6l lv9ta lv1å l3våg lvå4p4 lvå6r l5w ly1a 2lyb ly4d7r ly5e lyes3 ly4gel ly5g6l ly8is 2lykj lyk6keri ly5ku ly7kv 6lykø ly5l ly5me 2lymp ly2n3a ly4ne. ly4n5il lyn3s2 2lyo ly5ok ly3pe ly1r8 ly8ra. ly6re. 6l7yrk ly4sa. ly4s5a4k lyse6te. lysk4 lys3kj lys9kl ly2s1l 4lysp lyst9ra 6lysy ly8ta. 4lytek ly4teri lyte5s l5y4tin ly1tr ly5vak ly3ve l3z l6z5b 1læ1 6læd læ6ra. læ5rar lær4arm læ4re. lære3i læ3rer læ4re3s læ5res. lær6sv læ6ta 1lø lø3de. lø4del lø5dem lø4er løk5kj 4l1økn 2løko lø4k5r l5ø6l lø9me lø2na løns5t løp6s5 5l4ørd lør5k6 lør5n 4l5ørr 5løs. lø2sa lø5san lø5ser løs3k løs3s 2løt lø9ta. lø3te. lø4teg løva9r 6l7øv8d lø4ve. lø3ver lø5ves 6løy. 4løya 2løyd 4løye løy8ed løy5el 2løyf løy4g løyg5e 4løym 6l5øys. løy5ter lå6gal lå6gre lågs4 lå4gå 2låi lå1k4 lå6ke. lå9me lå2m5o lå2n 6l5ånd lån2s1 2låp l1åp9n 2lår lå8ra. lå9rar lå5ras lå3rin lå1ru lå6sa. lå1sk lå6sko lå4s5l lå4ste lås7ten lås5ter lå5su lå3te. lå4teg lå4tek lå8ti. 4lått lå4ve. 1ma 2maa 3maa. ma3ar 2mab ma5br ma3che mada5me ma4del ma3dra m6ad9s 4maef 4maek 7maene 2ma1f 3mafia 3mafr 6mafrå ma8ga. ma4ged ma4gel ma4ges 3magn ma2gr 2mahe ma4is ma4ja 2mak. ma5kab 4makad ma4kes mak7ke 4makl mak6le ma4kot mak2r ma3kre mak5ron mak4tal 4m3akti mak4to makts4t ma1ku 2ma1kv ma1la ma7leb ma6leng ma4let mali9e8n mal5l ma4lov mals4 mal4t5ek mal3u mal3å 4mamer ma3mo m4an. ma3nak m3anal 6manam 4manav man8ce man4dom man4don ma3ne m4anf man5g4a m6ange 4mangr mania8 2manl m3anle 4manm 5m4ann man4nem manns5l ma4no 2mao 4mapa 2mapr 4marb mar5d6 7mare. 6mareg ma3rei ma7rel 5ma9ren ma5res 3mar4i mari8e9ne ma3rin m4arka 4markit mar4kv mar5m marmo9ra. mar7n ma1ro ma4ro6p mar3s4h mar7sl mar5te ma4ry. ma6rå 4masel ma5set mash3 ma4sia ma4sik ma4sis 6masju mas4ki 4masko 4masp mas4see mas6set massø9 7mast. ma5stem 4masto 4ma5str 2masy m6at ma1ta ma5tad ma3te ma4te. ma6ted ma4tel 7maten 7mater. 6matera 7matet 6m7atfe 4matil 7matil. ma1to ma1tr 4matra ma4t5ras ma4t3re ma6t7rom mat3s2 mats8l mat5ta m8at7t8r 2mau mau4k mau7l ma1un 5maur mau7su 2mav 5m6a6ve ma5ven m7avh m5avk ma4ze ma3zo 2m1b m4bao mbar3d m2bea m4beb mbe9da m4bedø m2bef m2bek m4beli m2bem m4bena m4beo m4bereg m4bero mbet2 mbi6ar m2bib m3b4l mboe2 mbo4end mbo5er. mbo5ere mbo5id mbo5n m4bop mbo5re mbo9t mbu7ar. mbu4e mbue7re mbus5 m1c m6co 2m1d2 m3de md7om 1me 2mea2 me5al mea5m 2meb 2mec meck4 4medat 2medb 5mede. me4ded med5ei me7den me7det 4medf me3di 4medik 4medir 2medm me6dok 4medom 2medr me6dret med1s4 4medu me6dun me5d4us med5v 7medve 2medy 4medå me7e 2meef 6meek 2meel 4mees 4meev 2mef m3eff 6me2ga me7gal 2megr 2megu 4meh mei2e meie5n m1eig me3ild me3ind mei5ni me7isk 4meiso 2mej 4meki 4mekj 2mekk me2k1l me3kn 4meko 2me5k8r 4meks mek5t 6mekte m2el 4mela me5l4aks 5melane 5melar me3le me4le. 4meled 4melei 4melek 6m5e6lem me4l5eng 4melik 4melis 4melit 4meliv mel5le mello6m3 4melok 4melov mel4si mel2s3j melsk4 mel5s4t mel7tr me1lu mel5v melvi6 2mely 2melæ 4melø 4me5l4å5 2mem me6mo. me6n5e6d me6n5ers 4m5enga men5k menle6ge. m6enn men4ny me4nom me4nor men4si men3sm men5spl men5te men6tek men4tom men5tr me4nyt 2me3o me6os 2mep 5mer. me6rab 4merad me4ra5l me4r5ant mer5di 4mered 4mereg 4merei 4merek 4merel me6rense me3res 4meress mere6t m4eri 4me5rib meri5ke 5merin merle7g mer9n mer5os 5mers mer5sk me3run mer5und 4merus 2mery me2r3ø 2merå me4råk 5mes. 2me5sa 4me5s4h 2mesj 2me1sk mes5ke 2me1sl mes6le 4me3s4o 2mesp 5mess messe7s8 7mest. 4mesta 5meste. mes4ti 6me7sto mest3r me5stro 6mestrø 4mestrå 4mestu 4mesu 2mesy 2mesø 4metab metall7s8 4me9tap me4tar me3te 4meteg 4metei 4metek 4metel 4metep 4metil 2metj 4meton me4t3ra me4tre met5ren met7rer met5res met5rik me4tru 4metræ 2metu 4metv 2mety 2metø 4metå 2meu4 7m4eu3s 2mev meva8n 2meø 2meå 2mé 2m1f mfa9ra mfar8ta mfav5 m2fek m6f3ess m4fi. m4fibr m2fit m5fru5s6 m5funn8s5 mfu6se. 2m5g6 m4ga. m4gi. mgå8va mgå8ve. 2m1h mhea4 m4hu. 1mi mi1a 5mi6al mia2n 9miane 7miar. 2miav mi6c miche6l 8m9idé 2midi mid5j mid3s4 mid4t 4mi3ele mi3er. mie9s8 2mi5f 5migraf 2mih 2mii 4mij mik6h 4mikj 2miko mik5ro. mik5ron mik5sa 6miku mi4la. mile6t mil7eti mi4lev mi7li 4milin mil6s5v 4milæ 2mim mi8ma. 5mimo m7imp mi4na. mi5nar mi4ne. mi4n5ers 4m3innh 4m3inns 6minnt min2s min3sp mins4t mi3nu m4inv mi4n5y mi7ov 2mip 4misa mi4san mi3se 4misek 4misel 9misé misha9ge 4mi7si mi2sk mis4ko mi3s4la mis9le 7mism mis4s5k mis4s7p mista9k 5mis7te mis4tra 4mistu 2misy 4miså 6mita mi3te 4mitj 4mito 2mit6r mitt3s mi5ur 2miv mi5vå m6ja. m6jan m5jar. m7jarn 2mje m7je. m1ji m8jingan m8jingar 8mjo mju7ke 1mjø mjøs5t 2m3k2 m4ko. mkro5 mku6le. mkå8pa 4m3l m7la mla6ga m2lef mlei5er. m2lek m2lel m2lem m4lera mle6se. m4lesk m6le5s8v m4leta mle4ve. ml6i ml5ja mly6se. mlø6pe. mløy3 2m7m4 m6mai mma5kl mmal5 mma8le. m4mam mmando5 mman6dol m5mar mmar7in mmar7o mmatik7ka m4medø m2meg m2mei m2me3k2 m4melu m6meni m4menu mmer5t mme4run m2me1s mmest6 m5met. m4meta m4meti m4metra mme5t6re mme3u m3mé m4mia m7mian m2mib m4mid mmie6n m2mik mmi5sk mmi5so mmi3st mm5n m3mu mmø2 mmå8la. 2m1n m2nee mn7eid m2ne9l mne4ra m5nese m4nesk m4nesta mnes9tie m9net. m4nete m2nev m6nip mn7sk 1mo 3moa mo2ar 4moba 5mode mo3dem mo5di mo6di. 2mody 3moe mo4en. m1off mofo6bi. mo6gi 5mogl mo5go m5ogs 4moh 2moka mo8ka. mo8ke mo1ki mo6la. mo3le mo4le. mo7le6s 4molt mo3ly m5om. 4momf 2momr mom4s5ø mo5ne mo4nisa mo2no mon1s mon4ste mon5t6 2mop 5mo1ra mo4ra. mo4rar mo7rar. mor5d6e 4mordl mor6d5r mo3re mores7 m2ori mo4ri. mo6rid 4m3o4rie mor4kl morla8ga mo5rok mo4rom mor4si mor4skj mor7sky mor4sp mo1rø mo9sen mo2s7k mos4o 6mostab 4motap mo4te. mo6te6g6e mo4tei mote7kl mo5ter. mo4tes mo5to 4motr mot7re mot1s2 6motsagd motsva5 mot7t mour5 3mo3va mo5w 8m1p m4pana m4p5anta m4pee m4pelot m6pena m6pep mpera8te. mpe5res m6peress m4p5erfa mperi6e7n mpes2 mpes6te mpe4sti m5pett m2pe5u mp3id m4pinje m8pla. m3p4lan mp5le. m6p5lin m6p5n m6p5ob mpoe4 m4poeta m4pog m6pok m2pop mp3opp mp1p8 mp3rad mp5ret mp3rop mpro8pa mp1s mp3sek mps4p mp5s6t mpun6ge. m9pur mp5ut. mp5ys mpø5 m9på. m3q 2m1r6 mro8sa. mro6se. mru7te. mrø9de m9rår 6ms m5sa. ms1ak ms5ant m1sc mse5lu m9s6ei m4sem m4s3eng ms5e4pl m4serv mse5s m5s6etn mse6t7jare mse8t9jas msi6e ms4ing ms3inn m4s5ja ms5kab mska9k ms6kin msk5ing ms3k4n ms3kor ms5kren msk8u ms3lan ms6lega ms9lua ms3lue ms4ly m2sm m1s2n ms9ne ms5no ms3næ m1so m4soms ms3ori ms1ov ms3s2 m4s3tal ms8tav m8s7te. ms7tea ms2ti ms5tilb ms3tim m1sto m4s5top m5s6topp mst5ord m8strand m5strane mst5red ms5tref mst5ren ms5trik ms4tru ms3unn msu9ta msu7ten ms1v msva9ra msva5re m3s4vet ms3ynd msø4ke. m4s5ør ms1øy ms1å 2m1t m3ta mt4b mtbe6 m2tee m2teg mteks7 m6te7kv m4tel m6testu mti9a m9tida mti5e m6tien. m6tif m2tik m6tini m4tiø mtiør6 m5to mt4r mt6ve mt4vin mtå5 1mu mu6a m1u2b mu2e mu3el mue7r mues1 2mug mug5l mu4he mu2k 8m9uka 4m1uke mu5la mu4leg mule6s mull2 mull6s7 mul6tiv 4muly 7mum mu3mi mum2s mun2c munes6 4mung mun6ge. 6m5univ mun3k munn5s6 mun4t3r mu6ra. mu4re. 2murn murs4 6murt m2us mu4se. mu4ses4 mu4sé mu2s3k muske6l5a must4 mus5tan 2mut 3mu1ta mu8ta. mutsa8la mut7t6r 2m1v mvak5t mva6la mvari6 mveg5s4 mvi7e6 mvi6se. 2mw 1my my5a myg4ga my3ke myk4kes myk3l my8kr my2ra my9ran my9rar my1re my4re. 4myrk m5yrke my4r5u mys3 my6sa my4se. my4so my4te. mytt6s5 5mæ mæ6la. 1mø møb3l mø7des mø6e mø9ens møkk6a m3økn 2møko mø6na mø4ne. møne9s mø8nest 6m5ønsk mø2o 3mørke mør4k5r mør5sm mør3ø mø5se 7møt mø9tas mø4tere møt9t 2møy møy9ar m5øys. 1må 2må. må5a 6måenh må7g2 må1k må4ka. må4ke. må4kes m6ål må5lar må4le. må6led måle3i målø6pe. må4ne5s6 må9nese må8pa. må4pe. må7pl 2mår måra6r må1re må1ro må1ru må1s4 må6tak 6måtf må5tr må3tø 1na na6ans 2nabo 7na7bortr na6bot 4naby na4ded na8dem nadi4 n3adop nad2s1 4nadv 8naf n1aff nafo7r na3fr naf7t na8ga. na3ge 4nagen nag3s4 nagså5 na7gø 6nah 4nair 2nak n6akk nak7ka nak6ko 5nakl na1kr n1aks nak8sa nak8se. 8n1akt nak6ta. na7kv na9lag na6lare 6nalarv na7leg na4l3ei na4lek nal5epo na4les na4l5ett na4lev nal5g nal6ge. na4lil nal6lag nal4løp nal3op nal5s2 nal3t na3lur 2naly na2l5ø 4nalå na3lå5r 5nam. na7mere na5mes na5mo9 5nams 2namø 9nan. 4nana n3anal n6ane nanfø8 4n5angr nan5k nan6ke. 4n3anl 6n5anle nan4ne na4n5o n4n5ans nan4sin nan4skj nan4s5t 4nany na7o na5pe nape4s nap3s4 na7p8 n4ar. na4rap 2narb nar5dr 4narea nar7ei 4na5rek nari4e5n 7nariksk 4narkiv 8n7arm 6n5armé 6n5arme nar8ma. nar5s nar8ste 2nart nar6ta. nar5ti nar7v nar5ø nasa3r na4sas nas7h 8nasik na4ski na2s5t4 nasta5 8nasu na1ta nate8k na7tem 4natl 4natom natori5e6 nat8ra nat3sp nat6tak nat6tea naty5 2nauk naus6p na6va. 4navd 6navf 2navg 2n3avh na1vi 4n5avk 4navl nav4les 3navn 6navo 4navr n1avs 4navt 4n1b2 n5ba2 nba3d nba9ser nben4s nbo5et n6buf n6butr nbyr5 nbø9le nbø6n n1c n5ca ncel5 n3che nch3ei n6cot n2cy1 8nd n7daa. n6dabi n4dad nda5f n7dag4 ndags5 n4daks n3dal n4dalf n4d5all ndals3 n4dark n6d3art n8dask nda5tal nd5d4 n3de. nde5a n2deb n2ded n5defi nd1ei nd4ein nd6ek n4dekl n4deko n5d4e5l nde4le. n4delik ndel4sk ndel4st nde6lt n2dem n5dem. nde5mo n5den. n6dener n5dens n2de5o2 n2dep n4derab n4deras n4derei n4derim nd6erk nderla6ga n4desi n4dest n4desu n1dé ndi4en n4d3int ndi6sk nditori5 nditorie6 ndit4t5a nd3jer nd1ju nd5k nd4lem nd4lese nd4lest nd4lev n8d7m ndo9a n6dob n6d5okk nd4om4s3 n2doo nd1op n2dor nd3org nd5orm n6dote nd5rae n4d3ram nd3ran nd6rek ndre4ra nd5resen nd5rett nd1ri n1dro nd4sag nds3ak nd4s5amb nds5elv nds5ende nd4ser nd4sje nd4skj nds7kul ndsla6ga nds6lett nd7spu nd3s4te nds9teg nds5trek nd5stry ndta6ka. n6duf ndu3is n4dun nd3ung ndun6ge. n2dup ndu6si ndus7k nd7v n2dyg ndy1k n2dys ndy5sp ndø5l n2d1øy 1ne 2nea 5neae nea4g ne7a6le ne5alp ne5als nea9m6 ne9a8r9an nea9ren ne1as 6ne7av 2neb 3nebb 4nebe ne4ble neck5 2neda 3nedal ned3d 6n5eddik 4nedeb 4nedeg 4nedel 5nedg ne4di. nedi4s 2nedo ned5over7 ned1r ne6dre 5neds ned3st 6nedu 4nedø ne5dår 4neeg 4neei 2neek 5ne4e4r5 2nef n1eff n5eft 2neg 5negati ne3gla neg5lesp neg8r 6negru 6neh 2nei n2eid nei8dan n5eig n2e1in n3eini 5neir 5n6eisk 2nej 2nek ne4ka. 6nek2l ne3kn nek2r nek5rin n7ekser nek5t 4nela nel3de 4neled 6nelegg 7neleggj 4nelei nelei5er 4n3elem 6nelê 4nelid 4neliga 4nelis 4nelit 4neliv nel4lov nel7s 2ne1lu 4nely 2nelæ 2nelø nelø8pa 4nelås 2nema 4n3emb 4nemel 4nemer 6nemes 2nemi nemie8 6nemj nem6k 5nemn nem5ne. nem7nel 2nemo 2nemu 2nemy 2nemø 2nemå 3nen 4nena nen5at. 6n5en6den 6nendr nene4 4nened 4nenem ne3nes 4nenesl 4nenet nen5eta 4nenev nen4ga. 4n3enhe 6nenhet 4neni nen5se nent5ei 6n3en5tr 4nenu 4neny 4nenæ 2neo 5neo. ne5o4r 7neos 2nep ne5pe 3n4er. 4nerad 6nerap 3nerb 4nerea 4nered nere6de. 4neref 4nereg 4nerek 4nerent 4nerep ne5res 4neress 4neresu 4neret 4nerev 4nerfar 4ner2g ner3ga ner3ge 4ne3rib 4nerik 4nerit ne4ri9v 5nerl nerla8ga n3erob 6neroc ne7rof ne5rok 4nerom ne5rot ne1r4ov n6ers. ner7se ner5s4i ners4p ners8ten 4ne3rul ner5un 2nery 3neryr 4nerør 2nerå 2nesa ne4sa. 5nesar 4nesc 4nese 6nesek nes6er 5nesets nes5eva ne3si nes5ind 4nesit 2ne5sj ne5skam 4ne5skar nesk4e 4neski 5neskins 4neskj 4ne5sko 4neskr 6nesku 2nesl ne3sli ne7slø nes6mi 6nesn ne7snø 2neso 3nesot 2nesp nes6sam nes4stu 5nest. 4nestas nes9te. 4nesto nes5tor 4ne3str 4nestu 4nestø 2nesu 2ne1sv nes8va 6nesy 4nesæ 5nesøy 4ne5så neså5re 3net. 2neta 4netaks n7e8tas neta6le. ne3te 5nete. 4ne3ti 6netid 2netj 2ne5to 6netom 2net4r 3nets net5s4p nett3a4 net6tel 2netu ne4tv 4nety 4netå netå5ker 2neu neu1r ne5us ne6va. ne4ve. 6ne8vent 5nevik nevi8sa 3nevn nev1r ne4y5t 2neø 4neå 1né 4néb 4néd 2néf 6néh 2nél 4ném 6néo 2nép 5nér 4név 4néå 4n1f nfall4 nfalls5 nfan5t n6foa n4fob n4fole n4fom n4fora nfor9en. nfos4 nfø5des nføy8ed 8ng n8g8ad n4gaf n6gag ng1ak ng5and. n8gan8da ng3ank n4g5arm n4gart ng5art. n5garta ngar5u n2gat ng5ato nga4ve. ng7avi ngd4 ng4ded ng4del ng4dep ng3dr n4geda n4gela n3gen n4gena n7gene n4g3eng n6geno n4genu n3ger n4geret nge5run n2ges nge3sl n4geta n2ge7v ngfø4 ng5g2 ng5id ngjen5g ng1l n5glem ng4lu ng7n ngo4d ng5odd n7goe n3g4ok n8g7o8m ng9ome ng5ond ng7o6pe n2gor ng5ord ng3ork ngos6p n2got ng3ra. n5grad. ng5rand ng7rea ng3reg ng3ren n4grend n4grer ng5rest ng3ret ng3rev ng3rid ng3rin ng7ro. ng9roa ng7roe n5g6ros5 ng3råd ng8sa. ngs5elv ng4sem ng4ses ng2sj ng2sk ng6skj ngs7leg ng5sløy ngsmå6la. ngs3ne ngs7tep ngst5rid ngstyr8ke. ngs9tør ng3und ngu5ru. ngvi4s ng5ye n1gø n2g1øy ngå8va ngå8ve. 4n1h2 nhat5 nhet4s 1ni ni1ak ni1a2n nian5dep ni2bl 4niby 4nibå 4nicr n8ida ni4del ni7dele n5idé ni6do nid7r nids4 nid5st 4nieg ni1el 7ni3e2n ni3er. nie5ri ni7ers ni5ert 4n3i4fr ni5gla ni9glo 2nih 8nij ni3ke 2nikj 4ni5ko 2nikr 4nikv ni5l4i 5nilu 4nimar 4nimas 4nimo 2nimp ni6n7al 2n1ind 4ninf ning3o nin5gr ning6s5 ningse4 nings5te 2n1inj n1inn 4ninnb 4ninnh 4ninns 4ninnt 2n1ins 2n1int 2ninv 5nio. nion2 nions3 4niop 7nios 4ni5ov ni4pet ni9pet. ni9pets ni2pl nip3li nip5si 4nir nir7kel 4nisem ni5set nis5im 4ni3skj nis4k3o ni9sol niso5ne niss4 4nistas 6nistat nis5tik 4nistil ni3str 4nisty 4nistø 6nisu 6nisy n4it ni3ted 6nitj ni4tog ni4tos nitt4r nitt4s3 nitt6sk 4nitu ni3ty nit5z nitær6e 2niub ni4umf 2niut 4niva 2nive ni8v7eg niv5ei8 4n5ivo niv3s2 6niå 4n1j n6jah njav9 n2jed n5jede. n4jee n6jei n2je1s n3jes. n2jet n3jet. njet6r n5jett 2nk n1ka n2kak nk3aks nkal5l n2kau n4kedo n4keer n4keh nk5eie nkel5s nkelt3 n4k5enh n8keno n4k5erfa nker4st n4ke1s4 n6ketø n1ki n4kid n4kie nk3ier nk5ind nk7inf nk3inn nk7int n5kj nk1k4 n1kla n5k6lang n7k4lis nk3lok n1klu nk3ly n3klæ nk1lå n1knu n1kny n3ko n4kof nkofi8 nk5oks nko5le nkol4la n6kot n6kov n1kr n3krav n7k8ry nk1s2 nk4tak nk6tal nk4tin nkt3sk n1ku nku4le. nkuri9 nkurie8 n4ku6t nk9ute n1kv nk3ve n7kvit n6kvo n9ky n1kø n1kå nkå6pa 4n1l nland9a nland6se n5le nlei7er. nle8ma. nli4en. n3lj nlu4e nly6de. nly6di nly4se. nlø6pa. n7lå 4n3m nma4le. nmik3 nmi8l nmini6 nmo6se. nmusik7k nmå6la. 4nn nn4ab n2nad nn5ad. nn9aft nn5air n6n1ak n4nala nn5alg n4name nn4an nn5ana n9nane nna8ni n4n5ank n5nanl n6n7anta n9nar. n4nari n6nasi n4nask n2nat n2nav nn3avl nnbo9e nnbu9e nn5d2 nndø4 nndør3 n5nea. n5neap n5nebar nnebe8r n5nebu n4nedi n2nee n6nef nn1ei n3neke n4nelo n3n4en nne6nat nne4n3o n9ner. n4nerel n4nero n7nes. n6nesj n5nes4la n4ne3st n5n6et. n4nesø n4nete n2nev n2ney nn7g8 nnhø8re. n4nid nn3ide nni3e n2nim nn7inf n5nis nni4sj nni4s3t6 nn7k2 nnle6ge. nnlø6pe. n4no. nn5of nno2m1 nn6oms nnomsy8na nn1op n2n1o4r nn7ord n4n3o4ve nn9r nnsa9ka nn4s5amb nns5and nns3ar nn5seg nnsei8g nn4s3em nn6s5enk nn4s3es nnse6te. nnsi7da nn4s3in nn4s5i6s nn6s5jak nns5kan nn5s4kli nns5op nns3or nnst6 nn6s5tab nns5tal nns5telt nns4ten nns5tep nns7tin nns5top nn6s5tre nns5tro nns3tv nn4s5ul nns3va nn6s5vo nnsy8na nn2sø nns3øk nn3så5r nn7t4 nnte6se. nnto9ga nnu1i nn6ung nn1ut nnvi4s nn1yn nny4t nn7øk nn1øv nn1å 1no noa4g no1ak 5noane no7ar. 2nob nobe4l no4bl nob5le no3b4r no5co nodi4e5n 3noe 4noef 4noei 4noek 4noent 2nof n1off 3no3ft n6ogra no5id no3in 2nok no1ki nok8r nok6se. n3oksi no9le 2nolj no6mid no6mik no4mil 4nomj nom9m nom7s2 5nomy non1s4 non5t 2noo 2nop n1opp nopp7s8 no1r4a no5ran no5rar no5ras nor4da nor6d5end 4nordn nor4d5r nord3s4 nor4dø no9ree no3rek no3ren no7ret nor5g 3norge norges5 n3o4rie 7norit 4nork nor6kla nor6kle n4orm normlø7se nor2s nors6ka. no3ræ no4sel no4ses nose8te. 4nosp no3stj nostra4 2nosy no4ta. no4te. note5i 5notek no4tel no4tes not3s 4noty 4nou no1v no3ve 4no5vi 4n5ovn 7nó 6n3p2 n5pe npo8ta n4påk n3q 2n1r2 n9ra nra8na nra8sa n3re n4reb nrei7e n6renem n6reo n6ri. nro6de. nro6t nry6 nrå8da 6ns n1sa. ns1a4d n5sag n5sakk n5sa4kr ns3aks nsak6se. 6n5akti ns5akv n3sala ns3ald n6s5alp n5sane n4sanf n5s6ann n5sanse ns5ansi ns5ant n5saren. ns6arm n6sart n4sati n1sch n3sco nse9a8l n2sed ns5edd ns8ede n2see nse5ei nse6er n6sef n2seg ns5ege nsei6d ns5eie. ns9eig n4seks n4s3elv n2sem n5sen. n5sene. n4sener n9senes n4senet n4seni n7sens n3ser. n4sera nseri7e6 n4sesa n4sesi n4se3sk nse3sl n4ses4p n4sest n6sesu n4se3s4v n4sete n9sets n2seu ns5fr n2sh ns3ha ns7he ns5hi nsi5de. nsi4ent nsi6er. nsin5d n3s4ing ns3inn n4sinte nsi8ra nsis7k ns3jak n4sjav n5sjef n6s5jord n4skan n6s5kauk ns7kele ns4kete n9skim ns5kir n5skis n6skja n6skjele ns5kjen n3skjæ n8s7kåp nskog6s ns4kolli ns5kor ns3kro nsku9et n4skug ns5kuli n5skum ns1kv n5s6ky. n5s4kye n5skyss n5slang n7slarar ns5las nsle6ge. n3s4lekt ns6leri ns5lid n5slyn n1slå ns3mi n4smal n4s5mo n4smur n4smus nsmå6la. n5s4nar ns5nes nso4d ns1of n3s2ok n1sol n4sond nson6de. nso5ris ns1ov n3sovn nspa9ra ns5pels n5spet ns1pr n6spros n7spur ns7s6 nsse4e nsså5 ns4ta. n4stak n4stag ns5take n3stam n4stank nst5art nstar8ta. ns4tau n3s6ted n3s4tei ns4tel nste6ma. ns5tenk n6step n5s4tik ns5tild ns7tilf n4s5tils ns4tin ns4t3i4s ns1tj n5sto. n3stru ns7trøy n3stue n6stuk ns5tur nst3ut n1su ns1uk n4sung n5sup ns5vang nsva9ra n2s3ve ns9veg ns5verd ns5vern ns1vi n5s4vill ns4vind ns9vis n4svu n3s4væ nsy4d ns1yt n5søn n4s1øv ns5øya n5såpe nså7pen ns7ås. 6n1t n5tab n4tagr nta4lan ntall4 nta5na. n4t5and nt3anl nt4anv nt3app n7tart n6t5arvi nt6as nta5sia nt4at nt3avi nt5avr nt7avs n2tea n5teat n2tee n4tef n4tege n4tegi n7tegn n2tei nt5eini nte5ins n5teis n4teka n7tekn n4tekse n9teleg n5telig n5tell n4tels n9telt nte4ma. nt3emb nte4mis n5ten. n4te7na n5tene. n4t3enh n5tens n2teo n5teori n5tepp nt4er n5ter. n7terek n6terest nte6risk nteriø7ra. n5ters n7tes. n4tesel n4teta n4tete nt4e3u nt5e4va nt9g nti1a n4tiat n4tid n5tiem n4tig n4tikap n5tiki n4tikl nti5kli n5tile nti3lo n9time. n7times n4t3ind nti6net n6tini n2tio n2tip n4tisa n4ti5sti nt5l nt5n nto3a n2tob nt5omf nt5omn nt3oms n2t1op n5tor. n5to5re n6torg n2tou nt1ov nt6ran n4trep n5trer nt5resi ntres9kjare n4t3rin ntrol6li n6trom n6trul ntrøy4 nt5skj nt5s6la nts2t nt3t4 n6t7ub ntu9e ntu4l n2t1u2n n4t5uro n2t1ut ntva8la nty6e ntyr3s nt7år. 1nu 4nu. nu3an nu4av nuft4 nufts5 2nug nug6la 4nu4h nuit8e nuk5 nul9t8 4nulu 6nuly nu9me 2n1un nun4ge. nuo2 6nup nu3pl nu4re nu5sa. nu5sen nu7ser nus4k5l nus7l nuss4 nu6st nus3ta 2nut nu7ta nu3te. nute6r nut5eri n7utl nu6ume 6n1v nva6la nvand5 nverle9 nves1 n5vi nvi4et nvi4ka. nvi5ke n3vu nvæ8ra n3w 1ny ny5ar. ny9ast 2nyd ny4de. 4nyef 4nyg ny5ge 5n6yhe ny3ke ny3k4le 4nyko ny1lo 2nyn nyn8da. nyn4de. 4nyo 4nyp ny8pa ny6ra. ny4re. ny7rev ny4ru ny1s ny5se ny9s6k nyst4 nystu4 ny3te ny3tr 2nyv ny8va. ny5vak ny8ve. 4nyø n1z 1næ1 næ8ra. nær9and næ8rast. 1nø nø2da 4nødd nødde5 nød3sk nød5sto nø9dun 2nøe 4nøf nø1fl nø1fr nø7gr 4nøko 4nøks nø4le. nø9mo nø5mu nø3p4 nø7ra nø6red nø1ry nø3se nø1sk nøs4l nø7te nø7tr n6øtt nøtt6r nøv4d nø3ver nøy1 2n1øy. nøy8a9n n7øyh 4nøys n3øys. nå6as 1nåd nå5ded nå8en nå6et nå8j n1å2k4 1nål nå2la nå5lev nå8ma nån6de. n1å4p nåp8na n1å6r nå2s nå5sa nåse4 2oa oa5c o1af oa4k oak6kana oak4ku o1all o3alt o1a2m o3a6n o9and o1a6p oar6d7e oar4d5in oa4r5e4g oa4r5enh oa6ré oa4r5i oar5m oa9té o1au o1a4v 2o3ba obakk8s obb4l ob4bo ob4b5r ob4b3u ob4e o4bea ober5et ober4s obers5ta obers5te o3bes 2o3bi obi5e6 1ob1j o1b2l ob5la. ob3le. ob3len o2b5li 3oblig ob4lo o1b4o obo9a 2obr ob5rar ob1re ob1ri 3obser ob5st 2o3bu 2oby obyl5 o5bø o3bå 4oc ock5ers o5cy 2o1d o6dab oda4f od7att odd5ei od4del od4dest od9do od4e o2deb o6d5ei o4deko o5deku o2dep oderle7 o2des o5det. o5dets odie4n o4d3igl o4dj odko5 od3oml od3ov o2d5re o4d3rø od3sk ods4ka od3s4po od5s4tol ods8t odu7s o4dy. o4dyb od5øk o5døs od5øy o2d1å6 6o1e oe6f o4ein oek6s oe2l oe4mu oe2n oen5a o7ene oeng5d oen2g7r oeng3s oeng3u o5ens4 o7ens. oen5t o3e4re o6erer oer8ma o3ersk o2es oe6sip oe6sit oes8ka oes8ke. o4etan oet2h oe5ti oev6ne. 2ofa o2fa. ofag6a o4fara ofa4se o2fav o2feb o4fei o4fera o4fe3st o1fé off9and of4fek of5fes of6fia off5id of6fr of2fu of6fy 2ofi o4fip o1fl of5le 2ofo o6fra. of9ras of1re 6o5fri of8sa of8se. 6oft of4tel oft2s3 2ofy 2og o2ga. og7ank o4gare o2g7av 4oge o2ge. o4ged og1ei oge7na. o3get og4gera og4g5j ogg3s4 og6g7u ogi3a4 ogie2 o4giev o2gif o6gig o4giko o2gil o2gim o2gin o3ging o2gi1o o6gista o6gi7str o2giv og5jer og7la ogly7 og4ned 5o4g5ni og6nel o5g6nos o2go. og6ra og4re. o4g3reg o4g3rei og4rer og7rett o4g3ri og3ryd o4g5rø og5rå og3s4 ogs4a ogs6an og3s2e og1sk ogs4kj og5sl ogs4le og1s4p ogs5pa og5ste og3sti og4s5tj ogs4to ogs4tr ogs5t6ra og5stre og5sy 5og5s6y4v3 ogt6r 5o4g5åt og1un og5ø og7ås 2o1h6 ohe5te ohm9a o4ho. ohø4 oia4 o1i2d9i o1idr oid5t oie4n oi5er oi6es oi5k oi4la o1im o3in. o1ing oi2n1o4 o4insp oi6r o1is o2is. o6isa o2ise o4isi 4o1j o8je. o4jo. o1ka ok7aft ok1ak oka4n5i6 ok2ar ok5ark o3kas ok1ef ok5els5 ok5elv o5k6en o4kesk o6kev o1kj ok4kand 4okke ok6kera ok4ke5s ok3kje ok3ko. ok5kol okk8s7m ok4kun 4okl ok8la. okla5m ok8le. o1klu ok7lut oklå5 2okn okna8sa o3ko o8ko. ok8ol o4k3oms ok3omt oko5pe ok5opp ok3orm oko4s oko9se o6kov o1kr ok5reo o6kret o4k5ru oks4al oks4e ok4sek okse5kr ok4sem ok7sen ok6serin ok4ses okse9te ok5s4i oksi7da okst2 oks6ti ok6s5vi oks6tr ok5ta 3oktan ok8t8a8v7 ok3ti ok5to okto4r5i okt6r o1ku ok5u4k oku8le. oku6t ok7ute o5kva o6kvak o3kvi ok5øy o3kå 8ol. 4o1la ola6ded ola8ga ol5anl ol3ant o9lar. o6larbe ola5t olber4 olbo7e olbo7ge. ol4bol olbu7 2old ol7dan ol5de. ol4dem ol4dest ol5det ol3do oldo7ve7 ol5drev ol3dri old3s4kr 2ole o5leaks o6leb o2led o2lef ol5eig ole5in o2lek o7leki o2lel olele6ge. o2lem o5lem. o5lems o7lene. o9lenes o4lenet o4leni o4leno o6lered o4leru o2les ole5sta ole5str o9let. o2lev o1lé ol4f5i ol4fj ol3g4e ol1g4l 2oli o4liba oli9e6n oli7ert oli5ne 3o6lj olke3s4 ol4kese ol4kesk ol4kest ol2k3l ol9ko ol6ku ol5kv ol5la. oll3ak ol4lam ol7le. ol4led ol4lel ol7len ol4les ol6linj ol4log ol4lom ol5los ol4lov oll5over olls4t oll5sv ol2lu ol4løp ol6løs ol6løy ol2lå olme5s ol4mest ol4må ol9n 2o1lo o4lo. o5loan o3loe o4lof olo3i ol5oks ol3oms ol3op o6l7os. o6l7o6se o6l5osf olo5ve o8l7ovn ol4ped ol7so ols8t ol5sva ols5vik ol3ted ol5tep ol2tr ol6t7ra olt5re. olt5rer olt5ret o1lu olu5l o4l3ung olun8ge. o4l5ur ol5va ol1vo o1ly oly7d ol5ør o1lå 2om. 2oma om3ald o2ma2m om5ang oma4nif omann4 oman5t om3ars omar7ø8 om4as om1av omb6 om4bet om4bis om3bl 5ombod 1ombu 2ome o2m1ek o5meka o7menes omer6s o6mese o5met ome4tak ome7tar om1eu 3omfan 3omgre 8omh o2mia o2mib omi3e4 o4miek o2mig o7mikk o7mine om7inn om3in5s o4mio o2mir o4misj o4mist o2miu om1j 2omm om6mat om4med om4metr 3ommø 2omo o4mofo om1op omo1v omp2 ompa3t 1omr 2omre 2omro 2omru 6oms. oms3al om4sek 3omset omsko9d omsku9la om4som oms3un oms4ø omt2 3omtal om4tes om3ti om3tv o2m1u o3mus omvæ8re. 6omy omyr8ke. o2møk omø4r om5øy6 o5må 2on on3abo o4nac o6nak o4n3ang o4nap on3app o6narb o4n3arg o4n3arv o7n8a7sj onat5r o2n1a4v on5b on4dar onder6e ond3re on4d5ri onds4i o4ne. on5eie o4nele o7nell o2nem o3ner o4neru onesi6 o4nesk o4ne3s8t o4nete o2nev on7f on7ga. ong3d on5ge. on6ged onges4 on5gi on5go. ong2r on8gro ong9ros ongs4j on2gu on4gy on4g5ø o9ni. o2n3i2d oni1e o2nil on5ild o2nim oni6mi on3inf o6n7inn o2ni1o o4ni5p o6niso on3j on1k on5k6a 3onkel on5k6i on4kle on5ku onle6g on5nad on3ni on5ny o4no. o5nor. o4no4v on3ove on4sh ons1i onsi3s onsi4v ons1k4 ons7ke ons1l onsla6ga onstitue9ra onstitue9re onst5rum ons5und ons1v on4sve ons1å ont6a on3te on4ted on5ten on5ti on4tok on5tor ont2r on7ul8 on5ur onu4sk o4n5ø4 on6øy. on7å6 2oo ood1s o1off oo2k1 oo5k8a ook5es ool7a oo4m5i oo6mo o1o2p oopa8 oop9an oo4pe oop5en oop5et o6opi o1o4r oor6da oo5s oo6sp o1o4v 2op. 2opa o4pab o2pak opan9d o4pa3re o7paren o4pasj o4pau o3pea ope1i opel6lø 2open o4pena o9pend o4penet o7pent o2per 6o3per. 3opera ope6rar o7pero o5pert 2opet o4peta 4oph o1pi o4piek oping9s o4pir 2opl o1pla o4p5land op3li op9lu op4na. op4ne 2o3po 2opp. 4oppa op4p5art op4pas 4oppe 1oppg op4pi. op6pia op4pis opp3li 3opply op6poe op6pr opp5rop opp5und opp1å2 2o1pr op6re op7ru op7rå op6sa. o8p8si op2t1r o4q 4or. o6r7add or3adr o2rag or1ak 2oral or5ald o4r5alg oral4st or6alt. o3r4am o4rana o3rane o4rang o4rans or6ap or3att o4rau ora3uk or1a4v 4orb orbit5 or7by 4orc orda9ta or3dea 6ordel ord7e6pl or7dik ordi4s or4d5ise ord3it 1ordn ordre8gi. or7d6rø ordsa6me. ords6e ord3st ordy9ra 8ore orear8a orear8e o5rebra o8redi or1ei or1el o4rela o6reld ore6na. ore4ned ore4net or3enk oren3s ore6o5g6 o6rerf o4rero ore1s2 o5resc ores6te o4reta or9et8n o6retv o2rev 2orf orfa6re. orfi7ne orfø9re. 1or3g4a 4orga. or3ge or5ger orge4s orgi6e5ne org4sk orha9g orha9le o1ri o3ria ori5b4 ori4e5ne 5orient o7riet o2rig ori7ka o6rim or3ind or3ink or3inn or3ins oriro8 6oris oris4a 6orit o4riti oriti6me. or5ka 3orkes or5ko orko6se. ork7s2 6orl orla7te or5le orm6al5t orm5ang or6map or5mel or4m3un ormæ9 or4nar orned5 orne6dr or5net or4nol orn3t 4oro o3roa o3roe or3off o5rog oro5i o1ron or1op o4r1or oror9da o5rosa o5rot or3ove or5ovn orpe6s 4orr 2ors ors5alt or5sen or4serk orse9ta orse7te. or3si ors5kar orsk5ei4 ors8k9l ors4ku or1s4l orsmå8la or1sn or3s2o orso9na orso9ne orso9v ors4pa ors4ten or1su orsva9re or3sy or9sø 2ort or4t3ak orta8la. or4t5and orta9pe or4t5av orte5i6g or4tek or3tem or6t5erf or8t7erm or5tii or7til or5tis 3ortod or6tok orto9ne orto4r ort5ori or4tou ort5res ort5råd ortå4 or4t3år or1u oru8d or9ude oru4h o5rum oru4t5 oruta4 or4utf orva9ra or5veg orv3s 4ory o7rya or1yn 2orø or9ø8k orøk8t or5ør or3ø4v orøv8d or1øy or5ås 2os o1sa o4sa5b o6sad o2saf o4saku 6o5sau osbi7 osefi5 o2seg o5selei o2sem os2en o6sena ose5sl ose5sm oses4sk oses6sp oses4st o4seu osfa9ta os2hi os7his osi6e7ne osi5ere osi5ert o2s1ing osk3ei oskei6e o4skil osk9lar osk5len o1sko osko5p o3skri os8k3v os2l os3le oslo1 os2lo5d4 os5lu os5lø os9ma os5me os3mo o2sn o3so os7ove os6pa. os6pe. os4pil os4por os4sek os3sem os5sens osseri7e6 osse5v ossis5te os6ski oss3kj os4s5ko oss9l os6spa oss7tro os7sty os8sv ost5adr os5tal osta5le o8ste. os4teg ost5egg os4tek ost6el os5teo o4sti. o8stia o4stie o4stin os5tis ost1o os6tons os6trad ost5ran ost3re o3stro ost5rup ost7rå o5stø os1v os5øy os7år 2ot o1ta o5tad ota4l5a ot5ald otal7ev ota4lov o9tane o9tar. ot3arg o8t9arm o5tas ote7d ot6ei ote5int otek5i ote6k7la otekla8ga ote4kle ot5elem ote5lev otel6lan otel6lek otel4li otel8lø o4tena o4t5ende oten8de. oten4s5p o2teo o4teram o4teret o6terev o4tero oter5s ote5r8u o4terå otes6ter ote5sté otet5a otet5o otet3s6 otfø4 oti7ert oti2k otika3 ot7i6ko o1tj o6tja ot5jer ot6nero otno7te. ot6nå o1to o2to. o4to3a o5toa. o2tob oto6en. o6tof ot3off o6toga o6togram o4toi o2tol oto5ne oto4ral otor5d o2tot o2tou o1tr ot7red ot5rer ot5rev o6t7ri o6t5rom o6t5rø ots5el ot6sh otshusvæ8 ot4s3ki ots6op otsopp6 ots5pr ots5tab ot7ste ots6å ot6tank ot5tas ot5tegn ot6tenk ot5tese ot5tin ot5toa ott4s3k otts5po otts4ti ot7tug ot4typ o1tu o6t5ut o1ty oty8e ot1yt o1tø ot7å oub8 oul5l oun6ge. ou4r ou7ri ou5ro ou9sa out8a ouve4 o5vae o1vak ovanfø8 ovan9o ov3anv o7var. o6varb ova9re ov5art ov7arv oved3 o1vei o1vel ove4la 4oven o4vend o5vende ove6nya ove2r over3a ove7ra. ove9ras o6verdr overe6 ove8r5es 3o6verf 3overg o5verks 5overr 5oversik overs4p over9v o1vet 6ovh 2o1vi oviso3 2ovj 6ovna ov4nes 2ovni 4ovo o5vo. o7vom ov1or o5vot ov1o2v ov5sal ov4sek ov4sen ov9ske ov4sle ovs1p ovs5te ov4sti ov7sun ovsy5k ovta6le. ovveg7i ow1 owa8 o7was owat2 ow5h ox3 oy9ar oys5l o1y2t o1za o3zy o1ø o1å ô6ra ô2re ôr5ei ô1ri ô4t ó9sa ó7t ó8v ò9re 1pa 4paa 2pac pa8cen p5ad. pa3deb p4adg pads4 2paj 6pak. 6paka 4pake pak4kas pakke4s pakk7esl 4pakti pa3kv 3pa1la pa3le pa6le4o7 pa7lim pal5in pal1j pal5lø 5palm 4palø 2pam pa5me p3anal pa4nap pan9de pa5ne pang5s6 pan3ka n7k8rea 9panne. pan5se pan5sl pant8r 4panv pa4ny 2papa pa8pa. pa3pe 4papo pap4pr 4papr pap3ri pa4ra. 5parad 2parb 4parek 4parena par5ess par5g 2pari pa4ri. pa3ris 4parki par6k7l par4kv par3m8 pa1ro 4parr par8ra. par9s4 par6tid par4tig par4tin par5u par7v parvi6 6parø 4parå p6as pasa5 pa9se pase6r5 4pasp 3pass pas5sab pa4s3t pas4tar pas5ti pas9v pa1t pa3te pa4tist pa6tre p8atta pat6tak 2patu p8at6v pau7k 2pav pa4ve. 3pa1vi 2p1b6 pba4ne. pbo6da pce6 2p1d4 pde4le. pdø2 pdø9d 1pe 2pea peak3 pe4a3re 4peb pec3 pe7d6a 5pedas 4pedd pe3de pedfø9 pedi9e8 pe6doa pe6don 4pedr pe4dro 4pedu 4pedy6 2pedø pe7då pee6 pe3er 2pef p5eft 2peg p5egg peg8ge. pego4 2peh pe4il pei4leg 2pe1in pe6ism 2pej 2pek pe8ka. pek4l pek4tro pekt7ros 8peku p6el 4pela pe5l4aks 5pelal pe5lar pel9d 4peled pe4lef 4pelei pe6lep 4peler pe6lev 6peliv 6pelj pel4lo 4pelov pel5s6e pel5s4i pel7st 4pelu pe5lun 2pely 2pelø 6pelå 2pem p1emb pe4nan pe4n3ar pen3de 6p5enden. 4pener pe3net 5peng8 pen4gel pen7gl peni4n 4peniv penly4 pen7s8a pensa7k pensa8la pen5sk pen4s5l pen3s6m pen5s6o pens4t pen9sta pen7ste pen7tag pen5tr 6peny 2penå 2peo pe7o6s 2pep pep5ar. pep7p pera3a 4pe4rab 4perad pe4rai pe4ral 4perap pera5t 4perate 5p6erc 4pered 4perei 4perek 4peresp 4perest 4peresu 4peret pe4rev 3peri perie8ns 4pe5rik peri3s4 4perit per7k8 per6les per5mu per5n 4pero pe3ros pero6se. per6regj per6rei 5perro pers6m per4tro per4t5rå pervi6k 2pery 6perø 4pe7rå 2pe1s 3pes. pe3se pe6se. pe7si pes8ka. p3eske pes4ke. 6pesl pes4n 5pess 3pest. 5peste. pes5til pe7t8 4petab peta6ka 4petal 4petas 4petau pe3te 5pete. 4peted 6petei 6petek 4petel 4petem pe3ti 4petid 4petil pe4tim 2petj 2peto 2pet4r pe4t5ru pet1s6 4pett 2petu 4petø 4petå pe2u 2pev peva8ne. pe5vi p5evn pev6ne. 4peø 4peå 3pér 2p1f 3p6fenn p3fo p5fr pfri4 pfø5re 2p1g2 pgjer4 2p1h phav2 pha9va phavs5 3p4her phe9te phe7va phe5ve phi5li 7pi3ane 7piar pi4as 7piase 4piav 4pib pi6ca. 2pid pid3s2 pie2n 6piend pi3er. pi9ers 2pif pi9fr pig5ge pig6g9u p7i6gj 2pih 6pii pi4keh pi6kel pike5r6o pi4ké 8pikk pik3ko 4pikl piku5 pi5la pi6la. pi3lep pil4lag pillba6 pil6led pil4leg pillega6 pille6ra pil4le5s6 pi1lo 2pim pi4na. pi4ne. pi9ned pi4nel pine4v 3ping pin6go ping3r ping5sk 6pinns pin4sl pi2nø pio6n5an pion5s 7pi2p pi4pi pip9la p8pip pi4rar pi4res pi4rut pisi9e pi4ski 2piso piss4l pis4sp pis4st pis1t pis4t5r pis9t8ra. 1pit pi9ta pita7la. pi5té 2piti 4pitj 4pitr pit5t 2piu 2pi5v 4piø 4p5k4 pka5v pka8va pl6 8pl. 2plad pla8de. p4lak p4lan. plan7de 4plane. 4p5lan5g plan5s plap3 4p1lar p2las pla4st p2lat platina5 2ple. 2pled p8legi 4pleis p2lek p6le5n4u ple5n4a ple6r5u ple8se. 4plev p2li 4plit p3liv pli7va plo4gj p4lo8i p1lok 4p5lov plu4e p4luk plun3 plun6d7ri p1ly ply5d8 plæ5re plø6pa p1lå 2p3m 2p1n4 p7ner pne6se. 1po po9a pod8 po6da. po4de. po6em 2pof po6f7r pog6 4poh po5id 2poke po6lan po3le po4lek 6polj pol5li po6lom pol6s4ka po2lu 2pom pom6p9u pom5s 4pon. pon5d pon4gr pongs6 2pon1s pon5sa pon4sv po2p1a po6pe. p5opn pop1s 2por. po1ra 2p5ord po1r4e po4ref po6reg po8ré 2p1org 2pori 2pork por6s7v por4tor por4t5ro por4trå 2porv po1ræ po1rø po4se. po4ses 4posj po2st po4sta pos5tas po5stat pos3te 4pos4v 5pot. 7pota potak9 po3te po4te. potek5l po5t6ha 3poti 4potr 4pou 2po4v pove6 pover6n pow4 2pp p2pad p2pak pp3akt p2p3a4l p9pane pp5angr pp5ank p4p3anl p2pap p9par. pp5arr p7past p4p7at p4pee p2pe5i4 ppel5s6 p4pena p8p9ender p4pendr ppe9nes ppe5p8 p4penø ppe5ra p7pere. p4perkl pp7e6sen pp9esn ppes8ti p4peta pp5e4tas p4pete pp5ett p2peu pph8 p1pi pp1id p2p1il pp5im pp3inf p4p5inn pp7ir ppir8re. p4pist pp1j pp3k pp1l pp5last pp3led pp5lei pp9lev pp5n pp1of p2pol4 pp3old pp5om p2p1op pp3ork pp1ov pp5p pp1r pp5rei pp5rin pp4ris pp7riss pp9riv pp9ro. ppropri6 pp7rot pp1s ppse6te. pp3ska ppska9k pps2p pp9spe pp3spl pps2t pp7sto pp7t2 p2pu pp1uk pp5ut pp3ø4 ppøs8 p6på pr6 4pr. 4prad 3praks pra7li 2pran pran3s 5prat. 5prate pra5te. 4pray 5pref prei7er. 4preii pr5elem 1prem pren4s 1pres 6pres. pres6sak p6restas pre7t6en7 4prett p3rif pri5ke pri4l3e 4pring 5prino 3pr6in6s5 3pr6in7s6e 3pr6in7s6i 1pris pri6s5k pris3t 2prit pri9ve 1p2ro 8pro. 6p7roc 3prof 4prog. 4proge 4progl 4p3roi p5rop. 3pros 7prose 6pru prun7ge pru5ta pru5te 6prør prørs5t prø5s4 5prøv prø5vels 2prøy 4prå prå8da pråk3i prå4ko pråk5k6 2ps p1sa. ps5a6n p1sc p3se. psei8ge p2sek p2s1el ps5e4ly p3sen. p5sens p7ser. p5sete p5sets p2sh p6sib ps5ins p7sis p3s4jo p4s3kil ps7kjen p2s1ko p7s6ko. p3skod p5s4koe p2sle p9s8lo. pslø8va pslø6ve. p3s4lå p2sm psmå8la. p2sn ps4no ps1o p3sod pspi9la ps5ple p3s4pre p4s5pro ps5pu ps3s2 pst2 ps7tal p4s5tem ps3tv p5s6tå psu4r p3s4us ps1v p2sva p2sve ps4ving p4svæ ps5w psy3ke 3psyko 4psys p2s1ø p3s2øk psø4ke. psøy8 psøy9ene ps1å 2p1t pta8la. pta4le. pt7ark p3te pte6k pte4ma. pte7re p5ti pto7g p4tou ptus5t p4tut 1pu pu4br 5puc 6pu6dy p5ugl pu2k pu7la pu8le. pull6 5pum pu4ma. punk4t5 punk5t6e 2punn 2pur pu4re. pu8rea 3puri 3purk pur5u pur3v pu7sa pus4h pusl7u pu1ta pu4ta. pu5tas pu5ter pu5tev 4putg 2puts put6tr put4tu 2putv 6putø 2p1v pver7 pvi4se. py4dr py8o 3pyra py1re py1ro 6pys py6sa. py4se. pys6t 4p5z 1pæ pæ4re. pø1kj pør4ret pø8sa. pø9ta pø9te p1ø2v8 5påb på4by. på1k2 1pål på4la. på4le. p5ån på3pe på1pl p1åpn på1r 1pås på7sko på5sm på3t2 6påtå7 1påv qa5 qu2 qu9ar. 1que que7r 4raam 4raar 4rabis ra1bo4 4rabr 2raby ra3cet ra3ch 5raci ra3d2a 4radf 3radio3 4radir 4radj 2radm 2ra1dr r3adre rad2s3 radvi4 ra5ede rael4 4raerk raf4fer ra4fiu ra2fj 2rafo ra5fo. ra4fos 2rafr ra5fre 6raft ra4fu ra6fy ra7gea ra5gee 2ragl 2rah6 7raid ra5int ra3isk 6r5akad ra9kar ra7kel ra5k6ha r2akk rak4kel r6akr ra5kro 2raks rak6sa rak3s4e rak6se. rakst6 4rakti rakt3r r4a5ku 4rakv ral5ans 6ralbum 5ralds 4raled ra5leo ral3g 4r5alge 4r5algo rali5e6n ra4lin ral1j ral5le ral7m ralo6i ral3op ra5ly 4ralø 4ra5l8å ra4mag ra4mas ram3b 6r9ambi rambu9ens 6ramed 4ra4mer ram8et. 4ramil ram1o ramperi8 ram6p3u ramse8te. ramta8la. ramta6le. 4ramu 6ramy r4an. ra4naa 6r3anal ra5nar ran9cs r4an9de. r5andel rand3r rand5s6a r4ane 4ranfa ran5ge 6rangi rang5st rania8 ra6nin ran3kv 2r5anl r6anli 2r1anm r4ann ran6n5ett ran4n5in rann3s4 rans7kar 4ransv ran4tik ra5nu ran6ut 4ranø 2rao 4rapa ra4pel 4rapin ra4pir ra4pis ra6pit ra1pl 4rapo ra4pos 4rappa 4r5appl 3rappo 2ra1pr 4raps 4rapu 1r4ar. 2rarb 7rarbeh 4rarea 4rareg rar5e6l 4ra3rep rar7eta r1arg 6rargu 8rarinna 6rarinne rar8ka. 4r1arm rar8ma. 6rarn 4rarr rar3re rar5s 2r1ar5t rar6ta. ra3rø 4rasa 2rasc ra3sea 4rasel ras3h raska8ra ras3ke ra4ski ra7s6ko ra6sl rass4l ras7st 4rasti ra5s4til 4rastj rast5re 6rasty ras7v ra1ta ratak9 r6ate ra4te. 6ra5teg 8r7a6teli 4ratfe ra1to ra1t4r ra4t5ro ra4trø ra5t6røy rat5tel ratte4s 4ratub rat5ut 6raty 7raud raud3s 6raug rau6ga rau6ge. 4rau4k raus6s 2rav 6ravd rave5s4 4ravg ra1vi r3a4vis 4ravl rav8l9ut ravlø8pa ravlø8s rav6r 4ravt ra5vy ra3vør 4raw raz5z6 2raø raøy4 2r1b8 rba3d rbe2d rbede4 rbed5en rbed5et rbed9ra rbie8 rbi9er r2big r2bik rbist6 rbis5tr rbo8di. rbo4ni rbon7s rbo5re rbra5s rbrei6 rbu5en r5bø r1c 4rd r4dab r5dag rdag4s5 r5dah r4d5ak rdal4 r4dala rda4le. rdals5 rda4mes rda8n9o r4dant rd5anta r4d3arm r4d3art rd5atl r4datm r4d3au rd3d2 r6dedi rde4en r3defi rd5e4ge rd1ei r9deka r4dekl r4deks r6delo r6demi r7dena r6d7eng r6d7enh rden4s3 rdense4 rdenta8le. r4deo r6depo r4derik r4d5erst rde6sm rd3e4ta r6d7ett r8dé rdfes5 rdi3an r4diana r4dians r6diau r4did rdi3e2 r2dif rdi6gres rdig3s4 r4dika r4dikl r4diku r2dil r6dimi r2dio rdi3ov r4dish r2dit r2diu rd5je r1dju r8d7m rd3n rdnæ4 r9dob r4d5o4d r4dol rdon8na. rd1op r6dor rd3ost rd1o4v rdover5 r9drad r3drak rd5ran rd7rara rd3ras r3drei rd3ret r5drev. rd1ri rd3rot rd3sei rd8ske rds4kv rds5tan rd3sto rdsto5g rds7tre rds7tu rdsva9r rd5t rdta8ka rd5tr rd7tø rd3und rd5ve rdvi8ka. r4dyg rdy5pe rdy3re r6d7yt r6d5æ r7d6ær r7d6æ5r6e rd1øs6 rdø4ve. rd3år rd7å6s 1re. 2rean re7a6r7an rear5e 4reav 2reb 3redak 6redam re3def re5den re3des re3di 3redig r1edl 2redo 2redr re4d5ri red5sku red4sl reds5la red7s6led 3reduk 6redy 2redø 2ree re4el. re3er 8refa 4reff 4refi 2refj 6refos 6refr 4reft 2refø 4regar rega7ta re3ge 4regeb re5gel 4regen 4reger 4regg 1regi re4gia re4gil reg1l 2regr 4regub 4regud 2regå 2reh 2reid 2reie 2r1eig rei8ga. rei8ge. 4reik rei9l rei5na. rei7nas re5inde rei5ne. rei7nes rein6skj re4inva rei9ra rei5sa rei3si rei7ska reis6led re7ism rei7v4a rei5ve 2rej 6rek. re5ka. re5kav re7ken 4rekj rekk6an rek4k5v 5reklam rek4led re5k6lir re7ko 4rekob 4rekom 4rekon 6rekos 4rekra 3rekru r3eksa 6reksp rek4ter 4reku r8el. re9la 4relag 9relandsk. 9relandske 2r2ele rele8ge. r4e5lei 6relek re7len 7relene 6relg r3elit 4re3lj r2ell rel4lag rel6land rel5led rel4lev 5r4elm rel5ses rel4sk 4re1lu 4relv 2re5ly 2relæ 2relø 4re7l6å relå7r 2rem remann6 r1emb remi6ene remi6l re7mis rem9ji remmed5 6remn rem8na rem5p4 rem1s remti9da 4remu 8remy 4remå 2re3na ren4del 4rendr 8rened re5neg re7nei 4renek r3e4nel 4renest 6renet 6rengd reng5l 4rengn reng5st re5ni 2renk ren6kl r3enl ren8ne8sl rennes9la re5no ren5sa r3enss 6r7entit 4r3en5tr 6rentu 4renu 5renz 6renæ 4renø re5og 2reop re3o2r 5reou 8repen 6r5e6pi 1repu 6repus 1rer 6rerad 6re9rang 4rer6at re5re. 4rered 4reref 4rereg 4rerei re4rek 4rerent 4rerep 4rerese 4reresu 4reret 6rerfa 4rerig 4rerik 4r3ernæ 4rerol 4rerom re3ros rero6se. re5rot 3rers rers4p 4rerute re6r7øy 2rerå 1res. 2resa re2s3c re3se 4resel re4sem 4reset resi7ere 4resin 2resj 2resk res5ke re6s7kje. res6kl res7kod re6sky 6re1sl re4slu 1resm re5smo re3sov re9spe 4respi 4respr 2ress res4sal res4sek res4sit res4sj res6sk res6sort res4sp res4st res4sy res9tane 5restau res6t5erv res4tes res3té 4re3sti res4til re3str 4restre 7restv 4re5sty 4restå 1resu 6resuk 4resun re3s4ve re3svi 2resy 2resø 4retaki 4retal re4tap 4retea 8retek. 6reteke 4retekn 6retel 6re5tem re5ten 4re5ti 4retj 4retoa 2re5t2r rets4i ret4st ret7ted ret5ter rett8o rett6set 4re5tu 2rety 2retø 5retøya. 7retøyets 4re7tå 2reu reu6r 4revak re5van reva5re. 6reveg 4revei 4revel re6v7enh re5ver reve5s r3e4vig re4v5inn re7vom 1revy re4v5åp 3rew 2reå 2r1f rfa5re rfat5 rfe8en. rfe8er rfe4et. rfei5li r4fik rflå3 rfe5m6ø rft2 rfu8se rfyr4 r9fæ rfø8rarar 2r1g r5ga. rga8le. rga8li rg5and r7gann r4g5anv rga3ri rg3art rga4ve. r6gedi r4gef r2gem rgent4 r3geo r4gerei r4geret r4ge3ru r4gesj r4gesl r4gesta rgi1a rgie4n r2gik r2gil r2gim r2gio r2gir rg3i4ri rgi7sl r2giø rg2le rg5le. rglem5 rg3len rg3ler r2gn r4gog r3gom r2got rg5rab rg3rea rg3rel rg5reps r6g5ri r3gru rg5sc rgs6kor rg5s4le rg1sn rg5s6till rg5sto rg9stu rg2sy rgu7d rg6ut rgå9as rgå6va rgå6ve. 2r1h rhav2 rhavs3 rhjul8s rho3d r7hu rhø5re rhånd6s9 rhå9ne ri1an 4rianf 4rianl 6riansv ri1ar 4riarb 4riarr 6riau 2riav ri4ava 3ri6avo 2rib ri2b3l ri8ca. ri4co. ri5da 4ridale ri5der ri5di 2r1idr rid3t 4rieie 4rieig 4rieks ri1el 6rield 4rielem 6rielim riel4la rie4n ri3end 4rienh 4rient rien5t4r ri1er rie5ra rie5ri 4rietat ri5even 2rifa riferi9e8 rif4fi rifiserba8 6rifj 1rifl rif5la 2rifo 2rifu 4rifø4 ri4ga. rig4gr ri3gi 4rigj 4rigre rig2s rig6s7t 2rih 2rii 2rij 5rij. ri4kali ri5kan 5rikd ri3kes ri7ki rik7ken rikk5j 4rikl ri8k9la 2ri7ko 6rikon 2ri1k2r rik4sk rik4s5u rikt6 rikts3 riku6m ri3k4v 4rikå 2rila 6r5ilde 6riled ri5lei ril6lest 2ri5lo ril4sn 2rilø 4rima ri9mab ri9mar 6rimes ri5met 2rimi ri4mi. 7rimis rim7l 4rimm 4rimo ri4mor 4r1imp 4rimu rim9ut 4rimy rina5l ri5n6am 4rinas 4r5inc 4rind r3indu ri4nee ri4nes 2r1inf rin7gom ring3r ring4sa4 rings5ak ring8spa 2r3inj 2rink 4rinn rin9nes 4rinor 2rins rins6k rin6sm 2rint rin4t5j rin4tr 2rinv ri6nø 2ri1of 6ri3om 2ri1op 2rior rio5s4 riot3r 2rip 4ripe ripo4s3 4ri1r 4risau 4rised rise5i 6risek 4risel ri4seli 4rish 5risiko 2risj ri6sju 4riska ri4ski 6risku 4risky 6ristad 4ri5sted ris5tik 4ristil ri4sto ris5tof ri5stun 6ristø ri6stå 4risv 4risy 4risø ri3te 6riteo ri7ti riti9da 4ritil 4ritj ri5t6o ri5tr rit1s6 ri6tun 4rity 2riun riu4r 2riut 4rivar ri6ved rive9ge ri5vei 4riverk 2rivi ri4vi4s riv5ise 6rivo 4riøk riø4r3a 8riøya 4riå r1j rj7ambi r4jere r2jes r4jeti r4jetr r4jetu rju6la 8r1k rk3akt r6kanf r4kao r4kapr r6katr r3ke. r2keh rk5eik rkei8ka r6kek r4kelo r4ke3lu r3ken. r4kenav r3kene r4keni r5kens rke5ri r4keris r4kero r5kers r4ke3ru r4kerø rke4se rkeslø7se r9ket. rk4han r3ki rki3d rki3e rki4vi rkjek8 rk5jor rk1k2 r5k8led rk2li rk5lun rk9lut rklæ5re rk2lø rklå9ra r3knek r5knep rk7nes r3kno r2kob rko6b5r r6kofo r2koh r4kola r4koli r4kope r4kora r4koru r4kosel rko6sele r4kosj r6k7ras rk5rei r5k6rem r8ks rk4sar r6k6seg rk2s1i rk4ska rk1st rk6stal rk4sten rk4s5ti rk4stj rk4sto rk6s5vi rk5ti rkti4s rk5to rku4le. r6k7u6t r4k5ve6d rk5vei r5kvel r4kver rk3ves rk5vik r4k5øl r2k3øy rk9øys rkå4k rk5åke rkå6pa rk5å4s 2r1l rla4te. rle4a r2lef r3lep r4l5e4ri r6le7sl rle4st r4lesu r4leu r3l4i rli9ke rling3s4 rli8ta rli4te. r3lj rl6o rlog2 rlo5ve rl4sk rlu4e r3ly rlys7k r6l5z rlø8pa. r5løy9 2r1m rma6ge. rma5k4l r4m5alte rm3anl rm4ans r6manv r4mare r4marr rm5av rm3b r2me7g r2mek rme6lap rme5ne r4menet r6merev r4mese rme9tar r4mey r4m5ide rmi6ene rmini6 rmin5ski r6m5inst rm5i4v rm1je rmlø8pa rmo4e r2mof rm1op rmo7st rm7p rm5s6ko rm1sl rms6n rm1st rms5til rm1su rmta8la rm3te rmu7an rmue4 rmue5ne rmu8la. rmu6le. rm5øy. r9må. rmål4 r6m5åp r9mår r6m7åta 4rn r3na r4n1ak r4n3ald r6n5appar r4narb r4n3art rnat7r r4natv r6n9a6vis rn3avl rn3d rndø4 rndør5 r3ne. rne5a2 r5neboe r2nec r4nef r2nel rnele6ge. r3nell r3nels r4n3eng r4nenh rne7p r4nerei r6neris rne3ro rne1s2 r5nes. rne6se. r8nesi r4ne3sk r4nesm rne3so rn5e4tab r4nete r2nev rne5vr r2nés rn5g6 r4ninn rn5k4 rn3n r5no. r4noa rno5b r4nod r4noi r6nok r2nom rn5omn rn3oms r4n1op rn3ork r2nos r4n1o4v rn7se rn4s3in rn5ske rn3skr rn5sla rnsle7ge rn7s6mi rn6s3ovn rn5spon rn3s4pr rn1st rn4sti rn3te rn5ti rn7tr rntre4 rnt4v rnu4 rn5ug r6n3ut r7nøt r4n5øv rnå8le. rn3ås ro1ak roa4s ro5asi 9roban 9robar 1robe ro4bed ro4bef 5roben ro4bes 5robølgj 1roc r3odds 7rodo ro5end ro7ens ro7fa ro4fel ro4fem roff5ri ro7ga. roga9ta ro7ge. rog5ret ro6gry rog1s4 ro2gu 1roi ro4kel ro5ki rok6kat rok6keri rok5kl rok4kom ro7k6l rok5n rok7s rok8se. rok5v roli7ga 4rolj rol4lab rol4lap rol4leg rolle8ge. rolle8se. rol4lis rol6ly rolo9v 2roly ro6mak ro4mal 3ro5m8an ro4mate 2rom7b 4ro3me rome5d 4romk 4r3omn ro4mor 2romr rom5sla r7omsy romsø3 rom3t ro5ne. ro7nim 6ronism 6ronista 8roniste 6ronisti 4ronn ron4na rono5s ron1s4 ronta6le. ro4pad 5ropet ro4pia ro8pla. 2ropp ro9py ror3a ror6da. ro3re ro1ru ro4sat ro5sel ro3sen 4rosl ros3la ro4sm ro6sov ro1s1p ros4st ros4sy ros7tas ro3sti ro3str rost7rø rot5ekte ro5tes rote7ster roti7ka rot5ord ro5tu 6roty roun2 round3 ro5ut ro5va. ro9vare ro7vas ro5vek ro7ven rove5re rov5sm rovve6 rò6te. 8r1p r5pa r6parb r5pefo r4peno r6penø r5pesk r5pet rp6j rp2l rp3lad 4rp3n rprø5ve r3pu rpun7g r6p5ut. r6p5øy r2påk 8r1r r8raa r2rag rra3r r4raro rr3d rr6e r4reb r7rebart. r2ref rre7int r4rekl r5relat r4reo r4repl r4re3ru rre5sk r4resm r4reso r4respe r3ress rre4st rres5ta rre7sti rre5str rret6s5 rre5u r3ri rri6ka. r6rip rri5v rr3m4 rrmå8la rro6e r5rom rro8sa rro8se. rro8ta rr5s2 r2r3un rr5v rrå5de 4rs 6rs. r1sa rs3ab r2s7ad r3sak rsa5ka r6sakt rsa6la. r8s9ald rs3all r5sam r4sarr rs3arv r1sc 5s6ch6l r8sedi rse6g7 r4seku rs4ela rs7eld r4seli r4s3elv rs5e4rik r3ses r4sesi r6sesu rse4te. rs6ett rsett8o r7sim6 rsimp7 rs1in r5s4ing r4sins rsis5t r7sja r4sjh rsj3or r3skad r6s7kaf rs4kam r3skap r4skar. r4skas r4ski r5skil rsk7inns r1skj rs5kjens r6skl rskla8g rsk5lar rs4k5le rs4k3læ r5sko. r5skoe rsk3op r4skor r3skot r1skr r4s3kra r5skriv r4s3kro r1sku r5sku. r5skue rsku7et rsk5und rsk5var rs5kys rsk5ø rs4lef r4slei rs4lek rs4les r5s6lit rs3lok r4slun rs4make rs4mo. rsmål4 rs6nev r1so rso9a rs5oml rs8o6n5 rso7n6al rso5n8e rso5n6i rsons4 r2s1or rs5ord rso7ris rs1ov r1sp rs4pan rs6pat r5spel r4sper r7spes r5spi rs4por r5spred r4spå rs3s6 r1s2t r4s5tabb rs5tank rs3tap r6st7b rs4ted rs4tem rs5tend rsten6s rs5ter. rstev9na r3stil r4s5tilf r4s5tilh r4s5tils r4s5tilv r5stis r4stit r6st5k rst4r rs9tre. rs7tree r4strin r4s5tro r5strø rst7ut rstu9va rstyg7 r3st6ø r7stå rs5ukl rsu9r rsu7sa rs5usi r1sv rs8vak rsva9ra rsvar4s5 rs1ve r3s4vek rs5vit rsy4na rsy3t r1sz rsøks3 rs9øye 6r1t rt5ad r4t5af rta4ka. r4tana rt3anl rta9pa r4tarr rt3art rt3avs r4tec r4teda r3tede r2tee r4tego r4tegr r4teie r4te3in r4teka rte6ke. r4teki r4teku rt5e4lit rte6ma. r3temp rten4s5k rtentle8 r2teo r7t6er r5terd r5teres r4teris r5terk r4terå r4tese r6tesk r6testi r4teta r4tete rteus8 r4tev r4th rtian8d r4tians r4tiar rti8ar. rti5en rti6gra r4ti3kv r4tila r4tili r4tilo r4ti7na r2tio r2tip rti7sa r6tiska r4tiski rt6i9so r4tisp rtis3s r4ti5str r3titu r2tiv rtma6le. r5to. rt3off r9tofo r9tok. rt3omk r4t3opp rt6opp. rt3ord r6t7o6s rt1o4v rt2r rt8ra r9tre. rt6red rt3reg rt3rei r4t5reko rt5rel rt5rep r7trib r4t3ris r4t5ros rt3rut r5t6rål rts3ar rt4seg rts5eng rt2si rt4s5ja rt5ske rt3skj rt5s4no rt3s4pe rt4sti rt7s6trek rt4s5tøy rts5unde rt3t4 rtu6en. r7tug rt3und r2t1ut rtu8ve. rty8da. rty8de. rtyr5s rty6ra rt5yt rtæ9ra rt5øl r6t5ås3 ru3and 6ruav ru6avh rub6a ru8bl ru5bo ru4di. rud4r ruds4l ru4ele rue4r rue3s4 ruga8l ruga5t rui3d6 4ruk ruk4su rukt3s ru9la 4ruli 6r7ulk rul8ke. r2ull r7ulv r4um rum3al rum4p9l 5r2unde run5del 6r3under 7r4under. r5unders rund3r rund3s4 run6ge. 4ru2ni run5kr r7uly ru4nøy ru2r ru5ra ru8ran ru8rar ru9rer rur8ta r4us rus2h3 6r7u6sik rus5j rus7lu ru1s4o rus5sel rus4st ru4s4t3r r4uta ru3tal ruta8la. r7utan. r4utbe 4rutd rut8e rute3i ru4tel ru9tene. ru9ter 2rutg r1utk rut9o 6rutr rut4re ru6trø rutto5 2rutv rut5ø ru5va ru4ved ru4veg ru4vei ru4vel ru4vere ru4ves ruvi8 ru6v7is 2r1v rv4a rva7ka rva6la r8v7arb rve3de rve4den r4ve5dr r4vega r4vegi r4vegr r4veim rveis7e6 rve5kl r4vela rvel9le r4v5eng r5ver. rve5re r2ves r2vev rvil9l rville9d rv2j r4vos r4vov r3vr rv2s1 rv5ung rvå7r 4r1w rx1 ry1a4 ry2dr ry7fe ry5fl ry5ke. 2ry1kl ry7le ryl4l5i8s 4r5yndl ry4nes ry5nes. ry4pa. 2ryr ry8re r1yrk ryr4ke. ry9ro ry5rø rys6sal ry5ta ry4tek 1rytm r3ytr r4z ræ7le 8r3æ4re 8r3æ4ren rær5in rær8t ræ8v 2rø. rø8ar 6røb rø4be. rø4dek rød1s 4røep røf5l rø4ke. rø4kero røk3l 4røkn røk5s4 røk7t røk1v 2røl rø6m røm1a røn5nes rønn5s4a rønn5sk røn5sko 5r6øntg rø4pe. røp9l 1rør rør5d6 r6ørende. rø7ret 5rørl rø2r3o rør4sp r8øs. rø3se rø5sla røs5v rø8ta røt9as rø1va rø5vede rø9vers rø1vi r4ø5væ 2r1øy. 4røya røy9ar røy6ed røy6ene røy5es røy4et 5r6øyk 3røyr røy5re røy8senes 6røy4s3k røy4st 2rå. rå7a 4råag 4råb 3rådet rådy9ra rå9ene 2råf 4rå5g4 2råkj råk3re rå2k3u råk1v 4rål råle7s8 rå4let rå5let. rå5lu r5ånd rån6da 2råp 2r1år rårs5k rå5ru rå1s 4råsb 2råse rå5si 2råsj rås4t 6råta råta8ka. rå5tr rå5tu 2saa 5saa. sa4ba. s6abe s8abl sa5bok s3abon sa5by sa3ce sa4dag 4sadam sa4dere 4sadm sa4do 2sadv sae5d 3saen 7saer 5safa 1safe 4s3affæ 5saga sa4ga. sa4gas sa4gat 6sagent 6s5agg 6s5a6gi sag8na sa6go. sa4gog 2s1a2gr sag3s4 sa3ik sa5ir sa1is 5sak. sa2ka 3saka. 4sakad sa5kai 3sakb 3sakd 3s4a3ke 5sakf 1sakh sakh5e 1saki sa4kj sak5kr s4akky 5sakl 5sakm 4sako 3sakp sa1k2r 5s4aks. sak4s3i 4s3aksj sak4sp 5saksr 5saksu 2s1akt sak6ta. 5s4akto s4aku 4sa7kø 1s4al. sa1la 4s5alarm 7sala. 5sa5lat 4salb 1sa3le sa9let 1salg s4alge 4s5algo salg6s5 s6ali sal4mes sa5lo 5sal2s3 sals4a 4salter sa1lu 3salv sal5ved 2saly 1s2am 5sam. sa2ma sa5ma. sam4an7 sa5mas sam5ei sa4mel sa4met 5saml sam4lev 5samm sammen5 sa4my 4s1a2na sa9na. sa7nar sa3nat san6da. san7d8al 5s6ande. sand5r sand5s6lo sand5st san4d5ø 1s2a5ne 4s3a6nek 5sang. 3sange 4s3angr 8s7angst s7anken 2s1anl s5anm san5ne 6sanno sa2no 4s5anor san5os san1s 5s4ans. 4sansa 5s4ansen san7s6k 4s5ans8l 6sansv s8ant. san9te 6santr 4santy 4s1anv 2s1ap sa2po 1s2ar. 1sara 6sarab 2sarb s4ard 9s8are. 4sareal 4sareg sa5rev 3sari sa4ri. sar6ka. 4s3arki 2s1arm sar5me sar8me. s1arr 2s1art sar4ta. sa4ru 4sarv s4ary 1sas 8sasju 2s1a4sp 4s1ass s6ast 4sasty 2sasu 4sasy 1sat sa1ta sa5ten sa3ti 2s1atl 4s3atmos sa1to 4sa5t6r s5atsk 5satt. 4s3atta 6s5atten satte4s 5sau. sau4d sau5di. 5saue 4saug sau6ga s3auge sau6ge. 2s1auk 5saum 3saus 4saut 2s1av s2ava sa4ve. 5s6a5v6in sav5n 3savu 8s9b4 sba4ne. sbi6e sbo4da sbu6et s6bug sbul3 sby8ta 4sca 5s4can 1sce 2scel s4cene s3cer 6s6ch. 8schl. sch8m 6s7cl 4sco. 6scoc 4scos s4cus 8s9d6 sdag4s5 sdam9p sde6le. sdu8en. sdu8er sdø8v 1se 2se1a 3sea. sea4g se3an5d se7ansa sea9re 5se4au3sk 2seb 4sec 4sedag sed5d se3de 5sede. 5sedl 4sedo 2sedr 2sedu 6sedvanle 2sedø 5see. see3d 2seef 2seeg se6e3i se3e4l se5en seer1 5sees 2seev 2sef s1eff 4s1eft 6sega sega6l se2ge se6ges se3gev seg8ga. 9segl. 7seglet 3segm 4s2e7g8r 2seh 2seid sei8dan sei9den sei8e9nes s5ei4et 2seig sei6ga. sei5ge sei5k 3se8il 6seim 2sein se3ind s3eini se6ink se3ins se3int sei5r 3seis 2sej 5sej. 2se5ka 3seke 4seki 2sekj 5sekk sek4kes 2sek4l 4se3kn 2seko se2k1r 4sekra 4sekri 4sekro 3s4eksj 4seksp sek4st sek2t3an sek6te. sekte9ra 3sek5to 4seky 4sekå s2el 2sela se6la. 3selak 5selane 5selar sel5art s3e4las se6l5at sel1d se4le. 4se5led 6selega 4selei 4s3elem 4seleng 4seles 4s3e4lev 5s6elg 4selik 4selil 4selis 4s3e4lit sel6løp 2selo 7selol se3lom 3sels sel4sin 8s5elske sel9s8lag sel4spo sel5t6 2selu se6l7u6r sel4v5ak sel4van selv3e4 sel4ve. selvei4 sel4ver sel8vin 2sely 2selæ 2selø selø8pa. 6selå 2se3ma 3semb 7semd se5me se4mi. semini6 2s1emn sem4na 9semnd 2semo sem5pe 2semå s2en. se5nak 6senau sen9d8a sen6dela 6senden 4sendr s2ene 4sened se3neg 4senem 8senesa 6senese sene8se. s5engas 2s1enh se6nin s3enkj 5sen3n s2ens 4s5ensem sen6s5end sen4sj sen3so 7s6ent sen5ter 8s7en5trep 4senum 4seny 2senæ 6senø 2seo2 7seod se3or 2sep se3pe seperso5 3sept s2er. se3ra 4seram 5seran 4serap 5seras 6serau ser5d s2e5r4e 5sere. 4serea 4sered 4seref 4sereg 4serei 4serek 4serel 4serenn 4serent 4serep 4sereso 4seress 4serest 4seresu 4seret 4serev s1erf s2eri seri6e5ne 4serik 4serkje 5serkr 5sern ser7nev 2se1ro se4rop se4ror se4ros 9s6ert ser4tak ser6tat ser4tr se1ru 4serul se4r3un ser4ved ser4vel 2sery 2se5r6ø 2serå 5ses. ses5ald 5sesals ses5alt 4sesc 2sese se4sene ses5in se3sj 4sesje 4sesjuk ses5kal ses5kar ses5kv ses5lit se3sna 5seso ses3pr ses4s5in se1st 5sest. 5seste. 4sesto ses5un ses1v 2sesy 4sesø ses3å 3s2et. 2se2t6a 3seta. se5tae seta8ka se5tar 6setea 4seteg 4setei 4setek se7tel se4tera se5tero 4setes 2se3ti se8ti. s3e4tik s3e4tis se8t7ja 4setje 5setje. 7setl 5setn 2seto 2set6r s4ets s5etters 2setu 2setv 2sety 6setø 3seum 4seun seure9ne seu2t 2sev seva6ne. s8e5var sev4d sevi4sa s1evn sev4ne. se3vr 3sevåg 2seyn 2seø 2seå 1sé 2séa 6séb 4sée 4séf 4séj 4sék 2sél 4séo 6sép 9sér 4sés 2sév 4s3f sfa4ne. 6sfe sfe6et. sfes5 sfisken8 sflå3 s5fo sfo8ra sforlø9 sfra5s sfri5e6re sfyrs5 5s4fæ sfø9ren sfø5rer sfø5ri 6s9g6 sga4l sga8va sga4ve. sgen9s sge4st sgå4va sgå4ve. s1h 4sh. sha2k s7hat s3hau 6she shea4 s5hei5 7sh6e4rif 8s5hett s4hi. s6hip sh5isk 4shj 6s7hopp 3short 5show 6shs 2shu 4s5hy s5h6ø shø8l shø6va shø6ve. s7hå 1si sial5v6 4sia5m si7ans 4siap 4siav si2bl 3si2da 3si4de. 3si3den si4de5o s4ider si5der. si4dete 2si2do 4s1idr sid8ra 4sidy 4sieg si1el sie4n si5er. si6eren sie4s si3est 6sife si3fl 2sifo si4f3r 2sifu 4sifø 3sig siger4s 4sigi 4s3iglo si5gr 4sih 3sik si3ka si5ke. sik2h7 sik4ka sikk8artet sik4k5el sik4ko siko3 si4kom si4kop si4kos si4kot sikt4s3 s2il 5sil. 3sild sil4del sil4der sil4des sil5j sil2k sil4les 2silø si6mel 4simet 2simp si3mu 4sinde 4s3indu si3nek 2s1inf sing4s5a4 7singu si4ni 4sinj 2sinn 3s4inn. 7s4inna s6inne. 5sinnet s3innh s5innk s3innl 4sinnt si5nob sinsk5e 2s1int 4sinv si6nø 4si5ov si4pa. si8pe. si6re. si7ren si4ri. sir8kl s2is si5sel si4serf sis5e4v si6sin 6sisju si4sk sis5ke si4sn si4s5te si4sti sis3to 4sisy 3s2it si5ta sit8ji si6t7ra si4t5re si4tri sit3s4 sitsva9 sit6term sit4tes si4umf 4siut 5siva si9van si6vek si8vi. si9våt 1sj 2sj. s2ja. 8s5ja9g 7s8jakk. 4sjam s4jan 4sjanl s7jarn 2sj3av 6s7jaz 2sjb 6sjd 5s4je. sje4f3i sje4fla sjef5t sje3g sjek4t5o 3sjel sje4lev 3s2jen. 5s2jene 4s3jent 5s4jer. s2je5s4 5s4jet. sjet4ti 2sjf 2sjg s6jim 2sjk 2sjl 2sjm 2sjn 2sjob 5sjok 4sjom 9sjon sjons7 2sjor 2sjou 2sjp 2sjr 2sjs 2s6jt s6j3t6sj sju1a 6sjub 6s7jug 4s5juks sju8la 4sjun 4sjur 2s7jus 5s2jø sjø3k6 sjø1p sjø9rø sjø1s2 sjø3t8 8sk. 1ska 2ska. 4skab skabe3 s2kad 8skae 4s6kag 2skak 5s4kal8a ska5lar 2skam s4kaml 8s7kamp 4s5kana 4skande 4skane 4skano 6skant 5s6kap. 9s8kapa. 4skapas 5skapen. 6skapit 4skapp 2sk2ar sk5arab sk7arbe 5skard 4s5kark 5s6karp 6skars 4skart 3s8karv 2skas 4skate 8skay 4skb 6skd 2ske s4keda s6kedo s2keh s6kei skei5er. s8k5e4lev s6kelik skel3t s4kelu s3ken. s4kena s6kenav s4keno s5kens 5skept s5ker. s4kero s5kers s2ke1s ske3si skes4m ske5sn s4ketet s3ke4t3j s6kev s2key 2skf 2skh 1ski 5s6ki. 7skia 4skid 5skie 5skif 5s4kik s6kill 5s4kilt ski6net ski4nin 5sk8inns5 4skino6 5skiol 5skip 2skir s4kire 6s5kirk sk5irs s6kis. 7skiss 4s5kist 5s2kiv s6kje. 5skjema 6skjemas 5s6kjer4m3 3skjer5m4e 7skjers 3skjor 4s5kjærl 5skjøn 6skjøp skjø5res 2sk1k4 2s1k2l 6skla sk5lak s6k5lan s5klas sk9leg s6klei sk3lek 7s8klero sk5ling sk5lit s4k5luf s2klyd 2skm 2skn s1knu 4skoa 7skodd 4skof 3s2kog 2s3koi 1skol 7s4kola 3skole 4s3koll 4skom s6koma s5k6ome 6s1kon 4skoo sk5ord s6korpi s7kors s8korst 4skort 2skos s2kot 3skott sk8ra s4k9ra. 5s4kral s4krat s2k7re. 4s3kref 6skreg 5s8krek 4s3kret 5skrevn 3skrib 3skrif 4skrig 3skrik 3skrip 4skrite 3skriv 5s4krog s3kron 4s3krop sk6rud skru3s6 6skryss 1s2krå 2sk1s2 2sk3t4 5skud 1s4kue sku4end sku4er skue5re 1skuf 5skulan 5skular 3skule 6s5kulis 4skull s4kulp 4skult skum3s 2skun s6k5underv 4skup 8s5kurs 8skurv 2skv sk5va. 3skvad sk3vas s6kven sk3ver sk5vit 3skvu 1sky s6kya s6kye 4skyr sky3re 4skys 6s6kyss 5s6kysk 3skyt 6skæ 6skø. 6s5køa 4skøe 1skå skå5re 6skåt sl4 sla8da s3lade sla5ge sla8ge. sla5ke s5laks 3slakt 3slal 4s3land 4s5langs slap5pe s5laran s5lare 4s5last s1lat sla4te. 4s1lau 8s5laus sla1v 3slave sla4vin 2sle. s8leda 4slega s4legi s4legn s6legr 6slei slei5er. s4leiv 8s5leke s5lekk s2lel s4leme 4sle7ne s6lener s6len6t3 2sler 8s5les s6lesj s4leso s6lest s4leta s5lev s4leva 4sley s5lia 2slid sli4en. 6slig sli5ke s4likk 2slin 8s3linj slin6t5 3slip 5s4lit. 3s4lite 4s5liv slob5b slott4 s6lott. 7slottet 1slu 8slu7a 2slu2e slu5es 6sluf 4slug sluk3s6 slum4p5 slum5p6e s3lund s5luns s6lup slu7sa s4lut s1ly sly8et. 1s4lyn 4s5lys sly8t 6s7lær slæ6rari 2sløn 8s5løp slø4pa. s6lør 2sløs slø8s5a 3s4løsi slø5va slø5ve slø5vi 5sløyd sløye7 9s4lå. s4låe s1lån slå5ner 1slåt s1m sma6d 3smak. 5s4maken sma9let 8sman s4med. s4mede 6s5medi s4medk smeg5 4smei smek7l s4mekt 8s5meld 3s4mell 5s4melt 2s5men 3s4mert 6smes s6mesi s6mia s4mie smi4ene s4mig s6mil. smi7la s6mile smini6 s2mit smo7a smo8de. s2mok 6smot 3smug 6s5mugg smul2 s6mula s4muld s6mule 5smurt 1s2my4k 6smøn 1s2mør smør3s 4smøt 5små. små5r s8mått s1n 8sna. s4nab 7snak 4s3nas 6s3nat 4snav 4sne. 4sneb 4sned 5s8nedd s6nee s4neg 3snei snei5er sne4kri s7nekt s4nel 2snem 4sner 6snes sne9sa snes9v 4snet s6nif sni6gl s2nik snik5ko 3s2nil 6s3nin 3s2nip snir4 5s2nit 2s3niv s8no. s6noe s5nord 6s7not 5s6nud s3num s4nur 7snut 8snyh 2snæ snæ4re. 5s6nø. snø5d4r 5snøe 1s2nør snø1s snø5vi so3al so8ar 4soav 2s1ob so2bl 1sod so4da. 5soe sofa1 so4fag so4fas 6s5off 6s5ofre soft1 so2ga so8gi so7gl sog6nem 6soh 5s4oi4 so5id 5sokn 4soks sok4se. 7sol. so4la. sol5av 1sold so4le. solei5er so4lene sol5f6 1so7li 8s7olj so2lo so8lo. sol3s2 sol5t4 so4lum so4lø 3som. so6mend s3omf 4s3omfa 4s1omg 5somh 2s1omk 4soml 1som5m sommar5a 3s6omme somme6r5e6 2somr 7somren 5somrer 6s3områ s1oms som5sl s4omst som5sti 4somsy 1s2omt 5somt. 6somta 3son so4na. son7da 7s6one so8nea song3s4 so4n3o sons4k son5st so2nu so4ny. 2s1o2p so7pak so9par so7pet 3sopp. 5soppa 3soppe sop4pi 8sopple so3pr 1sor. 7sora so3ran 5sorb 4s1ord sor4da 1so1re so4rek 7sorga. sor4gl so2ri 4s3orie 7soris so5riu 4sorke sor5n 3sor5s 7s8ort 1sos 4s5osc so8se. 6sosf 4sosj so4sl so5te so8te. so4tra sots4 sot5te sot4ti 4sou 2sov so3va so4ve. so5ven sover5e sove3s4 5sovet 3sovj sp2 4sp. spa5g6h 7spak. 7spaka 5spake 8spakk s2pal s3pall 5spalt 3s4pann 3spari 4spas 5s6paser 4spe. spe4a 8speda spe9dé s4pee 1s2pei s2pel spe4leg spe4les 5spelet 8s7peng 3s4penn s4pent s5pep spe4r5and 6speri 4sperl s4perr s3pers 3spesi s4pest s9pet. 1spi 6s5pilo 4sping s2pio 2spip spi7res spi7ri spi7ro 5s6piss 2s3piz 2s1pl 8s9plant sp9lar 4sple s4plin 3split sp6o 2spoe spo6et 2spol 5s6pole 6s7poli s4pora s4pore 5s4pors sport6s5 3sporv 2s5pos 4spot s3pote spo5v 9sprag 5spran 6s3preg 5sprei 8s7preik s4prek spre5ke s3prem 5s4pren 6s5pres 5s4pret s6print s5prio 8sprinsi 8s3pris 6s5prob s3prod 4sprof 5s6prog 6s7progn 6s7progr 5s6pross 1spru s4pry 3sprøy 5språ 2s3ps 8spub 2spul 3s2pyd 5s2pø 6s3pøl sp5øy 9spå. 5spåd 8s9r sre8ka sre8ke. sri8e9 sri8ka sri8ma sri4ve. s5ro sro4e sro6pa sro6sa sro6se. sro2t sro9te srot5o srø1v srå4da. sråde9r srå6ders srå8ma 4s1s s7sabel s7sabl s6sae s4saj ssa8ke. ssa6la. ss5all ssa4me. ss5amp s5sane s7s8ar. ssari8e9n s7s6arm s4sarr ssar8ve. ss6as ssau8sa ssau6se. s6seet s2seg sse5ge ss5egg ss4el sse5li ssel5s ss9elv. ssel5v6å s2sem s5sen. sse8na. ss5enden s5sene s4seni ssen6ke. s4senu s6senå s5ser. s6serab s6serat sse7sk s4seski s4sest s7set. s9sets s2seu s4sey s2sh ssi4a ssi7e6rer s4siff s6silo s8s9ime s6s3ind ss5init ss3inj ss3inn s4s3ins s5sis4 ssis5m ssi6v7end s5s6jarg ss4kape ss3kar sska8ra ss3kn ss3kof s7skog s4skor ss6ky. ss4kye ss4kå ss5kål s7skåp s2sl s8slip ss1lo ss5ly s2sm ss6nar ss2no ss4nø s4s5nød ss5nøk s2sof s4sok6 sso5lo s2som ss4oma sso3ra s4sorga ss3ove ss6pil ss4por ss9ri ss2t s5stad ss4ted ss3tek sstel6li ss5tep ss7tilp s7stip sst6r ss5tren ss4trå ss3tus ss3t4v s2s3ul s3sur ssva7ra ss1ve ss8vek ssy6na ssy5r ss7øye s6så 6st. 2s1ta. stabs3 3s6t2ad stad3a sta6d3o s5tafa 3stafe sta5fl st3aft sta7ge 4stah sta6ka. 5stakk 4stakl 6stal. 6sta4la sta5lak st5ald 4stale sta4le. 5s6tali 5stalt s3tame 3stamm sta5na. 3s4tand 6stande. st8ane s4tanf s4tang stang5s6 st3anl sta8n9o s6t5antr st3anv 4stao 2stap s7tapa s4tapp s8tapå s3tari 1stas 3s8tasj 4s5tast 1stat 4stato sta5top sta3tu 3stave 2s4t5b st7c 2std 2s3te. 2stea 2steb 3sted. s4teda 5stedt s2tee ste4en 2s4tef 3s6teg. stega6l s4tege 3stegh 4s5tegn s4tegr 4stegsp 5stegspl ste4her s2t4ei stei5er 4steikn ste6in6s5 3s4tek. 4s4teka s6teke ste4ket s4teki 4s5tekn 4steko v4s5tekst s4tekt s8te5kv 4stela ste5le. s5teleg ste5lev s5telig 5stemd 3s4temm 5stemn 4stemø sten5a ste4nar 5s4tenen s4tener 4ste5nes 3s6teng s4teni 6stenk 4steno stens5l 4steo s5teol 2step step7per st8er. 8s5tera s4teram s6terest s4terev s7t6erf s4terid ste7ris s6teri6v 4s3term 6sterr ste5run ster8ø 2stes s4tese ste7sle 4stet s4teta ste7t6r s6tetø 4steve 4stevi 6stevl 5stevn 6steå 2s4t5f 2stg stga6ve. stgå8va stgå8ve. 2s6t5h st5he 2s3tia 4stib s5tibe s9tibl 3stic s6tick 6s7tid s6tidel sti5en s2tif 3stift s4tigen 7s6tigi st9i8gj 3stign s5tij 6s5tika 4s5tike s4tikl 3s6til. 5s4tila sti4lag 4stild 3stile stile9ge s6tilk 6stiln s4tilo 6s5tils 5s4tilt. 6s5tilta 5stilte 4stime sti7mer 6stimé 3s6timu s6t3ind s6tini 4s6tinn s6tinst s6tint 1s2tip 4s3tipp 6stips 5stir 2stis 6s7tisk 4stitt 4stiå s4tja 5stjel 8s7tjene s6t5jent 3stjer 4stju 2stk 2stl 2stm 2st5n2 s2to. 1stof 2s3tog 4stoks 6stokt 3stoli 4stolj s5toll 4stom s9tomm st3oms 6s5tomt 4stoni st3ope st5oppl 6s8t5ord sto4ret s6torm stor3o 4stors st5o4s s1tot sto4t5r 5s6tore. st5ou 5stova 2stp 8str. st3ra. 4s5trad s8traff 6strafi 6strail st3ral st4ran stra8na. 5strand 4strane 6strans 6strap 4strar st7ras. st7rast. 5s4traum s4tre3a s4tred 7s6treik st5reis 7strek. st5rekl strek4sa8 6streni st5rer. 6strers 6strh 9stria 9s8trid 5strie st5rige st3rin 3s4t6rip 5stri3s 6stroe s5t4rog 5s4trok st3rol 6s4t5rom st3ron st7rop. st7ro6pa s6trope s6t7rug 9s6truk st5rum. 2stry 6stryg s7trykt st5ryt 4s3træ 1s2trø 6s5trøb s5trøkk st6røm 4strør 4strøs st5røse s5trøst 4strøy 6stråd 2st5s6 stsa6me. stsy8na 4st7t6 stta6le. st3t4r s4tua 1s2tub 3s4tud s2tue stu4el stu4er stue5re 3s4tum 6s3tung 6stunn 3s8tunt 6s5tur 2s4tut 2stv s3t4ved 1sty 2stya 2styd 3s4tyk sty6l 2s5tyn 2s7typ 3s4tyr styrs3 6stysk 4styv sty5ve 1stø 2støk 5støl 6støm 5støp 6størk 5støt stø7va. stø5var stø3ve stø5vi st8øy 1stå 5s4tåe stå5k 4su. 1su4a su7a8l 1su2b sub7l sub3o 5subs s3ubå 1sue su8er su2f 5s2ug su6ga. su4ge. sug3g su2h 3sui6 su3is5 suit5a su2k 4s1uke 3suk5k suk3r 1suk5s su4le. 3s4ulf su4lik sul4t5r s1ulu 2suly sulæ5 3s2um 4s3umid su2mo sums6 5sund. 8s5under 5sundet 5s4undi sun6d7r 9sunds sun4ge. 6s7u2ni su4o 3s2up su4pe. super3 supi9 su8p4r su8pre sur5d su4re. 4s3u4rei 1surf su4rie su4riu surs5k sur4sp sur4sti 1sus su3san su4se. su6s5es 4susi su4sik sus3p sus3s su2sy 2s1u4t1 sut6ra. sut8reg 7suv 8s5u6vi sv2 6sv. sva5a svai5 5svak. 3svake 6svaks sva4la sva4les 6svalet 5s6vali 7s6vam s4var. s4varet s3varm 3s4vart 6s1vas 6s1veg sve6g7i s5veie 3s4veis s5veka 6s5veks 5s4vens sverd5s4 sve4re sve8res 3s4verg 5s4verj s5verk sver4ki s4verm 6s7verv 7s4vev s4vie svi6e3l 8svift 4svig svi5ke. 6svikg 4sviks. 3svikt 4s5vikti 4svil s6vindel svi4nes sving5s4 8s7vink ll6svint 4svir 6s7virk2 2svis svi4sa. svi4se svi5sen svi5ser s8viv svi9ve 4svol 5s2vor svor7t s3vr 3svul 5s6vulm s3vy4 svye7ne 1s2vø 4svæs 2s7vå 1sy sy4c sy4de. sy5den 5sye sy2er sy8ka sy4ker sy5kere 2syko sy6kog 7s4ym sy7me s2yn 4s5yndl synk4 sy6n5o6 syn6sk syn3te sy4ra sy5rar s6yre sy4re. 2s1yrk syr4ka syr4ke. 3sy1s sy4se sy2sl sy6s7t sys4tr 2sy2t sy5ten sy5t6h 9sytt sy2vå s4z sz3c4z 6szt. 1sæ sæ2l 8s3æ4re 8s3æ4ren sæ4r1i særle9 sær5s8 7s6æ5te4 4sætt 1sø 4sø. sø2d s1øde 4søf søg4 4søj 9søk. 3s6øke 5søkj 5søkk søk7kj 3s6økna 2søko søk4sk søk6s3e6 5s6øksm søk4ta 3s4øl sø4la. sø4le. sø5let 3s2øm sø6må 3sønn s1øns s4øp sø4ras sø4re. sø4r5end søren6de. sø8ret sør9ett 7sørl sør3s sør5ø 3s2øs 4søs. sø8sa 7søt sø7tast sø7tel sø5tes 2søv s1øve 3søvn 2s5øy. 4s3øya søy8de. 6s5øyd 8søye 3søyl 6s5øy4n søy2r 2s7øys 5såg s3å2ke 5s4ål så4le. 6s1ån sån4da sån6de. så2p 9såpa så5pet 6s1åpn såp9u så2r så6ra sår9ast. så4re. sår3sk sår7ø så2s s7åsa s4åsb s5åse sås5k sås5t 9såv såva7 ta1a 4tabo tab2r tab2s ta4bu. 4tabø ta1c 4tad ta2da ta8d3ei ta6d3e4t tad5spa tad7s6v ta6du t8ae 6taei 4taek 4tael 1taen 4taend 4taenh ta6es 2ta5fe taf7f6 5tafis 4tafl 1tage 4tagj 8tah ta7is 1tak. ta4ka. 4takau ta7ken ta5ker tak7kel tak5k4l ta8k9la 2takr tak4sal tak6se. tak4si 4t3aksj 5takst tak4tal 4taktig tak4to t5aktø ta1ku tak3v 1tal. ta9lam ta3lan tal5ang ta7las 3tale ta4lei tal5eie ta4lek ta5ler. tale7s6 1talg tal6ge. 7talj talj5es tal4led tal4leg 8t7allerg tall7es tal8lign tall6s7a tal4ly tal3op 6talter t5altern ta6l9u ta6lå 2tamb tamba6ne. t3ambi t4ame 4tamet tam4i 2ta3m4o tam5v t6an. ta2na tan5ab 4t3anal ta3nar ta5nas ta5nat t5andak 5t6ande. t7andel. t5andele tand5r tandø4 tandør5e 1tane ta4nel ta5nem 4tanett t3anfa tanfø6 6tangf 6t3angr 1tank 2tanl t3anle 2t1anm 3tannl t5anno tanns4 tan6sk tans5ka t5an5sl 4t5anstr 4tansv 8tantil tan4tra 6t7antre t3anve 2ta3o4 5tap. ta4pa. 1tape ta4pe. 3tapi 4tapl 4tappa 5tappi 1t4ar. t6ara ta4r3ak 4taram ta6rare 2tarb 3tarbo 5tarbø 4t9arena 6t7ark. tar8ka. 4t5arke 4t3arki 4tarra tar9si tar7sp tars6v 4tart tart7est t5artik tar7tit tar4t3r ta6r5å8k 4tasa ta3se 6t9asf t3a4sia tasi3e ta4sif ta4sil ta4si5s4 tas4p tas5s4 tas8tas 6ta7sto ta7str 4tasu ta1ta ta7tes tate8se. tat5e4v tati1 tat3op tat2s1 tat3te t3attr 1tau 9tau. 7taue 4t5aug 2t1a4uk 4taun tau4ne. tau4sk 2taut 2tav 6tavin 3tavl 4tavli ta9xy 6t1b2 tba3d tba2n t6be. tbe6te. tbe6t7r tbe6t8ra tbo6da tbu8da tby3k tby4s tby7te 2tc t1ce tcen4 tch5e t5co 2t3d tdy5pe 1te 4tead 4te3ag 2teak 2te9a8l tea6m 2tea2n 2teap 2tear te5arb tea4s 3teatr 4teatt 2teau 2teav 4teb t5ebb tebu8da 4tecel te1co 2ted 6t5eddi 3tede. 4tedeb te7def 4tedek 4tedel 4tedem te5den 4tedi 5tedil 4tedo tedo6en. tedo4er tedo8et. te4dor ted4sk ted4sl 6tedu 4tedy tedyr9k 4tedø te3e4 2tef 8tefa 4tefi 4tefl 4tefo tefo8r t3efte 3tefø 2tega 5tegat 4t3egd te7gea te9gee 4tegg teg8ga. 2tegh te4gim 2tegj 2tegl te3gla te9g8li 8tegs. 6tegspl 6tegsv 2tegu tegvi8 2tegå 5tegås 4teh 5tei. 2tei4d t3eie t3eiga tei6ga. t7ei6ge. 6teigr 3teikn tei5le te1im 6teinf te4inne te5inte te5i4s 6teiso 2tej te7ken te5ker 4tekil 2tekj 5tek1k 2tekl te5k4la tek6lede. tek4li 4teknu 2teko 2tekr te7kra te6k5ru 9teks. 4t3eksa t3ekse 4teksp t4ek8st tek8t9r tekt4s tek6ty 2teku te2k3v 4teky 2tekø 4tekå 2te3la tel6ak 5te4l5ar 3telav 8te4le. 4teled 4telei 4telek 4teleme te4lene 6teler te4les te5lesk 4te4lev te6leva 4telid 4telik 4telil 4telin te4lir 4telis 4telit 4teliv tel5lef tel4lei tel4lev tel8lign tel4lo 2telo tel3se telses5 t3elsk tel7s6v 5teltet 2te1lu 7telut 2tely 6telæ 2telø telø8pa. 2telå 2tem 3temae 6teman te4mans t5emba 6temenn 5temik tem9ma 6temn tem5ne. tem5ord tem5pe tempe8l7 3tempo tem3s 4temø 3ten. te5nab te4n5al ten8am te4nan te4nat ten5at. 6t7enc 6t5en6den 4tendr 4tened te5neg 6tenem 6tenerg 5tenes 4tenet 2teng 7tengon t5e4nig 7tenik 5tenis 4teniv ten9no te4nom te5nor 6tenorm 4tenot te6nov 6tenó ten3sa ten5sko ten6slu ten3so tens5v ten4t5in tentle8ge. 4tenum 4teny 4tenæ 2tenø ten5øks 2teom 5teon 4teop te6ora te6ori 4teord 2teov 2tep te3pa 4tepak tepa9ra 4tepas 4te5pe 7tepee 9tepé tep6pere t5e6ple 4tepr 4terac te7rakk 6teramm ter7apa 4terapp te4rare 6terasa 4terase 7terast terba6ne. t6er5d 4tered 4teref 4tereg 4tereis te4rel 8terem. 6teremm te4r5eng teren6ga 6terenn 4terep te4rerk ter5esti 4terett 6terevo 3ter5g 3terh te4rig 4terik 4terisi te4riv ter5j 4terk. 4terke 4terkh 7terkr 6terks4 4terkt terla6ga terle7ge terle6ve. ter8ma. ter3no tern5s te5ro. tero6e te3rof 4teroll 4terom 5teromr 4te3ros 4te3rot tero6v ter5r 5ters. 5tersjøo ters4kl ter7s6ko ters4l ters4h ter3s4m ters6ne ter5sv tersø6ke. 3ter3t ter9to ter9ul 8terum ter7v tervi6se 2tery ter5ør 4terøt te4r3øv 4teråd te4r3ås t4es 5tes. 2tesa 5tesar te7sen 2te1sh 4tesid 4tesik 6te3sin 4tesit 4tesj 6tesjef 4te1sk t9es6ka. 6teski te5sko 2te1s2m 7tesmåe 2te1sn 2te3so 6tesp 5tesr 3tess 5test. 4testaf tes5tas 4testat 5tes7te. 4te5stei te5s6tiv 5testid tes4tik 4te5s4til 4te3sto 4te3str 4testy 4testø 2tesu 4te1sv tes8væ 2tesy 2te3sø te7så te8sår teså9re 3tet. teta6ka teta6le. te4tap te3te 5tete. tete4e 4teteg 4tetei 4tetek 4tetem 2teti 3tetik 3tetis 2tetj 2teto 2t8et2r 3tet2s tet5ti tett3s 2tetu 5tetu. 2tetv 2tety te2t3å 2teu teu8k t1eur 3teus 2tev t6eva te4valu 3tevl tevo6r te3vr 2tey6 2teø 2teå 4téa 2téb 2téf 2téh 2téi 4téle 2tém 2tése 4tést 6t1f tfe6e tfe4l tflå3 t7fo 2t3g2 t4ga. tge4a tgei5 t4gi. tgi5ros tgrei9e t4gå. 2t1h t4hap t4hea3 thei5m t6hesi tho7li tho3re 3thr thu5le thu6s thy5r 1ti 2tiad ti3ag 2ti1ak 4ti3all ti5als 2tia2m 2ti1ap ti3asp 4tiau 2tiav 2tib 2tick 3tid ti2da 4tidan tid7d 6t3idee 4ti5dem 4t7idé 4tidis 4tido 4tidr 2tidu tidvi4 6tidy 4tidø ti1e2 2tief 2tiei 2tiem 4tienh tie5ra 4tierf 4tierk ti4ert ties3 ti3esk ti3et 4tieta 4tiett 2tifa tifa8ne. 2tife 4tifl 2tifo 2ti5f6r t8ifrå 4tift tif5te 2tifu 4tifø ti9ge. 4tigj 2tign 3tigno ti6gun 2tih 2tii 2tij ti3ka. 6tikarr ti5ke 4tiket 4ti5ki 6tikj tik4kj 2ti3ko 2ti1k2r ti3ku 6tikular 6tikult 6tiky 4tikø t4il tila6ga til1d4 3tilde 2tile ti3lei 3tilfe 3tilg til3id 4tilke 3tilkn 4tille. 4tillh 4tillin tillø7 4tilm 7tilnæ 3tilst til3t4 4tilte 2tilu 2tilø ti7mab 5timat ti4me. 5timedie ti4mera 5timeri 2timl 4timo7 4tim6o8r 2t1imp tim7s 2timu 2timy 2timø ti6nab tin5art 4tinaz 2tind t3indu ti4nem 4t1inf tin5ge4s 6ti4nit 6t5inj 2tink 7tinks 4t1inn 6t5inne ti5no tinsk5 4tinsp 4t3inst 4t1int 2tinv 4tinva 4tiny 9tiol 6ti7om tion9s6 4tiop ti1or ti1ov ti3pa ti6pla 4tipr 3tips 2tir tira4t ti4ref ti1ro 6tisak 4tisam ti5s6an ti3se 4tis4ei 4tisek 4tisel 4tisem 4tisep tise8ra. 4tisers 6tisig 4tisio 4tisje 4tisju tis4ka 4tiskan 4tiskil tis5kok 6tisku tis5l 4tisn 4tiso 6tisprå 4tistat tis4ti. tis4til ti5stre 4tisty 4tistø ti8støy 2tisy 2tit ti7ta ti8tar ti3te ti1tj 3titl tit4r tit3s 3titt 4tiub 2tiut ti4v5and tiva9re ti4v5art tiv6is 2tivo tiv5si tiv5sk 4tiy ti5ær. ti7ære ti9ært. ti1ø8 2tiå 6t3jag 2t1jak t5jarn 2t1je. 2t1jeg 2tjel 1tjen tjen6st 6tjep 2tjer t5jev 2t1ji 6t5jing 2tjo t5jord 2tjub tju4e 2tjun 6tjur 3t8juv tjæ4res 2tjø 4tjå 4t3k2 t6kag tka8ra. tkly9 tku6le. tkå8pa 6t3l6 tla4ga tla8te. tle6da. t4ledr t6lef tlei5er. tle8se. tle5ti tligh6 tlight5 tli6nes tli4te. tlu4e t6l7ut tlø4pa. tl7øy. tlå3ne tlå7r 2t1m tma3d tma8ge. t6maku t2mam t2meg4 tme3in t2mek tmini6 tmin5s6 t2mos tmå4la. 8t1n t3na t6nee t4neli t7nelig tne4rek tne4r5ø tne8se. t4nesk t4nest t5ni t8no. tn5sk tnæ6re 7toan 7toar. toa6t 6toau 2toav tobe6r t3o2bl 6tobs 4toc to5da to9de. to4dera 3todo 1toe 2toek 6toel toe4t 2tof 6toff. t3ofre to5fri to2g3at to7gen 4togg to6gl 6tograv to4gre tog3st to2gu 2toh toil3 2to1in 4toj t6ok 1to3ke to3ki 2tokj 2tokk tokk5end to3kl 5toksi 5tokt 2toku to4l5arm 5tolat to5lel tolele7 5tolera toli8ne. 2tolj 1to4l3k 7tolki tol4lab tol4lag tol6leg tol6lett 3tolo tol5tr 4tolå to9ma. 2tomb to5mene. 2tomf 4tomg to3mi to5mise to7mist 4tomk tomlø8pa t8omm 2tomr 4tom1s 5toms. 1ton to5na to4ned to4nel tong5s4 to8nib 2tono ton3sa ton5s4l ton5sp 2tonu to4ny. 2to3o 4to1pl 4toppd 6toppg 6t5opple 4t5opplæ top4po 4toppt 4topr to1ra to4rak tor5alt tor5ang to4r5ant to4r3as 4tord tor8da. to1re 6toreg to4rek tor7eks to7rem 6torent 5torer tore4t tor5ete 4torga tor5int tor7k8u tor7me torm5s tor5na tors4i tor5t8 torvei5 to4rø 4torå to1s 4tosa 4to3se to2sh 6tosj tos5ke to8sku 4tos2p 2tosy 4tota to5te to8ti. to5to. to4tor 6toty 2tov to1va to7veg to5verd tove7re t5overs 5tow 4toø 6t3p2 t7pa tpi7ne tpi7pi tpo4et t4påk tr4 8tr. 6t9rabat 3trafi tra7in tra8ka. trak7to tra7mu t5rane 3t6rans tran7ske 5trap tra3pe tra5po tra5r4 5trase tra5se. tra5ses 5trasé t2rat t5rate. 3trav tre4al. tre1c 4t3reds t3refu 6t1reg t5regi 4trei tre5int 6trek. 4treke 4trekl 4t3rekor 4trela 3t6re7na tre5ne t6reng 3t6reni 4t3renn tren6sk t7repe t5repres t2rer t4rero t4re3ru 2tres 6tresi tre5sko tres4l 3tresn t5resu t1ret t4reta t6reto t5retted 5t6rettel 4trev tre9va t6rib 4t1ric 4t4rid tri7ei t5rig. t4rikk t8rina t4ri5ne 4t5ring 3trinn 7t6rio 6t5risk t4rist tri5to t4riu t2riv tri7vi 5trix 3t4ro. 5troa tro9ar 3troe t4rof tro5g 3t2roi tro3in t4rok t2rol 4t3rom. t6rond 5t4rong tro5per t2ros 5t6rosk tros3l tro1v t8ru. t8rua 7trua. 5trued 5truet 3trug tru1i 5trukn t3rull 2t1run9 t3rund 4trupe tru5sa. 7t6rusk 2trut t5ruta t3rute t3ruti tru5v try3dr 3t2ryg tryg5ge 7trykk. 5trykke try7pe. t6ræ trø8a t5rød. t5rødt 4trøk 4trøm 2trør 5trøt 5trøya 5trøye5 trøy9et 4trøyr 6trøys 5trøyt trå8da. 4trådet trå4dr t6råkl t3råst 4ts 6ts. t5sa. t5sab tsa2g tsak6se. ts1an ts4ang tsau6r t1sc t6scha t6sch5k t5se. tse6d tse4er ts5ege tsei4d ts3eig ts2em t3sen. ts4ende t5sendi tsen8ka tsen6ke. t5sens t4sentu t5ser. t3seri t4s3erk tser3o t5s6ers. ts4es t4sesk ts5e6st ts3eta tse4te. ts1e4v ts3f ts4fæ t7s8hop ts7ill ts3inn t4s3ins t5sir ts5jeg tsje5t6sj ts5jor 5t6sjov. t7sjuk t4sjur t5skad t4skan ts6kis t4s5kjed ts6kjø t5skol t6skoll t7skot ts5kren tsk5ru ts5krø ts1k6v ts9kvi ts6ky. t6s7kyn ts1l t7s6lo. t3s4lot ts2lu ts5lø t5smit tsmå6la. ts1o t4s5o4d t5sok t5somst t5spek t3spel ts2pi t2s3pike t3s4por ts5s4 t1st4 t2s3tabb t5stad ts3tak t4s3tal t5stand t5stang t5star t5stat ts6tau t3sted t4steg t4stek ts6tig ts4tik t4stilk t4stin t4stit t2s1tj t8stolk ts5ton ts5tors ts5tree t4s5tren t4s5tro ts3try ts6trål t5stu ts3tv t4sua tsu7ge tsu4l ts3uli ts3u4r ts5usi ts1v t3svik ts1w t5syk ts5yt tsø8ka ts5økni ts5øv tsøy8er ts1å tsåt8 8tt t1ta t3ta. t2tab ttaba6ne. tt9abo tt5adr t2taf tta9fr tt3aft tta4la. t6t3ald tta7lel ttall4 t4t3ana t5t6ane t4t3ang t4tans t4tanv tt5appe t7t8ar. ttare6 t4tarr tt5ar5t tt6arta t4tase t4tasj t4tav tt3avi tt5avk tt5avr t3te. t2tea t3ted t4teda t5tede. t8tedr t2tee t4tef tt3eff t2teg t2tei tt7eid tte3in t2tek tte7kv tt7elev tteli6te. t4tem tte4ma. tt5emn ttem8na ttem6ne. t3ten t5ten. t4tena t5tene. t4teni tten5s t9tens. t4t5ense t2teo t5ter. t4terei tter5un tte4r5ø t4terå t4tese t4tesi ttes6ke. t4tesl t5tet. t4teta t4tete t1té t8th tt5he tti5a t4tidel tti3e t2tif t5tig tti4g5j tt3ind t5tine t7tiné t5ting t4tini t4t3ins t4tisj t6tisti t7tite ttle6de. ttlin5 t1to. t5tofr tt5om. t7tomr t2ton tton6na tt3opp t5tora tt3ord tto5re tt5o4ri tt3orm tto5u ttpar4 tt6pås tt9raka tt5rake tt3ram tt3rap tt7rat t4t3rep tt3res tt3rev tt5rom t5trop t5try t2t1rø t6ts tt7saf tts3ar tts5kan tts5kj ttsla6ga tt3sok tt5still tts5top tts5tra tts5tøy tt3ugl t1tum tt1un ttun6ge. tt1ut tt8ute ttva8la tt5ve tt6vun t5tw t5ty. tty8e tt1y6t ttæ6 tt3ø4l t1tør tt3øv tt7øy6r tt1å4 5tual 4tu4av tuba3 tu4be. tu6bå tu6dem 5tuel tu4er. tug8la tu1in tu2k t5uka t1uke 7tukt 3tula 1tule tul5les tum5m tum4s 3tun. 4tund 3tune tun5gesv 6tungd tung9s 6t5uni tu4nio 5t4un5n 9tuns 3t2ur tur7ant tu4ras 4tu4rei tu4rek turi4 tu4rin tur1o tur3p tur5s4 tur3uk tu5rus tur1ø 1tus. tu1sa 3tusb 3tusf tu4sin tu4sm tus5o tus7s6t tust6r tus5u 2tutg t5utj t5utk t1utr tut8t7rå tut6tenk tut5tor tutt5ov tu8va. 2t1v tv4a tva8k tva6ne. 3tvang t4v5anl 8t9var tve5del 3tveit 4t7ver tvert5 t2vet 3tvet. 7tvets t5vik tvi8ka. t8viklas 5t4vil. tvi5la 5t4vile t4vi5l4i t6ving tvi4sa. tvi4se. 6t7vo 3tvung 6tw twa2 1tyd tyg9gel tyg5ges 6tyh tykk5s6 ty4med 1tyn ty4ne. 6t5yo 1typ 5t6ype ty4pere ty4pet ty4rak 5tyrann 6tyreg ty4rep tyre5st ty4ri. tyri9e ty4ri5s ty2s 3tysk tys3t 2ty2t ty8ta t3ytel ty5ten ty4ve. 2tz t5za 5t6zel 6t6z5l 1tæ tæ5l tær6ene tæ4renh tær4er tær4et tær5s4 tøf3l 2t1øk tø9ket tøk8ta 4tøl t7ø4let 5t4øm5 tøn5nes 4tøp tøp5se t2ør tø4r3as tør3in tørk4 7tørk. 9tørka 5tørke tør5ne tørs7ta. tørs7ter tørs5tin tør3t tøs4 tø8sa 4tøt tøt5a tø5ta. tø3te tøtt6 2tøv tøv6d tø7vele t4øy tøy5a t9øyem tøy5r tøy5te tå4en. tå2k tå5ket. tå5ki tåk6r tå2l3a tå9la. tå4leg tå7lel tål5s4 tån8da tån6de. tå3ne 4tåp tå6pe. t1åpn tå6re. tå4rep t3året 4t5åri 3t8årn 2t1års1 tå3s tå2t t3åtak tå7ten ua7g u1ak uak3s u1al. ua7la ual5l ual3o ual3u u3a4ne. u5anl u3ans u1ar. uar5d u4arr u5ars. uash3 ua3t u5au8 u1av 1uavh u4ba. ub7alt ub7ant ub5ark ub4bo ub2br ub4bu ubel5s ub5h ubi6s ubis7t ub1j ub7lande. uble3s4 u1b4r ub5rin 2ubs ubu8e u4bå uch5en uch5er u1ci uck1 ucu5 2ud u3da. u7das. ud4dag ud2dr udd4s5e ud2då udea9 ude8are u2deb udeie5 udei5er u2dek ude3lu u2dep u6dero u2des u3d2et u6d5ett u5devo udia2 udi3an udi4en udio5 ud7ir ud7ji ud5leg udle6ge. u7dob u6doe u2dot udover7 ud1r udse4 ud3t ud5v 3u4dy udy9ra ud5å4s ue5a8 u5ei u1el uem8na u1e2n uend5r u7ene u8e7net uensar4 ue7o u1er u5e6rast ue4re. ue5ren ue4rer ue4res ue5ri uerle7 u2erm ue4se ue2si ue4skj ues6n u1et uet8r ueul8 u4fe. u6feb ufe6e uf1f4 uf4f5erm ufi9l ufi5ne u1fl u6foa ufor3s u1fr uft3a uf4tan uft5s4la uft3sp ufø6 u5gag u5gar u6g5av ugby7 u2gem u5gen u3ger u4gerø u2ge5s4 u9get. u8geta u2gev ugg3s4 u5gis u4gl ug1la u5g4lad ug9lar. ug4le. ug9ler. ugle7s ug5ly ug7na ug7ne. ugo1 u4go. ug4re ugrei9er u4grø ug5s4i ugs4k ug7so ug3s4pr ug5s4va7 uguay7ans ug5øyn u1h 3uhel ui8a u4i6c ui2d uid5el uid5en. uid5ens uid5er uid5in ui3e6 u4il uil5l u1im ui3ne u1ing uinnsmi8 uinnsmig9 u1ism uista7 uit3en uit5er u1itt u1j u4jas u8je. u7jå 4uk. u1k2a u7kar ukare6 ukar5t4 u5kat u2ke. u4ked uke5l4 4ukem uker5an uke4rek uker5i ukho7 u7ki u1kj 4ukk ukk6a uk7kestal uk8k9l ukk7n ukks6 u5klem uk8lu ukl7ut u5k4no u1ko u4k5og u2kra uk3rus 2uks uk2sa uk4sek uk4sel ukse7te uk2si uk2s1k uk7ski uk2so uks5t uk4s3un uk2sø ukt5e4sk ukteslø9se uk4t3id uk6tj uk4t5ori uk2t7r ukts6l ukt3sp ukt9s6v ukt4sti uktu8e9ra uktue5re u1ku uku6e uku5le uk5vik ukys8 uk3ø4 uk5å4 6ul. u1la u4la. ula7d u6l1af u8l7aks ul5art ul4det u4lef u2lek u2lel ulele8ge. ule5ma u3len. u6leni u3lens u5ler. u5lere. ule3ri u2l3erl u4lero u2les ule3st u5lest. u5leste. u2leu u1lé ul5f6l ul4fo ul4fr u3l4i ulie8 uli9en uli5ke. 3ulikh uli9na. uli5ne u7linj ul1j ul5ka ul5k6e ul4k3v ul4lag ul4lam ull7arm ul4leg ull5egg ulleg8ga ul6leng ul9lere ul4le3s4 ul8li. ul8lig ulling7s ull5i4v ul4l3o6s ul8lot ullo3v ull5sle ull3s6m ulls4t ull3sv ul2lu4 ul6ly ul2lø ulm4u u1lo ulo6i ul5op ulo7va ul4sk uls4po ul8sn ulss8 ul2st ul8s3t6r 4ult ul4teg ul4tek ul4tes ul4til ul4tim ul4to ul7tor ul4t3re ult3ri u7lua u3lue 1uluk u5lup u5lus ul9ut. u7luta u9lute ul7va. ul5van ul4var ul4ve. ul4veg ul4vei ul4ves ulv3t ul4v3u 1uly ulyk5kes ulæ6ra ulæ5re ulø3se uløy6e ul5å6l 2uma uma8ge. u6mare um5au umau7ken um3av 2umb um5be 4umc 4umd 2ume u4mend u4m3enh umen4t5i ume5ra 2umfo 2umh 2umi u6midd umie6n umi9na u4mint um9ja 2umk 4uml 4umm um3me um4mil um4mis um3n umna8 4umo umo6g um5ok 2ump um7pan um4ple um4p7ut 4umr ums1 um7se. um4sku umsku8le. um2sn um4sor ums3t ums4tø 6um7t umta8l um5ut 4umve umør3s um7øy umå7 2un. una6da un5alg u4n3ap u9nar u7nas u3nat 2und. 6unda 6unde. un4dek un4del 6unden 5undersk 5underv 4undet un6d7im 4unds und5s4i u2ned u4nee u9nei. u2nel unele6ge. u4n5eng u4neno u2ne1s2 u3nes. u2nev unev5n 1ungd ungele8ge. un4gem un2g1j un4g5l un4go un2g1r un9g8ru ung3s4i un6i u4ni. u2nid 1u2nif u4nim u3nin 3union uni4st 4unk un4k5l un7ko un4kr un7nak unn5erf un4n5ers un4n5erv un5nes un4niv un2no unn5ste unnta8la un4n3y u4no. u2n3os uno7t 4uns un6sj5i un3skr un5s6kv un5sn un5s4p un3stek unst5e6l un7s6tenk unst3o un1s2v un4tal un4tam un4tas un3t2r unt5rep un4tri untun8ge. unu6 un5ut u3ny u3nø un5øy6d u7nøyg u3nå uo9a u1ob u1om uom7s u1op uor8da uo1re uo5ro u1ov up3av u3pea4 u5per uper3a upe6ren u4peta 6upf up6h u3pi u8pi. up3ins up3li up6nev upo9pe up1p2 up4ped up4pla up6pre upp5s 4upr u3pra 6ups up6sen up2s3k ups4ke ups5pr 6upt 6upu u1på upåvi6 u1ra u2rad u2raf ur3aft u2r1ak ura6ly u4ram u5rane u3rans uran6t5re u5rar. u6r7arl ur3arv u9ras. ur5asp ur3att ur7au urau9ken ur1av ur4bod ur4c urd4 ur3di ur4d5o u1re ure8al ureer6e ur5egg uregi6 uregist5 3urein ure4l ur3ele u4reli u7r8ell u7r8elt u4r3els u4r5eng u7reom ure7o6s u4resu u4reta u4rete ur4e5v 2urf ur4feb ur6fed ur3ge u1ri u4ri. uri6a7ne uri9en. uri4e5ne uri9er. u3rik u3rim uri5ne ur3inn ur3ins ur3int uri6sp ur4ke5s ur7k6j ur6k7ja ur8kla ur4kle ur6k5n urk5s urla8ga urle6ge. urle8se. urma7g ur3nea urn1s2 urnæ6re u4ro. u6roc 5uroe urom5s u2rop uro7pi ur3opp ur1or uro3s4 uro4sta uro8ta ur4pel ur7pi ur6p9ut ur7re ursa8ka ur4sal ur4s3el ur4sin ur4skr ur4spe ur5ste urs5til ur4stj ur2sv urs3va ur2s1ø ur3teo ur5ti ur4to ur6t5ri urts4t urue7re u6rug8 ur7ugl uruk6 uru4ke uru7kn ur6ul urumo7 urun4g u7runk uru7v ur4vel urv3s u6rys urø2 ur1ød ur1øy 4usa u9sane us3ang u9sar. u8s7arb u7saren u6s7ark us7au us1c 2use u5seal use4al. us7edvanle u2s1ei u2sek u4sele u2sem u6s5endi us7erk u4s5erm u6sesi uset8je us3eva 4usg u2sh u2s3h4a u2s3h4o us4id us3ind us5inn us7jag u4sji us5kaf u4s3kan uska8ra us7kat us5ken u6s5kis usk4l us6k5le us5klo us1ko u1skr us7kru usk7u6t u8s7kå us4ky us1l usle6ge. us5lin u4slu us7mø u4sn us1ok uso5l uso6l5d us1or u3sori usove7r6e us1p u1s2pin us5sar us6sat us4sjå us4skj uss5kor us4skur uss1l us7smi uss7mø us4s5ti us4str us2sv u6stande u4stat us3tav u2ste us3ted u5stei us7ten ust9ette us5ti u5s6tig us1tj ust5of uston8 ust7onn us5tor ust5o6v us8tra. us8tran us8trar u6stre ust5ren us4tri us3tro ust5rød u6st5rå ust7ut u4stå us3ung u2sur us1v u5svale u7s6valt usva8n usvi8ka. 6usæ usæ9le usø6m us1øy u1tae u2tag u7tagg u9tal. ut3alb ut5ald u3tall u5tande uta7no ut6anv ut3arm ut3art uta1s4 u5tas. u6t5a6sa u6t5a6se u2ta1u4 1utb ut4ba. utbe8d 4utbi ut6by. utch5 1utd 4utdat utda7ta. u2te. u2tea u4tee u4tei u2tek ut3eks u5tekst ute6ma. u5temm u9temt ut2en u6tena u3tenk u4tenu u2teo 2uter u6terø u2te1s6 u4teta u3tett ut6eu uteva9 1utf utfa7s utfø5re 1utg 8utgåe 6u3ti u4t5if utikk6u utiku9 u4tili u6tiven ut1j u5tjen ut6ju 3utlei utlø5se utlå7na utmå5le u8tni 1utny 2uto ut7oms uto5s uto4v 3utpr ut4på ut1r u5t4radi ut3re u5treng u3triv u3trol u3tros 5utru u5t6rul ut4rø ut9rød u7t8råk 1ut1s4 4uts. 4utsei utse8t9ja 2utsj ut3sk 5utst 7uttak. 5uttake ut4terk utt5eva ut4tid ut4til ut5torea ut1tr ut4tra 3uttry utt1s2 ut8tår u1tu utu5e u6t5un utun8ge. u2t5ut 1utv u3t4vil utvi5se 2u3ty 3u4t6yd u8ty. 8utz ut1ø u5tør ut4ø8s utøs7t 1utø4v ut5øya ut7åk u3tål ut1ån ut7år u1u u7uma u5ume u7ut u1v uve5di uve3in uve6ris uve3s u7ves. uvet5ø u6vev u5vi uvi6k uv5ra uv9sa u5vu uvø9re u1w 4ux1 ux4a4 uy6a u7yn u1æ uærle9ge u1ø6 uøv5 u9åra u7åre va3am va8an 4vab 6vadj vad1r vaf3 vaf6r vai5r vai5s va6ka. va7kan va5ker 6vakh va8ki. 4vako vak3r 7v6aksi 4v3aksj vak5s6t 1vakt vakt5r va1ku vak3v va3lan va4led val9eks 4valel val4g3r vali9e8 val3la val6mes va6l1o va1lu va4lun 4valv va4løy val7å vam8pu 4v3anal vand5s v4ane vane5s va4net 2vang van4gr vang4s7 va8ni. 1v4ann van4nan van4niv vann6sti va4nom v4ans van5sem 5vansk van5s6ki van3sm van3ti van9tr va4ny 2vap va5po va4ra. va6rak va4ral va4ram va4rap va4re. va4reg va6rem va4res var8ka var5ma var4mee var4sa var4sk var4s5ti var4sv varta9la var6tem var4t5i4s 4vasa va4sa. va9set 6vasid va6sie va4sif va4sik va4sil va6sis va2sk vass5a vas4sau vas4sel vas6s7ø 4vasta vat5a va3ta. va6t7e8l va2terf vatle6ge. 5vatn va1to va6tr vat7ra vat1s 4vau 2v1av va4z 2v1b2 vba4ne. vber5g vbo6da 6v1d v7dev vding5s4 v7doi v7don vd6r vdu6en. vdu6er v7dø 1ve. 2ve1a2 ve6ag ve6ar. 2veb 2vec ve2d1 ve9dob vedom5 veds2 ved5s4k 3ve8d5t vedø4 vedå6 2vee ve4er 2vef ve6g5av ve5ge 3vegg veggs4 2vegj 4vegl ve3gle ve5g6lød veg5n 2vego 6vegre veg5rett 4vegru ve4gut ve4g5å 2veh 1vei1e vei8eb vei3en 4veill 6veit 2vej 4veka 5ve4ka. ve4ke. ve4ked 4vekee 2veki 4vekj 2vekl vek8la vek8le ve4kli 2veko 2vekr 3veks vek4st veks4t5r 1vekt vek4t5an vek5to vek4t5r 2vekå 5vel. ve4l5as 5velat. 5velatp 6veld. vel4del 8velds 4veled 6velei 7velet 4velis 4velit 6veliv 2velo 5veloc vels2 vel3se velses5 vel3sm vel5sp vel5st 4velug vel5un vel5v 2vely 2velæ 2velø velø8pa 2vem ve5ma 1ven ve8na. 4venem ve5net ve6nete 4venev ve4nin ven6n5i vennle7 ve2no ven6sti ven6str vent6a ven5t6r vent4s 4venty 2venu ve4nus ve5ny. 4venya ve4nym 2ve3o4 2vep 1v8er. ver5ak ver3al 8verau ver6des ver6din ver6dir verd7v ve3re. 4vered 4vereg 5vereig 4verek ve4rel ve6r7eng 4verenn 4verep ve5rer ve5res. 4verett 4veretu verfø5re ve9ri. veri3a ve4rial ve7rie 4verik ver3il 5verkn ver5m6 ver6nal vern6s5 ve9ro. ve3rom ver8ska. ver5ski ver7spo verta8la. verta6le. ve1ru 5verum. 6very verø6 ver3øs4 4verå v4es 3ves. 2ves4a ve5san 4veset 4vesh 4vesi 4vesj 4veski 2vesl ve9sli ve1s2m 6ve3so 4vesp ve6s3per ve5sted ves6t5end vest5o4v 4vestr 4vestu 4vestø ve3sv vesva7 5vesynds 2vesø ve1så veså5re v4et 1vet. 2veta 8vetaka 4veteg 4vetek ve5te6s7 6vetev 2ve7ti 4vetj 2veto ve4to. veto7e 9vetoke 9vetoks. ve4tor 2vetr 1vets vett5sk 6vetv 4vety vety8e 2veu ve8um 2veva ve6vak ve5van ve9var 2vevi vevi8sa vev4sm vev4sp 2veø 2veå 1vê 2v1f vfall4 vfø7re. 2v1g2 v4ga. vga4le. vga6li vga8ve. v9ge v4gi. vgjer6s7 vgo4 v4gå. 2v1h vhø4re. 1via vi1an vi6bl vice5s 1vid vi5de vide4o7 vi4d5o4 vid3r vid3s4 vi1el vi5end vig4m vi4gu vi5gø vi4kat 5vikb vi5ked 7vikg vik5ke vik5n vi2k3o6 3viks. vik5sa vik5s6l 4vikt 5vikti vi4k5ø4 vi2l1a vi5la. vi4les4 vi4l3in 1vilj vil4l5an vil4led ville6de. vil4lei vill9ep 6v5illu vil5m vil1o vil4sti vilt7o vil6tret vil4tri vi2lø 4vim vim7p vim7u vin6d5au 4vindl 5vindu vine5st v6ing 4vingn vin5gom. ving3r vin8g9u vin3na vin4ned 6vinnh 4v5innl 4v5inns 4vinnt vi6n5o6ver v2in2s vin7sja vin4tes vin5tre vi8pa. vi6pe. vip5s 1vir 4viro 7viru vis3ab vis3ak vis5and vi4see vi3sen vi6seng vi2s1k visk6re vis5m vi1so vis3om vi4sp vis9pa viss4p vis5ti vi4tak vi5tese 5vi6t5j vi4t3o vi4tr vit7ra vit5re vit5skr vit6te6s7 vi4t5un vitun6ge. vi4t5øy4 vi4va. vi6ves vivi3 v1ja v1je vje4t5a vje5t6e vje4t5r vjet3t vje4tu v1ji 4v5jo vju3t 6v3k6 vk4le vk4ler vku4le. 6v1l2 v6lab vla6ga v9led v9leg vlei9e vl6el vle4se. v5lesn vle5str v6lesv vli7v vls9 vlu9sa 2v1m vma8le. vmo8de. vmord4 vmå8la 2v1n v3nad vna8ke. vn5al v9nar vn5dy vne7b v2ned vne7de v4nele v4neli v4nelo v2nem vne5r6e v4nero vne1s v4nesta v6neste v2nev vnor9s8kas vn4s5pa vn1s4t vn5t4 vnæ4re. vn5ør vo1al vo2ar 6vob 2vof vof8fan vo4gu voi1 1vok 4voko voks3k vok6s5 1vol voli7 vo4litu vol4tes 2vom vo4na vo9nal vo9nar von5de vons6 von5sh 2v1o6p 2vord vor8da. vo1re vo9ren 2v1org 4voro vors7k 1vos 4vosj vos4se vo4teg vo4tel 6votr vo1v vo4ve. vo6vi. 2v1p4 2vr8 3v6rak v7rar v1re vregi3 6vrenge 4vrengi v6rengj v6rengt vrett4s v6ri. 3vrid 7vrie v6rigas vri6ma. vri8me. v3ring vrin5s vri6ve. v1ro v4rob v4rof v4rok v4rop vro8te. v1ru v7ry vrø3ve v1rå vrå8da. 8vs v6sa. v7sali v6se. v4seg vs3egg v3s4el v4s5e4li vse4n v5sen. v4s5eng v5s4ens v2ser v6si. vs1in v1sk vs8ke v6s5kum vs1kv v1sl vs3lan vs6let v6slik vsmå8la v1s2n v6s7na vs3ne vs3ny vs3næ v4s3nø vs5od vsom5 vs5oms4 v7son vs1or vs2pe vsre6de. vs7s6t vs4s5å v1s2t2 vste6ma. vs3til vs1v v6s7va vsø6ke. vsøl5 v2s5øy vsøy4er v8så. vså7re 2v1t vta1 v4ta. vta8ka. vta6led vta9len vta4lev vta6s v5tepp v5t4i vti8na vti8ne. v5t4r vt7s v3t2v vty8e 1vu vu2d1 vud5d vuden5t vuds4 8vué vu8k 2vul 2vung vun4ge. 6vu6o 2v1ut 2v1v vva8la vve8g9ing. vve6g7inga vven7n6i vvi5ke vvi6k7l vvi8s9an vvi4se. 2vy1 vya4 vy7ens 1væ væ1ra væ9ret væ8ta. v3ø4d 8v7øks vø4l vø7li vøm4met 3vøre vø6re. v3ørke vør8na. vø3se. v5øv 4v1øy vøy6e vøy7ene. vøy9enes 1våa 1våe 4våend v4åk vå8ka. vå4ke. vå4kene vå9kene. vå4le. 1vån vå5ne 4vånu vå3ren vå8sa. vå5tes 6våtf våt7å w2a wa6l 5wald wal4k walk5o4 wal4l 2wap war6d7er wash3 1wat wa3z w1b wboy5 we2 weate7 we7b we3g we5re wes2 wes3s wester6 western7 wet5 wett4 w4i2 wi9ar. wich3 3wicz wi3d 5wi6en wi9er. wi5f wi3ni wi5ra wi3ren wi5ta wk3r w1l w1m wn5s wob5 wou6 wout7 w3s4 ws6k wurs6 wy2 w1yo wyor2 wyork3 w1z xan5t x7b x3f xga6 x7h x1ic 5x6id xi5e4 x5k x1l x1p6 x3r x1s2 x7t x6u xy2 ya7b 1yac ya5f ya4h y1ak yak6te. ya2l y7am y1an y6an. y2ana ya4ne. yan7k yan7sl y1ark y7arr yas4 ya5si ya5t y1av y1b yba4ne. yb4bed ybde3 ybo2 ybu6er ybue7re ybu7ern ybyg5 y1c y8ce. y8cé y2co3 y6dab yd5av 4ydd yd6dela yd4dep y6d7enh y4deo y2dep y4dero y2d1is yd6je yd1ji ydo4 yd3op yd5ov y1dr y4d4r5au yd1re yd5rem y8d7ri y4dro y4d4r5oks yd3si yds4v y2du yd1un ydø4 y4døm ydør5 yd1øs 4y1e yed8l ye6dre y2ek y5eks ye4len ye6let yel4s5j yel4sk yels3m yel6s5t y2em ye2n y7e6ne y8ener y2enh ye5ni y2enk y2enl yenle6ge. yens4 y4ense y3e6re ye4rel y3ern yer8sk y4erst yes2 ye5sm ye2t ye9te ye5ty y2ev y1f yfan9 yfjell4 y4fle yf5le. y8ga. yga8ve. yg4dal yg4dek yg4del yg4dep yg2do yg2d1r yg2d1y yg2dø yge5i ygen5s y6geret y2ges y4gev yg6gam ygg7art ygges4 yg5gj ygg5l yg6gr ygg3s2 yg6gu yg6g5å ygi2 y5glo yg7m yg6r y1h yhes5 y1i y9in. yis7t y1j 6yk y1ka ykap3 y6kara y2ke y7kel. y5kelen y3keli y7kels y3ken y3ker y4kerel y4kero y5ket. y9kets y1ki y1kj y4kjar y5kjare ykjeva8ne. yk4kana yk4k5enh yk5kesj ykke6s5ta yk1kj ykk5ni ykk8s5k ykk8s5o ykk8s5s yk8k5vi6 yk4ky yk1la yk6lest y1klo y3klub yk3lus y5klæ y1ko y2koa y6koli y4komo y5kosa y2kot y5koti y1kr yk1s yku6le. yk3var y1la yla8ga yl4dan yl4derk ylde4s yld1r yld5s6k yle6ge. y7les y4lev yligh9 yl5k8 ylke2 ylke4s3 ylkesla8ga yl4lev yll5is. yl3s6 ylst7re yl5tet y8luse 3ylven y1ly ylæ7re y6mei y4mete ym4fe5d6 ym5jara y4mo. ymo5e ym3p2 ym1s ym8sa. ym4se ym8sl ym6ta. ym6te. ymå6la y9n8and yndes8 yn5det y2nel yn7eld yner3g yne5s4 ynesi8 y6nev yn5gel yn4gem yn2gr yn4g5ø ynko3 yn6k5v yn5na yn5ne ynn3s4 ynn4ø y3no y4no. yns1 yns6are yn4sem yn9set yn2si yn2sk yns9ket. yns7ki yn5skj yns7kjele yn8s9kjer. yn4st yn2su yn4s5ver yn4tap yn8teg ynt5ei yn4tek yn6tete yn8t7r yo4gat yo6gi. y1om yon4 yon5nen yo6nu y1o2p y1o2r yor6da yo5re you4 yout5 yp8e y2pe. y4pee y4pena y4penet ype4rel y6peta y1pi y4pi. y7ping yp5inn ypin8na y1p2l y5po yp7p6a yp3pe y1pr yp5s8 yp4tok y3pu y1ra yra8ka y4r3a6l y7rarb y4r5au yr5av yr7da yr5dø y7real y8r7edd yre3in y5reis yrek4 y7rek7k y3rels y5rems y1ren yre9ne y4reo y6rerel y4rero yre5sc y5rest. yre5ste y5reste. yres6ten y1ret y4reta y4rete y4reto y7retø yr7ga y1ri yrin5g6 yri6ene. y4rif yri8ka. yr3inn yris6p yr4kee yrke4s yr5kj yr3m y7roe y3romm yr1op y5rosk yr5r8 yr4san yr7set yr5sk yr6skj yr6skr yr2sp yrs7tan yrs5tar yrs7tene yrs5tens yr3sti yr4sv yr3te yr6tek yr2t3r yr3tra yrty8 y1ru yrul8la. yr5ut5r yr3v y1ry yr3øk yrøy4 y1rå1 yråd2 yrå8da yråde7r yrå6ders y4rådi y2råm y6råst y4råt y4råv 2ys y1sa ys6a7kers y8s7al ys4e yse4bu y4sed y4see yse5ei y2seg y2sek y8s7ekte y2sem y4sera yse7rid yseri7e6 y4sesj y4sesk y4se5s6l y4sest y5seste y6sesu y9set. y4seu ys6i ysi8e y5sjk y7skag ys6kara ys7kare ysk9au ys2k3l ysk5øs ys4mi ys4nø y1so y4s5or ys2pe ys5pis y5s4po ys6sak ys6sam ys4s3ei ys4s3ek ys4s5il ys2sj ys8s7ko ys4sku ys2so ys2sp yss5pe ys4sta yss5tab ys4s5ti ys4su ys2s5v ys2t ys3ta y8star. ys4tat ys3tel ys3ten y4s3ter ysterie7n ys7tesl y2s3ti yst3op yst3r ys8tra ys5t6ry y7s8tu ys6ty y1su ys1ve y8s7øm ys5år y1ta y4t3ana y2tee y4tef y2teg yt5e4ge yte3in y4teka y4teki y4tena y4teno y2teo y4teret yte6ro yters6 yter5ske yte5r6ø y2tes2 y2tet y3t2hi 6y5til y6tj yt9ja yt5jen yt9jer yt4mei yt4mes y3to yt8ra yt4re. yt5rer yt1ri yt4rik y5trå yt4s3en yt3sk yt5sv 4ytt yt5t6a ytt4e ytte8r9end yttes6 yt4test yt8tien. yttsa6me. 2y3tu y1ty yt4ys y7tå8 y1u y6ua y8ue yu8g yu4l y1v y4vak yva8la y2ved yve4ria yve4ris y4vese y6vesy y6vev yvi8sa yvi6se. yv1år yvå5te y1w y5æ y5ø y1å2 za5b 3zae 4zaes za4g5 za5k6h zani4 zania5 5za5v z1b4 zbu4 z1c z1d 1ze zea1 zebu9 zeli5 zen3s 4z3ense 4z3ent z1f 8z1g 5zha z3hi z5hu 5zie 1zifi 5zing z5int 1zis 6zisty 4zi5s4v 2zisy z1k 4z1l z1m 5zo. 5zoe zo1f2 zo4no zo5re 6zos z1p z5r z1s 4z1t zu3e z1un z1v z1za. z2z3el æ5by æ2bø æ5de æ7di æ1f æg6 æ2k æ3ke æ5ki æ8kj æk1ja æk7je. æk9jer. ække7 ækkel6 æk6l æ1la æ4le. æ2le3d æ4lena æ4lev æl5j ælsle9 æ4r1ak æ3rane æ4rans æ4rarb æ6rarbe ær4arte æ4r1at ærbu5e ær1d4 æ1re æ2rea æ4red æ2ref æ2reg æ8r7ei ærei6e æ2rek æ6r7eld ære5ne. ære7nes æ2rep æ5rern æresa4m ære6skr ære4sl ære4sp æ4reta æ4retek æ9rets æ2rev 4ærf ærgen5 ærhø8 æ1ri æri6e7ne æ4r3il ær3ins æri6s ær5is. 4ærk2 ærle6ge. 4ærm ærmå8la ær3n ær5ne4 ær4nå æ2r7o6 ærom5 æroms4 ær5r ær6sel ær4s5il ær1sk ær7s6no ær2sp æ2r1u ærut5 ær3v æ2r1ø4 ærøy7e ær3å4 æ8se. æ2sj æ2s1k æ5ta 4æte æ4te. æt6he æt4r æt4ta æ5va ævar5 æve4s æ5vi 6ø1a2 øa7re øau4 ø1b øbe6lev øbe4li ø2bl ø3b6li øbl9u øb4r ød3ag ø4dak ød3d ød9de. ø2de. ø4dede ø6def ø4dela ø4dem ø4deo ø4deri ø4dero ø5dj ød1r ød4red ød4rek ød4rep ød2sc ød6s5ek øds7ke øds4ko ød6sku6 øds4mu ød8t5om ødt6r ø2du ød3und ø4d5ur ø6d5ø 4ø1e2 ø4ed ø5ene ø5ep ø3e6re øfe8 øf3fe øf6j øf8la. øf8le. øffe8l7a ø5fn øfte5s øg1 øg2a øg5ak øg5al ø7gar ø5gas ø3ger øg5gl øg8gå ø7g4j øglo8ve øgn6s7p ø2g2r øg5re. øg5res. øgs2 øg4ste øg4str øgta5 4øg4u ø1h ø4i øi4e øi5er. øi5e4ne. ø5ing ø5isk ø4it ø1j 6øk. 6ø1ka ø5kav øka8ve. ø6keh ø4kelo ø6kerada ø6kerel ø4ke5ru øke1s ø6kese ø8kesl ø4kest ø4kete ø1ki 4økj ø5kjare ø5kjas ø1kje 2økk øk5kel øk5ket øk4k5l økk5r øk3lag øk3lan 2økna 1øko øk5opp ø1kr ø8krar øk8sa. øk6se. øk4ses øk4si øk2so øks1t6 øks5ti øku4r øk5ur. øk5ure øk7ve ø7ky ø1la ø2lah ø6lam øl3d øled ø4ledi ø6lelu ø4lero ø6leta ø4le5te ø2lev øl4gera ølge5s6v øl1j øl2ke ølke7s øl4lese øl9leti øl6lev ø1lo øl7op ølrå4 øl6sel øl4sere øl4se3s øls6t4 øl5s4v ø5luk øl7ut ølva6 øl4var øl4v3ei øl6vek øl8vel ølv7erk øl4v3in ølv5o ølv7r ø1ly ø4me. ø9met 1ømfi ø5mi ømini6 øm4med øm4mero ømmet6 øm4metr øm3op øm4pel øm7s6p øm1st øm5svi ø2m1u ømå8la øn2ad ø6n5al ø5nas ø2nem ø3nes. ø9nese ønhø8re. øn8k7r 4ønn øn4nal ønni4 øn4n5it ønns5al ønn4s3e ønn4s5i4d ønns5kje ønns5kre ønns5ku ønns3l ønns3t øn2nø ø6nom øn2s øn9sa. øn5sak øn5sam øn5se. øn3ser øn3skj øn8skjer. ønst3r ønst9ra ønt1 øn2ta øn2to øn7u8 ø1o ø4peda ø6pe5i ø4penu ø5pero ø4peru øpes4 ø4pete ø4peti ø1pi øp3li øp5p øp6pl ø1pr øp6s1 øpsa4 øpsla8ga øps8leg øp5ste øp7s8tik øp4s5ø ø1ra ø2ra. ø2r1af ø2r1ak ø2r1a2m ø4rans ø4r3ant øra8sa øra6si ø4r7au ørd4e ø1re ø2rea ør7edd ø6redu ø2ref ø2reg ø6rein ø2rek ørek6l ør3eks ør5ekt ørele8se ø9relet ø4r5eng ø2re5o4 ø2rep ø6reret ø4reru øre1s2 ø5res. ø4rese ø6resi ø7reskrivi ø8reso ø4rest øre6s7v ør6et ø4reta ør1eu ø2rev ør5fe ørge5s ø1ri øri8m ør4jet ør4keri ør4kes ør8k9lag ør6k5n ør4kve ør4kå ørla8ga ørm9ut ørn4e ør4nere ør4nes4 ør4n3u ør4n5ø ør1o ø5r6ok ø1ros ø4r3ost øro4v ør4rek ør4rep ørri4 ør4r5is ør4råt ør4sak ørsa8ka ørsa6me. ør4sc ør6ses ør2si ør5ski ør4skr ørs6lev ør4som ør4spe ør2st ørs9tar ørste5i ørs5tens ørs5tig ør3sto ørs9u ør2sv ørs1å ør9tar ør4tek ør6ti9a ør4tide ør8tien. ør6tif ør3to ørum5 ø6rut ør5v ør1ø2s ørø1v ør1åp ø1sa øsa6me. ø8sarar ø1sc ø2se. ø2sem øse4n5o øseri7 øserie6 øs5jo øs7kar øs1l øs4lag ø4slu øs2me ø1s2p øss8n øs8tas øst9ast øs6teg øs5terse øst9ett østo2 øst5of øst5ov øst1r øst3re østø4 ø2s1ø2 4øt øt3ak ø9tar øta4s øt5asa ø2te. ø2tea ø6tef ø6tege ø2tei øte5k ø2t5eks ø2tel ø5tela. ø3ten ø4teni ø3ter. øte3ru ø2te1s øte7sn ø4teta øt7ri øt1sa øt3s4p øt7s6å øtså9re øt4tero øt6test øtt5av øtt5eks øtt5eta øtt5ete øtt5ra øtt7ri øtt1s2 øttså7re øt4tur øt4ty ø1tu ø5ty ø1u2 øug8la øv5aa øv5ans øve5in ø4vek øve5no øveren8 øve1s øves4t øve3te ø5vik øv6l7ut øv7ne øv6nø øv9o8 øv1r øv5reb øv1s øv9sa ø5vå øy3al øya2n 7øyan. 9øy8ans øy4dek øy4dere øyd8i 5øyeb øy7e4de øy2ee øy4ele øye4n øy4ep øy4erf øy1gl øy3ke. øyks4 øyk5t 2øyl øy4led øy4leg øy5na øy5ni øy3o 6øyp øy3pe. øy4pel øy4ra. øy5rer. øyri6v øy3rø øy1s øy5s4ar øy5si øys2l øy4sm øy4spi 5øysund øy4tei øy4tel øy4tere øyte5s6 øyti7da øy1tr øyt5s øy2t3y6 øy5tø øy4vei 5øyvå ø1ø2 ø5å6 å1a åak6ta åa4n5 åan8ka. åan6ke. å2ar å5aran åau4re å1b4 åba8ne. åber2 åbo9ta 6å1d å7dan å9dar å4ded å4dek å4dem å4deo å4dep å4dere å4deri å6dero å2des å7di åd4ra åd8re åds1 åd2sk åd3s4la åd7slo åd3slå åd1s2n åd3s4pe åd7spu åd5st åd6s7te 4å1e å2ele åem8na åe2n å7ens å3er å3e6re. å7e8ri å1f åfe6 åfø5re 2åg å4ga. åg7ald å4ge. åg7ei å2ges ågna5 åg5ne åg4r åg5rin ågs6k åg5sl åg7sp ågs4t ågu4l åg5ø å4gå. å1h å1i å1j å1ka å3kan å3kar å4karb åk7av å4keh å3ken å4kena å4k3enh å4kere åke5s å4kesl å5kevi å1ki å6kid å1kj åk1k åk5ka åkk6l åk7kr åk7lau åklist7 åk3læ å1ko åk3opp åko4s åk6ra åk5røk åk3rå åk1s2 åks7l åk3t4 åku8 å5k8ul åkva8la. åkøy8rar. å2k3å å1la å5l6amp å6larb å9las ål5au8 ål9av ål3d å2lef ål5eini å2lek å2lem å4l5enh å4leni åle6ris å2le1s2 åle9s6und å4lete å2lev ål5g ålgå6 å6lio ål5j ålla6ga ål3or ål4san ål4sek ål4ser åls7i ål2sp ål4sti ålsy8na ål5ti ålti5d ål1u ålul8la å1ly å2l1øy åløy4e ål5å6k ålå8te. 6åm å6me. åm4li. åm1om åm5øy 8åna å3nar å9nas ånd3r ånd4sa ånd4se ånd4so å4ne. åned4 åneds5 åne5i6 å2nel ånely6 å5nes. å3net å4netr å3ni ån5o å9ny å3o åp2e åpe4n3a åpe4n5i åpen3s å5per å6pero å1pi åp6j å1pla åp4ne. åp7p å1pr åpra5 åp2s1 åp6ta å4på år3ak å9ran å7rara ård5str å2re. å5rei å6rel åre7s å4rest årfi4 å7riv år3k2 år4le. 2årn årn5s år3on år3op årpo8 år2s års5af års3el år3sem års3ko år8sku årsla8ga år3sol års3ta år7ste års3ti år7sto år5stu års1u års1v år5sy år5u4k år3un år5y4 å1rø å5r8å ås2 å1sa ås7au å4se. å4see ås5eid å4sek å4sem åseri7e6 åse3s2 å4sesm å4seso åse5ta ås3h å8si. ås5ka. ås9kene ås8ki å1skj å2s3kjør ås7kop å1skr å5sku å1sl ås5ne ås3ni å5so å1sp ås7pl ås5sa ås5se ås3si åss3k å8s7s6kå 4å1st å7stei åsu4 ås3un ås7ut ås7væ ås5øy åså7 å1ta å4ta. åtaks5 åta2l åta9la åtale3 åta5le. åta5len å4tang å4tark å4t5arm å2te. å2tea å4tee å2t1ei åte6ke. å4teo å9ter å2tes 5åtferd å5ti åti7da 2åtn å1to åt7ov 6åtp åt1re åtri6pa. åtri8pe. åt1ru åt5sk åt1t åt4ted åt4ti ått3o åt4tri åtts4 åt6t5æ åt1u åt4un åtva5ra åtva7re åt5ve å5ty åt1øv å3u åun8ge. å1v åv4a å2ve7d å4veg åve5l å4veni å9ver. å2vev åv7s6 å7vy åvæ4re. å1ø8 åøy4", ["length"]=192729, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=27448, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sr.pat0000644000175000017500000006730311761001300024666 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sr.rme % used: а б в г д е ж з и к л м н о п р с т у ф х ц ч ш ђ ј љ њ ћ џ \patterns{ .ђ2 .ћ2 .ч2 .ш2 .ж2 .а2б3алиј .а2б3анац .а2б3ерац .а2б3ерир .а2б3евак .а2б3ирит .а2б3ју .а2б3ла .а2б3лег .а2б3леп .а2б3лок .а2б3лу .а2б3ориг .а2б3реак .а2б3рог .а2б3узус .а2д3ерац .а2д3ј .а2д3лат .а2д3рен .а2д3рог .а2д3верб .а2н3а4е2ро .а2н3афиј .а2н3афрод .а2н3аго .а2н3акуз .а2н3алд .а2н3алфа .а2н3алг .а2н3амерт .а2н3андр .а2н3ант .а2н3апто .а2н3арх .а2н3егер .а2н3екл .а2н3екум .а2н3елек .а2н3енер .а2н3епи .а2н3ерг .а2н3ерит .а2н3есте .а2н3идр .а2н3ирид .а2н3изог .а2н3изом .а2н3изур .а2н3јон .а2н3офт .а2н3окс .а2н3опис .а2н3орг .а2н3орх .а2н3овар .а2набап .а2набат .а2набаз .а2набио .а2набол .а2надем .а2надипл .а2надоз .а2нафаз .а2нафила .а2нафон .а2нафор .а2наген .а2нагно .а2награ .а2нахор .а2нахро .а2накал .а2накам .а2накат .а2накеф .а2накла .а2накли .а2накој .а2накол .а2накрон .а2накру .а2налеп .а2налис .а2налит .а2нализ .а2намне .а2нанео .а2напла .а2напле .а2напне .а2напно .а2напро .а2напти .а2нарт .а2насар .а2насеи .а2наспаз .а2наста .а2настиг .а2настом .а2натим .а2натоц .а2натом .а2натре .а2натри .а2натро .а2неор .а3г2нос .а3г2ноз .а4е2ро .б2 .бе2ш3ћ .бе2ш3ч .бе2с3ц .бе2с3к .бе2с3п .бе2с3т .бе2з3алкохол .бе2з3атомск .бе2з3б .бе2з3д .бе2з3г .бе2з3и .бе2з3л .бе2з3љ .бе2з3м .бе2з3н .бе2з3њ .бе2з3о .бе2з3р .бе2з3у .бе2з3в .бе3с4крупул .бе3с4покоја .бе3с4покојн .бе3с4пора .бе3с4порн .бе3с4тид .бе3с4тија .бе3с4тиљ .бе3с4тилу .бе3с4трана .бе3с4трас .бе3с4твар .бе3з4беда .бе3з4бедн .бе3з4бели .бе3з4бједа .бе3з4бједн .бе3з4бол .бе3з4истан .бе3з4истен .бе3з4јач .бе3з4јак .бе3з4лоба .бе3з4лобн .бе3з4начај .бе3з4рача .бе3з4рачн .бе3з4уб .бе3з4уп .бе3з4вуча .бе3з4вучн .бе4о .бес4тселер .би4о .ц2 .д2 .џ2 .ди2с3акор .ди2с3јунк .ди2с3конт .ди2с3корд .ди2с3кре .ди2с3кри .ди2с3кур .ди2с3квал .ди2с3ло .ди2с3ориј .ди2с3парит .ди2с3пон .ди2с3поз .ди2с3проп .ди2с3тон .ди2с3трак .ф2 .г2 .ге4о .х2 .и2ш3ћ .и2ш3ч .и2ж3ђ .и2н3абруп .и2н3адек .и2н3афек .и2н3акце .и2н3акур .и2н3амор .и2н3аниц .и2н3аплик .и2н3апст .и2н3арт .и2н3аугур .и2н3аура .и2н3ед .и2н3ефек .и2н3ег .и2н3екс .и2н3екв .и2н3елиг .и2н3епц .и2н3евид .и2н3јек .и2н3јур .и2н3јуст .и2н3обл .и2н3офиц .и2н3окуп .и2н3опер .и2н3опор .и2н3опсе .и2н3умбр .и2н3унда .и2н3унк .и2н3утил .и2ноген .и2нокор .и2с3ц .и2с3к .и2с3п .и2с3т .и2з3аба .и2з3ака .и2з3анал .и2з3б .и2з3бија .и2з3бива .и2з3д .и2з3дај .и2з3г .и2з3и .и2з3л .и2з3љ .и2з3м .и2з3н .и2з3њ .и2з3о .и2з3р .и2з3у .и2з3в .и2з3ведб .и2з3веде .и2з3веди .и2з3ведн .и3с4как .и3с4кариот .и3с4кат .и3с4кин .и3с4кита .и3с4коч .и3с4конск .и3с4крам .и3с4крат .и3с4крен .и3с4крењ .и3с4крич .и3с4криш .и3с4криц .и3с4крит .и3с4крој .и3с4крса .и3с4крсн .и3с4купља .и3с4квас .и3с4кврч .и3с4лаб .и3с4лам .и3с4леђ .и3с4лед .и3с4лијеђ .и3с4лијед .и3с4лик .и3с4лин .и3с4љеђ .и3с4љед .и3с4лов .и3с4луш .и3с4луж .и3с4ме .и3с4мије .и3с4мје .и3с4паљив .и3с4пав .и3с4пира .и3с4плић .и3с4плит .и3с4покој .и3с4полин .и3с4пон .и3с4порав .и3с4права .и3с4прави .и3с4правк .и3с4прављ .и3с4правн .и3с4пупч .и3с4пур .и3с4ред .и3с4рк .и3с4таћ .и3с4такн .и3с4там .и3с4тар .и3с4тас .и3с4тави .и3с4тављ .и3с4тиц .и3с4тифан .и3с4тин .и3с4тир .и3с4точа .и3с4точн .и3с4точњ .и3с4ток .и3с4тори .и3с4трад .и3с4тран .и3с4трав .и3с4трић .и3с4триж .и3с4триц .и3с4труг .и3с4туп .и3с4уш .и3с4ук .и3с4ус .и3с4ут .и3з4бав .и3з4бичкава .и3з4блеушан .и3з4бојак .и3з4бојк .и3з4драв .и3з4гомет .и3з4гред .и3з4грн .и3з4грт .и3з4иђ .и3з4ид .и3з4ими .и3з4јежљ .и3з4лож .и3з4лог .и3з4лопаћ .и3з4лоз .и3з4ним .и3з4ној .и3з4олац .и3з4олат .и3з4олир .и3з4олов .и3з4рачи .и3з4раел .и3з4раиљ .и3з4ун .и3з4упч .и3з4вала .и3з4вале .и3з4вали .и3з4ваљи .и3з4валу .и3з4вижд .и3з4виискр .и3з4вија .и3з4вијен .и3з4вин .и3з4вињ .и3з4вир .и3з4витоп .и3з4вјед .и3з4војац .и3з4војц .и3з4вор .инте2р3а .инте2р3е .инте2р3и .инте2р3је .инте2р3о .инте2р3у .инте3р4ежџ .инте3р4егн .инте3р4еса .инте3р4есе .инте3р4еси .инте3р4есн .инте3р4есо .инте3р4есу .инте3р4ије .инте3р4огат .ист2к .из3бе2з3обр .из3бе2з3ум .из3г2н .из3ва2н3евр .из4оанем .из4оаном .из4обат .из4оброн .из4одим .из4один .из4одоз .из4офон .из4офот .из4огам .из4огео .из4оглос .из4огон .из4ограф .из4охал .из4охаз .из4охел .из4охиј .из4охим .из4охипс .из4охит .из4охор .из4охро .из4оклин .из4околон .из4олекс .из4олукс .из4омер .из4ометр .из4оморф .из4онеф .из4оном .из4опат .из4опер .из4опле .из4опол .из4опсеф .из4орах .из4осеи .из4осинт .из4осист .из4оскел .из4оскоп .из4остаз .из4осте .из4отах .из4отал .из4отер .из4отон .из4отоп .из4отро .иза3г2н .иза3т2к .изд2на .изд2но .изд2ну .изр2к .јури2с3к .јури2с3п .к2 .љ2 .м2 .н2 .на2д3жањ .на2д3ждр .на2д3же .на2д3жир .на2д3жив .на2д3жњ .на2д3жуп .на2д3игр .на2д3инж .на2д3ина .на2д3иск .на2д3јач .на2д3јах .на2д3јеч .на2д3јек .на2д3јез .на2д3јун .на2д3л .на2д3љ .на2д3оч .на2д3офи .на2д3ора .на2д3осе .на2д3осје .на2д3осо .на2д3рач .на2д3рашћ .на2д3ран .на2д3раст .на2д3реал .на2д3реп .на2д3руч .на2д3руг .на2д3рук .на2д3уч .на2д3удар .на2д3ум .на2д3в .на2ј3а .на2ј3е .на2ј3и .на2ј3о .на2ј3у .на3д2нев .на3д2нич .на3д2ниц .на3д4лан .на3д4леш .на3д4леж .на3д4вал .на3д4веси .на3д4вест .на3д4виј .на3д4вит .на3д4вла .на3д4воје .на3д4вор .на3ј4аш .на3ј4ажи .на3ј4ада .на3ј4аде .на3ј4ади .на3ј4ах .на3ј4ака .на3ј4ако .на3ј4ало .на3ј4ами .на3ј4амл .на3ј4амн .на3ј4арц .на3ј4ари .на3ј4арм .на3ј4ати .на3ј4аук .на3ј4ава .на3ј4аве .на3ј4ави .на3ј4ављ .на3ј4ази .на3ј4еже .на3ј4ежи .на3ј4ежу .на3ј4ец .на3ј4еда .на3ј4еди .на3ј4едн .на3ј4едр .на3ј4ести .на3ј4етк .на3ј4езд .на3ј4езн .на3ј4урен .на3ј4ури .на3т2ках .на3т2кам .на3т2касм .на3т2каст .наг2н .наг2њ .ну2с3пос .ну2с3про .ну2з3бел .ну2з3биљ .ну2з3љуб .ну2з3ре .ну2з3рје .ну2з3уж .о2б3игр .о2б3истин .о2б3истињ .о2б3ј .о2б3лај .о2б3лакш .о2б3лам .о2б3ласк .о2б3лећ .о2б3леж .о2б3леден .о2б3лег .о2б3леп .о2б3лет .о2б3лијеж .о2б3лијег .о2б3лијеп .о2б3лијет .о2б3лист .о2б3лив .о2б3лизат .о2б3лизав .о2б3лизи .о2б3љ .о2б3лока .о2б3луч .о2б3лук .о2б3ору .о2б3р .о2б3уж .о2б3убож .о2б3уд .о2б3уме .о2б3уми .о2б3умр .о2б3уз .о2д3жал .о2д3жаљ .о2д3же .о2д3жи .о2д3жв .о2д3арг .о2д3и2з3д .о2д3и2з3в .о2д3игр .о2д3иск .о2д3исти .о2д3ј .о2д3л .о2д3љ .о2д3ок .о2д3онд .о2д3онл .о2д3оно .о2д3ону .о2д3озд .о2д3озг .о2д3р .о2д3уч .о2д3ук .о2д3ул .о2д3ум .о2д3уве .о2д3уви .о2д3узд .о2д3узе .о2д3узи .о2д3узл .о2д3в .о3б4јеш .о3б4јек .о3б4јер .о3б4јеси .о3б4јет .о3б4љан .о3б4љут .о3б4љуз .о3б4рђ .о3б4рч .о3б4рш .о3б4раћ .о3б4рашч .о3б4рашн .о3б4раже .о3б4рамб .о3б4ран .о3б4рањ .о3б4рат .о3б4раза .о3б4разд .о3б4рази .о3б4разн .о3б4разо .о3б4разу .о3б4ређ .о3б4реч .о3б4реж .о3б4рец .о3б4ред .о3б4рем .о3б4рес .о3б4рети .о3б4ретн .о3б4рич .о3б4риц .о3б4риј .о3б4рис .о3б4рит .о3б4рив .о3б4рк .о3б4рл .о3б4рљ .о3б4рн .о3б4роћ .о3б4роч .о3б4рок .о3б4рон .о3б4рова .о3б4ровц .о3б4рс .о3б4руч .о3б4руш .о3б4рук .о3б4рун .о3б4рус .о3д4јећ .о3д4јен .о3д4јев .о3д4лаж .о3д4лаг .о3д4лака .о3д4лаз .о3д4луч .о3д4лук .о3д4рж .о3д4раћ .о3д4рачи .о3д4раж .о3д4рана .о3д4ране .о3д4рани .о3д4рано .о3д4рану .о3д4рапа .о3д4рапи .о3д4рапљ .о3д4раз .о3д4ређ .о3д4ред .о3д4рем .о3д4рен .о3д4рич .о3д4риш .о3д4риб .о3д4риц .о3д4рин .о3д4рињ .о3д4рл .о3д4рљ .о3д4рн .о3д4рон .о3д4роњ .о3д4рп .о3д4рт .о3д4руж .о3д4руг .о3д4рвеч .о3д4рвен .о3д4рвењ .о3д4важ .о3д4вај .о3д4веса .о3д4весн .о3д4вест .о3д4вић .о3д4викав .о3д4викн .о3д4вис .о3д4вој .о3т2ках .о3т2кам .о3т2касм .о3т2каст .обе2ш3ћ .обе2ш3ч .обе2с3ц .обе2с3к .обе2с3п .обе2с3т .обе2з3б .обе2з3д .обе2з3г .обе2з3ј .обе2з3л .обе2з3љ .обе2з3м .обе2з3н .обе2з3о .обе2з3р .обе2з3у .обе2з3в .обе3с4тан .обе3с4тиј .обе3с4тран .обе3з4нач .обе3з4нан .обе3з4нањ .обе3з4уб .обе3з4виј .од3г2н .од3м2н .ода3д2н .ода3г2н .по2д3адм .по2д3игр .по2д3изв .по2д3ј .по2д3лакат .по2д3лакт .по2д3лећ .по2д3леж .по2д3лег .по2д3леп .по2д3лет .по2д3лијећ .по2д3лијеж .по2д3лијег .по2д3лијеп .по2д3лијет .по2д3лист .по2д3лиз .по2д3љут .по2д3лок .по2д3лом .по2д3луч .по2д3луж .по2д3луп .по2д3оч .по2д3ош .по2д3оф .по2д3окн .по2д3ра2з3д .по2д3рад .по2д3рам .по2д3ран .по2д3рањ .по2д3рас .по2д3равн .по2д3равњ .по2д3разр .по2д3разу .по2д3реп .по2д3рес .по2д3рез .по2д3рик .по2д3рит .по2д3рож .по2д3рон .по2д3ров .по2д3руча .по2д3ручи .по2д3ручн .по2д3руб .по2д3рук .по2д3упла .по2д3усм .по2д3усн .по2д3вариј .по2д3веч .по2д3веж .по2д3вез .по2д3вик .по2д3вил .по2д3вир .по2д3влаш .по2д3влас .по2д3вођ .по2д3вож .по2д3вод .по2д3воз .по2д3врћ .по2д3врж .по2д3враћ .по2д3врат .по2д3врг .по2д3врис .по2д3врс .по2д3вућ .по2ст3егз .по2ст3инду .по2ст3лим .по2ст3онк .по2ст3опер .по3д2нев .по3д4јеч .по3д4јен .по3г2н .по3м2н .по3м2њ .по3р2ђ .по3т2ках .по3т2кам .по3т2кат .по3т2кав .пре2д3же .пре2д3жи .пре2д3ид .пре2д3игр .пре2д3испи .пре2д3исто .пре2д3истр .пре2д3изб .пре2д3ј .пре2д3обј .пре2д3одре .пре2д3окус .пре2д3осе .пре2д3осје .пре2д3осв .пре2д3рач .пре2д3рад .пре2д3рат .пре2д3руч .пре2д3убеђ .пре2д3убијеђ .пре2д3убјеђ .пре2д3удар .пре2д3угов .пре2д3упис .пре2д3усло .пре2д3увер .пре2д3увјер .пре2д3увјет .пре2д3в .пре3д4јен .пре3д4вај .пре3д4вар .пре3д4вест .пре3д4воја .пре3д4воје .пре3д4воји .пре3д4вор .пре3д4вос .пре3т2ках .пре3т2кам .пре3т2кат .пред3м2н .пред3м2њ .про3г2н .про3т2ка .про3т2ки .проти2в3акц .проти2в3оф .проти2в3отр .проти2в3р .проти2в3уд .проти2в3ус .р2 .ра2ш3ћ .ра2ш3ч .ра2ж3ђ .ра2с3ц .ра2с3к .ра2с3п .ра2с3т .ра2з3анал .ра2з3б .ра2з3д .ра2з3е .ра2з3г .ра2з3и .ра2з3л .ра2з3љ .ра2з3м .ра2з3н .ра2з3њ .ра2з3оба .ра2з3обл .ра2з3обр .ра2з3од .ра2з3орат .ра2з3орав .ра2з3орт .ра2з3ору .ра2з3от .ра2з3р .ра2з3уда .ра2з3удб .ра2з3уди .ра2з3улар .ра2з3умр .ра2з3уве .ра2з3узд .ра2з3узе .ра2з3узи .ра2з3в .ра3ш4ћењ .ра3ш4чић .ра3с4как .ра3с4канд .ра3с4кин .ра3с4клад .ра3с4клањ .ра3с4клап .ра3с4клон .ра3с4клопа .ра3с4клопи .ра3с4клопљ .ра3с4кош .ра3с4кроп .ра3с4пај .ра3с4пав .ра3с4пета .ра3с4пете .ра3с4пети .ра3с4пето .ра3с4пику .ра3с4пињ .ра3с4плин .ра3с4плињ .ра3с4пн .ра3с4полож .ра3с4пон .ра3с4пор .ра3с4прав .ра3с4прем .ра3с4рђ .ра3с4рд .ра3с4ре .ра3с4тај .ра3с4тан .ра3с4тат .ра3с4тав .ра3с4тењ .ра3с4тил .ра3с4тињ .ра3с4тир .ра3с4тис .ра3с4тит .ра3с4тој .ра3с4трел .ра3с4трет .ра3с4трој .ра3с4трт .ра3с4тућ .ра3с4туп .ра3с4тур .ра3з4башур .ра3з4бад .ра3з4бан .ра3з4бар .ра3з4бау .ра3з4бој .ра3з4бор .ра3з4ев .ра3з4гађ .ра3з4грт .ра3з4иђ .ра3з4ић .ра3з4ид .ра3з4иј .ра3з4ин .ра3з4ир .ра3з4из .ра3з4лаг .ра3з4лаз .ра3з4лич .ра3з4лик .ра3з4лож .ра3з4лог .ра3з4лоз .ра3з4мећ .ра3з4мет .ра3з4мрск .ра3з4нат .ра3з4ред .ра3з4роч .ра3з4рок .ра3з4вал .ра3з4веде .ра3з4вест .ра3з4вић .ра3з4виго .ра3з4вија .ра3з4вије .ра3з4вију .ра3з4вит .ра3з4вој .ра3з4вон .ра3з4врћ .ра3з4враћ .ра3з4врат .ра3з4врт .ра4с5турч .раз3д2ни .раз3г2н .раза3г2н .раза3т2ка .с2 .су2б3а .су2б3инв .су2б3јунк .су2б3л .су2б3окс .су2б3орд .су2б3реп .су2б3рог .су3б4аш .супе2р3а .супе2р3е .супе2р3и .супе2р3о .супе2р3у .супе3р4иор .тран2с3а .тран2с3ц .тран2с3е .тран2с3к .тран2с3л .тран2с3м .тран2с3н .тран2с3о .тран2с3п .тран2с3т .тран2с3у .тран2с3в .тран3с4еп .тран3с4кри .тран3с4уд .тран3с4ум .у2ш3ћ .у2ш3ч .у2с3ц .у2с3к .у2с3п .у2с3талас .у2с3тара .у2с3тећ .у2с3тег .у2с3тер .у2с3тов .у2с3трћ .у2с3трч .у2с3трај .у2с3трал .у2с3треб .у2с3треп .у2с3трес .у2с3трг .у2с3трк .у2с3трн .у2с3трп .у2с3тућ .у2с3тум .у2с3тур .у2с3тврђ .у2с3тврд .у2з3б .у2з3д .у2з3г .у2з3и .у2з3игр .у2з3инат .у2з3искр .у2з3л .у2з3љ .у2з3м .у2з3н .у2з3њ .у2з3обест .у2з3обијест .у2з3охо .у2з3орат .у2з3орав .у2з3р .у2з3угар .у2з3в .у3г2ми .у3г2н .у3с4как .у3с4клађ .у3с4клад .у3с4ко .у3с4куп .у3с4пало .у3с4пав .у3с4пеш .у3с4пех .у3с4пел .у3с4пем .у3с4пент .у3с4пет .у3с4пев .у3с4пија .у3с4пије .у3с4пијуш .у3с4пикуш .у3с4пјеш .у3с4пјех .у3с4пјел .у3с4пјем .у3с4пјет .у3с4пјев .у3с4пон .у3с4пора .у3с4пореч .у3с4порен .у3с4порењ .у3с4пори .у3с4пособ .у3с4према .у3с4преми .у3с4рђ .у3с4рж .у3с4ра .у3с4рд .у3с4ре .у3с4ријед .у3с4рк .у3с4рљ .у3с4рн .у3с4рп .у3з4бор .у3з4диц .у3з4лан .у3з4лат .у3з4лић .у3з4лиц .у3з4лим .у3з4лит .у3з4лов .у3з4лудоб .у3з4нач .у3з4нак .у3з4неве .у3з4невје .у3з4нич .у3з4ниц .у3з4ној .у3з4рет .у3з4рев .у3з4ријет .у3з4ријев .у3з4рн .у3з4рњ .у3з4роч .у3з4рока .у3з4роко .у3з4року .у3з4руј .у3з4ван .у3з4ват .у3з4виж .у3з4вија .у3з4вије .у3з4вијо .у3з4вију .у3з4вој .у4с5кош .у4с5коко .у4с5коле .у4с5колу .у4с5ком .у4с5копа .у4с5кора .у4с5коси .у4с5котр .у4с5ков .уза3т2ка .ва2н3евр .ва2н3устав .з2 .за3г2н .за3т2ка 2ђ1ђ 2ђ1ћ 2ђ1ч 2ђ1ш 2ђ1ж 2ђ1б 2ђ1ц 2ђ1д 2ђ1џ 2ђ1ф 2ђ1г 2ђ1х 2ђ1к 2ђ1љ 2ђ1м 2ђ1н 2ђ1р 2ђ1с 2ђ1з 2ћ1ђ 2ћ1ћ 2ћ1ч 2ћ1ш 2ћ1ж 2ћ1б 2ћ1ц 2ћ1д 2ћ1џ 2ћ1ф 2ћ1г 2ћ1х 2ћ1к 2ћ1љ 2ћ1м 2ћ1н 2ћ1р 2ћ1с 2ћ1з 2ч1ђ 2ч1ћ 2ч1ч 2ч1ш 2ч1ж 2ч1б 2ч1ц 2ч1д 2ч1џ 2ч1ф 2ч1г 2ч1х 2ч1ј 2ч1к 2ч1љ 2ч1м 2ч1н 2ч1р 2ч1с 2ч1т 2ч1з 2ч3вј 2ч3вл 2ч3вљ 2чв. 2ш1ђ 2ш1ш 2ш1ж 2ш1б 2ш1д 2ш1џ 2ш1ф 2ш1г 2ш1х 2ш1ј 2ш1р 2ш1с 2ш1з 2ш3чв 2ш3цј 2ш3цв 2ш3мј 2ш3мл 2ш3мљ 2ш3пј 2ш3пл 2ш3пљ 2ш3тј 2ш3тл 2ш3тљ 2ш3вл 2ш3вљ 2шћ. 2шч. 2шчћ 2шчч 2шчш 2шчж 2шчб 2шчц 2шчд 2шчџ 2шчф 2шчг 2шчх 2шчј 2шчк 2шчљ 2шчм 2шчн 2шчр 2шчс 2шчт 2шчз 2шц. 2шцћ 2шцч 2шцш 2шцж 2шцб 2шцц 2шцд 2шцџ 2шцф 2шцг 2шцх 2шцк 2шцљ 2шцм 2шцн 2шцр 2шцс 2шцт 2шцз 2шк. 2шкђ 2шкћ 2шкч 2шкш 2шкж 2шкб 2шкц 2шкд 2шкџ 2шкф 2шкг 2шкх 2шкк 2шкм 2шкн 2шкс 2шкт 2шкз 2шљ. 2шм. 2шмђ 2шмч 2шмш 2шмж 2шмб 2шмц 2шмд 2шмџ 2шмф 2шмг 2шмх 2шмк 2шмм 2шмн 2шмс 2шмт 2шмз 2шн. 2шп. 2шпђ 2шпч 2шпш 2шпж 2шпб 2шпц 2шпд 2шпџ 2шпф 2шпг 2шпх 2шпк 2шпм 2шпн 2шпс 2шпт 2шпз 2шт. 2штђ 2штч 2штш 2штж 2штб 2штц 2штд 2штџ 2штф 2штг 2штх 2штк 2штм 2штн 2штс 2штт 2штз 2шв. 2швђ 2швч 2швш 2швж 2швб 2швц 2швд 2швџ 2швф 2швг 2швх 2швк 2швм 2швн 2швс 2швт 2швз 2ж1ћ 2ж1ч 2ж1ш 2ж1ж 2ж1ц 2ж1џ 2ж1ф 2ж1х 2ж1ј 2ж1к 2ж1р 2ж1с 2ж1т 2ж1з 2ж3бј 2ж3бл 2ж3бљ 2ж3бр 2ж3дј 2ж3дл 2ж3дљ 2ж3дв 2ж3гј 2ж3гл 2ж3гљ 2ж3гр 2ж3гв 2ж3мј 2ж3мл 2ж3мљ 2ж3мр 2ж3вл 2ж3вљ 2жђ. 2жб. 2жбђ 2жбч 2жбш 2жбж 2жбб 2жбц 2жбд 2жбџ 2жбф 2жбг 2жбх 2жбк 2жбм 2жбн 2жбс 2жбт 2жбз 2жд. 2ждч 2ждш 2ждб 2ждц 2ждд 2ждџ 2ждф 2ждг 2ждх 2ждк 2ждм 2ждн 2ждс 2ждт 2ждз 2жг. 2жгч 2жгш 2жгж 2жгб 2жгц 2жгд 2жгџ 2жгф 2жгг 2жгх 2жгк 2жгм 2жгн 2жгс 2жгт 2жгз 2жл. 2жљ. 2жм. 2жмђ 2жмч 2жмш 2жмж 2жмб 2жмц 2жмд 2жмџ 2жмф 2жмг 2жмх 2жмк 2жмм 2жмн 2жмс 2жмт 2жмз 2жн. 2жњ. 2жвђ 2жвч 2жвш 2жвж 2жвб 2жвц 2жвд 2жвџ 2жвф 2жвг 2жвх 2жвк 2жвм 2жвн 2жвс 2жвт 2жвз 2а1 2б1ђ 2б1ћ 2б1ч 2б1ш 2б1ж 2б1б 2б1ц 2б1д 2б1џ 2б1ф 2б1г 2б1х 2б1к 2б1м 2б1н 2б1с 2б1т 2б1з 2бј. 2бл. 2бљ. 2бр. 2ц1ђ 2ц1ћ 2ц1ч 2ц1ш 2ц1ж 2ц1б 2ц1ц 2ц1д 2ц1џ 2ц1ф 2ц1г 2ц1х 2ц1к 2ц1љ 2ц1м 2ц1н 2ц1с 2ц1т 2ц1з 2ц3вл 2ц3вљ 2цј. 2цр. 2цв. 2д1ђ 2д1ћ 2д1ч 2д1ш 2д1б 2д1ц 2д1д 2д1џ 2д1ф 2д1г 2д1х 2д1к 2д1м 2д1н 2д1с 2д1т 2д1з 2д3вл 2д3вљ 2д3вр 2џ1ђ 2џ1ћ 2џ1ч 2џ1ш 2џ1ж 2џ1б 2џ1ц 2џ1д 2џ1џ 2џ1ф 2џ1г 2џ1х 2џ1ј 2џ1к 2џ1љ 2џ1м 2џ1н 2џ1р 2џ1с 2џ1т 2џ1з 2џ. 2дј. 2дл. 2дљ. 2др. 2дв. 2е1 2ф1ђ 2ф1ћ 2ф1ч 2ф1ш 2ф1ж 2ф1б 2ф1ц 2ф1д 2ф1џ 2ф1ф 2ф1г 2ф1х 2ф1к 2ф1м 2ф1н 2ф1с 2ф1т 2ф1з 2фј. 2фл. 2фљ. 2фр. 2г1ђ 2г1ћ 2г1ч 2г1ш 2г1ж 2г1б 2г1ц 2г1д 2г1џ 2г1ф 2г1г 2г1х 2г1к 2г1м 2г1н 2г1с 2г1т 2г1з 2г3вј 2г3вл 2г3вљ 2г3вр 2гј. 2гл. 2гљ. 2гр. 2гв. 2х1ђ 2х1ћ 2х1ч 2х1ш 2х1ж 2х1б 2х1ц 2х1д 2х1џ 2х1ф 2х1г 2х1х 2х1к 2х1м 2х1н 2х1с 2х1т 2х1з 2х3вј 2х3вл 2х3вљ 2х3вр 2хј. 2хл. 2хљ. 2хр. 2хв. 2хвђ 2хвч 2хвш 2хвж 2хвб 2хвц 2хвд 2хвџ 2хвф 2хвг 2хвх 2хвк 2хвм 2хвн 2хвс 2хвт 2хвз 2и1 2ј1ђ 2ј1ћ 2ј1ч 2ј1ш 2ј1ж 2ј1б 2ј1ц 2ј1д 2ј1џ 2ј1ф 2ј1г 2ј1х 2ј1ј 2ј1к 2ј1љ 2ј1м 2ј1н 2ј1р 2ј1с 2ј1т 2ј1з 2к1ђ 2к1ћ 2к1ч 2к1ш 2к1ж 2к1б 2к1ц 2к1д 2к1џ 2к1ф 2к1г 2к1х 2к1к 2к1м 2к1н 2к1с 2к1т 2к1з 2к3вј 2к3вл 2к3вљ 2кј. 2кл. 2кљ. 2кр. 2кв. 2љ1ђ 2љ1ћ 2љ1ч 2љ1ш 2љ1ж 2љ1б 2љ1ц 2љ1д 2љ1џ 2љ1ф 2љ1г 2љ1х 2љ1ј 2љ1к 2љ1љ 2љ1м 2љ1н 2љ1р 2љ1с 2љ1т 2љ1з 2м1ђ 2м1ћ 2м1ч 2м1ш 2м1ж 2м1б 2м1ц 2м1д 2м1џ 2м1ф 2м1г 2м1х 2м1к 2м1м 2м1н 2м1с 2м1т 2м1з 2мј. 2мл. 2мљ. 2мр. 2н1ђ 2н1ћ 2н1ч 2н1ш 2н1ж 2н1б 2н1ц 2н1д 2н1џ 2н1ф 2н1г 2н1х 2н1к 2н1љ 2н1м 2н1н 2н1р 2н1с 2н1т 2н1з 2о1 2пј. 2пл. 2пљ. 2пр. 2р1ђ 2р1ћ 2р1ч 2р1ш 2р1ж 2р1б 2р1ц 2р1д 2р1џ 2р1ф 2р1г 2р1х 2р1ј 2р1к 2р1љ 2р1м 2р1н 2р1р 2р1с 2р1т 2р1з 2с1ђ 2с1ћ 2с1ч 2с1ш 2с1ж 2с1б 2с1д 2с1џ 2с1ф 2с1г 2с1х 2с1с 2с1з 2с3кј 2с3кљ 2с3тл 2с3вљ 2сц. 2сцђ 2сцћ 2сцч 2сцш 2сцж 2сцб 2сцц 2сцд 2сцџ 2сцф 2сцг 2сцх 2сцк 2сцљ 2сцм 2сцн 2сцр 2сцс 2сцт 2сцз 2сј. 2ск. 2скђ 2скћ 2скч 2скш 2скж 2скб 2скц 2скд 2скџ 2скф 2скг 2скх 2скк 2скм 2скн 2скс 2скт 2скз 2сл. 2сљ. 2см. 2смђ 2смћ 2смч 2смш 2смж 2смб 2смц 2смд 2смџ 2смф 2смг 2смх 2смк 2смм 2смн 2смс 2смт 2смз 2сн. 2сњ. 2сп. 2спђ 2спћ 2спч 2спш 2спж 2спб 2спц 2спд 2спџ 2спф 2спг 2спх 2спк 2спм 2спн 2спп 2спс 2спт 2спв 2спз 2ср. 2ст. 2стђ 2стћ 2стч 2стш 2стж 2стб 2стц 2стд 2стџ 2стф 2стг 2стх 2стк 2стм 2стн 2стп 2стс 2стт 2стз 2св. 2свђ 2свћ 2свч 2свш 2свж 2свб 2свц 2свд 2свџ 2свф 2свг 2свх 2свк 2свм 2свн 2свп 2свс 2свт 2свв 2свз 2т1ђ 2т1ћ 2т1ч 2т1ш 2т1ж 2т1б 2т1ц 2т1д 2т1џ 2т1ф 2т1г 2т1х 2т1к 2т1м 2т1н 2т1п 2т1с 2т1т 2т1з 2т3вј 2т3вл 2т3вљ 2тј. 2тл. 2тљ. 2тр. 2тв. 2у1 2в1ђ 2в1ћ 2в1ч 2в1ш 2в1ж 2в1б 2в1ц 2в1д 2в1џ 2в1ф 2в1г 2в1х 2в1к 2в1м 2в1н 2в1п 2в1с 2в1т 2в1в 2в1з 2вј. 2вл. 2вљ. 2вр. 2з1ђ 2з1ћ 2з1ч 2з1ш 2з1ж 2з1ц 2з1џ 2з1ф 2з1х 2з1к 2з1п 2з1с 2з1з 2з3бљ 2з3дл 2з3дљ 2з3дв 2з3гј 2з3гљ 2з3мл 2з3мр 2з3вл 2з3вљ 2зб. 2збђ 2збћ 2збч 2збш 2збж 2збб 2збц 2збд 2збџ 2збф 2збг 2збх 2збк 2збм 2збн 2збп 2збс 2збв 2збз 2зд. 2здђ 2здћ 2здч 2здш 2здб 2здц 2здд 2здџ 2здф 2здг 2здх 2здк 2здм 2здн 2здп 2здс 2здз 2зг. 2згђ 2згћ 2згч 2згж 2згб 2згц 2згд 2згџ 2згф 2згг 2згх 2згк 2згм 2згн 2згп 2згс 2згз 2зј. 2зл. 2зљ. 2зм. 2змђ 2змћ 2змч 2змш 2змж 2змб 2змц 2змд 2змџ 2змф 2змг 2змх 2змк 2змм 2змн 2змп 2змс 2змв 2змз 2зн. 2зњ. 2зр. 2зв. 2звђ 2звћ 2звч 2звш 2звж 2звб 2звц 2звд 2звџ 2звф 2звг 2звх 2звк 2звм 2звн 2звп 2звс 2звв 2звз 3ч2лан 3ч2лањ 3б2дењ 3б2дет 3б2дјењ 3б2дјет 3ц2мач 3ц2мак 3ц2миз 3ц2мок 3г2дегод. 3г2декад 3г2декак 3г2дјегод. 3г2дјекад 3г2дјекак 3г2мил 3г2миљ 3г2миз 3г2нај 3г2нежђ 3г2нев 3г2незд 3г2нијежђ 3г2нијезд 3г2њав 3г2њеч 3г2њес 3г2њет 3г2њев 3г2њил 3г2њиљ 3г2њио 3г2њит 3г2њур 3г2ној 3г2нос 3г2ноз 3х2тел 3х2тењ 3х2тети 3х2тев 3х2тјел 3х2тјењ 3х2тјети 3х2тјев 3к2неж 3к2нез 3к2њиж 3к2њиг 3м2наж 3м2нож 3м2ног 3п2сич 3п2сик 3п2сов 3п2суј 3р2ђа 3с2фер 3т2маст 3т2мул 3т2муљ 3т2муо 3т2мур 4р3је. 4р3јем ч2в ш2ч ш2л ш2љ ш2м ш2н ш2п ш2т ш2в ж2ђ ж2б ж2д ж2г ж2л ж2љ ж2м ж2н ж2в а3а а3е а3и а3о а3у б2ј б2л б2љ б2р ц2ј ц2р ц2в д2ж д2ј д2л д2љ д2р д2в е3а е3е е3и е3о е3у ф2ј ф2л ф2љ ф2р г2л г2љ г2р г2в х2л х2љ х2р х2в и3а и3е и3и и3о и3у к2л к2љ к2р к2в л2ј м2л м2љ м2р не3г2де. не3г2дје. ни3г2де. ни3г2дје. о3а о3е о3и о3о о3у п2ј п2л п2љ п2р с2ц с2к с2л с2љ с2м с2н с2п с2р с2в т2ј т2л т2в у3а у3е у3и у3о у3у в2л в2љ в2р з2б з2д з2г з2ј з2л з2љ з2м з2н з2р з2в}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-is.lua0000644000175000017500000007253212161703335024666 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="is", ["source"]="hyph-is", ["texcomment"]="% Icelandic hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\ %\ % Source: icehyph.tex (2004-03-08)\ % Author: Jorgen Pind \ %\ % The above mentioned file should become obsolete,\ % and the author of the original file should preferaby modify this file instead.\ %\ % Modificatios were needed in order to support native UTF-8 engines,\ % but functionality (hopefully) didn't change in any way, at least not intentionally.\ % This file is no longer stand-alone; at least for 8-bit engines\ % you probably want to use loadhyph-foo.tex (which will load this file) instead.\ %\ % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\ % with help & support from:\ % - Karl Berry, who gave us free hands and all resources\ % - Taco Hoekwater, with useful macros\ % - Hans Hagen, who did the unicodifisation of patterns already long before\ % and helped with testing, suggestions and bug reports\ % - Norbert Preining, who tested & integrated patterns into TeX Live\ %\ % However, the \"copyright/copyleft\" owner of patterns remains the original author.\ %\ % The copyright statement of this file is thus:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ % If you're the original author of patterns or taking over a new revolution,\ % plese remove all of the TUG comments & credits that we added here -\ % you are the Queen / the King, we are only the servants.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % Before a new \"pattern-revolution\" starts,\ % please try to follow some guidelines if possible:\ %\ % - \\lccode is *forbidden*, and I really mean it\ % - all the patterns should be in UTF-8\ % - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\ % and if you really cannot do without, also \\input and \\message\ % - in particular, please no \\catcode or \\lccode changes,\ % they belong to loadhyph-foo.tex,\ % and no \\lefthyphenmin and \\righthyphenmin,\ % they have no influence here and belong elsewhere\ % - \\begingroup and/or \\endinput is not needed\ % - feel free to do whatever you want inside comments\ %\ % We know that TeX is extremely powerful, but give a stupid parser\ % at least a chance to read your patterns.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % The Icelandic Plain TeX hyphenation tables\ % as of Nov 2 1988.\ % Jorgen Pind, Institute of Lexicography, Univ. of Iceland\ % jorgen@lexis.hi.is (Internet)\ %\ % Mar 2 2004: Uploaded a new version to CTAN, with a clarified license\ % statement, at the request of the author, Jorgen Pind.\ % Kristinn Gylfason (kristgy@ieee.org)\ % \ % This file may be distributed and/or modified under the\ % conditions of the LaTeX Project Public License, either version 1.2\ % of this license or (at your option) any later version.\ % The latest version of this license is in\ % http://www.latex-project.org/lppl.txt\ % and version 1.2 or later is part of all distributions of LaTeX\ % version 1999/12/01 or later.\ %\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzáæéíðóöúýþ", ["data"]=".að3 .aða4 .aðk2 .aðl4a .af3n .af3re .afr3í .af1s4 .agn5ú .al3e .al4l .am4s .an3k .ann4e .ar2 .ar3a4b5 .arth5 .asp3 .aum5a .ám4 .án4a .ba4 .da4 .dam5a .dav3 .dr4 .ds4 .du4 .dust5 .ed5ik .eftir5 .eigin5g .eink4 .ekt4 .er4m .eyf2 .fa4 .fi4 .fjár3 .fl4 .fla4 .fr4 .frá1 .ga2 .gar4 .gas5l .gd4 .gem5 .gja2 .gl2 .gr4 .gu4 .her5sk .il4 .ingj5 .is4m .ís1l .ja2 .jar4 .ka4 .kal5e .kam5e .kapí3 .kart5 .kast3 .kn4 .kr4 .kur4 .la4 .lag5e .leik5sv .líb5 .lu4 .ma2 .maj5 .mak5r .mi4 .mj4 .mu4 .mynst4 .na2 .ní5f .ný5f .ol4íu. .óa4 .óð5al .óf4 .óg2 .ók4 .óm4i .ós2 .pa4 .pl4 .ra2 .ram4 .rí4 .róð4 .rúm3 .saman5 .sk4 .ski4 .skj4 .skr4 .sl2 .sm4 .smá3l .sn4 .snar5a .sp4 .spr4 .st4 .sta2 .ta4 .ti2 .til3 .tí5f .tr4 .tu2 .tví1 .ung3l .unn5usta .úr1 .út1 .út5s .vegg5s .vist3 .yfir3 .ævi3s .öfl3 .ögr5 .ör3s .öt3u 2a3a4 a4ab a4ad 2a1á2 2a1b ab4a 3abís a5by abæk4l 4ac 2a1d4 a5dó a4du 1að 4aðað að3al að3ar 2aðfa 4aðfö að3g að3i 2aðl að4li 4að2m 2aðsh 3aðu. 2aðv 2a1e a5ei a4es 2af af3ald af3arn a3fá af4fr af3g a1fj a3fló a1flu af5ork a1fr af3ré afr4u a5fræ 4afsd af1sk 4afsso af2u a1ful a1fun 3afurð 2ag a3gau ag5ál ag5is a5gj agn4ara ag2ne ag5ot a1gr ag4ra ags4ið ag4sp ag4stj ag4ul ag3æð 4a1h 4ai a3ið a4in aí4h 2aj a3jö 2ak akaup4s a5ká a1ke a5kinnin a5kistu a1kj ak5rei aks4l 4akss ak3u a3kv a5ky a5ký a3kö 2al a1lag 4aland a5landið a5landinu alas4 alá4 a4lem al3er al1f al1g 5alge 3alh alis4 al4ín al3kj alk5s al3k2u al4lí all2s allst4 al4lý 4almað al5mann al5m2i a3log a5lok al5op a5lóð al4sæt al5up al5ú al3v4 a3ly a1læ a1lö 2am am3ang a3mann am3ari am3ars am3a4s am3dr a3mí am3k am2m amm4is a1mó am3se ams2i am1t 1an 3an. 3ana. an3ada 4anag 2anal 4anau 2aná 4and. and1e 4an4dí andr4 4andö 4ane an5ei 2ang an4ga ang1d an4gj ang5spi an2g3ö 4anib 4anið an5ín 2ank ank5l ank3v 3anm ann5d 4annf 4annh ann1k 4annl 4anns annsk4 4an4o anst4 an3sti an3tí 3anu 4anú 4aný 4anæ 4anö 2a3o 2a3ó 2ap ap3al a3per a3pil a3po a5pre ap3te a5p4un a5pör 1ar 3ar. ar3afu ara5kr ar3ang 4arani ar4arp ar2as ar5ast. ar3au 2ará4 4aráð 5ar3ák 3ar3ár 3ar1ás ar1át 3ard2 4ardí 4arð. arðar5á 4arði 4arðs 3arðu. 2are 3ar1ef 4aref. 5areig 5arein a3rek ar3el ar3en ar5er a3ret 4a1ré 2arf 3arfe 3arfé arfs3k ar1fu ar3gj ar4græ args4 arg3sl 4ar5ið 4arif ar3in ar4ind ar5ist. 4a5rit 4a1rí ar3j4 4ark. ark4is ar5kj ar3kr4 4arms ar3mú 4arna. 4aroð 4arol 4arot 2aró 2arp 4arra arr2i arr4u ar4sá 3arse ar1sk ar4spi arst4 5arstí ar3su ar5til artr2 ar5trað ar3u ar4uð 4ar4ug 5arum 2ar1ú a5rús ar3v4 ar3yf 4arý 2aræ a3ræð ar5æv 4arö as2 4a1sa as3an 2a3sá 4ase 4asé 2asi a5sinna 2asj 4a1sk 2asl a3slag 2a1sm 4asn 4aso 4asó 2asp aspít4 4ass ass4v 1ast 4astað ast4and 4astau 4aste 4asté 4astig 4astin ast4ing 4astirð 4a1stí 4astj ast3l 4asto 2astó 4astrá ast5ráð 4astrí 4a3stræ 4aströ 4astul 4a3st4un 4astú 4a3sty 4astæ 4astö 2a1su 2a1sv 4as4y 2asý 4asæ 2asö 2at at3að a3tak a3tal at4anv ata4r a1te at3ey 3ath a1til a3tj 3atk atns3 a4tó atr4a at1re 3at1ri at2sp a5t2un a1tú at4ve 3atvi a1tö 2a4u2 4auð. auð5li 5auðn aug4as au4m aum5ba aum5un aun5dr aup5e aup3l a5upp au4s ausa5m au4t 2a1ú 2a1v av4ar. a3vir 2ay a5yf 4az 2a1þ a2þó 2a3æ 4a5ö á1a áak4 áa5lo á1b á4bu á1d4 4áð áð2s áð3sn áð3sta áð2u áð3us á1e áf2 á5fá á5fí á3fl áflæð4 áf5un ág2i ágl4 ágr2 ág1s ág3v á1h á1i ák2a ákam4 ákap4 ákó4 ála3m ál3arf ál2as á5lau á3let álf3d4 álf5sk ál4m álm5an álm5u álp3 ál4se ál5sva ál5ug á5lú ál3æð 2ám ámál5a ámsl4 á2n án4aro án2as án4o á3ný 5ánæ á3o 4áp ára5g ár3an árar4 á5ré ár3f4 ár5g ár5k4 ár1m árns4 árn5sl ár2st ár5t ár1u ár3v á5ræ ás5en á1sk á2ska á4ske á3s4l ás2m ást2 ást5i ást5ráð ást5rík ást5v 4ásu4 ás5va át3að á1te átr4as áttar3 5áttin. átt3un á1tæ á1u áuk4 á3ve á3ví á1væ á1þ á5æð b2a 4ba. baðk4 ba4h bak5sl ba2n 4bana 4baní bank5an 4bans b5ant bar2b barð4as bar2n bá4s 2b4b bb3að bb3an bb5arn bb3i bb3uð 1be bess4 b2i2 bið5i bið5lis bið5r4 bif1 bilj5 bill5 4binn bisk3 b4it bit2a 4bía 2b3ís 2b3íu 3bj bjar2 b4l2 bl4íunn 4bn 5bo 3bó4 bók3s b4r2 br5að bra4s 3bro br4u 3brú 4bum4 bur2 3burð burst5að bu4s 1bú búf4 bú3sta 1by 1bý bæk2i bæn4a 1bær b5ættism 1bö 4böki c4a ci4 ck4 4da. daf4 dak2 3dal. 5dals da1m4 d5ang d4aní d4arad d4ar4að dar4ár d3arf d5arp dask4 da3sl 4dav d1b 2dd 4dea d5ef 3deg 1deil d1en d5eó 5dep d1f4 d1g2 d4gi d1h d1i di5fu d3ill dim4 di3ma di3nav d2ine dir3s dí3d d5íð d5ínu 3dís dív3 3dj4 djarf5a d1k2 d1l2 d2la dl3að d3lag d3lau d4lið dl3u d1m d5olf d5óð d3óf dó5lí 1dó2m dóm5an dó5ne 3dór dó2s dós5e 4dq d5raðf dr4aðs5 d5raðst drafn4 dr4ara 3dreg d5reip d5rey d5riða d3rík d5roð dru4 d4ræt 2ds d5sal d4sjö dsk2 ds4ko ds5kun ds1l d5snö ds1s4 d1st4 d4sti ds4uð d4söf d1t2 d1u duf4 5duft duk4 d4umb du5ræ d4usta d3ún dún4a dút4 d1v4 4dw 1dy 1dý d3þ 1dæ 4dæf 4dær 3dö ð1a ðaf4 ða3g ðak4 ð4albo ð3ald ðal4is ð4a1m4 ð3a4n ðanmeg4 ðar1a ð3ar3f ðar3l ðar4lis ðar3t4 ð3arú ðat4a ð3au ð3á2 ð1b ð1d2 ð1e ð3f4 ð1g ð2ga ð2gi ðg4l ð4gn ðgu4 ð3g4ul ð1h ð1i ði3g ðik4 ð3in ðis5l ðist4 ð4ista ðis4ve ðj3as ð3jó ð4ju ð3ke ð1kr ðk2un ð3kunn ð1kv ð1lá ðl2in ðl4ist ð3lí ðl4ur ð1læ ð1m2 ðnum4 ð3o ð3ó ð1p2 ðr5át ð1re ð1ré ð3rik ð3rík ð5ró ðr1u ð3rú ð1ræ ðræðis5 ðs5afl ðs5á ð4seg ðs4inn ð1sk ðskr4 ð4skú ðs5kv ð4skö ðs4lu ð2so ðs3or ðss4 ð1st2 ð2stí ð3stö ðs4u ð4svi ð2sæ ð1t4 ð1u ð3uð ð3ug ð3ull ð5uls ð5unn ð3unu ð3ur ður5á ður3f ður5g4 ður5st ð1v ðv5að ðv3ann ðv3arn ð1y ð5ý ð1þ eat4 ebr5e ed4e e1dik ed3it eð3a2 eðal1 eð3il eð4is e2f e3fal ef3i efj5an ef4n 4eft. 2efts5 eg4ge eg3i egr5u eg3u4l egur4s e4i eið5ar eið4st eif4as ei4ka eik3li eik3u eil3ag eil5ö ei2m eim5u eing4 1eink 4eino eist5að e4k ek2is ekj5a ekn3 ek3u ek5ú e2l el5ás el4d el3eg elf3in el4gr el1i 4elí el3ín el4ke el2l ell5an ell3e elleg4 el3ó el3r el1sí 5elsk el4te elu5s e2m em4ba 1embe em5ens em3i4 emj3 em4l eml2i empl5 em5u e2n 4enc en4g eng3a enik4 2enn enn4t en4t ep4h ep3i epl5i e4pr ep4t e4r er3al er5au er5á 4erð 5ere er5et erf5ar er2fr erf3u erg5l er4gr er3i er2k er4la erl3i er4lí er4mi erm5in er5ól er5skj er1un er2v er3ö eröf4 e2s es3a es4ban es4bu 4esj e5ske 4eso esp3a es2s est3að est5ö e3sæ etik4 et5ils etna4 et5o etr5an etr3u etul4 et2us ext4u 5eyrar é3b é1d éð2s é3fe é1g4 é5ky é1l éla4g él4ara é2li é4lj él3r ér1 ér4á ér4r érs4 ér4un ér3v é3sm étt4ug ét4un étur4 f3að fa2g fa5k 1fall fal4u fa4ná fa5p4 f2ar f3arð f4are f4arg farka5l f3arl fast3e fá3f f5áns fá3rá fá3ta fá3v f1b4 fd2an f1dr f5dú fða4l 1fe f3ef f3ein 3fel f3end ferl5i fer3t f1ey 1fé f4fa f2fo f1fr ff4st ffær4a f1g2 f2ga f2gi fg4n f1h f3ið fik4 f5il. f5ili f3ill f5ils f5ilv fim3a f4ine f3inu 3firði f3irðu firg2 f3irn 1firs 3f4isk fi5so f3ist. f3istu fis5v fí4 f5íkv f3ís fj4a fj5aðu fj5ann fj4e f1k2 fl3and fl4at 3flata f5lát f4len fl5g 1flo 5flut flv4 4flý 1flö f1m 4fn fn1g f5n4í fn3k fn5ok 1fo 4fop forf4 fork4 1fó fr2 4fra. fr3að fra4m fram3l fr5and 4frar 2fri. fr5in frí5m4 f3róf fru4 fr3uð 1fræ 2f3ræk 4fræn fs3á f4sel f4skaf fsl4 fs3li fs5na f2so fs5or fsr4 fss4 f4sti f5s4tæ fs1v f4sæ ft3að fta4sk ft5á f3te ft2s fts5l ft3u ft4ul f1u 4fu. f3uð 3fugl fund4as 2f3ur 5furðul fur5e furs4 fur3t 4f2us f5ust. f3ustu f1v4 1fy f3yrt f1þ 1fæ 1fö för4l g1a 4ga. 4g3að gaf4ar gagl4 3gagn gak4 ga4lag gal4is 5gals 5galt gam3al gam4i g5and 1gang gap4a g4ard. g2arð 3garð. 3garða 3garði 3garð4s 5garður g3ar3f gar4kl gar3l gar3t 4gas g4as. g4así g3ast. ga5stað 1gata gat4r gá2 3gáf gá5le g1b gd4ans g3de g4du gd4v gð4aro 1ge 3gei 2g1el gen4 g5end 3geng g3ent 5gerð ger5í germ4 gerv5a get3r g1f2 ggis5 ggjaf3 ggj5ar gg5rá gg3ræ ggs4v gg3ug gg2v g4gö g1h g1i 4gi. 4gik gi5kv 3gild g5ill 5gilt gim4a 4g3i4n gis4a g4isp g5istæ gír5a gís4 gjaf5ar gjaf5o gjak4 gjal4 gj4asta 1gjö g1k4 gkal4 g1lá g4leð g3leg gl5é gl3f2 g3lit g5lín gl3ót glsk4 3glugg glu3s gl4y g3lær g1m4 gnap4 gnart4 g4ná gn3g g3nó gn4se gn5ug g4ný. 3gol g3or 3góð gór5 gó4ur g1p g3rak4 gr4an gra2s gras5sv g2rá 1grei g3reis g5reyð gr2i 2gri. grið4 g3rík 3gró 3grund 3grunn g3ræði g2ræn 4gs gs1á g4sei gsk4 gs4len gsl2u gs4lö gs3m gs5or gs3s4 gs4si gs1v gt3að g3te gt4s 2g1u g4uði guðl4 5g2uðs guð4só g3uðu 5gufu gu4lagi g5ulin g3ull g3uls gu5mið g3un gurf4 gur3g g4usta g3ú gúst5a g1v g2va g3val 5gyð g1þ 1gæ gæð4as gæl4 gær3 1gö4 h2a4 4ha. hað4 haf4sp hand5r hat3r há3g hál4 há3re há4ski há5sta hás4u hát4 há5ti hátr4 há1v he4 hei2 hellis5 hen2r herk4 her3l4 hersk4 4hersla hey5st 4hg h4i hig4 him5b hin4 hit4as hit4n 2hí2 h5ía hí5b hj4 h2l2 4hl. 4hls hlu4 h4n2 hnja4 hnjá3l holl3u horm5 hó2 hóm5e hót3 hr4 4hs hu4 hug1r hug3u hul5i hundr4 hú2 húm3 4húr hús5k hv4 hvar4 hvik3 5hy hæf5a hætt4us höst3 2ia i5as 4i5á 4i1b ibb3 ibl3í 4ic 2id4 i3da i1de i3dr 1ið. 4iðf 2ið3g ið5jarð 4iðr 4iðs ið5sal 2iðu 4ie i3ef 4if if5arn ifat4 i2fen if4g if3is if4t i4fy 4i2g iga3m igð5u ig1en ig5rí 2i1h 2ii i5ið 4ij 4ik ik5á ik3i ik4is ikt5o i4kvö 2il ila2g il4ara i1lá 4ile ilf4a il1fi il1g4 i5liðu il5in il3ip il5ís ilí4um il4kv il3lag ill5an il3lá i1lo il4sa il1sk il3sn ilst4 ilæk4 i5lön 4im im4b imb3u im3i im4ið im4la im4m i5mó im4sv 1i2n 4inaf in3an 4inar inat5r 2i3nau 2ina2v inav3í 4iná 4ind. in4ga ingj6arni 4ingr ingv4 2inns 2innu in1o 4inó in1s4k in2sp in3sta in5ul 4iný 2i3o 4ió 2ip i5pil 3ir. 4ira 2i1rá 2irði 4irðn 4ire 4iré irf2i 4irfs 4irig 2irit 4i1rí 2irk irk3u ir3l ir1m4 4irnd 4irni. 4irnin 4irnis 4iró irs4á irst4 ir3tal irt5i 4irtl irt4ö ir3ug 4irú 4irö i2s 1is. 2isa 4isag i5saga i3sam is2as 3isd 2ise 4ishv 3isins 4isí4 4isj i3sjó 2isk is4ka isk5el iski3m isk5inn. 3isko isk2u isk1v 5iskö 2islé is3læ 5isma is5me 4isni isp3að isp3u iss2i is5sú ist3al 2iste 4isté 4istig i5stik ist4is ist5ín 4isto 4istó 4isty 4istæ 2istö is5tök is1v 4isvi is4við 5isvin i3svæ 2isö 2it it3að it5ann i5tei 4ith it4ha it5ill itis4m it2ka itn5es it3rí it4stö it3un it4urn it4ve 4iu 4iú 4i1v i2v5ís 4ixs 2i3þ 4iæ 4iö í1a 4í5ak íal3 í5ald í3ali í2as í5at í5au í5á íb4a í5bar í4be 5íbú í5dag íð2s3 íðsk4 í3el í3en íet3n í5ett í2f íf3eð í4f3i íf5rí ífs3k íf4sp í2g íg3e í3gil í1h í1i ík3a4 4ík4anar 4ík4ani ík5is íkk2i 5íkm ík2n íkn5e ík4s ík3us 2íl ílak4 íl2as íl5ár íl5f4 í3lí 5ílmá íl3sk 4ím ím3að íma3l4 ím3an ím4g ím5o ím5t ím3un í2n í5ná ín5e ín3ge ín5t ínu3g4 ín3ú í3óp íóp5íu 4íp ír5ak íra4s í4r5i ír4sv ír3t í1ræ ír5ö í2se í4s5j ísl2 3íslen ísl5i ís2m í2st ís5ter ít5að ít5als ít3i ítj5 ít3re ítr5ó 4íub í5uð 4íul íu1ma í3un íu5p í3ur í4ura 4íusa íu3t 4íuv ívo4 í5þ j2a j3að j5aði 3jaf4n ja5kl jal2 jal5ið ja5ló j4am j3an j4aram j3ari jark4i jarn4ið j4aræ jas4 jask4u j3ast jál5as jál4f jálf3a 3járn jár4u jáv3 jávar5 j1e jend4a j4ep j4er j4et j1i jó5b jó5fr jó2s jó5ug jó3ve j1u juf4 jug2 jug5as ju4gó j4u1l2 jur4e 5j2urt jurt4i j2us4 j3ust. 3jöfn 3jök jöl3k jöl1m kað4s kaf4an ka4fr kag4as ka4j kaj5a kak4l kal2 3kald 4kalf k4all 3kam4b kam2s5 k3ana k4anaf k3ann. k4anó k4ant 5kanta 4kapa kark4 1k2ar2l k4arm k3arn kar2r k4art kar4v kask4 3kass 5kastal k5astu. 1kau 5kaup kák5 kám3 k1b k1d4 2k1end 3kenn 3kerf 5kerl ker4m k1f4 kfalls5 k3g kgl4 k1h k3ið kið5l kig4 k5ill k5ilsi kim2 k5ing k4ip k1ir k3irð 5kirk k5irn k4irt k1is k5ise kisk4 k3ist. k4it ki3te 3kíl kís3 kít3u kja4l kjar4a kjar5f kju3g 1kjö 3kjör kka5l kk5e kkj1ó k2kl kk1lá kk4li kk3rí kk4se kkul4 kkv5ið kl2 kl3að kl3ann klá4 5klef kleif5a k4lem k1lin 3klj 3kluk 3klú 1klæ k1m2 k4mið. kn3ar k2ney kni5svi 3knú 1ko 2kob koff5 kol5d kol4l kol5sv 3kon 4kons 3kos kot4as kó3d kó3m4 kór5a k1ótt kra5l kr2as k2rá k5ré kr2i krif3a 1krö 3kröf 4ks ks4lí ks4lö ks4má ks4n ksp4 k4ste k4stó k4str ksyf4 kt3að kt5er k4tí k3tora k5ty 2k1u k3uð k4uði kuf4 kuk4 kulegr4 kum4 kumb5 k5un. k5una. k3unar k5uni 5kunnátta k3unu k3ups k2urð kur5k k2us ku5sl k3ust. k5ustum ku3sty kú2 3kúlu k3ún kú3re kút4us 3kven 4kvé 4kvu kv4un. 1k4væ 3kvö 4kvör k5þ 3kök 5köld 5könn 5kös 2la. 4lac la4dan 2lað lað4al 4laf laf4as laf4r l3afs 3lagð 4lage 2lak la5kó la1l2 l3ald lam4b 2lana l2and 3land. 3lands 1lang lank5as 4lann l5anna. l4anó lan4t la3pl4 2lar l4aram l4are larg4 l4aris l3arn la3ró lart4 l4ary 2las las3i las3le la5sli last5að lat3ín lat4u 1lau 2laum laut5as lá2g lám5a lán5e 4lár lá4t 5látum lá3v 2l1b 2ld ld3ar ld3d ldem4 ld3ey ldig4 ldr4as ld5rau l4dri ld5ro ldr3ó 1le 4le. 2lef l1efn 4legn leif5as leik3v 4lein 4lek 4lel 4lenn 4lep 2ler le5rí les5e 2let l3ex 2ley. 4leyj 2leym lf4as lf5át lf4dr lf3f lf2i lf5inn. l3fj lf2l lfla4 l4fó lf4sp lftr4 lft4un 4lg lg2a lgar4s lg5ast l1gá l4ges lgil4 lg4isi lg3í lgl4 lgni5s l1gr lg4ú l1h 4li. lik4a li5kv lil2 li5la li3li l2ind 4lingsá l3inn l5inn. 2l3inu 4l3ir l1is l5is. l4isá l3isi lisk4 l5isr l4isti l5istu. lit4ar 3litl l3ía. lí4b 1líf líf5a lík3k lím5ug 4líp 1lít l1íu l4íuf l4íuh l4íutr lj3ar lj5arð 1ljós ljós5k ljós3l lj3ug ljur4 lj4uru 2lk lkap4 lk4as l1ke l3kr l3kúr l1kv l3ky 2ll ll3et l4ley ll3f ll1g2 ll3iða lli3g lliss4 l1lit llít4 ll3k4 ll3m ll1ót lls5tæ ll5te ll5ug ll3v 2lm lm5ari lm3ars lmb4 l3me l1mó lnar4 ln4ið l5no lo4 5loð 5loki 4lon 4l1or 5los lóð3r ló5gr ló4ma lp5t 2l1r l2ri l3rit 2ls lsí4 l2sj4 l5skin ls4kon ls4nesi l3stað lst4in ls1ve 4lt lt3að l5til lt4s lt4ú l1tæ 2lu 4lu. l3uð lugl4 luk4i l4u1l4 l1um lu1ma l1un 3lund l3unu lu5pe l1ur 2l1v l2va lv3að l3val l4víu ly4 3lyf 1lyn l1yr 1lý 2lýf lýt4a 4lýti 2l1þ 1læg lækj3 lækjar5 5lækk 1læti 1lög l5öl 4löt m2a 2ma. m4ab m4ad m3að. m3aða m3aði m3aðr m5aðs 1maðu maf4 m4ag 3mag4n m4ak mal4as mal3dr m3alf m3all m4alp mal4t ma1m4 4man. 4mana. m4aná m3anb 2m3and2 m3ank m3anl mann4as 3manni 3manns mann5t 2m3ans man5sa m3ant 4manu ma2r m3ara m3arb m3arð 1m4ark marks5 m3arn mar3o mar4s mars5m m4arú m1as mask4 ma4sp m3ast. 1má 4má. 3má2l mál3f4 2mám má5mu má5p 4már 4mb mb5aði m1ban mb3i mb4ir mb3un md2as md5asta md4v 1me 4me. með3 m5ef megin3 5m2eis meltr4 m1end 3menn m5erh m3er3í mest5a m1f4 m4fí mför4u m1g2 mgl4 m1h mið3i miðr4 mi3ge 3mik milj3 mil4l millj3 m3ing 5minj m3inn. min4s m3inu m3ir m1is mis3k mis3lu mism4 2mí mjó3sl m1k m2ka mk4arg mk4as mk2i mk4l m1l m2la m3lag m3lau m2lá ml3ár m2li m5luk 4mm m2m3a mm5b m4mó mm4sv mm3u m4nesku 2mog 4mok 3mol mong5 mód3 móð4s mó5g4 m5óní mó3rau mó4s 3mót mp3á m5pe mp3i m3rau m5rá m3re m3rý m1ræ 4ms ms5ál m2se ms5ei m5skau ms5kj ms5lá msn4 mssetr4 m1sv m4sví mt3að m4ti mt2is m3tug mt5un mt4us mt2v m1tö m1u 4mu. mug4u 4mul 4mum m2un 1mund m3ung 4mur m4uru mu5sta m3úð múg4u m1ún mús4a m1v4 1my 3mý mý5m m1þ 1mæ 1mö mör4 n1a 4na. na2da na4dí naðar3 naf4 nafl4 nafl5an 3nafn nak4a na4kr nal2 na3la n3ald na3li na1ma n4anaf n5ang n5ann n4arak n3ar3f n4arfi n4arfö narg4 n4aris nar5m nar5rin n4aru n4arú nat4 n5aug n3auk naum5a 1ná ná1g ná1k 3ná4m nán5ast n1b nbæj4 nd3er nd4isv n4dj nd3ót nd3rek ndr1u nd1ræ nd4sen nd3ug nd5ul ndur5g nd3ú 1ne neð2s 3n2ef 4nefl n4em nem5a 2n1en 4n4er nestr4 netl4 n5eyi n3eyj né5sk n1f2 nfr4 nga1m ng5are ng2as n2ge ng5ek n3ger n3get ng1ey ngi5k ngil4i ngi5lið ng5lag ngl2i ngl5ið ng5ólfs ng4ra ngr5an n3grí ngr3u ng3ræ ng4sj ng4sp ng4ste ngurs3 ngu3t n1h 4n1i n4iði ni5fr ni3gr ni3lu ni5m n4iru n3isa n4isá nisk4 ni3skó nis2m nis5s ni3ste ni5stæ n3ía n3ísk n1íu ní4um njál4 nk2 nk3að nk5and nk3ans n5ká n1ke nk3i n5kó n3kunn n5ky n5kö n1l2 nli4 n4list. n1m4 n2n nn1á nn1e nn3g2 nnk4i nn4sj nn5ske nn4sto nn5stun nn5tó nn3ug nn2us nn3úð n1or 1not n5ólf 5nóttin n3p4 n1r n3ram n5rau n2r4i n3rit n3sak n5sát n4seg ns5es ns5is ns1í n3skil nskír4 ns5kja n5skö nsn4a ns5r nst4e nt3að n5tak. n5taki n3tal n1te ntgen5 n3til n2tí nt2s nt5sk nt5sm nt3ug nt4v n1tý n1tö n1u nuf4 n4ugr nuk2 nu1l nu1ma 5numd nungs3 nur5f nur4l n3ust. nu5stað nu4sv nu5ta 3núm3 nú4s n1v n5yf n3yrk 1ný n3ýg ný3l ný5sk n1þ 1næ næl4a 3nöf n3öld n5ön 5obs oða3l oðr4 oðs5l oð4ug o2f of3ang off4u of3o of5r of4sj of5su oga3l4 ogast4 ogs4u ok4as olak4 old3u ol2g oll5eg ol5lit oll4st ol3m ol3ó oltal4 o2m om3a om4m3 om2u om3un on3sv on4t on5tó on4us opa5p op2h3 op5u4 ora4 or4di or1e or2fe or2gr 3orí orlag4 or2ma or4mi 4orn or4ne or4sta ortr4 ort3ug or1u or3ug or3v4 or4við or3y o4s osk3i os3m os2s ost5i ost5un 4o4t ot3að ota5l4 otam4 ot3ro ots4á ot5un o4u o3ve ox4 ó1a óaflat4 ó5an óar4s ób3ak ód4a óði4 óðl4 óðm4 óðv4 ó5e óf3ar óf4as óflu5s ófr4 óf5us ó2fy ó4fö ó2g ó1h ó1i ók5lo ó3kr ók2u óla3m ól2as ól5ik ól4is ól4kv ól5om 3ólsk ó4m3að óm3ar óm4bæ óm2g óm4is óml4 óm3p óm3stu óm3u ó2mö ó4n ón3í ón5kv óp4e óp2h5 ór4as órá4 ór2d ór4dö ór5es órf4 órg4 ó4ri ór4is órík4 órj4 órk4 órm4 órn4o ór3ón órr4 órs4a ór1u ósa5f ósak4 ó3sem ós3end ó5skaf ósk4as ósk5in ós2l óslav3 ó2só ósp4 ós4se ó4ta ót3að ótap4 ót5ef ótil4t ó5tí ót4ó ót2v ó1u óum5b óv4a ó5vat óy4 ó5þ p1a pag4 pa4le pa3m pa4n pan3gó pa2r p4arat pari3f par5í p2art par5te p4aru p2ák p4ál pá5m p4ár pá2s p4át p1b p5d p1el 1peni 3pers p1f2 p1g2 p1h p1i pil5ar 5pilt p4ink pist5i pit4 3píp pí2t pl2 pl3að pla4s p4læ 3plö p1m4 1pok 3pós p2p pp5aks pp5e pp3í ppk4 pp1l pp3ó pp1r ppsk4 4pra pr2i p4ris prí4 3prj 1pró pró5fas pró5m p1sa pss4 p1st pt2ú p1u puk4i pu1l pur4a 3pú púf4 p1v qu4 2ra 4ra. 5raðsh raf4f r3ald ral4i r4all r3als 3ranal r4ani. 3ranns r4anó 4r3ar r4arað r4arú r4ary r4aræ ras3i ra3tu r4aum 1ráð ráf4i rá5kvæ rárs4 r4ása r1b4 rba4 r1d r2dí r4ð rð4ar4á rð5is rð1l2 rð4mu rð5rá rð5su rð3sv rðv4 r4ef. r4efs 5reftsk 1regl r3eig 3reik r5enu r5eu r4eyn r4é r1fal2 rfa5li rf4ar r3fá r5feð rf1is r1fj rfjár4 rf4lö rfóg5 r1fr rfr4u rf4st r3fund rf4urð rgj4að rgj4ar rg2l4 r5gly r1gr r2gra r4grey r5h 4ri. 4r3ið. rig2 riga5s r3ild 4rin rin5e ringj5ar r3inu rip4s 4r3ir ri3sk ris5l2 3risn rist5að ris4un 1ri4t rit3li 4rí. 4ríf ríkis3 4ríl ríst4 4ríu 4ríþ rj3ar rjá4l rjó3sa rjósk5a rka1m rkaup4s r3ká r1ke rk1ef r4kell r4kelss rkju3s rk4se rk1sm rk4sp rk4ú rk5vei r3kö r1l2 rl3að rl5ann r2li4 rl4ið rlis5s r3lit rl3m rlof4 rmak4 r1man rmáls5 rmb4 rm2i r1mið rmil4 r5mj rmk4 rml4 r3móð rmr4 rn3ar rnar5l rn1g rn5ór rn5sí rn5sm rn4so r4nu r5numi ro4 rog4as ron4 r1or ró5gr ró4m ró4sa rós3ó 5róti r5pal r3pó r1pr r4pri rp2s rp3sk r5py rr5ar r1rá r1re r1ré r1rí rr2k r3ró rr1u r5rú r1ræ r1sa r4saf rs4ár rsegl4 r3ser rs4inn r3ske r5skil rs4lan rs2má r1st r2sti rst4v r3stö rs2u r5sund r4sú r1sv rt3að rta5g r3tak rta4sk r5tá rt5er rt3ey rt2hu r4tík r3tó r3trö rt4se rt5sl rtt4 rt4uru rt4ú r4tv rt4ve r1tæ rt1öf r1uð r4uðun ruk4i ru5li ru2m r1ur r4uss r3ust. rut4v r4úð 3rúm rúst5 r1v rv3að r3ve r2vi rvi3g rv3ing rv4un r3væ r3yr 1rým r1þ 1rækt ræmd5a 1ræn ræt3i röf4ug rök1r röl4 2sa. 4sab 2s3að s4aðf 1sag 4sagr 4sagt sal5at 4s3ald 1sa2m sam5b 4sam1e sam3m sam1s sam5y 2san s4ands 2s3ar s4are sarg4 s4aro s4arp 2s1as 2sat sat4a 2sau s3auk 4sav sá4 s3áb s5áf sálar5 s1ár s3ás s1b s3d4 1se 2s1ef 4seld. 5semi 5sens 2ser 2ses 3set sex3 2s1ey s4eyð 1sé s5f4 sfl4 sfr4 s1g4 sgl2 s1h shá4s s1i s3ið. 5s4iða s4iði sif2 si5fi 1sig sind4ar sind4as 5sinnu 2s5ins s3ir s3ist s4isv si3ta sí3br 1síð síðk4 sígl4 s3ík sí4m sínk5a s3ír s1ís s5íu. sí3v sí4ve 1sj s3jaf sjar4 s4já sjó5l sjó3m4 sjó3s 4sju 3sjú s2k 2sk. 4ska. 4skað skaf4a 4skal 2skan 1ska4p 4skas 1ská 1skei 3skemm 4sken 3skey s4k2i 2ski. 4skið sk3inu 3skip 2skir 4skis 3skír 5skjá 4sk4n 3skoð 4skon 4skos 1s4kot 1skó 5skóg 1skrá 4skró 3skrú 4sks sk3uri sk3ust 2skv 1sky 3ský 1skæ sla2 sla3f s4lam slands5 3s4lé sl2is s1lí s4líð s3lof s3lok 1sló slu3s 1slys s3læk s1m2 4sma smá1s smá5v 4sme s4mek s2mi 1smí smj4 4smö s2ne 3sneið 5sner s3nes 3sneyd sn4ið sn2o 1snú 4snúm s4ný snæð5 1so 4sod 3son 2sor s5orði 1só4 s4ól sól3e sól3s 2sóm s5ómag 4sós 1sp2 spít3 spj4 4spl 4spra 2spró s5pund sr2an s5rau s1rá s1re s1ré s1rí s5ro s5ræ s3rö s3s4á ss3er ss5í s1s4k4 ssl2 ssm4 ss5or s1st s4stir s1sv s2t 2st. s4ta 2sta. 4stal 4stap 5starfi 5starfs 4staæ 1ste 3stef 3stein 5stekk 4stet 1sté st4he 4sti. 1stig st4isl 3stíg 2stím 4stíu 1stj4 4stjón 5stjór 5stjör 4stl st3le 1sto 3stof 1stó 4stón 3stór st2r str5al 5stranda 5strang 5straum 5strá. 1stre 3strí 4strú s3try 5strön st5t 2s4tu 3stund 1st2ú 4stv 3stý 1stæ 2stæk 1s4tö 3stöð 4stöl 5stöng s1u su3f4 5sum3a s2ung s5upp s5ura sust4i sú4 súln4 s5ún s5úrs sút5 sv4 4svag 4sval s3vat s5veð s4vef s2vei s3veik 3svein 5svep 4svex s4viði 5sviði. s4vik svik3u s5vin s1vo s2væ 1svæð 1sy 2s3yfi 3syn 4s3yr 3s4ý s1þ 1sæ 4sæð sæf4 sæ5fa 3sæj 3sæl 4sæs 1sö 3sög sögu5s 2s3öld 3söm 2s3ör t2að ta2fr 1taka 5takend t4al. tala4m 4tam ta1ma t5amt ta4ná 3tang 4tar t4ar4að tar5is5 tark4 tarp4 tar5sá taræv4 t1as t4as. ta5sl tat4 ta4ví t4á4 5tákn 4tánd t1b t1d 4tegí 5tegu tei4 tein5g t1eis 1tek 3tekj tekkj5 t1end ten5ó 4tepl t3ett 2tey té4l t3f2 tfirr4 t1g t1h th5ers t1i ti4an ti5kis tild4 4tin tirk4 t4iræ tist4 t5ist. ti3sta tistil4 t2isv 1tit 1tí 4tí. 4tía 3tíð tí4l 3tím 4tín 4tít tív3 t4jö t1k tk4a t4k2i tlaf4 t3lag t4lag. tl2an tl5ann t1lá tl2i tlur4 t1læ 2t3m4 tn2s tnsk4 tnskr4 to4 1tog t3on 3torg 5toru 1tóm tóm3a tóm5as 5tónl tór1 tór5au tóri3s t1ót t3p tra2b 5traðari tr3alí tr2an tr3ann tr5ar 3traus t4rey 1tré tr4is t5risi t5ríka 3trj t5róf tr3ótt tr3ug tr3una tr5uni 1t4rú 1try t5ryð t3ræn 3tröð 4ts t1sa ts4inn t5sí tsj4 t1sk4 ts1s t1st4 ts4u t2sy tt3að ttak4i ttar5f tt5á tte5rí tt5ern t4tí tt5j tt1l tt1or tt3ræ tt3ug tt4ugl ttv4 t1tæ t1u 4tu. t4uði tugl4 tuk4 tu3l4ið tum2 tu5min t2ung 3t4ungl tup4 t3ur3e tur3k t5urs t4usa t4usu tutr4 túd3 t3úð tú4l 1tún tún4a t1úr tú3sk t1v 5tveggj t5ver 5týs t1þ 3tæk 1tök 1töl t5öls 2u1a u3af u5au 2u1á4 uáætl4 4u1b4 4uc 4ud4 u1da u5dá u3de u3dó u3dr 2uða uð4are uð3k4 2uðl uðm4 2uð4n 2uðr uð5ris uð4se uð3sv uð5sæ 4uðul 2u5e 4ué 4uf uf5á ufd4 u5fit u3fj u1fr u3ful u5fú 2ug 4ugal 4ugat 4uge 4ugil 4u1gj 4ugla ug1lj 4uglu ug4n 4ugó u5gran 4ugre 4ugrj 4ugró ug3ræ ug3ta 4ugö 4u1h 4ui u5ið 4uí4 2uj 2uk ukak4 uk4as u1ke u5kinnin ukku3s u5kó u3kv 2ul 3ul. 4u1lag ul3ar 3ulb 4ule u5lind ul4is u1lí ul3k2 ul4la 4ulln ullt4 4u3lo u3ló ul5sv ult4i ul3us ul5v4 u3læ 4u1lö 3um. 2uma umak4 u1man um4aran 2umá umál4ar um4ba um5bæ um4bö 2umd 2ume um3ein 4umi umj4 um4ki 4uml umm4a 4u5mo 2umó 4ump 2umr ums4 um3sl 3umst. um1t4 4umu um5unn 4umú 2umy 2umý 2umæ 2umö un3ar1 unar5a un2as 4unat 2u1nau 2uná 2und 4une 4unk 2unná 4unns 2unnu unn5ug 4uno 4unó uns4an 4unt 1unu 4unur 4unæ 4unö 2u3o uol4 4uó 2up upp1 upp5a uppal5 upp4i 3ur. 2ura ura4f ur5a4m ur2an ur5anna 2urá urða5rá 2ure u1rek ur3ey 4u1ré urf4a ur3fl urg4e ur3gj ur5in 4urit 4urí u3rík ur3j4 urk4a ur1m ur3ní 4uro 4uró ur1sk4 ur3sna ur4sta ur4svö ur5til urt4ir ur1u ur4unn 4urus ur3v4 ur4vis 4uryk 4urý 2uræ 4urö 2usa u3sal 4us4á 2use 4usí 2usj 4u1sk 4usl 2u3s4m 2usn 4uso 4usó 4usp u5starf 4ustá 4uste 2usté 2usti 2ustí 4usto 4ustó 4ustr 3ustu. 2ustú 4usty 4ustý 4ustæ 4ustö u5sund 4u3sv 4usy 2usý 2usö 2ut ut3að ut2as u3te u5til u3tó ut4stó ut2ú u1tæ 2u3u 4u5ú 4u3v 2uy u3yf 2u1þ 4uæ 2u5ö ú1a úal4 ú3arf úb3an úbli3 úð3ar úð5g ú3e úf5ar úfl2 úf5li úf5ly úfs4á ú5gala úgó3 ú4gæ 4ú1i úk1l úkr1u úk4s úl5er 5úl4f úlf5al úl4í3 úlíp4 ú3lo 4ú2m úm4r úm4si ú4n únd4ug ún4gö úpl5i úr5ef úrít4 úr5sl úr1t úr3un úr5v ú3ræ 2ús ú4sa ús3ei ús3í ús4sti ús4sv ús1v út3e út2he úti5f út2is útj4 út1l2 út1r 4ú1u ú1v ú4va ú5þ v2a2 vaðr5 va5fo va5h 5vallag va4n var4ma varps3 var5ú var4v v3ast va4t 3vax veð5l ve3fe 1veg v2ei 3veið vein4as 5veis 4velg 2vep v4er 1verð ver3gj 3verk ver2s vé2 v5és v3ét5 2v3h v2i 2vi. v4ið 5viðar við3l vil4i vi3lið 3viln vi4lo vin3gj 4vip 3virk visk5un 3viss vis4v 5vita vitk5 vit2n 4viv 4víb 2víð 5vík 3vísi vísl3a ví1v 2vn vo3k vol4 vork4 vor4r 4vr1 4vs 2vu v1uð v1un 5væg wa4 win4s4 x5ar x2as x3e x3f x5i xis4 xí3 xík4 x5íu xt5að x1u4 y5ba yð2s yf5a yf1i yfj5að yft4is y1i yj3ar yj5ó yk5e yk3i yk3su yk3u yk3v ylf5i ylgn4 yll5a yl4v ym3a ymp5í y4n ynj5ar ynj3ó yn4k yn4t yn5u yp2us yr5e yr1i yr3il yrir3 yrj3 yrkv3a yr2l yr2s yr1u y2s ysj3 ys2s yst3ug yt4h ytil4 yt4k y3v ý5a ýaf5 ý5á ýð2s ýfl4 ý3flu ýg4r ýg4uð ý1i ýja5f4 ým4a ým4k ýpru4 ýp2s ýrf4 ýri3m ýri5p4 ýr3l ý4si ýsig4 ýs4l ýs4m ý3stá ý5u ý5ú ý3v ý5y zó4 þ2a þam4 þarf5a þar4m 4þb þ2i þist3i þjó4 þol5a þor3f4 þor3g þorm4 þ1ól 3þór þór5i þ2r2 þra4 þrás4 þris4 þríl4 þrí3t þru4 þum5a þumb3 þur2 þús3 þ2v þver5sk æ1b æðn5 æðnis5 æð2s æð4ug 4æf æf1a æ4fi æf3ust æg5ist æ1i æj3 æj4al æjark4 æk1a æk1li æk3u æ2l æl3an æl3e æl3us æm3a æm4al æ4mundu ænak4 æn4k ær1a ær3e ærgöng5 ærif4 ær3ist æri3sv ær3l ær4n ær2s ær5un ær1us æ5rú æs4is æt5ise ætl5i æ5u æva5g æ5val æv3ar æv4ara æ3ve æv3in öð2 öðl3 öðm5 öð3un öðv5an öðv3ar ö1fa öfl3ó öfn5 öfr3u öf3u ö4g ög3gj öggv3 ög1re ög2us ök5e ök5rá ök3st ök3ul ökv3a ö4l öl1f4 ölk2 ölu5mi öl5un öl2v ölv5an öm4b öm3u önd4l öng5sv öng4us öng4v öngv3a önk3 önn4l ön3ug ön5un ör1e ör4ge ör4lan örm5un ör3ó ör3ug ör1un ör3und örus4 ör2v 4örva örv5al örv5an örv5ar örv4i ör1y ör5æ ö4s ösk3ul ös3u öt4s ö3tug öt2v ötv3a ö5u þ6ó", ["length"]=26022, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=4188, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fr.hyp0000644000175000017500000000017111761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-fr.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sl.pat0000644000175000017500000001412611761001300024653 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sl.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z č š ž \patterns{ .av5r .di6spo .ek3s .ek5v .is1 .iz1 .obi4d .ob5it .od1 .po4d5n .po4v5s .pre6d7n .se4k5s .si4s .st4 .voz5l .voz5n .zliz6 a1a a1b ab5ba ab6rod a1c ac5ci a1č a1d ad2l a6dobl ad6rl. ad6rla ad6rob ad5ur a1e1 a1f af5ga af1t a1g a1h a4hm ah5mi ah5mo a1i ai2n1 a1j a4j5ek a4jf aj5fi aj5fo aj5ha aj5he aj5im aj6imo aj3os aj6stb a5ju. aj3uč aj3ug aj5žn a1k ak4s a4kst a1l a1m a4mz a1n an6dga an6dhi a4nm an5mi an5zi a1o ao2b1 a1p a4ph a1ra ar6dwa a1re a1ri a1ro a1ru ar5xa ar5xo ar5xu a1s a4sš as5šč a1š a1t a4tf at4i a1u1 a4uf a2uk a4ul a1v av5ši a4vž av5ža ay5to a1ze az5fo a4zig az3la az3le az4lil az4lit az4liv a4zob a4z3oč az5ora az5oro a4zra az4red az5vp a1ž až5mi ba6bba ban3č4 ba4u 2b1c 2b1č 2b1d be1 be4v b1h bi1 b1ja b4ja. b5jel b3jem b5jet 2b1k b3lep b5leta b5lil b5lit b5liv b1m 4bmi 2b1n bo1 bo6chm b5ord bo5vp b3rab b5ras b3raš b3rez bre4zg bre4zi bre4zr b5reže b3rob br6žda 2b1s 2b1š 2b1t bu5ki bu5ku bu5kv bu5ry 2b1v b1z b1ž 2cc 2ch. ch5ma 2ck c1ka ck1o2 c5ko. ckov3 ck1s ck5we 2c1n 2c1t 2č1b 2č1g či1 1čj 2č1k 1čl 4č3let č5mes 2č1n 4čop 2č1p 2č1s 4čup 2d1b 2d1c 2d1č 2d1d dd6voj d2e 6d5elem de4min de4mn de4z3i 2d1g 2d1h di5ck 4dind d4i5no dis1 di4skr di6spr 2d1j 2d1k 5dlet d2li d5lit d5liv d1lo 2d3m 4d3nac 4d5nač 4d5nap 4d3nar 4dnas 4d5neb d5niv 4d5niz 4d5njač 4d3nož d2o 4dobč 4d5obd 2d3o2f do5rd do5vč do5v4z 2d1p d5raz d3rep dre6pn d4rev 2d1s 2d1š 2d1t dteks6 d4ur du5ro du5um 2d1v 4d3vi 2d1z2 e1a e1b eb4j eb6liz e1c e1č e4čd eč5de eč5di eč5do eč3le eč5op e4čt eč5ti eč5to eč5tr eč5up e2č1v eč6vrs e1d e4df ed5ig ed2l ed5ob ed6obe ed6obr e4dobs e4d3oč ed5vč ed5zb e1e e4ep e1f e4ff ef5fe ef5ta e1g e1h e1i ei6pzi ei2z eiz5e e1j e1k ek6mal ek6tre e1l e1m e1n e1o1 eob4j eob4r eo4dl eo4z5n e1p ep5nik e1ra era6z5l era5z4r era5z4v e1re e4rf e1ri e1ro e4rr e1ru e1s es5da e5sta e5sti. e5stih e5stil e1š e4šp eš5po e1t 4eth e4tinš e1u1 e1v eve6t5l ev5ha ev6pre ev6ste ev5stv 2ew ew6ind ew5le e4wt ew5to e4yw e1z ez5dj e3z4dr ez2g ez5gl e5zij ez6ijo ez5imn e5zis ez6ist ez5iz ez4l ez6lom ez6man ez4mo e4zob e4z5or ez4re e4zt e4z5u4m5 e4zž e1ž 1fa fe1 fe6ljt ff5ma fi6zlj 2f1n fo6uri fre4u 2f1s 2ft ft5ve fu1 2g1d ge6ige gel5č4 ge6njč gi6tpr go1 go5vz 2g1t gu1 ha4u 2h1č he4i 2h1k 4hl. h4lo 2h1n h5ren 2h1š 2h1t 1hu hu6ffm i1a i1b i1c i4cs i1ča i1če i1či ič5ra i1ču ič5vr i1d 4idor i1e1 i1f i1g 4igh i1h i1i ii2n1 i1j i1k i4kč ik5ča i1l il5č4k 4ile 4ilo i1m i4mh im5hi i1n 1ind 2ine 3i4n3os 1inp 3inse 1inš 4inšk 3intr i1o1 i1p i1r 4ire i1s is4a is6ert isis4 i4skv 2iss i1š i1t it5pr i1u i1v iv5jo i1x i1z iz1l iz4la izli4z iz5me iz5mo iz6ode iz5po i2zr iz1u iz6ure i1ž j5akt 2j1b 2j1c 2j1č 2j1d je4ks4 2j1g 2jh j1hi 4jime 4j5int 2j1k 2j1l 2j1m 2j1n 4job 2j1od jod4l 2jos 4jož 2j1p 2j1r jra1 jraz4 2j1s jsis6t 2j1š 2j1t ju1 2juč ju5dm 2jus ju2ž1 2j1v 2j1z jz6ves 2k1c 2k1d ke5ti ki1 2k1m 1kn ko1 kok4 ko5kd ko6vše koz6lo 1kre 2ks. k5sat ks1c ks1p ks4po ks1t 4kst. ks6taz ks5te 2k1t 3ktr 4ktra ku5ro k5vip la4ir la6vz. 2l1b 2l1c 2l1č 2l1d le1 le4e le6ipz le5me 2l1f 2l1g lg5ča 2l1h l2i1 li6dž. 1liz 4l5izd 2lj. 4ljc 2ljč 2ljk 2ljn 2ljs 2ljš lju5d6j 2l1k 2l1l 2l1m 2l1n lo1 1loč 2l1p 2l1s 2l1š 2l1t lu5ki lu5ku 2l1v 2l1z 2l1ž 2m1b 2m1c 2m1č 2m1d me4d5n me6dos me4dr 2m1f 4mind 4minp 4minš mi6th. 2m1k 2m1m m5niv mo6št. mo6vš. 2m1p 2m1s 2m1š 2m1t m5urn 2m1v my5hi 2m1ž na1 5načel na4d5nj nad5r na6dra na4dre na6dur 1naj na6jak na4j5en naj3o na6joč na4j3u 1nas na4v3z navze6 1naz naz6or 2n1b 2n1c 2nč n1ča n1če n1či n1ču 2n3d2 nd5ga nd5hi n4dm ne1 ne3d2 1neh ne3zm nez4v 2n1f 2n1g n4gh ng5ha n4gv ng5vi 2n1h 2nj. 2njc nje4v5s 2njk 2njs 2njš 4njv 2n1k 2n1l 2n1n no5rd n4ost 2n1p 2n1s nsis4 2n1š 2n1t nteks4 n4tg nt5ga nt5ge n4tv nt5vi nu1 2n1v ny5qu 2n1z nz4i 2n1ž o1a o4as o1b ob5gl ob5ide ob5jo 5obla 5obro o4bz o1c oc5ke oc5ki o4cr o1č o1d od5dv od5nal o6drep od5zd o2d1ž o1e oele4 o1f o1g 4ogl o1h o1i oiz2 o1j o1k o4kb ok5ba ok5be o4kt o1l o6l5avt ol6gča o4lr ol5re o1m o1n o1o ood4l o2ol o4om o1p o4pm op5me 4opy o1ra or4deč o1re o1ri o1ro o1ru o1s 5oseb ose4m5 o1š o1t o1u ou5ki ou5ku o1v ov5sem ov5šk o2v1z o5vza ov3zd o1y o1z oz4b ozd5j oz4g oz5lo oz6lož oz2n oz5nic oz5niš oz2o oz2r oz2v o1ž ož5mi 2p1c 2p3č2 pč5ka pe1 1peč pe4kt pet3l pe4tle pe4v5s pev5t4 4phs ph5so pi5zo 2p1k 4ploz po1 po6dfa po4d3l po4dna po4d5oč po6lob po6std prez4 2p1s 2p1š 2p1t pz6ig. qu2 3raču 2rae ra6jžn rav5z ra6vza ra4z5id 3razl ra4z5or 2r1b 2r1c 2r1č 2r1d re1 3real re6cht re5čv 5redč re6dig re6dnju re6iba re5jo re5km re6sda rev6sk re6znač re6zus re6zve r1f 2r1g 2r1h ri1 r4in ri5n4o riz4g riz4l riz4n 2r1j 2r1k 2r1l 2r1m 2r1n ro1 rob6id 3rodi ro5zo 2r1p r1r 2r1s 2r1š 2r1t r4th rt5ha ru5kl 2r1v r3v2j rv5jo ry5an 2r1z rz2l r1ž rž5da 2s1b 1sc 4sc. s2ci se4k5sa sek5si se5ma se5vp 2s1f si1 s4id si6gn. sis1 2s1j 2sk. s2kn 4skre s4lav s4on soni5 sonič4 1sp s4plod spod4l 2s1s 2st. 3ste s4ten 4stf s4tič 5stim s4tir 2stk 2stm 1str s4tra. su1 su4bo sve5t š2č 2šč. 2ščk 2ščn še2s 2š1j ta5wi taz4 2t1b 2t1c tch5o 2t1d tek6st 5tema te5xa t1f 4tind 4tinos 4tinp 4tinse 4t3int 2t1k 6tletno 2t1m 4tnaj to6vž. trt5u tr6tur 2t1s 2t1t tu1 4tz. 2u1a u1b ub4j u4bp ub5po u1c u1č u1d ud6mi. u1e u1f u1g u1h u1i u1j u1ka u1ke u1ko u1l u1m u1n u1p up6čka u1ra u1re 4urg u1ri u1s 1usp u1š uše3s u1t u4th uth5o u1v ux5em u1z u1ž 2v1b 2v1c 2vč v1ča v1če v4čer v1či 2v1d ve4čl ve4čm ve4i ve4tin vetle6t v1f v1g vi5dv vid6va 1viv vi6žg. 2v1j 4vjo 2v1k 2v1m 2v1n vo5rd voz5le 2v1p 3v2pa v4pij v4pil v5skn v5šek 4všk 2v1t vt4k vz2 v2za 3v2zg 2v3zk 2vzo v3zp v2zu 1wa wo2 x1f 1ye 2y1f y1j y1l y1w 1z2a z6ane. za5uk za3vp za1z2 za5zd 2z1b 3zbir z1c 2z1č 2z1d2 zd5ju z3dv z1g z4gni z5got 2z1h 1zi z1ig 2z1is 4z5išč 2z1j 2z1k z3ku z5las z1li 3zlil 5zlit 5zliv zliz5 1zlj 3zlog z5lom 3zlož z1lu 2z1m 1zn 1zo z1ob 2z1od z1og z2ol z4om 2z1p 1z1r 4zredč 4zreš 4zrez 4zrež 4zri 4zru 2z1s z1š z1t 1zu z4uj 2z1up 2z1uz z1v2 z4ven z3vn 3z4voj z4vok 2z1z2 z1ž 2ž1b 2ž1c 2ž1č 2ž1j 2ž1k 4žmi .č8 .š8 .ž8 8ž. 8š. 8č.}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-fi.hyp0000644000175000017500000000017111761001300024642 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-fi.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lt.lua0000644000175000017500000002501712161703335024666 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="lt", ["source"]="hyph-lt", ["texcomment"]="% Lithuanian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part of hyph-utf8 package and resulted from\ % semi-manual conversions of hyphenation patterns into UTF-8\ % in October 2008 by Mojca & Arthur.\ %\ % Source available on:\ % - http://www.vtex.lt/tex/littex/index.html\ %\ % Authors:\ %\ % First version in LT encoding (modified T1):\ % - Vytas Statulevičius \ % - Yannis Haralambous\ % (Vilnius, March 4, 1992)\ % Conversion into Latin 7 and aditional support files (babel, fonts):\ % - Sigitas Tolusis \ % (2002-11-20)\ % Adaptation for hyph-utf8:\ % - Mojca & Arthur (see below), October 2008\ %\ % The copyright statement of this file is:\ %\ % Do with this file whatever needs to be done in future for the sake of\ % \"a better world\" as long as you respect the copyright of original file.\ %\ % If you want to change this file, rather than uploading directly to CTAN,\ % we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\ % or ask for credentials for SVN repository and commit it yourself;\ % we will then upload the whole \"package\" to CTAN.\ %\ % For more unformation see\ %\ % http://tug.org/tex-hyphen\ %\ %------------------------------------------------------------------------------\ %\ % A note about lefthyphenmin/righthyphenmin (by Sigitas, February 2009):\ %\ % At the moment the lefthyphenmin & righthyphenmin are both set to 2.\ % The Lithuanian patterns were build earlier then the latest grammatical rules\ % took place in 1997. At that time it was forbidden to leave one character at boundary.\ % One may change it to one now, but from typographical point of view there is no need to do\ % any changes. Even more, changing lefthyphen and righthyphen to 1 requires\ % to review and maybe rebuild the patterns file.\ %\ %------------------------------------------------------------------------------\ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvwyząčėęįšūųž", ["data"]=".ap1 .api1 .ap3r .arbi1 .arti1 .as3p .at1 .ata1 .at3r .aš3v .dina1 .ek3r .i2š3 .iši2 .kirti1 .nu1 .nusi1 .pie2č .sam1 .sida1 .sk4 .st4 .su5kr .te3s2 .uk3 .u2š3 .už1 .įs4 .šven1 a1a2 a1b a1c a2ch a1d a4dra a1e ae2l a1f 2a1g a4gr ag3ra a5grio a5gro a1h a5inf ai4sk ai4tr a1j a1k ak2l ak2vi a2kėt a1l a3li a5lo1 a3ly a3lė a3lū a1m a1n an3k2l an4sk an4tr a2o a1p ap1a4k ap3ei ap3i2m ap3l a3pr ap3s2 a1r ar1eit a4rg ari4s a1s asi1 asi5s a4sk as3kl a3sl as2mi as2mu a5s4n a4stu a1t at3aug ate5ist at3i2m ato1 atp4 a4tru at1ė2 atū2ž a4u au4kl au4sk au4sl au4t3r a1v a1w a1y a1z a1ą 2a1č a1ę a1ė2 a1į a1š a3šn aš4tr aš2v a1ų a1ū2 a1ž až2l ba3c balta1 ba4sl 2b1b 2b1c 4b3d bep4 be3s2 besi1 be3t2 2b1f 2b1g 2b1h b1j 2b1k 2b1l b2la b2liz 3b2lo b2lu 2b1m 2b1n 2b1p 2b2r b3ri 2b1s 2b3t bu4k 2b1v 2b1w 2b1z 2b1č 2b1š 2b1ž car4 2c1b 2c1c 2c1d 2c1f 2c1g 3chi 2c1k 2c1l 2c1m 2c1n 2c1p 2c1r 2c1s 2c1t cu4 cuk5 2c1v 2c1w 2c1z 2c1č 2c1š 2c1ž da3b4 2d1b 2d1c 2d1d de4k dema1 de4pr de4sp 2d1f 2d1g 2d1h di4p di4s dis5k 2d1j 2d3k 4d3l 2d1m 2d1n do3ri 2d1p 2d1r dro1 dro2b d2rė 4drų 2d1s 2d1t du2a du4k du5ka du4sl 2d1v d3va dvi3a 2d1w d4z 2d1č 2d1š d4ž džio1 e1a2 e2a3l eapi1 eat1 e1b2 ebe1 e3bl eb3r e1c e2ch e3d2 ed3ri e4dro ed3rė e1e e1f e1g eg3ra e1h e1ie ei4k3l 1ein ei4sk ei4sl 2eis3t eist2ra ei2š1 e1j e1k e3kr e1l e1m ema5s4 2e1n en3k2l enk4la eno1 ens4 4enta enu1 e2o e3or e3o2š e3p ep4li ep4r epra1 epri1 e1r ere3a4 eri4s ero1 erė2 e1s esi5s es4k eska1 e5sko e3s2v e1t e1u4 euž3 e1v e3vi e1w e1y e1z e1ą e1č e1ę e1ė e1į4 eįp3 eįs3k eįt3r e1š e3šn eš2v ešė3 e1ų e1ū e1ž 2f1b 2f1c 2f1d 2f1f 2f1g 2f1h fi4s5 2f1k 2f1l 2f1m 2f1n 2f1p 2f1r fri1 2f1s 2f1t 2f1v 2f1w 2f1z 2f1č 2f1š 2f1ž gaš3 2g1b 2g1c 2g1d ge4o1 2g1f 2g1g 2g1h 2g1k 2g1l g2le g2lo 2g1m 2g1n 3g2nų 2g1p2 3g2r grai2 g3ran 5g3re g4rei g3ri 4g4rio g3ro. g4rą 5grį 4grų 2g1s 4g1t 3gu 2g1v 2g1w gyva1 2g1z 2g1č 2g1š 2g1ž 2h1b 2h1c 2h1d 2h1f 2h1g 2h1h hi4b 2h1k 2h2l 2h1m h2me 2h1n 2h1p 2h1r 2h1s 2h1t 2h1v 2h1w 2h1z 2h1č 2h1š 2h1ž i2a ia5g4 i3aiš ia3k i3antę i3antė iap4 i3ar i3b2 i1c ice1 i1d id2r id3rė i2dėm i2e ie4d3r ie3g i3ei ie3kl i3ent ie4p5r ie4sk i1f 2i1g i3g2l ig3ru 2i1h i1i2 i1j i1k i3k2n ik3r i1l ilo1 i1m 1imd 4i1n in4kl 5inv i2o io4g3r iok2 io4pl i3or i1p i2p1j ip3ru i1r ira3s2 i3ri 4i1s i5sa i5si is4k i3sl is4li i5s4n i4ste isto1 2i3t2 i2u i1v i1w i1y i1z i2ą i1č i1ę i1ė2 i1į i1š i3šn iš5t i4šv išė2 1išš i2ų i2ū i3ž 3ja. jauna1 2j1b 2j1c 2j1d 2j1f 2j1g 2j1h 2j1j 2j1k 2j1l 2j1m 2j1n jot3 jo4tv 2j1p 2j1r 2j1s 2j1t 1ju 2j1v 2j1w 2j1z 2j1č 2j1š 1jū 2j1ž 3ka. 5ka3d kak3 ka4kl ka4pr 3kar 3kas 3kati 5kav kavar1 ka3z2 2k1b 2k1c 2k1d 3ke ke4b3 keren1 2k1f 2k1g 2k1h k4i 5ki. 5kia 3kib 3kil 5kit 2k1k 2k1l 3k2la k4lan 4kle. k2lel 4klo. 4klu. k2ly 4klą 4klų 2k1m 2k1n 3ko 2k1p 2k2r k4rau kris2 kri5st k3ro k4rov 4k3ru 5krun k4ry k5rą 2k1s k4sk ks3l k4s3p 4k1t k3ta 3ku 4kub ku4k ku4pr 2k1v k2va k3vo k2vė 2k1w 3kyt 2k1z 5ką 2k1č 2k1š kš2ly kšė3 2k1ž 3la. lap4s3to 2l1b lb3r 2l1c 2l1d 3le. le3c le4gr 4leč 2l1f 2l1g lg3s2t 2l1h 3li. li4a 5li4o 3lių 2l1j 2l1k lko1 2l1l 2l1m 2l1n 3lo. log4 4lop 4l1p lpna1 2l1r 4l1s l4sk l4s3p 4l3t 3lu. 2lup 4l1v 2l1w 3lyč 2l1z 3lą 2l1č 3lęs 3lėm 3lės 2lėč 3lį4 4l1š 3lų 2l1ž m2a 2m3aid 3mas mas3ki 2m1b mb3r 2m1c 2m1d me3c meis1 2m1f 2m1g 2m1h mi4gl mi4gr min4s mi4tr 2m1k 2m1l 2m1m 2m1n m2o 2mod 2m1p m4pl m3pr 2m1r 4m1s 2m1t m3ta 3muo 2m1v 2m1w 2m1z 2m1č 2m1š 2m1ž na3s2 na3t2 2n1b 2n1c ncen1 2n1d n3drė ne1 neg4 nei2m ne4o3 neor2 nerė3 nesi1 ne3sl ne3s2t ne3t2 neįs3t 2n1f 4n1g ng3l ng4r 2n1h ni4s 2n1j 2n1k nk3la nk3r n3kry 2n1l 2n1m 2n1n 5no 2n1p 2n1r 4n1s ns4ku ns3l n4s3p nst3r 4n1t n3ta nt4pl n3tru nt2ruo nua4 nu3b2 nu3g nu1i nuk2 nu4o3 nuos2 nu5s4 2n1v 2n1w 2n1z 4n1č 2n1š 2n1ž o1a o1b o1c o1d o3dr o1e o2et o1f o1g o1h o1i o1j o1k o3kr o1l olen1 o1m om4pr o1n ono1 o1o2 o1p o1r o2rie ori4s or4tr o2rę o1s o3sl os3le os4lo o3s2v o3t2 oto1 o1v o1w o1y o1z o1ą o1č o1ę o1ė o1į o1š oš2v o1ų o1ū o1ž pa3 pad2 pai2l pai2m pai2r 3pan pap4 p2ar parsi1 pa4r1ė2 pas2 pa5sr p2at2 2p1b 4p1c 4p3d2 p2e per1 pe2re pe2r3im per3s pe2rė 2p1f 2p1g 2p1h p2i p3ieš 2p3k2 3p2l p3le p3li 4plio p4liu p3lo p4loj p4lu p4ly 2p1m 4p1n 3po po4g poli1 2p1p 2p2r p3rai prau2si p3raš p3ri pris2 p5ro. p3rom p3ry 4prą p3rė p3rū 4p1s psi1 p5s4k p4s3ty p3s2v 4p3t2 3p4u pusiau1 pu4sk pu4sl pu4tr 2p1v 2p1w p2y 2p1z 2p1č p2ė 4p3š2 4p3ž r2a 3ra. ra3b 3rac ra1im rai4tį ra3kr 3ral 3ram ras4l ra3sm rau4ka. 3rav 2r1b rbo1 r3b4r 2r1c 4r1d 2reb 4rein 4reit 3rel re4p5 5res res3l 3ret 2r1f 2r1g 2r1h r2i 3ri. ri3d 3rij ri3kr 2ril ri2ma. 2r3imt 3rio ri3p risi1 ri3st rivin1 3rią 3rių 2riū 4r1k rk3ly r3k4r 4r1l 2r1m 4r1n r2o 3rod2 ro4gr 3roj 3rok 3ron 3rop 2r3org 5ros 2r1p r3p4r 2r1r 4r1s rs4ko. rs4p 4r1t rti5k4 rti3s2 r3t2r r3t2v r2u 2ruk 3rul 4run 3ruos 2rup 3rus ru4sk 4ruto 4r1v 2r1w 2r1z 3rą 4rąs 4r1č 4r1š r3š2l r3š2m 5rų 2r1ž sala1 2s1amž san5t sarka1 2s3b 2s1c 2s3d s2e se4kr senat4 2s1f 2s1g 2s1h si3auk si3a2v si3a2š si3d si3k4 si3p4 si3s2 si5š2v 3s2k2 4sk. s5ka. 4ske 5s4ken 5ski 5s4kle 5sk4r 5skub sk3va sk3vi 5sky 4ską 5skę 2s2l 3sle s3li s3lo 4s3lu 4s3lū 2s1m 4sme. 4smę 4s3n so4dr 3s2p s3pe 4spn 4spu 4s1r s3ri 2s1s 2s1t s2tal s2ten 4stin s2tod s2toj 3s2tov st2rai st2v 4stę 4s3tė 4stų s2tū su1 su3bl su3d2 su3g2 suk2l su3s2 susi1 suž4 2s1v s2ve 3s2vy 2s1w 2s1z są3 4s3č 5sė 2s1š 2s1ž t2a 2tab ta3kr ta5s 2tat taura1 2tač 2t1b 2t1c 2t1d 2teb 3tem te4o te3t2 2t1f 4t3g 2t1h t2i ti4gr ti4k3l 3tin 2tip 4t3j 4t3k t4kl 4t3l 4t3m 2t1n t2o 3toje 2tolį to3s2 2tow 2t3p t4pj tp3lū tp4r 2t1r 4trio t2riš 4tro 4trą 4trų 4t3s4 tsi1 tskri1 4t1t tua4 3tur 2t1v t2vo 4tvėj 2t1w 3tyd 2t1z 2t1č 3tę t2ėm t3ėmu t3ėmę t3ėmė 2t3š2 2t3ž u1a2 u3ai u1b u2bj u1c u1d u1e2 u1f u1g ug4r ug5rio u1h u1i2m u5in ui2r u1j u1k u3kl uk2le u3kr u3kv u5kų u1l u1m u1n u2o u3or uo4sl u3p up4l up3ro u1r urk2 ur3kl u5ro1 ur3s2 u1s u2s1al u3sl us3la us3le usva1 us3ve u3t2 uto1 2utr u1u u1v u1w u1y u1z u1ą u1č u1ę u1ė2 u1į u1š u3š2l u3š2n uš2v u1ų u1ū2 u1ž uži2m u3žl už3v už1ė2 3va. vap4 va3t 2v1b 2v1c 2v1d v2e 2vep 3ves 2v1f 2v1g 2v1h viesia1 vi4s5k vi4t3r 2v1j 2v1k 2v1l 2v1m 2v1n 2v1p 2v1r 2v4s 2v1t 2v1v 2v1w 2vydau 2v1z 3vą 2v1č 3vė 4vėp 2v1š 2v1ž 2w1b 2w1c 2w1d 2w1f 2w1g 2w1h 2w1k 2w1l 2w1m 2w1n 2w1p 2w1r 2w1s 2w1t 2w1v 2w1w 2w1z 2w1č 2w1š 2w1ž y1a y1b y1c y1d y1e y1f y1g ygia1 y1h y1i y1j y1k y4k3l y1l y1m y1n y1o y1p y3r y1s y4sk y1t y1u y1v y1w y1y y1z y1ą y1č y1ę y1ė y1į y1š y1ų y1ū y1ž 2z1b 2z1c 2z1d 2z1f 2z1g 2z1h 2z1k 2z1l 2z1m 2z1n 2z1p 2z1r 2z1s 2z1t 2z1v 2z1w 2z1z 2z1č 2z1š 2z1ž ą1a ą1b ą1c ą1d ą1e ą1f ą1g ą1h ą1i ą1j ą1k ą1l ą1m ą1n ą1o ą1p ą1r ą1s ą1t ą1u ą1v ą1w ą1y ą1z ą1ą ą1č ą1ę ą1ė ą1į ą1š ą1ų ą1ū ą1ž 2č1b 2č1c 2č1d čeko1 2č1f 2č1g 2č1h čin1 2č1k 2č1l 2č1m 2č1n 2č1p 2č1r 2č1s 2č1t 2č1v 2č1w 2č1z 2č1č 2č1š 2č1ž ę1a ę1b ę1c ę1d ę1e ę1f ę1g ę1h ę1i ę1j ę1k ę1l ę1m ę1n ę1o ę1p ę1r ę1s ę1t ę1u ę1v ę1w ę1y ę1z ę1ą ę1č ę1ę ę1ė ę1į ę1š ę1ų ę1ū ę1ž ė1a ė1b ė1c ė1d ė1e ė1f ė1g ė1h ė1i ė1j ė1k ė4k3l 2ė3l ė1m ė3me ė1n ė1o ė1p ė1r 2ė1s ės3l 2ė3t ė4tr ė1u ė1v ė1w ė1y ė1z ė1ą ė1č ė1ę ė1ė ė1į ė1š ė1ų ė1ū ė1ž į1a į1b į1c į1d2 į2e į1f į4g į1h į1i į1j į2k4 į2l į2m į1n į1o į4p į2r į1s įsi1 įs3l įs2m įs2r įst2 į2t2 į1u į2v į1w į1y į1z į1ą į1č į1ę į1ė2 į1į į1š į1ų į1ū į1ž 2š1b2 2š1c 2š3d2 š1ei še2v 2š1f 2š1g4 2š1h 2š5ist šiuk1 2š1k2 2š1l š2lij š2lu 3šly 2š1m 2š1n š2ne šno1 šo2r 2š1p4 2š1r 2š3s4 šsi1 šsikap1 4š3t2 šu4š 3š1v š2vi š4vyd 2š1w 2š1z 4š3č šė2j 2š1š 2š1ž ų1a ų1b ų1c ų1d ų1e ų1f ų1g ų1h ų1i ų1j ų1k ų1l ų1m ų1n ų1o ų1p ų1r ų1s ų1t ų1u ų1v ų1w ų1y ų1z ų1ą ų1č ų1ę ų1ė ų1į ų1š ų1ų ų1ū ų1ž ū1a ū1b ū1c ū1d ū1e ū1f ū1g ū1h ū1i ū1j ū1k ū4k3l ū1l ū1m ū1n ū1o ū1p ū1r ū1s ū4s3k ūs3l ūs3t ū1t ū1u ū1v ū1w ū1y ū1z ū1ą ū1č ū1ę ū1ė ū1į ū1š ū1ų ū1ū ū1ž žant4 žants5 2ž3b2 2ž1c 2ž3d2 žen1 2ž3f4 2ž3g 2ž1h ži3mu žio3 ž1j 2ž3k2 2ž1l ž2lu 4ž1m 2ž1n 2ž3p 2ž1r 2ž1s žsi1 ž4sk ž4s5l žs3t 4ž3t2 ž2u žu3s2 3ž2v ž4vi ž3vo 2ž1w 2ž1z 2ž1č žįs3 2ž1š 2ž1ž", ["length"]=8416, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=1546, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-nl.pat0000644000175000017500000024263111761001300024652 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-nl.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z ä ç è é ê ë î ï ñ ö û ü \patterns{ .a4 .aan5 .aarts5 .aat5 .ab5l .acht5end .ac5re .adi5 .af3 .af5l .af5s .aftu5re .al3ee .al3f .alk4 .al5ko .alko5v .al5ma .al3om .al4st .ana3s .an3d2 .an3en .an3gl .an5th .ar5d .ar5tr .as5h .as5l .as3t .as5tra .as3u .at4a .ave5n .b4 .be3la .be5ra .be5ri .bos1 .c4 .coo5 .co3ro .cus5 .d4 .daar5 .da4gi .dag5r .da2k .dan2 .debe4 .de2k .dek5l .dek5s .den4k5r .de5od .de3ro .de5sta .di4a .die4p .di3o .doet3 .do3v .du4w .e4 .ede2 .edel5a .ed3w .ee4n .eer5ste .eest3 .eesto4 .eet3 .ei3l .ei5sc .ei3sp .ei5t .el4s5 .en5s .en5th .ep4a .ere5s .er2f .erf3l .er3in .ert4 .erts3 .es3 .es5c .es5pe .es5tr .eten4 .et4h .ets5te. .eu3 .eus5 .é2 .f4 .fel4s .g4 .gaat5 .gang5s .gea5v .ge3l4a .ge5le .gelo5v .ge3n4a .gena5z .ge5ne .ge5no .ge3ra .ge5r4e .ge5r4o .gerst5a .ge3s .ge5sk .ge5ta .ge5tj .ge5to .gid4 .go4m .goot3 .h2 .handels5 .her5in .hits5t .ho4lo .houd5s .i4 .ide5o .ij4s .ijs5l .ijs3p .ijs3t .ik3 .in1 .in5d4 .in3g4 .in5gr .ink2 .in5kr .in5kw .in3s4 .in5sl .in5st .in5ta .is5c .j4 .jor5 .k4 .ka3d .ka5g .ka4taa .kerk5l .kerk5r .kerk5u .ker5sten .ke4s .koot5 .ko5pe .kop5l .ko3v .kun2 .l4 .laat5ste .le4b5 .leg3o .le4g3r .leid5st .len4s3 .le5r4 .le4s3 .le5th .lin5d .lof5 .loot3 .lo4s1 .lu3e .lui5t4j .lu4s .m4 .ma5d .ma5ï .meel5d .me5la .me5ni .merk5l .me2s .me4st .met5ee .mij4n5i .moot3 .mor5sten .mo4s .n4 .naat5 .na3d .na3n .na3s4 .nee5s .ne2p .nep3a .ne4s .ne5te .ne4t3j .neu4t5j .nie4t5j .noot5 .nos5t .no5v .o4 .oe4r5 .oe4s5 .oeve4 .ol3f .om1 .omme3 .on3a .on3d .onde4r .on1e .on5g .on3i .on5k .on1o .ono5v .on2t3 .on4tee .on4ter .ont5s .ooi5tj .oot5jes .op5ee .opi5 .op5l .op3r .op5s .org4 .os5 .ove4 .p4 .pee5tj .peri5 .pers5te. .piet5j .pits5te. .poort5j .po4st .puit4 .pui5tj .pu2t .r4 .raads5le .ran4d .rand5a .re4men .ren4o .reno5v .re5o .rie4t3 .rij5sp .ring5s4 .roe5tj .ro4l .ro4st .ro4t3h .ro5v .s4 .sap3 .sa5v .sci3 .see3 .seks5te .se5re .set3 .se5v .side3 .ski3s4 .sneu3 .sno2 .so2k3 .song5 .spoor5tj .st4 .ste4m .t4 .taart5j .tan4da .te4a .te4f .tek2 .te3le .ten5ac .te3no .ten4t5j .te3ra .ter4p5a .ter5s .te4s .ti2n .tin3a .tin3e .toe5pr .to4lo .to4p .to5v .tri3s4 .ts4 .tsa3 .tuit5j .ty2r .u4 .ui2 .ui5s .uit1 .uit4je .uke5 .ur4a .vaat5j .ven4t5j .ve4r3 .ves5p .vet3j .vie4r .vol5s .w4 .wals5te. .wee4ko .wee4t3 .we4l3 .wen4s5t .west5r .win4s .xe3 .y2 .z4 .zes5 .zit5 .zooi5 4a. a4a4 4aad aad1a aad1o aad1r aad5sap aaf5a 4aag aag1a aag3e aag3o aag5r aags4 aag3sa aag5so aag3sp aai3l aak1a aak3e2 aak1o aak5r aak3sp aal5a2 aal1e aal5f4o aalfo5l aal1i aal5k aal5m aal1o2 aal3sl aal5so aal5spe aal5ste aal1u aam1a aam3o aam4sta aam4ste aan1a 5aandee aand4r aan1e2 aan5g aan5i 3aanj aan5k4 3aann aan3o aan3sp aans4po aant4 3aanta 3aanv aap1a aap3i aap3o2 aap3r aar3a aar4d5as aar3e4 aar1i 4aarn aar1o2 aar5spel aar4t5on aarts5l aar3u aas3e aas3i 4aast aas5tr aat3a aat5e aat3h aat3i aat1o aat5r abak4s5 aba4l abat4s ab5eun ab3ijz a2bon aboot4j abot4j 2abr ab3ru 4ac. a3cal a3car 4ace ace3st 4ach. a3cha 2a1che 4a1chi ach3l a1cho a3chr 4achs ach5tec a1chu achuut5 4ack ac3kl 2acl 2a3co 2acr ac5res 4acta 4acu 4ad. a5da. ad3ac ada2d ada4l ada2r3 adas5 2add a5de. ad3ei ade5re a5des a3det a5deta ad3e4te 2adh 4ad4i adi3al adi4oc adi4od 4adk 2adl 4ado. a3doo 2adp ad3rei a3d4ri ad3rol 2ads ad5se ad3so ad1s4t ad5sta ad3ui ad3w 2ady 4ae aege4 ae5k4 a3e2p ae3r ae2s3 ae4s5t a3eu a2ë a4ër 4afa af3aa a2f3ac af4as af4at afd4i afd2r af5d4w 4afe afee4 4afi af3l 4afo a5fo. a2foe afon4d af3op af5org af1r af3s4 afs2c af5se 3afsl 3afsp aft4a af5tr af3ui 2afy 4ag. ag1a2d ag3af ag3a2m ag3ar ag3di a5ge. agee5t 4a5gen. ager4s ag3ex a4gil ag3ind a4g3ins agi5ot 4ag1l ag3of a4g3or ag4o3v a2gr ag4ra ag5rap ag3ru ag3sl ag4sle ag5slu ags2p ag3spe ag3spi ag1st ag3sta ag5str 2agt agu5a a2g3ui ag3u4r a2g3uu 2ah 4a1ha 4a5he ahe5ri a1hi ah3l a3ho ah5r ah5t2 a3hu a3hy ai5a2 ai4dr ai1e a1ij ai5k ail3m ai2lo a2in aio4 ai3ov ai3s4 ai5sc ai4s5l ai5sn ai1so ai1st ai5tj ai3tr aiu4 aïn4 aïns5 aïs3o4 2a1j ajaars5 aka2 ak3af ak3ag a4k3ar a4k3ed ak3emi ake2t ak3id ak3ink ak5is 1akko 4a2k3l a2k3n ak5ne ak4ni a3kof ak3on ak3o2p a2kr ak5ru 2aks ak4so ak5spe ak1st ak5to ak5t4w a2k3u4 ak1w ak3wi a1la a4l3ach al3adr a3l4ag a3lal a5lapr al3art 4ald a1le a5le. al3eff 2aleg a2l3el ale5ro ale5ste ale4tj a3lè al4fen alf3l al5fon alfu4 al2gl a3lie al3int alk5ei al5kle alk3s al4kui al5le al4mac al5me a1lo a4l3ol alo2n al3ou a4l3o4v 2alp al3s4ag al3san al3scr als5j al2sl als5li als5m al4sn al4s3oo al4stem al5sten als5tou altaar5 al3tha al4t3ro alt4st a1lu a2lui al3uit al3u4r alu2s5 4am. a4m3ac am3adr ama4f 4amag am3art 5ambt ament4j ame4ran ame5tj a2meu am4i 4amm am3oli a2m3o4v 3ampè am2pl am4ple am4sm am4s3o am4spr ams5te. a2m3ui a3nad an3alg an4a3n an3arc 2anc 4anda anda4d and5ank an4d3e4d an4dex 2andj an4dom an5d4ri and5roo ands5lo an4d3ul a4nem a3nen anen3i 4aner an3est ane3us 4ang. an4gan anga5p ange5st ang5le an2gr ang5sna angs4te aniet3 anij4 3anima an5ion a4n5isl ani5t 4aniv 4ank. an4kaa anka4n an4k3as an2k3j an4klu ank3of an2k3r a1no an3och a4n3oor an3ork ano3s ano3t4 a4n3ou ano5v 4ans an3san ans3cr an4seg an4serv an4sid an2so4 ans5or ans3pi ans5pir an1st an4s5te. an5stru an4tac ante4n an3th 2anti ant5sl ant3w 4a1nu a5nuf an3ui an3ur an3uu anze5s 2a1o ao4g ao2l a4om a2op2 aor5t a3os aos3p aos5t 4ap. a1pa a4pak a4pas ap3as. ap3ass a1pe ap5eten 4a1pi apij4t5j ap3ijz ap1j 2apl ap3le ap3li ap3lo a1plu apon5 ap3oo apo3p apo5sta ap3o4v 1appa 4appen 4apr ap3ra a3pre a4prem a5p4ris ap3ru ap2sa ap4si ap2s3l ap3sn ap4ste. 2apt ap3tj 2apu a2q 4ar. a1ra araat5j a4r3app ara3s4 ar2da ard3ac ard3ak ardo4 ar4d3om ar4d3op ar4d3ov ar2d1r ar4dra ard3re ar4du ard3w a1re 5a2rea a3reg a3rem ar4en are4no are3sp a3rev ar3gh ar2gl a1ri arie4tj arij3s ar3ins ark2 ark3ac ar3k4l ar4map arm3u a1ro a2r3ob ar3oge a3rok aro4ko ar3oog a2r1o2p a3rot arpi4 ar2s ar5sch ar3scr ars2e ar5see ar3si ars3l ar4sla ars5m ar3sni ar4so ar4sp ar5spo ars3ta ars5tal ar4s5tek ar4str ar4su art4aa ar4t3ak ar4tan art5ank ar4tap ar3tar 4arte ar4tei ar2th ar5tij 4ar4tj art5jesv 4arto ar5tof art5o4ge art5oog ar4t3o4v ar2t3r ar4tro art5ru art4sl art5ste a3ru ar3ui 4arw arwe3s a1ry 4asa as3ad as4ag as3ak as1ap a2sc as5ce 2ase a4sec a4s3eg aser5a ase5tj aseve4 as5ha asis1 a4sj as5ja as3ji as3k as5ka as5ki as3l as4lu as3m as5mi as3n as4ne as4ni 4aso as3ob aso2l aso4r as1p as3pl a4s5q as5sa 4assm 3assu a2st 4as3ta a4sta. as5tag as4tas as4tat as3te a3stek a3stem as5ten as3tè asting5sp as1to as3tob ast3op 4astr ast5rem as5tro. as4tu a1t ataart5j at1ac at3ade at3af. at3ank ata3s 2atek a5tell ate2n ate3no aten4t5r ater5ad ater5sl at4eu 2atg at3hu ati5ni a2t3j at4je atjes5 at5jesb at5jesh at5jesm at5jesp 2atm 2atn a2too at3oog atos5f ato3st at3rac at3rei at3rib at4roe at5ru at4s3a2 at4s3ec atsi4 at4s3id at2s3l at4slo ats5m ats3n at4sne ats3pr at2st at4staa at4s5tak at4ste. at5sten at5stij ats5tol ats5top. ats5trek at4t3u4 a2t3ui at3w aua4 au3ch au3co au5de aud4j 1aug au3na aun3t aup2 aur4 au5re aure3u 4aus au3so au4s5p au3sto au3t4 4aut. 1auto auto3p 2auts3 auw3a 4auz a4ü avast4 ave3c avee4 ave4n3i aven5sp aver3a ave3re ave3r4u 4avi a2vo 1a4von a5voo a5vor 4avy 2a1w axis4 ay2a 4azif ä3h ämme3 ä3r 1b 4b. 3ba baar5ste baar5tj ba4da bad3ar ba4d3r bad3s ba3g4h ba3gl 5b2ak ba4k3o4 bak4sp ba3lan ba4lar bal3dw bale4 bal3ev ba3lië bal4kl ba3lo bals4 bal3sf ba4me ba5n2a ban4k3a ban4kl ban4k3o ban4kr bank3w ba3sa ba4st ba2tr ba3tro 4bb bbe4l5ag bbe4l5ee bbe2n bben3a 4b1c 4b1d4 b5de bdi5a 3b4e be1a be3as be2au be3ch be5dwe be5dwi be5dwo bee4 beet1 be5g beie4 bei3s bei5tj be5ki be3k4l be1kw be3lar be5l4as bel5dr be3le be4l3ec be4lex bel5f be3li be4l5int bel3k bel4o be3lo5v bel3sc bel3sp belt4 bemen4s be3nep be5n4o be5ot be1ra bere5s4 ber4g5af ber4g5et ber4gl ber4gr ber4i be1r4o bero5v be3ru be3ry be1s4 bes5ac be4sh be4sje be3so be5sp bes5s bes5te. bes5ten. be5stie bet2 be3t4h be5ton bet5ren be3tw be5twi be3und beur4s 4b3f 2b1g 4b3h 3b2i bid3s bi2du bie4li bi4en bie4t3j bij5d bij3f bij3g4 bij5k4 bij1p bij1s2 bik4a 5bil bi3lo bil3s2 bin4dr bin4st bin4t3j bi5ob bi3ok bi5om bi3oso bi5ow bir3 bi4st bis5troo bi1tr bit4se bit4s3p 4b1j 4b1k 3b4l blad5ij 2b5lap b5led bles3 ble5spe ble2t3 b5lid blijs4 blij5ste bli2k 4b5loi blok5l bloot5j blu2s 2b1m 4b1n b4o bo4d3ec body3 boe4g3a boe4kn boe4ko boes4 boe3st boet5st bo3f4l bo2k bok3an bokje5 bok4st bolk4 bo2m3a4 bo2m3o bo5na bond2 bond4s5 3bone bo3no bon4t3j bon4t5o4 boot3j boots5te. bo3p2 bor4sta borst5o bor4st5r bo4s bos3a bo5sco bo5si bo5so bos5p bos5to bot3j bo4to bot3r bot4sp bot4st bo2tu bou5ta bouw5s bo3v bove4 4b1p 3br4 braad5s bran4da bra5str brei5s4 brie4t brie5tje. bri4l bro2n bron3o4 bru2l 4b1s4 b2s5a b5sc b3si bsi3d bs5je b2s5la b2s5m bs5s b4stij 4bt4 b3ta b1tr bts5 3b4u buit4j bul4k bu4lu bune5t b5urb bu5ri bus5c bus3o but4a but3j bu2to but4s buts5te buur4tj 4bv 2b3w by3 4bz 4c. 1ca 3ca. ca3b ca1ch 5cada ca3do ca3dr cae3 ca3g2 cal4l3 ca3lo came5r ca3na cant4 ca2of ca1pr ca4pra ca5pri ca3ra car4u ca5se ca3s2p cas3t cas5tr ca3ta cate4n ca3t4h cau3 cau4st ca3v 2cb 4c1c cca3 cces5 c4d c5do 1ce 3ced cee4 3ceel 3cel cel3d celes5 ce5li cel5k ce4l3o 2ce3n4a 2cene ce3no 5cent cen4t3j ceo4 ce3ra cer2n ce5ro cer4t3r ce2s ce3s2a ce5sc ce3s2h ce3sta ce3s4ti cesu5r ce3ta ce4t3j ceto4 cet3og cet3oo 1cé c3g 4ch. 3chaï 5chao 3chas 1chau 5chauf 2chc 1chef 5chef. 5chefs 5chemi 5cheq che5ri che3ru 5ches che3us 1ché 5chir 4chn 2chp 5chromo 4cht 4chw 1chy 3ci ci5ab ci3am cie3k cier4s5 ci1eu 5cij 5cil ci5le cil3m 4cind ci3o ci5om 5cir ci3t2 ci5ta c3j c2k3a c4k3ed ck3ef cke5re c5k4et ck3id c2k3l ck4le c2k3n c2k3o4 c4k3r ck5se ck3so ck5st c3ky 1c4l cla2n cle3u 5clu 2c1n 1co co3ad co3d co4i coin5 co3k4 co3la 5com 5cond con1g 2co1no 5cons 3con5t4 2coo 2co1p2 3copa 4copi cor4dr co4rel co5ri cor2o 5corr cors4 co3ru co5sc co5se co5sp co3th co3tr 5coun 2cout co5v c3p4 1c4r2 3cras cre5d 2crip 3cris cro5f cro5k croo3 cro5v crus5 c3so c3sp c3ste 2c1t ct3act ct3ad ct5c ctee5t cte2n3 c2t1h c2t3j c4t3of c3tol c2t1on ct4or ct3rap c4t3re ct3sl ct3sp 1c2u cu5d4 cu3en cu3és cui5s cui2t cuit5e cu3k4 cula5p cu3ra 5cur3s cus3o c3w 1cy 1ç ça4o 4d. 1da 3da. 3daag d4aal d3aap daar5e 5daat 4dabo 2d3acc da4ce da5den 4dadr 3dae 2d1af 3dag da2g3a4 da3ge da4g3ed da4g3e4t da4g3on da4g3r dag4s3t da2gu 3dai da3ï da3ke da4ker 2dakk da4k1r 4dala d3alar d3alc da3le 4dalf da3li 2dalm da2l3u d4am dam4a da5mac d3a4mat d2a5me4 dames3 dam4pl 2da2na dan3as dank3l danoot5 dan4si dan4sm dan4s3p dan4st dans5ta 4d3antw 2d1ap 4d3a2pe 5dapu da2r3a d3arb 3dare 3dari dar4mo darm5on 3daro dar3s dar5st 3das3 5dasa da3stu 3d4at da3ta dat5j 4d5atl 4d5atm da2t3r 5daue 4d1aut 3dauw 2db dbei5 dbou4w5i 2d5c 4d3d4 ddags4 ddag5sp ddel5ev dde2n dden5a ddera4 dder5al ddere4 dder5ee dder5ep dder3o ddi3a d5dles d5do ddo3p 1de 3de. de2al de1ch d4e5den 5dedir de4dit dee4g3 dee4l deel3i 4d3een dee4r 4d3eff de3g 4d5eg. 4d5egg 2d5egy 2dei d3eie d3eig d3eil d1eis d3eiw 5dek de3ke dek3lu dek3w del4aa del5da del5dr del5eek 4d3e4lek 4delem de4lev 4d3e4lit del3k del2s del4s3e dels3i del4so 4d3e4mai 2demh 5demi dem5ond d2en. den4ac den5ate den3ei den3e4p den3ev 4d3engt den4k5of de4noc den3o4r den3sh den5str de3nu 5denvl de4o de5ofo de5ol deo4li deo3v de3rab de4r3ad der3a4g de3rak de3ram de3ran de3rap de3ras de4r5as. de4r5ass der2e der5ede der5egd de4r3ei de4r3em de5re4n de4rep de4ret de5rij de4r3im der3k4 der3on dero4r 4d3eros der4s3a der4s5om der5ste der5sto der5stra der5th 4d3erts der5tw de2r3u de3rup de2s de3sav des3m des3n des3p de3spe de5spel de4spl des5sm de3st des5tak de5stal de4s3te de4sti de5stic des5top de3t4 4d3e4tap de5tw deu4r3o4 de3us. deu4tj deve4 2dex 4d1exa 4dexp 3dè 2d1f 2d3g d4gaf dge3la dge2t dgeto4 dget5on dget5ov dge4tr dg4l 2d1h d5he dheer4 3d4hi. 1di di2a di5ae di4ak di4ano dia3s4 di4atr 5dich di4do die2f die4r3o di3esr die3st die2t diet3r di1eu 3dig di2ga dig5aa diges5 dijk3r di3jo 2d3ijz di2k3o4 5dil 2d3imp di5n2a 2d3ind 2dinf 3d4ing. 4d5ingel 4d3inj 4d3inko 2d5inr 2d3ins 4d3int dintel5 2d3inv 2d3inw 2d3inz di2o di5ofon di4ol di4one di4oni dio1s dio5sc 2d3i2ro 2d3irr 3di4s dis5ag di5se di5si dis4kr dis5p dis1t dis5tr di3th dit3j dit3r 5div 2d1j 2d3k2 4d3l d5le. dli4n dlot4s 2d1m 2d3n2 d5ne dni3s 1do 3do. do3a 2dobj 4d3obs 3d4oe 5doe. doe5d 4doef d5oefe 5doek 5doen 5doet 4d5oev 3doi d4ole 2do2li d4olin dolk5s 5dol5s 3d4om. 5domi do4m3o4 d3omr dom4sn 5domu d3omv 4domz 5don. d4ona 5done do5ni 5d4onn 5do3n4o do3nu do5ny 5donz 2dop do3pa d3opb d3opd do3pee 5dopj 4d1opl 3dopo d3ops d3opz 4d5org do4rië d3ork dors5m do3sp do3sta dot3j 5dou 2dov dover5s 3dovl 3dovo 2d3p dpren4 1dr4 3dra 5dra. d3raam d3raap d4rac d5race 5drach d3rad. d3rada 5draf 5d4rag d4rama d3rame 4d3rand 4drap 4dras 4d3raz 2dre 4d1rec d5reco d1red d2ree 4d3reek 4drend d4ress 4dret 3d2rev 5dreve d3ric dries4 5d2rif dri5ga d3rijd d3rijk d3rijm d3rijs 5d4rin 3dris 4d3rit 4d3roei d3roer 5d2rog 4d3rok d3roma d3rond 3droog 4droos 5drop 2drou 2d3ro5v 2droz drug4s d3ruim d3ruit 5d4ru4k 4d3rus 2ds d2s1a2 d4saa dsa4b d3sal ds4ate ds2ch d5schi dse2 ds3eco d4s3ed d4s5ee d4sef d4sei ds3eis ds3elf dse4li d5sen d4s3es d4set d2sh ds3ho d2s1i2 d4s5id dsig5a ds2im ds4ing ds5is d4s3j ds4jo ds5jon ds4l d1sla ds5las ds5lic d4s5lie ds5lim d3slin d2sm ds4mak d3smij ds5mo ds3n ds4ne ds5neu d3snu ds1o4 ds3ob ds3om d4son ds2oo ds3op d4spa d5span ds5pati d5spec d5s4pel d4s3pet d1spi d4s3pl d5spoe d5spok d5spor ds5s dst4 d1sta d5staat d4stab ds3tak d4s3tal ds4tan d3s4tat d5stav d3ste ds4te. d5stee d4stek ds4ter d4sterr d4stev ds3th d3s4ti d4stit d1sto ds5tram ds5trekk ds5ty d2su4 ds3ure ds3uu d1sy 2dt d1ta dtaart5j d1th d2tj d1to d1tr d1tu 1du 2duca 5due du3en du3et 5duid 5duif 5duik d3uil 2duit 4duit. d3uitd 5duite 4duitg d3uitv 5duiv du4n dun5i du2o du4ol 3durf 3durv 5du1s dut3j du5wen 2dv dvaat5 dvee3 dve5na dvies5 2dw d3wac d3was d3wat d1we 3d2wei d3wek d3wet d3wez d1wi 4d1wo d3wor d3wr 1dy 4d3yo dy4sp dy2s4t 2dz 4e. 4ea e3aa e1ab ea3bo e3ac ea4ca eac5t e1ad ea3da e5adem ea3do ead3s2 ead5sh e1af e1ag e3ai ea4k3o4 e1al ea3la e3ali e4als ea5mi e3an e4an. eang3 ean4s e5ap ea3pr e3aq e1ar ear2c e1as e2asc ea5s4e ease5t ea3so e1at e4at. eat3s eau3s4t e1av e3bo ebots5te. e5br 3ecd e3ce e1che e1chi echt5ec echts5o e3chu 4eck ec5le 4ecor 4ect ec3ta ec4taa 3ecz e1d ed4ag e3dam e3d4an e4d4as ede3a ed3ei. ede5le edem4 ede5nac ede5o ed4er e4d5erns ede5rog edi3al edi3am e5die 4edir edoe5tj e3d4oo ed3opv edors5te ed3ov e3d2r ed3rod ed3rol ed1s ed5se ed2sl ed4so ed5sp ed3su ed3uit e4d2w e5dwan e4e eea4 ee5b ee5ca ee5che ee2d3a eed4ac eed5as ee5de ee5do eed3ru eed3si eed3w ee2f ee3fa eef3ac ee3fi eef3l eef3r ee4gap eeg3l ee3i ee2k ee3ka ee5kaa eek3ak eek5all eek1e ee5ket ee3ki ee3kl ee4k3lo eek3n eek3re ee3kri eek3ro eek5st eek3w ee2l eel3a ee3lad eel4as. eel5d4u ee3le eel4ee ee3li ee5lij eel5k4 ee3lob eel3og eelo4ge ee3lu4 eel3ur eel3uu 4eem eema4 ee2n een3a eena4r een3e2 een5g ee3ni een5ie een5k ee5o2 ee2pa eep3an ee3pl eepo4 ee4p3re eep3ru ee2r eer1a eer3aa ee4rad eera4l ee3ram ee3ran ee3re ee4ree ee5rei ee4r3i ee5ric eer5k eer3og eer5oom ee3rot eer5ston eer5str ee2s3 ee5sch ee4s5em ees5et ee3sj ees5lo ee3sn ee3s4p ees5pl ees5pot ees5ten ee3stu ee2t eet5aa ee3tal ee3tan ee5te eet5h ee3tj eetna4 ee3to eet3og eeto4ge eet3oo eeto4r ee3tr ee4tro eet5rok eet3sp eet5ste ee5v ee5z eën3 e5ër ef3ad efa4z efde5l ef3do ef3ei e5fer 4efi efie4t efiet5j ef3ins e3fis5 e1fl ef3li ef3loo e3flu ef3om e3foo ef3op e1fr ef3rij e5fron ef3sf 4e1g egas4 eg3as. ega5sk eg3ebb e4ge4c eg3eig egel5ei. ege4l5ov ege4net egen5of ege4ra eger5eng ege4ro eger5on e3g4i eg3ijz egip4 egiste4 e2gl e4go. eg3org e2gos eg3oud e5graf eg3s4 eg5sle eg5so e2g3u4r egut4 e4g3uu e1h4 e5ha eheis5 ehit4 e2i ei5a 4eid ei3do eid4sc ei1e 4eien eien5s eie5re ei3f4 ei3gl 4eign e3ij eik4l ei3kn ei5kr eiks4 4eil. eil5ant 4eild4 eil5dr 4eile ei4lev eil5m ei2l3o ei4n3ab ei3n4ac ein4do eind5oo ein4d3r ein5gr ein5k ei2no ein5sl ei3o ei2sa ei5sha ei3s4la ei3slo eis4p ei3s4ta 4eit2 ei4too eit4s3 eits5c eits5n eits5te. eit5sten eits5tr eive4 4eiz e1j2 e3je ek3aan ekaart5j ekaat4 ek3af. e4k3a4g ek3al. ek3alt e5kam ek3ang ek4ee ek1ei e3kem e5ker. e5kers ekes3 ekes4t ekes5tr e3ket ek5eter e5kic e4kil e5kis ekla4m eklam5a ek3lev e5klim ek5loos ek4ni e3ko e4k3ob e5kof ek3oli ek3opz e5kor ek5os. ek5oss e5kran ek3roz eks4e eks5erv ek5set ek4str eks5tra ek5t4e ek3to eku4 ek3uit ek3ur ek1uu ekwet5ste ek3win e1la el3aan el5aand el1ac el4ade el3adj el3adm el3adr el3adv el1a4f el1al e3lan el5ana e3lap e5lap. e4lapp el3arb el3arc el3arm el3art e4l3as. el3asi e4l3asp e4l3ass el1au e4laut e3laz el5azi el4dec el4dr el4du e1le e3le. el3eeu el5eff e5leid el5eier el3eig el3ei5s e4lel 3e2lem el3emp e5l4en e3ler ele5r4a eler4s el3erv e3les eles4t e4l3eta ele4tr e4l3etu el3exc e3lé elfi4d el1fl elf3s4 el3gu 2eli e5lie e5lig eli5kw el3imp e4l3ind e3ling e4l5inkt el5inz 3elix el4kee elk3s el4k3u4r el4kw 4e1lo e5loep el3oes e3lok el3ol el3oms el5ond el5ont e3loo e5lood e5loos el3ops el5opt el5opv el3o2r el5org elot4j e5lou el3o4ve e5loz elp4o el4ps el4s5em el4s3k el5smed el5twe 4e1lu el3uit eluks5 2ema e4mana ema3sc ema5to emees5 emens5te emer4s emes3 emie4tj e5mok em3oli em3op em3org emor5sten e4mo4v em3sa em5sc em4sli em4sm em1st em3su em3uit emut4 en3aap e3naar e4n3aas en1ac e5n4acc en5af e2n1ak e2nal en3al. en3als en3amb en4ame e2nan e4n3ang en1a2p e5nari en3ars e2n3a2s enas3p e3nat ena4tel e4n3att en1av e2n3a2z enci4 3ency. en3da en5daa end5ama 5enderti en3d4o en3dr en5drek e2n3e2c enede4 e3nee en3eed enee5t en5eg. en5egg en3ela en3elf en3ema e4n3en5t e2ne2p en3epo e5nere 5energ e4nerv en3eta en3ete ene4ten e3neu 4enf en5ga en3gl en4g5le eng4r en5gri engs4 eng5se eng3sm e3nie e5nijd e2n3im e4ninga e4n3ink e3niv e4n3i4vo en3k2a e4n3och en3off e4n3oli e2n1on e4n3oor enoot5 e2n1o2p e3nor. en3ord eno3s en3ou e2n1ov 3enq en5sce en4sei ens5ein ensek5 3ensem ens4fe en4sin en5slak en4s3on en1s2p ens5pot en5stan en5sten enst5ijv en4stin en4stu4r en3su en4tac en5tee en5tei ente5re en4terv 3entè en1t2h en5tom ent4r en3tre ent5rol ent4sl ents3m ent4s3p en3tw e1nu e4n1ui e2nun en3ur en3uu 5envelo eny4 e3o eo3d eodo3 e5oe eoes3 e5off eo3fr e4o3k4 e5on eo5ni e5oo eo3pa eo3pe eo3pl eop4la eo3p2r e5ops eor5d e5org e5ori eo3ro eo3s4 eo5st e4ot eo5te e5o3t4h e1pa e3paa ep3aak ep3ac e4paf epa4k ep5ake e3pal e3pap e4p3app e3par ep3asp e1pe e5pe. ep5een e5per epers5te. e1pi 3epid ep3ijs ep3ijz ep5ingr ep3ins epit4s epits5te ep1j e1pl ep3led e4p3lod e5ploe ep3lus e1po e4p5o4ge epoort5j epoot4j 3e4pos. e3pot epou4 e1pr ep4ra e3pri ep5rode eprot4 ep2s ep4s5ee ep4ser eps3l eps5n eps3p eps3ta eps5taa eps5tal eps5to eps3tr eps5tro ep4tak ep2tj ep4tr ept3ra ep5tro ep3uit 4equa e3ra. e1raa e5raad e4raak. er3aan er5aanp e4raap. e5raat e4r1ac e5rac. e5race e5raco e3rad e5rad. er3ado er3af e3raff era4gen e1rai e4r3all er3ama er3ana e5randa e5rane e5ra3pl er3arc e3rare e3rari e1rat4 er3a4tr er3azi er3d2a er3d4i erd4o er3d2r erd5uit. er3d4w e1re er5eat 4erec er5editi er3een e5reep er5eers er3eet er3ef er5eff er5eg. er3egd er5egg er5egt er3eie er3eig er3eil er5eind ere3kl er3elk e4r3emm er3emp e3rend e5rendel ere4ne eren5eg er5enen. e3renm e3rent er5enth e5rento eren5tw ere2o ere4og er3epi er3e2q er3eri e3res. er3esk e3ress ere4st ere4t3j er3etn e4r3ets e4r5ex erg2l e3ri eri5ab e5rif e5rig erig5a er3ijl er3ijs e4rijs. er3ijv e4r3ijz e5rik er5ind e4r3ini er5inkt er3ins er3int e5rio e5ris erkeers5 er2kn er3m4i er5mo er5nu e1ro. e3rob er3oc e4r3oed er3oef e5roep eroe5tj er3oev er3of ero2g e3rok e1ro2l e5rol. er3oli e5roll er3om er1on e3ron. e3rone er3onv er3oog er3oor e5roos e4r3op erop3a ero5pen e2r3or er1ov er3oxi e3roz e3rö er4plu errie5tj er3scr er3sj er5slag er5span ers4pot er5stem er5te er3t2h er5t4i er5t4o er3tr ert5se erts5l er3t4u er3t4w e1ru e3rub e3rug5 e2rui er3uit erui5t4j e2run e3runs e4r3ur e3rus er5uu 3ervar 3erwt e4saf e4s3a2g e3sam e5san es3ap es3arr e3sa3s e3scop e3s2cr es4e e5sec es5een e5sel es5ene e4s5eng es5ex es2fe es5he e4shi e3sid e3sie es1in e4sir es5je. es5jes e3s4jo es5jon e4s3ka es5kr e3sl es4la e5sla. e5slag es3lak es5lat es4le es5leg es2m es4mui e5smuil. e1sn e3s4ne e1so e3sol es4oo es5oor. eso4p es3ore e1sp es5pas es4pel espit5ste e3spl e4sprie esp5riem es4sm e3stak e3s4tal e3stap es4tar es5tatie e4s3te. es4tea es4teel est5ei. e4steka es5tekam e3s4tem es5temo es3ten e4sten. es5tenb es3ter estere5o es5tes es4tet e3steu es4tic e4stie e3stot es5tra. es5trac es5trak e5stral est5rap es5trei est4sc es4tur e3sty e3su esu4r e3sy e1ta e3ta. et3aan et3ac et3ad et3afz 3e2tag e3tak e5tak. et4ana e5tand e2tap e4tapp e5tat e4tau e2tav e3te e5tea et3edi e5tek 4etel e5tel. e4t5elf e5tels et5emb et5emm etens5u eten5tj ete5r4a ete3ro eters5la eter5sm e5tes e1th et3ha et3hor et5hu e4t5i4d e5tie e4t3inc e4tiq e5tis e4tja e1to e5toc e3toe e5toev e3tol eto4p et3ope et3opl e4t3ork eto3sf e1tr et3rec e4t5res e3troe e5tron e5troo etros4 e4t3ru et4sl ets5lap et5slu ets3n et4s3oo et3spe ets3pr et3spu et4ste ets5tek et5sten et5sti ets4u et5su5r et5suu e1tu etui5tj etu4r et3we et2wi 1eua4 1euc eudi5o eu5dr eu3e eugd3r eu3g2r eu4ler eu4li e1um e3um. e2umd eu2na eun3t 1eu1o eu2po eu4rad eu4rec eu3ren eu4res eu4rij eur5k euro5v eur4sta eurs5taa eurs5te. eur4s5tr eur4su eu5sch eus4p eu3spa eu4st eu5str eu3tj eu1tr e3uu 2euw eu4wa eu5win euw4str evaar5tj eval4s evari5 eve4lo evel5op eve5n4aa 4ever eve3ra 4e1w e5wa e5we ewen4s ewens5te. ewest5r ew2h e5wi ewo3v 4ex. 2ex3aa ex3af 4exco 3exeg 3exem 4exi ex3in ex5op 1exp e3y4o eys4 ey3st e5za e3zee 4e3zen ezers5 e3zo ezz4 é3a é1d édee4 édi3 é1g égee5 é3h é3j é3n é3p é3r é1t è1 4èc è2l è2s è5t èta5 ê1 ê2p ê3per ê5t 3ë 4ë. ë2b ë3c ë3d ëe2 ëen3 ë3j ë1l 5ën ënce3 ën4e ëns2 ën5sc ënt2 ën5th ën5tw ë3p ë1ra ë1re ë1ri ë1ro ëro1g2 ëro3s ë2s ë3si ës3t ë1t ët4s ëts3te ëve5 ëven4 4ëzu 4f. 1fa f3aanb f4aat 3fab fa2bo f3acc face4 f1ach 2fad 2f1af fa3g fal3s fa3m f3ang fant2 fan4t3j fant4s5 2f3a2p f4arm 3fa5se fa2to fa3v 4fb fbe5dw f1c 4fd f3da fda4g f5dan fd1ar fde4k fdek3l fde4s3 fdes5e fdes5l fde5sm fdes5t f2d3in fd3of fdors5te fd4ra f3d4ru fd5se fd3si fd3so fd3sp f4d2w fd3wo 1fe fe2a fec4tr fede3 fe4del f3een 5fees feest5r fel5dr fe4l3ee 3feli fe4lom fe4l3op fel3sp fe3no f4er fe3rab fe3ran fe4r3et fe3rom fe3ron 3fes3 fe4t3j fetu5r 2f3ex 1fé 3fè 3fê 4f1f f5fe f5fi ffs2 ff3sh ff3si f3fu f3g2 fge3 fge5r4 fge5t 4f5h 1fi fi5ac fi4al fi3am fi3apa fi3apo fia4s 3fib fi1ch 5fie 5fig f3ijs 2f1ijz fik4st 3f2il fil4m3a film5on fi3lo 4find 3fini f3inj 4fink 2finr fi3o fi4r fi4s fi5se f5iso f1j fjes5 4f1k4 f3ke f2l2 4f3laa f1laf f4lam f3lei flen4st flens5te. f4les fle2t flet3j 4flev f4lex f3lez 2flie 2flij f4lik f4lip f4lit f3lok 3f4lor flu4t3 4f1m f1n 1fo 3fob 5foc foe5d foe5ta 2f3of 5fok 2foms fo5na fond5en fonds5l fon5eng fo1no 4font fon5te foo4 fooi5 f3oom 5foon 2fo4p fop5s4 f4or 3fo5re fo5ri 5form for4t3j fo1ru fo3t 2f3oud 4f1ov 3fö 4f5p4 fpers5te. fpits5te. fr4 f4raak. fraam5 5frac f3rad f2ras 5frau f1rec f3rek 5freq frie4s frie4t friet5j f4rik f4rod 4f3rol f4rolo f3roma frus3 4f1s f2sa4 fs3ad fs3an fs3ar f3sc f5sch f4scr fse2 f4s3ec f4s5ee f4sei f4s3eth fs4fe f2sh fs5he f2si f3sie fs3im fs1in f5slaa f5slac f5slag fs3lap fs2m fs3ma fs4mi fs3mo fs3mu f2s1o4 fs3ob fs3om fs4oo fs2p fs4pre fs4t fst3as f3ste fs5tec f5stell fste4m3 f4sterr f3sti f5stif f3sto f4st3oc f4ston f3str f3stu f3sy 4ft f1ta ft1ac fta4kl fta4p ft3art fter5sh ft3h f1to f5tond f4tont f1tr ft2s3l ft4sm fts3n ft4so fts3p f1tu ftu4r 1fu 2fuit fu4ma fum3ac 3f2un fur4o 3fus 2fuu 4fv fva2 fval3 4f1w4 3fy1 2fz fzet5 4g. 1ga 3ga. gaar5tj g4aat 2g1ac 4g3adm g4af. g3afd ga3fr 4g3afs 4g3afw 2g3a4h 4gal. ga3la ga4l3ap ga5ler gal3s 4gamb g4a3mi 3gan gan5d 5gane gan4s5t ga3pl 3gar. 4g3arb ga3re g1arm 3gars 2g3art gar5tj ga4s gas5c gas3i ga5sla. ga3sli ga5slo gas3o gas3p gas3tr gas5tra gast5rol 3gat gat5j gat3s 4gaut ga5ve g1avo 2g5b 2g1c 4gd g5dac g5dag gd3art gd3at gd5ate g3de g4d3elf g5der. gd3erv g4d3id gd3im g2din g3dr g5dru gd3sa gd5sp g3du 1ge 3ge. ge3a gea3dr gea5na gea3q ge4ari ge5au 4g3eb. 2gebb ge3c ge3d4 gedi3a ge4dit ge5dr ge5dw 3gee4 geest5r geet3a ge3f4 2g3eff ge5g4 gege4s 4geig 2g3eik gei4l5a 5geit geit3j ge3k4a ge3ke ge5ki ge5k4l ge3kr gek4st gek4u ge3k4w ge3lau gel4d3a4 ge3l4e 4ge4lem gel5f gel5k 5ge3l4o gel5si gel3sl gel3sp gel5ste ge5ma 4gemb 4g3emf ge5mo 2g3emp gems3 ge3m4u g4en. ge3nak gen4az 3ge3ne ge4n3ed ge4nend 4g3engt 3geni gen5k ge1no ge4n4of ge4nog gen5sfe gen5ston gen5stu genstu5r 5genw ge5om geo5pe georke5 ge5os ge5ot ge5p4 ge1ra ger5aal ger5aap. ge4r3a4l gera4p ger5ape ger5as. ge5reg ge3rem ge5ren. ger4i ger5ini ge1r2o ger4of ge5rol ger5slan ger4sli gers5lij ger4sp 4g3erts ge3r4u 3ge1s4 ge3sa ge3sc ge5se ge3si 4ge3sk ge5sl ge3sn ge3so ge5spend ge5sper ge5spo ge5stan ges5te. ges5ten. ge3str ge5sw ge3ta get4aa ge5tam ge2th ge5t4i ge3t4j get4o ge3tr ge5tra ge5tro ge5tru ge5tsj ge5tu ge5t4w ge3ui 5g4ev 4gex 5g4ez 1gé gédi4 3gè 4g1f gfijn5ste 4g3g4 g5ge gge3la gge4r5on gges5ti g4g5h g5gi ggings5 g5gl 2g1h g2het ght4 gh5te g2hum 1gi gids5te gie5ra gier4s gi1eu gi2f gif5r gi3ga 5gigere 5gigste 2gij g3ijs 4gijz gi2m gi3na 4g3inb 4g3inf g5infe g5infr 5ging 2g3inh gin3o 2ginr gi4oc gi2od gi4onet gi2or gip4st 5gir 3gis 4g1j 4g1k gl4 g5lab 3glai 1gla4s glas3e g5lat 3g4laz 3gle. g5leer glee5t g3len 2g5lep 4g5ler g3les 3gle4t glet3j g5lev g5lice g5lich 3glië g2lif g5lijs g2lim 3g4lio g2lob 3glof g5log 3glom 4g3lon g3loon g3lop 3g2los g5loz 3g2ly 4g1m gmaat5j 2g1n g3na gn4e gne5g gne5m gne4t3j gnie4tj 4gnu 1go 3go. 3go2a 3gob 2goc g1och go4d3a god4s3 gods5t 4goef goe1r 2gof go3f2r g4og 4goh go2k 5gom. go2ma g3oml 4gomz go4n3az 2g3ong go5no 2g1ont g2oo 2g3oor 3goot 2g1op go3pa g4opr g4ora 4go4re go5re. 5g4ori gor2s gos1 go3tr gou4d5ee 2g3ov 2g5p gpes3 1gr4 3gra 5gra. graat5j g5rak gra2m g4ram. gram3a g3ramp gra4s3 5grav 2g3rec 2g3red 5gredi g5redu g3reek g3reel g4reep g3reis 4g3rek 2g3rem gren4s gre4s g4reu g3rev 5gria grie4t5j g5rijd g5rijk g5rijm g5ring 5g4ris grit5s 2g3riv groet5j grof5 g3rok g3rook g3room groot5j 2grou gro5v 2g3rug g3ruim g3rup 4gs gs1a2 gsa4g gs5alar gs3alt g2sc gse4 gs3eco g4s3ed gs5een gs3ei gs3en gs5ene gs3erv gs3et gs3ev gs5he g2s1i2 g3sie gs5is gs1j g3s4ke. gs3l gs4la gs5laag gs5lam gs5las gs1le g3slep g4sleu gs5lie gs4lin g5sling gs4lo gs5log gs5lok gs5lon gs4lu g4s5ma gs3n g4sna g3snij g4s1o4 g5sol g5som. gs5ons gs3op gs3p gs5pand g3spec g3s4pel g3s4pet gs4pi g3spie g3spil g5spin. g5spinn gs5pir gs5pol g3s4pon gs5ps gs5q gs5sc gst2a gs5taal gst5aang gs5tac g5stad g5s4tan g4st3ap g5stat g1ste g5s4te. g5sted g5stee g3stei gs3tek g5stel g3sten g3ster g5ster. gs5terr g5sters gs3th g5s4tic g3s4tig gs5tijg g5stof g5stop g5stor gst3o4v g4s3tra gs5trad gs5trak gst5ram gs5trap g5strat gst5res gs5troe gs5tron g4stru g5struc g3stu gs5ty g2s1u4 gsver3 gs5w g5sy 4gt g1ta g2t3ap g3te gte3ro gtes4 gte3st g1to g3tr g1tu 1gu 5gu. 3gue gu4eu 2guit gu4ni gu2s3 gut4st guts5te. 4gv g5vo 4g1w g5wa 1gy 4gyp 2gz 4h. haams5ta haar5sl haar5sp haars5te haar5tj haats5te. h3afd haf4t3u ha3g ha5ge hal2f1 5hals hal4sto 5halz 2hamp 4han. han4dr hand5sl han3ga hang5l hang5s han4s3l han3so han4st hap2s hap4se har4ta harte5l hart3j har4t3o4 har5tre hart5sl hat5j ha2t3r hat3s ha3v 4have. 4hb 2hd h4e 2hea he2ar 3hech he3co 4hee. hee3g4 hee4k heek3a heek5l hee4l3o heep4s heeps5c heers5tak hee5sto hee5tjes he2f he4i heids5p heis4 hei5tj he2k3a he2kl hek4st heks5te. hek5sten hek3w he3le he4l3ee he3li hel4m3a helo4 hel4p3a hel3sm he5mo he5ne hen4kr he3n4o 4he5o he4pij he2p3l he2pr he1ra her4aa he4r3ad he3r4au he4r3i herm5eng he3ros hero5v her4p5aa 3herst hert4 herts5te he2ru he5se he2sp he2s5t hets5te. heu5le 2h3f 4h5g h3h hi5d hie4f3 hielsges5 hie4r3 hie5ren hier5u hie4t5o hie4tr hiet5s hij4sl hik4s5 hi3kw hil3m him4pl him4pr hin5d h3ins hin4t3j hi2p5l 2hir2 his5p hi3tr hit4st hits5te. hit5sten h3j 2hl h3la h4lag h3lep h3loc 2h2m h3ma h3me h4mer h1n h2na hno3 2ho. ho3a hoa3n hoboot4 ho3ch hoe4ker hoe4s hoes5l hoe3t ho2f hof5d hof3e ho3g2 ho2ka ho5mo hon3dr hond4s hon3g honi4 ho1no hool3e 4hoom hoort4 hoor5tr 2hoot ho3pa ho1pe ho2p3o hop3r hop4str hor5de 5horl ho3ro hor4st hors5te. hor5sten hor4t3j ho3ru ho3sa hot3j ho3tr ho4t3re hot4st hots5te. ho3v 2ho4w how3o 2h1p hpi4 2hr hra4b h4re h5rea hri4 hro2k hrok3o hroot3 4hs h3sa h3sp h3st 2ht h4t1a2 ht3ac h3tal ht3ala h5tans h3te. h4t3ec ht4eco h2t3ee h2t3ef h2t3ei ht5em h3ten h4ten5t ht5entw hter3a hte4r5o h4t3esk h4tev ht5eve h5tevo ht3ex h2t5h h4t3int h2t1j ht1o4 ht5oef ht5op h4t1r ht5roo ht4sap htse4 ht4ser ht2si ht4sl ht5sla ht5slot ht3sme ht5smij ht4s3o ht3spe hts3pl ht3spr hts5taal ht4s5tak ht4s5tek ht4sti hts5tore hts5trekk ht1u2 ht3w hu4ba 3huiz hul4der hur4t5 hut3j huts5te. huur5s 4h1w hy4la 3hyp hypo1 4i. i1a i3aa i4ab i5abi i4ac i3ady i3ae i5ae. i2a3f4 i2a3g2 i3agr i3ai i5ak. i3ake4 ia4kem ia3kl ia3kr i3al. i4a3la i3ali i2am i5am. i3ami i3an ian4o ia3o i2a1p4 ia5pa i5api ia3sc ia5se ia3so ia4s5po ia3sta i3at ia3t2h i5atri iave4 i5ble iboot4 4ic i3ce 5i4cepa i1cha i1che ichee4t i1chi i1cho i3chr ick5l icos4 ic4t3op ict4s5c i3dam idde4r5a ide3a i4dee. ider4sp ider4st ides4 idi3a idi5ab i2di5o id4mak i3dok i2dr id3ran id3ru id2s1 id4s3a id4ser ids5i ids5j ids5l id4sm ids5ma id5s4mee id4s3o ids3ta ids5tak ids5tek id4stem id4sti ids5tr id3u4r id3uu idu3w id3w 4ie ie1a2 ie4d3ac ie3de ie4dro ied3w i1ee4 ieë2 ie3fi ie2fl ie3fle ie3fon ie4fr ie4gas ie3ge ie4g5ins i2ek iek3e4v ie4kl iek3li ie5klu ie2kn iek5ond iek4s5n iek4sp ie2ku ie3kwa ie5lan ie5lap iel5do iel5d4r iel4e iel5ei. iel5k iel3sc ie3ma iem3ov ien4dr ien3ij i3enn i5enne. ien3s4m ien5sp ien4sta ien4st5o ien4str ienst5ur ieo4 i4ep ie5pen iepiet5 iep5oog iepou5 iep5rel iepro4s iep3s4 iep5st iep5tr ie4pui ie5r4ad ier3a4l ie3ram ie3rap ier3as ie4rat ier5el. ier5els ie5ren. ie5ring ierk4 ie3r2o ie4rof ier4sl ier5slu ie3ru ier4ui ie3sf ie2si ie4sl ie5sle ies3li ies3m ie2s3n ie2so4 ie4s3pl ie3sta ies5te. ie5stel ies5tere ie3sto ie4taa ie5tal iet5ant ie5ten ie3tj ie3to4 ie4t3og ie4too ie4top ie4tor ieto5re ie4t3ov ie5troe iets5te. iet3ur iet3uu ie3twi i3ety ie2u ieu3k i1eur ieu5r4e i1eus ieu3sp i1euz ie3v ie3z iezel5a i3és i1ét i1è i4ëg i4ëva 4if if3aa if3ad if3l if3r if4ra if4taa if4tar if4tre iftu5r if3ui ig4a ig3aa ig5ac i5gal i4g5av i3ge ige2s ig3esk ig3ij i4gind igi3o ig5no i3g4om ig4op igs4 ig3sk ig3sl ig3sp ig3sto ig3un i1h i3i i5ie ii2n i5is i2j 4ij. ij5a ija4d 4ijd 4ije ij3ef ij3ei ij3el ij5e4n3 ij1er ij3i 4ijn ij3o4 i3jou 4ijso 4ijsp 4ijst ij5te ij4tr ij5u 4ijvo 4ijzo 4ik ik3aar i4kam i3ke ik3ef ike4ra iket3 i2kij i3kl ik3la i4k3lo i4k3lu i2k4n i4k5na ik5o2g i3kom i2koo iko2p ik3ope ik3ord i4kr ik3re ik3ri ik3ro ik5se ik5si ik3s4l iks3n ik3sno ik3sp ik4spa ik1st ik5sta iks5te. ik1w ik5war i1la i3la. il4aa il5aan il3ac il4act il3ad il3af i3lak il3al i5land il2da il4d3r ilds4 4i3le il3een ile3l i4l3erv ile4t ilet5r ile3u il3e4ve ilevin4 i4l3e2z i3lé il5f i3li ilie5g ilie5t il3ink ilk4l ilk3s2 illa3s 1illu il2m ilme2 il4min il4mo i1lo ilo4ge il3ond i3loo i5loon il3oor il1or ilo4re ilo4ve il3s2h ils5j il4sti il2th i1lu 4im. i2mag i4mago im5au imee4 im3een i4m3em im3enc im3ex 4imf i2m3of im3op im3org im5pa im4s3oo im1st i3mu in1ac i2nau ind4aa in4dene ind3sc ind5ste 1indu in3e4de in3edi in3eed inek4 ineo2 inet4s i5neu 1inf in2ga4 ing3aa ing3ag ing3al 3ingan ing5lo in2go in4gr ing4st 4ini. i3nie ini5on ini5sl ini5sta 4inkj in2kn 3inkom in4kri 3inno i1no i3noc i3nod in4o2g in1on ino5pe ino3s4t in3ov 1inri 4ins. in5sch in5se in3sl in3smi in3so in1sp in5spo in5sten in5swi in4t3ap in5te intes5 in3th 1int4r i1nu inuut3 4i1o io5a ioas5 io5b i3o1c i3ode ioes3 io3f io3g2 i3ol i5ol. i5olen i5olus i3on ioneel4 i5ong ion4s3 ions5c i5oo i2op4 io3pa io3pr i3opt io3ra i3ori io3ru io4s i3os. ios3c i3o5se i3o5sf io5sh io5si i5osi. io5so io5sp io5s4t i5o5su i3osy i5othek i3oti iot3j i5otorens io3tr i2o3v i3ox i2oz i1pa i2p1ac ip3af i3pap i1pe i4perw ipe4t3j i1pi ip1j i1pl ip3lu i1po ipo4g i1pr i2pri ip3ru i4ps ipse4 ip4si ip4sle ips5te. ip5sten i3ra ira3k i1r2e ires4 ire3st i3ré i1ri irk4s i1ro iro3p iro5v ir2s ir4sc ir3sp ir5ste irt3r i1ru 4is i1sa i2saa i4s3ad is3a2g is3ap i2s1ar i2s3as i4sc i5scha i5schr is5col i5scoo i5scope ise2d i4s3ei is3ell is5eng i4s3erv ise3st iset3j is4fee is4fer i4sh is5ho isi2d i2sij i2s3im is3ja i4sk is3ka is3ke is3l is5lag is5las is5le i4s5m i4s3n is5ned is5nij is5no 5isol i4soo is4oor iso3s i2sot is3ott is3p is5pas is2pi is5pl is5q is5sa is5so i2s3t is1ta i3stak ist3ap i4s5tas is4tat is5terd is5tere is4th is1to ist5ong i3str is5tri i5stro. i3sty isu2m i5sy 4it i1ta it3ac ita5d it3een i3ten i3ter ite5rei ites4 ite3st ite4t it3hie it1ho it1hu it2i itie5st i4tj i1to it5oef it3oog i3t2ou i4to4v itper5st it3red it1ru it3sje it3sli it3sop it1sp its4te it4ste. it4too i3tu it3w 4i3u2 iu4m ium3a4 ium3e ium3o iu3r i3ve iven5s ive3re i5w iwi2 iwie2 iwit3 4iz i3ze ize3t î3 ît4 1ï 2ï. ï5a ï1c ï1d ïe4n3 ïe5nen. ï2n3a ïns5m ïn3sp ïn3u ï3n4ur ï3o ï3ri ï3ro 4ïs. ïs3a ï4sc ï5sche ïs3l ï3so ïs3t ï1t ï5z 4j. 1jaar jaar5tj ja3b 2jaf 1jag jagers5 ja3kn ja3mi jan4s3l jan4st ja3pl ja1po 1jar jare4 1jas3 jas5p 3jaw jaz4 j3b jba4l jbe4l3i j1c jda2 j2d3aa jd3an j4d3ar j2d3ee jde4n3e jden4s jdens5p j4d3erv jdes4 jde3sp jde5st jdi3a j2do4 j3dom jd5on jd3op j3dr j4d3re j4d1ri j4d3ro j4d3ru jd5sei jd3spo jd1st j2d3u jd3w j3d4wan jea4 3jeba je3ch jec4ta 2j1ee jel4 je3la j1en je2na2 je3n4o 5jep jepiet5 je3ro jers4 jer3sp je4s3 3jesa 5jesal je5sch 3jeskn jes5l jes5m jeso2 jes5pa jes4pr 3jesr jes5tr 5jesvo 3jeswa 3jeswi je2t jet3er jeto4v jet5st 5jeu 3jevr 2jew j3ex j2f1a j2f3ei j2f1en5 j4f3ij jf3ink jf3l j3f4lat jf5le j2f3o4 jf3r j3f4ra j3f4ro jf2s jfs3a jf4sc jf4s3er jfs5f jfs3l jfs5m jfs3n jfs3p jfs5pa jf3st jf4sta jfs5tak jf5stan jf4stel jf4sti jf4s5to jft2 jf5ti jf5tw j1g j3ge jger5sl j2g3l jg4s5e jg3sn jg2st jg3s4te j3h jif3 j3ig jin3g ji5t2j j3j 2jk j3ka j4kaa jk5aard j4kar jk3arb j4kau j4kav j2kij j2k4l j3klaa jk5lak jk5lap jk5las j4kle j5kled jk5les jk5li j3klon jk5lop jk5luc j2kna j2k3of j4k3o4l j2k3on j2ko4p jk3opb jk3ope jk3opl j3kops j2kr j4kra jk3raa j5kran jk3re jk3ro j4k5ru jk3slo jks3pl jk4sta jks5taak jks5taal jks5tak jk5stan j2k3ui jk3w j3k4was j1la j3laa jl5ana j1le j2l3ef j2l3el jl5f jl3ink j1lo j2loe j3lu j2m3af j5m4ar j3mi jm3op jm3s j2n1a4 j4naa jn5ac j3na5g jn3ak jn2am jna5me j3n4an jn5d2r j2nef jne4n j4n3erk j4n3erv jn3gl j4n3im j4n3ink jn3k4 j2n1o4 jn4si jn2s3l jns5lac jn3slu jns5or jn2sp jns3pl jn1st jn4ste. jnt4 jn3tr joet3 4joi jol4e jo5lij j3om 1j4on jone2 j3op jo3pe jo3ra jo3ru j4ou 1jour jou5re joy3 j3pa j4p3ac jp3arm j1pe j2p3em jp3ij j1pin j3pio jp1j j1pla jp3li j1po j2p3or j4pre jp3ri jp3rok jps4 j3r jraads5 2js js1a j4sef j4s3ela j5seli j4s5em j4s3e4r j2s1i js5in js4ir js4le js3lee js3li js5lie js4me js5mel js5met js3n j4s1o4 j5soe js3ol js3pac js3par j3spe js3pl j4spo js3poo jspoort5j j5spor j1sta j4star j2s3te j3stee j3s4tek j3s4tel j5s4teng js3th js4tij j5stond j4stoo js3tou jst5ran j5strok j2su j3sy j3taal jt3aar jt1ac j1tag j3tak j3tan j3te. jt1h j3toe jt3opt j3tr jt3ra j5tred j5tree jt3rei j5trek jt3ri j5trok jt3rot jt1s j1tu 1j4u ju3d 4jum jus3 juve5 j3v jve2n jver4s jvers5p jve3t jvie5s j1w jze4r5o 4k. 1ka k3aanb k3aanl 5kaart kaart5jes kaats5te. kabe2 ka3bo 2k1ac kade4t5 4k3adm ka3do k3adv 2kaf k3afd k4aff ka3fl 3k4aft ka4ga k3a4gen k3ah ka3i 2k3alb ka3le 5kalf kalf4s5 ka3l4i kal2k kalk3a 4kalt 5kalv 3kam 4kamb kamen4 kame4re kam4pa kam4pl kam4pr ka5naa kan5d 4kang kan4sl kan4st kan4t3j kao3 5kap. ka3pe kap3l ka1po 4kappa ka3pr kap3s k3arc k4a3ro kart4 4k3arti kar3tr ka4s kas5c 4k3asi kast3o4 ka3str kast5ra ka5stro kas3u4r kat5aal ka4t5a4le ka4tan kati4 ka4t5io kat5j k3atl kato4 ka4t3og ka5tr kat3s 2k1aut 2kavo 2k3b 2k1c k3ca 2k5d kdi3a 1ke k4eb 2k3ec ke4di 2k3een kee4p5l kee4r keer4s keers5to 2kef 4keff k4ei. k4eie k2eil kei3s4 kei5t ke4lap kel5da kel5dr ke5lel 4kelem kel5f ke4l5int ke4lom ke4l3op kel3sp 5k4ema 2kemm 2kemp ke4n3an ke4nau ken4ei. ke5nen ken5k ke2n1o kens5po kepie5t 4k3e4q ke3ram ke4r5enk ker3kl ker4kle ker4kn ker4k3r ker4ku ker4kw ker4n3a ker4no ker3o4 ke3ros ker4sm ker5spe ker4spr ker4sta ker5ste. ker4sti 4k3erts 4kerva 4kerwt ke2s ke3s4p ke3sta kes5ten ke3sto ke5straa k2et 5ketel ke2t3j ke3to ke2t3r kets5te. ketting5s 4k3e2tu ket3w 3k2eu keviet5 ke4vl 4k1ex 2k3e2z 2k1f 2k3g 2k1h4 k3ho khoud5s 1ki 2ki2d 4kied kie4sp kie4s4t kie5ste kie4tj kieze4 2kië kijk5l k3ijs 4kijv 4k1ijz ki3lo kilo5v ki3na 4kinb 4k5indel kinds5te. 4kindu kin3en 5king kings5l 2k3inh kinie4 k3inko 4k1inr 2k1ins 2k3int 4k3inv ki3o ki2p3l ki5se ki3s4p kit4s kits5te k1j 2k3ja k3jew k3jo 2k3ju 4k5k4 kke5nei kker4s kkers5ten kke3st 1k2l4 5klac k3ladi kla2p1 k4las 5klas. 5klass k3last k3lat. k3latt 3k4lav 3k4led 5kledi 5kleed k5leer. 4k5leg 5klem 4k5len k3ler. 4klera k3lers k3les 5k4le4u k5lic 4klid k3lig 2k3lij 4klijs k4lim kli4me 3k4lin k5lob 4klod 3klok 5klok. k5loka k3loke k3lood 5kloof k3lope 5klos klots5te. 2k5loz 4kluc 4kluih 2k1m k3ma 1k2n4 4knam k4nap 3k4nar 5knec k5nem kni2 5knie. knip1 4k5niv 3knol k3note 2knum 1ko ko4bl k4oc 2k5oct 4k1oef 5koek koe4ket koers5p koes3 koe3tj koets5te. koge4 5ko5gr 3k4ok ko5ko kol2e2 kolen3 2kolm 5kolo ko4ly ko2m3a 4komg kom5p k3omsl kom4str 4komz konge4 k4oni k3ontb kon4t3j kon4t3r koo4 2k1oog kooi5tj koot3 koot4j ko3pa 4kopb 4k3opd ko1pe ko5pen. 4kopg 3ko5pi 5kopj ko2pl 2kops 4kopz 2kord kor5do 2k1org 2k3ork kors5te. kor4ta kor4t3o4 kor4tr ko3ru 3k4o4s3 4k3os. kos4j ko5sjere koso4 4koss kot4st kots5te. 4k1ov 4k3ox 2k3p kpi3s k4plam kpren4 1kr4 3kra k5raad kraads5 kra4b 4k5rad k5rand 2k1rea 2k3rec 4k3rede k4ree4 k5reep kreet3 k3ref k2reg 2k3rel 2k1ric k3rijk k3rijp krij4t krijt5j k4rit k5ritm kroet5j 2krol k4ron kron3t 5kroon krop3a kro4to 2krou k3ro5v 3k4ru k5rub 5kruis kru4l krul5a 2ks k3sal ks3alm ks3an ks3ap ks1ar ks3as ks2e2 k5sec ks3ed ks5ei. ks3ep k4serv ks3et kse3v ksges5t k4si k5sil ks1in k5sis k5sit ks1j k1sla ks3lab k4slan ks3le ks3li k4smo ks3na ks3no ks3nu kso4 ks3om k5song k2s3pa ks5pand k4spar k1spe k3spi ks3poo k5spor ks3pot ks3pru k3spu ks5s ks4t k1sta k5staan k5staat k1ste ks5tec k4st3ed k3sten ks5tent kste4r kster5a k4sterr ks3th k3sti k3sto ks5ton k5stoo k4stop k5stot ks5trek ks3tri k3stue kst5uit k1sy 4kt k1ta kt3aan k3taar ktaat5 kt3ac kt3art k3te kte2c kt3eco k4tex kt1h k5tij kt3im kt3in k5tit kt3j k1to kt3om kto4p kt4or kt5ord kt5org kt5ori kt3o4v k1tr kt3res k5troll ktro3s k3tu 1ku ku5be kui2f 2kuit ku5k ku5me 3k4u2n 4k5uni 5kuns ku2r ku3ra ku3re kur3s 3ku2s kut3 2kû 2kv k3ve kven4t3 5k4waal 2k3wac k2wad k1wag 5k2wal 5k2wam 3k4war k5ware 4kwat k3weer 2kweg k1wei 5kwel kwen4st kwens5te. 4k1wer 5k2wes1 kwes5tr 5kwets k2wie k3wijz k4wik 2kwil 2kwin k3wind 4k1wo ky3 2kz 4l. 2laan 4laand l3aanh laa5re laar5tj laat5sta l3abon 2lac la4ca 5lach. la4cha 5lache lach5te lacht4s l4aci la2d5a la4det 2ladj 4ladm la2d3o 4la2dr lad5s la2du 4ladv 3lae3 2laf la2fa la3fl lafo2 4l3afs la2g3a la4gent la2go lag3r lags4 lag5sa la2k3a la4ki la3kr 2lal 3lald lal4o lam4p3j lam4p5l lam4po4 lam4s3p l4an 4la2na lan3ac 3land lan4da land5aa lan4d5oo lan4d3r lands5te. la4n3ec lanel5 5lange. lang5l lang5sp lang5sta lan4k3a lan4k3l lank3w 4lann la4nor lan2s lans3l lan4st lan4t3j lap3ac la3pi lap3l lap3o4 la5pre la2p3u la3q lar3da 2larm 4larm. lar5st las3a4 lase4 la2si las3to 5lastt la3te la4t3he lat5j la4t3ro 4lats4 lat3sl 2lau 5lauf lau4st l2auw la3v lava3 la4vo 5law l4az 4lazi la4zij 2lb4 lber4t lbert5j lboot4 2l1c lce4l5 4ld ldaat5 l2d3ac ldak4 ld3alf l4da4r ld3arc ld3ari ld3art l2dau ld3eco ldeks5 l4d3e4z ldi3a ld5oef ld3oli l2d3om l2d3on ld3oog l4do4p ld3opi ld3ord ld1ov l3dr l5drade ld3ram ld5rang ld3rat ld1re l5dree ld3rij ld3roe ld3rol ld3rom ld3rui ld3sa ld3sl ld3sma ld5sp ld5ste l3du ld3uit ld3uu ld1w le2a le4ane le3at leba4l lecht5st lee4 leeg3 leege4 leeg5i 4leekh lee5l leem3 3leen 4leep leep3o lees5e lees5l lees5po 2leeu 2leff lega5s leg3ec leg3l le4go le5go. leg5s 3leidi 4leier 4leig lei5tj leit5s le4ko4 4leks lek5str 5leld le2le 5leli l3elp le4n3a4d len3a4k 3lene le4n3e4m len5kw le2no len3op len3sf len3sm 4l3en5th le5o 4lep. 3le1ra le4r3a4k le5rei le4r3e4v ler5g4 le3r4o le4ron ler4sl ler5spo 4l3erts le2s le4sa le3sc les5et le3s4h les3m le4sp le3spe 4l3essa les3t les4ta les5taa le5s4tel le3str le4s3u le4t4h le3tha let4i le5tin le4top le2t3r le3t4re let4st lets5te. le2t3u leu3ko leum3a leur4o leus4 leu5ste 5leuz leven4s levink5j 4lexc 4lexp l2fac l3f4ag lfa3s l2fau lfe4n l4f3end lf3ene l2fe2z lf3li l3f4lo lf3lu l4fo l5foe lf3o4l lf1op lf5ord lf5org l5fou l1fra l3fru lfs5ei lf4sl lfs3le lf2s3m lf4so lft4 lf5ta lf5tw lf3uu 2l1g l5gaar l4gap lge4n5a l3gla l3g4oe l3gog l3goo lg3s4 lgse5 4l1h 1li li3ag li3am licht5st 3lid 5lid. 5lidm lid3s4 lie4g3a lie4gr lie3ka lie4sp lie3s4t lie4to li3eu 3liè 3lift l4ig li3go lijk3a lij4m3a 4lijmv 5lijn 4lijp 3lij2s lijst5a 4lijt 4l3ijz li5kr lik5sp li4kw li3kwi lim4a li3mi 2limp lim4p3j lin4da 4linf 4l3inh li5ni lin4k3a 3linn l3inna 2linr 2l3ins lin4t3j l3inv 4linz li3ob li5om li5o5s4 li3ot li2pa li3pi li2p3l li5see 2liso l5isw li1t2h lit3r lit4sa lit4sl lit4st lits5te. lit5sten 2lix 4l1j2 lk3af l4k3ank lk3arm lk3art l3ke l4k3ei l4k3em lken5e lken4s l4k3ep l3ki lking4 lk3laa lk3lag l5klas l4k3lev l5klim l3ko l5koe lk3ont lkooi5 lk3opb l5kor l5kou l5kra l2kre lk3rep lk3res lk3rij l2k3ro lk2s lk4se lk4so lk3son lks3oo lks5taa lk3ste lks5tel lks5tr l4k3uu l3kw lk3wi l3ky 2l1l l5la lla3d lla3g4 lla5tr ll3eig lle3k ll4el lleo4 ller5on lle3s4m lle5th llevie5 l3l4i l3lo llo5f l5lon ll3sh 2lm l3maa lmaat5 lm3a4ca lm3af lma5ï l3mak lm3arc lm3art lma3s2 lm3au l3me l4med lm3edi l4m3ep lme2s lme5te l3mi l3mo l5mog lm3oli lm3or lmro4z lm5sc lm3sh lm3su 2l3n lni4s lo3a 2lobj lo4boo loe4d5a loed3r 4loeg loe4gr loen4st loens5te. 4loes l3oeu 5loev lo4faa lof5d2 lof4s4 log4 log5l lo3go 5logr log2s3 lo4k3ar lo2k3o2 lo4kr lo2ku 2lo2l lo3la l3oml lom4p3j lom4p3l l3omt l3omv 4lomz 3lon. 4lond 5long lon4gaa lon4g3o lon4gr lon3o 2lont lon4t3j 3look loo5pi 3loosh loot3e lo3pa 4lopb l3opd lo1pe 2l3oph 2l3opl lop4la 2lopn lo3p2r 4lopt 4l3opv 4l3opw 2lor 3l4or. lo3re 4l1org lo3ri l4o1r2o3 3l4ors lo3ru lo3spe lost4 los5to lo4s5tr lo5s2u lo2ta lot3a4l lo4tet lo2t3h lot3j lo4tof lot3r lou3s lo3v 2love 3lo5z 4lp l1pa l3paa lp3aan lp3a4g lp3am l3par l3pas l1pe lpe2n l2pex l3pi l5ping lp3ins lp3j l1pl l3p4la l4plam l1po lp3of l3pom lp3on lp3ope l3pos l3pot l1pr lp3ram 4l3r lraads5 lrus5 4ls l4saa ls1a2d ls3a2g l1sam ls3an l3sap ls3as l2sat ls4cor ls4cu ls3eco l4s3e2d l4sef l5sen l4s3e2p lsge4st l3s2hi l3si l4s3im l4sin ls3inj ls3ink ls3int ls4j ls5ja l3s4kel l3s2ki l1sl l3sla l2s4le ls5led ls5lee ls5leg ls5len l2s3li ls4lin l3slo ls4maak ls4med ls4mee l3smid ls3na l3sne l3sno ls3nor l3soc ls3of l3sol ls3op ls3o4r ls1ov l1sp l2spa ls3pac l3span ls3par ls4pe l3spi ls3pli l3spoo l4s5poot l3spor l2spr ls3pra l1st l3sta l4staf l4stak ls5tak. l3ste l4stek l4stev ls4ti l3sto l5straa ls5trak l5strat l3stu ls5ty l2su l3sur ls3us l3sy 4l1t lt4aa lt1ac l4tam l5tame l5t4an lt4han l4t3hi l2t3ho l3thu lto4l lt3oli l2t3o4v l3tr ltra3s lt3rug lt3sl lt3sp lts5te. l3tu lu4b1 lub5e lub5l lu1en 3lui. 5luia 5luid luids3 5luie. 2luit luk2s luks3t lu3na 3lunc 2l3u2ni lu3sta lu3ta lut3j lut4st luts5te. lu3wi lven5s lvera4 l1w 1ly ly5i ly3st 4lz lzooi5 4m. 1ma maas3 maat5st m3act 2m3adv ma5esto m3afl ma3fr 2m3afs 4m3afw m4ag ma3gl ma5go ma3gr maï4 ma5ka ma5ke 5ma3k4r ma3kw ma3l4a ma5lac ma4l5ent mal5st 5m4an. man3ac m3anal man5da man5do mand4s 5m4ann ma5no 5man2s man4se mans5ee man4so mans3p man4s3t mans5ta man4th mant4r ma5pa ma3pr ma3q m4a5ri mariet5 5m4ark mar3sh mar4s5t mar5ti ma1so ma3s4po 5mass ma4ste ma3str ma5ta 5mater mat5j ma4tom ma3tr mat4st mats5te. ma3v 4mb m5bl mboot4j mbo5st mb4r 2m1c 2m1d m5da mdi3a mdis5 m3do mdo3p m3dr m3dw 1me me1c me5de 5media 5mediu mee5g mee3k4r mee5las mee3lo mee5re mee5ri 5mees meest5al mee5stov mee5str m5eg. me3g2a mega5s m5egd m5egg m5egt me4i mei2n mei5tj m2el me4l4as mel5as. mel5dr mel4ko mel4kr 5melo mel3s4m me4mi 3men m4en. me3na men4as meng5ra men5k me5nor 4menq men4s5uu men4t3j ment3w me5nu me3p2j 2m3e2q me1ra me4r5aak me4r3a4k me4r4am mer5ante me4rap me3rau me4rav mer3ei 5merk mer4kl mer4kn mer4kw mer5oc me5rong me3roo 4m3eros me3rot mer4si mer4sl mers5m mers5ta me2ru4 m4es me3s4h me4s4l mes5li me5slo mes3m me3so me4sp mes3pa me5spe me5spot me5stel mesto4 mest5ov me3stu me5ta5n me3t4h 3meti me5tr mets5te. meve4 m3e4ven 2mex 3mé 3mè 3mê 2m1f mfa3t mf4l mf3li mf5lie m5fo 2m5g mger4 2m1h 1mi 3mid 4mid. 5midd mie5kl mie3st 4m3ijs 4m3ijz mi3kn 5mili mi3lo mimie4 m3imp mi5nar 2minf 5ming 4minh 2m5inr 2m3ins mi5nu 4m3inw m2is mis5f mi2s3i mi3s4la mi4st mi5stra mis5tro mi3t4a mi1tr mit4st mits5te. mit5sten 2m1j 2m3k2 mkaart5j 2m3l 2m1m 2m1n m5na 1mo 5mo. mo3a 5moda 5mode moed4s 2moef 5moei moers5t moe2s moes3p moes4te mog2 5moge mogen4s mo3gl 4mok 5mole 2moli mo4lie mol4m3a 4molt 3mom 4m3omv mond3r mo5no 5mons mon4so mon5ta 3mooi 2mop mo3pa m1ope m4opp mop4s mo3ra mo3r4e mo3ro mor4sp mor4st mors5te. 5mos mo5sc mo4s5l mo3sta mo3t2h mot3j mot3ol mot4st mots5te. 2m3oud 5mouw mou4wi mo3v m3ox 2m1p mp3ach m4p3af m5pan mp3arm mp5arts m4p3ec m5pen m4p3erv mp3ins m3pl mp3lam m5plan mp3leg mp3lei mp3lev mp3lie m4plu mp5olie m5pon mpon4g mp3ope mp2r mp3rec mp3red m5pres m4ps2 mp5sc m5p4se mp3sh mp5su 2m1r 2ms m3sam ms3ana ms3ap ms2c ms3co ms3cu ms2j m3sje m1sl m2sle ms3len ms3lie m3s2m ms3ma m1sn ms3nee mso4 m3sol ms3or m3s2p ms4t m3sta m1ste ms5tec m5stel m5sten m1sti m1sto ms5toc m4s5ton mst5s m3sy 2mt m1ta mte5re mtes4 mte5sta m1th m1to m3tr m1tu 1mu mu5da mue4 5muilde. 2muit 2muk mul3p mu2m3 mu3no munt3j mu3sa mus5ta 5mut mut3j muts2 muts5te 3muu 5muz 2mv mvari5 mve4 mvee3 mver3e 2m1w 1my my3e 2mz mze4 mzet5 4n. 1na 3na. 3naal 5n4aam 4n1aan 2naap n4aar. 4n3aard 5naars naars5tr naar5tj 5naast 5naat n3abd 5nabe 2nac na2ca nacee5t n2aci 3naco 4n3act na5d4a nad4e 3nade. 5n4a5den 3nades 3nadi 4n3adm na5dra 2n1adv 5nae n3aë 4n1af na3f4lu n2a3g4 na1h 3nai 3naï n2ake na3k4l na3kr n3alb 3n4ale 5nalen 4n3alf n3alm 2naly 4nalys 3nam 4namb name5st n4ami n3amp n3a2na n3ank 3nant 5nant. 5nante n5antenn nan4t3j 2nap nap3ac 3na3p4l na3p4r nap3s nap5st 2n1arb 5nares 2n3arg narie5t 2n1arm 3naro 4nars nar4st nars5te. nar5sten 4n1art nas2 3na3sa na1s4l na1sp na3sta na3stu n4at. 3n4ati nat5j 4n3atl na3to nats4 nat3sp 5nau. 5naus 2na3v 5naven 3navi 3nazif na4zij 2nb nbe5st nbe5t nbots5te. 2n1c n3ce nces4t n3che ncht2 nch5tr nch3u n5co 4nd n5da. nd3aan nd5aas nd3abo nd3act nd5adel nd3adr ndags5p nd3alf nd3alm n4d3ana n4dap n2dar nd3art n4das nd3ass nda3st n4dav n4d3a4z n3de n4d3edi n4d1ei nde5laa n4d3emm n5den. ndera4 nder5aal nder5al nde4r5an n4d5e4rec nder5in. nder5og nde4ten ndi3a ndie4tj n4dijs nd5ijs. n4d3ink ndi3o n3d2ji n5do. n5doc n4d5of nd3oli nd3omd n4don n5dona nd5ond n5dons nd3ont nd3oog nd3ope nd3opp nd3ov nd5rap nd3rat nd1re nd4rek n4dres nd3rot nd3rug nd3s4cu nd4sec nd5set nd3s4i nd3sjo nd4sm nd3sp nd4spo nd4spra nds5taal nd3su nd3uit n2d3u4r nd5ure n4d3uu nd1w n3dy 1ne 3ne. ne5ac ne3am nebe4s 3neck ne2cl ne4dit ne3do n3edu ne5dw nee4 4need nee5k neel5d neel3o 3neem 4n1een nee5ri nee5se neet3a neet5o neet3r neet5s 4n1eff ne3g2 ne4gel negen5en nege4re 4n1ei 5neien n5eier n2eig 5neigd 5nei5t ne4k3r ne2la 4nelem 4nelf 3nem 4n3emb 5n4eme 4n3e4mig 4n3emm 4n3emp ne2n 3n4en. 5nenb 5n4end. nen5do ne4n5enk ne4ni ne5nig nen5k4 nen1o4 5nenp nen5t4a ne5oc ne5ok ne5om neo5p ne5os ne5ot nep3ag ne3pe nepi3s ne1ra nera4d 3n2e5re n3erfe 2nerg ne4r3id ne3ros ner4sl ner4sp ner4st ners5te ner3u ne3ry 3nes ness5a ness5t ne3sta nes3te nes4tei ne5s4tek ne4ter net3on net4si ne2u 4neum ne3ums neu5ste 2nex 3né 2n3f 2ng ngaat5j n2g1a2d ng3af ng3ana n4ga4p n2gar nga5sl n3gav nge4ad n4g3een ngels5te. ng3emb n5gen nge4rap nge4ras n4giger n4gigs ng3ij n4gind ng3ink n4g3ins ng4l ng5lad ng5lam ng5lan ng5led ng5leu ng2li ng5lin ng5lop n3goe ng3of n3goï n2g1on ng5oor ng5op ng3ore ng3org n3got n3gr ng3rac ng3rad ng3rai n4gras ng5rass ng4red n4g4ri ng5rie ng3rij n5gron ng3rui ng2s ng4se ngs5lop ngs5lu ng4s5ne ngs5tak. ngs5take ngs5trek ng5stri ng3uit 4n3h nhek5 1ni n4i2d nie5kle ni3eri nie4s3p nie4tr 3nieu ni4g3ee nig3ra nij3f nij3k 2n3ijz ni5kr nik4s niks3p 3nil 3nim. 5nimf n3imp 2n3in. n3inb 2n1ind 2ninf ning3r 2n3inh n3inj 2ninr 2n1ins 2n1int 2n3inv ni3o ni4on. ni4one ni5or ni5o5s4 nip3l 3nis ni4sau ni4sel ni4s3ev ni3sfe ni2s3i ni4sl nis5n ni3sot ni5stel nis5to ni3t2h ni1tr nits4 n1j4 n3je njes4 nje5sp nje5st nje3t 4n1k nk3aan nk5aard nkaart5j nk3af n5k4am n4k3arb nkar5s n4k3asp n3kef nk3eff nk3emp n3ken nken4e nker5ku nk3id nk2j nk3lad nk3lod nk3luc nk3lus n2k3na n3kne n4ko4g nk3oge nkoot5 nk4ra n4krim nk3rol nk5se nk5si nk3sl nk3s4m nk3sn nk4s5o nk1sp nk1st n4kw nk3waa nk3wez nk3wi 2n3l 2n3m4 n3n n5n2e nnee5t nne3ne nnepo4 nne4p5ol nne5te nnet4j nn4i nning5r nnoot5 nno5v 3no. 1noc 1no3d 2noef noen5s noes3 noet5s n5offi n3o2ge n5ogi 1nogr 3noï no3kl no3k2w no2li 1nolo 1nom 4n3om. n2oma n3oml n1oms n3omv 2n3omw 2nomz 3n2on. 3n4onb 3nonc 4n5ond n4o5ni 4nont 3nood 4n5oof 4n1oog nooi5tj 3noot3 noot4j 3no3pa no4p3as 4n3opb no1pe n1opg n5opleidi no4poo no4por 2nops 2n3opz 2nord no3re 2n1org 1norm 4norr 3nors 3norz 1nos no3sf no3sn no3sp 1not 3nota not5a4p 5noti not3j not3r 3nou. no3v 3nova no4ve 3nox 3noz 2n1p npers5te. npi4s5 npoor4 npoort5j n3ps 2n3r nraads5l n5re n5ri 2ns ns3a4d n3sag n1sal ns3alp n1sam ns3an n3sanc n1sap n3s4cal n5scho ns4ci n4sco nsee5t n4sef nse4g ns5ege ns3eis ns5emp n3si ns3idi n2sin n5sing ns3inj ns3ink ns3int n1sjo n1sl n5sla. n3s4laa ns5laag n5slag ns5lap. ns5lapp n4sle n5slep ns4let n5sleu n5slib ns3lie n5s4liep n5slim n5slip ns5lot. ns3m ns5mac n3s4me n3smij n3smol n4smu n1sn n2sna n5sne ns3nod n4snoo n4snot n1so n2s3ob n2sof n3sol n2son ns3ong ns3onz ns4opp ns4or n2s3ou ns1ov n4s3paa ns3pad n1spe n5spee n5spel ns3per n4spet ns4pi ns1po ns3pol n4spot n1spr ns5q ns5s ns4t n1sta nst5aang nst5aans nst3a4g n3stal n3ste ns5tec n4st3ei n4s5teko ns5teks n5sten. ns5tent n5ster. ns5tes ns3the n1sti n3stig n4stijv n1sto nst5oef n4ston n3stor nst5rade n5stree ns5trekk ns5troe ns5trog nst5roos ns5ty ns3uil n3sy 2nt n3ta n5taal n4t5aard ntaar5tj n5tab nt3ach nt4act nt1ad nt3aga n4t3art nt4as n5t4at n3te n5tec n4t3ei nte4lo n5tem n5te2n nte5nach ntene5ten nte5rad nte4rof n3tè nt3ha n4tho n5thol n5tig nt3inw nt4jo n3to nt4og nt4ol n4t5oli n5ton nt4oo nt5oog n4top nt3opl nt3opm nt3opt n1tr nt3rec nt3rei nt3rel ntre4s nt5ribb nt5rij n5troos nt4rou nt3rus n5try nts3a nt5slu nt1sn nt4sno nt1sp nt4spr nts5pre nt1st nt5ste n3tu n4t3uit ntu4n n5twijf n5t4wis 3nu. 3nuc 3nue nu3en nu3et 4nuf 2nui 4n3uil nu2lo 3num nu2m3a 5numm nu2n 3nunc n3uni 2nu4r 3n4u5ri nu5ro 1nus nu4s3o nu3tr nut4st 4nuu 5nuut nuw5a nu2w3i 2nv nve5na 2n1w nx3 n3xe nxo4 1ny 4n3yi 4n3yo 2nz nzet5s 3ñ 4o. 4oa o3aa o2ad o3af o1ag o3ah o3ai o1al oa2m o1a2n oa4tiev o3au o3av o3ax 2o3b 4ob. obal4 obalt3 3obj 1o4bli ob5oor o4b5o4r 4obr 4oca ocaat5 5o2cea o3cha o1che o3chi o3cho o3chr ocke4 4o3co oco3a oco3s4 oc3t4 od5ac oda3g ode4m5ar ode4mo ode5re odes4 odi3a o5dru od5sc od5sei od3s4i od2sl ods5lam od5slan od3sli od5smak od4s3o od3spo od4spr ods4t od5sta od4ste ods5te. od5stek od5sten od3w o4e oe5an oe3as oe2d3a oeda4d oede4n oe2d3o2 oe4dr oed3re oed3ri oed3ro oe2d3u oed3w oe3e oe5er oe4f1a 1oefe oe2fi oe2fl oef3la oef5le oef3lo oe4f5o4 oe2f3r oege3l oeg5ij oeg1l oe4gou oeii4 oei3n oei5s4 oei5tj oei3tr oe4kaa oek5erk oeke4t oe2k3l oe4k3op oe4k3r oe2ku oek1w oe4lap oe4lar oel5dr oe4l3ei oe3lem oel5f oelo4 oe5loe oelo5p oel3sp oe4m3ac oem3o4 oen3al oe5n4e oen5gr oen3o oen4sn 2oep oep5ind oe4pl oe5plo oe4p3r oe3pra oe4ps oeps3e oe2p3u 4oer oe1ra oe4raa oer5aal oe4r3a4l oer4e oer5ei. oer5eie oero2 oe3roe oer3og oer5om oer4sl oer4sp oer4sta oers5tak oers5te. 4oes. oe3sfe oe3si oe4sli oe4s3o4 oes4ta oes4th oe3sto oe4taa oe2t3h oe5t4i oe2tj oe4t3o4 oe5toe oe4t3ra oet4s3p oet3w 2oë of3ar of3at o4fav of4d1a4 ofd3ei of2d3o of2d3r ofd3w of3l o4fli o4flo 4ofo of3om o3foo of3op o3for of3ox of1r o3f2ra of5se of4sl of5sla ofs3le of2sp of3spe ofs3pl of3spo ofs3pr ofs3tr ofs5tra 4oft of4tu oft3ur oft3uu of3ui og5ac oga4l og3al. og5de og3di oge4d oge5laa ogel5ei 2ogem o3ger oge4ro oger5on oge4s3t 2og5h 1ogig og1l og5ne og3op og3sp og3sta og4st5ei og3sto og4ston og4str ogs5tro og3ui o3gy 2o1h 3ohm 4oi oi3do oi1e oi3j oi5k o3ing oi3o4 oi3s4 oi5sc ois2p oist2 ois5tj o3ï 2o1j 2ok o3ka. o3kaa o4k3aas ok3ab ok3ag o3kal ok3ank o4k3a4z ok3ef o2k4l ok5let o4kli ok5lu o2k3n ok3o2l ok3op. ok3o4pe okos5 o2k3ou o2k3r ok4ra ok1sa ok3s4l ok3sn ok5spri ok1st4 oks5te. ok5sten ok4s5tr ok5te okter4s oku4 ok3ur ok3uu ok1w ok2wi o1la o3l4ab ol3ac o3lal ol3a2p ol3arm ola3s4m 4old ol3d4o ol3d2w o1le o3le. ole5g ol1ei ol3eks ol3emm o3len o5ler oleu2 ole3um ol3exa ol2fa olf3l ol3fr olf5sl ol2gl ol2g1o olg5rap ol4gre ol4g3ri ol2g3u o3lia o3lic o5lid o3lik o3lin o5ling ol3int o3lit ol3kaf ol5ke ol2kr olk4s olk2v ollie4 o3lo o5loc olo3k ol4om o4lop ol3op. ol3opp olo3s4t olo4ve ol4pra 4ols ol5se ol4s5h ol5si ol1sj ol3s4l ol3s4n ol3so ol3sp ol5ster 4o1lu ol3uit olu4r 4oma om2aa om1ac om1af o3man 4ome o4m3ef om3ela omen4s omen5ste. ome5ren omer5kl ome5sp ome5t om2i o4m3int 4omm 4omo omo5l omo3s om4p5ei 5omro om3sl om4ste. om3ui 3omz on1ac on4ag o4n3am on4an on3ap ona3th 2onc on4d3ac on5d4as on5der ond5ete on4d3id ond5ijs ond5om. on2dr ond3re ond3ro ond5sj ond5slo on3d4u on4dur o5ne. o3neb o2n1e2c on3ei on3erf on3erv one3st 4onet. on1e3v ong5aan ong5aap ong3ap 4ongen ong5le ong2r ongs4 ong5se ong3sp ong3st on5id o5nig on4k3ap onke5lap on3k2i on4k3lo on3kn on5kw onnes4 onne5st o4n3of ono3l on1on o2n1ov on3sc ons4e on5sei ons2f on3s4m on2s3n ons5op on3sor on1s2p ons4pe on3spl on1st on5sten on5str 4ont. on4taa 3ont1h on4tid 3ont1s4 ont5sp 3ontv 1ont3w on1ui on3ur o4o2 4oo. oo3c 4oo4d ood1a ood1e4 oo5de. ood1o ood1r ood3sl ood3sp 4oof oo3fi oo4g oog1a oog3e oo5gi oog1r oogs4 oog3sh oog3sl ook3a oo3ke ook5l ook3s4 ook5st oo4k5w oo4l ool5a2 oole2 ool3ed ool5f ool5g oo5lig ool3ij ool3k ool1o4 ool1u oom5a4 oo3me oom3i oom1o4 ooms5te. 4oon oon5a oon5du oon3in5 oon5k4 oon1o oon5ta oo4p1 oopa2 oop5ee oop3o4 oop3r oop4sp oor3a oord5aa oor5dop oor1e4 oor3g4 oor5i oor5k oor5m oor1o oor3sm oor5ste oor5sto 4oort oor4th oo4s oos3a oo5se oos5n oo4t oot1a oot3es oot3h oot5o oot3r oot4sl o1ö 2opa o4p3ac op3ad o4p3af o4p3ak op3am o3pan op3and op3at. op3att 3opbre 3opdr o3pe. op3ee op5eet op3ei o1pel o3pen. 3o4peni o5per. o4pera op3e4te op3e4v 4opf o1pi o5pic op3i2d opie5t op3ijz op3in. o5pina o5pis 4op1j op3l op5los 1opn o1po opoe3 op1of o5pog o5poi o5pol op3ond o5poni op3ont op3ord op3o4re op3o4v op1r op3ric o4pru o4ps op5s2c op5se op5si 3ops4l ops4m op3sma op3sn op3so op3sp op3sta op3su 2opt 4opt. op5tr op3ui o2p3u2n o1ra or3ach or3act or3adm or1af ora4g o4r3alg or3ana o5rate or4daa or4d3as or4denv or4do ord5ond ord3or ord3o4v or3dr or4drad ord3w o1re ore5ad 4orec oree4 ore4no or2gl o1ri o5ria 3orië o5rig. o5rigere o4r3ink or3ins ork2a or5k4e or3kl or5kn or3kw or4m3ac or4mas or4m3ei or4n3ac or3ni orno3s4 or3oe o3rol or1on or3ont or1oo or1o2p or3or o3ros or5ov 4orp or4p3ac orp4s5c or3sag or5sc or5se or3sli or3smi or3so or4son or3sp or5s4pa or5spu or4t3ak ort5een or4t5ijl or2to or4tof or4t3oo or4tred ort5sp ort5ste or1u o3ry orzet5 2os o4sac o5sas o3sau 4o3s2c osca4 o4sci o5s4cl os3cu o5sed os4el o5ser os3f os4fe o4sha o3shi os2ho o3si o4sj os5jer. o4sk os5ko os3l os5li4 o4s3m os4n os5no o3s2o os3pa os3per os1pi os4pir o4spr os4s5m o2s3t os4ta os5taal os5taar osta3c ost3a4g os5tan os5tar o3stas o3stat os5te. os4tem o5steroï os4th os4to os5toli os5tou ost3o4v os5tra. os5traa ost3re ost3ri o3stro os5trum os1tu o3sty o3su o5sy 4o1ta ot3aar ot1ac ot3af o3tag ot3akt ot3app ot3art otas4 o5tat o3te ot3e2d o5tee. o5tees o5teg ot3ei ote4lan o5ten o5ter oter5sp ote4st ote4t ot3eta o1th o2t1ho ot3hu o4tj otje5sp otli2 o1to ot3off ot3olv o5tom ot3ont ot3opm oto5po ot3opr o5t4or oto3s 2otr o1t4ro ot3ru ot5s4i ot2sl ot3sla ots3li ot3smo ot3sn ot3sp ot4s3pa ot4ste. ots5tek ot5sten ot4stu o1tu ot3ui o3tul ot5w 4ou. ou5a ou1c ou4d1a ou4des ou2do ou1e oue2t3 ou3k4 ou4ren ou5ren. ou5renn ou2r3o2 4ous ou3sa ous5c oust4 ou2ta out3h out1j ou2t3o out1r out5sp out5ste ouw3a ouw5do ouw5ins o2v 2o3va o5ve. 2o5vee 3o4verg over5sp over5ste o5ves 2ovi ovi5so 4ovl 4o3vo 4ovr ovu3 4ow o1wa o1we o5wen ow3h o1wi ow2n o3wo ow3r o4x oys4 ozet5 ö3l ö1p öpe1 ö4r ös4 ös5t ö5su 4p. 4paan paar5du paar5tj 5paas 3pab p3acc 2pach pacht5s p4aci 5pacu 3pad. pa4da 4padv pa3e 4p3afd 1pag pag2a pa4gen pa3gh p4a5gi 3pak pa2k3a 4p4ake pa4ki pa4k5l 2p3alb 3pale pal3f pa3li paling5s palle4 palm5ac pal4mo pa4m pa3na pa4n3a4d 5panee 5panel 4pank pan5sp pan4tr 1pap pa4pe4t 5papi pap3l pa3po pa3pr 4par. 3pa3ra p3arb pard4 par3da 3park par4ka par4k5l 3parl 4parm pa5ro 4parr par5ta 3parti part3j 3partn pa5ru paru5r 1pa4s3 pa5sa pas5c pa5se pa5so pas4th pas5to pas5tr pa5te 1path p3atl 3pa3tr pats5te. 2paut 5pauz pa4vl 5paz 2pb4 2p1c 2p3d2 pe4al 4peci p3e2co 3pectu 1ped pe3de pe3do p4ee4 3pee. 3peeë pee5li 4peen 5pees 3peg 1p4eil pei4l3a 4peis pek5ee pe2k3l pe2k3n pek5s p4el pe3l4aa pe4l3ak pel5dr pe3le pe4l3ee pe4l3e4t pe3l4i pe3l4or pel5si pel3so pel3sp 2p3emm pe3na pe4nak pe4nap pe4nau pe4naz p3ency pen5d4r penge5 pen5k 5penn pen3sa pen5sl pen3sm pen5sp pent4 pen5to 2p3epi pep3o pep5s p4er. pe1ra pera3s4 per4at 3perc pe4r5eg pe5req 1peri peri3s per1o pe3ron pe5ros 3pers per4sm per5sti per4str p2ert 3pes pe3sa 3pet. pe5ta 5pe5ter 3peti pe4t3ra pets5te petu5 3peuk 5peut 1pé 3pê 2p1f 2p1g pge5s 2p1h4 4p3ha 3p4hec p4his 4pho pi3am pi5an pi4at 2pid piek5la 5piep pie4r3o pie4s3p pie4tj pi2g5a pi3gl 3pij. pij3k pij5ke pij4li 3pijn 5pijp pij4p3a 2pijz pi4k3l pilo5g pi5nam 2pind 3pinda 3p4ing 5ping. pin4ga pin5gri 4p3inj pink3r pink5s 4pinr 2pins pin4ta pi5o pis5n pis5ta pi3th pit3j pit3r pit4sp 2p1ja pjes5 p3ji p1jo 2p1k pkaart5j p2l2 p3la. plaat5j 2p3lad pla3di 4p3lamp 4p3lang p4lant p3lap 1p4las 3p4lat pla4t3r 5p4lay p4lec plee5tj p3leid 3p4len p3lep pleu5ro p4lex 2p3lig 4plij p4lom p3lone p5lood plooi5tj p3loon p3luie 2p1m pmans5t 2p1n p3na 3pneum 3po. poda5 3poei poe2s3 poes5t poets5te. 3poez 3poë p2ofa 3pogi po5gr po2k3i2 po4kol 1pol po5l4o polo3p pol4s pols5te. 1pom 2p3oml 3ponds pon4sm pon4st pons5te. pon5ta 5pony poo3d poo5de 4poog. 3pool poo5len 4poor. poor4tj poot3 po4p3a 4popd 2pope pop5h 2p3org 2p3ork po3ro p4ort 5portef por4to por4t5ra po3ru 1pos po1sa po3sf po4taa po4t3as po5te potes5t pot1j pot3r 3poul po3v 4p3p p5pa p5pe ppe4l3o ppe5ni pper5ste ppie5k ppij5p p4ps pr4 p2ra 3pra. p5raad praat5j p5rad 3prakt 4pram p5rand 3prao 4p3rap p4rat p4rax 4preeku 1prem p3remm 3prent pren4t5j 3pres p3reso 3pret pre4t3j pret3r 4pric 4p3riek 4priet prie4t5j 1prij 3prik 3princ pring5s4 5prins 3p4rio 3p4riu 5priv 5p4rob 3p2roc 1p2rod p3roed 3proef proet5j 3proev 5p4rof 5p2rog 1proj pro3la 3prom p3rood prooi5 pro5pa p4roq 3pros pro5sc pro4s5t pro3t4a 3proto 3pro5v 4proy pru2t prut3o4 2ps p3sab ps3a2g p3sak ps3ar ps3ass 4pse ps3erk p4s3et p3si p4s3i2d p4sin p5sis p1sl ps3le ps2me ps5mi p4s3na ps3neu p4sof p3sol ps3opt pso4r p1sp ps2pl ps3ple p1s4t p3stat p3ste ps5tent ps5tes ps5th ps3tor ps5tron p3stu ps5ty 3psy 5psyc p3sys 4p1t pt3ad pt3alb p3te p2t1h p5ti pt3j p4t3o4v p3tr pt3ric 1p2u 3pub pu3ch pu3e puil3o pul4st 3pun 4pun. punt3j 3put. puter5in put1j pu2t3o put3r put4st puts5te. 2pv pvan4 pvari5 2p1w 1py1 2p5z 1q 5qe qu4 que4s 5quo 4r. r2aa 2raan 4raand 3raar 5raar. 4r3aard 5raars raar5tj 2rac ra4ca ra3ce 5racl rad4a 3radb ra5den ra3di 5radia 3radio 4radm 4r3adr 3rad3s 4radv 2rafd r4aff raf5ond ra3fra 3ragez ra5gi ra3g2n ra5go rag4s 3rais raket3 ra3k4l rak5r 4r3a2la ra4l3ee 4r3alf r3a4lim r3alt ra4man r5ameu ra3mi r2amp 4rana ran4dr ran4g3o ran4gr r5angst. ra4nim 4ranj ran4kl rank3w ran4sa ran4st ran4t3j r3antw ra3o 4rap. ra3po 4rappa rap5roe ra3q 2r3arb r4a5re 4rarit 2r1arm 4r3arr 2r1art ra5sei ra4sk ra4sl ra1so ra2sp ras3po rast5ri r4ati rat5j ra4tom ra4tra ra5tri rat3sp rat4st rats5te. ra3t4u 2rau 3raus r1aut 5ravr ra4zij rbe4ti r1c r3ce rces3 r3chi r3co 2r1d r4d3act rd3alk rda2m rd5ama r3dan r2d3ar rd3ei r4d5e4las rden5dr rde5o4 r4derva rde5s4t rdi3a rdi5o rd5l r3do r5doc r4d3ol rd5olie rd3ont rd3oos rdo3pe rdo3v rd3ras rd3res rd5roos rd2ru rd3sa rd3s4c rd3so rd1sp rds4t rd5sta rd5ste rd3su r3du rd2wi rd5wo 3re. 1reac re4ade 4reak re3amb 4re5at re3co 3recr rec5ta 3reda 3redd rede4s3 4re4diti 3redu re5dw ree4k 2r1een ree3n4e r5eenh ree2p reeps5 ree5r4ad 4reers reer5ste r3eerw ree4s ree5sh r4ef 4refb 2reff 3refl re3fu 1reg 4reg. 4regd rege5ne rege4s 4regg 3regi re3gl 4regt 4reie 4reil 4reind rei5tj 5reiz re4kap 5rekeni re2k3l re2k5n re4ko re4k3re rek3sp re4ku re1kw rel4di rel4d3o reld3r re4l3ei rel5k re4lu4r 3rem. re4mai remie5tj re5mo5v 2remp 3r4en. re2na re4naa ren5aar re5nade re3nal re4n3an ren3a4r r4end 5rendee r5endert re5ne. re4nel re5nen. ren5enk ren3e4p re5ner. ren5erf ren5erv 5renf 2r1eni 5r4enkl r4enn re4noc ren4og ren4opl re3nov 5r4enp 4renq ren4sl r4ento r3entw r5enveer re4of re4op4 re5pa 3repet re4pie 4req re3qua 4r1erf 2r1erg re3r2o rer4s 2r3ert 4r5erv 2rerw re3sa re5se re4sl res5le res3m re2s1p res3t re4tem re3t4h ret4i re4tik re5tin 2retn re4t3o4g re4t3oo rets5te. re2u reur5es reus4t reu5ste 3revis 3revo 2r3ex r4f3aa rf3act r2f3a4g rf3al r3fas r3fe r4f3eng r1fl r4f3lag rf3lev r2f3li rf3lus r4f3op r1fr r4f3re r5frea rf2s2 rf3sm rf3sp r4f3u4r rf3uu r1g r4g3ab rg3amb r4g3een rg3ei rg4eis rgel5dr r5gen. rge4ra rge5rap r4g3ins r5glas r3glo r4g3lu rg4o3v r5grij rg3rit r3g4ro rg1s4 rg2sm rg5so rg4s5pr r3h ri5abel ri4ag ri2ak ri5an rias4 ri4av ri4bl 4rice ri3co ridde4 ri3di ri4dol ri4doo rie5dr rie4k5ap rie5kl rie3kw rie4la riel5aa rie4lei rie4ro rie4ta riet3o ri1eu ri3fl ri3fr r4ig ri4gaa ri3gl 5rigste r4ijl 4r5ijl. r5ijld r5ijlt rij5o rij3pl rij3pr rij3sp rij5ster rij4str 4rijv ri4k5l rik5n ri3k4o ril5m ri3ma rim4pr 4r3inb 4rind ri5ne 4r5inf r4ing 4r5ingan r5ingeni ring5l 4r3inh ri4nit rin4k3l r3inko 4rinkt r3inl 4r3inna 4r1inr 4rins r3inst 4rint 4r1inv ri5on ri3o5s ri4sam ri3sc ri3sot ris5to rit3j rit3ov rit4st rits5te. rit5sten 3ritt r5j4 rjaars5 r5ka. rkaart5j rk3adr rk3af r2kah rk3ang r4k3art r2k3ei rke4n rken4s rker4sl r4k3erv rke4s rke5stree rke5strer rk5iep rk3ijv rk3inb r4k3ink rkjes5 rk3lag r4k3lat rk5leid r2klo rk3loo rk3lus r3kn r4kne r2kob rk3olm rk3omg rkoot5 rk3opg rk3ord rk5os. rk5oss rk2r r5k4ran rk4ri r5kris r5kron rk1s rk3s4f rk5si rks4p rk4t5e4v rkt3h rk4ti rkt3o rkt1r rk3uit r1kwa rk3waa rk5wat rk3wee r1kwi rk3win r3l rlaat5ste rle4g3r rlink4s rlinks5te rlofs5 rlui5t4 r1m rmaf4r r4m3art r2m3eb r2m5eg rme4r3a4 rmes3 rme4t3j rmet5st rm3inh rmi2s r3mo r5moe r4mop rm3opm rmors5te rmos5f rm3s4a rm1st rm3uit rmun4 2r1n r3na r5n4am r4n3ap rn3ars rnee5t r4n3ene rnes3 rne5te rne4t3j r2n5id r2nin r2n1on rn3oor r5noot rn3ops r5not rn3ove rns4 rn3sm rn3sp rn1st rn3sta rn3th rn5tj rn5to r3nu rnu5r ro1a ro5ac r4oc ro1ch ro3d4o 3roe. 4roef 4roeg roe4g3r 3roem roens4 roen5sm roep3l roe4rei roet4j 4roev 3roë r5offi r4ofi ro3fl roges5 1roï ro3kl 3rokm rok3sp r4ol. ro2l3a role5st rol3g2 2roli rol3ov ro5ma ro3mo 4romz r2on. ron3a4d 5r4onal ron4da ron4d3o ron4d3r ron4d5u r2one r2oni r2onk ron4ka r2onn r2o1no r2ons ron4ste rons5te. 4ron2t ront3j ront3r ro3nu 4ronv 3roof 2roog 4roon 2r1oor root5ste ro3pa ro4paa ro4pan 4ropb ro1pe ro5pee ro4pin ro3p4la 4ropn r4opo rop5rak rop3sh r4opte ro4pu ror5d ro3ro ro3sa ro5se ro3sf ro3sh r4o5si ro3sp ros4s5t ro5stel ros5tra ro5te ro3t2h rot3j ro5ton ro3tr rot4ste rots5te. r1oud 3rou5t4 ro3v ro4ve ro5veri 4roxi 3roy r1p r3pa rp3aan rp3adv rp3ank r5pee rp3eis rpi3s r2p3j rp4lo rp5lod rpoort5j r4p3o4v r4p3rec rp3ric rp4ro r3psa rp4si rp2sl rp3sli rp5spe rp4s5to 2r5r rre4l3u rren5s4 rre5o rreu2 rri5er. rrie4t rron5k rrot4j 4rs rs3a2d rs3a2g r3sal rs3alm rs3amb r3san rs3ana rs3ap rs3ar rs3as rs4asse rsa4te r5schi rs2cr r4s3eis rsek5ste rs4et rseve3 r2s3ez rs4fer rs4hal r3s2hi r3s4hoc rs3hot rs3ini rs3int r4sj4 r5sjac r5sjou r5sjt r3s4kat r1sl r4slan r5slec r5slep r5sleu r5slib rs4lie r5sling rs3lob rs5loep r4s3loo r5sluis rs4m r5smaak rs5maal rs5mak r3sme r3smij rs5mis r5smit rs5mu r1sn r2s3na rs3neu r2s3no r1so r5sol rs3ong r2sor rsorkes5 rs1ov r1sp r3spaa rs3pad r4s3par rs4pare r3spe r5spec r5spee r5spek rs4pene r4s3pet r5spit r5spoe r5spog r5spon r5spoo rs3pot r5spraa r4spu r5spul rs3put r1s4t r4s5taak rst5aang rs5tas r5stat r3ste r4s3te. r5ster. r5sterk rs5term r5sters r5stes rste5st r4steva r3sti r4stit r3sto rs5toma r4ston rst5ora r3str rs5trap r4st5red rs5trei r5stren rs5trog rst5roz r3sty r3su rs3usa r3sy 4rt r1ta r5ta. r4t3aan rt5aand rt5aanv r4t1ac rt1ad rt3af. rt3aff rt3am r5tans r2tar rt3art r4tau r2tav rt5c r5teco rt3eig rt3eil rte4lei rt5emb r5ten. rte5nach rte3no rte3ro rtes4 rte5sta r2t5e2v r4tha rt1he r3ther rt3hi r1tho rt3hol rt3hu rt3hy rt4ij rtij3k r4t3ini r4t3ink rt5jesc r3to rt3off r5tofo r5tok rt3om. rt3ond r4t3op r5tori r1tr r3tra rt4rap r4t3ras rt3rec r5treden. r3t4rek r4t3res rt3ri r4t3rol r2t4ru rt5ruk rt5rus rt4s5eco rt5sei rt2s3l rt3sle rts5li rt4slu rts5m rts5no rt4soo rt1sp rt4s3pr rts5ten r1tu rt3ui4t rt3w rt2wi 5rubr rude3r ru1e 4ruf ru2g ru4gr r5uitr ru2k 4ru3ke ruk3i rul3aa rul3ap ru2li ru4l3ij ru3lin rul5s r2um ru2mi 3run. r2und runet3 4r5u2ni ru3niv ru4r ru5ra ru5re. ru5res r2u4s rus3e rus5tr 4rut rut3j rut4st ruts5te. 4ruu ru3wa rvaat5 rval4st rvals5te. rvers5te. rves4 rve3sp rvloot5 r1w rwen4st rwens5te. r4wh rw2t3j r3x r3yu 4rz rzet5st 4s. 5sa. s1aa 1saag 5s2aai saai4s 3s2aal 3s4aat 1sab sa3bo 2s1ac sa2ca 3sacr s1adv 2s1af 3safe 3safo sa3fr s5agg s4a3gi 3sagn sa3go 3sah 3sai 3saj 2sak 3saks s1akt s2al 5sal. 3sa3la 3sald 5salh s3all 4salm sal5ma s3aln 3s4a3lo 3s2ame 5samm sam5p 4sa2na sa3nat s4anc s2a3ne s4ant san4t3j sa2p 3sap. sa3pa 2s3ape sa4pr sa5pro sa3ra s1arb 3sard sa2re s1arm saro4 sar3ol s4ars 4s1art sart5se 4sas. 3sasa sa3sc 3s4ast 1sat 3sa3te 5sati 2s3atl 2s1att s3aud 1saur 3s2aus s1aut 3sauz 1sax 4s3b s5ba s5be s5bo 1sc 2sca 4sce 5scena 5scè 3s4ch2 4sch. sch4a 5schak 5schap 4schau 5sche. s5chec 4schef 5schen 4scheq 5scher 5schev 5schew s2chi 4schir 5schol 5schoo 5schot sch5ta 2sci 4scl 2sco 3s4cola 3scoo 3scope 5scopi 3s4co5re 3scout 2scr 4scris 2scu 2scy 4s1d s5de s4dh sdi5a sdis5 s3do s5dr s3dw 3se 5se. se2a se3ak se3al sear4 se3au s4eb 4s3ech se3cr 5sect 4secz s4ee 4s5eed 5seei 4s1een s5eenh see4t see5ts 4seev s1eff se3ge 2s5e2go seg2r 4s3ei. 4s3eig s4ein 5sein. 5seine 2seis seis4t sei5tj 5seiz sek4st seks5ten se1kw s2el 5s4el. sel3ad se4l3a4g se4lak se4las se3le 4s3e4lek sel3el 4se4lem 4self se5ling 4s3elit sel5k 5selm selo4 5selp 5s4els sel3sp 5selt se2l3u s4em se4m3ac s5emm sem3oo s4en 5sen. se4n3a4g se5nan se4net 5sengr 5senh sen5k se4n3o 4s5enq sen5tw 5s4er. se1r4a ser5au 5se3r4e se4ree se5ren s4erg 5sergl s5ergo 5sergr ser4i se5rij 4s3ern se3ro se5rop ser2s sers3p ser3st sert5w se3ru s4es se5sc se3sf 2s5esk 5sess se4t se5ta 4s3ete se5ti se3tj set3r se5t4ra set5st 4s5etu set3w se3um se4ven 4s1ex 4sez se2ze 3sé 3sè 2s1f 4sfed s5fei 4sfi 4s5fr 4sfu sfu5m 4s5g sgue4 s1h s4ha. sha4g s5hal. 3shamp 4she sheid4 sheids5 s5hie 5s4hir sh3l 4shm s3hoe s3hoo 3s4hop s2hot s3hote 3show s5hul 1si 5si. 5s4ia si5ac si3am si5an 5sic sici4 si3co 3sie. 3sieë sie5fr sie5kl siep4 sies4 sie5sl sie3so sie3st sie5ta sie5to si5è si1f4 5s2ig si5go5 s3ijv 4s1ijz 5sile 4s5imper 3simu 5sina s3inb 4s3inc 4s1ind 2sinf sing4 3sing. s3inga s5ingeni sin3gl s3in5gr s3inh 4si2ni 4s3inko sin5kr 4s3inm s4inn 4sinr 2s1ins 2sint 4s5inv 4s3inz 3sir 5siro s3irr si4s sis3e4 sis5ee sis3i sis5tr 3sit si5to sito5v si3tr si4tru si5tu 3siu 3siz sj2 4sj. 3s4ja. 5sjab 4sj3d s1je 2s3je. s5jeb 3sjee 3s2jei 1sjer sje4ri s3jes 3sjew 3s4jez 4sj5k4 5sjof 4s3jon sj3s2 sjt4 s5ju 2s1k2 skaart5j s5kad s4kele s5ken 3s2kes sk4i 3s2ki. 3skied skie3s 3skië ski5sc s2k3j s3ko s5kre sk5ruim sk3ste 4sku s3k4w s2l4 3s4la. 5s4laan 5slaap 4s5laar 4slab s4lac 4s3lad 3s4lag 5slagm sla4me s5lamp. s5lampe 4s5land 3slang 3slap 5slape sla3pl 4s3las 2s3lat 3s4la5v 4slaw 3s4laz s3led 3s4lee. 5sleep 4s5leer s4leet slee5tj 4s3leg 2s5lei s5leng s3leni slen4st slens5te. 3slent s4lep 4s5ler s5les sle4t3j 3s4leu s5leug s5leus 5sleut 2s5lev s3li. 4s3lic 4slid 2slie s5lied s3lief 3s4lier s3lif s5lig 4s3lijf 5slijp 4s5lijs s4li4k sli2m slim5a s5lini 4slinn s4lip 4s3lit slo4b5 2s3loc 3s4loe 3slof 4s3log s3lol s3lood s5loon s5loos 5s4loot3 s3los 3slot slo4tr 4s3lou 4s5loz 4s5luc 1s4lui 4s5lui. 4sluid 5sluis. sluis4t slui5ste 5sluit 5sluiz 4slun 2s5lus 4s3ly s1m 4s5maat 3smad 3smak. 3smal 2s5man s5map s4mart 4s5mat 4s5mec 5smeden 3smeed 5s4meet 4s5mei 4smelo 4s5men 4s5mes3 5smid. smie2 smies5 s4mij s5min 5smok s3mon 5smuilden s5muile 5smuilt s2n4 s5nam 5s4nap s4nar 3snau 3s4nav 3s4ned 3snee snee5t s5neg 5s4nel 2s5nes 4s5net sneus4 sneu5st s5neuz s3nie 1s4nij s5nim 3s4nip 4s5niv 4snod 3s4noe s3nog 2snoo s4nor. s3norm sno5v 3snuf s4nui 2snum 3so. so4bl so1c s3oce 3s4o3d 1soe 2soef 3soep soes3 2s1off 3soft 2so2g 3so3ga s1oge so3gl 3sogy 5soi 3soï 3sok s2ol 5sol. so3la so3le so3lis 3so5l4o3 solo5v 5sols s2om 3s4om. 5somm 2s3oms s3omv 2somz 5s4on. 3sona so5nar s3onb 2s1ond 2song 3sonn 3so3no s4ons 2s1on4t3 4s3onv s3onw 3soo 4s5oog 4s3ook 4s3oor. s3oord 4s3oorl 5soort 2s1op 3s4op. 4s5ope so3phi s2o5po so3pr 3s4opra sop4re s2orb s3ord 2s1or3g 4s5ork sor4o so3ror sor4st 3s2ort sos4 so3sf s4ot s3oud sou2l sou3t 2sov s1ove 3so5z 4sp. sp4a 5spaak s3paal 5spaan 5spaat 2spad 2spak 5spake s4pan 3spann 4s5pap 5spar. s4pari 5sparr 2spas5 5spatt s3pau 5s4pea 4spectu 3s4pee speet3 4s3pei s4pek 5spell 4s3pen s5pen. spe4na s5pep 4sper s4per. s5peri s4perm 5s4perr 4spes s3pez s3pid 1s4pie spie5tj 4spijn 4spijp s5ping 5s2pio s3pis spi5sto 2s1p4l 4s5pla s4plet s2pli4 5splin 3split s3plo s3plu sp4o s2poe s3poes 4spoë 4spog 4spol 2s3pom s4pon. s4ponn s2poo s3pop 5s4pore s4pori 4s3pos 5spots 4spou 4sprakt 5spray s5pred 5sprei s4prek 4sprem 4spres 5spreu 5spriet 4s5prij 4sprik 4sprob 4sproc 4s5prod 4sprof 4sprog 5s4pron s4proo 4spros 4s3ps 4spt s2p4u 4spub 5s4pui 4spun s4pur 5spuw s4q 4s5r sraads5l sro5v 4s3s4 ssa1s2 s4sco s4s5cu s5se ssei3s sseo4 s5si s5sl s4spa s5spaa ss5pas s5su s5sy s2t 4st. 5staaf 5staan. 4staang 4staanw staart5j s4taat staat5j st3abo 2s4t1ac 3stad 5stads 2staf 5staf. sta4fo s4tag s4tak 5staki 4stakk st3akt 4s3tali 5stam. 5stamm 3stamp 3s4tand stan4s s4tap 4stapo s4t3arc 4stari 2stas stasie4 5statio 4stau st3aut s4tav 4stavo 4s5tax 4staz 2stb 2st5c 2std 4stea 5steak 4stec s5tech 5steco 3s4ted 4stedu 3steek 3steen 4steenh s5teer stee5t 5stein 5stekar 5stekk 5steldh ste4lee st5elem 3stell 5stem. 5stemd 5stemm 4stemo 4stent 4stenu ste5ran 4sterm ster5og st5e4ros 5sterren s5teru 4ste4s 4s4t3ex s4t3e2z 2stf 4stg 4sth s4tha st3hed st5heer st3hek s5them s3ther st1hi s4t1ho s4t1hu s4t3hy 2stia 2stib 4sticu s4t3id 5stiefe s5tiev 4stijd 3s4tijg 5s4tijl st3ijs 3stils s4tim st3imp sti5ni 4stins 4s5tint 4stite 2stiv st3ivo 4s4t1j 2stk 4stl 2stm 2stn 2stob 2stoc 4stoef 3stoel 5stoel. 5stoele 4stoen 4stoer 4stoes 4stoez 3s4tof st3o4ge 5s4tok s4tol sto5li 4stoma 4stomz s4tong 3s4too 4st3oog stoot5j s4top st3o5pe st5opto 4stora sto4rat 4stord sto5ri 4s5tos s4tov 2stp 1s4tr 4stra. straat5j 4st4rad 3stra4f 5straf. s5trag 4strai 4st3rec s5tref 4streg 4s3trei 5strel 3strep st3rif st5rijp s5tris 4s3troe s5troep st4rom 5strook 5stroom 4stroos st5roos. 4s5trou 4stroz 3stru 4strui. 5struik 4st1s4 st3sc st5se st3sf st3sk st3sl st3so st5sp st5st 2st5t2 1stu 4stub 4stuc 5s4tud 4stuin stui5tj st5uitk 5stuk 2s4tun st3uni stu4nie 4stus 2stv 2st3w 2s4ty 1styl s5typ 2stz 1su 5su. 5sua 5su4b1 suba4 sub5e su5bl 5suc 5sud 3sug 2sui 5suik 4s1uit 5suit. s5uitl 5suits. 5suk 3sul 5sum 4s1u2n 5sup 5surv su4s sus3e suur5 4s5v svaat5 svari5 sve4r sve5ri 4s1w s5wo s4y 3sy. 4syc 3syn sy4n3e 1sys5 4s5z 4t. 3taak. t4aal t5aando t3aank taan4st t3aanw t3aap taar5sp 4t3aas taat4st taats5ta 3tabe 3tabl 2tac ta2ca 3t4aci 4tad ta4de t3ader 5tado t3adr tad4s3 t3adve 2taf. 2t3afd 5ta3fe 4taff t3afha t4afr ta3fro 4t1afs 2t3afw 4tafz ta4gaa 5tagee 5ta5g4l tag3r 5taka 5takg 5takken ta3kl 5takn 5takp 5tak3r 5taks t2al ta3laa ta5lact 4talb 5tale. 5talent ta3li 5talig t5allia talm3a 4talt ta4mak 4tamb t3amba 5tamen tament5j 4tamp t3ampu 5tan. 4t3a2na ta3nag ta3nat tan4d3r tan4k5r ta3o t4ape 5tapi ta3pl 5tapo ta3q ta3ra 4t3arb 5tari 4t1arm ta2ro4 tar5sp tar5taa t3arti 3tarw 3tas 5tasa 5tasj 5taso ta3s2p ta3sta ta3str ta3sy 4tata 4tatio tat5j 4t3atl 3tatr 3tau 4taut 2t1avo 3tax t3a2z 4t3b tba2l 4t3c t4ch t5cha t5che t5chi t5chu 4t3d2 tdor5st tdo3v 1te 3tea te3akt 5tea4m 3tec 4t3echt 4teco te4dit t3edu tee2 teeds5te. tee4g 4teek tee4k3l teem1 4tee4n t5eenhe 3teer tee5rin tee4t 4t3eeu t4ef t5eff 3tefl 3teh 4t3eier 4teig tei4lo t4ein t5eind 5teit tei5tj 2t3eiw 5tekene 5tekens 4teker 4tekk 3teko te4k3om 3teks te3kw te4k3wi t4el tel5ant te4lap tel5da 4telec 5teleco t5elect tel5een 5telef 5teleg tel5ei. tel5eie tel5eit te5lel 5telev 5te5lex tel3f tel5k te4loe te4l3o4g tel5oog te4l3op telo4r tels4 4telse tel3so tel5su te4l3uu t4em 2temb 4temm te4mor tem3ov 5temper 5tempo t4en ten4ach ten3a4g te3nak te5nare te4nau tene2 ten3ed ten3el tene4t 3tenh ten5k4 te5nore 4t5enq ten5scr ten3sn ten3sp tensu4 tens5uu 3tent 5tenta 5tenten. ten5to t3entw 5tenu t2er teraads5 te4r5aak ter3a4b tera5ca te4rad tera4de te4r5af ter3ag te3ral te4ran ter3ap ter3as 5terec te4rei ter5eik te4rel te4rem te5ren. te4r5enk te4r5env 4t4erf. 4terfd ter3fr 4t4erft te4r5in. 3terj 4terk. 4terkt ter3k4w 3term 5term. 5termi ter5oc te3rod te3rof te3rog 5teron te5rons tero5pe tero4r te3ros 5terrei 5terreu 5terror ter4spr ter5ste. ter5ston 3tes te3s4ap tes3m te3so tes3ta te5stel tes5ten test5op test5ri test3u te3ta te5tr 4t3euv t4ev t5e4van teve4r 5tevl 3tevr 2tex 3tex. 4t3exe 4texp 1té tè3 4t3f 4t3g2 tgaat5 t5ge tge3la tger4 4th. 2t1ha t3haa t4haan t4had t3hak t5ham t4hans t3har t3hav 5thea t3heb 5thee. 4t3hei 4t3hel 3t2hen 5theo 1t2her 5the3ra 4t3here 3thes 3thet t4hin 4thm t1hoe t2hog t3hok t1hoo thoof5di 4t1hou t3houd 5thous 4t3hov 3thr 2thu t1hul 4thum t4hur 3ti 5ti. 5tia ti5ab ti5ae ti3ap 5tib 5tica 5tice 5tici 5ticu ti3d4 5tie. tie5d4 5tiefs tie3kn tie4kon ti3enc tien5st 5tiep 5ties tie5s4l tie5ta tie5to tie5tw ti1eu 5tieven ti3fe ti3fr ti2ga tig5aa 4tigm ti4gu4 tig3ur 5tijd tije4 tij5ka tij4kl 5tijn tij5p t3ijs. tij3st tij3t2 tij5tr tij5tw 4t1ijz ti3ko ti5kr t4il 4tils 5timm 5timo tina4d tin3as 4t3incu 4t1ind 4tinf tin4g3i ting4sa t3inh ti4nit 4t3inj t3inko 4t3inl t3inq 4tinr 4t3ins ti3nu 4t3inv 4tinw ti5om ti3o4p5 t2is ti5sa ti3s4j ti3sl ti3so ti4son ti3s4p ti3sta 5tite ti3th ti1t2r 5tivi ti4vo 1tj2 2t1ja t5jaa t5jee t5jek t3jen t5jet 4tjeu 2tjo t1jou 2tju 4t3k2 tkars3 4t3l t5le. 5tleb t5les tli4n 4t3m tmen4st tmens5te tmos5 4t3n tna4m3o tne4r tnes4 5to. toa2 to3ac to3ar to5bl 3toc 1toch 3tod to3da t4oe toe5d4 3toej toe5k 5toe3l4a toe5le 5toelic toemaat5 5toen to5ende toe5pl 3toer 5toeri 5toern 5toe1s4 toe5st toe3tj 3toets 5toets. 5toetse toets5te. 3toev 5toez to2f tof5ar tof5d to4fr tof3th 3togn 5togr 3toi to4kan tok3s t2ol to3la 5tolaa to5le 5tolet t3olf 2toli 5tolic to4lie tolk5s 5tolo tolp3r t3oly 4tom. 5tomaa tomaat5 t3oml to3mo tom4p3j 4t3om5s 5ton. 4tond 3t2one 5tonee 5to5nen to5ner 3t4ong 5tong. 3t4oni 5t4onn to3no 5tons ton3sk too4m toom3e 5toon t4op. top5art top3as to3pen to3pet to3pi 2topm to4po to5pos t4opp to4pu to5pus t3opva 5tor. to3ra to4r3ag t3ord to5rec 5torens 4t1org t5orga t4ori 3toria to4rië tor3k tor4m3a toro4 to4r5oli to3rom 5torr 3tors tors5te. to3r2u 3tos4 to3sa to1sl to1s2p tos5te 5tota to3tr 2t3oud 3tour tou4r3e to3v tove5na to4vens 4toverg to3w4 4t3p4 tpe4t3 tpi3s tr4 3tra. 4t3raad 5tracé 5trafo. 3trag 4tragez 3t4rai 5train 5traka t3rake 3trakt 3trans 5transa 5trap. 5trau 4t3raz 3t4re. 4trea 2trec 5tred. 4treda t5redes 4tredu 3tref 4t5reg 4t3reis 4treiz 4trel t3rese t3resu tre2t3 t4reu t3rib. 5tribu 5trico trie5ta trig2 2trij 5t4ril tri5ni 5t4rio4 t3risi t3rit. 5t4riti 5trody t3roed t3roes 5trofy 3trog t4roï 5troj 4trol. 5trola 5trolo 5tromm 5tron. 5trona t5rond 3trone 5tronn 5trono 5trons tront5j t3rood 5troon t4roos tro5pi t4ros 5trotu 3trou 4t5rout tro5v 5truc. 5truf 4trug 5trui. 5truie t3ruim trui5t4 t3ruk t4rum 4ts ts3a2d tsa4g ts1am t3sap ts3as tse4d ts5een t4s3ei ts5eind t4s5ene t4s3eng t4s3erg ts5erge t4s3e2v t2sij t4s3ink ts3int ts2j ts3ja t3sjen 3tsji t1sl ts4laa t3slac t5slag. ts3lam t2s3le t5slib t5sloe t3s4lu ts2me ts4moe ts3neu ts4no ts5nor ts5not ts3nu ts3ob tso2l ts3oli ts3om ts1on ts4opp ts1o4r ts1ov ts3pad t3span t5spec t4s3pet t3spi t4s3pil t3spoe t3spoo t5s4por ts3pot t4spro ts4pru ts5q ts5s t3sta t4staak t4s5tank ts5tant t4star t4stas t3ste t5sted t5stee ts5teko t5stell t5stels t5stem t5ster. t4sterr t5sters t5s4tes. t5steu ts3th t1s4ti t3stij t5stijg t5stil ts5tin ts5t4j t1sto ts5toep ts5tong t4store ts5trad ts5trei t3stri ts5troe ts5ty t4su4 ts3ur ts3us ts3uu t1sy 4t3t t5t4a t5te tte5loe tte5l4op tte2n tten4t5j tte5ri t5tlet tt3oog ttop2 t5t4r t5tum tt3uu 3tua 3tub 3tuch 3tu3e 5tueu tu3és 3tuig 5tuin 4tuip 2tuit tuit4j 4tuk tu4k3i tul5pi t4um 5tune 5tunn tu1o 5turb tu3ri 3tu4s3 tut3j tuurs5la tu3wa 4tv tvaat5 t3ve 4t1w 3t4wijf t2win 1ty1 3typ tys4 4tz t3za t3zi t5zw u1a u3ac u3an ua5ne ua3p u5ar. uar5t ua3sa uat4 2u2b ub3ac ube4li ub5em u5bi u3bo ub5or 4uc u1che ucht5sl uc4ki ucle3 uc4t3a uc4tin u1d uda2 u5da. ud5am ud3ei ud3ess u4de4z ud3eze udi4o udi5ologe udi3om udoe2 ud3ond ud3oo ud3ov u4d1r uds5lo uds4m uds5ma ud3sme ud3smi ud1st ud4sta uds5tak ud4sti ud1w u3ec ue2co u1ee4 u3ef u3ei u1el u4ene u1er uer3il ue3st u1eu u5eul u3ez u3è u4f3an u1fl u1f4r uf2s u5ga ug4da2 ug4der ug2do ug4dr uge4l5o ug3ij ug1l u2go ug3or u2g1r ug5sce ug4sec ugs4p ugs5pa ug1s4t ugs5tra u1h u2i ui5ac ui2d3a ui2d1o uid4s uid3sp uid5spre uid5ste. uid3u ui3e uien4t ui2fa uif1l uif5r ui2fu 4uig ui4g5aa uig1l ui2g3o ui4g3r ui4gu 4uik ui2k3a ui4k3l ui2ko ui2ku ui2la uil5aa ui4l3em uil5m ui4l3og ui4loo uil3ov 4uim ui2m3a ui3mag ui4n1a uin5g ui2no uin5og uin3or uin4s5lo uin5to ui2p3l ui4p3o4 ui2p3r 4uis ui2s3a uis5c ui4sl ui5slu uis5p ui4st ui4t3a4 uit5aa uit5al ui5tar 1uitg uit1j 3uitl ui2t1o 1uit5r uit3sl uit3sn uit5sp uits5te. 3uitw 3uitz ui3v 4u3j 2uk u2k3al uk3as ukkers5 u2k3l u3klas u2k3n u2k3o u3koc uko2p uk4o3pl u4k3r uk3s2m uk3spa uk3spl uk4sti uk1w u1la ul3ac ulam4 ula4p ul4d3a uld5erk ul5dop ul4d3u u1le ule5sp ul3fl ul5fo ul3fr ul3in. u5ling ul3inn ul3k2a ul5ke ul2k3l u1lo ul3o2p u3los ul2pa ulp3ac ul4pi ul2p3l ul2po ul4p3r ul3sa ul3so ul2s3p uls5te. uls5tel u3lu um3af um3ar 3umda 2ume umee4 umes4 ume3st um3om um3op um3so um3st u2m3ui un3ac un2c unch3r un4dra und4s unds5ta und5ste une4t un3g 1univ un4k3r un4o uno3g un5o2p unst3a un4ste. unst3o un4st5r unst5ui un4tag unt5een un2tj un4t5o4 unt3s4m un4t3u u3ol u3on u3oo u1or uo3ru u3os uota3 4up u1pa u1pe upe3k upe4ro uper5st u3ph u3pi u1pl u4p3lei u1po u3pol up3om up3op u1pr up4tr u1ra ur3aan ur1ac ur3ada ur3adv u2r3a4r uras3 u4r3a2z urd4o u1r2e ur3ech ur3een uree5s ure5lu urelu5r u4rem ur3emb ure4n u3res ur3ess ure3st ur3eta 4urf ur2fa ur3gi u1ri uri4gl ur3ijz ur3ind ur3int 4urk urken5s ur4kie ur3k4l urk4s5t u1ro ur5opb ur3or uro5s ur5pr ur4serv ur4s3ev ur3s4fe ur2sl urs5laa urs5li ur4s5m ur2sn ur4sp urs5pa ur5spel ur5spor urs5take urs5th ur4sti urs5tik ur3ta ur4tro ur5troe u3ru ur3ui 4urv u1r4y 4usaa us3ad us3a2m us1ap u4sc u5s2cr use5tj u5sie u4sj u4s5l u4sm u2s5n uso2 us3oï us3os u2s3p us5pi us5pu us4ta us5tag ust3al u2s3te us4t3ei u4sti ust3oo us5tra. us5tre. us5tro us5tru ustu4 ust3ur ust3uu u1ta ut3aan utaar5 ut1ac ut3af u3tan uta3s4 ut5c u4t3ees u4tek ut3eks ut3em ut5emm uter5an ut3ex ut2h ut3ho u2tj u1to uto5f ut3oog uto3pe utop4l uto5po utop4r uto5s ut3saa ut3s2c uts5eng uts2m ut1sn ut3sp ut4spa ut4spo ut2st uts5tak ut4ste. ut5sten ut3str ut5su utt4 u1tu ut5w u4u4 uur3a4 uur3e4 uur5i uur3k uur1o2 uur5ste uur5sti 4uut uut3a uut3r uvel4s uve5na uw1a u3wag uw3ar uw5art u1we uw3ec uwe5d uw3een u2w3ei uwe4nen uwes4 u1wi u2w3ij uw5ijz u4wind u3wing u4wins uw3inz uw1o u3woe uwo4ge uw1r uw3u uxa3 u3ya 4uz uze3t4 uzie2 ût3s4 1ü ü4b ü1n ü3ri üs3l 1v2 2v. vaar4ta vaart5r va3de va3g4 va2ki va4kl va2ko va2l3a val5m va3lo va4loe val5si val4s5p vals5tek valu5 va2n van3ac vand4 vang3a van4gr va3no va4noc va1p va3re va5se va3s4o vast3r va3su va3te va2t3h vat5j va3z v4b 4v3c v4e 3ve. 5veb vee4l veel5e vee3p4 vees4 ve3g4h vei3s4 vei5tj 3vek 5vel ve4l3a4g vel4d3o ve3le vel3k 5vem vem4a ve4na ve5nare 5vend ven5k ve2n3o 2venr ven4s3e ven4sl vens5lan vens5lo ven4sp vens5taak vens5take vens5tek ven4s3u4 ve2r ver1a ver5aas ve4rad vera4g ve4rand ver5do ve3rec ver3ed ve3reg ve3rei ver5eis ve5ren. ve5rend ver3e4t ver5ijd ver5ijl ver5ijs ve5ring ver5k4 ver3o ve3rom vero5v ver5p ver5spe ver5sta ver5sto ver5tw ver1u ve3ry ve2s3 ves5ti ve2tj ve2to4 vet3og vet3oo ve3tor ve2t3r vet4roe vet5ste 5ve5z 3vi 4vicepa vid5st vie4r3a vie4s3 vies5n vie4tj vi3eu vijf5 vik4s vil4t3j ving4 vings3 vi3o vi5om vi4s3an vi1so vis5ot vis5p vi4st vis5tr vi1tr v3j vje4 vjet1 3vl v3lar vlei3s4 vlie4s5 vlot5s v3lov 5vo. 3voe voe4t3a voe4t3r voet5sp 3vog voge4 3voi vo2le vol4g3a vol4gra vo2li vol3ij vol5p von4det vond5u 3voo voo5d vooi5t voorn4 voor5na vo3ra vorm3a vors5te. vor5sten vos3 3vot vot3j 3vou vous5 3v4r2 vrei5 vrie4s vrij5k4 vrijs4 vrij5ste v3t vues4 vu2l vul5p vuur5s vy3 2w. waad3 w2aar waar5e waar5ste wa4b3 wa2ba wa5bl w2ad wa3dr w4ag wa2la wa3lan 4wam wan4d5r wan4gr wang5sl wa2n1o wan3s4 3wap w4ar w5arc 5ward war4st wars5te wart3j war4to wa2si wa4s5l wa4s5p was5tr 1wate wat5j wa3tr 3way 2wb w1c 2w1d w4doo wd3oom we2a 2we2c 3wed wede4 we2d3i we4d3r wee4ki wee4k3r wee3lo wee3s4t wee5ste 3weg we4g1a we4gerv weg3l we2g3o we4g5r wei3s wei5tj we4k3r we4le2 4welem we3li we2lo wel3s we2m wem3a we3me we2n wena4 wen3ad we3ne4 we4nem we5nen. wen5enk we3ni wen4k3a wen3o wen5to wer2f 4werg wer4ka wer4k5l wer4kn wer4k3o wer4k3r werk5ru wer4k3u4 wer4k3w wer4p3a wer4p3l wer4pr wer4s wer5ste we2s3 we3spo wes4t5o 3wet. we2th we2t3j wet4st we2t3u 2wex wezen4s5 2w1f w1g w1h wie4la wie4t w4ij 3wijd wij4ka wij4s wijs3l wijs3p wijs5ta wi4k 3wil wind3a win4d3r w4ing 2winr win2s winst5aa winst5r wi4t3h wit3j wi2t3o4 wit3r w1j 2w1k 2w1l 4w1m 2wn wn3ac w3ne w3ni w3no w3ob w2oe woes3 woest5a wo4l wol3a wolf4s5 woon5sf woor4d5r wor4g3e w1p wren4st wrens5te. 2ws ws3a2 w3sc w1sl w2s3le w3som w3sp ws2pl w4spr w5spra w1s4t w4stij 2wt wtes3 wtje5sp w1to w1tr wu2 wva2 w1w xaf4 xa3g xamen5t xan3 xan5t x1c x4e xen4d xe3ro x1f x1h xie4t xi3g xi5o xi3sta xi3sto xi4t3i x3l x1m xo3no x4op xo3s4 x1p xpre2 xpres5 x3r x3so x3sp x1t x2tak xtie2 x3w xy3 y1a ya3s4 ya4s5p y3at yba2l3 yber4t3 y1c ycho3 y3co y1d4 ydi3a y5dr ydro3 y1e yes3 y3és y3è y1f y1g ygu2 y1h y1i y4in y5is yksge4 y3la yl3al y3le y4l3et y3lo ylo3l ym2f5l ym5pa y3na yn3er y3no yn1t y1o y3on y3os yo3t y1p y3p4h ypo3 ypot4 yp3s yp5si y1r y3r4e y5ri ys3 y1s4a y3s4c y5s4e yse5t y3s4f y3s4h ys4i y3s4o y3s4p ys5pl ys4ta ys5tr y3sy y1t yt3hu yto3 y2tof ytop4 yu5a y3ui y3u2r yvari5 y1w4 1z 4z. zaar5t za3f2 zags4t za2k3a zak3r zan2d zand5a4 zan3di zan4dr zang3s za3po za3s4 4zb 4zc 4zd z4e zee3k zeel5d zee3r4o zeero5v zeer5s zee3s4 ze5ge zeg4sl zei3sp ze5k zel5dr ze3lem zel2f1 zel4so zen4d3a ze4nin zen5k zen3o4 zen4og ze3non ze4r3a ze3ro zer2s zer4s5e ze4s3 ze5sch zes5e zes5l ze5ste ze2t3a ze2t3h ze4ti ze2t3j ze2t3r zeve2 zeven3 4zf 4zg 2z3h z2i ziek3l zie4k3o ziek3w ziel4s zie5sl 3zif zi2g5a zij5kl zij3po zij5s4 zik2w zi4n3a4 zings3 zin4k3l zin4s zins3t zins5ta zin5str zi3o5 zipi3 zi4t zit3e zit3j zit3u4 4z3k 4z3l 4zm zodi5 zoet3j zoet5ste zo3f2 zoi4 zo5ie zo3la zome4 zo2na zon3sf zon5ta zooi5tj zo1p zor4g3a zor4gl zor4gr zo2t zot3h zo3tr zo3v 4z3p 4z3r 2zs 4z5t zui4d3i zui4dr zus3 2zv z4w zwets5te. 5zy 2z3z zz3in zz3or z4z5w}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-deo.lua0000644000175000017500000031461212161703335025020 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="deo", ["source"]="hyph-de-1901", ["texcomment"]="% German hyphenation patterns (traditional orthography)\ % \ % (more info about the licence to be added later)\ % \ % dehypht-x-2013-05-26.pat\ % \ % \\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2013-05-26 (WL)}\ % \ % TeX-Trennmuster für die traditionelle deutsche Rechtschreibung\ %\ %\ % Copyright (C) 2008, 2009, 2011, 2012, 2013 Werner Lemberg \ %\ % This program can be redistributed and/or modified under the terms\ % of the LaTeX Project Public License Distributed from CTAN\ % archives in directory macros/latex/base/lppl.txt; either\ % version 1 of the License, or any later version.\ %\ %\ % The word list is available from\ %\ % http://repo.or.cz/w/wortliste.git?a=commit;h=6199aa4827709d9995ac9a34ddc6551f1ba1eb6e\ %\ % The used patgen parameters are\ %\ % 1 1 | 2 5 | 1 1 1\ % 2 2 | 2 5 | 1 2 1\ % 3 3 | 2 6 | 1 1 1\ % 4 4 | 2 6 | 1 4 1\ % 5 5 | 2 7 | 1 1 1\ % 6 6 | 2 7 | 1 6 1\ % 7 7 | 2 13 | 1 4 1\ % 8 8 | 2 13 | 1 8 1\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíñóôöü", ["data"]=".ab1a .ab3l .abo2 .ab3ol .ab1or .ack2 .ag2a .ag4r .ag2u .ai2s .akt2a .al2e .al5l4en .al4tei .alt3s .ampe4 .amt4s1 .an3d2 .anden6k .and4ri .ang2 .an3gli .ang4s2 .angst3 .an3s .an4si. .ans2p .an4tag .an3th .an3z2 .aos4 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .ar6t5erh .as6sest .as2t .ata1 .at4h .au3d .au4f3 .aufs2 .au2s1 .ausch3 .au6stes .ax2 .äm3 .är6schl .ät2s .äu3 .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .bus5sen .bu7sser. .ch2 .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .derma3 .dermas6 .de3sk .dien2 .do2mo .do1pe .dorf1 .dü1b .ebe2r1 .ehe1i .ei3e2 .ei4na .einbus6 .einen6g .ei2sp .ei4s1t .ei2tr .eke2 .el2bi .em3m2 .en1 .en4d3er .en5der. .en2d3r .en2gl .enn2 .en2t3 .epi1 .ep3p .er8brecht .er2bu .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .ers2 .er8stein .erster6 .er8sterb .er8stritt. .er8stritten. .er4zen4 .esel4s .es3p .es2st .es2t .est4e .est2h .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fe4sta .fi4le. .fi4len .fi2s .flö8s7se. .flö8s7sen. .flö8sses .fs4 .fu2sc .ga2t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .ge3r2a .ge3r2e .ge3s2 .get4 .ge3u .grif8fes .guss1 .haft3s .hal2s .hau2t1 .he2 .her3an .he3ri .he6r5inn .ho4met .ia2 .il3 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ken6num .ker3s .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4ve. .lo4g3in .lo3ver .lö4ss .lös3se .lu4str .ma3d .ma3la .mal4e .ma4str .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi2t .mm2 .näs5c .ni2e .nob4 .no2c .no2s .no4th .nul2 .nus2 .ob1a .obe2 .ohr5s .om2a .oper4 .or2a .ort2 .orts3e .ort4st .os5t6alg .oste2 .ost5end .osten8de .oste6re .ost3r .ozo4 .öl3l .pa4r1e .par3t4h .pe4c .pe4ste .pf4 .ph2 .poka2 .po4str .ps2 .rabe4 .ra3me .ra4sp .ra4s3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .ri2as .rich5te .ro4a .ro3m4a .rö2s1c .ru5s6ses .rü1b .rücker6 .rü4ss .sali1 .sas2 .sa5sse .säs4 .sä5ss .sch4 .scho7s8se. .scho7s8ses. .sen3s .ser2u .se2t1 .sha2 .si2te .ski1e .spas4 .spä5s4 .spiege8lei .st6 .sto4re .stras4 .sucher6 .tan4k3l .ta2to .te2e .te2f .te3no .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .to4nin .to4pl .to2w .tras3 .tra4ss .tri3e4s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .une4 .un3g .uni2t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .weg5s .wei4ta .wi4e .wor2 .wort5en6 .xe3 .ya4l .zeit3s .zel4la4 .zelle4 .zel6lei .zi2e .zin4st .zol2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k aar5sc aas1t aa2th aa2t3r aat4s1 2a3au a1ä a1b 2aba ab1auf ab1ä ab2äu 1abd ab1eb abe1e ab1eil 2abel abe2la a3beri ab1er2k ab1er2r ab1er2z ab3esse abes2t ab1eß 2abet 2abew 1abf 3abfi 1abg 1abh 2abi a3bil ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu abma3s 1abn a2bo. ab2of 1a2bon 2abor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abs4t2 2abst. ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in 2ack. ackmu4 ackmus3 ack2se ack3sl ack3sta4 a1cl a3co acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag adai4 ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ades2 ade3sp ades6s 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3sz ad2t1 adta2 2adu 2a1e1 ae2b ae2d ae2i a2ek a2ela a2ele ae2o3 ae2p 3a2er2o ae4sc a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r aft5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1am ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ages5s ag3esse age6stem ag3gl 3aggr 3a2git 2a2gl ag4la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3sah ag4sam ag3sc ags3p ag6spo ag4sti ag2s1tr 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh a1h2i ahin3 ahl3a4 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1o2s a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr4tri 2ahs ah2ta aht3h ah2t5r aht1s a1hu ah1w a1hy ai3a4 aian3 aid4s aids1t ai1e2 aif4 ai1fr ai3g4 a3ik. ai3ke ai3k4r ai2lo aim2o ain4a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e aiss2 ais3sen ais5st ait4 a3iv. a3ivl a3ivs a1j ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr ak3rau 3akro3 2aks ak3sh 2akta 2aktb ak3te ak4tei 2aktik ak2t3r ak3t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2a5la. al1ab ala5ch2 al1af ala2g al1age a3lal al1am alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala2s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 1algo 2ali ali4ene al2imb ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 al2l1ab alla3d al2lan al2l3a4r al6later al2län al3läu al4lec alle4gi al4leh al5lein al3lend all5erfa al3les alle3se al2leu 1allgä alli5er. alli7ers. al2lob al2lo2c al2lo2k al4lo2s al2lö2 all3öse al2luf allu4s al2lü4s al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1ope al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al2sum al3sun al4tak al3tar alt3eig al4t3erf alt1op al2tö al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä am2e 2ame. a2meb 2amel am4e2n1 amer2a am3erf a2meri ame3ru a4mesh a3met a2mew a3mi. a3mie 2a3mir a3mis ami3t2a ami3ti 2aml 2amm. am2ma2c 2ammal amma4n am2mar am2mas amma4sc am2maß am4ma4te am2mä ammen8ge. am2min am2mit 2amml am4mod 2ammt ammu2 amm3unt am4mü a2mö amp2fa2 am3pr 2ams am4schl 1amt. am2t1a am2t1ä am2tel am4t3ern am2tö am2t3r am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2anas an4at an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande4sc an2dex an4drau an2d3rü and4sas and6spas and6s5paß and2su 2andu and1ur 2ane an3ec a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi anft3s an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang3sc ang6s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl anma3s2 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 1anr 1an3s2ä 1ansc ans2en an2seu 2ansh 2ansk an3skr an3s1pa 1anspr ans2te an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr 2anto anton4 3antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i4 a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2a3pa 2ape a2pef a2pé a2pf ap2fa a3pfl a3phä a2ph3t 2ap3l ap4la ap2n a2pot ap2pf 3appl 2apr 3apri ap2str 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3ra3li 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein 4arem a3ren 4aren. aren4se are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2a3ri ar2ia ari3e4n ari3erd ari3erg ari5ers. ar1im arin3it a4r1int a4rinw ar2kal ark3amt ar2k1ar ark3aue ar2kl ar4k3lag ar2kor ar4k3ri ark3sa ark3she ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arp 2arr ar2r3ad ar2rek arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar3t2e artel6li6 ar2the artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as2ad as1ala asas2 asa3sse as3au asau2s1 a2sca a4schec asch3la a2schm a3schu 4a3s2e a4seb as3e2m a5s4es a4sex 4ash a4s3ha as4hi asin2g 4a5sis asi4st a3skop a4s3l a4sn a1so1 as1o2f a3sol as1or as1p a4s2ph as2pi a4spl as2po a1spu as3s2a ass2e as2s3ei as3sel as3ser asserma6 as3s2i as2s1p as4st ass1ti ass1to as5str as5stu 2asta a4stec a4s3tep as2ter a4stese 2astr as4trau a4strä ast3räu a2s2t3re a4strol a2stum a3su a4sw aswa2s 3a2syl aße2 aßen3 2a1t at1ab at2a1f at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c a2teb ateien4 at1eig a4teli at2en a2tep ate2ru atex3 at2h at3ha 4athe1 3athl 4a3ti atingma5 3atm 4atmus ato4man 4ator a2t1ort a2t1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si ats1p at3ta 3attac at4tak at2ta2l att3ang at4tau at2tä at4tec at2tei at3t4hä at2t3rä att3s at3tu atu2n atz1er at4zerk at4zerw at2z1i at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au3en. au2ere au5erein au2fa auf1an 3aufber 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 2auh au3ha au2hu 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s2 4aun au3n4a aun2e au4nei au2nio au1nu a4unz 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 1ausf 1ausg 1ausl au2so au2spr 1ausr auss2 3aussag au3sse aus4se. au8ssende au2sta 2auste au4stec aus3tie aust2o aus3tri 1ausü 1ausz au3ße a4ut au2t1äu au4ten4g au4t3erh 1auto 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4a3vi a2vr av2s 2a1w awi3 awi1e a1x ax2am ax2e axi2s 2a1ya a1yeu aysi1 ay3t 2a1z a3z2a3 az2o az2u ä1a äand4 ä1b ä5be ä2b3l äb2s ä1che äche1e ächenma5 ächenmas8 ä1chi äch3l ä2chr äch2sp ä1chu äck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf2s äft2 äft4s ä1g ä5ge äge1i äge2ra ä2g3l äg2n ä2g3r äg4ra äg2s äg3sc äg3str 1ä2gy äh1a 2ä3he ä1hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2äh2s 2äh3t ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl ä5le äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml äm2ma4 ämmas2 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l är4ment ärme3s är1o2 ä1rö ärse2 är2seb är2si ärt4e är2th ärt4s1 ä2rü är2zw ä3s äs4c äs4e äse3g2 äser4ei äse4ren äser2i äse3t ä5si ä4sko äskop2 äskopf3 äs2kr ä4sl ä4s1p äs2s äs4s1c äss2e äss3erk ä5sses äs4s1t äst2 äs2te ä4str ä4sw ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ä2t2h ä1ti ä1to ät1ob ät3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l äts1p ät2s1t ät4s3te ät4sti ät2tei ät2tr ä1tu ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äu4g3l 2äul 2äum äu2ma äum2s1 ä2un äun2e äu1nu 2äur äu1s 2ä3us. äu4schä äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äu3s2s äuss1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs2 b1a2dr 2b1af bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4lan balle4b bal6lerg bal4li4g bal4lok bal3lö3 2b1am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en ba4r3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2str ba4t3ent bauer4l bauer4s bau3g bau3s2k bau3sp ba1yo 3b2äc bä1ch b2är b2ä4s3 4b1b bbe4p b4be2se bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 1be. 3bea be3an be3ar 3beb b2ebe 1bec be1ch be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime be1imm b2ein be1ind be1in2h bei3s2 beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la bel3lä bel3li be2l3ö bel3sz bel3t4 1bem bema5sse bemas8sen 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 3bensv 2bentb b2enti bent4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran beras4s berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss berma7sse bermas8se. berma8ssen ber3na b1ernt be1rop berö4 ber3st4a be3rum ber2zö 3bes bes2a besä5s be2s1er be5slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol be4stor best4r be3s2ze 3bet be2tap be3tha bet2to be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 bflö4 bflös3 2b1g2 bgas1 bga4st bge3 bges2 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bie4str bik2a bi2ke. bi2kes bil2a bi2lau 2b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis4s1c bis3si bi2stu bi2stü b2it. b2ita b2ite bit4ta4 bi2tu bi3tum b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7s 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig b4lis b2lit 3blitz b2lo b4loc b3los2 blo3sse blös4s 2blun 3blut 3blü 2b1m bmas2 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo1ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig b1ort bor2t3r bo2sc bo3se bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra4sp bra4ss brast4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif b3rek 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio bro1 b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü brü4ss 4b1s b2sad b3sand bs3ar bsas2 bsa3sse bsat2z b3sä b4sär b5sc bs2ca b6schan b6schef bs4cu b3se. bs1e2b b3sel. bs1ele bse2n1 b3sen. bs1ent bs1er b2serf bs3e4r3in b2sers b3ses b3set bsi2t b4sl b2s1of bs1op bso2r b2sö b3s2pi bs2pl b3s2pu b4ss2 bs2t bst1a2b bst3ac bs3tag bst1ak bs3tät bst1er b4stern b2s3tip b3sto b4stob b4stod b3stö b3stra b2s3trä bs3treu b2st3ro b3stü b4stüb b2s1un 4b1t b3ta bta4st3r b5te b2th bt4r bts2 btü1 bu3ches bu2chi bu2e3 bu2f 2b3umk bunde4s b3ungn b2urg bu3r4i 2burn burt4s bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu4sses bu6s5term bu2s1tr bu2s1u bü1c bügel3e bü3s4 2b1v 2b1w bwel3 by1 by3p bys2 2b1z2 bzeit1 bzu1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t c4an ca2pe 3car car3n carri1 ca3s2a3 cas2t ca3t4h ca1y2 cä1 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen ce1nu 1cer cere3 ce1ro ce3s2h 1cet 2ceta ce1u 1cé c1f c4h 4ch. 2chab ch3a2bi 2ch1ak ch2anb 3chanc ch1ang ch3anst 2chanz 1chao 2char. 1chara 3charta cha2sc 1chato ch1ärm ch1äs 1châ 2chb 6chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 2chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 2chre chre3s ch3rh 1chron 4chs ch4stal chst3ri 2cht 2chuf 2chuh 2ch1unf 2chunt 2chü 2chv 2chw 5chy 2chz ci1c ci1es cil3l ci2s c1j 4c4k ck1a ck3an cka4r1 ck1ä ck1ehe ck1ei cke2ra ck2ere ck1erh ck2ern ck1err ck1ese ck1id ck1im ck1in ck3l ck3n ck1o2 ck3r ck4stro ckt2e ckt2i ck1um3 ck1up c4l2 cle4a clet2 clo1 1clu c2m2 1co co1ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cor3t cos4 co2te 2cp c1q 1c4r2 cre2 cre4mes cry2 2c1s2 c2si 4c1t cte3e cti2 cti4o ctur6 3cu cu2p3 cussi4 1cy c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho 4d3achse d1af d1ag dagi2o dah3l da1ho 3dai2 da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d2amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ars d1art 2dart. da2ru d2arw d1arz dasch4 da3s2h 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c dbu3s2 2dc d1ch dco4r 2d1d2 ddar2m d3dä d3dh d5do 1de de2ad de3a2t de3b4 2d1e4ben 3dec de1ch de3e4 2d1eff deg2 de3gl dehe2 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2d1elek 2delem 2delfm del4lan dell3eb del4lei del4ler del2lö2 de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del3t4 dem2ar 2d1emp d2en. de4n3end 4denerg d2enh de2ni den4k3li den2kn 4den4sem den4s3en den6s5tau den3th 2dentw de1nu 2deol de1on depi4so d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t d4erfi d2erh 4der4höh 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop derö4 der3r 4der4sat der4spa der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum d2es. de2s1a de4sa4g de4sam des3an des1än de4seh des1en1 des1et des1in 3desk des1o de2sor de2s1p des5s2 dest5alt de4stam de6stant de4stei de4stit dest5rat de3stri de3stro de2s1u deten4t 2d1etw de1un de1url de3us d1exi de2xis 2dexp 2d1f4 2d1g2 d2ge. dge2ta dge4t1e 2d1h2 d2his 1di di4ab di2ad di4am 3dic di1ce dich5ter di2e di3e2d di3end die4neb di3eni di3ens. die4s3c diet3 die2th dige4s dik2a dil2s3 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion5s di1p di4re. di2ren di2ris 2d1irl di2sp di3s4per 2d1isr dist2 di2ta di4teng di4t3erl di4t3erm di4t3ers di2t3r dit1s di2tu di5v diz2 2d1j 2d1k4 4d1l2 d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 dni3v d1ob d2oba 2dobe dob4l d2obr do1chi 2d1o2f doll2a do2mar do5na doni1 do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta dor4ter d2os. dos3s dost1 do4sta dot6h do3un d1ö dö2d dö2l3 dölla3 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri 3d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4ril d4rin. 3d4risc 2driß 3d4rit 4dritu d3rob d3roc 2d3rod d4roi drom2 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh drunge3 2d5rut drü1b 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse2t d2s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pa4s d2spä ds2po d3spri d2spro ds2pu dss2 ds3si dst4 d4stabe ds3tauf d4s3täti d4stea ds2til ds2tip d2s1tis d2stod dstras4 ds1ums d2sun ds2zen 2d1t dta2d dtam3m d3tea d2th d4thei dt3ho dto2 dt3r dtran2 dt5s2 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf 2d1ungl dun3ke dun2kl 2dunr dun4st3r 2dunt 2dunw du1o 5dur2c 2d1url 2dursa du4schn du4schr du4schw 2düb 3düf 3dün 2d1v2 2d1w dwa2 dwest1 dy1 dy2s1 2d3z2 2e1a e3a2b eab3l ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei e4aler. eal5le eal3lö eallö3s e2alti2 e2ame eam3m eam1o eam3t ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas5s eat4e2 eater1 e3ath eat3s2 e3at3t4 e3au2f e3aug eaus3s eau3st e3ä4 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en e3ben. ebens3e e3ber ebe4rel ebert4 2ebet 2ebl eb2laß eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebö2s 2ebr eb3rei eb4ru eb2s eb6sche ebse2 ebs1i ebs1o ebs1p ebs3pa eb4stät ebs3t2h eb4s3ti eb4s3tot eb3str ebs1u 2e3bu ebus3s ebu2t1 2eca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a eck3se eck4sta 2eckt 2e1cl 2eco eco3d 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e eden4se eden4s3p ede2r edert2 edi4al 2edip edma3s2 e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho eede3 eed3s2 ee1e e1eff eef4l eeg2 e1ei ee1im eein4se eei5se eel2e e1e2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi eera4 ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere4s1 ee4ret ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ees2 ee3sh ees3k ee3ta ee4tat ee2th ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat efäs4 efä5sse e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e3fen. e2fent ef2er 2eff. ef2fä2 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4s3to ege4str ege1u e2glo e2glu e2gn eg3ni egro5sse eg4sal eg3se eg4sei egs3e4r1 egs2pe eg4sto egs3tü eg2th 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä ehäs3 e1he eh4ec eh1eff eh2el ehe5na ehen2t3 1e2hep e3her ehe1ra e1hi eh1int ehis4 eh1lam eh1lä eh3le ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1ec eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of eh2s2 eh3se eh3sh eh3si eh3so eh3sp eh3sta e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3err 2eidn ei3dra ei1e ei3el 4ei3en eienge4 eie4s eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 ei4l3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom ein3n2 1einna ei2n1o2 1einri e4insa einsas4 einsa7sse 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei6schin ei4s3erw eis2pe ei3spru ei3s2s ei2str eistra6s ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek2u e3k2w e1la ela4ben el3abi el2abt el3a4der e3ladu el1af ela2h e2l1ak el3al e2l1a2m e4landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a4r el3ari el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e2ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r 2eli e2l1id e3lie e2lim eli2ne el1ita 2elk elks2 elk3sc ella3d el3lan el2lap ella2s el2lä el3läd ell3ein el3ler el2leu el3lie el2lil el3l2in el2log el2lot ell3sp el2lu2m el2lü 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri el2sum elt2ak 3eltern el3tes elto2 elt3r elt1s2 elt3se elt3sk 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2mans 3emanz emas8sens em4d3a2 e3m2en emen4t3h e6mentsp e2m1erw 1e2meti e2m1im emi5n2a em1int emi3ti 2emm em2map emma3u e2mop 3empf4 em3pfl em2sa em3se em2spr em3t2 3emul 2emü emü3s4 e2n1a 4ena. 2enac en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en2ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när enä4s enbu4s3 en2ce. en3d2ac en2dal endermas8 en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1ec e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e2n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng1s eng3sc eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r eno2s enost3 e3not eno2w 2e1nö en1ö2d en3sac ensas2 ensa5sse en2sau en5sche en2seb 3ensem ensen1 en2sep en3ska en3s2po enst5alt en4s3tät en6s5test 2ensto ens5trie e4nt ent4ag ent4ark 1entd en2teb en4terb en3tes 1entf 2entfo 1entga en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eos2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep2pin ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a6si era4sp era4s3s er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1ä4s erb2e er3br erb2sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in erd3erw 4ere. er1eb e3rech er3echs er1eck er1edi ere4dit er1eff e2r1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3r2em 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh e4rerl 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess er1eß ere4t er3eti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3els 1ergol 4ergrem e2rh 1erhab 4erhals er3he 4erhöhe er3hu 4erhü 2eri e2riat e3rib 4e3ric er1i2de e3rie eri3e4n3 eri5ers. e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä 2erkli er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row e1roz erö2d 2erök er1ös er3p4 er3rä erri3er 2errü ers2a ersch2 er3se er5sen er3s2i er3sk ersma3s4 er5smo er3sn er3sp er3sto er3sz ert2ak er6terei er4t3erf er4terh er4ters er2tho 4erti ert3ins ert3s2e 2ertür 2eru eruf4s er1u2m er1und er1uns er3uz erü4b 3erweck e1s e4s3ab e3sac esa2d es2an es4and es3ant e3s2as esa3sse esas6sen e4s3ato esäs4 es2äu 2esb e3sc es2ca es3cap es2ce esch2 e4sco e4scu e3se. es1ebe es3ehr e2sein es3eva 2esf 4esh es3ha es4har esi1er e3sig e2s1il es1ini e4s3ins es3int es2kat e4s3ke e4sky e4s3l es4log 2esm e4sn es2ort es2ö 2esp e3s2pek e3spi e3s2por e3s4pra e3s2pu 2esr es2sau 4essem ess4e3re ess3erg es3si 2esso es2sof es2s1pa es2spu es4ste estab4b est1ak e3stan e4starb 1e2stas es2tau es2te e4st3eng e4st3erh e4st3ess e5stev e3sti e4stip estmo6de e2stod est3ori 2estro es3trop es2tu e3s2tü es2ty e2s1um es1ur e4sw e3sy eße3r2e e1t e3ta. etab4 etal4la4 etal6li6n et1am 1etap etari1 et4at et1äh e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of e2torg 2etr e4traum et3rec e2tres etsch3w et1s2p et1su etta2 et2tab et2tad etta3ge et2ta4s et2tau et2tä et2tei ette4n1 et4teu et4th et2tö4 et2t3r et4tro ett3sz et2t1um et2tur et2tü4 etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif eu2e5sc 2euf eu2ga eu4gent eu3g2er eug1s2 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu1p2 e2u3r2e 1euro eu1s4 eu3sp eu3ss eust4 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo ev2s e1w 2ewa e3wä4 ewä6s 2ewe e2we. e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey2n eys2 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p 1fa 3fa. fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho fa2ci f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl falla2 fal4lei fal6lenk fal6l5er6k fal2li4 fal6scha fal6schl fal6schm fal3te 3fam f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br 2f3arc 3fari farre2 far4rec far4reg f3art 2f3arz 3fas. fa3s4a fa3sh f3at fa2to 2f1auf f3aug fau2s f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä4s fä6s3ser fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1ei3s fek2ta fe2l1a fel4da fel2dr 2f1e2lek fe2l1er fe2les fel3la fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fens2t2 fen6stri f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. fers2t f2ert f1erw fes4t fe2st1a fe4st3ei fe2str 2f1eta fe2tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ffa2b ffa2ce f3fal ff1ans ff3ar ff4arb ff4art ffa4s ff1au ffa2z ff2e ffe2e f2f3ef ff3ei ffe1in ffel3l ffe2m f2f3emi f2fetz f2fex f2fil ffi2xi ff3li f3flu f3flü ffo2 f2fö f3f4rä ff2sa ff2sp ffs1ta 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni 2f1int fi2o fi3ol fi2r fi3ra 3fis fis4a fisch3o fisch3w fi3so fis2p fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f5land f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop flo7s8ses. 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger flus3se f4lü f5lüd f5lüm 2f1m2 fma2d fmas2s fma3sse 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin for4m3a4g forni7er. for4sta for4sti for4t3ei for2th for2t3r fort1s for3tu 2f1o2x 1fö 2fö2f 2f1ök 2f1öl 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad f1rah fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein4 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc fri6ster f3roc 1f4ron fro2na fro2sc f3rot f3ru f3rü 4f1s fs2amm f2san fs3ar f2s1as f2sauf f2saus f2saut fsä4 f3sc f4sce f4schan f4schef f2s1e2b f4s3ehr f2s1em f2s1ent f2s1er fse2t f2s1eta fsi2d f3s2kie f2s1o2 f3span f2s1pas f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 f2stas f4s3täti f5stel f2stip f2s1tis fst4r f4s3tres fs1trü f3stü f4s3tüte f2sty f2s1un f3sy 4f1t f2ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f2t1ent f2t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f2t3ro f2trö f3t4ru fts1 ft2sa ft4sa4g ft4sam fts2c ft4sche ft2se4 ft4s3eh fts3el ft2si ft4stä ft4ster ft4stes fts2ti fttra4 f2tum ft1url ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2 fu3sse fus6sen fu4sser fuss1p fus4s1t fu2ß1er 3fut 1fü 2füb fü2r fü3s4 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1ch 2gadl 2ga2dr ga1fl ga1k ga2ka gal2a 2g1a4lau g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2s ga3sc gas3ei ga4sem ga3sp ga4spe ga4spr gas5s ga3s6ses gas3tan ga4st3el ga3str ga4stra4 gastras5 gas4trä ga4stre gas1tu gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs2 gä4u 2g3b2 gbau5s gber2 gbi2 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is4 2g1eise2 gei3sh gei4sta 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2g1e4lek geler3ö ge4l3ers ge4less gel3l2a gel3le ge3lor gel3sa gels2p gels2t gel3sz gel3t2a ge3lum ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe genma7sse. gen3n gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t germas6s ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer ges2c ges3elt ge2s1er ge3s2i ges2p ges4pi gess2t gest2 get2a ge3tan 2getap ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga2t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gia2s gie3g gi2e1i gi2el gien2e1 gift5s gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland gla4s3ti gla4stu 3g2laub 4g1lauf g1läß 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu2 2g3luf 2glun 4glu3s g2lut g1lüg g2ly 2g1m2 gmül3 g1n 2gn. g2n2a g4na. 2gnac 4gnah g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no1 g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i2 gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs5c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g3rek g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 gros2 2g3rose gro5sse. gro7ssen. gro7sser. gro5sses g4roß gro4u 2gröh g4ruf 2g3rui 2g3rum 3g4rup grus2s gru3sse 2grut 2g3rüc 3g4rün 4gs g2sa gs1ac gsa2d gs1af gs1ag g4s3a2k g3sal gs3all g4salt gs3ama g4s1amb gs3an gs3ar gs1as gs1ä g4sca g4sce gsch4 g4schef gs3cr g2s1e2 gse3e g3s2eil g3sel. gs3eli g3seln gsen1 g4ser g4seu g2s1i gsi2d g3sig g5sil gs3l gs1o2 gs1p4 g3s2pek gs4pie gs3pl g5s2por gsrat4 gs3s2 g3star gs1tau g4s1tä g5stäm g5stel g4stemp gst3ent g4sterm gst3err g4s3test gst2he g3sti gs1tis g3sto g4ston g4s1tor gs1tot gst4ra gst5reit gst4ri gst5rit gst3ros gs1trü g3stun gs1tü gs2tüc gs1u g3sy 4g1t g3te gti2m gt4r gt2se 1gu gu1an. gu1ant gu1as gu4d3r gu2e 2gued guet2 2g1u2f 2g1uh gu1ins gu1i4s 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2uns 2gunt2 3gur 4g1url gurt3s gu2s3a guschi5 gus2sp gus4st gu3sti gu2ß1 gu2t gut1a gu4ted gu4t3erh gut3h 2güb gür1 gü3st 2g1v 2g1w 2g3z2 3haa hab2a hab2e ha2cho ha2del ha4din h1adle haf3f4l haft2s hafts3p h1ah 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal4lei hal6lerf hal4leu hal4lok h1alp halt5r h1amt h2an. 2hanb h2and han2da han2kr h4ann 2hanr 2hant hao2s h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 ha2ß1 hatt2 hau5f6lie 2h1aufm h1aukt hau2sa hau2sc hau4spa hau4ss haus5sen hau4s3ti hau4sto h2aut. hau6terk 2hauto hau2tr h1äff h1ärz hä4s hä5sc hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad hea5t he3be he4b1ei he2bl he3br he5ch2e he1cho h3echt hed2g he3di he2e3l hee2s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1i4st heit4s1 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hell3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk hen3s2t2 h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b 2herap he3ras herau2 he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm herma3s he3ro he4r3o4b h1erö hers2t hert2 her3th her2z1w he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x2a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 4hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin2t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro his2a hi2se hi2spa hi3ti 2hiu 2h1j 2h1k4 hklo3s 4hl hl2ag hlam8meng hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läß h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit hl3l hlle3b hlma3s h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös3 hlö4ss hl2ser hl3sku hl3slo hlst4 hls2te hl2sto hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mas hma3sse h3maß h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3meist h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s1p h2mu h3musc h3musi 2hn h2na h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stra8s h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hns2t hnsuch4 hntra4 hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2c hoch3 hock3t 2hod hoe4 ho2ef ho4fa hof3fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hols h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo ho1ra hor3d 2h1org ho3sl ho2sp ho4sta ho2str 2hot. ho3th hotli4 2hot1s2 3hov 2ho2w1 h1o2x ho1y2 hô1 1h2ö hö2c h4ör hö4s hös1c hös3se h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3r2en h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h5rerlag h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3sch hr2s1en hr2ser hr2set hr2s1in hrs3k hr2s1of hr4stec hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se hrt4ste h3ruh hr1ums h3rü h4rüb h2ry hrz2 4h1s h4s3acht h2sa2d h4samt h2san h2sau h2säh hsä4s h3sc h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2sper h2sph hs2por h2sprä h2spro hss2 h2staf hst3alt h3st2an h4starb h2stau h2stäl h4stea h5stel hst2he hs1tie h2stin h2s1tor h3stö h3str hst3ran h2stu h3stun h3stü h2s1u hs2ung h3sy 4h1t ht1a h2tak h3t4akt. ht2al h2talo ht3alt hta2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h2tax h2t1är h3te. ht1ec h2t1ef ht1eh h3teha h3tehä hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit htelma4 htelmas5 h2temp h3ten h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1erh ht5erken h4terkl h6t5erleu h4t3erre h6t5er6spa h4t3er4st ht6erste h2t1erz h2t1ese h2t1ess h3tet h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in h4tl htni2 hto2 h2toly h2torg ht3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h3trec ht3reif ht3reit ht4ri ht5rieg h2t5rin h3trit ht3ro h2trol h2tros ht4rot ht3rös h2t3ru h2t3rü h4ts hts3an ht4s3end ht4spin ht3spri ht4stab hts2ti ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs ht3z2 hu2a hu2b1a hu2bei hu2b1en hu2b3l hu4b3r hu2bu hu2h1a hu2h1i huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu4ler hu2let hu2l1in hul3l hu2lo hu3ma h1ums hu2n h1una hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus3se hus2sp hus4st hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg hyl4 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3al5l ia2lor ial3s ial3t4 ia2lu ial3z2 i2am4 i4amo 2ian ia2nal i3and2 ian2e i3ann i2a3no i3ant i3anz i2ap ia3pf ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a1sp ias5s iast4 i3at. i3a2ta i4ate i3at4h 1iatr i3ats i3au ia3un iau2s1 2iav 2iä i1äm i1äp i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib3be ib2bli ib1ei i2beig i2beis ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibus1c ibus3s 2ic ic1c ich1a ich1ä i1che ich1ei ichermas8 ichgro3 i1chi i2chin ich3l i3chlo ich3m ichmas4 i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci icks2 ick3sa i1cl i1d id2ab4 i3d2ac i3dam id2an i2d1au 1i2dee idein3 i4deis idel2ä ide3sa ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g3l ie3g4n ie2g3r ie3g4ra ieg2s iegs1c ieg4se ieg4s1t i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i1ell iel3lä ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä ien3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm ienma3s4 i3enn i3e2no i3enö i3enp i3enr ien3s2e iens2k ien6st5er ien6stop iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k4 ierken4 i1ern i3ern. i2er5ni ie2rö iers2e ier4s3eh ier3sta ier3te ie3s2 ie4sh ie4sk ie4spu ies4s ie5sset iess1t ie4stas iest6e ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie2t3ö2 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fa iffe4s if6feste if2fl if4form iff2s if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if3sa if2ta ift3erk if2top if2t3ri ift1sp ifts2t ift3sz 2i1g iga1i i2g1ang ig1art iga3s i4gefar ige4na ige2ra ige3ran igerma3 ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu ig4no i3go ig4ra ig3rei igro3 ig3s2a ig4sal igsau4g ig1so ig4sti ig4s1to ig2stö ig4s3tre 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ih2s ih3sp i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2k1är ikbu2 4ike i2k1ei ike2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 ikot3t i2köl i2k3ra ik3rä ik3re ikro3 ik3so ik3s2z ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 4ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1ec ileid4 il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s1 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il4lad ill4an il2lä2 il2leg ille4ge il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or il3t2h il3tr i1lu2 i2lum i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2meg i2mej i2mek i2m1ele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im4m3ent im4mit im4mod imni2 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2str 2imt imtu2 2imu in3ac i4nack i2n1ad in2af ina4lin in1am i3nap in2ars ina4s i2n3au2 inaus1 in1äh in1äs in2dal in2dan in3dau indes4t 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng inenma3 inenmas6 in3erbe i4nerbi in2erh iner4lö i4n3er4tr i3nes i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ingmas4 ing3sc 1inhab 2inhar 2inhau 4inhe in2i3d 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn ink4ste in3k2ü inma4le 2inn. in4n3erm in2neu in4ni2v 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or inos4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 2inse. in2seb 2insen ins3ert in3skan in3skr in4s3tät ins2te ins2ti in3su 1insuf in4s3um in3s2z i4nt 2inta 1integ int2h in3t4r int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o ioa4 io1c io2d i2oda io3du io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3on4s1 ions3p i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en i3p4l ipo6i5den ip2pf ip2pl i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak ira4s irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek i3ré irg2 ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron i1rö irpla2 ir2rei ir8re8ligio irr2h irs2 ir4schl ir4schm ir4sch3w ir3sh irt4s1t 2iru iru2s1 i1s i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot 2isp is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is3sc is4s3che is3senk issermas8 is3so is3spa is4sper is3spi is3spo is2s1t is3sta is4ste is3sto is3stu is2su i2stab ist3ac i4stam ist2an i4stea iste4n is2ter ist4ra is3tras3 ist3re is1trü i2stur is1tüm i2sty isum3p i2sü i1ß iß1ers i1ta it1ab. i3tag ital1a ital5l it1alt it1am it1ang it3a4re it1art i3tat it1au i3tauc i2tauf i2t1ax 4i1tä i2t1äs ität2 i1te i2tei i4t1eig i4t1ein 2itel ite2la ite4n itens2 i4tepo i2tex i3thr i1ti i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn i3tis i3tiv i4tl itmen2 i1to i3toc i2t1of i1tö i1tr i3tra. it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa it4s1a4g it2s1e4 its3er1 it4set its1pe it4stec it4s3tem it4s3tes it2sti it4stie it2sto it6stra6s it2teb it4temp it2tri i1tu it1uh i2t1um i2tuns it1urg itut4 i1tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 ius1t i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em ixt2 4i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l jah4rei jahr4s ja3l2a ja3ne jani1 jani3t2 2jat je2a jean2s je2g jek4ter jektor4 jek2tr je3na je2p je2t1a je2t3h je2t3r jet3t je2t1u2 ji2a ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung5s ju3ni jur2o jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kal3lö3 kalo5 kal2tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw kasi1 ka2sp kas3s ka3tan ka3t4h ka2t3r kat3se 2katt kau2f1o 4kaufr kauf4sp kauf6s5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 2k1ärm kä4s5c käse3 kä3th 2k3b2 kbe1 kbo4n kby2 2k3c 2k3d2 kdamp2 2k1ec k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehrs3o kehr4st 2k1eic 2k1eig k1ein ke1in2d 2keinh 2k1eise ke2l1a ke3l2ag ke2lä kel3b4 2k1e2lek ke2len ke2l1er 2ke3let kel3la kell4e kel3li kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kenbu5s4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5s4te ken3sz k3enten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad ke1ral k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke2t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1ch 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o kin3s 2k1inse 2k1int ki3or kio4s 5kir kis2p kis5s kist2 kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor klos2 2klos. klo3sse klost6 k2löt k1lu k2lud kluf2 k2lug k1lüc 2kly 2k1m kmas2 k2n2 3knab k3ne k4nec k4nei 2knes kni4e kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol2a ko3le kol2k5 3kom ko4mu k2on ko3n2e kons4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n3a k2os ko2sp ko3ta kot1s2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k4ral kra4s3 k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron kro4ss 2kruf krü1b 2k1s k4s1amt k2san ks4ana k2sau k2s1äl ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu kss2 kst4 k2stal k4s3tanz kstat4 k4stea k2s1tis k2s1tor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad k3tag kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktau2s ktä5s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras kt4ro kt3run kt3s2 ktt2 k2tuns kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 2kulp 2k3uml kum2s k2u3n2a kun4s kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e ku2ro kur2sp kur4st ku4schl ku2sp kus3ses ku2su ku2ß 1kü kü1c kür2s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb 4l3aben 2labf 2labg 2labh 2l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3labu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a4dr l1adv 2laf la2fa laf1r laf3t la2ga la2gio la2gn lago2 la2g1ob lag5s2e 2la1ho 1lai lai4s1t la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min lammen8ge 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 3l2and lan2da2 land3ad lan4d3au lan6d5erw lan6d5erz lan2dr 2lanf lan2gl lang3s2 l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi 2l1ar3t l3arti la2ru la2sau 4lasd la5se 2lash 2lasi la2so 2la2sp 3lasser la2sta last1o la2str las3tur la2stü 1la2ß3 lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2ta lat4tal lat4tan lat4t3in lat2t3r 1laub. laub4se lau2fo 1laug 3laun l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lä1c 2läf 2l1ähn 1länd lär2m1a l1ärz lä4s5c lä4s3s 4lät 2läub 2läuc 2läue 1läuf 1là 4l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb3si lb4sk lb3sp lb4st1e lb4sto lb2u l2b3uf lbus3s lbzei2 2l1c l3che l5chen lchermas8 l3chi lch3l lch3n lch3r lch3s lch3ü lch1w l3cl l3co 4l1d ld3a2b1 l3d2ac ld3ack l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a4r ld3ari l3das ld1au ld1är l3de. l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex ldi2c l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa lds2t ldt4 ld3th l2d1um ldy3 ldys2 1le 3le. le2a le3an le3ar 3le3ba leben4s le2bl 2lec le2chi lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl 3leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig l2ein. leinbu4 leinbus5 l2eind lein4du l2eine lei6nerb 4leink l1einn l2eint l2einu lei6schw lei6ss5er lei4str lei4ßer l2eit lei2ta lei8t7er8sc lekt2a 2lektr 3l2ela 2l1e2lek lel3s 3lemes le2m1o2 4lemp l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 4l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lep4pi 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lergro3 lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k ler3t 3lerw l4erwa 2lerwo 2l1erz l2erza les2am les2e 2l1esel le3sh lesi1 le3sk les3s leste3 4lesw 2lesy le2tat 2le3th 2leto let2to2 le2u 4leud 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfäs3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf4s1ti lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lgoa3 lg3re l3gro lgro3s lg2s lg4s1t 2l3h2 3lhi. 1li 3l4ia li3ac li3ak li3ar li3b4 libi3 li1c 3lic. li3chi 4lick li3d2a 2l1ido li4d3s l2ie liebe4s li3ene lie4s3c lie5sse lie4sta lif2fo 3lig lig4n li2gre lig1s li3ke li3ko li2kr lik2sp lik4ter li3l2a li3li li3m2a 2l1imb 3limo 2limp li3n2a lin3al 2l1indu li4ned li2nef li2neh li2nep li2nes 2l1inf ling4s3 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2l1int l1inv 2linz li2o li4om lion5s li3os. li2p3a 2li2po 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i2so li2sp liss2 2liß li2tal li3te li1t2h lit1s2 lit3sz li2tur 3liu liv2e 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lk4stä lk2ü 2l1l ll1abb lla2be l2labt lla2de ll1aff ll1akt l3l2al l2l1a2m ll3ama lla2n ll2anw ll1anz ll1arm lla6tern l2lau ll3aufg ll3aufk ll3aug ll1aus l4lausf l2la2w l2läd l2l1äm l2läu llb4 llch4 ll3d4 l2le2b l3lec ll1ech l2l1ef lle2gu lle2he l2leib ll1eim ll3eise ll2em l3len. lle4n3a ll3endl llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll6erwei ll2es l2le2se l2leuc l3leur. l2lex llf4 llg4 l2lic l2lieb l2lieg l3lik lli4la ll1imp l2l1ind l2l1ins llin6sen llk4 ll5m lln2 ll1ob l2lobe l2lo2d l2l1of llo2gi ll1opf l2l1o2r l3lor. l3lore llo2te l2l1ou l3löh ll3sä ll3sh ll3s2k ll2spr ll4s3tor ll3t4 llti2m llt5s2 llu2d llu2f llu2me l2lu2p ll1ur llust6 l2lüc llü2d ll3z2 4l1m l3ma. l2m3a2b l2marc lm1art lmas2 lma3sse lmä2s lm1ä4st lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins lm3m l2möl lm3p lmpf4 lm3s2z lm3t 4ln lna4r ln3are l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri 3lodr l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min l4on lo2n1o lo2o 2lopf lop2pr 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4steu lo2s3to lo2s3t4r lo2ßu lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lpi4p lp3t4 l3pu 2l1q 2l3r2 lra4ss lrat4s lrom2 lrö4 lrös3 lrut4 lrü1b 4l1s l3sac l2sa2d l3s2al l4s1amb l4samt l2sanf l2sang l2sann l2sanz l3sare l2sau2 ls2äm lsä4s l4schin l4schmü l3se. l2s1e2b l2s1ec l2s1em ls1ere ls1erg ls1erl l2s1ers l2s1erw l3ses l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3pun ls3s2 lst2a lstab6 ls2taf l4s3täti l2s1tis l2stit ls2tr ls1um l2sun lsu3s 6l1t l2tab ltag4 lt1ak lt1am l3tami lt3and lt1ang l4tarm lt1art l2t3ato l2t1au l3te. lt1eh lt1ein l2t1eis lte4lem lt3eli l3t2en l5ten. lten6gel lter3a l3t2erg lt2erö lte3se l2t1esk lte3str l3tet. lte2th l2t1eu l2th l3thas l4thei lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tön lt1ös lt1öt lt4rak ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l4ts lt1spa lt4stab lt5ste ltt2 lt1uh l2t1um ltu4ran ltu2ri lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lug3erp lu4g3l lu2go lu2g3r lug3sa lu2gu 2l1uh lu1id. lume2 2lumf 2lumk 2luml l2ump 1lumpe 2l1ums l1umw 1lu2n 2l1una 2l1unf 4l1uni 2lunt 2lunw 4lu2o lu2pf 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c lus3sen lus2s1o lus2s1p lus4s1t 1lus2t lu2st1a lu4stä lu3str lust3re lu2s1u 4lu2ß1 lu2t1a lut2ed lu4teg lu4t3erg lut1o2f lu2top lu2t3r lut5schl 3lux 2lüb 2lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o lys2 ly3te ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1äp l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lzug4s lz1w lz2wec 1ma maa2 m1ab m2abe 2mabk m2ab4r 2mabs 2mabt ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers 2magm ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3le mal2er mali1 mal3l mallö3 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann m1ans m2ans. 2mansa 2mansä 2mansc 2mantw 2manz ma2or 2m1apf m2app 2m3arb mar3g2 mar2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m3arz 3mas. ma1s2pa 2m1aspe ma3sses mas6ses. mas6sest ma6sset ma3s2su 3mas2t ma2ta2b ma2tan mat4c ma2tel ma4t3erd mat3se mat1sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 4m1änd 3männ m1ärg mä1t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby2 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega3 3meh 2m1eif 2m1eig mei3l2 mein4da m2eis2 me1i2so me3lam me2lau 3meld me2lek me2ler melet2 2melf. mel2se mel2sp mel3t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta 2mentn 4m3entwi me1o 2meou 2meö 3m2er. me1ra me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes me2sal me2sä mes2e 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p meste2 me2str 4mesu 3me2ß1 me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1ch mi3da mie3dr mi2e1i mie3l mi2er mierer4 mi2et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che 4milz 2m1imp min2en min2eu min2ga mi3ni 3min2o mi1nu 3minz 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis4s1c mis4ser mis3si mis4st mi2sta mi2ß1 3mit1 mi2ta mi2th mi2tr mit3s2 mit5sa mi3tsu mit3ta mi2tu 4mitz 2m1j 2m1k4 m3ka mk5re. 2m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2mans mm1anz mm1art mma2ß m2m1au mmä4 mmd2 m2me2c m4meh m2mei mm1ein mm3eise mme4lin mme4na m4mentw m2me2nü mme2ra mme4rec mme2s3a m2me4te mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc m4mita mmo2du m2mo2l m2mor mm3p2 mmpf4 mms2 mm3te m2mum mm2un m2mus 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 2mol. 3mom mom2e 3m2on mo3ne mo4n1er mon3s 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer 3mos mo3se moster4 3mot m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi m4p3lem. m2p3len m2p3les mp4lif m3pon mpot2 mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and ms1as m3sä msch2 m4s1ef ms1erf ms1erw ms1ini mso2r ms1ori m2spä m2sped ms2por m2spot m2spro ms2pu ms3s2 m4stag m2stal m2sü 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m2t1erg m2t1erl m2t1ers m2t1ert m2t1eta m2t1eu m2th mt3ho m2t1im m2t1ins m2tint mti2s mtmen2 m2töl mt1ös mtra4s3 m2trö m4ts mt2sa mt2s1e mt3s2ka mts1p mt1spa mtt2 mt1um mt1urt mt3z 1mu mu1a 2m3uh 3mul mu3la 4muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f 3mus. mu4s1a mu2s1o mu2sp mu3s4se. mu3s4ses mu2s1to mu2str mu2su muße3 mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül2 mül3lu 3mün mü3s4si 3müt 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4t3 mwu1 1my 2m1z mzug4 1na 3na. 2n1ab na2bä na3ber 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2a2c nach1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3la nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly 3name na3me. n2amen namen4s3 4n1a2mer na3m4n 3namo nam2sp 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3naß 3nat n4ata na3t4h 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 2n1ä2m 2n1än n1ärz 3näs nä4sc n2ä6s3s 3näß 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbu3s nby2 2n1c n3ce2n3 nch3m 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6laß nder6läs nde4rob nde2s ndes1e ndi2a3 n2dob ndo2be nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2drui n4d3run nd2sor nd2spr nd3th ndt4r n2duns n2dü ndy3 1ne 3ne. ne2ap nea4s ne3at ne2bl 2n1ebn 2nec 3neca 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la4 nel4lif 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n2en. n2en3a2 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n1erk n2erli 2n1erlö nerma3 nermas4 ner4mit n2ern. 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz n2es n4es. nes2c ne2sei ne2sev ne3ska nes1o ne2sor ne2s1p 4n3essi ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt2 n3far n3fi nfi4le. nf4l nf5lin nflös4 nf2o nf4r nf2tan nft2o nf2t3r nft2s nft4ste n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g1a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a ngens2 n3ger nge4ram n4g3erse ng6es nges2t nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngro3s ng2s ngsa4g ngs1ah ngs3au ng4s3e4h ngs3pa ng3ts n2gum 2n1h2 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nibu2 nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n ni3ene ni1ero nig2a 2n3i2gel nig3r ni2gre 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl nikma3 ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis5s2 ni2stu ni3stun ni2s1u 2nit ni1th ni2ti nit4r nit4tec nit4tie nitt4sa ni3tu 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3au4s n2käh nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2sal nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s nmül3 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nn2erh nn2erk nne2rö4 n4n3er4wa nner2z nne2s1e n2ness nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3se nn3s2p nnst4 nn2th n2n1uf n2n1unf nn1ur 1no 3no. no2bla n2o3ble 3noblo 2n1obs no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3se no3sh no2s3p no4ss n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l nö4s3s n2öt 2n3p4 npa2g npf4 npsy3 2n1q 4n3r2 nra4s3s nräu3s nre3sz nrö2s1 6n1s n2sa2d n2sall n2sang n2sant n3s2arg n2saus n3sav n2s1än nsä4s n2s1äus ns2ca n3schu nsch7werd ns1eb nse2ha2 nseh5ere n3senk nsen4sp ns1ent ns1erf n4serfo ns1erg n2serh n3seri n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n2simp n2s1ini nsinn4s nsi2te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 nspas2 n2spat n4speri n2sph ns2pi n2spo ns3pon n2sprä n4s3prie n4spro ns3s2 ns2t1ak n2stas n4stat. n4s3tate ns2tau n5s2te. n4st3eif n5stel ns4tem. ns4ten. n4stent ns2ter ns3term ns4tes. n5steu ns2tob n6stoffi nst5opfe ns2tor n4strac n6strieb nst4ru ns2tum nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns2unr n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt4at n2tauf nt1äm n2t1äu n3te. nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei n3t2en nt4ene nten6te. n3ter ntera4 nte4ras nt4ern nt4ers nt4ert n2t1ess n3tet nte3v nt2her n2t3ho n3thr n3t4hu nti3k4l n2tinf n2t1inh ntini1 n3tit nt4lem ntmen2 ntmo2 n3to nton2s1 ntras3s nt3rec n3t4ree nt3reif n3trep nt4rig n3trop n2t3rü n4t1s nt3sa nt4sau nts2o nts2p nt4s3par nts2ti nt4s1to nttü3 3n4tu. ntum2 ntu2ra ntu4re. ntu4res nt3z 1nu. 1nu1a nu3ar nubi1 1nuc 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl nu4s1t 1nu2ß 1nut nu2ta nu2t3r 1nuu 1nux 1nuz 2nü4b nür1c 1nüt 2n1v2 n3ver nvol7ler 4n1w nwei4st 2nx 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nze4l3a nzel3l n4zense n4zentw n4zentz nz3erwe nzi2ga n2zinh nz1ini nz3le n2zor nz2öl nzug2s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oak1l o4a3la o4a3mi o2ar o2a3s 3oase oa4si o4at oa3te o5au o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi2t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re o3bri obs2 ob3sh ob3sk ob2sta ob3sz 2o3bu obus3s 2o3bü 2oby2 2oc oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r ocht4 och3te o1chu ochu2f och1w o1ci ock2er ock3sz o1cl o3co o1ç o1d o3d2a od2dr o3deb ode2c o3d2e1i odein3 ode2n1 odene2 o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2odu 2o1e oe4b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1ac of1au o2f1ei of2en o3fer of2fa of2f1in of2fir of2fix 1offiz of2f3l of2fo of2f3r offs2 off3sh of2fu of2fü 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr ofstra8ssen of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i ogenmas6 o3gh ogi2er o3gis og2lo o3g4n ogoi3 og2s og3sc og3si og3s2p o1ha o1hä o1he o2h1eis o2h1ert o2h1erz o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n3ac 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la o2h1o2p o2h3ö ohr3a oh4rin oh1ro o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. oi3se o1ism oiss2 oi4st 2o1j 2o1k oka2la okale4 o3kat 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp olf3st ol2gl ol2gr ol2i oli3k4 oli3tu ol2kl olk3r ol2kre ol2la2d ol2lak oll3ans ol2las ollä2 ol4l1ec ol4lei oll3ein ol2l1el oll5ends ol4lerk oll3erw ol4li4st ol2lo2c ol2log ol2lö2 ol2lu ol3lus o3lo ol2of olo1p2 ol1ort ols2t ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3meis o2mel o2mene o2mep o2meru om1erz om2es omiet1 omil3l o2m1ind om1ing om1ins o2m1int om3ma om3me om3mu om1org om3pf omp4l oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal ona4lin on1ap o2narb on2au 2onä onbe3 2onc onderer5 2one one4i one2n1 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4n onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on2seb ons3e2l on4sh onsi2d ons3l ons1p onst2h on3t2a on4t3end ont3erw on2t3ri o1nu 2onuk on3v 1ony on3z o1ñ oo2k3l o1op o1or oo4sk oos5s oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan o1pec o1pei o1pe4n 2opf. op2f3a op3fah op4ferd opf5erde opf1l opf3la op1flü op3for 4oph2 o3phe o1pi opi5a2 opi3er. opi5ers. opin2 op3lag o2p3le op3li 2o3po op4pl 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2oral o2r3alm or4alt 3or2am or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 2orda or2d1am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords or2dum 2ordw 4ore ore2a ore2b o2r1eck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s2 or3g4a 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins 2orit ork2a or2k3ar ork4r ork3s 2orm or4mans or4ment 2orn or2nac or2n3ar or2n3ä or5ne. or3n2o 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3re or3rh 2ors2 or3s4a or3sh or3si or3sz or2t1ak or2t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the or2tin ort3ins or4t3off or2tor or2tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un orus3 o2r3ü o2rya o1s 2o3s2a os3ad os4an osch3ar o4schä o3sche osch3le 2ose ose3e o2s1ei ose2n 2osh o3s2hi 2osi o3sk o4s3ka os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1ac oss3and os4sä o6ssel o3ssem oss3en4k o3ssent oss3enz os3si os2s3o os4son os2s3p os4s1t os2su os2t o2st1a2b o3stal. o4st1am ost3ang osta4s ost1au o4sterd oster3e ost5er6we ost3h o2stin o4s3ton. ost3ran o2st3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf oß3t 2o1t ota2go o3tark o2t1au ot3aug o3tax ot1ä otäugi4 o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot4em3 otemp2 otens2 o2t1erw 4ot2h ot4he ot5hel o4t3hi ot3hos o2thr o2til o2t1i2m ot2in o4tl otli2 ot4ol ot1opf ot2or oto2ra o3tra o2t3re ot3rin ot2sa ots1p ot2spa ots2pe ott1a ot2tan ot2tau ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oung5 oun4ge. oungs2 o4up 2our ouri2e our4ne. ou3s2i ous2t outu4 2ouv 2o1ü o1v 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r ö1ch öch1l ö2chr öchs2t öch4str ö1d öde1r ödi3 1ödu ö1e 1öf öf2fa öf2fl öf3l ögen4s1 ög3l ög3r ög2s ö1he öh3l2e öh3ri öh2s ö1hu ö3ig. ö1ke ö2ko ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl2f1ei ölf3s öl1im öl1in öl2k3l öl2la2 öllma4 öllmas3 öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w ö1m öm2s ön2e ö3ni önizi1 önn2e ö1nu öo1 ö1pe öpf3l ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö1s ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw 2öse ö2s1ei ös4en ös4es ö2sp ö3s2s ös4s1c ös3ses ös3set ös4st ös4t ö2sta ös4u ö1ß ö1t ö2t3a öte4n3 öt2h öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa1s2p pa2ßu pat1a pat4c pate2 1pati 1pat4r 1pau p3auf pa3uni 1pä 3päc 3päd 3pär 3pä4s3 pä4t1e2h pä4t3ent pät3h pä2to pät3s 2p1b pbe1 2p3c 2p1d2 pda2 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 3pel pe2l1a4 pe4lein pe2let pe2lex pe3li4n pe4l3ink pel3k pel3la pel3lä pel3l4e pel3li pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o pens2 3pensi 1pensu penz2 1pep pe1ra per2an 1perle per4na 3pero per2ra2 perr3an per4rä2 per4ric per6rieg 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pes2t 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 pffa3 p2f1ins pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra pfs2 pf3sl pf3sz pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d2 phen3s 2ph1ers 2phf 2phg phi2ka 2phk ph2l 2phm 2phn 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a1 pia3k piap2 pia3s pi3as. pi3chl p4id piegelei8 pi2el piela2 pie4lei 1pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi4pel pi3ri 3pirin 3pis 4piso pis2t pi3t2a pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3pla p3lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler p3lic p3lif 2plig p4lo 2p3lu 2p1m2 pma1 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li pol3lo po4lor 2pond 2ponn po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau porf4 2porn por4tre por4tri po3s2e pos4t po2sta post3ag po4stä po4st3ei post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppa2p ppe1e ppe2n1 ppf4 pp1fr p2p1h p3p2ho pp3lä p2p3le pp3oh ppp2 p2p3ra pp3ren p2pri pp3sa ppt2 p3puc p2pul p2punk p3pur p2r2 1prak pra4s3 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 2preg 1prei 3preis prei4ss 2preiz 2p3rer 3p4res 1preß pri4e 2prig 3prinz 1p4ro1 3prob 2proc 3prod 3prog 3proj 2pross 2proß 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po ps2te pst3re p2stu 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w ptpo4 p2t3r pt1s2 ptt2 pt1um p3tung pt1urs p2tü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 3pulv 2pund pun2s 2punt 2pur 3put put2s 1püf 2pül pül3l 2p1v 2p1w pwa4r 3py1 py3t 2p1z qu4 quel4la 1queu qui3s 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2a3b2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin rachter6 racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad3t 1rae r2af raf3ar ra2fer raf1r ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la4 ral3ab r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la ral5l2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t 2ralta r4alt2h ra2lu 3raly r2ame ra2mer 1r2ami ram4man ram6m5ers ram4mit ram4mu 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra4r1in r2ark 2r3arz r2a3s2 r4as. ras4a ra4schl ra5sen ra5si ra4sk 2rasph ra4ssi 2raß 1rat ra2t1a ra3ta. ra3te rat4r 2r3atta 4ratz 4rau. 3raub. 4raud 4raue rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp rau4sti raus3tr 4raut raut5s 1raü r2ax raxe3 raxi4s1 räch4s 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sa rä4sc rä5sse rä2st 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä r3ben. rb1ent rbe3r2e rber4gl rb2la rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rbmas3 rb2o rb4ri rb2sa rb2sei rb3ska rb2s1o rb2sta rb4stä rb2stu rb2su rb2u rbu2sc 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rchs2 rch3sp rchst4r rch3t2a rch6terg rch6terw rch1w r1ci r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d2 rde3re rder4er rderin6s r4d3ernt rde3sp rdga4 rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os rdo4st r2dö rd3rat rd4ri rdrü4 rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. 2recki 3red. 4redd 2redi re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 reis5tro re2ke re3la 2r1elb rel2e relea4 re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen re3ri r1erk 4r3erken r2erki 2r1erl 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa res3an re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest res3tem re2stu 3resu 2re2ß1 re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f rfall4s rfäs3 r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü r3for rf4ru rf4rü rf2sa rf2s1ä rf2s1id rf2spr rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rga5ssen rgas2t rga4str rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan rgleich8s7 r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rgro5sse r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 2r3her r2hoe rho2i3 2rhol 2rhö 2rhs 1ri ri3am ri3at rib2bl ri1ce ri1cha rid2 ri2dan 2ridol 2ridy r2ie rieb4s3t rie2fr ri1el ri3els riene4 ri3eni rie2nu ri1er. ri4ere ri3e4sti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 4rimp rim2s r2i3na 2r1ind rin4dex rin4diz 4rindu ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 4rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins2 3r4ins. rin2so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris4a ri4scho ri4schw 3risik rismu2 ri3so ri2s1p 3riss ris3si rist5ers ristes4 ri6stess ri2ß1 r2it r3i2tal ri3t2i ri3t4r rit4tei rit2tr 5ritu rix1 ri3xi 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk2um rku2n rk1uni rkus3s rku4s1t 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i rle2st r3let r3l2i r3l2o rlös5s rl2s1p rl2s1to rl3t r3lu rlu4str rlz2 4r1m r3m2ag rma2la r2m1ald r2m1ank rm1anz rm1a2p r2maph rma5ssen rmas8sens rm3d2 r3me. r2m1ef r2meo r2m1erp rm2es r2mide r2m1im rm3m rmmo3 r2m1o2ri rm3sa rms2t rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna4r rn2arb rn3are rn3ari r2nau rn3d4r r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1ch 3rock. 4rockn r2o3de ro3e2 4rog. 4rogs roh1l 3r2ohr 3roi ro3le rol4lan rol3l4en rolli4n rol6lini 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ro2pf ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3se ro3sh ro5s2i ro5smo ros6san ross1c ro3sta ro2st1r ro2ßu ro2tag ro2tä ro2tei ro2tho ro2tri rot1s rots2o ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl rölla4 3römi 4röp r1ör r2ös. 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli r3po rpo4str rps1t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rra4s3s rrat2s rr1äm rrb2 rr1c rr2e rre4ale rrer4s r3res r2rew rr2he r3r4hen rrik2 rr2n3a rr2o r2r3ob rro3m2 rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2sa2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ar r6scherl rs1ebe r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3sho rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no rson4e r2s1op r4s3ort. rs2p4 rspa3s2 rs4pel r2s3ph r4s3s2 r5stad r4stant rs2tau r6st5eing rster2 r6sterbt r4st3erw rs2th r5stim rst3ing r2stip r2s1tot rs2tr rst3ran r6strang rs2tu r2sumf rsü3s r3swi 4r1t r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är r3te. rte1e2 rtei3la rt1ein r2telf rtel6lei r4tempf rte2n1 r3ten. rte4na rtens2 rt3erei r4terfa r4terfo rt1erh r4t3er4la r4t3ernä rter4re rt1ers r3tes2 rte3sk r2thi rt3hol rt2hum r2t1id r2t1ima rto1p rt1or rto2ri r2t3rak rtra4s3 rt3rec rt3ros r4ts rt4s3eh rt1spe rt3t4 r2t1urt rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ru3ches rude2a ru2dr 3ruf ru2fa ruf2s1 ruf4st ruf4ter 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus3sen rus2s1p rus6s3t 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch rücks2 4rümm rün3z rü3s2s 2r1v rve4n1e rve5s rv2s 2r1w r5wei rwun3s 4r1x 1ry ry2c 2r1z rz2an r2zar r2zas rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. s1ad 2s3ada s3adm 2s3a2dr sa2fe 2s3aff 3safi sa1f4r 3saft 3sag sa4gent sag4n 4s1a2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4s3akt 3sal. 4s1alar sa4l3erb sa2l1id s1all sal5lo3 3salo sal2se 2s1alt 3s2alz 3sam s2ame s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na 2s3anb s2an2c s2and s4and. san4dar san4dri 3sang. sang4s 2s3anh 3s4ani 2s3anl 2sanp 2s3ans san4sk 4santr 2s3anw s3anz 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1a2sp sas6sest 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb 2s3av sa2vo 3säc s1äh s3ähn 2s1ält 2s1äm 2s1änd 2s1är sä2s3 3s2ät 1säu 2säuß 4s3b4 sba4n sbe3r2e sbus3 1sc 2sc. 2scam s2cap 4scar 2s1ce 6sch. sch2ab 3schaf 2schak sch2al 4schanc 4schang 5schanz 4schao s2chau 3s2chä 2schb 2schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 4schf 2schg 2schh schi4e 3sching 4schiru 3schis 2schk 4schl. sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox 3schö 4schöl 4schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs2 sch3sk 6sch3t scht2a scht4r s2chu 4schunt sch2up 5schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 6s1cl 2sco 3s2cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sdien4e sd4r 1se se3at. seau4 2s1e2ben seb4r 2s1echo s1echt 2s1eck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l 3seg se2gal se2gl seg4r 3s2eh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh3s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s2ein. 2seinb sein4du sei3n2e sein4fo 2seing 2seinh 4seink 2seinl 2seinn 2seinr s4eins. 4seinsp 4seinst 2seinw 2s1eis 5s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam 3selb sel1ec 2selem se4lerl sel3ers 2self. s3elix 3selk sel3le se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp s2en. se4nag se2nä 3sendet 4s1endl 5seni 3senku se2no s2ens s2ent. 2sentf 4s3entg s2enti 2s1ents 2sentw 2sentz se2n3u 3senva seo2r 4s1e2pos 3seq s4er. ser3a2d ser3al se5ref s3ereig se4r3eim se4r3enk ser2er s1erfo s2erfr s3erfü 4serfül s1ergä s2ergr s1erh 5serie serk4 s3erken s1erkl 3serl. s2ern. s1ernä 4s3ernt se1rot s3eröf s2ers. 2sersa sers2t s4ert. seru2 se4r1uf se3rum se3rund 3s4erv se2sel 2sesh se3sk se3su 2se4tap se2tat s1e2th 3setz se1u2n 2s1ex se2xe 4sexp sex3t2 6s3f4 sfal6l5er sflo4 4s3g2 sges2 sgro3 2s1h 4sh. sh2a 3s2ha. sha2k 4s3han 4shc s3h2e 3shi. 3shid shi4r 4shk sh3n 4shof 3s2hop sho4re 3show sh4r 4shs 4sht 4s3hü 1si si3ach. si2ad si3am. sia4s 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s si3ene si1err si1f4 si2g1a 3sigh sig4n si3gnu si2g3r si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s2 sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 2s1inh sin1i1 4s1inq 2s1ins s2ins. 4sinso 4sinst 2s1int 4s1inv 3sio 3siru 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s2 si2stu 3s2it si2tau sit3r si2tra si3tu 3siv siv1a sive3 si2vr 1sí 4s3j 2s1k2 4sk. 1skala 4skam 4skanz 4skas ska4te. 4skateg ska4tes 4skä 4skb skelma4 skelmas5 s4kep 3s2ki. s2kif s2kig 3s2kik 4skir 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4s3kor 4skow 4skö 4sks 4sk3t 3skulp skus3 2s1l2 4sl. 3slal 4slan sla2ve s2law sl3b s5le s3li 3s4lip 4sln s3lo. slo3be s3loe s3lu 4s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 3so. so4a 2s1o2b so3et 3soft 3sog s1o2he 6sohng 2s1ohr 1sol so3la so2l1ei sol2la4 sol4ler 2so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2s1opf 3sor. so1ral s1orc 2s1ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3so3s2 s4os. 4s1ost 1sou so3unt 3sov 4s1o2ve 3sow 2s1ox 5soz sö2f 2s1ök s1ö2l s1ö4s sp2 2sp. 2spaa 2spak 2spala spani7er. 2spano 4spap 2spara 1spare 2sparo 3sparu spa3sse spa3ssi 3s2paß 2spau s2paz s2pä 2spär 2s3pe. 2spel 4spensi spe3p4 s1peri 2spero s2perr 2spers 4spet 1s2pez 2s3pf 2spha s4phä s3phe 1spi 3s2pi4e 4s3pier4 spi2k 4spil 3spio 4spi4p 4spis 2spl 4spla 4splä 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 1spon 1spor 2s3pos s2pott 4spr. s2prac s2pran 2sprax 2spräm 4spräs 3s4prec 2spred s2pren 2spres s2prit 2sprob 2sprop 5spross 1spru 2sprüf 3sprün 2s3ps 2s4pt 1spuk 2spup 3spur 4sput 1spü 4spy 2s1q 4s3r4 sra4s3s srat2s srat4sc sret3 srom2 srö2s srös1c srücker6 srü2d 2s1s 6ss. 4ssa ssa3bo ss2ad ss1aj s3sal s4s1alb s4s3amt s5sand s4s3ang s2sano s4sans ss2ant s4sanz s3sas ss3att 4s3s2ä 4ssb 6ssc ssch2 4ssd 4ss1ec 4ssee 4sseg s4s1ega 4sseh 4ssei sse3inf sse3in4t 4ssek 6ssendet 4s3sendu ssenmas6 4ssentz sse6r5att s2s1erö 4ss3erse s3sersu ss2es 4ssesc 3ssesh 4sset sse3ta 4ssez 4ssf 4ssg 4ssh 4ssic 4ssie s2sig s4sind s4sinf s4sint 4ssio 4ssit 4ssk s3skala 4s4s3l 4ssm 4ssn 4sso ss1off ssoi4 s2s1op ss1ori s2söl 4ssp s3spe ss2po s3spru ssquet4 4ssr 4s4s3s2 4sst sst2a s5stad ss2tar ss1te s4ste. s5stel s4sten s4stes s4stet s5steu ss2th ss2tip ss1tis ss2top s3strec ss2tur s3s2tü 4ssum ss1ums 4ssü 4ssv 4ssw 4s3sy 4ssz 1st 6st. s4ta. 3staa 2stabb 2stabh s2tabi 2stabt 2stabz st2ac 3s2tad 4stada 4stadr 3staff 2stag 3stah 2stak 2stal. 2stale 3sta3li 2stalk st1alm st1alp 3stam st1ami 4stamt sta4na 3stand 4stanf 4stanl 4stann 2stanw 4stanza s2tar. s2tars 3start st1asi 3stat 2stat. 5statu 3s4tau. 2stauf 2staum 5staur 2staus 3staus. 2stax 3stä 4stäg 4stält 4stämt s2tär 5stätt 4stäus 4stb 4st3c 4std 3ste s2tean 4stechn 4stee ste2gr ste4i 4st1eid 5s2teig 4s3teil stei4na s2t2el s3telem 5stell stel4l3ä ste4mar 4stempf ste4na 4st3ends 4stentf 4stentw 4stepi st5erbie ste4rec ste6rers st3erfü st2erg st5ergeb sterma7sse s2tern 6sterras s2ters stes3ta ste4stä 4stests s2teu 4steuf 4st3ev 4stex 4stf 2stg 4sth st3heu st3ho 5s2tic 3stie 4stief. stierma5 3stim 2stinb 2stinf 2st1ins s4tio sti2r st3i2so 2stj 2stk 4stl 4stm stma3s2 2stn 2stob 3stoc sto3d s2tode s2tof stoffen6 stof8fens 2st3om 2stopo 2stord 2storg 3stos 4stou 2stöch 2stöl 2stön 5s2tör 2stöt 4stp 2stq 3s2traf 2strag 3strah 4strai 3s2tral 4strans 3s2tras 3straß 4straum s2träf 2sträg s2trän 4sträne 2stre. 4strech 4stred 4stref 4streg s3treib 3st4reif 4streis st3renn 2strep 2stret 2strev 2stri. 3s4tria 2strib 4strig stri2k 4strisi 2stroc 3s2trof 3s2trok st3roll stro4ma s2trö 2ströp 3struk 2st3run 2strup 4st3s2 stsas2 sts4k 2st3t4 st2u 5s2tub 4stuc 3stud 2stue 3stuf 5stuh 2stuk 2stumr stum2s 2stumz stu2n 2stun. 2stunf 2st3uni 2stuns 2stunt 3stuö stu3re st3url 2s3turn 2st3urt 4stüch s4tück 2stür. 2stüre 2stürg 2stürs 2stv 2stw 2sty. 2stys 4st3z 1su. su1an 3su2b3 su4ba2 4subi 5su1c su2cha such4st 2s1u2f 4s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2m1el su6m5ents s3umfa s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n sun6d5erh su4ne s1unf s3ungl 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt su2s1 su3sa su3si sus3s 2sü2b 3süc sü2d1 süden2 sü3den. 3sün 1süs4 sü3sse sü3ssi 1süß 4s3v 2s1w s3we sweh2 4swie 4swil s3wö s3wu 1s2y syl1 sym3 sy4n3 sy5s 2s1z2 4s3za 4szä 4s3zei s2zena 5s2zene 4s3zent s2zes s2zeß s3zet s2zis sz3ta 4s3zu 4s3zw 2ß3a2 ß1ä 2ß1b2 ßbus3 2ß1c 2ß1d4 ßdie3 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2le ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t ße2s ße2t ß1ex 2ß1f 2ß3g2 ßge2bl 2ß1h2 1ßi ßi2g1a 2ß1in ß1j 2ß1k4 2ß1l2 2ß1m 2ß1n2 ß1o2 ß1ö 2ß1p2 2ß1q ßquet2 4ß3r2 ßrus3 2ß3s2 ßsch2 ßst2 2ß1t ß2th ßts2 1ßu2 ß1uf 2ß1uh 2ß1um ß1uni ß1ü 2ß1v 2ß1w 2ß1z2 2tab. ta2b1an 2t1abb 1tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 1table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 1taf2e 2taff t1afg t1af4r 1t2ag 3tag. ta2ga2 ta2g1ei 4t3a4gent ta3gl t3ago tag2s tag4st tah2li tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. 1tak t3a2ka ta2kro tak2ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk 1talbu tal3d 1t4ale tal2en ta4lens tal2ga tal4leg tal4lei tal4let tal6leut tallin6s tal4lus ta2l1op tal2se 2talt 2tam ta2mer ta2mi tam2ma2 tam4mi tam4mut t1ampl t1amt t1a2na 2tanb t2and tand4ar ta3ne 4tanf 2tang t2ank t3ankl 2tanl t1anm 2tanme 4t1anna t1ans t2ans. 4t3ansi 2t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza 4tanzei tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4rens ta4r3ere 3t4ari 2tark 2t1arm 2tart tar2ta t1arti tar2to ta2ru 2t1arz ta3sa 1tasc t1asp 1tas2t ta3str 1tat. ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 1tats ta2t1um 4taud t1auf 4taufg tau3f4li 4taufn 2taufw 1taug t1auk 3taum 1taus t1ausb tau6schr tau6schw t2ause t3ausg t1ausk 2tausl 2t3auss 4t1ausw 1tax taxi3s tä1c 2täd 3täe 1täg 2tägy 2täh 2t1ält 2täm t1ämt t1ängs 1tänz t1äp t2är. tä2ru tä4s t2ät 2tätt 2täug 1täus 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 tbus3 2t1c t3cha t3che tch2i tch3l t2chu tch1w t3cl t3cr 2t3d4 tdun2 1te2a4 te3al teamma5 te3an 3t4ebb 4t1e2ben 1t2ech te1cha 3techn 2teck teck2e te3der 1tee te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 2teign teik4 1teil 2tein teinbus6 tein3ec t3einge t3einla 4teinn t1eis. t1eisb tei3st te2kel tek3t2 tela4 te2l3ab te2l1ac te2l1au telb4 tel3d4 te3le tel1eb tele4be te4l1ec 3telef 3teleg te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. te2l1in te2lit tel3lau tel3lä tel3l2e tel6lein tel6li6st te4lost te2l1ö tel3s2k tel3ta tel3th telt4r te3mä te2m1ei te2min 2temo te2m1o2r 3temper 1tempo te4m1u t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 2t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag t3engla t4enh te2ni te4n3in t4enj t2enk t2enl t4enm ten3n t2eno t2ens tens2e 4tensem t4enta t1entb 4tentd t4ente 4tentn ten4t3ri 4t3entw 4tentz t2enz ten6zerh ten3zw t1e2pi t6er. ter3ac te1raf te1ral ter3am te3ran. ter3as 4terbs 4terbt 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül ter3g2 6tergrei t4ergru 2t1ergu 4tergü t4eri te3ria te2rid 4terklä 2t3erlö 1term termas4 ter4mer ter4n3ar 4t3erneu t4ero t1erö 3terras ter4re. 1terro t4ers. ter5sc ter4ser terst4 t4erst. t4ersti t4erstu tert4a tert2o teru2 te4r1uf 6terwerb ter3za 2t1erzb t2erzu te2s tes1ac te3sä t1esel tes1er te3si te3so te3sp te4spr 3tesse. t2es2t tes3tät te4st3ei tester4 te6sterg te6sterk testes4 1tests t2et. te2tat 4tetl 3teuf te1un teu2r3a4 te2vi 1tex te1xa t1e2xe 2t1e2xi 4texp 3text 2t1exz 2t1f4 tfäs3 tfi2l 2t1g2 tger2 tgro3 t1h 4th. 2th2a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä 4thc 1th2e t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem t4hene t4heni 3theo 2therr t2hes 3these t2heu 1thi. t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 2t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy ti2ad ti3a2m tib4 ti1ce ti3chr tiden2 ti4dend t2ie 1tief. tie2fr ti1el ti2el. tiel3a ti3e4n1 ti2er tie4rec tiermas6 1tierr tie5sse 2tieß ti1et ti1eu 1tif. tif3f ti1fr ti4gerz tihi4 ti2kam ti2kar ti2kin ti2krä tiks2 ti2kü ti2lar ti2lau ti2lei ti2lel 1tilg tille4b ti2l3ö tilt4 ti2lu ti2ma2g t2imi tim2ma2 4t1imp t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l t2ins. 4t1inse t1int ti1nu 4t1inv 3tio ti3or 1tip 3tip. ti4que. ti1rh t2is ti4scha tisch3w ti2sei ti2sp 3ti3te tium2 ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 2t3k4 2t3l tl4e 3tlem tle2r3a 4t5li tli3ni 2t1m2 tmal2 tmen4t3 tmo4des t3mu 2t3n2 t5na tnes4 to4as to5a4t 1tob 2tobj tob2l t1obs to1ch 3tocht 2tock 1tod 3tod. tode2 to2d1er tode4s1 to2d1u toi4r to3la tom1e2 2tomg 1ton to2nau to2neh 3too to2pak to2pat 1topo 2topt to1ra to2rau to4rän 2torc t1ord 1tore. to2r1el t1org t3orga tor3int to2rö 1tort t1ort. to2ru t2orw to3s2 to4sk tost4 1toten to2tho tots2 3t4ou touil4 to3un tö2c 1töch 2töf 2t1ök 1tö4l 1tön t1ö4st 1töt 4t3p2 tpf4 2t1q t2r4 2tr. 1trac tra3cha t3rad. tra4dem tra4far 1trag 2trahm 3t4rai tra4lin 1tram 2t3rams 3t4ran. 2trand 1trank t3rann 1trans t3rase t3rasi tra4str 2traß 1traum 2traup traus2 1trä 3träg 2träh 3träne 2träs 2träß 2träus 2träuß 4t5re. tre4ale tre2br 2trec t3rech t4reck 2t3red 1tref 2trefe 3treff 2trefo 2treg t4rei. 1t4reib 2treif t3reig 2t3reih t3rein 2t3reis 2treit t3reiz 2t3rek 2t3rel t4rem t4ren. 1trend t3rent 1trep 2trepe 2trepo t4repr t4rer t4res. 1t4ret tre2t3r t5rett t4reu 2t3rev 2trez 3t4ré 2t3rh 1trib 3trieb. 3triebs 6trieg tri2er 1trigg 1trin t3rind 2tring tri3ni 3trio t4rip t3riß t4rit 1triu tri2x trizi1 1troc 4trock. t4roi tro2ke tro2mi 2t3roo t4rop 3tropf 2troß t3röc 2tröh 3tröp 2trö4s3s 2t3röt 2truf 1trug 2truk trum2 trums1 2t3rund 1t4runk 3t4rup t3ruß tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg 3trümm try1 2ts t4sab t3s2ac t2sa2d t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as tsa3sse t2sau t1sä t2säh t2s1än t4schar t3sche t4schef t3schl tsch4li t4schro ts2cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t3sens t2s1ent t2s1er t6s5essen t3set t4seth t2s1i2d tsing4 ts1ini t2s1ir t3skala ts3kr ts1o tso2r t1spal t1span ts1par ts4pare t1spas ts2ped t1spek ts2pi ts3ple ts2pon ts2por ts3s2 tst4 t2staf ts2tat ts2tau ts3täti t4stea t4s1tep t4sterm t4s3terr ts1tie t2s1tis t2stit t2ston ts1tor t4s3trad t2strä t2s1tri ts2tro t4strop t2s1trü ts1u 1tsub t1sü 4t1t tt1ab tt2ac tta6gess tt1ak t4tals tt3ank t2tanz tt1art t2tän tt1ebe tt1eif tt1ein tt1eis tte2la tte4leb t4te4leg tte4len ttel3l ttel1o t3ter tte4rec tt2erg ttermas7s tte4sa tte4s1ä tt2häu t2t3ho t3to. t3tos ttras3s t3tro tt3rü tt2sen tts1p tt4s3tem tt4ster tt4sti ttu2 t2tuc tt2un t2tu4s ttü2 tu1alm tu3an tub2 tuba3b 1tuc tu2chi 1tue tu3en tu2ere 2tuf tuf2e tu3fen t3u2fer tuf4fel 2tuh tu2is t3u2kr tul2a 1tum t2um. t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2tump 2t3umr tum2si tum2so 2t3umt 2t1umw t3umz 1tun. 2t1una 2t1und 2t3unf t3unga tung6s 2tunif 2t1u2nio 1tunn 1tuns 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e2t turin1 1turn tu2ro tur3s tu4ru tu2sa tu4schl tu2so tu3ta 2tüb 1tüch tück2s 1tüf 1tür. tür1c 1türe 1türg 1türs 1tüten 2tütz 2t3v 4t3w twa2 twä4 twi4e 1ty 3ty. 3typ ty2pa 3tys 4t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1ec t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3zes tzes3t tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4r u1ah u1al. ua2lau u1alb u3alet u1alf ual3l ualle2 u3a2lo u1alr u1als u1al3t ua2lu u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au uau2s u1ay u1äm u1än uäs4 u1äu 2u1b u8becken. ub3ein u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa ubus3 u2büb 2uc uc1c u1ce4 uces3 uch1a u1cha. uch1ä u1che u2ch1ec uch1ei ucherma8s u1chi uch1il uch1in uch3l uch3m uchma6ss uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu u2chum uch3ü uch1w u1ci uck2er uck3erl u1cl 2u1d u3d2a uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e u2ed ue2en u2eg u2ela ue2le ueli4 uel2la ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2sa uen2zu u2ep ue2r3a ue2r1ä uere2 ue2rec ue3reig u3eremp u3erent ue4rerg ue4rerk uer3g2 u3erinf u3erin4t uerma6s uer2ne uer4ner uer3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue4s ue5se ue5sp ue2ta ue4tek u3fac u3fah uf1ak u3fal uf3ar uf1au u2f1ä6s u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern u2f1eß 2uff uffel2 uff4l uf2fro uf3l u2fob ufo2r uf1ori uf3r uf3sä uf2spo uf4ster uf2t1eb uf3ten uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak ugang4 u2g1ap uga4s ug1au ug3d2 u2g1ei ugenma3 ugenmas6 u2g1erf u2g1erl ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ro3s ug3rüs ug3sc ug3se ug3si ugsma3 ugsmas4 ug1spa ug5stä u2gü u1h uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uh1un uh1w 2ui ui2c u1ie ui1em u3ig u4ige u1im u1in. uin3n u1is. u3isch. u3ischs uisi4n ui2st u1j uk2a u3käu u1ke u1ki u1k2l ukle1i u1k4n u3ko uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab ul1am ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ulf4 ulg4 uli2k ul1ins ul3ka ul2kn ulla2g ul2lä ul3len ul2les ulli2n ul2lö2 ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2t 2ulta ul3th ul2tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um2an um3anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 4umm umm2a um4mess u2möl umpf4li um2pho um2p3le 1umr 3umsat um2sau um2ser um2sim um2s1pe um4stem um2s1u um3t2 um2un u2m1ur 1umz un1 2un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at unau2s 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp un2d1um undü4 1undv 1undz u3ne une2b une2h un2ei. un3ein un3eis unen2t u4n3erz unes2 1unget 1ungew 1unglü un3gn un2gr ung3ri ung4s1 un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku un2n3a2d un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1unsi un3sk un3sp unst1r 1unt un3ta unte4ri un3tr unt3s 2untu u1nü unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u1op u1or u3or. u3or3c u3ors u1os. uote2 u1pa u1pe2 uper1 up2fa upf2e upf1i u1pfl u3pi up2pl u1pr upt3a2 upt3erf upt3erg upt1o u1q 2ur. u1ra u2rab u3raba ura2be u2r1a2m ur3ame u2r1ana u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 ur3d2i ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri uri2c ur1im ur1ini ur3ins ur1int urk3se ur4matt 4u1ro u3rol u1rö ur3p 2urr ur3re ur2san ur2sau ur2ser urst4r ur4sw urs2ze urt2 u3ru ur2z1a ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u4saf us4ann us5art u1sä u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko usmas2 usma5sse u1so us3oc u3soh u3sol u2s1op us1ou u1sö u1sp u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u3s2piz u2spo us2por u2spu u4s3sel us2sen us5sende us6seni ussenma7s us2ser us4serf uss5erfa us2sez u3ssig us2sof u2stab ust3abe u3stal us2tat us2ten us2ter us2th ust2in u3stis u2s1tor u2strä u4strit u3s4trop u2s1tur u2sty u1su us2ur 2uß u2ß1u 2u1t u3ta. ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te ut1e2d ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu utmas2 utma5sse u3to. uto4ber uto3c u3tom ut1opf u2tops ut4or ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut1sp ut2spa utt4an ut3te ut3t4l utt1s2 utu4re utu5ru utz3eng ut2z1in ut2zo ut2z1w 2u1u2 u1ü2 u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe4n3 über3 üb3l üb3r 2üc ü1che üch3l üch4s1c üch5t4e ück1er ück3eri ück4spe ü4d3a4 üden2g ü3d2ens üd1o4 üdö4 üd3r üd3s2 üdsa1 üd3t4 üdwe2 ü4f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1erk ü2h1erz üh1i ühl1ac üh1lam üh3l2e üh3mo üh3ne üh1o üh3r2e ühr3ei. üh1ro ühr3ta ühs2 üh3stu üh3t üh4th üht4r ü1hu üh1w ü1k2 2ül ül1a ül2c ü3l4e ülla4 üll1au ül2lei ül3ler ül4leu ül2lo ü1lu ü2ment ü2n1a ün2da ün2dr ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ür4ster ürt2h ür2zö ür2zw üs2a ü2schl ü5se üse3h üse3l ü1sp üs2s1c üss2e ü4s3sel üs3si üs4st üs2su ü2sta ü2str ü1su ü1ß 2üt ü1ta ü2t1al ü1te ü1ti üt3r üt4s1 üt2tr ü1tu ü1v ü1z 2v1ab va1c val2s 2vang 2varb vas2 v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u vat3z 2v1au vä1 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits1 ve3la ve4l1au ve3le ve3li vel3l ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3nü ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 verf4 verg4 vergas6 ve3ri ve4rin ver3k vermas8sen ver3sta vert2 ver5te ver3u ve3s 2vesc 2vese ve4sh ve4s1p ves4t ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in vil3l 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol vol2la voll7auf. vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 vorö4 3voy 2v1p v2r 2v3ra v3re v4ree 2v3ro 2v1s vs2e v3s2z 2v1t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les wal4li4n 2walm wal2ta wal2to walt4st 3walz wa3na wang4s 1wann wa2p 1war2e ware1i wart4e 1was wa3sa wa4scha wa3sche wa3schi wa3sh wass4e 1wäh 1wäl wäm3 2wäng 1wäs3 wä5sc wä4ss 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg1s weg3sa 1weh we4i wei4bl 2weie weifel6d weik4 wei3sc weis4s3p wei4tr weit1s wel6schl wel6schr wel2t1 welt3a4 wel6t5en6d wem2ma2 wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer4sta wer2t1a wer4t3ei wer6t5erm wer2to 1werts 1wese wesen4s3 we2s1p wes2t we2st1a we4st3ei we4steu we4sti we2st1o2 we2stö we2st3r we4stu 1wet wet2s wett3s 2w1ey 2w1g 2w3h 1wid wi2e wie3l2 wien2e wie4st wik2 1wil wim2ma wim4m3u win4d3ec win2dr win2e 2wing win8n7er8sc win4num 1wi4r wi3s2e wi2sp 1wiss wi3st wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s1 wol4la wol2lä wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k 2w1t wti2 w2u 1wuc wuch4sc wuls2 wun2da wun4g3r wun2s 4wur. wur2fa 1wurst wus4 1wu4t1 1wüh wüs4 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag xa2m xand4 x2anz 1x2as xau3 xaus2 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. xemp4 x2en xen3s2 x2er. x2ere xers2 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is xi2s1e xi2s1o2 xis5s xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3ta. x3t2as xt1ä x2tän x2t1e2d x2t1ei x2tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt1s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere yes2 y2es. ye4st ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl5b yl3c y4le. yli4n yllo2 yllö2 yloni1 y2l1u yma2t ymp2 ym2pha ympi1 y2n1o yno4d ynt2 y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 y1s ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2pa yst4 y2s1u2 y3s2z y1t2 y2te. y2tes y3to yu2r yure3 y1v y1w y1y y1z2 za2 2z3ab zab3l za3cha za3chä 2z1ad 2z1af za3ge za3gr 3z2ah zah4ner 2z3ak za3li 2z1all 2z1am z1an za3ne 2z3anf 3zani 3z2ank zan4kl 2z3anl za3no za3ra 2zarb 2zarc za3re 2z1arm za3ro z1arti zar2tr 2z1arz z1as zast4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1äc 3z2äh zä3hi 2z1äm 2zängs z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 zeau3 zeaus4 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeik4 zei3la zeile4 2z1ein zeinbus6 zei3s2 zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 zelau2 ze2len ze2l1er ze2l1in zel3l2a zel4leh zel4li4n zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zent3s zen4z3er z2er. zer3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2s zes1e zes1i ze3sku zessen4 zes6s5end zes2sp zes1tr ze2ß1 ze2tr 2zetts 2z1ex 2z1f4 zfäs3 2z1g2 zger2a 2z1h z2hen 3zi. zi3alo zi3ar zi2dei zid3r zie4lei zi1erh zi1es. 3zig zil2e zil3l z2imm 2z1imp zim2t3 zin2e zin3ei zin4er 2z1inf z1inh zin1it zin2sa zin4ser 4zinsuf z1inv zi2o3 zi3op zirk2 zirk6s1 zis4t zistras6 zi3s2z zit2h ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zolla2 zol3le zol2li2 zol3lu zon4ter zo2o 2z1ope z1or zo2ri zor4ne zo3se 2z1osz 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3str z3sz 2z1t z2t1au z4tehe zte3str z3t2her zt3ho zt1ins zt3rec zt3s2 zu3a zub4 3zu4c zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug4ste zug1un 2z1uhr zuh2u zu1i zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s2 zu3t2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig zwei3s 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 2z1z z3z4a zze3s z3z2o zz2ö", ["length"]=103420, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=15419, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-uk.hyp0000644000175000017500000000017111761001300024663 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-uk.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-us.pat0000644000175000017500000007565111761001300024676 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-us.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z \patterns{ .ach4 .ad4der .af1t .al3t .am5at .an5c .ang4 .ani5m .ant4 .an3te .anti5s .ar5s .ar4tie .ar4ty .as3c .as1p .as1s .aster5 .atom5 .au1d .av4i .awn4 .ba4g .ba5na .bas4e .ber4 .be5ra .be3sm .be5sto .bri2 .but4ti .cam4pe .can5c .capa5b .car5ol .ca4t .ce4la .ch4 .chill5i .ci2 .cit5r .co3e .co4r .cor5ner .de4moi .de3o .de3ra .de3ri .des4c .dictio5 .do4t .du4c .dumb5 .earth5 .eas3i .eb4 .eer4 .eg2 .el5d .el3em .enam3 .en3g .en3s .eq5ui5t .er4ri .es3 .eu3 .eye5 .fes3 .for5mer .ga2 .ge2 .gen3t4 .ge5og .gi5a .gi4b .go4r .hand5i .han5k .he2 .hero5i .hes3 .het3 .hi3b .hi3er .hon5ey .hon3o .hov5 .id4l .idol3 .im3m .im5pin .in1 .in3ci .ine2 .in2k .in3s .ir5r .is4i .ju3r .la4cy .la4m .lat5er .lath5 .le2 .leg5e .len4 .lep5 .lev1 .li4g .lig5a .li2n .li3o .li4t .mag5a5 .mal5o .man5a .mar5ti .me2 .mer3c .me5ter .mis1 .mist5i .mon3e .mo3ro .mu5ta .muta5b .ni4c .od2 .odd5 .of5te .or5ato .or3c .or1d .or3t .os3 .os4tl .oth3 .out3 .ped5al .pe5te .pe5tit .pi4e .pio5n .pi2t .pre3m .ra4c .ran4t .ratio5na .ree2 .re5mit .res2 .re5stat .ri4g .rit5u .ro4q .ros5t .row5d .ru4d .sci3e .self5 .sell5 .se2n .se5rie .sh2 .si2 .sing4 .st4 .sta5bl .sy2 .ta4 .te4 .ten5an .th2 .ti2 .til4 .tim5o5 .ting4 .tin5k .ton4a .to4p .top5i .tou5s .trib5ut .un1a .un3ce .under5 .un1e .un5k .un5o .un3u .up3 .ure3 .us5a .ven4de .ve5ra .wil5i .ye4 4ab. a5bal a5ban abe2 ab5erd abi5a ab5it5ab ab5lat ab5o5liz 4abr ab5rog ab3ul a4car ac5ard ac5aro a5ceou ac1er a5chet 4a2ci a3cie ac1in a3cio ac5rob act5if ac3ul ac4um a2d ad4din ad5er. 2adi a3dia ad3ica adi4er a3dio a3dit a5diu ad4le ad3ow ad5ran ad4su 4adu a3duc ad5um ae4r aeri4e a2f aff4 a4gab aga4n ag5ell age4o 4ageu ag1i 4ag4l ag1n a2go 3agog ag3oni a5guer ag5ul a4gy a3ha a3he ah4l a3ho ai2 a5ia a3ic. ai5ly a4i4n ain5in ain5o ait5en a1j ak1en al5ab al3ad a4lar 4aldi 2ale al3end a4lenti a5le5o al1i al4ia. ali4e al5lev 4allic 4alm a5log. a4ly. 4alys 5a5lyst 5alyt 3alyz 4ama am5ab am3ag ama5ra am5asc a4matis a4m5ato am5era am3ic am5if am5ily am1in ami4no a2mo a5mon amor5i amp5en a2n an3age 3analy a3nar an3arc anar4i a3nati 4and ande4s an3dis an1dl an4dow a5nee a3nen an5est. a3neu 2ang ang5ie an1gl a4n1ic a3nies an3i3f an4ime a5nimi a5nine an3io a3nip an3ish an3it a3niu an4kli 5anniz ano4 an5ot anoth5 an2sa an4sco an4sn an2sp ans3po an4st an4sur antal4 an4tie 4anto an2tr an4tw an3ua an3ul a5nur 4ao apar4 ap5at ap5ero a3pher 4aphi a4pilla ap5illar ap3in ap3ita a3pitu a2pl apoc5 ap5ola apor5i apos3t aps5es a3pu aque5 2a2r ar3act a5rade ar5adis ar3al a5ramete aran4g ara3p ar4at a5ratio ar5ativ a5rau ar5av4 araw4 arbal4 ar4chan ar5dine ar4dr ar5eas a3ree ar3ent a5ress ar4fi ar4fl ar1i ar5ial ar3ian a3riet ar4im ar5inat ar3io ar2iz ar2mi ar5o5d a5roni a3roo ar2p ar3q arre4 ar4sa ar2sh 4as. as4ab as3ant ashi4 a5sia. a3sib a3sic 5a5si4t ask3i as4l a4soc as5ph as4sh as3ten as1tr asur5a a2ta at3abl at5ac at3alo at5ap ate5c at5ech at3ego at3en. at3era ater5n a5terna at3est at5ev 4ath ath5em a5then at4ho ath5om 4ati. a5tia at5i5b at1ic at3if ation5ar at3itu a4tog a2tom at5omiz a4top a4tos a1tr at5rop at4sk at4tag at5te at4th a2tu at5ua at5ue at3ul at3ura a2ty au4b augh3 au3gu au4l2 aun5d au3r au5sib aut5en au1th a2va av3ag a5van ave4no av3era av5ern av5ery av1i avi4er av3ig av5oc a1vor 3away aw3i aw4ly aws4 ax4ic ax4id ay5al aye4 ays4 azi4er azz5i 5ba. bad5ger ba4ge bal1a ban5dag ban4e ban3i barbi5 bari4a bas4si 1bat ba4z 2b1b b2be b3ber bbi4na 4b1d 4be. beak4 beat3 4be2d be3da be3de be3di be3gi be5gu 1bel be1li be3lo 4be5m be5nig be5nu 4bes4 be3sp be5str 3bet bet5iz be5tr be3tw be3w be5yo 2bf 4b3h bi2b bi4d 3bie bi5en bi4er 2b3if 1bil bi3liz bina5r4 bin4d bi5net bi3ogr bi5ou bi2t 3bi3tio bi3tr 3bit5ua b5itz b1j bk4 b2l2 blath5 b4le. blen4 5blesp b3lis b4lo blun4t 4b1m 4b3n bne5g 3bod bod3i bo4e bol3ic bom4bi bon4a bon5at 3boo 5bor. 4b1ora bor5d 5bore 5bori 5bos4 b5ota both5 bo4to bound3 4bp 4brit broth3 2b5s2 bsor4 2bt bt4l b4to b3tr buf4fer bu4ga bu3li bumi4 bu4n bunt4i bu3re bus5ie buss4e 5bust 4buta 3butio b5uto b1v 4b5w 5by. bys4 1ca cab3in ca1bl cach4 ca5den 4cag4 2c5ah ca3lat cal4la call5in 4calo can5d can4e can4ic can5is can3iz can4ty cany4 ca5per car5om cast5er cas5tig 4casy ca4th 4cativ cav5al c3c ccha5 cci4a ccompa5 ccon4 ccou3t 2ce. 4ced. 4ceden 3cei 5cel. 3cell 1cen 3cenc 2cen4e 4ceni 3cent 3cep ce5ram 4cesa 3cessi ces5si5b ces5t cet4 c5e4ta cew4 2ch 4ch. 4ch3ab 5chanic ch5a5nis che2 cheap3 4ched che5lo 3chemi ch5ene ch3er. ch3ers 4ch1in 5chine. ch5iness 5chini 5chio 3chit chi2z 3cho2 ch4ti 1ci 3cia ci2a5b cia5r ci5c 4cier 5cific. 4cii ci4la 3cili 2cim 2cin c4ina 3cinat cin3em c1ing c5ing. 5cino cion4 4cipe ci3ph 4cipic 4cista 4cisti 2c1it cit3iz 5ciz ck1 ck3i 1c4l4 4clar c5laratio 5clare cle4m 4clic clim4 cly4 c5n 1co co5ag coe2 2cog co4gr coi4 co3inc col5i 5colo col3or com5er con4a c4one con3g con5t co3pa cop3ic co4pl 4corb coro3n cos4e cov1 cove4 cow5a coz5e co5zi c1q cras5t 5crat. 5cratic cre3at 5cred 4c3reta cre4v cri2 cri5f c4rin cris4 5criti cro4pl crop5o cros4e cru4d 4c3s2 2c1t cta4b ct5ang c5tant c2te c3ter c4ticu ctim3i ctu4r c4tw cud5 c4uf c4ui cu5ity 5culi cul4tis 3cultu cu2ma c3ume cu4mi 3cun cu3pi cu5py cur5a4b cu5ria 1cus cuss4i 3c4ut cu4tie 4c5utiv 4cutr 1cy cze4 1d2a 5da. 2d3a4b dach4 4daf 2dag da2m2 dan3g dard5 dark5 4dary 3dat 4dativ 4dato 5dav4 dav5e 5day d1b d5c d1d4 2de. deaf5 deb5it de4bon decan4 de4cil de5com 2d1ed 4dee. de5if deli4e del5i5q de5lo d4em 5dem. 3demic dem5ic. de5mil de4mons demor5 1den de4nar de3no denti5f de3nu de1p de3pa depi4 de2pu d3eq d4erh 5derm dern5iz der5s des2 d2es. de1sc de2s5o des3ti de3str de4su de1t de2to de1v dev3il 4dey 4d1f d4ga d3ge4t dg1i d2gy d1h2 5di. 1d4i3a dia5b di4cam d4ice 3dict 3did 5di3en d1if di3ge di4lato d1in 1dina 3dine. 5dini di5niz 1dio dio5g di4pl dir2 di1re dirt5i dis1 5disi d4is3t d2iti 1di1v d1j d5k2 4d5la 3dle. 3dled 3dles. 4dless 2d3lo 4d5lu 2dly d1m 4d1n4 1do 3do. do5de 5doe 2d5of d4og do4la doli4 do5lor dom5iz do3nat doni4 doo3d dop4p d4or 3dos 4d5out do4v 3dox d1p 1dr drag5on 4drai dre4 drea5r 5dren dri4b dril4 dro4p 4drow 5drupli 4dry 2d1s2 ds4p d4sw d4sy d2th 1du d1u1a du2c d1uca duc5er 4duct. 4ducts du5el du4g d3ule dum4be du4n 4dup du4pe d1v d1w d2y 5dyn dy4se dys5p e1a4b e3act ead1 ead5ie ea4ge ea5ger ea4l eal5er eal3ou eam3er e5and ear3a ear4c ear5es ear4ic ear4il ear5k ear2t eart3e ea5sp e3ass east3 ea2t eat5en eath3i e5atif e4a3tu ea2v eav3en eav5i eav5o 2e1b e4bel. e4bels e4ben e4bit e3br e4cad ecan5c ecca5 e1ce ec5essa ec2i e4cib ec5ificat ec5ifie ec5ify ec3im eci4t e5cite e4clam e4clus e2col e4comm e4compe e4conc e2cor ec3ora eco5ro e1cr e4crem ec4tan ec4te e1cu e4cul ec3ula 2e2da 4ed3d e4d1er ede4s 4edi e3dia ed3ib ed3ica ed3im ed1it edi5z 4edo e4dol edon2 e4dri e4dul ed5ulo ee2c eed3i ee2f eel3i ee4ly ee2m ee4na ee4p1 ee2s4 eest4 ee4ty e5ex e1f e4f3ere 1eff e4fic 5efici efil4 e3fine ef5i5nite 3efit efor5es e4fuse. 4egal eger4 eg5ib eg4ic eg5ing e5git5 eg5n e4go. e4gos eg1ul e5gur 5egy e1h4 eher4 ei2 e5ic ei5d eig2 ei5gl e3imb e3inf e1ing e5inst eir4d eit3e ei3th e5ity e1j e4jud ej5udi eki4n ek4la e1la e4la. e4lac elan4d el5ativ e4law elaxa4 e3lea el5ebra 5elec e4led el3ega e5len e4l1er e1les el2f el2i e3libe e4l5ic. el3ica e3lier el5igib e5lim e4l3ing e3lio e2lis el5ish e3liv3 4ella el4lab ello4 e5loc el5og el3op. el2sh el4ta e5lud el5ug e4mac e4mag e5man em5ana em5b e1me e2mel e4met em3ica emi4e em5igra em1in2 em5ine em3i3ni e4mis em5ish e5miss em3iz 5emniz emo4g emoni5o em3pi e4mul em5ula emu3n e3my en5amo e4nant ench4er en3dic e5nea e5nee en3em en5ero en5esi en5est en3etr e3new en5ics e5nie e5nil e3nio en3ish en3it e5niu 5eniz 4enn 4eno eno4g e4nos en3ov en4sw ent5age 4enthes en3ua en5uf e3ny. 4en3z e5of eo2g e4oi4 e3ol eop3ar e1or eo3re eo5rol eos4 e4ot eo4to e5out e5ow e2pa e3pai ep5anc e5pel e3pent ep5etitio ephe4 e4pli e1po e4prec ep5reca e4pred ep3reh e3pro e4prob ep4sh ep5ti5b e4put ep5uta e1q equi3l e4q3ui3s er1a era4b 4erand er3ar 4erati. 2erb er4bl er3ch er4che 2ere. e3real ere5co ere3in er5el. er3emo er5ena er5ence 4erene er3ent ere4q er5ess er3est eret4 er1h er1i e1ria4 5erick e3rien eri4er er3ine e1rio 4erit er4iu eri4v e4riva er3m4 er4nis 4ernit 5erniz er3no 2ero er5ob e5roc ero4r er1ou er1s er3set ert3er 4ertl er3tw 4eru eru4t 5erwau e1s4a e4sage. e4sages es2c e2sca es5can e3scr es5cu e1s2e e2sec es5ecr es5enc e4sert. e4serts e4serva 4esh e3sha esh5en e1si e2sic e2sid es5iden es5igna e2s5im es4i4n esis4te esi4u e5skin es4mi e2sol es3olu e2son es5ona e1sp es3per es5pira es4pre 2ess es4si4b estan4 es3tig es5tim 4es2to e3ston 2estr e5stro estruc5 e2sur es5urr es4w eta4b eten4d e3teo ethod3 et1ic e5tide etin4 eti4no e5tir e5titio et5itiv 4etn et5ona e3tra e3tre et3ric et5rif et3rog et5ros et3ua et5ym et5z 4eu e5un e3up eu3ro eus4 eute4 euti5l eu5tr eva2p5 e2vas ev5ast e5vea ev3ell evel3o e5veng even4i ev1er e5verb e1vi ev3id evi4l e4vin evi4v e5voc e5vu e1wa e4wag e5wee e3wh ewil5 ew3ing e3wit 1exp 5eyc 5eye. eys4 1fa fa3bl fab3r fa4ce 4fag fain4 fall5e 4fa4ma fam5is 5far far5th fa3ta fa3the 4fato fault5 4f5b 4fd 4fe. feas4 feath3 fe4b 4feca 5fect 2fed fe3li fe4mo fen2d fend5e fer1 5ferr fev4 4f1f f4fes f4fie f5fin. f2f5is f4fly f2fy 4fh 1fi fi3a 2f3ic. 4f3ical f3ican 4ficate f3icen fi3cer fic4i 5ficia 5ficie 4fics fi3cu fi5del fight5 fil5i fill5in 4fily 2fin 5fina fin2d5 fi2ne f1in3g fin4n fis4ti f4l2 f5less flin4 flo3re f2ly5 4fm 4fn 1fo 5fon fon4de fon4t fo2r fo5rat for5ay fore5t for4i fort5a fos5 4f5p fra4t f5rea fres5c fri2 fril4 frol5 2f3s 2ft f4to f2ty 3fu fu5el 4fug fu4min fu5ne fu3ri fusi4 fus4s 4futa 1fy 1ga gaf4 5gal. 3gali ga3lo 2gam ga5met g5amo gan5is ga3niz gani5za 4gano gar5n4 gass4 gath3 4gativ 4gaz g3b gd4 2ge. 2ged geez4 gel4in ge5lis ge5liz 4gely 1gen ge4nat ge5niz 4geno 4geny 1geo ge3om g4ery 5gesi geth5 4geto ge4ty ge4v 4g1g2 g2ge g3ger gglu5 ggo4 gh3in gh5out gh4to 5gi. 1gi4a gia5r g1ic 5gicia g4ico gien5 5gies. gil4 g3imen 3g4in. gin5ge 5g4ins 5gio 3gir gir4l g3isl gi4u 5giv 3giz gl2 gla4 glad5i 5glas 1gle gli4b g3lig 3glo glo3r g1m g4my gn4a g4na. gnet4t g1ni g2nin g4nio g1no g4non 1go 3go. gob5 5goe 3g4o4g go3is gon2 4g3o3na gondo5 go3ni 5goo go5riz gor5ou 5gos. gov1 g3p 1gr 4grada g4rai gran2 5graph. g5rapher 5graphic 4graphy 4gray gre4n 4gress. 4grit g4ro gruf4 gs2 g5ste gth3 gu4a 3guard 2gue 5gui5t 3gun 3gus 4gu4t g3w 1gy 2g5y3n gy5ra h3ab4l hach4 hae4m hae4t h5agu ha3la hala3m ha4m han4ci han4cy 5hand. han4g hang5er hang5o h5a5niz han4k han4te hap3l hap5t ha3ran ha5ras har2d hard3e har4le harp5en har5ter has5s haun4 5haz haz3a h1b 1head 3hear he4can h5ecat h4ed he5do5 he3l4i hel4lis hel4ly h5elo hem4p he2n hena4 hen5at heo5r hep5 h4era hera3p her4ba here5a h3ern h5erou h3ery h1es he2s5p he4t het4ed heu4 h1f h1h hi5an hi4co high5 h4il2 himer4 h4ina hion4e hi4p hir4l hi3ro hir4p hir4r his3el his4s hith5er hi2v 4hk 4h1l4 hlan4 h2lo hlo3ri 4h1m hmet4 2h1n h5odiz h5ods ho4g hoge4 hol5ar 3hol4e ho4ma home3 hon4a ho5ny 3hood hoon4 hor5at ho5ris hort3e ho5ru hos4e ho5sen hos1p 1hous house3 hov5el 4h5p 4hr4 hree5 hro5niz hro3po 4h1s2 h4sh h4tar ht1en ht5es h4ty hu4g hu4min hun5ke hun4t hus3t4 hu4t h1w h4wart hy3pe hy3ph hy2s 2i1a i2al iam4 iam5ete i2an 4ianc ian3i 4ian4t ia5pe iass4 i4ativ ia4tric i4atu ibe4 ib3era ib5ert ib5ia ib3in ib5it. ib5ite i1bl ib3li i5bo i1br i2b5ri i5bun 4icam 5icap 4icar i4car. i4cara icas5 i4cay iccu4 4iceo 4ich 2ici i5cid ic5ina i2cip ic3ipa i4cly i2c5oc 4i1cr 5icra i4cry ic4te ictu2 ic4t3ua ic3ula ic4um ic5uo i3cur 2id i4dai id5anc id5d ide3al ide4s i2di id5ian idi4ar i5die id3io idi5ou id1it id5iu i3dle i4dom id3ow i4dr i2du id5uo 2ie4 ied4e 5ie5ga ield3 ien5a4 ien4e i5enn i3enti i1er. i3esc i1est i3et 4if. if5ero iff5en if4fr 4ific. i3fie i3fl 4ift 2ig iga5b ig3era ight3i 4igi i3gib ig3il ig3in ig3it i4g4l i2go ig3or ig5ot i5gre igu5i ig1ur i3h 4i5i4 i3j 4ik i1la il3a4b i4lade i2l5am ila5ra i3leg il1er ilev4 il5f il1i il3ia il2ib il3io il4ist 2ilit il2iz ill5ab 4iln il3oq il4ty il5ur il3v i4mag im3age ima5ry imenta5r 4imet im1i im5ida imi5le i5mini 4imit im4ni i3mon i2mu im3ula 2in. i4n3au 4inav incel4 in3cer 4ind in5dling 2ine i3nee iner4ar i5ness 4inga 4inge in5gen 4ingi in5gling 4ingo 4ingu 2ini i5ni. i4nia in3io in1is i5nite. 5initio in3ity 4ink 4inl 2inn 2i1no i4no4c ino4s i4not 2ins in3se insur5a 2int. 2in4th in1u i5nus 4iny 2io 4io. ioge4 io2gr i1ol io4m ion3at ion4ery ion3i io5ph ior3i i4os io5th i5oti io4to i4our 2ip ipe4 iphras4 ip3i ip4ic ip4re4 ip3ul i3qua iq5uef iq3uid iq3ui3t 4ir i1ra ira4b i4rac ird5e ire4de i4ref i4rel4 i4res ir5gi ir1i iri5de ir4is iri3tu 5i5r2iz ir4min iro4g 5iron. ir5ul 2is. is5ag is3ar isas5 2is1c is3ch 4ise is3er 3isf is5han is3hon ish5op is3ib isi4d i5sis is5itiv 4is4k islan4 4isms i2so iso5mer is1p is2pi is4py 4is1s is4sal issen4 is4ses is4ta. is1te is1ti ist4ly 4istral i2su is5us 4ita. ita4bi i4tag 4ita5m i3tan i3tat 2ite it3era i5teri it4es 2ith i1ti 4itia 4i2tic it3ica 5i5tick it3ig it5ill i2tim 2itio 4itis i4tism i2t5o5m 4iton i4tram it5ry 4itt it3uat i5tud it3ul 4itz. i1u 2iv iv3ell iv3en. i4v3er. i4vers. iv5il. iv5io iv1it i5vore iv3o3ro i4v3ot 4i5w ix4o 4iy 4izar izi4 5izont 5ja jac4q ja4p 1je jer5s 4jestie 4jesty jew3 jo4p 5judg 3ka. k3ab k5ag kais4 kal4 k1b k2ed 1kee ke4g ke5li k3en4d k1er kes4 k3est. ke4ty k3f kh4 k1i 5ki. 5k2ic k4ill kilo5 k4im k4in. kin4de k5iness kin4g ki4p kis4 k5ish kk4 k1l 4kley 4kly k1m k5nes 1k2no ko5r kosh4 k3ou kro5n 4k1s2 k4sc ks4l k4sy k5t k1w lab3ic l4abo laci4 l4ade la3dy lag4n lam3o 3land lan4dl lan5et lan4te lar4g lar3i las4e la5tan 4lateli 4lativ 4lav la4v4a 2l1b lbin4 4l1c2 lce4 l3ci 2ld l2de ld4ere ld4eri ldi4 ld5is l3dr l4dri le2a le4bi left5 5leg. 5legg le4mat lem5atic 4len. 3lenc 5lene. 1lent le3ph le4pr lera5b ler4e 3lerg 3l4eri l4ero les2 le5sco 5lesq 3less 5less. l3eva lev4er. lev4era lev4ers 3ley 4leye 2lf l5fr 4l1g4 l5ga lgar3 l4ges lgo3 2l3h li4ag li2am liar5iz li4as li4ato li5bi 5licio li4cor 4lics 4lict. l4icu l3icy l3ida lid5er 3lidi lif3er l4iff li4fl 5ligate 3ligh li4gra 3lik 4l4i4l lim4bl lim3i li4mo l4im4p l4ina 1l4ine lin3ea lin3i link5er li5og 4l4iq lis4p l1it l2it. 5litica l5i5tics liv3er l1iz 4lj lka3 l3kal lka4t l1l l4law l2le l5lea l3lec l3leg l3lel l3le4n l3le4t ll2i l2lin4 l5lina ll4o lloqui5 ll5out l5low 2lm l5met lm3ing l4mod lmon4 2l1n2 3lo. lob5al lo4ci 4lof 3logic l5ogo 3logu lom3er 5long lon4i l3o3niz lood5 5lope. lop3i l3opm lora4 lo4rato lo5rie lor5ou 5los. los5et 5losophiz 5losophy los4t lo4ta loun5d 2lout 4lov 2lp lpa5b l3pha l5phi lp5ing l3pit l4pl l5pr 4l1r 2l1s2 l4sc l2se l4sie 4lt lt5ag ltane5 l1te lten4 ltera4 lth3i l5ties. ltis4 l1tr ltu2 ltur3a lu5a lu3br luch4 lu3ci lu3en luf4 lu5id lu4ma 5lumi l5umn. 5lumnia lu3o luo3r 4lup luss4 lus3te 1lut l5ven l5vet4 2l1w 1ly 4lya 4lyb ly5me ly3no 2lys4 l5yse 1ma 2mab ma2ca ma5chine ma4cl mag5in 5magn 2mah maid5 4mald ma3lig ma5lin mal4li mal4ty 5mania man5is man3iz 4map ma5rine. ma5riz mar4ly mar3v ma5sce mas4e mas1t 5mate math3 ma3tis 4matiza 4m1b mba4t5 m5bil m4b3ing mbi4v 4m5c 4me. 2med 4med. 5media me3die m5e5dy me2g mel5on mel4t me2m mem1o3 1men men4a men5ac men4de 4mene men4i mens4 mensu5 3ment men4te me5on m5ersa 2mes 3mesti me4ta met3al me1te me5thi m4etr 5metric me5trie me3try me4v 4m1f 2mh 5mi. mi3a mid4a mid4g mig4 3milia m5i5lie m4ill min4a 3mind m5inee m4ingl min5gli m5ingly min4t m4inu miot4 m2is mis4er. mis5l mis4ti m5istry 4mith m2iz 4mk 4m1l m1m mma5ry 4m1n mn4a m4nin mn4o 1mo 4mocr 5mocratiz mo2d1 mo4go mois2 moi5se 4mok mo5lest mo3me mon5et mon5ge moni3a mon4ism mon4ist mo3niz monol4 mo3ny. mo2r 4mora. mos2 mo5sey mo3sp moth3 m5ouf 3mous mo2v 4m1p mpara5 mpa5rab mpar5i m3pet mphas4 m2pi mpi4a mp5ies m4p1in m5pir mp5is mpo3ri mpos5ite m4pous mpov5 mp4tr m2py 4m3r 4m1s2 m4sh m5si 4mt 1mu mula5r4 5mult multi3 3mum mun2 4mup mu4u 4mw 1na 2n1a2b n4abu 4nac. na4ca n5act nag5er. nak4 na4li na5lia 4nalt na5mit n2an nanci4 nan4it nank4 nar3c 4nare nar3i nar4l n5arm n4as nas4c nas5ti n2at na3tal nato5miz n2au nau3se 3naut nav4e 4n1b4 ncar5 n4ces. n3cha n5cheo n5chil n3chis nc1in nc4it ncour5a n1cr n1cu n4dai n5dan n1de nd5est. ndi4b n5d2if n1dit n3diz n5duc ndu4r nd2we 2ne. n3ear ne2b neb3u ne2c 5neck 2ned ne4gat neg5ativ 5nege ne4la nel5iz ne5mi ne4mo 1nen 4nene 3neo ne4po ne2q n1er nera5b n4erar n2ere n4er5i ner4r 1nes 2nes. 4nesp 2nest 4nesw 3netic ne4v n5eve ne4w n3f n4gab n3gel nge4n4e n5gere n3geri ng5ha n3gib ng1in n5git n4gla ngov4 ng5sh n1gu n4gum n2gy 4n1h4 nha4 nhab3 nhe4 3n4ia ni3an ni4ap ni3ba ni4bl ni4d ni5di ni4er ni2fi ni5ficat n5igr nik4 n1im ni3miz n1in 5nine. nin4g ni4o 5nis. nis4ta n2it n4ith 3nitio n3itor ni3tr n1j 4nk2 n5kero n3ket nk3in n1kl 4n1l n5m nme4 nmet4 4n1n2 nne4 nni3al nni4v nob4l no3ble n5ocl 4n3o2d 3noe 4nog noge4 nois5i no5l4i 5nologis 3nomic n5o5miz no4mo no3my no4n non4ag non5i n5oniz 4nop 5nop5o5li nor5ab no4rary 4nosc nos4e nos5t no5ta 1nou 3noun nov3el3 nowl3 n1p4 npi4 npre4c n1q n1r nru4 2n1s2 ns5ab nsati4 ns4c n2se n4s3es nsid1 nsig4 n2sl ns3m n4soc ns4pe n5spi nsta5bl n1t nta4b nter3s nt2i n5tib nti4er nti2f n3tine n4t3ing nti4p ntrol5li nt4s ntu3me nu1a nu4d nu5en nuf4fe n3uin 3nu3it n4um nu1me n5umi 3nu4n n3uo nu3tr n1v2 n1w4 nym4 nyp4 4nz n3za 4oa oad3 o5a5les oard3 oas4e oast5e oat5i ob3a3b o5bar obe4l o1bi o2bin ob5ing o3br ob3ul o1ce och4 o3chet ocif3 o4cil o4clam o4cod oc3rac oc5ratiz ocre3 5ocrit octor5a oc3ula o5cure od5ded od3ic odi3o o2do4 odor3 od5uct. od5ucts o4el o5eng o3er oe4ta o3ev o2fi of5ite ofit4t o2g5a5r og5ativ o4gato o1ge o5gene o5geo o4ger o3gie 1o1gis og3it o4gl o5g2ly 3ogniz o4gro ogu5i 1ogy 2ogyn o1h2 ohab5 oi2 oic3es oi3der oiff4 oig4 oi5let o3ing oint5er o5ism oi5son oist5en oi3ter o5j 2ok o3ken ok5ie o1la o4lan olass4 ol2d old1e ol3er o3lesc o3let ol4fi ol2i o3lia o3lice ol5id. o3li4f o5lil ol3ing o5lio o5lis. ol3ish o5lite o5litio o5liv olli4e ol5ogiz olo4r ol5pl ol2t ol3ub ol3ume ol3un o5lus ol2v o2ly om5ah oma5l om5atiz om2be om4bl o2me om3ena om5erse o4met om5etry o3mia om3ic. om3ica o5mid om1in o5mini 5ommend omo4ge o4mon om3pi ompro5 o2n on1a on4ac o3nan on1c 3oncil 2ond on5do o3nen on5est on4gu on1ic o3nio on1is o5niu on3key on4odi on3omy on3s onspi4 onspir5a onsu4 onten4 on3t4i ontif5 on5um onva5 oo2 ood5e ood5i oo4k oop3i o3ord oost5 o2pa ope5d op1er 3opera 4operag 2oph o5phan o5pher op3ing o3pit o5pon o4posi o1pr op1u opy5 o1q o1ra o5ra. o4r3ag or5aliz or5ange ore5a o5real or3ei ore5sh or5est. orew4 or4gu 4o5ria or3ica o5ril or1in o1rio or3ity o3riu or2mi orn2e o5rof or3oug or5pe 3orrh or4se ors5en orst4 or3thi or3thy or4ty o5rum o1ry os3al os2c os4ce o3scop 4oscopi o5scr os4i4e os5itiv os3ito os3ity osi4u os4l o2so os4pa os4po os2ta o5stati os5til os5tit o4tan otele4g ot3er. ot5ers o4tes 4oth oth5esi oth3i4 ot3ic. ot5ica o3tice o3tif o3tis oto5s ou2 ou3bl ouch5i ou5et ou4l ounc5er oun2d ou5v ov4en over4ne over3s ov4ert o3vis oviti4 o5v4ol ow3der ow3el ow5est ow1i own5i o4wo oy1a 1pa pa4ca pa4ce pac4t p4ad 5pagan p3agat p4ai pain4 p4al pan4a pan3el pan4ty pa3ny pa1p pa4pu para5bl par5age par5di 3pare par5el p4a4ri par4is pa2te pa5ter 5pathic pa5thy pa4tric pav4 3pay 4p1b pd4 4pe. 3pe4a pear4l pe2c 2p2ed 3pede 3pedi pedia4 ped4ic p4ee pee4d pek4 pe4la peli4e pe4nan p4enc pen4th pe5on p4era. pera5bl p4erag p4eri peri5st per4mal perme5 p4ern per3o per3ti pe5ru per1v pe2t pe5ten pe5tiz 4pf 4pg 4ph. phar5i phe3no ph4er ph4es. ph1ic 5phie ph5ing 5phisti 3phiz ph2l 3phob 3phone 5phoni pho4r 4phs ph3t 5phu 1phy pi3a pian4 pi4cie pi4cy p4id p5ida pi3de 5pidi 3piec pi3en pi4grap pi3lo pi2n p4in. pind4 p4ino 3pi1o pion4 p3ith pi5tha pi2tu 2p3k2 1p2l2 3plan plas5t pli3a pli5er 4plig pli4n ploi4 plu4m plum4b 4p1m 2p3n po4c 5pod. po5em po3et5 5po4g poin2 5point poly5t po4ni po4p 1p4or po4ry 1pos pos1s p4ot po4ta 5poun 4p1p ppa5ra p2pe p4ped p5pel p3pen p3per p3pet ppo5site pr2 pray4e 5preci pre5co pre3em pref5ac pre4la pre3r p3rese 3press pre5ten pre3v 5pri4e prin4t3 pri4s pris3o p3roca prof5it pro3l pros3e pro1t 2p1s2 p2se ps4h p4sib 2p1t pt5a4b p2te p2th pti3m ptu4r p4tw pub3 pue4 puf4 pul3c pu4m pu2n pur4r 5pus pu2t 5pute put3er pu3tr put4ted put4tin p3w qu2 qua5v 2que. 3quer 3quet 2rab ra3bi rach4e r5acl raf5fi raf4t r2ai ra4lo ram3et r2ami rane5o ran4ge r4ani ra5no rap3er 3raphy rar5c rare4 rar5ef 4raril r2as ration4 rau4t ra5vai rav3el ra5zie r1b r4bab r4bag rbi2 rbi4f r2bin r5bine rb5ing. rb4o r1c r2ce rcen4 r3cha rch4er r4ci4b rc4it rcum3 r4dal rd2i rdi4a rdi4er rdin4 rd3ing 2re. re1al re3an re5arr 5reav re4aw r5ebrat rec5oll rec5ompe re4cre 2r2ed re1de re3dis red5it re4fac re2fe re5fer. re3fi re4fy reg3is re5it re1li re5lu r4en4ta ren4te re1o re5pin re4posi re1pu r1er4 r4eri rero4 re5ru r4es. re4spi ress5ib res2t re5stal re3str re4ter re4ti4z re3tri reu2 re5uti rev2 re4val rev3el r5ev5er. re5vers re5vert re5vil rev5olu re4wh r1f rfu4 r4fy rg2 rg3er r3get r3gic rgi4n rg3ing r5gis r5git r1gl rgo4n r3gu rh4 4rh. 4rhal ri3a ria4b ri4ag r4ib rib3a ric5as r4ice 4rici 5ricid ri4cie r4ico rid5er ri3enc ri3ent ri1er ri5et rig5an 5rigi ril3iz 5riman rim5i 3rimo rim4pe r2ina 5rina. rin4d rin4e rin4g ri1o 5riph riph5e ri2pl rip5lic r4iq r2is r4is. ris4c r3ish ris4p ri3ta3b r5ited. rit5er. rit5ers rit3ic ri2tu rit5ur riv5el riv3et riv3i r3j r3ket rk4le rk4lin r1l rle4 r2led r4lig r4lis rl5ish r3lo4 r1m rma5c r2me r3men rm5ers rm3ing r4ming. r4mio r3mit r4my r4nar r3nel r4ner r5net r3ney r5nic r1nis4 r3nit r3niv rno4 r4nou r3nu rob3l r2oc ro3cr ro4e ro1fe ro5fil rok2 ro5ker 5role. rom5ete rom4i rom4p ron4al ron4e ro5n4is ron4ta 1room 5root ro3pel rop3ic ror3i ro5ro ros5per ros4s ro4the ro4ty ro4va rov5el rox5 r1p r4pea r5pent rp5er. r3pet rp4h4 rp3ing r3po r1r4 rre4c rre4f r4reo rre4st rri4o rri4v rron4 rros4 rrys4 4rs2 r1sa rsa5ti rs4c r2se r3sec rse4cr rs5er. rs3es rse5v2 r1sh r5sha r1si r4si4b rson3 r1sp r5sw rtach4 r4tag r3teb rten4d rte5o r1ti rt5ib rti4d r4tier r3tig rtil3i rtil4l r4tily r4tist r4tiv r3tri rtroph4 rt4sh ru3a ru3e4l ru3en ru4gl ru3in rum3pl ru2n runk5 run4ty r5usc ruti5n rv4e rvel4i r3ven rv5er. r5vest r3vey r3vic rvi4v r3vo r1w ry4c 5rynge ry3t sa2 2s1ab 5sack sac3ri s3act 5sai salar4 sal4m sa5lo sal4t 3sanc san4de s1ap sa5ta 5sa3tio sat3u sau4 sa5vor 5saw 4s5b scan4t5 sca4p scav5 s4ced 4scei s4ces sch2 s4cho 3s4cie 5scin4d scle5 s4cli scof4 4scopy scour5a s1cu 4s5d 4se. se4a seas4 sea5w se2c3o 3sect 4s4ed se4d4e s5edl se2g seg3r 5sei se1le 5self 5selv 4seme se4mol sen5at 4senc sen4d s5ened sen5g s5enin 4sentd 4sentl sep3a3 4s1er. s4erl ser4o 4servo s1e4s se5sh ses5t 5se5um 5sev sev3en sew4i 5sex 4s3f 2s3g s2h 2sh. sh1er 5shev sh1in sh3io 3ship shiv5 sho4 sh5old shon3 shor4 short5 4shw si1b s5icc 3side. 5sides 5sidi si5diz 4signa sil4e 4sily 2s1in s2ina 5sine. s3ing 1sio 5sion sion5a si2r sir5a 1sis 3sitio 5siu 1siv 5siz sk2 4ske s3ket sk5ine sk5ing s1l2 s3lat s2le slith5 2s1m s3ma small3 sman3 smel4 s5men 5smith smol5d4 s1n4 1so so4ce soft3 so4lab sol3d2 so3lic 5solv 3som 3s4on. sona4 son4g s4op 5sophic s5ophiz s5ophy sor5c sor5d 4sov so5vi 2spa 5spai spa4n spen4d 2s5peo 2sper s2phe 3spher spho5 spil4 sp5ing 4spio s4ply s4pon spor4 4spot squal4l s1r 2ss s1sa ssas3 s2s5c s3sel s5seng s4ses. s5set s1si s4sie ssi4er ss5ily s4sl ss4li s4sn sspend4 ss2t ssur5a ss5w 2st. s2tag s2tal stam4i 5stand s4ta4p 5stat. s4ted stern5i s5tero ste2w stew5a s3the st2i s4ti. s5tia s1tic 5stick s4tie s3tif st3ing 5stir s1tle 5stock stom3a 5stone s4top 3store st4r s4trad 5stratu s4tray s4trid 4stry 4st3w s2ty 1su su1al su4b3 su2g3 su5is suit3 s4ul su2m sum3i su2n su2r 4sv sw2 4swo s4y 4syc 3syl syn5o sy5rin 1ta 3ta. 2tab ta5bles 5taboliz 4taci ta5do 4taf4 tai5lo ta2l ta5la tal5en tal3i 4talk tal4lis ta5log ta5mo tan4de tanta3 ta5per ta5pl tar4a 4tarc 4tare ta3riz tas4e ta5sy 4tatic ta4tur taun4 tav4 2taw tax4is 2t1b 4tc t4ch tch5et 4t1d 4te. tead4i 4teat tece4 5tect 2t1ed te5di 1tee teg4 te5ger te5gi 3tel. teli4 5tels te2ma2 tem3at 3tenan 3tenc 3tend 4tenes 1tent ten4tag 1teo te4p te5pe ter3c 5ter3d 1teri ter5ies ter3is teri5za 5ternit ter5v 4tes. 4tess t3ess. teth5e 3teu 3tex 4tey 2t1f 4t1g 2th. than4 th2e 4thea th3eas the5at the3is 3thet th5ic. th5ica 4thil 5think 4thl th5ode 5thodic 4thoo thor5it tho5riz 2ths 1tia ti4ab ti4ato 2ti2b 4tick t4ico t4ic1u 5tidi 3tien tif2 ti5fy 2tig 5tigu till5in 1tim 4timp tim5ul 2t1in t2ina 3tine. 3tini 1tio ti5oc tion5ee 5tiq ti3sa 3tise tis4m ti5so tis4p 5tistica ti3tl ti4u 1tiv tiv4a 1tiz ti3za ti3zen 2tl t5la tlan4 3tle. 3tled 3tles. t5let. t5lo 4t1m tme4 2t1n2 1to to3b to5crat 4todo 2tof to2gr to5ic to2ma tom4b to3my ton4ali to3nat 4tono 4tony to2ra to3rie tor5iz tos2 5tour 4tout to3war 4t1p 1tra tra3b tra5ch traci4 trac4it trac4te tras4 tra5ven trav5es5 tre5f tre4m trem5i 5tria tri5ces 5tricia 4trics 2trim tri4v tro5mi tron5i 4trony tro5phe tro3sp tro3v tru5i trus4 4t1s2 t4sc tsh4 t4sw 4t3t2 t4tes t5to ttu4 1tu tu1a tu3ar tu4bi tud2 4tue 4tuf4 5tu3i 3tum tu4nis 2t3up. 3ture 5turi tur3is tur5o tu5ry 3tus 4tv tw4 4t1wa twis4 4two 1ty 4tya 2tyl type3 ty5ph 4tz tz4e 4uab uac4 ua5na uan4i uar5ant uar2d uar3i uar3t u1at uav4 ub4e u4bel u3ber u4bero u1b4i u4b5ing u3ble. u3ca uci4b uc4it ucle3 u3cr u3cu u4cy ud5d ud3er ud5est udev4 u1dic ud3ied ud3ies ud5is u5dit u4don ud4si u4du u4ene uens4 uen4te uer4il 3ufa u3fl ugh3en ug5in 2ui2 uil5iz ui4n u1ing uir4m uita4 uiv3 uiv4er. u5j 4uk u1la ula5b u5lati ulch4 5ulche ul3der ul4e u1len ul4gi ul2i u5lia ul3ing ul5ish ul4lar ul4li4b ul4lis 4ul3m u1l4o 4uls uls5es ul1ti ultra3 4ultu u3lu ul5ul ul5v um5ab um4bi um4bly u1mi u4m3ing umor5o um2p unat4 u2ne un4er u1ni un4im u2nin un5ish uni3v un3s4 un4sw unt3ab un4ter. un4tes unu4 un5y un5z u4ors u5os u1ou u1pe uper5s u5pia up3ing u3pl up3p upport5 upt5ib uptu4 u1ra 4ura. u4rag u4ras ur4be urc4 ur1d ure5at ur4fer ur4fr u3rif uri4fic ur1in u3rio u1rit ur3iz ur2l url5ing. ur4no uros4 ur4pe ur4pi urs5er ur5tes ur3the urti4 ur4tie u3ru 2us u5sad u5san us4ap usc2 us3ci use5a u5sia u3sic us4lin us1p us5sl us5tere us1tr u2su usur4 uta4b u3tat 4ute. 4utel 4uten uten4i 4u1t2i uti5liz u3tine ut3ing ution5a u4tis 5u5tiz u4t1l ut5of uto5g uto5matic u5ton u4tou uts4 u3u uu4m u1v2 uxu3 uz4e 1va 5va. 2v1a4b vac5il vac3u vag4 va4ge va5lie val5o val1u va5mo va5niz va5pi var5ied 3vat 4ve. 4ved veg3 v3el. vel3li ve4lo v4ely ven3om v5enue v4erd 5vere. v4erel v3eren ver5enc v4eres ver3ie vermi4n 3verse ver3th v4e2s 4ves. ves4te ve4te vet3er ve4ty vi5ali 5vian 5vide. 5vided 4v3iden 5vides 5vidi v3if vi5gn vik4 2vil 5vilit v3i3liz v1in 4vi4na v2inc vin5d 4ving vio3l v3io4r vi1ou vi4p vi5ro vis3it vi3so vi3su 4viti vit3r 4vity 3viv 5vo. voi4 3vok vo4la v5ole 5volt 3volv vom5i vor5ab vori4 vo4ry vo4ta 4votee 4vv4 v4y w5abl 2wac wa5ger wag5o wait5 w5al. wam4 war4t was4t wa1te wa5ver w1b wea5rie weath3 wed4n weet3 wee5v wel4l w1er west3 w3ev whi4 wi2 wil2 will5in win4de win4g wir4 3wise with3 wiz5 w4k wl4es wl3in w4no 1wo2 wom1 wo5ven w5p wra4 wri4 writa4 w3sh ws4l ws4pe w5s4t 4wt wy4 x1a xac5e x4ago xam3 x4ap xas5 x3c2 x1e xe4cuto x2ed xer4i xe5ro x1h xhi2 xhil5 xhu4 x3i xi5a xi5c xi5di x4ime xi5miz x3o x4ob x3p xpan4d xpecto5 xpe3d x1t2 x3ti x1u xu3a xx4 y5ac 3yar4 y5at y1b y1c y2ce yc5er y3ch ych4e ycom4 ycot4 y1d y5ee y1er y4erf yes4 ye4t y5gi 4y3h y1i y3la ylla5bl y3lo y5lu ymbol5 yme4 ympa3 yn3chr yn5d yn5g yn5ic 5ynx y1o4 yo5d y4o5g yom4 yo5net y4ons y4os y4ped yper5 yp3i y3po y4poc yp2ta y5pu yra5m yr5ia y3ro yr4r ys4c y3s2e ys3ica ys3io 3ysis y4so yss4 ys1t ys3ta ysur4 y3thin yt3ic y1w za1 z5a2b zar2 4zb 2ze ze4n ze4p z1er ze3ro zet4 2z1i z4il z4is 5zl 4zm 1zo zo4m zo5ol zte4 4z1z2 z4zy .con5gr .de5riva .dri5v4 .eth1y6l1 .eu4ler .ev2 .ever5si5b .ga4s1om1 .ge4ome .ge5ot1 .he3mo1 .he3p6a .he3roe .in5u2t .kil2n3i .ko6r1te1 .le6ices .me4ga1l .met4ala .mim5i2c1 .mi1s4ers .ne6o3f .noe1th .non1e2m .poly1s .post1am .pre1am .rav5en1o .semi5 .sem4ic .semid6 .semip4 .semir4 .sem6is4 .semiv4 .sph6in1 .spin1o .ta5pes1tr .te3legr .to6pog .to2q .un3at5t .un5err5 .vi2c3ar .we2b1l .re1e4c a5bolic a2cabl af6fish am1en3ta5b anal6ys ano5a2c ans5gr ans3v anti1d an3ti1n2 anti1re a4pe5able ar3che5t ar2range as5ymptot ath3er1o1s at6tes. augh4tl au5li5f av3iou back2er. ba6r1onie ba1thy bbi4t be2vie bi5d2if bil2lab bio5m bi1orb bio1rh b1i3tive blan2d1 blin2d1 blon2d2 bor1no5 bo2t1u1l brus4q bus6i2er bus6i2es buss4ing but2ed. but4ted cad5e1m cat1a1s2 4chs. chs3hu chie5vo cig3a3r cin2q cle4ar co6ph1o3n cous2ti cri3tie croc1o1d cro5e2co c2tro3me6c 1cu2r1ance 2d3alone data1b dd5a5b d2d5ib de4als. de5clar1 de2c5lina de3fin3iti de2mos des3ic de2tic dic1aid dif5fra 3di1methy di2ren di2rer 2d1lead 2d1li2e 3do5word dren1a5l drif2t1a d1ri3pleg5 drom3e5d d3tab du2al. du1op1o1l ea4n3ies e3chas edg1l ed1uling eli2t1is e1loa en1dix eo3grap 1e6p3i3neph1 e2r3i4an. e3spac6i eth1y6l1ene 5eu2clid1 feb1rua fermi1o 3fich fit5ted. fla1g6el flow2er. 3fluor gen2cy. ge3o1d ght1we g1lead get2ic. 4g1lish 5glo5bin 1g2nac gnet1ism gno5mo g2n1or. g2noresp 2g1o4n3i1za graph5er. griev1 g1utan hair1s ha2p3ar5r hatch1 hex2a3 hite3sid h3i5pel1a4 hnau3z ho6r1ic. h2t1eou hypo1tha id4ios ifac1et ign4it ignit1er i4jk im3ped3a infra1s2 i5nitely. irre6v3oc i1tesima ith5i2l itin5er5ar janu3a japan1e2s je1re1m 1ke6ling 1ki5netic 1kovian k3sha la4c3i5e lai6n3ess lar5ce1n l3chai l3chil6d1 lead6er. lea4s1a 1lec3ta6b le3g6en2dre 1le1noid lith1o5g ll1fl l2l3ish l5mo3nell lo1bot1o1 lo2ges. load4ed. load6er. l3tea lth5i2ly lue1p 1lunk3er 1lum5bia. 3lyg1a1mi ly5styr ma1la1p m2an. man3u1sc mar1gin1 medi2c med3i3cin medio6c1 me3gran3 m2en. 3mi3da5b 3milita mil2l1ag mil5li5li mi6n3is. mi1n2ut1er mi1n2ut1est m3ma1b 5maph1ro1 5moc1ra1t mo5e2las mol1e5c mon4ey1l mono3ch mo4no1en moro6n5is mono1s6 moth4et2 m1ou3sin m5shack2 mu2dro mul2ti5u n3ar4chs. n3ch2es1t ne3back 2ne1ski n1dieck nd3thr nfi6n3ites 4n5i4an. nge5nes ng1ho ng1spr nk3rup n5less 5noc3er1os nom1a6l nom5e1no n1o1mist non1eq non1i4so 5nop1oly. no1vemb ns5ceiv ns4moo ntre1p obli2g1 o3chas odel3li odit1ic oerst2 oke1st o3les3ter oli3gop1o1 o1lo3n4om o3mecha6 onom1ic o3norma o3no2t1o3n o3nou op1ism. or4tho3ni4t orth1ri or5tively o4s3pher o5test1er o5tes3tor oth3e1o1s ou3ba3do o6v3i4an. oxi6d1ic pal6mat parag6ra4 par4a1le param4 para3me pee2v1 phi2l3ant phi5lat1e3l pi2c1a3d pli2c1ab pli5nar poin3ca 1pole. poly1e po3lyph1ono 1prema3c pre1neu pres2pli pro2cess proc3i3ty. pro2g1e 3pseu2d pseu3d6o3d2 pseu3d6o3f2 pto3mat4 p5trol3 pu5bes5c quain2t1e qu6a3si3 quasir6 quasis6 quin5tes5s qui3v4ar r1abolic 3rab1o1loi ra3chu r3a3dig radi1o6g r2amen 3ra4m5e1triz ra3mou ra5n2has ra1or r3bin1ge re2c3i1pr rec5t6ang re4t1ribu r3ial. riv1o1l 6rk. rk1ho r1krau 6rks. r5le5qu ro1bot1 ro5e2las ro5epide1 ro3mesh ro1tron r3pau5li rse1rad1i r1thou r1treu r1veil rz1sc sales3c sales5w 5sa3par5il sca6p1er sca2t1ol s4chitz schro1ding1 1sci2utt scrap4er. scy4th1 sem1a1ph se3mes1t se1mi6t5ic sep3temb shoe1st sid2ed. side5st side5sw si5resid sky1sc 3slova1kia 3s2og1a1my so2lute 3s2pace 1s2pacin spe3cio spher1o spi2c1il spokes5w sports3c sports3w s3qui3to s2s1a3chu1 ss3hat s2s3i4an. s5sign5a3b 1s2tamp s2t1ant5shi star3tli sta1ti st5b 1stor1ab strat1a1g strib5ut st5scr stu1pi4d1 styl1is su2per1e6 1sync 1syth3i2 swimm6 5tab1o1lism ta3gon. talk1a5 t1a1min t6ap6ath 5tar2rh tch1c tch3i1er t1cr teach4er. tele2g tele1r6o 3ter1gei ter2ic. t3ess2es tha4l1am tho3don th1o5gen1i tho1k2er thy4l1an thy3sc 2t3i4an. ti2n3o1m t1li2er tolo2gy tot3ic trai3tor1 tra1vers travers3a3b treach1e tr4ial. 3tro1le1um trof4ic. tro3fit tro1p2is 3trop1o5les 3trop1o5lis t1ro1pol3it tsch3ie ttrib1ut1 turn3ar t1wh ty2p5al ua3drati uad1ratu u5do3ny uea1m u2r1al. uri4al. us2er. v1ativ v1oir5du1 va6guer vaude3v 1verely. v1er1eig ves1tite vi1vip3a3r voice1p waste3w6a2 wave1g4 w3c week1n wide5sp wo4k1en wrap3aro writ6er. x1q xquis3 y5che3d ym5e5try y1stro yes5ter1y z3ian. z3o1phr z2z3w}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lv.lua0000644000175000017500000024654512161703335024703 0ustar norbertnorbertreturn { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ ["n"]=0, }, ["metadata"]={ ["mnemonic"]="lv", ["source"]="hyph-lv", ["texcomment"]="% Latvian hyphenation patterns\ % \ % (more info about the licence to be added later)\ % \ % This file is part if hyph-utf8 package and resulted from semi-manual\ % conversions of hyphenation patterns into UTF-8 in November 2008 by Mojca &\ % Arthur.\ %\ % This file is available under the term of the GNU GPL, version 2.\ %\ % Source: Latvian Lingucomponents for OpenOffice\ % Homepage: http://sourceforge.net/projects/openoffice-lv\ % File: hyph_lv_lv.dic (version 0.3, 2005-09-14)\ % Author: Copyright (C) 2004-2005 Janis Vilims, jvilims@apollo.lv\ % License: Lesser General Public Licence (LGPL) 2.1\ %\ % \ % ", }, ["patterns"]={ ["characters"]="abcdefghijklmnoprstuvzāčēģīķļņšūž", ["data"]="d4z d4ž a2i a2u i2e e2i u2i i2u o2i o2u e2u .vi1s2a. .vi1s2ā. .vi1s2i. .vi1s2os. .vi1s2u. .vi1s2iem. o1pī ū1rē i1ta ū1ga ē1žu ū1to ā1ni i1rē i1čo ā1bu o1mī o1kā o1či ā1lo e1čū o1ļā e1la i1šo o1bi ē1cē ā1ru o1si u1no e1hā ā1nē e1bū i1ru o1sū a1ča ā1ča o1rē i1ke o1ra u1te i1zo i1gi ē1ma ū1ķe ū1ca o1dē a1nā ā1ge e1či ū1bē ē1tā ā1fi i1zi o1lī e1še e1gā i1fo a1ņo u1to ī1zē ū1gu ā1ša i1ķi ū1nē ī1ma ā1te ē1kē ū1mā u1zu o1sā ē1bu ī1ga e1di ī1te a1ļī e1tē i1že o1fo ā1pu o1hu ē1do o1du ā1ma ū1mi e1re i1ha i1be e1lu ā1ja ū1ta a1šū a1da ē1cī i1bu a1pī u1ņā e1zu ū1no e1nī i1no e1mā ē1ļa ū1pā ā1be ā1mo ī1ja e1ji ī1re e1ce ī1ri ī1tī ū1ni ī1žī i1ži a1fī a1be e1šā e1ķo e1pū e1ļī u1ģi ē1tī a1ci e1jē a1zī o1lē u1ga ī1ci a1ke e1ho i1nū ū1šī e1si e1bo o1ģē u1ņi u1sē ē1bā o1ša ū1ro ē1ce i1zī i1ve o1ļu i1dī o1ku e1vē a1ri u1sā i1pā i1dē o1pū ī1vī a1me ē1ze ī1bē u1ķe a1bē a1ja ā1ļo a1jē e1fe o1pu o1to ē1vē a1ki o1mā o1lo a1lo ē1ķi e1šē ū1dī ū1cā o1zo o1gū o1gā ī1tē e1zē ī1le e1gī ī1na o1me e1po e1fu a1ģe u1rū u1ri ū1jo e1dē a1ļa a1žā ī1ļa ē1ne a1zū ā1vē e1so o1mi o1šo ē1sī ē1ļu e1ga i1pē e1vu o1ru ē1ju u1či ā1va a1hu ī1sē e1ķa i1rā a1čā ī1ki i1ti u1cu i1žu ā1jo u1ki u1mu o1ķī e1ma ī1ļo ē1de o1čo ā1ču i1ņa u1ļa u1mā o1he i1lī a1de o1fa ē1ro o1sī ā1ri ū1ti o1bē a1jā ū1zu ā1vī e1ļe o1ņa ī1de ī1še a1kū ū1ja o1dī e1ži e1ri ī1gā e1ki u1ze u1ma i1vī ē1pī u1lu e1ti o1čā a1ķi ū1zē a1ļo i1či o1ke a1ģu i1vē u1ču u1ca u1vu o1ļa i1ri o1ņo u1co a1rā o1jā ī1bi e1čī ē1rē e1kā i1pi a1ka ā1vu ū1ža e1mī e1vī o1gi a1pē ū1zā i1cē e1va o1nī ī1ru e1pā a1ce ē1kā o1ja a1hē a1bo ū1mu ī1ve i1nā i1fi o1va u1žu e1ģi ē1nī i1li i1ņo u1la ī1ģe e1ca a1tā ū1zi a1bū ē1pē ī1su ī1pā ī1zu ū1di e1lo ā1mā e1ci a1ža ē1to e1rū ā1la u1ķu o1ģī ā1pa e1lū e1sī e1bē i1co i1ķē a1šo ū1ku u1šā o1di a1ņa ī1pa o1pi a1žē a1si a1ha u1šo ē1mā ī1mo ā1žo ū1lu e1žū o1ķi ā1vā a1žo i1zā a1ku o1zi o1dā e1cu ī1no e1zi e1jū ā1ņo i1ce ū1lē a1žī o1mē i1bī o1re e1zū ū1ra a1gi i1lē ī1bā ū1šu e1bi i1gū ū1ķi ē1va ā1to u1ce a1pū ā1gi i1ķe ā1kā e1ķī ē1ža u1ve u1vo ē1no o1bu a1tī e1fi e1ļo ū1ži a1tū ī1ti ī1la i1ho ē1gi i1fū a1tē ā1ķi a1mi e1ra u1ja e1me ī1bu i1pu o1la a1ķī u1šu o1ža a1rū ū1ļa e1ču ī1lo o1nu ā1jē a1dā u1rē u1rī ē1žo i1mā a1zo o1žu ē1da ī1co ū1zī ā1sa ē1šu ū1po i1si u1zē ū1ri u1zī ū1gā e1pu ā1du e1cē ē1ji i1bi ē1rā i1ļi u1nu i1ki a1mū ī1ni ā1fe ē1ca ā1ņi u1go a1nu e1nē u1ku ā1ži ē1go e1če ē1za ā1čā i1ģe ī1go a1go e1bī i1ze e1šū o1kē o1pē i1na ā1ra ā1jī o1za e1zā a1lā e1ņē a1je ē1si ā1bo u1gā i1sē u1ši u1bī a1vā e1ko ā1šu ā1ģē i1mo e1ļā i1tē u1ļā a1ņē u1na ī1vo ū1me a1hī ū1ka ā1mī ā1lī ū1tu e1je ī1vā a1ba ī1dā ū1ko ū1cē ā1nī a1ļē u1ju ā1žā ū1mo i1ge ā1pā e1lā i1ķī a1sē e1ni a1ma a1tu i1kū a1bi i1jī ī1ķu e1fā u1ta ē1dē a1gā i1lā i1ņi e1ļa ē1ti ā1bi a1ši a1lī i1ja e1mu o1hē u1jā ū1ša i1sā u1po ā1cā a1se o1ņe u1fo ā1sū ā1bū o1co o1ķē ā1ļa e1že u1tī ī1ku u1ķa u1zi e1do i1so o1fi ē1sā i1pī ī1ši a1dī ā1ti u1ņo u1pa o1ka o1cī i1pe ī1mā ā1pē ā1pī ū1pē o1bū e1ķē a1mē ā1rū o1de i1ķa o1šī ī1gu u1bi ā1ka ā1nu u1ži u1so ē1ka ā1le ē1pe u1ļī ī1me u1dī i1žā i1du ē1ra o1vo o1fā o1so ā1ļā e1dā ā1gu o1bo e1hī ā1ģi ā1čo a1dē u1di ī1se ē1sē ā1nā a1nī ū1rā o1hi o1šā i1lū ē1lē i1te u1še ī1tu u1ģo e1ši ū1ba e1ņa u1si ē1zo ū1kā i1gu ū1da i1sū o1bī a1mo ē1gā ā1ve u1bē e1ņo ē1vo ī1mī u1ļu ā1tu i1cī u1fa ā1tā ē1gu o1ga i1mi i1fē i1ļe ā1co u1žī i1zē i1vu a1ju i1ca ī1ču ū1re ē1bi e1ro i1fā a1he u1mo i1jo e1bu ī1ro a1te ī1ģi ā1di i1bū u1ļi u1le a1na e1tā e1bā o1tū ū1ze ā1fu ī1be a1pā u1de i1dū e1ve ī1di a1vo u1lā e1pi u1dē ē1dā o1jo i1žo ī1ķe o1nā e1mū ā1zā a1ro ī1rā a1že u1je a1ti ū1cī i1tī ī1vi ī1jo e1co i1tū i1bo ū1pe e1tū o1pā ē1se a1ļā ā1ji a1čo e1za ā1mē a1žū e1šo ī1ļu ū1jā o1su e1ja o1ta e1lī o1ze ī1vē o1vā a1vī i1kī ā1zī u1ha ī1pē i1de o1nē ū1bī ē1tu a1ži ā1žu o1ņā o1ļo i1ņē u1ci ī1ca ū1sa e1rī i1bē e1ne a1šī u1gi ī1mu a1zā i1lo ī1cē u1lī e1čo a1bu i1nī ā1dā ā1tē ā1ko ī1šu o1ģi a1ta i1la a1va a1še a1hi a1ca e1be e1žē a1su ī1dī o1da e1ģo e1ņu e1pa ī1jā e1sā a1ņi ū1so ī1nu i1vo ū1lo ī1nē ē1mī ū1cu o1žē ē1jā ī1cā a1ču o1zū a1lu ā1lu o1ņu a1vu i1tu i1ķu i1ķo i1ko a1fa ī1pi i1go i1me a1fi e1sū ī1ju o1pe a1sī a1nē ū1že ē1ve i1po o1zē a1ne e1sa a1lē ē1ša ū1gi ē1lā i1mū u1vā ū1mī ū1mē u1ro ā1po o1ju i1fu i1jē i1ga ū1tā ē1lu ū1sā a1gū ā1bā a1la o1ri ē1šo ū1ņa o1fē e1li ē1ko u1va ī1šo a1zi e1dī i1da i1šī i1hī i1ne i1šu ē1ku e1ņā o1na ī1ža o1ča ā1fa o1tē ī1dē o1tā i1hi ē1mu ī1so e1cā ā1zi ī1cī u1šē o1no ā1ņe u1bu ū1gē o1ve a1ģī i1lu i1pa e1ka ā1ci u1ķī o1sa o1go i1nu ī1žo i1sī o1fī a1pu a1du ī1ļi o1ba i1fa e1mi o1cu u1ža ā1mi a1ķā i1ču o1žū ī1kā ā1ķe u1ģē e1da ē1dī ī1čo ū1pa ā1de o1ma i1dā ē1ņo ū1žu o1ko a1vē ā1zē ā1sā ī1do u1cā ī1ļā u1du e1ju ā1si o1vē i1ša u1fe o1ji ē1re ū1ļī u1ņa ā1ca a1šu ū1nu ū1le e1ķi ā1tī o1ge i1vā ū1za ē1nā ū1ma ā1ķu e1lē ā1sē ā1li ī1ne i1mī ā1pi a1mā a1žu i1ju ē1vu u1nā ū1ru e1vi a1pa i1bā o1cē ā1lē e1ku u1lē i1se e1vā ē1jē e1pī ē1ci o1ši a1hā a1kā u1ji ū1rī ī1sā i1ro o1rā ū1ki o1ro e1ru o1kū ē1su a1ņā ū1tī ā1ba e1ņe e1nu ē1te ā1vo a1sa e1nū ū1žī o1že ū1do ē1jī ī1vu o1vi u1ba ā1na ī1mē a1ji u1ti e1mo a1ra e1hi o1te u1bo e1su i1fī ē1pi i1ģi ī1ņu ū1lī ā1ro o1zā a1vi o1ni ī1za o1do ī1zā o1gē u1zū u1li u1da a1či e1ta i1ra ā1ķa a1jū ī1ba a1cē u1ra i1kā i1zu ē1nu a1šā e1to u1gē ū1pī a1ho ā1je ī1ķa a1ve o1šu u1čo ī1mi u1sī a1dū e1cū ī1rī u1ko ā1ķī ā1zu ā1mu ī1sa ā1ņu u1ka i1ba ū1vi ē1ga ē1ģe a1rī u1ša u1cī a1co ī1cu o1vu i1je u1do o1cā ā1vi i1jā a1ze a1mu o1ņi e1ža o1čī i1ča i1mē ā1cī ē1la e1dū ū1nī ī1po ē1ļi ī1nā ū1be u1se ū1ci ī1ņā ī1ke ā1cē ē1sa ē1li a1ģā u1pe ā1ku a1bī u1pu o1ca u1ne ī1ļī u1mi e1du i1ļu u1pā ī1ņa ī1pu u1be o1ču o1šē ū1šo ē1me a1ķa u1zo ē1zā ū1ce e1tī o1ķu ē1jo u1tū ā1cu i1vi e1žā a1jo e1jo ū1bi u1nī ā1ļu e1zo i1ma u1vē o1jū o1ha ū1pu e1ša a1ru a1li u1mī ū1ve ā1pe i1cu ū1nā ī1sī e1pe ī1zī i1rī ī1pe o1po ā1rē a1ņe ī1gi e1žī ī1lu i1su ī1tā a1no ī1ži a1sū a1ko i1žē u1jo i1va ī1ji a1fe o1pa e1rē e1šī ē1cu i1šā ū1žā e1ģe ē1cā a1po i1tā ā1ne ī1va e1se ī1ra o1gu ū1de u1dā i1di u1rā ē1nē a1to e1fī a1so e1ze ē1le o1mu ī1ta e1ļu a1zē ē1ķē o1ģe e1na ū1vē ē1du u1žo i1nē ī1si i1ka ī1fe e1no i1le e1pē e1ģē ā1go i1ni e1ča a1čī ē1be a1ša e1gi i1mu ē1bē a1čū ī1šā a1bā ī1du o1ci ē1bo ā1ki o1mo ē1lo o1lā o1le a1gī u1kā ē1vi ī1lē u1čē ē1mo a1cī u1ča ī1to a1fē u1ķi e1fa ī1ša o1bā a1ļi ī1da a1mī i1gā a1ģē e1cī ā1ta i1re ā1me ū1dē a1re ī1li a1ga o1tu u1pī e1ha ā1ķē e1tu i1ģē e1kē ā1bē o1čū a1zu ū1sē ū1ne ā1ga ū1vo o1ho ē1ļā o1rī ū1ju o1fu ū1ji o1lū ā1do i1to u1bā u1ge u1cē a1le u1ķē ī1ce a1ķu ā1ze e1šu ē1ja a1vū i1ņā ē1na o1ne ā1dē ā1ģa u1su u1sa ē1di ū1su e1fo ē1ni ī1pī i1ku ē1pa ē1po ī1zi i1ļa i1ši ē1lī ā1no a1jī ā1gā o1zī ā1dī o1ļi ā1rā ē1zi ū1pi ē1ge o1mū i1kē e1gū u1gu i1zū a1gu a1lū i1cā ū1lā o1ķe o1se ē1vā ē1ru a1fo e1sē ā1re ā1lā e1ļi a1ņu e1jā ā1ža ē1zu e1ņi u1pi ē1mē o1ņē o1ti u1pē e1zī u1fi e1ķe ā1jā u1vī ī1ņi u1žā ū1li e1de o1be ē1zī e1hu e1he ī1lā u1tē e1nā a1sā ā1se ē1ļo a1ģi ī1ze o1je ū1te e1kū o1li ā1ce o1vī i1ci ā1so e1ge i1še a1ni i1do ā1lū o1žā o1še o1zu a1cu e1mē e1gu ē1ta a1do e1ba ē1ģi e1žo ā1gū a1za ū1la ū1ķī a1pi ī1nī ū1šā i1šē o1ļe ē1mi u1zā i1ķā ī1ko o1dū ī1ķi a1ķē ā1su ī1lī e1čā ē1ļe u1za o1ži o1fe ū1tē o1ki ā1za e1le ē1bī a1di o1sē ī1žu ī1bo u1me a1rē i1ļo ū1si ā1sī u1ni ī1ka ā1ļi o1tī ā1šo u1tu e1žu i1ža o1lu ē1rī ā1ju u1šī a1ķe ē1so ā1da ē1ba ē1ri o1ce ē1ki i1ļā a1pe o1šū u1ļo ī1zo ē1rū e1go e1te i1za e1vo u1vi i1fe i1ņu ā1zo ē1zē o1jē u1re ā1ņa ē1pā o1žo u1nē u1ņu ū1du a1ļu u1mē ē1pu u1lo i1ji ā1rī ī1rē e1rā u1ru a1cā o1rū ū1na u1ģe ū1dā u1tā i1sa at1tu eg1rū ak1so it1de eb1lā et1vī or1bi al1ša ap1dū ak1na um1ci aš1le ēr1ķe en1ku il1ki ēr1ku at1nā at1ģē us1pē os1vī os1ci an1ra en1pa ej1dē až1vī as1bu īs1ga iņ1di en1to uj1me or1ki el1zo ot1nē es1ko uz1gu ak1ti īr1ni iz1hi il1pu es1ma āt1vi ag1rē on1zē īb1tu ap1do īt1vī ul1sā īk1lī ur1so ok1tē ēb1tu īs1la et1ve al1mo op1ša en1ce im1nī uš1ķa ek1ti iz1cī er1di ur1fa an1tā er1ba as1pe al1su ip1so al1cī at1de aņ1ra ēk1šu īg1li om1ni oņ1ka as1le at1ņi id1rī un1ve al1kū in1da ār1ba īs1žu al1ka up1jī ur1gu at1sī īg1mā āl1ti al1va uļ1ku ok1rē er1gi uz1ļo ak1šē īm1re iz1te āt1vē ēg1ni īg1ru il1cē ir1mu ar1ku ot1zi ub1na an1če om1bī ēg1si el1le av1ru il1nu ēs1te ur1kā ik1ro ep1nu ur1vē oņ1lu it1ma il1ja ēj1tē an1ga eš1pa āl1ce ob1rī ur1vi up1ri ēz1tā iz1čo ap1ša uz1ru ut1rē ar1to ež1nī aš1ļu aļ1ce al1ne is1sī ib1šo uz1nu ut1ņu ul1de ār1ho am1pū ēl1gu um1vi ik1to ēr1ze ož1va ez1nī am1lī ak1se el1ko ep1si āj1tu um1zā at1ja al1ķī az1dā or1to ec1he at1cī en1ko ūs1ki īg1sa ef1ri ār1sa im1po īt1rī ed1vi id1sē ā1džā up1la ēc1te es1pu uk1šo āp1ni ā1dži ak1la en1na as1ka ām1di ag1li og1rā ag1dā oz1vi an1ku īk1nē us1mū er1ma āb1ša in1tu ob1ti ap1cu es1vā ac1ti ur1pu ar1kī el1la it1ta am1le ik1se ēk1ti ar1sa is1mu ut1ķe ār1vī u1dži et1nā id1ka āl1se ur1na ār1zo uz1li ān1ka as1ve ab1la aņ1ķe ēb1tā el1vā al1žu at1pū at1go ēr1la e1dzi iz1dē ab1se at1žē ir1ca ēr1su uļ1ma el1pe ej1ve ap1ve īg1rā el1po ed1lo it1mo ep1nā uk1tu at1šo ap1šā ār1čo ak1sē ek1tē om1pe ul1go um1dī ec1si ēd1vi um1mā iz1mo ok1zā āp1ro āl1ko āl1vē ed1po īl1zi of1rē ēj1lo ap1sū ip1šo is1pu in1fe ep1ra at1ša or1ga on1gā ak1šu at1jo es1pa uz1ša ār1su uz1be ik1sī en1ša ok1te ok1bu ur1ša or1ģe īn1ta ap1ģi iz1zu im1tī ap1te on1nā us1jū ur1no ab1ti en1jū op1so eņ1no ur1ka an1šo ol1le ūs1mo ās1tā ek1tī uz1sī iš1ķā um1pā is1po ob1lē ap1za ek1do ez1mē ēd1la uš1ka of1ri en1hī āf1ri uk1nu iz1do ej1ga ul1ri iz1fi ir1na is1ka ār1do en1šo ož1ma ēs1tī at1sā um1la oš1pa eb1to ez1ņi ej1ka iv1žu uņ1ģu ik1na il1ko ol1mu im1si ap1ta os1tu us1tī at1ko ar1ci iļ1do un1či oš1si en1zā ir1zo i1džā uz1ba er1vē ip1ni il1zu in1pū or1hi iv1de os1mē uz1pū ām1pi os1tū az1bē al1de on1de uz1ce em1ba ēr1ļu at1nē ār1tū ur1cu ir1ku āv1da īp1ri op1rā ej1ni am1dī ak1va ek1pi up1ve ūt1ma un1tā aš1ma āv1ja um1ti ūz1mā im1te ev1rē on1ti ig1za iz1gū up1rā id1pū ār1cī ār1lī el1lē us1ga ez1da ap1cē ej1la ag1da uz1va op1sē āģ1ve el1to ēz1kū eš1vi uz1vī ī1dze is1mē ef1rī ab1ša up1ma ār1nī aš1va ab1ri ob1tā ik1sā is1mī ag1ša ūr1ka āņ1mu ev1ni or1da em1ze āj1lo at1rū al1re il1cī ār1mi et1ma um1da ob1le āp1tu el1pā iz1ķe ez1tu al1tī ap1rū iz1ta em1ža ar1gi ēv1re as1kā až1kā eg1ta al1gā ap1le ap1ro īv1ni op1ka ik1vi il1tī ur1pī ir1kī iņ1ne iz1da op1re ēl1ni is1nu ar1cē ed1sē ul1ka ās1ma op1ba os1fē ak1le eļ1mū ēb1šu aš1ra uļ1pu oķ1vā ār1šo am1di ār1žu ed1pu ed1ve en1re ūk1li uš1pi ep1ta al1ve ad1ma ez1ce ēg1tā ud1rī im1bi ek1ra iv1jū ez1bi iz1me uļ1tī if1rē ap1ku id1ni og1rē ēj1de op1ko iz1tī un1ci īt1ka ēj1nī ēr1pē oš1ļa at1zu īv1ga os1na og1ga es1lu āt1ko az1va em1zi as1ke an1si iz1mi er1vā ep1sē al1sā us1cū ul1sa en1ta or1vē ek1tā uz1žo an1ma i1dzī ij1ku id1la ēp1ta ēļ1ko ur1ti ap1nī ot1re eš1ņu un1de ār1vē uz1ģī er1mū o1džu oš1ni ij1kā al1lo ig1lo er1rī em1pu ug1ļo ūš1do ip1ša ūs1tā oš1ba al1lē eš1da uļ1ļā ār1sū in1de em1to ās1tu ol1fi or1mā iv1pu aš1la ec1ho ār1za ar1ka ub1sī ap1zi ēp1to āk1tu er1te ur1zu īm1ka on1ju ap1go us1lo or1na og1no am1dā ār1ta ēl1ne er1cā im1na uz1zā ār1no aj1ci ip1tā it1ļu ag1ri ār1bū os1po ēņ1da an1kū om1bē ār1ve aļ1ģe im1ti al1ti īņ1ni in1na ep1la uz1di iž1me al1tē in1si ed1ma or1tu em1ta ug1si er1be us1ra il1mu ār1ga eb1lo īr1rū īt1re al1la et1vi el1di ār1ži iz1ca ad1da ēn1mī ut1sa ol1po ez1ra ir1šā eg1šo ud1pu ud1lē uk1sē on1vu em1pā ēk1bē ār1dē en1zū āj1re at1lo ez1ni et1ka iv1ji in1ku or1bī ok1ti al1si ur1zī ūn1ga ēr1pa am1bi at1ro ēr1bu iz1ķē ip1sē uz1či ir1du uh1tā er1bā ik1ga īš1ķi iz1rū it1da ok1ņu ēg1ta ir1lo an1ka in1dī es1vī op1ma um1sī on1pa em1pī ūk1ko el1tī uz1me er1vī ūz1na eg1ru it1ga us1du īt1ņu ep1lā ur1va um1zī īd1lī o1dži ār1bu ak1tā er1ta ēr1no ēr1pā um1bi en1ca oņ1cū ēj1mu at1pī ēr1gā ip1re ār1vi aļ1ķo et1ni ir1gū āp1ne ir1su āt1me eb1tu in1cē aš1ķe ip1ro om1da ep1tī ef1ra ū1dza ēt1ku ub1li az1be ūs1ka us1pa ar1su uf1li ūr1vī īs1za af1rē uz1ņa e1dža iz1bē ūt1di en1nī eļ1ķē es1ku az1da īg1ra iz1gā ar1ķī er1šu ud1ka ed1ri op1ra ap1li ap1dī ed1la an1rī en1tī āb1šo an1cū ēj1da es1tī er1ko ūg1ta el1zu in1ne er1bi ig1me ež1ni ad1mi aj1ni el1li ik1šu āl1pu ar1ga et1ta īc1še uz1zu om1bū un1ku īb1ni ar1ža ēt1ni is1tu un1ze aš1di it1ni en1zē en1ģe er1pe uz1zū ul1si ur1ca ap1fa is1no iz1ķī us1vi in1ho og1ļu ūs1nu er1ga ir1ze ēl1re ēs1li em1ma if1ra at1mē ur1rā at1ho ob1ju op1ro ip1li ec1mā er1mī ak1mu es1sa īk1lo u1džē ur1fi id1ko ār1ņu uņ1ģa īk1li iņ1ķe as1kē il1de ār1kū ul1bo ez1no en1mē ab1ro uz1gū ek1ņu ož1ņā at1ku uk1sa uk1lo ar1do ak1tu ār1du ik1ci al1du en1pe al1vī un1ti ul1le os1cē ec1sa īk1ti ār1dā ēb1ju ap1ču ub1rā iv1pa os1ma oš1ķe aš1pu um1pē ēp1tā ek1si īk1ļu uļ1ķī ūš1ka al1pe īg1nā uz1pā āt1rā īg1nu ik1lu āb1tā um1ji ab1so og1le ir1te īb1tā il1do em1zē ar1ģe ot1ve ap1gū id1vā ār1de āt1ne ēt1sa ad1do en1ja er1na ēk1li iļ1ņa uš1ki iz1nē oz1va ez1go us1bā ut1ri ur1lu ib1re ej1te ok1ho en1zu eb1rā em1tā ed1mā ah1ti em1ti um1sā az1tu ur1sī in1go ār1di ap1ņo īs1cī al1bi as1ni ek1se al1li uk1na al1nē iz1mē er1ce ūs1mu al1tā ul1fā ēk1lo az1ga er1zā ir1gu ig1rī en1dē eč1tu ep1ļa ēk1ta uz1dē ur1su īc1ku it1bi āk1kā āp1tā eļ1ce ed1rā ib1rā er1mi āb1rī iļ1ķi or1mē em1pi os1vā as1zo af1rā ež1pā ūs1nē ān1ve eļ1ķi oš1ga il1žu en1va īt1ra ak1ri up1tu ad1ka eļ1zī ir1nē ec1ve or1mu iz1mī īš1ļa ab1ve er1ri ū1dze ūz1ni in1ka īķ1sa ud1pe us1mē iz1rī on1rā aņ1kā at1ze āl1re em1ja im1sē īk1lu ek1va at1bī is1lā os1pī ār1jā as1mā ol1nī īg1ti em1po īg1tā ed1va ar1da or1po us1ni al1lā os1ti eg1da uz1bā ūt1rī ag1ni iņ1dē iz1zo is1me at1bi az1ti og1ra en1la at1do ap1zī am1ga us1ti oš1ķi is1tā at1la ēj1ti e1džā ec1ka or1ķo iz1pū uļ1zi er1de uk1ļu eh1ni ēg1to ēl1si ēc1nā ap1pā āl1no ar1hā at1gu ob1ļa ap1bo uļ1ķi uk1lē es1bi ar1žo iv1co el1mi ēr1ci ik1mē ap1da uz1ķī im1pu īk1la ag1ru iz1dī er1ņa at1ņu or1pi ēp1ni ūt1ņu eš1ta ar1ta un1ga oš1ļi eņ1ģi an1tē at1si or1te iz1rā ol1vi iv1cī aš1ko ām1ri āz1tu ek1sī ūk1tu ēk1ļu ir1sā el1ku ek1su aš1ļi iļ1ņu iz1si ir1gi at1ha ar1tu em1bu āt1sa ek1ļū en1tā iz1šu as1po ir1ta ab1re it1le ūk1pi uņ1ne aš1vi ām1pa ār1sē ok1si og1pa ut1rī in1ji ig1no iž1ļa ēb1ni uk1ma ēp1šu ol1vē ēz1ta am1kā ed1fo āp1ra ir1ce ul1li as1no ēt1ra on1ta ur1ņi ur1bi iz1cē us1ki eb1ša ož1me an1gī āv1ji ip1si ur1nē ak1ša eņ1ku ab1li il1vī is1kē om1pā ir1mī ip1lī ēn1mā ēr1šā āk1da el1nā ul1pe iš1ļo ēj1pu āl1lī ud1ko er1vi ak1tē īs1ka ag1tā ī1dzī at1vu ar1mē ar1sē eb1lē od1kā ūr1vi ot1ņu en1da az1du āt1nā oņ1me āl1ba eb1šo uz1mā an1zī ag1lī ot1bu il1po ēr1ķa ur1cā ej1bo az1ze iz1žo op1ļā īg1šu ēs1lu at1mā eg1lo īt1ri ir1tu ek1sā ik1ta eg1lu ur1vā un1bē uz1mū ež1zi eg1tā or1ma ob1ga av1ko el1ba ā1dzi at1ģi āg1ne ēr1za ed1rū iz1hu aš1ņa āb1si uz1ni et1pi āz1vā u1dzi en1tē āt1re ūv1no um1su iz1ci at1ra uz1ri or1ta āk1lu ik1po āš1ķi ār1pe ap1ķī uz1bū uz1pē uz1si ir1ža an1gā ap1šū i1dze at1ju at1fo is1ne ez1rē as1gā al1gu as1ti ūš1ko es1tā al1jē in1ša ab1le i1dža ēp1ja eb1ļa ub1le ab1tu ād1mi iņ1ķo ā1dža ek1li un1li ek1mē ok1lī ēr1pi ēr1pu iļ1la ep1ka em1li ez1na id1ma až1ne ir1re ēt1di am1zo ūr1fo ež1ga im1to ūp1nī at1du im1tā ūg1šo en1si al1ge al1dē eļ1ļa ap1vī ār1cu ež1ģa iš1re ār1ne ul1je ar1mī oš1ka īn1va ēr1ma ok1nu om1ra ap1jā us1ce un1mā ek1ši ob1lā ēr1sā et1ne uz1de il1bo it1pā ar1tē ed1ko ol1vī ot1rī us1se ēt1ti iž1ļu īz1de en1sā is1la ik1te ob1to ag1lā it1ko ep1ci āg1ti ūs1le ek1lu us1mā ār1ze īs1tu ar1kū ir1de ed1jū or1fī ēt1li ūs1mā el1no id1ru ij1ko er1ve ec1la aš1mo em1zo uz1bē er1fo eš1ķū ak1lī el1lu ib1li ek1nu ir1ņu aš1nā ēl1ga em1nī iz1vi us1te is1ha on1jo az1ka ās1ta aš1ta iz1vē er1nē uļ1va ab1lē an1žu oņ1ve il1bu em1pa ob1se em1jo īv1su er1co ur1to ēg1vā in1ci ak1ļū uz1šu eņ1la ūg1šu āg1tu ūg1ti īt1va er1ka ol1šū iz1ču us1ke ur1bē āp1ri ak1ļa ūs1kā os1va er1ze ēt1nī āj1ku en1žo uļ1ve is1ķe īg1si ur1me ur1bī on1hī an1di āj1mā ep1ļē aš1ņu or1vi ad1vo az1gu uz1lū it1pi ak1šo ap1si ās1to in1te am1sa ap1šo iz1vo uz1ve uļ1ņe uz1fo uv1sa uņ1ķa uz1ta ug1ļu ek1lī ok1se ok1vi až1ņa oņ1sa ab1hā iņ1ci ug1šā ek1rū ij1pa ok1ve ap1he ut1bo el1zā or1di an1go iņ1zi ek1mī ap1bē on1gi aļ1me ab1ru ig1ti ur1be u1dže ek1vi ur1ze ūm1va um1mu aļ1bu āt1ņu om1re ug1le ez1ta am1bu at1cē ēp1ju ez1sa at1ni an1me uz1no ār1lē ul1kā ar1pu iz1ru an1ži eņ1ķē od1ni is1na em1zā ār1se at1ri it1ru uš1čo il1ve al1ta oš1vī ēr1po il1pi ap1pē is1ķē ēr1sa ār1ku oļ1še uz1pi av1ro og1rū īg1ņa ī1dzā il1ze ez1ve ūr1te on1dā up1da iz1nā im1di ul1gi az1mē ā1dze as1lē ok1ļa ak1ce ūn1ve ek1lo ok1tā ap1jo ēr1gu il1nā iz1he uļ1ņē īt1ru īd1se ak1rē āt1ro at1da iz1žā ol1tē ūt1sa as1ku īn1bū īv1si or1no ot1ce ol1de ab1pa ēr1pe oņ1ko ok1na ev1ze us1ri ip1ti eķ1tu op1ta īs1ra er1zē of1rā ur1dē ot1ka is1zi ēk1mī iz1ne ag1rī on1si ir1pē er1ni ās1vi an1za ēl1gā ap1du ek1lā ār1ņa um1pa an1fa ār1pa uļ1so ar1pe eš1ļa ēr1vi ef1rā og1la it1pē in1je ut1ma ig1nu ēr1te az1gā āl1de ār1zi on1fe on1ma ib1ta at1žu it1lī it1ra ok1be is1žē ēz1ma ār1ti er1ru az1ja ēg1le an1ni az1lē uk1ni at1lī eņ1ma ik1vī ap1be ar1ne ip1ta ap1žu az1pu ak1ra ul1ve is1pē ež1sa iv1ma ār1šu ek1na os1la ik1tē ēs1la es1la at1ki iz1lu ur1le īd1ni it1se ej1ma iņ1si ār1lā us1va us1ci if1te el1ta uz1ga ak1tū or1ve iz1ce oš1kā ēt1ru ad1rē et1ņu ik1šo oz1ma ir1ti uz1da ūm1de el1tē ēz1ti it1rē aņ1ve ap1zā at1ga up1de ās1na ap1tu āp1ņu in1tē ās1ne ap1re ir1ka uz1tī uz1go at1ļā ad1rū ir1zi īv1mā er1sa in1ti āb1ju iv1si ep1jo e1dzē el1si ij1žu an1du iz1tā il1lā ul1bā is1cī ag1vi āj1rū os1lo īk1lā āb1to al1nu āt1ki eņ1ķī ol1kū un1pi ec1re uz1ču ul1dā en1ro ir1di en1ču ul1jo ul1ce az1vē ap1jē āl1zī ūš1ļo og1ve ag1si on1su og1ca ol1gu ār1zā ig1li iš1sa ot1ru al1vā am1tī ās1te ud1rā ēt1ko uz1jē āl1gu et1me ed1ra at1cū ol1zā uz1žā ul1gā ok1ļu īv1ze at1ve en1gu um1du o1dzī up1jo ap1di ur1rū īv1mū ūk1to iz1ņu uz1šā uļ1bū ez1pi in1vā al1ja in1ve iz1bu ap1šu us1ze ob1rā ēk1me il1le ēz1to īk1de ēj1lu ar1zo ec1me ar1za ol1bu ēj1pe ul1te īd1pa al1ki en1zo iv1ka āl1te ok1no a1dze it1va ār1jū un1go iz1ko u1džo up1ti on1li iz1čā il1gā er1gu iz1za in1gi ū1dzo ur1ni um1bē ed1mu ēk1tu ār1so id1lu ar1me ir1ši ik1ša ej1za ap1ha īv1lī as1ga eg1šu iz1bā ev1ju ap1ce ar1di em1ju am1bo iņ1ma et1si āk1tī is1da id1pu iz1le et1no ul1da ur1tā em1ga ēr1ša or1mi ak1kā iz1mā ab1vē ok1pi ir1bē īg1tu ir1sī eņ1ci iz1sā uz1he eļ1ķe eb1kā in1če ar1mo ēp1šo eb1rū on1cū er1pa īg1na us1ta ār1rū is1lī ēg1li eš1re uz1hu ak1re īn1da el1de um1ja ak1nē ob1tu ek1to ēr1bē ir1ci ih1ti ov1nu al1be aļ1da ot1rā ēr1ķē ud1ma āv1ju ik1li ar1du uk1su ak1sī us1le āt1bū ug1ša ag1mā ēr1tā uz1nā uz1čī ēs1tu iv1tū un1ko er1mē or1ci un1ka īt1ci ūk1ni ār1gā oz1ta is1pi ef1ko āš1ņa ig1ni ur1cī aņ1ķī ec1ti il1tu ul1su an1jo ek1vā al1po uk1tī āj1ni ām1ja ēr1li ah1tu at1vē il1nē an1ke as1ci er1je es1nī id1gu ān1va us1fi ār1si ēd1va ul1vā el1ni eš1ma un1la al1ma un1du an1ho ul1šu el1mu al1žī el1rū ul1ci ar1ģi at1vo ēr1bi il1vē us1me at1li uz1mu av1da ēg1tu uz1ļu eg1vī ēb1to ad1ju ir1mo or1fē el1nī iž1ļi em1de ap1pa ūg1ša ul1bu ēr1mu as1vi eb1ļā as1pi ir1sū uz1vē ās1nī ur1zā ir1bo īk1da it1nī ar1pa el1do ēr1le or1fi ēt1la aļ1ļi am1bā āš1ņā us1jo eļ1ni eļ1nī us1ja in1gu ig1nī ed1ru uj1bi os1te em1va ar1lo ig1lu ak1lā un1ba iz1bū am1ze is1ti it1ne uz1sā ep1lē iz1bī ār1nē eg1la iz1du ēg1dē ān1za es1lo im1de at1hi ar1ķi iņ1ve ēr1zē uz1lā ir1vi ār1ru oš1ļu at1te at1žā un1su on1tā od1la ār1ģe ēs1lo al1kā aš1pa ūz1ne ār1čā ur1je uļ1ķa ak1ņā īr1fa es1kū ār1ši ar1ba ār1ša ir1dī id1nī uk1da uz1žu ār1va ot1ra am1do iz1ģi ep1lī em1si āl1ta in1su ol1ni ub1ļu iz1ņe ap1ča el1za ob1jā uk1tē ap1mā al1ri ot1za ir1dā av1ni ūr1mu it1mi og1ļū er1za ek1lē ūg1te it1mē oš1ņa āk1le aļ1čū ān1lī e1dzā um1be et1rī ek1sa al1le uļ1ka iv1ni ēd1mē il1dī ul1ti ot1le at1gā iņ1sē at1ca aļ1rā ab1su īn1bu ip1rī uz1ra uļ1de em1ko at1čo op1vē a1džu uz1ķi ir1ma ur1bo iz1pe em1tu āč1sū um1šo ap1ķē āl1sa as1fa ož1ņa em1dī ūz1da el1pi ir1sa āz1mo ed1ro il1si īk1na uz1cu os1pu ag1šo iv1va īd1vi iņ1ro ār1ču id1ne eg1pu um1ko uš1ķo ār1ka īļ1bā ak1ve ez1gi or1la aš1pā īg1va ir1šī iļ1li ēr1sī um1ši īm1ju ub1je ep1li at1po āl1ma am1bī iņ1ķi āj1ra as1tū eš1tū en1te īv1ma et1nī āb1pu os1ku is1tē ok1ļi iz1rē iz1ži el1nu iz1pā ul1tā oļ1ko ēv1vā os1lā or1tī āb1tī af1ro ēl1zī āl1ru an1šu us1tā or1do er1ci īs1ri ēd1ra im1da ar1be il1ku iz1mū it1rā up1ša uz1sū us1ru ir1do ur1ga ek1re al1nā ok1ni ek1šu ob1rē ir1žo ār1dī eļ1ma aš1ci il1pa ū1dzu ek1ša ār1mo il1gi uš1ņa el1mū ās1ka ēk1ša or1ķi ār1nu az1ru ās1tī im1šo um1ze īv1so ūt1nī ap1fo ag1šu il1ma īc1ga ēr1tu es1mi ūs1mī īs1ti ej1vi uz1na on1na id1ro el1mē os1pe op1lu ēc1ka ar1pā up1ci ūs1ma ag1re ūž1ņa ol1ga an1ta un1di al1ko ul1lā ir1ko ī1dzo os1vi es1lē us1ma ec1mo iz1ve az1ra āl1cu id1rā an1ža oņ1zī um1tā af1ra um1vā ār1rā ab1vī ū1dzī i1dži ēg1šu in1ža ed1ņe ec1tū or1ne eg1ma āp1ja ār1šī ep1re is1ve ol1fe op1ci as1te ār1šū ež1ku iņ1tū es1te ek1ta ēl1cu ār1na us1jē il1te āv1ra āv1ce aļ1va um1ni ak1ni ār1rē et1ri u1dzī on1tu up1le am1bē in1to ād1nī in1ta ol1ma īk1bu an1žā āb1ma ur1ķī ak1vi at1nu is1bi ol1ve og1ne īv1bi ok1lu ār1čī ug1ti īn1ra ig1to uļ1ģi ār1ma um1jī ē1dze ap1rē is1nā ūp1ko un1si il1tā ap1ņu ol1be os1mi ig1la īl1ni or1bū ip1ru ak1cī eņ1ķa ez1gī oņ1sā āz1ni ān1pā us1pu ād1ne us1po īn1de āk1ba ā1džu ur1sē at1ba āp1ti ūv1vi ah1tā ut1nē em1be ap1na ul1pa ob1je āk1ļa ib1ti os1ve ud1vi en1pā āv1ni iz1vā eg1ro op1si ap1pu am1ni at1ta ak1li es1ne uv1ju ar1rī i1dzu es1rē ob1lo es1li og1ma uš1ko an1zā ig1tu an1be im1pē ic1sa eb1ka uz1zī oš1ma at1nī am1dē uļ1ba ār1mu up1jā ār1he es1mē er1ha ēl1di ih1re op1ja il1go uv1ve ul1pu il1du aš1mi āl1ve ār1lu ez1pu at1so īs1ca ek1ni ēg1nā ūt1ro ap1ķe ab1pu iz1nu iz1ņē ēk1ne ež1jo es1po ās1no ūv1ni aļ1sa aļ1ķī ē1dzo ip1no ap1vā īk1tā ār1čū uz1ze uz1nī on1du ap1hu ez1nā uk1ļi ul1bi ad1pē at1pē ēr1zu uz1čā ēs1to aš1gā āt1no en1vē is1be et1rū āk1ta uk1tū ij1ni ug1šu us1ķi ij1ve el1šu ul1vē ēt1rī ag1ļē es1pe ēr1šo ak1rā eļ1pa ec1rī ez1lo ēk1lu el1va ār1ķi eļ1po am1pa ūt1ni iš1zi id1mē uz1dū ēk1la iņ1ta ol1tā īk1ša īt1nē iļ1jū it1tū is1pa ap1sā iz1so ež1ģī ud1ri oņ1nā am1lū iz1pē ak1vā al1te ad1ri ak1ga ār1bā ap1rī or1bē af1ti uz1du at1ši ug1tu iv1zi an1se eg1to ūd1rā os1lē ār1ri el1ga ēr1de ir1tē em1ļa us1na im1do āt1ve ur1ma ur1ģi īg1ni īd1ko ūd1ra iz1vī ed1rī at1jā il1mo e1dza ēk1to ār1ģē iļ1ņi iz1bo as1ro um1zo or1pu ar1kā ik1ko ap1ca īs1ba as1vā at1mo uz1pu ēn1ga am1ba uk1ši ag1to iz1zi uz1tu ul1ni er1lī eš1ķē en1zi at1zo ir1ša ez1si us1so am1fī ig1tā e1dzu ap1kā ār1ro es1vi ag1la ir1mē ad1ve it1di um1no ap1lā in1ga op1šo a1džā er1po uz1bī un1ra uk1ta ar1ve īn1sa ap1vi ēr1ce og1lū aš1li aš1po e1džu ap1mu ag1lu or1be am1ne ol1di iņ1ģe it1na eļ1ņu uz1lu ās1me ār1sī ur1ku ur1pe ep1na ut1na ac1da uz1le ik1ka ar1fi ab1si er1zī ār1ļu ap1ja ul1tu is1di an1ge ar1lī ug1tā on1so ud1kā eļ1ko iš1ķī um1po ik1ļa ūg1tu ār1gi ēr1ni et1va ap1lo ēr1ķī iz1tu īv1la is1ju od1ba az1ro ūs1di up1tū ūs1nī eļ1lo ap1bī um1ta īs1tī eb1rī uš1ķē ep1tū eb1lī or1že up1ra ēt1ma ak1ro ir1la at1či og1lu ūs1ku ut1rā il1no ec1de an1bā az1vi ān1ga ēj1ce eļ1ve er1zi el1sa īk1ta īt1rā ār1fe um1ka ir1si ag1ļi ip1ka ak1šā ar1ki ek1ļā ar1bā ed1da os1le iv1ja iv1kā ūk1šo uļ1vē ēk1tā oš1ņu og1de ok1ļo ul1dē ik1sa am1pē ūs1no um1to us1ču od1ka as1lo op1mī up1to oļ1ti ū1dzi īr1ma os1kā al1dī ok1va el1tu ap1pi is1ca os1ce āl1vi ir1mi uš1ķi oz1tā is1te ig1ša at1rā ar1žu os1kū im1ša ār1to um1bo an1sa aļ1ļa ēk1di āj1ka ak1tī ar1tī os1tā eg1re im1sa ul1sī ag1me il1lē on1ce iz1jā iž1ci or1ku az1no im1pā of1se op1ļē āl1ka ēs1ti oņ1de er1la ār1ņē uz1ku ab1pi ar1na em1ša er1ku im1pe in1tī es1mī īv1do uz1mo uš1mi ak1lē aļ1la up1lā ok1ta ūv1me em1žē āl1rū is1pā ar1le eš1va eņ1rā ad1ne on1ku īs1si ab1da il1lu ar1va an1ko ez1bē ež1li il1ga at1tā iz1kū ar1nu ir1mā ad1je ik1ra an1bu op1ri ik1vā ek1šē ap1ru uz1ņi iz1be at1vi it1ro ur1tē en1po ap1jū iz1ģī ol1rā ar1go ah1lo im1pa ī1dzi us1lu ir1žu at1cu am1vi ag1ti im1ju ep1ļā ec1ga on1di ān1kā is1fu at1ņē āņ1ti at1čū az1pa ik1pa ov1bo ad1si er1lū ir1bā um1tu uj1ko ež1vī ab1lo ūk1la os1pa ul1to ap1žē āv1ma ez1zo eg1mā ap1to iz1ku os1lu or1vā ok1rī os1to al1di is1lu ē1dzi āt1li aļ1li an1ču eb1la eņ1ķo ak1rū en1ri ez1be ēr1nē eļ1ņā ab1rū un1sa iz1zī až1da ūv1so aš1ķī it1kā ap1bu ē1dzē a1džo īb1šu us1lā ad1re ej1le ek1ro at1su ap1ļu ež1ci er1ra ez1vē aļ1ko og1re ur1ja er1zu ār1me av1tī on1tē at1fi ir1bi ob1li uz1jū aš1ļa āb1ra ur1bā ap1nu al1ģi an1vī on1dē ep1tē ez1de um1de up1ju īg1te od1de ok1sā at1jē ār1zu um1di eš1di eļ1mo iz1de in1gā ač1gā ip1se iš1ķē ūn1ze āk1to eš1vī ēņ1ve ap1la oņ1ni im1ni ut1ro et1de ep1pa aš1re up1ja us1pi uj1la āt1ti op1le an1nu ēj1mā as1lā am1mi az1dē am1po īk1pi ūk1tā ār1go ap1ma uf1ra īg1ta ad1ca ār1ķē ek1vo am1te iz1zā ar1ke ēr1mā en1dā eg1lī at1ci ur1ci āg1la af1ri īk1ze er1cu ad1va el1ci ep1no ag1ne ār1zī eg1rā eš1ķī an1ti iļ1dā ud1mu āl1li ub1ve uz1pe uš1ķu eļ1tē or1čē og1pu eg1nē op1la al1dū ef1rē īt1ni ek1nā āz1be er1ti er1no os1fo ēr1ga at1ka er1go or1ķe er1mo un1da an1žo ez1mi ef1pa ek1rī ūp1li eļ1te ār1tā ot1ri ud1li us1zā as1tē iv1da is1ko il1za īg1to uz1bu er1tē ap1su es1zi u1džu uk1li iz1lū it1ti īk1kā es1pī uz1vu ūž1di ūs1li āl1po ok1re āk1ļi īž1me eš1ķa at1ķe āt1rī iņ1ši ap1ga um1jā īm1ja ez1ro iz1jē es1sū eš1vā og1ri ār1lo al1so iz1lī is1kā ep1ti eg1bi ār1la ar1vo ēp1si ār1gū eļ1ga uz1kū iļ1le o1dze an1sē at1no ok1ma al1sa ek1ri ep1le en1rī eš1de ez1jū ik1sē al1gi ep1ro īv1ci id1po oņ1pi od1ra ej1pu ir1go el1ma in1se et1sa īb1ša aļ1ķa ol1la at1rī at1dē īļ1si ār1ņo ur1mi ep1lo āg1šo ec1to ob1ve up1tā āt1ra os1ko al1zi el1du iz1vu ār1pi at1šā ul1tū il1dē ap1mī ar1lē er1tā us1mu is1hu oņ1si āz1ve īp1ne āz1to iš1ma ol1vā em1zī āl1be al1šo us1ko es1ga in1fa āj1vi at1di at1ži ap1bā ah1ta ēr1nā el1me īs1le iz1ja ēb1ti es1ka ul1be ep1ri ež1zī ot1vē as1la at1ru er1mā ed1re ēj1ma av1ci ak1do us1nē eš1ga ap1cī āt1zī as1pa āk1ša es1ta ib1lo er1ģi ēr1mī eļ1di at1lā ak1te aš1vī og1li al1ga aš1kī ār1fi es1to ūt1pa on1ko ār1ci ām1ju el1ce īs1tā ec1ni al1ku at1hu er1fe ār1mē ēr1mū ul1di on1ga ār1pē ar1pē ās1nā am1fi āt1pe an1co oš1ņo eļ1ņi aš1no īr1na āk1šo et1ko ig1ma an1te an1ba e1dzī ek1šo um1bu ir1gā om1le ūm1ve al1na iz1va og1lā ūk1ta il1so uz1ma il1ša oš1ķū at1zī ās1mo ēr1na ūž1ņo um1nī eg1vi al1tū on1se iz1ža ek1te ep1lū ep1se os1tī as1ta ār1be iz1ša oš1ķo āg1ri īv1ku āt1na aš1ķi ēr1dē ir1tā ak1sa as1to az1jū un1me ap1pū ep1to ur1ve en1ma ēc1na eņ1ķu ār1le um1zi uz1cē ez1pa os1ka ab1rī er1ģē et1ra īt1na ap1čī ok1ri eš1pe iž1ma is1ša āz1ģe on1dī ep1tā am1zi īg1lo iv1re at1lu āl1ci ez1vā iz1ti al1mā ug1li il1bi iļ1ķu aš1ņā iv1ba ik1ši īk1me ap1kū un1gi uk1nā al1vo up1lo oz1vē ēj1ka ap1rā ad1li uz1ju el1pa en1li at1ču īk1bū at1dā up1ta iļ1ņo ar1pī ak1vē ēc1ga eb1ne af1li ol1ka ez1fo in1ki an1gi ak1lo up1si ej1va ag1tu ek1ļo iž1vī as1zi ir1lī en1du uz1tā if1lo eļ1ļo ob1lī um1sū on1ci an1de es1lī ēb1si ib1tā il1da uķ1ko uk1ša āj1pe ej1bu ūv1ka ar1fa oz1ve īk1rā up1mā ūs1to ir1nī ag1lo oņ1ra iz1sū īg1ce an1dū iņ1vī e1džo ār1da īn1mā ār1ju er1vo ar1se i1dzē iļ1pi it1pu ur1sa id1da iš1ko eš1ķo ār1po ev1kā īk1rū os1ri ik1no ār1tu ur1ko oz1tu om1pi ar1šē on1nu uņ1ģi ur1šu ab1rē īr1kū en1cē em1je ap1va av1ļa aļ1bi uz1hi in1ča on1fu ār1sā oš1mī uz1rī il1ka un1tē as1mi iz1ga ār1mā āk1tā ik1lo im1pi or1pa aš1ro um1mē īn1te ež1rū ab1sa uz1mē a1dza as1sa un1gā ag1mī eš1mī eg1ša ak1ru ēt1ri or1se us1no it1mā uz1po in1čo iz1su is1to uk1vi ir1to um1ju uļ1sū in1dā um1tē ar1šo īk1ko er1me uk1si īv1pi ēr1mē as1tī in1kā en1za al1bu or1ģi a1dzī en1sa īs1ta eļ1de ū1dzē uk1tā ec1vi ūk1le ap1čo ēd1ni ān1ce if1tu īk1di āl1va ap1gu en1de ar1de ap1mū on1te es1da ud1ci at1se ūp1ni in1ha ap1de al1ci ir1pu um1va ok1tu ug1lī aņ1da ep1ša el1su īk1si eņ1ģe aļ1fi er1si op1ju od1le īt1pa ak1nā ap1nē ar1dī ek1zē at1zi āt1ka āl1mē em1za um1pu ap1žo ēj1sū en1le iz1lē er1zo um1dā ur1žu eh1no ab1ka īs1vē īb1šo as1se ul1lē ir1ki at1ča uļ1ķe āz1ma ip1nu ar1nī īg1lī ad1ra ez1ti īk1ra ūr1zi ap1vu ib1la īt1kā iļ1da ēl1ko ob1la o1dza ep1nī es1ri up1ji eļ1ku ik1ve es1vē er1lo um1do ik1lā em1žo is1so om1ju ij1ka en1ni āz1ne īv1di if1to un1je er1da en1kā ūt1ra en1ge āp1ji oņ1kā al1vi ēr1zā en1ga īr1ku ar1te up1rī or1ti ar1ķē el1lī iš1la an1no ec1pi ēk1šo an1da āp1šu iļ1ru ež1lī ed1rē ed1ka at1kū īb1si ež1ņa am1va un1dī ār1nā al1me uļ1ze es1tē āj1ba āp1šo ap1po en1zī er1sī ig1ro at1bu um1sē el1cē ās1ni ar1pū od1ve oz1ga in1do uz1mi un1mē uz1ka ig1ne et1pa ol1si ab1ra on1to os1kī aš1ķa iz1se īn1pi eb1ru es1nu ūt1ru ik1ri as1lu iz1la uz1ci at1tē on1da āp1ša ēp1ne or1ce ep1rā ūr1mā ež1vā up1jē eh1lo īg1ņā us1li ec1tē āt1mā ak1nu u1dzē ez1ne ar1dē ēk1da et1nē ež1ro ir1kū ap1lū īs1tē us1ba ēj1zo ī1dzu at1le ēg1na ep1tu i1dza af1ta ep1de īļ1ve od1ro um1šā en1se eņ1ra as1tu at1pu eļ1da āb1ba iš1ķa āg1ša il1bā ūš1tu ud1sa at1ģe um1šu aš1mā en1so eg1ba am1re ud1ro ov1na ik1re ār1rī ār1ni ež1ra i1dzo īs1to an1še ar1ju iz1ģē az1dū ēr1me oņ1ga ēr1tē id1mo īs1fi at1mī al1se il1ha ep1ja il1ce of1ra um1pi uz1rē aš1ņo el1ža ap1ņē ar1bu iņ1re ij1pu er1žo ol1ta ez1va aļ1ķi il1nī ag1no ul1lī ib1ri āt1ri um1pī ūg1tā is1fē ak1su al1to el1žu ap1ģē iv1ga al1za aļ1dē ēr1si ār1ņi et1rā aļ1ņi um1zu ūg1si az1mā in1ko īg1ri il1šu er1va uz1tū ec1cī īs1li a1dži u1dzā am1žu uz1fi iz1nī ir1dē ev1ga iz1ča iz1pu up1šu iz1gu in1ce uz1dī āb1šu or1ba i1dzā a1dzo es1tu āz1ti el1mā ap1vo ub1lē aš1ķē īs1vi en1jo as1ki ik1tī ok1le ur1ķu in1gī ek1ļu uz1to uk1le ir1bu āg1to uz1ne as1ko ek1rē ur1do ob1ta ār1jo uk1no ot1lī ur1te uz1re at1ma at1žo ēd1ne at1na us1ka al1vu ib1šu iz1dū ug1ko uz1vo at1zā eg1zī ūš1ga il1ni uz1ro el1pu ūg1to os1mā ul1ma as1ma al1ni ut1ra ug1šē at1sē in1fo eļ1bū uz1jā ēt1va ēk1ba ik1di īg1le op1ne ur1vī ār1dū ir1cē ēr1sē as1ja es1mo il1ci az1li em1šu ap1lu er1nā ot1rū uz1čo as1dē os1mo aļ1ga un1te at1ne om1ba ok1ra en1vā ap1sē an1dē ol1dē ap1ļa ek1sē ad1so iz1po uz1lī īk1ne ud1ra uz1ko ur1ta ep1šo ud1mi ār1ki eļ1vi ūk1ti īg1ro iņ1ti ur1du eg1tu ār1bo es1mu ar1ce os1ki iz1tē ev1mā ān1ko er1ge ē1dzī en1ba īv1ba ot1mu ēb1ta īn1rū ūk1ņa op1jo is1lo ob1ru ur1li ēs1le ur1lā ēj1rā ul1ko āg1tā iv1ku ām1ga o1dzē ī1dzē ir1za ip1rā at1tū iv1vi op1lū āp1si em1me ap1žā ār1mū ik1šā il1ba an1ze on1do il1he ek1ļa el1nē āk1re uk1se ēr1so ef1re ūt1rā ip1tu am1pā ak1ņu at1me ūr1ma ik1tā am1pu az1de en1ki iv1mo ar1ge īb1ti uj1ma os1ta as1na ēs1ma om1bo eb1rē er1ža āt1nu ež1ko uz1tē up1ni ig1nā an1na az1ku on1tī ar1sī ek1tū eņ1me os1vē ak1šī at1rē er1bu eļ1ņa og1ro īt1lī ij1ro ūk1si ār1žā ap1dā uz1pa ek1ļi iz1tū aš1ķo im1ta ik1nā at1jū ēg1no ā1dzē em1te er1ģe āš1ņi eļ1ta ap1lī ul1la uz1bi īt1di ud1bā en1tu un1ne uk1so īv1ti ol1je ed1li iz1ni ēr1šu eb1si ēv1ze uz1za er1ne om1pa ec1kā in1sa uz1ža ūs1ta ap1ļā ūv1ga iv1ri aļ1ba ob1ša ir1zī aš1mē āt1ru az1sa iš1ķi ok1nā or1mo iļ1ļa iņ1ru uz1gā uz1vā it1ri om1de is1cē is1mi op1ga at1čī ar1nē uz1ho at1bā ir1ži el1fi ir1ne ar1dā uz1fa ap1ki ur1dā āl1ze ār1li or1bu ap1ti um1ga ek1ņa al1pi us1fa ār1vo uz1ģi e1dži ig1nē uz1te ot1va ag1ļu os1pā īk1ņā īk1šu e1dze iš1jā ek1ve at1ļa āl1si or1zā ul1lo ab1va aņ1ķi ār1ķe ur1vo ap1ze em1ni oš1ņā ūž1za ēr1cē ap1hi ek1nī uz1ņe in1tā un1cē ib1lā īr1ga is1ku uz1zo ug1ši am1zā as1me un1dā ak1sā it1ļa ur1nī uz1ņē ēz1tu ab1tā ār1šā us1sa īg1šo eņ1ca op1lo āp1to el1mī eč1zi eg1ku al1pē ik1rī al1vē it1ļo em1mē iz1ba is1dā īd1mē en1ve ap1ju ol1ko ag1le ap1tē āt1nī āv1va et1so an1hi eš1kā ir1šu es1lā os1me is1tī ur1ne et1nu ap1mi ūz1ma or1mī as1za an1cē es1ni al1fa ēr1bo ur1ģe āg1si is1de īs1sa at1mi ēš1ļa ūg1da ūs1nā ār1ra un1kā ok1li ē1dzū ēg1nu al1bo op1da et1ķī ur1pi ār1pu ok1sī it1ļi ap1sa ip1ci ar1ša av1ma ec1vā iv1do ūs1ti at1dī ār1žē am1na ak1ļā iņ1me uz1ha ar1mi eļ1ļi ēp1tu of1to ag1rā il1zī ēg1šo il1sē is1ba ap1ko ug1šo ot1mā iž1ni ār1tē at1šu ep1šu uz1ģē ag1lū up1lu ām1gā ar1šī it1ve ak1ma už1pu uk1te uz1lo ik1ce eļ1rī et1na āl1ra oz1ti iz1ze ap1zo ir1nā ad1le ēt1ho ad1mo un1ta a1dzi az1ko āl1pa uz1nē ug1ma en1di iz1šū ag1rū īr1ra as1pē ok1ce en1cī il1mā op1su al1šu of1li ev1ma ab1ļā a1dzē ud1ru ir1zā od1bi ol1dā ap1ci il1dā ok1pe an1ki as1vī od1ru ur1pā āj1ga ēr1da ep1ju iz1re iņ1ka ār1mī at1lē ir1sē iš1ļa ēg1ša āš1ņu ar1gā av1la aļ1ni iz1fo il1la er1mu up1šo is1ma āl1sā ap1ļē ur1dī as1tā ul1tē es1cē ud1lī on1ve uz1ģe ek1me āš1ņo ek1la āl1ga iz1di on1vo er1tī on1ja uļ1žo ār1fo ak1rī ev1bi ij1ci eš1ra um1jo az1me im1šu aš1da or1tē uz1rā ār1vu al1ba in1ge ab1na an1ci īs1lā il1šā am1za al1jo ek1le im1dā iņ1de oļ1va iž1ra am1mē ok1rā er1le ok1vē ok1rū uz1ķē eb1ti āv1la a1dža iz1ļu on1ka uz1do ār1ķī ē1dzā an1nā āģ1zo uz1ča īt1bi am1da at1kā ēj1ko ul1du op1lā uk1šā ik1nu oh1ro at1ti eļ1dā it1li uļ1ļa ūs1mi at1he at1to ec1pa aņ1pa om1bu ig1tī ap1me er1so an1tu on1fi aš1ni īv1ja oņ1ma il1rū ap1pe em1di ār1pī er1žu it1rī al1tu iz1kā an1gu im1tu an1va īn1dā el1ti ap1sī ēr1be ez1ga ēt1ki us1tē īn1ko el1ze ab1lī ar1tā aš1ķū en1vi il1fa ik1ti eg1ri et1vā us1mi um1te eb1jo eļ1ģi ar1ha al1mi ig1lā ek1vē is1le eg1rē el1tā ap1ģe iz1ri er1to ug1to el1lo ār1lū el1sī el1fī oņ1da in1du eg1si ub1ļo un1zē ar1bī iz1ju ap1nā at1ce ej1da am1vī eņ1ķi oš1ļā ij1me ob1ra e1dže ap1pī am1pi īķ1ma op1te uz1cī oņ1te at1vā ap1ņi uk1lā ir1so ak1me ip1lo ik1ca ap1fi oj1ne iz1pa ok1to ok1ci en1mu ip1nī ol1za ār1ģi āk1ļu ēr1to āl1šā ef1le as1li ar1so as1mī at1re īs1co ar1nā ug1ta is1ta eg1ļu ām1ni ēg1ti eļ1ri o1dzi op1lē ip1nā oš1ķē ap1bū im1nā ir1gē īg1vā ēr1nu āk1si el1mo iz1ņi ap1mē al1pa ol1ti un1vē os1mī āk1li as1pā ēr1ķu ul1tī ij1ti im1fa ūs1ni um1ba um1me al1dā us1to iž1ce it1cī or1ņa ad1rī ur1ba us1vā u1dze oš1da ok1mī ež1ģi ef1li ir1kā uk1ti uz1dā ēr1ģe īg1tē ūs1te is1vi il1ti eš1ļā ik1me or1de od1va ur1zi iz1či uk1nī az1ma uz1ja āb1jo at1fa ev1ri iz1jo īs1pa u1dža od1ko eb1ro is1li at1mu at1sa ub1ri ab1me ēļ1ni ār1hu ik1tu ok1sa em1dē ab1lā um1sa og1lē āg1ta ez1li ob1ļā ad1pa ig1na or1sā ir1da an1sī am1mu ul1do ār1či uz1vi ol1ho em1zu ut1ni el1šo uļ1vi īk1šo is1lē uz1sa ir1gī ež1va īb1ne īd1la it1vi ēk1ve is1sa em1pe ēj1sa id1ra ol1da il1ca uv1re ār1tī ar1bū ap1mo il1ža a1dzu ap1se ub1lā as1pī er1tu īc1ni ip1ra og1lo ib1lu el1na uļ1ni ak1si an1ši ēr1zi er1ke am1ka on1za ār1bē ud1ni ak1ha us1mo ār1ņe at1dū iz1žu ām1ma aj1mu uz1čū aņ1ģi iz1ho ēj1ni ir1ni ek1tu ās1ku el1žo iz1ģe ēr1ķi ēr1se īr1sē iz1na ob1ro al1go um1si op1ļa ur1tu or1tā ul1cē iš1ķo ad1ro it1če il1vi uz1se oh1lo od1ne iļ1ra īg1no ap1ni oz1ni il1me ur1da āt1do ar1he in1tū ul1fī us1gu ul1cī al1bā ib1ra ir1ga ul1gu ān1ri il1gu ab1pe op1to il1zi is1ķi uv1cī ap1tā až1re iz1pī ud1be ek1ne ab1ļa iz1ki ar1mā iļ1ķe ok1ro ig1šu at1bo ār1pū īb1ta uz1kā iz1bi um1ma or1ko an1vā es1le is1ci op1mē ām1pu ir1ba os1tē ig1rē ok1da īk1le el1te ek1ru ok1mā ob1ja ar1gu iz1ķi or1gā ij1jū is1mā ūk1nē al1ce ēs1tā ur1la īv1bē ar1bo až1vi iz1li om1fi ar1ni ār1cē uņ1ni ir1pā uk1šu in1fu op1ļo on1mē ēš1la ūm1ju on1me is1ja āl1da āj1pu el1zi ēr1ko īs1tū āb1ta it1re ēr1ta ik1ne aņ1ģē es1na uš1ķī ēk1sū āp1jo ār1ja op1li ib1rē oš1ķa ag1ta ob1jo ok1lē ul1ku ip1te ar1cī ār1te īg1ša uz1ki ās1la et1ro ās1ti ar1ti iz1sa āk1zi uz1sē em1šo ok1so et1ze ar1žī oš1vi ap1ri ad1ru u1dzo āp1nē at1za ūr1li iv1la or1va ūv1be ep1ni eņ1sā ūr1vē āz1tā ēb1šo ev1lū ib1kā īt1da um1ša ug1sa ik1da ak1lu ēr1ļa os1mu īņ1la if1rā oņ1tū eg1ne is1mo uz1šū on1tū ob1šo in1va eg1lū ir1pi u1dza us1la ūs1pu ib1to iz1sē ap1čū ok1lā uv1mu īk1sa āķ1ve iz1mu uz1mī uļ1ķo ar1hī ēl1me īg1me ag1ve ur1vu ār1ha ed1ni āt1se at1ņa at1sū ūk1šu ol1me ūz1mē ip1to at1tī ēs1ta us1ve iņ1pu ol1va in1ši āp1ta ar1ko ēk1si el1zī er1nu az1pi ār1bī uk1la ek1ņi er1ro ēt1bi al1da is1pe īk1mu ēc1pu in1dē ūr1ve es1tū ēr1mi ez1ko ār1ko āl1lē ep1te ār1re an1ce od1ku ig1ru īk1tu ēž1ve ap1no ul1ga el1ve at1ņe ār1pā op1bu iv1ti iz1dā ig1ra ij1va ēr1di iz1lo uz1bo ās1nu el1ņa us1ne ev1ge ab1di uz1jo ār1kā eb1re ir1nu op1tā il1li uz1pī āj1do ēg1tī ul1re eļ1ķī ej1nī av1ļu aļ1ņu ūs1ga im1fo ab1ta ut1ne iš1ķu ez1nu or1sē ep1ļu ūt1si ik1le is1ga oz1to op1ti ur1šo il1kā im1du ēr1ba iz1no ar1je am1du ul1lu ot1ni eš1si at1pa ab1to ip1zā ūs1tī at1mū ī1dza im1bo op1tu ak1ta es1ve īk1ma ūk1ša in1di uz1ži iz1čī ad1vi am1šā iņ1ņa ār1ce ēd1ma ik1ni ap1tī ap1zu ep1sī am1pe uz1lē iņ1ģi uņ1ķi ur1pa eb1ra eš1me āt1ni or1me uč1ka ar1vi en1gā ar1ši uz1la es1kā uk1ņī ap1gā er1vu es1nā ir1šo iz1sī at1gū ar1ma ef1ro eš1ķi on1nī ap1ho ez1zi oņ1re ur1nu am1be ek1no is1jē āž1ni ag1lē ek1ci el1da es1pi ož1vī oņ1mā il1pā ok1la as1lī en1ze ām1vi ir1be ik1lī e1dzo uz1ti ul1ta ār1gu an1so ik1si eņ1ze iv1ju ag1nā ār1bi ib1ša or1fo ūr1zā ap1ņa ap1ji ēr1lī u1dzu en1rā iņ1pa at1ķī ār1vā ap1ļo ār1ca ek1šā ēr1ka īz1da us1di īk1to op1sa iv1ko āb1ti il1jo iz1ra ir1se uļ1pa iz1ņa ār1fa os1li ez1ma ar1si oš1ta eh1ro až1di er1sā ep1sa el1je āt1ce ek1lū an1dā ig1rā is1za ok1ru eš1ļi āj1mu ot1rē el1ka ur1čū eb1šu uz1žū eg1ve uz1ņu ob1ri ap1bi iž1ga av1va ūs1na ēj1ra iņ1ni eg1tī uš1pa ag1ma ur1ķē on1go ēr1ne īž1ni ir1ģe as1kū ēr1cī el1ša ēr1nī āk1ti es1mā ap1dē īn1me ig1šo es1ki ot1ne ab1rā ab1te ib1rī ir1po az1do en1sī az1nī er1bo al1bī ib1lē aš1ha es1va et1ru ez1jē id1ga il1tē on1ki il1na ur1go oņ1pa ur1lī od1pi īb1to iņ1va ad1ni ev1ka ar1la āb1tu at1vī er1su us1ku iv1vē iņ1za or1nī an1do ūt1ne om1bi an1to el1dē uļ1sē el1jē il1ča ās1lē as1pu uz1su uš1ku om1po ul1bē ēc1mē eņ1ko īv1zā eg1le is1ce is1ni od1rā om1na ul1mi āk1ļo ig1mu ir1me eg1ra eb1ta al1mu is1ki in1jo īn1vi ef1lā ēj1ca ar1hi ul1ba om1ja an1kā am1bū op1tē ol1lo am1mā at1ķi ad1hē ot1ma em1lī āl1le as1mē ūr1ga ik1la um1so an1dī us1lī ūr1ta in1že ip1ri ej1se ul1ki eg1bu il1šo at1pe at1čā ap1lē eg1lā īs1re ēr1ve ek1ca ap1so ēr1mo āz1ta or1tū āk1šu em1ci ok1ne ēd1nī es1ti il1pe ip1na ik1va os1lī iz1šā od1ri ob1rū un1va eb1ku il1to ir1tī uk1ro iz1cu āž1ra ur1di eb1ju ul1so īs1lo ēj1čū in1fi ur1za il1va iz1fa al1do ib1si ēr1bā os1ni oš1re im1ba ig1si ūr1fi ec1pu ak1to el1so ek1rā īs1va aš1mī en1ti en1pu eb1ri am1ma es1me ūn1vi ak1ci ēp1ša eš1ni el1vi ov1ka ēz1do iz1lā en1tū en1su ur1nā ot1ro ob1re ep1žo at1ķē ēp1ti en1ci at1bē uk1to āg1šu il1mē ār1žo is1va ēt1ce un1ro eg1me on1bū ah1ro ād1re or1ni uģ1ni uz1so uz1rū īs1kā īs1pu ar1šu ar1sā el1bu il1ta ur1ķi ak1ne ap1vē ār1ča av1ve os1pē aļ1ra eš1ķe ur1zo as1va uk1či ar1pi uk1ra ur1mē ez1se al1pī um1za īs1de aļ1ru uk1ko eb1le ul1ju āt1ze at1bū ez1vi at1šū ag1ra āt1kā īs1te iz1jū eš1ņo ur1co ar1bi ūs1tu it1ka en1sē eš1ņa ag1ro aļ1si id1ri it1no ež1ma os1pi ev1ti ēk1pi ap1tū us1mī el1hi iz1ha eš1ļu ām1vā un1gu ā1dzī āl1nī eb1li od1re āk1la ab1zi af1ni ād1ni ig1ri ek1ga uļ1mu on1va īv1ko um1ra at1pā ub1ļa er1nī ug1ļi aš1ke ēr1tī ap1ba od1jo ok1ļū us1tu uz1ķe ih1ta iņ1ga ēp1jo un1ce il1ši īt1ne oš1ķī ig1ta ol1lī ūk1ga es1pē et1bo ez1di ap1ķi uz1ca ig1mā or1ķa ez1to āp1ju ēk1nī at1ļu es1sē ir1pa ap1ra up1li ul1dī ē1dza ek1so ol1zī ēr1co or1ka ad1ja en1ra ez1ba iz1go en1hā ez1ka et1re ah1ve il1pī ep1lu eg1ti im1fā ih1nī ēr1dī ap1čā ēj1vi an1tī eņ1tu ut1ru ēj1tā ur1bu ur1de es1no am1pī un1vā iž1ku uk1lu un1bū un1tu is1nī ub1ļi ap1či ūd1ri en1lī es1pā iz1čū ob1ji ez1tā em1žu op1lī ab1lu od1rī āj1sa uk1ci an1žē ūt1ri un1dē eg1gā ur1pū il1di iķ1ve eņ1ka an1tū āv1vi īt1ro iz1ro āl1di i1dzi ad1rā ap1ne at1va iz1ma ūv1ko ūt1nē až1va ān1sa uz1zi as1vē et1vē iļ1bu aš1vā ap1ka iz1pi er1ša ed1na im1dē ag1nē āj1bu ād1ve eb1tā us1pū īt1sa ap1ži ūr1ni og1ļa āt1nē el1vē et1la og1ru iz1ka al1sī ir1zu om1fo eļ1jū il1bī il1sa uņ1ģī ej1sa or1nē am1ta ul1šo or1pē em1du ur1lo at1be ur1si ēr1ti er1šo at1pi or1lo ev1na ec1ri ol1ba iņ1kā ār1hi os1fā at1lū og1ni aš1sa eg1li ij1de eļ1mā il1nsa ir1pti iz1šķo ēl1mju uz1glā ap1slā op1ska ek1špē al1tru iz1smē ēr1kta us1kri il1bsi ul1gri ap1sku at1frē is1pru at1fri um1pja ār1brā os1tga as1pre ār1sve ūm1tve ār1brī uz1fra iz1dru ēr1ptu un1dzā ut1ska īk1šķo āb1sti iz1hlo ēr1šļo ap1gro at1šmī un1spu es1tro ap1blē et1rka us1gri at1plā on1ste ap1šķī el1dze ab1sce at1kļa iz1prā ug1šde on1fli at1stu im1šte ir1kta ar1bnī er1dzī en1dro ok1snī uk1šķa eš1bļo īt1ņmē et1rde ir1mbā az1gru in1grā uk1ska ap1spo āg1sti ug1špa al1kva ez1tne an1gli udz1ba ūk1sli at1sma ap1fra iķ1skā uz1sma īp1sla il1stu iz1gra os1krē am1sti uz1pre ez1gla īdz1jū us1trā iz1pla iļ1krā ēr1zka ap1pro ir1sno ir1smo ir1mme er1dze ān1prā ap1bru ēg1sto as1bra ek1šne ēr1bšo edž1li as1tru un1dra āl1pro ār1grē ēr1stā ar1pta īk1stu ez1spē am1skā ir1kļo on1gru iz1šta āļ1dzi āl1štā īs1pro ur1dzu ir1stī ār1šļa uz1gru el1pšu al1frī ek1šga ir1mdī ek1sku iz1spu uz1plū āk1sla iz1dre in1ssū uz1gle om1pre ār1gti udz1cī iš1brū uz1kru uz1sli uz1klā at1ble īdz1ni iz1smī ār1sni īs1spa iz1pre īg1sko iz1žva ir1gti ēr1bta īt1pra at1gla as1dzi ap1skū uk1šķe at1dzī uz1šta uk1lva at1dzē ār1šma es1prā iz1blo al1sti at1zvi in1dzo uz1krē at1kvē an1brū ur1ksi uz1stī op1sta in1sti on1sti uz1pli at1kve as1krē in1sda an1smi ap1stu us1tpu uz1kņu ār1blo on1gli ar1pli ap1šļa us1kre āk1šķu al1vja iz1sni ap1pla uz1brā iz1brē eš1stū iz1svā ēr1kša ug1sta at1blo ap1švi il1dno iz1glū ir1sdi im1pro ār1tre iz1bri āl1bra at1bri uk1stē iz1brū at1plē il1bšo ur1dza ik1lpa āt1rra uk1sti ur1kša en1džo ār1svā ap1krā īk1šķi at1rre iņ1zva at1žvī ār1blī ēr1sta ār1smi iz1šmī ug1šna iz1skā uz1trī ap1svī is1prā ek1sta at1sla at1trū āk1slī uz1kna il1dvi ār1dzi uz1šņu is1tre iz1svi ap1dri el1dmē ul1gto an1tzi is1kvī uz1kļū ār1šņo uz1frē ib1sto ig1sta in1ktī ir1sni en1sne em1pjo ēr1btu īn1skā ēk1šņo ik1smē es1trī at1šķū at1pla in1gto ot1rdi al1cvi um1bri uz1švi is1glī an1džū ap1sle uz1pļē ap1šķe iz1ble ap1šņa ir1mre en1tra ār1tra ul1snē iz1spa ep1sti ūt1sga āg1sto īb1sta ap1pļā at1kle il1gtu iz1spi am1tra an1fra uz1frā ēr1nva uz1stū ūk1sto at1šma um1šzi ug1stā at1špa il1kti īp1sle iz1tri os1tro el1pšo av1sta ak1tda ik1snu iz1stū ok1tri ap1gve op1spē iz1pra el1ptā es1tra iz1kni ān1spē os1kva ol1ste ul1dzo ek1šzo uz1ste uz1brī in1skā ār1švī il1nvē ūv1pro iz1šļu ev1ski en1zda āt1rda ēk1šķu ig1sto ēr1kšu ēr1ktā iz1skū an1kre iz1pro il1spi al1kto ok1zvē ap1zva ār1zvē un1tni ak1sti as1tri īb1spē os1mve en1sžu el1nru er1csa uz1zvi al1vtu at1dzi um1krū ot1frī ap1klī an1sko el1dko an1tkā ap1gla īk1šņa ār1gve il1dba es1tma uz1sti at1drū ul1pto uk1smi as1trē er1tro īb1sti id1spa at1trā ar1pna at1sta ek1trī at1šņo at1zve ig1zda ir1mpa ak1tni ir1kšo ār1plo ār1prā il1nti om1sva ēr1bja il1trā al1kta iz1dza iz1šma at1dza iz1kri ol1skā en1tni et1sti at1tru iz1špa ur1kne īg1zna ul1sva an1tza ār1tņu īn1krū uz1šņo ek1tkā at1plū il1kni uz1žņa ur1sli iz1tre ap1stī or1dda ur1gra at1glā ās1tni uz1žmi at1dze āl1sti ēr1slī el1nze āk1ste op1pla at1prā up1sto em1plā ib1stī up1sti ār1špa ēj1pla ār1hlo ap1frē il1kto al1dzi on1tri ar1gsē iz1frē ap1bro ul1tne im1stī ug1špē em1pta at1grū as1tma īk1ste iņ1krū il1kšu ek1ska is1tvi ār1dro iz1tro us1smē el1zta ēr1psi āk1sme ēs1tne ār1grū ok1gri up1stē ok1sko et1rro un1dze ap1trī uk1šķu in1sri en1tri āj1dzī ap1fri et1rpa uz1klu ik1sme ār1dra iz1kvi ēr1pto at1plī od1pra at1glu ap1fli uz1gri at1krī īk1stē oš1prā an1frē ap1sva il1bta ek1smē ār1šru us1tmā īk1smī al1dķi os1trī in1ssē al1tga ir1mkā ap1zvi ūg1sto em1pli uz1ble on1spe at1spā ār1sko ap1trā ek1šli āl1skā iv1pro ar1krē iz1tra uz1tri uk1ste ir1klī ap1kna er1spē ik1šķa ak1šķo ur1gšo al1dga ap1kla ap1svē in1tri im1tga in1šķi ēr1bka ēr1sti at1ska āb1sle ap1slī iz1slā an1gļu ir1msā ēr1pša or1tlī iz1dri un1kta el1dzī em1ztu en1ksi ār1kna un1kto ap1klu at1tra at1brā at1žva an1kro ap1sme ūg1sti ar1tmā in1gti ār1sti ik1stē om1bve ap1sko ār1ple īk1smi ug1sne ap1krē en1skā en1szī āk1sne es1pre ēr1ķti āl1sma īr1ska at1slī us1krē us1ska el1pta en1kto ar1bga ār1tru eņ1krū en1trē ār1spu en1spu al1ktā ik1sti em1zti āt1stā al1kci ap1kļū el1nsi ēr1nru ir1dza ār1klī at1tre il1dma īk1pla ap1sni el1kme el1nbā ak1smē āb1sto un1drā uz1glu uz1ska en1slī an1sli ēr1sba un1dro el1zto uz1trā uz1spā ap1dzē ap1dru in1dze ed1gri eļ1blā an1kci os1krū iz1spā an1krū ir1sra it1sko ir1mso un1ktī iz1slī er1zto et1pra ur1tra al1tme iz1slu il1gti iz1gre ek1šķī op1sva uz1tru ar1ppa in1dzē ab1dzi ur1tni uz1bri ab1stu in1gra uz1sva iz1krē ap1dzi ug1šte um1bru at1dro ir1sti ur1sti āl1sko at1klu en1kšo ut1skā il1pšu ur1gšu ar1knā ap1knu im1bra ēk1stu iz1knā il1bto āp1sli us1tru ak1šņo ap1prā ir1dzo en1krā ār1spē ar1kro iz1dro ār1bra il1dnī el1dba al1bri uz1brē ot1gri at1tvē ur1sme uz1šļa ek1šte at1šņa en1sro āk1slo an1žsa uz1plī an1tra il1bša il1tni us1glā ur1gti īg1stu ar1zva ol1lmē iz1kve ar1glī in1kru ap1kņu ir1pšu ec1skā ar1dzi od1ršu al1tma uz1sle eg1spa ap1šļi ek1šķo uz1spo ar1kto iz1zvi uz1šķo il1trē or1tre im1šļa iz1blē el1gti uz1slē ār1spo al1dka uz1bre is1tzo im1fva az1pra ap1plī aš1kri ir1pji uz1šļu iz1sla em1zto ur1kri al1tna er1dzi en1kti at1pļē ēr1slo ar1gto ūk1šķi in1dzu es1pļa oņ1pri uz1bļā us1tro ij1skā ār1fra iz1tru og1dzi ij1spe ij1stū uk1šķi ār1trā uz1kla ek1sče ik1stu ar1ppi iz1šņu oņ1sli il1psi iz1gro ēg1stu uz1sku ol1stī ur1vci uz1smī ur1zma en1sve er1spe uš1plē ur1bšu at1stū iz1sme el1gšu ec1sta ap1kra ek1šda il1dde el1kņa il1dle el1psi ap1stū ap1ple uz1ple ur1kšo ār1dnī ēr1pju ēk1šķa ir1mte ug1ļķe an1kvē il1gta īr1šķi ap1svā ul1lpu es1nvē uz1gve at1pri ug1šda at1šķo iz1plī ār1bri al1dkā udz1ma un1ssa os1prū iļ1ņve er1che ān1skā ab1ska ēr1sli ār1krī al1kšu ur1sto ūg1sna uk1sto ir1mcē id1sta id1slā ut1sko ir1stā ār1pro ir1kti ār1kre ap1glu as1tne iz1švī uz1spu al1nrū ār1spa un1ktā āb1slī ār1pļē ir1bju ur1bto el1svi un1ktū ug1šga ir1sli uz1fri ur1bta āb1stu em1brā om1pro ez1glā ep1sto al1kme iz1blī ar1ksi īk1smo ār1spe ap1krī iz1šķē ur1tkā ēk1lko ār1tna il1dsa al1dni el1dce on1tru iz1sto ūp1sto ap1žvī ap1tri od1gru ār1gtā iz1gve el1gsi er1nha at1švī ār1hro il1tvā uz1sme at1sve im1tni uz1pri ēr1sra as1krā en1ska iz1glī us1tdē ol1tme ūr1stu um1švi at1šļa ār1knā uz1tre ok1šņo at1bli at1sni el1gto ek1šķe ab1sti un1fte ap1gri ir1ste ul1sni en1tvi am1plu am1zda ik1stī at1knā at1skū is1tro is1trē īg1sta ir1spu am1svē ār1bru ec1stū ul1dza il1kšo ār1plā os1tni īk1sna uz1sta ār1zda ār1šķi uz1bli ek1tro ap1grē ur1bšo ir1slē iz1kla uz1trū uz1tra ak1sto os1tre uz1dri ir1sma ak1šķē ak1tli ek1švē ās1nku el1zti er1cba ēr1kto in1dsē al1kša um1tra ip1sna eļ1ska ār1šķī ap1kri ār1šķē el1drē im1pli uļ1dzi ir1pta ēr1pta il1pra up1stī iz1fra us1tre ub1krē ār1pļā in1fra il1kta ir1mpi ap1šņo at1sku un1dzi es1trē an1drī il1pto adz1ni ar1pju in1gtā iz1gru ap1šķo ēr1skā ot1rpi or1tfe ir1mti ik1šķi an1tmē am1bri un1dža il1pšo as1brā el1gšo ap1kvi ug1sme il1pne ēt1svi ir1kša as1sko ek1spe en1kša iz1bre em1pti ār1gre iz1frā iv1stā ul1šņa ār1kro as1pra il1ktā at1sle iz1glu ik1snā ok1šņa um1šma ār1gru ār1sme at1sna ur1kto ik1sna uz1svī us1slo am1pda em1ztā uz1žva is1smi ēr1tnī ār1gtu ār1drū īg1sti ap1tro at1sme iz1plē ir1tni ak1šžo il1sku ul1bša um1spo āk1sli ap1blo ār1dze ār1kva uk1sne āt1rvi ap1žva am1stu an1dra ār1gšo ek1stē ār1slo ār1gto ek1ļve ek1spo ār1tsa iz1dži ar1blā ēg1sti ar1bdi uk1šķī il1bšu or1pro ap1hlo iz1trī as1trī uz1smē ār1spā is1tri ab1klā uz1hlo uļ1sti at1fli ut1nko iv1krā ur1tdi ap1glū ār1glū om1skā at1sto um1sta ap1gle al1sma el1tra er1sto el1dvi iz1fri et1sko at1tva ār1kle āš1kru er1tce ap1kru us1tri uz1gla ap1ble il1sta ap1sve iz1dzī as1tpa em1psi iz1tvē ac1grī ēr1dzī ul1lci iz1šļi at1žņa ov1smē as1ska en1tge at1plu īs1šķi ār1dzī ēk1šņā el1nko ār1sku āv1sti āl1dzi ēp1stu īv1kla im1tmu os1pro ap1spē um1brā ul1dzi ār1stā ur1knē er1trū el1nba ār1bro ar1sme ok1sne il1ška at1svē ar1vde at1slu iz1bro ēr1ste āb1sli us1skā at1grā āp1stu ār1brū am1stī as1tmē iz1kņu en1kla iļ1sli um1sto ap1bļā uz1sna ol1klo er1tme iz1fli al1stu ap1špa ar1sti āk1šķi ār1dži um1bra ir1dzu al1kjū ap1smī āb1sta iz1kļa ul1ptū ap1smē ār1tnī ar1gva udz1so us1stu ap1ste ul1zna ār1glā ār1blā ur1ska il1stā el1nra ak1tri at1kņu eg1sme ap1grū ēk1šķo in1spi ik1sta am1bli ir1dzē ēr1ktu ur1kni el1tni iņ1krā iņ1kre iz1kle an1spa un1ska am1stā ēr1pšo ār1fli ir1mri ēr1btā at1svi ir1spa ār1tnā ap1šķū en1drā ek1šni at1trī ar1kti iz1pri ig1znē on1spi ul1kve ek1šķu āt1sko ek1sne īs1krā iz1klā ēj1tve ur1kti og1ļhi or1tme aš1plū ēj1slē am1pla ēs1tni ur1bsi is1tka is1dzi iz1spe ab1sta āp1sti as1tme os1tri udz1da ur1dzē at1šļu at1bra un1kla er1zti uz1pļā ār1dre il1gša iz1ple iz1žņa er1ztā el1dše ir1knē eņ1krā ēr1ssi al1sno ūp1stī ir1gsi iz1sta ir1sse uz1spe ek1sni īg1snē in1dzi at1kli ar1bve on1glo iv1ska il1dni ār1kra ār1blē ar1stā ār1sli eņ1ķmē ēr1bsi ik1smī āl1sci at1dre až1brī iz1plā ir1mve uz1gro up1jma uz1dza em1pto an1kto ež1sta ēr1šļu ap1brī uz1kro uz1skū uz1krī ap1šmī uz1kvi il1btā or1tje es1krā at1tve ul1stu ūk1stu en1kta ēr1stu ar1bma uk1stu ēr1nzi uz1slī ūk1sti at1sva ap1pļē il1nmi ir1snī in1dni āj1prā ar1sbu at1spa el1nma ek1stu is1grū is1nle āk1stī uz1stu if1šte ār1spi īk1stā ar1ktu ur1ktā āj1dzi ēr1bto iz1zva at1knu at1fra en1sra al1ctī ār1bre ar1bni ār1tni ez1pro an1tnī ēp1sti as1trā āp1sto īr1sva iz1šķa ig1stu er1tra es1tru as1grā al1sna ur1pre ur1mjā ēn1prā at1pro ek1ļpa ik1lve ēr1kšo iz1gla ap1sna in1dza ār1gra ir1gto iz1sna an1čki ap1tva ār1sna um1špe at1zva ig1zdo en1sva et1rga il1gga īk1sme al1stā et1rri iz1dzi ār1pra iz1trū ār1pli ēk1šķē āj1sta iz1kro ur1kšu iž1knā or1bci em1ptā an1scē ir1kšu al1tdi ēk1šņu īdz1ši ot1rre āt1spē ēk1mju āt1krū il1dda at1svī udz1kā ār1trī ar1ktā āl1ska en1sli es1pri ur1btu ug1stī uz1plā em1zta iz1bļā īk1sti uz1spa ār1tve an1dce el1dse uz1kra ap1sli ir1gta uz1slā ir1kli oņ1plū ur1gto an1grē ūk1sna āv1zva an1slā ek1švā ār1žva ār1šļu ap1frā až1skā at1pre as1tti iv1plā uz1grē ek1šno iz1grā uz1bra es1tpa ur1bra iz1kļu im1sto ur1gtu om1dzi ir1gka iz1šķe ek1sti uk1šga ār1sma el1tka ar1gma al1nra uļ1krē ar1gka iz1svē ēr1sto il1špa im1tci uk1plē el1pti is1dra er1sme ul1snī ār1krā āt1sma ir1stu at1pļā uk1smu an1dtā en1kšu ar1sko ēr1pti ēk1lva or1skā uk1sta ep1sta ār1tri ir1kņi ul1stā et1rvi il1btu ār1sla at1pli el1nsa ur1kmē uz1bro al1dne ār1frē un1spū ek1šķē en1pro an1dro at1bru ak1snī uz1tvē ik1spā uz1blī ap1šķi el1dra un1svi at1spu ār1fri ep1stu ēr1szā īb1sto ār1dza ār1gli el1kne ār1tne un1prā ap1kve uz1kni ap1dra ār1gša ār1kvi ir1zga ek1šgā ek1sve at1gle ār1stī es1pro al1kma iz1klī ug1sto az1pro āj1sla en1tne ul1sti at1kre ār1sva ār1šķe iz1kļū ap1slu il1zka ek1šme am1pšo ūr1sko uz1grā es1grā ap1šņu ir1kļa ur1lmē el1dfē az1dru at1rpu um1stu es1grī iz1kna as1smē ur1spī eņ1skā ār1slē udz1vī un1dru ar1ska eņ1tra am1pli uz1kli ul1gtu ēk1brū us1dzī ap1stā ar1kšu es1kra iz1brā ir1sta ar1gce em1ptu ur1ste ār1dru uz1pļa at1glū ad1skā ov1skā ak1stā ēr1zga ir1mga in1gtu īdz1te ār1drī am1bra īk1šķu ur1gsi ab1sci on1dri il1pju āp1jve ar1gbū ul1gšu ār1dva ār1tno ap1plo as1tka il1gšo iz1ska ār1dni ap1dva īk1snā ap1blā as1pļa ap1kre al1pre em1pšo ap1tru ak1stī el1sku ak1ņve ak1špa aļ1ska ūr1sta at1bļā in1gve at1hlo ig1frī ok1snē ār1gri ak1šķi āt1sna ul1tsi as1tni ir1sto an1sfo ek1šla ul1tzo ob1spi os1pri el1bri ār1žvī at1blī ot1rti il1gsi uz1zvē in1spe ir1ptu ag1sva iz1kli ok1sni el1gra um1spē ūp1sti ak1stē ur1kta an1dri ir1pto iz1pli īv1drē ar1pzo ur1bti ul1šņi at1blē og1ļra iz1sle il1pro il1gto eļ1tra iz1slē ār1kve ur1btā ār1frā al1tla ur1pmā ēr1ksi al1ksi ir1kņo in1sra em1blē ib1sta in1sci ur1ktu iz1šķū an1tni ām1glā ur1zva īk1šķē up1rla il1nga il1gla ēk1šņa en1prā uk1špa at1pļa iz1šķī ār1gšu ir1gša ul1dzē an1kku ul1tni un1dzē ap1sma er1sti el1ztu ir1gko im1tre us1sna ūk1šķu ik1tni at1brē as1kra an1dža am1plī ar1kša ap1spe an1ska ih1svē od1sli ēr1pšu ar1gre am1sto ān1ska or1tvī at1svā uz1šķū ūr1sto in1sce ud1spi udz1ga al1snā āg1stu al1tro at1šta at1kļū udz1vi ap1slo ap1gre iz1šņo ug1stu im1sti up1stu ur1stī os1kra ir1ska og1ļde um1dzi in1kvi ed1kļū ul1tra iz1sko el1gtā ur1gtā iz1pļē ap1smu er1stī āt1ršu ok1šņu ap1šķa āt1dzī at1tro at1brī al1sta udz1ru ar1gtē in1sta iņ1ķve at1kri al1snu iz1zvē iz1klu in1hro ir1ptā as1kvi ur1spi iz1kvē ār1skā ir1gtu āp1sta uz1bru ed1krā et1sta al1vga am1pša ar1pga uz1sla at1šķī at1dži ār1kļū ār1šro eņ1bra īk1gru ār1klā ak1ņko od1prā at1klī iz1stē ār1žņa at1tri ik1stū ek1šzī ār1kni ār1pre ap1klā ul1gta ēr1pjo ār1gsi iz1šņa iz1gle ēr1bjo is1stū eļ1drā ik1ste ēr1nga ap1tve uz1skā ap1knā ik1snī am1ble ek1stā ol1fga em1bri uz1spī el1dma iz1slo ar1gkā iz1svī ūg1kri un1kti er1pre uz1švī ap1dzī iz1spī ek1tda ēr1dze il1ska ār1tnu ur1bša ap1tra ap1dze an1ste in1ktū er1ztu as1pru en1sca uz1svā il1dmē ik1sni ār1brē āk1sto āk1slu ap1bri ap1stē iz1sti ap1pļa ār1šta īk1sne un1tra ok1šķi ūs1tni ok1trī iz1glā om1ple ār1kri uv1bra īv1stu āt1rgā ār1pļa uz1klī uz1slo at1gre eļ1bri as1prā ig1žņa ēr1glē ūr1sti īv1sva ah1tve ūk1sne et1rsi uz1špa an1dze um1pra er1plē iņ1sti at1drī at1dva in1tnī in1gvi al1šķī ap1slē id1plē il1nva uz1glū iz1švi udz1pu or1tli in1kri ap1pri em1dvi ār1drā as1tro ar1dze āk1sni uz1ski as1tva um1sve ār1gdi ik1sto os1pre at1frā el1dre il1dva ug1prā ul1stī uz1svi ur1tda ār1slu ūp1stā ez1glu īļ1knā an1cle ūp1stu ec1svi ak1šķe ir1dzī uz1dze āl1spē ij1dro ār1kla im1sli ap1bli il1sru on1skā uz1spi ul1dze ik1šķo us1krū ek1stī ek1šro it1bri as1pri ik1šķu or1tku at1kni is1mju im1stu ez1prā at1sli ur1vma om1sta er1sta ot1rpu es1pra uz1gre at1šķē ur1dzi ūk1ste ap1smi ār1stu an1skā ūr1stē ur1zmi ār1krē er1sma at1šņu od1sko im1pre al1snē ap1dza iz1pļa il1krū at1spe uz1krā in1tra at1šķi at1bro el1tga in1tro on1tda ak1šķa as1tna ir1ski aļ1stu os1kni ēr1tni ār1trū er1zta ir1zma iz1knu ar1gku eļ1gle iz1dzē ap1sti os1trā uz1šķi os1tru ir1kļu es1brā ar1sto ap1grā us1tme iz1ski in1sva um1sko un1kni at1kvi uk1stī ap1pli ot1plā et1rmo el1djo ub1sta uz1sni iz1dze ul1gšo am1pjo uz1dre ar1pni is1mmī al1dzī iz1žvī ar1bmū at1spo al1šķi uz1kvē al1kti udz1re ār1spī iz1kra et1rre ab1sto uz1slu ār1plē us1ttē ur1sta iz1gri ot1rto en1sti āv1grū ār1tva un1slī on1gre ēk1sne ir1kni el1dpū av1grī or1tjē īk1smā īdz1ju es1smē iz1spo iz1brī um1bve is1kva īg1ļla īs1stū im1tkā ār1gme ār1ble āč1plē ēr1zci ēp1sta el1drā ak1šķu al1nga uk1šķē ir1ktā od1ska īk1sto ir1spe ir1pšo ēj1spē at1hro id1smi on1tra at1gve il1dķe in1sku el1dtī ek1šķi uz1kre ap1zvē ār1ska ān1sve udz1vā iz1ste uz1pla an1cka ež1frē in1gša ap1hro in1gtī ir1mdi ir1mva ap1svi uz1dzī uz1pro ēr1sna ap1dro uz1blo al1tva ek1šsē udz1ve ih1stā uz1gra ēd1dzi ar1psi ār1dri at1klā iz1tve ār1sle ul1gša al1tvī ēr1ļve ir1mzi at1dra os1pļa ir1kto el1nga ēl1spi ap1gru ēr1bti us1pli ik1sma ār1slī ol1ska īt1ska ap1dži ur1tnī uz1dzi ār1šmī odz1ni ar1gda at1ski uz1dzē el1tli ov1ski el1ztā at1blā ar1dzī is1trā as1tra en1svī on1krē ur1gta en1tmē ār1kru un1dri ār1gla el1pva as1pro is1pri iz1plū il1dko ār1šļi ar1tne us1tne at1kna at1kra at1spi ēr1ptā īk1sta in1grī ed1spi op1stu um1šsa ap1pre ap1trū ār1šķa at1brū um1šķi el1stu al1sto uz1kļa al1nze at1gru on1fro at1kla ap1brū ir1mtē īdz1nā uz1šmī ap1gra ak1šze ap1blī an1kno il1skā ir1ktu ēt1spē al1vni ar1gri uz1kle ul1sto es1krū iz1pļā uz1plo at1šļi ug1šma ec1sla īg1sto uz1blē ib1sti en1sto in1kli ir1dzi ug1zna in1gro as1prū ež1gra iz1kre eg1slā ām1grā ig1znā am1fle ir1pša eg1smi uz1šķa ap1šķē ug1sti al1ste al1nci em1mvi īdz1ti ik1sno ār1svē et1rkā ul1gtā at1spē ār1sto il1šmā et1rti ar1dzē er1cko ar1sta ēr1bša āj1gle am1pja uz1dva ot1rkā ak1šma uz1plē ak1špu ār1bļā ir1gtā ik1šķē uz1zva al1stī os1kle ār1ste ug1šžo ēr1tne iz1dva is1tru ek1šku ap1skā ar1gti ar1gvi uz1smi im1pto ār1ski ār1plū uļ1ska ib1snī iz1šķi ap1ski un1sbī ep1stē us1sko at1zvē at1sti el1dzo īk1smē an1sku um1sla uz1šma ap1žņa ek1šze uz1kri ir1mmā an1čka ēg1sta at1kro et1rrā uz1knā uz1stā ap1drī ez1glo at1ple ar1šļa ug1šņu ār1kli ot1rzi al1kvī is1tra ib1stā or1dni el1dpa in1gpo ul1sla uz1tve el1tta ap1plē uz1šņa ār1sta os1tbi ār1gle og1ļrū er1stu iz1plo ūv1bri ēl1spu iz1sli ap1plu um1sti uk1švā us1tra uz1dži ēr1npa el1pjo et1kre āb1slē ik1lķe an1spo im1tku ok1gre iļ1ska an1tku an1sjē il1pša ūk1snā āl1szā ol1sto us1trē ij1krē an1flo ap1glā āl1svi at1slo ur1bjo el1sme at1smē op1dzī ūg1stu al1tra er1tne at1švi os1trē ez1drā ur1gša en1spo ov1ska il1ktu es1tre iz1dve ār1smē at1gra āg1sta ūv1gri as1tmā in1flā oņ1stū ār1klu el1tne ak1sta ār1dko ār1kvē an1tro at1kru ap1sto il1pta edz1ni is1pro īr1gro udz1si em1bra ār1zko ul1šņā us1sti ēk1šķi udz1vē um1tni ar1stu ap1kle īk1smu up1sta īk1sma ār1zva ab1rka ēdz1ni āb1stā ēr1kli en1tro ār1plī il1gšu ap1kvē as1tre ak1ste ek1šķa āt1rmo an1sce in1sde iz1kru ap1šļā at1bre on1sta ēr1zla el1gša ām1bra el1dzi uz1dru udz1di ap1brā ar1kta eņ1sla ar1švi iz1smi ir1vja en1gri ar1kšo uz1drī ul1sta ek1sme ār1šņa ār1zni ār1tro ap1kli ār1svi ēr1stē īk1stī et1rtū īdz1ci ur1tli ek1sto im1tsa us1brā uk1šķo ir1zta ār1stū un1ktu ēr1mju īk1šķa ur1kli uz1fli ap1plū il1dzi ap1dre az1sva ug1ļla at1stī iz1plu uz1tro is1sli iž1skā ir1gšo en1ktā ār1gta iz1bli ār1smī im1brī ār1dzē ār1svī ek1spa īdz1ko uz1svē at1plo or1tla ab1prā ir1tne ūk1slā iz1sve et1plā ir1sva il1bti uz1brū īt1spē uz1šķē udz1no at1slā iz1blā es1tdi us1zvi is1kri ēl1slē ob1sku ēk1šņi ul1šņu on1tro il1stī iz1bra ur1pni al1dsē im1ttū is1spē es1tme in1gvī ug1špu ir1dne iļ1ņla ap1sta ik1smi ad1grā iz1spē il1gtā iz1sva il1nbā im1stā ak1šve uz1pra uz1grū ār1skū iz1bru us1tsē ug1snē ār1dzo in1tni ig1sti er1gtu en1tru as1krū ār1slā ap1tvē el1sti il1sto il1dra ot1rga ur1kņu ap1bra er1tzā at1stā er1cli ēr1bšu uz1stē ap1plā an1gvi uz1šļi uz1blā ed1rvi as1tla iz1stu ot1spē us1pro im1tda am1krē op1pro ig1žņo at1bļa ap1kni iz1sma iz1grū an1dpu īv1prā ur1stu ar1stī ig1zne ūk1sta āj1sko ek1ška ub1sti ur1dze iz1hro ap1šma ap1spa ār1stē ib1stu at1smī im1sta il1ksi ar1ndo on1kre es1krē āl1plā uk1sma in1gri um1pro uz1dra ār1pla ār1plu at1ste el1gta en1gru il1tze ār1pri iz1krī at1krē es1prū is1svē ār1švi ār1knu en1ktu ap1tre iz1kņū ul1gsi in1dri iz1drī ek1ste aļ1ķne uz1spē os1tma ug1sni at1grē al1sni ur1nga ip1frū ēr1sko at1stē ēr1gli ol1fra at1gro un1kci ār1kņu iz1sku ek1sce ap1sla at1slē ap1šta ap1šļu es1tri uz1plu ār1bli ār1grā uz1sto il1tra in1gru ūk1sni en1szā os1prā āp1jvī ār1tnē il1ptu um1šza is1kre is1krē ul1gti um1dzī ek1špu ur1zni uz1dro us1tve ās1trā ūg1sta ap1brē er1vje iz1grē ar1gmu at1dru ap1kļa ap1spi ap1bre el1pto ār1tvē al1kšo uk1sme el1dzē il1kme ēn1skā ir1gšu il1sti ir1dsa ir1slī at1smi ār1šķo ar1spa al1dse uz1knu ar1gpo iz1šļa at1šķa ār1šņu uz1sve an1stē ek1trā ār1glu ur1vju oņ1sti at1drā iļ1pro iz1tva iz1trā ap1spā om1pli ak1stu ap1spu ek1tdi ok1ste er1gra am1bre uz1bļa us1gra el1gru am1sta at1sko īb1stu ek1tri el1mla an1sve at1skā un1dzī īk1gra ap1ska in1dko al1ktu ul1dzu es1trā at1spī ol1dla at1šķe eņ1ple os1tla ik1stā ap1švī uz1prā ap1kro ūt1smē is1gri em1pšu iz1bļa ir1mno ap1spī ēr1kti al1gme ed1svi is1bri un1sne en1svi uz1kve ār1gro er1stā uz1šķe eļ1krū od1rpa īv1grā et1rba un1sku ār1tmē āb1stī il1pjo iz1stā uz1žvī uz1šķī is1tko os1pra el1gtu ad1smi om1kra ut1sva il1pti ug1pre un1kte il1gru ār1šķū ez1gli iv1spē er1dlo āt1ršā ēj1grā ur1dzo en1trā ap1bļa ēr1tņu em1dni in1ksa āl1šķē uz1hro iv1sto et1rjū uļ1glu ir1psi el1zce um1slē at1gri el1ptu uk1stā at1pra ar1gjo uz1tva uz1sko iz1stī el1sto ap1pra ov1sku ar1šru ēp1sto at1krā ir1ksi ok1šķe iz1šļā iz1dra il1ptā il1dsē in1gta ūp1sta ug1ļko ar1džu iz1krā ul1dzī ur1stā ārg1sti ilg1sto akt1spo alt1gva ark1sta ugs1tlē uzs1pļa ald1skā ins1grē izs1prū ilk1tni urb1sti ezg1lve arp1pro irk1sni eld1plē ird1spu ilp1stu īns1trā ārs1kra ird1smi eln1svā irp1sti ārg1stu ens1sta ugš1sti irk1sti ilg1sta als1tpu ārd1dzi irm1dzi abs1tra umš1brū arb1spē ils1blī urs1krū izs1pra urb1stu udz1šķa uzs1kra aps1pre ins1gru ens1bla ārs1pra arg1krā ilk1tne ens1tru ulk1ste upj1gra unk1šķi urk1sta aps1krē irs1drē ērt1sli obs1tru ērt1ssū ast1sko ird1ska irg1sto ord1zni aks1tve ikt1stē uzs1pre izs1pro ilt1stē uzs1prā eks1tko alk1stī īdz1pro ens1dro irg1stu ing1sto izs1kra ink1stē alk1šķi ātr1sli ild1spa āls1tre alk1sto ubs1trā aps1tru ērk1šķa izs1trī ats1krē ārs1trī alk1stu uss1kri izs1pre ent1lme irg1zda ilb1sti eks1tre aps1pra ilk1sti unt1szi uzs1pro eks1klu iss1pri aps1trī ulb1sto urk1sti aps1pro aht1klu āls1sta ens1krā ilt1smā eks1pre uzs1tru aps1prā etr1kla uzs1pri īks1tmē eld1spē apj1dra ist1hre ids1krē irs1plā irs1stu unk1stē ilk1sni ink1šķi ird1smī irs1kre īdz1ska alk1snā īks1tsi izs1tru ars1tda unt1sno ēst1gri uzs1tre urk1sto uns1dro ulg1sto ātr1spi ilg1spē erc1sko ilb1sto āls1skā ens1krū aps1tri ilk1tnē udr1skā urb1jma ats1pra ird1sli izs1trā ekš1ņnī ind1sta aps1kra ērk1stu iln1bri uzs1pra udz1pla ilb1stu izs1kri ilk1stu irp1sta eks1trē ugs1tka ult1zva ātr1gri ink1šķo urk1šķa ulb1sti uzs1trā aps1trā irk1stī ulb1stu unk1tsi ons1trē īgt1spē ark1stu ilk1sto ark1šķo alt1kvē uns1dzē irk1stē ild1krē ink1sli urs1trā unk1sto ilk1stē ārg1sto akt1sgu ert1bri ilg1sti ērt1svē ērs1gri aps1trē eņs1krā amp1stu ats1trā ilp1sti ežs1trā erk1šķi eln1pla urk1sni akt1svi ens1dzi irg1sti ark1šķu ess1krā irk1sto unt1sma isn1gri alk1sne ild1pla udz1ska ārs1tru uzs1krū ink1šķē ērs1svī ērk1šķo īks1tpi ilt1rpa ātr1bra urk1stu ārs1pro als1sti eks1plo amp1sto izs1tre ang1ste irg1sta izs1krē ātr1spē ust1knā ark1šķē ark1šķi ārs1prā aps1prū ilp1sto īgs1trā ont1rre akt1sde ats1tre uzs1trī aps1pļa urk1šķi urk1ste ink1stu ājs1trā ats1pļa ērk1šķi etr1stū ink1sta ans1kri eks1pro ald1drā ārp1sta urb1sta unk1šķē akt1sda akt1spu alk1sni ārg1sta āls1tra āls1ste irg1zde āgs1tvi ird1zni irt1sku ons1trā ērk1sta ilp1sta isn1stū elk1sni ilt1sko ats1prū urk1šķu ars1tga ugs1tro ens1šķi ing1sti ads1krū els1tra ark1šķa ark1sto ant1sbe ink1šķa unk1sti ird1sde ink1sti ans1pla ugs1tra ats1pre irk1šķi irp1stu ils1dru als1tni ats1tru ins1tru anž1dze īks1pro amp1sti ars1tvī ugš1stā anc1spē ark1sti unk1sta irm1ska akt1smī ulg1stu amp1sta eks1trī unk1šķo urk1stē elz1szā ārs1tre ens1kri ink1šķe uks1trā ink1sto ult1spū elt1spē ats1pri ild1spē uzs1prū eks1tro egl1prā irp1sto alt1kri akņ1gra ārs1lve ārs1pļa udz1stū urb1sto aps1tre ugs1tvē ekļ1skā unk1šķa isn1prā ats1tri ākļ1stā udz1krā imt1pro ing1sta eks1plu akt1spa ilk1sta alk1šņa ats1prā īks1tča ent1rti ērk1sti irg1spē ikt1spē izs1prā akt1smi izs1krū unk1stu ats1krū ārs1pri unk1šķu ult1spē unt1sga ugs1tsi izs1pri ārs1krū aps1krū ārk1sti izs1pļa ars1tpu ērk1ste uzs1tri ulb1sta izs1tri ons1tru irs1svā ats1trī ārs1krē akt1ssa eks1tra akt1slo urk1šķo ing1stu ult1kva ust1spo ītņ1gri ežs1krū irm1sle irk1sta urk1šķē ort1pre ekš1ņla iņs1trā alk1sta irk1stu emm1dzi irg1zdā irm1kla aks1tni ons1tra ink1šķu ats1kra ind1rve akt1sja ens1blu aļķ1špa ult1sva ogļ1skā ārk1sta ulg1sti ērk1sto ird1sdā ugs1tce uns1grē ult1pla irš1krā egt1spē ārs1tni ats1pro akt1sla ārs1tri ilg1stu īdz1sva uzs1krē oks1krū ārt1sta ilb1sta alk1sti oks1tro ekš1dzi ent1rbē iln1ska irm1šķi ārs1trā aps1pri ons1krē ārs1pre irk1ste ird1slē ulg1sta akš1svā alt1bri ārs1prū .jā1s2p .ne1s2p .ie1s2p .no1s2p .pa1s2p .pie1s2p .sa1s2p .uz1s2p .aiz1s2p .ap1s2p .at1s2p .bez1s2p .pār1s2p .iz1s2p .eks1s2p .vis1s2p .jā1t2r .ne1t2r .ie1t2r .no1t2r .pa1t2r .pie1t2r .sa1t2r .uz1t2r .aiz1t2r .ap1t2r .at1t2r .bez1t2r .pār1t2r .iz1t2r .eks1t2r .vis1t2r .jā1s2c .ne1s2c .ie1s2c .no1s2c .pa1s2c .pie1s2c .sa1s2c .uz1s2c .aiz1s2c .ap1s2c .at1s2c .bez1s2c .pār1s2c .iz1s2c .eks1s2c .vis1s2c .jā1s2tj .ne1s2tj .ie1s2tj .no1s2tj .pa1s2tj .pie1s2tj .sa1s2tj .uz1s2tj .aiz1s2tj .ap1s2tj .at1s2tj .bez1s2tj .pār1s2tj .iz1s2tj .eks1s2tj .vis1s2tj .jā1g2l .ne1g2l .ie1g2l .no1g2l .pa1g2l .pie1g2l .sa1g2l .uz1g2l .aiz1g2l .ap1g2l .at1g2l .bez1g2l .pār1g2l .iz1g2l .eks1g2l .vis1g2l .jā1ž2v .ne1ž2v .ie1ž2v .no1ž2v .pa1ž2v .pie1ž2v .sa1ž2v .uz1ž2v .aiz1ž2v .ap1ž2v .at1ž2v .bez1ž2v .pār1ž2v .iz1ž2v .eks1ž2v .vis1ž2v .jā1š2ļ .ne1š2ļ .ie1š2ļ .no1š2ļ .pa1š2ļ .pie1š2ļ .sa1š2ļ .uz1š2ļ .aiz1š2ļ .ap1š2ļ .at1š2ļ .bez1š2ļ .pār1š2ļ .iz1š2ļ .eks1š2ļ .vis1š2ļ .jā1s2f .ne1s2f .ie1s2f .no1s2f .pa1s2f .pie1s2f .sa1s2f .uz1s2f .aiz1s2f .ap1s2f .at1s2f .bez1s2f .pār1s2f .iz1s2f .eks1s2f .vis1s2f .jā1š2t .ne1š2t .ie1š2t .no1š2t .pa1š2t .pie1š2t .sa1š2t .uz1š2t .aiz1š2t .ap1š2t .at1š2t .bez1š2t .pār1š2t .iz1š2t .eks1š2t .vis1š2t .jā1s2tr .ne1s2tr .ie1s2tr .no1s2tr .pa1s2tr .pie1s2tr .sa1s2tr .uz1s2tr .aiz1s2tr .ap1s2tr .at1s2tr .bez1s2tr .pār1s2tr .iz1s2tr .eks1s2tr .vis1s2tr .jā1b2r .ne1b2r .ie1b2r .no1b2r .pa1b2r .pie1b2r .sa1b2r .uz1b2r .aiz1b2r .ap1b2r .at1b2r .bez1b2r .pār1b2r .iz1b2r .eks1b2r .vis1b2r .jā1š2r .ne1š2r .ie1š2r .no1š2r .pa1š2r .pie1š2r .sa1š2r .uz1š2r .aiz1š2r .ap1š2r .at1š2r .bez1š2r .pār1š2r .iz1š2r .eks1š2r .vis1š2r .jā1š2v .ne1š2v .ie1š2v .no1š2v .pa1š2v .pie1š2v .sa1š2v .uz1š2v .aiz1š2v .ap1š2v .at1š2v .bez1š2v .pār1š2v .iz1š2v .eks1š2v .vis1š2v .jā1s2t .ne1s2t .ie1s2t .no1s2t .pa1s2t .pie1s2t .sa1s2t .uz1s2t .aiz1s2t .ap1s2t .at1s2t .bez1s2t .pār1s2t .iz1s2t .eks1s2t .vis1s2t .jā1p2r .ne1p2r .ie1p2r .no1p2r .pa1p2r .pie1p2r .sa1p2r .uz1p2r .aiz1p2r .ap1p2r .at1p2r .bez1p2r .pār1p2r .iz1p2r .eks1p2r .vis1p2r .jā1g2ļ .ne1g2ļ .ie1g2ļ .no1g2ļ .pa1g2ļ .pie1g2ļ .sa1g2ļ .uz1g2ļ .aiz1g2ļ .ap1g2ļ .at1g2ļ .bez1g2ļ .pār1g2ļ .iz1g2ļ .eks1g2ļ .vis1g2ļ .jā1š2k .ne1š2k .ie1š2k .no1š2k .pa1š2k .pie1š2k .sa1š2k .uz1š2k .aiz1š2k .ap1š2k .at1š2k .bez1š2k .pār1š2k .iz1š2k .eks1š2k .vis1š2k .jā1p2s .ne1p2s .ie1p2s .no1p2s .pa1p2s .pie1p2s .sa1p2s .uz1p2s .aiz1p2s .ap1p2s .at1p2s .bez1p2s .pār1p2s .iz1p2s .eks1p2s .vis1p2s .jā1k2l .ne1k2l .ie1k2l .no1k2l .pa1k2l .pie1k2l .sa1k2l .uz1k2l .aiz1k2l .ap1k2l .at1k2l .bez1k2l .pār1k2l .iz1k2l .eks1k2l .vis1k2l .jā1g2r .ne1g2r .ie1g2r .no1g2r .pa1g2r .pie1g2r .sa1g2r .uz1g2r .aiz1g2r .ap1g2r .at1g2r .bez1g2r .pār1g2r .iz1g2r .eks1g2r .vis1g2r .jā1š2ķ .ne1š2ķ .ie1š2ķ .no1š2ķ .pa1š2ķ .pie1š2ķ .sa1š2ķ .uz1š2ķ .aiz1š2ķ .ap1š2ķ .at1š2ķ .bez1š2ķ .pār1š2ķ .iz1š2ķ .eks1š2ķ .vis1š2ķ .jā1p2n .ne1p2n .ie1p2n .no1p2n .pa1p2n .pie1p2n .sa1p2n .uz1p2n .aiz1p2n .ap1p2n .at1p2n .bez1p2n .pār1p2n .iz1p2n .eks1p2n .vis1p2n .jā1s2v .ne1s2v .ie1s2v .no1s2v .pa1s2v .pie1s2v .sa1s2v .uz1s2v .aiz1s2v .ap1s2v .at1s2v .bez1s2v .pār1s2v .iz1s2v .eks1s2v .vis1s2v .jā1s2pr .ne1s2pr .ie1s2pr .no1s2pr .pa1s2pr .pie1s2pr .sa1s2pr .uz1s2pr .aiz1s2pr .ap1s2pr .at1s2pr .bez1s2pr .pār1s2pr .iz1s2pr .eks1s2pr .vis1s2pr .jā1d2r .ne1d2r .ie1d2r .no1d2r .pa1d2r .pie1d2r .sa1d2r .uz1d2r .aiz1d2r .ap1d2r .at1d2r .bez1d2r .pār1d2r .iz1d2r .eks1d2r .vis1d2r .jā1p2l .ne1p2l .ie1p2l .no1p2l .pa1p2l .pie1p2l .sa1p2l .uz1p2l .aiz1p2l .ap1p2l .at1p2l .bez1p2l .pār1p2l .iz1p2l .eks1p2l .vis1p2l .jā1d2v .ne1d2v .ie1d2v .no1d2v .pa1d2v .pie1d2v .sa1d2v .uz1d2v .aiz1d2v .ap1d2v .at1d2v .bez1d2v .pār1d2v .iz1d2v .eks1d2v .vis1d2v .jā1š2l .ne1š2l .ie1š2l .no1š2l .pa1š2l .pie1š2l .sa1š2l .uz1š2l .aiz1š2l .ap1š2l .at1š2l .bez1š2l .pār1š2l .iz1š2l .eks1š2l .vis1š2l .jā1s2k .ne1s2k .ie1s2k .no1s2k .pa1s2k .pie1s2k .sa1s2k .uz1s2k .aiz1s2k .ap1s2k .at1s2k .bez1s2k .pār1s2k .iz1s2k .eks1s2k .vis1s2k .jā1s2kv .ne1s2kv .ie1s2kv .no1s2kv .pa1s2kv .pie1s2kv .sa1s2kv .uz1s2kv .aiz1s2kv .ap1s2kv .at1s2kv .bez1s2kv .pār1s2kv .iz1s2kv .eks1s2kv .vis1s2kv .jā1k2v .ne1k2v .ie1k2v .no1k2v .pa1k2v .pie1k2v .sa1k2v .uz1k2v .aiz1k2v .ap1k2v .at1k2v .bez1k2v .pār1k2v .iz1k2v .eks1k2v .vis1k2v .jā1z2v .ne1z2v .ie1z2v .no1z2v .pa1z2v .pie1z2v .sa1z2v .uz1z2v .aiz1z2v .ap1z2v .at1z2v .bez1z2v .pār1z2v .iz1z2v .eks1z2v .vis1z2v .jā1k2s .ne1k2s .ie1k2s .no1k2s .pa1k2s .pie1k2s .sa1k2s .uz1k2s .aiz1k2s .ap1k2s .at1k2s .bez1k2s .pār1k2s .iz1k2s .eks1k2s .vis1k2s .jā1p2t .ne1p2t .ie1p2t .no1p2t .pa1p2t .pie1p2t .sa1p2t .uz1p2t .aiz1p2t .ap1p2t .at1p2t .bez1p2t .pār1p2t .iz1p2t .eks1p2t .vis1p2t .jā1z2n .ne1z2n .ie1z2n .no1z2n .pa1z2n .pie1z2n .sa1z2n .uz1z2n .aiz1z2n .ap1z2n .at1z2n .bez1z2n .pār1z2n .iz1z2n .eks1z2n .vis1z2n .jā1k2r .ne1k2r .ie1k2r .no1k2r .pa1k2r .pie1k2r .sa1k2r .uz1k2r .aiz1k2r .ap1k2r .at1k2r .bez1k2r .pār1k2r .iz1k2r .eks1k2r .vis1k2r .jā1s2kr .ne1s2kr .ie1s2kr .no1s2kr .pa1s2kr .pie1s2kr .sa1s2kr .uz1s2kr .aiz1s2kr .ap1s2kr .at1s2kr .bez1s2kr .pār1s2kr .iz1s2kr .eks1s2kr .vis1s2kr .jā1f2r .ne1f2r .ie1f2r .no1f2r .pa1f2r .pie1f2r .sa1f2r .uz1f2r .aiz1f2r .ap1f2r .at1f2r .bez1f2r .pār1f2r .iz1f2r .eks1f2r .vis1f2r .jā1s2h .ne1s2h .ie1s2h .no1s2h .pa1s2h .pie1s2h .sa1s2h .uz1s2h .aiz1s2h .ap1s2h .at1s2h .bez1s2h .pār1s2h .iz1s2h .eks1s2h .vis1s2h .jā1ž2ņ .ne1ž2ņ .ie1ž2ņ .no1ž2ņ .pa1ž2ņ .pie1ž2ņ .sa1ž2ņ .uz1ž2ņ .aiz1ž2ņ .ap1ž2ņ .at1ž2ņ .bez1ž2ņ .pār1ž2ņ .iz1ž2ņ .eks1ž2ņ .vis1ž2ņ .jā1d2d .ne1d2d .ie1d2d .no1d2d .pa1d2d .pie1d2d .sa1d2d .uz1d2d .aiz1d2d .ap1d2d .at1d2d .bez1d2d .pār1d2d .iz1d2d .eks1d2d .vis1d2d .jā1š2pr .ne1š2pr .ie1š2pr .no1š2pr .pa1š2pr .pie1š2pr .sa1š2pr .uz1š2pr .aiz1š2pr .ap1š2pr .at1š2pr .bez1š2pr .pār1š2pr .iz1š2pr .eks1š2pr .vis1š2pr .jā1v2j .ne1v2j .ie1v2j .no1v2j .pa1v2j .pie1v2j .sa1v2j .uz1v2j .aiz1v2j .ap1v2j .at1v2j .bez1v2j .pār1v2j .iz1v2j .eks1v2j .vis1v2j .jā1f2j .ne1f2j .ie1f2j .no1f2j .pa1f2j .pie1f2j .sa1f2j .uz1f2j .aiz1f2j .ap1f2j .at1f2j .bez1f2j .pār1f2j .iz1f2j .eks1f2j .vis1f2j .jā1p2j .ne1p2j .ie1p2j .no1p2j .pa1p2j .pie1p2j .sa1p2j .uz1p2j .aiz1p2j .ap1p2j .at1p2j .bez1p2j .pār1p2j .iz1p2j .eks1p2j .vis1p2j .jā1b2ļ .ne1b2ļ .ie1b2ļ .no1b2ļ .pa1b2ļ .pie1b2ļ .sa1b2ļ .uz1b2ļ .aiz1b2ļ .ap1b2ļ .at1b2ļ .bez1b2ļ .pār1b2ļ .iz1b2ļ .eks1b2ļ .vis1b2ļ .jā1g2n .ne1g2n .ie1g2n .no1g2n .pa1g2n .pie1g2n .sa1g2n .uz1g2n .aiz1g2n .ap1g2n .at1g2n .bez1g2n .pār1g2n .iz1g2n .eks1g2n .vis1g2n .jā1h2r .ne1h2r .ie1h2r .no1h2r .pa1h2r .pie1h2r .sa1h2r .uz1h2r .aiz1h2r .ap1h2r .at1h2r .bez1h2r .pār1h2r .iz1h2r .eks1h2r .vis1h2r .jā1s2n .ne1s2n .ie1s2n .no1s2n .pa1s2n .pie1s2n .sa1s2n .uz1s2n .aiz1s2n .ap1s2n .at1s2n .bez1s2n .pār1s2n .iz1s2n .eks1s2n .vis1s2n .jā1ž2m .ne1ž2m .ie1ž2m .no1ž2m .pa1ž2m .pie1ž2m .sa1ž2m .uz1ž2m .aiz1ž2m .ap1ž2m .at1ž2m .bez1ž2m .pār1ž2m .iz1ž2m .eks1ž2m .vis1ž2m .jā1d2ž .ne1d2ž .ie1d2ž .no1d2ž .pa1d2ž .pie1d2ž .sa1d2ž .uz1d2ž .aiz1d2ž .ap1d2ž .at1d2ž .bez1d2ž .pār1d2ž .iz1d2ž .eks1d2ž .vis1d2ž .jā1k2c .ne1k2c .ie1k2c .no1k2c .pa1k2c .pie1k2c .sa1k2c .uz1k2c .aiz1k2c .ap1k2c .at1k2c .bez1k2c .pār1k2c .iz1k2c .eks1k2c .vis1k2c .jā1k2ņ .ne1k2ņ .ie1k2ņ .no1k2ņ .pa1k2ņ .pie1k2ņ .sa1k2ņ .uz1k2ņ .aiz1k2ņ .ap1k2ņ .at1k2ņ .bez1k2ņ .pār1k2ņ .iz1k2ņ .eks1k2ņ .vis1k2ņ .jā1š2m .ne1š2m .ie1š2m .no1š2m .pa1š2m .pie1š2m .sa1š2m .uz1š2m .aiz1š2m .ap1š2m .at1š2m .bez1š2m .pār1š2m .iz1š2m .eks1š2m .vis1š2m .jā1g2v .ne1g2v .ie1g2v .no1g2v .pa1g2v .pie1g2v .sa1g2v .uz1g2v .aiz1g2v .ap1g2v .at1g2v .bez1g2v .pār1g2v .iz1g2v .eks1g2v .vis1g2v .jā1h2l .ne1h2l .ie1h2l .no1h2l .pa1h2l .pie1h2l .sa1h2l .uz1h2l .aiz1h2l .ap1h2l .at1h2l .bez1h2l .pār1h2l .iz1h2l .eks1h2l .vis1h2l .jā1k2ļ .ne1k2ļ .ie1k2ļ .no1k2ļ .pa1k2ļ .pie1k2ļ .sa1k2ļ .uz1k2ļ .aiz1k2ļ .ap1k2ļ .at1k2ļ .bez1k2ļ .pār1k2ļ .iz1k2ļ .eks1k2ļ .vis1k2ļ .jā1s2l .ne1s2l .ie1s2l .no1s2l .pa1s2l .pie1s2l .sa1s2l .uz1s2l .aiz1s2l .ap1s2l .at1s2l .bez1s2l .pār1s2l .iz1s2l .eks1s2l .vis1s2l .jā1t2v .ne1t2v .ie1t2v .no1t2v .pa1t2v .pie1t2v .sa1t2v .uz1t2v .aiz1t2v .ap1t2v .at1t2v .bez1t2v .pār1t2v .iz1t2v .eks1t2v .vis1t2v .jā1š2ņ .ne1š2ņ .ie1š2ņ .no1š2ņ .pa1š2ņ .pie1š2ņ .sa1š2ņ .uz1š2ņ .aiz1š2ņ .ap1š2ņ .at1š2ņ .bez1š2ņ .pār1š2ņ .iz1š2ņ .eks1š2ņ .vis1š2ņ .jā1š2p .ne1š2p .ie1š2p .no1š2p .pa1š2p .pie1š2p .sa1š2p .uz1š2p .aiz1š2p .ap1š2p .at1š2p .bez1š2p .pār1š2p .iz1š2p .eks1š2p .vis1š2p .jā1d2z .ne1d2z .ie1d2z .no1d2z .pa1d2z .pie1d2z .sa1d2z .uz1d2z .aiz1d2z .ap1d2z .at1d2z .bez1d2z .pār1d2z .iz1d2z .eks1d2z .vis1d2z .jā1f2l .ne1f2l .ie1f2l .no1f2l .pa1f2l .pie1f2l .sa1f2l .uz1f2l .aiz1f2l .ap1f2l .at1f2l .bez1f2l .pār1f2l .iz1f2l .eks1f2l .vis1f2l .jā1k2n .ne1k2n .ie1k2n .no1k2n .pa1k2n .pie1k2n .sa1k2n .uz1k2n .aiz1k2n .ap1k2n .at1k2n .bez1k2n .pār1k2n .iz1k2n .eks1k2n .vis1k2n .jā1p2ļ .ne1p2ļ .ie1p2ļ .no1p2ļ .pa1p2ļ .pie1p2ļ .sa1p2ļ .uz1p2ļ .aiz1p2ļ .ap1p2ļ .at1p2ļ .bez1p2ļ .pār1p2ļ .iz1p2ļ .eks1p2ļ .vis1p2ļ .jā1s2pļ .ne1s2pļ .ie1s2pļ .no1s2pļ .pa1s2pļ .pie1s2pļ .sa1s2pļ .uz1s2pļ .aiz1s2pļ .ap1s2pļ .at1s2pļ .bez1s2pļ .pār1s2pļ .iz1s2pļ .eks1s2pļ .vis1s2pļ .jā1s2kl .ne1s2kl .ie1s2kl .no1s2kl .pa1s2kl .pie1s2kl .sa1s2kl .uz1s2kl .aiz1s2kl .ap1s2kl .at1s2kl .bez1s2kl .pār1s2kl .iz1s2kl .eks1s2kl .vis1s2kl .jā1k2b .ne1k2b .ie1k2b .no1k2b .pa1k2b .pie1k2b .sa1k2b .uz1k2b .aiz1k2b .ap1k2b .at1k2b .bez1k2b .pār1k2b .iz1k2b .eks1k2b .vis1k2b .jā1s2m .ne1s2m .ie1s2m .no1s2m .pa1s2m .pie1s2m .sa1s2m .uz1s2m .aiz1s2m .ap1s2m .at1s2m .bez1s2m .pār1s2m .iz1s2m .eks1s2m .vis1s2m .jā1m2n .ne1m2n .ie1m2n .no1m2n .pa1m2n .pie1m2n .sa1m2n .uz1m2n .aiz1m2n .ap1m2n .at1m2n .bez1m2n .pār1m2n .iz1m2n .eks1m2n .vis1m2n .jā1š2n .ne1š2n .ie1š2n .no1š2n .pa1š2n .pie1š2n .sa1š2n .uz1š2n .aiz1š2n .ap1š2n .at1š2n .bez1š2n .pār1š2n .iz1š2n .eks1š2n .vis1š2n .jā1v2r .ne1v2r .ie1v2r .no1v2r .pa1v2r .pie1v2r .sa1v2r .uz1v2r .aiz1v2r .ap1v2r .at1v2r .bez1v2r .pār1v2r .iz1v2r .eks1v2r .vis1v2r .jā1b2l .ne1b2l .ie1b2l .no1b2l .pa1b2l .pie1b2l .sa1b2l .uz1b2l .aiz1b2l .ap1b2l .at1b2l .bez1b2l .pār1b2l .iz1b2l .eks1b2l .vis1b2l 2b3dams. 2c3dams. 2č3dams. 2d3dams. 2f3dams. 2g3dams. 2ģ3dams. 2h3dams. 2j3dams. 2k3dams. 2ķ3dams. 2l3dams. 2ļ3dams. 2m3dams. 2n3dams. 2ņ3dams. 2p3dams. 2r3dams. 2s3dams. 2š3dams. 2t3dams. 2v3dams. 2z3dams. 2ž3dams. 2b3da3ma. 2c3da3ma. 2č3da3ma. 2d3da3ma. 2f3da3ma. 2g3da3ma. 2ģ3da3ma. 2h3da3ma. 2j3da3ma. 2k3da3ma. 2ķ3da3ma. 2l3da3ma. 2ļ3da3ma. 2m3da3ma. 2n3da3ma. 2ņ3da3ma. 2p3da3ma. 2r3da3ma. 2s3da3ma. 2š3da3ma. 2t3da3ma. 2v3da3ma. 2z3da3ma. 2ž3da3ma. 2b3da3mies. 2c3da3mies. 2č3da3mies. 2d3da3mies. 2f3da3mies. 2g3da3mies. 2ģ3da3mies. 2h3da3mies. 2j3da3mies. 2k3da3mies. 2ķ3da3mies. 2l3da3mies. 2ļ3da3mies. 2m3da3mies. 2n3da3mies. 2ņ3da3mies. 2p3da3mies. 2r3da3mies. 2s3da3mies. 2š3da3mies. 2t3da3mies. 2v3da3mies. 2z3da3mies. 2ž3da3mies. 2b3da3mās. 2c3da3mās. 2č3da3mās. 2d3da3mās. 2f3da3mās. 2g3da3mās. 2ģ3da3mās. 2h3da3mās. 2j3da3mās. 2k3da3mās. 2ķ3da3mās. 2l3da3mās. 2ļ3da3mās. 2m3da3mās. 2n3da3mās. 2ņ3da3mās. 2p3da3mās. 2r3da3mās. 2s3da3mās. 2š3da3mās. 2t3da3mās. 2v3da3mās. 2z3da3mās. 2ž3da3mās. 2b3gans. 2c3gans. 2č3gans. 2d3gans. 2f3gans. 2g3gans. 2ģ3gans. 2h3gans. 2j3gans. 2k3gans. 2ķ3gans. 2l3gans. 2ļ3gans. 2m3gans. 2n3gans. 2ņ3gans. 2p3gans. 2r3gans. 2s3gans. 2š3gans. 2t3gans. 2v3gans. 2z3gans. 2ž3gans. 2b3ga3na. 2c3ga3na. 2č3ga3na. 2d3ga3na. 2f3ga3na. 2g3ga3na. 2ģ3ga3na. 2h3ga3na. 2j3ga3na. 2k3ga3na. 2ķ3ga3na. 2l3ga3na. 2ļ3ga3na. 2m3ga3na. 2n3ga3na. 2ņ3ga3na. 2p3ga3na. 2r3ga3na. 2s3ga3na. 2š3ga3na. 2t3ga3na. 2v3ga3na. 2z3ga3na. 2ž3ga3na. 2b3nieks. 2c3nieks. 2č3nieks. 2d3nieks. 2f3nieks. 2g3nieks. 2ģ3nieks. 2h3nieks. 2j3nieks. 2k3nieks. 2ķ3nieks. 2l3nieks. 2ļ3nieks. 2m3nieks. 2n3nieks. 2ņ3nieks. 2p3nieks. 2r3nieks. 2s3nieks. 2š3nieks. 2t3nieks. 2v3nieks. 2z3nieks. 2ž3nieks. 2b3nie3ce. 2c3nie3ce. 2č3nie3ce. 2d3nie3ce. 2f3nie3ce. 2g3nie3ce. 2ģ3nie3ce. 2h3nie3ce. 2j3nie3ce. 2k3nie3ce. 2ķ3nie3ce. 2l3nie3ce. 2ļ3nie3ce. 2m3nie3ce. 2n3nie3ce. 2ņ3nie3ce. 2p3nie3ce. 2r3nie3ce. 2s3nie3ce. 2š3nie3ce. 2t3nie3ce. 2v3nie3ce. 2z3nie3ce. 2ž3nie3ce. 2b3nī3ca. 2c3nī3ca. 2č3nī3ca. 2d3nī3ca. 2f3nī3ca. 2g3nī3ca. 2ģ3nī3ca. 2h3nī3ca. 2j3nī3ca. 2k3nī3ca. 2ķ3nī3ca. 2l3nī3ca. 2ļ3nī3ca. 2m3nī3ca. 2n3nī3ca. 2ņ3nī3ca. 2p3nī3ca. 2r3nī3ca. 2s3nī3ca. 2š3nī3ca. 2t3nī3ca. 2v3nī3ca. 2z3nī3ca. 2ž3nī3ca. 2b3ša3na. 2c3ša3na. 2č3ša3na. 2d3ša3na. 2f3ša3na. 2g3ša3na. 2ģ3ša3na. 2h3ša3na. 2j3ša3na. 2k3ša3na. 2ķ3ša3na. 2l3ša3na. 2ļ3ša3na. 2m3ša3na. 2n3ša3na. 2ņ3ša3na. 2p3ša3na. 2r3ša3na. 2s3ša3na. 2š3ša3na. 2t3ša3na. 2v3ša3na. 2z3ša3na. 2ž3ša3na. 2b3ša3nās. 2c3ša3nās. 2č3ša3nās. 2d3ša3nās. 2f3ša3nās. 2g3ša3nās. 2ģ3ša3nās. 2h3ša3nās. 2j3ša3nās. 2k3ša3nās. 2ķ3ša3nās. 2l3ša3nās. 2ļ3ša3nās. 2m3ša3nās. 2n3ša3nās. 2ņ3ša3nās. 2p3ša3nās. 2r3ša3nās. 2s3ša3nās. 2š3ša3nās. 2t3ša3nās. 2v3ša3nās. 2z3ša3nās. 2ž3ša3nās. 2b3ta3la. 2c3ta3la. 2č3ta3la. 2d3ta3la. 2f3ta3la. 2g3ta3la. 2ģ3ta3la. 2h3ta3la. 2j3ta3la. 2k3ta3la. 2ķ3ta3la. 2l3ta3la. 2ļ3ta3la. 2m3ta3la. 2n3ta3la. 2ņ3ta3la. 2p3ta3la. 2r3ta3la. 2s3ta3la. 2š3ta3la. 2t3ta3la. 2v3ta3la. 2z3ta3la. 2ž3ta3la. 2b3tu3ve. 2c3tu3ve. 2č3tu3ve. 2d3tu3ve. 2f3tu3ve. 2g3tu3ve. 2ģ3tu3ve. 2h3tu3ve. 2j3tu3ve. 2k3tu3ve. 2ķ3tu3ve. 2l3tu3ve. 2ļ3tu3ve. 2m3tu3ve. 2n3tu3ve. 2ņ3tu3ve. 2p3tu3ve. 2r3tu3ve. 2s3tu3ve. 2š3tu3ve. 2t3tu3ve. 2v3tu3ve. 2z3tu3ve. 2ž3tu3ve. .jā3a2 .ne3a2 .ie3a2 .no3a2 .pa3a2 .pie3a2 .sa3a2 .uz3a2 .aiz3a2 .ap3a2 .at3a2 .bez3a2 .pār3a2 .iz3a2 .eks3a2 .vis3a2 .jā3ā2 .ne3ā2 .ie3ā2 .no3ā2 .pa3ā2 .pie3ā2 .sa3ā2 .uz3ā2 .aiz3ā2 .ap3ā2 .at3ā2 .bez3ā2 .pār3ā2 .iz3ā2 .eks3ā2 .vis3ā2 .jā3e2 .ne3e2 .ie3e2 .no3e2 .pa3e2 .pie3e2 .sa3e2 .uz3e2 .aiz3e2 .ap3e2 .at3e2 .bez3e2 .pār3e2 .iz3e2 .eks3e2 .vis3e2 .jā3ē2 .ne3ē2 .ie3ē2 .no3ē2 .pa3ē2 .pie3ē2 .sa3ē2 .uz3ē2 .aiz3ē2 .ap3ē2 .at3ē2 .bez3ē2 .pār3ē2 .iz3ē2 .eks3ē2 .vis3ē2 .jā3i2 .ne3i2 .ie3i2 .no3i2 .pa3i2 .pie3i2 .sa3i2 .uz3i2 .aiz3i2 .ap3i2 .at3i2 .bez3i2 .pār3i2 .iz3i2 .eks3i2 .vis3i2 .jā3ī2 .ne3ī2 .ie3ī2 .no3ī2 .pa3ī2 .pie3ī2 .sa3ī2 .uz3ī2 .aiz3ī2 .ap3ī2 .at3ī2 .bez3ī2 .pār3ī2 .iz3ī2 .eks3ī2 .vis3ī2 .jā3o2 .ne3o2 .ie3o2 .no3o2 .pa3o2 .pie3o2 .sa3o2 .uz3o2 .aiz3o2 .ap3o2 .at3o2 .bez3o2 .pār3o2 .iz3o2 .eks3o2 .vis3o2 .jā3u2 .ne3u2 .ie3u2 .no3u2 .pa3u2 .pie3u2 .sa3u2 .uz3u2 .aiz3u2 .ap3u2 .at3u2 .bez3u2 .pār3u2 .iz3u2 .eks3u2 .vis3u2 .jā3ū2 .ne3ū2 .ie3ū2 .no3ū2 .pa3ū2 .pie3ū2 .sa3ū2 .uz3ū2 .aiz3ū2 .ap3ū2 .at3ū2 .bez3ū2 .pār3ū2 .iz3ū2 .eks3ū2 .vis3ū2 .jā3ie1 .jā3iz1 .jā3no1 .ne3aiz1 .ne3ap1 .ne3ie1 .ne3at1 .ne3in1 .ne3iz1 .ne3sa .ne3uz1 .priek2š1 4d5ze1me .tur2p1m il2k1tie .spil2g1t mē1ne2š1 1pa1d2smit g2š1gal k2š1gal tran2s 1port vēs2t1n vēs2t1k pa2t3stā pa2s2t3k pa2s2t3m pa2s2t2s. pa2r2k2s. pa2r3ket sa2ls. sa2lds. sa2l2d1 pir2m1r pir2m1k pir2m2s1 ot2r1r2 ot2r1k2 ir2k3l ir2k3ļ .adā2m3 .ai4z5 ak3me4ņ3 apak2š3 ap1au kār2t3n aug2s2t3 .at3e2j bal2t3ma .vie2n1", ["length"]=84331, ["minhyphenmax"]=1, ["minhyphenmin"]=1, ["n"]=11583, }, ["version"]="1.001", }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-et.rme0000644000175000017500000000701711761001300024645 0ustar norbertnorbert% generated by mtxrun --script pattern --convert Estonian hyphenation patterns (more info about the licence to be added later) % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: eehyph.tex (2004-04-13) % Author: Een Saar % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % Estonian hyphenation patterns % Copyright 2003 Een Saar % % This work may be distributed and/or modified under the conditions % of the LaTeX Project Public License, either version 1.3 of this % license or (at your option) any later version. The latest version % of this license is in http://www.latex-project.org/lppl.txt and % version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status "author-maintained". % This work consists of this file only (eehyph.tex). % % The patterns were generated long ago by applying patgen to % an Estonian dictionary; a few patterns were added later manually % to prohibit aa-bits type cases. % Declare the special characters % context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-sl.hyp0000644000175000017500000000017111761001300024662 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-sl.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hu.hyp0000644000175000017500000000017111761001300024660 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-hu.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hr.pat0000644000175000017500000001716011761001300024647 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-hr.rme % used: a b c d e f g h i j k l m n o p r s t u v z ć č đ š ž \patterns{ a1a2 a1e2 a1i2 a1o2 a1u2 e1a2 e1e2 e1i2 e1o2 e1u2 i1a2 i1e2 i1i2 i1o2 i1u2 o1a2 o1e2 o1i2 o1o2 o1u2 u1a2 u1e2 u1i2 u1o2 u1u2 a1ba a1be a1bi a1bo a1bu a1ca a1ce a1ci a1co a1cu a1ča a1če a1či a1čo a1ču a1ća a1će a1ći a1ćo a1ću a1da a1de a1di a1do a1du a1dža a1dže a1dži a1džo a1džu a1đa a1đe a1đi a1đo a1đu a1fa a1fe a1fi a1fo a1fu a1ga a1ge a1gi a1go a1gu a1ha a1he a1hi a1ho a1hu a1ja a1je a1ji a1jo a1ju a1ka a1ke a1ki a1ko a1ku a1la a1le a1li a1lo a1lu a1lja a1lje a1lji a1ljo a1lju a1ma a1me a1mi a1mo a1mu a1na a1ne a1ni a1no a1nu a1nja a1nje a1nji a1njo a1nju a1pa a1pe a1pi a1po a1pu a1ra a1re a1ri a1ro a1ru a1sa a1se a1si a1so a1su a1ša a1še a1ši a1šo a1šu a1ta a1te a1ti a1to a1tu a1va a1ve a1vi a1vo a1vu a1za a1ze a1zi a1zo a1zu a1ža a1že a1ži a1žo a1žu e1ba e1be e1bi e1bo e1bu e1ca e1ce e1ci e1co e1cu e1ča e1če e1či e1čo e1ču e1ća e1će e1ći e1ćo e1ću e1da e1de e1di e1do e1du e1dža e1dže e1dži e1džo e1džu e1đa e1đe e1đi e1đo e1đu e1fa e1fe e1fi e1fo e1fu e1ga e1ge e1gi e1go e1gu e1ha e1he e1hi e1ho e1hu e1ja e1je e1ji e1jo e1ju e1ka e1ke e1ki e1ko e1ku e1la e1le e1li e1lo e1lu e1lja e1lje e1lji e1ljo e1lju e1ma e1me e1mi e1mo e1mu e1na e1ne e1ni e1no e1nu e1nja e1nje e1nji e1njo e1nju e1pa e1pe e1pi e1po e1pu e1ra e1re e1ri e1ro e1ru e1sa e1se e1si e1so e1su e1ša e1še e1ši e1šo e1šu e1ta e1te e1ti e1to e1tu e1va e1ve e1vi e1vo e1vu e1za e1ze e1zi e1zo e1zu e1ža e1že e1ži e1žo e1žu i1ba i1be i1bi i1bo i1bu i1ca i1ce i1ci i1co i1cu i1ča i1če i1či i1čo i1ču i1ća i1će i1ći i1ćo i1ću i1da i1de i1di i1do i1du i1dža i1dže i1dži i1džo i1džu i1đa i1đe i1đi i1đo i1đu i1fa i1fe i1fi i1fo i1fu i1ga i1ge i1gi i1go i1gu i1ha i1he i1hi i1ho i1hu i1ja i1je i1ji i1jo i1ju i1ka i1ke i1ki i1ko i1ku i1la i1le i1li i1lo i1lu i1lja i1lje i1lji i1ljo i1lju i1ma i1me i1mi i1mo i1mu i1na i1ne i1ni i1no i1nu i1nja i1nje i1nji i1njo i1nju i1pa i1pe i1pi i1po i1pu i1ra i1re i1ri i1ro i1ru i1sa i1se i1si i1so i1su i1ša i1še i1ši i1šo i1šu i1ta i1te i1ti i1to i1tu i1va i1ve i1vi i1vo i1vu i1za i1ze i1zi i1zo i1zu i1ža i1že i1ži i1žo i1žu o1ba o1be o1bi o1bo o1bu o1ca o1ce o1ci o1co o1cu o1ča o1če o1či o1čo o1ču o1ća o1će o1ći o1ćo o1ću o1da o1de o1di o1do o1du o1dža o1dže o1dži o1džo o1džu o1đa o1đe o1đi o1đo o1đu o1fa o1fe o1fi o1fo o1fu o1ga o1ge o1gi o1go o1gu o1ha o1he o1hi o1ho o1hu o1ja o1je o1ji o1jo o1ju o1ka o1ke o1ki o1ko o1ku o1la o1le o1li o1lo o1lu o1lja o1lje o1lji o1ljo o1lju o1ma o1me o1mi o1mo o1mu o1na o1ne o1ni o1no o1nu o1nja o1nje o1nji o1njo o1nju o1pa o1pe o1pi o1po o1pu o1ra o1re o1ri o1ro o1ru o1sa o1se o1si o1so o1su o1ša o1še o1ši o1šo o1šu o1ta o1te o1ti o1to o1tu o1va o1ve o1vi o1vo o1vu o1za o1ze o1zi o1zo o1zu o1ža o1že o1ži o1žo o1žu u1ba u1be u1bi u1bo u1bu u1ca u1ce u1ci u1co u1cu u1ča u1če u1či u1čo u1ču u1ća u1će u1ći u1ćo u1ću u1da u1de u1di u1do u1du u1dža u1dže u1dži u1džo u1džu u1đa u1đe u1đi u1đo u1đu u1fa u1fe u1fi u1fo u1fu u1ga u1ge u1gi u1go u1gu u1ha u1he u1hi u1ho u1hu u1ja u1je u1ji u1jo u1ju u1ka u1ke u1ki u1ko u1ku u1la u1le u1li u1lo u1lu u1lja u1lje u1lji u1ljo u1lju u1ma u1me u1mi u1mo u1mu u1na u1ne u1ni u1no u1nu u1nja u1nje u1nji u1njo u1nju u1pa u1pe u1pi u1po u1pu u1ra u1re u1ri u1ro u1ru u1sa u1se u1si u1so u1su u1ša u1še u1ši u1šo u1šu u1ta u1te u1ti u1to u1tu u1va u1ve u1vi u1vo u1vu u1za u1ze u1zi u1zo u1zu u1ža u1že u1ži u1žo u1žu b1b b1c b1č b1ć b1d b1dž b1đ b1f b1g b1h 1bj 2bj. b1k 1bl 2bl. 2b1lj b1m b1n b1nj b1p 1br 2br. b1s b1š b1t 1bv 2bv. b1z b1ž c1b c1c c1č c1ć c1d c1dž c1đ c1f c1g c1h 1cj 2cj. c1k 1cl 2cl. 2c1lj c1m c1n c1nj c1p 1cr 2cr. c1s c1š c1t 1cv 2cv. c1z c1ž č1b č1c č1č č1ć č1d č1dž č1đ č1f č1g č1h 1čj 2čj. č1k 1čl 2čl. 2č1lj č1m č1n č1nj č1p 1čr 2čr. č1s č1š č1t 1čv 2čv. č1z č1ž ć1b ć1c ć1č ć1ć ć1d ć1dž ć1đ ć1f ć1g ć1h ć1j ć1k 1ćl 2ćl. 2ć1lj ć1m ć1n ć1nj ć1p 1ćr 2ćr. ć1s ć1š ć1t 1ćv 2ćv. ć1z ć1ž d1b d1c d1č d1ć d1d d2ž d1đ d1f 2d1g d1h 1dj 2dj. d1k 2d1l 2d1lj d1m d1n d1nj d1p 1dr 2dr. d1s d1š d1t 1dv 2dv. d1z dž1b dž1c dž1č dž1ć dž1d dž1dž dž1đ dž1f dž1g dž1h 1džj 2džj. dž1k 1džl 2džl. 2dž1lj dž1m dž1n dž1nj dž1p 1džr 2džr. dž1s dž1š dž1t 1džv 2džv. dž1z dž1ž đ1b đ1c đ1č đ1ć đ1d đ1dž đ1đ đ1f đ1g đ1h 1đj 2đj. đ1k 1đl 2đl. 2đ1lj đ1m đ1n đ1nj đ1p 1đr 2đr. đ1s đ1š đ1t 1đv 2đv. đ1z đ1ž f1b f1c f1č f1ć f1d f1dž f1đ f1f f1g f1h 1fj 2fj. f1k 1fl 2fl. 2f1lj f1m f1n f1nj f1p 1fr 2fr. f1s f1š f1t 1fv 2fv. f1z f1ž g1b g1c g1č g1ć g1d g1dž g1đ g1f g1g g1h 1gj 2gj. g1k 1gl 2gl. 2g1lj g1m g1n g1nj g1p 1gr 2gr. g1s g1š g1t 1gv 2gv. g1z g1ž h1b h1c h1č h1ć h1d h1dž h1đ h1f h1g h1h 1hj 2hj. h1k 1hl 2hl. 2h1lj h1m h1n h1nj h1p 1hr 2hr. h1s h1š h1t 1hv 2hv. h1z h1ž j1b j1c j1č j1ć j1d j1dž j1đ j1f j1g j1h j1j j1k j1l 2j1lj j1m j1n j1nj j1p j1r j1s j1š j1t j1v j1z j1ž k1b k1c k1č k1ć k1d k1dž k1đ k1f k1g k1h 1kj 2kj. k1k k1l 1k2lj 2klj. k1m k1n k1nj k1p 1kr 2kr. k1s k1š k1t k1v k1z k1ž l1b l1c l1č l1ć l1d l1dž l1đ l1f l1g l1h l1k l1l 2l1lj l1m l1n l1nj l1p l1r l1s l1š l1t l1v l1z l1ž lj1b lj1c lj1č lj1ć lj1d lj1dž lj1đ lj1f lj1g lj1h lj1k 1ljl 2ljl. lj1lj lj1m lj1n lj1nj lj1p 1ljr 2ljr. lj1s lj1š lj1t 1ljv 2ljv. lj1z lj1ž m1b m1c m1č m1ć m1d m1dž m1đ m1f m1g m1h 1mj 2mj. m1k 1ml 2ml. 2m1lj m1m m1n m1nj m1p 1mr 2mr. m1s m1š m1t 1mv 2mv. m1z m1ž n1b n1c n1č n1ć n1d n1dž n1đ n1f n1g n1h 2nj. n1k 1nl 2nl. 2n1lj n1m n1n n1nj n1p n1r n1s n1š n1t 1nv 2nv. n1z n1ž nj1b nj1c nj1č nj1ć nj1d nj1dž nj1đ nj1f nj1g nj1h 1njj 2njj. nj1k 1njl 2njl. 2nj1lj nj1m nj1n nj1nj nj1p 1njr 2njr. nj1s nj1š nj1t 1njv 2njv. nj1z nj1ž p1b p1c p1č p1ć p1d p1dž p1đ p1f p1g 2p1h 1pj 2pj. p1k 1pl 2pl. 2p1lj p1m p1n p1nj p1p 1pr 2pr. p1s p1š p1t 1pv 2pv. p1z p1ž r1b r1c r1č r1ć r1d r1dž r1đ r1f r1g r1h r1j r1k r1l 2r1lj r1m r1n r1nj r1p r1r r1s r1š r1t r1v r1z r1ž 1sb 2sb. s1c 1sč 2sč. 1sć 2sć. 1sd 2sd. 1sdž 2sdž. 1sđ 2sđ. 1sf 2sf. 1sg 2sg. 1sh 2sh. 1sj 2sj. 1sk 2sk. s1l 1slj 2slj. 1sm 2sm. s1n 2sn. 1snj 2snj. s1p 1sr 2sr. 1ss 2ss. 1sš 2sš. s1t 2st. 1sv 2sv. 1sz 2sz. 1sž 2sž. 1šb 2šb. š1c š1č š1ć 1šd 2šd. 1šdž 2šdž. 1šđ 2šđ. 1šf 2šf. 1šg 2šg. 1šh 2šh. 1šj 2šj. 1šk 2šk. š1l 2š1lj 1šm 2šm. š1n 2š1nj 1šp 2šp. 1šr 2šr. 1šs 2šs. 1šš 2šš. 1št 2št. 1šv 2šv. 1šz 2šz. 1šž 2šž. t1b t1c t1č t1ć t1d t1dž t1đ t1f t1g t1h 1tj 2tj. t1k 1tl 2tl. 2t1lj t1m t1n t1nj t1p 1tr 2tr. t1s t1š t1t 1tv 2tv. t1z t1ž v1b v1c v1č v1ć v1d v1dž v1đ v1f v1g v1h v1j 1v2je vj. v1k v1l 2v1lj v1m v1n v1nj v1p 1vr v1s v1š v1t v1v v1z v1ž z1b 1zc 2zc. 1zč 2zč. 1zć 2zć. z1d 1zdž 2zdž. 1zđ 2zđ. 1zf 2zf. z1g 1zh 2zh. 1zj 2zj. 1zk 2zk. z1l 2z1lj z1m z1n 1znj 2znj. 1zp 2zp. z1r z1s 1zš 2zš. 1zt 2zt. 1zv 2zv. 1zz 2zz. 1zž 2zž. ž1b 2žb. 1žc 2žc. 1žč 2žč. 1žć 2žć. 1žd 2žd. 1ždž 2ždž. 1žđ 2žđ. 1žf 2žf. 1žg 2žg. 1žh 2žh. ž1j 1žk 2žk. 1žl 2žl. ž1lj 1žm 2žm. ž1n 2žn. 2ž1nj 1žp 2žp. 1žr 2žr. 1žs 2žs. 1žš 2žš. 1žt 2žt. 1žv 2žv. 1žz 2žz. 1žž 2žž. 2d1vj 2d1vr z1g2nj ć1s2t d1s2m j1z2g r2n1t r2z1n m2p1t 2d1vl r2t1c r2n1c r2č1k 2s1hr z1v2l 2z1vr r2k1n r2c1n r2h1nj s2p1n j1s2l r2d1n .zg2 r2dž1b 2š1tv r2t1s n2t1s 2s1kr r2n1k d1š2k d1s2p r2t1m 1r2je k2s1p t1s2t l2m1s r2h1k j1s2t s1v2l r2p1c t1k2l s1k2l n2t1n 2d1ja 2rt. z1r2j d1s2t n2k1c r2t1k r2g1n r2h1t .na2j1 .be2z1 .iz1 .is1 .ne2o3 r2t1n r2v1n r1s2t n2s1t l2f1t}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-zh.pat0000644000175000017500000000167412161703335024676 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-zh.rme % used: ' a b c d e f g h i j k l m n o p q r s t u w x y z ü \patterns{ a1b a1c a1d a1f a1g a1h a1j a1k a1l a1m a1p a1q a1r a1s a1t a1w a1x a1y a1z e1b e1c e1d e1f e1g e1h e1j e1k e1l e1m e1p e1q e1s e1t e1w e1x e1y e1z 1ga g1b g1c g1d 1ge g1f g1g g1h g1j g1k g1l g1m g1n 1go g1p g1q g1r g1s g1t 1gu g1w g1x g1y g1z i1b i1c i1d i1f i1g i1h i1j i1k i1l i1m i1p i1q i1r i1s i1t i1w i1x i1y i1z 1na n1b n1c n1d 1ne n1f n1h 1ni n1j n1k n1l n1m n1n 1no n1p n1q n1r n1s n1t 1nu 1nü n1w n1x n1y n1z o1b o1c o1d o1f o1g o1h o1j o1k o1l o1m o1p o1q o1r o1s o1t o1w o1x o1y o1z 1ra r1b r1c r1d 1re r1f r1g r1h 1ri r1j r1k r1l r1m r1n 1ro r1p r1q r1r r1s r1t 1ru r1w r1x r1y r1z u1b u1c u1d u1f u1g u1h u1j u1k u1l u1m u1p u1q u1r u1s u1t u1w u1x u1y u1z ü1b ü1c ü1d ü1f ü1g ü1h ü1j ü1k ü1l ü1m ü1n ü1p ü1q ü1r ü1s ü1t ü1w ü1x ü1y ü1z '1a '1e '1o}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-hr.hyp0000644000175000017500000000017111761001300024655 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-hr.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-ru.pat0000644000175000017500000017400011761001300024661 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-ru.rme % used: - а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё \patterns{ .аб1р .аг1ро .ади2 .аи2 .ак1р .аль3я .ар2т1о2 .ас1то .аст1р .ау2 .би2о .во2б3л .во3ж2д .го2ф .дек2 .де1кв .ди2ак .ди1о .до3п .до3т2 .епи3 .зав2р .за3м2н .за3п .иг1р .изг2 .из3н .ии2 .ик1р .ио2 .ио4на .ис3 .ле2о .ле2п3р .лес1к .ль2 .люст1 .ме2ж1у2 .ми1ом .мо2к1 .му2шт1 .на1в .на3т .на3ш2 .не3вн .не1др .не1з2 .не1сл .не1с2ц .не3т .нос1к .нук1л .обо3ж2 .ово1 .ог3н .оз4 .ос2ка .ос2п .ос3пи .от1в .от1ро .от1ру .от1уж .по3в2 .по3ж2 .поз2н .прос2 .ра2с3т .ре2бр .ре2з3в .ри2ск .ри2ч .ро2з3в .ро2с3л .ро2х .септ2 .ск2 .ст2 .су2ж .те2о3 .тиа3 .ти2г .тиг1р .ти2о .уб2 .уд2 .уе2 .уз2на .ук2 .ум2ч .уо3 .уп2 .ур2в .ус2 .ут2р .ую2 .хо2р3в .че2с1к .юс1 4а3а аа2п аа2р аа2ц а1б абе3ст а3бла аб2лю аб1ри а3бу ав1в а1ве ав3зо а1ви ави2а а1во аво1с а2вот ав1ра ав2се а2вт а1ву а2вх а3в2че 2ага ага1с2 а2гд а2гити а2гле аг2ли а2глос аг2лот 2аго а3гу а1д 2адв а2две ад2жи ади2од а2дл а2д1обл ад1ро а2д1ру аду3ч ад2ц а2дын а1е ае2го ае2ди ае2л а2еп ае2ре ае2с аза4ш3 азв2 аз3вез аз1вл азг2 аз1др аз1об аз2о1бр а2зовь а2золь а1зори аз2о1с аз1р а1и аи2г1 аи3гл а2их а1к ак1в 1акк ак2л ак3лем ако1б2 2аконс ако3т 2акри ак1с а1ла а3лаг а1ле 2алек а3ли ало1з а1лу алу2ш алуш1т а1лы а2льщ а1лю 2ама амб4 2амет а2минт ам2нет 2амо амо1з2 амои2 а2мч ана2дц а2н1а2ме а2наф ан2дра а2н1о2б ан1о2хр ан1р ан2сп анс1у ан2сур а2н1уз а1нь 2а1о ао2д ао2к ао2р ао2с аост1 а3пла ап2лом 2апо апо4вс апо3ч2т ап2ра ап1рел а1ра ара2ст ар2бок ар2вал 1аргу а1ре аре1дв аре1ол ар2жа а1ри а1ро ар2тор ар2т1р а1ру ар1х а1ры а1рю а1ря 2ас1к ас3ми ас3но 1ассиг аст1ву ас3тем ас2тин ас2тия ас1тоо ас1тух а1стье ас2шед ас2шес а1сьи а1та 1атак ат3ва ат1ви ат1ву 2атез а1ти а1то ат1обе а2томн ато2ш ат1рах ат1ри а1ту ат2х а1ты а1тье а3тью а3тья а1тю а1тя а1у а2уб ау2д ау3до а2уле аут1р ау2х ау2ч ау3чь ауэ1 а2ф1л ах2а ахми2 ах3с а1ч 2ача а2чл ач1т а2шл аэ2ли а2эр аю1та а1я ая2б ая2в ая2з 1ба ба2бв ба2г1р ба2др ба1з ба3зу балю1 ба2о бас3м ба1ст ба1тр 2б1б б1в бвы2 бг2 2б1д 1бе 3бев бе2гл бе2гн бе2д1р 3бее 3бе2з без1а2 без5д4 бе3зи без3н без1о2 без1р бе2с1к бес3п бе2с1т бес3те бес3ти 3бец 2бещ 2бж б1з2 1б2и 3биа би2б 2биж 3бик били3т2 3био би2об би2од би2он би2ор би2тв би1х 2б3к б1л 1благ 1б2лаз б3лази б2лан 1б2лее б3лен б2лес1к 1б2лея б2луд 1б2луж 2блы 2б2ль 2б3лю. б2люд б2люе б2люл 2б3люсь 2бля 2б3н 1бо бо1бра бо3вш бо2гд бо1дра бо1з2 бо1л2ж бо1льс бо3м2л бо2мч бо3мш бону1 бо1ру бо2са бо1ск бо3ско бо3сти 3бот бо2тв бот2р боя2р 2бр. б3раб б2рав бра1зо 1б2рал 2б1рам б2ран 1брас б2рать б1рах 1б2рач 2б3рая 1б2ред б1рей б1рек б2рем б2рех б2рид б2рито б2риты 1б2роди б1рол б1ром. 1б2роси бро2с1к 2брс б1ру 3брукс 2брь 1б2рю 2б3рю. б1ря 2б1с2 б3ск бс4л б1т 1б2у бу2г1р бук1л бу1с 2бф 2б1х 2бц 2б1ч 2бш 2бщ 1бы бы2г1 бы2с быс1к быст1 1бь 2бь. 2бьс 2бьт бэ1р 3б2ю бю1та 1бя 1ва ва2бр 3ваг ва2д1р вадь2 ва3ж2д ва1з ванс2 ва1ст ва2стр ва1тр вах1 3вац 3вая 2в1б в1ви в1вр 2вг2 в1д в2дох 1вев 3вег вед1р ве3ду 1вее 1вез 3везе 3везл вез2у 1вей. ве2п1 2верд 1вес ве2с1к ве2ст1в вет3р 1вец 1вею 1вея 1в2з2 взг2 взд2 взо1б взъ2 взъе3д ви2аз ви2ак ви2ар ви2а1с2 виа1т ви3аф ви2гв ви2гл 1виз 1винт 1винч ви1о ви1с2ни виу3 ви2ф 2в1к вк2л 3в2кус в1л в2ла 2в3лаб в2лев в2лек в2лет в2леч 2вли в2лия 2влю в2люб 2вля 2вм 1вме 2в1н 4в3на в2нес вно1 в3ну. 3в2нук 3в2нуч в3ны во1б2 во2б3ла вов2 во3вк 1вод во1дв во1др во2ер во2жж вои2с1 1вок во3м2 воп2 во1ру 2ворц 2ворь вос1к во1см во1сн вос3пе во2стр вот2р 1вох во1хл во3х2т 1вою 2вп2 2вр. 2вра. в2рав 2в1рам в1рас 2в1рах 2врац 2вре. 2в1рен 1врид 1в2риз в1рии в1рик в1рил в1рис в1рит 2в1ро вро3т2 2в1ры 1врю в1ря 2в1с2 3все3 в3ская 4в3ски 4в3ску 3в2сп 3в2сю в1т2 вто1б2 вто3ш 1вуа ву3г 1ву1з 2вуи 2ву1к ву3п ву1с2 ву2х1а вух3в ву1чл вф2 1вхо 2вц 2в1ч 2вш 3в2шив 2вщ въ2 1вы вы3г2 вы3зн вып2 вы3т2 вых2 вы3ш2л 2вь. 1вье 1вьин 2вьс 2вьт 1вью 1вья 1в2э1 1в2ю 1вя 1г г2а га1з га1ст2 га2у 2г3б гба2 г1ви 2гг г3дан 2г3ди 3ге. ге2б1 гено1 ге2об ге2од ге1ор 2г3ж 2г1з г2и ги2бл ги3бр ги2гр ги1сл гист2 2г1к 2гла. г2лав г1лай г1лами 2глась 2глая г1ле г2лет 2гли. г2лин 3г2лиф 2гло. г3лобл 2глов 2глог 2глое 2глой 2глою 2глую 2г1лы г2ляж 2гляк 2г3м г2нав г2нан г3не. г2нев г3нен г3неп г3нес г2нир гнит2р г2ное г2нои г2нос г3ня го1б2 го2вл го3ж2д го1з го2зл гоз2н гоиг2 3гой г2ол гоми2 го2с1а го2сд го1скл го1сн го1спа 2готд гоу3т го1чл 3гою 2гп 2гр. г1рае г1рай г1рар г1рег г1рек г1рец гри4в3н г1рик г1рил г1рин г1рис г1рич г1ров г2роз г1рок г1рон г1роп г1рот г1роф гру2п г1рыв 2грю г1ряе г1рял г1рят 2г3с2 г4са г4сб 2г3т гу1в гу1с гу2с1к 2гф 2г1ч 2г3ш 2г3э 1да да2б1 да2ген да2гр да1з да2о даст1р дат1р 2д1б дв2 д1ве 1дви 2д1вид 2двиз 2двинт 2двинч 2д1вис 2д1вит д3вк д1вл 2двод д1воз 1дворь 2двя 2дг2 2д1д2 1де де1б2л де1б2р 3девр 3дез де2з1а2 де2зи дез1о2 де2зу деио2 де1кл 3деме де2од део3п де3пл дерас2 де2с3в дес2к де2ср де1хл 2дж. д2жам д2ж3м 2джс 2д1з2 1ди ди2ад диа2з ди2али ди2ало ди2ар ди2ас ди2об дио3де ди2ор дио1с ди1оти дип2 ди2пи ди3пт ди2с1тр диу3 ди3фр ди3фто ди1х 2д1к д1л д2лев 2д3м2 2д1н д3на днеа2 3дневн 4д3но1 дно3д2 днос2 4д3ны 3д2няш 1до 2д1о2бед до2бл 2д1обла до1б2ра дов2л до3в2м до1д2 до3дн до3ж2д до1з доз2н дои2р 2докт 2долим до2м1р доп2 до3пл 2допле до2пре до2руб до1с д1о2сен д1о2син 2д1осно дос2п 2дотд 2дотл дот2ри 2д1отря 2дотъ до3ть 3дохл до2ш3в до3ш2к до2шлы до2щу 2дп 2др. д1раб 1дравш 2дразв 1д2разн д1ране д1рар д1ра2с3 д1рах д1рач д2раю д1ре д2реб 2д3реж 2дрез д2рел д2рем 1дрема 1дремл дрем3н 1дремы 2д3рен дре2ск д2ресс д1ри д2рий 2дрин д2рип д2рих дро2г3н д1род д1рое 1д2рож 2д3роз д1рой д1рол д1рон д1рос д1рот д1рою д1руб 1друг 1друж д1рум д1рую д1ры 2дрыв 1д2рыг д1ря д2ряб 1д2ряг д2рях 2д1с2 дск2 дс3кн 2д1т 1ду дуб3р ду3г 2д1уд ду2да ду2о дуп1л дус1к д1усл ду1ст ду2ста 2дут1р ду1х ду2чи дуэ1т 2дф д1х 2д3це 2дцу 2дцы 2д1ч 2д3ш2 2дщ 2дъ дъе2м 1ды 2дыг ды2г1р 2дыд 2дыме 2ды2с1 2дыт 2дыщ 2дь. 1дье 2дьк 2дьт 1дью 1дья дь3яр 1д2ю 1дя е1а еа2д еади3 еа3до еа2з еан2д1р еат1р 2еб еба2с е1бра еб1рен еб1ри е1бро еб1ров еб1ры е2б3рю е1ве 2евер е1ви е3в2ме ев2ним ев2нят е1во 2евол евра1с 2е1вре ев1рее ев1рей ев1рея ев1ри е2вт е1ву е1вх ев2хо е1вь ега1с2 ег2д е2глан е2гле е2гли е2гло ег2на ег2но 2ег2р ед1во ед2ж е1дже е1д2лин едноу3 ед1опр е2дотв е2дох е2д1ощ е1дру е2дру. е2ду2б ед1убо е2дуве е2дуг е2дус ед1уст 2е3душ е2дын е1е е2евид ее2в1р ее2ги ее1с2 ее2ст еест1р ее2х е2жг е4ждев еж3ди 2еже е2ж1р еза2вр езау3 е1з2ва езд1р е3зе еззу3 е3зит ез1об ез1о2г е1зом ез1оп ез1о2р ез1от ез1ош ез2ря ез1у2д ез1у2к ез1уп ез1ус езу2со езу2сы ез1у2х ез1уча е3зя е1и еи2г1 еи2д еи2м еи2о еис1л еис1тр е1ка ека2б ек2з е1ки 2е1ко 2е1кр ек2ро ек1ск ек1сте е1ку е1ла е1ле еле3ск еле1сц е1лу е1лы е1лю е3ля еми3д2 еми3к емо1с 2емуж е2мч 2емыс е3на ен2д1р 2е1нр енс2 ен3ш2 е1нэ 2ео е1о2б еоб2ро е2о3гл ео2гро е1од ео3да ео2де еоде3з ео2до е1о2ж е2ои ео3кл е1ол. е1ола ео3ли е1олк е1олы е1оль е2ом е1он. е2она е2они ео3но е1онс еоп2 е1опе ео2пр ео4пу е2о3ро еос2 е1о2сви ео1ск е1осм е1осн еост1р ео3сх е1отл еот2ру е1о2ч е1о2щ епат2 епа1тр 2епе епис2к е2пл е3пла еп1леш е3п2лод еп1лу е3плы еп1лющ е4пн 2епо е4п3с е4пт е1ра ер1акт е2рв ер1ве е1ре е3ре. ере3до ере1др ере1к2 ере3м2н ере3п ере1х4 е1ри ерио3з е1ро еро2б ер1обл 2ерови 2ерокр 2ерол еро3ф2 ер3ск е1ру е2р1у2п е1ры е1рю е1ря е3с2а ес2ба е1сг е1ск е2с1ка. ес1кал е2ске е2сков е4с1ку. 2есл ес1лас ес2лин ес2лов ес2лом е1слу е1слы е1с4м е3со 2есп ес2пек ес3пол е2спу е1ст ес2тан е2стл е3сту ес2чет е1та ет1ве ет1ви е1тво 2етеч е1ти е1то ето1с ет1р ет2ря е1ту е1ты е1тье е3тью е3тья е1тю е1тя е1у2 2еуб еуб3р еуз2 еук2ло ефи3б2 еф2л еф1ре еха2т ех1ато ех3вал ех3лоп ех1об ех1опо ех1ре ех1ру ех1у2ч 2ецв е1чл е2шл еэ2 ею2г е1я ея2з 1ж жа2бл жа2бр жа1з жат1в 2ж1б2 2ж1в жг2 2жга ж2ги 3ж2гл ж2гу 2ж1д ж2дак ж2дач 3ж2дел 4ждеме ж2деп ж2ди 4ж2дл ждо3 жду1 4ждь 3ж2дя 3жев же3д2 же1к2в же1кл же1о2 же3п2 же1с2 же3ск 2жжа ж2же 2жжев 2ж1з2 жи1о 2жирр 2ж1к 2ж1л ж2м ж3ма 2ж3мо 2ж1н жно1 2ж1об 2ж1о2т1 жоу3 жоу1с 2жп2 жпо1 ж2ру 2ж1с 2жф 2жц 2ж1ч 2жъ 2жь. 2жьс 2жьт 1за1 заа2 заб2 за2в1ри за2вру з1аву заг4 з1адр зае2д зае2х за3ж2д за3з2 з1акт за3мне 3з2ан за3на занс2 зап2 зар2в за3р2д зар2ж зас2 заст2 зат2 за3тк зау2 зах2 зач2т за3ш2 зая2 з1б2 2з3ва. з2вав з3валь з2ван 2звая з1ве з2вез з1ви з3в2к з1вла з1во 2звол 1з2вон з1вр 1зву 2з1вую з1вь 2зг з3га з2гли зг2на з2гну з1д2в з2деш здож3 1зе зе2б1 зе2ев зе2од 2зж2 з3з2 1зи 3зи. 3зий. з1инт зи2оз зи2оно зи1оп 3зис зи3т2р зиу3м 3зич 2з1к зко1 зко3п2 з1л з2лащ з2лоб з2лоп з2лор з2лющ 2зм2 з3мн з1н 2зна. з2нав з2нае з2най з2нак з2нан з2нат з2наю 2зная 2зне 2з3ни 2зно 2зну 2з3ны з2обе зо2би 1зов зо3в2м зо2гл зо1др 1зое зо1з2 1зои 1зой. 1зок. з1окс 1зол2 зо1лг зо1лж зо3м2 1зом. 2зомн 1зон 2зонр 1зоо зо2о3п зо2ос зо2па з2опл з2опр з1орг 1з2о3ре зос2 з1осн зо1сп зо2тв з2оте з1отк з2ото зот2ре зот2ри 1зох зош2 зо2ши 1зоэ 1зою з1ра з2рак зра2с з2рач з2рен з1рес з2риш з1ро зро2с3 з1ру з2рю з1ря 2з1с 2зт з1ти 1зу 3зу. 2з1у2бе зу2б3р зу1в 2зуве 2зу2г 3зуе 2з1уз3 2зу1к 3зуме з1у2мо 2зуп зу2пр з1урб з1у2те зу2час 2зц з1ч 2зш зъе2м 1зы 2зы2г1 зы2з 2зыме 2зымч 2зы2с1 2зыщ 1зье 1зьи 1зью 3зья 1з2ю 1зя и1а и2аб и2ав иаг2 и2агр и2аде и2ади иа2зов иа2му и3ана иа2нал ианд2 иао2 и2ап иа1с2к иа1ста иа1сто иат1ро и3ату и2аф и2а1х иа2це 2и1б и2б1р 2иваж 2и1ве и2в3з и1ви 2и1во и1в2р и3в2с и1ву ив2хо 2ивы иг2д и3ге 2игл и2гле и2гли и2гн игни3 иг1рен иг1ро иг1ру иг1ры и2г1ря и1дв и2дей и1д2ж иди1ом иди1от ид1р и1дь и1е и2евод ие2г ие2д ие3де ие2зу и3ени ие1о2 иепи1 ие2р и3ж2д из1в2 из2гне 1из1д из2нал и1зо изо2о из1р и1и ийс2 и1к и3к2а ика1с2 ик2ва и2кви и2кля и3ко ик1ро ик1ск ик2с1т и3ку и1л и2л1а2ц ило1ск илп2 и2л1у2п и2ль ильт2 2има и2мено и2мену 2имень и3ми имои2 им3пл и2м1р и2мч им2ча инд2 1инж ино2к3л ино3п2л ино1с инс2 1инсп 1инсти 1инсу 1инф 1инъ и1об ио2бо ио2вр и2ог и1од ио2де и1оз ио3зо и1окс и1оле и1он и3онов и1опт и1ор и3ора ио1ру ио2са ио3скл ио1с2п и1ота ио2т1в и1отк и1отс иоуг2 ио2хо и1ош 2ип ипат2 ипа1тр ип2ля ип3н ипо3к2 и1р ира2ст и2р1ау и2рв и2рж ири2ск ириу3 иро1з2 1ирр исан2д1 и2сб и2сд ис1к ис3ка. ис3кам ис3ках ис3ке ис3ки ис3ков ис3ку. и2слам ис1лы ис3ме ис3му ис3но исо2ск и2с3пр и4сс и1ст и2ст1в и2стл ис1тяз и1сьи и1т ита2в ит3ва и2т1ве ит1ви ит1ву и2тм и2т1р ит2рес ит3ром и2т1уч и3тью и3тья и1у2 иу3п иф1л иф2лю и2фр иха3д и2х1ас их2ло2 ихлор1 и3х2о ихо3к их1ре их1ри и1ху и1ч иш2ли и2шлы и2шт ию4л ию2н ию2т ию3та и1я ия2д 2й1 йд2 й2д3в йно1 й2о1с йо2тр йп2л й2сб й3ска йс2ке йс4мо й2с3му й2сн й2с3ф й2сш й2тм й2хм йх2с3 йя1 ка2бл ка2бри 1кав к2ад ка3дне ка2д1р 1кае каз3н ка1зо 1кай 1кал. 1кало 1калс 1кам 1кан ка2п1л ка2пре кар3тр 3к2ас ка1ст 1кат ка1т2р 1ках ка2ш1т 1каю 2к1б к2вак к2вас к2ваш к1ви к2воз к1ву 2кг 2к1д кда2 1ке 2кеа ке2гл кед1р ке2с1к ке2ст1 2к1з 1кив ки1о киос1 ки2пл ки1с2ни 1кит 2к1к2 кк3с 2к3ла. 2к3лась 2к3ле. 2клем к3лем. к3лен к1лео 2к3ли. 2к3лив к2лик к2лин 2к3лис к3лия 2к3ло. к2лоз к3лом 2к3лос кло3т 1клук к3лы 2кль 1клю 2к3лю. 2кля. 2клям 2клях 2км 2к1н 3к2ниж к2ноп 3к2няж к2о ко1б2ри 1ков 3кова 1код ко1др 1коз 1кольс 2комин 3конс коп2р ко2р3в ко1ру 1кос ко1ск кос3м ко1сп 1котн ко2фр кохо2р3 1кош 2кп 2кр. к1рел кре1о кре2сл к1реч 1криб к1рид к2риз кри2о3 к2рит к1рих к1роа к1роб к2рое к1рок к1роо к1рор к1рос к1роф к1рох к1роэ кру1с к1ряд 2кс ксанд2 к2с3в кс3г к2с3д к2сиб к1ски кс1кл к1ско кс3м к3со к1стам к1стан кс3те к1сто кс1тр к1сту к3су 2к1т кта2к 3к2то. кто1с кт2р к2у ку1ве 3куе 1куй 1куля 3кум куп1л ку2п1р 1кур ку3ро кус1к ку1ст 1кут ку3ть 1куче 1куют 3кующ 2кф 2к1х2 2кц 2к1ч 2кш 1кь к2ю 1ла. 2лабе ла2бл 2лаго ла2гр ла2д1аг 1лае ла3ж2д ла1зо л2ак лак2р 1лам. 1лами. лан2д1р ла1ста ласт1в ла1сте ла1сто ла2ст1р ла1сту ла1стя ла1т2р лау1 ла2ус ла2фр 1ла1х 1лая 2лб л1бр л1ве л1ви л1во л1ву 1л2гал л2гл лго1 2л3д2 1ле. ле1вл лев1ра ле2г1л ле1дж ле3до ле1з2о3 ле1зр лек1л 2лемн 1лен ле1онт ле1о2с ле2сб ле2ск ле4ска ле1с2л ле1спе ле1тв ле1т2р 1лех ле1хр л1зо 1ли лиа2м 3ливо 3ливы лиг2л ли2гро лие3р ли2кв 2лимп лио1с ли2пл лис3м 2л1исп ли2тв лиу3м ли2х3в ли1хл ли1хр 2л1к лк2в л2к1л 2л1л л2ль ллю1 2лм 2л1н лни2е 1ло ло2бл ло1б2р 2ловия ло2вл 3ловод ло2г3д лого1с ло1др 2лоен ло1зв ло2к1а2у ло2кл лок3ла 3лопас ло2рв 2л1орг ло1ру лос1к ло1с2п 2лотд лот2р ло2шл 2лп 2л1с2 лс3б л1т 1лу. лу1бр лу1в лу3г лу1д4р 1луе лу1зн лу1кр 1лун луо2д лу3п2ло лу1с лу3ть 1лую 2л3ф2 2л1х2 л2х3в 2лц л1ч 1лы. 1лые 1лыж 1лый 1лым 1лых. 4ль. 2льд 3лье 3льи 2льк 2льм 2льн 3льо 2льск 1льсти 1льстя 2льт 2льц 2льч 1льща 1льще 1льщу 3лью 3лья л2ю 1лю. 1люж 1люсь лю1та 1ля 3ля. ля1ви 3ляво 3лявы 2ляд 3лям ля1ре ля1ру 3лях 1м ма2вз 3маг ма2гн ма2др ма2дь ма1зо ма2к1р 2м1алл ман2д1р мас3л ма1с4т ма2тоб ма2т1р ма2у маф2 3мач ма2чт 4м1б м3би мб2л м3бля 2м3в2 2мг2 3м2гл 2м1д меан2 ме2ег ме2ел ме2ж1ат ме1зо ме2с1к ме2ст1р меч1т 2мж 2м1з2 ми2гре ми1зв 2мизд ми1зн ми2кр мик1ри ми2оз ми1опи ми2ор ми1с2л 2м1к2 3мкн 2м1л м2лее м2лел 2мм 2м1н 4м3на мне1д 3м2неш 4мное м2нож 4мной 4мном м2нор 4мною м2нут 4м3ны мо1б2 мо3вл 3мод мо1др мо2жж мо1зв мо1зр моис1т мо2к3в мо3м2 3мон 3моп мо1ру мос1ка мо1см мо1сн мо1с2п 3моти мо2т1р 3моф 2мп мп2л м1раб 2мри 2м1ро м1ры 2м1с мс2к мс2н м2с1ор 3м2сти 2м1т му1с2к му1с4л му1ст мут1р му3ть 2мф мфи3 2м1х 2мц м2чав м2чал м2чит м2чиш 2мш2 2мщ 3м2ще мым1 мы2мр мы2с 2мь. 2мьс мью1 2мэ мэ1р м2ю мя1р мя1ст 1на наби1о наб2р на1в2р наг2н на3жд на1з2 на2ил на2ин на2и1с2 4накк на3м2н нап2л на1рва на1р2ви на1с2 на1тв на1т2р н1а2фр на1х2 2нач на3ш2л 2нащ наэ1р 3ная 2н1б2 2н1в 2нг н2г1в нги2о нг4л нго1с нг2р 2н1д н2дак н2д1в нде3з нде2с нд2ж н3д2з н2дл нд1раг нд1раж нд2ре нд2риа н2дря нд2сп н2дц 1не не1б2 не1в2д 2невн не3вня нег2 3нед не1д2л нед2о не2дра не1дро не3ду не3е нее2д не3ж2д не1зв не1з2л не1зн не1зо не1зр неи2 не1к2в не1кл не3м2н 3не1о2 не2ода не2ол не3п2 не1р2ж не2р1от нес2к не3с2н не1с2п нест2 не1с2х не1с2ч не1т2в не3т2л не1т2р 3неу не2фр не1хр не3шк нея2 2н1з2 нзо1с 1ни ни3б2 ни2ен 3ний ни2кл нила2 ни2л1ал ни2л1ам 2нинсп 2н1инст ни1сл нис3п нист2р ниу3 ни1х 3ниц 3нищ 2н1к нк2в нк2л нкоб2 нко3п2 н2к1ро нк1с н1л 2н1н нно3п2 1но ноб2 но1бр но2вл но1дв но1др но2ер но1зв но2зд но3з2о но1зр но3кн 3номе ном3ш но2рв но1ру но1скл но2сли но1с2п но2сч 2нотд но3ф2 ноэ2 н3п2 2н1ре 2н1ри н1ро 2н1с н2с3в н2сг нс2ке н2скон н2сл н3сла н2с3м н2сн н2с1ок н3с2пе нст2р нсу2р н2с3ф н2съ3 2н1т н2т1в нти1о2к н2тм нт2ра н2тр1а2г нтр1аж н2трар нтрас2 нт2ре н2трив н2трок нт2ру нтр1уд нт2ры н2т1ря 1ну нут1р ну1х 3ную 2нф2 н1х нхо1 2нц 2н1ч н2чл 2нш нш2т 2нщ 1ны 3ны. 2нь. 1нье 1ньи 2ньк 1ньо 2ньс 2ньт 2ньч 1нью 1нья н2э 1н2ю 2н3ю2р 1ня ня1ви 2о1а2 о3ав оап1 2оба 2обио об2лев об2лем о1блю 1обм обо1л2г обо3м2 обо2с 2обот об1р о2бра. о1брав о1бран 1объ 2обь о1в о3вла о3в2ло ов3но о3в2нуш о2в1ри ов2се ов3ско ов2т о2вх ог2 2о3ге ог3ла. ог3ли. ог3ло. о3гря 2одан од1вое о3де. 1о2деял 2оди3а 2о3дим од2лит о2д1о2пе одо3пр о2д1о2пы о2доси о2д1отч о1драг од1раж од1раз од1рак о1драл од3реб о1дроб од1ров о2д1у2ч о2дыма о2дыму о2дын о1дь о2дьб о1е ое1б о2е1вл ое2д о3ежек ое2жи ое1о ое1с2 ое2ст о2ето ое2ц о3жди о3ж2ду оза2б3в 2озав о1з2ва оз2вен оз2ви о1з2вя оз2гло оз2дор о1здр озе1о оз3но о1зо о2з1об 2озон о2зоп озо1ру оз1уг о2зым о3зыс о3и ои2г1 оиг2н оие3 ои2з ои2м ои3мо ои2о 2ой ойс2 о1к 2о3кан ок2в 2ок2л о3клю око1б 2о3кол око3п2л ок1ск 1окт 2окти 2окум о3ла ол2ган о1ле 1олимп о3ло о1лу олу3д2 о1лы о1лю о3ля о3ма ом2бл 2оме о3м2нем о3м2нет о3множ ом1ри ом2ч ом2ше о2мь о3мья о3на онд2 оне3ф2 оно1б о1нр онс2 он2тру о1о2 о2ол оо3пс оос3м оост1р о2оти о2оф о3пак о3пар о2пле. о2п1лей о2пли оп2лит оп2ло оп3лю. о2пля о3пляс опо4вс опоз2н опо2ш3л оп2ри о3п2те оп2то о1ра ора2с3 ор2б3л о1р2в о1ре 2о3рег оре2ск о1ри ор1исп о1ро оро2с3л ор2тр о1руе о1рук ор1укс о1рус 2орц о1ры о1рю о1ря о3сад оса3ж2 ос2б о2с3ба о2с1ка. ос3кар оск1во о2ске ос1ки о2ски. о2сков ос1кой ос1ком о1с2коп ос1кою о2с1ку. ос1кую о1с2л ос3лей ос3лог ос3лых ос3ми ос3мос о1с2ним ос2нял ос2пас о1с2пу ос2пя ос2св ос2с3м о1ст ос2та о3стра о2суч 2осх ос2цен о1с2ч о1с2шив о1т отв2 от3ва от1ве от1ви от1вл 1отг 1отд 2о3тек о3тер 2о3тех о3ти о3ткал о2тм от1раб от1рад от1раз отра2с от1реж от1рек от1реч от1реш от1ри от1род от1рое от1рок от1рос от1роч от1руг от3см оту2а от1у2ч 1отх о3тью о3тья о1у2 оуп2 оус2к оу3та оу3то 2офаш о3фе 2офит 2офон о2фори 2офот о2фри 2охи ох1лы о2хля ох2ме 2охор о1хр о1ху о2цо оча1с оч2л оч1ле о3чли о1чт о2ч1то ош3ва ош2ла ошпа2к3 ош2т оэ1ти 2ою о1я оя2в оя2д оя2з оя2ри 1п пави3 пав3л па2вь па2др па2ен па1зо пас1л пас1та па1сте пас1то пас1ту па2с1ты па1тро па2ун па3ф па1ху па2шт 2п1в2 2п1д пе1 пе2дв пе2д1ин пе2з пе3за пе3зо пе2к1ла пе2ль пе4пл пери1о пе2с1к пе2сн пе2ст1р пе2сц пе2сч пе2тр пе2шт пиаст1 пи2ж3м пи2к1р 3пинк 3пися 4п3к 2пл. 4пла. пла1с п1лем. п1лемс 2плен п2ленк п1ле2о плес1к п1лею 2плив 3п2лик 2пло. 2плов 2плог 2плый 2плым п1лын п1лых 2плю. п1лют п2ляс п2ляш 2п1н п3на п3но1 п3ны по1б2 по3вл по3в2с под1во по2д1о2к подо3м2 пое2л пое2х по1зве по1здо по1з2л по1зн пои2щ 3пой 3полк по3мно по3мну 3по3п2 п1орг пор2ж по1ру по1с4 3посл по3сс пот2в пот2р по1х2 по2шло по2шлы по2шля поэ3м 2пп2 ппо1д 2пр. 3прев пре1з прей2 пре1л пре1ог 3прет при1 при3в приг2 при3д2 при3к при3л приль2 прип2 п2риц про1бл прод2л про3ж2 про1з2 п1розо 3прои про3п профо2 2прс п2ру 2п1с2 3п2сал п3син 3п2сих п3со 2п1т п2т3в 3п2тих п3ту 3пуб пуг3н пус1ку пу1ст пу3ть 2пф2 пх2 2пц 4п3ч 2пш 2пщ 2пь. 2пьт пэ1ра п2ю1 1ра. раа2 ра2бл 1рабо ра2б1р 1равня ра2гв ра2гл рад2ж радо1б2 ра2дц ра2жур ра2зий ра2зуб рак2в 1ракиз ра2к3л 1ралг 1рамк 1рамн ра2нох ран2сц ра2п1л рас3к2 1расл рас3п рас1т 1раста рас3т2л ра2так рат1в ра1т2р 2рахи 1ращи 1раю 1рая 2раят 2р1б рб2ла р2бле рб2ло рб2лю рбо3с 1р2вав р3вак р3вар р3вата р3веж р2вео 1рвет р1ви р3вин р2вит р1во рво1з2д р1вь 2рг р2гв р2г1л р2гн рг2р 2р1д рда1с р2д1в рд2ж рди2а р2дл рдос2 р2дц 1ре. ре1вр рег2ля рег2н ре2д1о2п ре2дос рее2в рее2д рее2л ре3ж2д 1резк ре1з2л ре1зна 1ре1зо ре1зр рез2у 1рейш ре1к2л 1рекш ре3мно 3ремо ремо2г3 1ренк 1рень ре1он ре1оп ре1о2р ре1о2ф ре1ох ре1о2ц 1репь ре3р2 рес1ки ре1сл ре1с2п рес2с3м ре3ста ре3сто ре1сч ре1тв ре1т2р реуч3т ре1чт ре3шл р3жа. р3жам р3жан р3ж2д 2рз р1з2в р1зо ри3а риб2 ри3бр ри3в2н 2риги ри2гло ри3г2н 2ридж ри1д2р рие2л рие3р риз2в рик2р ри3м2н ри3м2ч р2ин 1ринс рио2з рио2с ри1от ри3р2 ри1с2 ри3сб 2рисп ри3ств ри3т2р 1риу ри2фл ри3фр ри1хл 1риц 1риш риэти2 2р1к р2кв р2к1л рк1с 2р1л2 р2ль рлю1 р3ля 2рм р2мч 2р1н рнас4 рне3о рне1с2 рно3сл 1ро. ро2блю ро1б2р ро2вл 1рогол 1рогру ро1дв ро3д2з ро1дл род2ле ро2д1от ро1др 1родь рое2л рое2м рое2х 1розар ро1з2в ро1зр 3розыс рои2с3 1рокон 1рокр 1ролис 1ролиц 1ромор 1ронаж 1ронап 1ронос рооп1р ро2плю ро3пс 2р1орг ро1р2ж ро1ру ро1ск ро2ски ро2ску 1росл ро1см ро1с2п рос2ф 1росш 1росю 1рот2в 1ротк рот2ри 1роу роуг2 ро2ф1ак ро2фр ро1хл рош2л ро3шн 1рояз 2рп рп2ло р2плю 2р1р 4р1с рс2к р2сн рс2п рств2 р3ствл 2р1т р2такк р2т1акт р2т1в рт3ва рт2вл р2тм р2т1об рт1орг рт1ра рт2ран рт1ре рт1ри ртус1 р2т1у2чи р3тью рт1яч 1ру. 1руба руг3н ру2дар 1ружей 2рукс 1рул рус1к рус3л ру1ста руст1р ру3ть 1руха 1рухо 1ручн 2рф рф2л 2рх р2хв р2х1ин рх1л р1х2ло р2х1оп рх1р 2рц р2цв 2р1ч р2чл р2чм 2рш р3ш2м рш2т 2рщ 2ръ 1ры. 1рыб ры2дв 2рыз ры2кл 1рым ры2с1к ры2х1 2рь. 1рье 1рьи 2рьк 2рьс 2рьт 1рью 1рья рэ1л р2ю 1рю. 1рюс ря1ви 1ряю 1са са2бл са2дь са2кв са2кл 2с1альп с1апп 2с1арк 2с1атл са1тр са2ун са2ф1р са1х2 1сб2 2сбе3з2 сбезо3 сбе3с2 2с3бу с2бы 2сбю 1с2в 2с3вен сг2 с2ги с2гн с2го 1сд2 с2да с2де с3ди с2до 1с2е сег2н се1з2 се1кв сек1л се2к1р секс4 семи1 сере2б се2ск се2ст се3ста се3сте сест1р 1с2ж с1з 1с2и 3сиз си1ом си1оп си2пл си1х 4ск. 2скам с2канд 1с2каф 2сках ск2ва с2кви 3скино ск2л с2кля ск3ляв 2скн с1кон 2скона с2копс 2скош ск2р с1кра 2скриб ск1с 2скуе 2с3ла. 1слав 1слад с1лам 2с3лая с3лев с3лее с1лей слео2 с1лет с3лею 2с3ли. 2слиц 2с3ло. с2лож с3лому 2с3лос 2с3лую 2с3лые 2с3лый 2с3лым 2сль с1люс 2с3ля с2м 1смес с4мея с3мур с1н 1с2наб с2нас 2сная 1с2неж 2с3ник 2сно сно1з2 2сную 2с3ны 1со со1б2р с2ов сов2р со1д со1з2 со1л2г со3м2 со2рие со1ру со1ск со1с2п со2сь сот2р со1чл сош2л сп2 с2пав с2пее с2пел с2пен с2пех 1с2пец с2пеш с2пею с2пим 2спися с3пн спо1з2 2спол с2пос 2спь 1ср 2ср. с2раб сра2с с1рат сре2б1 сре3до 2с1с ссанд2 с2сб сс3во 4с5си с3с2к сс2л с2сн с3с2не с2сори сс2п сст2 сс2ч 2ст. 1ста. 2стб 4ств. ст1вер 2ствл ст2вол ст2вя с2те 1с4те. 1стей 1стел 1стен. с3тет. с3тете сте3х с3теш 1сти с2тие с2тии 2стимп 2стинд 2стинф 2стинъ с2тич с2тишк с2тию 2стк ст2ла с3т2ле 2стли ст2лил ст2лит 2стля 2стм 2стн 1сто. с2то1б 1стов 1стог сто2г3н 1стод 1стое 3с2тои 1сток 1стом 1стон 2сторг 2сторж 2сторс 1стос 1стот с2тоц 1стою 2стп 2стр. страс2 4страя 2стред ст1рей 2стрив ст1риз 2стрил 2стрищ ст1роа с4т1ров ст1род ст1рох ст2руб ст1руш 2стс с1тут 1стую 2стф 2стц 1сты с2тыв с4ть 2сть. 2стьс 3стью 1стья 1стям 1стях 1су су2б суб1а2 суб1о су1в су3гл су2ев су2з су1кр сума1 супе2 сус3л сус3п су1ст сут1р су2ф3 су1х 1с2фе с1х2 1с2хе 2сца с2цена 2с3ци 2сцо сч2 1сча с2час сче2с1к с3чив 2счик с2чит с1чл 2счо сш2 с3шн 1съ2 съе3д съе3л 1сы сы2г1 сы2з сы2п1л сы2с сыс1ка 2сь. 1сье 2ськ 2сьт 1сью 1сья сэ1р с2эс 1с2ю сю1с 1ся 2сяз ся3ть та2бл таб2р та1ври 1таг та2гн та1з2 так3ле т2ан та2пл 1тас та1ст та1тр 1тащ 2т1б2 2тв. 2т2ва т1вей т1вел т1вет 2тви т1вое т1во1з 2т1вой т1вос 2твою 2т1вр 2тву 2твы 2твя 2тг 2т1д 1т2е те2гн те1д те1зо 3тека тек1л 3текш теле1о тем2б1 те2о3д те1ох те4п1л те2рак тере2о 3терз тер3к 3теря те2ска те2с1ки те2с1ко те2ску тест2 те2хо 2тж 2т1з тиа2м ти2бл ти3д2 ти1зна тии2 тиис1 тик2 тила2м т1имп 2т1инв т1инд 2тинж 2тинф ти1с2л ти3ств ти3ф2р ти1хр 2т1к2 3т2кав 3т2кан 3т2кет 3ткн 2т1л тло2б т2ль тм2 тми2с тмист1 т3мщ 2т1н то2бес то1б2л 2тобъ то2вл то1д то3д2р то1з2 ток2р 2т1омм 2томс 2тонг 1торг 1торж 1торс то1ру 1торш то1с2н то1с2п то1с2ц 2тотд то3тк 1тощ 2тп2 тпа1т т1рага 2т1раж 2трб 2трв 2трг 2трд трдо2 т1реа 1требо 1требу т1ребь т1реве т1ревш т1рег т1ред т1рее т1реза т1резн треп1л 3тре2с трес1к т1рест т1рету 3т2ре2х т1рец т2решь т1рею 1триб т1рив три2г1л т1рил т1рим 4тринс три1о т1рит три3ф т1рищ 2трм 2трн т1рогл т1роид 2трой тро3пл т1рор т1росо тро3т 4т3роц 2трою 2трп 2трр 1труб т2руд 2трук т2рум т2рут 2трф 2трщ 2тръ т1ры т1ря. т1ряв 2т1ряд т1ряе т1ряж т1ряй т3ряк т1рят т1рящ т1ряя 4т1с2 т2сб т2с3д тсеп2 т2с3м т2с3п 2т1т т2тм ту2гр ту2жин 2т1у2пр ту1сл ту1ст ту2фл 1туша 1тушо 1тушь 1тущ 2тф 2т1х 4тц 2т1ч 2тш2 2тщ 2тъ ты2г1 ты2с1к 2ть 4ть. 3тье 3тьи ть2м 4тьт тью1 2тэ т2ю тю1т 1тяг 1тяж 1тяп 2тя2ч у1а у2але у2ас у3бел убо1д убос2 уб1р 1убра уб3рю 1у2быт у1ве. у1ви ув2л у1во у1ву у2гв у2гл у2гн уг2на уг2не уг1ре уг1ря уда1с уд2в уд1рам уд1ро у3ду у1е уе2д уе2л уе1с уе2с1к уес2л уе2х у2жж у1з2в у1зо узо3п у1и у1ка ук1в у1ки у1ко уко1б у1ку1 у1ла у1ле у1лу у1лых у1лю у2мч у3на ун2д1р у1нь у1о уо2б уо2в у2оза уо2к уо2п уо2с уост1 уо2т1 уо2ф у2пл уп1лю у3про у1ра у1ре уре2т3р у1ри урке3 у1ро у2род уро2дл урт2р у3ру у1ры у1рю у1ря у2сад у1сг ус1ка ус1ки уск3л ус1ком у1скр ус1ку. ус2л усла4ж3 ус3ли у1см у2сн ус2п ус3с у1сте у1стя у1сф 2усц у2сч у2сь у3сья у1та у3тер у1ти ут2ля у1то уто3п2с ут1ри у1ту у1ты у1тье у3тью 1утю у1тя у1у ууг2 уу2с у3фи уф1л уф2ля у2фр ух1ад уха2т у2хв у3х4во ух1л ух3ля ух1р у2чеб 1учр у1чь у3ше у3ши у2шл уш1ла у2шп 2уэ у1я уя2з 1ф фа2б1 фа2гн фа1зо фан2д фанд1р фа1тр фа2х 3фаш фаэ1 2ф1б 2ф1в 2фг 2ф1д фев1р фед1р фе1о3 фе2с1к ф4и фиа2к1 фи2гл фи2ж фи2зо фи2нин фи1о 3фит 2ф1к ф2ла ф2ли ф2ло 2фм 2ф1н 2фобъ 3фон фо2рв 2ф1орг фор3тр фо1ру фос1к 3фот фото3п ф1раб фра1з фра1с ф1рат ф2рен фре2с ф1ри ф2риж ф2риз ф1ро ф2рон ф1ру 2ф3с 2ф1т ф2тм ф2тор 2ф1у2п фу3тл 2фуф 2фф 2ф1ч 2фш2 2фь. ф2ю1 1ха ха2бл ха2д 2х1ак хан2д хао3 х1арш 2х1б 1х2в 2х3ве 2х3ви х3вы 2хг х3д2 1хе хео3 х1з2 1хи хиат1 хие2 2х1изы хи1с2 х1к2 х1лав х1лас х1лат х1лац 1хлеб х2лес х1лет х3ло. х2лоп 1х2лор х1лу 1х2му 2х1н 3х2ны 1хо 2х1о2к хоп2 хо2пе хо2пор хо1ру х1осм 2х1осн хоф2 хох1л хоя2 хп2 х1раз 1хран х1ра1с2 х1рей хри2пл х2рис х1ров 1хром хро2мч х1ры х1ря 2х1с2 2х1т 1ху. х1у2г 2хуе 2хуй 1хун х1у2р ху3ра 1хус 1хуш 2хую х1х2 2х1ч2 2хш хью1 1ц ца1 3ца. 3цам ца2пл 3цах 2ц1б ц2ве 2цвы 2цг 2ц1д це1з це1к це1от цеп1л цес2л це1т 2цетат 2ц1з ци1 ци2к1 цик3л ци2ол цип2 ци2ск циу3 циф1р 2ц1к2 2ц1л 2цм 2ц1н ц1о2б 2ц1о2д 2ц1от 2цп2 2ц1р 2ц1с 2ц1т 3цу 2цц 2ц3ш2 3цы цы2п цып3л цю1 1ча ча2др ча2дц ча2ево ча2евы ча2ер част1в ча1сте ча1сту ча1стя 3чато 3чаты 2ч1б ч1в 2ч1д 1че че1вл че2гл че1о чер2с черст1 че1сл ч2ж чжо2 1чи 3чик 3чиц 2ч1к 1ч2ла ч2ле ч3лег ч3леж 2чли ч2ли. 1ч2ло 1чм 2чма 2чме ч2мо 2ч1н 3чо 2ч1с 2ч1та ч2те 2чтм 1чу 3чук ч2х 2ч1ч 2чь. 1чье 1чьи 2чьс 2чьт 1чью 1чья 1ш ша2бл ша2гн ша2г1р ша2др шан2кр шар3т2 ша1ст ша1тро 2ш1б ш2в ш3вен ше2гл ше1к ше1о2 ше3пл ше1с2 ши2бл ши2пл шиф1р 2ш1к2 3ш2кол 2ш1лей 2шлен ш2ли. 2шлив 2шлил ш2лин ш2лис ш2лите ш2лиф ш2ло. 2шлов ш2лог ш1лы ш2лю 2шляе 2шляк ш2ляп 2шлят 2шляч 2шляю 2шм 3ш2мы 4ш3мы. 2ш1н 4шни ш2нур ш2п2 ш3пр 2ш1р 2ш1с ш1ти 2штс шу2ев шуст1 2шф ш1х 2шц 2ш1ч 2шь 4шь. 3шье 3шьи 3шью 3шья ш2ю1 1щ 2щ3в2 ще1б2л ще2гл щед1р щеи2 щеис1 ще1с ще1х щеш2 ще3шк щи2п1л 2щм 2щ1н 2щ1р 2щь. ъ1 ъе2г ъе2д ъе3до ъе2л ъ2е2р ъе2с ъе2хи ъю2 ъя2 ъя3н ы1 ы2бл ы3га ы3ги ыг2л ы2гн ы2дл ыд2ре ы2д1ро ы2дря ые2 ы3ж2д ыз2ва ыз2д ы2зл ы2зн ыз2на ыи2 ыиг1 ы2к1в ык2л ы2к3ло ыко1з ык1с ы2ль ы2мч ынос3л ы3по ыра2с3 ыр2в ыре2х ы3са ы3се ыс1ки ыс1ку ы2сн ы3со ыс2п ы2сх ыс2ч ы2сш ыт1ви ыт2р ы3тью ы3тья ыу2 ы2ш1л ы3шь ь1 ьб2 ь2вя ь2дц ь2е ье1зо ье1к ье2с1к ь2зн ь2и1 ь2кл ьми3д ьми3к ьмо1 ьне2о ь2о ь2п1л ь3п2то ьс2к ь2сн ь2сти ь2стя ь2т1амп ьти3м ь2тм ь2тот ь2траб ьт2ре ьт2ру ьт2ры ьхо2 ьхоз1 ь2ща ь2ще ь2щу ь2ю ь2я ья1в ь3ягс 1э э1в эв1р 2эг эд1р эк1л экс1 эк2ст эле1о э2м э3ма э2н э3нь эо2з э2п эпи3к э1ре э1ри эри4тр эро1с2 э1ру э1ры эс1 эск2 эс3м э2со эс3те эс2т1р э2те этил1а эт1ра э2ф эх2 эхо3 э2ц эя2 1ю ю1а ю1б ю2бв ю2бл ю2б1ре ю1в ю1дь ю1е юз2г юзи2к ю1зо ю1и ю2идал ю1к ю2к1в ю1ла ю1ле ю2ли ю1лю 2юм ю2мч ю2нь ю1о1 ю1ра ю1ре юре4м ю1ри юри2ск ю1ро ю1ру ю1ры ю2с1к ю1ста ю1сте ю1сто ю1стя ю1ти ю1то ю1ту ю1ты ю1х юха1с ю1ч ю2щь ю1я я2бр яб1ра яб3ре яб1ри яб3рю 3явикс я1во я1ву я1в2х я2г1л я2гн яд1в яд1р я1е яз2гн я1зо я1и я1к я2к1в я2к1л як1с я1л я2ль ям2б3л я2мь я3на янс2 я1ра я1ри я1ро я1рь яс1к яс1л яс2т яст3в я1сто яст1р я1та ят3в я3ти яти1з я1то я1ту я1ты я3тью я3тья я1тя я1у ях1л я1ху яце1 я2шл 2яю. 2я1я .бо2дра .вст2р .доб2рел .до1б2ри .об2люю .об2рее .об2рей .об2рею .об2рив .об2рил .об2рит .па2н1ис .пом2ну .реа2н .ро2с3пи .со2пла а2ньш атро2ск безу2с бино2ск виз2гн выб2ре гст4р ди1с2лов дос2ня дро2ж3ж 2дружей е2мьд е2о3плато е2о3пози ере3с2со 4ж3дик 4ж3дич заи2л зао2з 2з1а2хав заю2л з2рят зу2мь 6зь. и2л1а2мин илло3к2 й2кь ла2б1р лу3с4н ме2динс ме2д1о2см мети2л1ам мис4с3н нар2ват не2о3ре ни1с2кол ни4сь. но4л1а2мин н2трасс о2д1о2бол о4ж3дев о1и2с1тр ойс4ков о2м3че. они3л2ам он2трат о2плюс осо4м3н оти4дн пере1с2н по2доде по2д1у2ро пое2ж по2стин прем2но приче2с1к пти4дн редо4пл реж4ди рни3л2а3м роб2лею 2сбрук1 со2стрит со3т2кал 2стче. 2стьт сы2мит 2сься. 6тр. тро2етес 6хуя. ы2рьм ыя2вя ьбат2 а1вё а2двё а1ё аз3вёз а1лё 2алёк 2амёт ам2нёт а1рё ас3тём а1тьё 1бё бё2д1р б3лён б2лёс1к б2люё б1рёк б2рём б2рёх 1веё 3везё вёд1р 1вёз 2вёрд 1вёс в2лёк в2лёт 1вмё в2нёс 2в1рён 3всё3 1вьё г1лё г2лёт г2нёв г3нён г2ноё д1вё 1дё .доб2рёл 2доплё до2прё д1рё д2рёб 2д3рёж д2рём 1дрёма 1дрёмы 2д3рён дъё2м 1дьё еб1рён е1вё 2евёр 2е1врё е2глё е1ё 2ежё е3зё е1лё 2епё ер1вё е1рё ерё3до ерё1к2 ес2чёт ет1вё е1тьё 2ёб ё1бра ёб1ры ё1ве ё1во 2ё1вре ё1ву ё1дру 2ё3душ 2ёже ё3зе ёз1о2г ё1зом ё1ка ё1ки 2ё1ко 2ё1кр ёк2ро ё1ку ё1ла ё1ле ё1лу ё1лы 2ёмуж ё2мч ё3на ён2д1р ёнс2 ёпат2 2ёпе ё2пл ё3пла ёп1лу ё3плы ё4пн 2ёпо ё4пт ё1ра ё1ре ё3ре. ё1ри ё1ро ёр3ск ё1ру ё1ры ё3с2а ё1ск ё2с1ка. ё2ске ё4с1ку. 2ёсл ё3со ё1ст ёс2тан ё3сту ё1та 2ётеч ё1ти ё1то ёто1с ёт1р ё1ту ё1ты ё1тю ё1тя ёха2т ёх1ато ёх3вал ёх3лоп ёх1опо ёх1ру 3жёв жё1с2 ж2жё за3мнё з1вё з2вёз 1зё з2наё 2знё 1з2о3рё з2отё зот2рё 3зуё зъё2м 2зымё 2и1вё иг1рён и1ё их1рё 1каё 1кё к3лён к2роё 3куё ла1стё лё3до лё1з2о3 лёк1л 1лён лё2ск лё4ска 1лёх 2лоён 1луё 3льё 1льщё 3м2нёш 3м2щё нд2рё не3ё 1нё нё1б2 3номё 1ньё од3рёб о1ё оё2жи о1лё 2омё о3м2нём о3м2нёт о2п1лёй о1рё о2скё от1вё 2о3тёк о3тёр от1рёк от1рёш о3фё пё1 пё2ст1р пё2тр 2плён п2лёнк плёс1к п1лёю поё2ж 3прёт причё2с1к р2блё 1рвёт .рё2бр 1рёзк рё1зна 1рё1зо рёз2у 1рёкш 3рёмо 1рёнк рё3ста рё3сто род2лё роё2м 1рьё с2дё се3стё 1с2ё сёкс4 сё2ст сёст1р 2скуё с1лёт с2тё 1стёл 1стён. с3тёт. с3тёте стё3х с3тёш с3т2лё счё2с1к 1сьё т1вёл т1воё 1т2ё тё2гн тё1зо 3тёка тёк1л 3тёкш тё4п1л тёр3к тё2ска тё2с1ки тё2с1ко тё2ску тё2хо 3т2кёт т1ревё 3т2рё2х т2рёшь тро2етёс 3тьё уг2нё уг1рё .уё2 у1ё у1лё у1рё у1стё у3тёр у1тьё у2чёб у3шё 2х3вё 1хлёб х2лёс ц2вё 1чё чёр2с чёрст1 .чё2с1к ч2тё 1чьё 2шлён 3шьё ъ2ё2р ыд2рё ырё2х ы3сё ь2ё ьё1зо ь2щё ю1ё яб3рё .не8 8не. 8бъ. 8въ. 8гъ. 8дъ. 8жъ. 8зъ. 8къ. 8лъ. 8мъ. 8нъ. 8пъ. 8ръ. 8съ. 8тъ. 8фъ. 8хъ. 8цъ. 8чъ. 8шъ. 8щъ. 8-7 --8 .а-8 .б-8 .в-8 .г-8 .д-8 .е-8 .ё-8 .ж-8 .з-8 .и-8 .й-8 .к-8 .л-8 .м-8 .н-8 .о-8 .п-8 .р-8 .с-8 .т-8 .у-8 .ф-8 .х-8 .ц-8 .ч-8 .ш-8 .щ-8 .ъ-8 .ы-8 .ь-8 .э-8 .ю-8 .я-8 -а8а8 8а8а- -а8б8 8а8б- -а8в8 8а8в- -а8г8 8а8г- -а8д8 8а8д- -а8е8 8а8е- -а8ё8 8а8ё- -а8ж8 8а8ж- -а8з8 8а8з- -а8и8 8а8и- -а8й8 8а8й- -а8к8 8а8к- -а8л8 8а8л- -а8м8 8а8м- -а8н8 8а8н- -а8о8 8а8о- -а8п8 8а8п- -а8р8 8а8р- -а8с8 8а8с- -а8т8 8а8т- -а8у8 8а8у- -а8ф8 8а8ф- -а8х8 8а8х- -а8ц8 8а8ц- -а8ч8 8а8ч- -а8ш8 8а8ш- -а8щ8 8а8щ- -а8ъ8 8а8ъ- -а8ы8 8а8ы- -а8ь8 8а8ь- -а8э8 8а8э- -а8ю8 8а8ю- -а8я8 8а8я- -б8а8 8б8а- -б8б8 8б8б- -б8в8 8б8в- -б8г8 8б8г- -б8д8 8б8д- -б8е8 8б8е- -б8ё8 8б8ё- -б8ж8 8б8ж- -б8з8 8б8з- -б8и8 8б8и- -б8й8 8б8й- -б8к8 8б8к- -б8л8 8б8л- -б8м8 8б8м- -б8н8 8б8н- -б8о8 8б8о- -б8п8 8б8п- -б8р8 8б8р- -б8с8 8б8с- -б8т8 8б8т- -б8у8 8б8у- -б8ф8 8б8ф- -б8х8 8б8х- -б8ц8 8б8ц- -б8ч8 8б8ч- -б8ш8 8б8ш- -б8щ8 8б8щ- -б8ъ8 8б8ъ- -б8ы8 8б8ы- -б8ь8 8б8ь- -б8э8 8б8э- -б8ю8 8б8ю- -б8я8 8б8я- -в8а8 8в8а- -в8б8 8в8б- -в8в8 8в8в- -в8г8 8в8г- -в8д8 8в8д- -в8е8 8в8е- -в8ё8 8в8ё- -в8ж8 8в8ж- -в8з8 8в8з- -в8и8 8в8и- -в8й8 8в8й- -в8к8 8в8к- -в8л8 8в8л- -в8м8 8в8м- -в8н8 8в8н- -в8о8 8в8о- -в8п8 8в8п- -в8р8 8в8р- -в8с8 8в8с- -в8т8 8в8т- -в8у8 8в8у- -в8ф8 8в8ф- -в8х8 8в8х- -в8ц8 8в8ц- -в8ч8 8в8ч- -в8ш8 8в8ш- -в8щ8 8в8щ- -в8ъ8 8в8ъ- -в8ы8 8в8ы- -в8ь8 8в8ь- -в8э8 8в8э- -в8ю8 8в8ю- -в8я8 8в8я- -г8а8 8г8а- -г8б8 8г8б- -г8в8 8г8в- -г8г8 8г8г- -г8д8 8г8д- -г8е8 8г8е- -г8ё8 8г8ё- -г8ж8 8г8ж- -г8з8 8г8з- -г8и8 8г8и- -г8й8 8г8й- -г8к8 8г8к- -г8л8 8г8л- -г8м8 8г8м- -г8н8 8г8н- -г8о8 8г8о- -г8п8 8г8п- -г8р8 8г8р- -г8с8 8г8с- -г8т8 8г8т- -г8у8 8г8у- -г8ф8 8г8ф- -г8х8 8г8х- -г8ц8 8г8ц- -г8ч8 8г8ч- -г8ш8 8г8ш- -г8щ8 8г8щ- -г8ъ8 8г8ъ- -г8ы8 8г8ы- -г8ь8 8г8ь- -г8э8 8г8э- -г8ю8 8г8ю- -г8я8 8г8я- -д8а8 8д8а- -д8б8 8д8б- -д8в8 8д8в- -д8г8 8д8г- -д8д8 8д8д- -д8е8 8д8е- -д8ё8 8д8ё- -д8ж8 8д8ж- -д8з8 8д8з- -д8и8 8д8и- -д8й8 8д8й- -д8к8 8д8к- -д8л8 8д8л- -д8м8 8д8м- -д8н8 8д8н- -д8о8 8д8о- -д8п8 8д8п- -д8р8 8д8р- -д8с8 8д8с- -д8т8 8д8т- -д8у8 8д8у- -д8ф8 8д8ф- -д8х8 8д8х- -д8ц8 8д8ц- -д8ч8 8д8ч- -д8ш8 8д8ш- -д8щ8 8д8щ- -д8ъ8 8д8ъ- -д8ы8 8д8ы- -д8ь8 8д8ь- -д8э8 8д8э- -д8ю8 8д8ю- -д8я8 8д8я- -е8а8 8е8а- -е8б8 8е8б- -е8в8 8е8в- -е8г8 8е8г- -е8д8 8е8д- -е8е8 8е8е- -е8ё8 8е8ё- -е8ж8 8е8ж- -е8з8 8е8з- -е8и8 8е8и- -е8й8 8е8й- -е8к8 8е8к- -е8л8 8е8л- -е8м8 8е8м- -е8н8 8е8н- -е8о8 8е8о- -е8п8 8е8п- -е8р8 8е8р- -е8с8 8е8с- -е8т8 8е8т- -е8у8 8е8у- -е8ф8 8е8ф- -е8х8 8е8х- -е8ц8 8е8ц- -е8ч8 8е8ч- -е8ш8 8е8ш- -е8щ8 8е8щ- -е8ъ8 8е8ъ- -е8ы8 8е8ы- -е8ь8 8е8ь- -е8э8 8е8э- -е8ю8 8е8ю- -е8я8 8е8я- -ё8а8 8ё8а- -ё8б8 8ё8б- -ё8в8 8ё8в- -ё8г8 8ё8г- -ё8д8 8ё8д- -ё8е8 8ё8е- -ё8ё8 8ё8ё- -ё8ж8 8ё8ж- -ё8з8 8ё8з- -ё8и8 8ё8и- -ё8й8 8ё8й- -ё8к8 8ё8к- -ё8л8 8ё8л- -ё8м8 8ё8м- -ё8н8 8ё8н- -ё8о8 8ё8о- -ё8п8 8ё8п- -ё8р8 8ё8р- -ё8с8 8ё8с- -ё8т8 8ё8т- -ё8у8 8ё8у- -ё8ф8 8ё8ф- -ё8х8 8ё8х- -ё8ц8 8ё8ц- -ё8ч8 8ё8ч- -ё8ш8 8ё8ш- -ё8щ8 8ё8щ- -ё8ъ8 8ё8ъ- -ё8ы8 8ё8ы- -ё8ь8 8ё8ь- -ё8э8 8ё8э- -ё8ю8 8ё8ю- -ё8я8 8ё8я- -ж8а8 8ж8а- -ж8б8 8ж8б- -ж8в8 8ж8в- -ж8г8 8ж8г- -ж8д8 8ж8д- -ж8е8 8ж8е- -ж8ё8 8ж8ё- -ж8ж8 8ж8ж- -ж8з8 8ж8з- -ж8и8 8ж8и- -ж8й8 8ж8й- -ж8к8 8ж8к- -ж8л8 8ж8л- -ж8м8 8ж8м- -ж8н8 8ж8н- -ж8о8 8ж8о- -ж8п8 8ж8п- -ж8р8 8ж8р- -ж8с8 8ж8с- -ж8т8 8ж8т- -ж8у8 8ж8у- -ж8ф8 8ж8ф- -ж8х8 8ж8х- -ж8ц8 8ж8ц- -ж8ч8 8ж8ч- -ж8ш8 8ж8ш- -ж8щ8 8ж8щ- -ж8ъ8 8ж8ъ- -ж8ы8 8ж8ы- -ж8ь8 8ж8ь- -ж8э8 8ж8э- -ж8ю8 8ж8ю- -ж8я8 8ж8я- -з8а8 8з8а- -з8б8 8з8б- -з8в8 8з8в- -з8г8 8з8г- -з8д8 8з8д- -з8е8 8з8е- -з8ё8 8з8ё- -з8ж8 8з8ж- -з8з8 8з8з- -з8и8 8з8и- -з8й8 8з8й- -з8к8 8з8к- -з8л8 8з8л- -з8м8 8з8м- -з8н8 8з8н- -з8о8 8з8о- -з8п8 8з8п- -з8р8 8з8р- -з8с8 8з8с- -з8т8 8з8т- -з8у8 8з8у- -з8ф8 8з8ф- -з8х8 8з8х- -з8ц8 8з8ц- -з8ч8 8з8ч- -з8ш8 8з8ш- -з8щ8 8з8щ- -з8ъ8 8з8ъ- -з8ы8 8з8ы- -з8ь8 8з8ь- -з8э8 8з8э- -з8ю8 8з8ю- -з8я8 8з8я- -и8а8 8и8а- -и8б8 8и8б- -и8в8 8и8в- -и8г8 8и8г- -и8д8 8и8д- -и8е8 8и8е- -и8ё8 8и8ё- -и8ж8 8и8ж- -и8з8 8и8з- -и8и8 8и8и- -и8й8 8и8й- -и8к8 8и8к- -и8л8 8и8л- -и8м8 8и8м- -и8н8 8и8н- -и8о8 8и8о- -и8п8 8и8п- -и8р8 8и8р- -и8с8 8и8с- -и8т8 8и8т- -и8у8 8и8у- -и8ф8 8и8ф- -и8х8 8и8х- -и8ц8 8и8ц- -и8ч8 8и8ч- -и8ш8 8и8ш- -и8щ8 8и8щ- -и8ъ8 8и8ъ- -и8ы8 8и8ы- -и8ь8 8и8ь- -и8э8 8и8э- -и8ю8 8и8ю- -и8я8 8и8я- -й8а8 8й8а- -й8б8 8й8б- -й8в8 8й8в- -й8г8 8й8г- -й8д8 8й8д- -й8е8 8й8е- -й8ё8 8й8ё- -й8ж8 8й8ж- -й8з8 8й8з- -й8и8 8й8и- -й8й8 8й8й- -й8к8 8й8к- -й8л8 8й8л- -й8м8 8й8м- -й8н8 8й8н- -й8о8 8й8о- -й8п8 8й8п- -й8р8 8й8р- -й8с8 8й8с- -й8т8 8й8т- -й8у8 8й8у- -й8ф8 8й8ф- -й8х8 8й8х- -й8ц8 8й8ц- -й8ч8 8й8ч- -й8ш8 8й8ш- -й8щ8 8й8щ- -й8ъ8 8й8ъ- -й8ы8 8й8ы- -й8ь8 8й8ь- -й8э8 8й8э- -й8ю8 8й8ю- -й8я8 8й8я- -к8а8 8к8а- -к8б8 8к8б- -к8в8 8к8в- -к8г8 8к8г- -к8д8 8к8д- -к8е8 8к8е- -к8ё8 8к8ё- -к8ж8 8к8ж- -к8з8 8к8з- -к8и8 8к8и- -к8й8 8к8й- -к8к8 8к8к- -к8л8 8к8л- -к8м8 8к8м- -к8н8 8к8н- -к8о8 8к8о- -к8п8 8к8п- -к8р8 8к8р- -к8с8 8к8с- -к8т8 8к8т- -к8у8 8к8у- -к8ф8 8к8ф- -к8х8 8к8х- -к8ц8 8к8ц- -к8ч8 8к8ч- -к8ш8 8к8ш- -к8щ8 8к8щ- -к8ъ8 8к8ъ- -к8ы8 8к8ы- -к8ь8 8к8ь- -к8э8 8к8э- -к8ю8 8к8ю- -к8я8 8к8я- -л8а8 8л8а- -л8б8 8л8б- -л8в8 8л8в- -л8г8 8л8г- -л8д8 8л8д- -л8е8 8л8е- -л8ё8 8л8ё- -л8ж8 8л8ж- -л8з8 8л8з- -л8и8 8л8и- -л8й8 8л8й- -л8к8 8л8к- -л8л8 8л8л- -л8м8 8л8м- -л8н8 8л8н- -л8о8 8л8о- -л8п8 8л8п- -л8р8 8л8р- -л8с8 8л8с- -л8т8 8л8т- -л8у8 8л8у- -л8ф8 8л8ф- -л8х8 8л8х- -л8ц8 8л8ц- -л8ч8 8л8ч- -л8ш8 8л8ш- -л8щ8 8л8щ- -л8ъ8 8л8ъ- -л8ы8 8л8ы- -л8ь8 8л8ь- -л8э8 8л8э- -л8ю8 8л8ю- -л8я8 8л8я- -м8а8 8м8а- -м8б8 8м8б- -м8в8 8м8в- -м8г8 8м8г- -м8д8 8м8д- -м8е8 8м8е- -м8ё8 8м8ё- -м8ж8 8м8ж- -м8з8 8м8з- -м8и8 8м8и- -м8й8 8м8й- -м8к8 8м8к- -м8л8 8м8л- -м8м8 8м8м- -м8н8 8м8н- -м8о8 8м8о- -м8п8 8м8п- -м8р8 8м8р- -м8с8 8м8с- -м8т8 8м8т- -м8у8 8м8у- -м8ф8 8м8ф- -м8х8 8м8х- -м8ц8 8м8ц- -м8ч8 8м8ч- -м8ш8 8м8ш- -м8щ8 8м8щ- -м8ъ8 8м8ъ- -м8ы8 8м8ы- -м8ь8 8м8ь- -м8э8 8м8э- -м8ю8 8м8ю- -м8я8 8м8я- -н8а8 8н8а- -н8б8 8н8б- -н8в8 8н8в- -н8г8 8н8г- -н8д8 8н8д- -н8е8 8н8е- -н8ё8 8н8ё- -н8ж8 8н8ж- -н8з8 8н8з- -н8и8 8н8и- -н8й8 8н8й- -н8к8 8н8к- -н8л8 8н8л- -н8м8 8н8м- -н8н8 8н8н- -н8о8 8н8о- -н8п8 8н8п- -н8р8 8н8р- -н8с8 8н8с- -н8т8 8н8т- -н8у8 8н8у- -н8ф8 8н8ф- -н8х8 8н8х- -н8ц8 8н8ц- -н8ч8 8н8ч- -н8ш8 8н8ш- -н8щ8 8н8щ- -н8ъ8 8н8ъ- -н8ы8 8н8ы- -н8ь8 8н8ь- -н8э8 8н8э- -н8ю8 8н8ю- -н8я8 8н8я- -о8а8 8о8а- -о8б8 8о8б- -о8в8 8о8в- -о8г8 8о8г- -о8д8 8о8д- -о8е8 8о8е- -о8ё8 8о8ё- -о8ж8 8о8ж- -о8з8 8о8з- -о8и8 8о8и- -о8й8 8о8й- -о8к8 8о8к- -о8л8 8о8л- -о8м8 8о8м- -о8н8 8о8н- -о8о8 8о8о- -о8п8 8о8п- -о8р8 8о8р- -о8с8 8о8с- -о8т8 8о8т- -о8у8 8о8у- -о8ф8 8о8ф- -о8х8 8о8х- -о8ц8 8о8ц- -о8ч8 8о8ч- -о8ш8 8о8ш- -о8щ8 8о8щ- -о8ъ8 8о8ъ- -о8ы8 8о8ы- -о8ь8 8о8ь- -о8э8 8о8э- -о8ю8 8о8ю- -о8я8 8о8я- -п8а8 8п8а- -п8б8 8п8б- -п8в8 8п8в- -п8г8 8п8г- -п8д8 8п8д- -п8е8 8п8е- -п8ё8 8п8ё- -п8ж8 8п8ж- -п8з8 8п8з- -п8и8 8п8и- -п8й8 8п8й- -п8к8 8п8к- -п8л8 8п8л- -п8м8 8п8м- -п8н8 8п8н- -п8о8 8п8о- -п8п8 8п8п- -п8р8 8п8р- -п8с8 8п8с- -п8т8 8п8т- -п8у8 8п8у- -п8ф8 8п8ф- -п8х8 8п8х- -п8ц8 8п8ц- -п8ч8 8п8ч- -п8ш8 8п8ш- -п8щ8 8п8щ- -п8ъ8 8п8ъ- -п8ы8 8п8ы- -п8ь8 8п8ь- -п8э8 8п8э- -п8ю8 8п8ю- -п8я8 8п8я- -р8а8 8р8а- -р8б8 8р8б- -р8в8 8р8в- -р8г8 8р8г- -р8д8 8р8д- -р8е8 8р8е- -р8ё8 8р8ё- -р8ж8 8р8ж- -р8з8 8р8з- -р8и8 8р8и- -р8й8 8р8й- -р8к8 8р8к- -р8л8 8р8л- -р8м8 8р8м- -р8н8 8р8н- -р8о8 8р8о- -р8п8 8р8п- -р8р8 8р8р- -р8с8 8р8с- -р8т8 8р8т- -р8у8 8р8у- -р8ф8 8р8ф- -р8х8 8р8х- -р8ц8 8р8ц- -р8ч8 8р8ч- -р8ш8 8р8ш- -р8щ8 8р8щ- -р8ъ8 8р8ъ- -р8ы8 8р8ы- -р8ь8 8р8ь- -р8э8 8р8э- -р8ю8 8р8ю- -р8я8 8р8я- -с8а8 8с8а- -с8б8 8с8б- -с8в8 8с8в- -с8г8 8с8г- -с8д8 8с8д- -с8е8 8с8е- -с8ё8 8с8ё- -с8ж8 8с8ж- -с8з8 8с8з- -с8и8 8с8и- -с8й8 8с8й- -с8к8 8с8к- -с8л8 8с8л- -с8м8 8с8м- -с8н8 8с8н- -с8о8 8с8о- -с8п8 8с8п- -с8р8 8с8р- -с8с8 8с8с- -с8т8 8с8т- -с8у8 8с8у- -с8ф8 8с8ф- -с8х8 8с8х- -с8ц8 8с8ц- -с8ч8 8с8ч- -с8ш8 8с8ш- -с8щ8 8с8щ- -с8ъ8 8с8ъ- -с8ы8 8с8ы- -с8ь8 8с8ь- -с8э8 8с8э- -с8ю8 8с8ю- -с8я8 8с8я- -т8а8 8т8а- -т8б8 8т8б- -т8в8 8т8в- -т8г8 8т8г- -т8д8 8т8д- -т8е8 8т8е- -т8ё8 8т8ё- -т8ж8 8т8ж- -т8з8 8т8з- -т8и8 8т8и- -т8й8 8т8й- -т8к8 8т8к- -т8л8 8т8л- -т8м8 8т8м- -т8н8 8т8н- -т8о8 8т8о- -т8п8 8т8п- -т8р8 8т8р- -т8с8 8т8с- -т8т8 8т8т- -т8у8 8т8у- -т8ф8 8т8ф- -т8х8 8т8х- -т8ц8 8т8ц- -т8ч8 8т8ч- -т8ш8 8т8ш- -т8щ8 8т8щ- -т8ъ8 8т8ъ- -т8ы8 8т8ы- -т8ь8 8т8ь- -т8э8 8т8э- -т8ю8 8т8ю- -т8я8 8т8я- -у8а8 8у8а- -у8б8 8у8б- -у8в8 8у8в- -у8г8 8у8г- -у8д8 8у8д- -у8е8 8у8е- -у8ё8 8у8ё- -у8ж8 8у8ж- -у8з8 8у8з- -у8и8 8у8и- -у8й8 8у8й- -у8к8 8у8к- -у8л8 8у8л- -у8м8 8у8м- -у8н8 8у8н- -у8о8 8у8о- -у8п8 8у8п- -у8р8 8у8р- -у8с8 8у8с- -у8т8 8у8т- -у8у8 8у8у- -у8ф8 8у8ф- -у8х8 8у8х- -у8ц8 8у8ц- -у8ч8 8у8ч- -у8ш8 8у8ш- -у8щ8 8у8щ- -у8ъ8 8у8ъ- -у8ы8 8у8ы- -у8ь8 8у8ь- -у8э8 8у8э- -у8ю8 8у8ю- -у8я8 8у8я- -ф8а8 8ф8а- -ф8б8 8ф8б- -ф8в8 8ф8в- -ф8г8 8ф8г- -ф8д8 8ф8д- -ф8е8 8ф8е- -ф8ё8 8ф8ё- -ф8ж8 8ф8ж- -ф8з8 8ф8з- -ф8и8 8ф8и- -ф8й8 8ф8й- -ф8к8 8ф8к- -ф8л8 8ф8л- -ф8м8 8ф8м- -ф8н8 8ф8н- -ф8о8 8ф8о- -ф8п8 8ф8п- -ф8р8 8ф8р- -ф8с8 8ф8с- -ф8т8 8ф8т- -ф8у8 8ф8у- -ф8ф8 8ф8ф- -ф8х8 8ф8х- -ф8ц8 8ф8ц- -ф8ч8 8ф8ч- -ф8ш8 8ф8ш- -ф8щ8 8ф8щ- -ф8ъ8 8ф8ъ- -ф8ы8 8ф8ы- -ф8ь8 8ф8ь- -ф8э8 8ф8э- -ф8ю8 8ф8ю- -ф8я8 8ф8я- -х8а8 8х8а- -х8б8 8х8б- -х8в8 8х8в- -х8г8 8х8г- -х8д8 8х8д- -х8е8 8х8е- -х8ё8 8х8ё- -х8ж8 8х8ж- -х8з8 8х8з- -х8и8 8х8и- -х8й8 8х8й- -х8к8 8х8к- -х8л8 8х8л- -х8м8 8х8м- -х8н8 8х8н- -х8о8 8х8о- -х8п8 8х8п- -х8р8 8х8р- -х8с8 8х8с- -х8т8 8х8т- -х8у8 8х8у- -х8ф8 8х8ф- -х8х8 8х8х- -х8ц8 8х8ц- -х8ч8 8х8ч- -х8ш8 8х8ш- -х8щ8 8х8щ- -х8ъ8 8х8ъ- -х8ы8 8х8ы- -х8ь8 8х8ь- -х8э8 8х8э- -х8ю8 8х8ю- -х8я8 8х8я- -ц8а8 8ц8а- -ц8б8 8ц8б- -ц8в8 8ц8в- -ц8г8 8ц8г- -ц8д8 8ц8д- -ц8е8 8ц8е- -ц8ё8 8ц8ё- -ц8ж8 8ц8ж- -ц8з8 8ц8з- -ц8и8 8ц8и- -ц8й8 8ц8й- -ц8к8 8ц8к- -ц8л8 8ц8л- -ц8м8 8ц8м- -ц8н8 8ц8н- -ц8о8 8ц8о- -ц8п8 8ц8п- -ц8р8 8ц8р- -ц8с8 8ц8с- -ц8т8 8ц8т- -ц8у8 8ц8у- -ц8ф8 8ц8ф- -ц8х8 8ц8х- -ц8ц8 8ц8ц- -ц8ч8 8ц8ч- -ц8ш8 8ц8ш- -ц8щ8 8ц8щ- -ц8ъ8 8ц8ъ- -ц8ы8 8ц8ы- -ц8ь8 8ц8ь- -ц8э8 8ц8э- -ц8ю8 8ц8ю- -ц8я8 8ц8я- -ч8а8 8ч8а- -ч8б8 8ч8б- -ч8в8 8ч8в- -ч8г8 8ч8г- -ч8д8 8ч8д- -ч8е8 8ч8е- -ч8ё8 8ч8ё- -ч8ж8 8ч8ж- -ч8з8 8ч8з- -ч8и8 8ч8и- -ч8й8 8ч8й- -ч8к8 8ч8к- -ч8л8 8ч8л- -ч8м8 8ч8м- -ч8н8 8ч8н- -ч8о8 8ч8о- -ч8п8 8ч8п- -ч8р8 8ч8р- -ч8с8 8ч8с- -ч8т8 8ч8т- -ч8у8 8ч8у- -ч8ф8 8ч8ф- -ч8х8 8ч8х- -ч8ц8 8ч8ц- -ч8ч8 8ч8ч- -ч8ш8 8ч8ш- -ч8щ8 8ч8щ- -ч8ъ8 8ч8ъ- -ч8ы8 8ч8ы- -ч8ь8 8ч8ь- -ч8э8 8ч8э- -ч8ю8 8ч8ю- -ч8я8 8ч8я- -ш8а8 8ш8а- -ш8б8 8ш8б- -ш8в8 8ш8в- -ш8г8 8ш8г- -ш8д8 8ш8д- -ш8е8 8ш8е- -ш8ё8 8ш8ё- -ш8ж8 8ш8ж- -ш8з8 8ш8з- -ш8и8 8ш8и- -ш8й8 8ш8й- -ш8к8 8ш8к- -ш8л8 8ш8л- -ш8м8 8ш8м- -ш8н8 8ш8н- -ш8о8 8ш8о- -ш8п8 8ш8п- -ш8р8 8ш8р- -ш8с8 8ш8с- -ш8т8 8ш8т- -ш8у8 8ш8у- -ш8ф8 8ш8ф- -ш8х8 8ш8х- -ш8ц8 8ш8ц- -ш8ч8 8ш8ч- -ш8ш8 8ш8ш- -ш8щ8 8ш8щ- -ш8ъ8 8ш8ъ- -ш8ы8 8ш8ы- -ш8ь8 8ш8ь- -ш8э8 8ш8э- -ш8ю8 8ш8ю- -ш8я8 8ш8я- -щ8а8 8щ8а- -щ8б8 8щ8б- -щ8в8 8щ8в- -щ8г8 8щ8г- -щ8д8 8щ8д- -щ8е8 8щ8е- -щ8ё8 8щ8ё- -щ8ж8 8щ8ж- -щ8з8 8щ8з- -щ8и8 8щ8и- -щ8й8 8щ8й- -щ8к8 8щ8к- -щ8л8 8щ8л- -щ8м8 8щ8м- -щ8н8 8щ8н- -щ8о8 8щ8о- -щ8п8 8щ8п- -щ8р8 8щ8р- -щ8с8 8щ8с- -щ8т8 8щ8т- -щ8у8 8щ8у- -щ8ф8 8щ8ф- -щ8х8 8щ8х- -щ8ц8 8щ8ц- -щ8ч8 8щ8ч- -щ8ш8 8щ8ш- -щ8щ8 8щ8щ- -щ8ъ8 8щ8ъ- -щ8ы8 8щ8ы- -щ8ь8 8щ8ь- -щ8э8 8щ8э- -щ8ю8 8щ8ю- -щ8я8 8щ8я- -ъ8а8 8ъ8а- -ъ8б8 8ъ8б- -ъ8в8 8ъ8в- -ъ8г8 8ъ8г- -ъ8д8 8ъ8д- -ъ8е8 8ъ8е- -ъ8ё8 8ъ8ё- -ъ8ж8 8ъ8ж- -ъ8з8 8ъ8з- -ъ8и8 8ъ8и- -ъ8й8 8ъ8й- -ъ8к8 8ъ8к- -ъ8л8 8ъ8л- -ъ8м8 8ъ8м- -ъ8н8 8ъ8н- -ъ8о8 8ъ8о- -ъ8п8 8ъ8п- -ъ8р8 8ъ8р- -ъ8с8 8ъ8с- -ъ8т8 8ъ8т- -ъ8у8 8ъ8у- -ъ8ф8 8ъ8ф- -ъ8х8 8ъ8х- -ъ8ц8 8ъ8ц- -ъ8ч8 8ъ8ч- -ъ8ш8 8ъ8ш- -ъ8щ8 8ъ8щ- -ъ8ъ8 8ъ8ъ- -ъ8ы8 8ъ8ы- -ъ8ь8 8ъ8ь- -ъ8э8 8ъ8э- -ъ8ю8 8ъ8ю- -ъ8я8 8ъ8я- -ы8а8 8ы8а- -ы8б8 8ы8б- -ы8в8 8ы8в- -ы8г8 8ы8г- -ы8д8 8ы8д- -ы8е8 8ы8е- -ы8ё8 8ы8ё- -ы8ж8 8ы8ж- -ы8з8 8ы8з- -ы8и8 8ы8и- -ы8й8 8ы8й- -ы8к8 8ы8к- -ы8л8 8ы8л- -ы8м8 8ы8м- -ы8н8 8ы8н- -ы8о8 8ы8о- -ы8п8 8ы8п- -ы8р8 8ы8р- -ы8с8 8ы8с- -ы8т8 8ы8т- -ы8у8 8ы8у- -ы8ф8 8ы8ф- -ы8х8 8ы8х- -ы8ц8 8ы8ц- -ы8ч8 8ы8ч- -ы8ш8 8ы8ш- -ы8щ8 8ы8щ- -ы8ъ8 8ы8ъ- -ы8ы8 8ы8ы- -ы8ь8 8ы8ь- -ы8э8 8ы8э- -ы8ю8 8ы8ю- -ы8я8 8ы8я- -ь8а8 8ь8а- -ь8б8 8ь8б- -ь8в8 8ь8в- -ь8г8 8ь8г- -ь8д8 8ь8д- -ь8е8 8ь8е- -ь8ё8 8ь8ё- -ь8ж8 8ь8ж- -ь8з8 8ь8з- -ь8и8 8ь8и- -ь8й8 8ь8й- -ь8к8 8ь8к- -ь8л8 8ь8л- -ь8м8 8ь8м- -ь8н8 8ь8н- -ь8о8 8ь8о- -ь8п8 8ь8п- -ь8р8 8ь8р- -ь8с8 8ь8с- -ь8т8 8ь8т- -ь8у8 8ь8у- -ь8ф8 8ь8ф- -ь8х8 8ь8х- -ь8ц8 8ь8ц- -ь8ч8 8ь8ч- -ь8ш8 8ь8ш- -ь8щ8 8ь8щ- -ь8ъ8 8ь8ъ- -ь8ы8 8ь8ы- -ь8ь8 8ь8ь- -ь8э8 8ь8э- -ь8ю8 8ь8ю- -ь8я8 8ь8я- -э8а8 8э8а- -э8б8 8э8б- -э8в8 8э8в- -э8г8 8э8г- -э8д8 8э8д- -э8е8 8э8е- -э8ё8 8э8ё- -э8ж8 8э8ж- -э8з8 8э8з- -э8и8 8э8и- -э8й8 8э8й- -э8к8 8э8к- -э8л8 8э8л- -э8м8 8э8м- -э8н8 8э8н- -э8о8 8э8о- -э8п8 8э8п- -э8р8 8э8р- -э8с8 8э8с- -э8т8 8э8т- -э8у8 8э8у- -э8ф8 8э8ф- -э8х8 8э8х- -э8ц8 8э8ц- -э8ч8 8э8ч- -э8ш8 8э8ш- -э8щ8 8э8щ- -э8ъ8 8э8ъ- -э8ы8 8э8ы- -э8ь8 8э8ь- -э8э8 8э8э- -э8ю8 8э8ю- -э8я8 8э8я- -ю8а8 8ю8а- -ю8б8 8ю8б- -ю8в8 8ю8в- -ю8г8 8ю8г- -ю8д8 8ю8д- -ю8е8 8ю8е- -ю8ё8 8ю8ё- -ю8ж8 8ю8ж- -ю8з8 8ю8з- -ю8и8 8ю8и- -ю8й8 8ю8й- -ю8к8 8ю8к- -ю8л8 8ю8л- -ю8м8 8ю8м- -ю8н8 8ю8н- -ю8о8 8ю8о- -ю8п8 8ю8п- -ю8р8 8ю8р- -ю8с8 8ю8с- -ю8т8 8ю8т- -ю8у8 8ю8у- -ю8ф8 8ю8ф- -ю8х8 8ю8х- -ю8ц8 8ю8ц- -ю8ч8 8ю8ч- -ю8ш8 8ю8ш- -ю8щ8 8ю8щ- -ю8ъ8 8ю8ъ- -ю8ы8 8ю8ы- -ю8ь8 8ю8ь- -ю8э8 8ю8э- -ю8ю8 8ю8ю- -ю8я8 8ю8я- -я8а8 8я8а- -я8б8 8я8б- -я8в8 8я8в- -я8г8 8я8г- -я8д8 8я8д- -я8е8 8я8е- -я8ё8 8я8ё- -я8ж8 8я8ж- -я8з8 8я8з- -я8и8 8я8и- -я8й8 8я8й- -я8к8 8я8к- -я8л8 8я8л- -я8м8 8я8м- -я8н8 8я8н- -я8о8 8я8о- -я8п8 8я8п- -я8р8 8я8р- -я8с8 8я8с- -я8т8 8я8т- -я8у8 8я8у- -я8ф8 8я8ф- -я8х8 8я8х- -я8ц8 8я8ц- -я8ч8 8я8ч- -я8ш8 8я8ш- -я8щ8 8я8щ- -я8ъ8 8я8ъ- -я8ы8 8я8ы- -я8ь8 8я8ь- -я8э8 8я8э- -я8ю8 8я8ю- -я8я8 8я8я-}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-de.pat0000644000175000017500000030332212161703335024640 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-de.rme % used: a b c d e f g h i j k l m n o p q r s t u v w x y z ß à á â ä ç è é ê ë í ñ ó ô ö ü \patterns{ .ab1a .abi4 .ab3l .abo2 .ab3ol .ab1or .ack2 .ag4n .ag4r .ag2u .ai2s .akt2a .al2e .al5l4en .al4tei .alt3s .ampe4 .amt2s .amt4sc .an3d2 .anden6k .and4ri .ang2 .an3gli .angs4 .angst3 .an3s .an4si. .ans2p .ans2t .an4tag .an3th .an3z2 .apo1 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .ar6t5erh .as3t .as4ta .at4h .au3d .au4f3 .au4s3 .ausch3 .ax4 .äm3 .är6schl .ät2s .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .by4t .ch2 .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .de1s .des2e .de3sk .des2t .dien4e .do2mo .do1pe .dorf1 .dü1b .dys1 .ebe2r1 .ehe1i .ei3e2 .ei4na .einen6g .ei2sp .ei4st .ei4tr .eke2 .el2bi .elb3s .em3m2 .en1 .en4d3er .en5der. .en2d3r .end3s .en2gl .enn2 .enns3 .en2t3 .en4tei .en4tr .er8brecht .erb3s .er2bu .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .er8stein .erster6 .er8stritt. .er8stritten. .er4zen4 .esel4s .es1p .es3ta .es5t4e .est2h .es3to .es5tr .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fi3est .fi4le. .fi4len .fi2s .flug1 .for2t .fs4 .fu2sc .ga4t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .gene7cke .ge3r2a .ge3r2e .ge3u .gs4 .guss1 .hau2t1 .he2 .her3an .he3ri .he6r5inn .hi2s .ho4met .ia4 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4tu .li4ve. .lo4g3in .lo3ver .lus4tr .ma3d .ma3la .mal4e .ma2st .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi4t1 .mm2 .näs1c .ne4s .ni4e .nob4 .no4th .nus2 .oa3 .ob1a .obe2 .oper4 .or2a .ort2 .orts3e .os5t6alg .oste2 .ost5end .os8ten8de .oste6re .ost3r .ozo4 .öd2 .pa4r1e .par3t4h .pe4c .pes4te .pf4 .ph2 .poka2 .pro1 .ps2 .rabe4 .ra3me .ram3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .res6tr .ri2as .rich5te .ro4a .ro3m2a .rö2s1 .rü1b .rü6cker6 .sali3e .sch4 .se3ck .sen3s .ser2u .se2t1 .sha2 .si4te .ski1e .spiege8lei .st6 .sto4re .sucher6 .tage4s .tan4k3l .ta2to .te2e .te2f .te3no .te2s .te4st .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .ti5ta .to4nin .to4pl .to2w .tri3es .tro2s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .un3g .uni4t .un3s .uns4t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .wei4ta .wi4e .wor2 .wort5en6 .wor8tend .wor4tu .xe3 .ya4l .za2s .zi2e .zin4st .zwe2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k aar5sc aas5t aata2 aa2th aa2t3r aat4s3 2a3au a1ä a1b 2aba ab4am ab1auf ab1ä ab2äu 1abd ab1eb abe1e abei1 ab1eil 2abel abe2la2 a3ber ab1er2k ab1er2r ab1er2z ab3esse 2abet 2abew 1abf 3abfi 1abg 1abh 2abi a3bil ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu 1abn a2bo. ab2of 1a2bon 2a3bor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abst2 2abst. ab3ste ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby aby4t 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in 2ack. a1ckar a2ckin ack2se ack3sl ack3sta4 a1cl acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ade1s ade3s2p ades4s ade5str 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3st ad3sz ad2t1 adta2 ad4te ad4tr 2adu 2a1e ae2b ae2c ae2d a2ek a2ela a2ele ae2o3 ae2p ae1r 3a2er2o1 ae2s ae4sc aes5t a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l afo1s a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r af4t5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ag3esse age4s3ti ag3gl 3aggr 3a2git 2a2gl ag6la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3s2ah ag4sam ag4set ags3p ag4spo ag3sta ag3ste ags4toc 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh ahe1s a1h2i ahin3 ahl3a2 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1os a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr6tri 2ahs ah2ta aht3h ah4t5r aht3s a1hu ah1w a1hy ai3a aian3 aid2s ai1e2 aien3 aif4 ai1fr ai3g4 a3ik. ai3ke ai3k4r a2il ai2lo aim2o ain4a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e ait4 a3iv. a3ivl a3ivs a1j aje2 ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr 4akra ak3rau 3akro 2aks ak3sh 2akta ak5tan 2aktb 2aktik ak2t3r ak5t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2ala. al1ab al3abs ala5ch2 al1af ala2g al1age a3lal al1am al3ame alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala4s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr alds2t 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 2ali ali4ene ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 alks4t al2l1a2b al2l3a4r al2l1au al3lend all5erfa al3les 1allgä alli5er. alli7ers. al2lob al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1ope al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al5s6terb al3sun al4tak al3tam al3tar alt3eig al4t3erf al3ti alt1op al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä 2am4e 4ame. a2meb ame2n1 amer2a am5erf a2meri ame3ru a4mesh a3met a2mew 2amf a3mi. a3mie 2a3mir a3mis ami3ta ami3ti 2amk 2aml 4amm. 2ammal am2mar am2mei am2min 2amml 2ammt ammu2 a2mö amp2fa2 am3pr 2am2s am3sa am4schl am3str 1amt. am2t1a am2t1ä am4tel 2amtem am4t3ern am4tö am2t3r am4tre am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2ana1s4 an4at an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande2s an2dex an4drau an2d3rü and4sas and6spas and3ste and2su 2andu and1ur 2ane an3e2c a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang4s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 2anpr 1anr 1an3s2ä 1ansc ans2en an2seu 2ansk an3skr an3s1pa 1anspr an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr an3ti 2anto 1antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2apa 2ape a2pef a3pel a2pé a2pf a3p2fa a3pfl a3phä a2ph3t 2ap3l ap2n a2pot ap2pf 3appl ap3pu 2apr 3apri 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3rali 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein a4rek 4arem a3ren 4aren. aren4se are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2ari ar2ia ari3e4n ari3erd ari3erg ar1im arin3it arin5s4 ar1int a3riu ar2kal ark3amt ar2k1ar ark3aue ar2kl ar4k3lag ar2kor ar4k3ri ark3sa ark3she ark4tre ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arp 2arr ar2r3ad arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar2st ar3sta ar3t2e ar2the ar3ti artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as1ala as3au a2s1ä a2sca a4schec a3schi asch1l a2schm a3schu 4as2e a2seb a2s3e2m a3s4es 4ash a3s2hi asin2g 4asis aska3s a3skop a2s1o2f as1or a2sö a2s1p as2ph as2pi as2po a3spu as3s2a as3s2e as4s3ei as3s2i as2s1p as2st ass3ti as3str as3stu 2as3ta a1s4tas as4tau as3te as2th as3ti as3to as4tof 2astr as4trau ast3räu as6t3re a2sü aswa2s 3a2syl a1ß aße2 aßen3 2a1t ata1 at1ab at2af at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c a2teb a3tec ateien4 at1eig a2teli at2en a2tep ater3s2 ate2ru at2h at3ha 4athe1 3athl 4a3ti atil4s ati2st 3atm 4atmus ato4man 4ator a2t1ort at1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si at2so at2s1p at3ta 3attac at4tak att3ang at4tau at2tä at2tei at3t4hä at2t3rä att3s a3tub atu2n a3tü atz1er at4zerk at4zerw at2z1in at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au2ere au5erein aue2s au2fa auf1an 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s6 4aun au3n4a aun2e au4nei au2nio au1nu a4unz au1o 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 3ausf 1ausg 1ausl au2so au2spr 1ausr 3aussag auss2e aus4se. auss2t 2auste aust2o aus5tri 1ausü 1ausz 2aut. au2t1äu 2aute au4ten4g au4t3erh 1auto 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4avi a2vr 2a1w awi3e a1x ax4am ax2e 2a1ya a1yeu ays4 aysi1 ay3t 2a1z a3z2a aza3d az2o az2u ä1a äand4 ä1b ä2b3l äb2s ä1che äche1e ä1chi äch3l ä2chr äch2sp äch4st ä1chu ä1ck ä3ck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf2s äft4s3 ä1g äge1i äge2ra äge3s ä2g3l äg2n ä2g3r äg4ra äg3str 1ä2gy äh1a 2ä3he ä3hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2ähs 2äh3t ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl 2äle äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 äne1s än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änk2s änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c äp4st 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l ärk2s är4ment ärm2s är1o2 ä1rö ärse2 är4si är2st ärt4e är2th ärt2s3 ä2rü är2zw ä5s4e äse3g2 äser4ei äse4ren äser2i äse3t äskop2 äskopf3 ä3s2kr ä2s1p äs6s1c äss2e äs4s3erk äs2s3t ä4s3t2 äs4tr ä3su ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ät2h ät1ob ä2t3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l ät2s1p ät2s3t ät2tei ät4tr ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äug3l 4äul 2äum äu2ma äum4s5 ä2un äun2e äu1nu 2äur 2ä3us. äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äus2s1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs4 b1a2dr 2b1af 3bah bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4l3eh bal6lerg 2b3am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en bar3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2st ba4t3ent bauer4l bauer4s bau3g bau1s bau3s2k bau3sp baus4t ba1yo 3b2ä1c b2är b2äs 4b1b b3be bben3 bbens2 bbe4p bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 bde1s 1be. 3bea be3an be3ar 3beb b2ebe 1be1c be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime b2ein be1ind be1in2h bei3sc beis2e bei1s4t beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la be2l3ö bel3sz bel3t4 1bem 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 2bentb b2enti ben5t4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss ber3na b1ernt be1rop ber3st4a be3rum ber2zö 3be1s bes2a be2s1er be3slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol best4r be3s4ze 3bet be2tap be3tha be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 2b1g2 bge3 bges4 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bien3s bie2s bik2a bi2ke. bi2kes bil2a bi2lau 2b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis2s1c bi2s5t b2it. b2it2a b2ite bi3ti bi2tu b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7sc 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig bling4 b4lis b2lit 3blitz b2lo b4loc b3los 2blun 3blut 3blü 2b1m 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo2c bo3ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig bor2s b1ort bor2t3r bo2sc bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra1st4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü 4b1s b2s1ad b3sand bs3ar bsat2 b3sä b4sär bs2äu b5sc bs2ca bsch2 b6schan b6schef bs4cu b3se. bse2b b3sel. bse2n1 b4s1erf bs3e4r3in bs1erk b4s1ers b3s2es bsi4t bs2ku b4sl b2s1of bso2r b2sö b3s2pi bs2pl b3s2pu bss2 bs2t bst1a2b bst3ac bst1ak bs3tät bst1er b2stip b3sto b4s4tob b4stod b3stö b4strac b2s3trä bs3treu bs4tri bst3ro b3stü b4stüb b2s1un 4b3t btast3r b5te b4th btil4 bt4r b4ts2 btü1 bu2chi bu2e3 bu2f bul2la 2b3umk bunde4s bung4 b3ungn b2urg bu3r4i 2burn bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu2s1u bü1c bügel3e 2b1v 2b1w by1 by3p bys2 2b1z2 bzeit1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t 3cam c4an ca2pe 3car car3n carri1 ca3s2a3 cas3t ca3t4h ca1y2 cä3 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen 1cer cere3 ce3s2h 1cet 2ceta2 ce1u 1cé 2c1f c4h 4ch. 2chab ch3a2bi cha2ck 2chaf 2ch1ak ch2anb 3chanc ch1ang ch3anst 4chanz 1chao 4char. 1chara 3charta cha2sc 3chato 4chatu ch1ärm ch1äs 1châ 2chb 2chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefi 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia 2chic chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 4chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 4chre chre3s ch3rh 1chron 4chs chst3ri 2cht 2chuf 2chuh 2chum 2ch1unf 2chunt 4chü 2chv 4chw 1chy 2chz ci1c ci1es ci2s c1j c4k 4ck. ck1a 1cka. 2ckac 2ckal 2ck3an cka4r1 2ckau ck1ä 2ckb 2ckc 2ckd 1cke 4ckeff 2ckeh ck1ehe 4ck1ei 4ckense 4ckentw cke2ra ck2ere 6ckergeb ck1erh 4ckerhö 4ckerke ck2ern 2ckero 2ck1err 2ckerz 2ck1ese 2ckex 2ckf 2ckg 2ckh 1cki 2ck1id ck1im ck1in 3ckis 2ckk 2ck3l 2ckm 2ck3n ck1o2 2ckp 2ck3r 4cks ck4stro 2ckt ckt2e ck3t2i 1cku 2ck1um3 2ckunt 2ck1up 2ckv 2ckw 1cky 2ckz c4l2 cle4a clet4 clo1 1clu c2m2 3co co2c co3ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cos3t co4te cô4 2cp 2c1q 1c4r2 cre2 cre4mes cry2 2cs cs2a c2si c1s4tr 4c1t cte3e c3ti2 cti4o ctur6 3cu cu2p3 cussi4 1cy 2c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho dach1s 4d3achse d1af d1ag dagi2 dah3l da1ho 3dai da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d4amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ar3s d1art 2dart. da2ru d2arw d1arz da1s dasch2 da3s2h das4t 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus3 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c 2dc d1ch dco4r 2d1d2 ddar2 d3dä d3dh d5do 1de de2ad de3a2t de3b4 2d1e4ben 3de1c de4ca. de2cka de3e4 2d1eff deg2 de3gl dehe2 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2delek 2delem 2delfm delle2 del4l3eb del4lei de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del5ster del3t4 dem2ar 2d1emp d2en. dend2 de4n3end 4denerg d2enh de2ni den4k3li den2kn 4den4sem den4sen den6s5tau den3th 2dentw de1nu 2deol de1on depi2 d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t d4erfi d2erh 4der4höh 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop 4der4sat der4spa der3tau der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum des1 d2es. de2sa desa4g de4sam des2äc de2seb de4seh de2sei des3elt de2sen1 de4set de2sin de2sor de2sp des3s2 dest5alt de2sto dest5rat de4stre des4tum de2su det2 deten4t 2d1etw de1un de1url de3us d1exi de2xis 2dexp 2d1f4 2d1g2 dga2 d2ge. dge4t1e 2d1h2 dha1s4 d2his 1di di4ab di2ad di4am 3dic di1ce di2e di3e2d die4neb di3eni di3ens. die2s3c diet3 die2th dige4s dik2a dil2s5 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion3s di1p di4re. di2ren di2ris 2d1irl di2sp di3s4per 2d1isr dist2 di2ste di2ta di4teng di4t3erl di4t3erm di4t3ers di2th di4t3r dit3s di2tu di5v di3z2 2d1j 2d1k4 4d1l2 d3la d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 d1ob d2oba 2dobe dob4l d2obr 2d1o2f dole4 doll2a do2mar do5na donau1 doni1e do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta dor4ter d2os. dos3s dost1 dot6h do3un d1ö dö2d dö2l1 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad drag4 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4ril d4rin. 3d4risc 3d4rit 4dritu d3rob d3roc 2d3rod d4roi 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh drunge3 2d5rut drü1b drü5cke 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse4t d4s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pas d2spä ds2po d3spri d2spro ds2pu dss4 dst4 d4stabe d4stag ds3tauf d4s3täti d2ste d4stea d3stei d3stell d4stem d3s4tern ds2ti ds4til ds4tip ds2tu ds1ums d2sun ds2zen 2d1t dta2d d5tea d2th d4thei dt3ho dto2 d3tö dt3r dtran2 dt5s2 d3tü 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf dung4 2d1ungl dun3ke dun2kl 2dunr dun2s dunst3r 2dunt 2dunw du1o dur2 5durc 2d1url 2dursa du4schn du4schr du4schw dus3t 2düb 2d1v2 2d1w dwa2 dwest1 dy2s 2d3z2 2e1a e3a2b eab3l ea2c ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei e4aler. e2alti2 eam3 eam1o ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas3s eat4e2 eater1 e3ath ea5tr eat3s2 e3at5t4 e3au2f e3aug eau1st e3ä2 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en ebens3e eben4sp ebe4rel ebert4 2ebet 2ebl eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebot2 ebö2s 2ebr eb3rei eb4ru eb2s1 eb6sche ebse2 ebs3pa eb3sta eb4stät ebs3tem ebs3t2h eb3str 2e3bu ebu2t1 2e3ca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a e1cka eck3se eck4sta 2eckt 2e1cl 2eco eco3d e3cr ec1s 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e edens1 eden4se eden4sp ede2r eder3t2 edi4al 2edip e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho ee2ck eede3 eed3s2 ee1e e1eff eef4l eef3s eeg2 e1ei ee1im eein4se eel2e ee2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere2s ee4ret ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ee3s2 ees3k ee3ta ee4tat ee2th ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e3fen. e2fent ef2er 2eff. 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g egas3 eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4str ege1u e2glo e2glu e2gn eg3ni eg4sal eg4se4r1 eg4sto eg2th egung4 egus3 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä e1he eh4ec eh1eff eh2el ehe5na ehen6t3 1e2hep e3her ehe1ra ehe3str e1hi eh1int eh1lam eh1lä eh3le ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se ehls2t 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1e2c eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of ehs2 eh3sh eh3sp eh1ste 2eht e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3err 2eidn ei3dra ei1e ei3el 4ei3en3 eienge4 eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 eil3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom einn2 1einna ei2n1o2 e4insa 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei4s3erw eis2pe eis4tel eis4th ei1sto ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek5tri ek2u e3k2w e1la ela4ben el3abi el2abt ela2c el3ader el1af ela2h e2l1ak el3al e2l3a2m el4ami el4amp e6landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a2r el3ari ela4s el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 elea2 ele2c 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh 1elek e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e4ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r 2eli e2l1id e3lie e2lim eli2ne el1ita 2elk elk3s2c el3lan el3le el5le. ell3ein ell3eis el2lim el3lin ell3sp 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri elö2s el2sum 3eltern elto2 elt3r elt3s2k elts2p 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2m1ans 3emanz e3mäs em4d3a2 e3m2en emen4t3h e6mentsp e2m1erw eme2s 1e2meti e2m1im emi5n2a em1int emi3ti 2emm emma3u em2m1ei e2mop 3empf4 em3pfl em2sa em2spr em2st em3t2 3emul 2emü e2n1a 4ena. 2ena2c en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en4ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när en4ce. en3d2ac en2dal en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1e2c e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e4n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r enost3 e3not eno2w 2e1nö en1ö2d en3sac en2sau en5sche en2seb ens2el 3ensem ensen1 en2sep en4seta en3ska en3sp ens2po enst5alt en4s3tät ens2th 2ensto e4nt ent4ag ent4ark 1entd en2teb en4terb 1entf 2entfo 1entga en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü enü1st 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eo1s2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a4si er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1äs erb2e er3br erb4sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in erd3erw 4ere. er1eb e3rech er3echs er1e2ck er1edi ere4dit er1eff e2r1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3r2em 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh e4rerl 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess ere4t er3eti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3el4s3 1ergol 4ergrem erg3s ergs4t e2rh 1erhab 4erhals er3he 4erhöhe er3hu 4erhü 2eri e2riat e3rib 4e3ric er1i2de 4e3rie eri3e4n3 e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row e1roz erö2d 2erök er1ös er3p4 er3rä 2errü ers2a ersch2 er3se ers2i er3sk er3smo er3sn er3sp er5stel er3sz ert2ak er6terei er4t3erf er4terh er4ters er2tho 4er3ti ert3ins erts2e 2ertür 2eru eruf4s er1u2m er1und erung4 er1uns er3uz erü4b 3erweck es3ab e3sac e2s1a2d es3ak es3anz e3s2as e4s3ato 2esb es2c es3cap e3sce esch2 e3scha e2s3ein es2el es3eva 2esf 4esh es2har es2id esi1er e2sil es3int es2ir es2kat e4ske es3kl es3ku e4sky es3l es4log 2esm es2ort e3sot es2ö 2esp e3s2pek e3spi e3s2por e3s4pra 2esr es2sau es3sc es3se 4essem ess4e3re ess3erg 2esso es2sof es2s1pa es2spu es3str es3stu estab4b es4t1ak e1star e4starb 1e2stas e1stat e1s2tec e3stel es4t3eng es4t3erh es4t3ess e1stil e2stip estmo6de est3ori e1str es4tri es3trop e1stu e1s4tü e2s1um es3ums es3w e3sy es3z e1ß eße3r2e e1t etab4 et1am 3etap et4at et1äh e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of etons4 e2torg e3tö 2etr e4traum e6t3rec e2tres et4rig etsch3w ets2p et3su ett1a et2tab et2tad et2t3au et2tei ette4n1 et2th et2t3r et4tro ett3sz et4t1um e3tü etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif eu2esc 2euf eu2ga eu4gent eu3g2er eugs4 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eum4sc eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu3p2 e2u3r2e 1euro eu3sp eust4 eu1sta eu1sto eu1str 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo e1w 2ewa e3wä ewä2s 2ewe e2we. ewinde3 e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey1 ey4n eys4 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p ê4t 1fa fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl fal6l5er6k fal6scha fal6schl fal6schm fal3te f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br farb3s 2f3arc 3fari farr3s f3art 2f3arz fa3s4a fa3sh f3at fa2to 2f1auf f3aug f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 fe2c f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1eis fek2ta fe2l1a fel4da fel2dr 2fe2lek fe2l1er fe2les fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fenst2 f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. f2ert f1erw fe2st fest1a fest3ei 2f1eta fe4tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ff3ar ff4art ff1au ff2e ffe2e f2f3ef ff3ei ffe1in ffe2m f2f3emi ff4en f2fex fff4 ff3li f3flu f3flü f3f4rä ff2s ffs3t 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fid2 fien3 fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni fin2s fin3sp 2f1int fi2o fi3ol fi2r fi3ra 3fis fis2a fisch3o fisch3w fis2p fi2st fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger f4lü f5lüm 2f1m2 fma2d 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin 3form for4m3a4g forni7er. for4st for4t3ei for2th for2t3r for3tu 2f1o2x 1fö 2fö2f 2f1ök 2f1öl för2s 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad f1rah fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein4 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc f3roc 1f4ron fro2na fro2s f3rot f3ru f3rü 4f1s fs1all fs4amm f2san fs3ar f2s1as f2sauf f2saus f2saut f3sc f4sce f4schan f4schef fs4co fs1e2b f4s1ehr f2s1em f2s1ent f2s1er fse4t f4s1eta f3si f2si2d f3s2kie f2s1o2 f3span f2s1pas fs1pen f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 fs2t f2stas f4s3täti f3stei f3s4tel f3stern fs3th f2stip f3st4r f4s3tres f3stü f4s3tüte f2s1un f3sy 4f1t f4ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f4t1ent f4t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f3tö f2t3ro f2trö f3t4ru ft2s1 ftsa4g ft4sam ft3s2c ft4sche ftse4 ft4seh fts3el ft3st ft4s3tan ft4s3tä fts2ti ft4stri f2tum ft1url f3tü ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf fung4 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2sa fus2s1p fus2st fu2ß1er 3fut 1fü 2füb fü2r 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1c 2gadl 2ga2dr ga1fl ga3ge 5gai ga1k ga2ka gal2a 2g1a2lau g1amb g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2sa gas3ei ga2si ga2sor ga3sp ga4spe ga4spr gas3s gas4ta gas5tan ga4ste gas4t3el gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs5 gä4u 2g1b2 gber2 gbi2 gby4t 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is 2g1eise2 gei3sh 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2ge4lek geler3ö ge4l3ers ge4less gell2a ge3lor gel3sa gels2p gels2t gel3ste gel3sz gel3t2a ge3lum ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe gen3n gen4sam gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer g2e1s2 ges3auf ges3elt ge2s3er ge3si ges4pi ges3s2t gest2 ge3ste ge4s3ter ges3th ge3t2a 2getap ge5tr ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga4t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gie3g gi2e1i gi2el gien2e1 gie1st gift5s gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi3tu gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland 3g2laub 4g1lauf 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu 2g3luf 2glun 4glus g2lu2t g1lüg g2ly 2g1m2 g1n 2gn. g2n2a g4na. 2gnac 4gnah g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no gno1r g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s1 go3st go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs1c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 2g3rose gros6sel gro4u 2gröh g4ruf 2g3rui 2g3rum 3g4rup 2grut 2g3rüc 3g4rün 4g2s1 gsa2d g4s3a2k g3sal gs3all g4salt gs3ama gs3an gs3ar g3s2c g4sca g4s3ce gsch4 g4schef g4sco g4s3cr gse2 gse3e gs2eh g3s2eil g3sel. gs3eli g3seln gsen1 gs3er gs5erk gse4t g4seta gsi2d g3sil g4s3l gso2 gsp4 g3s2pek g3spi gs4pie g4spin gs3pl g3s2por g4spru gsrat4 gsrü2 gs5s4 gs3ta g3s4tan g3s4tar g3s4tati g4s3tä g5stäm g3stel gst3ent gst3err g1steu gst2he g3stir g3sto gs3toc g4stol gs3top g4s3tor g3stö gs3tr gst4ra g3s4tras gs4trat gst5reit gst4ri gs4t5rit gs4t3ros g3stu g4stur gs3tü g4sw g3sy 2g1t g3te g3ti gti2m gt4r gt2s g3tü 1gu gu1an. gu1ant gu1as gu1c gu4d3r gu2e 2gued guet4 2g1u2f 2g1uh gu1ins gu1is 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2un4s 2gunt2 2g1url gurt3s gu2s3a guschi5 gus4ser gus2sp gus2st gu4st gu2t gut1a gu4ted gu4t3erh gut3h 2güb gür1 güs3 2g1v 2g1w 2g3z2 3haa hab2a hab2e ha2cho ha2del ha4din h1adle haf3f4l haft4s3p h1ah 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal2la hal6lerf h1alp hal2st hal4t5r h1amt h2an. 2hanb h2and han2da hand3s han2kr h4ann 2hanr 2hant h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 hat5t2 hau5f6lie 2h1aufm h1aukt hau2sa hau2sc hau4spa hau5stei hau6terk 2hauto hau2tr h1äff h1ärz hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad he3be he4b1ei he2bl he3br he5ch2e he1cho h3echt he3cke hed2g he3di he2e3l hee4s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1ist heit4s3 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hel4l3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä hend2s he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk henst2 hen3str hen5tr h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b 2herap he3ras he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm he3ro he4r3o4b h1erö hert2 her3th her2z1w he1sta he2s5tr he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x4a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 2hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hiers2 hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin3s2 hin4t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro his2a hi2se hi2st hi1th hi3ti 2hiu 2h1j 2h1k4 2hl hl2ag hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös hl2ser hl3sku hl3slo hlst4 hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s hm3sa hms1p h2mu 2hn h2na hna2c h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stras h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hnsuch4 hn3ti hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2ch3 ho2cka ho6ckerl hock3t 2hod hoe2 ho2ef ho2fa hof3fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hol3s h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo ho1ra hor3d 2h1org ho4sei ho3sl ho2sp ho4st 2hot. ho3th hotli4 2hots2 3hov 2ho2w1 h1o2x ho1y2 1h2ö hö2c hö3ck h4ör hö2s1 h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3r2en h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h5rerlag h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3schl hr2s1en hr2ser hr4set hr4s1in hrs3k hr4s1of hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se h3ruh hr1ums h3rü h4rüb h2ry hrz2 4hs h4s3acht h2s1a2d h4samt h2san h2sau h2s1äh h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2spel h2sper h2sph hs2por h2sprä h2spro hss2 h1sta h2staf hst3alt hst2an h2s3tau h1stec h3stein h5stell h3s4terb hst2he h1s2ti h1sto h2stor h1s4tr hst3ran h1stun h1stü h2s1u hs2ung 4h1t ht1a h2tak h3t4akt. ht2al h4talo ht3alt h4t3a2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h4tax h2t1är ht1e2c h2t1ef ht1eh hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit h2temp h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1erh ht5erken h4terkl h6t5erleu h6terneu h4t3erre h6t5er6spa h4t3er4st ht6erste h2t1erz hte2s h4t1ese h4t1ess hte3sta h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in hto2 h2toly h2torg h3töp h4t3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h5trec h4tref ht3reif ht3reit ht4ri h4t5rieg h4t5rin h2t3rol h2t3ros ht3rös h2t3ru h2t3rü h4ts hts3an ht4s3end ht2so ht2sp ht4spin ht3spri ht4stab hts2ti hts4tie ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs h3tü ht3z2 hu2b1a hu2b3ei hu2b1en hu2b3l hu4b3r hu2bu hu1c hu2h1a hu2h1i huko1 huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu2ler hu2let hu2l1in hu2lo hu3m2a h1ums hu2n h1una hung4s hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus2sp hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 hüs3 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3all ial3la ia2lor ial3t4 ia2lu ial3z2 i2am i4amo 2ian ia2nal i3and2 ian2e i3ann i2ano i3ant i3anz i2ap ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a3sp ias3s iast4 i3at. i3a4ta i4ate i3at4h 1iatr i3ats i3au ia3un 2iav 2iä i1äm i1äp iär2 i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib2bli ib1ei i2beig i2beis ibela2 ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibu2s1 2ic ic1c ice1 ich1a ich1ä i1che ich1ei i1chi i2chin ich3l i3chlo ich3m i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci i3cke ick3sa i1cl i1d id2ab4 i3d2ac i3dam id2an i2d1au 1i2dee idein3 i4deis idel2ä ide3sa ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p id3str idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2ck ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g5l ie3g4n ie2g3r ie3g4ra ieg4s3c ieg4st i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i1ell ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä i3en3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm i3enn i3e2no i3enö i3enp i3enr ien2s ien3sc ien3s2e ien3si iens2k iens6t5er iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k2 i1ern i3ern. i2er5ni ie2rö ier4seh iers2t ier3sta ier3ste ier3te iesen3s4 ie2spu ies2sp ies2s3t ie1sta iest6e ie3su ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie4t1ö4 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fl iff4st if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if2s if3sa if3se if3sp if2ta ift3erk if2top if4t3ri ift3sp ifts2t ift3sz 2i1g iga3i i2g1ang ig1art iga1s4 i4gefar ige4na ige2ra ige3ran ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu i3g4no i3go ig4ra ig3rei ig3s2a ig4sal igsau4g ig3sä ig4se ig3so ig3spr ig3stei ig4sto ig4stö ig3str igs4tra ig4stre ig3s4tü igung4 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ihs2 i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2k1är 4ike i2k1ei ike2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 iko1s i2köl i2k3ra ik3rä ik3re iks2 ik3so ik3sz ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 6ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1e2c il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s3 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or il3t2h il3tr i1lu2 i2lum ilung4 i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2meg i2mej i2mek i2mele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im2mei im4m3ent 1immo 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2st im3sta 2imt imt3s2 imtu2 2imu in3a2c i4nack i2n1ad in2af in3am i3nap in2ars ina4s i2n3au in1äh in1äs in2dal in2dan in3dau 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng in3erbe i4nerbi in2erh iner4lö i4n3er4tr i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ing4sam ings3pr 1inhab 2inhar 2inhau 4inhe in2i3d i3nie 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn in3k2ü inma4le 2inn. in4n3erm 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or ino1s4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 in2seb 2insen ins3ert in3skan in3skr in4s3tät in3stel ins4tip in3su 1insuf in4s3um in3s2z 2inta 1integ int2h in3t4r in5tri int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o io1c io2d i2oda io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3ons3 ion4spi ion4stä i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en ipi2s i3p4l ipo6i5den ip2pf ip2pl ip3pu i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek 2i3ré ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron iro2s i1rö irpla4 irr2h ir4schl ir4schm ir4sch3w ir3sh ir2st irt2s3t 2iru iru2s1 i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i4schin i5sching i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat is2has isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is4s3che is4sper is2st is3sta is3sto iss3tr is3stu is2sum is3t is4tab ist3ac is5taf is4tam ist2an i1s4tat iste4n istes3 i1s4teu i1s4til is4toc is4tö is5tör ist4ra ist3re i1s4tü isum3p i2sü i1ß iß1ers it1ab. ital1a it1alt it1am it1an it2an. it3a4re it1art i3tat it1au i3tauc i4t1ax 4itä i2t1äs ität2 i2t1ei i4teig it2eil i4tein 2itel ite2la ite4n iten3s2 i4tepo i2tex i5thr i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn ition4 i6tl itmen2 i5toc i2t1of i3tö it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa its1a4g it2s1e4 its3er1 it2so it2s1pe it2sto it2teb it4tri itt2sp it1uh i2t1um i2tuns it1urg itut4 i3tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em i3xi ixt2 4i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l ja1c jah4rei jahr4s ja3l2a ja3ne jani1 jani3t4 ja1st 2jat je2a jean2s je1c je2g jek4ter jektor4 jek2tr je3na je2p je4s3t je2t1a je2t3h je2t3r jet3s2 jet3t je2t1u2 je3w ji2a jit3 ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung3s4 ju3ni jur2o jus3 jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kalo5 kal2tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg ka3ri kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw 3kas ka3se kasi1 kas3s ka2s3t ka3tan ka3t4h ka4t3r 2katt kau2f1o 4kaufr kauf4sp kaufs5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 2k1ärm kä2s1c käse3 2k3b2 kbo4n kbu2s kby4 2k3c 2k3d2 kdamp2 2k1e1c k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehr4s3o 2k1eic 2k1eig k1ein ke1in2d 2keinh kei1s 2k1eise keit2 ke2l1a ke3l2ag ke2lä kel3b4 2ke2lek ke2len ke2l1er 2ke3let kell4e kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kend4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5stei ken3sz k3enten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad ke1ral k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke4t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1c 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o3 kin3s 2k1inse 2k1int ki3or kio4s 3kir kis2p kis3s kist2 kis4to kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor 2klos. klost6 k2löt k1lu k2lud kluf2 k2lug klung4 k1lüc 2kly 2k1m k2n2 3knab k3ne k4nec k4nei 2knes kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol4a ko3le kol2k5 3kom ko4mu k2on ko3n2e kon3s4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n3a k2os ko2sp ko3ta kots2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k4ral k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron 2kruf krü1b 2k1s k4s1amt k2san ks4ana ks3ar k2sau k4s1äl ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw ks3ha k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu ks3s2 kst4 k2stal k4s3tanz k3stat4 ks2ti k2stor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktä3s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins ktion4 kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras k4tref kt4ro ktro1s kt3run kt3s2 kts4t ktt2 k2tuns k3tü kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 4kulp 2k3uml kum2s1 k2u3n2a kung4 kun4s4 kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e kuri4er ku2ro kur2sp kur2st ku4schl ku2sp kus3t ku2su 1kü kü1c kür4s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb 4l3aben 2labf 2labg 2labh 4l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3la3bu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a2dr 3ladu l1adv 2laf la2fa laf1r laf3s laf3t la2ga la2gio la2gn lago2 la2g1ob lag3s2e 2la1ho 1lai la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 5l2and lan2da2 land3ad lan4d3au lan6d5erw lan6d5erz lan2dr 2lanf lan2gl lang3s4 2lanhä l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po2 lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi lar3s 2l1ar3t l3arti la2ru la2sau 4lasd la3se 2lash 2lasi la2so 2lasp 3lasser last1o lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2t1a lat4tan lat4t3in lat2t3r 1laub. laub4se lau2fo 1laug l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lay1 lä1c 1läd 2läf 2l1ähn 2lämt 1länd lär2m1a l1ärz lä2s1c 4lät 2läub 2läuc 2läue 1läuf 1là 2l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb3si lb4sk lb3sp lbs6t lbst1e lb4sto lb2u l2b3uf lbzei2 2l1c l3che l5chen l3chi lch3l lch3n lch3r lch3ü lch1w l3cl 4l1d ld3a2b1 l3d2ac ld3a2ck l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a2r ld3ari l3das ld1au ld1är l3de. l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa ld3st ldt4 ld3th l2d1um 1le 3le. le2a le3an le3ar leben4s3 le2bl 2lec le2chi lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig l2ein. l2eind lein4du l2eine lei6nerb 4leink l2eint l2einu lei6schw leis6s5er l4eist lei4ßer l2eit lei2ta lei8t7er8sc lei5tri leit3s2 lekt2a 2lektr 3l2ela 2le2lek lel3s 3lemes le2m1o2 4lemp lem3s l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 4l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lepositi8 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k lers2t ler3t l4erwa 2lerwo 2l1erz l2erza les2am les2e 2l1esel le3ser le3sh lesi1 le3sk les2t leste3 le1sto 4lesw 2lesy le2tat 2le3th 2leto let4tu le2u 4leud 2leuro 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfang3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lg3re l3gro 2l1h2 l3he 3lhi. 1li 3lia li3ac li3ak li3ar lia1s li3b4 libi3 li1c li3chi 4lick li2cka lid2 li3da 2l1ido li4ds lid3sc l2ie 3lie. liebe4s li3ene lien3s lie2s3c lie2st 3lig lig4n li2gre li3ke li2kr lik2sp lik4ter li3l lil2a li3m2a 3limo 2limp li3n2a lin3al 2l1indu li2nef li2neh li2nep li2nes 2l1inf lings5 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2linst 2l1int l1inv 2linz li2o li4om li3os. li2p3a 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i4so li2sp liss2 lit2a li2tal li3te lit2h lit1s2 lit3sz li3tu 3liu liv2e 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lks3t lk4stä lk2ü 4l1l ll1abb lla4ben l2labt ll1akt l3l2al l2l1am ll3a2ma lla2n ll2anw ll1anz l3l2ap ll1arm ll3aug ll1aus l4lausf ll1äm llb4 llch4 ll3d4 ll1ech l2l1ef ll1eim ll2em l3len. lle4n3a llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll2es l2lex llf4 llg4 ll1imb ll1imp l2l1ind ll1ins llk4 ll3l2 ll5m lln2 ll1ob l2lobe l2l1of ll1opf l2l1o2r l3lor. l3lore l2l1ou l3low ll3sä ll3sh ll3s2k ll2spr ll5t4 llti2m llt5s2 llu2f ll1ur llus5t6 ll3z2 2l1m l3ma. l2m3a2b l2marc lm1art lm1äst lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins l2möl lm3p lmpf4 lms2t lm3ste lm3s2z lm3t 4ln lna4r ln3are lnd2 l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min lo2n1o lo2o 2lopf 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3lorq 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4ste los3t4r lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l3 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lp3t4 l3pu 2l1q 2l3r2 lrat4s lre1s lrut4 lrü1b 4l1s l3sac l2s1a2d l3s2al l4s1amb l4samt l2sang l2sann l2sanz l3sare l2sau ls2äm l4schin l4schmü l2s1e2b l2s1ec l2s1em ls1ere ls1erg l2serh ls1erl l2s1ers l2s1erw l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3s2 lst2a lstab6 ls4taf l4s3täti l2ste l3stec l3stei l3stel l4stem ls6terne ls6terns ls2tie l2stit ls4tr ls2tu ls1um l2sun lsu3s 4l1t l2tab ltag4 lt1ak lt1am l4t3ame lt3and lt1ang l4tarm lt1art l2t3ato l2t1au lt1eh lt1ein l2t1eis l4te4lem lt3eli lt2en l5ten. lten6gel lter3a lt2erg lt2erö l4t1e4sk lte2th l2t1eu l2th l3thas l4thei lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tör lt1ös l4t1öt ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l6ts lt2so lt4stab ltt2 lt1uh l2t1um ltu4ran ltu2ri l3tü lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lu4g3l lu2go lu2g3r lug3sa lug3sp lu2gu 2l1uh lu1id. lume2 2lumf 2lumk 2luml l2ump 2l1ums l1umw 1lu2n 2l1una 2l1unf lung4sc 2l1uni 2lunt 2lunw 4luo 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c luss3er lus6serf lus6serk lus6sers lus2s1o lus2s1p lus2s3t lus4stä 1lu4st lus4t1a lust3re lu2s1u lu2t1a lu2tä lut2ed lu4teg lu4t3erg lut1o2f lu2top lu4t3r lut5schl 3lux 2lüb 5lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1äp l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lz1w lz2wec 1ma m1ab m2abe 2mabk m2ab4r 2mabs 2mabt ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3le mal2er mali1e mal3lo 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann 2mansa 2mansä 2mansc 2mantw 2manz ma2or 2m1apf m2app 2marb mar3g2 ma3r2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m1arz 3mas ma3s2pa 4m1aspe massen3 mas4tel ma1s4tr 3maß ma2ta2b ma2tan mat4c ma2tel ma4t3erd ma5tri mat3se mat3sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 2m1änd m1ärg 3mäß mä3t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby4 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega1 3meh 2m1eif 2m1eig mei3l2 mein4da me1i4so 3meist me3lam me2lau 3meld me2lek me2ler melet4 2melf. mell2 mel2se mel5t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta men6tanz 2mentn 4m3entwi me1o 2meou 2meö 3m2er. me1ra me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes mes1a me2sal me4sä 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p mes2st meste2 me1sto 4mesu me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1c mi3da mie3dr mi2e1i mie3l mien3s mi2er mierer4 mi4et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che mild4s 4milz 2m1imp minde4s min2en min2eu min2ga ming3s4 mi3ni 3min2o mi1nu 3minz 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis2s1c mi2ste 3mit mi2ta mi2th mi2t1r mit3s2 mit5sa mi5tsu mi2t1u 4mitz 2m1j 4m1k4 m3ka mk5re. 4m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2m1ans mm1anz mm1art m2m1au mmd2 mm1ein mme4lin mme4na m4mentw mme2ra mme4rec mme2sa mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc mmi1s4t mm3p2 mmpf4 mm2s mm3si mm3sp mm3sta mm3str mm3te m2mum mm2un mmül2 mmüll1 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 3mom mom2e 3m2on mo3ne mo4n1er mon2s3 mon3su 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer morgen5s6 3mos mo3s4ta moster4 3mot mo3ti m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi m4p3lem. m2p3len m2p3les m3pon mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and m4sap ms1as m2sau m3sä m3sc msch2 m4sco m3se m4s1ef ms1erw m4sex ms1ini mso2r ms1ori m2spä m2sped ms2po m2spot m2spro ms2pu ms3s2 m4stag m3stel m3s2ti m3sto ms4tr ms5trä ms5tren m3s2tu ms4tü m2sü m3sy 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m4t1erg m2t1erl m2t1ers m2t1ert m4t1eta m2t1eu m2th mt3ho m3ti m4t1im m4t1ins m4tint mti2s mtmen2 m3tö m4töl mt1ös m2trö m4ts1 mt2sa mt2se mt3s2ka mt2spr mt4s3tät mtt2 mt1um mt1urt m3tü mt3z 1mu mu1a mu3cke 2m3uh 3mul mu3la 4muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f m4us 3mus. mu4s1a 3musc 3musi mu2s1o mu2sp mus3t mu2su mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül4len 3mün 3müt mütter3 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4 mwelt3 mwu1 1my my4s 2m1z 1na 3na. 2n1ab na2bä 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2ac na2ch1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3l2a nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly n4am. 3name na3me. n4amen namen4s3 4n3a2mer na3m4n 3namo 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3nat n4ata na3t4h 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 2n1ä2m 2n1än när4s5 n1ärz 3näs nä2sc n2äss 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbes4 nbu2s nby4 2n1c n3ce2n3 nch3m n2ck 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6läs nde4rob nder5ste nde2se ndi2a3 n2dob ndo2be ndo1c nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2drui n4d3run nd2sor nd2spr nd3th nd3ti ndt4r n2duns ndy3 1ne 3ne. ne2ap ne3at ne2bl 2n1ebn 2nec 3neca 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n4en. n2en3a4 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n1erk n2erli 2n1erlö ner4mit n2ern. 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz 3n2es n4es. ne3san nes4c ne3ska nes1o ne2s1p 4n3essi ne1sta nes3ti ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt4 n3far n3fi nfi4le. nf4l nf5lin nf2o nfo1s nf4r nf3s nf2tan nft2o nf2t3r nft4st n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g3a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a n3ger nge4ram n4g3erse nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngsa4g ngs3au ngs3c ng4s3e4h ngs3pa ng3ts n2gum 2n1h4 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nich1s nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n3 ni3ene ni1ero nifes3 nig2a 2n3i2gel nig3r ni2gre nig4sp 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis3s4 ni2s1u 2nit ni2ti nit4r nitts1 nitt4sa ni3tu ni3v 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3aus n2käh nke2c nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2s1al nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nn2erh nn2erk nne2rö n4n3er4wa nner2z nne2s nnes1e nne4st nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3sc nn3se nn3s2p nnst4 nn2th n2n1uf n2n1unf nn1ur nnvoll4 1no 3no. no2bla n2o3ble 3noblo 2n1ob2s no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3sh no2s3p n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l n2öt 2n3p4 npa2g npf4 npro1 npsy3 2n1q 4n3r2 nräu3s nre3sz nrö2s1 6n1s n2s1a2d n2s1all n2sang n2sant n3s2arg n2saus n3sav n2s1än n2s1äus ns2ca n3schu nsch7werd ns1eb nse2ha2 nseh5ere nsen4sp ns1ent ns1erf ns1erg n2serh n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n3sil n2simp n2s1ini nsinn4s nsi4te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 n2spat n4speri n4spers n4sph n3s2pi ns4pie n2spo ns3pon n4sprä n4s3prie n4spro nsrü2 ns3s2 nst1ak n3star n2stas n3stat n4stat. n4s3tate nst3eif n3stemm ns4tent ns6terbe n5s6terne n5s6terns ns2ti ns4tic ns4tob nst5opfe ns4tor n4strac n4strie nst4ru ns4trun ns2tu nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns4unr ns4uns n3sy n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt4at nt1äm n2t1äu nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei nt2en nt4ene nten6te. n3ter nte4ras nt4ern nt4ers nt4ert n4t1ess nte3v nt2her n2t3ho n3thr n3t4hu nti3c nti3k4l n2tinf n2t1inh ntini1 n3ti1t nt4lem ntmen2 ntmo2 n3to nton2s1 n3tö nt3rec n5t4ree nt3reif n5trep nt4rig n5trop n2t3rü n4ts nt3sa nt4sau nts2o nts2p nt4s3par nts2t nt2s3to nt3su n3tu 3n4tu. ntum4 ntu2ra ntu4re. ntu4res n3tü nt3z 1nu. 1nu1a nu3ar nubi1 1nu1c 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung4 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl 1nut nu2ta nu4t3r 1nuu 1nux 1nuz 3nü. 2nü4b nür1c 3nüs 1nüt 2n1v2 n3ver nvol7ler 4n1w 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nzdi1s nze6l3a n4zense n4zentw n4zentz nz3erwe nzi2ga nzig4s nz1ini nz3le n2zor nz2öl nz3s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oa4k1l o4a3la o4a3mi o2ar o2as 3oa3se o4at o5au o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi4t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re o3bri ob3s2h ob3sk obs2p ob2sta ob3sz 2o3bu obu2s 2o3bü 2oby4 2oc o3ca oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r och1s ocht4 och3te o1chu ochu2f och1w o1ci o1ck o2ckar o3cke ock2er o3cki o2cko ock3sz o1cl o1ç o1d o3d2a od2dr o3deb o3d2e1i odein3 ode2n1 odene2 o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2o3du 2o1e oe2b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1a2c of1au o2f1ei of2en o3fer of2f1a of2f1in 1offiz of2f3l of2f3r offs2 off3sh of2fu 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i o3gh ogi2er og2lo o3g4n og3s2p og1ste o1ha o1hä o1he o2h1eis ohen3s o2h1ert o2h1erz o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n3ac 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la o2h1o2p o2h3ö ohr3a oh4rin oh1ro oh1s o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. o1ism oiss2 oi1th 2o1j 2o1k oka2la okale4 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar olars2 ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ole3s ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp ol2gl ol2gr ol2i oli3k4 ol2kl olk3r ol2kre ol2lak ol2l1au oll1e2c ol2l1ei ol2lel oll5ends ol4lerk oll3erw o3lo ol2of olo3p2 ol1ort ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3m2eis o2mel o2mene o2mep o2meru om1erz om2es omiet1 o2m1ind om1ing om1ins o2m1int om3ma om1org om3pf oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal on1ap o2narb on2au 2onä onbe3 2onc onderer5 2one one4i one2n3 onens2 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4 onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on4sam on2seb onse2l onsi2 ons3l ons1p onst2h on3t2a ont3ant on4t3end ont3erw on4t3ri o1nu 2onuk on3v 1ony on3z o1ñ oof2 oo2k3l o1op o1or oo4sk oos3s4 oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan opa5s o1pec o1pei o1pe4n 2opf. op2f3a op3fah o2pfe op4ferd opf5erde opf1l opf3la op1flü 4oph2 o3phe o1pi opi5a4 opi3er. opi5ers. opin2 op5lag o2p3le op3li 2o3po op4pl op2p3r 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2oral o2r3alm or4alt 3oram or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 4orda or2d3am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords ord3s2t or2dum 2ordw 4ore ore2a ore2b o2r1e2ck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s4 or3ga 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins 2orit ork2a or2k3ar ork4r ork2s 2orm or4mans or4ment 2orn or2na2c or2n3ar or2n3ä or5ne. or3n2o1 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3rh 2ors2 or3s4a or3sh or3sz or2t1ak or4t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the ort3ins or4t3off or2tor or4tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un o2r3ü o2rya 2o3s2a os3ad os4an osa1s osch3ar o3sche osch3le os4co 2o3se ose3e o2s1ei ose2n o4sents 2osh o3s2hi o3sho 2osi o3sk o4ska os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1a2c oss3and os4sä os2sei os4s3en4k os4s3enz os2s3o os4son os2s3p os2s3t ost1a2b os4t3am ost3ang os3tarr osta4s ost1au os4tei oster3e os6t5er6we os2t3h os3til os3to os4tob ost3ran ost3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf 2o1t ota2go o3tark o2t1au ot3aug ot1ä otäugi4 o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot4em3 otemp2 o2t1erw ote2s 4ot2h ot4he ot5hel o4t3hi ot3hos o2thr o2til o2t1i2m ot2in otli2 ot4ol ot1opf ot2or oto2ra oto1s o3tra o2t3re ot3rin ot2sa ot3sc ots1p ot4spa ots2pe ot2spr ott1a ot2tan ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra ot4tri o3tü o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oun4ge. 2our ouri4 our4ne. ou3s2i outu4 2ouv 2o1ü o1v ove3s 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo oy1s4 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r öb2s3 ö1c öch1l ö2chr öch2s öchs4tu ö1d öde1r ödi3 ödien3 öd2st 1ödu ö1e 1öf öf2fl öf3l ögen2s1 ög3l ög3r ö1he öh3l2e öh3ri ö1hu ö3ig. ö1ke ö2ko1 ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl4en öl2f1ei ölf3s öl1im öl1in öl2k3l öl3la öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w öm2s ön2e ö3ni önizi1 önn2e ön2s ön3sc ön3sp ö1nu öo1 ö1pe öpf3l öp4s3t ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw ö2s1ei ö2sp ös2s1c ös2st ö2st ös3te ös2th ös3tr ö3su ö1ß ö1t ö2t3a öte4n3 öt2h öts2 öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg pa5rek 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa3s2p pa4st 2paß pat1a pat4c pate2 1pati 1pa5t4r 1pau p3auf pa3uni 1pä 3pä2c 3päd 3pär 3päs pä4t1e2h pä4t3ent pä2t3h pä2to pät3s4 2p1b 2p3c 2p1d2 pda4 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 1pel pe2l1a4 pe4lein pe2let pe2lex pe3li4n pe4l3ink pel3k pell4e pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o 3pensi 1pensu penz2 1pep pe1ra per2an pere2 1perle per4na 3pero per2r1a 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pe2st pes2th 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 p2f1in3s pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra 2pfs2 pf3sl pf3sz 2pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d phen3s 2ph1ers 2phf 2phg phien3 phi2ka 2phk ph2l 2phm 2phn 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a3 piap2 pias4 pi3as. pi3chl p4id2 piegelei8 pi2el piela2 pie4lei 3pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi3ri 3pirin 3pis 4piso pi3t2a pi1th pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3p4la p5la. p5lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler 2plig p4lik p4liz p4lo 2p3lu 2p1m2 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li po4lor 2pond po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau porf4 2porn por3s por4tin por4tre por6tri pos2e po4sta pos4t3ag po4stä po2s3te post3ei po2sto pos6tr post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppe1e ppe2n1 ppf4 pp1fr p2p1h p3p2ho pp3l pp1lä p2ple pp3oh ppp2 p2p3ra p2pri pp3sa ppt2 p2r2 1prak 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 1prei 3preis 2preiz 2p3rer 3p4res pri4e 2prig 3prinz 2pritz 1p4ro 3prob 2proc 3prod 3prog 3proj 2pross pro1st 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po p2st p3sta p3stea p3stel p3s2ti pst3re ps2tu p3stü 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w p2t3r pt3s2 ptt2 pt1um pt1urs ptü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 2pund 3punk pun2s 2punt 2pur pu2s3t 3put put2s 1püf 2pül 2p1v 2p1w pwa4r 3py1 pys4 py3t 2p1z qu4 1queu 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2ab2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin rachter6 racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad5t 1rae r2af raf3ar ra2fer raf1r ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la2 ral3ab rala4g r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la rall2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t 2ralta r4alt2h ra2lu 3raly rama3s ra2mer 1r2ami ram4man ram6m5ers ram4m3u 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er rand3s 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra2r1in r2ark 2r3arz r2as r4as. ras2a ra4schl 2rasph 2raß 1rat ra2t1a rat4r 2r3atta 4ratz 4rau. 3raub. 4raud rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp raus5se raut5s 1raü r2ax raxe3 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sc 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä r3ben. rb1ent rbe3r2e rber4gl rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rb2o rb4ri rb2s rb3se rb4sei rb3ska rbs1o rb3sp rb4stä rb2u rbu2sc rby4t 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rch1s2 rch3sp rchst4r rch3t2a rch6terg rch6terw rch1w r1ci r2ck r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rd2am rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d rde3re rder4er rderin6s r4d3ernt rde3sp rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os r2dö rd3rat rd4ri rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. re2cka 2recki 3red. 4redd 2redi re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 3rek 4re2ke re3la 2r1elb rel2e re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen r1erk 4r3erken r2erki 2r1erl 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest re1sta re2s2tu 3resu re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü rfolg4s r3for rf4ru rf4rü rf2sa rf2s1ä rf4s1id rf2spr rf2s3t rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rg3sp rgs4tr rg5s2tu r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 2r3her r2hoe rho2i3 2rhol 2rhö 2rhs rhu2s 1ri ri3am ria1s ri3at rib2bl ri1ce ri1cha rid2 ri2d3an 2ridol 2ridy r2ie rie2fr ri1el ri3els riene4 ri3eni rien3s rie2nu ri1er. ri4ere ri3ers. ri3esti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif3s rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 2rimp rim2s rim4sc r2i3na 2r1ind rin4dex rin4diz ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 2rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins 3r4ins. rin4so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris2a ri4scho ri4schw 3risik rismu2 ri3so ri4s1p 3riss ri2st ris6t5ers r2it r3i2tal ri3t2i ri3t4r rit2tr 5ritu rix1 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk3shi rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk4tri rk2um rku2n rk1uni 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i r3let r3l2i rli2s r3l2o rlös3s rl2s1p rl3ste rl2s3to rl3t r3lu rlz2 4r1m r3m2ag rma2la r2m1ald r2m1ank rm1ans rm1anz rm1a2p r2maph rm3d2 r3me. r2m1ef r2meo r2m1erp rm2es r2mide r2m1im r2m1o2ri rmo1s rm3sa rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna2r rn2arb rn3are rn3ari r2nau rnd4 rn3dr r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1c 3rock. r2o3de ro3e4 roh1l 3r2ohr 3roi ro1ir ro3le rol4lan rol3l4en rol3s 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ropf ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3sh ro3s2i ro3smo ros2s1c ro3sta rost1r 4roß ro2ßu ro4tag ro2tä ro2tei ro2tho ro4tri rots2o rot2ta ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl 3römi 4röp r1ör r2ös. r2öse 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli r3po rpro1 rps3t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rrat2s rr1äm rrb2 rr1c r3r2e rre4ale rrer4s rre2st r4rew rr2he r3r4hen rrik2 rr2n3a rr2o r2r3ob rro3m rr2st rr3stu rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2s1a2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ant rs3ar r6scherl r3schu r3schw r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3s2ho r3si r4sins rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no r3so r4sob rson4e r4s1op r4sord r4s3ort. rs2p4 rs4pel r2s3ph rs3s2 r4stant r5statu r6st5eing rs4temp rster2 rs4terb rs4t3erw rs2th rs2ti r3stie r5stim r2stin rst3ing r3stink r2stip r3sto rs4tob r4stot r3stö r3s4tr rst3ran r6strang r4strun rs2tu r3s4tü r2sumf r3swi r3sy 4r1t rtal2 r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är rte1e2 rtei3la rt1ein rtei1s4 r2telf r2temo rte2n1 rte4na rten3s2 rt3erei r4terfa r4terfo rt1erh r4t3er4la r4t3ernä rter4re rt1ers rte3s2k r2thi rt3hol rt2hum r2t1id r2t1ima r2tinf rto1p rt1or rto2ri r3tö r4t3rak rt3rec r5tri rt3ros rtrü2c r4ts rt4s1eh rt2so rt2spa rt3t4 r2t1urt r3tü rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ruch3st ru6ckerl ru2cku rude2a ru2dr 3ruf ru2fa ruf2s3 ruf4ter 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus2s1p rus4st ru2st ru3sta 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch 4rümm rün3z 2r1v rve4n1e 2r1w r5wei rwun3s 4r1x 1ry ry2c 2r1z rz2an r2zar r2zas rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. 2s1ada s1adm 2s1a2dr 3safa sa2fe 2s3aff 3safi sa1f4r 3saga sa4gent sag4n sa2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4sakt 3s2al. 4s1alar sa4l3erb sa2l1id 3salo sal2se 2s1alt 3s2alz 3sam s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na s3anb s2an2c s2and s4and. san4dar san4dri 3sang. 2s3anh 3sani 2s3anl 2s3ans san4sk 4s3antr 2s3anw 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1asp 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb s3ausw 2s3av sa2vo 1sä s3ähn 3säl 4s1ält 2s1äm 2s1änd 3sänge 2s1är 3s2ät 3säul 2säuß 4s3b4 sba4n sbe3r2e 1sc 2sc. 2scam s2can s2cap 2scar 2s1ce 6sch. 2schak s4ch2al 4schanc 4schang 2schao s4chä 4schb 4schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 2schf 2schg 2schh schi4e s4chil 4schiru 3schis 2schk s4chl 4schl. sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox s4chö 2schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs schs2e sch3s2k sch3sta 4sch3t scht2a scht4r s4chu 4schunt sch2up 3schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 4s3cl 2sco 3s4cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sde1s sdien4e sd4r 1se se3at. 2s1e2ben seb4r 2s1echo s1echt 2s1e2ck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l se2gal se2gl seg4r 3seh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh1s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s4ein. 2seinb sein4du sei3n2e sein4fo 4seing 2seinh 4seink 2seinl 2seinn 4seinr s4eins. 4seinsp 4seinst 2seinw 4s1eis 3s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam sel1ec 4selem se4lerl sel3ers 2self. s3elix se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp 3s2en. se4nag se2nä 2s1endl 3seni 3senk se2no 3s2ens s2ent. 4sentf 2s3entg s2enti 2s1ents 2sentw 2sentz se2n3u seo2r 4s1e2pos 3seq s4er. 3sera ser3a2d ser3al se5ref s3ereig 6sereign se4r3eim se4r3enk ser2er 2s1erfo s2erfr s3erfü 4serfül s2ergr s1erh 2serhö 3seri serk4 4serken s2ern. 2s3ernt se1rot 4s3eröf s2ers. 2sersa 4serseh s4ert. s2erta seru2 se4r1uf se3rum se3rund 3s4erv 5ses. se2sel se3sk se1sta se3su 3set 4se4tap se2tat 4s1e2th se1u2n 2s1ex se2xe 4sexp sex3t2 1sé 4s3f4 sfal6l5er sflo4 4s3g2 2s1h sh2a 3s2ha. sha2k 4s3han 1shas s3hä s3h2e 3shi. 3shid shi4r sh3n s3hoc 4s3hof 3s2hop sho4re 3show s3hö sh4r 1si si3ach. si2ad si3am. 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s sien3 si3ene si1err sie2s si1f4 3s4ig si2g1a2 sig4n si3gnu si2g3r sig4st si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 4s1inh sin1i sini1e 2s1inq 2s1ins s2ins. 2s1int 4s1inv 3sio sion4 3siru 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s 3s2it si2tau sit3r si2tra si3tu siv1a sive3 si2vr 1sí 2s1j 2s1k2 4sk. 3skala 4skam 4skanz s3kar 4skas skas4tr ska4te. 4skateg ska4tes 4skä 4skb s4kep 3s2ki. s2kif s2kig 3s2kik 4skir ski1s 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4skor 4skow 4skö 4sks 4sk3t 3skulp 2s1l2 3slal 4slan sla2ve s2law s3lä sl3b s3le sler3s s3li 3s4lip sli4tu s3lo. slo3be s3loe 2s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 1so 3so. so4a 2s1o2b so1c so3et 3soft 3sog s1o2he 4sohng 2s1ohr 3sol so3la so2l1ei sol4ler 4so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2sopf sop3s 3sor. so1ral s1orc 2s3ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3sos s4os. 4s1ost so3unt 3sov 4s1o2ve 3sow 2s1ox 3soz 1sö sö2c sö2f 2s1ök s1ö2l s1ös 1sp2 2sp. 2spaa 4spak 2spala spani7er. 4spap 2spara 4sparo 3sparu 3spaß 4spatr 4spau s2paz s2pä 3späh 2spär 2s3pe. s3pel 4spensi spe3p4 s1peri 2spero s2perr 2spers 4spet 3s2pez 4s3pf 2spha s4phä s3phe 3s2pi4e 4spier4 spi2k 4spil 3spio 4spip 4spis 2spl 4spla 4splä 4sple 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 4s3pos s2pott 4spr. s2prac s2pran 4sprax 2spräm 4spräs 3s4prec 4spred s2pren 2spres 2sprob 2sprop 3spross 3spru 4sprüf 2s3ps 2s4pt 3spuk 2spun 2spup 3spur 4sput 4spy 2s1q 4s3r4 srat2s srat4sc sret3 srö2s1 srücker6 srü2d 6s1s ssa3bo s5saf s3sag ss1aj s3sal s4s1alb s4s3amt s4s3ang s2sano s4sans ss2ant s4s3anz s3sa1s2 ss3att s3s2ä s4sce ssch2 s4sco ss1ec s2s1ega sse3inf sse3in4t sse6r5att ss1erö ss3erse s3s2es sse3ta ss3l ss1off ssoi4 s2s1op ss1ori s2söl s3spe ss2po s2spro ssquet4 ss3s4 sst2a s3stel ss2th ss2ti ss4tip s3s4tras s3strec ss2tur s3stü ss1ums s1t 6st. s2ta 4sta. 3staa 2stabb s4t2ac sta2ck 3s4tad 3staff 2stag 3stah 2stak 2stale s3ta3li 2stalk st1alm st1alp st1ami 4stan. sta4na 3stand 2stani 4s3tann 2stans 2stanw s4tar. 4stari s4tars st1asi 2s3tat. s4tau. 2stauf 2staum 3staur 2staus 3staus. 2stax 3s2tä 4stäg 4stält s4tänd 5stätt s3täus 2stb 2st3c 2std 4s5te. 2stea 4stechn s2ted 4stee 3s2teg ste2gr 3s4teh s2te4i st1eid 3steig 4steil 3steilh stei4na 1s2t2el 2stel. stel4l3ä 2steln 2stels 2stem 4stem. ste4mar 4sten s5ten. ste4na s4t3ends st2ens s4tentf s2tep 2ster 6s5ter. st5erbie ste4rec ste6rers st3erfü st5ergeb 4sterm 3sternc 4stes ste2se stes6se. ste4st 2stet s4teti 3s4tett 3s2teu 1steue 4steuf st3ev 4stex 2stf 2stg 4sth s4thä s3them st3heu s4thi s2t3ho s2thu 2stia 2stib 3stic 2stie. s2tieg s2tiel 2stien 3s2tif 2stig 2stik s2til 3s4tim s4tinf s3tinn st1ins 2stio 1s2ti2r 2stis st1i4so 1stitu 2stiv 2stj 2stk 4stl 4stm 2stn s2to 2sto. s3tob 2sto3d 4stod. 1stof s4toff s4t3om 4ston 4stoo 2stopo 2stor. 2store 2storg 2stori s3tort 2stose sto3s2t 1stoß 4stote 4stou 2stow 2stoz 1stö 2stöch 2s3töl 2stöt 2stp 2stq s2tr 2strad 2strag 1strah 4strahi 4strai 4strak 2stral 4strans 5straß 4s3traum 4s5träg 4sträne 4s5tref 4s5treib 5st4reif st3renn 2strib 2s4trig 1s4tri2k 2s5tris st3roll stro4ma 2ströp 1stru 2strua 2strug 3struk 2st3run 2strup 2s4t3s2 sts4k 2st3t4 st2u 5stub 4stuc 3s4tud 2stue 3stuf 5stuh 2stum2s stum4sc 2stumt stu2n 2stun. 3s4tund s2t3uni 4stunn 2s3tuns 2stunt stu3re st3url 2sturn 2st3urt 2s3tus 1stüc 2stüch 2stür. 3stüt 2stv 2stw 3s2tyl 4st3z 1su su1an 3su2b3 su4ba2 4subi 3su1c su2cha such4st 2s1u2f 2s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2mel su6m5ents s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n 3sun. sun6d5erh su4ne s1unf 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt s4u2s1 su3sa su3si sus3s 3suv 1sü 2sü2b 3süc sü2d1 süden2 3sün 3s2üs 3süß 4s3v 2s1w s3wa s3we sweh2 4swie 4swil 1s4y syl1 sym3 sy4n3 2s1z2 4s3za 4szä 4s3zei s2zena 3s4zene 4s3zent s2zes 4s3zet s2zis 4s3zu s3zü 4s3zw 2ß1a2 2ß1b2 2ß1c 2ß1d 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t 2ß1f 2ß3g2 ßge2bl 2ß1h 1ßi ßi2g1a2 ßig4s 2ß1in ß1j 2ß1k4 2ß1l ßler3 2ß1m 2ß1n2 ß1o2 ßos2 2ß1p2 2ß3r2 2ß3s4 ßsch2 ßst2 2ß1t 1ßu 2ß1um 2ß1ü 2ß1v 2ß1w 2ß1z 1ta 3ta. 4taa 5taan 2tab. ta2b1an 2t1abb 3tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 3table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 3taf. 3taf2e 4taff t1afg t1af4r 3t2ag ta2ga2 ta2g1ei 4t3a4gent 4ta3gl t3ago tag4st tah2 tah3le tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. t1a2ka ta2kro tak6ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk tal3d 3t4ale tal2en ta4lens tal2ga tal2l1ö4 3talo ta2l1op 2talt 2tam 3tame ta2mer ta2mi t1ampl t1amt 3tan. t1a2na 2tanb 4t2and tand4ar ta3ne 4tanf 2tang 3tani t2ank t3ankl 4tanl t1anm 2tanme 4t1anna t2ano t1ans 3t2ans. 4t3ansi 4t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4rens ta4r3ere 5t4a3ri 2tark 2t1arm 2tart t1arti tar2to ta2ru 2t1arz 3tas. ta3sa 3tasc t1asp 3tast ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 4tatue ta2t1um 4taud 2t1auf 4taufg tau3f4li 4taufn t1auk 3taum t1ausb 3tausc tau6schr tau6schw t2ause 4t3ausg t1ausk 4tausl 4t3auss 4t1ausw 3tav 3tax taxi1s 1tä 4täb tä1c 4täd 3täe 3täg 4tägy 2täh 2t1ält 4täm t1ämt t1ängs 3tänz t1äp t2är. tä2ru tä2s t2ät 4tätt 2täug 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 4t1c t3cha t3che tch2i tch3l t2chu tch1w t4ck t3cl t3cr 4t3d4 tdun2 1te 3te. te2a2 2teak te3al te3an 3teba 3t4ebb 4t1e2ben t2ech te3cha 2teche 3techn 2techt 2teck te2cka teck2e te2cki te3der te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 3teha 3tehä 3tei. 2teign teik4 3teil 4teilhe 2tein tein3e4c t3einge t3einla 4teinn t1eis. t1eisb te2kel tekt2 3tel. 3tela te2l3ab te2l1ac te2l1au telb4 tel3d4 3te3le tel1eb tele4be te4l1ec te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. 3telg te2l1in te2lit 3telk tell2e tel6lein 4tellu 3teln te4lost te2l1ö 3telp 3tels tel3s2k 3telt4 tel3ta tel3th 3tem. te2m1ei te2min 2temme te2m1o2r 3temper 2tempf tem3s te4m1u 3ten t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 4t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag 4t3engla t4enh te2ni te4n3in t4enj t4enm ten3n tens2e 4tensem tens3th t4enta t1entb 4tentd t4ente 4tentn tent3ri 4t3entw 4tentz ten6zerh ten3zw t1e2pi 3t6er. ter3a2c te1raf te1ral ter3am te3ran. ter3a4s 4terbs 4terbt 3terc 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül 3ter3g2 6tergrei t4ergru t4eri te3ria te2rid 5terkla 4terklä 2t3erlö ter4mer 3termi ter4n3ar 2ternc t3erneu t4ero t1erö ter4re. t4ers. ter5sc ter4ser terst4 t4erst. 5t4ersti 5t4erstu tert2 teru2 te4r1uf 6terwerb ter3za 2t1erzb 3t2erzu 3tes tesa2c te2san 4t1e2sel te2sep tes1er te2spr tes3si t2est tes3tan test3ei tester4 tes6terg tes6terk testes4 te2su 3tet2 t2et. te2tat 4teth 4tetl 3teuf 3teum te1un 3teur. teu2r3a te2vi te1xa 2t1e2xe 2t1e2xi 4texp 3text 2t1exz 4t1f4 tfi2l 4t1g2 tger2 t1h 4th. 2th4a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä th2e 1t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem 1then t4hene t4heni 3theo t2hes 3these t2heu 1thi t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n 1t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 4t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy 1ti ti2ad ti3a2m 3tib4 2tic ti1ce tiden2 ti4dend 3tief. tie2fr tieg4 2tieh ti1el ti2el. tiel3a ti3e4n3 3ti2er tie4rec ti1et ti1eu 3tif. ti1fr 4tift 3tig ti4gerz 3tik ti2kam ti2kar ti2kin ti2krä ti2kü ti2lar ti2lau ti2lei ti2lel 3tilg ti2l3ö til3s tilt4 ti2lu ti2ma2g t2imi tim2m1a 4t1imp 3t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l 3t2ins. 4t1inse 2t1int ti1nu 4t1inv 3tio ti3or 3tip ti4que. ti1rh 3tis ti4scha tisch3w ti2sei ti2sp ti1sta 3ti3t2e ti3ti 2ti3tu tium2 3tiv ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 4t3k4 4t3l tl4e 5tlem tle2r3a 6t5li tlung4 4t3m2 tmal2 tmen6t3 tmo4des 4t3n2 t5na tnes2 tnes4s 1to 3to. to4as to5at 4tobj tob2l t1obs to1c 3tocht to6ckent 3tod tode2 4to2d1er to4d1u toi4r 3tok to3la 3tole 4tolz tom1e2 2tomg 3ton to2nau to2neh 3too to2pak to2pat 3topo 2topt 3tor. to1ra to2rau to4rän 4torc t1ord 3tore to2rel t1org t3orga 3torin tor3int to2rö 3tors t1ort. to2ru t2orw to3sc 3tose to4sk tos2p 4toss 3tost4 to1sta 4toß 3to3te to2tho 3totr tots2 3t4ou touil4 to3un 3tow 2tö 3töch 4töf 4t1ök tö4l 3tön t1öst 4töß 3töt 4t3p2 tpf4 2t1q 1t2r4 2tr. 5tra. 3trac tra3cha t3rad. tra4dem tra4far 3trag 3trahi 4trahl 6trahm 5t4rai 3trak 3tral 2t3rams 3t4ran. 2trand 3trank t3rann 3trans t3rase t3rasi 4traß t4raue 2traup 5träc 3träg 3träne 4träs 4träß 4t5re. tre4ale 4treb tre2br 4trec t3rech t4reck 6t3red 3tref 4trefe 4trefo 4treg t4rei. 3t4reib 4treic 4treif t3reig 2t3reih t3rein 2t3reis 6treit t3reiz 2trek 6t3rel t4rem t4ren. 3trend 4trendi t3rent 2trepe 2trepo t4repr t4rer t4res. t4ret tre2t3r t5rett t4reu 3treuh 2t3rev 2trez 5t4ré 2t3rh 3tri 4tric 5trieb 2trieg tri4er 5trigg t3rind 4tring tri3ni 4trinn t4rip 4tript t4rit tri2x trizi1 3tro. 4trock. 3troe 3t4roi tro2ke 4trom. tro2mi 3tron 2t3roo t4rop 3tropf 3troy t3röc 2tröh 3tröp 3trös 4tröss 2t3röt 3trua 2truf 4truk trum2 trums1 2t3rund 3t4runk 5t4rup tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg try1 2ts t4sa4b t3s2ac t2s1a2d t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as t2sau t2s1äh t2s1än t3s2cha t4schar t3sche t4schef ts4chem tsch4li t4schro ts4cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t2s1ent t2s1er t6s5essen t2s1i2d tsing4 ts1ini t2s1ir ts3kr t1slal ts1o tso2r t3sou t2sö t3spal ts1par ts4pare t2spä ts2ped t3spek t2sph t3s2pi ts3ple ts2pon t3s2por t4sprei ts3s4 t1st4 t2staf t4stag ts3tak ts4tal ts3täti t2s3tep t3s4tern t3s4tero t2stip t4stit ts3tor ts3trad t2s3trä t4streu t2stri t4strop t2s3trü ts2tu t2s1u 1tsub t3sy 4t1t tt1ab tta2be tt2ac tta6gess tt1ak tt2al tt3ank tt2ant tt1art tta1s tt1ebe tt1eif tt1ein tt1eis t3tel tte2la tte4leb tte4len ttel1o tte4rec ttes1 tte4sa tte2sä4 tt2häu t2t3ho t3ti t3to tto1s t3tö t3tro tt3rü tt2sen tt2sor tts1p tt2spe tt2spr tt2sti tt5t t3tu tt2un t3tü 1tu tu1alm tu3an 2tub2 tuba3b 3tuc tu2chi 2tud 3tue tu2ere 4tuf tuf2e tu3fen t3u2fer tuff3 4tuh tu2is 2tuk t3u2kr tul2a t2um. 3t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2t3umr tum2si tum2so tums5tr 2t3umt 2t1umw 2t3umz 3tun. 2t1una 2t1und 3tune 2t3unf 3tung t3unga tung4s5 2tunif 2t1u2nio 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e4t turin1 3turn tu2ro tu4ru tu2sa tu4schl tu2so tu3ta 2tü 4tüb 3tüch tück2s 3tüf 3tüm 3tür. tür1c 3türe 3türg 3tür3s 3tüten 4tütz 4t3v 4t3w twa2 twi4e 1ty1 3typ ty2pa tys4 6t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1e2c t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3ze2s tz1ind tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4r u1al. ua2lau u1alb u3alet u1alf u3a2lo u1alr u1als u1alt ua2lu u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au u1ay u1äm u1äu 2u1b u8be8cken. u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa u2büb 2uc uc1c u1ce uch1a u1cha. uch1ä u1che u2ch1e4c uch1ei u3ches u1chi uch1il uch1in uch3l uch3m uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu uch3ü uch1w u1ci u2ckem u4ckent uck2er uck3erl u3ckerr u2cki u1cl 2u1d u3d2a uden3s2 uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e ue2ck u2ed ue2en u2eg u2ela ue2le ueli4 ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2zu u2ep ue2r3a ue2r1ä uere2 ue2rec ue3reig u3eremp u3erent ue4rerg ue4rerk uer3g2 u3erinf u3erin4t uer2ne uer4ner uern3s4t uer3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue2ta ue4tek u3fac ufa2ck u3fah uf1ak u3fal uf3ar u3fas uf1au u2f1äs u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern 2uff uff4l uf2fro uffs4 uf3l u2fob ufo2r uf1ori uf3r uf3sä uf4sin uf4so uf2spo uf2t1eb uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak u2g1ap uga4s ug1au ug3d2 u2g1ei u2g1erf u2g1erl ugge4st ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ros ug3rüs ug3se ug4ser ug3si ug3spa ug4spr ug4spu ug5stä ug3str ug3s4tü u2gü u1h uhe3s6 uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uhs4 uh1w 2ui ui2ch ui4cker u1ie ui1em u3ig u4ige u1in. u1is. u3isch. u3ischs uisi4n ui4s5t u1j uk2a u3käu u1ke u1ki u1k2l ukle1i uk4n uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab ul1am ula2s ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ul3f4 ulg4 uli2k ul1ins ul3ka ul2kn ul2les ull3s ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2th 2ulta ul3th ul4tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um1anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 4umm umm2a u2möl umpf4li um2pho um2p3le 1umr 3umsat um4ser um2sim um2s1pe um2s1u um3t2 um2un u2m1ur 1umz un1 4un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp und3st un2d1um undü4 1undv 1undz u3ne une2b une2h un2ei. un3ein un3eis unen2t u4n3erz unes4 unft4s 1unget 1ungew ung5h 1unglü un3gn un2gr ung3ri ung4sa ungs5tr un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku unna2 un2n3ad un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1un3si un3sk un3sp uns4t1r 1unt un3ta unte4ri un3tr unt3s 2untu unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u3or. u1or3c u3ors uos2 u1os. uote2 u1pa u1pe2 uper1 up2fa u2pf2e u2pf1i u3pi up2pl u1pr upt3a2 upt3erf upt3erg upt1o up4tr u1q 2ur. u1ra u2rab u3raba ura2be u2r1a2m ur3ame u2r1ana u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 urd2 ur3di ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri urgros4 urg3s4 uri2c ur1im ur1ini ur3ins ur1int urk2s ur3l ur4matt 4u1ro u3rol uro1s u1rö ur3p ur3sac ur2san ur2sau ur2ser urst4r ur4sw ur3s2ze urt2 ur3ti u3ru urü2 ur2z1a2 ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u4saf us4ann u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko us3oc u3soh u2s1op us1ou u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u5s4piz u2spo us2por u2spu us2sez us2sof ust3abe u1stal us3tau us2th ust2in us3tr u5s4tras us6tris u1stu u2stun u2stur us2ur u2sü 2uß 2u1t ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te ut1e2d ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu uto1 uto4ber uto3c ut1opf u2tops ut4or utos4 u3tö ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut2spa utt4an ut3te ut5t4l utts2 utu4re utu5ru u3tü utz3eng ut2z1in ut2zo ut2z1w 2u1u2 uufe2 u1ü2 2u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe3c übe4n3 über3 üb3l üb3r üb2s3t 2üc ü1che üch3l üch2s1c üch5t4e ü3cken ück1er ück3eri ü4ckers ück4spe 2üd ü4d3a4 ü3den. üden2g ü3d2ens üd1o4 üd3r üd3s2 üdsa1 üd3t4 üdwes2 ü2f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üg4st üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1erk ü2h1erz üh1i ühla2 ühl1ac üh1lam üh3l2e üh3mo üh3ne ühn2s üh1o üh3r2e ühr3ei. üh1ro ühr3ta üh1s ühs2p üh3t üh4th üht4r ü1hu üh1w ü1k2 ül1a ül2c ü3l4e ül2l1a ül2l1ei ül2lo ül2lö ü1lu ü2ment 2ün ü2n1a ün2da ün2dr ünd3s ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünn2s ün2s ün3sc ün3se ün3sp ün3str ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ürr2 ür2s ür3sc ür3se ür3sp ürt2h ür2zö ür2zw üs2a ü2schl üse3h üse3l üse1s üs2s1c üss2e üs2st ü2st 2ü1ß 2üt ü2t1al ü2t3r üt2s1 üt2tr ü1v ü1z 2v1ab va1c val2s 2vang 2varb va1s v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u 2v1au 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits3 ve3la ve4l1au ve3le ve3li ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 ve4rek verf4 verg4 ve3ri ve4rin ver3k ver3st vert2 ver5te ver3u ves1 2ve3sc 2ve3s2e ves3ti ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vid3s2t vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol voll1a vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 3voy vö2c 2v1p v2r 2v3ra v3re v4ree 2v3ro 2vs vs2e v1sta v1steu v3s2z 2v3t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les 2walm wal2ta wal2to walt4st 3walz wa3na wandels6 wang4s 1wann wa2p 1war2e ware1i war3ste wart4e 1was wa3sa wa4scha wa3sche wa3se wa3sh wass4e 1wäh 1wäl 2wäng 1wäs wäs2c 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we3cke. we5cken. we3ckes we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg3s4 1weh we4i wei4bl 2weie weifel6d weik4 wei3sc weis4s3p weis4t wei3str wei4tr wel6schl wel6schr wel2t1 wel4t3a4 wel6t5en6d wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer2s wer2t1a wer4t3ei wer6t5erm wer2to 1werts 1wese we2s1p we4st west1a west3ei wes2th west1o2 west3r wes4tu 1wet wet2s wett3s 2w1ey 2w1g 2w3h wi3cka 1wid wi2e wie3l wien2e wie2st wik2 1wil wim2ma wim4m3u win4d3e4c win2dr win2e 2wing win8n7er8sc 1wi4r wi3s2e wi2sp 1wiss wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s3 wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k ws2t 2w1t wti2 w2u 1wuc wuch4sc wul2 wul3se wun2da wun4g3r wun2s 4wur. wur2fa wur2s 1wurst wus2 wus3te 1wu4t1 1wüh wül2 wün3 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag x3a2m xand4 x2anz 1x2as 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. x2en xen3s2 x2er. x2ere 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is1 xis2c xi2se xi2so2 xis3s xis4tä xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3t2as xt1ä x2tän xtblo4 x2t1e2d x2t1ei x4tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt3s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere y2es. yes2p ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl3c y4le. yli4n yloni1 yl3s2 y2l1u yma4t ymp4 ym2pha ympi1 y2n1o yno4d ynt2 y1nu y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2po ys1pr ys3t4 y1s4ty y2s1u2 y3s2z y1t2 y2te. y2tes y3to1 yu2r yure3 y1v y1w y1y y1z2 2z3a2b zab3l za1c 2z1a2d 2z1af za3gr 3z2ah zah4ner 2z3a2k 2z1all 2z1am z1an za2na 2z3anf 3zani 3z2ank zan4kl 2z3anl 2zarb 2zarc 2z1arm z1arti zar2tr 2z1arz z1as za1st4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1ä4c 3z2äh 2z1äm 2zängs z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeik4 zei3la zeile4 2z1ein zei1s6 zei3sk zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 ze2len ze2l1er ze2l1in zell2a zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zen5s4tr zent3s zen4z3er z2er. zer3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2sä ze3sc zes1e zes1i ze3sku ze2sp zessen4 zes6s5end zes2sp zes2st ze2s3t ze3sta ze2tr 2zetts 2z1ex 2z1f4 2z1g2 zger2a 2z1h z2hen zi3alo zi3ar zi2dei zid3r zie4lei zi1erh ziers1 zi1es. zil2e 2z1imp zim4t3 zin2e zin3ei zin4er 2z1inf 2z1inh zin1it zin2sa zin4ser 4zinsuf 2z1inv zi2o3 zi3op zirk2 zirk6s zi3s2z zi1t2h ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zon4ter zo2o 2z1ope z1or zo2ri zor4ne 2z1osz 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3sz 2z1t z2t1au z4tehe z3t2her zt3ho z3tic zt1ins z3tö zt3rec zt3s2 z3tü zu1 zu3a zub4 3zuc zu4ch zu3cke zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug1un 2z1uhr zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e zung4 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s4 zu5t zut2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 4z1z z3z4a zzi1s4 z3z2o zz2ö}context-2013.05.28.20130704/texmf-dist/tex/context/patterns/lang-lt.hyp0000644000175000017500000000017111761001300024663 0ustar norbertnorbert% generated by mtxrun --script pattern --convert % for comment and copyright, see lang-lt.rme % used: \hyphenation{ }context-2013.05.28.20130704/texmf-dist/tex/context/base/0000755000175000017500000000000012165205647021701 5ustar norbertnorbertcontext-2013.05.28.20130704/texmf-dist/tex/context/base/lang-cyr.mkii0000644000175000017500000004763511754241457024311 0ustar norbertnorbert%D \module %D [ file=lang-cyr, %D version=2003.01.24, %D title=\CONTEXT\ Language Macros, %D subtitle=Cyrillic Languages, %D author=see below, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Cyrillic Languages} %D The cyrillic languages always use a dedicated input regime. %D Therefore we define the labels using symbolic names. %D Support for cyrillic is initiated by Olga Briginets who %D also layed the base for the language, encoding and font %D definition. Later Alexander Bokovoy and Victor Figurnov %D improved things. I (Hans Hagen) mainly cleaned things up %D a bit. \unprotect \installlanguage [\s!ru] [\s!lefthyphenmin=2, \s!righthyphenmin=2, \c!spacing=\v!packed, \c!leftsentence=\leftguillemot, \c!rightsentence=\rightguillemot, \c!leftsubsentence=\lowerleftdoubleninequote, \c!rightsubsentence=\upperrightdoubleninequote, \c!leftquote=\lowerleftdoubleninequote, \c!rightquote=\upperrightdoubleninequote, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day,\ ,\v!month,\ ,\v!year}, \s!mapping=t2a, \s!encoding=t2a] \installlanguage [\s!ua] [\s!lefthyphenmin=2, \s!righthyphenmin=2, \c!spacing=\v!packed, \c!leftsentence=\leftguillemot, \c!rightsentence=\rightguillemot, \c!leftsubsentence=\lowerleftdoubleninequote, \c!rightsubsentence=\upperrightdoubleninequote, \c!leftquote=\lowerleftdoubleninequote, \c!rightquote=\upperrightdoubleninequote, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day,\ ,\v!month,\ ,\v!year}, \s!patterns=\s!uk, \s!mapping=t2a, \s!encoding=t2a] \installlanguage [russian] [\s!ru] \installlanguage [ukrainian] [\s!ua] %D Labels and header texts. \setupheadtext [\s!ru] [ \v!content=\cyrillicS \cyrillico \cyrillicd \cyrillice \cyrillicr \cyrilliczh \cyrillica \cyrillicn \cyrillici \cyrillice] \setupheadtext [\s!ua] [\v!content=\cyrillicZ \cyrillicm \cyrillicii \cyrillics \cyrillict] \setupheadtext [\s!ru] [\v!tables=\cyrillicS \cyrillicp \cyrillici \cyrillics \cyrillico \cyrillick \space \cyrillict \cyrillica \cyrillicb \cyrillicl \cyrillici \cyrillicc] \setupheadtext [\s!ua] [\v!tables=\cyrillicP \cyrillice \cyrillicr \cyrillice \cyrillicl \cyrillicii \cyrillick \space \cyrillict \cyrillica \cyrillicb \cyrillicl \cyrillici \cyrillicc \cyrillicsftsn] \setupheadtext [\s!ru] [\v!figures=\cyrillicS \cyrillicp \cyrillici \cyrillics \cyrillico \cyrillick \space \cyrillici \cyrillicl \cyrillicl \cyrillicyu\cyrillics \cyrillict \cyrillicr \cyrillica \cyrillicc \cyrillici \cyrillicishrt] \setupheadtext [\s!ua] [\v!figures=\cyrillicP \cyrillice \cyrillicr \cyrillice \cyrillicl \cyrillicii \cyrillick \space \cyrillicii \cyrillicl \cyrillicyu\cyrillics \cyrillict \cyrillicr \cyrillica \cyrillicc \cyrillicii\cyrillicishrt] \setupheadtext [\s!ru] [\v!graphics=\cyrillicS \cyrillicp \cyrillici \cyrillics \cyrillico \cyrillick \space \cyrillicg \cyrillicr \cyrillica \cyrillicf \cyrillici \cyrillick \cyrillico \cyrillicv] \setupheadtext [\s!ua] [\v!graphics=\cyrillicP \cyrillice \cyrillicr \cyrillice \cyrillicl \cyrillicii \cyrillick \space \cyrillicg \cyrillicr \cyrillica \cyrillicf \cyrillicii\cyrillick \cyrillico \cyrillicv] \setupheadtext [\s!ru] [\v!intermezzi=\cyrillicS \cyrillicp \cyrillici \cyrillics \cyrillico \cyrillick \space \cyrillicv \cyrillics \cyrillict \cyrillica \cyrillicv \cyrillico \cyrillick] \setupheadtext [\s!ua] [\v!intermezzi=\cyrillicP \cyrillice \cyrillicr \cyrillice \cyrillicl \cyrillicii \cyrillick \space \cyrillicv \cyrillics \cyrillict \cyrillica \cyrillicv \cyrillico \cyrillick] \setupheadtext [\s!ru] [\v!index=\cyrillicA \cyrillicl \cyrillicf \cyrillica \cyrillicv \cyrillici \cyrillict \cyrillicn \cyrillicery \cyrillicishrt \space \cyrillicu \cyrillick \cyrillica \cyrillicz \cyrillica \cyrillict \cyrillice \cyrillicl \cyrillicsftsn] \setupheadtext [\s!ua] [\v!index=\cyrillicP \cyrillico \cyrillick \cyrillica \cyrilliczh\cyrillicch \cyrillici \cyrillick] \setupheadtext [\s!ru] [\v!abbreviations=\cyrillicS \cyrillicp \cyrillici \cyrillics \cyrillico \cyrillick \space \cyrillics \cyrillico \cyrillick \cyrillicr \cyrillica \cyrillicshch \cyrillice \cyrillicn \cyrillici \cyrillicishrt] \setupheadtext [\s!ua] [\v!abbreviations=\cyrillicP \cyrillice \cyrillicr \cyrillice \cyrillicl \cyrillicii \cyrillick \space \cyrillics \cyrillick \cyrillico \cyrillicr \cyrillico \cyrillicch\cyrillice \cyrillicn \cyrillicsftsn] \setupheadtext [\s!ru] [\v!logos=\cyrillicL \cyrillico \cyrillicg \cyrillico \cyrillict \cyrillici \cyrillicp \cyrillicery] \setupheadtext [\s!ua] [\v!logos=\cyrillicL \cyrillico \cyrillicg \cyrillico \cyrillict \cyrillici \cyrillicp \cyrillici] \setupheadtext [\s!ru] [\v!units=\cyrillicE \cyrillicd \cyrillici \cyrillicn \cyrillici \cyrillicc \cyrillicery \space \cyrillici \cyrillicz \cyrillicm \cyrillice \cyrillicr \cyrillice \cyrillicn \cyrillici \cyrillicya] \setupheadtext [\s!ua] [\v!units=\cyrillicO \cyrillicd \cyrillici \cyrillicn \cyrillici \cyrillicc \cyrillicii\space \cyrillicv \cyrillici \cyrillicm \cyrillicii \cyrillicr \cyrillicu] \setuplabeltext [\s!ru] [\v!table=\cyrillicT \cyrillica \cyrillicb \cyrillicl \cyrillici \cyrillicc \cyrillica \space] \setuplabeltext [\s!ua] [\v!table=\cyrillicT \cyrillica \cyrillicb \cyrillicl \cyrillici \cyrillicc \cyrillicya\space] \setuplabeltext [\s!ru] [\v!figure=\cyrillicR \cyrillici \cyrillics \cyrillicu \cyrillicn \cyrillico \cyrillick \space] \setuplabeltext [\s!ua] [\v!figure=\cyrillicM \cyrillica \cyrillicl \cyrillicyu\cyrillicn \cyrillico \cyrillick \space] \setuplabeltext [\s!ru] [\v!intermezzo=\cyrillicV \cyrillics \cyrillict \cyrillica \cyrillicv \cyrillick \cyrillica \space] \setuplabeltext [\s!ua] [\v!intermezzo=\cyrillicV \cyrillics \cyrillict \cyrillica \cyrillicv \cyrillick \cyrillica \space] \setuplabeltext [\s!ru] [\v!graphic=\cyrillicG \cyrillicr \cyrillica \cyrillicf \cyrillici \cyrillick \space] \setuplabeltext [\s!ua] [\v!graphic=\cyrillicG \cyrillicr \cyrillica \cyrillicf \cyrillici \cyrillick \space] \setuplabeltext [\s!ru] [\v!chapter=] \setuplabeltext [\s!ua] [\v!chapter=] \setuplabeltext [\s!ru] [\v!section=] \setuplabeltext [\s!ua] [\v!section=] \setuplabeltext [\s!ru] [\v!subsection=] \setuplabeltext [\s!ua] [\v!subsection=] \setuplabeltext [\s!ru] [\v!subsubsection=] \setuplabeltext [\s!ua] [\v!subsubsection=] \setuplabeltext [\s!ru] [\v!subsubsubsection=] \setuplabeltext [\s!ua] [\v!subsubsubsection=] \setuplabeltext [\s!ru] [\v!appendix=] \setuplabeltext [\s!ua] [\v!appendix=] \setuplabeltext [\s!ru] [\v!part=\cyrillicCH\cyrillica \cyrillics \cyrillict \cyrillicsftsn \space] \setuplabeltext [\s!ua] [\v!part=\cyrillicCH\cyrillica \cyrillics \cyrillict \cyrillici \cyrillicn \cyrillica \space] \setuplabeltext [\s!ru] [\v!line=\cyrillics \cyrillict \cyrillicr \cyrillico \cyrillick \cyrillica \space] \setuplabeltext [\s!ua] [\v!line=\cyrillicr \cyrillicya\cyrillicd \cyrillico \cyrillick \space] \setuplabeltext [\s!ru] [\v!lines=\cyrillics \cyrillict \cyrillicr \cyrillico \cyrillick \cyrillici \space] \setuplabeltext [\s!ua] [\v!lines=\cyrillicr \cyrillicya\cyrillicd \cyrillick \cyrillici \space] \setuplabeltext [\s!ru] [\v!page=\cyrillics \cyrillict \cyrillicr \cyrillica \cyrillicn \cyrillici \cyrillicc \cyrillica \space] \setuplabeltext [\s!ua] [\v!page=\cyrillics \cyrillict \cyrillico \cyrillicr \cyrillicii\cyrillicn \cyrillick \cyrillica \space ] \setuplabeltext [\s!ru] [\v!atpage=\cyrillicn \cyrillica \space \cyrillics \cyrillict \cyrillicr \cyrillica \cyrillicn \cyrillici \cyrillicc \cyrillice \space] \setuplabeltext [\s!ua] [\v!atpage=\cyrillicn \cyrillica \space \cyrillics \cyrillict \cyrillico \cyrillicr \cyrillicii\cyrillicn \cyrillicc \cyrillicii\space ] \setuplabeltext [\s!ru] [\v!hencefore=\cyrillics \cyrillicm.\space \cyrillicv \cyrillicery \cyrillicsh \cyrillice] \setuplabeltext [\s!ua] [\v!hencefore=\cyrillicya\cyrillick \space \cyrillicp \cyrillico \cyrillick \cyrillica \cyrillicz \cyrillica \cyrillicn \cyrillico \space \cyrillicv \cyrillici \cyrillicshch \cyrillice] \setuplabeltext [\s!ru] [\v!hereafter=\cyrillics \cyrillicm.\space \cyrillicn \cyrillici \cyrilliczh \cyrillice] \setuplabeltext [\s!ua] [\v!hereafter=\cyrillicya\cyrillick \space \cyrillicp \cyrillico \cyrillick \cyrillica \cyrillicz \cyrillica \cyrillicn \cyrillico \space \cyrillicn \cyrillici \cyrilliczh \cyrillicch\cyrillice] \setuplabeltext [\s!ru] [\v!see=\cyrillics \cyrillicm.\space] \setuplabeltext [\s!ua] [\v!see=\cyrillicd \cyrillici \cyrillicv.\space ] \setuplabeltext [\s!ru] [\v!january=\cyrillicya\cyrillicn \cyrillicv \cyrillica \cyrillicr \cyrillicya] \setuplabeltext [\s!ru] [\v!february=\cyrillicf \cyrillice \cyrillicv \cyrillicr \cyrillica \cyrillicl \cyrillicya] \setuplabeltext [\s!ru] [\v!march=\cyrillicm \cyrillica \cyrillicr \cyrillict \cyrillica] \setuplabeltext [\s!ru] [\v!april=\cyrillica \cyrillicp \cyrillicr \cyrillice \cyrillicl \cyrillicya] \setuplabeltext [\s!ru] [\v!may=\cyrillicm \cyrillica \cyrillicya] \setuplabeltext [\s!ru] [\v!june=\cyrillici \cyrillicyu\cyrillicn \cyrillicya] \setuplabeltext [\s!ru] [\v!july=\cyrillici \cyrillicyu\cyrillicl \cyrillicya] \setuplabeltext [\s!ru] [\v!august=\cyrillica \cyrillicv \cyrillicg \cyrillicu \cyrillics \cyrillict \cyrillica] \setuplabeltext [\s!ru] [\v!september=\cyrillics \cyrillice \cyrillicn \cyrillict \cyrillicya\cyrillicb \cyrillicr \cyrillicya] \setuplabeltext [\s!ru] [\v!october=\cyrillico \cyrillick \cyrillict \cyrillicya\cyrillicb \cyrillicr \cyrillicya] \setuplabeltext [\s!ru] [\v!november=\cyrillicn \cyrillico \cyrillicya \cyrillicb \cyrillicr \cyrillicya] \setuplabeltext [\s!ru] [\v!december=\cyrillicd \cyrillice \cyrillick \cyrillica \cyrillicb \cyrillicr \cyrillicya] \setuplabeltext [\s!ua] [\v!january=\cyrillics \cyrillicii\cyrillicch \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!february=\cyrillicl \cyrillicyu\cyrillict \cyrillico \cyrillicg \cyrillico] \setuplabeltext [\s!ua] [\v!march=\cyrillicb \cyrillice \cyrillicr \cyrillice \cyrillicz \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!april=\cyrillick \cyrillicv \cyrillicii \cyrillict \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!may=\cyrillict \cyrillicr \cyrillica \cyrillicv \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!june=\cyrillicch\cyrillice \cyrillicr \cyrillicv \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!july=\cyrillicl \cyrillici \cyrillicp \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!august=\cyrillics \cyrillice \cyrillicr \cyrillicp \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!september=\cyrillicv \cyrillice \cyrillicr \cyrillice \cyrillics \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!october=\cyrilliczh\cyrillico \cyrillicv \cyrillict \cyrillicn \cyrillicya] \setuplabeltext [\s!ua] [\v!november=\cyrillicl \cyrillici \cyrillics \cyrillict \cyrillico \cyrillicp \cyrillica \cyrillicd \cyrillica] \setuplabeltext [\s!ua] [\v!december=\cyrillicg \cyrillicr \cyrillicu \cyrillicd \cyrillicn \cyrillicya] \setuplabeltext [\s!ru] [\v!sunday=\cyrillicv \cyrillico \cyrillics \cyrillick \cyrillicr \cyrillice \cyrillics \cyrillice \cyrillicn \cyrillicsftsn \cyrillice] \setuplabeltext [\s!ru] [\v!monday=\cyrillicp \cyrillico \cyrillicn \cyrillice \cyrillicd \cyrillice \cyrillicl \cyrillicsftsn \cyrillicn \cyrillici \cyrillick] \setuplabeltext [\s!ru] [\v!tuesday=\cyrillicv \cyrillict \cyrillico \cyrillicr \cyrillicn \cyrillici \cyrillick] \setuplabeltext [\s!ru] [\v!wednesday=\cyrillics \cyrillicr \cyrillice \cyrillicd \cyrillica] \setuplabeltext [\s!ru] [\v!thursday=\cyrillicch\cyrillice \cyrillict \cyrillicv \cyrillice \cyrillicr \cyrillicg] \setuplabeltext [\s!ru] [\v!friday=\cyrillicp \cyrillicya\cyrillict \cyrillicn \cyrillici \cyrillicc \cyrillica] \setuplabeltext [\s!ru] [\v!saturday=\cyrillics \cyrillicu \cyrillicb \cyrillicb \cyrillico \cyrillict \cyrillica] \setuplabeltext [\s!ua] [\v!sunday=\cyrillicn \cyrillice \cyrillicd \cyrillicii\cyrillicl \cyrillicya] \setuplabeltext [\s!ua] [\v!monday=\cyrillicp \cyrillico \cyrillicn \cyrillice \cyrillicd \cyrillicii \cyrillicl \cyrillico \cyrillick] \setuplabeltext [\s!ua] [\v!tuesday=\cyrillicv \cyrillicii\cyrillicv \cyrillict \cyrillico \cyrillicr \cyrillico \cyrillick] \setuplabeltext [\s!ua] [\v!wednesday=\cyrillics \cyrillice \cyrillicr \cyrillice \cyrillicd \cyrillica] \setuplabeltext [\s!ua] [\v!thursday=\cyrillicch\cyrillice \cyrillict \cyrillicv \cyrillice \cyrillicr] \setuplabeltext [\s!ua] [\v!friday=\cyrillicp'\cyrillicya\cyrillict \cyrillicn \cyrillici \cyrillicc \cyrillicya] \setuplabeltext [\s!ua] [\v!saturday=\cyrillics \cyrillicu \cyrillicb \cyrillico \cyrillict \cyrillica] %D \ShowAllLanguageValues [\s!ru] [russian] {Russian} {doll} %D \ShowAllLanguageValues [\s!ua] [ukranian] {Ukranian} {dance} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-imp-mis.mkiv0000644000175000017500000000561511754241457025125 0ustar norbertnorbert%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 \& \CONTEXT\ Development Team}] %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. The \type {\textmath} macro is twice as %D efficient. \definesymbol [\v!none] [] \definesymbol [bullet] [\textmath\bullet] \definesymbol [dash] [\textmath-] \definesymbol [star] [\textmath\star] \definesymbol [triangle] [\textmath\triangleright] \definesymbol [circle] [\textmath\circ] \definesymbol [square] [\textmath\square] \definesymbol [diamond] [\textmath\diamond] % I'm not sure about this ... I dislike the small bullet. So we provide % it as variant: \type {\setupsymbolset[text]}. Also, we want to be % backward compatible. \startsymbolset[text] \definesymbol [bullet] [\textormathchar{"2022}] % • \bullet \definesymbol [dash] [\textormathchar{"2013}] % – \definesymbol [star] [\textormathchar{"22C6}] % ✴ \star \definesymbol [triangle] [\textormathchar{"22B3}] % ⊳ \triangleright \definesymbol [circle] [\textormathchar{"2218}] % ∘ \circ \definesymbol [square] [\textormathchar{"25A1}] % □ \square \definesymbol [diamond] [\textormathchar{"22C4}] % ⋄ \diamond \definesymbol [checkmark] [\textormathchar{"2713}] % ✓ \checkmark \definesymbol [blacktriangle] [\textormathchar{"25B6}] % ▶ \definesymbol [blacksquare] [\textormathchar{"25A0}] % ■ \definesymbol [blackdiamond] [\textormathchar{"25C6}] % ◆ \stopsymbolset \definesymbol [smallcircle] [\hbox{\raise.1ex\hbox{\textmath{\scriptscriptstyle\bigcirc}}}] \definesymbol [medcircle] [\hbox{\raise.1ex\hbox{\textmath{\scriptstyle \bigcirc}}}] \definesymbol [bigcircle] [\textmath{\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] [\textnumero] \definesymbol [numero] [\textnumero] \definesymbol [euro] [\texteuro] \let\euro\texteuro \def\Numero{\symbol[Numero]} % obsolete \def\numero{\symbol[numero]} % obsolete \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-def-01.mkiv0000644000175000017500000000032612130411274023771 0ustar norbertnorbert% yes or no \unprotect \startsetups defaults:frontpart:pagenumbers:roman \defineconversionset[\c!frontpart:\c!pagenumber][][romannumerals] \setupuserpagenumber[\c!way=\v!by\v!block] \stopsetups \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-ps.mkii0000644000175000017500000001562211754241457024136 0ustar norbertnorbert%D \module %D [ file=spec-ps, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=Adobe PostScript, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \macros %D {dostartgraymode,dostopgraymode, %D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode,dostopcolormode, %D dostartrotation,dostoprotation, %D dostartscaling,dostopscaling, %D dostartmirroring,dostopmirroring, %D dostartnegative,dostopnegative, %D dostartoverprint,dostopoverprint, %D doselectfirstpaperbin, %D doselectsecondpaperbin} %D %D This implementation is straightforward and can be used as %D a default with postscript||drivers. We use \type{ps:} as %D opening, because most drivers support this. \startspecials[postscript] \def\@@insertpostscriptliteral {ps: } \def\@@insertpostscriptretain {" } \definespecial\dostartgraymode#1% {\special {\@@insertpostscriptliteral #1\space setgray}} \definespecial\dostopgraymode {\special {\@@insertpostscriptliteral 0 setgray}} \definespecial\dostartrgbcolormode#1#2#3% {\special {\@@insertpostscriptliteral #1\space #2\space #3\space setrgbcolor}} \definespecial\dostartcmykcolormode#1#2#3#4% {\special {\@@insertpostscriptliteral #1\space #2\space #3\space #4\space setcmykcolor}} \definespecial\dostartgraycolormode#1% {\special {\@@insertpostscriptliteral #1\space setgray}} \definespecial\dostopcolormode {\special {\@@insertpostscriptliteral 0 setgray}} \definespecial\doselectfirstpaperbin {\special {\@@insertpostscriptliteral statusdict begin 1 setpapertray end}} % checken \definespecial\doselectsecondpaperbin {\special {\@@insertpostscriptliteral statusdict begin 0 setpapertray end}} % checken \definespecial\dostartrotation#1% straight from the YandY manual {\special {\@@insertpostscriptliteral gsave currentpoint currentpoint translate \number#1\space\space rotate neg exch neg exch translate}} \definespecial\dostoprotation {\special {\@@insertpostscriptliteral currentfont currentpoint grestore moveto setfont}} \definespecial\dostartscaling#1#2% conforming the YandY manual {\special {\@@insertpostscriptliteral gsave currentpoint currentpoint translate #1\space #2\space scale neg exch neg exch translate}} \definespecial\dostopscaling {\special {\@@insertpostscriptliteral currentfont currentpoint grestore moveto setfont}} \definespecial\dostartmirroring % some translate and exch stuff from YandY {\special {\@@insertpostscriptliteral gsave currentpoint currentpoint translate [-1 0 0 1 0 0] concat neg exch neg exch translate}} \definespecial\dostopmirroring {\special {\@@insertpostscriptliteral currentfont currentpoint grestore moveto setfont}} \definespecial\dostartnegative {\special{\@@insertpostscriptliteral gsave {1 exch sub} settransfer}} \definespecial\dostopnegative {\special{\@@insertpostscriptliteral grestore}} \definespecial\dostartoverprint {\special{\@@insertpostscriptliteral true setoverprint}} \definespecial\dostopoverprint {\special{\@@insertpostscriptliteral false setoverprint}} \definespecial\dostartgraphicgroup {\special{\@@insertpostscriptliteral gsave}} \definespecial\dostopgraphicgroup {\special{\@@insertpostscriptliteral grestore}} %D \macros %D {doovalbox} %D %D This implementation is a mixture of several possible %D implementations. We use some constants that may not be %D changed. It took some time to find them, but these values %D offer quite accurate results. The macro calls for %D \type{\forgetall}, which resets indentation, skips and %D \type{\everypar}. %D %D Because a stroke follows the line, we correct for half of %D the linewidth. Furthermore we use scaling to overcome some %D limitations in the precision ($<1$~sp) and to prevent %D rounding errors. We also do some correction for large %D values. We let PostScript compare some arguments with %D \type{a b eq {action} fi}. %D %D The path is based on a macro of J.~Hefferon cs. We also %D tried the D.~Salomon implementation, but this did not work %D well, just like some other alternatives. % #1 = width #2 = height #3 = depth % #4 = linewidth #5 = radius % #5 = stroke (ja,nee) #7 = fill (ja,nee) \def\@@insertpostscriptliteral {ps: } \def\@@insertpostscriptretain {postscript } % unknown \def\dosomeovalcalc#1#2#3% {\dimen2=#1% \advance\dimen2 #2% \PointsToBigPoints{\dimen2}#3} \def\dosomeovalbox#1#2#3#4#5#6#7#8% variant not yet supported {\bgroup \dimen0=#4\divide\dimen0 2 \dosomeovalcalc{0pt}{+\dimen0}\xmin \dosomeovalcalc{#1}{-\dimen0}\xmax \dosomeovalcalc{#2}{-\dimen0}\ymax \dosomeovalcalc{-#3}{+\dimen0}\ymin \dosomeovalcalc{#4}{0pt}\stroke \dosomeovalcalc{#5}{0pt}\radius \edef\dostroke{#6}% \edef\dofill{#7}% \setbox\nextbox\hbox {\ifnum\dostroke\dofill>0 \special {\@@insertpostscriptretain gsave newpath \xmin\space \radius\space add \ymin\space moveto \xmax\space \ymin\space \xmax\space \ymax\space \radius\space arcto \xmax\space \ymax\space \xmin\space \ymax\space \radius\space arcto \xmin\space \ymax\space \xmin\space \ymin\space \radius\space arcto \xmin\space \ymin\space \xmax\space \ymin\space \radius\space arcto \xmin\space \radius\space add \ymin\space moveto 16 {pop} repeat closepath (\dostroke) (1) eq {\stroke\space 0 ne {gsave \stroke\space setlinewidth stroke grestore} if} if (\dofill) (1) eq {fill} if grestore}% \fi}% \nextboxwd#1% \nextboxht#2% \nextboxdp#3% \flushnextbox \egroup} %D The indirect call permits a (rather) dirty hack, needed %D for \DVIPS\ support. \definespecial\doovalbox {\dosomeovalbox} %D \macros %D {dostartclipping,dostopclipping} %D %D These two specials are not yet working as expected. \definespecial\dostartclipping#1#2#3% {\PointsToBigPoints{#2}\width \PointsToBigPoints{#3}\height \grabMPclippath{#1}{0}{\width}{\height} {0 0 moveto \width 0 lineto \width \height lineto 0 \height\space lineto}% \special {\@@insertpostscriptliteral\space save newpath \MPclippath\space closepath clip}} \definespecial\dostopclipping {\special{\@@insertpostscriptliteral\space restore}} %D Some MP stuff: \definespecial\doinsertMPfile#1% {\doiffileelse{./#1}{\includeMPasEPS{./#1}}{\message{[MP #1]}}} \stopspecials \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pdfr-il2.mkii0000644000175000017500000003134711754241457024205 0ustar norbertnorbert%D \module %D [ file=pdfr-il2, %D version=2000.12.10, %D title=\CONTEXT\ PDF Font Resources, %D subtitle=ISO Latin 2, %D author={Ondrej Koala Vacha, Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 vector is derived (but reformatted a bit) from a %D sample send to me by Petr Ferdus. There was some Czech %D comment in which I could recognize the name of Ondrej %D Koala Vacha. More information on setting up such a vector %D can be found in the \PDF\ reference manual. \startpdffontresource[il2] /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (Adobe) /Ordering (T1UV) /Supplement 0 >> def /CMapName /Adobe-Identity-UCS def /CMapType 1 def 1 begincodespacerange <00> endcodespacerange %%FontSpecificEncoding 191 beginbfrange <20> <20> <0020> % space dec: 32 oct:040 hex:20 <21> <21> <0021> % exclam dec: 33 oct:041 hex:21 <22> <22> <0022> % quotedbl dec: 34 oct:042 hex:22 <23> <23> <0023> % numbersign dec: 35 oct:043 hex:23 <24> <24> <0024> % dollar dec: 36 oct:044 hex:24 <25> <25> <0025> % percent dec: 37 oct:045 hex:25 <26> <26> <0026> % ampersand dec: 38 oct:046 hex:26 <27> <27> <0027> % quotesingle dec: 39 oct:047 hex:27 <28> <28> <0028> % parenleft dec: 40 oct:050 hex:28 <29> <29> <0029> % parenright dec: 41 oct:051 hex:29 <2a> <2a> <002a> % asterisk dec: 42 oct:052 hex:2a <2b> <2b> <002b> % plus dec: 43 oct:053 hex:2b <2c> <2c> <002c> % comma dec: 44 oct:054 hex:2c <2d> <2d> <002d> % hyphen dec: 45 oct:055 hex:2d <2e> <2e> <002e> % period dec: 46 oct:056 hex:2e <2f> <2f> <002f> % slash dec: 47 oct:057 hex:2f <30> <30> <0030> % zero dec: 48 oct:060 hex:30 <31> <31> <0031> % one dec: 49 oct:061 hex:31 <32> <32> <0032> % two dec: 50 oct:062 hex:32 <33> <33> <0033> % three dec: 51 oct:063 hex:33 <34> <34> <0034> % four dec: 52 oct:064 hex:34 <35> <35> <0035> % five dec: 53 oct:065 hex:35 <36> <36> <0036> % six dec: 54 oct:066 hex:36 <37> <37> <0037> % seven dec: 55 oct:067 hex:37 <38> <38> <0038> % eight dec: 56 oct:070 hex:38 <39> <39> <0039> % nine dec: 57 oct:071 hex:39 <3a> <3a> <003a> % colon dec: 58 oct:072 hex:3a <3b> <3b> <003b> % semicolon dec: 59 oct:073 hex:3b <3c> <3c> <003c> % less dec: 60 oct:074 hex:3c <3d> <3d> <003d> % equal dec: 61 oct:075 hex:3d <3e> <3e> <003e> % greater dec: 62 oct:076 hex:3e <3f> <3f> <003f> % question dec: 63 oct:077 hex:3f <40> <40> <0040> % at dec: 64 oct:100 hex:40 <41> <41> <0041> % A dec: 65 oct:101 hex:41 <42> <42> <0042> % B dec: 66 oct:102 hex:42 <43> <43> <0043> % C dec: 67 oct:103 hex:43 <44> <44> <0044> % D dec: 68 oct:104 hex:44 <45> <45> <0045> % E dec: 69 oct:105 hex:45 <46> <46> <0046> % F dec: 70 oct:106 hex:46 <47> <47> <0047> % G dec: 71 oct:107 hex:47 <48> <48> <0048> % H dec: 72 oct:110 hex:48 <49> <49> <0049> % I dec: 73 oct:111 hex:49 <4a> <4a> <004a> % J dec: 74 oct:112 hex:4a <4b> <4b> <004b> % K dec: 75 oct:113 hex:4b <4c> <4c> <004c> % L dec: 76 oct:114 hex:4c <4d> <4d> <004d> % M dec: 77 oct:115 hex:4d <4e> <4e> <004e> % N dec: 78 oct:116 hex:4e <4f> <4f> <004f> % O dec: 79 oct:117 hex:4f <50> <50> <0050> % P dec: 80 oct:120 hex:50 <51> <51> <0051> % Q dec: 81 oct:121 hex:51 <52> <52> <0052> % R dec: 82 oct:122 hex:52 <53> <53> <0053> % S dec: 83 oct:123 hex:53 <54> <54> <0054> % T dec: 84 oct:124 hex:54 <55> <55> <0055> % U dec: 85 oct:125 hex:55 <56> <56> <0056> % V dec: 86 oct:126 hex:56 <57> <57> <0057> % W dec: 87 oct:127 hex:57 <58> <58> <0058> % X dec: 88 oct:130 hex:58 <59> <59> <0059> % Y dec: 89 oct:131 hex:59 <5a> <5a> <005a> % Z dec: 90 oct:132 hex:5a <5b> <5b> <005b> % bracketleft dec: 91 oct:133 hex:5b <5c> <5c> <005c> % backslash dec: 92 oct:134 hex:5c <5d> <5d> <005d> % bracketright dec: 93 oct:135 hex:5d <5e> <5e> <005e> % asciicircum dec: 94 oct:136 hex:5e <5f> <5f> <005f> % underscore dec: 95 oct:137 hex:5f <60> <60> <0060> % grave dec: 96 oct:140 hex:60 <61> <61> <0061> % a dec: 97 oct:141 hex:61 <62> <62> <0062> % b dec: 98 oct:142 hex:62 <63> <63> <0063> % c dec: 99 oct:143 hex:63 <64> <64> <0064> % d dec:100 oct:144 hex:64 <65> <65> <0065> % e dec:101 oct:145 hex:65 <66> <66> <0066> % f dec:102 oct:146 hex:66 <67> <67> <0067> % g dec:103 oct:147 hex:67 <68> <68> <0068> % h dec:104 oct:150 hex:68 <69> <69> <0069> % i dec:105 oct:151 hex:69 <6a> <6a> <006a> % j dec:106 oct:152 hex:6a <6b> <6b> <006b> % k dec:107 oct:153 hex:6b <6c> <6c> <006c> % l dec:108 oct:154 hex:6c <6d> <6d> <006d> % m dec:109 oct:155 hex:6d <6e> <6e> <006e> % n dec:110 oct:156 hex:6e <6f> <6f> <006f> % o dec:111 oct:157 hex:6f <70> <70> <0070> % p dec:112 oct:160 hex:70 <71> <71> <0071> % q dec:113 oct:161 hex:71 <72> <72> <0072> % r dec:114 oct:162 hex:72 <73> <73> <0073> % s dec:115 oct:163 hex:73 <74> <74> <0074> % t dec:116 oct:164 hex:74 <75> <75> <0075> % u dec:117 oct:165 hex:75 <76> <76> <0076> % v dec:118 oct:166 hex:76 <77> <77> <0077> % w dec:119 oct:167 hex:77 <78> <78> <0078> % x dec:120 oct:170 hex:78 <79> <79> <0079> % y dec:121 oct:171 hex:79 <7a> <7a> <007a> % z dec:122 oct:172 hex:7a <7b> <7b> <007b> % braceleft dec:123 oct:173 hex:7b <7c> <7c> <007c> % bar dec:124 oct:174 hex:7c <7d> <7d> <007d> % braceright dec:125 oct:175 hex:7d <7e> <7e> <007e> % asciitilde dec:126 oct:176 hex:7e <00a0> % nbspace dec:160 oct:240 hex:a0 <0104> % Aogonek dec:161 oct:241 hex:a1 <00a2> % breve dec:162 oct:242 hex:a2 <00a3> % Lslash dec:163 oct:243 hex:a3 <00a4> % currency dec:164 oct:244 hex:a4 <013d> % Lcaron dec:165 oct:245 hex:a5 <015a> % Sacute dec:166 oct:246 hex:a6 <00a7> % section dec:167 oct:247 hex:a7 <00a8> % dieresis dec:168 oct:250 hex:a8 <0160> % Scaron dec:169 oct:251 hex:a9 <015e> % Scedilla dec:170 oct:252 hex:aa <0164> % Tcaron dec:171 oct:253 hex:ab <0179> % Zacute dec:172 oct:254 hex:ac <00ad> % sfthyphen dec:173 oct:255 hex:ad <017d> % Zcaron dec:174 oct:256 hex:ae <00af> % Zdotaccent dec:175 oct:257 hex:af <00b0> % ring dec:176 oct:260 hex:b0 <0105> % aogonek dec:177 oct:261 hex:b1 <00b2> % ogonek dec:178 oct:262 hex:b2 <00b3> % lslash dec:179 oct:263 hex:b3 <00b4> % acute dec:180 oct:264 hex:b4 <013e> % lcaron dec:181 oct:265 hex:b5 <015b> % sacute dec:182 oct:266 hex:b6 <00b7> % caron dec:183 oct:267 hex:b7 <00b8> % cedilla dec:184 oct:270 hex:b8 <0161> % scaron dec:185 oct:271 hex:b9 <015f> % scedilla dec:186 oct:272 hex:ba <0165> % tcaron dec:187 oct:273 hex:bb <017a> % zacute dec:188 oct:274 hex:bc <00bd> % hungarumlaut dec:189 oct:275 hex:bd <017e> % zcaron dec:190 oct:276 hex:be <00bf> % zdotaccent dec:191 oct:277 hex:bf <0154> % Racute dec:192 oct:300 hex:c0 <00c1> % Aacute dec:193 oct:301 hex:c1 <00c2> % Acircumflex dec:194 oct:302 hex:c2 <0102> % Abreve dec:195 oct:303 hex:c3 <00c4> % Adieresis dec:196 oct:304 hex:c4 <0139> % Lacute dec:197 oct:305 hex:c5 <0106> % Cacute dec:198 oct:306 hex:c6 <00c7> % Ccedilla dec:199 oct:307 hex:c7 <010c> % Ccaron dec:200 oct:310 hex:c8 <00c9> % Eacute dec:201 oct:311 hex:c9 <0118> % Eogonek dec:202 oct:312 hex:ca <00cb> % Edieresis dec:203 oct:313 hex:cb <011a> % Ecaron dec:204 oct:314 hex:cc <00cd> % Iacute dec:205 oct:315 hex:cd <00ce> % Icircumflex dec:206 oct:316 hex:ce <010e> % Dcaron dec:207 oct:317 hex:cf <00d0> % Dslash dec:208 oct:320 hex:d0 <0143> % Nacute dec:209 oct:321 hex:d1 <0147> % Ncaron dec:210 oct:322 hex:d2 <00d3> % Oacute dec:211 oct:323 hex:d3 <00d4> % Ocircumflex dec:212 oct:324 hex:d4 <00d5> % Ohungarumlaut dec:213 oct:325 hex:d5 <00d6> % Odieresis dec:214 oct:326 hex:d6 <00d7> % multiply dec:215 oct:327 hex:d7 <0158> % Rcaron dec:216 oct:330 hex:d8 <016e> % Uring dec:217 oct:331 hex:d9 <00da> % Uacute dec:218 oct:332 hex:da <00db> % Uhungarumlaut dec:219 oct:333 hex:db <00dc> % Udieresis dec:220 oct:334 hex:dc
<00dd> % Yacute dec:221 oct:335 hex:dd <00de> % Tcommaaccent dec:222 oct:336 hex:de <00df> % germandbls dec:223 oct:337 hex:df <0155> % racute dec:224 oct:340 hex:e0 <00e1> % aacute dec:225 oct:341 hex:e1 <00e2> % acircumflex dec:226 oct:342 hex:e2 <0103> % abreve dec:227 oct:343 hex:e3 <00e4> % adieresis dec:228 oct:344 hex:e4 <013a> % lacute dec:229 oct:345 hex:e5 <0107> % cacute dec:230 oct:346 hex:e6 <00e7> % ccedilla dec:231 oct:347 hex:e7 <010d> % ccaron dec:232 oct:350 hex:e8 <00e9> % eacute dec:233 oct:351 hex:e9 <0119> % eogonek dec:234 oct:352 hex:ea <00eb> % edieresis dec:235 oct:353 hex:eb <011b> % ecaron dec:236 oct:354 hex:ec <00ed> % iacute dec:237 oct:355 hex:ed <00ee> % icircumflex dec:238 oct:356 hex:ee <010f> % dcaron dec:239 oct:357 hex:ef <00f0> % dmacron dec:240 oct:360 hex:f0 <0144> % nacute dec:241 oct:361 hex:f1 <0148> % ncaron dec:242 oct:362 hex:f2 <00f3> % oacute dec:243 oct:363 hex:f3 <00f4> % ocircumflex dec:244 oct:364 hex:f4 <00f5> % ohungarumlaut dec:245 oct:365 hex:f5 <00f6> % odieresis dec:246 oct:366 hex:f6 <00f7> % divide dec:247 oct:367 hex:f7 <0159> % rcaron dec:248 oct:370 hex:f8 <016f> % uring dec:249 oct:371 hex:f9 <00fa> % uacute dec:250 oct:372 hex:fa <00fb> % uhungarumlaut dec:251 oct:373 hex:fb <00fc> % udieresis dec:252 oct:374 hex:fc <00fd> % yacute dec:253 oct:375 hex:fd <00fe> % tcommaaccent dec:254 oct:376 hex:fe <00ff> % dotaccent dec:255 oct:377 hex:ff endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \stoppdffontresource \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-tag.lua0000644000175000017500000003157512130411274024104 0ustar norbertnorbertif not modules then modules = { } end modules ['math-tag'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- use lpeg matchers local find, match = string.find, string.match local insert, remove = table.insert, table.remove local attributes, nodes = attributes, nodes local set_attributes = nodes.setattributes local traverse_nodes = node.traverse local nodecodes = nodes.nodecodes local math_noad_code = nodecodes.noad -- attr nucleus sub sup local math_accent_code = nodecodes.accent -- attr nucleus sub sup accent local math_radical_code = nodecodes.radical -- attr nucleus sub sup left degree local math_fraction_code = nodecodes.fraction -- attr nucleus sub sup left right local math_box_code = nodecodes.subbox -- attr list local math_sub_code = nodecodes.submlist -- attr list local math_char_code = nodecodes.mathchar -- attr fam char local math_textchar_code = nodecodes.mathtextchar -- attr fam char local math_delim_code = nodecodes.delim -- attr small_fam small_char large_fam large_char local math_style_code = nodecodes.style -- attr style local math_choice_code = nodecodes.choice -- attr display text script scriptscript local math_fence_code = nodecodes.fence -- attr subtype local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue local a_tagged = attributes.private('tagged') local a_exportstatus = attributes.private('exportstatus') local a_mathcategory = attributes.private('mathcategory') local a_mathmode = attributes.private('mathmode') local tags = structures.tags local start_tagged = tags.start local restart_tagged = tags.restart local stop_tagged = tags.stop local taglist = tags.taglist local chardata = characters.data local getmathcode = tex.getmathcode local mathcodes = mathematics.codes local ordinary_code = mathcodes.ordinary local variable_code = mathcodes.variable local process local function processsubsup(start) -- At some point we might need to add an attribute signaling the -- super- and subscripts because TeX and MathML use a different -- order. local nucleus, sup, sub = start.nucleus, start.sup, start.sub if sub then if sup then start[a_tagged] = start_tagged("msubsup") process(nucleus) process(sub) process(sup) stop_tagged() else start[a_tagged] = start_tagged("msub") process(nucleus) process(sub) stop_tagged() end elseif sup then start[a_tagged] = start_tagged("msup") process(nucleus) process(sup) stop_tagged() else process(nucleus) end end -- todo: check function here and keep attribute the same -- todo: variants -> original local actionstack = { } process = function(start) -- we cannot use the processor as we have no finalizers (yet) while start do local id = start.id if id == math_char_code then local char = start.char -- check for code local a = start[a_mathcategory] if a then a = { detail = a } end local code = getmathcode(char) if code then code = code[1] end local tag if code == ordinary_code or code == variable_code then local ch = chardata[char] local mc = ch and ch.mathclass if mc == "number" then tag = "mn" elseif mc == "variable" or not mc then -- variable is default tag = "mi" else tag = "mo" end else tag = "mo" end start[a_tagged] = start_tagged(tag,a) stop_tagged() break -- okay? elseif id == math_textchar_code then -- check for code local a = start[a_mathcategory] if a then start[a_tagged] = start_tagged("ms",{ detail = a }) else start[a_tagged] = start_tagged("ms") end stop_tagged() break elseif id == math_delim_code then -- check for code start[a_tagged] = start_tagged("mo") stop_tagged() break elseif id == math_style_code then -- has a next elseif id == math_noad_code then processsubsup(start) elseif id == math_box_code or id == hlist_code or id == vlist_code then -- keep an eye on math_box_code and see what ends up in there local attr = start[a_tagged] local last = attr and taglist[attr] if last and find(last[#last],"formulacaption[:%-]") then -- leave alone, will nicely move to the outer level else local text = start_tagged("mtext") start[a_tagged] = text local list = start.list if not list then -- empty list elseif not attr then -- box comes from strange place set_attributes(list,a_tagged,text) else -- Beware, the first node in list is the actual list so we definitely -- need to nest. This approach is a hack, maybe I'll make a proper -- nesting feature to deal with this at another level. Here we just -- fake structure by enforcing the inner one. local tagdata = taglist[attr] local common = #tagdata + 1 local function runner(list) -- quite inefficient local cache = { } -- we can have nested unboxed mess so best local to runner for n in traverse_nodes(list) do local id = n.id local aa = n[a_tagged] if aa then local ac = cache[aa] if not ac then local tagdata = taglist[aa] local extra = #tagdata if common <= extra then for i=common,extra do ac = restart_tagged(tagdata[i]) -- can be made faster end for i=common,extra do stop_tagged() -- can be made faster end else ac = text end cache[aa] = ac end n[a_tagged] = ac else n[a_tagged] = text end if id == hlist_code or id == vlist_code then runner(n.list) end end end runner(list) end stop_tagged() end elseif id == math_sub_code then local list = start.list if list then local attr = start[a_tagged] local last = attr and taglist[attr] local action = last and match(last[#last],"maction:(.-)%-") if action and action ~= "" then if actionstack[#actionstack] == action then start[a_tagged] = start_tagged("mrow") process(list) stop_tagged() else insert(actionstack,action) start[a_tagged] = start_tagged("mrow",{ detail = action }) process(list) stop_tagged() remove(actionstack) end else start[a_tagged] = start_tagged("mrow") process(list) stop_tagged() end end elseif id == math_fraction_code then local num, denom, left, right = start.num, start.denom, start.left, start.right if left then left[a_tagged] = start_tagged("mo") process(left) stop_tagged() end start[a_tagged] = start_tagged("mfrac") process(num) process(denom) stop_tagged() if right then right[a_tagged] = start_tagged("mo") process(right) stop_tagged() end elseif id == math_choice_code then local display, text, script, scriptscript = start.display, start.text, start.script, start.scriptscript if display then process(display) end if text then process(text) end if script then process(script) end if scriptscript then process(scriptscript) end elseif id == math_fence_code then local delim = start.delim local subtype = start.subtype if subtype == 1 then -- left start[a_tagged] = start_tagged("mfenced") if delim then start[a_tagged] = start_tagged("mleft") process(delim) stop_tagged() end elseif subtype == 2 then -- middle if delim then start[a_tagged] = start_tagged("mmiddle") process(delim) stop_tagged() end elseif subtype == 3 then if delim then start[a_tagged] = start_tagged("mright") process(delim) stop_tagged() end stop_tagged() else -- can't happen end elseif id == math_radical_code then local left, degree = start.left, start.degree if left then start_tagged("") process(left) -- root symbol, ignored stop_tagged() end if degree then -- not good enough, can be empty mlist start[a_tagged] = start_tagged("mroot") processsubsup(start) process(degree) stop_tagged() else start[a_tagged] = start_tagged("msqrt") processsubsup(start) stop_tagged() end elseif id == math_accent_code then local accent, bot_accent = start.accent, start.bot_accent if bot_accent then if accent then start[a_tagged] = start_tagged("munderover",{ detail = "accent" }) processsubsup(start) process(bot_accent) process(accent) stop_tagged() else start[a_tagged] = start_tagged("munder",{ detail = "accent" }) processsubsup(start) process(bot_accent) stop_tagged() end elseif accent then start[a_tagged] = start_tagged("mover",{ detail = "accent" }) processsubsup(start) process(accent) stop_tagged() else processsubsup(start) end elseif id == glue_code then start[a_tagged] = start_tagged("mspace") stop_tagged() else start[a_tagged] = start_tagged("merror", { detail = nodecodes[i] }) stop_tagged() end start = start.next end end function noads.handlers.tags(head,style,penalties) local v_math = start_tagged("math") local v_mrow = start_tagged("mrow") local v_mode = head[a_mathmode] head[a_tagged] = v_math head[a_tagged] = v_mrow tags.setattributehash(v_math,"mode",v_mode == 1 and "display" or "inline") process(head) stop_tagged() stop_tagged() return true end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-70.mkiv0000644000175000017500000001017211754241457024046 0ustar norbertnorbert%D \module %D [ file=s-pre-70, %D version=2008.04.15, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 70, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 At the cost of more runtime and a larger output file, we %D turn on randomization. The instances are cached in the %D MkIV cache, so successive runs use the same shapes. % \usemodule[punk] \usetypescript[punk] \setupbodyfont[punk,20pt] % % \EnableRandomPunk \setupbodyfont[punknova,20pt] % we now use the opentype variant %D We use the regular screen size paper and layout setup. \setuppapersize [S6][S6] \setuplayout [topspace=30pt, backspace=30pt, width=middle, height=fit, header=0pt, footer=0pt, bottomdistance=24pt, bottom=30pt, bottom=18pt, top=0pt] \setupinterlinespace [top=height, line=1.25\bodyfontsize] \setupcolors [state=start, textcolor=white] \setupinteraction [state=start, %click=off, menu=on] %D We predefine a few palets. Of course you can define more. \definecolor[punkblue] [r=.4,b=.8,g=.4] \definecolor[punkgreen] [r=.4,b=.4,g=.8] \definecolor[punkred] [r=.8,b=.4,g=.4] \definecolor[punkyellow][r=.6,g=.6,b=.2] \definepalet [punk-one] [textcolor=punkblue,pagecolor=punkgreen] \definepalet [punk-two] [textcolor=punkred,pagecolor=punkyellow] \definepalet [punk-three] [textcolor=punkblue,pagecolor=punkyellow] \definepalet [punk-one-reverse] [textcolor=punkgreen,pagecolor=punkblue] \definepalet [punk-two-reverse] [textcolor=punkyellow,pagecolor=punkred] \definepalet [punk-three-reverse] [textcolor=punkyellow,pagecolor=punkblue] \setuppalet[punk-one] %D We use a few backgrounds. The hyperlink that invokes the %D stepper is hooked into the text background. \definelayer [page] [width=\paperwidth, height=\paperheight] \setupbackgrounds [page] [background={color,page}, backgroundcolor=pagecolor, setups=pagestuff] \setupbackgrounds [text] [background={color,invoke}, backgroundoffset=12pt, backgroundcolor=textcolor] %D We need different symbols for itemized lists. \definesymbol[1][\hbox{\lower1ex\hbox{*}}] \definesymbol[2][\endash] \definesymbol[3][\letterhash] \definesymbol[3][>] %D We don't want these reversed clicked areas in Acrobat. \setupinteraction [click=no, color=white, % pagecolor, contrastcolor=white] % pagecolor, %D We define a rather simple navigational panel at the %D bottom \setupinteractionmenu [bottom] [color=white, % pagecolor, contrastcolor=white, % pagecolor, background=color, backgroundcolor=textcolor, frame=off, height=24pt, left=\hfill, middle=\hskip12pt] \setupsubpagenumber [state=start] \startinteractionmenu[bottom] \starttxt \interactionbar [alternative=d, symbol=yes, color=white, contrastcolor=textcolor] \stoptxt \hfilll \startbut [previouspage] < < < \stopbut \startbut [nextpage] > > > \stopbut \stopinteractionmenu %D Instead of the normal symbols we use more punky ones. \startsymbolset [punk] \definesymbol[previous] [\string<\string<] \definesymbol[somewhere] [\string^\string^] \definesymbol[next] [\string>\string>] \stopsymbolset \setupinteraction[symbolset=punk] %D Because the font is rather large, we use less whitespace. \setuphead [chapter] [after={\blank[big]}] %D Run this file with the command: \type {context --mode=demo s-pre-70} %D in order to get an example. \continueifinputfile{s-pre-70.mkiv} \usemodule[pre-60] % use the stepper \starttext \title {Punk for dummies} \dorecurse{10} { \title{Just a few dummy pages} \StartSteps \startitemize[packed] \startitem bla \FlushStep \stopitem \startitem bla bla \FlushStep \stopitem \startitem bla bla bla \FlushStep \stopitem \startitem bla bla bla bla \FlushStep \stopitem \stopitemize \StopSteps } \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-lat.mkii0000644000175000017500000000327211754241457024327 0ustar norbertnorbert%D \module %D [ file=syst-ltx, %D version=2009.10.13, %D title=\CONTEXT\ System Macros, %D subtitle=General, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The bib module assumes that sometimes this command is used but %D in \MKIV\ we no longer assume that. %D %D \macros %D {newcommand} %D %D This module replaces \type {t-bibltx} and implements the %D \LATEX\ newcommand (sort of). This command is not to be %D used directly but only is there for the occasional %D \BIBTEX\ file that uses it. %D %D \starttyping %D \newcommand\oeps {oeps} %D \newcommand\oeps[6] {oeps[#1]#6} %D \newcommand\oeps[6][whatever]{oeps[#1]#6} %D \stoptyping \unprotect \def\newcommand#1% {\dotripleempty\donewcommand[#1]} \def\donewcommand {\ifthirdargument \expandafter\donewcommandtwo \else\ifsecondargument \expandafter\expandafter\expandafter\donewcommandone \else \expandafter\expandafter\expandafter\donewcommandzero \fi\fi} \def\donewcommandzero[#1][#2][#3]% {\long\def#1} \def\donewcommandone[#1][#2][#3]% {\scratchtoks{\long\def#1}% \dorecurse{#2}{\scratchtoks\expandafter{\the\scratchtoks######1}}% \the\scratchtoks} \def\donewcommandtwo[#1][#2][#3]% {\long\def#1{\doifnextcharelse[{\getvalue{>>\string#1>>}}{\getvalue{>>\string#1>>}[#3]}}% \scratchtoks{\long\setvalue{>>\string#1>>}[##1]}% \dostepwiserecurse{2}{#2}{1}{\scratchtoks\expandafter{\the\scratchtoks######1}}% \the\scratchtoks} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua0000644000175000017500000003622612161703335026401 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-swiglib'] = { version = 1.001, comment = "companion to util-sql.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- As the regular library is flawed (i.e. there are crashes in the table -- construction code) and also not that efficient, Luigi Scarso looked into -- a swig binding. This is a bit more low level approach but as we stay -- closer to the original library it's also less dependant. local concat = table.concat local format = string.format local lpegmatch = lpeg.match local setmetatable, type = setmetatable, type local sleep = os.sleep local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end) local trace_queries = false trackers.register("sql.queries",function(v) trace_queries = v end) local report_state = logs.reporter("sql","swiglib") local sql = utilities.sql local mysql = require("swiglib.mysql.core") -- "5.6" ----- mysql = swiglib("mysql.core") -- "5.6" -- inspect(table.sortedkeys(mysql)) local nofretries = 5 local retrydelay = 1 local cache = { } local helpers = sql.helpers local methods = sql.methods local validspecification = helpers.validspecification local querysplitter = helpers.querysplitter local dataprepared = helpers.preparetemplate local serialize = sql.serialize local deserialize = sql.deserialize local mysql_initialize = mysql.mysql_init local mysql_open_connection = mysql.mysql_real_connect local mysql_execute_query = mysql.mysql_real_query local mysql_close_connection = mysql.mysql_close local mysql_field_seek = mysql.mysql_field_seek local mysql_num_fields = mysql.mysql_num_fields local mysql_fetch_field = mysql.mysql_fetch_field local mysql_num_rows = mysql.mysql_num_rows local mysql_fetch_row = mysql.mysql_fetch_row local mysql_fetch_lengths = mysql.mysql_fetch_lengths local mysql_init = mysql.mysql_init local mysql_store_result = mysql.mysql_store_result local mysql_free_result = mysql.mysql_free_result local mysql_use_result = mysql.mysql_use_result local mysql_error_message = mysql.mysql_error local mysql_options_argument = mysql.mysql_options_argument local instance = mysql.MYSQL() local mysql_constant_false = false local mysql_constant_true = true -- if mysql_options_argument then -- -- mysql_constant_false = mysql_options_argument(false) -- 0 "\0" -- mysql_constant_true = mysql_options_argument(true) -- 1 "\1" -- -- -- print(swig_type(mysql_constant_false)) -- -- print(swig_type(mysql_constant_true)) -- -- mysql.mysql_options(instance,mysql.MYSQL_OPT_RECONNECT,mysql_constant_true); -- -- else -- -- print("") -- print("incomplete swiglib.mysql interface") -- print("") -- -- end local typemap = mysql.MYSQL_TYPE_VAR_STRING and { [mysql.MYSQL_TYPE_VAR_STRING ] = "string", [mysql.MYSQL_TYPE_STRING ] = "string", [mysql.MYSQL_TYPE_DECIMAL ] = "number", [mysql.MYSQL_TYPE_SHORT ] = "number", [mysql.MYSQL_TYPE_LONG ] = "number", [mysql.MYSQL_TYPE_FLOAT ] = "number", [mysql.MYSQL_TYPE_DOUBLE ] = "number", [mysql.MYSQL_TYPE_LONGLONG ] = "number", [mysql.MYSQL_TYPE_INT24 ] = "number", [mysql.MYSQL_TYPE_YEAR ] = "number", [mysql.MYSQL_TYPE_TINY ] = "number", [mysql.MYSQL_TYPE_TINY_BLOB ] = "binary", [mysql.MYSQL_TYPE_MEDIUM_BLOB] = "binary", [mysql.MYSQL_TYPE_LONG_BLOB ] = "binary", [mysql.MYSQL_TYPE_BLOB ] = "binary", [mysql.MYSQL_TYPE_DATE ] = "date", [mysql.MYSQL_TYPE_NEWDATE ] = "date", [mysql.MYSQL_TYPE_DATETIME ] = "datetime", [mysql.MYSQL_TYPE_TIME ] = "time", [mysql.MYSQL_TYPE_TIMESTAMP ] = "time", [mysql.MYSQL_TYPE_ENUM ] = "set", [mysql.MYSQL_TYPE_SET ] = "set", [mysql.MYSQL_TYPE_NULL ] = "null", } -- real_escape_string local function finish(t) local r = t._result_ if r then mysql_free_result(r) end end -- will become metatable magic -- local function analyze(result) -- mysql_field_seek(result,0) -- local nofrows = mysql_num_rows(result) or 0 -- local noffields = mysql_num_fields(result) -- local names = { } -- local types = { } -- for i=1,noffields do -- local field = mysql_fetch_field(result) -- names[i] = field.name -- types[i] = field.type -- end -- return names, types, noffields, nofrows -- end local function getcolnames(t) return t.names end local function getcoltypes(t) return t.types end local function numrows(t) return t.nofrows end -- swig_type -- local ulongArray_getitem = mysql.ulongArray_getitem -- local util_getbytearray = mysql.util_getbytearray -- local function list(t) -- local result = t._result_ -- local row = mysql_fetch_row(result) -- local len = mysql_fetch_lengths(result) -- local result = { } -- for i=1,t.noffields do -- local r = i - 1 -- zero offset -- result[i] = util_getbytearray(row,r,ulongArray_getitem(len,r)) -- end -- return result -- end -- local function hash(t) -- local list = util_mysql_fetch_fields_from_current_row(t._result_) -- local result = t._result_ -- local fields = t.names -- local row = mysql_fetch_row(result) -- local len = mysql_fetch_lengths(result) -- local result = { } -- for i=1,t.noffields do -- local r = i - 1 -- zero offset -- result[fields[i]] = util_getbytearray(row,r,ulongArray_getitem(len,r)) -- end -- return result -- end local util_mysql_fetch_fields_from_current_row = mysql.util_mysql_fetch_fields_from_current_row local util_mysql_fetch_all_rows = mysql.util_mysql_fetch_all_rows local function list(t) return util_mysql_fetch_fields_from_current_row(t._result_) end local function hash(t) local list = util_mysql_fetch_fields_from_current_row(t._result_) local fields = t.names local data = { } for i=1,t.noffields do data[fields[i]] = list[i] end return data end local function wholelist(t) return util_mysql_fetch_all_rows(t._result_) end local mt = { __index = { -- regular finish = finish, list = list, hash = hash, wholelist = wholelist, -- compatibility numrows = numrows, getcolnames = getcolnames, getcoltypes = getcoltypes, -- fallback _result_ = nil, names = { }, types = { }, noffields = 0, nofrows = 0, } } local nt = setmetatable({},mt) -- session local function close(t) mysql_close_connection(t._connection_) end local function execute(t,query) if query and query ~= "" then local connection = t._connection_ local result = mysql_execute_query(connection,query,#query) if result == 0 then local result = mysql_store_result(connection) if result then mysql_field_seek(result,0) local nofrows = mysql_num_rows(result) or 0 local noffields = mysql_num_fields(result) local names = { } local types = { } for i=1,noffields do local field = mysql_fetch_field(result) names[i] = field.name types[i] = field.type end local t = { _result_ = result, names = names, types = types, noffields = noffields, nofrows = nofrows, } return setmetatable(t,mt) else return nt end end end return false end local mt = { __index = { close = close, execute = execute, } } local function open(t,database,username,password,host,port) local connection = mysql_open_connection(t._session_,host or "localhost",username or "",password or "",database or "",port or 0,0,0) if connection then local t = { _connection_ = connection, } return setmetatable(t,mt) end end local function message(t) return mysql_error_message(t._session_) end local function close(t) -- dummy, as we have a global session end local mt = { __index = { connect = open, close = close, message = message, } } local function initialize() local session = { _session_ = mysql_initialize(instance) -- maybe share, single thread anyway } return setmetatable(session,mt) end -- -- -- -- local function connect(session,specification) return session:connect( specification.database or "", specification.username or "", specification.password or "", specification.host or "", specification.port ) end local function error_in_connection(specification,action) report_state("error in connection: [%s] %s@%s to %s:%s", action or "unknown", specification.database or "no database", specification.username or "no username", specification.host or "no host", specification.port or "no port" ) end local function datafetched(specification,query,converter) if not query or query == "" then report_state("no valid query") return { }, { } end local id = specification.id local session, connection if id then local c = cache[id] if c then session = c.session connection = c.connection end if not connection then session = initialize() connection = connect(session,specification) if not connection then for i=1,nofretries do sleep(retrydelay) report_state("retrying to connect: [%s.%s] %s@%s to %s:%s", id,i, specification.database or "no database", specification.username or "no username", specification.host or "no host", specification.port or "no port" ) connection = connect(session,specification) if connection then break end end end if connection then cache[id] = { session = session, connection = connection } end end else session = initialize() connection = connect(session,specification) if not connection then for i=1,nofretries do sleep(retrydelay) report_state("retrying to connect: [%s] %s@%s to %s:%s", i, specification.database or "no database", specification.username or "no username", specification.host or "no host", specification.port or "no port" ) connection = connect(session,specification) if connection then break end end end end if not connection then report_state("error in connection: %s@%s to %s:%s", specification.database or "no database", specification.username or "no username", specification.host or "no host", specification.port or "no port" ) return { }, { } end query = lpegmatch(querysplitter,query) local result, message, okay for i=1,#query do local q = query[i] local r, m = connection:execute(q) if m then report_state("error in query, stage: %s",string.collapsespaces(q)) message = message and format("%s\n%s",message,m) or m end if type(r) == "table" then result = r okay = true elseif not m then okay = true end end local data, keys if result then if converter then data = converter.swiglib(result) else keys = result.names data = { } for i=1,result.nofrows do data[i] = result:hash() end end result:finish() -- result:close() elseif message then report_state("message %s",message) end if not keys then keys = { } end if not data then data = { } end if not id then connection:close() session:close() end return data, keys end local function execute(specification) if trace_sql then report_state("executing library") end if not validspecification(specification) then report_state("error in specification") return end local query = dataprepared(specification) if not query then report_state("error in preparation") return end local data, keys = datafetched(specification,query,specification.converter) if not data then report_state("error in fetching") return end local one = data[1] if one then setmetatable(data,{ __index = one } ) end return data, keys end local wraptemplate = [[ local mysql = require("swigluamysql") -- will be stored in method ----- mysql_fetch_row = mysql.mysql_fetch_row ----- mysql_fetch_lengths = mysql.mysql_fetch_lengths ----- util_unpackbytearray = mysql.util_unpackbytearray local util_mysql_fetch_fields_from_current_row = mysql.util_mysql_fetch_fields_from_current_row local converters = utilities.sql.converters local deserialize = utilities.sql.deserialize local tostring = tostring local tonumber = tonumber local booleanstring = string.booleanstring %s return function(result) if not result then return { } end local nofrows = result.nofrows or 0 if nofrows == 0 then return { } end local noffields = result.noffields or 0 local target = { } -- no %s needed here result = result._result_ for i=1,nofrows do -- local row = mysql_fetch_row(result) -- local len = mysql_fetch_lengths(result) -- local cells = util_unpackbytearray(row,noffields,len) local cells = util_mysql_fetch_fields_from_current_row(result) target[%s] = { %s } end return target end ]] local celltemplate = "cells[%s]" methods.swiglib = { runner = function() end, -- never called execute = execute, initialize = initialize, -- returns session usesfiles = false, wraptemplate = wraptemplate, celltemplate = celltemplate, } context-2013.05.28.20130704/texmf-dist/tex/context/base/back-swf.mkiv0000644000175000017500000000467012130411274024260 0ustar norbertnorbert%D \module %D [ file=back-swf, %D version=2009.12.31, %D title=\CONTEXT\ Backend Macros, %D subtitle=Shockwave Experiment, %D author=Hans Hagen \& Luigi Scarso, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is only a placeholder that demonstrates the usage of swf resources. %D There is no need to include this file into the format. The module was %D tested by Luigi and Willi and based on their suggestions the functionality %D was improved. %D %D \starttyping %D \enabletrackers[graphics.locating] %D \enabletrackers[backend.swf] %D %D \startluaparameterset [swf:relative:resources] %D relativepaths = { %D "assets" %D } %D \stopluaparameterset %D %D \startluaparameterset[swf:relative:display] %D toolbar = true, %D preview = "images/posterframes/*.jpg", -- relative to assets %D open = "click", %D close = "focus", %D \stopluaparameterset %D %D \startTEXpage %D \externalfigure %D [whatever.swf] %D [resources=swf:relative:resources, %D display=swf:relative:display] %D \stopTEXpage %D \stoptyping \endinput \starttext \startluaparameterset [swf:myset:display:1] toolbar = true, preview = "assets/images/posterframes/SPT_14-16_Ra_01_PN_LE01_02_DoLikeMeLater_posterframe.jpg", -- preview = "t:/sources/cow.pdf", -- preview = "t:/sources/hacker.jpg", open = "click", -- click page focus close = "focus", -- click page focus \stopluaparameterset \startluaparameterset [swf:myset:resources:1] paths = { "assets" }, files = { -- "somename_1" -- "somename_1" } \stopluaparameterset \startluaparameterset [swf:dolikemelater:resources] paths = { "assets" }, \stopluaparameterset % preview=swf:myset:display:1 % controls=swf:myset:controls:1 % resources=swf:myset:resources:1 \placefigure {flash demo} {\startcombination[2*2] {\externalfigure[trasf1.swf][width=0.45\textwidth,height=0.25\textheight]} {one} {\externalfigure[trasf2.swf][width=0.45\textwidth,height=0.25\textheight]} {two} {\externalfigure[trasf3.swf][width=0.45\textwidth,height=0.25\textheight]} {three} {\externalfigure[trasf4.swf][width=0.45\textwidth,height=0.25\textheight]} {four} \stopcombination} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/context.mkii0000644000175000017500000002363612132111075024233 0ustar norbertnorbert %D \module %D [ file=context, %D version=2008.28.10, % 1995.10.10, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 %D From the next string (which is set by the script that assembles the %D distribution) later on we will calculate a number that can be used %D by use modules to identify the feature level. Starting with version %D 2004.8.30 the low level interface is english. Watch out and adapt %D your styles an modules. \edef\contextformat {\jobname} \edef\contextversion{2013.04.09 10:38} %D For those who want to use this: \let\fmtname \contextformat \let\fmtversion\contextversion %D Loading: \edef\mksuffix {mkii} \edef\contextmark{MKII} \ifx\normalinput\undefined \let\normalinput\input \fi \def\loadcorefile#1{\normalinput#1\relax} \def\loadmarkfile#1{\normalinput#1.\mksuffix\relax} \def\loadmkiifile#1{\normalinput#1\relax} \def\loadmkivfile#1{} %D First we load the system modules. These implement a lot of %D manipulation macros. The first one loads \PLAIN\ \TEX, as %D minimal as possible. \loadmarkfile{syst-ini} %D Some checking (more primitives are now defined): \ifdefined\defaultinterface \else \def\defaultinterface {english} \fi %ifdefined\messageinterface \else \let\messageinterface \defaultinterface \fi \ifdefined\defaultlanguagetag \else \def\defaultlanguagetag{en} \fi %D More core code. \loadmarkfile{syst-pln} \loadmarkfile{norm-tex} \loadmarkfile{norm-etx} \loadmarkfile{norm-ptx} \loadmarkfile{norm-xtx} \loadmarkfile{norm-ctx} \loadmarkfile{catc-ini} \loadmarkfile{catc-act} \loadmarkfile{catc-def} \loadmarkfile{catc-ctx} \loadmarkfile{catc-sym} \loadmarkfile{catc-xml} \loadmarkfile{syst-gen} \loadmarkfile{syst-ext} \loadmarkfile{syst-new} \loadmarkfile{syst-con} \loadmarkfile{thrd-trg} % based on: David Carlisle \loadmarkfile{syst-fnt} \loadmarkfile{syst-str} \loadmarkfile{syst-rtp} \ifnum\texengine=\xetexengine \loadmarkfile{xetx-ini} \loadmarkfile{xetx-utf} \loadmarkfile{xetx-chr} \loadmarkfile{xetx-cls} \fi %D To enable selective loading, we say: \newif\ifCONTEXT \CONTEXTtrue % will disappear %D In order to conveniently load files, we need a few %D support modules. \loadmarkfile{supp-fil} \loadmarkfile{supp-dir} %D This is for mkii bibtex users who expect \LATEX\ commands. \loadmarkfile{supp-lat} %D After this we're ready for the multi||lingual interface %D modules. \loadmarkfile{mult-ini} \loadmarkfile{mult-fst} \loadmarkfile{mult-sys} \loadmarkfile{mult-def} \loadmarkfile{mult-chk} \loadmarkfile{mult-aux} %D Now we're ready for some general support modules. These %D modules implement some basic typesetting functionality. \loadmarkfile{core-var} \loadmarkfile{core-env} \loadmarkfile{supp-box} \loadmarkfile{supp-mrk} \loadmarkfile{supp-vis} \loadmarkfile{supp-fun} %loadmarkfile{supp-eps} \loadmarkfile{supp-spe} \loadmarkfile{supp-ran} \loadmarkfile{supp-mps} \loadmarkfile{supp-tpi} \loadmarkfile{supp-mat} \loadmarkfile{supp-ali} \loadmarkfile{supp-num} %D Verbatim typesetting is implemented in a separate class of %D modules. The pretty typesetting modules are loaded at run %D time. \loadmarkfile{verb-ini} %D The following modules are not sequentially dependent, %D i.e. they have ugly dependencies, which will be cleaned %D up by adding more overloading. %D When loading the font, color and special modules, we need a %D bit more advanced file handling as well as some general %D variables, and features, so next we load: \loadmarkfile{page-ins} \loadmarkfile{core-fil} \loadmarkfile{core-con} %D We already need some synonyms (patterns). \loadmarkfile{cont-fil} %D \CONTEXT\ does not implement its own table handling. We %D just go for the best there is and load \TABLE. Just to be %D sure we do it here, before we redefine \type{|}. \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. \loadmarkfile{supp-pat} %D The next few modules do what their names state. They %D load additional definition modules when needed. \loadmarkfile{regi-ini} \loadmarkfile{regi-syn} \loadmarkfile{enco-ini} %loadmarkfile{filt-ini} \loadmarkfile{hand-ini} \loadmarkfile{lang-ini} \loadmarkfile{lang-spe} \loadmarkfile{lang-lab} \loadmarkfile{unic-ini} \loadmarkfile{core-gen} \loadmarkfile{core-uti} \loadmarkfile{core-two} \loadmarkfile{core-stg} \loadmarkfile{spec-ini} \loadmarkfile{spec-mis} \loadmarkfile{spec-def} \loadmarkfile{spec-var} \loadmarkfile{colo-ini} \loadmarkfile{colo-ext} %D For the moment we load a lot of languages. In the future %D we'll have to be more space conservative. \loadmarkfile{lang-mis} \loadmarkfile{lang-url} \loadmarkfile{lang-ger} \loadmarkfile{lang-ita} \loadmarkfile{lang-sla} \loadmarkfile{lang-alt} \loadmarkfile{lang-ana} \loadmarkfile{lang-art} \loadmarkfile{lang-bal} \loadmarkfile{lang-cel} \loadmarkfile{lang-grk} \loadmarkfile{lang-ind} \loadmarkfile{lang-ura} \loadmarkfile{lang-vn} \loadmarkfile{lang-cyr} \loadmarkfile{typo-ini} %D All kind of symbols are handled in: \loadmarkfile{symb-ini} %D Sorting: \loadmarkfile{sort-ini} %D Next we load some core macro's. These implement the %D macros' that are seen by the users. The order of loading %D is important, due to dependancies. \loadmarkfile{spac-gen} \loadmarkfile{spac-grd} \loadmarkfile{strc-mar} \loadmarkfile{anch-pos} \loadmarkfile{buff-ver} \loadmarkfile{buff-ini} \loadmarkfile{pack-rul} \loadmarkfile{trac-vis} \loadmarkfile{strc-num} \loadmarkfile{tabl-com} \loadmarkfile{tabl-pln} \loadmarkfile{tabl-tab} \loadmarkfile{tabl-tsp} \loadmarkfile{scrn-nav} \loadmarkfile{strc-ref} \loadmarkfile{pack-obj} \loadmarkfile{strc-lst} \loadmarkfile{strc-itm} \loadmarkfile{strc-des} \loadmarkfile{strc-mat} % should come after math-pln etc \loadmarkfile{strc-syn} \loadmarkfile{core-sys} \loadmarkfile{page-ini} \loadmarkfile{page-bck} \loadmarkfile{page-not} \loadmarkfile{page-one} \loadmarkfile{page-lay} \loadmarkfile{page-log} \loadmarkfile{page-txt} \loadmarkfile{page-sid} \loadmarkfile{strc-flt} \loadmarkfile{page-mis} \loadmarkfile{page-mul} \loadmarkfile{page-set} \loadmarkfile{pack-lyr} \loadmarkfile{page-mak} \loadmarkfile{strc-pag} \loadmarkfile{page-lin} \loadmarkfile{page-par} \loadmarkfile{page-mar} \loadmarkfile{core-job} % why so late? % so far \loadmarkfile{strc-sec} \loadmarkfile{strc-swd} \loadmarkfile{strc-blk} \loadmarkfile{page-imp} \loadmarkfile{tabl-tbl} \loadmarkfile{scrn-int} \loadmarkfile{tabl-ntb} \loadmarkfile{tabl-nte} \loadmarkfile{tabl-ltb} %D A few more languages, that have specifics using core %D functionality: %loadmarkfile{lang-ara} % undefined \loadmarkfile{lang-chi} \loadmarkfile{lang-jap} %D How about fill||in fields and related stuff? \loadmarkfile{java-ini} \loadmarkfile{scrn-fld} \loadmarkfile{scrn-hlp} %D Registers can depend on fields, so we load that now. \loadmarkfile{strc-reg} %D Of course we do need fonts. There are no \TFM\ files %D loaded yet, so the format file is independant of their %D content. Here we also redefine \type{\it} as {\it italic} %D instead of italian. \loadmarkfile{font-ini} \ifnum\texengine=\xetexengine \loadmarkfile{font-xtx} \fi \loadmarkfile{font-unk} \loadmarkfile{font-uni} \loadmarkfile{font-bfm} \loadmarkfile{enco-pfr} \loadmarkfile{type-ini} \loadmarkfile{type-set} \loadmarkfile{type-def} %D Properties. Don't ask. \loadmarkfile{prop-ini} \loadmarkfile{prop-lay} \loadmarkfile{prop-mis} %D Like languages, fonts, encodings and symbols, \METAPOST\ %D support is also organized in its own class of modules. \loadmarkfile{meta-ini} \loadmarkfile{meta-tex} \loadmarkfile{meta-pdf} \loadmarkfile{meta-pag} %D Special page handling (maybe even later) \loadmarkfile{page-flw} \loadmarkfile{page-spr} \loadmarkfile{page-plg} \loadmarkfile{page-str} %D Anchoring graphics: \loadmarkfile{anch-pgr} \loadmarkfile{anch-bar} \loadmarkfile{anch-snc} %D Math. \loadmarkfile{math-pln} \loadmarkfile{math-ini} \loadmarkfile{math-arr} \loadmarkfile{math-frc} %D Now we're ready for more core modules. \loadmarkfile{core-fnt} \loadmarkfile{strc-not} \loadmarkfile{strc-lnt} \loadmarkfile{core-mis} \loadmarkfile{grph-trf} \loadmarkfile{grph-inc} \loadmarkfile{grph-fig} \loadmarkfile{core-par} \loadmarkfile{pack-box} \loadmarkfile{page-app} \loadmarkfile{meta-fig} %D Language specific spacing. \loadmarkfile{lang-spa} %D Bibliographies: \loadmarkfile{bibl-tra} %D Only the basic XML parser and remapper are part of the core. %D These macros are loaded last since they overload and|/|or %D extend previously defined ones. \loadmarkfile{xtag-ini} \loadmarkfile{xtag-ext} \loadmarkfile{xtag-exp} \loadmarkfile{xtag-pre} \loadmarkfile{xtag-xsd} \loadmarkfile{xtag-rng} %D How about this: \loadmarkfile{meta-xml} %D \TEX\ related logo's are always typeset in a special way. %D Here they come: \loadmarkfile{cont-log} %D This one overloads af few things: \loadmarkfile{core-ctx} %D Defaults go here (more will be moved to this module %D later): \loadmarkfile{core-ini} \loadmarkfile{core-def} %D Preloaded modules (some need xml support): %usemodule[x][res-04] % xml resource libraries %usemodule[x][res-08] % rlx runtime conversion \usemodule[x][res-12] % rli external indentification %D At run time, a few more files are loaded, like: %D %D \startitemize[packed] %D \item \type{cont-sys}: local (system dependant) defaults %D \item \type{cont-old}: substitutes for old (obsolete) macros %D \item \type{cont-new}: new macro implementations (for testing) %D \item \type{cont-fil}: filename and module synonyms %D \stopitemize \setupcurrentlanguage[\defaultlanguagetag] \setupencoding[default=ec] \usetypescript[fallback][\defaultencoding] \setupbodyfont[rm,12pt] \errorstopmode \dump \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-pstricks.mkiv0000644000175000017500000000356511754241457024700 0ustar norbertnorbert%D \module %D [ file=m-pstricks, %D version=2010.03.14, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PSTRICKS\ Connections, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{m-pstricks}{} \unprotect % best we can make a special colors module % % \let\@unused\plussixteen % \let\alloc@ \gobblefivearguments % % \def\loadpstrickscolors#1% % {\pushmacro\dodefinecolor % \pushmacro\dodefinepalet % \pushmacro\dodefinecolorgroup % \def\dodefinecolor[##1][##2]% % {\doifassignmentelse{##2} % {\getparameters[pstricks][r=0,g=0,b=0,##2]% % \expanded{\newrgbcolor{##1}{{\pstricksr} {\pstricksg} {\pstricksb}}}}% % {}}% % \def\dodefinepalet [##1][##2]{}% % \def\dodefinecolorgroup[##1][##2][##3]{}% % \writestatus{pstricks}{loading colors from #1}% % \input #1 \relax % \popmacro\dodefinecolorgroup % \popmacro\dodefinepalet % \popmacro\dodefinecolor} % % \input multido \relax % \input pstricks \relax % \input pst-plot \relax % % \loadpstrickscolors{colo-rgb} \definebuffer[PSTRICKS] \unexpanded\def\processPSTRICKS {\ctxlua{moduledata.pstricks.process(\thebuffernumber{PSTRICKS})}} \unexpanded\def\usePSTRICKSmodule[#1]{\ctxlua{moduledata.pstricks.usemodule("#1")}} \unexpanded\def\setPSTRICKS #1{\setbuffer[def-\thebuffernumber{PSTRICKS}]#1\endbuffer} \let\stopPSTRICKS\processPSTRICKS %D \starttyping %D \usemodule[pstricks] %D \usePSTRICKSmodule[pst-barcode] %D %D \startPSTRICKS %D \pspicture(-4mm,-1mm)(38mm,26mm) %D \psbarcode{9781860742712}{includetext guardwhitespace}{ean13}% %D \endpspicture %D \stopPSTRICKS %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-lbr.mkii0000644000175000017500000005505311754241457024274 0ustar norbertnorbert%D \module %D [ file=math-lbr, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, %D subtitle=Lucida Specials, %D author={Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \definefamilysynonym [lbr] [calligraphy] [sy] \definefamilysynonym [lbr] [oldstyle] [mi] \definefamilysynonym [lbr] [blackboard] [ma] \definefamilysynonym [lbr] [ucgreek] [mb] \definefamilysynonym [lbr] [vargreek] [mi] \startmathcollection[lbr] \definemathsymbol [boxdot] [bin] [sy] ["ED] \definemathsymbol [boxplus] [bin] [sy] ["EA] \definemathsymbol [boxtimes] [bin] [sy] ["EC] \definemathsymbol [square] [ord] [ma] ["02] \definemathsymbol [Box] [ord] [ma] ["02] % square \definemathsymbol [blacksquare] [ord] [ma] ["03] \definemathsymbol [centerdot] [bin] [ma] ["E1] % [sy] ["01] \definemathsymbol [Diamond] [ord] [sy] ["05] \definemathsymbol [lozenge] [ord] [sy] ["05] % Diamond \definemathsymbol [blacklozenge] [ord] [ma] ["09] \definemathsymbol [circlearrowright] [rel] [ma] ["8C] \definemathsymbol [circlearrowleft] [rel] [ma] ["8B] \definemathsymbol [rightleftharpoons] [rel] [sy] ["8E] \definemathsymbol [leftrightharpoons] [rel] [sy] ["8D] \definemathsymbol [boxminus] [bin] [sy] ["EB] \definemathsymbol [Vdash] [rel] [sy] ["F0] \definemathsymbol [Vvdash] [rel] [mb] ["D3] \definemathsymbol [vDash] [rel] [mb] ["D6] \definemathsymbol [twoheadrightarrow] [rel] [ma] ["25] \definemathsymbol [twoheadleftarrow] [rel] [ma] ["23] \definemathsymbol [leftleftarrows] [rel] [ma] ["71] \definemathsymbol [rightrightarrows] [rel] [ma] ["73] \definemathsymbol [upuparrows] [rel] [ma] ["72] \definemathsymbol [downdownarrows] [rel] [ma] ["74] \definemathsymbol [upharpoonright] [rel] [ma] ["75] \definemathsymbol [restriction] [rel] [ma] ["77] \definemathsymbol [downharpoonright] [rel] [ma] ["77] \definemathsymbol [upharpoonleft] [rel] [ma] ["76] \definemathsymbol [downharpoonleft] [rel] [ma] ["78] \definemathsymbol [rightarrowtail] [rel] [ma] ["29] \definemathsymbol [leftarrowtail] [rel] [ma] ["28] \definemathsymbol [leftrightarrows] [rel] [ma] ["6E] \definemathsymbol [rightleftarrows] [rel] [ma] ["6D] \definemathsymbol [Lsh] [rel] [ma] ["7B] \definemathsymbol [Rsh] [rel] [ma] ["7D] \definemathsymbol [rightsquigarrow] [rel] [ma] ["8E] \definemathsymbol [leadsto] [rel] [ma] ["8E] % rightsquigarrow \definemathsymbol [leftrightsquigarrow] [rel] [ma] ["91] \definemathsymbol [looparrowleft] [rel] [ma] ["3F] \definemathsymbol [looparrowright] [rel] [ma] ["40] \definemathsymbol [circeq] [rel] [sy] ["D0] \definemathsymbol [succsim] [rel] [sy] ["E1] \definemathsymbol [gtrsim] [rel] [sy] ["DD] \definemathsymbol [gtrapprox] [rel] [mb] ["DB] \definemathsymbol [multimap] [rel] [mb] ["C7] \definemathsymbol [therefore] [rel] [sy] ["90] \definemathsymbol [because] [rel] [sy] ["91] \definemathsymbol [doteqdot] [rel] [sy] ["CA] \definemathsymbol [Doteq] [rel] [sy] ["CA] % doteqdot \definemathsymbol [triangleq] [rel] [sy] ["D5] \definemathsymbol [precsim] [rel] [sy] ["E0] \definemathsymbol [lesssim] [rel] [sy] ["DC] \definemathsymbol [lessapprox] [rel] [mb] ["DA] \definemathsymbol [eqslantless] [rel] [mb] ["E2] \definemathsymbol [eqslantgtr] [rel] [mb] ["E3] \definemathsymbol [curlyeqprec] [rel] [mb] ["E6] \definemathsymbol [curlyeqsucc] [rel] [mb] ["E7] \definemathsymbol [preccurlyeq] [rel] [mb] ["E4] \definemathsymbol [leqq] [rel] [sy] ["DA] \definemathsymbol [leqslant] [rel] [mb] ["E0] \definemathsymbol [lessgtr] [rel] [sy] ["DE] \definemathsymbol [backprime] [ord] [mb] ["C8] \definemathsymbol [dabar@] [ord] [ma] ["03] % !! @ \definemathsymbol [risingdotseq] [rel] [sy] ["CC] \definemathsymbol [fallingdotseq] [rel] [sy] ["CB] \definemathsymbol [succcurlyeq] [rel] [mb] ["E5] \definemathsymbol [geqq] [rel] [sy] ["DB] \definemathsymbol [geqslant] [rel] [mb] ["E1] \definemathsymbol [gtrless] [rel] [sy] ["DF] \definemathsymbol [sqsubset] [rel] [sy] ["E4] \definemathsymbol [sqsupset] [rel] [sy] ["E5] \definemathsymbol [vartriangleright] [rel] [mb] ["2E] \definemathsymbol [rhd] [bin] [mb] ["2E] \definemathsymbol [lhd] [bin] [mb] ["2F] \definemathsymbol [vartriangleleft] [rel] [mb] ["2F] \definemathsymbol [trianglerighteq] [rel] [sy] ["F5] \definemathsymbol [unrhd] [bin] [sy] ["F5] % trianglerighteq \definemathsymbol [trianglelefteq] [rel] [sy] ["F4] \definemathsymbol [unlhd] [bin] [sy] ["F4] % trianglelefteq \definemathsymbol [bigstar] [ord] [ma] ["AB] \definemathsymbol [between] [rel] [mb] ["F2] \definemathsymbol [blacktriangledown] [ord] [ma] ["07] \definemathsymbol [blacktriangleright] [rel] [mb] ["F1] \definemathsymbol [blacktriangleleft] [rel] [mb] ["F0] \definemathsymbol [vartriangle] [rel] [ma] ["04] \definemathsymbol [triangleup] [ord] [ma] ["04] % vartriangle \definemathsymbol [blacktriangle] [ord] [ma] ["05] \definemathsymbol [triangledown] [ord] [ma] ["06] \definemathsymbol [eqcirc] [rel] [sy] ["CF] \definemathsymbol [lesseqgtr] [rel] [mb] ["E8] \definemathsymbol [gtreqless] [rel] [mb] ["E9] \definemathsymbol [lesseqqgtr] [rel] [mb] ["EA] \definemathsymbol [gtreqqless] [rel] [mb] ["EB] \definemathsymbol [Rrightarrow] [rel] [ma] ["6C] \definemathsymbol [Lleftarrow] [rel] [ma] ["6A] \definemathsymbol [veebar] [bin] [mb] ["D2] \definemathsymbol [barwedge] [bin] [sy] ["F6] \definemathsymbol [doublebarwedge] [bin] [sy] ["D4] \definemathsymbol [angle] [ord] [sy] ["8B] \definemathsymbol [measuredangle] [ord] [sy] ["8C] \definemathsymbol [sphericalangle] [ord] [sy] ["8D] \definemathsymbol [varpropto] [rel] [sy] ["2F] \definemathsymbol [smallsmile] [rel] [mb] ["5E] \definemathsymbol [smallfrown] [rel] [mb] ["5F] \definemathsymbol [Subset] [rel] [sy] ["F8] \definemathsymbol [Supset] [rel] [sy] ["F9] \definemathsymbol [Cup] [bin] [sy] ["FA] \definemathsymbol [doublecup] [bin] [sy] ["FA] % Cup \definemathsymbol [Cap] [bin] [sy] ["FB] \definemathsymbol [doublecap] [bin] [sy] ["FB] \definemathsymbol [curlywedge] [bin] [sy] ["84] \definemathsymbol [curlyvee] [bin] [sy] ["85] \definemathsymbol [leftthreetimes] [bin] [mb] ["D0] \definemathsymbol [rightthreetimes] [bin] [mb] ["D1] \definemathsymbol [subseteqq] [rel] [mb] ["EE] \definemathsymbol [supseteqq] [rel] [mb] ["EF] \definemathsymbol [bumpeq] [rel] [sy] ["C8] \definemathsymbol [Bumpeq] [rel] [sy] ["C7] \definemathsymbol [llless] [rel] [mb] ["DE] \definemathsymbol [lll] [rel] [mb] ["DE] % llless \definemathsymbol [gggtr] [rel] [mb] ["DF] \definemathsymbol [ggg] [rel] [mb] ["DF] % gggtr \definemathsymbol [ulcorner] [open] [ma] ["5B] [ma] ["5B] \definemathsymbol [urcorner] [close] [ma] ["5C] [ma] ["5C] \definemathsymbol [circledS] [ord] [mb] ["CA] \definemathsymbol [pitchfork] [rel] [ma] ["F3] \definemathsymbol [dotplus] [bin] [sy] ["89] \definemathsymbol [backsim] [rel] [sy] ["24] \definemathsymbol [backsimeq] [rel] [sy] ["27] \definemathsymbol [llcorner] [open] [ma] ["5D] [ma] ["5D] \definemathsymbol [lrcorner] [close] [ma] ["5E] [ma] ["5E] \definemathsymbol [complement] [ord] [mb] ["94] \definemathsymbol [intercal] [bin] [ma] ["03] % !! \definemathsymbol [circledcirc] [bin] [sy] ["E6] \definemathsymbol [circledast] [bin] [sy] ["E7] \definemathsymbol [circleddash] [bin] [mb] ["CC] \stopmathcollection \startmathcollection [lbr] \definemathsymbol [lvertneqq] [rel] [ma] ["DE] \definemathsymbol [gvertneqq] [rel] [ma] ["DE] \definemathsymbol [nleq] [rel] [ma] ["9C] \definemathsymbol [ngeq] [rel] [ma] ["9D] \definemathsymbol [nless] [rel] [ma] ["9A] \definemathsymbol [ngtr] [rel] [ma] ["9B] \definemathsymbol [nprec] [rel] [ma] ["E5] \definemathsymbol [nsucc] [rel] [ma] ["E6] \definemathsymbol [lneqq] [rel] [ma] ["DC] \definemathsymbol [gneqq] [rel] [ma] ["DE] \definemathsymbol [nleqslant] [rel] [ma] ["D6] \definemathsymbol [ngeqslant] [rel] [ma] ["D7] \definemathsymbol [lneq] [rel] [ma] ["DA] \definemathsymbol [gneq] [rel] [ma] ["DB] \definemathsymbol [npreceq] [rel] [ma] ["E7] \definemathsymbol [nsucceq] [rel] [ma] ["E8] \definemathsymbol [precnsim] [rel] [ma] ["EB] \definemathsymbol [succnsim] [rel] [ma] ["EC] \definemathsymbol [lnsim] [rel] [ma] ["E0] \definemathsymbol [gnsim] [rel] [ma] ["E2] \definemathsymbol [nleqq] [rel] [ma] ["D8] \definemathsymbol [ngeqq] [rel] [ma] ["D9] \definemathsymbol [precneqq] [rel] [ma] ["E9] \definemathsymbol [succneqq] [rel] [ma] ["EA] \definemathsymbol [precnapprox] [rel] [ma] ["ED] \definemathsymbol [succnapprox] [rel] [ma] ["EE] \definemathsymbol [lnapprox] [rel] [ma] ["E4] \definemathsymbol [gnapprox] [rel] [ma] ["E3] \definemathsymbol [nsim] [rel] [ma] ["96] \definemathsymbol [ncong] [rel] [ma] ["99] \definemathsymbol [diagup] [ord] [mb] ["CD] \definemathsymbol [diagdown] [ord] [mb] ["D8] \definemathsymbol [varsubsetneq] [rel] [ma] ["D0] \definemathsymbol [varsupsetneq] [rel] [ma] ["D1] \definemathsymbol [nsubseteqq] [rel] [ma] ["CA] \definemathsymbol [nsupseteqq] [rel] [ma] ["CB] \definemathsymbol [subsetneqq] [rel] [ma] ["CE] \definemathsymbol [supsetneqq] [rel] [ma] ["CF] \definemathsymbol [varsubsetneqq] [rel] [ma] ["D2] \definemathsymbol [varsupsetneqq] [rel] [ma] ["D3] \definemathsymbol [subsetneq] [rel] [ma] ["CC] \definemathsymbol [supsetneq] [rel] [ma] ["CD] \definemathsymbol [nsubseteq] [rel] [ma] ["C8] \definemathsymbol [nsupseteq] [rel] [ma] ["C9] \definemathsymbol [nparallel] [rel] [ma] ["F7] \definemathsymbol [nmid] [rel] [ma] ["F6] \definemathsymbol [nshortmid] [rel] [ma] ["F4] \definemathsymbol [nshortparallel] [rel] [ma] ["F5] \definemathsymbol [nvdash] [rel] [ma] ["F8] \definemathsymbol [nVdash] [rel] [ma] ["F9] \definemathsymbol [nvDash] [rel] [ma] ["FA] \definemathsymbol [nVDash] [rel] [ma] ["FB] \definemathsymbol [ntrianglerighteq] [rel] [ma] ["F2] \definemathsymbol [ntrianglelefteq] [rel] [ma] ["F1] \definemathsymbol [ntriangleleft] [rel] [ma] ["EF] \definemathsymbol [ntriangleright] [rel] [ma] ["F0] \definemathsymbol [nleftarrow] [rel] [ma] ["32] \definemathsymbol [nrightarrow] [rel] [ma] ["33] \definemathsymbol [nLeftarrow] [rel] [ma] ["66] \definemathsymbol [nRightarrow] [rel] [ma] ["68] \definemathsymbol [nLeftrightarrow] [rel] [ma] ["67] \definemathsymbol [nleftrightarrow] [rel] [ma] ["34] \definemathsymbol [divideontimes] [bin] [mb] ["F7] \definemathsymbol [varnothing] [ord] [sy] ["53] \definemathsymbol [nexists] [ord] [ma] ["20] \definemathsymbol [Finv] [ord] [mb] ["90] \definemathsymbol [Game] [ord] [mb] ["91] \definemathsymbol [mho] [ord] [mb] ["92] \definemathsymbol [eth] [ord] [ma] ["03] % !! \definemathsymbol [eqsim] [rel] [sy] ["99] \definemathsymbol [beth] [ord] [mb] ["95] \definemathsymbol [gimel] [ord] [mb] ["96] \definemathsymbol [daleth] [ord] [mb] ["97] \definemathsymbol [lessdot] [bin] [mb] ["DC] \definemathsymbol [gtrdot] [bin] [mb] ["DD] \definemathsymbol [ltimes] [bin] [mb] ["CF] \definemathsymbol [rtimes] [bin] [mb] ["CE] \definemathsymbol [shortmid] [rel] [mb] ["F4] \definemathsymbol [shortparallel] [rel] [mb] ["F5] \definemathsymbol [smallsetminus] [bin] [mb] ["D8] \definemathsymbol [thicksim] [rel] [sy] ["18] % not that thick \definemathsymbol [thickapprox] [rel] [sy] ["19] % not that thick \definemathsymbol [approxeq] [rel] [sy] ["9D] \definemathsymbol [succapprox] [rel] [mb] ["ED] \definemathsymbol [precapprox] [rel] [mb] ["EC] \definemathsymbol [curvearrowleft] [rel] [ma] ["87] \definemathsymbol [curvearrowright] [rel] [ma] ["88] \definemathsymbol [digamma] [ord] [ma] ["03] % !! \definemathsymbol [varkappa] [ord] [mb] ["9B] \definemathsymbol [Bbbk] [ord] [ma] ["6B] \definemathsymbol [hslash] [ord] [mb] ["9D] \definemathsymbol [hbar] [ord] [ma] ["1B] \definemathsymbol [backepsilon] [rel] [ma] ["03] % !! \stopmathcollection \startmathcollection [lbr] \definemathsymbol [yen] [nothing] [ma] ["03] % !! \definemathsymbol [checkmark] [nothing] [ma] ["AC] \definemathsymbol [circledR] [nothing] [mb] ["C9] \definemathsymbol [maltese] [nothing] [mb] ["CB] \stopmathcollection \startmathcollection [lbr] \definemathsymbol [dashrightarrow] [rel] [ma] ["3A] \definemathsymbol [dashleftarrow] [rel] [ma] ["38] \definemathcommand [dasharrow] [rel] {\dashleftarrow\mkern-15.8mu\dashrightarrow} %definemathcommand [Join] [rel] {\mathchar"0D6F\mkern-15.8mu\mathchar"0D6E} % !! \stopmathcollection \startmathcollection[lbr] \definemathcharacter [91] [open] [mi] ["86] \definemathcharacter [93] [close] [mi] ["87] \definemathcharacter [(] [open] [mi] ["84] \definemathcharacter [)] [close] [mi] ["85] \definemathcharacter [/] [nothing] [mi] ["3D] \definemathcharacter [=] [rel] [sy] ["83] \definemathcharacter [+] [bin] [sy] ["82] \definemathcharacter [91] [nothing] [mi] ["86] [ex] ["02] \definemathcharacter [93] [nothing] [mi] ["87] [ex] ["03] \definemathcharacter [(] [nothing] [mi] ["84] [ex] ["00] \definemathcharacter [)] [nothing] [mi] ["85] [ex] ["01] \definemathcharacter [/] [nothing] [mi] ["3D] [ex] ["0E] \stopmathcollection \startmathcollection[lbr] \definemathcharacter [:] [punct] [tf] ["3A] % unbelievable, but enabled again for Mojca \definemathcharacter [;] [punct] [tf] ["3B] % unbelievable, but enabled again for Mojca \stopmathcollection \startmathcollection[lbr] \definemathsymbol [ldbrack] [open] [mi] ["82] [ex] ["82] \definemathsymbol [rdbrack] [close] [mi] ["83] [ex] ["83] \definemathsymbol [surfintop] [op] [ex] ["90] \definemathsymbol [midintop] [op] [ex] ["92] \definemathsymbol [midointop] [op] [ex] ["93] \definemathsymbol [midsurfintop] [op] [ex] ["94] \definemathsymbol [largeint] [op] [ex] ["5A] [ex] ["95] % \definemathcommand [surfint] [nolop] {\surfintop} % \definemathcommand [midint] [nolop] {\midintop} % \definemathcommand [midoint] [nolop] {\midointop} % \definemathcommand [midsurfint] [nolop] {\midsurfintop} \definemathsymbol [surfint] [nolop] [ex] ["90] \definemathsymbol [midint] [nolop] [ex] ["92] \definemathsymbol [midoint] [nolop] [ex] ["93] \definemathsymbol [midsurfint] [nolop] [ex] ["94] \definemathsymbol [dblint] [ord] [mi] ["88] \definemathsymbol [trplint] [ord] [mi] ["89] \definemathsymbol [contint] [ord] [mi] ["8A] \definemathsymbol [surfint] [ord] [mi] ["8B] \definemathsymbol [volint] [ord] [mi] ["8C] \definemathsymbol [clwint] [ord] [mi] ["8D] \definemathsymbol [cclwcint] [ord] [mi] ["8E] \definemathsymbol [clwcint] [ord] [mi] ["8F] \definemathsymbol [bowtie] [rel] [mi] ["F6] \definemathsymbol [models] [rel] [sy] ["EE] \definemathsymbol [doteq] [rel] [sy] ["C9] \definemathsymbol [cong] [rel] [sy] ["9B] \definemathsymbol [hbar] [ord] [mi] ["9D] \definemathsymbol [neq] [rel] [ma] ["94] \definemathsymbol [rightleftharpoons] [rel] [ma] ["7A] \definemathsymbol [leftrightharpoons] [rel] [ma] ["79] \definemathsymbol [hookleftarrow] [rel] [ma] ["3C] \definemathsymbol [hookrightarrow] [rel] [ma] ["3E] \definemathsymbol [mapsto] [rel] [ma] ["2C] \definemathcommand [longmapsto] {\mapstochar\longrightarrow} \stopmathcollection \startmathcollection[lbr] \definemathsymbol [Gamma] [alpha] [ucgreek] ["00] \definemathsymbol [Delta] [alpha] [ucgreek] ["01] \definemathsymbol [Theta] [alpha] [ucgreek] ["02] \definemathsymbol [Lambda] [alpha] [ucgreek] ["03] \definemathsymbol [Xi] [alpha] [ucgreek] ["04] \definemathsymbol [Pi] [alpha] [ucgreek] ["05] \definemathsymbol [Sigma] [alpha] [ucgreek] ["06] \definemathsymbol [Upsilon] [alpha] [ucgreek] ["07] \definemathsymbol [Phi] [alpha] [ucgreek] ["08] \definemathsymbol [Psi] [alpha] [ucgreek] ["09] \definemathsymbol [Omega] [alpha] [ucgreek] ["0A] \definemathsymbol [varGamma] [ord] [vargreek] ["00] \definemathsymbol [varDelta] [ord] [vargreek] ["01] \definemathsymbol [varTheta] [ord] [vargreek] ["02] \definemathsymbol [varLambda] [ord] [vargreek] ["03] \definemathsymbol [varXi] [ord] [vargreek] ["04] \definemathsymbol [varPi] [ord] [vargreek] ["05] \definemathsymbol [varSigma] [ord] [vargreek] ["06] \definemathsymbol [varUpsilon] [ord] [vargreek] ["07] \definemathsymbol [varPhi] [ord] [vargreek] ["08] \definemathsymbol [varPsi] [ord] [vargreek] ["09] \definemathsymbol [varOmega] [ord] [vargreek] ["0A] \stopmathcollection % we define the whole lot, although only a few differ (esp dot) % \startmathcollection[lbr] % % \definemathsymbol [acute] [accent] [tf] ["13] % mr -> tf % \definemathsymbol [grave] [accent] [tf] ["12] % mr -> tf % \definemathsymbol [ddot] [accent] [tf] ["7F] % mr -> tf % \definemathsymbol [tilde] [accent] [tf] ["7E] % mr -> tf % \definemathsymbol [bar] [accent] [tf] ["16] % mr -> tf % \definemathsymbol [breve] [accent] [tf] ["15] % mr -> tf % \definemathsymbol [check] [accent] [tf] ["14] % mr -> tf % \definemathsymbol [hat] [accent] [tf] ["5E] % mr -> tf % \definemathsymbol [vec] [accent] [mi] ["7E] % [ord] % \definemathsymbol [dot] [accent] [tf] ["05] % mr -> tf, 5F -> 05 % \definemathsymbol [widetilde] [accent] [ex] ["65] % [ord] % \definemathsymbol [widehat] [accent] [ex] ["62] % [ord] % % \stopmathcollection \startmathcollection[lbr:texnansi] \definemathsymbol [acute] [accent] [tf] ["13] \definemathsymbol [grave] [accent] [tf] ["12] \definemathsymbol [ddot] [accent] [tf] ["7F] %definemathsymbol [ddot] [accent] [tf] ["A8] % both is OK \definemathsymbol [tilde] [accent] [tf] ["7E] %definemathsymbol [tilde] [accent] [tf] ["98] % both is OK \definemathsymbol [bar] [accent] [tf] ["16] \definemathsymbol [breve] [accent] [tf] ["15] \definemathsymbol [check] [accent] [tf] ["14] \definemathsymbol [hat] [accent] [tf] ["5E] %definemathsymbol [hat] [accent] [tf] ["88] % both is OK \definemathsymbol [dot] [accent] [tf] ["05] % Why is mathring not defined?? \definemathsymbol [mathring] [accent] [tf] ["17] \stopmathcollection \startmathcollection[lbr:ec] \definemathsymbol [acute] [accent] [tf] ["01] \definemathsymbol [grave] [accent] [tf] ["00] \definemathsymbol [ddot] [accent] [tf] ["04] \definemathsymbol [tilde] [accent] [tf] ["03] \definemathsymbol [bar] [accent] [tf] ["09] \definemathsymbol [breve] [accent] [tf] ["08] \definemathsymbol [check] [accent] [tf] ["07] \definemathsymbol [hat] [accent] [tf] ["02] \definemathsymbol [dot] [accent] [tf] ["0A] % Why is mathring not defined?? \definemathsymbol [mathring] [accent] [tf] ["06] \stopmathcollection \def\LBRroot#1#2% {\setbox\zerocount\hbox{$\mathsurround\zeropoint#1\sqrt{#2}$} \dimen@\ht\zerocount \advance\dimen@-\dp\zerocount \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-7.5mu \box\zerocount} \def\LBRmatrix#1% {\null\,\vcenter{\normalbaselines\mathsurround\zeropoint \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr \mathstrut\crcr\noalign{\kern-0.9\baselineskip} #1\crcr\mathstrut\crcr\noalign{\kern-0.9\baselineskip}}}\,} \startrawmathcollection[lbr] \definemathcommand [mathstrut] {\vphantom{f}} \definemathcommand [joinrel] {\mathrel{\mkern-4mu}} \definemathcommand [r@@t] {\LBRroot} \definemathcommand [matrix] {\LBRmatrix} \stoprawmathcollection % \def\LBRbig {\@@dobig{8.20}} % \def\LBRBig {\@@dobig{10.80}} % \def\LBRbigg {\@@dobig{13.42}} % \def\LBRBigg {\@@dobig{16.03}} % \def\LBRbiggg{\@@dobig{17.72}} % \def\LBRBiggg{\@@dobig{21.25}} \def\LBRbig {\@@dobig{0.820}} \def\LBRBig {\@@dobig{1.080}} \def\LBRbigg {\@@dobig{1.342}} \def\LBRBigg {\@@dobig{1.603}} \def\LBRbiggg{\@@dobig{1.772}} \def\LBRBiggg{\@@dobig{2.125}} \startrawmathcollection[lbr] \definemathcommand [big] {\LBRbig} \definemathcommand [Big] {\LBRBig} \definemathcommand [bigg] {\LBRbigg} \definemathcommand [Bigg] {\LBRBigg} \definemathcommand [biggg] {\LBRbiggg} \definemathcommand [Biggg] {\LBRBiggg} \stoprawmathcollection \startrawmathcollection[lbr] \definemathcommand [bigggl] [open] {\biggg} \definemathcommand [bigggr] [close] {\biggg} \definemathcommand [Bigggl] [open] {\Biggg} \definemathcommand [Bigggr] [close] {\Biggg} \stoprawmathcollection \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-foxet.mkiv0000644000175000017500000000143011754241457024163 0ustar norbertnorbert%D \module %D [ file=x-foxet, %D version=2004.03.12, % based on earlier experiments %D title=\FOXET, %D subtitle=Formatting Objects, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Nota bene: I will reimplement formatting object in proper %D \MKIV\ code. \writestatus{foxet}{the mkiv variant is under construction} %D This module is just a shortcut for: % fo = basic formatting objects % fe = basic formatting extensions % fx = extra formatting objects % fu = user formatting objects % fs = setup % \usemodule[fo,fe,fx,fu,fs,mathml] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-flt.mkiv0000644000175000017500000002370612130411274024263 0ustar norbertnorbert%D \module %D [ file=page-flt, %D version=2010.04.08, %D title=\CONTEXT\ Page Macros, %D subtitle=Float Management, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Float Management} %D This module has code that previously was in other modules. There is %D also float related code in \type {strc-flt.mkiv}. \registerctxluafile{page-flt}{1.001} \unprotect \ifdefined\s!topfloat \else \def\s!topfloat {topfloat} \fi \ifdefined\s!bottomfloat \else \def\s!bottomfloat{bottomfloat} \fi \defineinsertion[\s!topfloat] \defineinsertion[\s!bottomfloat] \newdimen \d_page_floats_inserted_bottom \newdimen \d_page_floats_inserted_top \newcount \c_page_floats_n_of_top \c_page_floats_n_of_top \plustwo \newcount \c_page_floats_n_of_bottom \c_page_floats_n_of_bottom\zerocount \newconstant\c_page_floats_insertions_topskip_mode % 1 = no topskip %def\page_floats_report_saved {\showmessage\m!floatblocks2{\the\totalnoffloats}} \def\page_floats_report_total {\showmessage\m!floatblocks4{\the\totalnoffloats}} \def\page_floats_report_flushed{\showmessage\m!floatblocks3{\the\numexpr\totalnoffloats-\savednoffloats\relax}} %D Extra float registers. \newconditional\c_page_floats_room \newconditional\c_page_floats_some_waiting \newconditional\c_page_floats_not_permitted \newconditional\c_page_floats_flushing \newconditional\c_page_floats_center_box \settrue\c_page_floats_center_box \newconditional\c_page_floats_center_box_local \newconditional\c_page_floats_center_box_global \newconditional\c_page_floats_pack_flushed \settrue\c_page_floats_pack_flushed %D For the moment we keep this but they will become private too. \newcount\totalnoffloats % these will be redone ... handled at the lua end anyway \newcount\savednoffloats % these will be redone ... handled at the lua end anyway \newcount\nofcollectedfloats % communication channel \newcount\noffloatinserts % these will be redone ... handled at the lua end anyway \newbox \floattext \newdimen\floatwidth \newdimen\floatheight \newdimen\floatdepth \newdimen\floattextwidth \newdimen\floattextheight \newbox \floatbox \newbox \savedfloatbox %D From now on we manage the float stack at the \LUA\ end instead of packing %D them in a box and splitting off stacked floats. It's not so much less code %D but it's cleaner this way. It also opens op some posibilities as we can now %D more conveniently cary additional information around. \newtoks \everyfloatscheck \appendtoks \ifcase\savednoffloats \global\setfalse\c_page_floats_some_waiting \else \global\settrue\c_page_floats_some_waiting \fi \to \everyfloatscheck \unexpanded\def\page_floats_flush#1#2% {\ctxcommand{flushfloat("#1",\number#2)}% \the\everyfloatscheck} \unexpanded\def\page_floats_flush_by_label#1#2% {\ctxcommand{flushfloat("#1","#2",true)}% \the\everyfloatscheck} \unexpanded\def\page_floats_save#1% {\ctxcommand{savefloat("#1")}% \the\everyfloatscheck} \unexpanded\def\page_floats_resave#1% {\ctxcommand{resavefloat("#1")}% \the\everyfloatscheck} \unexpanded\def\page_floats_push_saved {\ctxcommand{pushfloat()}% \the\everyfloatscheck} \unexpanded\def\page_floats_pop_saved {\ctxcommand{popfloat()}% \the\everyfloatscheck} \unexpanded\def\page_floats_get_info#1% {\ctxcommand{consultfloat("#1")}} \unexpanded\def\page_floats_if_else#1% {\ctxcommand{doifelsesavedfloat("#1")}} \unexpanded\def\page_floats_collect#1#2#3% {\ctxcommand{collectfloat("#1",\number\dimexpr#2,\number\dimexpr#3)}} \unexpanded\def\nofstackedfloatincategory#1% {\ctxcommand{nofstackedfloats("#1")}} \let\page_floats_column_push_saved\page_floats_push_saved % overloaded in page-mul \let\page_floats_column_pop_saved \page_floats_pop_saved % overloaded in page-mul \unexpanded\def\page_floats_save_page_float#1#2% {\ctxcommand{savefloat("#1", { specification = "#2" })}} \unexpanded\def\page_floats_save_somewhere_float#1#2% #1=method {\ctxcommand{savefloat("#1", { specification = "#2", label = "\floatlabel" })}} %D This is an experimental new feature (for Alan Braslau), a prelude to more: %D %D \starttyping %D test \placefigure{}{} %D test \placefigure[somewhere:alpha][whatever]{}{} %D test \placefigure[somewhere:beta] [whatever]{}{} %D test \placefigure[somewhere:gamma][whatever]{}{} %D test \placefigure[somewhere:delta][whatever]{}{} %D test \placefigure{}{} %D %D in \in{figure}[whatever] bla bla %D %D \placenamedfloat[figure][*l*] %D \placenamedfloat[figure][gamma] %D \placenamedfloat[figure][beta] %D \stoptyping \unexpanded\def\placenamedfloat {\dodoubleargument\page_floats_place_named} \def\page_floats_place_named[#1][#2]% {\doloop {\page_floats_flush_by_label\s!somewhere{#2}% \ifvoid\floatbox \exitloop \else \def\currentfloat{#1}% \blank[\rootfloatparameter\c!spacebefore]% \box\floatbox \blank[\rootfloatparameter\c!spaceafter]% \fi}} % \setupcaption [figure] [align=flushleft] % \setupcaption [figure-1] [align=flushleft,leftmargin=10mm] % \setupcaption [figure-2] [align=flushleft,leftmargin=10mm,rightmargin=-10mm,width=\textwidth] % % \startsetups somefigure % \ifdim\floatsetupwidth>\textwidth % \placesetupfloat[figure-2] % \else % \placesetupfloat[figure-1] % \fi % \stopsetups % % \placefloatwithsetups[somefigure]{}{\externalfigure[dummy][width=5cm,height=2cm]} \unexpanded\def\placefloatwithsetups {\dotripleempty\page_floats_place_with_setups} \def\page_floats_place_with_setups[#1][#2][#3]#4% {\def\floatsetupcaption {#4}% \def\floatsetupcontent {\copy\nextbox}% \def\floatsetupwidth {\wd\nextbox}% \def\floatsetupheight {\ht\nextbox}% \def\placesetupfloat[##1]{\placefloat[##1][#2][#3]{#4}{\floatsetupcontent}}% #4 and not \floatsetupcaption (unexpanded) \dowithnextbox{\setups[#1]}\vbox} %D The following code is in transition as we don't want to break the %D current single column, multi column, and columnset mechanism. %D %D First we reimplement some helpers. \unexpanded\def\page_floats_get {\ifconditional\c_page_floats_some_waiting \page_floats_flush\s!text\plusone \ifconditional\c_page_floats_center_box \ifdim\wd\globalscratchbox<\hsize \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}% \else % retain special alignments \ifinsidecolumns \ifdim\wd\floatbox>\makeupwidth \wd\floatbox\makeupwidth \fi \fi \fi \fi \else \global\savednoffloats\zerocount \global\setbox\floatbox\emptybox \fi} \unexpanded\def\page_floats_flush_saved {\doloop {\ifconditional\c_page_floats_some_waiting \page_otr_command_check_if_float_fits \ifconditional\c_page_floats_room \page_floats_get \doplacefloatbox \else \exitloop \fi \else % \ifconditional\c_page_margin_blocks_present % not here, here just as many floats as fit % \page_otr_command_flush_margin_blocks % \else \exitloop % \fi \fi}} %D This is a future mechamism that will be integrated once we're sure about it: %D %D \starttyping %D \dorecurse{10} %D {\input thuan %D \placefigure{}{\framed[height=1.5cm]{test}} %D \placefloatplaceholder} %D \stoptyping \unexpanded\def\placefloatplaceholder {\ifconditional\c_page_floats_room \else \ifdim\dimexpr\pagegoal-\pagetotal-3\lineheight\relax>\zeropoint \startlinecorrection[blank] \mhbox{\inframed{\labeltexts{placeholder}{\lastcaptiontag}}}% \stoplinecorrection \else \allowbreak \fi \fi} \setuplabeltext [placeholder={\Word{\lastplacedfloat}~, moved}] %D Page floats use different stacks. \newtoks\everybeforeflushedpagefloat \def\page_floats_flush_page_floats_indeed#1% future releases can do more clever things {\page_floats_flush{#1}\plusone \edef\floatspecification{\ctxcommand{getfloatvariable("specification")}}% Is this okay? \the\everybeforeflushedpagefloat \vbox to \textheight {\doifnotinset\v!high\floatspecification\vfill \box\floatbox \doifnotinset\v!low\floatspecification\vfill}% \page_otr_fill_and_eject_page} \unexpanded\def\page_floats_flush_page_floats % used in postpone {\edef\m_page_otf_checked_page_float{\ctxcommand{checkedpagefloat()}}% (true) for packed \ifx\m_page_otf_checked_page_float\empty % nothing \else\ifx\m_page_otf_checked_page_float\v!empty \emptyhbox \page_otr_fill_and_eject_page % why not dummy_page \else \page_floats_flush_page_floats_indeed\m_page_otf_checked_page_float \fi\fi} % temp hack, needed to prevent floatbox being forgotten during % output, this will change to using another box for flushing % % \dorecurse{700}{text } \placefigure[top][]{First} {\framed{bla 1}} % \placefigure[top][]{Second}{\framed{bla 2}} % \dorecurse {40}{text } \placefigure[top][]{Third} {\framed{bla 3}} \appendtoks \global\setbox\savedfloatbox\box\floatbox \to \everybeforeoutput \appendtoks \global\setbox\floatbox\box\savedfloatbox \to \everyafteroutput \protect \endinput % hm, where is this one used (was in save/restore, see old implementation) % % \unexpanded\def\uncenteredfloatbox % {\ifconditional\c_page_floats_center_box % \ifhbox\floatbox\relax % remove centering % \ifdim\wd\floatbox=\hsize % \ifhbox\floatbox % \setbox\scratchbox\hbox % {\unhbox\floatbox % \unskip\unskip % \global\setbox\globalscratchbox\lastbox}% % \box\globalscratchbox % \else % \box\floatbox % \fi % \else % \box\floatbox % \fi % \else % \box\floatbox % \fi % \else % \box\floatbox % \fi} context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-sor.lua0000644000175000017500000001054211754241457024165 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-sor'] = { version = 1.001, comment = "companion to lxml-sor.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, concat, rep = string.format, table.concat, string.rep local lpegmatch = lpeg.match local xml, lxml = xml, lxml lxml.sorters = lxml.sorters or { } if not lxml.splitid then local splitter = lpeg.C((1-lpeg.P(":"))^1) * lpeg.P("::") * lpeg.C(lpeg.P(1)^1) function lxml.splitid(id) local d, i = lpegmatch(splitter,id) if d then return d, i else return "", id end end end local lists = { } function lxml.sorters.reset(name) lists[name] = { sorted = false, entries = { }, reverse = { }, results = { }, } end function lxml.sorters.add(name,n,key) local list = lists[name] if list.sorted then -- reverse is messed up, we could regenerate it and go on else local entries = list and list.entries if entries then local reverse = list.reverse local e = reverse[n] if e then local keys = entries[e][2] keys[#keys+1] = key else entries[#entries+1] = { n, { key } } reverse[n] = #entries end end end end function lxml.sorters.show(name) local list = lists[name] local entries = list and list.entries local NC, NR, bold = context.NC, context.NR, context.bold -- somehow bold is not working if entries then local maxn = 1 for i=1,#entries do if #entries[i][2] > maxn then maxn = #entries[i][2] end end context.starttabulate { "|Tr|Tr|" .. rep("Tlp|",maxn) } NC() bold("n") NC() bold("id") if maxn > 1 then for i=1,maxn do NC() bold("entry " .. i) end else NC() bold("entry") end NC() NR() context.HL() for i=1,#entries do local entry = entries[i] local document, node = lxml.splitid(entry[1]) NC() context(i) NC() context(node) local e = entry[2] for i=1,#e do NC() context.detokenize(e[i]) end NC() NR() end context.stoptabulate() end end lxml.sorters.compare = sorters.comparers.basic -- (a,b) function lxml.sorters.sort(name) local list = lists[name] local entries = list and list.entries if entries then -- filtering local results = { } list.results = results for i=1,#entries do local entry = entries[i] results[i] = { entry = entry[1], key = concat(entry[2], " "), } end -- preparation local strip = sorters.strip local splitter = sorters.splitters.utf local firstofsplit = sorters.firstofsplit for i=1, #results do local r = results[i] r.split = splitter(strip(r.key)) end -- sorting sorters.sort(results,lxml.sorters.compare) -- finalizing list.nofsorted = #results local split = { } for k=1,#results do -- rather generic so maybe we need a function local v = results[k] local entry, tag = firstofsplit(v) local s = split[entry] -- keeps track of change if not s then s = { tag = tag, data = { } } split[entry] = s end s.data[#s.data+1] = v end list.results = split -- done list.sorted = true end end function lxml.sorters.flush(name,setup) local list = lists[name] local results = list and list.results local xmlw = context.xmlw if results and next(results) then for key, result in next, results do local tag, data = result.tag, result.data for d=1,#data do xmlw(setup,data[d].entry) end end else local entries = list and list.entries if entries then for i=1,#entries do xmlw(setup,entries[i][1]) end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-ctx.mkii0000644000175000017500000000077211754241457024333 0ustar norbertnorbert%D \module %D [ file=norm-ctx, %D version=2009.03.19, %D title=\CONTEXT\ Norm Macros, %D subtitle=\ALEPH\ and \OMEGA, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 A few more might end up here (like the weird ones in syst-ini). \let\normalreqno = \normaleqno context-2013.05.28.20130704/texmf-dist/tex/context/base/file-ini.lua0000644000175000017500000000235312130411274024066 0ustar norbertnorbertif not modules then modules = { } end modules ['file-ini'] = { version = 1.001, comment = "companion to file-ini.mkvi", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

It's more convenient to manipulate filenames (paths) in than in . These methods have counterparts at the end.

--ldx]]-- resolvers.jobs = resolvers.jobs or { } local texcount = tex.count local setvalue = context.setvalue function commands.splitfilename(fullname) local t = file.nametotable(fullname) local path = t.path texcount.splitoffkind = (path == "" and 0) or (path == '.' and 1) or 2 setvalue("splitofffull",fullname) setvalue("splitoffpath",path) setvalue("splitoffname",t.name) setvalue("splitoffbase",t.base) setvalue("splitofftype",t.suffix) end function commands.doifparentfileelse(n) commands.doifelse(n == environment.jobname or n == environment.jobname .. '.tex' or n == environment.outputfilename) end function commands.doiffileexistelse(name) local foundname = resolvers.findtexfile(name) commands.doifelse(foundname and foundname ~= "") end context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1251.mkii0000644000175000017500000002640711754241457024426 0ustar norbertnorbert%D \module %D [ file=regi-cp1251, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=cp1251 (Cyrillic), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for cp1251 input encoding (regime) for Cyrillic. %D %D Usage: %D \type{\enableregime[cp1251]} or \type{\enablereregime[windows-1251]} \startregime[cp1251] \defineactivetoken 128 {\cyrillicDJE} % 0402 CYRILLIC CAPITAL LETTER DJE \defineactivetoken 129 {\cyrillicGJE} % 0403 CYRILLIC CAPITAL LETTER GJE \defineactivetoken 130 {\quotesinglebase} % 201A SINGLE LOW-9 QUOTATION MARK \defineactivetoken 131 {\cyrillicgje} % 0453 CYRILLIC SMALL LETTER GJE \defineactivetoken 132 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 133 {\textellipsis} % 2026 HORIZONTAL ELLIPSIS \defineactivetoken 134 {\textdag} % 2020 DAGGER \defineactivetoken 135 {\textddag} % 2021 DOUBLE DAGGER \defineactivetoken 136 {\texteuro} % 20AC EURO SIGN \defineactivetoken 137 {\perthousand} % 2030 PER MILLE SIGN \defineactivetoken 138 {\cyrillicLJE} % 0409 CYRILLIC CAPITAL LETTER LJE \defineactivetoken 139 {\guilsingleleft} % 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \defineactivetoken 140 {\cyrillicNJE} % 040A CYRILLIC CAPITAL LETTER NJE \defineactivetoken 141 {\cyrillicKJE} % 040C CYRILLIC CAPITAL LETTER KJE \defineactivetoken 142 {\cyrillicTSHE} % 040B CYRILLIC CAPITAL LETTER TSHE \defineactivetoken 143 {\cyrillicDZHE} % 040F CYRILLIC CAPITAL LETTER DZHE \defineactivetoken 144 {\cyrillicdje} % 0452 CYRILLIC SMALL LETTER DJE \defineactivetoken 145 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 146 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 147 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 148 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 149 {\textbullet} % 2022 BULLET \defineactivetoken 150 {\endash} % 2013 EN DASH \defineactivetoken 151 {\emdash} % 2014 EM DASH \defineactivetoken 152 {\unknownchar} % \defineactivetoken 153 {\trademark} % 2122 TRADE MARK SIGN \defineactivetoken 154 {\cyrilliclje} % 0459 CYRILLIC SMALL LETTER LJE \defineactivetoken 155 {\guilsingleright} % 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \defineactivetoken 156 {\cyrillicnje} % 045A CYRILLIC SMALL LETTER NJE \defineactivetoken 157 {\cyrillickje} % 045C CYRILLIC SMALL LETTER KJE \defineactivetoken 158 {\cyrillictshe} % 045B CYRILLIC SMALL LETTER TSHE \defineactivetoken 159 {\cyrillicdzhe} % 045F CYRILLIC SMALL LETTER DZHE \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\cyrillicUSHRT} % 040E CYRILLIC CAPITAL LETTER SHORT U \defineactivetoken 162 {\cyrillicushrt} % 045E CYRILLIC SMALL LETTER SHORT U \defineactivetoken 163 {\cyrillicJE} % 0408 CYRILLIC CAPITAL LETTER JE \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\cyrillicGHEupturn} % 0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\cyrillicYO} % 0401 CYRILLIC CAPITAL LETTER IO \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\cyrillicIE} % 0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\cyrillicYI} % 0407 CYRILLIC CAPITAL LETTER YI \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\cyrillicII} % 0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I \defineactivetoken 179 {\cyrillicii} % 0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I \defineactivetoken 180 {\cyrillicgheupturn} % 0491 CYRILLIC SMALL LETTER GHE WITH UPTURN \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\cyrillicyo} % 0451 CYRILLIC SMALL LETTER IO \defineactivetoken 185 {\textnumero} % 2116 NUMERO SIGN \defineactivetoken 186 {\cyrillicie} % 0454 CYRILLIC SMALL LETTER UKRAINIAN IE \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\cyrillicje} % 0458 CYRILLIC SMALL LETTER JE \defineactivetoken 189 {\cyrillicDZE} % 0405 CYRILLIC CAPITAL LETTER DZE \defineactivetoken 190 {\cyrillicdze} % 0455 CYRILLIC SMALL LETTER DZE \defineactivetoken 191 {\cyrillicyi} % 0457 CYRILLIC SMALL LETTER YI \defineactivetoken 192 {\cyrillicA} % 0410 CYRILLIC CAPITAL LETTER A \defineactivetoken 193 {\cyrillicB} % 0411 CYRILLIC CAPITAL LETTER BE \defineactivetoken 194 {\cyrillicV} % 0412 CYRILLIC CAPITAL LETTER VE \defineactivetoken 195 {\cyrillicG} % 0413 CYRILLIC CAPITAL LETTER GHE \defineactivetoken 196 {\cyrillicD} % 0414 CYRILLIC CAPITAL LETTER DE \defineactivetoken 197 {\cyrillicE} % 0415 CYRILLIC CAPITAL LETTER IE \defineactivetoken 198 {\cyrillicZH} % 0416 CYRILLIC CAPITAL LETTER ZHE \defineactivetoken 199 {\cyrillicZ} % 0417 CYRILLIC CAPITAL LETTER ZE \defineactivetoken 200 {\cyrillicI} % 0418 CYRILLIC CAPITAL LETTER I \defineactivetoken 201 {\cyrillicISHRT} % 0419 CYRILLIC CAPITAL LETTER SHORT I \defineactivetoken 202 {\cyrillicK} % 041A CYRILLIC CAPITAL LETTER KA \defineactivetoken 203 {\cyrillicL} % 041B CYRILLIC CAPITAL LETTER EL \defineactivetoken 204 {\cyrillicM} % 041C CYRILLIC CAPITAL LETTER EM \defineactivetoken 205 {\cyrillicN} % 041D CYRILLIC CAPITAL LETTER EN \defineactivetoken 206 {\cyrillicO} % 041E CYRILLIC CAPITAL LETTER O \defineactivetoken 207 {\cyrillicP} % 041F CYRILLIC CAPITAL LETTER PE \defineactivetoken 208 {\cyrillicR} % 0420 CYRILLIC CAPITAL LETTER ER \defineactivetoken 209 {\cyrillicS} % 0421 CYRILLIC CAPITAL LETTER ES \defineactivetoken 210 {\cyrillicT} % 0422 CYRILLIC CAPITAL LETTER TE \defineactivetoken 211 {\cyrillicU} % 0423 CYRILLIC CAPITAL LETTER U \defineactivetoken 212 {\cyrillicF} % 0424 CYRILLIC CAPITAL LETTER EF \defineactivetoken 213 {\cyrillicH} % 0425 CYRILLIC CAPITAL LETTER HA \defineactivetoken 214 {\cyrillicC} % 0426 CYRILLIC CAPITAL LETTER TSE \defineactivetoken 215 {\cyrillicCH} % 0427 CYRILLIC CAPITAL LETTER CHE \defineactivetoken 216 {\cyrillicSH} % 0428 CYRILLIC CAPITAL LETTER SHA \defineactivetoken 217 {\cyrillicSHCH} % 0429 CYRILLIC CAPITAL LETTER SHCHA \defineactivetoken 218 {\cyrillicHRDSN} % 042A CYRILLIC CAPITAL LETTER HARD SIGN \defineactivetoken 219 {\cyrillicERY} % 042B CYRILLIC CAPITAL LETTER YERU \defineactivetoken 220 {\cyrillicSFTSN} % 042C CYRILLIC CAPITAL LETTER SOFT SIGN \defineactivetoken 221 {\cyrillicEREV} % 042D CYRILLIC CAPITAL LETTER E \defineactivetoken 222 {\cyrillicYU} % 042E CYRILLIC CAPITAL LETTER YU \defineactivetoken 223 {\cyrillicYA} % 042F CYRILLIC CAPITAL LETTER YA \defineactivetoken 224 {\cyrillica} % 0430 CYRILLIC SMALL LETTER A \defineactivetoken 225 {\cyrillicb} % 0431 CYRILLIC SMALL LETTER BE \defineactivetoken 226 {\cyrillicv} % 0432 CYRILLIC SMALL LETTER VE \defineactivetoken 227 {\cyrillicg} % 0433 CYRILLIC SMALL LETTER GHE \defineactivetoken 228 {\cyrillicd} % 0434 CYRILLIC SMALL LETTER DE \defineactivetoken 229 {\cyrillice} % 0435 CYRILLIC SMALL LETTER IE \defineactivetoken 230 {\cyrilliczh} % 0436 CYRILLIC SMALL LETTER ZHE \defineactivetoken 231 {\cyrillicz} % 0437 CYRILLIC SMALL LETTER ZE \defineactivetoken 232 {\cyrillici} % 0438 CYRILLIC SMALL LETTER I \defineactivetoken 233 {\cyrillicishrt} % 0439 CYRILLIC SMALL LETTER SHORT I \defineactivetoken 234 {\cyrillick} % 043A CYRILLIC SMALL LETTER KA \defineactivetoken 235 {\cyrillicl} % 043B CYRILLIC SMALL LETTER EL \defineactivetoken 236 {\cyrillicm} % 043C CYRILLIC SMALL LETTER EM \defineactivetoken 237 {\cyrillicn} % 043D CYRILLIC SMALL LETTER EN \defineactivetoken 238 {\cyrillico} % 043E CYRILLIC SMALL LETTER O \defineactivetoken 239 {\cyrillicp} % 043F CYRILLIC SMALL LETTER PE \defineactivetoken 240 {\cyrillicr} % 0440 CYRILLIC SMALL LETTER ER \defineactivetoken 241 {\cyrillics} % 0441 CYRILLIC SMALL LETTER ES \defineactivetoken 242 {\cyrillict} % 0442 CYRILLIC SMALL LETTER TE \defineactivetoken 243 {\cyrillicu} % 0443 CYRILLIC SMALL LETTER U \defineactivetoken 244 {\cyrillicf} % 0444 CYRILLIC SMALL LETTER EF \defineactivetoken 245 {\cyrillich} % 0445 CYRILLIC SMALL LETTER HA \defineactivetoken 246 {\cyrillicc} % 0446 CYRILLIC SMALL LETTER TSE \defineactivetoken 247 {\cyrillicch} % 0447 CYRILLIC SMALL LETTER CHE \defineactivetoken 248 {\cyrillicsh} % 0448 CYRILLIC SMALL LETTER SHA \defineactivetoken 249 {\cyrillicshch} % 0449 CYRILLIC SMALL LETTER SHCHA \defineactivetoken 250 {\cyrillichrdsn} % 044A CYRILLIC SMALL LETTER HARD SIGN \defineactivetoken 251 {\cyrillicery} % 044B CYRILLIC SMALL LETTER YERU \defineactivetoken 252 {\cyrillicsftsn} % 044C CYRILLIC SMALL LETTER SOFT SIGN \defineactivetoken 253 {\cyrillicerev} % 044D CYRILLIC SMALL LETTER E \defineactivetoken 254 {\cyrillicyu} % 044E CYRILLIC SMALL LETTER YU \defineactivetoken 255 {\cyrillicya} % 044F CYRILLIC SMALL LETTER YA \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/util-mrg.lua0000644000175000017500000001711512132111075024132 0ustar norbertnorbertif not modules then modules = { } end modules ['util-mrg'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- hm, quite unreadable local gsub, format = string.gsub, string.format local concat = table.concat local type, next = type, next local P, R, S, V, Ct, C, Cs, Cc, Cp, Cmt, Cb, Cg = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cp, lpeg.Cmt, lpeg.Cb, lpeg.Cg local lpegmatch, patterns = lpeg.match, lpeg.patterns utilities = utilities or { } local merger = utilities.merger or { } utilities.merger = merger merger.strip_comment = true local report = logs.reporter("system","merge") utilities.report = report local m_begin_merge = "begin library merge" local m_end_merge = "end library merge" local m_begin_closure = "do -- create closure to overcome 200 locals limit" local m_end_closure = "end -- of closure" local m_pattern = "%c+" .. "%-%-%s+" .. m_begin_merge .. "%c+(.-)%c+" .. "%-%-%s+" .. m_end_merge .. "%c+" local m_format = "\n\n-- " .. m_begin_merge .. "\n%s\n" .. "-- " .. m_end_merge .. "\n\n" local m_faked = "-- " .. "created merged file" .. "\n\n" .. "-- " .. m_begin_merge .. "\n\n" .. "-- " .. m_end_merge .. "\n\n" local m_report = [[ -- used libraries : %s -- skipped libraries : %s -- original bytes : %s -- stripped bytes : %s ]] local m_preloaded = [[package.loaded[%q] = package.loaded[%q] or true]] local function self_fake() return m_faked end local function self_nothing() return "" end local function self_load(name) local data = io.loaddata(name) or "" if data == "" then report("unknown file %a",name) else report("inserting file %a",name) end return data or "" end -- -- saves some 20K .. scite comments -- data = gsub(data,"%-%-~[^\n\r]*[\r\n]","") -- -- saves some 20K .. ldx comments -- data = gsub(data,"%-%-%[%[ldx%-%-.-%-%-ldx%]%]%-%-","") local space = patterns.space local eol = patterns.newline local equals = P("=")^0 local open = P("[") * Cg(equals,"init") * P("[") * P("\n")^-1 local close = P("]") * C(equals) * P("]") local closeeq = Cmt(close * Cb("init"), function(s,i,a,b) return a == b end) local longstring = open * (1 - closeeq)^0 * close local quoted = patterns.quoted local digit = patterns.digit local emptyline = space^0 * eol local operator1 = P("<=") + P(">=") + P("~=") + P("..") + S("/^<>=*+%%") local operator2 = S("*+/") local operator3 = S("-") local operator4 = P("..") local separator = S(",;") local ignore = (P("]") * space^1 * P("=") * space^1 * P("]")) / "]=[" + (P("=") * space^1 * P("{")) / "={" + (P("(") * space^1) / "(" + (P("{") * (space+eol)^1 * P("}")) / "{}" local strings = quoted -- / function (s) print("<<"..s..">>") return s end local longcmt = (emptyline^0 * P("--") * longstring * emptyline^0) / "" local longstr = longstring local comment = emptyline^0 * P("--") * P("-")^0 * (1-eol)^0 * emptyline^1 / "\n" local optionalspaces = space^0 / "" local mandatespaces = space^1 / "" local optionalspacing = (eol+space)^0 / "" local mandatespacing = (eol+space)^1 / "" local pack = digit * space^1 * operator4 * optionalspacing + optionalspacing * operator1 * optionalspacing + optionalspacing * operator2 * optionalspaces + mandatespacing * operator3 * mandatespaces + optionalspaces * separator * optionalspaces local lines = emptyline^2 / "\n" local spaces = (space * space) / " " ----- spaces = ((space+eol)^1 ) / " " local compact = Cs ( ( ignore + strings + longcmt + longstr + comment + pack + lines + spaces + 1 )^1 ) local strip = Cs((emptyline^2/"\n" + 1)^0) local stripreturn = Cs((1-P("return") * space^1 * P(1-space-eol)^1 * (space+eol)^0 * P(-1))^1) function merger.compact(data) return lpegmatch(strip,lpegmatch(compact,data)) end local function self_compact(data) local delta = 0 if merger.strip_comment then local before = #data data = lpegmatch(compact,data) data = lpegmatch(strip,data) -- also strips in longstrings ... alas -- data = string.strip(data) local after = #data delta = before - after report("original size %s, compacted to %s, stripped %s",before,after,delta) data = format("-- original size: %s, stripped down to: %s\n\n%s",before,after,data) end return lpegmatch(stripreturn,data) or data, delta end local function self_save(name, data) if data ~= "" then io.savedata(name,data) report("saving %s with size %s",name,#data) end end local function self_swap(data,code) return data ~= "" and (gsub(data,m_pattern, function() return format(m_format,code) end, 1)) or "" end local function self_libs(libs,list) local result, f, frozen, foundpath = { }, nil, false, nil result[#result+1] = "\n" if type(libs) == 'string' then libs = { libs } end if type(list) == 'string' then list = { list } end for i=1,#libs do local lib = libs[i] for j=1,#list do local pth = gsub(list[j],"\\","/") -- file.clean_path report("checking library path %a",pth) local name = pth .. "/" .. lib if lfs.isfile(name) then foundpath = pth end end if foundpath then break end end if foundpath then report("using library path %a",foundpath) local right, wrong, original, stripped = { }, { }, 0, 0 for i=1,#libs do local lib = libs[i] local fullname = foundpath .. "/" .. lib if lfs.isfile(fullname) then report("using library %a",fullname) local preloaded = file.nameonly(lib) local data = io.loaddata(fullname,true) original = original + #data local data, delta = self_compact(data) right[#right+1] = lib result[#result+1] = m_begin_closure result[#result+1] = format(m_preloaded,preloaded,preloaded) result[#result+1] = data result[#result+1] = m_end_closure stripped = stripped + delta else report("skipping library %a",fullname) wrong[#wrong+1] = lib end end right = #right > 0 and concat(right," ") or "-" wrong = #wrong > 0 and concat(wrong," ") or "-" report("used libraries: %a",right) report("skipped libraries: %a",wrong) report("original bytes: %a",original) report("stripped bytes: %a",stripped) result[#result+1] = format(m_report,right,wrong,original,stripped) else report("no valid library path found") end return concat(result, "\n\n") end function merger.selfcreate(libs,list,target) if target then self_save(target,self_swap(self_fake(),self_libs(libs,list))) end end function merger.selfmerge(name,libs,list,target) self_save(target or name,self_swap(self_load(name),self_libs(libs,list))) end function merger.selfclean(name) self_save(name,self_swap(self_load(name),self_nothing())) end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-run.mkii0000644000175000017500000000176511754241457024312 0ustar norbertnorbert%D \module %D [ file=lang-run, %D version=2005.09.08, %D title=\CONTEXT\ Language Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code is hooked into the core macros and saves some %D format space.] \unprotect \gdef\showpatterns {\bgroup \def\doshowpatterns##1##2##3##4% language number encoding mapping {\NC##1\NC##3\NC##4\NC##2\NC \specificlanguageparameter{##1}\s!lefthyphenmin \NC \specificlanguageparameter{##1}\s!righthyphenmin\NC\NR}% \starttabulate[|c|c|c|c|c|c|] \HL \NC \bf language \NC \bf encoding \NC \bf mapping \NC \bf number \NC \bf left\low{min} \NC \bf right\low{min} \NC \NR \HL \preloadedpmessage \HL \stoptabulate \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-004.mkii0000644000175000017500000003372211754241457024024 0ustar norbertnorbert%D \module %D [ file=unic-004, %D version=2005.01.27, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 4, %D author=Mikael Persson \& Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startunicodevector 4 \expandafter\strippedcsname \ifcase\numexpr#1\relax \cyrillicEgrave \or % 04-00 \uchar0{200} aswell \cyrillicYO \or % 04-01 Capital YO (or IO) \cyrillicDJE \or % 04-02 \cyrillicGJE \or % 04-03 not in enco-uc.tex \cyrillicIE \or % 04-04 Ukrainian IE \cyrillicDZE \or % 04-05 \cyrillicII \or % 04-06 Byelorussian-ukrainian I \cyrillicYI \or % 04-07 \cyrillicJE \or % 04-08 same letter as latin J? \cyrillicLJE \or % 04-09 \cyrillicNJE \or % 04-0A \cyrillicTSHE \or % 04-0B \cyrillicKJE \or % 04-0C \cyrillicIgrave \or % 04-0D I with grave \cyrillicUSHRT \or % 04-0E \cyrillicDZHE \or % 04-0F \cyrillicA \or % 04-10 \cyrillicB \or \cyrillicV \or \cyrillicG \or \cyrillicD \or \cyrillicE \or \cyrillicZH \or \cyrillicZ \or \cyrillicI \or \cyrillicISHRT \or \cyrillicK \or \cyrillicL \or \cyrillicM \or \cyrillicN \or \cyrillicO \or \cyrillicP \or \cyrillicR \or \cyrillicS \or \cyrillicT \or \cyrillicU \or \cyrillicF \or \cyrillicH \or \cyrillicC \or \cyrillicCH \or \cyrillicSH \or \cyrillicSHCH \or \cyrillicHRDSN \or \cyrillicERY \or \cyrillicSFTSN \or \cyrillicEREV \or \cyrillicYU \or \cyrillicYA \or \cyrillica \or % 04-30 \cyrillicb \or \cyrillicv \or \cyrillicg \or \cyrillicd \or \cyrillice \or \cyrilliczh \or \cyrillicz \or \cyrillici \or \cyrillicishrt \or \cyrillick \or \cyrillicl \or \cyrillicm \or \cyrillicn \or \cyrillico \or \cyrillicp \or \cyrillicr \or \cyrillics \or \cyrillict \or \cyrillicu \or \cyrillicf \or \cyrillich \or \cyrillicc \or \cyrillicch \or \cyrillicsh \or \cyrillicshch \or \cyrillichrdsn \or \cyrillicery \or \cyrillicsftsn \or \cyrillicerev \or \cyrillicyu \or \cyrillicya \or % 044F \cyrillicegrave \or % 0450 not i enco-uc.tex but same as \uchar0{232} \cyrillicyo \or % 0451 small yo (or io) \cyrillicdje \or % 0452 serbian letter \cyrillicgje \or % 0453 macedonian letter not in enco-uc.tex \cyrillicie \or % 0454 ukrainian ie \cyrillicdze \or % 0455 macedonian zelo \cyrillicii \or % 0456 byelorussian-ukrainian i. \cyrillicyi \or % 0457 \cyrillicje \or % 0458 not in enco-uc.tex same as latin j? \cyrilliclje \or % 0459 \cyrillicnje \or % 045A \cyrillictshe \or % 045B \cyrillickje \or % 045C macedonian, not in enco-uc.tex \cyrillicigrave \or % 045D macedonian, cyr i with grave not in enco-uc.tex \cyrillicushrt \or % 045E \cyrillicdzhe \or % 045F \cyrillicOMEGA \or % 0460 Omega not in enco-uc.tex \cyrillicomega \or % 0461 omega not in enco-uc.tex \cyrillicYAT \or % 0462 Yat not in enco-uc.tex \cyrillicyat \or % 0463 Yat not in enco-uc.tex \cyrillicEiotified \or % 0464 iotified E not in enco-uc.tex \cyrilliceiotified \or % 0465 iotified e not in enco-uc.tex \cyrillicLITTLEYUS \or % 0466 Little Yus not in enco-enc.tex \cyrilliclittleyus \or % 0467 Little yus not in enco-enc.tex \cyrillicLITTLEYUSiotified \or % 0468 Little Yus iotified not in enco-enc.tex \cyrilliclittleyusiotified \or % 0469 Little yus iotified not in enco-enc.tex \cyrillicBIGYUS \or % 046A Big Yus not in enco-enc.tex \cyrillicbigyus \or % 046B Big yus not in enco-enc.tex \cyrillicBIGYUSiotified \or % 046C Big Yus iotified not in enco-enc.tex \cyrillicbigyusiotified \or % 046D Big yus iotified not in enco-enc.tex \cyrillicKSI \or % 046E Ksi not in enco-enc.tex \cyrillicksi \or % 046F ksi not in enco-enc.tex \cyrillicPSI \or % 0470 Psi not in enco-enc.tex \cyrillicpsi \or % 0471 psi not in enco-enc.tex \cyrillicFITA \or % 0472 Fita not in enco-enc.tex \cyrillicfita \or % 0473 fita not in enco-enc.tex \cyrillicIZHITSA \or % 0474 Izhitsa not in enco-enc.tex \cyrillicizhitsa \or % 0475 izhitsa not in enco-enc.tex \cyrillicIZHITSAdoublegrave \or % 0476 Izhitsa double grave not in enco-enc.tex \cyrillicizhitsadoublegrave \or % 0477 izhitsa double grave not in enco-enc.tex \cyrillicUK \or % 0478 UK not in enco-enc.tex \cyrillicuk \or % 0479 uk not in enco-enc.tex \cyrillicOMEGAround \or % 047A Round Omega not in enco-enc.tex \cyrillicomegaround \or % 047B Round omega not in enco-enc.tex \cyrillicOMEGAtitlo \or % 047C Omega with titlo not in enco-enc.tex \cyrillicomegatitlo \or % 047D omega with titlo not in enco-enc.tex \cyrillicOT \or % 047E OT not in enco-enc.tex \cyrillicot \or % 047F ot not in enco-enc.tex \cyrillicKOPPA \or % 0480 KOPPA not in enco-enc.tex \cyrillickoppa \or % 0481 koppa not in enco-enc.tex \unknownchar \or % 0482 \cyrillicTITLO \or % 0483 TITLO not in enco-enc.tex \cyrillicPALATALIZATION \or % 0484 PALATALIZATION not in enco-enc.tex \cyrillicDASIAPNEUMATA \or % 0485 DASIA PNEUMATA not in enco-enc.tex \cyrillicPSILIPNEUMATA \or % 0486 PSILI PNEUMATA not in enco-enc.tex \unknownchar \or % 0487 \unknownchar \or % 0488 \unknownchar \or % 0489 \cyrillicISHRTtail \or % 048A ISHRT with tail not in enco-enc.tex \cyrillicishrttail \or % 048B ishrt with tail not in enco-enc.tex \cyrillicSEMISOFT \or % 048C SEMISOFT not in enco-enc.tex \cyrillicsemisoft \or % 048D semisoft not in enco-enc.tex \cyrillicERtick \or % 048E ER with tick not in enco-enc.tex \cyrillicertick \or % 048F er with tick not in enco-enc.tex \cyrillicGHEupturn \or % 0490 GHE with upturn not in enco-enc.tex \cyrillicgheupturn \or % 0491 ghe with upturn not in enco-enc.tex \cyrillicGHEstroke \or % 0492 GHE with stroke not in enco-enc.tex \cyrillicghestroke \or % 0493 ghe with stroke not in enco-enc.tex \cyrillicGHEmidhook \or % 0494 GHE with middle hook \cyrillicghemidhook \or % 0495 ghe with middle hook \cyrillicZHEdescender \or % 0496 ZHE with descender \cyrilliczhedescender \or % 0497 zhe with descender \cyrillicZDSC \or % 0498 ZE with descender \cyrilliczdsc \or % 0499 ze with descender \cyrillicKADC \or % 049A KA with descender \cyrillickadc \or % 049B ka with descender \cyrillicKAvertstroke \or % 049C KA with vertical stroke \cyrillickavertstroke \or % 049D ka with vertical stroke \cyrillicKAstroke \or % 049E KA with stroke \cyrillickastroke \or % 049F ka with stroke \cyrillicKAbashkir \or % 04A0 KA bashkir \cyrillickabashkir \or % 04A1 ka bashkir \cyrillicENDC \or % 04A2 EN with descender \cyrillicendc \or % 04A3 en with descender \cyrillicENGHE \or % 04A4 EN GHE \cyrillicenghe \or % 04A5 en ghe \cyrillicPEmidhook \or % 04A6 PE with middle hook \cyrillicpemidhook \or % 04A7 pe with middle hook \cyrillicHA \or % 04A8 Abkhasian HA \cyrillicha \or % 04A9 Abkhasian ha \cyrillicSDSC \or % 04AA S with descender \cyrilliccdsc \or % 04AB s with descender \cyrillicTEDC \or % 04AC TE with descender \cyrillictedc \or % 04AD te with descender \cyrillicYstr \or % 04AE Y straight \cyrillicystr \or % 04AF y straight \cyrillicYstrstroke \or % 04B0 Y straight with stroke \cyrillicystrstroke \or % 04B1 y straight with stroke \cyrillicHADC \or % 04B2 HA with descender \cyrillichadc \or % 04B3 ha with descender \cyrillicTETSE \or % 04B4 TE TSE \cyrillictetse \or % 04B5 te tse \cyrillicCHEDC \or % 04B6 CHE with descender \cyrillicchedc \or % 04B7 che with descender \cyrillicCHEvertstroke \or % 04B8 CHE with vertical stroke \cyrillicchevertstroke \or % 04B9 che with vertical stroke \cyrillicSHHA \or % 04BA SHHA \cyrillicshha \or % 04BB \cyrillicCHEabkhasian \or % 04BC Abkhasian CHE \cyrilliccheabkhasian \or % 04BD Abkhasian che \cyrillicCHEDCabkhasian \or % 04BE Abkhasian CHE with descender \cyrillicchedcabkhasian \or % 04BF Abkhasian che with descender \cyrillicPALOCHKA \or % 04C0 PALOCHKA \cyrillicZHEbreve \or % 04C1 ZHE with breve \cyrilliczhebreve \or % 04C2 zhe with breve \cyrillicKAhook \or % 04C3 KA with hook \cyrillickahook \or % 04C4 ka with hook \cyrillicELtail \or % 04C5 EL with tail \cyrilliceltail \or % 04C6 el with tail \cyrillicENhook \or % 04C7 EN with hook \cyrillicenhook \or % 04C8 en with hook \cyrillicENtail \or % 04C9 EN with tail \cyrillicentail \or % 04CA en with tail \cyrillicCHEkhakassian \or % 04CB Khakassian CHE \cyrillicchekhakassian \or % 04CC Khakassian che \cyrillicEMtail \or % 04CD EM with tail \cyrillicemtail \or % 04CE em with tail \unknownchar \or % 04CF Added to fix off-by-1 error \cyrillicAbreve \or % 04D0 A with breve (\uchar1{2}) \cyrillicabreve \or % 04D1 a with breve (\uchar1{3}) \cyrillicAdiaeresis \or % 04D2 A with diaeresis (\uchar0{196}) \cyrillicadiaeresis \or % 04D3 a with diaeresis (\uchar0{228}) \cyrillicAE \or % 04D4 AE (\uchar0{198}) \cyrillicae \or % 04D5 ae (\uchar0{230}) \cyrillicEbreve \or % 04D6 \cyrillicebreve \or % 04D7 \cyrillicSCHWA \or % 04D8 \cyrillicschwa \or % 04D9 \cyrillicSCHWAdiaeresis \or % 04DA \cyrillicschwadiaeresis \or % 04DB \cyrillicZHEdiaeresis \or % 04DC \cyrilliczhediaeresis \or % 04DD \cyrillicZEdiaeresis \or % 04DE \cyrilliczediaeresis \or % 04DF \cyrillicDZEabkhasian \or % 04E0 \cyrillicdzeabkhasian \or % 04E1 \cyrillicImacron \or % 04E2 \cyrillicimacron \or % 04E3 \cyrillicIdiaeresis \or % 04E4 \cyrillicidiaeresis \or % 04E5 \cyrillicOdiaeresis \or % 04E6 \cyrillicodiaeresis \or % 04E7 \cyrillicObarred \or % 04E8 \cyrillicobarred \or % 04E9 \cyrillicObarreddiaeresis \or % 04EA \cyrillicobarreddiaeresis \or % 04EB \cyrillicEdiaeresis \or % 04EC \cyrillicediaeresis \or % 04ED \cyrillicUmacron \or % 04EE \cyrillicumacron \or % 04EF \cyrillicUdiaeresis \or % 04F0 \cyrillicudiaeresis \or % 04F1 \cyrillicUdoubleacute \or % 04F2 \cyrillicudoubleacute \or % 04F3 \cyrillicCHEdiaeresis \or % 04F4 \cyrillicchediaeresis \or % 04F5 \unknownchar \or % 04F6 \unknownchar \or % 04F7 \cyrillicYERUdiaeresis \or % 04F8 \cyrillicyerudiaeresis \else \unknownchar \fi \stopunicodevector \protect \endinput % \enableregime[utf] % % \definetypeface [russian] [rm] [serif] [computer-modern] [default] [encoding=t2a] % % \setupbodyfont[russian] % % \starttext % % \startbuffer % Мама и Папа % Some russian characters % \stopbuffer % % \utfunicodetracer=0 \blank \getbuffer \blank % \utfunicodetracer=2 \blank \getbuffer \blank % \utfunicodetracer=7 \blank \getbuffer \blank % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/node-ref.lua0000644000175000017500000005033412130411274024073 0ustar norbertnorbertif not modules then modules = { } end modules ['node-ref'] = { version = 1.001, comment = "companion to node-ref.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We supported pdf right from the start and in mkii this has resulted in -- extensive control over the links. Nowadays pdftex provides a lot more -- control over margins but as mkii supports multiple backends we stuck to -- our own mechanisms. In mkiv again we implement our own handling. Eventually -- we will even disable the pdf primitives. -- helper, will end up in luatex -- is grouplevel still used? local format = string.format local allocate, mark = utilities.storage.allocate, utilities.storage.mark local cleanupreferences, cleanupdestinations = false, true local attributes, nodes, node = attributes, nodes, node local nodeinjections = backends.nodeinjections local codeinjections = backends.codeinjections local transparencies = attributes.transparencies local colors = attributes.colors local references = structures.references local tasks = nodes.tasks local hpack_list = node.hpack local list_dimensions = node.dimensions -- current.glue_set current.glue_sign local trace_backend = false trackers.register("nodes.backend", function(v) trace_backend = v end) local trace_references = false trackers.register("nodes.references", function(v) trace_references = v end) local trace_destinations = false trackers.register("nodes.destinations", function(v) trace_destinations = v end) local report_reference = logs.reporter("backend","references") local report_destination = logs.reporter("backend","destinations") local report_area = logs.reporter("backend","areas") local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local whatcodes = nodes.whatcodes local listcodes = nodes.listcodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue local whatsit_code = nodecodes.whatsit local leftskip_code = skipcodes.leftskip local rightskip_code = skipcodes.rightskip local parfillskip_code = skipcodes.parfillskip local localpar_code = whatcodes.localpar local dir_code = whatcodes.dir local line_code = listcodes.line local nodepool = nodes.pool local new_kern = nodepool.kern local traverse = node.traverse local find_node_tail = node.tail or node.slide local tosequence = nodes.tosequence -- local function dimensions(parent,start,stop) -- stop = stop and stop.next -- if parent then -- if stop then -- return list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,start,stop) -- else -- return list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,start) -- end -- else -- if stop then -- return list_dimensions(start,stop) -- else -- return list_dimensions(start) -- end -- end -- end -- -- -- more compact local function dimensions(parent,start,stop) if parent then return list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,start,stop and stop.next) else return list_dimensions(start,stop and stop.next) end end -- is pardir important at all? local function inject_range(head,first,last,reference,make,stack,parent,pardir,txtdir) local width, height, depth = dimensions(parent,first,last) if txtdir == "+TRT" or (txtdir == "===" and pardir == "TRT") then -- KH: textdir == "===" test added width = - width end local result, resolved = make(width,height,depth,reference) if result and resolved then if head == first then if trace_backend then report_area("head: %04i %s %s %s => w=%p, h=%p, d=%p, c=%s",reference,pardir or "---",txtdir or "----",tosequence(first,last,true),width,height,depth,resolved) end result.next = first first.prev = result return result, last else if trace_backend then report_area("middle: %04i %s %s => w=%p, h=%p, d=%p, c=%s",reference,pardir or "---",txtdir or "----",tosequence(first,last,true),width,height,depth,resolved) end local prev = first.prev if prev then result.next = first result.prev = prev prev.next = result first.prev = result else result.next = first first.prev = result end if first == head.next then head.next = result -- hm, weird end return head, last end else return head, last end end local function inject_list(id,current,reference,make,stack,pardir,txtdir) local width, height, depth, correction = current.width, current.height, current.depth, 0 local moveright = false local first = current.list if id == hlist_code then -- box_code line_code -- can be either an explicit hbox or a line and there is no way -- to recognize this; anyway only if ht/dp (then inline) local sr = stack[reference] if first then if sr and sr[2] then local last = find_node_tail(first) if last.id == glue_code and last.subtype == rightskip_code then local prev = last.prev moveright = first.id == glue_code and first.subtype == leftskip_code if prev and prev.id == glue_code and prev.subtype == parfillskip_code then width = dimensions(current,first,prev.prev) -- maybe not current as we already take care of it else if moveright and first.writable then width = width - first.spec.stretch*current.glue_set * current.glue_sign end if last.writable then width = width - last.spec.stretch*current.glue_set * current.glue_sign end end end else -- also weird end else -- ok end correction = width else correction = height + depth height, depth = depth, height -- ugly hack, needed because pdftex backend does something funny end if pardir == "TRT" then width = - width end local result, resolved = make(width,height,depth,reference) -- todo: only when width is ok if result and resolved then if trace_backend then report_area("box: %04i %s %s: w=%p, h=%p, d=%p, c=%s",reference,pardir or "---",txtdir or "----",width,height,depth,resolved) end if not first then current.list = result elseif moveright then -- brr no prevs done -- result after first local n = first.next result.next = n first.next = result result.prev = first if n then n.prev = result end else -- first after result result.next = first first.prev = result current.list = result end end end -- skip is somewhat messy local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,txtdir) -- main if head then local current, first, last, firstdir, reference = head, nil, nil, nil, nil pardir = pardir or "===" txtdir = txtdir or "===" while current do local id = current.id if id == hlist_code or id == vlist_code then local r = current[attribute] -- somehow reference is true so the following fails (second one not done) in -- test \goto{test}[page(2)] test \gotobox{test}[page(2)] -- so let's wait till this fails again -- if not reference and r and (not skip or r > skip) then -- > or ~= if r and (not skip or r > skip) then -- > or ~= inject_list(id,current,r,make,stack,pardir,txtdir) end if r then done[r] = (done[r] or 0) + 1 end local list = current.list if list then local _ current.list, _, pardir, txtdir = inject_areas(list,attribute,make,stack,done,r or skip or 0,current,pardir,txtdir) end if r then done[r] = done[r] - 1 end elseif id == whatsit_code then local subtype = current.subtype if subtype == localpar_code then pardir = current.dir elseif subtype == dir_code then txtdir = current.dir end elseif id == glue_code and current.subtype == leftskip_code then -- any glue at the left? -- else local r = current[attribute] if not r then -- just go on, can be kerns elseif not reference then reference, first, last, firstdir = r, current, current, txtdir elseif r == reference then last = current elseif (done[reference] or 0) == 0 then -- or id == glue_code and current.subtype == right_skip_code if not skip or r > skip then -- maybe no > test head, current = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir) reference, first, last, firstdir = nil, nil, nil, nil end else reference, first, last, firstdir = r, current, current, txtdir end end current = current.next end if reference and (done[reference] or 0) == 0 then head = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir) end end return head, true, pardir, txtdir end local function inject_area(head,attribute,make,stack,done,parent,pardir,txtdir) -- singular ! if head then pardir = pardir or "===" txtdir = txtdir or "===" local current = head while current do local id = current.id if id == hlist_code or id == vlist_code then local r = current[attribute] if r and not done[r] then done[r] = true inject_list(id,current,r,make,stack,pardir,txtdir) end local list = current.list if list then current.list = inject_area(list,attribute,make,stack,done,current,pardir,txtdir) end elseif id == whatsit_code then local subtype = current.subtype if subtype == localpar_code then pardir = current.dir elseif subtype == dir_code then txtdir = current.dir end else local r = current[attribute] if r and not done[r] then done[r] = true head, current = inject_range(head,current,current,r,make,stack,parent,pardir,txtdir) end end current = current.next end end return head, true end -- tracing local nodepool = nodes.pool local new_rule = nodepool.rule local new_kern = nodepool.kern local set_attribute = node.set_attribute local register_color = colors.register local a_color = attributes.private('color') local a_colormodel = attributes.private('colormodel') local a_transparency = attributes.private('transparency') local u_transparency = nil local u_colors = { } local force_gray = true local function colorize(width,height,depth,n,reference,what) if force_gray then n = 0 end u_transparency = u_transparency or transparencies.register(nil,2,.65) local ucolor = u_colors[n] if not ucolor then if n == 1 then u_color = register_color(nil,'rgb',.75,0,0) elseif n == 2 then u_color = register_color(nil,'rgb',0,.75,0) elseif n == 3 then u_color = register_color(nil,'rgb',0,0,.75) else n = 0 u_color = register_color(nil,'gray',.5) end u_colors[n] = u_color end if width == 0 then -- probably a strut as placeholder report_area("%s %s has no %s dimensions, width %p, height %p, depth %p",what,reference,"horizontal",width,height,depth) width = 65536 end if height + depth <= 0 then report_area("%s %s has no %s dimensions, width %p, height %p, depth %p",what,reference,"vertical",width,height,depth) height = 65536/2 depth = height end local rule = new_rule(width,height,depth) rule[a_colormodel] = 1 -- gray color model rule[a_color] = u_color rule[a_transparency] = u_transparency if width < 0 then local kern = new_kern(width) rule.width = -width kern.next = rule rule.prev = kern return kern else return rule end end local nodepool = nodes.pool local new_kern = nodepool.kern local texattribute = tex.attribute local texcount = tex.count -- references: local stack = { } local done = { } local attribute = attributes.private('reference') local nofreferences = 0 local topofstack = 0 nodes.references = { attribute = attribute, stack = stack, done = done, } -- todo: get rid of n (n is just a number, can be used for tracing, obsolete) local function setreference(h,d,r) topofstack = topofstack + 1 -- the preroll permits us to determine samepage (but delayed also has some advantages) -- so some part of the backend work is already done here stack[topofstack] = { r, h, d, codeinjections.prerollreference(r) } -- texattribute[attribute] = topofstack -- todo -> at tex end texcount.lastreferenceattribute = topofstack end function references.get(n) -- not public so functionality can change local sn = stack[n] return sn and sn[1] end local function makereference(width,height,depth,reference) local sr = stack[reference] if sr then if trace_references then report_reference("resolving attribute %a",reference) end local resolved, ht, dp, set, n = sr[1], sr[2], sr[3], sr[4], sr[5] if ht then if height < ht then height = ht end if depth < dp then depth = dp end end local annot = nodeinjections.reference(width,height,depth,set) if annot then nofreferences = nofreferences + 1 local result, current if trace_references then local step = 65536 result = hpack_list(colorize(width,height-step,depth-step,2,reference,"reference")) -- step subtracted so that we can see seperate links result.width = 0 current = result end if current then current.next = annot else result = annot end references.registerpage(n) result = hpack_list(result,0) result.width, result.height, result.depth = 0, 0, 0 if cleanupreferences then stack[reference] = nil end return result, resolved elseif trace_references then report_reference("unable to resolve annotation %a",reference) end elseif trace_references then report_reference("unable to resolve attribute %a",reference) end end function nodes.references.handler(head) if topofstack > 0 then return inject_areas(head,attribute,makereference,stack,done) else return head, false end end -- destinations (we can clean up once set, unless tagging!) local stack = { } local done = { } local attribute = attributes.private('destination') local nofdestinations = 0 local topofstack = 0 nodes.destinations = { attribute = attribute, stack = stack, done = done, } local function setdestination(n,h,d,name,view) -- n = grouplevel, name == table topofstack = topofstack + 1 stack[topofstack] = { n, h, d, name, view } return topofstack end local function makedestination(width,height,depth,reference) local sr = stack[reference] if sr then if trace_destinations then report_destination("resolving attribute %a",reference) end local resolved, ht, dp, name, view = sr[1], sr[2], sr[3], sr[4], sr[5] if ht then if height < ht then height = ht end if depth < dp then depth = dp end end local result, current if trace_destinations then local step = 0 if width == 0 then step = 4*65536 width, height, depth = 5*step, 5*step, 0 end for n=1,#name do local rule = hpack_list(colorize(width,height,depth,3,reference,"destination")) rule.width = 0 if not result then result, current = rule, rule else current.next = rule rule.prev = current current = rule end width, height = width - step, height - step end end nofdestinations = nofdestinations + 1 for n=1,#name do local annot = nodeinjections.destination(width,height,depth,name[n],view) if not result then result = annot else current.next = annot annot.prev = current end current = find_node_tail(annot) end if result then -- some internal error result = hpack_list(result,0) result.width, result.height, result.depth = 0, 0, 0 end if cleanupdestinations then stack[reference] = nil end return result, resolved elseif trace_destinations then report_destination("unable to resolve attribute %a",reference) end end function nodes.destinations.handler(head) if topofstack > 0 then return inject_area(head,attribute,makedestination,stack,done) -- singular else return head, false end end -- will move function references.mark(reference,h,d,view) return setdestination(tex.currentgrouplevel,h,d,reference,view) end function references.inject(prefix,reference,h,d,highlight,newwindow,layer) -- todo: use currentreference is possible local set, bug = references.identify(prefix,reference) if bug or #set == 0 then -- unknown ref, just don't set it and issue an error else -- check set.highlight, set.newwindow,set.layer = highlight, newwindow, layer setreference(h,d,set) -- sets attribute / todo: for set[*].error end end function references.injectcurrentset(h,d) -- used inside doifelse local currentset = references.currentset if currentset then setreference(h,d,currentset) -- sets attribute / todo: for set[*].error end end commands.injectreference = references.inject commands.injectcurrentreference = references.injectcurrentset -- local function checkboth(open,close) if open and open ~= "" then local set, bug = references.identify("",open) open = not bug and #set > 0 and set end if close and close ~= "" then local set, bug = references.identify("",close) close = not bug and #set > 0 and set end return open, close end -- end temp hack statistics.register("interactive elements", function() if nofreferences > 0 or nofdestinations > 0 then return format("%s references, %s destinations",nofreferences,nofdestinations) else return nil end end) function references.enableinteraction() tasks.enableaction("shipouts","nodes.references.handler") tasks.enableaction("shipouts","nodes.destinations.handler") end context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-demo.lua0000644000175000017500000000105311571377075024260 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-demo'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- digits -> * return { [0x0030] = 0x002A, [0x0031] = 0x002A, [0x0032] = 0x002A, [0x0033] = 0x002A, [0x0034] = 0x002A, [0x0035] = 0x002A, [0x0036] = 0x002A, [0x0037] = 0x002A, [0x0038] = 0x002A, [0x0039] = 0x002A, } context-2013.05.28.20130704/texmf-dist/tex/context/base/page-lay.mkii0000644000175000017500000014077711754241457024275 0ustar norbertnorbert%D \module %D [ file=page-lay, %D version=2000.10.20, % copied from main-001 %D title=\CONTEXT\ Page Macros, %D subtitle=Layout Specification, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Layout Specification} %D This module is now etex dependent. % to be translated into english % hoofdhoogte wordt bij status=hoog niet aangepast op outer % level, wel binnen bepaalde berekeningen %D Before you start wondering why some of the page related %D modules skip upward or left in order to place elements, you %D must realize that the reference point is the top left %D corner of the main typesetting area. One reason for this %D choice is that it suited some viewers that displayed page %D areas. Another reason is that margins, edges and top and %D bottom areas are kind of virtual, while the header, text %D and footer areas normally determine the text flow. \unprotect %D First we get rid of the funny \TEX\ offset defaults of one %D inch by setting them to zero. \voffset = 0pt % setting this to -1in let's go metapost crazy \hoffset = 0pt % setting this to -1in let's go metapost crazy %D The dimensions related to layout areas are represented by %D real dimensions. \newdimen\paperheight \paperheight = 297mm \newdimen\paperwidth \paperwidth = 210mm \newdimen\printpaperheight \printpaperheight = \paperheight \newdimen\printpaperwidth \printpaperwidth = \paperwidth \newdimen\makeupheight % calculated \newdimen\makeupwidth % calculated \newdimen\textheight % calculated \newdimen\textwidth % calculated \newdimen\topspace \topspace = 2cm \newdimen\backspace \backspace = \topspace \newdimen\cutspace \cutspace = 0pt \newdimen\bottomspace \bottomspace = 0pt \newdimen\headerheight \headerheight = 2cm \newdimen\footerheight \footerheight = \headerheight \newdimen\topoffset \topoffset = 0pt \newdimen\backoffset \backoffset = \topoffset \newdimen\leftmarginwidth \leftmarginwidth = 3cm \newdimen\rightmarginwidth \rightmarginwidth = \leftmarginwidth \newdimen\leftedgewidth \leftedgewidth = 3cm \newdimen\rightedgewidth \rightedgewidth = \leftedgewidth \newdimen\topheight \topheight = 0cm \newdimen\bottomheight \bottomheight = \topheight \newcount\layoutlines \layoutlines = 0 \newcount\layoutcolumns \layoutcolumns = 0 \newdimen\layoutcolumndistance \layoutcolumndistance = 0pt \newdimen\layoutcolumnwidth \layoutcolumnwidth = 0pt %D We can save some tokens and fuzzy parameters by using a %D symbolic name for the current set of layout parameters. \let\currentlayout\empty \def\layoutparameter#1% {\csname\??ly\ifcsname \??ly\currentlayout#1\endcsname\currentlayout \fi#1\endcsname} \def\namedlayoutparameter#1#2% {\csname\??ly\ifcsname\??ly #1#2\endcsname#1\else \ifcsname\??ly\currentlayout#2\endcsname\currentlayout \fi\fi#2\endcsname} %D Beause normal \TEX\ has at most 256 dimensions (of which a %D substantial part is already in use), we provide a way to %D generate a format with macro based alternatives. For a long %D time, this used to be the default case. Beware: only fixed %D dimensions can be used in calculations! By the way, the %D gain in speed can hardly be called impressive and is roughly %D 1 second on a 35 second run of 850 empty pages with a %D couple of backgrounds only (which is far less than one %D percent on a normal document). %D The next series of dimensions are complemented by left %D and rights ones. \newdimen \margindistance \newdimen \edgedistance \newdimen \marginwidth \newdimen \edgewidth %D Because a distance does not really makes sense when there %D is no area, we use a zero distance in case there is no %D area. \def\layoutdistance#1#2% {\ifdim\zeropoint<#1\layoutparameter#2\else\zeropoint\fi} %D The horizontal distances are: \newdimen \leftedgedistance \newdimen \rightedgedistance \newdimen \leftmargindistance \newdimen \rightmargindistance %D The vertical distances are: \newdimen \topdistance \newdimen \headerdistance \newdimen \footerdistance \newdimen \bottomdistance %D We need to calculate the extra distances: \def\setlayoutdimensions {\global\marginwidth \layoutparameter\c!margin \global\edgewidth \layoutparameter\c!edge \global\margindistance \layoutparameter\c!margindistance \global\edgedistance \layoutparameter\c!edgedistance \global\leftedgedistance \layoutdistance \leftedgewidth \c!leftedgedistance \global\rightedgedistance \layoutdistance \rightedgewidth \c!rightedgedistance \global\leftmargindistance \layoutdistance \leftmarginwidth \c!leftmargindistance \global\rightmargindistance\layoutdistance \rightmarginwidth \c!rightmargindistance \global\topdistance \layoutdistance \topheight \c!topdistance \global\headerdistance \layoutdistance \headerheight \c!headerdistance \global\footerdistance \layoutdistance \footerheight \c!footerdistance \global\bottomdistance \layoutdistance \bottomheight \c!bottomdistance} \def\setlayoutdistances % local in \setreducedvsize {\headerdistance\layoutdistance\headerheight\c!headerdistance \footerdistance\layoutdistance\footerheight\c!footerdistance} % these are wrong in the running text, assumes some swapping, needs a cleanup \def\outermarginwidth {\rightorleftpageaction\rightmarginwidth \leftmarginwidth } \def\innermarginwidth {\rightorleftpageaction\leftmarginwidth \rightmarginwidth} \def\outermargindistance{\rightorleftpageaction\rightmargindistance\leftmargindistance } \def\innermargindistance{\rightorleftpageaction\leftmargindistance \rightmargindistance} \def\outeredgewidth {\rightorleftpageaction\rightedgewidth \leftedgewidth } \def\inneredgewidth {\rightorleftpageaction\leftedgewidth \rightedgewidth} \def\outeredgedistance {\rightorleftpageaction\rightedgedistance\leftedgedistance } \def\inneredgedistance {\rightorleftpageaction\leftedgedistance \rightedgedistance} \def\outerspacewidth {\rightorleftpageaction\cutspace\backspace} \def\innerspacewidth {\rightorleftpageaction\backspace\cutspace} \newtoks\extralayoutcalculations \def\calculatelayoutextras{\the\extralayoutcalculations} % \appendtoks % non etex calculations used to go here % \to \extralayoutcalculations \newtoks\everyswapmargins % watch the order ! \appendtoks \swapdimens\leftmargindistance\rightmargindistance \swapdimens\leftedgedistance \rightedgedistance \swapdimens\leftmarginwidth \rightmarginwidth \swapdimens\leftedgewidth \rightedgewidth \to \everyswapmargins \appendtoks \swapmacros\leftmargintotal \rightmargintotal \swapmacros\leftedgetotal \rightedgetotal \swapmacros\leftsidetotal \rightsidetotal \swapmacros\leftcombitotal \rightcombitotal \swapmacros\innermargintotal\outermargintotal \swapmacros\inneredgetotal \outeredgetotal \swapmacros\innercombitotal \outercombitotal \swapmacros\innersidetotal \outersidetotal \to \everyswapmargins %D \macros %D {definepapersize} %D %D Before we start calculating layout dimensions, we will %D first take care of paper sizes. The first argument can be %D either an assignment (for defaults) or an identifier, in %D which case the second argument is an assignment. %D %D \showsetup{definepapersize} \def\definepapersize {\dodoubleempty\dodefinepapersize} \def\definepapersize {\dotripleempty\dodefinepapersize} \def\dodefinepapersize[#1][#2][#3]% {\ifsecondargument \doifsomething{#1} % to be sure {\doifassignmentelse{#2} {\getparameters [\??pp#1] % geen \c!scale, scheelt hash ruimte [\c!width=\@@ppwidth,\c!height=\@@ppheight,\c!offset=\@@ppoffset,#2]} {\setvalue{\??pp:1:#1}{#2}% \setvalue{\??pp:2:#1}{#3}}}% \else \getparameters[\??pp][#1]% \setuppapersize % hm. this will freeze ! \fi} %D For the moment we need to fake this macro. \ifx\setuppapersize\undefined \let\setuppapersize\relax \fi %D We set the defaults to the dimensions of an A4 sheet of %D paper. \definepapersize [\c!width=210mm,\c!height=297mm,\c!offset=\!!zeropoint] %D Yet undocumented, let's see if it gets noticed. %D %D \starttyping %D \definepapersize[main] [A4] [A4] %D \definepapersize[extra][A4,landscape][A4,landscape] %D %D \starttext %D \setuppapersize[main] %D Page 1. \page %D Page 2. \page %D \setuppapersize[extra] %D Page 2 \page %D \setuppapersize[main] %D Page 3. \page %D Page 4. \page %D \adaptpapersize[extra] %D Page 5. \page %D Page 6. \page %D \stoptext %D \stoptyping %D \macros %D {setuppaper,setuppapersize} %D %D When setting up the papersize on which to typeset and %D print, we can also determine some more characteristics. %D %D \showsetup{setuppapersize} %D %D We keep track of these features with the following %D variables. \chardef\papermirror =0 \chardef\printmirror =0 \chardef\paperorientation=0 \chardef\printorientation=0 % beware: later no chardef \chardef\paperreverse =0 \chardef\printreverse =0 \chardef\paperlandscape =0 \chardef\printlandscape =0 \let\papersize\empty \let\printpapersize\empty \def\paperscale{1} \newif\ifnegateprintbox \def\setuppaper[#1]% {\getparameters[\??pp][\c!paper=,\c!page=,#1]% \edef\@@ppxy{\the\numexpr\@@ppnx*\@@ppny\relax}% \doifelsenothing\@@pppage {\doifelsenothing\@@pppaper {} % {\setuppapersize} % added, removed, no need for, too tricky, mag-01 (fixed by freezing pp's) {\dodosetuppapersize[\papersize][\@@pppaper]}} {\doifelsenothing\@@pppaper {\dodosetuppapersize[\@@pppage][\printpapersize]} {\dodosetuppapersize[\@@pppage][\@@pppaper]}}} \def\setuppapersize {\dodoubleempty\dosetuppapersize} \def\dosetuppapersize[#1][#2]% {\doifassignmentelse{#1} {\setuppaper[#1]} {\doifelsenothing{#2} {\expanded{\dodosetuppapersize [\executeifdefined{\??pp:1:#1}{#1}]% [\executeifdefined{\??pp:2:#1}{\v!default}]}} {\doifassignmentelse{#2} {\getparameters[\??pp\executeifdefined{\??pp:1:#1}{#1}][#2]} {\expanded{\dodosetuppapersize [\executeifdefined{\??pp:1:#1}{#1}]% [\executeifdefined{\??pp:1:#2}{#2}]}}}}} \let\reinstatepapersize\relax \def\adaptpapersize {\global\let\reinstatepapersize\restorepapersize \setuppapersize} \appendtoks \reinstatepapersize \global\let\reinstatepapersize\relax \to \everyaftershipout \def\dodosetuppapersize[#1][#2]% {\ifsecondargument \expanded{\dododosetuppapersize[#1][#2]}% \calculatehsizes \calculatevsizes \recalculatelogos \recalculatebackgrounds \recalculatelayout \else\iffirstargument \setuppapersize[#1][#2]% \else\ifx\papersize\undefined\else \restorepapersize \fi\fi\fi} % dimen freeze is a bit tricky, but catches local redundant calls % with values where e.g width is defined in terms of \paperwidth \def\dododosetuppapersize[#1][#2]% {\xdef\restorepapersize{\noexpand\setuppapersize[#1][#2]}% \dosetuppaperorientation{#1}\paperlandscape\paperorientation\paperreverse\papermirror \dosetuppaperorientation{#2}\printlandscape\printorientation\printreverse\printmirror \def\docommand##1% {\doifsomething{##1}{\doifdefined{\??pp##1\c!width} {\global\paperwidth \getvalue{\??pp##1\c!width}% \global\paperheight\getvalue{\??pp##1\c!height}% \ifinpagebody \setevalue{\??pp##1\c!height}{\the\paperheight}% \setevalue{\??pp##1\c!width }{\the\paperwidth }% \fi \calculatepaperoffsets{##1}% \xdef\papersize{##1}}}}% \processcommacommand[#1]\docommand \doifdefinedelse{\??pp#1\c!scale} {\edef\paperscale{\getvalue{\??pp#1\c!scale}}} {\edef\paperscale{1}}% \def\docommand##1% {\doifsomething{##1}{\doifdefined{\??pp##1\c!width} {\global\printpaperwidth \getvalue{\??pp##1\c!width}% \global\printpaperheight\getvalue{\??pp##1\c!height}% \ifinpagebody \setevalue{\??pp##1\c!height}{\the\printpaperheight}% \setevalue{\??pp##1\c!width }{\the\printpaperwidth}% \fi \xdef\printpapersize{##1}}}}% \processcommacommand[#2]\docommand \global\setdimentoatleast\paperwidth \onepoint \global\setdimentoatleast\paperheight \onepoint \global\setdimentoatleast\printpaperwidth \onepoint \global\setdimentoatleast\printpaperheight\onepoint \ifcase\paperlandscape\else \doglobal\swapdimens\paperwidth\paperheight \fi \ifcase\printlandscape\else \doglobal\swapdimens\printpaperwidth\printpaperheight \fi % this check can be confusing, so we've added the possibility % to bypass this test: \setuppapersize[option=fit] \doif\@@ppoption\v!max % \v!fit is {\bgroup % we need to pre-swap else we get the wrong paper size \ifcase\paperorientation\else \doifinset\paperorientation{90,270}{\swapdimens\paperwidth\paperheight}% \fi \ifcase\printorientation\else \doifinset\printorientation{90,270}{\swapdimens\printpaperwidth\printpaperheight}% \fi \ifdim\paperheight>\printpaperheight \global\printpaperheight\paperheight \writestatus\m!systems{print height forced to paper height}% \fi \ifdim\paperwidth>\printpaperwidth \global\printpaperwidth\paperwidth \writestatus\m!systems{print width forced to paper width}% \fi \egroup}} \def\dosetuppaperorientation#1#2#3#4#5% {\global\chardef#2\zerocount \global\chardef#5\zerocount \globallet#3\!!zerocount \globallet#4\!!zerocount \global\negateprintboxfalse \processallactionsinset [#1] [ \v!landscape=>\global\chardef#2\plusone, \v!mirrored=>\global\chardef#5\plusone, \v!rotated=>\gdef#3{90}\gdef#4{270}, \v!negative=>\global\negateprintboxtrue, 90=>\gdef#3{90}\gdef#4{270}, 180=>\gdef#3{180}\gdef#4{0}, 270=>\gdef#3{270}\gdef#4{90}]} \ifx\calculatepaperoffsets\undefined \def\calculatepaperoffsets#1% {\scratchdimen\getvalue{\??pp#1\c!offset}% \global\advance\paperwidth -2\scratchdimen \global\advance\paperheight-2\scratchdimen} \fi \let\restorepapersize\relax \def\checkforems[#1]% {\def\docommand##1% {\beforesplitstring##1\at em\to\asciia \doifnot\asciia{##1} {\aftersplitstring\asciia\at=\to\asciia \doifsomething\asciia {\showmessage\m!systems{10}{##1}}}}% \processcommalist[#1]\docommand} \ifx\setups\undefined \def\setups[#1]{\setdefaultpenalties} \fi % \newtoks \everybeforelayout \relax % \newtoks \everyafterlayout \relax \def\recalculatelayout {\doifsomething{\layoutparameter\c!page\layoutparameter\c!paper} {\expanded{\dododosetuppapersize[\layoutparameter\c!page][\layoutparameter\c!paper]}}% \dorecalculatelayout} \def\dorecalculatelayout {%\the\everybeforelayout \setups[\layoutparameter\c!preset]% \global\leftmarginwidth \layoutparameter\c!leftmargin \global\rightmarginwidth\layoutparameter\c!rightmargin \global\leftedgewidth \layoutparameter\c!leftedge \global\rightedgewidth \layoutparameter\c!rightedge \global\headerheight \layoutparameter\c!header \global\footerheight \layoutparameter\c!footer \global\bottomheight \layoutparameter\c!bottom \global\topheight \layoutparameter\c!top \global\backspace \layoutparameter\c!backspace \global\topspace \layoutparameter\c!topspace \setlayoutdimensions % the rest of the `dimensions' \doifelse\@@lygrid\v!yes\gridsnappingtrue\gridsnappingfalse \ifgridsnapping \setsystemmode\v!grid \else \resetsystemmode\v!grid \fi \setups[\layoutparameter\c!setups]% depends on gridsnapping ! \simplesetupwhitespace \simplesetupblank \global\cutspace\layoutparameter\c!cutspace \relax \doifelse{\layoutparameter\c!width}\v!middle {\ifdim\cutspace=\zeropoint \global\cutspace\backspace \fi \global\makeupwidth\dimexpr\paperwidth-\backspace-\cutspace\relax} {\doifelse{\layoutparameter\c!width}\v!fit {\ifdim\cutspace=\zeropoint \global\cutspace\backspace \fi \global\makeupwidth\dimexpr\paperwidth-\cutspace\relax \scratchdimen\dimexpr\backspace -\leftedgewidth -\leftedgedistance -\leftmarginwidth-\leftmargindistance\relax \ifdim\scratchdimen<\zeropoint \scratchdimen\zeropoint \fi \global\advance\makeupwidth\dimexpr -\rightmargindistance-\rightmarginwidth -\rightedgedistance -\rightedgewidth -\scratchdimen\relax} {\global\makeupwidth\layoutparameter\c!width\relax \ifdim\cutspace=\zeropoint \global\cutspace\dimexpr\paperwidth-\makeupwidth-\backspace\relax % \else % A kind of inconsistent specification, but used % in for instance s-pre-19.tex; the cutspace is % used only for determining some kind of right % margin; don't use this in doublesided mode \fi}}% \scratchdimen\layoutparameter\c!bottomspace\relax %\ifdim\scratchdimen=\zeropoint % \scratchdimen\topspace %\fi \global\bottomspace\layoutparameter\c!bottomspace\relax \global\layoutlines0\number\layoutparameter\c!lines\relax % may be empty \ifcase\layoutlines \doifelse{\layoutparameter\c!height}\v!middle {\ifdim\bottomspace=\zeropoint \global\bottomspace\topspace \fi \global\makeupheight\dimexpr\paperheight-\topspace-\bottomspace\relax} {\doifelse{\layoutparameter\c!height}\v!fit {\ifdim\bottomspace=\zeropoint \global\bottomspace\topspace \fi \global\makeupheight\dimexpr\paperheight-\bottomspace\relax \scratchdimen\dimexpr\topspace-\topheight-\topdistance\relax \ifdim\scratchdimen<\zeropoint \scratchdimen\zeropoint \fi \global\advance\makeupheight\dimexpr-\bottomdistance-\bottomheight-\scratchdimen\relax} {\global\makeupheight\layoutparameter\c!height\relax \ifdim\bottomspace=\zeropoint \global\bottomspace\dimexpr\paperheight-\makeupheight-\topspace\relax \else % inconsistent specification \fi}}% \else % beware, when the bodyfont changes (switched) this will change as well; implementing % a global lineheight is tricky: should we take the bodyfont interlinespace or the one set % independent of the bodyfont (before or after a layout spec); way too fuzzy, so we % stick to the current method (after a night of experimenting ...2003/10/13) \global\makeupheight\dimexpr \layoutparameter\c!lines\lineheight-\strutheight+\topskip+ \headerdistance+\headerheight+\footerdistance+\footerheight\relax \fi \backoffset\layoutparameter\c!horoffset \topoffset \layoutparameter\c!veroffset \global\setdimentoatleast\makeupwidth\onepoint \global\setdimentoatleast\makeupheight \onepoint % \checkcurrentlayout % here ? % \the\everyafterlayout \calculatelayoutextras \calculatehsizes \calculatevsizes \calculatepseudocolumns \checkgridsnapping \recalculatelogos \recalculatebackgrounds} \def\calculatepseudocolumns {\global\layoutcolumns\layoutparameter\c!columns \global\layoutcolumndistance\layoutparameter\c!columndistance \global\layoutcolumnwidth\dimexpr\makeupwidth-\layoutcolumns\layoutcolumndistance+\layoutcolumndistance\relax \global\divide\layoutcolumnwidth\layoutcolumns \dorecurse\layoutcolumns {\setxvalue{\??ly:c:\recurselevel}% {\the\numexpr\recurselevel-\plusone\relax\dimexpr\layoutcolumnwidth+\layoutcolumndistance\relax}}} %\dorecurse\layoutcolumns % {\setxvalue{\??ly:c:\recurselevel}{\the\dimexpr % (\numexpr(\recurselevel-1)\dimexpr(\layoutcolumnwidth+\layoutcolumndistance))}} \def\layoutcolumnoffset#1% {\executeifdefined{\??ly:c:#1}\!!zeropoint} \def\checklayout {\ifdim\makeupheight=\layoutlines\lineheight \else \recalculatelayout \fi} \appendtoks \checklayout \to \everystarttext % document: % % \setuplayout[odd][state=stop] \setuplayout[even][state=stop] \setuplayout[page] % % \startstandardmakeup[page=blank] ... \stopstandardmakeup \def\changetolayout#1% {%\writestatus\m!layouts{changing to layout #1}% \xdef\currentlayout{#1}\recalculatelayout} \def\checkcurrentoddlayout {\ifcsname\??ly\v!odd\c!state\endcsname \doifvalue{\??ly\v!odd\c!state}\v!start{\changetolayout\v!odd}% \fi} \def\checkcurrentevenlayout {\ifcsname\??ly\v!even\c!state\endcsname \doifvalue{\??ly\v!even\c!state}\v!start{\changetolayout\v!even}% \fi} \ifx\lastpage\undefined \def\lastpage{1} \fi \def\reverserealfolio {\ifnum\lastpage>\plusone \ifnum\lastpage=\realfolio \v!last \else\ifnum\plusone=\realfolio \v!first \else \the\numexpr\realfolio-\lastpage\relax \fi\fi \else \!!zerocount \fi} \def\checkcurrentlayout % public and used in naw, so keep this name {\ifcsname\??ly\realfolio\c!state\endcsname \doifvalue{\??ly\realfolio\c!state}\v!start{\changetolayout\realfolio}% \else\ifcsname\??ly\reverserealfolio\c!state\endcsname \doifvalue{\??ly\reverserealfolio\c!state}\v!start{\changetolayout\reverserealfolio}% \else\ifcsname\??ly\v!current\c!state\endcsname \changetolayout\v!current % no start test ? \else \doifoddpageelse\checkcurrentoddlayout\checkcurrentevenlayout \fi\fi\fi} % testcase % % \setuppagenumbering[alternative=doublesided] % % \setuplayout [width=11cm] % \definelayout [odd] [backspace=1cm] % \definelayout [even] [backspace=4cm] % \definelayout [5] [backspace=5cm] % \definelayout [6] [backspace=5cm] % \definelayout [-2] [backspace=0cm,cutspace=0cm] % \definelayout [last] [backspace=0cm,cutspace=0cm] % % \checkcurrentlayout \showframe % % \starttext % \dorecurse{20} {\input knuth \endgraf \input tufte \endgraf} % \stoptext %appendtoks \checkcurrentlayout \to \everyaftershipout % no \appendtoks \checkcurrentlayout \to \everystarttext \appendtoks \dochecknextlayout \to \everyaftershipout % \def\dochecknextlayout % {\ifx\currentlayout\v!current % % prevent redundant calculations % \else % \globallet\currentlayout\empty % \global\letbeundefined{\??ly\v!current\c!state}% % \checkcurrentlayout % \fi} % % this breaks after a standardmakeup \def\dochecknextlayout{\checkcurrentlayout} \newif\ifdoublesidedprint \def\presetcenterpagebox % in \setuplayout !!!!!!!!!!!!!!!! {\doublesidedprintfalse \ExpandFirstAfter\processallactionsinset [\@@lylocation] [ \v!middle=>{\setuppapersize[\c!left=\hss,\c!right=\hss,\c!top=\vss,\c!bottom=\vss]}, \v!left=>{\setuppapersize[\c!left=,\c!right=\hss]}, \v!right=>{\setuppapersize[\c!left=\hss,\c!right=]}, \v!bottom=>{\setuppapersize[\c!top=\vss,\c!bottom=]}, \v!top=>{\setuppapersize[\c!top=,\c!bottom=\vss]},% \v!doublesided=>\doublesidedprinttrue, \v!singlesided=>\doublesidedprintfalse]} \def\definelayout {\dodoubleargument\dodefinelayout} \def\dodefinelayout[#1][#2]% {\getparameters[\??ly#1][\c!state=\v!start,#2]} \def\dodosetuplayout[#1][#2]% {\ConvertToConstant\doifnot{#2}\v!reset % #2 ? {\getparameters[\??ly#1][#2]% \checkforems[#2]}} % global needed for non-doublesided standardmakeup \def\dosetuplayout[#1][#2]% {\globallet\currentlayout\empty % new, global \ifsecondargument \dodosetuplayout[#1][#2]% \else\iffirstargument \doifassignmentelse{#1} {\dodosetuplayout[][#1]} {\doifnot{#1}\v!reset{\xdef\currentlayout{#1}}}% new, global \fi\fi \recalculatelayout \checkcurrentlayout % here ? \presetcenterpagebox} \def\setuplayout {\dodoubleempty\dosetuplayout} \let\@@zaheight=\!!zeropoint \def\dopushpagedimensions {\xdef\oldtextheight {\the\textheight }% \xdef\oldfooterheight{\the\footerheight}% \global\let\@@zaheight\@@zaheight} \def\dopoppagedimensions {\global\textheight \oldtextheight \global\footerheight\oldfooterheight \recalculatelayout \global\let\pushpagedimensions\dopushpagedimensions \global\let\poppagedimensions\relax} \let\poppagedimensions = \relax \let\pushpagedimensions = \dopushpagedimensions % Elke \csname ... \endcsname wordt ook aangemaakt, dus ook % in een test met \doifdefined. Bij veel bladzijden kan dit % te veel macro's kosten. Vandaar de set \adaptedpages. Het % kost tijd, maar scheelt macro's. \let\adaptedpages\empty \def\adaptpagedimensions {\ifx\adaptedpages\empty\else \rawdoifinsetelse\realfolio\adaptedpages {\getvalue{\??za\realfolio}% \letbeundefined{\??za\realfolio}} \donothing \fi} \def\checkpagedimensions {\poppagedimensions \adaptpagedimensions} \def\reportpagedimensions {\ifx\poppagedimensions\relax \else \space\the\dimexpr\@@zaheight\relax\space-\space \fi \realfolio} \def\dodoadaptlayout[#1]% {\getparameters[\??za][\c!height=,\c!lines=0,#1]% \pushpagedimensions \ifcase\@@zalines\relax \showmessage\m!layouts1{\@@zaheight,\realfolio}% \else \showmessage\m!layouts1{\@@zalines\space\v!lines,\realfolio}% \def\@@zaheight{\@@zalines\openlineheight}% \fi \doifelse\@@zaheight\v!max {\balancedimensions\textheight\footerheight\footerheight} {\balancedimensions\textheight\footerheight\@@zaheight}% \ifdim\footerheight<\zeropoint \global\advance\textheight \footerheight \global\footerheight\zeropoint \global\xdef\@@zaheight{\layoutparameter\c!footer\space(\v!max)}% \fi \setvsize \global\pagegoal\vsize % nog corrigeren voor insertions ? \recalculatelogos \recalculatebackgrounds \global\let\pushpagedimensions\relax \global\let\poppagedimensions\dopoppagedimensions} \def\doadaptlayout[#1][#2]% {\doifelsenothing{#2} {\dodoadaptlayout[#1]} {\def\docommand##1% {\addtocommalist{##1}\adaptedpages \setgvalue{\??za##1}{\dodoadaptlayout[#2]}}% \processcommalist[#1]\docommand \adaptpagedimensions}} \def\adaptlayout {\dodoubleempty\doadaptlayout} % describe interface %D Centering the paper area on the print area is determined %D by the \type {top}, \type {bottom}, \type {left} and \type %D {right} parameters. \def\centerpagebox#1% {\printpaperwidth \paperscale\printpaperwidth \printpaperheight\paperscale\printpaperheight \setbox#1\vbox to \printpaperheight {\@@pptop \hbox to \printpaperwidth {\ifdoublesidedprint \doifbothsides {\@@ppleft \box#1\@@ppright} {\@@ppleft \box#1\@@ppright} {\@@ppright\box#1\@@ppleft }% \else \@@ppleft \box#1\@@ppright \fi}% \par \@@ppbottom}} \def\offsetprintbox#1% {\ifdim\topoffset=\zeropoint % \relax \ifdim\backoffset=\zeropoint \donefalse \else \donetrue \fi \else \donetrue \fi \ifdone \edef\next{\wd#1\the\wd#1\ht#1\the\ht#1\dp#1\the\dp#1}% \setbox#1\vbox {%\forgetall \offinterlineskip \vskip\topoffset \doifbothsides{\hskip\backoffset}{\hskip\backoffset}{\hskip-\backoffset}% \box#1}% \next \fi} \def\replicatepagebox#1% {\ifnum\@@lynx>\plusone \donetrue \else\ifnum\@@lyny>\plusone \donetrue \else \donefalse \fi\fi \ifdone \setbox#1\vbox {%\forgetall \offinterlineskip \dorecurse\@@lyny {\hbox{\dorecurse\@@lynx{\copy#1\hskip\@@lydx}\unskip}% \vskip\@@lydy} \unskip}% \fi} \def\orientpagebodybox#1#2#3% {\ifnum#2#3>\zerocount \setbox#1\vbox {\edef\somerotation{\ifdoublesided\ifodd\realpageno#2\else#3\fi\else#2\fi}% \dorotatebox\somerotation\hbox{\box#1}}% \fi} \def\orientpaperbox#1% {\orientpagebodybox{#1}\paperorientation\paperreverse} \def\orientprintbox#1% {\orientpagebodybox{#1}\printorientation\printreverse} \def\mirrorpagebodybox#1#2% {\ifcase#2\or \setbox#1\vbox {\domirrorbox\vbox{\box#1}}% \fi} \def\mirrorpaperbox#1% {\mirrorpagebodybox{#1}\papermirror} \def\mirrorprintbox#1% {\mirrorpagebodybox{#1}\printmirror} \def\scalepagebox#1% {\ifdim\@@lyscale\points=\onepoint \else \setbox#1\vbox {\scale[\c!sx=\@@lyscale,\c!sy=\@@lyscale]{\box#1}}% \paperwidth\@@lyscale\paperwidth \paperheight \@@lyscale\paperheight \fi} \def\negateprintbox#1% {\ifnegateprintbox \negatecolorbox{#1}% \fi} \def\pagecutmarksymbol {\the\realpageno} \def\pagecutmarklength {.5cm} \let\pagecutmarktoptext \empty \let\pagecutmarkbottomtext \empty \def\extrapagecutmarkbottomtext {\rlap{\jobname}\hfill\currentdate\space-\space\currenttime\hfill\llap{\realfolio}} \def\makepagecutbox % #1 {\let\cutmarksymbol \pagecutmarksymbol \let\cutmarklength \pagecutmarklength \let\cutmarktoptext \pagecutmarktoptext \let\cutmarkbottomtext\pagecutmarkbottomtext \makecutbox} \setvalue{\??ly:n:\c!marking:\v!on}% {\makepagecutbox} \setvalue{\??ly:n:\c!marking:\v!page}% only at outer when nx/ny > 0 {\makepagecutbox} \setvalue{\??ly:n:\c!marking:\v!empty}% {\let\pagecutmarksymbol\empty \let\pagecutmarktoptext\empty \let\pagecutmarkbottomtext\empty \makepagecutbox} \setvalue{\??ly:n:\c!marking:\v!text}% {\let\pagecutmarksymbol\empty \let\pagecutmarkbottomtext\extrapagecutmarkbottomtext \makepagecutbox} \setvalue{\??ly:c:\c!marking:\v!color}% {\doaddpagecolormarks\colormarkbox} \setvalue{\??ly:c:\c!marking:\v!screen}% {\doaddpagecolormarks\rastermarkbox} \def\addpagecutmarks % #1 {\executeifdefined{\??ly:n:\c!marking:\@@lymarking}\gobbleoneargument} \def\addpagecolormarks % #1 {\executeifdefined{\??ly:c:\c!marking:\@@lymarking}\gobbleoneargument} \def\doaddpagecolormarks#1#2% {\makepagecutbox{#2}% \ifnum\horizontalcutmarks>2 \chardef\colormarkoffset4 \fi \ifnum\verticalcutmarks >2 \chardef\colormarkoffset4 \fi #1{#2}} % NOG EENS NAGAAN WANNEER NU GLOBAL EN WANNEER NIET \ifx\doifelselayoutsomeline\undefined % defined in page-txt \let\doifelselayoutsomeline\secondofthreearguments \fi \def\calculatevsizes % global needed in \recalculatelayoutregel {\redoglobal\textheight\makeupheight \doifelselayoutsomeline \v!header {\redoglobal\advance\textheight-\dimexpr\headerheight+\headerdistance\relax}% \donothing \doifelselayoutsomeline \v!footer {\redoglobal\advance\textheight-\dimexpr\footerheight+\footerdistance\relax}% \donothing \ifzeropt\headerheight \resetsystemmode\v!header \else \setsystemmode\v!header \fi \ifzeropt\footerheight \resetsystemmode\v!footer \else \setsystemmode\v!footer \fi \resetglobal \setvsize} \def\calculatereducedvsizes {\textheight\makeupheight \doifelselayoutsomeline \v!header {\advance\textheight-\dimexpr\headerheight+\headerdistance\relax}% {\headerheight\zeropoint \setlayoutdistances}% \doifelselayoutsomeline \v!footer {\advance\textheight-\dimexpr\footerheight+\footerdistance\relax}% {\footerheight\zeropoint \setlayoutdistances}} \newdimen\innermakeupwidth % special purpose \newdimen\innermakeupmargin % special purpose \chardef\innermakeupcompensation\plusone \def\compensatedinnermakeupmargin {\dimexpr\ifnum\innermakeupcompensation=\plusone+\innermakeupmargin\else\zeropoint\fi\relax} \def\freezetextwidth % \makeupwidth may be set to \textwidth {\textwidth\makeupwidth % which is a tricky but valid value \doifsomething{\layoutparameter\c!textwidth} {\textwidth\layoutparameter\c!textwidth}% % local \global\innermakeupwidth\textwidth \doifelsenothing{\layoutparameter\c!textmargin} {\global\innermakeupmargin\zeropoint} {\global\innermakeupmargin\layoutparameter\c!textmargin}% \global\advance\innermakeupwidth-\dimexpr\innermakeupmargin+\innermakeupmargin\relax \advance\textwidth-\dimexpr\innermakeupmargin+\innermakeupmargin\relax} % local \def\calculatehsizes {\freezetextwidth \sethsize} % De onderstaande macro voert commando's uit, afhankelijk van % het karakter van het paginanummer. % % \doifoddpageelse{then-commando}{else-commando} %D When we start at an even page, we need to swap the layout %D differently. We cannot adapt the real page number, since %D it is used in cross referencing. The next switch is set %D when we start at an even page. \newif\ifshiftedrealpageno % \def\doifoddpageelse#1#2% % {\ifshiftedrealpageno % \ifodd\realpageno#2\else#1\fi % \else % \ifodd\realpageno#1\else#2\fi % \fi} \def\doifoddpageelse {\ifshiftedrealpageno \ifodd\realpageno \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi \else \ifodd\realpageno \@EAEAEA\firstoftwoarguments \else \@EAEAEA\secondoftwoarguments \fi \fi} \let\doifonevenpaginaelse\doifoddpageelse % what are those \relax'es doing there? % \def\doifbothsidesoverruled#1#2#3% % {\ifdoublesided % \doifoddpageelse{#2}{#3}\relax % \else % #1\relax % \fi} % \def\doifbothsides#1#2#3% % {\ifdoublesided % \ifsinglesided % #1\relax % \else % \doifoddpageelse{#2}{#3}\relax % \fi % \else % #1\relax % \fi} \def\redoifoddpageelse#1{\doifoddpageelse} \def\doifbothsidesoverruled {\ifdoublesided \@EA\redoifoddpageelse \else \@EA\firstofthreearguments \fi} \def\doifbothsides {\ifdoublesided \ifsinglesided \@EAEAEA\firstofthreearguments \else \@EAEAEA\redoifoddpageelse \fi \else \@EA\firstofthreearguments \fi} \newdimen\texthoffset \def\settexthoffset {\doifbothsides {\texthoffset\backspace} {\texthoffset\backspace} {\texthoffset\dimexpr\paperwidth-\backspace-\makeupwidth\relax}} \def\goleftonpage {\hskip-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax} \def\doifmarginswapelse#1#2% {\doifbothsides{#1}{#1}{#2}} \def\swapmargins {\doifmarginswapelse\relax\doswapmargins} \def\doswapmargins {\let\swapmargins \relax % to prevent local swapping \let\doswapmargins\relax % to prevent local swapping \the\everyswapmargins} \def\rightorleftpageaction {\ifdoublesided \ifsinglesided \@EAEAEA\firstoftwoarguments \else \@EAEAEA\doifoddpageelse \fi \else \@EA\firstoftwoarguments \fi} \def\outermarginwidth {\rightorleftpageaction\rightmarginwidth \leftmarginwidth } \def\innermarginwidth {\rightorleftpageaction\leftmarginwidth \rightmarginwidth} \def\outermargindistance{\rightorleftpageaction\rightmargindistance\leftmargindistance } \def\innermargindistance{\rightorleftpageaction\leftmargindistance \rightmargindistance} \def\outeredgewidth {\rightorleftpageaction\rightedgewidth \leftedgewidth } \def\inneredgewidth {\rightorleftpageaction\leftedgewidth \rightedgewidth} \def\outeredgedistance {\rightorleftpageaction\rightedgedistance\leftedgedistance } \def\inneredgedistance {\rightorleftpageaction\leftedgedistance \rightedgedistance} \def\outerspacewidth {\rightorleftpageaction\cutspace \backspace } \def\innerspacewidth {\rightorleftpageaction\backspace\cutspace} \def\leftmargintotal {\dimexpr\leftmarginwidth +\leftmargindistance \relax} \def\rightmargintotal {\dimexpr\rightmarginwidth+\rightmargindistance\relax} \def\leftedgetotal {\dimexpr\leftedgewidth +\leftedgedistance \relax} \def\rightedgetotal {\dimexpr\rightedgewidth +\rightedgedistance \relax} \def\leftsidetotal {\dimexpr\leftmarginwidth +\leftedgetotal \relax} \def\rightsidetotal {\dimexpr\rightmarginwidth+\rightedgetotal\relax} \def\leftcombitotal {\dimexpr\leftmargintotal +\leftedgetotal \relax} \def\rightcombitotal {\dimexpr\rightmargintotal+\rightedgetotal\relax} \def\innermargintotal {\dimexpr\innermarginwidth+\innermargindistance\relax} \def\outermargintotal {\dimexpr\outermarginwidth+\outermargindistance\relax} \def\inneredgetotal {\dimexpr\inneredgewidth +\inneredgedistance \relax} \def\outeredgetotal {\dimexpr\outeredgewidth +\outeredgedistance \relax} \def\innercombitotal {\dimexpr\innermargintotal+\inneredgetotal\relax} \def\outercombitotal {\dimexpr\outermargintotal+\outeredgetotal\relax} \def\innersidetotal {\dimexpr\innermarginwidth+\inneredgetotal\relax} \def\outersidetotal {\dimexpr\outermarginwidth+\outeredgetotal\relax} %D \macros %D {startlocallayout} %D %D These macros should be used with care. They permit local %D layouts (as used in fitting pages, see \type {page-app.tex}). %D This is kind of obsolete now that we have \type %D {\definelayout}, so this hack will disappear in future %D versions. \def\startlocallayout {\globalpushmacro\restorepapersize \globalpushmacro\currentlayout} \def\stoplocallayout {\globalpopmacro\currentlayout \globalpopmacro\restorepapersize \restorepapersize \setuplayout} %D \macros %D {showprint, showframe, showlayout, showsetups} %D %D We predefine a couple of tracing macros. %D %D \showsetup{showprint} %D \showsetup{showframe} %D \showsetup{showlayout} %D \showsetup{showsetups} %D %showsetup{showmargins} \fetchruntimecommand \showprint {page-run} \fetchruntimecommand \showframe {page-run} \fetchruntimecommand \showlayout {page-run} \fetchruntimecommand \showsetups {page-run} \fetchruntimecommand \showmargins {page-run} %D The default dimensions are quite old and will not change. %D The funny fractions were introduced when we went from fixed %D dimensions to relative ones. Since \CONTEXT\ is a dutch %D package, the dimensions are based on the metric system. The %D asymmetrical layout is kind of handy for short %D quick||and||dirty stapled documents. %D %D Although valid, it is not a real good idea to use %D dimensions based on the \type {em} unit. First of all, %D since there are no fonts loaded yet, this dimension makes %D no sense, and second, you would loose track of values, %D since they could change while going to a new page, %D depending on the current font setting. \setuplayout [ \c!topspace=.08417508418\paperheight, % 2.5cm \c!top=\!!zeropoint, \c!topdistance=\!!zeropoint, \c!header=.06734006734\paperheight, % 2.0cm \c!headerdistance=\!!zeropoint, \c!height=.84175084175\paperheight, % 25.0cm \c!footerdistance=\layoutparameter\c!headerdistance, \c!footer=.06734006734\paperheight, % 2.0cm \c!bottomdistance=\layoutparameter\c!topdistance, \c!bottom=\!!zeropoint, \c!backspace=.11904761905\paperwidth, % 2.5cm \c!edge=\!!zeropoint, \c!edgedistance=\layoutparameter\c!margindistance, \c!margin=.12649983170\paperwidth, % snijwit-2*afstand \c!margindistance=.02008341748\paperwidth, % 12.0pt \c!leftedge=\layoutparameter\c!edge, \c!leftedgedistance=\layoutparameter\c!edgedistance, \c!leftmargin=\layoutparameter\c!margin, \c!leftmargindistance=\layoutparameter\c!margindistance, \c!width=.71428571429\paperwidth, % 15.0cm \c!rightmargindistance=\layoutparameter\c!margindistance, \c!rightmargin=\layoutparameter\c!margin, \c!rightedgedistance=\layoutparameter\c!edgedistance, \c!rightedge=\layoutparameter\c!edge, \c!veroffset=\!!zeropoint, \c!bottomspace=\!!zeropoint, \c!horoffset=\!!zeropoint, \c!cutspace=\!!zeropoint, \c!textwidth=, % dangerous option -> centered / local \c!textmargin=, % dangerous option -> both sides \c!textdistance=\!!zeropoint, % shift down on grid \c!style=, \c!color=, \c!marking=\v!off, \c!location=, % \v!singlesided, but empty is signal \c!scale=1, \c!nx=1, \c!ny=1, \c!dx=\!!zeropoint, \c!dy=\!!zeropoint, \c!grid=\v!no, \c!preset=, \c!setups=\systemsetupsprefix\s!default, \c!clipoffset=\!!zeropoint, \c!lines=0, \c!paper=, % for foxet \c!page=, % for foxet \c!columns=1, \c!columndistance=\!!zeropoint] %D First we define a whole range of (DIN) papersizes, %D of which the A-series makes most sense. We enable checking. %D We also set some of the parameters that will be used when %D positioning the typeset paper onto the print paper. \setuppaper % (size) % only used in XY imposition [\c!width=\zeropoint, \c!height=\zeropoint, \c!topspace=\zeropoint, \c!backspace=\zeropoint, \c!dx=\zeropoint, \c!dy=\zeropoint, \c!nx=1, \c!ny=1, \c!method=\v!normal] \setuppapersize [\c!option=\v!max, \c!top=, \c!bottom=\vss, \c!left=, \c!right=\hss] \definepapersize [A0] [\c!width=841mm,\c!height=1189mm] \definepapersize [A1] [\c!width=594mm,\c!height=841mm] \definepapersize [A2] [\c!width=420mm,\c!height=594mm] \definepapersize [A3] [\c!width=297mm,\c!height=420mm] \definepapersize [A4] [\c!width=210mm,\c!height=297mm] \definepapersize [A5] [\c!width=148mm,\c!height=210mm] \definepapersize [A6] [\c!width=105mm,\c!height=148mm] \definepapersize [A7] [\c!width=74mm,\c!height=105mm] \definepapersize [A8] [\c!width=52mm,\c!height=74mm] \definepapersize [A9] [\c!width=37mm,\c!height=52mm] \definepapersize [A10] [\c!width=26mm,\c!height=37mm] \definepapersize [B0] [\c!width=1000mm,\c!height=1414mm] \definepapersize [B1] [\c!width=707mm,\c!height=1000mm] \definepapersize [B2] [\c!width=500mm,\c!height=707mm] \definepapersize [B3] [\c!width=353mm,\c!height=500mm] % [\c!width=354mm,\c!height=500mm] \definepapersize [B4] [\c!width=250mm,\c!height=353mm] % [\c!width=250mm,\c!height=354mm] \definepapersize [B5] [\c!width=176mm,\c!height=250mm] % [\c!width=177mm,\c!height=250mm] \definepapersize [B6] [\c!width=125mm,\c!height=176mm] % [\c!width=125mm,\c!height=177mm] \definepapersize [B7] [\c!width=88mm,\c!height=125mm] \definepapersize [B8] [\c!width=62mm,\c!height=88mm] % [\c!width=63mm,\c!height=88mm] \definepapersize [B9] [\c!width=44mm,\c!height=62mm] % [\c!width=44mm,\c!height=63mm] \definepapersize [B10] [\c!width=31mm,\c!height=44mm] \definepapersize [C0] [\c!width=917mm,\c!height=1297mm] \definepapersize [C1] [\c!width=648mm,\c!height=917mm] % [\c!width=649mm,\c!height=917mm] \definepapersize [C2] [\c!width=458mm,\c!height=648mm] % [\c!width=459mm,\c!height=649mm] \definepapersize [C3] [\c!width=324mm,\c!height=458mm] % [\c!width=324mm,\c!height=459mm] \definepapersize [C4] [\c!width=229mm,\c!height=324mm] \definepapersize [C5] [\c!width=162mm,\c!height=229mm] \definepapersize [C6] [\c!width=114mm,\c!height=162mm] % [\c!width=115mm,\c!height=162mm] \definepapersize [C7] [\c!width=81mm,\c!height=114mm] % [\c!width=81mm,\c!height=115mm] \definepapersize [C8] [\c!width=57mm,\c!height=81mm] \definepapersize [C9] [\c!width=40mm,\c!height=57mm] \definepapersize [C10] [\c!width=28mm,\c!height=40mm] %D Per August 2004 the rounding of some (seldom used) sizes %D were corrected top the latest DIN specifications. Peter %D Rolf came up with these and a few more missing sizes. %D Watch out: spaces and slashes! \definepapersize [4 A0] [\c!width=1682mm,\c!height=2378mm] \definepapersize [2 A0] [\c!width=1189mm,\c!height=1682mm] \definepapersize [C6/C5] [\c!width=114mm,\c!height=229mm] %D Because there are no standardized screen sizes, we define %D a bunch of sizes with $4:3$ ratios. The \type {S6} size is %D nearly as wide as a sheet of \type {A4} paper. \definepapersize [S3] [\c!width=300pt,\c!height=225pt] \definepapersize [S4] [\c!width=400pt,\c!height=300pt] \definepapersize [S5] [\c!width=500pt,\c!height=375pt] \definepapersize [S6] [\c!width=600pt,\c!height=450pt] \definepapersize [S8] [\c!width=800pt,\c!height=600pt] \definepapersize [SW] [\c!width=800pt,\c!height=450pt] \definepapersize [SM] [\c!width=720pt,\c!height=450pt] %D These are handy too: \definepapersize [S33] [\c!width=300pt,\c!height=300pt] \definepapersize [S44] [\c!width=400pt,\c!height=400pt] \definepapersize [S55] [\c!width=500pt,\c!height=500pt] \definepapersize [S66] [\c!width=600pt,\c!height=600pt] %D One may wonder if \TEX\ should be used for typesetting %D \CDROM\ covers, but it does not hurt to have the paper size %D ready. \definepapersize [CD] [\c!width=120mm,\c!height=120mm] %D The next series is for our English speaking friends who %D decided to stick to non metric values. Thanks to Nelson %D Beebe for completing the inch based list. \definepapersize [letter] [\c!width=8.5in,\c!height=11in] \definepapersize [ledger] [\c!width=11in,\c!height=17in] \definepapersize [tabloid] [\c!width=17in,\c!height=11in] \definepapersize [legal] [\c!width=8.5in,\c!height=14in] \definepapersize [folio] [\c!width=8.5in,\c!height=13in] \definepapersize [executive] [\c!width=7.25in,\c!height=10.5in] \definepapersize [A] [\c!width=8.5in,\c!height=11in] % 1 sheet \definepapersize [B] [\c!width=11in,\c!height=17in] % 2 sheets \definepapersize [C] [\c!width=17in,\c!height=22in] % 4 sheets %D The next set is for Tobias Burnus, who gave me the sizes. \definepapersize [envelope 9] [\c!width=8.88in,\c!height=3.88in] \definepapersize [envelope 10] [\c!width=9.5in,\c!height=4.13in] \definepapersize [envelope 11] [\c!width=10.38in,\c!height=4.5in] \definepapersize [envelope 12] [\c!width=11.0in,\c!height=4.75in] \definepapersize [envelope 14] [\c!width=11.5in,\c!height=5.0in] \definepapersize [monarch] [\c!width=7.5in,\c!height=3.88in] \definepapersize [check] [\c!width=8.58in,\c!height=3.88in] \definepapersize [DL] [\c!width=110mm,\c!height=220mm] % [\c!width=220mm,\c!height=110mm] \definepapersize [E4] [\c!width=280mm,\c!height=400mm] %D The next three sets are supplied by Taco: \definepapersize [RA0] [\c!width=860mm,\c!height=1220mm] \definepapersize [RA1] [\c!width=610mm,\c!height=860mm] \definepapersize [RA2] [\c!width=430mm,\c!height=610mm] \definepapersize [RA3] [\c!width=305mm,\c!height=430mm] \definepapersize [RA4] [\c!width=215mm,\c!height=305mm] %D ISO SRA (supplementary raw A) sizes: \definepapersize [SRA0] [\c!width=900mm,\c!height=1280mm] \definepapersize [SRA1] [\c!width=640mm,\c!height=900mm] \definepapersize [SRA2] [\c!width=450mm,\c!height=640mm] \definepapersize [SRA3] [\c!width=320mm,\c!height=450mm] \definepapersize [SRA4] [\c!width=225mm,\c!height=320mm] %D Swedish thesis formats: \definepapersize [G5] [\c!width=169mm,\c!height=239mm] \definepapersize [E5] [\c!width=155mm,\c!height=220mm] %D Industry invention: \definepapersize [A3plus] [\c!width=329mm,\c!height=483mm] %D We can now default to a reasonable size. We match the print %D paper size with the typeset paper size. This setting should %D come after the first layout specification (already done). % not interfaced ! \definepapersize [oversized] [ \c!width=\dimexpr\paperwidth +1.5cm\relax, \c!height=\dimexpr\paperheight+1.5cm\relax] \definepapersize [doublesized] [ \c!width=\dimexpr \paperwidth \relax, \c!height=\dimexpr2\paperheight\relax] \definepapersize [doubleoversized] [ \c!width=\dimexpr \paperheight+1.5cm\relax, \c!height=\dimexpr2\paperwidth +1.5cm\relax] \definepapersize [\v!default] [ \c!width=\paperwidth, \c!height=\paperheight] \definepapersize [samesized] [ \c!width=\paperwidth, \c!height=\paperheight] \setuppapersize [A4][samesized] %D For orthogonality: \definepapersize [undersized] [ \c!width=\dimexpr\paperwidth -1.5cm\relax, \c!height=\dimexpr\paperheight-1.5cm\relax] \definelayout [\v!page] [\c!backspace=\zeropoint, \c!cutspace=\zeropoint, \c!topspace=\zeropoint, \c!bottomspace=\zeropoint, \c!margin=\zeropoint, \c!edge=\zeropoint, \c!header=\zeropoint, \c!footer=\zeropoint, \c!top=\zeropoint, \c!bottom=\zeropoint, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!leftedge=\zeropoint, \c!rightedge=\zeropoint, \c!textdistance=\zeropoint, \c!width=\v!middle, \c!height=\v!middle, \c!lines=0, \c!grid=\v!no] \definelayout [\v!middle] [\c!width=\v!middle, \c!height=\v!middle] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-pag.lua0000644000175000017500000001457412130411274024142 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-pag'] = { version = 1.001, comment = "companion to typo-pag.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local nodecodes = nodes.nodecodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue local kern_code = nodecodes.kern local penalty_code = nodecodes.penalty local insert_node_after = node.insert_after local new_penalty = nodes.pool.penalty local unsetvalue = attributes.unsetvalue local a_keeptogether = attributes.private("keeptogether") local trace_keeptogether = false local report_keeptogether = logs.reporter("parbuilders","keeptogether") local cache = { } local last = 0 local enabled = false trackers.register("parbuilders.keeptogether", function(v) trace_keeptogether = v end) -- todo: also support lines = 3 etc (e.g. dropped caps) but how to set that -- when no hlists are there ? ... maybe the local_par function builders.paragraphs.registertogether(line,specification) -- might change if not enabled then nodes.tasks.enableaction("finalizers","builders.paragraphs.keeptogether") end local a = line[a_keeptogether] local c = a and cache[a] if c then local height = specification.height local depth = specification.depth local slack = specification.slack if height and height > c.height then c.height = height end if depth and depth > c.depth then c.depth = depth end if slack and slack > c.slack then c.slack = slack end else last = last + 1 cache[last] = specification if not specification.height then specification.height = 0 end if not specification.depth then specification.depth = 0 end if not specification.slack then specification.slack = 0 end line[a_keeptogether] = last end if trace_keeptogether then local a = a or last local c = cache[a] if trace_keeptogether then local noflines = specification.lineheight local height = c.height local depth = c.depth local slack = c.slack if not noflines or noflines == 0 then noflines = "unknown" else noflines = math.round((height + depth - slack) / noflines) end report_keeptogether("registered, index %s, height %p, depth %p, slack %p, noflines %a",a,height,depth,slack,noflines) end end end local function keeptogether(start,a) if start then local specification = cache[a] if a then local current = start.next local previous = start local total = previous.depth local slack = specification.slack local threshold = specification.depth - slack if trace_keeptogether then report_keeptogether("%s, index %s, total %p, threshold %p, slack %p","list",a,total,threshold,slack) end while current do local id = current.id if id == vlist_code or id == hlist_code then total = total + current.height + current.depth if trace_keeptogether then report_keeptogether("%s, index %s, total %p, threshold %p","list",a,total,threshold) end if total <= threshold then if previous.id == penalty_code then previous.penalty = 10000 else insert_node_after(head,previous,new_penalty(10000)) end else break end elseif id == glue_code then -- hm, breakpoint, maybe turn this into kern total = total + current.spec.width if trace_keeptogether then report_keeptogether("%s, index %s, total %p, threshold %p","glue",a,total,threshold) end if total <= threshold then if previous.id == penalty_code then previous.penalty = 10000 else insert_node_after(head,previous,new_penalty(10000)) end else break end elseif id == kern_code then total = total + current.kern if trace_keeptogether then report_keeptogether("%s, index %s, total %s, threshold %s","kern",a,total,threshold) end if total <= threshold then if previous.id == penalty_code then previous.penalty = 10000 else insert_node_after(head,previous,new_penalty(10000)) end else break end elseif id == penalty_code then if total <= threshold then if previous.id == penalty_code then previous.penalty = 10000 end current.penalty = 10000 else break end end previous = current current = current.next end end end end -- also look at first non glue/kern node e.g for a dropped caps function builders.paragraphs.keeptogether(head) local done = false local current = head while current do if current.id == hlist_code then local a = current[a_keeptogether] if a and a > 0 then keeptogether(current,a) current[a_keeptogether] = unsetvalue cache[a] = nil done = true end end current = current.next end return head, done end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-buy.mkii0000644000175000017500000010023311754241457024333 0ustar norbertnorbert%D \module %D [ file=type-buy, %D version=2003.07.08, % 2001.04.12, %D title=\CONTEXT\ Typescript Macros, %D subtitle=A Few Commercial Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % fallback % todo \typescriptthree \starttypescriptcollection[commercial fonts] % Informal : Vulis \starttypescript [casual] [informal] [name] \definefontsynonym [Serif] [Informal-Regular] \definefontsynonym [SerifBold] [Informal-Bold] \definefontsynonym [SerifSlanted] [Informal-Oblique] \definefontsynonym [SerifItalic] [Informal-Oblique] \definefontsynonym [SerifBoldSlanted] [Informal-BoldOblique] \definefontsynonym [SerifBoldItalic] [Informal-BoldOblique] \definefontsynonym [SerifCaps] [Informal-Regular] \stoptypescript \starttypescript [math] [informal] [name] \definefontsynonym [MathRoman] [Informal-Regular] \definefontsynonym [MathExtension] [Informal-MathExtendedSymbols] \definefontsynonym [MathItalic] [Informal-MathItalics] \definefontsynonym [MathSymbol] [Informal-MathSymbols] \stoptypescript \starttypescript [casual] [informal] [default] \definefontsynonym [Informal-Regular] [ifrm10cm] \definefontsynonym [Informal-Bold] [ifrb10cm] \definefontsynonym [Informal-Oblique] [ifro10cm] \definefontsynonym [Informal-BoldOblique] [ifbo10cm] \loadmapfile[original-micropress-informal.map] \stoptypescript \starttypescript [math] [informal] [default] \definefontsynonym [Informal-Regular] [ifrm10cm] \definefontsynonym [Informal-MathExtendedSymbols] [ifex10] \definefontsynonym [Informal-MathItalics] [ifmi10] \definefontsynonym [Informal-MathSymbols] [ifsy10] \loadmapfile[original-micropress-informal.map] \stoptypescript % ITC Officina \starttypescript [serif] [officina] [name] \definefontsynonym [Serif] [OfficinaSerif-Book] \definefontsynonym [SerifItalic] [OfficinaSerif-BookItalic] \definefontsynonym [SerifSlanted] [OfficinaSerif-BookSlanted] \definefontsynonym [SerifBold] [OfficinaSerif-Bold] \definefontsynonym [SerifBoldItalic] [OfficinaSerif-BoldItalic] \definefontsynonym [SerifBoldSlanted] [OfficinaSerif-BoldSlanted] \definefontsynonym [SerifCaps] [OfficinaSerif-Caps] \stoptypescript \starttypescript [sans] [officina] [name] \definefontsynonym [Sans] [OfficinaSans-Book] \definefontsynonym [SansItalic] [OfficinaSans-BookItalic] \definefontsynonym [SansSlanted] [OfficinaSans-BookSlanted] \definefontsynonym [SansBold] [OfficinaSans-Bold] \definefontsynonym [SansBoldItalic] [OfficinaSans-BoldItalic] \definefontsynonym [SansBoldSlanted] [OfficinaSans-BoldSlanted] \definefontsynonym [SansCaps] [OfficinaSans-Caps] \stoptypescript \starttypescript [serif] [officina] [texnansi,ec,8r] \definefontsynonym [OfficinaSerif-Book] [\typescriptthree-ovbk] [encoding=\typescriptthree] \definefontsynonym [OfficinaSerif-BookItalic] [\typescriptthree-ovwi] [encoding=\typescriptthree] \definefontsynonym [OfficinaSerif-Bold] [\typescriptthree-ovb] [encoding=\typescriptthree] \definefontsynonym [OfficinaSerif-BoldItalic] [\typescriptthree-ovbi] [encoding=\typescriptthree] \definefontsynonym [OfficinaSerif-BookSlanted] [\typescriptthree-ovbk-slanted-167] [encoding=\typescriptthree] \definefontsynonym [OfficinaSerif-BoldSlanted] [\typescriptthree-ovb-slanted-167] [encoding=\typescriptthree] \definefontsynonym [OfficinaSerif-Caps] [\typescriptthree-ovbk-capitalized-800] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-itc-officina.map] \stoptypescript \starttypescript [sans] [officina] [texnansi,ec,8r] \definefontsynonym [OfficinaSans-Book] [\typescriptthree-owbk] [encoding=\typescriptthree] \definefontsynonym [OfficinaSans-BookItalic] [\typescriptthree-owwi] [encoding=\typescriptthree] \definefontsynonym [OfficinaSans-Bold] [\typescriptthree-owb] [encoding=\typescriptthree] \definefontsynonym [OfficinaSans-BoldItalic] [\typescriptthree-owbi] [encoding=\typescriptthree] \definefontsynonym [OfficinaSans-BookSlanted] [\typescriptthree-owbk-slanted-167] [encoding=\typescriptthree] \definefontsynonym [OfficinaSans-BoldSlanted] [\typescriptthree-owb-slanted-167] [encoding=\typescriptthree] \definefontsynonym [OfficinaSans-Caps] [\typescriptthree-owbk-capitalized-800] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-itc-officina.map] \stoptypescript % FontFont Meta \starttypescript [sans] [meta] [name] \definefontsynonym [Sans] [MetaNormal-Roman] \definefontsynonym [SansItalic] [MetaNormal-Italic] \definefontsynonym [SansSlanted] [MetaNormal-Italic] \definefontsynonym [SansBold] [MetaBold-Roman] \definefontsynonym [SansBoldItalic] [MetaBold-Italic] \definefontsynonym [SansBoldSlanted][MetaBold-Italic] \definefontsynonym [SansCaps] [MetaNormal-Caps] \stoptypescript \starttypescript [sans] [meta-medium] [name] \definefontsynonym [Sans] [MetaMedium-Roman] \definefontsynonym [SansItalic] [MetaMedium-Italic] \definefontsynonym [SansSlanted] [MetaMedium-Italic] \definefontsynonym [SansBold] [MetaBold-Roman] \definefontsynonym [SansBoldItalic] [MetaBold-Italic] \definefontsynonym [SansBoldSlanted][MetaBold-Italic] \definefontsynonym [SansCaps] [MetaMedium-Caps] \stoptypescript \starttypescript [sans] [meta-lf] [name] \definefontsynonym [Sans] [MetaBookLF-Roman] \definefontsynonym [SansBold] [MetaBoldLF-Roman] \definefontsynonym [SansItalic] [MetaBookLF-Italic] \definefontsynonym [SansBoldItalic] [MetaBoldLF-Italic] \definefontsynonym [SansCaps] [MetaBookLF-Caps] \stoptypescript \starttypescript [sans] [meta,meta-book] [texnansi,ec,8r] \definefontsynonym [MetaBook-Roman] [\typescriptthree-mtbk] [encoding=\typescriptthree] \definefontsynonym [MetaBook-Italic] [\typescriptthree-mtbki] [encoding=\typescriptthree] \definefontsynonym [MetaBook-Caps] [\typescriptthree-mtbkc] [encoding=\typescriptthree] \definefontsynonym [MetaBook-ItalicCaps] [\typescriptthree-mtbkic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-lf,meta-book-lf] [texnansi,ec,8r] \definefontsynonym [MetaBookLF-Roman] [\typescriptthree-mtbkf] [encoding=\typescriptthree] \definefontsynonym [MetaBookLF-Italic] [\typescriptthree-mtbkfi] [encoding=\typescriptthree] \definefontsynonym [MetaBookLF-Caps] [\typescriptthree-mtbkfc] [encoding=\typescriptthree] \definefontsynonym [MetaBookLF-ItalicCaps] [\typescriptthree-mtbkfic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta,meta-bold] [texnansi,ec,8r] \definefontsynonym [MetaBold-Roman] [\typescriptthree-mtbd] [encoding=\typescriptthree] \definefontsynonym [MetaBold-Italic] [\typescriptthree-mtbdi] [encoding=\typescriptthree] \definefontsynonym [MetaBold-Caps] [\typescriptthree-mtbdc] [encoding=\typescriptthree] \definefontsynonym [MetaBold-ItalicCaps] [\typescriptthree-mtbdic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-lf,meta-bold-lf] [texnansi,ec,8r] \definefontsynonym [MetaBoldLF-Roman] [\typescriptthree-mtbdf] [encoding=\typescriptthree] \definefontsynonym [MetaBoldLF-Italic] [\typescriptthree-mtbdfi] [encoding=\typescriptthree] \definefontsynonym [MetaBoldLF-Caps] [\typescriptthree-mtbdfc] [encoding=\typescriptthree] \definefontsynonym [MetaBoldLF-ItalicCaps] [\typescriptthree-mtbdfic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-normal] [texnansi,ec,8r] \definefontsynonym [MetaNormal-Roman] [\typescriptthree-mtn] [encoding=\typescriptthree] \definefontsynonym [MetaNormal-Italic] [\typescriptthree-mtni] [encoding=\typescriptthree] \definefontsynonym [MetaNormal-Caps] [\typescriptthree-mtnc] [encoding=\typescriptthree] \definefontsynonym [MetaNormal-ItalicCaps] [\typescriptthree-mtnic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-normal-lf] [texnansi,ec,8r] \definefontsynonym [MetaNormalLF-Roman] [\typescriptthree-mtnf] [encoding=\typescriptthree] \definefontsynonym [MetaNormalLF-Italic] [\typescriptthree-mtnfi] [encoding=\typescriptthree] \definefontsynonym [MetaNormalLF-Caps] [\typescriptthree-mtnfc] [encoding=\typescriptthree] \definefontsynonym [MetaNormalLF-ItalicCaps] [\typescriptthree-mtnfic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-medium] [texnansi,ec,8r] \definefontsynonym [MetaMedium-Roman] [\typescriptthree-mtm] [encoding=\typescriptthree] \definefontsynonym [MetaMedium-Italic] [\typescriptthree-mtmi] [encoding=\typescriptthree] \definefontsynonym [MetaMedium-Caps] [\typescriptthree-mtmc] [encoding=\typescriptthree] \definefontsynonym [MetaMedium-ItalicCaps] [\typescriptthree-mtmic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-medium-lf] [texnansi,ec,8r] \definefontsynonym [MetaMediumLF-Roman] [\typescriptthree-mtmf] [encoding=\typescriptthree] \definefontsynonym [MetaMediumLF-Italic] [\typescriptthree-mtmfi] [encoding=\typescriptthree] \definefontsynonym [MetaMediumLF-Caps] [\typescriptthree-mtmfc] [encoding=\typescriptthree] \definefontsynonym [MetaMediumLF-ItalicCaps] [\typescriptthree-mtmfic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-black] [texnansi,ec,8r] \definefontsynonym [MetaBlack-Roman] [\typescriptthree-mtbl] [encoding=\typescriptthree] \definefontsynonym [MetaBlack-Italic] [\typescriptthree-mtbli] [encoding=\typescriptthree] \definefontsynonym [MetaBlack-Caps] [\typescriptthree-mtblc] [encoding=\typescriptthree] \definefontsynonym [MetaBlack-ItalicCaps] [\typescriptthree-mtblic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [sans] [meta-black-lf] [texnansi,ec,8r] \definefontsynonym [MetaBlackLF-Roman] [\typescriptthree-mtblf] [encoding=\typescriptthree] \definefontsynonym [MetaBlackLF-Italic] [\typescriptthree-mtblfi] [encoding=\typescriptthree] \definefontsynonym [MetaBlackLF-Caps] [\typescriptthree-mtblfc] [encoding=\typescriptthree] \definefontsynonym [MetaBlackLF-ItalicCaps] [\typescriptthree-mtblfic] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript \starttypescript [expert] [meta] % incomplete \definefontsynonym [MetaNormal-Expert] [mtnx] \loadmapfile [\typescriptthree-fontfont-meta.map] \stoptypescript %D Linotype Univers \starttypescript [sans] [univers,univers-light,univers-black] [name] \definefontsynonym [Sans] [Univers] \definefontsynonym [SansBold] [Univers-Bold] \definefontsynonym [SansSlanted] [Univers-Oblique] \definefontsynonym [SansBoldSlanted] [Univers-BoldOblique] \stoptypescript \starttypescript [sans] [univers-light] [name] \definefontsynonym [Sans] [Univers-Light] \definefontsynonym [SansSlanted] [Univers-LightOblique] \stoptypescript \starttypescript [sans] [univers-black] [name] \definefontsynonym [Sans] [Univers-Black] \definefontsynonym [SansSlanted] [Univers-BlackOblique] \definefontsynonym [SansBold] [Univers-Black] \definefontsynonym [SansBoldSlanted] [Univers-BlackOblique] \stoptypescript \starttypescript [sans] [univers,univers-black,univers-light] [texnansi,ec,8r] \definefontsynonym [Univers-Light] [\typescriptthree-lt50136] [encoding=\typescriptthree] \definefontsynonym [Univers-LightOblique] [\typescriptthree-lt50137] [encoding=\typescriptthree] \definefontsynonym [Univers] [\typescriptthree-lt50138] [encoding=\typescriptthree] \definefontsynonym [Univers-Oblique] [\typescriptthree-lt50139] [encoding=\typescriptthree] \definefontsynonym [Univers-Bold] [\typescriptthree-lt50140] [encoding=\typescriptthree] \definefontsynonym [Univers-BoldOblique] [\typescriptthree-lt50141] [encoding=\typescriptthree] \definefontsynonym [Univers-Black] [\typescriptthree-lt50142] [encoding=\typescriptthree] \definefontsynonym [Univers-BlackOblique] [\typescriptthree-lt50143] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-univers.map] \stoptypescript % mendoza \starttypescript [serif] [mendoza] [name] \definefontsynonym [Serif] [MendozaRoman-Book] \definefontsynonym [SerifCaps] [MendozaRoman-Book] \definefontsynonym [SerifSlanted] [MendozaRoman-BookItalic] \definefontsynonym [SerifItalic] [MendozaRoman-BookItalic] \definefontsynonym [SerifBold] [MendozaRoman-Bold] \definefontsynonym [SerifBoldSlanted] [MendozaRoman-BoldItalic] \definefontsynonym [SerifBoldItalic] [MendozaRoman-BoldItalic] \stoptypescript \starttypescript [serif] [mendoza] [ec,8r,texnansi] \definefontsynonym[MendozaRoman-Bold] [\typescriptthree-zab] [encoding=\typescriptthree] \definefontsynonym[MendozaRoman-BoldItalic] [\typescriptthree-zabi][encoding=\typescriptthree] \definefontsynonym[MendozaRoman-Medium] [\typescriptthree-zam] [encoding=\typescriptthree] \definefontsynonym[MendozaRoman-MediumItalic][\typescriptthree-zami][encoding=\typescriptthree] \definefontsynonym[MendozaRoman-Book] [\typescriptthree-zaw] [encoding=\typescriptthree] \definefontsynonym[MendozaRoman-BookItalic] [\typescriptthree-zawi][encoding=\typescriptthree] \loadmapfile[\typescriptthree-itc-mendoza.map] \stoptypescript % frutiger \starttypescript [sans] [frutiger] [name] \definefontsynonym [Sans] [Frutiger-Roman] \definefontsynonym [SansCaps] [Frutiger-Roman] \definefontsynonym [SansItalic] [Frutiger-Italic] \definefontsynonym [SansSlanted] [Frutiger-Italic] \definefontsynonym [SansBold] [Frutiger-Bold] \definefontsynonym [SansBoldItalic] [Frutiger-BoldItalic] \definefontsynonym [SansBoldSlanted] [Frutiger-BoldItalic] \stoptypescript \starttypescript [sans] [frutiger] [ec,8r,texnansi] \definefontsynonym[Frutiger-Bold] [\typescriptthree-ftb] [encoding=\typescriptthree] \definefontsynonym[Frutiger-BoldItalic] [\typescriptthree-ftbi] [encoding=\typescriptthree] \definefontsynonym[Frutiger-Black] [\typescriptthree-ftbl] [encoding=\typescriptthree] \definefontsynonym[Frutiger-BlackItalic][\typescriptthree-ftbli][encoding=\typescriptthree] \definefontsynonym[Frutiger-Italic] [\typescriptthree-fti] [encoding=\typescriptthree] \definefontsynonym[Frutiger-Light] [\typescriptthree-ftl] [encoding=\typescriptthree] \definefontsynonym[Frutiger-LightItalic][\typescriptthree-ftli] [encoding=\typescriptthree] \definefontsynonym[Frutiger-Roman] [\typescriptthree-ftr] [encoding=\typescriptthree] \definefontsynonym[Frutiger-UltraBlack] [\typescriptthree-ftubl][encoding=\typescriptthree] \loadmapfile[\typescriptthree-adobe-frutiger.map] \stoptypescript \starttypescript [frutiger] [texnansi,ec,8r,uc] \definetypeface [frutiger] [ss] [sans] [frutiger] [default] [encoding=\typescripttwo] % \loadmapfile [\typescripttwo-adobe-frutiger.map] \stoptypescript % kabel \starttypescript [sans] [kabel] [ec,8r,texnansi] \definefontsynonym [ItcKabel-Bold] [\typescriptthree-kbb] [encoding=\typescriptthree] \definefontsynonym [ItcKabel-Demi] [\typescriptthree-kbd] [encoding=\typescriptthree] \definefontsynonym [ItcKabel-Medium] [\typescriptthree-kbm] [encoding=\typescriptthree] \definefontsynonym [ItcKabel-Ultra] [\typescriptthree-kbu] [encoding=\typescriptthree] \definefontsynonym [ItcKabel-Book] [\typescriptthree-kbw] [encoding=\typescriptthree] \loadmapfile [\typescriptthree-itc-kabel.map] \stoptypescript % thesans \starttypescript [sans] [thesans] [name] \definefontsynonym [Sans] [TheSans-Plain] \definefontsynonym [SansItalic] [TheSans-Italic] \definefontsynonym [SansSlanted] [TheSans-Italic] \definefontsynonym [SansBold] [TheSansBold-Plain] \definefontsynonym [SansBoldItalic] [TheSansBold-Italic] \definefontsynonym [SansBoldSlanted] [TheSansBold-Italic] \definefontsynonym [SansCaps] [TheSans-Caps] \definefontsynonym [SansCapsItalic] [TheSans-CapsItalic] \definefontsynonym [SansCapsSlanted] [TheSans-CapsItalic] \definefontsynonym [SansCapsBold] [TheSansBold-Caps] \definefontsynonym [SansCapsBoldItalic] [TheSansBold-CapsItalic] \definefontsynonym [SansCapsBoldSlanted] [TheSansBold-CapsItalic] \stoptypescript \starttypescript [mono] [thesans] [name] \definefontsynonym [Mono] [TheSansTypewriter-Plain] \definefontsynonym [MonoCaps] [TheSansTypewriter-Plain] \definefontsynonym [MonoItalic] [TheSansTypewriter-Italic] \definefontsynonym [MonoSlanted] [TheSansTypewriter-Italic] \definefontsynonym [MonoBold] [TheSansTypewriter-Bold] \definefontsynonym [MonoBoldItalic] [TheSansTypewriter-BoldItalic] \definefontsynonym [MonoBoldSlanted] [TheSansTypewriter-BoldItalic] \stoptypescript \starttypescript [sans] [thesans] [ec,8r,texnansi] \definefontsynonym [TheSans-Plain] [\typescriptthree-tsan5] [encoding=\typescriptthree] \definefontsynonym [TheSans-Italic] [\typescriptthree-tsan5i] [encoding=\typescriptthree] \definefontsynonym [TheSansBold-Plain] [\typescriptthree-tsan7] [encoding=\typescriptthree] \definefontsynonym [TheSansBold-Italic] [\typescriptthree-tsan7i] [encoding=\typescriptthree] \definefontsynonym [TheSans-Caps] [\typescriptthree-tsan5c] [encoding=\typescriptthree] \definefontsynonym [TheSans-CapsItalic] [\typescriptthree-tsan5ci] [encoding=\typescriptthree] \definefontsynonym [TheSansBold-Caps] [\typescriptthree-tsan7c] [encoding=\typescriptthree] \definefontsynonym [TheSansBold-CapsItalic] [\typescriptthree-tsan7ci] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-lucas-thesans.map] \stoptypescript \starttypescript [mono] [thesans] [ec,8r,texnansi] \definefontsynonym [TheSansTypewriter-Plain] [\typescriptthree-tsaty5] [encoding=\typescriptthree] \definefontsynonym [TheSansTypewriter-Italic] [\typescriptthree-tsaty5i] [encoding=\typescriptthree] \definefontsynonym [TheSansTypewriter-Bold] [\typescriptthree-tsaty7] [encoding=\typescriptthree] \definefontsynonym [TheSansTypewriter-BoldItalic] [\typescriptthree-tsaty7i] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-lucas-thesans.map] \stoptypescript \starttypescript [expert] [thesans] \definefontsynonym [TheSans-Expert] [tsan5e] [encoding=\typescriptthree] \definefontsynonym [TheSans-ExpertItalic] [tsan5ei] [encoding=\typescriptthree] \definefontsynonym [TheSansBold-Expert] [tsan7e] [encoding=\typescriptthree] \definefontsynonym [TheSansBold-ExpertItalic] [tsan7ei] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-lucas-thesans.map] \stoptypescript % monotype sabon \starttypescript [serif] [sabon] [name] \definefontsynonym [Serif] [SabonMT] \definefontsynonym [SerifItalic] [SabonMT-Italic] \definefontsynonym [SerifSlanted] [SabonMT-Italic] \definefontsynonym [SerifBold] [SabonMT-SemiBold] \definefontsynonym [SerifBoldItalic] [SabonMT-SemiBoldItalic] \definefontsynonym [SerifBoldSlanted] [SabonMT-SemiBoldItalic] \definefontsynonym [SerifCaps] [SabonMT-RegularSC] \stoptypescript \starttypescript [serif] [sabon] [ec,8r,texnansi] \definefontsynonym[SabonMT] [\typescriptthree-sab] [encoding=\typescriptthree] \definefontsynonym[SabonMT-Italic] [\typescriptthree-sabi] [encoding=\typescriptthree] \definefontsynonym[SabonMT-ItalicOsF] [\typescriptthree-saboi][encoding=\typescriptthree] \definefontsynonym[SabonMT-SemiBoldOsF] [\typescriptthree-sabos][encoding=\typescriptthree] \definefontsynonym[SabonMT-SemiBold] [\typescriptthree-sabs] [encoding=\typescriptthree] \definefontsynonym[SabonMT-RegularSC] [\typescriptthree-sabsc][encoding=\typescriptthree] \definefontsynonym[SabonMT-SemiBoldItalic] [\typescriptthree-sabsi][encoding=\typescriptthree] \definefontsynonym[SabonMT-SemiBoldItalicOsF][\typescriptthree-sasio][encoding=\typescriptthree] \loadmapfile[\typescriptthree-monotype-sabon.map] \stoptypescript % itc stone \starttypescript [sans] [stone] [name] \definefontsynonym [Sans] [StoneSansITC-Medium] \definefontsynonym [SansItalic] [StoneSansITC-MediumItalic] \definefontsynonym [SansSlanted] [StoneSansITC-MediumItalic] \definefontsynonym [SansBold] [StoneSansITC-Bold] \definefontsynonym [SansBoldItalic] [StoneSansITC-BoldItalic] \definefontsynonym [SansBoldSlanted] [StoneSansITC-BoldItalic] \definefontsynonym [SansCaps] [StoneSansSCITC-Medium] \stoptypescript \starttypescript [serif] [stone] [name] \definefontsynonym [Serif] [StoneSerifITC-Medium] \definefontsynonym [SerifItalic] [StoneSerifITC-MediumItalic] \definefontsynonym [SerifSlanted] [StoneSerifITC-MediumItalic] \definefontsynonym [SerifBold] [StoneSerifITC-Bold] \definefontsynonym [SerifBoldItalic] [StoneSerifITC-BoldItalic] \definefontsynonym [SerifBoldSlanted] [StoneSerifITC-BoldItalic] \definefontsynonym [SerifCaps] [StoneSerifSCITC-Medium] \stoptypescript \starttypescript [sans] [stone-oldstyle] [name] \definefontsynonym [Sans] [StoneSansOSITC-Medium] \definefontsynonym [SansItalic] [StoneSansOSITC-MediumItalic] \definefontsynonym [SansSlanted] [StoneSansOSITC-MediumItalic] \definefontsynonym [SansBold] [StoneSansOSITC-Bold] \definefontsynonym [SansBoldItalic] [StoneSansOSITC-BoldItalic] \definefontsynonym [SansBoldSlanted] [StoneSansOSITC-BoldItalic] \definefontsynonym [SansCaps] [StoneSansSCITC-Medium] \stoptypescript \starttypescript [serif] [stone-oldstyle] [name] \definefontsynonym [Serif] [StoneSerifOSITC-Medium] \definefontsynonym [SerifItalic] [StoneSerifOSITC-MediumItalic] \definefontsynonym [SerifSlanted] [StoneSerifOSITC-MediumItalic] \definefontsynonym [SerifBold] [StoneSerifOSITC-Bold] \definefontsynonym [SerifBoldItalic] [StoneSerifOSITC-BoldItalic] \definefontsynonym [SerifBoldSlanted] [StoneSerifOSITC-BoldItalic] \definefontsynonym [SerifCaps] [StoneSerifSCITC-Medium] \stoptypescript \starttypescript [sans] [stone] [ec,texnansi] \definefontsynonym[StoneSansITC-Bold] [\typescriptthree-stosnb] [encoding=\typescriptthree] \definefontsynonym[StoneSansITC-BoldItalic] [\typescriptthree-stosnbi] [encoding=\typescriptthree] \definefontsynonym[StoneSansITC-Medium] [\typescriptthree-stosnm] [encoding=\typescriptthree] \definefontsynonym[StoneSansITC-MediumItalic] [\typescriptthree-stosnmi] [encoding=\typescriptthree] \definefontsynonym[StoneSansOSITC-Bold] [\typescriptthree-stosnob] [encoding=\typescriptthree] \definefontsynonym[StoneSansOSITC-BoldItalic] [\typescriptthree-stosnobi][encoding=\typescriptthree] \definefontsynonym[StoneSansOSITC-Medium] [\typescriptthree-stosnom] [encoding=\typescriptthree] \definefontsynonym[StoneSansOSITC-MediumItalic][\typescriptthree-stosnomi][encoding=\typescriptthree] \definefontsynonym[StoneSansSCITC-Medium] [\typescriptthree-stosnscm][encoding=\typescriptthree] \definefontsynonym[StoneSansSemITC-Semi] [\typescriptthree-stosns] [encoding=\typescriptthree] \definefontsynonym[StoneSansSemITC-SemiIta] [\typescriptthree-stosnsi] [encoding=\typescriptthree] \definefontsynonym[StoneSansSemOSITC-Semi] [\typescriptthree-stosnos] [encoding=\typescriptthree] \definefontsynonym[StoneSansSemOSITC-SemiIta] [\typescriptthree-stosnosi][encoding=\typescriptthree] \definefontsynonym[StoneSansSemSCITC-Semi] [\typescriptthree-stosnscs][encoding=\typescriptthree] \loadmapfile[\typescriptthree-itc-stone.map] \stoptypescript \starttypescript [serif] [stone] [ec,texnansi] \definefontsynonym[StoneSerifITC-Bold] [\typescriptthree-stosfb] [encoding=\typescriptthree] \definefontsynonym[StoneSerifITC-BoldItalic] [\typescriptthree-stosfbi] [encoding=\typescriptthree] \definefontsynonym[StoneSerifITC-Medium] [\typescriptthree-stosfm] [encoding=\typescriptthree] \definefontsynonym[StoneSerifITC-MediumItalic] [\typescriptthree-stosfmi] [encoding=\typescriptthree] \definefontsynonym[StoneSerifOSITC-Bold] [\typescriptthree-stosfob] [encoding=\typescriptthree] \definefontsynonym[StoneSerifOSITC-BoldItalic] [\typescriptthree-stosfobi][encoding=\typescriptthree] \definefontsynonym[StoneSerifOSITC-Medium] [\typescriptthree-stosfom] [encoding=\typescriptthree] \definefontsynonym[StoneSerifOSITC-MediumItalic][\typescriptthree-stosfomi][encoding=\typescriptthree] \definefontsynonym[StoneSerifSCITC-Medium] [\typescriptthree-stosfscm][encoding=\typescriptthree] \definefontsynonym[StoneSerifSemITC-Semi] [\typescriptthree-stosfs] [encoding=\typescriptthree] \definefontsynonym[StoneSerifSemITC-SemiIta] [\typescriptthree-stosfsi] [encoding=\typescriptthree] \definefontsynonym[StoneSerifSemOSITC-Semi] [\typescriptthree-stosfos] [encoding=\typescriptthree] \definefontsynonym[StoneSerifSemOSITC-SemiIta] [\typescriptthree-stosfosi][encoding=\typescriptthree] \definefontsynonym[StoneSerifSemSCITC-Semi] [\typescriptthree-stosfscs][encoding=\typescriptthree] \loadmapfile[\typescriptthree-itc-stone.map] \stoptypescript % linotype industria \starttypescript [sans] [industria] [ec,texnansi] \definefontsynonym[Industria-Solid][\typescriptthree-lt50545][encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-industria.map] \stoptypescript % itc bauhaus % % texfont --enc=texnansi --ven=itc --col=bauhaus type-buy.dat \starttypescript [sans] [bauhaus] [ec,texnansi] \definefontsynonym[Bauhaus-Light] [\typescriptthree-bhl] [encoding=\typescriptthree] \definefontsynonym[Bauhaus-Medium] [\typescriptthree-bhm] [encoding=\typescriptthree] \definefontsynonym[Bauhaus-Demi] [\typescriptthree-bhd] [encoding=\typescriptthree] \definefontsynonym[Bauhaus-Bold] [\typescriptthree-bhb] [encoding=\typescriptthree] \definefontsynonym[Bauhaus-Heavy] [\typescriptthree-bhh] [encoding=\typescriptthree] \definefontsynonym[Bauhaus-Bold-Slanted] [\typescriptthree-bhb-slanted-167][encoding=\typescriptthree] \definefontsynonym[Bauhaus-Demi-Slanted] [\typescriptthree-bhd-slanted-167][encoding=\typescriptthree] \definefontsynonym[Bauhaus-Heavy-Slanted] [\typescriptthree-bhh-slanted-167][encoding=\typescriptthree] \definefontsynonym[Bauhaus-Light-Slanted] [\typescriptthree-bhl-slanted-167][encoding=\typescriptthree] \definefontsynonym[Bauhaus-Medium-Slanted][\typescriptthree-bhm-slanted-167][encoding=\typescriptthree] \loadmapfile[\typescriptthree-itc-bauhaus.map] \stoptypescript % ef swift % % texfont --enc=texnansi --ven=ef --col=swift type-buy.dat \starttypescript [serif] [swift] [name] \definefontsynonym [Serif] [SwiftEF-Regular] \definefontsynonym [SerifItalic] [SwiftEF-RegularItalic] \definefontsynonym [SerifSlanted] [SwiftEF-RegularItalic] \definefontsynonym [SerifBold] [SwiftEF-Bold] \definefontsynonym [SerifBoldItalic] [SwiftEF-Bold] \definefontsynonym [SerifBoldSlanted] [SwiftEF-Bold] \definefontsynonym [SerifCaps] [SwiftSCEF-Regular] \stoptypescript \starttypescript [serif] [swift-light] [name] \definefontsynonym [Serif] [SwiftEF-Light] \definefontsynonym [SerifItalic] [SwiftEF-LightItalic] \definefontsynonym [SerifSlanted] [SwiftEF-LightItalic] \definefontsynonym [SerifBold] [SwiftEF-Regular] \definefontsynonym [SerifBoldItalic] [SwiftEF-RegularItalic] \definefontsynonym [SerifBoldSlanted] [SwiftEF-RegularItalic] \definefontsynonym [SerifCaps] [SwiftSCEF-Regular] \stoptypescript \starttypescript [serif] [swift] [ec,texnansi] \definefontsynonym[SwiftEF-Light] [\typescriptthree-swlt] [encoding=\typescriptthree] \definefontsynonym[SwiftEF-Regular] [\typescriptthree-swrg] [encoding=\typescriptthree] \definefontsynonym[SwiftEF-Bold] [\typescriptthree-swbd] [encoding=\typescriptthree] \definefontsynonym[SwiftEF-ExtraBold] [\typescriptthree-swxb] [encoding=\typescriptthree] \definefontsynonym[SwiftEF-LightItalic] [\typescriptthree-swlti][encoding=\typescriptthree] \definefontsynonym[SwiftEF-RegularItalic][\typescriptthree-swrgi][encoding=\typescriptthree] \definefontsynonym[SwiftEF-BoldCondensed][\typescriptthree-swbdc][encoding=\typescriptthree] \definefontsynonym[SwiftSCEF-Regular] [\typescriptthree-swrgs][encoding=\typescriptthree] \loadmapfile[\typescriptthree-ef-swift.map] \stoptypescript % linotype syntax \starttypescript [sans] [syntax] [name] \definefontsynonym [Sans] [SyntaxLT-Roman] \definefontsynonym [SansItalic] [SyntaxLT-Italic] \definefontsynonym [SansSlanted] [SyntaxLT-Italic] \definefontsynonym [SansBold] [SyntaxLT-Black] \definefontsynonym [SansBoldItalic] [SyntaxLT-Black] \definefontsynonym [SansBoldSlanted][SyntaxLT-Black] \stoptypescript \starttypescript [sans] [syntax] [ec,texnansi] \definefontsynonym [SyntaxLT-Roman] [\typescriptthree-lte50617] [encoding=\typescriptthree] \definefontsynonym [SyntaxLT-Italic] [\typescriptthree-lte50618] [encoding=\typescriptthree] \definefontsynonym [SyntaxLT-Bold] [\typescriptthree-lte50619] [encoding=\typescriptthree] \definefontsynonym [SyntaxLT-Black] [\typescriptthree-lte50620] [encoding=\typescriptthree] \definefontsynonym [SyntaxLT-UltraBlack] [\typescriptthree-lte50621] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-syntax.map] \stoptypescript % linotype linoletter \starttypescript [serif] [linoletter] [name] \definefontsynonym [Serif] [LinoLetterLT-Roman] \definefontsynonym [SerifItalic] [LinoLetterLT-Italic] \definefontsynonym [SerifSlanted] [LinoLetterLT-Italic] \definefontsynonym [SerifBold] [LinoLetterLT-Bold] \definefontsynonym [SerifBoldItalic] [LinoLetterLT-BoldItalic] \definefontsynonym [SerifBoldSlanted][LinoLetterLT-BoldItalic] \stoptypescript \starttypescript [serif] [linoletter] [ec,texnansi] \definefontsynonym[LinoLetterLT-Roman] [texnansi-lte51129] [encoding=\typescriptthree] \definefontsynonym[LinoLetterLT-Italic] [texnansi-lte51130] [encoding=\typescriptthree] \definefontsynonym[LinoLetterLT-Bold] [texnansi-lte51133] [encoding=\typescriptthree] \definefontsynonym[LinoLetterLT-BoldItalic] [texnansi-lte51134] [encoding=\typescriptthree] \definefontsynonym[LinoLetterLT-BlackItalic] [texnansi-lte51136] [encoding=\typescriptthree] \definefontsynonym[LinoLetter-MediumSC] [texnansi-llmsc] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-linoletter.map] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-fou.mkii0000644000175000017500000001624511754241457024306 0ustar norbertnorbert%D \module %D [ file=math-fou, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, %D subtitle=Fourier Specials, %D author={Michel Biovani \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % see end of file for todo \unprotect \startmathcollection [fou] \definemathsymbol [Gamma] [alpha] [mi] ["00] \definemathsymbol [Delta] [alpha] [mi] ["01] \definemathsymbol [Theta] [alpha] [mi] ["02] \definemathsymbol [Lambda] [alpha] [mi] ["03] \definemathsymbol [Xi] [alpha] [mi] ["04] \definemathsymbol [Pi] [alpha] [mi] ["05] \definemathsymbol [Sigma] [alpha] [mi] ["06] \definemathsymbol [Upsilon] [alpha] [mi] ["07] \definemathsymbol [Phi] [alpha] [mi] ["08] \definemathsymbol [Psi] [alpha] [mi] ["09] \definemathsymbol [Omega] [alpha] [mi] ["0A] \stopmathcollection \startmathcollection [fou] \definemathcharacter [+] [bin] [sy] ["80] \definemathcharacter [=] [rel] [sy] ["81] \definemathcharacter [<] [rel] [sy] ["82] \definemathcharacter [>] [rel] [sy] ["83] \stopmathcollection \startmathcollection [fou] \definemathsymbol [leqslant] [rel] [sy] ["84] \definemathsymbol [geqslant] [rel] [sy] ["85] \definemathsymbol [parallelslant] [rel] [sy] ["86] \definemathsymbol [thething] [ord] [sy] ["87] \definemathsymbol [vDash] [rel] [sy] ["88] \definemathsymbol [blacktriangleleft] [rel] [sy] ["89] \definemathsymbol [blacktriangleright] [rel] [sy] ["8A] \definemathsymbol [nleqslant] [rel] [sy] ["8B] \definemathsymbol [ngeqslant] [rel] [sy] ["8C] \definemathsymbol [parallel] [rel] [sy] ["8D] \definemathsymbol [nparallel] [rel] [sy] ["8E] \definemathsymbol [nparallelslant] [rel] [sy] ["8F] \definemathsymbol [nvDash] [rel] [sy] ["90] \definemathsymbol [intercal] [bin] [sy] ["91] \definemathsymbol [hslash] [ord] [sy] ["92] \definemathsymbol [nexists] [ord] [sy] ["93] \definemathsymbol [varsubsetneq] [rel] [sy] ["93] \stopmathcollection \startmathcollection [fou] \definemathcharacter [(] [nothing] [mr] ["28] [ex] ["A1] \definemathcharacter [)] [nothing] [mr] ["29] [ex] ["A2] \definemathcharacter [91] [nothing] [mr] ["5B] [ex] ["A3] % [ \definemathcharacter [93] [nothing] [mr] ["5D] [ex] ["A4] % ] \definemathcharacter [/] [nothing] [mr] ["2F] [ex] ["B1] \definemathcharacter [124] [nothing] [sy] ["6A] [ex] ["AF] % | \definemathcharacter [92] [nothing] [sy] ["6E] [ex] ["B2] % \ \stopmathcollection \startmathcollection [fou] \definemathsymbol [Vert] [nothing] [sy] ["6B] [ex] ["B0] \definemathsymbol [vert] [nothing] [sy] ["6A] [ex] ["AF] \definemathsymbol [VERT] [nothing] [sy] ["98] [ex] ["93] \definemathsymbol [Downarrow] [rel] [sy] ["2B] [ex] ["C4] \definemathsymbol [backslash] [nothing] [sy] ["6E] [ex] ["B2] \definemathsymbol [rangle] [close] [sy] ["69] [ex] ["AE] \definemathsymbol [langle] [open] [sy] ["68] [ex] ["AD] \definemathsymbol [rbrace] [close] [sy] ["67] [ex] ["AA] \definemathsymbol [lbrace] [open] [sy] ["66] [ex] ["A9] \definemathsymbol [rceil] [close] [sy] ["65] [ex] ["A8] \definemathsymbol [lceil] [open] [sy] ["64] [ex] ["A7] \definemathsymbol [rfloor] [close] [sy] ["63] [ex] ["A6] \definemathsymbol [lfloor] [open] [sy] ["62] [ex] ["A5] \definemathsymbol [dblbrackleft] [open] [sy] ["99] [ex] ["85] \definemathsymbol [dblbrackright] [close] [sy] ["9A] [ex] ["86] \stopmathcollection \startmathcollection [fou] \definemathsymbol [varkappa] [ord] [mi] ["80] % check this \definemathsymbol [varvarrho] [ord] [mi] ["81] % check this \definemathsymbol [xswordsup] [ord] [sy] ["96] \definemathsymbol [xswordsdown] [ord] [sy] ["97] \definemathsymbol [notowns] [rel] [sy] ["9C] \definemathsymbol [hbar] [ord] [sy] ["9D] \definemathsymbol [smallsetminus] [bin] [sy] ["9E] \stopmathcollection \startmathcollection [fou] \definemathsymbol [notin] [rel] [sy] ["9B] \stopmathcollection \startmathcollection [fou] \definemathsymbol [iintop] [op] [ex] ["CE] \definemathsymbol [iiintop] [op] [ex] ["D0] \definemathsymbol [oiintop] [op] [ex] ["D2] \definemathsymbol [oiiintop] [op] [ex] ["D4] \definemathsymbol [slashintop] [op] [ex] ["D6] \stopmathcollection \startmathcollection [fou] \definemathcommand [iint] {\iintop \nolimits} \definemathcommand [iiint] {\iiintop \nolimits} \definemathcommand [oiint] {\oiintop \nolimits} \definemathcommand [oiiint] {\oiiintop \nolimits} \definemathcommand [slashint] {\slashintop\nolimits} \stopmathcollection \startmathcollection [fou] \definemathsymbol [acute] [accent] [mr] ["1] \definemathsymbol [grave] [accent] [mr] ["0] \definemathsymbol [ddot] [accent] [mr] ["4] \definemathsymbol [tilde] [accent] [mr] ["3] \definemathsymbol [bar] [accent] [mr] ["9] \definemathsymbol [breve] [accent] [mr] ["8] \definemathsymbol [check] [accent] [mr] ["7] \definemathsymbol [hat] [accent] [mr] ["2] \definemathsymbol [dot] [accent] [mr] ["A] \definemathsymbol [mathring] [accent] [mr] ["6] \stopmathcollection \startmathcollection [fou] \definemathsymbol [otheralpha] [ord] [mi] ["0B] \definemathsymbol [otherbeta] [ord] [mi] ["0C] \definemathsymbol [othergamma] [ord] [mi] ["0D] \definemathsymbol [otherdelta] [ord] [mi] ["0E] \definemathsymbol [otherepsilon] [ord] [mi] ["0F] \definemathsymbol [otherzeta] [ord] [mi] ["10] \stopmathcollection \protect \endinput % from a mail of Michel B / todo % \definemathsymbol [acute] [accent] [operators] ["1] % \definemathsymbol [grave] [accent] [operators] ["0] % \definemathsymbol [ddot] [accent] [operators] ["4] % \definemathsymbol [tilde] [accent] [operators] ["3] % \definemathsymbol [bar] [accent] [operators] ["9] % \definemathsymbol [breve] [accent] [operators] ["8] % \definemathsymbol [check] [accent] [operators] ["7] % \definemathsymbol [hat] [accent] [operators] ["2] % \definemathsymbol [dot] [accent] [operators] ["A] % \definemathsymbol [mathring] [accent] [operators] ["6] % \definemathsymbol [wideparen] [ord] [largesymbols] ["94] % \definemathsymbol [widearc] [accent] [largesymbols] ["D8] % check for definition of \overset (ams) % \def\FOUwidering#1% % {\overset{\smash{\vbox to .2ex{\hbox{$\mathring{}$}}}}{\wideparen{#1}}} % \startmathcollection [default] % [ams] % % \definemathcommand [widering] {\FOUwidering} % % \stopmathcollection % \definemathsymbol [otheralpha] [ord] [otherletters] ["0B] % \definemathsymbol [otherbeta] [ord] [otherletters] ["0C] % \definemathsymbol [othergamma] [ord] [otherletters] ["0D] % \definemathsymbol [otherdelta] [ord] [otherletters] ["0E] % \definemathsymbol [otherepsilon] [ord] [otherletters] ["0F] % \definemathsymbol [otherzeta] [ord] [otherletters] ["10] context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-url.mkiv0000644000175000017500000001030211754241457024310 0ustar norbertnorbert%D \module %D [ file=lang-url, %D version=2008.01.22, % used to be lang-mis %D title=\CONTEXT\ Language Macros, %D subtitle=Language Options, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{lang-url}{1.001} \unprotect %D Traditionally this code is in the language namespace as %D hyphenation relates to languages. %D \macros %D {hyphenatedurl} %D %D For those who want to put full \URL's in a text, we offer %D %D \startbuffer %D \hyphenatedurl{http://optimist.optimist/optimist/optimist.optimist#optimist} %D \stopbuffer %D %D \typebuffer %D %D which breaks at the appropriate places. Watch the \type{#} %D hack. %D %D When passed as argument, like in \type {\goto}, one needs %D to substitute a \type {\\} for each \type{#}. %D %D \startbuffer %D \hyphenatedurl{http://this.is.a.rather/strange/reference#indeed} %D \stopbuffer %D %D \typebuffer \newtoks\everyhyphenatedurl \appendtoks \let\&\letterampersand \let\#\letterhash \let\~\lettertilde \let\\\letterbackslash \let\$\letterdollar \let\^\letterhat \let\_\letterunderscore \let\{\letterleftbrace \let\}\letterrightbrace \let\|\letterbar \let~=\lettertilde \let|=\letterbar \to \everyhyphenatedurl \let\hyphenatedurlseparator \empty % \periodcentered \let\hyphenatedurldiscretionary\empty \setnewconstant\hyphenatedurllefthyphenmin \plusthree \setnewconstant\hyphenatedurlrighthyphenmin\plusthree \def\lang_url_space {\nobreak\hskip\zeropoint plus\onepoint\nobreak} \def\lang_url_after #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}} \def\lang_url_before #1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax} \def\lang_url_normal #1{\char#1\relax} \def\lang_url_disc #1{\discretionary{}{}{}} \def\lang_url_space_trace {\nobreak\begingroup\darkyellow\ruledhskip\zeropoint plus\onepoint\endgroup\nobreak} \def\lang_url_after_trace #1{\char#1\hsmash{\darkblue\vl}\discretionary{}{\hyphenatedurlseparator}{}} \def\lang_url_before_trace#1{\discretionary{\hyphenatedurlseparator}{}{}\hsmash{\darkred\vl}\char#1\relax} \def\lang_url_normal_trace#1{\char#1\relax} \def\lang_url_disc_trace #1{\discretionary{\hsmash{\darkgreen\vl}}{\hsmash{\darkgreen\vl}}{\hsmash{\darkgreen\vl}}} \def\showhyphenatedurlbreaks {\let\lang_url_space \lang_url_space_trace \let\lang_url_after \lang_url_after_trace \let\lang_url_before\lang_url_before_trace \let\lang_url_normal\lang_url_normal_trace \let\lang_url_disc \lang_url_disc_trace} \def\sethyphenatedurlnormal#1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,0)}} % Lua names will change \def\sethyphenatedurlbefore#1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,1)}} % Lua names will change \def\sethyphenatedurlafter #1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,2)}} % Lua names will change % \sethyphenatedurlafter{ABCDEF} \unexpanded \def\hyphenatedurl#1% {\dontleavehmode \begingroup \the\everyhyphenatedurl \normallanguage\zerocount \let\s\lang_url_space \let\a\lang_url_after \let\b\lang_url_before \let\n\lang_url_normal \let\d\lang_url_disc \normalexpanded{\noexpand\ctxcommand{hyphenatedurl( \!!bs\noexpand\detokenize{#1}\!!es, \number\hyphenatedurllefthyphenmin, \number\hyphenatedurlrighthyphenmin, "\hyphenatedurldiscretionary" )}}% \endgroup} %D \macros %D {hyphenatedfilename} %D %D For the moment we treat filenames in a similar way, %D %D \starttyping %D \hyphenatedfilename{here/there/filename.suffix} %D \stoptyping \ifx\hyphenatedfilename\undefined \let\hyphenatedfilename\hyphenatedurl \fi % \def\test#1% % {\dontleavehmode % \begingroup % \tttf % \hyphenatedurl {% % \letterampersand #1\letterampersand #1\letterampersand #1\letterampersand #1\letterampersand % \letterhash #1\letterhash #1\letterpercent #1\letterslash #1\letterampersand % }% % \endgroup} % \dorecurse{100}{\test{a} \test{ab} \test{abc} \test{abcd} \test{abcde} \test{abcdef}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-uni.mkii0000644000175000017500000003164711754241457024313 0ustar norbertnorbert%D \module %D [ file=math-uni, %D version=2005.06.11, %D title=\CONTEXT\ Math Macros, %D subtitle=unicode support, %D author={Nikolai Weibull \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] \unprotect % needed for unic-032 % TH \startmathcollection[default] \definemathcommand [unic@doubleverticalline] {\mathord{\parallel}} \definemathcommand [unic@doublelowline] {\underline{\textunderscore}} \definemathcommand [unic@doubleprime] {''} \definemathcommand [unic@tripleprime] {'''} \definemathcommand [unic@reverseddoubleprime] {\mathord{\backprime\backprime}} \definemathcommand [unic@reversedtripleprime] {\mathord{\backprime\backprime\backprime}} \definemathcommand [unic@fractionslash] {\vulgarfraction{}{}} \definemathcommand [unic@lowasterisk] {\mathord{\lower-.2em\hbox{$\ast$}}} \definemathcommand [unic@functionapplication] {\mathop{}} \definemathcommand [unic@invisibletimes] {\mathbin{}} \definemathcommand [unic@invisibleseparator] {\mathpunct{}} \stopmathcollection % needed for unic-033 % TH \def\unic@vulgarfraction#1#2% {\hbox {\high{{\tfx\it #1}\kern -.2em}% \symbol[vulgarfraction]% \kern -.2em\low{{\tfx\it #2}}}} \startmathcollection[default] \definemathcommand [unic@accountof] {\unic@vulgarfraction{a}{c}} \definemathcommand [unic@addressedtothesubject] {\unic@vulgarfraction{a}{s}} \definemathcommand [unic@doublestruckC] {{\Bbb C}} \definemathcommand [unic@degreecelsius] {{\textdegree \tf C}} \definemathcommand [unic@centrelinesymbol] {\unknownchar} \definemathcommand [unic@careof] {\unic@vulgarfraction{c}{o}} \definemathcommand [unic@cadauna] {\unic@vulgarfraction{c}{u}} \definemathcommand [unic@eulerconstant] {{\rm e}} \definemathcommand [unic@scruple] {\unknownchar} \definemathcommand [unic@degreefahrenheit] {{\textdegree \tf F}} \definemathcommand [unic@scriptg] {\unknownchar} \definemathcommand [unic@scriptH] {{\cal H}} \definemathcommand [unic@blackletterH] {{\fraktur H}} \definemathcommand [unic@doublestruckH] {{\Bbb H}} \definemathcommand [unic@planckconstant] {h} \definemathcommand [unic@planckconstantovertwopi] {\hslash} \definemathcommand [unic@scriptI] {{\cal I}} \definemathcommand [unic@blackletterI] {{\fraktur I}} \definemathcommand [unic@scriptL] {{\cal L}} \definemathcommand [unic@scriptl] {\ell} \definemathcommand [unic@lbbarsymbol] {\unknownchar} \definemathcommand [unic@doublestruckN] {{\Bbb N}} \definemathcommand [unic@numerosign] {\hbox{\symbol[numero]}} \definemathcommand [unic@soundrecordingcopyright] {\encircled{{\tfx P}}} \definemathcommand [unic@scriptP] {{\cal P}} \definemathcommand [unic@doublestruckP] {{\Bbb P}} \definemathcommand [unic@doublestruckQ] {{\Bbb Q}} \definemathcommand [unic@scriptR] {{\cal R}} \definemathcommand [unic@blackletterR] {{\fraktur R}} \definemathcommand [unic@doublestruckR] {{\Bbb R}} \definemathcommand [unic@prescriptiontake] {\unknownchar} \definemathcommand [unic@response] {\unknownchar} \definemathcommand [unic@servicemark] {\high{\txx SM}} \definemathcommand [unic@telephonesign] {\high{\txx TEL}} \definemathcommand [unic@trademarksign] {\trademark} \definemathcommand [unic@versickle] {\unknownchar} \definemathcommand [unic@doublestruckZ] {{\Bbb Z}} \definemathcommand [unic@ouncesign] {\unknownchar} \definemathcommand [unic@ohmsign] {\Omega} \definemathcommand [unic@invertedohmsign] {\rotate[\c!rotation=180]{\Omega}} \definemathcommand [unic@blackletterZ] {{\fraktur Z}} \definemathcommand [unic@turnedgreekletteriota] {\rotate[\c!rotation=180]{\iota}} \definemathcommand [unic@kelvinsign] {{\tf K}} \definemathcommand [unic@angstromsign] {\Angstrom} \definemathcommand [unic@scriptB] {{\cal B}} \definemathcommand [unic@blackletterC] {{\fraktur C}} \definemathcommand [unic@estimatedsymbol] {\unknownchar} \definemathcommand [unic@scripte] {\unknownchar} \definemathcommand [unic@scriptE] {{\cal E}} \definemathcommand [unic@scriptF] {{\cal F}} \definemathcommand [unic@turnedF] {\rotate[\c!rotation=180]{{\tf F}}} \definemathcommand [unic@scriptM] {{\cal M}} \definemathcommand [unic@scripto] {\unknownchar} \definemathcommand [unic@informationsource] {{\bf i}} \definemathcommand [unic@rotatedQ] {\rotate[\c!rotation=90]{{\tf Q}}} \definemathcommand [unic@facsimilesign] {\unknownchar} \definemathcommand [unic@doublestruckpi] {\pi}%{\unknownchar} \definemathcommand [unic@doublestruckgamma] {\gamma}%{\unknownchar} \definemathcommand [unic@doublestruckGamma] {\Gamma}%{\unknownchar} \definemathcommand [unic@doublestruckPi] {\Pi}%{\unknownchar} \definemathcommand [unic@doublestrucknarysummation] {\unknownchar} \definemathcommand [unic@turnedsansserifG] {\rotate[\c!rotation=180]{{\ss G}}} \definemathcommand [unic@turnedsansserifL] {\rotate[\c!rotation=180]{{\ss L}}} \definemathcommand [unic@reversedsansserifL] {\mirror{{\ss L}}} \definemathcommand [unic@turnedsansserifY] {\rotate[\c!rotation=180]{{\ss Y}}} \definemathcommand [unic@doublestruckitalicD] {D}%{\unknownchar} \definemathcommand [unic@doublestruckitalicd] {d}%{\unknownchar} \definemathcommand [unic@doublestruckitalice] {e}%{\unknownchar} \definemathcommand [unic@doublestruckitalici] {i}%{\unknownchar} \definemathcommand [unic@doublestruckitalicj] {j}%{\unknownchar} \definemathcommand [unic@propertyline] {\unknownchar} \definemathcommand [unic@turnedampersand] {\rotate[\c!rotation=180]{\&}} \definemathcommand [unic@persign] {\unknownchar} \definemathcommand [unic@fractiononethird] {\vulgarfraction{1}{3}} \definemathcommand [unic@fractiontwothirds] {\vulgarfraction{2}{3}} \definemathcommand [unic@fractiononefifth] {\vulgarfraction{1}{5}} \definemathcommand [unic@fractiontwofifths] {\vulgarfraction{2}{5}} \definemathcommand [unic@fractionthreefifths] {\vulgarfraction{3}{5}} \definemathcommand [unic@fractionfourfifths] {\vulgarfraction{4}{5}} \definemathcommand [unic@fractiononesixth] {\vulgarfraction{1}{6}} \definemathcommand [unic@fractionfivesixths] {\vulgarfraction{5}{6}} \definemathcommand [unic@fractiononeeighth] {\vulgarfraction{1}{8}} \definemathcommand [unic@fractionthreeeighths] {\vulgarfraction{3}{8}} \definemathcommand [unic@fractionfiveeighths] {\vulgarfraction{5}{8}} \definemathcommand [unic@fractionseveneighths] {\vulgarfraction{7}{8}} \definemathcommand [unic@fractionnumeratorone] {\vulgarfraction{1}{}} \definemathcommand [unic@romannumeralOne] {{\tf I}} \definemathcommand [unic@romannumeralTwo] {{\tf II}} \definemathcommand [unic@romannumeralThree] {{\tf III}} \definemathcommand [unic@romannumeralFour] {{\tf IV}} \definemathcommand [unic@romannumeralFive] {{\tf V}} \definemathcommand [unic@romannumeralSix] {{\tf VI}} \definemathcommand [unic@romannumeralSeven] {{\tf VII}} \definemathcommand [unic@romannumeralEight] {{\tf VIII}} \definemathcommand [unic@romannumeralNine] {{\tf IX}} \definemathcommand [unic@romannumeralTen] {{\tf X}} \definemathcommand [unic@romannumeralEleven] {{\tf XI}} \definemathcommand [unic@romannumeralTwelve] {{\tf XII}} \definemathcommand [unic@romannumeralFifty] {{\tf L}} \definemathcommand [unic@romannumeralOnehundred] {{\tf C}} \definemathcommand [unic@romannumeralFivehundred] {{\tf D}} \definemathcommand [unic@romannumeralOnethousand] {{\tf M}} \definemathcommand [unic@romannumeralone] {{\tf i}} \definemathcommand [unic@romannumeraltwo] {{\tf ii}} \definemathcommand [unic@romannumeralthree] {{\tf iii}} \definemathcommand [unic@romannumeralfour] {{\tf iv}} \definemathcommand [unic@romannumeralfive] {{\tf v}} \definemathcommand [unic@romannumeralsix] {{\tf vi}} \definemathcommand [unic@romannumeralseven] {{\tf vii}} \definemathcommand [unic@romannumeraleight] {{\tf viii}} \definemathcommand [unic@romannumeralnine] {{\tf ix}} \definemathcommand [unic@romannumeralten] {{\tf x}} \definemathcommand [unic@romannumeraleleven] {{\tf xi}} \definemathcommand [unic@romannumeraltwelve] {{\tf xii}} \definemathcommand [unic@romannumeralfifty] {{\tf l}} \definemathcommand [unic@romannumeralonehundred] {{\tf c}} \definemathcommand [unic@romannumeralfivehundred] {{\tf d}} \definemathcommand [unic@romannumeralonethousand] {{\tf m}} \definemathcommand [unic@romannumeralonethousandCD] {\unknownchar} \definemathcommand [unic@romannumeralfivethousand] {\unknownchar} \definemathcommand [unic@romannumeraltenthousand] {\unknownchar} \definemathcommand [unic@romannumeralreversedonehundred] {\mirror{C}} \stopmathcollection % needed for unic-033 % NW \startmathcollection[default] \definemathcommand [unic@leftarrowtobar] {\mapstochar\leftarrow} \stopmathcollection % needed for unic-034 % NW \startmathcollection[default] \definemathcommand [unic@in] {\in} \definemathcommand [unic@nin] {\not\in} \definemathcommand [unic@nni] {\not\ni} \definemathcommand [unic@minus] {-} \definemathcommand [unic@divisionslash] {/} \definemathcommand [unic@sqrt] {\sqrt{}} \definemathcommand [unic@cubesqrt] {\root 3 \of {}} \definemathcommand [unic@fourthsqrt] {\root 4 \of {}} \definemathcommand [unic@divides] [op] {|} % TODO \definemathcommand [unic@ndivides] [rel] {\mathop{\not|}} % TODO: horrible \definemathcommand [unic@cap] {\cap} \definemathcommand [unic@dblint] {\int\!\!\!\int} \definemathcommand [unic@triint] {\int\!\!\!\int\!\!\!\int} \definemathcommand [unic@ratio] [rel] {:} \definemathcommand [unic@proportion] [rel] {::} \definemathcommand [unic@excess] [op] {-\!\!:} \definemathcommand [unic@geomprop] [op] {:\!\!\!-\!\!\!:} \definemathcommand [unic@homothetic] [op] {\sim\!\!\!:} \definemathcommand [unic@nsimeq] {\not\simeq} \definemathcommand [unic@cong] {\cong} \definemathcommand [unic@napproxeq] {\not\approxeq} \definemathcommand [unic@napprox] {\not\approx} \definemathcommand [unic@doteq] {\doteq} \definemathcommand [unic@correspondsto] {\buildrel \frown \over =} \definemathcommand [unic@estimates] {\buildrel \wedge \over =} \definemathcommand [unic@equiangularto] {\buildrel \vee \over =} \definemathcommand [unic@stareq] {\buildrel \star \over =} \definemathcommand [unic@eqbydef] {\buildrel \rm def \over =} \definemathcommand [unic@measuredby] {\buildrel \rm m \over =} \definemathcommand [unic@questionedeq] {\buildrel \rm ? \over =} \definemathcommand [unic@nequiv] {\not\equiv} \definemathcommand [unic@nasymp] {\not\asymp} \definemathcommand [unic@nlesssim] {\not\lesssim} \definemathcommand [unic@ngtrsim] {\not\gtrsim} \definemathcommand [unic@nlessgtr] {\not\lessgtr} \definemathcommand [unic@ngtrless] {\not\gtrless} \definemathcommand [unic@nsubset] {\not\subset} \definemathcommand [unic@nsupset] {\not\supset} \definemathcommand [unic@nsqsubseteq] {\not\sqsubseteq} \definemathcommand [unic@nsqsupseteq] {\not\sqsupseteq} \stopmathcollection % needed for unic-039 % NW \startmathcollection[default] \definemathcommand [unic@Lbracket] [open] {[\![} \definemathcommand [unic@Rbracket] [close] {]\!]} \definemathcommand [unic@Langle] [open] {\langle\!\langle} \definemathcommand [unic@Rangle] [close] {\rangle\!\rangle} \stopmathcollection \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-des.mkii0000644000175000017500000010065412130411274024271 0ustar norbertnorbert%D \module %D [ file=strc-des, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Descriptions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Descriptions} %D In order to be more flexible with theorems Aditya Mahajan added %D support for titles and endsymbols. At the same time we some more %D flexible support for inheriting numbers was added. %D \startbuffer %D \defineenumeration[one] %D \defineenumeration[two] [one] %D \defineenumeration[three] [number=one,style=slanted] %D \defineenumeration[four] [three] %D \defineenumeration[five] [three] [number=five] %D %D \startone test test 1 \stopone %D \starttwo test test 2 \stoptwo %D \startthree test test 3 \stopthree %D \startfour test test 4 \stopfour %D \startfive test test 1 \stopfive %D \stopbuffer %D %D \typebuffer \start \getbuffer \stop \unprotect % Dit kan en moet dus anders: % % \start... : \vbox\bgroup % \stop... : \egroup % llap enz. % geen indent! % % enz. enz. % % Op die manier is meer mogelijk en worden \par's geskipt. % % De macro \??dd#1\s!do\c!commando levert de koppeling tussen % \doornummeren en \doordefinieren. Deze constructie is nodig % omdat doornummeren geen argument heeft en omdat subnummers % niet worden genest binnen het hogere niveau. % % herimplementeren met \nextbox en \unhbox\unvbox % list and titles are experiental % % \definedescription[test] [location=left,hang=4,headalign={right},distance=1em,list=test] % \defineenumeration[lemma][title=yes,right=:,textdistance=1em, location=top, titlestyle=\bs,list=lemma] % \defineenumeration[ammel][title=yes,right=:,textdistance=.5em,location=left,titlestyle=\it,width=9em] % % \placelist[enumeration:lemma] % \placelist[description:test][width=0pt] % % \starttest {something something something} \input zapf \stoptest % \startlemma {with a title of a certain length} \input tufte \stoplemma % \startammel {with a title} \input zapf \stopammel % % \defineenumeration[lemma][...] % \defineenumeration[titledlemma][lemma][title=yes,right=:,text=lemma,list=lemma] \newbox\@@descriptionbox \def\descriptionparameter#1{\csname\??dd\currentdescription#1\endcsname} \def\@@descriptionhandler{\descriptionparameter{\s!do\c!command}} % \def\normal@@descriptionhandler[#1]#2#3% % {\doattributes % {\??dd\currentdescription}\c!headstyle\c!headcolor % {\descriptionparameter\c!command{#3}}% NAAR BUITENSTE NIVEAU ! % \rawreference\s!def{#1}{#2}} % brrr moet in #4 \def\normal@@descriptionhandler[#1]#2#3% {\doattributes {\??dd\currentdescription}\c!headstyle\c!headcolor {\descriptionparameter\c!command{#3}}% NAAR BUITENSTE NIVEAU ! \doifsomething{\descriptionparameter\c!list} {\dowritetolist {\descriptionparameter\c!type:\descriptionparameter\c!list} {}{#2}{\currentdescription}}% % beware: with footnotes #2 can be something messy but then #1 is % empty anyway, so we have an extra safeguard \doifsomething{#1}{\rawreference\s!def{#1}{#2}}} % brrr moet in #4 \setvalue{@@description\v!left}% {\@@descriptionhang\@@descriptionleftpure\@@descriptionlefthang} \setvalue{@@description\v!right}% {\@@descriptionhang\@@descriptionrightpure\@@descriptionrighthang} \def\@@descriptionhang#1#2% {\processaction [\descriptionparameter\c!hang] [ \v!none=>\let\next#1,% 0=>\let\next#1,% \s!unknown=>\let\next#2,% \s!default=>\let\next#1]% \next} \def\@@descriptionleftpure[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \leftskip\@@leftdescriptionskip \rightskip\@@rightdescriptionskip \advance\leftskip \!!widtha \@@makedescriptionpurebox\raggedright \advance\leftskip \!!widthb \llap {\hbox to \leftskip {\hskip\@@leftdescriptionskip \copy\@@descriptionbox\hss}}% \@@dodescription} \def\@@descriptionrightpure[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \leftskip\@@leftdescriptionskip \rightskip\@@rightdescriptionskip \advance\rightskip \!!widtha \@@makedescriptionpurebox\raggedleft \rlap {\hskip\hsize \hskip-\leftskip \hskip-\rightskip \copy\@@descriptionbox \hskip\@@rightdescriptionskip}% \advance\rightskip \!!widthb \@@dodescription} \def\@@makedescriptionpurebox#1% {\setbox\@@descriptionbox\vtop {\dontcomplain \hsize\!!widtha \leftskip\zeropoint \rightskip\zeropoint #1\setupalign[\descriptionparameter\c!align]% \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}% \ht\@@descriptionbox\strutht \dp\@@descriptionbox\strutdp} \def\@@descriptionlefthang[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \dontcomplain \advance\!!widtha \!!widthb \hangindent\!!widtha \@@makedescriptionhangbox\raggedright{\advance\rightskip \!!widthb}% \noindent\ignorespaces \llap {\dontshowcomposition \vtop to \zeropoint{\box\@@descriptionbox}}% \@@dodescription} \def\@@descriptionrighthang[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \dontcomplain \advance\!!widtha \!!widthb \hangindent-\!!widtha \@@makedescriptionhangbox\raggedleft{\advance\leftskip \!!widthb}% \noindent\ignorespaces \rlap {\dontcomplain \dontshowcomposition \scratchdimen\hsize \advance\scratchdimen -\leftskip \advance\scratchdimen -\rightskip \hbox to \scratchdimen {\hss\vtop to \zeropoint{\box\@@descriptionbox}}}% \@@dodescription} \def\@@makedescriptionhangbox#1#2% {\setbox\@@descriptionbox\vtop % \vbox gaat fout in hang {\forgetall \dontcomplain \hsize\!!widtha #1\setupalign[\descriptionparameter\c!align]#2% \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}% \ht\@@descriptionbox\strutht \dp\@@descriptionbox\strutdp \doifsomething{\descriptionparameter\c!hang} {\doifinsetelse{\descriptionparameter\c!hang}{\v!fit,\v!broad} {\scratchdimen\ht\@@descriptionbox \advance\scratchdimen \dp\@@descriptionbox \doif{\descriptionparameter\c!hang}\v!broad {\advance\scratchdimen .5\strutht}% \getnoflines\scratchdimen \hangafter-\noflines} {\hangafter-\descriptionparameter\c!hang}}} \setvalue{@@description\v!top}[#1]#2% {%\page[\v!preference]% % Weg ermee! %\dosomebreak{\goodbreak}% % Dit is beter en nodig! \dohandlepagebreakX\plusone % En dit moet het maar worden. \@@dostartdescription[#1]{\let\\=\space}{#2}% \noindent\ignorespaces \copy\@@descriptionbox\par \nobreak \descriptionparameter\c!inbetween \nobreak \@@dodescription} \def\do@@description#1[#2]#3% {\@@dostartdescription[#2]{\def\\{\crlf}}{#3}% \noindent\ignorespaces % not needed this ignore #1{\ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}% \@@dodescription} \setvalue{@@description\v!inmargin }{\do@@description\inmargin} \setvalue{@@description\v!inleft }{\do@@description\inleft } \setvalue{@@description\v!inright }{\do@@description\inright } \setvalue{@@description\v!margin }{\do@@description\inmargin} \setvalue{@@description\v!leftmargin }{\do@@description\inleft } \setvalue{@@description\v!rightmargin }{\do@@description\inright } \setvalue{@@description\v!innermargin }{\do@@description\ininner } \setvalue{@@description\v!outermargin }{\do@@description\inouter } \setvalue{@@description\v!serried\v!fit}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox \hskip\!!widthb % toegevoegd \@@dodescription} \setvalue{@@description\v!serried\v!broad}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox \hskip\!!widthb \!!plus .5\!!widthb \!!minus .25\!!widthb \@@dodescription} \setvalue{@@description\v!serried\v!wide}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \hbox to \!!widtha {\ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox\hss}% \hskip\!!widthb \ignorespaces \@@dodescription} \setvalue{@@description\v!serried}[#1]#2% {\processaction [\descriptionparameter\c!width] [ \v!fit=>\let\next\v!fit, \v!broad=>\let\next\v!broad, \s!unknown=>\let\next\v!wide, \s!default=>\let\next\v!broad]% \getvalue{@@description\v!serried\next}[#1]{#2}} \setvalue{@@description\v!hanging}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% % adds \c!margin to \leftskip \noindent\ignorespaces \advance\leftskip -\leftskipadaption \relax \ifdim\leftskipadaption=\zeropoint \leftskipadaption1.5em % just some default \ifnum\nesteddescriptionstate=\plusone \ifdim\leftskip>\zeropoint \relax \leftskipadaption\leftskip \fi \fi \fi \ifnum\nesteddescriptionstate>\zerocount % was \ifnum\nesteddescriptionstate=\plusone \advance\leftskip \leftskipadaption % but we're already further on \fi \hskip-\leftskipadaption \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox \kern\ifdim\!!widthb=\zeropoint .75em\else\!!widthb\fi \ignorespaces \@@dodescription} %D A bonus definition %D %D \starttyping %D \setupfootnotedefinition[location=command,headcommand=\llap] %D \stoptyping \setvalue{@@description\v!command}#1% {\do@@description{\executeifdefined{\??dd#1\c!headcommand}\framed}{#1}} %D A new key 'headalign' in definitions. \def\resetdescriptions % to be used in e.g. footnotes {\chardef\nesteddescriptionstate\zerocount} \resetdescriptions \let\@@leftdescriptionskip \!!zeropoint \let\@@rightdescriptionskip\!!zeropoint \def\@@dostartdescription[#1]#2#3% {\descriptionparameter\c!before \begingroup \doadaptleftskip{\descriptionparameter\c!margin}% \showcomposition \!!widthb\descriptionparameter\c!distance\relax \ifdim\!!widthb=\zeropoint\relax \doif{\descriptionparameter\c!width}\v!broad{\!!widthb=1em}% \fi % temp hack, we need to avoid this kind of preprocessing \setbox\@@descriptionbox\hbox % preroll {\forgetall \trialtypesettingtrue \dontcomplain #2% sets \\ to space or \crlf \@@descriptionhandler[#1]{#3}{\begstrut\descriptionparameter\c!text\ignorespaces#3\endstrut}}% % so far \assignwidth \!!widtha {\descriptionparameter\c!width}% {\doifelsenothing{\descriptionparameter\c!sample}% {% preroll can move here (test first) \ifhbox\@@descriptionbox\unhcopy\else\copy\fi \@@descriptionbox}% {\@@descriptionhandler[#1]{#3}{\descriptionparameter\c!text\descriptionparameter\c!sample}}} \!!widthb \setbox\@@descriptionbox\hbox {\forgetall \dontcomplain #2% sets \\ to space or \crlf \doifelse{\descriptionparameter\c!location}\v!serried {\@@descriptionhandler[#1]{#3}{\begstrut\descriptionparameter\c!text#3\endstrut}} {\@@descriptionhandler[#1]{#3}{\vtop{\hsize\!!widtha\advance\hsize-\!!widthb \begstrut\descriptionparameter\c!text\ignorespaces#3\endstrut}}}}% \doifelse{\descriptionparameter\c!aligntitle}\v!no {\edef\@@leftdescriptionskip {\the\leftskip }% \edef\@@rightdescriptionskip{\the\rightskip}} {\ifcase\nesteddescriptionstate \edef\@@leftdescriptionskip {\the\leftskip }% \edef\@@rightdescriptionskip{\the\rightskip}% \fi}% \expanded{\indenting[\descriptionparameter\c!indenting]}% % better a system mode \ifcase\nesteddescriptionstate \chardef\nesteddescriptionstate\plusone \or \chardef\nesteddescriptionstate\plustwo \fi% now happens elsewhere : \noindent\ignorespaces \@@resetdescriptionclosesymbol} \def\@@stopdescription#1% {\def\currentdescription{#1}% \@@placedescriptionclosesymbol % was \par \dostopattributes % here, else problems with interlinespace and font change \dostopparbasedattributes % == \settrue\parbasedattributes \dostopattributes \endgroup \descriptionparameter\c!after %hm, which currentdescription? \egroup % temporary hack \def\currentdescription{#1}% \dochecknextindentation{\??dd\currentdescription}% \dorechecknextindentation} \def\@@dodescription {\dostartattributes{\??dd\currentdescription}\c!style\c!color\empty \ignorespaces} % starters: \def\@@startdescription[#1][#2]% {\def\currentdescription{#1}% \doifelse{\descriptionparameter\c!title}\v!yes % {\dowithwargument{\@@startsomedescription{#1}[#2]}} % patched for theorems {\permitspacesbetweengroups \dodoublegroupempty{\@@startsomedescription{#1}[#2]}} {\@@startsomedescription{#1}[#2]{}}} \def\@@description[#1][#2]% {\def\currentdescription{#1}% \doifelse{\descriptionparameter\c!title}\v!yes % {\dowithwargument{\@@somedescription{#1}[#2]}} % patched for theorems {\permitspacesbetweengroups \dodoublegroupempty{\@@somedescription{#1}[#2]}} {\@@somedescription{#1}[#2]{}}} % these call: \def\@@somedescription#1[#2]#3% {\dowithpar {\bgroup\@@makedescription{#1}[#2]{#3}}% {\@@stopdescription{#1}}} \def\@@startsomedescription#1[#2]#3% {\bgroup % temporary hack \BeforePar{\@@makedescription{#1}[#2]{#3}}% \GotoPar} % which calls: \def\@@makedescription#1% {\postponenotes % new, assumes grouping \def\currentdescription{#1}% \executeifdefined {@@description\descriptionparameter\c!location} {\getvalue{@@description\v!left}}} % \def\@@makedescription#1% % {\def\currentdescription{#1}% % \ifundefined{@@description\descriptionparameter\c!location}% % \letvalue{\??dd#1\c!location}\v!left % \fi % \getvalue{@@description\descriptionparameter\c!location}} % definitions \def\setupdescriptions {\dodoubleempty\dosetupdescriptions} \def\dosetupdescriptions[#1][#2]% % beter: \iffirstargument {\ConvertToConstant\doifelse{#2}{} {\dodosetupdescriptions[][#1]} {\dodoubleargumentwithset\dodosetupdescriptions[#1][#2]}} \def\dodosetupdescriptions[#1]% [#2]% {\getparameters[\??dd#1]} % [#2]} \def\dodefinedescription[#1][#2]% {\copyparameters[\??dd#1][\??dd] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,\c!title, \c!width,\c!hang,\c!sample,\c!before,\c!inbetween,\c!after,\c!margin, \c!indenting,\c!indentnext,\c!align,\c!text,\c!distance,\c!titledistance,\c!command, \c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]% \getparameters[\??dd#1] [\c!title=\v!yes,\s!do\c!command=\normal@@descriptionhandler, \c!type=\v!description,\c!list=,\c!listtext=, \c!level=,#2]%AM?? Why do we have title=yes here? %\doifvalue{\??dd#1\c!location}\v!top{\doassign[\??dd#1][\c!inbetween=\blank]}% \doifvalue{\??dd#1\c!location}\v!top % we actually need more granularity {\doifnotvalue{\??dd#1\c!inbetween}{\doassign[\??dd#1][\c!inbetween=\blank]}}% \doifvaluesomething{\??dd#1\c!list} {\definelist[\getvalue{\??dd#1\c!type}:\getvalue{\??dd#1\c!list}]}% new \setvalue {#1}{\dodoubleempty\@@description[#1]}% \setvalue{\e!start#1}{\dodoubleempty\@@startdescription[#1]}% \setvalue{\e!stop #1}{\@@stopdescription{#1}}} \def\definedescription {\dodoubleemptywithset\dodefinedescription} \def\currentdescriptionnumber {\csname\??dd\currentdescription\??dd\c!number\endcsname} \def\directcurrentdescriptionnumber#1{\csname\??dd #1\??dd\c!number\endcsname} \ifx\preparednumber\undefined \let\preparednumber\empty \fi \def\special@@descriptionhandler[#1]#2#3% {\strut \doifelse{\descriptionparameter\c!number}\v!no \!!doneafalse{\doifelse{#1}{-}\!!doneafalse\!!doneatrue}% \chardef\descriptioncoupling\zerocount \iflocation \doifsomething{\descriptionparameter\c!coupling} {\processaction % genereert > of < [\descriptionparameter\c!couplingway] [ \v!local=>\chardef\descriptioncoupling\plusone, % old: default \v!global=>\chardef\descriptioncoupling\plustwo]}% new: global crosslinking \fi \setupnumber % the number is called indirectly [\currentdescriptionnumber] [\c!sectionnumber=\descriptionparameter\c!sectionnumber]% \if!!donea \makeprecedingsectionnumber[\currentdescriptionnumber]% \prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber \iftrialtypesetting\startlocal\fi \getvalue{\e!next\currentdescription}% tricky but we need the preroll \iftrialtypesetting\stoplocal\fi % \getvalue{\e!next#2#1}% \iflocation \bgroup \letvalue{\??dd\currentdescription\c!sectionnumber}\v!yes \protectconversion \makeprecedingsectionnumber[\currentdescriptionnumber]% \prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber \ifcase\descriptioncoupling \or \xdef\@@internalenumber{\doshowdnnumber}% \rawreference\s!num{#1:\@@internalenumber}{}% \or \xdef\@@internalenumber{\countervalue{\??dd\c!coupling\currentdescription}}% \rawreference\s!num{\currentdescription:\@@internalenumber}{}% \fi \egroup \fi %\makeprecedingsectionnumber[\currentdescriptionnumber]% %\prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber \disablepseudocaps % sorry, uppercase causes troubles \doattributes % \nocase primitive needed {\??dd\currentdescription}\c!headstyle\c!headcolor % todo: sub as well {\descriptionparameter\c!command {\showdntext \descriptionparameter\c!left \strut\doshowdnnumber \showdntitle{#2}% \descriptionparameter\c!stopper \descriptionparameter\c!right}}% \doifsomething{\descriptionparameter\c!list} {\dowritetolist {\descriptionparameter\c!type:\descriptionparameter\c!list} {\showdnlisttext\doshowdnnumber}{#2}{\currentdescription}}% \iflocation\ifcase\descriptioncoupling \else \edef\localconnection{\descriptionparameter\c!coupling:\@@internalenumber}% \doifreferencefoundelse\localconnection {\in[\localconnection]}\donothing % genereert > of < \fi\fi \doifnot{#1}{-}{\rawreference\s!num{#1}{{\doshowdnnumber}{#2}}}% \else \doattributes{\??dd\currentdescription}\c!headstyle\c!headcolor {\descriptionparameter\c!command {\showdnpuretext \descriptionparameter\c!left \showdntitle{#2}% \descriptionparameter\c!stopper \descriptionparameter\c!right}}% \doifnot{#1}{-}{\rawreference\s!num{#1}{{}{#2}}}% \fi} \def\showdntitle#1% {\doif{\descriptionparameter\c!title}\v!yes % new, for david antos {\doifsomething{#1} {\doattributes{\??dd\currentdescription}\c!titlestyle\c!titlecolor {\hskip\descriptionparameter\c!titledistance \descriptionparameter\c!titlecommand {\descriptionparameter\c!titleleft \begstrut#1\endstrut \descriptionparameter\c!titleright}}}}} \def\showdnpuretext {\strut\descriptionparameter\c!text} % geen spatie \def\showdnlisttext {\descriptionparameter\c!listtext} % space in default \def\showdntext {\doifelsenothing{\descriptionparameter\c!text} {\ignorespaces} {\strut \descriptionparameter\c!text \removeunwantedspaces\fixedspace}} \def\doshowdnnumber {\getvalue{showdn\descriptionparameter\c!level\c!number}} % maybe recursive until end condition undefined \setvalue{showdn\c!number}% {\preparednumber \convertednumber[\currentdescriptionnumber]} \setvalue{showdn\v!sub\c!number}% {\getvalue{showdn\c!number}% \spr{\descriptionparameter\c!separator}% \convertednumber[\v!sub\currentdescriptionnumber]} \setvalue{showdn\v!sub\v!sub\c!number}% {\getvalue{showdn\v!sub\c!number}% \spr{\descriptionparameter\c!separator}% \convertednumber[\v!sub\v!sub\currentdescriptionnumber]} \setvalue{showdn\v!sub\v!sub\v!sub\c!number}% {\getvalue{showdn\v!sub\v!sub\c!number}% \spr{\descriptionparameter\c!separator}% \convertednumber[\v!sub\v!sub\v!sub\currentdescriptionnumber]} \def\domakednnumber {\descriptionparameter\c!left \strut\doshowdnnumber \descriptionparameter\c!stopper \descriptionparameter\c!right} \setvalue{\??dd\s!set\v!sub\s!sub\s!sub\c!number}#1% {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}% \setnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!set\v!sub\s!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \setnumber[\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!set\v!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \setnumber[\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!set\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \setnumber[\@@descriptionnumber]} \setvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}#1% {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}% \resetnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!reset\v!sub\v!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \resetnumber[\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!reset\v!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \resetnumber[\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!reset\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \resetnumber[\@@descriptionnumber]} \setvalue{\??dd\e!next\v!sub\v!sub\v!sub\c!number}#1#2% {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}% \incrementnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\v!sub\v!sub\v!sub\c!number}}}% \setvalue{\??dd\e!next\v!sub\v!sub\c!number}#1#2% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \incrementnumber[\v!sub\v!sub\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\v!sub\v!sub\c!number}}}% \setvalue{\??dd\e!next\v!sub\c!number}#1#2% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \incrementnumber[\v!sub\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\v!sub\c!number}}}% \setvalue{\??dd\e!next\c!number}#1#2% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \incrementnumber[\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\c!number}}}% \def\dodosetupenumerations[#1][#2]% {\getparameters[\??dd#1][#2]% \doifdefined{\??dd#1\c!start} {\setupnumber[#1][\c!start=\getvalue{\??dd#1\c!start}]}% \setupnumber[#1][\c!conversion=\getvalue{\??dd#1\c!conversion}]} \def\dosetupenumerations[#1][#2]% {\ConvertToConstant\doifelse{#2}{} {\getparameters[\??dn][#1]} {\dodoubleargumentwithset\dodosetupenumerations[#1][#2]}} \def\setupenumerations {\dodoubleempty\dosetupenumerations} \def\docheckenumerationnumber#1#2#3% {\processaction [\getvalue{\??dd#2\c!number}] [ \v!yes=>\setvalue{\??dd#2\??dd\c!number}{#3},% \v!no=>\setvalue{\??dd#2\??dd\c!number}{#3},% \v!default=>\setvalue{\??dd#2\??dd\c!number}{#3},% \v!unknown=>\letvalue{\??dd#2\??dd\c!number}\commalistelement]} \def\dododefineenumeration#1#2#3[#4][#5]% {\makecounter{\??dd\c!coupling#1}% new: global cross linking \dodefinedescription[#3#1]% [\c!title=\v!no,\c!level=#3,\c!type=\v!enumeration,\c!list=,% \s!do\c!command=\special@@descriptionhandler]% \copyparameters[\??dd#3#1][\??dn] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor, \c!width,\c!number,\c!distance,\c!titledistance,\c!command, \c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after, \c!levels,\c!way,\c!blockway,\c!separator,\c!margin, \c!indenting,\c!indentnext,\c!stopper,\c!sectionnumber, \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]% \doifassignmentelse{#4} {\getparameters[\??dd#3#1]% [\c!text=#1,\??dd\c!number=#1,\c!conversion=,\c!listtext=#1\space, \c!left=,\c!right=,\c!coupling=,\c!couplingway=\v!local,#4]% \docheckenumerationnumber{#1}{#3#1}{#1}}% {\doifelsenothing{#4} {\getparameters[\??dd#3#1]% [\c!text=#1,\??dd\c!number=#1,\c!conversion=, \c!stopper=, \c!left=,\c!right=,\c!coupling=,\c!couplingway=,#4]% \docheckenumerationnumber{#1}{#3#1}{#1}}% {\copyparameters[\??dd#3#1][\??dd#3#4] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor, \c!width,\c!number,\c!distance,\c!titledistance,\c!command,\c!margin, \c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after, \c!stopper,\c!indenting,\c!indentnext,\c!left,\c!right, \c!coupling,\c!couplingway, \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]% \getparameters[\??dd#3#1] [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]% %docheckenumerationnumber{#1}{#3#1}{#4}}}% \docheckenumerationnumber{#1}{#3#1}{\getvalue{\??dd#3#4\??dd\c!number}}}}% \doifvalue{\??dd#3#1\??dd\c!number}{#1} {\definenumber [#3#1] [\c!way=\descriptionparentparameter\c!way, \c!blockway=\descriptionparentparameter\c!blockway, \c!conversion=\descriptionparentparameter\c!conversion, \c!sectionnumber=\descriptionparentparameter\c!sectionnumber]% \doifvalue{\??dd#1\c!levels}{#2}% % for {\doifsomething{\getvalue{\??dd#1\c!conversion}}% % old {\setupnumber[#3#1] % times [\c!conversion=\descriptionparameter\c!conversion]}}}% % sake \doifvaluesomething{\??dd#3#1\c!list} {\definelist[\getvalue{\??dd#3#1\c!type}:\getvalue{\??dd#3#1\c!list}]}% new % should work ... %setvalue{\s!set #3#1}{\dosetenumerationnumber[#1][#3]}% %setvalue{\s!reset#3#1}{\doresetenumerationnumber[#1][#3]}% %setvalue{\e!next #3#1}{\dotripleempty\donextenumerationnumber[#1][#3]}} % but since we use \currentdescription, we need ... \setevalue{\s!set #3#1}{\noexpand \dosetenumerationnumber [#1][#3]}% \setevalue{\s!reset#3#1}{\noexpand \doresetenumerationnumber[#1][#3]}% \setevalue{\e!next #3#1}{\noexpand\dotripleempty\noexpand\donextenumerationnumber [#1][#3]}} \def\descriptionparentparameter#1{\csname\??dd\currentdescriptionnumber#1\endcsname} \def\dodefineenumeration[#1][#2][#3]% {\dododefineenumeration{#1}{1}{}[#2][#3]% \dododefineenumeration{#1}{2}{\v!sub}[#2][#3]% \dododefineenumeration{#1}{3}{\v!sub\v!sub}[#2][#3]% \dododefineenumeration{#1}{4}{\v!sub\v!sub\v!sub}[#2][#3]} \def\defineenumeration {\dotripleemptywithset\dodefineenumeration} \def\doresetenumerationnumber[#1][#2]% name level {\getvalue{\??dd\s!reset#2\c!number}{#1}}% \def\dosetenumerationnumber[#1][#2]% name level {\getvalue{\??dd\s!set#2\c!number}{#1}}% \def\donextenumerationnumber[#1][#2][#3]% name level reference {\pluscounter{\??dd\c!coupling#1}% new: global crosslinking \getvalue{\??dd\e!next#2\c!number}{#1}{#3}}% \def\@@resetdescriptionclosesymbol {\global\@EA\settrue\csname\??dd\currentdescription:mrk\endcsname \let\placeclosesymbol\@@placedescriptionclosesymbol \let\qed \@@placedescriptionclosesymbol} \def\@@placedescriptionclosesymbol {\ifconditional\csname\??dd\currentdescription:mrk\endcsname \global\@EA\setfalse\csname\??dd\currentdescription:mrk\endcsname \doifsomething{\descriptionparameter\c!closesymbol}{\descriptionparameter\c!closecommand{\descriptionparameter\c!closesymbol}}% \fi} % Het default-mechanisme kan mooier: leegtest, enz. % % Werkprocedure buiten description \def\dodosetupindentations[#1][#2]% {\getparameters[\??ds#1][#2]} \def\dosetupindentations[#1][#2]% {\ConvertToConstant\doifelse{#2}{} {\dodosetupindentations[][#1]} {\dodoubleargumentwithset\dodosetupindentations[#1][#2]}} \def\setupindentations {\dodoubleempty\dosetupindentations} % what to do with this \def\startdoorspringen {\whitespace \@@dsbefore \dosomebreak\goodbreak % \page[\v!preference] \begingroup \parskip\zeropoint\relax} \def\stopdoorspringen {\endgroup \@@dsafter} % \def\dododefineindenting#1#2#3% {\par \getvalue{\??ds#1\c!before}% \begingroup \doifvaluenothing{\??ds#1\c!sample} {\setvalue{\??ds#1\c!sample}% {\getvalue{\??ds#1\c!text}}}% \assignwidth {\!!widtha} {\getvalue{\??ds#1\c!width}} {\doattributes {\??ds#1}\c!headstyle\c!headcolor {\getvalue{\??ds#1\c!sample}% \spr{\getvalue{\??ds#1\c!separator}}}} {\getvalue{\??ds#1\c!distance}}% \advance\!!widtha \getvalue{\??ds#1\c!distance}% \setbox2\hbox to \!!widtha {\doattributes {\??ds#1}\c!headstyle\c!headcolor {\strut \getvalue{\??ds#1\c!text}% \hss \spr{\getvalue{\??ds#1\c!separator}}% \hskip\getvalue{\??ds#1\c!distance}}}% \parindent\zeropoint \hskip#2\!!widtha\indent\box2% \hangindent#3\!!widtha \doattributes{\??ds#1}\c!style\c!color\empty \AfterPar{\endgroup\getvalue{\??ds#1\c!after}}% must be redone \GetPar} \def\dodefineindenting[#1][#2]% {\copyparameters[\??ds#1][\??ds] [\c!text,\c!separator,\c!width,\c!style,\c!color, \c!headstyle,\c!sample,\c!before,\c!after,\c!distance]% \getparameters[\??ds#1][#2]% \setvalue {#1}{\dododefineindenting{#1}{0}{1}}% \setvalue {\v!sub#1}{\dododefineindenting{#1}{1}{2}}% \setvalue{\v!sub\v!sub#1}{\dododefineindenting{#1}{2}{3}}} \def\defineindenting {\dodoubleargumentwithset\dodefineindenting} \def\definelabel {\dodoubleargumentwithset\dodefinelabel} \def\dodefinelabel[#1][#2]% {\definenumber [#1] [\c!command=,\c!location=,#2]% % downward compatible \processaction [\numberparameter{#1}\c!location] [ \v!inmargin=>{\setupnumber[#1][\c!command=\inmargin]}, \v!inleft=>{\setupnumber[#1][\c!command=\inleft ]}, \v!inright=>{\setupnumber[#1][\c!command=\inright ]}, \v!margin=>{\setupnumber[#1][\c!command=\inmargin]}]% % generated commands (in addition to the number ones) \setvalue {#1}{\dodoubleempty\do@@label[#1]}% \setvalue{\s!reset #1}{\resetnumber[#1]}% \setvalue{\e!increment#1}{\incrementnumber[#1]}% \setvalue{\e!next #1}{\dodoubleempty\do@@nextlabel[#1]}% \setvalue{\c!current #1}{\currentnumber[#1]}} \def\do@@label[#1][#2]% {\numberparameter{#1}\c!before \numberparameter{#1}\c!command{\doattributes{\@@thenumber{#1}}\c!headstyle\c!headcolor{\getvalue{\e!next#1}[#2]}}% \numberparameter{#1}\c!after}% \def\do@@nextlabel[#1][#2]% {\nextnumber[#1][\s!lab][#2]} \def\currentnumber[#1]% kan tekst hier weg ? {\dotextprefix{\numberparameter{#1}\c!text}\sectionnumberonly[#1]} \def\nextnumber[#1][#2][#3]% {\incrementnumber[#1]% \currentnumber[#1]% \rawreference{#2}{#3}{\composedsectionnumber}} \setupdescriptions [\c!location=\v!left, \c!headstyle=\v!bold, \c!titlestyle=\v!bold, \c!style=\v!normal, \c!color=, \c!headcolor=, \c!titlecolor=, \c!width=8em, \c!distance=0pt, \c!titledistance=0.5em, \c!hang=, \c!sample=, \c!align=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!titleleft=(, \c!titleright=), \c!closesymbol=, \c!closecommand=\wordright, \c!command=, \c!titlecommand=] \setupenumerations [\c!location=\v!top, \c!headstyle=\v!bold, \c!headcolor=, \c!titlestyle=\v!bold, \c!titlecolor=, \c!style=\v!normal, \c!color=, \c!width=8em, \c!distance=0pt, \c!titledistance=0.5em, \c!hang=, \c!sample=, \c!align=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!text=, \c!levels=3, % to be upward compatible \c!conversion=, % to be upward compatible \c!way=\v!by\v!text, \c!sectionnumber=\v!yes, \c!separator=\@@koseparator, % per 2006.06.23, was . \c!stopper=, \c!titleleft=(, \c!titleright=), \c!closesymbol=, \c!closecommand=\wordright, \c!number=, \c!command=, \c!titlecommand=] \setupindentations [\c!style=\v!normal, \c!headstyle=\v!normal, \c!color=, \c!headcolor=, \c!width=\v!fit, \c!text=\unknown, \c!sample=, \c!before=\blank, \c!after=\blank, \c!distance=1em, \c!separator={ :}] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-pag.lua0000644000175000017500000000152711571377075024130 0ustar norbertnorbertif not modules then modules = { } end modules ['scrn-pag'] = { version = 1.001, comment = "companion to scrn-pag.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } interactions = interactions or { } interactions.pages = interactions.pages or { } local pages = interactions.pages local codeinjections = backends.codeinjections local function setupcanvas(specification) codeinjections.setupcanvas(specification) end local function setpagetransition(specification) codeinjections.setpagetransition(specification) end pages.setupcanvas = setupcanvas pages.setpagetransition = setpagetransition commands.setupcanvas = setupcanvas commands.setpagetransition = setpagetransition context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-def.mkii0000644000175000017500000000113711754241457024242 0ustar norbertnorbert%D \module %D [ file=regi-def, %D version=2000.20.12, % split from less verbose base file %D title=\CONTEXT\ Regime Macros, %D subtitle=Default Character Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startregime[default] \dostepwiserecurse{128}{255}{1} {\expanded{\defineactivetoken\recurselevel\space{\rawcharacter\recurselevel}}}% \stopregime \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-003.mkii0000644000175000017500000001372711754241457024026 0ustar norbertnorbert%D \module %D [ file=unic-003, %D version=2005.01.26, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 3, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startunicodevector 3 \ifcase\numexpr#1-126\relax % special greek \strippedcsname \greekquestionmark \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \greektonos \or \strippedcsname \greekdialytikatonos \or \strippedcsname \greekAlphatonos \or \strippedcsname \greekanoteleia \or \strippedcsname \greekEpsilontonos \or \strippedcsname \greekEtatonos \or \strippedcsname \greekIotatonos \or \strippedcsname \unknownchar \or \strippedcsname \greekOmicrontonos \or \strippedcsname \unknownchar \or \strippedcsname \greekUpsilontonos \or \strippedcsname \greekOmegatonos \or \strippedcsname \greekiotadialytikatonos \or % normal greek \strippedcsname \greekAlpha \or \strippedcsname \greekBeta \or \strippedcsname \greekGamma \or \strippedcsname \greekDelta \or \strippedcsname \greekEpsilon \or \strippedcsname \greekZeta \or \strippedcsname \greekEta \or \strippedcsname \greekTheta \or \strippedcsname \greekIota \or \strippedcsname \greekKappa \or \strippedcsname \greekLambda \or \strippedcsname \greekMu \or \strippedcsname \greekNu \or \strippedcsname \greekXi \or \strippedcsname \greekOmicron \or \strippedcsname \greekPi \or \strippedcsname \greekRho \or \strippedcsname \unknownchar \or \strippedcsname \greekSigma \or \strippedcsname \greekTau \or \strippedcsname \greekUpsilon \or \strippedcsname \greekPhi \or \strippedcsname \greekChi \or \strippedcsname \greekPsi \or \strippedcsname \greekOmega \or % special greek \strippedcsname \greekIotadialytika \or \strippedcsname \greekUpsilondialytika \or \strippedcsname \greekalphatonos \or \strippedcsname \greekepsilontonos \or \strippedcsname \greeketatonos \or \strippedcsname \greekiotatonos \or \strippedcsname \greekupsilondialytikatonos \or % normal greek \strippedcsname \greekalpha \or \strippedcsname \greekbeta \or \strippedcsname \greekgamma \or \strippedcsname \greekdelta \or \strippedcsname \greekepsilon \or \strippedcsname \greekzeta \or \strippedcsname \greeketa \or \strippedcsname \greektheta \or \strippedcsname \greekiota \or \strippedcsname \greekkappa \or \strippedcsname \greeklambda \or \strippedcsname \greekmu \or \strippedcsname \greeknu \or \strippedcsname \greekxi \or \strippedcsname \greekomicron \or \strippedcsname \greekpi \or \strippedcsname \greekrho \or \strippedcsname \greekfinalsigma \or \strippedcsname \greeksigma \or \strippedcsname \greektau \or \strippedcsname \greekupsilon \or \strippedcsname \greekphi \or \strippedcsname \greekchi \or \strippedcsname \greekpsi \or \strippedcsname \greekomega \or % special greek \strippedcsname \greekiotadialytika \or \strippedcsname \greekupsilondialytika \or \strippedcsname \greekomicrontonos \or \strippedcsname \greekupsilontonos \or \strippedcsname \greekomegatonos \or % was greeek! \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or % beta alt \strippedcsname \greekthetaalt \or \strippedcsname \unknownchar \or % upsilon hook \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \greekphialt \or \strippedcsname \greekpialt \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or % Sampi \strippedcsname \unknownchar \or % sampi \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or % kappa alt \strippedcsname \greekrhoalt \or \strippedcsname \greeksigmalunate \or \strippedcsname \unknownchar \or \strippedcsname \unknownchar \or \strippedcsname \greekepsilonalt \else \strippedcsname \unknownchar \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-imp-library.lua0000644000175000017500000002057512130411274026377 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-library'] = { version = 1.001, comment = "companion to util-sql.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- local function pcall(f,...) return true, f(...) end -- For some reason the sql lib partially fails in luatex when creating hashed row. So far -- we couldn't figure it out (some issue with adapting the table that is passes as first -- argument in the fetch routine. Apart from this it looks like the mysql binding has some -- efficiency issues (like creating a keys and types table for each row) but that could be -- optimized. Anyhow, fecthing results can be done as follows: -- local function collect_1(r) -- local t = { } -- for i=1,r:numrows() do -- t[#t+1] = r:fetch({},"a") -- end -- return t -- end -- -- local function collect_2(r) -- local keys = r:getcolnames() -- local n = #keys -- local t = { } -- for i=1,r:numrows() do -- local v = { r:fetch() } -- local r = { } -- for i=1,n do -- r[keys[i]] = v[i] -- end -- t[#t+1] = r -- end -- return t -- end -- -- local function collect_3(r) -- local keys = r:getcolnames() -- local n = #keys -- local t = { } -- for i=1,r:numrows() do -- local v = r:fetch({},"n") -- local r = { } -- for i=1,n do -- r[keys[i]] = v[i] -- end -- t[#t+1] = r -- end -- return t -- end -- -- On a large table with some 8 columns (mixed text and numbers) we get the following -- timings (the 'a' alternative is already using the more efficient variant in the -- binding). -- -- collect_1 : 1.31 -- collect_2 : 1.39 -- collect_3 : 1.75 -- -- Some, as a workaround for this 'bug' the second alternative can be used. local format = string.format local lpegmatch = lpeg.match local setmetatable, type = setmetatable, type local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end) local trace_queries = false trackers.register("sql.queries",function(v) trace_queries = v end) local report_state = logs.reporter("sql","library") local sql = utilities.sql local mysql = require("luasql.mysql") local cache = { } local helpers = sql.helpers local methods = sql.methods local validspecification = helpers.validspecification local querysplitter = helpers.querysplitter local dataprepared = helpers.preparetemplate local serialize = sql.serialize local deserialize = sql.deserialize local formatters = string.formatters local initialize = mysql.mysql local function connect(session,specification) return session:connect( specification.database or "", specification.username or "", specification.password or "", specification.host or "", specification.port ) end local function fetched(specification,query,converter) if not query or query == "" then report_state("no valid query") return false end local id = specification.id local session, connection if id then local c = cache[id] if c then session = c.session connection = c.connection end if not connection then session = initialize() if not session then return formatters["no session for %a"](id) end connection = connect(session,specification) if not connection then return formatters["no connection for %a"](id) end cache[id] = { session = session, connection = connection } end else session = initialize() if not session then return "no session" end connection = connect(session,specification) if not connection then return "no connection" end end if not connection then report_state("error in connection: %s@%s to %s:%s", specification.database or "no database", specification.username or "no username", specification.host or "no host", specification.port or "no port" ) return "no connection" end query = lpegmatch(querysplitter,query) local result, okay for i=1,#query do local q = query[i] local r, m = connection:execute(q) if m then report_state("error in query to host %a: %s",specification.host,string.collapsespaces(q)) if m then report_state("message: %s",m) end end local t = type(r) if t == "userdata" then result = r okay = true elseif t == "number" then okay = true end end if not okay then -- can go if session then session:close() end if connection then connection:close() end if id then cache[id] = nil end return "execution error" end local data, keys if result then if converter then data = converter.library(result) else keys = result:getcolnames() if keys then data = { } local n = result:numrows() or 0 if n > 0 then local k = #keys for i=1,n do local v = { result:fetch() } local d = { } for i=1,k do d[keys[i]] = v[i] end data[#data+1] = d end end end end result:close() end if not id then if connection then connection:close() end if session then session:close() end end return false, data, keys end local function datafetched(specification,query,converter) local callokay, connectionerror, data, keys = pcall(fetched,specification,query,converter) if not callokay then report_state("call error, retrying") callokay, connectionerror, data, keys = pcall(fetched,specification,query,converter) elseif connectionerror then report_state("error: %s, retrying",connectionerror) callokay, connectionerror, data, keys = pcall(fetched,specification,query,converter) end if not callokay then report_state("persistent call error") elseif connectionerror then report_state("persistent error: %s",connectionerror) end return data or { }, keys or { } end local function execute(specification) if trace_sql then report_state("executing library") end if not validspecification(specification) then report_state("error in specification") return end local query = dataprepared(specification) if not query then report_state("error in preparation") return end local data, keys = datafetched(specification,query,specification.converter) if not data then report_state("error in fetching") return end local one = data[1] if one then setmetatable(data,{ __index = one } ) end return data, keys end -- Here we build the dataset stepwise so we don't use the data hack that -- is used in the client variant. local wraptemplate = [[ local converters = utilities.sql.converters local deserialize = utilities.sql.deserialize local tostring = tostring local tonumber = tonumber local booleanstring = string.booleanstring %s return function(result) if not result then return { } end local nofrows = result:numrows() or 0 if nofrows == 0 then return { } end local target = { } -- no %s needed here for i=1,nofrows do local cells = { result:fetch() } target[%s] = { %s } end return target end ]] local celltemplate = "cells[%s]" methods.library = { runner = function() end, -- never called execute = execute, initialize = initialize, -- returns session usesfiles = false, wraptemplate = wraptemplate, celltemplate = celltemplate, } context-2013.05.28.20130704/texmf-dist/tex/context/base/type-run.mkiv0000644000175000017500000000333111754241457024356 0ustar norbertnorbert%D \module %D [ file=type-run, %D version=2001.04.20, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \gdef\typetypescript {\dotripleempty\dotypetypescript} \gdef\dotypetypescript[#1][#2][#3]% {\bgroup \def\dochecktypescript##1##2% script use {\doifelsenothing{##1##2} {\donetrue} {\doifcommonelse{##1}{##2}\donetrue\donefalse}} \edef\typescriptone {\truetypescript{#1}}% \edef\typescripttwo {\truetypescript{#2}}% \edef\typescriptthree{\truetypescript{#3}}% \unexpanded\def\starttypescript {\bgroup \obeylines % else we loose the first line due to lookahead \dotripleempty\dostarttypescript} \def\dostarttypescript[##1][##2][##3]% {\long\def\next####1\stoptypescript{\egroup} \dochecktypescript{##1}\typescriptone \ifdone \dochecktypescript{##2}\typescripttwo \ifdone \dochecktypescript{##3}\typescriptthree\ifdone \def\next% {\unexpanded\def\stoptypescript{\egroup\type{\stoptypescript}} % what follows now is quite ugly \skipfirstverbatimlinefalse \type{\starttypescript} \doifsomething{##1}{\type{[##1]}} \doifsomething{##2}{\type{[##2]}} \doifsomething{##3}{\type{[##3]}} \processdisplayverbatim{\stoptypescript}}% \fi\fi\fi \next} \processcommacommand[\typescriptfiles]\ReadFile % \dodousetypescript \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-con.mkiv0000644000175000017500000006034712130411274024273 0ustar norbertnorbert%D \module %D [ file=core-con, %D version=1997.26.08, %D title=\CONTEXT\ Core Macros, %D subtitle=Conversion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Conversion} \registerctxluafile{core-con}{1.001} \unprotect \ifdefined\currentlanguage \else \let\currentlanguage\empty \fi \ifdefined\labeltext \else \let\labeltext \firstofoneargument \fi %D This module deals with all kind of conversions from numbers and dates. I %D considered splitting this module in a support one and a core one, but to keep %D things simple as well as preserve the overview, I decided against splitting. \let\spr\firstofoneargument % separator \let\stp\firstofoneargument % stopper % needed for arab: \unexpanded\def\isolateseparators % even works with list separator overloading {\def\spr##1{{##1}}% % we can probably best mess around with zwj \def\stp##1{{##1}}} % and friends %D \macros %D {numbers} %D %D First we deal with the dummy conversion of numbers using the \TEX\ primitive %D \type{\number}. The uppercase alternative is only there for compatibility with %D the other conversion macros. We could do without \type{#1} but this way we get %D rid of unwanted braces. For the savety we also define a non||sence uppercase %D alternative. %D %D \showsetup{numbers} %D %D \starttyping %D \def\numbers#1{\number#1} %D \def\Numbers#1{\number#1} %D \stoptyping %D %D Due to read ahead, as in \type{[\pagenumber\space]} the space will disappear, %D unless we use: \def\numbers#1{\purenumber{#1}} \def\Numbers#1{\purenumber{#1}} %D \macros %D {romannumerals,Romannumerals} %D %D \TEX\ the program uses a rather tricky conversion from numbers to their roman %D counterparts. This conversion could of course be programmed in \TEX\ itself, but %D I guess Knuth found the programming trick worth presenting. %D %D \showsetup{romannumerals} %D \showsetup{Romannumerals} \def\romannumerals#1{\ctxcommand{romannumerals(\number#1)}} \def\Romannumerals#1{\ctxcommand{Romannumerals(\number#1)}} %D Arabic etc: \def\abjadnumerals #1{\ctxcommand{abjadnumerals (\number#1)}} \def\abjadnodotnumerals#1{\ctxcommand{abjadnodotnumerals(\number#1)}} \def\abjadnaivenumerals#1{\ctxcommand{arabicnumerals (\number#1)}} \def\languagecharacters#1{\ctxcommand{alphabetic(\number#1,"\currentlanguage")}} % new \def\languageCharacters#1{\ctxcommand{Alphabetic(\number#1,"\currentlanguage")}} % new % we could use an auxiliary macro to save some bytes in the format % % \def\dolanguagecharacters#1#2{\ctxcommand{alphabetic(\number#2,"#1")}} \def\thainumerals #1{\ctxcommand{alphabetic(\number#1,"thai")}} \def\devanagarinumerals#1{\ctxcommand{alphabetic(\number#1,"devanagari")}} \def\gurmurkhinumerals #1{\ctxcommand{alphabetic(\number#1,"gurmurkhi")}} \def\gujaratinumerals #1{\ctxcommand{alphabetic(\number#1,"gujarati")}} \def\tibetannumerals #1{\ctxcommand{alphabetic(\number#1,"tibetan")}} \def\greeknumerals #1{\ctxcommand{alphabetic(\number#1,"greek")}} \def\Greeknumerals #1{\ctxcommand{Alphabetic(\number#1,"greek")}} \def\arabicnumerals #1{\ctxcommand{alphabetic(\number#1,"arabic")}} \def\persiannumerals #1{\ctxcommand{alphabetic(\number#1,"persian")}} \let\arabicexnumerals \persiannumerals \def\koreannumerals #1{\ctxcommand{alphabetic(\number#1,"korean")}} \def\koreannumeralsp #1{\ctxcommand{alphabetic(\number#1,"korean-parent")}} \def\koreannumeralsc #1{\ctxcommand{alphabetic(\number#1,"korean-circle")}} \def\chinesenumerals #1{\ctxcommand{chinesenumerals (\number#1)}} \def\chinesecapnumerals#1{\ctxcommand{chinesecapnumerals(\number#1,"cap")}} \def\chineseallnumerals#1{\ctxcommand{chineseallnumerals(\number#1,"all")}} %D \macros %D {character,Character} %D %D Converting a number into a character can of course only be done with numbers %D less or equal to~26. At the cost of much more macros a faster conversion is %D possible, using: %D %D \starttyping %D \setvalue{char1}{a} \def\character#1{\getvalue{char#1}} %D \stoptyping %D %D But we prefer a simpel \type{\case}. %D %D \showsetup{character} %D \showsetup{Character} \def\unknowncharacter{-} % else in lists \relax \def\character#1{\ctxcommand{character(\number#1)}} \def\Character#1{\ctxcommand{Character(\number#1)}} %D \macros %D {characters,Characters} %D %D Converting large numbers is supported by the next two macros. This time we %D just count on: $\cdots$~x, y, z, aa, ab, ac~$\cdots$. %D %D \showsetup{characters} %D \showsetup{Characters} \def\characters#1{\ctxcommand{characters(\number#1)}} \def\Characters#1{\ctxcommand{Characters(\number#1)}} %D \macros %D {greeknumerals,Greeknumerals} %D %D Why should we only honour the romans, and not the greek? % \let\greeknumerals\gobbleoneargument % \let\Greeknumerals\gobbleoneargument %D \macros %D {oldstylenumerals,oldstyleromannumerals} %D %D These conversions are dedicated to Frans Goddijn. \unexpanded\def\oldstylenumerals#1% {\begingroup \os\number#1% \endgroup} \unexpanded\def\oldstyleromannumerals#1% will become obsolete {\dontleavehmode \hbox\bgroup \ss\txx \setbox\scratchbox\hbox \s!spread .15\emwidth{\hss\uppercased{\romannumerals{#1}}\hss}% \scratchwidth \wd\scratchbox \scratchheight\ht\scratchbox \scratchdimen .1\exheight \vrule\s!width\scratchwidth\s!height\dimexpr\scratchheight+\scratchdimen\relax\s!depth-\dimexpr\scratchheight-+\scratchdimen\relax \hskip-\scratchwidth \vrule\s!width\scratchwidth\s!height\scratchdimen\s!depth\scratchdimen \hskip-\scratchwidth \box\scratchbox \egroup} %D \macros %D {protectconversion} %D %D The previous two commands are not robust enough to be passed to \type %D {\write} en \type{\message}. That's why we introduce: \unexpanded\def\protectconversion {\let\doconvertcharacters\firstofoneargument} %D \macros %D {normaltime,normalyear,normalmonth,normalday} %D %D The last part of this module is dedicated to converting dates. Because we %D want to use as meaningful commands as possible, and because \TEX\ already %D uses up some of those, we save the original meanings. \savenormalmeaning\time \savenormalmeaning\year \savenormalmeaning\month \savenormalmeaning\day %D \macros %D {month,MONTH} %D %D Converting the month number into a month name is done using a case statement, %D abstact values and the label mechanism. This way users can easily redefine a %D label from for instance german into austrian. %D %D \starttyping %D \setuplabeltext [de] [january=J\"anner] %D \stoptyping %D %D Anyhow, the conversion looks like: \def\monthlong #1{\ctxcommand{monthname(#1)}} \def\monthshort#1{\ctxcommand{monthmnem(#1)}} \let\convertmonth\monthlong % for old times sake %D We redefine the \TEX\ primitive \type{\month} as: %D %D \showsetup{month} %D \showsetup{MONTH} \let\month \monthlong \def\MONTH #1{\WORD{\month {#1}}} \def\MONTHLONG #1{\WORD{\monthlong {#1}}} \def\MONTHSHORT#1{\WORD{\monthshort{#1}}} %D We never explicitly needed this, but Tobias Burnus pointed out that it would be %D handy to convert to the day of the week. In doing so, we have to calculate the %D total number of days, taking leapyears into account. For those who are curious: %D %D \startitemize[packed] %D \item years that can be divided by 4 are leapyears %D \item exept years that can be divided by 100 %D \item unless years can be divided by 400 %D \stopitemize %D \macros %D {weekday,WEEKDAY} %D %D The first one is sort of redundant. It takes the day number argument. %D %D \showsetup{weekday} %D \showsetup{WEEKDAY} \def\weekday#1{\ctxcommand{day(#1)}} \def\WEEKDAY#1{\WORD{\weekday{#1}}} %D \macros %D {getdayoftheweek, dayoftheweek} \newcount\normalweekday \def\dayoftheweek #1#2#3{\ctxcommand{weekdayname(\number#1,\number#2,\number#3)}} % name \unexpanded\def\getdayoftheweek#1#2#3{\normalweekday\ctxcommand{weekday(\number#1,\number#2,\number#3)}\relax} % number %D Using this macro in %D %D \startbuffer %D monday: \dayoftheweek {4} {5} {1992} %D friday: \dayoftheweek {16} {6} {1995} %D monday: \dayoftheweek {25} {8} {1997} %D saturday: \dayoftheweek {30} {8} {1997} %D tuesday: \dayoftheweek {2} {1} {1996} %D tuesday: \dayoftheweek {7} {1} {1997} %D tuesday: \dayoftheweek {13} {1} {1998} %D friday: \dayoftheweek {1} {1} {2000} %D \stopbuffer %D %D \typebuffer %D %D gives %D %D \startlines %D \getbuffer %D \stoplines %D %D The macro \type {\getdayoftheweek} can be used to calculate the number %D \type {\normalweekday}. %D \macros %D {doifleapyearelse, %D getdayspermonth} %D %D Sometimes we need to know if we're dealing with a leapyear, so here is a %D testmacro: %D %D \starttyping %D \doifleapyearelse{year}{yes}{no} %D \stoptyping %D %D An example of its use can be seen in the macro %D %D \starttyping %D \getdayspermonth{year}{month} %D \stoptyping %D %D The number of days is available in the macro \type {\numberofdays}. \def\doifleapyearelse#1% {\ctxcommand{doifleapyearelse(\number#1)}} \unexpanded\def\getdayspermonth#1#2% {\edef\numberofdays{\ctxcommand{nofdays(\number#1,\number#2)}}} \def\dayspermonth#1#2% {\ctxcommand{nofdays(\number#1,\number#2)}} % \dayoftheweek{2006}{9}{15} % \doifleapyearelse{2000}{OK}{NOT OK} % \doifleapyearelse{2100}{NOT OK}{OK} % \doifleapyearelse{2004}{OK}{NOT OK} % \doifleapyearelse{2003}{NOT OK}{OK} % \dayspermonth{2000}{2} % [\the\normaltime=\the\time] %D \macros %D {currentdate, rawdate, date} %D %D We use these conversion macros in the date formatting macro: %D %D \showsetup{currentdate} %D %D This macro takes care of proper spacing and delivers for instance: %D %D \startbuffer %D \currentdate[weekday,day,month,year] % still dutch example %D \currentdate[WEEKDAY,day,MONTH,year] % still dutch example %D \stopbuffer %D %D \startlines %D \getbuffer %D \stoplines %D %D depending of course on the keywords. Here we gave: %D %D \typebuffer %D %D If needed one can also add non||keywords, like in %D %D \startbuffer %D \currentdate[dd,--,mm,--,yy] %D \stopbuffer %D %D \typebuffer %D %D or typeset: \getbuffer. %D %D When no argument is passed, the current date is given as specified per %D language (using \type{\installlanguage}). %D %D \showsetup{currentdate} %D %D \startbuffer %D \date %D \date[d=12,m=12,y=1998][weekday] %D \date[d=12,m=12,y=1998] %D \stopbuffer %D %D We can also typeset arbitrary dates, using the previous %D command. %D %D \typebuffer %D %D The date is specified by one character keys. When no date is given, we %D get the current date. %D %D \startlines %D \getbuffer %D \stoplines %D \starttabulate[|l|l|] %D \HL %D \NC year \NC (\currentdate[year]) \NC\NR %D \NC yy \NC (\currentdate[yy]) \NC\NR %D \NC y \NC (\currentdate[y]) \NC\NR %D \NC Y \NC (\currentdate[Y]) \NC\NR %D \HL %D \NC month \NC (\currentdate[month]) \NC\NR %D \NC mm \NC (\currentdate[mm]) \NC\NR %D \NC m \NC (\currentdate[m]) \NC\NR %D \NC M \NC (\currentdate[M]) \NC\NR %D \HL %D \NC day \NC (\currentdate[day]) \NC\NR %D \NC dd \NC (\currentdate[dd]) \NC\NR %D \NC d \NC (\currentdate[d]) \NC\NR %D \NC D \NC (\currentdate[D]) \NC\NR %D \HL %D \NC weekday \NC (\currentdate[weekday]) \NC\NR %D \NC w \NC (\currentdate[w]) \NC\NR %D \NC W \NC (\currentdate[W]) \NC\NR %D \HL %D \NC referral \NC (\currentdate[referral]) \NC\NR %D \HL %D \NC day:mnem \NC (\currentdate[day:mnem]) \NC\NR %D \NC dd:mnem \NC (\currentdate[dd:mnem]) \NC\NR %D \NC d:mnem \NC (\currentdate[d:mnem]) \NC\NR %D \NC D:mnem \NC (\currentdate[D:mnem]) \NC\NR %D \HL %D \stoptabulate %D %D \startbuffer %D (\currentdate[D,.,M,.,Y]) %D (\currentdate[day,month,year]) %D (\currentdate[day,+,month,+,year]) %D \stopbuffer %D %D \typebuffer \getbuffer \newtoks \everycurrentdate \unexpanded\def\currentdate {\dosingleempty\syst_converters_current_date} \def\syst_converters_current_date[#1]% {\begingroup \the\everycurrentdate \doifsomething{#1}{\edef\currentdatespecification{#1}}% \ctxcommand{currentdate(\!!bs\currentdatespecification\!!es,"\labellanguage")}% \endgroup} \unexpanded\def\date {\dodoubleempty\syst_converters_date} \def\syst_converters_date[#1][#2]% {\begingroup \iffirstargument \letdummyparameter\c!d\normalday \letdummyparameter\c!m\normalmonth \letdummyparameter\c!y\normalyear \getdummyparameters[#1]% \normalday \directdummyparameter\c!d\relax \normalmonth\directdummyparameter\c!m\relax \normalyear \directdummyparameter\c!y\relax \fi \syst_converters_current_date[#2]% \endgroup} \def\rawdate[#1]% expandable and no labels {\ctxcommand{rawdate(\!!bs\currentdatespecification\!!es)}} %D \macros %D {currenttime} %D %D The currenttime is actually the jobtime. You can specify a pattern similar %D to the previous date macro using the keys \type {h}, \type {m} and a separator. \unexpanded\def\calculatecurrenttime {\edef\currenthour {\ctxcommand{hour ()}}% \edef\currentminute{\ctxcommand{minute()}}% \edef\currentsecond{\ctxcommand{second()}}} \let\currenthour \!!plusone \let\currentminute\!!plusone \let\currentsecond\!!plusone \def\currenttimespecification{h,:,m} \unexpanded\def\currenttime {\doifnextoptionalelse\syst_converters_current_time_yes\syst_converters_current_time_nop} \unexpanded\def\syst_converters_current_time_yes[#1]% {\calculatecurrenttime \processallactionsinset[#1][h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]} \unexpanded\def\syst_converters_current_time_nop {\normalexpanded{\syst_converters_current_time_yes[\currenttimespecification]}} %D Because we're dealing with dates, we also introduce a few day loops: %D %D \starttyping %D \processmonth{year}{month}{command} %D \processyear{year}{command}{before}{after} %D \stoptyping %D %D The counters \type {\normalyear}, \type {\normalmonth} and \type {\normalday} %D can be used for for date manipulations. \unexpanded\def\processmonth#1#2#3% year month command {\begingroup \getdayspermonth{#1}{#2}% \dostepwiserecurse\plusone\numberofdays\plusone {\normalyear #1\relax \normalmonth#2\relax \normalday \recurselevel\relax #3}% \endgroup} \def\lastmonth{12} % can be set to e.g. 1 when testing \unexpanded\def\processyear#1#2#3#4% year command before after {\begingroup \dorecurse\lastmonth {\normalyear #1\relax \normalmonth\recurselevel\relax #3\processmonth\normalyear\normalmonth{#2}#4}% \endgroup} %D \macros %D {defineconversion, convertnumber} %D %D Conversion involves the macros that we implemented earlier in this module. %D %D \showsetup{defineconversion} %D \showsetup{convertnumber} %D %D We can feed this command with conversion macros as well as a set of conversion %D symbols. Both need a bit different treatment. %D %D \starttyping %D \defineconversion [roman] [\romannumerals] %D \defineconversion [set 1] [$\star$,$\bullet$,$\ast$] %D \stoptyping %D %D You can define a language dependent conversion with: %D %D \starttyping %D \defineconversion [en] [whatever] [\something] %D \stoptyping \installcorenamespace {conversion} \installcorenamespace {conversionarguments} \installcorenamespace {conversionwords} \unexpanded\def\defineconversion {\dotripleempty\syst_converters_define_conversion} \def\syst_converters_define_conversion[#1][#2][#3]% from now on global (maybe local again some day) {\ifthirdargument \syst_converters_define_conversion_indeed{#1#2}{#1:#2}{#3}% \else \syst_converters_define_conversion_indeed{#1}{#1}{#2}% \fi} \def\syst_converters_define_conversion_indeed#1#2#3% {\doifinstringelse{,}{\detokenize{#3}} {\ctxcommand{defineconversion("#2",\!!bs\detokenize{#3}\!!es)}% \setgvalue{\??conversion#1}{\syst_converters_checked_conversion{#2}}} {\setgvalue{\??conversion#1}{#3}}} \def\syst_converters_checked_conversion#1#2% {\ctxcommand{checkedconversion("#1",#2)}} %D If a conversion is just a font switch then we need to make sure that the %D number is indeed ends up as number in the input, so we need to handle the %D second argument. \def\convertnumber#1#2% expandable {\csname\??conversionarguments \ifcsname\??conversion\currentlanguage#1\endcsname1\else \ifcsname\??conversion #1\endcsname2\else 3\fi\fi \endcsname{#1}{\number#2}} \unexpanded\def\uconvertnumber % unexpandable {\convertnumber} \setvalue{\??conversionarguments1}#1{\csname\??conversion\currentlanguage#1\endcsname} \setvalue{\??conversionarguments2}#1{\csname\??conversion #1\endcsname} \letvalue{\??conversionarguments3}\syst_converters_checked_conversion \def\doifconversiondefinedelse#1% {\ifcsname\??conversion\currentlanguage#1\endcsname \expandafter\firstoftwoarguments \else\ifcsname\??conversion#1\endcsname \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} \def\doifelseconversionnumber#1#2% {\ifcsname\??conversion#1#2\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D Handy. \setvalue{\??conversionwords\v!one }{1} \setvalue{\??conversionwords\v!two }{2} \setvalue{\??conversionwords\v!three}{3} \setvalue{\??conversionwords\v!four }{4} \setvalue{\??conversionwords\v!five }{5} \def\wordtonumber#1#2{\ifcsname\??conversionwords#1\endcsname\csname\??conversionwords#1\endcsname\else#2\fi} % \defineconversion[ctx][c,o,n,t,e,x,t] % % \doloop{\doifelseconversionnumber{ctx}{\recurselevel}{[\recurselevel]}{\exitloop}} %D \macros %D {ordinaldaynumber, highordinalstr, ordinalstr} %D %D Efficient general ordinal number converters are sometimes difficult to %D implement. Fortunately dates never exceed the number~31. \def\highordinalstr #1{\high{\notsmallcapped{#1}}} \def\ordinalstr #1{\notsmallcapped{#1}} \def\ordinaldaynumber #1{\ctxcommand{ordinal(#1,"\currentlanguage")}} \def\verbosenumber #1{\ctxcommand{verbose(#1,"\currentlanguage")}} \def\VerboseNumber #1{\Words{\ctxcommand{verbose(#1,"\currentlanguage")}}} %D As longs as symbols are linked to levels or numbers, we can also use the %D conversion mechanism, but in for instance the itemization macros, we prefer %D symbols because they can more easier be (partially) redefined. Symbols are %D implemented in another module. \def\smallcappedromannumerals#1{\smallcapped{\romannumerals{#1}}} \def\smallcappedcharacters #1{\smallcapped{\characters {#1}}} \defineconversion [] [\numbers] % the default conversion \defineconversion [\v!empty] [\gobbleoneargument] \defineconversion [\v!none] [\numbers] \defineconversion [\s!default] [\numbers] \defineconversion [month] [\monthlong] \defineconversion [month:mnem] [\monthshort] \defineconversion [\v!character] [\character] \defineconversion [\v!Character] [\Character] \defineconversion [\v!characters] [\characters] \defineconversion [\v!Characters] [\Characters] \defineconversion [a] [\characters] \defineconversion [A] [\Characters] \defineconversion [AK] [\smallcappedcharacters] \defineconversion [KA] [\smallcappedcharacters] \defineconversion [\v!number] [\numbers] \defineconversion [\v!numbers] [\numbers] \defineconversion [\v!Numbers] [\Numbers] \defineconversion [\v!mediaeval] [\mediaeval] \defineconversion [\v!word] [\verbosenumber] \defineconversion [\v!words] [\verbosenumber] \defineconversion [\v!Word] [\VerboseNumber] \defineconversion [\v!Words] [\VerboseNumber] \defineconversion [n] [\numbers] \defineconversion [N] [\Numbers] \defineconversion [m] [\mediaeval] \defineconversion [o] [\oldstylenumerals] \defineconversion [O] [\oldstylenumerals] \defineconversion [or] [\oldstyleromannumerals] \defineconversion [\v!romannumerals] [\romannumerals] \defineconversion [\v!Romannumerals] [\Romannumerals] \defineconversion [i] [\romannumerals] \defineconversion [I] [\Romannumerals] \defineconversion [r] [\romannumerals] \defineconversion [R] [\Romannumerals] \defineconversion [KR] [\smallcappedromannumerals] \defineconversion [RK] [\smallcappedromannumerals] \defineconversion [\v!greek] [\greeknumerals] \defineconversion [\v!Greek] [\Greeknumerals] \defineconversion [g] [\greeknumerals] \defineconversion [G] [\Greeknumerals] \defineconversion [abjadnumerals] [\abjadnumerals] \defineconversion [abjadnodotnumerals] [\adjadnodotnumerals] \defineconversion [abjadnaivenumerals] [\adjadnaivenumerals] \defineconversion [thainumerals] [\thainumerals] \defineconversion [devanagarinumerals] [\devanagarinumerals] \defineconversion [gurmurkhinumerals] [\gurmurkhinumerals] \defineconversion [gujaratinumerals] [\gujaratinumerals] \defineconversion [tibetannumerals] [\tibetannumerals] \defineconversion [greeknumerals] [\greeknumerals] \defineconversion [Greeknumerals] [\Greeknumerals] \defineconversion [arabicnumerals] [\arabicnumerals] \defineconversion [persiannumerals] [\persiannumerals] \defineconversion [arabicexnumerals] [\arabicexnumerals] \defineconversion [koreannumerals] [\koreannumerals] \defineconversion [koreanparentnumerals] [\koreanparentnumerals] \defineconversion [koreancirclenumerals] [\koreancirclenumerals] \defineconversion [kr] [\koreannumerals] \defineconversion [kr-p] [\koreanparentnumerals] \defineconversion [kr-c] [\koreancirclenumerals] \defineconversion [chinesenumerals] [\chinesenumerals] \defineconversion [chinesecapnumeralscn] [\chinesecapnumerals] \defineconversion [chineseallnumeralscn] [\chineseallnumerals] \defineconversion [cn] [\chinesenumerals] \defineconversion [cn-c] [\chinesecapnumerals] \defineconversion [cn-a] [\chineseallnumerals] %D In case a font has no greek (WS): \defineconversion [mathgreek] [\m{α},\m{β},\m{γ},\m{δ},\m{ε},\m{ζ}, \m{η},\m{θ},\m{ι},\m{κ},\m{λ},\m{μ}, \m{ν},\m{ξ},\m{ο},\m{π},\m{ρ},\m{σ}, \m{τ},\m{υ},\m{φ},\m{χ},\m{ψ},\m{ω}] %D Symbol sets: \ifdefined\symbol \else \def\symbol[#1]{#1} \fi % todo \defineconversion [set 0] [{\symbol[bullet]}, {\symbol[dash]}, {\symbol[star]}, {\symbol[triangle]}, {\symbol[circle]}, {\symbol[medcircle]}, {\symbol[bigcircle]}, {\symbol[square]}] \defineconversion [set 1] [\mathematics{\star}, \mathematics{\star\star}, \mathematics{\star\star\star}, \mathematics{\ddagger}, \mathematics{\ddagger\ddagger}, \mathematics{\ddagger\ddagger\ddagger}, \mathematics{\ast}, \mathematics{\ast\ast}, \mathematics{\ast\ast\ast}] \defineconversion [set 2] [\mathematics{*}, \mathematics{\dag}, \mathematics{\ddag}, \mathematics{**}, \mathematics{\dag\dag}, \mathematics{\ddag\ddag}, \mathematics{***}, \mathematics{\dag\dag\dag}, \mathematics{\ddag\ddag\ddag}, \mathematics{****}, \mathematics{\dag\dag\dag\dag}, \mathematics{\ddag\ddag\ddag\ddag}] \defineconversion [set 3] [\mathematics{\star}, \mathematics{\star\star}, \mathematics{\star\star\star}, \mathematics{\ddagger}, \mathematics{\ddagger\ddagger}, \mathematics{\ddagger\ddagger\ddagger}, \mathematics{\P}, \mathematics{\P\P}, \mathematics{\P\P\P}, \mathematics{\S}, \mathematics{\S\S}, \mathematics{\S\S\S}, \mathematics{\ast}, \mathematics{\ast\ast}, \mathematics{\ast\ast\ast}] %D Iteration of suggestion by WS on mailinglist 2010.12.22: %D %D \starttyping %D \setupfloatsplitting[conversion=continued] %D \stoptyping \unexpanded\def\continuednumber#1% {\labeltext{\ifcase#1\or\else\v!continued\fi}} \defineconversion [\v!continued] [\continuednumber] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-corres.mkii0000644000175000017500000000623611754241457024327 0ustar norbertnorbert%D \module %D [ file=x-corres, %D version=2003.12.15, % replaces keep-02a cum suis %D title=\CONTEXT\ XML Modules, %D subtitle=Handling Correspondence Base, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The selection spec: \setvariables [contacts] [selection=, file=x-corres.xml] % fall back %D First we define the group expansion pass: \startsetups[contacts:collect] \defineXMLprocess [contacts] \defineXMLignore [contact] \defineXMLargument [contactfile] \processfile \defineXMLenvironmentsave [contactgroup] [label=] {\startXMLmappinggroup[contacts]} {\XMLaddcontactgrouptoselection \stopXMLmappinggroup} \stopsetups %D Next we define the main processing pass: \startsetups[contacts:process] \defineXMLprocess[contacts] \defineXMLignore [contactgroup] \defineXMLargument [contactfile] \processfile \defineXMLenvironmentsave[contact] [label=] {\startXMLmappinggroup[contacts]} {\XMLselectcontact \stopXMLmappinggroup} \stopsetups \startXMLmapping[contacts] \defineXMLsave [initials] \defineXMLsave [formalname] \defineXMLsave [informalname] \defineXMLsave [title] \defineXMLsave [prefix] \defineXMLsave [suffix] \defineXMLsave [telephone] \defineXMLsave [mobiletelephone] \defineXMLsave [telefax] \defineXMLsave [email] \defineXMLsave [address] \defineXMLsave [information] \defineXMLenvironment [p] \endgraf \endgraf \defineXMLargument [member] \XMLaddcontacttoselection \stopXMLmapping %D The selection macros: we expand groups and replace them %D by contact labels in the selection spec. \def\XMLaddcontactgrouptoselection {\edef\XMLcontactlist{\getvariable{contacts}{selection}}% \edef\XMLgrouplabel {\XMLop{label}}% \expanded{\doifinset{\XMLgrouplabel}{\XMLcontactlist}} {\let\XMLgrouplist\empty \XMLflush{contactgroup}% \substituteincommalist\XMLgrouplabel\XMLgrouplist\XMLcontactlist \expanded {\globalsetvariables [contacts] [selection={\XMLcontactlist}]}}} \def\XMLaddcontacttoselection#1% {\addtocommalist{#1}\XMLgrouplist} %D The main selector: \def\XMLselectcontact {\edef\XMLcontactlist {\getvariable{contacts}{selection}}% \edef\XMLcontactlabel{\XMLop{label}}% \doifelsenothing{\XMLcontactlist} {\donetrue} {\expanded{\doifinsetelse{\XMLcontactlabel}{\XMLcontactlist}} {\donetrue} {\donefalse}}% \ifdone \XMLflush{contact}% \setups[contact:handle]% \fi} %D The default: \startsetups[contact:handle] \XMLflush{address} \stopsetups \setups[contacts:process] %D Handy: \def\XMLprocesscontacts {\dosingleempty\XMLprocesscontacts} \def\XMLprocesscontacts[#1]% {\bgroup \doifelsenothing{#1} {\XMLprocesscontacts[\getvariable{contacts}{file}]} {\setups[contacts:collect]% \processcommacommand[#1]\processXMLfile \setups[contacts:process]% \processcommacommand[#1]\processXMLfile}% \egroup} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/sort-ini.mkiv0000644000175000017500000000105011754241457024333 0ustar norbertnorbert%D \module %D [ file=sort-ini, %D version=2005.08.08, %D title=\CONTEXT\ Sort Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Sorting Macros / Initialization} \registerctxluafile{sort-ini}{1.001} \registerctxluafile{sort-lan}{1.001} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-res.lua0000644000175000017500000002633312130411274024112 0ustar norbertnorbertif not modules then modules = { } end modules ['node-res'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local gmatch, format = string.gmatch, string.format local tonumber, round = tonumber, math.round --[[ldx--

The next function is not that much needed but in we use for debugging node management.

--ldx]]-- local report_nodes = logs.reporter("nodes","housekeeping") local nodes, node = nodes, node local copy_node = node.copy local free_node = node.free local free_list = node.flush_list local new_node = node.new nodes.pool = nodes.pool or { } local pool = nodes.pool local whatsitcodes = nodes.whatsitcodes local skipcodes = nodes.skipcodes local kerncodes = nodes.kerncodes local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local allocate = utilities.storage.allocate local reserved, nofreserved = { }, 0 local function register_node(n) nofreserved = nofreserved + 1 reserved[nofreserved] = n return n end pool.register = register_node function pool.cleanup(nofboxes) -- todo if nodes.tracers.steppers then -- to be resolved nodes.tracers.steppers.reset() -- todo: make a registration subsystem end local nl, nr = 0, nofreserved for i=1,nofreserved do local ri = reserved[i] -- if not (ri.id == glue_spec and not ri.is_writable) then free_node(reserved[i]) -- end end if nofboxes then local tb = tex.box for i=0,nofboxes do local l = tb[i] if l then free_node(tb[i]) nl = nl + 1 end end end reserved = { } nofreserved = 0 return nr, nl, nofboxes -- can be nil end function pool.usage() local t = { } for n, tag in gmatch(status.node_mem_usage,"(%d+) ([a-z_]+)") do t[tag] = n end return t end local disc = register_node(new_node("disc")) local kern = register_node(new_node("kern",kerncodes.userkern)) local fontkern = register_node(new_node("kern",kerncodes.fontkern)) local penalty = register_node(new_node("penalty")) local glue = register_node(new_node("glue")) -- glue.spec = nil local glue_spec = register_node(new_node("glue_spec")) local glyph = register_node(new_node("glyph",0)) local textdir = register_node(new_node("whatsit",whatsitcodes.dir)) local latelua = register_node(new_node("whatsit",whatsitcodes.latelua)) local special = register_node(new_node("whatsit",whatsitcodes.special)) local user_n = register_node(new_node("whatsit",whatsitcodes.userdefined)) user_n.type = 100 -- 44 local user_l = register_node(new_node("whatsit",whatsitcodes.userdefined)) user_l.type = 110 -- 44 local user_s = register_node(new_node("whatsit",whatsitcodes.userdefined)) user_s.type = 115 -- 44 local user_t = register_node(new_node("whatsit",whatsitcodes.userdefined)) user_t.type = 116 -- 44 local left_margin_kern = register_node(new_node("margin_kern",0)) local right_margin_kern = register_node(new_node("margin_kern",1)) local lineskip = register_node(new_node("glue",skipcodes.lineskip)) local baselineskip = register_node(new_node("glue",skipcodes.baselineskip)) local leftskip = register_node(new_node("glue",skipcodes.leftskip)) local rightskip = register_node(new_node("glue",skipcodes.rightskip)) local temp = register_node(new_node("temp",0)) local noad = register_node(new_node("noad")) -- the dir field needs to be set otherwise crash: local rule = register_node(new_node("rule")) rule .dir = "TLT" local hlist = register_node(new_node("hlist")) hlist.dir = "TLT" local vlist = register_node(new_node("vlist")) vlist.dir = "TLT" function pool.zeroglue(n) local s = n.spec return not writable or ( s.width == 0 and s.stretch == 0 and s.shrink == 0 and s.stretch_order == 0 and s.shrink_order == 0 ) end function pool.glyph(fnt,chr) local n = copy_node(glyph) if fnt then n.font = fnt end if chr then n.char = chr end return n end function pool.penalty(p) local n = copy_node(penalty) n.penalty = p return n end function pool.kern(k) local n = copy_node(kern) n.kern = k return n end function pool.fontkern(k) local n = copy_node(fontkern) n.kern = k return n end function pool.gluespec(width,stretch,shrink,stretch_order,shrink_order) local s = copy_node(glue_spec) if width then s.width = width end if stretch then s.stretch = stretch end if shrink then s.shrink = shrink end if stretch_order then s.stretch_order = stretch_order end if shrink_order then s.shrink_order = shrink_order end return s end local function someskip(skip,width,stretch,shrink,stretch_order,shrink_order) local n = copy_node(skip) if not width then -- no spec elseif width == false or tonumber(width) then local s = copy_node(glue_spec) if width then s.width = width end if stretch then s.stretch = stretch end if shrink then s.shrink = shrink end if stretch_order then s.stretch_order = stretch_order end if shrink_order then s.shrink_order = shrink_order end n.spec = s else -- shared n.spec = copy_node(width) end return n end function pool.stretch(a,b) local n = copy_node(glue) local s = copy_node(glue_spec) if b then s.stretch = a s.stretch_order = b else s.stretch = 1 s.stretch_order = a or 1 end n.spec = s return n end function pool.shrink(a,b) local n = copy_node(glue) local s = copy_node(glue_spec) if b then s.shrink = a s.shrink_order = b else s.shrink = 1 s.shrink_order = a or 1 end n.spec = s return n end function pool.glue(width,stretch,shrink,stretch_order,shrink_order) return someskip(glue,width,stretch,shrink,stretch_order,shrink_order) end function pool.leftskip(width,stretch,shrink,stretch_order,shrink_order) return someskip(leftskip,width,stretch,shrink,stretch_order,shrink_order) end function pool.rightskip(width,stretch,shrink,stretch_order,shrink_order) return someskip(rightskip,width,stretch,shrink,stretch_order,shrink_order) end function pool.lineskip(width,stretch,shrink,stretch_order,shrink_order) return someskip(lineskip,width,stretch,shrink,stretch_order,shrink_order) end function pool.baselineskip(width,stretch,shrink) return someskip(baselineskip,width,stretch,shrink) end function pool.disc() return copy_node(disc) end function pool.textdir(dir) local t = copy_node(textdir) t.dir = dir return t end function pool.rule(width,height,depth,dir) -- w/h/d == nil will let them adapt local n = copy_node(rule) if width then n.width = width end if height then n.height = height end if depth then n.depth = depth end if dir then n.dir = dir end return n end if node.has_field(latelua,'string') then function pool.latelua(code) local n = copy_node(latelua) n.string = code return n end else function pool.latelua(code) local n = copy_node(latelua) n.data = code return n end end function pool.leftmarginkern(glyph,width) local n = copy_node(left_margin_kern) if not glyph then report_nodes("invalid pointer to left margin glyph node") elseif glyph.id ~= glyph_code then report_nodes("invalid node type %a for %s margin glyph node",nodecodes[glyph],"left") else n.glyph = glyph end if width then n.width = width end return n end function pool.rightmarginkern(glyph,width) local n = copy_node(right_margin_kern) if not glyph then report_nodes("invalid pointer to right margin glyph node") elseif glyph.id ~= glyph_code then report_nodes("invalid node type %a for %s margin glyph node",nodecodes[p],"right") else n.glyph = glyph end if width then n.width = width end return n end function pool.temp() return copy_node(temp) end function pool.noad() return copy_node(noad) end function pool.hlist() return copy_node(hlist) end function pool.vlist() return copy_node(vlist) end --[[

At some point we ran into a problem that the glue specification of the zeropoint dimension was overwritten when adapting a glue spec node. This is a side effect of glue specs being shared. After a couple of hours tracing and debugging Taco and I came to the conclusion that it made no sense to complicate the spec allocator and settled on a writable flag. This all is a side effect of the fact that some glues use reserved memory slots (with the zeropoint glue being a noticeable one). So, next we wrap this into a function and hide it for the user. And yes, LuaTeX now gives a warning as well.

]]-- function nodes.writable_spec(n) -- not pool local spec = n.spec if not spec then spec = copy_node(glue_spec) n.spec = spec elseif not spec.writable then spec = copy_node(spec) n.spec = spec end return spec end -- local num = userids["my id"] -- local str = userids[num] local userids = allocate() pool.userids = userids local lastid = 0 setmetatable(userids, { __index = function(t,k) if type(k) == "string" then lastid = lastid + 1 rawset(userids,lastid,k) rawset(userids,k,lastid) return lastid else rawset(userids,k,k) return k end end, __call = function(t,k) return t[k] end } ) function pool.usernumber(id,num) local n = copy_node(user_n) if num then n.user_id, n.value = id, num elseif id then n.value = id end return n end function pool.userlist(id,list) local n = copy_node(user_l) if list then n.user_id, n.value = id, list else n.value = id end return n end function pool.userstring(id,str) local n = copy_node(user_s) if str then n.user_id, n.value = id, str else n.value = id end return n end function pool.usertokens(id,tokens) local n = copy_node(user_t) if tokens then n.user_id, n.value = id, tokens else n.value = id end return n end function pool.special(str) local n = copy_node(special) n.data = str return n end statistics.register("cleaned up reserved nodes", function() return format("%s nodes, %s lists of %s", pool.cleanup(tex.count["c_syst_last_allocated_box"])) end) -- \topofboxstack statistics.register("node memory usage", function() -- comes after cleanup ! return status.node_mem_usage end) lua.registerfinalizer(pool.cleanup, "cleanup reserved nodes") context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-50.mkii0000644000175000017500000002332411754241457024042 0ustar norbertnorbert%D \module %D [ file=x-res-50, %D version=2004.02.18, %D title=\CONTEXT\ Style File, %D subtitle=Multimedia Presentation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a preliminary module, using a preliminary xml media format that %D looks as follows (record is embedded in resource library element): %D %D \starttyping %D %D Sample One %D application/x-shockwave-flash %D http://localhost/mb.swf %D 8cm %D 6cm %D Nothing special to be said. %D cow.pdf %D %D %D %D Sample Two %D audio/mpeg %D mb.mp3 %D mb.jpg %D %D \stoptyping %D %D \starttyping %D texexec --pdf --use=med-show yourfile.xml %D \stoptyping %D %D Bonus: %D %D \starttyping %D --arg="url=http://localhost:8881/e:/media" %D \stoptyping % output=pdftex % \nopdfcompression % bugs in recognizing embedded stream cq. player % bugs in layers + hide/vide % bugs in save javascripts % bugs all over the place % in principe kan menu overal hetzelfde zijn als we via JS per pagina de clip var zetten, % hoewel, misschien zal het menu gaan afhangen van de soort clip % property (eigenschap) aan framed en layer \usemodule[meta-dum] \usemodule[contml] \autoXMLnamespace [context] \doifelsevariable{environment}{url} {\setvariables[mediaclip][url=\getvariable{environment}{url}/]} {\setvariables[mediaclip][url=]} \startmode [silent] \setvariables[mediaclip:option][start=] \stopmode \startnotmode [silent] \setvariables[mediaclip:option][start=auto] \stopnotmode \chardef\XMLtokensreduction=1 \dontcomplain % \showframe \pdfcompresslevel=0 \setuppapersize [S6][S6] \definemeasure [GapSize] [\dimexpr( 15pt)] \definemeasure [EdgeWidth] [\dimexpr(100pt)] \definemeasure [TextWidth] [\dimexpr(.5\textwidth)] \definemeasure [RenderingWidth] [\dimexpr(\textwidth)] \definemeasure [RenderingHeight] [\dimexpr(\textheight)] % \XMLflush{rl:ratio}\dimexpr(.75\textwidth), \setuplayout [backspace=\measure{GapSize}, topspace=\measure{GapSize}, header=0pt, footer=0pt, margin=0pt, edgedistance=2\measure{GapSize}, rightedge=\measure{EdgeWidth}, bottomdistance=2\measure{GapSize}, bottom=2\measure{GapSize}, height=fit, width=fit] \setupinteraction [state=start, color=lightgray, contrastcolor=lightgray, openaction=PresetFields, closeaction=ForgetChanges, menu=on, click=no] \setupinteractionscreen [option=max] \setupcolors [state=start] \usetypescript [palatino][texnansi] \setupbodyfont [palatino] \definecolor[darkgray] [s=.2] \definecolor[mediumgray][s=.5] \definecolor[lightgray] [s=.8] \definecolor[transgray] [s=1,t=.9,a=1] \setupbackgrounds [page] [backgroundoffset=\measure{GapSize}, background={color,pagebutton}, backgroundcolor=black] \definelayer [main] [width=\textwidth, height=\textheight] \definelayer [extra] [width=\rightedgewidth, height=\bottomheight] \setupbackgrounds [text] [backgroundoffset=0pt, background=main] \setupbackgrounds [bottom][rightedge] [backgroundoffset=0pt, background=extra] % java scripts \startJSpreamble {handy} used now function ForgetChanges () { this.dirty = false } function PresetFields () { this.syncAnnotScan() } \stopJSpreamble \definereference[PresetFields] [JS(PresetFields)] \definereference[ForgetChanges][JS(ForgetChanges)] % layers \defineproperty [menulayer] [layer] [title=menulayer] \defineproperty [textlayer] [layer] [title=textlayer,state=stop] \defineproperty [datalayer] [layer] [title=datalayer,state=stop] \setupfield [rollbutton] [fieldlayer=menulayer] \setupfield [rollbutton] [option=auto] \definepalet [rollover] [n=darkgray, r=lightgray, d=darkgray] % list \definelist [clips] [expansion=yes, criterium=text, alternative=f] % navigation \defineoverlay[pagebutton][\overlaybutton{HideLayer{textlayer},HideLayer{datalayer},ToggleLayer{menulayer}}] \defineoverlay[textbutton][\overlaybutton{HideLayer{textlayer},HideLayer{datalayer}}] \defineoverlay[databutton][\overlaybutton{HideLayer{textlayer},HideLayer{datalayer}}] % clips \defineXMLenvironment [rl:mediaclip] {\setups[mediaclip:start]} {\setups[mediaclip:stop]} \newcounter\MediaClip \startsetups[mediaclip:start] \bgroup \startXMLignore % no \startstandardmakeup here since we need the dsta in the menuconstruction \defineXMLsave [rl:name] \defineXMLsave [rl:visualization] \defineXMLsave [rl:file] \defineXMLsave [rl:mime] \defineXMLsave [rl:picture] [backgroundcolor=lightgray] \defineXMLsavecontent [rl:text] {No additional info.} \defineXMLsavecontent [rl:width] {\measure{RenderingWidth}} \defineXMLsavecontent [rl:height] {\measure{RenderingHeight}} \defineXMLsavecontent [rl:aspect] {1} \stopsetups \startsetups[mediaclip:stop] \startstandardmakeup \doifXMLdataelse{rl:file} {\setups[mediaclip:file:yes]} {} \doifXMLdataelse{rl:picture} {\doifelse{\XMLflush{rl:picture}}{self} {\setups[mediaclip:picture:self]} {\setups[mediaclip:picture:yes]}} {\setups[mediaclip:picture:no]} \doifXMLdata{rl:text} {\setups[mediaclip:text]} \setlayerframed [extra] [preset=rightbottom] [frame=off,offset=overlay,width=fit,background=databutton,align=left] {\startproperty[datalayer]\setups[mediaclip:data]\stopproperty} \doifXMLdataelse{rl:name} {\writetolist[clips]{}{\XMLflush{rl:name}}} {\writetolist[clips]{}{\XMLpar{rl:mediaclip}{label}{unknown}}} \stopstandardmakeup \stopXMLignore \egroup \stopsetups \setuptabulate [before=, after=] \def\rlCleanupFileName#1% {\bgroup \def\cleanup##1##2{\ifnum##1##2=20 \space\else\char\octnumber{##1##2}\fi}% \defineactivecharacter 37 {\cleanup}% \scantokens{#1}% \egroup} \startsetups[mediaclip:data] \noindent \buttonframed [framecolor=lightgray, foregroundcolor=lightgray] {\bf\expanded{\rlCleanupFileName{\XMLflush{rl:file}}}} \vskip.75\measure{GapSize} \noindent \buttonframed [framecolor=lightgray, foregroundcolor=lightgray] {\bf\XMLflush{rl:mime}} \stopsetups \startsetups[mediaclip:picture:self] \definerenderingwindow [mediaclip] [width=\XMLflush{rl:width}, height=\XMLflush{rl:height}, frame=off, openpageaction=StartCurrentRendering, closepageaction=StopCurrentRendering] \setlayer [main] {\placerenderingwindow[mediaclip][mediaclip-\MediaClip]} \stopsetups \startsetups[mediaclip:picture:yes] \setlayer [main] {\externalfigure [\XMLflush{rl:picture}] [background=color, backgroundcolor=\XMLpar{rl:picture}{backgroundcolor}{lightgray}, factor=max, width=\XMLflush{rl:width}, height=\XMLflush{rl:height}]} \stopsetups \startsetups[mediaclip:picture:no] \setlayer [main] {\externalfigure [dummy] [width=\XMLflush{rl:width}, height=\XMLflush{rl:height}]} \stopsetups \startsetups[mediaclip:file:yes] \doglobal\increment\MediaClip \useexternalrendering [mediaclip-\MediaClip] [\XMLflush{rl:mime}] [\getvariable{mediaclip}{url}\XMLflush{rl:file}] [\getvariable{mediaclip:option}{start}] \stopsetups \defineinteractionmenu [navigation] [right] \defineinteractionmenu [control] [bottom] \setupinteractionmenu [navigation,control] [state=start, frame=on, middle=\hskip.5\measure{GapSize}, inbetween=\vskip.5\measure{GapSize}] \setupinteractionmenu [right,bottom] [distance=overlay] \startinteractionmenu [navigation] \rob [HideLayer{textlayer},FirstPage] First Page \\ \rob [HideLayer{textlayer},PreviousPage] Previous Page \\ \rob [HideLayer{textlayer},NextPage] Next Page \\ \rob [HideLayer{textlayer},LastPage] Last Page \\ \rob [HideLayer{textlayer},clips] List Of Clips \\ \rob [ForgetChanges,CloseDocument] Close Document \\ \stopinteractionmenu \startinteractionmenu [control] \rob [StartRendering{mediaclip-\MediaClip}] Start \\ \rob [StopRendering{mediaclip-\MediaClip}] Stop \\ \rob [PauseRendering{mediaclip-\MediaClip}] Pause \\ \rob [ResumeRendering{mediaclip-\MediaClip}] Resume \\ \rob [ToggleLayer{datalayer}] Info \\ \doifXMLdata{rl:text}{\rob [HideLayer{datalayer},ToggleLayer{textlayer}] Text \\} \stopinteractionmenu \startsetups[mediaclip:text] \setlayer [extra] [preset=rightbottom] {\startproperty[textlayer] \framed [align=normal, frame=off, width=\measure{TextWidth}, foregroundcolor=darkgray, background={color,textbutton}, backgroundcolor=lightgray] {\XMLflush{rl:text}} \stopproperty} \stopsetups \setupcolors[textcolor=lightgray] \startsetups [library:start] \starttext \setupinteractionmenu[control][state=stop] \title[clips]{List of Media Clips} \placelist[clips] \page \setupinteractionmenu[control][state=start] \stopsetups \startsetups [library:stop] \stoptext \stopsetups \defineXMLenvironment [rl:resourcelibrary] {\setups[library:start]} {\setups[library:stop]} \doifelsenothing{\inputfilename} {\processXMLfile{mediaclient.xml}} {\processXMLfile{\inputfilename}} context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-nav.mkii0000644000175000017500000001223111754241457024311 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-fnt.mkii0000644000175000017500000000324011754241457024344 0ustar norbertnorbert%D \module %D [ file=syst-fnt, %D version=2006.08.11, %D title=\CONTEXT\ System Macros, %D subtitle=Font Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % formal names cf the tb \& tbt \unprotect \def\fontslantperpoint {\fontdimen\plusone } \def\fontinterwordspace {\fontdimen\plustwo } \def\fontinterwordstretch{\fontdimen\plusthree} \def\fontinterwordshrink {\fontdimen\plusfour } \def\fontexheight {\fontdimen\plusfive } \def\fontemwidth {\fontdimen\plussix } \def\fontextraspace {\fontdimen\plusseven} \def\slantperpoint {\fontdimen\plusone \font} \def\interwordspace {\fontdimen\plustwo \font} \def\interwordstretch {\fontdimen\plusthree\font} \def\interwordshrink {\fontdimen\plusfour \font} \def\exheight {\fontdimen\plusfive \font} \def\emwidth {\fontdimen\plussix \font} \def\extraspace {\fontdimen\plusseven\font} \def\mathsupdisplay {\fontdimen13 } \def\mathsupnormal {\fontdimen14 } \def\mathsupcramped {\fontdimen15 } \def\mathsubnormal {\fontdimen16 } \def\mathsubcombined {\fontdimen17 } \def\mathaxisheight {\fontdimen22 } \def\currentspaceskip {\interwordspace\!!plus\interwordstretch\!!minus\interwordshrink\relax} \def\mathstacktotal {\dimexpr\fontdimen10\scriptfont\plustwo+\fontdimen12\scriptfont\plustwo\relax} \def\mathstackvgap {\plusthree\fontdimen8\scriptfont\plusthree} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-tracers.lua0000644000175000017500000000240012161703335025604 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-tracers'] = { version = 1.001, comment = "companion to m-sql.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local sql = utilities.sql local tracers = { } sql.tracers = tracers sql.setmethod("swiglib") function sql.tracers.gettables(presets) local results, keys = sql.execute { presets = presets, template = "SHOW TABLES FROM `%database%`", variables = { database = presets.database, }, } local key = keys[1] local tables = { } for i=1,#results do local name = results[i][key] local results, keys = sql.execute { presets = presets, template = "SHOW FIELDS FROM `%database%`.`%table%` ", variables = { database = presets.database, table = name }, } if #results > 0 then for i=1,#results do results[i] = table.loweredkeys(results[i]) end tables[name] = results else -- a view end end return tables end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-ins.mkiv0000644000175000017500000001422012130411274024256 0ustar norbertnorbert%D \module %D [ file=core-ins, %D version=2002.04.16, %D title=\CONTEXT\ Insertion Macros, %D subtitle=Insertions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Insertions} %D Insertions are special data collections that are associated to \TEX's internal %D page builder. When multiple footnote classes were introduced, I decided to %D isolate some of the functionality in a module. \registerctxluafile{page-ins}{1.001} \unprotect %D Because we need to deal with inserts at the \LUA\ end as well, %D we provide a proper installer. % Not yet used as we need to adapt some code to this. \installcorenamespace{insertion} \installcorenamespace{insertionnumber} \installcommandhandler \??insertion {insertion} \??insertion \setupinsertion [%c!n=\plusone, %c!distance=\zeropoint, %c!maxheight=\maxdimen, %c!factor=\plusthousand, \c!location=\v!page] \newcount\currentinsertionnumber % This is a count and not a macro ! \newtoks\t_page_inserts_list \let\doprocessinsert\relax %D Maybe some day we will move settings here. \unexpanded\def\setcurrentinsertion#1% {\edef\currentinsertion{#1}% \currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname} \def\namedinsertionnumber#1{\csname\??insertionnumber#1\endcsname} \unexpanded\def\page_inserts_synchronize_registers {\currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname} % for practical reasone we still set these elsewhere but that might chaneg in the future % % \global\count\currentinsertionnumber\numexpr\insertionparameter\c!factor/\insertionparameter\c!n\relax % \global\skip \currentinsertionnumber\insertionparameter\c!distance \relax % \global\dimen\currentinsertionnumber\insertionparameter\c!maxheight\relax} \appendtoks \page_inserts_synchronize_registers \to \everysetupinsertion \unexpanded\def\page_inserts_process#1% beware, this addapts currentinsertion ! {\edef\currentinsertion{#1}% \currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname \doprocessinsert\currentinsertionnumber} % old method \unexpanded\def\processinsertions {\the\t_page_inserts_list} \unexpanded\def\synchronizeinsertions {\let\doprocessinsert\page_inserts_synchronize \processinsertions} \unexpanded\def\page_inserts_synchronize#1% yes or no {\ifvoid#1\else \insert#1{\unvbox#1}% \fi} \unexpanded\def\doifinsertionelse#1% {\ifcsname\??insertionnumber#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \unexpanded\def\startinsertion[#1]% % {\insert\csname\??insertionnumber#1\endcsname\bgroup} % % \unexpanded\def\stopinsertion % {\egroup} % For the moment we use the regular insertion allocator so that users can % still define their own insertions (not that they will play nicely with % all context mechanisms then). We can use the dimensions at the \LUA\ end % so we don't need to pass pass them explicitly. Actually, when we see an % insertion node at that end, we already know the number. \appendtoks \ifx\currentinsertionparent\empty \ifcsname\??insertionnumber\currentinsertion\endcsname % bad news \else \expandafter\newinsert\csname\??insertionnumber\currentinsertion\endcsname \page_inserts_synchronize_registers \ctxcommand{defineinsertion("\currentinsertion",{ number = \number\currentinsertionnumber })}% \t_page_inserts_list\expandafter\expandafter\expandafter {\expandafter\the\expandafter\t_page_inserts_list \expandafter\page_inserts_process\csname\??insertionnumber\currentinsertion\endcsname}% \count\currentinsertionnumber\plusthousand \skip \currentinsertionnumber\zeropoint \dimen\currentinsertionnumber\maxdimen \fi \else \expandafter\let\csname\??insertionnumber\currentinsertion\expandafter\endcsname \csname\??insertionnumber\currentinsertionparent\endcsname \fi \to \everydefineinsertion \appendtoks \ctxcommand{setupinsertion("\currentinsertion",{ location = "\insertionparameter\c!location", })}% \to \everysetupinsertion \unexpanded\def\page_inserts_set_location#1#2% fast one {\ctxcommand{setinsertionlocation("#1","#2")}} %D Auxiliary macros: \def\page_insert_insertion_height#1% {\dimexpr\expandafter\page_insert_insertion_height_indeed\csname\??insertionnumber#1\endcsname\relax} \def\page_insert_insertion_height_indeed#1% {\ifvoid#1\zeropoint\else1\skip#1+\ht#1\fi} %D Obsolete: % \installcorenamespace{insertionbackup} % % \unexpanded\def\installbackupinsertion#1% % {\ifcsname\??insertionbackup\string#1\endcsname \else % \expandafter\newinsert\csname\??insertionbackup\string#1\endcsname % \count\csname\??insertionbackup\string#1\endcsname\zerocount % \skip \csname\??insertionbackup\string#1\endcsname\zeropoint % \dimen\csname\??insertionbackup\string#1\endcsname\maxdimen % \fi} % % \unexpanded\def\saveinsertionbox#1% hm, actually unknown % {\global\setbox\csname\??insertionbackup\string#1\endcsname % \ifdim\ht#1>\zeropoint\box#1\else\emptybox\fi} % % \unexpanded\def\restoreinsertionbox#1% % {\ifvoid\backupinsertion#1\else % if void, we keep the content % \global\setbox#1\box\csname\??insertionbackup\string#1\endcsname % \fi} % % \unexpanded\def\eraseinsertionbackup#1% % {\global\setbox\csname\??insertionbackup\string#1\endcsname\emptybox} % % \unexpanded\def\saveinsertiondata#1% % {\global\skip \csname\??insertionbackup\string#1\endcsname\skip #1% % \global\count\csname\??insertionbackup\string#1\endcsname\count#1% % \global\dimen\csname\??insertionbackup\string#1\endcsname\dimen#1} % % \unexpanded\def\restoreinsertiondata#1% % {\global\skip #1\skip \csname\??insertionbackup\string#1\endcsname % \global\count#1\count\csname\??insertionbackup\string#1\endcsname % \global\dimen#1\dimen\csname\??insertionbackup\string#1\endcsname} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-ini.mkii0000644000175000017500000007165711754241457024334 0ustar norbertnorbert%D \module %D [ file=mult-ini, %D version=2008.10.22, % 1996.06.01, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a stripped down version of \type {mult-ini.tex}, %D which we keep around as \type {mult-kep.tex} for sentimental %D reasons. There you will find some more historic information. \writestatus{loading}{ConTeXt Multilingual Macros / Initialization} \unprotect %D \macros %D [constanten,variabelen,commands] %D {v!,c!,k!,s!,e!,m!,l!,r!,f!,p!,x!,y!} %D %D In the system modules we introduced some prefixed constants, %D variables (both macros) and registers. Apart from a %D tremendous saving in terms of memory and a gain in speed we %D use from now on prefixes when possible for just another %D reason: consistency and multi||linguality. Systematically %D using prefixed macros enables us to implement a %D multi||lingual user interface. Redefining these next set of %D prefixes therefore can have desastrous results. %D %D \startlinecorrection %D \starttable[|c|c|c|] %D \HL %D \NC \bf prefix \NC \bf meaning \NC \bf application \NC\SR %D \HL %D \NC \type{\c!prefix!} \NC c! \NC constant (direct) \NC\FR %D \NC \type{\e!prefix!} \NC e! \NC element \NC\MR %D \NC \type{\f!prefix!} \NC f! \NC file \NC\MR %D \NC \type{\k!prefix!} \NC k! \NC constant (indirect) \NC\MR %D \NC \type{\l!prefix!} \NC l! \NC language \NC\MR %D \NC \type{\m!prefix!} \NC m! \NC message \NC\MR %D \NC \type{\p!prefix!} \NC p! \NC procedure \NC\MR %D \NC \type{\r!prefix!} \NC r! \NC reference \NC\MR %D \NC \type{\s!prefix!} \NC s! \NC system \NC\MR %D \NC \type{\v!prefix!} \NC v! \NC variable \NC\MR %D \HL %D \stoptable %D \stoplinecorrection %D %D In the single||lingual version we used \type{!}, \type{!!}, %D \type{!!!} and \type{!!!!}. \def\c!prefix!{c!} \def\e!prefix!{e!} \def\f!prefix!{f!} \def\k!prefix!{k!} \def\l!prefix!{l!} \def\m!prefix!{m!} \def\p!prefix!{p!} \def\r!prefix!{r!} \def\s!prefix!{s!} \def\v!prefix!{v!} \def\t!prefix!{t!} %D \macros %D [constants,variables,commands] %D {@@,??} %D %D Variables generated by the system can be recognized on their %D prefix \type{@@}. They are composed of a command (class) %D specific tag, which can be recognized on \type{??}, and a %D system constant, which has the prefix \type{c!}. We'll se %D some more of this. \def\??prefix {??} \def\@@prefix {@@} %D Just to be complete we repeat some of the already defined %D system constants here. Maybe their prefix \type{\s!} now %D falls into place. \def\s!next {next} \def\s!default {default} \def\s!dummy {dummy} \def\s!unknown {unknown} \def\s!do {do} \def\s!dodo {dodo} \def\s!complex {complex} \def\s!start {start} \def\s!simple {simple} \def\s!stop {stop} %D The word \type{height} takes 6~token memory cells. The %D control sequence \type{\height} on the other hand uses only %D one. Knowing this, we can improve the performance of \TEX, %D both is terms of speed and memory usage, by using control %D sequences instead of the words written in full. %D %D Where in the \ASCII\ file the second lines takes nine extra %D characters, \TEX\ saves us 13~tokens. %D %D \starttyping %D \hrule width 10pt height 2pt depth 1pt %D \hrule \!!width 10pt \!!height 2pt \!!depth 1pt %D \stoptyping %D %D One condition is that we have defined \type{\!!height}, %D \type{\!!width} and \type{\!!depth} as respectively %D \type{height}, \type{width} and \type{depth}. Using this %D scheme therefore only makes sense when a token sequence is %D used more than once. Savings like this should of course be %D implemented in english, just because \TEX\ is english. \def\!!width {width} \def\!!height {height} \def\!!depth {depth} \def\!!plus {plus} \def\!!minus {minus} \def\!!fill {fill} \def\!!to {to} %D \macros %D {defineinterfaceconstant, %D defineinterfacevariable, %D defineinterfaceelement, %D definesystemvariable, %D definesystemconstant, %D definemessageconstant, %D definereferenceconstant, %D definefileconstant} %D %D The first part of this module is dedicated to dealing with %D multi||lingual constants and variables. When \CONTEXT\ grew %D bigger and bigger in terms of bytes and used string space, %D we switched to predefined constants. At the cost of more %D hash table entries, the macros not only becase more compact, %D they became much faster too. Maybe an even bigger advantage %D was that mispelling could no longer lead to problems. Even a %D multi||lingual interface became possible. %D %D Constants --- we'll introduce the concept of variables later %D on --- are preceded by a type specific prefix, followed by a %D \type{!}. To force consistency, we provide a few commands %D for defining such constants. %D %D \starttyping %D \defineinterfaceconstant {name} {meaning} %D \defineinterfacevariable {name} {meaning} %D \defineinterfaceelement {name} {meaning} %D \stoptyping %D %D Which is the same as: %D %D \starttyping %D \def\c!name{meaning} %D \def\v!name{meaning} %D \def\e!name{meaning} %D \stoptyping \def\defineinterfaceconstant #1#2{\setvalue{\c!prefix!#1}{#2}} \def\defineinterfacevariable #1#2{\setvalue{\v!prefix!#1}{#2}} \def\defineinterfaceelement #1#2{\setvalue{\e!prefix!#1}{#2}} %D Next come some interface independant constants: %D %D \starttyping %D \definereferenceconstant {name} {meaning} %D \definefileconstant {name} {meaning} %D \stoptyping \def\definereferenceconstant #1#2{\setvalue{\r!prefix!#1}{#2}} \def\definefileconstant #1#2{\setvalue{\f!prefix!#1}{#2}} %D A new one: \def\definetypescriptconstant#1#2{\setvalue{\t!prefix!#1}{#2}} %D And finaly we have the one argument, space saving constants %D %D \starttyping %D \definesystemconstant {name} %D \definemessageconstant {name} %D \stoptyping \def\definesystemconstant #1{\setvalue{\s!prefix!#1}{#1}} \def\definemessageconstant #1{\setvalue{\m!prefix!#1}{#1}} %D In a parameter driven system, some parameters are shared %D by more system components. In \CONTEXT\ we can distinguish %D parameters by a unique prefix. Such a prefix is defined %D with: %D %D \starttyping %D \definesystemvariable {name} %D \stoptyping \def\definesystemvariable#1{\setevalue{\??prefix#1}{\@@prefix#1}} \definesystemvariable{ms} %D \macros %D {selectinterface, %D defaultinterface, currentinterface, currentresponses} %D %D With \type{\selectinterface} we specify the language we are %D going to use. The system asks for the language wanted, and %D defaults to \type{\currentinterface} when we just give %D \type{enter}. By default the message system uses the %D current interface language, but \type{\currentresponses} %D can specify another language too. %D %D Because we want to generate formats directly too, we do %D not ask for interface specifications when these are already %D defined (like in cont-nl.tex and alike). \ifx\defaultinterface\undefined \def\defaultinterface{english} \def\selectinterface {\def\docommand##1##2% {\bgroup \endlinechar\minusone \global\read16 to ##1 \egroup \doifnothing\currentinterface{\let##1=##2}% \doifundefined{\s!prefix!##1}{\let##1=##2}}% \docommand\currentinterface\defaultinterface \writestatus{interface}{defining \currentinterface\space interface}% \writeline \docommand\currentresponses\currentinterface \writestatus{interface}{using \currentresponses\space messages}% \writeline \let\selectinterface\relax} \else \def\selectinterface {\writestatus{interface}{defining \currentinterface\space interface}% \writeline \writestatus{interface}{using \currentresponses\space messages}% \writeline \let\selectinterface\relax} \fi \ifx\currentinterface\undefined \let\currentinterface=\defaultinterface \fi \ifx\currentresponses\undefined \let\currentresponses=\defaultinterface \fi %D \macros %D {startinterface} %D %D Sometimes we want to define things only for specific %D interface languages. This can be done by means of the %D selector: %D %D \starttyping %D \startinterface language %D %D language specific definitions & commands %D %D \stopinterface %D \stoptyping \def\startinterface #1 {\doifnot{#1}{all}{\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}} \let\stopinterface\relax %D \macros %D {startmessages, %D getmessage, %D showmessage, %D makemessage} %D %D A package as large as \CONTEXT\ can hardly function without %D a decent message mechanism. Due to its multi||lingual %D interface, the message subsystem has to be multi||lingual %D too. A major drawback of this feature is that we have to %D code messages. As a result, the source becomes less self %D documented. On the other hand, consistency will improve. %D %D Because the overhead in terms of entries in the (already %D exhausted) hash table has to be minimal, messages are packed %D in libraries. We can extract a message from such a library %D in three ways: %D %D \starttyping %D \getmessage {library} {tag} %D \showmessage {library} {tag} {data} %D \makemessage {library} {tag} {data} %D \stoptyping %D %D The first command gets the message \type{tag} from the %D \type{library} specified. The other commands take an extra %D argument: a list of items to be inserted in the message %D text. While \type{\showmessage} shows the message at the %D terminal, the other commands generate the message as text. %D Before we explain the \type{data} argument, we give an %D example of a library. %D %D \starttyping %D \startmessages english library: alfa %D title: something %D 1: first message %D 2: second (--) message -- %D \stopmessages %D \stoptyping %D %D The first message is a simple one and can be shown with: %D %D \starttyping %D \showmessage {alfa} {1} {} %D \stoptyping %D %D The second message on the other hand needs some extra data: %D %D \starttyping %D \showmessage {alfa} {2} {and last,to you} %D \stoptyping %D %D This message is shown as: %D %D \starttyping %D something : second (and last) message to you %D \stoptyping %D %D As we can see, the title entry is shown with the message. %D The data fields are comma separated and are specified in the %D message text by \type{--}. %D %D It is not required to define all messages in a library at %D once. We can add messages to a library in the following way: %D %D \starttyping %D \startmessages english library: alfa %D 10: tenth message %D \stopmessages %D \stoptyping %D %D Because such definitions can take place in different %D modules, the system gives a warning when a tag occurs more %D than once. The first occurrence takes preference over later %D ones, so we had better use a save offset, as shown in the %D example. As we can see, the title field is specified only %D the first time! %D %D Because we want to check for duplicate tags, the macros %D are a bit more complicated than neccessary. The \NEWLINE\ %D token is used as message separator. %D %D For internal purposes one can use \type {\setmessagetext}, %D which puts the message text asked for in \type %D {\currentmessagetext}. \def\findinterfacemessage#1#2% {\let#2\empty \def\dofindinterfacemessage##1 #1: ##2\relax##3\end{\def#2{##2}}% \edef\!!stringa{\getvalue{\??ms\currentmessagelibrary} #1: \relax}% \expandafter\dofindinterfacemessage\!!stringa\end} \def\composemessagetext#1--#2--#3--#4--#5--#6--#7--#8--#9\\% {\def\docomposemessagetext##1,##2,##3,##4,##5,##6,##7,##8,##9\\% {\edef\currentmessagetext{#1##1#2##2#3##3#4##4#5##5#6##6#7##7#8##8}}% \docomposemessagetext} \def\setmessagetext#1#2% {\def\currentmessagelibrary{#1}% \findinterfacemessage{#2}\currentmessagetext} \unexpanded\def\getmessage#1#2% {\def\currentmessagelibrary{#1}% \findinterfacemessage{#2}\currentmessagetext \currentmessagetext} \unexpanded\def\makemessage#1#2#3% {\def\currentmessagelibrary{#1}% \findinterfacemessage{#2}\currentmessagetext \@EA\composemessagetext\currentmessagetext----------------\\#3,,,,,,,,\\% \currentmessagetext} \def\showmessage#1#2#3% {\def\currentmessagelibrary{#1}% \findinterfacemessage{#2}\currentmessagetext \findinterfacemessage{title}\currentmessagetitle \ifx\currentmessagetext\empty \def\currentmessagetext{}% \else \@EA\composemessagetext\currentmessagetext----------------\\#3,,,,,,,,\\% \fi \@EA\writestatus\@EA{\currentmessagetitle}{\currentmessagetext}} \def\doaddinterfacemessage#1#2% {\findinterfacemessage{#1}\currentmessagetext \doifelsenothing\currentmessagetext {\setxvalue{\??ms\currentmessagelibrary}% {\getvalue{\??ms\currentmessagelibrary} #1: #2\relax}} {\debuggerinfotrue % we consider this an important error \debuggerinfo {message} {duplicate tag #1 in library \currentmessagelibrary\space of interface \currentresponses}}% \futurelet\next\getinterfacemessage} \bgroup \obeylines \gdef\addinterfacemessage#1: #2 {\doaddinterfacemessage{#1}{#2}}% \egroup \def\getinterfacemessage {\ifx\next\stopmessages \egroup\expandafter\gobbleoneargument \else \expandafter\addinterfacemessage \fi} \let\stopmessages\undefined % for dep checker \def\startmessages #1 library: #2 {\definemessageconstant{#2}% handy for modules \bgroup \obeylines \doifinsetelse{#1}{\currentresponses,all} {\def\next {\def\currentmessagelibrary{#2}% \doifundefined{\??ms\currentmessagelibrary} {\letgvalueempty{\??ms\currentmessagelibrary}}% \futurelet\next\getinterfacemessage}} {\long\def\next##1\stopmessages{\egroup}}% \next} %D Here, the messages are stored in a way that saves hash %D entries, i.e. they are packed in one macro per library. %D This was important in the days when we used \TEX's with %D hash tables of about 10.000. The next, less efficient way %D of storing the message, makes \CONTEXT\ run upto 5\% %D faster by storing each message in a macro. In July 2000, %D this costs some 185 additional hash entries, and since %D we run large \TEX's, let do it! \def\startmessages #1 library: #2 {\definemessageconstant{#2}% handy for modules \bgroup \obeylines \ifcsname\m!prefix!#2\endcsname\else\setgvalue{\m!prefix!#2}{#2}\fi \doifinsetelse{#1}{\currentresponses,all} {\def\next {\def\currentmessagelibrary{#2}% \futurelet\next\getinterfacemessage}} {\long\def\next##1\stopmessages{\egroup}}% \next} \def\findinterfacemessage#1#2% {\edef#2{\getvalue{\??ms\currentmessagelibrary#1}}} \def\doaddinterfacemessage#1#2% {\doifdefined{\??ms\currentmessagelibrary#1} {\debuggerinfotrue % we consider this an important error \debuggerinfo {message} {duplicate tag #1 in library \currentmessagelibrary\space of interface \currentresponses}}% \setxvalue{\??ms\currentmessagelibrary#1}{#2}% \futurelet\next\getinterfacemessage} \def\setinterfacemessage#1#2#3% {\ifcsname\m!prefix!#1\endcsname\else\setgvalue{\m!prefix!#1}{#1}\fi \expandafter\def\csname\??ms#1#2\endcsname{#3}} %D \macros %D {ifshowwarnings, ifshowmessages} %D %D Sometimes displaying message can slow down processing %D considerably. We therefore introduce warnings. Users can %D turn of warnings and messages by saying: %D %D \starttyping %D \showwarningstrue %D \showmessagestrue %D \stoptyping %D %D Turning off messages also turns off warnings, which is %D quote logical because they are less important. % not yet mkiv \newif\ifshowwarnings \showwarningstrue \newif\ifshowmessages \showmessagestrue \let\normalshowmessage\showmessage \def\showwarning {\ifshowwarnings \expandafter\showmessage \else \expandafter\gobblethreearguments \fi} \def\showmessage {\ifshowmessages \expandafter\normalshowmessage \else \expandafter\gobblethreearguments \fi} %D \macros %D {dosetvalue,dosetevalue,dosetgvalue,dosetxvalue,docopyvalue,doresetvalue} % dogetvalue %D %D We already defined these auxiliary macros in the system %D modules. Starting with this module however, we have to take %D multi||linguality a bit more serious. \def\doresetvalue#1#2% {\dosetvalue{#1}{#2}{}} \def\doignorevalue#1#2#3% {\dosetvalue{#1}{#2}{}} \def\dosetvalue#1#2% {\let\c!internal!\c!internal!n \ifcsname\k!prefix!#2\endcsname \let\c!internal!\c!internal!y \@EA\def\csname#1\csname\k!prefix!#2\endcsname%\endcsname \else \let\c!internal!\c!internal!y \@EA\def\csname#1#2%\endcsname \fi\endcsname} \def\dosetevalue#1#2% {\let\c!internal!\c!internal!n \ifcsname\k!prefix!#2\endcsname \let\c!internal!\c!internal!y \@EA\edef\csname#1\csname\k!prefix!#2\endcsname%\endcsname \else \let\c!internal!\c!internal!y \@EA\edef\csname#1#2%\endcsname \fi\endcsname} \def\dosetgvalue#1#2% {\let\c!internal!\c!internal!n \ifcsname\k!prefix!#2\endcsname \let\c!internal!\c!internal!y \@EA\gdef\csname#1\csname\k!prefix!#2\endcsname%\endcsname \else \let\c!internal!\c!internal!y \@EA\gdef\csname#1#2%\endcsname \fi\endcsname} \def\dosetxvalue#1#2% {\let\c!internal!\c!internal!n \ifcsname\k!prefix!#2\endcsname \let\c!internal!\c!internal!y \@EA\xdef\csname#1\csname\k!prefix!#2\endcsname%\endcsname \else \let\c!internal!\c!internal!y \@EA\xdef\csname#1#2%\endcsname \fi\endcsname} \def\docopyvalue#1#2#3% real tricky expansion, quite unreadable {\let\c!internal!\c!internal!n \ifcsname\k!prefix!#3\endcsname \let\c!internal!\c!internal!y \@EA\def\csname#1\csname\k!prefix!#3\endcsname \@EA\endcsname\@EA{\csname#2\csname\k!prefix!#3\endcsname\endcsname}% \else \let\c!internal!\c!internal!y \@EA\def\csname#1#3\@EA\endcsname\@EA{\csname#2#3\endcsname}% \fi} %D We can now redefine some messages that will be %D introduced in the multi||lingual system module. \def\showassignerror #1#2{\showmessage\m!check1{#1,#2}\waitonfatalerror} \def\showargumenterror#1#2{\showmessage\m!check2{#1,#2}\waitonfatalerror} \def\showdefinederror #1#2{\showmessage\m!check3{#1,#2}\waitonfatalerror} %D \CONTEXT\ is a parameter driven package. This means that %D users instruct the system by means of variables, values and %D keywords. These instructions take the form: %D %D \starttyping %D \setupsomething[some variable=some value, another one=a keyword] %D \stoptyping %D %D or by keyword only: %D %D \starttyping %D \dosomething[this way,that way,no way] %D \stoptyping %D %D Because the same variables can occur in more than one setup %D command, we have to be able to distinguish them. This is %D achieved by assigning them a unique prefix. %D %D Imagine a setup command for boxed text, that enables us to %D specify the height and width of the box. Behide the scenes %D the command %D %D \starttyping %D \setupbox [width=12cm, height=3cm] %D \stoptyping %D %D results in something like %D %D \starttyping %D \ {12cm} %D \ {3cm} %D \stoptyping %D %D while a similar command for specifying the page dimensions %D of an \cap{A4} page results in: %D %D \starttyping %D \ {21.0cm} %D \ {27.9cm} %D \stoptyping %D %D The prefixes \type{} and \type{} are hidden from %D users and can therefore be language independant. Variables %D on the other hand, differ for each language: %D %D \starttyping %D \ {} %D \ {} %D \ {} %D \stoptyping %D %D In this example we can see that the assigned values or %D keywords are language dependant too. This will be a %D complication when defining multi||lingual setup files. %D %D A third phenomena is that variables and values can have a %D similar meaning. %D %D \starttyping %D \ {} %D \ {12cm} %D \stoptyping %D %D A (minor) complication is that where in english we use %D \type{}, in dutch we find both \type{} and %D \type{}. This means that when we use some sort of %D translation table, we have to distinguish between the %D variables at the left side and the fixed values at the %D right. %D %D The same goes for commands that are composed of different %D user supplied and/or language specific elements. In english %D we can use: %D %D \starttyping %D \
%D \ %D \stoptyping %D %D But in dutch we have the following: %D %D \starttyping %D \ %D \ %D \stoptyping %D %D These subtle differences automatically lead to a solution %D where variables, values, elements and other components have %D a similar logical name (used in macro's) but a different %D meaning (supplied by the user). %D %D Our solution is one in which the whole system is programmed %D in terms of identifiers with language specific meanings. In %D such an implementation, each fixed variable is available as: %D %D \starttyping %D \ %D \stoptyping %D %D This means that for instance: %D %D \starttyping %D \setupbox[width=12cm] %D \stoptyping %D %D expands to something like: %D %D \starttyping %D \def\boxwidth{12cm} %D \stoptyping %D %D because we don't want to recode the source, a setup command %D in another language has to expand to this variable, so: %D %D \starttyping %D \setupblock[width=12cm] %D \stoptyping %D %D has to result in the definition of \type{\boxwidth} too. %D This method enables us to build compact, fast and readable %D code. %D %D An alternative method, which we considered using, uses a %D more indirect way. In this case, both calls generate a %D different variable: %D %D \starttyping %D \def\boxwidth {12cm} %D \def\boxbreedte {12cm} %D \stoptyping %D %D And because we don't want to recode those megabytes of %D already developed code, this variable has to be called with %D something like: %D %D \starttyping %D \valueof\box\width %D \stoptyping %D %D where \type{\valueof} takes care of the translation of %D \type{width} or \type{breedte} to \type{width} and %D combining this with \type{box} to \type{\boxwidth}. %D %D One advantage of this other scheme is that, within certain %D limits, we can implement an interface that can be switched %D to another language at will, while the current approach %D fixes the interface at startup. There are, by the way, %D other reasons too for not choosing this scheme. Switching %D user generated commands is for instance impossible and a %D dual interface would therefore give a strange mix of %D languages. %D %D Now let's work out the first scheme. Although the left hand %D of the assignment is a variable from the users point of %D view, it is a constant in terms of the system. Both %D \type{width} and \type{breedte} expand to \type{width} %D because in the source we only encounter \type{width}. Such %D system constants are presented as %D %D \starttyping %D \c!width %D \stoptyping %D %D This constant is always equivalent to \type{width}. As we %D can see, we use \type{c!} to mark this one as constant. Its %D dutch counterpart is: %D %D \starttyping %D breedte %D \stoptyping %D %D When we interpret a setup command each variable is %D translated to it's \type{c!} counterpart. This means that %D \type{breedte} and \type{width} expand to \type{breedte} %D and \type{\c!width} which both expand to \type{width}. That %D way user variables become system constants. %D %D The interpretation is done by means of a general setup %D command \type{\getparameters} that we introduced in the %D system module. Let us define some simple setup command: %D %D \starttyping %D \def\setupbox[#1]% %D {\getparameters[\??bx][#1]} %D \stoptyping %D %D This command can be used as: %D %D \starttyping %D \setupbox [width=3cm, height=1cm] %D \stoptyping %D %D Afterwards we have two variables \type{\@@bxwidth} and %D \type{\@@bxheight} which have the values \type{3cm} and %D \type{1cm} assigned. These variables are a combinatiom of %D the setup prefix \type{\??bx}, which expands to \type{@@bx} %D and the translated user supplied variables \type{width} and %D \type{height} or \type{breedte} and \type{hoogte}, %D depending on the actual language. In dutch we just say: %D %D \starttyping %D \setupblock [width=3cm, height=1cm] %D \stoptyping %D %D and get ourselves \type{\@@bxwidth} and \type{\@@bxheight} %D too. In the source of \CONTEXT, we can recognize constants %D and variables on their leading \type{c!}, \type{v!} etc., %D prefixes on \type{??} and composed variables on \type{@@}. %D %D We already saw that user supplied keywords need some %D special treatment too. This time we don't translate the %D keyword, but instead use in the source a variable which %D meaning depends on the interface language. %D %D \starttyping %D \v!left %D \stoptyping %D %D Which can be used in macro's like: %D %D \starttyping %D \processaction %D [\@@bxlocation] %D [ \v!left=>\dosomethingontheleft, %D \v!middle=>\dosomthinginthemiddle, %D \v!right=>\dosomethingontheright] %D \stoptyping %D %D Because variables like \type{\@@bxlocation} can have a lot %D of meanings, including tricky expandable tokens, we cannot %D translate this meaning when we compare. This means that %D \type{\@@bxlocation} can be \type{left} of \type{links} of %D whatever meaning suits the language. But because %D \type{\v!left} also has a meaning that suits the language, %D we are able to compare. %D %D Although we know it sounds confusing we want to state two %D important characteristics of the interface as described: %D %D \startnarrower \em %D user variables become system constants %D \stopnarrower %D %D and %D %D \startnarrower \em %D user constants (keywords) become system variables %D \stopnarrower %D %D Anno 2003 I've forgotten why the \type {\c!internal} is %D still in there; it's probably a left over from an experiment. \let\c!internal!y \string \def\c!internal!n {-} \let\c!internal! \c!internal!y \def\setinterfaceconstant#1#2% {\setvalue{\c!prefix!#1}{\c!internal!#1}% \setvalue{\k!prefix!#2}{#1}} \def\setinterfacevariable#1#2% {\setvalue{\v!prefix!#1}{#2}} %D \macros %D {defineinterfaceconstant} %D %D Next we redefine a previously defined macro to take care of %D interface translation too. It's a bit redundant, because %D in these situations we could use the c||version, but for %D documentation purposes the x||alternative comes in handy. \def\defineinterfaceconstant#1#2% {\setvalue{\c!prefix!#1}{#2}} %D \macros %D {startelements} %D %D Due to the object oriented nature of \CONTEXT, we also need %D to define the elements that are used to build commands. %D %D Such elements sometimes are the same in diferent %D languages, but mostly they differ. Things can get even %D confusing when we look at for instance the setup commands. %D In english we say \type{\setup}, but in dutch we %D have: \type{\stelin}. Such split elements are no %D problem, because we just define two elements. When no second %D part is needed, we use a \type{-}: \def\setinterfaceelement#1#2% {\ifcsname\e!prefix!#1\endcsname \doifnotvalue{\e!prefix!#1}{#2}{\setvalue{\e!prefix!#1}{#2}}% \else \setvalue{\e!prefix!#1}{#2}% \fi} \def\setinterfacecommand#1#2% {\doifnot{#1}{#2}{\@EA\def\csname#2\@EA\endcsname\@EA{\csname#1\endcsname}}}% or just \let ? %D We just ignore these: \def\startvariables{\gobbleuntil\stopvariables} \def\startconstants{\gobbleuntil\stopconstants} \def\startelements {\gobbleuntil\stopelements} \def\startcommands {\gobbleuntil\stopcommands} %D \macros %D {interfaced} %D %D The setup commands translate the constants automatically. %D When we want to translate 'by hand' we can use the simple %D but effective command: %D %D \starttyping %D \interfaced {something} %D \stoptyping %D %D Giving \type{\interfaced{breedte}} results in \type{width} %D or, when not defined, in \type{breedte} itself. This %D macro is used in the font switching mechanism. \def\interfaced#1% {\ifcsname\k!prefix!#1\endcsname \csname\k!prefix!#1\endcsname \else #1% \fi} %D So much for the basic multi||lingual interface commands. The %D macro's can be enhanced with more testing facilities, but %D for the moment they suffice. %D Out of convenience we define the banners here. \def\contextbanner {ConTeXt \space ver: \contextversion \space \contextmark \space \space fmt: \formatversion \space \space int: \currentinterface/\currentresponses} \def\showcontextbanner {\writeline\writebanner{\contextbanner}\writeline} \edef\formatversion {\the\normalyear.\the\normalmonth.\the\normalday} \ifx\contextversion\undefined \def\contextversion {unknown} \def\contextversionnumber{0} \else \def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi#2\ifnum#3<10 0\fi#3 #4:#5} \edef\contextversionnumber{\expandafter\contextversionnumber\contextversion\relax\space\contextmark} \fi \ifx\undefined\everydump \newtoks\everydump \def\dump{\the\everydump\normaldump} \fi \appendtoks \showcontextbanner \to \everydump \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-goodies.lua0000644000175000017500000000752312161703335025424 0ustar norbertnorbertif not modules then modules = { } end modules['s-fonts-goodies'] = { version = 1.001, comment = "companion to s-fonts-goodies.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.goodies = moduledata.fonts.goodies or { } local NC, NR, HL = context.NC, context.NR, context.HL local function initialized(specification) specification = interfaces.checkedspecification(specification) local name = specification.name if name then local goodies = fonts.goodies.load(name) if goodies then return specification, goodies end end end function moduledata.fonts.goodies.showstylistics(specification) local specification, goodies = initialized(specification) if goodies then local stylistics = goodies.stylistics if stylistics then context.starttabulate { "|Tl|Tpl|" } HL() NC() context.bold("feature") NC() context.bold("meaning") NC() NR() HL() for feature, meaning in table.sortedpairs(stylistics) do NC() context(feature) NC() context(string.lower(meaning)) NC() NR() end HL() context.stoptabulate() end end end function moduledata.fonts.goodies.showfeaturesets(specification) local specification, goodies = initialized(specification) if goodies then local featuresets = goodies.featuresets if featuresets then context.starttabulate { "|Tl|Tpl|" } HL() NC() context.bold("featureset") NC() context.bold("definitions") NC() NR() HL() for featureset, definitions in table.sortedpairs(featuresets) do NC() context.type(featureset) NC() for k, v in table.sortedpairs(definitions) do context("%s=%S",k,v) context.quad() end NC() NR() end HL() context.stoptabulate() end end end function moduledata.fonts.goodies.showcolorschemes(specification) local specification, goodies = initialized(specification) if goodies then local colorschemes = goodies.colorschemes if colorschemes then context.starttabulate { "|Tl|Tpl|" } HL() NC() context.bold("colorscheme") NC() context.bold("numbers") NC() NR() HL() for colorscheme, numbers in table.sortedpairs(colorschemes) do NC() context.type(colorscheme) NC() for i=1,#numbers do context(i) context.quad() end NC() NR() end HL() context.stoptabulate() end end end function moduledata.fonts.goodies.showfiles(specification) local specification, goodies = initialized(specification) if goodies then local files = goodies.files if files and files.list then for filename, specification in table.sortedpairs(files.list) do context.start() context.dontleavehmode() context.definedfont{ filename .. "*default" } context("%s-%s-%s-%s-%s", specification.name or files.name, specification.weight or "normal", specification.style or "normal", specification.width or "normal", specification.variant or "normal") context.par() context.stop() end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-fig.mkiv0000644000175000017500000000353012130411274024246 0ustar norbertnorbert%D \module %D [ file=meta-fig, %D version=2000.09.07, %D title=\METAPOST\ Graphics, %D subtitle=Stand Alone Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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}{MetaPost Graphics / Stand Alone Graphics} \unprotect %D This module implements a method for defining %D stand||alone||graphics, that is, each graphic gets is own %D page. Because graphics are wrapped in a \type {\framed}, %D you can add overlays to the graphic directly, and since the %D whole \CONTEXT\ machinery is available, you can also add %D page backgrounds. %D %D \starttyping %D \setupMPpage %D [offset=1pt, %D background=color, %D backgroundcolor=green] %D %D \startMPpage %D fill fullcircle scaled 10cm withcolor red ; %D \stopMPpage %D %D \startMPpage %D fill fullsquare rotated 45 scaled 8cm withcolor blue ; %D \stopMPpage %D \stoptyping %D %D Although this is hardly of any use, you can mix these %D definitions with the text flow, since all settings are %D kept local. The page is clipped to the image size. \definefittingpage [MPpage] [\c!align=, \c!command=\meta_process_graphic_instance{\fittingpageparameter\c!instance}, \c!instance=] %D \macros %D {MPfigure} %D %D A bit out of place, here but nevertheless: \unexpanded\def\MPfigure#1#2% test for dup figure, can be replaced by a textext {\bgroup \getfiguredimensionsonly[#1]% [\c!object=\v!no] already set \startMPcode externalfigure "#1" xscaled \the\dimexpr\figurewidth \relax\space % must be points yscaled \the\dimexpr\figureheight\relax\space % must be points #2 ; \stopMPcode \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-os.lua0000644000175000017500000003330112134352503023244 0ustar norbertnorbertif not modules then modules = { } end modules ['l-os'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This file deals with some operating system issues. Please don't bother me -- with the pros and cons of operating systems as they all have their flaws -- and benefits. Bashing one of them won't help solving problems and fixing -- bugs faster and is a waste of time and energy. -- -- path separators: / or \ ... we can use / everywhere -- suffixes : dll so exe ... no big deal -- quotes : we can use "" in most cases -- expansion : unless "" are used * might give side effects -- piping/threads : somewhat different for each os -- locations : specific user file locations and settings can change over time -- -- os.type : windows | unix (new, we already guessed os.platform) -- os.name : windows | msdos | linux | macosx | solaris | .. | generic (new) -- os.platform : extended os.name with architecture -- os.sleep() => socket.sleep() -- math.randomseed(tonumber(string.sub(string.reverse(tostring(math.floor(socket.gettime()*10000))),1,6))) -- maybe build io.flush in os.execute local os = os local date, time = os.date, os.time local find, format, gsub, upper, gmatch = string.find, string.format, string.gsub, string.upper, string.gmatch local concat = table.concat local random, ceil, randomseed = math.random, math.ceil, math.randomseed local rawget, rawset, type, getmetatable, setmetatable, tonumber, tostring = rawget, rawset, type, getmetatable, setmetatable, tonumber, tostring -- The following code permits traversing the environment table, at least -- in luatex. Internally all environment names are uppercase. -- The randomseed in Lua is not that random, although this depends on the operating system as well -- as the binary (Luatex is normally okay). But to be sure we set the seed anyway. math.initialseed = tonumber(string.sub(string.reverse(tostring(ceil(socket and socket.gettime()*10000 or time()))),1,6)) randomseed(math.initialseed) if not os.__getenv__ then os.__getenv__ = os.getenv os.__setenv__ = os.setenv if os.env then local osgetenv = os.getenv local ossetenv = os.setenv local osenv = os.env local _ = osenv.PATH -- initialize the table function os.setenv(k,v) if v == nil then v = "" end local K = upper(k) osenv[K] = v if type(v) == "table" then v = concat(v,";") -- path end ossetenv(K,v) end function os.getenv(k) local K = upper(k) local v = osenv[K] or osenv[k] or osgetenv(K) or osgetenv(k) if v == "" then return nil else return v end end else local ossetenv = os.setenv local osgetenv = os.getenv local osenv = { } function os.setenv(k,v) if v == nil then v = "" end local K = upper(k) osenv[K] = v end function os.getenv(k) local K = upper(k) local v = osenv[K] or osgetenv(K) or osgetenv(k) if v == "" then return nil else return v end end local function __index(t,k) return os.getenv(k) end local function __newindex(t,k,v) os.setenv(k,v) end os.env = { } setmetatable(os.env, { __index = __index, __newindex = __newindex } ) end end -- end of environment hack local execute, spawn, exec, iopopen, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.popen, io.flush function os.execute(...) ioflush() return execute(...) end function os.spawn (...) ioflush() return spawn (...) end function os.exec (...) ioflush() return exec (...) end function io.popen (...) ioflush() return iopopen(...) end function os.resultof(command) local handle = io.popen(command,"r") return handle and handle:read("*all") or "" end if not io.fileseparator then if find(os.getenv("PATH"),";") then io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin" else io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix" end end os.type = os.type or (io.pathseparator == ";" and "windows") or "unix" os.name = os.name or (os.type == "windows" and "mswin" ) or "linux" if os.type == "windows" then os.libsuffix, os.binsuffix, os.binsuffixes = 'dll', 'exe', { 'exe', 'cmd', 'bat' } else os.libsuffix, os.binsuffix, os.binsuffixes = 'so', '', { '' } end local launchers = { windows = "start %s", macosx = "open %s", unix = "$BROWSER %s &> /dev/null &", } function os.launch(str) os.execute(format(launchers[os.name] or launchers.unix,str)) end if not os.times then -- ? -- utime = user time -- stime = system time -- cutime = children user time -- cstime = children system time function os.times() return { utime = os.gettimeofday(), -- user stime = 0, -- system cutime = 0, -- children user cstime = 0, -- children system } end end os.gettimeofday = os.gettimeofday or os.clock local startuptime = os.gettimeofday() function os.runtime() return os.gettimeofday() - startuptime end --~ print(os.gettimeofday()-os.time()) --~ os.sleep(1.234) --~ print (">>",os.runtime()) --~ print(os.date("%H:%M:%S",os.gettimeofday())) --~ print(os.date("%H:%M:%S",os.time())) -- no need for function anymore as we have more clever code and helpers now -- this metatable trickery might as well disappear os.resolvers = os.resolvers or { } -- will become private local resolvers = os.resolvers setmetatable(os, { __index = function(t,k) local r = resolvers[k] return r and r(t,k) or nil -- no memoize end }) -- we can use HOSTTYPE on some platforms local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or "" local function guess() local architecture = os.resultof("uname -m") or "" if architecture ~= "" then return architecture end architecture = os.getenv("HOSTTYPE") or "" if architecture ~= "" then return architecture end return os.resultof("echo $HOSTTYPE") or "" end if platform ~= "" then os.platform = platform elseif os.type == "windows" then -- we could set the variable directly, no function needed here function os.resolvers.platform(t,k) local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or "" if find(architecture,"AMD64") then platform = "mswin-64" else platform = "mswin" end os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end elseif name == "linux" then function os.resolvers.platform(t,k) -- we sometimes have HOSTTYPE set so let's check that first local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform = "linux-64" elseif find(architecture,"ppc") then platform = "linux-ppc" else platform = "linux" end os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end elseif name == "macosx" then --[[ Identifying the architecture of OSX is quite a mess and this is the best we can come up with. For some reason $HOSTTYPE is a kind of pseudo environment variable, not known to the current environment. And yes, uname cannot be trusted either, so there is a change that you end up with a 32 bit run on a 64 bit system. Also, some proper 64 bit intel macs are too cheap (low-end) and therefore not permitted to run the 64 bit kernel. ]]-- function os.resolvers.platform(t,k) -- local platform, architecture = "", os.getenv("HOSTTYPE") or "" -- if architecture == "" then -- architecture = os.resultof("echo $HOSTTYPE") or "" -- end local platform, architecture = "", os.resultof("echo $HOSTTYPE") or "" if architecture == "" then -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n") platform = "osx-intel" elseif find(architecture,"i386") then platform = "osx-intel" elseif find(architecture,"x86_64") then platform = "osx-64" else platform = "osx-ppc" end os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end elseif name == "sunos" then function os.resolvers.platform(t,k) local platform, architecture = "", os.resultof("uname -m") or "" if find(architecture,"sparc") then platform = "solaris-sparc" else -- if architecture == 'i86pc' platform = "solaris-intel" end os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end elseif name == "freebsd" then function os.resolvers.platform(t,k) local platform, architecture = "", os.resultof("uname -m") or "" if find(architecture,"amd64") then platform = "freebsd-amd64" else platform = "freebsd" end os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end elseif name == "kfreebsd" then function os.resolvers.platform(t,k) -- we sometimes have HOSTTYPE set so let's check that first local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or "" if find(architecture,"x86_64") then platform = "kfreebsd-amd64" else platform = "kfreebsd-i386" end os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end else -- platform = "linux" -- os.setenv("MTX_PLATFORM",platform) -- os.platform = platform function os.resolvers.platform(t,k) local platform = "linux" os.setenv("MTX_PLATFORM",platform) os.platform = platform return platform end end -- beware, we set the randomseed -- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the -- version number as well as two reserved bits. All other bits are set using a random or pseudorandom -- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal -- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479. -- -- as we don't call this function too often there is not so much risk on repetition local t = { 8, 9, "a", "b" } function os.uuid() return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x", random(0xFFFF),random(0xFFFF), random(0x0FFF), t[ceil(random(4))] or 8,random(0x0FFF), random(0xFFFF), random(0xFFFF),random(0xFFFF),random(0xFFFF) ) end local d function os.timezone(delta) d = d or tonumber(tonumber(date("%H")-date("!%H"))) if delta then if d > 0 then return format("+%02i:00",d) else return format("-%02i:00",-d) end else return 1 end end local timeformat = format("%%s%s",os.timezone(true)) local dateformat = "!%Y-%m-%d %H:%M:%S" function os.fulltime(t,default) t = tonumber(t) or 0 if t > 0 then -- valid time elseif default then return default else t = nil end return format(timeformat,date(dateformat,t)) end local dateformat = "%Y-%m-%d %H:%M:%S" function os.localtime(t,default) t = tonumber(t) or 0 if t > 0 then -- valid time elseif default then return default else t = nil end return date(dateformat,t) end function os.converttime(t,default) local t = tonumber(t) if t and t > 0 then return date(dateformat,t) else return default or "-" end end local memory = { } local function which(filename) local fullname = memory[filename] if fullname == nil then local suffix = file.suffix(filename) local suffixes = suffix == "" and os.binsuffixes or { suffix } for directory in gmatch(os.getenv("PATH"),"[^" .. io.pathseparator .."]+") do local df = file.join(directory,filename) for i=1,#suffixes do local dfs = file.addsuffix(df,suffixes[i]) if io.exists(dfs) then fullname = dfs break end end end if not fullname then fullname = false end memory[filename] = fullname end return fullname end os.which = which os.where = which function os.today() return date("!*t") -- table with values end function os.now() return date("!%Y-%m-%d %H:%M:%S") -- 2011-12-04 14:59:12 end -- if not os.sleep and socket then -- os.sleep = socket.sleep -- end if not os.sleep then local socket = socket function os.sleep(n) if not socket then -- so we delay ... if os.sleep is really needed then one should also -- be sure that socket can be found socket = require("socket") end socket.sleep(n) end end -- print(os.which("inkscape.exe")) -- print(os.which("inkscape")) -- print(os.which("gs.exe")) -- print(os.which("ps2pdf")) context-2013.05.28.20130704/texmf-dist/tex/context/base/math-mis.mkiv0000644000175000017500000000317412130411274024300 0ustar norbertnorbert%D \module %D [ file=math-mis, %D version=2013.04.06, % 2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Miscellaneous, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Miscellaneous} \unprotect %D This file contains left-overs moved from other files. It's mostly old stuff %D that we keep around for compatbility reasons. %D \macros %D {qedsymbol} %D %D [HH] The general Quod Erat Demonstrandum symbol is defined in such a way that %D we can configure it. Because this symbol is also used in text mode, we make it %D a normal text symbol with special behavior. \unexpanded\def\qedsymbol#1% {\ifhmode \unskip\nobreakspace\hfill#1\par \else\ifmmode #1\relax % leading \eqno removed \else \dontleavehmode\emptyhbox\hfill#1\par \fi\fi} \definesymbol [qed] [\qedsymbol{\mathematics{\square}}] %D \macros %D {QED} %D %D [HH] For compatbility reasons we also provide the \type {\QED} command. In case %D this command is overloaded, we still have the symbol available. \symbol[qed] \unexpanded\def\QED{\symbol[qed]} %D \macros %D {boxed} %D %D [HH] Another macro that users might expect (slightly adapted): \unexpanded\def\boxed % maybe obsolete {\ifmmode\expandafter\mframed\else\expandafter\framed\fi} %D Something low level for scientific calculator notation: \unexpanded\def\scinot#1#2% {#1\times10^{#2}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-new.mkii0000644000175000017500000006327212132111075024301 0ustar norbertnorbert%D \module %D [ file=cont-new, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=New Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \newcontextversion{2013.04.09 10:38} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new %D features. \unprotect % it's about time to clean up this file ... \writestatus\m!systems{beware: some patches loaded from cont-new.mkii} % \ifx\pdfmapfile \undefined \else \pdfmapfile{ } \fi % \font\f=dummyfont \rpcode\f0=500 \hbox{..}\char0 % todo: mp-new % caption: grid=top|bottom in xml defs \def\fastscale#1% {\begingroup \ifnum#1=1000\relax \setfalse\scaleboxdone \else \settrue\scaleboxdone \edef\finalscaleboxxscale{\withoutpt\the\dimexpr#1pt/1000\relax}% \let\finalscaleboxyscale\finalscaleboxxscale \fi \dowithnextbox{\doscaleboxindeed\flushnextbox\endgroup}\hbox} % \setupcaption [figure] [align=flushleft] % \setupcaption [figure-1] [align=flushleft,leftmargin=10mm] % \setupcaption [figure-2] [align=flushleft,leftmargin=10mm,rightmargin=-10mm,width=\textwidth] % % \startsetups somefigure % \ifdim\floatsetupwidth>\textwidth % \placesetupfloat[figure-2] % \else % \placesetupfloat[figure-1] % \fi % \stopsetups % % \placefloatwithsetups[somefigure]{}{\externalfigure[dummy][width=5cm,height=2cm]} \def\placefloatwithsetups {\dotripleempty\doplacefloatwithsetups} \long\def\doplacefloatwithsetups[#1][#2][#3]#4% {\def\floatsetupcaption {#4}% \def\floatsetupcontent {\copy\nextbox}% \def\floatsetupwidth {\wd\nextbox}% \def\floatsetupheight {\ht\nextbox}% \def\placesetupfloat[##1]{\placefloat[##1][#2][#3]{#4}{\floatsetupcontent}}% #4 and not \floatsetupcaption (unexpanded) \dowithnextbox{\setups[#1]}\vbox} \def\dividedsize#1#2#3% size gap n {\dimexpr \ifnum\dimexpr#1\relax>\plusone (\dimexpr#1\relax-\numexpr#3-1\relax\dimexpr#2\relax)/#3\else#1% \fi \relax} % \setuplabeltext[\s!itemcount1={{I(},{)}}] % \def\labeledcountervalue#1{\labeltexts{#1}{\countervalue{#1}}} \def\singlewidened #1{\hbox spread 1em{\hss#1\hss}} \def\complexwidened[#1]#2{\hbox spread #1{\hss#2\hss}} \definecomplexorsimple\widened % todo % % \def\definelocation{\dodoubleargument\dodefinelocation} % \def\dodefinelocation[#1][#2]{\setvalue{loc:#1}{#2}} % % \definelocation[lt] [\v!left\v!top] % \definelocation[tl] [\v!left\v!top] % \definelocation[\v!top\v!left][\v!left\v!top] % % \def\getlocation#1{\executeifdefined{loc:#1}{#1}} % just in case we load something from a file (pdfr-ec for instance) \prependtoks \restoreendofline \to \everybeforeshipout % \let\cs\getvalue % no, we want \cs to be czech % experimental so this may change \def\startdescriptions {\dosingleempty\dostartdescriptions} \def\dostartdescriptions[#1]% {\begingroup \def\item{\getvalue{#1}}% \let\dostoppairdescription \donothing \let\@@description \dostartpairdescription \let\@@startsomedescription\dostartsomedescription} \def\stopdescriptions {\dostoppairdescription \endgroup} \def\dostartpairdescription[#1][#2]% {\dostoppairdescription \def\dostoppairdescription{\@@stopdescription{#1}}% \bgroup \def\currentdescription{#1}% \doifelse{\descriptionparameter{\s!do\c!state}}\v!start {\@@makedescription{#1}[#2]{}} {\@@makedescription{#1}[#2]}} \def\dostartsomedescription% #1[#2]#3% {\bgroup \@@makedescription} % {#1}[#2]{#3}} % \starttext % % \definedescription[test] % % \startdescriptions % \test{Foo} Bar bar bar % \test{Foo} Bar bar bar % \test{Foo} Bar bar bar % \stopdescriptions % % \startdescriptions[test] % \item{Foo} Bar bar bar % \item{Foo} Bar bar bar % \item{Foo} Bar bar bar % \stopdescriptions % % \startdescriptions % \starttest{Foo} Bar bar bar \stoptest % \starttest{Foo} Bar bar bar \stoptest % \starttest{Foo} Bar bar bar \stoptest % \stopdescriptions % % \startdescriptions[test] % \item{Foo} Bar bar bar % \item{Foo} Bar bar bar % \item{Foo} Bar bar bar % \stopdescriptions % % \stoptext % to do: % % \def\defineshapesynonym % {\dodoubleargument\dodefineshapesynonym} % % \def\dodefineshapesynonym[#1][#2]% % {\setvalue{shsy:#1}{#2}} % % \def\shapesynonym#1% % {\ifcsname shsy:#1\endcsname % \expandafter\shapesynonym\csname shsy:#1\endcsname\else#1% % \fi} % %\defineshapesynonym[eacute] [e] %\defineshapesynonym[egrave] [e] %\defineshapesynonym[eumlaut [e] %\defineshapesynonym[eogonek][e] % % more reduction % %\defineshapesynonym[e][o] %\defineshapesynonym[w][v] %\defineshapesynonym[m][n] % % \shapesynonym{eacute} % this will be activated when % \newinsert\thispageinsert % <- installinsertion % \def\flushatthispage % {\bgroup % \dowithnextbox{\insert\thispageinsert{\box\nextbox}\egroup}% % \hbox} % \appendtoks % \ifvoid\thispageinsert\else\hbox{\smashedbox\thispageinsert}\fi % \to \everyshipout % \definemarkedpage[nobackgrounds] % \markpage[nobackgrounds] % \doifmarkedpageelse{nobackgrounds} \newcounter\nofmarkedpages \def\definemarkedpage[#1]% {\definetwopasslist{\v!page:#1}} \def\markpage[#1]% looks very much like domarginreference {\iftrialtypesetting\else \doglobal\increment\nofmarkedpages\relax \lazysavetwopassdata{\v!page:#1}{\nofmarkedpages}{\noexpand\realfolio}% \fi} \def\doifmarkedpageelse#1% {\gettwopassdatalist{\v!page:#1}% \expanded{\doifinsetelse{\realfolio}{\twopassdatalist}}} % Just a simple and fast hanger, for usage in macros. \def\setuphanging {\dodoubleempty\getparameters[\??ha]} \setuphanging [\c!distance=.5em] \def\starthanging {\noindent\bgroup \dowithnextbox {\setbox\nextbox\hbox{\flushnextbox\hskip\@@hadistance}% \hangindent\nextboxwd \hangafter\plusone \flushnextbox\ignorespaces} \hbox} \def\stophanging {\endgraf \egroup} % experimental \def\stophangaround {\endgraf \egroup} \def\starthangaround {\noindent\bgroup \dowithnextbox {\ifdim\nextboxht>\strutht\setbox\nextbox\tbox{\flushnextbox}\fi \setbox\nextbox\hbox{\flushnextbox\hskip\@@hadistance}% \getboxheight\scratchdimen\of\box\nextbox \getnoflines\scratchdimen \nextboxht\strutht \nextboxdp\strutdp \hangindent\nextboxwd \hangafter-\noflines \llap{\flushnextbox}\ignorespaces} \hbox} \def\modevalue#1#2#3% {\@EA\ifx\csname\@mode@\systemmodeprefix#1\endcsname\endcsname\enabledmode#2\else#2\fi} \def\systemmodevalue#1% {\modevalue{\systemmodeprefix#1}} % \getmulticolumnlines -> now in cont-loc, to be tested and really needed % \tracefonthandlingtrue % new, still to be improved % % \dorecurse{10} % {\input thuan % \placefigure{}{\framed[height=1.5cm]{test}} % \placefloatplaceholder} \def\placefloatplaceholder {\ifroomforfloat \else \scratchdimen\pagegoal \advance\scratchdimen-\pagetotal \advance\scratchdimen-3\lineheight \ifdim\scratchdimen>\zeropoint \startlinecorrection[blank] \mhbox{\inframed{\labeltexts{placeholder}{\lastcaptiontag}}}% \stoplinecorrection \else \allowbreak \fi \fi} \setuplabeltext [placeholder={, moved}] % etex only, of course we could just parse (scan for \% in string) \newif\ifpercentdimendone \bgroup % usage: \setpercentdimen\somedimen{% or dimen} todo: pct \catcode124=\@@comment \catcode 37=\@@active \gdef\setpercentdimen#1#2| {\xdef\@@expanded{#2}| \ifx\@@expanded\empty\else \bgroup \global\percentdimendonefalse \def\%{\dimexpr#1/100\relax\global\percentdimendonetrue\ignorespaces}| scantokens add's a space \catcode`%=\@@active \catcode`\\=\@@escape \let%\%| \scratchdimen#1| \xdef\@@expanded{\@@expanded\scratchdimen\!!zeropoint}| trick: when 1.2 => .2\scratchdimen and 0pt typeset \startnointerference \global\globalscratchdimen\scantokens\@EA{\@@expanded}| i'm lazy and use etex \stopnointerference \egroup #1\globalscratchdimen \fi} \egroup % TEX alternative, in principle accurate enough and also a bit faster % \bgroup % % \catcode`\%=\@@other % \catcode`\|=\@@comment % % \gdef\setpercentdimen#1#2| % {\beforesplitstring#2\at%\to\ascii % \doifelse\ascii{#2} % {#1=#2} % {\divide#1by100\relax#1=\ascii#1\relax}} | or: {#1=\ascii#1\divide#1by100\relax}} % % \egroup % % \dimen0=1000pt \setpercentdimen{\dimen0}{10%} \the\dimen0 % \dimen0= 100pt \setpercentdimen{\dimen0}{10%} \the\dimen0 % \dimen0= 95pt \setpercentdimen{\dimen0}{10%} \the\dimen0 % \dimen0= 10pt \setpercentdimen{\dimen0}{10%} \the\dimen0 % \dimen0= 1pt \setpercentdimen{\dimen0}{10%} \the\dimen0 \bgroup \obeylines % don't remove %'s ! \gdef\collapsedspace#1% {\ifx#1^^M% \expandafter\collapsedspace \else \space \expandafter#1% \fi} \gdef\collapsespaces {\prependtoksonce\relax\to\everyeof% \ignorelines% \ignoretabs% \let\obeyedspace\collapsedspace% \obeyspaces} \egroup \def\inlinedbox {\bgroup \dowithnextbox {\scratchdimen\nextboxht \advance\scratchdimen\nextboxdp \advance\scratchdimen-\lineheight \divide\scratchdimen\plustwo \advance\scratchdimen\strutdepth \setbox\nextbox\hbox{\lower\scratchdimen\flushnextbox}% \nextboxht\strutht \nextboxdp\strutdp \flushnextbox \egroup}% \hbox} % \readfile{cont-exp}\donothing\donothing % speed up (5-20%) \def\dimenratio#1#2% etex only {\withoutpt\the\dimexpr2\dimexpr(#1)/\dimexpr(#2)/32768\relax\relax} \def\doxprecurse#1#2% {\ifnum#1=\zerocount % no \ifcase \expandafter\gobblethreearguments \else #2\expandafter\expandafter\expandafter\doxprecurse\expandafter \fi\expandafter{\the\numexpr#1-1\relax}{#2}} \def\buttonframed{\dodoubleempty\localframed[\??bt]} % goodie \unexpanded\def\asciistr#1{\dontleavehmode{\defconvertedargument\ascii{#1}\verbatimfont\ascii}} \def\shapefill{\vskip\zeropoint\!!plus\lineheight\!!minus\lineheight\relax} \let\normaltype\type \ifx\scantextokens\undefined \ifx\scantokens\undefined \unexpanded\def\retype#1{\dontleavehmode{\defconvertedargument\ascii{#1}\@EA\normaltype\@EA{\ascii}}} \else \unexpanded\def\retype#1{\dontleavehmode\scantokens{\normaltype{#1}\ignorespaces}\relax} \fi \else \unexpanded\def\retype#1{\dontleavehmode\scantextokens{\normaltype{#1}}} \fi \def\simplifytype{\let\type\retype} % \ruledhbox % {\startignorespaces % \def\oeps{a} % \startignorespaces % \def\oeps{a} % \stopignorespaces % \def\oeps{a} % \stopignorespaces % \oeps} \newsignal\boissignal \newcount \boislevel \long\def\startignorespaces {\advance\boislevel\plusone \ifcase\boislevel\or \ifhmode \hskip\boissignal \fi \fi \ignorespaces} \long\def\stopignorespaces {\ifcase\boislevel\or \ifhmode \doloop {\ifdim\lastskip=\zeropoint \exitloop \else\ifdim\lastskip=\boissignal \unskip \exitloop \else \unskip \fi\fi}% \fi \fi \advance\boislevel\minusone} \def\minimalhbox#1#% {\dowithnextbox {\bgroup \setbox\scratchbox\hbox#1{\hss}% \ifdim\nextboxwd<\wd\scratchbox\nextboxwd\wd\scratchbox\fi \flushnextbox \egroup} \hbox} % \def\dodimchoice#1#2#3% % {\ifx#3\relax % #1\@EA\gobbleuntilrelax % \else\ifdim#1#2% % #3\@EAEAEA\gobbleuntilrelax % \else % \@EAEAEA\dodimchoice % \fi\fi{#1}} % \def\donumchoice#1#2#3% % {\ifx#3\relax % #1\@EA\gobbleuntilrelax % \else\ifnum#1#2% % #3\@EAEAEA\gobbleuntilrelax % \else % \@EAEAEA\dodimchoice % \fi\fi{#1}} % \def\dimchoice#1#2{\dodimchoice{#1}#2\empty\relax} % \def\numchoice#1#2{\donumchoice{#1}#2\empty\relax} \def\gobbleuntilempty#1\empty{} \def\dodimchoice#1#2#3% {\ifdim#1#2% #3\@EA\gobbleuntilempty \else \@EA\dodimchoice \fi{#1}} \def\donumchoice#1#2#3% {\ifnum#1#2% #3\@EA\gobbleuntilempty \else \@EA\dodimchoice \fi{#1}} \def\dimchoice#1#2{\dodimchoice{#1}#2{=#1}{#1}\empty} \def\numchoice#1#2{\donumchoice{#1}#2{=#1}{#1}\empty} % \the\dimexpr(\dimchoice {7pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) % \the\dimexpr(\dimchoice{11pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) % \the\dimexpr(\dimchoice{14pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) \def\showsetupsdefinition[#1]{\showvalue{\??su:#1}} % temp hack for debugging % will be a MyWay % % \setuplayout[grid=yes] \setupcaption[figure][inbetween=] \useMPlibrary[dum] \setupcolors[state=start] % % \starttext \showgrid \showstruts % % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=yes]} % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=fit]} % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=height]} % \input ward % \page % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=yes]} % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=fit]} % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=height]} % \input ward % \page % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=yes]} % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=fit]} % \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=height]} % \input ward % \page % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=yes]} % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=fit]} % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=height]} % \input ward % \page % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=yes]} % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=fit]} % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=height]} % \input ward % \page % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=yes]} % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=fit]} % \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=height]} % \input ward % % \stoptext % funny, as field action with e.g. dissolve ... only the field dissolves, bug? \setglobalsystemreference\rt!exec{Transition}{transition} %def\PDFexecutetransition {/Trans /Trans <>} \def\PDFexecutetransition {/Trans /Trans <<\executeifdefined{PDFpage\argumentA}\PDFpagereplace>>} % new, continuous blocks, \som \par \startdoorlopendblok ... % \startitemize % \item bagger % \item bagger % \item \startdoorlopendblok bagger \stopdoorlopendblok % \item \endgraf \startdoorlopendblok bagger \stopdoorlopendblok % \item \endgraf \startdoorlopendblok \strut bagger \stopdoorlopendblok % \item \startdoorlopendblok % \starttabulate % \NC test \NC test \NC \NR % \NC test \NC test \NC \NR % \NC test \NC test \NC \NR % \stoptabulate % \stopdoorlopendblok % \item test % \stopitemize \def\startdoorlopendblok % for special cases, don't change it too much and don't rely on it {\ifhmode\endgraf\nobreak\fi % don't remove the \nobreak \dowithnextboxcontent {\setlocalhsize \hsize\localhsize \forgetall} {\bgroup \forgeteverypar \forgetparskip \scratchdimen\nextboxht \advance\scratchdimen\nextboxdp \getnoflines\scratchdimen \advance\scratchdimen-\strutheight \setbox\nextbox\hbox{\lower\scratchdimen\box\nextbox}% \ht\nextbox\strutheight \dp\nextbox\strutdepth \setbox\nextbox\vbox {\indent\box\nextbox \endgraf \nobreak \advance\noflines\minusone \dorecurse\noflines{\crlf\nobreak}}% \verticalstrut \endgraf \nobreak \offinterlineskip \kern-2\lineheight % 2\lineheight when no vertical struts in main \vbox \nobreak \unvbox\nextbox \prevdepth\strutdepth % evt (eerst testen) een signal zodat een direct volgend blok goed gaat) \egroup} \vbox\bgroup \vskip-\lineheight \verticalstrut\endgraf \insidefloattrue \doinhibitblank} % beware, no \inhibitblank ! ! ! ! ! ! \def\stopdoorlopendblok {\endgraf\verticalstrut\endgraf\kern-2\lineheight \egroup} \def\tabulaterule % to be redone, not correct {\dotabulaterule {\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax \doifvalue{\??tt\currenttabulate\c!distance}\v!grid {\kern-\scratchdimen}}} % experimental tm-prikkels % experimental: \synchronizegrid bla bla bla \newcounter\currentgridsync \def\gridsynctag{grs:\currentgridsync} \def\synchronizegrid {\doglobal\increment\currentgridsync \par\prevdepth\zeropoint \nointerlineskip \hpos\gridsynctag{\strut}\par \vskip-\lineheight \nointerlineskip % top of text \scratchdimen\MPy{\v!text:\MPp\gridsynctag}% \advance\scratchdimen\MPh{\v!text:\MPp\gridsynctag}% % move to first baseline \advance\scratchdimen-\topskip % subtract wrong baseline \advance\scratchdimen-\MPy\gridsynctag % get minimal number of lines \advance\scratchdimen\lineheight \getnoflines\scratchdimen % calculate difference \advance\scratchdimen-\noflines\lineheight\relax \scratchdimen-\scratchdimen\relax \ifdim\scratchdimen>\zeropoint \nointerlineskip \advance\scratchdimen-\lineheight \vskip\scratchdimen \dontleavehmode \quad \strut \par %\else % \message{no grid correction: \the\scratchdimen}\wait \fi} % between alignment lines certain rules apply, and even a % simple test can mess up a table, which is why we have a % special test facility % % \ruledvbox % {\starttabulate[|l|p|] % \NC 1test \NC test \NC \NR % \tableifelse{\doifelse{a}{a}}{\NC Xtest \NC test \NC \NR}{}% % \stoptabulate} \long\def\tableifelse#1% {\tablenoalign {#1% {\aftergroup \firstoftwoarguments}% {\aftergroup\secondoftwoarguments}}} \long \def\tableiftextelse#1{\tableifelse{\doiftextelse{#1}}} % experiment, not yet to be used \def\displaybreak {\ifhmode \removeunwantedspaces \ifcase\raggedstatus\hfill\fi \strut\penalty-9999 % \break fails on case (3) \fi} \def\startdisplay{\displaybreak\ignorespaces\startpacked} \def\stopdisplay {\stoppacked\displaybreak\ignorespaces} \def\tightvbox{\dowithnextbox{\nextboxdp\zeropoint\flushnextbox}\vbox} \def\tightvtop{\dowithnextbox{\nextboxht\zeropoint\flushnextbox}\vtop} % what is this stupid macro meant for: \def\hyphenationpoint {\hskip\zeropoint} \def\hyphenated#1% {\bgroup \!!counta\zerocount \def\hyphenated##1{\advance\!!counta\plusone}% \handletokens#1\with\hyphenated \!!countb\plusone \def\hyphenated##1% {##1% \advance\!!countb\plusone\relax \ifnum\!!countb>2 \ifnum\!!countb<\!!counta \hyphenationpoint \fi\fi}% \handletokens#1\with\hyphenated \egroup} \def\obeysupersubletters {\let\super\normalsuper \let\suber\normalsuber \let\normalsuper\letterhat \let\normalsuber\letterunderscore \enablesupersub} \def\obeysupersubmath {\let\normalsuper\letterhat \let\normalsuber\letterunderscore \enablesupersub} %\let\normaltype\type % %\def\type#1% % {\expanded{\normaltype{\detokenize{#1}}}} % {x123 \os x123} {\tfa x123 \os x123} {x123 \tx x123 \os x123} % \definefontsynonym[OldStyle][Serif] % {x123 \os x123} {\tfa x123 \os x123} {x123 \tx x123 \os x123} % testen : % % \appendtoks % \let\registerparoptions\relax % \to \everyforgetall \def\startgridcorrection {\dosingleempty\dostartgridcorrection} \def\dostartgridcorrection[#1]% {\ifgridsnapping \iffirstargument\doifsomething{#1}{\moveongrid[#1]}\fi \snaptogrid\vbox\bgroup \else \startbaselinecorrection \fi} \def\stopgridcorrection {\ifgridsnapping \egroup \else \stopbaselinecorrection \fi} \def\checkgridsnapping {\lineskip\ifgridsnapping\zeropoint\else\normallineskip\fi} \def\startplaatsen {\dosingleempty\dostartplaatsen} \def\dostartplaatsen[#1]% tzt n*links etc {\endgraf \noindent\bgroup \setlocalhsize \hbox to \localhsize\bgroup \doifnot{#1}\v!left\hss \def\stopplaatsen {\unskip\unskip\unskip \doifnot{#1}\v!right\hss \egroup \egroup \endgraf}% \gobblespacetokens} % \startplaatsen[links] bla \stopplaatsen % we don't register the paragraph characteristics, only the % width \appendtoks \setinnerparpositions % see "techniek" for application \to \everytabulate \def\fontclassname#1#2% {\ifcsname\??ff#1#2\endcsname \fontclassname{#1}{\csname\??ff#1#2\endcsname}% \else\ifcsname\??ff#2\endcsname \fontclassname{#1}{\csname\??ff#2\endcsname}% \else #2% \fi\fi} \def\defineclassfontsynonym {\dotripleargument\dodefineclassfontsynonym} \def\dodefineclassfontsynonym[#1][#2][#3]% {\definefontsynonym[#1][\fontclassname{#2}{#3}]} %\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}] % %\defineclassfontsynonym [KopFont] [officina] [SerifBold] \def\startcolumnmakeup % don't change {\bgroup \getrawnoflines\textheight % teksthoogte kan topskip hebben, dus raw \scratchdimen\noflines\lineheight \advance\scratchdimen-\lineheight \advance\scratchdimen\topskip \setbox\scratchbox \ifcase\showgridstate\vbox\else\ruledvbox\fi to \scratchdimen\bgroup \forgetall} % ! don't change \def\stopcolumnmakeup {\egroup \dp\scratchbox\zeropoint \wd\scratchbox\textwidth \box\scratchbox \egroup \synchronizehsize} \long\def\startexternalfigure {\dotripleempty\dostartexternalfigure} \long\def\dostartexternalfigure[#1][#2][#3]#4\stopexternalfigure {\gdef\figuredescription{#4}% \externalfigure[#1][#2][#3]% \globallet\figuredescription\empty} \let\figuredescription\empty %% where does this come from, old code probably %% %% %% \newif\ifpagechanged \let\lastchangedpage\empty %% %% \def\checkpagechange#1% %% {\gettwopassdata\s!paragraph %% \pagechangedfalse %% \iftwopassdatafound %% \ifnum\twopassdata>0\getvalue{\s!paragraph:p:#1}\relax %% \pagechangedtrue %% \fi %% \fi %% \ifpagechanged %% \letgvalue{\s!paragraph:p:#1}\twopassdata %% \globallet\lastchangedpage\twopassdata %% \else %% \globallet\lastchangedpage\realfolio %% \fi %% \doparagraphreference} %% %% \def\changedpage#1% %% {\getvalue{\s!paragraph:p:#1}} \newcount\nofprofiled \def\profilemacro#1% {\nofprofiled\zerocount \letvalue{\string#1\string#1}#1% \appendtoks \normalwritestatus\m!systems{profile \string#1: \number\nofprofiled}% \to \everystoptext \unexpanded\def#1% {\global\advance\nofprofiled\plusone \csname\string#1\string#1\endcsname}} % incomplete, will be a special case of float placement \def\startfixed{\dosingleempty\dostartfixed} \def\dostartfixed[#1]% {\expanded{\dowithnextbox{\noexpand\dodofixed{\ifhmode0\else1\fi}{#1}}}% \vbox\bgroup \setlocalhsize} \def\stopfixed {\egroup} \def\dodofixed#1#2% {\ifcase#1\relax \processaction [#2] [ \v!high=>\bbox {\flushnextbox}, \v!low=>\tbox {\flushnextbox}, \v!middle=>\vcenter{\flushnextbox}, \v!lohi=>\vcenter{\flushnextbox}, \s!unknown=>\tbox {\flushnextbox}, \s!default=>\tbox {\flushnextbox}]% \else \startbaselinecorrection \noindent\flushnextbox \stopbaselinecorrection \fi} % \startitemize % % \item \externalfigure[koe][height=2cm] % \item \externalfigure[koe][height=2cm] % \item \externalfigure[koe][height=2cm] % \item \externalfigure[koe][height=2cm] % % \page % % \item \startfixed \externalfigure[koe][height=2cm]\stopfixed % \item \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed % \item \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed % \item \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed % % \page % % \item test \startfixed \externalfigure[koe][height=2cm]\stopfixed % \item test \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed % \item test \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed % \item test \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed % % \page % % \item test \par \startfixed \externalfigure[koe][height=2cm]\stopfixed % \item test \par \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed % \item test \par \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed % \item test \par \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed % % \stopitemize \def\obeyfollowingtoken{{}} % end \cs scanning % \def\comparedimension#1#2% % {\chardef\compresult % \ifdim#1<#2% % \zerocount % \else\ifdim#1<#2% % \plusone % \else % \plustwo % \fi\fi} % \newdimen\roundingeps \roundingeps=10sp % \def\comparedimensioneps#1#2% % {\chardef\compresult % \ifdim\dimexpr(#1-#2)<\roudingeps % \zerocount % \else\ifdim\dimexpr(#2-#1)<\roudingeps % \zerocount % \else\ifdim#1<#2% % \plusone % \else % \plustwo % \fi\fi\fi} %D Next we load a few local optimizations and new features. They %D live on on my machine and are not distributed, but they may end %D up in the distributed files. \enablemode[mkii] \enablemode[*mkii] \long\def\startluacode#1\stopluacode{} \long\def\ctxlua #1{} \def\enabletrackers [#1]{} \def\disabletrackers[#1]{} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-afm.lua0000644000175000017500000011003312130411274024074 0ustar norbertnorbertif not modules then modules = { } end modules ['font-afm'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

Some code may look a bit obscure but this has to do with the fact that we also use this code for testing and much code evolved in the transition from to to .

The following code still has traces of intermediate font support where we handles font encodings. Eventually font encoding goes away.

--ldx]]-- local fonts, logs, trackers, containers, resolvers = fonts, logs, trackers, containers, resolvers local next, type, tonumber = next, type, tonumber local format, match, gmatch, lower, gsub, strip = string.format, string.match, string.gmatch, string.lower, string.gsub, string.strip local abs = math.abs local P, S, C, R, lpegmatch, patterns = lpeg.P, lpeg.S, lpeg.C, lpeg.R, lpeg.match, lpeg.patterns local derivetable = table.derive local trace_features = false trackers.register("afm.features", function(v) trace_features = v end) local trace_indexing = false trackers.register("afm.indexing", function(v) trace_indexing = v end) local trace_loading = false trackers.register("afm.loading", function(v) trace_loading = v end) local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local report_afm = logs.reporter("fonts","afm loading") local findbinfile = resolvers.findbinfile local definers = fonts.definers local readers = fonts.readers local constructors = fonts.constructors local afm = constructors.newhandler("afm") local pfb = constructors.newhandler("pfb") local afmfeatures = constructors.newfeatures("afm") local registerafmfeature = afmfeatures.register afm.version = 1.410 -- incrementing this number one up will force a re-cache afm.cache = containers.define("fonts", "afm", afm.version, true) afm.autoprefixed = true -- this will become false some day (catches texnansi-blabla.*) afm.helpdata = { } -- set later on so no local for this afm.syncspace = true -- when true, nicer stretch values afm.addligatures = true -- best leave this set to true afm.addtexligatures = true -- best leave this set to true afm.addkerns = true -- best leave this set to true local function setmode(tfmdata,value) if value then tfmdata.properties.mode = lower(value) end end registerafmfeature { name = "mode", description = "mode", initializers = { base = setmode, node = setmode, } } --[[ldx--

We start with the basic reader which we give a name similar to the built in and reader.

--ldx]]-- --~ Comment FONTIDENTIFIER LMMATHSYMBOLS10 --~ Comment CODINGSCHEME TEX MATH SYMBOLS --~ Comment DESIGNSIZE 10.0 pt --~ Comment CHECKSUM O 4261307036 --~ Comment SPACE 0 plus 0 minus 0 --~ Comment QUAD 1000 --~ Comment EXTRASPACE 0 --~ Comment NUM 676.508 393.732 443.731 --~ Comment DENOM 685.951 344.841 --~ Comment SUP 412.892 362.892 288.889 --~ Comment SUB 150 247.217 --~ Comment SUPDROP 386.108 --~ Comment SUBDROP 50 --~ Comment DELIM 2390 1010 --~ Comment AXISHEIGHT 250 local comment = P("Comment") local spacing = patterns.spacer -- S(" \t")^1 local lineend = patterns.newline -- S("\n\r") local words = C((1 - lineend)^1) local number = C((R("09") + S("."))^1) / tonumber * spacing^0 local data = lpeg.Carg(1) local pattern = ( -- needs testing ... not used anyway as we no longer need math afm's comment * spacing * ( data * ( ("CODINGSCHEME" * spacing * words ) / function(fd,a) end + ("DESIGNSIZE" * spacing * number * words ) / function(fd,a) fd[ 1] = a end + ("CHECKSUM" * spacing * number * words ) / function(fd,a) fd[ 2] = a end + ("SPACE" * spacing * number * "plus" * number * "minus" * number) / function(fd,a,b,c) fd[ 3], fd[ 4], fd[ 5] = a, b, c end + ("QUAD" * spacing * number ) / function(fd,a) fd[ 6] = a end + ("EXTRASPACE" * spacing * number ) / function(fd,a) fd[ 7] = a end + ("NUM" * spacing * number * number * number ) / function(fd,a,b,c) fd[ 8], fd[ 9], fd[10] = a, b, c end + ("DENOM" * spacing * number * number ) / function(fd,a,b ) fd[11], fd[12] = a, b end + ("SUP" * spacing * number * number * number ) / function(fd,a,b,c) fd[13], fd[14], fd[15] = a, b, c end + ("SUB" * spacing * number * number ) / function(fd,a,b) fd[16], fd[17] = a, b end + ("SUPDROP" * spacing * number ) / function(fd,a) fd[18] = a end + ("SUBDROP" * spacing * number ) / function(fd,a) fd[19] = a end + ("DELIM" * spacing * number * number ) / function(fd,a,b) fd[20], fd[21] = a, b end + ("AXISHEIGHT" * spacing * number ) / function(fd,a) fd[22] = a end ) + (1-lineend)^0 ) + (1-comment)^1 )^0 local function scan_comment(str) local fd = { } lpegmatch(pattern,str,1,fd) return fd end -- On a rainy day I will rewrite this in lpeg ... or we can use the (slower) fontloader -- as in now supports afm/pfb loading but it's not too bad to have different methods -- for testing approaches. local keys = { } function keys.FontName (data,line) data.metadata.fontname = strip (line) -- get rid of spaces data.metadata.fullname = strip (line) end function keys.ItalicAngle (data,line) data.metadata.italicangle = tonumber (line) end function keys.IsFixedPitch(data,line) data.metadata.isfixedpitch = toboolean(line,true) end function keys.CharWidth (data,line) data.metadata.charwidth = tonumber (line) end function keys.XHeight (data,line) data.metadata.xheight = tonumber (line) end function keys.Descender (data,line) data.metadata.descender = tonumber (line) end function keys.Ascender (data,line) data.metadata.ascender = tonumber (line) end function keys.Comment (data,line) -- Comment DesignSize 12 (pts) -- Comment TFM designsize: 12 (in points) line = lower(line) local designsize = match(line,"designsize[^%d]*(%d+)") if designsize then data.metadata.designsize = tonumber(designsize) end end local function get_charmetrics(data,charmetrics,vector) local characters = data.characters local chr, ind = { }, 0 for k,v in gmatch(charmetrics,"([%a]+) +(.-) *;") do if k == 'C' then v = tonumber(v) if v < 0 then ind = ind + 1 -- ? else ind = v end chr = { index = ind } elseif k == 'WX' then chr.width = tonumber(v) elseif k == 'N' then characters[v] = chr elseif k == 'B' then local llx, lly, urx, ury = match(v,"^ *(.-) +(.-) +(.-) +(.-)$") chr.boundingbox = { tonumber(llx), tonumber(lly), tonumber(urx), tonumber(ury) } elseif k == 'L' then local plus, becomes = match(v,"^(.-) +(.-)$") local ligatures = chr.ligatures if ligatures then ligatures[plus] = becomes else chr.ligatures = { [plus] = becomes } end end end end local function get_kernpairs(data,kernpairs) local characters = data.characters for one, two, value in gmatch(kernpairs,"KPX +(.-) +(.-) +(.-)\n") do local chr = characters[one] if chr then local kerns = chr.kerns if kerns then kerns[two] = tonumber(value) else chr.kerns = { [two] = tonumber(value) } end end end end local function get_variables(data,fontmetrics) for key, rest in gmatch(fontmetrics,"(%a+) *(.-)[\n\r]") do local keyhandler = keys[key] if keyhandler then keyhandler(data,rest) end end end local function get_indexes(data,pfbname) data.resources.filename = resolvers.unresolve(pfbname) -- no shortcut local pfbblob = fontloader.open(pfbname) if pfbblob then local characters = data.characters local pfbdata = fontloader.to_table(pfbblob) if pfbdata then local glyphs = pfbdata.glyphs if glyphs then if trace_loading then report_afm("getting index data from %a",pfbname) end for index, glyph in next, glyphs do local name = glyph.name if name then local char = characters[name] if char then if trace_indexing then report_afm("glyph %a has index %a",name,index) end char.index = index end end end elseif trace_loading then report_afm("no glyph data in pfb file %a",pfbname) end elseif trace_loading then report_afm("no data in pfb file %a",pfbname) end fontloader.close(pfbblob) elseif trace_loading then report_afm("invalid pfb file %a",pfbname) end end local function readafm(filename) local ok, afmblob, size = resolvers.loadbinfile(filename) -- has logging if ok and afmblob then local data = { resources = { filename = resolvers.unresolve(filename), version = afm.version, creator = "context mkiv", }, properties = { hasitalics = false, }, goodies = { }, metadata = { filename = file.removesuffix(file.basename(filename)) }, characters = { -- a temporary store }, descriptions = { -- the final store }, } afmblob = gsub(afmblob,"StartCharMetrics(.-)EndCharMetrics", function(charmetrics) if trace_loading then report_afm("loading char metrics") end get_charmetrics(data,charmetrics,vector) return "" end) afmblob = gsub(afmblob,"StartKernPairs(.-)EndKernPairs", function(kernpairs) if trace_loading then report_afm("loading kern pairs") end get_kernpairs(data,kernpairs) return "" end) afmblob = gsub(afmblob,"StartFontMetrics%s+([%d%.]+)(.-)EndFontMetrics", function(version,fontmetrics) if trace_loading then report_afm("loading variables") end data.afmversion = version get_variables(data,fontmetrics) data.fontdimens = scan_comment(fontmetrics) -- todo: all lpeg, no time now return "" end) return data else if trace_loading then report_afm("no valid afm file %a",filename) end return nil end end --[[ldx--

We cache files. Caching is taken care of in the loader. We cheat a bit by adding ligatures and kern information to the afm derived data. That way we can set them faster when defining a font.

--ldx]]-- local addkerns, addligatures, addtexligatures, unify, normalize -- we will implement these later function afm.load(filename) -- hm, for some reasons not resolved yet filename = resolvers.findfile(filename,'afm') or "" if filename ~= "" then local name = file.removesuffix(file.basename(filename)) local data = containers.read(afm.cache,name) local attr = lfs.attributes(filename) local size, time = attr.size or 0, attr.modification or 0 -- local pfbfile = file.replacesuffix(name,"pfb") local pfbname = resolvers.findfile(pfbfile,"pfb") or "" if pfbname == "" then pfbname = resolvers.findfile(file.basename(pfbfile),"pfb") or "" end local pfbsize, pfbtime = 0, 0 if pfbname ~= "" then local attr = lfs.attributes(pfbname) pfbsize = attr.size or 0 pfbtime = attr.modification or 0 end if not data or data.size ~= size or data.time ~= time or data.pfbsize ~= pfbsize or data.pfbtime ~= pfbtime then report_afm("reading %a",filename) data = readafm(filename) if data then if pfbname ~= "" then get_indexes(data,pfbname) elseif trace_loading then report_afm("no pfb file for %a",filename) end report_afm("unifying %a",filename) unify(data,filename) if afm.addligatures then report_afm("add ligatures") addligatures(data) end if afm.addtexligatures then report_afm("add tex ligatures") addtexligatures(data) end if afm.addkerns then report_afm("add extra kerns") addkerns(data) end normalize(data) report_afm("add tounicode data") fonts.mappings.addtounicode(data,filename) data.size = size data.time = time data.pfbsize = pfbsize data.pfbtime = pfbtime report_afm("saving %a in cache",name) data = containers.write(afm.cache, name, data) data = containers.read(afm.cache,name) end end return data else return nil end end local uparser = fonts.mappings.makenameparser() unify = function(data, filename) local unicodevector = fonts.encodings.agl.unicodes -- loaded runtime in context local unicodes, names = { }, { } local private = constructors.privateoffset local descriptions = data.descriptions for name, blob in next, data.characters do local code = unicodevector[name] -- or characters.name_to_unicode[name] if not code then code = lpegmatch(uparser,name) if not code then code = private private = private + 1 report_afm("assigning private slot %U for unknown glyph name %a",code,name) end end local index = blob.index unicodes[name] = code names[name] = index blob.name = name descriptions[code] = { boundingbox = blob.boundingbox, width = blob.width, kerns = blob.kerns, index = index, name = name, } end for unicode, description in next, descriptions do local kerns = description.kerns if kerns then local krn = { } for name, kern in next, kerns do local unicode = unicodes[name] if unicode then krn[unicode] = kern else print(unicode,name) end end description.kerns = krn end end data.characters = nil local resources = data.resources local filename = resources.filename or file.removesuffix(file.basename(filename)) resources.filename = resolvers.unresolve(filename) -- no shortcut resources.unicodes = unicodes -- name to unicode resources.marks = { } -- todo resources.names = names -- name to index resources.private = private end normalize = function(data) end --[[ldx--

These helpers extend the basic table with extra ligatures, texligatures and extra kerns. This saves quite some lookups later.

--ldx]]-- local addthem = function(rawdata,ligatures) if ligatures then local descriptions = rawdata.descriptions local resources = rawdata.resources local unicodes = resources.unicodes local names = resources.names for ligname, ligdata in next, ligatures do local one = descriptions[unicodes[ligname]] if one then for _, pair in next, ligdata do local two, three = unicodes[pair[1]], unicodes[pair[2]] if two and three then local ol = one.ligatures if ol then if not ol[two] then ol[two] = three end else one.ligatures = { [two] = three } end end end end end end end addligatures = function(rawdata) addthem(rawdata,afm.helpdata.ligatures ) end addtexligatures = function(rawdata) addthem(rawdata,afm.helpdata.texligatures) end --[[ldx--

We keep the extra kerns in separate kerning tables so that we can use them selectively.

--ldx]]-- -- This is rather old code (from the beginning when we had only tfm). If -- we unify the afm data (now we have names all over the place) then -- we can use shcodes but there will be many more looping then. But we -- could get rid of the tables in char-cmp then. Als, in the generic version -- we don't use the character database. (Ok, we can have a context specific -- variant). addkerns = function(rawdata) -- using shcodes is not robust here local descriptions = rawdata.descriptions local resources = rawdata.resources local unicodes = resources.unicodes local function do_it_left(what) if what then for unicode, description in next, descriptions do local kerns = description.kerns if kerns then local extrakerns for complex, simple in next, what do complex = unicodes[complex] simple = unicodes[simple] if complex and simple then local ks = kerns[simple] if ks and not kerns[complex] then if extrakerns then extrakerns[complex] = ks else extrakerns = { [complex] = ks } end end end end if extrakerns then description.extrakerns = extrakerns end end end end end local function do_it_copy(what) if what then for complex, simple in next, what do complex = unicodes[complex] simple = unicodes[simple] if complex and simple then local complexdescription = descriptions[complex] if complexdescription then -- optional local simpledescription = descriptions[complex] if simpledescription then local extrakerns local kerns = simpledescription.kerns if kerns then for unicode, kern in next, kerns do if extrakerns then extrakerns[unicode] = kern else extrakerns = { [unicode] = kern } end end end local extrakerns = simpledescription.extrakerns if extrakerns then for unicode, kern in next, extrakerns do if extrakerns then extrakerns[unicode] = kern else extrakerns = { [unicode] = kern } end end end if extrakerns then complexdescription.extrakerns = extrakerns end end end end end end end -- add complex with values of simplified when present do_it_left(afm.helpdata.leftkerned) do_it_left(afm.helpdata.bothkerned) -- copy kerns from simple char to complex char unless set do_it_copy(afm.helpdata.bothkerned) do_it_copy(afm.helpdata.rightkerned) end --[[ldx--

The copying routine looks messy (and is indeed a bit messy).

--ldx]]-- local function adddimensions(data) -- we need to normalize afm to otf i.e. indexed table instead of name if data then for unicode, description in next, data.descriptions do local bb = description.boundingbox if bb then local ht, dp = bb[4], -bb[2] if ht == 0 or ht < 0 then -- no need to set it and no negative heights, nil == 0 else description.height = ht end if dp == 0 or dp < 0 then -- no negative depths and no negative depths, nil == 0 else description.depth = dp end end end end end local function copytotfm(data) if data and data.descriptions then local metadata = data.metadata local resources = data.resources local properties = derivetable(data.properties) local descriptions = derivetable(data.descriptions) local goodies = derivetable(data.goodies) local characters = { } local parameters = { } local unicodes = resources.unicodes -- for unicode, description in next, data.descriptions do -- use parent table characters[unicode] = { } end -- local filename = constructors.checkedfilename(resources) local fontname = metadata.fontname or metadata.fullname local fullname = metadata.fullname or metadata.fontname local endash = unicodes['space'] local emdash = unicodes['emdash'] local spacer = "space" local spaceunits = 500 -- local monospaced = metadata.isfixedpitch local charwidth = metadata.charwidth local italicangle = metadata.italicangle local charxheight = metadata.xheight and metadata.xheight > 0 and metadata.xheight properties.monospaced = monospaced parameters.italicangle = italicangle parameters.charwidth = charwidth parameters.charxheight = charxheight -- same as otf if properties.monospaced then if descriptions[endash] then spaceunits, spacer = descriptions[endash].width, "space" end if not spaceunits and descriptions[emdash] then spaceunits, spacer = descriptions[emdash].width, "emdash" end if not spaceunits and charwidth then spaceunits, spacer = charwidth, "charwidth" end else if descriptions[endash] then spaceunits, spacer = descriptions[endash].width, "space" end if not spaceunits and charwidth then spaceunits, spacer = charwidth, "charwidth" end end spaceunits = tonumber(spaceunits) if spaceunits < 200 then -- todo: warning end -- parameters.slant = 0 parameters.space = spaceunits parameters.space_stretch = 500 parameters.space_shrink = 333 parameters.x_height = 400 parameters.quad = 1000 -- if italicangle then parameters.italicangle = italicangle parameters.italicfactor = math.cos(math.rad(90+italicangle)) parameters.slant = - math.round(math.tan(italicangle*math.pi/180)) end if monospaced then parameters.space_stretch = 0 parameters.space_shrink = 0 elseif afm.syncspace then parameters.space_stretch = spaceunits/2 parameters.space_shrink = spaceunits/3 end parameters.extra_space = parameters.space_shrink if charxheight then parameters.x_height = charxheight else -- same as otf local x = unicodes['x'] if x then local x = descriptions[x] if x then parameters.x_height = x.height end end -- end local fd = data.fontdimens if fd and fd[8] and fd[9] and fd[10] then -- math for k,v in next, fd do parameters[k] = v end end -- parameters.designsize = (metadata.designsize or 10)*65536 parameters.ascender = abs(metadata.ascender or 0) parameters.descender = abs(metadata.descender or 0) parameters.units = 1000 -- properties.spacer = spacer properties.encodingbytes = 2 properties.format = fonts.formats[filename] or "type1" properties.filename = filename properties.fontname = fontname properties.fullname = fullname properties.psname = fullname properties.name = filename or fullname or fontname -- if next(characters) then return { characters = characters, descriptions = descriptions, parameters = parameters, resources = resources, properties = properties, goodies = goodies, } end end return nil end --[[ldx--

Originally we had features kind of hard coded for files but since I expect to support more font formats, I decided to treat this fontformat like any other and handle features in a more configurable way.

--ldx]]-- function afm.setfeatures(tfmdata,features) local okay = constructors.initializefeatures("afm",tfmdata,features,trace_features,report_afm) if okay then return constructors.collectprocessors("afm",tfmdata,features,trace_features,report_afm) else return { } -- will become false end end local function checkfeatures(specification) end local function afmtotfm(specification) local afmname = specification.filename or specification.name if specification.forced == "afm" or specification.format == "afm" then -- move this one up if trace_loading then report_afm("forcing afm format for %a",afmname) end else local tfmname = findbinfile(afmname,"ofm") or "" if tfmname ~= "" then if trace_loading then report_afm("fallback from afm to tfm for %a",afmname) end return -- just that end end if afmname ~= "" then -- weird, isn't this already done then? local features = constructors.checkedfeatures("afm",specification.features.normal) specification.features.normal = features constructors.hashinstance(specification,true) -- also weird here -- specification = definers.resolve(specification) -- new, was forgotten local cache_id = specification.hash local tfmdata = containers.read(constructors.cache, cache_id) -- cache with features applied if not tfmdata then local rawdata = afm.load(afmname) if rawdata and next(rawdata) then adddimensions(rawdata) tfmdata = copytotfm(rawdata) if tfmdata and next(tfmdata) then local shared = tfmdata.shared if not shared then shared = { } tfmdata.shared = shared end shared.rawdata = rawdata shared.features = features shared.processes = afm.setfeatures(tfmdata,features) end elseif trace_loading then report_afm("no (valid) afm file found with name %a",afmname) end tfmdata = containers.write(constructors.cache,cache_id,tfmdata) end return tfmdata end end --[[ldx--

As soon as we could intercept the reader, I implemented an reader. Since traditional could use fonts with companions, the following method also could handle those cases, but now that we can handle directly we no longer need this features.

--ldx]]-- local function read_from_afm(specification) local tfmdata = afmtotfm(specification) if tfmdata then tfmdata.properties.name = specification.name tfmdata = constructors.scale(tfmdata, specification) local allfeatures = tfmdata.shared.features or specification.features.normal constructors.applymanipulators("afm",tfmdata,allfeatures,trace_features,report_afm) fonts.loggers.register(tfmdata,'afm',specification) end return tfmdata end --[[ldx--

Here comes the implementation of a few features. We only implement those that make sense for this format.

--ldx]]-- local function prepareligatures(tfmdata,ligatures,value) if value then local descriptions = tfmdata.descriptions for unicode, character in next, tfmdata.characters do local description = descriptions[unicode] local dligatures = description.ligatures if dligatures then local cligatures = character.ligatures if not cligatures then cligatures = { } character.ligatures = cligatures end for unicode, ligature in next, dligatures do cligatures[unicode] = { char = ligature, type = 0 } end end end end end local function preparekerns(tfmdata,kerns,value) if value then local rawdata = tfmdata.shared.rawdata local resources = rawdata.resources local unicodes = resources.unicodes local descriptions = tfmdata.descriptions for u, chr in next, tfmdata.characters do local d = descriptions[u] local newkerns = d[kerns] if newkerns then local kerns = chr.kerns if not kerns then kerns = { } chr.kerns = kerns end for k,v in next, newkerns do local uk = unicodes[k] if uk then kerns[uk] = v end end end end end end local list = { -- [0x0022] = 0x201D, [0x0027] = 0x2019, -- [0x0060] = 0x2018, } local function texreplacements(tfmdata,value) local descriptions = tfmdata.descriptions local characters = tfmdata.characters for k, v in next, list do characters [k] = characters [v] -- we forget about kerns descriptions[k] = descriptions[v] -- we forget about kerns end end local function ligatures (tfmdata,value) prepareligatures(tfmdata,'ligatures', value) end local function texligatures(tfmdata,value) prepareligatures(tfmdata,'texligatures',value) end local function kerns (tfmdata,value) preparekerns (tfmdata,'kerns', value) end local function extrakerns (tfmdata,value) preparekerns (tfmdata,'extrakerns', value) end registerafmfeature { name = "liga", description = "traditional ligatures", initializers = { base = ligatures, node = ligatures, } } registerafmfeature { name = "kern", description = "intercharacter kerning", initializers = { base = kerns, node = kerns, } } registerafmfeature { name = "extrakerns", description = "additional intercharacter kerning", initializers = { base = extrakerns, node = extrakerns, } } registerafmfeature { name = 'tlig', description = 'tex ligatures', initializers = { base = texligatures, node = texligatures, } } registerafmfeature { name = 'trep', description = 'tex replacements', initializers = { base = texreplacements, node = texreplacements, } } -- readers local check_tfm = readers.check_tfm fonts.formats.afm = "type1" fonts.formats.pfb = "type1" local function check_afm(specification,fullname) local foundname = findbinfile(fullname, 'afm') or "" -- just to be sure if foundname == "" then foundname = fonts.names.getfilename(fullname,"afm") or "" end if foundname == "" and afm.autoprefixed then local encoding, shortname = match(fullname,"^(.-)%-(.*)$") -- context: encoding-name.* if encoding and shortname and fonts.encodings.known[encoding] then shortname = findbinfile(shortname,'afm') or "" -- just to be sure if shortname ~= "" then foundname = shortname if trace_defining then report_afm("stripping encoding prefix from filename %a",afmname) end end end end if foundname ~= "" then specification.filename = foundname specification.format = "afm" return read_from_afm(specification) end end function readers.afm(specification,method) local fullname, tfmdata = specification.filename or "", nil if fullname == "" then local forced = specification.forced or "" if forced ~= "" then tfmdata = check_afm(specification,specification.name .. "." .. forced) end if not tfmdata then method = method or definers.method or "afm or tfm" if method == "tfm" then tfmdata = check_tfm(specification,specification.name) elseif method == "afm" then tfmdata = check_afm(specification,specification.name) elseif method == "tfm or afm" then tfmdata = check_tfm(specification,specification.name) or check_afm(specification,specification.name) else -- method == "afm or tfm" or method == "" then tfmdata = check_afm(specification,specification.name) or check_tfm(specification,specification.name) end end else tfmdata = check_afm(specification,fullname) end return tfmdata end function readers.pfb(specification,method) -- only called when forced local original = specification.specification if trace_defining then report_afm("using afm reader for %a",original) end specification.specification = gsub(original,"%.pfb",".afm") specification.forced = "afm" return readers.afm(specification,method) end context-2013.05.28.20130704/texmf-dist/tex/context/base/ppchtex.mkiv0000644000175000017500000034735412130411274024247 0ustar norbertnorbert%D \module %D [ file=ppchtex, %D version=1997.03.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PPCHTEX\ (Plain Pictex Context cHemie \TEX), %D author=Hans Hagen, %D date=\currentdate, %D suggestions={Tobias Burnus, Dirk Kuypers \& Ton Otten}, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \endinput % option=test => boxes % dummy => file % final => file / local run % % constante van phantom in definitie ONE: \setchemicaltextwidth 300 % % it would be interesting to rewrite this module with todays % experiences and new context functionality, maybe ... % Deze module ondersteunt het zetten van chemische % (structuur)formules. Hoewel de macro' zijn afgestemd op % CONTEXT, zijn ze ook buiten deze zetomgeving te gebruiken. % % Dit is, afgezien van updates, de definitieve versie van % PPCHTEX. Gebruikersgemak, eenvoud, flexibiliteit, en % snelheid zijn inmiddels redelijk geoptimaliseerd. Dit neemt % niet weg dat hier en daar nog verbetering mogelijk is. Dit % zal dan ook nog gebeuren. % % Volgende versies zullen tenminste dezelfde functionaliteit % hebben. We houden ons natuurlijk het recht voor de kwaliteit % van de output te verbeteren. Daarnaast staan nog op het % wensenlijstje: % % - optimaliseren in termen van proces-tijd % - aanpassen naamgeving van interne macro's % - toevoegen van functionaliteit % - in \x!-vorm omzetten van GIVES, TB enz. % % De mix tussen engels en nederlands lijkt soms verwarrend. % Meestal zijn verborgen macro's engels en zichtbare macro's % nederlands. Het gebruik van [ ] en { } sluit aan op andere % Context-macro's. Hetzelfde geldt voor instellingen en % \start-\stop-constructies. % % De schijnbaar overbodige \bgroup-\egroup constructie % garandeert aansluiting bij de Context-macro's voor het % plaatsen van figuren, tabellen en andere floats. % % Binnen Context worden de macro's geladen met % \gebruikextras[chemie]. Daarbij wordt een passende melding % getoont. Buiten Context genereren we een melding: \doifundefined{usemodule} {\writestatus{loading}{ConTeXt Chemical Macro's / 1996.3.1}} % Er kan gebruik worden gemaakt van PiCTeX of PStricks. Een % van deze pakketten moet van te voren zijn geladen. % % \input prepictex.tex (i.g.v. LaTeX) % \input pictex.tex % \input postpictex.tex (i.g.v. LaTeX) % % of: % % \input multido.tex % \input pstricks.tex % \input pst-plot.tex % % In \CONTEXT\ kan men de modules m-pictex en m-pstricks % gebruiken. De eerste module laad of efficiente wijze PiCTeX % en de tweede module koppelt het PSTRICKS kleurmechanisme % aan dat van \CONTEXT. % PSTricks: {-\chemicalangle} instead of {*0}, which produces % faulty ps code when \chemicalangle=0 \startcommands dutch english german gotochemical: naarchemie gotochemical zurchemie setupchemical: stelchemiein setupchemical stellechemieein startchemical: startchemie startchemical startchemie stopchemical: stopchemie stopchemical stopchemie definechemical: definieerchemie definechemical definierechemie chemical: chemie chemical chemie toptext: boventekst toptext textueber bottext: ondertekst bottext textunter midtext: middentekst midtext textmitte \stopcommands \doifundefined{fiverm} % In the more recent LaTeX versions {\font\fiverm=cmr5 } % \fiverm is no longer (pre)defined. \newconstant\chemicaldrawingmode \doifdefinedelse{beginpicture} % PiCTeX {\doifdefinedelse{startMPdrawing} {\chemicaldrawingmode\plustwo } % MetaPost {\chemicaldrawingmode\zerocount}} % raw {\doifdefinedelse{psaxes} {\chemicaldrawingmode\plusone } % PSTricks {\chemicaldrawingmode\plusthree}} % unknown \ifcase\chemicaldrawingmode \writestatus{ppchtex}{using PiCTeX} \or \writestatus{ppchtex}{using PSTricks (still experimental)} \writestatus{ppchtex}{automatic sizing not (yet) supported} \or \writestatus{ppchtex}{using PiCTeX and MetaPost} \else \writestatus{ppchtex}{load PiCTeX (+pre/post) or PSTricks (+pst_plot) first} \bgroup \read16 to \exit \egroup \expandafter\endinput \fi %I n=Chemie %I c=\stelchemiein,\chemie %I %I Chemische formules kunnen worden gezet met behulp van de %I onderstaande commando's: %I %I buiten $ en $$ : %I %I \chemie[segmenten][symbolen] %I %I \startchemie[instellingen] %I \chemie... %I \chemie... %I \stopchemie %I %I en binnen $ en $$: %I %I \chemie{}{} %I %I Voor tekst, uitleg en voorbeelde verwijzen we vooralsnog %I naar de handleiding. %P %I Het gedrag van de macro's kan worden ingesteld met: %I %I \stelchemiein[breedte=,hoogte=,links=,rechts=,boven=, %I onder=,korps=,schaal=,status=,assenstelsel=,kader=, %I variant=,optie=,formaat=,tekstformaat=,resolutie=, %I offset=,letter=] %I %I Structuren kunnen worden voorgedefinieerd met het commando %I %I \definieerchemie[naam]{\chemie...} %S \startsetup %S \command %S [\!stelchemiein] %S \type %S [\c!vars!] %S \variable %S [\c!breedte] %S [\c!number!,\v!passend] %S [0] %S \variable %S [\c!hoogte] %S [\c!number!,\v!passend] %S [0] %S \variable %S [\c!links] %S [\c!number!] %S [0] %S \variable %S [\c!rechts] %S [\c!number!] %S [0] %S \variable %S [\c!boven] %S [\c!number!] %S [0] %S \variable %S [\c!onder] %S [\c!number!] %S [0] %S \variable %S [\c!resolutie] %S [\c!number!] %S [\outputresolution] %S \variable %S [\c!korps] %S [10pt,11pt,12pt] %S [\bodyfontsize] %S \variable %S [\c!schaal] %S [\v!klein,\v!middel,\v!groot] %S [\v!middel] %S \variable %S [\c!formaat] %S [\v!klein,\v!middel,\v!groot] %S [\v!groot] %S \variable %S [\c!tekstformaat] %S [\v!klein,\v!middel,\v!groot] %S [\v!groot] %S \variable %S [\c!status] %S [\v!start,\v!stop] %S [\v!start] %S \variable %S [\c!kader] %S [\v!aan,\v!uit] %S [\v!uit] %S \variable %S [\c!assenstelsel] %S [\v!aan,\v!uit] %S [\v!uit] %S \variable %S [\c!optie] %S [\v!test] %S [] %S \variable %S [\c!variant] %S [1,2] %S [1] %S \variable %S [\c!offset] %S [HIGH,LOW] %S [LOW] %S \variable %S [\c!letter] %S [\c!command!] %S [\rm] %S \stopsetup %S \startsetup %S \command %S [\v!startchemie] %S \type %S [\c!vars!\c!stp!] %S \inheritvariable %S [\v!stelchemiein] %S [] %S \stopsetup %S \startsetup %S \command %S [\v!chemie] %S \type %S [\c!vals!\c!vals!] %S \value %S [\c!list!] %S [] %S \value %S [\c!list!] %S [] %S \stopsetup %S \startsetup %S \command %S [definieerchemie] %S \type %S [\c!val!\c!arg!] %S \value %S [\c!text!] %S [] %S \stopsetup \unprotect % Om te voorkomen dat sub- en superscripts botsen passen we % wat fontdimen's aan (Knuth, The TeXBook, p179). Helaas % kunnen deze instellingen niet lokaal worden gehouden door % groeperen, vandaar dat een en ander moet worden geset n % gereset. % % Er dient een relatie te worden gelegd met de afmetingen % van de letters. In een eerdere versie werden daartoe de % \fontdimen's opgehoogd. Omdat dit problemen gaf bij % scaled fonts, is bij nader inzien gekozen voor de % onderstaande oplossing, waarbij de nieuwe waarden worden % afgeleid van de x-height (\fontexheight). De factor 0.70 % is min of meer experimenteel vastgesteld. Soms worden de % regels iets verder uit elkaar gezet. Jammer. Italic fonts % hebben grotere cijfers en vallen min of meer uit de boot. \newif\ifloweredsubscripts % this will be redone in the mkiv ways \def\setsubscripts {\def\dosetsubscript##1##2##3% {\dimen0=##3\fontexheight##2% \setxvalue{@@\string##1\string##2}{\the##1##2\relax}% ##1##2=\dimen0\relax}% \def\dodosetsubscript##1##2% {\dosetsubscript{##1}{\textfont 2}{##2}% \dosetsubscript{##1}{\scriptfont 2}{##2}% \dosetsubscript{##1}{\scriptscriptfont2}{##2}}% %dodosetsubscript\mathsupnormal {?}% \dodosetsubscript\mathsubnormal {.7}% \dodosetsubscript\mathsubcombined{.7}% \global\loweredsubscriptstrue} \def\resetsubscripts {\ifloweredsubscripts \def\doresetsubscript##1##2% {\dimen0=\getvalue{@@\string##1\string##2}\relax ##1##2=\dimen0}% \def\dodoresetsubscript##1% {\doresetsubscript{##1}{\textfont2}% \doresetsubscript{##1}{\scriptfont2}% \doresetsubscript{##1}{\scriptscriptfont2}}% %dodoresetsubscript\mathsupnormal \dodoresetsubscript\mathsubnormal \dodoresetsubscript\mathsubcombined \global\loweredsubscriptsfalse \fi} \ifx\Umathchar\undefined \else % for the moment we nil them, soon we will have a proper % way to deal with this \let\setsubscripts \relax \let\resetsubscripts\relax \fi \def\doresetsubscripts {\resetsubscripts} \def\sethighsubscripts {\resetsubscripts \let\dosetsubscripts=\relax} \def\setlowsubscripts {\def\dosetsubscripts{\setsubscripts}} \setlowsubscripts \newcount\horchemical % t.z.t. \newcounter \newcount\verchemical % t.z.t. \newcounter \newcount\txtchemical % t.z.t. \newcounter \newcount\levchemical % t.z.t. \newcounter \newif\ifinchemical \inchemicalfalse \newif\iffixedchemical \fixedchemicalfalse \newbox\chemicalsymbols % Eigenlijk moeten de constanten en variabelen in cont-nl.tex % staan. Dit pakket is echter relatief onafhankelijk van CONTEXT. \definesystemvariable {chemical} \definesystemconstant {chemical} \definesystemconstant {translate} \definesystemconstant {distance} \definesystemconstant {mirror} \definesystemconstant {rotate} \definesystemconstant {substitute} \definesystemconstant {angle} \definesystemconstant {executechemical} \definesystemconstant {chemicaltextelement} \definesystemconstant {chemicallinesegment} \definesystemconstant {chemicalcircsegment} \def\chemicalspace {\quad} % begin van experiment: % % De onderstaande twee macro's kunnen worden gebruikt voor % bijvoorbeeld een interactiemechanisme. % % \localgotochemical {verwijzing} {tekst} % \localthisischemical {verwijzing} \def\dowithchemical% {} \def\localgotochemical#1#2{\gotobox{#2}[#1]} \def\localthisischemical#1{\pagereference[#1]} % eind van experiment \def\setchemicalmaximum #1 {\def\maxchemical{#1}} \def\doifchemicalnumber#1#2#3% {\doifnumberelse{#1} {\ifnum#1>\maxchemical\relax \writestatus{ppchtex}{number #1 is skipped}% \else #3% \fi} {\unknownchemical{#2}}}% \newif\ifsmallchemicaltext \let\@@localchemicalstyle\empty \unexpanded\def\setupchemicalformat[#1]% {\processaction [\getvalue{#1\c!size}] [ \v!small=>\def\@@localchemicalformat{\scriptscriptstyle}, \v!medium=>\def\@@localchemicalformat{\ifsmallchemicaltext\scriptscriptstyle\else\scriptstyle\fi}, \v!big=>\def\@@localchemicalformat{\ifsmallchemicaltext\scriptstyle\else\textstyle\fi}, \s!unknown=>\def\@@localchemicalformat{\getvalue{#1\c!size}}]% \processaction [\getvalue{#1\c!textsize}] [ \v!small=>\def\@@localchemicalstyle{\scriptscriptstyle}, \v!medium=>\def\@@localchemicalstyle{\ifsmallchemicaltext\scriptscriptstyle\else\scriptstyle\fi}, \v!big=>\def\@@localchemicalstyle{\ifsmallchemicaltext\scriptstyle\else\textstyle\fi}, \s!unknown=>\def\@@localchemicalstyle{\getvalue{#1\c!textsize}}]% \processaction [\getvalue{#1\c!scale}] [ \v!small=>\def\@@localchemicalscale{500}, \v!medium=>\def\@@localchemicalscale{625}, \v!big=>\def\@@localchemicalscale{750}, \s!unknown=>\def\@@localchemicalscale{\getvalue{#1\c!scale}}]} \def\@@currentchemicalformat {\ifinchemical \@@localchemicalformat \else \@@localchemicalstyle \fi} \def\dosetupchemical[#1]% {\getparameters[\??chemical\s!chemical][#1]% \doifelse{\@@chemicalchemicaloffset}{LOW} {\setlowsubscripts} {\sethighsubscripts}% \setupchemicalformat[\??chemical\s!chemical]% \ignorespaces} \unexpanded\def\setupchemical {\dosingleargument\dosetupchemical} \def\@@dochemicalstyle% % default mapping {\@@chemicalstyle} \def\@@dochemicalcolor% % no mapping yet {} \def\@@chemicalstyle % $inner-style$ % (overloaded) {\@@chemicalchemicalstyle} % $$outer-style$$ \def\@@writechemicalstate#1#2% {} \def\@@beginchemicallocalpicture {\ifcase\chemicaldrawingmode \beginpicture \or \pspicture(0,0)(0,0) % is this permitted ? \or \pushMPdrawing \startMPdrawing %prologues := 1 ; %input mp-tool ; u := 10*\@@chemicalunit; bboxmargin := 0pt ; pickup pencircle scaled 2u ; % ??? \stopMPdrawing \beginpicture \fi} \def\@@endchemicallocalpicture#1#2% {\ifcase\chemicaldrawingmode \endpicture \or \endpspicture \or \resetchemicalcoordinates \setbox2\hbox{\ignoreMPboxdepth\getMPdrawing}% \wd2\zeropoint \ht2\zeropoint \dp2\zeropoint \put {\box2} at 0 0 \endpicture \popMPdrawing \fi} \def\@@beginchemicalpicture#1#2#3#4% {\ifnum\chemicaldrawingmode=1 \pspicture(#1,#3)(#2,#4)% \def\account##1##2{}% \psaxes[axesstyle=none,labels=none,ticks=none](#1,#3)(#2,#4)% \else \beginpicture \setplotarea x from {#1} to {#2}, y from {#3} to {#4} \iffixedchemical \accountingon \def\account##1##2% {\put {} at {##1} {##2} }% \else \accountingoff \def\account##1##2{}% \fi \fi \ignorespaces} \def\@@endchemicalpicture% {\ifcase\chemicaldrawingmode \put {\box\chemicalsymbols} at 0 0 % elders \endpicture \or \rput(0,0){\box\chemicalsymbols}% \endpspicture \or \put {\box\chemicalsymbols} at 0 0 % elders \ifMPdrawingdone \resetchemicalcoordinates \setbox2\hbox{\ignoreMPboxdepth\getMPdrawing}% \wd2\zeropoint \ht2\zeropoint \dp2\zeropoint \put {\box2} at 0 0 % \fi \endpicture \fi} \def\@@setchemicalcoordinatesystem#1% {\edef\@@chemicalunit{#1}% \ifcase\chemicaldrawingmode \setcoordinatesystem units <\@@chemicalunit,\@@chemicalunit> % \or \psset{unit=\@@chemicalunit}% \or \setcoordinatesystem units <\@@chemicalunit,\@@chemicalunit> % \startMPdrawing %input mp-tool ; %prologues := 1 ; u := 10*#1; bboxmargin := 0pt ; pickup pencircle scaled 2u ; % ??? \stopMPdrawing \fi} \ifx\MPdivten\undefined % hack to prevent overflows in mp \def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax} \fi \def\@@setchemicalaxis#1#2#3#4% {\ifcase\chemicaldrawingmode \axis bottom shiftedto y=0 ticks from {#1} to {#2} by 500 / \axis left shiftedto x=0 ticks from {#3} to {#4} by 500 / % \or \psaxes[labels=none,Dx=500,Dy=500](0,0)(#1,#3)(#2,#4)% \or \global\MPdrawingdonetrue % we need to div beforehand because of mp limitations \startMPdrawing x1 := \MPdivten[#1]u ; x2 := \MPdivten[#2]u; y1 := \MPdivten[#3]u ; y2 := \MPdivten[#4]u; draw z1--(x2,y1)--z2--(x1,y2)--cycle ; d := 50u ; dd := 10u ; draw (x1,0)--(x2,0) ; draw (0,y1)--(0,y2) ; for i=d step -d until x1: draw (i,dd)--(i,-dd) ; endfor ; for i=d step d until x2: draw (i,dd)--(i,-dd) ; endfor ; for i=d step -d until y1: draw (-dd,i)--(dd,i) ; endfor ; for i=d step d until y2: draw (-dd,i)--(dd,i) ; endfor ; \stopMPdrawing \fi} \def\@@setsecondchemicalplotsymbol% {\ifcase\chemicaldrawingmode \!!widtha=50.8mm \divide\!!widtha by \@@chemicalresolution\relax \plotsymbolspacing=\!!widtha \setplotsymbol({\vrule\s!height\!!widtha\s!width\!!widtha})% \fi} % Something for Dirk: \newcount \currentchemical %\newif \ifskipchemical \def\setchemicaldimensions#1#2#3% {\bgroup \global\advance\currentchemical by 1 \dimen0=#1\relax \dimen2=#2\relax \dimen4=#3\relax \setxvalue{chemical::\the\currentchemical}% {\noexpand\docommand{\the\dimen0}{\the\dimen2}{\the\dimen4}}% \egroup} \ifx\normalchemicalframe\undefined \let\normalchemicalframe\hbox % hook for educational purposes \fi \unexpanded\def\complexstartchemical[#1]% {\copyparameters [\??chemical][\??chemical\s!chemical] [\c!width,\c!height,\c!left,\c!right,\c!top,\c!bottom, \c!bodyfont,\c!size,\c!scale,\c!state,\c!frame,\c!axis,\c!factor, \c!location,\c!option,\c!alternative,\c!resolution,\c!offset,\c!style, \c!color,\c!rulecolor,\c!rulethickness]% \getparameters [\??chemical] [#1]% % \setupchemicalformat[\??chemical]% % \ifnum\chemicaldrawingmode=2 \resetMPdrawing \fi % \doif{\@@chemicalalternative}{2} {\@@setsecondchemicalplotsymbol}% % \doif{\@@chemicalaxis}\v!on {\let\chemicalframe\hbox}% % \!!counta=250000 \divide\!!counta by \@@localchemicalscale \!!widtha=\@@chemicalbodyfont \divide\!!widtha by \!!counta \@@setchemicalcoordinatesystem{\the\!!widtha}% % % \!!counta = -x \!!countc = -y % \!!countb = +x \!!countd = +y % \def\calculateaxis##1##2##3##4##5% {##1=##3\relax ##2=##4\relax \ifnum##5=0 \ifnum##3=0 \ifnum##4=0 ##1=2000 ##2=2000 \fi \fi \else \ifnum##3=0 \ifnum##4=0 ##1=##5\relax \divide##1 by 2 ##2=##1\relax \else ##1=##5\relax \advance##1 by -##2\relax \fi \else \ifnum##4=0 ##2=##5\relax \advance##2 by -##1\relax \fi \fi \fi}% \fixedchemicalfalse \doif\@@chemicalwidth\v!fit {\edef\@@chemicalwidth {\ifnum\chemicaldrawingmode=1 2000 \else 1 \fi}% \fixedchemicaltrue}% \doif\@@chemicalheight\v!fit {\edef\@@chemicalheight {\ifnum\chemicaldrawingmode=1 2000 \else 1 \fi}% \fixedchemicaltrue}% \doifelse\@@chemicallocation\v!intext {\!!counta=0 \!!countb=0 \!!counta=0 \!!countd=0 } {\calculateaxis \!!counta\!!countb \@@chemicalleft\@@chemicalright\@@chemicalwidth \calculateaxis \!!countc\!!countd \@@chemicalbottom\@@chemicaltop\@@chemicalheight}% % \edef\@@chemheight {\the\!!countc}% \edef\@@chemdepth {\the\!!countd}% \edef\@@chemicaltop {\the\!!countc}% \edef\@@chemicalbottom{\the\!!countd}% % \doifinsetelse\v!on{\@@chemicalframe,\@@chemicalaxis} {\def\@@chemicalborder{\chemicalframe}} {\def\@@chemicalborder{\normalchemicalframe}}% % \setbox0=\hbox\bgroup % this was a \vbox which took \hsize % \@@beginchemicalpicture {-\the\!!counta}{\the\!!countb} {-\the\!!countc}{\the\!!countd}% \doif{\@@chemicalstate}\v!start {\doif\@@chemicalaxis\v!on {\@@setchemicalaxis {-\the\!!counta}{\the\!!countb} {-\the\!!countc}{\the\!!countd}}}% \doifelse\@@chemicaloption\v!test {\def\@@writechemicalstate##1##2% {\convertargument##2\to\ascii \writestatus{##1}{\ascii}}} {\def\@@writechemicalstate##1##2{}}% \ignorespaces} \def\dostartchemical% {\catcode`\^=\superscriptcatcode% t.b.v. \enableduplication \catcode`\_=\subscriptcatcode % t.b.v. de zekerheid \begingroup \inchemicaltrue \def\toptext##1{\gdef\thetoptext{##1}\ignorespaces}\toptext{}% \def\bottext##1{\gdef\thebottext{##1}\ignorespaces}\bottext{}% \def\midtext##1{\gdef\themidtext{##1}\ignorespaces}\midtext{}% \def\@@chemicalpostponed{}% \complexorsimpleempty\startchemical} \unexpanded\def\startchemical {\bgroup % t.b.v. ungrouped floats \dostartchemical} \unexpanded\def\stopchemical {\checkchemicalpicture \@@endchemicalpicture \egroup \ifnum\chemicaldrawingmode=1 \dimen0=\@@chemicalunit \setbox0=\hbox{\lower\@@chemdepth\dimen0\box0}% \ht0=\@@chemheight\dimen0 \dp0=\@@chemdepth\dimen0 \fi \dimen0=\ht0 \advance\dimen0 by \dp0 \inchemicalfalse % enables \chemie{} in text \setbox4=\alignedchemical\themidtext \setbox6=\alignedchemical\thetoptext \setbox8=\alignedchemical\thebottext \setbox4=\hbox to \wd0 {\strut\hss$\vcenter{\box4}$\hss}% \setbox2=\vbox to \dimen0 {\hbox to \wd0{\strut\hss\box6\hss} \vfill \hbox to \wd0{\strut\hss\box8\hss} \vss}% disables the depth \wd0=0pt \wd4=0pt \ht2=\ht0 \dp2=\dp0 \ht4=\ht0 \dp4=\dp0 \@@chemicalborder{\box0\box4\box2}% text on top of chemicals \endgroup \ignorespaces \egroup} % t.b.v. ungrouped floats \def\alignedchemical#1% {\vtop {\def\par{\egroup\hbox\bgroup\strut}% \let\\=\par \let\endgraf=\par \hbox\bgroup\strut#1\egroup}} % \setchemicalcoordinates{#1}{#2} % % #1: verplaatsing in x-richting % #2: verplaatsing in y-richting \newif\ifchemicaldirection \def\checkchemicaldirection#1#2% {\ifchemicaldirection \ifnum#1>0 \advance\horchemical -\chemicaldirection \fi \ifnum#1<0 \advance\horchemical +\chemicaldirection \fi \ifnum#2>0 \advance\verchemical -\chemicaldirection \fi \ifnum#2<0 \advance\verchemical +\chemicaldirection \fi \chemicaldirectionfalse \fi} \def\processchemicaldirection% {\chemicaldirectiontrue\processchemicaltranslate} \def\setchemicalcoordinates#1#2% {\advance\horchemical #1\relax \advance\verchemical #2\relax \checkchemicaldirection{#1}{#2}% \!!counta=-\horchemical\edef\chemicalxoffset{\the\!!counta}% \!!countb=-\verchemical\edef\chemicalyoffset{\the\!!countb}% \ifnum\chemicaldrawingmode=1 % njet \else \setcoordinatesystem point at {\the\horchemical} {\the\verchemical} \fi} \def\resetchemicalcoordinates {\horchemical=0 \verchemical=0 \edef\chemicalxoffset{0}% \edef\chemicalyoffset{0}% \ifnum\chemicaldrawingmode=1 % njet \else \setcoordinatesystem point at 0 0 \fi} \def\restorechemicalcoordinates {%\writestatus{ppchtex}{restoring \the\horchemical,\the\verchemical}% \edef\chemicalxoffset{\the\horchemical}% \edef\chemicalyoffset{\the\verchemical}% \ifnum\chemicaldrawingmode=1 % njet \else \setcoordinatesystem point at {\the\horchemical} {\the\verchemical} \fi} \def\setchemicaltranslate #1 #2 #3 {\setvalue{\s!translate#1}{\setchemicalcoordinates{#2}{#3}}} \def\processchemicaltranslate#1% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{MOV#1} {\ifnum##1=0 \def\chemicaloffset{0}% incompatible change \resetchemicalcoordinates \else \getvalue{\s!translate##1}% \dochemicaloffset{##1}% \def\chemicaloffset{0}% \fi}}% \doprocess[#1]} \def\setchemicaldistance #1 {\setvalue{\s!distance1}{\setchemicalcoordinates{-#1}{ 0}}% \setvalue{\s!distance2}{\setchemicalcoordinates{ 0}{ #1}}% \setvalue{\s!distance3}{\setchemicalcoordinates{ #1}{ 0}}% \setvalue{\s!distance4}{\setchemicalcoordinates{ 0}{-#1}}} \def\setchemicaldirection #1 {\def\chemicaldirection{#1}} \def\processchemicaldistance#1% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{ADJ#1} {\ifnum##1=0 \resetchemicalcoordinates \else \def\@@chemicalpostponed{\getvalue{\s!distance##1}}% \@@chemicalpostponed \fi}}% \doprocess[#1]} \def\setchemicalsubstitute #1 {\setvalue{\s!substitute1}{\setchemicalcoordinates{-#1}{ 0}}% \setvalue{\s!substitute2}{\setchemicalcoordinates{ 0}{ #1}}% \setvalue{\s!substitute3}{\setchemicalcoordinates{ #1}{ 0}}% \setvalue{\s!substitute4}{\setchemicalcoordinates{ 0}{-#1}}} \def\processchemicalsubstitute#1% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{SUB#1} {\ifnum##1=0 \resetchemicalcoordinates \else \def\@@chemicalpostponed{\getvalue{\s!substitute##1}}% \@@chemicalpostponed \fi}}% \doprocess[#1]} % Het is mogelijk een offset of move meerdere malen uit te % voeren, door een nummer voor het commando te plaatsen. \def\chemicalrepeat {1} \def\redoprocesschemical[#1#2]% {\doifinstringelse{#1}{0123456789.} {\edef\chemicalrepeat{\chemicalrepeat#1}% \redoprocesschemical[#2]} {\processchemical[#1#2]% \def\chemicalrepeat{1}}} \def\doprocesschemical[#1#2]#3% {\doifinstringelse{#1}{0123456789.} {\def\chemicalrepeat{#1}% \redoprocesschemical[#2]} {#3}} % \dochemicaloffset{#1} % % #1: binding \def\chemicaloffset{0} \def\processchemicaloffset#1% {\dimen0=62500 sp % real calc on cardinals, funny number \dimen0=\chemicalrepeat\dimen0 \divide\dimen0 by \@@localchemicalscale \!!counta=\dimen0 \def\doprocess[##1##2]% {\doifinstringelse{##1}{128} {\edef\chemicaloffset{\the\!!counta}} {\doifinstringelse{##1}{456} {\edef\chemicaloffset{-\the\!!counta}} {\doifelse{##1}{0} {\edef\chemicaloffset{0}} {\unknownchemical{OFF#1}}}}}% \doprocess[#1]} \def\dochemicaloffset#1% {\ifnum\chemicaloffset=0 \def\undochemicaloffset{}% \else \setchemicalcoordinates{-\chemicaloffset}{0}% \def\undochemicaloffset% {\setchemicalcoordinates{\chemicaloffset}{0}% \def\undochemicaloffset{}}% \fi} \def\processchemicalphantom#1#2% {\setbox0=\hbox {\def\splitoff##1????{##1}% $\@@dochemicalstyle{\@@localchemicalformat\splitoff#2}$}% \dimen0=.25\wd0 \divide\dimen0 by \@@localchemicalscale \!!counta=\dimen0 \doifinstringelse{#1}{128} {\edef\chemicaloffset{\the\!!counta}} {\doifinstringelse{#1}{456} {\edef\chemicaloffset{-\the\!!counta}} {\doifelse{#1}{0} {\edef\chemicaloffset{0}} {\unknownchemical{OF#1:#2}}}}} % \dosetchemicalrotation{#1}{#2} % % #1: cos(phi) % #2: sin(phi) \def\chemicalrotation {1} \def\chemicalangle {0} \def\chemicalxoffset {0} \def\chemicalyoffset {0} \def\setchemicalmirror#1% {\setvalue{\s!mirror#1}{*}} \def\resetchemicalmirror#1% {\resetvalue{\s!mirror#1}} \def\togglechemicalmirror#1% {\doifelse{\getvalue{\s!mirror#1}}{*} {\resetchemicalmirror{#1}} {\setchemicalmirror{#1}}} \def\setchemicalrotation #1 #2 #3 #4 #5 #6 #7 #8 #9 {\setvalue{\s!rotate1.#1}{\dosetchemicalrotation{#2}{#3}}% \setvalue{\s!rotate2.#1}{\dosetchemicalrotation{#4}{#5}}% \setvalue{\s!rotate3.#1}{\dosetchemicalrotation{#6}{#7}}% \setvalue{\s!rotate4.#1}{\dosetchemicalrotation{#8}{#9}}} \def\setchemicalangle #1 #2 #3 #4 #5 {\setvalue{\s!angle1.#1}{\dosetchemicalangle{#2}}% \setvalue{\s!angle2.#1}{\dosetchemicalangle{#3}}% \setvalue{\s!angle3.#1}{\dosetchemicalangle{#4}}% \setvalue{\s!angle4.#1}{\dosetchemicalangle{#5}}} \def\chemicalrotate[#1]% {\doifdefinedelse{\s!mirror#1} {\getvalue{\s!rotate\chemicalrotation.#1\getvalue{\s!mirror#1}}% \getvalue{\s!angle\chemicalrotation.#1\getvalue{\s!mirror#1}}} {\getvalue{\s!rotate\chemicalrotation.#1}% \getvalue{\s!angle\chemicalrotation.#1}}} \def\dosetchemicalangle#1% zwak zie onder {\def\chemicalangle{#1}} \def\dosetchemicalrotation#1#2% {\ifnum\chemicaldrawingmode=1 % njet \else \startrotation by {#1} {#2} %% \stoprotation (t.b.v. testen) \fi} \def\doresetchemicalrotation {\ifnum\chemicaldrawingmode=1 % njet \else \stoprotation \fi} \def\processchemicalrotation#1% {\def\doprocess[##1##2]% {\doifnumberelse{##1} {\def\chemicalrotation{##1}} {\unknownchemical{ROT#1}}}% \doprocess[#1]} % \filtertextelement[#1][#2][#3][#4] % % #1: volgnummer % #2: offset in uitlijningen % #3: lijst met uitlijningen -> \chemicalloca % #4: lijst met teksten -> \chemicaltext \def\setchemicallocation#1% {\doifelse{#1}{} {\edef\chemicalloca{c}} {\edef\chemicalloca{#1}}} \newif\iffixedchemicaltext \def\filterchemicaltextelement[#1][#2][#3][#4]% {\ifchemicaltextconstant \def\chemicaltext{#4}% \setchemicallocation{}% \else \ifnum#1=0\relax \setchemicallocation{}% \else \iffixedchemicaltext \!!counta#2 \else \!!counta=\chemicalrotation \advance\!!counta -1 \multiply\!!counta #2 \advance\!!counta #1 \fi \getfromcommalist[#3][\the\!!counta]% \setchemicallocation\commalistelement \fi \ifchemicalpicture \let\chemicaltext\relax \else \advance\txtchemical 1 \getfromcommalist[#4][\txtchemical]% \let\chemicaltext\commalistelement \fi \fi \fixedchemicaltextfalse} % \putchemicaltext{#1}{#2} % % #1 : x-coordinaat % #2 : y-coordinaat % % \chemicaltext en \chemicalloca worden met \gettextelement % opgehaald uit de tweede set bij \chemie % % Ten behoeve van testdoeleinden wordt gebruik gemaakt van % \chemicalframe in plaats van het meer sjieke, maar tevens % meer trage \framed. \ifx\ruledhbox\undefined \def\chemicalframe#1% {\hbox {\vrule\hskip-.4pt \vbox{\hrule\vskip-.4pt\hbox{#1}\vskip-.4pt\hrule}% \hskip-.4pt\vrule}} \else \def\chemicalframe#1% {\ruledhbox{#1}} \fi \def\doputchemicaltext#1 [#2] at #3 #4 % {\ifnum\chemicaldrawingmode=1 \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\expanded{\rput[#2]{\chemicalangle}(#3,#4){#1}}}% \else \put {#1} [#2] at {#3} {#4} % \fi} \def\dodoifsinglelocation#1#2\\#3% {\ifx#2\relax#3\fi} \def\doifsinglelocationelse#1% {\expandafter\dodoifsinglelocationelse#1\relax\\} \def\putchemicaltext#1#2% {\enablechemicalspecials \ifchemicalpicture \setchemicalpicture{#1}{#2}% \else \doifelse\@@chemicaloption\v!test {\def\@@chemicalframe{\chemicalframe}} {\def\@@chemicalframe{}}% \dosetsubscripts \setbox2=\hbox{\@@dochemicalcolor $\@@dochemicalstyle{\@@localchemicalformat \chemicaltext}$}% \setbox4=\hbox{$\@@dochemicalstyle{\@@localchemicalformat C\normalsubscript2\normapsuperscript2}$}% \setbox6=\hbox{$\@@dochemicalstyle{\@@localchemicalformat O}$}% or C \doresetsubscripts \doifnot\@@chemicallocation\v!intext {\ht2=\ht4 \dp2=\dp4}% \setbox2=\hbox{\@@chemicalframe{\box2}}% \ifdim\wd2>\wd6 \doifelse{#1}{0} {\doifnot{#2}{0}{\wd2=\wd6}} {%\doifsinglelocation\chemicalloca {\doifinset{\chemicalloca}{t,b}{\wd2=\wd6}}}% common ? \fi \expanded {\doputchemicaltext {\noexpand\dowithchemical{\copy2}} % per se \copy2 i.p.v. \box2 [\chemicalloca] at {#1} {#2} } \nomoreaccounting \fi \disablechemicalspecials} \def\setchemicaltextelement #1 #2 #3 {\setvalue{\s!chemicaltextelement#1}{\putchemicaltext{#2}{#3}}} \def\getchemicalfixedtextelement% {\fixedchemicaltexttrue \getchemicaltextelement} \def\getchemicaltextelement[#1][#2][#3][#4][#5]% {\filterchemicaltextelement[#2][#3][#4][#5]% \doifelse{#2}{0} {\dochemicaloffset{#2}% % incompatible change \putchemicaltext{0}{0}% \undochemicaloffset} % incompatible change {\chemicalrotate[#2]% \dochemicaloffset{#2}% \def\chemicaltextelementnumber{#2}% \getvalue{\s!chemicaltextelement#1}% \getvalue{\s!chemicaltextelement#11}% \getvalue{\s!chemicaltextelement#12}% \getvalue{\s!chemicaltextelement#13}% \undochemicaloffset}} \def\processchemicaltextelement#1#2#3#4#5% {\def\doprocess[##1##2##3##4##5]% {\doifelse{##1}{?} {\doprocess[1..\maxchemical ????]} {\doifchemicalnumber{##1}{#1#2} {\doifelse{##2##3}{..} {\doifchemicalnumber{##4}{#1#2} {\getchemicaltextelement[#1][##1][#4][#5][#3]% \doifnot{##1}{##4} {\!!counta=##1\relax \advance\!!counta by 1 \edef\nextsegment{\the\!!counta}% \doprocess[\nextsegment..##4##5]}}} {\getchemicaltextelement[#1][##1][#4][#5][#3]% \doifnot{##2}{?}{\doprocess[##2##3##4##5]}}}}}% \doprocess[#2]% \smallchemicaltextfalse} \def\processchemicalsmalltextelement% {\smallchemicaltexttrue\processchemicaltextelement} \def\processchemicalsmalltextconstant% {\smallchemicaltexttrue\processchemicaltextconstant} \def\processchemicalunrotatedtextelement#1#2#3#4#5#6% {\bgroup \xdef\@@xxx{0}% \xdef\@@yyy{0}% \def\putchemicaltext##1##2% {\xdef\@@xxx{##1}% \xdef\@@yyy{##2}}% \getvalue{\s!chemicaltextelement#1}% \egroup \bgroup \def\doputchemicaltext##1 [##2] at ##3 ##4 % {\ifnum\chemicaldrawingmode=1 \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\rput{\chemicalangle}(\@@xxx,\@@yyy){\expanded{\rput[##2](##3,##4){##1}}}}% \else \put {\stoprotation \setcoordinatesystem point at 0 0 \expanded{\put {##1} [##2] at {##3} {##4} }} at {\@@xxx} {\@@yyy} \fi}% \processchemicaltextelement{#2}{#3}{#4}{#5}{#6}% \egroup} \newif\ifchemicaltextconstant \def\processchemicaltextconstant#1#2#3#4% {\chemicaltextconstanttrue \let\@@oldchemicalframe\@@chemicalframe \let\@@chemicalframe\relax \processchemicaltextelement{#1}{#2}{#3}{#4}{}% \let\@@chemicalframe\@@oldchemicalframe \chemicaltextconstantfalse} % \plotchemicalline{#1}{#2}{#3}{#4} % % #1: x-coordinaat beginpunt % #2: y-coordinaat beginpunt % #3: x-coordinaat eindpunt % #4: y-coordinaat eindpunt \newconstant\chemicallinetype \def\doplotchemicalline {\!!counte=\!!countc \advance\!!counte by -\!!counta \!!countf=\!!countd \advance\!!countf by -\!!countb \bgroup \ifcase\chemicaldrawingmode \ifcase\chemicallinetype % 0 : normal line \plot {\!!counta} {\!!countb} {\!!countc} {\!!countd} /% \or % 1 : normal arrow \arrow <5pt> [.2,.67] from {\!!counta} {\!!countb} to {\!!countc} {\!!countd} \or % 2 : reverse arrow \arrow <5pt> [.2,.67] from {\!!countc} {\!!countd} to {\!!counta} {\!!countb} \or % 3 : unrotated line \put {\stoprotation \setcoordinatesystem point at 0 0 \plot 0 0 {\!!counte} {\!!countf} /} [\chemicallineposition] at {\!!counta} {\!!countb} \else % 4 : dashed line \findlength {\plot {\!!counta} {\!!countb} {\!!countc} {\!!countd} /}% \setdashesnear <2pt> for <\totalarclength>% \plot {\!!counta} {\!!countb} {\!!countc} {\!!countd} /% \fi \or \ifcase\chemicallinetype \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline(\!!counta,\!!countb)(\!!countc,\!!countd)}% \or \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline{->}(\!!counta,\!!countb)(\!!countc,\!!countd)}% \or \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline{<-}(\!!counta,\!!countb)(\!!countc,\!!countd)}% \or \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\expanded{\rput[\chemicallineposition]{-\chemicalangle}% (\!!counta,\!!countb){\psline(0,0)(\!!counte,\!!countf)}}}% \else \psset{linestyle=dashed}% \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline(\!!counta,\!!countb)(\!!countc,\!!countd)}% \fi \or \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; x3 := \MPdivten[\the\!!counte]u ; y3 := \MPdivten[\the\!!countf]u ; \ifcase\chemicallinetype % 0 : normal line draw ((z1--z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \or % 1 : normal arrow drawarrow ((z1--z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \or % 2 : reverse arrow drawarrow ((z2--z1) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \or % 3 : unrotated line % nog \chemicalineposition: t/b draw (origin--z3) shifted (z1 rotatedaround(origin,-\chemicalangle)) shifted z0 ; \else % 4 : dashed line draw ((z1--z2) rotatedaround(origin,-\chemicalangle)) shifted z0 dashed dashpattern(on 5.5u off 6u) ; \fi \stopMPdrawing \fi \egroup \account\!!counta\!!countb \account\!!countc\!!countd} \def\plotchemicalline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \doplotchemicalline} \def\plotchemicalfactorline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifdim\@@chemicalfactor\onepoint=\onepoint \else \scratchdimen\!!counta\s!sp \multiply\scratchdimen1000 \scratchdimen\@@chemicalfactor\scratchdimen \divide\scratchdimen1000 \!!counta\scratchdimen \scratchdimen\!!countc\s!sp \multiply\scratchdimen1000 \scratchdimen\@@chemicalfactor\scratchdimen \divide\scratchdimen1000 \!!countc\scratchdimen \fi \doplotchemicalline} \def\plotchemicalzline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; filldraw (( \ifnum\chemicalangle>180 z1--z2 \else\ifnum\chemicalangle<90 z1--(z2 shifted (-2u,+2u))--(z2 shifted (+2u,-2u)) \else\ifnum\chemicalangle=90 (z1 shifted (-2u,+2u))--(z1 shifted (+2u,-2u))-- (z2 shifted (+2u,+2u))--(z2 shifted (-2u,-2u)) \else (z1 shifted (+2u,+2u))--(z1 shifted (-2u,-2u))--z2 \fi\fi\fi --cycle) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \else \doplotchemicalline \ifnum\chemicalangle>180 \else \ifnum\chemicalangle=90 \advance\!!counta by -20 \advance\!!countc by -20 \doplotchemicalline \advance\!!counta by 40 \advance\!!countc by 40 \else\ifnum\chemicalangle<90 \advance\!!countc by -20 \advance\!!countd by +20 \doplotchemicalline \advance\!!countc by +40 \advance\!!countd by -40 \else \advance\!!counta by 20 \advance\!!countb by 20 \doplotchemicalline \advance\!!counta by -40 \advance\!!countb by -40 \fi\fi \fi \doplotchemicalline \fi} \def\plotchemicaldeltaline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; filldraw ((z1--(z2 rotatedaround(z1,5))--(z2 rotatedaround(z1,-5)) --cycle) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \account{#1}{#2}% \account{#3}{#4}% \else \doplotchemicalline \advance\!!countc by 16 \advance\!!countd by -21 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -8 \advance\!!countd by 14 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \fi} \def\setchemicallinesegment #1 #2 #3 #4 #5 {\setvalue{\s!chemicallinesegment#1}{\plotchemicalline{#2}{#3}{#4}{#5}}} \def\setchemicalfactorlinesegment #1 #2 #3 #4 #5 {\setvalue{\s!chemicallinesegment#1}{\plotchemicalfactorline{#2}{#3}{#4}{#5}}} \def\getchemicallinesegment[#1][#2]% {\chemicalrotate[#1]% \dochemicaloffset{#1}% \getvalue{\s!chemicallinesegment#2}% \getvalue{\s!chemicallinesegment#21}% \getvalue{\s!chemicallinesegment#22}% \undochemicaloffset} \def\getprivatechemicallinesegment[#1][#2]% {\chemicalrotate[#1]% \getvalue{\s!chemicallinesegment#2#1}} \def\doprocesschemicallinesegment#1#2#3#4#5% {\chemicallinetype#1\relax \def\chemicallineposition{#2}% \def\doprocess[##1##2##3##4##5]% {\doifelse{##1}{?} {\doprocess[1..\maxchemical ????]} {\doifchemicalnumber{##1}{#4#5} {\doifelse{##2##3}{..} {\doifchemicalnumber{##4}{#4#5} {#3[##1][#4]% \doifnot{##1}{##4} {\!!counta=##1\relax \advance\!!counta by 1 \edef\nextsegment{\the\!!counta}% \doprocess[\nextsegment..##4##5]}}} {#3[##1][#4]% \doifnot{##2}{?} {\doprocess[##2##3##4##5]}}}}}% \doprocess[#5]} \def\processchemicallinesegment {\doprocesschemicallinesegment0c\getchemicallinesegment} \def\processchemicalzlinesegment#1#2% {%\doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \bgroup \def\plotchemicalline{\plotchemicalzline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processchemicaldeltalinesegment#1#2% {%\doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \bgroup \def\plotchemicalline{\plotchemicaldeltaline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processprivatechemicallinesegment% {\doprocesschemicallinesegment0c\getprivatechemicallinesegment} \def\processchemicaldownarrowsegment% {\doprocesschemicallinesegment1c\getchemicallinesegment} \def\processchemicaluparrowsegment% {\doprocesschemicallinesegment2c\getchemicallinesegment} \def\processchemicalunrotatedlinesegment#1% {\doprocesschemicallinesegment3{#1}\getchemicallinesegment} \def\processchemicaldashedlinesegment {\doprocesschemicallinesegment4c\getchemicallinesegment} \def\plotchemicaldasheddeltaline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; z20 = z2 rotatedaround(z1,+5) ; z21 = z2 rotatedaround(z1,-5) ; draw (z1 rotatedaround(origin,-\chemicalangle)) shifted z0 ; save n ; n := 5 ; for i=1 upto n : draw ((((z20--z21) shifted -z2) shifted (i/n)[z2,z1]) rotatedaround(origin,-\chemicalangle)) shifted z0 ; endfor \stopMPdrawing \account{#1}{#2}% \account{#3}{#4}% \else \doplotchemicalline \advance\!!countc by 16 \advance\!!countd by -21 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -8 \advance\!!countd by 14 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \fi} \def\plotchemicalwavyline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; save d ; pair d ; d := z2 rotatedaround(z1,+5) shifted -z2 ; save n ; n := 4 ; draw ((for i=0 upto n-1 : ((i)/n)[z1,z2] .. ((i+.25)/n)[z1,z2] shifted d .. ((i+.50)/n)[z1,z2] .. ((i+.75)/n)[z1,z2] shifted -d .. endfor z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \account{#1}{#2}% \account{#3}{#4}% \else \doplotchemicalline \advance\!!countc by 16 \advance\!!countd by -21 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -8 \advance\!!countd by 14 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \fi} \def\processchemicaldasheddeltalinesegment#1#2% {\bgroup \def\plotchemicalline{\plotchemicaldasheddeltaline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processchemicalwavylinesegment#1#2% {\bgroup \def\plotchemicalline{\plotchemicalwavyline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processchemicalopenend#1#2% {\doprocesschemicallinesegment0c\doprocesschemicalopenend{#1}{#2}} \def\doprocesschemicalopenend[#1][#2]% {\chemicalrotate[#1]% \dochemicaloffset{#1}% \ifcase\chemicaldrawingmode \beginpicture \setquadratic\plot 300 0 400 0 500 0 550 75 600 0 650 -75 700 0 750 75 800 0 850 -75 900 0 950 0 1050 0 / \endpicture \or \rput{-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline(300,0)(500,0)% \rput(500,0){\psplot[yunit=75,plotstyle=curve]{0}{720}{x sin}}% \psline(950,0)(1050,0)}% \or \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; draw (((30.0u,0)--(50.0u,0){up}..(55.0u,7.5u).. (60.0u,0)..(65.0u,-7.5u)..(70.0u,0).. (75.0u,7.5u)..(80.0u,0)..(85.0u,-7.5u)..{up} (90.0u,0)--(105.0u,0)) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \fi \undochemicaloffset} % \plotchemicalcircle{#1}{#2}{#3}{#4} % % #1: lengte van de boog in graden % #2: x-coordinaat eindpunt % #3: y-coordinaat eindpunt \newif\ifchemicaldotted \def\plotchemicalcircle#1#2#3#4#5#6% {\bgroup \ifcase\chemicaldrawingmode \ifchemicaldotted \findlength{\circulararc {#4} degrees from {#5} {#6} center at {0} {0} }% \divide\totalarclength by 6 \def\b{\the\totalarclength}% \divide\totalarclength by 2 \def\a{\the\totalarclength}% \setdashpattern <\a,\b,\b,\b,\b,\b,\a> \fi \circulararc {#4} degrees from {#5} {#6} center at {0} {0} % \or \ifchemicaldotted \psset{linestyle=dashed}% \fi \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psarc(0,0){#3}{#1}{#2}}% \or \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing r := \MPdivten[#3]*2u; x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; draw ((subpath (#1/45,#2/45) of (fullcircle scaled (r))) rotatedaround (origin,\chemicalangle+150)) shifted z0 \ifchemicaldotted dashed withdots \fi ; \stopMPdrawing \fi \egroup} \def\setchemicalcircsegment #1 #2 #3 #4 #5 #6 #7 {\setvalue{\s!chemicalcircsegment#1}{\plotchemicalcircle{#2}{#3}{#4}{#5}{#6}{#7}}} \def\getchemicalcircsegment[#1][#2]% {\chemicalrotate[#1]% \getvalue{\s!chemicalcircsegment#2}} \def\doprocesschemicalcircsegment#1#2% {\def\doprocess[##1##2##3##4##5]% {\doifelse{##1}{?} {\doprocess[1..\maxchemical ????]} {\doifchemicalnumber{##1}{#1#2} {\doifelse{##2##3}{..} {\doifchemicalnumber{##4}{#1#2} {\getchemicalcircsegment[##1][#1]% \doifnot{##1}{##4} {\!!counta=##1\relax \advance\!!counta by 1 \edef\nextsegment{\the\!!counta}% \doprocess[\nextsegment..##4##5]}}} {\getchemicalcircsegment[##1][#1]% \doifnot{##2}{?} {\doprocess[##2##3##4##5]}}}}}% \doprocess[#2]} \def\processchemicalcircsegment% {\chemicaldottedfalse\doprocesschemicalcircsegment} \def\processchemicaldottsegment% {\chemicaldottedtrue\doprocesschemicalcircsegment} \let\endchemicalpicture = \relax \let\checkchemicalpicture = \relax \let\nomoreaccounting = \relax \newif\ifchemicalpicture \def\beginchemicalpicture#1% NO PSTRICKS SUPPORT YET {\checkchemicalpicture \bgroup % DOES NOT HANDLE AUTOWIDTH/HEIGHT \chemicalpicturetrue \processchemical[#1]} \def\setchemicalpicture#1#2% {\chemicalpicturefalse \def\endchemicalpicture% {\@@endchemicallocalpicture{#1}{#2}% \egroup \ifnum\chemicaldrawingmode=1 \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\expanded{\rput[\chemicalloca]{\chemicalangle}(#1,#2){\box\nextbox}}}% \else \expanded{\put{\box\nextbox}[\chemicalloca] at {#1} {#2} } \fi \egroup}% \def\checkchemicalpicture% {\ifx\endchemicalpicture\relax \else \writestatus{ppchtex}{missing end of picture (PE)}% \endchemicalpicture \fi}% \setbox\nextbox=\hbox\bgroup \@@beginchemicallocalpicture % alternatief: gewoon accounting, en zelf l,r afhandelen \ifnum\chemicaldrawingmode=1 % njet \else \accountingon \let\nomoreaccounting=\accountingoff \fi} \def\doskipchemical[#1][#2]% {{\tt[ppchtex]}} \def\skipchemical% {\dodoubleargument\doskipchemical} \def\complexchemical% met \expandafter {\ifinchemical \expandafter\dochemical \else \writestatus{ppchtex}{the [][]-alternative is not permitted here}% \expandafter\skipchemical \fi} \newif\ifinnerchemical \def\dosimplechemical#1#2#3% {\doifdefinedelse{\??chemical\c!location} {\writestatus{ppchtex}{the {}{}-alternative is not permitted here}} {\ifinnerchemical \let\chemicalsign = \chemicalinnersign \let\chemicalmolecule = \chemicalinnermolecule \let\chemicalsinglearrow = \chemicalsingleinnerarrow \let\chemicaldoublearrow = \chemicaldoubleinnerarrow \let\chemicaltwintiparrow = \chemicaltwintipinnerarrow \else \let\chemicalsign = \chemicaloutersign \let\chemicalmolecule = \chemicaloutermolecule \let\chemicalsinglearrow = \chemicalsingleouterarrow \let\chemicaldoublearrow = \chemicaldoubleouterarrow \let\chemicaltwintiparrow = \chemicaltwintipouterarrow \fi \disablechemicalspecials \processallactionsinset [#1] [ HIGH=>\sethighsubscripts, LOW=>\setlowsubscripts, PLUS=>\chemicalsign{+}, GIVES=>\chemicalsinglearrow{#2}{#3}, EQUILIBRIUM=>\chemicaldoublearrow{#2}{#3}, MESOMERIC=>\chemicaltwintiparrow{#2}{#3}, SINGLE=>\singlechemicalbond, DOUBLE=>\doublechemicalbond, TRIPLE=>\triplechemicalbond, +=>\chemicalsign{+}, ->=>\chemicalsinglearrow{#2}{#3}, <->=>\chemicaldoublearrow{#2}{#3}, <>=>\chemicaltwintiparrow{#2}{#3}, -=>\singlechemicalbond, --=>\doublechemicalbond, ---=>\triplechemicalbond, \s!unknown=>\enablechemicalspecials \chemicalmolecule{\commalistelement}{#2}{#3}]}} \def\dosimplechemicalA#1#2#3% % evt: {#1,\relax} {\let\chemicalspace=\relax \@EA\dosimplechemical\@EA{\@@chemicalchemicaloffset,#1}{#2}{#3}% \egroup} \def\dosimplechemicalB#1#2#3% {\dosimplechemical{#1}{#2}{#3}% \egroup} \def\dosimplechemicalC#1#2#3% {$\simplechemical{#1}{#2}{#3}$% \egroup} % erbij \def\simplechemical {\ifinner \innerchemicaltrue \else \innerchemicalfalse \fi \bgroup \catcode`\^=\superscriptcatcode % t.b.v. \enableduplication \catcode`\_=\subscriptcatcode % t.b.v. de zekerheid \ifmmode \ifinnerchemical \def\next{\dotriplegroupempty\dosimplechemicalA}% \else \def\next{\dotriplegroupempty\dosimplechemicalB}% \fi \else \def\next{\dotriplegroupempty\dosimplechemicalC}% \fi \next} \definecomplexorsimple\chemical \def\dogotochemical#1#2% {\def\dowithchemical% % experiment {\localgotochemical{#1}}% % experiment \chemical} % experiment \def\gotochemical% % experiment {\dosingleargument\dogotochemical} % experiment \def\dododochemical#1[#2][#3]% % experiment {\def\simpledododochemical% % experiment {#1[#2][#3]}% % experiment \def\complexdododochemical[##1]% % experiment {\def\dowithchemical% % experiment {\localthisischemical{#2}}% % experiment #1[#3][##1]}% % experiment \complexorsimple\dododochemical} % experiment \def\dodochemical[#1][#2]% {\ignorespaces \ifinchemical \drawchemical[#1][#2]% \ignorespaces \else \startchemical[\c!location=\v!intext]% \drawchemical[#1][#2]% \expandafter\stopchemical \fi \ignorespaces} \def\dochemical[#1]% {\def\simpledochemical% {\@@writechemicalstate{ppchtex}{[#1][]}% \dodochemical[#1][]}% % \def\complexdochemical[##1]% {\@@writechemicalstate{ppchtex}{[#1][##1]}% \txtchemical=0% \dodochemical[#1][##1]}% % \def\complexdochemical[##1]% % experiment {\@@writechemicalstate{ppchtex}{[#1][##1]}% % experiment \txtchemical=0% % experiment \dododochemical\dodochemical[#1][##1]}% % experiment % \complexorsimple\dochemical} % \processlocalchemicals{#1} % % #1: commando's \def\dodoprocesschemical#1% {\processchemical[#1????]} \def\processlocalchemicals#1% {\processcommalist[#1]\dodoprocesschemical} % \drawchemical[#1][#2] % % #1: bindingen enz. % #2: atomen enz. \def\localdodochemical[#1][#2]% {\@@writechemicalstate{ppchtex}{[#1][#2]}% %\bgroup % koppelen en afmetingen gaat fout, vandaar: \advance\levchemical 1 \letvalue{\??chemical\s!unknown\the\levchemical}\unknownchemical \setevalue{\??chemical\c!text\the\levchemical}{\the\txtchemical}% \txtchemical=0 \dodochemical[#1][#2]% % \@EA\txtchemical\@EA\csname\??chemical\c!text\the\levchemical\endcsname \txtchemical\csname\??chemical\c!text\the\levchemical\endcsname \@EA\let\@EA\unknownchemical\csname\??chemical\s!unknown\the\levchemical\endcsname \advance\levchemical -1 %\egroup \ignorespaces} \def\drawchemical[#1][#2]% {\ignorespaces \def\dodochemical[##1][##2]% {\drawchemical[##1][##2]% \ignorespaces}% \def\dochemical[##1]% {\def\simpledochemical% {\@@writechemicalstate{ppchtex}{[##1][#2]}% \dodochemical[##1][#2]% \ignorespaces}% \def\complexdochemical[####1]% {\dododochemical\localdodochemical[##1][####1,#2]}% \complexorsimple\dochemical}% \doif\@@chemicalstate\v!start {\doifelse\chemicalname\s!unknown {\getvalue{\s!executechemical\defaultchemical}[#2]} {\getvalue{\s!executechemical\chemicalname}[#2]}% \def\unknownchemical##1% {\processunknownchemical[##1][#2]}% \processcommalist[\@@chemicaloffset,#1]\dodoprocesschemical}% \ignorespaces} \unexpanded\def\chemicaloxidation#1#2#3% {\chemicaltop {\ifnum#20=0 0% \else #1\expandafter\uppercase\expandafter{\romannumeral#2}% \fi} {#3}} \def\chemicaltfraction{\ifinchemical.60\else.8\fi} \def\chemicalbfraction{\ifinchemical.45\else.6\fi} \def\chemicallfraction{\ifinchemical.1\else.1\fi} \def\chemicalrfraction{\ifinchemical.1\else.1\fi} \def\chemicaltighttext {\def\chemicaltfraction{\ifinchemical.3\else.6\fi}% \def\chemicalbfraction{\ifinchemical.2\else.4\fi}% \def\chemicallfraction{\ifinchemical 0\else 0\fi}% \def\chemicalrfraction{\ifinchemical 0\else 0\fi}} \def\dochemicaltop#1#2#3#4% {\vbox {\@@dochemicalcolor \baselineskip=\chemicaltfraction\baselineskip \lineskip0pt \halign {#1###2\cr $\@@dochemicalstyle{\scriptscriptstyle#3}$\cr $\@@dochemicalstyle{\@@currentchemicalformat#4}$\cr}}} \def\dochemicalbottom#1#2#3#4% {\vtop {\@@dochemicalcolor \baselineskip=\chemicalbfraction\baselineskip \lineskip0pt \halign {#1###2\cr $\@@dochemicalstyle{\@@currentchemicalformat#4}$\cr $\@@dochemicalstyle{\scriptscriptstyle#3}$\cr}}} \def\chemicalleft#1#2% {\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\scriptscriptstyle#1}$% $\@@dochemicalstyle{\@@currentchemicalformat\hskip\chemicallfraction em#2}$}} \def\chemicalright#1#2% {\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\@@currentchemicalformat#2\hskip\chemicalrfraction em}$% $\@@dochemicalstyle{\scriptscriptstyle#1}$}} \def\chemicalcentered#1% {\setbox0=\hbox{$\@@dochemicalstyle{\scriptscriptstyle#1}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \dimen0=.5\ht2 \advance\dimen0 by -.5\ht0 \advance\dimen0 by \dp0 \hbox{\@@dochemicalcolor\raise\dimen0\box0}} \def\chemicalleftcentered#1#2% {\hbox {\@@dochemicalcolor \chemicalcentered{#1}% $\@@dochemicalstyle{\@@currentchemicalformat\hskip\chemicallfraction em#2}$}} \def\chemicalrightcentered#1#2% {\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\@@currentchemicalformat#2\hskip\chemicalrfraction em}$% \chemicalcentered{#1}}} \def\chemicaltop {\dochemicaltop \hss \hss } \def\chemicallefttop {\dochemicaltop \relax \hss } \def\chemicalrighttop {\dochemicaltop \hss \relax} \def\chemicalbottom {\dochemicalbottom \hss \hss } \def\chemicalleftbottom {\dochemicalbottom \relax \hss } \def\chemicalrightbottom {\dochemicalbottom \hss \relax} \def\chemicaltopleft #1{\chemicalleft {\chemicallefttop {#1}{}}} \def\chemicalbottomleft #1{\chemicalleft {\chemicalleftbottom{#1}{}}} \def\chemicaltopright #1{\chemicalright{\chemicallefttop {#1}{}}} \def\chemicalbottomright#1{\chemicalright{\chemicalleftbottom{#1}{}}} \def\chemicalsmashedleft#1% {\hbox\bgroup \@@dochemicalcolor \setbox0=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat#1}$}% \wd2=\wd0 \box2 \egroup} \def\chemicalsmashedmiddle#1% {\hbox\bgroup \@@dochemicalcolor \setbox0=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat#1}$}% \hbox{\hskip-.5\wd2\hskip.5\wd0\box2} \egroup} \def\chemicalsmashedright#1% {\hbox\bgroup \@@dochemicalcolor \setbox0=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat#1}$}% \hbox to \wd0{\hskip-\wd2\hskip\wd0\box2}% \egroup} \def\+{\tabalign} % is \long in Plain \def\chemicalforever#1#2% {\bgroup \setbox0=\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\scriptscriptstyle\hskip-.15em#2}$}% \wd0=0pt \big#1\normapsubscript{\hskip.1em\box0}% \egroup} \def\disablechemicalspecials% {\def\+##1{##1}\def\-##1{##1}% \def\[{[}\def\]{]}% \def\1{}\def\2{}\def\3{}\def\4{}\def\5{}\def\6{}\def\7{}% \def\X{}% \def\T{}\def\B{}\def\L{}\def\R{}\def\LC{}\def\RC{}% \def\TL{}\def\BL{}\def\TR{}\def\BR{}% \def\LT{}\def\LB{}\def\RT{}\def\RB{}% \def\SL{}\def\SM{}\def\SR{}} \def\enablechemicalspecials% {\def\+{\dodoublegroupempty\chemicaloxidation{+}}% {} needed! \def\-{\dodoublegroupempty\chemicaloxidation{-}}% {} needed! \def\[{\dodoublegroupempty\chemicalforever {[}}% {} needed! \def\]{\dodoublegroupempty\chemicalforever {]}}% {} needed! \def\1{\chemicaloxidation\relax1}% \def\2{\chemicaloxidation\relax2}% \def\3{\chemicaloxidation\relax3}% \def\4{\chemicaloxidation\relax4}% \def\5{\chemicaloxidation\relax5}% \def\6{\chemicaloxidation\relax6}% \def\7{\chemicaloxidation\relax7}% \def\X{\chemicaltighttext}% \def\T{\chemicaltop}% \def\B{\chemicalbottom}% \def\L{\chemicalleft}% \def\LC{\chemicalleftcentered}% \def\R{\chemicalright}% \def\RC{\chemicalrightcentered}% \def\TL{\chemicaltopleft}% \def\BL{\chemicalbottomleft}% \def\TR{\chemicaltopright}% \def\BR{\chemicalbottomright}% \def\LT{\chemicallefttop}% \def\LB{\chemicalleftbottom}% \def\RT{\chemicalrighttop}% \def\RB{\chemicalrightbottom}% \def\SL{\chemicalsmashedleft}% \def\SM{\chemicalsmashedmiddle}% \def\SR{\chemicalsmashedright}} % \reversechemical#1#2#3 % % #1: prefix % #2: volgnummer enz % #3: tegengestelde volgnummers \def\reversechemical#1#2#3% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{#1#2}% {\getfromcommalist[#3][##1]% \let\reversechemicalaction=\commalistelement \processchemical[#1\reversechemicalaction##2]}}% \doprocess[#2]} % \processunknownchemical[#1????][#2] % % #1: bindingen enz. % #2: atomen enz. \def\defaultchemical% {SIX} \def\processunknownchemical[#1????][#2]% {\processaction [#1] [ SAVE=>\executechemicalSAVE, RESTORE=>\executechemicalRESTORE, HIGH=>\sethighsubscripts, LOW=>\setlowsubscripts, \s!default=>, \s!unknown=>\doifdefinedelse{\s!executechemical#1} {\def\chemicalrotation{1}% \def\chemicaloffset{0}% \doifdefined{\s!executechemical#1} {\getvalue{\s!executechemical#1}[#2]}% \@@chemicalpostponed} {\getpredefinedchemical{#1}}]} \newcount\chemicalstack \setvalue{\s!chemical\c!x1}{0} \setvalue{\s!chemical\c!y1}{0} \def\executechemicalSAVE {%\writestatus{ppchtex}{saving \the\horchemical,\the\verchemical}% \advance\chemicalstack by 1 \letvalue {\s!chemical n\the\chemicalstack}=\chemicalname %\letvalue {\s!chemical p\the\chemicalstack}=\@@chemicalpostponed \setevalue{\s!chemical x\the\chemicalstack}{\the\horchemical}% \setevalue{\s!chemical y\the\chemicalstack}{\the\verchemical}} \def\restorechemicalvalues#1% {\let\oldprocesschemical=\processchemical \doifdefined{\s!executechemical#1}{\getvalue{\s!executechemical#1}[]}% \let\processchemical=\oldprocesschemical} \def\executechemicalRESTORE {\ifnum\chemicalstack=0\relax \horchemical=\getvalue{\s!chemical x1}\relax \verchemical=\getvalue{\s!chemical y1}\relax \else \restorechemicalvalues{\getvalue{\s!chemical n\the\chemicalstack}}% %\@EA\let\@EA\@@chemicalpostponed\@EA=\csname\s!chemical p\the\chemicalstack\endcsname \let\@@chemicalpostponed=\relax \horchemical=\getvalue{\s!chemical x\the\chemicalstack}\relax \verchemical=\getvalue{\s!chemical y\the\chemicalstack}\relax \advance\chemicalstack by -1 \fi \restorechemicalcoordinates} % De onderstaande macro's zijn verantwoordelijk voor het zetten % van de + en pijlen. De +, en dus ook de pijlen, worden omhoog % gehaald. Dit oogt m.i. fraaier. \def\chemicalinnerclip#1% {{\setbox0=\hbox{#1}\ht0\ht\strutbox\dp0\dp\strutbox\box0}} \def\chemicalraise#1#2% {\chemicalinnerclip {\setbox0=\hbox{$#1+$}% \raise\dp0\hbox{$#1#2$}}} \def\chemicalinnersign#1% todo: \@@chemicaltextcolor {\chemicalraise{\@@localchemicalstyle}{#1}} \def\chemicaloutersign#1% {\chemicalraise{}{\@@dochemicalcolor#1}} \def\chemicalsingleinnerarrow#1#2% {\chemicalraise{\@@localchemicalstyle}{\longrightarrow}} \def\chemicaldoubleinnerarrow#1#2% todo: \@@chemicaltextcolor {\chemicalinnerclip {\lower.2ex\hbox {\setbox0=\hbox{$\@@localchemicalstyle\longrightarrow$}% \setbox2=\hbox{$\@@localchemicalstyle\longleftarrow$}% \wd0=0pt\raise\ht0\box0\box2}}} \def\chemicaltwintipinnerarrow#1#2% todo: \@@chemicaltextcolor {\chemicalinnerclip {\setbox0=\hbox{\chemicalraise{\@@localchemicalstyle}{\longrightarrow}}% \setbox2=\hbox{\chemicalraise{\@@localchemicalstyle}{\longleftarrow}}% \wd0=0pt\box0\box2}} \def\dochemicalouterarrow#1#2#3% {\bgroup \setbox0=\hbox{$\longrightarrow$}% \setbox2=\hbox{$\@@dochemicalstyle{\scriptstyle\quad#2\quad}$}% \setbox4=\hbox{$\@@dochemicalstyle{\scriptstyle\quad#3\quad}$}% \dimen2=\wd0 % \dimen0 is used elsewhere \ifdim\wd2>\dimen2 \dimen0=\wd2 \fi \ifdim\wd4>\dimen2 \dimen0=\wd4 \fi \chemicaloutermolecule {#1} {\ifdim\ht2>\zeropoint\box2\fi} % expands to \empty in test {\ifdim\ht4>\zeropoint\box4\fi}% % expands to \empty in test \egroup} \def\chemicalsingleouterarrow {\dochemicalouterarrow {\hbox to \dimen2{\rightarrowfill}}} \def\chemicaldoubleouterarrow {\dochemicalouterarrow {\lower.5\ht0\vbox {\offinterlineskip \hbox to \dimen2{\rightarrowfill} \hbox to \dimen2{\leftarrowfill}}}} \def\chemicaltwintipouterarrow {\dochemicalouterarrow {\hbox {\hbox to \dimen2{\rightarrowfill}% \hskip-\dimen2 \hbox to \dimen2{\leftarrowfill}}}} \def\chemicalinnermolecule#1#2#3% no mathop here, can generate space {\chemicalspace % todo: \@@chemicaltextcolor \chemicalinnerclip {\dosetsubscripts $\@@dochemicalstyle{\@@localchemicalstyle\strut#1}$% \doresetsubscripts}% \chemicalspace} \def\chemicaloutermolecule#1#2#3% {\chemicalspace \bgroup \@@dochemicalcolor \setbox0=\hbox % else the font is reset {\dosetsubscripts \hbox{$\@@dochemicalstyle{\strut#1}$}% \doresetsubscripts}% \mathop{\box0}% \ifthirdargument \doifnot{#2}{}{\normapsuperscript{\@@dochemicalstyle{\strut#2}}}% \doifnot{#3}{}{\normapsubscript {\@@dochemicalstyle{\strut#3}}}% \else \doifnot{#2}{} {\normapsubscript{\@@dochemicalstyle{\strut#2}}}% \fi \egroup \chemicalspace} \def\chemicalsinglepicturearrow#1% {\lower.5ex\hbox {\@@dochemicalstyle $\chemicalspace \buildrel \@@dochemicalstyle{\scriptstyle\quad#1\quad}% \over{\overrightarrow {\hphantom{\@chemicalstyle{\scriptstyle\quad#1\quad}}}}% \chemicalspace$}} \def\chemicaldoublepicturearrow#1% {\lower.5ex\hbox {\@@dochemicalstyle $\chemicalspace \buildrel \@@dochemicalstyle{\scriptstyle\quad#1\quad}% \over{\overrightarrow{\overleftarrow {\hphantom{\@@dochemicalstyle{\scriptstyle\quad#1\quad}}}}}% \chemicalspace$}} % Bij de in-line bindingen wordt gebruik gemaakt van % een \hrule. De maatvoering wordt bepaald door een % kunstmatige em (\wd0). \def\somechemicalbond% {\hrule width \wd0 height .4pt} \def\dochemicalbonds#1#2#3% todo: \@@chemicaltextstyle {{\setbox0=\hbox {${\@@localchemicalstyle M}$}% \vbox to \ht0 {\@@dochemicalcolor \hsize\wd0 \vskip.1\wd0#1\vfill#2\vfill#3\vskip.1\wd0}}} \def\singlechemicalbond% {\dochemicalbonds{}{\somechemicalbond}{}} \def\doublechemicalbond% {\dochemicalbonds{\somechemicalbond}{}{\somechemicalbond}} \def\triplechemicalbond% {\dochemicalbonds{\somechemicalbond}{\somechemicalbond}{\somechemicalbond}} % In plaats van \def\naam{\chemie[...]...} kan beter gebruik % worden gemaakt van het commando % % \definieerchemie[naam]{commando's} % % De naam krijgt, om problemen met bestaande macro's te % voorkomen, een prefix. Bij het ophalen van een commando % worden beide definities afgehandeld. \def\dodefinechemical[#1]#2% {\doifdefined{\??chemical#1} {\writestatus{ppchtex}{chemical definition #1 is redefined}}% \setvalue{\??chemical#1}{#2}} \unexpanded\def\definechemical% {\dosingleargument\dodefinechemical} \def\getpredefinedchemical#1% {\doifdefinedelse{\??chemical#1} {\getvalue{\??chemical#1}} {\doifdefinedelse{#1} {\getvalue{#1}} {\writestatus{ppchtex}{unknown chemical definition #1}}}} % Hieronder zijn de definities van de structuren opgenomen. De % naam van de structuur is als volgt opgebouwd: % % \executechemicalNUMBER[#1] % % waarbij [#1] betrekking heeft op de tekstelementen van \chemie, % de [tweede lijst] dus. % % De aan \chemie[#1][#2] meegegeven lijst van segmenten wordt % deels door de in \execute gedefinieerde macro's afgehandeld, % deels door algemene macro's. Segmenten hebben de vorm: % % [+|-|]identifier[X|XYZ|X..Y] % % Voorbeelden van segmenten zijn: % % R1 % R1..4 % R135 % -R1 % +R35 \setchemicalmaximum 0 \def\processchemical[#1]% {\unknownchemical{#1}} \def\setchemicalname#1 % {\def\chemicalname{#1}} \let\chemicalname=\s!unknown % Vooruitlopend op een gedetailleerde documentatie, zijn hier % vast enkele gebruikte afmetingen: % % lengte radikalen : 500 % afstand radikalen : 100 % afstand dubbele radikalen : 260 % afstand substituenten : +125 \def\executechemicalONE[#1]% {\setchemicalname ONE % \setchemicalmaximum 8 \setchemicaldistance 0 \setchemicalsubstitute 625 \setchemicaldirection 303 % \setchemicalrotation 1 1 0 1 0 1 0 1 0 \setchemicalrotation 2 0.707 -0.707 0.707 -0.707 0.707 -0.707 0.707 -0.707 \setchemicalrotation 3 0 -1 0 -1 0 -1 0 -1 \setchemicalrotation 4 -0.707 -0.707 -0.707 -0.707 -0.707 -0.707 -0.707 -0.707 \setchemicalrotation 5 -1 0 -1 0 -1 0 -1 0 \setchemicalrotation 6 -0.707 0.707 -0.707 0.707 -0.707 0.707 -0.707 0.707 \setchemicalrotation 7 0 1 0 1 0 1 0 1 \setchemicalrotation 8 0.707 0.707 0.707 0.707 0.707 0.707 0.707 0.707 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 45 135 225 315 \setchemicalangle 3 90 180 270 0 \setchemicalangle 4 135 225 315 45 \setchemicalangle 5 180 270 0 90 \setchemicalangle 6 225 315 45 135 \setchemicalangle 7 270 0 90 180 \setchemicalangle 8 315 45 135 225 % \setchemicaltranslate 1 -1000 0 \setchemicaltranslate 2 -1000 1000 \setchemicaltranslate 3 0 1000 \setchemicaltranslate 4 1000 1000 \setchemicaltranslate 5 1000 0 \setchemicaltranslate 6 1000 -1000 \setchemicaltranslate 7 0 -1000 \setchemicaltranslate 8 -1000 -1000 % \setchemicallinesegment SB 300 0 700 0 \setchemicallinesegment DB1 300 50 700 50 \setchemicallinesegment DB2 300 -50 700 -50 % %setchemicallinesegment EP 200 125 200 -125 \setchemicalfactorlinesegment EP 200 125 200 -125 % \setchemicaltextelement ES 200 0 \setchemicaltextelement ED1 200 50 \setchemicaltextelement ED2 200 -50 \setchemicaltextelement ET1 200 75 \setchemicaltextelement ET2 200 0 \setchemicaltextelement ET3 200 -75 \setchemicaltextelement HB1 300 0 \setchemicaltextelement HB2 475 0 \setchemicaltextelement HB3 650 0 % \setchemicaltextelement Z 800 0 \setchemicaltextelement RZ 950 0 \setchemicaltextelement ZN 500 0 \setchemicaltextelement ZTN 500 150 \setchemicaltextelement ZBN 500 -150 % \def\processchemical[##1##2##3##4##5]% {\doprocesschemical[##1##2##3##4##5] {\processaction [##1##2##3##4##5] [ PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, SUB##4##5=>\processchemicalsubstitute{##4##5}, ADJ##4##5=>\processchemicaldistance{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, DIR##4##5=>\processchemicaldirection{##4##5}, OFF##4##5=>\processchemicaloffset{##4##5}, CCD##4##5=>\processchemicaldottsegment{CC}{##4##5}, LDD##4##5=>\processchemicaldashedlinesegment{DB1}{##4##5}% \processchemicallinesegment{DB2}{##4##5}, RDD##4##5=>\processchemicallinesegment{DB1}{##4##5}% \processchemicaldashedlinesegment{DB2}{##4##5}, OF##3:##5=>\processchemicalphantom{##3}{##5}, OE##3##4##5=>\processchemicalopenend{OE}{##3##4##5}, EP##3##4##5=>\processchemicallinesegment{EP}{##3##4##5}, ES##3##4##5=>\processchemicaltextconstant{ES}{##3##4##5}{\hbox{$\cdot$}}{0}, ED##3##4##5=>\processchemicaltextconstant{ED}{##3##4##5}{\hbox{$\cdot$}}{0}, ET##3##4##5=>\processchemicaltextconstant{ET}{##3##4##5}{\hbox{$\cdot$}}{0}, HB##3##4##5=>\processchemicaltextconstant{HB}{##3##4##5}{\hbox{$\cdot$}}{0}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, DB##3##4##5=>\processchemicallinesegment{DB}{##3##4##5}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, BB##3##4##5=>\processchemicaldeltalinesegment{SB}{##3##4##5}, BD##3##4##5=>\processchemicaldasheddeltalinesegment{SB}{##3##4##5}, BW##3##4##5=>\processchemicalwavylinesegment{SB}{##3##4##5}, SD##3##4##5=>\processchemicaldashedlinesegment{SB}{##3##4##5}, TB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}% \processchemicallinesegment{DB}{##3##4##5}, CZ##3##4##5=>\processchemicaltextelement{RZ}{##3##4##5}{#1}{0}{}, ZTN##4##5=>\processchemicalsmalltextconstant{ZTN}{##4##5}{\chemicaltextelementnumber}{0}, ZTT##4##5=>\processchemicalsmalltextelement{ZTN}{##4##5}{#1}{0}{}, ZBN##4##5=>\processchemicalsmalltextconstant{ZBN}{##4##5}{\chemicaltextelementnumber}{0}, ZBT##4##5=>\processchemicalsmalltextelement{ZBN}{##4##5}{#1}{0}{}, ZN##3##4##5=>\processchemicaltextconstant{ZN}{##3##4##5}{\chemicaltextelementnumber}{0}, ZT##3##4##5=>\processchemicaltextelement{ZN}{##3##4##5}{#1}{0}{}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0} {l,l,t,r,r,r,b,l}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}}} \def\executechemicalTHREE[#1]% {\setchemicalname THREE % \setchemicalmaximum 3 \setchemicaldistance 289 \setchemicalsubstitute 952 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 -0.5 -0.866 -0.866 0.5 0.5 0.866 0.866 -0.5 \setchemicalrotation 3 -0.5 0.866 0.866 0.5 0.5 -0.866 -0.866 -0.5 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 120 210 300 30 \setchemicalangle 3 240 330 60 150 % \setchemicaltranslate 1 -1000 0 \setchemicaltranslate 2 0 1000 \setchemicaltranslate 3 1000 0 \setchemicaltranslate 4 0 -1000 % \setchemicallinesegment B 577 0 -289 -500 \setchemicallinesegment SB 352 -130 -64 -370 \setchemicallinesegment -SB 352 -130 -289 -500 \setchemicallinesegment +SB 577 0 -64 -370 \setchemicallinesegment DB1 327 -87 -89 -327 \setchemicallinesegment DB2 377 -172 -39 -413 \setchemicallinesegment R 577 0 1077 0 \setchemicallinesegment -R 577 0 1010 250 \setchemicallinesegment +R 577 0 1010 -250 \setchemicallinesegment ER1 577 50 1077 50 \setchemicallinesegment ER2 577 -50 1077 -50 \setchemicallinesegment SR 837 0 1077 0 \setchemicallinesegment -SR 802 130 1010 250 \setchemicallinesegment +SR 802 -130 1010 -250 \setchemicallinesegment DR1 837 50 1077 50 \setchemicallinesegment DR2 837 -50 1077 -50 % \setchemicaltextelement Z 577 0 \setchemicaltextelement RZ 1177 0 \setchemicaltextelement -RZ 1097 300 \setchemicaltextelement +RZ 1097 -300 \setchemicaltextelement CRZ 1077 0 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [ ROT##4=>\processchemicalrotation{##4}, MOV##4=>\processchemicaltranslate{##4}, SUB##4=>\processchemicalsubstitute{##4}, ADJ##4=>\processchemicaldistance{##4}, -RZ##4=>\processchemicaltextelement{-RZ}{##4}{#1}{3} {l,t,r, l,r,l, r,b,l, r,l,r}, +RZ##4=>\processchemicaltextelement{+RZ}{##4}{#1}{3} {l,r,b, r,r,l, r,l,t, l,l,r}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, -SR##4=>\processchemicallinesegment{-SR}{##4}, +SR##4=>\processchemicallinesegment{+SR}{##4}, CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0} {}, DB##3##4=>\processchemicallinesegment{DB}{##3##4}, DR##3##4=>\processchemicallinesegment{DR}{##3##4}, RZ##3##4=>\processchemicaltextelement{RZ}{##3##4}{#1}{3} {l,r,r, t,r,l, r,l,l, b,l,r}, ER##3##4=>\processchemicallinesegment{ER}{##3##4}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, SR##3##4=>\processchemicallinesegment{SR}{##3##4}, -R##3##4=>\processchemicallinesegment{-R}{##3##4}, +R##3##4=>\processchemicallinesegment{+R}{##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, R##2##3##4=>\processchemicallinesegment{R}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalFOUR[#1]% {\setchemicalname FOUR % \setchemicalmaximum 4 \setchemicaldistance 500 \setchemicalsubstitute 0 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 0 -1 -1 0 0 1 1 0 \setchemicalrotation 3 -1 0 0 1 1 0 0 -1 \setchemicalrotation 4 0 1 1 0 0 -1 -1 0 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 90 180 270 0 \setchemicalangle 3 180 270 0 90 \setchemicalangle 4 270 0 90 180 % \setchemicaltranslate 1 -1000 0 \setchemicaltranslate 2 0 1000 \setchemicaltranslate 3 1000 0 \setchemicaltranslate 4 0 -1000 % \setchemicallinesegment B 500 500 500 -500 \setchemicallinesegment SB 500 240 500 -240 \setchemicallinesegment -SB 500 240 500 -500 \setchemicallinesegment +SB 500 500 500 -240 \setchemicallinesegment DB1 450 240 450 -240 \setchemicallinesegment DB2 550 240 550 -240 \setchemicallinesegment EB 360 300 360 -300 \setchemicallinesegment R 500 500 854 854 \setchemicallinesegment -R 500 500 500 1000 \setchemicallinesegment +R 500 500 1000 500 \setchemicallinesegment ER1 465 535 819 889 \setchemicallinesegment ER2 535 465 889 819 \setchemicallinesegment SR 684 684 854 854 \setchemicallinesegment -SR 500 760 500 1000 \setchemicallinesegment +SR 760 500 1000 500 \setchemicallinesegment DR1 649 719 819 889 \setchemicallinesegment DR2 719 649 889 819 % \setchemicaltextelement Z 500 500 \setchemicaltextelement RZ 925 925 \setchemicaltextelement -RZ 500 1100 \setchemicaltextelement +RZ 1100 500 \setchemicaltextelement CRZ 1038 1038 % \setchemicaltextelement ZN 350 350 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [ PB:##4=>\beginchemicalpicture{##4}, PE????=>\endchemicalpicture, ROT##4=>\processchemicalrotation{##4}, SUB##4=>\processchemicalsubstitute{##4}, ADJ##4=>\processchemicaldistance{##4}, MOV##4=>\processchemicaltranslate{##4}, -RZ##4=>\processchemicaltextelement{-RZ}{##4}{#1}{4} {b,l,t,r, l,t,r,b, t,r,b,l, r,b,l,t}, +RZ##4=>\processchemicaltextelement{+RZ}{##4}{#1}{4} {l,t,r,b, t,r,b,l, r,b,l,t, b,l,t,r}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, -SR##4=>\processchemicallinesegment{-SR}{##4}, +SR##4=>\processchemicallinesegment{+SR}{##4}, CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0}{}, ZN##3##4=>\processchemicaltextconstant{ZN}{##3##4}{\chemicaltextelementnumber}{0}, ZT##3##4=>\processchemicaltextelement{ZN}{##3##4}{#1}{0}{}, DB##3##4=>\processchemicallinesegment{DB}{##3##4}, DR##3##4=>\processchemicallinesegment{DR}{##3##4}, EB##3##4=>\processchemicallinesegment{EB}{##3##4}, ER##3##4=>\processchemicallinesegment{ER}{##3##4}, RZ##3##4=>\processchemicaltextelement{RZ}{##3##4}{#1}{4} {lb,lt,rt,rb, lt,rt,rb,lb, rt,rb,lb,lt, rb,lb,lt,rt}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, SR##3##4=>\processchemicallinesegment{SR}{##3##4}, -R##3##4=>\processchemicallinesegment{-R}{##3##4}, +R##3##4=>\processchemicallinesegment{+R}{##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, R##2##3##4=>\processchemicallinesegment{R}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalFIVE[#1]% {\setchemicalname FIVE % \setchemicalmaximum 5 \setchemicaldistance 688 \setchemicalsubstitute 1226 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 0.309 -0.951 -0.951 -0.309 -0.309 0.940 0.951 0.309 \setchemicalrotation 3 -0.809 -0.588 -0.588 0.809 0.809 0.588 0.588 -0.809 \setchemicalrotation 4 -0.809 0.588 0.588 0.809 0.809 -0.588 -0.588 -0.809 \setchemicalrotation 5 0.309 0.951 0.951 -0.309 -0.309 -0.951 -0.951 0.309 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 72 162 252 342 \setchemicalangle 3 144 234 324 54 \setchemicalangle 4 216 306 36 126 \setchemicalangle 5 288 18 108 198 % \setchemicaltranslate 1 -1376 0 \setchemicaltranslate 2 -425 1304 \setchemicaltranslate 3 1113 809 \setchemicaltranslate 4 1113 -809 \setchemicaltranslate 5 -425 -1304 % \setchemicallinesegment A 1188 500 1188 -500 \setchemicallinesegment B 688 500 688 -500 \setchemicallinesegment S -263 808 688 -500 \setchemicallinesegment SS -116 606 541 -298 \setchemicallinesegment -SS -263 808 541 -298 \setchemicallinesegment +SS -116 606 688 -500 \setchemicallinesegment SB 688 240 688 -240 \setchemicallinesegment -SB 688 240 688 -500 \setchemicallinesegment +SB 688 500 688 -240 \setchemicallinesegment DB1 638 240 638 -240 \setchemicallinesegment DB2 738 240 738 -240 \setchemicallinesegment EB 548 340 548 -340 \setchemicallinesegment R 688 500 1093 794 \setchemicallinesegment -R 688 500 688 1000 \setchemicallinesegment +R 688 500 1163 345 \setchemicallinesegment ER1 659 540 1064 834 \setchemicallinesegment ER2 727 460 1122 754 \setchemicallinesegment SR 898 653 1093 794 \setchemicallinesegment -SR 688 760 688 1000 \setchemicallinesegment +SR 935 420 1163 345 \setchemicallinesegment DR1 869 693 1064 834 \setchemicallinesegment DR2 927 613 1122 754 % \setchemicaltextelement Z 688 500 \setchemicaltextelement RZ 1188 863 \setchemicaltextelement -RZ 688 1100 \setchemicaltextelement +RZ 1258 315 \setchemicaltextelement CRZ 1323 947 % \setchemicalcircsegment C -36 36 590 72 475 -345 \setchemicalcircsegment CC -72 0 590 72 182 -561 % \setchemicaltextelement ZN 468 350 \setchemicaltextelement RN 860 625 % 1.25 Z \setchemicaltextelement RTN 785 728 % .12 / 103 75 \setchemicaltextelement RBN 935 522 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [ FRONT????=>{\executechemicalFIVEFRONT[#1]}, PB:##4=>\beginchemicalpicture{##4}, PE????=>\endchemicalpicture, ROT##4=>\processchemicalrotation{##4}, SUB##4=>\processchemicalsubstitute{##4}, ADJ##4=>\processchemicaldistance{##4}, MOV##4=>\processchemicaltranslate{##4}, -RZ##4=>\processchemicaltextelement{-RZ}{##4}{#1}{5} {b,l,t,r,r, l,t,r,r,l, t,r,r,l,l, r,b,l,t,r}, +RZ##4=>\processchemicaltextelement{+RZ}{##4}{#1}{5} {l,t,r,r,b, t,r,r,l,l, r,r,l,l,r, b,l,l,r,r}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, -SR##4=>\processchemicallinesegment{-SR}{##4}, +SR##4=>\processchemicallinesegment{+SR}{##4}, -RD##4=>\processchemicaldashedlinesegment{-R}{##4}, +RD##4=>\processchemicaldashedlinesegment{+R}{##4}, -RB##4=>\processchemicaldeltalinesegment{-R}{##4}, +RB##4=>\processchemicaldeltalinesegment{+R}{##4}, CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0}{}, RTN##4=>\processchemicaltextconstant{RTN}{##4}{\chemicaltextelementnumber}{0}, RTT##4=>\processchemicaltextelement{RTN}{##4}{#1}{0}{}, RBN##4=>\processchemicaltextconstant{RBN}{##4}{\chemicaltextelementnumber}{0}, RBT##4=>\processchemicaltextelement{RBN}{##4}{#1}{0}{}, -SS##4=>\processchemicallinesegment{-SS}{##4}, +SS##4=>\processchemicallinesegment{+SS}{##4}, CCD##4=>\processchemicaldottsegment{CC}{##4}, SS##3##4=>\processchemicallinesegment{SS}{##3##4}, RD##3##4=>\processchemicaldashedlinesegment{R}{##3##4}, RB##3##4=>\processchemicaldeltalinesegment{R}{##3##4}, ZN##3##4=>\processchemicaltextconstant{ZN}{##3##4}{\chemicaltextelementnumber}{0}, ZT##3##4=>\processchemicaltextelement{ZN}{##3##4}{#1}{0}{}, RN##3##4=>\processchemicaltextconstant{RN}{##3##4}{\chemicaltextelementnumber}{0}, RT##3##4=>\processchemicaltextelement{RN}{##3##4}{#1}{0}{}, AU##3##4=>\processchemicaluparrowsegment{A}{##3##4}, AD##3##4=>\processchemicaldownarrowsegment{A}{##3##4}, CC##3##4=>\processchemicalcircsegment{CC}{##3##4}, CD##3##4=>\processchemicaldottsegment{C}{##3##4}, DB##3##4=>\processchemicallinesegment{DB}{##3##4}, DR##3##4=>\processchemicallinesegment{DR}{##3##4}, EB##3##4=>\processchemicallinesegment{EB}{##3##4}, ER##3##4=>\processchemicallinesegment{ER}{##3##4}, RZ##3##4=>\processchemicaltextelement{RZ}{##3##4}{#1}{5} {l,l,r,r,r, l,r,r,b,l, r,r,b,l,t, r,l,l,t,r}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, SR##3##4=>\processchemicallinesegment{SR}{##3##4}, -R##3##4=>\processchemicallinesegment{-R}{##3##4}, +R##3##4=>\processchemicallinesegment{+R}{##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, C##2##3##4=>\processchemicalcircsegment{C}{##2##3##4}, R##2##3##4=>\processchemicallinesegment{R}{##2##3##4}, S##2##3##4=>\processchemicallinesegment{S}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalSIX[#1]% {\setchemicalname SIX % \setchemicalmaximum 6 \setchemicalsubstitute 1375 \setchemicaldistance 866 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 0.5 -0.866 -0.866 -0.5 -0.5 0.866 0.866 0.5 \setchemicalrotation 3 -0.5 -0.866 -0.866 0.5 0.5 0.866 0.866 -0.5 \setchemicalrotation 4 -1 0 0 1 1 0 0 -1 \setchemicalrotation 5 -0.5 0.866 0.866 0.5 0.5 -0.866 -0.866 -0.5 \setchemicalrotation 6 0.5 0.866 0.866 -0.5 -0.5 -0.866 -0.866 0.5 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 60 150 240 330 \setchemicalangle 3 120 210 300 30 \setchemicalangle 4 180 270 0 90 \setchemicalangle 5 240 330 60 150 \setchemicalangle 6 300 30 120 210 % \setchemicaltranslate 1 -1732 0 \setchemicaltranslate 2 -866 1500 \setchemicaltranslate 3 866 1500 \setchemicaltranslate 4 1732 0 \setchemicaltranslate 5 866 -1500 \setchemicaltranslate 6 -866 -1500 % \setchemicallinesegment A 1386 500 1386 -500 \setchemicallinesegment S 0 1000 866 -500 \setchemicallinesegment SS 125 783 741 -283 \setchemicallinesegment -SS 0 1000 741 -283 \setchemicallinesegment +SS 125 783 866 -500 \setchemicallinesegment B 866 500 866 -500 \setchemicallinesegment SB 866 240 866 -240 \setchemicallinesegment -SB 866 240 866 -500 \setchemicallinesegment +SB 866 500 866 -240 \setchemicallinesegment DB1 816 240 816 -240 \setchemicallinesegment DB2 916 240 916 -240 \setchemicallinesegment EB 726 340 726 -340 \setchemicallinesegment R 866 500 1299 750 \setchemicallinesegment -R 866 500 866 1000 \setchemicallinesegment +R 866 500 1299 250 \setchemicallinesegment ER1 841 543 1274 793 \setchemicallinesegment ER2 891 457 1324 707 \setchemicallinesegment SR 1091 630 1299 750 \setchemicallinesegment -SR 866 740 866 1000 \setchemicallinesegment +SR 1091 370 1299 250 \setchemicallinesegment DR1 1066 673 1274 793 \setchemicallinesegment DR2 1116 588 1324 707 \setchemicallinesegment MID1 0 1000 -150 200 \setchemicallinesegment MID2 0 -1000 -150 -200 \setchemicallinesegment MIDS1 0 1000 -180 0 \setchemicallinesegment MIDS2 0 -1000 -180 0 % \setchemicalcircsegment C -30 30 700 60 600 -346 \setchemicalcircsegment CC -60 0 700 60 350 -606 % \setchemicaltextelement Z 866 500 \setchemicaltextelement RZ 1386 800 \setchemicaltextelement -RZ 866 1100 \setchemicaltextelement +RZ 1386 200 \setchemicaltextelement CRZ 1524 880 \setchemicaltextelement MIDZ -150 0 % \setchemicaltextelement ZN 589 350 \setchemicaltextelement RN 1083 625 % 1.25 Z \setchemicaltextelement RTN 1008 755 % .12 / 130 75 \setchemicaltextelement RBN 1158 495 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ FRONT????=>{\executechemicalSIXFRONT[#1]}, MID????=>\processchemicallinesegment{MID}{1????}, MIDS????=>\processchemicallinesegment{MIDS}{1????}, MIDZ????=>\processchemicaltextelement{MIDZ}{1????}{#1}{0}{}, PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, ROT##4##5=>\processchemicalrotation{##4##5}, SUB##4##5=>\processchemicalsubstitute{##4##5}, ADJ##4##5=>\processchemicaldistance{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, -RZ##4##5=>\processchemicaltextelement{-RZ}{##4##5}{#1}{6} {b,l,l,t,r,r, l,l,r,r,r,l, t,r,r,b,l,l, r,r,l,l,l,r}, +RZ##4##5=>\processchemicaltextelement{+RZ}{##4##5}{#1}{6} {l,t,r,r,b,l, r,r,r,l,l,l, r,b,l,l,t,r, l,l,l,r,r,r}, -SB##4##5=>\processchemicallinesegment{-SB}{##4##5}, +SB##4##5=>\processchemicallinesegment{+SB}{##4##5}, -SR##4##5=>\processchemicallinesegment{-SR}{##4##5}, +SR##4##5=>\processchemicallinesegment{+SR}{##4##5}, -RD##4##5=>\processchemicaldashedlinesegment{-R}{##4##5}, +RD##4##5=>\processchemicaldashedlinesegment{+R}{##4##5}, -RB##4##5=>\processchemicaldeltalinesegment{-R}{##4##5}, +RB##4##5=>\processchemicaldeltalinesegment{+R}{##4##5}, CRZ##4##5=>\processchemicaltextelement{CRZ}{##4##5}{#1}{0}{}, -SS##4##5=>\processchemicallinesegment{-SS}{##4##5}, +SS##4##5=>\processchemicallinesegment{+SS}{##4##5}, CCD##4##5=>\processchemicaldottsegment{CC}{##4##5}, RTN##4##5=>\processchemicaltextconstant{RTN}{##4##5}{\chemicaltextelementnumber}{0}, RTT##4##5=>\processchemicaltextelement{RTN}{##4##5}{#1}{0}{}, RBN##4##5=>\processchemicaltextconstant{RBN}{##4##5}{\chemicaltextelementnumber}{0}, RBT##4##5=>\processchemicaltextelement{RBN}{##4##5}{#1}{0}{}, SS##3##4##5=>\processchemicallinesegment{SS}{##3##4##5}, RD##3##4##5=>\processchemicaldashedlinesegment{R}{##3##4##5}, RB##3##4##5=>\processchemicaldeltalinesegment{R}{##3##4##5}, ZN##3##4##5=>\processchemicaltextconstant{ZN}{##3##4##5}{\chemicaltextelementnumber}{0}, ZT##3##4##5=>\processchemicaltextelement{ZN}{##3##4##5}{#1}{0}{}, RN##3##4##5=>\processchemicaltextconstant{RN}{##3##4##5}{\chemicaltextelementnumber}{0}, RT##3##4##5=>\processchemicaltextelement{RN}{##3##4##5}{#1}{0}{}, AU##3##4##5=>\processchemicaluparrowsegment{A}{##3##4##5}, AD##3##4##5=>\processchemicaldownarrowsegment{A}{##3##4##5}, CD##3##4##5=>\processchemicaldottsegment{C}{##3##4##5}, CC##3##4##5=>\processchemicalcircsegment{CC}{##3##4##5}, DB##3##4##5=>\processchemicallinesegment{DB}{##3##4##5}, EB##3##4##5=>\processchemicallinesegment{EB}{##3##4##5}, ER##3##4##5=>\processchemicallinesegment{ER}{##3##4##5}, RZ##3##4##5=>\processchemicaltextelement{RZ}{##3##4##5}{#1}{6} {l,l,t,r,r,b, l,r,r,r,l,l, r,r,b,l,l,t, r,l,l,l,r,r}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, SR##3##4##5=>\processchemicallinesegment{SR}{##3##4##5}, DR##3##4##5=>\processchemicallinesegment{DR}{##3##4##5}, -R##3##4##5=>\processchemicallinesegment{-R}{##3##4##5}, +R##3##4##5=>\processchemicallinesegment{+R}{##3##4##5}, B##2##3##4##5=>\processchemicallinesegment{B}{##2##3##4##5}, C##2##3##4##5=>\processchemicalcircsegment{C}{##2##3##4##5}, R##2##3##4##5=>\processchemicallinesegment{R}{##2##3##4##5}, S##2##3##4##5=>\processchemicallinesegment{S}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalSEVEN[#1]% incomplete ! {\setchemicalname SEVEN % \setchemicalmaximum 7 \setchemicalsubstitute - \setchemicaldistance 1038 % \setchemicalrotation 1 .623 .782 - - - - - - \setchemicalrotation 2 -.223 .975 - - - - - - \setchemicalrotation 3 -.901 .434 - - - - - - \setchemicalrotation 4 -.901 -.434 - - - - - - \setchemicalrotation 5 -.223 -.975 - - - - - - \setchemicalrotation 6 .623 -.782 - - - - - - \setchemicalrotation 7 1 0 - - - - - - % \setchemicalangle 1 0 - - - \setchemicalangle 2 51.429 - - - \setchemicalangle 3 102.857 - - - \setchemicalangle 4 154.286 - - - \setchemicalangle 5 205.714 - - - \setchemicalangle 6 257.143 - - - \setchemicalangle 7 308.571 - - - % \setchemicaltranslate 1 - - \setchemicaltranslate 2 - - \setchemicaltranslate 3 - - \setchemicaltranslate 4 - - \setchemicaltranslate 5 - - \setchemicaltranslate 6 - - \setchemicaltranslate 7 - - % \setchemicallinesegment B 1038 500 1038 -500 \setchemicallinesegment SB 1038 240 1038 -240 \setchemicallinesegment -SB 1038 240 1038 -500 \setchemicallinesegment +SB 1038 500 1038 -240 % \setchemicaltextelement Z 1038 500 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, %ROT##4##5=>\processchemicalrotation{##4}, %SUB##4##5=>\processchemicalsubstitute{##4##5}, %ADJ##4##5=>\processchemicaldistance{##4##5}, %MOV##4##5=>\processchemicaltranslate{##4##5}, -SB##4##5=>\processchemicallinesegment{-SB}{##4##5}, +SB##4##5=>\processchemicallinesegment{+SB}{##4##5}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, B##2##3##4##5=>\processchemicallinesegment{B}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalEIGHT[#1]% incomplete ! {\setchemicalname EIGHT % \setchemicalmaximum 8 %\setchemicalsubstitute 1307 \setchemicaldistance 1207 % \setchemicalrotation 1 .707 .707 - - - - - - \setchemicalrotation 2 0 1 - - - - - - \setchemicalrotation 3 -.707 .707 - - - - - - \setchemicalrotation 4 -1 0 - - - - - - \setchemicalrotation 5 -.707 -.707 - - - - - - \setchemicalrotation 6 0 -1 - - - - - - \setchemicalrotation 7 .707 -.707 - - - - - - \setchemicalrotation 8 1 0 - - - - - - % \setchemicalangle 1 45 - - - \setchemicalangle 2 90 - - - \setchemicalangle 3 135 - - - \setchemicalangle 4 180 - - - \setchemicalangle 5 225 - - - \setchemicalangle 6 270 - - - \setchemicalangle 7 315 - - - \setchemicalangle 8 0 - - - % \setchemicaltranslate 1 -2414 0 \setchemicaltranslate 2 -1706 1706 \setchemicaltranslate 3 0 2414 \setchemicaltranslate 4 1706 1706 \setchemicaltranslate 5 2414 0 \setchemicaltranslate 6 1706 -1706 \setchemicaltranslate 7 0 -2414 \setchemicaltranslate 8 -1706 -1706 % \setchemicallinesegment B 1207 500 1207 -500 \setchemicallinesegment SB 1207 240 1207 -240 \setchemicallinesegment -SB 1207 240 1207 -500 \setchemicallinesegment +SB 1207 500 1207 -240 % \setchemicaltextelement Z 1207 500 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, %SUB##4##5=>\processchemicalsubstitute{##4##5}, ADJ##4##5=>\processchemicaldistance{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, -SB##4##5=>\processchemicallinesegment{-SB}{##4##5}, +SB##4##5=>\processchemicallinesegment{+SB}{##4##5}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, B##2##3##4##5=>\processchemicallinesegment{B}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalFIVEFRONT[#1]% {\executechemicalFIVE[]% % \setchemicalname FIVEFRONT % \setchemicallinesegment -R 688 500 688 100 \setchemicallinesegment +R 688 500 688 900 % \setchemicaltextelement -RZ 0 -1300 \setchemicaltextelement +RZ 0 1300 % \def\processchemical[##1##2##3##4]% {\def\chemicalrotation{2}% \processaction [##1##2##3##4] [ -RZ##4=>\processchemicalunrotatedtextelement{Z}{-RZ}{##4}{#1}{5} {,,,,, t,t,t,t,t}, +RZ##4=>\processchemicalunrotatedtextelement{Z}{+RZ}{##4}{#1}{5} {,,,,, b,b,b,b,b}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, -R##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##3##4}, +R##3##4=>\processchemicalunrotatedlinesegment{b}{+R}{##3##4}, BB##3##4=>\processchemicalzlinesegment{B}{##3##4}, R##2##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##2##3##4}% \processchemicalunrotatedlinesegment{b}{+R}{##2##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalSIXFRONT[#1]% {\executechemicalSIX[]% % \setchemicalname SIXFRONT % \setchemicallinesegment -R 866 500 866 100 \setchemicallinesegment +R 866 500 866 900 % \setchemicaltextelement -RZ 0 -1300 \setchemicaltextelement +RZ 0 1300 % \def\processchemical[##1##2##3##4]% {\def\chemicalrotation{2}% \processaction [##1##2##3##4] [ -RZ##4=>\processchemicalunrotatedtextelement{Z}{-RZ}{##4}{#1}{6} {,,,,,, t,t,t,t,t,t}, +RZ##4=>\processchemicalunrotatedtextelement{Z}{+RZ}{##4}{#1}{6} {,,,,,, b,b,b,b,b,b}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, -R##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##3##4}, +R##3##4=>\processchemicalunrotatedlinesegment{b}{+R}{##3##4}, BB##3##4=>\processchemicalzlinesegment{B}{##3##4}, R##2##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##2##3##4}% \processchemicalunrotatedlinesegment{b}{+R}{##2##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} % 1 : 0 % 2 : -115 % 3* : -195 % 3 : -165 % 4 : -245 \def\executechemicalCARBON[#1]% {\setchemicalname CARBON % \setchemicalmaximum 4 \setchemicaldistance 0 \setchemicalsubstitute 0 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 -0.423 -0.906 -0.906 0.423 0.423 0.906 0.906 -0.423 \setchemicalrotation 3 -0.966 -0.259 -0.259 0.966 0.966 0.259 0.259 -0.966 \setchemicalrotation 3* -0.966 0.259 0.259 0.966 0.966 -0.259 -0.259 -0.966 \setchemicalrotation 4 -0.423 0.906 0.906 0.423 0.423 -0.906 -0.906 -0.423 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 115 205 295 25 \setchemicalangle 3 165 255 345 75 \setchemicalangle 3* 195 285 15 105 \setchemicalangle 4 245 335 65 155 % \setchemicaltranslate 1 -1500 0 \setchemicaltranslate 2 0 1500 \setchemicaltranslate 3 1500 0 \setchemicaltranslate 4 0 -1500 % \setchemicallinesegment B1 500 0 1000 0 \setchemicallinesegment B2 300 0 1000 0 \setchemicallinesegment B3 500 0 1000 0 \setchemicallinesegment B4 300 0 1000 0 % \setchemicaltextelement Z 1100 0 % \setchemicalcircsegment C 0 360 500 360 0 -500 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ MIR????=>\setchemicalmirror{3}, -MIR????=>\resetchemicalmirror{3}, *MIR????=>\togglechemicalmirror{3}, CB????=>\processlocalchemicals{B,C,Z}, C????=>\processchemicalcircsegment{C}{1????}, -ROT##5=>\reversechemical{ROT}{##5}{3,4,1,2}, ROT##4##5=>\processchemicalrotation{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, CB##3##4##5=>\processlocalchemicals {ROT##3,C,B,Z2..4, MOV##3,*MIR,-ROT##3,C,B,Z2..4}, B##2##3##4##5=>\processprivatechemicallinesegment{B}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{4} {l,t,r,b, t,r,b,l, r,b,l,t, b,l,t,r}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} % 1: 45 2: -90 3: -225 % 4: -45 5: -135 6: -270 \newif\ifNEWMANstagger \NEWMANstaggertrue \def\executechemicalNEWMANSTAGGER% {\NEWMANstaggertrue\executechemicalNEWMAN} \def\executechemicalNEWMANECLIPSE% {\NEWMANstaggerfalse\executechemicalNEWMAN} \def\executechemicalNEWMAN[#1]% {\setchemicalname NEWMAN % \setchemicalmaximum 6 \setchemicaldistance 0 \setchemicalsubstitute 0 % \ifNEWMANstagger \setchemicalrotation 1 0.707 0.707 0.707 -0.707 -0.707 -0.707 -0.707 0.707 \setchemicalrotation 2 0 -1 -1 0 0 1 1 0 \setchemicalrotation 3 -0.707 0.707 0.707 0.707 0.707 -0.707 -0.707 -0.707 \else \setchemicalrotation 1 .866 -.5 -.5 -.866 -.866 .5 .5 .866 \setchemicalrotation 2 -.259 .966 .966 .259 .259 -.966 -.966 -.259 \setchemicalrotation 3 -.5 -.866 -.866 .5 .5 .866 .866 -.5 \fi \setchemicalrotation 4 0.707 -0.707 -0.707 -0.707 -0.707 0.707 0.707 0.707 \setchemicalrotation 5 -0.707 -0.707 -0.707 0.707 0.707 0.707 0.707 -0.707 \setchemicalrotation 6 0 1 1 0 0 -1 -1 0 % \ifNEWMANstagger \setchemicalangle 1 315 45 135 225 \setchemicalangle 2 90 180 270 0 \setchemicalangle 3 225 315 45 135 \else \setchemicalangle 1 30 120 210 300 \setchemicalangle 2 255 345 75 165 \setchemicalangle 3 120 210 300 30 \fi \setchemicalangle 4 45 135 225 315 \setchemicalangle 5 135 225 315 45 \setchemicalangle 6 270 0 90 180 % \setchemicaltranslate 1 -1500 0 \setchemicaltranslate 2 0 1500 \setchemicaltranslate 3 1500 0 \setchemicaltranslate 4 0 -1500 % \setchemicallinesegment B1 0 0 1000 0 \setchemicallinesegment B2 0 0 1000 0 \setchemicallinesegment B3 0 0 1000 0 \setchemicallinesegment B4 500 0 1000 0 \setchemicallinesegment B5 500 0 1000 0 \setchemicallinesegment B6 500 0 1000 0 % \setchemicaltextelement Z 1100 0 % \setchemicalcircsegment C 0 360 500 360 0 -500 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [STAGGER????=>{\executechemicalNEWMANSTAGGER[#1]}, ECLIPSE????=>{\executechemicalNEWMANECLIPSE[#1]}, B????=>\processlocalchemicals{B1..6}, CB????=>\processlocalchemicals{B1..6,C,Z1..6}, C????=>\processchemicalcircsegment{C}{1????}, ROT##4=>\processchemicalrotation{##4}, MOV##4=>\processchemicaltranslate{##4}, B##2##3##4=>\processprivatechemicallinesegment{B}{##2##3##4}, Z##2##3##4=>\ifNEWMANstagger \processchemicaltextelement{Z}{##2##3##4}{#1}{6} {l,t,r,l,r,b, l,r,l,r,r,l, r,b,l,r,l,t, r,l,r,l,l,r}% \else \processchemicaltextelement{Z}{##2##3##4}{#1}{6} {l,r,t,t,r,b, t,b,r,r,b,l, r,l,b,b,l,t, b,t,l,l,t,r}% \fi, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalCHAIR[#1]% smaller {\setchemicalname CHAIR % \setchemicalmaximum 6 % \setchemicallinesegment B1 1600 800 2800 -800 \setchemicallinesegment B2 2800 -800 800 0 \setchemicallinesegment B3 800 0 -1600 -800 \setchemicallinesegment B4 -1600 -800 -2800 800 \setchemicallinesegment B5 -2800 800 -800 0 \setchemicallinesegment B6 -800 0 1600 800 % \setchemicallinesegment +R1 1600 800 1600 1600 \setchemicallinesegment +R2 2800 -800 2800 -1600 \setchemicallinesegment +R3 800 0 800 800 \setchemicallinesegment +R4 -1600 -800 -1600 -1600 \setchemicallinesegment +R5 -2800 800 -2800 1600 \setchemicallinesegment +R6 -800 0 -800 -800 % \setchemicallinesegment -R1 1600 800 2350 522 % 750 278 \setchemicallinesegment -R2 2800 -800 3493 -400 \setchemicallinesegment -R3 800 0 1329 -600 % 528 600 \setchemicallinesegment -R4 -1600 -800 -2350 -522 % 750 278 \setchemicallinesegment -R5 -2800 800 -3493 400 \setchemicallinesegment -R6 -800 0 -1329 600 % 528 600 % \setchemicaltextelement +RZ1 1600 1800 \setchemicaltextelement +RZ2 2800 -1800 \setchemicaltextelement +RZ3 800 1000 \setchemicaltextelement +RZ4 -1600 -1800 \setchemicaltextelement +RZ5 -2800 1800 \setchemicaltextelement +RZ6 -800 -1000 % \setchemicaltextelement -RZ1 2538 453 % 200 lang \setchemicaltextelement -RZ2 3666 -300 \setchemicaltextelement -RZ3 1460 -750 \setchemicaltextelement -RZ4 -2538 -453 \setchemicaltextelement -RZ5 -3666 300 \setchemicaltextelement -RZ6 -1460 750 % \def\processchemical[##1##2##3##4##5]% {\def\chemicalrotation{1}% \processaction [##1##2##3##4##5] [ B????=>\processlocalchemicals{B1,B2,B3,B4,B5,B6}, -R????=>\processlocalchemicals{-R1,-R2,-R3,-R4,-R5,-R6}, +R????=>\processlocalchemicals{+R1,+R2,+R3,+R4,+R5,+R6}, B##2????=>{\getchemicallinesegment[0][B##2]}, -RZ##4????=>{\getchemicalfixedtextelement[-RZ##4][1][##4][l,l,tc,r,r,bc][#1]}, +RZ##4????=>{\getchemicalfixedtextelement[+RZ##4][1][##4][c][#1]}, -R##3????=>{\getchemicallinesegment[0][-R##3]}, +R##3????=>{\getchemicallinesegment[0][+R##3]}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalarrow#1#2[#3]% {\dogetcommalistelement1\from#3\to\toptext \dogetcommalistelement2\from#3\to\bottext \def\dochemicaltext##1% {\dosetsubscripts% $\@@dochemicalstyle{\@@localchemicalformat\strut##1}$% \doresetsubscripts}% \doifelse\@@chemicallocation\v!intext {#1{\dochemicaltext\toptext}}% {\setbox\chemicalsymbols=\hbox {\box\chemicalsymbols \vbox{\halign{##\cr \hbox to 3em{\hss\dochemicaltext{\toptext}\hss}\cr #2% \hbox to 3em{\hss\dochemicaltext{\bottext}\hss}\cr}}}}} \def\executechemicalGIVES {\executechemicalarrow {\chemicalsinglepicturearrow}% nodig {\rightarrowfill\cr}} \def\executechemicalEQUILIBRIUM {\executechemicalarrow {\chemicaldoublepicturearrow}% nodig {\rightarrowfill\cr\leftarrowfill\cr}} \def\executechemicalMESOMERIC {\executechemicalarrow {\chemicalsinglepicturearrow}% nodig {$\leftarrow\hskip-1em$\rightarrowfill\cr}} \def\executechemicalsign#1[#2]% {\doifelse\@@chemicallocation\v!intext {\dosetsubscripts $\@@dochemicalstyle{\@@localchemicalformat#1}$% \doresetsubscripts} {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols \dosetsubscripts $\@@dochemicalstyle{\@@localchemicalformat#1}$% \doresetsubscripts}}} \def\executechemicalPLUS {\executechemicalsign{+}} \def\executechemicalMINUS {\executechemicalsign{-}} \def\executechemicalEQUAL {\executechemicalsign{=}} \def\executechemicalSPACE[#1]% {\doifnot\@@chemicallocation\v!intext {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols \quad}}} \def\executechemicalCHEM[#1]% {\doifnot\@@chemicallocation\v!intext {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols $\@@dochemicalstyle{\@@localchemicalformat#1}$}}} \def\executechemicalTEXT[#1]% {\doifnot\@@chemicallocation\v!intext {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols#1}}} %\def\executechemicalLOW[#1]% % {\setlowsubscripts} % %\def\executechemicalHIGH[#1]% % {\sethighsubscripts} \def\putchemicalrule#1#2#3#4% {\ifcase\chemicaldrawingmode \putrule from {#1} {#2} to {#3} {#4} \or \psline(#1,#2)(#3,#4)% \or \bgroup \!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; draw z1--z2 ; \stopMPdrawing \egroup \fi} \def\executechemicalcomplex#1% {\bgroup \putchemicalrule {0} {-\@@chemicalbottom} {0} {\@@chemicaltop}% \putchemicalrule {0} {\@@chemicaltop} {#1150} {\@@chemicaltop}% \putchemicalrule {0} {-\@@chemicalbottom} {#1150} {-\@@chemicalbottom}% \egroup} \def\executechemicalOPENCOMPLEX[#1]% {\executechemicalcomplex+\ignorespaces \executechemicalSPACE[]} \def\executechemicalCLOSECOMPLEX[#1]% {\executechemicalSPACE[]% \executechemicalcomplex-\ignorespaces} % nog niet door midden as! \def\executechemicalverticalsymbol#1#2% {\executechemicalTEXT [$\left#1\relax \dimen0=\@@chemicalunit \scratchcounter=\@@chemicaltop \advance\scratchcounter by \@@chemicalbottom \dimen0=\scratchcounter\dimen0 \vcenter to \dimen0{} \dimen2=\@@chemicalunit \dimen2=\@@chemicalright\dimen0 \vcenter{\leftskip1em\hsize\dimen2\relax\strut#2\strut}% \right.$]}% \def\executechemicalUPARROW[#1]% {\executechemicalverticalsymbol\uparrow{#1}} \def\executechemicalDOWNARROW[#1]% {\executechemicalverticalsymbol\downarrow{#1}} \def\executechemicalUPDOWNARROW[#1]% {\executechemicalverticalsymbol\updownarrow{#1}} \let\setchemicalattributes\relax \setupchemical [\c!width=0, \c!height=0, \c!left=0, \c!right=0, \c!top=0, \c!bottom=0, \c!bodyfont=\the\bodyfontsize, \c!resolution=\outputresolution, \c!scale=\v!medium, \c!size=\v!medium, \c!textsize=\v!big, \c!frame=\v!off, \c!axis=\v!off, \c!state=\v!start, \c!style=\rm, \c!location=, \c!option=, \c!offset=LOW, \c!alternative=1, \c!color=, \c!rulethickness=, \c!rulecolor=, \c!factor=1] % Tijdelijk plaatsen we deze extra macro's hier. % % mathontop: \mtop {} {} % textontop: \ttop {} {} \def\putontop#1#2% {\vbox {\halign {\strut\hss##\hss\cr #1\cr #2\cr}}} \def\ttop#1#2% {\putontop{\tx#1}{#2}} \def\mtop#1#2% {\vbox {\offinterlineskip \halign {\hss##\hss\cr $\scriptscriptstyle#1$\cr \noalign{\vskip.5ex}% $#2$\cr}}} \def\ctop#1#2% {\vbox {\offinterlineskip \halign {\hss##\hss\cr $\@@dochemicalstyle{\@@localchemicalformat\scriptscriptstyle#1}$\cr \noalign{\vskip.5ex}% $\@@dochemicalstyle{\@@localchemicalformat#2}$\cr}}} %D Here are a couple of goodies: %D %D \startitemize %D \item styles hooked into \CONTEXT\ style mechanism %D \item support for color and rulethickness (mp mode only) %D \item position tracking %D \stopitemize \let\@@chemicalrulecolor\empty \let\@@chemicalcolor \empty \def\setchemicalattributes {\scratchdimen\@@chemicalrulethickness \def\chemicalattributes {withpen pencircle scaled \the\scratchdimen\space withcolor }% \doifelsenothing\@@chemicalrulecolor {\edef\chemicalattributes{\chemicalattributes black}} {\edef\chemicalattributes{\chemicalattributes \MPcolor{\@@chemicalrulecolor}}}% \startMPdrawing drawoptions (\chemicalattributes) ; \stopMPdrawing} \unexpanded\def\@@dochemicalcolor {\dousecolorparameter\@@chemicalcolor} \unexpanded\def\@@dochemicalstyle {\dousestyleparameter\@@chemicalstyle} \setupchemical [\c!rulethickness=\linewidth, \c!rulecolor=, \c!color=] \def\cpos#1#2% {\iftrialtypesetting #2% \else \bgroup \globalpushmacro\dowithchemical \gdef\dowithchemical##1{\hpos{#1}{##1}\globalpopmacro\dowithchemical}% #2% \egroup \fi} \protect \endinput % \startchemical[axis=on,frame=yes] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical % \startchemical[size=big,scale=small,axis=on,frame=yes,factor=1.5] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical % \startchemical[size=big,scale=medium,axis=on,frame=yes,factor=1.5] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical % \startchemical[size=big,scale=big,axis=on,frame=yes,factor=1.5] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-032.mkii0000644000175000017500000000721511754241457024011 0ustar norbertnorbert%D \module %D [ file=enco-032, %D version=2006.03.30, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Unicode Goodies, %D author={Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % unicode table 32 (= hex 20) \startencoding [default] \definecommand unic@threeperemspace {\hskip .33333em } \definecommand unic@fourperemspace {\hskip .25em } \definecommand unic@sixperemspace {\hskip .16667em } \definecommand unic@figurespace {\hphantom{0}} \definecommand unic@punctuationspace {\hphantom{,}} \definecommand unic@hairspace {\hskip .08333em } \definecommand unic@zerowidthspace {\hskip 0em plus 1sp } \definecommand unic@zerowidthjoiner {\kern 0em } \definecommand unic@zerowidthnonjoiner {\hskip 0em } \definecommand unic@quotedblleftreversed {\mirror{\quotedblright}} \definecommand unic@quoteleftreversed {\mirror{\quoteright}} \definecommand unic@onedotleader {{\periods[1]}} \definecommand unic@twodotleader {{\periods[2]}} \definecommand unic@hyphenationpoint {.\allowbreak } \definecommand unic@doubleexclamationmark {!!} \definecommand unic@exclamationquestionmark {!?} \definecommand unic@questionexclamationmark {?!} \definecommand unic@doublequestionmark {??} \definecommand unic@reversedpilcrowsign {\mirror{\P}} \definecommand unic@reversedsemicolon {\mirror{;}} \definecommand unic@superscriptzero {\high{0}} \definecommand unic@superscripti {\high{i}} \definecommand unic@superscriptfour {\high{4}} \definecommand unic@superscriptfive {\high{5}} \definecommand unic@superscriptsix {\high{6}} \definecommand unic@superscriptseven {\high{7}} \definecommand unic@superscripteight {\high{8}} \definecommand unic@superscriptnine {\high{9}} \definecommand unic@superscriptplus {\high{+}} \definecommand unic@superscriptminus {\high{\textminus}} \definecommand unic@superscriptequals {\high{=}} \definecommand unic@superscriptleft {\high{(}} \definecommand unic@superscriptright {\high{)}} \definecommand unic@superscriptn {\high{n}} \definecommand unic@subscriptzero {\low{0}} \definecommand unic@subscriptone {\low{1}} \definecommand unic@subscripttwo {\low{2}} \definecommand unic@subscriptthree {\low{3}} \definecommand unic@subscriptfour {\low{4}} \definecommand unic@subscriptfive {\low{5}} \definecommand unic@subscriptsix {\low{6}} \definecommand unic@subscriptseven {\low{7}} \definecommand unic@subscripteight {\low{8}} \definecommand unic@subscriptnine {\low{9}} \definecommand unic@subscriptplus {\low{+}} \definecommand unic@subscriptminus {\low{\textminus}} \definecommand unic@subscriptequals {\low{=}} \definecommand unic@subscriptleft {\low{(}} \definecommand unic@subscriptright {\low{)}} \definecommand unic@subscripta {\low{a}} \definecommand unic@subscripte {\low{e}} \definecommand unic@subscripto {\low{o}} \definecommand unic@subscriptx {\low{x}} \definecommand unic@subscriptschwa {\low{\schwa}} \stopencoding \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-function.lua0000644000175000017500000000055112130411274024446 0ustar norbertnorbertif not modules then modules = { } end modules ['l-functions'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } functions = functions or { } function functions.dummy() end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-map.lua0000644000175000017500000006135212161703335024110 0ustar norbertnorbertif not modules then modules = { } end modules ['math-map'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: make sparse .. if self --[[ldx--

Remapping mathematics alphabets.

--ldx]]-- -- oldstyle: not really mathematics but happened to be part of -- the mathematics fonts in cmr -- -- persian: we will also provide mappers for other -- scripts -- todo: alphabets namespace -- maybe: script/scriptscript dynamic, -- to be looked into once the fonts are ready (will become font -- goodie): -- -- (U+2202,U+1D715) : upright -- (U+2202,U+1D715) : italic -- (U+2202,U+1D715) : upright -- -- plus add them to the regular vectors below so that they honor \it etc local type, next = type, next local floor, div = math.floor, math.div local merged = table.merged local extract = bit32.extract local allocate = utilities.storage.allocate local texattribute = tex.attribute local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local setmetatableindex = table.setmetatableindex local trace_greek = false trackers.register("math.greek", function(v) trace_greek = v end) local report_remapping = logs.reporter("mathematics","remapping") mathematics = mathematics or { } local mathematics = mathematics -- Unfortunately some alphabets have gaps (thereby troubling all applications that -- need to deal with math). Somewhat strange considering all those weird symbols that -- were added afterwards. The following trickery (and data) is only to be used for -- diagnostics and quick and dirty alphabet tracing (s-mat-10.mkiv) as we deal with -- it otherwise. mathematics.gaps = { [0x1D455] = 0x0210E, -- H [0x1D49D] = 0x0212C, -- script B [0x1D4A0] = 0x02130, -- script E [0x1D4A1] = 0x02131, -- script F [0x1D4A3] = 0x0210B, -- script H [0x1D4A4] = 0x02110, -- script I [0x1D4A7] = 0x02112, -- script L [0x1D4A8] = 0x02133, -- script M [0x1D4AD] = 0x0211B, -- script R [0x1D4BA] = 0x0212F, -- script e [0x1D4BC] = 0x0210A, -- script g [0x1D4C4] = 0x02134, -- script o [0x1D506] = 0x0212D, -- fraktur C [0x1D50B] = 0x0210C, -- fraktur H [0x1D50C] = 0x02111, -- fraktur I [0x1D515] = 0x0211C, -- fraktur R [0x1D51D] = 0x02128, -- fraktur Z [0x1D53A] = 0x02102, -- bb C [0x1D53F] = 0x0210D, -- bb H [0x1D545] = 0x02115, -- bb N [0x1D547] = 0x02119, -- bb P [0x1D548] = 0x0211A, -- bb Q [0x1D549] = 0x0211D, -- bb R [0x1D551] = 0x02124, -- bb Z } local function fillinmathgaps(tfmdata,key,value) local mathgaps = mathematics.gaps local characters = tfmdata.characters local descriptions = tfmdata.descriptions for gap, original in next, mathgaps do if characters[original] and not characters[gap] then characters [gap] = characters [original] descriptions[gap] = descriptions[original] end end end registerotffeature { name = "mathgaps", description = "plug gaps in math alphabets", comment = "regular document sources should not depend on this", manipulators = { base = fillinmathgaps, node = fillinmathgaps, } } -- we could use one level less and have tf etc be tables directly but the -- following approach permits easier remapping of a-a, A-Z and 0-9 to -- fallbacks; symbols is currently mostly greek local function todigit(n) local t = { } for i=0, 9 do t[0x00030+i] = n+i end return t end local function toupper(n) local t = { } for i=0,25 do t[0x00041+i] = n+i end return t end local function tolower(n) local t = { } for i=0,25 do t[0x00061+i] = n+i end return t end local regular_tf = { digits = todigit(0x00030), ucletters = toupper(0x00041), lcletters = tolower(0x00061), ucgreek = { [0x0391]=0x0391, [0x0392]=0x0392, [0x0393]=0x0393, [0x0394]=0x0394, [0x0395]=0x0395, [0x0396]=0x0396, [0x0397]=0x0397, [0x0398]=0x0398, [0x0399]=0x0399, [0x039A]=0x039A, [0x039B]=0x039B, [0x039C]=0x039C, [0x039D]=0x039D, [0x039E]=0x039E, [0x039F]=0x039F, [0x03A0]=0x03A0, [0x03A1]=0x03A1, [0x03A3]=0x03A3, [0x03A4]=0x03A4, [0x03A5]=0x03A5, [0x03A6]=0x03A6, [0x03A7]=0x03A7, [0x03A8]=0x03A8, [0x03A9]=0x03A9, }, lcgreek = { [0x03B1]=0x03B1, [0x03B2]=0x03B2, [0x03B3]=0x03B3, [0x03B4]=0x03B4, [0x03B5]=0x03B5, [0x03B6]=0x03B6, [0x03B7]=0x03B7, [0x03B8]=0x03B8, [0x03B9]=0x03B9, [0x03BA]=0x03BA, [0x03BB]=0x03BB, [0x03BC]=0x03BC, [0x03BD]=0x03BD, [0x03BE]=0x03BE, [0x03BF]=0x03BF, [0x03C0]=0x03C0, [0x03C1]=0x03C1, [0x03C2]=0x03C2, [0x03C3]=0x03C3, [0x03C4]=0x03C4, [0x03C5]=0x03C5, [0x03C6]=0x03C6, [0x03C7]=0x03C7, [0x03C8]=0x03C8, [0x03C9]=0x03C9, [0x03D1]=0x03D1, [0x03D5]=0x03D5, [0x03D6]=0x03D6, [0x03F0]=0x03F0, [0x03F1]=0x03F1, [0x03F4]=0x03F4, [0x03F5]=0x03F5, }, symbols = { [0x2202]=0x2202, [0x2207]=0x2207, }, } local regular_it = { digits = regular_tf.digits, ucletters = toupper(0x1D434), lcletters = { -- H [0x00061]=0x1D44E, [0x00062]=0x1D44F, [0x00063]=0x1D450, [0x00064]=0x1D451, [0x00065]=0x1D452, [0x00066]=0x1D453, [0x00067]=0x1D454, [0x00068]=0x0210E, [0x00069]=0x1D456, [0x0006A]=0x1D457, [0x0006B]=0x1D458, [0x0006C]=0x1D459, [0x0006D]=0x1D45A, [0x0006E]=0x1D45B, [0x0006F]=0x1D45C, [0x00070]=0x1D45D, [0x00071]=0x1D45E, [0x00072]=0x1D45F, [0x00073]=0x1D460, [0x00074]=0x1D461, [0x00075]=0x1D462, [0x00076]=0x1D463, [0x00077]=0x1D464, [0x00078]=0x1D465, [0x00079]=0x1D466, [0x0007A]=0x1D467, }, ucgreek = { [0x0391]=0x1D6E2, [0x0392]=0x1D6E3, [0x0393]=0x1D6E4, [0x0394]=0x1D6E5, [0x0395]=0x1D6E6, [0x0396]=0x1D6E7, [0x0397]=0x1D6E8, [0x0398]=0x1D6E9, [0x0399]=0x1D6EA, [0x039A]=0x1D6EB, [0x039B]=0x1D6EC, [0x039C]=0x1D6ED, [0x039D]=0x1D6EE, [0x039E]=0x1D6EF, [0x039F]=0x1D6F0, [0x03A0]=0x1D6F1, [0x03A1]=0x1D6F2, [0x03A3]=0x1D6F4, [0x03A4]=0x1D6F5, [0x03A5]=0x1D6F6, [0x03A6]=0x1D6F7, [0x03A7]=0x1D6F8, [0x03A8]=0x1D6F9, [0x03A9]=0x1D6FA, }, lcgreek = { [0x03B1]=0x1D6FC, [0x03B2]=0x1D6FD, [0x03B3]=0x1D6FE, [0x03B4]=0x1D6FF, [0x03B5]=0x1D700, [0x03B6]=0x1D701, [0x03B7]=0x1D702, [0x03B8]=0x1D703, [0x03B9]=0x1D704, [0x03BA]=0x1D705, [0x03BB]=0x1D706, [0x03BC]=0x1D707, [0x03BD]=0x1D708, [0x03BE]=0x1D709, [0x03BF]=0x1D70A, [0x03C0]=0x1D70B, [0x03C1]=0x1D70C, [0x03C2]=0x1D70D, [0x03C3]=0x1D70E, [0x03C4]=0x1D70F, [0x03C5]=0x1D710, [0x03C6]=0x1D711, [0x03C7]=0x1D712, [0x03C8]=0x1D713, [0x03C9]=0x1D714, [0x03D1]=0x1D717, [0x03D5]=0x1D719, [0x03D6]=0x1D71B, [0x03F0]=0x1D718, [0x03F1]=0x1D71A, [0x03F4]=0x1D6F3, [0x03F5]=0x1D716, }, symbols = { [0x2202]=0x1D715, [0x2207]=0x1D6FB, }, } local regular_bf= { digits = todigit(0x1D7CE), ucletters = toupper(0x1D400), lcletters = tolower(0x1D41A), ucgreek = { [0x0391]=0x1D6A8, [0x0392]=0x1D6A9, [0x0393]=0x1D6AA, [0x0394]=0x1D6AB, [0x0395]=0x1D6AC, [0x0396]=0x1D6AD, [0x0397]=0x1D6AE, [0x0398]=0x1D6AF, [0x0399]=0x1D6B0, [0x039A]=0x1D6B1, [0x039B]=0x1D6B2, [0x039C]=0x1D6B3, [0x039D]=0x1D6B4, [0x039E]=0x1D6B5, [0x039F]=0x1D6B6, [0x03A0]=0x1D6B7, [0x03A1]=0x1D6B8, [0x03A3]=0x1D6BA, [0x03A4]=0x1D6BB, [0x03A5]=0x1D6BC, [0x03A6]=0x1D6BD, [0x03A7]=0x1D6BE, [0x03A8]=0x1D6BF, [0x03A9]=0x1D6C0, }, lcgreek = { [0x03B1]=0x1D6C2, [0x03B2]=0x1D6C3, [0x03B3]=0x1D6C4, [0x03B4]=0x1D6C5, [0x03B5]=0x1D6C6, [0x03B6]=0x1D6C7, [0x03B7]=0x1D6C8, [0x03B8]=0x1D6C9, [0x03B9]=0x1D6CA, [0x03BA]=0x1D6CB, [0x03BB]=0x1D6CC, [0x03BC]=0x1D6CD, [0x03BD]=0x1D6CE, [0x03BE]=0x1D6CF, [0x03BF]=0x1D6D0, [0x03C0]=0x1D6D1, [0x03C1]=0x1D6D2, [0x03C2]=0x1D6D3, [0x03C3]=0x1D6D4, [0x03C4]=0x1D6D5, [0x03C5]=0x1D6D6, [0x03C6]=0x1D6D7, [0x03C7]=0x1D6D8, [0x03C8]=0x1D6D9, [0x03C9]=0x1D6DA, [0x03D1]=0x1D6DD, [0x03D5]=0x1D6DF, [0x03D6]=0x1D6E1, [0x03F0]=0x1D6DE, [0x03F1]=0x1D6E0, [0x03F4]=0x1D6B9, [0x03F5]=0x1D6DC, }, symbols = { [0x2202]=0x1D6DB, [0x2207]=0x1D6C1, }, } local regular_bi = { digits = regular_bf.digits, ucletters = toupper(0x1D468), lcletters = tolower(0x1D482), ucgreek = { [0x0391]=0x1D71C, [0x0392]=0x1D71D, [0x0393]=0x1D71E, [0x0394]=0x1D71F, [0x0395]=0x1D720, [0x0396]=0x1D721, [0x0397]=0x1D722, [0x0398]=0x1D723, [0x0399]=0x1D724, [0x039A]=0x1D725, [0x039B]=0x1D726, [0x039C]=0x1D727, [0x039D]=0x1D728, [0x039E]=0x1D729, [0x039F]=0x1D72A, [0x03A0]=0x1D72B, [0x03A1]=0x1D72C, [0x03A3]=0x1D72E, [0x03A4]=0x1D72F, [0x03A5]=0x1D730, [0x03A6]=0x1D731, [0x03A7]=0x1D732, [0x03A8]=0x1D733, [0x03A9]=0x1D734, }, lcgreek = { [0x03B1]=0x1D736, [0x03B2]=0x1D737, [0x03B3]=0x1D738, [0x03B4]=0x1D739, [0x03B5]=0x1D73A, [0x03B6]=0x1D73B, [0x03B7]=0x1D73C, [0x03B8]=0x1D73D, [0x03B9]=0x1D73E, [0x03BA]=0x1D73F, [0x03BB]=0x1D740, [0x03BC]=0x1D741, [0x03BD]=0x1D742, [0x03BE]=0x1D743, [0x03BF]=0x1D744, [0x03C0]=0x1D745, [0x03C1]=0x1D746, [0x03C2]=0x1D747, [0x03C3]=0x1D748, [0x03C4]=0x1D749, [0x03C5]=0x1D74A, [0x03C6]=0x1D74B, [0x03C7]=0x1D74C, [0x03C8]=0x1D74D, [0x03C9]=0x1D74E, [0x03D1]=0x1D751, [0x03D5]=0x1D753, [0x03D6]=0x1D755, [0x03F0]=0x1D752, [0x03F1]=0x1D754, [0x03F4]=0x1D72D, [0x03F5]=0x1D750, }, symbols = { [0x2202]=0x1D74F, [0x2207]=0x1D735, }, } local regular = { tf = regular_tf, it = regular_it, bf = regular_bf, bi = regular_bi, } local sansserif_tf = { digits = todigit(0x1D7E2), ucletters = toupper(0x1D5A0), lcletters = tolower(0x1D5BA), lcgreek = regular_tf.lcgreek, ucgreek = regular_tf.ucgreek, symbols = regular_tf.symbols, } local sansserif_it = { digits = regular_tf.digits, ucletters = toupper(0x1D608), lcletters = tolower(0x1D622), lcgreek = regular_tf.lcgreek, ucgreek = regular_tf.ucgreek, symbols = regular_tf.symbols, } local sansserif_bf = { digits = todigit(0x1D7EC), ucletters = toupper(0x1D5D4), lcletters = tolower(0x1D5EE), ucgreek = { [0x0391]=0x1D756, [0x0392]=0x1D757, [0x0393]=0x1D758, [0x0394]=0x1D759, [0x0395]=0x1D75A, [0x0396]=0x1D75B, [0x0397]=0x1D75C, [0x0398]=0x1D75D, [0x0399]=0x1D75E, [0x039A]=0x1D75F, [0x039B]=0x1D760, [0x039C]=0x1D761, [0x039D]=0x1D762, [0x039E]=0x1D763, [0x039F]=0x1D764, [0x03A0]=0x1D765, [0x03A1]=0x1D766, [0x03A3]=0x1D768, [0x03A4]=0x1D769, [0x03A5]=0x1D76A, [0x03A6]=0x1D76B, [0x03A7]=0x1D76C, [0x03A8]=0x1D76D, [0x03A9]=0x1D76E, }, lcgreek = { [0x03B1]=0x1D770, [0x03B2]=0x1D771, [0x03B3]=0x1D772, [0x03B4]=0x1D773, [0x03B5]=0x1D774, [0x03B6]=0x1D775, [0x03B7]=0x1D776, [0x03B8]=0x1D777, [0x03B9]=0x1D778, [0x03BA]=0x1D779, [0x03BB]=0x1D77A, [0x03BC]=0x1D77B, [0x03BD]=0x1D77C, [0x03BE]=0x1D77D, [0x03BF]=0x1D77E, [0x03C0]=0x1D77F, [0x03C1]=0x1D780, [0x03C2]=0x1D781, [0x03C3]=0x1D782, [0x03C4]=0x1D783, [0x03C5]=0x1D784, [0x03C6]=0x1D785, [0x03C7]=0x1D786, [0x03C8]=0x1D787, [0x03C9]=0x1D788, [0x03D1]=0x1D78B, [0x03D5]=0x1D78D, [0x03D6]=0x1D78F, [0x03F0]=0x1D78C, [0x03F1]=0x1D78E, [0x03F4]=0x1D767, [0x03F5]=0x1D78A, }, symbols = { [0x2202]=0x1D789, [0x2207]=0x1D76F, }, } local sansserif_bi = { digits = sansserif_bf.digits, ucletters = toupper(0x1D63C), lcletters = tolower(0x1D656), ucgreek = { [0x0391]=0x1D790, [0x0392]=0x1D791, [0x0393]=0x1D792, [0x0394]=0x1D793, [0x0395]=0x1D794, [0x0396]=0x1D795, [0x0397]=0x1D796, [0x0398]=0x1D797, [0x0399]=0x1D798, [0x039A]=0x1D799, [0x039B]=0x1D79A, [0x039C]=0x1D79B, [0x039D]=0x1D79C, [0x039E]=0x1D79D, [0x039F]=0x1D79E, [0x03A0]=0x1D79F, [0x03A1]=0x1D7A0, [0x03A3]=0x1D7A2, [0x03A4]=0x1D7A3, [0x03A5]=0x1D7A4, [0x03A6]=0x1D7A5, [0x03A7]=0x1D7A6, [0x03A8]=0x1D7A7, [0x03A9]=0x1D7A8, }, lcgreek = { [0x03B1]=0x1D7AA, [0x03B2]=0x1D7AB, [0x03B3]=0x1D7AC, [0x03B4]=0x1D7AD, [0x03B5]=0x1D7AE, [0x03B6]=0x1D7AF, [0x03B7]=0x1D7B0, [0x03B8]=0x1D7B1, [0x03B9]=0x1D7B2, [0x03BA]=0x1D7B3, [0x03BB]=0x1D7B4, [0x03BC]=0x1D7B5, [0x03BD]=0x1D7B6, [0x03BE]=0x1D7B7, [0x03BF]=0x1D7B8, [0x03C0]=0x1D7B9, [0x03C1]=0x1D7BA, [0x03C2]=0x1D7BB, [0x03C3]=0x1D7BC, [0x03C4]=0x1D7BD, [0x03C5]=0x1D7BE, [0x03C6]=0x1D7BF, [0x03C7]=0x1D7C0, [0x03C8]=0x1D7C1, [0x03C9]=0x1D7C2, [0x03D1]=0x1D7C5, [0x03D5]=0x1D7C7, [0x03D6]=0x1D7C9, [0x03F0]=0x1D7C6, [0x03F1]=0x1D7C8, [0x03F4]=0x1D7A1, [0x03F5]=0x1D7C4, }, symbols = { [0x2202]=0x1D7C3, [0x2207]=0x1D7A9, }, } local sansserif = { tf = sansserif_tf, it = sansserif_it, bf = sansserif_bf, bi = sansserif_bi, } local monospaced_tf = { digits = todigit(0x1D7F6), ucletters = toupper(0x1D670), lcletters = tolower(0x1D68A), lcgreek = sansserif_tf.lcgreek, ucgreek = sansserif_tf.ucgreek, symbols = sansserif_tf.symbols, } local monospaced = { tf = monospaced_tf, it = sansserif_tf, bf = sansserif_tf, bi = sansserif_bf, } local blackboard_tf = { digits = todigit(0x1D7D8), ucletters = { -- C H N P Q R Z [0x00041]=0x1D538, [0x00042]=0x1D539, [0x00043]=0x02102, [0x00044]=0x1D53B, [0x00045]=0x1D53C, [0x00046]=0x1D53D, [0x00047]=0x1D53E, [0x00048]=0x0210D, [0x00049]=0x1D540, [0x0004A]=0x1D541, [0x0004B]=0x1D542, [0x0004C]=0x1D543, [0x0004D]=0x1D544, [0x0004E]=0x02115, [0x0004F]=0x1D546, [0x00050]=0x02119, [0x00051]=0x0211A, [0x00052]=0x0211D, [0x00053]=0x1D54A, [0x00054]=0x1D54B, [0x00055]=0x1D54C, [0x00056]=0x1D54D, [0x00057]=0x1D54E, [0x00058]=0x1D54F, [0x00059]=0x1D550, [0x0005A]=0x02124, }, lcletters = tolower(0x1D552), lcgreek = { -- gamma pi [0x03B3]=0x0213C, [0x03C0]=0x0213D, }, ucgreek = { -- Gamma pi [0x0393]=0x0213E, [0x03A0]=0x0213F, }, symbols = { -- sum [0x2211]=0x02140, }, } blackboard_tf.lcgreek = merged(regular_tf.lcgreek, blackboard_tf.lcgreek) blackboard_tf.ucgreek = merged(regular_tf.ucgreek, blackboard_tf.ucgreek) blackboard_tf.symbols = merged(regular_tf.symbols, blackboard_tf.symbols) local blackboard = { tf = blackboard_tf, it = blackboard_tf, bf = blackboard_tf, bi = blackboard_tf, } local fraktur_tf= { digits = regular_tf.digits, ucletters = { -- C H I R Z [0x00041]=0x1D504, [0x00042]=0x1D505, [0x00043]=0x0212D, [0x00044]=0x1D507, [0x00045]=0x1D508, [0x00046]=0x1D509, [0x00047]=0x1D50A, [0x00048]=0x0210C, [0x00049]=0x02111, [0x0004A]=0x1D50D, [0x0004B]=0x1D50E, [0x0004C]=0x1D50F, [0x0004D]=0x1D510, [0x0004E]=0x1D511, [0x0004F]=0x1D512, [0x00050]=0x1D513, [0x00051]=0x1D514, [0x00052]=0x0211C, [0x00053]=0x1D516, [0x00054]=0x1D517, [0x00055]=0x1D518, [0x00056]=0x1D519, [0x00057]=0x1D51A, [0x00058]=0x1D51B, [0x00059]=0x1D51C, [0x0005A]=0x02128, }, lcletters = tolower(0x1D51E), lcgreek = regular_tf.lcgreek, ucgreek = regular_tf.ucgreek, symbols = regular_tf.symbols, } local fraktur_bf = { digits = regular_bf.digits, ucletters = toupper(0x1D56C), lcletters = tolower(0x1D586), lcgreek = regular_bf.lcgreek, ucgreek = regular_bf.ucgreek, symbols = regular_bf.symbols, } local fraktur = { -- ok tf = fraktur_tf, bf = fraktur_bf, it = fraktur_tf, bi = fraktur_bf, } local script_tf = { digits = regular_tf.digits, ucletters = { -- B E F H I L M R -- P 2118 [0x00041]=0x1D49C, [0x00042]=0x0212C, [0x00043]=0x1D49E, [0x00044]=0x1D49F, [0x00045]=0x02130, [0x00046]=0x02131, [0x00047]=0x1D4A2, [0x00048]=0x0210B, [0x00049]=0x02110, [0x0004A]=0x1D4A5, [0x0004B]=0x1D4A6, [0x0004C]=0x02112, [0x0004D]=0x02133, [0x0004E]=0x1D4A9, [0x0004F]=0x1D4AA, [0x00050]=0x1D4AB, [0x00051]=0x1D4AC, [0x00052]=0x0211B, [0x00053]=0x1D4AE, [0x00054]=0x1D4AF, [0x00055]=0x1D4B0, [0x00056]=0x1D4B1, [0x00057]=0x1D4B2, [0x00058]=0x1D4B3, [0x00059]=0x1D4B4, [0x0005A]=0x1D4B5, }, lcletters = { -- E G O -- L 2113 [0x00061]=0x1D4B6, [0x00062]=0x1D4B7, [0x00063]=0x1D4B8, [0x00064]=0x1D4B9, [0x00065]=0x0212F, [0x00066]=0x1D4BB, [0x00067]=0x0210A, [0x00068]=0x1D4BD, [0x00069]=0x1D4BE, [0x0006A]=0x1D4BF, [0x0006B]=0x1D4C0, [0x0006C]=0x1D4C1, [0x0006D]=0x1D4C2, [0x0006E]=0x1D4C3, [0x0006F]=0x02134, [0x00070]=0x1D4C5, [0x00071]=0x1D4C6, [0x00072]=0x1D4C7, [0x00073]=0x1D4C8, [0x00074]=0x1D4C9, [0x00075]=0x1D4CA, [0x00076]=0x1D4CB, [0x00077]=0x1D4CC, [0x00078]=0x1D4CD, [0x00079]=0x1D4CE, [0x0007A]=0x1D4CF, }, lcgreek = regular_tf.lcgreek, ucgreek = regular_tf.ucgreek, symbols = regular_tf.symbols, } local script_bf = { digits = regular_bf.digits, ucletters = toupper(0x1D4D0), lcletters = tolower(0x1D4EA), lcgreek = regular_bf.lcgreek, ucgreek = regular_bf.ucgreek, symbols = regular_bf.symbols, } local script = { tf = script_tf, bf = script_bf, it = script_tf, bi = script_bf, } local alphabets = allocate { regular = regular, sansserif = sansserif, monospaced = monospaced, blackboard = blackboard, fraktur = fraktur, script = script, } mathematics.alphabets = alphabets local boldmap = { } local function remap(tf,bf) for _, alphabet in next, alphabets do local tfdata = alphabet[tf] local bfdata = alphabet[bf] if tfdata then for k, tfd in next, tfdata do if type(tfd) == "table" then local bfd = bfdata[k] if bfd then for n, u in next, tfd do local bn = bfd[n] if bn then boldmap[u] = bn end end end end end end end end remap("tf","bf") remap("it","bi") mathematics.boldmap = boldmap local mathremap = allocate { } for alphabet, styles in next, alphabets do -- per 9/6/2011 we also have attr for missing for style, data in next, styles do -- let's keep the long names (for tracing) local n = #mathremap + 1 data.attribute = n data.alphabet = alphabet data.style = style mathremap[n] = data end end mathematics.mapremap = mathremap -- beware, these are shared tables (no problem since they're not -- in unicode) alphabets.tt = monospaced alphabets.ss = sansserif alphabets.rm = regular alphabets.bb = blackboard alphabets.fr = fraktur alphabets.sr = script alphabets.serif = regular alphabets.type = monospaced alphabets.teletype = monospaced regular.normal = regular_tf regular.italic = regular_it regular.bold = regular_bf regular.bolditalic = regular_bi sansserif.normal = sansserif_tf sansserif.italic = sansserif_it sansserif.bold = sansserif_bf sansserif.bolditalic = sansserif_bi monospaced.normal = monospaced_tf monospaced.italic = monospaced_it monospaced.bold = monospaced_bf monospaced.bolditalic = monospaced_bi function mathematics.tostyle(attribute) local r = mathremap[attribute] return r and r.style or "tf" end function mathematics.toname(attribute) local r = mathremap[attribute] return r and r.alphabet or "regular" end -- of course we could do some div/mod trickery instead local mathalphabet = attributes.private("mathalphabet") function mathematics.getboth(alphabet,style) local data = alphabet and alphabets[alphabet] or regular data = data[style or "tf"] or data.tf return data and data.attribute end function mathematics.getstyle(style) local r = mathremap[texattribute[mathalphabet]] local alphabet = r and r.alphabet or "regular" local data = alphabets[alphabet][style] return data and data.attribute end function mathematics.syncboth(alphabet,style) local data = alphabet and alphabets[alphabet] or regular data = style and data[style] or data.tf texattribute[mathalphabet] = data and data.attribute or texattribute[mathalphabet] end function mathematics.syncstyle(style) local r = mathremap[texattribute[mathalphabet]] local alphabet = r and r.alphabet or "regular" local data = alphabets[alphabet][style] texattribute[mathalphabet] = data and data.attribute or texattribute[mathalphabet] end function mathematics.syncname(alphabet) -- local r = mathremap[mathalphabet] local r = mathremap[texattribute[mathalphabet]] local style = r and r.style or "tf" local data = alphabets[alphabet][style] texattribute[mathalphabet] = data and data.attribute or texattribute[mathalphabet] end local islcgreek = regular_tf.lcgreek local isucgreek = regular_tf.ucgreek local issygreek = regular_tf.symbols local isgreek = merged(islcgreek,isucgreek,issygreek) local greekremapping = { [1] = { what = "unchanged" }, -- upright [2] = { what = "upright", it = "tf", bi = "bf" }, -- upright [3] = { what = "italic", tf = "it", bf = "bi" }, -- italic } local usedremap = { } local function resolver(map) return function (t,k) local v = map.digits [k] or map.lcletters[k] or map.ucletters[k] or map.lcgreek [k] or map.ucgreek [k] or map.symbols [k] or k t[k] = v return v end end for k, v in next, mathremap do local t = { } setmetatableindex(t,resolver(v)) usedremap[k] = t end local function remapgreek(mathalphabet,how,detail,char) local r = mathremap[mathalphabet] -- what if 0 local alphabet = r and r.alphabet or "regular" local style = r and r.style or "tf" local remapping = greekremapping[how] if trace_greek then report_remapping("greek %s, %s char %C, alphabet %a %a, method %a","before",detail,char,alphabet,style,remapping.what) end local newstyle = remapping[style] if newstyle then local data = alphabets[alphabet][newstyle] -- always something mathalphabet = data and data.attribute or mathalphabet style = newstyle end if trace_greek then report_remapping("greek %s, %s char %C, alphabet %a %a, method %a","after",detail,char,alphabet,style,remapping.what) end return mathalphabet, style end function mathematics.remapalphabets(char,mathalphabet,mathgreek) if not mathalphabet then return end if mathgreek and mathgreek > 0 then if not isgreek[char] then -- nothing needed elseif islcgreek[char] then local lc = extract(mathgreek,4,4) if lc > 1 then mathalphabet = remapgreek(mathalphabet,lc,"lowercase",char) end elseif isucgreek[char] then local uc = extract(mathgreek,0,4) if uc > 1 then mathalphabet = remapgreek(mathalphabet,uc,"uppercase",char) end elseif issygreek[char] then local sy = extract(mathgreek,8,4) if sy > 1 then mathalphabet = remapgreek(mathalphabet,sy,"symbol",char) end end end if mathalphabet > 0 then local remap = usedremap[mathalphabet] -- redundant check if remap then local newchar = remap[char] return newchar ~= char and newchar end end -- return nil end -- begin of experiment local fallback = { tf = "bf", it = "bi", bf = "tf", bi = "it", } function mathematics.fallbackstyleattr(attribute) local r = mathremap[attribute] local alphabet = r.alphabet or "regular" local style = r.style or "tf" local fback = fallback[style] if fback then local data = alphabets[alphabet][fback] if data then local attr = data.attribute return attribute ~= attr and attr end end end -- end of experiment local function checkedcopy(characters,child,parent) for k, v in next, child do if not characters[v] then characters[v] = characters[parent[k]] end end end function mathematics.addfallbacks(main) local characters = main.characters checkedcopy(characters,regular.bf.ucgreek,regular.tf.ucgreek) checkedcopy(characters,regular.bf.lcgreek,regular.tf.lcgreek) checkedcopy(characters,regular.bi.ucgreek,regular.it.ucgreek) checkedcopy(characters,regular.bi.lcgreek,regular.it.lcgreek) end -- interface commands.setmathattribute = mathematics.syncboth commands.setmathalphabet = mathematics.syncname commands.setmathstyle = mathematics.syncstyle context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-xsd.mkii0000644000175000017500000000137011754241457024316 0ustar norbertnorbert%D \module %D [ file=xtag-xsd, %D version=2001.10.04, %D title=\CONTEXT\ XML Support, %D subtitle=Schemas, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The following commands picks up a named block from the %D given file and pretty prints it. %D %D \starttyping %D \showXSDcomponent [x-exa-tx.xsd] [sequence] %D \stoptyping %D %D If needed, you adapt the colors used by redefining the %D \type {xtag} color palet. \fetchruntimecommand\showXSDcomponent {\f!xtagprefix\s!run} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/export-example.css0000644000175000017500000003206111754241457025371 0ustar norbertnorbert/* author : Hans Hagen, PRAGMA-ADE, Hasselt NL copyright : PRAGMA ADE / ConTeXt Development Team license : see context related readme files comment : companion to context.mkiv */ /* ignore : mixed */ /* metadata: display */ ignore { display : none ; } xmetadata { display : none ; } xmetavariable { display : none ; } /* document : display */ document:before { content : attr(title) ; font-size : 44pt ; font-weight : bold ; margin-bottom : 1em ; } document { font-family : "DejaVu Serif", "Lucida Bright", serif ; font-size : 12pt ; max-width : 50em ; padding : 1em ; /* text-align : justify ; */ /* hyphens : manual ; */ /* text-justify : inter-word ; */ } document>metadata { font-family : "Lucida Console", "DejaVu Sans Mono", monospace ; margin-bottom : 2em ; } document>metadata>metavariable[name="title"]:before { content : "title\00A0\00A0\00A0:\00A0" ; } document>metadata>metavariable[name="author"]:before { content : "author\00A0\00A0:\00A0" ; } document>metadata>metavariable[name="version"]:before { content : "version\00A0:\00A0" ; } document>metadata>metavariable[name="title"], document>metadata>metavariable[name="author"], document>metadata>metavariable[name="version"] { display : block ; } /* paragraph : mixed */ /* p : mixed */ paragraph, p { display : block ; margin-top : 0.5em ; margin-bottom : 0.5em ; } /* break : display */ break { display : block ; margin-bottom : 0.5em ; } /* construct : inline */ /* highlight : inline */ construct { } construct[detail="important"] { font-weight : bold ; } highlight { /* todo: style and color */ } /* section : display */ /* sectiontitle : mixed */ /* sectionnumber : mixed */ /* sectioncontent : display */ section { display : block ; } sectioncontent { display : block ; margin-top : 1em ; margin-bottom : 1em ; } section[detail="chapter"], section[detail="title"] { margin-top : 3em ; margin-bottom : 2em ; } section[detail="section"], section[detail="subject"] { margin-top : 2.5em ; margin-bottom : 2.5em ; } section[detail="subsection"], section[detail="subsubject"] { margin-top : 2em ; margin-bottom : 2em ; } section[detail="subsubsection"], section[detail="subsubsubject"] { margin-top : 1em ; margin-bottom : 0em ; } section[detail="summary"], section[detail="subsummary"] { margin-top : 1em ; margin-bottom : 1em ; } section[detail="chapter"]>sectionnumber { display : inline-block ; margin-right : 1em ; font-size : 3em ; font-weight : bold ; } section[detail="chapter"]>sectiontitle, section[detail="title"]>sectiontitle { font-size : 3em ; font-weight : bold ; } section[detail="section"]>sectiontitle, section[detail="subject"]>sectiontitle { font-size : 2.5em ; font-weight : bold ; } section[detail="subsection"]>sectiontitle, section[detail="subsubject"]>sectiontitle{ font-size : 2em ; font-weight : bold ; } section[detail="subsubsection"]>sectiontitle, section[detail="subsubsubject"]>sectiontitle{ font-size : 1em ; font-weight : bold ; } section[detail="section"]>sectionnumber { display : inline-block ; margin-right : 1em ; font-size : 2.5em ; font-weight : bold ; } section[detail="summary"]>sectiontitle { display : block ; margin-top : 1em ; margin-bottom : 1em ; font-weight : bold ; border-bottom-style : solid ; border-color : rgb(50%,50%,100%) ; border-width : .15em; } section[detail="subsection"]>sectionnumber { display : inline-block ; margin-right : 1em ; font-size : 2em ; font-weight : bold ; } section[detail="subsection"]>sectionnumber { display : inline-block ; margin-right : 1em ; font-size : 1em ; font-weight : bold ; } section[detail="subsummary"]>sectiontitle { display : block ; margin-top : 1em ; margin-bottom : 1em ; font-weight : bold ; border-color : rgb(50%,50%,100%) ; border-bottom-style : dotted ; border-width : .15em ; } /* itemgroup : display */ /* item : display */ /* itemtag : mixed */ /* itemcontent : mixed */ /* type : alphabetic ; */ /* suffix : '.' ; */ @counter-style lower-greek { /* css 3 */ type : non-repeating ; glyphs : 'α' 'β' 'γ' 'δ' 'ε' 'ζ' 'η' 'θ' 'ι' 'κ' 'λ' 'μ' 'ν' 'ξ' 'ο' 'π' 'ρ' 'σ' 'τ' 'υ' 'φ' 'χ' 'ψ' 'ω' ; } @counter-style upper-greek { /* css 3 */ type : non-repeating ; glyphs : 'Α' 'B' 'Γ' 'Δ' 'Ε' 'Ζ' 'Η' 'Θ' 'Ι' 'Κ' 'Λ' 'Μ' 'Ν' 'Ξ' 'Ο' 'Π' 'Ρ' 'Σ' 'Τ' 'Υ' 'Φ' 'Χ' 'Ψ' 'Ω' ; } itemgroup { display : block ; margin-bottom : 0.5em ; margin-top : 0.5em ; } itemgroup[symbol="1"] { list-style-type : disc ; } itemgroup[symbol="2"] { list-style-type : square ; } itemgroup[symbol="3"] { list-style-type : square ; } itemgroup[symbol="4"] { list-style-type : square ; } itemgroup[symbol="5"] { list-style-type : circ ; } itemgroup[symbol="a"] { list-style-type : lower-alpha ; } itemgroup[symbol="A"] { list-style-type : alpha ; } itemgroup[symbol="r"] { list-style-type : lower-roman ; } itemgroup[symbol="R"] { list-style-type : upper-roman ; } itemgroup[symbol="n"] { list-style-type : decimal ; } itemgroup[symbol="g"] { list-style-type : lower-greek ; } itemgroup[symbol="G"] { list-style-type : upper-greek ; } item { display : list-item ; margin-left : 1em ; margin-bottom : 0.5em ; margin-top : 0.5em ; } itemtag { display: none ; } itemcontent { } /* description : display */ /* descriptiontag : mixed */ /* descriptioncontent : mixed */ /* descriptionsymbol : inline */ description { display : block ; margin-bottom : 1em ; margin-top : 1em ; } descriptiontag { float : left ; clear : left ; margin-right : 1em ; text-align : left ; font-weight : bold ; } descriptioncontent { } descriptionsymbol { } /* verbatimblock : display */ /* verbatimlines : display */ /* verbatimline : mixed */ /* verbatim : inline */ verbatimblock { background-color : rgb(50%,50%,100%) ; display : block ; padding : 1em ; margin-bottom : 1em ; margin-top : 1em ; font-family : "Lucida Console", "DejaVu Sans Mono", monospace ; } verbatimlines+verbatimlines { display : block ; margin-top : 1em ; } verbatimline { display : block ; white-space : pre-wrap ; } verbatim { white-space : pre-wrap ; color : rgb(60%,60%,0%) ; font-family : "Lucida Console", "DejaVu Sans Mono", monospace ; } /* lines : display */ /* line : mixed */ lines { display : block ; margin-bottom : 1em ; margin-top : 1em ; } lines+lines { display : block ; margin-top : 1em ; } line { display : block ; white-space : pre-wrap ; } /* synonym : inline */ /* sorting : inline */ sorting, synonym { display : inline ; font-variant : small-caps ; } /* register : display */ /* registersection : display */ /* registertag : mixed */ /* registerentries : display */ /* registerentry : mixed */ /* registersee : mixed */ /* registerpages : mixed */ /* registerpage : inline */ /* registerpagerange : mixed */ register { display: none ; } /* table : display */ /* tablerow : display */ /* tablecell : mixed */ table { display : table ; } tablerow { display : table-row ; } tablecell[align="middle"] { display : table-cell ; text-align : center ; padding : .1em ; } tablecell[align="flushleft"] { display : table-cell ; text-align : left ; padding : .1em ; } tablecell[align="flushright"] { display : table-cell ; text-align : right ; padding : .1em ; } tablecell { display : table-cell ; text-align : left ; padding : .1em ; } /* tabulate : display */ /* tabulaterow : display */ /* tabulatecell : mixed */ tabulate { display : table ; margin-top : 1em ; margin-bottom : 1em ; margin-left : 2.5em ; } tabulaterow { display : table-row ; } tabulatecell[align="middle"] { display : table-cell ; text-align : center ; padding-right : 1em ; } tabulatecell[align="flushleft"] { display : table-cell ; text-align : left ; padding-right : 1em ; } tabulatecell[align="flushright"] { display : table-cell ; text-align : right ; padding-right : 1em ; } tabulatecell { display : table-cell ; text-align : left ; padding-right : 1em ; } /* combination : display */ /* combinationpair : display */ /* combinationcontent : mixed */ /* combinationcaption : mixed */ combination { display : table ; margin-top : 0em ; margin-bottom : 0em ; } combinationpair { display : table-cell ; padding-right : 1em ; } combinationcontent { display : table-row ; text-align : center ; } combinationcaption { display : table-row ; padding-top : 1ex ; text-align : center ; } /* list : display */ /* listitem : display */ /* listtag : mixed */ /* listcontent : mixed */ /* listdata : mixed */ /* listpage : mixed */ list { display : block ; } listitem[detail="chapter"] { display : block ; margin-top : 1em ; font-weight : bold ; } listitem[detail="section"] { display : block ; } listitem[detail="subsection"] { display : block ; } listtag { display : inline-block ; width : 5em ; } listcontent { } listdata { } listpage { display : none ; } /* delimitedblock : display */ /* delimited : inline */ /* subsentence : inline */ /* :lang(en) */ delimited[detail="quotation"]:before, delimitedblock[detail="quotation"]:before { content : "\201C" ; } delimited[detail="quotation"]:after, delimitedblock[detail="quotation"]:after { content : "\201D" ; } delimited[detail="quote"]:before, delimitedblock[detail="quote"]:before { content : "\2018" ; } delimited[detail="quote"]:after, delimitedblock[detail="quote"]:after { content : "\2019" ; } delimited { display : inline } delimitedblock { display : block } subsentence:before, subsentence:after { content : "\2014" ; } subsentence { display : inline } /* label : mixed */ /* number : mixed */ /* float : display */ /* floatcaption : mixed */ /* floatlabel : inline */ /* floatnumber : inline */ /* floattext : mixed */ /* floatcontent : mixed */ float { display : block ; margin-top : 1em ; margin-bottom : 1em ; margin-left : 2.5em ; } floatcaption { display : block ; margin-top : 0.5em ; color : rgb(60%,60%,0%) ; } floatlabel { font-weight : bold ; margin-right : 1em ; } floatnumber { font-weight : bold ; } floattext { } floatcontent { } /* image : mixed */ /* mpgraphic : mixed */ /* image { display : block ; background : url(hacker.jpg) ; background-size : 100% auto ; width : 8.992cm ; height : 5.994cm ; } */ mpgraphic:before { /* does not work with empty element */ content : "[runtime metapost graphic]" ; } mpgraphic { display : inline ; } /* formula : display */ /* subformula : display */ /* formulaset : display */ /* formulacaption : mixed */ /* formulalabel : mixed */ /* formulanumber : mixed */ /* formulacontent : display */ formula { display : block ; margin-top : 1em ; margin-bottom : 1em ; margin-left : 2.5em ; } subformula { /* todo */ display : block ; margin-top : 1em ; margin-bottom : 1em ; margin-left : 2.5em ; } formulaset { /* todo */ display : block ; margin-top : 1em ; margin-bottom : 1em ; margin-left : 2.5em ; } formulacaption { /* todo */ display : block ; margin-top : 0.5em ; color : rgb(60%,60%,0%) ; } formulalabel { font-weight : bold ; margin-right : 1em ; } formulanumber { font-weight : bold ; } formulacontent { display : block ; } /* link : inline */ /* margintextblock : inline */ /* margintext : inline */ /* math : inline */ /* mn : mixed */ /* mi : mixed */ /* mo : mixed */ /* ms : mixed */ /* mrow : display */ /* msubsup : display */ /* msub : display */ /* msup : display */ /* merror : mixed */ /* munderover : display */ /* munder : display */ /* mover : display */ /* mtext : mixed */ /* mfrac : display */ /* mroot : display */ /* msqrt : display */ /* mfenced : display */ /* maction : display */ /* mtable : display */ /* mtr : display */ /* mtd : display */ /* quantity : inline */ /* unit : inline */ /* number : inline */ quantity { } quantity>unit { } quantity>number { } /* sub : inline */ /* sup : inline */ /* subsup : inline */ sup { font-size : xx-small ; line-height : 0 ; vertical-align : top ; } sub { font-size : xx-small ; line-height : 0 ; vertical-align : bottom ; } subsup>sup { vertical-align : top ; } subsup>sub { vertical-align : bottom ; } /* xhtml */ a[href] { text-decoration : none ; color : inherit ; } a[href]:hover { color : rgb(50%,0%,0%) ; text-decoration : underline ; } context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frq-de.lua0000644000175000017500000000117412130411274024467 0ustar norbertnorbertreturn { language = "de", source = "http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm", frequencies = { [0x0061] = 6.47, [0x0062] = 1.93, [0x0063] = 2.68, [0x0064] = 4.83, [0x0065] = 17.48, [0x0066] = 1.65, [0x0067] = 3.06, [0x0068] = 4.23, [0x0069] = 7.73, [0x006A] = 0.27, [0x006B] = 1.46, [0x006C] = 3.49, [0x006D] = 2.58, [0x006E] = 9.84, [0x006F] = 2.98, [0x0070] = 0.96, [0x0071] = 0.02, [0x0072] = 7.54, [0x0073] = 6.83, [0x0074] = 6.13, [0x0075] = 4.17, [0x0076] = 0.94, [0x0077] = 1.48, [0x0078] = 0.04, [0x0079] = 0.08, [0x007A] = 1.14, } } context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-pos.lua0000644000175000017500000005740012130411274024105 0ustar norbertnorbertif not modules then modules = { } end modules ['anch-pos'] = { version = 1.001, comment = "companion to anch-pos.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

We save positional information in the main utility table. Not only can we store much more information in but it's also more efficient.

--ldx]]-- -- plus (extra) is obsolete but we will keep it for a while -- maybe replace texsp by our own converter (stay at the lua end) -- eventually mp will have large numbers so we can use sp there too local commands, context = commands, context local tostring, next, rawget, setmetatable = tostring, next, rawget, setmetatable local sort = table.sort local format, gmatch, match = string.format, string.gmatch, string.match local rawget = rawget local lpegmatch = lpeg.match local insert, remove = table.insert, table.remove local allocate, mark = utilities.storage.allocate, utilities.storage.mark local texsp, texcount, texbox, texdimen, texsetcount = tex.sp, tex.count, tex.box, tex.dimen, tex.setcount ----- texsp = string.todimen -- because we cache this is much faster but no rounding local pdf = pdf -- h and v are variables local setmetatableindex = table.setmetatableindex local new_latelua = nodes.pool.latelua local find_tail = node.slide local variables = interfaces.variables local v_text = variables.text local v_column = variables.column local pt = number.dimenfactors.pt local pts = number.pts local formatters = string.formatters local collected = allocate() local tobesaved = allocate() local jobpositions = { collected = collected, tobesaved = tobesaved, } job.positions = jobpositions _plib_ = jobpositions -- might go local default = { -- not r and paragraphs etc __index = { x = 0, -- x position baseline y = 0, -- y position baseline w = 0, -- width h = 0, -- height d = 0, -- depth p = 0, -- page n = 0, -- paragraph ls = 0, -- leftskip rs = 0, -- rightskip hi = 0, -- hangindent ha = 0, -- hangafter hs = 0, -- hsize pi = 0, -- parindent ps = false, -- parshape } } local f_b_tag = formatters["b:%s"] local f_e_tag = formatters["e:%s"] local f_p_tag = formatters["p:%s"] local f_w_tag = formatters["w:%s"] local f_b_column = formatters["_plib_.b_col(%q)"] local f_e_column = formatters["_plib_.e_col()"] local f_enhance = formatters["_plib_.enhance(%q)"] local f_region = formatters["region:%s"] local f_b_region = formatters["_plib_.b_region(%q)"] local f_e_region = formatters["_plib_.e_region(%s)"] local f_tag_three = formatters["%s:%s:%s"] local f_tag_two = formatters["%s:%s"] local function sorter(a,b) return a.y > b.y end local nofusedregions = 0 local nofmissingregions = 0 local nofregular = 0 -- todo: register subsets and count them indepently local function initializer() tobesaved = jobpositions.tobesaved collected = jobpositions.collected -- enhance regions with paragraphs for tag, data in next, collected do local region = data.r if region then local r = collected[region] if r then local paragraphs = r.paragraphs if not paragraphs then r.paragraphs = { data } else paragraphs[#paragraphs+1] = data end nofusedregions = nofusedregions + 1 else nofmissingregions = nofmissingregions + 1 end else nofregular = nofregular + 1 end setmetatable(data,default) end -- add metatable -- for tag, data in next, collected do -- setmetatable(data,default) -- end -- sort this data for tag, data in next, collected do local region = data.r if region then local r = collected[region] if r then local paragraphs = r.paragraphs if paragraphs and #paragraphs > 1 then sort(paragraphs,sorter) end end end -- so, we can be sparse and don't need 'or 0' code end end job.register('job.positions.collected', tobesaved, initializer) local regions = { } local nofregions = 0 local region = nil local columns = { } local nofcolumns = 0 local column = nil local nofpages = nil -- beware ... we're not sparse here as lua will reserve slots for the nilled local function setdim(name,w,h,d,extra) -- will be used when we move to sp allover local x = pdf.h local y = pdf.v if x == 0 then x = nil end if y == 0 then y = nil end if w == 0 then w = nil end if h == 0 then h = nil end if d == 0 then d = nil end if extra == "" then extra = nil end -- todo: sparse tobesaved[name] = { p = texcount.realpageno, x = x, y = y, w = w, h = h, d = d, e = extra, r = region, c = column, } end local function setall(name,p,x,y,w,h,d,extra) if x == 0 then x = nil end if y == 0 then y = nil end if w == 0 then w = nil end if h == 0 then h = nil end if d == 0 then d = nil end if extra == "" then extra = nil end -- todo: sparse tobesaved[name] = { p = p, x = x, y = y, w = w, h = h, d = d, e = extra, r = region, c = column, } end local function enhance(data) if not data then return nil end if data.r == true then -- or "" data.r = region end if data.x == true then data.x = pdf.h end if data.y == true then data.y = pdf.v end if data.p == true then data.p = texcount.realpageno end if data.c == true then data.c = column end if data.w == 0 then data.w = nil end if data.h == 0 then data.h = nil end if data.d == 0 then data.d = nil end return data end local function set(name,index,val) local data = enhance(val or index) if val then container = tobesaved[name] if not container then tobesaved[name] = { [index] = data } else container[index] = data end else tobesaved[name] = data end end local function get(id,index) if index then local container = collected[id] return container and container[index] else return collected[id] end end jobpositions.setdim = setdim jobpositions.setall = setall jobpositions.set = set jobpositions.get = get commands.setpos = setall -- will become private table (could also become attribute driven but too nasty -- as attributes can bleed e.g. in margin stuff) function jobpositions.b_col(tag) tobesaved[tag] = { r = true, x = pdf.h, w = 0, } insert(columns,tag) column = tag end function jobpositions.e_col(tag) local t = tobesaved[column] if not t then -- something's wrong else t.w = pdf.h - t.x t.r = region end remove(columns) column = columns[#columns] end function commands.bcolumn(tag,register) insert(columns,tag) column = tag if register then context(new_latelua(f_b_column(tag))) end end function commands.ecolumn(register) if register then context(new_latelua(f_e_column())) end remove(columns) column = columns[#columns] end -- regions function jobpositions.b_region(tag) local last = tobesaved[tag] last.x = pdf.h last.y = pdf.v last.p = texcount.realpageno insert(regions,tag) region = tag end function jobpositions.e_region(correct) local last = tobesaved[region] if correct then last.h = last.y - pdf.v end last.y = pdf.v remove(regions) region = regions[#regions] end function jobpositions.markregionbox(n,tag,correct) if not tag or tag == "" then nofregions = nofregions + 1 tag = f_region(nofregions) end local box = texbox[n] local w = box.width local h = box.height local d = box.depth tobesaved[tag] = { p = true, x = true, y = pdf.v, -- true, w = w ~= 0 and w or nil, h = h ~= 0 and h or nil, d = d ~= 0 and d or nil, } local push = new_latelua(f_b_region(tag)) local pop = new_latelua(f_e_region(tostring(correct))) -- todo: check if tostring is needed with formatter -- maybe we should construct a hbox first (needs experimenting) so that we can avoid some at the tex end local head = box.list if head then local tail = find_tail(head) head.prev = push push.next = head pop .prev = tail tail.next = pop else -- we can have a simple push/pop push.next = pop pop.prev = push end box.list = push end function jobpositions.enhance(name) enhance(tobesaved[name]) end function commands.pos(name,t) tobesaved[name] = t context(new_latelua(f_enhance(name))) end local nofparagraphs = 0 function commands.parpos() -- todo: relate to localpar (so this is an intermediate variant) nofparagraphs = nofparagraphs + 1 texsetcount("global","c_anch_positions_paragraph",nofparagraphs) local strutbox = texbox.strutbox local t = { p = true, c = true, r = true, x = true, y = true, h = strutbox.height, d = strutbox.depth, hs = tex.hsize, } local leftskip = tex.leftskip.width local rightskip = tex.rightskip.width local hangindent = tex.hangindent local hangafter = tex.hangafter local parindent = tex.parindent local parshape = tex.parshape if leftskip ~= 0 then t.ls = leftskip end if rightskip ~= 0 then t.rs = rightskip end if hangindent ~= 0 then t.hi = hangindent end if hangafter ~= 1 and hangafter ~= 0 then -- can not be zero .. so it needs to be 1 if zero t.ha = hangafter end if parindent ~= 0 then t.pi = parindent end if parshape and #parshape > 0 then t.ps = parshape end local tag = f_p_tag(nofparagraphs) tobesaved[tag] = t context(new_latelua(f_enhance(tag))) end function commands.posxy(name) -- can node.write be used here? tobesaved[name] = { p = true, c = column, r = true, x = true, y = true, n = nofparagraphs > 0 and nofparagraphs or nil, } context(new_latelua(f_enhance(name))) end function commands.poswhd(name,w,h,d) tobesaved[name] = { p = true, c = column, r = true, x = true, y = true, w = w, h = h, d = d, n = nofparagraphs > 0 and nofparagraphs or nil, } context(new_latelua(f_enhance(name))) end function commands.posplus(name,w,h,d,extra) tobesaved[name] = { p = true, c = column, r = true, x = true, y = true, w = w, h = h, d = d, n = nofparagraphs > 0 and nofparagraphs or nil, e = extra, } context(new_latelua(f_enhance(name))) end function commands.posstrut(name,w,h,d) local strutbox = texbox.strutbox tobesaved[name] = { p = true, c = column, r = true, x = true, y = true, h = strutbox.height, d = strutbox.depth, n = nofparagraphs > 0 and nofparagraphs or nil, } context(new_latelua(f_enhance(name))) end function jobpositions.getreserved(tag,n) if tag == v_column then local fulltag = f_tag_three(tag,texcount.realpageno,n or 1) local data = collected[fulltag] if data then return data, fulltag end tag = v_text end if tag == v_text then local fulltag = f_tag_two(tag,texcount.realpageno) return collected[fulltag] or false, fulltag end return collected[tag] or false, tag end function jobpositions.copy(target,source) collected[target] = collected[source] end function jobpositions.replace(id,p,x,y,w,h,d) collected[id] = { p = p, x = x, y = y, w = w, h = h, d = d } -- c g end function jobpositions.page(id) local jpi = collected[id] return jpi and jpi.p end function jobpositions.region(id) local jpi = collected[id] return jpi and jpi.r or false end function jobpositions.column(id) local jpi = collected[id] return jpi and jpi.c or false end function jobpositions.paragraph(id) local jpi = collected[id] return jpi and jpi.n end jobpositions.p = jobpositions.page jobpositions.r = jobpositions.region jobpositions.c = jobpositions.column jobpositions.n = jobpositions.paragraph function jobpositions.x(id) local jpi = collected[id] return jpi and jpi.x end function jobpositions.y(id) local jpi = collected[id] return jpi and jpi.y end function jobpositions.width(id) local jpi = collected[id] return jpi and jpi.w end function jobpositions.height(id) local jpi = collected[id] return jpi and jpi.h end function jobpositions.depth(id) local jpi = collected[id] return jpi and jpi.d end function jobpositions.leftskip(id) local jpi = collected[id] return jpi and jpi.ls end function jobpositions.rightskip(id) local jpi = collected[id] return jpi and jpi.rs end function jobpositions.hsize(id) local jpi = collected[id] return jpi and jpi.hs end function jobpositions.parindent(id) local jpi = collected[id] return jpi and jpi.pi end function jobpositions.hangindent(id) local jpi = collected[id] return jpi and jpi.hi end function jobpositions.hangafter(id) local jpi = collected[id] return jpi and jpi.ha or 1 end function jobpositions.xy(id) local jpi = collected[id] if jpi then return jpi.x, jpi.y else return 0, 0 end end function jobpositions.lowerleft(id) local jpi = collected[id] if jpi then return jpi.x, jpi.y - jpi.d else return 0, 0 end end function jobpositions.lowerright(id) local jpi = collected[id] if jpi then return jpi.x + jpi.w, jpi.y - jpi.d else return 0, 0 end end function jobpositions.upperright(id) local jpi = collected[id] if jpi then return jpi.x + jpi.w, jpi.y + jpi.h else return 0, 0 end end function jobpositions.upperleft(id) local jpi = collected[id] if jpi then return jpi.x, jpi.y + jpi.h else return 0, 0 end end function jobpositions.position(id) local jpi = collected[id] if jpi then return jpi.p, jpi.x, jpi.y, jpi.w, jpi.h, jpi.d else return 0, 0, 0, 0, 0, 0 end end function jobpositions.extra(id,n,default) -- assume numbers local jpi = collected[id] if jpi then local e = jpi.e if e then local split = jpi.split if not split then split = lpegmatch(splitter,jpi.e) jpi.split = split end return texsp(split[n]) or default -- watch the texsp here end end return default end local function overlapping(one,two,overlappingmargin) -- hm, strings so this is wrong .. texsp one = collected[one] two = collected[two] if one and two and one.p == two.p then if not overlappingmargin then overlappingmargin = 2 end local x_one = one.x local x_two = two.x local w_two = two.w local llx_one = x_one - overlappingmargin local urx_two = x_two + w_two + overlappingmargin if llx_one > urx_two then return false end local w_one = one.w local urx_one = x_one + w_one + overlappingmargin local llx_two = x_two - overlappingmargin if urx_one < llx_two then return false end local y_one = one.y local y_two = two.y local d_one = one.d local h_two = two.h local lly_one = y_one - d_one - overlappingmargin local ury_two = y_two + h_two + overlappingmargin if lly_one > ury_two then return false end local h_one = one.h local d_two = two.d local ury_one = y_one + h_one + overlappingmargin local lly_two = y_two - d_two - overlappingmargin if ury_one < lly_two then return false end return true end end local function onsamepage(list,page) for id in gmatch(list,"(, )") do local jpi = collected[id] if jpi then local p = jpi.p if not p then return false elseif not page then page = p elseif page ~= p then return false end end end return page end jobpositions.overlapping = overlapping jobpositions.onsamepage = onsamepage -- interface commands.replacepospxywhd = jobpositions.replace commands.copyposition = jobpositions.copy function commands.MPp(id) local jpi = collected[id] if jpi then local p = jpi.p if p and p ~= true then context(p) return end end context('0') end function commands.MPx(id) local jpi = collected[id] if jpi then local x = jpi.x if x and x ~= true and x ~= 0 then context("%.5fpt",x*pt) return end end context('0pt') end function commands.MPy(id) local jpi = collected[id] if jpi then local y = jpi.y if y and y ~= true and y ~= 0 then context("%.5fpt",y*pt) return end end context('0pt') end function commands.MPw(id) local jpi = collected[id] if jpi then local w = jpi.w if w and w ~= 0 then context("%.5fpt",w*pt) return end end context('0pt') end function commands.MPh(id) local jpi = collected[id] if jpi then local h = jpi.h if h and h ~= 0 then context("%.5fpt",h*pt) return end end context('0pt') end function commands.MPd(id) local jpi = collected[id] if jpi then local d = jpi.d if d and d ~= 0 then context("%.5fpt",d*pt) return end end context('0pt') end function commands.MPxy(id) local jpi = collected[id] if jpi then context('(%.5fpt,%.5fpt)', jpi.x*pt, jpi.y*pt ) else context('(0,0)') end end function commands.MPll(id) local jpi = collected[id] if jpi then context('(%.5fpt,%.5fpt)', jpi.x *pt, (jpi.y-jpi.d)*pt ) else context('(0,0)') -- for mp only end end function commands.MPlr(id) local jpi = collected[id] if jpi then context('(%.5fpt,%.5fpt)', (jpi.x + jpi.w)*pt, (jpi.y - jpi.d)*pt ) else context('(0,0)') -- for mp only end end function commands.MPur(id) local jpi = collected[id] if jpi then context('(%.5fpt,%.5fpt)', (jpi.x + jpi.w)*pt, (jpi.y + jpi.h)*pt ) else context('(0,0)') -- for mp only end end function commands.MPul(id) local jpi = collected[id] if jpi then context('(%.5fpt,%.5fpt)', jpi.x *pt, (jpi.y + jpi.h)*pt ) else context('(0,0)') -- for mp only end end local function MPpos(id) local jpi = collected[id] if jpi then local p = jpi.p if p then context("%s,%.5fpt,%.5fpt,%.5fpt,%.5fpt,%.5fpt", p, jpi.x*pt, jpi.y*pt, jpi.w*pt, jpi.h*pt, jpi.d*pt ) return end end context('0,0,0,0,0,0') -- for mp only end commands.MPpos = MPpos function commands.MPn(id) local jpi = collected[id] if jpi then local n = jpi.n if n then context(n) return end end context(0) end function commands.MPc(id) local jpi = collected[id] if jpi then local c = jpi.c if c and p ~= true then context(c) return end end context(c) -- number end function commands.MPr(id) local jpi = collected[id] if jpi then local r = jpi.r if r and p ~= true then context(r) return end end end local function MPpardata(n) local t = collected[n] if not t then local tag = f_p_tag(n) t = collected[tag] end if t then context("%.5fpt,%.5fpt,%.5fpt,%.5fpt,%s,%.5fpt", t.hs*pt, t.ls*pt, t.rs*pt, t.hi*pt, t.ha, t.pi*pt ) else context("0,0,0,0,0,0") -- for mp only end end commands.MPpardata = MPpardata function commands.MPposset(id) -- special helper, used in backgrounds local b = f_b_tag(id) local e = f_e_tag(id) local w = f_w_tag(id) local p = f_p_tag(jobpositions.n(b)) MPpos(b) context(",") MPpos(e) context(",") MPpos(w) context(",") MPpos(p) context(",") MPpardata(p) end function commands.MPls(id) local t = collected[id] if t then context("%.5fpt",t.ls*pt) else context("0pt") end end function commands.MPrs(id) local t = collected[id] if t then context("%.5fpt",t.rs*pt) else context("0pt") end end local splitter = lpeg.tsplitat(",") function commands.MPplus(id,n,default) local jpi = collected[id] if jpi then local e = jpi.e if e then local split = jpi.split if not split then split = lpegmatch(splitter,jpi.e) jpi.split = split end context(split[n] or default) return end end context(default) end function commands.MPrest(id,default) local jpi = collected[id] context(jpi and jpi.e or default) end function commands.MPxywhd(id) local t = collected[id] if t then context("%.5fpt,%.5fpt,%.5fpt,%.5fpt,%.5fpt", t.x*pt, t.y*pt, t.w*pt, t.h*pt, t.d*pt ) else context("0,0,0,0,0") -- for mp only end end local doif, doifelse = commands.doif, commands.doifelse function commands.doifpositionelse(name) doifelse(collected[name]) end function commands.doifposition(name) doif(collected[name]) end function commands.doifpositiononpage(name,page) -- probably always realpageno local c = collected[name] doifelse(c and c.p == page) end function commands.doifoverlappingelse(one,two,overlappingmargin) doifelse(overlapping(one,two,overlappingmargin)) end function commands.doifpositionsonsamepageelse(list,page) doifelse(onsamepage(list)) end function commands.doifpositionsonthispageelse(list) doifelse(onsamepage(list,tostring(tex.count.realpageno))) end function commands.doifelsepositionsused() doifelse(next(collected)) end commands.markcolumnbox = jobpositions.markcolumnbox commands.markregionbox = jobpositions.markregionbox -- statistics (at least for the moment, when testing) statistics.register("positions", function() local total = nofregular + nofusedregions + nofmissingregions if total > 0 then return format("%s collected, %s regulars, %s regions, %s unresolved regions", total, nofregular, nofusedregions, nofmissingregions) else return nil end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mfr.mkii0000644000175000017500000003205711571377075024333 0ustar norbertnorbert\setinterfacemessage{references}{1}{réference -- inconnue} \setinterfacemessage{references}{30}{objet -- inconnu} \setinterfacemessage{references}{3}{type -- de réference inconnu} \setinterfacemessage{references}{2}{réference -- dupliquée à la page --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{réference -- inconnue} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{réferences} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{objet -- dupliqué} \setinterfacemessage{references}{21}{document -- chargé} \setinterfacemessage{references}{22}{le document -- n'est pas interactif} \setinterfacemessage{references}{23}{reference -- indéterminé (préfixe=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{number --} \setinterfacemessage{handlings}{1}{manipulation -- de police} \setinterfacemessage{handlings}{3}{manipulation -- inconnue de police} \setinterfacemessage{handlings}{2}{la manipulation -- de police est chargée} \setinterfacemessage{handlings}{title}{manipulation} \setinterfacemessage{systems}{title}{système} \setinterfacemessage{systems}{41}{le fichier externe -- du groupe -- n'existe pas} \setinterfacemessage{systems}{9}{-- non trouvé/traité} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{nouvelle version de fichier utilitaire, seconde passe nécessaire} \setinterfacemessage{systems}{21}{pas de données utilitaires chargées} \setinterfacemessage{systems}{20}{signification (tris) de -- chargée} \setinterfacemessage{systems}{5}{module -- chargé} \setinterfacemessage{systems}{4}{la commande -- est déjà définie} \setinterfacemessage{systems}{27}{Version} \setinterfacemessage{systems}{26}{Registres} \setinterfacemessage{systems}{25}{Réferences} \setinterfacemessage{systems}{24}{blocsflottants} \setinterfacemessage{systems}{1}{chargement de fichier utilitaire reporté (typemode)} \setinterfacemessage{systems}{23}{-- arrangé à --} \setinterfacemessage{systems}{22}{utilise un fichier utilitaire valide} \setinterfacemessage{systems}{2}{-- chargé} \setinterfacemessage{systems}{19}{signification (synonymes) de -- chargée} \setinterfacemessage{systems}{18}{le synonyme -- -- n'existe pas} \setinterfacemessage{systems}{7}{module -- déjà chargé} \setinterfacemessage{systems}{6}{module -- non trouvé} \setinterfacemessage{systems}{14}{nouvellepage forcée dans la liste à --} \setinterfacemessage{systems}{15}{sauvegarde du tampon (buffer) --} \setinterfacemessage{systems}{16}{composition du tampon (buffer) --} \setinterfacemessage{systems}{17}{composition textuelle du tampon (buffer) --} \setinterfacemessage{systems}{13}{marquage -- defini --} \setinterfacemessage{systems}{12}{le fichier utilitaire n'est pas trié, utilise texutil} \setinterfacemessage{systems}{11}{construction util simple} \setinterfacemessage{systems}{10}{n'utilisez pas em dans --} \setinterfacemessage{floatblocks}{1}{-- renuméroté / -- => --} \setinterfacemessage{floatblocks}{3}{-- déplacé} \setinterfacemessage{floatblocks}{2}{-- sauvegardé} \setinterfacemessage{floatblocks}{5}{ordre adapté} \setinterfacemessage{floatblocks}{4}{-- placé} \setinterfacemessage{floatblocks}{7}{n flottants de bas de page limité à --} \setinterfacemessage{floatblocks}{6}{n flottants de haut de page limité à --} \setinterfacemessage{floatblocks}{9}{ordre perturbé} \setinterfacemessage{floatblocks}{8}{moins de -- lignes} \setinterfacemessage{floatblocks}{title}{blocs de flottants} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{indéfini} \setinterfacemessage{floatblocks}{11}{pas de bloc donné} \setinterfacemessage{floatblocks}{10}{-- limité} \setinterfacemessage{interactions}{1}{ratio d'aspect -- x -- (b x h)} \setinterfacemessage{interactions}{3}{inactif} \setinterfacemessage{interactions}{2}{actif} \setinterfacemessage{interactions}{5}{le fichier joint -- est inconnu} \setinterfacemessage{interactions}{4}{pas de synchronisation de page (--) dans le hmode} \setinterfacemessage{interactions}{6}{le fichier joint -- n'existe pas} \setinterfacemessage{interactions}{title}{interaction} \setinterfacemessage{interactions}{21}{-- code inseré} \setinterfacemessage{regimes}{1}{encodage --} \setinterfacemessage{regimes}{3}{encodage -- inconnu} \setinterfacemessage{regimes}{2}{l'encodage -- est chargé} \setinterfacemessage{regimes}{title}{encodage} \setinterfacemessage{structures}{1}{début de blocsection --} \setinterfacemessage{structures}{title}{structure} \setinterfacemessage{structures}{2}{fin de blocsection --} \setinterfacemessage{linguals}{1}{les motifs -- pour -- sont chargés (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{hyphenations -- pour -- chargés (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{pas de motifs -- pour -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{les motifs pour -- ne sont pas chargés} \setinterfacemessage{linguals}{4}{pas d'hyphenations -- pour -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{les options spécifiques de langue [--] introduisent un -- saut} \setinterfacemessage{linguals}{6}{langue -- non définie} \setinterfacemessage{linguals}{9}{la langue -- est active} \setinterfacemessage{linguals}{8}{les options spécifiques de langue [--] sont ajoutés en douceur} \setinterfacemessage{linguals}{title}{langue} \setinterfacemessage{linguals}{10}{motifs -- chargés} \setinterfacemessage{verbatims}{1}{le fichier -- n'existe pas} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{le filtre -- est chargé} \setinterfacemessage{filters}{title}{filtre} \setinterfacemessage{filters}{2}{filtre -- inconnu} \setinterfacemessage{textblocks}{1}{nouvelle version, une seconde passe est nécessaire} \setinterfacemessage{textblocks}{3}{lecture des blocs en provenance de --} \setinterfacemessage{textblocks}{2}{ecriture des blocs vers --} \setinterfacemessage{textblocks}{5}{-- non caché} \setinterfacemessage{textblocks}{4}{seconde passe nécessaire} \setinterfacemessage{textblocks}{7}{-- caché} \setinterfacemessage{textblocks}{6}{-- caché et traité} \setinterfacemessage{textblocks}{9}{-- non composé} \setinterfacemessage{textblocks}{8}{-- composé} \setinterfacemessage{textblocks}{title}{blocs de texte} \setinterfacemessage{textblocks}{12}{-- sauté} \setinterfacemessage{textblocks}{11}{-- chargé et composé} \setinterfacemessage{textblocks}{10}{-- chargé et traité} \setinterfacemessage{encodings}{1}{encodage --} \setinterfacemessage{encodings}{3}{encodage -- inconnu} \setinterfacemessage{encodings}{2}{l'encodage -- est chargé} \setinterfacemessage{encodings}{title}{encodage} \setinterfacemessage{columns}{1}{seules -- colonnes possibles} \setinterfacemessage{columns}{3}{problèmes, désactive l'équilibrage} \setinterfacemessage{columns}{2}{utilisez \string\filbreak\space en tant qu'alternative} \setinterfacemessage{columns}{5}{flottant en partie inférieure pas encore supporté} \setinterfacemessage{columns}{4}{flottant en partie supérieure pas encore supporté} \setinterfacemessage{columns}{7}{équilibrage abandonné après 100 pas} \setinterfacemessage{columns}{6}{-- flottant(s) reporté(s)} \setinterfacemessage{columns}{9}{vérification des irrégularités} \setinterfacemessage{columns}{8}{équilibré en -- pas} \setinterfacemessage{columns}{title}{colonnes} \setinterfacemessage{columns}{13}{flottant large déplacé dans la partie supérieure de la colonne} \setinterfacemessage{columns}{12}{flottant déplacé à la colonne suivante / --} \setinterfacemessage{columns}{11}{flottant mis à la largeur de la colonne} \setinterfacemessage{columns}{10}{(moins de) 1 ligne restante} \setinterfacemessage{symbols}{1}{chargement du jeu de symbole --} \setinterfacemessage{symbols}{title}{symboles} \setinterfacemessage{files}{1}{le synonyme de fichier -- est déjà utilisé pour --} \setinterfacemessage{files}{title}{fichiers} \setinterfacemessage{versions}{1}{@+ manquant} \setinterfacemessage{versions}{3}{pages sélectionnées : --} \setinterfacemessage{versions}{2}{marquage des pages} \setinterfacemessage{versions}{title}{version} \setinterfacemessage{specials}{1}{-- chargé} \setinterfacemessage{specials}{3}{-- est remis à zéro} \setinterfacemessage{specials}{2}{pas d'imbracations plus profondes ne sont permises --} \setinterfacemessage{specials}{5}{chargement du fichier de définition --} \setinterfacemessage{specials}{4}{la commande -- n'existe pas} \setinterfacemessage{specials}{7}{pilote -- inconnu} \setinterfacemessage{specials}{6}{l'imbrication n'est pas permise} \setinterfacemessage{specials}{title}{specials} \setinterfacemessage{layouts}{1}{hauteurtexte adaptée avec -- à la page --} \setinterfacemessage{layouts}{3}{-- times text postponed} \setinterfacemessage{layouts}{2}{-- times postponed text placed} \setinterfacemessage{layouts}{5}{blocsmarge inactifs} \setinterfacemessage{layouts}{4}{blocsmarge actifs} \setinterfacemessage{layouts}{7}{calcul de l'espace pour le logo} \setinterfacemessage{layouts}{6}{jeu de souspage -- traité (taille --)} \setinterfacemessage{layouts}{9}{pas plus de -- niveaux pour l'instant dans les élémentarisations} \setinterfacemessage{layouts}{8}{calcul des arrières-plans} \setinterfacemessage{layouts}{title}{calque} \setinterfacemessage{layouts}{11}{espacement -- non permis en modegrille} \setinterfacemessage{layouts}{10}{-- et -- ne sont pas ajoutés à 1.0} \setinterfacemessage{fonts}{1}{encodage --} \setinterfacemessage{fonts}{3}{variante -- inconnue} \setinterfacemessage{fonts}{2}{la variante -- est chargée} \setinterfacemessage{fonts}{5}{le style -- n'est pas défini} \setinterfacemessage{fonts}{4}{policecorps -- n'est pas définie} \setinterfacemessage{fonts}{7}{format -- inconnu} \setinterfacemessage{fonts}{6}{-- est chargé} \setinterfacemessage{fonts}{14}{policecorps -- est défini (une définition globale pourrait être plus adéquat)} \setinterfacemessage{fonts}{8}{style -- défini} \setinterfacemessage{fonts}{title}{corps de texte} \setinterfacemessage{fonts}{10}{fichier de police -- inconnu} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{fichier global --} \setinterfacemessage{databases}{2}{fichier local --} \setinterfacemessage{databases}{4}{fichier inconnu --} \setinterfacemessage{databases}{title}{bases de données} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{chargement du jeu de script --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{préambule -- inconnu} \setinterfacemessage{check}{1}{manquant ou dégroupé '=' après '--' à la ligne --} \setinterfacemessage{check}{3}{-- -- remplace une macro, utilisez des MAJUSCULES !} \setinterfacemessage{check}{2}{-- argument(s) attendu(s) à la ligne --} \setinterfacemessage{check}{title}{vérification} \setinterfacemessage{metapost}{1}{chargement de la bibliothèque metapost --} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{la figure -- ne peut être trouvée} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{la figure -- n'est pas pré-sélectionnée} \setinterfacemessage{figures}{5}{dimensions of -- are unknown} \setinterfacemessage{figures}{4}{les dimensions de -- chargées implicitement à partir du fichier de figure} \setinterfacemessage{figures}{6}{les dimensions de -- calculées par rlxtools} \setinterfacemessage{figures}{8}{figureobject -- est réutilisé} \setinterfacemessage{figures}{title}{figures} \setinterfacemessage{colors}{1}{le système -- est globalement activé} \setinterfacemessage{colors}{3}{-- n'est pas défini --} \setinterfacemessage{colors}{2}{le système -- est localement activé} \setinterfacemessage{colors}{5}{système -- inconnu} \setinterfacemessage{colors}{4}{le système -- est chargé} \setinterfacemessage{colors}{7}{le palette -- n'est pas disponible} \setinterfacemessage{colors}{6}{la palette -- est disponible} \setinterfacemessage{colors}{9}{l'espace de couleur -- n'est pas supporté} \setinterfacemessage{colors}{8}{la spécification -- de la couleur -- devient noire} \setinterfacemessage{colors}{title}{couleurs} \setinterfacemessage{colors}{12}{-- est enregistré} \setinterfacemessage{colors}{11}{la couleur est convertie en niveau de gris} \setinterfacemessage{colors}{10}{-- l'espace de couleur est supporté} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/strc-sec.mkii0000644000175000017500000024106611754241457024312 0ustar norbertnorbert%D \module %D [ file=strc-sec, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Sectioning, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % start-stop per section en dan combineren met sectieblok; in dat geval % eenvoudiger per-* acties % nummeren per sectieblok implementeren % this module needs a clean up, currently some manipulations % take place multiple times; also, some clever recursive level % thing makes more sense % in manual (zie prikkels) : tussen=\blanko is enige hook om % met kop-in-hoofd een spatiering af te dwingen \writestatus{loading}{ConTeXt Structure Macros / Sectioning} \unprotect % new and to be tested \unexpanded\def\separatorlist#1% {\ifx\sepnumber\undefined\def\sepnumber{0}\fi \increment\sepnumber \getfromcommacommand[#1][\sepnumber]% \ifx\commalistelement\empty \getcommalistsize[#1]% \def\sepnumber{\number\commalistsize}% \getfromcommacommand[#1][\sepnumber]% \fi \commalistelement} % \setuphead[section] [separator=\separatorlist{?,!,*}] % \setuphead[subsection][separator=\separatorlist{??,!!,**}] % % \let\spr\separatorlist % this will enable this feature % % \setuphead[section] [separator={?,!,*}] % \setuphead[subsection][separator={??,!!,**}] % % \setupheads[separator={A,B,C,D,E,F}] % \chapter{test} % \section{test} \subsection{test} \subsection{test} % \section{test} \subsection{test} \subsection{test} % from now on, internaly numbers are separated by a period % and postprocessed on demand; this will change to {} {} {} \def\numberseparator {.} % reasonable default \def\sectionseparator{-} % was : but is now - \def\@@filterfirstpart [#1--#2]{#1} \def\@@filtersecondpart [#1--#2]{#2} \def\@@filterblockpart [#1--#2--#3]{#1} \def\@@filternumberpart [#1--#2--#3]{#2} \def\@@filterpagepart [#1--#2--#3]{#3} \def\@@filterblocknumberpart[#1--#2--#3]{#1--#2} \def\@@filterheadpart[#1]{\@EA\@@dofilterheadpart\@EA[#1-0]} \def\@@filtertailpart[#1]{\@EA\@@dofiltertailpart\@EA[#1-0]} \def\@@dofilterheadpart[#1-#2]{#1} \def\@@dofiltertailpart[#1-#2]{#2} \def\@@filterlevelpart[#1--#2--#3]{\@@dofilterlevelpart[#2-0-0-0-0]} \def\@@dofilterlevelpart[#1-0-0-0-#2]{#1} \def\gobbleuntilrelax#1\relax{} \def\separatednumber #1{\doseparatednumber #1.\empty\relax} \def\removefirstprefix#1{\doremovefirstprefix#1.\empty\relax} \def\removeallprefixes#1{\doremoveallprefixes#1.\empty\relax} \def\doseparatednumber#1.#2% {#1% \ifx#2\empty \@EA\gobbleuntilrelax \else \numberseparator \@EA\doseparatednumber \fi#2} \def\doremoveallprefixes#1.#2% {\ifx#2\empty #1\@EA\gobbleuntilrelax \else \@EA\doremoveallprefixes \fi#2} \def\doremovefirstprefix#1.#2% {\ifx#2\empty #1\@EA\gobbleuntilrelax \else \@EA\noremovefirstprefix \fi#2} \def\noremovefirstprefix#1.\empty\relax {#1} % we need to expand in order to get something separatable \def\dohandleheadnumber#1% {\expanded{\separatednumber{#1}}} \def\dodochecknumber#1#2#3% will become ugly after speed up {\bgroup \doifinstringelse{.0}{.#2} {\doifnot{#3}\v!by {%\debuggerinfo\m!systems{number #1 #3 becomes \getnumbervariable{#1\c!way}}% \setevalue{\@@thenumber{#1}\c!way}{#3}% geen \xdef, gaat mis met \subpage \dochecknumber{#1}}} % tricky and ugly {\doifnotvalue{\@@thenumber{#1}\s!check}{#2} {% new, calculate accumulated number \scratchcounter\getvalue{\@@thenumber{#1}\c!n}\relax \advance\scratchcounter\countervalue{\@@thenumber{#1}}\relax \setxvalue{\@@thenumber{#1}\c!n}{\the\scratchcounter}% % \setcounter{\@@thenumber{#1}}{0\getvalue{\@@thenumber{#1}\c!start}}% \setxvalue{\@@thenumber{#1}\c!way\c!local}{\getvalue{\@@thenumber{#1}\c!way}}% \setxvalue{\@@thenumber{#1}\s!check}{#2}}}% \egroup} \def\dochecknumber#1% {\edef\currentsection{\csname\??by\csname\@@thenumber{#1}\c!way\endcsname\endcsname}% \ifx\currentsection\empty\else \dodochecknumber {#1}% {\csname\currentsection\c!number\endcsname}% {\v!by\previoussection\currentsection}% \fi} \def\checknumber[#1]% {\bgroup %\ifcase\blocklevel\else \ifdoingblocks \doifnotvalue{\@@thenumber{#1}\c!blockway}\v!no\setblockcounters \fi \dochecknumber{#1}% \egroup} \def\rawsectionnumber#1% {\countervalue{\??se#1}} \def\precedingseparator{\@@koseparator} % brrr \def\domakeprecedingsectionnumber[#1]% will become ugly after speed up {\bgroup % added \globallet\precedingsectionnumber\empty \ifsectionnumber \doifvalue{\??sb\@@sectionblock\c!number}\v!yes % added {\doifelsevalue{\@@thenumber{#1}\c!sectionnumber}\v!yes \donetrue\donefalse \doifvalue{\@@thenumber{#1}\c!sectionnumber}\v!number {\donetrue\let\@@sectionconversion\gobbleoneargument}% \ifdone \edef\currentsection {\getvalue{\??by\getvalue{\@@thenumber{#1}\c!way\c!local}}}% \doifnot\currentsection\zerosection {\doifnot{\@@sectionvalue\currentsection}{0} {\xdef\precedingsectionnumber {\getvalue{\currentsection\c!number}% \spr{\precedingseparator}}}}% \fi}% \fi \egroup} \def\makeprecedingsectionnumber[#1]% {\bgroup %\ifnum\blocklevel>0 %\ifcase\blocklevel\else \ifdoingblocks \doifnotvalue{\@@thenumber{#1}\c!blockway}\v!no\setblockcounters \fi \domakeprecedingsectionnumber[#1]% \egroup} % \def\makesectionnumber[#1]% % {\makeprecedingsectionnumber[#1]% % \xdef\composedsectionnumber% % {\precedingsectionnumber\convertednumber[#1]}}% % % hack needed for chinese and oldstyle in normal tex, will change \def\makesectionnumber[#1]% {\bgroup \forceunexpanded % i don't like this hack \makeprecedingsectionnumber[#1]% \xdef\composedsectionnumber% was \xdef maar dat gaat fout met font switches {\precedingsectionnumber\convertednumber[#1]}% \egroup} % \def\preparethenumber#1#2#3% {\??id#1} \number \result % {\doifelsevaluenothing{#1\c!separator} % {\let\numberseparator\empty % \let#3#2} % {% was \unexpanded \edef, but we need it unexpanded ! % \edef\numberseparator{\spr{\getvalue{#1\c!separator}}}% % \doifelsenothing{\executeifdefined{#1\c!suffix}\empty} % {\edef#3% % {\@EA\separatednumber\@EA{#2}% % }}%\stp{\getvalue{#1\c!stopper}}}} % {\edef#3% % {\@EA\separatednumber\@EA{#2}% % \spr{\getvalue{#1\c!separator}}% % \getvalue{#1\c!suffix}% % \stp{\getvalue{#1\c!stopper}}}}}} % % some day we do a real cleanup \def\analyzenumber#1#2#3% {\??id#1} \(precedingsection)number \result {% was \unexpanded \edef, but we need it unexpanded ! \doifelsenothing{\executeifdefined{#1\c!suffix}\empty} {\let \numbersuffix \empty} {\edef\numbersuffix{\spr{\getvalue{#1\c!suffix}}}}% \doifelsenothing{\executeifdefined{#1\c!stopper}\empty} {\let \numberstopper \empty} {\edef\numberstopper{\spr{\getvalue{#1\c!stopper}}}}% \doifelsenothing{\executeifdefined{#1\c!separator}\empty} {\let \numberseparator \empty} {\edef\numberseparator{\spr{\getvalue{#1\c!separator}}}}% \let\numberprefix\empty} \def\preparefullnumber#1#2#3% {\??id#1} \(precedingsection)number \result {\analyzenumber{#1}#2#3% \ifx\numberseparator\empty \edef\numberprefix{#2}% \else \edef\numberprefix{\@EA\separatednumber\@EA{#2}}% \fi \ifx\numbersuffix\empty \ifx\numberprefix\empty \let #3\empty \else \edef#3{\numberprefix\numberstopper}% \fi \else \ifx\numberprefix\empty \edef#3{\numbersuffix\numberstopper}% \else \edef#3{\numberprefix\numberseparator\numbersuffix\numberstopper}% \fi \fi} \def\prepareprefixnumber#1#2#3% {\??id#1} \number \result {\analyzenumber{#1}#2#3% \ifx\numberseparator\empty \edef\numberprefix{#2}% \else \edef\numberprefix{\@EA\separatednumber\@EA{#2}}% \fi \let#3\numberprefix} \def\sectionnumberonly[#1]% {\makesectionnumber[#1]% \composedsectionnumber} % sectioning \newcount\nofsections \let\zerosection \v!text \let\firstsection\empty \let\lastsection \empty \let\@@sectie \empty \let\@@koppeling \empty \makecounter{\??se\v!text} \letvalueempty{\??se\v!text\c!before} \letvalueempty{\??se\v!text\c!after } \setvalue {\v!text\c!number}{0} \letvalueempty{\v!text\s!format} \letvalueempty{\??sk\v!text} \letvalueempty{\??sk } \letvalue{\??by }\v!text \letvalue{\??by\v!text }\v!text \letvalue{\??by\v!all }\v!text \letvalue{\??by\v!by }\v!text \letvalue{\??by\v!by\v!text}\v!text \letvalue{\??by\v!by\v!all }\v!text \letvalue{\??by\v!by\v!page}\v!text % see footnotes \def\sectionofhead#1{\executeifdefined{\??ko#1\c!section}\s!unknown} \def\setupsection {\dotripleempty\dosetupsection} \def\dosetupsection[#1]% {\doifdefinedelse{\??se#1} {\dodosetupsection[#1]}% {\dodosetupsection[\sectionofhead{#1}]}} \def\dodosetupsection[#1][#2][#3]% {\doifdefined{\??se#1} {\ifthirdargument \getparameters[\??se#1#2][#3]% \else \getparameters[\??se#1][#2]% \fi \doifelsevalue{\??se#1\c!previousnumber}\v!yes {\setvalue{#1\c!number}{\@@longsectionnumber {#1}}} {\setvalue{#1\c!number}{\@@shortsectionnumber{#1}}}}} \def\docouplemarking[#1][#2]% {\doifdefinedelse{\??ko#2\c!section} {\docouplemarking[#1][\getvalue{\??ko#2\c!section}]} {\def\donexttrackcommando##1% {\edef\coupledmarkings{\getvalue{\??se##1\c!marking}}% \doifelse{##1}{#2} {\addtocommalist{#1}\coupledmarkings} {\removefromcommalist{#1}\coupledmarkings}% \setevalue{\??se##1\c!marking}{\coupledmarkings}% \donexttracklevel{##1}}% \donexttracklevel{\zerosection}}} % \firstsection \def\couplemarking {\dodoubleargument\docouplemarking} \def\decouplemarking[#1]% {\couplemarking[#1][]} \def\definesection[#1]% {\doifundefined{\??se#1} {\doifelsenothing\firstsection {\def\firstsection{#1}% \setevalue{\??se#1\c!before}{\v!text}% \setevalue{\??se\v!text\c!after}{#1}} {\setevalue{\??se\commalistelement\c!after}{#1}% commalistelement ? \setevalue{\??se#1\c!before}{\lastsection}% \setevalue{\??se\lastsection\c!after}{#1}}% \advance\nofsections \plusone \setevalue{\??se#1\c!level}{\the\nofsections}% \letvalue{\??se#1\c!after}\empty \setvalue{\e!next#1}{\@@nextsectionnumber{#1}}% \setvalue{#1\c!number}{\@@longsectionnumber{#1}}% \setvalue{#1\s!format}{\@@longformatnumber{#1}}% \setevalue{\??by#1}{#1}% \setevalue{\??by\v!by#1}{#1}% \makecounter{\??se#1}% \makecounter{\??se\v!last#1}% GB \edef\lastsection{#1}% \setvalue{\??sk#1}{#1}% \letvalue{\??se#1\c!marking}\empty \setupsection[#1][\c!previousnumber=\v!yes]}}% \def\previoussection#1{\csname\??se#1\c!before\endcsname} \def\nextsection #1{\csname\??se#1\c!after \endcsname} \let\preservedsection\v!unknown % \def\preservedsection{\firstsection} \def\checkpreservevalueafter#1% GB {\ifnum\getvalue{\??se#1\c!level}<\nofsections \edef\preservedsection{\getvalue{\??se#1\c!after}}% \ifconditional\@@resetsubheadnumbers \setcounter{\??se\v!last\preservedsection}\zerocount % {0}% \else \setcounter{\??se\v!last\preservedsection}{\countervalue{\??se\preservedsection}}% \fi \fi} \def\@@setsectionnumber#1#2% {\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean \setcounter{\??se#1}{#2}% \checkpreservevalueafter{#1}% GB \resetsectioncounters{#1}% \checkpagecounter} \def\@@nextsectionnumber#1% patched by GB {\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean \ifnum\countervalue{\??se\v!last#1}>\zerocount \setcounter{\??se#1}{\countervalue{\??se\v!last#1}}% \setcounter{\??se\v!last#1}\zerocount % {0}% \fi \pluscounter{\??se#1}% \checkpreservevalueafter{#1}% \resetsectioncounters{#1}% \checkpagecounter} \def\@@sectionvalue#1% % nog niet overal doorgevoerd {\countervalue{\??se#1}} % zoeken op \??se % suited for chinese too: \def\@@sectionconversion#1#2% a doublure with \@@shortsectionnumber {\ifnum#2=0 0\else % else troubles with \uchar \@EA\ifx\csname\??se#1\@@sectionblock\c!conversion\endcsname\relax \@EA\ifx\csname\??se#1\c!conversion\endcsname\relax #2% \else \convertnumber{\getvalue{\??se#1\c!conversion}}{#2}% \fi \else \convertnumber{\getvalue{\??se#1\@@sectionblock\c!conversion}}{#2}% \fi \fi} % \def\@@sectionlevel#1% % {\ifundefined{\??se#1\c!level}0\else\getvalue{\??se#1\c!level}\fi} \def\@@sectionlevel#1% {\executeifdefined{\??se#1\c!level}0} % Omdat een markering kan worden herdefinieerd moeten we % eerst testen of er wel een keten||afhankelijkheid is. \def\resetsectionmarks#1% can invoke a break {\ifundefined{\??se#1}% \fastresetmarker[\mainmarking{#1}]% % redundant \mainmarking \else \let\donexttrackcommando\doresetsectionmarks \donexttracklevel{#1}% \fi} \def\doresetsectionmarks#1% {\ifundefined{\??se#1\c!marking}\else % skip zero level \fastresetmarkerlist[\csname\??se#1\c!marking\endcsname]% \fi \donexttracklevel{#1}} % I'm not sure if the next one is better: % % \def\doresetsectionmarks#1% % {\ifundefined{\??se#1\c!markering}% skip zero level % \donexttracklevel{#1}% % \else % \fastresetmarkerlist[\csname\??se#1\c!markering\endcsname]% % \fi} % % and indeed, it isn't, actually, it does not work at all, so let's drop it. % packaged: % % \def\resetsectioncounters#1% % {\def\donexttrackcommando##1% % {\resetcounter{\??se##1}% % \donexttracklevel{##1}}% % \donexttracklevel{#1}} % % nicer % % \def\doresetsectioncounters#1% % {\resetcounter{\??se#1}% % \donexttracklevel{#1}} % % obey eigennummer \def\doresetsectioncounters#1% {\resetcounter{\??se#1}% \letgvalue{\??se#1\c!ownnumber}\relax \donexttracklevel{#1}} \def\resetsectioncounters % #1 {\let\donexttrackcommando\doresetsectioncounters \donexttracklevel} % #1 % bij checken kan geen prefix worden bekeken, anders vallen % er titels buiten de inhoudsopgave % evt ook level gaan opslaan tbv snelle selectie % \def\makesectionformat % {\edef\sectionformat % {\@@sectiontype\sectionseparator % \csname\lastsection\s!format\endcsname}} \unprotected \def\makesectionformat % we don't want eigennummers here {\pushmacro\@@shortsectionnumber \let\@@shortsectionnumber\@@sectionvalue \edef\sectionformat {\@@sectiontype\sectionseparator \csname\lastsection\s!format\endcsname}% \popmacro\@@shortsectionnumber} \def\dobacktracklevel#1% {\doifnot{\previoussection{#1}}\zerosection {\dobacktrackcommando{\previoussection{#1}}}} \def\donexttracklevel#1% {\doifnot{#1}\lastsection {\donexttrackcommando{\nextsection{#1}}}} \chardef\alltoclevels\zerocount \let\currentlevel\empty \def\dosetcurrentlevel#1% {\global\chardef\alltoclevels\zerocount \xdef\currentlevel{\getvalue{\lastsection\s!format}}} \def\dosetpreviouslevel#1% {\global\chardef\alltoclevels\plusone \globallet\currentlevel\empty \def\dobacktrackcommando##1% {\ifnum\countervalue{\??se##1}>\zerocount \global\chardef\alltoclevels\zerocount \xdef\currentlevel{\getvalue{\previoussection{##1}\s!format}}% \else \dobacktracklevel{##1}% \fi}% \dobacktrackcommando\lastsection} \def\dosettextlevel#1% {\global\chardef\alltoclevels\plusone \globallet\currentlevel\empty} \def\dosetotherlevel#1% {\doifdefinedelse{\??ko#1\c!section} % beter alteratief: ook {\edef\@@sectie{\getvalue{\??ko#1\c!section}}} % hoofdstuk\c!format {\edef\@@sectie{#1}}% \doifdefinedelse{\??se\@@sectie} {\global\chardef\alltoclevels\zerocount \xdef\currentlevel{\getvalue{\@@sectie\s!format}}} {\global\chardef\alltoclevels\plusone \globallet\currentlevel\empty \def\dobacktrackcommando##1% {\@EA\ifx\csname\??se##1\c!start\endcsname\relax \dobacktracklevel{##1}% \else \ifnum\countervalue{\??se##1}>\zerocount \global\chardef\alltoclevels\zerocount \xdef\currentlevel{\getvalue{##1\s!format}}% \else \dobacktracklevel{##1}% \fi \fi}% \dobacktrackcommando\lastsection}} % \def\ignoresectionconversion % brrr % {\let\@@sectionconversion\secondoftwoarguments} % todo: criterium=appendix|frontmatter|.... \def\dosetfilterlevel#1#2% beware: this one is \let {\bgroup \let\@@shortsectionnumber\@@sectionvalue % \ignoresectionconversion \edef\askedlevel{#1}% \edef\askedfilter{#2}% \ifx\askedlevel\v!current \dosetcurrentlevel\askedlevel \else\ifx\askedlevel\v!previous \dosetpreviouslevel\askedlevel \else\ifx\askedlevel\v!all \global\chardef\alltoclevels\plusone \else\ifx\askedlevel\v!text \global\chardef\alltoclevels\plusone \else \edef\byaskedlevel{\csname\??by\askedlevel\endcsname}% \ifx\byaskedlevel\v!text \dosettextlevel\askedlevel \else \dosetotherlevel\askedlevel \fi \fi\fi\fi\fi % experiment \ifx\askedfilter\empty \else \xdef\currentlevel{\currentlevel\sectionseparator\askedfilter}% \fi \egroup} % \def\dontsetfilterlevel#1#2% % {\let\currentlevel\somesavedlevel % \chardef\alltoclevels\zerocount} \def\dontsetfilterlevel#1#2% {\let\currentlevel\somesavedlevel \let\@@sectiontype\@@tocsectiontype \chardef\alltoclevels\zerocount} \def\honorlocalfilterlevel % local lists will be real local {\let\dosetfilterlevel\dontsetfilterlevel} % cleaner % % \def\doifnextlevelelse[#1::#2]#3#4% % {\ifcase\alltoclevels % \doifelse{\@@sectiontype}{#1} % {\doifinstringelse{=\currentlevel:}{=:#2:} % {\doifinstringelse{=\currentlevel:0}{=:#2:}{#4}{#3}} % {#4}} % {#4}% % \else % #3% % \fi} % % \def\doifprevlevelelse[#1::#2]#3#4% % {\ifcase\alltoclevels % \doifelse{\@@sectiontype}{#1} % {\doifinstringelse{=\currentlevel:}{=:#2:}{#3}{#4}} % {#4}% % \else % #3% % \fi} % % faster % % \def\doifnextlevelelse[#1::#2]% % {\ifcase\alltoclevels % \doifelse{\@@sectiontype}{#1} % {\doifinstringelse{=\currentlevel:}{=:#2:} % {\doifinstringelse{=\currentlevel:0}{=:#2:}\donefalse\donetrue} % \donefalse} % \donefalse % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % \def\doifprevlevelelse[#1::#2]% % {\ifcase\alltoclevels % \doifelse{\@@sectiontype}{#1} % {\doifinstringelse{=\currentlevel:}{=:#2:}\donetrue\donefalse} % \donefalse % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % meaner % % \setuplist % [chapter] % [after={\startcolumns\placelist[section]\stopcolumns}] \def\somesavedlevel{0} % \def\dosavesomelevel[#1:0:0:0:#2]% % {\def\somesavedlevel{:#1}} % \def\doifnextlevelelse[#1::#2]% % {\dosavesomelevel[#2:0:0:0:0]% % \ifcase\alltoclevels % \doifelse{\@@sectiontype}{#1} % {\doifinstringelse{=\currentlevel:}{=:#2:} % {\doifinstringelse{=\currentlevel:0}{=:#2:}\donefalse\donetrue} % \donefalse} % \donefalse % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % \def\doifprevlevelelse[#1::#2]% % {\dosavesomelevel[#2:0:0:0:0]% % \ifcase\alltoclevels % \doifelse{\@@sectiontype}{#1} % {\doifinstringelse{=\currentlevel:}{=:#2:}\donetrue\donefalse} % \donefalse % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % again faster: % \def\doifnextlevelelse[#1::#2]% beware: this one is \let % {\dosavesomelevel[#2:0:0:0:0]% % \ifcase\alltoclevels % \ifnum\@@sectiontype=#1 % \def\levelstring{=:#2:}% % \doifincsnameelse{=\currentlevel:}\levelstring % {\doifincsnameelse{=\currentlevel:0}\levelstring\donefalse\donetrue} % \donefalse % \else % \donefalse % \fi % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % %\def\doifprevlevelelse[#1::#2]% beware: this one is \let % {\dosavesomelevel[#2:0:0:0:0]% % \ifcase\alltoclevels % \ifnum\@@sectiontype=#1 % \doifinstringelse{=\currentlevel:}{=:#2:}\donetrue\donefalse % \else % \donefalse % \fi % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % \let\doiftoclevelelse\doifnextlevelelse % \let\doifreglevelelse\doifprevlevelelse % \let\doifblklevelelse\doifprevlevelelse % % we want to be able to overload them globally % This will be reimplemented some day soon % % {nn}{xx}{yy} % % -> \scan{..}{..}{0} met 0 als sentinel % still not perfect % % \def\doifnextlevelelse[#1]% !! this one is \let / uti seperator -- % {\edef\somesavedlevel{\sectionseparator\@@filterlevelpart[#1]}% % \ifcase\alltoclevels % \ifnum\@@sectiontype=\@@filterblockpart[#1]\relax % \edef\levelstring{=\sectionseparator\@@filternumberpart[#1]\sectionseparator}% % \doifincsnameelse{=\currentlevel\sectionseparator}\levelstring % {\doifincsnameelse{=\currentlevel\sectionseparator0}\levelstring % \donefalse % \donetrue} % \donefalse % \else % \donefalse % \fi % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % \def\doifprevlevelelse[#1]% !! this one is \let / uti seperator -- % {\edef\somesavedlevel{\sectionseparator\@@filterlevelpart[#1]}% % \ifcase\alltoclevels % \ifnum\@@sectiontype=\@@filterblockpart[#1]\relax % \doifinstringelse % {=\currentlevel\sectionseparator} % {=\sectionseparator\@@filternumberpart[#1]\sectionseparator} % \donetrue\donefalse % \else % \donefalse % \fi % \else % \donetrue % \fi % \ifdone % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} \def\doifnextlevelelse[#1]% !! this one is \let / uti seperator -- {\edef\somesavedlevel{\sectionseparator\@@filterlevelpart[#1]}% \edef\@@tocsectiontype{\@@filterblockpart[#1]}% needed for nested tocs \ifcase\alltoclevels \ifnum\@@sectiontype=\@@tocsectiontype\relax \edef\levelstring{=\sectionseparator\@@filternumberpart[#1]\sectionseparator}% \doifincsnameelse{=\currentlevel\sectionseparator}\levelstring {\doifincsnameelse{=\currentlevel\sectionseparator0}\levelstring \donefalse \donetrue} \donefalse \else \donefalse \fi \else \donetrue \fi \ifdone \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifprevlevelelse[#1]% !! this one is \let / uti seperator -- {\edef\somesavedlevel{\sectionseparator\@@filterlevelpart[#1]}% \edef\@@tocsectiontype{\@@filterblockpart[#1]}% needed for nested tocs \ifcase\alltoclevels \ifnum\@@sectiontype=\@@tocsectiontype\relax \doifinstringelse {=\currentlevel\sectionseparator} {=\sectionseparator\@@filternumberpart[#1]\sectionseparator} \donetrue\donefalse \else \donefalse \fi \else \donetrue \fi \ifdone \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % we need to cover the special case of nested lists in section blocks % % \starttext % % \def\ChapterEntry#1#2#3% % {chapter : \hbox to \hsize{\strut\bf#2\hss#3}\endgraf\placelist[section]} % % \startfrontmatter % optional % \placelist[chapter][alternative=command,command=\ChapterEntry,criterium=text] \page % \stopfrontmatter % optional % % \startbodymatter % optional % \chapter{first} \section{one} test \section{two} test \page % \chapter{second} \section{alpha} test \section{beta} test \page % \stopbodymatter % optional % % \stoptext \def\doiftoclevelelse{\doifnextlevelelse} \def\doifreglevelelse{\doifprevlevelelse} \def\doifblklevelelse{\doifprevlevelelse} \def\@@longformatnumber#1% {\csname\previoussection{#1}\s!format\endcsname \sectionseparator \@@shortsectionnumber{#1}} % \def\@@longsectionnumber#1% % {\ifnum\countervalue{\??se\previoussection{#1}}>\zerocount % \csname\previoussection{#1}\c!nummer\endcsname.% % \fi % \@@shortsectionnumber{#1}} \def\@@longsectionnumber#1% {\ifreversesectionnumbers \@@shortsectionnumber{#1}% \ifnum\countervalue{\??se\previoussection{#1}}>\zerocount .\csname\previoussection{#1}\c!number\endcsname \fi \else \ifnum\countervalue{\??se\previoussection{#1}}>\zerocount \csname\previoussection{#1}\c!number\endcsname.% \fi \@@shortsectionnumber{#1}% \fi} % suited for chinese too: % % \def\@@shortsectionnumber#1% % {\@EA\ifx\csname\??se#1\@@sectionblock\c!conversie\endcsname\relax % \@@sectionvalue{#1}% % \else % \@@sectionconversion{#1}{\@@sectionvalue{#1}}% % \fi} % % obey eigennummer % % \def\@@shortsectionnumber#1% % {\@EA\ifx\csname\??se#1\c!eigennummer\endcsname\relax % \@EA\ifx\csname\??se#1\@@sectionblock\c!conversie\endcsname\relax % \@EA\ifx\csname\??se#1\c!conversie\endcsname\relax % \@@sectionvalue{#1}% % \else % \@@sectionconversion{#1}{\@@sectionvalue{#1}}% % \fi % \else % \@@sectionconversion{#1}{\@@sectionvalue{#1}}% % \fi % \else % \csname\??se#1\c!eigennummer\endcsname % \fi} \def\@@shortsectionnumber#1% {\@EA\ifx\csname\??se#1\c!ownnumber\endcsname\relax \@EA\ifx\csname\??se#1\@@sectionblock\c!conversion\endcsname\relax \@EA\ifx\csname\??se#1\c!conversion\endcsname\relax \@@sectionvalue{#1}% \else \@@sectionconversion{#1}{\@@sectionvalue{#1}}% \fi \else \@@sectionconversion{#1}{\@@sectionvalue{#1}}% \fi \else \csname\??se#1\c!ownnumber\endcsname \fi} \def\dosetlocalsectionblock#1#2#3% new \edef's {\edef\@@sectiontype {#1}% \edef\@@sectionblock {#2}% \edef\@@sectionblocks{#3}} % beware, the \resetsectionmarks generates some nodes that % will result in an additional last page, which needs to be % captured at the end % \def\doaroundsectionblock#1% % {\doifvaluesomething{\??sb#1\c!page} % {\ExpandFirstAfter\page[\getvalue{\??sb#1\c!page}]}% % \resetsectioncounters\zerosection % was firstsection % \resetsectionmarks\zerosection} % \def\dostartsectionblock#1#2% % {\begingroup % \doaroundsectionblock{#1}% % going to a new page or so % \getvalue{\??sb#1}% % set name of section block % \getsectionblockenvironment{#1}% % special settings, grouped % %\expandafter\csname#2true\endcsname % obsolete % \setsystemmode{#1}% % can be used in conditionals % \getvalue{\??sb\@@sectionblock\c!before}% this one is not to be moved! % \showmessage\m!structures1\@@sectionblocks} % \def\dostopsectionblock % {\showmessage\m!structures2\@@sectionblocks % \getvalue{\??sb\@@sectionblock\c!after}% don't move % \doaroundsectionblock\@@sectionblock % \endgroup} \def\doaroundsectionblock {\doifvaluesomething{\??sb\@@sectionblock\c!page} {\page[\getvalue{\??sb\@@sectionblock\c!page}]}% \resetsectioncounters\zerosection % was firstsection \resetsectionmarks\zerosection} \def\dostartsectionblock#1#2% {\begingroup \getvalue{\??sb#1}% \doaroundsectionblock % \doifvaluesomething{\??sb\@@sectionblock\c!page}{\page[\getvalue{\??sb\@@sectionblock\c!page}]}% % \resetsectioncounters\zerosection % was firstsection % \resetsectionmarks\zerosection \getsectionblockenvironment\@@sectionblock \setsystemmode\@@sectionblock \getvalue{\??sb\@@sectionblock\c!before}% \showmessage\m!structures1\@@sectionblocks} \def\dostopsectionblock {\showmessage\m!structures2\@@sectionblocks \getvalue{\??sb\@@sectionblock\c!after}% don't move \doaroundsectionblock % \doifvaluesomething{\??sb\@@sectionblock\c!page}{\page[\getvalue{\??sb\@@sectionblock\c!page}]}% % \resetsectioncounters\zerosection % was firstsection % \resetsectionmarks\zerosection \endgroup} \def\dosetupsectionblock[#1]% [#2] {\getparameters[\??sb#1]} \def\setupsectionblock {\dodoubleargument\dosetupsectionblock} \long\def\setsectionblockenvironment#1#2% {\long\setvalue{\??sb\s!do#1}{\do{#2}}} \def\getsectionblockenvironment#1% {\let\do\firstofoneargument\getvalue{\??sb\s!do#1}} \setvalue{\e!start\v!sectionblockenvironment}% {\dosingleargument\dostartsectionblockenvironment} \def\dostartsectionblockenvironment[#1]% evt \pushendofline \popendofline {\long\def\do##1##2{\setsectionblockenvironment{#1}{##1##2}}% \grabuntil{\e!stop\v!sectionblockenvironment}{\getvalue{\??sb\s!do#1}}} %D \starttyping %D \startsectionblockenvironment[frontpart] %D \setuppagenumbering[conversion=romannumerals] %D \stopsectionblockenvironment %D %D \startsectionblockenvironment[bodypart] %D \setuppagenumber[number=1] %D \stopsectionblockenvironment %D %D \startsectionblockenvironment[frontpart] %D \setuppagenumbering[conversion=character] %D \stopsectionblockenvironment %D %D \starttext %D \startfrontmatter \chapter{test} \stopfrontmatter %D \startbodymatter \chapter{test} \stopbodymatter %D \startappendices \chapter{test} \stopappendices %D \stoptext %D \stoptyping % We used to use the first char as id, but a counter is % better, because in english we get a name clash. \newcounter\currentsectionblock \def\currentsection{\@@sectionblock} \def\dodefinesectionblock[#1][#2][#3]% {\getparameters [\??sb#1] [\c!number=\v!yes, \c!page=\v!right, % anders worden marks te vroeg gereset ! %\c!before=, %\c!after=, #3]% \expandafter\newif\csname if#2\endcsname % better a mode \doglobal\increment\currentsectionblock \setsectionblockenvironment{#1}{}% \setevalue{\??sb #1}{\noexpand\dosetlocalsectionblock{\currentsectionblock}{#1}{#2}}% \setvalue {\e!start#2}{\dostartsectionblock{#1}{#2}}% \setvalue {\e!stop #2}{\dostopsectionblock}} \def\definesectionblock {\dotripleargument\dodefinesectionblock} \def\sectionblocklabel#1#2% {\@EA\ifx\csname\??ko#1\@@sectionblock\c!label\endcsname\relax \labeltexts{#1}{#2}% \else \labeltexts{\getvalue{\??ko#1\@@sectionblock\c!label}}{#2}% \fi} \dosetlocalsectionblock{2}{\v!bodypart}{\v!bodymatter} % hm, dirty \def\setsectiontype[#1]% {\getvalue{\??sb#1}} \def\writesection#1#2#3% #3 -> \asciititle {\bgroup \edef\!!stringa{#1}% \@EA\writestatus\@EA {\!!stringa} {\ifsectionnumber#2\else(#2)\fi\normalspace\asciititle}% \egroup} \def\@@kolevel{1} \def\headlevel{\@@kolevel} \def\dohandlepagebreakAA#1% {\ifnum\lastpenalty>0 \global\pagebreakdisabledtrue \fi} % \setuphead[section][aligntitle=float] % permits title next to sidefloat % % \placefigure[left]{}{} \section{\dorecurse{10}{bagger }} \input tufte % \def\dohandlepagebreakAB#1% will be replaced by a more clever (signaling) mechanism (in beta) % {\doifnotvalue{\??ko#1\c!aligntitle}\v!float\flushsidefloats % \getvalue{\??ko#1\c!before}% % % \whitespace vervangen door \noindent elders % \relax % \ifpagebreakdisabled % \global\pagebreakdisabledfalse % \else % \!!countb\getvalue{\??se\@@sectie\c!level}\relax % \ifnum\!!countb>\@@kolevel\relax % \!!counta20000 % \multiply\!!countb 500 % \advance\!!counta \!!countb % \dosomebreak{\penalty\!!counta}% % \else % \dosomebreak\allowbreak % \fi % \fi % \doifvalue{\??ko#1\c!aligntitle}\v!float\indent % \xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}} \chardef\somebreakmethod\plusone \def\dohandlepagebreakAB#1% will be replaced by a more clever (signaling) mechanism (in beta) {\doifnotvalue{\??ko#1\c!aligntitle}\v!float\flushsidefloats \getvalue{\??ko#1\c!before}% % \whitespace vervangen door \noindent elders \relax \ifpagebreakdisabled \global\pagebreakdisabledfalse \else \ifcase\somebreakmethod % 0 = nothing \or % 1 = old weighted version \!!countb\getvalue{\??se\@@sectie\c!level}\relax \ifnum\!!countb>\@@kolevel\relax \!!counta20000 \multiply\!!countb 500 \advance\!!counta \!!countb \dosomebreak{\penalty\!!counta}% \else \dosomebreak\allowbreak % brr \fi \or % 2 = strict version \dosomebreak{\penalty\maxdimen}% \else % nothing \fi \fi \doifvalue{\??ko#1\c!aligntitle}\v!float\indent \xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}} \def\dohandlepagebreakBB#1#2#3% {%\doifinsetelse{\getvalue{\??tk#2\c!state}}{\v!normal,\v!start} \doifelselayouttextline{#2} {\doifvaluesomething{\??ko#1#3} {\setuplayouttext[#2][\c!state=\getvalue{\??ko#1#3}]}} \donothing} \def\dohandlepagebreakB#1% {\doifvaluesomething{\??ko#1\c!page} {\def\resetcurrentsectionmarks% toegevoegd, zie \page {\resetsectionmarks{\previoussection\@@sectie}}% \page[\getvalue{\??ko#1\c!page}]% \dohandlepagebreakBB{#1}\v!header\c!header \dohandlepagebreakBB{#1}\v!text \c!text \dohandlepagebreakBB{#1}\v!footer\c!footer}} \def\dohandlepagebreakX#1% zie doordefinieren / boven {\bgroup \!!countb\@@kolevel \advance\!!countb #1 \multiply\!!countb 500 \!!counta20000 \advance\!!counta \!!countb \dosomebreak{\penalty\!!counta}% \egroup} \newconditional\ignorehandlepagebreak \def\handlepagebreak#1% {\ifconditional\ignorehandlepagebreak \setfalse\ignorehandlepagebreak \else \dohandlepagebreakAA{#1}% \ifnum\countervalue{\??se\previoussection\@@sectie}>\zerocount\relax \ifnum\countervalue{\??se\@@sectie}>\zerocount \dohandlepagebreakB{#1}% \else \doifnotvalue{\??ko#1\c!continue}\v!yes{\dohandlepagebreakB{#1}}% \fi \else \dohandlepagebreakB{#1}% \fi \dohandlepagebreakAB{#1}% \fi} \def\handlenopagebreak#1% {\ifconditional\ignorehandlepagebreak \setfalse\ignorehandlepagebreak \else \xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}% \nobreak \fi} \def\localheadheight {\strutht} \def\localheaddepth {\strutdp} \def\localheadlineheight{\lineheight} \def\dolocalheadsetup#1% koppeling met standaard kopcommando / engels {\forgetall % traag dus ... \doifvaluesomething{\??ko#1\c!align} % wordt al expanded in spa {\expanded{\setupalign[\getvalue{\??ko#1\c!align}]}}% \doifvaluesomething{\??ko#1\c!tolerance} % wordt al expanded in spa {\expanded{\setuptolerance[\getvalue{\??ko#1\c!tolerance}]}}% \doifvalue{\??ko#1\c!strut}\v!no % wordt al expanded in spa {\setnostrut}% new \def\\{\crlf\strut\ignorespaces}} \def\localkopsetup{\localheadsetup} % kan tzt weg % todo: make them conditionals: \newif\ifincrementnumber \newif\ifreversesectionnumbers % todo: key/val \newif\ifsectionnumber \sectionnumbertrue \newif\ifdisplaysectionhead \displaysectionheadtrue \newif\ifplacehead \newif\ifemptyhead \newif\ifwritetolist \newif\ifheadnumber \newif\ifheadnumbercontent % niet meer wijzigen / wordt mode \newif\ifheadprefix \newif\ifsomeheadconversion % new \newconditional\@@resetsubheadnumbers \def\setsectieenkoppeling#1% {\edef\@@koppeling{\getvalue{\??ko#1\c!coupling}}% \edef\@@sectie{\getvalue{\??ko#1\c!section}}% \doifnothing\@@koppeling {\edef\@@koppeling{#1}}% \doifnothing\@@sectie {\edef\@@sectie{\getvalue{\??ko\@@koppeling\c!section}}}} % \handlepagebreak komt het eerst omdat eventueel % subpaginanummers moeten worden afgehandeld. Vervolgens % worden de nummers opgehoogd en referenties geset, dan % volgt de kop en tot slot de worden de marks en de prefix % geset. % \hoofdstuk {tekst} % \hoofdstuk tekst % \hoofdstuk \let\finalsectionnumber\empty \def\dofinalsectionnumber {\ifundefined{\@@sectie\c!number}\else \ifsomeheadconversion \@@shortsectionnumber\@@sectie \else \getvalue{\@@sectie\c!number}% \fi \fi} \def\findsectionnumber#1#2#3% class file title / uti seperator -- {\begingroup \setsectieenkoppeling{#1}% \xdef\foundsectionnumber{1}% \def\dolistelement##1##2##3##4##5##6% {\doif{##1}{#1} {\ConvertConstantAfter\doif{##4}{#3} {\global\utilitydonetrue \scratchcounter=0\getvalue{\??se\@@sectie\c!level}% % %\advance\scratchcounter 2 %\@EA\def\@EA\do\@EA####\@EA1\sectionseparator####2]% % {\advance\scratchcounter -1 % \ifcase\scratchcounter % \xdef\foundsectionnumber{####1}% % \else % \do####2]% % \fi}% %\do##5]}}}% % \def\do####1\relax % :/- clean {\advance\scratchcounter \minusone \ifcase\scratchcounter \xdef\foundsectionnumber{\@@filterheadpart[####1]}% \else \@EAEAEA\do\@@filtertailpart[####1]\relax \fi}% \@EA\do\@@filternumberpart[##5]\relax}}}% \setbox0\vbox {\doutilities{#1}{#2}{#1}\relax\relax}% \endgroup \doifnumberelse\foundsectionnumber {\doif\foundsectionnumber\!!zerocount {\globallet\foundsectionnumber\!!plusone}} {\globallet\foundsectionnumber\!!plusone}% an appendix or so \setupheadnumber[#1][\foundsectionnumber]% \setupheadnumber[#1][-1]} % deal with eigennummer \def\setsomeheadconversion#1#2% {\someheadconversionfalse \doifelsevalue{\??ko#1\c!ownnumber}\v!yes {\setgvalue{\??se\@@sectie\c!ownnumber}{#2}% \def\someheadconversion{#2}} {\letgvalue{\??se\@@sectie\c!ownnumber}\relax \determineheadnumber[#1]% \@EA\ifx\csname\??se\@@sectie\@@sectionblock\c!headconversion\endcsname\relax \@EA\ifx\csname\??se\@@sectie\c!headconversion\endcsname\relax \def\someheadconversion{#2}% \else \@EA\ifx\csname\??se\@@sectie\c!headconversion\endcsname\empty \def\someheadconversion{#2}% \else \someheadconversiontrue \def\someheadconversion% {\fullsectionnumber{#1}{\getvalue{\??se\@@sectie\c!headconversion}}{#2}}% \fi \fi \else \@EA\ifx\csname\??se\@@sectie\@@sectionblock\c!headconversion\endcsname\empty \def\someheadconversion{#2}% \else \someheadconversiontrue \def\someheadconversion% {\fullsectionnumber{#1}{\getvalue{\??se\@@sectie\@@sectionblock\c!headconversion}}{#2}}% \fi \fi}} \def\writtenfullsectionnumber {\string\fullsectionnumber} \def\ignoredfullsectionnumber#1#2#3% {#3} \let\storedfullsectionnumber\relax \def\expandablefullsectionnumber#1#2#3% {\convertnumber{#2}{#3}} \unexpanded\def\naturalfullsectionnumber#1#2#3% {\sectionblocklabel{#1}{\convertnumber{#2}{#3}}} \unexpanded\def\limitedfullsectionnumber#1#2#3% {\convertnumber{#2}{#3}} \def\setfullsectionnumber#1% {\doifelsevalue{#1\c!headconversion}\v!yes {\doifelsevalue{#1\c!headlabel}\v!yes {\let\fullsectionnumber\naturalfullsectionnumber} {\let\fullsectionnumber\limitedfullsectionnumber}} {\let\fullsectionnumber\ignoredfullsectionnumber}} \let\fullsectionnumber\limitedfullsectionnumber % from cont-new: \def\expandifnonempty#1% {\@EA\ifx\csname#1\endcsname\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi {\csname#1\endcsname}} \def\@@sectiekoppeling#1% {\expandifnonempty{\??ko#1\c!coupling}{#1}} \def\@@sectiesectie#1% {\expandifnonempty{\??ko#1\c!section}{\@@sectiekoppeling{#1}}} \def\sectioncountervalue#1% {\@@sectionvalue{\@@sectiesectie{#1}}} % \dodododoconstructhead IS NON GROUPED, SO WE NEED TO RESTORE !!!! % % dit kan dus beter \everyaroundhead zijn \let\currentheadnumber\empty \let\currentheadtext \empty \def\dodoconstructhead#1[#2]#3% [ref] {title} {\doifelsevalue{\??ko#1\c!ownnumber}\v!yes {\doquadruplegroupempty\dododoconstructhead{#1}{#2}{#3}} {\fourthargumentfalse \dododoconstructhead{#1}{#2}{#3}{}}} \def\dododoconstructhead#1#2#3#4% [ref] {own} {title} {\iffourthargument \def\next{\dodododoconstructhead{#1}[#2]{#3}{#4}}% \else \def\next{\dodododoconstructhead{#1}[#2]{\finalsectionnumber}{#3}}% \fi \next} % pas met \ExpandFirstAfter op bij twee||taligheid \ifx\dohandleheadnumber\undefined \let\dohandleheadnumber\firstofoneargument \fi \unexpanded\def\\{\space} \def\emptyheadcorrection % experimental, should work {\ifemptyhead % well with na=\blank \vskip-\lineheight \dosomebreak\nobreak \kern\zeropoint \prevdepth\strutdepth \fi} \let\localkopprefix\empty \def\headparameter#1% to do: everywhere in core-sec {\executeifdefined{\??ko\currenthead#1}\empty} % todo: write to list etc in both args or in enclosing h/vbox else it gets % lost when no #1 or #2 is typeset % we will use variables here \def\dodododoconstructhead#1[#2]#3#4% [ref] {number} {title} {\def\currenthead{#1}% dus #1 overal vervangen \let\finalsectionnumber\dofinalsectionnumber % overloaded ungrouped -) \unexpanded\def\\{\space}% \edef\numberseparator{\spr{\getvalue{\??ko\currenthead\c!separator}}}% \flushingcolumnfloatsfalse % {number} can be \finalsectionnumber \someheadconversionfalse \let\fullsectionnumber\limitedfullsectionnumber \setsectieenkoppeling{#1}% \doifelsevaluenothing{\??ko#1\c!prefix} \headprefixfalse\headprefixtrue \ifheadprefix \doifelsevalue{\??ko#1\c!prefix}{+} {\doifelsenothing{#2} {\def\localkopprefix{+}} {\def\localkopprefix{#2}}} % eigenlijk alleen eerste {\edef\localkoprefix{\getvalue{\??ko#1\c!prefix}}}% \else \let\localkoprefix\empty \fi \placeheadtrue \processaction [\getvalue{\??ko#1\c!placehead}] [ \v!yes=>\emptyheadfalse, \v!empty=>\emptyheadtrue, \v!no=>\emptyheadtrue\placeheadfalse]% \doifelsevalue{\??ko#1\c!resetnumber}\v!no {\setfalse\@@resetsubheadnumbers}% {\settrue \@@resetsubheadnumbers}% \writetolistfalse \processaction [\getvalue{\??ko#1\c!incrementnumber}] [ \v!yes=>\incrementnumbertrue, \v!no=>\incrementnumberfalse, \v!list=>\incrementnumberfalse % beware, since no numbers are used, no nested lists are % possible here \writetolisttrue, \s!unknown=>{\ifx\currentproduct\empty \findsectionnumber{#1}\commalistelement{#4}% \fi \incrementnumbertrue}]% \edef\numberheaddistance {\getvalue{\??ko#1\c!distance}}% \edef\numberheadalternative{\getvalue{\??ko#1\c!alternative}}% \doifelsevalue{\??ko:\numberheadalternative}\v!horizontal \displaysectionheadfalse \displaysectionheadtrue \ifsectionnumber \doifelsevalue{\??sb\@@sectionblock\c!number}\v!yes {\doifelsevalue{\??ko#1\c!number}\v!yes \headnumbertrue \headnumberfalse} {\headnumberfalse}% \else \headnumberfalse \fi \defconvertexpanded\asciititle{\getvalue{\??ko#1\c!expansion}}{#4}% % \gdef\currentheadtext{#4}% scheelt args \globallet\currentheadnumber\empty % \ifincrementnumber \ifplacehead \checknexthead\handlepagebreak{#1}% \setsectieenkoppeling{#1}% can be changed when [voor=\somehead{..}...] \ifheadprefix %\setupreferencing[\c!prefix=-]% \setupreferenceprefix[-]% \fi \getvalue{\e!next\@@sectie}% \ifheadnumber \setsomeheadconversion{#1}{#3}% \let\fullsectionnumber\expandablefullsectionnumber \xdef\currentheadnumber{\someheadconversion}% \getvalue{\??ko#1\c!inbetween}% \ifsomeheadconversion \let\fullsectionnumber\naturalfullsectionnumber \doplaceheadnumbertext {#1} {\setsectionlistreference{\@@sectie}{#1}% \pagetype[\@@koppeling]% \let\fullsectionnumber\writtenfullsectionnumber \rawreference\s!sec{#2}{{\someheadconversion}{\asciititle}}% \resetsectionmarks\@@sectie \setlistparameter\@@koppeling\c!expansion{\getvalue{\??ko#1\c!expansion}}% \let\fullsectionnumber\writtenfullsectionnumber \dowritetolist\@@koppeling\someheadconversion{#4}\v!head}% {\dohandleheadnumber\someheadconversion}% handle is new {#4} {\marking[#1]{#4}% \let\fullsectionnumber\storedfullsectionnumber \expanded{\marking[#1\v!number]{\someheadconversion}}}% \let\fullsectionnumber\ignoredfullsectionnumber \writesection{#1}{\someheadconversion}{#4}% \else \doplaceheadnumbertext {#1} {\setsectionlistreference{\@@sectie}{#1}% \pagetype[\@@koppeling]% \rawreference\s!sec{#2}{{#3}{\asciititle}}% \resetsectionmarks\@@sectie \setlistparameter\@@koppeling\c!expansion{\getvalue{\??ko#1\c!expansion}}% \dowritetolist\@@koppeling{#3}{#4}\v!head} {\sectionblocklabel{#1}{\dohandleheadnumber{#3}}}% handle is new {#4} {\marking[#1]{#4}% \doifelsevalue{\??ko#1\c!ownnumber}\v!yes % rommelig omdat {\edef\finalsectionnumber{#3}} % #3 al is toegekend {\determineheadnumber[#1]}% migreert naar 3e argument \expanded{\marking[#1\v!number]{\finalsectionnumber}}}% \writesection{#1}{#3}{#4}% \fi \else \getvalue{\??ko#1\c!inbetween}% \doplaceheadtext {#1} {\setsectionlistreference{\@@sectie}{#1}% \pagetype[\@@koppeling]% \rawreference\s!sec{#2}{{#3}{\asciititle}}% \resetsectionmarks\@@sectie \setlistparameter\@@koppeling\c!expansion{\getvalue{\??ko#1\c!expansion}}% \doifelsevalue{\??ko#1\c!ownnumber}\v!yes % brrr, new per 18/1/2005, sometimes we need {\dowritetolist\@@koppeling{#3}{#4}\v!head} % entries in the list (special purpose) but {\dowritetolist\@@koppeling {}{#4}\v!head}% not in the header, ok we could pop in a command }% \dowritetolist\@@koppeling{}{#4}\v!head} {#4} {\marking[#1]{#4}% \doifelsevalue{\??ko#1\c!ownnumber}\v!yes % brrr {\edef\finalsectionnumber{#3}} {\determineheadnumber[#1]}% % todo : geen markering (leeg maken) \expanded{\marking[#1\v!number]{\finalsectionnumber}}}% \writesection{#1}{-}{#4}% \fi \ifheadprefix \setupreferenceprefix[\localkopprefix]% \fi \ifdisplaysectionhead \dosomebreak\nobreak \emptyheadcorrection \getvalue{\??ko#1\c!after}% \fi \else % Whatever future tex's will do with nodes, % we assume a node here, because other \c!after=\blank % will fail! See 'prikkels' % % so, maybe we need an explicit \kern % % do nothing / should be vbox to 0pt % \checknexthead\dohandlepagebreakB{#1}% toegevoegd ivm subpaginanr / tug sheets \setsectieenkoppeling{#1}% can be changed when [voor=\somehead{..}...] \ifheadprefix \setupreferenceprefix[-]% \fi \getvalue{\e!next\@@sectie}% \ifheadnumber \setsomeheadconversion{#1}{#3}% \let\fullsectionnumber\expandablefullsectionnumber \xdef\currentheadnumber{\someheadconversion}% \fi \getvalue{\??ko#1\c!inbetween}% documenteren, is enige hook \bgroup \setsectionlistreference{\@@sectie}{#1}% \resetsectionmarks\@@sectie \marking[#1]{#4}% \doifelsevalue{\??ko#1\c!ownnumber}\v!yes {\edef\finalsectionnumber{#3}} {\determineheadnumber[#1]}% \expanded{\marking[#1\v!number]{\finalsectionnumber}}% \pagetype[\@@koppeling]% % \bgroup \setlistparameter\@@koppeling\c!expansion{\getvalue{\??ko#1\c!expansion}}% \ifheadnumber \rawreference\s!sec{#2}{{#3}{\asciititle}}% \dowritetolist\@@koppeling{#3}{#4}\v!head \writesection{#1}{#3}{#4}% \else % hm, also no own number \rawreference\s!sec{#2}{{#3}{\asciititle}}% \dowritetolist\@@koppeling{}{#4}\v!head \writesection{#1}{-}{#4}% \fi \egroup \ifheadprefix \setupreferenceprefix[\localkopprefix]% \fi \fi \else % todo : ref prefix \ifplacehead \checknexthead\handlepagebreak{#1}% \setsectieenkoppeling{#1}% can be changed when [voor=\somehead{..}...] \getvalue{\??ko#1\c!inbetween}% \doplaceheadtext {#1} {\forcesectiontolist{#1}{#4}% \rawreference\s!sec{#2}{{#3}{\asciititle}}} % #3 ? {#4} %{}% new: {\marking[#1]{#4}% \marking[#1\v!number]{}}% \writesection{#1}{-}{#4}% \ifdisplaysectionhead \dosomebreak\nobreak \emptyheadcorrection \getvalue{\??ko#1\c!after}% \fi \else % do nothing / should be vbox to 0pt \checknexthead\handlepagebreak{#1}% \setsectieenkoppeling{#1}% can be changed when [voor=\somehead{..}...] \getvalue{\??ko#1\c!inbetween}% \forcesectiontolist{#1}{#4}% \rawreference\s!sec{#2}{{#3}{\asciititle}}% #3 ? \marking[#1]{#4}% \marking[#1\v!number]{}% \writesection{#1}{-}{#4}% \fi \fi \flushingcolumnfloatstrue \someheadconversionfalse \setfalse\ignorehandlepagebreak \let\fullsectionnumber\limitedfullsectionnumber % ignorespaces prevents spaces creeping in when after=\dontleavehmode \ifdisplaysectionhead\ignorespaces\else\expandafter\GotoPar\fi} \def\forcesectiontolist#1#2% {\ifwritetolist % we need to make sure that there is a number set (non % zero) else the list mechanism cannot determine the % level \bgroup \setupheadnumber[#1][+1]% traag, wordt \getvalue{\c!next...} \setlistparameter\@@koppeling\c!expansion{\getvalue{\??ko#1\c!expansion}}% \dowritetolist\@@koppeling{}{#2}\v!head \setupheadnumber[#1][-1]% traag, wordt \getvalue{\c!previous...} \egroup \fi} \let\previoussectionformat\empty \let\currentsectionformat \empty \let\updatelistreferences \relax \let\updatedlistreferences\empty \def\setsectionlistreference#1#2% {\ifnum\countervalue{\??se\previoussection{#1}}>0\relax \xdef\previoussectionformat{\@@longformatnumber{\previoussection{#1}}}% \else \globallet\previoussectionformat\empty \fi \xdef\currentsectionformat{\@@longformatnumber{#1}}} \def\startlistreferences#1% {\thisissomeinternal{\s!lst}{#1\currentsectionformat}% \setxvalue{\s!lst:#1}{\realfolio}% to be sure \setxvalue{\s!lst:#1\currentsectionformat}{\realfolio}% \setxvalue{\e!previouslocal#1}{\s!lst:#1\previoussectionformat}% \setxvalue{\e!currentlocal#1}{\s!lst:#1\currentsectionformat}% \doifelse{\currentsectionformat}{} {\setglobalcrossreference {\e!previous#1}{}{\realfolio}{}} {\setglobalsystemreference\rt!list {\e!previous#1}{\getvalue{\e!previouslocal#1}}}% \def\stoplistreferences{\dostoplistreferences{#1}}} \def\dostoplistreferences#1% {\ifutilitydone \addtocommalist{#1}\updatedlistreferences % nog global (\doglobal) \globallet\updatedlistreferences\updatedlistreferences % een noodverbandje \gdef\updatelistreferences% {\def\docommand####1% {\setglobalsystemreference\rt!list {\e!previous####1}{\getvalue{\e!currentlocal####1}}}% \processcommacommand[\updatedlistreferences]\docommand \globallet\updatelistreferences\relax \globallet\updatedlistreferences\empty}% \fi} \let\stoplistreferences\relax \appendtoks \updatelistreferences \to\aftereverypage % \prevdepth\strutdp % is belangrijk, vergelijk naast elkaar: % % \subject{test} \input tufte % \subject{test} \strut \input tufte % \subject{test} \placelist[...] % todo: kap % to be documented: \placeheadtext \placeheadnumber \unexpanded\def\placeheadtext {\doquintupleempty\doplaceheadtextornumber [\c!textstyle][\c!textcolor][\empty]} \unexpanded\def\placeheadnumber {\doquintupleempty\doplaceheadtextornumber [\c!numberstyle][\c!numbercolor][\v!number]} \def\doplaceheadtextornumber[#1][#2][#3][#4][#5]% {\bgroup \edef\@@sectie{\??ko\iffifthargument#5\else#4\fi}% \dostartattributes\@@sectie\c!style\c!color\empty \dontconvertfont \dostartattributes\@@sectie{#1}{#2}\empty \setupinterlinespace \begstrut\getmarking[\mainmarking{#4#3}]\endstrut \endgraf \dostopattributes \dostopattributes \egroup} \chardef\headtimingmode=0 % \chardef\headtimingmode=1 % 0 also works ok now too % % Martin Kolarik's problem: % % \setuphead[section][command=\doTitle] % % \def\doTitle#1#2% % {\ruledvbox{\forgetall \hsize=4cm % \ruledhbox{\ruledvtop{#1}\ruledvtop{#2}}}} % % \section{test test test test test test test test test test % test test test test test test test} \newevery \everyheadstart \relax \def\placeheadmargintexts#1% {\the\everyheadstart \doifvalue{\??ko#1\c!margintext}\v!yes\placemargincontent} \def\doplaceheadtext#1#2#3#4% {\beginheadplacement{#1}% \ifemptyhead % = needed \setbox0=\ifvertical\vbox\else\hbox\fi to \zeropoint {\headnumbercontentfalse \resetsystemmode\v!sectionnumber #2}% \makestrutofbox0 \else % = needed \setbox0=\ifvertical\vbox\else\hbox\fi % \vhbox {\headnumbercontentfalse \resetsystemmode\v!sectionnumber % less interfering \ifcase\headtimingmode\or#2\fi % outerside font determines distance \dosetfontattribute{\??ko#1}\c!style % but we don't want color to influence user commands % todo: get the if-else out of it \getvalue{\??ko#1\c!command} {} % no number {\dostartattributes{\??ko#1}\c!style\c!color\empty \dostartattributes{\??ko#1}\c!textstyle\c!textcolor\empty \dontconvertfont \ifdisplaysectionhead \setupinterlinespace \else \setupspacing \fi % \ifcase\headtimingmode#2\fi % can introduce cr \getvalue{\??ko#1\c!commandbefore}% \placeheadmargintexts{#1}% binnen #3? \ifdisplaysectionhead \getvalue{\??ko#1\c!textcommand}% struts can be nilled with \setnostrut {\setstrut \begstrut \ifcase\headtimingmode\hbox{#2}\fi \executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#3}% \endstrut}% \hbox prevents break \xdef\localheadheight {\the\strutht}% \xdef\localheaddepth {\the\strutdp}% \xdef\localheadlineheight{\the\lineheight}% % == \globallet\localheaddepth\strutdepth \else \ifcase\headtimingmode#2\fi \getvalue{\??ko#1\c!textcommand}% {\executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#3}}% \fi \getvalue{\??ko#1\c!commandafter}% \ifdisplaysectionhead\endgraf\fi \dostopattributes \dostopattributes}}% \fi \endheadplacement{#1}{#4}} \def\doplaceheadnumbertext#1#2#3#4#5% maybe move modes outside box {\beginheadplacement{#1}% \ifemptyhead % = needed \setbox0=\ifvertical\vbox\else\hbox\fi to \zeropoint {\doiftextelse{#3} {\setsystemmode \v!sectionnumber\headnumbercontenttrue } {\resetsystemmode\v!sectionnumber\headnumbercontentfalse}% #2}% \makestrutofbox0 \else % = needed \setbox0=\ifvertical\vbox\else\hbox\fi % \vhbox {\doiftextelse{#3} {\setsystemmode \v!sectionnumber\headnumbercontenttrue } {\resetsystemmode\v!sectionnumber\headnumbercontentfalse}% % less interfering \ifcase\headtimingmode\or#2\fi % outerside font determines distance \dosetfontattribute{\??ko#1}\c!style % but we don't want color to influence user commands \getvalue{\??ko#1\c!command}% {\dostartattributes{\??ko#1}\c!style\c!color\empty \dostartattributes{\??ko#1}\c!numberstyle\c!numbercolor\empty % \getvalue{\??ko#1\c!commandbefore}% strange, why here? moved 21/11/2005 \placeheadmargintexts{#1}% binnen #3? \ifdisplaysectionhead % can be nilled with \setnostrut \getvalue{\??ko#1\c!numbercommand}% {\setstrut \begstrut \executeifdefined{\??ko#1\c!deepnumbercommand}\firstofoneargument{#3}% \endstrut}% \else \getvalue{\??ko#1\c!numbercommand}% {\executeifdefined{\??ko#1\c!deepnumbercommand}\firstofoneargument{#3}}% \fi \dostopattributes \dostopattributes} {\dostartattributes{\??ko#1}\c!style\c!color\empty \dostartattributes{\??ko#1}\c!textstyle\c!textcolor\empty \dontconvertfont \ifdisplaysectionhead \setupinterlinespace \else \setupspacing \fi % \ifcase\headtimingmode#2\fi % can introduce cr \getvalue{\??ko#1\c!commandbefore}% makes more sense here \placeheadmargintexts{#1}% binnen #3? \ifdisplaysectionhead \getvalue{\??ko#1\c!textcommand}% struts can be nilled with \setnostrut {\setstrut \begstrut \ifcase\headtimingmode\hbox{#2}\fi \executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#4}% \endstrut}% \hbox prevents break \xdef\localheadheight {\the\strutht}% \xdef\localheaddepth {\the\strutdp}% \xdef\localheadlineheight{\the\lineheight}% % == \globallet\localheaddepth\strutdepth \else \ifcase\headtimingmode#2\fi % inside textcommand ? \getvalue{\??ko#1\c!textcommand}% {\executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#4}}% \fi \getvalue{\??ko#1\c!commandafter}% \ifdisplaysectionhead\endgraf\fi \dostopattributes \dostopattributes}}% \fi \endheadplacement{#1}{#5}} %D \starttyping %D \def\StretchedBox#1% %D {\framed %D [frame=off,offset=.5em,align=middle,width=broad] %D {\sc\def\stretchedspaceamount{.3em}\stretchednormalcase{#1}}} %D %D \definehead[MySubject][subject] %D \setuphead [MySubject][deeptextcommand=\StretchedBox] %D %D \MySubject{feeling stretched feeling stretched feeling stretched feeling stretched} %D \stoptyping \newsignal\headsignal \let\headlastlinewidth\!!zeropoint \def\beginheadplacement#1% {\bgroup \setsystemmode{#1}% to be documented \ifgridsnapping\iftracegridsnapping\showstruts\fi\fi \xdef\localheadheight {\the\strutht}% \xdef\localheaddepth {\the\strutdp}% \xdef\localheadlineheight{\the\lineheight}% % == \globallet\localheaddepth\strutdp \everypar\emptytoks % needed indeed \noindent % ipv \whitespace elders, na \forgetall ! \bgroup \doifinsetelse{\getvalue{\??ko#1\c!aligntitle}}{\v!yes,\v!float}% new {\skip0 1\leftskip \skip2 1\rightskip \xdef\localheadskip{\the\skip0}% \forgetall \leftskip\skip0 \rightskip\skip2 \setlocalhsize\hsize\localhsize \forgetbothskips} {\globallet\localheadskip\!!zeropoint \forgetall}% \dontcomplain \postponenotes \iflocation\ifdisplaysectionhead\else\noninterferingmarks\fi\fi \resetinteractionparameter\c!style \resetinteractionparameter\c!color \resetinteractionparameter\c!contrastcolor \strictouterreferencestrue % tzt instelling \def\localheadsetup{\dolocalheadsetup{#1}}% \startsynchronization} % \setuphead[chapter] [style=\bfd,after=,hang=line] % fit broad 2 % \setuphead[section] [style=\bfc,after=,hang=line] % \setuphead[subsection] [style=\bfb,after=,hang=line] % \setuphead[subsubsection] [style=\bfa,after=,hang=line] % \setuphead[subsubsubsection][style=\bf ,after=,hang=line] % % \chapter {Test} \input tufte \page % \section {Test} \input tufte \page % \subsection {Test} \input tufte \page % \subsubsection {Test} \input tufte \page % \subsubsubsection{Test} \input tufte \page % % \chapter {Test\\Test} \input tufte \page % \section {Test\\Test} \input tufte \page % \subsection {Test\\Test} \input tufte \page % \subsubsection {Test\\Test} \input tufte \page % \subsubsubsection{Test\\Test} \input tufte \page \def\hangheadplacement {\scratchdimen\localheadlineheight \bgroup \openlineheight\scratchdimen \scratchdimen\ht0 \advance\scratchdimen\dp0 \getnoflines\scratchdimen \advance\noflines\minusone \expanded{\egroup\noflines\the\noflines}% brrr \setbox0\hbox{\lower\noflines\scratchdimen\box0}% \scratchdimen\ht0 \advance\scratchdimen\dp0 \advance\scratchdimen-\localheadheight \advance\scratchdimen+\strutdp \ht0 \strutht \dp0 \strutdp \edef\localheaddepth{\the\strutdp}} \newconditional\continuoussectionhead % oeps, \newif\ifcontinuoushead got lost \def\endheadplacement#1#2% {\doifelsevalue{\??rf#1\c!state}\v!start {\doifvaluenothing{\??ko#1\c!file}{\autocrossdocumentfalse}} {\autocrossdocumentfalse}% % no message needed here, should be a proper switch \noflines\zerocount \ifdisplaysectionhead % new (tod tight == one following line up) \processaction [\getvalue{\??ko#1\c!hang}] [ \v!line=>\hangheadplacement\noflines\zerocount, \v!broad=>\hangheadplacement\getnoflines\scratchdimen, \v!fit=>\hangheadplacement\getrawnoflines\scratchdimen, \v!none=>\noflines\zerocount, \v!default=>\noflines\zerocount, \v!unknown=>\hangheadplacement\noflines0\commalistelement\advance\noflines\minusone]% % so far \let\headlastlinewidth\!!zeropoint \snaptogrid[\getvalue{\??ko#1\c!grid}]\hbox {\hskip\localheadskip \hskip\getvalue{\??ko#1\c!margin}\relax \iflocation \ifautocrossdocument \doifreferencefoundelse{\getvalue{\??ko#1\c!file}::#1} {\edef\currentinnerreference{\s!aut:\currenttextreference}% stored in \gotoouterlocation{}{\box0}} % text slot {\hbox{\box0}}% \else \hbox{\box0}% \fi \else \hbox{\box0}% \fi}% \doflushnotes % new, not really needed \endgraf \ifvmode \ifnum\noflines>\zerocount \dorecurse\noflines{\nointerlineskip\dosomebreak\nobreak\strut\endgraf}% \fi \nointerlineskip \dosomebreak\nobreak \fi #2% \else \strut \doflushnotes % new, here since we're in par mode \iflocation \ifautocrossdocument \hhboxindent=\ifconditional\continuoussectionhead\headlastlinewidth\else\zeropoint\fi \unhhbox0\with{\gotobox{\box\hhbox}[\getvalue{\??ko#1\c!file}::#1]}% \advance\lasthhboxwidth by \numberheaddistance \xdef\headlastlinewidth{\the\lasthhboxwidth}% \else \unhbox0 \globallet\headlastlinewidth\!!zeropoint \fi \else \unhbox0 \globallet\headlastlinewidth\!!zeropoint \fi #2% \dimen0=\numberheaddistance \hskip\dimen0 \!!plus \dimen0 \!!minus .25\dimen0 \hskip\headsignal\ignorespaces \fi \ifdisplaysectionhead \ifvmode \ifgridsnapping % important, font related depth, see comment \prevdepth\strutdp \else \prevdepth\localheaddepth \fi \fi \fi \stopsynchronization \egroup \egroup \ifdisplaysectionhead \dochecknextindentation{\??ko#1}% \else \nonoindentation % recently added, was a bug \fi} \def\checknexthead#1#2% nog optioneel {\ifhmode \scratchcounter=\lastpenalty\unpenalty % no beauty in this \ifdim\lastskip=\headsignal \handlenopagebreak{#1}% \global\settrue\continuoussectionhead \else \penalty\scratchcounter \global\setfalse\continuoussectionhead #1{#2}% \fi \else \global\setfalse\continuoussectionhead #1{#2}% \fi} \def\dosetupheadnumber[#1][#2#3]% todo: = (don't reset) {\bgroup \setsectieenkoppeling{#1}% \doifinstringelse{#2}{+-} {\doifelsenothing{#3} {\@@nextsectionnumber\@@sectie} {\!!counta=#2#3\relax \advance\!!counta \@@sectionvalue\@@sectie \@@setsectionnumber\@@sectie\!!counta}} {\@@setsectionnumber\@@sectie{#2#3}}% \egroup} \def\setupheadnumber {\dodoubleargument\dosetupheadnumber} \def\currentheadnumber{0} \def\determineheadnumber[#1]% {\bgroup \setsectieenkoppeling{#1}% \xdef\currentheadnumber{\@@sectionvalue{\@@sectie}}% \egroup} \def\complexheadnumber[#1]% {\bgroup \edef\currentheadnumber{#1}% \doifinsetelse{-}{#1} % br undocumented {\removefromcommalist{-}\currentheadnumber % br \setsectieenkoppeling\currentheadnumber \setupsection[\@@sectie][\c!previousnumber=\v!no]}% {\setsectieenkoppeling\currentheadnumber}% \xdef\currentheadnumber{\@@sectionvalue{\@@sectie}}% \doifnot{\currentheadnumber}{0}{\finalsectionnumber}% \egroup} \def\simpleheadnumber {\currentheadnumber} \definecomplexorsimple\headnumber \def\alinea {\par} % nice testcase % % \setupheads[aligntitle=yes] % % \startnarrower % \subject{\dorecurse{100}{x }} % \section{\dorecurse{100}{x }} % \input tufte \par % \setupheads[alternative=inmargin] % \subject{\dorecurse{100}{x }} % \section{\dorecurse{100}{x }} % \input tufte \par % \stopnarrower \let\numberheadalternative\v!normal \def\defineheadplacement {\dodoubleargument\dodefineheadplacement} \def\dodefineheadplacement[#1][#2]% #3#4 {\setvalue{\??ko:#1}{#2}% \setvalue{\??ko::#1}} \def\normalplacehead {\executeifdefined {\??ko::\numberheadalternative} {\getvalue{\??ko::\v!normal}}} \defineheadplacement[\v!paragraph][\v!vertical]#1#2% {\vbox {\localheadsetup \begstrut\ifheadnumbercontent#1\hskip\numberheaddistance\fi#2}} % \defineheadplacement[\v!normal][\v!vertical]#1#2% % {\ifheadnumbercontent % \setbox0\hbox{{#1}\hskip\numberheaddistance}% % \vbox % {\localheadsetup % \hangindent 1\wd0 % \hangafter 1 % \noindent % \unhbox0 % don't use \strut's here! % #2}% % \else % \vbox % {\localheadsetup\noindent#2}% % \fi} % % enhanced version: % \setuphead % [chapter] % [numberwidth=2cm,hang=line,after={\blank[3*line]}] % % \chapter{Oeps oeps oeps} \input tufte \section{Oeps} % \chapter{Oeps oeps oeps} \section{Oeps} \input tufte \defineheadplacement[\v!normal][\v!vertical]#1#2% {\vbox {\localheadsetup \edef\headwidth {\headparameter\c!width }% \edef\headnumberwidth{\headparameter\c!numberwidth}% \edef\headtextwidth {\headparameter\c!textwidth }% \ifheadnumbercontent \ifx\headwidth\empty \else \ifx\headnumberwidth\empty \ifx\headtextwidth\empty\else \edef\headnumberwidth{\the\dimexpr\headwidth-\headtextwidth\relax}% \fi \else \ifx\headtextwidth\empty \edef\headtextwidth{\the\dimexpr\headwidth-\headnumberwidth\relax}% \fi \fi \hsize\headwidth \fi \ifx\headnumberwidth\empty\else \let\numberheaddistance\!!zeropoint \fi \setbox\scratchbox\hbox \ifx\headnumberwidth\empty\else to \headnumberwidth\fi{{#1}}% \scratchdimen\dimexpr\wd\scratchbox+\numberheaddistance\relax \ifx\headtextwidth\empty\else \hsize\dimexpr\scratchdimen+\headparameter\c!textwidth\relax \fi \hangindent\scratchdimen \hangafter \plusone \noindent \box\scratchbox\hskip\numberheaddistance \else \ifx\headtextwidth\empty \ifx\headwidth\empty \else \hsize\headwidth \fi \else \hsize\headtextwidth \fi \noindent \fi #2}} \def\placeheadmargin#1#2% {\vbox {\localheadsetup \begstrut % use one \strut here! \dontleavehmode % in case there is no strut, else side effects with llap \ifheadnumbercontent \llap{\hbox to 5em{\hfill{#1}\hskip\localheadskip\hskip\leftmargindistance}}% introduces whitespace % maybe better: % \inleftmargin{\hbox{\hss{#1}\hskip\localheadskip}}% \fi {#2}}} \defineheadplacement[\v!inmargin][\v!vertical]#1#2{\placeheadmargin{#1}{#2}} \defineheadplacement[\v!margin] [\v!vertical]#1#2{\placeheadmargin{#1}{#2}} \defineheadplacement[\v!middle][\v!vertical]#1#2% {\vbox {\localheadsetup \veryraggedcenter \let\\\endgraf \let\crlf\endgraf \ifheadnumbercontent\strut#1\par\fi\begstrut#2}} \defineheadplacement[\v!text][\v!horizontal]#1#2% {\bgroup \localheadsetup % no stretch in distance \ifheadnumbercontent{#1}\kern\numberheaddistance\fi{\begstrut#2}% \egroup} \def\placeheadlohi#1#2#3% {\ifheadnumbercontent \setbox0\hbox{#2} \setbox2=#1{\localheadsetup\advance\hsize-\wd0\relax#3}% \hbox{\box0\hskip\numberheaddistance\box2}% \else #1{\localheadsetup\noindent#3}% \fi} % onder/boven lijnt het nummer op de onderste/bovenste regel % uit van een meerregelige kop \defineheadplacement[\v!bottom][\v!vertical]#1#2{\placeheadlohi\vbox{#1}{#2}} \defineheadplacement[\v!top] [\v!vertical]#1#2{\placeheadlohi\vtop{#1}{#2}} % default == instellingen % koppeling == koppen, breaks, marks, enz. % sectie == nummering \let\@@kolist=\empty \def\dododefinehead#1#2% % don't preset prefix to much {\presetlabeltext[#1=]% \getparameters [\??ko#1] [\c!numberstyle=\getvalue{\??ko#1\c!style}, \c!textstyle=\getvalue{\??ko#1\c!style}, \c!numbercolor=\getvalue{\??ko#1\c!color}, \c!textcolor=\getvalue{\??ko#1\c!color}]% % deeptextcommand and deepnumbercommand are left undefined ! \doifassignmentelse{#2} {\getparameters [\??ko#1] [\c!section=\getvalue{\??ko\getvalue{\??ko#1\c!coupling}\c!section}, \c!default=, \c!coupling=, \c!prefix=, \c!before=, \c!after=, \c!distance=\!!zeropoint, \c!page=, \c!header=, \c!text=, \c!footer=, \c!style=, \c!numbercommand=, \c!textcommand=, \c!ownnumber=\v!no, \c!number=\v!yes, \c!color=, \c!continue=\v!yes, \c!placehead=\v!yes, \c!resetnumber=\v!yes, \c!incrementnumber=\v!yes, \c!alternative=\@@koalternative, \c!command=\normalplacehead, \c!separator=\@@koseparator, \c!stopper=\@@kostopper, \c!align=\@@koalign, \c!aligntitle=\@@koaligntitle, \c!tolerance=\@@kotolerance, \c!indentnext=\@@koindentnext, \c!strut=\@@kostrut, \c!hang=\@@kohang, \c!file=, \c!expansion=, \c!grid=, \c!margintext=, \c!margin=\@@komargin, #2]% \ConvertToConstant\doifnot{#1}{\getvalue{\??ko#1\c!default}} {\doifsomething{\getvalue{\??ko#1\c!default}} {\copyparameters [\??ko#1][\??ko\getvalue{\??ko#1\c!default}] [\c!before,\c!after,\c!command,\c!file,\c!page,\c!continue, \c!header,\c!text,\c!footer,\c!separator,\c!stopper,\c!resetnumber, \c!number,\c!ownnumber,\c!placehead,\c!incrementnumber, \c!style,\c!color,\c!distance,\c!alternative,\c!indentnext, % new per 20/03/3002 (o-pbu-l) / was too confusing % \c!numberstyle,\c!textstyle,\c!expansion, % again too confusing \c!align,\c!aligntitle,\c!tolerance,\c!grid,\c!hang,\c!strut, \c!numbercommand,\c!textcommand,\c!margintext,\c!margin]}}% \getparameters[\??ko#1][#2]% \doifsomething{\getvalue{\??ko#1\c!section}} {\doifelsemarking{#1}% \doifundefined{\??mk#1} {}% marking #1 already defined {\definemarking[#1]% \couplemarking[#1][\getvalue{\??ko#1\c!section}]% \definemarking[#1\v!number]% \couplemarking[#1\v!number][\getvalue{\??ko#1\c!section}]}}% \doifundefined{\??li#1}{\definelist[#1]}} {\ConvertToConstant\doifelse{#1}{#2} {\doifundefined{\??li#1}{\definelist[#1]}} {\copyparameters [\??ko#1][\??ko#2] [\c!level,\c!section,\c!coupling,\c!prefix, \c!before,\c!after,\c!command,\c!file,\c!page,\c!continue, \c!separator,\c!stopper, \c!header,\c!text,\c!footer,\c!resetnumber, \c!number,\c!ownnumber,\c!placehead,\c!incrementnumber, \c!style,\c!color,\c!distance,\c!alternative,\c!indentnext, % new per 20/03/3002 (o-pbu-l) / was too confusing % \c!numberstyle,\c!textstyle,\c!expansion, % again too confusing \c!align,\c!aligntitle,\c!tolerance,\c!grid,\c!hang,\c!strut, \c!numbercommand,\c!textcommand,\c!margintext,\c!margin]% \getparameters[\??ko#1][\c!expansion=]% iig een value, rather fuzzy \definemarking[#1][#2]% \definemarking[#1\v!number][#2\v!number]% \doifundefined{\??li#1}{\definelist[#1][#2]}}}% \addtocommalist{#1}\@@kolist \setevalue{\??sk#1}{\getvalue{\??ko#1\c!coupling}}% \setevalue{\??by#1}{\getvalue{\??ko#1\c!section}}% \setevalue{\??by\v!by#1}{\getvalue{\??ko#1\c!section}}% \setvalue{#1}{\dodoubleempty\doconstructhead[#1]}} \def\dodefinehead[#1][#2]% {\doifelsenothing{#2} {% todo: message that it's an invalid definition \setvalue{#1}{\endgraf[#1]\kern.5em}} {\doifassignmentelse{#2} {\dododefinehead{#1}{#2}} {\doifdefined{\??ko#2\c!section} {\dododefinehead{#1}{#2}}}}} \def\definehead {\dodoubleemptywithset\dodefinehead} \def\doconstructhead[#1][#2]% {\dowithpargument{\dodoconstructhead{#1}[#2]}} \def\dosetuphead[#1][#2]% {\getparameters[\??ko#1][#2]% % The next check prevents hard to trace problems. I once % set \c!command to nothing and (quite natural) got the % wrong references etc. The whole bunch should be boxed! \expandafter\defconvertedcommand\expandafter\ascii\csname\??ko#1\c!command\endcsname \doifnothing\ascii{\setvalue{\??ko#1\c!command}{\normalplacehead}}} \def\setuphead {\dodoubleargumentwithset\dosetuphead} \def\dosetupheads[#1]% {\getparameters[\??ko][#1]% \doifelse{\@@kosectionnumber}\v!yes\sectionnumbertrue\sectionnumberfalse} \def\setupheads {\dosingleargument\dosetupheads} \def\systemsuppliedchapter {\getvalue{\v!chapter}} \def\systemsuppliedtitle {\getvalue{\v!title}} % a left over \def\complexbijlage[#1]#2% {\page[\v!right] \setuppagenumbering[\c!state=\v!stop] \systemsuppliedchapter[#1]{#2} \page[\v!right] \setuppagenumbering[\c!state=\v!start] \setuppagenumbering[\c!number=1]} \setvalue{\v!appendix}% {\complexorsimpleempty\bijlage} \setupheads [\c!alternative=\v!normal, \c!sectionnumber=\v!yes, \c!separator=., \c!stopper=, \c!limittext=\v!yes, \c!align=, \c!aligntitle=, \c!tolerance=, \c!strut=, \c!indentnext=\v!no, \c!margin=\zeropoint, \c!hang=\v!none, \c!command=] \definesectionblock [\v!frontpart] [\v!frontmatter] [\c!number=\v!no] \definesectionblock [\v!bodypart] [\v!bodymatter] [\c!number=\v!yes] \definesectionblock [\v!appendix] [\v!appendices] [\c!number=\v!yes] \definesectionblock [\v!backpart] [\v!backmatter] [\c!number=\v!no] \definesection[\s!section-1] % part \definesection[\s!section-2] % chapter \definesection[\s!section-3] % section \definesection[\s!section-4] % subsection \definesection[\s!section-5] % subsubsection \definesection[\s!section-6] % subsubsubsection \definesection[\s!section-7] % subsubsubsubsection % \c!eigennummer ook hier? \definehead [\v!part] [\c!section=\s!section-1, \c!ownnumber=\v!no] \definehead [\v!chapter] [\c!section=\s!section-2, \c!ownnumber=\v!no] \definehead [\v!section] [\c!section=\s!section-3, \c!ownnumber=\v!no] \definehead [\v!subsection] [\c!section=\s!section-4, \c!default=\v!section, \c!ownnumber=\v!no] \definehead [\v!subsubsection] [\c!section=\s!section-5, \c!default=\v!subsection, \c!ownnumber=\v!no] \definehead [\v!subsubsubsection] [\c!section=\s!section-6, \c!default=\v!subsubsection, \c!ownnumber=\v!no] \definehead [\v!subsubsubsubsection] [\c!section=\s!section-7, \c!default=\v!subsubsubsection, \c!ownnumber=\v!no] \definehead [\v!title] [\c!coupling=\v!chapter, \c!default=\v!chapter, \c!incrementnumber=\v!no] \definehead [\v!subject] [\c!coupling=\v!section, \c!default=\v!section, \c!incrementnumber=\v!no] \definehead [\v!subsubject] [\c!coupling=\v!subsection, \c!default=\v!subsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubject] [\c!coupling=\v!subsubsection, \c!default=\v!subsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubject] [\c!coupling=\v!subsubsubsection, \c!default=\v!subsubsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubsubject] [\c!coupling=\v!subsubsubsubsection, \c!default=\v!subsubsubsubsection, \c!incrementnumber=\v!no] \setupsection [\s!section-2] [\v!appendix\c!conversion=\v!Character, \c!previousnumber=\v!no] \setuphead [\v!part] [\c!placehead=\v!no] \setuphead [\v!chapter] [\v!appendix\c!label=\v!appendix, \v!bodypart\c!label=\v!chapter] % bijlageconversie=\Character \setuphead [\v!section] [\v!appendix\c!label=\v!section, \v!bodypart\c!label=\v!section] % bijlageconversie=\Character \setuphead [\v!subsection] [\v!appendix\c!label=\v!subsection, \v!bodypart\c!label=\v!subsection] % bijlageconversie=\Character \setuphead [\v!subsubsection] [\v!appendix\c!label=\v!subsubsection, \v!bodypart\c!label=\v!subsubsection] % bijlageconversie=\Character \setuphead [\v!part,\v!chapter] [%\c!align=, %\c!indentnext=\v!no, \c!continue=\v!no, \c!page=\v!right, \c!header=, \c!style=\tfc, \c!distance=.75em, \c!before={\blank[2*\v!big]}, \c!after={\blank[2*\v!big]}] \setuphead [\v!section] [%\c!align=, %\c!indentnext=\v!no, \c!style=\tfa, \c!distance=.75em, \c!before={\blank[2*\v!big]}, \c!after=\blank] \setuphead % nieuw [\v!subsection] [\c!page=] \definecombinedlist [\v!content] [\v!part, \v!chapter, \v!section, \v!subsection, \v!subsubsection, \v!subsubsubsection, \v!subsubsubsubsection] [\c!level=\v!subsubsubsubsection, \c!criterium=\v!local] \setuplist [\v!part] [\c!before={\blank\page[\v!preference]}, \c!after=\blank, \c!label=\v!yes, \c!separator=:, \c!distance=1em] \setuplist [\v!chapter] [\c!before={\blank\page[\v!preference]}, \c!after=] \setuplist [\v!part] [\c!width=0em] \setuplist [\v!chapter] [\c!width=2em] \setuplist [\v!section] [\c!width=3em] \setuplist [\v!subsection] [\c!width=4em] \setuplist [\v!subsubsection] [\c!width=5em] \setuplist [\v!subsubsubsection] [\c!width=6em] \setuplist [\v!subsubsubsubsection] [\c!width=7em] % hm \setuppagenumbering % na instellen hoofdteksten ! [\c!alternative=\v!singlesided, \c!location={\v!header,\v!middle}, \c!conversion=\v!numbers, \c!width=, % in geval van \v!marginedge \c!left=, \c!right=, \c!way=\v!by\v!part, \c!text=, \v!chapter\v!number=\v!no, % v \v!part\v!number=\v!yes, % v \c!numberseparator=--, \c!textseparator=\tfskip, \c!state=\v!start, \c!command=, \c!strut=\v!yes, % nieuw \c!style=, % \v!normal, % empty, otherwise conflict \c!color=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-xtx.mkii0000644000175000017500000005403411754241457024366 0ustar norbertnorbert%D \module %D [ file=type-xtx, %D version=2004.11.15, % prereleased earlier %D title=\CONTEXT\ Typescript Macros, %D subtitle=\XETEX's font treasures, %D author=Adam T. Lindsay, %D date=\currentdate, %D copyright={Adam Lindsay \& Hans Hagen}] %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 Here are some fonts definitions that can get you started with %D \XETEX\ (for more details see Adam's MyWay documents). %D %D Most typescripts in this file are mostly independent of the other %D typescript files. Generally, you can speed things up a lot by %D eliminating all but one of \CONTEXT's typescript files: %D %D \starttyping %D \usetypescriptfiles[reset] % HH: watch out, new feature, since %D \usetypescriptfiles[type-siz] % I disliked the low level redef. %D \stoptyping %D %D The exceptions are the \quotation {legacy} fonts Times, Palatino, %D Courier, and Helvetica, which also depend on \type {type-syn}. %D %D These following six typescripts call the basic four variants on any %D given font, given the name of the \quotation {Regular} variant in the %D name slot. These typescripts default to a Unicode encoding, %D accepts sizes \quotation {default} and \quotation {dtp}, and are %D activated with the identifiers \quotation {Xserif}, \quotation {Xsans}, %D and \quotation {Xmono}. They can have relative scaling within the %D typeface. Any of the following work: %D %D \starttyping %D \definetypeface[basic][rm][Xserif][Baskerville] %D \definetypeface[basic][ss][Xsans] [Optima Regular][default][features=default,rscale=0.87] %D \definetypeface[basic][tt][Xmono] [Courier] [default] %D \stoptyping %D %D Activate the typeface with: %D %D \starttyping %D \setupbodyfont[basic] %D \stoptyping %D This file is hacked by Taco Hoekwater in an attempt to figure out the right approach %D to font loading in \XeTeX. (jun19,2007) %D The General \XeTeX\ low-level font syntax is (at least) as follows. %D %D Named font: %D \starttyping %D \font\x = ":" %D \stoptyping %D \type{} = Font name as seen in a system font menu or the output of fc-list %D %D \type{} = \type{/B} or \type{/I} or \tupe{/BI}, and||or \type{/S=}. %D That last one selects an optical scaled variant for size \type{} %D (it is a bare number, the unit is points). %D %D \type{} = comma- or semicolon- separated list of font features. %D %D Opentype features are selected using \type{+}, and deselected using \type{-}, %D except that key||value pairs are used for \type{script=} and \type{language=} %D %D AAT features are always key||value pairs, often including spaces. %D %D \XETEX's own features are key||value pairs, and can be applied to both OpenType %D and AAT fonts: %D \type{mapping=} for glyph remapping %D \type{color=RRGGBB[TT]} for color (hex numbers, with optional transparancy), %D \type{letterspace=} to add \type{/} intercharacter spacing. %D %D Full example showing all parts of the syntax for an OTF font: %D \starttyping %D \font\f= "Warnock Pro/I/S=5:+smcp,-liga,mapping=tex-text,script=latn" %D \stoptyping %D Non-installed (filename-based) fonts : %D %D \starttyping %D \font\x = "[]:" %D \stoptyping %D %D Here, there are no \type{}, because there is no %D font discovery engine available to be queried. %D TH: This \type{\xetexcolon} definition seems needed because the name/file \ %D parser otherwise drops the rest of the argument into oblivion. \unexpanded\def\xetexcolon{:} \starttypescriptcollection[xetex] \starttypescript[Xserif][all][name] %D TH: I removed all single quotes because they don't seem to add anything. And I added %D the \type{name:} everywhere, because passing that information on \type{\typescripttwo} %D doesn't work either (maybe \type{\typescripttwo} is expanded incorrectly) %D %D And even if that would have worked, \type{file:} will not work properly anyway %D in this case since tricks like \type{/I} will never, ever work for local fonts, %D so there is really only one choice. %D HH: todo, define feature set switch mapping=tex-tex \definefontsynonym[Dummy] [name:\typescripttwo] [features=default] \definefontsynonym[DummyItalic] [name:\typescripttwo/I] [features=default] \definefontsynonym[DummyBold] [name:\typescripttwo/B] [features=default] \definefontsynonym[DummyBoldItalic][name:\typescripttwo/BI][features=default] \definefontsynonym[DummyCaps] [name:\typescripttwo] [features=smallcaps] \definefontsynonym[Serif] [Dummy] \definefontsynonym[SerifBold] [DummyBold] \definefontsynonym[SerifItalic] [DummyItalic] \definefontsynonym[SerifBoldItalic] [DummyBoldItalic] \definefontsynonym[SerifSlanted] [DummyItalic] \definefontsynonym[SerifBoldSlanted][DummyBoldItalic] \definefontsynonym[SerifCaps] [DummyCaps] \stoptypescript \starttypescript[Xsans][all][name] \definefontsynonym[DummySans] [name:\typescripttwo] [features=default] \definefontsynonym[DummySansItalic] [name:\typescripttwo/I] [features=default] \definefontsynonym[DummySansBold] [name:\typescripttwo/B] [features=default] \definefontsynonym[DummySansBoldItalic][name:\typescripttwo/BI][features=default] \definefontsynonym[DummySansCaps] [name:\typescripttwo] [features=smallcaps] \definefontsynonym[Sans] [DummySans] \definefontsynonym[SansBold] [DummySansBold] \definefontsynonym[SansItalic] [DummySansItalic] \definefontsynonym[SansBoldItalic] [DummySansBoldItalic] \definefontsynonym[SansSlanted] [DummySansItalic] \definefontsynonym[SansBoldSlanted][DummySansBoldItalic] \definefontsynonym[SansCaps] [DummySansCaps] \stoptypescript \starttypescript[Xmono][all][name] \definefontsynonym[DummyMono] [name:\typescripttwo] \definefontsynonym[DummyMonoItalic] [name:\typescripttwo/I] \definefontsynonym[DummyMonoBold] [name:\typescripttwo/B] \definefontsynonym[DummyMonoBoldItalic][name:\typescripttwo/BI] % TODO: smallcaps without other features \definefontsynonym[Mono] [DummyMono] \definefontsynonym[MonoBold] [DummyMonoBold] \definefontsynonym[MonoItalic] [DummyMonoItalic] \definefontsynonym[MonoBoldItalic] [DummyMonoBoldItalic] \definefontsynonym[MonoSlanted] [DummyMonoItalic] \definefontsynonym[MonoBoldSlanted][DummyMonoBoldItalic] \definefontsynonym[MonoCaps] [DummyMono] \stoptypescript \starttypescript[Xserif][default][size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [rm] [default] \stoptypescript \starttypescript[Xsans][default][size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [ss] [default] \stoptypescript \starttypescript [Xmono][default][size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [tt] [default] \stoptypescript \starttypescript[Xserif][dtp][size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [rm] [default] \stoptypescript \starttypescript[Xsans][dtp][size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [ss] [default] \stoptypescript \starttypescript[Xmono][dtp][size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [tt] [default] \stoptypescript %D The following are \quotation {legacy} named fonts. Times, Palatino, %D and Helvetica are familiar to most users of modern \TEX\ %D systems. These versions are accessed via the Unicode encoding %D enabled by \XETEX. There is no attempt to match metrics with %D the actual legacy fonts. These are simply familiar names. %D These typescripts, unlike others in this file, depend on those in %D \type{type-pre}. \starttypescript[serif][times][uc] \definefontsynonym[Times-Roman] [name:Times Roman] [features=default] \definefontsynonym[Times-Italic] [name:Times Italic] [features=default] \definefontsynonym[Times-Bold] [name:Times Bold] [features=default] \definefontsynonym[Times-BoldItalic][name:Times Bold Italic][features=default] \stoptypescript %D Book Antiqua is Mac OS X's Palatino clone. \starttypescript[serif][palatino][uc] \definefontsynonym[Palatino] [name:Book Antiqua] [features=default] \definefontsynonym[Palatino-Italic] [name:Book Antiqua Italic] [features=default] \definefontsynonym[Palatino-Bold] [name:Book Antiqua Bold] [features=default] \definefontsynonym[Palatino-BoldItalic] [name:Book Antiqua Bold Italic][features=default] \definefontsynonym[Palatino-Slanted] [Palatino-Italic] \definefontsynonym[Palatino-BoldSlanted] [Palatino-BoldItalic] \definefontsynonym[Palatino-Caps] [Palatino] \stoptypescript %D The default Helvetica doesn't have an oblique variant, so we'll %D go ahead and name Helvertica Neue here. \starttypescript[sans][helvetica][uc] \definefontsynonym[Helvetica] [name:Helvetica Neue] [features=default] \definefontsynonym[Helvetica-Oblique] [name:Helvetica Neue Italic] [features=default] \definefontsynonym[Helvetica-Bold] [name:Helvetica Neue Bold] [features=default] \definefontsynonym[Helvetica-BoldOblique][name:Helvetica Neue Bold Italic][features=default] \stoptypescript %D Courier, as delivered on MacOSX 10.3, doesn't have an oblique %D variant, either. Unfortunately, none of the default Mono fonts in %D MacOSX have oblique|/|italic versions! \starttypescript[mono][courier][uc] \definefontsynonym[Courier] [name:Courier] \definefontsynonym[Courier-Oblique] [Courier] \definefontsynonym[Courier-Bold] [name:Courier Bold] \definefontsynonym[Courier-BoldOblique][Courier-Bold] \stoptypescript %D The following fonts go beyond the usual four variants that %D are accessible via the above wildcard typescripts, so they %D get a more expanded treatment here\xetexcolon \starttypescript[serif][hoefler][uc] \definefontsynonym[Hoefler] [name:Hoefler Text\xetexcolon mapping=tex-text;% Ligatures=Diphthongs] [encoding=uc] \definefontsynonym[HoeflerItalic][name:Hoefler Text Italic\xetexcolon mapping=tex-text;% Ligatures=Diphthongs] [encoding=uc] \definefontsynonym[HoeflerBlack] [name:Hoefler Text Black\xetexcolon mapping=tex-text;% Ligatures=Diphthongs] [encoding=uc] \definefontsynonym[HoeflerBlackItalic][name:Hoefler Text Black Italic\xetexcolon mapping=tex-text;% Ligatures=Diphthongs] [encoding=uc] \definefontsynonym[HoeflerSmCap] [name:Hoefler Text\xetexcolon mapping=tex-text;% Ligatures=Diphthongs;% Letter Case=Small Caps][encoding=uc] \stoptypescript \starttypescript[serif][hoefler][name] \definefontsynonym[Serif] [Hoefler] \definefontsynonym[SerifBold] [HoeflerBlack] \definefontsynonym[SerifItalic] [HoeflerItalic] \definefontsynonym[SerifBoldItalic] [HoeflerBlackItalic] \definefontsynonym[SerifSlanted] [HoeflerItalic] \definefontsynonym[SerifBoldSlanted][HoeflerBlackItalic] \definefontsynonym[SerifCaps] [HoeflerSmCap] \stoptypescript \starttypescript[sans][lucidagrande][uc] \definefontsynonym[LucidaGrande] [name:Lucida Grande] [features=default] \definefontsynonym[LucidaGrandeBold][name:Lucida Grande Bold][features=default] \stoptypescript \starttypescript[sans][lucidagrande][name] \definefontsynonym[Sans] [LucidaGrande] \definefontsynonym[SansBold] [LucidaGrandeBold] \definefontsynonym[SansItalic] [LucidaGrande] \definefontsynonym[SansBoldItalic] [LucidaGrandeBold] \definefontsynonym[SansSlanted] [LucidaGrande] \definefontsynonym[SansBoldSlanted][LucidaGrandeBold] \definefontsynonym[SansCaps] [LucidaGrande] \stoptypescript \starttypescript[sans][optima][uc] \definefontsynonym[Optima] [name:Optima Regular] [features=default] \definefontsynonym[OptimaItalic] [name:Optima Italic] [features=default] \definefontsynonym[OptimaBold] [name:Optima Bold] [features=default] \definefontsynonym[OptimaBoldItalic][name:Optima Bold Italic][features=default] \definefontsynonym[OptimaBlack] [name:Optima ExtraBlack] [features=default] \stoptypescript \starttypescript[sans][optima][name] \definefontsynonym[Sans] [Optima] \definefontsynonym[SansBold] [OptimaBold] \definefontsynonym[SansItalic] [OptimaItalic] \definefontsynonym[SansBoldItalic] [OptimaBoldItalic] \definefontsynonym[SansSlanted] [OptimaItalic] \definefontsynonym[SansBoldSlanted][OptimaBoldItalic] \definefontsynonym[SansCaps] [Optima] \stoptypescript \starttypescript[sans][gillsans,gillsanslt][uc] \definefontsynonym[GillSans] [name:Gill Sans] [features=default] \definefontsynonym[GillSansItalic] [name:Gill Sans Italic] [features=default] \definefontsynonym[GillSansBold] [name:Gill Sans Bold] [features=default] \definefontsynonym[GillSansBoldItalic] [name:Gill Sans Bold Italic] [features=default] \definefontsynonym[GillSansLight] [name:Gill Sans Light] [features=default] \definefontsynonym[GillSansLightItalic][name:Gill Sans Light Italic][features=default] \stoptypescript \starttypescript[sans][gillsans][name] \definefontsynonym[Sans] [GillSans] \definefontsynonym[SansBold] [GillSansBold] \definefontsynonym[SansItalic] [GillSansItalic] \definefontsynonym[SansBoldItalic] [GillSansBoldItalic] \definefontsynonym[SansSlanted] [GillSansItalic] \definefontsynonym[SansBoldSlanted][GillSansBoldItalic] \definefontsynonym[SansCaps] [GillSans] \stoptypescript \starttypescript[sans][gillsanslt][name] \definefontsynonym[Sans] [GillSansLight] \definefontsynonym[SansBold] [GillSans] \definefontsynonym[SansItalic] [GillSansLightItalic] \definefontsynonym[SansBoldItalic] [GillSansItalic] \definefontsynonym[SansSlanted] [GillSansLightItalic] \definefontsynonym[SansBoldSlanted][GillSansItalic] \definefontsynonym[SansCaps] [GillSansLight] \stoptypescript \starttypescript[serif,handwriting][zapfino][uc] \definefontsynonym[ZapfinoOne] [name:Zapfino\xetexcolon mapping=tex-text] [encoding=uc] \definefontsynonym[ZapfinoTwo] [name:Zapfino\xetexcolon mapping=tex-text;% Stylistic Variants=First variant glyph set] [encoding=uc] \definefontsynonym[ZapfinoThree][name:Zapfino\xetexcolon mapping=tex-text;% Stylistic Variants=Second variant glyph set][encoding=uc] \definefontsynonym[ZapfinoFour] [name:Zapfino\xetexcolon mapping=tex-text;% Stylistic Variants=Third variant glyph set] [encoding=uc] \stoptypescript \starttypescript[handwriting][zapfino][name] \definefontsynonym[Handwriting][ZapfinoOne] \stoptypescript \starttypescript[serif][zapfino][name] \definefontsynonym[Serif] [ZapfinoOne] \definefontsynonym[SerifBold] [ZapfinoThree] \definefontsynonym[SerifItalic] [ZapfinoTwo] \definefontsynonym[SerifBoldItalic] [ZapfinoTwo] \definefontsynonym[SerifSlanted] [ZapfinoThree] \definefontsynonym[SerifBoldSlanted][ZapfinoThree] \definefontsynonym[SerifCaps] [ZapfinoOne] \stoptypescript \starttypescript[serif,calligraphy][applechancery][uc] \definefontsynonym[AppleChanceryOne] [name:Apple Chancery\xetexcolon mapping=tex-text;% Number Case=Old Styles] [encoding=uc] \definefontsynonym[AppleChanceryTwo] [name:Apple Chancery\xetexcolon mapping=tex-text;% Number Case=Old Styles;% Design Complexity=Elegant Design Level][encoding=uc] \definefontsynonym[AppleChanceryThree] [name:Apple Chancery\xetexcolon mapping=tex-text;% Number Case=Old Styles;% Design Complexity=Flourishes Set A] [encoding=uc] \definefontsynonym[AppleChanceryFour] [name:Apple Chancery\xetexcolon mapping=tex-text;% Number Case=Old Styles;% Design Complexity=Flourishes Set B] [encoding=uc] \definefontsynonym[AppleChanceryCaps] [name:Apple Chancery\xetexcolon mapping=tex-text;% Number Case=Old Styles;% Letter Case=Small Caps] [encoding=uc] \definefontsynonym[AppleChanceryCapsTwo][name:Apple Chancery\xetexcolon mapping=tex-text;% Number Case=Old Styles;% Letter Case=Small Caps;% Design Complexity=Flourishes Set B] [encoding=uc] \stoptypescript \starttypescript[calligraphy][applechancery][name] \definefontsynonym[Calligraphy][AppleChanceryOne] \stoptypescript \starttypescript[serif][applechancery][name] \definefontsynonym[Serif] [AppleChanceryOne] \definefontsynonym[SerifBold] [AppleChanceryThree] \definefontsynonym[SerifItalic] [AppleChanceryTwo] \definefontsynonym[SerifBoldItalic] [AppleChanceryFour] \definefontsynonym[SerifSlanted] [AppleChanceryThree] \definefontsynonym[SerifBoldSlanted][AppleChanceryFour] \definefontsynonym[SerifCaps] [AppleChanceryCaps] \stoptypescript % MS Office 2004 for Mac has impressive Unicode coverage in % many of its fonts. \starttypescript[serif][timesnewroman][uc] \definefontsynonym[MSTimes] [name:Times New Roman] [features=default] \definefontsynonym[MSTimesItalic] [name:Times New Roman Italic] [features=default] \definefontsynonym[MSTimesBold] [name:Times New Roman Bold] [features=default] \definefontsynonym[MSTimesBoldItalic][name:Times New Roman Bold Italic][features=default] \stoptypescript \starttypescript[serif][timesnewroman][name] \definefontsynonym[Serif] [MSTimes] \definefontsynonym[SerifBold] [MSTimesBold] \definefontsynonym[SerifItalic] [MSTimesItalic] \definefontsynonym[SerifBoldItalic] [MSTimesBoldItalic] \definefontsynonym[SerifSlanted] [MSTimesItalic] \definefontsynonym[SerifBoldSlanted][MSTimesBoldItalic] \definefontsynonym[SerifCaps] [MSTimes] \stoptypescript \starttypescript[sans][arial][uc] \definefontsynonym[Arial] [name:Arial] [features=default] \definefontsynonym[ArialItalic] [name:Arial Italic] [features=default] \definefontsynonym[ArialBold] [name:Arial Bold] [features=default] \definefontsynonym[ArialBoldItalic][name:Arial Bold Italic][features=default] \stoptypescript \starttypescript[sans][arial][name] \definefontsynonym[Sans] [Arial] \definefontsynonym[SansBold] [ArialBold] \definefontsynonym[SansItalic] [ArialItalic] \definefontsynonym[SansBoldItalic] [ArialBoldItalic] \definefontsynonym[SansSlanted] [ArialItalic] \definefontsynonym[SansBoldSlanted][ArialBoldItalic] \definefontsynonym[SansCaps] [Arial] \stoptypescript %D MS Office comes with an installation of the Lucida family in %D TrueType form. It's nice, except\dots\ no math, no slanted, no caps %D and some other auxiliary fonts. \starttypescript [serif] [lucida] [uc] \definefontsynonym [LucidaBright] [name:Lucida Bright] [features=default] \definefontsynonym [LucidaBright-Demi] [name:Lucida Bright Demibold][features=default] \definefontsynonym [LucidaBright-DemiItalic] [name:Lucida Bright Demibold][features=default] \definefontsynonym [LucidaBright-Italic] [name:Lucida Bright] [features=default] \definefontsynonym [LucidaBrightSmallcaps] [LucidaBright] \definefontsynonym [LucidaBrightSmallcaps-Demi][LucidaBright-Demi] \definefontsynonym [LucidaBright-Oblique] [LucidaBright-Italic] \stoptypescript \starttypescript [sans] [lucida] [uc] \definefontsynonym [LucidaSans] [name:Lucida Sans Regular] [features=default] \definefontsynonym [LucidaSans-Demi] [name:Lucida Sans Demibold Roman] [features=default] \definefontsynonym [LucidaSans-DemiItalic][name:Lucida Sans Demibold Italic][features=default] \definefontsynonym [LucidaSans-Italic] [name:Lucida Sans Italic] [features=default] \definefontsynonym [LucidaSans-Bold] [LucidaSans-Demi] \definefontsynonym [LucidaSans-BoldItalic][LucidaSans-DemiItalic] \stoptypescript \starttypescript [mono] [lucida] [uc] \definefontsynonym [LucidaSans-Typewriter] [name:Lucida Sans Typewriter Regular] [encoding=uc] \definefontsynonym [LucidaSans-TypewriterBold] [name:Lucida Sans Typewriter Bold] [encoding=uc] \definefontsynonym [LucidaSans-TypewriterBoldOblique][name:Lucida Sans Typewriter Bold Oblique][encoding=uc] \definefontsynonym [LucidaSans-TypewriterOblique] [name:Lucida Sans Typewriter Oblique] [encoding=uc] \stoptypescript \starttypescript [calligraphy] [lucida] [uc] \definefontsynonym[LucidaCalligraphy-Italic][name:Lucida Calligraphy Italic][features=default] \stoptypescript % No casual that I know of \starttypescript[handwriting][lucida][uc] \definefontsynonym[LucidaHandwriting-Italic][name:Lucida Handwriting Italic][features=default] \stoptypescript \starttypescript[fax][lucida][uc] \definefontsynonym[LucidaFax] [name:Lucida Fax Regular] [features=default] \definefontsynonym[LucidaFax-Demi] [name:Lucida Fax Demibold] [features=default] \definefontsynonym[LucidaFax-DemiItalic][name:Lucida Fax Demibold Italic][features=default] \definefontsynonym[LucidaFax-Italic] [name:Lucida Fax Italic] [features=default] \stoptypescript %D Gentium is from SIL, the fine makers of \XETEX, and it's not only %D very complete with Roman and Italic Unicode support, but very %D attractive. \starttypescript[serif][gentium][uc] \definefontsynonym[Gentium] [name:Gentium] [features=default] \definefontsynonym[GentiumItalic][name:Gentium Italic][features=default] \stoptypescript \starttypescript[serif][gentium][name] \definefontsynonym[Serif] [Gentium] \definefontsynonym[SerifBold] [Gentium] \definefontsynonym[SerifItalic] [GentiumItalic] \definefontsynonym[SerifBoldItalic] [GentiumItalic] \definefontsynonym[SerifSlanted] [GentiumItalic] \definefontsynonym[SerifBoldSlanted][GentiumItalic] \definefontsynonym[SerifCaps] [Gentium] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-93.tex0000644000175000017500000001416711754241457023715 0ustar norbertnorbert%D \module %D [ file=s-pre-20, %D version=2000.08.07, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 20, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setupbodyfont [lbr,14.4pt] \setuppapersize [S6][S6] \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] \setupcolors [state=start] \setupinteraction [state=start, click=no, display=new, color=LineColor, contrastcolor=LineColor] \setupinteractionscreen [option=max] \setupsystem [random=big] % once per hour \startreusableMPgraphic{page} StartPage ; filldraw Page withcolor \MPcolor{PageColor} ; pickup pencircle scaled (.25cm+uniformdeviate.25cm) ; for i=1 upto 200 : drawdot (uniformdeviate PaperWidth,uniformdeviate PaperHeight) withcolor \MPcolor {LineColor} ; endfor ; StopPage ; \stopreusableMPgraphic \startuseMPgraphic{idea} StartPage ; path p ; p := unitsquare xyscaled(\MPw{idea:\realfolio},\MPh{idea:\realfolio}) superellipsed .90 ; p := p shifted \MPxy{idea:\realfolio} ; draw p withpen pencircle scaled .500cm withcolor \MPcolor{PageColor} ; fill p withcolor \MPcolor{\overlaycolor} ; draw p withpen pencircle scaled .250cm withcolor \MPcolor{LineColor} ; p := unitsquare xyscaled(\MPw{title:\realfolio},\MPh{title:\realfolio}) superellipsed .90 ; p := p shifted \MPxy{title:\realfolio} ; draw p withpen pencircle scaled .250cm withcolor \MPcolor{PageColor} ; fill p withcolor \MPcolor{\overlaycolor} ; draw p withpen pencircle scaled .125cm withcolor \MPcolor{LineColor} ; StopPage ; \stopuseMPgraphic \definecolor[PageColor][s=.50] \definecolor[TextColor][s=.80] \definecolor[DoneColor][s=.65] \definecolor[LineColor][r=.7,g=.6,b=.5] \defineoverlay [idea] [\useMPgraphic {idea}] \defineoverlay [page] [\reuseMPgraphic{page}] \setupbackgrounds [page] [background={page,forward}] \defineoverlay[forward][\overlaybutton{forward}] % alternatief: buffer en ander regime, zodat lokale kleuren % kunnen worden genilled. Pos gebruiken om te positioneren. \definereference[thispage][page(\realfolio)] \newbox\firstideabox \setbox\firstideabox =\null \newbox\secondideabox \setbox\secondideabox=\null \newbox\thirdideabox \setbox\thirdideabox =\null \def\StartTopic% bottom title, top title {\dodoublegroupempty\doStartTopic} \def\doStartTopic#1#2% the positions end up at each page -) {\setbox\firstideabox= \vbox to \makeupheight \bgroup \getrandomdimen\scratchdimen{.5cm}\makeupheight \vskip 0cm plus \scratchdimen \hbox to \makeupwidth \bgroup \getrandomdimen\scratchdimen{.5cm}\makeupwidth \hskip 0cm plus \scratchdimen \setbox\scratchbox=\hbox\bgroup\hpos{idea:\realfolio} \bgroup \getrandomdimen\hsize{.5\makeupwidth}{.7\makeupwidth}% \framed [offset=3ex,align=middle,strut=no,frame=off, before=,after=] \bgroup \setupwhitespace[big]% \doifsomething{#2}{\Title{#2}}% \def\StopTopic{% \egroup \egroup \egroup \gotobox{\box\scratchbox}[thispage]% \getrandomdimen\scratchdimen{.5cm}\makeupwidth \hskip 0cm plus \scratchdimen \egroup \getrandomdimen\scratchdimen{.5cm}\makeupheight \vskip 0cm plus \scratchdimen \hbox to \makeupwidth \bgroup \hfill \hpos{title:\realfolio} {\button[offset=1.5ex,frame=off]{#1}[backward]}% \getrandomdimen\scratchdimen{.5cm}{2.5cm}% \hskip \scratchdimen \egroup \getrandomdimen\scratchdimen{.5cm}{1.5cm} \vskip \scratchdimen \egroup \setbox\secondideabox=\vbox {\framed [offset=overlay,frame=off,background=idea,backgroundcolor=TextColor] {\copy\firstideabox}} \setbox\firstideabox=\vbox {\framed [offset=overlay,frame=off,background=idea,backgroundcolor=DoneColor] {\LineColor\copy\firstideabox}} \startstandardmakeup \startoverlay {\copy\thirdideabox } {\copy\secondideabox} \stopoverlay \stopstandardmakeup \setbox\thirdideabox=\vbox {\startoverlay {\copy\thirdideabox } {\copy\firstideabox} \stopoverlay}}} \long\def\TitlePage#1#2% {\bgroup \switchtobodyfont[32pt] \StartTopic{#1}#2\StopTopic \egroup} \def\Title#1{\midaligned{\bfb#1}\blank} \doifnotmode{demo}{\endinput} % \usemodule[pre-super] % super ellipse as well as superpositioned \starttext \TitlePage{August 2000}{Something Very Important} \StartTopic{Alpha} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopTopic \StartTopic{Beta and Gamma} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopTopic \StartTopic{Delta} A simple and not too long text just to show the idea. \StopTopic \StartTopic{Epsilon} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopTopic \StartTopic{Zeta, Eta and Theta} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopTopic \StartTopic{Omega} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopTopic \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/m-arabtex.mkii0000644000175000017500000002733011754241457024443 0ustar norbertnorbert%D \module %D [ file=m-arabtex, % was font-arb, %D version=2003.02.22, % 1999.11.06, %D title=\CONTEXT\ Modules, %D subtitle=Arabic, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % I still need to hook in some features into the setup % macro. I also have to (re)define farsi etc. in ways % similar to arab, so that we have dedicated environments. % % keywords needed: vocalize transscribe % % \startarabic[option=vocalize] % or vocalize=yes % ...... % \stoparabic \writestatus{loading}{ConTeXt Font Macros / ArabTeX support} %D At the \NTG\ 10\high{th} anniversary meeting Klaus Lagally %D introduced the audience to arabic typesetting, and after %D that I knew that some day I really had to look into his %D generic package. And then, sort of simultaniously Maarten %D Wisse and Imran Ahsan Nyazee asked me if \CONTEXT\ could %D support \ARABTEX, a package that provides right to left %D typesetting of (several variants of) arab and hebrew. %D Having implemented support for chinese a few weeks before, %D I could not resist to build in support for arab and hebrew %D too. Writing support for languages that don't give me any %D cue on how to pronounce their script, is kind of special. %D This is a beta version, since I still have to take care of some %D macros that conflict with existing stuff. \unprotect \definesystemvariable{ARABTEX} \def\setupARABTEX {\getparameters[\??ARABTEX]} \setupARABTEX [\s!rscale=1.2, \c!before=, \c!after=, \c!inner=\setarab, \c!style=\setarabicfont\fontstylesuffix] %D A few (maybe too) simple hooks into the font mechanism. The %D hook into the language module is not yet done. % \unexpanded\def\setarabicfont#1% rscale % {\scratchdimen\@@ARABTEXrscale\bodyfontsize % \font\arbfont\truefontname{Arabic#1} at \currentfontscale\scratchdimen % \setx@skels % \newfonttrue % \arbfont} % % more modern % % \unexpanded\def\setarabicfont#1% rscale % {\definefont[arbfont][Arabic#1 sa \@@ARABTEXrscale]% % \setx@skels % \newfonttrue % \arbfont} % % more efficient \unexpanded\def\setarabicfont#1% {\setx@skels \newfonttrue \definedfont[Arabic#1 sa \ARABTEXparameter\s!rscale]} %D Just to be compatible with Arab\TEX\ we define: \unexpanded\def\nash {\setarabicfont\s!Regular} \unexpanded\def\nashbf {\setarabicfont\s!Bold } \unexpanded\def\pnash {\setarabicfont\s!Regular} \unexpanded\def\pnashbf{\setarabicfont\s!Bold } \unexpanded\def\xnash {\setarabicfont\s!Regular} \unexpanded\def\xnashbf{\setarabicfont\s!Bold } %D The display arabic environment (will be an installable %D object) uses a few conditionals. Let's do it the %D \CONTEXT\ way and define an anvironment that we later can %D adapt. \newif\if@ignore \newif\if@endpe \def\setupARABTEXalternative[#1]% {\dodoubleempty\getparameters[\??ARABTEX#1]} \def\defineARABTEXalternative {\dodoubleempty\dodefineARABTEXalternative} \def\dodefineARABTEXalternative[#1][#2]% {\iffirstargument % \startarab is defined but used already \getparameters [\??ARABTEX#1] [\c!before=\@@ARABTEXbefore, \c!after=\@@ARABTEXafter, \c!inner=\@@ARABTEXinner, \c!style=\@@ARABTEXstyle, \s!rscale=\@@ARABTEXrscale, #2]% \setvalue {\e!start#1}{\displayARABTEXalternative{#1}}% \unexpanded\setvalue{#1}{\inlineARABTEXalternative {#1}}% \unexpanded\def\RL{\getvalue{#1}}% \unexpanded\def\LR{\a@LR}% \let\R=\RL \let\L=\LR \expandafter\all@wcmd\csname\e!stop#1\endcsname \else \defineARABTEXalternative[arabic]% \fi} \def\initializeARABTEXinternals {\ARABTEXparameter\c!inner \the\everyARABTEXpreset} \newtoks \everyARABTEXpreset \let\currentARABTEXalternative\empty \def\ARABTEXparameter#1% {\csname\??ARABTEX\currentARABTEXalternative#1\endcsname} \def\inlineARABTEXalternative#1#2% {\bgroup \edef\currentARABTEXalternative{#1}% \initializeARABTEXinternals \a@RL{#2}% \egroup} \def\displayARABTEXalternative#1% {\dodoubleempty\dostartARABTEXalternative[#1]} \def\dostartARABTEXalternative[#1][#2]% {\begingroup \edef\currentARABTEXalternative{#1}% \getparameters[\??ARABTEX\currentARABTEXalternative][#2]% \ifnum1<0\ARABTEXparameter\c!n\relax \startcolumns \else \ARABTEXparameter\c!before \fi \initializeARABTEXinternals \initializeARABTEXend \arabtext \initializeARABTEXalternative} \def\initializeARABTEXalternative {\ARABTEXparameter\c!style} \def\initializeARABTEXend% \CONTEXT\ does use \end quite differently {\long\def\end##1% {\endarabtext \ifnum1<0\ARABTEXparameter\c!n\relax \stopcolumns \else \ARABTEXparameter\c!after \fi \endgroup}% \let\a@l@end\end \letvalue{\e!stop\currentARABTEXalternative}=\end \long\def\end##1% {\endarabtext \endgroup \if@ignore\global\@ignorefalse\expandafter\ignorespaces\fi}} %D Arabic verbatim. \def\typearab{\a@@verb} %D Some \LATEX\ macros. \def \makeatletter{\unprotect} \def \makeatother {\protect} \def \typeout {\writestatus{arabtex}} %D We have to save some macros. \let\ARABTEXversion=\empty \def\startloadingARABTEX% ugly hacks {\catcode`!=12 \catcode`?=12 \pushmacro\output \let \output \scratchtoks \pushmacro\LaTeX \let \LaTeX \undefined \pushmacro\CJK \let \CJK \undefined % \pushmacro\peek@token \let \peek@token \undefined % \pushmacro\edmacloaded \let \edmacloaded \undefined \pushmacro\year \let \year \normalyear \pushmacro\month \let \month \normalmonth \pushmacro\day \let \day \normalday \pushmacro\input \def \input ##1 {\normalinput ##1 } \pushmacro\linewidth \pushmacro\datum \def\datum {\toks0} \pushmacro\version \def\version {\toks2} \pushmacro\theversion \let\theversion \ARABTEXversion \pushmacro\emphasize \pushmacro\cap} \def\stoploadingARABTEX {\catcode`!=11 \catcode`?=11 \popmacro\cap \popmacro\emphasize \popmacro\theversion \popmacro\version \popmacro\datum \popmacro\linewidth \popmacro\input \popmacro\day \popmacro\month \popmacro\year % \popmacro\edmacloaded % \popmacro\peek@token \popmacro\CJK \popmacro\LaTeX \popmacro\output} %D We save some macros: \startloadingARABTEX %D When loading \ARABTEX\ we have to set back the~! and~?. \input arabtex.sty %D Since \ARABTEX\ has its own \type {\cap}, we save the %D new meaning. We also redefine some \PLAIN\ macros, which %D happen to have a different meaning in \LATEX. \let\ARABTEXversion\theversion \let\ARABTEXcap \cap \appendtoks \let\cap\ARABTEXcap \to \everyARABTEXpreset \def\ARABTEXsh@ft#1% {\dimen@.00#1ex \multiply\dimen@\slantperpoint \kern-.0156\dimen@} \appendtoks \let\sh@ft\ARABTEXsh@ft \to \everyARABTEXpreset \def\ARABTEXd#1% {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}% .\hidewidth}}} \def\ARABTEXb#1% {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}% \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}} \appendtoks \let\b\ARABTEXb \let\d\ARABTEXd \to \everyARABTEXpreset \def \ARABTEXbreakA {\hfill\break} \def \ARABTEXbreakB {\break} \edef\ARABTEXbar {\string|} \def \ARABTEXcomma {\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi} \appendtoks \let\\=\ARABTEXbreakA \let\|=\ARABTEXbreakB \let |=\ARABTEXbar \let\,=\ARABTEXcomma \to \everyARABTEXpreset \let\ARABTEXprotect\relax \appendtoks \let\protect\ARABTEXprotect \to \everyARABTEXpreset %D Now we can pop the saved macros. \stoploadingARABTEX %D Ah, we have to get rid of some \type {\protect} stuff but %D to permit testing we add it in the \CONTEXT\ way. % \bgroup % \catcode`\<=\@other % \unexpanded\gdef\a@ins % {\ifmmode % \expandafter<% % \else % \dontleavehmode \bgroup % \arab@codes \set@arabfont \@waslafalse \@wasfalse % \expandafter\arab@insert % \fi} % \unexpanded\gdef\<{\a@ins} % \catcode`\<=\active % \global\let<=\a@ins % \egroup % % cleaner: \defineactivecharacter < {\a@ins} \unexpanded\gdef\<{\a@ins}% \def\normal@a@ins {\dontleavehmode % context prefers this instead of \leavevmode \bgroup \arab@codes \set@arabfont \@waslafalse \@wasfalse \arab@insert} \unexpanded\gdef\a@ins {\mathortext<\normal@a@ins} %D We also need to register a few macros: \all@wcmd\initializeARABTEXalternative % no argument, internal command \all@wcmd\tx % no argument, small font \all@wcmd\txx % no argument, smaller font %D We also hook it into the presetter. \appendtoks \let\normaltx \tx \def\tx {\normaltx \setarabicfont\fontstylesuffix}% \let\normaltxx\txx\def\txx{\normaltxx\setarabicfont\fontstylesuffix}% \to \everyARABTEXpreset %D The main definitions are: \definefontsynonym [ArabicRegular] [xnsh14] \definefontsynonym [ArabicBold] [xnsh14bf] \defineARABTEXalternative [arabic] [\c!inner=\setarab, \c!style=\setarabicfont\fontstylesuffix] \defineARABTEXalternative [farsi] [\c!inner=\setfarsi, \c!style=\setarabicfont\fontstylesuffix] \defineARABTEXalternative [urdu] [\c!inner=\seturdu, \c!style=\setarabicfont\fontstylesuffix] \defineARABTEXalternative [maghribi] [\c!inner=\setmaghribi, \c!style=\setarabicfont\fontstylesuffix] %D Apart from such definitions, one can adapt the settings %D using \type {\setupARABTEXalternative}. %D %D A few years ago at the Holland Festivities, I attended {\em %D The Cave}, one of the most impressive combinations of music %D and video I know. This composition of Steve Reich (music) %D and .. (video) concentrates on the common grounds of arabs %D and jews: their ancestor Abram. Listening to the \CDROM's %D of {\em The Cave}, provided me the right ambiance for %D filling in the details of this module. In {\em The Cave}, %D interviews, music, and |<|believe it or not|>| rhythmic %D typography are the cornerstones. Remembering those big %D screens, it strikes me that like music, \TEX\ too is a %D perfect instrument to cross cultural and linguistic %D borders. So, let's load Hebrew support as well: \unexpanded\def\sethebrewfont#1% {\setx@skels \newfonttrue \definedfont[Hebrew#1 sa \ARABTEXparameter\s!rscale]} % \let \setheb \sethebrew \unexpanded\def\pheb {\sethebrewfont\s!Regular} \unexpanded\def\phebbf{\sethebrewfont\s!Bold} % \startloadingARABTEX % \ReadFile{hebtex.sty} % \ReadFile{apatch.sty} % \ReadFile{hepatch.sty} % \stoploadingARABTEX \definefontsynonym [HebrewRegular] [hclassic] \definefontsynonym [HebrewBold] [hcaption] \defineARABTEXalternative [hebrew] [\c!inner=\sethebrew, \c!style=\sethebrewfont\fontstylesuffix] %D Now we're done: \protect \endinput % everyoutput : \charsubdefmax \arab@charsubdefmax % \defineconversion [abjad] [\abj@d] % % voetnoten verbatim lijsten indexen tabellen uitlijnen % % \v!hoofdstuk=al-fa.slu % \v!inhoud=al-mu.htawayAtu % \v!figuren=qA'imaTu al-.suwaru % \v!tabellen=qA'imaTu al-^gadAwilu % \v!grafieken=qA'imaTu al-rusUmu % \v!index=al-fihrisu % \v!bijlage=al-mul.haqu % \usemodule[arabtex] % % \usetypescript[postscript] \switchtotypeface[postscript] % % \setarab \novocalize % % \starttext % % \placecontent % % \section{\} % short arabic use \< .. > % \section{\} % short arabic use \< .. > % % \startarabic % mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm % % mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm % \stoparabic % % \section{\} % % \startarabic % mu.hammad 'i_d q"aAm zay"d" + i_d yaqUm zyd + A_d zyd q"aAm % \stoparabic % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-imp-nav.mkiv0000644000175000017500000000343711754241457025075 0ustar norbertnorbert%D \module %D [ file=meta-nav, %D version=2003.03.28, %D title=\METAPOST\ Graphics, %D subtitle=Navigational Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startuniqueMPgraphic{navplus}{size,color,type,mode} color c ; numeric s, t ; path p ; t := \MPvar{type} ; c := \MPvar{color} ; s := \MPvar{size} ; if \MPvar{mode} = 1 : c := .5[c,white] fi ; if t = 1 : p := ((0,0)--(1/2,0)--(1,1/3)--(1,1)--(0,1)--(0,0)--cycle) xyscaled (3,4) ; elseif t = 2 : p := ((0,0)--(1,0)--(1,1)--(0,1)--(1/2,2/5)--(1,1)--(0,1)--cycle) xyscaled (4,3) ; else : p := fullsquare xyscaled (3,3) ; fi ; draw p withpen pencircle scaled (1/2) withcolor .75white ; fill p withcolor c ; draw p withpen pencircle scaled (1/3) withcolor .5c ; currentpicture := currentpicture scaled s ; currentpicture := currentpicture shifted -center currentpicture ; \stopuniqueMPgraphic \setupMPvariables [navplus] [size=1ex, color=black, type=1, mode=0] \definepalet [navplus] [attach=darkred, comment=darkblue] \definesymbol [comment-normal] [\uniqueMPgraphic{navplus}{type=1,color=navplus:comment}] \definesymbol [comment-down] [\uniqueMPgraphic{navplus}{type=1,color=navplus:comment,mode=1}] \definesymbol [attach-normal] [\uniqueMPgraphic{navplus}{type=2,color=navplus:attach}] \definesymbol [attach-down] [\uniqueMPgraphic{navplus}{type=2,color=navplus:attach,mode=1}] \unprotect \setupcomment [\c!symbol={comment-normal,comment-down}] \setupattachments[\c!symbol={attach-normal,attach-down}] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-15.mkii0000644000175000017500000002651511754241457024353 0ustar norbertnorbert%D \module %D [ file=regi-8859-15, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-15 (West European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-15/Latin9 input encoding (regime) for %D West European languages, almost the same as iso-8859-1 with rarely %D used symbols (currency symbol,%D fractions, accents) replaced by %D Euro and some additional letters,%D see also cp1252. %D %D Usage: \type{\enableregime[8859-15]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-15] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\exclamdown} % 00A1 INVERTED EXCLAMATION MARK \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\texteuro} % 20AC EURO SIGN \defineactivetoken 165 {\textyen} % 00A5 YEN SIGN \defineactivetoken 166 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\ordfeminine} % 00AA FEMININE ORDINAL INDICATOR \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\textmacron} % 00AF MACRON \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\ordmasculine} % 00BA MASCULINE ORDINAL INDICATOR \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\OEligature} % 0152 LATIN CAPITAL LIGATURE OE \defineactivetoken 189 {\oeligature} % 0153 LATIN SMALL LIGATURE OE \defineactivetoken 190 {\Ydiaeresis} % 0178 LATIN CAPITAL LETTER Y WITH DIAERESIS \defineactivetoken 191 {\questiondown} % 00BF INVERTED QUESTION MARK \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Eth} % 00D0 LATIN CAPITAL LETTER ETH \defineactivetoken 209 {\Ntilde} % 00D1 LATIN CAPITAL LETTER N WITH TILDE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\Thorn} % 00DE LATIN CAPITAL LETTER THORN \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\eth} % 00F0 LATIN SMALL LETTER ETH \defineactivetoken 241 {\ntilde} % 00F1 LATIN SMALL LETTER N WITH TILDE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\thorn} % 00FE LATIN SMALL LETTER THORN \defineactivetoken 255 {\ydiaeresis} % 00FF LATIN SMALL LETTER Y WITH DIAERESIS \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/page-set.mkii0000644000175000017500000025220711754241457024273 0ustar norbertnorbert%D \module %D [ file=page-set, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Column Sets, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % getnoflines vs getrawnoflines % some day: cleanup and go etex \writestatus{loading}{ConTeXt Page Macros / Column Sets} % todo : last longer than previous % todo : block span over last column if footnotes % todo : diagnosis balancing run % todo : separate footnote placement % todo : go on on same page with colset % todo : test page areas per page % todo : leftmargin/rightmargin (better than afstand(1)) % use the OTRSET layer for more purposes, like the footnotes ! \unprotect \newcount\tofcolumns % total \newcount\lofcolumns % left \newcount\rofcolumns % right \newcount\columnfirstcell \columnfirstcell=1 \newcount\columnlastcell \newcount\columnfreecells \newcount\currenthcell \newcount\currentvcell \newcount\columnhcells \newcount\columnvcells \newif\ifenoughcolumncells \newif\ifsomefreecolumncells \newif\ifcolumnspread \newif\iftracecolumnset % \tracecolumnsettrue \def\columnmaxcells {75} % runtime \def\columnmaxfreecells {0} % runtime \def\columngaplimit {0} % {5} \def\@otr@{otr} \def\OTRSETmakeupwidth{\innermakeupwidth} \let\OTRSETflushsidefloats \forgetsidefloats % \relax \let\OTRSETsynchronizesidefloats\forgetsidefloats % \relax \def\OTRSETgridcell #1#2{\csname \@otr@:\number#1:\number#2\endcsname} \def\OTRSETgetgridcell#1#2{\box\csname \@otr@:\number#1:\number#2\endcsname} \def\OTRSETsetgridcell#1#2{\global\setbox\csname\@otr@:\number#1:\number#2\endcsname} \long\def\OTRSETdoifcellelse#1#2% {\relax\ifvoid\csname\@otr@:\number#1:\number#2\endcsname \@EA\secondoftwoarguments\else\@EA\firstoftwoarguments \fi} % The following two macros are used to compensate for a switch in body fonts % as in: % % \definecolumnset [two] [n=2,balancing=yes] % \definecolumnset [three] [n=3,balancing=yes] % % \setupcolumnsetlines[two][1][1][7] % \setupcolumnsetlines[two][1][2][10] % % \setupcolumnsetlines[three][1][1][40] % \setupcolumnsetlines[three][1][2][40] % \setupcolumnsetlines[three][1][3][40] % % \setupcolumnsetstart[three][1][1][15] % \setupcolumnsetstart[three][1][2][20] % \setupcolumnsetstart[three][1][3][20] % % \starttext % \startcolumnset [two] \dorecurse {1}{\input tufte \par} \stopcolumnset % \switchtobodyfont[small] % \startcolumnset [three] \dorecurse {1}{\input tufte \par} \stopcolumnset % \stoptext %D Marks in columnsets: %D %D \starttyping %D \definemarking[M] %D \setupheadertexts[\setups{show-M-marks}] %D \definecolumnset[test][n=3] %D %D \startsetups show-M-marks %D \getmarking[M][1][previous]/\getmarking[M][1][first]/\getmarking[M][1][last]\quad %D \getmarking[M][2][previous]/\getmarking[M][2][first]/\getmarking[M][2][last]\quad %D \getmarking[M][3][previous]/\getmarking[M][3][first]/\getmarking[M][3][last]\quad %D \getmarking[M][1][previous]/\getmarking[M][1][first]/\getmarking[M][last]\quad %D \getsavedmarking[M][previous]/\getsavedmarking[M][first]/\getsavedmarking[M][last] %D \stopsetups %D %D \startbuffer %D \section{Knuth} [K1]\marking[M]{k1} [K2]\marking[M]{k2} \input knuth %D \section{Zapf} [Z]\marking[M]{z} \input zapf %D \stopbuffer %D %D \startbuffer %D \section{Ward} [W]\marking[M]{w} \input ward %D \placefigure[here]{none}{\externalfigure[a][height=2cm]} %D \section{Davis} [D]\marking[M]{d} \input davis %D \section{Zapf} [Z]\marking[M]{z} \input zapf %D \stopbuffer %D %D \startbuffer %D \section{Ward} [W]\marking[M]{w} \input ward %D \placefigure[here]{none}{\externalfigure[a][height=2cm]} %D \section{Davis} [D]\marking[M]{d} \input davis %D \section{Zapf} [Z]\marking[M]{z} \input zapf %D \section{Douglas} [O]\marking[M]{o} \input douglas %D \stopbuffer %D %D \starttext %D \startcolumnset[test] %D \dorecurse{5}{\getbuffer} %D \placefigure[here]{none}{\externalfigure[a][height=2cm]} %D % \column % sometimes needed %D \stopcolumnset %D \stoptext %D \stoptyping % not ok yet, for column sets we need a special case: within a column we % need to bubble-up the marks; the indirectness permits overloading here \let\saveOTRSETmark \refreshsavedmark \let\bubbleOTRSETmark\bubblesavedmark \let\resetOTRSETmark \resetsavedmark \let\presetOTRSETmark\presetsavedmark \def\doregisterOTRSETmarks#1{\saveOTRSETmark [#1][\number\mofcolumns]} \def\dobubbleOTRSETmarks #1{\bubbleOTRSETmark[#1][\number\mofcolumns]} \def\doresetOTRSETmarks #1{\resetOTRSETmark [#1][\recurselevel]} \def\dopresetOTRSETmarks #1{\presetOTRSETmark[#1][\recurselevel]} \def\registerOTRSETmarks {\processcommacommand[\alldefinedmarks]\doregisterOTRSETmarks} \def\bubbleOTRSETmarks {\processcommacommand[\alldefinedmarks]\dobubbleOTRSETmarks} \def\resetOTRSETmarks {\dorecurse\nofcolumns{\processcommacommand[\alldefinedmarks]\doresetOTRSETmarks}} \def\presetOTRSETmarks {\dorecurse\nofcolumns{\processcommacommand[\alldefinedmarks]\dopresetOTRSETmarks}} %D test case of Vit Zika (context list): %D %D \starttyping %D \setuplayout[height=middle,width=middle,grid=yes] %D %D \starttext %D \startcolumnset %D \dorecurse{10} %D {\input thuan \endgraf %D \bgroup %D \ss\restoreinterlinespace %D \dorecurse{3}{\input hawking \endgraf} %D \egroup %D \input bryson \endgraf} %D \stopcolumnset %D \stoptext %D \stoptyping \def\OTRSETsetcorrectnofcells#1% {\bgroup \!!counta#1\relax \ifdim\globalbodyfontsize=\localbodyfontsize \restoreinterlinespace \else \!!dimena-\!!counta\lineheight \restoreglobalbodyfont % slow, we need a fast one \advance\!!dimena\!!counta\lineheight \getnoflines\!!dimena \advance\!!counta\noflines \ifnum\!!counta<#1\else \!!counta#1\relax \fi \fi \relax % needed ! ! ! ! else lookahead over \fi and \@EA \@EA\egroup\@EA\scratchcounter\the\!!counta\relax} \def\OTRSETsetcorrectcellht {\bgroup \!!dimena-\strutht\relax \ifdim\globalbodyfontsize=\localbodyfontsize \restoreinterlinespace \else \restoreglobalbodyfont \fi \advance\!!dimena\strutht \relax % needed ! ! ! ! else lookahead over \fi and \@EA \@EA\egroup\@EA\scratchdimen\the\!!dimena\relax} \def\columnerasegridboxes % maybe dedicated loops {\bgroup \increment\columnmaxcells\relax \ifodd\realpageno \else % we are on the other page \columnspreadfalse \fi \ifcolumnspread \dorecurse\nofcolumns {\let\!!stringa\recurselevel \scratchcounter\recurselevel \advance\scratchcounter\lofcolumns \edef\!!stringb{\the\scratchcounter}% \dostepwiserecurse \zerocount \columnmaxcells \plusone {\ifcsname\@otr@:\!!stringa:\recurselevel\endcsname \global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname \ifcsname\@otr@:\!!stringb:\recurselevel\endcsname \box\csname\@otr@:\!!stringb:\recurselevel\endcsname %\global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname\box\csname\@otr@:\!!stringb:\recurselevel\endcsname \else \emptybox %\global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname\emptybox \expandafter\newbox\csname\@otr@:\!!stringb:\recurselevel\endcsname \fi \else \expandafter\newbox\csname\@otr@:\!!stringa:\recurselevel\endcsname \ifcsname\@otr@:\!!stringb:\recurselevel\endcsname \global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname\box\csname\@otr@:\!!stringb:\recurselevel\endcsname \else \expandafter\newbox\csname\@otr@:\!!stringb:\recurselevel\endcsname \fi \fi}}% \else \dorecurse \tofcolumns {\let\!!stringa\recurselevel \dostepwiserecurse \zerocount \columnmaxcells \plusone {\ifcsname\@otr@:\!!stringa:\recurselevel\endcsname \global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname\emptybox \else \expandafter\newbox\csname\@otr@:\!!stringa:\recurselevel\endcsname \fi}}% \fi \dorecurse\tofcolumns {\global\setbox\csname\@otr@:\recurselevel:\columnmaxcells\endcsname\copy\placeholderboxa}% \global\columnfirstcell\zerocount \global\columnlastcell\columnfirstcell \global\columnfreecells\columnfirstcell \egroup} \def\doOTRSETsetgridcells#1#2#3#4#5#6% placeholder col row wid hei {data} {\!!countd#2\advance\!!countd#4\advance\!!countd\minusone \!!counte#3\advance\!!counte#5\advance\!!counte\minusone \dostepwiserecurse{#2}\!!countd\plusone {\!!countf\recurselevel \dostepwiserecurse{#3}\!!counte\plusone {\OTRSETsetgridcell\!!countf\recurselevel#1}}% \dostepwiserecurse{#3}\!!counte\plusone {\wd\OTRSETgridcell{#2}\recurselevel\hsize}% \OTRSETsetgridcell{#2}\!!counte#6} \def\OTRSETsetgridcells {\doOTRSETsetgridcells{\copy\placeholderboxb}} \def\OTRSETerasegridcells#1#2#3#4% {\doOTRSETsetgridcells{\emptybox}{#1}{#2}{#3}{#4}{\emptybox}} \def\setupcolumnsetlines{\doquintupleempty\dosetupcolumnsettrick[l]} \def\setupcolumnsetstart{\doquintupleempty\dosetupcolumnsettrick[s]} \def\dosetupcolumnsettrick[#1][#2][#3][#4][#5]% tag id page col value {% not needed, is already relative % \doifinstringelse{+}{#3}{\scratchcounter\realpageno}{\scratchcounter\zerocount}% % \advance\scratchcounter#3\relax % \relax needed % \setevalue{\??mc:#1:#2:\the\scratchcounter:\number#4}{\number#5}} \iffifthargument \setevalue{\??mc:#1:#2:\number#3:\number#4}{\number#5}% \else \setevalue{\??mc:#1:#2:\number#3:0}{\number#4}% \fi} \def\currentcolumnmaxcellstag #1{\??mc:l:\OTRSETidentifier:\columnsetpage:\number#1} \def\currentcolumnstartcelltag#1{\??mc:s:\OTRSETidentifier:\columnsetpage:\number#1} \def\doresetcolumnsetlines#1% {\ifcsname\currentcolumnmaxcellstag{#1}\endcsname \letgvalue{\currentcolumnmaxcellstag{#1}}\zerocount \fi \ifcsname\currentcolumnmaxcellstag{#1}\endcsname \letgvalue{\currentcolumnmaxcellstag{#1}}\zerocount \fi} \def\currentcolumnsomecells#1#2% {\ifcsname#1\mofcolumns\endcsname \ifnum\csname#1\mofcolumns\endcsname=\zerocount #2% \else \number\numexpr\ifnum\csname#1\mofcolumns\endcsname<\zerocount \columnmaxcells+\fi\csname#1\mofcolumns\endcsname\relax \fi \else\ifcsname#10\endcsname \ifnum\csname#10\endcsname=\zerocount #2% \else \number\numexpr\ifnum\csname#10\endcsname<\zerocount \columnmaxcells+\fi\csname#10\endcsname\relax \fi \else #2% \fi\fi} \def\currentcolumnmaxcells {\currentcolumnsomecells\currentcolumnmaxcellstag \columnmaxcells} \def\currentcolumnstartcell{\currentcolumnsomecells\currentcolumnstartcelltag\plusone} \def\OTRSETsetfreecells#1#2% col start {\bgroup \global\columnfirstcell\ifnum#2=0 1\else#2\fi\relax \OTRSETsetcorrectnofcells\currentcolumnmaxcells % sets \scratchcounter \edef\columnmaxcells{\the\scratchcounter}% \ifnum\columnfirstcell>\columnmaxcells \global\columnfreecells\zerocount \global\columnfirstcell\plusone \global\columnlastcell \zerocount \global\somefreecolumncellsfalse %\message{no cells a}% \else \doloop {\ifnum\columnfirstcell>\columnmaxcells\relax \exitloop \else \OTRSETdoifcellelse{#1}\columnfirstcell {\global\advance\columnfirstcell\plusone}\exitloop \fi}% \global\columnlastcell\columnfirstcell \doloop {\ifnum\columnlastcell>\columnmaxcells\relax \exitloop \else \OTRSETdoifcellelse{#1}\columnlastcell {\global\advance\columnlastcell \minusone \exitloop} {\global\advance\columnlastcell \plusone }% \fi}% \ifnum\columnfirstcell>\columnmaxcells \global\columnfreecells\zerocount \global\columnfirstcell\plusone \global\columnlastcell \zerocount \global\somefreecolumncellsfalse %\message{no cells b}% \else \ifnum\columnlastcell>\columnmaxcells \global\columnlastcell\columnmaxcells \fi \global\columnfreecells\columnlastcell \global\advance\columnfreecells -\columnfirstcell \global\advance\columnfreecells \plusone \global\somefreecolumncellstrue %\message{\number\columnfirstcell-\number\columnlastcell=\number\columnfreecells}% \fi \fi \egroup} \def\OTRSETgetmaxfreecells#1#2% col start {\let\columnmaxfreecells\!!zerocount \let\columnfrmfreecells\!!zerocount \pushmacro \columnmaxcells \OTRSETsetcorrectnofcells\currentcolumnmaxcells % sets \scratchcounter \edef\columnmaxcells{\the\scratchcounter}% \scratchcounter\zerocount \dostepwiserecurse{#2}\columnmaxcells\plusone {\OTRSETdoifcellelse{#1}\recurselevel {\ifnum\columnmaxfreecells<\scratchcounter \edef\columnmaxfreecells{\the\scratchcounter}% \let\columnfrmfreecells\recurselevel \fi \scratchcounter\zerocount} {\advance\scratchcounter\plusone}}% \popmacro\columnmaxcells} \long\def\OTRSETrecurseRL#1% {\dostepwiserecurse\nofcolumns\plusone\minusone {#1\hskip\OTRSETgetparameter\c!distance\recurselevel}} \def\OTRSETmakegridbox {\ifcase\columndirection \OTRSETdomakegridbox\plusone\nofcolumns\plusone \else \OTRSETdomakegridbox\nofcolumns\plusone\minusone \fi} \def\OTRSETmakeupwidth{\makeupwidth} % temporary indirectness \def\OTRSETdomakegridbox#1#2#3% {\hbox\bgroup \dontcomplain \forgetall % can go once in \flush \!!heighta \textheight % test first ! \hbox to \OTRSETmakeupwidth {\dostepwiserecurse{#1}{#2}{#3} {\mofcolumns\recurselevel \localcolumnwidth\OTRSETlocalwidth\mofcolumns \setbox\scratchbox\hbox\localframed [\??mc\OTRSETidentifier\number\mofcolumns]% [\c!width=\localcolumnwidth,\c!height=\!!heighta,\c!lines=]% {}% \wd\scratchbox\localcolumnwidth \ht\scratchbox\!!heighta \ifcase\columndirection \hskip\OTRSETgetparameter\c!distance\recurselevel \box\scratchbox \else \box\scratchbox \hskip\OTRSETgetparameter\c!distance\recurselevel \fi}}% \hskip-\OTRSETmakeupwidth % main text \hbox to \OTRSETmakeupwidth {\dostepwiserecurse{#1}{#2}{#3} {\mofcolumns\recurselevel \localcolumnwidth\OTRSETlocalwidth\mofcolumns \offinterlineskip \setbox\scratchbox\vbox to \!!heighta {\topskipcorrection % not needed \ifcase\OTRSETbalancemethod % no \or % yes \doifelselayerdata{OTRTEXT}\vfill\relax % temp hack \or % top \or % bottom \vfill \fi \dorecurse\columnmaxcells {\setbox\scratchbox\hbox{\OTRSETgetgridcell\mofcolumns\recurselevel}% % {\setbox\scratchbox\hbox % {\localstarttextcolor % \OTRSETgetgridcell\mofcolumns\recurselevel % \localstoptextcolor}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \ifcase\columndirection \box\scratchbox \else \hbox to \localcolumnwidth {\hskip\localcolumnwidth\llap{\box\scratchbox}}% \fi \par}% \ifcase\OTRSETbalancemethod % no \else % yes, top, bottom \ifdim\globalbodyfontsize=\localbodyfontsize \removedepth \restoreglobalbodyfont \vskip\strutdepth \fi \kern\zeropoint \vss \fi}% \wd\scratchbox\localcolumnwidth % \textwidth \ifcase\columndirection \hskip\OTRSETgetparameter\c!distance\recurselevel\box\scratchbox \else \box\scratchbox\hskip\OTRSETgetparameter\c!distance\recurselevel \fi}}% \egroup} \let\OTRSETbalht\zeropoint \def\OTRSETreducegridbox % for the moment no difference between methods {\globallet\OTRSETbalht\zeropoint \ifcase\OTRSETbalancemethod % no balancing \else \bgroup \!!counta\columnmaxcells \donetrue \doloop {\dorecurse\nofcolumns{\OTRSETdoifcellelse\recurselevel\!!counta\donefalse\donothing}% \ifdone \ifnum\!!counta>\plusone\advance\!!counta\minusone\else\exitloop\fi \else \exitloop \fi}% \ifnum\!!counta>\plusone \!!heighta\lineheight \multiply\!!heighta \!!counta \advance\!!heighta \topskip \advance\!!heighta -\lineheight \else \!!heighta\zeropoint \fi \xdef\OTRSETbalht{\the\!!heighta}% \egroup \fi} \def\OTRSETflushfinalfootnotes {\ifcase\lastcolumnlastcell \else \setbox\scratchbox\hbox {\placebottomnotes}% \ifdim\ht\scratchbox>\zeropoint \setbox\scratchbox\hbox {\hbox to \zeropoint{\OTRSETgetgridcell\nofcolumns\lastcolumnlastcell}% \box\scratchbox}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \OTRSETsetgridcell\nofcolumns\lastcolumnlastcell\box\scratchbox \fi \global\lastcolumnlastcell\zerocount \fi} \def\OTRSETdoflush {\ifcollectingcontent \registerOTRSETmarks \global\mofcolumns\plusone \else \OTRSETdofinalflush \OTRSETdofinaloutput \ifnum\columnsetpage>0 \dorecurse\nofcolumns{\doresetcolumnsetlines\recurselevel}% \fi \doglobal\increment\columnsetpage \OTRSETinitializecolumns %\OTRSETdoflushfloats \OTRSETstartnextpage \presetOTRSETmarks \initializecolumntextareas \fi} \newbox\OTRfinalpagebox \def\OTRSETdofinalflush % see \OTRSETdoflush {\OTRSETflushfinalfootnotes \placecolumntextareas \OTRSETcentergridcells \bgroup % we want to keep the reduction local \OTRSETreducegridbox \global\setbox\OTRfinalpagebox\OTRSETmakegridbox \egroup % otherwise we get the wrong number of free cells %\gdef\localcolumnmaxcells{0}% here ? \global\mofcolumns\nofcolumns} % otherwise problems in finaloutput \def\OTRSETdofinaloutput {\ifdim\ht\OTRfinalpagebox=\textheight \bgroup % \let\OTRSETsetvsize\relax % prevents useless search for gap \ifcase\OTRSETbalancemethod \finaloutput\box\OTRfinalpagebox \else\ifdim\OTRSETbalht>\zeropoint % catch a bordercase \scratchdimen\OTRSETbalht \advance\scratchdimen\lineheight\relax \ifdim\scratchdimen>\textheight % full page \finaloutput\box\OTRfinalpagebox \else % same page \global\setbox\OTRfinalpagebox \iftracecolumnset\ruledvbox\else\vbox\fi to \OTRSETbalht {\box\OTRfinalpagebox\vss}% \setlayer[OTRTEXT]{\box\OTRfinalpagebox}% \snaptogrid\vbox{\vskip\OTRSETbalht}% hack \fi \else \finaloutput\box\OTRfinalpagebox \fi \fi \globallet\OTRSETbalht\zeropoint \egroup \fi} \definesystemvariable {mc} \definesystemvariable {mt} \definesystemconstant {colset} \definetwopasslist\s!colset \newdimen \OTRSETtextswidth \newdimen \OTRSETtextsheight \let \OTRSETidentifier=\empty \newtoks \OTRSEToutput \def\OTRSETgetparameter#1#2{\csname\??mc\OTRSETidentifier\number#2#1\endcsname} \def\OTRSETsetparameter#1#2{\setvalue{\??mc\OTRSETidentifier\number#2#1}} \def\OTRSETskipstart {\scratchcounter\executeifdefined{\??mc\OTRSETidentifier\c!start}\zerocount \relax % needed ! \ifcase\scratchcounter\else \advance\scratchcounter\plusone \doOTRSETsetgridcells {\copy\placeholderboxe} \plusone\plusone\nofcolumns\scratchcounter \null \fi} \def\OTRSETsetvsize % snap per sectie (gap here?) {\ifcollectingcontent \else % can be assigndimen \OTRSETskipstart % not that well tested \OTRSETcheckinsert % added \OTRSETsetfreecells\mofcolumns\columnfirstcell \ifsomefreecolumncells \global\vsize\columnfreecells\lineheight \ifinotr % else problems with floats, see extreme \global\pagegoal\vsize % niet nodig, tenzij binnen otr \fi \synchronizeoutput % fails on example % \allowbreak % hm \fi \synchronizenotes \fi} \def\OTRSETsethsize % of course this does not migrate outside the otr {\localcolumnwidth\OTRSETlocalwidth\mofcolumns \textwidth\localcolumnwidth \hsize\localcolumnwidth} \def\OTRSETsynchronizehsize {\ifcase0\getvalue{\??mc\??mc\c!width}\else % some width set \bgroup \scratchdimen\OTRSETlocalwidth\mofcolumns \ifdim\scratchdimen=\textwidth \egroup \else % only if change in width and \column/\break \egroup \OTRSETsethsize \fi \fi} \def\OTRSETcheckfreelines {\OTRSETsetvsize} \def\doOTRSETcolumnseparator {\hbox to \zeropoint{\hss\red\vl\hss}} \let\OTRSETcolumnseparator\relax \def\showbreaks {\let\OTRSETcolumnseparator\doOTRSETcolumnseparator} % \installcolumnbreakhandler {SET} \v!ja % {% hmmm: % \ifhmode % \bgroup % \removeunwantedspaces % \parfillskip\zeropoint % \OTRSETcolumnseparator % \par % \egroup % \fi % % brrr: % \ejectinsert % \ejectpage % \OTRSETsynchronizehsize} % no \OTRSETsethsize, can be mid smaller (like tabulate) % % \installcolumnbreakhandler {SET} \v!forceer % {\OTRSETgotocolumn[\v!forceer]} % \installcolumnbreakhandler {SET} \v!eerste % {\OTRSETgotocolumn[\v!eerste]} % \installcolumnbreakhandler {SET} \v!laatste % {\OTRSETgotocolumn[\v!laatste]} % % \installcolumnbreakhandler {SET} \v!pagina % {\simplepagebreak % \flushnotes \executepagebreakhandler\v!ja % \ifnum\mofcolumns>\plusone % \OTRSETgotocolumn[\v!laatste,\v!forceer]% % \fi} \def\OTRSETcolumnhbreak {\ifhmode \bgroup \removeunwantedspaces \parfillskip\zeropoint \OTRSETcolumnseparator \par \egroup \fi} \installcolumnbreakhandler {SET} \v!local {\OTRSETcolumnhbreak \ejectinsert \ejectpage % brrr % no \OTRSETsethsize, can be mid smaller (like tabulate) % also, this one should be executed at the outer level % (setting hsize inside otr does not work) \OTRSETsynchronizehsize} % We need to make sure that we really leave the column; mid % column we may end up in an empty gap, and we don't want to % stay there (basically such a gap is a small empty page % then). \installcolumnbreakhandler {SET} \v!yes {\OTRSETcolumnhbreak \edef\savedmofcolumns{\the\mofcolumns}% \edef\savedrealpageno{\the\realpageno}% \ejectinsert \ejectpage % brrr \doloop {\ifnum\savedmofcolumns=\mofcolumns \ifnum\savedrealpageno=\realpageno \OTRSETdummycolumn \else \exitloop \fi \else \exitloop \fi}% \OTRSETsynchronizehsize} \installcolumnbreakhandler {SET} \s!unknown {\expanded{\OTRSETgotocolumn[\@@columnspecification]}} \installcolumnbreakhandler {SET} \v!page {\vfill\eject % \doejectpage\eject \OTRSETgotonextpage} \newtoks\OTRSETeverystartofcolumn \newbox\OTRSETsavedfootnotes % \installoutput\OTRSETflushtextsofar % spacing goes wrong %\def\OTRSETflushtextsofar % {\ifvoid\normalpagebox \else % \setbox\scratchbox\vbox{\unvbox\normalpagebox}% % \OTRSETsavenotes % \OTRSEThandleflushedtext0 % \fi} % The complication is in the fact that when the HERE float % is placed, the otr is not invoked when there is not yet % enough content; this can lead to a change in order (turning % on the tracer with option 0 is very instructive, watch the % small numbers in the margin) % % 0 = no flushing, so no interference but user should handle % border cases of placement % 1 = the normal otr, rather untested % 2 = a solution that works ok, is experimental and above % all messy \chardef\OTRSETflushtextmode=0 \def\OTRSETflushtextsofar {\ifcase\OTRSETflushtextmode % don't mess around \or % the normal one \ifvoid\normalpagebox\else \OTRSETnaturalflush \OTRSETcheckfreelines \fi \or % way to complicated, but kind of ok \doOTRSETflushtextsofar \fi} \newskip\lastskipinotr \installoutput\doOTRSETflushtextsofar % experimental {\ifvoid\normalpagebox\else \scratchdimen\dp\normalpagebox \setbox\scratchbox\vbox {\forgetall \unvbox\normalpagebox \global\lastskipinotr\lastskip\relax \ifdim\lastskipinotr>\zeropoint\relax \removelastskip \else \kern-\scratchdimen % handle depth \fi}% \ifdim\lastskipinotr>\zeropoint \scratchskip\ht\scratchbox \setbox\scratchbox\hbox {\lower\strutdepth\box\scratchbox}% \dp\scratchbox\scratchdimen \ht\scratchbox\scratchskip \fi \OTRSETsavenotes \OTRSEThandleflushedtext\zerocount \ifdim\lastskipinotr>\zeropoint %\vskip \lastskipinotr % hm, gets lost anyway \else % we should not discard skips after here; tricky \fi \OTRSETsetvsize \fi} \def\OTRSETplacebottomnotes {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \ifintermediatefootnotes \placebottomnotes \fi \fi \else \placebottomnotes \fi} \def\OTRSETflushsavednotes {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \flushsavednotes \fi \else \flushsavednotes \fi} \def\OTRSETsavenotes {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \else \savenotes \fi \fi} \appendtoks \OTRSETflushsavednotes \to \OTRSETeverystartofcolumn \def\OTRSETnaturalflush {\bgroup \forgetall % new, needed ! \setbox0\vbox to \columnfreecells\lineheight {\vskip-\topskip \vskip\lineheight \prevdepth\strutdp \unvbox\normalpagebox \vfill}% \setbox2\hbox {\OTRSETplacebottomnotes}% \setbox\scratchbox\hbox {\wd0\zeropoint\box0\box2}% \dp\scratchbox\strutdp \OTRSEThandleflushedtext\plusone \egroup} \newcount\lastcolumnlastcell \def\OTRSEThandleflushedtext#1% {\getnoflines{\ht\scratchbox}% %\wd\scratchbox\textwidth % geen \hsize kan < zijn in bv split tabulate \wd\scratchbox\OTRSETlocalwidth\mofcolumns \doOTRSETsetgridcells {\copy\placeholderboxf} \mofcolumns\columnfirstcell\plusone\noflines {\registeredtextarea1\columnfirstcell\scratchbox}% == \hbox / tricky htcorr == \columnfirstcell \global\columnlastcell\columnfirstcell \global\advance\columnlastcell \noflines \global\lastcolumnlastcell\columnlastcell \global\advance\lastcolumnlastcell \minusone % find next (acceptable) gap, todo: deadcycle \ifcase#1\else \OTRSETfillgapsbetweencells\mofcolumns\columnlastcell \fi \OTRSETfindnextgap % \message{\the\mofcolumns,\the\columnfirstcell,\the\columnfreecells}% % \wait % we cannot adapt the hsize since it may have changed (like % inside a tabulate) so we only change it when there is a % reason to do so \OTRSETsynchronizehsize \OTRSETsetvsize} \def\OTRSETfindnextgap {\OTRSETsetfreecells\mofcolumns\columnlastcell \ifsomefreecolumncells % okay \bubbleOTRSETmarks % not robust because we reenter \else \registerOTRSETmarks % not robust because we reenter \global\advance\mofcolumns \plusone \ifnum\mofcolumns>\nofcolumns \OTRSETdoflush \global\columnlastcell\plusone \global\columnfirstcell\zerocount \OTRSETdoflushfloats \else \the\OTRSETeverystartofcolumn \global\columnlastcell\plusone \global\columnfirstcell\zerocount \fi \fi} \let\OTRSETcheckfreelines\donothing \def\OTRSETfillgapsbetweencells#1#2% col {\ifnum\columngaplimit>\zerocount \donefalse \dostepwiserecurse{#2}\columnmaxcells\plusone {\OTRSETdoifcellelse{#1}\recurselevel {\ifdone \!!countb\recurselevel \advance\!!countb -\!!counta\relax \ifnum\!!countb>\plusone \advance\!!countb \minusone \ifnum\!!countb<\columngaplimit\relax \!!countb\recurselevel \advance\!!countb \minusone \dostepwiserecurse\!!counta\!!countb\plusone {\OTRSETsetgridcell{#1}\recurselevel\copy\placeholderboxc}% %\message{[gap]}% \fi \fi \fi \donefalse} {\ifdone \else \donetrue \!!counta\recurselevel \fi}}% \fi} \appendtoks \OTRSETfillgapsbetweencells\mofcolumns\plusone \to \OTRSETeverystartofcolumn %\def\OTRSETfreezeminimumgap#1% % {\OTRSETgetmaxfreecells{#1}{1}% % \ifnum\columnmaxfreecells>0 % \!!countb=\columnfrmfreecells % \!!counta=\!!counta \advance\!!counta -\columnmaxfreecells % \dorecurse{\columnmaxcells} % {\ifnum\recurselevel<\!!counta\relax % \donetrue % \else\ifnum\recurselevel>\!!countb % \donetrue % \else % \donefalse % \fi\fi % \ifdone % \OTRSETdoifcellelse{#1}{\recurselevel} % {}{\OTRSETsetgridcell{#1}\recurselevel\copy\placeholderboxc}% % \fi}% % \fi} % %\def\OTRSETfillgaps#1#2#3% col from to % {\dostepwiserecurse{#2}{#3}{1} % {\OTRSETdoifcellelse{#1}{\recurselevel} % {}{\OTRSETsetgridcell{#1}\recurselevel\copy\placeholderboxc}}} % %\def\OTRSETfillbotgaps#1#2% col first % {\OTRSETfillgaps{#1}{#2}{\columnmaxcells}} % %\def\OTRSETfilltopgaps#1#2% col last % {\OTRSETfillgaps{#1}{1}{#2}} \newif\ifspancolumnslots \spancolumnslotstrue \newif\ifcheckcolumnspan \checkcolumnspantrue \def\OTRSETcheckwidthgap#1#2% box size {\ifcheckcolumnspan \bgroup \scratchdimen#2% \advance\scratchdimen-\wd#1\relax \ifdim-10\scaledpoint>\scratchdimen \egroup \else\ifdim10\scaledpoint<\scratchdimen \egroup \else \egroup \wd#1=#2% \fi\fi \fi} \def\OTRSETcheckcolumnslot#1% {\enoughcolumncellstrue \ifspancolumnslots\else \OTRSETcheckwidthgap#1\hsize \ifdim\wd#1>\hsize \enoughcolumncellsfalse \fi \fi \ifenoughcolumncells \getnoflines\pagetotal \scratchcounter\noflines \getnoflines{\ht#1}% \columnvcells\noflines \columnhcells\plusone \advance\scratchcounter \columnvcells \relax \ifnum\scratchcounter>\columnfreecells \enoughcolumncellsfalse \fi \fi} \def\OTRSETstoreincolumnslotPAGE#1% {\ifenoughcolumncells % to do \OTRSETsavebox{#1}% \else \OTRSETsavebox{#1}% \fi} \def\OTRSETstoreincolumnslotTOPS#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETcheckcolumnslot{#1}% \ifenoughcolumncells \OTRSETcheckcolumnspace\mofcolumns\columnfirstcell{#1}% \fi \ifenoughcolumncells \OTRSETsetgridcells\mofcolumns\columnfirstcell\columnhcells\columnvcells {\hbox{\copy#1}}% \OTRSETsetvsize \else \OTRSETsavebox{#1}% \fi} \def\OTRSETstoreincolumnslotBOTS#1% {\OTRSETprepareforcolumnslot3{#1}% \edef\savedcolumnlastcell{\the\columnlastcell}% \OTRSETcheckcolumnslot{#1}% \ifenoughcolumncells \advance\columnlastcell -\columnvcells \advance\columnlastcell \plusone % \OTRSETcheckcolumnspace\mofcolumns\columnfirstcell{#1}% \OTRSETcheckcolumnspace\mofcolumns\columnlastcell{#1}% \fi \ifenoughcolumncells \OTRSETsetgridcells\mofcolumns\columnlastcell\columnhcells\columnvcells{\copy#1}% \OTRSETfillgapsbetweencells\mofcolumns\savedcolumnlastcell % -) \OTRSETsetvsize \else \columnlastcell\savedcolumnlastcell \OTRSETsavebox{#1}% \fi} \newdimen\totalcolumnspace \def\columnspacetopoffset{0} \def\columnspacebotoffset{0} \def\OTRSETcheckcolumnspace#1#2#3% col row box {\columnhcells\plusone \totalcolumnspace\zeropoint \scratchcounter#1% \enoughcolumncellstrue \doloop {\advance\totalcolumnspace \OTRSETlocalwidth\scratchcounter\relax % needed \OTRSETcheckwidthgap#3\totalcolumnspace \ifnum\wd#3>\totalcolumnspace\relax \ifnum\scratchcounter=\nofcolumns \enoughcolumncellsfalse \exitloop \else \advance\columnhcells \plusone \advance\scratchcounter \plusone \advance\totalcolumnspace \OTRSETgetparameter\c!distance\scratchcounter \fi \else \exitloop \fi}% \ifenoughcolumncells \getnoflines{\ht#3}% \columnvcells\noflines \OTRSETcheckcolumncells{#1}{#2}\columnhcells\columnvcells \fi} \def\OTRSETcheckcolumncells#1#2#3#4% col row wid hei {\!!countd#1\advance\!!countd#3\advance\!!countd\minusone \!!counte#2\advance\!!counte#4\advance\!!counte\minusone \ifnum\!!counte>\columnmaxcells\relax \enoughcolumncellsfalse \else \enoughcolumncellstrue %\let\columnspacetopoffset\zerocount %\scratchcounter#2\advance\scratchcounter\minusone %\ifnum\scratchcounter>0 % \dostepwiserecurse{#1}\!!countd\plusone % {\ifdim\wd\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint % \let\columnspacetopoffset\plusone % \else\ifdim\dp\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint % \let\columnspacetopoffset\plusone % \fi\fi}% % \advance\!!counte \columnspacetopoffset \relax % \advance\columnvcells \columnspacetopoffset \relax %\fi %\let\columnspacebotoffset\zerocount %\scratchcounter\!!counte %\advance\scratchcounter \columnvcells \relax %\ifnum\scratchcounter>\columnmaxcells\else % \dostepwiserecurse{#1}\!!countd\plusone % {\ifdim\wd\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint % \let\columnspacebotoffset\plusone % \else\ifdim\dp\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint % \let\columnspacebotoffset\plusone % \fi\fi}% % \advance\!!counte \columnspacebotoffset \relax % \advance\columnvcells \columnspacebotoffset \relax %\fi \dostepwiserecurse{#1}\!!countd\plusone % cols {\ifenoughcolumncells \!!countf\recurselevel\relax \dostepwiserecurse{#2}\!!counte\plusone % rows {\ifenoughcolumncells \OTRSETdoifcellelse\!!countf\recurselevel {\enoughcolumncellsfalse}{}% \fi}% \fi}% \fi} \def\OTRSETsetpreferedcolumnslot#1#2% {\doifsomething{#1}{\edef\preferedcolumn{#1}}% \doifsomething{#2}{\edef\preferedrow {#2}}} \OTRSETsetpreferedcolumnslot{\nofcolumns}{1} % default ? \let\pofcolumns\mofcolumns \let\qofcolumns\mofcolumns \newif\ifquitincurrentcolumn \def\OTRSETstoreincolumnslotLRTB#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \mofcolumns\nofcolumns+\currenthcell \plusone\columnmaxcells+\currentvcell{#1}} \def\OTRSETstoreincolumnslotLRBT#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \mofcolumns\nofcolumns+\currenthcell \columnmaxcells\plusone-\currentvcell{#1}} \def\OTRSETstoreincolumnslotRLTB#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \nofcolumns\qofcolumns-\currenthcell \plusone\columnmaxcells+\currentvcell{#1}} \def\OTRSETstoreincolumnslotRLBT#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \nofcolumns\qofcolumns-\currenthcell \columnmaxcells\plusone-\currentvcell{#1}} \def\OTRSETstoreincolumnslotTBLR#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \plusone\columnmaxcells+\currentvcell \mofcolumns\nofcolumns+\currenthcell{#1}} \def\OTRSETstoreincolumnslotTBRL#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \plusone\columnmaxcells+\currentvcell \nofcolumns\qofcolumns-\currenthcell{#1}} \def\OTRSETstoreincolumnslotBTLR#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \columnmaxcells\plusone-\currentvcell \mofcolumns\nofcolumns+\currenthcell{#1}} \def\OTRSETstoreincolumnslotBTRL#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \columnmaxcells\plusone-\currentvcell \nofcolumns\qofcolumns-\currenthcell{#1}} \def\OTRSETstoreincolumnslotFXTB#1% fixed column {\OTRSETcheckprefered \OTRSETdoifcellelse\pofcolumns\plusone {\OTRSETprepareforcolumnslot2}{\OTRSETprepareforcolumnslot1}{#1}% % 1/2 dependent of place, todo \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \pofcolumns \pofcolumns +\currenthcell \preferedrow\columnmaxcells+\currentvcell{#1}} \def\OTRSETstoreincolumnslotFXBT#1% fixed column {\OTRSETcheckprefered \OTRSETdoifcellelse\pofcolumns\columnmaxcells {\OTRSETprepareforcolumnslot2}{\OTRSETprepareforcolumnslot3}{#1}% % 3/2 dependent of place, todo \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \pofcolumns \pofcolumns +\currenthcell \columnmaxcells\preferedrow-\currentvcell{#1}} % \def\OTRSETstoreincolumnslotHERE#1% fixed column % {\OTRSETprepareforcolumnslot2{#1}% % \OTRSETflushtextsofar % \getnoflines\pagetotal \advance\noflines\columnfirstcell % \OTRSETstoreincolumnslotindeed % \mofcolumns\mofcolumns+\currenthcell % \noflines\columnmaxcells+\currentvcell{#1}% % \OTRSETsetvsize} \chardef\OTRSETforcefixedfloats=0 \def\OTRSETstoreincolumnslotHERE#1% fixed column {\ifcase\OTRSETforcefixedfloats \OTRSETstoreincolumnslotSOMEWHERE2{#1}% \else \OTRSETstoreincolumnslotFIXD{#1}% \fi} % this one looses too wide graphics % % \def\OTRSETstoreincolumnslotFIXD#1% fixed column % {\OTRSETprepareforcolumnslot2{#1}% % % no flush text sofar here, beware: no width test % \snaptogrid\vbox{\box#1}} % % still imperfect \def\OTRSETstoreincolumnslotFIXD#1% fixed column {\OTRSETflushtextsofar \ifdim\wd#1>\textwidth \OTRSETstoreincolumnslotSOMEWHERE2{#1}% \else % crappy test / needed for o-pbu-f / will be replaced \getnoflines{\ht#1}% \scratchdimen\noflines\lineheight \advance\scratchdimen\lineheight \advance\scratchdimen\pagetotal\relax \ifdim\scratchdimen<\pagegoal %OTRSETprepareforcolumnslot3{#1}% %ruledvskip\columnslotspacing\lineheight \blank[\columnslotspacing*\v!line]% \snaptogrid\hbox to \hsize{\hss\box#1\hss}% strange, why the centering \blank[\columnslotspacing*\v!line]% \else \OTRSETstoreincolumnslotSOMEWHERE2{#1}% \fi \fi} \def\OTRSETstoreincolumnslotSOMEWHERE#1#2% {\OTRSETprepareforcolumnslot{#1}{#2}% \OTRSETflushtextsofar \getnoflines\pagetotal \advance\noflines\columnfirstcell \OTRSETstoreincolumnslotindeed \mofcolumns\mofcolumns+\currenthcell \noflines\columnmaxcells+\currentvcell{#2}% \OTRSETsetvsize} \def\OTRSETcheckprefered {\ifnum\preferedcolumn<\mofcolumns \let\pofcolumns\mofcolumns \else \let\pofcolumns\preferedcolumn \fi \ifquitincurrentcolumn \ifnum\mofcolumns=\nofcolumns \def\qofcolumns{\mofcolumns}% \else \scratchcounter\mofcolumns \advance\scratchcounter \plusone \edef\qofcolumns{\the\scratchcounter}% \fi \else \let\qofcolumns\mofcolumns \fi} \def\OTRSETstoreincolumnslotindeed#1#2#3#4#5#6#7#8#9% {\OTRSETcheckprefered \enoughcolumncellsfalse \donefalse \dostepwiserecurse{#1}{#2}{#31} {\ifdone \exitloop \else #4=\recurselevel \dostepwiserecurse{#5}{#6}{#71} {\ifdone \exitloop \else #8=\recurselevel \OTRSETcheckcolumnspace\currenthcell\currentvcell{#9}% \ifenoughcolumncells \donetrue \fi \fi}% \fi}% \ifdone \enoughcolumncellstrue \else \enoughcolumncellsfalse \fi \ifenoughcolumncells % \ifnum\columnspacetopoffset>0\message{[+++]}\fi % \ifnum\columnspacebotoffset>0\message{[---]}\fi % \OTRSETsetgridcells\currenthcell\currentvcell\columnhcells\columnvcells % {\vbox % {\ifcase\columnspacetopoffset\else\ruledvskip\columnspacetopoffset\lineheight\fi % \copy#9 % \ifcase\columnspacebotoffset\else\ruledvskip\columnspacebotoffset\lineheight\fi}}% \OTRSETsetgridcells\currenthcell\currentvcell\columnhcells\columnvcells {\copy#9}% \ifnum\currenthcell=\mofcolumns\relax \ifdim\ht\OTRSETsavedfootnotes>\zeropoint \OTRSETsetfreecells\mofcolumns\columnfirstcell \ifsomefreecolumncells \getnoflines{\ht\OTRSETsavedfootnotes}\relax \ifnum\columnfreecells<\noflines \global\somefreecolumncellsfalse \else %\message{[flt]}% float \fi \fi \ifsomefreecolumncells % ok, enough room for notes %\message{[flt]}% float \else % ? \OTRSETsavebox{#9}% \OTRSETerasegridcells\currenthcell\currentvcell\columnhcells\columnvcells %\message{[clr]}% save box \fi \else %\message{[flt]}% float \fi \else %\message{[flt]}% float \fi \OTRSETsetvsize %\message{[fnt]}% float \else %\message{[rej]}% save box \OTRSETsavebox{#9}% \fi} \chardef\columnslotspacing \plusone \def\OTRSETstoreincolumnslot#1% #2 % {method} {box} % alleen last {% no messing around here % \dp#2=\zeropoint % \ifcase\columnslotspacing\else % \setbox#2=\vbox spread \columnslotspacing\lineheight % {\vss\box#2\vss}% % \fi % and don't change this any more % \doifdefinedelse{\strippedcsname\OTRSETstoreincolumnslot#1} % {\getvalue{\strippedcsname\OTRSETstoreincolumnslot#1}{#2}} % {\OTRSETstoreincolumnslotUNKNOWN{#2}}} \executeifdefined{\strippedcsname\OTRSETstoreincolumnslot#1} \OTRSETstoreincolumnslotUNKNOWN} % {#2}} \def\OTRSETstoreincolumnslotUNKNOWN#1% {\OTRSETprepareforcolumnslot2{#1}\copy#1} % {} ? % \def\OTRSETprepareforcolumnslot#1#2% 1=hoog 2=midden 3=laag % {\dp#2\zeropoint % \ifcase\columnslotspacing\else % \scratchdimen\columnslotspacing\lineheight % \ifnum#1=2 \scratchdimen2\scratchdimen \fi % \setbox#2\vbox spread \scratchdimen % {\ifnum#1>1\vss\fi\box#2\relax\ifnum#1<3\vss\fi}% % \fi} \def\OTRSETprepareforcolumnslot#1#2% 1=hoog 2=midden 3=laag {\dp#2\zeropoint \ifcase\columnslotspacing\else \scratchdimen\columnslotspacing\lineheight \ifnum#1=2 \scratchdimen2\scratchdimen \fi \begingroup \advance\scratchdimen\ht#2\relax \ifdim\scratchdimen<\columnmaxcells\lineheight \endgroup \setbox#2\vbox spread \scratchdimen \bgroup \else \endgroup \setbox#2\vbox to \columnmaxcells\lineheight \bgroup \vskip\strutdepth \fi \ifnum#1>1\vss\fi \box#2\relax \ifnum#1<3\vss\fi \egroup \fi} \def\OTRSETdocheckiffloatfits % eigenlijk moet else float anders {\global\ifnofloatpermitted\roomforfloatfalse\else\roomforfloattrue\fi} \def\OTRSETunpreparebox#1% {\ifhbox#1% spans and so \global\setbox\floatbox\vbox{\box#1}% \else \setbox\scratchbox\vbox {\unvbox#1\unskip\unskip\unskip \global\setbox\floatbox\lastbox}% \fi} \def\OTRSETsavebox#1% clean up the skips {\OTRSETunpreparebox{#1}% \dosavefloat} \def\OTRSETresavebox#1% clean up the skips {\OTRSETunpreparebox{#1}% \doresavefloat} \def\OTRSETflushfloatbox % nog verder doorvoeren en meer info in marge {\iftestfloatbox\ruledhbox\fi{\box\floatbox}} \def\OTRSETdoflushfloats {\bgroup \def\OTRSETsavebox##1{\!!doneafalse}% \doloop {\ifsomefloatwaiting \OTRSETskipstart \dogetfloat \ifdim\wd\floatbox>\zeropoint \!!doneatrue \dp\floatbox\zeropoint \OTRSETstoreincolumnslot{TBLR}\floatbox \if!!donea %\message{[flu]}% \else \OTRSETresavebox\floatbox \exitloop \fi \else %\message{[err]}% happens but why? \fi \else \exitloop \fi} \egroup} \newif\ifcentergridcells \centergridcellstrue \newif\ifcentergridcellonly \centergridcellonlyfalse \newif\ifautocentergridcellonly \autocentergridcellonlytrue \def\OTRSETcentergridcells {\ifcentergridcells \dorecurse\nofcolumns {\currenthcell\recurselevel \ifautocentergridcellonly % we prevent centering when the next column is empty % to be checked ! ! ! ! \advance\currenthcell \plusone \centergridcellonlytrue \ifnum\currenthcell>\nofcolumns % ok already \else % only span if there is a next column with content \dorecurse\columnmaxcells {\ifdim\ht\OTRSETgridcell\currenthcell\currentvcell>\zeropoint \centergridcellonlyfalse \else\ifdim\dp\OTRSETgridcell\currenthcell\currentvcell>\zeropoint \centergridcellonlyfalse \fi\fi}% \fi \fi \currenthcell\recurselevel \dorecurse\columnmaxcells {\currentvcell\recurselevel\relax \ifdim\ht\OTRSETgridcell\currenthcell\currentvcell>\zeropoint \ifdim\dp\OTRSETgridcell\currenthcell\currentvcell=\zeropoint \bgroup \setbox\scratchbox\OTRSETgetgridcell\currenthcell\currentvcell \getnoflines{\ht\scratchbox}% \!!counta\currentvcell \advance\!!counta -\noflines \advance\!!counta \plusone % first col always ok \!!countb\currenthcell \!!countc\currenthcell \advance\!!countc \plusone \!!donebtrue \ifcentergridcellonly \!!countc\maxdimen \fi \dostepwiserecurse\!!countc\nofcolumns\plusone {\if!!doneb \let\xrecurselevel\recurselevel \dostepwiserecurse\!!counta\currentvcell\plusone {\ifdim\ht\OTRSETgridcell\xrecurselevel\recurselevel>\zeropoint \!!donebfalse \else\ifdim\wd\OTRSETgridcell\xrecurselevel\recurselevel>\zeropoint \!!donebfalse \fi\fi}% \if!!doneb \!!countb\xrecurselevel \fi \fi}% \totalcolumnspace\OTRSETlocalwidth\currenthcell \dostepwiserecurse\!!countc\!!countb\plusone {\advance\totalcolumnspace \OTRSETlocalwidth\recurselevel \advance\totalcolumnspace \OTRSETgetparameter\c!distance\recurselevel}% \ifdim\totalcolumnspace>\wd\scratchbox \setbox\scratchbox\hbox to \totalcolumnspace{\hss\box\scratchbox\hss}% \fi \OTRSETsetgridcell\currenthcell\currentvcell\box\scratchbox \egroup \fi \fi}}% \fi} \def\OTRSETinitializecolumns% once per page {\columnspreadtrue % todo \ifcolumnspread \global\rofcolumns\getvalue{\??mc\OTRSETidentifier\c!nright}% \global\lofcolumns\getvalue{\??mc\OTRSETidentifier\c!nleft}% \global\tofcolumns\rofcolumns \relax \ifodd\realpageno\relax \global\nofcolumns\rofcolumns \else \global\advance\tofcolumns\lofcolumns \global\nofcolumns\lofcolumns \fi \else \global\nofcolumns\getvalue{\??mc\OTRSETidentifier\c!n}% \global\rofcolumns\nofcolumns \global\lofcolumns\nofcolumns \global\tofcolumns\nofcolumns \fi \OTRSETassignwidths \global\mofcolumns\plusone \columnerasegridboxes} % vanaf hier: \def\definecolumnset {\dodoubleargument\dodefinecolumnset} \def\dodefinecolumnset[#1][#2]% {\getparameters[\??mc#1] [\c!direction=\v!right, \c!balance=\v!no, \c!distance=1.5\bodyfontsize, % controleren \c!n=2, \c!nleft=\getvalue{\??mc#1\c!n}, \c!nright=\getvalue{\??mc#1\c!n}, \c!width=\v!fit, \c!lines=0, \c!start=0, #2]% \dorecurse{\getvalue{\??mc#1\c!nleft}} % todo {\dododefinecolumnset[#1][\recurselevel]}% \dorecurse{\getvalue{\??mc#1\c!nright}} % todo {\dododefinecolumnset[#1][\recurselevel]}% % redo framed settings \setupcolumnset[#1][1][\c!distance=\!!zeropoint]} \def\dododefinecolumnset[#1][#2]% {\presetlocalframed [\??mc#1#2]% \setupcolumnset [#1][#2] [\c!offset=\v!overlay, \c!frame=\v!off, \c!align=, \c!lines=0,% really needed since c!regels is now part of framed \c!width=\getvalue{\??mc#1\c!width}, \c!distance=\getvalue{\??mc#1\c!distance}]} \def\setupcolumnset {\dotripleargument\dosetupcolumnset} \def\dosetupcolumnset[#1][#2][#3]% {\ifthirdargument \def\docommand##1% {\doifelse{##1}\v!each {\dorecurse{\getvalue{\??mc#1\c!n}}{\docommand\recurselevel}} {\getparameters[\??mc#1##1][#3]}}% \processcommalist[#2]\docommand \else \getparameters[\??mc#1][#2]% \fi} \definecolumnset[\s!default][\c!n=2] % fallback \def\OTRSETgotonextpage {\vfill\eject \relax\ifnum\mofcolumns>\plusone \OTRSETgotocolumn[\v!last]% \ifnum\mofcolumns>\plusone \OTRSETgotocolumn[\v!force]% \fi \fi} \let\OTRSETgotonextpageX\OTRSETgotonextpage % will become obsolete \def\OTRSETgotocolumn {\dosingleempty\doOTRSETgotocolumn} \def\doOTRSETgotoCOLROW#1% |* {\bgroup % really needed \splitstring#1\at*\to\column\and\row \bgroup \ifx\column\empty\else\expanded{\doOTRSETgotoCOLUMN{\column}}\fi \egroup \bgroup \ifx\row \empty\else\expanded{\doOTRSETgotoROW {\row }}\fi \egroup \egroup} \def\doOTRSETgotoCOLUMN#1% {\ifnum\mofcolumns=#1\else \vfill\eject % \doejectpage\eject \doloop {\ifnum\mofcolumns=#1\relax \exitloop \else \OTRSETdummycolumn \fi}% \fi} \def\doOTRSETgotoROW#1% {\ifnum#1>1 \scratchcounter\zerocount \currenthcell\mofcolumns \currentvcell#1\advance\currentvcell \minusone \dorecurse\currentvcell {\OTRSETdoifcellelse\mofcolumns\recurselevel\donothing {\advance\scratchcounter\plusone}} \getnoflines\pagetotal \advance\scratchcounter-\noflines \ifnum\scratchcounter>\zerocount \dorecurse\scratchcounter{\line{\strut}}% \fi \fi \OTRSETsetvsize} \def\doOTRSETgotocolumn[#1]% yes|force|first|last||* {\processallactionsinset [#1] [ \v!yes=>\OTRSETdummycolumn, \v!no=>,% not supported \v!force=>\OTRSETdummycolumn, \v!first=>\expanded{\doOTRSETgotoCOLUMN{1}}, \v!last=>\expanded{\doOTRSETgotoCOLUMN{\the\nofcolumns}}, \s!default=>\OTRSETdummycolumn, \s!unknown=>\expanded{\doOTRSETgotoCOLROW{\commalistelement}}]} % to be documented and tested, not yet that robust % \def\OTRSETgotocell#1#2% % {\endgraf % \gdef\gotocellcounter{0}% % \doloop % {\ifnum\mofcolumns<#1\relax % \doglobal\increment\gotocellcounter\relax % \ifnum\gotocellcounter>#1\relax % \line{\strut}\crlf % \line{\strut}\crlf % \column % \writestatus{columnset}{quitting goto cell}% % \exitloop % \else % \column % \fi % \else % \exitloop % \fi}% % \ifnum\mofcolumns=#1\relax % \ifnum#2>1 % \scratchcounter\zerocount % \currenthcell\mofcolumns % \currentvcell#2\advance\currentvcell \minusone % \dorecurse\currentvcell % {\OTRSETdoifcellelse\mofcolumns\recurselevel\donothing % {\advance\scratchcounter\plusone}} % \getnoflines\pagetotal % \advance\scratchcounter-\noflines % \ifnum\scratchcounter>\zerocount % \dorecurse\scratchcounter{\line{\strut}}% % \fi % \fi % \fi % \OTRSETsetvsize} \def\OTRSETgotocell#1#2% obsolete: now \column[#1*#2] {\endgraf \doOTRSETgotoCOLUMN{#1}% \doOTRSETgotoROW {#2}} \def\OTRSETdummycolumn {\verticalstrut \vskip-\struttotal \vfill \eject} \newcounter\columnsetlevel \let\currentcolumnset\empty \chardef\OTRSETfinish\zerocount \def\startcolumnset {\dodoubleempty\dostartcolumnset} \def\dostartcolumnset[#1][#2]% {\increment\columnsetlevel\relax \globallet\localcolumnmaxcells\!!zerocount \global\chardef\OTRSETfinish\zerocount \resetOTRSETmarks \ifnum\columnsetlevel=\plusone \bgroup \saveinterlinespace \globallet\columnsetpage\!!plusone \def\currentcolumnset{#2}% \insidecolumnstrue % will be different flag in addition \activateotr{SET}{ONE}% andere naam, activate or so \doifelsenothing{#1} {\globallet\OTRSETlist\s!default} {\xdef\OTRSETlist{#1}}% \OTRSETstartnextpage \OTRSETassignwidths \OTRSETsethsize \else \bgroup \fi} % \setuplayout[grid=yes] \definecolumnset[example] \showgrid % \starttext % \startcolumnset[example] % \input knuth \endgraf \input knuth % \placetable{table}{\framed[width=\makeupwidth,height=4cm]{Hello}} % \input knuth \endgraf \input knuth % \stopcolumnset % \input knuth \endgraf \input knuth % \stoptext \def\OTRSETflushleftovers % new per 13/4/2006 {\OTRSETdoifcellelse{1}{1} {\bgroup \OTRSETcentergridcells \chardef\OTRSETbalancemethod\plusone \OTRSETreducegridbox \global\setbox\OTRfinalpagebox\OTRSETmakegridbox \ht\OTRfinalpagebox\textheight % signals output that there is content \OTRSETdofinaloutput \globallet\OTRSETbalht\zeropoint \egroup} {}} \def\stopcolumnset {\relax \ifnum\columnsetlevel=\plusone \endgraf % needed, else wrong vsize in one par case \global\chardef\OTRSETfinish\plusone % no, extra page \pagebreak % (test on pascal toc) \dostopcolumnset \egroup \global\notelimittrue % brrr, untested and fuzzy \setvsize \sethsize \ifvoid\OTRfinalpagebox\else % probably balanced \ifdim\ht\OTRfinalpagebox<\textheight \snaptogrid[\v!page]\hbox{\box\OTRfinalpagebox}% \else \box\OTRfinalpagebox \fi \fi \global\chardef\OTRSETfinish\zerocount \ifsomefloatwaiting \setvsize \pagebreak \setvsize \fi \OTRSETflushleftovers \else \egroup \fi \decrement\columnsetlevel\relax} \chardef\OTRSETbalancemethod\zerocount \def\dostopcolumnset {%\OTRSETdofinalflushfloats % yes/no \ifcase\OTRSETbalancemethod \OTRSETnobalance \else \OTRSETdobalance \fi} \def\OTRSETdobalance {\OTRSETnobalance} \def\localcolumnmaxcells{0} % don't loose empty 1page/1column with area (example **) % % \definecolumntextarea[title][x=1,y=4,nx=2,ny=7,state=start] % \setupcolumntextareatext[title][\vtop to 5cm{a\\b\\b\\d}] % % \starttext % \startcolumnset \dorecurse{1}{\input tufte \par} \stopcolumnset % \stoptext % better: \def\definecolumnsetarea {\definecolumntextarea} \def\setupcolumnsetarea {\setupcolumntextarea} \def\setupcolumnsetareatext{\setupcolumntextareatext} \def\OTRSETnobalance {\iflastcolumnfootnotes % testen ! optie % inhibit flush of floats ! % todo: nothing if no footnotes, else empty page \dostepwiserecurse\mofcolumns\nofcolumns\plusone {\vskip-\struttotal\verticalstrut\vfill\eject}% \else \ifnum\mofcolumns>\plusone \donetrue \else\ifdim\pagetotal>\zeropoint % too dangerous, we loose data \donetrue \else \donefalse \fi\fi \ifdone \ifnum\mofcolumns=\nofcolumns \OTRSETflushfinalfootnotes \else % probably todo \fi \vfill \eject \registerOTRSETmarks % brr, may result in empty page after nicely fit text % or if left, then lost of first column only text \ifnum\mofcolumns>\plusone \OTRSETdofinalflush \OTRSETdofinaloutput \fi \fi \fi} \def\OTRSETstartnextpage {\doifsomething\OTRSETlist {\getfromcommacommand[\OTRSETlist][1]% \global\let\OTRSETidentifier\commalistelement \doifundefined{\??mc\OTRSETidentifier\c!n} {\globallet\OTRSETidentifier\s!default}% \let\newcommalistelement\empty \doglobal\replaceincommalist\OTRSETlist1% \OTRSETrestart}} \def\OTRSETrestart % weed {\OTRSETinitializefeatures \OTRSETflushpreposttext \OTRSETinitializecolumns \OTRSETcheckinsert \OTRSETcheckgrid \OTRSETsetvsize \OTRSETsethsize % or local ? \OTRSETsetplaceholders \OTRSEThandlepreposttext \initializecolumntextareas % name ! \OTRSETcheckstartcells \OTRSETsetvsize} % \def\OTRSETcheckstartcells % {\dorecurse\nofcolumns % {\bgroup % \mofcolumns\recurselevel % \scratchcounter\currentcolumnstartcell % uses \mofcolumns, returns 1 or more % \advance\scratchcounter \minusone % \dorecurse\scratchcounter % {\OTRSETdoifcellelse\mofcolumns\recurselevel % \donothing{\OTRSETsetgridcell\mofcolumns\recurselevel\copy\placeholderboxe}}% % \egroup}} \def\OTRSETcheckstartcells {\dorecurse\nofcolumns {\bgroup \mofcolumns\recurselevel \OTRSETsetcorrectnofcells\currentcolumnstartcell \advance\scratchcounter \minusone \dorecurse\scratchcounter {\OTRSETdoifcellelse\mofcolumns\recurselevel \donothing{\OTRSETsetgridcell\mofcolumns\recurselevel\copy\placeholderboxe}}% \egroup}} % \OTRSEToutput % {\dontcomplain % new, get rid of overfull message (to be sorted out) % \OTRSETnaturalflush % %\OTRSETstartnextpage % \OTRSETdoflushfloats % actually belongs in \flushsavedfloats (but goes wrong) % \OTRSETcheckfreelines % \OTRSETchecksidefloat} \OTRSEToutput {\dontcomplain % new, get rid of overfull message (to be sorted out) \doloop {\OTRSETnaturalflush %\OTRSETstartnextpage % no \OTRSETdoflushfloats % actually belongs in \flushsavedfloats (but goes wrong) \OTRSETcheckfreelines \ifsomefreecolumncells \exitloop \else % flush page and get rid of more floats if present \fi}% \OTRSETchecksidefloat} \def\OTRSETinitializefeatures {% number of lines % new: raw \getrawnoflines\textheight\xdef\columnmaxcells{\the\noflines}% % direction \doifelsevalue{\??mc\OTRSETidentifier\c!direction}\v!right {\chardef\columndirection\zerocount} {\chardef\columndirection\plusone}% % balancing \chardef\OTRSETbalancemethod\zerocount \processaction [\getvalue{\??mc\OTRSETidentifier\c!balance}] [ \v!yes=>\chardef\OTRSETbalancemethod\plusone, \v!top=>\chardef\OTRSETbalancemethod\plustwo, \v!bottom=>\chardef\OTRSETbalancemethod\plusthree]} % keep 'm for a while % % \installoutput\OTRSETflushpreposttext % {\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}% % \ifcarryoverfootnotes \else % \global\setbox\postcolumnbox\vbox{\placebottomnotes}% % \fi} % % to be tested on 'boekinhoud' in 'pascal/demo-bbi' % % junk ! ! ! ! ! % %\installoutput\OTRSETflushpreposttext % {\global\setbox\precolumnbox\vbox % {\unvbox\normalpagebox % \strut\vskip-2\lineheight\strut}% we want a proper depth % \ifcarryoverfootnotes \else % \global\setbox\postcolumnbox\vbox{\placebottomnotes}% % \fi} % % \starttext % \definecolumnset[two][n=2] % \startcolumnset[two] \dorecurse{4}{\input tufte } \stopcolumnset % \input tufte % \startcolumnset[two] \input tufte \stopcolumnset % \stoptext % % \installoutput\OTRSETflushpreposttext % {\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}% % \dp\precolumnbox\strutdepth % \ifcarryoverfootnotes \else % \global\setbox\postcolumnbox\vbox{\placebottomnotes}% % \fi} % test: % % \setupcolumnset [test-1] [balance=yes] % \setupcolumnset [test-2] [balance=yes] % \setupcolumnsetlines[test-1][1][1] [8] % \setupcolumnsetlines[test-1][1][2][10] % \startcolumnset [test-1] \dorecurse {1}{\input tufte \par} \stopcolumnset % \startcolumnset [test-2] \dorecurse {2}{\input ward \par} \stopcolumnset \ifx\lastskipinotr\undefined \newskip\lastskipinotr \fi \installoutput\OTRSETflushpreposttext {\global\setbox\precolumnbox\vbox {\unvbox\normalpagebox \global\lastskipinotr\lastskip}% \ifdim\lastskipinotr>\zeropoint \global\setbox\precolumnbox\hbox {\lower\strutdepth\box\precolumnbox}% \fi \dp\precolumnbox\strutdepth \ifcarryoverfootnotes \else \global\setbox\postcolumnbox\vbox{\placebottomnotes}% \fi} \let\precolumnlines \!!zerocount \let\postcolumnlines\!!zerocount \def\OTRSEThandlepreposttext {\ifdim\ht\precolumnbox>\zeropoint % new \getnoflines{\ht\precolumnbox}% \edef\precolumnlines{\the\noflines}% \doOTRSETsetgridcells {\copy\placeholderboxe} \plusone\plusone\nofcolumns\noflines % normal version (single column set) % {\box\precolumnbox}% % compensated for bodyfont change {\hbox {\OTRSETsetcorrectcellht \raise\scratchdimen\box\precolumnbox}}% \else \let\precolumnlines\!!zerocount \fi \ifdim\ht\postcolumnbox>\zeropoint % new, otherwise empty bottom line \getnoflines{\ht\postcolumnbox}% \edef\postcolumnlines{\the\noflines}% \advance\columnfreecells -\noflines \advance\columnfreecells \plusone \doOTRSETsetgridcells {\copy\placeholderboxe} \plusone\columnfreecells\nofcolumns\noflines {\box\postcolumnbox}% \else \let\postcolumnlines\!!zerocount \fi} \def\OTRSETchecksidefloat {} % {\sidefloatoutput} \def\OTRSETfinalsidefloatoutput {} \def\OTRSETcheckgrid {\topskip1\topskip \ifforcecolumngrid \widowpenalty\zerocount \clubpenalty\zerocount \brokenpenalty\zerocount \fi} \def\OTRSETcheckinsert {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \OTRSETforceinserts \else \OTRSETinhibitinserts \fi \else \OTRSETforceinserts \fi} \def\OTRSETforceinserts {\enablenotes} \def\OTRSETinhibitinserts {\disablenotes} % undocumented goodie \def\definecolumnsethsize#1#2#3#4% will be improved/speed up {\bgroup \def\OTRSETidentifier{#1}% \ifcase\columnsetlevel\relax \mofcolumns\plusone \OTRSETinitializecolumns \OTRSETassignwidths \OTRSETsethsize \fi \!!counta#2\!!countb#3\docalculatecolumnsetspan \expandafter\egroup\expandafter\edef\expandafter #4\expandafter{\the\!!widtha}} % interface to footnotes \def\OTRSETassignwidths {%\scratchdimen\makeupwidth \freezetextwidth \scratchdimen\textwidth % \scratchcounter\zerocount \dorecurse\nofcolumns {\doifelsevalue{\??mc\OTRSETidentifier\recurselevel\c!width}\v!fit {\advance\scratchcounter \plusone } {\advance\scratchdimen -\getvalue{\??mc\OTRSETidentifier\recurselevel\c!width}}% \advance\scratchdimen -\getvalue{\??mc\OTRSETidentifier\recurselevel\c!distance}}% \ifcase\scratchcounter\else \divide\scratchdimen \scratchcounter \fi \setgvalue{\??mc\??mc\c!width}{0}% \dorecurse\nofcolumns {\doifelsevalue{\??mc\OTRSETidentifier\recurselevel\c!width}\v!fit {\dimen0=\scratchdimen} {\setgvalue{\??mc\??mc\c!width}{1}% \dimen0=\getvalue{\??mc\OTRSETidentifier\recurselevel\c!width}}% \setxvalue{\??mc\recurselevel\??mc\c!width}{\the\dimen0}}} \def\OTRSETlocalwidth#1% {\getvalue{\??mc\number#1\??mc\c!width}} \newbox\placeholderboxa \newbox\placeholderboxb \newbox\placeholderboxc \newbox\placeholderboxd \newbox\placeholderboxe \newbox\placeholderboxf \def\columnplaceholder#1#2% {\hbox {\localcolortrue \setbox\scratchbox\hbox to \hsize {\iftracecolumnset \incolortrue \localcolortrue \hskip-.5ex% \startcolor[columnset:#2]\vrule\!!width1ex\!!height.5ex\!!depth.5ex\stopcolor \fi \hss}% \ifcase#1\relax \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \wd\scratchbox\zeropoint \else \wd\scratchbox\hsize \ht\scratchbox\strutht \dp\scratchbox\strutdp \fi \box\scratchbox}} \definepalet [columnset] [a=cyan,b=green,c=blue,d=red,e=magenta,f=darkgray] \def\OTRSETsetplaceholders {\global\setbox\placeholderboxa\columnplaceholder0a% \global\setbox\placeholderboxb\columnplaceholder0b% \global\setbox\placeholderboxc\columnplaceholder0c% \global\setbox\placeholderboxd\columnplaceholder0d% \global\setbox\placeholderboxe\columnplaceholder0e% \global\setbox\placeholderboxf\columnplaceholder1f} \def\doOTRSETshowstatus {\llap{\incolortrue \localcolortrue \tt\tfxx \startcolor[blue](\the\vsize->\number\columnfirstcell\#\number\columnfreecells)\stopcolor \hskip\leftskip}} \def\OTRSETshowstatus {\iftracecolumnset \doOTRSETshowstatus \fi} % \appendtoks \OTRSETshowstatus \to \everypar % page contents \def\OTRSETdopagecontents#1#2% takes two args: \box \unvbox {\vbox to \textheight{\forgetall#1#2\pushproperties}} \def\OTRSETsomepagefloat {\def\floatmethod{PAGE}\OTRSETsomeslotfloat} % check \def\OTRSETsomeherefloat {\def\floatmethod{HERE}\OTRSETsomeslotfloat} % check \def\OTRSETsomeelsefloat {\def\floatmethod{HERE}\OTRSETsomeslotfloat} % check \def\OTRSETsomefixdfloat {\def\floatmethod{FIXD}\OTRSETsomeslotfloat} % check \def\OTRSETsometopfloat {\def\floatmethod{TOPS}\OTRSETsomeslotfloat} % check \def\OTRSETsomebottomfloat{\def\floatmethod{BOTS}\OTRSETsomeslotfloat} % check \def\OTRSETflushfloatbox % nog verder doorvoeren en meer info in marge {\iftestfloatbox\ruledhbox\fi{\box\floatbox}} \def\OTRSETsomeslotfloat[#1]% {\setbox\floatbox\vbox{\flushfloatbox}% \dp\floatbox\strutdp \@EA\uppercasestring\floatmethod\to\floatmethod \OTRSETstoreincolumnslot\floatmethod\floatbox \doinsertfloatinfo} % kind of new, looks much like OTRONE, but not entirely \def\OTRSETdosettopinserts {\bgroup \ifsomefloatwaiting \noffloatinserts\zerocount \let\totaltopinserted\!!zeropoint \OTRSETdodosettopinserts \ifnum\@@bknbottom=\zerocount \ifnum\@@bknlines>\zerocount \ifdim\totaltopinserted>\zeropoint\relax \dimen0\lineheight \dimen0=\@@bknlines\dimen0 \advance\dimen0 \totaltopinserted\relax \ifdim\dimen0>\textheight % \vsize %%%%%%%%% \textheight \showmessage\m!floatblocks8{\@@bknlines}% \vfilll\eject \fi \fi \fi \fi \fi \egroup} \def\OTRSETdodosettopinserts {\ifnum\noffloatinserts<\noftopfloats \dogetfloat \ifdim\topinserted=\zeropoint\relax \topofinserttrue \else \topofinsertfalse \fi \setbox\scratchbox\vbox % kan beter ! {\forgetall \iftopofinsert \ifdim\OTRSETtopoffset=\zeropoint \moveongrid[\v!top] \fi \else \betweenfloatblanko % inserts can't look back \fi \flushfloatbox \blank[\@@bkspaceafter]}% \global\advance\topinserted \ht\scratchbox\relax \ifdim\topinserted>\vsize % was \textheight\relax \OTRSETresavebox\floatbox \noffloatinserts\noftopfloats\relax \global\advance\topinserted -\ht\scratchbox \let\OTRSETdodosettopinserts\relax % to be tested \else \xdef\totaltopinserted{\the\topinserted}% \insert\topins{\forgetall\box\scratchbox}% interlineskip ? \ifsomefloatwaiting \advance\noffloatinserts \plusone \else \noffloatinserts\noftopfloats\relax \fi \dofloatflushedinfo \fi \else \ifsomefloatwaiting \showmessage\m!floatblocks6{\the\noftopfloats}% \fi \let\OTRSETdodosettopinserts\relax \fi \OTRSETdodosettopinserts} \def\OTRSETdosetbotinserts {\bgroup \ifsomefloatwaiting \noffloatinserts\zerocount \OTRSETdodosetbotinserts \fi \egroup} \def\OTRSETdodosetbotinserts {\ifnum\noffloatinserts<\nofbotfloats\relax \dogetfloat \global\advance\botinserted \ht\floatbox\relax \global\advance\botinserted \dp\floatbox\relax \global\advance\botinserted \floattopskip\relax \ifdim\botinserted<\pagegoal\relax \insert\botins {\forgetall \blank[\@@bkspacebefore]% \flushfloatbox}% \ifsomefloatwaiting \advance\noffloatinserts \plusone \else \noffloatinserts\nofbotfloats \fi \dofloatflushedinfo \else \OTRSETresavebox\floatbox \noffloatinserts\nofbotfloats\relax \fi \global\nofloatpermittedtrue % vgl topfloats s! \else \ifsomefloatwaiting \showmessage\m!floatblocks7{\the\nofbotfloats}% \fi \let\OTRSETdodosetbotinserts\relax \fi \OTRSETdodosetbotinserts} \let\OTRSETdosetbothinserts\relax \def\OTRSETdotopinsertions {\ifvoid\topins\else \ifvoid\columntopbox\mofcolumns \columnsettopbox\mofcolumns\box\topins \else \columnsettopbox\mofcolumns\vbox % temp, must be better {\forgetall \offinterlineskip \box\columntopbox\mofcolumns \box\topins} \fi \fi \global\topinserted\zeropoint\relax} % goes away \def\OTRSETdobotinsertions {\ifvoid\botins \else \columnsetbotbox\mofcolumns\box\botins % \else % \columnsetbotbox\mofcolumns\vbox % temp, must be better % {\forgetall % \offinterlineskip % \box\botins % \box\columnbotbox\mofcolumns} \fi \global\botinserted\zeropoint\relax} % goes away % set ipv text % left right 1 2 3 +1 +2 +3 \let\columnleftareas \empty \let\columnrightareas\empty % links rechts => odd, even, n, named \def\definecolumntextarea {\dotripleempty\dodefinecolumntextarea} \def\dodefinecolumntextarea[#1][#2][#3]% y=0 is mogelijke en handig ! {\ifthirdargument \doifinsetelse{#2}{\v!both,\v!fixed} {\definecolumntextarea[#1][\v!left ][\c!type=#2,#3]% \definecolumntextarea[#1][\v!right][\c!type=#2,#3]} {\doifelse{#2}\v!next {\doifoddpageelse {\definecolumntextarea[#1][\v!right][\c!type=#2,#3]} {\definecolumntextarea[#1][\v!left ][\c!type=#2,#3]}} {\presetlocalframed [\??mt#1#2]% \processaction[#2] % \doglobal voorkomt stack build up [ \v!left=>\doglobal\addtocommalist{#1}\columnleftareas, \v!right=>\doglobal\addtocommalist{#1}\columnrightareas]% \getparameters[\??mt#1#2] [\c!x=1,\c!y=1,\c!nx=1,\c!ny=1,\c!clipoffset=2\lineheight, \c!leftoffset=\zeropoint,\c!rightoffset=\zeropoint, \c!offset=\v!overlay,\c!strut=\v!no,\c!frame=\v!off, \c!type=#2,\c!page=1,\c!state=\v!stop,#3]}}% \else \definecolumntextarea[#1][\v!next][#2]% \fi} \def\setupcolumntextarea {\dotripleempty\dosetupcolumntextarea} \def\dosetupcolumntextarea[#1][#2][#3]% {\ifthirdargument \doifelse{#2}\v!both {\setupcolumntextarea[#1][\v!left ][#3]% \setupcolumntextarea[#1][\v!right][#3]} {\doifelse{#2}\v!next {\doifoddpageelse {\setupcolumntextarea[#1][\v!right][#3]} {\setupcolumntextarea[#1][\v!left][#3]}} {\getparameters[\??mt#1#2][#3]}}% \else \setupcolumntextarea[#1][\v!next][#2]% \fi} \def\docheckcolumnsetareapage#1#2% {\ifnum\getvalue{\??mt#1\c!page}>\plusone \doifelsevalue{\??mt#1\c!type}\v!fixed {\ifnum\columnsetpage=\getvalue{\??mt#1\c!page}\relax \donetrue\else\donefalse \fi} {\ifnum\columnsetpage<\getvalue{\??mt#1\c!page}\relax \donefalse\else\donetrue \fi}% \else \donetrue \fi} \def\initializecolumntextareas {\ifodd\realpageno \doinitializecolumntextareas\columnrightareas\v!right \else \doinitializecolumntextareas\columnleftareas\v!left \fi} \def\doinitializecolumntextareas#1#2% {\def\docommand##1% {\docheckcolumnsetareapage{##1#2}\plusone \ifdone \donefalse \processaction [\getvalue{\??mt##1#2\c!state}] [ \v!start=>\donetrue, \v!repeat=>\donetrue, \s!unknown=>\doperformtest\commalistelement\donetrue\donefalse]% \ifdone\dodoinitializecolumntextareas{##1}{#2}\fi \fi}% \processcommacommand[#1]\docommand} \def\dodoinitializecolumntextareas#1#2% {\doOTRSETsetgridcells {\copy\placeholderboxd} {\getvalue{\??mt#1#2\c!x }}{\getvalue{\??mt#1#2\c!y }} {\getvalue{\??mt#1#2\c!nx}}{\getvalue{\??mt#1#2\c!ny}} {\copy\placeholderboxd}} \def\placecolumntextareas {\ifodd\realpageno \doplacecolumntextareas\columnrightareas\v!right \else \doplacecolumntextareas\columnleftareas\v!left \fi} \def\doplacecolumntextareas#1#2% global ? {\bgroup \forgetall \def\docommand##1% {\docheckcolumnsetareapage{##1#2}\zerocount \ifdone \donefalse \processaction [\getvalue{\??mt##1#2\c!state}] [ \v!start=>\donetrue\doglobal\removefromcommalist{##1}#1, \v!repeat=>\donetrue, \s!unknown=>\doperformtest\commalistelement\donetrue\donefalse]% \ifdone \dodoplacecolumntextareas{##1}{#2}% \else \doglobal\removefromcommalist{##1}#1% \fi \fi}% \processcommacommand[#1]\docommand \egroup} % \page[left] % \definecolumntextarea[intro][left][x=1,y=1,nx=4,ny=20,state=start,background=introlayer] % \setupcolumntextareatext[intro][left][\setups{intro}] % \flushcolumntextareas \def\flushcolumntextareas {\initializecolumntextareas \setvsize} \def\columntextlastbackspace{\backspace} % beware, we have clipping offsets of 2\lineheight by default \def\columntextareaparameter#1% {\csname\??mt\currentcolumntestarea#1\endcsname} \def\dodoplacecolumntextareas#1#2% {\def\currentcolumntestarea{#1#2}% \!!counta\columntextareaparameter\c!x \!!countb\columntextareaparameter\c!nx \docalculatecolumnsetspan \!!heighta\columntextareaparameter\c!ny\lineheight % wrong % \ifnum\columntextareaparameter\c!y=\zerocount % \advance\!!heighta -\lineheight % \advance\!!heighta \topskip % \fi % \advance\!!heighta -\lineheight % option \ifnum\columntextareaparameter\c!y=\plusone \advance\!!heighta -\lineheight \advance\!!heighta \topskip \fi % \setbox\scratchbox\vbox {\donetrue\localframed [\??mt\currentcolumntestarea] [\c!location=,% new (*) \c!width=\!!widtha,\c!height=\!!heighta,\c!lines=] {\columntextareaparameter\empty}}% \!!counta\columntextareaparameter\c!x \!!countb\columntextareaparameter\c!y \advance\!!countb \columntextareaparameter\c!ny \advance\!!countb \minusone % new (*) \doif{\columntextareaparameter\c!location}\v!depth {\setbox\scratchbox\hbox{\lower\strutdepth\box\scratchbox}% \dp\scratchbox\zeropoint \ht\scratchbox\!!heighta}% % \setbox0\hbox {\ifcase\!!countc \copy\scratchbox % \box \else \clip [ %\c!topoffset=\columntextareaparameter\c!clipoffset,% %\c!bottomoffset=\columntextareaparameter\c!clipoffset,% %\c!leftoffset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!rightoffset=\columntextareaparameter\c!rightoffset,% \c!width=\!!widthb,% \c!height=\!!heighta]% {\copy\scratchbox}% \fi}% \OTRSETsetgridcell\!!counta\!!countb\box0 \ifcase\!!countc\else \advance\!!counta \columntextareaparameter\c!nx \advance\!!counta -\!!countc \advance\!!widtha -\!!widthb \setbox0\hbox {\hskip-\namedlayoutparameter\v!odd\c!backspace \clip [ %\c!topoffset=\columntextareaparameter\c!clipoffset,% %\c!bottomoffset=\columntextareaparameter\c!clipoffset,% %\c!rightoffset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!leftoffset=\columntextareaparameter\c!leftoffset,% \c!width=\!!widtha,% \c!height=\!!heighta,% \c!hoffset=\!!widthb]% {\copy\scratchbox}}% \OTRSETsetgridcell\!!counta\!!countb\box0% \fi} \def\setupcolumntextareatext {\dotripleempty\dosetupcolumntextareatext} \long\def\dosetupcolumntextareatext[#1][#2][#3]% {\ifthirdargument \doifelse{#2}\v!both {\setvalue{\??mt#1\v!left }{#3}% \setvalue{\??mt#1\v!right}{#3}} {\doifelse{#2}\v!next {\doifoddpageelse {\setvalue{\??mt#1\v!right}{#3}}% {\setvalue{\??mt#1\v!left }{#3}}}% {\setvalue{\??mt#1#2}{#3}}}% \else \setupcolumntextareatext[#1][\v!next][{#2}]% \fi} \def\docalculatecolumnsetspan {% \!!counta <= x % \!!countb <= nx % \!!widtha => total width % \!!widthb => left width % \!!countc => left cols \!!widtha\!!countb\textwidth % we assume equal widths \advance\!!countb \!!counta \advance\!!countb \minusone \ifnum\!!countb>\nofcolumns \!!countc\!!countb \advance\!!countc -\nofcolumns \!!countb\nofcolumns \else \!!countc\zerocount \fi \advance\!!counta \plusone \dostepwiserecurse\!!counta\!!countb\plusone {\advance\!!widtha\OTRSETgetparameter\c!distance\recurselevel}% \!!widthb\!!widtha \advance\!!widthb -\!!countc\textwidth \ifodd\realpageno \else % tricky, assumes that we keep there \ifcase\!!countc\else % nog niet ok voor enkel/doublesided \advance\!!widtha \namedlayoutparameter\v!even\c!backspace \advance\!!widtha \namedlayoutparameter\v!odd \c!backspace \advance\!!widthb \namedlayoutparameter\v!even\c!backspace \dorecurse\!!countc {\advance\!!widtha\OTRSETgetparameter\c!distance\recurselevel}% \fi \fi} \def\columnsetspanhsize{\textwidth} \def\setcolumnsetspanhsize#1#2% x nx / uses counta/b {\!!counta#1\!!countb#2\docalculatecolumnsetspan \edef\columnsetspanhsize{\the\!!widtha}} \def\definecolumnsetspan {\dodoubleempty\dodefinecolumnsetspan} \def\dodefinecolumnsetspan[#1][#2]% {%\ifsecondargument \defineframedtext [cs:#1] [\c!frame=\v!off, \c!before=, \c!after=, \c!offset=\v!overlay, \c!location=\v!left, \c!linecorrection=\v!off, \c!depthcorrection=\v!off, \c!n=2, \c!nlines=0, \c!indenting=, \c!indentnext=\v!yes, \c!default=HERE, \c!alternative=\v!a, #2]% %\else % \definecolumnspan[][#1]% }%\fi} \definecolumnsetspan[\s!default] \def\setupcolumnsetspan {\dodoubleempty\dosetupcolumnsetspan} \def\dosetupcolumnsetspan[#1][#2]% {\ifsecondargument \setupframedtexts[cs:#1][#2]% \else \setupcolumnsetspan[\s!default][#1]% \fi} \def\startcolumnsetspan {\dotripleempty\dostartcolumnsetspan} %%%%%%%%%%%%%%%% TODO \def\dostartcolumnsetspan[#1][#2][#3]% [#3] gobbles space {\endgraf % else rubish output if forgotten \vskip \zeropoint % make sure otr is done, otherwise last line problems \bgroup \forgetall \ifnum\columnsetlevel>\zerocount\else % of course we needed a one-column fall back for tm \columnsetspanhsize\hsize \nofcolumns\plusone \mofcolumns\plusone \fi \setupframedtexts[cs:#1] [\c!width=\columnsetspanhsize, \c!linecorrection=\v!off, \c!depthcorrection=\v!off, #2]% % determine widths \!!countc\framedtextparameter{cs:#1}\c!n % \!!countd\numexpr(\nofcolumns-\mofcolumns+\plusone)% \!!countd\nofcolumns % n <= n of columns \ifnum\!!countc>\!!countd \!!countc\!!countd \fi \advance\!!countd -\mofcolumns \advance\!!countd \plusone % n <= n of available columns (alternative a) \doif{\framedtextparameter{cs:#1}\c!alternative}\v!a {\ifnum\!!countc>\!!countd \!!countc\!!countd \fi}% % here it all starts \setcolumnsetspanhsize\mofcolumns\!!countc % a/b used \hsize\columnsetspanhsize \setbox\scratchbox\vbox\bgroup \dostartframedtext[cs:#1][\v!none]% geen nils placement % spoils spacing : \vskip-\struttotal\par\verticalstrut\par \ifnum\columnsetlevel>\zerocount \framedtextparameter{cs:#1}\c!before \fi \def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}} \def\dostopcolumnsetspan#1% {\par \verticalstrut \kern-2\struttotal \verticalstrut \ifnum\columnsetlevel>\zerocount \doifsomething{\framedtextparameter{cs:#1}\c!after} {\framedtextparameter{cs:#1}\c!after \kern\zeropoint}% otherwise blanks disappear, better be a switch \else \endgraf \fi \dostopframedtext \egroup \setbox\scratchbox\frozenhbox to \hsize {\dontcomplain \alignedline{\framedtextparameter{cs:#1}\c!location}\v!middle {\lower\strutdepth\box\scratchbox}}% \dp\scratchbox\zeropoint % else wrong snap insidefloat % % to be tested first (strange in grid mode) % % \setbox\scratchbox\frozenhbox to \hsize % {\dontcomplain % \chardef\alignstrutmode\zerocount % \alignedline{\framedtextparameter{cs:#1}\c!plaats}\v!midden % {\box\scratchbox}}% % \ifinsidefloat \box\scratchbox \else\ifnum\columnsetlevel>\zerocount % we only set \columnsetspacing when asked for, else bottom problems % don't change this any more (test naw) \chardef\columnslotspacing\framedtextparameter{cs:#1}\c!nlines\relax % todo: nboven/onder & \chardef\columnslotlocation2 %\OTRSETstoreincolumnslotHERE\scratchbox \edef\floatmethod{\framedtextparameter{cs:#1}\c!default}% \@EA\uppercasestring\floatmethod\to\floatmethod % todo : \v!here -> here enzovoorts \OTRSETstoreincolumnslot\floatmethod\scratchbox % watch out: no \dochecknextindentation{tag} \checknextindentation[\framedtextparameter{cs:#1}\c!indentnext]% \else % of course we needed a one-column fall back for tm; brrr, the box has now too % much height (try \ruledvbox); don't change this without testing techniek \scratchdimen\ht\scratchbox \advance\scratchdimen-\strutdp \ht\scratchbox\scratchdimen \framedtextparameter{cs:#1}\c!before \snaptogrid\vbox{\box\scratchbox}% \framedtextparameter{cs:#1}\c!after \fi\fi \egroup \endgraf} % \startcolumnset[two] % \input tufte % \startcolumnsetspan[two][width=20cm,location=middle] \input tufte \stopcolumnsetspan % \startcolumnsetspan[two][default=btlr] \input tufte \stopcolumnsetspan % \input tufte \par % \input tufte \par % \startcolumnsetspan[two] \emptylines[5] \stopcolumnsetspan % \startcolumnsetspan[two] \input tufte \stopcolumnsetspan % \stopcolumnset \protect \endinput % extreme examples (1) % % \setupfloats[numbering=nocheck] % % \definecolumnset [first] [n=2,start=0] % \definecolumnset [next] [n=2,start=3] % % \setuptexttexts[\vbox to \textheight{\topskipcorrection \hsize\makeupwidth left \hfill right\vfill}] % % \setuphead[chapter][text=empty] % % \starttext % % \startcolumnset[first,next] % \placefigure[btrl]{}{} % \placefigure[tblr]{}{} % \chapter{thuan} \dorecurse{25}{\recurselevel: \input thuan \endgraf} % \stopcolumnset % % \startcolumnset[first,next] % \chapter{thuan} \dorecurse{25}{\input thuan \endgraf\placefigure{}{}} % \stopcolumnset \unprotect % only in columnsets % \def\cornerfigure % {\dotripleempty\docornerfigure} % % \def\docornerfigure[#1][#2][#3]% [layer] [location] [settings] % {\bgroup % \dowithnextbox % {\!!doneafalse % \!!donebfalse % \processallactionsinset % [\v!left,\v!bottom,#2] % [ \v!left=>\!!doneatrue , % \v!right=>\!!doneafalse, % \v!top=>\!!donebtrue , % \v!bottom=>\!!donebfalse]% % \!!widtha\nextboxwd % \if!!donea % % unchecked % \advance\!!widtha-\backspace % \else % % unchecked % \advance\!!widtha-\backspace % \fi % \!!widtha\textwidth % could be an option % \!!heighta\nextboxht % % zou een macro moeten zijn \getnoflayoutlines % \ifnum\layoutparameter\c!lines=\zerocount % \getnoflines\textheight % \else % \noflines\layoutparameter\c!lines % \fi % % % \advance\noflines \plusone % wordt default, instelbaar % \!!heightb\noflines\lineheight\relax % \if!!doneb % boven % % unchecked % \advance\!!heighta-\topspace % \advance\!!heighta-\headerheight % \advance\!!heighta-\headerdistance % \else % onder % % checked % \advance\!!heighta-\paperheight % \advance\!!heighta+\!!heightb % \advance\!!heighta+\topspace % \advance\!!heighta+\headerheight % \advance\!!heighta+\headerdistance % \advance\!!heighta-\footerdistance % \advance\!!heighta-\footerheight % \fi % \getnoflines\!!heighta % \!!heighta\noflines\lineheight\relax % \def\docornerfigure[####1]% % {\expanded{\plaatsfiguur[####1,\v!none]{} % {\noexpand\phantombox[\c!width=\the\!!widtha,\c!height=\the\!!heighta]}}}% % \if!!donea % \if!!doneb % links boven / rb % \setlayer[#1] % [\c!corner={\v!left,\v!top},\c!location=rb,#3] % {\flushnextbox}% % \docornerfigure[tblr]% % \else % links onder / rt % \setlayer[#1] % [\c!corner={\v!left,\v!bottom},\c!location=rt,#3] % {\flushnextbox}% % \docornerfigure[btlr]% % \fi % \else % \if!!doneb % rechts boven / lt % \setlayer[#1] % [\c!corner={\v!right,\v!top},\c!location=lb,#3] % {\flushnextbox}% % \docornerfigure[tbrl]% % \else % rechts onder / lb % \setlayer[#1] % [\c!corner={\v!right,\v!bottom},\c!location=lt,#3] % {\flushnextbox}% % \docornerfigure[btrl]% % \fi % \fi % \egroup} % \vbox} context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-pda.xml0000644000175000017500000002262711571377075024130 0ustar norbertnorbert application/pdf False http://ns.adobe.com/pdf/1.3/ pdf Adobe PDF Schema internal A name object indicating whether the document has been modified to include trapping information Trapped Text http://purl.org/dc/elements/1.1/ pdf Dubline Core Schema internal Subject in Document Properties description Text http://ns.adobe.com/pdfx/1.3/ pdfx PDF/X ID Schema external Name of the ConTeXt job ConTeXt.Jobname Text external Time stamp of ConTeXt version ConTeXt.Time Text external ConTeXt website ConTeXt.Url Text external ConTeXt version ConTeXt.Version Text external Banner of pdftex or one of its successors PTEX.Fullbanner Text external Document identifier ID Text http://ns.adobe.com/xap/1.0/mm/ xmpMM XMP Media Management Schema internal UUID based identifier for specific incarnation of a document InstanceID URI http://www.aiim.org/pdfa/ns/id/ pdfaid PDF/A ID Schema internal Part of PDF/A standard part Integer internal Amendment of PDF/A standard amd Text internal Conformance level of PDF/A standard conformance Text context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-4.lua0000644000175000017500000000457411571377075024125 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-4'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A, 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF, 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9 } context-2013.05.28.20130704/texmf-dist/tex/context/base/type-win.mkii0000644000175000017500000000540011754241457024331 0ustar norbertnorbert%D \module %D [ file=type-msw, %D version=2005.02.04, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Microsoft Windows Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \usetypescriptfile[type-msw] % % \definetypeface[verdana][ss][sans] [verdana] [default][encoding=texnansi] % \definetypeface[verdana][rm][serif][palatino][default][encoding=texnansi,rscale=1.1] % \definetypeface[verdana][mm][math] [palatino][default][encoding=texnansi,rscale=1.1] % \definetypeface[verdana][tt][mono] [modern] [default][encoding=texnansi,rscale=1.25] % % \setupbodyfont[verdana] \showfontstrip % % \startlines % {\rm test {\sl test} {\it test} {\bf test} {\bs test} {\bi test}} % {\ss test {\sl test} {\it test} {\bf test} {\bs test} {\bi test}} % {\tt test {\sl test} {\it test} {\bf test} {\bs test} {\bi test}} % \stoplines \starttypescriptcollection[windows] % verdana \starttypescript [sans] [verdana] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Verdana] \definefontsynonym [SansBold] [Verdana-Bold] \definefontsynonym [SansItalic] [Verdana-Italic] \definefontsynonym [SansBoldItalic] [Verdana-BoldItalic] \stoptypescript \starttypescript [sans] [verdana] [texnansi,ec,qx] \definefontsynonym [Verdana] [\typescriptthree-verdana] [encoding=\typescriptthree] \definefontsynonym [Verdana-Bold] [\typescriptthree-verdanab] [encoding=\typescriptthree] \definefontsynonym [Verdana-Italic] [\typescriptthree-verdanai] [encoding=\typescriptthree] \definefontsynonym [Verdana-BoldItalic] [\typescriptthree-verdanaz] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-microsoft-verdana.map] \stoptypescript % arial \starttypescript [sans] [arial] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [ArialMT] \definefontsynonym [SansBold] [Arial-BoldMT] \definefontsynonym [SansItalic] [Arial-ItalicMT] \definefontsynonym [SansBoldItalic] [Arial-BoldItalicMT] \stoptypescript \starttypescript [sans] [arial] [texnansi,ec,qx] \definefontsynonym [ArialMT] [\typescriptthree-arial] [encoding=\typescriptthree] \definefontsynonym [Arial-BoldMT] [\typescriptthree-arialbd] [encoding=\typescriptthree] \definefontsynonym [Arial-ItalicMT] [\typescriptthree-ariali] [encoding=\typescriptthree] \definefontsynonym [Arial-BoldItalicMT] [\typescriptthree-arialbi] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-microsoft-arial.map] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-5.lua0000644000175000017500000000457411571377075024126 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-5'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F } context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-ctx.mkiv0000644000175000017500000000577711754241457024332 0ustar norbertnorbert%D \module %D [ file=mlib-ctx, %D version=2008.03.25, %D title=\METAPOST\ Integrated Graphics, %D subtitle=Basics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 contains the \MPLIB\ variants of the by now ancient %D \MPTOPDF\ code. \writestatus{loading}{MetaPost Library Graphics / Initializations} \registerctxluafile{mlib-run}{1.001} \registerctxluafile{mlib-ctx}{1.001} \unprotect \protect \endinput % local mpgraphic = [[ % for i=1 upto 1000 : % beginfig(0); % draw halfcircle scaled 1cm withcolor green ; % picture p ; p := "oeps" infont defaultfont scaled .75 rotated 45 ; % p := p shifted - (xpart center p,0) ; % draw p ; draw boundingbox p ; % endfig ; % beginfig(0); % draw halfcircle scaled 1cm dashed evenly withcolor green ; % endfig ; % beginfig(0); % pickup pencircle xscaled .5mm yscaled .25mm rotated 45 ; % draw halfcircle scaled 1cm withcolor red ; % endfig ; % beginfig(0); % draw halfcircle scaled 1cm ; % endfig ; % beginfig(0); % pickup pencircle xscaled .5mm yscaled .25mm rotated 45 ; % for k:=1 upto 10 : % draw halfcircle scaled uniformdeviate(1cm) withcolor (red/(k/4)) ; % endfor ; % endfig ; % endfor ; % ]] % -- local mpx = metapost.format("metafun") % metapost.process(metapost.format("metafun"),mpgraphic) % \starttext % \setupcolors[state=start] % \definecolor[red] [r=1] % \definecolor[cyan][c=1] % \setbox\scratchbox\hbox{\startMPcode\stopMPcode} % first specials are forgotten % \definecolor[sss][t=.5,a=1,r=1] % \definespotcolor[oeps1][green][p=.5] % \definespotcolor[oeps2][green][p=.25] % \definespotcolor[oeps3][green][p=.25,t=.5,a=1] % \startMPpage % fill fullcircle scaled 10cm withcolor \MPcolor{red} ; % fill fullcircle scaled 8cm withcolor cmyk(1,0,0,0) ; % fill fullcircle scaled 6cm withcolor cmyk(0,1,0,0) ; % fill fullcircle scaled 4cm withcolor cmyk(0,0,1,0) ; % fill fullcircle scaled 2cm withcolor cmyk(0,0,0,1) ; % currentpicture := currentpicture shifted (-7.5cm,0) ; % fill fullcircle scaled 10cm withcolor transparent(1,0.75,cmyk(0,0,1,0)) ; % fill fullcircle scaled 8cm withcolor \MPcolor{sss} ; % fill fullcircle scaled 6cm withcolor \MPcolor{oeps1} ; % fill fullcircle scaled 4cm withcolor \MPcolor{oeps2} ; % currentpicture := currentpicture shifted (-7.5cm,0) ; % fill fullcircle scaled 10cm withcolor \MPcolor{oeps3} ; % circular_shade(fullcircle scaled 8cm, 1, red, blue) ; % circular_shade(fullcircle scaled 6cm, 1, (1,0,0,0), (0,1,0,0)) ; % circular_shade(fullcircle scaled 4cm, 1, cmyk(.5,.5,1,0), (0,1,0,0)) ; % \stopMPpage % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/node-ini.mkiv0000644000175000017500000000415212130411274024260 0ustar norbertnorbert%D \module %D [ file=node-ini, %D version=2006.08.20, %D title=\CONTEXT\ Node Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Support / Initialization} \unprotect \newcount\filterstate \filterstate\plusone % hm, public \registerctxluafile{node-ini}{1.001} \registerctxluafile{node-res}{1.001} \registerctxluafile{node-dir}{1.001} \registerctxluafile{node-aux}{1.001} \registerctxluafile{node-tst}{1.001} \registerctxluafile{node-tra}{1.001} % we might split it off (module) \registerctxluafile{node-snp}{1.001} \registerctxluafile{node-tsk}{1.001} \registerctxluafile{node-tex}{1.001} \registerctxluafile{node-pro}{1.001} \registerctxluafile{node-ser}{1.001} \registerctxluafile{node-ext}{1.001} \registerctxluafile{node-acc}{1.001} % experimental %registerctxluafile{node-prp}{1.001} % makes no sense (yet) \newcount\c_node_tracers_show_box % box number \unexpanded\def\shownextnodes{\afterassignment\node_tracers_show_next\c_node_tracers_show_box} \unexpanded\def\showflatnodes{\afterassignment\node_tracers_show_flat\c_node_tracers_show_box} \def\node_tracers_show_next{\ctxlua{texio.write_nl('log',nodes.serializebox(\number\c_node_tracers_show_box,false,true))}} \def\node_tracers_show_flat{\ctxlua{texio.write_nl('log',nodes.serializebox(\number\c_node_tracers_show_box,true, true))}} \unexpanded\def\visualizenextnodes{\dowithnextbox{\ctxlua{nodes.visualizebox(\number\nextbox,false,true)}}} \unexpanded\def\visualizeflatnodes{\dowithnextbox{\ctxlua{nodes.visualizebox(\number\nextbox,true,true)}}} \unexpanded\def\starttracingnodes[#1]{\ctxlua{nodes.tracers.characters.start("#1")}} \unexpanded\def\stoptracingnodes {\ctxlua{nodes.tracers.characters.stop()}} % \starttext % \starttracingnodes[characters] % \input tufte \par % \input tufte \par % \stoptracingnodes % \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-reg-01.mkiv0000644000175000017500000000312011754241457024022 0ustar norbertnorbert%D \module %D [ file=s-reg-01, %D version=2005.04.25, %D title=\CONTEXT\ Style File, %D subtitle=Extra Regime Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \macros %D {showregime} %D %D This code is moved from the kernel to here. (We could make it %D auto-loadable). \startluacode --[[ldx--

The following code is rather specific.

--ldx]]-- function regimes.show(regime) regime = regimes.synonyms[regime] or regime local r = regimes.data[regime] if r then local chardata = characters.data context.starttabulate { "|rT|T|rT|lT|lT|lT|" } for k, v in ipairs(r) do local chr = chardata[v] if chr then context.NC() context(k) context.NC() context.getvalue(chr.contextname]) context.NC() context("%U+05X",v) context.NC() context(chr.contextname) context.NC() context(chr.category) context.NC() context(chr.description) context.NC() context.NR() else -- can't happen end end context.stoptabulate() else context("unknown regime %s",regime) end end \stopluacode \unprotect \def\showregime {\dosingleempty\doshowregime} \def\doshowregime[#1]% {\ctxlua{regimes.show("#1")}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-chemic.mkiv0000644000175000017500000000123611754241457024257 0ustar norbertnorbert%D \module %D [ file=ppchtex (m-chemic), %D version=1997.03.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PPCHTEX\ (Plain Pictex Context cHemie \TEX), %D author=Hans Hagen, %D date=\currentdate, %D suggestions={Tobias Burnus, Dirk Kuypers \& Ton Otten}, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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{ppchtex}{not loaded as support for chemistry in now built in} % \usemodule[pictex] % we will get rid of this % \input ppchtex.mkiv \relax \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-fde.mkii0000644000175000017500000001047111754241457024241 0ustar norbertnorbert%D \module %D [ file=enco-fde, %D version=2000.08.20, %D title=\CONTEXT\ Encoding Macros, %D subtitle=German Input Filter, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \installactivecharacter " \startlanguagespecifics[\s!de] \installcompoundcharacter "a {\aumlaut\midworddiscretionary} \installcompoundcharacter "e {\eumlaut\midworddiscretionary} \installcompoundcharacter "i {\iumlaut\midworddiscretionary} \installcompoundcharacter "o {\oumlaut\midworddiscretionary} \installcompoundcharacter "u {\uumlaut\midworddiscretionary} \installcompoundcharacter "s {\ssharp} \installcompoundcharacter "z {\ssharp} \installcompoundcharacter "A {\Aumlaut} \installcompoundcharacter "E {\Eumlaut} \installcompoundcharacter "I {\Iumlaut} \installcompoundcharacter "O {\Oumlaut} \installcompoundcharacter "U {\Uumlaut} \installcompoundcharacter "Z {SZ} \installcompoundcharacter "S {SS} \stoplanguagespecifics \startlanguagespecifics[\s!de] \installcompoundcharacter "ck {\discretionary {k-}{k}{ck}} \installcompoundcharacter "ff {\discretionary{ff-}{f}{ff}} \installcompoundcharacter "ll {\discretionary{ll-}{l}{ll}} \installcompoundcharacter "mm {\discretionary{mm-}{m}{mm}} \installcompoundcharacter "nn {\discretionary{nn-}{n}{nn}} \installcompoundcharacter "pp {\discretionary{pp-}{p}{pp}} \installcompoundcharacter "rr {\discretionary{rr-}{r}{rr}} \installcompoundcharacter "tt {\discretionary{tt-}{t}{tt}} \installcompoundcharacter "CK {\discretionary {K-}{K}{CK}} \installcompoundcharacter "FF {\discretionary{FF-}{F}{FF}} \installcompoundcharacter "LL {\discretionary{LL-}{L}{LL}} \installcompoundcharacter "MM {\discretionary{MM-}{M}{MM}} \installcompoundcharacter "NN {\discretionary{NN-}{N}{NN}} \installcompoundcharacter "PP {\discretionary{PP-}{P}{PP}} \installcompoundcharacter "RR {\discretionary{RR-}{R}{RR}} \installcompoundcharacter "TT {\discretionary{TT-}{T}{TT}} \stoplanguagespecifics \startlanguagespecifics[\s!de] \installcompoundcharacter "` {\startdelimitedtext[\v!quotation]} \installcompoundcharacter "' {\stopdelimitedtext} \installcompoundcharacter ". {\kern.1em\ignorespaces} %installcompoundcharacter "` {\languageparameter\c!leftquotation } %installcompoundcharacter "' {\languageparameter\c!rightquotation} \def\setupDElanguage {\setuplanguage [\s!de] [\c!leftsentence=\leftguillemot, \c!rightsentence=\rightguillemot, \c!leftsubsentence=\leftsubguillemot, \c!rightsubsentence=\rightsubguillemot]} \installcompoundcharacter "< {{\setupDElanguage|<|}} \installcompoundcharacter "> {{\setupDElanguage|>|}} \installcompoundcharacter "| {|*|} \stoplanguagespecifics % \hyphenatedword{hinauff|*|liegen} % \hyphenatedword{hinauff"|liegen} %D An experimental hack: % no {\simplifiedcompoundcharacter"} % \startencoding[pdfdoc] % \startlanguagespecifics[\s!de]% hm, a % is needed % \defineactivecharacter " {\"} % \stoplanguagespecifics % \stopencoding \startencoding[ec] \startlanguagespecifics[\s!de]% \installcompoundcharacter "a {\adiaeresis} \installcompoundcharacter "e {\ediaeresis} \installcompoundcharacter "i {\idiaeresis} \installcompoundcharacter "o {\odiaeresis} \installcompoundcharacter "u {\udiaeresis} \installcompoundcharacter "A {\Adiaeresis} \installcompoundcharacter "E {\Ediaeresis} \installcompoundcharacter "I {\Idiaeresis} \installcompoundcharacter "O {\Odiaeresis} \installcompoundcharacter "U {\Udiaeresis} \stoplanguagespecifics \stopencoding \startencoding[texnansi] \startlanguagespecifics[\s!de]% \installcompoundcharacter "a {\adiaeresis} \installcompoundcharacter "e {\ediaeresis} \installcompoundcharacter "i {\idiaeresis} \installcompoundcharacter "o {\odiaeresis} \installcompoundcharacter "u {\udiaeresis} \installcompoundcharacter "A {\Adiaeresis} \installcompoundcharacter "E {\Ediaeresis} \installcompoundcharacter "I {\Idiaeresis} \installcompoundcharacter "O {\Odiaeresis} \installcompoundcharacter "U {\Udiaeresis} \stoplanguagespecifics \stopencoding \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-punk.mkiv0000644000175000017500000001743611754241457024015 0ustar norbertnorbert%D \module %D [ file=m-punk, %D version=2008.04.15, %D title=\CONTEXT\ Modules, %D subtitle=Punk Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifx\luaversion\undefined \endinput \fi % At some point the font generation code will move into the % ConTeXt MkIV kernel. \startluacode local concat = table.concat local chardata = characters.data local fontdata = fonts.hashes.identifiers fonts.mp = fonts.mp or { } fonts.mp.version = fonts.mp.version or 1.15 fonts.mp.inline = true fonts.mp.cache = containers.define("fonts", "mp", fonts.mp.version, true) metapost.characters = metapost.characters or { } -- todo: use table share as in otf local characters, descriptions = { }, { } local factor, l, n, w, h, d, total, variants = 100, { }, 0, 0, 0, 0, 0, 0, true -- A next version of mplib will provide the tfm font information which -- gives better glyph dimensions, plus additional kerning information. local flusher = { startfigure = function(chrnum,llx,lly,urx,ury) l, n = { }, chrnum w, h, d = urx - llx, ury, -lly total = total + 1 inline = fonts.mp.inline end, flushfigure = function(t) for i=1, #t do l[#l+1] = t[i] end end, stopfigure = function() local cd = chardata[n] if inline then descriptions[n] = { -- unicode = n, name = cd and cd.adobename, width = w*100, height = h*100, depth = d*100, boundingbox = { 0, -d, w, h }, } characters[n] = { commands = { -- todo: xforms, should happen in backend { "special", "pdf: " .. concat(l," ") }, } } else descriptions[n] = { -- unicode = n, name = cd and cd.adobename, width = w*100, height = h*100, depth = d*100, boundingbox = { 0, -d, w, h }, } characters[n] = { commands = { { "image", { stream = concat(l," "), bbox = { 0, -d*65536, w*65536, h*65536 } } }, } } end end } metapost.characters.instances = metapost.characters.instances or 10 function metapost.characters.process(mpxformat, name, instances, scalefactor) statistics.starttiming(metapost.characters) scalefactor = scalefactor or 1 instances = instances or metapost.characters.instances or 10 local fontname = file.removesuffix(file.basename(name)) local hash = file.robustname(string.format("%s %05i %03i", fontname, scalefactor*1000, instances)) local lists = containers.read(fonts.mp.cache, hash) if not lists then statistics.starttiming(flusher) -- we can use a format per font local data = io.loaddata(resolvers.findfile(name)) metapost.reset(mpxformat) metapost.setoutercolor(2) -- no outer color and no reset either lists = { } for i=1,instances do characters = { } descriptions = { } metapost.process( mpxformat, { "randomseed := " .. i*10 .. ";", "scale_factor := " .. scalefactor .. " ;", data }, false, flusher ) lists[i] = { characters = characters, descriptions = descriptions, parameters = { designsize = 655360, slant = 0, space = 333 * scalefactor, space_stretch = 166.5 * scalefactor, space_shrink = 111 * scalefactor, x_height = 431 * scalefactor, quad = 1000 * scalefactor, extra_space = 0, }, properties = { name = string.format("%s-%03i",hash,i), virtualized = true, spacer = "space", } } end metapost.reset(mpxformat) -- saves memory lists = containers.write(fonts.mp.cache, hash, lists) statistics.stoptiming(flusher) end variants = variants + #lists statistics.stoptiming(metapost.characters) return lists end function fonts.handlers.vf.combiner.commands.metafont(g,v) local size = g.specification.size local data = metapost.characters.process(v[2],v[3],v[4],size/655360) local list, t = { }, { } for d=1,#data do t = data[d] t = fonts.constructors.scale(t, -1000) local id = font.nextid() t.fonts = { { id = id } } fontdata[id] = t fonts.handlers.vf.helpers.composecharacters(t) list[d] = font.define(t) end for k, v in next, t do g[k] = v -- kind of replace, when not present, make nil end g.properties.virtualized = true g.variants = list end fonts.definers.methods.install( "punk", { { "metafont", "mfplain", "punkfont.mp", 10 }, } ) fonts.definers.methods.install( "punkbold", { { "metafont", "mfplain", "punkfont-bold.mp", 10 }, } ) fonts.definers.methods.install( "punkslanted", { { "metafont", "mfplain", "punkfont-slanted.mp", 10 }, } ) fonts.definers.methods.install( "punkboldslanted", { { "metafont", "mfplain", "punkfont-boldslanted.mp", 10 }, } ) typesetters.cases.register("RandomPunk", function(current) local used = fontdata[current.font].variants if used then local f = math.random(1,#used) current.font = used[f] return current, true else return current, false end end) metapost.characters.flusher = flusher statistics.register("metapost font generation", function() local time = statistics.elapsedtime(flusher) if total > 0 then return string.format("%i glyphs, %.3f seconds runtime, %i glyphs/second", total, time, total/time) else return string.format("%i glyphs, %.3f seconds runtime", total, time) end end) statistics.register("metapost font loading",function() local time = statistics.elapsedtime(metapost.characters) if variants > 0 then return string.format("%.3f seconds, %i instances, %0.3f instances/second", time, variants, variants/time) else return string.format("%.3f seconds, %i instances", time, variants) end end) \stopluacode \unexpanded\def\EnableRandomPunk {\setcharactercasing[RandomPunk]} \unexpanded\def\RandomPunk {\groupedcommand\EnableRandomPunk\donothing} \unexpanded\def\StartRandomPunk {\begingroup\EnableRandomPunk} \unexpanded\def\StopRandomPunk {\endgroup} \starttypescript [serif] [punk] [default] \definefontsynonym [Serif] [demo@punk] \definefontsynonym [SerifBold] [demobold@punkbold] \definefontsynonym [SerifSlanted] [demoslanted@punkslanted] \definefontsynonym [SerifBoldSlanted] [demoboldslanted@punkboldslanted] \definefontsynonym [SerifItalic] [SerifSlanted] \definefontsynonym [SerifBoldItalic] [SerifBoldSlanted] \stoptypescript \starttypescript [punk] \definetypeface [punk] [rm] [serif] [punk] [default] \stoptypescript \endinput \usetypescript[punk] \setupbodyfont[punk,14pt] \starttext \definedfont[demo@punk at 10pt]hello world\par \definedfont[demo@punk at 12pt]hello world\par \definedfont[demo@punk at 16pt]hello world\par \definedfont[demo@punk at 20pt]hello world\par \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-iop.lua0000644000175000017500000001211312130411274024117 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-iop'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this paranoid stuff in web2c ... we cannot hook checks into the -- input functions because one can always change the callback but -- we can feed back specific patterns and paths into the next -- mechanism -- os.execute os.exec os.spawn io.fopen -- os.remove lfs.chdir lfs.mkdir -- io.open zip.open epdf.open mlib.new -- cache local topattern, find = string.topattern, string.find local report_limiter = logs.reporter("system","limiter") -- the basic methods local function match(ruleset,name) local n = #ruleset if n > 0 then for i=1,n do local r = ruleset[i] if find(name,r[1]) then return r[2] end end return false else -- nothing defined (or any) return true end end local function protect(ruleset,proc) return function(name,...) if name == "" then -- report_limiter("no access permitted: ") -- can happen in mplib code return nil, "no name given" elseif match(ruleset,name) then return proc(name,...) else report_limiter("no access permitted for %a",name) return nil, name .. ": no access permitted" end end end function io.limiter(preset) preset = preset or { } local ruleset = { } for i=1,#preset do local p = preset[i] local what, spec = p[1] or "", p[2] or "" if spec == "" then -- skip 'm elseif what == "tree" then resolvers.dowithpath(spec, function(r) local spec = resolvers.resolve(r) or "" if spec ~= "" then ruleset[#ruleset+1] = { topattern(spec,true), true } end end) elseif what == "permit" then ruleset[#ruleset+1] = { topattern(spec,true), true } elseif what == "forbid" then ruleset[#ruleset+1] = { topattern(spec,true), false } end end if #ruleset > 0 then return { match = function(name) return match (ruleset,name) end, protect = function(proc) return protect(ruleset,proc) end, } else return { match = function(name) return true end, protect = proc, } end end -- a few handlers io.i_limiters = { } io.o_limiters = { } function io.i_limiter(v) local i = io.i_limiters[v] if i then local i_limiter = io.limiter(i) function io.i_limiter() return i_limiter end return i_limiter end end function io.o_limiter(v) local o = io.o_limiters[v] if o then local o_limiter = io.limiter(o) function io.o_limiter() return o_limiter end return o_limiter end end -- the real thing (somewhat fuzzy as we need to know what gets done) local i_opener, i_limited = io.open, false local o_opener, o_limited = io.open, false local function i_register(v) if not i_limited then local i_limiter = io.i_limiter(v) if i_limiter then local protect = i_limiter.protect i_opener = protect(i_opener) i_limited = true report_limiter("input mode set to %a",v) end end end local function o_register(v) if not o_limited then local o_limiter = io.o_limiter(v) if o_limiter then local protect = o_limiter.protect o_opener = protect(o_opener) o_limited = true report_limiter("output mode set to %a",v) end end end function io.open(name,method) if method and find(method,"[wa]") then return o_opener(name,method) else return i_opener(name,method) end end directives.register("system.inputmode", i_register) directives.register("system.outputmode", o_register) local i_limited = false local o_limited = false local function i_register(v) if not i_limited then local i_limiter = io.i_limiter(v) if i_limiter then local protect = i_limiter.protect lfs.chdir = protect(lfs.chdir) -- needs checking i_limited = true end end end local function o_register(v) if not o_limited then local o_limiter = io.o_limiter(v) if o_limiter then local protect = o_limiter.protect os.remove = protect(os.remove) -- rather okay lfs.chdir = protect(lfs.chdir) -- needs checking lfs.mkdir = protect(lfs.mkdir) -- needs checking o_limited = true end end end directives.register("system.inputmode", i_register) directives.register("system.outputmode", o_register) -- the definitions local limiters = resolvers.variable("limiters") if limiters then io.i_limiters = limiters.input or { } io.o_limiters = limiters.output or { } end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-xml-01.mkii0000644000175000017500000000330211754241457024037 0ustar norbertnorbert%D \module %D [ file=x-xml-01, %D version=2001.10.10, %D title=\CONTEXT\ XML Style File, %D subtitle=Formatting X?? files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % texexec --use=xml-format yourfile.x** [--mode=packed,wide] % % pdftotext yourfile.pdf yournewfile.x** \doifnothing {\inputfilename} {\end} \doiffileelse {\inputfilename} {} {\end} % The following makes pdftotext too slow: % % \definepapersize % [mine] % [height=.99\maxdimen, % width=200cm] % % \setuppapersize % [mine] % [mine] % % \setupbodyfont % [0.4pt,tt] % % this is faster % % \setuppapersize % [A0][A0] % % but normal A4 combined with 1 pt font size is the best % % An alternative is to use a small size, but this leads to % too many messages % % \setupbodyfont % [1pt,tt] % % so we stick to a more normal alternive. \unprotect \setuplayout [\c!backspace=0cm, \c!topspace=0cm, %\c!width=40em, \c!width=\v!middle, \c!height=\v!middle, \c!header=0cm, \c!footer=0cm] \setupbodyfont [tt,10pt] \setuptolerance [\v!verytolerant] \setupalign [\v!broad,\v!right] \setupXMLfile [\c!level=2] \startmode[wide] \setuplayout [\c!width=250cm] \stopmode \startmode[packed] % \setupXMLfile [inbetween=] \setupXMLfile [\c!tussen=] \stopmode \protect % The main text: \def\XMLbannerprocessor#1{\string<\string ?xml #1\string ?\string>\endgraf} \defineXMLprocessor [xml] {\XMLbannerprocessor} \starttext \dontcomplain \showXMLfile{\inputfilename} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/task-ini.lua0000644000175000017500000002664212161703335024126 0ustar norbertnorbertif not modules then modules = { } end modules ['task-ini'] = { version = 1.001, comment = "companion to task-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this is a temporary solution, we need to isolate some modules and then -- the load order can determine the trickery to be applied to node lists -- -- we can disable more handlers and enable then when really used (*) -- -- todo: two finalizers: real shipout (can be imposed page) and page shipout (individual page) local tasks = nodes.tasks local appendaction = tasks.appendaction local disableaction = tasks.disableaction local freezegroup = tasks.freezegroup local freezecallbacks = callbacks.freeze appendaction("processors", "normalizers", "typesetters.characters.handler") -- always on appendaction("processors", "normalizers", "fonts.collections.process") -- disabled appendaction("processors", "normalizers", "fonts.checkers.missing") -- disabled appendaction("processors", "characters", "scripts.autofontfeature.handler") appendaction("processors", "characters", "scripts.splitters.handler") -- disabled appendaction("processors", "characters", "typesetters.cleaners.handler") -- disabled appendaction("processors", "characters", "typesetters.directions.handler") -- disabled appendaction("processors", "characters", "typesetters.cases.handler") -- disabled appendaction("processors", "characters", "typesetters.breakpoints.handler") -- disabled appendaction("processors", "characters", "scripts.injectors.handler") -- disabled appendaction("processors", "words", "builders.kernel.hyphenation") -- always on appendaction("processors", "words", "languages.words.check") -- disabled appendaction("processors", "fonts", "builders.paragraphs.solutions.splitters.split") -- experimental appendaction("processors", "fonts", "nodes.handlers.characters") -- maybe todo appendaction("processors", "fonts", "nodes.injections.handler") -- maybe todo appendaction("processors", "fonts", "nodes.handlers.protectglyphs", nil, "nohead") -- maybe todo appendaction("processors", "fonts", "builders.kernel.ligaturing") -- always on (could be selective: if only node mode) appendaction("processors", "fonts", "builders.kernel.kerning") -- always on (could be selective: if only node mode) appendaction("processors", "fonts", "nodes.handlers.stripping") -- disabled (might move) ------------("processors", "fonts", "typesetters.italics.handler") -- disabled (after otf/kern handling) appendaction("processors", "lists", "typesetters.spacings.handler") -- disabled appendaction("processors", "lists", "typesetters.kerns.handler") -- disabled appendaction("processors", "lists", "typesetters.digits.handler") -- disabled (after otf handling) appendaction("processors", "lists", "typesetters.italics.handler") -- disabled (after otf/kern handling) appendaction("processors", "lists", "typesetters.paragraphs.handler") -- disabled appendaction("shipouts", "normalizers", "nodes.handlers.cleanuppage") -- disabled appendaction("shipouts", "normalizers", "typesetters.alignments.handler") appendaction("shipouts", "normalizers", "nodes.references.handler") -- disabled appendaction("shipouts", "normalizers", "nodes.destinations.handler") -- disabled appendaction("shipouts", "normalizers", "nodes.rules.handler") -- disabled appendaction("shipouts", "normalizers", "nodes.shifts.handler") -- disabled appendaction("shipouts", "normalizers", "structures.tags.handler") -- disabled appendaction("shipouts", "normalizers", "nodes.handlers.accessibility") -- disabled appendaction("shipouts", "normalizers", "nodes.handlers.backgrounds") -- disabled appendaction("shipouts", "normalizers", "nodes.handlers.alignbackgrounds") -- disabled ------------("shipouts", "normalizers", "nodes.handlers.export") -- disabled appendaction("shipouts", "finishers", "nodes.visualizers.handler") -- disabled appendaction("shipouts", "finishers", "attributes.colors.handler") -- disabled appendaction("shipouts", "finishers", "attributes.transparencies.handler") -- disabled appendaction("shipouts", "finishers", "attributes.colorintents.handler") -- disabled appendaction("shipouts", "finishers", "attributes.negatives.handler") -- disabled appendaction("shipouts", "finishers", "attributes.effects.handler") -- disabled appendaction("shipouts", "finishers", "attributes.viewerlayers.handler") -- disabled --maybe integrate relocate and families appendaction("math", "normalizers", "noads.handlers.unscript", nil, "nohead") -- always on (maybe disabled) appendaction("math", "normalizers", "noads.handlers.variants", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.relocate", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.families", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.render", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.collapse", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.resize", nil, "nohead") -- always on ------------("math", "normalizers", "noads.handlers.respace", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.check", nil, "nohead") -- always on appendaction("math", "normalizers", "noads.handlers.tags", nil, "nohead") -- disabled appendaction("math", "normalizers", "noads.handlers.italics", nil, "nohead") -- disabled appendaction("math", "builders", "builders.kernel.mlist_to_hlist") -- always on ------------("math", "builders", "noads.handlers.italics", nil, "nohead") -- disabled -- quite experimental (nodes.handlers.graphicvadjust might go away) appendaction("finalizers", "lists", "builders.paragraphs.keeptogether") appendaction("finalizers", "lists", "nodes.handlers.graphicvadjust") -- todo appendaction("finalizers", "fonts", "builders.paragraphs.solutions.splitters.optimize") -- experimental appendaction("finalizers", "lists", "builders.paragraphs.tag") -- still experimental appendaction("mvlbuilders", "normalizers", "nodes.handlers.migrate") -- appendaction("mvlbuilders", "normalizers", "builders.vspacing.pagehandler") -- last ! appendaction("vboxbuilders", "normalizers", "builders.vspacing.vboxhandler") -- -- experimental too appendaction("mvlbuilders","normalizers","typesetters.checkers.handler") appendaction("vboxbuilders","normalizers","typesetters.checkers.handler") -- speedup: only kick in when used disableaction("processors", "scripts.autofontfeature.handler") disableaction("processors", "scripts.splitters.handler") disableaction("processors", "scripts.injectors.handler") -- was enabled disableaction("processors", "fonts.collections.process") disableaction("processors", "fonts.checkers.missing") disableaction("processors", "chars.handle_breakpoints") disableaction("processors", "typesetters.cleaners.handler") disableaction("processors", "typesetters.cases.handler") disableaction("processors", "typesetters.digits.handler") disableaction("processors", "typesetters.breakpoints.handler") disableaction("processors", "typesetters.directions.handler") disableaction("processors", "languages.words.check") disableaction("processors", "typesetters.spacings.handler") disableaction("processors", "typesetters.kerns.handler") disableaction("processors", "typesetters.italics.handler") disableaction("processors", "nodes.handlers.stripping") disableaction("processors", "typesetters.paragraphs.handler") disableaction("shipouts", "typesetters.alignments.handler") disableaction("shipouts", "nodes.rules.handler") disableaction("shipouts", "nodes.shifts.handler") disableaction("shipouts", "attributes.colors.handler") disableaction("shipouts", "attributes.transparencies.handler") disableaction("shipouts", "attributes.colorintents.handler") disableaction("shipouts", "attributes.effects.handler") disableaction("shipouts", "attributes.negatives.handler") disableaction("shipouts", "attributes.viewerlayers.handler") disableaction("shipouts", "structures.tags.handler") disableaction("shipouts", "nodes.visualizers.handler") disableaction("shipouts", "nodes.handlers.accessibility") disableaction("shipouts", "nodes.handlers.backgrounds") disableaction("shipouts", "nodes.handlers.alignbackgrounds") disableaction("shipouts", "nodes.handlers.cleanuppage") disableaction("shipouts", "nodes.references.handler") disableaction("shipouts", "nodes.destinations.handler") --~ disableaction("shipouts", "nodes.handlers.export") disableaction("mvlbuilders", "nodes.handlers.migrate") disableaction("processors", "builders.paragraphs.solutions.splitters.split") disableaction("finalizers", "builders.paragraphs.keeptogether") disableaction("finalizers", "builders.paragraphs.solutions.splitters.optimize") disableaction("finalizers", "nodes.handlers.graphicvadjust") -- sort of obsolete disableaction("finalizers", "builders.paragraphs.tag") disableaction("math", "noads.handlers.tags") disableaction("math", "noads.handlers.italics") disableaction("mvlbuilders", "typesetters.checkers.handler") disableaction("vboxbuilders","typesetters.checkers.handler") freezecallbacks("find_.*_file", "find file using resolver") freezecallbacks("read_.*_file", "read file at once") freezecallbacks("open_.*_file", "open file for reading") -- experimental: freezegroup("processors", "normalizers") freezegroup("processors", "characters") freezegroup("processors", "words") freezegroup("processors", "fonts") freezegroup("processors", "lists") freezegroup("finalizers", "normalizers") freezegroup("finalizers", "fonts") freezegroup("finalizers", "lists") freezegroup("shipouts", "normalizers") freezegroup("shipouts", "finishers") freezegroup("mvlbuilders", "normalizers") freezegroup("vboxbuilders", "normalizers") -----------("parbuilders", "lists") -----------("pagebuilders", "lists") freezegroup("math", "normalizers") freezegroup("math", "builders") context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-fr.mkii0000644000175000017500000023622212130411274024134 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language fr % \setinterfacevariable{Addition}{Ajout} \setinterfacevariable{Balloon}{Ballon} \setinterfacevariable{Cap}{Cap} \setinterfacevariable{Capital}{Capitale} \setinterfacevariable{Character}{Caratere} \setinterfacevariable{Characters}{Caracteres} \setinterfacevariable{CloseDocument}{FermeDocument} \setinterfacevariable{ExitViewer}{SortVisualisateur} \setinterfacevariable{FirstPage}{PremierePage} \setinterfacevariable{FitHeight}{AjusteHauteur} \setinterfacevariable{FitWidth}{AjusteLargeur} \setinterfacevariable{GotoPage}{VaalaPage} \setinterfacevariable{Greek}{Grec} \setinterfacevariable{Help}{Aide} \setinterfacevariable{HideField}{CacheChamp} \setinterfacevariable{HideLayer}{CacheCalque} \setinterfacevariable{Key}{Cle} \setinterfacevariable{LastPage}{DernierePage} \setinterfacevariable{LoadForm}{ChargeForm} \setinterfacevariable{MONTH}{MOIS} \setinterfacevariable{New}{Nouveau} \setinterfacevariable{NextJump}{SautSuivant} \setinterfacevariable{NextPage}{PageSuivante} \setinterfacevariable{Numbers}{Numeros} \setinterfacevariable{OpenNamedDocument}{OuvreDocumentNomme} \setinterfacevariable{Paragraph}{Paragraphe} \setinterfacevariable{PauseMovie}{PauseFilm} \setinterfacevariable{PauseRendering}{PauseRendering} \setinterfacevariable{PauseSound}{PauseSon} \setinterfacevariable{PreviousJump}{SautPrecedent} \setinterfacevariable{PreviousPage}{PagePrecedente} \setinterfacevariable{PrintDocument}{ImprimeDocument} \setinterfacevariable{Query}{Query} \setinterfacevariable{QueryAgain}{QueryAgain} \setinterfacevariable{ResetForm}{RazForm} \setinterfacevariable{ResumeMovie}{ReprendFilm} \setinterfacevariable{ResumeRendering}{ResumeRendering} \setinterfacevariable{ResumeSound}{ReprendSon} \setinterfacevariable{Romannumerals}{Chiffresromains} \setinterfacevariable{SaveDocument}{SauvegardeDocument} \setinterfacevariable{SaveForm}{SauvegardeForm} \setinterfacevariable{SaveNamedDocument}{SauvegardeDocumentNomme} \setinterfacevariable{SearchAgain}{RechercheSuivant} \setinterfacevariable{SearchDocument}{RechercheDocument} \setinterfacevariable{ShowBookmarks}{ShowBookmarks} \setinterfacevariable{ShowField}{MontreChamp} \setinterfacevariable{ShowThumbs}{ShowThumbs} \setinterfacevariable{StartMovie}{DemarreFilm} \setinterfacevariable{StartRendering}{StartRendering} \setinterfacevariable{StartSound}{DemarreSon} \setinterfacevariable{StopMovie}{StoppeFilm} \setinterfacevariable{StopRendering}{StopRendering} \setinterfacevariable{StopSound}{StoppeSon} \setinterfacevariable{SubmitForm}{SoumettreForm} \setinterfacevariable{ToggleLayer}{ToggleLayer} \setinterfacevariable{ToggleViewer}{ChangeVisualisateur} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{VideLayer} \setinterfacevariable{ViewerHelp}{AideVisualisateur} \setinterfacevariable{WEEKDAY}{JOURSEMAINE} \setinterfacevariable{WORD}{MOT} \setinterfacevariable{WORDS}{MOTS} \setinterfacevariable{Word}{Mot} \setinterfacevariable{Words}{Mots} \setinterfacevariable{abbreviation}{abreviation} \setinterfacevariable{abbreviations}{abreviations} \setinterfacevariable{absolute}{absolute} \setinterfacevariable{action}{action} \setinterfacevariable{after}{apres} \setinterfacevariable{all}{tout} \setinterfacevariable{always}{toujours} \setinterfacevariable{and}{and} \setinterfacevariable{answerarea}{answerarea} \setinterfacevariable{appendices}{annexes} \setinterfacevariable{appendix}{annexe} \setinterfacevariable{april}{avril} \setinterfacevariable{atmargin}{alamarge} \setinterfacevariable{atpage}{alapage} \setinterfacevariable{attachment}{attachment} \setinterfacevariable{august}{août} \setinterfacevariable{author}{auteur} \setinterfacevariable{auto}{auto} \setinterfacevariable{autointro}{autointro} \setinterfacevariable{back}{retour} \setinterfacevariable{background}{arriereplan} \setinterfacevariable{backmatter}{epilogue} \setinterfacevariable{backpart}{postface} \setinterfacevariable{backspace}{retourarriere} \setinterfacevariable{backward}{retourarriere} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{avant} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{grand} \setinterfacevariable{bigbodyfont}{grandepolicecorp} \setinterfacevariable{bigger}{bigger} \setinterfacevariable{bigpreference}{grandepreference} \setinterfacevariable{blank}{vide} \setinterfacevariable{blockquote}{blockquote} \setinterfacevariable{bodymatter}{texteprincipal} \setinterfacevariable{bodypart}{corpsdetexte} \setinterfacevariable{bold}{gras} \setinterfacevariable{bolditalic}{italiquegras} \setinterfacevariable{boldslanted}{inclinegras} \setinterfacevariable{bookmark}{marquepage} \setinterfacevariable{both}{lesdeux} \setinterfacevariable{bottom}{inf} \setinterfacevariable{brief}{brief} \setinterfacevariable{broad}{large} \setinterfacevariable{buffer}{buffer} \setinterfacevariable{by}{par} \setinterfacevariable{calligraphic}{calligraphique} \setinterfacevariable{cap}{cap} \setinterfacevariable{capital}{capitale} \setinterfacevariable{center}{center} \setinterfacevariable{chapter}{chapitre} \setinterfacevariable{character}{caractere} \setinterfacevariable{characters}{caracteres} \setinterfacevariable{chemistry}{chemistry} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{couleur} \setinterfacevariable{column}{colonne} \setinterfacevariable{columns}{colonnes} \setinterfacevariable{command}{commande} \setinterfacevariable{commands}{commandes} \setinterfacevariable{comment}{commentaire} \setinterfacevariable{component}{composant} \setinterfacevariable{concept}{concept} \setinterfacevariable{content}{contenu} \setinterfacevariable{contents}{contenus} \setinterfacevariable{continue}{continue} \setinterfacevariable{continued}{continued} \setinterfacevariable{controls}{controles} \setinterfacevariable{conversion}{conversion} \setinterfacevariable{current}{courant} \setinterfacevariable{cutspace}{cutspace} \setinterfacevariable{date}{date} \setinterfacevariable{day}{jour} \setinterfacevariable{december}{decembre} \setinterfacevariable{default}{defaut} \setinterfacevariable{depth}{profondeur} \setinterfacevariable{description}{description} \setinterfacevariable{disable}{desactiver} \setinterfacevariable{display}{affichage} \setinterfacevariable{dot}{point} \setinterfacevariable{doublesided}{rectoverso} \setinterfacevariable{down}{down} \setinterfacevariable{each}{chaque} \setinterfacevariable{edge}{bord} \setinterfacevariable{embed}{embed} \setinterfacevariable{empty}{vide} \setinterfacevariable{end}{end} \setinterfacevariable{endnote}{notefin} \setinterfacevariable{enumeration}{enumeration} \setinterfacevariable{environment}{environement} \setinterfacevariable{even}{paire} \setinterfacevariable{export}{export} \setinterfacevariable{external}{external} \setinterfacevariable{fact}{fait} \setinterfacevariable{february}{fevrier} \setinterfacevariable{figure}{figure} \setinterfacevariable{figures}{figures} \setinterfacevariable{file}{fichier} \setinterfacevariable{final}{final} \setinterfacevariable{first}{premier} \setinterfacevariable{firstcolumn}{premierecolonne} \setinterfacevariable{firstpage}{premierepage} \setinterfacevariable{firstsubpage}{premieresouspage} \setinterfacevariable{fit}{adapte} \setinterfacevariable{five}{cinq} \setinterfacevariable{fix}{fixe} \setinterfacevariable{fixed}{fixe} \setinterfacevariable{flexible}{flexible} \setinterfacevariable{float}{flottant} \setinterfacevariable{flushinner}{flushinner} \setinterfacevariable{flushleft}{flushleft} \setinterfacevariable{flushouter}{flushouter} \setinterfacevariable{flushright}{flushright} \setinterfacevariable{footer}{pdp} \setinterfacevariable{footnote}{notepdp} \setinterfacevariable{force}{force} \setinterfacevariable{foreground}{premierplan} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{formule} \setinterfacevariable{formulae}{formules} \setinterfacevariable{forward}{avance} \setinterfacevariable{four}{quatre} \setinterfacevariable{frame}{cadre} \setinterfacevariable{framedtext}{texteencadre} \setinterfacevariable{friday}{vendredi} \setinterfacevariable{frontmatter}{preambule} \setinterfacevariable{frontpart}{preface} \setinterfacevariable{global}{global} \setinterfacevariable{graphic}{graphique} \setinterfacevariable{graphics}{graphiques} \setinterfacevariable{gray}{gris} \setinterfacevariable{greek}{grec} \setinterfacevariable{grid}{grille} \setinterfacevariable{halfline}{demiligne} \setinterfacevariable{handwritten}{manuscript} \setinterfacevariable{hang}{suspend} \setinterfacevariable{hanging}{suspend} \setinterfacevariable{head}{tete} \setinterfacevariable{header}{entete} \setinterfacevariable{height}{hauteur} \setinterfacevariable{helptext}{texteaide} \setinterfacevariable{hencefore}{precedent} \setinterfacevariable{here}{ici} \setinterfacevariable{hereafter}{suivant} \setinterfacevariable{hidden}{cache} \setinterfacevariable{hiding}{cache} \setinterfacevariable{high}{haut} \setinterfacevariable{horizontal}{horizontale} \setinterfacevariable{hyphenated}{hyphenated} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{entre} \setinterfacevariable{index}{index} \setinterfacevariable{indices}{indices} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{herite} \setinterfacevariable{inleft}{dansgauche} \setinterfacevariable{inmargin}{dansmarge} \setinterfacevariable{inner}{interieur} \setinterfacevariable{inneredge}{bordinterieur} \setinterfacevariable{innermargin}{margeinterieure} \setinterfacevariable{inright}{dansdroit} \setinterfacevariable{interaction}{interaction} \setinterfacevariable{interactionmenu}{menuinteraction} \setinterfacevariable{intermezzi}{intermezzi} \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{danstexte} \setinterfacevariable{intro}{intro} \setinterfacevariable{italic}{italique} \setinterfacevariable{italicbold}{grasitalique} \setinterfacevariable{item}{element} \setinterfacevariable{itemize}{lister} \setinterfacevariable{its}{its} \setinterfacevariable{january}{janvier} \setinterfacevariable{joinedup}{joinedup} \setinterfacevariable{july}{juillet} \setinterfacevariable{june}{juin} \setinterfacevariable{keep}{maintient} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{etiquette} \setinterfacevariable{landscape}{paysage} \setinterfacevariable{last}{dernier} \setinterfacevariable{lastcolumn}{dernierecolonne} \setinterfacevariable{lastpage}{dernierepage} \setinterfacevariable{lastpagenumber}{derniernumeropage} \setinterfacevariable{lastsubpage}{dernieresouspage} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{gauche} \setinterfacevariable{leftedge}{bordgauche} \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{margegauche} \setinterfacevariable{leftpage}{pagegauche} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legende} \setinterfacevariable{less}{less} \setinterfacevariable{lesshyphenation}{lesshyphenation} \setinterfacevariable{line}{ligne} \setinterfacevariable{linenote}{noteligne} \setinterfacevariable{lines}{lignes} \setinterfacevariable{list}{liste} \setinterfacevariable{local}{local} \setinterfacevariable{localenvironment}{environementlocal} \setinterfacevariable{logo}{logo} \setinterfacevariable{logos}{logos} \setinterfacevariable{lohi}{baha} \setinterfacevariable{loose}{perte} \setinterfacevariable{low}{bas} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{makeup} \setinterfacevariable{mar}{mar} \setinterfacevariable{march}{mars} \setinterfacevariable{margin}{marge} \setinterfacevariable{marginedge}{bordmarge} \setinterfacevariable{margintitle}{titremarge} \setinterfacevariable{marking}{marquage} \setinterfacevariable{mathalignment}{mathalignment} \setinterfacevariable{mathcases}{mathcases} \setinterfacevariable{mathematics}{mathematique} \setinterfacevariable{mathmatrix}{mathmatrix} \setinterfacevariable{max}{max} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{mai} \setinterfacevariable{mediaeval}{medieval} \setinterfacevariable{medium}{moyen} \setinterfacevariable{middle}{milieu} \setinterfacevariable{min}{min} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{hauteurmin} \setinterfacevariable{minwidth}{largeurmin} \setinterfacevariable{mirrored}{reflete} \setinterfacevariable{monday}{lundi} \setinterfacevariable{mono}{mono} \setinterfacevariable{month}{mois} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} \setinterfacevariable{name}{nom} \setinterfacevariable{narrow}{etroit} \setinterfacevariable{negative}{negatif} \setinterfacevariable{never}{jamais} \setinterfacevariable{new}{nouveau} \setinterfacevariable{next}{prochain} \setinterfacevariable{nextevenpage}{pagepairesuivante} \setinterfacevariable{nextoddpage}{pageimpairesuivante} \setinterfacevariable{nextpage}{pagesuivante} \setinterfacevariable{nextsubpage}{souspagesuivante} \setinterfacevariable{no}{non} \setinterfacevariable{nocheck}{nonverifie} \setinterfacevariable{nofit}{nofit} \setinterfacevariable{nogrid}{nogrid} \setinterfacevariable{nohz}{nohz} \setinterfacevariable{nomarking}{sansmarquage} \setinterfacevariable{none}{rien} \setinterfacevariable{nonumber}{sansnumero} \setinterfacevariable{normal}{normal} \setinterfacevariable{nospacing}{sansespacement} \setinterfacevariable{not}{pas} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{nonsuspendu} \setinterfacevariable{nothyphenated}{nothyphenated} \setinterfacevariable{november}{novembre} \setinterfacevariable{nowhere}{nulpart} \setinterfacevariable{nowhite}{sansblanc} \setinterfacevariable{number}{numero} \setinterfacevariable{numbers}{numeros} \setinterfacevariable{october}{octobre} \setinterfacevariable{odd}{impair} \setinterfacevariable{off}{desactive} \setinterfacevariable{offset}{offset} \setinterfacevariable{old}{old} \setinterfacevariable{on}{actif} \setinterfacevariable{one}{un} \setinterfacevariable{opposite}{opposition} \setinterfacevariable{outer}{exterieur} \setinterfacevariable{outeredge}{bordexterieur} \setinterfacevariable{outermargin}{margeexterieure} \setinterfacevariable{overbar}{overbar} \setinterfacevariable{overbars}{overbars} \setinterfacevariable{overlay}{revetement} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{surlignetout} \setinterfacevariable{overstrikes}{surligne} \setinterfacevariable{packed}{groupe} \setinterfacevariable{page}{page} \setinterfacevariable{pagecomment}{commentairepage} \setinterfacevariable{pagenumber}{numeropage} \setinterfacevariable{paper}{papier} \setinterfacevariable{paragraph}{paragraphe} \setinterfacevariable{part}{partie} \setinterfacevariable{positive}{positif} \setinterfacevariable{postponing}{postponing} \setinterfacevariable{postscript}{postscript} \setinterfacevariable{preference}{preference} \setinterfacevariable{preview}{previsualisation} \setinterfacevariable{previous}{precedent} \setinterfacevariable{previousevenpage}{pagepaireprecedente} \setinterfacevariable{previousoddpage}{pageimpaireprecedente} \setinterfacevariable{previouspage}{pageprecedente} \setinterfacevariable{previoussubpage}{souspageprecedente} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{editable} \setinterfacevariable{process}{process} \setinterfacevariable{product}{produit} \setinterfacevariable{program}{programme} \setinterfacevariable{project}{projet} \setinterfacevariable{protected}{protege} \setinterfacevariable{quadruple}{quadruple} \setinterfacevariable{quarterline}{quarterline} \setinterfacevariable{quotation}{citation} \setinterfacevariable{quote}{citer} \setinterfacevariable{ran}{cours} \setinterfacevariable{random}{aleatoire} \setinterfacevariable{readonly}{lectureseule} \setinterfacevariable{rectangular}{rectangulaire} \setinterfacevariable{reference}{reference} \setinterfacevariable{referral}{referral} \setinterfacevariable{register}{registre} \setinterfacevariable{regular}{regulier} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{relatif} \setinterfacevariable{repeat}{repete} \setinterfacevariable{required}{recquis} \setinterfacevariable{reset}{raz} \setinterfacevariable{reverse}{inverse} \setinterfacevariable{right}{droite} \setinterfacevariable{rightedge}{borddroit} \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{margedroite} \setinterfacevariable{rightpage}{pagedroite} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{roman} \setinterfacevariable{romannumerals}{chiffresromains} \setinterfacevariable{rotate}{oriente} \setinterfacevariable{rotated}{tourne} \setinterfacevariable{round}{rond} \setinterfacevariable{row}{rang} \setinterfacevariable{rule}{regle} \setinterfacevariable{samepage}{memepage} \setinterfacevariable{sans}{sans} \setinterfacevariable{sansbold}{sansgras} \setinterfacevariable{sansserif}{sansserif} \setinterfacevariable{saturday}{samedi} \setinterfacevariable{screen}{ecran} \setinterfacevariable{section}{section} \setinterfacevariable{sectionblockenvironment}{environementblocsection} \setinterfacevariable{sectionnumber}{numerosection} \setinterfacevariable{see}{voit} \setinterfacevariable{september}{septembre} \setinterfacevariable{serif}{serif} \setinterfacevariable{serried}{serried} \setinterfacevariable{setups}{reglages} \setinterfacevariable{sheet}{sheet} \setinterfacevariable{short}{short} \setinterfacevariable{singlesided}{recto} \setinterfacevariable{slanted}{incline} \setinterfacevariable{slantedbold}{grasincline} \setinterfacevariable{small}{petit} \setinterfacevariable{smallbodyfont}{petitepolicecorps} \setinterfacevariable{smallbold}{graspetit} \setinterfacevariable{smallbolditalic}{italiquegraspetit} \setinterfacevariable{smallboldslanted}{inclinegraspetit} \setinterfacevariable{smallcaps}{petitescapitales} \setinterfacevariable{smaller}{smaller} \setinterfacevariable{smallitalic}{italiquepetit} \setinterfacevariable{smallitalicbold}{grasitaliquepetit} \setinterfacevariable{smallnormal}{normalpetit} \setinterfacevariable{smallslanted}{inclinepetit} \setinterfacevariable{smallslantedbold}{grasinclinepetit} \setinterfacevariable{smalltype}{petittype} \setinterfacevariable{somewhere}{qqpart} \setinterfacevariable{sorted}{trie} \setinterfacevariable{space}{espace} \setinterfacevariable{spacing}{espacement} \setinterfacevariable{speech}{discours} \setinterfacevariable{split}{split} \setinterfacevariable{spot}{spot} \setinterfacevariable{standard}{standard} \setinterfacevariable{start}{demarre} \setinterfacevariable{starter}{starter} \setinterfacevariable{sticker}{sticker} \setinterfacevariable{stop}{stoppe} \setinterfacevariable{stopper}{stopper} \setinterfacevariable{stretch}{etire} \setinterfacevariable{strict}{strict} \setinterfacevariable{strong}{strong} \setinterfacevariable{strut}{strut} \setinterfacevariable{sub}{sous} \setinterfacevariable{subbackward}{sousretourarriere} \setinterfacevariable{subformula}{subformule} \setinterfacevariable{subforward}{sousavance} \setinterfacevariable{subject}{sujet} \setinterfacevariable{subpage}{souspage} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{soussection} \setinterfacevariable{subsubject}{soussujet} \setinterfacevariable{subsubsection}{soussoussection} \setinterfacevariable{subsubsubject}{soussoussujet} \setinterfacevariable{subsubsubsection}{soussoussoussection} \setinterfacevariable{subsubsubsubject}{soussoussoussujet} \setinterfacevariable{subsubsubsubsection}{soussoussoussoussection} \setinterfacevariable{subsubsubsubsubject}{soussoussoussoussujet} \setinterfacevariable{subsubsubsubsubsection}{soussoussoussoussoussection} \setinterfacevariable{subsubsubsubsubsubject}{soussoussoussoussoussujet} \setinterfacevariable{subsubsubsubsubsubsection}{soussoussoussoussoussoussection} \setinterfacevariable{subsubsubsubsubsubsubject}{soussoussoussoussoussoussujet} \setinterfacevariable{subsubsubsubsubsubsubsection}{soussoussoussoussoussoussoussection} \setinterfacevariable{subsubsubsubsubsubsubsubject}{soussoussoussoussoussoussoussujet} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{soussoussoussoussoussoussoussoussection} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{soussoussoussoussoussoussoussoussujet} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{soussoussoussoussoussoussoussoussoussection} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{soussoussoussoussoussoussoussoussoussujet} \setinterfacevariable{sunday}{dimanche} \setinterfacevariable{support}{support} \setinterfacevariable{sym}{sym} \setinterfacevariable{symbol}{symbole} \setinterfacevariable{synchronize}{synchronize} \setinterfacevariable{system}{systeme} \setinterfacevariable{table}{tableau} \setinterfacevariable{tablehead}{tetetableau} \setinterfacevariable{tables}{tables} \setinterfacevariable{tabletail}{queuetableau} \setinterfacevariable{tabulate}{tabule} \setinterfacevariable{tabulatehead}{tetetabule} \setinterfacevariable{tabulatetail}{queuetabule} \setinterfacevariable{tall}{long} \setinterfacevariable{teletype}{teletype} \setinterfacevariable{temporary}{temporaire} \setinterfacevariable{test}{test} \setinterfacevariable{text}{texte} \setinterfacevariable{three}{trois} \setinterfacevariable{thursday}{jeudi} \setinterfacevariable{tight}{tight} \setinterfacevariable{title}{titre} \setinterfacevariable{toggle}{toggle} \setinterfacevariable{tolerant}{tolerant} \setinterfacevariable{top}{sup} \setinterfacevariable{tuesday}{mardi} \setinterfacevariable{two}{deux} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{type} \setinterfacevariable{typing}{typing} \setinterfacevariable{unavailable}{indisponible} \setinterfacevariable{underbar}{souslignetout} \setinterfacevariable{underbars}{sousligne} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{unite} \setinterfacevariable{units}{unites} \setinterfacevariable{unknown}{inconnu} \setinterfacevariable{unpacked}{degroupe} \setinterfacevariable{up}{up} \setinterfacevariable{url}{url} \setinterfacevariable{used}{used} \setinterfacevariable{value}{valeur} \setinterfacevariable{vertical}{verticale} \setinterfacevariable{very}{tres} \setinterfacevariable{verystrict}{tresstrict} \setinterfacevariable{verytolerant}{trestolerant} \setinterfacevariable{weak}{weak} \setinterfacevariable{wednesday}{mercredi} \setinterfacevariable{week}{semaine} \setinterfacevariable{weekday}{joursemaine} \setinterfacevariable{white}{blanc} \setinterfacevariable{wide}{ample} \setinterfacevariable{width}{largeur} \setinterfacevariable{word}{mot} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{annee} \setinterfacevariable{yes}{oui} % definitions for interface constants for language fr % \setinterfaceconstant{action}{action} \setinterfaceconstant{address}{adresse} \setinterfaceconstant{after}{apres} \setinterfaceconstant{afterhead}{aprestete} \setinterfaceconstant{afterkey}{aprescle} \setinterfaceconstant{aftersection}{aftersection} \setinterfaceconstant{align}{alignement} \setinterfaceconstant{aligncharacter}{caracterealigne} \setinterfaceconstant{alignmentcharacter}{alignementcaractere} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{alignementtitre} \setinterfaceconstant{alternative}{alternative} \setinterfaceconstant{anchor}{anchor} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{fleche} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{a} \setinterfaceconstant{author}{auteur} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{auto} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{autofile} \setinterfaceconstant{autofocus}{autofocus} \setinterfaceconstant{autohang}{autohang} \setinterfaceconstant{autostrut}{autostrut} \setinterfaceconstant{autowidth}{autolargeur} \setinterfaceconstant{availableheight}{availableheight} \setinterfaceconstant{availablewidth}{availablewidth} \setinterfaceconstant{axis}{axe} \setinterfaceconstant{background}{arriereplan} \setinterfaceconstant{backgroundcolor}{couleurarriereplan} \setinterfaceconstant{backgroundcorner}{coinarriereplan} \setinterfaceconstant{backgrounddepth}{profondeurarriereplan} \setinterfaceconstant{backgroundoffset}{decalagearriereplan} \setinterfaceconstant{backgroundradius}{rayonarriereplan} \setinterfaceconstant{backgroundscreen}{ecranarriereplan} \setinterfaceconstant{backreference}{backreference} \setinterfaceconstant{backspace}{retour} \setinterfaceconstant{balance}{equilibre} \setinterfaceconstant{before}{avant} \setinterfaceconstant{beforehead}{avanttete} \setinterfaceconstant{beforesection}{beforesection} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{grand} \setinterfaceconstant{blank}{vide} \setinterfaceconstant{blockway}{blockway} \setinterfaceconstant{bodyfont}{policecorps} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{marquepage} \setinterfaceconstant{bottom}{inf} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{distanceinf} \setinterfaceconstant{bottomframe}{cadreinf} \setinterfaceconstant{bottomoffset}{decalageinf} \setinterfaceconstant{bottomspace}{espaceinf} \setinterfaceconstant{bottomstate}{etatinf} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{cache} \setinterfaceconstant{calculate}{calculer} \setinterfaceconstant{category}{category} \setinterfaceconstant{ccommand}{ccommande} \setinterfaceconstant{click}{clic} \setinterfaceconstant{clickin}{clicinterieur} \setinterfaceconstant{clickout}{clicexterieur} \setinterfaceconstant{clipoffset}{clipoffset} \setinterfaceconstant{closeaction}{actionfermeture} \setinterfaceconstant{closecommand}{closecommand} \setinterfaceconstant{closepage}{closepage} \setinterfaceconstant{closepageaction}{actionfermeturepage} \setinterfaceconstant{closesymbol}{closesymbol} \setinterfaceconstant{color}{couleur} \setinterfaceconstant{column}{colonne} \setinterfaceconstant{columndistance}{distancecolonne} \setinterfaceconstant{columns}{colonnes} \setinterfaceconstant{command}{commande} \setinterfaceconstant{commandafter}{commandeapres} \setinterfaceconstant{commandbefore}{commandeavant} \setinterfaceconstant{commands}{commandes} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{composant} \setinterfaceconstant{compoundhyphen}{compoundhyphen} \setinterfaceconstant{compress}{compress} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{continue} \setinterfaceconstant{contrastcolor}{coleurcontraste} \setinterfaceconstant{controls}{controles} \setinterfaceconstant{conversion}{conversion} \setinterfaceconstant{convertfile}{conversionfichier} \setinterfaceconstant{corner}{coin} \setinterfaceconstant{coupling}{couplage} \setinterfaceconstant{couplingway}{modecouplage} \setinterfaceconstant{criterium}{critere} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{courant} \setinterfaceconstant{cutspace}{cutspace} \setinterfaceconstant{dash}{pointille} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{date} \setinterfaceconstant{deepnumbercommand}{deepnumbercommand} \setinterfaceconstant{deeptextcommand}{deeptextcommand} \setinterfaceconstant{default}{defaut} \setinterfaceconstant{delay}{delai} \setinterfaceconstant{depth}{profondeur} \setinterfaceconstant{depthcorrection}{correctionprofondeur} \setinterfaceconstant{direction}{direction} \setinterfaceconstant{directory}{repertoire} \setinterfaceconstant{display}{affichage} \setinterfaceconstant{distance}{distance} \setinterfaceconstant{dot}{point} \setinterfaceconstant{doublesided}{rectoverso} \setinterfaceconstant{dummy}{dummy} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{bord} \setinterfaceconstant{edgedistance}{distancebord} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{vide} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{entries} \setinterfaceconstant{equalheight}{equalheight} \setinterfaceconstant{equalwidth}{equalwidth} \setinterfaceconstant{escape}{escape} \setinterfaceconstant{evenmargin}{margepaire} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{expansion} \setinterfaceconstant{export}{export} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{facteur} \setinterfaceconstant{fallback}{fallback} \setinterfaceconstant{family}{famille} \setinterfaceconstant{fieldbackgroundcolor}{couleurarrierreplanchamp} \setinterfaceconstant{fieldframecolor}{couleurcadrechamp} \setinterfaceconstant{fieldlayer}{calquechamp} \setinterfaceconstant{fieldoffset}{offsetchamp} \setinterfaceconstant{file}{fichier} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{premierepage} \setinterfaceconstant{focus}{focus} \setinterfaceconstant{focusin}{focusin} \setinterfaceconstant{focusout}{focusout} \setinterfaceconstant{footer}{pdp} \setinterfaceconstant{footerdistance}{dsitancepdp} \setinterfaceconstant{footerstate}{etatpdp} \setinterfaceconstant{force}{force} \setinterfaceconstant{foregroundcolor}{couleurpremierplan} \setinterfaceconstant{foregroundstyle}{stylepremierplan} \setinterfaceconstant{format}{formatter} \setinterfaceconstant{frame}{cadre} \setinterfaceconstant{framecolor}{couleurcadre} \setinterfaceconstant{framecorner}{coincadre} \setinterfaceconstant{framedepth}{profondeurcadre} \setinterfaceconstant{frameoffset}{decalagecadre} \setinterfaceconstant{frameradius}{rayoncadre} \setinterfaceconstant{frames}{cadres} \setinterfaceconstant{from}{de} \setinterfaceconstant{get}{obtient} \setinterfaceconstant{global}{global} \setinterfaceconstant{grid}{grille} \setinterfaceconstant{hang}{suspend} \setinterfaceconstant{hcompact}{hcompact} \setinterfaceconstant{headalign}{headalign} \setinterfaceconstant{headcolor}{couleurtete} \setinterfaceconstant{headcommand}{commandetete} \setinterfaceconstant{headconversion}{conversiontete} \setinterfaceconstant{header}{entete} \setinterfaceconstant{headerdistance}{distanceentete} \setinterfaceconstant{headerstate}{etatentete} \setinterfaceconstant{headlabel}{etiquettetete} \setinterfaceconstant{headnumber}{numerotete} \setinterfaceconstant{headstyle}{styletete} \setinterfaceconstant{height}{hauteur} \setinterfaceconstant{hfactor}{facteurhauteur} \setinterfaceconstant{hfil}{hfil} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{decalagehauteur} \setinterfaceconstant{horoffset}{horoffset} \setinterfaceconstant{hyphen}{hyphen} \setinterfaceconstant{icommand}{icommande} \setinterfaceconstant{in}{in} \setinterfaceconstant{inbetween}{entre} \setinterfaceconstant{increment}{incremente} \setinterfaceconstant{incrementnumber}{incrementenumero} \setinterfaceconstant{indenting}{composeenalinea} \setinterfaceconstant{indentnext}{indentesuivant} \setinterfaceconstant{indicator}{indicateur} \setinterfaceconstant{inner}{interieur} \setinterfaceconstant{innermargin}{margeinterieure} \setinterfaceconstant{inputfile}{fichierentree} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interaction} \setinterfaceconstant{interlinespace}{espaceinterligne} \setinterfaceconstant{internalgrid}{internalgrid} \setinterfaceconstant{itemalign}{itemalign} \setinterfaceconstant{items}{elements} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{keyexpansion} \setinterfaceconstant{keys}{keys} \setinterfaceconstant{keyword}{motcle} \setinterfaceconstant{label}{etiquette} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{dernierepage} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{gauche} \setinterfaceconstant{leftcolor}{couleurgauche} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{bordgauche} \setinterfaceconstant{leftedgedistance}{distancebordgauche} \setinterfaceconstant{leftframe}{cadregauche} \setinterfaceconstant{lefthyphen}{lefthyphen} \setinterfaceconstant{leftmargin}{margegauche} \setinterfaceconstant{leftmargindistance}{distancemargegauche} \setinterfaceconstant{leftoffset}{decalagegauche} \setinterfaceconstant{leftquotation}{citationgauche} \setinterfaceconstant{leftquote}{citergauche} \setinterfaceconstant{leftsentence}{phrasegauche} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{leftstyle} \setinterfaceconstant{leftsubsentence}{sousphrasegauche} \setinterfaceconstant{lefttext}{textegauche} \setinterfaceconstant{leftwidth}{largeurgauche} \setinterfaceconstant{less}{less} \setinterfaceconstant{level}{niveau} \setinterfaceconstant{levels}{niveaux} \setinterfaceconstant{limittext}{limittext} \setinterfaceconstant{line}{ligne} \setinterfaceconstant{linecorrection}{correctionligne} \setinterfaceconstant{lines}{lignes} \setinterfaceconstant{list}{liste} \setinterfaceconstant{listtext}{texteliste} \setinterfaceconstant{local}{local} \setinterfaceconstant{location}{emplacement} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{logo} \setinterfaceconstant{logos}{logos} \setinterfaceconstant{marcolor}{couleurmarquage} \setinterfaceconstant{margin}{marge} \setinterfaceconstant{margindistance}{distancemarge} \setinterfaceconstant{marginedge}{bordmarge} \setinterfaceconstant{marginedgetext}{textebordmarge} \setinterfaceconstant{margintext}{textemarge} \setinterfaceconstant{marking}{marquage} \setinterfaceconstant{marstyle}{stylemarquage} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{hauteurmax} \setinterfaceconstant{maxwidth}{largeurmax} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{menu} \setinterfaceconstant{method}{methode} \setinterfaceconstant{middle}{milieu} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middletext}{textecentre} \setinterfaceconstant{midsentence}{midsentence} \setinterfaceconstant{min}{min} \setinterfaceconstant{mindepth}{profondeurmin} \setinterfaceconstant{minheight}{hauteurmin} \setinterfaceconstant{minwidth}{largeurmin} \setinterfaceconstant{monthconversion}{monthconversion} \setinterfaceconstant{more}{more} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{nom} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{ninf} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{suivant} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{ngauche} \setinterfaceconstant{nlines}{nlignes} \setinterfaceconstant{norm}{norme} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{ndroite} \setinterfaceconstant{ntop}{nsup} \setinterfaceconstant{number}{numero} \setinterfaceconstant{numbercolor}{couleurnumero} \setinterfaceconstant{numbercommand}{commandenumero} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{numerotation} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{separateurnumbero} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{stylenumero} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{objet} \setinterfaceconstant{obstruction}{obstruction} \setinterfaceconstant{oddmargin}{margepaire} \setinterfaceconstant{offset}{offset} \setinterfaceconstant{openaction}{actionouverture} \setinterfaceconstant{openpage}{openpage} \setinterfaceconstant{openpageaction}{actionouverturepage} \setinterfaceconstant{option}{option} \setinterfaceconstant{order}{order} \setinterfaceconstant{orientation}{orientation} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{margeexterieure} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{numeroproprio} \setinterfaceconstant{page}{page} \setinterfaceconstant{pageboundaries}{limitespage} \setinterfaceconstant{pagecolor}{couleurpage} \setinterfaceconstant{pagecolormodel}{pagecolormodel} \setinterfaceconstant{pagecommand}{commandepage} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{numeropage} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{etatpage} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{stylepage} \setinterfaceconstant{palet}{palette} \setinterfaceconstant{paper}{papier} \setinterfaceconstant{paragraph}{paragraphe} \setinterfaceconstant{place}{place} \setinterfaceconstant{placehead}{placetete} \setinterfaceconstant{placestopper}{emplacementstopper} \setinterfaceconstant{position}{position} \setinterfaceconstant{prefix}{prefixe} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{prereglage} \setinterfaceconstant{preview}{previsualisation} \setinterfaceconstant{previous}{precedent} \setinterfaceconstant{previousnumber}{numeroprecedent} \setinterfaceconstant{printable}{editable} \setinterfaceconstant{process}{process} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{rayon} \setinterfaceconstant{random}{aleatoire} \setinterfaceconstant{range}{range} \setinterfaceconstant{reduction}{reduction} \setinterfaceconstant{ref}{ref} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{reference} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{referencing} \setinterfaceconstant{region}{region} \setinterfaceconstant{regionin}{entreregion} \setinterfaceconstant{regionout}{regionexterieure} \setinterfaceconstant{repeat}{repete} \setinterfaceconstant{reset}{reset} \setinterfaceconstant{resetnumber}{raznumero} \setinterfaceconstant{resolution}{resolution} \setinterfaceconstant{right}{droite} \setinterfaceconstant{rightcolor}{couleurdroite} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{borddroit} \setinterfaceconstant{rightedgedistance}{distanceborddroit} \setinterfaceconstant{rightframe}{cadredroit} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{margedroite} \setinterfaceconstant{rightmargindistance}{distancemargedroite} \setinterfaceconstant{rightoffset}{rightoffset} \setinterfaceconstant{rightquotation}{citationdroite} \setinterfaceconstant{rightquote}{citerdroite} \setinterfaceconstant{rightsentence}{phrasedroite} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{styledroit} \setinterfaceconstant{rightsubsentence}{sousphrasedroite} \setinterfaceconstant{righttext}{textedroit} \setinterfaceconstant{rightwidth}{largeurdroite} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{rotation} \setinterfaceconstant{rule}{ligne} \setinterfaceconstant{rulecolor}{couleurligne} \setinterfaceconstant{rulecommand}{rulecommand} \setinterfaceconstant{rulethickness}{epaisseurligne} \setinterfaceconstant{samepage}{memepage} \setinterfaceconstant{sample}{echantillon} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{echelle} \setinterfaceconstant{scope}{scope} \setinterfaceconstant{screen}{ecran} \setinterfaceconstant{section}{section} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{numerosection} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{separateur} \setinterfaceconstant{set}{set} \setinterfaceconstant{setups}{reglages} \setinterfaceconstant{shrink}{shrink} \setinterfaceconstant{side}{cote} \setinterfaceconstant{sidealign}{sidealign} \setinterfaceconstant{sidemethod}{sidemethod} \setinterfaceconstant{sidespaceafter}{espacelateralapres} \setinterfaceconstant{sidespacebefore}{espacelateralavant} \setinterfaceconstant{sign}{signe} \setinterfaceconstant{size}{dimension} \setinterfaceconstant{small}{petit} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} \setinterfaceconstant{source}{origine} \setinterfaceconstant{space}{espace} \setinterfaceconstant{spaceafter}{espaceapres} \setinterfaceconstant{spacebefore}{espaceavant} \setinterfaceconstant{spaceinbetween}{spaceinbetween} \setinterfaceconstant{spacing}{espacement} \setinterfaceconstant{split}{split} \setinterfaceconstant{splitcolor}{splitcolor} \setinterfaceconstant{splitmethod}{splitmethod} \setinterfaceconstant{splitoffset}{splitoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stack} \setinterfaceconstant{start}{demarre} \setinterfaceconstant{starter}{starter} \setinterfaceconstant{state}{etat} \setinterfaceconstant{step}{pas} \setinterfaceconstant{stop}{stoppe} \setinterfaceconstant{stopper}{taquet} \setinterfaceconstant{stretch}{etire} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{strut} \setinterfaceconstant{style}{style} \setinterfaceconstant{sub}{sous} \setinterfaceconstant{subtitle}{soustitre} \setinterfaceconstant{suffix}{suffix} \setinterfaceconstant{suffixseparator}{suffixseparator} \setinterfaceconstant{suffixstopper}{suffixstopper} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{symalignement} \setinterfaceconstant{symbol}{symbole} \setinterfaceconstant{symbolset}{jeusymbole} \setinterfaceconstant{symcolor}{couleursym} \setinterfaceconstant{symstyle}{stylesym} \setinterfaceconstant{synonym}{synonyme} \setinterfaceconstant{synonymcolor}{couleursynonyme} \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{stylesynonyme} \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{texte} \setinterfaceconstant{textcolor}{couleurtexte} \setinterfaceconstant{textcommand}{commandetexte} \setinterfaceconstant{textdistance}{distancetexte} \setinterfaceconstant{textheight}{hauteurtexte} \setinterfaceconstant{textlayer}{calquetexte} \setinterfaceconstant{textmargin}{margetexte} \setinterfaceconstant{textmethod}{textmethod} \setinterfaceconstant{textseparator}{separateurtexte} \setinterfaceconstant{textsize}{tailletexte} \setinterfaceconstant{textstate}{etattexte} \setinterfaceconstant{textstyle}{styletexte} \setinterfaceconstant{textwidth}{largeurtexte} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{titre} \setinterfaceconstant{titlecolor}{couleurtitre} \setinterfaceconstant{titlecommand}{titlecommand} \setinterfaceconstant{titledistance}{distancetitre} \setinterfaceconstant{titleleft}{titleleft} \setinterfaceconstant{titleright}{titleright} \setinterfaceconstant{titlestyle}{styletitre} \setinterfaceconstant{to}{vers} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolerance} \setinterfaceconstant{top}{sup} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{distancesup} \setinterfaceconstant{topframe}{cadresup} \setinterfaceconstant{topoffset}{decalagesup} \setinterfaceconstant{topspace}{espacesup} \setinterfaceconstant{topstate}{etatsup} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{type} \setinterfaceconstant{unit}{unite} \setinterfaceconstant{unknownreference}{referenceinconnue} \setinterfaceconstant{urlalternative}{alternativeurl} \setinterfaceconstant{urlspace}{espaceurl} \setinterfaceconstant{validate}{valider} \setinterfaceconstant{values}{values} \setinterfaceconstant{vcommand}{vcommande} \setinterfaceconstant{vcompact}{vcompact} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{veroffset} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{voffset} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{mode} \setinterfaceconstant{wfactor}{facteurlargeur} \setinterfaceconstant{white}{blanc} \setinterfaceconstant{width}{largeur} \setinterfaceconstant{xfactor}{xfactor} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{xoffset} \setinterfaceconstant{xscale}{xscale} \setinterfaceconstant{xstep}{xstep} \setinterfaceconstant{yfactor}{yfactor} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{yoffset} \setinterfaceconstant{yscale}{yscale} \setinterfaceconstant{ystep}{ystep} % definitions for interface elements for language fr % \setinterfaceelement{answerlines}{answerlines} \setinterfaceelement{answerspace}{answerspace} \setinterfaceelement{begin}{debut} \setinterfaceelement{complete}{complete} \setinterfaceelement{coupled}{couple} \setinterfaceelement{currentlocal}{localcourant} \setinterfaceelement{end}{fin} \setinterfaceelement{endsetup}{} \setinterfaceelement{get}{obtient} \setinterfaceelement{increment}{incremente} \setinterfaceelement{list}{liste} \setinterfaceelement{listof}{listede} \setinterfaceelement{load}{charge} \setinterfaceelement{local}{local} \setinterfaceelement{makeup}{makeup} \setinterfaceelement{next}{suivant} \setinterfaceelement{place}{place} \setinterfaceelement{previous}{precedent} \setinterfaceelement{previouslocal}{localprecedent} \setinterfaceelement{reserve}{reserver} \setinterfaceelement{see}{voit} \setinterfaceelement{setup}{regle} \setinterfaceelement{start}{demarre} \setinterfaceelement{stop}{stoppe} \setinterfaceelement{text}{texte} \setinterfaceelement{type}{type} % definitions for interface commands for language fr % \setinterfacecommand{CAPPED}{CAP} \setinterfacecommand{Character}{Caractere} \setinterfacecommand{Characters}{Caracteres} \setinterfacecommand{MONTH}{MOIS} \setinterfacecommand{Numbers}{Numeros} \setinterfacecommand{Romannumerals}{Chiffresromains} \setinterfacecommand{SmallCapped}{Cap} \setinterfacecommand{SmallCaps}{Caps} \setinterfacecommand{WEEKDAY}{JOURSEMAINE} \setinterfacecommand{WORD}{MOT} \setinterfacecommand{WORDS}{MOTS} \setinterfacecommand{Word}{Mot} \setinterfacecommand{Words}{Mots} \setinterfacecommand{about}{concernant} \setinterfacecommand{adaptlayout}{adaptedisposition} \setinterfacecommand{arg}{arg} \setinterfacecommand{at}{a} \setinterfacecommand{atleftmargin}{atleftmargin} \setinterfacecommand{atpage}{alapage} \setinterfacecommand{atrightmargin}{atrightmargin} \setinterfacecommand{background}{arriereplan} \setinterfacecommand{backspace}{retourarriere} \setinterfacecommand{blackrule}{lignenoire} \setinterfacecommand{blackrules}{lignesnoires} \setinterfacecommand{blank}{vide} \setinterfacecommand{bookmark}{marquepage} \setinterfacecommand{bottomdistance}{distanceinf} \setinterfacecommand{bottomheight}{hauteurinf} \setinterfacecommand{bottomspace}{espaceinf} \setinterfacecommand{but}{but} \setinterfacecommand{button}{bouton} \setinterfacecommand{bypassblocks}{sauteblocs} \setinterfacecommand{character}{caractere} \setinterfacecommand{characters}{caracteres} \setinterfacecommand{chem}{chem} \setinterfacecommand{clip}{clip} \setinterfacecommand{clonefield}{clonechamp} \setinterfacecommand{color}{couleur} \setinterfacecommand{colorbar}{barrecouleur} \setinterfacecommand{colorvalue}{valeurcouleur} \setinterfacecommand{column}{colonne} \setinterfacecommand{comparecolorgroup}{comparegroupecouleur} \setinterfacecommand{comparepalet}{comparepalette} \setinterfacecommand{completepagenumber}{completenumeropage} \setinterfacecommand{completeregister}{completeregistre} \setinterfacecommand{component}{composant} \setinterfacecommand{convertnumber}{convertitnumero} \setinterfacecommand{copyfield}{copitchamp} \setinterfacecommand{correctwhitespace}{corrigeespaceblanc} \setinterfacecommand{coupledocument}{coupledocument} \setinterfacecommand{couplemarking}{couplemarquage} \setinterfacecommand{couplepage}{pagedouble} \setinterfacecommand{couplepaper}{couplepapier} \setinterfacecommand{coupleregister}{coupleregistre} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{datecourante} \setinterfacecommand{currentheadnumber}{numerotetecourant} \setinterfacecommand{cutspace}{cutspace} \setinterfacecommand{date}{date} \setinterfacecommand{decouplemarking}{decouplemarquage} \setinterfacecommand{decrementnumber}{decrementenumero} \setinterfacecommand{define}{definit} \setinterfacecommand{defineaccent}{definitaccent} \setinterfacecommand{defineblank}{definitvide} \setinterfacecommand{defineblock}{definitbloc} \setinterfacecommand{definebodyfont}{definitpolicecorps} \setinterfacecommand{definebodyfontenvironment}{definitenvironnementpolicecorps} \setinterfacecommand{definebuffer}{definitbuffer} \setinterfacecommand{definecharacter}{definicaractere} \setinterfacecommand{definecolor}{definitcouleur} \setinterfacecommand{definecolorgroup}{definitgroupecouleur} \setinterfacecommand{definecolumnbreak}{definitsautdecolonne} \setinterfacecommand{definecolumnset}{definitjeucolonne} \setinterfacecommand{definecombination}{definecombination} \setinterfacecommand{definecombinedlist}{definitlisteimbriquee} \setinterfacecommand{definecommand}{definitcommande} \setinterfacecommand{defineconversion}{definitconversion} \setinterfacecommand{definedescription}{definitdescription} \setinterfacecommand{defineenumeration}{definitenumeration} \setinterfacecommand{definefield}{definitchamp} \setinterfacecommand{definefieldstack}{definitpilechamp} \setinterfacecommand{definefiguresymbol}{definitsymbolefigure} \setinterfacecommand{definefloat}{definitflottant} \setinterfacecommand{definefont}{definitpolice} \setinterfacecommand{definefontstyle}{definitstylepolice} \setinterfacecommand{definefontsynonym}{definitsynonymepolice} \setinterfacecommand{defineframed}{defineframed} \setinterfacecommand{defineframedtext}{defineframedtext} \setinterfacecommand{definehbox}{definithbox} \setinterfacecommand{definehead}{definittete} \setinterfacecommand{defineindentedtext}{defineindentedtext} \setinterfacecommand{defineinmargin}{definitdansmarge} \setinterfacecommand{defineinteractionmenu}{definitmenuinteraction} \setinterfacecommand{defineitemgroup}{defineitemgroup} \setinterfacecommand{definelabel}{definitetiquette} \setinterfacecommand{definelayer}{definitcalque} \setinterfacecommand{definelayout}{definitdisposition} \setinterfacecommand{definelist}{definitliste} \setinterfacecommand{definelogo}{definitlogo} \setinterfacecommand{definemainfield}{definitchampprincipal} \setinterfacecommand{definemakeup}{definitmakeup} \setinterfacecommand{definemarking}{definitmarquage} \setinterfacecommand{definemathalignment}{definemathalignment} \setinterfacecommand{defineoutput}{definitsortie} \setinterfacecommand{defineoverlay}{definitrevetement} \setinterfacecommand{definepagebreak}{definitsautdepage} \setinterfacecommand{definepalet}{definitpalette} \setinterfacecommand{definepapersize}{definittaillepapier} \setinterfacecommand{defineparagraphs}{definitparagraphes} \setinterfacecommand{defineplacement}{defineplacement} \setinterfacecommand{defineprofile}{definitprofil} \setinterfacecommand{defineprogram}{definitprogramme} \setinterfacecommand{definerawfont}{definitpolicebrute} \setinterfacecommand{definereference}{definitreference} \setinterfacecommand{definereferenceformat}{definitformatreference} \setinterfacecommand{definereferencelist}{definitlistereference} \setinterfacecommand{defineregister}{definitregistre} \setinterfacecommand{definerule}{definitregle} \setinterfacecommand{definesection}{definitsection} \setinterfacecommand{definesectionblock}{definitblocsection} \setinterfacecommand{definesorting}{definittri} \setinterfacecommand{definestartstop}{definitdemarrestoppe} \setinterfacecommand{definestyle}{definitstyle} \setinterfacecommand{definesubfield}{definitsouschamp} \setinterfacecommand{definesymbol}{definitsymbole} \setinterfacecommand{definesynonyms}{definitsynonymes} \setinterfacecommand{definetabletemplate}{definittrametableau} \setinterfacecommand{definetabulate}{definittabulation} \setinterfacecommand{definetext}{definittexte} \setinterfacecommand{definetextposition}{definitpositiontexte} \setinterfacecommand{definetextvariable}{definitvariabletexte} \setinterfacecommand{definetype}{definittype} \setinterfacecommand{definetyping}{definitdactylo} \setinterfacecommand{defineversion}{definitversion} \setinterfacecommand{determineheadnumber}{determinenumerotete} \setinterfacecommand{determinelistcharacteristics}{determinecaracteristiqueliste} \setinterfacecommand{determineregistercharacteristics}{determinecaracteristiquesregistre} \setinterfacecommand{dimension}{dimension} \setinterfacecommand{disableinteractionmenu}{inhibemenuinteraction} \setinterfacecommand{domicile}{domicile} \setinterfacecommand{donttest}{sanstest} \setinterfacecommand{edgedistance}{distancebord} \setinterfacecommand{edgewidth}{largeurbord} \setinterfacecommand{emptylines}{emptylines} \setinterfacecommand{environment}{environement} \setinterfacecommand{externalfigure}{figureexterne} \setinterfacecommand{fact}{fait} \setinterfacecommand{field}{champ} \setinterfacecommand{fieldstack}{pilechamp} \setinterfacecommand{fillinfield}{remplitchamp} \setinterfacecommand{fillinline}{remplitligne} \setinterfacecommand{fillinrules}{remplitlignesreglees} \setinterfacecommand{fillintext}{remplittexte} \setinterfacecommand{fitfield}{ajustechamp} \setinterfacecommand{fixedspace}{espacefixe} \setinterfacecommand{fixedspaces}{espacesfixes} \setinterfacecommand{followprofile}{suivantprofil} \setinterfacecommand{followprofileversion}{suivantversionprofil} \setinterfacecommand{followversion}{suivantversion} \setinterfacecommand{footerdistance}{distancepdp} \setinterfacecommand{footerheight}{hauteurpdp} \setinterfacecommand{footnote}{notepdp} \setinterfacecommand{footnotetext}{textenotepdp} \setinterfacecommand{forceblocks}{forceblocs} \setinterfacecommand{formulanumber}{numeroformule} \setinterfacecommand{fraction}{fraction} \setinterfacecommand{framed}{framed} \setinterfacecommand{from}{de} \setinterfacecommand{getbuffer}{prendbuffer} \setinterfacecommand{getmarking}{obtientmarquage} \setinterfacecommand{getnumber}{getnumber} \setinterfacecommand{godown}{vaenbas} \setinterfacecommand{goto}{va} \setinterfacecommand{gotobox}{vaalaboite} \setinterfacecommand{gotopage}{vaalapage} \setinterfacecommand{graycolor}{couleurgrise} \setinterfacecommand{greyvalue}{valeurgris} \setinterfacecommand{grid}{grille} \setinterfacecommand{hairline}{ligneh} \setinterfacecommand{head}{tete} \setinterfacecommand{headerdistance}{distanceentete} \setinterfacecommand{headerheight}{hauteurentete} \setinterfacecommand{headlevel}{niveautete} \setinterfacecommand{headnumber}{numerotete} \setinterfacecommand{headsym}{headsym} \setinterfacecommand{headtext}{textetete} \setinterfacecommand{hideblocks}{cacheblocs} \setinterfacecommand{high}{haut} \setinterfacecommand{hl}{hl} \setinterfacecommand{immediatebetweenlist}{immediatebetweenlist} \setinterfacecommand{immediatetolist}{immediatetolist} \setinterfacecommand{in}{dans} \setinterfacecommand{incrementnumber}{incrementenumero} \setinterfacecommand{indenting}{composeenalinea} \setinterfacecommand{inframed}{inframed} \setinterfacecommand{infull}{infull} \setinterfacecommand{ininner}{ininner} \setinterfacecommand{inleft}{dansgauche} \setinterfacecommand{inleftedge}{dansbordgauche} \setinterfacecommand{inleftmargin}{dansmargegauche} \setinterfacecommand{inline}{alaligne} \setinterfacecommand{inmargin}{dansmarge} \setinterfacecommand{inmframed}{inmframed} \setinterfacecommand{inneredgedistance}{inneredgedistance} \setinterfacecommand{inneredgewidth}{inneredgewidth} \setinterfacecommand{innermargindistance}{innermargindistance} \setinterfacecommand{innermarginwidth}{innermarginwidth} \setinterfacecommand{inothermargin}{dansautremarge} \setinterfacecommand{inouter}{inouter} \setinterfacecommand{inright}{dansdroite} \setinterfacecommand{inrightedge}{dansborddroit} \setinterfacecommand{inrightmargin}{dansmargedroite} \setinterfacecommand{installlanguage}{installelangue} \setinterfacecommand{interactionbar}{barreinteraction} \setinterfacecommand{interactionbuttons}{boutonsinteraction} \setinterfacecommand{interactionmenu}{menuinteraction} \setinterfacecommand{item}{element} \setinterfacecommand{items}{elements} \setinterfacecommand{its}{el} \setinterfacecommand{keepblocks}{gardeblocs} \setinterfacecommand{label}{etiquette} \setinterfacecommand{labels}{etiquettes} \setinterfacecommand{labeltext}{labeltexte} \setinterfacecommand{language}{langue} \setinterfacecommand{leftaligned}{aligneagauche} \setinterfacecommand{leftedgedistance}{distancebordgauche} \setinterfacecommand{leftedgewidth}{largeurbordgauche} \setinterfacecommand{leftmargindistance}{distancemargegauche} \setinterfacecommand{leftmarginwidth}{largeurmargegauche} \setinterfacecommand{leg}{leg} \setinterfacecommand{linewidth}{largeurligne} \setinterfacecommand{listheight}{hauteurliste} \setinterfacecommand{listlength}{llongueurliste} \setinterfacecommand{listsymbol}{listesymbole} \setinterfacecommand{listwidth}{largeurliste} \setinterfacecommand{logfields}{logchamp} \setinterfacecommand{lohi}{baha} \setinterfacecommand{low}{bas} \setinterfacecommand{macroname}{nommacro} \setinterfacecommand{mainlanguage}{langueprincipale} \setinterfacecommand{makeupheight}{hauteurmakeup} \setinterfacecommand{makeupwidth}{largeurmakeup} \setinterfacecommand{mar}{mar} \setinterfacecommand{margindistance}{distancemarge} \setinterfacecommand{marginrule}{margereglee} \setinterfacecommand{margintext}{textemarge} \setinterfacecommand{margintitle}{titremarge} \setinterfacecommand{marginwidth}{largeurmarge} \setinterfacecommand{marginword}{motmarge} \setinterfacecommand{marking}{marquage} \setinterfacecommand{markversion}{marquageversion} \setinterfacecommand{mathematics}{mathematique} \setinterfacecommand{menubutton}{boutonmenu} \setinterfacecommand{mframed}{mframed} \setinterfacecommand{midaligned}{aligneaumilieu} \setinterfacecommand{mirror}{reflete} \setinterfacecommand{month}{mois} \setinterfacecommand{moveformula}{deplaceformule} \setinterfacecommand{moveongrid}{deplacesurgrille} \setinterfacecommand{movesidefloat}{movesidefloat} \setinterfacecommand{navigating}{navigating} \setinterfacecommand{nodimension}{sansdimension} \setinterfacecommand{noheaderandfooterlines}{sanslignesenteteetpdp} \setinterfacecommand{noindenting}{sansalinea} \setinterfacecommand{nolist}{sansliste} \setinterfacecommand{nomarking}{sansmarquage} \setinterfacecommand{nomoreblocks}{pasplusdeblocs} \setinterfacecommand{nomorefiles}{pasplusdefichiers} \setinterfacecommand{nop}{nop} \setinterfacecommand{nospace}{sansespace} \setinterfacecommand{note}{note} \setinterfacecommand{notopandbottomlines}{sanslignessupetinf} \setinterfacecommand{notsmallcapped}{nocap} \setinterfacecommand{nowhitespace}{sansespaceblanc} \setinterfacecommand{numberofsubpages}{nombredesouspages} \setinterfacecommand{numbers}{numeros} \setinterfacecommand{outeredgedistance}{outeredgedistance} \setinterfacecommand{outeredgewidth}{outeredgewidth} \setinterfacecommand{outermargindistance}{outermargindistance} \setinterfacecommand{outermarginwidth}{outermarginwidth} \setinterfacecommand{packed}{groupe} \setinterfacecommand{page}{page} \setinterfacecommand{pagedepth}{pagedepth} \setinterfacecommand{pagenumber}{numeropage} \setinterfacecommand{pageoffset}{pageoffset} \setinterfacecommand{pagereference}{referencepage} \setinterfacecommand{paperheight}{hauteurpapier} \setinterfacecommand{paperwidth}{largeurpapier} \setinterfacecommand{periods}{periodes} \setinterfacecommand{plaatsruwelijst}{placerawlist} \setinterfacecommand{placebookmarks}{placemarquespages} \setinterfacecommand{placecombinedlist}{placelisteinmbriquee} \setinterfacecommand{placefloat}{placeflottant} \setinterfacecommand{placefootnotes}{placenotespdp} \setinterfacecommand{placeformula}{placeformule} \setinterfacecommand{placeheadnumber}{placenumerotete} \setinterfacecommand{placeheadtext}{placetextetete} \setinterfacecommand{placelegend}{placelegende} \setinterfacecommand{placelist}{placeliste} \setinterfacecommand{placelocalfootnotes}{placenotespdplocales} \setinterfacecommand{placelogos}{placelogos} \setinterfacecommand{placeongrid}{placesurgrille} \setinterfacecommand{placeontopofeachother}{placelesunsaudessusdesautres} \setinterfacecommand{placepagenumber}{placenumeropage} \setinterfacecommand{placereferencelist}{placelistereference} \setinterfacecommand{placeregister}{placeregistre} \setinterfacecommand{placerule}{placeregle} \setinterfacecommand{placesidebyside}{placecoteacote} \setinterfacecommand{placesubformula}{placesousformule} \setinterfacecommand{placetextvariable}{placevariabletexte} \setinterfacecommand{position}{position} \setinterfacecommand{positiontext}{positionnetexte} \setinterfacecommand{printpaperheight}{hauteureditionpapier} \setinterfacecommand{printpaperwidth}{largeureditionpapier} \setinterfacecommand{processblocks}{traiteblocs} \setinterfacecommand{processpage}{traitepage} \setinterfacecommand{product}{produit} \setinterfacecommand{program}{programme} \setinterfacecommand{project}{projet} \setinterfacecommand{publication}{publication} \setinterfacecommand{quotation}{citation} \setinterfacecommand{quote}{citer} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{refait} \setinterfacecommand{ref}{ref} \setinterfacecommand{reference}{reference} \setinterfacecommand{referral}{recommandation} \setinterfacecommand{referraldate}{daterecommandation} \setinterfacecommand{referring}{faitreference} \setinterfacecommand{remark}{commentaire} \setinterfacecommand{reset}{raz} \setinterfacecommand{resetmarking}{razmarquage} \setinterfacecommand{resetnumber}{raznumero} \setinterfacecommand{resettext}{resettextcontent} \setinterfacecommand{rightaligned}{aligneadroite} \setinterfacecommand{rightedgedistance}{distanceborddroit} \setinterfacecommand{rightedgewidth}{largeurborddroit} \setinterfacecommand{rightmargindistance}{distancemargedroite} \setinterfacecommand{rightmarginwidth}{largeurmargedroite} \setinterfacecommand{romannumerals}{chiffresromains} \setinterfacecommand{rotate}{oriente} \setinterfacecommand{scale}{echelle} \setinterfacecommand{screen}{ecran} \setinterfacecommand{selectblocks}{selectionneblocs} \setinterfacecommand{selectpaper}{selectionnepapier} \setinterfacecommand{selectversion}{selectionneversion} \setinterfacecommand{setnumber}{affectenumero} \setinterfacecommand{settextcontent}{settext} \setinterfacecommand{settextvariable}{affectevariabletexte} \setinterfacecommand{setupalign}{reglealignement} \setinterfacecommand{setupanswerarea}{setupanswerarea} \setinterfacecommand{setuparranging}{reglearrangement} \setinterfacecommand{setupbackground}{reglearriereplan} \setinterfacecommand{setupbackgrounds}{reglearriereplans} \setinterfacecommand{setupblackrules}{reglelignesnoires} \setinterfacecommand{setupblank}{definitvide} \setinterfacecommand{setupblock}{reglebloc} \setinterfacecommand{setupbodyfont}{reglepolicecorps} \setinterfacecommand{setupbodyfontenvironment}{regleenvironnementpolicecorps} \setinterfacecommand{setupbottom}{regleinf} \setinterfacecommand{setupbottomtexts}{regletextesinf} \setinterfacecommand{setupbuffer}{reglebuffer} \setinterfacecommand{setupbuttons}{regleboutons} \setinterfacecommand{setupcapitals}{reglecapitales} \setinterfacecommand{setupcaption}{regleintitule} \setinterfacecommand{setupcaptions}{regleintitules} \setinterfacecommand{setupclipping}{regleclipping} \setinterfacecommand{setupcolor}{reglecouleur} \setinterfacecommand{setupcolors}{reglecouleurs} \setinterfacecommand{setupcolumns}{reglecolonnes} \setinterfacecommand{setupcolumnset}{reglejeucolonne} \setinterfacecommand{setupcolumnsetlines}{setupcolumnsetlines} \setinterfacecommand{setupcolumnsetstart}{setupcolumnsetstart} \setinterfacecommand{setupcombinations}{reglecombinaisons} \setinterfacecommand{setupcombinedlist}{reglelisteimbriquee} \setinterfacecommand{setupcomment}{reglecommentaire} \setinterfacecommand{setupdescriptions}{regledescriptions} \setinterfacecommand{setupenumerations}{regleenumerations} \setinterfacecommand{setupexternalfigures}{reglefiguresexternes} \setinterfacecommand{setupfield}{reglechamp} \setinterfacecommand{setupfields}{reglechamps} \setinterfacecommand{setupfillinlines}{regleremplitligne} \setinterfacecommand{setupfillinrules}{regleremplitlignesreglees} \setinterfacecommand{setupfloat}{regleflottant} \setinterfacecommand{setupfloats}{regleflottants} \setinterfacecommand{setupfloatsplitting}{regleseparationflottant} \setinterfacecommand{setupfooter}{reglepdp} \setinterfacecommand{setupfootertexts}{regletextespdp} \setinterfacecommand{setupfootnotedefinition}{definitnotepdp} \setinterfacecommand{setupfootnotes}{reglenotepdp} \setinterfacecommand{setupforms}{regleformulaires} \setinterfacecommand{setupformulas}{regleformules} \setinterfacecommand{setupframed}{regleencadre} \setinterfacecommand{setupframedtexts}{setupframedtexts} \setinterfacecommand{setuphead}{regletete} \setinterfacecommand{setupheader}{regleentete} \setinterfacecommand{setupheadertexts}{regletextesentete} \setinterfacecommand{setupheadnumber}{reglenumerotete} \setinterfacecommand{setupheads}{regletetes} \setinterfacecommand{setupheadtext}{regletextetete} \setinterfacecommand{setuphyphenmark}{reglemarquagehyphenation} \setinterfacecommand{setupindentedtext}{setupindentedtext} \setinterfacecommand{setupindenting}{reglecomposeenalinea} \setinterfacecommand{setupinmargin}{regledansmarge} \setinterfacecommand{setupinteraction}{regleinteraction} \setinterfacecommand{setupinteractionbar}{reglebarreinteraction} \setinterfacecommand{setupinteractionmenu}{reglemenuinteraction} \setinterfacecommand{setupinteractionscreen}{regleecraninteraction} \setinterfacecommand{setupinterlinespace}{regleespacementinterligne} \setinterfacecommand{setupitemgroup}{setupitemgroup} \setinterfacecommand{setupitemgroups}{reglegroupeselements} \setinterfacecommand{setupitems}{regleelements} \setinterfacecommand{setuplabeltext}{reglelabeltexte} \setinterfacecommand{setuplanguage}{reglelangue} \setinterfacecommand{setuplayout}{regledisposition} \setinterfacecommand{setuplegend}{reglelegende} \setinterfacecommand{setuplinenumbering}{reglenumerotationligne} \setinterfacecommand{setuplines}{reglelignes} \setinterfacecommand{setuplinewidth}{regleepaisseurligne} \setinterfacecommand{setuplist}{regleliste} \setinterfacecommand{setupmakeup}{reglemakeup} \setinterfacecommand{setupmarginblocks}{regleblocmarge} \setinterfacecommand{setupmarginrules}{reglemargereglee} \setinterfacecommand{setupmarking}{reglemarquage} \setinterfacecommand{setupmathalignment}{setupmathalignment} \setinterfacecommand{setupnarrower}{reglecompoetroite} \setinterfacecommand{setupnumber}{reglenumero} \setinterfacecommand{setupnumbering}{reglenumerotation} \setinterfacecommand{setupoppositeplacing}{regleplacementopposition} \setinterfacecommand{setupoutput}{reglesortie} \setinterfacecommand{setuppagecomment}{reglecommentairepage} \setinterfacecommand{setuppagenumber}{reglenumeropage} \setinterfacecommand{setuppagenumbering}{reglenumerotationpage} \setinterfacecommand{setuppagetransitions}{regletransitionspage} \setinterfacecommand{setuppalet}{reglepalette} \setinterfacecommand{setuppaper}{reglepapier} \setinterfacecommand{setuppapersize}{regletaillepapier} \setinterfacecommand{setupparagraphnumbering}{reglenumerotationparagraphe} \setinterfacecommand{setupparagraphs}{regleparagraphes} \setinterfacecommand{setupplacement}{setupplacement} \setinterfacecommand{setuppositioning}{reglepositionnement} \setinterfacecommand{setupprofiles}{regleprofils} \setinterfacecommand{setupprograms}{regleprogrammes} \setinterfacecommand{setuppublications}{reglepublications} \setinterfacecommand{setupquote}{demarreciter} \setinterfacecommand{setupreferencelist}{reglelistereference} \setinterfacecommand{setupreferencing}{reglereferencage} \setinterfacecommand{setupregister}{regleregistre} \setinterfacecommand{setuprotate}{regleoriente} \setinterfacecommand{setuprule}{regleregle} \setinterfacecommand{setups}{reglages} \setinterfacecommand{setupscreens}{regleecrans} \setinterfacecommand{setupsection}{reglesection} \setinterfacecommand{setupsectionblock}{regleblocsection} \setinterfacecommand{setupsorting}{regletri} \setinterfacecommand{setupspacing}{regleespacement} \setinterfacecommand{setupstartstop}{regledemarrestoppe} \setinterfacecommand{setupstrut}{reglestrut} \setinterfacecommand{setupsubpagenumber}{reglesousnumeropage} \setinterfacecommand{setupsymbolset}{reglejeusymboles} \setinterfacecommand{setupsynchronization}{reglesynchronisation} \setinterfacecommand{setupsynchronizationbar}{reglebarresynchronisation} \setinterfacecommand{setupsynonyms}{reglesynonymes} \setinterfacecommand{setupsystem}{reglesysteme} \setinterfacecommand{setuptab}{regletab} \setinterfacecommand{setuptables}{regletableaux} \setinterfacecommand{setuptabulate}{regletabulation} \setinterfacecommand{setuptext}{regletexte} \setinterfacecommand{setuptextposition}{reglepositiontexte} \setinterfacecommand{setuptextrules}{reglelignesreglestexte} \setinterfacecommand{setuptexttexts}{regletextestexte} \setinterfacecommand{setuptextvariable}{reglevariabletexte} \setinterfacecommand{setupthinrules}{regletraitsfins} \setinterfacecommand{setuptolerance}{regletolerance} \setinterfacecommand{setuptop}{reglesup} \setinterfacecommand{setuptoptexts}{regletextessup} \setinterfacecommand{setuptype}{regletype} \setinterfacecommand{setuptyping}{regledactylo} \setinterfacecommand{setupunderbar}{reglesouslignage} \setinterfacecommand{setupurl}{regleurl} \setinterfacecommand{setupversions}{regleversions} \setinterfacecommand{setupwhitespace}{regleespaceblanc} \setinterfacecommand{showbodyfont}{montrepolicecorps} \setinterfacecommand{showbodyfontenvironment}{montreenvironnementpolicecorps} \setinterfacecommand{showcolor}{montrecouleur} \setinterfacecommand{showcolorgroup}{montregroupecouleur} \setinterfacecommand{showexternalfigures}{montrefiguresexternes} \setinterfacecommand{showfields}{montrechamps} \setinterfacecommand{showframe}{montrecadre} \setinterfacecommand{showgrid}{montregrille} \setinterfacecommand{showlayout}{montredisposition} \setinterfacecommand{showmakeup}{montremakeup} \setinterfacecommand{showpalet}{montrepalette} \setinterfacecommand{showprint}{montreedition} \setinterfacecommand{showsetups}{montrereglages} \setinterfacecommand{showstruts}{montrestruts} \setinterfacecommand{showsymbolset}{montrejeusymboles} \setinterfacecommand{smallcapped}{cap} \setinterfacecommand{someline}{uneligne} \setinterfacecommand{somewhere}{qqpart} \setinterfacecommand{space}{espace} \setinterfacecommand{splitfloat}{separeflottant} \setinterfacecommand{startalignment}{demarrealignement} \setinterfacecommand{startbackground}{demarrearriereplan} \setinterfacecommand{startcoding}{demarrecodage} \setinterfacecommand{startcolor}{demarrecouleur} \setinterfacecommand{startcolumnmakeup}{startcolumnmakeup} \setinterfacecommand{startcolumns}{demarrecolonnes} \setinterfacecommand{startcolumnset}{demarrejeucolonne} \setinterfacecommand{startcombination}{demarrecombinaison} \setinterfacecommand{startcomponent}{demarrecomposant} \setinterfacecommand{startdocument}{demarredocument} \setinterfacecommand{startenvironment}{demarreenvironement} \setinterfacecommand{startfigure}{demarrefigure} \setinterfacecommand{startglobal}{demarreglobal} \setinterfacecommand{startline}{demarreligne} \setinterfacecommand{startlinecorrection}{demarrecorrectionligne} \setinterfacecommand{startlinenumbering}{demarrenumerotationligne} \setinterfacecommand{startlines}{demarrelignes} \setinterfacecommand{startlocal}{demarrelocal} \setinterfacecommand{startlocalfootnotes}{demarrenotespdplocales} \setinterfacecommand{startmakeup}{demarremakeup} \setinterfacecommand{startmarginblock}{demarreblocmarge} \setinterfacecommand{startmarginrule}{demarremargereglee} \setinterfacecommand{startnarrower}{demarrecompoetroite} \setinterfacecommand{startopposite}{demarreopposition} \setinterfacecommand{startoverlay}{demarrerevetement} \setinterfacecommand{startoverzicht}{demarrevuedensemble} \setinterfacecommand{startpacked}{demarregroupe} \setinterfacecommand{startpositioning}{demarrepositionnement} \setinterfacecommand{startproduct}{demarreproduit} \setinterfacecommand{startprofile}{demarreprofil} \setinterfacecommand{startproject}{demarreprojet} \setinterfacecommand{startquotation}{demarrecitation} \setinterfacecommand{startraster}{demarreraster} \setinterfacecommand{startsymbolset}{demarrejeusymboles} \setinterfacecommand{startsynchronization}{demarresynchronisation} \setinterfacecommand{starttable}{demarretableau} \setinterfacecommand{starttables}{demarretableaux} \setinterfacecommand{starttext}{demarretexte} \setinterfacecommand{starttextrule}{demarreligneregleetexte} \setinterfacecommand{startunpacked}{demarredegroupe} \setinterfacecommand{startversion}{demarreversion} \setinterfacecommand{stopalignment}{stoppealignement} \setinterfacecommand{stopbackground}{stoppearriereplan} \setinterfacecommand{stopcoding}{stoppecodage} \setinterfacecommand{stopcolor}{stoppecouleur} \setinterfacecommand{stopcolumnmakeup}{stopcolumnmakeup} \setinterfacecommand{stopcolumns}{stoppecolonnes} \setinterfacecommand{stopcolumnset}{stoppejeucolonne} \setinterfacecommand{stopcombination}{stoppecombinaison} \setinterfacecommand{stopcomponent}{stoppecomposant} \setinterfacecommand{stopdocument}{stoppedocument} \setinterfacecommand{stopenvironment}{stoppeenvironement} \setinterfacecommand{stopglobal}{stoppeglobal} \setinterfacecommand{stopline}{stoppeligne} \setinterfacecommand{stoplinecorrection}{stoppecorrectionligne} \setinterfacecommand{stoplinenumbering}{stoppenumerotationligne} \setinterfacecommand{stoplines}{stoppelignes} \setinterfacecommand{stoplocal}{stoppelocal} \setinterfacecommand{stoplocalfootnotes}{stoppenotespdplocales} \setinterfacecommand{stopmakeup}{stoppemakeup} \setinterfacecommand{stopmarginblock}{stoppeblocmarge} \setinterfacecommand{stopmarginrule}{stoppemargereglee} \setinterfacecommand{stopnarrower}{stopcompoetroite} \setinterfacecommand{stopopposite}{stoppeopposition} \setinterfacecommand{stopoverlay}{stopperevetement} \setinterfacecommand{stopoverzicht}{stoppevuedensemble} \setinterfacecommand{stoppacked}{stoppegroupe} \setinterfacecommand{stoppositioning}{stoppepositionnement} \setinterfacecommand{stopproduct}{stoppeproduit} \setinterfacecommand{stopprofile}{stoppeprofil} \setinterfacecommand{stopproject}{stoppeprojet} \setinterfacecommand{stopquotation}{stoppecitation} \setinterfacecommand{stopraster}{stopperaster} \setinterfacecommand{stopsynchronization}{stoppesynchronisation} \setinterfacecommand{stoptable}{stoppetableau} \setinterfacecommand{stoptables}{stoppetableaux} \setinterfacecommand{stoptext}{stoppetexte} \setinterfacecommand{stoptextrule}{stoppeligneregleetexte} \setinterfacecommand{stopunpacked}{stoppedegroupe} \setinterfacecommand{stopversion}{stoppeversion} \setinterfacecommand{stretched}{etire} \setinterfacecommand{subformulanumber}{numerosousformule} \setinterfacecommand{subpagenumber}{sousnumeropage} \setinterfacecommand{switchtobodyfont}{changepolicecorps} \setinterfacecommand{switchtorawfont}{changepolicebrute} \setinterfacecommand{sym}{sym} \setinterfacecommand{symbol}{symbole} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{barresynchronisation} \setinterfacecommand{synchronize}{synchronise} \setinterfacecommand{tab}{tab} \setinterfacecommand{testcolumn}{testcolumn} \setinterfacecommand{testpage}{testpage} \setinterfacecommand{tex}{tex} \setinterfacecommand{textheight}{hauteurtexte} \setinterfacecommand{textreference}{referencetexte} \setinterfacecommand{textrule}{ligneregleetexte} \setinterfacecommand{textvariable}{variabletexte} \setinterfacecommand{textwidth}{largeurtexte} \setinterfacecommand{thinrule}{traitfin} \setinterfacecommand{thinrules}{traitsfins} \setinterfacecommand{tooltip}{suggestion} \setinterfacecommand{topdistance}{distancesup} \setinterfacecommand{topheight}{hauteursup} \setinterfacecommand{topspace}{espacesup} \setinterfacecommand{totalnumberofpages}{nombretotaldepages} \setinterfacecommand{translate}{traduire} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{typ} \setinterfacecommand{type}{dactylographier} \setinterfacecommand{typebuffer}{tapebuffer} \setinterfacecommand{typefile}{fichierdactylo} \setinterfacecommand{unitmeaning}{sensunite} \setinterfacecommand{unknown}{inconnu} \setinterfacecommand{useJSscripts}{utiliseJSscripts} \setinterfacecommand{useURL}{utiliseURL} \setinterfacecommand{useXMLfilter}{useXMLfilter} \setinterfacecommand{useblocks}{utiliseblocs} \setinterfacecommand{usecommands}{utilisecommandes} \setinterfacecommand{useencoding}{utiliseencodage} \setinterfacecommand{useexternaldocument}{utilisedocumentexterne} \setinterfacecommand{useexternalfigure}{utilisefigureexterne} \setinterfacecommand{useexternalfile}{utilisefichierexterne} \setinterfacecommand{useexternalfiles}{utilisefichiersexternes} \setinterfacecommand{useexternalsoundtrack}{utilisepsiteaudioexterne} \setinterfacecommand{usemodule}{utilisemodule} \setinterfacecommand{usemodules}{utilisemodules} \setinterfacecommand{usepath}{utilisechemin} \setinterfacecommand{usereferences}{utilisereferences} \setinterfacecommand{usespecials}{utilisespecialites} \setinterfacecommand{usesymbols}{utilisesymboles} \setinterfacecommand{usetypescript}{usetypescript} \setinterfacecommand{usetypescriptfile}{usetypescriptfile} \setinterfacecommand{useurl}{utiliseurl} \setinterfacecommand{version}{version} \setinterfacecommand{vl}{vl} \setinterfacecommand{weekday}{joursemaine} \setinterfacecommand{whitespace}{espaceblanc} \setinterfacecommand{wordright}{motdroit} \setinterfacecommand{writebetweenlist}{ecritentreliste} \setinterfacecommand{writetolist}{ecritdansliste} \setinterfacecommand{writetoreferencelist}{ecritdanslistereference} \setinterfacecommand{writetoregister}{ecritregistre} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/thrd-trg.mkii0000644000175000017500000001077411244221744024311 0ustar norbertnorbert%D In order to support rotation over arbitrary angles, we need a sine %D and cosine calculator. For this purpose we borrow a few macros by %D David Carlisle (his trig package). Because local variables are %D used, I patched the macros a bit. Also, I used a few different names %D for variabels and macros and use existing auxiliary macros. \unprotect % compare: \number 0.5 \number -0.5 \number 1.5 \number -1.5 % % so we need: \def\realnumber#1{\withoutpt\the\dimexpr#1\points\relax} % brrr \chardef \@iv = 4 \chardef \@xc = 90 % was \nin@ty \chardef \@clxx = 180 \chardef \@lxxi = 71 \mathchardef \@mmmmlxviii = 4068 \mathchardef \@xvi@k = 16384 \chardef \tr@coeffz = 72 \chardef \tr@coefb = 42 \mathchardef \tr@coefc = 840 \mathchardef \tr@coefd = 5040 \def\tg@series {\!!dimena\@lxxi\!!dimena \divide\!!dimena\@mmmmlxviii \edef\!!stringa{\withoutpt\the\!!dimena}% \!!dimena\!!stringa\!!dimena \edef\!!stringb{\withoutpt\the\!!dimena}% \divide\!!dimena\tr@coeffz \advance\!!dimena\minusone\onepoint \!!dimena\!!stringb\!!dimena \advance\!!dimena \tr@coefb\onepoint \!!dimena\!!stringb\!!dimena \advance\!!dimena -\tr@coefc\onepoint \!!dimena\!!stringb\!!dimena \advance\!!dimena \tr@coefd\onepoint \!!dimena\!!stringa\!!dimena \divide\!!dimena \tr@coefd} \def\tg@reduce#1#2% {\!!dimena#1#2\@xc\onepoint \advance\!!dimena#2-\@clxx\onepoint \!!dimena-\!!dimena \tg@@sin} \def\tg@@sin {\ifdim\tg@reduce>+\else\ifdim\tg@reduce<-\else \tg@series \fi\fi} %D Calculating a sine is a two step process: first a value is %D calculated, and afterwards it can be used. This saves redundant %D calculations. \def\calculatesin#1% {{\expandafter\ifx\csname sin \realnumber{#1}\endcsname\relax \!!dimena#1\onepoint \tg@@sin \expandafter\xdef\csname sin \realnumber{#1}\endcsname{\withoutpt\the\!!dimena}% \fi}} \def\calculatecos#1% {{\expandafter\ifx\csname cos \realnumber{#1}\endcsname\relax \!!dimena\@xc\onepoint \advance\!!dimena-#1\onepoint \tg@@sin \expandafter\xdef\csname cos \realnumber{#1}\endcsname{\withoutpt\the\!!dimena}% \fi}} \def\calculatetan#1% {{\expandafter\ifx\csname tan \realnumber{#1}\endcsname\relax \calculatesin{#1}% \calculatecos{#1}% \!!dimena\calculatedcos{#1}\onepoint \divide\!!dimena\@iv \!!dimenb\calculatedsin{#1}\onepoint \!!dimenb\@xvi@k\!!dimenb \divide\!!dimenb\!!dimena \expandafter\xdef\csname tan \realnumber{#1}\endcsname{\withoutpt\the\!!dimenb}% \fi}} %D The results are accessed with: \def\calculatedsin#1{\csname sin \realnumber{#1}\endcsname} \def\calculatedcos#1{\csname cos \realnumber{#1}\endcsname} \def\calculatedtan#1{\csname tan \realnumber{#1}\endcsname} %D A more save implementation would be: \def\calculatedsin#1{\executeifdefined{sin \realnumber{#1}}\!!zerocount} \def\calculatedcos#1{\executeifdefined{cos \realnumber{#1}}\!!plusone } \def\calculatedtan#1{\executeifdefined{tan \realnumber{#1}}\!!zerocount} %D The following permits cleaner overloading (\MKIV\ will only have %D these): \def\setcalculatedsin#1#2{\calculatesin{#2}\edef#1{\calculatedsin{#2}}} \def\setcalculatedcos#1#2{\calculatecos{#2}\edef#1{\calculatedcos{#2}}} \def\setcalculatedtan#1#2{\calculatetan{#2}\edef#1{\calculatedtan{#2}}} %D A few values are predefined, although, on todays systems there %D is no real reason for that. I've added the 270 ones and changed %D the -90 tan. Also, I prefer text (\type {\!!..} instead of %D counters \type {\..}. \expandafter\let\csname sin \realnumber{ 0}\endcsname\!!zerocount \expandafter\let\csname cos \realnumber{ 0}\endcsname\!!plusone \expandafter\let\csname sin \realnumber{ 90}\endcsname\!!plusone \expandafter\let\csname cos \realnumber{ 90}\endcsname\!!zerocount \expandafter\let\csname sin \realnumber{180}\endcsname\!!zerocount \expandafter\let\csname cos \realnumber{180}\endcsname\!!minusone \expandafter\let\csname sin \realnumber{270}\endcsname\!!minusone \expandafter\let\csname cos \realnumber{270}\endcsname\!!zerocount \expandafter\let\csname sin \realnumber{-90}\endcsname\!!minusone \expandafter\let\csname cos \realnumber{-90}\endcsname\!!zerocount \expandafter\def\csname tan \realnumber{ 90}\endcsname{\writestatus\m!systems{infinite tan +90}} \expandafter\def\csname tan \realnumber{-90}\endcsname{\writestatus\m!systems{infinite tan -90}} %D Usage: \type {\calculatesin{10}} and \type {\calculatedsin{10}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-one.mkii0000644000175000017500000004446611754241457024267 0ustar norbertnorbert%D \module %D [ file=page-one, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Default Routine, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Default Routine} %D This is just the good old \CONTEXT\ output routine, which %D has been there right from the start. \unprotect % OTRONE: basic single column \activateotr{ONE}{} % the default one \newtoks\OTRONEoutput \def\OTRONEgotonextpage {\ejectpage} \def\OTRONEgotonextpageX % will become obsolete {\superejectpage} \def\OTRONEsethsize {\global\hsize\textwidth} % keep (original one) % % \def\OTRONEsetvsize % {\ifdim\vsize=\teksthoogte \else % \bgroup % \scratchdimen-\vsize % \advance\scratchdimen \teksthoogte % \global\advance\vsize \scratchdimen % \relax \ifdim\pagegoal<\maxdimen % \advance\scratchdimen \pagegoal % \global\pagegoal\scratchdimen % \fi % \egroup % \fi} % % no (keep) % % \def\OTRONEsetvsize % {\ifdim\vsize=\teksthoogte \else % \bgroup % \scratchdimen-\vsize % \advance\scratchdimen \teksthoogte % \ifgridsnapping % \getrawnoflines\scratchdimen % \scratchdimen\noflines\openlineheight % \ifdim\scratchdimen>\noflinesheight % available afterwards % \advance\scratchdimen-\openlineheight % \fi % \ifdim\scratchdimen<\zeropoint % \scratchdimen\zeropoint % \fi % \fi % \global\advance\vsize \scratchdimen % \relax \ifdim\pagegoal<\maxdimen % \advance\scratchdimen \pagegoal % \global\pagegoal\scratchdimen % \fi % \egroup % \fi} % \def\OTRONEsetvsize % {\ifgridsnapping % \ifcase\layoutlines % \getrawnoflines\teksthoogte % \else % \noflines\layoutlines % \fi % \global\vsize\noflines\openlineheight % \else % \global\vsize\teksthoogte % \fi % \ifdim\pagegoal<\maxdimen % \global\pagegoal\vsize % \fi} \newdimen\oldvsize \def\OTRONEsetvsize {\ifgridsnapping \ifcase\layoutlines \getrawnoflines\textheight \else \noflines\layoutlines \fi \global\vsize\noflines\openlineheight \else \global\vsize\textheight \fi \ifdim\pagegoal<\maxdimen \ifdim\oldvsize=\vsize % let's assume that the layout didn't change \else \bgroup \global\oldvsize\vsize \advance\vsize-\topinserted \advance\vsize-\botinserted \global\pagegoal\vsize \egroup \fi \fi} \chardef\kindofpagetextareas=2 % whole page (public variable! never change) \def\OTRONEregisteredtextarea#1% {\ifregistertextareas \setbox0\vbox{#1}% \wd0\makeupwidth % somehow a space creeps in \vbox{\registeredtextarea000}% \else #1% \fi} % \chardef\kindofpagetextareas\plusone \def\doOTRONEregisteredtextareaA#1% {\ifregistertextareas \xypos{pbd:\realfolio:b}% we could save bytes by only saving the y \endgraf \begingroup \scratchdimen\MPy{pbd:\realfolio:b}% \advance\scratchdimen-\MPy{pbd:\realfolio:e}% \setbox\scratchbox\null \wd\scratchbox\makeupwidth \ht\scratchbox\scratchdimen \vsmash{\registeredtextarea00\scratchbox}% \endgroup #1% \endgraf \xypos{pbd:\realfolio:e}% \else #1% \fi} \def\doOTRONEregisteredtextareaB#1% {\ifregistertextareas \setbox0\vbox{#1}% \wd0\makeupwidth % somehow a space creeps in \vbox{\registeredtextarea000}% \else #1% \fi} \let\OTRONEregisteredtextareaA\firstofoneargument \let\OTRONEregisteredtextareaB\firstofoneargument \def\OTRONEdopagecontents#1#2% \box \unvbox {\bgroup % niet breedte zetten, kan fractie zijn! \ifcase\kindofpagetextareas \or % partial page (experimental) \let\OTRONEregisteredtextareaA\doOTRONEregisteredtextareaA \or % whole page (default) \let\OTRONEregisteredtextareaB\doOTRONEregisteredtextareaB \or % partial page (only works well with no stretch!) \let\OTRONEregisteredtextareaA\doOTRONEregisteredtextareaB \fi \setbox0\vbox \ifbottomnotes to \textheight \fi {\edef\currentpagedepth{\the\dp#2}% still to be derived from #1 \dotopinsertions \ifgridsnapping \OTRONEregisteredtextareaA{#1#2}% \vskip-\currentpagedepth\vskip\openstrutdepth \pushproperties % moved from just after #1#2 \prevdepth\openstrutdepth \dobotinsertions \vfil \else\ifr@ggedbottom \OTRONEregisteredtextareaA{#1#2}% \vskip-\currentpagedepth\vskip\openstrutdepth \pushproperties % moved from just after #1#2 \prevdepth\openstrutdepth \dobotinsertions \vfil \else\ifb@selinebottom \OTRONEregisteredtextareaA{#1#2}% \kern-\currentpagedepth\kern\maxdepth \pushproperties % moved from just after #1#2 \dobotinsertions \else \OTRONEregisteredtextareaA{#1#2}% \pushproperties % moved from just after #1#2 \dobotinsertions % added \fi\fi\fi \fakepagenotes}% was \fakenotes, but wrong! (check with \setupalign[height]) \ifbottomnotes \ifgridsnapping \ifcase\layoutlines % todo: make macro of this \getrawnoflines\textheight \else \noflines\layoutlines \fi % \getnoflines\textheight \advance\noflines \minusone \scratchdimen\noflines\lineheight \advance\scratchdimen \topskip \else \scratchdimen\ht0 \fi \else \scratchdimen\zeropoint \fi \setbox2\hbox {\checksinglecolumnfootnotes \lower\scratchdimen\vbox{\placebottomnotes}}% \smashbox2% % needed here \ifbottomnotes \ht0\zeropoint \fi \OTRONEregisteredtextareaB {\vbox to \textheight {\box0\box2\ifbottomnotes\else\vfill\fi}}% \egroup} \def\OTRONEfinalsidefloatoutput {\finaloutput\unvbox\normalpagebox} \OTRONEoutput {\sidefloatoutput} %D Insertions \newif\iftopofinsert % \def\OTRONEdosettopinserts % {\bgroup % \ifsomefloatwaiting % \noffloatinserts\zerocount % \let\totaltopinserted\!!zeropoint % \OTRONEdodosettopinserts % \ifnum\@@bknbottom=\zerocount % \ifnum\@@bknlines>\zerocount % \ifdim\totaltopinserted>\zeropoint\relax % \dimen0=\lineheight % \dimen0=\@@bknlines\dimen0 % \advance\dimen0 \totaltopinserted\relax % \ifdim\dimen0>\textheight % \showmessage\m!floatblocks8\@@bknlines % \vfilll\eject % \fi % \fi % \fi % \fi % \fi % \egroup} \def\OTRONEdosettopinserts {\bgroup \ifsomefloatwaiting \noffloatinserts\zerocount \let\totaltopinserted\!!zeropoint \OTRONEdodosettopinserts \ifnum\@@bknbottom=\zerocount \ifnum\@@bknlines>\zerocount \ifdim\totaltopinserted>\zeropoint\relax \ifdim\dimexpr\@@bknlines\lineheight+\totaltopinserted\relax>\textheight \showmessage\m!floatblocks8\@@bknlines \vfilll\eject \fi \fi \fi \fi \fi \egroup} \def\OTRONEdodosettopinserts {\ifnum\noffloatinserts<\noftopfloats \dogetfloat \ifdim\topinserted=\zeropoint \topofinserttrue \else \topofinsertfalse \fi \global\advance\topinserted\dimexpr\ht\floatbox+\dp\floatbox+\floatbottomskip\relax \ifdim\topinserted<\textheight\relax \xdef\totaltopinserted{\the\topinserted}% \insert\topins {\forgetall \iftopofinsert \topskipcorrection % [xx] new: see icare topbleed \kern-\lineskip\par \prevdepth\maxdimen \else %\blank[-\@@bkspaceafter,\@@bkspacebefore]% inserts can't look back \betweenfloatblanko \fi \flushfloatbox \blank[\@@bkspaceafter]}% \ifsomefloatwaiting \advance\noffloatinserts \plusone \else \noffloatinserts\noftopfloats\relax \fi \dofloatflushedinfo \else \doresavefloat \noffloatinserts\noftopfloats\relax \fi \else \ifsomefloatwaiting \showmessage\m!floatblocks6{\the\noftopfloats}% \fi \let\OTRONEdodosettopinserts\relax \fi \OTRONEdodosettopinserts} \def\OTRONEdosetbotinserts {\bgroup \ifsomefloatwaiting \noffloatinserts\zerocount \OTRONEdodosetbotinserts \fi \egroup} \def\OTRONEdodosetbotinserts {\ifnum\noffloatinserts<\nofbotfloats\relax \dogetfloat \global\advance\botinserted \ht\floatbox\relax \global\advance\botinserted \dp\floatbox\relax \global\advance\botinserted \floattopskip\relax \ifdim\botinserted<\pagegoal\relax \insert\botins {\forgetall \blank[\@@bkspacebefore]% \flushfloatbox}% \ifsomefloatwaiting \advance\noffloatinserts \plusone \else \noffloatinserts\nofbotfloats \fi \dofloatflushedinfo \else \doresavefloat \noffloatinserts\nofbotfloats\relax \fi \global\nofloatpermittedtrue % vgl topfloats s! \else \ifsomefloatwaiting \showmessage\m!floatblocks7{\the\nofbotfloats}% \fi \let\OTRONEdodosetbotinserts\relax \fi \OTRONEdodosetbotinserts} \def\OTRONEdosetbothinserts {\global\topinserted\zeropoint \global\botinserted\zeropoint \ifflushingfloats \else \OTRONEdosettopinserts \OTRONEdosetbotinserts \ifsomefloatwaiting \doif\@@bkcache\v!no\doflushfloats \fi \fi} % \def\OTRONEdotopinsertions % {\ifvoid\topins\else % \ifgridsnapping % \box\topins % \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed % \else % \unvbox\topins % \fi % \fi % \global\topinserted\zeropoint} \chardef\topinserttopskipmode=0 % 1 no topskip \def\OTRONEdotopinsertions {\ifvoid\topins\else \ifgridsnapping \box\topins \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed \else \ifcase\topinserttopskipmode % 0: default, do nothing \or % 1: no topskip (crossed fingers) \vskip-\topskip \vskip\strutheight \fi \unvbox\topins \fi \fi \global\topinserted\zeropoint} \def\OTRONEdobotinsertions {\ifvoid\botins\else \ifgridsnapping \snaptogrid\hbox{\box\botins}% \else \unvbox\botins \fi \fi \global\botinserted\zeropoint \global\nofloatpermittedfalse} \def\OTRONEdoflushfloats {\global\flushingfloatstrue \ifsomefloatwaiting \par % if kept, then option and definitely off in gridmode ! ! ! ! % \ifvmode \prevdepth\maxdimen \fi % prevents whitespace; problematic in icare tests \OTRONEdodoflushfloats \fi \global\savednoffloats\zerocount \global\somefloatwaitingfalse \global\flushingfloatsfalse} \def\OTRONEflushfloatbox % nog verder doorvoeren en meer info in marge {\ifcenterfloatbox \ifdim\wd\floatbox<\hsize \setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}% \fi \fi \snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\copy\floatbox}}} \def\OTRONEdodoflushfloats % much in common with OTRSET {\ifsomefloatwaiting \ifpackflushedfloats \centerfloatboxfalse \dogetfloat \ifdim\wd\floatbox>\makeupwidth \global\setbox\floatbox\hbox to \makeupwidth{\hss\box\floatbox\hss}% \fi \OTRONEsetvsize \!!widtha\wd\floatbox \dofloatflushedinfo \doloop {\ifsomefloatwaiting \dosavefloatstatus \dogetfloat \advance\!!widtha 1em % variable \advance\!!widtha \wd\floatbox\relax \ifdim\!!widtha>\hsize \dorestorefloatstatus \global\somefloatwaitingtrue \exitloop \else \global\setbox\floatbox\hbox {\ifcase\columndirection % nog document wide \ifvoid\savedfloatbox\else \ifhbox\savedfloatbox\unhbox\else\box\fi\savedfloatbox\hfil \fi \ifhbox\floatbox\unhbox\else\box\fi\floatbox \else \ifhbox\floatbox\unhbox\else\box\fi\floatbox \ifvoid\savedfloatbox\else \hfil\ifhbox\savedfloatbox\unhbox\else\box\fi\savedfloatbox \fi \fi}% \dofloatflushedinfo \fi \else \exitloop \fi}% \global\setbox\floatbox\hbox to \hsize {\hfil\ifhbox\floatbox\unhbox\else\box\fi\floatbox\hfil}% \else %\bgroup % \box\floatbox can be in use!? messy \dogetfloat %\doplacefloatbox %\egroup \dofloatflushedinfo \fi % there is a chance that due to rounding errors, the float % fits on a page where it was first rejected, in which case % the prevdepth is -maxdimen and we cannot obey the grid \doplacefloatbox \expandafter\OTRONEdodoflushfloats \fi} \def\OTRONEdocheckiffloatfits % vervangen ivm downward comp {\ifnofloatpermitted \global\roomforfloatfalse \else % new per 31/5/2004, should be an option, only one column mode \begingroup \scratchdimen\dimexpr\pagetotal+\lineheight\relax \ifdim\scratchdimen>\pagegoal \goodbreak % hack ? needed in icare-az \fi % should be an option \endgroup \dimen0\dimexpr\pagetotal+\ht\floatbox+\dp\floatbox+\floattopskip-\pageshrink\relax %\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait \dimen2\pagegoal \relax % needed \ifcase\textfloatmethod % method 0 : raw \or % method 1 : safe \dimen2 .99\pagegoal \or % method 2 : tight \advance\dimen0 -\onepoint \fi \relax % really needed ! ! ! ! \ifdim\dimen0>\dimen2 \global\roomforfloatfalse \else \global\roomforfloattrue \fi \fi} \def\OTRONEflushsavedfloats {\dosetbothinserts} % TODO: TEST FIRST, NO CORRECTION NEEDED IN GRID MODE, EVT OPTION \def\OTRONEsomeherefloat[#1]% spacing between two successive must be better {\baselinecorrection % not really needed in grid mode: %\ifgridsnapping \else \baselinecorrection \fi % ! ! ! test test test ! ! ! ! \doplacefloatbox \doinsertfloatinfo \dochecknextindentation\??bk \dorechecknextindentation} % \def\OTRONEsomefixdfloat % [#1] % {\docheckiffloatfits % \ifroomforfloat\else % \goodbreak % \fi % \showmessage\m!floatblocks9\empty % \someherefloat} % [#1] % % better: % % \dorecurse{50} % {[before normal] \input thuan % \placefigure{normal}{\framed[height=1cm,width=8cm]{}} % \placefigure{normal}{\framed[height=2cm,width=8cm]{}} % [before force] \input thuan % \placefigure[force]{force}{\framed[height=8cm,width=8cm]{}}} \chardef\fixedfloatmethod=3 % \def\OTRONEsomefixdfloat % [#1] % {\docheckiffloatfits % \ifroomforfloat\else % \ifzeropt\pagetotal % % let's assume that there is room % \else % \ifcase\fixedfloatmethod % % disabled % \or % 1 (old method) % \goodbreak % \or % 2 (safe method) % \page % \or % 3 (keeps in stream) % \vskip\textheight % \vskip-\textheight % \or % 4 (also keeps in place) % \dosomebreak\nobreak % \fi % \fi % \fi % \showmessage\m!floatblocks9\empty % \someherefloat} % [#1] \def\OTRONEsomefixdfloat % [#1] {% there is (in mkii) no good way to prevent a break % so better fail than mess, we can get loose from % heads, so be it \showmessage\m!floatblocks9\empty \OTRONEsomeherefloat} % [#1] \def\OTRONEsomesidefloat[#1]% links, rechts NOG TESTEN EN AANPASSEN {\ifinsidecolumns \someelsefloat[\v!here]% \else %\checkwaitingfloats{#1}% \def\logsidefloat {\doinsertfloatinfo}% \setbox\floatbox\vbox{\box\floatbox}% \wd\floatbox\floatwidth \processfirstactioninset [#1] [ \v!left=>\leftfloat {\box\floatbox}, \v!right=>\rightfloat {\box\floatbox}, \v!inleft=>\leftmarginfloat {\box\floatbox}, \v!inright=>\rightmarginfloat{\box\floatbox}, \v!leftmargin=>\leftmarginfloat {\box\floatbox}, \v!rightmargin=>\rightmarginfloat{\box\floatbox}, \v!leftedge=>\leftedgefloat {\box\floatbox}, \v!rightedge=>\rightedgefloat {\box\floatbox}, \v!backspace=>\backspacefloat {\box\floatbox}, \v!cutspace=>\cutspacefloat {\box\floatbox}, \v!inmargin=>\cutspacefloat {\box\floatbox}]% \doifinset\v!tall{#1}\flushsidefloatsafterpar \fi} \def\OTRONEdosomepagefloat#1[#2]% {%\checkwaitingfloats{#1}% \global\setbox#1\vbox {\unvbox#1% \vbox to \textheight {\doifnotinset\v!high{#2}\vfill \box\floatbox \doifnotinset\v!low{#2}\vfill}% \goodbreak}% \doinsertfloatinfo} \def\OTRONEsomepagefloat {\OTRONEdosomepagefloat\collectedpagefloats} \def\OTRONEsomeleftpagefloat {\OTRONEdosomepagefloat\collectedleftpagefloats} \def\OTRONEsomerightpagefloat{\OTRONEdosomepagefloat\collectedrightpagefloats} \def\OTRONEsometopsfloat[#1]% {\ifdim\topinserted=\zeropoint \topofinserttrue \else \topofinsertfalse \fi \global\advance\topinserted \ht\floatbox \global\advance\topinserted \dp\floatbox \global\advance\topinserted \floatbottomskip \insert\topins {\forgetall \iftopofinsert \topskipcorrection % [xx] new: see icare topbleed \kern-\lineskip\par\prevdepth\maxdimen \else %\blank[-\@@bkspaceafter,\@@bkspacebefore]% inserts can't look back \betweenfloatblanko \fi \flushfloatbox \blank[\@@bkspaceafter]}% \doinsertfloatinfo} \def\OTRONEsomebotsfloat[#1]% {\global\advance\botinserted \ht\floatbox \global\advance\botinserted \dp\floatbox \global\advance\botinserted \floattopskip \insert\botins {\forgetall \blank[\@@bkspacebefore]% \flushfloatbox}% %\global\nofloatpermittedtrue \doinsertfloatinfo} \def\OTRONEsomefacefloat[#1]% untested {\startopposite\flushfloatbox\stopopposite} \def\OTRONEnextcolumn[#1]% {} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-dir.lua0000644000175000017500000004436712130411274024154 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-dir'] = { version = 1.001, comment = "companion to typo-dir.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: also use end_of_math here? local next, type = next, type local format, insert, sub, find, match = string.format, table.insert, string.sub, string.find, string.match local utfchar = utf.char -- vertical space handler local nodes, node = nodes, node local trace_directions = false trackers.register("typesetters.directions", function(v) trace_directions = v end) local report_directions = logs.reporter("typesetting","directions") local traverse_id = node.traverse_id local insert_node_before = node.insert_before local insert_node_after = node.insert_after local remove_node = nodes.remove local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local nodecodes = nodes.nodecodes local whatcodes = nodes.whatcodes local mathcodes = nodes.mathcodes local tasks = nodes.tasks local glyph_code = nodecodes.glyph local whatsit_code = nodecodes.whatsit local math_code = nodecodes.math local localpar_code = whatcodes.localpar local dir_code = whatcodes.dir local nodepool = nodes.pool local new_textdir = nodepool.textdir local beginmath_code = mathcodes.beginmath local endmath_code = mathcodes.endmath local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local fontchar = fonthashes.characters local chardata = characters.data local chardirs = characters.directions -- maybe make a special mirror table --~ Analysis by Idris: --~ --~ 1. Assuming the reading- vs word-order distinction (bidi-char types) is governing; --~ 2. Assuming that 'ARAB' represents an actual arabic string in raw input order, not word-order; --~ 3. Assuming that 'BARA' represent the correct RL word order; --~ --~ Then we have, with input: LATIN ARAB --~ --~ \textdir TLT LATIN ARAB => LATIN BARA --~ \textdir TRT LATIN ARAB => LATIN BARA --~ \textdir TRT LRO LATIN ARAB => LATIN ARAB --~ \textdir TLT LRO LATIN ARAB => LATIN ARAB --~ \textdir TLT RLO LATIN ARAB => NITAL ARAB --~ \textdir TRT RLO LATIN ARAB => NITAL ARAB -- elseif d == "es" then -- European Number Separator -- elseif d == "et" then -- European Number Terminator -- elseif d == "cs" then -- Common Number Separator -- elseif d == "nsm" then -- Non-Spacing Mark -- elseif d == "bn" then -- Boundary Neutral -- elseif d == "b" then -- Paragraph Separator -- elseif d == "s" then -- Segment Separator -- elseif d == "ws" then -- Whitespace -- elseif d == "on" then -- Other Neutrals typesetters.directions = typesetters.directions or { } local directions = typesetters.directions local a_state = attributes.private('state') local a_directions = attributes.private('directions') local skipmath = true local strip = false -- todo: delayed inserts here -- todo: get rid of local functions here -- beware, math adds whatsits afterwards so that will mess things up local finish, autodir, embedded, override, done = nil, 0, 0, 0, false local list, glyphs = nil, false local finished, finidir, finipos = nil, nil, 1 local head, current, inserted = nil, nil, nil local function finish_auto_before() head, inserted = insert_node_before(head,current,new_textdir("-"..finish)) finished, finidir = inserted, finish if trace_directions then insert(list,#list,format("auto finish inserted before: %s",finish)) finipos = #list-1 end finish, autodir, done = nil, 0, true end local function finish_auto_after() head, current = insert_node_after(head,current,new_textdir("-"..finish)) finished, finidir = current, finish if trace_directions then list[#list+1] = format("auto finish inserted after: %s",finish) finipos = #list end finish, autodir, done = nil, 0, true end local function force_auto_left_before() if finish then finish_auto_before() end if embedded >= 0 then finish, autodir, done = "TLT", 1, true else finish, autodir, done = "TRT", -1, true end if finidir == finish then head = remove_node(head,finished,true) if trace_directions then list[finipos] = list[finipos] .. " (deleted afterwards)" insert(list,#list,format("start text dir %s (embedded: %s)",finish,embedded)) end else head, inserted = insert_node_before(head,current,new_textdir("+"..finish)) if trace_directions then insert(list,#list,format("start text dir %s (embedded: %s)",finish,embedded)) end end end local function force_auto_right_before() if finish then finish_auto_before() end if embedded <= 0 then finish, autodir, done = "TRT", -1, true else finish, autodir, done = "TLT", 1, true end if finidir == finish then head = remove_node(head,finished,true) if trace_directions then list[finipos] = list[finipos] .. " (deleted afterwards)" insert(list,#list,format("start text dir %s (embedded: %s)",finish,embedded)) end else head, inserted = insert_node_before(head,current,new_textdir("+"..finish)) if trace_directions then insert(list,#list,format("start text dir %s (embedded: %s)",finish,embedded)) end end end -- todo: use new dir functions local s_isol = fonts.analyzers.states.isol function directions.process(namespace,attribute,start) -- todo: make faster if not start.next then return start, false end head, current, inserted = start, start, nil finish, autodir, embedded, override, done = nil, 0, 0, 0, false list, glyphs = trace_directions and { }, false finished, finidir, finipos = nil, nil, 1 local stack, top, obsolete = { }, 0, { } local lro, rlo, prevattr, inmath = false, false, 0, false while current do local id = current.id if skipmath and id == math_code then local subtype = current.subtype if subtype == beginmath_code then inmath = true elseif subtype == endmath_code then inmath = false else -- todo end current = current.next elseif inmath then current = current.next else local attr = current[attribute] if attr and attr > 0 then -- current[attribute] = unsetvalue -- slow, needed? if attr == 1 then -- bidi parsing mode elseif attr ~= prevattr then -- no pop, grouped driven (2=normal,3=lro,4=rlo) if attr == 3 then if trace_directions then list[#list+1] = format("override right -> left (lro) (bidi=%s)",attr) end lro, rlo = true, false elseif attr == 4 then if trace_directions then list[#list+1] = format("override left -> right (rlo) (bidi=%s)",attr) end lro, rlo = false, true else if trace_directions and current ~= head then list[#list+1] = format("override reset (bidi=%s)",attr) end lro, rlo = false, false end prevattr = attr end end if id == glyph_code then glyphs = true if attr and attr > 0 then local char = current.char local d = chardirs[char] if rlo or override > 0 then if d == "l" then if trace_directions then list[#list+1] = format("char %s (%s / U+%04X) of class %s overidden to r (bidi=%s)",utfchar(char),char,char,d,attr) end d = "r" elseif trace_directions then if d == "lro" or d == "rlo" or d == "pdf" then -- else side effects on terminal list[#list+1] = format("override char of class %s (bidi=%s)",d,attr) else -- todo: rle lre list[#list+1] = format("char %s (%s / U+%04X) of class %s (bidi=%s)",utfchar(char),char,char,d,attr) end end elseif lro or override < 0 then if d == "r" or d == "al" then current[a_state] = s_isol -- maybe better have a special bidi attr value -> override (9) -> todo if trace_directions then list[#list+1] = format("char %s (%s / U+%04X) of class %s overidden to l (bidi=%s) (state=isol)",utfchar(char),char,char,d,attr) end d = "l" elseif trace_directions then if d == "lro" or d == "rlo" or d == "pdf" then -- else side effects on terminal list[#list+1] = format("override char of class %s (bidi=%s)",d,attr) else -- todo: rle lre list[#list+1] = format("char %s (%s / U+%04X) of class %s (bidi=%s)",utfchar(char),char,char,d,attr) end end elseif trace_directions then if d == "lro" or d == "rlo" or d == "pdf" then -- else side effects on terminal list[#list+1] = format("override char of class %s (bidi=%s)",d,attr) else -- todo: rle lre list[#list+1] = format("char %s (%s / U+%04X) of class %s (bidi=%s)",utfchar(char),char,char,d,attr) end end if d == "on" then local mirror = chardata[char].mirror -- maybe make a special mirror table if mirror and fontchar[current.font][mirror] then -- todo: set attribute if autodir < 0 then current.char = mirror done = true --~ elseif left or autodir > 0 then --~ if not is_right(current.prev) then --~ current.char = mirror --~ done = true --~ end end end elseif d == "l" or d == "en" then -- european number if autodir <= 0 then -- could be option force_auto_left_before() end elseif d == "r" or d == "al" then -- arabic number if autodir >= 0 then force_auto_right_before() end elseif d == "an" then -- arabic number -- actually this is language dependent ... -- if autodir <= 0 then -- force_auto_left_before() -- end if autodir >= 0 then force_auto_right_before() end elseif d == "lro" then -- Left-to-Right Override -> right becomes left if trace_directions then list[#list+1] = "override right -> left" end top = top + 1 stack[top] = { override, embedded } override = -1 obsolete[#obsolete+1] = current elseif d == "rlo" then -- Right-to-Left Override -> left becomes right if trace_directions then list[#list+1] = "override left -> right" end top = top + 1 stack[top] = { override, embedded } override = 1 obsolete[#obsolete+1] = current elseif d == "lre" then -- Left-to-Right Embedding -> TLT if trace_directions then list[#list+1] = "embedding left -> right" end top = top + 1 stack[top] = { override, embedded } embedded = 1 obsolete[#obsolete+1] = current elseif d == "rle" then -- Right-to-Left Embedding -> TRT if trace_directions then list[#list+1] = "embedding right -> left" end top = top + 1 stack[top] = { override, embedded } embedded = -1 -- was 1 obsolete[#obsolete+1] = current elseif d == "pdf" then -- Pop Directional Format -- override = 0 if top > 0 then local s = stack[top] override, embedded = s[1], s[2] top = top - 1 if trace_directions then list[#list+1] = format("state: override: %s, embedded: %s, autodir: %s",override,embedded,autodir) end else if trace_directions then list[#list+1] = "pop (error, too many pops)" end end obsolete[#obsolete+1] = current end elseif trace_directions then local char = current.char local d = chardirs[char] list[#list+1] = format("char %s (%s / U+%04X) of class %s (no bidi)",utfchar(char),char,char,d or "?") end elseif id == whatsit_code then if finish then finish_auto_before() end local subtype = current.subtype if subtype == localpar_code then local dir = current.dir local d = sub(dir,2,2) if d == 'R' then -- find(dir,".R.") / dir == "TRT" autodir = -1 else autodir = 1 end -- embedded = autodir if trace_directions then list[#list+1] = format("pardir %s",dir) end elseif subtype == dir_code then local dir = current.dir -- local sign = sub(dir,1,1) -- local dire = sub(dir,3,3) local sign, dire = match(dir,"^(.).(.)") if dire == "R" then if sign == "+" then finish, autodir = "TRT", -1 else finish, autodir = nil, 0 end else if sign == "+" then finish, autodir = "TLT", 1 else finish, autodir = nil, 0 end end if trace_directions then list[#list+1] = format("textdir %s",dir) end end else if trace_directions then list[#list+1] = format("node %s (subtype %s)",nodecodes[id],current.subtype) end if finish then finish_auto_before() end end local cn = current.next if not cn then if finish then finish_auto_after() end end current = cn end end if trace_directions and glyphs then report_directions("start log") for i=1,#list do report_directions("%02i: %s",i,list[i]) end report_directions("stop log") end if done and strip then local n = #obsolete if n > 0 then for i=1,n do remove_node(head,obsolete[i],true) end report_directions("%s character nodes removed",n) end end return head, done end --~ local function is_right(n) -- keep ! --~ if n then --~ local id = n.id --~ if id == glyph_code then --~ local attr = n[attribute] --~ if attr and attr > 0 then --~ local d = chardirs[n.char] --~ if d == "r" or d == "al" then -- override --~ return true --~ end --~ end --~ end --~ end --~ return false --~ end --~ function directions.enable() --~ tasks.enableaction("processors","directions.handler") --~ end local enabled = false function directions.set(n) -- todo: names and numbers if not enabled then if trace_directions then report_breakpoints("enabling directions handler") end tasks.enableaction("processors","typesetters.directions.handler") enabled = true end if not n or n == 0 then n = unsetvalue -- maybe tracing end texattribute[a_directions] = n end commands.setdirection = directions.set directions.handler = nodes.installattributehandler { name = "directions", namespace = directions, processor = directions.process, } context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-ref.lua0000644000175000017500000020756312130411274024131 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-ref'] = { version = 1.001, comment = "companion to strc-ref.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- beware, this is a first step in the rewrite (just getting rid of -- the tuo file); later all access and parsing will also move to lua -- the useddata and pagedata names might change -- todo: pack exported data -- todo: autoload components when ::: local format, find, gmatch, match, concat = string.format, string.find, string.gmatch, string.match, table.concat local texcount, texsetcount = tex.count, tex.setcount local rawget, tonumber = rawget, tonumber local lpegmatch = lpeg.match local copytable = table.copy local formatters = string.formatters local allocate = utilities.storage.allocate local mark = utilities.storage.mark local setmetatableindex = table.setmetatableindex local trace_referencing = false trackers.register("structures.referencing", function(v) trace_referencing = v end) local trace_analyzing = false trackers.register("structures.referencing.analyzing", function(v) trace_analyzing = v end) local trace_identifying = false trackers.register("structures.referencing.identifying", function(v) trace_identifying = v end) local trace_importing = false trackers.register("structures.referencing.importing", function(v) trace_importing = v end) local trace_empty = false trackers.register("structures.referencing.empty", function(v) trace_empty = v end) local check_duplicates = true directives.register("structures.referencing.checkduplicates", function(v) check_duplicates = v end) local report_references = logs.reporter("references") local report_unknown = logs.reporter("references","unknown") local report_identifying = logs.reporter("references","identifying") local report_importing = logs.reporter("references","importing") local report_empty = logs.reporter("references","empty") local variables = interfaces.variables local constants = interfaces.constants local context = context local v_default = variables.default local v_url = variables.url local v_file = variables.file local v_unknown = variables.unknown local v_yes = variables.yes local texcount = tex.count local texconditionals = tex.conditionals local productcomponent = resolvers.jobs.productcomponent local justacomponent = resolvers.jobs.justacomponent local logsnewline = logs.newline local logspushtarget = logs.pushtarget local logspoptarget = logs.poptarget local settings_to_array = utilities.parsers.settings_to_array local unsetvalue = attributes.unsetvalue local structures = structures local helpers = structures.helpers local sections = structures.sections local references = structures.references local lists = structures.lists local counters = structures.counters -- some might become local references.defined = references.defined or allocate() local defined = references.defined local derived = allocate() local specials = allocate() local runners = allocate() local internals = allocate() local filters = allocate() local executers = allocate() local handlers = allocate() local tobesaved = allocate() local collected = allocate() local tobereferred = allocate() local referred = allocate() references.derived = derived references.specials = specials references.runners = runners references.internals = internals references.filters = filters references.executers = executers references.handlers = handlers references.tobesaved = tobesaved references.collected = collected references.tobereferred = tobereferred references.referred = referred local splitreference = references.splitreference local splitprefix = references.splitcomponent -- replaces: references.splitprefix local prefixsplitter = references.prefixsplitter local componentsplitter = references.componentsplitter local currentreference = nil storage.register("structures/references/defined", references.defined, "structures.references.defined") local initializers = { } local finalizers = { } function references.registerinitializer(func) -- we could use a token register instead initializers[#initializers+1] = func end function references.registerfinalizer(func) -- we could use a token register instead finalizers[#finalizers+1] = func end local function initializer() -- can we use a tobesaved as metatable for collected? tobesaved = references.tobesaved collected = references.collected for i=1,#initializers do initializers[i](tobesaved,collected) end end local function finalizer() for i=1,#finalizers do finalizers[i](tobesaved) end end job.register('structures.references.collected', tobesaved, initializer, finalizer) local maxreferred = 1 local nofreferred = 0 -- local function initializer() -- can we use a tobesaved as metatable for collected? -- tobereferred = references.tobereferred -- referred = references.referred -- nofreferred = #referred -- end local function initializer() -- can we use a tobesaved as metatable for collected? tobereferred = references.tobereferred referred = references.referred setmetatableindex(referred,get) -- hm, what is get ? end -- We make the array sparse (maybe a finalizer should optionally return a table) because -- there can be quite some page links involved. We only store one action number per page -- which is normally good enough for what we want (e.g. see above/below) and we do -- a combination of a binary search and traverse backwards. A previous implementation -- always did a traverse and was pretty slow on a large number of links (given that this -- methods was used). It took me about a day to locate this as a bottleneck in processing -- a 2500 page interactive document with 60 links per page. In that case, traversing -- thousands of slots per link then brings processing to a grinding halt (especially when -- there are no slots at all, which is the case in a first run). local sparsetobereferred = { } local function finalizer() local lastr, lasti local n = 0 for i=1,maxreferred do local r = tobereferred[i] if not lastr then lastr = r lasti = i elseif r ~= lastr then n = n + 1 sparsetobereferred[n] = { lastr, lasti } lastr = r lasti = i end end if lastr then n = n + 1 sparsetobereferred[n] = { lastr, lasti } end end job.register('structures.references.referred', sparsetobereferred, initializer, finalizer) local function referredpage(n) local max = nofreferred if max > 0 then -- find match local min = 1 while true do local mid = floor((min+max)/2) local r = referred[mid] local m = r[2] if n == m then return r[1] elseif n > m then min = mid + 1 else max = mid - 1 end if min > max then break end end -- find first previous for i=min,1,-1 do local r = referred[i] if r and r[2] < n then return r[1] end end end -- fallback return texcount.realpageno end references.referredpage = referredpage function references.registerpage(n) -- called in the backend code if not tobereferred[n] then if n > maxreferred then maxreferred = n end tobereferred[n] = texcount.realpageno end end -- todo: delay split till later as in destinations we split anyway local orders, lastorder = { }, 0 local function setnextorder(kind,name) lastorder = 0 if kind and name then local ok = orders[kind] if not ok then ok = { } orders[kind] = ok end lastorder = (ok[name] or 0) + 1 ok[name] = lastorder end texsetcount("global","locationorder",lastorder) end references.setnextorder = setnextorder function references.setnextinternal(kind,name) setnextorder(kind,name) -- always incremented with internal local n = texcount.locationcount + 1 texsetcount("global","locationcount",n) return n end function references.currentorder(kind,name) return orders[kind] and orders[kind][name] or lastorder end local function setcomponent(data) -- we might consider doing this at the tex end, just like prefix local component = productcomponent() if component then local references = data and data.references if references then references.component = component end return component end -- but for the moment we do it here (experiment) end commands.setnextinternalreference = references.setnextinternal function commands.currentreferenceorder(kind,name) context(references.currentorder(kind,name)) end references.setcomponent = setcomponent function references.set(kind,prefix,tag,data) -- setcomponent(data) local pd = tobesaved[prefix] -- nicer is a metatable if not pd then pd = { } tobesaved[prefix] = pd end local n = 0 for ref in gmatch(tag,"[^,]+") do if ref ~= "" then if check_duplicates and pd[ref] then if prefix and prefix ~= "" then report_references("redundant reference %a in namespace %a",ref,prefix) else report_references("redundant reference %a",ref) end else n = n + 1 pd[ref] = data context.dofinishsomereference(kind,prefix,ref) end end end return n > 0 end function references.enhance(prefix,tag) local l = tobesaved[prefix][tag] if l then l.references.realpage = texcount.realpageno end end commands.enhancereference = references.enhance -- -- -- related to strc-ini.lua -- -- -- references.resolvers = references.resolvers or { } local resolvers = references.resolvers local function getfromlist(var) local vi = var.i if vi then vi = vi[3] or lists.collected[vi[2]] if vi then local r = vi.references and vi.references if r then r = r.realpage end if not r then r = vi.pagedata and vi.pagedata if r then r = r.realpage end end var.i = vi var.r = r or 1 else var.i = nil var.r = 1 end else var.i = nil var.r = 1 end end -- resolvers.section = getfromlist -- resolvers.float = getfromlist -- resolvers.description = getfromlist -- resolvers.formula = getfromlist -- resolvers.note = getfromlist setmetatableindex(resolvers,function(t,k) local v = getfromlist resolvers[k] = v return v end) function resolvers.reference(var) local vi = var.i[2] -- check if vi then var.i = vi var.r = (vi.references and vi.references.realpage) or (vi.pagedata and vi.pagedata.realpage) or 1 else var.i = nil var.r = 1 end end local function register_from_lists(collected,derived,pages,sections) local g = derived[""] if not g then g = { } derived[""] = g end -- global for i=1,#collected do local entry = collected[i] local m, r = entry.metadata, entry.references if m and r then local reference = r.reference or "" local prefix = r.referenceprefix or "" local component = r.component and r.component or "" if reference ~= "" then local kind, realpage = m.kind, r.realpage if kind and realpage then local d = derived[prefix] if not d then d = { } derived[prefix] = d end local c = derived[component] if not c then c = { } derived[component] = c end local t = { kind, i, entry } for s in gmatch(reference,"%s*([^,]+)") do if trace_referencing then report_references("list entry %a provides %a reference %a on realpage %a",i,kind,s,realpage) end c[s] = c[s] or t -- share them d[s] = d[s] or t -- share them g[s] = g[s] or t -- first wins end end end end end -- inspect(derived) end references.registerinitializer(function() register_from_lists(lists.collected,derived) end) -- urls references.urls = references.urls or { } references.urls.data = references.urls.data or { } local urls = references.urls.data function references.urls.define(name,url,file,description) if name and name ~= "" then urls[name] = { url or "", file or "", description or url or file or ""} end end local pushcatcodes = context.pushcatcodes local popcatcodes = context.popcatcodes local txtcatcodes = catcodes.numbers.txtcatcodes -- or just use "txtcatcodes" function references.urls.get(name) local u = urls[name] if u then local url, file = u[1], u[2] if file and file ~= "" then return formatters["%s/%s"](url,file) else return url end end end function commands.geturl(name) local url = references.urls.get(name) if url and url ~= "" then pushcatcodes(txtcatcodes) context(url) popcatcodes() end end -- function commands.gethyphenatedurl(name,...) -- local url = references.urls.get(name) -- if url and url ~= "" then -- hyphenatedurl(url,...) -- end -- end function commands.doifurldefinedelse(name) commands.doifelse(urls[name]) end commands.useurl= references.urls.define -- files references.files = references.files or { } references.files.data = references.files.data or { } local files = references.files.data function references.files.define(name,file,description) if name and name ~= "" then files[name] = { file or "", description or file or "" } end end function references.files.get(name,method,space) -- method: none, before, after, both, space: yes/no local f = files[name] if f then context(f[1]) end end function commands.doiffiledefinedelse(name) commands.doifelse(files[name]) end commands.usefile= references.files.define -- helpers function references.checkedfile(whatever) -- return whatever if not resolved if whatever then local w = files[whatever] if w then return w[1] else return whatever end end end function references.checkedurl(whatever) -- return whatever if not resolved if whatever then local w = urls[whatever] if w then local u, f = w[1], w[2] if f and f ~= "" then return u .. "/" .. f else return u end else return whatever end end end function references.checkedfileorurl(whatever,default) -- return nil, nil if not resolved if whatever then local w = files[whatever] if w then return w[1], nil else local w = urls[whatever] if w then local u, f = w[1], w[2] if f and f ~= "" then return nil, u .. "/" .. f else return nil, u end end end end return default end -- programs references.programs = references.programs or { } references.programs.data = references.programs.data or { } local programs = references.programs.data function references.programs.define(name,file,description) if name and name ~= "" then programs[name] = { file or "", description or file or ""} end end function references.programs.get(name) local f = programs[name] return f and f[1] end function references.checkedprogram(whatever) -- return whatever if not resolved if whatever then local w = programs[whatever] if w then return w[1] else return whatever end end end commands.defineprogram = references.programs.define function commands.getprogram(name) local f = programs[name] if f then context(f[1]) end end -- shared by urls and files function references.whatfrom(name) context((urls[name] and v_url) or (files[name] and v_file) or v_unknown) end function references.from(name) local u = urls[name] if u then local url, file, description = u[1], u[2], u[3] if description ~= "" then return description -- ok elseif file and file ~= "" then return url .. "/" .. file else return url end else local f = files[name] if f then local file, description = f[1], f[2] if description ~= "" then return description else return file end end end end function commands.from(name) local u = urls[name] if u then local url, file, description = u[1], u[2], u[3] if description ~= "" then context.dofromurldescription(description) -- ok elseif file and file ~= "" then context.dofromurlliteral(url .. "/" .. file) else context.dofromurlliteral(url) end else local f = files[name] if f then local file, description = f[1], f[2] if description ~= "" then context.dofromfiledescription(description) else context.dofromfileliteral(file) end end end end function references.define(prefix,reference,list) local d = defined[prefix] if not d then d = { } defined[prefix] = d end d[reference] = { "defined", list } end function references.reset(prefix,reference) local d = defined[prefix] if d then d[reference] = nil end end commands.definereference = references.define commands.resetreference = references.reset -- \primaryreferencefoundaction -- \secondaryreferencefoundaction -- \referenceunknownaction -- t.special t.operation t.arguments t.outer t.inner -- to what extend do we check the non prefixed variant local strict = false local function resolve(prefix,reference,args,set) -- we start with prefix,reference if reference and reference ~= "" then if not set then set = { prefix = prefix, reference = reference } else set.reference = set.reference or reference set.prefix = set.prefix or prefix end local r = settings_to_array(reference) for i=1,#r do local ri = r[i] local d if strict then d = defined[prefix] or defined[""] d = d and d[ri] else d = defined[prefix] d = d and d[ri] if not d then d = defined[""] d = d and d[ri] end end if d then resolve(prefix,d[2],nil,set) else local var = splitreference(ri) if var then var.reference = ri local vo, vi = var.outer, var.inner if not vo and vi then -- to be checked if strict then d = defined[prefix] or defined[""] d = d and d[vi] else d = defined[prefix] d = d and d[vi] if not d then d = defined[""] d = d and d[vi] end end -- if d then resolve(prefix,d[2],var.arguments,set) -- args can be nil else if args then var.arguments = args end set[#set+1] = var end else if args then var.arguments = args end set[#set+1] = var end if var.has_tex then set.has_tex = true end else -- report_references("funny pattern %a",ri) end end end return set else return { } end end -- prefix == "" is valid prefix which saves multistep lookup references.currentset = nil function commands.setreferenceoperation(k,v) references.currentset[k].operation = v end function commands.setreferencearguments(k,v) references.currentset[k].arguments = v end local expandreferenceoperation = context.expandreferenceoperation local expandreferencearguments = context.expandreferencearguments function references.expandcurrent() -- todo: two booleans: o_has_tex& a_has_tex local currentset = references.currentset if currentset and currentset.has_tex then for i=1,#currentset do local ci = currentset[i] local operation = ci.operation if operation and find(operation,"\\") then -- if o_has_tex then expandreferenceoperation(i,operation) end local arguments = ci.arguments if arguments and find(arguments,"\\") then -- if a_has_tex then expandreferencearguments(i,arguments) end end end end commands.expandcurrentreference = references.expandcurrent -- for the moment the same local externals = { } -- we have prefixes but also components: -- -- : prefix -- :: always external -- ::: internal (for products) or external (for components) local function loadexternalreferences(name,utilitydata) local struc = utilitydata.structures if struc then local external = struc.references.collected -- direct references local lists = struc.lists.collected -- indirect references (derived) local pages = struc.pages.collected -- pagenumber data -- a bit weird one, as we don't have the externals in the collected for prefix, set in next, external do for reference, data in next, set do if trace_importing then report_importing("registering %a reference, kind %a, name %a, prefix %a, reference %a", "external","regular",name,prefix,reference) end local section = reference.section local realpage = reference.realpage if section then reference.sectiondata = lists[section] end if realpage then reference.pagedata = pages[realpage] end end end for i=1,#lists do local entry = lists[i] local metadata = entry.metadata local references = entry.references if metadata and references then local reference = references.reference if reference and reference ~= "" then local kind = metadata.kind local realpage = references.realpage if kind and realpage then references.pagedata = pages[realpage] local prefix = references.referenceprefix or "" local target = external[prefix] if not target then target = { } external[prefix] = target end for s in gmatch(reference,"%s*([^,]+)") do if trace_importing then report_importing("registering %s reference, kind %a, name %a, prefix %a, reference %a", "external",kind,name,prefix,s) end target[s] = target[s] or entry end end end end end externals[name] = external return external end end local externalfiles = { } table.setmetatableindex(externalfiles, function(t,k) local v = files[k] if not v then v = { k, k } end externalfiles[k] = v return v end) table.setmetatableindex(externals,function(t,k) -- either or not automatically local filename = externalfiles[k][1] -- filename local fullname = file.replacesuffix(filename,"tuc") if lfs.isfile(fullname) then -- todo: use other locator local utilitydata = job.loadother(fullname) if utilitydata then local external = loadexternalreferences(k,utilitydata) t[k] = external or false return external end end t[k] = false return false end) local productdata = allocate { productreferences = { }, componentreferences = { }, components = { }, } references.productdata = productdata local function loadproductreferences(productname,componentname,utilitydata) local struc = utilitydata.structures if struc then local productreferences = struc.references.collected -- direct references local lists = struc.lists.collected -- indirect references (derived) local pages = struc.pages.collected -- pagenumber data -- we use indirect tables to save room but as they are eventually -- just references we resolve them to data here (the mechanisms -- that use this data check for indirectness) for prefix, set in next, productreferences do for reference, data in next, set do if trace_importing then report_importing("registering %s reference, kind %a, name %a, prefix %a, reference %a", "product","regular",productname,prefix,reference) end local section = reference.section local realpage = reference.realpage if section then reference.sectiondata = lists[section] end if realpage then reference.pagedata = pages[realpage] end end end -- local componentreferences = { } for i=1,#lists do local entry = lists[i] local metadata = entry.metadata local references = entry.references if metadata and references then local reference = references.reference if reference and reference ~= "" then local kind = metadata.kind local realpage = references.realpage if kind and realpage then references.pagedata = pages[realpage] local prefix = references.referenceprefix or "" local component = references.component local ctarget, ptarget if not component or component == componentname then -- skip else -- one level up local external = componentreferences[component] if not external then external = { } componentreferences[component] = external end if component == prefix then prefix = "" end ctarget = external[prefix] if not ctarget then ctarget = { } external[prefix] = ctarget end end ptarget = productreferences[prefix] if not ptarget then ptarget = { } productreferences[prefix] = ptarget end for s in gmatch(reference,"%s*([^,]+)") do if ptarget then if trace_importing then report_importing("registering %s reference, kind %a, name %a, prefix %a, reference %a", "product",kind,productname,prefix,s) end ptarget[s] = ptarget[s] or entry end if ctarget then if trace_importing then report_importing("registering %s reference, kind %a, name %a, prefix %a, referenc %a", "component",kind,productname,prefix,s) end ctarget[s] = ctarget[s] or entry end end end end end end productdata.productreferences = productreferences -- not yet used productdata.componentreferences = componentreferences end end local function loadproductvariables(product,component,utilitydata) local struc = utilitydata.structures if struc then local lists = struc.lists and struc.lists.collected if lists then local pages = struc.pages and struc.pages.collected for i=1,#lists do local li = lists[i] if li.metadata.kind == "section" and li.references.component == component then local firstsection = li if firstsection.numberdata then local numbers = firstsection.numberdata.numbers if numbers then if trace_importing then report_importing("initializing section number to %:t",numbers) end productdata.firstsection = firstsection structures.documents.preset(numbers) end end if pages and firstsection.references then local firstpage = pages[firstsection.references.realpage] local number = firstpage and firstpage.number if number then if trace_importing then report_importing("initializing page number to %a",number) end productdata.firstpage = firstpage counters.set("userpage",1,number) end end break end end end end end local function componentlist(tree,target) local branches = tree and tree.branches if branches then for i=1,#branches do local branch = branches[i] local type = branch.type if type == "component" then if target then target[#target+1] = branch.name else target = { branch.name } end elseif type == "product" or type == "component" then target = componentlist(branch,target) end end end return target end local function loadproductcomponents(product,component,utilitydata) local job = utilitydata.job productdata.components = componentlist(job and job.structure and job.structure.collected) or { } end references.registerinitializer(function(tobesaved,collected) -- not that much related to tobesaved or collected productdata.components = componentlist(job.structure.collected) or { } end) function structures.references.loadpresets(product,component) -- we can consider a special components hash if product and component and product~= "" and component ~= "" and not productdata.product then -- maybe: productdata.filename ~= filename productdata.product = product productdata.component = component local fullname = file.replacesuffix(product,"tuc") if lfs.isfile(fullname) then -- todo: use other locator local utilitydata = job.loadother(fullname) if utilitydata then if trace_importing then report_importing("loading references for component %a of product %a from %a",component,product,fullname) end loadproductvariables (product,component,utilitydata) loadproductreferences(product,component,utilitydata) loadproductcomponents(product,component,utilitydata) -- inspect(productdata) end end end end structures.references.productdata = productdata local useproduct = commands.useproduct if useproduct then function commands.useproduct(product) useproduct(product) if texconditionals.autocrossfilereferences then local component = justacomponent() if component then if trace_referencing or trace_importing then report_references("loading presets for component %a of product %a",component,product) end structures.references.loadpresets(product,component) end end end end -- productdata.firstsection.numberdata.numbers -- productdata.firstpage.number local function report_identify_special(set,var,i,type) local reference = set.reference local prefix = set.prefix or "" local special = var.special local error = var.error local kind = var.kind if error then report_identifying("type %a, reference %a, index %a, prefix %a, special %a, error %a",type,reference,i,prefix,special,error) else report_identifying("type %a, reference %a, index %a, prefix %a, special %a, kind %a",type,reference,i,prefix,special,kind) end end local function report_identify_arguments(set,var,i,type) local reference = set.reference local prefix = set.prefix or "" local arguments = var.arguments local error = var.error local kind = var.kind if error then report_identifying("type %a, reference %a, index %a, prefix %a, arguments %a, error %a",type,reference,i,prefix,arguments,error) else report_identifying("type %a, reference %a, index %a, prefix %a, arguments %a, kind %a",type,reference,i,prefix,arguments,kind) end end local function report_identify_outer(set,var,i,type) local reference = set.reference local prefix = set.prefix or "" local outer = var.outer local error = var.error local kind = var.kind if outer then if error then report_identifying("type %a, reference %a, index %a, prefix %a, outer %a, error %a",type,reference,i,prefix,outer,error) else report_identifying("type %a, reference %a, index %a, prefix %a, outer %a, kind %a",type,reference,i,prefix,outer,kind) end else if error then report_identifying("type %a, reference %a, index %a, prefix %a, error %a",type,reference,i,prefix,error) else report_identifying("type %a, reference %a, index %a, prefix %a, kind %a",type,reference,i,prefix,kind) end end end local function identify_special(set,var,i) local special = var.special local s = specials[special] if s then local outer = var.outer local operation = var.operation local arguments = var.arguments if outer then if operation then -- special(outer::operation) var.kind = "special outer with operation" else -- special() var.kind = "special outer" end var.f = outer elseif operation then if arguments then -- special(operation{argument,argument}) var.kind = "special operation with arguments" else -- special(operation) var.kind = "special operation" end else -- special() var.kind = "special" end if trace_identifying then report_identify_special(set,var,i,"1a") end else var.error = "unknown special" end return var end local function identify_arguments(set,var,i) local s = specials[var.inner] if s then -- inner{argument} var.kind = "special with arguments" else var.error = "unknown inner or special" end if trace_identifying then report_identify_arguments(set,var,i,"3a") end return var end local function identify_inner(set,var,prefix,collected,derived,tobesaved) local inner = var.inner local outer = var.outer -- inner ... we could move the prefix logic into the parser so that we have 'm for each entry -- foo:bar -> foo == prefix (first we try the global one) -- -:bar -> ignore prefix local p, i = prefix, nil local splitprefix, splitinner -- the next test is a safeguard when references are auto loaded from outer if inner then splitprefix, splitinner = lpegmatch(prefixsplitter,inner) end -- these are taken from other anonymous references if splitprefix and splitinner then if splitprefix == "-" then i = collected[""] i = i and i[splitinner] if i then p = "" end else i = collected[splitprefix] i = i and i[splitinner] if i then p = splitprefix end end end -- todo: strict here if not i then i = collected[prefix] i = i and i[inner] if i then p = prefix end end if not i and prefix ~= "" then i = collected[""] i = i and i[inner] if i then p = "" end end if i then var.i = { "reference", i } resolvers.reference(var) var.kind = "inner" var.p = p elseif derived then -- these are taken from other data structures (like lists) if splitprefix and splitinner then if splitprefix == "-" then i = derived[""] i = i and i[splitinner] if i then p = "" end else i = derived[splitprefix] i = i and i[splitinner] if i then p = splitprefix end end end if not i then i = derived[prefix] i = i and i[inner] if i then p = prefix end end if not i and prefix ~= "" then i = derived[""] i = i and i[inner] if i then p = "" end end if i then var.kind = "inner" var.i = i var.p = p local ri = resolvers[i[1]] if ri then ri(var) else -- can't happen as we catch it with a metatable now report_references("unknown inner resolver for %a",i[1]) end else -- no prefixes here local s = specials[inner] if s then var.kind = "special" else i = (collected and collected[""] and collected[""][inner]) or (derived and derived [""] and derived [""][inner]) or (tobesaved and tobesaved[""] and tobesaved[""][inner]) if i then var.kind = "inner" var.i = { "reference", i } resolvers.reference(var) var.p = "" else var.error = "unknown inner or special" end end end end return var end local function identify_outer(set,var,i) local outer = var.outer local inner = var.inner local external = externals[outer] if external then local v = copytable(var) v = identify_inner(set,v,nil,external) if v.i and not v.error then v.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,v,i,"2a") end return v end v = copytable(var) local v = identify_inner(set,v,v.outer,external) if v.i and not v.error then v.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,v,i,"2b") end return v end end local external = productdata.componentreferences[outer] if external then local v = identify_inner(set,copytable(var),nil,external) if v.i and not v.error then v.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,v,i,"2c") end return v end end local external = productdata.productreferences[outer] if external then local vi = external[inner] if vi then var.kind = "outer with inner" var.i = vi set.external = true if trace_identifying then report_identify_outer(set,var,i,"2d") end return var end end -- the rest local special = var.special local arguments = var.arguments local operation = var.operation if inner then if arguments then -- outer::inner{argument} var.kind = "outer with inner with arguments" else -- outer::inner var.kind = "outer with inner" end var.i = { "reference", inner } resolvers.reference(var) var.f = outer if trace_identifying then report_identify_outer(set,var,i,"2e") end elseif special then local s = specials[special] if s then if operation then if arguments then -- outer::special(operation{argument,argument}) var.kind = "outer with special and operation and arguments" else -- outer::special(operation) var.kind = "outer with special and operation" end else -- outer::special() var.kind = "outer with special" end var.f = outer else var.error = "unknown outer with special" end if trace_identifying then report_identify_outer(set,var,i,"2f") end else -- outer:: var.kind = "outer" var.f = outer if trace_identifying then report_identify_outer(set,var,i,"2g") end end return var end local function identify_inner_or_outer(set,var,i) -- here we fall back on product data local inner = var.inner if inner and inner ~= "" then local v = identify_inner(set,copytable(var),set.prefix,collected,derived,tobesaved) if v.i and not v.error then v.kind = "inner" -- check this if trace_identifying then report_identify_outer(set,v,i,"4a") end return v end local components = job.structure.components if components then for i=1,#components do local component = components[i] local data = collected[component] local vi = data and data[inner] if vi then var.outer = component var.i = vi var.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,var,i,"4x") end return var end end end local componentreferences = productdata.componentreferences local productreferences = productdata.productreferences local components = productdata.components if components and componentreferences then -- for component, data in next, productdata.componentreferences do -- better do this in order of processing: for i=1,#components do local component = components[i] local data = componentreferences[component] if data then local d = data[""] local vi = d and d[inner] if vi then var.outer = component var.i = vi var.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,var,i,"4b") end return var end end end end local component, inner = lpegmatch(componentsplitter,inner) if component then local data = componentreferences and componentreferences[component] if data then local d = data[""] local vi = d and d[inner] if vi then var.inner = inner var.outer = component var.i = vi var.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,var,i,"4c") end return var end end local data = productreferences and productreferences[component] if data then local vi = data[inner] if vi then var.inner = inner var.outer = component var.i = vi var.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,var,i,"4d") end return var end end end var.error = "unknown inner" else var.error = "no inner" end if trace_identifying then report_identify_outer(set,var,i,"4e") end return var end -- local function identify_inner_or_outer(set,var,i) -- -- we might consider first checking with a prefix prepended and then without -- -- which is better for fig:oeps -- local var = do_identify_inner_or_outer(set,var,i) -- if var.error then -- local prefix = set.prefix -- if prefix and prefix ~= "" then -- var.inner = prefix .. ':' .. var.inner -- var.error = nil -- return do_identify_inner_or_outer(set,var,i) -- end -- end -- return var -- end local function identify_inner_component(set,var,i) -- we're in a product (maybe ignore when same as component) local component = var.component identify_inner(set,var,component,collected,derived,tobesaved) if trace_identifying then report_identify_outer(set,var,i,"5a") end return var end local function identify_outer_component(set,var,i) local component = var.component local inner = var.inner local data = productdata.componentreferences[component] if data then local d = data[""] local vi = d and d[inner] if vi then var.inner = inner var.outer = component var.i = vi var.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,var,i,"6a") end return var end end local data = productdata.productreferences[component] if data then local vi = data[inner] if vi then var.inner = inner var.outer = component var.i = vi var.kind = "outer with inner" set.external = true if trace_identifying then report_identify_outer(set,var,i,"6b") end return var end end var.error = "unknown component" if trace_identifying then report_identify_outer(set,var,i,"6c") end return var end local nofidentified = 0 local function identify(prefix,reference) if not reference then prefix = "" reference = prefix end local set = resolve(prefix,reference) local bug = false texcount.referencehastexstate = set.has_tex and 1 or 0 nofidentified = nofidentified + 1 set.n = nofidentified for i=1,#set do local var = set[i] if var.special then var = identify_special(set,var,i) elseif var.outer then var = identify_outer(set,var,i) elseif var.arguments then var = identify_arguments(set,var,i) elseif not var.component then var = identify_inner_or_outer(set,var,i) elseif productcomponent() then var = identify_inner_component(set,var,i) else var = identify_outer_component(set,var,i) end set[i] = var bug = bug or var.error end references.currentset = mark(set) -- mark, else in api doc if trace_analyzing then report_references(table.serialize(set,reference)) end return set, bug end references.identify = identify local unknowns, nofunknowns, f_valid = { }, 0, formatters["[%s][%s]"] function references.valid(prefix,reference,highlight,newwindow,layer) local set, bug = identify(prefix,reference) local unknown = bug or #set == 0 if unknown then currentreference = nil -- will go away local str = f_valid(prefix,reference) local u = unknowns[str] if not u then interfaces.showmessage("references",1,str) -- 1 = unknown, 4 = illegal unknowns[str] = 1 nofunknowns = nofunknowns + 1 else unknowns[str] = u + 1 end else set.highlight, set.newwindow, set.layer = highlight, newwindow, layer currentreference = set[1] end -- we can do the expansion here which saves a call return not unknown end function commands.doifelsereference(prefix,reference,highlight,newwindow,layer) commands.doifelse(references.valid(prefix,reference,highlight,newwindow,layer)) end function references.reportproblems() -- might become local if nofunknowns > 0 then statistics.register("cross referencing", function() return format("%s identified, %s unknown",nofidentified,nofunknowns) end) logspushtarget("logfile") logsnewline() report_references("start problematic references") logsnewline() for k, v in table.sortedpairs(unknowns) do report_unknown("%4i: %s",v,k) end logsnewline() report_references("stop problematic references") logsnewline() logspoptarget() end end luatex.registerstopactions(references.reportproblems) local innermethod = "names" function references.setinnermethod(m) if m then if m == "page" or m == "mixed" or m == "names" then innermethod = m elseif m == true or m == v_yes then innermethod = "page" end end function references.setinnermethod() report_references("inner method is already set and frozen to %a",innermethod) end end function references.getinnermethod() return innermethod or "names" end directives.register("references.linkmethod", function(v) -- page mixed names references.setinnermethod(v) end) -- this is inconsistent function references.setinternalreference(prefix,tag,internal,view) -- needs checking if innermethod == "page" then return unsetvalue else local t, tn = { }, 0 -- maybe add to current if tag then if prefix and prefix ~= "" then prefix = prefix .. ":" -- watch out, : here for ref in gmatch(tag,"[^,]+") do tn = tn + 1 t[tn] = prefix .. ref end else for ref in gmatch(tag,"[^,]+") do tn = tn + 1 t[tn] = ref end end end if internal and innermethod == "names" then -- mixed or page tn = tn + 1 t[tn] = "aut:" .. internal end local destination = references.mark(t,nil,nil,view) -- returns an attribute texcount.lastdestinationattribute = destination return destination end end function references.setandgetattribute(kind,prefix,tag,data,view) -- maybe do internal automatically here local attr = references.set(kind,prefix,tag,data) and references.setinternalreference(prefix,tag,nil,view) or unsetvalue texcount.lastdestinationattribute = attr return attr end commands.setreferenceattribute = references.setandgetattribute function references.getinternalreference(n) -- n points into list (todo: registers) local l = lists.collected[n] return l and l.references.internal or n end function commands.setinternalreference(prefix,tag,internal,view) -- needs checking context(references.setinternalreference(prefix,tag,internal,view)) end function commands.getinternalreference(n) -- this will also be a texcount local l = lists.collected[n] context(l and l.references.internal or n) end -- function references.getcurrentmetadata(tag) local data = currentreference and currentreference.i return data and data.metadata and data.metadata[tag] end function commands.getcurrentreferencemetadata(tag) local data = references.getcurrentmetadata(tag) if data then context(data) end end local function currentmetadata(tag) local data = currentreference and currentreference.i return data and data.metadata and data.metadata[tag] end references.currentmetadata = currentmetadata local function getcurrentprefixspec(default) -- todo: message return currentmetadata("kind") or "?", currentmetadata("name") or "?", default or "?" end references.getcurrentprefixspec = getcurrentprefixspec function commands.getcurrentprefixspec(default) context.getreferencestructureprefix(getcurrentprefixspec(default)) end function references.filter(name,...) -- number page title ... local data = currentreference and currentreference.i -- maybe we should take realpage from here if data then if name == "realpage" then local cs = references.analyze() -- normally already analyzed but also sets state context(tonumber(cs.realpage) or 0) -- todo, return and in command namespace else -- assumes data is table local kind = type(data) == "table" and data.metadata and data.metadata.kind if kind then local filter = filters[kind] or filters.generic filter = filter and (filter[name] or filter.unknown or filters.generic[name] or filters.generic.unknown) if filter then if trace_referencing then report_references("name %a, kind %a, using dedicated filter",name,kind) end filter(data,name,...) elseif trace_referencing then report_references("name %a, kind %a, using generic filter",name,kind) end elseif trace_referencing then report_references("name %a, unknown kind",name) end end elseif name == "realpage" then context(0) elseif trace_referencing then report_references("name %a, no reference",name) end end function references.filterdefault() return references.filter("default",getcurrentprefixspec(v_default)) end function commands.currentreferencedefault(tag) if not tag then tag = "default" end references.filter(tag,context.delayed(getcurrentprefixspec(tag))) end filters.generic = { } function filters.generic.title(data) if data then local titledata = data.titledata or data.useddata if titledata then helpers.title(titledata.title or "?",data.metadata) end end end function filters.generic.text(data) if data then local entries = data.entries or data.useddata if entries then helpers.title(entries.text or "?",data.metadata) end end end function filters.generic.number(data,what,prefixspec) -- todo: spec and then no stopper if data then numberdata = lists.reordered(data) -- data.numberdata if numberdata then helpers.prefix(data,prefixspec) sections.typesetnumber(numberdata,"number",numberdata) else local useddata = data.useddata if useddata and useddsta.number then context(useddata.number) end end end end filters.generic.default = filters.generic.text function filters.generic.page(data,prefixspec,pagespec) local pagedata = data.pagedata if pagedata then local number, conversion = pagedata.number, pagedata.conversion if not number then -- error elseif conversion then context.convertnumber(conversion,number) else context(number) end else helpers.prefixpage(data,prefixspec,pagespec) end end filters.user = { } function filters.user.unknown(data,name) if data then local userdata = data.userdata local userkind = userdata and userdata.kind if userkind then local filter = filters[userkind] or filters.generic filter = filter and (filter[name] or filter.unknown) if filter then filter(data,name) return end end local namedata = userdata and userdata[name] if namedata then context(namedata) end end end filters.text = { } function filters.text.title(data) helpers.title(data.entries.text or "?",data.metadata) end -- no longer considered useful: -- -- function filters.text.number(data) -- helpers.title(data.entries.text or "?",data.metadata) -- end function filters.text.page(data,prefixspec,pagespec) helpers.prefixpage(data,prefixspec,pagespec) end filters.full = { } filters.full.title = filters.text.title filters.full.page = filters.text.page filters.section = { } function filters.section.number(data,what,prefixspec) if data then local numberdata = data.numberdata if not numberdata then local useddata = data.useddata if useddata and useddata.number then context(useddata.number) end elseif numberdata.hidenumber then local references = data.references if trace_empty then report_empty("reference %a has a hidden number",references.reference) context.emptyreference() -- maybe an option end else sections.typesetnumber(numberdata,"number",prefixspec,numberdata) end end end filters.section.title = filters.generic.title filters.section.page = filters.generic.page filters.section.default = filters.section.number -- filters.note = { default = filters.generic.number } -- filters.formula = { default = filters.generic.number } -- filters.float = { default = filters.generic.number } -- filters.description = { default = filters.generic.number } -- filters.item = { default = filters.generic.number } setmetatableindex(filters, function(t,k) -- beware, test with rawget local v = { default = filters.generic.number } -- not copy as it might be extended differently t[k] = v return v end) -- function references.sectiontitle(n) -- helpers.sectiontitle(lists.collected[tonumber(n) or 0]) -- end -- function references.sectionnumber(n) -- helpers.sectionnumber(lists.collected[tonumber(n) or 0]) -- end -- function references.sectionpage(n,prefixspec,pagespec) -- helpers.prefixedpage(lists.collected[tonumber(n) or 0],prefixspec,pagespec) -- end -- analyze references.testrunners = references.testrunners or { } references.testspecials = references.testspecials or { } local runners = references.testrunners local specials = references.testspecials -- We need to prevent ending up in the 'relative location' analyzer as it is -- pretty slow (progressively). In the pagebody one can best check the reference -- real page to determine if we need contrastlocation as that is more lightweight. local function checkedpagestate(n,page) local r, p = referredpage(n), tonumber(page) if not p then return 0 elseif p > r then return 3 -- after elseif p < r then return 2 -- before else return 1 -- same end end local function setreferencerealpage(actions) actions = actions or references.currentset if not actions then return 0 else local realpage = actions.realpage if realpage then return realpage end local nofactions = #actions if nofactions > 0 then for i=1,nofactions do local a = actions[i] local what = runners[a.kind] if what then what = what(a,actions) -- needs documentation end end realpage = actions.realpage if realpage then return realpage end end actions.realpage = 0 return 0 end end -- we store some analysis data alongside the indexed array -- at this moment only the real reference page is analyzed -- normally such an analysis happens in the backend code function references.analyze(actions) actions = actions or references.currentset if not actions then actions = { realpage = 0, pagestate = 0 } elseif actions.pagestate then -- already done else local realpage = actions.realpage or setreferencerealpage(actions) if realpage == 0 then actions.pagestate = 0 elseif actions.external then actions.pagestate = 0 else actions.pagestate = checkedpagestate(actions.n,realpage) end end return actions end function commands.referencepagestate(actions) actions = actions or references.currentset if not actions then context(0) else if not actions.pagestate then references.analyze(actions) -- delayed unless explicitly asked for end context(actions.pagestate) end end function commands.referencerealpage(actions) actions = actions or references.currentset context(not actions and 0 or actions.realpage or setreferencerealpage(actions)) end local plist, nofrealpages local function realpageofpage(p) -- the last one counts ! if not plist then local pages = structures.pages.collected nofrealpages = #pages plist = { } for rp=1,nofrealpages do plist[pages[rp].number] = rp end references.nofrealpages = nofrealpages end return plist[p] end references.realpageofpage = realpageofpage function references.checkedrealpage(r) if not plist then realpageofpage(r) -- just initialize end if not r then return texcount.realpageno elseif r < 1 then return 1 elseif r > nofrealpages then return nofrealpages else return r end end -- use local ? local pages = allocate { [variables.firstpage] = function() return counters.record("realpage")["first"] end, [variables.previouspage] = function() return counters.record("realpage")["previous"] end, [variables.nextpage] = function() return counters.record("realpage")["next"] end, [variables.lastpage] = function() return counters.record("realpage")["last"] end, [variables.firstsubpage] = function() return counters.record("subpage" )["first"] end, [variables.previoussubpage] = function() return counters.record("subpage" )["previous"] end, [variables.nextsubpage] = function() return counters.record("subpage" )["next"] end, [variables.lastsubpage] = function() return counters.record("subpage" )["last"] end, [variables.forward] = function() return counters.record("realpage")["forward"] end, [variables.backward] = function() return counters.record("realpage")["backward"] end, } references.pages = pages -- maybe some day i will merge this in the backend code with a testmode (so each -- runner then implements a branch) runners["inner"] = function(var,actions) local r = var.r if r then actions.realpage = r end end runners["special"] = function(var,actions) local handler = specials[var.special] return handler and handler(var,actions) end runners["special operation"] = runners["special"] runners["special operation with arguments"] = runners["special"] -- These are the testspecials not the real ones. They are used to -- check the validity. function specials.internal(var,actions) local v = references.internals[tonumber(var.operation)] local r = v and v.references.realpage if r then actions.realpage = r end end specials.i = specials.internal function specials.page(var,actions) local o = var.operation local p = pages[o] if type(p) == "function" then p = p() else p = tonumber(realpageofpage(tonumber(o))) end if p then var.r = p actions.realpage = actions.realpage or p -- first wins end end function specials.realpage(var,actions) local p = tonumber(var.operation) if p then var.r = p actions.realpage = actions.realpage or p -- first wins end end function specials.userpage(var,actions) local p = tonumber(realpageofpage(var.operation)) if p then var.r = p actions.realpage = actions.realpage or p -- first wins end end function specials.deltapage(var,actions) local p = tonumber(var.operation) if p then p = references.checkedrealpage(p + texcount.realpageno) var.r = p actions.realpage = actions.realpage or p -- first wins end end function specials.section(var,actions) local sectionname = var.arguments local destination = var.operation local internal = structures.sections.internalreference(sectionname,destination) if internal then var.special = "internal" var.operation = internal var.arguments = nil specials.internal(var,actions) end end -- needs a better split ^^^ commands.filterreference = references.filter commands.filterdefaultreference = references.filterdefault -- done differently now: function references.export(usedname) end function references.import(usedname) end function references.load (usedname) end commands.exportreferences = references.export context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-8.lua0000644000175000017500000000457411571377075024131 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-8'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000 } context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-escaped.lua0000644000175000017500000000077711571377075025533 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-imp-escaped'] = { version = 1.001, comment = "companion to buff-imp-escaped.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } visualizers.registerescapepattern("/BTEX/ETEX","/BTEX","/ETEX") visualizers.register("escaped", { parser = visualizers.escapepatterns["/BTEX/ETEX"], handler = visualizers.newhandler(), }) context-2013.05.28.20130704/texmf-dist/tex/context/base/font-col.lua0000644000175000017500000001771412130411274024122 0ustar norbertnorbertif not modules then modules = { } end modules ['font-col'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- possible optimization: delayed initialization of vectors local context, commands, trackers, logs = context, commands, trackers, logs local node, nodes, fonts, characters = node, nodes, fonts, characters local file, lpeg, table, string = file, lpeg, table, string local type, next, toboolean = type, next, toboolean local gmatch = string.gmatch local fastcopy = table.fastcopy ----- P, Cc, lpegmatch = lpeg.P, lpeg.Cc, lpeg.match local traverse_id = node.traverse_id local settings_to_hash = utilities.parsers.settings_to_hash local trace_collecting = false trackers.register("fonts.collecting", function(v) trace_collecting = v end) local report_fonts = logs.reporter("fonts","collections") local collections = fonts.collections or { } fonts.collections = collections local definitions = collections.definitions or { } collections.definitions = definitions local vectors = collections.vectors or { } collections.vectors = vectors local fontdata = fonts.hashes.identifiers local glyph_code = nodes.nodecodes.glyph local currentfont = font.current local fontpatternhassize = fonts.helpers.fontpatternhassize local list = { } local current = 0 local enabled = false -- maybe also a copy function collections.reset(name,font) if font and font ~= "" then local d = definitions[name] if d then d[font] = nil if not next(d) then definitions[name] = nil end end else definitions[name] = nil end end function collections.define(name,font,ranges,details) -- todo: details -> method=force|conditional rscale= -- todo: remap=name local d = definitions[name] if not d then d = { } definitions[name] = d end if name and trace_collecting then report_fonts("extending collection %a using %a",name,font) end details = settings_to_hash(details) -- todo, combine per font start/stop as arrays for s in gmatch(ranges,"[^, ]+") do local start, stop, description = characters.getrange(s) if start and stop then if trace_collecting then if description then report_fonts("using range %a, slots %U - %U, description %a)",s,start,stop,description) end for i=1,#d do local di = d[i] if (start >= di.start and start <= di.stop) or (stop >= di.start and stop <= di.stop) then report_fonts("overlapping ranges %U - %U and %U - %U",start,stop,di.start,di.stop) end end end details.font, details.start, details.stop = font, start, stop d[#d+1] = fastcopy(details) end end end -- todo: provide a lua variant (like with definefont) function collections.registermain(name) local last = currentfont() if trace_collecting then report_fonts("registering font %a with name %a",last,name) end list[#list+1] = last end function collections.clonevector(name) statistics.starttiming(fonts) local d = definitions[name] local t = { } if trace_collecting then report_fonts("processing collection %a",name) end for i=1,#d do local f = d[i] local id = list[i] local start, stop = f.start, f.stop if trace_collecting then report_fonts("remapping font %a to %a for range %U - %U",current,id,start,stop) end local check = toboolean(f.check or "false",true) local force = toboolean(f.force or "true",true) local remap = f.remap or nil -- check: when true, only set when present in font -- force: when false, then not set when already set local oldchars = fontdata[current].characters local newchars = fontdata[id].characters if check then for i=start,stop do if newchars[i] and (force or (not t[i] and not oldchars[i])) then if remap then t[i] = { id, remap[i] } else t[i] = id end end end else for i=start,stop do if force or (not t[i] and not oldchars[i]) then if remap then t[i] = { id, remap[i] } else t[i] = id end end end end end vectors[current] = t if trace_collecting then report_fonts("activating collection %a for font %a",name,current) end if not enabled then nodes.tasks.enableaction("processors","fonts.collections.process") enabled = true end statistics.stoptiming(fonts) end -- we already have this parser -- -- local spec = (P("sa") + P("at") + P("scaled") + P("at") + P("mo")) * P(" ")^1 * (1-P(" "))^1 * P(" ")^0 * -1 -- local okay = ((1-spec)^1 * spec * Cc(true)) + Cc(false) -- -- if lpegmatch(okay,name) then function collections.prepare(name) current = currentfont() if vectors[current] then return end local d = definitions[name] if d then if trace_collecting then local filename = file.basename(fontdata[current].properties.filename or "?") report_fonts("applying collection %a to %a, file %a",name,current,filename) end list = { } context.pushcatcodes("prt") -- context.unprotect() context.font_fallbacks_start_cloning() for i=1,#d do local f = d[i] local name = f.font local scale = f.rscale or 1 if fontpatternhassize(name) then context.font_fallbacks_clone_unique(name,scale) else context.font_fallbacks_clone_inherited(name,scale) end context.font_fallbacks_register_main(name) end context.font_fallbacks_prepare_clone_vectors(name) context.font_fallbacks_stop_cloning() context.popcatcodes() -- context.protect() elseif trace_collecting then local filename = file.basename(fontdata[current].properties.filename or "?") report_fonts("error while applying collection %a to %a, file %a",name,current,filename) end end function collections.report(message) if trace_collecting then report_fonts("tex: %s",message) end end function collections.process(head) -- this way we keep feature processing local done = false for n in traverse_id(glyph_code,head) do local v = vectors[n.font] if v then local id = v[n.char] if id then if type(id) == "table" then local newid, newchar = id[1], id[2] if trace_collecting then report_fonts("remapping character %a in font %a to character %a in font %a",n.char,n.font,newchar,newid) end n.font, n.char = newid, newchar else if trace_collecting then report_fonts("remapping font %a to %a for character %a",n.font,id,n.char) end n.font = id end end end end return head, done end -- interface commands.fontcollectiondefine = collections.define commands.fontcollectionreset = collections.reset commands.fontcollectionprepare = collections.prepare commands.fontcollectionreport = collections.report commands.fontcollectionregister = collections.registermain commands.fontcollectionclone = collections.clonevector context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-ini.lua0000644000175000017500000002477312130411274024107 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-ini'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

Regimes take care of converting the input characters into sequences. The conversion tables are loaded at runtime.

--ldx]]-- local commands, context = commands, context local utfchar = utf.char local P, Cs, lpegmatch = lpeg.P, lpeg.Cs, lpeg.match local char, gsub, format, gmatch, byte, match = string.char, string.gsub, string.format, string.gmatch, string.byte, string.match local next = next local insert, remove, fastcopy = table.insert, table.remove, table.fastcopy local concat = table.concat local totable = string.totable local allocate = utilities.storage.allocate local sequencers = utilities.sequencers local textlineactions = resolvers.openers.helpers.textlineactions local setmetatableindex = table.setmetatableindex --[[ldx--

We will hook regime handling code into the input methods.

--ldx]]-- local trace_translating = false trackers.register("regimes.translating", function(v) trace_translating = v end) local report_loading = logs.reporter("regimes","loading") local report_translating = logs.reporter("regimes","translating") regimes = regimes or { } local regimes = regimes local mapping = allocate { utf = false } local backmapping = allocate { } -- regimes.mapping = mapping local synonyms = { -- backward compatibility list ["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", [""] = "utf", ["windows"] = "cp1252", } local currentregime = "utf" local function loadregime(mapping,regime) local name = resolvers.findfile(format("regi-%s.lua",regime)) or "" local data = name ~= "" and dofile(name) if data then vector = { } for eightbit, unicode in next, data do vector[char(eightbit)] = utfchar(unicode) end report_loading("vector %a is loaded",regime) else vector = false report_loading("vector %a is unknown",regime) end mapping[regime] = vector return vector end local function loadreverse(t,k) local t = { } for k, v in next, mapping[k] do t[v] = k end backmapping[k] = t return t end setmetatableindex(mapping, loadregime) setmetatableindex(backmapping,loadreverse) local function translate(line,regime) if line and #line > 0 then local map = mapping[regime and synonyms[regime] or regime or currentregime] if map then line = gsub(line,".",map) end end return line end -- local remappers = { } -- -- local function toregime(vector,str,default) -- toregime('8859-1',"abcde Ä","?") -- local t = backmapping[vector] -- local remapper = remappers[vector] -- if not remapper then -- remapper = utf.remapper(t) -- remappers[t] = remapper -- end -- local m = getmetatable(t) -- setmetatableindex(t, function(t,k) -- local v = default or "?" -- t[k] = v -- return v -- end) -- str = remapper(str) -- setmetatable(t,m) -- return str -- end -- -- -- much faster (but only matters when we have > 10K calls local cache = { } -- if really needed we can copy vectors and hash defaults setmetatableindex(cache, function(t,k) local v = { remappers = { } } t[k] = v return v end) local function toregime(vector,str,default) -- toregime('8859-1',"abcde Ä","?") local d = default or "?" local c = cache[vector].remappers local r = c[d] if not r then local t = fastcopy(backmapping[vector]) setmetatableindex(t, function(t,k) local v = d t[k] = v return v end) r = utf.remapper(t) c[d] = r end return r(str) end local function disable() currentregime = "utf" sequencers.disableaction(textlineactions,"regimes.process") end local function enable(regime) regime = synonyms[regime] or regime if mapping[regime] == false then disable() else currentregime = regime sequencers.enableaction(textlineactions,"regimes.process") end end regimes.toregime = toregime regimes.translate = translate regimes.enable = enable regimes.disable = disable -- The following function can be used when we want to make sure that -- utf gets passed unharmed. This is needed for modules. local level = 0 function regimes.process(str,filename,currentline,noflines,coding) if level == 0 and coding ~= "utf-8" then str = translate(str,currentregime) if trace_translating then report_translating("utf: %s",str) end end return str end local function push() level = level + 1 if trace_translating then report_translating("pushing level %s",level) end end local function pop() if level > 0 then if trace_translating then report_translating("popping level %s",level) end level = level - 1 end end regimes.push = push regimes.pop = pop sequencers.prependaction(textlineactions,"system","regimes.process") sequencers.disableaction(textlineactions,"regimes.process") -- interface: commands.enableregime = enable commands.disableregime = disable commands.pushregime = push commands.popregime = pop function commands.currentregime() context(currentregime) end local stack = { } function commands.startregime(regime) insert(stack,currentregime) if trace_translating then report_translating("start using %a",regime) end enable(regime) end function commands.stopregime() if #stack > 0 then local regime = remove(stack) if trace_translating then report_translating("stop using %a",regime) end enable(regime) end end -- Next we provide some hacks. Unfortunately we run into crappy encoded -- (read : mixed) encoded xml files that have these ë ä ö ü sequences -- instead of ë ä ö ü local patterns = { } -- function regimes.cleanup(regime,str) -- local p = patterns[regime] -- if p == nil then -- regime = regime and synonyms[regime] or regime or currentregime -- local vector = regime ~= "utf" and mapping[regime] -- if vector then -- local list = { } -- for k, uchar in next, vector do -- local stream = totable(uchar) -- for i=1,#stream do -- stream[i] = vector[stream[i]] -- end -- list[concat(stream)] = uchar -- end -- p = lpeg.append(list,nil,true) -- p = Cs((p+1)^0) -- -- lpeg.print(p) -- size 1604 -- else -- p = false -- end -- patterns[vector] = p -- end -- return p and lpegmatch(p,str) or str -- end -- -- twice as fast and much less lpeg bytecode function regimes.cleanup(regime,str) local p = patterns[regime] if p == nil then regime = regime and synonyms[regime] or regime or currentregime local vector = regime ~= "utf" and mapping[regime] if vector then local utfchars = { } local firsts = { } for k, uchar in next, vector do local stream = { } local split = totable(uchar) local nofsplits = #split if nofsplits > 1 then local first for i=1,nofsplits do local u = vector[split[i]] if not first then first = firsts[u] if not first then first = { } firsts[u] = first end end stream[i] = u end local nofstream = #stream if nofstream > 1 then first[#first+1] = concat(stream,2,nofstream) utfchars[concat(stream)] = uchar end end end p = P(false) for k, v in next, firsts do local q = P(false) for i=1,#v do q = q + P(v[i]) end p = p + P(k) * q end p = Cs(((p+1)/utfchars)^1) -- lpeg.print(p) -- size: 1042 else p = false end patterns[regime] = p end return p and lpegmatch(p,str) or str end -- local map = require("regi-cp1252") -- local old = [[test ë ä ö ü crap]] -- local new = correctencoding(map,old) -- -- print(old,new) -- obsolete: -- -- function regimes.setsynonym(synonym,target) -- synonyms[synonym] = target -- end -- -- function regimes.truename(regime) -- return regime and synonyms[regime] or regime or currentregime -- end -- -- commands.setregimesynonym = regimes.setsynonym -- -- function commands.trueregimename(regime) -- context(regimes.truename(regime)) -- end -- -- function regimes.load(regime) -- return mapping[synonyms[regime] or regime] -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-adj.mkiv0000644000175000017500000000304511754241457024257 0ustar norbertnorbert%D \module %D [ file=spac-adj, % moved from spac-par.mkiv %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Paragraphs, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Adjustments} \unprotect % Very nasty but needed for margin stuff inside colored % paragraphs. Obsolete anyway. \registerctxluafile{spac-adj}{1.001} \definesystemattribute [graphicvadjust] [public] \unexpanded\def\enablegraphicvadjust {\ctxlua{nodes.tasks.enableaction("finalizers","nodes.handlers.graphicvadjust")}% \glet\enablegraphicvadjust\relax} \unexpanded\def\graphicvadjust % currently not enabled ... nasty bidi handling {\enablegraphicvadjust % and no longer needed anyway \dowithnextboxcontentcs\forgetall\spac_vadjust_graphic_finish\vbox} \def\spac_vadjust_graphic_finish {\vadjust {\vbox attr \graphicvadjustattribute \plusone {\unvbox\nextbox % corrects for one line paragraphs \nointerlineskip \kern-\struttotal \nointerlineskip \verticalstrut}}} \unexpanded\def\fakedvadjust {\dowithnextboxcs\spac_vadjust_faked_finish\vtop} \def\spac_vadjust_faked_finish {\setbox\nextbox\hbox{\llap{\lower\strutdepth\box\nextbox}}% \smashedbox\nextbox} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-com.mkiv0000644000175000017500000000106011754241457024254 0ustar norbertnorbert%D \module %D [ file=cldf-com, %D version=2010.10.19,, %D title=\CONTEXT\ \LUA\ Document Functions, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Documents / Functions} \registerctxluafile{cldf-com}{1.001} \registerctxluafile{cldf-ver}{1.001} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-acc.mkii0000644000175000017500000001503111754241457024226 0ustar norbertnorbert%D \module %D [ file=enco-acc, %D version=2000.20.12, % split from base file %D title=\CONTEXT\ Encoding Macros, %D subtitle=Composed Characters Commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Although it is technically possible to redefine the commands %D that are responsible for building composed characters, this %D is seldom needed, since they map onto named glyphs. The %D meaning of these names glyphs may change, although their %D visual appearance seldom will. \startencoding[default] \defineaccent ^ A {\Acircumflex} \defineaccent ^ a {\acircumflex} \defineaccent ^ C {\Ccircumflex} \defineaccent ^ c {\ccircumflex} \defineaccent ^ E {\Ecircumflex} \defineaccent ^ e {\ecircumflex} \defineaccent ^ G {\Gcircumflex} \defineaccent ^ g {\gcircumflex} \defineaccent ^ H {\Hcircumflex} \defineaccent ^ h {\hcircumflex} \defineaccent ^ I {\Icircumflex} \defineaccent ^ i {\icircumflex} \defineaccent ^ {\i} {\icircumflex} \defineaccent ^ J {\Jcircumflex} \defineaccent ^ j {\jcircumflex} \defineaccent ^ {\j} {\jcircumflex} \defineaccent ^ O {\Ocircumflex} \defineaccent ^ o {\ocircumflex} \defineaccent ^ S {\Scircumflex} \defineaccent ^ s {\scircumflex} \defineaccent ^ U {\Ucircumflex} \defineaccent ^ u {\ucircumflex} \defineaccent ^ W {\Wcircumflex} \defineaccent ^ w {\wcircumflex} \defineaccent ^ Y {\Ycircumflex} \defineaccent ^ y {\ycircumflex} \defineaccent ` A {\Agrave} \defineaccent ` a {\agrave} \defineaccent ` E {\Egrave} \defineaccent ` e {\egrave} \defineaccent ` I {\Igrave} \defineaccent ` i {\igrave} \defineaccent ` {\i} {\igrave} \defineaccent ` O {\Ograve} \defineaccent ` o {\ograve} \defineaccent ` U {\Ugrave} \defineaccent ` u {\ugrave} \defineaccent ` Y {\Ygrave} \defineaccent ` y {\ygrave} \defineaccent ~ A {\Atilde} \defineaccent ~ a {\atilde} \defineaccent ~ I {\Itilde} \defineaccent ~ i {\itilde} \defineaccent ~ {\i} {\itilde} \defineaccent ~ O {\Otilde} \defineaccent ~ o {\otilde} \defineaccent ~ U {\Utilde} \defineaccent ~ u {\utilde} \defineaccent " A {\Adiaeresis} \defineaccent " a {\adiaeresis} \defineaccent " E {\Ediaeresis} \defineaccent " e {\ediaeresis} \defineaccent " I {\Idiaeresis} \defineaccent " i {\idiaeresis} \defineaccent " {\i} {\idiaeresis} \defineaccent " O {\Odiaeresis} \defineaccent " o {\odiaeresis} \defineaccent " U {\Udiaeresis} \defineaccent " u {\udiaeresis} \defineaccent " Y {\Ydiaeresis} \defineaccent " y {\ydiaeresis} \defineaccent ' A {\Aacute} \defineaccent ' a {\aacute} \defineaccent ' C {\Cacute} \defineaccent ' c {\cacute} \defineaccent ' E {\Eacute} \defineaccent ' e {\eacute} \defineaccent ' I {\Iacute} \defineaccent ' i {\iacute} \defineaccent ' {\i} {\iacute} \defineaccent ' L {\Lacute} \defineaccent ' l {\lacute} \defineaccent ' N {\Nacute} \defineaccent ' n {\nacute} \defineaccent ' O {\Oacute} \defineaccent ' o {\oacute} \defineaccent ' R {\Racute} \defineaccent ' r {\racute} \defineaccent ' S {\Sacute} \defineaccent ' s {\sacute} \defineaccent ' U {\Uacute} \defineaccent ' u {\uacute} \defineaccent ' Y {\Yacute} \defineaccent ' y {\yacute} \defineaccent ' Z {\Zacute} \defineaccent ' z {\zacute} \defineaccent . C {\Cdotaccent} \defineaccent . c {\cdotaccent} \defineaccent . E {\Edotaccent} \defineaccent . e {\edotaccent} \defineaccent . G {\Gdotaccent} \defineaccent . g {\gdotaccent} \defineaccent . I {\Idotaccent} \defineaccent . i {\idotaccent} \defineaccent . {\i} {\idotaccent} \defineaccent . Z {\Zdotaccent} \defineaccent . z {\zdotaccent} \defineaccent = A {\Amacron} \defineaccent = a {\amacron} \defineaccent = E {\Emacron} \defineaccent = e {\emacron} \defineaccent = I {\Imacron} \defineaccent = i {\imacron} \defineaccent = {\i} {\imacron} \defineaccent = O {\Omacron} \defineaccent = o {\omacron} \defineaccent = U {\Umacron} \defineaccent = u {\umacron} \defineaccent c C {\Ccedilla} \defineaccent c c {\ccedilla} \defineaccent c K {\Kcedilla} \defineaccent c k {\kcedilla} \defineaccent c L {\Lcedilla} \defineaccent c l {\lcedilla} \defineaccent c N {\Ncedilla} \defineaccent c n {\ncedilla} \defineaccent c R {\Rcedilla} \defineaccent c r {\rcedilla} \defineaccent c S {\Scedilla} \defineaccent c s {\scedilla} \defineaccent c T {\Tcedilla} \defineaccent c t {\tcedilla} \defineaccent H O {\Ohungarumlaut} \defineaccent H o {\ohungarumlaut} \defineaccent H u {\uhungarumlaut} \defineaccent H U {\Uhungarumlaut} \defineaccent k A {\Aogonek} \defineaccent k a {\aogonek} \defineaccent k E {\Eogonek} \defineaccent k e {\eogonek} \defineaccent k I {\Iogonek} \defineaccent k i {\iogonek} \defineaccent k U {\Uogonek} \defineaccent k u {\uogonek} \defineaccent r A {\Aring} \defineaccent r a {\aring} \defineaccent r U {\Uring} \defineaccent r u {\uring} \defineaccent u A {\Abreve} \defineaccent u a {\abreve} \defineaccent u E {\Ebreve} \defineaccent u e {\ebreve} \defineaccent u G {\Gbreve} \defineaccent u g {\gbreve} \defineaccent u I {\Ibreve} \defineaccent u i {\ibreve} \defineaccent u {\i} {\ibreve} \defineaccent u O {\Obreve} \defineaccent u o {\obreve} \defineaccent u U {\Ubreve} \defineaccent u u {\ubreve} \defineaccent v C {\Ccaron} \defineaccent v c {\ccaron} \defineaccent v D {\Dcaron} \defineaccent v d {\dcaron} \defineaccent v E {\Ecaron} \defineaccent v e {\ecaron} \defineaccent v L {\Lcaron} \defineaccent v l {\lcaron} \defineaccent v N {\Ncaron} \defineaccent v n {\ncaron} \defineaccent v R {\Rcaron} \defineaccent v r {\rcaron} \defineaccent v S {\Scaron} \defineaccent v s {\scaron} \defineaccent v T {\Tcaron} \defineaccent v t {\tcaron} \defineaccent v Z {\Zcaron} \defineaccent v z {\zcaron} \stopencoding \startencoding[default] % vietnamese: if needed, \useencoding[enco-vna] \stopencoding % For Tobias Burnus, who wants: % % \starttypen % \setupinteraction[state=start] % \setupinteractionscreen[option=bookmark] % \placebookmarks[chapter] % % \starttext \chapter{F\"ur Na\"ive und Na\"\i ve} \stoptext % \stoptypen \startencoding[default] \defineaccent " {\i} {\idiaeresis} \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-ghz.mkii0000644000175000017500000005415011754241457024332 0ustar norbertnorbert%D \module %D [ file=type-ghz, %D version=2005.06.07, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Hermann Zapf's Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \usetypescriptfile[type-ghz] % % \definetypeface[optima] [ss][sans] [optima-nova] [default] % \definetypeface[palatino][rm][serif][palatino-nova][default] % \definetypeface[aldus] [rm][serif][aldus-nova] [default] % % \starttext % \setupbodyfont[optima] \input zapf \blank % \setupbodyfont[palatino] \input zapf \blank % \setupbodyfont[aldus] \input zapf \blank % \stoptext \starttypescriptcollection[zapf collection] % zapfino \starttypescript [serif,handwriting] [zapfino] [texnansi,ec,8r] % todo: handwriting \definefontsynonym [ZapfinoOne] [\typescriptthree-lt54223] [encoding=\typescriptthree] \definefontsynonym [ZapfinoTwo] [\typescriptthree-lt54224] [encoding=\typescriptthree] \definefontsynonym [ZapfinoThree] [\typescriptthree-lt54225] [encoding=\typescriptthree] \definefontsynonym [ZapfinoFour] [\typescriptthree-lt54226] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-zapfino.map] \stoptypescript % \starttypescript [handwriting] [zapfino-1] \definefontsynonym [Handwriting] [ZapfinoOne] \stoptypescript % \starttypescript [handwriting] [zapfino-2] \definefontsynonym [Handwriting] [ZapfinoTwo] \stoptypescript % \starttypescript [handwriting] [zapfino-3] \definefontsynonym [Handwriting] [ZapfinoThree] \stoptypescript % \starttypescript [handwriting] [zapfino-4] \definefontsynonym [Handwriting] [ZapfinoFour] \stoptypescript % optima \starttypescript [sans] [optima] [name] \definefontsynonym [Sans] [OptimaLT] \definefontsynonym [SansItalic] [OptimaLT-Italic] \definefontsynonym [SansBold] [OptimaLT-Bold] \definefontsynonym [SansBoldItalic] [OptimaLT-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \definefontsynonym [SansCaps] [Sans] \stoptypescript \starttypescript [sans] [optima,optima-nova] [texnansi,ec,8r] \definefontsynonym [OptimaLT] [\typescriptthree-lte50019] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-Italic] [\typescriptthree-lte52401] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-Bold] [\typescriptthree-lte50021] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-BoldItalic] [\typescriptthree-lte54379] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-Medium] [\typescriptthree-lte53505] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-MediumItalic] [\typescriptthree-lte53506] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-DemiBold] [\typescriptthree-lte53507] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-DemiBoldItalic] [\typescriptthree-lte53508] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-Black] [\typescriptthree-lte53509] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-BlackItalic] [\typescriptthree-lte53510] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-ExtraBlack] [\typescriptthree-lte53511] [encoding=\typescriptthree] \definefontsynonym [OptimaLT-ExtraBlackItalic] [\typescriptthree-lte53512] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-optima.map] \stoptypescript \starttypescript [optima] [texnansi,ec,qx] \definetypeface[optima][ss][sans] [optima-nova][default][encoding=\typescripttwo] \definetypeface[optima][rm][serif][palatino] [default][encoding=\typescripttwo] \definetypeface[optima][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1] \definetypeface[optima][mm][math] [palatino] [default][encoding=\typescripttwo] \quittypescriptscanning \stoptypescript % optima nova % see antykwa, we could define variants for light and osf \starttypescript [sans] [optima-nova] [name] \definefontsynonym [Sans] [OptimaNovaLT-Regular] \definefontsynonym [SansItalic] [OptimaNovaLT-Italic] \definefontsynonym [SansBold] [OptimaNovaLT-Bold] \definefontsynonym [SansBoldItalic] [OptimaNovaLT-BoldItalic] \definefontsynonym [SansSlanted] [OptimaNovaLT-Italic] \definefontsynonym [SansBoldSlanted] [OptimaNovaLT-BoldItalic] \definefontsynonym [SansCaps] [OptimaNovaLT-RegularSC] \definefontvariant [Serif][osf][OsF] \definefontvariant [Serif][sc][Caps] \definefontsynonym [SansOsF] [OptimaNovaLT-RegularOsF] \definefontsynonym [SansItalicOsF] [OptimaNovaLT-ItalicOsF] \definefontsynonym [SansBoldOsF] [OptimaNovaLT-BoldOsF] \definefontsynonym [SansBoldItalicOsF] [OptimaNovaLT-BoldItalicOsF] \definefontsynonym [SansSlantedOsF] [OptimaNovaLT-ItalicOsF] \definefontsynonym [SansBoldSlantedOsF] [OptimaNovaLT-BoldItalicOsF] \definefontsynonym [SansCapsOsF] [OptimaNovaLT-RegularSC] \definefontsynonym [SansCaps] [OptimaNovaLT-RegularSC] \definefontsynonym [SansItalicCaps] [OptimaNovaLT-ItalicSC ] \definefontsynonym [SansBoldCaps] [OptimaNovaLT-BoldSC] \definefontsynonym [SansBoldItalicCaps] [OptimaNovaLT-BoldItalicSC] \definefontsynonym [SansSlantedCaps] [OptimaNovaLT-ItalicSC] \definefontsynonym [SansBoldSlantedCaps] [OptimaNovaLT-BoldItalicSC] \definefontsynonym [SansCapsCaps] [OptimaNovaLT-RegularSC] \stoptypescript \starttypescript [sans] [optima-nova-os] [name] \definefontsynonym [Sans] [OptimaNovaLT-RegularOsF] \definefontsynonym [SansItalic] [OptimaNovaLT-ItalicOsF] \definefontsynonym [SansBold] [OptimaNovaLT-BoldOsF] \definefontsynonym [SansBoldItalic] [OptimaNovaLT-BoldItalicOsF] \definefontsynonym [SansSlanted] [OptimaNovaLT-ItalicOsF] \definefontsynonym [SansBoldSlanted] [OptimaNovaLT-BoldItalicOsF] \definefontsynonym [SansCaps] [OptimaNovaLT-RegularSC] \stoptypescript \starttypescript [sans] [optima-nova-light] [name] % may change \definefontsynonym [Sans] [OptimaNovaLT-Light] \definefontsynonym [SansItalic] [OptimaNovaLT-LightItalic] \definefontsynonym [SansBold] [OptimaNovaLT-Medium] \definefontsynonym [SansBoldItalic] [OptimaNovaLT-MediumItalic] \definefontsynonym [SansSlanted] [OptimaNovaLT-LightItalic] \definefontsynonym [SansBoldSlanted] [OptimaNovaLT-MediumItalic] \definefontsynonym [SansCaps] [OptimaNovaLT-LightSC] \stoptypescript \starttypescript [sans] [optima-nova-medium] [name] % may change \definefontsynonym [Sans] [OptimaNovaLT-Medium] \definefontsynonym [SansItalic] [OptimaNovaLT-MediumItalic] \definefontsynonym [SansBold] [OptimaNovaLT-Heavy] \definefontsynonym [SansBoldItalic] [OptimaNovaLT-HeavyItalic] \definefontsynonym [SansSlanted] [OptimaNovaLT-MediumItalic] \definefontsynonym [SansBoldSlanted] [OptimaNovaLT-HeavyItalic] \definefontsynonym [SansCaps] [OptimaNovaLT-MediumSC] \stoptypescript \starttypescript [sans] [optima-nova,optima-nova-light,optima-nova-medium,optima-nova-os] [texnansi,ec,8r] \definefontsynonym[OptimaNovaLT-Light] [\typescriptthree-lt55476][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-LightSC] [\typescriptthree-lt55477][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-LightOsF] [\typescriptthree-lt55478][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-LightItalic] [\typescriptthree-lt55479][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-LightItalicSC] [\typescriptthree-lt55480][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-LightItalicOsF] [\typescriptthree-lt55481][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-LightCond] [\typescriptthree-lt55482][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Regular] [\typescriptthree-lt55483][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-RegularSC] [\typescriptthree-lt55484][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-RegularOsF] [\typescriptthree-lt55485][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Italic] [\typescriptthree-lt55486][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-ItalicSC] [\typescriptthree-lt55487][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-ItalicOsF] [\typescriptthree-lt55488][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Condensed] [\typescriptthree-lt55489][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Medium] [\typescriptthree-lt55490][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-MediumSC] [\typescriptthree-lt55491][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-MediumOsF] [\typescriptthree-lt55492][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-MediumItalic] [\typescriptthree-lt55493][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-MediumItalicSC] [\typescriptthree-lt55494][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-MediumItalicOsF][\typescriptthree-lt55495][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-MediumCond] [\typescriptthree-lt55496][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-TitlingInitials][\typescriptthree-lt55497][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Demi] [\typescriptthree-lt55498][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-DemiSC] [\typescriptthree-lt55499][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-DemiOsF] [\typescriptthree-lt55500][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-DemiItalic] [\typescriptthree-lt55501][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-DemiItalicSC] [\typescriptthree-lt55502][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-DemiItalicOsF] [\typescriptthree-lt55503][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-DemiCond] [\typescriptthree-lt55504][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Bold] [\typescriptthree-lt55505][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BoldSC] [\typescriptthree-lt55506][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BoldOsF] [\typescriptthree-lt55507][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BoldItalic] [\typescriptthree-lt55508][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BoldItalicSC] [\typescriptthree-lt55509][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BoldItalicOsF] [\typescriptthree-lt55510][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BoldCond] [\typescriptthree-lt55511][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Heavy] [\typescriptthree-lt55512][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-HeavyItalic] [\typescriptthree-lt55513][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-Black] [\typescriptthree-lt55514][encoding=\typescriptthree] \definefontsynonym[OptimaNovaLT-BlackItalic] [\typescriptthree-lt55515][encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-optima-nova.map] \stoptypescript \starttypescript[optima-nova][texnansi,ec] % will change to more narrow tt \definetypeface[optima][ss][sans][optima-nova] [default][encoding=\typescripttwo] \definetypeface[optima][rm][sans][optima-nova] [default][encoding=\typescripttwo] \definetypeface[optima][tt][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.1] \definetypeface[optima][mm][math][latin-modern][default][encoding=\typescripttwo,rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript[optima-nova-os][texnansi,ec] % will change to more narrow tt \definetypeface[optima-os][ss][sans][optima-nova-os] [default][encoding=\typescripttwo] \definetypeface[optima-os][rm][sans][optima-nova-os] [default][encoding=\typescripttwo] \definetypeface[optima-os][tt][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \definetypeface[optima-os][mm][math][latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \quittypescriptscanning \stoptypescript % palatino \starttypescript [serif] [palatino] [name] \definefontsynonym [Serif] [PalatinoLT-Roman] \definefontsynonym [SerifItalic] [PalatinoLT-Italic] \definefontsynonym [SerifBold] [PalatinoLT-Bold] \definefontsynonym [SerifBoldItalic] [PalatinoLT-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [PalatinoSC] \stoptypescript \starttypescript [serif] [palatino] [texnansi,ec,8r] \definefontsynonym[PalatinoLT-Roman] [\typescriptthree-lte50001] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-Italic] [\typescriptthree-lte50002] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-Bold] [\typescriptthree-lte50003] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-BoldItalic] [\typescriptthree-lte50004] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-Light] [\typescriptthree-lte52168] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-LightItalic] [\typescriptthree-lte52169] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-Medium] [\typescriptthree-lte52170] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-MediumItalic] [\typescriptthree-lte52171] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-Black] [\typescriptthree-lte52172] [encoding=\typescriptthree] \definefontsynonym[PalatinoLT-BlackItalic] [\typescriptthree-lte52173] [encoding=\typescriptthree] \definefontsynonym[Palatino-BoldItalicOsF] [\typescriptthree-pobio] [encoding=\typescriptthree] \definefontsynonym[Palatino-BoldOsF] [\typescriptthree-pobos] [encoding=\typescriptthree] \definefontsynonym[Palatino-ItalicOsF] [\typescriptthree-poios] [encoding=\typescriptthree] \definefontsynonym[PalatinoSC] [\typescriptthree-posc] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-palatino.map] \stoptypescript % palatino nova \starttypescript [serif] [palatino-nova] [name] \definefontsynonym [Serif] [PalatinoNova-Regular] \definefontsynonym [SerifItalic] [PalatinoNova-Italic] \definefontsynonym [SerifBold] [PalatinoNova-Bold] \definefontsynonym [SerifBoldItalic] [PalatinoNova-BoldItalic] \definefontsynonym [SerifSlanted] [PalatinoNova-Italic] \definefontsynonym [SerifBoldSlanted] [PalatinoNova-BoldItalic] \definefontsynonym [SerifCaps] [PalatinoNova-RegularSC] \definefontvariant [Serif][sc][Caps] \definefontsynonym [SerifCaps] [PalatinoNova-RegularSC] \definefontsynonym [SerifItalicCaps] [PalatinoNova-ItalicSC] \definefontsynonym [SerifBoldCaps] [PalatinoNova-BoldSC] \definefontsynonym [SerifBoldItalicCaps] [PalatinoNova-BoldItalicSC] \definefontsynonym [SerifSlantedCaps] [PalatinoNova-ItalicSC] \definefontsynonym [SerifBoldSlantedCaps] [PalatinoNova-BoldItalicSC] \definefontsynonym [SerifCapsCaps] [PalatinoNova-RegularSC] \stoptypescript \starttypescript [serif] [palatino-nova-light] [name] % may change \definefontsynonym [Serif] [PalatinoNova-Light] \definefontsynonym [SerifItalic] [PalatinoNova-LightItalic] \definefontsynonym [SerifBold] [PalatinoNova-Regular] \definefontsynonym [SerifBoldItalic] [PalatinoNova-Italic] \definefontsynonym [SerifSlanted] [PalatinoNova-Regular] \definefontsynonym [SerifBoldSlanted] [PalatinoNova-Italic] \definefontsynonym [SerifCaps] [PalatinoNova-LightSC] \stoptypescript \starttypescript [serif] [palatino-nova-medium] [name] % may change \definefontsynonym [Serif] [PalatinoNova-Medium] \definefontsynonym [SerifItalic] [PalatinoNova-MediumItalic] \definefontsynonym [SerifBold] [PalatinoNova-Bold] \definefontsynonym [SerifBoldItalic] [PalatinoNova-BoldItalic] \definefontsynonym [SerifSlanted] [PalatinoNova-Bold] \definefontsynonym [SerifBoldSlanted] [PalatinoNova-BoldItalic] \definefontsynonym [SerifCaps] [PalatinoNova-MediumSC] \stoptypescript \starttypescript [serif] [palatino-nova,palatino-nova-light,palatino-nova-medium] [texnansi,ec,8r] \definefontsynonym[PalatinoNova-Light] [\typescriptthree-PalatinoNova-Light] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-LightItalic] [\typescriptthree-PalatinoNova-LightItalic] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-Regular] [\typescriptthree-PalatinoNova-Regular] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-Italic] [\typescriptthree-PalatinoNova-Italic] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-Medium] [\typescriptthree-PalatinoNova-Medium] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-MediumItalic][\typescriptthree-PalatinoNova-MediumItalic][encoding=\typescriptthree] \definefontsynonym[PalatinoNova-Bold] [\typescriptthree-PalatinoNova-Bold] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-BoldItalic] [\typescriptthree-PalatinoNova-BoldItalic] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-Imperial] [\typescriptthree-PalatinoNova-Imperial] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-Titling] [\typescriptthree-PalatinoNova-Titling] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-LightSC] [\typescriptthree-sc-PalatinoNova-Light] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-LightItalicSC] [\typescriptthree-sc-PalatinoNova-LightItalic] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-RegularSC] [\typescriptthree-sc-PalatinoNova-Regular] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-ItalicSC] [\typescriptthree-sc-PalatinoNova-Italic] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-MediumSC] [\typescriptthree-sc-PalatinoNova-Medium] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-MediumItalicSC][\typescriptthree-sc-PalatinoNova-MediumItalic][encoding=\typescriptthree] \definefontsynonym[PalatinoNova-BoldSC] [\typescriptthree-sc-PalatinoNova-Bold] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-BoldItalicSC] [\typescriptthree-sc-PalatinoNova-BoldItalic] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-ImperialSC] [\typescriptthree-sc-PalatinoNova-Imperial] [encoding=\typescriptthree] \definefontsynonym[PalatinoNova-TitlingSC] [\typescriptthree-sc-PalatinoNova-Titling] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-palatino-nova.map] \loadmapfile[\typescriptthree-sc-linotype-palatino-nova.map] \stoptypescript % aldusnova \starttypescript [serif] [aldus-nova] [name] \definefontsynonym [Serif] [AldusNova-Book] \definefontsynonym [SerifItalic] [AldusNova-BookItalic] \definefontsynonym [SerifBold] [AldusNova-Bold] \definefontsynonym [SerifBoldItalic] [AldusNova-BoldItalic] \definefontsynonym [SerifSlanted] [AldusNova-BookItalic] \definefontsynonym [SerifBoldSlanted] [AldusNova-BoldItalic] \definefontsynonym [SerifCaps] [AldusNova-BookSC] \definefontvariant [Serif][sc][Caps] \definefontsynonym [SerifCaps] [AldusNova-BookSC] \definefontsynonym [SerifItalicCaps] [AldusNova-BookItalicSC] \definefontsynonym [SerifBoldCaps] [AldusNova-BoldSC] \definefontsynonym [SerifBoldItalicCaps] [AldusNova-BoldItalicSC] \definefontsynonym [SerifSlantedCaps] [AldusNova-BookItalicSC] \definefontsynonym [SerifBoldSlantedCaps] [AldusNova-BoldItalicSC] \definefontsynonym [SerifCapsCaps] [AldusNova-BookSC] \stoptypescript \starttypescript [serif] [aldus-nova] [texnansi,ec,8r] \definefontsynonym[AldusNova-Book] [\typescriptthree-AldusNova-Book] [encoding=\typescriptthree] \definefontsynonym[AldusNova-BookItalic] [\typescriptthree-AldusNova-BookItalic] [encoding=\typescriptthree] \definefontsynonym[AldusNova-Bold] [\typescriptthree-AldusNova-Bold] [encoding=\typescriptthree] \definefontsynonym[AldusNova-BoldItalic] [\typescriptthree-AldusNova-BoldItalic] [encoding=\typescriptthree] \definefontsynonym[AldusNova-BookSC] [\typescriptthree-sc-AldusNova-Book] [encoding=\typescriptthree] \definefontsynonym[AldusNova-BookItalicSC] [\typescriptthree-sc-AldusNova-BookItalic] [encoding=\typescriptthree] \definefontsynonym[AldusNova-BoldSC] [\typescriptthree-sc-AldusNova-Bold] [encoding=\typescriptthree] \definefontsynonym[AldusNova-BoldItalicSC] [\typescriptthree-sc-AldusNova-BoldItalic] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-aldus-nova.map] \loadmapfile[\typescriptthree-sc-linotype-aldus-nova.map] \stoptypescript % melior \starttypescript [serif] [melior] [name] \definefontsynonym [MeliorLT-Roman] [MeliorLT] \definefontsynonym [Serif] [MeliorLT-Roman] \definefontsynonym [SerifItalic] [MeliorLT-Italic] \definefontsynonym [SerifBold] [MeliorLT-Bold] \definefontsynonym [SerifBoldItalic] [MeliorLT-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [Serif] \stoptypescript \starttypescript [serif] [melior] [texnansi,ec,8r] \definefontsynonym [MeliorLT] [texnansi-lte50062] [encoding=\typescriptthree] \definefontsynonym [MeliorLT-Italic] [texnansi-lte50063] [encoding=\typescriptthree] \definefontsynonym [MeliorLT-Bold] [texnansi-lte50064] [encoding=\typescriptthree] \definefontsynonym [MeliorLT-BoldItalic] [texnansi-lte50065] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-linotype-melior.map] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context.rme0000644000175000017500000000440112130411274024054 0ustar norbertnorbertSome Basic information ---------------------- The first public versions of ConTeXt date from around 1996. There are currently two versions of ConTeXt: MkII: to be used with pdfTeX and XeTeX MkIV: to be used with LuaTeX In 2008 at the second ConTeXt conference the decision was made to freeze MkII. This means that only bugs are fixed and apart from an occasional addition no active development takes place. This is no real problem as the engines don't change much either. Early 2011 the code base between MkII and MkIV got split completely and there is no shared code any longer, apart from some styles and modules. From the perspective of ConteXt we now consider XeTeX to be obsolete although we will keep supporting it in MkII. As pdftex is still used in older workflows we will support that as long as it's around. The main files context.mkii and context.mkiv are normally not used directly but instead we use the interface specific formats: cont-cs czech cont-de german cont-en english us cont-fr french cont-gb english uk cont-it italian cont-nl dutch cont-pe persian cont-ro romanian A MkII format is made with: texexec --make en nl metafun A MkIV format is made with: context --make en nl As MetaPost is part of LuaTeX there is no need for a special MetaFun format. Also, when you update ConTeXt, a new format will be generated automatically. You can preset commands etc in the file: cont-sys.mkii a system file loaded at runtime cont-sys.mkiv a system file loaded at runtime In the case of MkII, there is a fallback on cont-sys.tex (backward compatibility). If no file is found the file cont-sys.rme is loaded (only for MkII). For MkIV this file is normally not needed. For questions and remarks on ConTeXt, one can subscribe to the list: ntg-context@ntg.nl by sending the message subscribe ntg-context to the list server: majordomo@ntg.nl A good place to get information is the ConTeXt wiki: contextgarden.net One can also find more info at: www.pragma-ade.com or at the mirror sites mentioned there. Don't hesitate to ask questions. ConTeXt can do a lot, but the manuals always lag behind and can be incomplete. ------------------------- Hans Hagen, pragma @ wxs . nl context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-grp.mkiv0000644000175000017500000001147311754241457024323 0ustar norbertnorbert%D \module %D [ file=colo-grp, %D version=2011.12.27, % moved from colo-ini %D title=\CONTEXT\ Color Macros, %D subtitle=Groups, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Regular colors and palets are used most, contrary to groups %D which is why we define their support in a separate module. \writestatus{loading}{ConTeXt Color Macros / Groups} \unprotect %D \macros %D {definecolorgroup} %D %D The naming of the colors in this palet suggests some %D ordening, which in turn is suported by color grouping. %D %D \starttyping %D \definecolorgroup %D [red] %D [1.00:0.90:0.90, %D 1.00:0.80:0.80, %D 1.00:0.70:0.70, %D 1.00:0.55:0.55, %D 1.00:0.40:0.40, %D 1.00:0.25:0.25, %D 1.00:0.15:0.15, %D 0.90:0.00:0.00] %D \stoptyping %D %D In such a color group colors are numbered from~$1$ to~$n$. %D %D \showsetup{definecolorgroup} %D %D This kind of specification is not only more compact than %D defining each color separate, it also loads faster and takes %D less bytes. \installcorenamespace{colorgroup} \installcorenamespace{colorgroupsetter} \newcount\c_colo_groups_n % scratch counter \unexpanded\def\definecolorgroup % sort of obsolete, just use palets directly {\dotripleempty\colo_groups_define} \def\colo_groups_define {\ifthirdargument \expandafter\colo_groups_define_normal \else \expandafter\colo_groups_define_checked \fi} \def\colo_groups_define_normal[#1][#2][#3]% {\c_colo_groups_n\zerocount \processcommalist[#3]{\colo_groups_define_entry{#1}{#2}}} \def\colo_groups_define_checked[#1][#2][#3]% {\doifinstringelse{:}{#2} {\colo_groups_define_normal[#1][\v!rgb][#2]} {\doloop % inherited {\ifcsname\??colorgroup#2:\recurselevel\endcsname \setevalue{\??colorgroup#1:\recurselevel}{\csname\??colorgroup#2:\recurselevel\endcsname}% \else \exitloop \fi}}} \def\colo_groups_define_entry#1#2#3% name mode specification {\advance\c_colo_groups_n\plusone \csname\??colorgroupsetter\ifcsname\??colorgroupsetter#2\endcsname#2\else\s!rgb\fi\endcsname[#1:\the\c_colo_groups_n][#3:0:0:0:0]} \setvalue{\??colorgroupsetter\s!gray}[#1][#2:#3]{\definecolor[#1][s=#2]} \setvalue{\??colorgroupsetter\s!rgb }[#1][#2:#3:#4:#5]{\definecolor[#1][r=#2,g=#3,b=#4]} \setvalue{\??colorgroupsetter\s!cmyk}[#1][#2:#3:#4:#5:#6]{\definecolor[#1][c=#2,m=#3=,y=#4,k=#5]} \setvalue{\??colorgroupsetter\s!spot}[#1][#2:#3:#4]{\definespotcolor[#1][#2][p=#3]} %D \macros %D {showcolorgroup} %D %D We can show the group by: %D %D \startbuffer %D \showcolorgroup [blue] [horizontal,name,number,value] %D \stopbuffer %D %D \typebuffer %D %D or in color: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D which uses: %D %D \showsetup{showcolorgroup} \fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run} %D There are ten predefined color groups, like %D \color[green]{\em groen}, \color[red]{\em rood}, %D \color[blue]{\em blauw}, \color[cyan]{\em cyaan}, %D \color[magenta]{\em magenta} and \color[yellow]{\em geel}. %D %D \startlinecorrection %D \hbox to \hsize %D {\hss %D \showcolorgroup [red] [vertical,name,number]\hss %D \showcolorgroup [green] [vertical,name]\hss %D \showcolorgroup [blue] [vertical,name]\hss %D \showcolorgroup [cyan] [vertical,name]\hss %D \showcolorgroup [magenta][vertical,name]\hss %D \showcolorgroup [yellow] [vertical,name]\hss} %D \stoplinecorrection %D %D These groups are used to define palets {\em alfa} upto {\em %D zeta}. As long as we don't use colors from the same row, we %D get ourselves distinctive palets. By activating such a palet %D one gains access to its members {\em top} to {\em charm} (of %D course one should use more suitable names than these). %D %D \startlinecorrection %D \hbox to \hsize %D {\showpalet [alfa] [vertical,name,number]\hss %D \showpalet [beta] [vertical,name]\hss %D \showpalet [gamma] [vertical,name]\hss %D \showpalet [delta] [vertical,name]\hss %D \showpalet [epsilon] [vertical,name]\hss %D \showpalet [zeta] [vertical,name]} %D \stoplinecorrection %D %D By using the keyword \type {value} the individual color %D components are shown too. When printed in color, these %D showcases show both the colors and the gray value. %D \macros %D {comparecolorgroup} %D %D The similar command: %D %D \startbuffer %D \comparecolorgroup [blue] %D \stopbuffer %D %D \typebuffer %D %D shows color groups: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D this commands are defined as: %D %D \showsetup{comparecolorgroup} \fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-fld.mkii0000644000175000017500000003242711754241457024252 0ustar norbertnorbert%D \module %D [ file=java-fld, %D version=1998.05.20, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Field Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % will be simplified, since we now parse functions % nu nog alles geladen, moet dus anders \startJSpreamble {Sanitize_TeX_Input} used later function Sanitized_TeX_String (value) { var v = value ; v = v.replace( /\\\\oe/g,"\\234") ; v = v.replace( /\\\\<>/g,"\\273") ; v = v.replace( /\\\\`A/g,"\\300") ; v = v.replace( /\\\\'A/g,"\\301") ; v = v.replace( /\\\\^A/g,"\\302") ; v = v.replace( /\\\\~A/g,"\\303") ; v = v.replace( /\\\\"A/g,"\\304") ; v = v.replace( /\\\\oA/g,"\\305") ; v = v.replace( /\\\\AE/g,"\\306") ; v = v.replace( /\\\\,C/g,"\\307") ; v = v.replace( /\\\\`E/g,"\\310") ; v = v.replace( /\\\\'E/g,"\\311") ; v = v.replace( /\\\\^E/g,"\\312") ; v = v.replace( /\\\\"E/g,"\\313") ; v = v.replace( /\\\\`I/g,"\\314") ; v = v.replace( /\\\\'I/g,"\\315") ; v = v.replace( /\\\\^I/g,"\\316") ; v = v.replace( /\\\\"I/g,"\\317") ; v = v.replace( /\\\\~N/g,"\\321") ; v = v.replace( /\\\\`O/g,"\\322") ; v = v.replace( /\\\\'O/g,"\\323") ; v = v.replace( /\\\\^O/g,"\\324") ; v = v.replace( /\\\\~O/g,"\\325") ; v = v.replace( /\\\\"O/g,"\\326") ; v = v.replace( /\\\\`U/g,"\\331") ; v = v.replace( /\\\\'U/g,"\\332") ; v = v.replace( /\\\\^U/g,"\\333") ; v = v.replace( /\\\\"U/g,"\\334") ; v = v.replace( /\\\\'Y/g,"\\335") ; v = v.replace( /\\\\ss/g,"\\337") ; v = v.replace( /\\\\`a/g,"\\340") ; v = v.replace( /\\\\'a/g,"\\341") ; v = v.replace( /\\\\^a/g,"\\342") ; v = v.replace( /\\\\~a/g,"\\343") ; v = v.replace( /\\\\"a/g,"\\344") ; v = v.replace( /\\\\oa/g,"\\345") ; v = v.replace( /\\\\ae/g,"\\346") ; v = v.replace( /\\\\,c/g,"\\347") ; v = v.replace( /\\\\`e/g,"\\350") ; v = v.replace( /\\\\'e/g,"\\351") ; v = v.replace( /\\\\^e/g,"\\352") ; v = v.replace( /\\\\"e/g,"\\353") ; v = v.replace( /\\\\`i/g,"\\354") ; v = v.replace( /\\\\'i/g,"\\355") ; v = v.replace( /\\\\^i/g,"\\356") ; v = v.replace( /\\\\"i/g,"\\357") ; v = v.replace( /\\\\~n/g,"\\361") ; v = v.replace( /\\\\`o/g,"\\362") ; v = v.replace( /\\\\'o/g,"\\363") ; v = v.replace( /\\\\^o/g,"\\364") ; v = v.replace( /\\\\~o/g,"\\365") ; v = v.replace( /\\\\"o/g,"\\366") ; v = v.replace( /\\\\`u/g,"\\371") ; v = v.replace( /\\\\'u/g,"\\372") ; v = v.replace( /\\\\^u/g,"\\373") ; v = v.replace( /\\\\"u/g,"\\374") ; v = v.replace( /\\\\'y/g,"\\375") ; v = v.replace( /\\\\"y/g,"\\377") ; return(v) } var TeX_Key_Mode = 0 ; function Initialize_TeX_Keystroke () { TeX_Key_Char = "" ; TeX_Key_Mode = 0 } function Sanitized_TeX_Keystroke (change) { if (change=="\\\\") { TeX_Key_Mode = 1 ; return("") } else if (TeX_Key_Mode==1) { TeX_Key_Mode = 2 ; TeX_Key_Char = change ; return("") } else if (TeX_Key_Mode==2) { TeX_Key_Mode = 0 ; TeX_Key_Char = "\\\\"+TeX_Key_Char+change ; return(Sanitized_TeX_String(TeX_Key_Char)) } else { TeX_Key_Mode = 0 ; return(change) } } \stopJSpreamble \startJScode {Initialize_TeX_Key} uses {Sanitize_TeX_Input} Initialize_TeX_Keystroke() ; \stopJScode \startJScode {Convert_TeX_Key} uses {Sanitize_TeX_Input} if (!event.willCommit) { event.change = Sanitized_TeX_Keystroke(event.change) } \stopJScode \startJScode{Convert_TeX_String} uses {Sanitize_TeX_Input} event.value = Sanitized_TeX_String(event.value) ; \stopJScode \startJSpreamble fields_1 used now var visible_field = new Array() ; var visible_fields = 0 ; function PresetFields ( ) { this.syncAnnotScan() } function Preset_Fields ( ) { this.syncAnnotScan() } function Hide_When_Down ( ) { event.target.hidden = true } function Hide_Field ( Name ) { var v = this.getField(Name) ; if (v) { v.hidden = true ; v.readonly = true ; this.dirty = false } } function Do_Vide_Field ( Name, Closable ) { var v = this.getField(Name) ; if (v) { ++visible_fields ; visible_field[visible_fields] = Name ; v.hidden = false ; if (Closable) { v.readonly = false ; v.value = "On" } this.dirty = false } } function Vide_Field ( Name ) { Do_Vide_Field(Name,false) } function Vide_Hide_Field ( Name ) { Do_Vide_Field(Name,true) } function Hide_Fields () { while (visible_fields>0) { Hide_Field(visible_field[visible_fields]) ; --visible_fields } } function Vide_Fields ( Name ) { Hide_Fields () ; Vide_Field ( Name) } function Vide_Hide_Fields ( Name ) { Hide_Fields () ; Vide_Hide_Field ( Name) } function Toggle_Hide ( Name ) { var v = this.getField(Name) ; if (v) { v.hidden = !v.hidden ; this.dirty = false } } function Field_On ( Name ) { v = this.getField(Name) ; if (v) { v.value = "On" ; this.dirty = false } } function Field_Off ( Name ) { var v = this.getField(Name) ; if (v) { v.value = "Off" ; this.dirty = false } } function Toggle_Value ( Name ) { var v = this.getField(Name) ; if (v) { if (v.value=="On") { v.value = "Off" } else { v.value = "On" } } this.dirty = false } function Toggle_Read ( Name ) { var v = this.getField(Name); if (v) { v.readonly = !v.readonly } } function Flip_Fields ( Name ) { var Names = Name.split(",") ; for (var i=0;i0) { var v = this.getField(FieldSet + ":" + fieldset.number) ; if (v) { if (v.value == "On") { v.value = "Off" ; } } fieldset.number-- ; v = this.getField(FieldSet + ":" + fieldset.number) ; if (v) { v.value = "On" ; } } } } function Next_Walk_Field ( FieldSet ) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.running = false ; fieldset.paused = false ; var f = fieldset.number + 1 ; var v = this.getField(FieldSet + ":" + f) ; if (v) { var v = this.getField(FieldSet + ":" + fieldset.number) ; if (v) { if (v.value == "On") { v.value = "Off" ; } } fieldset.number++ ; v = this.getField(FieldSet + ":" + fieldset.number) ; if (v) { v.value = "On" ; } } } } function Set_Walk_Field_Delay ( FieldSet, Delay ) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { if (Delay) { fieldset.delay = Delay ; if (fieldset.running) { Do_Stop_Auto_Walk_Field(FieldSet) ; Do_Start_Auto_Walk_Field(FieldSet) ; } } } } \stopJSpreamble \definereference[Walk] [JS(Walk_Field)] \definereference[StartWalk] [JS(Start_Walk_Field)] \definereference[StopWalk] [JS(Stop_Walk_Field)] \definereference[PauseWalk] [JS(Pause_Walk_Field)] \definereference[ResetWalk] [JS(Reset_Walk_Field)] \definereference[PreviousWalk][JS(Previous_Walk_Field)] \definereference[NextWalk] [JS(Next_Walk_Field)] \definereference[SetWalkDelay][JS(Set_Walk_Field_Delay)] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-7.mkii0000644000175000017500000002556611754241457024301 0ustar norbertnorbert%D \module %D [ file=regi-8859-7, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-7 (Greek), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-7 input encoding (regime) for Greek, %D see also cp1253. %D %D (Contributor to the original file: Apostolos Syropoulos.) %D %D Usage: \type{\enableregime[8859-7]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-7] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 162 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\texteuro} % 20AC EURO SIGN \defineactivetoken 165 {\unknownchar} % 20AF DRACHMA SIGN (TODO) \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\unknownchar} % 037A GREEK YPOGEGRAMMENI (TODO) \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 175 {\texthorizontalbar} % 2015 HORIZONTAL BAR \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\greektonos} % 0384 GREEK TONOS \defineactivetoken 181 {\greekdialytikatonos} % 0385 GREEK DIALYTIKA TONOS \defineactivetoken 182 {\greekAlphatonos} % 0386 GREEK CAPITAL LETTER ALPHA WITH TONOS \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\greekEpsilontonos} % 0388 GREEK CAPITAL LETTER EPSILON WITH TONOS \defineactivetoken 185 {\greekEtatonos} % 0389 GREEK CAPITAL LETTER ETA WITH TONOS \defineactivetoken 186 {\greekIotatonos} % 038A GREEK CAPITAL LETTER IOTA WITH TONOS \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\greekOmicrontonos} % 038C GREEK CAPITAL LETTER OMICRON WITH TONOS \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\greekUpsilontonos} % 038E GREEK CAPITAL LETTER UPSILON WITH TONOS \defineactivetoken 191 {\greekOmegatonos} % 038F GREEK CAPITAL LETTER OMEGA WITH TONOS \defineactivetoken 192 {\greekiotadialytikatonos} % 0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS \defineactivetoken 193 {\greekAlpha} % 0391 GREEK CAPITAL LETTER ALPHA \defineactivetoken 194 {\greekBeta} % 0392 GREEK CAPITAL LETTER BETA \defineactivetoken 195 {\greekGamma} % 0393 GREEK CAPITAL LETTER GAMMA \defineactivetoken 196 {\greekDelta} % 0394 GREEK CAPITAL LETTER DELTA \defineactivetoken 197 {\greekEpsilon} % 0395 GREEK CAPITAL LETTER EPSILON \defineactivetoken 198 {\greekZeta} % 0396 GREEK CAPITAL LETTER ZETA \defineactivetoken 199 {\greekEta} % 0397 GREEK CAPITAL LETTER ETA \defineactivetoken 200 {\greekTheta} % 0398 GREEK CAPITAL LETTER THETA \defineactivetoken 201 {\greekIota} % 0399 GREEK CAPITAL LETTER IOTA \defineactivetoken 202 {\greekKappa} % 039A GREEK CAPITAL LETTER KAPPA \defineactivetoken 203 {\greekLambda} % 039B GREEK CAPITAL LETTER LAMDA \defineactivetoken 204 {\greekMu} % 039C GREEK CAPITAL LETTER MU \defineactivetoken 205 {\greekNu} % 039D GREEK CAPITAL LETTER NU \defineactivetoken 206 {\greekXi} % 039E GREEK CAPITAL LETTER XI \defineactivetoken 207 {\greekOmicron} % 039F GREEK CAPITAL LETTER OMICRON \defineactivetoken 208 {\greekPi} % 03A0 GREEK CAPITAL LETTER PI \defineactivetoken 209 {\greekRho} % 03A1 GREEK CAPITAL LETTER RHO \defineactivetoken 210 {\unknownchar} % \defineactivetoken 211 {\greekSigma} % 03A3 GREEK CAPITAL LETTER SIGMA \defineactivetoken 212 {\greekTau} % 03A4 GREEK CAPITAL LETTER TAU \defineactivetoken 213 {\greekUpsilon} % 03A5 GREEK CAPITAL LETTER UPSILON \defineactivetoken 214 {\greekPhi} % 03A6 GREEK CAPITAL LETTER PHI \defineactivetoken 215 {\greekChi} % 03A7 GREEK CAPITAL LETTER CHI \defineactivetoken 216 {\greekPsi} % 03A8 GREEK CAPITAL LETTER PSI \defineactivetoken 217 {\greekOmega} % 03A9 GREEK CAPITAL LETTER OMEGA \defineactivetoken 218 {\greekIotadialytika} % 03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA \defineactivetoken 219 {\greekUpsilondialytika} % 03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA \defineactivetoken 220 {\greekalphatonos} % 03AC GREEK SMALL LETTER ALPHA WITH TONOS \defineactivetoken 221 {\greekepsilontonos} % 03AD GREEK SMALL LETTER EPSILON WITH TONOS \defineactivetoken 222 {\greeketatonos} % 03AE GREEK SMALL LETTER ETA WITH TONOS \defineactivetoken 223 {\greekiotatonos} % 03AF GREEK SMALL LETTER IOTA WITH TONOS \defineactivetoken 224 {\greekupsilondialytikatonos} % 03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS \defineactivetoken 225 {\greekalpha} % 03B1 GREEK SMALL LETTER ALPHA \defineactivetoken 226 {\greekbeta} % 03B2 GREEK SMALL LETTER BETA \defineactivetoken 227 {\greekgamma} % 03B3 GREEK SMALL LETTER GAMMA \defineactivetoken 228 {\greekdelta} % 03B4 GREEK SMALL LETTER DELTA \defineactivetoken 229 {\greekepsilon} % 03B5 GREEK SMALL LETTER EPSILON \defineactivetoken 230 {\greekzeta} % 03B6 GREEK SMALL LETTER ZETA \defineactivetoken 231 {\greeketa} % 03B7 GREEK SMALL LETTER ETA \defineactivetoken 232 {\greektheta} % 03B8 GREEK SMALL LETTER THETA \defineactivetoken 233 {\greekiota} % 03B9 GREEK SMALL LETTER IOTA \defineactivetoken 234 {\greekkappa} % 03BA GREEK SMALL LETTER KAPPA \defineactivetoken 235 {\greeklambda} % 03BB GREEK SMALL LETTER LAMDA \defineactivetoken 236 {\greekmu} % 03BC GREEK SMALL LETTER MU \defineactivetoken 237 {\greeknu} % 03BD GREEK SMALL LETTER NU \defineactivetoken 238 {\greekxi} % 03BE GREEK SMALL LETTER XI \defineactivetoken 239 {\greekomicron} % 03BF GREEK SMALL LETTER OMICRON \defineactivetoken 240 {\greekpi} % 03C0 GREEK SMALL LETTER PI \defineactivetoken 241 {\greekrho} % 03C1 GREEK SMALL LETTER RHO \defineactivetoken 242 {\greekfinalsigma} % 03C2 GREEK SMALL LETTER FINAL SIGMA \defineactivetoken 243 {\greeksigma} % 03C3 GREEK SMALL LETTER SIGMA \defineactivetoken 244 {\greektau} % 03C4 GREEK SMALL LETTER TAU \defineactivetoken 245 {\greekupsilon} % 03C5 GREEK SMALL LETTER UPSILON \defineactivetoken 246 {\greekphi} % 03C6 GREEK SMALL LETTER PHI \defineactivetoken 247 {\greekchi} % 03C7 GREEK SMALL LETTER CHI \defineactivetoken 248 {\greekpsi} % 03C8 GREEK SMALL LETTER PSI \defineactivetoken 249 {\greekomega} % 03C9 GREEK SMALL LETTER OMEGA \defineactivetoken 250 {\greekiotadialytika} % 03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA \defineactivetoken 251 {\greekupsilondiaeresis} % 03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA \defineactivetoken 252 {\greekomicrontonos} % 03CC GREEK SMALL LETTER OMICRON WITH TONOS \defineactivetoken 253 {\greekupsilontonos} % 03CD GREEK SMALL LETTER UPSILON WITH TONOS \defineactivetoken 254 {\greekomegatonos} % 03CE GREEK SMALL LETTER OMEGA WITH TONOS \defineactivetoken 255 {\unknownchar} % \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-imp-cow.mkiv0000644000175000017500000001315211754241457025120 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-features.mkiv0000644000175000017500000000403412161703335025770 0ustar norbertnorbert%D \module %D [ file=s-fonts-features, % was s-fnt-41, s-fnt-27 %D version=2012.11.27, % 2010.02.22 %D title=\CONTEXT\ Style File, %D subtitle=Features, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[s-fonts-features] \registerctxluafile{s-fonts-features}{} \installmodulecommandluasingle \showusedfeatures {moduledata.fonts.features.showused} \installmodulecommandluasingle \showallkerns {moduledata.fonts.features.showallkerns} \installmodulecommandluasingle \showbasekerns {moduledata.fonts.features.showbasekerns} \def\kernpairheight{\strutheight} \def\kernpairdepth {\strutdepth} \def\kernpairwidth {\onepoint} \unexpanded\def\showkernpair#1#2#3% first second kern {\dontleavehmode \hbox \bgroup \scratchdimen#2\scaledpoint \kern\fontcharwd\font#1\relax \ifdim\scratchdimen>\zeropoint \bgroup \darkgreen \vrule width \scratchdimen height \kernpairheight depth \kernpairdepth \egroup \kern-\scratchdimen \else\ifdim\scratchdimen<\zeropoint \kern\scratchdimen \bgroup \darkred \vrule width -\scratchdimen height \kernpairheight depth \kernpairdepth \egroup \else \kern-.5\dimexpr\kernpairwidth\relax \bgroup \darkblue \vrule width \kernpairwidth height \kernpairheight depth \kernpairdepth \egroup \kern-.5\dimexpr\kernpairwidth\relax \fi\fi \kern-\fontcharwd\font#1\relax \char#1\relax \char#3\relax \egroup \space} \stopmodule \continueifinputfile{s-fonts-features.mkiv} \usemodule [art-01] \starttext \showusedfeatures \page \definefontfeature[default-base][default][mode=base] \start \definedfont[Serif*default-base] \showbasekerns \page \stop \start \bf \showallkerns \page \stop \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/core-par.mkii0000644000175000017500000002177611754241457024303 0ustar norbertnorbert%D \module %D [ file=core-par, %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Paragraph Tricks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Pararaph Tricks} \unprotect % \ifprocesspreviousparagraphs % % \nofskippedparagraphs % \paragraphnumber % \nofparagraphs % % \dosetparagraph % \doresetparagraph % \dobeforeparagraph % \doafterparagraph % \dobeforeskipparagraph % \doafterskipparagraph % % \pushparagraphs\endcommand alle alineas tot \endcommand laden % \pushmoreparagraphs\endcommand alle alineas tot \endcommand toevoegen % \popparagraphs alle alineas oproepen % \popparagraphs[a,b,c] enkele alineas oproepen [geen] % % tzt een optionele prefix: % % \pushparagraphs[xxx]\endcommand alle alineas tot \endcommand laden % \popparagraphs[xxx] alle alineas oproepen % \popparagraphs[xxx][a,b,c] enkele alineas oproepen % % \numberparagraphs % \numberparagraphlines % \resetparagraphlines \newif\ifprocesspreviousparagraphs % public \newif\ifprocessallparagraphs % private \newcounter\totalnofparagraphs % private \newcounter\globalparagraphnumber % private \newcounter\discardedparagraphs % private \newcounter\mostrecentparagraphtotal % public \let\dosetparagraph = \relax % public \let\doresetparagraph = \relax % public \let\dobeforeparagraph = \relax % public \let\doafterparagraph = \relax % public \let\dobeforeskipparagraph = \relax % public \let\doafterskipparagraph = \relax % public \def\paragraphnumber {} % public \def\nofparagraphs {} % public \def\nofskippedparagraphs {} % public \def\paragraphprefix {paragraph} % private % voorlopig, wordt nog class \def\resetparagraphlines {\global\linenumber\plusone} \def\numberparagraphs % instelbaar maken en slimmer ivm breedte regelnummer !!!!! {\processpreviousparagraphstrue \def\dosetparagraph {\bgroup \resetparagraphlines \EveryPar {\strut\inleftmargin{\tf{\tx\paragraphnumber}\kern2em}% \ignorespaces}}% \def\doresetparagraph {\resetparagraphlines \egroup}} \def\numberparagraphlines {\processpreviousparagraphstrue \def\dosetparagraph {\resetparagraphlines}% \def\doresetparagraph {\resetparagraphlines}% \def\dobeforeparagraph {\startlinenumbering[\v!continue]}% \def\doafterparagraph {\stoplinenumbering}% \def\dobeforeskipparagraph {\stoplinenumbering \let\paragraphnumber\relax}% \def\doafterskipparagraph {\startlinenumbering[\v!continue]}} \long\def\directpushparagraph#1% {\doglobal\increment\totalnofparagraphs \ifnum\totalnofparagraphs>0\nofskippedparagraphs\relax \setgvalue{\paragraphprefix\totalnofparagraphs}{#1}% \else \setgvalue{\paragraphprefix\totalnofparagraphs}{\skipparagraph#1\par}% \fi} \long\def\directskipparagraph#1% {\doglobal\increment\totalnofparagraphs \setgvalue{\paragraphprefix\totalnofparagraphs}{\skipparagraph#1\par}} \def\dopushparagraphs#1% {\global\let\mostrecentparagraphtotal\totalnofparagraphs \ifx#1\undefined \let#1\relax \fi \defconvertedargument\asciia{#1}% \defconvertedargument\asciib{ }% % lege regel \def\dopushparagraph##1\par {\defconvertedargument\asciic{##1}% \doifelse\asciic\asciia {#1} {\doifsomething\asciic % lege paragraaf {\doifnot\asciic\asciib {\directpushparagraph{#1}}}% \dopushparagraph}}% \dopushparagraph} \def\pushparagraphs {\doglobal\newcounter\totalnofparagraphs \dopushparagraphs} \def\pushmoreparagraphs {\dopushparagraphs} \def\dododopopparagraph#1% no grouping, i.v.m. sidefloats {\ifnum#1>\totalnofparagraphs\relax \else \let\paragraphnumber\globalparagraphnumber \decrement(\paragraphnumber,\discardedparagraphs)% \dobeforeparagraph \ifhmode\indentation\fi\getvalue{\paragraphprefix#1}\par \doafterparagraph \fi} \long\def\skipparagraph#1\par {\doglobal\increment\discardedparagraphs \ifprocessallparagraphs \dobeforeskipparagraph \ifhmode\indentation\fi#1\par \doafterskipparagraph \fi} \def\dodopopparagraph {\dododopopparagraph} \def\dodoprocessparagraph#1% {\ifprocesspreviousparagraphs \bgroup \setbox0\vbox{\dododopopparagraph{#1}}% \egroup \fi} \def\processpreviousparagraphs[#1]% process previous ones {\ifprocesspreviousparagraphs \bgroup \getfromcommacommand[#1][1]% tzt snelle \..command.. testen \let\totalnofparagraphs\commalistelement \decrement\totalnofparagraphs \let\dodopopparagraph\dodoprocessparagraph \popparagraphs \egroup \fi} \def\dopopparagraphs[#1]% {\doifnotinset{#1}{\v!none,0} {\dosetparagraph \doglobal\newcounter\globalparagraphnumber \doglobal\newcounter\discardedparagraphs \doifelse{#1}{} {\processallparagraphstrue} {\processallparagraphsfalse}% \def\dopopparagraph {\doglobal\increment\globalparagraphnumber \ifnum\globalparagraphnumber>\totalnofparagraphs\relax \let\dopopparagraph\relax \else\ifprocessallparagraphs \ifnum\globalparagraphnumber>\mostrecentparagraphtotal\relax \dodopopparagraph\globalparagraphnumber \else \dodoprocessparagraph\globalparagraphnumber \fi \else \let\paragraphnumber\globalparagraphnumber \decrement(\paragraphnumber,\discardedparagraphs)% \ExpandBothAfter\doifinsetelse{\paragraphnumber}{#1} {\dodopopparagraph\globalparagraphnumber} {\dodoprocessparagraph\globalparagraphnumber}% \fi\fi \dopopparagraph}% \dopopparagraph \doresetparagraph}} \def\popparagraphs {\dosingleempty\dopopparagraphs} \def\countparagraphs {\popparagraphs[\!!maxcard]% \global\let\nofparagraphs\totalnofparagraphs \doglobal\decrement(\nofparagraphs,\discardedparagraphs)} % \showframe % % \numberparagraphlines % \numberparagraphs % % \def\nofskippedparagraphs{1} % % \pushparagraphs\ThatsIt % % \ruledbaseline eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste % % \ruledbaseline eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste eerste eerste eerste % eerste eerste eerste eerste eerste % % \ruledbaseline tweede tweede tweede tweede tweede tweede % tweede tweede tweede tweede tweede tweede tweede tweede % tweede tweede tweede tweede tweede tweede tweede tweede % tweede tweede tweede tweede tweede tweede tweede tweede % tweede tweede tweede tweede tweede tweede tweede tweede % tweede tweede tweede tweede tweede tweede tweede tweede % tweede tweede tweede tweede tweede % % \skipparagraph \ruledbaseline skipped skipped skipped % skipped skipped skipped skipped skipped skipped skipped % skipped skipped skipped skipped skipped skipped skipped % skipped skipped % % \ruledbaseline derde derde derde derde derde derde derde % derde derde derde derde derde derde derde derde derde derde % derde derde derde derde derde derde derde derde derde derde % derde derde derde derde derde derde derde derde derde derde % derde derde derde derde derde derde derde derde derde derde % derde derde derde derde derde derde derde derde derde derde % % \skipparagraph \ruledbaseline skipped skipped skipped % skipped skipped skipped skipped skipped skipped skipped % skipped skipped skipped skipped skipped skipped skipped % skipped skipped skipped % % \ruledbaseline vierde vierde vierde vierde vierde vierde % vierde vierde vierde vierde vierde vierde vierde vierde % vierde vierde vierde vierde vierde vierde vierde vierde % vierde vierde vierde vierde % % \ruledbaseline vijfde vijfde vijfde vijfde vijfde vijfde % vijfde vijfde vijfde vijfde vijfde vijfde vijfde vijfde % vijfde vijfde vijfde vijfde vijfde vijfde vijfde vijfde % vijfde vijfde vijfde vijfde vijfde vijfde vijfde vijfde % vijfde vijfde vijfde % % \skipparagraph \ruledbaseline skipped skipped skipped % skipped skipped skipped skipped skipped skipped skipped % skipped skipped skipped skipped skipped skipped skipped % skipped skipped skipped % % \ThatsIt % % \popparagraphs % % \countparagraphs % % \blanko[2*groot] % % nofparagraphs:~\nofparagraphs % % \pagina % % \popparagraphs[1] % \popparagraphs[2] % \popparagraphs[3] % \popparagraphs[4] % \popparagraphs[5] % % \pagina % % \ruledvbox{\popparagraphs[1,2,3,4,5]} % % \pagina \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/file-ini.mkvi0000644000175000017500000001541112130411274024252 0ustar norbertnorbert%D \module %D [ file=file-ini, % was supp-fil, %D version=20110701, % 1995.10.10, %D title=\CONTEXT\ File Macros, %D subtitle=Helpers, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \TEX\ operates on files, so one wouldn't wonder that there %D is a separate module for file commands. In \CONTEXT\ files %D are used for several purposes: %D %D \startitemize[packed] %D \item general textual input %D \item logging status information %D \item saving registers, lists and references %D \item buffering defered textual input %D \stopitemize %D %D When dealing with files we can load them as a whole, using %D the \type{\input} primitive or load them on a line||by||line %D basis, using \type{\read}. Writing is always done line by %D line, using \type{\write}. \writestatus{loading}{ConTeXt File Macros / Helpers} \registerctxluafile{file-ini}{1.001} \unprotect %D \macros %D {scratchread, scratchwrite} %D %D We define a scratch file for reading. Keep in mind that %D the number of files is limited to~16, so use this one when %D possible. We also define a scratch output file. \ifdefined\scratchread \else \newread \scratchread \fi \ifdefined\scratchwrite \else \newwrite\scratchwrite \fi %D Seldom needed: \def\openinputfile #handle#name{\immediate\openin #handle={#name}\relax} \def\openoutputfile #handle#name{\immediate\openout#handle={#name}\relax} \def\closeinputfile #handle{\immediate\closein #handle\relax} \def\closeoutputfile#handle{\immediate\closeout#handle\relax} %D \macros %D {writeln} %D %D This saves a few tokens: \def\writeln#handle{\write#handle{}} %D \macros %D {pushendofline,popendofline} %D %D When we are loading files in the middle of the typesetting %D process, for instance when we load references, we have to be %D sure that the reading process does not generate so called %D 'spurious spaces'. This can be prevented by assigning the %D line ending character the \CATCODE\ comment. This is %D accomplished by %D %D \starttyping %D \pushendofline %D ... reading ... %D \popendofline %D \stoptyping \installsystemnamespace{eolstack} \newcount\c_system_files_eol_level \unexpanded\def\pushendofline {\advance\c_system_files_eol_level\plusone \expandafter\chardef\csname\??eolstack\number\c_system_files_eol_level\endcsname\catcode\endoflineasciicode \catcode\endoflineasciicode\commentcatcode} \unexpanded\def\popendofline {\catcode\endoflineasciicode\csname\??eolstack\number\c_system_files_eol_level\endcsname \advance\c_system_files_eol_level\minusone} \unexpanded\def\restoreendofline {\catcode\endoflineasciicode\endoflinecatcode} %D \macros %D {startreadingfile,stopreadingfile} %D %D A low level capsule: \newcount\readingfilelevel % no longer needed \newtoks \everystartreadingfile \newtoks \everystopreadingfile \unexpanded\def\startreadingfile% beter een every en \setnormalcatcodes {\global\advance\readingfilelevel\plusone \the\everystartreadingfile \pushcatcodetable % saveguard \setcatcodetable\ctxcatcodes \ctxcommand{pushregime()}}% temporarily this way \unexpanded\def\stopreadingfile {\popcatcodetable % saveguard \ctxcommand{popregime()}% temporarily this way \the\everystopreadingfile \global\advance\readingfilelevel\minusone} %D \macros %D {input, normalinput} %D %D Sometimes we run into troubles when \type {\input} wants to get %D expanded, e.g. in a \type {\write} (which happens in the metafun %D manual when we permit long MP lines). So, instead of fixing that, %D we go for a redefinition of \type {\input}. Of course it's better %D to use \type {\readfile} or \type {\processfile}. \unexpanded\def\input{\normalinput} \def\inputgivenfile#name{\normalinput{#name}} %D \macros %D {doiffileelse} %D %D The next alternative only looks if a file is present. No %D loading is done. This one obeys the standard \TEX\ lookup. %D %D \starttyping %D \doiffileelse {filename} {found} {not found} %D \stoptyping \def\doiffileexistselse#name{\ctxcommand{doiffileexistelse([[#name]])}} \def\doiffileelse {\doiffileexistselse} \def\doiffile #name{\doiffileexistselse{#name}\firstofoneargument\gobbleoneargument} \def\doifnotfile #name{\doiffileexistselse{#name}\gobbleoneargument\firstofoneargument} %D \macros %D {doifparentfileelse} %D %D \starttyping %D \doifparentfileelse{filename}{yes}{no} %D \stoptyping \ifx\outputfilename\undefined \def\outputfilename{\jobname} \fi \def\doifparentfileelse#name{\ctxcommand{doifparentfileelse([[#name]])}} %D \macros %D {splitfilename} %D %D \startbuffer %D \def\showfilesplit %D {\bgroup \tttf %D \hbox{(full: \splitofffull)}\space %D \hbox{(path: \splitoffpath)}\space %D \hbox{(base: \splitoffbase)}\space %D \hbox{(name: \splitoffname)}\space %D \hbox{(type: \splitofftype)}\space %D \egroup} %D %D \splitfilename{c:/aa/bb/cc/dd.ee.ff} \showfilesplit \endgraf %D \splitfilename{c:/aa/bb/cc/dd.ee} \showfilesplit \endgraf %D \splitfilename{c:/aa/bb/cc/dd} \showfilesplit \endgraf %D %D \splitfilename{dd.ee.ff} \showfilesplit \endgraf %D \splitfilename{dd.ee} \showfilesplit \endgraf %D \splitfilename{dd} \showfilesplit \endgraf %D \stopbuffer %D %D \start \typebuffer \getbuffer \stop \newconstant\kindoffile % 0=normal 1=full path spec (or http) / set at the lua end \def\splitoffroot{.} \newconstant\splitoffkind \let\splitofffull\empty \let\splitoffpath\empty \let\splitoffbase\empty \let\splitoffname\empty \let\splitofftype\empty \def\splitfilename#name{\ctxcommand{splitfilename([[#name]])}} %D \macros %D {doonlyonce, doinputonce, doendinputonce} %D %D Especially macropackages need only be loaded once. %D Repetitive loading not only costs time, relocating registers %D often leads to abortion of the processing because \TEX's %D capacity is limited. One can prevent multiple execution and %D loading by using one of both: %D %D \starttyping %D \doonlyonce{actions} %D \doinputonce{filename} %D \doendinputonce{filename} %D \stoptyping %D %D This command obeys the standard method for locating files. We could %D move this function to the \LUA\ end. \installsystemnamespace {fileonce} \unexpanded\def\doonlyonce#whatever% {\ifcsname\??fileonce#whatever\endcsname \expandafter\gobbleoneargument \else \letgvalue{\??fileonce#whatever}\relax \expandafter\firstofoneargument \fi} \unexpanded\def\doinputonce#name% {\doonlyonce{#name}{\doiffileelse{#name}{\inputgivenfile{#name}}\donothing}} \unexpanded\def\doendinputonce#name% {\ifcsname\??fileonce#name\endcsname \expandafter\endinput \fi} \unexpanded\def\forgetdoingonce#whatever% {\global\letbeundefined{\??fileonce#whatever}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-bar.mkiv0000644000175000017500000000626412130411274024244 0ustar norbertnorbert%D \module %D [ file=pack-bar, %D version=2009.06.26, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Bars, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Bars} \unprotect %D This code has been moved from scrn-int to here (was some old %D experimental code). It could be in scrn-bar but it's static. In %D the meantime the interface has been adapted to a key|/|value one. %D %D \startbuffer %D \dorecurse{10}{ %D \ruledhbox{\horizontalpositionbar[n=#1,min=1,max=10,text=!,color=red]} %D \par %D } %D \stopbuffer %D %D \typebuffer \stoplinecorrection \getbuffer \stoplinecorrection %D %D \startbuffer %D \dorecurse{10}{ %D \ruledhbox{\horizontalgrowingbar[n=#1,min=1,max=10,text=!,color=red]} %D \par %D } %D \stopbuffer %D %D \typebuffer \stoplinecorrection \getbuffer \stoplinecorrection \installcorenamespace{positionbar} \installsimplecommandhandler \??positionbar {positionbar} \setuppositionbar [\c!min=1, \c!max=1, \c!n=1, \c!text=?, \c!width=\emwidth, \c!height=\strutheight, \c!depth=\strutdepth] \unexpanded\def\horizontalpositionbar[#1]% {\hbox to \hsize {\setuppositionbar[#1]% \usepositionbarstyleandcolor\c!style\c!color \hskip\zeropoint\s!plus \positionbarparameter\c!n \s!fill \hskip\zeropoint\s!plus-\positionbarparameter\c!min\s!fill \positionbarparameter\c!text\relax \hskip\zeropoint\s!plus \positionbarparameter\c!max\s!fill \hskip\zeropoint\s!plus-\positionbarparameter\c!n \s!fill}} \unexpanded\def\verticalpositionbar[#1]% {\vbox to \vsize {\setuppositionbar[#1]% \usepositionbarstyleandcolor\c!style\c!color \vskip\zeropoint\s!plus \positionbarparameter\c!n \s!fill \vskip\zeropoint\s!plus-\positionbarparameter\c!min\s!fill \positionbarparameter\c!text\relax \vskip\zeropoint\s!plus \positionbarparameter\c!max\s!fill \vskip\zeropoint\s!plus-\positionbarparameter\c!n \s!fill}} \unexpanded\def\horizontalgrowingbar[#1]% {\hbox to \hsize {\setuppositionbar[#1]% \usepositionbarstyleandcolor\c!style\c!color \leaders\vrule\hskip\zeropoint\s!plus \numexpr\positionbarparameter\c!n-\positionbarparameter\c!min+\plusone\relax\s!fill \vrule\s!width\zeropoint\s!height\positionbarparameter\c!height\s!depth\positionbarparameter\c!depth \hskip\zeropoint\s!plus \positionbarparameter\c!max\s!fill \hskip\zeropoint\s!plus-\positionbarparameter\c!n \s!fill}} \unexpanded\def\verticalgrowingbar[#1]% {\vbox to \vsize {\setuppositionbar[#1]% \usepositionbarstyleandcolor\c!style\c!color \leaders\hrule\vskip\zeropoint\s!plus\numexpr\positionbarparameter\c!n-\positionbarparameter\c!min+\plusone\relax\s!fill \hrule\s!width\positionbarparameter\c!width\s!height\zeropoint\s!depth\zeropoint \vskip\zeropoint\s!plus \positionbarparameter\c!max\s!fill \vskip\zeropoint\s!plus-\positionbarparameter\c!n \s!fill}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-26.tex0000644000175000017500000001424611754241457023707 0ustar norbertnorbert%D \module %D [ file=s-pre-26, %D version=2001.02.18, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 26, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 modes: reverse %D This is a nice and simple style, written in februari %D 2001. It uses a square papersize, derived from \type {S4}. %D Because this style is meant to be used with Zapf %D Chancery, I dedicate this style to Volker Schaa, a fan of %D Zapf. \setuppapersize [S44][S44] \startmode[asintended] \definetypeface[zaphy][cg][calligraphy][chancery] \setupbodyfont[zaphy,cg,12pt] \stopmode \startnotmode[asintended] \setupbodyfont[13pt] \stopnotmode %D We use the whole page. \setuplayout [backspace=0pt, topspace=0pt, header=0pt, footer=0pt, bottom=0pt, width=middle, height=middle] %D We will be very tolerant in alignment. \setuptolerance [verytolerant,stretch] %D Of course use navigation, but we hide the in this case %D ugly reverse video hyper spot. \setupinteraction [state=start, color=white, contrastcolor=white, style=\underbar, click=no] %D This style looks best in a dark room, full screen. \setupinteractionscreen [option=max] %D We use colors and remap a couple of standard colors. \setupcolors [state=start] \definecolor[white] [s=.8] \definecolor[red] [r=.7] \definecolor[green] [g=.7] \definecolor[blue] [b=.7] \definecolor[yellow][r=.7,g=.7] \definecolor [PageColor][black] %D These colors will cyclic be assigned to \type %D {TextColor}. \definecolor [TextColor 0][white] \definecolor [TextColor 1][red] \definecolor [TextColor 2][green] \definecolor [TextColor 3][blue] \definecolor [TextColor 4][yellow] \definecolor [TextColor] [TextColor 0] %D We will collect everything in a layer. \definelayer [main] [state=repeat] %D We have quite some overlays. \defineoverlay [page] [\reuseMPgraphic{page}] \defineoverlay [text] [\useMPgraphic{text}] \defineoverlay [next] [\overlaybutton{nextpage}] \defineoverlay [prev] [\overlaybutton{previouspage}] \defineoverlay [main] [\composedlayer{main}] %D These end up as paper, page and text backgrounds. We need %D to locate the foreground, otherwise hyperlinks will not %D work. \setupbackgrounds % otherwise in acrobat 5 rounding error [paper] % and one pixel white line [backgroundcolor=Pagecolor, background=page] \setupbackgrounds [page] [background={page,prev,foreground,main}] \setupbackgrounds [text] [background=next, backgroundoffset=-10pt] %D This means that clicking on the center brings you to the %D next page, while clicking on teh page frame brings you one %D page back. %D As usual, the graphics are handled by \METAPOST: \startuseMPgraphic{text} path p ; p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ; color c ; c := (.7+uniformdeviate.3)*\MPcolor{TextColor} ; p := p enlarged -1.25pt ; filldraw p withcolor c ; draw p withpen pencircle scaled 2.5pt withcolor .75c ; \stopuseMPgraphic \startreusableMPgraphic{page} path p ; p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ; color c ; c := \MPcolor{PageColor} ; filldraw p enlarged 5pt withcolor c ; % bleeding \stopreusableMPgraphic %D The text is typeset in a framed text. We cycle trough the %D colors by means of a counter. This counter also determines %D the positioning on the main layer. The width is slightly %D random. \newcounter\KindOfTopic % and cycle through corners \newdimen \TopicWidth % with randomized widths \defineframedtext [TopicText] [frame=off, offset=10pt, style=bold, width=\TopicWidth, background=text, before=, after=, align=normal] \def\BeforeTopic {\ifcase\KindOfTopic\relax \TopicWidth=.7\textwidth \definecolor[CharColor][black] \else \getrandomdimen\TopicWidth{.55\textwidth}{.7\textwidth} \definecolor[CharColor][white] \fi \doifmode{reverse} {\setupframedtexts[TopicText][foregroundcolor=CharColor]} \definecolor[TextColor][TextColor \KindOfTopic] \ifcase\KindOfTopic\relax \setuplayer[main][x=.5\textwidth,y=.5\textheight,location=c] \or \setuplayer[main][x=0pt, y=0pt, location=rb] \or \setuplayer[main][x=\textwidth, y=0pt, location=lb] \or \setuplayer[main][x=\textwidth, y=\textheight, location=lt] \or \setuplayer[main][x=0pt, y=\textheight, location=rt] \fi} \def\AfterTopic {\ifnum\KindOfTopic=4 \gdef\KindOfTopic{1} \else \doglobal\increment\KindOfTopic \fi} \def\StartTopic {\BeforeTopic \startstandardmakeup \setlayer[main] \bgroup \startTopicText[none] }%\setupwhitespace[big]} % generates an empty line \def\StopTopic {\stopTopicText \egroup \stopstandardmakeup \AfterTopic} %D The title and colofon page are centered on the page. \def\StartNopic {\doglobal\newcounter\KindOfTopic % centered at the page \StartTopic \bfd\setupinterlinespace \setupinteraction[color=,contrastcolor=]% \def\\{\blank\bfb\setupinterlinespace\def\\{\blank}}% \raggedcenter\ignorespaces} \def\StopNopic {\StopTopic} \let\StartTitlePage\StartNopic \let\StartColofonPage\StartNopic \let\StopTitlePage \StopNopic \let\StopColofonPage \StopNopic \def\TitlePage #1{\StartTitlePage #1\StopTitlePage} \def\ColofonPage#1{\StartColofonPage#1\StopColofonPage} %D We provide a minimum of title commands. \definehead [Title] [title] \definehead [Subject] [subject] \setuphead [Title] [style=\bfb, page=, before=, after=\blank] \setuphead [Subject] [style=\bfa, before=\blank, after=\blank] \doifnotmode{demo}{\endinput} \def\Sample #1 {\input #1 \par \rightaligned{--- #1 ---}} \starttext \StartNopic The \ConTeXt\ Test Quotes \\ \currentdate \StopNopic \StartTopic \Sample tufte \StopTopic \StartTopic \Sample knuth \StopTopic \StartTopic \Sample zapf \StopTopic \StartTopic \Sample douglas \StopTopic \StartTopic \Sample stork \StopTopic \StartTopic \Sample materie \StopTopic \StartNopic There Will Be Some More \StopNopic \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-02.tex0000644000175000017500000002062311754241457023675 0ustar norbertnorbert%D \module %D [ file=s-pre-02, %D version=1998.04.21, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 2, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 environment can be used to typeset interactive %D presentations. This module was first used at the 1998 %D publishers conference of the European Portable Document %D Association (now merged into a graphics association). \usemodule[pre-general] %D \macros %D {setupbodyfont, switchtobodyfont, setuplayout} %D %D At \PRAGMA\ we prefer using the Lucida Bright fonts, but %D one can of course load another typeface. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] \setuplayout [style=smallbodyfont] %D \macros %D {setuppapersize, setuplayout} %D %D The papersize suits the screen dimensions. The layout is %D rather simple. We use the whole width of the screen and only %D have navigational tools at the bottom of the screen. \setuppapersize [S6][S6] \setuplayout [backspace=1cm, topspace=1cm, margin=0pt, header=0pt, footer=0pt, bottomdistance=.875cm, bottom=1cm, width=fit, height=fit] %D \macros %D {setupwhitespace, setuptyping} %D %D We don't have much height, so we use a more cramped %D spacing. Verbatim text looks better when indented. %D \setupwhitespace [medium] \setuptyping [margin=standard] %D \macros %D {definecolor, setupcolors} %D %D Of course we enable color. We define some logical colors, %D of which most default to the same green shade. \definecolor [BackgroundColor] [r=.8, g=.8, b=.8] \definecolor [OrnamentColor] [r= 0, g=.7, b=.4] \setupcolors [state=start] %D \macros %D {setupinteraction, setupinteractionscreen} %D %D We still have to enable interaction mode. We go full %D screen! \setupinteraction [state=start, color=OrnamentColor, contrastcolor=OrnamentColor] \setupinteractionscreen [option=max, width=fit, height=fit] %D \macros %D {setupitemize} %D %D And why not bring some color in itemizations too? \setupitemize [color=OrnamentColor] %D \macros %D {defineoverlay, setupbackgrounds} %D %D The navigational elements and the backgrounds are %D provided by \METAPOST. %D %D When \METAPOST\ is used, it makes sense to generate the %D graphics at runtime. This is supported when one enables %D system calls in the local \type {texmf.cnf} file and add the %D switch \type {\runMPgraphicstrue} to the local file \type %D {cont-sys.tex}. When direct processing is disabled or not %D supported, \TEXEXEC\ will take care of graphic generation. \startuniqueMPgraphic{PageBackground} fill unitsquare xyscaled(OverlayWidth,OverlayHeight) withcolor OverlayColor ; draw unitsquare xyscaled(OverlayWidth,OverlayHeight) enlarged (-2*OverlayLineWidth) withpen pencircle scaled OverlayLineWidth withcolor OverlayLineColor ; \stopuniqueMPgraphic \defineoverlay [PageBackground] [\uniqueMPgraphic{PageBackground}] \setupbackgrounds [page] [background=PageBackground, backgroundcolor=BackgroundColor, rulethickness=.125cm, framecolor=OrnamentColor] %D \macros %D {setuptexttexts} %D %D By clicking on the text area, one goes to the next page. %D We hook this feature into the text backgrounds. \startuniqueMPgraphic{TextBackground} draw unitsquare xyscaled(OverlayWidth,OverlayHeight) enlarged (4*OverlayLineWidth) withpen pencircle scaled OverlayLineWidth withcolor OverlayLineColor ; \stopuniqueMPgraphic \defineoverlay [TextBackground] [\uniqueMPgraphic{TextBackground}] \defineoverlay [NextPage] [\overlaybutton{nextpage}] \setupbackgrounds [text] [background={TextBackground,NextPage}, backgroundcolor=BackgroundColor, rulethickness=.0625cm, framecolor=OrnamentColor] %D \macros %D {setupinteractionmenu,startinteractionmenu} %D %D At the bottom of the screen, we show three buttons. These %D direct us to the previous or next jump or exit the document. \setupMPvariables[RightArrow][height=\bottomheight] \setupMPvariables[LeftArrow] [height=\bottomheight] \setupMPvariables[Circle] [height=\bottomheight] \setupMPvariables[UpArrow] [height=\bottomheight] \startuniqueMPgraphic{RightArrow}{height} z1=(0,0) ; z2=(\MPvar{height},.5y3) ; z3=(0,\MPvar{height}) ; drawfill z1--z2--z3--cycle withpen pencircle scaled (\MPvar{height}/5) withcolor \MPcolor{OrnamentColor} ; \stopuniqueMPgraphic \startuniqueMPgraphic{LeftArrow}{height} z1=(\MPvar{height},0) ; z2=(0,.5y3) ; z3=(\MPvar{height},\MPvar{height}) ; drawfill z1--z2--z3--cycle withpen pencircle scaled (\MPvar{height}/5) withcolor \MPcolor{OrnamentColor} ; \stopuniqueMPgraphic \startuniqueMPgraphic{Circle}{height} drawfill fullcircle scaled \MPvar{height} withpen pencircle scaled (\MPvar{height}/5) withcolor \MPcolor{OrnamentColor} ; \stopuniqueMPgraphic \startuniqueMPgraphic{UpArrow}{height} z1=(0,0) ; z2=(\MPvar{height},0) ; z3=(.5x2,\MPvar{height}) ; drawfill z1--z2--z3--cycle withpen pencircle scaled (\MPvar{height}/5) withcolor \MPcolor{OrnamentColor} ; \stopuniqueMPgraphic \setupinteractionmenu [bottom] [state=start, frame=off, width=.3\textwidth, height=\bottomheight] \setupinteraction [menu=on] \def\WhateverButton {\doifreferencefoundelse{Whatever} {\raw [Whatever] \uniqueMPgraphic{UpArrow} \\} {}} \startinteractionmenu[bottom] \but [Topics] \\ % secret button \hfill \WhateverButton % user specific \kern2\bottomheight \raw [previouspage] \uniqueMPgraphic{LeftArrow} \\ \kern.5\bottomheight \raw [CloseDocument] \uniqueMPgraphic{Circle} \\ \kern.5\bottomheight \raw [nextpage] \uniqueMPgraphic{RightArrow} \\ \kern.5\bottomheight \stopinteractionmenu %D \macros %D {TitlePage, Topics, Topic, Subject} %D %D A presentation after loading this module looks like: %D %D \starttyping %D \TitlePage {About Whatever\\Topics} %D %D \Topics {Todays Talk} %D %D \Topic {Some topic} %D %D ..... %D %D \Topic {Next Topic} %D %D ..... %D \stoptyping %D \macros %D {StartTitlePage, TitlePage} %D %D The titlepage is rather simple and can be typeset in two %D ways: %D %D \starttyping %D \StartTitlePage %D text \\ text \\ text %D \StopTitlepage %D \stoptyping %D %D or as one||liner: %D %D \starttyping %D \TitlePage{text\\text\\text} %D \stoptyping %D %D The first alternative can be used for more complicated %D title pages. \def\StartTitlePage% {\startstandardmakeup \bfd\setupinterlinespace \setupalign[middle] \vfil \let\\=\vfil} \def\StopTitlePage% {\vfil\vfil\vfil \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D \macros %D {definehead} %D %D The commands \type{\Topic} and \type{\Subject} are defined %D as copies of head. We use \type{\Nopic} for internal %D purposes. \definehead [Topic] [chapter] \definehead [Subject] [section] \definehead [Nopic] [title] %D \macros %D {setuphead} %D %D We use our own command for typesetting the titles. We hide %D sectionnumbers from viewing. Each topic is followed by a %D list of subjects that belong to the topic. \setuphead [Topic, Nopic] [after={\blank[3*medium]}, number=no, style=\tfb, page=yes, alternative=middle] \setuphead [Subject] [after=\blank, number=no, page=yes, continue=no, style=\tfa] %D \macros %D {setuplist} %D %D When found, the subject list is automatically placed %D after the topic head. \setuplist [Topic,Subject] [alternative=g, interaction=all, before=, after=] \setuplist [Topic] [criterium=all] \def\Topics#1% {\determinelistcharacteristics[Topic] \doifmode{*list} {\Nopic[Topics]{#1} \startcolumns \placelist[Topic] \stopcolumns}} \setuplist [Subject] [criterium=Topic] \def\Subjects% {\determinelistcharacteristics[Subject] \doifmode{*list} {\placelist[Subject]}} \setuphead [Topic] [after={\blank[3*medium]\Subjects}] \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \TitlePage{Title Page\\pre-green} \Topics{Some Nice Quotes} \Topic{A Few} \Subject{Knuth} \input knuth \Subject{Tufte} \input tufte \Topic{Some More} \Subject{Zapf} \input zapf \Subject{Bryson} \input bryson \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ini.mkvi0000644000175000017500000026620312161703335024316 0ustar norbertnorbert%D \module %D [ file=font-ini, %D version=1998.09.11, % (second) %D version=2001.02.20, % (third) %D title=\CONTEXT\ Font Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: < 3 pt => 3pt % todo: check where more class usage % todo: split font-nam (style/alternative/size) % todo: split font-dim (scales etc) % todo: reconsider defaultfontclass % %D Watch out: as we define inside macros in sometimes special ways, %D an occasional \type {\normaldef} is used in order to please the %D \MKVI\ parser. %D Beware, we use a special set of parameters here: %D %D \starttabulate[|l|l|] %D \NC system variable (fixed) \NC \type {\s!text} \NC \NR %D \NC system variable (fixed) \NC \type {\s!script} \NC \NR %D \NC system variable (fixed) \NC \type {\s!scriptscript} \NC \NR %D \NC system variable (fixed) \NC \type {\s!x} \NC \NR %D \NC system variable (fixed) \NC \type {\s!xx} \NC \NR %D \NC variable (value) \NC \type {\v!big} \NC \NR %D \NC variable (value) \NC \type {\v!small} \NC \NR %D \NC constant (regular key) \NC \type {\c!interlinespace} \NC \NR %D \NC constant (regular key) \NC \type {\c!em} \NC \NR %D \stoptabulate %D %D The math related ones are similar to the ones used in \TEX\ itself, %D the size related ones show up as keywords in the user interface %D when switching sizes, and the two constants are used in key|/|value %D situations. %D We should consider design sizes ... maybe kick 'm out which removes %D the size code and simplifies things considerably. After all, there %D will be no latin modern math in sizes. \writestatus{loading}{ConTeXt Font Macros / Initialization} %D Documentation is somewhat messy as it contains bits and pieces of %D previous versions. \unprotect %D There are several ways to specify a font. Three of them are %D pure \TeX\ ones, the fourth one is new: %D %D \starttyping %D \font\name=cmr12 %D \font\name=cmr12 at 10pt %D \font\name=cmr12 scaled 2 %D \font\name=cmr12 sa 1.440 %D \stoptyping %D %D The non||\TEX\ alternative \type{sa} stands for {\em scaled %D at}. This means as much as: scale the bodyfontsize with this %D factor. The scaled option is not that useful as one needs to %D know the design size. %D %D Because \type {sa} (scaled at) and \type {mo} (mapped on) %D are not low level \TEX\ supported alternatives, we have to %D test for it ourselves. In doing so, we need an auxiliary %D \DIMENSION. We cannot use \type{\scratchdimen} because font %D loading can happen at any moment due to postponed loading. %D We could instead have used dirty grouping tricks, but this %D one works too. % \enableexperiments[fonts.autorscale] % % \starttypescript[mscore] % \definetypeface [mscore] [rm] [serif] [mscoretimes] [default] % \definetypeface [mscore] [ss] [sans] [mscorearial] [default] [rscale=auto] % 0.860] % \definetypeface [mscore] [tt] [mono] [mscorecourier] [default] [rscale=auto] % 1.065] % \definetypeface [mscore] [mm] [math] [times] [default] [rscale=auto] % 1.020] % \stoptypescript % % \starttext % \setupbodyfont[mscore,12pt] % \startTEXpage % test \ss test \tt test % \stopTEXpage % \stoptext % \definetypeface[one][rm][serif][computer-roman][default] % \definetypeface[two][rm][serif][computer-roman][default][rscale=.9] % % {\one \bf test \two test} % {\one \bf test \pushcurrentfont \two \popcurrentfont test} %D \macros %D {rm,ss,tt,hw,cg} %D %D Fonts are defined in separate files. When we define a font, %D we distinguish between several styles. In most cases we will %D use: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC roman regular serif \NC \type{\rm} \NC\FR %D \NC sansserif sans support \NC \type{\ss} \NC\MR %D \NC type teletype mono \NC \type{\tt} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D The number of styles is not limited to these three. When %D using Lucida Bright we can for instance also define: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC handwritten \NC \type{\hw} \NC\FR %D \NC calligraphic \NC \type{\cg} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Within such a font set (\type{cmr}) and style (\type{\rm}) %D we can define a number of text font alternatives: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC typeface \NC \type{\tf} \NC\FR %D \NC boldface \NC \type{\bf} \NC\MR %D \NC slanted \NC \type{\sl} \NC\MR %D \NC italic \NC \type{\it} \NC\MR %D \NC boldslanted \NC \type{\bs} \NC\MR %D \NC bolditalic \NC \type{\bi} \NC\MR %D \NC smallcaps \NC \type{\sc} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Internally fonts are stored as combination of size, style %D and alternative, e.g. \type{12pt}+\type{\ss}+\type{\bf}. %D Users are not confronted with sizes, but use the style or %D style+alternative to activate them. %D %D During the definition of a bodyfont one can also declare the %D available larger alternatives: %D %D \starttyping %D \tf \tfa \tfb \tfc ... %D \bf \bfa \bfb \bfc ... %D \sl \sla \slb \slc ... %D \stoptyping %D %D The smaller ones are automatically supplied and derived from %D the the bodyfont environment. %D %D \starttyping %D \tfx \tfxx %D \bfx \bfxx %D \slx \slxx %D \stoptyping %D %D There are only two smaller alternatives per style. The %D larger alternatives on the other hand have no limitations. %D %D These larger alternatives are mostly used in chapter and %D section titles or on title pages. When one switches to a %D larger alternative, the bold an other ones automatically %D adapt themselves: %D %D \startbuffer %D \tfd Hi \bf there\sl, here \tfb I \bf am %D \stopbuffer %D %S \startnarrower %D \typebuffer %S \stopnarrower %D %D therefore becomes: %D %D \startexample %D \getbuffer %D \stopexample %D %D Maybe this mechanism isn't always as logic, but as said %D before, we tried to make it as intuitive as possible. %D %D So a specific kind of glyph can be characterized by: %D %D \startnarrower %D family (cmr) + bodyfont (12pt) + style (rm) + alternative (bf) + size (a) %D \stopnarrower %D %D The last component (the size) is optional. %D %D We introduced \type{\tf} as command to call for the current %D normally sized typeface. This commands results in roman, %D sans serif, teletype or whatever style is in charge. Such %D rather massive switches of style sometimes take more %D processing time than comfortable. Of course there is a %D workaround for this: we can call fonts directly by means of %D commands like: %D %D \starttyping %D \rmtf \sssl \tttf \rmbsa %D \stoptyping %D %D One should realize that this fast calls have limitations, %D they lack for instance automatic super- and subscript %D support. %D %D This leaves us two more commands: \type{\tx} and %D \type{\txx}. These activate a smaller and even more smaller %D font than the current one and adapt themselves to the %D current alternative, so when \type{\bf} is active, %D \type{\tx} gives a smaller boldface, which in turn can be %D called directly by \type{\bfx}. %D %D These two smaller alternatives are specified by the bodyfont %D environment and therefore not necessarily have similar sizes %D as \type{\scriptsize} and \type{\scriptscriptsize}. The main %D reason for this incompatibility (which can easily be undone) %D lays in the fact that we often want a bit bigger characters %D than in math mode. In \CONTEXT\ for instance the \type{\tx} %D and \type{\txx} commands are used for surrogate %D \cap{smallcaps} which support both nesting and alternatives, %D like in {\bf\cap{a \cap{small} world}}, which was typeset by %D %D \starttyping %D \bf\cap{a \cap{small} world} %D \stoptyping %D %D And compare $\rm \scriptstyle THIS$ with the slightly larger %D \cap{THIS}: \ruledhbox{$\rm \scriptstyle scriptstyle: THIS$} %D or \ruledhbox{\cap{x style: THIS}} makes a big difference. %D %D The \type{x..d} sizes should be used grouped. If you %D don't group them, i.e. call them in a row, \CONTEXT\ will %D not be able to sort out your intention (\type {x} inside %D \type {d} inside \type {x}. etc.). The following table %D demonstrates this: %D %D \def\FontState{\setstrut\ruledhbox{\strut Hello}} %D %D \starttabulate[|||||] %D \HL %D \NC \rlap{\quad\bf grouped} \NC \NC \type {\tx} \NC \type {\txx} \NC \NR %D \HL %D \NC \type{\tfx} \NC \tfx \FontState \NC \tfx \tx \FontState \NC \tfx \txx \FontState \NC \NR %D \NC \type{\tfxx} \NC \tfxx \FontState \NC \tfxx\tx \FontState \NC \tfxx\txx \FontState \NC \NR %D \NC \type{\tf} \NC \tf \FontState \NC \tf \tx \FontState \NC \tf \txx \FontState \NC \NR %D \NC \type{\tfa} \NC \tfa \FontState \NC \tfa \tx \FontState \NC \tfa \txx \FontState \NC \NR %D \NC \type{\tfb} \NC \tfb \FontState \NC \tfb \tx \FontState \NC \tfb \txx \FontState \NC \NR %D \NC \type{\tfc} \NC \tfc \FontState \NC \tfc \tx \FontState \NC \tfc \txx \FontState \NC \NR %D \NC \type{\tfd} \NC \tfd \FontState \NC \tfd \tx \FontState \NC \tfd \txx \FontState \NC \NR %D \NC \type{\tfx} \NC \tfx \FontState \NC \tfx \tx \FontState \NC \tfx \txx \FontState \NC \NR %D \NC \type{\tfxx} \NC \tfxx \FontState \NC \tfxx\tx \FontState \NC \tfxx\txx \FontState \NC \NR %D \HL %D \stoptabulate %D %D \blank %D %D \starttabulate[|||||] %D \HL %D \NC \rlap{\quad\bf stacked} \NC \NC \type {\tx} \NC \type {\txx} \NC \NR %D \HL %D \NC \type{\tfx} %D \NC \tfx \FontState %D \NC \tfx \tx \FontState %D \NC \tfx \txx \FontState %D \NC \NR %D \NC \type{\tfxx} %D \NC \tfx\tfxx \FontState %D \NC \tfx\tfxx \tx \FontState %D \NC \tfx\tfxx \txx \FontState %D \NC \NR %D \NC \type{\tf} %D \NC \tfx\tfxx\tf \FontState %D \NC \tfx\tfxx\tf \tx \FontState %D \NC \tfx\tfxx\tf \txx \FontState %D \NC \NR %D \NC \type{\tfa} %D \NC \tfx\tfxx\tf\tfa \FontState %D \NC \tfx\tfxx\tf\tfa \tx \FontState %D \NC \tfx\tfxx\tf\tfa \txx \FontState %D \NC \NR %D \NC \type{\tfb} %D \NC \tfx\tfxx\tf\tfa\tfb \FontState %D \NC \tfx\tfxx\tf\tfa\tfb \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb \txx \FontState %D \NC \NR %D \NC \type{\tfc} %D \NC \tfx\tfxx\tf\tfa\tfb\tfc \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc \txx \FontState %D \NC \NR %D \NC \type{\tfd} %D \NC \tfx\tfxx\tf\tfa\tfb\tfd \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfd \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfd \txx \FontState %D \NC \NR %D \NC \type{\tfx} %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx \txx \FontState %D \NC \NR %D \NC \type{\tfxx} %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \txx \FontState %D \NC \NR %D \HL %D \stoptabulate \fontslantperpoint \nullfont 0\scaledpoint \fontinterwordspace \nullfont 256377\scaledpoint \fontinterwordstretch\nullfont 128188\scaledpoint \fontinterwordshrink \nullfont 85459\scaledpoint \fontexheight \nullfont 338952\scaledpoint \fontemwidth \nullfont 786432\scaledpoint \fontextraspace \nullfont 85459\scaledpoint %D Tracing \newtoks\t_font_tracers_definitions \unexpanded\def\tracefontdefinitions {\the\t_font_tracers_definitions} %D Some housekeeping macros: \unexpanded\def\setfontparameters {\setfalse\c_font_synchronize \the\everybodyfont \settrue\c_font_synchronize} \unexpanded\def\savefont {\edef\savedfont{\the\font}% gives \csname \pushmacro\savedfont} \unexpanded\def\restorefont {\popmacro\savedfont \savedfont} \unexpanded\def\pushcurrentfont {\edef\popcurrentfont {\def\noexpand\fontbody {\fontbody}% \def\noexpand\fontstyle {\fontstyle}% \def\noexpand\fontalternative{\fontalternative}% \def\noexpand\fontsize {\fontsize}% \font_helpers_check_big_math_synchronization \font_helpers_synchronize_font}} %D \macros{definedfont} \let\thedefinedfont\relax % not to be confused with \everydefinefont \unexpanded\def\definedfont {\doifnextoptionalelse\font_basics_defined_font_yes\font_basics_defined_font_nop} \def\font_basics_defined_font_yes[#specification]% {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly \font_basics_define_font_without_parameters{thedefinedfont}{#specification}% \thedefinedfont \the\everydefinedfont} \def\font_basics_defined_font_nop {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly \thedefinedfont \the\everydefinedfont} %D \macros{startfont} \unexpanded\def\startfont{\begingroup\definedfont} \unexpanded\def\stopfont {\endgroup} %D \macros %D {everybodyfont,Everybodyfont,everyglobalbodyfont} %D %D Every change in bodyfont size has conseqences for the baseline %D distance and skips between paragraphs. These are initialized %D in other modules. Here we only provide the hooks that %D garantees their handling. %D At the system level one can initialize thing like: %D %D \starttyping %D \appendtoks \setupspacing \to \everybodyfont %D \stoptyping %D %D While users can add their own non standard commands like: %D %D \starttyping %D \EveryBodyFont{\message{changing to bodyfont \the\bodyfontsize}} %D \stoptyping %D %D Personnaly I never felt the need for such extensions, but %D at least its possible. %D \macros %D {globalbodyfontsize,localbodyfontsize,bodyfontsize} %D Here we have to distinguish between the global (overal) bodyfont %D size and the local (sometimes in the textflow) size. We store %D these dimensions in two \DIMENSION\ registers. These registers are %D not to be misused in calculations. \ifdefined\globalbodyfontsize\else \newdimen\globalbodyfontsize \fi \globalbodyfontsize=12pt \ifdefined\localbodyfontsize \else \newdimen\localbodyfontsize \fi \localbodyfontsize =\globalbodyfontsize \ifdefined\bodyfontsize \else \newdimen\bodyfontsize \fi \bodyfontsize =\globalbodyfontsize %D When we assign for instance 12pt to a \DIMENSION\ register the \type %D {\the}'d value comes out as 12.0pt, which is often not the way users %D specify the bodyfont size. Therefore we use normalized values. They %D are caches to save overhead in \LUA\ calls. \setnewconstant\fontdigits\plustwo \installcorenamespace{fontnormalizedbody} \def\normalizebodyfontsize#macro#body% {\expandafter\let\expandafter#macro\csname\??fontnormalizedbody\number\fontdigits:\number\dimexpr#body\endcsname \ifx#macro\relax \normalizebodyfontsize_indeed#macro{#body}% \fi} \def\normalizebodyfontsize_indeed#macro#body% {\edef#macro{\ctxcommand{nbfs(\number\dimexpr#body,\number\fontdigits)}}% \global\expandafter\let\csname\??fontnormalizedbody\number\fontdigits:\number\dimexpr#body\endcsname#macro} \def\thenormalizedbodyfontsize#body% {\ctxcommand{nbfs(\number\dimexpr#body\relax,\number\fontdigits)}} \edef\normalizedglobalbodyfontsize{\thenormalizedbodyfontsize\bodyfontsize} \edef\normalizedlocalbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} \edef\normalizedbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} %D \macros %D {mapfontsize} %D %D For special purposes, like in math, you may want to use %D slightly different sizes than the ones given. This happens %D for instance with the Math Times fonts. Mapped font sizes %D can be specified by using the \type {mo} key instead of %D \type {sa} in font definitions. %D %D \startbuffer %D \mapfontsize[10pt][11pt] %D \mapfontsize[11pt][12pt] %D \mapfontsize[12pt][13pt] %D %D \definefont[test][Serif]\test TEST \par %D \definefont[test][Serif sa 5]\test TEST \par %D \definefont[test][Serif mo 5]\test TEST \par %D \definefont[test][Serif sa d]\test TEST \par %D \definefont[test][Serif at 60pt]\test TEST \par %D \definefont[test][Serif scaled 6000]\test TEST \par %D \stopbuffer %D %D \typebuffer %D %D \startpacked %D \getbuffer %D \stoppacked \installcorenamespace{mappedfontsize} \unexpanded\def\mapfontsize {\dodoubleargument\font_basics_map_fontsize} \def\font_basics_map_fontsize[#from][#to]% {\setvalue{\??mappedfontsize\the\dimexpr#from\relax}{#to}} \def\font_basics_set_mapped_fontsize#from% {\ifcsname\??mappedfontsize\the\dimexpr#from\relax\endcsname \csname\??mappedfontsize\the\dimexpr#from\relax\endcsname\else#from% \fi} \installcorenamespace{fontbodyknown} \installcorenamespace{fontclassyes} % fontclass \installcorenamespace{fontclassnop} % nofontclass \def\font_helpers_process_relative_size_list#command% could be a toks {#command\v!big #command\v!small} \let\v_font_size_relative \plusone \def\v_font_size_absolute {\fontbody} \let\v_font_rscale_default\!!plusone \let\p_font_rscale \v_font_rscale_default \def\font_helpers_check_relative_font_id % can be plugged in later {\let\p_font_rscale\minusone \let\p_font_rscale\v_font_rscale_default} \def\font_helpers_check_relative_font_size#style% {\edef\p_font_rscale {\ifcsname\??fontclass\fontclass#style\s!rscale\endcsname \csname\??fontclass\fontclass#style\s!rscale\endcsname \else\ifcsname\??fontclass\defaultfontclass#style\s!rscale\endcsname % brr \csname\??fontclass\defaultfontclass#style\s!rscale\endcsname \else \v_font_rscale_default \fi\fi}% % move elsewhere \ifx\p_font_rscale\v!auto \let\p_font_rscale\plusone \font_helpers_check_relative_font_id \else \let\relativefontid\minusone \fi} \def\font_rscale_xx#style% {\ifcsname\??fontclass\fontclass#style\s!rscale\endcsname \csname\??fontclass\fontclass#style\s!rscale\endcsname \else \v_font_rscale_default \fi} \def\font_rscale_mm {\ifcsname\??fontclass\fontclass\s!mm\s!rscale\endcsname \csname\??fontclass\fontclass\s!mm\s!rscale\endcsname \else \v_font_rscale_default \fi} \def\font_helpers_register_fontbody#body% {\expandafter\let\csname\??fontbodyknown#body\endcsname\empty} %D \macros %D {definefontstyle,definefontsize,definefontalternative} %D %D When setting of switching the overall style we can use the %D short identifier like rm and ss, but when defined we can %D also use more verbose names like roman or sansserif. Such %D names are defined by: %D %D \starttyping %D \definefontstyle [serif,rm] [rm] %D \definefontstyle [sansserif,ss] [ss] %D \stoptyping \installcorenamespace{fontstyle} % full style prefix (roman etc) \installcorenamespace{fontshortstyle} % short style prefix (rm etc) \installcorenamespace{fontstyleknown} \installcorenamespace{fontalternativeknown} \installcorenamespace{fontsizeknown} \newtoks\t_font_style_commands \newtoks\t_font_size_commands \newtoks\t_font_alternative_commands \setnewmacro\m_font_style_command \gobbleoneargument \setnewmacro\m_font_size_command \gobbleoneargument \setnewmacro\m_font_alternative_command\gobbleoneargument \def\font_helpers_process_style_list #command{\def\m_font_style_command {#command}\the\t_font_style_commands} \def\font_helpers_process_size_list #command{\def\m_font_size_command {#command}\the\t_font_size_commands} \def\font_helpers_process_alternative_list#command{\def\m_font_alternative_command{#command}\the\t_font_alternative_commands} \def\font_helpers_register_style #style{\expandafter\let\csname\??fontstyleknown #style\endcsname\empty} \def\font_helpers_register_size #size{\expandafter\let\csname\??fontsizeknown #size\endcsname\empty} \def\font_helpers_register_alternative#alternative{\expandafter\let\csname\??fontalternativeknown#alternative\endcsname\empty} \unexpanded\def\definefontstyle {\dodoubleargument\font_basics_define_fontstyle} \def\font_basics_define_fontstyle[#commands][#style]% style: rm ss tt ... {\ifcsname\??fontstyleknown#style\endcsname \else % can be delayed till used (cg, hw) \font_helpers_register_style{#style}% \t_font_style_commands\expandafter{\the\t_font_style_commands \m_font_style_command{#style}}% \fi \processcommalist[#commands]{\font_basics_define_fontstyle_indeed{#style}}} \def\font_basics_define_fontstyle_indeed#style#command% {\setvalue{\??fontshortstyle#command}{#style}% \setvalue{\??fontstyle #command}{\csname#style\endcsname}} \unexpanded\def\definefontsize[#size]% {\ifcsname\??fontsizeknown#size\endcsname \else \font_helpers_register_size{#size}% \t_font_size_commands\expandafter{\the\t_font_size_commands \m_font_size_command{#size}}% \fi \font_helpers_check_fontname_combinations} \unexpanded\def\definefontalternative[#alternative]% {\ifcsname\??fontalternativeknown#alternative\endcsname \else \font_helpers_register_alternative{#alternative}% \t_font_alternative_commands\expandafter{\the\t_font_alternative_commands \m_font_alternative_command{#alternative}}% \fi \font_helpers_check_fontname_combinations} \unexpanded\def\font_helpers_check_fontname_combinations % we need to split math and text here ... todo (math only has mr and mb) {\font_helpers_process_style_list\font_helpers_check_fontname_combinations_s} \def\font_helpers_check_fontname_combinations_s#style% {\font_helpers_process_alternative_list{\font_helpers_check_fontname_combinations_indeed_s_a{#style}}} \def\font_helpers_check_fontname_combinations_indeed_s_a#style#alternative% {\font_helpers_process_size_list{\font_basics_check_fontname_combination{#style}{#alternative}}} \definefontstyle [\s!mm] [\s!mm] \definefontstyle [\s!rm] [\s!rm] \definefontstyle [\s!ss] [\s!ss] \definefontstyle [\s!tt] [\s!tt] %D We define all the font switching commands globally. After all they are part %D of the formal font interface once defined. The size can be empty (so %D checking is needed as \type {\bf} is already defined) %D The \type {\normal..} variants are available as extras for cases where %D the \type {..} is overloaded. \newmacro\m_font_mm \def\font_basics_check_fontname_combination#style% alternative size {\edef\m_font_mm{#style}% \ifx\m_font_mm\s!mm % prevents \max and alike (re)defs \expandafter\font_basics_check_math_bodyfont \else \expandafter\font_basics_check_text_bodyfont \fi{#style}} % no \m_font_mm, not expanded later on % \def\font_basics_check_math_bodyfont#style#alternative#size% % {%setugvalue{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}% \mr \mb % \setugvalue{#style}{\font_helpers_set_current_font_style{#style}}}% \mm \def\font_basics_check_math_bodyfont#style#alternative#size% {} \def\font_basics_check_text_bodyfont#style#alternative#size% size can be empty (checking needed as \bf is already defined) {\setugvalue{#style#size}{\font_helpers_set_current_font_style_size{#style}{#size}}% \rma \setugvalue{#alternative#size}{\font_helpers_set_current_font_alternative_size{#alternative}{#size}}% \sla \setugvalue{#style#alternative#size}{\font_helpers_set_current_font_style_alternative_size{#style}{#alternative}{#size}}% \rmsla \ifcsname\s!normal#style\endcsname % text/math check \expandafter\let\csname#style\expandafter\endcsname\csname\s!normal#style\endcsname \else \setugvalue{#style}{\font_helpers_set_current_font_style{#style}}% \rm \fi \ifcsname\s!normal#alternative\endcsname % text/math check \expandafter\let\csname#alternative\expandafter\endcsname\csname\s!normal#alternative\endcsname \else \setugvalue{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}% \sl \fi \setugvalue{#style\s!x}{\font_helpers_set_current_font_x_style_alternative{#style}}% \rmx \setugvalue{#style\s!xx}{\font_helpers_set_current_font_xx_style_alternative{#style}}% \rmxx \setugvalue{#alternative\s!x}{\font_helpers_set_current_font_x_alternative{#alternative}}% \slx \setugvalue{#alternative\s!xx}{\font_helpers_set_current_font_xx_alternative{#alternative}}% \slxx \setugvalue{#style#alternative}{\font_helpers_set_current_font_style_alternative{#style}{#alternative}}}% \rmsl %D Scaling macros: %D %D This system is somewhat complicated by two (possible conflicting) %D demands: %D %D \startitemize %D \item We support wildcards like \type {sa *} which will adapt %D to the current size. This is also the default specification. %D \item We support named scales like \type {sa d}; beware: \type %D {x} and \type {xx} are valid scales but they are not alway %D the same as the ones used in for instance \type {\bfx} because %D there the sized come from the bodyfont environment. In the %D future there maybe a switch that also honors the environment %D in named scales. %D \stopitemize %D %D Keep in mind that the smaller sizes are just for text super and %D subscripts while larger sizes can be used in titles where for %D instance math follows the size. % b:x{\definedfont[SerifBold sa b]x}{\bfb x $x^x$}\par % 1:x{\definedfont[SerifBold sa 1]x}{\bf x $x^x$}\par % x:x{\definedfont[SerifBold sa x]x}{\bfx x $x^x$}\par % xx:x{\definedfont[SerifBold sa xx]x}{\bfxx x $x^x$}\par % % *:x{\definedfont[Serif sa *]x}\par % 1:x{\definedfont[Serif sa 1]x}\par % 2:x{\definedfont[Serif sa 2]x}\par % 3:x{\definedfont[Serif sa 3]x}\par % 4:x{\definedfont[Serif sa 4]x}\par % 5:x{\definedfont[Serif sa 5]x}\par \def\safontscale{\number\dimexpr\v_font_size_absolute\relax} \def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax} \let\somefontname\s!unknown \let\somefontspec\s!unknown \let\somefontsize\zerocount \newcount\scaledfontmode % also used at the lua end \newcount\lastfontid % also used at the lua end / tex end \newtoks \everydefinefont \let\relativefontid\minusone % todo, not yet used \let\c_font_feature_inheritance_fontnone \zerocount % none \let\c_font_feature_inheritance_fontonly \plusone % fontonly \let\c_font_feature_inheritance_classonly \plustwo % classonly \let\c_font_feature_inheritance_fontfirst \plusthree % fontfirst \let\c_font_feature_inheritance_classfirst\plusfour % classfirst \let\c_font_feature_inheritance_default \c_font_feature_inheritance_fontfirst \setnewconstant\c_font_feature_inheritance_mode \c_font_feature_inheritance_default \newdimen \d_font_scaled_text_face \newdimen \d_font_scaled_font_size \newconditional\c_font_body_scale \newfraction \f_font_body_scale \unexpanded\def\font_helpers_low_level_define#specification#csname% {% we can now set more at the lua end \ctxcommand{definefont_one(\!!bs\luaescapestring{#specification}\!!es)}% the escapestring catches at \somedimen % sets \scaledfontmode and \somefontname and \somefontsize \ifcase\fontface\relax % \let\v_font_size_absolute\textface % fontbody \or \let\v_font_size_absolute\textface \or \let\v_font_size_absolute\scriptface \or \let\v_font_size_absolute\scriptscriptface \or \let\v_font_size_absolute\xtextface \or \let\v_font_size_absolute\xxtextface \fi % \ifcase\scaledfontmode\relax % none, avoid the designsize if possible \d_font_scaled_font_size-\plusthousand\scaledpoint \or % at \d_font_scaled_font_size\somefontsize \or % sa \d_font_scaled_font_size\v_font_size_absolute\relax \d_font_scaled_font_size\currentfontbodysize\d_font_scaled_font_size % uses \somefontsize set by lua \or % mo \d_font_scaled_font_size\font_basics_set_mapped_fontsize\v_font_size_absolute \d_font_scaled_font_size\currentfontbodysize\d_font_scaled_font_size \or % scaled, don't use this one as it's unpredictable \d_font_scaled_font_size-\somefontsize\scaledpoint \fi \relax \d_font_scaled_font_size\v_font_size_relative\d_font_scaled_font_size \ifconditional\c_font_auto_size \font_helpers_check_body_scale\fontsize \ifconditional\c_font_body_scale \d_font_scaled_font_size\f_font_body_scale\d_font_scaled_font_size \d_font_scaled_text_face\f_font_body_scale\dimexpr\textface\relax \else \d_font_scaled_font_size\f_font_body_scale \d_font_scaled_text_face\textface \fi \else \d_font_scaled_text_face\textface \fi \edef\somefontspec{at \number\d_font_scaled_font_size sp}% \edef\somefontfile{\truefontname\somefontname}% \ifx\somefontfile\s!unknown \edef\somefontfile{\defaultfontfile}% \fi \ifx\somefontfile\s!unknown \edef\somefontfile{\defaultfontfile}% \fi \font_helpers_update_font_parameters \font_helpers_update_font_class_parameters % \writestatus{fonts}{low level define: #csname/\somefontfile/\number\d_font_scaled_font_size/\fontface/\number\d_font_scaled_text_face}% \ctxcommand{definefont_two( \ifx\fontclass\empty false\else true\fi, "#csname", \!!bs\somefontfile\!!es, \number\d_font_scaled_font_size, \number\c_font_feature_inheritance_mode, "\m_font_class_features", "\m_font_features", "\m_font_class_fallbacks", "\m_font_fallbacks", \fontface, % 1/2/3: text script scriptscript 0/4/5: body x xx \number\d_font_scaled_text_face, "\number\relativefontid", % experiment "\m_font_class_goodies", % experiment (not yet used) "\m_font_goodies", "\m_font_class_designsize", "\m_font_designsize" )}% \edef\somefontspec{at \number\d_font_scaled_font_size sp}% we need the resolved designsize (for fallbacks) \expandafter\let\expandafter\lastrawfontcall\csname#csname\endcsname \the\everydefinefont \c_font_feature_inheritance_mode\c_font_feature_inheritance_default} \def\font_helpers_check_body_scale#fontsize% gets character (x xx a etc) {\ifcsname\??fontenvironments\fontclass\fontbody #fontsize\endcsname \setfalse\c_font_body_scale \expandafter\let\expandafter\f_font_body_scale \csname\??fontenvironments\fontclass\fontbody #fontsize\endcsname \else \ifcsname\??fontenvironments\fontclass\s!default#fontsize\endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale \csname\??fontenvironments\fontclass\s!default#fontsize\endcsname \else \ifcsname\??fontenvironments \fontbody #fontsize\endcsname \setfalse\c_font_body_scale \expandafter\let\expandafter\f_font_body_scale \csname\??fontenvironments \fontbody #fontsize\endcsname \else \ifcsname\??fontenvironments \s!default#fontsize\endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale \csname\??fontenvironments \s!default#fontsize\endcsname \else \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale \csname\??fontenvironments\fontclass\s!default\s!text \endcsname \else \ifcsname\??fontenvironments \s!default\s!text \endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale \csname\??fontenvironments \s!default\s!text \endcsname \else \settrue \c_font_body_scale \let\f_font_body_scale\plusone \fi\fi\fi\fi\fi\fi} %D The following macros are used at the \LUA\ end. Watch the \type {\normal} %D hackery: this makes the mkvi parser happy. \normaldef\fntsetdefname {\global\let\somefontname\defaultfontfile} % do before calling \normaldef\fntsetsomename{\normalgdef\somefontname} % takes argument \normaldef\fntsetnopsize {\let\somefontsize\empty} % do before calling \normaldef\fntsetsomesize{\normaldef\somefontsize} % takes argument \newif\ifskipfontcharacteristics \skipfontcharacteristicstrue %D When fontclasses are used, we define the font global, since namespaces are %D used. Otherwise we parse the specs each time. \let\fontfile\s!unknown %D \macros %D {everyfont,everyfontswitch} \ifdefined\everyfont \else \newtoks\everyfont \fi \ifdefined\everyfontswitch \else \newtoks\everyfontswitch \fi \def\setfontcharacteristics{\the\everyfont} %D \macros %D {definefont} %D %D We also accept \type{sa a}||\type{sa d} as specification. %D %D Before we implement the main definition macro, we first show %D one for local use: %D %D \starttyping %D \definefont[Some][LucidaBright at 100pt] \Some some %D \definefont[More][LucidaBright scaled 3000] \More more %D \definefont[Nice][LucidaBright mo 2] \Nice nice %D \definefont[Text][LucidaBright sa 5.4] \Text last %D \stoptyping %D %D The implementation looks as follows: \unexpanded\def\definefont % [name][spec][1.6 | line=10pt | setup_id] {\dotripleempty\font_basics_define_font} \def\font_basics_define_font {\ifthirdargument \expandafter\font_basics_define_font_a \else \expandafter\font_basics_define_font_b \fi} \def\font_basics_define_font_a[#name][#specification][#settings]% [name][spec][1.6 | line=10pt | setup_id] {\doifsetupselse{#settings}% {\setuvalue{#name}{\font_basics_define_font_with_setups {#name}{#specification}{#settings}}} {\setuvalue{#name}{\font_basics_define_font_with_parameters{#name}{#specification}{#settings}}}} \def\font_basics_define_font_b[#name][#specification][#dummy]% {\setuvalue{#name}{\font_basics_define_font_without_parameters{#name}{#specification}}} \def\font_basics_define_font_with_parameters#name#specification#settings% {\font_basics_define_font_without_parameters{#name}{#specification}% \setuplocalinterlinespace[#settings]% \setupspacing\relax} % is this really needed ? \def\font_basics_define_font_with_setups#name#specification#settings% {\font_basics_define_font_without_parameters{#name}{#specification}% \setups[#settings]} %D Beware, in the frozen variants no settings are supported yet, but that might happen %D some day. \unexpanded\def\definefrozenfont {\dotripleempty\font_basics_define_frozen_font} \def\font_basics_define_frozen_font[#name][#specification][#settings]% {\begingroup \font_basics_define_font[#name][#specification][#settings]% \csname#name\endcsname \expandafter\endgroup\expandafter\let\csname#name\endcsname\lastrawfontcall} %D The instance namespace protection makes the switch local so that we can redefine a %D logical name and/or change the size in between. % todo: now mathsize twice in name (so it can go here) % todo: check when mathsize is needed \ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi \ifdefined\??fontinstancebasic \else \installcorenamespace{fontinstancebasic} \fi \ifdefined\??fontinstanceclass \else \installcorenamespace{fontinstanceclass} \fi \newconditional\c_font_auto_size \settrue\c_font_auto_size \let\lastfontidentifier\empty \def\v_font_identifier_basic{\??fontinstancebasic \lastfontidentifier-\fontsize-\fontface} \def\v_font_identifier_class{\??fontinstanceclass\fontclass-\lastfontidentifier-\fontsize-\fontface} \let\v_font_identifier_basic_saved\v_font_identifier_basic \let\v_font_identifier_class_saved\v_font_identifier_class % \def\v_font_identifier_class{\??fontinstanceclass\fontclass-\lastfontidentifier-\fontstyle-\fontsize} % no \fontface \def\font_basics_define_font_without_parameters#identifier#2% {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly \edef\lastfontidentifier{#identifier}% \let\v_font_size_relative\v_font_rscale_default \let\v_font_size_absolute\fontbody \font_helpers_low_level_define{#2}\v_font_identifier_basic \csname\v_font_identifier_basic\endcsname \setfalse\c_font_auto_size \setfontcharacteristics \the\everyfontswitch \let\v_font_identifier_basic\v_font_identifier_basic_saved} \unexpanded\def\font_helpers_trigger#identifier% make a traced variant {\edef\lastfontidentifier{#identifier}% \ifcsname\v_font_identifier_class\endcsname % \writestatus{fonts}{trigger: reusing \v_font_identifier_class}% \expandafter\font_helpers_trigger_reuse \else % \writestatus{fonts}{trigger: defining \v_font_identifier_class}% \expandafter\font_helpers_trigger_define \fi} \def\font_helpers_trigger_define#relative#absolute#specification% {\def\v_font_size_relative{#relative}% \def\v_font_size_absolute{#absolute}% \font_helpers_low_level_define{#specification}\v_font_identifier_class \csname\v_font_identifier_class\endcsname \setfalse\c_font_auto_size \ifskipfontcharacteristics \else \setfontcharacteristics \the\everyfontswitch \fi \let\v_font_identifier_class\v_font_identifier_class_saved} \def\font_helpers_trigger_reuse#relative#absolute#specification% {\csname\v_font_identifier_class\endcsname \setfalse\c_font_auto_size \ifskipfontcharacteristics \else \setfontcharacteristics \the\everyfontswitch \fi \let\v_font_identifier_class\v_font_identifier_class_saved} %D \macros %D {currentfontbodyscale} %D %D Sometimes we need to have access to the font scale %D including the \type{a}||\type{d} sizes. The next macro %D returns the current scaling factor. Take a look at %D \type {cont-log.tex} for an example of its use. \installcorenamespace{fontenvironments} % \def\currentfontbodysize % {\ifcsname\??fontenvironments\s!default\somefontsize\endcsname % \csname\??fontenvironments\s!default\somefontsize\endcsname % \else % \somefontsize % \fi} % % \def\currentfontbodyscale % {\csname\??fontenvironments\s!default % \ifcsname\??fontenvironments\s!default\fontsize\endcsname \fontsize \else % \ifcsname\??fontenvironments\s!default\s!text \endcsname \s!text \fi\fi % \endcsname} \def\currentfontbodysize % gets number (the normal sa 1 etc) {\ifcsname\??fontenvironments\fontclass\s!default\somefontsize\endcsname \csname\??fontenvironments\fontclass\s!default\somefontsize\endcsname \else\ifcsname\??fontenvironments\s!default\somefontsize\endcsname \csname\??fontenvironments\s!default\somefontsize\endcsname \else \somefontsize \fi\fi} \def\currentfontbodyscale % gets character (x xx a etc) {\csname\??fontenvironments \ifcsname\??fontenvironments\fontclass\s!default\fontsize\endcsname\fontclass\s!default\fontsize\else \ifcsname\??fontenvironments \s!default\fontsize\endcsname \s!default\fontsize\else \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname\fontclass\s!default\s!text \else \ifcsname\??fontenvironments \s!default\s!text \endcsname \s!default\s!text \else \s!default \fi\fi\fi\fi \endcsname} \def\currentfontscale % used in default definition {\csname\??fontenvironments \ifcsname\??fontenvironments\fontclass\s!default\xfontsize\endcsname\fontclass\s!default\fontsize\else \ifcsname\??fontenvironments \s!default\xfontsize\endcsname \s!default\fontsize\else \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname\fontclass\s!default\s!text \else \ifcsname\??fontenvironments \s!default\s!text \endcsname \s!default\s!text \else \s!default \fi\fi\fi\fi \endcsname} \setvalue{\??fontenvironments\s!default}{1} %D In the following macros we use \type{\currentxfontsize} to %D hold the current x||size of the font. This enables us to %D support for instance \type{\sl} inside a \type{\tx} switch. \newconstant\currentxfontsize \def\xfontsize{\ifcase\currentxfontsize\fontsize\or\s!x\else\s!xx\fi} %D Now we enter the area of font switching. The switching %D mechanism has to take care of several situations, like: %D %D \startitemize[packed] %D \item changing the overal document fonts (including margins, %D headers and footers) %D \item changing local fonts (only the running text) %D \item smaller and even more smaller alternatives (super- %D and subscripts) %D \stopitemize %D %D \TEX\ offers a powerfull family mechanism for super- and %D subscripts in math mode. In text mode however, we don't use %D families for the smaller alternatives, and therefore have %D to take care of it otherwise. %D \macros %D {definebodyfontenvironment,setupbodyfontenvironment} %D %D The relationship between the several sizes of a font, is %D defined by: %D %D \showsetup{definebodyfontenvironment} %D %D Later on we will see how these parameters are used, so for %D the moment we stick with an example: %D %D \starttyping %D \definebodyfontenvironment %D [12pt] %D [ text=12pt, %D script=9pt, %D scriptscript=7pt, %D x=10pt, %D xx=8pt, %D big=12pt, %D small=10pt] %D \stoptyping %D %D The first argument specifies the bodyfont size to which the %D settings apply. All second parameters are specified in %D dimensions and tell us more about related sizes. %D %D Afterwards, one can change values with %D %D \showsetup{setupbodyfontenvironment} %D %D When instead of a size the keyword \type{unknown} is %D passed, fractions (relations) are used instead of fixed %D sizes. %D {\bf Remark:} We need to cover the following cases, otherwise users can %D get confused: %D %D \starttyping %D \setupbodyfont[23pt] %D %D \definebodyfontenvironment[23pt] %D \setupbodyfont[23pt] %D %D \definebodyfontenvironment[23pt] %D \definebodyfont[23pt][rm,ss,tt][default] %D \setupbodyfont[23pt] %D \stoptyping %D %D Beware: while some font defs can be global, the bodyfont %D environment checks local. This means that multiple local %D checks resulting in definitions are not that efficient. %D So, apart from an occasional switch, one should define an %D environment at the outer level. % \definebodyfontenvironment[33pt] % \definebodyfontenvironment[dejavu][default][1=.5] % \definebodyfontenvironment[dejavu][default][x=1.2] % \definebodyfontenvironment[dejavu][default][a=5] % \definebodyfontenvironment[dejavu][33pt][x=100pt] % the lookup order is: % % [class] [dimension] [parameters] % [class] [default] [parameters] % factors % [dimension] [parameters] % [default] [parameters] % factors % % with defaults providing factors % todo: class:size % todo: make assignments global \letvalue\??fontenvironments\empty % so we default to empty \def\bodyfontvariable#parameter% {\csname\??fontenvironments \ifcsname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname\fontclass\normalizedbodyfontsize#parameter\else \ifcsname\??fontenvironments\fontclass #parameter\endcsname\fontclass #parameter\else \ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname \normalizedbodyfontsize#parameter\else \ifcsname\??fontenvironments\s!default #parameter\endcsname\s!default #parameter\fi\fi\fi\fi \endcsname} \def\bodyfontsizevariable#size#parameter% {\csname\??fontenvironments \ifcsname\??fontenvironments\fontclass#size#parameter\endcsname\fontclass#size#parameter\else \ifcsname\??fontenvironments\fontclass #parameter\endcsname\fontclass #parameter\else \ifcsname\??fontenvironments #size#parameter\endcsname #size#parameter\else \ifcsname\??fontenvironments\s!default #parameter\endcsname\s!default #parameter\fi\fi\fi\fi \endcsname} \def\bodyfontinterlinespace{\bodyfontvariable\c!interlinespace} % used elsewhere \def\bodyfontdimension#class#size#parameter#body% {\the\dimexpr \ifcsname\??fontenvironments #class#size#parameter\endcsname \csname\??fontenvironments #class#size#parameter\endcsname \else \ifcsname\??fontenvironments#class\s!default#parameter\endcsname \csname\??fontenvironments#class\s!default#parameter\endcsname\dimexpr#body\relax\else % factor \ifcsname\??fontenvironments #size#parameter\endcsname \csname\??fontenvironments #size#parameter\endcsname \else \csname\??fontenvironments \s!default#parameter\endcsname\dimexpr#body\relax\fi\fi\fi % factor \relax} \unexpanded\def\definebodyfontenvironment {\dotripleempty\font_basics_define_body_font_environment} \let\setupbodyfontenvironment\definebodyfontenvironment \installcorenamespace{fontenvironmentknown} \let\bodyfontenvironmentlist\empty % used in font-run (might change) \def\font_helpers_register_environment#class#body% {\expandafter\let\csname\??fontenvironmentknown#class#body\endcsname\empty} \newmacro\m_font_body \newmacro\m_font_body_normalized \def\font_basics_define_body_font_environment {\ifthirdargument \singleexpandafter\font_basics_define_body_font_environment_class \else\ifsecondargument \doubleexpandafter\font_basics_define_body_font_environment_empty \else \doubleexpandafter\font_basics_define_body_font_environment_unset \fi\fi} %D First we handle the class specific case. Beware: you can change values before %D a bodyfont is loaded but changing them afterwards can be sort of tricky as %D values are not consulted afterwards. \def\font_basics_define_body_font_environment_class[#class][#body][#settings]% {\edef\m_font_body{#body}% \ifx\m_font_body\s!default % these are the last resort within a class \getrawparameters[\??fontenvironments#class\s!default][#settings]% \else \normalizebodyfontsize\m_font_body_normalized\m_font_body \font_basics_define_body_font_environment_size[#class][\m_font_body_normalized][#settings]% \addtocommalist\m_font_body_normalized\bodyfontenvironmentlist \fi} %D The empty case uses the same code but needs to ignore the current class %D settings (just to be sure, as it's not really needed). \def\font_basics_define_body_font_environment_empty[#body][#settings][#dummy]% {\pushmacro\fontclass \let\fontclass\empty \font_basics_define_body_font_environment_class[][#body][#settings]% \popmacro\fontclass} \def\font_basics_define_body_font_environment_unset[#body][#dummya][#dummyb]% {\pushmacro\fontclass \let\fontclass\empty \font_basics_define_body_font_environment_class[][#body][]% \popmacro\fontclass} %D We don't check too soon as we can refer to later definitions. \newconditional\c_font_defining_environment_state % controls messages \def\font_basics_define_body_font_environment_size[#class][#normalizedbody][#settings]% normalized body {\getrawparameters[\??fontenvironments#class#normalizedbody][#settings]% \ifcsname\??fontenvironmentknown#class#normalizedbody\endcsname % environment and size already defined \else\ifproductionrun \pushmacro\fontclass \edef\fontclass{#class}% \font_helpers_register_environment{#class}{#normalizedbody}% \settrue\c_font_defining_environment_state \font_helpers_define_unknown_font{#normalizedbody}% current class \setfalse\c_font_defining_environment_state \popmacro\fontclass \fi\fi \font_helpers_register_fontbody{#normalizedbody}} %D Checking \def\font_helpers_check_bodyfont_environment#normalizedbody#body% {\ifcsname\??fontenvironmentknown\fontclass#normalizedbody\endcsname % already defined \else \font_helpers_check_bodyfont_environment_indeed{#normalizedbody}{#body}% \fi} \def\font_helpers_check_bodyfont_environment_indeed#normalizedbody#body% {\font_helpers_register_environment\fontclass{#normalizedbody}% \ifcsname\??fontbodyknown#normalizedbody\endcsname \else \font_helpers_define_unknown_font{#normalizedbody}% \fi} %D We default all parameters to the main bodyfont size, so the next %D setup is valid too: %D %D \starttyping %D \definebodyfontenvironment[24pt] %D \stoptyping %D %D All parameters can be redefined when needed, so one doesnot have to %D stick to the default ones. %D \macros %D {definebodyfont} %D %D The next step in defining a bodyfont involves the actual font %D files, which can be recognized by their extension %D \type{tfm}. Installing those file is often beyond the %D scope of the user and up to the system administrator. %D %D \showsetup{definebodyfont} %D %D This commands takes three arguments: a (series of) bodyfont %D size(s), the style group to which the definitions belong, %D and an alternative, as specified by the \TEX\ (math) families, %D extended with~a, b~\unknown. %D %D We show two examples, that show all the alternative %D scaling options. The \type{\tfa} alternatives can be %D extended with \type{\bfa}, \type{\slb}, etc. or even %D \type{e} and higher alternatives. The magic scaled %D values are derived from plain \TEX's \type {\magstep}: %D %D \starttyping %D \definebodyfont [12pt] [rm] %D [tf=cmr12, %D bf=cmbx12, %D it=cmti12, %D sl=cmsl12, %D bi=cmbxti10 at 12pt, %D bs=cmbxsl10 at 12pt, %D tfa=cmr12 scaled 1.200, %D tfb=cmr12 scaled 1.440, %D tfc=cmr12 scaled 1.728, %D tfd=cmr12 scaled 2.074, %D sc=cmcsc10 at 12pt] %D %D \definebodyfont [12pt,11pt,10pt,9pt,8pt] [rm] %D [tf=lbr sa 1, %D bf=lbd sa 1, %D it=lbi sa 1, %D sl=lbsl sa 1, %D bi=lbdi sa 1, %D bs=lbdi sa 1, %D tfa=lbr sa 1.200, %D tfb=lbr sa 1.440, %D tfc=lbr sa 1.728, %D tfd=lbr sa 2.074, %D sc=lbr sa 0.833] %D \stoptyping %D %D The second example shows that we can define more sizes at %D once. The main difference between these examples is that the %D Computer Modern Roman come in many design sizes. This means %D that there we cannot define them in bulk using \type{sa}. %D Instead of \type{rm} (roman) one can define \type{ss} (sans %D serif), \type{tt} (teletype), \type{hw} (hand written), %D \type{cg} (calygraphic) and whatever styles. %D %D The first argument may be a comma separated list. This, %D combined with specifications using \type{sa} can save a lot %D of typing. Although all arguments should be specified, we %D treat the second argument as optional. %D %D Defining a bodyfont involves two actions: defining the %D specific style related alternatives, like \type{\rma}, %D \type{\bfa} and \type{\rmsla}, and storing the definitions %D of their bodyfont size related fonts. The first step is %D bodyfont independant but executed every time. This permits %D user definitions like \type{\tfw} or \type{\bfq} for real %D large alternatives. %D If we move design size info to the lfg file (after all only lm %D has design sizes) we can get rid of much code .. 2012 or so. \installcorenamespace{fontdefinitions} % [class] [name] [rm,ss] [settings] % [class] [10pt,11pt] [rm,ss] [settings] % [class] [10pt,11pt] [rm,ss] [name] % [class] [name] [settings] == [name] [rm] [settings] % [class] [10pt,11pt] [settings] == [name] [rm] [settings] % [class] [10pt,11pt] [name] == [10pt,11pt] [rm] [name] \unexpanded\def\definebodyfont {\doquadrupleempty\font_basics_define_body_font} \def\font_basics_define_body_font[#1][#2][#3][#4]% {\iffourthargument \processcommacommand[#1]{\font_basics_define_body_font_class_given[#2][#3][#4]}% \else \font_basics_define_body_font_class_known[#1][#2][#3]% \fi} \def\font_basics_define_body_font_class_given[#1][#2][#3]#4% {\pushmacro\fontclass \doifelse{#4}\s!default {\let\fontclass\empty} {\def\fontclass{#4}}% \definebodyfont[#1][#2][#3]% \popmacro\fontclass} \def\font_basics_define_body_font_class_known {\ifthirdargument \singleexpandafter\font_basics_define_body_font_a \else\ifsecondargument \doubleexpandafter\font_basics_define_body_font_b \else \doubleexpandafter\font_basics_define_body_font_c \fi\fi} \unexpanded\def\font_basics_define_body_font_b[#whatever][#specification][#dummy]% body|identifier defs|identifier {\font_basics_define_body_font_a[#whatever][\s!rm][#specification]} \unexpanded\def\font_basics_define_body_font_c[#whatever][#dummya][#dummyb]% body|identifier {\font_basics_define_body_font_a[bwhatever][\s!rm][]} \unexpanded\def\font_basics_define_body_font_a[#whatever]% {\doifnumberelse{#whatever}% \font_basics_define_body_font_body \font_basics_define_body_font_name [#whatever]} \unexpanded\def\font_basics_define_body_font_body[#body][#style][#specification]% {\doifassignmentelse{#specification} \font_basics_define_body_font_body_assignment \font_basics_define_body_font_body_identifier [#body][#style][#specification]}% \unexpanded\def\font_basics_define_body_font_name[#name][#style][#specification]% {\doifassignmentelse{#specification} \font_basics_define_body_font_name_assignment \font_basics_define_body_font_name_identifier [#name][#style][#specification]}% \unexpanded\def\font_basics_define_body_font_body_assignment[#bodylist][#stylelist][#assignments]% {\processcommalist[#bodylist]{\font_basics_define_body_font_body_assignment_a{#stylelist}{#assignments}}} \unexpanded\def\font_basics_define_body_font_body_assignment_a#stylelist#assignments#body% {\normalizebodyfontsize\m_font_asked_body{#body}% % normally we define quite a lot in advance, i.e global defs \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body % !! \processcommalist[#stylelist]{\font_basics_define_body_font_body_assignment_b{#assignments}}} \unexpanded\def\font_basics_define_body_font_body_assignment_b#assignments#style% {\edef\m_font_asked_style{#style}% \processcommalist[#assignments]\font_basics_define_body_font_defs} \unexpanded\def\font_basics_define_body_font_defs {\ifx\fontclass\empty \expandafter\font_basics_define_body_font_defs_nop \else \expandafter\font_basics_define_body_font_defs_yes \fi} \unexpanded\def\font_basics_define_body_font_defs_yes_normal#assignment% {\ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_yes_mm \else \expandafter\font_basics_define_body_font_yes_xx \fi[#assignment]} \unexpanded\def\font_basics_define_body_font_defs_nop_normal#assignment% {\ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_nop_mm \else \expandafter\font_basics_define_body_font_nop_xx \fi[#assignment]} \unexpanded\def\font_basics_define_body_font_defs_yes_traced#assignment% {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}% \ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_yes_mm \else \expandafter\font_basics_define_body_font_yes_xx \fi[#assignment]} \unexpanded\def\font_basics_define_body_font_defs_nop_traced#assignment% {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}% \ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_nop_mm \else \expandafter\font_basics_define_body_font_nop_xx \fi[#assignment]} \let\font_basics_define_body_font_defs_yes\font_basics_define_body_font_defs_yes_normal \let\font_basics_define_body_font_defs_nop\font_basics_define_body_font_defs_nop_normal \appendtoks \let\font_basics_define_body_font_defs_yes\font_basics_define_body_font_defs_yes_traced \let\font_basics_define_body_font_defs_nop\font_basics_define_body_font_defs_nop_traced \to \t_font_tracers_definitions % We split into two characters (first part of spec) and the rest: the first two are the style and % the rest is a size, although in practice one will seldom define the size directly. We might even % drop that as it gives faster code. \unexpanded\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]% local {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname\undefined \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname\undefined \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname\undefined \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}% } \unexpanded\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]% global {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi \global\expandafter\let\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-1\endcsname\undefined \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-0}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% \global\expandafter\let\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-2\endcsname\undefined \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-4}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% \global\expandafter\let\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-3\endcsname\undefined \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-5}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space yes: {\expandafter\meaning\csname\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname} %D Here the rest concerns rl or lr so in this case it is not a size specifier but %D a directional one. \unexpanded\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]% local {%\ifcsname\s!mm\endcsname\else\font_basics_check_fontname_combination\s!mm{#one#two}{#rest}\fi \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-1\endcsname\undefined % \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-2\endcsname\undefined % \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-3\endcsname\undefined \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\s!mm-#one#two#rest\endcsname {\font_helpers_trigger{\m_font_asked_body-\s!mm-#one#two#rest}{\noexpand\font_rscale_mm}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space nop: \expandafter\meaning\csname\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname}% \unexpanded\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]% global {%\ifcsname\s!mm\endcsname\else\font_basics_check_fontname_combination\s!mm{#one#two}{#rest}\fi \global\expandafter\let\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-1\endcsname\undefined % \global\expandafter\let\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-2\endcsname\undefined % \global\expandafter\let\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-3\endcsname\undefined \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\s!mm-#one#two#rest\endcsname {\font_helpers_trigger{\m_font_asked_body-\s!mm-#one#two#rest}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space yes: \expandafter\meaning\csname\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname}% \unexpanded\def\font_basics_define_body_font_body_identifier[#bodylist][#stylelist][#name]% {\processcommalist[#bodylist]{\font_basics_define_body_font_body_identifier_a{#stylelist}{#name}}} \unexpanded\def\font_basics_define_body_font_body_identifier_a#stylelist#name#body% {\normalizebodyfontsize\m_font_asked_body{#body}% \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body % !! \processcommalist[#stylelist]{\font_basics_define_body_font_body_identifier_b{#name}}} \unexpanded\def\font_basics_define_body_font_body_identifier_b#name#style% {\edef\m_font_asked_style{#style}% %\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] => [#name]}% \csname\??fontdefinitions#name:\m_font_asked_style\endcsname} % no checking \unexpanded\def\font_basics_define_body_font_name_assignment[#name][#stylelist][#assignments]% {\processcommalist[#stylelist]{\font_basics_define_body_font_name_assignment_a{#name}{#assignments}}} \unexpanded\def\font_basics_define_body_font_name_assignment_a#name#assignments#style% {%\writestatus\m!fonts{[#name:#style] => [#assignments]}% \setevalue{\??fontdefinitions#name:#style}{\font_basics_define_body_font_default{#assignments}}} \unexpanded\def\font_basics_define_body_font_name_identifier[#name][#stylelist][#identifier]% {\processcommalist[#stylelist]{\font_basics_define_body_font_name_identifier_a{#name}{#identifier}}} \unexpanded\def\font_basics_define_body_font_name_identifier_a#name#identifier#style% {%\writestatus\m!fonts{[#name:#style] => [##identifier:#style]}% \ifcsname\csname\??fontdefinitions#name:#style\endcsname \expandafter\let\csname\??fontdefinitions#name:#style\expandafter\endcsname\csname\??fontdefinitions#identifier:#style\endcsname \else \expandafter\def\csname\??fontdefinitions#name:#style\endcsname{\csname\??fontdefinitions#identifier:#style\endcsname}% \fi} %D The unknown: \newconditional\c_font_defining_unknown \newconditional\c_font_defining_state \unexpanded\def\font_helpers_define_unknown_font#body% one level only {\font_helpers_register_fontbody{#body}% prevents loop, can go \setfalse\c_font_defining_state \font_helpers_process_relative_size_list{\font_helpers_define_unknown_check_sizes{#body}}% \ifconditional\c_font_defining_state \setfalse\c_font_defining_state \font_helpers_process_style_list{\font_helpers_define_unknown_check_definitions{#body}}% \ifconditional\c_font_defining_state \ifconditional\c_font_defining_environment_state\else \showmessage\m!fonts{14}{#body}% main \fi \setfalse\c_font_defining_state \font_helpers_register_fontbody{#body}% % needed ? \ifconditional\c_font_defining_unknown \else \settrue\c_font_defining_unknown \font_helpers_process_relative_size_list{\font_helpers_define_unknown_check_relatives{#body}}% \setfalse\c_font_defining_unknown \fi \fi \fi} \def\font_helpers_define_unknown_check_sizes#body#relativesize% {\ifcsname\??fontenvironments\s!default#relativesize\endcsname % fontclass ? \expandafter\normalizebodyfontsize\csname\??fontenvironments#body#relativesize\endcsname{\csname\??fontenvironments\s!default#relativesize\endcsname\dimexpr#body\relax}% \settrue\c_font_defining_state \fi} \def\font_helpers_define_unknown_check_definitions#body#style% {\ifcsname\??fontdefinitions\s!default:#style\endcsname \edef\m_font_asked_body{#body}% \edef\m_font_asked_style{#style}% \csname\??fontdefinitions\s!default:#style\endcsname % {#body}{#style}% \settrue\c_font_defining_state \fi} \def\font_helpers_define_unknown_check_relatives#body#relativesize% {\ifcsname\??fontbodyknown\csname\??fontenvironments#body#relativesize\endcsname\endcsname \else \expandafter\font_helpers_define_unknown_font\csname\??fontenvironments#body#relativesize\endcsname \settrue\c_font_defining_state \fi} \unexpanded\def\font_basics_define_body_font_default#assignments% {\font_helpers_check_relative_font_size\m_font_asked_style % still needed here? \ifcsname\m_font_asked_style\endcsname\else \normalexpanded{\definefontstyle[\m_font_asked_style][\m_font_asked_style]}% \fi \processcommalist[#assignments]\font_basics_define_body_font_defs \let\p_font_rscale\v_font_rscale_default} %D These macros show that quite some definitions take place. Fonts are not loaded %D yet! This means that at format generation time, no font files are present. \unexpanded\def\font_basics_switch_points#body% {\ifcsname\??fontbodyknown#body\endcsname \else % we need to check the relative sizes for this body \font_helpers_define_unknown_font{#body}% \fi% \ifcsname\??fontbodyknown#body\endcsname % always true now \font_basics_complete_switch{#body}% \localbodyfontsize#body\relax \normalizebodyfontsize\normalizedbodyfontsize\localbodyfontsize \font_helpers_check_bodyfont_environment\normalizedbodyfontsize\normalizedbodyfontsize % !! \else \showmessage\m!fonts4{#body}% \fi} \unexpanded\def\font_basics_switch_style#style% {\ifcsname\??fontstyle#style\endcsname \csname\??fontstyle#style\endcsname \edef\fontstyle{#style}% \ifmmode\mr\fi % in order to be compatible with \rm in math mode % \the\everybodyfont % cleaner, in setting size as well as style \else \showmessage\m!fonts5{#style}% \fi} %D Here comes the main font switching macros. These macros %D handle changes in size as well as returning to the global %D bodyfont size. \ifdefined\font_preloads_at_definition \else \let\font_preloads_at_definition\relax \fi \def\font_helpers_set_font#method#specification% {\edef\m_font_specification{#specification}% \ifx\m_font_specification\empty \else \ifx\m_font_specification\v!global % we can have all kind of presets \restoreglobalbodyfont \else \processcommacommand[\m_font_specification]{\font_helpers_set_font_check_size}% \processcommacommand[\m_font_specification]{\font_helpers_set_font_set_font{#method}}% \ifproductionrun \font_preloads_at_definition \font_basics_switch_points\normalizedbodyfontsize \font_basics_switch_style\fontstyle \ifx\defaultfontclass\empty \let\defaultfontclass\fontclass \fi \fi \fi \currentxfontsize\zerocount \fi} \def\font_helpers_set_font_check_size#option% {\doifnumberelse{#option}{\font_helpers_check_bodyfont_environment{#option}{#option}}\donothing} \def\font_helpers_set_font_set_font#method#option% method=1: set, method=2: switch {\doifsomething{#option}{\font_helpers_set_font_set_font_option{#method}{#option}}} \def\font_helpers_set_font_set_font_option#method#option% {\doifnumberelse{#option}% \font_helpers_set_font_set_font_option_body \font_helpers_set_font_set_font_option_keyword {#method}{#option}{#option}} \newmacro\m_font_keyword \unexpanded\def\font_helpers_set_font_set_font_option_keyword#method#keyword#message% {\edef\m_font_keyword{#keyword}% \ifcsname\??fontenvironments\normalizedbodyfontsize\m_font_keyword\endcsname \edef\m_font_step{\bodyfontvariable\m_font_keyword}% \normalexpanded{\font_helpers_set_font_set_font_option_body{#method}{\m_font_step}{#message}}% \else\ifx\m_font_keyword\v!reset \let\fontstyle\empty % new 31/7/2006 \let\fontsize \empty \else\ifcsname\??fontstyle\m_font_keyword\endcsname \let\fontstyle\m_font_keyword \else \setcurrentfontclass\m_font_keyword \ifcase#method\relax \let\globalfontclass\globalfontclass % -) \else \let\globalfontclass\fontclass \fi \font_helpers_set_fontstyle_of_fontclass \fi\fi\fi} \def\font_helpers_set_fontstyle_of_fontclass % will be overloaded later {\let\fontstyle\s!rm} \unexpanded\def\font_helpers_set_font_set_font_option_body#method#body#message% {\normalizebodyfontsize\normalizedsetfont{#body}% redundant for some calls \ifcsname\??fontbodyknown\normalizedsetfont\endcsname \else \font_helpers_define_unknown_font{#body}% \fi \ifcsname\??fontbodyknown\normalizedsetfont\endcsname \localbodyfontsize\normalizedsetfont \let\normalizedbodyfontsize\normalizedsetfont \else \showmessage\m!fonts4{#message}% %\font_helpers_set_font_set_font_option_body_fallbacks{#method}{#body}% \fi} % we need to check the fontclass \def\registerfontclass#class% {\letgvalue{\??fontclassyes#class}\v!yes} % global ? \def\setcurrentfontclass#class% {\ifcsname\??fontclassyes#class\endcsname \edef\fontclass{#class}% \else\ifcsname\??fontclassnop#class\endcsname % already tried \else % too messy: \ifcase\currentgrouplevel % (unpredictable) \trycurrentfontclass{#class}% \fi\fi} % \fi} \ifdefined\trycurrentfontclass \else \unexpanded\def\trycurrentfontclass#typeface% {\letvalueempty{\??fontclassnop#typeface}} \fi \let\defaultfontstyle \s!rm \let\defaultfontalternative\s!tf \let\defaultfontsize \empty %D So far for synchronisation. (We can inline the following macros.) \unexpanded\def\setcurrentfont#body#style#alternative#size% not used {\edef\fontbody {#body}% \edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization \font_helpers_synchronize_font} \unexpanded\def\setcurrentfontbody#body% % not used {\edef\fontbody{#body}% \font_helpers_synchronize_font} % For Taco: optional fall backs: \ifdefined\font_typescripts_inherit_check \else \let\font_typescripts_inherit_check\gobbleoneargument % implemented in type-ini \fi \unexpanded\def\font_helpers_set_current_font_style#style% {\edef\fontstyle{#style}% \font_typescripts_inherit_check\fontstyle \ifmmode\mr\fi % otherwise \rm not downward compatible ... not adapted yet \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_xsize_alternative#xsize#alternative% {\edef\fontface{#xsize}% \edef\fontalternative{#alternative}% \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_font_alternative#alternative% {\edef\fontalternative{#alternative}% \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_font_size#size% {\edef\fontsize{#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_font_style_alternative#style#alternative% \rmsl {\edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_font_style_size#style#size% \rma {\edef\fontstyle{#style}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_font_alternative_size#alternative#size% \sla {\edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} \unexpanded\def\font_helpers_set_current_font_style_alternative_size#style#alternative#size% \rmsla {\edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} \unexpanded\def\font_helpers_synchronize_font % we can have dups i.e. no need to let fontstrategy {\ifx\fontclass\empty \applyfontstrategies \else \applyfontclassstrategies \fi \setfalse\c_font_auto_size \ifskipfontcharacteristics \setfontcharacteristics \the\everyfontswitch \fi} %D This is the resolver for special cases (sizes) and in practice it is not called that often %D so further optimization makes no sense. \def\font_helpers_check_strategy_class_a % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_class_b \fi} \def\font_helpers_check_strategy_class_b % --- --- --- def % pt tt bf {\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_class_c \fi} \def\font_helpers_check_strategy_class_c % --- --- def --- % pt tt tf a {\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_class_d \fi} \def\font_helpers_check_strategy_class_d % --- --- def def % pt tt tf {\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_class_e \fi} \def\font_helpers_check_strategy_class_e % --- def def def % pt rm tf {\ifcsname\??fontinstanceready\fontclass-\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_class_f % \expandafter\font_helpers_check_strategy_a \fi} \def\font_helpers_check_strategy_class_f % def def def def % rm tf {\ifcsname\??fontinstanceready\fontclass-\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontclass-\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_a \fi} % no class \def\font_helpers_check_strategy_a % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_b \fi} \def\font_helpers_check_strategy_b % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_c \fi} \def\font_helpers_check_strategy_c % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_d \fi} \def\font_helpers_check_strategy_d % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_e \fi} \def\font_helpers_check_strategy_e % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \else \expandafter\font_helpers_check_strategy_f \fi} \def\font_helpers_check_strategy_f % --- --- --- --- % pt tt bf a {\ifcsname\??fontinstanceready\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \settrue\c_font_auto_size \csname\??fontinstanceready\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname \fi} \let\applyfontstrategies \font_helpers_check_strategy_a \let\applyfontclassstrategies\font_helpers_check_strategy_class_a %D Let's synchronize: \newconditional\c_font_synchronize \settrue\c_font_synchronize \prependtoks \ifconditional\c_font_synchronize \font_helpers_synchronize_math \font_helpers_synchronize_font % problem: syncs last font \fi \to \everybodyfont %D Setting the normal sizes as well as the x and xx smaller %D sizes is accomplished by the next set of macros. When in %D math mode, the commands \type{\tx} and \type{\txx} are %D just a switch to the script and double script styles, but %D in text mode the values defined by the bodyfontenvironment are %D used. Here we also set \type{\currentxfontsize}. \def\font_helpers_set_current_font_xxx_alternative#alternative#xsize#scriptstyle% {\ifmmode #scriptstyle% \else \font_helpers_set_current_xsize_alternative{#xsize}{#alternative}% \fi} \def\font_helpers_set_current_font_x_alternative#alternative% {\font_helpers_set_current_font_xxx_alternative{#alternative}{4}\scriptstyle \currentxfontsize\plusone \let\tx\txx} \def\font_helpers_set_current_font_xx_alternative#alternative% {\font_helpers_set_current_font_xxx_alternative{#alternative}{5}\scriptscriptstyle \currentxfontsize\plustwo \let\tx\empty \let\txx\empty} \def\font_helpers_reset_x_fontsize {\ifcase\currentxfontsize\else \currentxfontsize\zerocount \let\tx\normaltx \let\txx\normaltxx \fi} \def\font_helpers_check_nested_x_fontsize % option % {\ifcase\currentxfontsize\else\ifx\fontsize\empty\else % \currentxfontsize\zerocount % \let\fontsize\empty % \let\tx\normaltx % \let\txx\normaltxx % \fi\fi} {} \def\font_helpers_set_current_font_x_alternative#alternative% {\font_helpers_check_nested_x_fontsize \font_helpers_set_current_font_xxx_alternative{#alternative}{4}\scriptstyle \currentxfontsize\plusone \let\tx\txx} \def\font_helpers_set_current_font_xx_alternative#alternative% {\font_helpers_check_nested_x_fontsize \font_helpers_set_current_font_xxx_alternative{#alternative}{5}\scriptscriptstyle \currentxfontsize\plustwo \let\tx\empty \let\txx\empty} % This alterative is not really needed, but for old time's sake % we keep it there. We can speed it up when needed. \def\font_helpers_set_current_font_x_style_alternative #alternative{\csname#alternative\endcsname\tx} \def\font_helpers_set_current_font_xx_style_alternative#alternative{\csname#alternative\endcsname\txx} %D These macros also show us that when we call for \type{\tx}, %D this macro is redefined to be \type{\txx}. Therefore calls %D like: %D %D \startbuffer %D {small \tx is \tx beautiful} %D {small \tx is \txx beautiful} %D {small \txx is \tx beautiful} %D {small \txx is \txx beautiful} %D \stopbuffer %D %D \typebuffer %D %D result in: %D %D \startlines %D \getbuffer %D \stoplines %D %D Setting the main size involves the style list and therefore %D takes a bit more time. Keep in mind that the fontsize is %D represented by a character or empty. \unexpanded\def\tx {\font_helpers_set_current_font_x_alternative \fontalternative} \unexpanded\def\txx{\font_helpers_set_current_font_xx_alternative\fontalternative} \let\normaltx \tx \let\normaltxx\txx %D When asking for a complete font switch, for instance from 10 %D to 12~points, the next macro does the job. First we %D normalize the size, next we define the current range of %D text, script and scriptscript sizes, then we set the text %D fonts and the math families and finally we activate the %D default typeface and also set the font specific parameters %D assigned to \type{\everybodyfont} \def\textface {\currentbodyfontdimension\s!text } \def\scriptface {\currentbodyfontdimension\s!script } \def\scriptscriptface{\currentbodyfontdimension\s!scriptscript} \def\xtextface {\currentbodyfontdimension\s!x } \def\xxtextface {\currentbodyfontdimension\s!xx } % \unexpanded\def\font_basics_complete_switch#size% % {\bodyfontsize#size\relax % \normalizebodyfontsize\normalizedbodyfontsize\bodyfontsize % \edef\textface {\currentbodyfontdimension\s!text }% % \edef\scriptface {\currentbodyfontdimension\s!script }% % \edef\scriptscriptface{\currentbodyfontdimension\s!scriptscript}}% \installcorenamespace{fontbodyfaces} \unexpanded\def\font_basics_complete_switch#size% {\bodyfontsize#size\relax \normalizebodyfontsize\normalizedbodyfontsize\bodyfontsize \expandafter\let\expandafter\font_basics_set_faces\csname\??fontbodyfaces\fontbody\endcsname \ifx\font_basics_set_faces\relax \font_basics_set_faces_preset \fi \font_basics_set_faces} \def\font_basics_set_faces_preset {\edef\font_basics_set_faces{% 0.2 sec on 10K \tfa \noexpand\edef\noexpand\textface {\currentbodyfontdimension\s!text }% \noexpand\edef\noexpand\scriptface {\currentbodyfontdimension\s!script }% \noexpand\edef\noexpand\scriptscriptface{\currentbodyfontdimension\s!scriptscript}% \noexpand\edef\noexpand\xtextface {\currentbodyfontdimension\s!x }% \noexpand\edef\noexpand\xxtextface {\currentbodyfontdimension\s!xx }% }% \global\expandafter\let\csname\??fontbodyfaces\fontbody\endcsname\font_basics_set_faces} \def\currentbodyfontdimension#parameter% {\the\dimexpr \ifcsname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname \csname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname \else \ifcsname\??fontenvironments\fontclass\s!default #parameter\endcsname \csname\??fontenvironments\fontclass\s!default #parameter\endcsname \dimexpr\normalizedbodyfontsize\relax \else % factor \ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname \csname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname \else \csname\??fontenvironments \s!default #parameter\endcsname \dimexpr\normalizedbodyfontsize\relax \fi\fi\fi % factor \relax} %D \macros %D {setupbodyfont,switchtobodyfont} %D %D The next two macros are user ones. With \type{\setupbodyfont} %D one can set the document bodyfont size, font family, style %D and/or options defined in files, for example: %D %D \starttyping %D \setupbodyfont[modern,12pt,roman] %D \stoptyping %D %D This command affects the document as a whole: text, headers %D and footers. The second macro however affects only the text: %D %D \starttyping %D \switchtobodyfont[10pt] %D \stoptyping %D %D So we've got: %D %D \showsetup{setupbodyfont} %D \showsetup{switchtobodyfont} %D %D Both macros look alike. The second one also has to take %D all kind of keywords into account. \ifx\saveinterlinespace \undefined \let\saveinterlinespace \relax \fi \ifx\restoreinterlinespace\undefined \let\restoreinterlinespace\relax \fi % \newtoks \everysetupbodyfont % \newtoks \everyswitchtobodyfont \unexpanded\def\setupbodyfont {\doifnextoptionalelse\font_basics_setupbodyfont_yes\font_basics_setupbodyfont_nop} \def\font_basics_setupbodyfont_nop {\restoreglobalbodyfont \saveinterlinespace} \def\font_basics_setupbodyfont_yes[#specification]% {\doifsomething{#specification} {\font_helpers_set_font\plusone{#specification}% \globalbodyfontsize\localbodyfontsize \normalizebodyfontsize\normalizedglobalbodyfontsize\globalbodyfontsize \let\globalfontstyle\fontstyle \ifproductionrun \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace \fi \the\everysetupbodyfont}} \unexpanded\def\font_basics_switchtobodyfont#specification% {\edef\m_font_step{\bodyfontvariable{#specification}}% \ifx\m_font_step\empty \font_helpers_set_font\zerocount{#specification}% \else \font_helpers_switch_bodyfont_step % so we have a fast [small] switch \fi \the\everybodyfont \the\everyswitchtobodyfont} \unexpanded\def\switchtobodyfont[#specification]% could become an ifx {\doifsomething{#specification}{\font_basics_switchtobodyfont{#specification}}} \def\font_helpers_switch_bodyfont_step {\font_basics_switch_points\m_font_step \font_basics_switch_style \fontstyle} %D The following alternative is meant for math||to||text %D switching and will be optimized. \unexpanded\def\fastswitchtobodyfont#name% {\ifcsname\??fontenvironments\normalizedbodyfontsize#name\endcsname \edef\futurebodyfontsize{\csname\??fontenvironments\normalizedbodyfontsize#name\endcsname}% \ifcsname\??fontbodyknown\futurebodyfontsize\endcsname \font_basics_complete_switch\futurebodyfontsize \localbodyfontsize\futurebodyfontsize\relax \fi \fi \csname\??fontstyle\fontstyle\endcsname \the\everybodyfont} %D \starttyping %D $\cases{& \ccaron}$ $x=\hbox{\ccaron $x=\hbox{\ccaron}$}$ %D \stoptyping %D Handy for manuals: \unexpanded\def\fontchar#character% {\ctxcommand{fontchar("#character")}} %D The next auxilliary macro is an alternative to \type %D {\fontname}. \def\purefontname#font{\ctxlua{file.basename("\fontname#font"}} % will be function using id %D \macros %D {switchstyleonly} %D %D For switching a style but keeping the alternative, there %D is: %D %D \starttyping %D {\bf text \switchstyleonly\ss text} %D {\bf text \switchstyleonly[ss]text} %D {\sl text \switchstyleonly[sansserif]text} %D \stoptyping \unexpanded\def\switchstyleonly {\doifnextoptionalelse\font_basics_switch_style_only_opt\font_basics_switch_style_only_arg} \def\font_basics_switch_style_only_arg#name% stupid version {\font_helpers_set_current_font_style{\csname\??fontshortstyle\checkedstrippedcsname#name\endcsname}% \the\everybodyfont} % needed ? \def\font_basics_switch_style_only_opt[#name]% todo : check {\font_helpers_set_current_font_style{\csname\??fontshortstyle#name\endcsname}% \the\everybodyfont} % needed ? %D \macros %D {definebodyfontswitch} %D %D \PLAIN\ \TEX\ defines some macro's like \type{\tenpoint} %D to switch to a specific bodyfontsize. Just for the sake of %D compatibility we can define them like: %D %D \starttyping %D \definebodyfontswitch [twelvepoint] [12pt] %D \stoptyping %D %D We don't support language specific synonyms here. \unexpanded\def\definebodyfontswitch {\dodoubleargument\font_basics_define_bodyfont_switch} \def\font_basics_define_bodyfont_switch[#command][#specification]% no longer a commalist (not useful) {\setvalue{#command}{\switchtobodyfont[#specification]}}% %D \macros %D {setsmallbodyfont,setmainbodyfont,setbigbodyfont} %D %D When we're typesetting at for instance 10pt, we can call for %D the \type{small} as well as the \type{big} alternative, %D related to this main size, using \type{\switchtobodyfont[small]}. %D The three alternatives can be activated by the next three %D system calls and are defined by the bodyfontenvironment. \newmacro\m_font_step \def\font_helpers_set_bodyfont_step#step% {\edef\m_font_step{\bodyfontvariable{#step}}% not always \cs \font_basics_switch_points\m_font_step \font_basics_switch_style \fontstyle} \unexpanded\def\setsmallbodyfont{\font_helpers_set_bodyfont_step\v!small\the\everybodyfont} \unexpanded\def\setbigbodyfont {\font_helpers_set_bodyfont_step\v!big \the\everybodyfont} \unexpanded\def\setmainbodyfont {\font_basics_switch_points\normalizedbodyfontsize \font_basics_switch_style\fontstyle \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace} %D \macros %D {restoreglobalbodyfont} %D %D Users can set whatever font available while typesetting text. %D Pagenumbers, footers, headers etc. however must be typeset %D in the main bodyfont and style of the document. Returning to %D the global state can be done with the next macro: %D %D This macro has to be called when entering the pagebody %D handling routine as well as the footnote insert routine. %D Users can access this feature |<|for instance when one wants %D to typeset tables and alike in the main bodyfont and style %D while the running text is temporary set to a smaller one|>| %D by saying \type{\switchtobodyfont[global]}. \let\globalfontstyle\s!rm \unexpanded\def\fullrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \currentxfontsize\zerocount \let\fontclass\globalfontclass \font_basics_switch_points\normalizedglobalbodyfontsize \font_basics_switch_style\globalfontstyle \redoconvertfont % just in case a pagebreak occurs \tf \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace} \unexpanded\def\partialrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \currentxfontsize\zerocount \redoconvertfont \tf \the\everybodyfont % indeed needed \the\everyglobalbodyfont % indeed needed \saveinterlinespace} \unexpanded\def\restoreglobalbodyfont % ook style etc {\ifx\fontclass\globalfontclass \ifx\fontstyle\globalfontstyle \ifx\normalizedbodyfontsize\normalizedglobalbodyfontsize \partialrestoreglobalbodyfont \else \fullrestoreglobalbodyfont \fi \else \fullrestoreglobalbodyfont \fi \else \fullrestoreglobalbodyfont \fi} % in case of troubles: \let\restorebodyfont\fullrestoreglobalbodyfont %D Here are some fast variants that can be used in cases where no font %D system is needed and where fonts are frozen: %D %D \starttyping %D \definefont [TestA][Serif at 10pt] %D \predefinefont[TestB][Serif at 20pt] %D %D \testfeatureonce{1000}{{\TestA}} % .312 %D \testfeatureonce{1000}{{\TestB}} % < .016 %D \testfeatureonce{1000}{{\definedfont[Serif at 30pt]}} % .312 %D \testfeatureonce{1000}{{\predefinedfont[Serif at 40pt]}} % < .016 %D \stoptyping \installcorenamespace{predefinedfont} \unexpanded\def\predefinefont[#1]#2[#3]% global ! {\setugvalue{#1}{\font_basics_predefine{#1}{#3}}} \unexpanded\def\predefinedfont[#1]% global ! {\ifcsname\??predefinedfont#1\endcsname \csname\??predefinedfont#1\endcsname \else \font_basics_predefined{#1}% \fi} \unexpanded\def\font_basics_predefine#1#2% {\font_basics_defined_font_yes[#2]% \global\expandafter\let\csname#1\expandafter\endcsname\csname\v_font_identifier_basic\endcsname} \unexpanded\def\font_basics_predefined#1% {\font_basics_predefine{\??predefinedfont#1}{#1}} %D Handy helper: \unexpanded\def\savedefinedfont[#1]% {\bgroup \definedfont[#1]% \xdef\saveddefinedfontid {\number\fontid\font}% \xdef\saveddefinedfontname{\fontname\font}% \egroup} \def\saveddefinedfontid {\number\fontid\font} \def\saveddefinedfontname{\fontname\font} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-tsp.mkii0000644000175000017500000003147411754241457024315 0ustar norbertnorbert%D \module %D [ file=tabl-tsp, %D version=2000.10.20, %D title=\CONTEXT\ Table Macros, %D subtitle=Splitting, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Splitting} %D The code in this file is move here from other places. \unprotect % only to be used with single tokens (will be prim) \ifx\htdp\undefined \def\htdp#1{\dimexpr\ht#1+\dp#1\relax} \fi %D Although the name resembles floats, and therefore this should be %D a page module, we decided to make it core functionality because the %D table code depends on it. Othrwise there would be too much %D overloading afterwards involved. Actually, the float part is rather %D generic and not that related to floats. % \splitfloat [settings] {\placetable[optional args]{test}} {content} \definenumber [\??si] [\c!way=\v!by\v!text, \c!conversion=\@@siconversion] \def\setupfloatsplitting {\dodoubleargument\getparameters[\??si]} \newif\ifinsidesplitfloat % will become chardef \newtoks \everysplitfloatsetup \def\splitfloat {\dosingleempty\dosplitfloat} \ifx\floatcaptionsuffix\undefined \else \let\floatcaptionsuffix\empty % will become \splitfloatcaptionsuffix \fi \def\extrasplitfloatlines{0} \def\dosplitfloat[#1]#2% nog dubbele refs {\bgroup \global\setfalse\splitfloatdone \aftergroup\checksplitfloat \insidefloattrue \insidesplitfloattrue \getparameters[\??si][#1]% \resetnumber[\??si]% \def\floatcaptionsuffix{\convertednumber[\??si]}% \let\extrasplitfloatlines\@@silines \the\everysplitfloatsetup \def\splitfloatcommand{#2}% \global\settrue \onlyonesplitofffloat \global\setfalse\somenextplitofffloat \dopushsavedfloats \@@sibefore \let\next} % \bgroup \def\checksplitfloat {\ifconditional\splitfloatdone\else \blank{\tttf \getmessage\m!floatblocks{13}\empty}\blank \showmessage\m!floatblocks{13}\empty \fi} \settrue \onlyonesplitofffloat \setfalse\somenextplitofffloat %D When \type {inbetween} is made empty instead of the %D default \type {\page}, we will get delayed flushing %D and text may continue below the graphic. %D %D \starttyping %D \dorecurse{2}{\input tufte } %D %D \splitfloat[lines=auto,inbetween=] %D {\placetable{\dorecurse{5}{test\recurselevel\endgraf}}} %D {\bTABLE[split=yes] %D \bTR \bTD 11 \eTD \bTD \input tufte \eTD \eTR %D \bTR \bTD 12 \eTD \bTD \input zapf \eTD \eTR %D \bTR \bTD 13 \eTD \bTD \input bryson \eTD \eTR %D \bTR \bTD 14 \eTD \bTD test \eTD \eTR %D \bTR \bTD 21 \eTD \bTD \input tufte \eTD \eTR %D \bTR \bTD 22 \eTD \bTD \input zapf \eTD \eTR %D \bTR \bTD 23 \eTD \bTD \input bryson \eTD \eTR %D \bTR \bTD 24 \eTD \bTD test \eTD \eTR %D \bTR \bTD 31 \eTD \bTD \input tufte \eTD \eTR %D \bTR \bTD 32 \eTD \bTD \input zapf \eTD \eTR %D \bTR \bTD 33 \eTD \bTD \input bryson \eTD \eTR %D \bTR \bTD 34 \eTD \bTD test \eTD \eTR %D \eTABLE} %D %D \dorecurse{10}{\input tufte } %D \stoptyping \newconditional\splitfloatdone \def\dodowithsplitofffloat {\dowithnextbox {\forgetall \dontcomplain \global\settrue\splitfloatdone \chardef\nodelocationmode\zerocount % bypass auto-renumbering \incrementnumber[\??si]% \ifcase\rawnumber[\??si]\or \ifconditional\onlyonesplitofffloat \let\floatcaptionsuffix\empty \fi \fi \bgroup \ifconditional\somenextplitofffloat \settrue\retainfloatnumber \notesenabledfalse % best here, experimental, brrr; test with note in caption \else \setfalse\retainfloatnumber \fi \splitfloatcommand{\box\nextbox}% \egroup \ifconditional\somenextplitofffloat \doifelsenothing\@@siinbetween {\ifconditional\splitfloatfirstdone\else\page\fi} \@@siinbetween \else \@@siafter \dopopsavedfloats \doflushsavedfloats \fi \global\settrue\splitfloatfirstdone}% \vbox} \def\nodowithsplitofffloat {\dowithnextbox {\forgetall \dontcomplain \box\nextbox % maybe an option to unvbox \global\settrue\splitfloatfirstdone}% \vbox} \def\dochecksplitofffloat#1% box {\ifinsidesplitfloat \ifdim\ht#1=\zeropoint \global\setfalse\somenextplitofffloat \else \global\settrue \somenextplitofffloat \global\setfalse\onlyonesplitofffloat \fi \fi} \def\analyzesplitfloatcaption#1% depends on page-flt {\doif\extrasplitfloatlines\v!auto {\bgroup \settrue\retainfloatnumber \chardef\nodelocationmode\zerocount \forcelocalfloats \setuplocalfloats[\c!before=,\c!after=,\c!inbetween=]% \splitfloatcommand{\hbox to \wd#1{\strut}}% dummy line \setbox\scratchbox\vbox{\flushlocalfloats}% \getnoflines{\ht\scratchbox}% \resetlocalfloats \advance\noflines\minusone % compensate dummy line \expanded{\egroup\noexpand\edef\noexpand\extrasplitfloatlines{\the\noflines}}}} % \def\analyzesplitfloatcaption#1% % {\edef\extrasplitfloatlines{11}} \def\dowithsplitofffloat % nextbox {\ifinsidesplitfloat \expandafter\dodowithsplitofffloat \else \expandafter\nodowithsplitofffloat \fi} \def\doifnotinsidesplitfloat {\ifinsidesplitfloat\expandafter\gobbleoneargument\fi} %D Some defaults: \setupfloatsplitting [\c!conversion=\v!character, % \v!romannumerals \c!lines=3, \c!before=, \c!inbetween=\page, \c!after=] %D Table splitter, on top of previous code: \newbox\tsplitcontent \newbox\tsplitresult \newbox\tsplithead \newbox\tsplitnext \newbox\tsplittail \def\resettsplit{% only \def's starting a a new line are seen by the dep checker \def\tsplitminimumfreelines{0}% \def\tsplitminimumfreespace{0pt}% \setbox\tsplitcontent \vbox{}% \setbox\tsplitresult \vbox{}% \setbox\tsplithead \vbox{}% \setbox\tsplitnext \vbox{}% \setbox\tsplittail \vbox{}% \let\tsplitbeforeresult\donothing \let\tsplitafterresult \donothing \let\tsplitinbetween \donothing \let\tsplitbefore \donothing \let\tsplitafter \donothing \let\postprocesstsplit \donothing } \resettsplit % todo: keep tail to rest, so we need a lookahead \newconditional\splitfloatfirstdone \def\handletsplit {\analyzesplitfloatcaption\tsplitcontent \global\setfalse\splitfloatfirstdone \testpagesync % new, sync, but still tricky [\tsplitminimumfreelines] [\dimexpr\tsplitminimumfreespace+\extrasplitfloatlines\lineheight\relax]% \setbox\scratchbox\vbox{\tsplitinbetween}% \edef\tsplitinbetweenheight{\the\htdp\scratchbox}% etex \!!doneafalse \doloop {\ifinsidecolumns % brrr, assumes empty columns \global\setfalse\splitfloatfirstdone \scratchdimen\textheight \!!donectrue \else \ifconditional\splitfloatfirstdone \scratchdimen\textheight \!!donectrue \else\ifdim\pagegoal<\maxdimen \scratchdimen\dimexpr\pagegoal-\pagetotal\relax \!!donecfalse \else \scratchdimen\textheight \!!donectrue \fi\fi \fi \scratchdimen\dimexpr\scratchdimen-\tsplitinbetweenheight-\tsplitminimumfreespace-\extrasplitfloatlines\lineheight\relax \ifdim\htdp\tsplittail>\zeropoint \advance\scratchdimen-\htdp\tsplittail \fi \setbox\tsplitresult\vbox {\ifdim\ht\tsplithead>\zeropoint \unvcopy\tsplithead \tsplitinbetween \fi}% \if!!donea\else\ifdim\ht\tsplitnext>\zeropoint \setbox\tsplithead\box\tsplitnext \fi\fi \!!doneatrue \ifdim\ht\tsplitresult>\zeropoint \!!donedtrue % table head \else \!!donedfalse % no tablehead \fi \splittopskip\zeropoint \doloop {\setbox\scratchbox\vsplit\tsplitcontent to \onepoint % \lineheight \setbox\scratchbox\vbox{\unvbox\scratchbox}% \ifdim\dimexpr\scratchdimen-\htdp\scratchbox-\htdp\tsplitresult\relax>\zeropoint \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvbox\scratchbox}% \ifvoid\tsplitcontent \exitloop \fi \else\if!!doned % we only have a tablehead so far \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvbox\scratchbox}% \exitloop \else\if!!donec % we have text height available, but the (one) cell is too % large to fit, so, in order to avoid loops/deadcycles we do: \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvbox\scratchbox}% \exitloop \else \setbox\tsplitcontent\vbox {\unvbox\scratchbox \tsplitinbetween \ifvoid\tsplitcontent\else\unvbox\tsplitcontent\fi}% \exitloop \fi\fi\fi \!!donedfalse \!!donecfalse}% \postprocesstsplit \dochecksplitofffloat\tsplitcontent \ifvoid\tsplitcontent \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvcopy\tsplittail}% \dowithsplitofffloat{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}% \doifnotinsidesplitfloat\tsplitafter \endgraf \exitloop \else % hack \ifdim\pagegoal<\maxdimen \global\pagegoal\dimexpr\pagegoal+\lineheight\relax % etex \fi % brrr \ifdim\ht\tsplitresult>\zeropoint \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvcopy\tsplittail}% \dowithsplitofffloat{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}% \doifnotinsidesplitfloat\tsplitafter \endgraf \fi \ifinsidecolumns \doifnotinsidesplitfloat\goodbreak \else \doifnotinsidesplitfloat\page \fi \fi}% \global\setfalse\splitfloatfirstdone} % we can use this one for tests \protect \endinput % test cases % \setupTABLE[split=repeat] % % \input tufte \endgraf % \splitfloat[lines=11] % {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}} % {\bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE} % \input tufte \page % % \input tufte \endgraf % \splitfloat[lines=0] % {} % {\bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE} % \input tufte \endgraf \page % % \input tufte \endgraf % \bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE % \input tufte \page % \setuptabulate[split=yes] % % \input tufte \endgraf % \splitfloat[lines=11] % {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}} % {\starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate} % \input tufte \page % % \input tufte \endgraf % \splitfloat[lines=0] % {} % {\starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate} % \input tufte \page % % \input tufte \endgraf % \starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate % \input tufte \page % \setuptables[split=yes] % % \newtoks\TestToks % % \TestToks\emptytoks % \appendtoks\starttablehead\to\TestToks % \dorecurse{3}{\appendtoks\VL head \VL head \VL \SR\to\TestToks} % \appendtoks\stoptablehead\to\TestToks % \appendtoks\starttabletail\to\TestToks % \dorecurse{3}{\appendtoks\VL tail \VL tail \VL \SR\to\TestToks} % \appendtoks\stoptabletail\to\TestToks % \appendtoks\starttables[|c|c|]\to\TestToks % \dorecurse{100}{\appendtoks\VL test \VL test \VL \SR\to\TestToks} % \appendtoks\stoptables\to\TestToks % % \input tufte \endgraf % \splitfloat[lines=auto] % [lines=11] % {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}} % {\the\TestToks} % \input tufte \page % % \input tufte \endgraf % \splitfloat[lines=0] % {} % {\the\TestToks} % \input tufte \page % % \input tufte \endgraf % \the\TestToks % \input tufte \page % % multiple floats % % \starttext % \dorecurse{3}{\input tufte } \endgraf % \dorecurse{5}{\placefigure{}{\framed[height=.5\textheight]{}}} % \splitfloat[lines=auto,inbetween=] % {\placetable{\dorecurse{5}{test\recurselevel\endgraf}}} % {\bTABLE[split=yes] % \bTR \bTD 11 \eTD \bTD \input tufte \eTD \eTR % \bTR \bTD 12 \eTD \bTD \input zapf \eTD \eTR % \bTR \bTD 13 \eTD \bTD \input bryson \eTD \eTR % \bTR \bTD 14 \eTD \bTD test \eTD \eTR % \bTR \bTD 21 \eTD \bTD \input tufte \eTD \eTR % \bTR \bTD 22 \eTD \bTD \input zapf \eTD \eTR % \bTR \bTD 23 \eTD \bTD \input bryson \eTD \eTR % \bTR \bTD 24 \eTD \bTD test \eTD \eTR % \bTR \bTD 31 \eTD \bTD \input tufte \eTD \eTR % \bTR \bTD 32 \eTD \bTD \input zapf \eTD \eTR % \bTR \bTD 33 \eTD \bTD \input bryson \eTD \eTR % \bTR \bTD 34 \eTD \bTD test \eTD \eTR % \eTABLE} % \dorecurse{10}{\input tufte } % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-rtp.mkii0000644000175000017500000000077411754241457024373 0ustar norbertnorbert%D \module %D [ file=syst-rtp, % copied from core-job %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Run Time Processes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \def\executesystemcommand{\immediate\write18} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-spa.mkiv0000644000175000017500000000546012130411274024335 0ustar norbertnorbert%D \module %D [ file=typo-spa, %D version=2009.03.27, % code moved from cors-spa.mkiv %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Spacing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Spacing} \unprotect \registerctxluafile{typo-spa}{1.001} \definesystemattribute[spacing][public] % experimental spacing % % test: oeps {\setcharacterspacing[frenchpunctuation]x: xx \bfd x: xx} oeps: test % % todo: page | text => pagebody or text only \installcorenamespace{characterspacing} \installsetuponlycommandhandler \??characterspacing {_p_characterspacing} % private \setup_p_characterspacing [\c!left=0, \c!right=0, \c!alternative=0] \unexpanded\def\definecharacterspacing[#1]% {\ctxcommand{definecharacterspacing("#1")}} \unexpanded\def\setupcharacterspacing {\dotripleargument\typo_characterspacing_setup} \def\typo_characterspacing_setup[#1][#2][#3]% todo: #2 list {\begingroup \setupcurrent_p_characterspacing[#3]% \ctxcommand{setupcharacterspacing("#1",\number#2, { % todo: just pass #3 to the lua end left = \direct_p_characterspacingparameter\c!left, right = \direct_p_characterspacingparameter\c!right, alternative = \direct_p_characterspacingparameter\c!alternative })}% \endgroup} \unexpanded\def\setcharacterspacing[#1]% we can store the attribute if we want speed {\ctxcommand{setcharacterspacing("#1")}} \unexpanded\def\resetcharacterspacing % fast one {\attribute\spacingattribute\attributeunsetvalue} \appendtoks \resetcharacterspacing \to \everyresettypesetting % \setcharacterspacing[frenchpunctuation] % «\type{bla}»\crlf « \type{bla}»\crlf % «bla »\crlf « bla»\crlf « bla »\crlf % bla: bla\crlf bla : bla \definecharacterspacing [frenchpunctuation] % name may change / unit is em \setupcharacterspacing [frenchpunctuation] ["003A] [\c!left =.25,\c!alternative=1] % : % strip preceding space(char) \setupcharacterspacing [frenchpunctuation] ["003B] [\c!left =.25,\c!alternative=1] % ; % strip preceding space(char) \setupcharacterspacing [frenchpunctuation] ["003F] [\c!left =.25,\c!alternative=1] % ? % strip preceding space(char) \setupcharacterspacing [frenchpunctuation] ["0021] [\c!left =.25,\c!alternative=1] % ! % strip preceding space(char) \setupcharacterspacing [frenchpunctuation] ["00AB] [\c!right=.25,\c!alternative=1] % guillemotleft/leftguillemot % strip following space(char) \setupcharacterspacing [frenchpunctuation] ["00BB] [\c!left =.25,\c!alternative=1] % guillemotright/rightguillemot % strip preceding space(char) \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-hsh.lua0000644000175000017500000001453712134352503024132 0ustar norbertnorbertif not modules then modules = { } end modules ['font-hsh'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local setmetatableindex = table.setmetatableindex local currentfont = font.current local allocate = utilities.storage.allocate local fonts = fonts local hashes = fonts.hashes or allocate() fonts.hashes = hashes -- todo: autoallocate ... just create on the fly .. use constructors.keys (problem: plurals) local identifiers = hashes.identifiers or allocate() local characters = hashes.characters or allocate() -- chardata local descriptions = hashes.descriptions or allocate() local parameters = hashes.parameters or allocate() local properties = hashes.properties or allocate() local resources = hashes.resources or allocate() local spacings = hashes.spacings or allocate() local spaces = hashes.spaces or allocate() local quads = hashes.quads or allocate() -- maybe also spacedata local xheights = hashes.xheights or allocate() local csnames = hashes.csnames or allocate() -- namedata local marks = hashes.marks or allocate() local italics = hashes.italics or allocate() local lastmathids = hashes.lastmathids or allocate() local dynamics = hashes.dynamics or allocate() hashes.characters = characters hashes.descriptions = descriptions hashes.parameters = parameters hashes.properties = properties hashes.resources = resources hashes.spacings = spacings hashes.spaces = spaces hashes.quads = quads hashes.emwidths = quads hashes.xheights = xheights hashes.exheights = xheights hashes.csnames = csnames hashes.marks = marks hashes.italics = italics hashes.lastmathids = lastmathids hashes.dynamics = dynamics local nulldata = allocate { name = "nullfont", characters = { }, descriptions = { }, properties = { }, parameters = { -- lmromanregular @ 12pt slantperpoint = 0, spacing = { width = 256377, stretch = 128188, shrink = 85459, extra = 85459, }, quad = 786432, xheight = 338952, -- compatibility: slant = 0, -- 1 space = 256377, -- 2 space_stretch = 128188, -- 3 space_shrink = 85459, -- 4 x_height = 338952, -- 5 quad = 786432, -- 6 extra_space = 85459, -- 7 }, } fonts.nulldata = nulldata fonts.constructors.enhanceparameters(nulldata.parameters) -- official copies for us setmetatableindex(identifiers, function(t,k) return k == true and identifiers[currentfont()] or nulldata end) setmetatableindex(characters, function(t,k) if k == true then return characters[currentfont()] else local characters = identifiers[k].characters t[k] = characters return characters end end) setmetatableindex(descriptions, function(t,k) if k == true then return descriptions[currentfont()] else local descriptions = identifiers[k].descriptions t[k] = descriptions return descriptions end end) setmetatableindex(parameters, function(t,k) if k == true then return parameters[currentfont()] else local parameters = identifiers[k].parameters t[k] = parameters return parameters end end) setmetatableindex(properties, function(t,k) if k == true then return properties[currentfont()] else local properties = identifiers[k].properties t[k] = properties return properties end end) setmetatableindex(resources, function(t,k) if k == true then return resources[currentfont()] else local shared = identifiers[k].shared local rawdata = shared and shared.rawdata local resources = rawdata and rawdata.resources t[k] = resources or false -- better than resolving each time return resources end end) setmetatableindex(quads, function(t,k) if k == true then return quads[currentfont()] else local parameters = parameters[k] local quad = parameters and parameters.quad or 0 t[k] = quad return quad end end) local nospacing = { width = 0, stretch = 0, shrink = 0, extra = 0, } setmetatableindex(spacings, function(t,k) if k == true then return spacings[currentfont()] else local parameters = parameters[k] local spacing = parameters and parameters.spacing or nospacing t[k] = spacing return spacing end end) setmetatableindex(spaces, function(t,k) if k == true then return spaces[currentfont()] else local space = spacings[k].width t[k] = space return space end end) setmetatableindex(marks, function(t,k) if k == true then return marks[currentfont()] else local resources = identifiers[k].resources or { } local marks = resources.marks or { } t[k] = marks return marks end end) setmetatableindex(xheights, function(t,k) if k == true then return xheights[currentfont()] else local parameters = parameters[k] local xheight = parameters and parameters.xheight or 0 t[k] = xheight return xheight end end) setmetatableindex(italics, function(t,k) -- is test ! if k == true then return italics[currentfont()] else local properties = identifiers[k].properties local hasitalics = properties and properties.hasitalics if hasitalics then hasitalics = characters[k] -- convenient return else hasitalics = false end t[k] = hasitalics return hasitalics end end) setmetatableindex(dynamics, function(t,k) if k == true then return dynamics[currentfont()] else local shared = identifiers[k].shared local dynamics = shared and shared.dynamics or false t[k] = dynamics return dynamics end end) function font.getfont(id) return identifiers[id] end context-2013.05.28.20130704/texmf-dist/tex/context/base/data-pre.lua0000644000175000017500000001476312132111075024075 0ustar norbertnorbertif not modules then modules = { } end modules ['data-pre'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- It could be interesting to hook the resolver in the file -- opener so that unresolved prefixes travel around and we -- get more abstraction. -- As we use this beforehand we will move this up in the chain -- of loading. --~ print(resolvers.resolve("abc env:tmp file:cont-en.tex path:cont-en.tex full:cont-en.tex rel:zapf/one/p-chars.tex")) local resolvers = resolvers local prefixes = utilities.storage.allocate() resolvers.prefixes = prefixes local cleanpath, findgivenfile, expansion = resolvers.cleanpath, resolvers.findgivenfile, resolvers.expansion local getenv = resolvers.getenv -- we can probably also use resolvers.expansion local P, S, R, C, Cs, Cc, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.match local joinpath, basename, dirname = file.join, file.basename, file.dirname local getmetatable, rawset, type = getmetatable, rawset, type -- getenv = function(...) return resolvers.getenv(...) end -- needs checking (definitions changes later on) prefixes.environment = function(str) return cleanpath(expansion(str)) end prefixes.relative = function(str,n) -- lfs.isfile if io.exists(str) then -- nothing elseif io.exists("./" .. str) then str = "./" .. str else local p = "../" for i=1,n or 2 do if io.exists(p .. str) then str = p .. str break else p = p .. "../" end end end return cleanpath(str) end prefixes.auto = function(str) local fullname = prefixes.relative(str) if not lfs.isfile(fullname) then fullname = prefixes.locate(str) end return fullname end prefixes.locate = function(str) local fullname = findgivenfile(str) or "" return cleanpath((fullname ~= "" and fullname) or str) end prefixes.filename = function(str) local fullname = findgivenfile(str) or "" return cleanpath(basename((fullname ~= "" and fullname) or str)) -- no cleanpath needed here end prefixes.pathname = function(str) local fullname = findgivenfile(str) or "" return cleanpath(dirname((fullname ~= "" and fullname) or str)) end prefixes.selfautoloc = function(str) return cleanpath(joinpath(getenv('SELFAUTOLOC'),str)) end prefixes.selfautoparent = function(str) return cleanpath(joinpath(getenv('SELFAUTOPARENT'),str)) end prefixes.selfautodir = function(str) return cleanpath(joinpath(getenv('SELFAUTODIR'),str)) end prefixes.home = function(str) return cleanpath(joinpath(getenv('HOME'),str)) end local function toppath() local inputstack = resolvers.inputstack -- dependency, actually the code should move but it's if not inputstack then -- more convenient to keep it here return "." end local pathname = dirname(inputstack[#inputstack] or "") if pathname == "" then return "." else return pathname end end resolvers.toppath = toppath prefixes.toppath = function(str) return cleanpath(joinpath(toppath(),str)) end prefixes.env = prefixes.environment prefixes.rel = prefixes.relative prefixes.loc = prefixes.locate prefixes.kpse = prefixes.locate prefixes.full = prefixes.locate prefixes.file = prefixes.filename prefixes.path = prefixes.pathname function resolvers.allprefixes(separator) local all = table.sortedkeys(prefixes) if separator then for i=1,#all do all[i] = all[i] .. ":" end end return all end local function _resolve_(method,target) local action = prefixes[method] if action then return action(target) else return method .. ":" .. target end end local resolved, abstract = { }, { } function resolvers.resetresolve(str) resolved, abstract = { }, { } end -- todo: use an lpeg (see data-lua for !! / stripper) -- local function resolve(str) -- use schemes, this one is then for the commandline only -- if type(str) == "table" then -- local t = { } -- for i=1,#str do -- t[i] = resolve(str[i]) -- end -- return t -- else -- local res = resolved[str] -- if not res then -- res = gsub(str,"([a-z][a-z]+):([^ \"\';,]*)",_resolve_) -- home:xx;selfautoparent:xx; etc (comma added) -- resolved[str] = res -- abstract[res] = str -- end -- return res -- end -- end -- home:xx;selfautoparent:xx; local pattern = Cs((C(R("az")^2) * P(":") * C((1-S(" \"\';,"))^1) / _resolve_ + P(1))^0) local prefix = C(R("az")^2) * P(":") local target = C((1-S(" \"\';,"))^1) local notarget = (#S(";,") + P(-1)) * Cc("") local pattern = Cs(((prefix * (target + notarget)) / _resolve_ + P(1))^0) local function resolve(str) -- use schemes, this one is then for the commandline only if type(str) == "table" then local t = { } for i=1,#str do t[i] = resolve(str[i]) end return t else local res = resolved[str] if not res then res = lpegmatch(pattern,str) resolved[str] = res abstract[res] = str end return res end end local function unresolve(str) return abstract[str] or str end resolvers.resolve = resolve resolvers.unresolve = unresolve if type(os.uname) == "function" then for k, v in next, os.uname() do if not prefixes[k] then prefixes[k] = function() return v end end end end if os.type == "unix" then -- We need to distringuish between a prefix and something else : so we -- have a special repath variant for linux. Also, when a new prefix is -- defined, we need to remake the matcher. local pattern local function makepattern(t,k,v) if t then rawset(t,k,v) end local colon = P(":") for k, v in table.sortedpairs(prefixes) do if p then p = P(k) + p else p = P(k) end end pattern = Cs((p * colon + colon/";" + P(1))^0) end makepattern() getmetatable(prefixes).__newindex = makepattern function resolvers.repath(str) return lpegmatch(pattern,str) end else -- already the default: function resolvers.repath(str) return str end end context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-fdf.mkii0000644000175000017500000035041011754241457024250 0ustar norbertnorbert%D \module %D [ file=spec-fdf, %D version=1998.05.18, %D title=\CONTEXT\ \PDF\ Macros, %D subtitle=Support Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The name of this module is a bit strange but it started with fields %D so we keep the name. %D When dealing with resources, we share the resource dictionaries %D between all xforms. This is inefficent in the sense that when no %D resources are used, redundant entries take space, but on the other %D hand we save redundant dictionaries so it's a nice compromise. Maybe %D that in \LUATEX\ I will reimplement most of the code here anyway. %D We need to check if we can use \type {\driverreferenced} %D object in more places. %D Initialization of fields is tricky. If a field has no %D value, it is kind of not there. If ResetForm is used, the %D default is assigned, but pushbuttons are spoiled. Adding a %D \type {/MK} dictionary helps, but gives ugly down %D appearances (displaced with background). What a mess. %D Also, in order to get at least something, the \type {/AS} %D key should be provided. % to do : /IF << /SW /N >> == no scaling / clipping of widget \unprotect %D \macros %D {PDFobjref} %D %D Just a shortcut. % Watch out, \def\PDFobjref#1{\purenumber#1 0 R} also works, but not when % #1 == \the\whatever \def\PDFobjref#1{\purenumber{#1} 0 R} %D \macros %D {PDFswapdir} \let\PDFswapdir\empty \def\PDFswapdir{\ifcase\inlinedirection\or\or-\fi} % the pdf spec changed cq. viewers started behaving differently / 5+ \chardef\overcomePDFpage\plusone % page numbers/ beware: optimizers remove this one \chardef\overcomePDFpage\plustwo % page:number %chardef\overcomePDFpage\plusthree % pdftex page ref feature \ifx\pdfpageref\undefined \else \chardef\overcomePDFpage\plusthree \fi %D \macros %D {setPDFdestination} %D %D \PDF\ destinations should obey the specifications laid down %D in the \PDF\ reference manual. The next macro strips illegal %D characters from the destination name. %D %D The \ACROBAT\ programs are not bug free. By setting the next %D switches, we will at least try to prevent problems. \newif\ifovercomePDFbugs \overcomePDFbugsfalse % dest sort problem / 3- \newif\ifovercomePDFspace \overcomePDFspacetrue % dest sort problem / 3- \let\setPDFdestination\gobbleoneargument % a MK specific definition %D \macros %D {sanitizePDFstring} %D %D This macro at least tries to convert a arbitrary string %D into a sequence of characters valid for \PDF\ bookmarks and %D alike. \def\sanitizePDFstring#1\to#2{} %D \macros %D {doPDFdestination, %D doPDFaction, %D doPDFannotation, %D doPDFannotationobject, %D doPDFdictionaryobject, %D doPDFarrayobject, %D doPDFaddtocatalog, %D doPDFaddtoinfo, %D doPDFpageattribute, %D doPDFpageresource, %D doPDFpagesattribute, %D doPDFbookmark, %D defaultobjectreference, %D doPDFgetobjectreference} %D %D This module deals with \PDF\ support, including fill||in %D forms. Before we present the largely unreadable bunch of %D macros, we introduce the here||not||defined low level %D interface macros. These must be provided by the special %D drivers \type{pdf} (\ACROBAT) and \type{tpd} (\PDFTEX). %D %D \starttyping %D \doPDFdestination #1 name %D \doPDFaction #1#2#3 width height action %D \doPDFannotation #1#2#3 width height data %D \doPDFannotationobject #1#2#3#4#5 class name width height data %D \doPDFdictionaryobject #1#2#3 class name data %D \doPDFarrayobject #1#2#3 class name data %D \doPDFaddtocatalog #1 %D \doPDFaddtoinfo #1 %D \doPDFpageattribute #1 %D \doPDFpageresource #1 %D \doPDFpagesattribute #1 %D \doPDFbookmark #1#2#3#4#5 level n text page open %D %D \defaultobjectreference #1#2 class name %D \doPDFgetobjectreference #1#2#3 class name \PDFobjectreference %D \doPDFgetobjectpagereference #1#2#3 class name \PDFobjectreference %D \stoptyping %D %D The keywords reflect their use. For the moment we stick to %D keywords, because that way at we get an indication of what %D we're doing. \startspecials[fdf] %D Common: % \def\doPDFgetobjectreference#1#2#3% % {\def#3{..}} \def\doPDFgetobjectpage#1#2#3% {\dogetobjectreferencepage{#1}{#2}#3% \ifx#3\empty\def#3{\realfolio}\fi} \def\doPDFgetobjectpagereference#1#2#3% {\dogetobjectreferencepage{#1}{#2}#3% \ifx#3\empty \doPDFgetpagereference\realfolio#3% \else \doPDFgetpagereference#3#3% we assume that #3 gets expanded \fi} % \def\doPDFgetpagereference#1#2%%%%%%%%%%%%%%% % {\def#2{...}} %D Due to the fact that \PDFTEX\ has a different concept of %D page attributes, we need: \let\doPDFresetpageattributes\relax \let\doPDFresetpageresources \relax \appendtoksonce \doPDFresetpageattributes \doPDFresetpageresources \to \everyaftershipout \ifx\PDFcode\undefined \ifx\pdfliteral\undefined \def\PDFcode#1{\message{[ignored pdfliteral: #1]}} \else \let\PDFcode\pdfliteral \fi \fi %D For special (\METAPOST) effects, we need to build %D resource dictionaries. Here is the framework. \let\docuPDFextgstates\empty %let\pagePDFextgstates\empty \def\checkPDFextgstates {\ifx\docuPDFextgstates\empty \else \ifnum\realpageno=\lastpage\relax %\doPDFreserveddictionaryobject{FDF}{docuextgstates}{\docuPDFextgstates}% \doPDFdictionaryobject{FDF}{docuextgstates}{\docuPDFextgstates}% \fi \doPDFgetobjectreference{FDF}{docuextgstates}\PDFobjectreference \doPDFpageresource{/ExtGState \PDFobjectreference}% \fi} \appendtoksonce \checkPDFextgstates \to \everyshipout \def\appendtoPDFdocumentextgstates#1% {\xdef\docuPDFextgstates{\docuPDFextgstates\space#1}} %D Patterns (for tikz) \let\docuPDFpatterns\empty \def\checkPDFpatterns {\ifx\docuPDFpatterns\empty \else \ifnum\realpageno=\lastpage\relax \doPDFdictionaryobject{FDF}{docupatterns}{\docuPDFpatterns}% \fi \doPDFgetobjectreference{FDF}{docupatterns}\PDFobjectreference \doPDFpageresource{/Pattern \PDFobjectreference}% \fi} \appendtoksonce \checkPDFpatterns \to \everyshipout \def\appendtoPDFdocumentpatterns#1% {\xdef\docuPDFpatterns{\docuPDFpatterns\space#1}} %D Another special mechanism (needed for color separation): \let\docuPDFcolorspaces\empty \def\checkPDFcolorspaces {\ifx\docuPDFcolorspaces\empty \else \ifnum\realpageno=\lastpage\relax %\doPDFreserveddictionaryobject{FDF}{colorspaces}{\docuPDFcolorspaces}% \doPDFdictionaryobject{FDF}{colorspaces}{\docuPDFcolorspaces}% \fi \doPDFgetobjectreference{FDF}{colorspaces}\PDFobjectreference \doPDFpageresource{/ColorSpace \PDFobjectreference}% \fi} \appendtoksonce \checkPDFcolorspaces \to \everyshipout \def\appendtoPDFdocumentcolorspaces#1% {\xdef\docuPDFcolorspaces{\docuPDFcolorspaces\space#1}} %D And another one (used to be in spec-pdf) \let\docuPDFshades\empty \def\checkPDFshades {\ifx\docuPDFshades\empty \else \ifnum\realpageno=\lastpage\relax %\doPDFreserveddictionaryobject{FDF}{docushades}{\docuPDFshades}% \doPDFdictionaryobject{FDF}{docushades}{\docuPDFshades}% \fi \doPDFgetobjectreference{FDF}{docushades}\PDFobjectreference \doPDFpageresource{/Shading \PDFobjectreference}% \fi} \appendtoksonce \checkPDFshades \to \everyshipout \def\appendtoPDFdocumentshades#1% {\xdef\docuPDFshades{\docuPDFshades\space#1}} %D \macros %D {doPDFsetupscreen,doPDFsetupidentity} %D %D Opposite to \DVI\ drivers, \PDF\ ones must know which what %D page dimensions they are dealing. We also use the %D opportunity to launch full screen (1) or show bookmarks (2). \let\currentPDFpagemode \empty % document catalog \let\currentPDFviewerprefs\empty % document catalog \let\currentPDFcropbox \empty % page attributes \let\currentPDFbleedbox \empty % page attributes \let\currentPDFartbox \empty % page attributes \let\currentPDFtrimbox \empty % page attributes \def\doPDFsetupscreen#1#2#3#4#5#6% watch the extra argument {\bgroup % \!!widtha#4% % \advance\!!widtha#2% % \!!heighta-#5% % \!!heightb#1% extra argument % \advance\!!heightb -#3% % \advance\!!heighta \!!heightb % % sometimes whole values give better results % % \PointsToWholeBigPoints{#2}\left % % \PointsToWholeBigPoints\!!heighta\bottom % % \PointsToWholeBigPoints\!!widtha \width % % \PointsToWholeBigPoints\!!heightb\height % % but since pdf/x does not round when checking if % % the boxes fit inside the media box ... % \PointsToBigPoints{#2}\left % \PointsToBigPoints\!!heighta\bottom % \PointsToBigPoints\!!widtha \width % \PointsToBigPoints\!!heightb\height % \xdef\currentPDFcropboxspec % {[\left\space\bottom\space\width\space\height]}% % \global\let\currentPDFtrimboxspec\currentPDFcropboxspec % % \xdef\currentPDFpagemode % {/PageMode \ifcase#6 % /UseNone\or/FullScreen\or/UseOutlines\else/UseNone\fi}% % \xdef\currentPDFpagemode {\ifnum#6=4 /PageLayout /TwoColumnRight \else /PageMode \ifcase#6 /UseNone\or/FullScreen\or/UseOutlines\else/UseNone\fi \fi}% \xdef\currentPDFviewerprefs % space after #6 needed, else \relax {\ifcase#6 \or\or\else /ViewerPreferences << /FitWindow true >>\fi}% \egroup} % not that good if we switch drivers \def\addPDFdocumentinfo {\doPDFaddtocatalog{\currentPDFpagemode\currentPDFviewerprefs}% \doPDFaddtocatalog{/Version /\PDFversion}% \doPDFaddtoinfo{/Trapped /False}% \doPDFaddtoinfo{/ConTeXt.Version (\contextversion)}% \doPDFaddtoinfo{/ConTeXt.Time (\number\normalyear.\twodigits\normalmonth.\twodigits\normalday\space \twodigits\currenthour:\twodigits\currentminute)}% \doPDFaddtoinfo{/ConTeXt.Jobname (\jobname)}% \doPDFaddtoinfo{/ConTeXt.Url (www.pragma-ade.com)}} \appendtoksonce % hack to prevent duplicates \addPDFdocumentinfo \to \everyfirstshipout \ifx\pdfminorversion\undefined \ifx\pdfoptionpdfminorversion\undefined \newcount\pdfminorversion \else \let\pdfminorversion\pdfoptionpdfminorversion \fi \fi \pdfminorversion=5 \def\PDFversion{1.\number\pdfminorversion} \appendtoksonce \def\PDFversion{1.\the\pdfminorversion}% \let\addPDFdocumentinfo\relax \to \everyresetspecials \def\doPDFsetupwhateverbox#1#2#3#4#5#6% watch the extra arguments {\bgroup \!!widtha \dimexpr#5+#3\relax \!!heightb\dimexpr#2-#4\relax \!!heighta\dimexpr\!!heightb-#6\relax % sometimes whole values give better results % \PointsToWholeBigPoints{#3}\left % \PointsToWholeBigPoints\!!heighta\bottom % \PointsToWholeBigPoints\!!widtha \width % \PointsToWholeBigPoints\!!heightb\height % but since pdf/x does not round when checking if % the boxes fit inside the media box ... \PointsToBigPoints{#3}\left \PointsToBigPoints\!!heighta\bottom \PointsToBigPoints\!!widtha \width \PointsToBigPoints\!!heightb\height \xdef#1{[\left\space\bottom\space\width\space\height]}% \egroup} \def\doPDFsetupartbox {\doPDFsetupwhateverbox\currentPDFartbox } \def\doPDFsetupcropbox {\doPDFsetupwhateverbox\currentPDFcropbox } \def\doPDFsetupbleedbox{\doPDFsetupwhateverbox\currentPDFbleedbox} \def\doPDFsetuptrimbox {\doPDFsetupwhateverbox\currentPDFtrimbox } \gdef\currentPDFtrimbox{\currentPDFcropbox} % default, needed for pdf/x \def\flushPDFwhateverbox#1#2% {\doifsomething{#1}{\doPDFpageattribute{/#2Box #1}}} \def\flushPDFpageboxes {\flushPDFwhateverbox\currentPDFartbox {Art}% \flushPDFwhateverbox\currentPDFcropbox {Crop}% \flushPDFwhateverbox\currentPDFbleedbox{Bleed}% \flushPDFwhateverbox\currentPDFtrimbox {Trim}} \appendtoksonce \flushPDFpageboxes \to \everyshipout % \def\doPDFsetupidentity#1#2#3#4#5#6% % {\bgroup % \enablePDFdocencoding % \edef\!!stringa{#5}% % \ifx\!!stringa\empty \ifx\pdfdate\undefined\else % \edef\!!stringa{D:\pdfdate}% % \fi \fi % \expanded{\doPDFaddtoinfo % {/Title (#1) % /Subject (#2) % /Author (#3) % /Creator (#4) % /ModDate (\!!stringa) % /ID (\jobname.\!!stringa) % needed for pdf/x % /Keywords (#6)}}% % \egroup} \def\doPDFsetupidentity#1#2#3#4#5#6% {\bgroup \enablePDFdocencoding \sanitizePDFencoding#1\to\idtitle \stripstring\idtitle \sanitizePDFencoding#2\to\idsubject\stripstring\idsubject \sanitizePDFencoding#3\to\idauthor \stripstring\idauthor \sanitizePDFencoding#4\to\idcreator\stripstring\idcreator \sanitizePDFencoding#6\to\idkeyword\stripstring\idkeyword \expanded{\doPDFaddtoinfo {/Title \ifPDFunicode<\idtitle >\else(\idtitle )\fi /Subject \ifPDFunicode<\idsubject>\else(\idsubject)\fi /Author \ifPDFunicode<\idauthor >\else(\idauthor )\fi /Creator \ifPDFunicode<\idcreator>\else(\idcreator)\fi /ModDate (#4) /ID (\jobname.#5) % needed for pdf/x /Keywords \ifPDFunicode<\idkeyword>\else(\idkeyword)\fi}}% \egroup} %D \macros %D {doPDFsetupopenaction,doPDFsetupcloseaction, %D doPDFsetupopenpageaction,doPDFsetupclosepageaction} %D %D Setting the open and close actions is kind of fuzzy %D because action chains are derived from the reference %D mechanism. %D Starting with version~5 viewers, when the open actions %D started yto give problems, for testing purposes we %D decided use indirect actions. % \definespecial\dosetupopenaction {\doPDFsetupopenaction} % \definespecial\dosetupcloseaction {\doPDFsetupcloseaction} % \definespecial\dosetupopenpageaction {\doPDFsetupopenpageaction} % \definespecial\dosetupclosepageaction{\doPDFsetupclosepageaction} \let\lastPDFaction\empty %D We can safe a couple of references by moving this code %D to the specific drivers. %D %D The following code used to work okay, but as with any %D update of Acrobat Viewers, upward compatibility was %D just a dream. \definespecial\dosetupopenaction {\doPDFaddtocatalog{/OpenAction <<\lastPDFaction>>}} \definespecial\dosetupcloseaction{\doPDFaddtocatalog{/CloseAction <<\lastPDFaction>>}} % todo: /AA << dictionary in catalog >> % \globalletempty\PDFdocumentclose % \globalletempty\PDFwillsave % \globalletempty\PDFdidsave % \globalletempty\PDFwillprint % \globalletempty\PDFdidprint % \definespecial\dosetupdocumentcloseaction {\global\let\PDFdocumentclose\lastPDFaction} % \definespecial\dosetupwillsaveaction {\global\let\PDFwillsave \lastPDFaction} % \definespecial\dosetupdidsaveaction {\global\let\PDFdidsave \lastPDFaction} % \definespecial\dosetupwillprintaction {\global\let\PDFwillprint \lastPDFaction} % \definespecial\dosetupdidprintaction {\global\let\PDFdidprint \lastPDFaction} % \def\checkPDFdocumentactions % {\iflocation % \doPDFpageattribute % {/AA <<\ifx\PDFdocumentclose\empty \else /DC <<\PDFdocumentclose>> \fi % \ifx\PDFwillsave \empty \else /WS <<\PDFwillsave >> \fi % \ifx\PDFdidsave \empty \else /DS <<\PDFdidsave >> \fi % \ifx\PDFwillprint \empty \else /WP <<\PDFwillprint >> \fi % \ifx\PDFdidprint \empty \else /DP <<\PDFdidprint >> \fi>>}% % % \globalletempty\PDFdocumentclose % % \globalletempty\PDFwillsave % % \globalletempty\PDFdidsave % % \globalletempty\PDFwillprint % % \globalletempty\PDFdidprint % \global\let\checkPDFdocumentactions\relax % \fi} % \appendtoksonce % \checkPDFdocumentactions % \to \everylastshipout %\def\doPDFsetupopenaction% % {\doPDFdictionaryobject{FDF}{local:openaction}\lastPDFaction % \doPDFgetobjectreference{FDF}{local:openaction}\PDFobjectreference % \doPDFaddtocatalog{/OpenAction \PDFobjectreference}} % %\def\doPDFsetupcloseaction% % {\doPDFdictionaryobject{FDF}{local:closeaction}\lastPDFaction % \doPDFgetobjectreference{FDF}{local:closeaction}\PDFobjectreference % \doPDFaddtocatalog{/CloseAction \PDFobjectreference}} \let\PDFopenpageaction \empty \let\PDFclosepageaction\empty \definespecial\dosetupopenpageaction {\global\let\PDFopenpageaction \lastPDFaction} \definespecial\dosetupclosepageaction{\global\let\PDFclosepageaction\lastPDFaction} \def\checkPDFpageactions {\iflocation % important since direct -) \donefalse \ifx\PDFopenpageaction \empty\!!doneafalse\else\donetrue\!!doneatrue\fi \ifx\PDFclosepageaction\empty\!!donebfalse\else\donetrue\!!donebtrue\fi \ifdone \doPDFpageattribute {/AA <<\if!!donea/O <<\PDFopenpageaction >> \fi \if!!doneb/C <<\PDFclosepageaction>> \fi>>}% \fi \global\let\PDFopenpageaction \empty \global\let\PDFclosepageaction\empty \fi} \appendtoksonce \checkPDFpageactions \to \everyshipout %D \macros %D {doPDFstartthisislocation} %D %D Next we define the macros that deal with hyperreferencing, %D graphic inclusion and general document features. These are %D the olderst ones. I won't comment much because one needs %D knowledge of \PDF\ itself, and explaning \PDF\ is beyond %D this documentation. \def\doPDFstartthisislocation#1% {\bgroup \setPDFdestination{#1}% \ifx\PDFdestination\empty \else \doPDFdestination{\PDFdestination}% \fi \egroup} %D \macros %D {doPDFstartgotolocation, %D doPDFstartgotorealpage, %D doPDFstartgotoJS} %D %D The goto macros use the switch \type{\ifsecondaryreference} %D to determine if actions should be linked. \def\locationfilesuffix{pdf} % \def\preparePDFlocationfile#1#2% % {\setreferencefilename#1\to#2% % \expanded{\doifnotinstring{.\locationfilesuffix}{#2}} % {\edef#2{#2.\locationfilesuffix}}} % % \def\preparePDFlocationfile#1\to#2% % {\setreferencefilename#1\to#2% % \expanded{\doifnotinstring{.pdf}{#2}}{\edef#2{#2.pdf}}} \def\doPDFstartgotolocation#1#2#3#4#5#6% {\bgroup \doifelsenothing{#3} {\setPDFdestination{#5}% \doifelsenothing\PDFdestination {\let\action\empty} {\doifelsenothing{#4} {\let\PDFfile\empty} {\expanded{\beforesplitstring#4}\at.\to\PDFfile \doifparentfileelse\PDFfile % {#4} {\let\PDFfile\empty} %{\setreferencefilename#4.\locationfilesuffix\to\PDFfile {\@EA\setreferencefilename\PDFfile.\locationfilesuffix\to\PDFfile \edef\PDFfile {R /F (\PDFfile)\ifgotonewwindow\space/NewWindow true \fi}}}% \edef\action% {/S /GoTo\PDFfile\space /D (\PDFdestination)}}} {\doifelsenothing{#4} {\let\PDFfile\empty \let\PDFdestination\empty} {\setreferencefilename/#4\to\PDFfile \setPDFdestination{#5}% \doifsomething\PDFdestination {\edef\PDFdestination{\URLhash\PDFdestination}}}% \edef\action{/S /URI /URI (#3\PDFfile\PDFdestination)}}% \ifx\action\empty\else \ifsecondaryreference \savesecondaryPDFreference\action \else \getsecondaryPDFreferences \doPDFaction{\PDFswapdir#1}{#2}{\action \secondaryPDFreferences}% \fi \fi \egroup} \def\PDFgotonewwindow{\ifgotonewwindow\space/NewWindow true \fi} % optimization in tpd driver % % \edef\PDFdestination{(page:\the\scratchcounter)}% % % ==> % % \advance\scratchcounter 1 % \edef\PDFdestination{[\pdfpageref \PDFobjref\scratchcounter\PDFpageviewwrd]}% % % \doPDFgetpagedestination#1#2% pagenumber macro % % fuzzy hack \def\doPDFstartgotorealpage#1#2#3#4#5% watch the R append trick {\bgroup \doifelsenothing{#3}% #1 = url {\scratchcounter0#5\relax \ifnum\scratchcounter>0 \doifelsenothing{#4} {\let\PDFfile\empty} {\expanded{\beforesplitstring#4}\at.\to\PDFfile \doifparentfileelse\PDFfile % {#4} {\let\PDFfile\empty} %{\setreferencefilename#4.\locationfilesuffix\to\PDFfile {\@EA\setreferencefilename\PDFfile.\locationfilesuffix\to\PDFfile \edef\PDFfile{R /F (\PDFfile)\PDFgotonewwindow}}}% \ifx\PDFfile\empty \ifcase\overcomePDFpage \or % pdf starts numbering at zero \advance\scratchcounter \minusone \edef\PDFdestination{[\the\scratchcounter\space\PDFpageviewwrd]}% \or % pdf starts numbering at zero \advance\scratchcounter \minusone \edef\PDFdestination{(page:\the\scratchcounter)}% \or % pdftex starts numbering at one \edef\PDFdestination{[\pdfpageref\scratchcounter\space0 R \PDFpageviewwrd]}% \fi \else % across files it's a page number / pdf starts numbering at zero \advance\scratchcounter \minusone \edef\PDFdestination{[\the\scratchcounter\space\PDFpageviewwrd]}% \fi \edef\action{/S /GoTo\PDFfile\space /D \PDFdestination}% \else \let\action\empty \fi} {\doifelsenothing{#4} {\let\PDFfile\empty} {\setreferencefilename/#4\to\PDFfile}% \edef\action{/S /URI /URI (#3\PDFfile)}}% \ifx\action\empty\else \ifsecondaryreference \savesecondaryPDFreference\action \else \getsecondaryPDFreferences \doPDFaction{\PDFswapdir#1}{#2}{\action \secondaryPDFreferences}% \fi \fi \egroup} \let\lastfakedPDFpage\!!zerocount \def\fakePDFpagedestination % as in pdf, we start numbering at zero {\iflocation \ifarrangingpages \else \ifnum\overcomePDFpage=\plustwo \ifnum\lastfakedPDFpage<\realpageno \bgroup \xdef\lastfakedPDFpage{\realfolio}% \advance\realpageno \minusone % is \expanded needed ? \expanded{\doPDFdestination{page:\realfolio}}% \egroup \fi \fi \fi \fi} \appendtoksonce \fakePDFpagedestination \to \everyshipout \def\doPDFstartgotoJS#1#2#3% {\bgroup \doPSsanitizeJScode#3\to\sanitizedJScode \edef\action {/S /JavaScript /JS (\sanitizedJScode)}% \ifsecondaryreference \savesecondaryPDFreference\action \else \getsecondaryPDFreferences \doPDFaction{\PDFswapdir#1}{#2}{\action \secondaryPDFreferences}% \fi \egroup} %D \macros %D {doPDFstartexecutecommand} %D %D At the cost of much auxiliary placeholders, we can pretty %D fast convert the command asked for. This is how the \PDF\ %D code looks like. \def\PDFmoviecode#1#2#3% {/Movie /T (\ifcase#1movie \else sound \fi\ifx\argumentA\empty#2\else\argumentA\fi) /Operation /\ifcase#3Play\or Stop\or Pause\or Resume\fi\space} \def\PDFexecutestartmovie {\PDFmoviecode0\currentmovie0} \def\PDFexecutestopmovie {\PDFmoviecode0\currentmovie1} \def\PDFexecutepausemovie {\PDFmoviecode0\currentmovie2} \def\PDFexecuteresumemovie {\PDFmoviecode0\currentmovie3} \def\PDFexecutestartsound {\PDFmoviecode1\currentsound0} \def\PDFexecutestopsound {\PDFmoviecode1\currentsound1} \def\PDFexecutepausesound {\PDFmoviecode1\currentsound2} \def\PDFexecuteresumesound {\PDFmoviecode1\currentsound3} \def\PDFformcode#1% {\doFDFiffieldset{#1}{/Field [\doFDFgetfieldset{#1}]}} % bit 3 = html % bit 6 = xml % bit 4 = get \ifx\PDFsubmitfiller\undefined \let\PDFsubmitfiller\empty \fi \chardef\PDFformmethod=1 % 0=GET 1=POST \def\PDFformflag#1#2{\ifcase\PDFformmethod#1\else#2\fi} \def\PDFexecuteimportform {/Named /N /AcroForm:ImportFDF} \def\PDFexecuteexportform {/Named /N /AcroForm:ExportFDF} \def\PDFexecuteresetform {/ResetForm \PDFformcode\argumentA} \def\PDFexecutesubmitform {/SubmitForm \PDFformcode\argumentB /Flags \ifcase\submitoutputformat\space \PDFformflag{12} {4} % 0=unknown \or \PDFformflag{12} {4} % 1=HTML \or \PDFformflag {8} {0} % 2=FDF \or \PDFformflag{40}{32} % 3=XML \else \PDFformflag{12} {4} % ?=unknown \fi /F (\argumentA)\PDFsubmitfiller} % urifill permits url substitution \def\PDFexecutehide {/Hide /T (\argumentA) /H true} \def\PDFexecuteshow {/Hide /T (\argumentA) /H false} \def\PDFexecutefirst {/Named /N /FirstPage} \def\PDFexecuteprevious {/Named /N /PrevPage} \def\PDFexecutenext {/Named /N /NextPage} \def\PDFexecutelast {/Named /N /LastPage} \def\PDFexecutebackward {/Named /N /GoBack} \def\PDFexecuteforward {/Named /N /GoForward} \def\PDFexecuteprint {/Named /N /Print} \def\PDFexecuteexit {/Named /N /Quit} \def\PDFexecuteclose {/Named /N /Close} \def\PDFexecutesave {/Named /N /Save} \def\PDFexecutesavenamed {/Named /N /SaveAs} \def\PDFexecuteopennamed {/Named /N /Open} \def\PDFexecutehelp {/Named /N /HelpUserGuide} \def\PDFexecutetoggle {/Named /N /FullScreen} \def\PDFexecutesearch {/Named /N /Find} \def\PDFexecutesearchagain {/Named /N /FindAgain} \def\PDFexecutegotopage {/Named /N /GoToPage} \def\PDFexecutequery {/Named /N /AcroSrch:Query} \def\PDFexecutequeryagain {/Named /N /AcroSrch:NextHit} \def\PDFexecutefitwidth {/Named /N /FitWidth} \def\PDFexecutefitheight {/Named /N /FitHeight} \let\PDFobjectclass\empty \let\PDFobjectname \empty \def\doPDFstartexecutecommand#1#2#3#4% {\doifdefined{PDFexecute#3} {\bgroup \edef\argument{#4}% \ifx\argument\empty \let\argumentA\empty \let\argumentB\empty \else \@EA\dogetcommalistelement\@EA1\@EA\from#4\to\argumentA \@EA\dogetcommalistelement\@EA2\@EA\from#4\to\argumentB \fi \edef\action% {/S \getvalue{PDFexecute#3}}% \ifsecondaryreference \savesecondaryPDFreference\action \else \getsecondaryPDFreferences % \ifx\PDFobjectclass\empty % \let\next\doPDFaction % \else % \edef\next{\doPDFactionobject{\PDFobjectclass}{\PDFobjectname}}% % \globalletempty\PDFobjectclass % \globalletempty\PDFobjectname % \fi % \next \doPDFaction{\PDFswapdir#1}{#2}{\action \secondaryPDFreferences}% \fi \egroup}} %D \macros %D {doPDFstartrunprogram} %D %D Running programs is possible, but is non that portable, and %D therefore dangerous. \def\doPDFstartrunprogram#1#2#3#4% new: #3 => #3#4 {\bgroup %\edef\string{#3}% %\@EA\beforesplitstring\string\at{ }\to\program %\@EA\aftersplitstring \string\at{ }\to\parameters %\edef\action% % {/S /Launch /F (\program) /P (\parameters) /D (.)}% \edef\action {/S /Launch /F (#3) /P (#4) /D (.)}% \ifsecondaryreference \savesecondaryPDFreference\action \else \getsecondaryPDFreferences \doPDFaction{\PDFswapdir#1}{#2}{\action \secondaryPDFreferences}% \fi \egroup} %D \macros %D {doPDFstartgotoprofile} %D %D Far from perfect, but nevertheless present, is the profile %D handler. We want to misuse article threads for reder %D profiles. \def\doPDFstartgotoprofile#1#2#3% to be done: file {\bgroup \setPDFdestination{#3}% \doifsomething\PDFdestination {\edef\action {/S /Thread /D (\PDFdestination)}% \ifsecondaryreference \savesecondaryPDFreference\action \else \getsecondaryPDFreferences \doPDFaction{\PDFswapdir#1}{#2}{\action \secondaryPDFreferences}% \fi}% \egroup} %D \macros %D {doPDFsetpagetransition} %D %D This array holds a reasonable selection of transitions %D (watch out: \type{replace} is not in this list). Most of %D the transitions look awful anyway. By the way, \CONTEXT\ is %D able to select transitions randomly. % some day, when 1.5 is on linux and apple, we will add: % % \def\pagetransitions % {{split,in,vertical},{split,in,horizontal}, % {split,out,vertical},{split,out,horizontal}, % {blinds,horizontal},{blinds,vertical}, % {box,in},{box,out}, % {wipe,east},{wipe,west},{wipe,north},{wipe,south}, % dissolve, % {glitter,east},{glitter,south}, % {fly,in,east},{fly,in,west},{fly,in,north},{fly,in,south}, % {fly,out,east},{fly,out,west},{fly,out,north},{fly,out,south}, % {push,east},{push,west},{push,north},{push,south}, % {cover,east},{cover,west},{cover,north},{cover,south}, % {uncover,east},{uncover,west},{uncover,north},{uncover,south}, % fade} \def\pagetransitions {{split,in,vertical},{split,in,horizontal}, {split,out,vertical},{split,out,horizontal}, {blinds,horizontal},{blinds,vertical}, {box,in},{box,out}, {wipe,east},{wipe,west},{wipe,north},{wipe,south}, dissolve, {glitter,east},{glitter,south}} %D Again, we use macros as placeholders for \PDF\ key||value %D pairs. \def\PDFpagesplit {/S /Split } \def\PDFpageblinds {/S /Blinds } \def\PDFpagebox {/S /Box } \def\PDFpagewipe {/S /Wipe } \def\PDFpagedissolve {/S /Dissolve } \def\PDFpageglitter {/S /Glitter } \def\PDFpagereplace {/S /R } \def\PDFpagefly {/S /Fly } % 1.5 \def\PDFpagepush {/S /Push } % 1.5 \def\PDFpagecover {/S /Cover } % 1.5 \def\PDFpageuncover {/S /Uncover } % 1.5 \def\PDFpagefade {/S /Fade } % 1.5 \def\PDFpagehorizontal {/Dm /H } \def\PDFpagevertical {/Dm /V } \def\PDFpagein {/M /I } \def\PDFpageout {/M /O } \def\PDFpageeast {/Di 0 } \def\PDFpagenorth {/Di 90 } \def\PDFpagewest {/Di 180 } \def\PDFpagesouth {/Di 270 } \def\dodoPDFsetpagetransition#1% {\doifdefined{PDFpage#1} {\edef\PDFpagetransitions{\PDFpagetransitions\getvalue{PDFpage#1}}}} \def\doPDFsetpagetransition#1#2% {\let\PDFpagetransitions\empty \processcommalist[#1]\dodoPDFsetpagetransition \doPDFpageattribute %{\ifnum#2>0 /Dur #2 \fi {\ifnum0<0#2 /Dur #2 \fi \ifx\PDFpagetransitions\empty\else/Trans <<\PDFpagetransitions>>\fi}} % \ifx\PDFpagetransitions\empty\else/Trans <>\fi}} %D \macros %D {doPDFinsertmov} %D %D Most of the annotations we use here are of type {\em %D link}, but here is another one: the {\em movie} annotation. %D The driver module must implement \type {setcurrentmovie}. %D Great: this will become an obsolete pdf feature; why did we have to %D keep up with the bugs ... and by the time acrobat gets better in %D handling it have to drop it. \let\currentmovie\s!unknown \def\doPDFinsertmov {\bgroup \xdef\currentmovie{\@@DriverImageLabel}% \PointsToBigPoints\@@DriverImageWidth \width \PointsToBigPoints\@@DriverImageHeight\height \let\pdf@@options\empty \let\pdf@@actions\empty \donefalse \expanded{\processallactionsinset[\@@DriverImageOptions]} [\v!controls=>\donetrue, \v!repeat=>\edef\pdf@@actions{\pdf@@actions /Mode /Repeat }, \v!preview=>\edef\pdf@@options{\pdf@@options /Poster true }]% \edef\pdf@@actions{\pdf@@actions /ShowControls \ifdone true\else false\fi}% \doPDFannotation\@@DriverImageWidth\@@DriverImageHeight {/Subtype /Movie /Border [0 0 0] /T (movie \currentmovie) /Movie << /F (\@@DriverImageFile) /Aspect [\width\space\height] \pdf@@options >> /A << \pdf@@actions >>}% \egroup} %D \macros %D {doPDFinsertsoundtrack} %D %D In \PDF\ sounds can be embedded like movies. \ifx\everygoto\undefined \newtoks\everygoto \fi \let\currentsound\s!unknown \def\doPDFinsertsoundtrack#1#2#3% {\bgroup \xdef\currentsound{#2}% \let\pdf@@actions\empty \@EA\processallactionsinset\@EA [#3] [\v!repeat=>\edef\pdf@@actions{\pdf@@actions /Mode /Repeat }]% \collectdriverresource %\flushatshipout % since it can be buried in a chained box {\doPDFannotation{0pt}{0pt} {/Subtype /Movie /Border [0 0 0] /T (sound \currentsound) /Movie <>% \ifx\pdf@@actions\empty\else/A << \pdf@@actions >>\fi}}% \egroup} %D \macros %D {doPDFattachfile} \def\doPDFfilestreamobject#1#2#3#4% {} \def\doPDFfilestreamidentifier#1% {0} \def\doPDFgetfilestreamreference#1#2% {0 0 R} \def\doPDFattachfile#1#2#3#4#5#6#7#8% {\bgroup % title width height color symbol file \edefconvertedargument\PDFfile{#8}% % beware: the symbol may (indirectly) use the file % reference when typesetting the object number; \presetPDFsymbolappearance{#5}{#6}{#2}{#3}{#4}% sets width/height \startPDFsymbolappearance \doPDFembedfile\PDFfile{#7}{#8}% \doPDFgetembeddedfilereference\PDFfile\PDFobjectreference \setFDFlayer\@@DriverAttachmentLayer \doPDFannotation{\width}{\totalheight} {/Subtype /FileAttachment /FS \PDFobjectreference\space /Contents (#1) \PDFsymbol \FDFlayer \PDFattributes}% \stopPDFsymbolappearance \egroup} % semi-public \def\doPDFembedfile#1#2#3% symbolic name | filename | user name {\edefconvertedargument\PDFfile{#1}% \doifnotflagged{a:\PDFfile}% {\doPDFfilestreamobject{PDFEF}{\PDFfile}{#2}{#3}% \doglobal\setflag{a:\PDFfile}}} \def\doPDFgetembeddedfilereference#1#2% {\edefconvertedargument\PDFfile{#1}% \doPDFgetobjectreference{PDFEF}\PDFfile#2} \def\doPDFgetembeddedfilestreamreference#1#2% {\edefconvertedargument\PDFfile{#1}% \doPDFgetfilestreamreference\PDFfile#2} % == \doPDFgetobjectreference{PDFFS}\PDFfile#2 \definespecial \doattachfile {\doPDFattachfile} % requested by Jens-Uwe Morawski: permits usage of pdftosrc % in viewers that don't support attachments: % % \definesymbol % [ObjectNumber] % % [object number {\PDFattachmentnumber[xx]}] % named % [object number \PDFattachmentnumber] % current % % \useattachment[test][xx][test.tex] % \setupattachments[symbol=ObjectNumber] % \attachment[test] \def\PDFattachmentnumber {\dosingleargument\doPDFattachmentnumber} \def\doPDFattachmentnumber[#1]% {\iffirstargument \doPDFfilestreamidentifier{#1}% \else \doPDFfilestreamidentifier\PDFfile \fi} %D \macros %D {...} %D %D Rather preliminary. We have to wait till the complete specs %D show up. As usual, we cannot really check it (Acrobat 6.0 %D has a bug that inhibits us to make a test file). Half a day %D of testing made clear that trying to control the plugin fails %D in most cases (we need plugin specs -). We also miss a feature %D to let acrobat wait with proceeding (action processing) till %D the media clip is ready. % aiff audio/aiff % au audio/basic % avi video/avi % mid audio/midi % mov video/quicktime % mp3 audio/x-mp3 (mpeg) % mp4 audio/mp4 % mp4 video/mp4 % mpeg video/mpeg % smil application/smil % swf application/x-shockwave-flash % beware, this is preliminary code, should be improved \def\PDFrenderingspecs#1{\executeifdefined{PDFMR:#1}\empty} \def\PDFexecutestartrendering {/Rendition /OP 0 \PDFrenderingspecs\argumentA} \def\PDFexecutestoprendering {/Rendition /OP 1 \PDFrenderingspecs\argumentA} \def\PDFexecutepauserendering {/Rendition /OP 2 \PDFrenderingspecs\argumentA} \def\PDFexecuteresumerendering {/Rendition /OP 3 \PDFrenderingspecs\argumentA} % todo : sub files % % \doPDFembedfile{pier-39.png}{pier-39.png}{pier-39.png}% % \doPDFgetembeddedfilestreamreference{pier-39.png}\xPDFobjectreference % \edef\xxxx{/RF [(pier-39.png) \xPDFobjectreference]}% % todo: alternative renderings % % object_1 -> <> >> % object_2 -> <> >> % % rendering -> <> % todo: embedded files (too buggy) % % \let\PDFattribute\empty % % /D \PDFobjectreference % % test one, no error, but ignored % \doifinset\v!file{#4} % {\doPDFembedfile{#3}{#3}{#3}% % \doPDFgetembeddedfilestreamreference{#3}\PDFobjectreference % \edef\PDFattribute{/EF \PDFobjectreference}}% % % official, does not work either % \doifinset\v!file{#4} % {\doPDFembedfile{#3}{#3}{#3}% % \doPDFgetembeddedfilereference{#3}\PDFobjectreference} % % do we play the game as follows \definespecial\doinsertrendering#1#2#3#4% tag mime file options {\ifundefined{PDFMR:#1}% \doifinstringelse{://}{#3}\donetrue\donefalse % evt url as keyword \doPDFdictionaryobject{PDFMF}{#1} {/Type /Rendition /S /MR % does not work: /SP << /Type /MediaScreenParam /BE << /B [1 0 0] /O 0.5 >> >> /C << /Type /MediaClip /S /MCD /N (#1) /Alt [() (file not found)] % language id + message /D << /Type /Filespec /F (#3) \ifdone/FS /URL\fi >> /CT (#2) >>}% % common code \doifobjectreferencefoundelse{PDFMS}{#1} {\doPDFgetobjectreference{PDFMS}{#1}\PDFobjectreferenceB} {\doPDFgetobjectreference{PDFMU}{#1}\PDFobjectreferenceB}% \doPDFgetobjectreference{PDFMF}{#1}\PDFobjectreferenceA \setxvalue{PDFMR:#1}% needed /AA actions in /Screen {/R \PDFobjectreferenceA /AN \PDFobjectreferenceB}% \doifobjectreferencefoundelse{PDFMS}{#1}\donothing {\dodoinsertrenderingwindow{PDFMU}{#1}\zeropoint\zeropoint{#4}}% \fi} \definespecial\doinsertrenderingobject#1#2#3#4% tag class objectname options {\ifundefined{PDFMR:#1}% \doPDFgetobjectreference{#2}{#3}\PDFobjectreference \doPDFdictionaryobject{PDFMF}{#1} {/Type /Rendition /S /MR /C << /Type /MediaClip /S /MCD /N (#1) /D \PDFobjectreference>>}% % common code \doifobjectreferencefoundelse{PDFMS}{#1} {\doPDFgetobjectreference{PDFMS}{#1}\PDFobjectreferenceB} {\doPDFgetobjectreference{PDFMU}{#1}\PDFobjectreferenceB}% \doPDFgetobjectreference{PDFMF}{#1}\PDFobjectreferenceA \setxvalue{PDFMR:#1}% needed /AA actions in /Screen {/R \PDFobjectreferenceA /AN \PDFobjectreferenceB}% \doifobjectreferencefoundelse{PDFMS}{#1}\donothing {\dodoinsertrenderingwindow{PDFMU}{#1}\zeropoint\zeropoint{#4}}% \fi} \definespecial\doinsertrenderingwindow {\dodoinsertrenderingwindow{PDFMS}} \def\dodoinsertrenderingwindow#1#2#3#4#5% {\vbox to #4 \bgroup \checkPDFscreenactions{#2}{#5}% \doPDFgetobjectpagereference{PDFMF}{#2}\PDFobjectreferenceA \doPDFgetobjectreference {PDFMF}{#2}\PDFobjectreferenceB \vss \hbox to #3 \bgroup \doPDFannotationobject{#1}{#2}{#3}{#4} {/Subtype /Screen /P \PDFobjectreferenceA /A \PDFobjectreferenceB \PDFattributes /Border [0 0 0]}% \hss \egroup \egroup} \global\let\PDFrenderingopenpageaction \empty \global\let\PDFrenderingclosepageaction\empty \def\checkPDFscreenactions#1#2% {\let\PDFattributes\empty \iflocation % important since direct -) % the action can either (already) be set by the window handler % or (normally when no window [i.e a zero dimensions one] is present) by keyword \doifinset\v!auto{#2} {% brrr, here instead of in navigation module, must move and become special % now two sided dependency \let\checkrendering\gobbleoneargument \ifx\PDFrenderingopenpageaction \empty \handlereferenceactions{\v!StartRendering{#1}}\dosetuprenderingopenpageaction \fi \ifx\PDFrenderingclosepageaction\empty \handlereferenceactions{\v!StopRendering {#1}}\dosetuprenderingclosepageaction \fi }% \donefalse \ifx\PDFrenderingopenpageaction \empty\!!doneafalse\else\donetrue\!!doneatrue\fi \ifx\PDFrenderingclosepageaction\empty\!!donebfalse\else\donetrue\!!donebtrue\fi \ifdone \edef\PDFattributes {/AA <<\if!!donea/PO <<\PDFrenderingopenpageaction >> \fi \if!!doneb/PC <<\PDFrenderingclosepageaction>> \fi>>}% \fi \global\let\PDFrenderingopenpageaction \empty \global\let\PDFrenderingclosepageaction\empty \fi} \definespecial\dosetuprenderingopenpageaction {\global\let\PDFrenderingopenpageaction \lastPDFaction} \definespecial\dosetuprenderingclosepageaction{\global\let\PDFrenderingclosepageaction\lastPDFaction} %D \macros %D {doPDFinsertbookmark} %D %D Well, here is the dreadfull bookmark, rather useless because %D only standard encoding is possible, no typography is done, %D and a maximum of 32~characters is advized. \def\doPDFinsertbookmark#1#2#3#4#5% level sublevels text page open=1 {\bgroup \sanitizePDFencoding#3\to\bookmarktext % uses scratchcounter \stripstring\bookmarktext \doPDFbookmark{#1}{#2}{\bookmarktext}{#4}{#5}% \egroup} %D The next section of this module is dedicated to form %D support. These macros are complicated by the fact that %D cloning is possible. %D \macros %D {FDFflag...,FDFplus...} %D %D The \type{/FT} key determines the type of field: text, %D button or choice. The latter two come in several disguises, %D which are set by flipping bits in the \type{/Ff}. Other bits %D are used to set states. Personally I hate this bitty way of %D doing things. The next six bit determine the field sub type: \def\FDFflagMultiLine {4096} % 13 \def\FDFflagNoToggleToOff {16384} % 15 \def\FDFflagRadio {32768} % 16 (not used as such) \def\FDFflagPushButton {65536} % 17 \def\FDFflagPopUp {131072} % 18 \def\FDFflagEdit {262144} % 19 % bugged anyway, so we need to drop it: \def\FDFflagRadiosInUnison {33554432} % 26 %D A few more (pdf 1.4) flags, what the spell check one: for %D obscure reasons for Adobe downward compatibility means %D enabling features that harm old applications like testing. \def\FDFflagDoNotSpellCheck {4194304} % 23 \def\FDFflagDoNotScroll {8388608} % 24 %D The next bits (watch how strange the bits are organized) %D take care of the states: \def\FDFflagReadOnly {1} % 1 \def\FDFflagRequired {2} % 2 \def\FDFflagNoExport {4} % 3 \def\FDFflagPassword {8192} % 14 \def\FDFflagSort {524288} % 20 \def\FDFflagFileSelect {1048576} % 21 %D There is a second, again bitset oriented, \type{/F} flag: \def\FDFplusInvisible {1} % 1 \def\FDFplusHidden {2} % 2 \def\FDFplusPrintable {4} % 3 %def\FDFplusNoView {32} % 6 %def\FDFplusToggleNoView {256} % 9 \def\FDFplusAutoView {256} % {288} % 6+9 %D \macros %D {setFDFswitches} %D %D The non||type bits are mapped onto user||interface %D swithes, to be used later on: \def\@@FDFflag{FDFflag} \def\@@FDFplus{FDFplus} \letvalue {\@@FDFflag\v!readonly}=\FDFflagReadOnly \letvalue {\@@FDFflag\v!required}=\FDFflagRequired \letvalue {\@@FDFflag\v!protected}=\FDFflagPassword \letvalue {\@@FDFflag\v!sorted}=\FDFflagSort \letvalue {\@@FDFflag\v!unavailable}=\FDFflagNoExport \letvalue {\@@FDFflag\v!nocheck}=\FDFflagDoNotSpellCheck \letvalue {\@@FDFflag\v!fixed}=\FDFflagDoNotScroll \letvalue {\@@FDFflag\v!file}=\FDFflagFileSelect \letvalue {\@@FDFplus\v!hidden}=\FDFplusHidden \letvalue {\@@FDFplus\v!printable}=\FDFplusPrintable \letvalue {\@@FDFplus\v!auto}=\FDFplusAutoView %D A set of switches is collected into the flags we mentioned %D before by the next macro (we don't handle negations yet, %D but do take care of redundancy): \def\FDFflag{0} \def\FDFplus{0} \def\setFDFswitches[#1]% {\bgroup \!!counta\zerocount \!!countb\zerocount \def\docommand##1% {\doifsomething{##1} {\advance\!!counta 0\getvalue{\@@FDFflag##1}% \setvalue{\@@FDFflag##1}{0}% \advance\!!countb 0\getvalue{\@@FDFplus##1}% \setvalue{\@@FDFplus##1}{0}}}% \processcommacommand[#1]\docommand \xdef\FDFflag{\the\!!counta}% \xdef\FDFplus{\the\!!countb}% \egroup} %D \macros %D {setFDFvalues} %D %D Menu items are passed as an array of \type{(string)}'s and %D the content of this array is build with: \let\FDFvalues \empty \let\FDFfirstvalues \empty \let\FDFsecondvalues\empty \let\FDFkidlist \empty \let\FDFdefaultindex\!!zerocount \let\FDFdefaultvalue\empty % Why do we need to tweak this mechanism each time acrobat updates ... % it would make sense to have version specific sections in pdf files % since my guess is that it never will be done right since each year % new programmers have new ideas about what is supposed to happen with % kids. So .. best is not to trust this feature esp not for radio % widgets. (new flags, different interpretation of AS etc etc) \def\setFDFvalues[#1][#2]% #1 = list (item=>value) #2 = default {\let\FDFvalues \empty %when radio opt works ok %\let\FDFfirstvalues \empty %\let\FDFsecondvalues\empty \let\FDFkidlist \empty %\let\FDFdefaultindex\!!zerocount %\let\FDFdefaultvalue\empty %\scratchcounter\zerocount \def\dodocommand##1=>##2=>##3\end {\addtocommalist{##1}\FDFkidlist %\edef\FDFfirstvalues{\FDFfirstvalues(##1)}% %\doif{##1}{#2}{\edef\FDFdefaultindex{\the\scratchcounter}}% %\advance\scratchcounter\plusone \doifelsenothing{##2} {\doif{##1}{#2}{\edef\FDFdefaultvalue{##1}}% %\edef\FDFsecondvalues{\FDFsecondvalues(##1)}% \edef\FDFvalues{\FDFvalues [(##1)(##1)] }} {\doif{##1}{#2}{\edef\FDFdefaultvalue{##2}}% %\edef\FDFsecondvalues{\FDFsecondvalues(##2)}% \edef\FDFvalues{\FDFvalues [(##2)(##1)] }}}% ! ##1 is shown \def\docommand##1% {\dodocommand##1=>=>\end}% \expanded{\processcommalist[#1]}\docommand} %D This macro accepts comma separated \type{visual=>result} %D pairs. %D \macros %D {setFDFalignment} %D %D Text and line fields can be entered and showed in three %D alternative alingments, indicated by a digit: \def\FDFalign{0} \def\setFDFalignment[#1]% {\processaction [#1] [ \v!left=>\edef\FDFalign{2}, % raggedleft \v!middle=>\edef\FDFalign{1}, % raggedcenter \v!right=>\edef\FDFalign{0}]} % raggedright %D \macros %D {setFDFattributes} %D %D The weak part of (at least version 2.1 \PDF) is that only %D default fonts are handled well. Another restriction is that %D the encoding vector must be the standard \PDF\ document one. %D Although the \PDF\ reference explictly states that one could %D use the normal text operators, leading is not yet handled. %D %D For the moment the current \CONTEXT\ font is mapped onto %D one best suitable default font. The color attribute is %D less problematic and is directly derived from the \CONTEXT\ %D color. \def\FDFattributes{/Helv 12 Tf 0 g 14.4 TL} \def\FDFrm {TiRo} \def\FDFss {Helv} \def\FDFtt {Cour} \def\FDFrmtf{TiRo} \def\FDFsstf{Helv} \def\FDFtttf{Cour} \def\FDFrmbf{TiBo} \def\FDFssbf{HeBo} \def\FDFttbf{CoBo} \def\FDFrmit{TiIt} \def\FDFssit{HeOb} \def\FDFttit{CoOb} \def\FDFrmsl{TiIt} \def\FDFsssl{HeOb} \def\FDFttsl{CoOb} \def\FDFrmbi{TiBI} \def\FDFssbi{HeBO} \def\FDFttbi{CoBO} \def\FDFrmbs{TiBI} \def\FDFssbs{HeBO} \def\FDFttbs{CoBO} \let\FDFusedfonts=\FDFsstf \def\setFDFattributes[#1,#2,#3,#4]% style, color, backgroundcolor, framecolor {\bgroup % nog interlinie: n TL \setbox\scratchbox\hbox \bgroup \doconvertfont{#1}{}% \PointsToBigPoints\bodyfontsize\size % x/xx, so better the actual size \doifdefinedelse{FDF\fontstyle\fontalternative} {\xdef\FDFattributes{\getvalue{FDF\fontstyle\fontalternative}}} {\doifdefinedelse{FDF\fontstyle} {\xdef\FDFattributes{\getvalue{FDF\fontstyle}}} {\xdef\FDFattributes{\FDFrm}}}% \doglobal\addtocommalist\FDFattributes\FDFusedfonts \xdef\FDFattributes% move up with "x.y Ts" {/\FDFattributes\space\size\space Tf\space\PDFcolor{#2}}% \doifelsenothing{#3} {\global\let\FDFsurroundings\empty} {\xdef\FDFsurroundings{/BG \FDFcolor{#3}}}% \doifsomething{#4} {\xdef\FDFsurroundings{\FDFsurroundings\space /BC \FDFcolor{#4}}}% \ifx\FDFsurroundings\empty \else \xdef\FDFsurroundings{/MK << \FDFsurroundings\space>>}% \fi \egroup \egroup} %D \macros %D {setFDFactions} %D %D Depending on the type of the field, one can assign %D \JAVASCRIPT\ code to a mouse event or keystroke. The next %D preparation macro shows what events are handled. \let\FDFactions\empty \def\setFDFactions[#1,#2,#3,#4,#5,#6,#7,#8,% {\global\let\FDFactions\empty \setFDFaction D#1\relax% mousedown \setFDFaction U#2\relax% mouseup \setFDFaction E#3\relax% enterregion \setFDFaction X#4\relax% exitregion \setFDFaction K#5\relax% afterkeystroke \setFDFaction F#6\relax% formatresult \setFDFaction V#7\relax% validateresult \setFDFaction C#8\relax% calculatewhatever \setFDFactionsmore} \def\setFDFactionsmore#1,#2]% {\setFDFaction{Fo}#1\relax% focusin \setFDFaction{Bl}#2\relax% focusout % was I (now pdf ref manual explicitly talks about lowercase l) \ifx\FDFactions\empty\else \xdef\FDFactions{/AA << \FDFactions >>}% since 1.3 no longer inherited \fi} % todo, when new var scheme is implemented % % \setFDFaction{PO}\@@DriverFieldPageOpen\relax % \setFDFaction{PC}\@@DriverFieldPageClose\relax % \setFDFaction{PV}\@@DriverFieldPageVisible\relax % \setFDFaction{PI}\@@DriverFieldPageInVisible\relax %D The event handler becomes something: %D %D \starttyping %D /AA << /D << /S ... >> ... /C << /S ... >> %D /A << /S /JavaScript /JS (...) >> %D \stoptyping % \def\setFDFaction#1#2\relax% % {\bgroup % \global\let\sanitizedJScode\empty % \def\setFDFaction##1% % {\doifreferencefoundelse{##1} % {\doifelse{\currentreferencespecial}{JS} % filter non-js % {\presetJScode % \currentreferenceoperation % \currentreferencearguments % \doPSsanitizeJScode\JScode\to\JScode % \xdef\sanitizedJScode{\sanitizedJScode\space\JScode}} % {\illegalreference{##1}}} % {\unknownreference{##1}}}% % \@EA\processcommalist\@EA[#2]\setFDFaction % one level expansion % \ifx\sanitizedJScode\empty \else % \xdef\FDFactions% % {\FDFactions /#1 << /S /JavaScript /JS (\sanitizedJScode) >> }% % \fi % \egroup} % % acrobat 5 supports other that JS actions too \def\setFDFaction#1#2\relax% {\bgroup \def\docommand{\xdef\FDFactions{\FDFactions /#1 << \lastPDFaction >> }}% \@EA\handlereferenceactions\@EA{#2}\docommand % one level expansion \egroup} %D \macros %D {testFDFactions} %D %D This rather confusion prone series of script can be tested %D with: %D %D \starttyping %D \testFDFactions %D \stoptyping %D %D which simply redefined the previous macro to one that prints %D a message to the console. \def\testFDFactions {\def\setFDFaction##1##2\relax% {\doPSsanitizeJScode console.show();console.println("executing:##1"); \to\sanitizedJScode \edef\FDFactions{\FDFactions /##1 << /S /JavaScript /JS (\sanitizedJScode) >> }}} %D \macros %D {doFDFregistercalculationset} %D %D There is at most one calculation order list, which defines %D the order in which fields are calculated. \let\PDFcalculationset\empty \def\doFDFregistercalculationset#1% {\def\PDFcalculationset{#1}} %D \macros %D {registerFDFobject,everylastshipout} %D %D Officially one needs to embed some general datastructures %D that tell the viewer what fields are present in the file, as %D well as what resources they use. The next mechanism does that %D job automatically when one registers the field. \def\flushFDFnames {\ifbuildFDFdictionary \ifx\FDFcollection\empty\else \ifbuildFDFencodingvector \doPDFdictionaryobject{FDF}{local:encodingvector}{\FDFencodingvector}% \fi \defineFDFfonts \doPDFarrayobject{FDF}{local:fields}{\FDFcollection}% \doPDFgetobjectreference{FDF}{local:fields}\PDFobjectreference % The /NeedAppearances is pretty important because % otherwise Acrobat 5 blows up on cloned radio widgets \doPDFdictionaryobject{FDF}{local:acroform} {/Fields \PDFobjectreference\space /NeedAppearances true \doFDFiffieldset\PDFcalculationset{/CO [\doFDFgetfieldset\PDFcalculationset]} /DR << /Font << \FDFfonts >> >> /DA (/Helv 10 Tf 0 g)}% \doPDFgetobjectreference{FDF}{local:acroform}\PDFobjectreference \doPDFaddtocatalog {/AcroForm \PDFobjectreference}% \global\let\FDFcollection\empty \global\let\flushFDFnames\relax \fi \fi} \let\FDFcollection\empty \def\registerFDFobject#1% {\ifbuildFDFdictionary \ifx\flushFDFnames\relax \writestatus{FDF}{second run needed for field list (#1)}% \fi \doPDFgetobjectreference{FDF}{#1}\PDFobjectreference \xdef\FDFcollection{\FDFcollection\space\PDFobjectreference}% \fi} \appendtoksonce \flushFDFnames \to \everylastshipout % test \everybye / was \prependtoksonce %D \macros %D {defineFDFfonts, %D ifbuildFDFdictionary, %D ifbuildFDFencodingvector} %D %D Another datastruture concerns the fonts used. We only %D define the fonts we use. \newif\ifbuildFDFdictionary \buildFDFdictionarytrue \newif\ifbuildFDFencodingvector \buildFDFencodingvectortrue \def\defineFDFfonts {\let\FDFfonts\empty \processcommacommand[\FDFusedfonts]\defineFDFfont} \def\defineFDFfont#1% {\ifbuildFDFencodingvector \doPDFgetobjectreference{FDF}{local:encodingvector}\PDFobjectreference \fi \doPDFdictionaryobject{FDF}{local:#1} {/Type /Font /Subtype /Type1 /Name /#1 \ifbuildFDFencodingvector /Encoding \PDFobjectreference\space\fi /BaseFont /\getvalue{FDFname#1}}% \doPDFgetobjectreference{FDF}{local:#1}\PDFobjectreference \edef\FDFfonts{\FDFfonts \space/#1 \PDFobjectreference}} %D Another list of constants: \def\FDFnameTiRo {Times-Roman} \def\FDFnameTiBo {Times-Bold} \def\FDFnameTiIt {Times-Italic} \def\FDFnameTiBI {Times-BoldItalic} \def\FDFnameHelv {Helvetica} \def\FDFnameHeBo {Helvetica-Bold} \def\FDFnameHeOb {Helvetica-Oblique} \def\FDFnameHeBO {Helvetica-BoldOblique} \def\FDFnameCour {Courier} \def\FDFnameCoBo {Courier-Bold} \def\FDFnameCoOb {Courier-Oblique} \def\FDFnameCoBO {Courier-BoldOblique} %D And a big one: (should be run time loaded (spec-run or %D so)). \def\FDFencodingvector {/Type /Encoding /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ]} %D \macros %D {currentFDFmode,currentFDFparent,currentFDFkids,currenrFDFroot} %D %D There are three more quasi global interfacing variables %D that need to be set. \let\currentFDFmode =\fieldlonermode \let\currentFDFkids =\empty \let\currentFDFparent=\empty \let\currentFDFroot =\empty %D \macros %D {dosetfieldstatus} %D %D And here comes the special that deals with them. \definespecial\dosetfieldstatus#1#2#3#4% {\chardef\currentFDFmode #1% \edef\currentFDFparent {#2}% \edef\currentFDFkids {#3}% \edef\currentFDFroot {#4}} %D \macros %D {dosetuppageview} %D %D Because this command will seldom be called, we can permit %D slow action processing. We need three settings, one for %D direct \PDF\ inclusion, the other as \PDFTEX\ keyword, an %D a last one for form. All determine in what way the %D screen is adapted when going to a destination. Watch the %D space. \def\PDFpageviewkey{fit} \def\PDFpageviewwrd{/Fit} \def\PDFpageview {/View [\PDFpageviewwrd] } \let\PDFpagexyzspec\relax % 0 0 0 hack, pdftex does handle this, for dvipdfmx we need height \def\dosetuppageview#1% watch the v-h swapping here {\processaction [#1] [ \v!fit=>\def\PDFpageviewkey {fit}\def\PDFpageviewwrd{/Fit}, \v!width=>\def\PDFpageviewkey {fith}\def\PDFpageviewwrd{/FitH}, \v!height=>\def\PDFpageviewkey {fitv}\def\PDFpageviewwrd{/FitV}, \v!minwidth=>\def\PDFpageviewkey{fitbh}\def\PDFpageviewwrd{/FitBH}, \v!minheight=>\def\PDFpageviewkey{fitbv}\def\PDFpageviewwrd{/FitBV}, \v!standard=>\ifx\PDFpagexyzspec\relax % empty does not work too wel with dpx \def\PDFpageviewkey{fit}% \def\PDFpageviewwrd{/Fit}% \else \edef\PDFpageviewkey{xyz \PDFpagexyzspec}% \edef\PDFpageviewwrd{/XYZ \PDFpagexyzspec}% \fi, \s!unknown=>\def\PDFpageviewkey {fit}\def\PDFpageviewwrd{/Fit}]% \edef\PDFpageview{\ifx\PDFpageviewwrd\empty\else/View [\PDFpageviewwrd]\fi}} %D \macros %D {setFDFkids} %D %D Clones as well as radiofields (which themselves can have %D cloned components) need a list of kids. The next macro %D builds one. \def\setFDFkids[#1][#2]% tag commalist {\let\FDFkids\empty \def\docommand##1% {\doPDFgetobjectreference{FDF}{#1##1}\PDFobjectreference \edef\FDFkids{\FDFkids\PDFobjectreference\space}}% \@EA\processcommalist\@EA[#2]\docommand \ifx\FDFkids\empty\else\edef\FDFkids{/Kids [\FDFkids]}\fi % \edef\FDFkids{/Kids [\FDFkids]}% } %D \macros %D {doFDFpresetlinefield,doFDFpresettextfield, %D doFDFpresetchoicefield,doFDFpresetpopupfield,doFDFpresetcombofield, %D doFDFpresetpushfield,doFDFpresetcheckfield, %D doFDFpresetfield,doFDFpresetradiorecord} %D %D I would say: read the \PDF\ reference manual first and see %D what happens here next. Lucky us that they have so much in %D common. \def\doFDFpresetlinefield#1#2#3#4#5#6#7#8#9% {\bgroup \setFDFlayer\@@DriverFieldLayer \setFDFswitches[#7]% \setFDFattributes[#6]% \setFDFalignment[#8]% \setFDFactions[#9]% \expanded{\escapePSstring#4}\to\FDFtext \ifcase\currentFDFmode \doPDFannotationobject{FDF}{#1}{#2}{#3} {/Subtype /Widget /T (#1) /FT /Tx /MaxLen \ifcase0#5 1000 \else#5 \fi %/DV (#4) /V (#4) % value added /DV (\FDFtext) /V (\FDFtext) % value added /Ff \FDFflag\space /F \FDFplus\space /DA (\FDFattributes) \FDFlayer\space \FDFsurroundings\space /Q \FDFalign\space \FDFactions}% \registerFDFobject{#1}% \or \setFDFkids[kids:][\currentFDFkids]% \doPDFdictionaryobject{FDF}{#1} {/T (#1) /FT /Tx /MaxLen \ifcase0#5 1000 \else#5 \fi \FDFkids\space %/DV (#4) /V (#4) % value added /DV (\FDFtext) /V (\FDFtext) % value added /Ff \FDFflag\space /F \FDFplus\space /DA (\FDFattributes) \FDFlayer\space \FDFsurroundings\space /Q \FDFalign\space \FDFactions}% \registerFDFobject{#1}% \or \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference /Ff \FDFflag\space /F \FDFplus\space /DA (\FDFattributes) \FDFlayer\space \FDFsurroundings\space /Q \FDFalign\space \FDFactions}% \or \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference /F \FDFplus \FDFactions}% \fi \egroup} \def\doFDFpresettextfield#1#2#3#4#5#6#7#8#9% {\doFDFpresetlinefield{#1}{#2}{#3}{#4}{#5}{#6}{MultiLine,#7}{#8}{#9}} \def\doFDFpresetchoicefield#1#2#3#4#5#6#7#8% {\bgroup \setFDFlayer\@@DriverFieldLayer \setFDFswitches[#6]% \setFDFattributes[#5]% \setFDFvalues[#7][#4]% \setFDFactions[#8]% \ifcase\currentFDFmode \doPDFannotationobject{FDF}{#1}{#2}{#3} {/Subtype /Widget /T (#1) /FT /Ch /DV (#4) /V (#4) /Ff \FDFflag\space /F \FDFplus\space /DA (\FDFattributes) \FDFlayer\space \FDFsurroundings\space /Opt [\FDFvalues] \FDFactions}% \registerFDFobject{#1}% \or \setFDFkids[kids:][\currentFDFkids]% \doPDFdictionaryobject{FDF}{#1} {/T (#1) /FT /Ch \FDFkids\space /DV (#4) /V (#4) /Ff \FDFflag\space /F \FDFplus\space /DA (\FDFattributes) \FDFlayer\space \FDFsurroundings\space /Opt [\FDFvalues] \FDFactions}% \registerFDFobject{#1}% \or \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference /Ff \FDFflag\space /F \FDFplus\space /DA (\FDFattributes) \FDFlayer\space \FDFsurroundings\space \FDFactions}% \or \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference /F \FDFplus \FDFactions}% \fi \egroup} \def\doFDFpresetpopupfield#1#2#3#4#5#6#7#8% {\doFDFpresetchoicefield{#1}{#2}{#3}{#4}{#5}{PopUp,#6}{#7}{#8}} \def\doFDFpresetcombofield#1#2#3#4#5#6#7#8% {\doFDFpresetchoicefield{#1}{#2}{#3}{#4}{#5}{PopUp,Edit,#6}{#7}{#8}} \newif\ifFDFvalues \def\doFDFpresetpushcheckfield#1#2#3#4#5#6#7#8% in acro<5 (\FDFdefault) {\bgroup % in acro>5 /\FDFdefault \setFDFlayer\@@DriverFieldLayer \ifcase#8\relax\FDFvaluesfalse\else\FDFvaluestrue\fi \setFDFswitches[#5]% \setFDFactions[#7]% \doifelse{#4}{1} {\def\FDFdefault{On}} {\def\FDFdefault{Off}}% \ifcase\currentFDFmode \doFDFappearance{On}{#6}{#8}% \doPDFannotationobject{FDF}{#1}{#2}{#3} {/Subtype /Widget /T (#1) /FT /Btn \ifFDFvalues /DV /\FDFdefault\space /V /\FDFdefault\space /AS /\FDFdefault\space \fi \FDFlayer /Ff \FDFflag\space /F \FDFplus\space \FDFlayer\space \FDFappearance\space % /IF << /SW /N >> % strange, only works for stupid buttons \FDFactions}% \registerFDFobject{#1}% \or % no appearance and layer ? \setFDFkids[kids:][\currentFDFkids]% \doPDFdictionaryobject{FDF}{#1} {/T (#1) /FT /Btn \FDFkids\space \ifFDFvalues /DV /\FDFdefault\space /V /\FDFdefault\space /AS /\FDFdefault\space \fi /Ff \FDFflag\space /F \FDFplus\space \FDFactions}% \registerFDFobject{#1}% \or \doFDFappearance{On}{#6}{#8}% \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference\space \ifFDFvalues /DV /\FDFdefault\space /V /\FDFdefault\space /AS /\FDFdefault\space \fi /Ff \FDFflag\space /F \FDFplus\space \FDFlayer\space \FDFappearance\space \FDFactions}% \or \doFDFappearance{On}{#6}{#8}% \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference\space /F \FDFplus\space \ifFDFvalues /DV /\FDFdefault\space /V /\FDFdefault\space /AS /\FDFdefault\space \fi \FDFlayer\space \FDFappearance \FDFactions}% \fi \egroup} \def\doFDFpresetpushfield#1#2#3#4#5#6#7% {\doFDFpresetpushcheckfield{#1}{#2}{#3}{#4}{PushButton,#5}{#6}{#7}{0}} \def\doFDFpresetcheckfield#1#2#3#4#5#6#7% {\doFDFpresetpushcheckfield{#1}{#2}{#3}{#4}{#5}{#6}{#7}{1}} % As pdf widgets are rather consistently upward incompatible % especially with regards to inheritance, the following code is not % quite okay. I've decided no longer to bother about in it in MkII % and use a flat model in MkIV which somehow seems to work better. \def\doFDFpresetradiofield#1#2#3#4#5#6#7#8% {\bgroup \setFDFlayer\@@DriverFieldLayer \FDFvaluestrue \setFDFswitches[#5]% \setFDFactions[#8]% \doifelsenothing{#4} {\def\FDFdefault{Off}} {\def\FDFdefault{#4}}% \@EA\aftersplitstring\FDFdefault\at=>\to\FDFdefaultvalue \ifx\FDFdefaultvalue\empty\else\let\FDFdefault\FDFdefaultvalue\fi \ifcase\currentFDFmode \doFDFappearance{#1}{#7}{1}% \doPDFgetobjectreference{FDF}{#6}\PDFobjectreference \doPDFannotationobject{FDF}{#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference\space /F \FDFplus\space /AS /\FDFdefault\space \FDFlayer\space \FDFappearance\space \FDFactions}% \registerFDFobject{#1}% \or \setFDFkids[kids:][\currentFDFkids]% \doPDFgetobjectreference{FDF}{#6}\PDFobjectreference \doPDFdictionaryobject{FDF}{#1} {/Parent \PDFobjectreference\space \FDFkids\space /F \FDFplus\space \FDFactions}% \registerFDFobject{#1}% \or %\doFDFappearance{#1}{#7}{1}% \doFDFappearance{\currentFDFparent}{#7}{1}% \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue % nb \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference\space /AS /\FDFdefault\space /F \FDFplus\space \FDFlayer\space \FDFappearance\space \FDFactions}% \or %\doFDFappearance{#1}{#7}{1}% \doFDFappearance{\currentFDFparent}{#7}{1}% \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference %\global\objectreferencingtrue \doPDFannotationobject{FDF}{kids:#1}{#2}{#3} {/Subtype /Widget /Parent \PDFobjectreference\space /AS /\FDFdefault\space /F \FDFplus\space \FDFlayer\space \FDFappearance\space \FDFactions}% \fi \egroup} %D \macros %D {setFDFstrings} %D %D This one creates a string array. %\def\setFDFstrings[#1]% % {\let\FDFstrings\empty % \def\docommand##1{\edef\FDFstrings{\FDFstrings(##1)}}% % \processcommacommand[#1]\docommand} % Beware, RadiosInUnison is really needed in the pre 1.5/6 time this % was the default but out of a sudden it's no longer the case. Also % the NoToggleToOff interferes with kids of kids and both it will % break older documents, i.e. so much for pdf as standard. With % features like widgets we can probably best wait till adobe tools % themselves support it because that's probably the moment that % functionality gets frozen/becomes definitive. Actually, acrobat % flattens the kids tree, so that's yet another situation. The % interesting thing is that it worked ok in acrobat 2/3 but got bugged % in later versions. [The rationale is in html compatibility, which % seems to be more important than compatibility of documents, which in % turn renders acrobat useless for forms.] Anyway, synchronization is % broken or not depending on the combination pdfversion/acrobatversion. % % Hm, nowadays Radio will overload RadiosInUnison so we need to use only one % of them. \def\doFDFpresetradiorecord#1#2#3#4#5% {\bgroup % < pdf 1.5 (1.5 was broken) % \setFDFswitches[Radio,NoToggleToOff,RadiosInUnison,#3]% % > pdf 1.5 % \setFDFswitches[Radio,RadiosInUnison,#3]% % > pdf 1.6 \setFDFswitches[RadiosInUnison,#3]% %setFDFswitches[PushButton,RadiosInUnison,#3]% this is what acrobat itself does % older, else fatal error % \setFDFkids[#4][]% % newer \setFDFvalues[#4][#2]% inits kidlist \expanded{\setFDFkids[][\FDFkidlist]}% % \setFDFactions[#5]% \doPDFdictionaryobject{FDF}{#1} {%/Subtype /Widget /FT /Btn /T (#1) /Rect [0 0 0 0] % used to be this % /V (#2) % then this % /DV (#2) % since this bomded in 5 % /V (#2) % and now finally this works /H /N % /opt is buggy in 5.05, only works once, sigh %\ifx\FDFfirstvalues\FDFsecondvalues /V /#2 %\else % /V /\FDFdefaultindex\space % /Opt [\FDFsecondvalues] %\fi /Ff \FDFflag\space /F \FDFplus\space \FDFkids\space \FDFactions}% \egroup} %D At the cost of some more references, we can save bytes, %D by sharing appearance dictionaries. This code needs more %D documentation. Surprise: \def\dodoFDFappearance#1#2% {\ifx#2\empty\else \dogetcommacommandelement1\from#2\to\commalistelement \ifx\commalistelement\empty\else \doPDFgetobjectreference{SYM}\commalistelement\PDFobjectreference \edef\N{\ifFDFvalues\N /#1 \fi\PDFobjectreference\space}% \fi \dogetcommacommandelement2\from#2\to\commalistelement \ifx\commalistelement\empty\else \doPDFgetobjectreference{SYM}\commalistelement\PDFobjectreference \edef\R{\ifFDFvalues\R /#1 \fi\PDFobjectreference\space}% \fi \dogetcommacommandelement3\from#2\to\commalistelement \ifx\commalistelement\empty\else \doPDFgetobjectreference{SYM}\commalistelement\PDFobjectreference \edef\D{\ifFDFvalues\D /#1 \fi\PDFobjectreference\space}% \def\FDFappearance{/H /P }% \fi \fi} \def\redoFDFappearance#1% {\ifx#1\empty\else \dogetcommacommandelement3\from#1\to\commalistelement \ifx\commalistelement\empty\else \def\FDFappearance{/H /P }% \fi \fi} \def\doFDFappearance#1#2#3% {\ifcase#3\relax % push only field \edef\yes{#2}% \let\no\empty \else % on / off field \dogetcommacommandelement1\from#2,\to\yes \dogetcommacommandelement2\from#2,\to\no \fi \def\FDFappearance{/H /N}% \doifobjectfoundelse{FDF}{ap:#1:\yes:\no} {\redoFDFappearance\yes \redoFDFappearance\no} {\presetobject{FDF}{ap:#1:\yes:\no}% funny hack \let\N\empty\let\R\empty\let\D\empty \dodoFDFappearance{#1}\yes \dodoFDFappearance{Off}\no \doPDFdictionaryobject{FDF}{ap:#1:\yes:\no} {\ifx\N\empty\else/N \ifFDFvalues<<\N>>\else\N\fi\fi \ifx\R\empty\else/R \ifFDFvalues<<\R>>\else\R\fi\fi \ifx\D\empty\else/D \ifFDFvalues<<\D>>\else\D\fi\fi}}% \doPDFgetobjectreference{FDF}{ap:#1:\yes:\no}\PDFobjectreference \edef\FDFappearance{\FDFappearance /AP \PDFobjectreference}} %\def\doFDFdefault#1#2% % {\dogetcommacommandelement1\from#1,\to\commalistelement % \dogetcommacommandelement1\from\commalistelement\to\commalistelement % \doifelse{\commalistelement}{#2} % kan ook met \ifx % {\def\FDFdefault{On}}{\def\FDFdefault{Off}}} \def\doFDFdefault#1#2% {\doifelse{#2}{1}{\def\FDFdefault{On}}{\def\FDFdefault{Off}}} %D Layer support: \def\setFDFlayer#1% todo : \ifx\PDFobjectreference\noPDFobjectreference ipv found {\letempty\FDFlayer \doifsomething{#1}% {\checkproperty[#1]% == \dodocheckproperty\@@DriverFieldLayer \doifobjectreferencefoundelse{PDLN}{#1} {\doPDFgetobjectreference{PDLN}{#1}\!!stringa % we need to avoid a clash with other macros \edef\FDFlayer{/OC \!!stringa}}% \donothing}} %D The three appearances {\em normal}, \type{roll over} and %D \type{push down} are passed as comma separated triplets, %D that is, the second argument can look like: %D %D \starttyping %D {yes,ok,fine},{no,rubish,awful} %D \stoptyping %D \macros %D {doFDFdefinefieldset,doFDFgetfieldset,doFDFiffieldset} %D %D Field sets, the ones we use in submitting and resetting %D fields, are implemented using the next low level specials: %D %D \starttyping %D \doFDFdefinefieldset{TAG}{name,name,...} %D \doFDFgetfieldset{TAG} %D \doFDFiffieldset{TAG}{sequence} %D \stoptyping \def\doFDFdefinefieldset#1#2% tag commalist {\let\FDFfieldset\empty \def\docommand##1% {\doPDFgetobjectreference{FDF}{##1}\PDFobjectreference \edef\FDFfieldset{\FDFfieldset\PDFobjectreference\space}}% \processcommacommand[#2]\docommand % nb: command \setevalue{FDF:set:#1}{\FDFfieldset}} \def\doFDFgetfieldset#1% {\getvalue{FDF:set:#1}} \def\doFDFiffieldset#1#2% {\ifundefined{FDF:set:#1}\else#2\fi} %D In the goto specials we took care of secondary references. %D Here we define the macros used. \def\doPDFresetgotowhereever {\global\let\secondaryPDFreferences\empty} \doPDFresetgotowhereever % just to be sure % we can (in etex) share more by testing on this \def\savesecondaryPDFreference#1% {\@EA\xdef\csname PDF-SR:\the\nofsecondaryreferences\endcsname{#1}} \def\savesecondaryPDFreference % #1 == \action {\global\@EA\let\csname PDF-SR:\the\nofsecondaryreferences\endcsname} %\def\getsecondaryPDFreferences% % {\ifcase\nofsecondaryreferences\else % %\doifdefined{PDF-SR:\the\nofsecondaryreferences} % \xdef\secondaryPDFreferences% % {/Next << \csname PDF-SR:\the\nofsecondaryreferences\endcsname\space % \secondaryPDFreferences >>}% % \global\advance\nofsecondaryreferences \minusone % \expandafter\getsecondaryPDFreferences % \fi} % test should happen in core-ref \def\getsecondaryPDFreferences {\ifcase\nofsecondaryreferences\else \ifcsname PDF-SR:\the\nofsecondaryreferences\endcsname \xdef\secondaryPDFreferences {/Next << \csname PDF-SR:\the\nofsecondaryreferences\endcsname\space \secondaryPDFreferences >>}% \fi \global\advance\nofsecondaryreferences \minusone \expandafter\getsecondaryPDFreferences \fi} %D \macros %D {loadFDFfields, showFDFfields, %D getFDFfield, setFDFfield} %D %D Once filled in, we can export or submit the field in the %D \FDF\ file format. Such a file can be loaded by %D %D \starttyping %D \loadFDFfields{fiel-ini} %D \stoptyping %D %D or inspected by %D %D \starttyping %D \showFDFfields{fiel-ini} %D \stoptyping %D %D After both commands, one can use %D %D \starttyping %D \getFDFfield{name} %D \setFDFfield{name}{value} %D \stoptyping %D %D to inspect and overrule the data. %D %D By default \CONTEXT\ calls the perl script \type{fdf2tex}. %D This script reads the \type{fdf} file and produces a file %D named \type{filename.fdt}. If one disables the call to this %D script, by saying: %D %D \starttyping %D \runFDFconverterfalse %D \stoptyping %D %D or when \CONTEXT\ cannot find the \type{fdt} file, it tries %D to interpret the \type{fdf} file directly. Both mechanisms %D are rather crude. \newif\ifrunFDFconverter \runFDFconvertertrue %D The \PERL\ script produces a file formatted as: %D %D \starttyping %D \beginFDFobject %D \beginFDFdata %D \beginFDFfields %D \FDFfield[name=,value=] %D \endFDFfields %D \endFDFdata %D \endFDFobject %D \stoptyping %D %D One reason for using key value pairs is that we cannot be %D sure or the order in which the name and value are given %D (actually the reverse). \def\PERLloadFDFfields#1% will become obsolete soon {\bgroup \global\let\allFDFfields\empty \ifrunFDFconverter \executesystemcommand{fdf2tex #1}% \let\beginFDFobject\relax \let\endFDFobject\relax \let\beginFDFdata \relax \let\endFDFdata \relax \let\beginFDFfields\relax \let\endFDFfields\relax \def\FDFfield[##1]% {\getparameters[FDF][##1]% \doglobal\addtocommalist\FDFname\allFDFfields \global\setFDFfield{\FDFname}{\FDFvalue}}% \ReadFile{#1.fdt}% \fi \egroup} %D The next macro does the same job, but now in the \TEX\ way %D of doing things. Easy eh? Will become obsolete! \bgroup \catcode`\/=\@@other \global\let\normalslash=/ \catcode`\/=\@@escape \gdef\TEXloadFDFfields#1% will become obsolete due to XFDF {\bgroup \setbox0=\hbox {\global\let\allFDFfields\empty \scratchcounter=0 \escapechar=-1 \catcode`\/=\@@escape \catcode`\(=\@@begingroup \catcode`\)=\@@endgroup \catcode`\%=\@@letter \let/A =\relax \let/AS =\relax \let/Kids=\relax \let/Fields=\relax \let/F =\relax \let/ID =\relax \let/SetF=\relax \let/setFf =\relax \let/Ff=\relax \let/Opt=\relax \let/ClrF=\relax \let/ClrFf =\relax \let/AP=\relax \let/FDF=\relax \let/Root=\relax \def/T##1{\check\Title{##1}} \def/V{\bgroup\catcode`\/=\@@other\futurelet\next/doV} \def/doV{\ifx\next\normalslash\@EA/doVb\else\@EA/doVa\fi} \def/doVa##1{\egroup\check\Value{##1}} \def/doVb##1##2 {\egroup\check\Value{##2}} % watch the space \def\check##1##2% {\def##1{##2} \advance\scratchcounter\plusone\relax \ifodd\scratchcounter \else \defconvertedcommand\asciia\Title \global\setFDFfield{\asciia}{\Value} \doglobal\addtocommalist\Title\allFDFfields \fi} \ReadFile{#1.fdf}}% \egroup} \egroup %D Whatever mechanism is used, the next macros can be used to %D fetch the values. \def\getFDFfield #1{\getvalue {FDFfield::#1}} \def\setFDFfield#1#2{\setevalue{FDFfield::#1}{#2}} %D Of course the fields are only present when the file is %D loaded. \def\loadFDFfields#1% {\PERLloadFDFfields{#1}% \ifx\allFDFfields\empty \TEXloadFDFfields{#1}% \fi} \def\showFDFfields#1% {\bgroup \loadFDFfields{#1} \def\docommand##1{\par##1 = \getFDFfield{##1}\par}% \processcommacommand[\allFDFfields]\docommand \egroup} %D \macros %D {sanitizePDFencoding,sanitizePDFdocencoding} %D %D We already dealt with the encoding vector. Conversion from %D \TEX\ \ASCII\ encoding to the other one, is accomplished by %D the next few macros. Wach out: we don't group here. %D This will be reimplemented using the mapping mechanism. % \def\enablePDFdocencoding % {\reducetocoding[pdfdoc]\simplifycommands} \def\enablePDFdocencoding {\enablecoding[pdfdoc]% \enablelanguagespecifics[\currentlanguage]% redundant ? \simplifycommands} \long\def\sanitizePDFdocencoding#1\to#2% {\enablePDFcrlf \enablePDFdocencoding %\honorunexpanded % otherwise problems with "e etc in de \edef#2{#1}} \bgroup \catcode`\^^M=\@@active \gdef\enablePDFcrlf% {\def\\{\string\r}% \def\par{\\\\}% \def\endgraf{\\\\}% \catcode`\^^M=\@@active% \let^^M=\\} \egroup % \let\sanitizePDFencoding\sanitizePDFdocencoding %D The conversions comes down to (for the sake of speed the %D implementation combines steps): %D %D \startitemize %D \item we expand the \UTF\ sequences into \type {\unicodechar}'s %D \item spaces become character 255's (so that they are not %D gobbled in argument fetching %D \item normal \ASCII\ chars are unchanged %D \item \par's and alike are converted to \type {\unicodechar}'s %D \stopitemize %D %D This happens by expansion; next we convert the resulting %D sequence by interpreting the stream. \long\def\sanitizePDFuniencoding#1\to#2% {\enablePDFunicrlf \simplifycommands % added due to Dohyun Kim \let\unicodechar\relax % prevent further expansion \retainlccodes\lccode32=255 % slooow \lowercasestring\PDFunicodetrigger#1\to#2% \edef#2{\expandafter\doPDFuni#2\empty\empty}} % slooow %D Handling of empty lines: \bgroup \catcode`\^^M=\@@active \gdef\enablePDFunicrlf% {\def\\{\unicodechar{13}}% \def\par{\\\\}% \catcode`\^^M=\@@active% \let^^M=\\} \egroup %D Conversion to 16 bit \UNICODE: \def\PDFunicodechar#1% {\@EA\lchexnumbers\@EA{\number\utfdiv{#1}}% \@EA\lchexnumbers\@EA{\number\utfmod{#1}}} \def\PDFunicodetrigger {\unicodechar{65279}} %D The postprocessor: \def\doPDFuni#1% {\ifx#1\relax \@EA\dodoPDFuni \else\ifx#1\empty % quit \else \@EAEAEA\nodoPDFuni \fi\fi#1} \def\nodoPDFuni#1% {\PDFunicodechar{\ifnum`#1=255 32\else`#1\fi}\doPDFuni} \def\dodoPDFuni#1#2% {\PDFunicodechar{#2}\doPDFuni} \def\sanitizePDFencoding {\doifelse\currentregime{utf}{\PDFunicodetrue\sanitizePDFuniencoding}\sanitizePDFdocencoding} %D A bit out of place, but useful: \ifdefined\everysetfield \else \newtoks\everysetfield \fi \appendtoksonce \enablePDFdocencoding \enablePDFcrlf \to \everysetfield %D \macros %D {doPDFinsertcomment} %D %D An example its use is the next special, one that deals with %D text annotations. % starting point (keep this) % % \long\def\doPDFinsertcomment#1#2#3#4#5#6#7#8% % {\bgroup % title width height color open symbol collect data % \doifelsenothing{#1} % {\let\PDFidentifier\empty} % {\def\PDFidentifier{/T (#1)}}% % \doifelsenothing{#4} % {\let\PDFattributes\empty} % {\def\PDFattributes{/C \FDFcolor{#4}}}% % \doifundefinedelse{PDFsymbol#6} % {\let\PDFsymbol\empty} % {\def\PDFsymbol{/Name \getvalue{PDFsymbol#6} }}% % \sanitizePDFencoding#8\to\PDFdata % \setbox\scratchbox\vbox to #3 % {\vfill % \doPDFannotation{#2}{#3} % {/Subtype /Text % \ifcase#5 \else/Open true\fi % /Contents \ifPDFunicode <\PDFdata> \else(\PDFdata) \fi % \PDFsymbol % \PDFidentifier % \PDFattributes}}% % \wd\scratchbox\zeropoint % \ht\scratchbox\zeropoint % \dp\scratchbox\zeropoint % \box\scratchbox % \egroup} \newcounter\nofFDFcomments \newif\ifPDFpopupcomments \PDFpopupcommentstrue \def\doPDFflushcomments {\box\PDFsymbolbox} \long\def\doPDFinsertcomment#1#2#3#4#5#6#7#8% % \@@DriverCommentLayer set otherwise {\bgroup % title width height color open symbol collect data \presetPDFsymbolappearance{#4}{#6}{#2}{#3}\!!zeropoint% sets width/height % \doifelsenothing{#1} % {\let\PDFidentifier\empty} % {\def\PDFidentifier{/T (#1)}}% \doifelsenothing{#1} {\let\PDFidentifier\empty} {\sanitizePDFencoding#1\to\PDFcommenttitle \def\PDFidentifier{/T \ifPDFunicode <\PDFcommenttitle>\else (\PDFcommenttitle)\fi}}% \sanitizePDFencoding#8\to\PDFdata \setFDFlayer\@@DriverCommentLayer \startPDFsymbolappearance \ifPDFpopupcomments \doglobal\increment\nofFDFcomments \doifobjectreferencefoundelse{FDF}{c:\nofFDFcomments} {\doPDFgetobjectreference{FDF}{c:\nofFDFcomments}\PDFobjectreference \donetrue} \donefalse \ifdone \setbox\scratchbox\hbox {\doPDFannotationobject{FDF}{c::\nofFDFcomments}{#2}{#3}% text window, size does not work {/Subtype /Popup /Parent \PDFobjectreference}}% \ifcase#7\relax \vbox to \height{\forgetall\vskip#3\box\scratchbox\vss}% \else % incredible trial and error hack % it's quite a mess, the annot width cannot be set, well, it can % but the appearance and text sizes get mixed up % \setbox\scratchbox\vbox to \height{\forgetall\vskip#3\box\scratchbox\vss}% % \global\setbox\PDFsymbolbox\vbox % {\hsize#2% % \forgetall % \vsmash{\box\PDFsymbolbox} % \box\scratchbox}% % this may change when acrobat gets less bugged \setbox\scratchbox\vbox to #3{\forgetall\vss\box\scratchbox}% \wd\scratchbox#2% \global\setbox\PDFsymbolbox\vbox {\startoverlay{\box\PDFsymbolbox}{\box\scratchbox}\stopoverlay}% \fi \fi % generic \doifobjectreferencefoundelse{FDF}{c::\nofFDFcomments} {\doPDFgetobjectreference{FDF}{c::\nofFDFcomments}\PDFobjectreference \donetrue} \donefalse \doPDFannotationobject{FDF}{c:\nofFDFcomments}{\width}{\height} {/Subtype /Text \ifcase#5 \else/Open true\fi % pdftex (efficient) % \ifdone /Popup \PDFobjref\pdflastannot\fi % generic (less efficient) \ifdone /Popup \PDFobjectreference\fi /Contents \ifPDFunicode <\PDFdata> \else(\PDFdata) \fi \PDFidentifier \FDFlayer \PDFsymbol \PDFattributes}% \else \doPDFannotation{#2}{#3} {/Subtype /Text \ifcase#5 \else/Open true\fi /Contents \ifPDFunicode <\PDFdata> \else(\PDFdata) \fi \FDFlayer \PDFsymbol \PDFidentifier \PDFattributes}% \fi \stopPDFsymbolappearance \egroup} % symbols with a reasonable default of 18/24 pt \newbox\PDFsymbolbox \def\PDFsymbolNew {/Insert} \def\PDFsymbolBalloon {/Comment} \def\PDFsymbolAddition {/NewParagraph} \def\PDFsymbolHelp {/Help} \def\PDFsymbolParagraph {/Paragraph} \def\PDFsymbolKey {/Key } \def\PDFsymbolGraph {/Graph} \def\PDFsymbolPaperclip {/Paperclip} \def\PDFsymbolAttachment{/Attachment} \def\PDFsymbolTag {/Tag} \def\startPDFsymbolappearance {\setbox\scratchbox\vbox to \totalheight \bgroup \vfill} \def\stopPDFsymbolappearance {\egroup \setbox\scratchbox\hbox{\lower\depth\box\scratchbox}% \wd\scratchbox\width \ht\scratchbox\height \dp\scratchbox\depth \box\scratchbox} \def\presetPDFsymbolappearance#1#2#3#4#5% symbol color width height depth {\doifelsenothing{#1} {\let\PDFattributes\empty} {\def\PDFattributes{/C \FDFcolor{#1}}}% \scratchdimen#3\edef\width {\the\scratchdimen}% \scratchdimen#4\edef\height{\the\scratchdimen}% \scratchdimen#5\edef\depth {\the\scratchdimen}% \advance\scratchdimen\height\edef\totalheight{\the\scratchdimen}% \doifelsenothing{#2} {\let\PDFsymbol\empty} {\ifundefined{PDFsymbol#2}% \getfromcommacommand[#2][1]\let\PDFsymbolnormalsymbol\commalistelement \getfromcommacommand[#2][2]\let\PDFsymboldownsymbol \commalistelement \doifsymboldefinedelse\PDFsymbolnormalsymbol {\doifsymboldefinedelse\PDFsymboldownsymbol {\dopresetPDFsymbolappearance \PDFsymbolnormalsymbol\PDFsymboldownsymbol} {\dopresetPDFsymbolappearance \PDFsymbolnormalsymbol\PDFsymbolnormalsymbol}} {\doifsymboldefinedelse\PDFsymboldownsymbol {\dopresetPDFsymbolappearance \PDFsymboldownsymbol\PDFsymboldownsymbol} {\let\PDFsymbol\empty}}% \else \def\PDFsymbol{/Name \getvalue{PDFsymbol#2} }% \fi}} \def\dopresetPDFsymbolappearance#1#2% {\dopresetfieldsymbol{#1}% \dopresetfieldsymbol{#2}% \setbox\scratchbox\hbox{\symbol[#1]}% \edef\width {\the\wd\scratchbox}% \edef\height{\the\ht\scratchbox}% \edef\depth {\the\dp\scratchbox}% \scratchdimen\height \advance\scratchdimen\depth \edef\totalheight{\the\scratchdimen}% \doPDFgetobjectreference{SYM}{#1}\FDFsymbolNappearance \doPDFgetobjectreference{SYM}{#2}\FDFsymbolDappearance \edef\PDFsymbol {/AP <
>}} %D Hooked into \CONTEXT, this special supports %D %D \starttyping %D \startcomment %D hello beautiful\\world %D \stopcomment %D %D \startcomment[hello] %D de \'e\'erste keer %D the f\'irst time %D \stopcommen %D %D \startcommentaar[hallo][color=green,width=4cm,height=3cm] %D first %D %D second %D \stopcommentaar %D \stoptyping %D %D So, special characters, forced linebreaks using \type{\\} %D and \type{\par} are handled in the appropriate way. %D \macros %D {doPDFovalbox} %D %D For drawing ovals we use quite raw \PDF\ code. The next %D implementation does not differ that much from the one %D implemented in the \POSTSCRIPT\ driver. \def\doPDFovalcalc#1#2#3% {\dimen2=#1% \advance\dimen2 #2\relax \PointsToBigPoints{\dimen2}#3} \def\doPDFovalbox#1#2#3#4#5#6#7#8% todo: \scratchdimen/\scatchbox {\forcecolorhack \bgroup \dimen0=#4\divide\dimen0 \plustwo \doPDFovalcalc{0pt}{+\dimen0}\xmin \doPDFovalcalc{#1}{-\dimen0}\xmax \doPDFovalcalc{#2}{-\dimen0}\ymax \doPDFovalcalc{-#3}{+\dimen0}\ymin \advance\dimen0 by #5% \doPDFovalcalc{0pt}{+\dimen0}\xxmin \doPDFovalcalc{#1}{-\dimen0}\xxmax \doPDFovalcalc{#2}{-\dimen0}\yymax \doPDFovalcalc{-#3}{+\dimen0}\yymin \doPDFovalcalc{#4}{\zeropoint}\stroke \doPDFovalcalc{#5}{\zeropoint}\radius \edef\dostroke{#6}% \edef\dofill{#7}% \edef\mode{\number#8 \space}% % no \ifcase, else \relax in pdfcode \setbox\scratchbox\hbox {\ifnum\dostroke\dofill>\zerocount \ifPDFstrokecolor\else\ifnum\dostroke=\plusone \writestatus\m!colors{pdf stroke color will fail}\wait \fi\fi \PDFcode {q \stroke\space w \ifcase\mode \xxmin\space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or % 1 \xxmin\space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \ymax \space l \xmin \space \ymax \space l \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or % 2 \xxmin\space \ymin \space m \xmax \space \ymin \space l \xmax \space \ymax \space l \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or % 3 \xmin \space \ymin \space m \xmax \space \ymin \space l \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \ymin \space l h \or % 4 \xmin \space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xmin \space \ymax \space l \xmin \space \ymin\space l h \or % 5 \xmin \space \ymin \space m \xmax \space \ymin \space l \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xmin \space \ymax \space l \xmin \space \ymin \space l h \or % 6 \xmin \space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \ymax \space l \xmin \space \ymax \space l \xmin \space \ymin \space l h \or \xxmin\space \ymin \space m \xmax \space \ymin \space l \xmax \space \ymax \space l \xmin \space \ymax \space l \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or \xmin \space \ymin \space m \xmax \space \ymin \space l \xmax \space \ymax \space l \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \ymin \space l h \or % 9 top open \xmin \space \ymax \space m \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \ymax \space l \or % 10 right open \xmax \space \ymax \space m \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y \xmax\space \ymin \space l \or % 11 bottom open \xmax \space \ymin \space m \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax \space \ymax\space y \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \ymin \space l \or % 12 left open \xmin \space \ymax \space m \xxmax\space \ymax \space l \xmax \space \ymax \space \xmax \space \yymax\space y \xmax \space \yymin\space l \xmax \space \ymin \space \xxmax\space \ymin \space y \xmin \space \ymin \space l \or % 13 \xmin \space \ymax \space m \xxmax\space \ymax \space l \xmax \space \ymax \space \xmax \space \yymax\space y \xmax\space \ymin \space l \or % 14 \xmax \space \ymax \space m \xmax \space \yymin\space l \xmax \space \ymin \space \xxmax\space \ymin \space y \xmin \space \ymin \space l \or % 15 \xmax \space \ymin \space m \xxmin\space \ymin \space l \xmin \space \ymin \space \xmin \space \yymin\space y \xmin \space \ymax \space l \or % 16 \xmin \space \ymin \space m \xmin \space \yymax\space l \xmin \space \ymax \space \xxmin\space \ymax \space y \xmax \space \ymax \space l \or % 17 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \or % 18 \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \or % 19 \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \or % 20 \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 21 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 22 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \or % 23 \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \or % 24 \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 25 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 26 \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 27 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \or % 28 \fi \ifnum\mode>8 S \else \ifnum\dostroke=\plusone S \fi \ifnum\dofill =\plusone f \fi \fi Q}% \fi}% \wd\scratchbox#1\ht\scratchbox#2\dp\scratchbox#3\box\scratchbox \egroup} %D \macros %D {doPDFstartgraymode,doPDFstopgraymode, %D doPDFstartrgbcolormode,doPDFstartcmykcolormode,doPDFstartgraycolormode, %D doPDFstopcolormode} %D %D In \PDF\ there are two color states, one for strokes and one %D for fills. This means that we have to set the color in a %D rather redundant looking way. Unfortunately this makes the %D \PDF\ file much larger than needed. We can save few bytes %D by not setting the stroke color. Due to zip compression we %D only save a few percent. % \newif\ifPDFstrokecolor \PDFstrokecolortrue \def\doPDFstartgraymode#1% % {\PDFdirectcode{#1 g\ifPDFstrokecolor\space#1 G\fi}} {\PDFcode{#1 g\ifPDFstrokecolor\space#1 G\fi}} \def\doPDFstopgraymode % {\PDFdirectcode{0 g\ifPDFstrokecolor\space0 G\fi}} {\PDFcode{0 g\ifPDFstrokecolor\space0 G\fi}} \def\doPDFstartrgbcolormode#1#2#3% % {\PDFdirectcode{#1 #2 #3 rg\ifPDFstrokecolor\space#1 #2 #3 RG\fi}} {\PDFcode{#1 #2 #3 rg\ifPDFstrokecolor\space#1 #2 #3 RG\fi}} \def\doPDFstartcmykcolormode#1#2#3#4% % {\PDFdirectcode{#1 #2 #3 #4 k\ifPDFstrokecolor\space#1 #2 #3 #4 K\fi}} {\PDFcode{#1 #2 #3 #4 k\ifPDFstrokecolor\space#1 #2 #3 #4 K\fi}} \def\doPDFstartgraycolormode#1% % {\PDFdirectcode{#1 g\ifPDFstrokecolor\space#1 G\fi}} {\PDFcode{#1 g\ifPDFstrokecolor\space#1 G\fi}} \def\doPDFstartspotcolormode#1#2% redefining spotcolors is not possible anyway {\ifundefined{pdf:scs:#2}% \bgroup \getcommacommandsize[#2]% \ifcase\commalistsize\or \setxvalue{pdf:scs:#2}{#2 SCN #2 scn}% \setxvalue{pdf:scs:#2}{#2 SC #2 sc}% \else \let\PDFspotcolorspecs\empty \def\dospotcolorcommand##1{\edef\PDFspotcolorspecs{\PDFspotcolorspecs##1\space}}% \processcommacommand[#2]\dospotcolorcommand \setxvalue{pdf:scs:#2}{\PDFspotcolorspecs SCN \PDFspotcolorspecs scn}% \fi \egroup \fi % \PDFdirectcode{/#1 cs /#1 CS \PDFgetspotcolorspec{#2}}} \PDFcode{/#1 cs /#1 CS \PDFgetspotcolorspec{#2}}} \def\PDFgetspotcolorspec#1% {\executeifdefined{pdf:scs:#1}\empty} % better no default than one with too less args \def\doPDFstartnonecolormode % {\PDFdirectcode{/None CS 1 SC /None cs 1 sc}} {\PDFcode{/None CS 1 SC /None cs 1 sc}} \def\doPDFstopcolormode % {\PDFdirectcode{0 g\ifPDFstrokecolor\space0 G\fi}} {\PDFcode{0 g\ifPDFstrokecolor\space0 G\fi}} %D We need to register the spot colors and their fallbacks. % we cannot use /DeviceN since GS <=7.21 breaks on it % and Jaws does not handle it at all {[/DeviceN [/All|/None] % /Device#2 \PDFobjref\pdflastobj]} so we use separation % colors that work and print ok \def\doPDFregistersomespotcolor#1#2#3#4% implemented in the driver {\writestatus\m!systems{missing spot color definition}\wait} \def\doPDFregisternonecolor % internal command {\doPDFregistergrayspotcolor{None}{1}% \globallet\doPDFregisternonecolor\relax} \def\doPDFregisterspotcolorname#1#2% implemented in the driver {} \definespecial\doregisterspotcolorname{\doPDFregisterspotcolorname} \def\dodoPDFregisterrgbspotcolor#1#2#3#4#5#6#7% name noffractions names p's r g b {\doPDFregistersomespotcolor{#1}{#2}{#3}{#4}{RGB}{0.0 1.0 0.0 1.0 0.0 1.0}% {\ifcase#2\or dup #5 mul exch dup #6 mul exch #7 mul\else#5 #6 #7\fi}} \def\dodoPDFregistercmykspotcolor#1#2#3#4#5#6#7#8% name noffractions names p's c m y k {\doPDFregistersomespotcolor{#1}{#2}{#3}{#4}{CMYK}{0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0}% {\ifcase#2\or dup #5 mul exch dup #6 mul exch dup #7 mul exch #8 mul\else #5 #6 #7 #8\fi}} \def\dodoPDFregistergrayspotcolor#1#2#3#4#5% name noffractions names p's s {\doPDFregistersomespotcolor{#1}{#2}{#3}{#4}{Gray}{0.0 1.0}% {\ifcase#2\or #5 mul\else #5\fi}} % \let\doPDFregisterrgbspotcolor \dodoPDFregisterrgbspotcolor % \let\doPDFregistercmykspotcolor\dodoPDFregistercmykspotcolor % \let\doPDFregistergrayspotcolor\dodoPDFregistergrayspotcolor \def\doPDFregisterrgbspotcolor#1#2#3#4#5#6#7% name noffractions names p's r g b {\ifRGBsupported \dodoPDFregisterrgbspotcolor{#1}{#2}{#3}{#4}{#5}{#6}{#7}% \else \edef\@@cl@@r{#5}\edef\@@cl@@g{#6}\edef\@@cl@@b{#7}% \ifCMYKsupported \convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b \dodoPDFregistercmykspotcolor{#1}{#2}{#3}{#4}\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \else \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b \dodoPDFregistergrayspotcolor{#1}{#2}{#3}{#4}\@@cl@@s \fi \fi} \def\doPDFregistercmykspotcolor#1#2#3#4#5#6#7#8% name noffractions names p's c m y k {\ifCMYKsupported \dodoPDFregistercmykspotcolor{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}% \else \edef\@@cl@@c{#5}\edef\@@cl@@m{#6}\edef\@@cl@@y{#7}\edef\@@cl@@k{#8}% \ifRGBsupported \convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \dodoPDFregisterrgbspotcolor{#1}{#2}{#3}{#4}\@@cl@@r\@@cl@@g\@@cl@@b \else \convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \dodoPDFregistergrayspotcolor{#1}{#2}{#3}{#4}\@@cl@@s \fi \fi} \def\doPDFregistergrayspotcolor{\dodoPDFregistergrayspotcolor} %D New and very experimental. \def\doPDFregistercmykindexcolor#1#2#3#4#5#6#7#8% name noffractions names p's c m y k {\doPDFregistersomeindexcolor{#1}{#2}{#3}{#4}{CMYK}{0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0}% {dup #5 mul exch dup #6 mul exch dup #7 mul exch #8 mul}} \def\doPDFregisterrgbindexcolor#1#2#3#4#5#6#7% name noffractions names p's r g b {\doPDFregistersomeindexcolor{#1}{#2}{#3}{#4}{RGB}{0.0 1.0 0.0 1.0 0.0 1.0}% {dup #5 mul exch dup #6 mul exch #7 mul}} \def\doPDFregistergrayindexcolor#1#2#3#4#5% name noffractions names p's s {\doPDFregistersomeindexcolor{#1}{#2}{#3}{#4}{Gray}{0.0 1.0}% {pop}} \let\checkpredefinedcolor\predefineindexcolor % we need an index in order to negate bitmaps \def\doPDFregisterfigurecolor#1% always an index color {\dogetobjectreference {PDFIX} {\internalspotcolorname{#1}} \PDFimagecolorreference} %D \macros %D {doPDFstartrotation,doPDFstoprotation} %D %D Rotating some text can be accomplished by setting the first %D four elements of the transform matrix. We only support some %D fixed angles. The \type{q}'s take care of grouping. % The original: % % \def\doPDFstartrotation#1% % {\PDFcode{q}% % \processaction % [#1] % [ 90=>\PDFcode{ 0 1 -1 0 0 0 cm}, % 180=>\PDFcode{-1 0 0 -1 0 0 cm}, % 270=>\PDFcode{ 0 -1 1 0 0 0 cm}, % 360=>\PDFcode{ 1 0 0 1 0 0 cm}]} % % We cannot directly pass an angle, but have to calculate % factors (rx and ry). As in the \METAPOST\ to \PDF\ % converter module we need to compensate the deformation % by setting (sx and sy). % % Optimized but bigger: % % \def\doPDFstartrotation#1% % {\PDFcode{q}% % \processaction % [#1] % [ 0=>\PDFcode{ 1 0 0 1 0 0 cm}, % 90=>\PDFcode{ 0 1 -1 0 0 0 cm}, % 180=>\PDFcode{-1 0 0 -1 0 0 cm}, % 270=>\PDFcode{ 0 -1 1 0 0 0 cm}, % 360=>\PDFcode{ 1 0 0 1 0 0 cm}, % #1=>\setcalculatedcos\cos{#1}% % \setcalculatedsin\sin{#1}% % \PDFcode{\cos \space % cos % \sin \space % sin % \negated\sin\space % -sin % \cos \space % cos % 0 0 cm}]} % % Since the sine and cosine values are preset and rounded we % can use the next alternative without running into inaccuracies. \def\doPDFstartrotation#1% grouped {\setcalculatedcos\cos{#1}% \setcalculatedsin\sin{#1}% \forcecolorhack \PDFcode{q \cos\space\sin\space\negated\sin\space\cos\space0 0 cm}} \def\doPDFstoprotation {\PDFcode{Q}} %D \macros %D {doPDFstartscaling,doPDFstopscaling} %D %D Scaling is rather straightforward: \def\@@PDFzeroscale{.0001} \def\doPDFstartscaling#1#2% the test is needed because acrobat is bugged! {\forcecolorhack \PDFcode{q \ifdim#1\points=\zeropoint\@@PDFzeroscale\else#1\fi\space 0 0 \ifdim#2\points=\zeropoint\@@PDFzeroscale\else#2\fi\space 0 0 cm}} % \def\doPDFstartscaling#1#2% the test is needed because acrobat is bugged! % {\PDFcode{q\ifdim#1\points=\zeropoint\else\ifdim#2\points=\zeropoint\else % \space#1\space 0 0 #2\space 0 0 cm\fi\fi}} \def\doPDFstopscaling {\PDFcode{Q}} %D \macros %D {doPDFstartmirroring,doPDFstopmirroring} %D %D Mirroring is implemented in a similar way: \def\doPDFstartmirroring {\PDFcode{-1 0 0 1 0 0 cm}} \def\doPDFstopmirroring {\PDFcode{-1 0 0 1 0 0 cm}} %D \macros %D {doPDFstartnegative,doPDFstopnegative} %D %D When producing output for an image setter, sometimes negative %D output is needed. \def\doPDFstartnegative {\ifx\initializePDFnegative\undefined\else \initializePDFnegative % \PDFdirectcode{/GSnegative gs}% \PDFcode{/GSnegative gs}% \fi} \def\doPDFstopnegative {\ifx\initializePDFnegative\undefined\else \initializePDFnegative % \PDFdirectcode{/GSpositive gs}% \PDFcode{/GSpositive gs}% \fi} %D \macros %D {doPDFstartoverprint,doPDFstopoverprint} %D %D Some printers like overprint more than knockout. \def\doPDFstartoverprint {\ifx\initializePDFoverprint\undefined\else \initializePDFoverprint % \PDFdirectcode{/GSoverprint gs}% \PDFcode{/GSoverprint gs}% \fi} \def\doPDFstopoverprint {\ifx\initializePDFoverprint\undefined\else \initializePDFoverprint % \PDFdirectcode{/GSknockout gs}% \PDFcode{/GSknockout gs}% wrong \fi} %D Transparency support: \newif\ifPDFtransparencysupported \def\PDFtransparancydictionary#1#2#3% type fraction extras {<>} \def\dodoPDFstarttransparency#1#2% {\presetPDFtransparency{#1}{#2}% \PDFcode{\PDFtransparencyidentifier\space gs }} \def\dodoPDFstoptransparency {\PDFcode{/Tr0 gs }} \def\doPDFstarttransparency {\ifPDFtransparencysupported \global\let\doPDFstarttransparency\dodoPDFstarttransparency \global\let\doPDFstoptransparency \dodoPDFstoptransparency \initializetransparency \expandafter\doPDFstarttransparency \else \expandafter\gobbletwoarguments \fi} % \let\doPDFstoptransparency\relax % % This is tricky: because a text stream is handled before % the page body is built, we can run into stops that will % match an outer start; however, the stop is needed in case % of a text color: [text color text] [other color text] on a % first page combined with color splitting will go wrong if % we stick to the relaxing method. \def\doPDFstoptransparency {\ifPDFtransparencysupported \initializetransparency \dodoPDFstoptransparency \fi} %D These use: \let\PDFtransparencyresetreference \empty \let\PDFtransparencyresetidentifier\empty \let\PDFtransparencyreference \empty \let\PDFtransparencyidentifier\empty \let\presetPDFtransparency \gobbletwoarguments \let\initializetransparency\relax %D New trickery: \definespecial\dostartgraphicgroup{\PDFcode{q}} \definespecial\dostopgraphicgroup {\PDFcode{Q}} %D Even newer trickery: \definespecial\dostartviewerlayer {\doPDFstartlayer} \definespecial\dostopviewerlayer {\doPDFstoplayer} \definespecial\dodefineviewerlayer{\doPDFdefinelayer} \let\PDFtextlayers\empty \let\PDFpagelayers\empty \let\PDFhidelayers\empty \let\PDFvidelayers\empty % \def\doPDFstartlayer#1{\PDFdirectcode{/OC /#1 BDC}} % \def\doPDFstoplayer {\PDFdirectcode {EMC}} \def\doPDFstartlayer#1{\PDFcode{/OC /#1 BDC}} \def\doPDFstoplayer {\PDFcode {EMC}} % resource -> prop -> mc's -> OCG|OCMD (nested) % ocg: % /Intent/Design % ocmd % /P /AllOn % kan zelf ocmd bevatten \def\doPDFdefinelayer#1#2#3#4#5% tag title visible type printable {\doPDFdictionaryobject{PDLN}{#1} {/Type /OCG \ifcase#4 \or /Intent /Design % disable layer hiding by user \fi \ifnum#5=\zerocount /Usage << /Print << /PrintState /OFF >> >> % printable or not \fi /Name (#2)}% \doPDFgetobjectreference{PDLN}{#1}\PDFobjectreference \xdef\PDFtextlayers{\PDFtextlayers\space\PDFobjectreference}% \doifelse{#3}\v!start {\xdef\PDFvidelayers{\PDFvidelayers\space\PDFobjectreference}}% {\xdef\PDFhidelayers{\PDFhidelayers\space\PDFobjectreference}}% \doPDFdictionaryobject{PDLD}{#1} {/Type /OCMD /OCGs [\PDFobjectreference]}% \doPDFgetobjectreference{PDLD}{#1}\PDFobjectreference \xdef\PDFpagelayers{\PDFpagelayers\space /#1 \PDFobjectreference}} \def\flushPDFtextlayers {\ifx\PDFtextlayers\empty \else \driverreferenced \doPDFarrayobject{PDF}{textlayers}{\PDFtextlayers}% \doPDFgetobjectreference{PDF}{textlayers}\!!stringa \ifx\PDFvidelayers\empty \def\!!stringb{[null]}% \else \driverreferenced \doPDFarrayobject{PDF}{videlayers}{\PDFvidelayers}% \doPDFgetobjectreference{PDF}{videlayers}\!!stringb \fi \ifx\PDFhidelayers\empty \def\!!stringc{[null]}% \else \driverreferenced \doPDFarrayobject{PDF}{hidelayers}{\PDFhidelayers}% \doPDFgetobjectreference{PDF}{hidelayers}\!!stringc \fi \doPDFaddtocatalog {/OCProperties << % display in menu /D << /Order \!!stringa /ON \!!stringb /OFF \!!stringc >> % used properties /OCGs \!!stringa >>}% \globallet\flushPDFtextlayers\relax \fi} \def\flushPDFpagelayers {\ifx\PDFpagelayers\empty \else \doPDFpageresource{/Properties <<\PDFpagelayers>>}% \fi} \prependtoksonce \flushPDFpagelayers \to \everyshipout \prependtoksonce \flushPDFtextlayers \to \everylastshipout \def\PDFlayeractionlist{null} \def\PDFexecutehidelayer {/SetOCGState /State [/OFF \PDFlayeractionlist]} \def\PDFexecutevidelayer {/SetOCGState /State [/ON \PDFlayeractionlist]} \def\PDFexecutetogglelayer {/SetOCGState /State [/Toggle \PDFlayeractionlist]} \def\domakeviewerlayerlist#1% {\bgroup \globallet\PDFlayeractionlist\empty \def\docommand##1% {\doPDFgetobjectreference{PDLN}{##1}\PDFobjectreference \xdef\PDFlayeractionlist{\PDFlayeractionlist\space\PDFobjectreference}}% \processcommalist[#1]\docommand \egroup} %D Something rather pdf dependent: % #1 => 1=fill 2=stroke 3=strokedfill 4=invisible % #2 => linewidth % #3 => spacing (beware, one needs to set the hsize as well) \def\doPDFstartfonteffect#1#2#3% {\ifdim#2>\zeropoint \PointsToBigPoints{#2}\ascii % \PDFdirectcode{\ascii\space w}% \PDFcode{\ascii\space w}% \fi \ifdim#3\points=\onepoint\else \scratchdimen#3\points % \PDFdirectcode{\withoutpt{\the\scratchdimen}\space Tc}% \PDFcode{\withoutpt{\the\scratchdimen}\space Tc}% \fi % \PDFdirectcode{\purenumber#1 Tr}} \PDFcode{\purenumber#1 Tr}} \def\doPDFstopfonteffect % {\PDFdirectcode{1 w 0 Tc 0 Tr}} {\PDFcode{1 w 0 Tc 0 Tr}} %D Handy for the \METAPOST\ to \PDF\ converter: \ifdefined\everyPDFximage \else \newtoks\everyPDFximage \fi \ifdefined\everyPDFxform \else \newtoks\everyPDFxform \fi \appendtoksonce \collectPDFresources \global\let\currentPDFresources\collectedPDFresources \to \everyPDFxform \let\collectedPDFresources\empty \def\collectPDFresources % suboptimal {\doifobjectreferencefoundelse{FDF}{docushades} % redundant, we have an reserved object now {\doPDFgetobjectreference{FDF}{docushades}\PDFobjectreference \xdef\collectedPDFresources{\collectedPDFresources/Shading \PDFobjectreference}}\donothing \doifobjectreferencefoundelse{FDF}{docuextgstates} {\doPDFgetobjectreference{FDF}{docuextgstates}\PDFobjectreference \xdef\collectedPDFresources{\collectedPDFresources/ExtGState \PDFobjectreference}}\donothing \doifobjectreferencefoundelse{FDF}{docupatterns} {\doPDFgetobjectreference{FDF}{docupatterns}\PDFobjectreference \xdef\collectedPDFresources{\collectedPDFresources/Pattern \PDFobjectreference}}\donothing \doifobjectreferencefoundelse{FDF}{colorspaces} {\doPDFgetobjectreference{FDF}{colorspaces}\PDFobjectreference \xdef\collectedPDFresources{\collectedPDFresources/ColorSpace \PDFobjectreference}}\donothing \global\let\collectPDFresources\relax} %D And that was about all. \stopspecials \ifx\fullytransparentcolor\undefined \else \def\fullytransparentcolor {\doPDFregisternonecolor \doPDFstartnonecolormode} \let\doPDFstarttransparency\gobbletwoarguments \let\doPDFstoptransparency\relax \fi %D Temporary hack: \def\TransparencyHack % png: /CS /DeviceRGB /I true {\appendtoks \doPDFpageattribute{/Group << /S /Transparency /I true /K true>>}% \to \everyPDFxform \appendtoks \doPDFpageattribute{/Group << /S /Transparency /I true /K true>>}% \to \everyshipout} %D We still need to implement a few helpers: \chardef\safePDFcode=`- \def\setPDFdestination#1% {\bgroup \retainlccodes \lccode`\/\safePDFcode \lccode`\#\safePDFcode \lccode`\<\safePDFcode \lccode`\>\safePDFcode \lccode`\[\safePDFcode \lccode`\]\safePDFcode \lccode`\(\safePDFcode \lccode`\)\safePDFcode \ifovercomePDFspace \lccode`\ \safePDFcode \fi \ifovercomePDFbugs \xdef\PDFdestination{'#1'}% \else \xdef\PDFdestination{#1}% \fi % nicer \xdef\PDFdestination{\ifovercomePDFbugs'\fi#1\ifovercomePDFbugs'\fi}% \lowercase\@EA{\@EA\xdef\@EA\PDFdestination\@EA{\PDFdestination}}% \egroup} %D This is much faster since we don't have to set the full %D range of lc-codes; about 5 sec on a 1000mhz PIII for %D 20K named destinations "x(x) x"). Of course when you use %D page destinations, the saving is nil. % \doifnotmode{atpragma}{\let\next\setPDFdestination} % experimental % % \catcode`\/=\@@active \catcode`\#=\@@active % \catcode`\<=\@@active \catcode`\>=\@@active % \catcode`\[=\@@active \catcode`\]=\@@active % \catcode`\(=\@@active \catcode`\)=\@@active % % \gdef\PDFrepchar{-} % % \gdef\setPDFdcharacters % {\catcode`\/=\@@active \let/\PDFrepchar % \catcode`\#=\@@active \let#\PDFrepchar % \catcode`\<=\@@active \let<\PDFrepchar % \catcode`\>=\@@active \let>\PDFrepchar % \catcode`\[=\@@active \let[\PDFrepchar % \catcode`\]=\@@active \let]\PDFrepchar % \catcode`\(=\@@active \let(\PDFrepchar % \catcode`\)=\@@active \let)\PDFrepchar} % % \egroup % % \def\setPDFdestination#1% expansion is needed, otherwise embedded % {\bgroup % macros will not expand under the new % \setPDFdcharacters % catcode regime % \ifovercomePDFspace % \catcode32=\@@ignore % \fi % \xdef\PDFdestination{\ifovercomePDFbugs'\fi#1\ifovercomePDFbugs'\fi}% % \scantokens\@EA{\@EA\xdef\@EA\PDFdestination\@EA{\PDFdestination}}% % \egroup} % % \doifnotmode{atpragma}{\let\setPDFdestination\next} % experimental %D This is a slow one, that uses \type{\lccode}'s to %D change the glyph as well as converts sensisitve ones into a %D \PDF\ command sequence, so \type{(} becomes \type{\(}. In %D fact we translate the string to lowercase inactive and non %D special characters, limit their number and finaly convert %D some of the characters to save ones. \chardef\maxPDFstringsize=60 \def\sanitizePDFstring#1\to#2% bugged {\bgroup \retainlccodes \lccode`( \zerocount \lccode`) \zerocount \lccode`< \zerocount \lccode`> \zerocount \lccode`[ \zerocount \lccode`] \zerocount \lccode`\\\zerocount \lccode`/ \zerocount \lowercase{\defconvertedargument\ascii{#1}}% % by integrating the split in the loop below % \splitofftokens\maxPDFstringsize\from\ascii\to\ascii % we diminish the processing time considerably \scratchcounter\maxPDFstringsize \def\docommand##1% {\ifcase\scratchcounter\else \advance\scratchcounter \minusone \ifcase\lccode`##1\relax \xdef#2{#2\expandafter\string\csname##1\endcsname}% \else \xdef#2{#2##1}% \fi \fi}% %\global\let#2=\empty % or to permit #2 to be \ascii too: \global\@EA\let\@EA#2\@EA\empty \@EA\handletokens\ascii\with\docommand \egroup} % \doifnotmode{atpragma}{\let\next\sanitizePDFstring} % experimental % % \bgroup % % \catcode`\.=\@@escape % % .catcode`./=.@@active % .catcode`.<=.@@active .catcode`.>=.@@active % .catcode`.[=.@@active .catcode`.]=.@@active % .catcode`.(=.@@active .catcode`.)=.@@active % % .gdef.setPDFscharacters% % {.catcode`.\=.@@other % .catcode`./=.@@active .def/{.noexpand./}% % .catcode`.<=.@@active .def<{.noexpand.<}% % .catcode`.>=.@@active .def>{.noexpand.>}% % .catcode`.[=.@@active .def[{.noexpand.[}% % .catcode`.]=.@@active .def]{.noexpand.]}% % .catcode`.(=.@@active .def({.noexpand.(}% % .catcode`.)=.@@active .def){.noexpand.)}} % % .gdef.sanitizePDFstring#1.to#2% % {.bgroup % .setPDFscharacters % .catcode`=.@@escape % .edef.next{.strippedcsname#2}% % .scantokens{setxvalue{next}{#1}}% % .egroup} % % .egroup % % \doifnotmode{atpragma}{\let\sanitizePDFstring\next} % experimental % % There is an unicode variant in spec-tst! \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-not.mkii0000644000175000017500000013377111754241457024343 0ustar norbertnorbert%D \module %D [ file=strc-not, %D version=2002.05.10, % 1997.09.15 %D title=\CONTEXT\ Structure Macros, %D subtitle=Note Handling, % Footnote Handling %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Note Handling} %D Unfortunately we cannot force an even number of lines in %D a two column footnote placement. %D There are some (still) dutch core commands used in this %D file. \unprotect % \dochecknote in processnotes % splitskips setten %D Footnotes are can be characterized by three components: %D %D \startitemize[packed] %D \item a small number \footnote {a footnote number} or %D symbol {\setupfootnotes [conversion=set 2]\footnote %D {a footnote}} %D \item and a similar mark at the bottom of the page %D \item followed by some additional text %D \stopitemize %D %D Because footnotes are declared at the location of their %D reference they can be seen as a special kind of %D floating bodies. Their placement is postponed but has to be %D taken into account in the pagebreak calculations. This kind %D of calculations are forced by using \type{\insert}. %D \macros %D {setupnote,setupnotedefinition} %D %D We can influence footnote typesetting with the setup %D command: %D %D \showsetup{setupfootnotes} % ! ! %D %D It's sort of a custom to precede footnotes by a horizontal %D rule and although fancy rules like %D %D \starttyping %D \hbox to 10em{\hskip-3em\dotfill} %D \stoptyping %D %D Are quite ligitimate, we default to a simple one 20\% of the %D text width. %D %D When \type{n} exceeds~1, footnotes are typeset in %D multi||columns, using the algoritm presented on page~397 %D of \TEX book. Footnotes can be places on a per page basis %D or whereever suitable. When we set~\type{n} to~0, we get a %D rearanged paragraph, typeset by the algoritms on pages 398 %D and~389. We definitely did not reinvent that wheel. \newif\ifendnotes \endnotesfalse \newif\ifbottomnotes \bottomnotestrue \chardef\clevernotes=\zerocount % 0=page 1=firstcolumn 2=lastcolumn %D The next definitions indicate that we can frame the footnote %D area. The footnotes themselves are treated as definitions. %D %D \showsetup{setupfootnotes} \let\currentnote\v!footnote \def\noteparameter #1{\csname\??vn \currentnote#1\endcsname} \def\notedefparameter #1{\csname\??vn\??vn\currentnote#1\endcsname} \def\footnoteparameter #1{\csname\??vn \v!footnote#1\endcsname} \def\startnotedef {\resetdescriptions\csname\e!start\??vn\??vn\currentnote\endcsname} \def\stopnotedef {\csname\e!stop \??vn\??vn\currentnote\endcsname} \def\noteinsertion #1{\csname\??vn:#1\endcsname} \def\currentnoteins {\csname\??vn:\currentnote\endcsname} \def\currentsaveins {\csname\??vn-\currentnote\endcsname} \def\localpostponednotes {\csname\??vn+\currentnote\endcsname} \def\backupnoteins #1{\@EA\backupinsertion\csname\??vn:#1\endcsname} \def\currentbackupnoteins{\@EA\backupinsertion\csname\??vn:\currentnote\endcsname} %D The numbers that accompany a footnote are generated using %D the standard \CONTEXT\ numbering mechanism, and thereby can %D be assigned on a per whatever sectioning basis. \ifx\noteinsertions\undefined \let\noteinsertions\empty \fi % permits reload \def\doprocessnotes#1#2% #1 may be { ... } {\def\currentnote{#2}#1} \def\doprocessnotescs#1#2% #1 == \cs that takes arg {\def\currentnote{#2}\@EA#1\csname\??vn:\currentnote\endcsname} \def\processnotes #1{\processcommacommand[\noteinsertions]{\doprocessnotes {#1}}} \def\processnotescs#1{\processcommacommand[\noteinsertions]{\doprocessnotescs#1}} \def\savenotecontent {\processnotescs\saveinsertionbox } \def\erasenotebackup {\processnotescs\eraseinsertionbackup} \def\savenotedata {\processnotescs\saveinsertiondata } \def\restorenotecontent{\processnotescs\restoreinsertionbox } \def\restorenotedata {\processnotescs\restoreinsertiondata} %D ... due to invisibility of inserts ... maybe save them twice %D and split new part ... todo ... \def\doenablenotes % brrr {\global\count\currentnoteins\plusthousand \global\skip \currentnoteins1\baselineskip\relax} \def\dodisablenotes {\global\count\currentnoteins\zerocount \global\skip \currentnoteins\zeropoint} \def\enablenotes {\processnotes\doenablenotes } \def\disablenotes{\processnotes\dodisablenotes} \def\dosavenotes {\global\setbox\currentsaveins\vbox {\ifvoid\currentsaveins\else\unvbox\currentsaveins\fi \box\currentnoteins}} \def\doflushsavednotes {\ifvoid\currentsaveins\else \insert\currentnoteins{\unvbox\currentsaveins}% \fi} \def\savenotes {\processnotes\dosavenotes } \def\flushsavednotes{\processnotes\doflushsavednotes} %D Both these parameters are coupled to the setup command we %D will implement in a moment. This means that, given a %D suitable symbol set, symbols can be used instead of numbers, %D by saying: %D %D \starttyping %D \setupfootnotes[conversion=set 2] %D \stoptyping % experiment: (compare scope=text and scope=page) % % \definenote[mynote][way=bytext,location=text,width=\leftmarginwidth,scope=page,rule=,before=,after=,factor=0] % \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] \def\definenote {\dodoubleempty\dodefinenote} % maybe we should inherit (todo) \def\@@defaultnotedefloc{\v!inleft} \def\@@defaultnotedefdis{\!!zeropoint} \def\dodefinenote[#1][#2]% {\def\currentnote{#1}% \ifundefined{\??vn:\currentnote}% \@EA\installinsertion \csname\??vn:\currentnote\endcsname\relax \@EA\installbackupinsertion\csname\??vn:\currentnote\endcsname\relax % \@EA\newbox\csname\??vn::\currentnote\endcsname % scratch box % needed ? \@EA\newbox\csname\??vn+\currentnote\endcsname % local box \@EA\newbox\csname\??vn-\currentnote\endcsname % local box \doglobal\addtocommalist{#1}\noteinsertions \fi \definedescription [\??vn\??vn\currentnote] [\c!location=\@@defaultnotedefloc, \c!distance=\@@defaultnotedefdis, \c!width=\v!fit, \c!headstyle=\noteparameter\c!style, \c!headcolor=\noteparameter\c!color, \c!before=, \c!after=]% \presetlocalframed [\??vn\currentnote]% \getparameters [\??vn\currentnote] [\c!location=\v!page, \c!way=\v!by\v!part, \c!sectionnumber=\v!no, \c!conversion=, \c!rule=\v!on, \c!before=\blank, \c!bodyfont=\v!small, \c!style=, \c!color=, \c!after=, \c!rulecolor=, \c!rulethickness=\linewidth, \c!frame=\v!off, \c!margindistance=.5em, \c!columndistance=1em, \c!distance=.125em, \c!align=\v!normal, \c!tolerance=\v!tolerant, \c!split=\v!tolerant, %\c!width=\makeupwidth, %\c!width=\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi, \c!width=\defaultnotewidth, \c!height=\textheight, \c!numbercommand=\high, \c!command=\noteparameter\c!numbercommand, % downward compatible \c!separator=\@@koseparator, \c!textcommand=\high, \c!textstyle=\tx, \c!textcolor=, \c!interaction=\v!yes, \c!factor=, \c!scope=, % \v!text \v!page \c!next=\autoinsertnextspace, % new, experimental with startnotes \c!n=1]% \definenumber [\currentnote] [\c!way=\noteparameter\c!way, \c!sectionnumber=\noteparameter\c!way, \c!conversion=\noteparameter\c!conversion]% \letvalue{\??vn\c!rule:\currentnote}\normalnoterule \unexpanded\setvalue{\currentnote }{\setnote[#1]}% \unexpanded\setvalue{\currentnote\v!text }{\setnotetext[#1]}% \unexpanded\setvalue{\e!start\currentnote}{\dodoubleempty\dostartcurrentnote[#1]}% \unexpanded\setvalue{\e!stop\currentnote }{\dostopcurrentnote}% \setupnote[\currentnote][#2]} \def\dostartcurrentnote[#1][#2]{\setnote[#1][#2]\bgroup\ignorespaces} \def\dostopcurrentnote {\removeunwantedspaces\egroup\noteparameter\c!next} \def\setupnotedefinition[#1]% {\setupdescriptions[\??vn\??vn#1]} \def\setupnote {\dodoubleempty\dosetupnote} \def\dosetupnote[#1][#2]% {\edef\currentnote{#1}% \ifsecondargument \ifcase\localnodemode\or \edef\localnode@n{\noteparameter\c!n}% \edef\localnode@l{\noteparameter\c!location}% \fi \getparameters[\??vn\currentnote][#2]% \ifcase\localnodemode\or \letvalue{\??vn\currentnote\c!n }\localnode@n \letvalue{\??vn\currentnote\c!location}\localnode@l \fi \processaction [\noteparameter\c!rule] [ \v!on=>\letvalue{\??vn\c!rule:\currentnote}\normalnoterule, \v!off=>\letvalue{\??vn\c!rule:\currentnote}\relax, \s!default=>\letvalue{\??vn\c!rule:\currentnote}\relax, \s!unknown=>\setvalue{\??vn\c!rule:\currentnote}{\noteparameter\c!rule}]% \processaction % todo [\noteparameter\c!split] [ \v!tolerant=>\notepenalty\zeropoint, \v!strict=>\notepenalty9999, \v!verystrict=>\notepenalty\maxdimen, \s!default=>\notepenalty\zeropoint, \s!unknown=>\notepenalty\commalistelement]% \fi \dochecknote} \def\dolocalsetupnotes#1#2% {\ifsecondargument \edef\noteinsertions{#1}% \processnotes{\setupnote[\currentnote][#2]}% \else\iffirstargument \doifassignmentelse{#1} {\processnotes{\setupnote[\currentnote][#1]}} {\edef\noteinsertions{#1}}% \fi\fi} % redefined: % so that it matches: % todo: make sure less calls, is quite some code \def\dochecknote % only to be called locally, some bools will become class-ones {% for the moment no mixed text/endnotes modes, so we use % \footnoteparameter and not \noteparameter (**) \setnotedistance \count\currentnoteins\plusthousand \expanded{\doifcommonelse{\v!columns,\v!lastcolumn}{\noteparameter\c!location}}% ** {\chardef\clevernotes\plustwo} {\expanded{\doifinsetelse{\v!firstcolumn}{\noteparameter\c!location}}% ** {\chardef\clevernotes\plusone}% {\chardef\clevernotes\zerocount}}% \ifcase\clevernotes\relax % notes not in column areas \ifnum\noteparameter\c!n=\zerocount % no ifcase \settextnotes \scratchcounter\plusone \else \setcolumnnotes \scratchcounter\noteparameter\c!n\relax \divide\count\currentnoteins \scratchcounter \fi \global\endnotesfalse \expanded{\doifinsetelse{\v!page}{\noteparameter\c!location}}% ** {\expanded{\doifinsetelse{\v!high}{\noteparameter\c!location}}% ** {\global\bottomnotesfalse} {\global\bottomnotestrue}} {\global\endnotestrue \global\bottomnotestrue}% not: \postponenotes, else global \else % notes in column areas \ifnum\@@kln=\zerocount % no ifcase / brrr dependency on \??kl \scratchcounter\plusone \else \scratchcounter\footnoteparameter\c!n\relax % ** \fi \global\endnotesfalse \global\bottomnotestrue \setclevernotes \fi \doifsomething{\noteparameter\c!factor} {\ifnum\noteparameter\c!factor<\zerocount\else \count\currentnoteins\noteparameter\c!factor \fi}% \ifnotelimit \dimen\currentnoteins\noteparameter\c!height \multiply\dimen\currentnoteins \scratchcounter \fi \ifendnotes \dimen\currentnoteins\maxdimen \count\currentnoteins\zerocount \skip \currentnoteins\zeropoint \fi} \def\checknotes {\processnotes\dochecknote} % Example of using factor: % % \definenote[mynote][way=bypage,location=text,width=\marginwidth,rule=,before=,factor=0] % \setuplayout[backspace=5cm,margin=3cm,margindistance=.5cm,width=middle] % \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] % \starttext % \dorecurse{10}{test \mynote{one one one one one one} \input zapf \mynote{one one one one one one} } % \stoptext %D The noterule can be a graphic and therefore calling this %D setup macro at every skipswitch is tricky (many many MP %D runs). Let's just reserve a few points, that probably match %D those of the stretch component. \def\placenoterule {\getvalue{\??vn\c!rule:\currentnote}} \def\normalnoterule {\ifvmode \color [\noteparameter\c!rulecolor] {\hrule \!!width .2\hsize \!!height\noteparameter\c!rulethickness \!!depth \zeropoint}% \kern\strutdepth \fi} %D The following switch can be used to disable limiting the %D height of the footnote area, something that is needed in %D multi column balancing. Use this switch with care. \newif\ifnotelimit \notelimittrue \def\setnotedistance {\setbox\scratchbox\vbox {\forgetall \noteparameter\c!before \placenoterule \noteparameter\c!after}% \global\skip\currentnoteins\ht\scratchbox \setbox\scratchbox\emptybox} % scratchbox can be in use \ifx\setnotehsize\undefined \def\setnotehsize{\hsize\noteparameter\c!width} % can be overloaded \fi \def\setclevernotes {\def\startpushnote {\bgroup % wellicht ooit kopuitlijnen \setupinmargin[\c!align=\v!left]% \startnotedef}% \def\stoppushnote {\stopnotedef \egroup}% \let\startpopnotes \donothing \let\stoppopnotes \donothing} \def\setcolumnnotes {\def\startpushnote {\setnotehsize % possibly overloaded \setrigidcolumnhsize\hsize{\noteparameter\c!columndistance}{\noteparameter\c!n}% \bgroup \setupinmargin[\c!align=\v!left]% \startnotedef}% \def\stoppushnote {\stopnotedef \egroup}% \def\startpopnotes {\bgroup \setnotehsize \setrigidcolumnhsize\hsize{\noteparameter\c!columndistance}{\noteparameter\c!n}% \setbox0\vbox\bgroup}% \def\stoppopnotes {\egroup \setbox0\vbox {\unvbox0\setbox0\lastbox \ifvbox0\unvbox\else\box\fi0}% \rigidcolumnbalance0\egroup}} % \def\settextnotes % {\def\startpushnote {\startvboxtohbox % \dostartattributes{\??vn\currentnote}\c!style\c!color\empty}% % \def\stoppushnote {\hskip\noteparameter\c!columndistance % plus.5em minus.5em % \dostopattributes % \stopvboxtohbox}% % \def\startpopnotes {\vbox\bgroup % \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize % \beginofshapebox}% % \def\stoppopnotes {\endofshapebox % \reshapebox{\ifhbox\shapebox\unhbox\else\box\fi\shapebox\endgraf}% % \flushshapebox % \egroup}} % % this was wrong (for ages) % \def\settextnotes % {\def\startpushnote {\startvboxtohbox % \dostartattributes{\??vn\currentnote}\c!style\c!color\empty}% % \def\stoppushnote {\hskip\noteparameter\c!columndistance % plus.5em minus.5em % \dostopattributes % \stopvboxtohbox}% % %\def\startpopnotes {\vbox\bgroup % % \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize} % %\def\stoppopnotes {\convertvboxtohbox % % \egroup}% % \def\startpopnotes {\vbox\bgroup % \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize % \beginofshapebox}% % \def\stoppopnotes {\endofshapebox % \doreshapebox{\box\shapebox}{}{}{}% get rid of penalties etc % \innerflushshapebox % \convertvboxtohbox % \egroup}% % } \def\settextnotes {\def\startpushnote {\startvboxtohbox \edef\@@defaultnotedefloc{\ifnum\noteparameter\c!n=\zerocount\v!serried\else\v!inleft \fi}% \edef\@@defaultnotedefdis{\ifnum\noteparameter\c!n=\zerocount .5em\else\!!zeropoint\fi}% \startnotedef}% \def\stoppushnote {\stopnotedef \hskip\noteparameter\c!columndistance % plus.5em minus.5em \stopvboxtohbox}% \def\startpopnotes {\vbox\bgroup % here, else problems in preroll \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize \beginofshapebox}% \def\stoppopnotes {\endofshapebox \doreshapebox{\box\shapebox}{}{}{}% get rid of penalties etc \innerflushshapebox \convertvboxtohbox \egroup}} %D The formatting depends on the width of the table, so we %D have to set \type {n} to zero. %D %D \starttyping %D \startbuffer %D \bTABLE %D \bTR \bTD one \footnote{\dorecurse{10}{abcd }} \eTD \bTD two \eTD \eTR %D \bTR \bTD three fout five six seven eight nine \eTD \bTD ten \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \startlocalfootnotes[n=0,location={text,none}] %D \placelegend[n=2]{\getbuffer}{\placelocalfootnotes} %D \stoplocalfootnotes %D \stoptyping %D \macros %D {footnote} %D %D A footnote can have a reference as optional argument and %D therefore its formal specification looks like: %D %D \showsetup{footnote} %D %D This command has one optional command: the reference. By %D saying \type{[-]} the number is omitted. The footnote %D command is not that sensitive to spacing, so it's quite %D legal to say: %D %D \startbuffer %D Users of \CONTEXT\ must keep both feet \footnote{Given they %D have two.} on the ground and not get confused \footnote{Or %D even crazy.} by all those obscure \footnote{But fortunately %D readable.} parameters. %D \stopbuffer %D %D \typebuffer %D %D When setting the \type{conversion} to \type{set 2} we get %D something like: %D %D \bgroup %D \startnarrower %D \setupfootnotes[conversion=set 1] %D \getbuffer %D \stopnarrower %D \egroup %D %D Typesetting footnotes is, at least for the moment, disabled %D when reshaping boxes. %D %D The additional macro \type {\footnotetext} and the %D associated \type {\note} macro were implemented at %D request of users on the mailing list and a suggestion by %D taco to split of the symbol placement. I decided to %D merge this functionality with the existing \type {\note} %D functionality. \newif\ifnotesymbol \unexpanded\def\setnote {\dotripleempty\dosetnote[1]} \unexpanded\def\setnotetext{\dotripleempty\dosetnote[0]} \def\dosetnote[#1][#2][#3]% {\removeunwantedspaces \def\currentnote{#2}% \dochecknote % sometimes needed for local notes \ifcase#1\relax \global\notesymbolfalse \else \global\notesymboltrue \fi \ifvisible % misty feature, make it obsolete \ifreshapingbox \@EAEAEA\gobbletwoarguments \else \@EAEAEA\dodonote \fi \else % todo: \iftrialtypesetting \@EA\gobbletwoarguments \fi{#3}} %D \macros %D {notesenabled} %D %D Before we come to typesetting a footnote, we first check %D if we have to typeset a number. When a \type{-} is passed %D instead of a reference, no number is typeset. We can %D temporary disable footnotes by saying %D %D \starttyping %D \notesenabledfalse %D \stoptyping %D %D which can be handy while for instance typesetting tables %D of contents. The pagewise footnote numbering is dedicated %D to Han The Thanh, who needed it first. \newif\ifnotesenabled \notesenabledtrue \appendtoks \notesenabledfalse \to \everymarking \newconditional\pagewisenotes % saves two hash entries \def\lastnotepage{1} \def\domovednote#1#2% {\ifconditional\pagewisenotes \doifreferencefoundelse{\s!fnt:t:\number\internalnotereference} {\let\savedrealreference\currentrealreference \doifreferencefoundelse{\s!fnt:f:\number\internalnotereference} {\ifnum\savedrealreference<\currentrealreference\relax\symbol[#1]\else \ifnum\savedrealreference>\currentrealreference\relax\symbol[#2]\fi\fi} \donothing} \donothing \fi} % maybe some day % % \newconditional\tracemovednotes % \def\domovednote#1#2% % {\iflocation % \doshowmovednote{#1}{#2}% % \else\ifconditional\tracemovednotes % \doshowtracednote{#1}{#2}% % \fi\fi} % \def\doshowmovednote#1#2% % {\doifreferencefoundelse{\s!fnt:t:\number\internalnotereference} % {\let\savedrealreference\currentrealreference % \doifreferencefoundelse{\s!fnt:f:\number\internalnotereference} % {\ifnum\savedrealreference<\currentrealreference\relax % \symbol[#1]% % \else\ifnum\savedrealreference>\currentrealreference\relax % \symbol[#2]% % \fi\fi} % \donothing} % \donothing} % \def\doshowtracednote#1#2% % {\doifreferencefoundelse{\s!fnt:t:\number\internalnotereference} % {\let\savedrealreference\currentrealreference % \doifreferencefoundelse{\s!fnt:f:\number\internalnotereference} % {\ifnum\savedrealreference<\currentrealreference\relax % \writestatus{NOTE}{forward note reference on real page \currentrealreference}% % \else\ifnum\savedrealreference>\currentrealreference\relax % \writestatus{NOTE}{backward note reference on real page \currentrealreference}% % \fi\fi} % \donothing} % \donothing} \def\dodonote {\ifnotesenabled \iftrialtypesetting \@EAEAEA\nododonote \else \@EAEAEA\dododonote \fi \else \@EA\gobbletwoarguments \fi} % \def\nododonote#1% % {\doifnot{#1}{-}{\kern.5em}% quick hack, approximation % \gobbleoneargument} % % more correct: \long\def\nododonote#1#2% {\doifnot{#1}{-} {\ifconditional\pagewisenotes \doifreferencefoundelse{\s!fnt:t:\number\internalnotereference} {\ifnum\currentrealreference>\lastnotepage\relax \globallet\lastnotepage\currentrealreference \resetnumber[\currentnote]% \fi} {}% \fi \incrementnumber[\currentnote]% \makesectionnumber[\currentnote]% \let\lastnotenumber\composedsectionnumber \dolastnotesymbol \decrementnumber[\currentnote]}} \def\dododonote#1% {\global\advance\internalnotereference\plusone \doifelse{\noteparameter\c!way}{\v!by\v!page} {\settrue\pagewisenotes} {\setfalse\pagewisenotes}% \doifelse{#1}{-} {\let\lastnotenumber\empty} {\ifconditional\pagewisenotes \doifreferencefoundelse{\s!fnt:t:\number\internalnotereference} {\ifnum\currentrealreference>\lastnotepage\relax \globallet\lastnotepage\currentrealreference \resetnumber[\currentnote]% \fi} {}% \fi \incrementnumber[\currentnote]% \makesectionnumber[\currentnote]% \rawreference\s!fnt{#1}\composedsectionnumber \let\lastnotenumber\composedsectionnumber}% \dostartnote} %D The main typesetting routine is more or less the same as the %D \PLAIN\ \TEX\ one, except that we only handle one type while %D \PLAIN\ also has something \type{\v...}. In most cases %D footnotes can be handled by a straight insert, but we do so %D by using an indirect call to the \type{\insert} primitive. \def\dostartlocalnoteinsert {\dochecknote \ifendnotes \global\setbox\localpostponednotes\vbox\bgroup \ifvoid\localpostponednotes\else\unvbox\localpostponednotes\fi \else \insert\currentnoteins\bgroup \fi} \let\startlocalnoteinsert\dostartlocalnoteinsert \let\stoplocalnoteinsert \egroup %D Making footnote numbers active is not always that logical, %D Making footnote numbers active is not always that logical, %D especially when we keep the reference and text at one page. %D On the other hand we need interactivity when we refer to %D previous notes or use end notes. Therefore we support %D interactive footnote numbers in two ways \footnote{This %D feature was implemented years after we were able to do so, %D mainly because endnotes had to be supported.} that is, %D automatically (vise versa) and by user supplied reference. \newcount\internalnotereference \let\startpushnote=\relax \let\stoppushnote =\relax \newsignal\notesignal \newcount \notepenalty \notepenalty=0 % needed in order to split in otrset \newconditional\processingnote \def\footnotereferencefrom {\rawreference\s!fnt{\s!fnt:f:\number\internalnotereference}{}} \def\footnotereferenceto {\global\advance\crossreferencenumber\minusone\relax % else problem, needs further testing \rawreference\s!fnt{\s!fnt:t:\number\internalnotereference}{}} \def\dostartnote% nog gobble als in pagebody {\pushsomestates \bgroup \settrue\processingnote %\restorecatcodes % to be tested first \iftypesettinglines % otherwise problems with \type {xxx} \ignorelines % makes footnotes work in \startlines ... \stoplines \fi \ifnotesymbol \dolastnotesymbol \else \unskip\unskip \globallet\lastnotesymbol\dolastnotesymbol \fi \startlocalnoteinsert \doif{\noteparameter\c!scope}\v!page{\floatingpenalty\maxdimen}% experiment \penalty\notepenalty \forgetall \setnotebodyfont \redoconvertfont % to undo \undo calls in in headings etc \splittopskip\strutht % not actually needed here \splitmaxdepth\strutdp % not actually needed here \leftmargindistance\noteparameter\c!margindistance \rightmargindistance\leftmargindistance \ifnum\noteparameter\c!n=\zerocount % no ifcase new 31-07-99 ; always ? \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize \fi \startpushnote {\ifx\lastnotenumber\empty \else \preparefullnumber{\??vn\currentnote}\lastnotenumber\preparednumber \doifelse{\noteparameter\c!interaction}\v!no {\noteparameter\c!numbercommand {\preparednumber\domovednote\v!nextpage\v!previouspage}}% {\gotobox{\noteparameter\c!command % was \c!numbercommand, but compatible {\preparednumber\domovednote\v!nextpage\v!previouspage}}% [\s!fnt:f:\number\internalnotereference]}% \fi \doifelse{\noteparameter\c!interaction}\v!no {\ifconditional\pagewisenotes \footnotereferenceto \fi}% {\footnotereferenceto}}% \bgroup \postponenotes \aftergroup\dostopnote \begstrut \let\next} \def\dostopnote {\endstrut \stoppushnote \egroup \stoplocalnoteinsert \kern\notesignal\relax % \relax is needed to honor spaces \popsomestates} \def\dolastnotesymbol {\removeunwantedspaces \doifitalicelse\/\donothing % Charles IV \footnote{the fourth} \ifdim\lastkern=\notesignal \dodonotesymbol{\kern\noteparameter\c!distance}% gets the font right, hack ! \fi \nobreak \doifelse{\noteparameter\c!interaction}\v!no {\dodonotesymbol{\lastnotenumber\domovednote\v!previouspage\v!nextpage}% \ifconditional\pagewisenotes \footnotereferencefrom \fi} {\gotobox {\dodonotesymbol{\lastnotenumber\domovednote\v!previouspage\v!nextpage}}% [\s!fnt:t:\number\internalnotereference]% \footnotereferencefrom}% \globallet\lastnotesymbol\relax} \let\lastnotesymbol\relax %D \macros %D {note} %D %D Refering to a note is accomplished by the rather short %D command: %D %D \showsetup{note} %D %D This command is implemented rather straightforward as: \def\notesymbol {\dodoubleempty\donotesymbol} % \def\donotesymbol[#1][#2]% % {\bgroup % \ifnotesenabled % \def\currentnote{#1}% % \ifsecondargument % \ifx\lastnotesymbol\relax % \unskip % \naarbox{\high{\tx\currenttextreference}}[#2]% % \else % \lastnotesymbol % \fi % \else % \lastnotesymbol % \fi % \fi % \egroup} \def\dodonotesymbol#1% {\noteparameter\c!textcommand{\doattributes{\??vn\currentnote}\c!textstyle\c!textcolor{#1}}} % \def\donotesymbol[#1][#2]% % {\bgroup % \ifnotesenabled % \def\currentnote{#1}% % \ifsecondargument % \ifx\lastnotesymbol\relax % bugged % \unskip % \gotobox{\dodonotesymbol\currenttextreference}[#2]% % \else % \lastnotesymbol % \fi % \else % \lastnotesymbol % \fi % \fi % \egroup} \def\donotesymbol[#1][#2]% {\bgroup \ifnotesenabled \def\currentnote{#1}% \ifsecondargument \unskip \gotobox{\dodonotesymbol\currenttextreference}[#2]% \else \lastnotesymbol \fi \fi \egroup} %D Normally footnotes are saved as inserts that are called upon %D as soon as the pagebody is constructed. The footnote %D insertion routine looks just like the \PLAIN\ \TEX\ one, %D except that we check for the end note state. \let\startpopnotes = \relax \let\stoppopnotes = \relax \def\placenoteinserts {\processnotes\doplacenoteinserts} % testcase for split bottom alignment see (a) below % % \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}} \def\doplacenoteinserts {%\ifvoid\currentnoteins \else % unsafe, strange \relax\ifdim\ht\currentnoteins>\zeropoint\relax \dochecknote \ifendnotes \else \noteparameter\c!before \placenoterule % alleen in ..mode \bgroup \setnotebodyfont \setbox0\hbox {\startpopnotes \setnotebodyfont % % this should be checked, smells like a mix-up % % does not split: \ifcase\noteparameter\c!n\unvbox\else\box\fi\currentnoteins \ifcase\noteparameter\c!n\relax \iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteins % \unvbox\currentnoteins \or \iftrialtypesetting\copy\else\box\fi\currentnoteins % \box\currentnoteins \obeydepth % (a) added , since split footnotes will not align properly \else \iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteins % \unvbox\currentnoteins \fi % this is too ugly actually \stoppopnotes}% \setbox2\hbox {\localframed [\??vn\currentnote] [\c!width=\v!fit, \c!height=\v!fit, \c!strut=\v!no, \c!offset=\v!overlay] {\ifdim\dp0=\zeropoint % this hack is needed because \vadjust \hbox{\lower\strutdp\box0}% % in margin number placement \else % hides the (always) present depth \box0 \fi}}% \setbox2\hbox{\lower\strutdepth\box2}% \dp2=\strutdepth % so we know that it has the note bodyfont depth \box2 \egroup \noteparameter\c!after \fi \fi} %D Supporting end notes is surprisingly easy. Even better, we %D can combine this feature with solving the common \TEX\ %D problem of disappearing inserts when they're called for in %D deeply nested boxes. The general case looks like: %D %D \starttyping %D \postponenotes %D \.box{whatever we want with footnotes} %D \flushnotes %D \stoptyping %D %D This alternative can be used in headings, captions, tables %D etc. The latter one sometimes calls for notes local to %D the table, which can be realized by saying %D %D \starttyping %D \setlocalfootnotes %D some kind of table with local footnotes %D \placelocalfootnotes %D \stoptyping %D %D Postponing is accomplished by simply redefining the (local) %D insert operation. A not too robust method uses the %D \type{\insert} primitive when possible. This method fails in %D situations where it's not entirely clear in what mode \TEX\ %D is. Therefore the auto method can is to be overruled when %D needed. \newconditional\postponednote \def\autopostponenotes {\def\startlocalnoteinsert % not global {\ifinner %\message{[postponed note]}% \global\setbox\localpostponednotes\vbox\bgroup \global\settrue\postponednote \ifvoid\localpostponednotes\else\unvbox\localpostponednotes\fi \else %\message{[inserted note]}% \expandafter\dostartlocalnoteinsert \fi}} \def\postponenotes {\let\autopostponenotes\postponenotes \let\postponenotes\relax % prevent loops \def\startlocalnoteinsert % not global {%\message{[postponed note]}% \global\setbox\localpostponednotes\vbox\bgroup \global\settrue\postponednote % \unvbox\localpostponednotes}} \ifvoid\localpostponednotes\else\unvbox\localpostponednotes\fi}} \def\dodoflushnotes % per class, todo: handle endnotes here {\ifdim\ht\localpostponednotes>\zeropoint \bgroup \dochecknote \ifendnotes \else % not that accurate when multiple notes \ifdim\dimexpr\pagegoal-\pagetotal\relax<\ht\localpostponednotes \message{[moved note \currentnote]}% \fi \insert\currentnoteins\bgroup\unvbox\localpostponednotes\egroup \fi \egroup \fi} \def\doflushnotes % also called directly, \ifvoid is needed ! {\ifconditional\processingnote \else \ifconditional\postponednote \let\localnoteinsert\normalnoteinsert % not global \processnotes\dodoflushnotes \global\setfalse\postponednote \fi \fi} \def\flushnotes {\ifconditional\processingnote \else \ifconditional\postponednote \ifinner \else \ifinpagebody \else %\ifvmode % less interference, but also less secure \doflushnotes %\fi \fi \fi \fi \fi} %D For old times sake: \def\flushfootnotes {\flushnotes} \def\doflushfootnotes{\doflushnotes} %D This is a nasty and new secondary footnote flusher. It %D can be hooked into \type {\everypar} like: %D %D \starttyping %D \appendtoks \synchronizenotes \to \everypar %D \stoptyping \def\dosynchronizenotes {\ifvoid\currentnoteins\else\insert\currentnoteins{\unvbox\currentnoteins}\fi} \def\synchronizenotes {\processnotes\dosynchronizenotes} %D There are several placement alternatives. \def\placenotesintext#1% {\ifdim\ht#1>\zeropoint \endgraf \ifvmode \whitespace \noteparameter\c!before \fi \snaptogrid\hbox {\setnotebodyfont \setbox0\hbox {\startpopnotes \unvbox#1\endgraf\relax \stoppopnotes}% \doif{\noteparameter\c!width}\v!fit % new, auto width {\setbox0\hbox % uggly but ok. {\beginofshapebox \unhbox0\setbox0=\lastbox\unvbox0 \endofshapebox \reshapebox{\hbox{\unhbox\shapebox}}% \vbox{\flushshapebox}}}% \localframed [\??vn\currentnote] [ \c!width=\v!fit, \c!height=\v!fit, \c!strut=\v!no, \c!offset=\v!overlay] {\ifdim\dp0=\zeropoint % this hack is needed because \vadjust \hbox{\lower\strutdp\box0}% % in margin number placement \else % hides the (always) present depth \box0 \fi}}% \ifvmode \noteparameter\c!after \fi \fi} %D A stupid alternative is also provided: %D %D \starttyping %D \setupfootnotes[location={text,none}] %D \stoptyping \def\placenotesasnone#1% is grouped already {\ifdim\ht#1>\zeropoint \noteparameter\c!before \setnotebodyfont \startpopnotes % make sure that fake height is killed \unvbox#1\endgraf \stoppopnotes % weird \ifhmode \setbox0=\lastbox \ifvbox0 \unvbox0\else\box0\fi % enable columns \fi \noteparameter\c!after \fi} %D \macros %D {startlocalfootnotes,placelocalfootnotes} %D %D The next two macros can be used in for instance tables, as %D we'll demonstrate later on. %D %D \showsetup{startlocalfootnotes} %D \showsetup{placelocalfootnotes} \def\defaultnotewidth{\makeupwidth} % \def\collectlocalnotes % {\def\localnoteinsert##1% was \gdef, but never reset! % {%\message{[local note]}% % \global\setbox\localpostponednotes\vbox\bgroup % \ifvoid\localpostponednotes \else % \unvbox\localpostponednotes % \fi % \let\next}} \def\collectlocalnotes {\def\startlocalnoteinsert% was \gdef, but never reset! {%\message{[local note]}% \global\setbox\localpostponednotes\vbox\bgroup \ifvoid\localpostponednotes\else\unvbox\localpostponednotes\fi}} \def\startlocalnotes {\bgroup % here because we support \vbox\startlocalnotes \dosingleempty\dostartlocalnotes} \chardef\localnodemode\zerocount \def\dostartlocalnotes[#1]% {\let\autopostponenotes\postponenotes \let\postponenotes\collectlocalnotes \chardef\localnodemode\plusone % new \def\defaultnotewidth{\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi}% \processnotes {\doifsomething{#1}{\setupnote[\currentnote][#1]}% \savenumber[\currentnote]% \resetnumber[\currentnote]}% \collectlocalnotes} \def\stoplocalnotes {\processnotes{\restorenumber[\currentnote]}% \egroup \checknotes} % really needed, else wrong main settings \def\placelocalnotes {\dodoubleempty\doplacelocalnotes} \def\doplacelocalnotes[#1][#2]% {\bgroup \chardef\localnodemode\plusone % new \dolocalsetupnotes{#1}{#2}% \processnotes\dodoplacelocalnotes \egroup \checknotes} % probably not needed \def\dodoplacelocalnotes {\dochecknote \expanded{\doifinsetelse{\v!none}{\noteparameter\c!location}} \placenotesasnone\placenotesintext \localpostponednotes} %D These commands can be used like: %D %D \startbuffer %D \startlocalnotes[width=.3\hsize,n=0] %D \placetable %D {Some Table} %D \placeontopofeachother %D {\starttable[|l|r|] %D \HL %D \VL Nota\footnote{Bene} \VL Bene\footnote{Nota} \VL\SR %D \VL Bene\footnote{Nota} \VL Nota\footnote{Bene} \VL\SR %D \HL %D \stoptable} %D {\placelocalnotes} %D \stoplocalnotes %D \stopbuffer %D %D \typebuffer %D %D Because this table placement macro expect box content, and %D thanks to the grouping of the local footnotes, we don't need %D additional braces. %D %D \getbuffer %D \macros %D {placefootnotes} %D %D We still have no decent command for placing footnotes %D somewhere else than at the bottom of the page (for which no %D user action is needed). Footnotes (endnotes) can be %D placed by using %D %D \showsetup{placefootnotes} \def\placebottomnotes {\processnotes\dodoplacenotes} % \definecomplexorsimple\placenotes % \def\simpleplacenotes % {\processnotes\dodoplacenotes} % \def\complexplacenotes[#1]% % {\bgroup % \edef\noteinsertions{#1}% % \simpleplacenotes % \egroup} \def\placenotes {\dodoubleempty\doplacenotes} \def\doplacenotes[#1][#2]% {\bgroup \dolocalsetupnotes{#1}{#2}% \processnotes\dodoplacenotes \egroup} \def\dodoplacenotes {\dochecknote \ifendnotes \ifinpagebody \else \ifdim\ht\localpostponednotes>\zeropoint \expanded{\doifinsetelse{\v!none}{\noteparameter\c!location}} \placenotesasnone\placenotesintext\localpostponednotes \fi \fi \else \ifdim\ht\currentnoteins>\zeropoint \placenoteinserts \fi \fi} %D \macros %D {fakenotes} \def\fakenotes {\ifhmode\endgraf\fi\ifvmode \calculatetotalclevernoteheight \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi \fi} \def\fakepagenotes {\ifhmode\endgraf\fi\ifvmode \calculatetotalpagenoteheight \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi \fi} \newdimen\totalnoteheight \def\doaddtototalnoteheight#1% {\ifdim\ht#1>\zeropoint \advance\totalnoteheight\ht #1% \advance\totalnoteheight\skip#1% \fi} \def\docalculatetotalnoteheight {\ifcase\clevernotes % tricky here ! ! ! to be sorted out ! ! ! \doaddtototalnoteheight\currentnoteins \else \doaddtototalnoteheight\currentbackupnoteins \fi} \def\docalculatetotalclevernoteheight {\ifcase\clevernotes \else % tricky here ! ! ! to be sorted out ! ! ! \doaddtototalnoteheight\currentnoteins \fi} \def\docalculatetotalpagenoteheight {\doaddtototalnoteheight\currentnoteins} \def\calculatetotalnoteheight {\totalnoteheight\zeropoint\processnotes\docalculatetotalnoteheight} \def\calculatetotalclevernoteheight{\totalnoteheight\zeropoint\processnotes\docalculatetotalclevernoteheight} \def\calculatetotalpagenoteheight {\totalnoteheight\zeropoint\processnotes\docalculatetotalpagenoteheight} \newif\ifnotespresent \def\dochecknotepresence {\ifdim\ht\currentnoteins>\zeropoint \notespresenttrue \fi} \def\checknotepresence {\notespresentfalse \processnotes\dochecknotepresence} %D Now how can this mechanism be hooked into \CONTEXT\ without %D explictly postponing footnotes? The solution turned out to %D be rather simple: %D %D \starttyping %D \everypar {...\flushnotes...} %D \neverypar {...\postponenotes} %D \stoptyping %D %D and %D %D \starttyping %D \def\ejectinsert% %D {... %D \flushnotes %D ...} %D \stoptyping %D %D We can use \type{\neverypar} because in most commands %D sensitive to footnote gobbling we disable \type{\everypar} %D in favor for \type{\neverypar}. In fact, this footnote %D implementation is the first to use this scheme. %D When typesetting footnotes, we have to return to the %D footnote specific bodyfont size, which is in most cases derived %D from the global document bodyfont size. In the previous macros %D we already used a footnote specific font setting macro. \def\setnotebodyfont {\let\setnotebodyfont\relax \restoreglobalbodyfont \switchtobodyfont[\noteparameter\c!bodyfont]% \setuptolerance[\noteparameter\c!tolerance]% \setupalign[\noteparameter\c!align]} %D The footnote mechanism defaults to a traditional one %D column way of showing them. By default we precede them by %D a small line. \ifx\v!endnote\undefined \def\v!endnote{endnote} \fi \definenote [\v!footnote ] \definenote [\v!endnote ] [\c!location=\v!none] % else no break % \definenote % [mynote] % [way=bypage, % location={page,high}, % factor=0, % width=\leftmarginwidth, % scope=page, % rule=, % before=, % after=] % % \setuptexttexts % [margin] % [\vbox to \textheight{\placenotes[mynote]\vfill}] % [] %D Compatibility macros: \def\setupfootnotedefinition{\setupnotedefinition [\v!footnote]} \def\setupfootnotes {\setupnote [\v!footnote]} \unexpanded \def\footnote {\setnote [\v!footnote]} \unexpanded \def\footnotetext {\setnotetext [\v!footnote]} \def\note {\dodoubleempty\notesymbol [\v!footnote]} % alleen footnote \def\placefootnotes {\dodoubleempty\doplacefootnotes [\v!footnote]} \def\placelocalfootnotes {\dodoubleempty\doplacelocalfootnotes[\v!footnote]} \def\startlocalfootnotes {\startlocalnotes} \def\stoplocalfootnotes {\stoplocalnotes } \def\doplacefootnotes [#1][#2]% {\ifsecondargument\placenotes [#1][#2,\c!height=\textheight]\else\placenotes [#1]\fi} \def\doplacelocalfootnotes[#1][#2]% {\ifsecondargument\placelocalnotes[#1][#2,\c!height=\textheight]\else\placelocalnotes[#1]\fi} %D Backward compatibility command: \def\footins {\noteinsertion\currentnote} \def\postponefootnotes {\postponenotes} \def\autopostponefootnotes{\autopostponenotes} %D New trickery: \def\ownnotesymbol#1% #1 gets number passed {\executeifdefined{\??vn::\currentnote}\empty} \def\setnotesymbol[#1]#2#3% {\prewordbreak % prevent lookback \gdef\lastnotenumber{#2}% \setgvalue{\??vn::#1}{#3} \dolastnotesymbol} \def\ownnote[#1]#2#3#4% {\setnotesymbol[#1]{#2}{#3}% \setnotetext [#1]{#4}} \defineconversion [ownnote] [\ownnotesymbol] %D Usage: % maybe we should predefine this one % \definenote % [glossary] % [way=bypage, % location={page,high}, % factor=0, % width=\leftmarginwidth, % scope=page, % conversion=ownnote, % numbercommand=, % textcommand=, % textstyle=, % rule=, % before=, % after=] % % \setupnotedefinition % [glossary] % [location=left, % width=fit, % distance=.5em, % align={right,tolerant,stretch}, % headstyle=bold, % hang=1] % % \setuplayout % [width=middle, % height=middle, % backspace=5cm, % margin=4cm, % margindistance=.25cm, % cutspace=2cm] % % \setuptexttexts % [margin] % [\setups{glossary}] % [\setups{glossary}] % % \startsetups glossary % \vbox to \textheight {\placenotes[glossary]\vfill} % \stopsetups % % \dorecurse{10} % {\dorecurse{5} % {\ownnote[glossary]{whow}{whatever needs to be glossed:~\recurselevel}% % \input tufte \relax}} \protect \endinput % \def\myfootnote[#1]#2% let's guess that #2 is without catcode problems % {\setgvalue{note:t:#1}% % {\setxvalue{note:l:#1}{\getvalue{note:n:#1}}% % \footnote[note:a:#1:\getvalue{note:l:#1}]{#2}}% % \setgvalue{note:n:#1}% % {1}% % \getvalue{note:t:#1}}% % \def\mynote[#1]% % {\removeunwantedspaces % \scratchcounter\getvalue{note:n:#1}\relax % \edef\NoteNumber{\the\scratchcounter}% % \doglobal\incrementvalue{note:n:#1}\relax % \doifreferencefoundelse{note:a:#1:1} % {\edef\NotePageA{\number\currentrealreference}% % \doifreferencefoundelse{note:a:#1:\getvalue{note:n:#1}} % {\edef\NotePageB{\number\currentrealreference}% % \doifreferencefoundelse{note:a:#1:\NoteNumber} % {\ifnum\currentrealreference=\NotePageB\relax % \pagereference[note:a:#1:\getvalue{note:n:#1}]% % \note[note:a:#1:\getvalue{note:l:#1}]% % \else\ifnum\NotePageA=\NotePageB\relax % \pagereference[note:a:#1:\getvalue{note:n:#1}]% % \note[note:a:#1:\getvalue{note:l:#1}]% % \else % \getvalue{note:t:#1}% % \fi\fi} % {\ifnum\NotePageA=\NotePageB\relax % \pagereference[note:a:#1:\getvalue{note:n:#1}]% % \note[note:a:#1:\getvalue{note:l:#1}]% % \else % \getvalue{note:t:#1}% % \fi}} % {\pagereference[note:a:#1:\getvalue{note:n:#1}]% % \note[note:a:#1:\getvalue{note:l:#1}]}} % {\pagereference[note:a:#1:\getvalue{note:n:#1}]% % \note[note:a:#1:\getvalue{note:l:#1}]}} % \starttext % funny \myfootnote[funny]{funny} funny \mynote[funny] \page % funny \mynote[funny] funny \mynote[funny] funny \mynote[funny] \page % funny \mynote[funny] funny \mynote[funny] \page % funny \mynote[funny] funny \mynote[funny] funny \mynote[funny] \page % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/math-inl.mkiv0000644000175000017500000000124311754241457024304 0ustar norbertnorbert%D \module %D [ file=math-inl, %D version=2008.10.20, %D title=\CONTEXT\ Math Macros, %D subtitle=Inline, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Inline} \unprotect % The \MKII\ math grid snapping code has gone. A pity as it was rather effective % and worked quite well (for a couple of projects where it was demanded). Other code % might show up / move here. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-pln.mkii0000644000175000017500000000716411754241457024357 0ustar norbertnorbert%D \module %D [ file=syst-pln, %D version=2001.11.16, % 1999.03.17, % an oldie: 1995.10.10 %D title=\CONTEXT\ System Macros, %D subtitle=Efficient \PLAIN\ \TEX\ loading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This module set a couple of variables to the plain \TEX\ %D values. Later they might be overloaded. %D Build||in numeric variables. \adjdemerits = 10000 \binoppenalty = 700 \brokenpenalty = 100 \clubpenalty = 150 %day = 0 \defaulthyphenchar = `\- \defaultskewchar = -1 \delimiterfactor = 901 \displaywidowpenalty = 50 \doublehyphendemerits = 10000 %endlinechar = `\^^M \errorcontextlines = 5 %escapechar = `\\ \exhyphenpenalty = 50 %fam = 0 \finalhyphendemerits = 5000 %floatingpenalty = 0 %globaldefs = 0 %hangafter = 1 \hbadness = 1000 %holdinginserts = 0 \hyphenpenalty = 50 %interlinepenalty = 0 %language = 0 \lefthyphenmin = 2 \linepenalty = 10 %looseness = 0 %mag = 1000 %maxdeadcycles = 25 %month = 0 %newlinechar = -1 % commented i.e. no plain value %outputpenalty = 0 %pausing = 0 %postdisplaypenalty = 0 \predisplaypenalty = 10000 \pretolerance = 100 \relpenalty = 500 \righthyphenmin = 3 \showboxbreadth = 5 \showboxdepth = 3 %time = 0 \tolerance = 200 %tracingcommands = 0 \tracinglostchars = 1 %tracingmacros = 0 %tracingonline = 0 %tracingoutput = 0 %tracingpages = 0 %tracingparagraphs = 0 %tracingrestores = 0 %tracingstats = 0 \uchyph = 1 \vbadness = 1000 \widowpenalty = 150 %year = 0 %D Build in dimension variables. \abovedisplayshortskip = 0pt plus 3pt \abovedisplayskip = 12pt plus 3pt minus 9pt %baselineskip = 0pt \belowdisplayshortskip = 7pt plus 3pt minus 4pt \belowdisplayskip = 12pt plus 3pt minus 9pt \boxmaxdepth = \maxdimen \delimitershortfall = 5pt %displayindent = 0pt %displaywidth = 0pt %hangindent = 0pt \hfuzz = 0.1pt %hoffset = 0pt \hsize = 6.5in %leftskip = 0pt %lineskip = 0pt %lineskiplimit = 0pt %mathsurround = 0pt \maxdepth = 4pt \medmuskip = 4mu plus 2mu minus 4mu \nulldelimiterspace = 1.2pt \overfullrule = 5pt \parfillskip = 0pt plus 1fil \parindent = 20pt \parskip = 0pt plus 1pt %predisplaysize = 0pt %rightskip = 0pt \scriptspace = 0.5pt %spaceskip = 0pt \splitmaxdepth = \maxdimen \splittopskip = 10pt %tabskip = 0pt \thickmuskip = 5mu plus 5mu \thinmuskip = 3mu \topskip = 10pt \vfuzz = 0.1pt %voffset = 0pt \vsize = 8.9in %xspaceskip = 0pt \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-hor.lua0000644000175000017500000000210111571377075024117 0ustar norbertnorbertif not modules then modules = { } end modules ['spac-hor'] = { version = 1.001, comment = "companion to spac-hor.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local match = string.match local utfbyte = utf.byte local chardata = characters.data local can_have_space = table.tohash { "lu", "ll", "lt", "lm", "lo", -- letters -- "mn", "mc", "me", -- marks "nd", "nl", "no", -- numbers "ps", "pi", -- initial -- "pe", "pf", -- final -- "pc", "pd", "po", -- punctuation "sm", "sc", "sk", "so", -- symbols -- "zs", "zl", "zp", -- separators -- "cc", "cf", "cs", "co", "cn", -- others } function commands.autonextspace(str) -- todo: use nexttoken local ch = match(str,"the letter (.)") or match(str,"the character (.)") ch = ch and chardata[utfbyte(ch)] if ch and can_have_space[ch.category] then context.space() end end context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-ver.mkiv0000644000175000017500000000100311754241457024267 0ustar norbertnorbert%D \module %D [ file=cldf-com, %D version=2010.10.19, %D title=\CONTEXT\ \LUA\ Document Functions, %D subtitle=Verbatim, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Documents / Verbatim} \registerctxluafile{cldf-ver}{1.001} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-nodechart.mkvi0000644000175000017500000001773112130411274024766 0ustar norbertnorbert\usemodule[chart] \startluacode local format = string.format local points = number.nopts local ptfactor = number.dimenfactors.pt local nodecodes = nodes.nodecodes local kerncodes = nodes.kerncodes local penaltycodes = nodes.penaltycodes local gluecodes = nodes.gluecodes local whatsitcodes = nodes.whatsitcodes local formatters = { } function formatters.glyph(n,comment) -- subtype font char lang left right uchyph components xoffset yoffset width height depth return format("\\doFLOWglyphnode{%s}{%s}{%s}{%s}{U+%05X}",comment,n.subtype,n.font,n.char,n.char) end function formatters.disc(n,comment) -- pre post replace return format("\\doFLOWdiscnode{%s}{%s}",comment,n.subtype) end function formatters.kern(n,comment) -- subtype kern -- return format("\\doFLOWkernnode{%s}{%s}{%s}",comment,kerncodes[n.subtype],points(n.kern)) return format("\\doFLOWkernnode{%s}{%s}{%.4f}",comment,kerncodes[n.subtype],n.kern*ptfactor) end function formatters.penalty(n,comment) -- subtype penalty return format("\\doFLOWpenaltynode{%s}{%s}{%s}",comment,"penalty",n.penalty) end function formatters.glue(n,comment) -- subtype width leader spec (stretch shrink ... local s = n.spec -- return format("\\doFLOWgluenode{%s}{%s}{%s}{%s}{%s}",comment,gluecodes[n.subtype],points(s.width),points(s.stretch),points(s.shrink)) return format("\\doFLOWgluenode{%s}{%s}{%.4f}{%.4f}{%.4f}",comment,gluecodes[n.subtype],s.width*ptfactor,s.stretch*ptfactor,s.shrink*ptfactor) end function formatters.whatsit(n,comment) -- subtype width leader spec (stretch shrink ... local subtype = n.subtype local whatsit = whatsitcodes[subtype] if whatsit == "dir" or whatsit == "localpar" then return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,whatsit,n.dir) else return nodecodes[n.id] end end local shapes = { -- I will make a dedicated set of shapes for this. glyph = "procedure", disc = "procedure", kern = "action", penalty = "action", glue = "action", } local function flow_nodes_to_chart(head,comment,x,y,how) local current = head while current do local nodecode = nodecodes[current.id] local formatter = formatters[nodecode] local shape = shapes[nodecode] y = y + 1 local next = current.next commands.flow_start_cell { shape = { framecolor = "nodechart:" .. nodecode } } commands.flow_set_name(tostring(current)) commands.flow_set_location(x,y) if shape then commands.flow_set_shape(shape) end if formatter then commands.flow_set_text("node",formatter(current,comment)) else commands.flow_set_text("node",nodecode) end if next then commands.flow_set_connection("bt","",tostring(next)) end if nodecode == "glyph" then local components = current.components if components then commands.flow_set_connection("rl","",tostring(components)) commands.flow_stop_cell() n = flow_nodes_to_chart(components,"component",x+2,y-1) else commands.flow_stop_cell() end elseif nodecode == "disc" then local pre = current.pre local pos = current.post local rep = current.replace if pre and not rep and not rep then if pre then commands.flow_set_connection("rl","",tostring(pre)) end commands.flow_stop_cell() if pre then n = flow_nodes_to_chart(pre,"prebreak",x+1,y-1) end else if pre then commands.flow_set_connection("+rl","",tostring(pre)) end if rep then commands.flow_set_connection("rl","",tostring(rep)) end if pos then commands.flow_set_connection("-rl","",tostring(pos)) end commands.flow_stop_cell() if pre then n = flow_nodes_to_chart(pre,"prebreak",x+1,y-2) end if rep then n = flow_nodes_to_chart(rep,"replacement",x+1,y-1) end if pos then n = flow_nodes_to_chart(pos,"postbreak",x+1,y) end end elseif nodecode == "hlist" then local list = current.list if list then commands.flow_set_connection("rl","",tostring(list)) commands.flow_stop_cell() n = flow_nodes_to_chart(list,"list",x+2,y-1) else commands.flow_stop_cell() end else commands.flow_stop_cell() end current = next end return n end function commands.flow_nodes_to_chart(name,head,max) commands.flow_start_chart(name) flow_nodes_to_chart(head,"",1,0) commands.flow_stop_chart() end \stopluacode \unprotect \def\enspaceminus{\hskip.5em minus .25em\relax} \starttexdefinition unexpanded doFLOWglyphnode #comment #subtype #font #char #unicode \dontleavehmode\hbox{\bf\setstrut\strut \doifsomething{#comment}{#comment\enspaceminus:\enspaceminus}glyph #subtype} \vss \dontleavehmode\hbox{\tx\setstrut\strut font\enspaceminus#font:\enspace#unicode:\enspaceminus\setfontofid{#font}\char#char} \stoptexdefinition \starttexdefinition unexpanded doFLOWdiscnode #comment #subtype \dontleavehmode\hbox{\bf\setstrut\strut disc} \vss \dontleavehmode\hbox{\tx\setstrut\strut} \stoptexdefinition \starttexdefinition unexpanded doFLOWkernnode #comment #subtype #kern \dontleavehmode\hbox{\bf\setstrut\strut#subtype} \vss \dontleavehmode\hbox{\tx\setstrut\strut#kern} \stoptexdefinition \starttexdefinition unexpanded doFLOWpenaltynode #comment #subtype #penalty \dontleavehmode\hbox{\bf\setstrut\strut#subtype} \vss \dontleavehmode\hbox{\tx\setstrut\strut#penalty} \stoptexdefinition \starttexdefinition unexpanded doFLOWgluenode #comment #subtype #width #shrink #stretch \dontleavehmode\hbox{\bf\setstrut\strut#subtype} \vss \dontleavehmode\hbox{\tx\setstrut\strut#width\enspaceminus-\enspaceminus#shrink\enspaceminus+\enspaceminus#stretch} \stoptexdefinition \starttexdefinition unexpanded doFLOWdirnode #comment #subtype #direction \dontleavehmode\hbox{\bf\setstrut\strut#subtype} \vss \dontleavehmode\hbox{\tx\setstrut\strut#direction} \stoptexdefinition \defineframed [flowcell:node] [flowcell:base] [\c!top=\vss, \c!bottom=\vss, \c!align=\v!middle, \c!foregroundstyle=\tt] % this is a temporary interface ... we will have instances and optional settings \unexpanded\def\boxtoFLOWchart#name#max#box% {\ctxcommand{flow_nodes_to_chart("#name",tex.box[\number#box].list,\number#max)}} \unexpanded\def\nextboxtoFLOWchart#name#max% {\dowithnextbox{\boxtoFLOWchart{#name}{#max}\nextbox}} \unexpanded\def\hboxtoFLOWchart#name#max% {\nextboxtoFLOWchart{#name}{#max}\hbox} \unexpanded\def\vboxtoFLOWchart#name#max% {\nextboxtoFLOWchart{#name}{#max}\vbox} \protect \continueifinputfile{m-nodechart.mkvi} \definecolor[nodechart:glyph][darkred] \setupbodyfont[dejavu,10pt] \starttext \startTEXpage[offset=10pt] \hboxtoFLOWchart{dummy}{3}{an affil\discretionary{-}{-}{!}iation} \FLOWchart[dummy][width=14em,height=3em,dx=1em,dy=.75em,hcompact=yes] \stopTEXpage \startTEXpage[offset=10pt] \hboxtoFLOWchart{dummy}{3}{an affiliation} \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,hcompact=yes] \stopTEXpage \startTEXpage[offset=10pt] \hboxtoFLOWchart{dummy}{3}{\nl effe fijn fietsen} \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,hcompact=yes] \stopTEXpage \startTEXpage[offset=10pt] \hboxtoFLOWchart{dummy}{3}{\righttoleft t\kern 1pt est} \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,hcompact=yes] \stopTEXpage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/l-dir.lua0000644000175000017500000003265212134352503023411 0ustar norbertnorbertif not modules then modules = { } end modules ['l-dir'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- dir.expandname will be merged with cleanpath and collapsepath local type, select = type, select local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub local concat, insert, remove, unpack = table.concat, table.insert, table.remove, table.unpack local lpegmatch = lpeg.match local P, S, R, C, Cc, Cs, Ct, Cv, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct, lpeg.Cv, lpeg.V dir = dir or { } local dir = dir local lfs = lfs local attributes = lfs.attributes local walkdir = lfs.dir local isdir = lfs.isdir local isfile = lfs.isfile local currentdir = lfs.currentdir local chdir = lfs.chdir -- in case we load outside luatex if not isdir then function isdir(name) local a = attributes(name) return a and a.mode == "directory" end lfs.isdir = isdir end if not isfile then function isfile(name) local a = attributes(name) return a and a.mode == "file" end lfs.isfile = isfile end -- handy function dir.current() return (gsub(currentdir(),"\\","/")) end -- optimizing for no find (*) does not save time --~ local function globpattern(path,patt,recurse,action) -- fails in recent luatex due to some change in lfs --~ local ok, scanner --~ if path == "/" then --~ ok, scanner = xpcall(function() return walkdir(path..".") end, function() end) -- kepler safe --~ else --~ ok, scanner = xpcall(function() return walkdir(path) end, function() end) -- kepler safe --~ end --~ if ok and type(scanner) == "function" then --~ if not find(path,"/$") then path = path .. '/' end --~ for name in scanner do --~ local full = path .. name --~ local mode = attributes(full,'mode') --~ if mode == 'file' then --~ if find(full,patt) then --~ action(full) --~ end --~ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then --~ globpattern(full,patt,recurse,action) --~ end --~ end --~ end --~ end local lfsisdir = isdir local function isdir(path) path = gsub(path,"[/\\]+$","") return lfsisdir(path) end lfs.isdir = isdir local function globpattern(path,patt,recurse,action) if path == "/" then path = path .. "." elseif not find(path,"/$") then path = path .. '/' end if isdir(path) then -- lfs.isdir does not like trailing / for name in walkdir(path) do -- lfs.dir accepts trailing / local full = path .. name local mode = attributes(full,'mode') if mode == 'file' then if find(full,patt) then action(full) end elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then globpattern(full,patt,recurse,action) end end end end dir.globpattern = globpattern local function collectpattern(path,patt,recurse,result) local ok, scanner result = result or { } if path == "/" then ok, scanner, first = xpcall(function() return walkdir(path..".") end, function() end) -- kepler safe else ok, scanner, first = xpcall(function() return walkdir(path) end, function() end) -- kepler safe end if ok and type(scanner) == "function" then if not find(path,"/$") then path = path .. '/' end for name in scanner, first do local full = path .. name local attr = attributes(full) local mode = attr.mode if mode == 'file' then if find(full,patt) then result[name] = attr end elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then attr.list = collectpattern(full,patt,recurse) result[name] = attr end end end return result end dir.collectpattern = collectpattern local pattern = Ct { [1] = (C(P(".") + P("/")^1) + C(R("az","AZ") * P(":") * P("/")^0) + Cc("./")) * V(2) * V(3), [2] = C(((1-S("*?/"))^0 * P("/"))^0), [3] = C(P(1)^0) } local filter = Cs ( ( P("**") / ".*" + P("*") / "[^/]*" + P("?") / "[^/]" + P(".") / "%%." + P("+") / "%%+" + P("-") / "%%-" + P(1) )^0 ) local function glob(str,t) if type(t) == "function" then if type(str) == "table" then for s=1,#str do glob(str[s],t) end elseif isfile(str) then t(str) else local split = lpegmatch(pattern,str) -- we could use the file splitter if split then local root, path, base = split[1], split[2], split[3] local recurse = find(base,"%*%*") local start = root .. path local result = lpegmatch(filter,start .. base) globpattern(start,result,recurse,t) end end else if type(str) == "table" then local t = t or { } for s=1,#str do glob(str[s],t) end return t elseif isfile(str) then if t then t[#t+1] = str return t else return { str } end else local split = lpegmatch(pattern,str) -- we could use the file splitter if split then local t = t or { } local action = action or function(name) t[#t+1] = name end local root, path, base = split[1], split[2], split[3] local recurse = find(base,"%*%*") local start = root .. path local result = lpegmatch(filter,start .. base) globpattern(start,result,recurse,action) return t else return { } end end end end dir.glob = glob --~ list = dir.glob("**/*.tif") --~ list = dir.glob("/**/*.tif") --~ list = dir.glob("./**/*.tif") --~ list = dir.glob("oeps/**/*.tif") --~ list = dir.glob("/oeps/**/*.tif") local function globfiles(path,recurse,func,files) -- func == pattern or function if type(func) == "string" then local s = func func = function(name) return find(name,s) end end files = files or { } local noffiles = #files for name in walkdir(path) do if find(name,"^%.") then --- skip else local mode = attributes(name,'mode') if mode == "directory" then if recurse then globfiles(path .. "/" .. name,recurse,func,files) end elseif mode == "file" then if not func or func(name) then noffiles = noffiles + 1 files[noffiles] = path .. "/" .. name end end end end return files end dir.globfiles = globfiles -- t = dir.glob("c:/data/develop/context/sources/**/????-*.tex") -- t = dir.glob("c:/data/develop/tex/texmf/**/*.tex") -- t = dir.glob("c:/data/develop/context/texmf/**/*.tex") -- t = dir.glob("f:/minimal/tex/**/*") -- print(dir.ls("f:/minimal/tex/**/*")) -- print(dir.ls("*.tex")) function dir.ls(pattern) return concat(glob(pattern),"\n") end --~ mkdirs("temp") --~ mkdirs("a/b/c") --~ mkdirs(".","/a/b/c") --~ mkdirs("a","b","c") local make_indeed = true -- false local onwindows = os.type == "windows" or find(os.getenv("PATH"),";") if onwindows then function dir.mkdirs(...) local str, pth = "", "" for i=1,select("#",...) do local s = select(i,...) if s == "" then -- skip elseif str == "" then str = s else str = str .. "/" .. s end end local first, middle, last local drive = false first, middle, last = match(str,"^(//)(//*)(.*)$") if first then -- empty network path == local path else first, last = match(str,"^(//)/*(.-)$") if first then middle, last = match(str,"([^/]+)/+(.-)$") if middle then pth = "//" .. middle else pth = "//" .. last last = "" end else first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$") if first then pth, drive = first .. middle, true else middle, last = match(str,"^(/*)(.-)$") if not middle then last = str end end end end for s in gmatch(last,"[^/]+") do if pth == "" then pth = s elseif drive then pth, drive = pth .. s, false else pth = pth .. "/" .. s end if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end return pth, (isdir(pth) == true) end --~ print(dir.mkdirs("","","a","c")) --~ print(dir.mkdirs("a")) --~ print(dir.mkdirs("a:")) --~ print(dir.mkdirs("a:/b/c")) --~ print(dir.mkdirs("a:b/c")) --~ print(dir.mkdirs("a:/bbb/c")) --~ print(dir.mkdirs("/a/b/c")) --~ print(dir.mkdirs("/aaa/b/c")) --~ print(dir.mkdirs("//a/b/c")) --~ print(dir.mkdirs("///a/b/c")) --~ print(dir.mkdirs("a/bbb//ccc/")) else function dir.mkdirs(...) local str, pth = "", "" for i=1,select("#",...) do local s = select(i,...) if s and s ~= "" then -- we catch nil and false if str ~= "" then str = str .. "/" .. s else str = s end end end str = gsub(str,"/+","/") if find(str,"^/") then pth = "/" for s in gmatch(str,"[^/]+") do local first = (pth == "/") if first then pth = pth .. s else pth = pth .. "/" .. s end if make_indeed and not first and not isdir(pth) then lfs.mkdir(pth) end end else pth = "." for s in gmatch(str,"[^/]+") do pth = pth .. "/" .. s if make_indeed and not isdir(pth) then lfs.mkdir(pth) end end end return pth, (isdir(pth) == true) end --~ print(dir.mkdirs("","","a","c")) --~ print(dir.mkdirs("a")) --~ print(dir.mkdirs("/a/b/c")) --~ print(dir.mkdirs("/aaa/b/c")) --~ print(dir.mkdirs("//a/b/c")) --~ print(dir.mkdirs("///a/b/c")) --~ print(dir.mkdirs("a/bbb//ccc/")) end dir.makedirs = dir.mkdirs -- we can only define it here as it uses dir.current if onwindows then function dir.expandname(str) -- will be merged with cleanpath and collapsepath local first, nothing, last = match(str,"^(//)(//*)(.*)$") if first then first = dir.current() .. "/" -- dir.current sanitizes end if not first then first, last = match(str,"^(//)/*(.*)$") end if not first then first, last = match(str,"^([a-zA-Z]:)(.*)$") if first and not find(last,"^/") then local d = currentdir() if chdir(first) then first = dir.current() end chdir(d) end end if not first then first, last = dir.current(), str end last = gsub(last,"//","/") last = gsub(last,"/%./","/") last = gsub(last,"^/*","") first = gsub(first,"/*$","") if last == "" or last == "." then return first else return first .. "/" .. last end end else function dir.expandname(str) -- will be merged with cleanpath and collapsepath if not find(str,"^/") then str = currentdir() .. "/" .. str end str = gsub(str,"//","/") str = gsub(str,"/%./","/") str = gsub(str,"(.)/%.$","%1") return str end end file.expandname = dir.expandname -- for convenience local stack = { } function dir.push(newdir) insert(stack,currentdir()) if newdir and newdir ~= "" then chdir(newdir) end end function dir.pop() local d = remove(stack) if d then chdir(d) end return d end local function found(...) -- can have nil entries for i=1,select("#",...) do local path = select(i,...) local kind = type(path) if kind == "string" then if isdir(path) then return path end elseif kind == "table" then -- here we asume no holes, i.e. an indexed table local path = found(unpack(path)) if path then return path end end end -- return nil -- if we want print("crappath") to show something end dir.found = found context-2013.05.28.20130704/texmf-dist/tex/context/base/node-ext.lua0000644000175000017500000000150312130411274024111 0ustar norbertnorbertif not modules then modules = { } end modules ['node-ext'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

Serializing nodes can be handy for tracing. Also, saving and loading node lists can come in handy as soon we are going to use external applications to process node lists.

--ldx]]-- function nodes.show(stack) -- logs.writer(table.serialize(stack)) end function nodes.save(stack,name) -- *.ltn : luatex node file -- if name then -- file.savedata(name,table.serialize(stack)) -- else -- logs.writer(table.serialize(stack)) -- end end function nodes.load(name) -- return file.loaddata(name) -- -- todo end context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-nop.mkiv0000644000175000017500000000100512130411274024305 0ustar norbertnorbert%D \module %D [ file=cont-nop, %D version=2012.06.01, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=Startup Dummy, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \writestatus\m!system{loading dummy replacement for jobname} \protect \finishjob \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-lua.lua0000644000175000017500000000210212130411274024106 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-lua'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if lua then do local delayed = { } function lua.flushdelayed(...) local t = delayed delayed = { } for i=1, #t do t[i](...) end end function lua.delay(f) delayed[#delayed+1] = f end function lua.flush(...) context.directlua("lua.flushdelayed(%,t)",{...}) end end end -- See mk.pdf for an explanation of the following code: -- -- function test(n) -- lua.delay(function(...) -- context("pi: %s %s %s",...) -- context.par() -- end) -- lua.delay(function(...) -- context("more pi: %s %s %s",...) -- context.par() -- end) -- context("\\setbox0=\\hbox{%s}",math.pi*n) -- local box = tex.box[0] -- lua.flush(box.width,box.height,box.depth) -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-tbl.mkii0000644000175000017500000013114111754241457024260 0ustar norbertnorbert%D \module %D [ file=core-tbl, %D version=1998.11.03, %D title=\CONTEXT\ Table Macros, %D subtitle=Text Flow Tabulation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Tabulation} % \processbetween gebruiken in head/tail macros \unprotect % WATCH OUT: don't change this model else trialtypesetting % compatibility problems % watch out, cells expand pretty late on a per row basis % |p2|p3| 2:3 % spanning % Be careful with changing the hsize calculation in p mode; % the following code works quite well: % % \setupfield [line][location=low,height=1.2\lineheight,width=\hsize] % \definefield [test] [line] [line] [] % % \starttabulate[|l|p|] % \NC test \NC \field [test] \NC \NR % \stoptabulate % In-text tabbing environment % % \starttabulate[| separated template] % eg [|l|p|] or [|l|p|p|] % \NC ... \NC ... \NC\NR % \stoptabulate % % with: two pass auto width calculation when no p-width % specified, even with multiple p's, see examples. % TaBlE compatible specifications: % % l align column/paragraph left % r align column/paragraph right % c align column/paragraph center % p p(dimen) of automatisch als alleen p % w column width % f font#1 % B bold % I italic % S slanted % T type % R roman % m math % M display math % h hook (inner level or par lines) % b before (may be command#1) % a after % i i skip left of column % j i skip right of column % k i skip around column % s setups % g g{char} align at char % . align at . % , align at , % Still to be done % N math numbers (best hook into existing digits mechanism) % n numbers (best hook into existing digits mechanism) % Q math numbers (best hook into existing digits mechanism) % q numbers (best hook into existing digits mechanism) % ~ \hskip.5em % | check % nesting % 10 evt auto stack; dan wel andere signal dan void nodig % present but not yet 100% ok % % \FL top hrule % \ML mid hrule (with auto split) % \LL bottom hrule % \HL % \VL as soon as needed % color as soon as needed % \EQ \RQ \HQ equal (raw, hook) % \NC \RC \HC normal (raw, hook) % % \NR % \HR : rule with lineheight % \autotabulaterule : with lineheight, not first/last % \autotabulateline : spaced, not first/last % \tabulaterule : with lineheight % \tabulateline : spaced % tricky: align scans ahead, over # and expands ones before % while doing % new: % % \starttabulate[|cg{.}|cg{,}|cg{,}|] % \NC period \NC comma \NC comma \NC\NR % \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR % \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \stoptabulate % % \starttabulate[|c.|c,|c,|] % \NC period \NC comma \NC comma \NC\NR % \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR % \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \stoptabulate % nice demo (for BG) % % \starttabulate[|r|b{$\star$}|ra{\percent}|b{=}|r|] % \NC 500 \NC \NC 60 \NC \NC 300 \NC \NR % \NC 500 \NC \NC 55 \NC \NC 275 \NC \NR % \NC 500 \NC \NC 50 \NC \NC 250 \NC \NR % \NC 500 \NC \NC 45 \NC \NC 225 \NC \NR % \NC 500 \NC \NC 40 \NC \NC 200 \NC \NR % \NC 500 \NC \NC 35 \NC \NC 175 \NC \NR % \NC 500 \NC \NC 30 \NC \NC 150 \NC \NR % \NC 500 \NC \NC 25 \NC \NC 125 \NC \NR % \NC 500 \NC \NC 20 \NC \NC 100 \NC \NR % \stoptabulate \newtoks \tabulatepreamble \newtoks \tabulatebefore \newtoks \tabulateafter \newtoks \tabulatebmath \newtoks \tabulateemath \newtoks \tabulatefont \newtoks \tabulatesettings \newtoks \tabulatedummy \newcount \nofautotabulate \newcount \tabulatecolumns \newcount \tabulatecolumn \newcount \tabulateminplines \newcount \tabulatemaxplines \newif \ifautotabulate \newif \ifsplittabulate \splittabulatetrue \newif \ifhandletabulatepbreak \handletabulatepbreaktrue \newif \iftabulatenopbreak \tabulatenopbreakfalse \newif \iftabulateequal \newif \iftracetabulate \newif \ifframedtabulate \newdimen \tabulatepwidth \newdimen \tabulatewidth \newdimen \tabulateunit \newdimen \tabulatemaxpheight \newbox \tabulatebox % [|lg{.}|] => \NG 12.34 \NC \gdef\handletabulatecharalign#1 % space delimited ! {\edef\alignmentclass{\the\tabulatecolumn}% \edef\alignmentcharacter{\getvalue{\@@tabalign@@\the\tabulatecolumn}}% \ifcase\tabulatepass\or \setfirstpasscharacteralign\checkalignment{#1}% \fi % force hsize \setsecondpasscharacteralign\checkalignment{#1}} \def\noftabcolumns{16} \def\@@tabbox@@ {@@tabbox@} \def\@@tabhook@@ {@@tabhook@} \def\@@tabalign@@ {@@tabalign@} \def\@@tabsetups@@{@@tabsetups@} % \dorecurse\noftabcolumns % quick and dirty stack % {\@EA\newbox\csname\@@tabbox@@\recurselevel\endcsname} \def\tablebox#1% {\csname\@@tabbox@@\number#1\endcsname} % \def\checktablebox#1% % {\ifundefinedelse{\@@tabbox@@\number#1}% % \expandafter\newbox\csname\@@tabbox@@\number#1\endcsname % \fi} \def\initializetablebox#1% also used elsewhere {\ifcsname\@@tabbox@@\number#1\endcsname \global\setbox\csname\@@tabbox@@\number#1\endcsname\emptybox \else \expandafter\newbox\csname\@@tabbox@@\number#1\endcsname \fi} % \def\initializetableboxes#1% hm, not that efficient, best make a simple dedicated tail recurser % {\dorecurse#1{\initializetablebox\recurselevel}} \def\initializetableboxes#1% {\scratchcounter#1\relax \doinitializetableboxes} \def\doinitializetableboxes {\ifnum\scratchcounter>\zerocount \initializetablebox\scratchcounter \advance\scratchcounter\minusone \expandafter\doinitializetableboxes \fi} \initializetableboxes\noftabcolumns \def\dotabulatenobreak {\noalign {\nobreak \iftracetabulate \red\hrule\!!height.5\linewidth\!!depth.5\linewidth \par \kern-\linewidth \nobreak \fi}} \let\notabulatehook\empty \def\checktabulatehook {\ifnum\tabulatetype<\plustwo \global\let\tabulatehook\notabulatehook \else \global\let\tabulatehook\dotabulatehook \fi} \def\checktabulatesetups {\getvalue{\@@tabsetups@@\the\tabulatecolumn}} \let\pretabrule \donothing \let\posttabrule\donothing \def\dodosettabulatepreamble#1#2% {\ifzeropt\tabulatewidth \ifcase\tabulatemodus\relax \let\preamblebox\empty \else \def\preamblebox{\autotabulatetrue}% \fi \else \ifcase\tabulatemodus\relax \edef\preamblebox{\hbox to \the\tabulatewidth}% \else \edef\preamblebox{\hsize\the\tabulatewidth}% \fi \fi % % less bytes % %\edef\preamblebox% % {\ifcase\tabulatewidth % \ifcase\tabulatemodus\relax\else\noexpand\autotabulatetrue\fi % \els % \ifcase\tabulatemodus\relax\hbox to\else\hsize\fi\the\tabulatewidth % \fi}% % % 0 = NC column next EQ equal column % 1 = RC column raw RQ equal column raw % 2 = HC column hook HQ equal column hook % some entries can be left out if we test for them being set \@EA\appendtoks \@EA&\@EA\hskip\pretabskip\pretabrule##&\to\!!toksa \appendtoks \ignorespaces\to\!!toksa \@EA\appendtoks\@EA\global\@EA\tabulatecolumn\the\tabulatecolumns\relax\to\!!toksa \appendtoks \checktabulatesetups\to\!!toksa \appendtoks \checktabulatehook\to\!!toksa \@EA\appendtoks \preamblebox\to\!!toksa \appendtoks \bgroup\bbskip\bgroup#1\to\!!toksa \appendtoks\ifnum\tabulatetype=\plusone \else \to\!!toksa \@EA\appendtoks \the\tabulatebmath\to\!!toksa \@EA\appendtoks \the\tabulatefont\to\!!toksa \@EA\appendtoks \the\tabulatesettings\to\!!toksa \@EA\appendtoks \the\tabulatebefore\to\!!toksa \appendtoks\fi \to\!!toksa \appendtoks \bgroup\ignorespaces\to\!!toksa % \appendtoks \tabulatehook##\to\!!toksa % %%\doifdefinedelse{\@@tabalign@@\tabulatecolumns} %\doifdefinedelse{\@@tabalign@@\the\tabulatecolumns} % {\appendtoks\handletabulatecharalign## \to\!!toksa} % {\appendtoks\tabulatehook ##\to \!!toksa}% % waarom kan ik hier geen \xx{##} geven, om een of % andere reden passeert dan tex de hele regel (incl \NC's) % als argument; elke delimiter <> space gaat trouwens fout \appendtoks \unskip\unskip\ifmmode\else\endgraf\fi\egroup\to\!!toksa \appendtoks\ifnum\tabulatetype=1 \else \to\!!toksa \@EA\appendtoks \the\tabulateafter\to\!!toksa \@EA\appendtoks \the\tabulateemath\to\!!toksa \appendtoks\fi \to\!!toksa \appendtoks #2\egroup\egroup\to\!!toksa \@EA\appendtoks \@EA&\@EA\posttabrule\@EA\hskip\postabskip##\to\!!toksa \appendtoks\NC\to\tabulatedummy \let\bbskip\empty \def\pretabskip{.5\tabulateunit}% \let\postabskip\pretabskip \let\gettabulateexit\dogettabulateexit \tabulatewidth\zeropoint} % todo: we can speed up this module a bit % % \expanded{\!!toksa{\the\!!toksa % &\hskip\pretabskip\noexpand\pretabrule####& % \ignorespaces % \global\tabulatecolumn\the\tabulatecolumns % \noexpand\checktabulatesetups % \noexpand\checktabulatehook % \preamblebox % \bgroup\noexpand\bbskip\bgroup\normalunexpanded{#1}% % \noexpand\ifnum\tabulatetype=\plusone \noexpand\else % \the\tabulatebmath % \the\tabulatefont % \the\tabulatesettings % \the\tabulatebefore % \noexpand\fi % \bgroup\ignorespaces % \noexpand\tabulatehook####% % \unskip\unskip\noexpand\ifmmode\noexpand\else\endgraf\noexpand\fi\egroup % \noexpand\ifnum\noexpand\tabulatetype=1 \noexpand\else % \the\tabulateafter % \the\tabulateemath % \noexpand\fi % \normalunexpanded{#2}\egroup\egroup % &\noexpand\posttabrule\hskip\noexpand\postabskip####}}% \def\dosettabulatepreamble {\ifx\next\relax \let\nextnext\relax % == \expandafter\gobbleoneargument \else \let\nextnext\settabulatepreamble \ifx x\next \let\tabulatealign\zerocount % internal \else\ifx l\next \let\tabulatealign\plusone \else\ifx r\next \let\tabulatealign\plustwo \else\ifx c\next \let\tabulatealign\plusthree \else\ifx p\next \let\nextnext\gettabulateparagraph \else\ifx s\next \let\nextnext\gettabulatesetups \else\ifx w\next \let\nextnext\gettabulatewidth \else\ifx f\next \let\nextnext\gettabulatefont \else\ifx B\next \tabulatefont{\bf}% \else\ifx I\next \tabulatefont{\it}% \else\ifx S\next \tabulatefont{\sl}% \else\ifx T\next \tabulatefont{\tt}% \else\ifx R\next \tabulatefont{\rm}% \else\ifx m\next \tabulatebmath{$}\tabulateemath{$}% \else\ifx M\next \tabulatebmath{$\displaystyle}\tabulateemath{$}% \else\ifx h\next \let\nextnext\gettabulatehook \else\ifx b\next \let\nextnext\gettabulatebefore \else\ifx a\next \let\nextnext\gettabulateafter \else\ifx i\next \let\nextnext\gettabulatepreskip \else\ifx j\next \let\nextnext\gettabulateposskip \else\ifx k\next \let\nextnext\gettabulatepreposskip \else\ifx X\next \let\nextnext\gettabulateexit % internal \else\ifx e\next \appendtoks\global\tabulateequaltrue\to\tabulatesettings \else\ifx ~\next \appendtoks\fixedspaces\to\tabulatesettings \else\ifx g\next \let\nextnext\gettabulatealign \else\ifx .\next \def\nextnext{\gettabulatealign.}% \else\ifx ,\next \def\nextnext{\gettabulatealign,}% \else \message{unknown preamble key [\meaning\next]}% \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi \fi \nextnext} \def\dogettabulateexit {\let\postabskip\!!zeropoint \settabulatepreamble} \let\gettabulateexit\dogettabulateexit \def\gettabulatepreskip#1% {\doifnumberelse{#1} {\scratchdimen#1\tabulateunit\let\next\empty} {\scratchdimen.5\tabulateunit\def\next{#1}}% \edef\pretabskip{\the\scratchdimen}% \@EA\settabulatepreamble\next} \def\gettabulateposskip#1% {\doifnumberelse{#1} {\scratchdimen#1\tabulateunit\let\next\empty} {\scratchdimen.5\tabulateunit\def\next{#1}}% \edef\postabskip{\the\scratchdimen}% \let\gettabulateexit\settabulatepreamble \@EA\settabulatepreamble\next} \def\gettabulatepreposskip#1% {\doifnumberelse{#1} {\scratchdimen#1\tabulateunit\let\next\empty} {\scratchdimen.5\tabulateunit\def\next{#1}}% \edef\pretabskip{\the\scratchdimen}% \let\postabskip\pretabskip \let\gettabulateexit\settabulatepreamble \@EA\settabulatepreamble\next} \def\gettabulatesetups#1% {\setvalue{\@@tabsetups@@\the\tabulatecolumns}{\setups[#1]}% \settabulatepreamble} \def\gettabulatehook#1% {\setvalue{\@@tabhook@@\the\tabulatecolumns}{#1}% \settabulatepreamble} \def\gettabulatealign#1% {\setvalue{\@@tabalign@@\the\tabulatecolumns}{#1}% \settabulatepreamble} \def\gettabulatebefore#1% {\tabulatebefore{#1}% \settabulatepreamble} \def\gettabulateafter#1% {\tabulateafter{#1}% \settabulatepreamble} \def\gettabulatefont#1% {\tabulatefont{#1}% \settabulatepreamble} \def\gettabulatewidth {\let\tabulatemodus\zerocount \let\tabulatedimen\zerocount \doifnextcharelse(\dogettabulatewidth\settabulatepreamble} \def\gettabulateparagraph {\doifnextcharelse{(} {\let\tabulatemodus\plusone \let\tabulatedimen\plusone \dogettabulatewidth} {\let\tabulatemodus\plustwo \let\tabulatedimen\zerocount \settabulatepreamble}} % \def\dogettabulatewidth(#1)% % {\tabulatewidth#1\relax % \ifnum\tabulatedimen=\plusone % \global\advance\tabulatepwidth\tabulatewidth % \fi % \settabulatepreamble} % \def\dogettabulatewidth(#1)% % {\doifelse{#1}\v!passend % {\let\tabulatemodus\plusthree} % {\tabulatewidth#1\relax}% % \ifnum\tabulatedimen=\plusone % \global\advance\tabulatepwidth\tabulatewidth % \fi % \settabulatepreamble} % \startbuffer % \toplinebox{\framed[width=3cm,height=2cm]{tufte}} % \stopbuffer % \starttabulate[|p(fixed)|p|] % \dorecurse{100}{\NC \getbuffer \NC test \par test \par \NC \NR} % \stoptabulate % \starttabulate[|p(fit)|p|] % \dorecurse{100}{\NC \getbuffer \NC test \par test \par \NC \NR} % \stoptabulate \def\dogettabulatewidth(#1)% {\processallactionsinset [#1]% [ \v!fit=>\let\tabulatemodus\plusthree, \v!fixed=>\let\tabulatemodus\plusthree \tabulatenopbreaktrue, \s!unknown=>\tabulatewidth#1\relax]% \ifnum\tabulatedimen=\plusone \global\advance\tabulatepwidth\tabulatewidth \fi \settabulatepreamble} \def\settabulatepreamble {\afterassignment\dosettabulatepreamble\let\next=} \def\tabulateraggedright {\ifnum\tabulatetype=\plusone \else\raggedright \fi} \def\tabulateraggedcenter{\ifnum\tabulatetype=\plusone \else\raggedcenter\fi} \def\tabulateraggedleft {\ifnum\tabulatetype=\plusone \else\raggedleft \fi} \def\tabulatenotragged {\ifnum\tabulatetype=\plusone \else\notragged \fi} \def\tabulatehss {\ifnum\tabulatetype=\plusone \else\hss \fi} % never change this to a fill \bgroup \catcode`\|=\@@other \gdef\nexttabulate#1|% {\let\tabulatealign\@@tabulatealign \let\tabulatemodus\zerocount \let\tabulatedimen\zerocount \tabulatebefore \emptytoks \tabulateafter \emptytoks \tabulatebmath \emptytoks \tabulateemath \emptytoks \tabulatefont \emptytoks \tabulatesettings\emptytoks \global\advance\tabulatecolumns\plusone \letvalue{\@@tabsetups@@\the\tabulatecolumns}\donothing \settabulatepreamble#1\relax\relax % permits i without n \ifcase\tabulatemodus\relax \ifcase\tabulatealign\relax \dodosettabulatepreamble\empty \tabulatehss \or \dodosettabulatepreamble\empty \tabulatehss \or \dodosettabulatepreamble\tabulatehss\empty \or \dodosettabulatepreamble\tabulatehss\tabulatehss \fi \or % fixed width \ifcase\tabulatealign\relax \dodosettabulatepreamble \bskip \eskip \or \dodosettabulatepreamble{\bskip\tabulateraggedright }\eskip \or \dodosettabulatepreamble{\bskip\tabulateraggedleft }\eskip \or \dodosettabulatepreamble{\bskip\tabulateraggedcenter}\eskip \fi \or % auto width \global\advance\nofautotabulate\plusone \ifcase\tabulatealign\relax \dodosettabulatepreamble \bskip \eskip \or \dodosettabulatepreamble{\bskip\tabulateraggedright }\eskip \or \dodosettabulatepreamble{\bskip\tabulateraggedleft }\eskip \or \dodosettabulatepreamble{\bskip\tabulateraggedcenter}\eskip \fi \or % simple \dodosettabulatepreamble \xbskip \xeskip \fi \futurelet\next\donexttabulate} \egroup \def\donexttabulate {\ifx\next\relax\else \expandafter\nexttabulate \fi} \def\splitofftabulatebox % overloaded in anch-pgr {\dontcomplain \global\setbox\tabulatebox % % % global ? % % % \vsplit\tablebox\tabulatecolumn to \lineheight \setbox\tabulatebox\normalvbox {\unvbox\tabulatebox}% \setbox\tabulatebox\hbox to \wd\tabulatebox {\hss\dotabulatehook{\box\tabulatebox}\hss}% \ht\tabulatebox\strutht \dp\tabulatebox\strutdp \box\tabulatebox} \def\dotabulatehook {\getvalue{\@@tabhook@@ \the\tabulatecolumn}} \def\dotabulatealign {\getvalue{\@@tabalign@@ \the\tabulatecolumn}} \def\resettabulatepheight {\global\tabulateminplines\plusone \getnoflines\tabulatemaxpheight \global\tabulatemaxplines\noflines \global\tabulatemaxpheight\zeropoint} \def\settabulatepheight {\scratchdimen\ht\tablebox\tabulatecolumn\relax \ifdim\scratchdimen>\tabulatemaxpheight \global\tabulatemaxpheight\scratchdimen \fi} \def\handletabulatepbreak {\TABLEnoalign {\ifhandletabulatepbreak \iftabulatenopbreak \dotabulatenobreak \else\ifnum\tabulatemaxplines>\plusone \ifnum\tabulateminplines=\plusone \dotabulatenobreak \fi \global\advance\tabulateminplines\plusone \ifnum\tabulateminplines=\tabulatemaxplines\relax \dotabulatenobreak \fi \fi \fi \fi}} %D \startbuffer %D \starttabulate[|c|p|p|] %D \NC \bf Alpha \NC \bf Beta \NC \bf Gamma \NC\NR %D \NC 1 \NC right indeed \NC definitely wrong \NC\NR %D \NC 2 \NC \thinrules[n=3] \NC \thinrules[n=3] \NC\NR %D \NC 3 \NC oh yes \NC simply no \NC\NR %D \NC 4 \NC very true \NC as false as can be \NC\NR %D \NC 5 \NC \thinrules[n=5] \NC \thinrules[n=5] \NC\NR %D \NC 6 \NC \thinrules[n=3] \NC \thinrules[n=4] \NC\NR %D \stoptabulate %D \stopbuffer %D %D \typebuffer {\tracetabulatetrue\getbuffer} %D %D \startbuffer %D \starttabulate[|c|p|p|] %D \NC \bf Alpha \NC \bf Beta \NC \bf Gamma \NC\NR %D \NC 1 \NC right indeed \NC definitely wrong \NC\NR %D \NC 2 \NC oh yes \NC simply no \NC\NR %D \NC 3 \NC very true \NC as false as can be \NC\NR %D \NC 4 \NC the whole truth \NC but the truth \NC\NR %D \stoptabulate %D \stopbuffer %D %D \typebuffer {\tracetabulatetrue\getbuffer} % \definetabulate % \redefinetabulate % \starttabulate[preamble] % \starttabulate -> \starttabulate[|l|p|] \bgroup \catcode`\|=\@@other \gdef\definetabulate {\dotripleempty\dodefinetabulate} \gdef\dodefinetabulate[#1][#2][#3]% {\ifthirdargument \doifundefined{\??tt#1::\c!unit} {\copyparameters [\??tt#1::][\??tt\v!tabulate::]% [\c!frame,\c!distance,\c!unit,\c!before,\c!bodyfont,\c!after, \c!inner,\c!indenting,\c!margin,\c!align,\c!header,\c!title, \c!rulecolor,\c!rulethickness,\c!split,EQ]}% \copyparameters [\??tt#1::#2][\??tt#1::]% [\c!unit,\c!distance,\c!before,\c!bodyfont,\c!after, \c!inner,\c!indenting,\c!frame,\c!split,\c!header,\c!title, \c!margin,\c!align,\c!rulecolor,\c!rulethickness,EQ]% \setvalue{\e!start#1::#2}{\dofinalstarttabulate[#1][#2][#3]}% \setvalue{\e!start#1}{\bgroup\dosubstarttabulate[#1]}% \letvalue{\??tt#1-\v!header}\empty \letvalue{\??tt#1-\v!footer }\empty \else\ifsecondargument \definetabulate[#1][][#2]% \else \definetabulate[#1][][|l|p|]% \fi\fi} \egroup \let\tabulateheadcontent\empty \let\tabulatetailcontent\empty \newconditional\tabulatesomeamble \def\checkfulltabulatecontent % - needed, else confusion with \c!header {\ifundefined{\??tt\currenttabulate-\v!header}% \let\tabulateheadcontent\empty \else \def\tabulateheadcontent {\TABLEnoalign{\global\settrue\tabulatesomeamble}% \csname\??tt\currenttabulate-\v!header\endcsname \TABLEnoalign{\global\setfalse\tabulatesomeamble}}% \fi \ifundefined{\??tt\currenttabulate-\v!footer}% \let\tabulatetailcontent\empty \else \def\tabulatetailcontent {\TABLEnoalign{\global\settrue\tabulatesomeamble}% \csname\??tt\currenttabulate-\v!footer\endcsname \TABLEnoalign{\global\setfalse\tabulatesomeamble}}% \fi} % \def\fulltabulatecontent % {\tabulateheadcontent % \tabulatecontent % \tabulatetailcontent} \def\fulltabulatecontent {\tabulateheadcontent \tabulatecontent \tabulatetailcontent \removefunnytabulateline} \def\removefunnytabulateline {\ifhmode \strut\crcr \TABLEnoalign{\kern-\lineheight}% \fi} \setvalue{\e!start\v!tabulatehead}% {\dosingleempty\dostartstarttabulatehead} \def\dostartstarttabulatehead[#1]% {\processcontent{\e!stop\v!tabulatehead}\next {\letvalue{\??tt\iffirstargument#1\else\v!tabulate\fi::-\v!header}\next}} \setvalue{\e!start\v!tabulatetail}% {\dosingleempty\dostartstarttabulatetail} \def\dostartstarttabulatetail[#1]% {\processcontent{\e!stop\v!tabulatetail}\next {\letvalue{\??tt\iffirstargument#1\else\v!tabulate\fi::-\v!footer}\next}} \def\dosubstarttabulate {\dodoubleempty\dodosubstarttabulate} \def\dodosubstarttabulate[#1][#2]% {\getvalue{\e!start#1::\ifundefined{\e!start#1::#2}\else#2\fi}} \setvalue{\e!start\v!tabulate}% {\bgroup\dodoubleempty\donormalstarttabulate} \bgroup \gdef\donormalstarttabulate[#1][#2]% {\ifsecondargument \getparameters[\??tt\v!tabulate::][#2]% \fi \iffirstargument \def\next{\dofinalstarttabulate[\v!tabulate][][#1]}% \else \def\next{\dofinalstarttabulate[\v!tabulate][][|l|p|]}% \fi \next} \egroup % The much neede hook: \newtoks\everytabulate % An example of its usage: \appendtoks \optimizeverbatimfalse \to \everytabulate \appendtoks \let\recodeverbatimmode\plustwo \to \everytabulate % A status variable: \chardef\tabulatepass=0 \def\tabulateparameter#1{\csname\??tt\currenttabulate#1\endcsname} \bgroup \catcode`\|=\@@other \gdef\@@otherbar{|} \catcode`\|=\@@active \gdef\@@useotherbar{\let|\@@otherbar} \egroup \def\dofinalstarttabulate[#1][#2][#3]% identifier sub preamble {\edef\currenttabulate{#1::#2}% \ifinsidefloat \else \whitespace \tabulateparameter\c!before \fi \bgroup \resetcharacteralign % todo: spacing around tabulate when bodyfont is set % expansion en test needed ? \splittabulatetrue \processaction [\tabulateparameter\c!split] [% \v!yes=>\splittabulatetrue, % \v!repeat=>\splittabulatetrue, % todo, default yes \v!no=>\splittabulatefalse, \v!auto=>\ifinsidefloat\ifinsidesplitfloat\else\splittabulatefalse\fi\fi]% \doifvaluesomething{\??tt\currenttabulate\c!bodyfont} {\expanded{\switchtobodyfont[\tabulateparameter\c!bodyfont]}}% \postponenotes % new, to be tested / will be configurable \let\tabulatepass\plusone \widowpenalty\zerocount % otherwise lines are not broken \clubpenalty \zerocount % but overlap in funny ways \the\everytabulate \tabulateparameter\c!inner \scratchdimen\leftskip \advance\scratchdimen \hangindent \doifvalue{\??tt\currenttabulate\c!indenting}\v!yes {\advance\scratchdimen \parindent}% \ctxparindent \edef\tabulateindent{\the\scratchdimen}% \!!toksb\emptytoks \def\dorepeat*##1##2% {\dorecurse{##1}{\appendtoks##2\to\!!toksb}\do}% \def\do {\futurelet\next\dodo}% \def\dodo % \@EAEAEA gebruiken {\ifx\next\relax % exit \else\ifx*\next \let\next\dorepeat \else\ifx\bgroup\next \let\next\dododo \else \let\next\dodododo \fi\fi\fi \next}% \def\dododo##1% {\appendtoks{##1}\to\!!toksb\do}% \def\dodododo##1% {\appendtoks##1\to\!!toksb\do}% \global\tabulatecolumn\zerocount % \do#3\relax \bgroup\@@useotherbar\expanded{\egroup\noexpand\do#3\relax}% \processcontent {\e!stop#1}% \currenttabulate} \tabulatecontent {\@EA\processtabulate\@EA[\the\!!toksb]}} \chardef\tabulatetype=0 % 0 = NC column next EQ equal column % 1 = RC column raw RQ equal column raw % 2 = HC column hook HQ equal column hook \newif\iftabulatefirstflushed \def\tabulateEQ {\iftabulatefirstflushed\else\tabulateparameter{EQ}\fi \global\tabulateequalfalse} % \def\tabulatenormalcolumn#1% % {&\iftabulateequal\tabulateEQ\fi&\global\chardef\tabulatetype#1&} % % \def\tabulateequalcolumn#1% % {&\tabulateEQ&\global\chardef\tabulatetype#1&} % % however, \unskip en \ignorespaces permit usage in complex XML/\starttabulate \def\tabulatenormalcolumn#1% {\unskip&\iftabulateequal\tabulateEQ\fi&\global\chardef\tabulatetype#1&% \ignorespaces} \def\tabulateequalcolumn#1% {\unskip&\tabulateEQ&\global\chardef\tabulatetype#1&% \ignorespaces} \def\tabulateautocolumn {\tabulatenormalcolumn\zerocount \ifnum\tabulatecolumn>\tabulatecolumns\relax \expandafter\NR \else \expandafter\ignorespaces % interferes with the more tricky hooks \fi} \def\setquicktabulate#1% see \startlegend \startgiven {\let#1\tabulateautocolumn \let\\\tabulateautocolumn} %\def\dotabulateruleseperator % {\vskip\strutdp} \def\dotabulateruleseperator % can be sped up {\bgroup \let\factor\!!plusone \scratchskip\strutdp \ExpandFirstAfter\processallactionsinset [\tabulateparameter\c!distance] [ \v!blank=>\scratchskip\bigskipamount, \v!depth=>\scratchskip\strutdp, \v!small=>\def\factor{.25}, \v!medium=>\def\factor{.5}, \v!big=>, \v!none=>\scratchskip\zeropoint\def\factor{0}, \v!grid=>\scratchskip\zeropoint\def\factor{0}, \s!unknown=>\scratchskip\commalistelement]% \scratchdimen\factor\scratchskip \ifconditional\tabulatesomeamble\kern\else\vskip\fi\scratchdimen % new \egroup} \def\dodotabulaterule#1% {\color [\tabulateparameter\c!rulecolor] {\scratchdimen\tabulateparameter\c!rulethickness#1}} \def\dotabulaterule {\dodotabulaterule {\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax \doifvalue{\??tt\currenttabulate\c!distance}\v!grid {\kern-\scratchdimen}}} % experimental tm-prikkels \def\dotabulatelinerule {\multispan\totaltabulatecolumns % \multispan is a plain macro % for the moment this one \strut\hskip\tabulateparameter\c!margin % neg values are ok ! \hskip\tabulateindent % new august 2003 \dodotabulaterule {\!!heighta.5\lineheight \advance\!!heighta-\strutdepth \!!deptha-\!!heighta \advance\!!deptha\scratchdimen \leaders\hrule\!!height\!!heighta\!!depth\!!deptha\hfill}% \cr} %D When set to true, no (less) break optimization is done. \newif\iftolerantTABLEbreak %D The main processing macro is large but splitting it up %D would make things less clear. \def\doregistertabulateparoptions {\iftrialtypesetting \else \registerparoptions \ifinsidefloat % that is, an unbreakable one \global\let\registertabulateparoptions\empty \else % unsafe in crossing pages, at each b... % \global\let\registertabulateparoptions\empty \fi \fi} \appendtoks \global\let\registertabulateparoptions\doregistertabulateparoptions \to \everytabulate \newtoks\everytabulaterow \appendtoks \registertabulateparoptions \to \everytabulaterow \def\flushtabulateindent {\ifnum\tabulatecolumn=\zerocount \hbox to \tabulateindent {% we now have a local hsize, and since we want to % register positional info (i.e. real hsizes) we % need to reconstitute the original hsize \advance\hsize\tabulateindent % this is indeed rather messy and took a few hours % to dis/uncover \the\everytabulaterow \hss}% \fi} \def\totaltabulatecolumns{0} \def\handletabulatedigits{\digits} %D Beware, we cannot use \type {\unexpanded} on \type {\HL} %D cum suis, since \TEX's hard coded noalign lookahead fails %D on it! I mistakenly added this for a while. \chardef\tabulaterepeathead\zerocount \newcount\noftabulatelines \newcount\totalnoftabulatelines \newcount\minusnoftabulatelines \setvalue{\??tt:\c!align:\v!normal}{0} \setvalue{\??tt:\c!align:\v!right }{1} \setvalue{\??tt:\c!align:\v!left }{2} \setvalue{\??tt:\c!align:\v!middle}{3} \setvalue{\??tt:\c!header:\v!repeat}{\plusone} \setvalue{\??tt:\c!header:\v!text }{\plustwo} \bgroup \catcode`\|=\@@other \newtoks\everyaftertabulaterow \gdef\processtabulate[|#1|]% in the process of optimizing {\tabulateunit\tabulateparameter\c!unit \checkfulltabulatecontent \globallet\tabulateruledepth \!!zeropoint \globallet\tabulateruleheight\!!zeropoint \edef\@@tabulatealign{\executeifdefined{\??tt:\c!align:\tabulateparameter\c!align}0}% % \ExpandFirstAfter\processaction % use \setalignmentswitch instead % [\tabulateparameter\c!align] % [ \v!normal=>\def\@@tabulatealign{0},% = default value % \v!right=>\def\@@tabulatealign{1},% chardefs gebruiken % \v!left=>\def\@@tabulatealign{2},% % \v!middle=>\def\@@tabulatealign{3},% % \s!default=>\def\@@tabulatealign{0},% % \s!unknown=>\def\@@tabulatealign{0}]% \let\pretabskip\!!zeropoint \def\postabskip{.5\tabulateunit}% \global\tabulatecolumns\zerocount \global\nofautotabulate\zerocount \global\noftabulatelines\zerocount \totalnoftabulatelines\noftabulatelines \minusnoftabulatelines\noftabulatelines \global\tabulatepwidth\zeropoint \global\tabulateequalfalse \resettabulatepheight \ifinsidesplitfloat \donetrue \else\ifinsidefloat \donefalse \else \donetrue \fi\fi \ifdone \chardef\tabulaterepeathead\executeifdefined{\??tt:\c!header:\tabulateparameter\c!header}\zerocount % \processaction % [\tabulateparameter\c!header] % [\v!repeat=>\let\tabulaterepeathead\plusone, % \v!text=>\let\tabulaterepeathead\plustwo]% \fi \unexpanded \def\NC{\tabulatenormalcolumn0}% \unexpanded \def\RC{\tabulatenormalcolumn1}% \unexpanded \def\HC{\tabulatenormalcolumn2}% \unexpanded \def\EQ{\tabulateequalcolumn 0}% \unexpanded \def\RQ{\tabulateequalcolumn 1}% \unexpanded \def\HQ{\tabulateequalcolumn 2}% \unexpanded \def\NG{\NC\handletabulatecharalign}% \unexpanded \def\NN{\NC\handletabulatedigits}% new, undocumented, test first \unexpanded \def\ND{\NC\handletabulatedigits}% same, for old times sake \def\tabulaterule{\HR}% a rule with lineheight \def\tabulateline{\HL}% just a spaced rule \def\tabulateautorule{\doHR\plusone}% \def\tabulateautoline{\doHL\plusone}% \def\HR{\doHR\zerocount} \def\HL{\doHL\zerocount} \unexpanded \def\NR % next row {\global\advance\noftabulatelines\plusone \global\tabulatefirstflushedfalse \global\tabulateequalfalse \global\tabulatecolumn\zerocount \resettabulatepheight \unskip\unskip\crcr\flushtabulated \TABLEnoalign {\the\everyaftertabulaterow}% \TABLEnoalign {\iftolerantTABLEbreak\else \ifconditional\tabulatesomeamble \ifcase\tabulaterepeathead \else \allowbreak \fi \fi \ifnum\noftabulatelines=\plusone \dotabulatenobreak \else\ifnum\noftabulatelines=\minusnoftabulatelines \ifnum\tabulatemaxplines<\plustwo \dotabulatenobreak \else \allowbreak % needed with pbreak prevention \fi \else \allowbreak % needed with pbreak prevention \fi\fi \fi \global\tabulatefirstflushedfalse}}% \let\HL\empty % not needed \let\SR\NR \let\AR\NR \let\FL\empty \let\FR\NR \let\ML\empty \let\MR\NR \let\LL\empty \let\LR\NR \let\doHR\gobbleoneargument \let\doHL\gobbleoneargument \global\let\flushtabulated\empty % \let\savedbar|\let|\nexttabulate \tabskip\zeropoint \ifdim\tabulateparameter\c!margin>\zeropoint \!!toksa{&\flushtabulateindent\strut##% \tabskip\tabulateparameter\c!margin\strut &##\tabskip\zeropoint}% \else \!!toksa{&\flushtabulateindent\strut##% &##\tabskip\zeropoint}% \fi \tabulatewidth\zeropoint % |#1X|\relax \nexttabulate #1X|\relax \scratchcounter\tabulatecolumns \multiply\scratchcounter3% \advance\scratchcounter4% \edef\totaltabulatecolumns{\the\scratchcounter}% \tabulatewidth\zeropoint % \dorecurse\tabulatecolumns % can be made faster % {\doifundefinedelse{\@@tabbox@@\recurselevel} % {\expandafter\newbox\csname\@@tabbox@@\recurselevel\endcsname}% % {\global\setbox\csname\@@tabbox@@\recurselevel\endcsname\emptybox}}% \initializetableboxes\tabulatecolumns \appendtoks&##\to\!!toksa \appendtoks\global\advance\tabulatecolumn\plusone\to\!!toksa \appendtoks\NC\unskip\unskip\crcr\flushtabulated\to\tabulatedummy % no count \global\tabulatecolumn\zerocount \resettabulatepheight \def\bskip {\setbox\tabulatebox\vbox\bgroup \global\let\tabulatehook\notabulatehook}% \def\eskip {\par\egroup \global\let\tabulatehook\dotabulatehook}% \def\xbskip {\hbox\bgroup\vbox\bgroup \global\let\tabulatehook\notabulatehook}% \def\xeskip {\par\egroup\egroup \global\let\tabulatehook\dotabulatehook}% % \let|\savedbar \global\let\tabulatehook\dotabulatehook \doifvalue{\??tt\currenttabulate\c!indenting}\v!no\forgetparindent \ifinsidefloat \let\tabulateindent\!!zeropoint \else \setlocalhsize \hsize\localhsize \fi \dontcomplain \forgetall % hm, interference with \forgetparindent ^^^ probably bug, to be solved \setbox0\vbox % outside \if because of line counting {\notesenabledfalse \let\tabulateindent\!!zeropoint \trialtypesettingtrue % very important \@EA\halign\@EA{\the\!!toksa\crcr\fulltabulatecontent\crcr}}% \ifnum\nofautotabulate>\zerocount % so, even if the natural size is larger, in the final % run, we force the calculated width \tabulatewidth\hsize \advance\tabulatewidth -\wd0 \advance\tabulatewidth -\tabulatepwidth \ifnum\nofautotabulate>\zerocount \divide\tabulatewidth \nofautotabulate\relax \fi \fi \def\xbskip{\bskip}% \def\xeskip{\eskip}% \ifsplittabulate \splittopskip\strutht \global\let\flushtabulatedindeed\empty \long\def\bbskip {\ifvoid\tablebox\tabulatecolumn \ifx\flushtabulatedindeed\empty\else \setbox0\hbox \fi \fi}% \def\bskip {\ifvoid\tablebox\tabulatecolumn \global\setbox\tablebox\tabulatecolumn\vbox \bgroup \global\let\tabulatehook\notabulatehook \ifautotabulate\hsize\tabulatewidth\fi % \begstrut % interferes with pre-\pars % evt: \appendtoks\begstrut\to\everypar \ignorespaces \def\eskip {\par\egroup \settabulatepheight \global\let\tabulatehook\dotabulatehook \splitofftabulatebox}% \else \let\eskip\empty \dontcomplain \global\let\tabulatehook\dotabulatehook \expandafter\splitofftabulatebox \fi}% \gdef\flushtabulated {\TABLEnoalign % noalign % no interference ! {\global\let\flushtabulatedindeed\empty \global\tabulatecolumn\zerocount \handletabulatepbreak \dorecurse\tabulatecolumns % was: \noftabcolumns {\ifvoid\tablebox\recurselevel\else \gdef\flushtabulatedindeed{\the\tabulatedummy}% \fi}% \global\tabulatefirstflushedtrue}% \flushtabulatedindeed}% \else % tabhook op alles ? \def\bskip {\vtop\bgroup \ifautotabulate\hsize\tabulatewidth\fi % \begstrut % interferes with pre-\pars % evt: \appendtoks\begstrut\to\everypar \ignorespaces}% \def\eskip % vertical strut added august 2003 {\par\verticalstrut\vskip-\struttotal\egroup}% \fi \totalnoftabulatelines\noftabulatelines \minusnoftabulatelines\numexpr\noftabulatelines+\minusone\relax \global\noftabulatelines\zerocount \def\doHL##1% ##1 ignored {\TABLEnoalign {\csname \ifnum\noftabulatelines=\zerocount F\else \ifnum\noftabulatelines=\totalnoftabulatelines L\else M\fi\fi L\endcsname}}% \def\doHR##1% horizontal rule line (break untested) {\TABLEnoalign {\globallet\TABLEautoline\dotabulatelinerule \ifcase##1\or \ifnum\noftabulatelines=\zerocount \gdef\TABLEautoline{\TABLEnoalign{}}% \else\ifnum\noftabulatelines=\totalnoftabulatelines \gdef\TABLEautoline{\TABLEnoalign{}}% \fi\fi \fi \dotabulatenobreak}% \TABLEautoline \TABLEnoalign {\nobreak \ifx\TABLEautoline\dotabulatelinerule\kern-\lineheight\fi \ifnum\noftabulatelines=\totalnoftabulatelines \@EA\dotabulatenobreak \else \@EA\allowbreak \fi}% \TABLEautoline \TABLEnoalign {\dotabulatenobreak}}% \doifelsevalue{\??tt\currenttabulate\c!rule}\v!line {\let\HL \HR \let\tabulateautoline\tabulateautorule \let\tabulateline \tabulaterule}% {\def\HL{\doHL\zerocount}}% \def\tablebaselinecorrection {\def\dobaselinecorrection {\vskip-\prevdepth \vskip\strutdp \vskip\strutdp}% \baselinecorrection}% \def\FL{\TABLEnoalign {\ifinsidefloat\else \doifemptyvalue{\??tt\currenttabulate\c!before} % no expansion {\tablebaselinecorrection}% \fi \dotabulaterule \dotabulatenobreak \dotabulateruleseperator \prevdepth\strutdp \dotabulatenobreak}}% \def\ML{\TABLEnoalign {\dotabulateruleseperator \dotabulaterule \ifnum\noftabulatelines>\plusone \ifnum\noftabulatelines<\minusnoftabulatelines % \vskip \topskip\allowbreak \vskip-\topskip \vskip1\topskip\allowbreak\vskip-1\topskip \vskip-\tabulateparameter\c!rulethickness \dotabulaterule \fi \fi \dotabulateruleseperator}}% \def\LL{\TABLEnoalign {\dotabulatenobreak \dotabulateruleseperator \dotabulatenobreak \dotabulaterule \ifinsidefloat\else \doifemptyvalue{\??tt\currenttabulate\c!after} % no expansion {\vskip\strutdp \verticalstrut \vskip-\struttotal}% \fi}}% \let\tabulatepass\plustwo % \ifcase\tabulaterepeathead \ifinsidesplitfloat \setbox\tabulatebox\vbox \bgroup \else \startframedcontent[\tabulateparameter\c!frame]% \fi \else \setbox\tabulatebox\vbox \bgroup \fi % \@EA\halign\@EA{\the\!!toksa\crcr\fulltabulatecontent\crcr}% \prevdepth\strutdp % nog eens beter, temporary hack \doifvalue{\??tt\currenttabulate\c!distance}\v!grid {\vskip-\strutdp}% experimental tm-prikkels % \ifcase\tabulaterepeathead \ifinsidesplitfloat \egroup \splittabulatebox\tabulatebox \else \stopframedcontent \fi \else \egroup \splittabulatebox\tabulatebox \fi % \egroup \ifinsidefloat \else \tabulateparameter\c!after \fi \egroup} \egroup % \setuptabulate[split=yes,header=text,title=Vervolg van Tabel] % % % \starttabulatehead % % \NC test \NC hans\NC \NR % % \stoptabulatehead % % \starttabulate % \NC test \NC \input tufte \relax \NC \NR % \NC test \NC \input knuth \relax \NC \NR % \NC test \NC \input knuth \relax \NC \NR % \NC test \NC \input tufte \relax \NC \NR % \NC test \NC \input tufte \relax \NC \NR % \NC test \NC \input tufte \relax \NC \NR % \stoptabulate % \def\splittabulatebox#1% #1 <> 0/2 / derived from the one in core-ntb.tex % {\ifinsidefloat % \unvbox#1% % \else % \ifcase\tabulaterepeathead\or % \setbox2\copy#1% % \setbox2\vsplit2 to \lineheight % \setbox2\vbox{\unvbox2}% % \fi % \doloop % {\setbox0\vsplit#1 to \onepoint % \lineheight % \ifdim\pagegoal<\maxdimen % \donetrue % \else\ifdim\pagetotal=\zeropoint % \donetrue % \else % \donefalse % \fi\fi % \ifdone % \setbox0\vbox{\unvbox0}% % \dimen0\pagetotal % \advance\dimen0\dp0 % \advance\dimen0\ht0 % \ifdim\dimen0>\pagegoal % \bgroup \page \egroup % make sure that local vars are kept % \ifcase\tabulaterepeathead\or % \unvcopy2 % \or % \hbox{\strut\tabulateparameter\c!title}% % \fi % \fi % \fi % % test this on icare checklists / quite hacky ! ! ! % \ifdim\ht0>\tabulateparameter\c!rulethickness\else % \kern-2\ht0 % brrrr % \fi % % % \unvbox0 % \allowbreak % \ifvoid#1 \exitloop \fi}% % \fi} \def\splittabulatebox#1% #1 <> 0/2 / derived from the one in core-ntb.tex {\ifinsidesplitfloat \dosplittabulatebox#1% \else\ifinsidefloat \unvbox#1% \else \dosplittabulatebox#1% \fi\fi} \def\dosplittabulatebox#1% {\resettsplit \def\tsplitminimumfreelines{2}% \def\tsplitminimumfreespace{0pt}% \setbox\tsplitcontent\box#1% \ifcase\tabulaterepeathead\or \setbox\tsplithead\vsplit\tsplitcontent to \lineheight \setbox\tsplithead\vbox{\unvbox\tsplithead}% \or \setbox\tsplithead\vbox{\hbox{\strut\tabulateparameter\c!title}}% \fi \handletsplit} %D \starttyping %D \setuptabulate[split=no,rule=line] %D %D \starttabulate %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \stoptabulate %D \stoptyping % \starttabulatie[|mc|] % \NC \digits{100.000,00} \NC\NR % \NC \digits{@10.000,00} \NC\NR % \NC \digits{@@@.100,00} \NC\NR % \NC \digits{@@@.@10,@@} \NC\NR % \NC \digits{@@@.@@1,@@} \NC\NR % \stoptabulatie % % \starttabulatie[|mc|] % \ND 100.000,00 \NC\NR % \ND @10.000,00 \NC\NR % \ND @@@.100,00 \NC\NR % \ND @@@.@10,@@ \NC\NR % \ND @@@.@@1,@@ \NC\NR % \stoptabulatie % % \starttabulatie[|c|] % \ND $100.000,00$ \NC\NR % \ND $@10.000,00$ \NC\NR % \ND $@@@.100,00$ \NC\NR % \ND $@@@.@10,@@$ \NC\NR % \ND $@@@.@@1,@@$ \NC\NR % \stoptabulatie % % \starttabulatie[|c|] % \NC $\digits 100.000,00 $ \NC\NR % \NC $\digits @10.000,00 $ \NC\NR % \NC $\digits @@@.100,00 $ \NC\NR % \NC $\digits @@@.@10,@@ $ \NC\NR % \NC $\digits @@@.@@1,@@ $ \NC\NR % \stoptabulatie % % \starttabulatie[|c|] % \NC \digits $100.000,00$ \NC\NR % \NC \digits $@10.000,00$ \NC\NR % \NC \digits $@@@.100,00$ \NC\NR % \NC \digits $@@@.@10,@@$ \NC\NR % \NC \digits $@@@.@@1,@@$ \NC\NR % \stoptabulatie \def\setuptabulate {\dotripleempty\dosetuptabulate} \def\dosetuptabulate[#1][#2][#3]% {\ifthirdargument \getparameters[\??tt#1::#2][#3]% \else\ifsecondargument \getparameters[\??tt#1::][#2]% \else \getparameters[\??tt\v!tabulate::][#1]% \fi\fi} \setuptabulate [\c!unit=1em, EQ={:}, \c!frame=\v!off, \c!bodyfont=, \c!rule=\v!normal, \c!rulecolor=, \c!rulethickness=\linewidth, \c!inner=, \c!before=\blank, \c!after=\blank, \c!distance={\v!depth,\v!medium}, \c!align=\v!normal, \c!margin=\!!zeropoint, \c!split=\v!auto, \c!header=\v!yes, \c!title=, \c!indenting=\v!no] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-ini.lua0000644000175000017500000016062212130411274024070 0ustar norbertnorbertif not modules then modules = { } end modules ['char-ini'] = { version = 1.001, comment = "companion to char-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: make two files, one for format generation, one for format use -- we can remove the tag range starting at 0xE0000 (special applications) local utfchar, utfbyte, utfvalues, ustring = utf.char, utf.byte, utf.values, utf.ustring local concat, unpack, tohash = table.concat, table.unpack, table.tohash local next, tonumber, type, rawget, rawset = next, tonumber, type, rawget, rawset local format, lower, gsub, match, gmatch = string.format, string.lower, string.gsub, string.match, string.match, string.gmatch local P, R, Cs, lpegmatch, patterns = lpeg.P, lpeg.R, lpeg.Cs, lpeg.match, lpeg.patterns local utf8byte = patterns.utf8byte local utf8char = patterns.utf8char local allocate = utilities.storage.allocate local mark = utilities.storage.mark local setmetatableindex = table.setmetatableindex local trace_defining = false trackers.register("characters.defining", function(v) characters_defining = v end) local report_defining = logs.reporter("characters") --[[ldx--

This module implements some methods and creates additional datastructured from the big character table that we use for all kind of purposes: char-def.lua.

We assume that at this point characters.data is already loaded!

--ldx]]-- characters = characters or { } local characters = characters local data = characters.data if data then mark(data) -- why does this fail else report_defining("fatal error: 'char-def.lua' is not loaded") os.exit() end --[[ldx--

This converts a string (if given) into a number.

--ldx]]-- local pattern = (P("0x") + P("U+")) * ((R("09","AF")^1 * P(-1)) / function(s) return tonumber(s,16) end) patterns.chartonumber = pattern local function chartonumber(k) if type(k) == "string" then local u = lpegmatch(pattern,k) if u then return utfbyte(u) else return utfbyte(k) or 0 end else return k or 0 end end local function charfromnumber(k) if type(k) == "number" then return utfchar(k) or "" else local u = lpegmatch(pattern,k) if u then return utfchar(u) else return k end end end --~ print(chartonumber(97), chartonumber("a"), chartonumber("0x61"), chartonumber("U+61")) characters.tonumber = chartonumber characters.fromnumber = charfromnumber local private = { description = "PRIVATE SLOT", } local ranges = allocate() characters.ranges = ranges setmetatableindex(data, function(t,k) local tk = type(k) if tk == "string" then k = lpegmatch(pattern,k) or utfbyte(k) if k then local v = rawget(t,k) if v then return v else tk = "number" -- fall through to range end else return private end end if tk == "number" and k < 0xF0000 then for r=1,#ranges do local rr = ranges[r] if k >= rr.first and k <= rr.last then local extender = rr.extender if extender then local v = extender(k,v) t[k] = v return v end end end end return private -- handy for when we loop over characters in fonts and check for a property end) local blocks = allocate { ["aegeannumbers"] = { first = 0x10100, last = 0x1013F, description = "Aegean Numbers" }, ["alchemicalsymbols"] = { first = 0x1F700, last = 0x1F77F, description = "Alchemical Symbols" }, ["alphabeticpresentationforms"] = { first = 0x0FB00, last = 0x0FB4F, otf="latn", description = "Alphabetic Presentation Forms" }, ["ancientgreekmusicalnotation"] = { first = 0x1D200, last = 0x1D24F, otf="grek", description = "Ancient Greek Musical Notation" }, ["ancientgreeknumbers"] = { first = 0x10140, last = 0x1018F, otf="grek", description = "Ancient Greek Numbers" }, ["ancientsymbols"] = { first = 0x10190, last = 0x101CF, otf="grek", description = "Ancient Symbols" }, ["arabic"] = { first = 0x00600, last = 0x006FF, otf="arab", description = "Arabic" }, ["arabicextendeda"] = { first = 0x008A0, last = 0x008FF, description = "Arabic Extended-A" }, ["arabicmathematicalalphabeticsymbols"] = { first = 0x1EE00, last = 0x1EEFF, description = "Arabic Mathematical Alphabetic Symbols" }, ["arabicpresentationformsa"] = { first = 0x0FB50, last = 0x0FDFF, otf="arab", description = "Arabic Presentation Forms-A" }, ["arabicpresentationformsb"] = { first = 0x0FE70, last = 0x0FEFF, otf="arab", description = "Arabic Presentation Forms-B" }, ["arabicsupplement"] = { first = 0x00750, last = 0x0077F, otf="arab", description = "Arabic Supplement" }, ["armenian"] = { first = 0x00530, last = 0x0058F, otf="armn", description = "Armenian" }, ["arrows"] = { first = 0x02190, last = 0x021FF, description = "Arrows" }, ["avestan"] = { first = 0x10B00, last = 0x10B3F, description = "Avestan" }, ["balinese"] = { first = 0x01B00, last = 0x01B7F, otf="bali", description = "Balinese" }, ["bamum"] = { first = 0x0A6A0, last = 0x0A6FF, description = "Bamum" }, ["bamumsupplement"] = { first = 0x16800, last = 0x16A3F, description = "Bamum Supplement" }, ["basiclatin"] = { first = 0x00000, last = 0x0007F, otf="latn", description = "Basic Latin" }, ["batak"] = { first = 0x01BC0, last = 0x01BFF, description = "Batak" }, ["bengali"] = { first = 0x00980, last = 0x009FF, otf="beng", description = "Bengali" }, ["blockelements"] = { first = 0x02580, last = 0x0259F, otf="bopo", description = "Block Elements" }, ["bopomofo"] = { first = 0x03100, last = 0x0312F, otf="bopo", description = "Bopomofo" }, ["bopomofoextended"] = { first = 0x031A0, last = 0x031BF, otf="bopo", description = "Bopomofo Extended" }, ["boxdrawing"] = { first = 0x02500, last = 0x0257F, description = "Box Drawing" }, ["brahmi"] = { first = 0x11000, last = 0x1107F, description = "Brahmi" }, ["braillepatterns"] = { first = 0x02800, last = 0x028FF, otf="brai", description = "Braille Patterns" }, ["buginese"] = { first = 0x01A00, last = 0x01A1F, otf="bugi", description = "Buginese" }, ["buhid"] = { first = 0x01740, last = 0x0175F, otf="buhd", description = "Buhid" }, ["byzantinemusicalsymbols"] = { first = 0x1D000, last = 0x1D0FF, otf="byzm", description = "Byzantine Musical Symbols" }, ["commonindicnumberforms"] = { first = 0x0A830, last = 0x0A83F, description = "Common Indic Number Forms" }, ["carian"] = { first = 0x102A0, last = 0x102DF, description = "Carian" }, ["cham"] = { first = 0x0AA00, last = 0x0AA5F, description = "Cham" }, ["cherokee"] = { first = 0x013A0, last = 0x013FF, otf="cher", description = "Cherokee" }, ["cjkcompatibility"] = { first = 0x03300, last = 0x033FF, otf="hang", description = "CJK Compatibility" }, ["cjkcompatibilityforms"] = { first = 0x0FE30, last = 0x0FE4F, otf="hang", description = "CJK Compatibility Forms" }, ["cjkcompatibilityideographs"] = { first = 0x0F900, last = 0x0FAFF, otf="hang", description = "CJK Compatibility Ideographs" }, ["cjkcompatibilityideographssupplement"] = { first = 0x2F800, last = 0x2FA1F, otf="hang", description = "CJK Compatibility Ideographs Supplement" }, ["cjkradicalssupplement"] = { first = 0x02E80, last = 0x02EFF, otf="hang", description = "CJK Radicals Supplement" }, ["cjkstrokes"] = { first = 0x031C0, last = 0x031EF, otf="hang", description = "CJK Strokes" }, ["cjksymbolsandpunctuation"] = { first = 0x03000, last = 0x0303F, otf="hang", description = "CJK Symbols and Punctuation" }, ["cjkunifiedideographs"] = { first = 0x04E00, last = 0x09FFF, otf="hang", description = "CJK Unified Ideographs" }, ["cjkunifiedideographsextensiona"] = { first = 0x03400, last = 0x04DBF, otf="hang", description = "CJK Unified Ideographs Extension A" }, ["cjkunifiedideographsextensionb"] = { first = 0x20000, last = 0x2A6DF, otf="hang", description = "CJK Unified Ideographs Extension B" }, ["combiningdiacriticalmarks"] = { first = 0x00300, last = 0x0036F, description = "Combining Diacritical Marks" }, ["combiningdiacriticalmarksforsymbols"] = { first = 0x020D0, last = 0x020FF, description = "Combining Diacritical Marks for Symbols" }, ["combiningdiacriticalmarkssupplement"] = { first = 0x01DC0, last = 0x01DFF, description = "Combining Diacritical Marks Supplement" }, ["combininghalfmarks"] = { first = 0x0FE20, last = 0x0FE2F, description = "Combining Half Marks" }, ["controlpictures"] = { first = 0x02400, last = 0x0243F, description = "Control Pictures" }, ["coptic"] = { first = 0x02C80, last = 0x02CFF, otf="copt", description = "Coptic" }, ["countingrodnumerals"] = { first = 0x1D360, last = 0x1D37F, description = "Counting Rod Numerals" }, ["cuneiform"] = { first = 0x12000, last = 0x123FF, otf="xsux", description = "Cuneiform" }, ["cuneiformnumbersandpunctuation"] = { first = 0x12400, last = 0x1247F, otf="xsux", description = "Cuneiform Numbers and Punctuation" }, ["currencysymbols"] = { first = 0x020A0, last = 0x020CF, description = "Currency Symbols" }, ["cypriotsyllabary"] = { first = 0x10800, last = 0x1083F, otf="cprt", description = "Cypriot Syllabary" }, ["cyrillic"] = { first = 0x00400, last = 0x004FF, otf="cyrl", description = "Cyrillic" }, ["cyrillicextendeda"] = { first = 0x02DE0, last = 0x02DFF, otf="cyrl", description = "Cyrillic Extended-A" }, ["cyrillicextendedb"] = { first = 0x0A640, last = 0x0A69F, otf="cyrl", description = "Cyrillic Extended-B" }, ["cyrillicsupplement"] = { first = 0x00500, last = 0x0052F, otf="cyrl", description = "Cyrillic Supplement" }, ["deseret"] = { first = 0x10400, last = 0x1044F, otf="dsrt", description = "Deseret" }, ["devanagari"] = { first = 0x00900, last = 0x0097F, otf="deva", description = "Devanagari" }, ["devanagariextended"] = { first = 0x0A8E0, last = 0x0A8FF, description = "Devanagari Extended" }, ["dingbats"] = { first = 0x02700, last = 0x027BF, description = "Dingbats" }, ["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" }, ["egyptianhieroglyphs"] = { first = 0x13000, last = 0x1342F, description = "Egyptian Hieroglyphs" }, ["emoticons"] = { first = 0x1F600, last = 0x1F64F, description = "Emoticons" }, ["enclosedalphanumericsupplement"] = { first = 0x1F100, last = 0x1F1FF, description = "Enclosed Alphanumeric Supplement" }, ["enclosedalphanumerics"] = { first = 0x02460, last = 0x024FF, description = "Enclosed Alphanumerics" }, ["enclosedcjklettersandmonths"] = { first = 0x03200, last = 0x032FF, description = "Enclosed CJK Letters and Months" }, ["enclosedideographicsupplement"] = { first = 0x1F200, last = 0x1F2FF, description = "Enclosed Ideographic Supplement" }, ["ethiopic"] = { first = 0x01200, last = 0x0137F, otf="ethi", description = "Ethiopic" }, ["ethiopicextended"] = { first = 0x02D80, last = 0x02DDF, otf="ethi", description = "Ethiopic Extended" }, ["ethiopicextendeda"] = { first = 0x0AB00, last = 0x0AB2F, description = "Ethiopic Extended-A" }, ["ethiopicsupplement"] = { first = 0x01380, last = 0x0139F, otf="ethi", description = "Ethiopic Supplement" }, ["generalpunctuation"] = { first = 0x02000, last = 0x0206F, description = "General Punctuation" }, ["geometricshapes"] = { first = 0x025A0, last = 0x025FF, description = "Geometric Shapes" }, ["georgian"] = { first = 0x010A0, last = 0x010FF, otf="geor", description = "Georgian" }, ["georgiansupplement"] = { first = 0x02D00, last = 0x02D2F, otf="geor", description = "Georgian Supplement" }, ["glagolitic"] = { first = 0x02C00, last = 0x02C5F, otf="glag", description = "Glagolitic" }, ["gothic"] = { first = 0x10330, last = 0x1034F, otf="goth", description = "Gothic" }, ["greekandcoptic"] = { first = 0x00370, last = 0x003FF, otf="grek", description = "Greek and Coptic" }, ["greekextended"] = { first = 0x01F00, last = 0x01FFF, otf="grek", description = "Greek Extended" }, ["gujarati"] = { first = 0x00A80, last = 0x00AFF, otf="gujr", description = "Gujarati" }, ["gurmukhi"] = { first = 0x00A00, last = 0x00A7F, otf="guru", description = "Gurmukhi" }, ["halfwidthandfullwidthforms"] = { first = 0x0FF00, last = 0x0FFEF, description = "Halfwidth and Fullwidth Forms" }, ["hangulcompatibilityjamo"] = { first = 0x03130, last = 0x0318F, otf="jamo", description = "Hangul Compatibility Jamo" }, ["hanguljamo"] = { first = 0x01100, last = 0x011FF, otf="jamo", description = "Hangul Jamo" }, ["hanguljamoextendeda"] = { first = 0x0A960, last = 0x0A97F, description = "Hangul Jamo Extended-A" }, ["hanguljamoextendedb"] = { first = 0x0D7B0, last = 0x0D7FF, description = "Hangul Jamo Extended-B" }, ["hangulsyllables"] = { first = 0x0AC00, last = 0x0D7AF, otf="hang", description = "Hangul Syllables" }, ["hanunoo"] = { first = 0x01720, last = 0x0173F, otf="hano", description = "Hanunoo" }, ["hebrew"] = { first = 0x00590, last = 0x005FF, otf="hebr", description = "Hebrew" }, ["highprivateusesurrogates"] = { first = 0x0DB80, last = 0x0DBFF, description = "High Private Use Surrogates" }, ["highsurrogates"] = { first = 0x0D800, last = 0x0DB7F, description = "High Surrogates" }, ["hiragana"] = { first = 0x03040, last = 0x0309F, otf="kana", description = "Hiragana" }, ["ideographicdescriptioncharacters"] = { first = 0x02FF0, last = 0x02FFF, description = "Ideographic Description Characters" }, ["imperialaramaic"] = { first = 0x10840, last = 0x1085F, description = "Imperial Aramaic" }, ["inscriptionalpahlavi"] = { first = 0x10B60, last = 0x10B7F, description = "Inscriptional Pahlavi" }, ["inscriptionalparthian"] = { first = 0x10B40, last = 0x10B5F, description = "Inscriptional Parthian" }, ["ipaextensions"] = { first = 0x00250, last = 0x002AF, description = "IPA Extensions" }, ["javanese"] = { first = 0x0A980, last = 0x0A9DF, description = "Javanese" }, ["kaithi"] = { first = 0x11080, last = 0x110CF, description = "Kaithi" }, ["kanasupplement"] = { first = 0x1B000, last = 0x1B0FF, description = "Kana Supplement" }, ["kanbun"] = { first = 0x03190, last = 0x0319F, description = "Kanbun" }, ["kangxiradicals"] = { first = 0x02F00, last = 0x02FDF, description = "Kangxi Radicals" }, ["kannada"] = { first = 0x00C80, last = 0x00CFF, otf="knda", description = "Kannada" }, ["katakana"] = { first = 0x030A0, last = 0x030FF, otf="kana", description = "Katakana" }, ["katakanaphoneticextensions"] = { first = 0x031F0, last = 0x031FF, otf="kana", description = "Katakana Phonetic Extensions" }, ["kayahli"] = { first = 0x0A900, last = 0x0A92F, description = "Kayah Li" }, ["kharoshthi"] = { first = 0x10A00, last = 0x10A5F, otf="khar", description = "Kharoshthi" }, ["khmer"] = { first = 0x01780, last = 0x017FF, otf="khmr", description = "Khmer" }, ["khmersymbols"] = { first = 0x019E0, last = 0x019FF, otf="khmr", description = "Khmer Symbols" }, ["lao"] = { first = 0x00E80, last = 0x00EFF, otf="lao", description = "Lao" }, ["latinextendeda"] = { first = 0x00100, last = 0x0017F, otf="latn", description = "Latin Extended-A" }, ["latinextendedadditional"] = { first = 0x01E00, last = 0x01EFF, otf="latn", description = "Latin Extended Additional" }, ["latinextendedb"] = { first = 0x00180, last = 0x0024F, otf="latn", description = "Latin Extended-B" }, ["latinextendedc"] = { first = 0x02C60, last = 0x02C7F, otf="latn", description = "Latin Extended-C" }, ["latinextendedd"] = { first = 0x0A720, last = 0x0A7FF, otf="latn", description = "Latin Extended-D" }, ["latinsupplement"] = { first = 0x00080, last = 0x000FF, otf="latn", description = "Latin-1 Supplement" }, ["lepcha"] = { first = 0x01C00, last = 0x01C4F, description = "Lepcha" }, ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, description = "Letterlike Symbols" }, ["limbu"] = { first = 0x01900, last = 0x0194F, otf="limb", description = "Limbu" }, ["linearbideograms"] = { first = 0x10080, last = 0x100FF, otf="linb", description = "Linear B Ideograms" }, ["linearbsyllabary"] = { first = 0x10000, last = 0x1007F, otf="linb", description = "Linear B Syllabary" }, ["lisu"] = { first = 0x0A4D0, last = 0x0A4FF, description = "Lisu" }, ["lowsurrogates"] = { first = 0x0DC00, last = 0x0DFFF, description = "Low Surrogates" }, ["lycian"] = { first = 0x10280, last = 0x1029F, description = "Lycian" }, ["lydian"] = { first = 0x10920, last = 0x1093F, description = "Lydian" }, ["mahjongtiles"] = { first = 0x1F000, last = 0x1F02F, description = "Mahjong Tiles" }, ["malayalam"] = { first = 0x00D00, last = 0x00D7F, otf="mlym", description = "Malayalam" }, ["mandiac"] = { first = 0x00840, last = 0x0085F, otf="mand", description = "Mandaic" }, ["mathematicalalphanumericsymbols"] = { first = 0x1D400, last = 0x1D7FF, description = "Mathematical Alphanumeric Symbols" }, ["mathematicaloperators"] = { first = 0x02200, last = 0x022FF, description = "Mathematical Operators" }, ["meeteimayek"] = { first = 0x0ABC0, last = 0x0ABFF, description = "Meetei Mayek" }, ["meeteimayekextensions"] = { first = 0x0AAE0, last = 0x0AAFF, description = "Meetei Mayek Extensions" }, ["meroiticcursive"] = { first = 0x109A0, last = 0x109FF, description = "Meroitic Cursive" }, ["meroitichieroglyphs"] = { first = 0x10980, last = 0x1099F, description = "Meroitic Hieroglyphs" }, ["miao"] = { first = 0x16F00, last = 0x16F9F, description = "Miao" }, ["miscellaneousmathematicalsymbolsa"] = { first = 0x027C0, last = 0x027EF, description = "Miscellaneous Mathematical Symbols-A" }, ["miscellaneousmathematicalsymbolsb"] = { first = 0x02980, last = 0x029FF, description = "Miscellaneous Mathematical Symbols-B" }, ["miscellaneoussymbols"] = { first = 0x02600, last = 0x026FF, description = "Miscellaneous Symbols" }, ["miscellaneoussymbolsandarrows"] = { first = 0x02B00, last = 0x02BFF, description = "Miscellaneous Symbols and Arrows" }, ["miscellaneoussymbolsandpictographs"] = { first = 0x1F300, last = 0x1F5FF, description = "Miscellaneous Symbols And Pictographs" }, ["miscellaneoustechnical"] = { first = 0x02300, last = 0x023FF, description = "Miscellaneous Technical" }, ["modifiertoneletters"] = { first = 0x0A700, last = 0x0A71F, description = "Modifier Tone Letters" }, ["mongolian"] = { first = 0x01800, last = 0x018AF, otf="mong", description = "Mongolian" }, ["musicalsymbols"] = { first = 0x1D100, last = 0x1D1FF, otf="musc", description = "Musical Symbols" }, ["myanmar"] = { first = 0x01000, last = 0x0109F, otf="mymr", description = "Myanmar" }, ["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" }, ["newtailue"] = { first = 0x01980, last = 0x019DF, description = "New Tai Lue" }, ["nko"] = { first = 0x007C0, last = 0x007FF, otf="nko", description = "NKo" }, ["numberforms"] = { first = 0x02150, last = 0x0218F, description = "Number Forms" }, ["ogham"] = { first = 0x01680, last = 0x0169F, otf="ogam", description = "Ogham" }, ["olchiki"] = { first = 0x01C50, last = 0x01C7F, description = "Ol Chiki" }, ["olditalic"] = { first = 0x10300, last = 0x1032F, otf="ital", description = "Old Italic" }, ["oldpersian"] = { first = 0x103A0, last = 0x103DF, otf="xpeo", description = "Old Persian" }, ["oldsoutharabian"] = { first = 0x10A60, last = 0x10A7F, description = "Old South Arabian" }, ["odlturkic"] = { first = 0x10C00, last = 0x10C4F, description = "Old Turkic" }, ["opticalcharacterrecognition"] = { first = 0x02440, last = 0x0245F, description = "Optical Character Recognition" }, ["oriya"] = { first = 0x00B00, last = 0x00B7F, otf="orya", description = "Oriya" }, ["osmanya"] = { first = 0x10480, last = 0x104AF, otf="osma", description = "Osmanya" }, ["phagspa"] = { first = 0x0A840, last = 0x0A87F, otf="phag", description = "Phags-pa" }, ["phaistosdisc"] = { first = 0x101D0, last = 0x101FF, description = "Phaistos Disc" }, ["phoenician"] = { first = 0x10900, last = 0x1091F, otf="phnx", description = "Phoenician" }, ["phoneticextensions"] = { first = 0x01D00, last = 0x01D7F, description = "Phonetic Extensions" }, ["phoneticextensionssupplement"] = { first = 0x01D80, last = 0x01DBF, description = "Phonetic Extensions Supplement" }, ["playingcards"] = { first = 0x1F0A0, last = 0x1F0FF, description = "Playing Cards" }, ["privateusearea"] = { first = 0x0E000, last = 0x0F8FF, description = "Private Use Area" }, ["rejang"] = { first = 0x0A930, last = 0x0A95F, description = "Rejang" }, ["ruminumeralsymbols"] = { first = 0x10E60, last = 0x10E7F, description = "Rumi Numeral Symbols" }, ["runic"] = { first = 0x016A0, last = 0x016FF, otf="runr", description = "Runic" }, ["samaritan"] = { first = 0x00800, last = 0x0083F, description = "Samaritan" }, ["saurashtra"] = { first = 0x0A880, last = 0x0A8DF, description = "Saurashtra" }, ["sharada"] = { first = 0x11180, last = 0x111DF, description = "Sharada" }, ["shavian"] = { first = 0x10450, last = 0x1047F, otf="shaw", description = "Shavian" }, ["sinhala"] = { first = 0x00D80, last = 0x00DFF, otf="sinh", description = "Sinhala" }, ["smallformvariants"] = { first = 0x0FE50, last = 0x0FE6F, description = "Small Form Variants" }, ["sorasompeng"] = { first = 0x110D0, last = 0x110FF, description = "Sora Sompeng" }, ["spacingmodifierletters"] = { first = 0x002B0, last = 0x002FF, description = "Spacing Modifier Letters" }, ["specials"] = { first = 0x0FFF0, last = 0x0FFFF, description = "Specials" }, ["sundanese"] = { first = 0x01B80, last = 0x01BBF, description = "Sundanese" }, ["sundanesesupplement"] = { first = 0x01CC0, last = 0x01CCF, description = "Sundanese Supplement" }, ["superscriptsandsubscripts"] = { first = 0x02070, last = 0x0209F, description = "Superscripts and Subscripts" }, ["supplementalarrowsa"] = { first = 0x027F0, last = 0x027FF, description = "Supplemental Arrows-A" }, ["supplementalarrowsb"] = { first = 0x02900, last = 0x0297F, description = "Supplemental Arrows-B" }, ["supplementalmathematicaloperators"] = { first = 0x02A00, last = 0x02AFF, description = "Supplemental Mathematical Operators" }, ["supplementalpunctuation"] = { first = 0x02E00, last = 0x02E7F, description = "Supplemental Punctuation" }, ["supplementaryprivateuseareaa"] = { first = 0xF0000, last = 0xFFFFF, description = "Supplementary Private Use Area-A" }, ["supplementaryprivateuseareab"] = { first = 0x100000,last = 0x10FFFF, description = "Supplementary Private Use Area-B" }, ["sylotinagri"] = { first = 0x0A800, last = 0x0A82F, otf="sylo", description = "Syloti Nagri" }, ["syriac"] = { first = 0x00700, last = 0x0074F, otf="syrc", description = "Syriac" }, ["tagalog"] = { first = 0x01700, last = 0x0171F, otf="tglg", description = "Tagalog" }, ["tagbanwa"] = { first = 0x01760, last = 0x0177F, otf="tagb", description = "Tagbanwa" }, ["tags"] = { first = 0xE0000, last = 0xE007F, description = "Tags" }, ["taile"] = { first = 0x01950, last = 0x0197F, otf="tale", description = "Tai Le" }, ["taitham"] = { first = 0x01A20, last = 0x01AAF, description = "Tai Tham" }, ["taiviet"] = { first = 0x0AA80, last = 0x0AADF, description = "Tai Viet" }, ["taixuanjingsymbols"] = { first = 0x1D300, last = 0x1D35F, description = "Tai Xuan Jing Symbols" }, ["takri"] = { first = 0x11680, last = 0x116CF, description = "Takri" }, ["tamil"] = { first = 0x00B80, last = 0x00BFF, otf="taml", description = "Tamil" }, ["telugu"] = { first = 0x00C00, last = 0x00C7F, otf="telu", description = "Telugu" }, ["thaana"] = { first = 0x00780, last = 0x007BF, otf="thaa", description = "Thaana" }, ["thai"] = { first = 0x00E00, last = 0x00E7F, otf="thai", description = "Thai" }, ["tibetan"] = { first = 0x00F00, last = 0x00FFF, otf="tibt", description = "Tibetan" }, ["tifinagh"] = { first = 0x02D30, last = 0x02D7F, otf="tfng", description = "Tifinagh" }, ["transportandmapsymbols"] = { first = 0x1F680, last = 0x1F6FF, description = "Transport And Map Symbols" }, ["ugaritic"] = { first = 0x10380, last = 0x1039F, otf="ugar", description = "Ugaritic" }, ["unifiedcanadianaboriginalsyllabics"] = { first = 0x01400, last = 0x0167F, otf="cans", description = "Unified Canadian Aboriginal Syllabics" }, ["unifiedcanadianaboriginalsyllabicsextended"] = { first = 0x018B0, last = 0x018FF, description = "Unified Canadian Aboriginal Syllabics Extended" }, ["vai"] = { first = 0x0A500, last = 0x0A63F, description = "Vai" }, ["variationselectors"] = { first = 0x0FE00, last = 0x0FE0F, description = "Variation Selectors" }, ["variationselectorssupplement"] = { first = 0xE0100, last = 0xE01EF, description = "Variation Selectors Supplement" }, ["vedicextensions"] = { first = 0x01CD0, last = 0x01CFF, description = "Vedic Extensions" }, ["verticalforms"] = { first = 0x0FE10, last = 0x0FE1F, description = "Vertical Forms" }, ["yijinghexagramsymbols"] = { first = 0x04DC0, last = 0x04DFF, otf="yi", description = "Yijing Hexagram Symbols" }, ["yiradicals"] = { first = 0x0A490, last = 0x0A4CF, otf="yi", description = "Yi Radicals" }, ["yisyllables"] = { first = 0x0A000, last = 0x0A48F, otf="yi", description = "Yi Syllables" }, } characters.blocks = blocks function characters.blockrange(name) local b = blocks[name] if b then return b.first, b.last else return 0, 0 end end setmetatableindex(blocks, function(t,k) -- we could use an intermediate table if called often return k and rawget(t,lower(gsub(k,"[^a-zA-Z]",""))) end) local otfscripts = utilities.storage.allocate() characters.otfscripts = otfscripts setmetatableindex(otfscripts,function(t,unicode) for k, v in next, blocks do local first, last = v.first, v.last if unicode >= first and unicode <= last then local script = v.otf or "dflt" for u=first,last do t[u] = script end return script end end -- pretty slow when we're here t[unicode] = "dflt" return "dflt" end) function characters.getrange(name) -- used in font fallback definitions (name or range) local range = blocks[name] if range then return range.first, range.last, range.description end name = gsub(name,'"',"0x") -- goodie: tex hex notation local start, stop = match(name,"^(.-)[%-%:](.-)$") if start and stop then start, stop = tonumber(start,16) or tonumber(start), tonumber(stop,16) or tonumber(stop) if start and stop then return start, stop, nil end end local slot = tonumber(name,16) or tonumber(name) return slot, slot, nil end local categorytags = allocate { lu = "Letter Uppercase", ll = "Letter Lowercase", lt = "Letter Titlecase", lm = "Letter Modifier", lo = "Letter Other", mn = "Mark Nonspacing", mc = "Mark Spacing Combining", me = "Mark Enclosing", nd = "Number Decimal Digit", nl = "Number Letter", no = "Number Other", pc = "Punctuation Connector", pd = "Punctuation Dash", ps = "Punctuation Open", pe = "Punctuation Close", pi = "Punctuation Initial Quote", pf = "Punctuation Final Quote", po = "Punctuation Other", sm = "Symbol Math", sc = "Symbol Currency", sk = "Symbol Modifier", so = "Symbol Other", zs = "Separator Space", zl = "Separator Line", zp = "Separator Paragraph", cc = "Other Control", cf = "Other Format", cs = "Other Surrogate", co = "Other Private Use", cn = "Other Not Assigned", } characters.categorytags = categorytags --~ special : cf (softhyphen) zs (emspace) --~ characters: ll lm lo lt lu mn nl no pc pd pe pf pi po ps sc sk sm so local is_character = allocate ( tohash { "lu","ll","lt","lm","lo", "nd","nl","no", "mn", "nl","no", "pc","pd","ps","pe","pi","pf","po", "sm","sc","sk","so" } ) local is_letter = allocate ( tohash { "ll","lm","lo","lt","lu" } ) local is_command = allocate ( tohash { "cf","zs" } ) local is_spacing = allocate ( tohash { "zs", "zl","zp", } ) local is_mark = allocate ( tohash { "mn", "ms", } ) -- to be redone: store checked characters characters.is_character = is_character characters.is_letter = is_letter characters.is_command = is_command characters.is_spacing = is_spacing characters.is_mark = is_mark local mt = { -- yes or no ? __index = function(t,k) if type(k) == "number" then local c = data[k].category return c and rawget(t,c) else -- avoid auto conversion in data.characters lookups end end } setmetatableindex(characters.is_character, mt) setmetatableindex(characters.is_letter, mt) setmetatableindex(characters.is_command, mt) setmetatableindex(characters.is_spacing, mt) -- linebreak: todo: hash -- -- normative : BK CR LF CM SG GL CB SP ZW NL WJ JL JV JT H2 H3 -- informative : XX OP CL QU NS EX SY IS PR PO NU AL ID IN HY BB BA SA AI B2 new:CP -- east asian width: -- -- N A H W F Na characters.bidi = allocate { l = "Left-to-Right", lre = "Left-to-Right Embedding", lro = "Left-to-Right Override", r = "Right-to-Left", al = "Right-to-Left Arabic", rle = "Right-to-Left Embedding", rlo = "Right-to-Left Override", pdf = "Pop Directional Format", en = "European Number", es = "European Number Separator", et = "European Number Terminator", an = "Arabic Number", cs = "Common Number Separator", nsm = "Non-Spacing Mark", bn = "Boundary Neutral", b = "Paragraph Separator", s = "Segment Separator", ws = "Whitespace", on = "Other Neutrals", } --[[ldx--

At this point we assume that the big data table is loaded. From this table we derive a few more.

--ldx]]-- if not characters.fallbacks then characters.fallbacks = { } -- not than many local fallbacks = characters.fallbacks for k, d in next, data do local specials = d.specials if specials and specials[1] == "compat" and specials[2] == 0x0020 then local s = specials[3] if s then fallbacks[k] = s fallbacks[s] = k end end end end if storage then storage.register("characters/fallbacks", characters.fallbacks, "characters.fallbacks") -- accents and such end characters.directions = { } setmetatableindex(characters.directions,function(t,k) local d = data[k] if d then local v = d.direction if v then t[k] = v return v end end t[k] = false -- maybe 'l' return v end) --[[ldx--

Next comes a whole series of helper methods. These are (will be) part of the official .

--ldx]]-- -- we could make them virtual: characters.contextnames[n] function characters.contextname(n) return data[n].contextname or "" end function characters.adobename (n) return data[n].adobename or "" end function characters.description(n) return data[n].description or "" end -------- characters.category (n) return data[n].category or "" end function characters.category(n,verbose) local c = data[n].category if not c then return "" elseif verbose then return categorytags[c] else return c end end -- -- some day we will make a table .. not that many calls to utfchar -- -- local utfchar = utf.char -- local utfbyte = utf.byte -- local utfbytes = { } -- local utfchars = { } -- -- table.setmetatableindex(utfbytes,function(t,k) local v = utfchar(k) t[k] = v return v end) -- table.setmetatableindex(utfchars,function(t,k) local v = utfbyte(k) t[k] = v return v end) local function toutfstring(s) if type(s) == "table" then return utfchar(unpack(s)) -- concat { utfchar( unpack(s) ) } else return utfchar(s) end end utf.tostring = toutfstring local categories = allocate() characters.categories = categories -- lazy table setmetatableindex(categories, function(t,u) if u then local c = data[u] c = c and c.category or u t[u] = c return c end end) local lccodes = allocate() characters.lccodes = lccodes -- lazy table local uccodes = allocate() characters.uccodes = uccodes -- lazy table local shcodes = allocate() characters.shcodes = shcodes -- lazy table local fscodes = allocate() characters.fscodes = fscodes -- lazy table setmetatableindex(lccodes, function(t,u) if u then local c = data[u] c = c and c.lccode or (type(u) == "string" and utfbyte(u)) or u t[u] = c return c end end) setmetatableindex(uccodes, function(t,u) if u then local c = data[u] c = c and c.uccode or (type(u) == "string" and utfbyte(u)) or u t[u] = c return c end end) setmetatableindex(shcodes, function(t,u) if u then local c = data[u] c = c and c.shcode or (type(u) == "string" and utfbyte(u)) or u t[u] = c return c end end) setmetatableindex(fscodes, function(t,u) if u then local c = data[u] c = c and c.fscode or (type(u) == "string" and utfbyte(u)) or u t[u] = c return c end end) local lcchars = allocate() characters.lcchars = lcchars -- lazy table local ucchars = allocate() characters.ucchars = ucchars -- lazy table local shchars = allocate() characters.shchars = shchars -- lazy table local fschars = allocate() characters.fschars = fschars -- lazy table setmetatableindex(lcchars, function(t,u) if u then local c = data[u] c = c and c.lccode c = c and toutfstring(c) or (type(u) == "number" and utfchar(u)) or u t[u] = c return c end end) setmetatableindex(ucchars, function(t,u) if u then local c = data[u] c = c and c.uccode c = c and toutfstring(c) or (type(u) == "number" and utfchar(u)) or u t[u] = c return c end end) setmetatableindex(shchars, function(t,u) if u then local c = data[u] c = c and c.shcode c = c and toutfstring(c) or (type(u) == "number" and utfchar(u)) or u t[u] = c return c end end) setmetatableindex(fschars, function(t,u) if u then local c = data[u] c = c and c.fscode c = c and toutfstring(c) or (type(u) == "number" and utfchar(u)) or u t[u] = c return c end end) local decomposed = allocate() characters.decomposed = decomposed -- lazy table local specials = allocate() characters.specials = specials -- lazy table setmetatableindex(decomposed, function(t,u) -- either a table or false if u then local c = data[u] local s = c and c.decomposed or false -- could fall back to specials t[u] = s return s end end) setmetatableindex(specials, function(t,u) -- either a table or false if u then local c = data[u] local s = c and c.specials or false t[u] = s return s end end) local specialchars = allocate() characters.specialchars = specialchars -- lazy table local descriptions = allocate() characters.descriptions = descriptions -- lazy table setmetatableindex(specialchars, function(t,u) if u then local c = data[u] local s = c and c.specials if s then local tt, ttn = { }, 0 for i=2,#s do local si = s[i] local c = data[si] if is_letter[c.category] then ttn = ttn + 1 tt[ttn] = utfchar(si) end end c = concat(tt) t[u] = c return c else if type(u) == "number" then u = utfchar(u) end t[u] = u return u end end end) setmetatableindex(descriptions, function(t,k) -- 0.05 - 0.10 sec for u, c in next, data do local d = c.description if d then d = gsub(d," ","") d = lower(d) t[d] = u end end local d = rawget(t,k) if not d then t[k] = k end return d end) function characters.unicodechar(asked) local n = tonumber(asked) if n then return n elseif type(asked) == "string" then return descriptions[asked] or descriptions[gsub(asked," ","")] end end -- function characters.lower(str) -- local new, n = { }, 0 -- for u in utfvalues(str) do -- n = n + 1 -- new[n] = lcchars[u] -- end -- return concat(new) -- end -- -- function characters.upper(str) -- local new, n = { }, 0 -- for u in utfvalues(str) do -- n = n + 1 -- new[n] = ucchars[u] -- end -- return concat(new) -- end -- -- function characters.shaped(str) -- local new, n = { }, 0 -- for u in utfvalues(str) do -- n = n + 1 -- new[n] = shchars[u] -- end -- return concat(new) -- end ----- tolower = Cs((utf8byte/lcchars)^0) ----- toupper = Cs((utf8byte/ucchars)^0) ----- toshape = Cs((utf8byte/shchars)^0) local tolower = Cs((utf8char/lcchars)^0) local toupper = Cs((utf8char/ucchars)^0) local toshape = Cs((utf8char/shchars)^0) patterns.tolower = tolower patterns.toupper = toupper patterns.toshape = toshape function characters.lower (str) return lpegmatch(tolower,str) end function characters.upper (str) return lpegmatch(toupper,str) end function characters.shaped(str) return lpegmatch(toshape,str) end function characters.lettered(str,spacing) local new, n = { }, 0 if spacing then local done = false for u in utfvalues(str) do local c = data[u].category if is_letter[c] then if done and n > 1 then n = n + 1 new[n] = " " done = false end n = n + 1 new[n] = utfchar(u) elseif spacing and is_spacing[c] then done = true end end else for u in utfvalues(str) do if is_letter[data[u].category] then n = n + 1 new[n] = utfchar(u) end end end return concat(new) end --[[ldx--

Requesting lower and uppercase codes:

--ldx]]-- function characters.uccode(n) return uccodes[n] end -- obsolete function characters.lccode(n) return lccodes[n] end -- obsolete function characters.safechar(n) local c = data[n] if c and c.contextname then return "\\" .. c.contextname else return utfchar(n) end end function characters.shape(n) local shcode = shcodes[n] if not shcode then return n, nil elseif type(shcode) == "table" then return shcode[1], shcode[#shcode] else return shcode, nil end end -- -- some day we might go this route, but it does not really save that much -- -- so not now (we can generate a lot using mtx-unicode that operates on the -- -- database) -- -- -- category cjkwd direction linebreak -- -- -- adobename comment contextcommand contextname description fallback lccode -- -- mathclass mathfiller mathname mathspec mathstretch mathsymbol mirror -- -- range shcode specials uccode uccodes unicodeslot -- -- local data = { -- ['one']={ -- common = { -- category="cc", -- direction="bn", -- linebreak="cm", -- }, -- vector = { -- [0x0000] = { -- description="NULL", -- group='one', -- unicodeslot=0x0000, -- }, -- { -- description="START OF HEADING", -- group='one', -- unicodeslot=0x0001, -- }, -- } -- } -- } -- -- local chardata, groupdata = { }, { } -- -- for group, gdata in next, data do -- local common, vector = { __index = gdata.common }, gdata.vector -- for character, cdata in next, vector do -- chardata[character] = cdata -- setmetatable(cdata,common) -- end -- groupdata[group] = gdata -- end --~ characters.data, characters.groups = chardata, groupdata --~ [0xF0000]={ --~ category="co", --~ cjkwd="a", --~ description="", --~ direction="l", --~ unicodeslot=0xF0000, --~ }, --~ [0xFFFFD]={ --~ category="co", --~ cjkwd="a", --~ description="", --~ direction="l", --~ unicodeslot=0xFFFFD, --~ }, --~ [0x100000]={ --~ category="co", --~ cjkwd="a", --~ description="", --~ direction="l", --~ unicodeslot=0x100000, --~ }, --~ [0x10FFFD]={ --~ category="co", --~ cjkwd="a", --~ description="", --~ direction="l", --~ unicodeslot=0x10FFFD, --~ }, if not characters.superscripts then local superscripts = allocate() characters.superscripts = superscripts local subscripts = allocate() characters.subscripts = subscripts -- skipping U+02120 (service mark) U+02122 (trademark) for k, v in next, data do local specials = v.specials if specials then local what = specials[1] if what == "super" then if #specials == 2 then superscripts[k] = specials[2] else report_defining("ignoring %s %a, char %c, description %a","superscript",ustring(k),k,v.description) end elseif what == "sub" then if #specials == 2 then subscripts[k] = specials[2] else report_defining("ignoring %s %a, char %c, description %a","subscript",ustring(k),k,v.description) end end end end -- print(table.serialize(superscripts, "superscripts", { hexify = true })) -- print(table.serialize(subscripts, "subscripts", { hexify = true })) if storage then storage.register("characters/superscripts", superscripts, "characters.superscripts") storage.register("characters/subscripts", subscripts, "characters.subscripts") end end -- for the moment only a few local tracedchars = utilities.strings.tracers tracedchars[0x00] = "[signal]" tracedchars[0x20] = "[space]" -- the following code will move to char-tex.lua -- tex if not tex or not context or not commands then return characters end local tex = tex local texsetlccode = tex.setlccode local texsetuccode = tex.setuccode local texsetsfcode = tex.setsfcode local texsetcatcode = tex.setcatcode local contextsprint = context.sprint local ctxcatcodes = catcodes.numbers.ctxcatcodes --[[ldx--

Instead of using a file to define the named glyphs, we use the table. After all, we have this information available anyway.

--ldx]]-- function commands.makeactive(n,name) -- contextsprint(ctxcatcodes,format("\\catcode%s=13\\unexpanded\\def %s{\\%s}",n,utfchar(n),name)) -- context("\\catcode%s=13\\unexpanded\\def %s{\\%s}",n,utfchar(n),name) end function commands.utfchar(c,n) if n then -- contextsprint(c,charfromnumber(n)) contextsprint(c,utfchar(n)) else -- contextsprint(charfromnumber(c)) contextsprint(utfchar(c)) end end function commands.safechar(n) local c = data[n] if c and c.contextname then contextsprint("\\" .. c.contextname) -- context[c.contextname]() else contextsprint(utfchar(n)) end end tex.uprint = commands.utfchar local forbidden = tohash { -- at least now 0x00A0, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x202F, 0x205F, -- 0xFEFF, } function characters.define(tobelettered, tobeactivated) -- catcodetables if trace_defining then report_defining("defining active character commands") end local activated, a = { }, 0 for u, chr in next, data do -- these will be commands local fallback = chr.fallback if fallback then contextsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\checkedchar{",u,"}{",fallback,"}}}") a = a + 1 activated[a] = u else local contextname = chr.contextname if contextname then local category = chr.category if is_character[category] then if chr.unicodeslot < 128 then if is_letter[category] then contextsprint(ctxcatcodes,format("\\def\\%s{%s}",contextname,utfchar(u))) -- has no s else contextsprint(ctxcatcodes,format("\\chardef\\%s=%s",contextname,u)) -- has no s end else contextsprint(ctxcatcodes,format("\\def\\%s{%s}",contextname,utfchar(u))) -- has no s end elseif is_command[category] and not forbidden[u] then contextsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\"..contextname,"}}") a = a + 1 activated[a] = u end end end end if tobelettered then -- shared local saved = tex.catcodetable for i=1,#tobelettered do tex.catcodetable = tobelettered[i] if trace_defining then report_defining("defining letters (global, shared)") end for u, chr in next, data do if not chr.fallback and is_letter[chr.category] and u >= 128 and u <= 65536 then texsetcatcode(u,11) end local range = chr.range if range then for i=1,range.first,range.last do texsetcatcode(i,11) end end end texsetcatcode(0x200C,11) -- non-joiner texsetcatcode(0x200D,11) -- joiner end tex.catcodetable = saved end local nofactivated = #tobeactivated if tobeactivated and nofactivated > 0 then for i=1,nofactivated do local u = activated[i] if u then report_defining("character %U is active in set %a, containing %a",u,data[u].description,tobeactivated) end end local saved = tex.catcodetable for i=1,#tobeactivated do local vector = tobeactivated[i] if trace_defining then report_defining("defining %a active characters in vector %a",nofactivated,vector) end tex.catcodetable = vector for i=1,nofactivated do local u = activated[i] if u then texsetcatcode(u,13) end end end tex.catcodetable = saved end end --[[ldx--

Setting the lccodes is also done in a loop over the data table.

--ldx]]-- local sfmode = "unset" -- unset, traditional, normal function characters.setcodes() if trace_defining then report_defining("defining lc and uc codes") end local traditional = sfstate == "traditional" or sfstate == "unset" for code, chr in next, data do local cc = chr.category if is_letter[cc] then local range = chr.range if range then for i=range.first,range.last do texsetcatcode(i,11) -- letter texsetlccode(i,i,i) -- self self end else local lc, uc = chr.lccode, chr.uccode if not lc then chr.lccode, lc = code, code elseif type(lc) == "table" then lc = code end if not uc then chr.uccode, uc = code, code elseif type(uc) == "table" then uc = code end texsetcatcode(code,11) -- letter texsetlccode(code,lc,uc) if traditional and cc == "lu" then texsetsfcode(code,999) end end elseif is_mark[cc] then texsetlccode(code,code,code) -- for hyphenation end end if traditional then sfstate = "traditional" end end -- If this is something that is not documentwide and used a lot, then we -- need a more clever approach (trivial but not now). local function setuppersfcodes(v,n) if sfstate ~= "unset" then report_defining("setting uppercase sf codes to %a",n) for code, chr in next, data do if chr.category == "lu" then texsetsfcode(code,n) end end end sfstate = v end directives.register("characters.spaceafteruppercase",function(v) if v == "traditional" then setuppersfcodes(v,999) elseif v == "normal" then setuppersfcodes(v,1000) end end) -- xml characters.activeoffset = 0x10000 -- there will be remapped in that byte range function commands.remapentity(chr,slot) contextsprint(format("{\\catcode%s=13\\xdef%s{\\string%s}}",slot,utfchar(slot),chr)) end -- xml.entities = xml.entities or { } -- -- storage.register("xml/entities",xml.entities,"xml.entities") -- this will move to lxml -- -- function characters.setmkiventities() -- local entities = xml.entities -- entities.lt = "<" -- entities.amp = "&" -- entities.gt = ">" -- end -- -- function characters.setmkiientities() -- local entities = xml.entities -- entities.lt = utfchar(characters.activeoffset + utfbyte("<")) -- entities.amp = utfchar(characters.activeoffset + utfbyte("&")) -- entities.gt = utfchar(characters.activeoffset + utfbyte(">")) -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1258.lua0000644000175000017500000000457411571377075024271 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1258'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0000, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF, 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF, 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF } context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-6.lua0000644000175000017500000000457411571377075024127 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-6'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0000, 0x0000, 0x0000, 0x00A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x060C, 0x00AD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x061B, 0x0000, 0x0000, 0x0000, 0x061F, 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } context-2013.05.28.20130704/texmf-dist/tex/context/base/s-abr-01.tex0000644000175000017500000002622412130411274023636 0ustar norbertnorbert%D \module %D [ file=s-abr-01, %D version=1996.01.01, %D title=\CONTEXT\ Style File, %D subtitle=General Abbreviations 1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \setupsorting[logo][\c!style=\v!capital] \setupcapitals[\c!title=\v!no] \protect \logo [MKI] {MkI} % joke \logo [MKII] {MkII} \logo [MKIII] {MkIII} % joke \logo [MKIV] {MkIV} \logo [MKVI] {MkVI} \logo [MKIX] {MkIX} \logo [MKXI] {MkXI} \logo [MKIC] {MkIC} \logo [MKCI] {MkCI} \logo [MPII] {MpII} \logo [MPIV] {MpIV} %logo [FGA] {fga} %logo [FGBBS] {fgbbs} \logo [ACROBAT] {Acro\-bat} \logo [AFM] {afm} \logo [API] {api} \logo [ALEPH] {Aleph} % {\mathematics{\aleph}} \logo [ALGOL] {ALGOL} \logo [AMS] {ams} \logo [AMSLATEX] {\AmSLaTeX} \logo [AMSTEX] {\AmSTeX} \logo [ANSI] {ansi} \logo [ARABTEX] {Arab\TeX} \logo [ASCII] {ascii} \logo [ASCIITEX] {ascii\TeX} \logo [BACHOTEX] {Bacho\TeX} \logo [BIBTEX] {bib\TeX} \logo [BLUESKY] {BlueSky} \logo [BMP] {bmp} \logo [BSD] {bsd} \logo [CCODE] {C} \logo [CPLUSPLUS] {C\high{++}} \logo [CALCMATH] {CalcMath} \logo [CLD] {cld} \logo [CD] {cd} \logo [CPU] {cpu} \logo [CDROM] {cdrom} \logo [CID] {cid} \logo [CJK] {cjk} \logo [CMR] {cmr} \logo [CLD] {cld} \logo [CMYK] {cmyk} \logo [CODHOST] {CodHost} \logo [CONTEXT] {\ConTeXt} \logo [CSS] {css} \logo [CTAN] {ctan} \logo [CTXTOOLS] {ctxtools} \logo [CWEB] {cweb} \logo [CSTUG] {cstug} \logo [DANTE] {Dante} \logo [DISTILLER] {distiller} \logo [DRATEX] {Dra\TeX} \logo [DSC] {dsc} \logo [DTD] {dtd} \logo [DTK] {dtk} \logo [DTP] {dtp} \logo [DVD] {dvd} \logo [DVI] {dvi} \logo [DVIPDFM] {dvipdfm} \logo [DVIPDFMX] {dvipdfmx} \logo [DVIPOS] {dvipos} \logo [DVIPS] {dvips} \logo [DVIPSONE] {dvipsone} \logo [DVISCR] {dviscr} \logo [DVIWINDO] {dviwindo} \logo [EBCDIC] {ebcdic} \logo [EC] {ec} \logo [EIFFEL] {Eiffel} \logo [EMACS] {emacs} \logo [EMTEX] {em\TeX} \logo [ENCODING] {enc} \logo [ENCTEX] {enc\TeX} \logo [EPS] {eps} \logo [ETEX] {\eTeX} \logo [EUROBACHOTEX] {EuroBacho\TeX} \logo [EUROMATH] {EuroMath} \logo [EUROTEX] {Euro\TeX} \logo [EXAMPLE] {eXaMpLe} \logo [EXAMPLED] {exampled} \logo [EXAMPLEQ] {exampleq} \logo [EXAMPLER] {exampler} \logo [EXAMPLET] {examplet} \logo [EXAMPLEX] {examplex} \logo [EXIMPLE] {eXiMpLe} \logo [FLAC] {flac} \logo [FAQ] {faq} \logo [FDF] {fdf} \logo [FONTFORGE] {FontForge} \logo [FOXET] {foXet} \logo [FPTEX] {fp\TeX} \logo [FREEBSD] {FreeBSD} \logo [FTP] {ftp} \logo [GHOSTSCRIPT] {Ghost\-script} \logo [GHOSTVIEW] {Ghost\-view} \logo [GIF] {gif} \logo [GNU] {gnu} \logo [GNUPLOT] {gnuplot} \logo [GS] {Ghost\-Script} \logo [GUST] {Gust} \logo [GCC] {gcc} \logo [GWTEX] {gw\TeX} \logo [HSB] {hsb} \logo [HTML] {html} \logo [HTTP] {http} \logo [HZ] {hz} \logo [IBM] {ibm} \logo [IMAGEMAGICK] {ImageMagick} \logo [INITEX] {ini\TeX} \logo [INRSTEX] {inrs\TeX} \logo [IO] {io} \logo [IRCNET] {IRCnet} \logo [ISO] {iso} \logo [JAVA] {Java} \logo [JAVASCRIPT] {Java\-Script} \logo [JPEG] {jpeg} \logo [JPG] {jpg} \logo [JBIG] {jbig} \logo [KPATHSEA] {kpathsea} \logo [KPSE] {kpse} \logo [KVM] {kvm} \logo [KPSEWHICH] {kpsewhich} \logo [MKTEXLSR] {mktexlsr} \logo [MYSQL] {MySQL} \logo [LAMSTEX] {\LamSTeX} \logo [LATEX] {\LaTeX} \logo [LATEXTE] {\LaTeX2e} \logo [LATEXTN] {\LaTeX2.09} \logo [LCD] {lcd} \logo [LINUX] {linux} \logo [LISP] {Lisp} \logo [LPEG] {lpeg} \logo [LUA] {Lua} \logo [LUAJIT] {LuaJIT} \logo [LUAJITTEX] {Luajit\TeX} \logo [LUATEX] {Lua\TeX} \logo [LUATOOLS] {luatools} \logo [LMX] {lmx} \logo [MACOSX] {MacOSX} \logo [MACROTEX] {Macro\TeX} \logo [MAKEMPY] {MakeMPY} \logo [MAPPING] {map} \logo [MAPS] {Maps} \logo [MATHML] {MathML} \logo [METAFONT] {\MetaFont} \logo [METAPOST] {\MetaPost} \logo [METATEX] {Meta\TeX} \logo [MIKTEX] {Mik\TeX} \logo [MINGW] {MingW} \logo [MLTEX] {ml\TeX} \logo [METATYPE] {MetaType1} \logo [MODULA] {Modula} \logo [MOV] {mov} \logo [MPS] {mps} \logo [MPTOPDF] {mptopdf} \logo [MPLIB] {mplib} \logo [MSDOS] {msdos} \logo [MICROSOFT] {Microsoft} \logo [MSWINDOWS] {MS~Windows} \logo [MSWORD] {MS~Word} \logo [MTXRUN] {mtxrun} \logo [MTXTOOLS] {mtxtools} \logo [NETPBM] {NetPBM} \logo [NTG] {ntg} \logo [NTS] {nts} \logo [OFM] {ofm} \logo [OMEGA] {Omega} \logo [OPENMATH] {OpenMath} \logo [OPENTYPE] {OpenType} \logo [OPI] {opi} \logo [OTEX] {Oriental \TeX} \logo [OTF] {otf} \logo [OTP] {otp} \logo [OVF] {ovf} \logo [PASCAL] {Pascal} \logo [PCTEX] {pc\TeX} \logo [PFA] {pfa} \logo [PFB] {pfb} \logo [PDF] {pdf} \logo [PDFETEX] {pdfe\TeX} \logo [PDFTEX] {pdf\TeX} \logo [PDFTOOLS] {pdftools} \logo [PDFTOPS] {pdftops} \logo [PERL] {Perl} \logo [PERLTK] {Perl/Tk} \logo [PICTEX] {\PiCTeX} \logo [PK] {pk} \logo [PLAIN] {Plain} \logo [PNG] {png} \logo [POSIX] {posix} \logo [POSTSCRIPT] {Post\-Script} \logo [PPCHTEX] {\PPCHTeX} \logo [PRAGMA] {Pragma ADE} \logo [PRESS] {press} \logo [PRIFIL] {prifil} \logo [PS] {Post\-Script} \logo [PSCHECK] {pscheck} \logo [PSTOEDIT] {pstoedit} \logo [PSTOPAGE] {pstopage} \logo [PSTOPDF] {pstopdf} \logo [PSTRICKS] {pstricks} \logo [RAM] {ram} \logo [READER] {Acro\-bat Reader} \logo [RELAXNG] {Relax\kern.125emNG} \logo [RGB] {rgb} \logo [RLXTOOLS] {rlxtools} \logo [RUBY] {Ruby} \logo [SCITE] {SciTE} \logo [SGML] {sgml} \logo [SI] {si} \logo [SQL] {sql} \logo [SSD] {ssd} \logo [SVG] {svg} \logo [SWIG] {swig} \logo [SWIGLIB] {SwigLib} \logo [TABLE] {\TaBlE} \logo [TCPIP] {tcp/ip} \logo [TDS] {tds} % no sc te \logo [TETEX] {te\TeX} % no sc te \logo [TEX] {\TeX} \logo [TEXADRES] {\TeX adress} \logo [TEXBASE] {\TeX base} \logo [TEXEDIT] {\TeX edit} \logo [TEXEXEC] {\TeX exec} \logo [TEXFONT] {\TeX font} \logo [TEXFORM] {\TeX form} \logo [TEXLIVE] {\TeX Live} \logo [TEXLUA] {\TeX Lua} \logo [TEXMF] {texmf} \logo [TEXMFSTART] {texmfstart} \logo [TEXNL] {tex-nl} \logo [TEXSHOW] {\TeX show} \logo [TEXSPELL] {\TeX spell} \logo [TEXGYRE] {\TeX\ Gyre} \logo [TEXSYNC] {texsync} \logo [TEXTMATE] {TextMate} \logo [TEXTOOLS] {\TeX tools} \logo [TEXUTIL] {\TeX util} \logo [TEXWORK] {\TeX work} \logo [TEXXET] {\TeX\XeT} \def\XeT{XeT} \logo [TFM] {tfm} \logo [TIF] {tif} \logo [TIFF] {tiff} \logo [TIFFINFO] {tiffinfo} \logo [TIFFTAGS] {tifftags} \logo [TMFTOOLS] {tmftools} \logo [TPIC] {tpic} \logo [TPM] {tpm} \logo [TRUETYPE] {TrueType} \logo [TTC] {ttc} \logo [TTF] {ttf} \logo [TUG] {tug} \logo [TUGBOAT] {Tug\-Boat} \logo [TUGNEWS] {Tug\-News} \logo [TYPEONE] {Type1} \logo [UCS] {ucs} \logo [UNICODE] {Uni\-code} \logo [UNIX] {Unix} \logo [URI] {uri} \logo [URL] {url} \logo [USA] {usa} \logo [USENET] {usenet} \logo [UTF] {utf} \logo [USB] {usb} \logo [VF] {vf} \logo [WDT] {wdt} \logo [WEB] {web} \logo [WEBC] {web2c} \logo [WIKI] {Wiki} \logo [WINDOWS] {Windows} \logo [WINNT] {WinNT} \logo [WINNX] {Win9x} \logo [WWW] {www} \logo [WTHREEC] {W3C} \logo [WYSIWYG] {wysiwyg} \logo [XDVI] {Xdvi} \logo [XETEX] {\XeTeX} \logo [XFDF] {xfdf} \logo [XHTML] {xhtml} \logo [XINDY] {Xindy} \logo [XML] {xml} \logo [XPATH] {xpath} \logo [XMLTOOLS] {xmltools} \logo [XPDFETEX] {xpdfe\TeX} \logo [XSL] {xsl} \logo [XSLFO] {xsl-fo} \logo [XSLT] {xslt} \logo [XSLTPROC] {xsltproc} \logo [XYPIC] {XYPIC} % wrong logo \logo [VMWARE] {VMWare} \logo [YandY] {y\&y} \logo [ZIP] {zip} \def\METAFUN {\MetaFun} \logo [METAFUN] {\MetaFun} \def\SystemSpecialA#1{$\langle\it#1\rangle$} \def\SystemSpecialB#1{{\tttf<#1>}} \unexpanded\def\CATCODE {\SystemSpecialA{catcode}} \unexpanded\def\CATCODES {\SystemSpecialA{catcodes}} \unexpanded\def\DIMENSION {\SystemSpecialA{dimension}} \unexpanded\def\DIMENSIONS {\SystemSpecialA{dimensions}} \unexpanded\def\COUNTER {\SystemSpecialA{counter}} \unexpanded\def\COUNTERS {\SystemSpecialA{counters}} \unexpanded\def\HBOX {\SystemSpecialA{hbox}} \unexpanded\def\HBOXES {\SystemSpecialA{hboxes}} \unexpanded\def\VBOX {\SystemSpecialA{vbox}} \unexpanded\def\VBOXES {\SystemSpecialA{vboxes}} \unexpanded\def\BOX {\SystemSpecialA{box}} \unexpanded\def\BOXES {\SystemSpecialA{boxes}} \unexpanded\def\TOKENLIST {\SystemSpecialA{token list}} \unexpanded\def\TOKENLISTS {\SystemSpecialA{token lists}} \unexpanded\def\NEWLINE {\SystemSpecialA{newline}} \unexpanded\def\SKIP {\SystemSpecialA{skip}} \unexpanded\def\SKIPS {\SystemSpecialA{skips}} \unexpanded\def\MUSKIP {\SystemSpecialA{muskip}} \unexpanded\def\MUSKIPS {\SystemSpecialA{muskips}} \unexpanded\def\MARK {\SystemSpecialA{mark}} \unexpanded\def\MARKS {\SystemSpecialA{marks}} \unexpanded\def\SPACE {\SystemSpecialB{space}} \unexpanded\def\EOF {\SystemSpecialB{eof}} \unexpanded\def\TAB {\SystemSpecialB{tab}} \unexpanded\def\NEWPAGE {\SystemSpecialB{newpage}} \unexpanded\def\NEWLINE {\SystemSpecialB{newline}} \unexpanded\def\LUWATEEKH {لُواتيخ} % kh ī t ā w [u] l \unexpanded\def\luwateekh {luwātīkh} \doifmodeelse {mkiv} { \unexpanded\def\THANH{H\agrave n Th\ecircumflexacute\ Th\agrave nh} } { \unexpanded\def\THANH{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh} } \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-frc.mkii0000644000175000017500000001601111754241457024256 0ustar norbertnorbert%D \module %D [ file=math-frc, %D version=2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Fractions, %D author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Fractions} \unprotect \unexpanded\def\exmthfont#1% {\symbolicsizedfont#1\plusone{MathExtension}} \def\domthfrac#1#2#3#4#5#6#7% {\begingroup \mathsurround\zeropoint \setbox0\hbox{$#1 #6$}% \setbox2\hbox{$#1 #7$}% \dimen0\wd0 \ifdim\wd2>\dimen0 \dimen0\wd2 \fi \setbox4\hbox to \dimen0{\exmthfont#2#3\leaders\hbox{#4}\hss#5}% \mathord{\vcenter{{\offinterlineskip \hbox to \dimen0{\hss\box0\hss}% \kern \ht4% \hbox to \dimen0{\hss\copy4\hss}% \kern \ht4% \hbox to \dimen0{\hss\box2\hss}}}}% \endgroup} \def\domthsqrt#1#2#3#4#5% {\begingroup \mathsurround\zeropoint \setbox0\hbox{$#1 #5$}% \dimen0=1.05\ht0 \advance\dimen0 1pt \ht0 \dimen0 \dimen0=1.05\dp0 \advance\dimen0 1pt \dp0 \dimen0 \dimen0\wd0 \setbox4\hbox to \dimen0{\exmthfont#2\leaders\hbox{#3}\hfill#4}% \delimitershortfall=0pt \nulldelimiterspace=0pt \setbox2\hbox{$\left\delimiter"0270370 \vrule height\ht0 depth \dp0 width0pt \right.$}% \mathord{\vcenter{\hbox{\copy2 \rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}% \endgroup} \unexpanded\def\mthfrac#1#2#3#4#5{\mathchoice {\domthfrac\displaystyle \textface {#1}{#2}{#3}{#4}{#5}} {\domthfrac\textstyle \textface {#1}{#2}{#3}{#4}{#5}} {\domthfrac\scriptstyle \scriptface {#1}{#2}{#3}{#4}{#5}} {\domthfrac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}} \unexpanded\def\mthsqrt#1#2#3{\mathchoice {\domthsqrt\displaystyle \textface {#1}{#2}{#3}} {\domthsqrt\textstyle \textface {#1}{#2}{#3}} {\domthsqrt\scriptstyle \textface {#1}{#2}{#3}} {\domthsqrt\scriptscriptstyle\textface {#1}{#2}{#3}}} %D Moved from math-new.tex (not that new anyway: %D \macros %D {genfrac} %D %D [TH] The definition of \type {\genfrac} \& co. is not %D trivial, because it allows some flexibility. This is %D supposed to be a user||level command, but will fail quite %D desparately if called outside math mode (\CONTEXT\ redefines %D \type {\over}) %D %D [HH] We clean up this macro a bit and (try) to make it %D understandable. The expansion is needed for generating %D the second argument to \type {\dogenfrac}, which is to %D be a control sequence like \type {\over}. \unexpanded\def\genfrac#1#2#3#4% {\edef\!!stringa {#1#2}% \expanded {\dogenfrac{#4}% \csname \ifx @#3@% \ifx\!!stringa\empty \strippedcsname\normalover \else \strippedcsname\normaloverwithdelims \fi \else \ifx\!!stringa\empty \strippedcsname\normalabove \else \strippedcsname\normalabovewithdelims \fi \fi \endcsname}% {#1#2#3}} \def\dogenfrac#1#2#3#4#5% {{#1{\begingroup#4\endgroup#2#3\relax#5}}} %D \macros %D {dfrac, tfrac, frac, dbinom, tbinom, binom} %D %D \startbuffer %D $\dfrac {1}{2} \tfrac {1}{2} \frac {1}{2}$ %D $\dbinom{1}{2} \tbinom{1}{2} \binom{1}{2}$ %D \stopbuffer %D %D \typebuffer %D %D \getbuffer \unexpanded\def\dfrac {\genfrac\empty\empty{}\displaystyle} \unexpanded\def\tfrac {\genfrac\empty\empty{}\textstyle} \unexpanded\def\frac {\genfrac\empty\empty{}\donothing} \unexpanded\def\dbinom{\genfrac()\zeropoint\displaystyle} \unexpanded\def\tbinom{\genfrac()\zeropoint\textstyle} \unexpanded\def\binom {\genfrac()\zeropoint\donothing} \unexpanded\def\xfrac {\genfrac\empty\empty{}\scriptstyle} \unexpanded\def\xxfrac{\genfrac\empty\empty{}\scriptscriptstyle} \unexpanded\def\frac#1#2{\mathematics{\genfrac\empty\empty{}\donothing{#1}{#2}}} %D \macros %D {cfrac} %D %D \startbuffer %D $\cfrac{12}{3} \cfrac[l]{12}{3} \cfrac[c]{12}{3} \cfrac[r]{12}{3}$ %D $\cfrac{1}{23} \cfrac[l]{1}{23} \cfrac[c]{1}{23} \cfrac[r]{1}{23}$ %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D Now we can align every combination we want: %D %D \startbuffer %D $\cfrac{12}{3} \cfrac[l]{12}{3} \cfrac[c]{12}{3} \cfrac[r]{12}{3}$ %D $\cfrac{1}{23} \cfrac[l]{1}{23} \cfrac[c]{1}{23} \cfrac[r]{1}{23}$ %D $\cfrac[cl]{12}{3} \cfrac[cc]{12}{3} \cfrac[cr]{12}{3}$ %D $\cfrac[lc]{1}{23} \cfrac[cc]{1}{23} \cfrac[rc]{1}{23}$ %D \stopbuffer %D %D \typebuffer %D %D \getbuffer \definecomplexorsimple\cfrac \def\simplecfrac {\docfrac[cc]} \def\complexcfrac[#1]{\docfrac[#1cc]} \def\docfrac[#1#2#3]#4#5% {{\displaystyle \frac {\strut \ifx r#1\hfill\fi#4\ifx l#1\hfill\fi}% {\ifx r#2\hfill\fi#5\ifx l#2\hfill\fi}% \kern-\nulldelimiterspace}} %D \macros %D {splitfrac, splitdfrac} %D %D Occasionally one needs to typeset multi||line fractions. %D These commands use \tex{genfrac} to create such fractions. %D %D \startbuffer %D \startformula %D a=\frac{ %D \splitfrac{xy + xy + xy + xy + xy} %D {+ xy + xy + xy + xy} %D } %D {z} %D =\frac{ %D \splitdfrac{xy + xy + xy + xy + xy} %D {+ xy + xy + xy + xy} %D } %D {z} %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D These macros are based on Michael J.~Downes posting on %D comp.text.tex on 2001/12/06 \unexpanded\def\splitfrac#1#2% {\genfrac\empty\empty\zeropoint\textstyle% {\textstyle#1\quad\hfill}% {\textstyle\hfill\quad\mathstrut#2}} \unexpanded\def\splitdfrac#1#2% {\genfrac\empty\empty\zeropoint\displaystyle% {#1\quad\hfill} {\hfill\quad\mathstrut #2}} %D For thee moment here, but it might move: %D \macros %D {qedsymbol} %D %D [HH] The general Quod Erat Domonstrandum symbol is defined %D in such a way that we can configure it. Because this symbol %D is also used in text mode, we make it a normal text symbol %D with special behavior. \unexpanded\def\qedsymbol#1% {\ifhmode \unskip~\hfill#1\par \else\ifmmode \eqno#1\relax % Do we really need the \eqno here? \else \leavevmode\hbox{}\hfill#1\par \fi\fi} \definesymbol [qed] [\qedsymbol{\mathematics{\square}}] %D \macros %D {QED} %D %D [HH] For compatbility reasons we also provide the \type %D {\QED} command. In case this command is overloaded, we still %D have the symbol available. \symbol[qed] \unexpanded\def\QED{\symbol[qed]} %D \macros %D {mathhexbox} %D %D [TH] \type {\mathhexbox} is also user||level (already %D defined in Plain \TEX). It allows to get a math character %D inserted as if it was a text character. \unexpanded\def\mathhexbox#1#2#3% {\mathtext{$\mathsurround\zeropoint\mathchar"#1#2#3$}} %D \macros %D {boxed} %D %D [HH] Another macro that users expect (slightly adapted): \unexpanded\def\boxed {\ifmmode\expandafter\mframed\else\expandafter\framed\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-pag.lua0000644000175000017500000000200311571377075024076 0ustar norbertnorbertif not modules then modules = { } end modules ['node-pag'] = { version = 1.001, comment = "companion to node-pag.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this callback might disappear and come back in the same way -- as par builders pagebuilders = pagebuilders or { } local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming local actions = nodes.tasks.actions("pagebuilders") local function processor(head,groupcode,size,packtype,maxdepth,direction) starttiming(pagebuilders) local _, done = actions(head,groupcode,size,packtype,maxdepth,direction) stoptiming(pagebuilders) return (done and head) or true -- return vpack(head) end --~ callbacks.register('pre_output_filter', processor, "preparing output box") --~ statistics.register("output preparation time", function() --~ return statistics.elapsedseconds(pagebuilders) --~ end) context-2013.05.28.20130704/texmf-dist/tex/context/base/data-use.lua0000644000175000017500000000751112130411274024076 0ustar norbertnorbertif not modules then modules = { } end modules ['data-use'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local report_mounts = logs.reporter("resolvers","mounts") local resolvers = resolvers -- we will make a better format, maybe something xml or just text or lua resolvers.automounted = resolvers.automounted or { } function resolvers.automount(usecache) local mountpaths = resolvers.cleanpathlist(resolvers.expansion('TEXMFMOUNT')) if (not mountpaths or #mountpaths == 0) and usecache then mountpaths = caches.getreadablepaths("mount") end if mountpaths and #mountpaths > 0 then statistics.starttiming(resolvers.instance) for k=1,#mountpaths do local root = mountpaths[k] local f = io.open(root.."/url.tmi") if f then for line in f:lines() do if line then if find(line,"^[%%#%-]") then -- or %W -- skip elseif find(line,"^zip://") then if trace_locating then report_mounts("mounting %a",line) end table.insert(resolvers.automounted,line) resolvers.usezipfile(line) end end end f:close() end end statistics.stoptiming(resolvers.instance) end end -- status info statistics.register("used config file", function() return caches.configfiles() end) statistics.register("used cache path", function() return caches.usedpaths() end) -- experiment (code will move) function statistics.savefmtstatus(texname,formatbanner,sourcefile) -- texname == formatname local enginebanner = status.list().banner if formatbanner and enginebanner and sourcefile then local luvname = file.replacesuffix(texname,"luv") -- utilities.lua.suffixes.luv local luvdata = { enginebanner = enginebanner, formatbanner = formatbanner, sourcehash = md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"), sourcefile = sourcefile, } io.savedata(luvname,table.serialize(luvdata,true)) end end -- todo: check this at startup and return (say) 999 as signal that the run -- was aborted due to a wrong format in which case mtx-context can trigger -- a remake function statistics.checkfmtstatus(texname) local enginebanner = status.list().banner if enginebanner and texname then local luvname = file.replacesuffix(texname,"luv") -- utilities.lua.suffixes.luv if lfs.isfile(luvname) then local luv = dofile(luvname) if luv and luv.sourcefile then local sourcehash = md5.hex(io.loaddata(resolvers.findfile(luv.sourcefile)) or "unknown") local luvbanner = luv.enginebanner or "?" if luvbanner ~= enginebanner then return format("engine mismatch (luv: %s <> bin: %s)",luvbanner,enginebanner) end local luvhash = luv.sourcehash or "?" if luvhash ~= sourcehash then return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash) end else return "invalid status file" end else return "missing status file" end end return true end context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-tbl.mkiv0000644000175000017500000025120312130411274024260 0ustar norbertnorbert%D \module %D [ file=core-tbl, %D version=1998.11.03, %D title=\CONTEXT\ Table Macros, %D subtitle=Text Flow Tabulation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Tabulation} \unprotect \registerctxluafile{tabl-tbl.lua}{1.001} % experiment %D I can probably reimplement this using a \LUATEX\ combination %D but it does not pay of in development time. If I need something %D else I will write it from scratch anyway. This module looks %D a bit complex which is a consequence of it dealing with paragraphs %D being split over pages and that there are several passes over the %D data set. We can probably do some cleanup (combine/split). %D %D Caching the preamble does not save much (compared to other %D bits and pieces of \CONTEXT). There are not that many ways to %D deal with preambles and this is just one of them. The keys are %D somewhat similar to those of the \TABLE\ package. % |p2|p3| 2:3 -> spanning (maybe) % % In-text tabbing environment % % \starttabulate[| separated template] % eg [|l|p|] or [|l|p|p|] % \NC ... \NC ... \NC\NR % \stoptabulate % % with: two pass auto width calculation when no p-width % specified, even with multiple p's, see examples. % % TaBlE compatible specifications: % % l align column/paragraph left % r align column/paragraph right % c align column/paragraph center % p p(dimen) of automatisch als alleen p % w column width % f font#1 % B bold % I italic % S slanted % T type % R roman % m math % M display math % h hook (inner level or par lines) % b before (may be command#1) % a after % i i skip left of column % j i skip right of column % k i skip around column % d digits (~) % % C [LMRT] {color} % T is text color % % | {color,n} % % s setups % % g g{char} align at char % . align at . % , align at , % % Still to be done % % N math numbers (best hook into existing digits mechanism) % n numbers (best hook into existing digits mechanism) % Q math numbers (best hook into existing digits mechanism) % q numbers (best hook into existing digits mechanism) % ~ \hskip.5em % | check % % nesting % % 10 evt auto stack; dan wel andere signal dan void nodig % % present but not yet 100% ok % % \TL [width,color] bottom hrule % \FL [width,color] first hrule % \ML [width,color] mid hrule (with auto split) % \LL [width,color] bottom hrule % \BL [width,color] last hrule % % \HL [width,color] top rule % \VL [width,color] % % \CC \CL \CM \CR color % % \EQ \RQ \HQ equal (raw, hook) % \NC \RC \HC normal (raw, hook) % % \NR checked break % \NB no break % % \HR : rule with lineheight % % \autotabulaterule : with lineheight, not first/last % \autotabulateline : spaced, not first/last % \tabulaterule : with lineheight % \tabulateline : spaced % % tricky: align scans ahead, over # and expands ones before % while doing % % new: % % \starttabulate[|cg{.}|cg{,}|cg{,}|] % \NC period \NC comma \NC comma \NC\NR % \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR % \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \stoptabulate % % \starttabulate[|c.|c,|c,|] % \NC period \NC comma \NC comma \NC\NR % \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR % \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \stoptabulate % nice demo (for BG) % % \starttabulate[|r|b{$\star$}|ra{\percent}|b{=}|r|] % \NC 500 \NC \NC 60 \NC \NC 300 \NC \NR % \NC 500 \NC \NC 55 \NC \NC 275 \NC \NR % \NC 500 \NC \NC 50 \NC \NC 250 \NC \NR % \NC 500 \NC \NC 45 \NC \NC 225 \NC \NR % \NC 500 \NC \NC 40 \NC \NC 200 \NC \NR % \NC 500 \NC \NC 35 \NC \NC 175 \NC \NR % \NC 500 \NC \NC 30 \NC \NC 150 \NC \NR % \NC 500 \NC \NC 25 \NC \NC 125 \NC \NR % \NC 500 \NC \NC 20 \NC \NC 100 \NC \NR % \stoptabulate \newtoks \t_tabl_tabulate_preamble \newtoks \t_tabl_tabulate_before \newtoks \t_tabl_tabulate_after \newtoks \t_tabl_tabulate_bmath \newtoks \t_tabl_tabulate_emath \newtoks \t_tabl_tabulate_font \newtoks \t_tabl_tabulate_settings \newtoks \t_tabl_tabulate_dummy \newtoks \t_tabl_tabulate_every_row \newtoks \t_tabl_tabulate_every_after_row \newtoks \t_tabl_tabulate_initializers_first \newtoks \t_tabl_tabulate_initializers_second \newcount \c_tabl_tabulate_nofauto \newcount \c_tabl_tabulate_columns \newcount \c_tabl_tabulate_column \newcount \c_tabl_tabulate_plines_min \newcount \c_tabl_tabulate_plines_max \newcount \c_tabl_tabulate_max_colorcolumn \newcount \c_tabl_tabulate_repeathead \newcount \c_tabl_tabulate_noflines \newcount \c_tabl_tabulate_totalnoflines \newcount \c_tabl_tabulate_minusnoflines \newcount \c_tabl_tabulate_align \newcount \c_tabl_tabulate_nofcolumns % set at the lua end by parser \newcount \c_tabl_tabulate_has_rule_spec_first % set at the lua end by parser (for the moment a count) \newcount \c_tabl_tabulate_has_rule_spec_last % set at the lua end by parser (for the moment a count) \newconditional \c_tabl_tabulate_nopbreak \newconditional \c_tabl_tabulate_firstflushed \newconditional \c_tabl_tabulate_equal \newconditional \c_tabl_tabulate_split \settrue\c_tabl_tabulate_split \newconditional \c_tabl_tabulate_automode \newconditional \c_tabl_tabulate_handlepbreak \settrue\c_tabl_tabulate_handlepbreak \newconditional \c_tabl_tabulate_autorulespacing \settrue\c_tabl_tabulate_autorulespacing \newconditional \c_tabl_tabulate_someamble \newconditional \c_tabl_tabulate_tolerant_break \newconditional \c_tabl_tabulate_splitoff_whitespace \newconditional \c_tabl_tabulate_pwidth_set \newconditional \c_tabl_tabulate_reshape \newdimen \d_tabl_tabulate_width_p \newdimen \d_tabl_tabulate_width_w \newdimen \d_tabl_tabulate_width \newdimen \d_tabl_tabulate_unit \newdimen \d_tabl_tabulate_height_p_max \newdimen \d_tabl_tabulate_vrulethickness_default \newdimen \d_tabl_tabulate_hrulethickness_default \newdimen \d_tabl_tabulate_vrulethickness \newdimen \d_tabl_tabulate_hrulethickness % not used \newdimen \d_tabl_tabulate_vrulethickness_local \newdimen \d_tabl_tabulate_hrulethickness_local \newdimen \d_tabl_tabulate_indent \newdimen \d_tabl_tabulate_splitoff_betweenskip \newdimen \d_tabl_tabulate_margin \newskip \s_tabl_tabulate_pre \newskip \s_tabl_tabulate_post \newskip \s_tabl_tabulate_first \newskip \s_tabl_tabulate_last \newskip \s_tabl_tabulate_separator \newbox \b_tabl_tabulate \newconstant \c_tabl_tabulate_pass \newconstant \c_tabl_tabulate_type \newconstant \c_tabl_tabulate_splitlinemode \c_tabl_tabulate_splitlinemode\plusone \newconstant \c_tabl_tabulate_colorspan \newconstant \c_tabl_tabulate_localcolorspan \newconstant \c_tabl_tabulate_modus \let\tabulatesplitlinemode\c_tabl_tabulate_splitlinemode % temp hack, we need an interface \let \m_tabl_tabulate_separator_factor \empty % fraction \newif \iftracetabulate % will become a tracker \newtoks \everytabulatepar % where used ? \newtoks \everytabulate % public ? \unexpanded\def\tolerantTABLEbreaktrue {\settrue \c_tabl_tabulate_tolerant_break} % used in styles ! \unexpanded\def\handletabulatepbreakfalse{\setfalse\c_tabl_tabulate_handlepbreak } % depricated \installcorenamespace{tabulatealign} \installcorenamespace{tabulatebox} \installcorenamespace{tabulatesetup} \installcorenamespace{tabulatehook} \installcorenamespace{tabulatesplit} \installcorenamespace{tabulateseparator} \installcorenamespace{tabulatecolor} \installcorenamespace{tabulateheader} \installcorenamespace{tabulatealigning} \installcorenamespace{tabulatepreamble} \installcorenamespace{tabulatehead} \installcorenamespace{tabulatefoot} \installcorenamespace{tabulatenext} \def\b_tabl_tabulate_current#1% {\csname\??tabulatebox\number#1\endcsname} % beware, a synonym \def\tabl_tabulate_initialize_boxes#1% {\scratchcounter#1\relax \tabl_tabulate_initialize_boxes_step} \def\tabl_tabulate_initialize_boxes_step {\ifnum\scratchcounter>\zerocount \tabl_tabulate_initialize_box\scratchcounter \advance\scratchcounter\minusone \expandafter\tabl_tabulate_initialize_boxes_step \fi} \def\tabl_tabulate_initialize_box#1% also used elsewhere {\ifcsname\??tabulatebox\number#1\endcsname \tabl_tabulate_initialize_box_yes#1% \else \tabl_tabulate_initialize_box_nop#1% \fi} \def\tabl_tabulate_initialize_box_yes#1{\global \setbox\csname\??tabulatebox\number#1\endcsname\emptybox} \def\tabl_tabulate_initialize_box_nop#1{\expandafter\newbox\csname\??tabulatebox\number#1\endcsname} \tabl_tabulate_initialize_boxes{16} % not really needed \let\initializetablebox \tabl_tabulate_initialize_box % used elsewhere, will change \let\initializetableboxes\tabl_tabulate_initialize_boxes % used elsewhere, will change \let\tablebox \b_tabl_tabulate_current % 0 = NC column next EQ equal column % 1 = RC column raw RQ equal column raw % 2 = HC column hook HQ equal column hook % handy helper \def\tabulatenoalign % public ? {\noalign \bgroup \let\noalign\relax \let\tabulatenoalign\relax \let\next=} \def\starttabulatenoalign % public ? {\tabulatenoalign\bgroup} \let\stoptabulatenoalign\egroup % [|lg{.}|] => \NG 12.34 \NC \def\tabl_tabulate_charalign#1 % space delimited ! (will be redone in lua) {\edef\alignmentclass{\the\c_tabl_tabulate_column}% \edef\alignmentcharacter{\csname\??tabulatealign\the\c_tabl_tabulate_column\endcsname}% \ifcase\c_tabl_tabulate_pass\or \setfirstpasscharacteralign\checkalignment{#1}% \fi % force hsize \setsecondpasscharacteralign\checkalignment{#1}} \def\tabl_tabulate_nobreak_inject_tracer {\red % maybe use the fast color switcher here \hrule\s!height.5\linewidth\s!depth.5\linewidth \par \kern-\linewidth \tabl_tabulate_break_no} \def\tabl_tabulate_nobreak_inject_indeed {\tabl_tabulate_break_no \iftracetabulate \tabl_tabulate_nobreak_inject_tracer \fi} \def\tabl_tabulate_nobreak_inject {\tabulatenoalign{\tabl_tabulate_nobreak_inject_indeed}} \unexpanded\def\tabl_tabulate_hook_check {\ifnum\c_tabl_tabulate_type<\plustwo \glet\tabl_tabulate_hook\tabl_tabulate_hook_nop \else \glet\tabl_tabulate_hook\tabl_tabulate_hook_yes \fi} \unexpanded\def\tabl_tabulate_setups_check {\csname\??tabulatesetup\the\c_tabl_tabulate_column\endcsname} \unexpanded\def\tabl_tabulate_entry_before{\ignorespaces\tabl_tabulate_hook} \unexpanded\def\tabl_tabulate_entry_after {\unskip\unskip\ifmmode\else\endgraf\fi} \unexpanded\def\tabl_tabulate_shaped_par_begin {\dowithnextboxcs\tabl_tabulate_shaped_par_finish\vbox\bgroup} \def\tabl_tabulate_shaped_par_finish {\ctxcommand{doreshapeframedbox(\number\nextbox)}% \ifvmode\unvbox\else\box\fi\nextbox} \let\tabl_tabulate_shaped_par_end\egroup \ifdefined\dotagtabulatecell \else \let\dotagtabulatecell \relax \fi \ifdefined\dotagtabulatesignal \else \let\dotagtabulatesignal\relax \fi \unexpanded\def\tabl_tabulate_check_local_color_first#1#2% {\relax} \unexpanded\def\tabl_tabulate_check_local_color_second#1#2% {\relax \ifx\m_tabl_tabulate_color_local\empty \xdef\m_tabl_tabulate_color{#1}% \else \global\let\m_tabl_tabulate_color\m_tabl_tabulate_color_local \global\let\m_tabl_tabulate_color_local\empty \fi \ifcase\c_tabl_tabulate_localcolorspan \global\c_tabl_tabulate_colorspan#2\relax \else \global\c_tabl_tabulate_colorspan\c_tabl_tabulate_localcolorspan \global\c_tabl_tabulate_localcolorspan\zerocount \fi} \unexpanded\def\tabl_tabulate_check_local_vrule_thickness#1% {\relax \ifcase\d_tabl_tabulate_vrulethickness_local \global\d_tabl_tabulate_vrulethickness#1\relax \else \global\d_tabl_tabulate_vrulethickness\d_tabl_tabulate_vrulethickness_local \global\d_tabl_tabulate_vrulethickness_local\zeropoint \fi} \unexpanded\def\tabl_tabulate_check_local_vrule_color_first#1% {\relax} \unexpanded\def\tabl_tabulate_check_local_vrule_color_second#1% {\relax \ifx\m_tabl_tabulate_vrule_color_local\empty \gdef\m_tabl_tabulate_vrule_color{#1}% \else \global\let\m_tabl_tabulate_vrule_color\m_tabl_tabulate_vrule_color_local \global\let\m_tabl_tabulate_vrule_color_local\empty \fi} \let\tabl_tabulate_check_local_color \gobbletwoarguments \let\tabl_tabulate_check_local_vrule_color\gobbleoneargument \appendtoks \let\tabl_tabulate_check_local_color \tabl_tabulate_check_local_color_first \let\tabl_tabulate_check_local_vrule_color\tabl_tabulate_check_local_vrule_color_first \to \t_tabl_tabulate_initializers_first \appendtoks \let\tabl_tabulate_check_local_color \tabl_tabulate_check_local_color_second \let\tabl_tabulate_check_local_vrule_color\tabl_tabulate_check_local_vrule_color_second \to \t_tabl_tabulate_initializers_second % \unexpanded % we can expand this one \def\tabl_tabulate_inject_pre_skip#1% {\ifdim#1>\zeropoint \kern#1\relax % was \hskip \else\ifnum\c_tabl_tabulate_column=\zerocount \ifconditional\c_tabl_tabulate_autorulespacing \ifcase\c_tabl_tabulate_has_rule_spec_first\else \kern\s_tabl_tabulate_first\relax % was \hskip \fi \fi \fi\fi} % \unexpanded % we can expand this one \def\tabl_tabulate_inject_post_skip#1% {\ifdim#1>\zeropoint \kern#1\relax % was \hskip \else\ifnum\c_tabl_tabulate_columns=\c_tabl_tabulate_nofcolumns \ifconditional\c_tabl_tabulate_autorulespacing \ifcase\c_tabl_tabulate_has_rule_spec_last\else \kern\s_tabl_tabulate_last\relax % was \hskip \fi \fi \fi\fi} \let\tabl_tabulate_hook_b\donothing \let\tabl_tabulate_hook_e\donothing \def\tabl_tabulate_set_preamble_step#1#2% only makes sense for many tabulates {\normalexpanded{\t_tabl_tabulate_preamble{\the\t_tabl_tabulate_preamble \tabl_tabulate_check_local_vrule_thickness\constantdimenargument\d_tabl_tabulate_vrulethickness \tabl_tabulate_check_local_vrule_color\constantemptyargument\m_tabl_tabulate_vrule_color \tabl_tabulate_check_local_color\constantemptyargument\m_tabl_tabulate_color\constantnumberargument\c_tabl_tabulate_colorspan \tabl_tabulate_color_side_right \aligntab \tabl_tabulate_column_vrule_inject \tabl_tabulate_color_side_left \tabl_tabulate_inject_pre_skip{\the\s_tabl_tabulate_pre}% \alignmark\alignmark \aligntab \tabl_tabulate_color_side_both \global\c_tabl_tabulate_colorspan\zerocount \global\c_tabl_tabulate_column\constantnumber\c_tabl_tabulate_columns \tabl_tabulate_setups_check % unexpandable \tabl_tabulate_hook_check % unexpandable \ifzeropt\d_tabl_tabulate_width \ifcase\c_tabl_tabulate_modus\else \settrue\c_tabl_tabulate_automode \fi \else \ifcase\c_tabl_tabulate_modus \hbox to \else \hsize \fi \the\d_tabl_tabulate_width \fi \bgroup \tabl_tabulate_bbskip \bgroup % we cannot combine the if because a cell may have only one ## \tabl_tabulate_hook_b \c_tabl_tabulate_align\constantnumber\c_tabl_tabulate_align % needed in tag passing \noexpand\dostarttagged\noexpand\t!tabulatecell\noexpand\empty \noexpand\dotagtabulatecell \noexpand#1% \ifconditional\c_tabl_tabulate_reshape \tabl_tabulate_shaped_par_begin \fi \dotagtabulatesignal % empty cells .. todo (can be removed as soon as build) \noexpand\ifnum\noexpand\c_tabl_tabulate_type=\plusone\noexpand\else \the\t_tabl_tabulate_bmath % maybe later? can interfere with char 0 \the\t_tabl_tabulate_font \the\t_tabl_tabulate_settings \the\t_tabl_tabulate_before \ifx\m_tabl_tabulate_text_color\empty \expandafter\gobbleoneargument \else \expandafter\dofastcoloractivation \fi\m_tabl_tabulate_text_color \noexpand\fi % grouping needs to be outside macros (or expandable), nice test % example \NC \string \aligntab \NC which will fail otherwise (mk) \bgroup \tabl_tabulate_entry_before \alignmark\alignmark \tabl_tabulate_entry_after \egroup \noexpand\ifnum\noexpand\c_tabl_tabulate_type=\plusone\noexpand\else \the\t_tabl_tabulate_after \the\t_tabl_tabulate_emath \noexpand\fi \ifconditional\c_tabl_tabulate_reshape \tabl_tabulate_shaped_par_end \fi \noexpand#2% \tabl_tabulate_hook_e \egroup \egroup \aligntab \noexpand\dostoptagged \tabl_tabulate_inject_post_skip{\the\s_tabl_tabulate_post}% \alignmark\alignmark }}% \t_tabl_tabulate_dummy\expandafter{\the\t_tabl_tabulate_dummy\NC}% \s_tabl_tabulate_pre.5\d_tabl_tabulate_unit\relax \ifnum\c_tabl_tabulate_columns<\numexpr\c_tabl_tabulate_nofcolumns-\plusone\relax \s_tabl_tabulate_post\s_tabl_tabulate_pre \else \s_tabl_tabulate_post\zeropoint \fi %\let\gettabulateexit\dogettabulateexit % still needed ? \d_tabl_tabulate_width\zeropoint} \unexpanded\def\installtabulatepreambleoption#1#2% {\setvalue{\??tabulatepreamble\string#1}{#2}}% \installtabulatepreambleoption{x}{\c_tabl_tabulate_align\zerocount \tabl_tabulate_set_preamble} % internal \installtabulatepreambleoption{l}{\c_tabl_tabulate_align\plusone \tabl_tabulate_set_preamble} \installtabulatepreambleoption{r}{\c_tabl_tabulate_align\plustwo \tabl_tabulate_set_preamble} \installtabulatepreambleoption{c}{\c_tabl_tabulate_align\plusthree \tabl_tabulate_set_preamble} \installtabulatepreambleoption{p}{\tabl_tabulate_set_paragraph} \installtabulatepreambleoption{s}{\tabl_tabulate_set_setups} \installtabulatepreambleoption{w}{\tabl_tabulate_set_width} \installtabulatepreambleoption{f}{\tabl_tabulate_set_font} \installtabulatepreambleoption{B}{\t_tabl_tabulate_font{\bf}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{I}{\t_tabl_tabulate_font{\it}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{S}{\t_tabl_tabulate_font{\sl}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{T}{\t_tabl_tabulate_font{\tt}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{R}{\t_tabl_tabulate_font{\rm}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{m}{\t_tabl_tabulate_bmath{$}% \t_tabl_tabulate_emath{$}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{M}{\t_tabl_tabulate_bmath{$\displaystyle}\t_tabl_tabulate_emath{$}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{h}{\tabl_tabulate_set_hook} \installtabulatepreambleoption{b}{\tabl_tabulate_set_before} \installtabulatepreambleoption{a}{\tabl_tabulate_set_after} \installtabulatepreambleoption{i}{\tabl_tabulate_set_preskip} \installtabulatepreambleoption{j}{\tabl_tabulate_set_posskip} \installtabulatepreambleoption{k}{\tabl_tabulate_set_preposskip} \installtabulatepreambleoption{e}{\t_tabl_tabulate_settings\expandafter{\the\t_tabl_tabulate_settings\global\settrue\c_tabl_tabulate_equal}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{g}{\tabl_tabulate_set_align} \installtabulatepreambleoption{.}{\tabl_tabulate_set_align.} \installtabulatepreambleoption{,}{\tabl_tabulate_set_align,} \installtabulatepreambleoption{C}{\tabl_tabulate_set_color_span} \installtabulatepreambleoption{d}{\t_tabl_tabulate_settings\expandafter{\the\t_tabl_tabulate_settings\fixedspaces}% \tabl_tabulate_set_preamble} \installtabulatepreambleoption{ }{\tabl_tabulate_set_preamble} % We no longer deal with '~' here but map it onto 'd' instead. Of course % we could prefix a key with \type {\meaning} instead, which works ok (and % is needed in order to pseudo expand \type {\next}, but is ugly at the % same time. The 'd' stands for digitspace. % % \installtabulatepreambleoption{~}{...} % see 'd' % % Also, as there is always a key, we no longer do some after assigment or % future let but just pick up the key. % \installtabulatepreambleoption \s!unknown % % {\writestatus{tabulate}{unknown preamble key [\meaning\next]}% % \tabl_tabulate_set_preamble} % % \def\tabl_tabulate_set_preamble % {\afterassignment\dosettabulatepreamble\let\next=} % % \def\dosettabulatepreamble % {\ifx\next\relax \else % \csname\??tabulatepreamble % \ifcsname\??tabulatepreamble\next\endcsname\next\else\s!unknown\fi % \expandafter\endcsname % \fi} \installtabulatepreambleoption\relax {} % finished \def\tabl_tabulate_set_preamble#1% {\ifcsname\??tabulatepreamble\string#1\endcsname \expandafter\tabl_tabulate_set_preamble_yes \else \expandafter\tabl_tabulate_set_preamble_nop \fi{#1}} \def\tabl_tabulate_set_preamble_yes#1% {\csname\??tabulatepreamble\string#1\expandafter\endcsname} \def\tabl_tabulate_set_preamble_nop#1% {\writestatus{tabulate}{unknown preamble key: #1}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_preskip#1% {\doifnumberelse{#1} {\s_tabl_tabulate_pre#1\d_tabl_tabulate_unit\tabl_tabulate_set_preamble } {\s_tabl_tabulate_pre.5\d_tabl_tabulate_unit\tabl_tabulate_set_preamble#1}} \def\tabl_tabulate_set_posskip#1% {\doifnumberelse{#1} {\s_tabl_tabulate_post#1\d_tabl_tabulate_unit\tabl_tabulate_set_preamble } {\s_tabl_tabulate_post.5\d_tabl_tabulate_unit\tabl_tabulate_set_preamble#1}} \def\tabl_tabulate_set_preposskip#1% {\doifnumberelse{#1} {\s_tabl_tabulate_pre#1\d_tabl_tabulate_unit\s_tabl_tabulate_post\s_tabl_tabulate_pre\tabl_tabulate_set_preamble } {\s_tabl_tabulate_pre.5\d_tabl_tabulate_unit\s_tabl_tabulate_post\s_tabl_tabulate_pre\tabl_tabulate_set_preamble#1}} \def\tabl_tabulate_set_setups#1% {\setvalue{\??tabulatesetup\the\c_tabl_tabulate_columns}{\setups[#1]}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_hook#1% {\setvalue{\??tabulatehook\the\c_tabl_tabulate_columns}{#1}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_align#1% {\setvalue{\??tabulatealign\the\c_tabl_tabulate_columns}{#1}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_before#1% {\t_tabl_tabulate_before{#1}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_after#1% {\t_tabl_tabulate_after{#1}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_font#1% {\t_tabl_tabulate_font{#1}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_pickup_width {\doifnextparenthesiselse\tabl_tabulate_set_width_indeed\tabl_tabulate_set_preamble} \def\tabl_tabulate_set_width {\setfalse\c_tabl_tabulate_pwidth_set \c_tabl_tabulate_modus\zerocount \tabl_tabulate_pickup_width} \def\tabl_tabulate_set_paragraph {\doifnextparenthesiselse {\c_tabl_tabulate_modus\plusone \settrue\c_tabl_tabulate_pwidth_set \tabl_tabulate_pickup_width} {\c_tabl_tabulate_modus\plustwo \setfalse\c_tabl_tabulate_pwidth_set \tabl_tabulate_set_preamble}} % \startbuffer % \toplinebox{\framed[width=3cm,height=2cm]{tufte}} % \stopbuffer % \starttabulate[|p(fixed)|p|] % \dorecurse{100}{\NC \getbuffer \NC test \par test \par \NC \NR} % \stoptabulate % \starttabulate[|p(fit)|p|] % \dorecurse{100}{\NC \getbuffer \NC test \par test \par \NC \NR} % \stoptabulate \def\tabl_tabulate_set_width_indeed(#1)% {\processallactionsinset % can be made faster [#1]% [ \v!fit=>\c_tabl_tabulate_modus\plusthree, \v!fixed=>\c_tabl_tabulate_modus\plusthree \settrue\c_tabl_tabulate_nopbreak, \v!auto=>\c_tabl_tabulate_modus\plusthree \settrue\c_tabl_tabulate_reshape, \s!unknown=>\d_tabl_tabulate_width#1\relax]% \ifconditional\c_tabl_tabulate_pwidth_set \global\advance\d_tabl_tabulate_width_p\d_tabl_tabulate_width % accumulated parwidth \fi \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_raggedright {\ifnum\c_tabl_tabulate_type=\plusone \else\raggedright \fi} \def\tabl_tabulate_set_raggedcenter{\ifnum\c_tabl_tabulate_type=\plusone \else\raggedcenter\fi} \def\tabl_tabulate_set_raggedleft {\ifnum\c_tabl_tabulate_type=\plusone \else\raggedleft \fi} \def\tabl_tabulate_set_notragged {\ifnum\c_tabl_tabulate_type=\plusone \else\notragged \fi} \def\tabl_tabulate_set_hss {\ifnum\c_tabl_tabulate_type=\plusone \else\hss \fi} % never change this to a fill \def\tabl_tabulate_bskip_raggedright {\tabl_tabulate_bskip\tabl_tabulate_set_raggedright } \def\tabl_tabulate_bskip_raggedleft {\tabl_tabulate_bskip\tabl_tabulate_set_raggedleft } \def\tabl_tabulate_bskip_raggedcenter{\tabl_tabulate_bskip\tabl_tabulate_set_raggedcenter} \def\tabl_tabulate_set_width_normal {\ifcase\c_tabl_tabulate_align\relax \tabl_tabulate_set_preamble_step\empty \tabl_tabulate_set_hss \or \tabl_tabulate_set_preamble_step\empty \tabl_tabulate_set_hss \or \tabl_tabulate_set_preamble_step\tabl_tabulate_set_hss\empty \or \tabl_tabulate_set_preamble_step\tabl_tabulate_set_hss\tabl_tabulate_set_hss \fi} \def\tabl_tabulate_set_width_fixed {\ifcase\c_tabl_tabulate_align\relax \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip \tabl_tabulate_eskip \or \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip_raggedright \tabl_tabulate_eskip \or \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip_raggedleft \tabl_tabulate_eskip \or \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip_raggedcenter\tabl_tabulate_eskip \fi} \def\tabl_tabulate_set_width_auto {\global\advance\c_tabl_tabulate_nofauto\plusone \ifcase\c_tabl_tabulate_align\relax \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip \tabl_tabulate_eskip \or \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip_raggedright \tabl_tabulate_eskip \or \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip_raggedleft \tabl_tabulate_eskip \or \tabl_tabulate_set_preamble_step\tabl_tabulate_bskip_raggedcenter\tabl_tabulate_eskip \fi} \def\tabl_tabulate_set_width_simple {\tabl_tabulate_set_preamble_step\tabl_tabulate_xbskip\tabl_tabulate_xeskip} % \def\tabl_tabulate_set_color_span#1#2% % {\xdef\m_tabl_tabulate_color{#2}% % \global\c_tabl_tabulate_colorspan\if#1L\plusone\else\if#1M\plustwo\else\if#1R\plusthree\else\zerocount\fi\fi\fi\relax % \tabl_tabulate_set_preamble} \installcorenamespace{tabulatecolorspec} \setvalue{\??tabulatecolorspec L}#1{\xdef\m_tabl_tabulate_color {#1}\global\c_tabl_tabulate_colorspan\plusone } \setvalue{\??tabulatecolorspec M}#1{\xdef\m_tabl_tabulate_color {#1}\global\c_tabl_tabulate_colorspan\plustwo } \setvalue{\??tabulatecolorspec R}#1{\xdef\m_tabl_tabulate_color {#1}\global\c_tabl_tabulate_colorspan\plusthree} \setvalue{\??tabulatecolorspec T}#1{\xdef\m_tabl_tabulate_text_color{#1}} \def\tabl_tabulate_set_color_span#1#2% {\csname\??tabulatecolorspec#1\endcsname{#2}% \tabl_tabulate_set_preamble} \def\tabl_tabulate_set_vrule_command#1% {\doifnumberelse{#1} {\global\d_tabl_tabulate_vrulethickness#1\d_tabl_tabulate_vrulethickness_default} {\xdef\m_tabl_tabulate_vrule_color{#1}}} \def\tabl_tabulate_set_entry#1#2% rulespec template {\c_tabl_tabulate_align\v_tabl_tabulate_align \c_tabl_tabulate_modus\zerocount \setfalse\c_tabl_tabulate_pwidth_set \setfalse\c_tabl_tabulate_reshape \t_tabl_tabulate_before\emptytoks \t_tabl_tabulate_after\emptytoks \t_tabl_tabulate_bmath\emptytoks \t_tabl_tabulate_emath\emptytoks \t_tabl_tabulate_font\emptytoks \t_tabl_tabulate_settings\emptytoks \global\let\m_tabl_tabulate_color\empty \global\let\m_tabl_tabulate_text_color\empty \global\let\m_tabl_tabulate_vrule_color\empty \global\c_tabl_tabulate_colorspan\zerocount \global\advance\c_tabl_tabulate_columns\plusone \expandafter\let\csname\??tabulatesetup\the\c_tabl_tabulate_columns\endcsname\donothing % here ? \edef\currenttabulationtrulespec{#1}% \ifx\currenttabulationtrulespec\empty \global\d_tabl_tabulate_vrulethickness\zeropoint \else \global\d_tabl_tabulate_vrulethickness\d_tabl_tabulate_vrulethickness_default \rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command \fi \tabl_tabulate_set_preamble#2\relax\relax % permits i without n \ifcase\c_tabl_tabulate_modus\relax \tabl_tabulate_set_width_normal \or % fixed width \tabl_tabulate_set_width_fixed \or % auto width \tabl_tabulate_set_width_auto \or % simple \tabl_tabulate_set_width_simple \fi} \def\tabl_tabulate_set_last_entry#1% rulespec {\global\let\m_tabl_tabulate_vrule_color\empty \rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command \ifx\currenttabulationtrulespec\empty \global\d_tabl_tabulate_vrulethickness\zeropoint \else \global\d_tabl_tabulate_vrulethickness\d_tabl_tabulate_vrulethickness_default \rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command \fi \normalexpanded{\t_tabl_tabulate_preamble{\the\t_tabl_tabulate_preamble \tabl_tabulate_check_local_vrule_thickness\constantdimenargument\d_tabl_tabulate_vrulethickness \tabl_tabulate_check_local_vrule_color\constantemptyargument\m_tabl_tabulate_vrule_color \tabl_tabulate_column_vrule_inject}}% } \let\settabulateentry \tabl_tabulate_set_entry % used at the lua end \let\settabulatelastentry\tabl_tabulate_set_last_entry % used at the lua end \def\tabl_tabulate_normalize_splitline {\ifcase\c_tabl_tabulate_splitlinemode % nothing \or \ht\b_tabl_tabulate\strutht \dp\b_tabl_tabulate\strutdp \or \ifdim\ht\b_tabl_tabulate<\strutht \ht\b_tabl_tabulate\strutht \fi \ifdim\dp\b_tabl_tabulate<\strutdp \dp\b_tabl_tabulate\strutdp \fi \fi} \def\tabl_tabulate_whitespace {\ifdim\d_tabl_tabulate_splitoff_betweenskip>\zeropoint \vskip\d_tabl_tabulate_splitoff_betweenskip \global\d_tabl_tabulate_splitoff_betweenskip\zeropoint \fi} \def\tabl_tabulate_check_whitespace {\setbox\scratchbox\vbox {\splitdiscards \unskip \ifdim\lastskip>\d_tabl_tabulate_splitoff_betweenskip \global\d_tabl_tabulate_splitoff_betweenskip\lastskip \fi}} \def\tabl_tabulate_splitoff_box {\dontcomplain \global\setbox\b_tabl_tabulate\vsplit\b_tabl_tabulate_current\c_tabl_tabulate_column to \lineheight % % % global ? % % % \setbox\b_tabl_tabulate\vbox {\unvbox\b_tabl_tabulate}% \ifconditional\c_tabl_tabulate_splitoff_whitespace \tabl_tabulate_check_whitespace \fi \tabl_tabulate_color_repeat % needs to end up in a cell \setbox\b_tabl_tabulate\hbox to \wd\b_tabl_tabulate {\hss\tabl_tabulate_hook_yes{\box\b_tabl_tabulate}\hss}% \tabl_tabulate_normalize_splitline \box\b_tabl_tabulate} \unexpanded\def\tabl_tabulate_hook_nop {} \let\tabl_tabulate_hook\tabl_tabulate_hook_nop \def\tabl_tabulate_hook_yes {\csname\??tabulatehook \the\c_tabl_tabulate_column\endcsname} \def\tabl_tabulate_align_yes{\csname\??tabulatealign\the\c_tabl_tabulate_column\endcsname} % to be used \def\tabl_tabulate_pheight_reset {\global\c_tabl_tabulate_plines_min\plusone \ifdim\d_tabl_tabulate_height_p_max>\zeropoint \getnoflines\d_tabl_tabulate_height_p_max \global\c_tabl_tabulate_plines_max\noflines \else \global\c_tabl_tabulate_plines_max\zerocount \fi \global\d_tabl_tabulate_height_p_max\zeropoint} \def\tabl_tabulate_pheight_set {\scratchdimen\ht\b_tabl_tabulate_current\c_tabl_tabulate_column\relax \ifdim\scratchdimen>\d_tabl_tabulate_height_p_max \global\d_tabl_tabulate_height_p_max\scratchdimen \fi} \def\tabl_tabulate_pbreak_inject {\ifconditional\c_tabl_tabulate_handlepbreak \ifconditional\c_tabl_tabulate_nopbreak \tabl_tabulate_nobreak_inject \else\ifnum\c_tabl_tabulate_plines_max>\plusone \ifnum\c_tabl_tabulate_plines_min=\plusone \tabl_tabulate_nobreak_inject \fi \global\advance\c_tabl_tabulate_plines_min\plusone \ifnum\c_tabl_tabulate_plines_min=\c_tabl_tabulate_plines_max\relax \tabl_tabulate_nobreak_inject \fi \fi \fi \fi} \def\tabl_tabulate_pbreak_check {\starttabulatenoalign \tabl_tabulate_pbreak_inject \ifconditional\c_tabl_tabulate_splitoff_whitespace \tabl_tabulate_whitespace \fi \stoptabulatenoalign} %D \startbuffer %D \starttabulate[|c|p|p|] %D \NC \bf Alpha \NC \bf Beta \NC \bf Gamma \NC\NR %D \NC 1 \NC right indeed \NC definitely wrong \NC\NR %D \NC 2 \NC \thinrules[n=3] \NC \thinrules[n=3] \NC\NR %D \NC 3 \NC oh yes \NC simply no \NC\NR %D \NC 4 \NC very true \NC as false as can be \NC\NR %D \NC 5 \NC \thinrules[n=5] \NC \thinrules[n=5] \NC\NR %D \NC 6 \NC \thinrules[n=3] \NC \thinrules[n=4] \NC\NR %D \stoptabulate %D \stopbuffer %D %D \typebuffer {\tracetabulatetrue\getbuffer} %D %D \startbuffer %D \starttabulate[|c|p|p|] %D \NC \bf Alpha \NC \bf Beta \NC \bf Gamma \NC\NR %D \NC 1 \NC right indeed \NC definitely wrong \NC\NR %D \NC 2 \NC oh yes \NC simply no \NC\NR %D \NC 3 \NC very true \NC as false as can be \NC\NR %D \NC 4 \NC the whole truth \NC but the truth \NC\NR %D \stoptabulate %D \stopbuffer %D %D \typebuffer {\tracetabulatetrue\getbuffer} %D As we want to be compatible we use an indirect way to %D implement the definers. The next examples demonstrate %D the difference: %D %D \starttyping %D \definetabulate[test][|l|c|r|] %D \definetabulate[test][two][|r|c|l|] %D %D \definetabulation[more][format={|l|c|r|}] %D \definetabulation[more:two][format={|r|c|l|}] %D %D \starttest %D \NC t \NC t \NC t \NC \NR %D \NC te \NC te \NC te \NC \NR %D \NC tes \NC tes \NC tes \NC \NR %D \NC test \NC test \NC test \NC \NR %D \stoptest %D %D \starttest[two] %D \NC t \NC t \NC t \NC \NR %D \NC te \NC te \NC te \NC \NR %D \NC tes \NC tes \NC tes \NC \NR %D \NC test \NC test \NC test \NC \NR %D \stoptest %D \startmore %D \NC t \NC t \NC t \NC \NR %D \NC te \NC te \NC te \NC \NR %D \NC tes \NC tes \NC tes \NC \NR %D \NC test \NC test \NC test \NC \NR %D \stopmore %D %D \startmore[two] %D \NC t \NC t \NC t \NC \NR %D \NC te \NC te \NC te \NC \NR %D \NC tes \NC tes \NC tes \NC \NR %D \NC test \NC test \NC test \NC \NR %D \stopmore %D \stoptyping \installcorenamespace {tabulation} \installcommandhandler \??tabulation {tabulation} \??tabulation \setuptabulation [\c!unit=1em, EQ={:}, \c!format={|l|p|}, \c!frame=\v!off, %\c!bodyfont=, \c!rule=\v!normal, %\c!rulecolor=, \c!rulethickness=\linewidth, %\c!inner=, \c!before=\blank, \c!after=\blank, \c!distance={\v!depth,\v!medium}, \c!align=\v!normal, \c!margin=\!!zeropoint, \c!split=\v!auto, \c!header=\v!yes, %\c!title=, \c!indenting=\v!no] \unexpanded\def\definetabulate {\dotripleempty\tabl_tabulate_define} \def\tabl_tabulate_define[#1][#2][#3]% {\ifthirdargument % [tag] [sub] [template] \ifcsname\namedtabulationhash{#1}\s!check\endcsname \else \definetabulation[#1][\c!format={#3},\s!check=]% \fi \definetabulation[#1:#2][#1][\c!format={#3},\s!check=]% \else\ifsecondargument % [tag] [template] \definetabulation[#1][\c!format={#2},\s!check=]% \else % [tag] \definetabulation[#1][\c!format={|l|p|},\s!check=]% \fi\fi} \unexpanded\def\setuptabulate {\dotripleempty\tabl_tabulate_setup} \def\tabl_tabulate_setup[#1][#2][#3]% {\ifthirdargument % [tag] [sub] [settings] \setuptabulation[#1:#2][#3]% \else\ifsecondargument % [tag] [settings] \setuptabulation[#1][#2]% \else % [tag] \setuptabulation[#1]% \fi\fi} \appendtoks \setuevalue{\e!start\currenttabulation}{\tabl_start_defined[\currenttabulation]}% \letvalue{\??tabulatehead\currenttabulation}\empty \letvalue{\??tabulatefoot\currenttabulation}\empty \to \everydefinetabulation \let\tabulateparameter\tabulationparameter % will stay for a while \def\currenttabulate {\currenttabulation} % will stay for a while % Here begins the implementation. \let\tabl_tabulate_insert_head\empty \let\tabl_tabulate_insert_body\empty \let\tabl_tabulate_insert_foot\empty \def\tabl_tabulate_insert_head_content {\tabulatenoalign{\global\settrue\c_tabl_tabulate_someamble}% \csname\??tabulatehead\currenttabulation\endcsname \tabulatenoalign{\global\setfalse\c_tabl_tabulate_someamble}}% \def\tabl_tabulate_insert_foot_content {\tabulatenoalign{\global\settrue\c_tabl_tabulate_someamble}% \csname\??tabulatehead\currenttabulation\endcsname \tabulatenoalign{\global\setfalse\c_tabl_tabulate_someamble}}% \def\tabl_tabulate_check_full_content % - needed, else confusion with \c!header {\ifcsname\??tabulatehead\currenttabulation\endcsname \let\tabl_tabulate_insert_head\tabl_tabulate_insert_head_content \else \let\tabl_tabulate_insert_head\empty \fi \ifcsname\??tabulatefoot\currenttabulation\endcsname \let\tabl_tabulate_insert_foot\tabl_tabulate_insert_foot_content \else \let\tabl_tabulate_insert_foot\empty \fi} \def\tabl_tabulate_insert_content {\tabl_tabulate_insert_head \tabl_tabulate_insert_body \tabl_tabulate_insert_foot \tabl_tabulate_remove_funny_line} \def\tabl_tabulate_remove_funny_line {\ifhmode \strut\crcr \tabulatenoalign{\kern-\lineheight}% \fi} \setuvalue{\e!start\v!tabulatehead}{\doifnextoptionalelse\tabl_tabulate_start_head_yes\tabl_tabulate_start_head_nop} \setuvalue{\e!start\v!tabulatetail}{\doifnextoptionalelse\tabl_tabulate_start_foot_yes\tabl_tabulate_start_foot_nop} \let\m_tabl_tabulate_data\empty \def\tabl_tabulate_start_head_yes[#1]% {\processcontent{\e!stop\v!tabulatehead}\m_tabl_tabulate_data{\letvalue{\??tabulatehead#1}\m_tabl_tabulate_data}} \def\tabl_tabulate_start_foot_yes[#1]% {\processcontent{\e!stop\v!tabulatetail}\m_tabl_tabulate_data{\letvalue{\??tabulatefoot#1}\m_tabl_tabulate_data}} % \def\tabl_tabulate_start_head_nop{\tabl_tabulate_start_head_yes[\v!tabulate]} % \def\tabl_tabulate_start_foot_nop{\tabl_tabulate_start_foot_yes[\v!tabulate]} \def\tabl_tabulate_start_head_nop{\tabl_tabulate_start_head_yes[]} \def\tabl_tabulate_start_foot_nop{\tabl_tabulate_start_foot_yes[]} % \unexpanded\def\tabl_start_defined[#1]% % {\bgroup % \edef\currenttabulationparent{#1}% % \let\currenttabulation\currenttabulationparent % \doifnextoptionalelse\tabl_start_defined_yes\tabl_start_defined_nop} % % \def\tabl_start_defined_yes[#1]% % {\edef\currenttabulation{\currenttabulation:#1}% % \tabl_tabulate_start_building} % % \def\tabl_start_defined_nop % {\tabl_tabulate_start_building} \unexpanded\def\tabl_start_defined[#1]% {\bgroup \edef\currenttabulationparent{#1}% \let\currenttabulation\currenttabulationparent \dodoubleargument\tabl_start_defined_indeed} \def\tabl_start_defined_indeed {\iffirstargument \ifsecondargument \doubleexpandafter\tabl_start_defined_two \else \doubleexpandafter\tabl_start_defined_one \fi \else \singleexpandafter\tabl_start_defined_zero \fi} \def\tabl_start_defined_one[#1][#2]% {\doifassignmentelse{#1} {\setuptabulation[\currenttabulation][#1]}% {\edef\currenttabulation{\currenttabulation:#1}}% \tabl_tabulate_start_building} \def\tabl_start_defined_two[#1][#2]% {\edef\currenttabulation{\currenttabulation:#1}% \setuptabulation[\currenttabulation][#2]% \tabl_tabulate_start_building} \def\tabl_start_defined_zero[#1][#2]% {\tabl_tabulate_start_building} % \definetabulate[\v!tabulate][|l|p|] % we need to get rid of this one \unexpanded\setuvalue{\e!start\v!tabulate}% {\bgroup % whole thing \dodoubleempty\tabl_start_regular} % \def\tabl_start_regular[#1][#2]% % {%\let\currenttabulationparent\v!tabulate % \let\currenttabulationparent\empty % \let\currenttabulation\currenttabulationparent % \def\p_format{#1}% % \ifx\p_format\empty % \def\p_format{|l|p|}% % \fi % \lettabulationparameter\c!format\p_format % \ifsecondargument % \setupcurrenttabulation[#2]% % \fi % \tabl_tabulate_start_building} \def\tabl_start_regular {%\let\currenttabulationparent\v!tabulate \let\currenttabulationparent\empty \let\currenttabulation\currenttabulationparent \ifsecondargument \expandafter\tabl_start_regular_two \else \expandafter\tabl_start_regular_one \fi} \def\tabl_start_regular_one[#1][#2]% {\doifassignmentelse{#1} {\setupcurrenttabulation[\c!format={|l|p|},#1]} {\def\p_format{#1}% \ifx\p_format\empty \def\p_format{|l|p|}% \fi \lettabulationparameter\c!format\p_format}% \tabl_tabulate_start_building} \def\tabl_start_regular_two[#1][#2]% {\def\p_format{#1}% \ifx\p_format\empty \def\p_format{|l|p|}% \fi \lettabulationparameter\c!format\p_format \setupcurrenttabulation[#2]% \tabl_tabulate_start_building} \letvalue{\e!stop\v!tabulate }\relax \letvalue{\e!stop\v!tabulatehead}\relax \letvalue{\e!stop\v!tabulatetail}\relax \unexpanded\def\tabl_tabulate_start_ignore {\em Nested tabulate is not (yet) supported.\relax \expandafter\gobbleuntil\csname\e!stop\v!tabulate\endcsname} \appendtoks \letvalue{\e!start\v!tabulate}\tabl_tabulate_start_ignore % only the main one \to \everytabulate \setvalue{\??tabulatesplit\v!yes }{\settrue\c_tabl_tabulate_split} \setvalue{\??tabulatesplit\v!repeat}{\settrue\c_tabl_tabulate_split} \setvalue{\??tabulatesplit\v!no }{\setfalse\c_tabl_tabulate_split} \setvalue{\??tabulatesplit\v!auto }{\ifinsidefloat\ifinsidesplitfloat\else\setfalse\c_tabl_tabulate_split\fi\fi} % todo: spacing around tabulate when bodyfont is set \unexpanded\def\tabl_tabulate_start_building {\ifinsidefloat \else \whitespace \tabulationparameter\c!before \fi \bgroup % settings % \resetcharacteralign % \edef\p_distance {\tabulationparameter\c!distance}% \edef\p_align {\tabulationparameter\c!align}% \edef\p_line {\tabulationparameter\c!rule}% \edef\p_rulecolor {\tabulationparameter\c!rulecolor}% \edef\p_rulethickness{\tabulationparameter\c!rulethickness}% \edef\p_bodyfont {\tabulationparameter\c!bodyfont} \edef\p_indenting {\tabulationparameter\c!indenting}% % \settrue\c_tabl_tabulate_split \csname\??tabulatesplit\tabulationparameter\c!split\endcsname % \d_tabl_tabulate_unit\tabulationparameter\c!unit \d_tabl_tabulate_margin\tabulationparameter\c!margin \let\m_tabl_tabulate_vrule_color_default\p_rulecolor \let\m_tabl_tabulate_hrule_color_default\p_rulecolor \d_tabl_tabulate_vrulethickness_default\p_rulethickness \d_tabl_tabulate_hrulethickness_default\p_rulethickness \ifx\p_bodyfont\empty\else \switchtobodyfont[\p_bodyfont]% \fi \postponenotes % new, to be tested / will be configurable \widowpenalty\zerocount % otherwise lines are not broken \clubpenalty \zerocount % but overlap in funny ways \the\everytabulate \tabulationparameter\c!inner \d_tabl_tabulate_indent\dimexpr\leftskip+\hangindent\ifx\p_indenting\v!yes+\parindent\fi\relax \global\c_tabl_tabulate_column\zerocount \processcontent {\e!stop\ifx\currenttabulationparent\empty\v!tabulate\else\currenttabulationparent\fi} \tabl_tabulate_insert_body \tabl_tabulate_process} \def\tabulateEQ {\ifconditional\c_tabl_tabulate_firstflushed\else\tabulationparameter{EQ}\fi \global\setfalse\c_tabl_tabulate_equal} % The next ones will be token registers \let\tabulatenormalpos\relax % hooks, todo \let\tabulateequalpos \relax % hooks, todo % color columns \let\m_tabl_tabulate_color_previous \empty \let\m_tabl_tabulate_color \empty \let\m_tabl_tabulate_text_color \empty \let\m_tabl_tabulate_color_local \empty \let\m_tabl_tabulate_vrule_color \empty \let\m_tabl_tabulate_vrule_color_local \empty \let\m_tabl_tabulate_vrule_color_default\empty % used local \let\m_tabl_tabulate_hrule_color_default\empty % used local \appendtoks \global\let\m_tabl_tabulate_color_previous \empty \global\let\m_tabl_tabulate_color \empty \global\let\m_tabl_tabulate_text_color \empty \global\let\m_tabl_tabulate_color_local \empty \global\let\m_tabl_tabulate_vrule_color \empty \global\let\m_tabl_tabulate_vrule_color_local \empty \global \d_tabl_tabulate_vrulethickness_local\zeropoint \to \t_tabl_tabulate_every_row \unexpanded\def\tabl_tabulate_color_side_right_second {\ifx\m_tabl_tabulate_color_previous\empty \else \tabl_tabulate_color_set\m_tabl_tabulate_color_previous \glet\m_tabl_tabulate_color_previous\empty \fi} \unexpanded\def\tabl_tabulate_color_side_left_second {\ifx\m_tabl_tabulate_color\empty \else \ifcase\c_tabl_tabulate_colorspan \or \tabl_tabulate_color_set\m_tabl_tabulate_color \or \tabl_tabulate_color_set\m_tabl_tabulate_color \fi \fi} \unexpanded\def\tabl_tabulate_color_side_both_second {\ifx\m_tabl_tabulate_color\empty \else \tabl_tabulate_color_set\m_tabl_tabulate_color \ifcase\c_tabl_tabulate_colorspan %\glet\m_tabl_tabulate_color_previous\empty \or \glet\m_tabl_tabulate_color_previous\empty \or \glet\m_tabl_tabulate_color_previous\m_tabl_tabulate_color \or \glet\m_tabl_tabulate_color_previous\m_tabl_tabulate_color \fi \fi} \let\tabl_tabulate_color_side_right \relax \let\tabl_tabulate_color_side_left \relax \let\tabl_tabulate_color_side_both \relax \appendtoks \let\tabl_tabulate_color_side_right\tabl_tabulate_color_side_right_second \let\tabl_tabulate_color_side_left \tabl_tabulate_color_side_left_second \let\tabl_tabulate_color_side_both \tabl_tabulate_color_side_both_second \to \t_tabl_tabulate_initializers_second \def\tabl_tabulate_set_color_column#1% overloaded {\unskip \doiffastoptionalcheckelse{\tabl_tabulate_set_color_column_yes#1}{\tabl_tabulate_set_color_column_nop#1}} \def\tabl_tabulate_set_color_column_nop {\tabl_tabulate_column_normal} \def\tabl_tabulate_set_color_column_yes#1[#2]% {\xdef\m_tabl_tabulate_color_local{#2}% \tabl_tabulate_column_normal#1} % normal columns: \def\tabl_tabulate_column_normal#1% {\unskip \aligntab \ifconditional\c_tabl_tabulate_equal\tabulateequalpos\else\tabulatenormalpos\fi \aligntab \global\c_tabl_tabulate_type#1% \aligntab} % equal columns \def\tabl_tabulate_column_equal#1% {\unskip \aligntab \tabulateequalpos \aligntab\global\c_tabl_tabulate_type#1% \aligntab} % ruled columns \def\tabl_tabulate_column_vruled#1% {\unskip % 0-n % \ifnum\c_tabl_tabulate_column=\plusone % \global\c_tabl_tabulate_has_rule_spec_first\plusone % \else\ifnum\c_tabl_tabulate_column=\c_tabl_tabulate_nofcolumns % \global\c_tabl_tabulate_has_rule_spec_last\plusone % \fi\fi \global\let\m_tabl_tabulate_vrule_color_local\m_tabl_tabulate_vrule_color_default \global\d_tabl_tabulate_vrulethickness_local\d_tabl_tabulate_vrulethickness_default \doiffastoptionalcheckelse{\tabl_tabulate_column_vruled_yes#1}{\tabl_tabulate_column_vruled_nop#1}} \def\tabl_tabulate_column_vruled_nop {\tabl_tabulate_column_normal} \def\tabl_tabulate_column_vruled_step#1% {\doifnumberelse{#1} {\global\d_tabl_tabulate_vrulethickness_local#1\d_tabl_tabulate_vrulethickness_default} {\xdef\m_tabl_tabulate_vrule_color_local{#1}}} \def\tabl_tabulate_column_vruled_yes#1[#2]% {\rawprocesscommalist[#2]\tabl_tabulate_column_vruled_step \tabl_tabulate_column_normal#1} \def\tabl_tabulate_column_vruled_normal {\vrule\s!width\d_tabl_tabulate_vrulethickness\relax} \def\tabl_tabulate_column_vruled_colored {\dousecolorparameter\m_tabl_tabulate_vrule_color \vrule\s!width\d_tabl_tabulate_vrulethickness\relax} \unexpanded\def\tabl_tabulate_column_vrule_inject_first {\ifcase\d_tabl_tabulate_vrulethickness\else \tabl_tabulate_column_vruled_normal % could be a skip instead \fi \global\d_tabl_tabulate_vrulethickness\zeropoint} % nils second one \unexpanded\def\tabl_tabulate_column_vrule_inject_second {\ifcase\d_tabl_tabulate_vrulethickness\else \ifx\m_tabl_tabulate_vrule_color\empty \tabl_tabulate_column_vruled_normal \else \tabl_tabulate_column_vruled_colored \fi \fi \global\d_tabl_tabulate_vrulethickness\zeropoint} % nils second one \let\tabl_tabulate_column_vrule_inject\relax \appendtoks \let\tabl_tabulate_column_vrule_inject\tabl_tabulate_column_vrule_inject_first \to \t_tabl_tabulate_initializers_first \appendtoks \let\tabl_tabulate_column_vrule_inject\tabl_tabulate_column_vrule_inject_second \to \t_tabl_tabulate_initializers_second % auto columns \def\tabl_tabulate_column_inject_auto {\tabl_tabulate_column_normal\zerocount \ifnum\c_tabl_tabulate_column>\c_tabl_tabulate_columns\relax \expandafter\NR \else \expandafter\ignorespaces % interferes with the more tricky hooks \fi} \unexpanded\def\setquicktabulate#1% see \startlegend \startgiven (for the moment still public) {\let#1\tabl_tabulate_column_inject_auto \let\\\tabl_tabulate_column_inject_auto} % brrr, will go \setvalue{\??tabulateseparator\v!blank }{\s_tabl_tabulate_separator\bigskipamount} \setvalue{\??tabulateseparator\v!depth }{\s_tabl_tabulate_separator\strutdp} \setvalue{\??tabulateseparator\v!small }{\def\m_tabl_tabulate_separator_factor{.25}} \setvalue{\??tabulateseparator\v!medium}{\def\m_tabl_tabulate_separator_factor{.5}} \setvalue{\??tabulateseparator\v!big }{} \setvalue{\??tabulateseparator\v!none }{\s_tabl_tabulate_separator\zeropoint\let\m_tabl_tabulate_separator_factor\zerocount} \setvalue{\??tabulateseparator\v!grid }{\s_tabl_tabulate_separator\zeropoint\let\m_tabl_tabulate_separator_factor\zerocount} \def\tabl_tabulate_column_rule_separator_step#1% {\ifcsname\??tabulateseparator#1\endcsname \csname\??tabulateseparator#1\endcsname \else \s_tabl_tabulate_separator#1\relax \fi} \def\tabl_tabulate_column_rule_separator_inject % can be sped up (will do when used frequently) {\bgroup \s_tabl_tabulate_separator\strutdp \ifx\p_distance\empty\else \let\m_tabl_tabulate_separator_factor\plusone \processcommacommand[\p_distance]\tabl_tabulate_column_rule_separator_step \s_tabl_tabulate_separator\m_tabl_tabulate_separator_factor\s_tabl_tabulate_separator \fi % someamble: footer or header: unfortunately a skip can trigger a page break (weird % as we have lots of nobreaks) % \ifconditional\c_tabl_tabulate_someamble\kern\else\vskip\fi\s_tabl_tabulate_separator % new % \directvspacing{\the\s_tabl_tabulate_separator}% new \directvskip\s_tabl_tabulate_separator \egroup} \def\tabl_tabulate_hrule_spec_ignore#1% {%\global\let\currenttabulationlocalhrulecolor\empty %\global\d_tabl_tabulate_hrulethickness_local\d_tabl_tabulate_hrulethickness_default \doiffastoptionalcheckelse#1#1} \def\tabl_tabulate_hrule_spec_pickup#1% {\global\let\currenttabulationlocalhrulecolor\m_tabl_tabulate_hrule_color_default \global\d_tabl_tabulate_hrulethickness_local\d_tabl_tabulate_hrulethickness_default \doiffastoptionalcheckelse{\tabl_tabulate_hrule_preset#1}#1} \def\tabl_tabulate_hrule_preset_step#1% {\doifnumberelse{#1} {\global\d_tabl_tabulate_hrulethickness_local#1\d_tabl_tabulate_hrulethickness_default} {\xdef\currenttabulationlocalhrulecolor{#1}}} \def\tabl_tabulate_hrule_preset#1[#2]% {\rawprocesscommalist[#2]\tabl_tabulate_hrule_preset_step #1} \def\tabl_tabulate_hrule_inject_normal {\hrule \s!height.5\d_tabl_tabulate_hrulethickness_local \s!depth .5\d_tabl_tabulate_hrulethickness_local \relax} \def\tabl_tabulate_hrule_inject_colored {\dousecolorparameter\currenttabulationlocalhrulecolor \tabl_tabulate_hrule_inject_normal} \unexpanded\def\tabl_tabulate_hrule_inject_first {\ifcase\d_tabl_tabulate_hrulethickness_local\else \tabl_tabulate_hrule_inject_normal \fi} \unexpanded\def\tabl_tabulate_hrule_inject_second {\ifcase\d_tabl_tabulate_hrulethickness_local\else \ifx\currenttabulationlocalhrulecolor\empty \tabl_tabulate_hrule_inject_normal \else \tabl_tabulate_hrule_inject_colored \fi \fi} \let\tabl_tabulate_hrule_inject\relax \appendtoks \let\tabl_tabulate_hrule_inject\tabl_tabulate_hrule_inject_first \to \t_tabl_tabulate_initializers_first \appendtoks \let\tabl_tabulate_hrule_inject\tabl_tabulate_hrule_inject_second \to \t_tabl_tabulate_initializers_second %D Color: % \starttabulate[||p||] % \NC test \NC test \NC test \NC \NR % \NC test \CC[green] \input tufte \CC[yellow] test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \CC[blue] test \CC[red] test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \CC[gray] test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \CC[blue] test \NC test \NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \NC test \CC[magenta] test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \CC[cyan] \dorecurse{10}{\input ward }\NC test \NC \NR % \NC test \NC test \NC test \NC \NR % \NC test \CC[yellow] test \NC test \NC \NR % \stoptabulate \unexpanded\def\tabl_tabulate_color_set#1% we could store the attributes at the cost of a lua call {\begingroup \node_backgrounds_align_initialize % name might change \global\let\tabl_tabulate_color_repeat\tabl_tabulate_color_repeat_second \global\settrue\c_tabl_tabulate_has_colors \ifnum\c_tabl_tabulate_column>\c_tabl_tabulate_max_colorcolumn \global\c_tabl_tabulate_max_colorcolumn\c_tabl_tabulate_column \fi \setxvalue{\??tabulatecolor\the\c_tabl_tabulate_column}{#1}% %\attribute\alignbackgroundattribute\plusone %\dousecolorparameter{#1}\char\zerocount\strut % hack \hbox \thealignbackgroundcolorattr{#1}{}% \endgroup} \def\tabl_tabulate_color_repeat_second % for split off lines {\begingroup \scratchcounter\numexpr\c_tabl_tabulate_column-\plusone\relax % ugly ! \ifcsname\??tabulatecolor\the\scratchcounter\endcsname %\expandafter\dousecolorparameter\csname\??tabulatecolor\the\scratchcounter\endcsname %\strut\char\zerocount % hack \hbox \thealignbackgroundcolorattr{\csname\??tabulatecolor\the\scratchcounter\endcsname}{}% \fi \endgroup} \let\tabl_tabulate_color_repeat\relax \appendtoks \let\tabl_tabulate_color_repeat\relax \to \everytabulate \def\tabl_tabulate_color_reset {\ifcase\c_tabl_tabulate_max_colorcolumn\else \tabl_tabulate_color_reset_indeed \fi} % \def\tabl_tabulate_color_reset_indeed % {\dorecurse\c_tabl_tabulate_max_colorcolumn{\letgvalue{\??tabulatecolor\recurselevel}\undefined}} % slow \def\tabl_tabulate_color_reset_indeed {\dofastloopcs\c_tabl_tabulate_max_colorcolumn\tabl_tabulate_color_reset_step} \def\tabl_tabulate_color_reset_step % undefined or empty? {\global\expandafter\let\csname\??tabulatecolor\number\fastloopindex\endcsname\undefined} \appendtoks \tabl_tabulate_color_reset \to \t_tabl_tabulate_every_after_row % \def\tabl_tabulate_register_par_options_indeed % {\iftrialtypesetting \else % \registerparoptions % \ifinsidefloat % % that is, an unbreakable one % \glet\tabl_tabulate_register_par_options\empty % \else % % unsafe in crossing pages, at each b... % % \glet\tabl_tabulate_register_par_options\empty % \fi % \fi} % % \appendtoks % \glet\tabl_tabulate_register_par_options\tabl_tabulate_register_par_options_indeed % \to \everytabulate \def\tabl_tabulate_register_par_options_first % maybe track here if needed {} \def\tabl_tabulate_register_par_options_second {\registerparoptions \ifinsidefloat % that is, an unbreakable one \glet\tabl_tabulate_register_par_options\empty \else % unsafe in crossing pages, at each b... % \glet\tabl_tabulate_register_par_options\empty \fi} \let\tabl_tabulate_register_par_options\relax \appendtoks \let\tabl_tabulate_register_par_options\tabl_tabulate_register_par_options_first \to \t_tabl_tabulate_initializers_first \appendtoks \let\tabl_tabulate_register_par_options\tabl_tabulate_register_par_options_second \to \t_tabl_tabulate_initializers_second \appendtoks \tabl_tabulate_register_par_options \to \t_tabl_tabulate_every_row \def\tabl_tabulate_flush_indent {\ifnum\c_tabl_tabulate_column=\zerocount \hbox to \d_tabl_tabulate_indent {% we now have a local hsize, and since we want to % register positional info (i.e. real hsizes) we % need to reconstitute the original hsize \advance\hsize\d_tabl_tabulate_indent % this is indeed rather messy and took a few hours % to dis/uncover \the\t_tabl_tabulate_every_row \hss}% \fi} \def\tabl_tabulate_digits{\digits} %D Beware, we cannot use \type {\unexpanded} on \type {\HL} %D cum suis, since \TEX's hard coded noalign lookahead fails %D on it! I mistakenly added this for a while. \setvalue{\??tabulatealigning\v!normal}{0} \setvalue{\??tabulatealigning\v!right }{1} \setvalue{\??tabulatealigning\v!left }{2} \setvalue{\??tabulatealigning\v!middle}{3} \setvalue{\??tabulateheader\v!repeat}{\plusone} \setvalue{\??tabulateheader\v!text }{\plustwo} \unexpanded\def\tabl_tabulate_bskip_first {\setbox\b_tabl_tabulate\vbox\bgroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_nop} \unexpanded\def\tabl_tabulate_eskip_first {\par\egroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_yes} \unexpanded\def\tabl_tabulate_xbskip_first{\hbox\bgroup\vbox\bgroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_nop} \unexpanded\def\tabl_tabulate_xeskip_first{\par\egroup\egroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_yes} \let\tabl_tabulate_bbskip\relax \let\tabl_tabulate_eeskip\relax \let\tabl_tabulate_bskip \relax \let\tabl_tabulate_eskip \relax \let\tabl_tabulate_xbskip\relax \let\tabl_tabulate_xeskip\relax \appendtoks \let\tabl_tabulate_bbskip\relax %\let\tabl_tabulate_eeskip\relax % adapted by bskip \let\tabl_tabulate_bskip \tabl_tabulate_bskip_first \let\tabl_tabulate_eskip \tabl_tabulate_eskip_first \let\tabl_tabulate_xbskip\tabl_tabulate_xbskip_first \let\tabl_tabulate_xeskip\tabl_tabulate_xeskip_first \to \t_tabl_tabulate_initializers_first \def\tabl_tabulate_baselinecorrection % keep an eye on this one {\def\dobaselinecorrection{\vskip\dimexpr-\prevdepth+\strutdp+\strutdp\relax}% todo: mkiv \baselinecorrection} % some hack to prevent an allowbreak ... actually we could set up a system then % that is dealt with atthe lua end in the skip handler: turn penalties with attributes % values into other penalties that get removed \installcorenamespace{tabulatenobreak} % \def\tabl_tabulate_break_state_set % {%\writestatus{SET}{\the\c_tabl_tabulate_noflines}% % \global\expandafter\let\csname\??tabulatenobreak\the\c_tabl_tabulate_noflines\endcsname\conditionaltrue} % % \def\tabl_tabulate_break_state_reset % {\ifcsname\??tabulatenobreak\the\c_tabl_tabulate_noflines\endcsname % %\writestatus{RESET}{\the\c_tabl_tabulate_noflines}% % \global\expandafter\let\csname\??tabulatenobreak\the\c_tabl_tabulate_noflines\endcsname\undefined % \fi} % % \def\tabl_tabulate_break_state_allowbreak % {\ifcsname\??tabulatenobreak\the\c_tabl_tabulate_noflines\endcsname % %\writestatus{TRUE}{\the\c_tabl_tabulate_noflines}% % \else % %\writestatus{FALSE}{\the\c_tabl_tabulate_noflines}% % \tabl_tabulate_break_allow % needed with pbreak prevention % \fi} % % \let\tabl_tabulate_break_allow\allowbreak % \let\tabl_tabulate_break_no \nobreak \def\tabl_tabulate_break_allow{\directvpenalty\zerocount} \def\tabl_tabulate_break_maybe{\directvpenalty\zerocount} \def\tabl_tabulate_break_no {\directvpenalty\plustenthousand} % ,order:2}} \let\tabl_tabulate_break_state_set \relax \let\tabl_tabulate_break_state_reset \relax \let\tabl_tabulate_break_state_allowbreak\tabl_tabulate_break_maybe % so far \unexpanded\def\tabl_tabulate_VL_first{\tabl_tabulate_column_vruled\zerocount} \unexpanded\def\tabl_tabulate_NC_first{\tabl_tabulate_column_normal\zerocount} \unexpanded\def\tabl_tabulate_RC_first{\tabl_tabulate_column_normal\plusone} \unexpanded\def\tabl_tabulate_HC_first{\tabl_tabulate_column_normal\plustwo} \unexpanded\def\tabl_tabulate_EQ_first{\tabl_tabulate_column_equal \zerocount} \unexpanded\def\tabl_tabulate_RQ_first{\tabl_tabulate_column_equal \plusone} \unexpanded\def\tabl_tabulate_HQ_first{\tabl_tabulate_column_equal \plustwo} \unexpanded\def\tabl_tabulate_NG_first{\NC\tabl_tabulate_charalign} \unexpanded\def\tabl_tabulate_NN_first{\NC\tabl_tabulate_digits} % new, undocumented, test first \unexpanded\def\tabl_tabulate_ND_first{\NC\tabl_tabulate_digits} % same, for old times sake \unexpanded\def\tabl_tabulate_NR_first {\tabl_tabulate_NR_common\conditionaltrue \tabl_tabulate_check_penalties} % next row \unexpanded\def\tabl_tabulate_NB_first {\tabl_tabulate_NR_common\conditionaltrue \tabl_tabulate_nobreak_inject } % next row no break \unexpanded\def\tabl_tabulate_NR_second{\tabl_tabulate_NR_common\conditionalfalse\tabl_tabulate_check_penalties} % next row \unexpanded\def\tabl_tabulate_NB_second{\tabl_tabulate_NR_common\conditionalfalse\tabl_tabulate_nobreak_inject } % next row no break \unexpanded\def\tabl_tabulate_CC_first{\global\c_tabl_tabulate_localcolorspan\zerocount\tabl_tabulate_set_color_column\zerocount} \unexpanded\def\tabl_tabulate_CL_first{\global\c_tabl_tabulate_localcolorspan\plusone \tabl_tabulate_set_color_column\zerocount} \unexpanded\def\tabl_tabulate_CM_first{\global\c_tabl_tabulate_localcolorspan\plustwo \tabl_tabulate_set_color_column\zerocount} \unexpanded\def\tabl_tabulate_CR_first{\global\c_tabl_tabulate_localcolorspan\plusthree\tabl_tabulate_set_color_column\zerocount} \appendtoks \let\VL\tabl_tabulate_VL_first \let\NC\tabl_tabulate_NC_first \let\RC\tabl_tabulate_RC_first \let\HC\tabl_tabulate_HC_first \let\EQ\tabl_tabulate_EQ_first \let\RQ\tabl_tabulate_RQ_first \let\HQ\tabl_tabulate_HQ_first \let\NG\tabl_tabulate_NG_first \let\NN\tabl_tabulate_NN_first \let\ND\tabl_tabulate_ND_first \let\NR\tabl_tabulate_NR_first \let\NB\tabl_tabulate_NB_first \let\CC\tabl_tabulate_CC_first \let\CL\tabl_tabulate_CL_first \let\CM\tabl_tabulate_CM_first \let\CR\tabl_tabulate_CR_first \to \t_tabl_tabulate_initializers_first \appendtoks \let\NR\tabl_tabulate_NR_second \let\NB\tabl_tabulate_NB_second \to \t_tabl_tabulate_initializers_second \appendtoks \let\SR\NR \let\FR\NR \let\MR\NR \let\LR\NR \let\AR\NR \to \t_tabl_tabulate_initializers_first \unexpanded\def\tabl_tabulate_NR_common#1#2% {\global\advance\c_tabl_tabulate_noflines\plusone \global\setfalse\c_tabl_tabulate_firstflushed \global\setfalse\c_tabl_tabulate_equal \global\c_tabl_tabulate_column\zerocount \ifconditional#1\relax \tabl_tabulate_break_state_reset \fi \tabl_tabulate_pheight_reset \unskip\unskip\crcr\tabl_tabulate_flush_collected % can we omit the next one in the first run? probably \starttabulatenoalign \the\t_tabl_tabulate_every_after_row #2% \stoptabulatenoalign} \def\tabl_tabulate_check_penalties {\ifconditional\c_tabl_tabulate_tolerant_break\else \ifnum\c_tabl_tabulate_totalnoflines=\plusone % \tabl_tabulate_break_allow \else \ifconditional\c_tabl_tabulate_someamble \ifcase\c_tabl_tabulate_repeathead \else \tabl_tabulate_break_allow \fi \fi \ifnum\c_tabl_tabulate_noflines=\plusone \tabl_tabulate_nobreak_inject \else \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_minusnoflines \ifnum\c_tabl_tabulate_plines_max<\plustwo \tabl_tabulate_nobreak_inject \else \tabl_tabulate_break_allow % needed with pbreak prevention \fi \else \tabl_tabulate_break_state_allowbreak \fi \fi \fi \fi \global\setfalse\c_tabl_tabulate_firstflushed} \unexpanded\def\tabl_tabulate_bbskip_second_split_yes {\ifvoid\b_tabl_tabulate_current\c_tabl_tabulate_column \ifx\tabl_tabulate_flush_collected_indeed\empty\else \setbox0\hbox \fi \fi} \unexpanded\def\tabl_tabulate_eskip_second {\par\egroup \tabl_tabulate_pheight_set \glet\tabl_tabulate_hook\tabl_tabulate_hook_yes \tabl_tabulate_splitoff_box} \unexpanded\def\tabl_tabulate_bskip_second_split_yes {\ifvoid\b_tabl_tabulate_current\c_tabl_tabulate_column % first line \global\setbox\b_tabl_tabulate_current\c_tabl_tabulate_column\vbox \bgroup \glet\tabl_tabulate_hook\tabl_tabulate_hook_nop \ifconditional\c_tabl_tabulate_automode\hsize\d_tabl_tabulate_width\fi % \begstrut % interferes with pre-\pars % evt: \appendtoks\begstrut\to\everypar \ignorespaces \let\tabl_tabulate_eskip\tabl_tabulate_eskip_second \else % successive lines \let\tabl_tabulate_eskip\empty \dontcomplain \glet\tabl_tabulate_hook\tabl_tabulate_hook_yes \expandafter\tabl_tabulate_splitoff_box \fi} \unexpanded\def\tabl_tabulate_xbskip_second{\tabl_tabulate_bskip} \unexpanded\def\tabl_tabulate_xeskip_second{\tabl_tabulate_eskip} \unexpanded\def\tabl_tabulate_flush_second_indeed {\glet\tabl_tabulate_flush_collected_indeed\empty \global\c_tabl_tabulate_column\zerocount \tabl_tabulate_pbreak_check \dofastloopcs\c_tabl_tabulate_columns\tabl_tabulate_flush_second_step \global\settrue\c_tabl_tabulate_firstflushed} \unexpanded\def\tabl_tabulate_flush_second_step {\ifvoid\b_tabl_tabulate_current\fastloopindex\else \gdef\tabl_tabulate_flush_collected_indeed{\the\t_tabl_tabulate_dummy}% \fi} \def\tabl_tabulate_flush_second {\tabulatenoalign{\tabl_tabulate_flush_second_indeed}% \tabl_tabulate_flush_collected_indeed} \unexpanded\def\tabl_tabulate_bskip_second_split_nop {\vtop\bgroup \ifconditional\c_tabl_tabulate_automode\hsize\d_tabl_tabulate_width\fi % \begstrut % interferes with pre-\pars % evt: \appendtoks\begstrut\to\everypar \ignorespaces} \unexpanded\def\tabl_tabulate_eskip_second_split_nop % vertical strut added august 2003 {\par\verticalstrut \vskip-\struttotal \egroup} % \let\tabl_tabulate_eskip \relax % adapted by bskip % \let\tabl_tabulate_eeskip\relax % adapted by bskip \appendtoks \let\tabl_tabulate_xbskip\tabl_tabulate_xbskip_second \let\tabl_tabulate_xeskip\tabl_tabulate_xeskip_second \ifconditional\c_tabl_tabulate_split \let\tabl_tabulate_bskip \tabl_tabulate_bskip_second_split_yes \let\tabl_tabulate_bbskip\tabl_tabulate_bbskip_second_split_yes \else \let\tabl_tabulate_bskip \tabl_tabulate_bskip_second_split_nop \let\tabl_tabulate_eskip \tabl_tabulate_eskip_second_split_nop \fi \to \t_tabl_tabulate_initializers_second % see *** % % \enabletrackers[nodes.page_vspacing] % \starttext % \starttabulate[||] \dorecurse{100}{\NC Eins \NC \NR \HL} \stoptabulate % \stoptext \def\tabl_tabulate_XX_none {\starttabulatenoalign \tabl_tabulate_break_state_set \tabl_tabulate_hrule_spec_ignore \stoptabulatenoalign} \def\tabl_tabulate_FL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_FL_second_indeed} \def\tabl_tabulate_ML_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_ML_second_indeed} \def\tabl_tabulate_LL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_LL_second_indeed} \def\tabl_tabulate_TL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_TL_second_indeed} \def\tabl_tabulate_BL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_BL_second_indeed} \unexpanded\def\tabl_tabulate_FL_second_indeed {\ifinsidefloat\else \doifempty{\tabulationparameter\c!before}\tabl_tabulate_baselinecorrection % no expansion \fi \tabl_tabulate_hrule_inject \tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject \prevdepth\strutdp \tabl_tabulate_nobreak_inject \stoptabulatenoalign} \unexpanded\def\tabl_tabulate_ML_second_indeed {\tabl_tabulate_column_rule_separator_inject \tabl_tabulate_hrule_inject \vskip-\p_rulethickness\relax \tabl_tabulate_hrule_inject \tabl_tabulate_break_no \tabl_tabulate_column_rule_separator_inject \stoptabulatenoalign} \unexpanded\def\tabl_tabulate_LL_second_indeed {\tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject \tabl_tabulate_nobreak_inject \tabl_tabulate_hrule_inject \ifinsidefloat\else \doifempty{\tabulationparameter\c!after} {\vskip\strutdp \verticalstrut \vskip-\struttotal}% \fi \stoptabulatenoalign} \unexpanded\def\tabl_tabulate_TL_second_indeed {\tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject \tabl_tabulate_nobreak_inject \tabl_tabulate_hrule_inject \tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject %\prevdepth\strutdp % todo, might differ between TL and BL \tabl_tabulate_nobreak_inject \stoptabulatenoalign} \let\tabl_tabulate_BL_second\tabl_tabulate_TL_second \def\tabl_tabulate_HL_second {\csname \ifnum\c_tabl_tabulate_noflines=\zerocount F\else \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_totalnoflines L\else M\fi\fi L\endcsname} \appendtoks \let\FL\tabl_tabulate_XX_none \let\ML\tabl_tabulate_XX_none \let\LL\tabl_tabulate_XX_none \let\TL\tabl_tabulate_XX_none \let\BL\tabl_tabulate_XX_none \let\HL\tabl_tabulate_XX_none \let\HR\tabl_tabulate_XX_none \to \t_tabl_tabulate_initializers_first \appendtoks \let\FL\tabl_tabulate_FL_second \let\ML\tabl_tabulate_ML_second \let\LL\tabl_tabulate_LL_second \let\TL\tabl_tabulate_TL_second \let\BL\tabl_tabulate_BL_second \let\HL\tabl_tabulate_HL_second \let\HR\tabl_tabulate_HL_second \to \t_tabl_tabulate_initializers_second % \def\tabulatedoHRfive % horizontal rule line (break untested) % {\starttabulatenoalign % \globallet\dotabulateautoline\dotabulatelinerule % %\ifcase#1\or % todo: check what this does % \ifnum\noftabulatelines=\zerocount % \glet\dotabulateautoline\donothing % \else\ifnum\noftabulatelines=\totalnoftabulatelines % \glet\dotabulateautoline\donothing % \fi\fi % %\fi % \dotabulatenobreak % \stoptabulatenoalign % \dotabulateautoline % \starttabulatenoalign % \tabl_tabulate_break_no % \ifx\dotabulateautoline\dotabulatelinerule\kern-\lineheight\fi % \ifnum\noftabulatelines=\totalnoftabulatelines % \@EA\dotabulatenobreak % \else % \@EA\tabl_tabulate_break_allow % \fi % \stoptabulatenoalign % \dotabulateautoline % \starttabulatenoalign % \dotabulatenobreak % \stoptabulatenoalign} % \dorecurse{10}{ % \starttabulate[|l|] % \FL % \NC first line, bound to next rule \NC \NR % \TL % \NC bound to previous rule \NC \NR % \NC some line \NC \NR % \NC some line \NC \NR % \NC some line \NC \NR % \NC bound to next rule \NC \NR % \ML % \NC bound to previous rule \NC \NR % \NC bound to next rule \NC \NR % \BL % \NC last line, bound to previous rule \NC \NR % \LL % \stoptabulate % } % This needs checking: \def\tabulaterule {\HR} % a rule with lineheight \def\tabulateline {\HL} % just a spaced rule \def\tabulateautorule{\HR}% \def\tabulateautoline{\HL} % no longer different (to be looked into) % When support for vertical rules we needed a way to pick up the % specification for the final rule and a \type {|{}} interface was % chosen. As a result parsing had to become more complex and I was % not in the mood for messing up the code too much. Therefore from % now on the preamble is split by \LUA. There are definitely more % places where we can use \LUA\ code (for instance in alignment of % numbers. The repeat parser is replace at the \LUA\ end as well. \let\tabl_tabulate_flush_collected \empty \let\tabl_tabulate_flush_collected_indeed\empty \def\tabl_tabulate_set_local_hsize {\setlocalhsize \hsize\localhsize} \def\tabl_tabulate_process {\c_tabl_tabulate_pass\plusone \tabl_tabulate_check_full_content \edef\v_tabl_tabulate_align{\executeifdefined{\??tabulatealigning\p_align}0}% \s_tabl_tabulate_first.5\d_tabl_tabulate_unit \s_tabl_tabulate_last\s_tabl_tabulate_first \s_tabl_tabulate_pre\zeropoint \s_tabl_tabulate_post\s_tabl_tabulate_first % was: \zeropoint \global\c_tabl_tabulate_columns\zerocount \global\c_tabl_tabulate_nofauto\zerocount \global\c_tabl_tabulate_noflines\zerocount \c_tabl_tabulate_totalnoflines\zerocount \c_tabl_tabulate_minusnoflines\zerocount \global\d_tabl_tabulate_width_p\zeropoint \global\d_tabl_tabulate_width_w\zeropoint \global\setfalse\c_tabl_tabulate_equal \tabl_tabulate_pheight_reset \tabskip\zeropoint \ifinsidesplitfloat \donetrue \else\ifinsidefloat \donefalse \else \donetrue \fi\fi \ifdone \c_tabl_tabulate_repeathead\executeifdefined{\??tabulateheader\tabulationparameter\c!header}\zerocount \else \c_tabl_tabulate_repeathead\zerocount \fi % \the\t_tabl_tabulate_initializers_first % collect more here % \glet\tabl_tabulate_flush_collected\empty \ifdim\d_tabl_tabulate_margin>\zeropoint \t_tabl_tabulate_preamble {\aligntab \tabl_tabulate_flush_indent % \global\advance\c_tabl_tabulate_noflines\plusone \strut \alignmark\alignmark \tabskip\d_tabl_tabulate_margin \strut \aligntab \alignmark\alignmark \tabskip\zeropoint}% \else \t_tabl_tabulate_preamble {\aligntab \tabl_tabulate_flush_indent % \global\advance\c_tabl_tabulate_noflines\plusone \strut \alignmark\alignmark \aligntab \alignmark\alignmark \tabskip\zeropoint}% \fi \d_tabl_tabulate_width\zeropoint % these counters are set at the lua end \c_tabl_tabulate_nofcolumns \zerocount \c_tabl_tabulate_has_rule_spec_first\zerocount \c_tabl_tabulate_has_rule_spec_last \zerocount \ctxcommand{presettabulate(\!!bs\detokenizedtabulationparameter\c!format\!!es)}% % % \edef\totaltabulatecolumns{\the\numexpr3*\c_tabl_tabulate_columns+\plusfour}% \d_tabl_tabulate_width\zeropoint \tabl_tabulate_initialize_boxes\c_tabl_tabulate_columns \t_tabl_tabulate_preamble\expandafter{\the\t_tabl_tabulate_preamble \aligntab\alignmark\alignmark \global\advance\c_tabl_tabulate_column\plusone % maybe just set it already }% \t_tabl_tabulate_dummy\expandafter{\the\t_tabl_tabulate_dummy \NC\unskip\unskip\crcr\tabl_tabulate_flush_collected % no count }% \global\c_tabl_tabulate_column\zerocount \tabl_tabulate_pheight_reset \glet\tabl_tabulate_hook\tabl_tabulate_hook_yes \ifx\p_indenting\v!no \forgetparindent \fi \ifinsidefloat \d_tabl_tabulate_indent\zeropoint \else \tabl_tabulate_set_local_hsize \fi \dontcomplain \forgetall % hm, interference with preceding \forgetparindent probably bug, to be solved \everypar\everytabulatepar \setbox0\vbox % outside \if because of line counting {\notesenabledfalse \d_tabl_tabulate_indent\zeropoint \settrialtypesetting % very important \expandafter\halign\expandafter{\the\t_tabl_tabulate_preamble\crcr\tabl_tabulate_insert_content\crcr}}% \ifnum\c_tabl_tabulate_nofauto>\zerocount % so, even if the natural size is larger, in the final run, we force the calculated width \d_tabl_tabulate_width\dimexpr\hsize-\wd0-\d_tabl_tabulate_width_p-\d_tabl_tabulate_width_w\relax \ifnum\c_tabl_tabulate_nofauto>\zerocount \divide\d_tabl_tabulate_width \c_tabl_tabulate_nofauto\relax \fi \fi \ifconditional\c_tabl_tabulate_split \splittopskip\strutht \glet\tabl_tabulate_flush_collected_indeed\empty \glet\tabl_tabulate_flush_collected\tabl_tabulate_flush_second \fi \c_tabl_tabulate_totalnoflines\c_tabl_tabulate_noflines \c_tabl_tabulate_minusnoflines\numexpr\c_tabl_tabulate_noflines+\minusone\relax \global\c_tabl_tabulate_noflines\zerocount % \c_tabl_tabulate_pass\plustwo % final pass \the\t_tabl_tabulate_initializers_second % collect more here % \ifx\p_line\v!line \let\HL\HR \let\tabulateautoline\tabulateautorule \let\tabulateline\tabulaterule \fi % \ifcase\c_tabl_tabulate_repeathead \ifinsidesplitfloat \global\setbox\b_tabl_tabulate\vbox \bgroup \else \startframedcontent[\tabulationparameter\c!frame]% \fi \else \global\setbox\b_tabl_tabulate\vbox \bgroup \fi % \dostarttagged\t!tabulate\empty \dostarttagged\t!tabulaterow\empty \setfalse\inhibitmargindata % new per 2012.06.13 ... really needed \everycr\expandafter{\the\everycr\dostoptagged\dostarttagged\t!tabulaterow\empty}% \expandafter\halign\expandafter{\the\t_tabl_tabulate_preamble\crcr\tabl_tabulate_insert_content\crcr}% \dostoptagged \dostoptagged \ifhmode\par\prevdepth\strutdp\fi % nog eens beter, temporary hack \ifx\p_distance\v!grid \vskip-\strutdp % experimental tm-prikkels \fi % \ifcase\c_tabl_tabulate_repeathead \ifinsidesplitfloat \egroup % box \egroup % settings \tabl_split_box\b_tabl_tabulate \else \stopframedcontent \egroup \fi \else \egroup % box \egroup % settings \tabl_split_box\b_tabl_tabulate \fi % \ifinsidefloat \else \tabulationparameter\c!after \fi \egroup} % whole thing % \egroup % \setuptabulate[split=yes,header=text,title=Vervolg van Tabel] % % % \starttabulatehead % % \NC test \NC hans\NC \NR % % \stoptabulatehead % % \starttabulate % \NC test \NC \input tufte \relax \NC \NR % \NC test \NC \input knuth \relax \NC \NR % \NC test \NC \input knuth \relax \NC \NR % \NC test \NC \input tufte \relax \NC \NR % \NC test \NC \input tufte \relax \NC \NR % \NC test \NC \input tufte \relax \NC \NR % \stoptabulate \def\tabl_split_box#1% #1 <> 0/2 / derived from the one in core-ntb.tex {\ifinsidesplitfloat \tabl_split_box_indeed#1% \else\ifinsidefloat \unvbox#1% \else \tabl_split_box_indeed#1% \fi\fi} \def\tabl_split_box_indeed#1% {\resettsplit \def\tsplitminimumfreelines{2}% \def\tsplitminimumfreespace{0pt}% \setbox\tsplitcontent\box#1% \ifcase\c_tabl_tabulate_repeathead\or \setbox\tsplithead\vsplit\tsplitcontent to \lineheight \setbox\tsplithead\vbox{\unvbox\tsplithead}% \or \setbox\tsplithead\vbox{\hbox{\strut\tabulationparameter\c!title}}% \fi \handletsplit} %D \starttyping %D \setuptabulate[split=no,rule=line] %D %D \starttabulate %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \NC tufte \NC \input tufte \NC \NR \tabulateautorule %D \stoptabulate %D \stoptyping %D Spacing: % % \starttabulate % \NC text \NC text \NC \NR % \TB[small] % \NC text \NC text \NC \NR % \TB[4*big] % \NC text \NC text \NC \NR % \stoptabulate \def\tabl_tabulate_TB {\starttabulatenoalign \dosingleempty\tabl_tabulate_TB_indeed} \def\tabl_tabulate_TB_indeed[#1]% {\iffirstargument \blank[#1] \else \blank \fi \stoptabulatenoalign} % to be tested: % % \def\tabl_tabulate_TB % {\starttabulatenoalign % \doiffastoptionalcheckelse\tabl_tabulate_TB_yes\tabl_tabulate_TB_nop} % % \def\tabl_tabulate_TB_yes[#1]% % {\blank[#1] % \stoptabulatenoalign} % % \def\tabl_tabulate_TB_nop[#1]% % {\blank % \stoptabulatenoalign} \appendtoks \let\TB\tabl_tabulate_TB \to \everytabulate % %D Between alignment lines certain rules apply, and even a simple test can mess % %D up a table, which is why we have a special test facilityL % %D % %D \startbuffer % %D \starttabulate[|l|p|] % %D \NC 1test \NC test \NC \NR % %D \tableifelse{\doifelse{a}{a}}{\NC Xtest \NC test \NC \NR}{}% % %D \stoptabulate % %D \stopbuffer % %D % %D \typebuffer \getbuffer % % \def\tableifelse#1% should be tabulatenoalign then % {\tablenoalign % {#1% % {\aftergroup \firstoftwoarguments}% % {\aftergroup\secondoftwoarguments}}} % % \def\tableiftextelse#1{\tableifelse{\doiftextelse{#1}}} %D Some new trickery: %D %D \startbuffer %D \settrue\c_tabl_tabulate_splitoff_whitespace %D %D \starttabulate[|p(2cm)|p(2cm)|p(2cm)|] %D \NC test 1a \NC test 2a \NC test 3a %D \par %D test 3b \NC \NR %D \NC test 1a \NC test 2a \NC test 3a %D \blank[line] %D test 3b \NC \NR %D \NC test 1a \NC test 2a \NC test 3a %D \blank[halfline] %D test 3b %D \blank[halfline] %D test 3c \NC \NR %D \NC \blank \NC \blank \NC \blank \NC \NR %D \NC test 1a \NC test 2a \NC test 3a %D \blank[halfline] %D test 3b %D \blank[halfline] %D test 3c \NC \NR %D \NC \blank \NC \blank \NC \NC \NR %D \NC test 1a %D \par %D test 1b %D \par %D test 1b \NC test 2a %D \par %D test 2b %D \par %D test 2b \NC test 3a \NC \NR %D \NC test 1a %D \blank %D test 1b %D \par %D test 1b \NC test 2a %D \par %D test 2b %D \blank %D test 2b \NC test 3a \NC \NR %D \stoptabulate %D \stopbuffer %D %D \typebuffer \start \getbuffer \stop % \starttabulatie[|mc|] % \NC \digits{100.000,00} \NC\NR % \NC \digits{@10.000,00} \NC\NR % \NC \digits{@@@.100,00} \NC\NR % \NC \digits{@@@.@10,@@} \NC\NR % \NC \digits{@@@.@@1,@@} \NC\NR % \stoptabulatie % % \starttabulatie[|mc|] % \ND 100.000,00 \NC\NR % \ND @10.000,00 \NC\NR % \ND @@@.100,00 \NC\NR % \ND @@@.@10,@@ \NC\NR % \ND @@@.@@1,@@ \NC\NR % \stoptabulatie % % \starttabulatie[|c|] % \ND $100.000,00$ \NC\NR % \ND $@10.000,00$ \NC\NR % \ND $@@@.100,00$ \NC\NR % \ND $@@@.@10,@@$ \NC\NR % \ND $@@@.@@1,@@$ \NC\NR % \stoptabulatie % % \starttabulatie[|c|] % \NC $\digits 100.000,00 $ \NC\NR % \NC $\digits @10.000,00 $ \NC\NR % \NC $\digits @@@.100,00 $ \NC\NR % \NC $\digits @@@.@10,@@ $ \NC\NR % \NC $\digits @@@.@@1,@@ $ \NC\NR % \stoptabulatie % % \starttabulatie[|c|] % \NC \digits $100.000,00$ \NC\NR % \NC \digits $@10.000,00$ \NC\NR % \NC \digits $@@@.100,00$ \NC\NR % \NC \digits $@@@.@10,@@$ \NC\NR % \NC \digits $@@@.@@1,@@$ \NC\NR % \stoptabulatie %D Predefined categories (moved from core-mis): \definetabulate [\v!legend] [|emj1|i1|mR|] \setuptabulate [\v!legend] [\c!unit=.75em,\c!inner=\setquicktabulate\leg,EQ={=}] \definetabulate [\v!legend][\v!two] [|emj1|emk1|i1|mR|] \definetabulate [\v!fact] [|R|ecmj1|i1mR|] \setuptabulate [\v!fact] [\c!unit=.75em,\c!inner=\setquicktabulate\fact,EQ={=}] %D Another example: %D %D \starttyping %D \definetabulate %D [whatever] %D [|l|r|] %D %D \definetabulate %D [whatever][else] %D [|l|c|r|] %D %D \startwhatever %D \NC l \NC r \NC \NR %D \NC left \NC right \NC \NR %D \stopwhatever %D %D \startwhatever[else] %D \NC l \NC m \NC r \NC \NR %D \NC left \NC middle \NC right \NC \NR %D \stopwhatever %D %D \startwhatever[else][format={|c|c|c|c|}] %D \NC l \NC m \NC m \NC r \NC \NR %D \NC left \NC middle \NC middle \NC right \NC \NR %D \stopwhatever %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-soc.lua0000644000175000017500000000566312161703335024146 0ustar norbertnorbertif not modules then modules = { } end modules ['util-soc'] = { version = 1.001, comment = "support for sockets / protocols", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local smtp = require("socket.smtp") local ltn12 = require("ltn12") local mime = require("mime") local mail = utilities.mail or { } utilities.mail = mail local report_mail = logs.reporter("mail") function mail.send(specification) local presets = specification.presets if presets then table.setmetatableindex(specification,presets) end local server = specification.server or "" if not server then report_mail("no server specified") return false end local to = specification.to or specification.recepient or "" if to == "" then report_mail("no recepient specified") return false end local from = specification.from or specification.sender or "" if from == "" then report_mail("no sender specified") return false end local message = { } local body = specification.body if body then message[#message+1] = { body = body } end local files = specification.files if files then for i=1,#files do local filename = files[i] local handle = io.open(filename, "rb") if handle then report_mail("attaching file %a",filename) message[#message+1] = { headers = { ["content-type"] = format('application/pdf; name="%s"',filename), ["content-disposition"] = format('attachment; filename="%s"',filename), ["content-description"] = format('file: %s',filename), ["content-transfer-encoding"] = "BASE64" }, body = ltn12.source.chain( ltn12.source.file(handle), ltn12.filter.chain(mime.encode("base64"),mime.wrap()) ) } else report_mail("file %a not found",filename) end end end local result, detail = smtp.send { server = specification.server, port = specification.port, user = specification.user, password = specification.password, from = from, rcpt = to, source = smtp.message { headers = { to = to, from = from, cc = specification.cc, subject = specification.subject or "no subject", }, body = message }, } if detail then report_mail("error: %s",detail) else report_mail("message sent") end end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-grd.mkiv0000644000175000017500000000555712130411274024256 0ustar norbertnorbert%D \module %D [ file=page-grd, % moved from page-ini %D version=2011.12.07, % 2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Grids, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Grids} \unprotect \definepalet [layout] [grid=red, page=green] \newconstant\c_page_grids_location \newconstant\c_page_grids_line_mode \newconstant\c_page_grids_lineno_mode \unexpanded\def\showgrid {\dosingleempty\page_grids_show} \def\page_grids_show[#1]% {\c_page_grids_location \plusone % downward compatible default \c_page_grids_line_mode \plusone \c_page_grids_lineno_mode\plusone \processallactionsinset [#1]% [ \v!reset=>\c_page_grids_location \zerocount, \v!bottom=>\c_page_grids_location \plusone, \v!top=>\c_page_grids_location \plustwo, \v!none=>\c_page_grids_line_mode \zerocount, \v!all=>\c_page_grids_line_mode \plusone, \v!lines=>\c_page_grids_line_mode \plustwo, \v!frame=>\c_page_grids_line_mode \plusthree, \v!nonumber=>\c_page_grids_lineno_mode\zerocount, \v!right=>\c_page_grids_lineno_mode\plusone, \v!left=>\c_page_grids_lineno_mode\plustwo, \v!outer=>\c_page_grids_lineno_mode\plusthree]% \ifcase\c_page_grids_location \let\page_grids_add_to_box\gobbleoneargument \else % 1=bottom 2=top \let\page_grids_add_to_box\page_grids_add_to_box_indeed \fi} % if really needed for speed we can cache the grid \let\page_grids_add_to_box\gobbleoneargument \def\page_grids_add_to_box_indeed#1% to be checked for color and layer ..... use mp {\startcolor[layout:grid]% \gridboxlinemode \c_page_grids_line_mode \gridboxlinenomode\c_page_grids_lineno_mode \setgridbox\scratchbox\makeupwidth\textheight % todo: check color \global\setbox#1\hbox % global ? {\ifcase\c_page_grids_location\or\or\box#1\hskip-\makeupwidth\fi \begingroup % color \ifcase\layoutcolumns\else \gray \setlayoutcomponentattribute{\v!grid:\v!columns}% \hbox \layoutcomponentboxattribute to \makeupwidth {\dorecurse\layoutcolumns {\hskip\layoutcolumnwidth \ifnum\recurselevel<\layoutcolumns \vrule \s!height\ht\scratchbox \s!depth \dp\scratchbox \s!width \layoutcolumndistance \fi}}% \hskip-\makeupwidth \fi \setlayoutcomponentattribute{\v!grid:\v!lines}% \hbox \layoutcomponentboxattribute{\box\scratchbox}% \endgroup \ifcase\c_page_grids_location\or\hskip-\makeupwidth\box#1\fi}% \stopcolor} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ita.mkii0000644000175000017500000004651311754241457024263 0ustar norbertnorbert%D \module %D [ file=lang-ita, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Italic Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % Todo: replace \'.. by \namedglyph \writestatus{loading}{ConTeXt Language Macros / Italic Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. %D %D \starttabulate[|lB|l|] %D \NC Italian \NC Giuseppe Bilotta \NC \NR %D \NC Romanian \NC Dan Seracu \NC \NR %D \NC Portuguese \NC Pedro F. M. Mendon\c a \NC \NR %D \stoptabulate % Latin, Italian, Rhaeto-Romanic, Rumanian, Sardian % Catalan, French, Ladino, Portuguese, Proven\c{c}al, Spanish \unprotect \ifx\guillemotspace\undefined \let\guillemotspace\empty \fi \ifx\sentencespace \undefined \let\sentencespace \empty \fi \installlanguage [\s!fr] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\leftguillemot, \c!rightquote=\rightguillemot, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day+,\v!space,\v!month,\v!space,\v!year}, \s!mapping={texnansi,ec}, \s!encoding={texnansi,ec}] \installlanguage [\s!es] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\ ,\v!month,\ ,\v!year}] \installlanguage [sp] [\s!es] % old times context \installlanguage [\s!ca] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\ ,\v!month,\ ,\v!year}] % Note GB left|/|right (sub)sentences are for \quote {incisi}. \installlanguage [\s!it] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=--, \c!rightsubsentence=--, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!leftspeech=\leftguillemot, \c!middlespeech=\leftguillemot, \c!rightspeech=\rightguillemot, \c!date={\v!day,\ ,\v!month,\ ,\v!year}, \s!mapping={texnansi,ec}, \s!encoding={texnansi,ec}] \installlanguage % the same as italian [\s!la] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\lowerrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\lowerrightdoubleninequote, \c!date={\v!day,\ ,\v!month,\ ,\v!year}] \installlanguage [\s!pt] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\ ,\v!month,\ ,\v!day}, \s!mapping={texnansi,ec}, \s!encoding={texnansi,ec}] \installlanguage [\s!ro] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\leftguillemot, \c!rightquote=\rightguillemot, \c!leftquotation=\lowerrightdoubleninequote, \c!rightquotation=\upperleftdoublesixquote, \c!date={\v!day,\ ,\v!month,\ ,\v!year}] %D For compatibility reasons we also define: \installlanguage [fa] [\s!fr] % for dutchies only \installlanguage [french] [\s!fr] \installlanguage [spanish] [\s!es] \installlanguage [catalan] [\s!ca] \installlanguage [italian] [\s!it] \installlanguage [latin] [\s!la] \installlanguage [portuguese] [\s!pt] \installlanguage [romanian] [\s!ro] %D Labels and header texts. \setupheadtext [\s!fr] [\v!content=Table des mati\`eres] \setupheadtext [\s!es] [\v!content=\'Indice] \setupheadtext [\s!ca] [\v!content=\'Index de continguts] \setupheadtext [\s!it] [\v!content=Indice] \setupheadtext [\s!la] [\v!content=Quod in libro continetur] %Argumentum \setupheadtext [\s!pt] [\v!content=Conte\'udo] \setupheadtext [\s!ro] [\v!content=Cuprins] \setupheadtext [\s!fr] [\v!tables=Tableaux] \setupheadtext [\s!es] [\v!tables=Tablas] \setupheadtext [\s!ca] [\v!tables=Taules] \setupheadtext [\s!it] [\v!tables=Tabelle] \setupheadtext [\s!la] [\v!tables=Tabulae] \setupheadtext [\s!pt] [\v!tables=Tabelas] \setupheadtext [\s!ro] [\v!tables=Tabele] \setupheadtext [\s!fr] [\v!figures=Figures] \setupheadtext [\s!es] [\v!figures=Ilustraciones] \setupheadtext [\s!ca] [\v!figures=Figures] \setupheadtext [\s!it] [\v!figures=Figure] \setupheadtext [\s!la] [\v!figures=Imagines] \setupheadtext [\s!pt] [\v!figures=Figuras] \setupheadtext [\s!ro] [\v!figures=Figuri] \setupheadtext [\s!fr] [\v!graphics=Graphiques] \setupheadtext [\s!es] [\v!graphics=Gr\'aficos] \setupheadtext [\s!it] [\v!graphics=Grafici] \setupheadtext [\s!ca] [\v!graphics=Gr\`afiques] \setupheadtext [\s!la] [\v!graphics=Typi] \setupheadtext [\s!pt] [\v!graphics=Gr\'aficos] \setupheadtext [\s!ro] [\v!graphics=Grafice] \setupheadtext [\s!fr] [\v!intermezzi=Interm\`edes] \setupheadtext [\s!es] [\v!intermezzi=Intermedios] \setupheadtext [\s!ca] [\v!intermezzi=Intermedis] \setupheadtext [\s!it] [\v!intermezzi=Intermezzi] \setupheadtext [\s!la] [\v!intermezzi=Intermissa] \setupheadtext [\s!pt] [\v!intermezzi=Interm\'edios] \setupheadtext [\s!ro] [\v!intermezzi=Intermzzo] \setupheadtext [\s!fr] [\v!index=Index] \setupheadtext [\s!es] [\v!index=\'Indice alfab\'etico] \setupheadtext [\s!ca] [\v!index=\'Index alfab\`etic] \setupheadtext [\s!it] [\v!index=Indice] \setupheadtext [\s!la] [\v!index=Indices] \setupheadtext [\s!pt] [\v!index=\'Indice] \setupheadtext [\s!ro] [\v!index=Index] \setupheadtext [\s!fr] [\v!abbreviations=Abr\'eviations] \setupheadtext [\s!es] [\v!abbreviations=Abreviaturas] \setupheadtext [\s!ca] [\v!abbreviations=Abreviacions] \setupheadtext [\s!it] [\v!abbreviations=Abbreviazioni] \setupheadtext [\s!la] [\v!abbreviations=Notae] \setupheadtext [\s!pt] [\v!abbreviations=Abreviaturas] \setupheadtext [\s!ro] [\v!abbreviations=Abrevieri] \setupheadtext [\s!fr] [\v!logos=Logos] \setupheadtext [\s!es] [\v!logos=Logotipos] \setupheadtext [\s!ca] [\v!logos=Logotips] \setupheadtext [\s!it] [\v!logos=Logotipi] \setupheadtext [\s!la] [\v!logos=Typi negotiales] \setupheadtext [\s!pt] [\v!logos=Logotipos] \setupheadtext [\s!ro] [\v!logos=Logo-uri] \setupheadtext [\s!fr] [\v!units=Unit\'es] \setupheadtext [\s!es] [\v!units=Unidades] \setupheadtext [\s!ca] [\v!units=Unitats] \setupheadtext [\s!it] [\v!units=Unit\`a] \setupheadtext [\s!la] [\v!units=Modi] \setupheadtext [\s!pt] [\v!units=Unidades] \setupheadtext [\s!ro] [\v!units=Unit\u{a}\c{t}i] \setupheadtext [\s!fr] [pubs=Bibliographie] \setupheadtext [\s!es] [pubs=Bibliograf\'\ia] \setupheadtext [\s!ca] [pubs=Referències] \setupheadtext [\s!it] [pubs=Bibliografia] %setupheadtext [\s!la] [pubs=?] %setupheadtext [\s!pt] [pubs=?] %setupheadtext [\s!ro] [pubs=?] \setuplabeltext [\s!fr] [\v!table=Tableau ] \setuplabeltext [\s!es] [\v!table=Tabla ] \setuplabeltext [\s!ca] [\v!table=Taula ] \setuplabeltext [\s!it] [\v!table=Tabella ] \setuplabeltext [\s!la] [\v!table=Tabula ] \setuplabeltext [\s!pt] [\v!table=Tabela ] \setuplabeltext [\s!ro] [\v!table=Tabelul ] \setuplabeltext [\s!fr] [\v!figure=Figure ] \setuplabeltext [\s!es] [\v!figure=Ilustraci\'on ] \setuplabeltext [\s!ca] [\v!figure=Figura ] \setuplabeltext [\s!it] [\v!figure=Fig. ] \setuplabeltext [\s!la] [\v!figure=Imago ] \setuplabeltext [\s!pt] [\v!figure=Figura ] \setuplabeltext [\s!ro] [\v!figure=Figura ] \setuplabeltext [\s!fr] [\v!intermezzo=Interm\`ede ] \setuplabeltext [\s!es] [\v!intermezzo=Intermedio ] \setuplabeltext [\s!ca] [\v!intermezzo=Intermedi ] \setuplabeltext [\s!it] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!la] [\v!intermezzo=Intermissum ] \setuplabeltext [\s!pt] [\v!intermezzo=Interm\'edio ] \setuplabeltext [\s!ro] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!fr] [\v!graphic=Illustration ] \setuplabeltext [\s!es] [\v!graphic=Gr\'afico ] \setuplabeltext [\s!ca] [\v!graphic=Gr\`afica ] \setuplabeltext [\s!it] [\v!graphic=Grafico ] \setuplabeltext [\s!la] [\v!graphic=Typus ] \setuplabeltext [\s!pt] [\v!graphic=Gr\'afico ] \setuplabeltext [\s!ro] [\v!graphic=Graficul ] \setuplabeltext [\s!fr] [\v!chapter=] % Chapitre \setuplabeltext [\s!es] [\v!chapter=] % Cap\'\i tulo \setuplabeltext [\s!ca] [\v!chapter=] % Cap\'\i tol \setuplabeltext [\s!it] [\v!chapter=] \setuplabeltext [\s!la] [\v!chapter=] \setuplabeltext [\s!pt] [\v!chapter=] \setuplabeltext [\s!ro] [\v!chapter=] \setuplabeltext [\s!fr] [\v!section=] % Section \setuplabeltext [\s!es] [\v!section=] % Secci\'on \setuplabeltext [\s!ca] [\v!section=] % Secci\'o \setuplabeltext [\s!it] [\v!section=] \setuplabeltext [\s!la] [\v!section=] \setuplabeltext [\s!pt] [\v!section=] \setuplabeltext [\s!ro] [\v!section=] \setuplabeltext [\s!fr] [\v!subsection=] % Soussection \setuplabeltext [\s!es] [\v!subsection=] % Subsecci\'on \setuplabeltext [\s!ca] [\v!subsection=] % Subsecci\'o \setuplabeltext [\s!it] [\v!subsection=] \setuplabeltext [\s!la] [\v!subsection=] \setuplabeltext [\s!pt] [\v!subsection=] \setuplabeltext [\s!ro] [\v!subsection=] \setuplabeltext [\s!fr] [\v!subsubsection=] % Soussoussection \setuplabeltext [\s!es] [\v!subsubsection=] % Subsubsecci\'on \setuplabeltext [\s!ca] [\v!subsubsection=] % Subsubsecci\'o \setuplabeltext [\s!it] [\v!subsubsection=] \setuplabeltext [\s!la] [\v!subsubsection=] \setuplabeltext [\s!pt] [\v!subsubsection=] \setuplabeltext [\s!ro] [\v!subsubsection=] \setuplabeltext [\s!fr] [\v!subsubsubsection=] % Soussoussoussection \setuplabeltext [\s!es] [\v!subsubsubsection=] % Subsubsubsecci\'on \setuplabeltext [\s!ca] [\v!subsubsubsection=] % Subsubsubsecci\'o \setuplabeltext [\s!it] [\v!subsubsubsection=] \setuplabeltext [\s!la] [\v!subsubsubsection=] \setuplabeltext [\s!pt] [\v!subsubsubsection=] \setuplabeltext [\s!ro] [\v!subsubsubsection=] \setuplabeltext [\s!fr] [\v!appendix=] % Annexe \setuplabeltext [\s!es] [\v!appendix=] % Ap\'endice \setuplabeltext [\s!ca] [\v!appendix=] % Ap\`endix \setuplabeltext [\s!it] [\v!appendix=] \setuplabeltext [\s!la] [\v!appendix=] \setuplabeltext [\s!pt] [\v!appendix=] \setuplabeltext [\s!ro] [\v!appendix=] \setuplabeltext [\s!fr] [\v!part=Partie ] \setuplabeltext [\s!es] [\v!part=Parte ] \setuplabeltext [\s!ca] [\v!part=Part ] \setuplabeltext [\s!it] [\v!part=Parte ] \setuplabeltext [\s!la] [\v!part=Pars ] \setuplabeltext [\s!pt] [\v!part=Parte ] \setuplabeltext [\s!ro] [\v!part=Partea ] \setuplabeltext [\s!fr] [\v!line=ligne ] \setuplabeltext [\s!es] [\v!line=l\'\i nea ] \setuplabeltext [\s!ca] [\v!line=l\'\i nia ] \setuplabeltext [\s!it] [\v!line=riga ] \setuplabeltext [\s!la] [\v!line=versus ] \setuplabeltext [\s!pt] [\v!line=linha ] \setuplabeltext [\s!ro] [\v!line=linia ] \setuplabeltext [\s!fr] [\v!lines=lignes ] \setuplabeltext [\s!es] [\v!lines=l\'\i neas ] \setuplabeltext [\s!ca] [\v!lines=l\'\i nies ] \setuplabeltext [\s!it] [\v!lines=righe ] \setuplabeltext [\s!la] [\v!lines=versus ] \setuplabeltext [\s!pt] [\v!lines=linhas ] \setuplabeltext [\s!ro] [\v!lines=liniile ] \setuplabeltext [\s!fr] [\v!january=janvier] \setuplabeltext [\s!fr] [\v!february=f\'evrier] \setuplabeltext [\s!fr] [\v!march=mars] \setuplabeltext [\s!fr] [\v!april=avril] \setuplabeltext [\s!fr] [\v!may=mai] \setuplabeltext [\s!fr] [\v!june=juin] \setuplabeltext [\s!fr] [\v!july=juillet] \setuplabeltext [\s!fr] [\v!august=ao\^ut] \setuplabeltext [\s!fr] [\v!september=septembre] \setuplabeltext [\s!fr] [\v!october=octobre] \setuplabeltext [\s!fr] [\v!november=novembre] \setuplabeltext [\s!fr] [\v!december=d\'ecembre] \setuplabeltext [\s!es] [\v!january=enero] \setuplabeltext [\s!es] [\v!february=febrero] \setuplabeltext [\s!es] [\v!march=marzo] \setuplabeltext [\s!es] [\v!april=abril] \setuplabeltext [\s!es] [\v!may=mayo] \setuplabeltext [\s!es] [\v!june=junio] \setuplabeltext [\s!es] [\v!july=julio] \setuplabeltext [\s!es] [\v!august=agosto] \setuplabeltext [\s!es] [\v!september=septiembre] \setuplabeltext [\s!es] [\v!october=octubre] \setuplabeltext [\s!es] [\v!november=noviembre] \setuplabeltext [\s!es] [\v!december=diciembre] \setuplabeltext [\s!ca] [\v!january=gener] \setuplabeltext [\s!ca] [\v!february=febrer] \setuplabeltext [\s!ca] [\v!march=mar\c{c}] \setuplabeltext [\s!ca] [\v!april=abril] \setuplabeltext [\s!ca] [\v!may=maig] \setuplabeltext [\s!ca] [\v!june=juny] \setuplabeltext [\s!ca] [\v!july=juliol] \setuplabeltext [\s!ca] [\v!august=agost] \setuplabeltext [\s!ca] [\v!september=setembre] \setuplabeltext [\s!ca] [\v!october=octubre] \setuplabeltext [\s!ca] [\v!november=novembre] \setuplabeltext [\s!ca] [\v!december=desembre] \setuplabeltext [\s!it] [\v!january=gennaio] \setuplabeltext [\s!it] [\v!february=febbraio] \setuplabeltext [\s!it] [\v!march=marzo] \setuplabeltext [\s!it] [\v!april=aprile] \setuplabeltext [\s!it] [\v!may=maggio] \setuplabeltext [\s!it] [\v!june=giugno] \setuplabeltext [\s!it] [\v!july=luglio] \setuplabeltext [\s!it] [\v!august=agosto] \setuplabeltext [\s!it] [\v!september=settembre] \setuplabeltext [\s!it] [\v!october=ottobre] \setuplabeltext [\s!it] [\v!november=novembre] \setuplabeltext [\s!it] [\v!december=dicembre] \setuplabeltext [\s!la] [\v!january=Ianuarius] \setuplabeltext [\s!la] [\v!february=Februarius] \setuplabeltext [\s!la] [\v!march=Martius] \setuplabeltext [\s!la] [\v!april=Aprilis] \setuplabeltext [\s!la] [\v!may=Maius] \setuplabeltext [\s!la] [\v!june=Iunius] \setuplabeltext [\s!la] [\v!july=Iulius] % formerly Quintilis \setuplabeltext [\s!la] [\v!august=Augustus] % formerly Sextilis \setuplabeltext [\s!la] [\v!september=September] \setuplabeltext [\s!la] [\v!october=October] \setuplabeltext [\s!la] [\v!november=November] \setuplabeltext [\s!la] [\v!december=December] \setuplabeltext [\s!pt] [\v!january=janeiro] \setuplabeltext [\s!pt] [\v!february=fevereiro] \setuplabeltext [\s!pt] [\v!march=mar\c{c}o] \setuplabeltext [\s!pt] [\v!april=abril] \setuplabeltext [\s!pt] [\v!may=maio] \setuplabeltext [\s!pt] [\v!june=junho] \setuplabeltext [\s!pt] [\v!july=julho] \setuplabeltext [\s!pt] [\v!august=agosto] \setuplabeltext [\s!pt] [\v!september=setembro] \setuplabeltext [\s!pt] [\v!october=outubro] \setuplabeltext [\s!pt] [\v!november=novembro] \setuplabeltext [\s!pt] [\v!december=dezembro] \setuplabeltext [\s!ro] [\v!january=ianuarie] \setuplabeltext [\s!ro] [\v!february=februarie] \setuplabeltext [\s!ro] [\v!march=martie] \setuplabeltext [\s!ro] [\v!april=aprilie] \setuplabeltext [\s!ro] [\v!may=mai] \setuplabeltext [\s!ro] [\v!june=iunie] \setuplabeltext [\s!ro] [\v!july=iulie] \setuplabeltext [\s!ro] [\v!august=august] \setuplabeltext [\s!ro] [\v!september=septembrie] \setuplabeltext [\s!ro] [\v!october=octombrie] \setuplabeltext [\s!ro] [\v!november=noiembrie] \setuplabeltext [\s!ro] [\v!december=decembrie] \setuplabeltext [\s!fr] [\v!sunday=dimanche] \setuplabeltext [\s!fr] [\v!monday=lundi] \setuplabeltext [\s!fr] [\v!tuesday=mardi] \setuplabeltext [\s!fr] [\v!wednesday=mercredi] \setuplabeltext [\s!fr] [\v!thursday=jeudi] \setuplabeltext [\s!fr] [\v!friday=vendredi] \setuplabeltext [\s!fr] [\v!saturday=samedi] \setuplabeltext [\s!es] [\v!sunday=domingo] \setuplabeltext [\s!es] [\v!monday=lunes] \setuplabeltext [\s!es] [\v!tuesday=martes] \setuplabeltext [\s!es] [\v!wednesday=mi\'ercoles] \setuplabeltext [\s!es] [\v!thursday=jueves] \setuplabeltext [\s!es] [\v!friday=viernes] \setuplabeltext [\s!es] [\v!saturday=s\'abado] \setuplabeltext [\s!ca] [\v!sunday=diumenge] \setuplabeltext [\s!ca] [\v!monday=dilluns] \setuplabeltext [\s!ca] [\v!tuesday=dimarts] \setuplabeltext [\s!ca] [\v!wednesday=dimecres] \setuplabeltext [\s!ca] [\v!thursday=dijous] \setuplabeltext [\s!ca] [\v!friday=divendres] \setuplabeltext [\s!ca] [\v!saturday=dissabte] \setuplabeltext [\s!it] [\v!sunday=domenica] \setuplabeltext [\s!it] [\v!monday=luned\`\i] \setuplabeltext [\s!it] [\v!tuesday=marted\`\i] \setuplabeltext [\s!it] [\v!wednesday=mercoled\`\i] \setuplabeltext [\s!it] [\v!thursday=gioved\`\i] \setuplabeltext [\s!it] [\v!friday=venerd\`\i] \setuplabeltext [\s!it] [\v!saturday=sabato] \setuplabeltext [\s!la] [\v!sunday=Dies Solis] \setuplabeltext [\s!la] [\v!monday=Dies Lunae] \setuplabeltext [\s!la] [\v!tuesday=Dies Martis] \setuplabeltext [\s!la] [\v!wednesday=Dies Mercuri] \setuplabeltext [\s!la] [\v!thursday=Dies Iovis] \setuplabeltext [\s!la] [\v!friday=Dies Veneris] \setuplabeltext [\s!la] [\v!saturday=Dies Saturni] \setuplabeltext [\s!pt] [\v!sunday=domingo] \setuplabeltext [\s!pt] [\v!monday=segunda-feira] \setuplabeltext [\s!pt] [\v!tuesday=ter\c{c}a-feira] \setuplabeltext [\s!pt] [\v!wednesday=quarta-feira] \setuplabeltext [\s!pt] [\v!thursday=quinta-feira] \setuplabeltext [\s!pt] [\v!friday=sexta-feira] \setuplabeltext [\s!pt] [\v!saturday=s\'abado] \setuplabeltext [\s!ro] [\v!sunday=duminic\u{a}] \setuplabeltext [\s!ro] [\v!monday=luni] \setuplabeltext [\s!ro] [\v!tuesday=mar\c{t}i] \setuplabeltext [\s!ro] [\v!wednesday=miercuri] \setuplabeltext [\s!ro] [\v!thursday=joi] \setuplabeltext [\s!ro] [\v!friday=vineri] \setuplabeltext [\s!ro] [\v!saturday=s\^{a}mb\u{a}t\u{a}] %D Rather new \unknown \setuplabeltext [\s!it] [\v!page=pagina ] \setuplabeltext [\s!it] [\v!atpage=a pagina ] \setuplabeltext [\s!it] [\v!hencefore=come mostrato sopra] \setuplabeltext [\s!it] [\v!hereafter=come mostrato sotto] \setuplabeltext [\s!it] [\v!see=cf. ] \setuplabeltext [\s!fr] [\v!page=page ] \setuplabeltext [\s!fr] [\v!atpage=à la page ] \setuplabeltext [\s!fr] [\v!hencefore=ci-dessus] \setuplabeltext [\s!fr] [\v!hereafter=ci-dessous] \setuplabeltext [\s!fr] [\v!see=cf. ] %D Ordinal converters: \def\frordinaldaynumber#1% date is masculine {\number#1\ifcase#1\or \highordinalstr{er}% \fi} \defineconversion [\s!fr] [\v!day+] [\frordinaldaynumber] %D \ShowAllLanguageValues [\s!fr] [french] {French} {kiss} % franse slag %D \ShowAllLanguageValues [\s!es] [spanish] {Spanish} {guitar} % spaans benauwd %D \ShowAllLanguageValues [\s!ca] [catalan] {Catalan} {cream} %D \ShowAllLanguageValues [\s!it] [italian] {Italian} {aria} %D \ShowAllLanguageValues [\s!la] [latin] {Latin} {lover} % latijnse missen %D \ShowAllLanguageValues [\s!pt] [portuguese] {Portuguese} {fisherman} %D \ShowAllLanguageValues [\s!ro] [romanian] {Romanian} {traveller} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-039.mkii0000644000175000017500000000566011754241457024034 0ustar norbertnorbert%D \module %D [ file=unic-039, %D version=2005.06.16, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 39, %D author=Nikolai Weibull, %D date=\currentdate, %D copyright={Nikolai Weibull \& Hans Hagen}] \unprotect \startunicodevector 39 \expandafter\strippedcsname \ifcase\numexpr#1-192\relax \unknownchar \or % THREE DIMENSIONAL ANGLE \unknownchar \or % WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE \perp \or % PERPENDICULAR \unknownchar \or % OPEN SUBSET \unknownchar \or % OPEN SUPERSET \lbag \or % LEFT S-SHAPED BAG DELIMITER \rbag \or % RIGHT S-SHAPED BAG DELIMITER \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % WHITE DIAMOND WITH CENTRED DOT \unknownchar \or % AND WITH DOT \unknownchar \or % ELEMENT OF OPENING UPWARDS \unknownchar \or % LOWER RIGHT CORNER WITH DOT \unknownchar \or % UPPER LEFT CORNER WITH DOT \unknownchar \or % LEFT OUTER JOIN \unknownchar \or % RIGHT OUTER JOIN \unknownchar \or % FULL OUTER JOIN \unknownchar \or % LARGE UP TACK \unknownchar \or % LARGE DOWN TACK \unknownchar \or % LEFT AND RIGHT DOUBLE TURNSTILE \unknownchar \or % LEFT AND RIGHT TACK \unknownchar \or % LEFT MULTIMAP \unknownchar \or % LONG RIGHT TACK \unknownchar \or % LONG LEFT TACK \unknownchar \or % UP TACK WITH CIRCLE ABOVE \unknownchar \or % LOZENGE DIVIDED BY HORIZONTAL RULE \unknownchar \or % WHITE CONCAVE-SIDED DIAMOND \unknownchar \or % WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK \unknownchar \or % WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK \unknownchar \or % WHITE SQUARE WITH LEFTWARDS TICK \unknownchar \or % WHITE SQUARE WITH RIGHTWARDS TICK \unic@Lbracket \or % MATHEMATICAL LEFT WHITE SQUARE BRACKET \unic@Rbracket \or % MATHEMATICAL RIGHT WHITE SQUARE BRACKET \langle \or % MATHEMATICAL LEFT ANGLE BRACKET \rangle \or % MATHEMATICAL RIGHT ANGLE BRACKET \unic@Langle \or % MATHEMATICAL LEFT DOUBLE ANGLE BRACKET \unic@Rangle \or % MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \else % \unknownchar \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-raw.mkii0000644000175000017500000000023211376503616024276 0ustar norbertnorbert\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi \gdef\setupprettyRAWtype% {\setupprettyTEXtype \def\prettyidentifier{RAW}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-jap.mkii0000644000175000017500000000512511754241457024277 0ustar norbertnorbert%D \module %D [ file=font-jap, %D version=2006.01.13, %D title=\CONTEXT\ Font Macros, %D subtitle=Japanese, %D author=Hans Hagen, %D date=\currentdate, %D suggestions=Wang Lei, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifx\handlejapaneseunicodeglyph\undefined \else \endinput \fi \ifx\handlechineseunicodeglyph \undefined \input font-chi.tex \fi \writestatus{loading}{ConTeXt Font Macros / Japanese} \unprotect \newif\iftracejapanese \let\japaneseencoding\empty \def\setjapaneseencoding {\getfontfileparameters\unicodestyle \ifx\currentfontfileencoding\undefined \else \let\japaneseencoding\currentfontfileencoding \fi} \def\japaneseunicodescale {\chineseunicodescale } \def\japaneseunicodeheight {\chineseunicodeheight } \def\japaneseunicodedepth {\chineseunicodedepth } \def\japaneseinterglyphskip{\chineseinterglyphskip} \def\japanesesurroundskip {\chinesesurroundskip } \setupunicodefont [japanese] [ \c!scale=\japaneseunicodescale, \c!height=\japaneseunicodeheight, \c!depth=\japaneseunicodedepth, \c!strut=\v!yes, \c!interlinespace=\v!yes, \c!conversion=\japanesenumber, \c!commands=\setjapaneseencoding, % needed for digits \c!command=\handlejapaneseunicodeglyph] \def\japanesenumber{\numbers} \def\handlejapaneseunicodeglyph {\begingroup % \let\chineseunicodescale \japaneseunicodescale % \let\chineseunicodeheight \japaneseunicodeheight % \let\chineseunicodedepth \japaneseunicodedepth % \let\chineseinterglyphskip\japaneseinterglyphskip % \let\chinesesurroundskip \japanesesurroundskip \iftracejapanese\tracechinesetrue\else\tracechinesefalse\fi \handlechineseunicodeglyph \endgroup} \doifelse \currentregime {utf} { % todo: typescripts \definefontsynonym [JapaneseRegular] [uni-cybercjk-][encoding=cjk-uni] \definefontsynonym [JapaneseSlanted] [uni-cybercjk-][encoding=cjk-uni] \definefontsynonym [JapaneseItalic] [uni-cybercjk-][encoding=cjk-uni] \definefontsynonym [JapaneseBold] [uni-cybercjk-][encoding=cjk-uni] \definefontsynonym [JapaneseBoldSlanted][uni-cybercjk-][encoding=cjk-uni] \definefontsynonym [JapaneseBoldItalic] [uni-cybercjk-][encoding=cjk-uni] \loadmapfile[uni-cybercjk.map] \defineunicodefont [Japanese] [Japanese] [japanese] } { \writestatus{Japanese}{No fonts defined} } \Japanese \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-math-parameters.lua0000644000175000017500000001052612161703335025733 0ustar norbertnorbertif not modules then modules = { } end modules ['s-math-coverage'] = { version = 1.001, comment = "companion to s-math-coverage.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.math = moduledata.math or { } moduledata.math.parameters = moduledata.math.parameters or { } local tables = utilities.tables.definedtable("math","tracing","spacing","tables") tables.styleaxis = { "ord", "op", "bin", "rel", "open", "close", "punct", "inner", } tables.parameters = { "quad", "axis", "operatorsize", "overbarkern", "overbarrule", "overbarvgap", "underbarkern", "underbarrule", "underbarvgap", "radicalkern", "radicalrule", "radicalvgap", "radicaldegreebefore", "radicaldegreeafter", "radicaldegreeraise", "stackvgap", "stacknumup", "stackdenomdown", "fractionrule", "fractionnumvgap", "fractionnumup", "fractiondenomvgap", "fractiondenomdown", "fractiondelsize", "limitabovevgap", "limitabovebgap", "limitabovekern", "limitbelowvgap", "limitbelowbgap", "limitbelowkern", "underdelimitervgap", "underdelimiterbgap", "overdelimitervgap", "overdelimiterbgap", "subshiftdrop", "supshiftdrop", "subshiftdown", "subsupshiftdown", "subtopmax", "supshiftup", "supbottommin", "supsubbottommax", "subsupvgap", "spaceafterscript", "connectoroverlapmin", } tables.styles = { "display", "text", "script", "scriptscript", } function tables.stripmu(str) str = string.gsub(str,"mu","") str = string.gsub(str," ","") str = string.gsub(str,"plus","+") str = string.gsub(str,"minus","-") return str end function tables.strippt(old) local new = string.gsub(old,"pt","") if new ~= old then new = string.format("%0.4f",tonumber(new)) end return new end function moduledata.math.parameters.showspacing() local styles = tables.styles local styleaxis = tables.styleaxis context.starttabulate { "|Tl|Tl|" .. string.rep("Tc|",(#styles*2)) } context.HL() context.NC() context.NC() context.NC() for i=1,#styles do context.bold(styles[i]) context.NC() context.bold("(cramped)") context.NC() end context.NR() context.HL() for i=1,#styleaxis do -- print(key,tex.getmath(key,"text")) local one = styleaxis[i] for j=1,#styleaxis do local two = styleaxis[j] context.NC() if j == 1 then context.bold(one) end context.NC() context.bold(two) context.NC() for i=1,#styles do context("\\ctxlua{context(math.tracing.spacing.tables.stripmu('\\the\\Umath%s%sspacing\\%sstyle'))}",one,two,styles[i]) context.NC() context("\\ctxlua{context(math.tracing.spacing.tables.stripmu('\\the\\Umath%s%sspacing\\cramped%sstyle'))}",one,two,styles[i]) context.NC() end context.NR() end end context.stoptabulate() end function moduledata.math.parameters.showparameters() local styles = tables.styles local parameters = tables.parameters context.starttabulate { "|l|" .. string.rep("Tc|",(#styles*2)) } context.HL() context.NC() context.NC() for i=1,#styles do context.bold(styles[i]) context.NC() context.bold("(cramped)") context.NC() end context.NR() context.HL() for i=1,#parameters do local parameter = parameters[i] -- print(parameter,tex.getmath(parameter,"text")) context.NC() context.type(parameter) context.NC() for i=1,#styles do context("\\ctxlua{context(math.tracing.spacing.tables.strippt('\\the\\Umath%s\\%sstyle'))}",parameter,styles[i]) context.NC() context("\\ctxlua{context(math.tracing.spacing.tables.strippt('\\the\\Umath%s\\cramped%sstyle'))}",parameter,styles[i]) context.NC() end context.NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-neg.mkiv0000644000175000017500000000160612130411274024300 0ustar norbertnorbert%D \module %D [ file=attr-neg, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Negation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Attribute Macros / Negation} \registerctxluafile{attr-neg}{1.001} \unprotect % positive and negative are preregistered \unexpanded\def\startnegative{\attr_trigger_negative\v!negative} \unexpanded\def\stopnegative {\attr_trigger_negative\v!positive} \unexpanded\def\startpositive{\attr_trigger_negative\v!positive} \unexpanded\def\stoppositive {\attr_trigger_negative\v!negative} \def\attr_trigger_negative#1{\ctxcommand{triggernegative('#1')}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-ser.lua0000644000175000017500000002010512130411274024101 0ustar norbertnorbertif not modules then modules = { } end modules ['node-ser'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- beware, some field names will change in a next releases -- of luatex; this is pretty old code that needs an overhaul local type, format, rep = type, string.format, string.rep local concat, tohash, sortedkeys, printtable = table.concat, table.tohash, table.sortedkeys, table.print local allocate = utilities.storage.allocate local nodes, node = nodes, node local traverse = node.traverse local is_node = node.is_node local nodecodes = nodes.nodecodes local noadcodes = nodes.noadcodes local nodefields = nodes.fields local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local expand = allocate ( tohash { "list", -- list_ptr & ins_ptr & adjust_ptr "pre", -- "post", -- "spec", -- glue_ptr "top_skip", -- "attr", -- "replace", -- nobreak "components", -- lig_ptr "box_left", -- "box_right", -- "glyph", -- margin_char "leader", -- leader_ptr "action", -- action_ptr "value", -- user_defined nodes with subtype 'a' en 'n' "head", } ) -- page_insert: "height", "last_ins_ptr", "best_ins_ptr" -- split_insert: "height", "last_ins_ptr", "best_ins_ptr", "broken_ptr", "broken_ins" local ignore = allocate ( tohash { "page_insert", "split_insert", "ref_count", } ) local dimension = allocate ( tohash { "width", "height", "depth", "shift", "stretch", "shrink", "xoffset", "yoffset", "surround", "kern", "box_left_width", "box_right_width" } ) -- flat: don't use next, but indexes -- verbose: also add type -- can be sped up nodes.dimensionfields = dimension nodes.listablefields = expand nodes.ignorablefields = ignore -- not ok yet: local function astable(n,sparse) -- not yet ok local f, t = nodefields(n), { } for i=1,#f do local v = f[i] local d = n[v] if d then if ignore[v] or v == "id" then -- skip elseif expand[v] then -- or: type(n[v]) ~= "string" or type(n[v]) ~= "number" or type(n[v]) ~= "table" t[v] = "pointer to list" elseif sparse then if (type(d) == "number" and d ~= 0) or (type(d) == "string" and d ~= "") then t[v] = d end else t[v] = d end end end t.type = nodecodes[n.id] return t end nodes.astable = astable setinspector(function(v) if is_node(v) then printtable(astable(v),tostring(v)) return true end end) -- under construction: local function totable(n,flat,verbose,noattributes) -- todo: no local function local function to_table(n,flat,verbose,noattributes) -- no need to pass local f = nodefields(n) local tt = { } for k=1,#f do local v = f[k] local nv = v and n[v] if nv then if ignore[v] then -- skip elseif noattributes and v == "attr" then -- skip elseif expand[v] then if type(nv) == "number" or type(nv) == "string" then tt[v] = nv else tt[v] = totable(nv,flat,verbose) end elseif type(nv) == "table" then tt[v] = nv -- totable(nv,flat,verbose) -- data else tt[v] = nv end end end if verbose then tt.type = nodecodes[tt.id] end return tt end if n then if flat then local t, tn = { }, 0 while n do tn = tn + 1 t[tn] = to_table(n,flat,verbose,noattributes) n = n.next end return t else local t = to_table(n) if n.next then t.next = totable(n.next,flat,verbose,noattributes) end return t end else return { } end end nodes.totable = totable local function key(k) return ((type(k) == "number") and "["..k.."]") or k end -- not ok yet; this will become a module -- todo: adapt to nodecodes etc local function serialize(root,name,handle,depth,m,noattributes) handle = handle or print if depth then depth = depth .. " " handle(format("%s%s={",depth,key(name))) else depth = "" local tname = type(name) if tname == "string" then if name == "return" then handle("return {") else handle(name .. "={") end elseif tname == "number" then handle("[" .. name .. "]={") else handle("t={") end end if root then local fld if root.id then fld = nodefields(root) -- we can cache these (todo) else fld = sortedkeys(root) end if type(root) == 'table' and root['type'] then -- userdata or table handle(format("%s %s=%q,",depth,'type',root['type'])) end for f=1,#fld do local k = fld[f] if k == "ref_count" then -- skip elseif noattributes and k == "attr" then -- skip elseif k == "id" then local v = root[k] handle(format("%s id=%s,",depth,nodecodes[v] or noadcodes[v] or v)) elseif k then local v = root[k] local t = type(v) if t == "number" then if v == 0 then -- skip else handle(format("%s %s=%s,",depth,key(k),v)) end elseif t == "string" then if v == "" then -- skip else handle(format("%s %s=%q,",depth,key(k),v)) end elseif t == "boolean" then handle(format("%s %s=%q,",depth,key(k),tostring(v))) elseif v then -- userdata or table serialize(v,k,handle,depth,m+1,noattributes) end end end if root['next'] then -- userdata or table serialize(root['next'],'next',handle,depth,m+1,noattributes) end end if m and m > 0 then handle(format("%s},",depth)) else handle(format("%s}",depth)) end end function nodes.serialize(root,name,noattributes) local t, n = { }, 0 local function flush(s) n = n + 1 t[n] = s end serialize(root,name,flush,nil,0,noattributes) return concat(t,"\n") end function nodes.serializebox(n,flat,verbose,name) return nodes.serialize(nodes.totable(tex.box[n],flat,verbose),name) end function nodes.visualizebox(...) -- to be checked .. will move to module anyway context.starttyping() context.pushcatcodes("verbatim") context(nodes.serializebox(...)) context.stoptyping() context.popcatcodes() end function nodes.list(head,n) -- name might change to nodes.type -- to be checked .. will move to module anyway if not n then context.starttyping(true) end while head do local id = head.id context(rep(" ",n or 0) .. tostring(head) .. "\n") if id == hlist_code or id == vlist_code then nodes.list(head.list,(n or 0)+1) end head = head.next end if not n then context.stoptyping(true) end end function nodes.print(head,n) while head do local id = head.id logs.writer(string.formatters["%w%S"],n or 0,head) if id == hlist_code or id == vlist_code then nodes.print(head.list,(n or 0)+1) end head = head.next end end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ctx.lua0000644000175000017500000017075312161703335024154 0ustar norbertnorbertif not modules then modules = { } end modules ['font-ctx'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- At some point I will clean up the code here so that at the tex end -- the table interface is used. -- -- Todo: make a proper 'next id' mechanism (register etc) or wait till 'true' -- in virtual fonts indices is implemented. local context, commands = context, commands local texcount, texsetcount = tex.count, tex.setcount local format, gmatch, match, find, lower, gsub, byte = string.format, string.gmatch, string.match, string.find, string.lower, string.gsub, string.byte local concat, serialize, sort, fastcopy, mergedtable = table.concat, table.serialize, table.sort, table.fastcopy, table.merged local sortedhash, sortedkeys, sequenced = table.sortedhash, table.sortedkeys, table.sequenced local settings_to_hash, hash_to_string = utilities.parsers.settings_to_hash, utilities.parsers.hash_to_string local formatcolumns = utilities.formatters.formatcolumns local mergehashes = utilities.parsers.mergehashes local formatters = string.formatters local tostring, next, type, rawget, tonumber = tostring, next, type, rawget, tonumber local utfchar, utfbyte = utf.char, utf.byte local round = math.round local P, S, C, Cc, Cf, Cg, Ct, lpegmatch = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cf, lpeg.Cg, lpeg.Ct, lpeg.match local trace_features = false trackers.register("fonts.features", function(v) trace_features = v end) local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local trace_designsize = false trackers.register("fonts.designsize", function(v) trace_designsize = v end) local trace_usage = false trackers.register("fonts.usage", function(v) trace_usage = v end) local trace_mapfiles = false trackers.register("fonts.mapfiles", function(v) trace_mapfiles = v end) local trace_automode = false trackers.register("fonts.automode", function(v) trace_automode = v end) local report_features = logs.reporter("fonts","features") local report_cummulative = logs.reporter("fonts","cummulative") local report_defining = logs.reporter("fonts","defining") local report_status = logs.reporter("fonts","status") local report_mapfiles = logs.reporter("fonts","mapfiles") local setmetatableindex = table.setmetatableindex local fonts = fonts local handlers = fonts.handlers local otf = handlers.otf -- brrr local names = fonts.names local definers = fonts.definers local specifiers = fonts.specifiers local constructors = fonts.constructors local loggers = fonts.loggers local fontgoodies = fonts.goodies local helpers = fonts.helpers local hashes = fonts.hashes local currentfont = font.current local texattribute = tex.attribute local texdimen = tex.dimen local fontdata = hashes.identifiers local characters = hashes.chardata local descriptions = hashes.descriptions local properties = hashes.properties local resources = hashes.resources local csnames = hashes.csnames local marks = hashes.markdata local lastmathids = hashes.lastmathids local designsizefilename = fontgoodies.designsizes.filename local otffeatures = otf.features local otftables = otf.tables local registerotffeature = otffeatures.register local baseprocessors = otffeatures.processors.base local baseinitializers = otffeatures.initializers.base local sequencers = utilities.sequencers local appendgroup = sequencers.appendgroup local appendaction = sequencers.appendaction specifiers.contextsetups = specifiers.contextsetups or { } specifiers.contextnumbers = specifiers.contextnumbers or { } specifiers.contextmerged = specifiers.contextmerged or { } specifiers.synonyms = specifiers.synonyms or { } local setups = specifiers.contextsetups local numbers = specifiers.contextnumbers local merged = specifiers.contextmerged local synonyms = specifiers.synonyms storage.register("fonts/setups" , setups , "fonts.specifiers.contextsetups" ) storage.register("fonts/numbers", numbers, "fonts.specifiers.contextnumbers") storage.register("fonts/merged", merged, "fonts.specifiers.contextmerged") storage.register("fonts/synonyms", synonyms, "fonts.specifiers.synonyms") -- inspect(setups) if environment.initex then setmetatableindex(setups,function(t,k) return type(k) == "number" and rawget(t,numbers[k]) or nil end) else setmetatableindex(setups,function(t,k) local v = type(k) == "number" and rawget(t,numbers[k]) if v then t[k] = v return v end end) end -- this will move elsewhere ... utilities.strings.formatters.add(formatters,"font:name", [["'"..file.basename(%s.properties.name).."'"]]) utilities.strings.formatters.add(formatters,"font:features",[["'"..table.sequenced(%s," ",true).."'"]]) -- ... like font-sfm or so constructors.resolvevirtualtoo = true -- context specific (due to resolver) local limited = false directives.register("system.inputmode", function(v) if not limited then local i_limiter = io.i_limiter(v) if i_limiter then fontloader.open = i_limiter.protect(fontloader.open) fontloader.info = i_limiter.protect(fontloader.info) limited = true end end end) function definers.resetnullfont() -- resetting is needed because tikz misuses nullfont local parameters = fonts.nulldata.parameters -- parameters.slant = 0 -- 1 parameters.space = 0 -- 2 parameters.space_stretch = 0 -- 3 parameters.space_shrink = 0 -- 4 parameters.x_height = 0 -- 5 parameters.quad = 0 -- 6 parameters.extra_space = 0 -- 7 -- constructors.enhanceparameters(parameters) -- official copies for us -- definers.resetnullfont = function() end end commands.resetnullfont = definers.resetnullfont -- this cannot be a feature initializer as there is no auto namespace -- so we never enter the loop then; we can store the defaults in the tma -- file (features.gpos.mkmk = 1 etc) local needsnodemode = { gpos_mark2mark = true, gpos_mark2base = true, gpos_mark2ligature = true, } otftables.scripts.auto = "automatic fallback to latn when no dflt present" -- setmetatableindex(otffeatures.descriptions,otftables.features) local privatefeatures = { tlig = true, trep = true, anum = true, } local function checkedscript(tfmdata,resources,features) local latn = false local script = false for g, list in next, resources.features do for f, scripts in next, list do if privatefeatures[f] then -- skip elseif scripts.dflt then script = "dflt" break elseif scripts.latn then latn = true end end end if not script then script = latn and "latn" or "dflt" end if trace_automode then report_defining("auto script mode, using script %a in font %!font:name!",script,tfmdata) end features.script = script return script end local function checkedmode(tfmdata,resources,features) local sequences = resources.sequences if sequences and #sequences > 0 then local script = features.script or "dflt" local language = features.language or "dflt" for feature, value in next, features do if value then local found = false for i=1,#sequences do local sequence = sequences[i] local features = sequence.features if features then local scripts = features[feature] if scripts then local languages = scripts[script] if languages and languages[language] then if found then -- more than one lookup if trace_automode then report_defining("forcing mode %a, font %!font:name!, feature %a, script %a, language %a, %s", "node",tfmdata,feature,script,language,"multiple lookups") end features.mode = "node" return "node" elseif needsnodemode[sequence.type] then if trace_automode then report_defining("forcing mode %a, font %!font:name!, feature %a, script %a, language %a, %s", "node",tfmdata,feature,script,language,"no base support") end features.mode = "node" return "node" else -- at least one lookup found = true end end end end end end end end features.mode = "base" -- new, or is this wrong? return "base" end definers.checkedscript = checkedscript definers.checkedmode = checkedmode local function modechecker(tfmdata,features,mode) -- we cannot adapt features as they are shared! if trace_features then report_features("fontname %!font:name!, features %!font:features!",tfmdata,features) end local rawdata = tfmdata.shared.rawdata local resources = rawdata and rawdata.resources local script = features.script if resources then if script == "auto" then script = checkedscript(tfmdata,resources,features) end if mode == "auto" then mode = checkedmode(tfmdata,resources,features) end else report_features("missing resources for font %!font:name!",tfmdata) end return mode end registerotffeature { -- we only set the checker and leave other settings of the mode -- feature as they are name = "mode", modechecker = modechecker, } -- -- default = true anyway -- -- local normalinitializer = constructors.getfeatureaction("otf","initializers","node","analyze") -- -- local function analyzeinitializer(tfmdata,value,features) -- attr -- if value == "auto" and features then -- value = features.init or features.medi or features.fina or features.isol or false -- end -- return normalinitializer(tfmdata,value,features) -- end -- -- registerotffeature { -- name = "analyze", -- initializers = { -- node = analyzeinitializer, -- }, -- } local beforecopyingcharacters = sequencers.new { name = "beforecopyingcharacters", arguments = "target,original", } appendgroup(beforecopyingcharacters,"before") -- user appendgroup(beforecopyingcharacters,"system") -- private appendgroup(beforecopyingcharacters,"after" ) -- user function constructors.beforecopyingcharacters(original,target) local runner = beforecopyingcharacters.runner if runner then runner(original,target) end end local aftercopyingcharacters = sequencers.new { name = "aftercopyingcharacters", arguments = "target,original", } appendgroup(aftercopyingcharacters,"before") -- user appendgroup(aftercopyingcharacters,"system") -- private appendgroup(aftercopyingcharacters,"after" ) -- user function constructors.aftercopyingcharacters(original,target) local runner = aftercopyingcharacters.runner if runner then runner(original,target) end end --[[ldx--

So far we haven't really dealt with features (or whatever we want to pass along with the font definition. We distinguish the following situations:

situations:

name:xetex like specs name@virtual font spec name*context specification --ldx]]-- -- currently fonts are scaled while constructing the font, so we -- have to do scaling of commands in the vf at that point using e.g. -- "local scale = g.parameters.factor or 1" after all, we need to -- work with copies anyway and scaling needs to be done at some point; -- however, when virtual tricks are used as feature (makes more -- sense) we scale the commands in fonts.constructors.scale (and set the -- factor there) local loadfont = definers.loadfont function definers.loadfont(specification,size,id) -- overloads the one in font-def local variants = definers.methods.variants local virtualfeatures = specification.features.virtual if virtualfeatures and virtualfeatures.preset then local variant = variants[virtualfeatures.preset] if variant then return variant(specification,size,id) end else local tfmdata = loadfont(specification,size,id) -- constructors.checkvirtualid(tfmdata,id) return tfmdata end end local function predefined(specification) local variants = definers.methods.variants local detail = specification.detail if detail ~= "" and variants[detail] then specification.features.virtual = { preset = detail } end return specification end definers.registersplit("@", predefined,"virtual") local normalize_features = otffeatures.normalize -- should be general local function definecontext(name,t) -- can be shared local number = setups[name] and setups[name].number or 0 -- hm, numbers[name] if number == 0 then number = #numbers + 1 numbers[number] = name end t.number = number setups[name] = t return number, t end local function presetcontext(name,parent,features) -- will go to con and shared if features == "" and find(parent,"=") then features = parent parent = "" end if not features or features == "" then features = { } elseif type(features) == "string" then features = normalize_features(settings_to_hash(features)) else features = normalize_features(features) end -- todo: synonyms, and not otf bound if parent ~= "" then for p in gmatch(parent,"[^, ]+") do local s = setups[p] if s then for k,v in next, s do if features[k] == nil then features[k] = v end end else -- just ignore an undefined one .. i.e. we can refer to not yet defined end end end -- these are auto set so in order to prevent redundant definitions -- we need to preset them (we hash the features and adding a default -- setting during initialization may result in a different hash) -- -- for k,v in next, triggers do -- if features[v] == nil then -- not false ! -- local vv = default_features[v] -- if vv then features[v] = vv end -- end -- end -- for feature,value in next, features do if value == nil then -- not false ! local default = default_features[feature] if default ~= nil then features[feature] = default end end end -- sparse 'm so that we get a better hash and less test (experimental -- optimization) local t = { } -- can we avoid t ? for k,v in next, features do -- if v then t[k] = v end t[k] = v end -- needed for dynamic features -- maybe number should always be renewed as we can redefine features local number = setups[name] and setups[name].number or 0 -- hm, numbers[name] if number == 0 then number = #numbers + 1 numbers[number] = name end t.number = number setups[name] = t return number, t end local function contextnumber(name) -- will be replaced local t = setups[name] if not t then return 0 elseif t.auto then local lng = tonumber(tex.language) local tag = name .. ":" .. lng local s = setups[tag] if s then return s.number or 0 else local script, language = languages.association(lng) if t.script ~= script or t.language ~= language then local s = fastcopy(t) local n = #numbers + 1 setups[tag] = s numbers[n] = tag s.number = n s.script = script s.language = language return n else setups[tag] = t return t.number or 0 end end else return t.number or 0 end end local function mergecontext(currentnumber,extraname,option) -- number string number (used in scrp-ini local extra = setups[extraname] if extra then local current = setups[numbers[currentnumber]] local mergedfeatures, mergedname = { }, nil if option < 0 then if current then for k, v in next, current do if not extra[k] then mergedfeatures[k] = v end end end mergedname = currentnumber .. "-" .. extraname else if current then for k, v in next, current do mergedfeatures[k] = v end end for k, v in next, extra do mergedfeatures[k] = v end mergedname = currentnumber .. "+" .. extraname end local number = #numbers + 1 mergedfeatures.number = number numbers[number] = mergedname merged[number] = option setups[mergedname] = mergedfeatures return number -- contextnumber(mergedname) else return currentnumber end end local extrasets = { } setmetatableindex(extrasets,function(t,k) local v = mergehashes(setups,k) t[k] = v return v end) local function mergecontextfeatures(currentname,extraname,how,mergedname) -- string string local extra = setups[extraname] or extrasets[extraname] if extra then local current = setups[currentname] local mergedfeatures = { } if how == "+" then if current then for k, v in next, current do mergedfeatures[k] = v end end for k, v in next, extra do mergedfeatures[k] = v end elseif how == "-" then if current then for k, v in next, current do mergedfeatures[k] = v end end for k, v in next, extra do -- only boolean features if v == true then mergedfeatures[k] = false end end else -- = for k, v in next, extra do mergedfeatures[k] = v end end local number = #numbers + 1 mergedfeatures.number = number numbers[number] = mergedname merged[number] = option setups[mergedname] = mergedfeatures return number else return numbers[currentname] or 0 end end local function registercontext(fontnumber,extraname,option) local extra = setups[extraname] if extra then local mergedfeatures, mergedname = { }, nil if option < 0 then mergedname = fontnumber .. "-" .. extraname else mergedname = fontnumber .. "+" .. extraname end for k, v in next, extra do mergedfeatures[k] = v end local number = #numbers + 1 mergedfeatures.number = number numbers[number] = mergedname merged[number] = option setups[mergedname] = mergedfeatures return number -- contextnumber(mergedname) else return 0 end end local function registercontextfeature(mergedname,extraname,how) local extra = setups[extraname] if extra then local mergedfeatures = { } for k, v in next, extra do mergedfeatures[k] = v end local number = #numbers + 1 mergedfeatures.number = number numbers[number] = mergedname merged[number] = how == "=" and 1 or 2 -- 1=replace, 2=combine setups[mergedname] = mergedfeatures return number -- contextnumber(mergedname) else return 0 end end specifiers.presetcontext = presetcontext specifiers.contextnumber = contextnumber specifiers.mergecontext = mergecontext specifiers.registercontext = registercontext specifiers.definecontext = definecontext -- we extend the hasher: constructors.hashmethods.virtual = function(list) local s = { } local n = 0 for k, v in next, list do n = n + 1 s[n] = k -- no checking on k end if n > 0 then sort(s) for i=1,n do local k = s[i] s[i] = k .. '=' .. tostring(list[k]) end return concat(s,"+") end end -- end of redefine -- local withcache = { } -- concat might be less efficient than nested tables -- -- local function withset(name,what) -- local zero = texattribute[0] -- local hash = zero .. "+" .. name .. "*" .. what -- local done = withcache[hash] -- if not done then -- done = mergecontext(zero,name,what) -- withcache[hash] = done -- end -- texattribute[0] = done -- end -- -- local function withfnt(name,what,font) -- local font = font or currentfont() -- local hash = font .. "*" .. name .. "*" .. what -- local done = withcache[hash] -- if not done then -- done = registercontext(font,name,what) -- withcache[hash] = done -- end -- texattribute[0] = done -- end function specifiers.showcontext(name) return setups[name] or setups[numbers[name]] or setups[numbers[tonumber(name)]] or { } end -- we need a copy as we will add (fontclass) goodies to the features and -- that is bad for a shared table -- local function splitcontext(features) -- presetcontext creates dummy here -- return fastcopy(setups[features] or (presetcontext(features,"","") and setups[features])) -- end local function splitcontext(features) -- presetcontext creates dummy here local sf = setups[features] if not sf then local n -- number if find(features,",") then -- let's assume a combination which is not yet defined but just specified (as in math) n, sf = presetcontext(features,features,"") else -- we've run into an unknown feature and or a direct spec so we create a dummy n, sf = presetcontext(features,"","") end end return fastcopy(sf) end -- local splitter = lpeg.splitat("=") -- -- local function splitcontext(features) -- local setup = setups[features] -- if setup then -- return setup -- elseif find(features,",") then -- -- This is not that efficient but handy anyway for quick and dirty tests -- -- beware, due to the way of caching setups you can get the wrong results -- -- when components change. A safeguard is to nil the cache. -- local merge = nil -- for feature in gmatch(features,"[^, ]+") do -- if find(feature,"=") then -- local k, v = lpegmatch(splitter,feature) -- if k and v then -- if not merge then -- merge = { k = v } -- else -- merge[k] = v -- end -- end -- else -- local s = setups[feature] -- if not s then -- -- skip -- elseif not merge then -- merge = s -- else -- for k, v in next, s do -- merge[k] = v -- end -- end -- end -- end -- setup = merge and presetcontext(features,"",merge) and setups[features] -- -- actually we have to nil setups[features] in order to permit redefinitions -- setups[features] = nil -- end -- return setup or (presetcontext(features,"","") and setups[features]) -- creates dummy -- end specifiers.splitcontext = splitcontext function specifiers.contexttostring(name,kind,separator,yes,no,strict,omit) -- not used return hash_to_string(mergedtable(handlers[kind].features.defaults or {},setups[name] or {}),separator,yes,no,strict,omit) end local function starred(features) -- no longer fallbacks here local detail = features.detail if detail and detail ~= "" then features.features.normal = splitcontext(detail) else features.features.normal = { } end return features end definers.registersplit('*',starred,"featureset") -- sort of xetex mode, but without [] and / as we have file: and name: etc local space = P(" ") local separator = S(";,") local equal = P("=") local spaces = space^0 local sometext = C((1-equal-space-separator)^1) local truevalue = P("+") * spaces * sometext * Cc(true) -- "yes" local falsevalue = P("-") * spaces * sometext * Cc(false) -- "no" local keyvalue = sometext * spaces * equal * spaces * sometext local somevalue = sometext * spaces * Cc(true) -- "yes" local pattern = Cf(Ct("") * (space + separator + Cg(keyvalue + falsevalue + truevalue + somevalue))^0, rawset) local function colonized(specification) specification.features.normal = normalize_features(lpegmatch(pattern,specification.detail)) return specification end definers.registersplit(":",colonized,"direct") -- define (two steps) local space = P(" ") local spaces = space^0 local leftparent = (P"(") local rightparent = (P")") local value = C((leftparent * (1-rightparent)^0 * rightparent + (1-space))^1) local dimension = C((space/"" + P(1))^1) local rest = C(P(1)^0) local scale_none = Cc(0) local scale_at = P("at") * Cc(1) * spaces * dimension -- value local scale_sa = P("sa") * Cc(2) * spaces * dimension -- value local scale_mo = P("mo") * Cc(3) * spaces * dimension -- value local scale_scaled = P("scaled") * Cc(4) * spaces * dimension -- value local sizepattern = spaces * (scale_at + scale_sa + scale_mo + scale_scaled + scale_none) local splitpattern = spaces * value * spaces * rest function helpers.splitfontpattern(str) local name, size = lpegmatch(splitpattern,str) local kind, size = lpegmatch(sizepattern,size) return name, kind, size end function helpers.fontpatternhassize(str) local name, size = lpegmatch(splitpattern,str) local kind, size = lpegmatch(sizepattern,size) return size or false end local specification -- still needed as local ? local getspecification = definers.getspecification -- we can make helper macros which saves parsing (but normaly not -- that many calls, e.g. in mk a couple of 100 and in metafun 3500) local setdefaultfontname = context.fntsetdefname local setsomefontname = context.fntsetsomename local setemptyfontsize = context.fntsetnopsize local setsomefontsize = context.fntsetsomesize local letvaluerelax = context.letvaluerelax function commands.definefont_one(str) statistics.starttiming(fonts) if trace_defining then report_defining("memory usage before: %s",statistics.memused()) report_defining("start stage one: %s",str) end local fullname, size = lpegmatch(splitpattern,str) local lookup, name, sub, method, detail = getspecification(fullname) if not name then report_defining("strange definition %a",str) setdefaultfontname() elseif name == "unknown" then setdefaultfontname() else setsomefontname(name) end -- we can also use a count for the size if size and size ~= "" then local mode, size = lpegmatch(sizepattern,size) if size and mode then texcount.scaledfontmode = mode setsomefontsize(size) else texcount.scaledfontmode = 0 setemptyfontsize() end elseif true then -- so we don't need to check in tex texcount.scaledfontmode = 2 setemptyfontsize() else texcount.scaledfontmode = 0 setemptyfontsize() end specification = definers.makespecification(str,lookup,name,sub,method,detail,size) if trace_defining then report_defining("stop stage one") end end local n = 0 -- we can also move rscale to here (more consistent) -- the argument list will become a table local function nice_cs(cs) return (gsub(cs,".->", "")) end function commands.definefont_two(global,cs,str,size,inheritancemode,classfeatures,fontfeatures,classfallbacks,fontfallbacks, mathsize,textsize,relativeid,classgoodies,goodies,classdesignsize,fontdesignsize) if trace_defining then report_defining("start stage two: %s (size %s)",str,size) end -- name is now resolved and size is scaled cf sa/mo local lookup, name, sub, method, detail = getspecification(str or "") -- new (todo: inheritancemode) local designsize = fontdesignsize ~= "" and fontdesignsize or classdesignsize or "" local designname = designsizefilename(name,designsize,size) if designname and designname ~= "" then if trace_defining or trace_designsize then report_defining("remapping name %a, specification %a, size %a, designsize %a",name,designsize,size,designname) end -- we don't catch detail here local o_lookup, o_name, o_sub, o_method, o_detail = getspecification(designname) if o_lookup and o_lookup ~= "" then lookup = o_lookup end if o_method and o_method ~= "" then method = o_method end if o_detail and o_detail ~= "" then detail = o_detail end name = o_name sub = o_sub end -- so far -- some settings can have been overloaded if lookup and lookup ~= "" then specification.lookup = lookup end if relativeid and relativeid ~= "" then -- experimental hook local id = tonumber(relativeid) or 0 specification.relativeid = id > 0 and id end specification.name = name specification.size = size specification.sub = (sub and sub ~= "" and sub) or specification.sub specification.mathsize = mathsize specification.textsize = textsize specification.goodies = goodies specification.cs = cs specification.global = global if detail and detail ~= "" then specification.method = method or "*" specification.detail = detail elseif specification.detail and specification.detail ~= "" then -- already set elseif inheritancemode == 0 then -- nothing elseif inheritancemode == 1 then -- fontonly if fontfeatures and fontfeatures ~= "" then specification.method = "*" specification.detail = fontfeatures end if fontfallbacks and fontfallbacks ~= "" then specification.fallbacks = fontfallbacks end elseif inheritancemode == 2 then -- classonly if classfeatures and classfeatures ~= "" then specification.method = "*" specification.detail = classfeatures end if classfallbacks and classfallbacks ~= "" then specification.fallbacks = classfallbacks end elseif inheritancemode == 3 then -- fontfirst if fontfeatures and fontfeatures ~= "" then specification.method = "*" specification.detail = fontfeatures elseif classfeatures and classfeatures ~= "" then specification.method = "*" specification.detail = classfeatures end if fontfallbacks and fontfallbacks ~= "" then specification.fallbacks = fontfallbacks elseif classfallbacks and classfallbacks ~= "" then specification.fallbacks = classfallbacks end elseif inheritancemode == 4 then -- classfirst if classfeatures and classfeatures ~= "" then specification.method = "*" specification.detail = classfeatures elseif fontfeatures and fontfeatures ~= "" then specification.method = "*" specification.detail = fontfeatures end if classfallbacks and classfallbacks ~= "" then specification.fallbacks = classfallbacks elseif fontfallbacks and fontfallbacks ~= "" then specification.fallbacks = fontfallbacks end end local tfmdata = definers.read(specification,size) -- id not yet known (size in spec?) -- local lastfontid = 0 if not tfmdata then report_defining("unable to define %a as %a",name,nice_cs(cs)) lastfontid = -1 letvaluerelax(cs) -- otherwise the current definition takes the previous one elseif type(tfmdata) == "number" then if trace_defining then report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a", name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize) end csnames[tfmdata] = specification.cs tex.definefont(global,cs,tfmdata) -- resolved (when designsize is used): setsomefontsize((fontdata[tfmdata].parameters.size or 0) .. "sp") lastfontid = tfmdata else -- setting the extra characters will move elsewhere local characters = tfmdata.characters local parameters = tfmdata.parameters -- we use char0 as signal; cf the spec pdf can handle this (no char in slot) characters[0] = nil -- characters[0x00A0] = { width = parameters.space } -- characters[0x2007] = { width = characters[0x0030] and characters[0x0030].width or parameters.space } -- figure -- characters[0x2008] = { width = characters[0x002E] and characters[0x002E].width or parameters.space } -- period -- local id = font.define(tfmdata) csnames[id] = specification.cs tfmdata.properties.id = id definers.register(tfmdata,id) -- to be sure, normally already done tex.definefont(global,cs,id) constructors.cleanuptable(tfmdata) constructors.finalize(tfmdata) if trace_defining then report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a", name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks) end -- resolved (when designsize is used): setsomefontsize((tfmdata.parameters.size or 655360) .. "sp") lastfontid = id end if trace_defining then report_defining("memory usage after: %s",statistics.memused()) report_defining("stop stage two") end -- texsetcount("global","lastfontid",lastfontid) if not mathsize then -- forget about it elseif mathsize == 0 then lastmathids[1] = lastfontid else lastmathids[mathsize] = lastfontid end -- statistics.stoptiming(fonts) end function definers.define(specification) -- local name = specification.name if not name or name == "" then return -1 else statistics.starttiming(fonts) -- -- following calls expect a few properties to be set: -- local lookup, name, sub, method, detail = getspecification(name or "") -- specification.name = (name ~= "" and name) or specification.name -- specification.lookup = specification.lookup or (lookup ~= "" and lookup) or "file" specification.size = specification.size or 655260 specification.sub = specification.sub or (sub ~= "" and sub) or "" specification.method = specification.method or (method ~= "" and method) or "*" specification.detail = specification.detail or (detail ~= "" and detail) or "" -- if type(specification.size) == "string" then specification.size = tex.sp(specification.size) or 655260 end -- specification.specification = "" -- not used specification.resolved = "" specification.forced = "" specification.features = { } -- via detail, maybe some day -- -- we don't care about mathsize textsize goodies fallbacks -- local cs = specification.cs if cs == "" then cs = nil specification.cs = nil specification.global = false elseif specification.global == nil then specification.global = false end -- local tfmdata = definers.read(specification,specification.size) if not tfmdata then return -1, nil elseif type(tfmdata) == "number" then if cs then tex.definefont(specification.global,cs,tfmdata) csnames[tfmdata] = cs end return tfmdata, fontdata[tfmdata] else local id = font.define(tfmdata) tfmdata.properties.id = id definers.register(tfmdata,id) if cs then tex.definefont(specification.global,cs,id) csnames[id] = cs end constructors.cleanuptable(tfmdata) constructors.finalize(tfmdata) return id, tfmdata end statistics.stoptiming(fonts) end end -- local id, cs = fonts.definers.internal { } -- local id, cs = fonts.definers.internal { number = 2 } -- local id, cs = fonts.definers.internal { name = "dejavusans" } local n = 0 function definers.internal(specification,cs) specification = specification or { } local name = specification.name local size = specification.size and number.todimen(specification.size) or texdimen.bodyfontsize local number = tonumber(specification.number) local id = nil if number then id = number elseif name and name ~= "" then local cs = cs or specification.cs if not cs then n = n + 1 -- beware ... there can be many and they are often used once -- cs = formatters["internal font %s"](n) cs = "internal font " .. n else specification.cs = cs end id = definers.define { name = name, size = size, cs = cs, } end if not id then id = currentfont() end return id, csnames[id] end local enable_auto_r_scale = false experiments.register("fonts.autorscale", function(v) enable_auto_r_scale = v end) -- Not ok, we can best use a database for this. The problem is that we -- have delayed definitions and so we never know what style is taken -- as start. local calculatescale = constructors.calculatescale function constructors.calculatescale(tfmdata,scaledpoints,relativeid) local scaledpoints, delta = calculatescale(tfmdata,scaledpoints) -- if enable_auto_r_scale and relativeid then -- for the moment this is rather context specific -- local relativedata = fontdata[relativeid] -- local rfmdata = relativedata and relativedata.unscaled and relativedata.unscaled -- local id_x_height = rfmdata and rfmdata.parameters and rfmdata.parameters.x_height -- local tf_x_height = tfmdata and tfmdata.parameters and tfmdata.parameters.x_height -- if id_x_height and tf_x_height then -- local rscale = id_x_height/tf_x_height -- delta = rscale * delta -- scaledpoints = rscale * scaledpoints -- end -- end return scaledpoints, delta end -- We overload the (generic) resolver: local resolvers = definers.resolvers local hashfeatures = constructors.hashfeatures function definers.resolve(specification) -- overload function in font-con.lua if not specification.resolved or specification.resolved == "" then -- resolved itself not per se in mapping hash local r = resolvers[specification.lookup] if r then r(specification) end end if specification.forced == "" then specification.forced = nil else specification.forced = specification.forced end -- goodies are a context specific thing and not always defined -- as feature, so we need to make sure we add them here before -- hashing because otherwise we get funny goodies applied local goodies = specification.goodies if goodies and goodies ~= "" then -- this adapts the features table so it has best be a copy local normal = specification.features.normal if not normal then specification.features.normal = { goodies = goodies } elseif not normal.goodies then local g = normal.goodies if g and g ~= "" then normal.goodies = formatters["%s,%s"](g,goodies) else normal.goodies = goodies end end end -- so far for goodie hacks specification.hash = lower(specification.name .. ' @ ' .. hashfeatures(specification)) if specification.sub and specification.sub ~= "" then specification.hash = specification.sub .. ' @ ' .. specification.hash end return specification end -- soon to be obsolete: local mappings = fonts.mappings local loaded = { -- prevent loading (happens in cont-sys files) ["original-base.map" ] = true, ["original-ams-base.map" ] = true, ["original-ams-euler.map"] = true, ["original-public-lm.map"] = true, } function mappings.loadfile(name) name = file.addsuffix(name,"map") if not loaded[name] then if trace_mapfiles then report_mapfiles("loading map file %a",name) end pdf.mapfile(name) loaded[name] = true end end local loaded = { -- prevent double loading } function mappings.loadline(how,line) if line then how = how .. " " .. line elseif how == "" then how = "= " .. line end if not loaded[how] then if trace_mapfiles then report_mapfiles("processing map line %a",line) end pdf.mapline(how) loaded[how] = true end end function mappings.reset() pdf.mapfile("") end mappings.reset() -- resets the default file -- we need an 'do after the banner hook' -- => commands local function nametoslot(name) local t = type(name) if t == "string" then return resources[true].unicodes[name] elseif t == "number" then return n end end helpers.nametoslot = nametoslot -- this will change ... function loggers.reportdefinedfonts() if trace_usage then local t, tn = { }, 0 for id, data in sortedhash(fontdata) do local properties = data.properties or { } local parameters = data.parameters or { } tn = tn + 1 t[tn] = { format("%03i",id or 0), format("%09i",parameters.size or 0), properties.type or "real", properties.format or "unknown", properties.name or "", properties.psname or "", properties.fullname or "", } report_status("%s: % t",properties.name,sortedkeys(data)) end formatcolumns(t," ") report_status() report_status("defined fonts:") report_status() for k=1,tn do report_status(t[k]) end end end luatex.registerstopactions(loggers.reportdefinedfonts) function loggers.reportusedfeatures() -- numbers, setups, merged if trace_usage then local t, n = { }, #numbers for i=1,n do local name = numbers[i] local setup = setups[name] local n = setup.number setup.number = nil -- we have no reason to show this t[i] = { i, name, sequenced(setup,false,true) } -- simple mode setup.number = n -- restore it (normally not needed as we're done anyway) end formatcolumns(t," ") report_status() report_status("defined featuresets:") report_status() for k=1,n do report_status(t[k]) end end end luatex.registerstopactions(loggers.reportusedfeatures) statistics.register("fonts load time", function() return statistics.elapsedseconds(fonts) end) -- experimental mechanism for Mojca: -- -- fonts.definetypeface { -- name = "mainbodyfont-light", -- preset = "antykwapoltawskiego-light", -- } -- -- fonts.definetypeface { -- name = "mojcasfavourite", -- preset = "antykwapoltawskiego", -- normalweight = "light", -- boldweight = "bold", -- width = "condensed", -- } local Shapes = { serif = "Serif", sans = "Sans", mono = "Mono", } function fonts.definetypeface(name,t) if type(name) == "table" then -- {name=abc,k=v,...} t = name elseif t then if type(t) == "string" then -- "abc", "k=v,..." t = settings_to_hash(name) else -- "abc", {k=v,...} end t.name = t.name or name else -- "name=abc,k=v,..." t = settings_to_hash(name) end local p = t.preset and fonts.typefaces[t.preset] or { } local name = t.name or "unknowntypeface" local shortcut = t.shortcut or p.shortcut or "rm" local size = t.size or p.size or "default" local shape = t.shape or p.shape or "serif" local fontname = t.fontname or p.fontname or "unknown" local normalweight = t.normalweight or t.weight or p.normalweight or p.weight or "normal" local boldweight = t.boldweight or t.weight or p.boldweight or p.weight or "normal" local normalwidth = t.normalwidth or t.width or p.normalwidth or p.width or "normal" local boldwidth = t.boldwidth or t.width or p.boldwidth or p.width or "normal" Shape = Shapes[shape] or "Serif" context.startfontclass { name } context.definefontsynonym( { format("%s", Shape) }, { format("spec:%s-%s-regular-%s", fontname, normalweight, normalwidth) } ) context.definefontsynonym( { format("%sBold", Shape) }, { format("spec:%s-%s-regular-%s", fontname, boldweight, boldwidth ) } ) context.definefontsynonym( { format("%sBoldItalic", Shape) }, { format("spec:%s-%s-italic-%s", fontname, boldweight, boldwidth ) } ) context.definefontsynonym( { format("%sItalic", Shape) }, { format("spec:%s-%s-italic-%s", fontname, normalweight, normalwidth) } ) context.stopfontclass() local settings = sequenced({ features= t.features },",") context.dofastdefinetypeface(name, shortcut, shape, size, settings) end function fonts.current() -- todo: also handle name return fontdata[currentfont()] or fontdata[0] end function fonts.currentid() return currentfont() or 0 end -- interfaces function commands.fontchar(n) n = nametoslot(n) if n then context.char(n) end end function commands.doifelsecurrentfonthasfeature(name) -- can be made faster with a supportedfeatures hash local f = fontdata[currentfont()] f = f and f.shared f = f and f.rawdata f = f and f.resources f = f and f.features commands.doifelse(f and (f.gpos[name] or f.gsub[name])) end local p, f = 1, formatters["%0.1fpt"] -- normally this value is changed only once local stripper = lpeg.patterns.stripzeros function commands.nbfs(amount,precision) if precision ~= p then p = precision f = formatters["%0." .. p .. "fpt"] end context(lpegmatch(stripper,f(amount/65536))) end function commands.featureattribute(tag) context(contextnumber(tag)) end function commands.setfontfeature(tag) texattribute[0] = contextnumber(tag) end function commands.resetfontfeature() texattribute[0] = 0 end -- function commands.addfs(tag) withset(tag, 1) end -- function commands.subfs(tag) withset(tag,-1) end -- function commands.addff(tag) withfnt(tag, 2) end -- on top of font features -- function commands.subff(tag) withfnt(tag,-2) end -- on top of font features function commands.cleanfontname (name) context(names.cleanname(name)) end function commands.fontlookupinitialize (name) names.lookup(name) end function commands.fontlookupnoffound () context(names.noflookups()) end function commands.fontlookupgetkeyofindex(key,index) context(names.getlookupkey(key,index)) end function commands.fontlookupgetkey (key) context(names.getlookupkey(key)) end -- this might move to a runtime module: function commands.showchardata(n) local tfmdata = fontdata[currentfont()] if tfmdata then if type(n) == "string" then n = utfbyte(n) end local chr = tfmdata.characters[n] if chr then report_status("%s @ %s => %U => %c => %s",tfmdata.properties.fullname,tfmdata.parameters.size,n,n,serialize(chr,false)) end end end function commands.showfontparameters(tfmdata) -- this will become more clever local tfmdata = tfmdata or fontdata[currentfont()] if tfmdata then local parameters = tfmdata.parameters local mathparameters = tfmdata.mathparameters local properties = tfmdata.properties local hasparameters = parameters and next(parameters) local hasmathparameters = mathparameters and next(mathparameters) if hasparameters then report_status("%s @ %s => text parameters => %s",properties.fullname,parameters.size,serialize(parameters,false)) end if hasmathparameters then report_status("%s @ %s => math parameters => %s",properties.fullname,parameters.size,serialize(mathparameters,false)) end if not hasparameters and not hasmathparameters then report_status("%s @ %s => no text parameters and/or math parameters",properties.fullname,parameters.size) end end end -- for the moment here, this will become a chain of extras that is -- hooked into the ctx registration (or scaler or ...) local dimenfactors = number.dimenfactors function helpers.dimenfactor(unit,tfmdata) -- could be a method of a font instance if unit == "ex" then return (tfmdata and tfmdata.parameters.x_height) or 655360 elseif unit == "em" then return (tfmdata and tfmdata.parameters.em_width) or 655360 else local du = dimenfactors[unit] return du and 1/du or tonumber(unit) or 1 end end local function digitwidth(font) -- max(quad/2,wd(0..9)) local tfmdata = fontdata[font] local parameters = tfmdata.parameters local width = parameters.digitwidth if not width then width = round(parameters.quad/2) -- maybe tex.scale local characters = tfmdata.characters for i=48,57 do local wd = round(characters[i].width) if wd > width then width = wd end end parameters.digitwidth = width end return width end helpers.getdigitwidth = digitwidth helpers.setdigitwidth = digitwidth -- function helpers.getparameters(tfmdata) local p = { } local m = p local parameters = tfmdata.parameters while true do for k, v in next, parameters do m[k] = v end parameters = getmetatable(parameters) parameters = parameters and parameters.__index if type(parameters) == "table" then m = { } p.metatable = m else break end end return p end if environment.initex then local function names(t) local nt = #t if nt > 0 then local n = { } for i=1,nt do n[i] = t[i].name end return concat(n," ") else return "-" end end statistics.register("font processing", function() local l = { } for what, handler in table.sortedpairs(handlers) do local features = handler.features if features then l[#l+1] = format("[%s (base initializers: %s) (base processors: %s) (base manipulators: %s) (node initializers: %s) (node processors: %s) (node manipulators: %s)]", what, names(features.initializers.base), names(features.processors .base), names(features.manipulators.base), names(features.initializers.node), names(features.processors .node), names(features.manipulators.node) ) end end return concat(l, " | ") end) end -- redefinition local quads = hashes.quads local xheights = hashes.xheights setmetatableindex(number.dimenfactors, function(t,k) if k == "ex" then return xheigths[currentfont()] elseif k == "em" then return quads[currentfont()] elseif k == "%" then return dimen.hsize/100 else -- error("wrong dimension: " .. (s or "?")) -- better a message return false end end) --[[ldx--

Before a font is passed to we scale it. Here we also need to scale virtual characters.

--ldx]]-- function constructors.checkvirtualids(tfmdata) -- begin of experiment: we can use { "slot", 0, number } in virtual fonts local fonts = tfmdata.fonts local selfid = font.nextid() if fonts and #fonts > 0 then for i=1,#fonts do if fonts[i][2] == 0 then fonts[i][2] = selfid end end else -- tfmdata.fonts = { "id", selfid } -- conflicts with other next id's (vf math), too late anyway end -- end of experiment end -- function constructors.getvirtualid(tfmdata) -- -- since we don't know the id yet, we use 0 as signal -- local tf = tfmdata.fonts -- if not tf then -- local properties = tfmdata.properties -- if properties then -- properties.virtualized = true -- else -- tfmdata.properties = { virtualized = true } -- end -- tf = { } -- tfmdata.fonts = tf -- end -- local ntf = #tf + 1 -- tf[ntf] = { id = 0 } -- return ntf -- end -- -- function constructors.checkvirtualid(tfmdata, id) -- will go -- local properties = tfmdata.properties -- if tfmdata and tfmdata.type == "virtual" or (properties and properties.virtualized) then -- local vfonts = tfmdata.fonts -- if not vffonts or #vfonts == 0 then -- if properties then -- properties.virtualized = false -- end -- tfmdata.fonts = nil -- else -- for f=1,#vfonts do -- local fnt = vfonts[f] -- if fnt.id and fnt.id == 0 then -- fnt.id = id -- end -- end -- end -- end -- end function commands.setfontofid(id) context.getvalue(csnames[id]) end -- more interfacing: commands.definefontfeature = presetcontext local cache = { } local hows = { ["+"] = "add", ["-"] = "subtract", ["="] = "replace", } function commands.feature(how,parent,name,font) if not how then if trace_features and texattribute[0] ~= 0 then report_cummulative("font %!font:name!, reset",fontdata[font or true]) end texattribute[0] = 0 elseif how == true then local hash = "feature > " .. parent local done = cache[hash] if trace_features and done then report_cummulative("font %!font:name!, revive %a : %!font:features!",fontdata[font or true],parent,setups[numbers[done]]) end texattribute[0] = done or 0 else local full = parent .. how .. name local hash = "feature > " .. full local done = cache[hash] if not done then local n = setups[full] if n then -- already defined else n = mergecontextfeatures(parent,name,how,full) end done = registercontextfeature(hash,full,how) cache[hash] = done if trace_features then report_cummulative("font %!font:name!, %s %a : %!font:features!",fontdata[font or true],hows[how],full,setups[numbers[done]]) end end texattribute[0] = done end end function commands.featurelist(...) context(fonts.specifiers.contexttostring(...)) end function commands.registerlanguagefeatures() local specifications = languages.data.specifications for i=1,#specifications do local specification = specifications[i] local language = specification.opentype if language then local script = specification.opentypescript or specification.script if script then local context = specification.context if type(context) == "table" then for i=1,#context do definecontext(context[i], { language = language, script = script}) end elseif type(context) == "string" then definecontext(context, { language = language, script = script}) end end end end end -- a fontkern plug: local copy_node = node.copy local kern = nodes.pool.register(nodes.pool.kern()) node.set_attribute(kern,attributes.private('fontkern'),1) -- we can have several, attributes are shared nodes.injections.installnewkern(function(k) local c = copy_node(kern) c.kern = k return c end) directives.register("nodes.injections.fontkern", function(v) kern.subtype = v and 0 or 1 end) -- here local trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end) local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local analyzers = fonts.analyzers local methods = analyzers.methods local unsetvalue = attributes.unsetvalue local traverse_by_id = node.traverse_id local a_color = attributes.private('color') local a_colormodel = attributes.private('colormodel') local a_state = attributes.private('state') local m_color = attributes.list[a_color] or { } local glyph_code = nodes.nodecodes.glyph local states = analyzers.states local names = { [states.init] = "font:1", [states.medi] = "font:2", [states.fina] = "font:3", [states.isol] = "font:4", [states.mark] = "font:5", [states.rest] = "font:6", [states.rphf] = "font:1", [states.half] = "font:2", [states.pref] = "font:3", [states.blwf] = "font:4", [states.pstf] = "font:5", } local function markstates(head) if head then local model = head[a_colormodel] or 1 for glyph in traverse_by_id(glyph_code,head) do local a = glyph[a_state] if a then local name = names[a] if name then local color = m_color[name] if color then glyph[a_colormodel] = model glyph[a_color] = color end end end end end end local function analyzeprocessor(head,font,attr) local tfmdata = fontdata[font] local script, language = otf.scriptandlanguage(tfmdata,attr) local action = methods[script] if not action then return head, false end if type(action) == "function" then local head, done = action(head,font,attr) if done and trace_analyzing then markstates(head) end return head, done end action = action[language] if action then local head, done = action(head,font,attr) if done and trace_analyzing then markstates(head) end return head, done else return head, false end end registerotffeature { -- adapts name = "analyze", processors = { node = analyzeprocessor, } } function methods.nocolor(head,font,attr) for n in traverse_by_id(glyph_code,head) do if not font or n.font == font then n[a_color] = unsetvalue end end return head, true end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-def.lua0000644000175000017500000003710112161703335024101 0ustar norbertnorbertif not modules then modules = { } end modules ['font-def'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We can overload some of the definers.functions so we don't local them. local format, gmatch, match, find, lower, gsub = string.format, string.gmatch, string.match, string.find, string.lower, string.gsub local tostring, next = tostring, next local lpegmatch = lpeg.match local allocate = utilities.storage.allocate local trace_defining = false trackers .register("fonts.defining", function(v) trace_defining = v end) local directive_embedall = false directives.register("fonts.embedall", function(v) directive_embedall = v end) trackers.register("fonts.loading", "fonts.defining", "otf.loading", "afm.loading", "tfm.loading") trackers.register("fonts.all", "fonts.*", "otf.*", "afm.*", "tfm.*") local report_defining = logs.reporter("fonts","defining") --[[ldx--

Here we deal with defining fonts. We do so by intercepting the default loader that only handles .

--ldx]]-- local fonts = fonts local fontdata = fonts.hashes.identifiers local readers = fonts.readers local definers = fonts.definers local specifiers = fonts.specifiers local constructors = fonts.constructors local fontgoodies = fonts.goodies readers.sequence = allocate { 'otf', 'ttf', 'afm', 'tfm', 'lua' } -- dfont ttc local variants = allocate() specifiers.variants = variants definers.methods = definers.methods or { } local internalized = allocate() -- internal tex numbers (private) local lastdefined = nil -- we don't want this one to end up in s-tra-02 local loadedfonts = constructors.loadedfonts local designsizes = constructors.designsizes -- not in generic (some day I'll make two defs, one for context, one for generic) local resolvefile = fontgoodies and fontgoodies.filenames and fontgoodies.filenames.resolve or function(s) return s end --[[ldx--

We hardly gain anything when we cache the final (pre scaled) table. But it can be handy for debugging, so we no longer carry this code along. Also, we now have quite some reference to other tables so we would end up with lots of catches.

--ldx]]-- --[[ldx--

We can prefix a font specification by name: or file:. The first case will result in a lookup in the synonym table.

[ name: | file: ] identifier [ separator [ specification ] ]

The following function split the font specification into components and prepares a table that will move along as we proceed.

--ldx]]-- -- beware, we discard additional specs -- -- method:name method:name(sub) method:name(sub)*spec method:name*spec -- name name(sub) name(sub)*spec name*spec -- name@spec*oeps local splitter, splitspecifiers = nil, "" -- not so nice local P, C, S, Cc = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc local left = P("(") local right = P(")") local colon = P(":") local space = P(" ") definers.defaultlookup = "file" local prefixpattern = P(false) local function addspecifier(symbol) splitspecifiers = splitspecifiers .. symbol local method = S(splitspecifiers) local lookup = C(prefixpattern) * colon local sub = left * C(P(1-left-right-method)^1) * right local specification = C(method) * C(P(1)^1) local name = C((1-sub-specification)^1) splitter = P((lookup + Cc("")) * name * (sub + Cc("")) * (specification + Cc(""))) end local function addlookup(str,default) prefixpattern = prefixpattern + P(str) end definers.addlookup = addlookup addlookup("file") addlookup("name") addlookup("spec") local function getspecification(str) return lpegmatch(splitter,str) end definers.getspecification = getspecification function definers.registersplit(symbol,action,verbosename) addspecifier(symbol) variants[symbol] = action if verbosename then variants[verbosename] = action end end local function makespecification(specification,lookup,name,sub,method,detail,size) size = size or 655360 if not lookup or lookup == "" then lookup = definers.defaultlookup end if trace_defining then report_defining("specification %a, lookup %a, name %a, sub %a, method %a, detail %a", specification, lookup, name, sub, method, detail) end local t = { lookup = lookup, -- forced type specification = specification, -- full specification size = size, -- size in scaled points or -1000*n name = name, -- font or filename sub = sub, -- subfont (eg in ttc) method = method, -- specification method detail = detail, -- specification resolved = "", -- resolved font name forced = "", -- forced loader features = { }, -- preprocessed features } return t end definers.makespecification = makespecification function definers.analyze(specification, size) -- can be optimized with locals local lookup, name, sub, method, detail = getspecification(specification or "") return makespecification(specification, lookup, name, sub, method, detail, size) end --[[ldx--

We can resolve the filename using the next function:

--ldx]]-- definers.resolvers = definers.resolvers or { } local resolvers = definers.resolvers -- todo: reporter function resolvers.file(specification) local name = resolvefile(specification.name) -- catch for renames local suffix = file.suffix(name) if fonts.formats[suffix] then specification.forced = suffix specification.name = file.removesuffix(name) else specification.name = name -- can be resolved end end function resolvers.name(specification) local resolve = fonts.names.resolve if resolve then local resolved, sub = resolve(specification.name,specification.sub,specification) -- we pass specification for overloaded versions if resolved then specification.resolved = resolved specification.sub = sub local suffix = file.suffix(resolved) if fonts.formats[suffix] then specification.forced = suffix specification.name = file.removesuffix(resolved) else specification.name = resolved end end else resolvers.file(specification) end end function resolvers.spec(specification) local resolvespec = fonts.names.resolvespec if resolvespec then local resolved, sub = resolvespec(specification.name,specification.sub,specification) -- we pass specification for overloaded versions if resolved then specification.resolved = resolved specification.sub = sub specification.forced = file.suffix(resolved) specification.name = file.removesuffix(resolved) end else resolvers.name(specification) end end function definers.resolve(specification) if not specification.resolved or specification.resolved == "" then -- resolved itself not per se in mapping hash local r = resolvers[specification.lookup] if r then r(specification) end end if specification.forced == "" then specification.forced = nil else specification.forced = specification.forced end specification.hash = lower(specification.name .. ' @ ' .. constructors.hashfeatures(specification)) if specification.sub and specification.sub ~= "" then specification.hash = specification.sub .. ' @ ' .. specification.hash end return specification end --[[ldx--

The main read function either uses a forced reader (as determined by a lookup) or tries to resolve the name using the list of readers.

We need to cache when possible. We do cache raw tfm data (from , or ). After that we can cache based on specificstion (name) and size, that is, only needs a number for an already loaded fonts. However, it may make sense to cache fonts before they're scaled as well (store 's with applied methods and features). However, there may be a relation between the size and features (esp in virtual fonts) so let's not do that now.

Watch out, here we do load a font, but we don't prepare the specification yet.

--ldx]]-- -- very experimental: function definers.applypostprocessors(tfmdata) local postprocessors = tfmdata.postprocessors if postprocessors then local properties = tfmdata.properties for i=1,#postprocessors do local extrahash = postprocessors[i](tfmdata) -- after scaling etc if type(extrahash) == "string" and extrahash ~= "" then -- e.g. a reencoding needs this extrahash = gsub(lower(extrahash),"[^a-z]","-") properties.fullname = format("%s-%s",properties.fullname,extrahash) end end end return tfmdata end -- function definers.applypostprocessors(tfmdata) -- return tfmdata -- end local function checkembedding(tfmdata) local properties = tfmdata.properties local embedding if directive_embedall then embedding = "full" elseif properties and properties.filename and constructors.dontembed[properties.filename] then embedding = "no" else embedding = "subset" end if properties then properties.embedding = embedding else tfmdata.properties = { embedding = embedding } end tfmdata.embedding = embedding end function definers.loadfont(specification) local hash = constructors.hashinstance(specification) local tfmdata = loadedfonts[hash] -- hashes by size ! if not tfmdata then local forced = specification.forced or "" if forced ~= "" then local reader = readers[lower(forced)] tfmdata = reader and reader(specification) if not tfmdata then report_defining("forced type %a of %a not found",forced,specification.name) end else local sequence = readers.sequence -- can be overloaded so only a shortcut here for s=1,#sequence do local reader = sequence[s] if readers[reader] then -- we skip not loaded readers if trace_defining then report_defining("trying (reader sequence driven) type %a for %a with file %a",reader,specification.name,specification.filename) end tfmdata = readers[reader](specification) if tfmdata then break else specification.filename = nil end end end end if tfmdata then tfmdata = definers.applypostprocessors(tfmdata) checkembedding(tfmdata) -- todo: general postprocessor loadedfonts[hash] = tfmdata designsizes[specification.hash] = tfmdata.parameters.designsize end end if not tfmdata then report_defining("font with asked name %a is not found using lookup %a",specification.name,specification.lookup) end return tfmdata end function constructors.checkvirtualids() -- dummy in plain version end function constructors.readanddefine(name,size) -- no id -- maybe a dummy first local specification = definers.analyze(name,size) local method = specification.method if method and variants[method] then specification = variants[method](specification) end specification = definers.resolve(specification) local hash = constructors.hashinstance(specification) local id = definers.registered(hash) if not id then local tfmdata = definers.loadfont(specification) if tfmdata then tfmdata.properties.hash = hash constructors.checkvirtualids(tfmdata) -- experiment, will become obsolete when slots can selfreference id = font.define(tfmdata) definers.register(tfmdata,id) else id = 0 -- signal end end return fontdata[id], id end --[[ldx--

So far the specifiers. Now comes the real definer. Here we cache based on id's. Here we also intercept the virtual font handler. Since it evolved stepwise I may rewrite this bit (combine code).

In the previously defined reader (the one resulting in a table) we cached the (scaled) instances. Here we cache them again, but this time based on id. We could combine this in one cache but this does not gain much. By the way, passing id's back to in the callback was introduced later in the development.

--ldx]]-- function definers.current() -- or maybe current return lastdefined end function definers.registered(hash) local id = internalized[hash] return id, id and fontdata[id] end function definers.register(tfmdata,id) if tfmdata and id then local hash = tfmdata.properties.hash if not hash then report_defining("registering font, id %a, name %a, invalid hash",id,tfmdata.properties.filename or "?") elseif not internalized[hash] then internalized[hash] = id if trace_defining then report_defining("registering font, id %s, hash %a",id,hash) end fontdata[id] = tfmdata end end end function definers.read(specification,size,id) -- id can be optional, name can already be table statistics.starttiming(fonts) if type(specification) == "string" then specification = definers.analyze(specification,size) end local method = specification.method if method and variants[method] then specification = variants[method](specification) end specification = definers.resolve(specification) local hash = constructors.hashinstance(specification) local tfmdata = definers.registered(hash) -- id if tfmdata then if trace_defining then report_defining("already hashed: %s",hash) end else tfmdata = definers.loadfont(specification) -- can be overloaded if tfmdata then if trace_defining then report_defining("loaded and hashed: %s",hash) end tfmdata.properties.hash = hash if id then definers.register(tfmdata,id) end else if trace_defining then report_defining("not loaded and hashed: %s",hash) end end end lastdefined = tfmdata or id -- todo ! ! ! ! ! if not tfmdata then -- or id? report_defining( "unknown font %a, loading aborted",specification.name) elseif trace_defining and type(tfmdata) == "table" then local properties = tfmdata.properties or { } local parameters = tfmdata.parameters or { } report_defining("using %s font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a", properties.format, id, properties.name, parameters.size, properties.encodingbytes, properties.encodingname, properties.fullname, file.basename(properties.filename)) end statistics.stoptiming(fonts) return tfmdata end function font.getfont(id) return fontdata[id] -- otherwise issues end --[[ldx--

We overload the reader.

--ldx]]-- callbacks.register('define_font', definers.read, "definition of fonts (tfmdata preparation)") context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-ini.mkii0000644000175000017500000000215011754241457024324 0ustar norbertnorbert%D \module %D [ file=typo-ini, %D version=2000.16.09, %D title=\CONTEXT\ Typographic Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Since \CONTEXT\ is dealing with typographics, isn't %D September 2000 a bit late to start writing this module? It %D may seem so, but since more and more languages are %D supported, we think it is time to isolate language specific %D typographic extensions in modules. The first language that %D demands this is Chinese, and more will follow. \writestatus{loading}{ConTeXt Typographic Macros / Initialization} \unprotect %D \macros %D {ifvertical} %D %D The following switch can be used to signal macros that they %D should adapt their behaviour. \newif\ifvertical % maybe also ifreverse %D \macros %D {vhbox} %D %D A stupid but useful macro. \def\vhbox{\ifvertical\vbox\else\hbox\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-cas.mkii0000644000175000017500000001102511754241457024245 0ustar norbertnorbert%D \module %D [ file=enco-cas, %D version=2005.08.23, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Named Glyph Case Mapping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For quite some years \CONTEXT\ used a rather compact way of %D defining encoded characters as well as case maps. When late %D 2000 more advanced remapping features were needed (like pdf %D unicode remapping), named glyphs were introduced to keep the %D coding tables more readable. At the same time, we introduced %D named glyph case mapping. \defineULcharacter Acircumflex acircumflex \defineULcharacter Ccircumflex ccircumflex \defineULcharacter Ecircumflex ecircumflex \defineULcharacter Gcircumflex gcircumflex \defineULcharacter Hcircumflex hcircumflex \defineULcharacter Icircumflex icircumflex \defineULcharacter Jcircumflex jcircumflex \defineULcharacter Ocircumflex ocircumflex \defineULcharacter Scircumflex scircumflex \defineULcharacter Ucircumflex ucircumflex \defineULcharacter Wcircumflex wcircumflex \defineULcharacter Ycircumflex ycircumflex \defineULcharacter Agrave agrave \defineULcharacter Egrave egrave \defineULcharacter Igrave igrave \defineULcharacter Ograve ograve \defineULcharacter Ugrave ugrave \defineULcharacter Ygrave ygrave \defineULcharacter Atilde atilde \defineULcharacter Itilde itilde \defineULcharacter Otilde otilde \defineULcharacter Ntilde ntilde \defineULcharacter Utilde utilde \defineULcharacter Adiaeresis adiaeresis \defineULcharacter Ediaeresis ediaeresis \defineULcharacter Idiaeresis idiaeresis \defineULcharacter Odiaeresis odiaeresis \defineULcharacter Udiaeresis udiaeresis \defineULcharacter Ydiaeresis ydiaeresis \defineULcharacter Aacute aacute \defineULcharacter Cacute cacute \defineULcharacter Eacute eacute \defineULcharacter Iacute iacute \defineULcharacter Lacute lacute \defineULcharacter Nacute nacute \defineULcharacter Oacute oacute \defineULcharacter Racute racute \defineULcharacter Sacute sacute \defineULcharacter Uacute uacute \defineULcharacter Yacute yacute \defineULcharacter Zacute zacute \defineULcharacter Dstroke dstroke \defineULcharacter Hstroke hstroke \defineULcharacter Lstroke lstroke \defineULcharacter Lslash lslash \defineULcharacter Ostroke ostroke \defineULcharacter Tstroke tstroke \defineULcharacter Cdotaccent cdotaccent \defineULcharacter Edotaccent edotaccent \defineULcharacter Gdotaccent gdotaccent \defineULcharacter Idotaccent idotaccent \defineULcharacter Zdotaccent zdotaccent \defineULcharacter Amacron amacron \defineULcharacter Emacron emacron \defineULcharacter Imacron imacron \defineULcharacter Omacron omacron \defineULcharacter Umacron umacron \defineULcharacter Ccedilla ccedilla \defineULcharacter Gcedilla gcedilla \defineULcharacter Kcedilla kcedilla \defineULcharacter Lcedilla lcedilla \defineULcharacter Ncedilla ncedilla \defineULcharacter Rcedilla rcedilla \defineULcharacter Scedilla scedilla \defineULcharacter Tcedilla tcedilla \defineULcharacter Ccommaaccent ccommaaccent \defineULcharacter Gcommaaccent gcommaaccent \defineULcharacter Kcommaaccent kcommaaccent \defineULcharacter Lcommaaccent lcommaaccent \defineULcharacter Ncommaaccent ncommaaccent \defineULcharacter Rcommaaccent rcommaaccent \defineULcharacter Scommaaccent scommaaccent \defineULcharacter Tcommaaccent tcommaaccent \defineULcharacter Ohungarumlaut ohungarumlaut \defineULcharacter Uhungarumlaut uhungarumlaut \defineULcharacter Aogonek aogonek \defineULcharacter Eogonek eogonek \defineULcharacter Iogonek iogonek \defineULcharacter Uogonek uogonek \defineULcharacter Aring aring \defineULcharacter Uring uring \defineULcharacter Abreve abreve \defineULcharacter Ebreve ebreve \defineULcharacter Gbreve gbreve \defineULcharacter Ibreve ibreve \defineULcharacter Obreve obreve \defineULcharacter Ubreve ubreve \defineULcharacter Ccaron ccaron \defineULcharacter Dcaron dcaron \defineULcharacter Ecaron ecaron \defineULcharacter Lcaron lcaron \defineULcharacter Ncaron ncaron \defineULcharacter Rcaron rcaron \defineULcharacter Scaron scaron \defineULcharacter Tcaron tcaron \defineULcharacter Zcaron zcaron \defineULcharacter dotlessI dotlessi \defineULcharacter dotlessJ dotlessj \defineULcharacter AEligature aeligature \defineULcharacter OEligature oeligature \defineULcharacter Ssharp ssharp \defineULcharacter IJligature ijligature \defineULcharacter Eth eth \defineULcharacter Thorn thorn \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/status-lua.pdf0000644000175000017500000063605112161703335024502 0ustar norbertnorbert%PDF-1.6 % 16 0 obj <> stream x^};$7D>E5d~b-:t#gq,A@0"d0%lŘ4v܂u,|EwXl\d-|6ײ8k'mdf[6򲤬"_%cuM֜5tڭ/a6yl;)cYr\حevY[DZ~/W=@{A:~}۝FoK#F/ 0" zE,zqȠW^C-,ސcc9zi!SCwqлlXxڽqi"}9 '~ח>~_?o^-|_~_tߗ|₈ $.₊ ,.K.!K.!\Hpo?ćR0ۂ̶`R0K,շK)K .)RK .%:\Jp)\Zpi\Zpi;%҂K .#2.#2\pe#.Gp9\rԛr+\ .Wp\r^;_AR endstream endobj 120 0 obj <> stream x^ZɎ7 WXѮ89[S`NeѹXۋ\OZ9WsI8wGIPO._xݿ}])~Z̹(V>Aԥ?jm%G4χn[ZEcP 5Ce,_ӷ)J5+KQQG9Y)1@'!-@ Py|&eH̞R^d9A)dTzXEjcr,<|T] ֡8M⩱Qhރ/̐9VOeLa}1RhJ @8kiZ()e 9[tȣȫbGDz[Pٚxkamd8mHjx=:?DϜs5 u:+#X;0ؒ±O΋G w"DRj@⛫[c:c `s1s #-&F:?^Kq1m5K6I!|ǦC 2 NգfwjqI#I`|G9ҐR$wOD7,d^Z0 ‹CZ(L ⒥1'٠fIocVjL/|Y/" C%7v[ E3r)knK:sѧJ+2FTDq5utq xL;itWA F>Vi!a X uf-_B)l5iy2|k~rtE~dU@Mno,Zܡc'}=/^ endstream endobj 117 0 obj <> stream x^M$5+|!ˮ0@ vG8nH3tg:f8lqnlB.RE?W1> Mk?&j;W &81=a>&cՄ4Vc3 hj7ǡ hp;)7c0%`&&TLJOb]z܋OĖggbMr9 s4)T dR=Rj{)w jRuͤ6}Lvc؊7yۗ`rq̑[K69˗br,Ɨm@K7tՙGO, Ȧ1Rǜj.XccN[u|s\C;-;M;-Z>LCm[.kКiƄp#7-26-9ǴmYlgd[勾Z`t\t<h4| +//y.ȀKTp܋w:|v Kǻ%e輫9#tu$b/χ+00|KsǗ/nߛߞ<~}o__~#ߞ>>;y|Oݿ}~[?杹y?en[#q_?>>qCYhғC\xyh˼2UGOY9Lzx/{l=h *P{l=Tdb1b9ȼ=n7bmpmbc^1b͘mb̶#f[GWT̶#g[-pڣF̫C!f[J-P{l=h*{l=$a0Cuj0Ђy7d`^py{l=A?b?3v={=1of_MB>r7O?=<0>_IaT6[@RlOlf*r6NϢf1 َ[obVfBdbGob9VtVRe-M,eVo yX2]k vx[.Atn"O @ؑlbTVc7eBMA<6@ۈX(:DpkzFn|c:D}5Vш Gzk^yg4|+̐Na4:y K!xo2:DHmq)C(F>"ѳc5 ^Yxob--LBA_E4X1!duXh,ME4BU++wu ՈQyP~-$֟1jdPDVD2t"KVJQLCګWrjN(WYk!eEliLC'kuʫZ(KMZDC7VleJkʫZ$j$nB-ݓI{NÒ tc+CYZZV'6&ZӐJuk YucFR7!_tB-R$UM5UfnXb̢PH :s<MPHKI'`Ӳ| ^*e:;a*<MW;'t6*<y&֢!pɘi/lkILX Z48mȉSr*atj^LfBYLdTYZcZT#v| 3jskl&˧8]r@k ":&{Xk![%'KkkgH,]W['sdIpS:Zn}qD 7֭)m)Ǿ&֪M,-$ob!K.ek듪-Ftӥ2l Y0M!0@킭! []':ǹU,c~yV񐥱t G:.KY FvY)L5-!#'!A_u" aN&ԥ<%[{XztT8#(G \J Jv_ve) endstream endobj 232 0 obj <> stream x^[n6 +WӲ"}]ݶn(Ģ5Nq1ܘ:HGJk==e}o?y{2E6NoMfL&] I_^Ak{n?ϯRJ[ƿ~20>+[8u0vPLtv #uP^?ց<O6,߬ps7 sle|OwQ-Iu||;&n,F0qO5Ln >(; j0JB`qo|3)̰~Ⱦ3kh:K/9oz11:GJ\aχXm`/KR:%;0C8ilAL{#5_YxY-se'4X/9"qԵPu9=٫yJQeB~/3Y|U-ZKʕW+\g;wvt1^+Xm%!_lWZ$65}). 6hOyῘ&fw:3lo2$ PJ ܜ(*.)T+ _T{.b h.+lcи VR8,BwV/vmh[|v Y=6{s[5[d%RO_ fw8*V,|L1̢Tb{%z+GU0F=+m>")ā{ao )8fw1kZZEBkAw0b4R"τ\&sR.Ŷ6dt.),mc Q̓M40{W{&ޫ7CR-=tpT\1jFlv{YpƁaN(Իnn.a\J Ysvzyݤ{-AY-7dܐfq*ͱ1 &\wh 3(Xt*rX`9:=1$Bj0KOh=棂Mc: k,%]ǸLthhn v9dJ~nK}A992^`PA{Xɻ~?bٛӢ۴ipZXT,ؙ>{zˬs'QBXMDo AQɆT88 7 O =Q퓊v# ?f\r,tm/;J*ƹI >ր6js>s"fN=Kk;,{߶ޥ#; \d;'@CJ*(^1l}Nkut626=·kvK6Pzŵ1nl: )b%ĺ7?Y^^>NəqǸj?f+$b [Csb0سV1s1};~+_V?GkP[Bot#^ ыk엫?UGvBݐwPBkVYnͻ݃n|Fx;C>ht{q uf zqPd Ͳ%LUXa+GUQVҸ~W 7p&ZűᦿㅼA3wLf`nqa^Q+aݍ!fHp#  r/d2Vp`/o*垞,aɛq~7Z3A[7 w_Zi!yYG{;1a 6FwƇXsf+v;7_2pWOa9=g/Uث;?MwL9ĉWn5C{]C =+SN.~wxY'PW<.o_BĶ endstream endobj 299 0 obj <> stream x^[͎6 S DկevboE,J6Qu`0EL)RH)od}ן>^~޼^*oM?ꦼV5E ?KL8)C%~/!{[??~{yHX" տk߿$ʝByo[ê (cMTGiWiZ?7M,ChB"-ɤ`hl>b*xf Xkm*c`%\/1P%S}w'ݷ?ec(oO h'kxz|v*S'я?/o-/L#R !:gD/ʙOYVW<3׊t˺1c9YبU8jgv L:#k{Q`oi7)p5h; ewCDOT:u؀ D3 &6d*p)A0%TH e%];K])X+6DYѫvLU{m!y D\No8ul47vsCm~7Ib.T@d2wb'bF-5\UЉ-\?Y3c;|)sb+V+g4/4.ξk[C {tA6fX#SAV/.wdWصB/TވNdXl" '[ (=)GP[[y hFvL}SEcX? .ʘ"'O:3ϊI^A9OSpW:}r.mqC kconʆvu*kE;Ȯ>:1uG]دwC#kʬ\R6"^6oLD.#ws aAwH]!6>A%:Q$ĻPQy N/Ut2wê.\9ܐ*x(Ê5gϷHYՂ#{"WX れgr;c1ݺ"3б|p`Ess42n+o;{g|b@ۂh*#"iL1ud(/ LewTDֽ:$cvHՅ 4CG@Be2p 24#މs|/ vB W)VGq]_9c)TƽbI&ECw2* @eL;%S%<ʹ3^a8 (Wnn#oσrSe{Xg1=g";9aqVXHIMS0(\9OR5!yشy~G6Lp oVԔqZ{>aaZs-M>/WнXW6{V-N_=EY8&fhnq?0j+"{Κ:v!_Zc!pL9XQ|8uCz<o(zD§Y?W endstream endobj 226 0 obj <> stream x^͚jd7zѷ&. 3sg|`q Su:0:3YmuR}*-.!3&3~r.r|\qOLZ\ٵZobJ|'C0R\ȅ$Ȕ".TBk_@ ]ř80M|!-Y)Ad1?-;{c DVR%sR\JUWǖeqs4Y]MZr]\|!] | ^-fSXn"YYEx \0X]X˦") T9+#[)eWRϭazl:+-JG^}W\ 81)cϮf ث7>dpmi "8ҐD`p5Ъk%5tQP[_DX ƴrZW F 9,뵇Lwǐݍ2܈,͉= ! FPōP"qhrKܦ$dޞ% 8 Kmo}i7o޸tN{||zq.ӧ_~雧-7U߱+;}nC ^pKLCso@Ph/\bG>+APɋ oP%U/jw uzw6|?xoޜ?=Ȁ$߾=}x~_m;CFa?4?ߟ>?$kN=\w?ܟgnZ\w_'.Oo~)vrhN>?ğE¿mRb68˪@l õrVRF=8uWl\Ϻ: UEM'ڬs`t4z(=΍VUFӿα:=WzwC(]k/:d! *nҬI ) T‚4ixdOT'ʽZ䡰H5x%‘ xPNwj~H_rE=\꫻lHk0O3%ِxI iYbcװrEқyz jCRYˈDϔZ!9"]$ۍŃngHG77x"Δ4$TY#bzH ?IImI?O(J^GMiPҲQ" {5Зv:Reѫ׹ѣޫsG^FOF*Ҟ_?9N YW*YWV:JsguF:aunrϙ,NLL UJW٨B+l,b>Vz&!ACrnV(j" Sa"v)y.Zª1ͽ.%Yn7{gS33+ݯMN > stream x^Yˎ7 W ؆7{3rMNkHDt03),4 Rۿ*Ϸ/illzSOo:zp$|>+}S)oJ_>?r-4ڢZ bS[X40u5 CQhm}8uZ > JZr 7/lU`/*!ۨћS))5Zo~2Q`p92x<D?$@7o<ljb:dt4bĘyqtN-8 o:/%%N7.H!swkMc:ߖM ωlеH< `s[2w3f Ƈa!ox!GH=Hyq9!ʛO ,'I>;1 *6kp6#6$#Q,Qjc#̎ۘXC(Ur  Orr)(TD{%ppD-Ʀ+` rvwjd_D@ _]g?WFtŬ{`G8$̙/JNbWk'cddsӨNSXki4Q&iiki7;ZCi6%X3kD \ *i%9]f,#ҹZY$Gr}bqf)I; CeYΒECQ.u R!L6F%MCr २KұpNr3X5F%*;,%ʴ,Ͻ[:i[DAՍZ86[-\)n44Iq(:=Nk* 4%gy CPo-e(` `媷E;^Y%ɽYӞDl47Wn.C4]+}8Ȋmh:@6Z#w͈VK{jƏ1ճ0c#_ZoQ Ԯj .@Z˴gUz^Ֆ(kcY]\N4'7iNA4IhI+B|q:ݣXF\/qJkBejZt:*O' 5]_Ky5Y_ IѦ"mdʰKQuL .j?uz*laanY ];3] [-1{a=PZƔz"iZxPdq\I5Gh0"~\UFUNN}\rcMcΊ77fUS.}4헏m6naMnUh<&&hGK&9Tna5zڹ[.Np^h6FW8[wz-nyFyܚ3RH2؝oNRN^뤫4q_ًJT[;1_sh7c YqGW}T'# 7#N?0+ͰOQ>MJ?>N endstream endobj 360 0 obj <> stream x^Xn0 +U~EM E+K^'z4c8VZi[^*Ic˟,~bRP^ P_.__ϰXjӗR |ˤ/`/~_~ҞL!nfe.KH^ i-j `>Wcr@y#!1H p b@Ȃ@0&c gAg ? z0 Q˘5-.`+C7aqLrv ƩOJم|R؈ e9*\Bb VIMlǷ[dQ!YI$;9UKn* zcAs{O2KQ8^Ŧģs9GP^(1H,OצZ`U !1+Y >' A}yj @Xn(}:`3VTTBd}*DekޘqaNYEB9%OWJKambO=0KEoj^iYL q7:BksYG0I6OtױF_G[ F-sU$Q|gdWj-Tȱ́]pVɸ g tTNG0F~[x"4bϫƺ;% K9H%q r@V{?:QLa!l{u,q7VDӯ {̚AS(=NycO&<{XqNa=(),s=oNk N;?vn%o_6 WZoq// !>w='[4T_.,5mRzfj{N2q`x?s9en;#Qe7>lGjHSȌ?zg~KWtn*Gydu4'SBU歙=ǩ65ƕ-TgfY ͭ #PL{8ߙVzy8 endstream endobj 367 0 obj <> stream x^Yˎ6 WV[ ܂\S-ʲ,ݝnHZ/,^|}]Ic,&]*d헏?:Z^syQ^my>}9o)J_^8uEA+]B\r)Pʃܴ)ڔo sʧ|k.M֬c^eBё3vtvҙw׬5f *Ą=HvUT\cmO,^xQ(Gds;(6 n7XBWknD"@,g鞫qt2n)fG ]܏d&/l9{A䋑%3tr-\Hrf\Ӝ.>EjzWBeTDb ;%5[UGޟIA86W}߅A+bjQSӍU0O.𓸒an^_X$4 ɛւ|b SsT-q8G @sFyKٚJc .BRVօS`(ќFΝQ?sŤ3S[(wkWM5|*9t^UbM5 p3  s25N+oֆ{2яP\wnVe,i\+2F TGn>,(lSk)o 5̭QekzN4u !Fe!Lc`cr@ B0Q3T2 t> ~]4ޫ\7ujh?Q psO8g}( \pU]\{MQCPWlDެPM=9 s&DzB>[qx ֙1Ti{4ɨ  pn~UyjK'9R +I=dͷ +E|ZRΕLֶxģ cﴇ"c7~ciW BtkUqKzԼ8*y;f lQa^UpA-jB5*|Ҋj0ZkMk#E΀y%|VN7 KaKFJq'] ֝Ș3 ͐x3dz"1fhc9j͟ܛgvZLZuc1%sCFb C ĿO iFڨ{&T>HhI!!UdS9mX6zDŽKx=Osxj!JEp25#Q!A'h^jfƗYAS` _ThF`yR4qw%<<e "]|P3aY ACARdycEw*$bu:Er$V$ӯW)"[Iն{{675u<%s'>!ZE2VaUA쉣K:\H :a;IhϽ#(U3V&K^N[% :,l|0ܚ,c+S&"q;/"HEVp.HFjv/ŧ%DO  =)Ȼ9 :)j;Iz1Ӭdj΅FyEnR2 dhDU"y ,&T"C@7 |mGbgAL E֧ń-Cq6cnϏ/ C endstream endobj 376 0 obj <> stream x^Vn0+a( 4A\g݊^Sd$0J4;;i"Ri|I*(Q&d\h b'|=*p~9S&p/ppFN;s:)'V9i-Xe`h$$Oy@T}0&R0@MIES-]G QZQ8cn61"̀ht7DS.HmK2dQkRjPۏ_1j|LPݡ{R}VRV>xCͨAѪrEޒW?v:20e\dK#_!\Ht_4Y` Kwʅ vmALM=rf5t;ns߰\Nþ{->m1ۉr>&ڬC_r3S7Z74[Gdup 8:S2/|}?XG8ʞ1SHq&6vd*uu[EϦ9X% endstream endobj 383 0 obj <> stream x^Wˎ0 +Ro (d=VڞrIv+q°9aHg"]픦r$t=OO:z$~P>߈99g>c˗_S[`)|H ]:@X@KBI߸z7\>1f!>)7%kV&E \/dk \v( ¬̥(ҭ`rAT @2aJ=OYB@grRr+AΣj])CmҠno\/ѐN\0ބy0:Ub?:9- ɪj6I^Z9)@1Mgɪ0_927.$9a~֥†ً1,bq(HłCEk0 ީd O)%olq MHn4inhS $Xm@wahBuuRWrq iD[?؊vKknGuik?slF !- qi1qrzUI`:3kqcN/.x-e# (2 6X7"Msst&Yn!<|Bfڲ[k]DQd4@4zAmXzZro%K#EXm/kÆ8O endstream endobj 392 0 obj <> stream x^n0 Ew~ % бVtm.lˎ6n*K^:@+0tSTQÛBCDN [><<&<>:CC~,1O>A= <#猵|&FXZC:d!2l`t(`( .` 81v#NF)օrZߜY/jI e"vxy:,Ev)at xbr SxkEk,A Pt%H~RH.& dB&ݬUht 1cn su` -]ۨtqv5P ֖f%ZZN6Ć-o}(ЩZ7MZ}IV:wF-|[: V5''/\ endstream endobj 401 0 obj <> stream x^j0E @FbHLڻmo{G~'#Fg6Y"2?j6C\O}vFlbv6lh w"QȈCtXC)k /}>aITOVyܚ❉)\ӠH(c҈(nFGӜ\(͎aLVzbT1!Nk)TVG%UF<mx2"ZOq{ࢻ!;ut`7oC\˽> stream x^N@ y @krh"q qei *쉰;Чiӯn**7R> stream x^VN0+~ITsn++;nlNU"!Mg&"oޟ_9s$cQ$FeXM?;YYV!,o:>!ˁY9^ttEZ!i&A<|'Aa#>.YW.)4fLŠ[܊^YcDx kFy됂,Yg ߕ7B!Oɚ&oErX~+[%sT{'mɟˌQp&mAKUQ1wT)9 %~t M ai#r|/KSDέQ!魖ziG!#?$[Gڸzen}`k81qu`L͢OR,Ģmx6=,ev--zbG4ғF6>, ,7tuzli1CH[# ]@?6CC,pq*N~j]P#t!\ endstream endobj 429 0 obj <> stream x^XIn0i O䚜kZlJiVZ/}z}x%1vY̢YLrB~[~}:8>ӽ.Ϗzx!8Dw>JWz}~S)YgW.!f5Z{r 'p/tjO6&>֐k3[n8mE}f/-QV&DABHnf5"La3e 6lAAnh\iHNؙȰ#p3Lmٚ>iᗱ!mM !Me6sQ:+ Z?@ˑ*Hw \;kOQXr"`g);P} '_^xఇ bߨ:8{H8ta*zuҙfb\'ؠʆШKxF01Ra0-A|K CdD;}Cq+\ì\1ʻBH8fFݏMRQօYy}ᙢT,5C1)̀ifw06m0IRy> 0 r4sZyG,By567ʩ03FU pQݐQmq*ΩC$ awOxfH43)tgJ_qrJW H)֔lH!(qYszJ>CNwj] 24nI*gBћթ޷n<Ӄij'o9`pq"½|*,;x :<[M$CgNҸ;-BnGOɊi#K&bfN@chL++l~rhYΥV bd'nz=)mE^Sսⰲ6Sݱ  0! 8z+2˹lվ(p,Ûfa9^w8osEM{^BdȟTxRc]RM;GV\w2ZU%U⦘r}}檾gE\»üHkyOk/֟oڲ)6Duyb endstream endobj 438 0 obj <> stream x^Xn0 WIyoE-Gdv+CjRH)?ۼ./8TJOߓ$IC_6nKNoR:CFZj쟾[EO%Z /t_ٯ2"mt8|(ٱtټl\xS' ysa>-^;z5A$}J<5ԇRQ(.>cBNuNMÃWLx\FyC5QuUZl@ $ק;GTG`oN:c6 ԍV{nfq ;Z>ý1w"Ƈ-} |731b2ϹV}\ 2aj_;q|)W3;km=8(B;/Ƽ@vXfrG|t1r"=bLԓwL䟫q1% n'Rr=;U,œP9S*Tr8xf훩viyʊ2pZJivq= endstream endobj 347 0 obj <> stream x^͚n7|.`hb7-$3|&BaGҷ7+ǒ"2B (?1$L xWy|mLӛO_Ig4536ibL*%#f| g|FbD/|\,bHJ6UBE W1H4=E"! 9UC U&4hC%sW=3 Y҅OAF9IWuAr\Bhe g~ o kX&bT%Vz#IHuceL1,ũ CX-&9մj߆]]>bcL" `{] 4%)IJe4@F2BKǘt`V1)f4 $@ B9rD0oy'XFx3'Vɔs+LJ\3x^/D\1LOƦx,!;M#Fu+a\Q. +RKU%p%l( T)?JU-QZ V 7|Yᗇ F۱fyhnP`μ7 Y%ld!G \^:\^]m5abElKo&^MP%RXK)X/Lbp$AKi _q(&nHE\ Rnսi'n0Yc_cϱn0݁<:&o rl1|s肭v-/a b;@'nr ن#Hok&# #ِ]f&e9n⫳US٩}֥nf+_#f 1rl1XAfnU ;l[ K27KV AZq#wXa{q1\CW ͇kQqz{;n߷w$.#]hb>~I3̹͘F >ނ~~%)YLuZ{F'~_fV?T=kjŖD >n\o8y'3GeRtZjZTKMy޽p,;3χ;;pq93`'œ9֧ra\9r#uժC5咓pE<~qPy"g@prYrf$ȸP9C3^bv2g@=D.ԑ=%sώ F.P7¾W&(0㨯3sf9+EP]k=a.FLx=L͌+z.k/d Op2.upzuę>pu"g(#p+sx=Mz7r^ykr{pf{{q_g93C~:93U$GpI6rfg59õK83}q83g(͟#g'9/ endstream endobj 448 0 obj <> stream x^N0 }8$TM$7N\>Z,7igcbfa0eC6Jbkލ5< L9xD`\w8nJ)8eƍrEmzSa`Nmr.3!f"fPC-Z׺7-N1} ʈ;-ܼ[fv;O 3wolO3LG4DJd=,(XFըzú@ertUj<¯.E"rv)h (]-^4/  endstream endobj 457 0 obj <> stream x^Tn0 D@&:{+SQF5 #wǓ6Tfʗn<I$bvf2l?6<6 3Q@$ BqؖR-Bv4|/{._5΄KDϡ tSH.B~w3g>\(6;Sl^ncb$ K P$炍9OEPJEA({a7h:3W՗P0̣V56qk֥T\urfΓeX^z@k/,"P5\? .3=߰=pvi)QG E|{7' endstream endobj 466 0 obj <> stream x^MN1 s _N?V[Xq-ϙIB]d{#,"AaN "wR|JZ"cƂS^")’U0yZC;/ Xߖȥ/1؁RlVeҦjYQ8uj>q~n=pme{NG8ս,FeJiQͻUt}=9N!q9"nj1^! k,WG3J %5AF@|Z/ endstream endobj 475 0 obj <> stream x^Zˎ6 WVnv< .%t= wTbYZi6M?/-1v{w3?b Eߵp.pg ~/_K)pp|{j`< tw8?oѸƩ0W0BkuG8~ 񷐪m DmjWޮ" (\RPGGG8?)֟&+cL܂ӳ$^T>^D}.>'bD[<  f+̿4lxQwN{pV={G)B"yJ bu8NE!s ]R 3f D02jVS˪KEYz2rss9m`]LJ;9 3<"z^.qyW٦e1g5w6ƺVE\|GwsZy;1Pf/Te'm.ͼ54V{ J#rgxz/⿓5IKQTnEoe~TE>s @ؿVq|3l,ʕԋ1w'ZL 3-un3֢^Z[вq*JE6^3aRfX}k}k3֏j c VZTgN; E8 os4+m/S"t}!$L,.Xo*1u#eb!0b&{Z(΁I۪ɣUIwKkQB(PS̪IZ>)h:ڣ3^U|2\^5. Z2179BbphC+]v M.{ȁ;OQZ(f[x:*5P>6lԵMȜ0EԶv Т[$,,T59:tC-4cx…3\Kd2=.mQaXMTkվ%NZQ>f}Izjq{TJyoCډ >+jm~31cU__eO&e/T{g+7o B&&gzV3-|tqwM)tԉxi/R9LDX9gߟN7 %A^ZLߴ'`"'{b{UjnjcbxP[Sm}A^R;; g{`_\ d/UBTmFw2{Y*j[b8*pqmiTi~{&n@}RyW[Z ٹA7 ʢD)|@&$֥!/=ث*URʝȧFȜm#kA3>O~kI8IH1o_~ endstream endobj 484 0 obj <> stream x^UMO0 W,* 8‰vK4E^~ KSxxI*ѨShi E N[Z%♢ϡ;i:ZQ'Z$/Z&]$vrCԐZt^pVo>;@ aZwLsa~ꕁ:esIR/ؒgZES *Rz\r:`GʮvH^ uzi n~2*(hGy (pbx} 1 z Q2#@+6=k#=A$VShIl} /z1474TEXE8dq8ƂFfo_9^*ͷI./sȬ@l)yE#ƭgœ#Ɩ> stream x^[Mo6 ﯘ?lY@`n [k{EC;NC,IңD=m 1?H[߷ϯ~y_n-Sʷo_Vec}{)ƺ{7x;|+Ux|O0>+_мr56KAyLC4n['coEA 1{K K3Ϟa_qˀs2Y,;]9[Mj Hˇ֠cD[r/ag?lw}!O -]0=ގ) {Edp5:4:N.x1Vd5 ZC_.f]]R7èiױcKGtOԘ=$KLb{u@w_G 丄6NS{]=hAU|14(xERB ;M\k[ccw] ʖ'Þ8 {{SA$ XoMx>;_#6!y90M]S3ˈU끵݈9Hͽh_]<10%LeV27muu=e)ȮPcHĠdL29Et5)?rOtXz @<;5?5+ѵ8-=pv lȑ0)[ 3pe'rxsdP\71QdDƮa ^GNjmR/†QZL;QHg؆Qc qKR ktBc }kOO"ё m= ͆QZc7ܲ\NGPpjkQZ{<C? [q [E$z)˃ڣO̓90$ ! krQ[xf ڞAsvѓKջ+3"ɖt SA%YOSК}qdvY<8b4wvPNFj*谏lqR--^>|iG}mqa^ =أ5 {\lpxϢ H1^Ƙ v`_3ݰ @<6dZ1c?h>0!$5(# ^ Rxj͂[W/?SZ77[<[bSpDžg)f >zsy?][,zbS9HFwԴ֕7fRVƍ1bI?(v-̸Av`2p,7m+uA->|1 n-1,vhwDN!wэfC Wv;9 ˂YW<.Ĥ Dz-^*6 TrY|xEgƯ+hSIt } 6+5j6R _4raC>!#obI(eqZg7ԕgXG9k 9%jUϏo endstream endobj 502 0 obj <> stream x^\ˎ6 +T˖ dҤ@׳+mWmIZeYc\GfLS|;Xk_,=e{߿|JfM9^K~8L^f1Yx^<{xu] o8 Ho r )Eű~5\>.zk 4^kF 0nP AGfqp}z I>P0Y5u1zٞp5C|a.| La1nim3(~4yejܜpnRIi !3h '3@93_!h@L]!" a3cPZqYM{cGPWdjHɸ9݆q4bISşS35¯0౶$q0`w̲]tjsp(IGZ \jwFjÍLQ<"1׶d1( deA<-QHZU_`D*쨧e9r#Zo͒8[r4t떃2,64$Sky :8'4ePe͚$_}e≦Dׇ~jy7κa~^% }%װ G A״Xt\|&G +Wmd fb.=ފ}K'L&Ʃ_)h䭀lc=u\ ,Roh;yTy cZu1K8f|~5X+)fUJ(RJx2ʒjE&K)l ;_kØpup-V 䡢;uPQ6U#l9"Tԃk-k~ MaXwX:<Yht`WJ, b 5Ҽ XvbL/Gd"x$ƒvK("z5"^{*D(ѽA9mL(OwW$ BHS{+2 _rD(6!] Lb/q"- +hlܙK>%_i7Bc䴝8芊9 zDТt1 qO+4i&A3a8m yuq(RLGbrCtm;EjhPKz8xS֚Z>s_Rvx`\uUQ CIw\Hb".&uZk"D4h'XxF4'[Y3h,E9Pzp\}A'}~r~Ҥ))h|RۍLUi2T^r /Wה?C> stream x^[M6 Wj}Y6P,IVڞiezFcbvg7{)RL1_/\ɬi=>yǔهM>7&Sx|i>i K~]<k+†_l)ߟf6ʆɶ#`ҺX2f lls؇R0pqkG `ω`]^P>@,|^|n\'5r'ǵ+>m >~1v߃ 'o64phr@ނ=׿z|#O׿ X-Vcg&&4>i3=pXG+uVHF=DaYxw!rC플y f/: )SRV{tm >s0o"1)y1FA1__w!c  ѰA1:b\$)aA𾒈1Q]}mP@~d&cDK2g.<ȡ-Ƈ\p5D_ XrcXÚC81^:g-Z/C\oSǴ9}R"Q JJnpz[ :07-xs& FywG v ͮޔN1n;uMCe߶'ck-ټ#9zx\HVxmq5yP'TSZ0ApF)JK(+16z޳,$DRBc^KoX`i1$EO\@~TH25'Q8Oa?ˏC)2 Gj [O%-DOx򥩫`|o+, ޫ`̒A c ҭ  +:tUOƎ>sPRѯu !jY6^qz6`f%{D!] -S堨`a5<ÚeWu31GCXQ%ƥZS;{MCƅ?U}EQ/x{BL|^?d:V^= Fyѹ*|߫˿ӷ ݉#ZO\yqăah-=yqu-)8Euqm@<ĢO, 2Ѵչ( &l(ĨWv2>G^H:~|~< endstream endobj 517 0 obj <> stream x^[͎6 SFկenVڞ׊Hٴba$3?J>;ߛ?Ϸ_~ηCnۿp 5qe_/=<ץ^c{}Y>{h?WS? \pvMv]]@FBۚúM9f ~1} ..51PѾʧ J64-z5Ciam|޸moȆR)B]zO;#̏qn\o] ֮/=)ʵ-5hs/߭g˹޻g6/Yu:yKhtmk^ʰ+56{Oi ~o]PmO9v[@ >toS.L~<3R)ezt"hQ`$r+[`-RSb# ip)AWYʳ!{WJK>^qv).C9ؓX ar!ӼKWz.|gOnI={=Hy\7*s,eNKp5soC TCAl9r,Oե8ۼ+ >])CʶЧb8'ײ[Bm=drm ɻҰoCuѳzOrm av/#xُNRv?Gб5q{) /`~LkI\Za 3/κZnA9yvGr[\״i#} 7̥wjŽ,wRR]$'Jh`J ֚klYf~\\U~O>BcWe;Dj j`52먰RE{V 㝍vws-l.5 E8<,g7Y@572ڰL.O*pq~?m98őt."/JMSYs[#}Ҙ5F&}hjD776@#@⦲gwdfY\k/{Z$ ruS^F KR dJ9!H8*r.#?U< br1o5,â :W eYT-Նɡ3hrJ'enN##pЂus R pϓ&M6["ĭ{)@F2֛ΒAC?cSy Db\c$}tr7%3\#$]⾠Alި+T@׵ Ho_Pg}$@]F #:ꬓ$:=HCCu8 9ܳl7$$Ő )C9Au |e x,Ip5 >ɐh'|)P@zJZmےn6SX|c9cZN!a[P~orW'+Dmj+- |E;7_(sJ0X=#(i}!C`b,nχ0n1ý2*ߏip܀1 y;2f¼'%p6շ# 2%B)|Bͽ p$ "{⏿WȐӎ?EB)q?n endstream endobj 524 0 obj <> stream x^[M6 ϯj}Y6P,-܊^S"-R2Č NFzO")|4Mo>~܊[}}s7_br)>4X4{} >_~Y׵~o+Sg'W\+y:LmMxxޅxGЀ ,88qqA`vcmϰqMe-x+MXs[`XZ\'t趟=06W= -JgB9./UHQC/QpL(쪓Tm a&0+e݋Sm<PkBbNwp$kLal+M_a;-G k k !t+mDg紳]& kq1Mpɭ󽕤x 1R\vFjc|YDh!Wr^$ Zc ٶN[`UIc=M.. 1O3!)r<&b}` SNX8UOgawX1D}Ygw)CmgnC?@m?8Ӽb. qtF+)/9 ֲj3uj#bcauX&rv>]u7V(O(3[}~o1nQa;Nm ~&x\ Z48z:\0c3Ok$1M;K.Evfr<w:oPtgrP ,5lKW̻.1 yuzɈE(0ܷ^!1_AR dt*i &sqiG~"^"j0dGiBM0#eX&  LU;wOAoٯKP qn-^:s^ s7 `!F%x1 \=vM QַŋĘ&8SqsZmeI ▸;_9mg Zb8 BNJ#7O] i\krgcPS#KBǛyf. b LJÙgPAjrzO}9ֆNy=cQ05?Ziv^\ Epx Kέo>ay&3^-Gn۰3ϸeg~My>i.t.< ;Cv iGZ~ٗ ;_vG?Sڴ@P"}0CG:pk=3vi~ }iƮe+mg̲ۯ<Բ!9SSX+Z+gKJ~ 8\8oa0:4ʿVbg/Oe `^R y]K BZJPa`R=jtTRMxh"`RE p} A F cGyD;!<+wz'Z=d1M9=E-G* 4|;w4z,UE 'Uwڼntmލ 1<:yPTZ-V<;]3.gjzI ȾLw]=P "}y˻;Csz3 ux{'g;q0')8Dϩo}>ɖzbnϤ)#<qKn*:)arb(K`.Rpƅ֤L%YV33*nl&6>nj* \γ(rSP~UЁI =L lw.Hv`a`zRqFO< 4)P#A\FlAI)@6;<p"a' zRrqƯs])Ci1Ҍ3&Wl`+ b"&\-6747 n UDX>7xn5N8$Aq[zx endstream endobj 531 0 obj <> stream x^[M6 WjYeE$M HDk=,1;3{D=On? _t>s{$?>_ܲO_i Z)nuϯ/x~{ϟgǃ/W·|/xcIѥ}r iom6.nB$Ysȍ!Go6*Ai@ yr[ZNMwjy`(++Ygaܚ|-84}vtj ѢKS@ŵiih6]d\Fecߢ׹u]^k].Sj'RxqOrsk'Iv+}tU6[^7#^׋1LpŸԺKVq \1 996}8ɧxzE=֜V9fScȌJz =nqςþ-y]=dm[:km U>o -ma/O\ k9HCYչ: I"٭΅lI\4Y)4"HpGC9i|Hg]Z d͆R'kMI 2nr#Z*EC=Sz'bt΃HÇ K+OZ 7n S#Mc( 'Flcg0^)ΐxᐖd}X cJ# wVr4p0^1 PFf ,5e4% "0%)ݸ뒓=R4BhK ,܃yI ^2>1x0)xGvԃHGˇ <\`#y lXݩ2u^5^K)R V׭ȊP 3dt9HmLj:ηJ]VPH(]fu>j`R +DD뷫U0{0/jENR'@y~B2ne(`^BqVJJvbtܤT+o=.6u,E!IB8G%/C  HZ!v'/:`9~aw Pp¼ Zw%ǴHg;a  S=XVfZ=]M e =Jc4԰0EIC:7zNOJ>3H>4ϥժ )s$L)8$?X*LPa"6O7 4U2ʴo2a#3MyCK!䵰T0>vR۲}.X< *cPykOT?Rr{*nC )Vwx=]f>]:b:4Tn[PJqT*W1u w#N *eV!M ;rp\aSG%"w!`a.tvS*ZڽU2 1 2o> stream x^[M7 WT}f"@&z[k{V䈴Ds<.wޓ(z^ܲ,o >xӯ?[q{YnKok}~[#/K^P}|}>xGk}YY8:v\73"~W/j }?| V 4ޅ8rG@P6S6Pu ]91 _0o%rM{ܜ=Ea|g ՝Pgۃ=.&`.ku0-wb>RV=Ř[:+>].Ac yK1pal9l( (Ҷn4=3JGdmK7zi) R_NZ]:P0öCcbBoMn_յp'`%GU>`伝11MDɑ莳Xֿ56S?W\ ^;Ip)r_i.-` =̃~LdBsnzM1;lwܽ+1鹭]+ ^l~B:L8C=$@*l!L8Ű^n*偉$~1 ^R/8&Sp/q@Zi訬b_c=.xT&ALdb<~syu?RpwwcYV]`Yxl}o U0dǡ,Ї6E ""pIM0om|3\4П" ۴.f'qQ"c2Ań޺u%6h?Ns)7K'z C+(?mvo8 ]آ.N Gu+ۏnm:^$7k $- vRF`J~#訦]/9^{1 esk枏mT}h?/ =.'G()s ,6%֠WItKjʋ5Z@tEԐau@lyw`TB6-ihTVEPN/3ᐊ[>V?iqO^e?fR5_=.?b!DObu__&cFa{rT)%$fmqvqJƬ80MІlKus]nv . 8ŷq*']Lƪ8o2AN~:`@WY 4Y4t/0nŽ qTECV j1KcW vc ] ѥ0P "Э@,4BORY:\?,Y#b~#0G;+ b7Uƃ(3Ng*_o?eMhi%V\ΔIU׃=d.XcYh5_s-4!ZOU۩+pKosRnpdV4[-jb50VRX+.0ݭ_ء1QGdVt0UypI#y)K^1ѵGNhdg M LW11\`+9(K ghn K$+Y¯cyuve27߀ iS]L//MK, B6ׄ86l^KBܞ b%ku O# endstream endobj 545 0 obj <> stream x^Z͎6 SVտ,`vS܊^S"#2rXd#OXk/],|׿_~\.bwퟻ!&U//nm Jƥkhw.;\{o?jwv}]8MK[#_mؾk; ({=t}2gg|-n5ɾ)2T)O$~)YZ1n'u%P㖴[4>9ܗIbM>fqsN`z*]0ݡNS;oЇٽ;pop<3($4Ib q&%&;e eA"C)q0p(Pyy&8& kIiR˛U&oJJCOk֤rӠU dhx*xbBl9,&3+YK`vٸh|b6ՆLi9H@=a9i3bO 9BuFcHPR~A0a`.մȶT*r1-oJ |נKdځ^*S2λe*Hll6 PLڃCwLn.  y%Uk [VáN^+Vl]kQ&Zi~b]6`הu/v ԾIܣO(@ýqU^*g{ \M~Sݚv#2`f,w^,Bg8Lg>ym\"^*&ztԓT%l,닩ȋU6j,C#6((տbmޚ}b̄dw.{ n\ܶvu>-y^Wy\ v+TqgmH=mlĸɉUo1Q/1'Vi2 G 4 {kXw >F@=CLN.{ea}mR:ʢ0^ɢx󭰸1L,ϊOQa|Q+|.[*2-W2-#^4{"x%xqeթ"%2`c+uA,Xq+([("6"B﨔gG{&ZxkR(]R(OoF\ӤRJFcjUj ]xSMM b1]TKKqsx ukPPXIɱKQL"%r6+;vޚQN!Y Y@04)-)埏?5$=\?6Q2a2yǻ^, v3v{ٚ c gMJq>Q\jF/40SuSgx jH2!s9G$wTˌ(Tz>dT T~$3deI0vIa*-;MF.ME4 n bIO Ha%C/1 IPs&J@q|~Vl #!#9(R8Fg(kRX<}AOG"x#9:O6M œINL|70Sbq%(nB$XTI~.*p'< endstream endobj 552 0 obj <> stream x^N0 {ФmbH{C\_閍jvŤH})*u74.IE#15|*V+m3X% {5X3v1vgēC +>Xn;F#Pxw5! c7!݉Fϕ' u)eF$<íK-GU ^[「IJRuHZK-o 7BR8ɨtrUzO[kcntR5qW͉V^Aj,i^=פRKBnmmθ[*qvF[˵WqtU->2C<ׯWL#QX͍Ӎ?ֱ+.fQ}32~{E endstream endobj 444 0 obj <> stream x^͙n7z >v3 M FCQ H߾p%׻Եa".97 M.y'<}2.hK|7AAZ3zht&[!L brQ=bXAF@{h"CR!ZT*"z* XU26Y&Q- # c ن(/BƵV sk"Bbf{Cƅ̘Vj] D˘3uU3 K@!*|6NUҷ: T! u|U Ƈ cU/- KնQ}dҶ' U@T.!#W-㕖z6EU,-Du2XYZ$ hE贋(`bZjsJ1 F~T*rbIb2LJB|0:!@xoeŃK(Dt QjGG=5%f5&ʬ`j0ź &sb0?)㤀mDÀtN>,VkT4[旗4&Ǘ]-O|lfE}2떫igV,OXZ%ڥg..}Jz1''`}W>e_]57Ҭ}=n^v|u>n׻Usws<usVRGFj{y[}c|;-0͏ZKR-}ϕZjKJJZ&p{l>n7ZasxUՁ3Gen7I/3;3M3;&232LbAc7#Y 1dߡ,:@@k" }>+ .X "7X|sd+ ]549.:t]#Y y00. gQ8W`8߬9Y ~is{wbsd:W#TH#Ldgeap옳# @e,ze&&spJfyLH7gd91.Mb^Q3=/T#d9%;Kˑѝzn! endstream endobj 562 0 obj <> stream x^YˎP WCB#auw--;өP Ui>v:y?u}:?}~KsrÿT+wS/p pG8= +=pO{uAzCr@w\J.{uQdbjJ}ۃ'.B"5ׇ"fvqCF݁:7=+!("7U7L^9^eIJ Vx0Bol>`  }Я5B3ؕ 3g5& ;ؓ;{Оn8ϭ^%Cmϣص 5ZV kJֲ-fHc)Y˵}׸u>/!Ʈe[A^l5\Gԙu[PԧAnHaamaOpx=&&(u\NfmŒ-0b*ynK&-WmΧ 3< %LMح:0NUce/GW#k̳:y$)u4hMOe[b;Mb3dM1paاo8QݚhbkfηВ FŐi}5]y`VdŐ-=S[Ci0_l\0*3߃[ͷ\p+fL}nӷa7d]` q󶃿E2jwMq^v0w p>baʧԯyIs:cX h;kZ0*>L[ŇM$FC~-U&l1c=ւI\[0*K 8ԂYy rnx O?P-ԗ糭tJlIqذE<1xnƧfq!͝_B=4w޿s~䢂QsJ8|=?u endstream endobj 571 0 obj <> stream x^N@ EGBڈVbClaŦz2y4RD;i"RJ<5C}pL*٨]"8Z$ۀ39G"o> stream x^Rj1 +JJJYlV$,"Ii2n2,R|J ŖpXiH4D\ij҄qPGqBA @1vifbd tBnq(*,jxuQUe.UҦ6c#.K-T0lսT"p /Cq]GJPy>w:;m:c/Z԰2x;rX<` endstream endobj 590 0 obj <> stream x^Kn 9`xIUm"uYyWuۮL&N"Dlc$/i>| }^FJi1| %~J(ohqG(o` H͚_:H% ;~1^BŸmz*H%ja]| >pݬ(zDw9 ݁e==#2{17GVe:/Cw}Wl|^5CHq`weQ(khJh:Xbo>}*bk"f||G/Cl@%q=ȩGIeOE>$T f9\)eNCGlb$bmJ8Jf\ [=JQeUӔEz5jI9YKrWn6 gX1o/YCW} ަ VFTQw+v#'Y#n+gوS+v#iH=!WAt}Wu6kVkKӿ>VF/>";ːo[ endstream endobj 599 0 obj <> stream x^Mn0?B**u]m}cb# ,dMyg&H(*}uz9$udUӷ23D]XM;,O 1#-:猻L򛵁|\PoڮU3e1R`hh)[C _r VT)2>Dt5 vVS/Օ(E8-S%mJeh<)0)eOZGڸxiA;&C-ޘ{OJo3ύ3]+|yZY΁Fn 0>7͕bʠq7z;ʍra*wm}Ve0] endstream endobj 608 0 obj <> stream x^N0 {8$4iso+x+$ڪ]jlvIVTeޟkRQHX5|)?Lt8.jQDay"N33v%9 { +>8u69f V4@]sΪs ߞ Hdpੜ4x/';?W o.)Qp= HVP~\a%W}zRpw%%*װwEر9) fADԙ5Jl1B xfl +yHqq"w>[6͙yj QlyFms骃/ʷaCtΑ<*Wz۰:H"3-lkuݰ X#*M\+l腗a ~W endstream endobj 617 0 obj <> stream x^Vˎ0 +RESgߊ^SZEň=3# yׯ^\{rO;|X}E*$KZk|oW/||1}3^ g T6 M.*j&<@@` 5Pdgvn!CVv^nvsvqU}m{bFߵ)B*)1A9a.W=hUk}tsėz7ߴ 5?!zOӳ^L ܧ3릞3kO<Ā촷_kp-L|.m endstream endobj 626 0 obj <> stream x^Yn:+K$\Hr t]mo;Ґv((ձ5s83Jk=t2?1v̠Ltc?jj=:F}D[9\^i_@W҇x+^~^gƩFWcHkINQJ bԔ5hCOh HU\?$foFJ_LV;UmTQ'?R&2f`eӚFvT!׆3 lAOt!8ҍ) |NV` 'gp<@{mq*'KD( e?7^юs,{lOґR3j4I.<=Z w8?:UC[#T S)E"D"QQW!-sΕŪB&2OYw[Xks.C,ѺCZjALk6)j>c9ޑY>83ikSVRG >#WC}╲0b_1ɡnaYsiM# wTN'Tg y\W T\R^]pIő=sLHw($\c;O){\qXvdϧS) 6 s#|?f`I,/oNy]fDҫ yԒwh#.Ɣw$Zͼ=(iГrd6$ +!=l~@#Gվh Ab䶇$Υb@.$[cۃ,$[cZ-V/@ 6IVTB8!x%!嗘`nLLl*7$rO;Yd+ endstream endobj 635 0 obj <> stream x^N0 }P%6$7N>'i &r:/&"P}RQHư^Q(-m@LNMG|K-w 0nrΈ2Ǎ~,2=S!F>}|: X#[N_@++v$e?J YJҎ+ 6Nڭ+a`'gN.iNɮRʸ{Judg8hQ4Reƴ!5yX]`AwXZUKTcKM cTm7eQD`{EtUNr徔&:rkNt& yK endstream endobj 644 0 obj <> stream x^j0 } <ٖ(eu;N4l9$~>H}+*IE#cU"2c>G}y8f Œp|9+N'xr8cg^cΦI`ֈmI3 T@ G> N1@ v@br *:e Qh6KY w%Wʵ6ZC nG@e7_R^S0kFDԚ5DW^Ved1O'W^8eM YA2dpca\:;eJ[6Asf1< [gnUGFqfWXH۱L¥Qe| [r\;AkI|9Qs LH endstream endobj 653 0 obj <> stream x^Yˎ6Wlvٷ fSR+6C.(i^]t|^?TI\Y̢,&9Fro7Wg~>/xb~Dz/VƩy+m}so974Y!!m5&^2{vIc۲iǒRWu͒U1,AEU@ws7st.C#{8M^g+@ᄸy$@7G/nvv^jlM$\5/p agaԝH(2Dl9vW@>Sr,=l߇<>zcXΆ++aKir.*6"i"V6ĴzUc !6k1¡"$> c *S2nʹ|VżpdTk"8!8VG|ԓ9F©,]&g-8F ]*ʺbn ĄbRڙqCk hlڮ浶'ܧq+NK*Zt-"oVS3tZyF6K rR˥ʚMNbܨ#'FZb'l-Ne { I: o h(VedXibX+i~NTx=}K9V6$e MrN{J^M۵sC{ -%1Q%–/s3T2Ak uk˃Qq=e`#o}'meV{|~l_KSK`' s^)T-^ePT{DIuRRE`)sZY4íZy|}V>VL"DtB9xtQ. sO 69` &ko,v^Nʼnr('hlg.;,w% L<۳<Ś?)bL{)T pG$:Bt`f[/OX T'pw QY;\j\/&E4]T2T~x.$ EkVw7fd|7Q`R}יtB|r)tBķ2=tB5 {<7~E endstream endobj 662 0 obj <> stream x^n0 y @5 ڮ۰ve?YcY(%MLQ?E+{йz}6_4$G7HT.ZڏOԿRo{#FJ>bGE)lKNڼs;n_5R½ǜsٞq|\w 4%\JrJ~f^MFy7QSꙂ\#rc[7MʺpAۖIig9 jt6՘6$WMKW-8nS[-jῚ3ǐvZy3*g#]Y8f;ѪܙQYNT51}f6n}B/'ʵ-鶩osl#ϸt;3"HZU\ TͳW/*q2u]DŽTq)vA*8;TУTj~񯠊\5n(>Z>.;SfU9}/.$^cdj,P{OSz-kLeT7¾S[P5nnw Ie8򪧊?Aָy*uVsM ƺO[,nSe+M*+SM]7꫱1tdTa)mvQP5NYbSP5n6jr5|R@1Ϩ tag\0J~=~ endstream endobj 558 0 obj <> stream x^͙jF) V3&ƽi8[|:K1ް@j=+ эu4wF31Ӛm(:=ZcGik!3ɄMp$"Fe̚dMTOBrSr!xcCU 'ssQ.Gnk^NO ğqJR四xx?ۻq4[3֏xmPoO_foV3$P23cO 3|]#3|VdfIdf2V _syn ѵʙ]Xd5a񵄙a(U1y̰`Ft f]V2SVB{ 3$P23cLf@ȿ߯z#3t!fzvjMe ̜'X3Ò|Z[@f\#3[Ff8cdfIdf2V Њ`u6Ff.\d5Ya(1Ct&3tB/\׶> ɕ̔տ&3CCwnXf&cǔ=Kyn~̰g02o ̔տ&3l`,afyf2Vܽh`Zʞ̜tdfށnM-ao@e9 endstream endobj 672 0 obj <> stream x^Un0]C J=Vڞl i$3C̗!M%3aCa>ʅ gBZ:YwR7eoSr `ۙ.f@pH,wICΌr0rw݉' &hWx[` Aݭl bF mr,/:sU:db, p18EmejuRц"dmdev|tWb DbldsafhVr$mz40Ƣ OC6ROɃh #WZ7~i:O}+bWH]͙GARm~s]55ATM8j0W]MV%[oַb'}m5Եf&gX=~(X endstream endobj 682 0 obj <> stream x^N0 }8$4 6# q&i@5UY?w @|Hww ҢJ}PЏ/F@{khitb+Ny]~?wO}i *h͗s9k %ja]l:s@.2>2@3'aN8#ᄳ,. Z8!'GTU؁u>$ ۆ9KΡ9R#CBVLE̲)V*:6xx.ד:6X>.7`rǪ6aR9;DE%x2c!g@P1N\έF6\ʒ5;㽤di:ҁLHK#daM`Dĕq~z22mn^xfZ/5UA᪝G?{5dyo8:- ^p$Ogw:^ ۞@V endstream endobj 691 0 obj <> stream x^n0 Ew~ *"C&@[ѵ^ʖIF rdqIԗbMgmNIE#1~*V+mj3X% {5X]8bO>-}m^ڞtSGSѦ/MVhI@Q>$H@ |{SwK@ɿFy?O/+?ˉ6) ,*HP$F)RZOB8X~.Ʌ%ZT\b7^k /|I O7Cn %C,I/kpB Mp)k%SeVbn+]G]\PJZ oƁk2eȵ"&|2ud24Xf#*^*q endstream endobj 700 0 obj <> stream x^YKn$7 uh klU )jvzG>kax{ZbZs+qf֦?X~Kk +9/^??ȯ |]Gr5bPJ`e Vc^ݣKPLm6#g|xI dLI#,XLBT!٣m;O&8PgϋF)3i.#W5Dc[MGs1<(,_Re~gipg|1_.e8.!,brzgN`P~$p 4U/x0(992*;0Qv\ Ek|ʅWsC'cb 3W+%S,u؞`r ۙr{М; 0A; wJ3>qg!F}!ES}AWd\nzkfJWwR ll3 RoT&3#˂w6w_h"Ͻ<**/Uhq3|+mK" O m§b\A48$b2๙s1^[1V ^zl{y ޔ;d(<?,5gr9Մ2fdd~d-^ex'QeXB$O;Joe,}lMQֿFWiM,>Y¦.mS3Ype;.5RP;#4 ɼ/#1Dqi#FuC"51/:My/^ p;|ϣD/7j^h#lդ0֊ YxAlBcj:G䂪{=G"<c=rU, /Zv) ʥ"0ȮN}"t<3j,:iNOpOB+s#׮ӊwü,?WRxl ~XVl:W*;O J[yZvڞlA+=5 x}#(Pl= ,+^$T^6ߏIf{v(|] G A&sZL>$0D=z݉M9ӭڤ3myzqkmhz;覑rC ZNe./_Y^jxI=ރb)!ó0Is"Ɛx{r}Vv]7ޔqY=x7~`F|Jه#(>mb8xZ^yUdqq!I/~/zZ{O,iY^c+=͈Yp+pZ;tM׽dȓPxS@TZ^8[*^nTI9YI 땵\:EdӜ endstream endobj 709 0 obj <> stream x^YIn$G } #[2nblUƠQ-ALnVZC~|J$"|Qh|{'h3< <_RL7K^ pn ls}TpF:B*llGmXD#-໇72\lт\ h Q: % Ɵ029wW=Xh<by@41ˮR=nNNŅq(3YFdx\ELY;k-2Kk_8Kˀ*\8Ai͢l=ƏmZ|*8{ =B0R2-or>hV&*5(aLGM5rSg4Q;BьD9T'!6y:ĵwHLY@+bDYnl2(~:oU1#ڃ9X3`ڏ6NdiZ*" ę%B\2YЗ=+S6G9X7frCƢbVH3{9\7klvd/79q@Bk) +'[b2R#O7v)vkgi5%*R#`o?)MF+JDHouН]r^d„|y8*0V'؆IE_$9h4lrka.(d#`L'WC2'a r 9]A*ȅ58;"\N*$t#>|7GMVA6wƫYde@Y뻁y8!'F2o >be@ޫ3<I ^[K*iniVnRkkU^%YG_%l#o! 6JܥbBXur67D7*Hz>~'~ gvɀӧz 0ZOǪl-# j6[ޫ5? on٢eЬU"{ `Ϥg ,NWH wM];AԂj9K>~_q;2;c~qE6) _tI IpGrWc+hg X NUCGL =W[b >J /ݹb5#Yp2/h1is.Req* ڸ О .1OʪVFsc{BKpf^uU3ڮj+#ˇӆ- 3knukf +S sh>H'sM f~QE *#g.Dʞ\#;9iOk , |l,.={klR/?g01 endstream endobj 716 0 obj <> stream x^Yn$7 +Ѿ8ٷ DJ ]H>>ZxoH$m=9̡9Lr.T(up Z w /9+ҹM!~X]J%>ז-k_ೀ?-[Ȏтc@Ctk0d_:r4H:IP'C5Lu.9B3ŒƩ*neBwkBp0?LXc+=|.Ep &q@%\S21ף0 ȥ`~JD/i =&6w]U'T-Mѫ9sd Km VJ!dQ"ؠDcF06?[a blj"P'̓LTƻ QMХ5xTqǢs> D2b91DOXQyɞ&PNEAt1B7Z8 )J0%`]"q >  ~t`ؕq!@W2y!V^[UL%, Bg]L'n2I:qNdCR JЅH rih˝*Z'shWtTNw9?KjEI<3@vsKmJSm/sFẄ|&'⒆5L=w\67Eb5癊Zr!)/\g냲-[s%La">GqVBo>B4 cq8Cxs^UL0ܙoiJT>0x^h{tlJnnK[&Y 7B!*p( {dۇ'}Yvl|ܸ?}X7-,cQڥUFEU {M/GUv-rT.G{2rN؀**Vȼx@z`:B<3zVKE\H~d}D6}ět&}>\౳Nfxk_[k̒7gi.K gO=DDPp#YHEbM,ۀqN= 2̍.D`* y=0;r&T[ONNzj#VOj{Q[NikK^}g=j}}!YKAkÂI6lqQ-[bW ]sEwv+êo¦x<aM]y!)^i?DurY:i--͉fzwz m VxLd9}֧N@Zc#9m_TzKqKOvL l-';s쥖o(V<[iy&֘l 8 / SGj B(<_]JO]/8|FiMF&c)M[/֪/f^mRդle-}閻٪o;d4rրB<>&‡דYVoNH42Z|-Veяh ykׇnwzv}ȴ1H6-J8A^jG6?B endstream endobj 723 0 obj <> stream x^YɎ7W g݂\S*6HVF!$k_ޣZ>x;g>*Ic?943IExBw+h3< <~J)W&3Wzg@o dwlL!yJ6ׂ-󿢦SGK@DM|_wU)9J\yR *EWA0+]\.g؃%۬qY8UBBaN SMbMZe+9g(/h9T~)0NTr, 4 :W艈jBOiQ:%\7HbV))" s]+h}VhaaaygѫRmVJ!@Y(Pfр{ff-Qo`ɑ.ѐ"O[[KCɛw}uu6+Q kfmr/nØ ^sX`* FC\].Bw7eSi6uU$'p47qyU34ix Y*£Cl!rw+ >+Fb;RXl6*VaH3.zGN# x`=ylHn&K){=fhۭu!.׸u0{2\CUN7H.uuV1Ur&5})Ȕ|CoQrpFg#ح-kL Vb\ {0oC$g})@,^]Ng|RїŐk&6hB]Pއ>)JE!ԏbA)cA}pcvIXEsz@ B5}>$*G0|fYXdD*Fa-*S:{8Av V|n~Z n`N  Gg\(Z=lLK:0~?9a$pl'LF-2r]J( U`gvJ8I+?`Y$]*zNfQ,AR.n9h)9~v3)ޠg/L7Z{V֙3X"IٺfYƥwm<#_AnnEWWՌo<(tSqĉ걔xƥ$&m&Qmv^P_chq}za:%et[8+y' f2$f4,5-=u[\lrVG5 "på쾂#k9{aarsvpN=u~e|y?Y q7Xn̚ʶb֛̯G{9?7buP? ĤO4I;Ҩ ɹ!hW Z?.ga(; @"AtssJ̧e%]Sv/N<D^ˏ-An>%H8%X|J^!.AS  uũMgR; l :B &ÂC r)W?noa endstream endobj 730 0 obj <> stream x^Xn0 +U/@ -=ϭ=%i#TfÞIXk?~nŴb6 ?ns%? &5kS+Y+ܿÅ+p<r|< ToƶT):vGVe/J^_ Ţ/ ո,Cxr],q:ﵜ\0d-'𔬾:rEBxH۶LPo\&C(}RQr! !!0aA|'9q20i)Gs ]$TT<(Ds;t 1T֤JhMN3aGLc;юo m,KjDVlΝMbMڛs5RA@"Mz ЌH&ŷPShAEW A BsK@qBCiy hPWG )kuUQXHSqBTw`>XS.O= ?c;7!;SRpz뮚dF|7qʆ8 A*}sl6 j3=?dM18܋W}z|Vڈ1RaX0hl&?8LmZ.*]hD}>7}!v6$S1QadG⣶d| 㐀ĤonhT)EdD1HW" ^k,':I$C h_IFVNrv`HSUnǤs'kb$vwIIE?okvkŵIޱϸrRyئ\([<(]ҳMTZ݋G-29 {} g4xY`RÖD|<$ZTE?/x_ 'ΪqIH4|ߡ{ Yaͩo-ެge*a/j;cP?]13ޏ9!H>J.2ދCQ^JI endstream endobj 737 0 obj <> stream x^};0Db/%" QCPqY"&at'nzf}펙)E, 1!IfbBaOA=sp3@':}).Iq<=mFLܸLJlK!fYK`XhVԜ8)<ɠ4utO4pqmm?<ߘi{Y endstream endobj 746 0 obj <> stream x^n0 w?^ *%Q@` ]۩Nd$uhbE|imZ}Zk1,y|g3. /6VQH XQD bE<#z,~Pk)K +ϟ{`s;ZXZz*BpM+8).w( !7ewzȶTIΒAfnljF,(VL'J#MDsr,h_4>TR*}nQ'2uO`Go{l%i@Lw;@[DZ)8ԥ5¨t_ܸ6nc2\ӂ endstream endobj 755 0 obj <> stream x^N0E @-HJ,Qv- iB5c^$OA91~74>/'f%`1Y;HɈK=YfL@D1cEyAy&L#|=6'k*5JXt> stream x^n y ^ t៴vJ=V{e3`uq*!b?f H!q9<\2zPJP规6H&~@sfMc])<}_9Hß~//˲ҀtĔ7_+2{mtEIZX$o"&0ZϧEw@Bv7Fxjc0*y0 2DphR,cJ /CyH0ZJɋ wg*0m/ep:Bj6Z˲݇/;$}h2cTʸܸjFa6ŀbu"d \_~^?5ߡt6ﺬ~h<%f`Y-InE{g !Hm3;jڀTZz&뾶/iJ0~7S;kf!JI)6ƉV_;Og@>RlOcۧhKg ƒ)>>9m4B{uĕB,L3fԚXeM4~zıfm/Cw맍6Aq)wH endstream endobj 774 0 obj <> stream x^Xn0 +U~E$yoE-I-Kk(ɚxZO&MOuyvz)1v̤L&9 EwUpK)>e /_ ÛJ7+Ʃy+mS"RExx7.?Dm. Xn^1WEG2TMcLI'>mUL /a7 )a4+ Ye2VCTq v`AA l>ݿv0$(R +(:)z&E|.J'`z% 4 jb.UEFdrP ѫ(T[9.` /@`ʆ}HwpW[܅.N >(k=*HYv 2 Cg}'^£9L.BQY~SAJ"܅Х ވtTM.1)LG>UIv^0=Tf$ՆoU8wCDڵt\R9Q$;df!M*1~]G RRd;܇Ǔu&ũ } *! %@ۋ^6Cq9g+^,CKSDh$N5zz=cЉJJf߯`6 l}dv@8`Z+zpGU0;c٢U%uƖ yþei'bS%>/3G娛_`̀`eN I,f 's‡6UO"Bs5Jpo ͓CKi?lT x`.9=2\I7iK(}BZuR8 :x1>2ϺҍjJ#uTKTƾڍ/\|e]y)'?J9 endstream endobj 783 0 obj <> stream x^YɎ0 Wj_b`@Ϲ$#J6$J" YGzh^.?^vzJg1?. pps|RJox2d7OkJ:7v 1+19;!U[xb}\Fm<m+BW&(\RP7DϟgtGEhca1&.AD'1] A]Í 1S ا9|>1 >L|!Sy0 ƵQ6L#˵2udaD̢*IbE!*XD;S+ǧr,em'dzٝ:zcyfQ7~o֫K_s# V}%ԎλA VFUsq= gF{lU;EC  ::c܍ 1o͈fCba־9bLP}C, p[en5_hSB KRӯz!p„q( hVamzU=o*ʺЫiGZ)xR8cjvkKs?7w~gd#xmjm bwyiCLWuXٞʛܕ܏i lvs )> stream x^͙_o6) ,? ( ڼyRcŅݷ(L8u@ߝȻ{cMN d)OkqM&5XL\5)G\KLq=hz8%gGI *9c zP"HGsπ٩`T DF?' (>xWoS@`~.ۅ؈,r $PSY3>;{00l|qy!L?X_!!\Ǔ >w&T"lB> "/d!ޛ :Pt"`1 D}Cbb1`y񂀑$'iPX]+ tV]UbaxAXT1LK֖hb%&`pjULhsK^{M %.$JԙƄb!退Z+Z#1`" z(%Jd U,d ib=sH% p C', #V͋ǀhU-O ]oޘڬXt7;soes1WW twYwXw7O+Na-oeM,1^o7_[3^"wǿ^Rx֩1u:73tf&2oj㯏OfyUu/Jեa3/5nt[^sxjT& RrzX{W ɭ$ jvyޭn}?֞L9bF/#3İ . J{NafSfژ!dG:3|h/b Vf&8f 0e樭?LM|{/ѭRwL̰=!L9jkbF7sw?[KdM ǀ Vf^+f63m,p]$ utoǕJmvgzV}e8Ida ? /# j+ X8s@Y Mj\" aFHTH140ֳp¾1g?A\ 1u,\`Wͮ50s@mv\^inQy㸭҅3G z̐ު RrL̐=1,g)Gm̐ߝ ŏ8C!5Y5i>2Cڼ2Cּ03i9jkc2Lf(0Cq@22C2C*103)3Gmm 9&3TK~z=0 mVP7+G/h-6fƼk2F3!3Cv23q(6. endstream endobj 793 0 obj <> stream x^Xn@ +>#0q ߊ^S/CIj=iz<.RH)߃ni|CcJkP?5`Fiӟ)Fp}8-w*<W^amvJhiB7C}p*#BFP+Jtb:?yN“-¶s^*qr+_X;G 7z) u9D"."-H ) Sk'jV F-Vq"F6\d%㌒LɭK%t= "4r&78  s\Jk6EcE6L߉ 5jN!d:5۲ϑ LƗZ%zRz+w:{6Θ٨# VRr +Ě,k6gB;:jl[&oQ!vcsl@luJC -@ HicڕʉyQ8`Mi>{(𶖇)Ȭ5yfTš4d< Wf]0 m\!0.)DjE+l6バFձCM)> stream x^Yn9 +N^ {ݜאlQVK3=A`=q(DV R˯Eߗ~vy9*rыz/ۀ߀-ϯJy_^)sNoף/|ï-hIf!SԺg]נ4~ͅXtϋ0KJAS5}2D!`k =ϱ avB9*'U>!?LmTC+id0쟾_)J1W\+ZM& .eP[c{˔eqRȕ h3@Aҹk.Q-tZ|ޠ05q¶5NZ6+KCr R+Fe=$<N֘BpQwkb٬ٌ=wFx1f0,AYݺ&= EQ7p$d A2> 2xnV 3 28waP6i|Oo{gj8jm >`{F iVPZ9Fój`pVIPHX T4`MvsQ1Yy&_lWeAgrVSEZ*m<Ӡ脘\ Zq<TnDP~NJZ;2NZv|lؽ;vnAni]H 4?lqJ(j㞸;hE^"^yJAe͍<~A DsWfnygbv[άCNKgMgo*d~V> stream x^Vˎ0 +$Ŧ@ϹCڒYE k84Y"2? vzm7l|DN$₻~q=jÛ'b[ .8UFͱ{um5hw-<D+$rɆRjhzR<х9`@%ޥQ:RZ^-HZ׹wliVHEKsr6f$I n<PXxjC*qC'ݒg +v9[xV >treb[$ƕR5!_c0ݬ*BL@&^+s d>CO5MmG$&Xw91uhpMN> .LudKA+G/q #q4dsW1yg#@Ol06 Z^LWcfE ;DLp/:݆V$LSz#uIWuAV຦AUxw֒̂*fS=tcG|G`Np> stream x^=n0{3'$XH ݭDʦv$K3qD?Ay>y=v(Lb+ Pfq ]"+3F f~R] giœx?А`> ŷnTFgVU 磴E̠a@p@`AbƷ3r'© Z8M1LX7ԅ8#k"NcNe [6^9mYGY[_c6Z[lԪWKaN:-\}n)DJRj*VUkG0{+wK͎u>mH*.\)e2*H uԸbpq*._a3ؽܕ}mQ:Fq][N?WϦ7ܡH/+^sVJF1 endstream endobj 827 0 obj <> stream x^Xˎ8 W-X dܷ^wOeMYM5AITbXk/~vy^bb-ŕ@?ڸ\[蓬+]˺+Gw]7׿/?y]L)>zp4_R&Z.7? >wƦųuKKļѢSW1px SW k`̊h;;h]M-IR9z%QuT}20O!] z(1g8 NJb,Ɣz7M\8{[5RFYRm;Ön JJI1֐8R4lRJaA)e) 1%צ2631|ig4hrNmEY⧡Έ_cI`ѢX!ưl]Es* n뒨T$^qȑ@rD+CҲvYH:~?y=HjL`1x(ўhVtTVODk k!oh.丗/8TRc,*ՙVr[KR"z 5AƇK7'*(OUZLz )K;2ǹHxR'!z=]pv8.l󟪛a38X][&Δ\.=؊ yMWw]}+J6P" {Uuv7zB):'AA}jL3691l{ׅ2(M׸)ְU枧;Xd^øt߉$~!I'2u\ ?9D2Ps=0s820ŽiW"V{QY"n&F2^"=w1Nb(۹,3A,Mw4|I5SvÞ@p@5nj`;9ip|ˢgJ?Fۙ!NpÚAW6w̃P#R7wY#nQ>l`#ߩ͍HwwCAZ:Aya,ieE}鈤^pbd1\w?IR| endstream endobj 836 0 obj <> stream x^mN0 } ;#Jl"q qe-eQ<LĽ K?yxU*4'$%rC̖PƬO<^Zk%84^<\Qe;WR(%X5r >JXhf u _*O+Y卜Jn5]N\n.m8*YjQߠ!b>B5HF-6Ql9V|oC!>#byelFU˿Tj0FU{gҚrnu~R܅? endstream endobj 845 0 obj <> stream x^Mn0>/fOYݶnzEތIʦD MKoDoE2_J$2ƪ21$] yQ?|\0?a;J)0 'tJC:L].~=TNtJ|5X 1kOԿ`"R4bSa͹\{JY3"*Xa#ggk.$__kP.yc%mJesєprd 8k|$6Υ;;էs,]9*Qy[Ě1\T7r1fpve)`ƽ0ƜIS!elTo~֑6.1$i R۝)_2B=ûz>7gO:;zk/tA:eempQ( "=1hy|t% u#ܡ uP}gd~ktˠRb-.q~KtAѻ[_F-{B endstream endobj 855 0 obj <> stream x^N0E @̌ߖP$ZQ$!ܱ(&HUYS73;&MDSQ/]4vΑ?+‡G6#X%ČxF4XCs)vCГ '8EX~; m|Hڑ@UawbMQ~1NT\:'ۥ6),*rҝ[fښ|QȤ]TvC ڋ]mcydRz+}5bmJMya]ܼ^h3k,i6xwz$1qBz WHTi Lu銕.^[=Me_c^y%7 endstream endobj 864 0 obj <> stream x^Yn#9 + 3bljmщ$EUUk^[4]3/I,~bP_N/:8x}k\-xx/ DŽû& Gx?h]TJ|W]Bk.?^ !uyX!* b[%RI+W RWڴr@Y/!^˖f9: cR1>deԛe>[s" y,2 (RjzXc2\N-ۮ`X?׆Xm. ) O 65jGP3Eb }Z u7 5^ l3,bBWQ6ĽD/^2Dl/^ x& Ó#}o^FT!uR;4o'Cȋ&v( g|3gnTuwPA&K!C;5IigS؂"Q@!xm@^䭊Zqq87wa ;}cfdef4N+=]i5ؤa-J͵s@kw,(;U_Hv*l$".Y@B^l[@W[+@듾؇6rɋcQq'J+8bQ$q,) f싳(/ew4^YJkpݳ=*#Oآ 1Uʾq 5 Y?X>uzYqmTcl 1 m1MʌI(Y\ mNI ѱOŤ]HYЈ U=@:։aAfjc&-a+7b3Q 3`k-u|0!9-: Fg(ڗ J (xP Βټ7Iam8XZTōDo˨Ԫ;!~[E ߣXJ(&I-8B&+apJKu=UЉSp Oy?3U;Vw V!y]5{o'uM{%ZCvO5n Q@$pjX# Yh 9 a}h<(>l\qbhhǍ&B6߭iOW"̇[KMLm럓_?h? endstream endobj 873 0 obj <> stream x^Yˎ0 W6ns+zmOkIYI"pE9VZzOyI$m]οh3I~"Qh,?h>õ^9~* '&NJ?߫_TJ|+mAȿ6>6%'{f27T.:7ߖ EϸL{їmh5Q԰D}P Fټ35R5]ݢxm >[Cx[:qmIFٔ_G y#'t{sQ|;[RT9 zT|nq;5W1*J>65:rJg0;q VA}DEF5 OLv2"8Vd4Ʒ2|'wN$ 4t pʚN$(.nȈJM91}s#8A 7(P2;77@zbknE777B:>dɰPm2hY^2Wtwށ⶟Iw޻i?0 Fqϰjڴ ;+(^:^.8xh!\|lChe.l$r 8?>rKecu؅bw3_^PxYY"\\]xbZd E~ 8?b+(+GPkHɰʉt'*#-0"|\{Hsˆra4w$ab9#]+VV;<AEkjXG{q{N ę"ªfx99Sn"XbٕbŊ|\D1I}F9c.Ǫk`DqGa1x0ٚ endstream endobj 882 0 obj <> stream x^[Mo7 W( iRgߊ^S5VfmC=k~?seSu>r |0x֦dm\wx¯)q;?}]09ׇ--A7? uŠqi`n.Ilb-uq=21]Eoz,ɵ=ĺ3|>e]>\Եq0S= ~ 7oʸN'hW.7ŜDh&M~5M\ݩ-h{~X[ =$1heY~:ž G-WXZm(Pmkz?SIkIf lRxąMfF|j'hi`\f*#f >OT7Eܻu&jLV x/Z"njA&(0UsmKP-=L.l ZpMɍHC7ycWԲ۴]35rcWԭxZ_mHƉ&Fx71J+=SSb|R"|g~11#NWԼԦ?3Y| f2EŇ cŘ4b1Q9KQ{b\B!\5F1;؟A)M7AOW" $M,;1vAh\kjOSC#NV[vm } 5(-!Vnb0/po4gZ'ųXVXhx+V8gB7.u+TlЊs7NS'RQ7WQbsM8PZ۹J}q<\=;{D[:j‡|"qg!Uu E,>ϵ{ۋTXwD~SX~^SXx endstream endobj 891 0 obj <> stream x^nA }}!HHQn+ll⤉7h4bvX~yZORL+9.n-pI{ ᅿsk >/|.+-rqz4d`Z 7}y.R| 4`KDXA _:xAD+~lXFx.]7 f]?xo[[dr,r x'k$H*lm$C uƗΨdb+5hbm8==Fc| Mɦ64"[B9ͳO4l MY@ wGZ(ZS.[l jF:E2[B㒩|huSl &yI48Bs&vA*ҌiFKEJ`$#aѝ*r16YETeJㇷ{4)ˬD#[BEH#[)!ivj!X]7_%%ҙƻ-YPO `–* #R.hQ 6HD{s`EN tSALеaOW;JlxqG ݬDԽK?v*U w ߠA bF:eHES,rib\84PTÎxň@;Ƭ,C.r\ՁDGHd%TUM9C+RdE!(+ԍ[QNk1^{N+f ^ d;mۃ{ШX9'杌\YcTۙaۯ}ho;Ti m?:z1%j29xcۯwjIT( Udcڙ"[s=7r=cJwx¼Ŕ~<3=>G#]˹psѾd7 U=e~ZR2>3Ws56xҜRL66kdyDhUddkB3g?xw39ٔBK}`q+ ;!ԐϦwa|TcgR(ҁƨt F?q> stream x^V1 +D> e.HTiEz>|`a5G&MDꗢ_O5NOΑSExeÏ]3V?y8!fD%sƯ |9'ˆgxqz*?o8u6X!i&)囜U6/@O(&4VzN(gX_voڱSбZjׁH*#\1{ ^;_dK[P=됂lVwV =׶:E&p[f =8&m,dH5Hh4ZrLH@Fv,8)bֺGp$N!¬sdi}ERetPV諜Yex ʤu0|o$(ٖsҥx0: fކsn9[`֔8l0J`Xrϔ,2@$#^f4YG8Գ"~#ɉMp{m 8eW,/-fl? kN ^F#=ݙf&S欙aQ)&[u{f5m= endstream endobj 789 0 obj <> stream x^͙_k#7) Y8 K 7kΔP>\}ivB='hHIƚ"8[x>qg]LIx&rM.nUb2mJMqΈnV=9A~q{hxuH NI+q!Z'V)ahzq(̼V5N+CT=Uuz㝳+SQ< .CDp!kI2>B 0P''m%x$Ps}Owg|*!"*&XU $@wQCL،C,&ޭBbp$ *fA~=ȀY #{"R51B[ x21lNIބ4E"Q !gt%P%eSIN{A'B&YUX pq0' TBi* +SQ0 VTPP-^-] gq&GPvwFr!xGaQz1. 3"W@>œ=8;=ek^_wݙhoj//ny7f?Qi?`6ykW` rJy277+^n Ywrx_v~iH)Mw=?l{~?2-Ft?w'߷޲}=|EULWퟷZkɯ/oTeϥK}fm;=fUՐ˟21U2 %V {K {<FZߌdיuHB:h ̠fE3ffe 6fF׈+dF׹#3523dFs8ʚѵ|Y 34'fX;+3lj2sK֦6XPy.Y8U+ XKqܣ1/kcBf[NaGp*963}}afcffempZ ' 3 N'f8Vf86233AeyH3ffemp^L<'k`F<ن3*3K2Cf 036fȟ,d<Ä2p3*3K2Cf 0ffV ̐0C*[ y iFfƳ̐=!1C^t!3d' MdO̐3̐mdf> stream x^XM@ +v3$R۲RCmg>$ jY<@k}}<^OCZםw=;t?t}q]cK*8#ン00Mfh7Nۛ]+h| '1 qӑ#C#Acb.0hBHh<0Z0P1l;bJ,P28ުk7acrU5ttF:uԭ;yKppv V8068l'32ᐘ}LE>FRgᵩ+a4I22o;O47[ fc*<0FĻkЄNelYOi֦]י3Vp޶C> stream x^Tj0 +JhnJȉ4.))FÇj_^a.$[1;3~6 '`˼=$3R?R '<'^ԿMy3!f+IMrHDHS9]#=gVrO6 +0Y̊J - /s9Z<єnVehš8CwpҶe4c5\YhjT_9mާk.̌dUGT{tTӊ&ɲO7o^ݝ^,uۘef$uޠb_QXc  endstream endobj 928 0 obj <> stream x^[ˎ7 WX ؎7oAf ć!5`vc7UMQd%k^^t=~-/I_Y4geOZ] |[C)?1_^?Xg߿uS)Ygfa`m결kσI!jWEX%J_j&f_%;h ?ds%bRY7 >^BSFI6ǀCSoBK@]ٚ5${3!y/3clӵQ6VM]YMo \NpvڱCoTqjwf%r,0=G<:ȐGϗ1g|}{nZn `XmIX4=foŰf%zlbgH5@.t.v9 6+([a q7%!ކ׎TlK@NEIkrynϙ5]U0pgNb*ʺpka?DI@Iig^lf7#-xmDѵ(筊nNP¹$9Ƀxk%bL׍@o^K Љ!NPʚbl&bkj2d@GY{F0kTΧoH>*WHl6 +#ȘA}K4E(ՎҖF +Ats] I=M FkEDVCuëOOn9ޫ;Bn*fA*e?UluPr0V.܄:fnʹ| :+V0]湤j9DflՈF*‡ʭKN6Ejx3^XMJLFΏbOkjq1ܜPTey9HyFG'ar_~]%'32ac=,yt[6HԳ:c*><עK<;24\Uvm n2v`YhKZ`D{\~/17я9zt.'w`4.5ױJ3e a v4p :+-MP!<\fxVG&5L1?fKUɯwv7`zj"%an#T8^P!l\=pfg RI'$ï :Jy65$XĈg\" *~twCvk1L맦c%'t;='Q(N.pO . &0L_#,fAņ3×s!)).hx{Rq: ab V̆u53o'̛3Fm+S}aeBMqb5j('q28TU ?/IWv`x|0L%$&& LXޞ+cn'pvLRNYY.nJGWQzد H$0=n)RhaL #+չV2yN:|!fRrUߵȠ՝Q-)~=$8ń3v 8MZ߻y+S!ڇ܇7O2᪜@냙@R#2Qww9M%=˱%:z&Hs^&m+L'-uL65ho :B&Uں͟m;xىii^75{mA=\_ ob(Pcӎ endstream endobj 937 0 obj <> stream x^ˎ E@*()klU2q4GP d4c5dK"fg N^~yP0/#QDe,2~Ƀv-ȯEI2ꄻ<}FY7,}]-;*&`S\uv]ȉXuEy`op_ ٨D;H0[_'{G-l?d(Alx`%D'HЖhH"M@z(%Ib;!? қb۔n&tBV7~o0)6&גZ1uqr~M%hB>Qf ZJC@sh9O}EKlCZF6lμל9R':0 tʴ#K\D.v{ oК7rRX{:)q/O[sO+WWn<`ghڍw4r[nAxmu.3V 7?ʭ=9>z};ジWwMF4] endstream endobj 945 0 obj <> stream x^Řn1 ~y(0u ߊ^S/yCIHE"LHQ$BJ9d{{}8^q "N&5IS l<#\v:~|6=.|/)%z_.{^p+)<0dS6:^Zzr> +щ ZK$,'ÈoK ~*g#R-zwΧuZ\˸ il\`Ž|B;jqAMx=}w 2f.#mMDx>@>h?vo.CAnH<*b72/MRšS<9IŰ+fjP3#ιB*ٲv9c'4$2J`q6 m*P*Q)'Ә֫Ǩt`D4 gz1T}[*3<▨|bOo wǎT=8n<zIg"'7ulDOci@J0 c&7P}$6ߪFN>j̑fFxlLD8)?TPHA5 T"]Fʬ D!&<ޔj5V@e(h.5CjyF˭hWbI;BUՈ9t7CK*_vn endstream endobj 954 0 obj <> stream x^ZM6 ϯXU nw <])q%#, o1HQK.-o?˒͖s~wqnq9cf֦W6opw^߿l•޿8X;= _ &g|9, 헴- y׿@⺃XU-=)(K!`$!ٕ kX7 4i}6ٖ$إb\Cqdֲn[HD`xg"G 2"5"Ľ:IHZg|[ v#y1*{* : ȞǐcҡԶb,KdqW?|1my5eݤ~ xѹ3ѬkBAAI+rTߗ(;Vf](r/&o{'IQ Q+T;<**|4 5>x6 y4u*BjéJ=Z*^FQj;sQd QAYQ4F0̈́-4 >ԪS6nIk>A&`6^%>F s8$oi.+|܄c%\ rm魁\n+ F?ǡ0/[LmEb"!W6'桧o6:uBfROA"V/DZ^mi"(?C(Έ?ZLad~%6 ,ވ*2E@yL'oġ QqM4au+^=E-4Pk07BĚ;:ky ZRDg^zI&)Nvd3 V%fdk7Eϑ%W65 QHPVZ6tu;tfE@d zVz'3FZ SfjcN,($ V>fT҅E;j&ʴ,=KLWUDyUDX'H8s=3NsOAZ":uRAͯG_pX gJ:sq jU&NoA{Bss<,`.`?8|5kZPgDǸ 65pG>#?_IX3+}~qM'P\t]]c[AM?>~Vg endstream endobj 963 0 obj <> stream x^N0E @͌=~IU%ZQ$!q^ Ui2:d|uyVOl->  '}ą t}C mgBVHaWvљQp*!+2G5l.)/5[Ylp.д8TQSFN4l_FCORF>ܦ"UɎouY] a7`[RvidAw,ߡ#z> F 5iuF âp+pMMg>I^}\b2.񉷍5Grt[ endstream endobj 972 0 obj <> stream x^n0E ffH.nU7EA$~{}&"fkNEuNJAgGDVu4Gd#jBݣ Z&^ c<C Gڼt# igB;vlFN6:1@(磶E`vAAX}eT֢pu&tL'ͮi耐b˽Dx jv3˛ki$b]휀aWTJ5`dF8wׁ+Asb-!K y_N.i{le43_O%?H̰e_`v#".9I?(b ᰝ`C?rc[ endstream endobj 981 0 obj <> stream x^ZM6 WO4[kIHɴt~Ǘo#1<41[up Zw /5ek}j~ ~+gk:n{#,A`*ۈ td_m?3݄ɻjMz!#;؆琠Wڍ^U0>>aDyuM ~Բ.A/xl'}Fk ̐~f1gFS㉹_u0M#sq,p)=k~/Fy?<ckk.cߝ%p9{{qo=/<+s#X9 3׵ 5^ke9_`v!D_dZtlrjI61 c73wjc>W=9 /I gFCT&XY1*&FRJk%SSC,@}t\=?0 zxKb>g5XFbгlYvl f>1؞I 0uᕴ@WH\HlS=wQN%.j HFA"bb !Re] R3V܌7 meV؁0Ui4@U ; 3nkoF ~pJK%ϸ46wZU/|ǻq둾ghHp&P]3̆g]̼SSȉE9$UJiNl9ToS-;kܥ9YQQɆJ7SrkXD8`:>z^#A16k♨3.ӝ>\U^Qv d^#-Bw͐$"lo6&s8ȺT˛ɤ\eYsu/sT5$GH1*v3FnGmk>o@+tG^k1p?"g& cypGU3c~o[pd1Os='i; BCűtBBt|8V~M,WN9NBevϯtk:U 5c#Pa: *2-cc'4LI鶶|}M؅KO[` {S0 c?Jk~T(+zl99qKwk"8KM'PMzU8 }h&L&d=6Tzq[;GnOUM ]zk^L5S: w;\6ݗM+?]-v~*e}hk̼ B@ߤĉPQoJ)W|0d2 Rlo0SHMw@+`f\Ν FH?]wKw|僬C9c#ӽrV͔449k0dZ ЗY8V+^Urͭ+L Ԕ endstream endobj 990 0 obj <> stream x^W1 +D@2pM4"C;{S]#rȡIؗb1s$c:TF>F }&VG"<' k:9ga} lxŠ/tٟ淗]i:.V|HIQa'6 HQX~AsExspz@NuN@@%.o#xlV~܍%a ,%zzRp(?&tuNFyu/~/d[ ٯ켪Z>ZIKHmc ETb{#ڳkN8eMWy:@r-r+ER5N! \Ym |:@V tjU6o6૶>!fuB齦V7y=/tU}OI뒶%eykK֑6.^RUflB J`RDEF ]&Ƹ8#b۔t3c26lpm1נcE7l6u\^231kJԽ-VmRʪT _ӿT q6U[gȠ.6us_ endstream endobj 999 0 obj <> stream x^;n0 wBBRo0Mk;ud;Jx ClKG@V1SDR×B`x<.UÏxpmb{`K<~|lb7ysx^B3Hvhˏ燐p!xj5r>j Dek#u2 0LS±50Δ ceEw;jK"*2'St>!@(wUr8FxFiiI5i jN%q߱>Y5$X6V*JSR%,PSi]n]x2&\ "@7j`Y'&%xM(Mm#A܎˽!5 La6aԸ[!#_A=] endstream endobj 1008 0 obj <> stream x^n1D NKu rMN8CH1 4zhQi=KcQF 2aA"^]_D ">._p[~R 2q.'x| w}႓ο?k\tJ)׈mUY{50 =NZE1 >2~ݢ5 T[Dt.[DO.Ud\-YhcWa@ViL hB ޚ`30RTA]Sf sȝyWnVRlPJ5> stream x^͙n7z >v M FC H߾p֫+BÎ)r88KJMoXxz_wDkM,n!֙TcyS#zsYz0E)>BG%⒱!:TO%f˂< ˰C< % 0EPUq.ꨂYg徨d\(، UWa;ڇ,e!!Γz#Aԥ! Saު# 0`` Ds\HDaTFOԷ"hpP*dP -IфHJ&D4f{) 3}BfTHŒ %Qս YWGB0%LY`&ZLt"?FX!*BS(BτIn_]Z$ԯQV겳I[6qn!"ӿ 3&Qtt0Fgv : endstream endobj 1018 0 obj <> stream x^nHE ;& b @Al-C*RG (Raunkdiӧ4usrnrs/LLZmNO~6qJ7{_uo/t<;Z?;Xi#UϷ邙gr )D(&⌵_uDb ?wÏ'woq?VNZ9l;pObsyJmo {x1ؼK\dZҮ+EB\۱ I;l?(Z 6G)">}*PjL _1D91<ƻ;g&ri2[駱ԿkQ9ZU>#uҾsjKk |T`ig|sҰ8P31|`a>$V:"йҽZ~B; K m09ҁ0w7(mXaglPj'fhb8z wT D6ݦ1vB5 y66>H]dv5XS4)DՀ+ yMto5x5-}S':M^KuAMwg%w_̎ c@n{]S`k0 eE=j*_8®O+PNjziW5&so`:=N^zSn0rQ`lC$RPUߍWd/vQ*=k\w~EEn'>3)*$T)G'-KQiW./Ԯ֟ƥP{LMu&j+/TgUUGv:VpW+Vm{ eNF`VSTٍO(cu\QT](bfFlʺ '8@ {2YB)+Tj8[-R05t:VصVʝBWr'w[KKUrgt찚꺽P=RTn*+uPTՍS`t?85@QMW6~&zge}85u9ߡE3mt endstream endobj 1027 0 obj <> stream x^Zˎ6 WV, `g &5*YdVwk1h,Id,Y )"_oD R)|E/`?.J|ΤҮ=]~o_c{z*Ç{@ o*#BF;V$zq~VTql VrJej}ʝ/< (=y6MK\E~cF '8n6zpmĦ7;lm{#7c:Ojct^%}f`JbXB938<ۚϮQȐҮD= {G1fp [S7&ЫPZ/V+)@'H}-|"کμ޻HOe5N[EM:!κU;e'{(Pc< cH/%;+7ۙM9&rJm|D8O |oknG>|<@{OJXSʲQ 64 *e{^&DQcB5C= Բq ‡z+ΊUZ]|3Vk6Fe!Nj'$(˟py{ª%Z ԎU`58/},NmCVK--ȩ7ͅ^+81o dh:jeNCkOi`txU4y:L}K"XinwB]> C+,hrHԪv1ҌsfG TL1&O᙭Y+f3Y?Ԟ1M"*y~(Ν%m; =8zyϵF)GQFԡ;2~  ?*F"F.=*^}_Z 鍚.%b˩ՈChGx=SsS%Rh/ "wQ8uF_T! cB*wlii}փzޮ ?cBr @?9D+%ELJ+7YRoSbOIDo6g*ijG7l+vH7j~V{}omzam^^ !:Υ{_ʱz%vgN6Kx{My=o%`eA;̽vSo(Ѿ;fCuZa&OZf7ey>gwV)E~a)> stream x^Z͎6 )Q/ (ȶIVڞגHiZk˿_Ǘ_~K1X J2|1ڸ|)'YWxVxO9}ro_×I/SyOXq4/DSD1)ܼKӑ_d G|Co#5\>R !ۢqf7 lBl8o3ahĐb'5uA /Eɽ9-bjēWIɽjL)y/&V+7[mIK8C#N9WY(&MHZƵO84,KQ/ x_?woc)Wx:' َYBo.ztYf, Do*ySRZG~mcy^Ff5)IߡeLPiN1sqptX!åC=jٯebm:j#ha er ߦ S4TgJҨ hIG DBX.[FAځ[5bKvK_ZAvlIN99w!45wMue2a|105Ѣq5ɩVU x47H,9f)?( Evvp0Ma_8$Wg֚ͮ=(UDP&W/ħ5 hn^{bƨ#RD9=pу_ E x^-tM5kIEK(1}]M.nfSlbwy ^`2jfsP W8hr/Y8gq+\,&:/ ĘKU-m;;89h2ۧFլaTCꩩP0(k6ُA.y(4eˆlk6CޞMyˁeu`]u%笱嫲_ˆ}2^pzEdٓVn~VqGg^>pf.=|QrҗroUs[e8-qz-֘s.pC1Kh3 CL~ 7;M/>=ˡsբ`s[#mGӫ9cbZ6\6u}g/ia 8A6^vZ GwV6_Z̋SQ/{Hݹ<¦[?#$9*XǗ̏6 endstream endobj 1044 0 obj <> stream x^Zˎ6 WFtLgWtۮې(K4W5 d4IǑBJ|e| RJMmMl<|.I}Ii#\\U^SJ[>U&]x\ .: e\":z#VnޜI5"_a4:7L[ϙ ``ϡ_藓:&fla9Vク-8莪~+ȕc[Ps+T35|63n[kzwLj=ߥ.s]cKϸKp!;1 j1 {qZVCז҆ u`!Oywө,Y0>Y5U@rq(fi6|۶ /`sXnI:.DH(C?:W(҂g"(SnbŬfFUf Tz]S\n {f\za`0  );2oHۿuT"&QglR)،۽WO-έX̚}  BA;K['t4tb4}dQ#vehX,DfR%Ƣ\ezb"2 H<@zZЧ'{W4-ZX+\TB{=Xoώw|H -`!=@-!hWU ]$@ ~_m3p;`kㄵn4]qu+VXNyFh;TFֽSJHFSG)hjԺ+5z}R%ڥp8Р'3vP=F9[5L6_x2lĕѲAacnq" {{WEީ1yfц{EVVDG; qVuWKsx<pGZ- W309IͳzӔ(F +a]DOd[lխ>1n jp}nv1krT"#Us.Z2y X/]w~2lT<h m,(X B4W˚( 9RtWp#R¸ xf̕Laij @>@K UDЏNk sKsܘa_&( G]r64"T=j*PT 0VSebn&?4mZ\VAZƒ1#8WWwk7JjX#QwT&p<%S" $. endstream endobj 1051 0 obj <> stream x^TN0+ۖP% -W8Wfm*k([O%lzz CVI$X5|(?LrEѡW×z{ +ZPP- O|܄Z7uH&\&Vu*4,dcG|aUȱқ:H '5hn^\n9 yk ޝ|Y+ER\$Ӗ] !Nhrh8wNƥ*ZYLݘ:VӒb Jj6W潖"+H2q.:.4Y'8 P4VWƃz-kgOgǵ20{-+'ԫt_:8.젆vR=;x \Շ{j?l9 endstream endobj 1058 0 obj <> stream x^n0 y @5}P bsnîirLgᦍɟ)~%kӟ|~|S6%[t=⏛\wŒw{s:R[ |~q{}G?A~i6` 9F dzhRCo[C6sauJ/@,k&]A~MS6 (Z "v:F+Mk ЖuEk Yg|eTsn(R҄`،%2>ZmLj`dTz06U2"s׊F=r\O-&5Nc LJwZ:_iJ#[ڠ07V&k?h?b|LyGiy  3lR3ccQT]43\aJ`=i PPpHpV)\q8 Hl ” ^ץI:UtK ´ n3ܥBm'Tz '*M:[b(9gI ?5..^uɖ$LW $Rrm ¯;4z?}lR)T`vbK܎+o?ʸ endstream endobj 1067 0 obj <> stream x^Yn0+e~E$MXVڞz")y%$ 9.ggwh)ßAnN?_D R)=~j |xx"\v8~~x8)mk3\5<%RO_|W^v)ٿm⏷S6:(Ed yo#lK*x׾ w9>-UP b9!_!#>zN$fp<4NY’.r\턏p"}\pqGqɘML!f/,,sxؙQ!C̙}PYx `-qXlީf_, Ir GU/]aڤBm"Tu*%F\*?'U 9tO޻x6sa,ھ!˸mQiٞ* glGRhCetR2o'ߖr<9Q]8la(p}JaY"?b&~^T,6ԎxDz}ym* Fx;IJhESMS6XvwʟIJX`R!,>#PKޥWqS]U][C}<B5 _ŜOXEf)ŷWQi4C=Pm8fx6覠r= <8y[&Gc*N#|BYW!+?n^8ę \?ҫ`YC[Q<ǿ+jGZҒ,U&PG| endstream endobj 1076 0 obj <> stream x^Vn0 +Q)zEh mk"1ײabǡP@SuU)1V_(Q&trv Pg0Қh}tL)[LW: 5p?o}A+?t:8Z|FaC B8~RAJ_rM|8`61.k&*K{N6('BqB.Zq8j uGM`Q3QmD_ U5m.%E`+sͩTi$Tup\{^`6 v&Imv1id Ʈ2>tv:T]lfQnt{W} ٵؗ؟X,Fv(PmFȭ4j6k&C.}cOG&*u>T}3ș"N%Gf^i}m{r@dA"~~> stream x^Tn! +RTEJҦR{zmOkBFUX;3Bܗ#_WN}uPM.8/ SύM('Lsü1t]5 [!O_l/`;cz3ސHLwtTϤ"TCf݇BF.D)YMȷ$QjlyVۡ\eTzҼDN._@]0JrGb!Rs9f_jI]alڃEx֞(G?t(,Ýs. X3a|i,\?< ڳc T3-S0:3.]Q%kis:qI6U:쩲\OYQumY]@[NYR:}i92'H i1#PM]eN/LD endstream endobj 1094 0 obj <> stream x^n0 y @T ڮ)۰ve?YR9 Aa?G$"[P_~?](LK(A _6.7 3'ޟy׼۟)%~K=a#؅˷˥А4h 22mt|j%j|pjM'--P'tȞ4naQۗYM1 3/@Xyr3̴.Tr.8F96cg5fN|"-9`8bg&>ȹaV7#,CHJE1yAc=PmLr|eqN;8`ۙ@ύJ{]ⱏK0y)P5Uj6㿑6d}iٍX\ mH*8:'t}t mDc~փp^ɩlϫ5Wv57oD\;xWj;j}]h}J,1)3[/e̱I~߬ÅV>h;\Љ:ycahfzȀn]kA~]wxʔZ endstream endobj 1103 0 obj <> stream x^m0 D @q"z$ι.'8,E TYӴ̋903]>펕,4cHXBs*x 8SYJs6 (?enKuy>ȕb-8dGRCfzgB@{e.,Hd$y@~'EP-yɷ f )w߉:s2}Y endstream endobj 1112 0 obj <> stream x^m=n0 wJJ(Mڂ}tmx=R>=Owև1y" 1>!˥'YgE=1kv[])N$p@|+%&3YmI9Lm`;X,0No*Ώ?d-?S\Wr8 >:x59I)2aG1SX[adMNh8X* Hg endstream endobj 1122 0 obj <> stream x^MN0 =E.0'P3bFbClaņ/xni0TEnRsC܋1).˾fbnxv;΂dQT)=%HD VbZ+<ۄ8nciFC^4hŇS8Y|AB%->q jpcHNAF ZZiW jVX<, {8ss[/tmMx>%UG 2)zM;3w3mS_gJ62=?sAgWl[xUˎ.\ q ̓ endstream endobj 1131 0 obj <> stream x^N0 {8$TN so+x+zD5E^gi@i?y9=\I$@tf0h?h0y~GbC2˗y{W̱pptds)BtF֓C+M˫ꢷ)90Yv&l  WQzZshd++[Te %7el.뚋hF[%{7gKr'B+qsa!LHrWJt֥TnL-&{i`ѧ?.im&S[ye.pC麍2V.9D:JG> stream x^͚n6~ >J@ý!uQt7l VR d,E Fк^JW6XeFI i V.zr)H"|಴D?@s 9sՀd!%6IpZNALYn_?޹=whCmb_ 4HhN wRyN<6Mƽ-6Ҧ)/Y$ 9~AƆj;$6&o"KIGD`dl"eBCt K6PU m YlRih$~1=xj#~jԖU=g|R/S]]?orK'4oǗ]nݗ?-6V3>Mn7-_?7v#Α@c~?dW6g,iX92@UOp8~_Ubsw/' ir F%&ll}$ג/ DmmYchc+`Z>S*IKo|[p<|ڝ}+;s1< xx+!=.Q=MOp>%-4VS{XN|J2*ɇIWB->Ôha5J(xͅXBbR(2 % P E`ӡ(ϜU `EN(H\`+Q`'Q ]Do[Tf 6?.]V vBq^ثb. P:mt1ić\|ss ۹u%ST3xŇ:U0ZN+a7 Dc|(?||(3L C}*|Jb3ićJ\|uLN|(]WW0%,U̫)aϤ LsI]%ѕ_2eDqCyaJXWSIc>Rq *b)g|_0%,Q\OI #|&kp1UӋ󩁜\SUuaJXO C|'139ӺGη։O9/$U3J SUsظy$L+b ։O9ϸ endstream endobj 1141 0 obj <> stream x^[͎6 Sגb$M VtoAN-KS_,J2-h<*dG")~Z)_LlǷŋRzysQjQ o.o˷t~6kO??[ W'!xM|kҫ^vzqkV"B%@;TJ$h[V;SF\tB`QMkܸPY C\r[q{ fVbNX'aC(=؏xx!ljqV\%Zbrg`Jh8v3c#.ŀ QH[7|>0 QZWI8>kWX-k~{ )/^0Պuu%[8 |F)x UYF9 uw~ً n*X. mI2Z8pbMTš*L6cCQr*wJ6'B5N>ȝ/4NoLz !wDz' !Ѯ9=~AT0_\3'fbx:pؕsgVΰHaU=>jxUZ5 p]3UH%g*O:DOY:摰88{ ֓>t JCקp.-"h,5Mӽ5ɉ4*((L6vv^榾 kr(M*&~>ev\Rrd9Wh)o)*]R*}a2پCi+ [j G#E F<!W1a`D\} gٻLSS %80̰+[kģvQ@?b9sQOٱWu^q7cl8[/ݗzu+.{^r͑dxGZNW8&j-]o I=\ J ou=y. 9!&0!M;dB' 6 imƄC$վop<o@˷r@vXMֿx_*8^~{!& o'Cܡ2*1e4knp!bx}:fLY3CX|qORuNIQ8bHg(aP/[¡7eĮ2q{Ne wb(o\[bDy"Xso}GսG{L`#3łm@Z;m6F1Kt ~v"X|a13YbK9 sz.kps"Ycj"Ys1Qx3;n3#7[FyW} P@L!U>X4d=q,8#(yXcg/[[w1`kU>^dzt,|; M8բG+ 6l,݈[4߈ad?4#-|CjzbJ -ӌ Xa1Ig9$3|dr'i0/4vݱUأR1ѹ$uCIډaTLhW+U46dطvn0@aמ>_X6mV!oτm*6: ?HH>A!w2 Ƭ_` endstream endobj 1150 0 obj <> stream x^[͎6 SVտ,`)܊^SZ)#,&GߧXc{r+뜿}ss7 ͕o^Tm}wWkSdm\Y<={௮}w~w)oI&XdubJ4. -[pP::"Hn tY4APy]0Clb]3l&,ALۂZwT,KcPsD ݍegmH\0d &Τ Atk{jB^ҁG&dw\ޫ7>b\{pnhjo7|~rNmLޔݩ8}d.‰7I BPsxԑ ޻1K8"i Q˟eb\e;_QkQ1:3gI^6) d Ҡj3%D9ںdxN ̥81Sfm2gTMы3 n )Azm>-xkeN=u!zS]9e1eg(ٜ Xc,/`Mqa 852F=A~ [LUS{{Ī俄fZ>@L5uz ky.q}9K88^('RrN\ "nm*܁R1'@L/Ao_`ӹ>j òQYVy؋yoRҁ7%I bǂbrq}Guzܛ,IW۷^h֏[ {s%ӓr-쥼fVה0AfzJ6/6xB=MnXF?s 8LhQpJ̱;;r^W#rÅdbL]vhXUɜbU8_m,?sƆ^8mWG Nkҕұ.f *+Bc~8Kl^g_Ң?ca}e$'3\`-OjT**403Pܺ+K1qf k^|E ͗ eG\> stream x^Qn0 .@a.]۩QvI36tP803}=i0eHhBsb3sIœЀyf. Cq`Aߠ+pЎT4&M>nqD0=V,ui?Qj֐hѩ!߉܏Izeќ{t7c{܋ Ic5G2w endstream endobj 1164 0 obj <> stream x^Wˎ@+C,e7H9嚜t53 ,`LBm~RO'߇o-vA w:IS?%i)Ii#g}I)SU^;FW`ʈq ;磰cO6bp w"/C~Ϟ[x6A$}lmȶ'>3ST#]p":׸cdmbQE"c JG$3 )5KMy0!sÅjhQC T0"ЁЀ%d CDcc20e0^2,|Pά"\efgS6fѧZaEH ]R:{W+Cơ\# RkڷɃڷN J[UQUPy0TSX˟Y ]6frYZ/䶬(CB;nAM 1,8989YHyENs-z;D&W4;̇?i,9ȵ4ZǨ w`)MRšD1OeVZ! xzz@QA5Cv#nzdh#2f>7}(+bT 6O,q-T,I2 ll<: ٰ~n?KDE.ee,p_\64lK3fze`.aWj}b?op77k [?g`oMsX7}jo7)GWFlF'Gl4lPO C}4Nمa*n*=> stream x^j0 y @<ɖeJ`-`ƮiݯI״`'OEܗ)vxX\5spcGxq8/>U7~QXH bE< ,Zq񕟇g {<|o.Gs\vpI2&-Gz%FVB6I )VCStY)f_*tSZ )y4H]ZDY# PF̐ mxTR/~ǜc+u*{*/D#֭ep̋sb^C]^8W, 1ZK;}f/c{ endstream endobj 1182 0 obj <> stream x^Zˎ[7 Wd$@nU6EIJd]ɾN\{F9r(.\?gt\>?||R+>3>?އל3O۫F__|T4 b*h|{85 j.>$p6QYT5("oײ!/?wwPjRVA A1i'8v*N=C0=&Qj@Le"K5!sdurc+7MƘ}q0=#8+cUbK:S-yN)TE ̛Bw.y-qE N9>8YmC`p8ݟqc{փM)^eam.Cǚ:R? 4Y6Vi9+f0 N v5;*J WDoro(=kCi|d!M72vbPAմaw=L`cUn.r.-Ϟ< <ʁ7ڟϷvnDfaz\E7Ǽ}iҺ15*Tc;I>`07DV Ţ)P!wƖotˁk &oΒyY ڬTg XDuqb*>Y^{⎅QU/MHVe,\sY(T51vmRnįudzUr;rʶ(nNw8VǬ=1עlR3hzRj Iy,k[PAN}W+8WmiV=]l7hM~?>2V T,M!;E|GhnSSئo(O&jwH> T #hAɅ 橷bU)=oKdb-wܕ1WzXJQs \cU[QqLb^"޶b[pu^n]m17f: tj$z?tЌ endstream endobj 1191 0 obj <> stream x^YMo6 XV@fȭ=PdC;]#83(|0,.>_%CZ]l>/ __јPY_>|Y~ylq?ZO^o}s,Zs\zNX=- Kb%Y0< 8m=cƿ}hO6l_ډЏ)|[ %4@=_;}q+GrN'> _/:Bc!fw?C.( vP*qv~Jp$PpW 0I9*թ A< K8>U 6ftzxt\$#d l'tĖ)x? -xb!ѶO8NV"t=%a{#@k6u%Xb~ZҮJ-FG) o|.#Ddf%aPCdob~M'mra*[l=j=e>Ҳ}N/v.zN%N~3J-S<imVzNvju=:hgAsI4NZ!B=WZQy.; lu{oc} [n)[J_PnKEI[`py|Ri!= pr0W sr"?Px#<L8V78dmz7+L|#p|}hĺ#3@6>ݚrH1)<~=Al?.rqY$XhPPG#~ƲM@b\G;e-w?/wtrò h_w}Sr\rXGOV? [lcͦ"Ga%&^6P0\ -+rևX ik^s9&Y1:C@&ߴ2Ίքg}t']fܪCp8zXlb~(}67y endstream endobj 1198 0 obj <> stream x^Vn1 +Q(z& [k{_ˡ%m]ۛ&02G&KD!ݿ.z><ɶfrΛ/ &b+91?^b^e{:>ZcYr҅LPvѫ|y.؜} eBb <50I  ItqRT!]vGٖJ#8hd+b3W=b0zBA#LX)X穚M%K h +}ݪ^p>[";zYsT"H_L;\FwcDM^:ɖT8^fA2p|@bR#U+:$ mDoe^<@,եVhe4Bq9c1ݭzͶtc| B^YA?ĄW)0vxtW9|d<:U lN #xN/w .3ķlGS,OlBiFnrpߋUwދ̖ gÓ.udxѡnvy)=XvzS85Os t¿(˿?OC$S\~=3@ endstream endobj 1208 0 obj <> stream x^Kn0 s ] *%Q/  Y{WtۮzmIe2c!d;#EhPtrT91V-Q@F:"=hOzDsfK!L2H~i`'/Y=ӈ˻6NhMWQ!i+%;d^fv^33A0ȓ|a<.+P;E2J6m-y~AFT(KhoE;e1ʏ,#sVli#:>c i[?9 t0ƘHA))9FW2ir*&g ǠSM9!ܐs{#hKiѸ)e07U`{lV vӱQJ1 UYr9O`4;#! ++mh.ɡ}3ց6.~1ihZߍm<74A[g/!vVEcT\k1uƉ]1R-)7&cׅ>%TQ/m,dq55s` &*Ē^jf9[c>>z_4wƞCxlk:`u vڈ endstream endobj 1217 0 obj <> stream x^un! { @ RuC&RNJN]CSХQg^?Ƕ> stream x^UN0+~IE-W8Wv'jSZUޝώIRT8axJ*Oe(Ib3w2<'/2[x2,CVb$'6\6dVrcΦ?Y!i&g?2$:c IF/Sfˮ])SK89mߪYcR46}Habf#LuH5Sa6X]RVw19INִ 9n҅{0DF:Q<vS]ә5vb;$M!LRMKN!ϝu^lJ`u*^h1)B_ɘu..:Nhm ]%1=&N:Wwq f^-rzUq5K ̂QwV3NdIԥ wAŵ颼i{Lo7ttv?Lq endstream endobj 1235 0 obj <> stream x^TN0 +3vĉz`H{C\_64 m=??ݧ_vᔝ@$npPH2Ă/Ycxu{EKw {RL;:}|@3bh&dg;VRfgevwT8!S^r4#9li%[䚊P|,..өrU1e*)I+))(Z g°uRmbߤLE.gO\?-SmA HiϪ|Xܕ46sg5X]l oO}%}@ :}AȹMgZںZ峋C6m[Mu^NE㵰s5ۯNŤtŮ_qywpc endstream endobj 1244 0 obj <> stream x^Zn6+N xfr | rMNsRDRRIlz|U,Fi4|Z~oO_)1vz{2L*j@k7o;Z<>9ӿ/_ FOaݿ? WTJyG+B%ؐ a/Qb(D6?!'t׿-B+4h¹ ++Ԝux^c#/fr[+,Dac:}9#k"%@%pZĒA kb.]iɊ8߀) nHA1N͋`RVօ֋a!1霧5y: 5(#CIigdfe p0E\.x5۴&X5G7 >:oUUCTO ;6AzgPzrf^SS[k[g,5wIu8;;OfkJaXNJ݌ZieT˕VՊBLm5=Y|P94p񸫆r\es)`8@E*sji%9LR`*ϷxJKq5 ՊP 6Y.tbrǽ~1TyO q5"5 !+mٗpLj]E螫uk: t5U'rڽ8W#gZ7egk,#-J4G`wN PIKj'55meT#د{8SE FrY%vE "E/#[n!o#tCȻ6|'0~GwFWML5 ryѹ˵1̷5j8krxl5:G3KM4E]G)t& UB@|lg%ǮSt*Y8)s'lG4?neΫ̝L1.[Y(/|r[Z }UTV{|_&3 kLOQy.CzXcsuzI{q,6DбoYJuv3VpJw,0ZJ(ecyٺrD]-'oNKa!ֺwK'mb߷NS/aſ#-魶hVqr[l诓~b??wߩjCdqyK+ d́9-:D}ly8osA0<&Rc~Y"j'XSpm0jE9."{mKG&NX=o݇jm Dt 6({;'E|ݓ%6hg`Qk5DXۖ·DIy4˲r6h7(x ;90& /働f._ɎV_F+CH3:1r90 x&fguu+A.;kWq>XN#*fiK:VkKD֚ endstream endobj 1137 0 obj <> stream x^͙n6~ >Ra^Z}3|HEa }!J hM>xLQ394E1*[:el+AEʦhPNK*$ C8Cp*i+-^eSAʣE! 5H =nZAU:{_'QsQI7u`J? KCFAYkdZ#`HIY_)! 4#(R-8dP\l[=HQ9mrZ`P4Z9c?D)ms8䐊앫\ԥAيmC߀ݡ@ Zyq)*oA-06(O.,/!IF_2! Ʃ%~ׂ.6P<.,6 h9[gӀo] 4W_2\&jX|q_o֏}}y߭,UÊVֻ!\1z~Y}^V|Xq? AYc#>%SI?=|tCng4G>G[PuSܜ&d7(jt˦B?*|4lǖBl v' Ea]`s x }J]}ʬ1plX;)>HNVpjgЏGƃaϬw6ΟGW|8LW|8K3N GŇCA0g؈هJW|T|(3N SR#T{CQd;H'($EnB1^1uvs7@Ty7)C \<.Nc'9e؆c+OiCV|jխpGwoNv§& >F|.gW>R%>M|(xC{O!{eC%1>F|j}xIr50>\ &>oCʯgKõA0g؈*fܻN]XlS3J5G.*>g3N Gŧޑ\pq}{ӛ3klħ^!->\ N8?`[1P/+>*)S/ endstream endobj 1254 0 obj <> stream x^[ˮ6 +J貸vMQZ%5S$z}crCo?ӿw޸a_z3.^;eY[!}3,:+?~gt4D;]ervGFHDx=Ąb? v# 8=!8xdKnZ$W˪8Ta, a~B5$P2WBG5pH 2= XhFA+CsV8Xř'q!4Z=[VoILI0wSQ5HS6R⟡|N7E߉-х[we{ssa!"Qk,ajd:Obbk?;KpS( pz_[!n=!h/n<0דt`?-~2p_SP13NF˯F/v? ׃)Sp`ēVHXn0Y$ؠmIԍʤ~Ѓ)u& pZD!qT Am$H lJAan.g7u{7޲cXj7 tP'Б{>(nAu]9\A79RHlcLiG{#m@<|pyd<@"G[P犹Bga?>ɱ/ [+7 } Iu 8G`~k5nQ@!)}0*{(r.ilrH<`0Y~x ~`N!27` 5뎍N ~{>nn^Њ΁|"k)@q X,IGŽً 誟}Wusolv0b Mm4$:"OXO4WY?npuEM\!p"4lɌ:outh:2ϳSf8e!/4gKCXDÍH:*g5H ppsd85TauVE48qVJRvO/ 0Hk1y)B$V$WJJӭgu ";?쭽<}d"65BE* O-O!I㪯RyBUQhOPtN%X϶+TB{]< ;2ۻl;7m|#2feٍS0JV.{p%Ƴ {ImX8xvj-z 凨`.2~NS*]XFGk$#R)roTyp"au4V]5@.{^o]7vFo\ts\gӉ+sOe-8 qQQ81.F ~p1V^&Z&e'^LSRmʟq;+Gw]f-¦SP݄]%Ūfŀjܵy/S7Lc!٫:l[YõhN՗7 ic |{tMzGGГ&עPu p[#okX?Gpu Mϥsj@jeu |i|[+sŭ2`irƭa(}-Ts6CȧyzLud@JXStj;ZuzUb{Q-:V;D;hyMKˍji֡=V3R^Cc$cc lج^No/@z)+G9襍#@W:yCH-Q~#?jנA鍀=oulҗW,oA4pc5lMϊ^/zgoJ_BiZj-y TMÊ-oZ iQѻGPSr~m"E#A\_lXϹw5(y ;( X5(IBcիq?/U endstream endobj 1261 0 obj <> stream x^YnF W 0`o9䚜אTҴؒ<`ph\ ~Ih1~׮ #Ƹ$;Zw+ ?{.%,B1YDx8{q9\s|2\ߩU܁XnjU$@QIczۖm;Nl&q0AzJ?PaXJ@/I&{#p[4KA9(d8v9{z(R p^IIFr9v@ 4v&B`,3yIsC5VwtT@4 MǸOb=`2g笭"~b$4gbh@+0@oJcWBiƇ$] Ē8T܌Ur168!bTv|IMeńb7kë 3iM5U s½p 4 wM6c>`*#=- V0DNՁpl@|Ws3m~uTk9r|UD{)¬RTA̩]0r/ yo PȚP"=Մ9ezZy|LW\4'bSwH^x枳fRje.T>D$'Y~bea^Ӡ^$h'JYED 1xRR^WpCo}Xh]D> stream x^YɎ#7 W}t} rMNkHZTT(Xk7K?/u+lnmXmIׯ֦dml >|{o\|}/“^O}NpvIپmRlnz==@—~V$W&V\Xt;l˲X+;O؄ Όh'$Qy @ Gt{C*#v`SeDyL)ydĔЭ[SXgR#42 Oz9 7k3!t]Xq9*bI!2-s4-`0oZ>pMޔ"V(چO5,^`'hMJY/R| HXBXvNQ'\6.Qj jJ: *~ KDc,4gJ#RF\ JA >k~s"}J-G!%N*Z3 {7i&I1x z5Vx$TE=0NmZs1pMZvZʾ\VsT/_-kggRTcs3yw`AaFdtTLU? Rd| J=6C0 o⭩%)n!B, GsAm58X J]&fP U-u5n|xX;o]ZF $d Ke?.Lcɱimb]H&ƤԹp2/3hطƄ 9rEPfNJ٠n#:s 5􁆲NcD.Fck,WBd4CXO-0)I$8ŸR+5XE}'74-!S"ieя!6,u!|EzIR ]bm~;IxD I7?|^ۯOo5 jqIW_(6&UdieR?_MZwloӂ P}O҅ܓ7;'IV<&(/Oi+8{XO"CM0$yX endstream endobj 1277 0 obj <> stream x^Yn8 +6d=muH(2iw 0݈I,YVZM}||[R%icvw3?U?p/p ǷR pW>AׇJoN!fe.[H^ 5j <د3FTôn(ZX+P=|4R/o}Gz0r$&2 x FC̡v,V Gb!kwd^Q!ٞ(AMPb;,2 ͘xF@`̵\QSR&zue{B$tm)m>zU"fTXpB~BE̟BONV!r=KTyZnp(8ܓ.Rd2 V]2کrϹ+;!#"G.ET |^ WJ "t'GHFf~ڥ 6*Ƕ<*I9:HƉdxNv!@1Gˡ@Mց_4@kDi;yª7>Z pԄyNډmD#}ç@G4!uZ֎-HRfޱ T{YfrRd84^YzPĢbC;阇 IFwݢJZJheek)؆sUNKCky: 7Mk`8Sql6f  N|LF;(ЈP)MM q 7RI6> Gs3cDOw>pCN'AsSnKc9fjzd1JYy'(i=xj݉6s32do3n2bOV*A?LC~a@GRAY9.iUQw_3M X}:*Q BXn|T[\%BLbw^pٟ{Y_I\}Lpפǵמ'"a<%"c.NbioЌt2!U}:NTfUku}%y Y@ -gBTʯDv/$rISy;^ԋaHMɫX{Dz#+n θT_cUR=dxx^Fy^cg+ϏL]w2`0o?v>=R nU5ԳHf_$?fbYk^D(IZܕ(j.I'$^W >ONwPS^io\Nv.7 )XٺO]W,/QԳKQ_$ 3OU%Qx;u_Aa%6j8ψOV$ EZEj{XRmb|O$a*⽨ X%xg "7:zIU8e/6,ۻ@}9Ry- OlGJi'ZLdDx OUHϊ'k< endstream endobj 1284 0 obj <> stream x^Yn6 +6)nU[R)M3bLSZc]^l>ۏӊu/XW6Ffrg'kSO6Vx6xO?[kW.Oxwp&'|ǟ .yvƶT)::۷l"g4ڍrxhn{ҕdMzT6pWWss#+6mKy[s 1ySRB|S1x2t b;aѸ!!MEh4G#K !#PFA@~i51:!{lBҠRS3%Y \d[#fT 6FqŦ JX_1Tus,ٛMsE@9F!6B f4mqdO.mFF^Ȥ&XYf'54Ri5͌O־:S[c;;)+3Jbœf8OD ; n!~Ʌc2 IH}Ɩ ׉5$),(JTrx[M.N"9;F LZ61)N HWx^bkj4>{iaSw4ƪşrw>qdz],&&!(z#`g!!=vؔ_}0>J̢_[re T76 e 9[USjXgTٚM"/RB,:g\RGz?P13ҽ! M3։$Z \,ɚ'Q nk8EUur4K[)*fG#oRCLG"ek$9c ޔG1D찓ɺ 7#e1A8#dĽܜ(ƋGOP\]zl {RrChbd{](Pr{=DfOa77;Urdt:VSpUȋ/^go$=Br.v*u{$%Lo>S]/Y#_TxgIȭgfGP%%k?д.ߕkڑ0zy*7]Pag(_P.-p\ Dn'Z_W\ED><7\(^-uƓʌC Vۙқ{9o5O96T<ߚRJ7(.P#blOr6T5p̾~oF:*iHn[^ )Vs^m)V:wߋߗ䜮iw&C}`=s_N endstream endobj 1292 0 obj <> stream x^Wn1 + qZٷ#ڇMZ١8rh˟Ev_[^*Ic,bVQ{OT(//ZGWg҅xy.PLHҕtuQcB&5X]J%m9jK`#b[?WqeF-A+Kz :jj8IM*9/A֎\"Ve KeԭHF1NnE`!u iBO]72ئIXEr1!e B ]_/L_xWP곖O*q!,Lԣ2Ry4̩ Ӿ5$.cgC4M}ԃV@s#YUeON9gFdS]c5cDe& i˃h4 TAV+F%1#F?&`.MTbRF~f.!OWU/B9lTXKUr6V֩6Mwwz^m^,i٧8\GS_'L4` 6C - 6wm4z$ˆGEmXwȑ1:'z{Ei Es.&G?71S͠qA` DTMq .Q<pSCe3  6t^&G ։<bju[6_us;Tڛ3MMp KH.gf"ݚ?xnej̖+rb{ݟhÐ endstream endobj 1299 0 obj <> stream x^Śn$7 ~zk/@` 䚜?TKT{)U5`q$."*??^.oyI$m]^̢YL*j?*헯˟h>{n?ǷR ^ \+W#Ke+ݿo?^q*%lzeKYy i (?oQ@Q?o\?j [}vτ׉\R؉* naW 1&.ԭ݅u\qwi6mP1GfnWھxlےl͆Ы19JjlJeÊ|LIFnOtr#&1n0!ث1Fk,1^g?r~Þ;1ST9*Szܨ{ѫի5udf3bBxnsg FT*qs\^+bl\jM{ۑ`YAbC"V.)yr- >TzŇናN,d3/ГcQ&r( t$ãg[_QDܲ9RQօAucRڙѣ ;P*LzwӬlW0z!}\غ[6*Z[o{2Wד=7y2Ų{+iKu$ءfUpDc%k+FӠh5v&cũ g*MpeoQ@lFwCӳΕim,ʕ4:ݮM5'>nOkCRhЫ߉iʆ(E`Q`P̄*e?ba~fyי%VpSs^Yfg{rih.llIARBzLdlcz+C.+xE5٩u* VA]X&I0MfF嗤J`ujMcUbDP70Z􇠶Jk`5нR*~؊PR 'fbg9yru {g몤zcǒ-2eu8U\g]iw {4qWU+sSfk{|Sg LElXܹ"SN+ؘSJlg)=#_mw||B*aE2>Q g+pyѽw\]}_S:5Y έz-d+R0ݳէPt*>+s\? զp,*)ҞrmOJdjkaWJj_Imu,甶( endstream endobj 1308 0 obj <> stream x^͎6 y[P ,c[k{(HM;pI0(Zi/\t|]TN{}1 bVQ{oT_^E\3\ ?o9g/ 1pO!\ˏ^~Dx+mͿKe5Nd^%Iy[(4#>){"#?fh¶CKj:6B-/$C"qoIS0]13gStWM! z)#CSh1[jrbOK!6&p} 6N24@BN 3w [;>SV:uC\-jYo3a.f|Xϕ#e.$s^( 늩ys/p3¡Ecjg/㇔\a*b%]6s8%؆ʴ@"vRVg nR5AMXqK$ybT%j-&[y3 uMeP-*yiߵ^OuKHw)+B -!%ƕ vLTz^лvC^M6j00WnԳVEEs_:َ [z\uN+o^z1oq,L>n$ub¹Y TU"'kCCG|Գ>s Z:x5}c=EE nBs%?n.h^ukkrkS 6@m%nMglpT[>*&øqij}?L@3fWJ4&./Hxeb2E1}(bacNqQ;ΧPBҡ1nDD@$Z)xd"hTMTٕ Y3񏊈qQV wݼ/7Ċe◮X{p)R 3} DR%ls¥=nseL/) IIP$&&ڕFOn??b[Jt<<^r 19#I{RP#n-Ǵ'|+(5^&q9a *Dɤ9 ~t#SP#N&-8WJԺ똂)#4((#3;HL[0WbBN\ip]CrrQ t _D(d ݂Nu_!=HG1Sw{ۮ endstream endobj 1317 0 obj <> stream x^n0 y @Tђ, C[`aK0֟vjqURԏG}4(i^U)AM(? =85U?->qM~usJ \~ '+O&$h㏗_uNb1$yk0_ΓR>r-qz awt,TNo)EAzHel}SUyp"Tkq;sۃ ȃaA9:U(xԬSPVM."V T}aTi/+ fs_s5FL¥ushϹ? endstream endobj 1324 0 obj <> stream x^n1 E @T-8MtYxWtۮ/KGq.ː%"ǐ쯛þ|7_^)rΛo 3#?((^(VO{^5}3CG;^ek}D8w릳`KwѺIHH-˙Ppt}䘎*Z Vd`?CO B}>TvN (+hD :K]qhגIShH {˥O6a"\" PU6 wp#nzջ˙W5@f43ޭTu PP]+U%g})m`Gbw,[Y*aێ.]gEU0 d[s>62L\9j IA{u9ڜp|h%QczZLaD@Zu%f8s&XaTXpfs+ .f]QbLjpl5]o>i/O%^Xઃu>(>Eӷ0{)}弃*nhM~wky# K}zu95tNd]ώPo X^ endstream endobj 1333 0 obj <> stream x^N0 } 8I#Jlb8W8qRZ6Uߤ/vEI<G*\HI(ibNUzIDlVӮ֊ziDhK#:? s'r+6o|:F.%05<Ö :(hh5g κɓʺRnX/7VM7va*795,QdJe 3ivZf 5 5}q3Vq3 endstream endobj 1342 0 obj <> stream x^n! @IHID걚[k{M`M[!2`) Oϻ{:eÇP裄  i#35,#{5-~v&HR׶(iOv|>t!+r ˬHaRyuA"p ֟}~@ rj9@3++X'k*{=x"Šd'%x%2p LxۭVk/lm ,uS#\m άM8%î]Av /Uz^m( <"{oaw28j(?aS{*>֦ He6N+y) 6mKLV%ꡅH w=fxbo#{ݴs2!q| {Cq.1&FVc8'P) E+Sgiuw@*~L endstream endobj 1351 0 obj <> stream x^Vˎ0 +$=VڞגÖl GCr4hPy*~^?:G0ƪOe(A@/g@uL~痜3`}.C{r t'\i*F`buX6EiC;!ct#Vw5~?嶫:emWt{gW=*F ?ރ!)4Cpj@B5'DH NlL!+OdMc"R[\SYm<sr,5*ˌf0=aq1$4ٟ-ΰ 'G));c=;:\X[<En" 㯹LԻs0ٸM+={&}38sSaxkf?KJ`> stream x^V0-  ]ꂴIo!) E0Z5;mHoz}YNd[398Cqe勍,̏/D1ȊD\d_ep/V㶮'1EV>\kll>re<ϩ N$ :(%5ܿ.>OGٖJG@qGϪ's>3TL+b& |pG-3?z [+z>gR3YsZ0_[[8@K:owt»bmXX@E9*z_dlɖTCcm)pwئo0 -p-]#MD˶| NFn$KUlH^fkx^0N":7 d= I:C8AdڠmpzCtnLJ{SRz+A` M~p'C ;ߛ.=ɋ:!H{U^o/ endstream endobj 1250 0 obj <> stream x^͙n7y >v 41K o#FQ+P }~CʊVjѮ56 Er:Mo~PA? blЯ3bMiu!_`|,B4!A!dD ֤c4y*8tEb6z>lXo], ڇ^$ EEbfT:ԬA"à =KԺ4g"eLyt ,]LgVg|΂rڵ_FGj vleF0Z%AJQEHֈ0 )xIW$="ʑz#IwMD,IdW1s< Et*M4_ ,߫ Z\H`Y=-~LE 8\c)#@%eօB:4X- FqI&L}TE$ePĂCJ@J:r!jD(`[䐜B$56?8V <3'%QPSRS,>C2 S_ÕlIX,DX&_ɗ)Mwח~z~Lwen+<=aA{sc;++~p[mW҃x3[uWOZj+N)`|q]o7}w}yݭ'3%vhRC{k7w3tGԬw_uHUs}\uӇ{]=mJNZ0vuV=^9몦m1qqaUCan;RKpExh=/>iyR"*g"ȥ\' 0 ),  ~;+DV(}^(t(4~S!/SRe8q,~#*>dJuL! Eh2 Eݒ7C1:BAbP4N)ˀb\n*mZY"P쑟mBgPpg=@B no "8H(# Zhb||bMRQgm)U&#Nт2>KA-M)zF|MŇ)>>']|:+>Լ&˩PU δ\SNPP 1E g1弱SUFć'>0] ZYU0Iǔqc+>oIR#|xVY&>፨Q+>0+><| N9klćg_&>O+2O]mʳ쟃F,R>eKK~;z endstream endobj 1370 0 obj <> stream x^Un0%UHRϹUvBP#d923Y >~?KTAF A_,/@wKKJċv)/_: #s!kℜ4kQB 9Óu.L%,Y52ŽnN ܋I[2D|%^DJidI"Bn^1L.TNܸR"חDy= !JNn'i'qS$潶Vv2=򉽁`.{;-Om~dJK!!Xh]0sK-~Ŵഉ1JFx# a9'MO:bpkWvgԷa.*kALqύQ߆an9*0qV}pk<-tuY˾$kDW#mg<8 endstream endobj 1380 0 obj <> stream x^YnF +SSfٷ Dڒz`4ԶX\(kӿ믗{i:秏&7Yq+d#18}7)+Y+\\ ϯ_Zk)r{J_ǟtoL)>y4?\MhXy  ndSd"X "+?%.bj-p>?~G|ʑK4ͧ6%M&"@1<rTHO3ug &uZY|!6]%˄)s314  ϘBP! $`fw 8!c{wB2 Z ]~!z=v٣ [&0? i n(]5ލI 6묄R5JW=ԙ3Ln竃9 _aLh!4q ƞ5A^-{px[CvYgoJ#goifzo t /k,F / uGPki յ ӯd㈫\Txq0t80}Nu LY45hX tA3괐 (AiIf>7-}gM^> p픖qhp-jRXi8lB鴳xssB@jηbIcWl"s=5gu$k L?q YZ1_'" DfYf#͚Z[\LkoX\\EK= ##i}>*0k>h+Z,SKGjBRUk}Y Ѳ^9~hXp.HNd*c ^|yA?tfs),pz#Q?mw6Kա٤.ip$-Qakyw8qLa=dOo&WR CxG$Q~Jd([|SN}Z>VW IKt!f^kv<~}^8#E,FP AI-Bҝ.EMJQ:^`?5'D(Yx9 {Fp .aUl3fha<>и'SpC{[aMգO_(ٸj>xC-KS-,wF} 6I ~A* x Rqe> stream x^UN0+5%J$ι!pMTENxvvv ˀ~L93ACl">ۼ?/@WǗ<>_!_?kF^uӑxߴ'kdA6>9P>P @m IwJL@c lc!ֶ+iY 9UYJ:U#`eγBM5~L}7@M V[ndD;SoWe^Uh $5hCzkYT Y<E I^Sr#4 텠GH !9`D٥Lbzq6^Sv0I.-RŰ. 58S͍ˑVqnX,uȟ2 endstream endobj 1396 0 obj <> stream x^Yˎ6 Wˆ2A bvElھ"03HPׁsncqe}?~~{,jv~y}?\0;H:Z\~ɹQwW~{~'k!?/?oRl_lb}, D`e=Y$^B,q~J9*0_|kV!ep=D3 jר#i)f E&`;qJ(C)*E9E,QZckbN9EA4ɜ|AsoROBݣ(3`fA^R'Z,f(V ief(k@ڹx3mRA4:Ca PS6Ϝ0#pJL cFmC!e`}TN;W$3]}(3aZX{4Z3L^k93R=T RKfBѠIGf536:+AKҖ2\(ܳ̇Sx[-m}W= O՞L_':C^$ۺL=tK/yN*'2ӍS/ k{, amm ]q6X6džNW &Ӧ&dF,!3 ^NCuxe q8bֶ@= ʱ&&Grr軷 > >,AK~^y8؂";3Z{ؒ}}nxuM(ggՅW$徢1WQ>^PXcCd]h}ƈ62:]̰IζuҺ1n} Oٱۘay5xڄ*pۆh*LObsC=90-L~KettQR=Ej*@Ow+ endstream endobj 1405 0 obj <> stream x^N0 }@&q,M(bH{C\_mH U(gw)Q e8~Yc U9#p |X(VXrXہLB?'<*nq<2-0Wg4ĿSHCE_IR`H82,pf@,- _ `5IꩰaTpu V6:UMu9GjY u+ O{/  (̣^f?yoܽ endstream endobj 1412 0 obj <> stream x^j0 E-d)t]]<` _=4/y=yZnOsTAF- v H-Y^";> stream x^YnH +Ծc0gs9_CREJ]$|\evo[]i:XW6FI?Mdm>=29y@Ě^fO~%)HpbLC[(עT>=L&&n_|; Nɾݡ|MQ ͙Tڵ$Z /9\!c*v? ՑK"rؑ)˨brKdGdh-@=?ų;߰4X]TQS0r1:.UTrP8^@I0 q?6|ˆ̣,:Sa9g˃D^:7ZqlG@wOŸWAyZOm5->FӪ=LǚcQAoJ{ȒuXf m z.3o@\wP |BXnA4sw+ՠw9Zw|F^jĜDJ:%R'pD:eG EO&ǚtE|xAXv}rJ>xeN#̈́" AfvjyN>,^UK4* LR>~u! k~VD";LzIEM̚uЌ(& u qq~œ2kʩV~9NSkݻYrt4W3!8~-ʵIh* f' n-8% 6EtꪓN힆I. u Ѳh#7Yw1bfa'v`W-<]E3LLrd{4%Ⱦ Aw7Wrc~rk>[ .:b&t^gtO2~j@EBM9%ZKf&OtF endstream endobj 1430 0 obj <> stream x^Xn0 +Q$QOX i==%i)S͊c8kg~ZoקdSu/ߋ[,ek _L6,׿/F'Z ׯz|ty\^/Ϥ7| ڿq%`r-9Y5ʆӲ1yt yR H5PjV9d Ĭ!{ޜ~`JoB?:u-t^kM7{efl*|s&o)^ZgbZ{rx|/.eK(@*QpqCuT&&rݛ&>)ćKA b$? G)801H5/ϾI;51bmvГ\TBOApɸ4윞[u/, Eɋ"(4dJĈRr5AF"Yd7@|}qv FnB>.hU8 6=vg|`MvP ;JFBS+&ڪQG9bNxl2`E430BU'|EzVmm3&̓9EB %#qA Dʔہ1+KCQ `JqO"M $~顨Z}A@B-*2*U<,q*S= 9 ]Q"AL"s4 A"W9=;O66H#)z:A2pEMՃ}wa媯c[ZM28#xлw_^+뽧t=03l(ѝMvk2ܺsӳj] i>[5'Om/^u|Ĺ!$vhw;9Q> stream x^N0 {8q"JlbH{C\_C('a_v?0N A"GC!!~Xc9\t>us}XEaOZ\t>@/3bh`Sq+X}BJw8UŹJ\4ٴu16%bT^BA#iC4)Z#BR%aa'tmI^אg]du:z \%{VSUXo% r*OX1C߃Sm:vn#y!H%mƆE"՞gS k46.B5[_vڥ$6 к9Ƨ?{03U =aS5ӪCG"7Հ: endstream endobj 1446 0 obj <> stream x^ˎ0 E z?"L:)uvE-/#Ɏ8B* <(RH)?:×s\HA*E-Ԣ^ZK]._t.'4&O4jpo)%zJY)u:)?+]~oeDx ^Ješ:ƞ3ķlKE^%yxD–?ei($&/$ مmP -Fܓ Dk݌k-Z\ ٢%.1@C;75 ޡz!\ KAr5f^f[ 3:T+J>s^K՗Qce;$d0xniVȬ֧/Ok)Dŭ")87DXBޭjKNR|UhSh-JRبicu B;P6֦(JH(wJD&:F볳uXs ȔK 3[vXLRšD( (WFZ N) w { :E &vmB°`}_aTF4 shI *R~O+{mdMjT9ouZ#iSU:z驧4 ]Y\5@LUchH '~Y'w;ij&CŠEX}ۉ-kZt-|ZRg9w.[kc""q.q?5Zn5Z;_`Cw-+DV _' a=Gc+ y9Kn endstream endobj 1455 0 obj <> stream x^Zn7 + IȮwAV M調_p^-3׹(CI!\^$={X燏Oq "^Z"ZTKkE$|EJg㤴 _㇔JYx āA<!hfr+T0zq> +Xǂ8KR%DfpKIeL1I_f"'7&*5Hjq|fP*)%V%h'|f[V㆐q)3~ۨh+]3I%tGDF;p7*Hrژ fchdZѧ,T@$&[Bʥ@Uς<[fsZo6:CCe0B;I;I'$O} l$2 z;Wp̮/ҠA /;W@kCC  )TNDpU'C3ǭnR覆kQ yC˟/'rߠ?^ȦBYxUEjz/^e& F B%/;L΀ù^CP[+Rܜ[е~Y\2v0rw[ѽh32ZhЫ<&z{R@.X˜ƶ|x:#b!n :H'$N3LcNx!7t6 =}z@Ώmr}o'2 u7n۸-j=N endstream endobj 1465 0 obj <> stream x^ZɎ6WLs_`- b$S~?UբԪ.iU|z{%/I_Y43IZE=B~y|E Z O])D|?3&~o#<Z;)d%%$Rɦm-VwHWaM "-T7 6 xa5D ?"\/EV.$/BA3P䰙J Ljh,h:/v YZ}ho8Rl貢;P=*آE~#oGw=|JD/jأni#^(ੁ.65U), [ OhD*#iY4VLT;)56۬ ^;U\ EQy27.[C#YX* [lb)bRFA7[$!g2Gu+>U$!) nrZ%$쉔Pƒjۙ.B8Җ:dꨜ<~w!~kW\* frʨ-7ƢbBQ4X]{T(Ct-ٱf'yDXNbJtUNAJ1oVgNW`5LVO^|Lܦ^h30*Og]y95(:'}:|RW |[.(%B(:0|o^cUK^@Udc59GmvJ24B\."ڭO[tU2 U@Eȑ1Kk5p}?W%4;Fۿl'oӟtFMoڝ@{-{j1ގxk2v`,Jr:v6\b٭a")sl)ۈ>>6:`AbA;}|\n?AZ١ƚH%?31_tލ lDב5}Yf+Zp$nS:q~F׍6@CVr#o7G˙ Փ*[X#qDOC6ou˚gF'+5og ϯ7,?\;xO_;P_E.?b,O@d叧!׷:@#㠓9Au96ӬCZ5PCލ Ù p1L7> stream x^Zn6 )QkY@`[ѹ-E{i=KʢlK!Ù C}I+||{}JQc_4DF=B~} ~:8x~w/5e<<#]- wE#ƤI|=w£nfFe[ ZRi"jR~SMzUx&MKFE立GTP \K/]yo .950~@[B˕0E?^~T΅!eѓ6x(<v Q5̮dߛ-k :`S;@ˠ 0'NmOtzЋ.6O9FOql5 )eI ɰZq)Qwˮ[DWNh┥-57-L$L*4/ RIA!@bԉ ,`9]HBt 4yL ܇vJB=%œM1\:2 )\MPEc3gO ߚt9HuSBw]EapVyÚ-HAz#]ZuI2Zi&y򫞤 o\#[#odEP:t\䧇ʤ ZMylǸf,IAinLDꁺvV؁\1`'XdxRAj4.Y9# B H\ VXeKa KVt<[ *+Uh _Nٕ+fbpZ*V|8\1g2Esk7֞]2H;vdǖ!q[q6/Q1C^8f]cwDpn؛j#ZF:tjy!QF5ߛ<%ON ]'7%A1_:tڿw]GGL"]P%ȁv`/Ŕ ns ~_8(V NnY/5I3ef\37ؤuA8΂ѲS)Lɳ!x%ɆT yꗩf= #{_`6m}}u^\a2u1ssЩGQ2Y"%E2G:gGLDܴ|pLC{X}GU|Lv1jSVp\1ar7Ir\q3vtϠcµ:$ ^F endstream endobj 1479 0 obj <> stream x^UMo0 +J ަ].i@׊PPgԗ.vp*ѨS_hT(rL 6ĿB4["ҎOh>K[I).N7+Z&N`r>j!R>z@F\}DQ|k[:tD~R ez$6H$c`DN6QcSbrU)]耒eG'{Q}v"D(\wui}6d:_ڳG( w%Vi_ ! f~tfKu.JA+i\"3&24pn ثa=˿-2pdhs,dX4 +KK\3**$3;aFfu;g=6\ɝslFW/QB endstream endobj 1366 0 obj <> stream x^͚n7 |hb7-`ؾ3|8( 6 }$fn;05|∔}́#yWE`AH$U),-_,sĸ !P*IH3La*ꥥPTE 2;אT(8kĬ"RgMMh Mů5j?W U1@ |铇 ̂(Ĭ$U!>c!Č0l1.0<C{E0b>BbbL>Qd6HX1<$訪nL耛|98Hl`w2yS`u;a AG fc2\0ix-((y~z ..=>>3 '7c(L;na6>aAY&>{|2|gN>ҳP4h苄BůPwuc x lgC!;[G1e؇g-1>O,%Ew4)>3^Gس@[[I悀(H"LA@Vk aO  ->$p+_N| > ͌b5+%^|!7;tBa9'P~̘R+]EvCU[: $r?)N|PTO2#).TlX4^')( aWj' 5if"a)!/^9hャ ]CIɛp}&G6},'K<3B1?ɶQdG3$yU[pcPİB?)v\7 ;u}>:L@( _% endstream endobj 1487 0 obj <> stream x^N0 }8$66# q]0Dܦ%dȼ؝C6ɖD bÉl$PHn"~`M)_",FNexHS!m.ަWb9ygBVH ay8AJ7$d,G[^@s&l'N:qds8qj.I# 5w3bsɄ6R-G9'Dlџ5]Ҁem50ɎaJ~r~ dbR*WȊ0@s,BR^q\`@1*3oEU03{#z{?_6szfTq~|> endstream endobj 1492 0 obj <> stream application/pdfHans Hagen - automatically generatedLua modules and functionsConTeXt MkIVs-inf-032013.05.28 00:35www.pragma-ade.com2013.05.28 00:34s-inf-03.2013-05-28T00:35:56-22:00This is LuaTeX, Version beta-0.77.0-2013052516 (TeX Live 2013/dev) (TeX Live 2013/dev) kpathsea version 6.1.1dev2013-05-28T00:35:56-22:00ConTeXt - 2013.05.28 00:342013-05-28T00:35:56-22:002013-05-28T00:35:56-22:00LuaTeX-0.77.0Falseuuid:0d87d50f-493a-8d9f-5973-f4014d13ec01uuid:23a386df-4e8a-acca-da59-d34bc2992525 endstream endobj 1485 0 obj <> stream x^Mܸ"Giɛ> ьvb QqΡ0&s !fcx?fo f, }%`G`?n961(`a]+py9q)aڀ[!/f##X983O0;J̋?n0,G13:6Zq!E!ºo=٢|E\I*f`|.n>lzcya <Ğ-mTvEPvFF?;6gQDm?.N=F"jssr_/KgGëׯ~?_~}x2ƛï{v_㣹%N-`ӓӍm͈Clq޾*᷷/_n|{{xݛ?hû<~_ѰF1ߏ?m}q#snϏgf;xx@|=x`e?e_2cо{ouwz<=3\Rӿ/'|>òÿQlz;Kyr>.\qoۓO??k~> pce|F|O< (!x;bgBMXŚ[X{$W [xyYWlq&*"l&7PN4ŎYr!fƒY:SQ58rhƆfѰClSzȞ6TIEˇD6T텶|/"/[zmmFc3 O8ԗ7r 5V$ZrmēRCs SQ!$uB ^D4gj:b_fؓv I+xk=7]!~^Txb+-a:hhKB¨ Q ѨyĻB1 x\Eh$*֕9Q- b1dc- <3ẉ#^]]2͎n}i7bE"šuΩnVSDbQP!n2e-:d*"DGnE2Z;LXڐHa\Ժ2iӤ:ZOu"BT Z8#V/=T)mRnd1/۹$v*"DXEzsX9w kfoű,#c,(KX]dP|k-khCm,QHuRZAv%NBԬlYlUVR X;CȀh8EdXbG՟&HKk߫hgP;w PSm6 xE$(ڒ۳L]PVD6Ep0EU"P}:;ɋ^@[(}TW6$=6Wj_N}H)v%Gv**O,V.QQ dDnoDHT+TxsqiCQZ+)ԽJw7($NB7$MĔSWdpH(JJWtNmձәͿs$H8ݸ<蔻⼨eHHZZ{ m֢BBlVw.ۭedn*BkW+ Hƒ0; &R]iޡP `Db[ R$NB˚TnS\ڠs=LC/mȑ: /RulD/mrBifpuN69(YSPqp*qTf/J8GW;5Y:k!Q h8)YkG3#Je]vݱYC ϻQ(y[:7VZ˭uֶZVbv ^[m?۟,`H^M5㶺 w%vS lmEoqrjY0rGҒźqF%uNdkKXO OUӾj[+6[AlUV}{j۵Gj.YOj4/ww̚e/u`ڎd̲`Ѡ܎mktI^ F~u™3~WsƟ&EhX›VBQ٦l2 !v+ļ6 ^::O h n䡜 SP&1̩X^jX lPm]V^Y Gnߠv<$YSP2W:+ $K/'\#˫^kGv )"@spI^ٚ_./Boۛ"=³Xh d endstream endobj 1597 0 obj <> stream x^cW߿_E endstream endobj 1598 0 obj <> stream x^ |EZsd2 3$$ Bȡ"$@s" D +*(끨@9T<Y]uBDYGVL}ޑjz~UYB񍟘{mK^ymRAY~=} ] H)W^7#DH+Uv0sB5wAy4BGD*!j}P%e5w{||nEA/!7ewU&11SY-/+q|!UE8b"~BLD"D#m.g%B f 'm!?7 tdBqf!MS=;?nW  늣|ޢ|-8h"-Cѳ;z, B-^N Kl8|Vfl-{})N j x\|S|GYrJq$iBZ-dlX-ooyDB~@~X~\~J~N>$#l{Jj:{}'﷿b'ę"q)qCn++naB]=]ٮf#\ϸwwzSWpw;ӝ=ͽ}'oݗݚjQUW,u:]S]nU_R R|p|d|L|\'k|b| O'Q===C=5=Ox^+{ýxo7oo_0Ho7;;[-Vz..>}{715qMOIIIcr&%ݑT1鹤CI'}t7ݛoH\\m_뭥j)Zw-AS-B B4hB돭?^j=W_v5jUո]^}5jWIkCӥ4}EM'h:TӓM%MM3no4閦ܦ1M2|M5%7ԭ)kKSLSTSDSxSXShSH)dk6&SDϷW{Oο}7ϟ8 W/;???yySk@c]ƵkW5h6.i]cucys-sQ9ϱ/}g}gtv'Ϯ>}guvƗӿKC>o>kgf:! 4XHqt :oA%Als ^}1g,}hѾCehOa3ڟxL&3 ~Z&~Z10m1p5hD8O4` CDh -7B#6 ٗhh8=bG 0G_V1B1h'0ޅ~7 4Ўq_F|D+=p@sb 8$/i*#у6 ]Ww|e4ĸhf4ębzHoX7c&BdynF|࿸=xěz b\ ehz^FAga[?n4Nw)[?g4/]yOeVٗ݋1xe)Xߎ@A?Dk_g4qzv. ϣ|v-vȔ$voa 8|=.%;_%B;Ƞrå!ā7Bl&!C^Jm\$~,āw=[ 1d+nmCf qE㻸hȑ$9|M@]M~Ɓqei$z\ b* Ÿ}ZO SBNI@?4 &o.Jy$(|`\-]#%;₾I@[@Sק#sF1nB? Ơ 7 nZ=l=t [ꞌq1z,o2V7hϛ\~Ji"a?޸6D>xaoe478xGf4ѸKQ vA*p1!U!;c&͔9c~l 3c2dMR bTL\› רMNaTPM`U }2A4f]`KЂ1ݎF4A^LxLxAL7t>AqكMQM`mMȌ~PP=^@==Ttznz7 ۢ/9P6\Vz>FOSKo l%XK~v {A+a/ [F!!^@o 5V/ P{aV/|.(G]MAmě[@#ށQv YP.r/b/IM'{(?| Bw10 ~{AO3 f4bf+ś2D %@<HZ!Q3v)q@$iL'IXNMX`F* tە_YZfAO@#+! 67 &7f%A໬? $'Z$Ld }MyWIIv;o֛a|7Y_؋q+bBYdm2bɀ+ &'GVO2|2 S {Ye mLfM.i|<߅dpb]8hh\ûV.e+tf6vhgy͠k3Ɋs͐+|P3f+dz _c\4>͜>MM3 ۫W CwV` f]7C[V!N&W9Y=F@Nhh\PaLD[ b'A$0N"H$"$Ē.$n O<0]!$ ɞ$4ҋ&}ȍ/Gd D!d(FN22dQd4CMd,GIO&I.H-dLVrL#wd< !QG@N Bϐi0T(y'0.#gHHg~)z`|Jg9=ПAtK9n;+C I>E8] ua3lrJ:RR' H,3nrsd?s< ۪cLȋB#b۪e#BN[G"zR Rb PZg ӻIOiۄuj>PU(kUP8YN_(j ~6l% $=BBVS7L0{Ȅ=A Ԇ SXi_/_uJJ+VxŐ-Ξag^[@̞=wRRk/?2Awh_/={֦߷A6`C:-C^d* !'q|!?n{V+}V=DXL,v\r1BxXH7Q{cHV|ٲ7nCi7j_ǾyoǼIyM|^*$J bޖ;&B(9cv96/!=GPx;9F3c&fbDE.![貧4x|x }U6"nFARB|VTvLq! 'yCՖ[ h)m)EiXH?ge2ܹlDJ@Q,N s²q.5^8ױTZZh/ +p-nLI]Dp1~A;GP/[pae8syYqZ|1 sHVɵk+XO+LEdVx [8jÒެF':pݻw)h}ƈwz#5鼜MVAnd4 1 kԝ]꽛Ou%,,ڕp1;x"ē Ub`nnEp1 qS܃@3eV+>U̝{>e˚7PɂW>*Nz?d7wλ˪vv@U?yi!H s D j([i6 q)ljwCxD>9c񬏳O8wb}ϵ_R\7ݖ>k[i!RxJ@X; yDS\LɹƱ>>H'+6vXpx_Qv'rn?륃nݭ=.}}QNUkώ{@B15-zO"b}&$yLrN7;_M); U$#GxSG^O]^TkziMOnܸ+$$ikMs^Jkn:xg̓%u*h)A`K%1CEĨH=muzb@QLX:~ {tf/K%TY~׋ f]\L`)7i|G0G F9/Q[aعK?|FOo6 l]vx]8Z.5k mV`X1X_<-%'JnXp~"&iz<9$d P 0QbGD1x1^#D'7Ԋ.̇B$Ğ1Qt|1r`Y}Y^Ö鎝I@ÏM. ۉ"Q@{sGCȧi\=-dpgr<"gLM$! K9@4,Ocvt(`AG|Z/$ z hB$I4'0F,B1 l ̊I֓j: GC@؀Ud4R{Mi #uxZDIV QOyϼBĽ_'O^{Z_zRC w[hRo1ׇNk;T$bwEH2WHZo Mgq~Nyy*p|Fn=돳`C)LBsCox@ۧ^` EgZ=?+N_|t `1]+6e#B{}~_}p 7^psqqw<=O8- fzZطߩ,wR;㎧@#EY',EXٟLqz"fݎ4lr͋wu+ fA)" -҇Lot9boB@qU]3IR(%*Q-deP[Z,4q$%=L FˣMyi2weq}p&w&]֢%í.>ʓl'YKVB,TfA0kiETL҂ v#pG(qoib1G(Diwt7C2l6eaHmBV•~waLAf ?CJj' # s3)un `P{$ +Dz"bٽ"1R2uMLBaVdc^+u'>?[5d~p>Vo9P@ ß"穬@NJ}faaͲC*S` %;(t-@էI5JJXw):z@o=`%X bx=k_xk6ir˽|?j?f\.b#oe(FiPx^/R1o!x23.C* Sp^K-Aqc[:b[ϔB{>vjL / KPhVLƣŻSӦau?__Eyȵu\NBr |[X/K|m2Tq=7F- yg_&hSN:ߥIOk26D"{,`.nN&&xMNj3Ӥw,ij 6}Q!kqk Dh;#UQvRVFM?-<(6vMijZ|g;.ll=j{4o`/7Ӿ7U=nCCs~?%z}8r[)kN MT>wVU֥; Ѹ!))77(q} G IDlmymCDQ6YzsQҋj1?Fqu+EmZի[l#o}u) Br惿,ܕ;7ډm@J>blk8Ț#kcOBlD]@..o~ 7!O|Bx󖜬 Ӟ9pу>xpCk郾xԗq@0"f!UvXpp_K^Myg#:o[R6}뷊h+/_f0&NQap53')K8%"o #Qym}-zm衠qL0G$Kqc 0:._S(Ƚ4 4b&Ni9{)GJ݆'.>w >r[0eo 6>;=[9`@Pr#6eLbK>jBM(lA0^'B,+Đ+%Ԉ9PX=[#cWĤtA;C{<Yu-t]Nƈ!~Kb,dMhy+bm0ƺu;zCR4-ď¢sqqCYgx ]+ߡȶڇ ٷuV.^piΉ3xheeǿM SS}}ڢtݗc j 4VXY]AX~ɾ(OCCGW xQa\uU+^z)O7bw.]?=%kIW?ZQ%oGb=3)heRYGZLثz&OD@/E&WZRN˴/AђZW2 Ih4'n 폰ʱ"`Q6y{]l {#雗a)(\y [Vay.Nܫ۷AJsGb%҄T4 b$":#?Jf*˸c;ß.<@ %8nnqS,(J%E)}~(XI0 Ӊh9tcIR7`6M,4UjJRԴ%-\_MgGc^~O|tCK 6_!V6֪Ph8l9Ǚ%*;&9[hLO{6)m9M.}|]!fz/{Nt=THvI#\;߿Ħ*L[a +ֵ-u'kk_#L89^_n#0.7>G. ҝaQ-j0(Z[|U˗bzn.:y᫷/0+8NAMX3vNq$Bz!Q_Dm;WAKpu8URՙFHsp:12 9z).|w@FwZg|27s<yO:D zDF+JD5&HZ6JqF)b|l2anЮ+u@i(G+m֩B`/;~E oU.eٳ^ɻ+J?~֝SRn8&=f뢝C}L]K7,~9\qoHB{'=(V3V#~mqC7}z1-k;;=<Վֵn ;fax5V:lGmWk^TJ|K=TL<0zΧOrݵyǓ\EÇ 4\3w!C3P< Gǫx:*ӤZ$=󢑂%!A)tay`Q/ j1[xjXf$ÿ$ɋ)";)"n]_0bXFjqs 1-u1Zbn["AVHM^%6P' (ClJy&$T'[ڊRV,JEyߥ\elx$Zr[pC& XXZf Re-wK,Dn5}ǶaDZ}/{^ػ/db ŭxϪAK+y7 #h$4"QSFLKBygHvJ$d)2ZxC l!㔎ϯ&.>bZjGd A⍖[I8^Zm83AxvI֯Zkpa͡)Z_̠H{`02s:Av{P#}ך9GC ^ QB왡<65l5e%.}>ʀ}TtsS E%8Y!S,n*T?~O7|hm1:>FKjk? rq1e#kʟtK3¸>(@7QbՈ4șn[_jZ/dlRf+ ҩ|sl]$,k9ZC'[i7{P򩶗]FܕF[s#<*X>}/%kD4HBQZo xJ~&8r(A;P0;}]DvSsnS?F[oY{~[_SWO7M^GǮSve;!6ZãEIe$z_,}=}ΗDDŽb½!"qucӛB D~# 4pJ#?ctIV6ia??9gϷnΓ?;4eO[FOmMUu5~EB dz+394o^JC Q~Lי4<ۃ0a;`_xB𔂃xNl=porܧ0'-#wjKkp XhRwpT7j9Ғ)xV[N^Cn/~ yfۑK<7{{8Xh;L5OaCQW n{;+,հvqxWJ[#? \>ˤJæM_+x݃gd\NNͲ{k6&^x}m:hFГA77cw 1=Gn'qp8My='kؖpGx^3p=xnܓH6sNJwy*ANa,RLq,,b,?]qxvdl'7Gg-1q,NEq0}?I?Ax˜?(4Qx?w s. K)k)!5c鎾7IS;*X SCѪL>)GH9O(E>Wyx/ęZͯ*RKڙsK Šr,p-u89ـ?fb~y]Q#8\#x/f/.Stpqޥs}`4K+)}dCcb r-̜* /(mk@qP 6*Uszk+WElq`"\CJjj*3jS+j +fQ H@V-\qIz>K9%ZB97Rgk<߿woY8 UP \(c6Aa$\s,}.ܾpT9ofXC58Ln*chNf[nefg9 KFա8W33 KV~}7:ģ[^~ms+p~)~ ,pXk~; ;VP%I t!bMJ*:pF:<~ӡbMD pp~_Q`eX Z|wӥk ~ܠznT}fßsjH h 930V:0ӣ*X' .#Ɗ\R8&:պ'3 ts:1Ǘ[8&bóTîss=3V螽c pRf}C;tbm@8V\ Nq;0"YOa/8~gns.:FP__/_,|uNsaơ2l)ܾx!sε:G q!ݳpǦD狱Rr Hweq :$c{H]zu\9&Zn/:8q6$2s O)ՙuF4i@ʁ+HI 0:?eMiлyW99FJ /Ƶ{-R爛}t@i`[6@nCtvppvYncln D <0t  F0"_WX뵶+#4?m ~y<~!h2\,SIa.7{n&cx˘#|8fi,\LTO:c>w6C4DH}<2ߚuX Hpck3qȲ)"Ks㐦4h7Q'ǞCšq \2u N?c~e< ǎ?TW5 4\Yx4ԾDqxqr|owpޤcƬ*3p 9EǏ×cq*rzk?Ӡ! :8z H4t$0۵-|2t.!Y:#54;pA]Ο7s c04Ӭ8Y<\\8$|%.S@Gq.ra觱F3y9::Уy0 },rzr:?kXL5U+zcGT942'# qhvs4|VG9Ffo 0H#7q m ?#ѿ |Z ̌~=ӼRģڵ]p}3Spc^k2"|[W\yLX<*.)In9fR#? ׈YU 5F>  Hݐ)#3b W5Qx=Dkj"uf܊SE3be|՘jo,: l}R TWQ+Z,JZ'.)*B%xVU~yMQaZ\qʽ'&5j~Q\P1YX%e~fMIj5 **q:?D\T^ {txcB54~\P[VT^_). s7>~:f>8CNHҙ5E: \uBҚSV_QPk(G'Y-+ұ֫%ɝHkVTERG9p4Â~ /(5 ŵUXijuEZ];svQA ?bx.D#TPQ^X V=bW3+5~v!(~sE̐;$H}N5??ԁgE9J-j͂ʢ|,}@]C, Z4/Y9|w! pͯQ/,.}¢*]B 0I5" ׯdH\A&n?X:fs׈:PU c|P͉yP"]jn&<|G'3ί33M|Z#1T__WtW FͯϜ |-kJkԒjп;IxZ[^TUqb.luQ*7 Uuɟ ],h{ V_ F WEs9Pc2QsԉGMNT&rO9ROgO:9+o[T7U?JMϙfN9q:>Wʞ0.+DzrFedVh5SeegaҼ2q(5;3w̜5.+oj:*+/9 sF2.=WpK31HL3*dfg L4bY%<LVrGffMʹ~J j$~1ƩYyr3ӳ:sgsݒ32=/k| T3 LN ,OA~̜q #thq&hJ(f1>gbͷ ,7BLG?y ~P&gMLVs&rp9?qГ3//?kYj?GfÄ_ ʼVPn<԰pNI@GCqc]a: K_n>`" [8V[|t7&KLk(X W{? # beU)&_UZcMVwX71\UQu%JcwjRcMT>ucs567ެ6 +X 5V0%hl&qH3],_c346]cwji7mp[ SdM--Y&j,Wc7/b46>h,56 ۍݔ%ԟeؘ(iFB6 FdQl$Fd8!lDŌ`)2O`@oMٙ.64Ɔ7PPa/lwc46Xe5֯gOc}DzbDz>h7N쭱^W KaFsrLz _6ᔒCY2w<p 0HꮱnKXb0KȐ2Y`՘'8Xh,^)/bjO\X٥8umh,\f1X"1C(S`a)' sPBp}ƜܙXdvv̂ ك,@ ^ȑVѪ1 0h3i1) w/kGqD{V3Fhu{Q?=& endstream endobj 1600 0 obj <> stream x^}RMk0W@zpy/Cb`q:&O%l Fhvv4WB=l ?[o2)4P1v a4gӼ,J%{$#6i G;Mov/ UWZO/)L'Z! Cucy,uJKlo-{Q̄ro0$\R\`]oF#tjhX7, 80fV7O)pWA];zEr-kkVG@3~JڟSpM[y4hY;0N$rNeF`A`J-iL`AjHWLH3yGwY6$*%wt/U$$)B s6*{?cRܳpeS ~^N[~ƇogK endstream endobj 1603 0 obj <> stream x^c`  endstream endobj 1604 0 obj <> stream x^| XTe3WeQd5Ӽ *慁Ԭ22rۚZVm7j*ж\+{ϙl۳{y; Ң5 Wa3Nǝ7one;PCRT. &^[6zuumk՟nP-n^6!u>8:p_uߜ}}y}3M7/Oa/;x\-X1Ktb1A4bh"}wz?} C/\p\_0_Hx!B 1_n|w}vJǻu= ˺v.={JӻuNmNN6utGwGuGvݺnm[խVt3ݸ ]\ɮ׻^z宗Vvv5tuv-vy]ntT].EC:;|s{;wwl_s[罝yOݝ:7vS:tYYxt=ӣO:=tiO;=4틿#৵>>~WUDt?߭_ mrD?rgԔrP+#&ēc|'A,.<JBj,E(b Ţ8P"dfdAV:6hr 9Mt4e 'ʄ* BtGxt&Ih2rl4ME9(MC nD3Q> P!*BQ1*AhnBehnF B-F ߉֣h%ڎv_]1F{h?z=)[4:w9t WP /QQ zR-Q hҁ Q5jVF(WZt ڇEkQ%Wpҥ4:J@6tGE¤0+,xEzFCҶLTdj"*VE*ݍ֡.ԆtދBwL5ӌ1LiB+f9Y) t19\\ZIN•T?%Zj Wy P3OkpM?z" x%y}ʹAfنP]p8,}; :p%#N_L'~8TA$2F1̣FPKz綣]>5ZY?Ga?Hx!<竘KlZ wc0+[hXoځa#ћd,~@J6 'c Vh%h#9xv*VsF恺~93AƑ9]&:6"CѾ26wK:Hʃ~]<5"}fQpܜ8WR /= 9DAyJp. # A>qW=XU0,rv8;N=q63h3:lFE=$Sܦm^9} 35$-,yEuPh '::z:F"٬,m7l7,y-oi)GTr"OHLb:ea5%0A5Z ==g_x9.r]<~3Q 1v{m^2<ƌEc'1Sɼ8 bcQԓߎgNit雋7sn-fŞ9mٞpTj'ϗXsn-Ui6L(+@vED*`Oj`L*7F#تMg?~܅ss28*뺫h֖j:عW_/;YזfM% Zx۲whJ:piYuuM* 󠤟jcUp,~V@q>|+-R*xSDup~Aẽ˞h睥&p0(%u_8ĕ:dL&ST gXfxe#Yۘ[bb"b|p?Z 6?b_},8/ۨ"!|j/҃}5xe(&NdQ!}:r'YJ$$)bGLt]@JDGyeM1G< gy('-ݻc!܂[=CGe}ɞFqa }PW <8`P25UɑHY8!Ŏm:EOE/'sjWЌiCϒԠaXegG $$ g%({]w0{_dVJ^8# ` Q@aĎ+` .u&p!epJq#}쥌M %R-q8@ȵFL@Wl0ad-q6YL1eYbᅐ?̊Ϣ$_r  c} i sCLAf}nՀ\Z,F⒧RQp*̽/'*AĂe@ˠ*0|RlaF`RQj@t@(Vc;B@ g,T/tzU"ceҘddzf Iպ,4$cq&zw5.F֫֨GȽU_]'TO峪mJˎA\(["XHh=+ĝhk˘'z͗J)~ĕ*HXV+֪HAf$&(DLC1Pk61x=ȳ[MF֌'vEb%v" 2Kr$`!Q|ܫ>!Ne65NZ\v%Fvbp[-kzo#*Al7Њ<7X#o[ĵmb 8 :XG>)Zva/U"1a gmZ65m}Pz=O+Z[+~?JE`ľ  ^u V"aM5OZB"ͱj'h[5FH;NRW[%r)B2\@#@(OMvbaeDEGx?.maSko*{Qo7n5$={{GXn#hn8dI&6:c$# NjZHPU#|}BԨh4Ġ:k5$y0:ߩIڧ 0yO3b+zeYvbt[KJn_}x?t[Im]KQ>6׿pfO6h쑙SoGWΛ5SZ Dzy&z VKUpk0#pU俇" jTfe)BvRxa, ^oNVOR}!-'2i2,To  mFdZ3Ѷ&!mkc֚c]'zOL{L==δ@)${RgjWV01=vY5.~2fE~SRlѕVekWX;7fš)R@:Y'q*ӫ|1 xd̊L3u[iv&aXj57")]~Zw]W>8w[1Œu.c[LF{ C} ;PG"6AHz'Xq L-q=PܶcGۜ{>_O[xܰtwx44P2A :.$t>en#XKLѤI?4H& '>xe~3."S= <$PԇFy*h.6&"zi0P+'NbSR i3tD$5K:BYC4$f4okߎx[vۉzz;K6 [Pub iqT x۱1mь6 8O~O5@)hWƆ}gdPqg-Y}OʔB,cgik5RRg J'>-umV$oҠixT16 e Vyh 'B}/16boX`ٲ ;.~UbHoC/nEvrJMc6]G>=,nׂU+ ϴY&:*4*5n3%Uci 09u)l$[޳)f'amH1XW<.t۴[VCc$O4HXlVGɎKc1r:z"y,v|YQ,~'cxo'^P\.[8rrѶj 4VmЍʳgB׵ʴWB{O=oU)\ 3M#!%n#AeZQ&[!Oʳh?h^G*Rx~>u`uEUyE'[ d'ōOW'~yPSz3tR($O0twbX8RP 3ir:$iqZim7Y=Y3Y;89rr1 8aga4#]d٪n:%+k?fe|~|}NN|==Uw#ҹ+{G2o[w$[2kvڣ`3$5-6!JSŃ,EFD›5ڻ-G E5nv ~#LĤMvTudOڭfIKKs8^>Ol~fg蟸 D%(_iͰ6S\qjo%[h5(-!/stҰ-pE8T=ʫ+7 YTR n=}3$Z9بoH,Yi a̤ipļÂYFo9iXeF}}Bh%$A$]j#$R MsE뢉J'K&,PrN@&*a"GB\ ̵nJ|̡ I)=lsAGÚhkbiQ-VCf1[|F ys@9ԢXhRI7VaN%ac9* 0Z. ү4e*MIӦEңΘtSZR9͒fMچ@1T?Z㇁bN̤'g,ES~3uU/y_X{vb=fEY$:-ݎ]?!92e׆]?c$v+) % -m}+RU'`"s-ɣ68>3[0<I X_ :+Vc؄i;AN\§*ӴuRU(hNFd;]MG%bKll;G?ן]rzKv3u2R;3Y{,н֠]S8U;-tØW"fwBTׇ*U3*q J*hb(! ?^+B]\҂xi ڪl1"j=^=qh:,??^@#v9i66E٘WnؽMѿ֝[?fC7= @Iho!I{݇.]۞%{ꩁLĥT' Ymm|}3.ݧžS'}$[ΠرG?9脬m{n+lpu;<O Щ^@9ӵE.,9A?`> ^ư͇xvn`"ޫO?0WBIyea9<7[} | BnQ<8Q xcU1կj24>C&mZ1bB]t;u# r !.5v}`7H< y`GB&bBhO г1A1И;1 P?11<eBc 23B/MBC},$-(y!2 1pIhL0\0|xƒBc0D:DL^hAաqDT QhC>}GZa^ <  3 f.Cާ Xf{a`G`ga=πQ6ݫ~Xґ=3հ/ ZMnTK3S@̩50O[4 5վ02M%T Sj.]ȫkkb:Q(6z{=&宯6 PS/*jk*]S \i'qQO3w}0_gZ@M@JXkk* +|f_/deI :J4)ŔBJZ*ﲲYUAA
`}*j۲\dniGxֵIi}9?)֭`"9>9탮I.JaJ1d^zi(F)6?]ɗk(s^R2خ/.z)lc3fY3eK=3Oؚk3!N @_kds9|4i3T$[[ a[Wkyz^8Kbi َ5?>]4H'?]jRZ>@CvHZ\W(d,Bc6ՅAȶGs9\{*!GrKs(7HǺjEXq_fҨ kh0*4ct- ÕpD–#i{t^O|M0.—(,F1S Mh&/X\]#Q0g|kmdB4禄֣_$\dLKcE!QfQ1™~i/OGOxRQL%QzKaT(_:gg+IXQl $u\ Y2FS/ΓfЯ JXЕ(ut&=.L%3KZutVƌJ:)A?|xQRzl~ U(Gs$(~yFH?S曬 Tْ(~J Ȁ6 $ r\K;+PXTnS*%\X%1Ouj2LY)seRH 3dxWR![ـT]-_jzcTJ^)㜐~-@v| +HI$c({ʇ Wh5/܃ǁtp)WNr48w𼁳r|c@78V_#ܞs7}Y\ ~=R.4k[9NӼEi/W᪅V4'ki2ya8M;E4[]1ʑ2++DZ:b,iIR=⊪Xa@VIaZiN(4+8LI)eS> WΙYÕUF mth.\9+ߜ&5h6PFW2*Pn[!7h#~G[ЖV`s7,UW6"oC]M>o ד.Tbz􆡟.U@nW7\S_ TB tWV0N:d%i#5nX͕Mu;H񩪩vP QA(WABi&?JSWҡ]Y䡘4} SWZΗzЌ M@(%']JTKF_5N腖:̮TC_4E`뤅}qbjj#0BcSoey\ *I {j(ǫեp]_(H+A?bгT*bׄF( x@O h`/"[UnX"uS:w+_TPEsA`@dh8G 6TCX/WICݕր+W5#3];@Bq(׶ 5:pK$1:h̤ +o4 n" $SMLBm9P"k}ޖ X`ȗ>sA=!P$d J,[[UƐ Õʥjp`~+,Zi)pZ[[E+L+,(J ޔ]+EŅsrrs8NNn+Q8TiBvNla&8g‚s /+dT 3 )-,P)$7].+V\Ry9O*TF!.f@PvTz`kaݣJe lRvps,K qH3Z\$D#z{ 6R6Τ) - :(5ka1Kw-r! 5&Dp7AlY Ű5)\vWk{k[3`$WS%BK28>.j= ^fOERFRH3hw6.3Tgsg Ö/ dجpY ɱcc䙋wɑsGYȡ,F<="OD_do>{ݻgnw gw gbwD,+<>{T${Ƕ?͵O'dgq;C"y"q< ~G~)_dH W{6Gs hrlp]Zq1nH6_m8F6a/$]rzxrFnZ6YŭQmdRBVĕYdLXEZH hf,I1k 2, XEqW/څ\1Rqp I],%HA|pCC`* G$"{)">7Gs Drs4E捈H܄"D27Ii+5 )m⊷EnHH fymddHn̋nFȌdE2m͉rW(25d,2H&NqE2 7AGnАbȸ5ܸX2n {\b^ǍK䮋#cFqcfѣqdT4eyH<2d:\&.38HʰFnD$qqTlp=n$GGÇz2(~jn ;׸nbfz: R|8f!!qM,bFsIDhbM a9$EĄ(.>m؄x#Edz.H)N7q$v&1863D%Q95""FCgH pՐE2NHWF"Lh5zNk!=+HNrSV)SLShR18^MusG1rų6cG,N0" >=wlA3/kq endstream endobj 1606 0 obj <> stream x^RMo0 W> ՑLC,}ȿ/%)P H>jr+iwް3M&#u(Qn;kD=LŦЪ%pi8ZQO=vOimO>6ʜd^'\ Dߓ'{G)q)rmjN[JK{n@*_< iscSڰ7Jv=oYj%Z0~LC۞Ѝ9HziVHʪ>&$-ĮJ-I 򑾜_PudNpΓޤI8f!C0B0 2xsOHj:_ߕud(~e/Pdwš nwbW:i[Ӻ*2>[>' endstream endobj 1584 0 obj <> stream x^ZY6~_kwxRxN\*(3ÄU"}eϑa]l@IqVYɂ*Yc*V +ePMT){U5Г$,;Ac&x*ȳ54.#46|[GZũdQ$'E9&%'ˣ$H]sH*:4HeptJ O iDD26qafRXKMvYeJQT2N(M`8  N4ȒB(Yj Ȃ``,'yTY<0a-*9Ȫ"?A- ,91Pf #/AYv"4AUZX s]UdUwMcg0z;>,x[o(+bߟc]4e>_&%ꨀHQVCwhT&qGN`Q`Uѽ`!6pX?KoPPVx(,-`.佡G `Zz;hЛ:c夆E-}%X)}fNŭ^M՝]>3L: O@[Sb?1p>v0(:@aiϺw'P>fx9`;]+ATN'vP}旮}qO}2G;5,.D} ۍջ42b q$q~UdF;cG8BpksyO۱kW/ 1¯xoQ _|MCxZjGRm;͗DW95kj/N#Os7Wչ>uiNg ;~5Bv=clŸ߽?5o_ዮc=y 60;ixsz^дWxJ*:X×cݵǫK ,e)/ڮ[~§/m ng#Y"_Q|52|I=4+ Eh`?04<Y.܆ML ߿|^`pA;W>n>E\øL/Y ih6=8@:u,#;#bwUMiYNJ8&o~N+vo;]q5㧺ox9Y}#gY [>#Pd3AԗͰvCcwvg/s$b-)L [H 0lS$\(UO>4 ,B2}1Zf2Al$:}op9 )fp2#f>2Y"cAƖ*|Ր s$lď-÷}u+gd,]bPDL9)=Ra~&n\K$쳪VT"A-Oe*ӗ(s,RRTJ Y|_!uD3hKQ!iR*JuRUyH䇊B#+Td8BR*j1>bӳ|}#hER$RRWAT'\T.7Zl~B]aD6"ꄕ "l'NX\ 5*7A"G$EEEr:hSmwd"-9 y8NKvdx D `ͮi2*bFLL#6Mv tʗ}䕺jF!yDg@=Wꚥ kz2ۂFN uG꒤ cI=v| c*0jGl* ϾrpG&(݄>dNƗwAG} rG!أS"Bb_ TW<$3-yH|9d[!}OI!OI!N~%yHU/Cz<%<9. )!*<)xȩW"F295 Gf7$_]DҘ#}tĬg+n]S!̶͆mmY8+yuØfHlɼ{$U磌\7F_D ._.kˮqnpF 9}~;)>?m+f|Vl{[TI0Yf>+|d$#Un*zq Fjm8~cL.Ǝ/Cţjz dU ]_ہbv&XWFp۠Olb4.AugWܶQN/h iH +:eN}۞Yu~Ь t L>162tg,(O-ulSoZa0ŷK:anIW܃VNzݶfUM“5ʅbFbYW*3>6ܶm99۴- nX\]wZ]CYB r 0@. 6g'|>NrFB.}eI4k<= " ŠaVy-VЪReXaC?dl޳~˚uYT!6`4ǼRك&ʚ$]LW5oiE+f׿Yxt>%7tOkCHʭ:4\kxSZ@ǫztC;q?nCw]p>Lೃ0>˽9'/C-ȓ)ZZw2\x-XASl{lfqsHsʛw80pQhnupO!؛|niYaމ&ͰWܝ]?^}"7~Wy/@0ɳ'ȼf!i#&8%ۑL;U@z'ޫ!@ƑlY8 ^1 |`nQwViL,θ_ Lvuq޻_6]0p3}3~eIynGhޙq8^l8o@CN rNQsoI[nU;/+Auq.qO  H G8#! M0x.,fs endstream endobj 1622 0 obj < ]/Length 4377 /Filter/FlateDecode>> stream x^%} %WYylۥl+ -m}ҖvikiNlkB aH1"o L a J*3b|J`EM*$5{ϓ>w|}:^u))= ʙ(G)My5s:c((SPΠI9r*ٔWSQΡK9rr>%Q.\Hr1ʥPNP^Ky2\AzU)Or-:P (IRnDr V(Q~r;)wP~r'.ݔCy#^})o<@yrfC)P~(-(SJ)OPFye|6lp6 mV֌ C6 \|6l>|6l`zNКgS؆ H6l[9>|6ňmp`vu?q_kV؆ f@6\mn{_y $?W MT6iz[6 mڔʶahߺ=Z0ahCΆ HC} %6Xl@W(il&Wi&M`hMYbg[ 6 mbd$7x^|t 2fYv 䆣}>sA Cn.7$q u/fsA Cn.78q Rpok=7hn!7Ph$ J7H>yq A anPAܠ> 7ȟ ArAirÍٍY /n$7$ irY 4n$7$ r='[ Aܠ ir BS֕o!7d rиA 4_5˚ q\A >n+oP| >niq 9h^ko͊ 749bʭX; f#vK9VRV[%̭`X1>ߞr+|Vԭ(YB`zu֬r+|VԭY`:Ք!"gE DYH/=՚CnEΊH+JVA>+|V4g1g +[[ VhZbhӬjkV[QkÊ~#/f[᳢nE  +GlVE[᳢n>&X>av:݊zk+g[ʭZ6*S H>yrU[>O ȳf0'Ak"'I|$'aI|:nvٯfEO$%> Oz>ɐO]3Y$R> Of'I|R$>> O:|1w[B'I|'I|:ivෟO擼$>>Or$>>fvoOIrC{0$*>mv2 I||.'Q9|!d'EOp$>IOΑ $C>)|'9IJ|zN<|'EO\4%,>>O K#K4{sH,_@(>(,g=>/Yp`Aɒv5gϢ r\-8X0{J!Rh9 &jA ٚZ~R ,יC E_ೀkFgЂE'_ೀkvw7 /Y`Ar{lY(W ,nY(W ,3> |_je2{[3|,+ g4%ϙ}Z3|,+49!Kه_chЮ;rvp8Q3Ofɫ]rCi.MƳch/55~aC;v]a \Co5"h'vEodk܎>;|v\DЎ]Wf(gNA֌%;|vICSߚQdW;chWbkFݎ>;|v\ώ]wf(gNڕ>fM |vCN@A v f"h0+>,za0O'_n*,HaV}~/Rf Y¬,̂fe_<ҚE/fi %2f`_E,/a0 Me(BZY^¬wf \Y|,>a<f Y|,>a0Oof Y|,>a0+U,>a7ך'f $2f]l-Rf) Y|C{fJ)̺ k0Je(2f %̂f]a0Je(2f %̂f]ZYJ,Ca0 W(a0ۗf sS">a0U`f U@/}5K]bYswpnzpgx`*JyM`皋 / ,˽0 }5c%``'60w ,k:0+]tIk1XvA ,Ck9?b0' POHlv06 ,+Po3w߷f " +0 C {0X , CI^C:5q l0GDT6a`c!aO F`mXֆa`v>c k0; R1bGovbbu+2G U}GQsqO(CqTű-58T%" A Q9GQ6(9q)Q9G\Q9GɉGRCq8 \%G]ı=pk8K) sZ$G\QG_oRG)Q|(WqG,uq8JSu(Qxo-G)Q|(WqԡGCHk8JI'G8Pj]dI.RGq We#GʠD/Hű86ZtűXuͽ AEgY,)a"C1nA````(bOA]KOOQ^ł̉4(sbKWEKKKKQ%\%%E! @  @ @ @ @%lHllllEK,(h* E,JXPT~CCQĂoh0l9rA-u#A#:^mc Ljp?A1=M2?7 A`&4 M?hA`&4pt;d endstream endobj startxref 207386 %%EOF context-2013.05.28.20130704/texmf-dist/tex/context/base/x-calcmath.mkiv0000644000175000017500000000373612130411274024606 0ustar norbertnorbert%D \module %D [ file=m-calcmath, %D version=2006.04.24, % 1999.11.06, %D title=\CONTEXT\ Modules, %D subtitle=Calculator Math, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua code. \registerctxluafile{x-calcmath}{} \def\ctxmodulecalcmath#1{\ctxlua{moduledata.calcmath.#1}} %D Interface: \unprotect \unexpanded\def\inlinecalcmath #1{\mathematics{\ctxmodulecalcmath{tex("#1",1)}}} \unexpanded\def\displaycalcmath#1{\startformula\ctxmodulecalcmath{tex("#1",2)}\stopformula} \let\calcmath\inlinecalcmath \let\icm\inlinecalcmath \let\dcm\displaycalcmath \startxmlsetups xml:cam:define \xmlsetsetup {\xmldocument} {cam:*} {*} \xmlsetsetup {\xmldocument} {(icm|dcm)} {cam:*} \stopxmlsetups \xmlregisterns{cam}{calcmath} \xmlregistersetup{xml:cam:define} % tex -> lua -> tex -> lua -> tex % \mathematics{\ctxmodulecalcmath{xml(\!!bs\xmlflush{#1}\!!es,1)}} % tex -> lua -> tex % \mathematics{\ctxmodulecalcmath{xml("#1",1)}}% \startxmlsetups cam:i \mathematics{\ctxmodulecalcmath{xml("#1",1)}}% \stopxmlsetups \startxmlsetups cam:d \startformula\ctxmodulecalcmath{xml("#1",2)}\stopformula \stopxmlsetups \startxmlsetups cam:icm \mathematics{\ctxmodulecalcmath{xml("#1",1)}} \stopxmlsetups \startxmlsetups cam:dcm \startformula\ctxmodulecalcmath{xml("#1",2)}\stopformula \stopxmlsetups \protect \endinput \starttext % \calcmath{sin(x) + x^2 + x^(1+x) + 1/x^2 + mean(x+mean(y))} % \calcmath{int(a,b,c)} % \calcmath{(1+x)/(1+x) + (1+x)/(1+(1+x)/(1+x))} % \calcmath{10E-2} % \calcmath{(1+x)/x} % \calcmath{(1+x)/12} % \calcmath{(1+x)/-12} % \calcmath{1/-12} % \calcmath{12x/(1+x)} % \calcmath{exp(x+exp(x+1))} % \calcmath{abs(x+abs(x+1)) + pi + inf} % \calcmath{Dx Dy} % \calcmath{D(x+D(y))} % \calcmath{Df(x)} % \calcmath{g(x)} context-2013.05.28.20130704/texmf-dist/tex/context/base/core-ctx.ctx0000644000175000017500000000164512130411274024136 0ustar norbertnorbert demo file dummy-prep-command-1 dummy-prep-command-2 one*.xml two*.xml all*.xml step-1-step-2.tex context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-epa.lua0000644000175000017500000002154712130411274024070 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-epa'] = { version = 1.001, comment = "companion to lpdf-epa.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is a rather experimental feature and the code will probably -- change. local type, tonumber = type, tonumber local format, gsub = string.format, string.gsub local formatters = string.formatters ----- lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local trace_links = false trackers.register("figures.links", function(v) trace_links = v end) local report_link = logs.reporter("backend","merging") local backends, lpdf = backends, lpdf local variables = interfaces.variables local codeinjections = backends.pdf.codeinjections ----- urlescaper = lpegpatterns.urlescaper ----- utftohigh = lpegpatterns.utftohigh local escapetex = characters.filters.utf.private.escape local layerspec = { -- predefining saves time "epdflinks" } local function makenamespace(filename) return format("lpdf-epa-%s-",file.removesuffix(file.basename(filename))) end local function add_link(x,y,w,h,destination,what) x = x .. "bp" y = y .. "bp" w = w .. "bp" h = h .. "bp" if trace_links then report_link("destination %a, type %a, dx %s, dy %s, wd %s, ht %s",destination,what,x,y,w,h) end local locationspec = { -- predefining saves time x = x, y = y, preset = "leftbottom", } local buttonspec = { width = w, height = h, offset = variables.overlay, frame = trace_links and variables.on or variables.off, } context.setlayer ( layerspec, locationspec, function() context.button ( buttonspec, "", { destination } ) end -- context.nested.button(buttonspec, "", { destination }) -- time this ) end local function link_goto(x,y,w,h,document,annotation,pagedata,namespace) local a = annotation.A if a then local destination = a.D -- [ 18 0 R /Fit ] local what = "page" if type(destination) == "string" then local destinations = document.destinations local wanted = destinations[destination] destination = wanted and wanted.D if destination then what = "named" end end local pagedata = destination and destination[1] if pagedata then local destinationpage = pagedata.number if destinationpage then add_link(x,y,w,h,namespace .. destinationpage,what) end end end end local function link_uri(x,y,w,h,document,annotation) local url = annotation.A.URI if url then -- url = lpegmatch(urlescaper,url) -- url = lpegmatch(utftohigh,url) url = escapetex(url) add_link(x,y,w,h,formatters["url(%s)"](url),"url") end end local function link_file(x,y,w,h,document,annotation) local a = annotation.A if a then local filename = a.F if filename then filename = escapetex(filename) local destination = a.D if not destination then add_link(x,y,w,h,formatters["file(%s)"](filename),"file") elseif type(destination) == "string" then add_link(x,y,w,h,formatters["%s::%s"](filename,destination),"file (named)") else destination = destination[1] -- array if tonumber(destination) then add_link(x,y,w,h,formatters["%s::page(%s)"](filename,destination),"file (page)") else add_link(x,y,w,h,formatters["file(%s)"](filename),"file") end end end end end function codeinjections.mergereferences(specification) if figures and not specification then specification = figures and figures.current() specification = specification and specification.status end if specification then local fullname = specification.fullname local document = lpdf.epdf.load(fullname) if document then local pagenumber = specification.page or 1 local xscale = specification.yscale or 1 local yscale = specification.yscale or 1 local size = specification.size or "crop" -- todo local pagedata = document.pages[pagenumber] local annotations = pagedata and pagedata.Annots if annotations and annotations.n > 0 then local namespace = format("lpdf-epa-%s-",file.removesuffix(file.basename(fullname))) local reference = namespace .. pagenumber local mediabox = pagedata.MediaBox local llx, lly, urx, ury = mediabox[1], mediabox[2], mediabox[3], mediabox[4] local width, height = xscale * (urx - llx), yscale * (ury - lly) -- \\overlaywidth, \\overlayheight context.definelayer( { "epdflinks" }, { height = height.."bp" , width = width.."bp" }) for i=1,annotations.n do local annotation = annotations[i] if annotation then local subtype = annotation.Subtype local rectangle = annotation.Rect local a_llx, a_lly, a_urx, a_ury = rectangle[1], rectangle[2], rectangle[3], rectangle[4] local x, y = xscale * (a_llx - llx), yscale * (a_lly - lly) local w, h = xscale * (a_urx - a_llx), yscale * (a_ury - a_lly) if subtype == "Link" then local a = annotation.A if a then local linktype = a.S if linktype == "GoTo" then link_goto(x,y,w,h,document,annotation,pagedata,namespace) elseif linktype == "GoToR" then link_file(x,y,w,h,document,annotation) elseif linktype == "URI" then link_uri(x,y,w,h,document,annotation) elseif trace_links then report_link("unsupported link annotation %a",linktype) end else report_link("mising link annotation") end elseif trace_links then report_link("unsupported annotation %a",subtype) end elseif trace_links then report_link("broken annotation, index %a",i) end end context.flushlayer { "epdflinks" } -- context("\\gdef\\figurereference{%s}",reference) -- global context.setgvalue("figurereference",reference) -- global if trace_links then report_link("setting figure reference to %a",reference) end specification.reference = reference return namespace end end end return ""-- no namespace, empty, not nil end function codeinjections.mergeviewerlayers(specification) -- todo: parse included page for layers if true then return end if not specification then specification = figures and figures.current() specification = specification and specification.status end if specification then local fullname = specification.fullname local document = lpdf.epdf.load(fullname) if document then local namespace = format("lpdf:epa:%s:",file.removesuffix(file.basename(fullname))) local layers = document.layers if layers then for i=1,layers.n do local layer = layers[i] if layer then local tag = namespace .. gsub(layer," ",":") local title = tag if trace_links then report_link("using layer %a",tag) end attributes.viewerlayers.define { -- also does some cleaning tag = tag, -- todo: #3A or so title = title, visible = variables.start, editable = variables.yes, printable = variables.yes, } codeinjections.useviewerlayer(tag) elseif trace_links then report_link("broken layer, index %a",i) end end end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-tab.mkiv0000644000175000017500000002764312130411274024245 0ustar norbertnorbert%D \module %D [ file=anch-pgr, % moved from anch-pgr (1999.08.01) %D version=2011.12.19, % 1999.08.01, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Table Extensions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Table Extensions} %D This is just a playground and functionality might change or even %D dissappear in favour of better solutions. \unprotect \newcount\c_anch_tabs \unexpanded\def\tabl_tabulate_hook_b {\iftrialtypesetting\else \ifpositioning \ifcase\c_tabl_tabulate_noflines % \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_totalnoflines \tabl_tabulate_hook_b_first \else \tabl_tabulate_hook_b_next \fi \fi \fi} \unexpanded\def\tabl_tabulate_hook_e {\iftrialtypesetting\else \ifpositioning \ifcase\c_tabl_tabulate_noflines % \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_totalnoflines \tabl_tabulate_hook_e_first \else \tabl_tabulate_hook_e_next \fi \fi \fi} \unexpanded\def\tabl_tabulate_hook_b_first {\ctxcommand{bcolumn("tabulate:\the\c_anch_tabs:\the\c_tabl_tabulate_column",true)}} \unexpanded\def\tabl_tabulate_hook_b_next {\ctxcommand{bcolumn("tabulate:\the\c_anch_tabs:\the\c_tabl_tabulate_column")}} \unexpanded\def\tabl_tabulate_hook_e_first {\ctxcommand{ecolumn(true)}} \unexpanded\def\tabl_tabulate_hook_e_next {\ctxcommand{ecolumn()}} % \appendtoks \registerparoptions \to \everypar \appendtoks \global\advance\c_anch_tabs\plusone \to \everytabulate %D Beware, the following code is somewhat weird and experimental and might be %D dropped or become a loadable module. %D \macros %D {GFC, GTC, GSC} %D %D The next macros extend tables and tabulation with backgrounds and position %D related features. Areas are specified with symbolic names, and symbolic %D references to the graphics involved. Each table has its own namespace. \newconditional\tablehaspositions \newcount \noftabpositions \newtoks \posXCtoks \def\anch_tabulate_bpos{\bpos} \def\anch_tabulate_epos{\epos} \installcorenamespace{positiontables} \def\tbPOSprefix {\??positiontables\number\noftabpositions:} \def\tablepos {\normalexpanded{\global\posXCtoks\emptytoks\the\posXCtoks}} \let\tabulatepos\tablepos \unexpanded\def\tbXC {\dosingleempty\anch_tables_XC } \unexpanded\def\tbGSC{\dosingleempty\anch_tables_GSC} \unexpanded\def\tbGFC{\dosingleempty\anch_tables_GFC} \unexpanded\def\tbGTC{\dosingleempty\anch_tables_GTC} \def\anch_table_check_state {\iftrialtypesetting \global\settrue\tablehaspositions \firstargumentfalse \fi} \def\anch_tables_XC [#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_XC [#1]\else\expandafter\fi\NC} \def\anch_tables_GSC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GSC[#1]\else\expandafter\NC\fi} \def\anch_tables_GFC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GFC[#1]\else\expandafter\NC\fi} \def\anch_tables_GTC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GTC[#1]\else\expandafter\NC\fi} \def\anch_tables_indeed_XC[#1]% {{\let\NC\relax\processcommalist[#1]\anch_tables_step_XC}} \def\anch_tables_step_XC#1% {\anch_tables_step_indeed_XC[#1]} \def\anch_tables_step_indeed_XC[#1#2]% {\if#1>\anch_tables_indeed_GFC [#2:#2]\else \if#1+\anch_tables_indeed_GFC [#2:#2]\else \if#1<\anch_tables_indeed_GTC [#2:#2]\else \if#1-\anch_tables_indeed_GTC [#2:#2]\else \if#1=\anch_tables_indeed_GSC [#2:#2]\else \anch_tables_indeed_GSC[#1#2:#1#2]\fi\fi\fi\fi\fi} \def\anch_tables_indeed_GSC[#1]% {\processcommalist[#1]\anch_tables_step_GSC} \def\anch_tables_step_GSC#1% {\anch_tables_append_GSC[#1:#1]} \def\anch_tables_append_GSC[#1:#2:#3]% {\doglobal\appendtoks\anch_tables_process_GSC[#1:#2]\to\posXCtoks\NC} \def\anch_tables_process_GSC[#1:#2]% {\remappositionframed{#2}{\tbPOSprefix#1}% \anch_tabulate_bpos{\tbPOSprefix#1}% \doglobal\appendtoks\@EA\anch_tabulate_epos\@EA{\tbPOSprefix#1}\to\posXCtoks} \def\anch_tables_indeed_GFC[#1]% {\doglobal\appendtoks\anch_tables_delayed_GFC[#1]\to\posXCtoks\NC} \def\anch_tables_delayed_GFC[#1]% {\processcommalist[#1]\anch_tables_step_GFC} \def\anch_tables_step_GFC#1% {\anch_tables_process_GFC[#1:#1]} \def\anch_tables_process_GFC[#1:#2:#3]% {\remappositionframed{#2}{\tbPOSprefix#1}% \anch_tabulate_bpos{\tbPOSprefix#1}} \def\anch_tables_indeed_GTC[#1]% {\doglobal\appendtoks\anch_tables_delayed_GTC[#1]\to\posXCtoks\NC} \def\anch_tables_delayed_GTC[#1]% {\doglobal\appendtoks\anch_tables_process_GTC[#1]\to\posXCtoks} \def\anch_tables_process_GTC[#1]% {\processcommalist[#1]\anch_tables_step_GTC} \def\anch_tables_step_GTC#1% {\anch_tables_step_indeed_GTC[#1:#1]} \def\anch_tables_step_indeed_GTC[#1:#2]% {\anch_tabulate_epos{\tbPOSprefix#1}} %D The amount of code to support tables and tabulation is rather %D minimalistic. \let\tabulatepos\tablepos \def\tabulatenormalpos {\iftrialtypesetting % nothing \else\ifconditional\tablehaspositions \hss\tabulatepos\hss \else % nothing \fi\fi} \def\tabulateequalpos {\iftrialtypesetting \tabulateEQ \else\ifconditional\tablehaspositions \tabulateEQpos \else \tabulateEQ \fi\fi} \def\tabulateEQpos {\setbox\scratchbox\hbox{\tabulateEQ}% \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}% \kern-\wd\scratchbox \box\scratchbox} \appendtoks \global\advance\noftabpositions\plusone \global\setfalse\tablehaspositions \to \everytabulate % We need to handle paragraphs as well. \let\anch_tabulate_flush_epos\relax \def\anch_tabulate_bpos_indeed {\bpos} \def\anch_tabulate_epos_indeed#1% {\ifvoid\b_tabl_tabulate_current\c_tabl_tabulate_column \epos{#1}% \glet\anch_tabulate_flush_epos\relax \else \gdef\anch_tabulate_flush_epos{\epos{#1}}% \fi} \def\flushtabulatesplitbox {\box\b_tabl_tabulate \iftrialtypesetting\else\ifconditional\tablehaspositions\anch_tabulate_flush_epos\fi\fi} \appendtoks \let\anch_tabulate_bpos\anch_tabulate_bpos_indeed % ? \let\anch_tabulate_epos\anch_tabulate_epos_indeed % ? \glet\anch_tabulate_flush_epos\relax \to \everytabulate %D In order to prevent potential clashes with abbreviations, postpone the mapping. \appendtoks \let\GSC\tbGSC \let\GFC\tbGFC \let\GTC\tbGTC \let\XC \tbXC \to \everytabulate %D \macros %D {definepositionframed} %D %D The next example show how to provide backgrounds to table cells. First we define %D some framed backgrounds. %D %D \startbuffer %D \definepositionframed[x][background=color,backgroundcolor=red] %D \definepositionframed[y][background=color,backgroundcolor=green] %D \definepositionframed[z][background=color,backgroundcolor=blue] %D \stopbuffer %D %D \typebuffer %D %D % \getbuffer %D %D \startbuffer %D \starttabulate[|c|c|c|] %D \GFC[f:x] this is a small \NC table \NC in which we \NC \FR %D \NC will demonstrate \GFC[g:z] that this \GTC[g] positioning \NC \MR %D \GSC[e:y] mechanism also \GTC[f] works quite well \NC in tables \NC \LR %D \stoptabulate %D \stopbuffer %D %D The table itself defines three areas (a, b and~c) using these frames. %D %D \typebuffer %D % \getbuffer %D %D Tables (based on \TABLE) are supported by: \def\normalTABLEsimplebar {\unskip\!ttRightGlue&\tablepos&} % | \def\normalTABLEcomplexbar{\unskip\!ttRightGlue&\omit\tablepos\!ttAlternateVrule} % \| \def\normalTABLEquote {\unskip\!ttRightGlue&\omit\tablepos&} % " \appendtoks \global\advance\noftabpositions\plusone \global\setfalse\tablehaspositions \to \everytable %D Since we don't want nameclashes: \appendtoks \let\GSC\tbGSC \let\GFC\tbGFC \let\GTC\tbGTC \let\XC \tbXC \to \everytable %D In the previous example, we could have provided an overlay to the framed definition. %D A more direct approach is demonstrated below: %D %D \startbuffer %D \def\cw#1{\color[white]{#1}} %D %D \startMPpositiongraphic{tableshade} %D initialize_area(\MPpos{\MPvar{from}},\MPpos{\MPvar{to}}) ; %D color c ; c := \MPvar{color} ; %D linear_shade(pxy,0,.4c,.9c) ; %D anchor_area(\MPanchor{\MPvar{from}}) ; %D \stopMPpositiongraphic %D %D \setMPpositiongraphic{b:x}{tableshade}{from=b:x,to=e:x,color=red} %D \setMPpositiongraphic{b:y}{tableshade}{from=b:y,to=e:y,color=green} %D \setMPpositiongraphic{b:z}{tableshade}{from=b:z,to=e:z,color=blue} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D The definition of the table looks about the same as the previous one: %D %D \startbuffer %D \starttable[|c|c|c|] %D \GFC[b:z] \cw{this is a small} \NC \cw{table} \NC in which we \NC \FR %D \NC \cw{will demonstrate} \GFC[c:y] \cw{that this} \GTC[c] \cw{positioning} \NC \MR %D \GSC[a:x] \cw{mechanism also} \GTC[b] \cw{works quite well} \NC in tables \NC \LR %D \stoptable %D \stopbuffer %D %D \typebuffer %D %D \getbuffer % \definepositionframed[w][background=color,backgroundcolor=yellow] % \definepositionframed[x][background=color,backgroundcolor=red] % \definepositionframed[y][background=color,backgroundcolor=green] % \definepositionframed[z][background=color,backgroundcolor=blue] % % \starttabulate[|c|c|c|] % \NC this is a small \NC table \NC in which we \NC \FR % \NC will demonstrate \NC that this \NC positioning \NC \MR % \NC mechanism also \NC works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \GFC[f:x] this is a small \GTC table \NC in which we \NC \FR % \NC will demonstrate \GFC[g:z] that this \GTC[g] positioning \NC \MR % \GSC[e:y] mechanism also \GTC[f] works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \GFC[f:x,d:w] this is a small \GTC[d] table \NC in which we \NC \FR % \NC will demonstrate \GFC[g:z] that this \GTC[g] positioning \NC \MR % \GSC[e:y] mechanism also \GTC[f] works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \XC[+f:x] this is a small \XC table \NC in which we \NC \FR % \NC will demonstrate \XC[+g:z] that this \XC[-g] positioning \NC \MR % \XC[=e:y] mechanism also \XC[-f] works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \XC[+f:x,+d:w] this is a small \XC[-d] table \NC in which we \NC \FR % \NC will demonstrate \XC[+g:z] that this \XC[-g] positioning \NC \MR % \XC[=e:y] mechanism also \XC[-f] works quite well \NC in tables \NC \LR % \stoptabulate % evt [b:x] % % \definepositionframed[x][background=color,fillcolor=red] % \definepositionframed[y][background=color,fillcolor=green] % \definepositionframed[z][background=color,fillcolor=blue] \unexpanded\def\remappositionframed#1#2% from to {\copyposition{b:#1}{b:#2}% \copyposition{e:#1}{e:#2}% \anch_positions_set_action{b:#2}{\dopositionaction{b:#1}}} \unexpanded\def\definepositionframed {\dodoubleargument\anch_framed_define} \def\anch_framed_define[#1][#2]% {\anch_positions_set_action{b:#1}{\anch_framed_handle[#1][#2]}} \unexpanded\def\anch_framed_handle {\bgroup \anch_framed_indeed} \unexpanded\def\positionframed {\bgroup \dodoubleempty\anch_framed_indeed} \def\anch_framed_indeed[#1][#2]% {\setbox\scratchbox\hbox {\scratchwidth \dimexpr\MPx{e:#1}-\MPx{b:#1}\relax \scratchdepth \dimexpr\MPy{b:#1}-\MPy{e:#1}+\MPd{e:#1}\relax \scratchheight\dimexpr\scratchdepth+\MPh{b:#1}\relax \lower\scratchdepth\hbox {\framed[\c!width=\scratchwidth,\c!height=\scratchheight,\c!offset=\v!overlay,#2]{}}}% \smashedbox\scratchbox \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mxb.mkii0000644000175000017500000000451111571377075024311 0ustar norbertnorbert\defineMMLsynonym ast midast \defineMMLsynonym Backslash setmn \defineMMLsynonym barwedge barwed \defineMMLsynonym bigcap xcap \defineMMLsynonym bigcirc xcirc \defineMMLsynonym bigcup xcup \defineMMLsynonym bigodot xodot \defineMMLsynonym bigoplus xoplus \defineMMLsynonym bigotimes xotime \defineMMLsynonym bigsqcup xsqcup \defineMMLsynonym bigtriangledown xdtri \defineMMLsynonym bigtriangleup xutri \defineMMLsynonym biguplus xuplus \defineMMLsynonym bigvee xvee \defineMMLsynonym bigwedge xwedge \defineMMLsynonym boxminus minusb \defineMMLsynonym boxplus plusb \defineMMLsynonym boxtimes timesb \defineMMLsynonym cdot sdot \defineMMLsynonym circledast oast \defineMMLsynonym circledcirc ocir \defineMMLsynonym circleddash odash \defineMMLsynonym CircleDot odot \defineMMLsynonym CircleMinus ominus \defineMMLsynonym CirclePlus oplus \defineMMLsynonym CircleTimes otimes \defineMMLsynonym Coproduct coprod \defineMMLsynonym curlyvee cuvee \defineMMLsynonym curlywedge cuwed \defineMMLsynonym ddagger Dagger \defineMMLsynonym diamond diam \defineMMLsynonym divideontimes divonx \defineMMLsynonym dotminus minusd \defineMMLsynonym dotplus plusdo \defineMMLsynonym dotsquare sdotb \defineMMLsynonym doublebarwedge Barwed \defineMMLsynonym intercal intcal \defineMMLsynonym Intersection xcap \defineMMLsynonym intprod iprod \defineMMLsynonym leftthreetimes lthree \defineMMLsynonym oslash osol \defineMMLsynonym rightthreetimes rthree \defineMMLsynonym setminus setmn \defineMMLsynonym smallsetminus ssetmn \defineMMLsynonym SquareIntersection sqcap \defineMMLsynonym SquareUnion sqcup \defineMMLsynonym Star sstarf \defineMMLsynonym star sstarf \defineMMLsynonym Sum sum \defineMMLsynonym Union xcup \defineMMLsynonym UnionPlus uplus \defineMMLsynonym Vee xvee \defineMMLsynonym VerticalTilde wreath \defineMMLsynonym Wedge xwedge \defineMMLsynonym wr wreath context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ini.lua0000644000175000017500000003046212161703335024100 0ustar norbertnorbertif not modules then modules = { } end modules ['lang-ini'] = { version = 1.001, comment = "companion to lang-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- needs a cleanup (share locals) -- discard language when redefined -- 002D : hyphen-minus (ascii) -- 2010 : hyphen -- 2011 : nonbreakable hyphen -- 2013 : endash (compound hyphen) --~ lang:hyphenation(string) string = lang:hyphenation() lang:clear_hyphenation() local type, tonumber = type, tonumber local utfbyte = utf.byte local format, gsub = string.format, string.gsub local concat, sortedkeys, sortedpairs = table.concat, table.sortedkeys, table.sortedpairs local lpegmatch = lpeg.match local settings_to_array = utilities.parsers.settings_to_array local trace_patterns = false trackers.register("languages.patterns", function(v) trace_patterns = v end) local report_initialization = logs.reporter("languages","initialization") local prehyphenchar = lang.prehyphenchar -- global per language local posthyphenchar = lang.posthyphenchar -- global per language local lefthyphenmin = lang.lefthyphenmin local righthyphenmin = lang.righthyphenmin local lang = lang lang.exceptions = lang.hyphenation local new_langage = lang.new languages = languages or {} local languages = languages languages.version = 1.010 languages.registered = languages.registered or { } local registered = languages.registered languages.associated = languages.associated or { } local associated = languages.associated languages.numbers = languages.numbers or { } local numbers = languages.numbers languages.data = languages.data or { } local data = languages.data storage.register("languages/numbers", numbers, "languages.numbers") storage.register("languages/registered",registered,"languages.registered") storage.register("languages/associated",associated,"languages.associated") storage.register("languages/data", data, "languages.data") local nofloaded = 0 local function resolve(tag) local data, instance = registered[tag], nil if data then instance = data.instance if not instance then instance = new_langage(data.number) data.instance = instance end end return data, instance end local function tolang(what) -- returns lang object local tag = numbers[what] local data = tag and registered[tag] or registered[what] if data then local instance = data.lang if not instance then instance = new_langage(data.number) data.instance = instance end return instance end end -- languages.tolang = tolang -- patterns=en -- patterns=en,de local function validdata(dataset,what,tag) if dataset then local data = dataset.data if not data or data == "" then return nil elseif dataset.compression == "zlib" then data = zlib.decompress(data) if dataset.length and dataset.length ~= #data then report_initialization("compression error in %a for language %a","patterns",what,tag) end return data else return data end end end local function loaddefinitions(tag,specification) statistics.starttiming(languages) local data, instance = resolve(tag) local definitions = settings_to_array(specification.patterns or "") if #definitions > 0 then if trace_patterns then report_initialization("pattern specification for language %a: %s",tag,specification.patterns) end local dataused, ok = data.used, false for i=1,#definitions do local definition = definitions[i] if definition == "" then -- error elseif definition == "reset" then -- interfaces.variables.reset if trace_patterns then report_initialization("clearing patterns for language %a",tag) end instance:clear_patterns() elseif not dataused[definition] then dataused[definition] = definition local filename = "lang-" .. definition .. ".lua" local fullname = resolvers.findfile(filename) or "" if fullname == "" then fullname = resolvers.findfile(filename .. ".gz") or "" end if fullname ~= "" then if trace_patterns then report_initialization("loading definition %a for language %a from %a",definition,tag,fullname) end local suffix, gzipped = gzip.suffix(fullname) local defs = table.load(fullname,gzipped and gzip.load) if defs then -- todo: version test ok, nofloaded = true, nofloaded + 1 -- instance:patterns (defs.patterns and defs.patterns .data or "") -- instance:hyphenation(defs.exceptions and defs.exceptions.data or "") instance:patterns (validdata(defs.patterns, "patterns", tag) or "") instance:hyphenation(validdata(defs.exceptions,"exceptions",tag) or "") else report_initialization("invalid definition %a for language %a in %a",definition,tag,filename) end elseif trace_patterns then report_initialization("invalid definition %a for language %a in %a",definition,tag,filename) end elseif trace_patterns then report_initialization("definition %a for language %a already loaded",definition,tag) end end return ok elseif trace_patterns then report_initialization("no definitions for language %a",tag) end statistics.stoptiming(languages) end storage.shared.noflanguages = storage.shared.noflanguages or 0 local noflanguages = storage.shared.noflanguages function languages.define(tag,parent) noflanguages = noflanguages + 1 if trace_patterns then report_initialization("assigning number %a to %a",noflanguages,tag) end numbers[noflanguages] = tag registered[tag] = { tag = tag, parent = parent or "", patterns = "", loaded = false, used = { }, dirty = true, number = noflanguages, instance = nil, -- luatex data structure synonyms = { }, } storage.shared.noflanguages = noflanguages end function languages.setsynonym(synonym,tag) -- convenience function local l = registered[tag] if l then l.synonyms[synonym] = true -- maybe some day more info end end function languages.installed(separator) return concat(sortedkeys(registered),separator or ",") end function languages.current(n) return numbers[n and tonumber(n) or tex.language] end function languages.associate(tag,script,language) -- not yet used associated[tag] = { script, language } end function languages.association(tag) -- not yet used if type(tag) == "number" then tag = numbers[tag] end local lat = tag and associated[tag] if lat then return lat[1], lat[2] end end function languages.loadable(tag,defaultlanguage) -- hack local l = registered[tag] -- no synonyms if l and resolvers.findfile("lang-"..l.patterns..".lua") then return true else return false end end -- a bit messy, we will do all language setting in lua as we can now assign -- and 'patterns' will go away here. function languages.unload(tag) local l = registered[tag] if l then l.dirty = true end end if environment.initex then function languages.getnumber() return 0 end else function languages.getnumber(tag,default,patterns) local l = registered[tag] if l then if l.dirty then if trace_patterns then report_initialization("checking patterns for %a with default %a",tag,default) end -- patterns is already resolved to parent patterns if applicable if patterns and patterns ~= "" then if l.patterns ~= patterns then l.patterns = patterns if trace_patterns then report_initialization("loading patterns for %a using specification %a",tag,patterns) end loaddefinitions(tag,l) else -- unchanged end elseif l.patterns == "" then l.patterns = tag if trace_patterns then report_initialization("loading patterns for %a using tag",tag) end local ok = loaddefinitions(tag,l) if not ok and tag ~= default then l.patterns = default if trace_patterns then report_initialization("loading patterns for %a using default",tag) end loaddefinitions(tag,l) end end l.loaded = true l.dirty = false end return l.number else return 0 end end end -- not that usefull, global values function languages.prehyphenchar (what) return prehyphenchar (tolang(what)) end function languages.posthyphenchar(what) return posthyphenchar(tolang(what)) end function languages.lefthyphenmin (what) return lefthyphenmin (tolang(what)) end function languages.righthyphenmin(what) return righthyphenmin(tolang(what)) end -- e['implementer']= 'imple{m}{-}{-}menter' -- e['manual'] = 'man{}{}{}' -- e['as'] = 'a-s' -- e['user-friendly'] = 'user=friend-ly' -- e['exceptionally-friendly'] = 'excep-tionally=friend-ly' function languages.loadwords(tag,filename) local data, instance = resolve(tag) if data then statistics.starttiming(languages) instance:hyphenation(io.loaddata(filename) or "") statistics.stoptiming(languages) end end function languages.setexceptions(tag,str) local data, instance = resolve(tag) if data then instance:hyphenation(string.strip(str)) -- we need to strip leading spaces end end function languages.hyphenate(tag,str) -- todo: does this still work? local data, instance = resolve(tag) if data then return instance:hyphenate(str) else return str end end -- hyphenation.define ("zerolanguage") -- hyphenation.loadpatterns ("zerolanguage") -- else bug -- hyphenation.loadexceptions("zerolanguage") -- else bug languages.logger = languages.logger or { } function languages.logger.report() local result, r = { }, 0 for tag, l in sortedpairs(registered) do if l.loaded then r = r + 1 result[r] = format("%s:%s:%s",tag,l.parent,l.number) end end return r > 0 and concat(result," ") or "none" end -- must happen at the tex end .. will use lang-def.lua languages.associate('en','latn','eng') languages.associate('uk','latn','eng') languages.associate('nl','latn','nld') languages.associate('de','latn','deu') languages.associate('fr','latn','fra') statistics.register("loaded patterns", function() local result = languages.logger.report() if result ~= "none" then -- return result return format("%s, load time: %s",result,statistics.elapsedtime(languages)) end end) -- statistics.register("language load time", function() -- -- often zero so we can merge that in the above -- return statistics.elapsedseconds(languages, format(", nofpatterns: %s",nofloaded)) -- end) -- interface local getnumber = languages.getnumber function commands.languagenumber(tag,default,patterns) context(getnumber(tag,default,patterns)) end function commands.installedlanguages(separator) context(languages.installed(separator)) end commands.definelanguage = languages.define commands.setlanguagesynonym = languages.setsynonym commands.unloadlanguage = languages.unload commands.setlanguageexceptions = languages.setexceptions context-2013.05.28.20130704/texmf-dist/tex/context/base/x-set-02.mkii0000644000175000017500000000177612161703335024037 0ustar norbertnorbert%D \module %D [ file=x-set-02, %D version=2004.10.31, %D remark=setupx.tex: 1998.07.20 and later, %D title=\CONTEXT\ Setup Mappings, %D subtitle=Macro Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \bgroup \catcode`\<=\@@other \def\setinterfacecomponent#1#2#3% {\setgvalue{\string<#1\string:#2\string>}{#3}} \gdef\getinterfacecomponent#1#2% {\executeifdefined{\string<#1\string:#2\string>}{#2}} \def\setinterfaceconstant{\setinterfacecomponent{constant}} % constant \def\setinterfacevariable{\setinterfacecomponent{variable}} % variable \def\setinterfaceelement {\setinterfacecomponent{string}} % element \def\setinterfacecommand {\setinterfacecomponent{string}} % command \input mult-\userinterfacetag.mkii \egroup \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-abr-04.tex0000644000175000017500000002210012130411274023626 0ustar norbertnorbert%D \module %D [ file=s-abr-01, %D version=1996.01.01, %D title=\CONTEXT\ Style File, %D subtitle=General Abbreviations 1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % \setupsorting[logo][\c!style=\v!capital] % \setupcapitals[\c!title=\v!no] \protect \logo [MKI] {MkI} \logo [MKII] {MkII} \logo [MKIII] {MkIII} \logo [MKIV] {MkIV} %logo [FGA] {fga} %logo [FGBBS] {fgbbs} \logo [ACROBAT] {Acro\-bat} \logo [AFM] {afm} \logo [API] {api} \logo [ALEPH] {Aleph} % {\mathematics{\aleph}} \logo [ALGOL] {ALGOL} \logo [AMS] {ams} \logo [AMSLATEX] {AmS\LATEX} \logo [AMSTEX] {AmS\TeX} \logo [ANSI] {ansi} \logo [ARABTEX] {Arab\TeX} \logo [ASCII] {ascii} \logo [ASCIITEX] {ascii\TeX} \logo [BACHOTEX] {Bacho\TeX} \logo [BIBTEX] {bib\TeX} \logo [BLUESKY] {BlueSky} \logo [BMP] {bmp} \logo [BSD] {bsd} \logo [CCODE] {c} \logo [CALCMATH] {CalcMath} \logo [CD] {cd} \logo [CLD] {cld} \logo [CPU] {cpu} \logo [CDROM] {cdrom} \logo [CID] {cid} \logo [CJK] {cjk} \logo [CMR] {cmr} \logo [CMYK] {cmyk} \logo [CODHOST] {CodHost} \logo [CONTEXT] {Con{\TeX}t} \logo [CSS] {css} \logo [CTAN] {ctan} \logo [CTXTOOLS] {ctxtools} \logo [CWEB] {cweb} \logo [DANTE] {Dante} \logo [DISTILLER] {distiller} \logo [DRATEX] {Dra\TeX} \logo [DSC] {dsc} \logo [DTD] {dtd} \logo [DTK] {dtk} \logo [DTP] {dtp} \logo [DVD] {dvd} \logo [DVI] {dvi} \logo [DVIPDFM] {dvipdfm} \logo [DVIPDFMX] {dvipdfmx} \logo [DVIPOS] {dvipos} \logo [DVIPS] {dvips} \logo [DVIPSONE] {dvipsone} \logo [DVISCR] {dviscr} \logo [DVIWINDO] {dviwindo} \logo [EC] {ec} \logo [EIFFEL] {Eiffel} \logo [EMACS] {emacs} \logo [EMTEX] {em\TeX} \logo [ENCODING] {enc} \logo [ENCTEX] {enc\TeX} \logo [EPS] {eps} \logo [ETEX] {\eTeX} \logo [EUROBACHOTEX] {EuroBacho\TeX} \logo [EUROMATH] {EuroMath} \logo [EUROTEX] {Euro\TeX} \logo [EXAMPLE] {eXaMpLe} \logo [EXAMPLED] {exampled} \logo [EXAMPLEQ] {exampleq} \logo [EXAMPLER] {exampler} \logo [EXAMPLET] {examplet} \logo [EXAMPLEX] {examplex} \logo [EXIMPLE] {eXiMpLe} \logo [FAQ] {faq} \logo [FDF] {fdf} \logo [FONTFORGE] {FontForge} \logo [FOXET] {foXet} \logo [FPTEX] {fp\TeX} \logo [FREEBSD] {FreeBSD} \logo [FTP] {ftp} \logo [GHOSTSCRIPT]{Ghost\-script} \logo [GHOSTVIEW] {Ghost\-view} \logo [GIF] {gif} \logo [GNU] {gnu} \logo [GNUPLOT] {gnuplot} \logo [GS] {Ghost\-Script} \logo [GUST] {Gust} \logo [GWTEX] {gw\TeX} \logo [HSB] {hsb} \logo [HTML] {html} \logo [HTTP] {http} \logo [HZ] {hz} \logo [IBM] {ibm} \logo [IMAGEMAGICK]{ImageMagick} \logo [INITEX] {ini\TeX} \logo [INRSTEX] {inrs\TeX} \logo [IO] {io} \logo [IRCNET] {IRCnet} \logo [ISO] {iso} \logo [JAVA] {Java} \logo [JAVASCRIPT] {Java\-Script} \logo [JPEG] {jpeg} \logo [JPG] {jpg} \logo [JBIG] {jbig} \logo [KPATHSEA] {kpathsea} \logo [KPSE] {kpse} \logo [KPSEWHICH] {kpsewhich} \logo [MKTEXLSR] {mktexlsr} \logo [LAMSTEX] {LamS\TeX} \logo [LATEX] {La\TeX} \logo [LATEXTE] {La\TeX2e} \logo [LATEXTN] {La\TeX2.09} \logo [LINUX] {linux} \logo [LISP] {Lisp} \logo [LPEG] {lpeg} \logo [LUA] {Lua} \logo [LUAJIT] {LuaJIT} \logo [LUATEX] {Lua\TeX} \logo [LUAJITTEX] {Luajit\TeX} \logo [LUATOOLS] {luatools} \logo [MACOSX] {MacOSX} \logo [MACROTEX] {Macro\TeX} \logo [MAKEMPY] {MakeMPY} \logo [MAPPING] {map} \logo [MAPS] {Maps} \logo [MATHML] {MathML} \logo [METAFONT] {MetaFont} \logo [METAPOST] {MetaPost} \logo [METATEX] {Meta\TeX} \logo [MIKTEX] {Mik\TeX} \logo [MLTEX] {ml\TeX} \logo [METATYPE] {MetaType1} \logo [MODULA] {Modula} \logo [MOV] {mov} \logo [MPS] {mps} \logo [MPTOPDF] {mptopdf} \logo [MPLIB] {MPlib} \logo [MSDOS] {msdos} \logo [MSWINDOWS] {MS~Windows} \logo [MTXRUN] {mtxrun} \logo [MTXTOOLS] {mtxtools} \logo [NETPBM] {NetPBM} \logo [NTG] {ntg} \logo [NTS] {nts} \logo [OFM] {ofm} \logo [OMEGA] {Omega} \logo [OPENMATH] {OpenMath} \logo [OPENTYPE] {OpenType} \logo [OPI] {opi} \logo [OTF] {otf} \logo [OTP] {otp} \logo [OVF] {ovf} \logo [PASCAL] {Pascal} \logo [PCTEX] {pc\TeX} \logo [PDF] {pdf} \logo [PDFETEX] {pdfe\TeX} \logo [PDFTEX] {pdf\TeX} \logo [PDFTOOLS] {pdftools} \logo [PDFTOPS] {pdftops} \logo [PERL] {Perl} \logo [PERLTK] {Perl/Tk} \logo [PICTEX] {\PiCTeX} \logo [PK] {pk} \logo [PLAIN] {Plain} \logo [PNG] {png} \logo [POSIX] {posix} \logo [POSTSCRIPT] {Post\-Script} \logo [PPCHTEX] {\PPCHTeX} \logo [PRAGMA] {Pragma ADE} \logo [PRESS] {press} \logo [PRIFIL] {prifil} \logo [PS] {Post\-Script} \logo [PSCHECK] {pscheck} \logo [PSTOEDIT] {pstoedit} \logo [PSTOPAGE] {pstopage} \logo [PSTOPDF] {pstopdf} \logo [PSTRICKS] {pstricks} \logo [RAM] {ram} \logo [READER] {Acro\-bat Reader} \logo [RELAXNG] {Relax\kern.125emNG} \logo [RGB] {rgb} \logo [RLXTOOLS] {rlxtools} \logo [RUBY] {Ruby} \logo [SCITE] {SciTE} \logo [SGML] {sgml} \logo [SI] {si} \logo [SQL] {sql} \logo [TABLE] {\TaBlE} \logo [TCPIP] {tcp/ip} \logo [TDS] {tds} % no sc te \logo [TETEX] {te\TeX} % no sc te \logo [TEX] {\TeX} \logo [TEXADRES] {\TeX adress} \logo [TEXBASE] {\TeX base} \logo [TEXEDIT] {\TeX edit} \logo [TEXEXEC] {\TeX exec} \logo [TEXFONT] {\TeX font} \logo [TEXFORM] {\TeX form} \logo [TEXLIVE] {\TeX Live} \logo [TEXLUA] {\TeX Lua} \logo [TEXMF] {texmf} \logo [TEXMFSTART] {texmfstart} \logo [TEXNL] {tex-nl} \logo [TEXSHOW] {\TeX show} \logo [TEXSPELL] {\TeX spell} \logo [TEXGYRE] {\TeX\ Gyre} \logo [TEXSYNC] {texsync} \logo [TEXTMATE] {TextMate} \logo [TEXTOOLS] {\TeX tools} \logo [TEXUTIL] {\TeX util} \logo [TEXWORK] {\TeX work} \logo [TEXXET] {\TeX\XeT} \def\XeT{XeT} \logo [TFM] {tfm} \logo [TIF] {tif} \logo [TIFF] {tiff} \logo [TIFFINFO] {tiffinfo} \logo [TIFFTAGS] {tifftags} \logo [TMFTOOLS] {tmftools} \logo [TPIC] {tpic} \logo [TPM] {tpm} \logo [TRUETYPE] {TrueType} \logo [TTF] {ttf} \logo [TUG] {tug} \logo [TUGBOAT] {Tug\-Boat} \logo [TUGNEWS] {Tug\-News} \logo [TYPEONE] {Type1} \logo [UCS] {ucs} \logo [UNICODE] {Uni\-code} \logo [UNIX] {Unix} \logo [URI] {uri} \logo [URL] {url} \logo [USA] {usa} \logo [USENET] {usenet} \logo [UTF] {utf} \logo [UTF] {utf} \logo [VF] {vf} \logo [WDT] {wdt} \logo [WEB] {web} \logo [WEBC] {web2c} \logo [WIKI] {Wiki} \logo [WINDOWS] {Windows} \logo [WINNT] {WinNT} \logo [WINNX] {Win9x} \logo [WWW] {www} \logo [WYSIWYG] {wysiwyg} \logo [XDVI] {Xdvi} \logo [XETEX] {\XeTeX} \logo [XFDF] {xfdf} \logo [XHTML] {xhtml} \logo [XINDY] {Xindy} \logo [XML] {xml} \logo [XPATH] {xpath} \logo [XMLTOOLS] {xmltools} \logo [XPDFETEX] {xpdfe\TeX} \logo [XSL] {xsl} \logo [XSLFO] {xsl-fo} \logo [XSLT] {xslt} \logo [XSLTPROC] {xsltproc} \logo [XYPIC] {XYPIC} % wrong logo \logo [YandY] {y\&y} \logo [ZIP] {zip} \def\METAFUN {\MetaFun} \logo [METAFUN] {\MetaFun} \def\SystemSpecialA#1{$\langle\it#1\rangle$} \def\SystemSpecialB#1{{\tttf<#1>}} \def\CATCODE {\SystemSpecialA{catcode}} \def\CATCODES {\SystemSpecialA{catcodes}} \def\DIMENSION {\SystemSpecialA{dimension}} \def\DIMENSIONS {\SystemSpecialA{dimensions}} \def\COUNTER {\SystemSpecialA{counter}} \def\COUNTERS {\SystemSpecialA{counters}} \def\HBOX {\SystemSpecialA{hbox}} \def\HBOXES {\SystemSpecialA{hboxes}} \def\VBOX {\SystemSpecialA{vbox}} \def\VBOXES {\SystemSpecialA{vboxes}} \def\BOX {\SystemSpecialA{box}} \def\BOXES {\SystemSpecialA{boxes}} \def\TOKENLIST {\SystemSpecialA{token list}} \def\TOKENLISTS {\SystemSpecialA{token lists}} \def\NEWLINE {\SystemSpecialA{newline}} \def\SKIP {\SystemSpecialA{skip}} \def\SKIPS {\SystemSpecialA{skips}} \def\MUSKIP {\SystemSpecialA{muskip}} \def\MUSKIPS {\SystemSpecialA{muskips}} \def\MARK {\SystemSpecialA{mark}} \def\MARKS {\SystemSpecialA{marks}} \def\SPACE {\SystemSpecialB{space}} \def\EOF {\SystemSpecialB{eof}} \def\TAB {\SystemSpecialB{tab}} \def\NEWPAGE {\SystemSpecialB{newpage}} \def\NEWLINE {\SystemSpecialB{newline}} \def\THANH {H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh} \def\THANH {H\`an Th\ecircumflexacute\ Th\`anh} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-md5.lua0000644000175000017500000000726012130411274023312 0ustar norbertnorbertif not modules then modules = { } end modules ['l-md5'] = { version = 1.001, author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This also provides file checksums and checkers. if not md5 then md5 = optionalrequire("md5") end if not md5 then md5 = { sum = function(str) print("error: md5 is not loaded (sum ignored)") return str end, sumhexa = function(str) print("error: md5 is not loaded (sumhexa ignored)") return str end, } end local md5, file = md5, file local gsub, format, byte = string.gsub, string.format, string.byte local md5sum = md5.sum local function convert(str,fmt) return (gsub(md5sum(str),".",function(chr) return format(fmt,byte(chr)) end)) end if not md5.HEX then function md5.HEX(str) return convert(str,"%02X") end end if not md5.hex then function md5.hex(str) return convert(str,"%02x") end end if not md5.dec then function md5.dec(str) return convert(str,"%03i") end end -- local P, Cs, lpegmatch = lpeg.P, lpeg.Cs,lpeg.match -- -- if not md5.HEX then -- local function remap(chr) return format("%02X",byte(chr)) end -- function md5.HEX(str) return (gsub(md5.sum(str),".",remap)) end -- end -- -- if not md5.hex then -- local function remap(chr) return format("%02x",byte(chr)) end -- function md5.hex(str) return (gsub(md5.sum(str),".",remap)) end -- end -- -- if not md5.dec then -- local function remap(chr) return format("%03i",byte(chr)) end -- function md5.dec(str) return (gsub(md5.sum(str),".",remap)) end -- end -- if not md5.HEX then -- local pattern_HEX = Cs( ( P(1) / function(chr) return format("%02X",byte(chr)) end)^0 ) -- function md5.HEX(str) return lpegmatch(pattern_HEX,md5.sum(str)) end -- end -- -- if not md5.hex then -- local pattern_hex = Cs( ( P(1) / function(chr) return format("%02x",byte(chr)) end)^0 ) -- function md5.hex(str) return lpegmatch(pattern_hex,md5.sum(str)) end -- end -- -- if not md5.dec then -- local pattern_dec = Cs( ( P(1) / function(chr) return format("%02i",byte(chr)) end)^0 ) -- function md5.dec(str) return lpegmatch(pattern_dec,md5.sum(str)) end -- end function file.needsupdating(oldname,newname,threshold) -- size modification access change local oldtime = lfs.attributes(oldname,"modification") if oldtime then local newtime = lfs.attributes(newname,"modification") if not newtime then return true -- no new file, so no updating needed elseif newtime >= oldtime then return false -- new file definitely needs updating elseif oldtime - newtime < (threshold or 1) then return false -- new file is probably still okay else return true -- new file has to be updated end else return false -- no old file, so no updating needed end end file.needs_updating = file.needsupdating function file.syncmtimes(oldname,newname) local oldtime = lfs.attributes(oldname,"modification") if oldtime and lfs.isfile(newname) then lfs.touch(newname,oldtime,oldtime) end end function file.checksum(name) if md5 then local data = io.loaddata(name) if data then return md5.HEX(data) end end return nil end function file.loadchecksum(name) if md5 then local data = io.loaddata(name .. ".md5") return data and (gsub(data,"%s","")) end return nil end function file.savechecksum(name,checksum) if not checksum then checksum = file.checksum(name) end if checksum then io.savedata(name .. ".md5",checksum) return checksum end return nil end context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-fil.lua0000644000175000017500000000411312130411274024076 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-fil'] = { version = 1.001, comment = "companion to grph-fig.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type = type local trace_run = false trackers.register("graphic.runfile",function(v) trace_run = v end) local report_run = logs.reporter("graphics","run") -- Historically running files is part of graphics processing, so this is why it -- sits here but is part of the job namespace. local allocate = utilities.storage.allocate local collected = allocate() local tobesaved = allocate() local jobfiles = { collected = collected, tobesaved = tobesaved, forcerun = false, -- maybe a directive some day } job.files = jobfiles local function initializer() tobesaved = jobfiles.tobesaved collected = jobfiles.collected end job.register('job.files.collected', tobesaved, initializer) function jobfiles.run(name,action) local oldchecksum = collected[name] local newchecksum = file.checksum(name) if jobfiles.forcerun or not oldchecksum or oldchecksum ~= newchecksum then if trace_run then report_run("processing file, changes in %a, processing forced",name) end local ta = type(action) if ta == "function" then action(name) elseif ta == "string" and action ~= "" then os.execute(action) else report_run("processing file, no action given for processing %a",name) end elseif trace_run then report_run("processing file, no changes in %a, not processed",name) end tobesaved[name] = newchecksum end -- function jobfiles.context(name,options) if type(name) == "table" then local result = { } for i=1,#name do result[#result+1] = jobfiles.context(name[i],options) end return result else jobfiles.run(name,"context ".. (options or "") .. " " .. name) return file.replacesuffix(name,"pdf") end end context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-sys.mkii0000644000175000017500000010035711754241457024361 0ustar norbertnorbert%D \module %D [ file=mult-sys, %D version=1996.06.01, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=System, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In boring module we define a lot of obscure but useful %D system constants. By doing so we save lots of memory while %D at the same time we prevent ourself from typing errors. \writestatus{loading}{ConTeXt Multilingual Macros / System} \unprotect %D The constants are grouped in such a way that there is a %D minimal change of conflicts. %D %D \starttyping %D \definesystemconstants {word} %D \definemessageconstant {word} %D \stoptyping %D %D This commands generate \type{\s!word} and \type{\m!word}. \definesystemconstant {hans} \definesystemconstant {taco} %D First we define some system constants used for both the %D multi||lingual interface and multi||linguag typesetting. \definesystemconstant {afrikaans} \definesystemconstant {af} \definesystemconstant {arabic} \definesystemconstant {ar} \definesystemconstant {catalan} \definesystemconstant {ca} \definesystemconstant {chinese} \definesystemconstant {cn} \definesystemconstant {croatian} \definesystemconstant {hr} \definesystemconstant {czech} \definesystemconstant {cs} \definesystemconstant {cz} \definesystemconstant {danish} \definesystemconstant {da} \definesystemconstant {dutch} \definesystemconstant {nl} \definesystemconstant {english} \definesystemconstant {en} \definesystemconstant {finish} \definesystemconstant {fi} \definesystemconstant {french} \definesystemconstant {fr} \definesystemconstant {german} \definesystemconstant {de} \definesystemconstant {hungarian} \definesystemconstant {hu} \definesystemconstant {italian} \definesystemconstant {it} \definesystemconstant {latin} \definesystemconstant {la} \definesystemconstant {lithuanian} \definesystemconstant {lt} \definesystemconstant {bokmal} \definesystemconstant {nb} \definesystemconstant {norwegian} \definesystemconstant {no} \definesystemconstant {nynorsk} \definesystemconstant {nn} \definesystemconstant {polish} \definesystemconstant {pl} \definesystemconstant {persian} \definesystemconstant {pe} \definesystemconstant {portuguese} \definesystemconstant {pt} \definesystemconstant {romanian} \definesystemconstant {ro} \definesystemconstant {russian} \definesystemconstant {ru} \definesystemconstant {slovak} \definesystemconstant {sk} \definesystemconstant {slovenian} \definesystemconstant {sl} \definesystemconstant {slovene} \definesystemconstant {spanish} \definesystemconstant {es} \definesystemconstant {swedish} \definesystemconstant {sv} \definesystemconstant {turkish} \definesystemconstant {tr} \definesystemconstant {turkmen} \definesystemconstant {tk} \definesystemconstant {gbenglish} \definesystemconstant {gb} \definesystemconstant {ukenglish} \definesystemconstant {uk} \definesystemconstant {usenglish} \definesystemconstant {us} \definesystemconstant {ukrainian} \definesystemconstant {ua} \definesystemconstant {greek} \definesystemconstant {gr} \definesystemconstant {ancientgreek} \definesystemconstant {agr} \definesystemconstant {vietnamese} \definesystemconstant {vi} \definesystemconstant {vn} %D For proper \UNICODE\ support we need a few font related %D constants. \definesystemconstant {BoldItalic} \definesystemconstant {BoldSlanted} \definesystemconstant {Bold} \definesystemconstant {Italic} \definesystemconstant {Regular} \definesystemconstant {Slanted} \definesystemconstant {Unicode} \definesystemconstant {Serif} \definesystemconstant {Regular} \definesystemconstant {Sans} \definesystemconstant {Support} \definesystemconstant {Mono} \definesystemconstant {Type} \definesystemconstant {Math} \definesystemconstant {Handwriting} \definesystemconstant {Calligraphy} \definesystemconstant {Casual} \definesystemconstant {SerifBold} \definesystemconstant {SansBold} \definesystemconstant {MonoBold} \definesystemconstant {SerifItalic} \definesystemconstant {SansItalic} \definesystemconstant {MonoItalic} \definesystemconstant {SerifBoldItalic} \definesystemconstant {SansBoldItalic} \definesystemconstant {MonoBoldItalic} \definesystemconstant {SerifSlanted} \definesystemconstant {SansSlanted} \definesystemconstant {MonoSlanted} \definesystemconstant {SerifBoldSlanted} \definesystemconstant {SansBoldSlanted} \definesystemconstant {MonoBoldSlanted} \definesystemconstant {SerifCaps} \definesystemconstant {SansCaps} \definesystemconstant {MonoCaps} \definesystemconstant {Normal} \definesystemconstant {Caps} \definesystemconstant {mnem} % kind of generic short tag \definesystemconstant {file} \definesystemconstant {name} \definesystemconstant {spec} \definesystemconstant {serif} \definesystemconstant {sans} \definesystemconstant {mono} \definesystemconstant {math} \definesystemconstant {handwriting} \definesystemconstant {calligraphy} \definesystemconstant {casual} \definesystemconstant {fax} \definesystemconstant {fallback} \definesystemconstant {none} \definesystemconstant {default} \definesystemconstant {smallcaps} %D As the name of their define command states, the next set of %D constants is used in the message macro's. \definemessageconstant {check} \definemessageconstant {colors} \definemessageconstant {columns} \definemessageconstant {encodings} \definemessageconstant {regimes} \definemessageconstant {figures} \definemessageconstant {fields} \definemessageconstant {files} \definemessageconstant {floatblocks} \definemessageconstant {fonts} \definemessageconstant {handlings} \definemessageconstant {interactions} \definemessageconstant {javascript} \definemessageconstant {layouts} \definemessageconstant {linguals} \definemessageconstant {references} \definemessageconstant {specials} \definemessageconstant {structures} \definemessageconstant {symbols} \definemessageconstant {systems} \definemessageconstant {lua} \definemessageconstant {textblocks} \definemessageconstant {verbatims} \definemessageconstant {versions} \definemessageconstant {metapost} \definemessageconstant {chemicals} \definemessageconstant {publications} %D Net come some \CONTEXT\ constants, used in the definition %D of private commands: \definesystemconstant {tex} \definesystemconstant {xml} \definesystemconstant {lua} \definesystemconstant {next} \definesystemconstant {pickup} \definesystemconstant {ascii} \definesystemconstant {default} \definesystemconstant {unknown} \definesystemconstant {action} \definesystemconstant {compare} \definesystemconstant {do} \definesystemconstant {dodo} \definesystemconstant {complex} \definesystemconstant {simple} \definesystemconstant {start} \definesystemconstant {stop} \definesystemconstant {dummy} \definesystemconstant {local} \definesystemconstant {global} \definesystemconstant {done} \definesystemconstant {font} \definesystemconstant {link} \definesystemconstant {parent} \definesystemconstant {clone} \definesystemconstant {section} \let\v!sectionlevel\s!section % for old times sake \definesystemconstant {handler} \definesystemconstant {counter} \definesystemconstant {single} \definesystemconstant {multi} \definesystemconstant {hasnumber} \definesystemconstant {hastitle} \definesystemconstant {hascaption} \definesystemconstant {haslevel} \definesystemconstant {mkiv} \definesystemconstant {mkii} \definesystemconstant {entities} \definesystemconstant {normal} \definesystemconstant {bold} \definesystemconstant {italic} \definesystemconstant {slanted} \definesystemconstant {default} \definesystemconstant {smallcaps} \definesystemconstant {text} \definesystemconstant {page} \definesystemconstant {leftpage} \definesystemconstant {rightpage} \definesystemconstant {somewhere} %D A more experienced \TEX\ user will recognize the next four %D constants. We need these because font-definitions are %D partially english. \definesystemconstant {run} \definesystemconstant {fam} \definesystemconstant {text} \definesystemconstant {script} \definesystemconstant {scriptscript} \definesystemconstant {lefthyphenmin} \definesystemconstant {righthyphenmin} \definesystemconstant {lefthyphenchar} \definesystemconstant {righthyphenchar} \definesystemconstant {skewchar} \definesystemconstant {hyphenchar} \definesystemconstant {catcodes} \definesystemconstant {encoding} \definesystemconstant {resource} \definesystemconstant {mapping} \definesystemconstant {language} \definesystemconstant {patterns} \definesystemconstant {rname} \definesystemconstant {rscale} \definesystemconstant {handling} \definesystemconstant {features} \definesystemconstant {fallbacks} \definesystemconstant {goodies} \definesystemconstant {background} \definesystemconstant {ucmap} \definesystemconstant {property} \definesystemconstant {overprint} \definesystemconstant {layer} \definesystemconstant {effect} \definesystemconstant {negative} \definesystemconstant {color} \definesystemconstant {transparency} \definesystemconstant {black} \definesystemconstant {white} \definesystemconstant {format} \definesystemconstant {extensions} \definesystemconstant {initializations} %D Just to be complete we define the standard \TEX\ units. \definesystemconstant {cm} \definesystemconstant {em} \definesystemconstant {ex} \definesystemconstant {mm} \definesystemconstant {pt} \definesystemconstant {sp} \definesystemconstant {bp} \definesystemconstant {in} \definesystemconstant {pc} \definesystemconstant {cm} \definesystemconstant {dd} \definesystemconstant {cc} \definesystemconstant {nd} \definesystemconstant {nc} %D These constants are used for internal and utility %D commands. \definesystemconstant {check} \definesystemconstant {reset} \definesystemconstant {set} \definesystemconstant {entrya} \definesystemconstant {entryb} \definesystemconstant {entryc} \definesystemconstant {entryd} \definesystemconstant {entry} \definesystemconstant {see} \definesystemconstant {from} \definesystemconstant {to} \definesystemconstant {line} \definesystemconstant {page} \definesystemconstant {realpage} \definesystemconstant {userpage} \definesystemconstant {subpage} \definesystemconstant {synonym} \definesystemconstant {reference} \definesystemconstant {main} \definesystemconstant {list} \definesystemconstant {item} \definesystemconstant {itemcount} \definesystemconstant {number} \definesystemconstant {references} \definesystemconstant {between} \definesystemconstant {format} \definesystemconstant {old} \definesystemconstant {thisisblock} \definesystemconstant {thiswasblock} \definesystemconstant {figurepreset} \definesystemconstant {empty} %D Some \CONTEXT\ commands take a two||pass aproach to %D optimize the typesetting. Each two||pass object has its %D own tag. \definesystemconstant {pass} \definesystemconstant {data} \definesystemconstant {float} \definesystemconstant {list} \definesystemconstant {page} \definesystemconstant {subpage} \definesystemconstant {margin} \definesystemconstant {profile} \definesystemconstant {versionbegin} \definesystemconstant {versionend} \definesystemconstant {cross} \definesystemconstant {paragraph} %D A lot of macros use tags to distinguish between different %D objects, e.g. lists and registers. \definesystemconstant {prt} % part (deel) \definesystemconstant {chp} % chapter (hoofdstuk) \definesystemconstant {sec} % section (paragraaf) \definesystemconstant {tit} % title (titel) \definesystemconstant {sub} % subject (onderwerp) \definesystemconstant {mar} % margin (marge) \definesystemconstant {num} % number (doornummeren) \definesystemconstant {def} % definition (doordefinieren) \definesystemconstant {for} % formula (formule) \definesystemconstant {fnt} % footnote (voetnoot) \definesystemconstant {ind} % index (register) \definesystemconstant {lin} % linked index \definesystemconstant {lst} % list (opsomming) \definesystemconstant {flt} % float (plaatsblok) \definesystemconstant {pag} % page (pagina) \definesystemconstant {txt} % text (tekst) \definesystemconstant {ref} % reference (verwijzing) \definesystemconstant {lab} % label (label) \definesystemconstant {aut} % automatic (inhoud, index) \definesystemconstant {vwa} % automatic (illustrations) \definesystemconstant {vwb} % automatic (illustrations) \definesystemconstant {kop} % kop % still dutch %D Reference labels can be tagged by users, for instance by %D means of \type{tag:}. The reference mechanism itself uses %D some tags too. These are definitely not to be used by users. %D Here they are: \definereferenceconstant {cross} {:c:} % cross reference \definereferenceconstant {view} {:v:} % view reference \definereferenceconstant {viewa} {:a:} % view reference test a \definereferenceconstant {viewb} {:b:} % view reference test b \definereferenceconstant {page} {:p:} % page referece \definereferenceconstant {list} {:l:} % list reference \definereferenceconstant {exec} {:e:} % execution reference \definereferenceconstant {form} {:m:} % form reference \definereferenceconstant {syst} {:s:} % system reference \definereferenceconstant {from} {:f:} % from list reference \definereferenceconstant {to} {:t:} % to list reference \definereferenceconstant {object} {:o:} % object reference \definereferenceconstant {driver} {:d:} % driver object reference \definereferenceconstant {widget} {:w:} % field chain reference \definereferenceconstant {java} {:j:} % java scripts %D When we use numbers and dimensions the same applies as %D with the keywords like \type{width} and \type{plus} %D mentioned earlier. \def\!!ten {10} \def\!!twelve {12} \def\!!hundred {100} \def\!!thousand {1000} \def\!!tenthousand {10000} \def\!!maxcard {65536} \def\!!medcard {32768} \def\!!zeropoint {0pt} \def\!!onepoint {1pt} \def\!!twopoint {2pt} \def\!!threepoint {3pt} \def\!!fourpoint {4pt} \def\!!fivepoint {5pt} \def\!!sixpoint {6pt} \def\!!sevenpoint {7pt} \def\!!eightpoint {8pt} \def\!!ninepoint {9pt} \def\!!tenpoint {10pt} \def\!!elevenpoint {11pt} \def\!!twelvepoint {12pt} \def\!!fourteenpointfour {14.4pt} \let\onerealpoint\onepoint % needed for latex % D Another optimization is: % % \let\points\onepoint %D A rough test is: %D %D \starttyping %D \def\TestMe % 7.75 sec on a P4/2G %D {\dimen0=10\points\dimen0=10\points\dimen0=10\points\dimen0=10\points\dimen0=10\points %D \dimen0=10\points\dimen0=10\points\dimen0=10\points\dimen0=10\points\dimen0=10\points} %D %D \def\TestMe % 11.5 sec on a P4/2G %D {\dimen0=10pt\dimen0=10pt\dimen0=10pt\dimen0=10pt\dimen0=10pt% %D \dimen0=10pt\dimen0=10pt\dimen0=10pt\dimen0=10pt\dimen0=10pt} %D %D \def\TestMe % 12.5 sec on a P4/2G %D {\dimen0=10\s!pt\dimen0=10\s!pt\dimen0=10\s!pt\dimen0=10\s!pt\dimen0=10\s!pt% %D \dimen0=10\s!pt\dimen0=10\s!pt\dimen0=10\s!pt\dimen0=10\s!pt\dimen0=10\s!pt} %D %D \testfeatureonce {500000}{\TestMe} %D \stoptyping %D Variables are composed of a command specific tag and a user %D supplied variable (system constant). The first tag \type{ag} %D for instance is available as \type{\??ag} and expands to %D \type{@@ag} in composed variables. % vervallen : hd hr hm vt vr vm tr tn te br bm bo on om or \definesystemvariable {ab} % AlignedBoxes \definesystemvariable {ac} % ACcent \definesystemvariable {ae} % AttributEs \definesystemvariable {ag} % AchterGrond \definesystemvariable {al} % ALinea's \definesystemvariable {am} % interActieMenu \definesystemvariable {an} % ANchor \definesystemvariable {as} % AlignmentSwitch \definesystemvariable {at} % ATtachments \definesystemvariable {ba} % synchronisatieBAlk \definesystemvariable {bc} % BaCkend \definesystemvariable {be} % startstop (BeginEnd) \definesystemvariable {bj} % BlokJe \definesystemvariable {bk} % Blokken (floats) \definesystemvariable {bl} % BLanko \definesystemvariable {bg} % BleedinG \definesystemvariable {bm} % BookMark \definesystemvariable {bo} % BlankO (definitions) \definesystemvariable {bp} % BreakPoint \definesystemvariable {br} % sideBaR \definesystemvariable {bs} % SelecteerBlokken \definesystemvariable {bt} % BuTton \definesystemvariable {bu} % BUffer \definesystemvariable {bv} % Brieven \definesystemvariable {by} % Per \definesystemvariable {cb} % CollectBox \definesystemvariable {cc} % Comment \definesystemvariable {ce} % CasEs \definesystemvariable {cf} % Style (ColorFont) \definesystemvariable {ch} % CHaracterspacing \definesystemvariable {ci} % CItaat \definesystemvariable {ck} % Character Kerning \definesystemvariable {cl} % kleur (CoLor setup) \definesystemvariable {cn} % CollumN \definesystemvariable {cm} % CheMical \definesystemvariable {co} % COmbinaties \definesystemvariable {cp} % CliP \definesystemvariable {cr} % kleur (ColoR) \definesystemvariable {cs} % kleur (ColorSeparation \definesystemvariable {cv} % ConVersie \definesystemvariable {cy} % CrYteria \definesystemvariable {da} % DAte \definesystemvariable {db} % Labels \definesystemvariable {dc} % DroppedCaps \definesystemvariable {dd} % DoorDefinieren \definesystemvariable {de} % DEel \definesystemvariable {di} % DIrections \definesystemvariable {dl} % DunneLijnen \definesystemvariable {dn} % DoorNummeren \definesystemvariable {dm} % DefineMeasure \definesystemvariable {do} % DefinieerOpmaak \definesystemvariable {du} % DUmmy \definesystemvariable {ds} % DoorSpringen \definesystemvariable {ef} % ExternFiguur \definesystemvariable {ec} % EnCoding \definesystemvariable {el} % Elements \definesystemvariable {en} % ENvironments \definesystemvariable {ep} % ExternfiguurPreset \definesystemvariable {eq} % EQalign \definesystemvariable {er} % external resources \definesystemvariable {ex} % ExterneFiguren \definesystemvariable {fa} % font feature \definesystemvariable {fc} % FramedContent \definesystemvariable {fd} % FielD \definesystemvariable {fe} % FoxetExtensions \definesystemvariable {ff} % FontFile \definesystemvariable {fg} % FiGuurmaten \definesystemvariable {fi} % FIle \definesystemvariable {fl} % Floats \definesystemvariable {fm} % ForMules \definesystemvariable {fn} % subformulas \definesystemvariable {fo} % xml FO \definesystemvariable {fp} % FilegroeP \definesystemvariable {fq} % Features \definesystemvariable {fr} % ForM \definesystemvariable {fs} % FileSynonym \definesystemvariable {ft} % FonTs \definesystemvariable {fu} % FontSolution \definesystemvariable {fv} % FontVariant \definesystemvariable {fw} % simpleFonts by Wolfgang \definesystemvariable {fx} % FoXet \definesystemvariable {gr} % GRid \definesystemvariable {ha} % HAng \definesystemvariable {hs} % HSpace \definesystemvariable {ht} % HiddenText \definesystemvariable {ia} % Interactie \definesystemvariable {ib} % InteractieBalk \definesystemvariable {ic} % ICc profiles \definesystemvariable {id} % Index \definesystemvariable {ig} % ItemGroup \definesystemvariable {ih} % InHoudsopgave \definesystemvariable {ii} % stelIndexIn \definesystemvariable {il} % stelInvulRegelsin \definesystemvariable {im} % InMarge \definesystemvariable {in} % INspringen \definesystemvariable {ip} % InsertPages \definesystemvariable {is} % Items \definesystemvariable {it} % stelInTerliniein \definesystemvariable {iv} % stelInvulLijnenin \definesystemvariable {ka} % KAntlijn \definesystemvariable {kd} % KaDerteksten \definesystemvariable {kj} % KopJes (floats) \definesystemvariable {kk} % Kapitalen \definesystemvariable {kl} % KoLommen \definesystemvariable {km} % KenMerk \definesystemvariable {ko} % KOp(pen) \definesystemvariable {kp} % KopPelteken \definesystemvariable {kr} % KoRps \definesystemvariable {ks} % KolomSpan \definesystemvariable {kt} % KonTakten \definesystemvariable {kw} % KontaktWaarde \definesystemvariable {la} % LAnguage \definesystemvariable {lb} % LaBels \definesystemvariable {ld} % LegenDa \definesystemvariable {le} % LinetablE \definesystemvariable {lf} % LocalFigures \definesystemvariable {lg} % taal (LanGuage) \definesystemvariable {li} % LIjst \definesystemvariable {lk} % LinK \definesystemvariable {ll} % Layers \definesystemvariable {lx} % LayerteXt \definesystemvariable {ln} % LijNen \definesystemvariable {lo} % LOgos \definesystemvariable {lt} % LiTeratuur \definesystemvariable {ls} % languageScript \definesystemvariable {ly} % LaYout \definesystemvariable {ma} % MargeAchtergrond \definesystemvariable {mb} % MargeBlokken \definesystemvariable {md} % MoDule \definesystemvariable {me} % MultilingualElement (tags) \definesystemvariable {mg} % Metapost paGe \definesystemvariable {mh} % MultilingualHead \definesystemvariable {mk} % MarKering \definesystemvariable {ml} % MultilingualLabel \definesystemvariable {mm} % MultilingualMath \definesystemvariable {mt} % inline MaTh \definesystemvariable {mo} % Math Options \definesystemvariable {mp} % MetaPost \definesystemvariable {mx} % MatriX \definesystemvariable {ng} % parbuilders \definesystemvariable {nh} % new heads (structure) \definesystemvariable {nn} % structurenumbering \definesystemvariable {nm} % Nummering \definesystemvariable {np} % NaastPlaatsen \definesystemvariable {nr} % Nummeren \definesystemvariable {of} % OFfset \definesystemvariable {oi} % OmlijndInstellingen \definesystemvariable {ol} % OmLijnd \definesystemvariable {od} % Omlijnd Defaults (simple) \definesystemvariable {on} % ONderstreep \definesystemvariable {oo} % OpsOmmingen \definesystemvariable {op} % OPsomming \definesystemvariable {or} % OtpfilteR \definesystemvariable {os} % OffSet \definesystemvariable {ot} % OTpsequence \definesystemvariable {ov} % OVerlay \definesystemvariable {ox} % OffsetBox \definesystemvariable {pa} % PAlet \definesystemvariable {pb} % PuBlication \definesystemvariable {pc} % PageComment \definesystemvariable {pe} % PagEhandler \definesystemvariable {pf} % ProFiel \definesystemvariable {pg} % KoppelPagina \definesystemvariable {ph} % ParagrapH \definesystemvariable {pl} % PLaats \definesystemvariable {pn} % PaginaNummer \definesystemvariable {po} % PrOcessor \definesystemvariable {pp} % PaPier \definesystemvariable {pr} % PRogrammas \definesystemvariable {ps} % PoSitioneren \definesystemvariable {pt} % PageshifT \definesystemvariable {py} % PropertYs \definesystemvariable {pv} % PublicationVariable \definesystemvariable {ra} % RAise \definesystemvariable {rd} % RenDering \definesystemvariable {rf} % ReFereren \definesystemvariable {rg} % ReGel \definesystemvariable {rl} % ReferentieLijst \definesystemvariable {rn} % RegelNummer \definesystemvariable {ro} % ROteren \definesystemvariable {rr} % linenotes \definesystemvariable {rs} % RaSters \definesystemvariable {rt} % RoosTers \definesystemvariable {rv} % ReserVeerfiguur \definesystemvariable {rw} % RenderingWindow \definesystemvariable {sa} % ScAle \definesystemvariable {sb} % SectieBlok \definesystemvariable {sc} % SCherm \definesystemvariable {sd} % SounD \definesystemvariable {se} % SEctie \definesystemvariable {sf} % SpeciFics \definesystemvariable {sg} % SpacinG \definesystemvariable {sh} % ShapeText \definesystemvariable {si} % SplIt \definesystemvariable {sk} % SectieKop \definesystemvariable {sl} % SmalLer \definesystemvariable {sm} % SynonieMen \definesystemvariable {sn} % SubNummer \definesystemvariable {so} % SOrteren \definesystemvariable {sp} % SelecteerPapier \definesystemvariable {sr} % SpacehandleR \definesystemvariable {ss} % Symbool \definesystemvariable {st} % STickers \definesystemvariable {su} % SetUp \definesystemvariable {sv} % SysteemVariabelen \definesystemvariable {sw} % SectionWorld \definesystemvariable {sx} % Selector \definesystemvariable {sy} % SYnchronisatie \definesystemvariable {ta} % TAb \definesystemvariable {tb} % TekstBlokken \definesystemvariable {td} % TextbackgrounDs \definesystemvariable {te} % TEmplate \definesystemvariable {tf} % TypeFace \definesystemvariable {tg} % Tex paGe \definesystemvariable {ti} % TabelInstellingen \definesystemvariable {tk} % Teksten \definesystemvariable {tl} % TekstLijnen \definesystemvariable {tm} % TypesynonyM \definesystemvariable {tp} % TyPen \definesystemvariable {tx} % TeXtflow \definesystemvariable {to} % TOlerance \definesystemvariable {tr} % TRacer \definesystemvariable {ts} % TypeScript \definesystemvariable {tt} % TabulaTe \definesystemvariable {ty} % TYpe \definesystemvariable {uc} % Unicode \definesystemvariable {ui} % UItvoer \definesystemvariable {ur} % URl \definesystemvariable {up} % Utility Program \definesystemvariable {va} % VspAce \definesystemvariable {ve} % VErsie \definesystemvariable {vn} % VoetNoten \definesystemvariable {vs} % VSpacing \definesystemvariable {vt} % VerTical \definesystemvariable {wr} % WitRuimte \definesystemvariable {wl} % WordList \definesystemvariable {xf} % XML File \definesystemvariable {xl} % lxml (mkiv) \definesystemvariable {xm} % xml (mkiv) \definesystemvariable {xp} % XML Processing \definesystemvariable {xy} % schaal \definesystemvariable {za} % ZetspiegelAanpassing %D Next we define some language independant one letter %D variables and keywords. \defineinterfaceconstant {x} {x} % x offset \defineinterfaceconstant {y} {y} % y offset \defineinterfaceconstant {w} {w} % width \defineinterfaceconstant {h} {h} % height \defineinterfaceconstant {s} {s} % size \defineinterfaceconstant {t} {t} % title \defineinterfaceconstant {c} {c} % creator \defineinterfaceconstant {e} {e} % extension \defineinterfaceconstant {f} {f} % file \defineinterfaceconstant {a} {a} % kunnen weg \defineinterfaceconstant {b} {b} % kunnen weg \defineinterfaceconstant {c} {c} % kunnen weg \defineinterfaceconstant {d} {d} % kunnen weg \defineinterfaceconstant {e} {e} % kunnen weg \defineinterfaceconstant {s} {s} \defineinterfaceconstant {r} {r} \defineinterfaceconstant {g} {g} \defineinterfaceconstant {b} {b} \defineinterfaceconstant {c} {c} \defineinterfaceconstant {m} {m} \defineinterfaceconstant {y} {y} \defineinterfaceconstant {k} {k} \defineinterfaceconstant {a} {a} % alternative \defineinterfaceconstant {t} {t} % transparency \defineinterfaceconstant {p} {p} % percentage \defineinterfaceconstant {t} {t} \defineinterfaceconstant {h} {h} \defineinterfaceconstant {b} {b} \defineinterfaceconstant {rgb} {rgb} \defineinterfacevariable {rgb} {rgb} \defineinterfaceconstant {cmyk} {cmyk} \defineinterfacevariable {cmyk} {cmyk} \defineinterfaceconstant {mp} {mp} \defineinterfacevariable {mp} {mp} \defineinterfacevariable {s} {s} \defineinterfacevariable {a} {a} \defineinterfacevariable {b} {b} \defineinterfacevariable {c} {c} \defineinterfacevariable {d} {d} %D Special purpose variables: \def\v!oddeven#1{\ifodd#1\v!odd\else\v!even\fi} %D The names of files and their extensions are fixed. %D \CONTEXT\ uses as less files as possible. Utility files can %D be recognized by the first two characters of the extension: %D \type{tu}. \definefileconstant {utilityfilename} {texutil} \definefileconstant {blockextension} {tub} \definefileconstant {figureextension} {tuf} \definefileconstant {inputextension} {tui} \definefileconstant {outputextension} {tuo} % tup for previous run \definefileconstant {optionextension} {top} \definefileconstant {temporaryextension} {tmp} \definefileconstant {patternsextension} {pat} \definefileconstant {hyphensextension} {hyp} \definefileconstant {fontmapextension} {map} \definefileconstant {bibextension} {bbl} %D These files are loaded at start||up. They may contain system %D specific setups (or calls to other files), old macro's, to %D garantee compatibility and new macro's noy yet present in %D the format. \definefileconstant {errfilename} {cont-err} \definefileconstant {sysfilename} {cont-sys} \definefileconstant {newfilename} {cont-new} \definefileconstant {locfilename} {cont-loc} \definefileconstant {expfilename} {cont-exp} %definefileconstant {usrfilename} {cont-usr} % .tex %definefileconstant {fmtfilename} {cont-fmt} % .tex %D Handy for typescripts (we could use s! instead: \definetypescriptconstant {name} {name} \definetypescriptconstant {default} {default} \definetypescriptconstant {map} {map} \definetypescriptconstant {special} {special} \definetypescriptconstant {size} {size} %D The setup files for the language, font, color and special %D subsystems have a common prefix. This means that we have at %D most three characters for unique filenames. \definefileconstant {colorprefix} {colo-} \definefileconstant {encodingprefix} {enco-} \definefileconstant {filterprefix} {filt-} \definefileconstant {fontprefix} {font-} \definefileconstant {handlingprefix} {hand-} \definefileconstant {javascriptprefix} {java-} \definefileconstant {languageprefix} {lang-} \definefileconstant {mathprefix} {math-} \definefileconstant {metapostprefix} {meta-} \definefileconstant {regimeprefix} {regi-} \definefileconstant {specialprefix} {spec-} \definefileconstant {symbolprefix} {symb-} \definefileconstant {typeprefix} {type-} \definefileconstant {xtagprefix} {xtag-} \definefileconstant {propprefix} {prop-} \definefileconstant {unicprefix} {unic-} \definefileconstant {sortprefix} {sort-} \definefileconstant {prettyprefix} {pret-} \definefileconstant {moduleprefix} {m-} \definefileconstant {styleprefix} {s-} \definefileconstant {xstyleprefix} {x-} \definefileconstant {privateprefix} {p-} \definefileconstant {thirdprefix} {t-} %definefileconstant {beforeprefix} {b-} %definefileconstant {afterprefix} {a-} %D \CONTEXT\ follows different strategies for finding files. %D The macros that are responsible for this 'clever' searching %D make use of two (very important) path specifiers. \definefileconstant {pathseparator} {/} \definefileconstant {currentpath} {.} \definefileconstant {parentpath} {..} %D The way fonts are defined and called upon is language %D independant. We follow the scheme laid down by Knuth in %D Plain \TEX. We'll explain their meaning later. \defineinterfaceconstant {tf} {tf} \defineinterfaceconstant {bf} {bf} \defineinterfaceconstant {bs} {bs} \defineinterfaceconstant {bi} {bi} \defineinterfaceconstant {sl} {sl} \defineinterfaceconstant {it} {it} \defineinterfaceconstant {sc} {sc} \defineinterfaceconstant {rm} {rm} \defineinterfaceconstant {ss} {ss} \defineinterfaceconstant {tt} {tt} \defineinterfaceconstant {hw} {hw} \defineinterfaceconstant {cg} {cg} \defineinterfaceconstant {os} {os} \defineinterfaceconstant {mm} {mm} \defineinterfaceconstant {i} {i} \defineinterfaceconstant {nn} {nn} \defineinterfaceconstant {x} {x} \defineinterfaceconstant {xx} {xx} \defineinterfaceconstant {em} {em} \defineinterfaceconstant {mi} {mi} \defineinterfaceconstant {sy} {sy} \defineinterfaceconstant {ex} {ex} \defineinterfaceconstant {mr} {mr} \defineinterfaceconstant {ma} {ma} \defineinterfaceconstant {mb} {mb} \defineinterfaceconstant {mc} {mc} %D For figure inclusion we need: \defineinterfaceconstant {tif} {tif} \defineinterfaceconstant {eps} {eps} \defineinterfaceconstant {mps} {mps} \defineinterfaceconstant {jpg} {jpg} \defineinterfaceconstant {pdf} {pdf} \defineinterfaceconstant {png} {png} \defineinterfaceconstant {avi} {avi} \defineinterfaceconstant {mov} {mov} \defineinterfaceconstant {svg} {svg} \defineinterfaceconstant {tex} {tex} \defineinterfaceconstant {tmp} {tmp} \defineinterfaceconstant {cld} {cld} %D A careful reader will have noticed that in the module %D \type{mult-ini} we defined \type{\selectinterface}. We were %D not yet able to actually select an interface, because we %D still had to define the constants and variables. Now we've %D done so, selection is permitted. \selectinterface %D Ok, here are some more, because we've got ouselves some %D extensions to \CONTEXT. \definemessageconstant {addresses} \definemessageconstant {documents} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-vir.lua0000644000175000017500000000512712130411274024103 0ustar norbertnorbertif not modules then modules = { } end modules ['data-vir'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, validstrings = string.format, string.valid local trace_virtual = false local report_virtual = logs.reporter("resolvers","virtual") trackers.register("resolvers.locating", function(v) trace_virtual = v end) trackers.register("resolvers.virtual", function(v) trace_virtual = v end) local resolvers = resolvers local finders, openers, loaders, savers = resolvers.finders, resolvers.openers, resolvers.loaders, resolvers.savers local data = { } local n = 0 -- hm, number can be query local template = "virtual://%s.%s" function savers.virtual(specification,content) n = n + 1 -- one number for all namespaces local path = specification.path local filename = format(template,path ~= "" and path or "virtualfile",n) if trace_virtual then report_virtual("saver: file %a saved",filename) end data[filename] = content return filename end function finders.virtual(specification) local original = specification.original local d = data[original] if d then if trace_virtual then report_virtual("finder: file %a found",original) end return original else if trace_virtual then report_virtual("finder: unknown file %a",original) end return finders.notfound() end end function openers.virtual(specification) local original = specification.original local d = data[original] if d then if trace_virtual then report_virtual("opener: file %a opened",original) end data[original] = nil -- when we comment this we can have error messages -- With utf-8 we signal that no regime is to be applied! return openers.helpers.textopener("virtual",original,d,"utf-8") else if trace_virtual then report_virtual("opener: file %a not found",original) end return openers.notfound() end end function loaders.virtual(specification) local original = specification.original local d = data[original] if d then if trace_virtual then report_virtual("loader: file %a loaded",original) end data[original] = nil return true, d, #d end if trace_virtual then report_virtual("loader: file %a not loaded",original) end return loaders.notfound() end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-siz.mkii0000644000175000017500000004115411754241457024347 0ustar norbertnorbert%D \module %D [ file=type-siz, %D version=2001.04.12, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Sizing scripts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[size] \starttypescript [serif] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [rm] [default] \stoptypescript \starttypescript [sans] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [ss] [default] \stoptypescript \starttypescript [mono] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [tt] [default] \stoptypescript \starttypescript [math,boldmath] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [mm] [default] \stoptypescript \starttypescript [bfmath] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [mm] [bfmath] \stoptypescript \starttypescript [handwriting] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [hw] [default] \stoptypescript \starttypescript [calligraphy] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [cg] [default] \stoptypescript \starttypescript [casual] [default] [size] % maps onto rm ! \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [rm] [default] \stoptypescript \starttypescript [all] [dtp] [size] \definebodyfontenvironment [4pt] [\s!text=4pt,\s!script=4pt,\s!scriptscript=4pt, \c!x=4pt,\c!xx=4pt,\c!big=6pt,\c!small=4pt] \definebodyfontenvironment [5pt] [\s!text=5pt,\s!script=5pt,\s!scriptscript=5pt, \c!x=5pt,\c!xx=5pt,\c!big=7pt,\c!small=5pt] \definebodyfontenvironment [6pt] [\s!text=6pt,\s!script=5pt,\s!scriptscript=5pt, \c!x=5pt,\c!xx=5pt,\c!big=8pt,\c!small=5pt] \definebodyfontenvironment [7pt] [\s!text=7pt,\s!script=6pt,\s!scriptscript=5pt, \c!x=6pt,\c!xx=5pt,\c!big=9pt,\c!small=5pt] \definebodyfontenvironment [8pt] [\s!text=8pt,\s!script=6pt,\s!scriptscript=5pt, \c!x=6pt,\c!xx=5pt,\c!big=10pt,\c!small=6pt] \definebodyfontenvironment [9pt] [\s!text=9pt,\s!script=7pt,\s!scriptscript=5pt, \c!x=7pt,\c!xx=5pt,\c!big=11pt,\c!small=7pt] \definebodyfontenvironment [10pt] [\s!text=10pt,\s!script=7pt,\s!scriptscript=5pt, \c!x=8pt,\c!xx=6pt,\c!big=12pt,\c!small=8pt] \definebodyfontenvironment [11pt] [\s!text=11pt,\s!script=8pt,\s!scriptscript=6pt, \c!x=9pt,\c!xx=7pt,\c!big=13pt,\c!small=9pt] \definebodyfontenvironment [12pt] [\s!text=12pt,\s!script=9pt,\s!scriptscript=7pt, \c!x=10pt,\c!xx=8pt,\c!big=14pt,\c!small=10pt] \definebodyfontenvironment [13pt] [\s!text=13pt,\s!script=10pt,\s!scriptscript=8pt, \c!x=11pt,\c!xx=9pt,\c!big=16pt,\c!small=11pt] \definebodyfontenvironment [14pt] [\s!text=14pt,\s!script=10pt,\s!scriptscript=7pt, \c!x=12pt,\c!xx=10pt,\c!big=16pt,\c!small=12pt] \definebodyfontenvironment [16pt] [\s!text=16pt,\s!script=12pt,\s!scriptscript=9pt, \c!x=13pt,\c!xx=11pt,\c!big=18pt,\c!small=14pt] % suboptimal math sizes \definebodyfontenvironment [18pt] [\s!text=18pt,\s!script=16pt,\s!scriptscript=14pt, \c!x=16pt,\c!xx=14pt,\c!big=22pt,\c!small=16pt] \definebodyfontenvironment [22pt] [\s!text=22pt,\s!script=22pt,\s!scriptscript=18pt, \c!x=18pt,\c!xx=16pt,\c!big=28pt,\c!small=18pt] \definebodyfontenvironment [28pt] [\s!text=28pt,\s!script=22pt,\s!scriptscript=18pt, \c!x=22pt,\c!xx=18pt,\c!big=28pt,\c!small=22pt] \stoptypescript \starttypescript [serif] [dtp] [size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [rm] [default] \stoptypescript \starttypescript [sans] [dtp] [size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [ss] [default] \stoptypescript \starttypescript [mono] [dtp] [size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [tt] [default] \stoptypescript \starttypescript [math,boldmath] [dtp] [size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [mm] [default] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[size-mkii] % todo: instead of assuming designsize we will set it explicitly (saves these % -1000 problems at the lua end) % cmr \starttypescript [serif] [computer-modern] [size] \definebodyfont [12pt] [rm] [tf=cmr12, bf=cmbx12, it=cmti12, sl=cmsl12, bi=cmbxti10 at 12pt, bs=cmbxsl10 at 12pt, sc=cmcsc10 at 12pt] \definebodyfont [11pt] [rm] [tf=cmr10 at 11pt, bf=cmbx10 at 11pt, sl=cmsl10 at 11pt, it=cmti10 at 11pt, bi=cmbxti10 at 11pt, bs=cmbxsl10 at 11pt, sc=cmcsc10 at 11pt] \definebodyfont [10pt] [rm] [tf=cmr10, bf=cmbx10, it=cmti10, sl=cmsl10, bi=cmbxti10, bs=cmbxsl10, sc=cmcsc10] \definebodyfont [9pt] [rm] [tf=cmr9, bf=cmbx9, it=cmti9, sl=cmsl9, bi=cmbxti10 at 9pt, bs=cmbxsl10 at 9pt, sc=cmcsc10 at 9pt] \definebodyfont [8pt] [rm] [tf=cmr8, bf=cmbx8, it=cmti8, sl=cmsl8, bi=cmbxti10 at 8pt, bs=cmbxsl10 at 8pt, sc=cmcsc10 at 8pt] \definebodyfont [7pt] [rm] [tf=cmr7, bf=cmbx7, it=cmti10 at 7pt, sl=cmsl10 at 7pt, bi=cmbxti10 at 7pt, bs=cmbxsl10 at 7pt, sc=cmcsc10 at 7pt] \definebodyfont [6pt] [rm] [tf=cmr6, bf=cmbx6, it=cmti10 at 6pt, sl=cmsl10 at 6pt, bi=cmbxti10 at 6pt, bs=cmbxsl10 at 6pt, sc=cmcsc10 at 6pt] \definebodyfont [5pt] [rm] [tf=cmr5, bf=cmbx5, it=cmti10 at 5pt, sl=cmsl10 at 5pt, bi=cmbxti10 at 5pt, bs=cmbxsl10 at 5pt, sc=cmcsc10 at 5pt] \definebodyfont [4pt] [rm] [tf=cmr10 at 4pt, bf=cmbx10 at 4pt, it=cmti10 at 4pt, sl=cmsl10 at 4pt, bi=cmbxti10 at 4pt, bs=cmbxsl10 at 4pt, sc=cmr10 at 4pt] \definebodyfont [14.4pt,17.3pt,20.7pt] [rm] [tf=cmr12 sa 1, bf=cmbx12 sa 1, it=cmti12 sa 1, sl=cmsl12 sa 1, bi=cmbxti10 sa 1, bs=cmbxsl10 sa 1, sc=cmcsc10 sa 1] \stoptypescript \starttypescript [sans] [computer-modern] [size] \definebodyfont [12pt] [ss] [tf=cmss12, bf=cmssbx10 at 12pt, it=cmssi12, sl=cmssi12, bi=cmssbx10 at 12pt, bs=cmssbx10 at 12pt, sc=cmss10 at 12pt] \definebodyfont [11pt] [ss] [tf=cmss10 at 11pt, bf=cmssbx10 at 11pt, it=cmssi10 at 11pt, sl=cmssi10 at 11pt, bi=cmssbx10 at 11pt, bs=cmssbx10 at 11pt, sc=cmss10 at 11pt] \definebodyfont [10pt] [ss] [tf=cmss10, bf=cmssbx10, it=cmssi10, sl=cmssi10, bi=cmssbx10, bs=cmssbx10, sc=cmss10] \definebodyfont [9pt] [ss] [tf=cmss9, bf=cmssbx10 at 9pt, it=cmssi9, sl=cmssi9, bi=cmssbx10 at 9pt, bs=cmssbx10 at 9pt, sc=cmss9] \definebodyfont [8pt] [ss] [tf=cmss8, bf=cmssbx10 at 8pt, it=cmssi8, sl=cmssi8, bi=cmssbx10 at 8pt, bs=cmssbx10 at 8pt, sc=cmss8] \definebodyfont [7pt] [ss] [tf=cmss10 at 7pt, bf=cmssbx10 at 7pt, it=cmssi10 at 7pt, sl=cmssi10 at 7pt, bs=cmssbx10 at 7pt, bi=cmssbx10 at 7pt, sc=cmss10 at 7pt] \definebodyfont [6pt] [ss] [tf=cmss10 at 6pt, bf=cmssbx10 at 6pt, it=cmssi10 at 6pt, sl=cmssi10 at 6pt, bs=cmssbx10 at 6pt, bi=cmssbx10 at 6pt, sc=cmss10 at 6pt] \definebodyfont [5pt] [ss] [tf=cmss10 at 5pt, bf=cmssbx10 at 5pt, it=cmssi10 at 5pt, sl=cmssi10 at 5pt, bs=cmssbx10 at 5pt, bi=cmssbx10 at 5pt, sc=cmss10 at 5pt] \definebodyfont [4pt] [ss] [tf=cmss10 at 4pt, bf=cmssbx10 at 4pt, it=cmssi10 at 4pt, sl=cmssi10 at 4pt, bs=cmssbx10 at 4pt, bi=cmssbx10 at 4pt, sc=cmss10 at 4pt] \definebodyfont [14.4pt,17.3pt,20.7pt] [ss] [tf=cmss12 sa 1, bf=cmssbx10 sa 1, it=cmssi12 sa 1, sl=cmssi12 sa 1, bi=cmssbx10 sa 1, bs=cmssbx10 sa 1, sc=cmss12 sa 1] \stoptypescript \starttypescript [mono] [computer-modern] [size] \definebodyfont [12pt] [tt] [tf=cmtt12, sl=cmsltt10 at 12pt, it=cmitt10 at 12pt, sc=cmtcsc10 at 12pt] \definebodyfont [9pt] [tt] [tf=cmtt9, sl=cmsltt10 at 9pt, it=cmitt10 at 9pt, sc=cmtcsc10 at 9pt] \definebodyfont [8pt] [tt] [tf=cmtt8, sl=cmsltt10 at 8pt, it=cmitt10 at 8pt, sc=cmtcsc10 at 8pt] \definebodyfont [11pt,10pt,7pt,6pt,5pt,4pt] [tt] [tf=cmtt10 sa 1, sl=cmsltt10 sa 1, it=cmitt10 sa 1, sc=cmtcsc10 sa 1] \definebodyfont [14.4pt,17.3pt,20.7pt] [tt] [tf=cmtt12 sa 1, sl=cmsltt10 sa 1, it=cmitt10 sa 1, sc=cmtcsc10 sa 1] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern] [size] % hack to prevent mapping of filenames, watch the space! before % latin modern came aroudn we needed this trick to make sure that % we loaded the raw cmr12 etc instead of the ones mapped onto % an encoding (this trick is no longer needed with lm) % % \definefontsynonym[xcmr12][cmr12 ] % \definefontsynonym[xcmr10][cmr10 ] % \definefontsynonym[xcmr9] [cmr9 ] % \definefontsynonym[xcmr8] [cmr8 ] % \definefontsynonym[xcmr7] [cmr7 ] % \definefontsynonym[xcmr6] [cmr6 ] % \definefontsynonym[xcmr5] [cmr5 ] \definefontsynonym[xcmr12][rm-lmr12] \definefontsynonym[xcmr10][rm-lmr10] \definefontsynonym[xcmr9] [rm-lmr9] \definefontsynonym[xcmr8] [rm-lmr8] \definefontsynonym[xcmr7] [rm-lmr7] \definefontsynonym[xcmr6] [rm-lmr6] \definefontsynonym[xcmr5] [rm-lmr5] \definebodyfont [12pt] [mm] [mr=xcmr12, ex=cmex10 at 12pt, mi=cmmi12, sy=cmsy10 at 12pt] \definebodyfont [11pt] [mm] [mr=xcmr10 at 11pt, ex=cmex10 at 11pt, mi=cmmi10 at 11pt, sy=cmsy10 at 11pt] \definebodyfont [10pt] [mm] [mr=xcmr10, ex=cmex10, mi=cmmi10, sy=cmsy10] \definebodyfont [9pt] [mm] [mr=xcmr9, ex=cmex10 at 9pt, mi=cmmi9, sy=cmsy9] \definebodyfont [8pt] [mm] [mr=xcmr8, ex=cmex10 at 8pt, mi=cmmi8, sy=cmsy8] \definebodyfont [7pt] [mm] [mr=xcmr7, ex=cmex10 at 7pt, mi=cmmi7, sy=cmsy7] \definebodyfont [6pt] [mm] [mr=xcmr6, ex=cmex10 at 6pt, mi=cmmi6, sy=cmsy6] \definebodyfont [5pt] [mm] [mr=xcmr5, ex=cmex10 at 5pt, mi=cmmi5, sy=cmsy5] \definebodyfont [4pt] [mm] [mr=xcmr5 at 4pt, ex=cmex10 at 4pt, mi=cmmi5 at 4pt, sy=cmsy5 at 4pt] \definebodyfont [14.4pt,17.3pt,20.7pt] [mm] [mr=xcmr12 sa 1, ex=cmex10 sa 1, mi=cmmi12 sa 1, sy=cmsy10 sa 1] \stoptypescript \starttypescript [boldmath] [modern,computer-modern,latin-modern] [size] % hack to prevent mapping of filenames, watch the space! \definefontsynonym[xcmb12][cmbx12 ] \definefontsynonym[xcmb10][cmbx10 ] \definefontsynonym[xcmb9] [cmbx9 ] \definefontsynonym[xcmb8] [cmbx8 ] \definefontsynonym[xcmb7] [cmbx7 ] \definefontsynonym[xcmb6] [cmbx6 ] \definefontsynonym[xcmb5] [cmbx5 ] \definebodyfont [12pt] [mm] [mr=xcmb12, ex=cmex10 at 12pt, mi=cmmib10 at 12pt, sy=cmbsy10 at 12pt] \definebodyfont [11pt] [mm] [mr=xcmb10 at 11pt, ex=cmex10 at 11pt, mi=cmmib10 at 11pt, sy=cmbsy10 at 11pt] \definebodyfont [10pt] [mm] [mr=xcmb10, ex=cmex10, mi=cmmib10, sy=cmbsy10] \definebodyfont [9pt] [mm] [mr=xcmb9, ex=cmex10 at 9pt, mi=cmmib10 at 9pt, sy=cmbsy10 at 9pt] \definebodyfont [8pt] [mm] [mr=xcmb8, ex=cmex10 at 8pt, mi=cmmib7 at 8pt, sy=cmbsy7 at 8pt] \definebodyfont [7pt] [mm] [mr=xcmb7, ex=cmex10 at 7pt, mi=cmmib7, sy=cmbsy7] \definebodyfont [6pt] [mm] [mr=xcmb6, ex=cmex10 at 6pt, mi=cmmib5 at 6pt, sy=cmbsy5 at 6pt] \definebodyfont [5pt] [mm] [mr=xcmb5, ex=cmex10 at 5pt, mi=cmmib5, sy=cmbsy5] \definebodyfont [4pt] [mm] [mr=xcmb5 at 4pt, ex=cmex10 at 4pt, mi=cmmib5 at 4pt, sy=cmbsy5 at 4pt] \definebodyfont [14.4pt,17.3pt,20.7pt] [mm] [mr=xcmb12 sa 1, ex=cmex10 sa 1, mi=cmmib10 sa 1, sy=cmbsy10 sa 1] \stoptypescript \starttypescript [bfmath] [modern,computer-modern,latin-modern] [size] % hack to prevent mapping of filenames, watch the space! \definefontsynonym[xcmb12][cmbx12 ] \definefontsynonym[xcmb10][cmbx10 ] \definefontsynonym[xcmb9] [cmbx9 ] \definefontsynonym[xcmb8] [cmbx8 ] \definefontsynonym[xcmb7] [cmbx7 ] \definefontsynonym[xcmb6] [cmbx6 ] \definefontsynonym[xcmb5] [cmbx5 ] \definebodyfont [12pt] [mm] [mrbf=xcmb12, exbf=cmex10 at 12pt, mibf=cmmib10 at 12pt, sybf=cmbsy10 at 12pt] \definebodyfont [11pt] [mm] [mrbf=xcmb10 at 11pt, exbf=cmex10 at 11pt, mibf=cmmib10 at 11pt, sybf=cmbsy10 at 11pt] \definebodyfont [10pt] [mm] [mrbf=xcmb10, exbf=cmex10, mibf=cmmib10, sybf=cmbsy10] \definebodyfont [9pt] [mm] [mrbf=xcmb9, exbf=cmex10 at 9pt, mibf=cmmib10 at 9pt, sybf=cmbsy10 at 9pt] \definebodyfont [8pt] [mm] [mrbf=xcmb8, exbf=cmex10 at 8pt, mibf=cmmib7 at 8pt, sybf=cmbsy7 at 8pt] \definebodyfont [7pt] [mm] [mrbf=xcmb7, exbf=cmex10 at 7pt, mibf=cmmib7, sybf=cmbsy7] \definebodyfont [6pt] [mm] [mrbf=xcmb6, exbf=cmex10 at 6pt, mibf=cmmib5 at 6pt, sybf=cmbsy5 at 6pt] \definebodyfont [5pt] [mm] [mrbf=xcmb5, exbf=cmex10 at 5pt, mibf=cmmib5, sybf=cmbsy5] \definebodyfont [4pt] [mm] [mrbf=xcmb5 at 4pt, exbf=cmex10 at 4pt, mibf=cmmib5 at 4pt, sybf=cmbsy5 at 4pt] \definebodyfont [14.4pt,17.3pt,20.7pt] [mm] [mrbf=xcmb12 sa 1, exbf=cmex10 sa 1, mibf=cmmib10 sa 1, sybf=cmbsy10 sa 1] \stoptypescript \starttypescript [serif] [concrete] [size] \definebodyfont [10pt,11pt,12pt,14.4pt,17.3pt] [rm] [tf=ccr10 sa 1, it=ccti10 sa 1, sl=ccsl10 sa 1, sc=cccsc10 sa 1] \definebodyfont [5pt,6pt,7pt,8pt,9pt] [rm] [it=ccr9 sa 1, sl=ccr9 sa 1, sc=ccr9 sa 1] \definebodyfont [9pt] [rm] [tf=ccr9] \definebodyfont [8pt] [rm] [tf=ccr8] \definebodyfont [7pt] [rm] [tf=ccr7] \definebodyfont [6pt] [rm] [tf=ccr6] \definebodyfont [5pt] [rm] [tf=ccr5] \stoptypescript \starttypescript [math] [euler] [size] \definebodyfont [9pt,10pt,11pt,12pt,14.4pt,17.3pt,20.7pt] [mm] [mr=zeurm10 sa 1, ex=zeuex10 sa 1, sy=zeusm10 sa 1, mi=eufm10 sa 1] \definebodyfont [6pt,7pt,8pt] [mm] [mr=zeurm7 sa 1, sy=zeusm7 sa 1, mi=eufm7 sa 1, ex=zeuex10 sa 1] \definebodyfont [5pt] [mm] [mr=zeurm5, sy=zeusm5, mi=eufm5, ex=zeuex10 at 5pt] \stoptypescript \starttypescript [bfmath] [euler] [size] \definebodyfont [9pt,10pt,11pt,12pt,14.4pt,17.3pt,20.7pt] [mm] [mrbf=zeurb10 sa 1, exbf=zeuex10 sa 1, sybf=zeusb10 sa 1, mibf=eufb10 sa 1] \definebodyfont [6pt,7pt,8pt] [mm] [mrbf=zeurb7 sa 1, sybf=zeusb7 sa 1, mibf=eufb7 sa 1, exbf=zeuex10 sa 1] \definebodyfont [5pt] [mm] [mrbf=zeurb5, sybf=zeusb5, mibf=eufb5, exbf=zeuex10 at 5pt] \stoptypescript \starttypescript [boldmath] [euler] [size] \definebodyfont [9pt,10pt,11pt,12pt,14.4pt,17.3pt,20.7pt] [mm] [mr=zeurb10 sa 1, ex=zeuex10 sa 1, sy=zeusb10 sa 1, mi=eufb10 sa 1] \definebodyfont [6pt,7pt,8pt] [mm] [mr=zeurb7 sa 1, sy=zeusb7 sa 1, mi=eufb7 sa 1, ex=zeuex10 sa 1] \definebodyfont [5pt] [mm] [mr=zeurb5, sy=zeusb5, mi=eufb5, ex=zeuex10 at 5pt] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern,ams] [size] \definebodyfont [17.3pt,14.4pt,12pt,11pt,10pt,9pt] [mm] [ma=msam10 sa 1, mb=msbm10 sa 1] \definebodyfont [8pt,7pt] [mm] [ma=msam7 sa 1, mb=msbm7 sa 1] \definebodyfont [6pt,5pt,4pt] [mm] [ma=msam5 sa 1, mb=msbm5 sa 1] \stoptypescript \starttypescript [math] [times] [size] \mapfontsize [5pt] [6.0pt] \mapfontsize [6pt] [6.8pt] \mapfontsize [7pt] [7.6pt] \mapfontsize [8pt] [8.4pt] \mapfontsize [9pt] [9.2pt] \mapfontsize [10pt] [10pt] \mapfontsize [11pt] [10.8pt] \mapfontsize [12pt] [11.6pt] \mapfontsize [14.4pt] [13.2pt] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-xfdf.mkiv0000644000175000017500000000372212130411274023754 0ustar norbertnorbert%D \module %D [ file=x-xfdf, %D version=2011.09.07, %D title=\CONTEXT\ XML Modules, %D subtitle=\XFDF, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a revival of using \XFDF, but now in a more \MKIV-ish way. We %D supported it long ago already in \MKII\ but never used it at a large %D scale (not that much user interest anyway). \startmodule[xfdf] % see xfdf-001.xfdf and xfdf-001.tex % %D Possible speedup but hardly worth the trouble. % % \startluacode % % local hashes = { } table.setmetatableindex(hashes,function(t,k) local v = { } t[k] = v return v end) % % function xml.functions.xfdf_collect_values(root) % local hash = hashes[root] % for c in xml.collected(root,"/xfdf/fields/field/value") do % hash[xml.parent(c).at.name] = c % end % end % % function xml.functions.xfdf_get_values(root,name) % return hashes[root][name] % end % % function lxml.xfdf_get_values(root,name) % xml.sprint(hashes[lxml.id(root)][name]) % end % % \stopluacode % % \def\xfdfvalue#1#2% % {\ctxlua{lxml.xfdf_get_values("#1","#2")}} \startxmlsetups xfdf:define \xmlsetsetup{#1}{*}{xfdf:*} % \xmlfilter {#1}{./function(xfdf_collect_values)} \stopxmlsetups \xmlregisterns{xfdf}{http://ns.adobe.com/xfdf/} \xmlregisterdocumentsetup{xfdf}{xfdf:define} \startxmlsetups xfdf:value \xmlflush{#1} \stopxmlsetups \def\xfdfload #1#2{\xmlloadonly{#1}{#2}{xfdf}} \def\xfdfvalue#1#2{\xmlfirst{#1}{/xfdf/fields/field[@name='#2']/value}} \def\xfdftext #1#2{\xmlfirst{#1}{/xfdf/fields/field[@name='#2']/value/paragraphs()}} % \startxmlsetups xfdf:b % \bold{\xmlflush{#1}} % \stopxmlsetups % \xfdfload {whatever}{xfdf-001.xfdf} % \xfdfvalue{whatever}{somefield} \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/m-chart.mkii0000644000175000017500000011676712130411274024114 0ustar norbertnorbert%D \module %D [ file=m-chart, %D version=1998.10.10, %D title=\CONTEXT\ Modules, %D subtitle=Flow Charts, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: \localpushmacro/\localpopmacro (dohandleflowchart etc) % todo: make mkiv variant % todo: use dimexpr/numspr % will be redone with layers and dimexpr or even better, by just using % textext .. a nice example of old code %D This is an experimental module. Pieces of code will be moved %D to other modules. More features are possible but will be %D interfaces later. %D %D When finished this module will be documented. The main macro %D is still a rather big one and there is some redundant and %D slow code that needs a clean up. % arrow, dash % crossing % \goto -> \normalgoto % class -> class:name (ref prefix) % c, automatisch geen overlap zoeken % eind eerder chart connecties % relateren aan korps % check op bestaan naam, bestaan shape % auto als extern figuur % subchart % pijlen % focus % ook nog \MPmessage % areapath -> krappe vlak % clippath -> gehele vlak % % offset : clip offset % breedte : breedte cel % hoogte : hoogte cel % dx : halve afstand in breedte (grid breedte = breedte + 2dx) % dy : halve afstand in hoogte (grid hoogte = hoogte + 2dy) % x : x offset (clipping) % y : y offset (clipping) % nx : minimaal aantal cellen horizontaal % ny : minimaal aantal cellen vertikaal % % shape none en geen equivalent maken % % kaderkleur achtergrondkleur % lijnkleur lijndikte % focus focuskaderkleur focusachtergrondkleur % richting % % focus koppelen aan kleur \unprotect \definesorting [flowchart] [flowcharts] [\v!none] % no access \setupsorting [flowchart] [\c!state=\v!stop] % off by default \def\@FLOW@{@FLOW@} \def\@FLOC@{@FLOC@} \def\@FLOX@{@FLOX@} \def\@@FLOW{@@FLOW} \def\@@FLOL{@@FLOL} \def\@@FLOS{@@FLOS} \def\@@FLOF{@@FLOF} \def\@@FLOT{@@FLOT} \def\@@FLOX{@@FLOX} \def\@@MPx {@@MPx} \def\@@MPy {@@MPy} \def\FLOWbufferprefix{flw-} \def\processFLOWbuffer#1{\getbuffer[\FLOWbufferprefix#1]} \def\typeFLOWbuffer #1{\typebuffer[\FLOWbufferprefix#1]} \def\setFLOWname#1#2% funny hack that makes sure that we get {\bgroup % names that are acceptable for METAPOST \lccode`0=`a\lccode`1=`b\lccode`2=`c\lccode`3=`d\lccode`4=`e% \lccode`5=`f\lccode`6=`g\lccode`7=`h\lccode`8=`i\lccode`9=`j% \lccode` =`\_\lccode`-=`\_\lccode`_=`\_% \lowercase{\gdef#1{#2}}% \egroup} % een gobble als default is sneller, en dan alleen setten als % nodig \def\resetFLOWcell {% variables \global\let\FLOWname \empty \global\let\FLOWalign \empty \global\let\FLOWshape \empty \global\let\FLOWlocation \empty \global\let\FLOWtext \empty \global\let\FLOWhelp \empty \global\let\FLOWdestination\empty \global\let\FLOWoverlay \empty \global\let\FLOWfocus \empty \global\let\tFLOWlabel \empty \global\let\bFLOWlabel \empty \global\let\lFLOWlabel \empty \global\let\rFLOWlabel \empty \global\let\bcFLOWlabel \empty \global\let\tcFLOWlabel \empty \global\let\lcFLOWlabel \empty \global\let\rcFLOWlabel \empty \global\let\tFLOWexit \empty \global\let\bFLOWexit \empty \global\let\lFLOWexit \empty \global\let\rFLOWexit \empty % commands \let\name \doFLOWname \let\shape \doFLOWshape \let\destination\doFLOWdestination \let\location \doFLOWlocation \let\focus \doFLOWfocus \let\overlay \doFLOWoverlay \let\figure \doFLOWfigure \let\text \doFLOWtext \let\comment \doFLOWcomment \let\label \doFLOWlabel \let\help \doFLOWhelp \let\connection \doFLOWconnection \let\exit \doFLOWexit % convenience commands \let\locate \doFLOWlocate \let\connect \doFLOWconnect} \let\FLOWcell \s!unknown \let\FLOWshape \s!unknown \let\FLOWdestination\s!unknown \let\FLOWfocus \s!unknown \let\FLOWoverlay \empty \let\FLOWtext \empty \def\doFLOWname#1% {\def\FLOWcell{#1}\setFLOWname\FLOWname{name_#1}\ignorespaces} \def\doFLOWshape#1% {\gdef\FLOWshape{#1}\ignorespaces} \def\doFLOWdestination#1% {\gdef\FLOWdestination{#1}\ignorespaces} \def\doFLOWlocation#1% {\setFLOWlocation#1\end\ignorespaces} \def\doFLOWfocus#1% {\gdef\FLOWfocus{#1}\ignorespaces} \def\doFLOWoverlay#1% {\gdef\FLOWoverlay{#1}\ignorespaces} \def\doFLOWfigure#1% {\defineoverlay[\s!dummy][\overlayfigure{#1}]% \overlay\s!dummy} \def\doFLOWtext {\dosingleempty\dodoFLOWtext} \def\dodoFLOWtext[#1]% % #2% {\gdef\FLOWalign{#1}\gdef\FLOWtext}% {#2}} \def\doFLOWcomment[#1]#2% {\ignorespaces\dogobblesingleempty} \def\doFLOWlabel[#1]#2% wordt dit gebruikt ? {\setgvalue{#1FLOWlabel}{#2}\ignorespaces} \def\doFLOWhelp#1% {\gdef\FLOWhelp{#1}\ignorespaces} \def\doFLOWconnection {\dodoubleempty\dodoFLOWconnection} \def\dodoFLOWconnection[#1][#2]#3% {\ignorespaces} \def\doFLOWconnect {\connection} \def\doFLOWlocate {\location} \def\doFLOWexit[#1]#2% {\setgvalue{#1FLOWexit}{#2}\ignorespaces} \def\startFLOWchart {\bgroup \let\stopFLOWchart\egroup \obeylines % lelijk, buffers nog eens fatsoeneren \dodoubleempty\dostartFLOWchart} \def\dostartFLOWchart[#1][#2]% {\preparenextFLOWchart{#1}{#2}% \dostartbuffer[\FLOWbufferprefix\nofFLOWcharts][startFLOWchart][stopFLOWchart]} \def\defineFLOWchart% {\dodoubleempty\dodefineFLOWchart} \long\def\dodefineFLOWchart[#1][#2]#3% {\preparenextFLOWchart{#1}{#2}% \setbuffer[\FLOWbufferprefix\nofFLOWcharts]#3\endbuffer} \def\preparenextFLOWchart#1#2% {\doglobal\increment\nofFLOWcharts \flowchart{#1}% \setxvalue{\@FLOW@-#1}{\noexpand\dohandleflowchart[\nofFLOWcharts][#2]}} \def\setupFLOWcharts{\dodoubleargument\getparameters[\@@FLOW]} \def\setupFLOWlines {\dodoubleargument\getparameters[\@@FLOL]} \def\setupFLOWshapes{\dodoubleargument\getparameters[\@@FLOS]} \def\setupFLOWfocus {\dodoubleargument\getparameters[\@@FLOF]} \def\setupFLOWsets {\dodoubleargument\getparameters[\@@FLOX]} \setupFLOWcharts [\c!option=, \c!bodyfont=, \c!dot=, % private option \c!width=12\bodyfontsize, \c!height=7\bodyfontsize, \c!maxwidth=, \c!maxheight=, \c!offset=\v!standard, % == auto offset \c!dx=2\bodyfontsize, \c!dy=2\bodyfontsize, \c!nx=0, % 1, \c!ny=0, % 1, \c!x=1, \c!y=1, \c!autofocus=, \c!focus=, \c!background=, % \v!color, \c!backgroundcolor=\s!white, \c!rulethickness=\linewidth, \c!frame=\v!off, \c!framecolor=] \setupFLOWlines [\c!corner=\v!round, \c!arrow=\v!yes, \c!dash=\v!no, \c!radius=.375\bodyfontsize, % 2.5\c!rulethickness \c!color=FLOWlinecolor, \c!rulethickness=.15\bodyfontsize, % 2pt, \c!offset=\v!none] \setupFLOWshapes [\c!default=action, \c!framecolor=FLOWframecolor, \c!background=\v!color, \c!backgroundcolor=FLOWbackgroundcolor, \c!backgroundscreen=\@@rsscreen, \c!rulethickness=.15\bodyfontsize, % 2pt, \c!offset=.5\bodyfontsize] \setupFLOWfocus [\c!framecolor=FLOWfocuscolor, \c!background=\@@FLOSbackground, \c!backgroundcolor=\@@FLOSbackgroundcolor, \c!backgroundscreen=\@@FLOSbackgroundscreen, \c!rulethickness=\@@FLOSrulethickness, \c!offset=\@@FLOSoffset] \definecolor [FLOWfocuscolor] [s=.2] \definecolor [FLOWlinecolor] [s=.5] \definecolor [FLOWframecolor] [s=.7] \definecolor [FLOWbackgroundcolor] [s=.9] \newcounter\includeFLOWx \newcounter\includeFLOWy \def\includeFLOWchart {\dodoubleempty\doincludeFLOWchart} \def\doincludeFLOWchart[#1][#2]% {\pushmacro\includeFLOWx \pushmacro\includeFLOWy \getparameters[FLOWi][x=1,y=1,#2]% \increment(\includeFLOWx,0\FLOWix)\decrement\includeFLOWx \increment(\includeFLOWy,0\FLOWiy)\decrement\includeFLOWy \def\dodoincludeFLOWchart##1% {\doifdefined{\@FLOW@-##1} {\globalpushmacro\dohandleflowchart % was local \gdef\dohandleflowchart[####1][####2]% {\globalpopmacro\dohandleflowchart % was local \resetFLOWlocation \processFLOWbuffer{####1}}% \getvalue{\@FLOW@-##1}}}% \processcommalist[#1]\dodoincludeFLOWchart \popmacro\includeFLOWx \popmacro\includeFLOWy} \def\resetFLOWlocation {\globallet\lastFLOWx\!!zerocount \globallet\lastFLOWy\!!zerocount} \def\dosetFLOWlocation[#1#2]#3#4% {\processaction [#1#2] [ +=>\scratchcounter\numexpr#4+ 1+#3\relax, -=>\scratchcounter\numexpr#4- 1+#3\relax, +#2=>\scratchcounter\numexpr#4+#2+#3\relax, -#2=>\scratchcounter\numexpr#4-#2+#3\relax, \s!default=>\scratchcounter\numexpr#4 +#3\relax, \s!unknown=>\scratchcounter\numexpr0#1#2+#3\relax]% \xdef#4{\the\scratchcounter}} \def\setFLOWlocation#1,#2\end {\dosetFLOWlocation[#1\empty]\includeFLOWx\lastFLOWx \dosetFLOWlocation[#2\empty]\includeFLOWy\lastFLOWy \xdef\FLOWlocation{\lastFLOWx,\lastFLOWy}} \def\FLOWshapes {node, action, procedure, product, decision, archive, loop, wait, subprocedure, singledocument, multidocument, sub procedure, single document, multi document, up, down, left, right} \def\FLOWlines {up, down, left, right} \def\FLOWsetconnect#1% {\donefalse \let\cFLOWfrom\empty \let\cFLOWto\empty \let\zFLOWfrom\!!zerocount \let\zFLOWto\!!zerocount \handletokens#1\with\doFLOWsetconnect \ifx\cFLOWto\empty\let\cFLOWfrom\empty\fi} \def\doFLOWsetconnect#1% {\ifx #1p% \ifdone\def\zFLOWto{+1}\else\def\zFLOWfrom{+1}\fi \else\ifx#1+% \ifdone\def\zFLOWto{+1}\else\def\zFLOWfrom{+1}\fi \else\ifx#1n% \ifdone\def\zFLOWto{-1}\else\def\zFLOWfrom{-1}\fi \else\ifx#1-% \ifdone\def\zFLOWto{-1}\else\def\zFLOWfrom{-1}\fi \else\ifdone \edef\cFLOWto{\FLOWconnector#1}% \else \edef\cFLOWfrom{\FLOWconnector#1}% \donetrue \fi\fi\fi\fi\fi} \def\FLOWconnector#1% {\if#1bbottom\else\if#1ttop\else\if#1lleft\else\if#1rright\fi\fi\fi\fi} \newif\ifFLOWscaling \FLOWscalingtrue \def\@@FLOW@@offset{\@@FLOWoffset} \def\getFLOWchart {\dodoubleempty\dogetFLOWchart} \def\dogetFLOWchart[#1][#2]% {\doifundefinedelse{\@FLOW@-#1} {\writestatus{FLOW}{unknown chart #1}% \framed [\c!width=12\bodyfontsize,\c!height=8\bodyfontsize] {\tttf [chart #1]}} {\dodogetFLOWchart[#1][#2]}} \def\dodogetFLOWchart[#1][#2]% to be split a bit more {\vbox\bgroup \insidefloattrue \forgetall \dontcomplain % \offinterlineskip % we now explicitly use \nointerlineskip later on \def\dohandleflowchart[##1][##2]% {\def\currentFLOWnumber{##1}% \getparameters[\@@FLOW][##2]}% \getvalue{\@FLOW@-#1}% \getparameters[\@@FLOW][#2]% dubbelop ? \doifsomething{\@@FLOWautofocus} {\checkFLOWautofocus}% %\message{AUTOSHAPE 3: (\@@FLOWx,\@@FLOWy)->(\@@FLOWnx,\@@FLOWny)}\wait \global\let\FLOWwidth \@@FLOWnx \global\let\FLOWheight\@@FLOWny \let\startFLOWcell\startFLOWcellA \resetFLOWlocation \processFLOWbuffer\currentFLOWnumber \ifcase\@@FLOWnx\relax \let\@@FLOWnx\FLOWwidth \fi \ifcase\@@FLOWny\relax \let\@@FLOWny\FLOWheight \fi \doifnothing{\@@FLOWmaxwidth\@@FLOWmaxheight}{\FLOWscalingfalse}% \ifFLOWscaling \doifnothing{\@@FLOWmaxwidth }{\let\@@FLOWmaxwidth \maxdimen}% \doifnothing{\@@FLOWmaxheight}{\let\@@FLOWmaxheight\maxdimen}% \scratchcounter\bodyfontpoints \doloop % NOG FONTSWITCH OM EX EN EM TE LATEN WERKEN {\ifnum\scratchcounter>1 % NU DIMENSIONS IN TERMS OF BODYFONTSIZE \bodyfontsize=\the\scratchcounter pt \dimen0=\@@FLOWmaxwidth \dimen2=\@@FLOWwidth \dimen4=\@@FLOWdx \advance\dimen2 2\dimen4 \dimen2=\@@FLOWnx\dimen2 \advance\dimen2 2\dimen4 \ifdim\dimen2>\dimen0 \advance\scratchcounter \minusone \else \dimen0=\@@FLOWmaxheight \dimen2=\@@FLOWheight \dimen4=\@@FLOWdy \advance\dimen2 2\dimen4 \dimen2=\@@FLOWny\dimen2 \advance\dimen2 2\dimen4 \ifdim\dimen2>\dimen0 \advance\scratchcounter \minusone \else \exitloop \fi \fi \else \exitloop \fi}% \expanded{\switchtobodyfont[\the\scratchcounter pt]}% \forgetall % \offinterlineskip % needed ? \else\ifx\@@FLOWbodyfont\empty\else \expanded{\switchtobodyfont[\@@FLOWbodyfont]}% \expanded ? \fi\fi \global\let\FLOWcells\empty \dimen0=\@@FLOWwidth \edef\FLOWshapewidth{\the\dimen0}% \dimen2=\@@FLOWdx \advance\dimen0 2\dimen2 \edef\FLOWgridwidth{\the\dimen0}% \dimen0=\@@FLOWheight \edef\FLOWshapeheight{\the\dimen0}% \dimen2=\@@FLOWdy \advance\dimen0 2\dimen2 \edef\FLOWgridheight{\the\dimen0}% \scratchdimen=\@@FLOSrulethickness \edef\@@FLOSrulethickness{\the\scratchdimen}% \scratchdimen=\@@FLOFrulethickness \edef\@@FLOFrulethickness{\the\scratchdimen}% \scratchdimen=\@@FLOLrulethickness \edef\@@FLOLrulethickness{\the\scratchdimen}% \ifdim\@@FLOLradius<2.5\scratchdimen \scratchdimen=2.5\scratchdimen \edef\@@FLOLradius{\the\scratchdimen}% \ifdim\@@FLOLradius>\@@FLOWdx \scratchdimen=\@@FLOWdx \edef\@@FLOLradius{\the\scratchdimen}% \fi \ifdim\@@FLOLradius>\@@FLOWdy \scratchdimen=\@@FLOWdy \edef\@@FLOLradius{\the\scratchdimen}% \fi \else \scratchdimen=\@@FLOLradius \edef\@@FLOLradius{\the\scratchdimen}% \fi \processaction % magic 2.5 [\@@FLOWoffset] [ \v!none=>\scratchdimen=-2.5\scratchdimen, \v!overlay=>\scratchdimen=-2.5\scratchdimen, \v!standard=>\scratchdimen=\scratchdimen, \s!unknown=>\scratchdimen=\@@FLOWoffset, \s!default=>\scratchdimen=-2.5\scratchdimen]% \edef\@@FLOW@@offset{\the\scratchdimen}% \forgetall \offinterlineskip \resetMPdrawing \doglobal\newcounter\FLOWcomment \startMPdrawing if unknown context_char : input mp-char.mpii ; fi ; grid_width := \FLOWgridwidth ; grid_height := \FLOWgridheight ; shape_width := \FLOWshapewidth ; shape_height := \FLOWshapeheight ; connection_line_width := \@@FLOLrulethickness ; connection_smooth_size := \@@FLOLradius ; connection_arrow_size := \@@FLOLradius ; connection_dash_size := \@@FLOLradius ; currentpicture := nullpicture ; begin_chart(0,\FLOWwidth,\FLOWheight); reverse_y := true ; chart_offset := \@@FLOW@@offset ; \stopMPdrawing \doifelsenothing\@@FLOWbackgroundcolor {\startMPdrawing chart_background_color := white ; \stopMPdrawing} {\startMPdrawing chart_background_color := \MPcolor{\@@FLOWbackgroundcolor} ; \stopMPdrawing}% \doif\@@FLOWoption\v!test {\startMPdrawing show_con_points := true ; show_mid_points := true ; show_all_points := true ; \stopMPdrawing}% \processaction % private [\@@FLOWdot] [ \v!yes=>\startMPdrawing show_con_points := true ; show_mid_points := true ; show_all_points := true ; \stopMPdrawing, \s!unknown=>\startMPdrawing show_\@@FLOWdot_points := true ; \stopMPdrawing]% \doglobal\newcounter\FLOWcomment \let\startFLOWcell\startFLOWcellB \resetFLOWlocation \processFLOWbuffer\currentFLOWnumber \doglobal\newcounter\FLOWcomment \let\startFLOWcell\startFLOWcellC \resetFLOWlocation \processFLOWbuffer\currentFLOWnumber \startMPdrawing clip_chart(\@@FLOWx,\@@FLOWy,\@@FLOWnx,\@@FLOWny) ; end_chart ; \stopMPdrawing \MPdrawingdonetrue \setbox0\hbox {\MPstaticgraphictrue \MPshiftdrawingfalse \getMPdrawing}% \def\MPmessage##1% {\writestatus{MP charts}{##1}}% \def\MPposition##1##2##3% {\setvalue{\@@MPx##1}{##2}\setvalue{\@@MPy##1}{##3}}% \def\MPclippath##1##2##3##4% {\def\clipMPllx{##1bp}\def\clipMPlly{##2bp}% \def\clipMPurx{##3bp}\def\clipMPury{##4bp}}% \def\MPareapath##1##2##3##4% {\def\areaMPllx{##1bp}\def\areaMPlly{##2bp}% \def\areaMPurx{##3bp}\def\areaMPury{##4bp}}% \getMPdata \doglobal\newcounter\FLOWcomment \let\startFLOWcell\startFLOWcellD \setbox2\vbox to \ht0 {\forgetall % \offinterlineskip \resetFLOWlocation \processFLOWbuffer\currentFLOWnumber\vss}% \setbox2\hbox {\hskip\@@FLOW@@offset\lower\@@FLOW@@offset\box2}% \wd2\wd0\ht2\ht0\dp2\dp0 \let\startFLOWcell\startFLOWcellE \setbox4\vbox to \ht0 {\forgetall % \offinterlineskip \resetFLOWlocation \processFLOWbuffer\currentFLOWnumber\vss}% \setbox4\hbox {\hskip\@@FLOW@@offset\lower\@@FLOW@@offset\box4}% \wd4\wd0\ht4\ht0\dp4\dp0 \doifelse\@@FLOWoption\v!test {\setbox6\vbox {\forgetall \vskip\@@FLOW@@offset \hskip\@@FLOW@@offset \basegrid [\c!x=\@@FLOWx,\c!nx=\@@FLOWnx,\c!dx=\withoutpt\FLOWgridwidth, \c!y=\@@FLOWy,\c!ny=\@@FLOWny,\c!dy=\withoutpt\FLOWgridheight, \c!xstep=1,\c!ystep=1, \c!unit=pt,\c!location=\v!middle]}% \wd6\wd0\ht6\ht0\dp6\dp0 \setbox8\vbox {\forgetall \offinterlineskip \vskip\@@FLOW@@offset \dostepwiserecurse\@@FLOWy\@@FLOWny\plusone {\vbox to \FLOWgridheight {\vfill \hskip\@@FLOW@@offset \hbox {\dostepwiserecurse\@@FLOWx\@@FLOWnx\plusone {\hbox to \FLOWgridwidth {\hfill \framed [\c!framecolor=red, \c!width=\FLOWshapewidth, \c!height=\FLOWshapeheight] {}% \hfill}}} \vfill}}}% \wd8\wd0\ht8\ht0\dp8\dp0 \framed [\c!offset=\v!overlay,\c!framecolor=green] {\hbox{\box4\hskip-\wd0\box0\hskip-\wd2\box2\hskip-\wd6\box6\hskip-\wd8\box8}}} {\framed [\c!offset=\v!overlay, \c!frame=\@@FLOWframe, \c!rulethickness=\@@FLOWrulethickness, \c!framecolor=\@@FLOWframecolor, \c!background=\@@FLOWbackground, \c!backgroundcolor=\@@FLOWbackgroundcolor] {\hbox{\box4\hskip-\wd0\box0\hskip-\wd2\box2}}}% %\message{[\FLOWcells]}\wait \egroup} % Pass A \long\def\startFLOWcellA#1\stopFLOWcell% {\resetFLOWcell \ignorespaces#1\unskip \expandafter\getFLOWlocationA\FLOWlocation\end \ignorespaces} \def\getFLOWlocationA#1,#2\end {\ifnum0#1>\FLOWwidth \xdef\FLOWwidth {#1}\fi \ifnum0#2>\FLOWheight\xdef\FLOWheight{#2}\fi} % Pass B % % beware: the - after \@FLOC@ is needed since name can be % empty and we don't want to redefine \@FLOC@ itself by % mistake \long\def\startFLOWcellB#1\stopFLOWcell {\resetFLOWcell\ignorespaces#1\unskip \setxvalue{\@FLOC@-\FLOWname}{\FLOWlocation}% kost veel cs's \ifx\FLOWshape\empty \global\let\FLOWshape\@@FLOSdefault \fi \doifnot\FLOWshape{none} % {\v!none} {\ExpandBothAfter\doifinsetelse{\FLOWshape}{\FLOWshapes} {\edef\FLOWshapetag{shape_\FLOWshape}% beter \expanded \@EA\setFLOWname\@EA\FLOWshapetag\@EA{\FLOWshapetag}} {\doifnumberelse\FLOWshape {\let\FLOWshapetag\FLOWshape} {\let\FLOWshapetag\empty}}% \ifx\FLOWshapetag\empty \else \ExpandBothAfter\doifinsetelse{\FLOWshape}{\FLOWlines} {\chardef\FLOWstate0 } {\ExpandBothAfter\doifcommonelse{\FLOWcell,\FLOWfocus}{\@@FLOWfocus} {\chardef\FLOWstate1 } {\chardef\FLOWstate2 }}% \startMPdrawing begin_sub_chart ; \ifcase\FLOWstate shape_line_color := \MPcolor{\@@FLOLcolor} ; shape_fill_color := \MPcolor{\@@FLOLcolor} ; shape_line_width := \@@FLOLrulethickness ; \or shape_line_color := \MPcolor{\@@FLOFframecolor} ; shape_fill_color := \MPcolor{\@@FLOFbackgroundcolor} ; shape_line_width := \@@FLOFrulethickness ; \or shape_line_color := \MPcolor{\@@FLOSframecolor} ; shape_fill_color := \MPcolor{\@@FLOSbackgroundcolor} ; shape_line_width := \@@FLOSrulethickness ; \fi %\ifx\FLOWoverlay\empty % peepshape := false ; %\else % peepshape := true ; %\fi peepshape := \ifx\FLOWoverlay\empty false \else true \fi ; new_shape(\FLOWlocation,\FLOWshapetag) ; end_sub_chart ; \stopMPdrawing \fi}% \ignorespaces} % Pass C \long\def\startFLOWcellC#1\stopFLOWcell% {\resetFLOWcell \pushmacro\lastFLOWx \pushmacro\lastFLOWy \ignorespaces#1\unskip % makes sure that vars are set \popmacro\lastFLOWy \popmacro\lastFLOWx \let\connection\doFLOWconnectionC \ignorespaces#1\unskip} \def\FLOWorigin{0,0} \def\doFLOWdisplace[#1,#2,#3]% experiment {dsp_x := #1 ; dsp_y := #2 ;} \def\doFLOWconnectionC {\dodoubleempty\dodoFLOWconnectionC} \def\dodoFLOWconnectionC[#1][#2]#3% {\doglobal\increment\FLOWcomment \setFLOWname\otherFLOWname{name_#3}% \doifdefinedelse{\@FLOC@-\FLOWname} {\edef\FLOWfrom{\getvalue{\@FLOC@-\FLOWname}}} {\let \FLOWfrom \FLOWorigin}% \ifx\FLOWfrom\FLOWorigin \else \doifdefinedelse{\@FLOC@-\otherFLOWname} {\edef\FLOWto {\getvalue{\@FLOC@-\otherFLOWname}}} {\let \FLOWto \FLOWorigin}% \ifx\FLOWto\FLOWorigin \else \FLOWsetconnect{#1}% \ifx\cFLOWfrom\empty \else \doifelse\@@FLOLcorner\v!round {\startMPdrawing smooth := true ; \stopMPdrawing} {\startMPdrawing smooth := false ; \stopMPdrawing}% \doifelse\@@FLOLdash\v!yes {\startMPdrawing dashline := true ; \stopMPdrawing} {\startMPdrawing dashline := false ; \stopMPdrawing}% \doifelse\@@FLOLarrow\v!yes {\startMPdrawing arrowtip := true ; \stopMPdrawing} {\startMPdrawing arrowtip := false ; \stopMPdrawing}% \doifelse\@@FLOLoffset\v!none {\startMPdrawing touchshape := true ; \stopMPdrawing} {\startMPdrawing touchshape := false ; \stopMPdrawing}% %\doifsomething{#2} % {\startMPdrawing % \doFLOWdisplace[0#2,0,0]% % \stopMPdrawing}% \startMPdrawing \doFLOWdisplace[0#2,0,0]% connection_line_color := \MPcolor{\@@FLOLcolor} ; connection_line_width := \@@FLOLrulethickness ; connect_\cFLOWfrom_\cFLOWto (\FLOWfrom,\zFLOWfrom) (\FLOWto,\zFLOWto) ; \doFLOWdisplace[0,0,0]% \stopMPdrawing \fi \fi \fi \ignorespaces} % Pass D \long\def\startFLOWcellD#1\stopFLOWcell {\resetFLOWcell \pushmacro\lastFLOWx \pushmacro\lastFLOWy \ignorespaces#1\unskip % presets vars \popmacro\lastFLOWy \popmacro\lastFLOWx \let\doprocessFLOWcell\doprocessFLOWcellD \expandafter\doprocessFLOWcellD\FLOWlocation\end \let\connection\doFLOWconnectionD \let\comment\doFLOWcommentD \ignorespaces#1\unskip\ignorespaces} \def\doFLOWconnectionD {\dodoubleempty\dodoFLOWconnectionD} \def\dodoFLOWconnectionD[#1][#2]#3% {\doglobal\increment\FLOWcomment \ignorespaces} \def\doFLOWcommentD[#1]#2% {\bgroup \let\FLOW \middlebox \let\FLOWb \bottombox \let\FLOWbl\bottomleftbox \let\FLOWbr\bottomrightbox \let\FLOWt \topbox \let\FLOWtl\topleftbox \let\FLOWtr\toprightbox \let\FLOWl \leftbox \let\FLOWlt\lefttopbox \let\FLOWlb\leftbottombox \let\FLOWr \rightbox \let\FLOWrt\righttopbox \let\FLOWrb\rightbottombox \let\FLOWc \middlebox %\ifdefined{FLOW#1}% \ifcase0\getvalue{\@@MPx\FLOWcomment}\getvalue{\@@MPy\FLOWcomment}\relax \else \ifdim\getvalue{\@@MPx\FLOWcomment}\s!bp<\areaMPllx\relax\else \ifdim\getvalue{\@@MPx\FLOWcomment}\s!bp>\areaMPurx\relax\else \ifdim\getvalue{\@@MPy\FLOWcomment}\s!bp<\areaMPlly\relax\else \ifdim\getvalue{\@@MPy\FLOWcomment}\s!bp>\areaMPury\relax\else \dimen0=\getvalue{\@@MPx\FLOWcomment}\s!bp \advance\dimen0 -\@@FLOW@@offset \advance\dimen0 -\clipMPllx \dimen2=\clipMPury \advance\dimen2 -\@@FLOW@@offset \advance\dimen2 -\getvalue{\@@MPy\FLOWcomment}\s!bp \setbox\scratchbox\hbox{\strut#2}% \boxoffset.5\bodyfontsize \setbox\scratchbox\hbox{\hskip\dimen0\lower\dimen2\getvalue{FLOW#1}{\box\scratchbox}}% \smashbox\scratchbox \box\scratchbox \boxoffset\zeropoint \nointerlineskip % really needed \fi \fi \fi \fi \fi %\fi \egroup \ignorespaces} % pass D \def\dophaseoneFLOWcellX#1#2% {\!!counta#1\relax \!!countb#2\relax \!!countc\@@FLOWx \!!countd\@@FLOWy \advance\!!countc \@@FLOWnx \advance\!!countd \@@FLOWny \advance\!!countc \minusone \advance\!!countd \minusone \ifnum\!!counta<\@@FLOWx\relax \donefalse \else\ifnum\!!counta>\!!countc \donefalse \else\ifnum\!!countb<\@@FLOWy\relax \donefalse \else\ifnum\!!countb>\!!countd \donefalse \else \donetrue \fi\fi\fi\fi} \def\dophasetwoFLOWcellX {\advance\!!counta -\@@FLOWx \advance\!!counta \plusone \advance\!!countb -\@@FLOWy \advance\!!countb \plusone \dimen0=\FLOWgridwidth \dimen0=\!!counta\dimen0 \advance\dimen0 -\FLOWgridwidth \dimen4=\FLOWgridwidth \advance\dimen4 -\FLOWshapewidth \advance\dimen0 .5\dimen4 \dimen2=\FLOWgridheight \dimen2=\!!countb\dimen2 \dimen4=\FLOWgridheight \advance\dimen4 -\FLOWshapeheight \advance\dimen2 -.5\dimen4 \edef\FLOWdx{\the\dimen0}% \edef\FLOWdy{\the\dimen2}} \def\positionFLOWzero% assumes \FLOWdx and \FLOWdy are set {\setbox0\hbox{\hskip\FLOWdx\lower\FLOWdy\box0}% \smashbox0\box0 \nointerlineskip} % new, needed since we somehow reset that \def\doFLOWtlabel#1#2#3% {\scratchdimen\ifcase#2 \zeropoint\else\@@FLOWdy\fi \setbox0\hbox{\hskip\dimen2\raise\scratchdimen \hbox{\raise\dimen4\hbox{#1{\strut#3}}}}% \positionFLOWzero}% \def\doFLOWblabel#1#2#3% {\scratchdimen\ifcase#2 \zeropoint\else\@@FLOWdy\fi \setbox0\hbox{\hskip\dimen2\raise-\scratchdimen \hbox{#1{\strut#3}}}% \positionFLOWzero}% \def\doFLOWllabel#1#2#3% {\scratchdimen\ifcase#2 \zeropoint\else\@@FLOWdx\fi \setbox0\hbox{\hskip-\scratchdimen\raise\dimen6 \hbox{#1{\strut#3}}}% \positionFLOWzero}% \def\doFLOWrlabel#1#2#3% {\scratchdimen\ifcase#2 \zeropoint\else\@@FLOWdx\fi \setbox0\hbox{\hskip\dimen0\hskip\scratchdimen \hbox{\raise\dimen6\hbox{#1{\strut#3}}}}% \positionFLOWzero} \def\doprocessFLOWcellD#1,#2\end {\dophaseoneFLOWcellX{#1}{#2}% \ifdone \dophasetwoFLOWcellX \doglobal\addtocommalist\FLOWcell\FLOWcells \def\FLOWx{#1}% \def\FLOWy{#2}% \directsetup{flowcell}% \setbox0\hbox {\ifx\FLOWalign\empty\else \setupframed [\c!align=\v!normal,\c!bottom=\vfill,\c!top=\vfill]% \@EA\processallactionsinset\@EA [\FLOWalign] [t=>{\setupframed[\c!bottom=\vfill,\c!top=]}, b=>{\setupframed[\c!bottom=,\c!top=\vfill]}, l=>{\setupframed[\c!align=\v!right]}, r=>{\setupframed[\c!align=\v!left]}, m=>{\setupframed[\c!align=\v!middle]}, c=>{\setupframed[\c!align=\v!middle]}]% \fi \doifelse\FLOWshape{none} % {\v!none} {\setupframed[\c!offset=\v!overlay]} {\setupframed[\c!offset=\@@FLOSoffset]}% \framed [\c!frame=\v!off,\c!background=flowcell, \c!width=\FLOWshapewidth,\c!height=\FLOWshapeheight] {\FLOWtext}}% \showFLOWhelp0 \ifx\FLOWdestination\empty\else \setbox0\hbox {\setupinteraction[\c!color=,\c!contrastcolor=]% \gotobox{\box0}[\FLOWdestination]}% \fi \positionFLOWzero \dimen0=\FLOWshapewidth \dimen2=.5\dimen0 \dimen4=\FLOWshapeheight\dimen6=.5\dimen4 \boxoffset.5\bodyfontsize \doFLOWtlabel \righttopbox0\tFLOWlabel \doFLOWblabel\rightbottombox0\bFLOWlabel \doFLOWllabel \lefttopbox0\lFLOWlabel \doFLOWrlabel \righttopbox0\rFLOWlabel \doFLOWtlabel \topbox0\tcFLOWlabel % for me only \doFLOWblabel \bottombox0\bcFLOWlabel % for me only \doFLOWllabel \leftbox0\lcFLOWlabel % for me only \doFLOWrlabel \rightbox0\rcFLOWlabel % for me only \ifnum#1=\@@FLOWx\relax \doFLOWllabel \leftbox1\lFLOWexit \fi \ifnum#1=\!!countc \doFLOWrlabel \rightbox1\rFLOWexit \fi \ifnum#2=\@@FLOWy\relax \doFLOWtlabel \topbox1\tFLOWexit \fi \ifnum#2=\!!countd \doFLOWblabel \bottombox1\bFLOWexit \fi \boxoffset\zeropoint \fi} % For Willy Egger: % % \startsetups flowcell % \definelayer % [flowcell] % [width=\FLOWshapewidth, % height=\FLOWshapeheight] % \setlayerframed % [flowcell] % [preset=rightbottom,offset=1ex] % [frame=off] % {\tx(\FLOWx,\FLOWy)} % \stopsetups % Pass E \long\def\startFLOWcellE#1\stopFLOWcell {\resetFLOWcell \ignorespaces#1\unskip \let\doprocessFLOWcell\doprocessFLOWcellE \expandafter\doprocessFLOWcell\FLOWlocation\end} \def\doprocessFLOWcellE#1,#2\end % redundant {\ifx\FLOWoverlay\empty \else \dophaseoneFLOWcellX{#1}{#2}% \ifdone \dophasetwoFLOWcellX \edef\FLOWdx{\the\dimen0}% \edef\FLOWdy{\the\dimen2}% \setbox0\hbox {\framed [%\c!frame=\v!off, \c!background={\@@FLOWbackground,\FLOWoverlay}, \c!backgroundcolor=\@@FLOSbackgroundcolor, \c!width=\FLOWshapewidth,\c!height=\FLOWshapeheight] {}}% \positionFLOWzero \fi \fi} % Pass F \def\checkFLOWautofocus {\def\@@FLOWminx{100}\let\@@FLOWminy\@@FLOWminx \def\@@FLOWmaxx {0}\let\@@FLOWmaxy\@@FLOWmaxx \def\@@FLOWabsx {0}\let\@@FLOWabsy\@@FLOWabsx \let\startFLOWcell\startFLOWcellF \resetFLOWlocation \processFLOWbuffer\currentFLOWnumber %\message{AUTOSHAPE 1: (\@@FLOWminx,\@@FLOWminy)->(\@@FLOWmaxx,\@@FLOWmaxy)}% \ifnum\@@FLOWabsx<\@@FLOWmaxx\let\@@FLOWmaxx\@@FLOWabsx\fi \ifnum\@@FLOWabsy<\@@FLOWmaxy\let\@@FLOWmaxy\@@FLOWabsy\fi %\message{AUTOSHAPE 2: (\@@FLOWminx,\@@FLOWminy)->(\@@FLOWmaxx,\@@FLOWmaxy)}% \donetrue \ifnum\@@FLOWminx=100 \donefalse\fi \ifnum\@@FLOWminy=100 \donefalse\fi \ifnum\@@FLOWmaxx=0 \donefalse\fi \ifnum\@@FLOWmaxy=0 \donefalse\fi \doFLOWcheckF\@@FLOWx\@@FLOWminx\@@FLOWmaxx\@@FLOWnx \doFLOWcheckF\@@FLOWy\@@FLOWminy\@@FLOWmaxy\@@FLOWny} \def\startFLOWcellF#1\stopFLOWcell% {\resetFLOWcell \ignorespaces#1\unskip \expandafter\doFLOWlocationF\FLOWlocation\end}% \def\doFLOWlocationF#1,#2\end% {\ifnum#1>\@@FLOWabsx\def\@@FLOWabsx{#1}\fi \ifnum#2>\@@FLOWabsy\def\@@FLOWabsy{#2}\fi \ExpandBothAfter\doifinset{\FLOWcell}{\@@FLOWautofocus} {\dodoFLOWlocationF{#1}<-\@@FLOWminx \dodoFLOWlocationF{#1}>+\@@FLOWmaxx \dodoFLOWlocationF{#2}<-\@@FLOWminy \dodoFLOWlocationF{#2}>+\@@FLOWmaxy}} \def\dodoFLOWlocationF#1#2#3#4% {\ifnum#1#2#4\relax \!!counta=#1\advance\!!counta #31\relax \edef#4{\ifnum\!!counta<1 1\else\the\!!counta\fi}% \fi} \def\doFLOWcheckF#1#2#3#4% {\ifdone \let#1=#2% \!!counta=#3% \advance\!!counta \plusone\advance\!!counta -#2\relax \ifnum\!!counta<1 \!!counta=1 \fi \edef#4{\the\!!counta}% \else \let#1\!!plusone \let#4\!!zerocount % no {1} \fi} % \useFLOWchart[name][parent][setting,setting][additional settings] % \useFLOWchart[name][parent][additional settings] \let\currentFLOWchart\empty \def\useFLOWchart {\doquadrupleempty\douseFLOWchart} \def\douseFLOWchart[#1][#2][#3][#4]% name parent sets mainsettings {\iffourthargument \setvalue{\@FLOW@--#1}[##1]{\setgetFLOWchart[#2][#3][#4,##1]}% \else \checkparameters[#3]% \ifparameters \setvalue{\@FLOW@--#1}[##1]{\setgetFLOWchart[#2][][#3,##1]}% \else \setvalue{\@FLOW@--#1}[##1]{\setgetFLOWchart[#2][#3][##1]}% \fi \fi} \def\setgetFLOWchart[#1][#2][#3]% {\def\docommand##1{}% cell line focus ? \processcommalist[#2]\docommand \getFLOWchart[#1][#3]} \def\doFLOWchart[#1][#2]% {\hbox\bgroup\vbox\bgroup % vmode suppresses spaces \def\currentFLOWchart{#1}% \doifundefinedelse{\@FLOW@--#1} {\getFLOWchart[#1][#2]} {\getvalue{\@FLOW@--#1}[#2]}% \egroup\egroup} \def\FLOWchart% {\dodoubleempty\doFLOWchart} %D A hook into the help system. \def\showFLOWhelp#1% {\doifhelpinfo\FLOWhelp {\setbox#1=\hbox {\setbox\scratchbox=\hbox{\lower\@@FLOWdy\hbox {\helpbutton [\c!width=\wd0,\c!color=,\c!height=\@@FLOWdy,\c!frame=\v!no]% [\FLOWhelp]}}% \smashbox\scratchbox \setbox#1=\vbox {\forgetall\offinterlineskip\box#1\box\scratchbox}% \box#1}}} %D The next section is dedicated to splitting up charts. \def\getFLOWsize[#1]% {\bgroup\let\dodogetFLOWchart\dogetFLOWsize\FLOWchart[#1]\egroup} \def\dogetFLOWsize[#1][#2]% {\setbox\scratchbox=\vbox {\globallet\FLOWmaxwidth \!!zerocount \globallet\FLOWmaxheight\!!zerocount \def\getFLOWlocation##1,##2\end {\ifnum0##1>\FLOWmaxwidth \xdef\FLOWmaxwidth {##1}\fi \ifnum0##2>\FLOWmaxheight\xdef\FLOWmaxheight{##2}\fi}% \resetFLOWcell \long\def\startFLOWcell##1\stopFLOWcell {{##1\expandafter\getFLOWlocation\FLOWlocation\end}}% \def\dohandleflowchart[##1][##2]% {\resetFLOWlocation \processFLOWbuffer{##1}}% \getvalue{\@FLOW@-#1}}} \def\setupFLOWsplit% {\dodoubleargument\getparameters[\@@FLOT]} \setupFLOWsplit% [\c!nx=3,\c!ny=3, \c!dx=1,\c!dy=1, \c!command=, \c!marking=\v!on, \c!before=,\c!after=] \def\FLOWsplitx {1} \def\FLOWsplity {1} \def\FLOWsplitnx{1} \def\FLOWsplitny{1} \def\FLOWcharts {\dodoubleempty\doFLOWcharts} %D While splitting, the following variables are available: %D %D \starttyping %D \FLOWsplitnx \FLOWsplitny \FLOWsplitx \FLOWsplity %D \stoptyping \def\doFLOWcharts[#1][#2]% {\bgroup \getFLOWsize[#1]% \dodoFLOWcharts\relax \global\let\FLOWsplitnx\FLOWsplitx \global\let\FLOWsplitny\FLOWsplity \dodoFLOWcharts{\dododoFLOWcharts[#1][#2]}% \egroup} \def\dodoFLOWcharts#1% {\def\@@FLOTx{1}% \global\let\FLOWsplitx\@@FLOTx \doloop {\def\@@FLOTy{1}% \global\let\FLOWsplity\@@FLOTy \doloop {\bgroup \scratchcounter\FLOWmaxwidth \advance\scratchcounter -\@@FLOTx \advance\scratchcounter \plusone \ifnum\scratchcounter<\@@FLOTnx\edef\@@FLOTnx{\the\scratchcounter}\fi \scratchcounter\FLOWmaxheight \advance\scratchcounter -\@@FLOTy \advance\scratchcounter \plusone \ifnum\scratchcounter<\@@FLOTny\edef\@@FLOTny{\the\scratchcounter}\fi #1% does something with the float, or not \egroup \increment(\@@FLOTy,\@@FLOTny)% \ifnum\@@FLOTy>\FLOWmaxheight \exitloop \else \doglobal\increment\FLOWsplity \decrement(\@@FLOTy,\@@FLOTdy)% \fi}% \increment(\@@FLOTx,\@@FLOTnx)% \ifnum\@@FLOTx>\FLOWmaxwidth \exitloop \else \doglobal\increment\FLOWsplitx \decrement(\@@FLOTx,\@@FLOTdx)% \fi}} \def\dododoFLOWcharts[#1][#2]% {\bgroup \@@FLOTbefore \doifnot\@@FLOTmarking\v!on{\let\cuthbox\hbox}% \cuthbox {\@@FLOTcommand {\FLOWchart[#1][#2, \c!x=\@@FLOTx,\c!nx=\@@FLOTnx, \c!y=\@@FLOTy,\c!ny=\@@FLOTny]}}% \@@FLOTafter \egroup} %D An example of splitting is given below: %D %D \starttyping %D \setupFLOWsplit %D [nx=5,ny=10, %D dx=0,dy=0, %D before=, %D after=\page] %D %D \FLOWcharts[mybigflow] %D \stoptyping %D %D Or, one can say: %D %D \starttyping %D \splitfloat %D {\placefigure{What a big flowchart this is!}} %D {\FLOWcharts[mybigflow]} %D \stoptyping %D \macros %D {typeFLOWchart} %D %D For documentation purposes the following macro is %D provided. Watch the use of the first and last line hooks, %D which is needed because the start and stop commands are %D not part of the buffer. \def\typeFLOWchart[#1]% {\bgroup \def\dohandleflowchart[##1][##2]{\typeFLOWbuffer{##1}}% \defconvertedargument\firstverbatimfileline{\startFLOWchart[#1]}% \defconvertedargument\lastverbatimfileline {\stopFLOWchart}% \getvalue{\@FLOW@-#1} \egroup} %D New: %D %D \starttyping %D \setupFLOWcharts[command=\Whow] %D %D \startFLOWset[convert-en] % [tag][convert-en] %D \subFLOWchart[a][x=1,y=1,nx=3,ny=3] %D \subFLOWchart[b][x=1,y=2,nx=3,ny=3] %D \subFLOWchart[c][x=2,y=1,nx=3,ny=3] %D \stopFLOWset %D %D \def\Whow#1% %D {\ifnum\currentFLOWset=1 \framed{Some Chart}\fi} %D %D \FLOWset[convert-en] % [tag] %D %D \def\Whow#1% %D {\setuphead[state=high] %D \startstandardmakeup %D \centerbox{#1} %D \stopstandardmakeup} %D %D \FLOWset[convert-en] % [tag] %D \stoptyping \def\startFLOWset {\dodoubleempty\dostartFLOWset} \def\dostartFLOWset[#1][#2]#3\stopFLOWset % tag name data {\ifsecondargument \long\setvalue{\@FLOX@#1}{\dohandleFLOWset{#1}{#2}{#3}}% \else \long\setvalue{\@FLOX@#1}{\dohandleFLOWset{#1}{#1}{#3}}% \fi} \long\def\dohandleFLOWset#1#2#3% tag name data {\bgroup \def\subFLOWchart {\dodoubleempty\dosubFLOWchart}% \def\dosubFLOWchart[##1][##2]% subtag settings {\ifsecondargument \dodohandleFLOWset{#1}{##1}{#2}{##2}% \else \subFLOWchart[][##1]% \fi}% #3% \egroup} \def\dodohandleFLOWset#1#2#3#4% tag subtag name settings {\increment\currentFLOWset \bgroup \@@FLOXcommand {\ifnum\currentFLOWset=1 \pagereference[#1]\fi \doifsomething{#2} {\setupreferencing[\c!prefix=]% \pagereference[#1:#2]% -:#1:#2 \setupreferencing[\c!prefix=#1:#2]}% \FLOWchart[#3][#4]}% \egroup} \def\FLOWset[#1]% {\newcounter\currentFLOWset \doifdefinedelse{\@FLOX@#1} {\getvalue{\@FLOX@#1}} {\dodohandleFLOWset{#1}{}{#1}{}}} \newcounter\currentFLOWset \setupFLOWsets [\c!command=] %D This will be an option: % \def\startFLOWchart% % {\dodoubleempty\dostartFLOWchart} % % \long\def\dostartFLOWchart[#1][#2]#3\stopFLOWchart % {\preparenextFLOWchart{#1}{#2}% % \long\setgvalue{\FLOWbufferprefix\nofFLOWcharts}{#3}} % % \long\def\dodefineFLOWchart[#1][#2]#3% % {\preparenextFLOWchart{#1}{#2}% % \long\setgvalue{\FLOWbufferprefix\nofFLOWcharts}{#3}} % % \def\processFLOWbuffer#1{\getvalue{\FLOWbufferprefix#1}} % \def\typeFLOWbuffer #1{[Sorry, no verbatim chart #1 available.]} %D The \XML\ interface: \startXMLdefinitions flowchart \defineXMLargument [flowchartdefinition] {\defineFLOWchart[\XMLpar{flowchartdefinition}{identifier}{unknown}]} \defineXMLpickup [flowcell] {\startFLOWcell \defineXMLargument[name]{\unspaceafter\name}% \defineXMLargument[shape]{\unspaceafter\shape}% \defineXMLnestedargument[text]{\text}} {\stopFLOWcell} \defineXMLenvironment [location] % global unspace/store {\bgroup\defineXMLpush[x]\defineXMLpush[y]} {\XMLunspace{x}\XMLunspace{y}% \expanded{\egroup\noexpand\location{\XMLpop{x},\XMLpop{y}}}} \defineXMLenvironment [connection] {\bgroup\defineXMLpush[type]\defineXMLpush[name]}% {\XMLunspace{type}\XMLunspace{name}% \expanded{\egroup\noexpand\connection[\XMLpop{type}]{\XMLpop{name}}}} \defineXMLsingular [flowchart] {\expanded{\FLOWchart[\XMLpar{flowchart}{identifier}{unknown}]}} \defineXMLdirective [flowchart] [shapes] \setupFLOWshapes \defineXMLdirective [flowchart] [lines] \setupFLOWlines \stopXMLdefinitions \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-ini.mkii0000644000175000017500000004644711754241457024273 0ustar norbertnorbert%D \module %D [ file=java-ini, %D version=1998.01.30, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 JavaScript Macros / Initialization} % BUG: preamble zonder used/used en split % todo: lua sanitizer % JavaScript support is under development. In the near future % a slightly different model will be used. The JScode stuff % will probably become just auto function inclusion and the % JS_* things will disappear. First I have to find a way to % deal with global variables so the 'uses' thing will remain. % ook p{ref} % documentation should be corrected to JS( % Also, obeylines will be supported. \unprotect %D \JAVA\ support is not implemented as a generic support %D module. The main reason for this is that passing system %D variables to a \JAVASCRIPT\ is closely related to other core %D macros. %D \TEX\ is not the right tool to check the \JAVA\ code; the %D most we can do is reporting some passed variables: \newif\iftraceJScode \traceJScodefalse \let\traceJScode\traceJScodetrue %D A bit out of place, but not dangerous: \bgroup \catcode127=\@@letter \gdef\delcharacter{^^7f} \egroup %D The number of passed variables is minimalized by setting the %D next switch. \newif\ifminimalizeJScode \minimalizeJScodetrue %D \macros %D {JS*} %D %D Because \JAVASCRIPT's are activated by the user, for %D instance by activating on a button, their support is closely %D related to the referencing mechanism. Integration takes %D place by %D %D \starttyping %D \goto{calculate total}[Sum()] %D \stoptyping %D %D The \type{()} classify this as a script. If they are absent, %D the keyword is treated as a normal reference. %D %D One can pass arguments to such a script by saying: %D %D \starttyping %D \goto{calculate total}[Sum(1.5,2.3)] %D \stoptyping %D %D References are passed by using the \type{R{}} classifier. %D %D \starttyping %D \goto{calculate total}[Sum(1.5,2.3,R{overflow})] %D \stoptyping %D %D The last call calls the script \type{Sum} and passes the %D next set of variables: %D %D \starttyping %D JS_S_1="1.5"; %D JS_S_2="2.3"; %D JS_R_3="overflow"; %D JS_P_3=3; %D \stoptyping %D %D The first two parameters are just strings, the third one %D however is treated as a reference and results in passing the %D reference (if needed this references is prefixed) and the %D (real) page number. The alternative: %D %D \starttyping %D \goto{calculate total}[JS(Sum{V{1.5},V{2.3},R{overflow}})] %D \stoptyping %D %D does a verbose passing: %D %D \starttyping %D JS_V_1=1.5; %D JS_V_2=2.3; %D JS_R_3="overflow"; %D JS_P_3=3; %D \stoptyping %D We will also support direct function calls. In that case %D no intermediate variables are used. %D \macros %D {startJScode} %D %D A piece of \JAVASCRIPT\ code is defined by saying: %D %D \starttyping %D \startJScode{SomeScript} %D var Item=this.getField("item"); %D N=Item.getArray(); %D Total=this.getField("total"); %D Total.value=0; %D for (j=0; j0) && (JS_R_1!="")) %D { gotoNamedDest(JS_R_1) }; %D \stopJScode %D \stoptyping %D %D Such a piece of code is closely related to the interpreter %D used. Watch the last two lines, here the script adapts %D itself to the presence of a reference. %D %D While %D %D \starttyping %D \startJScode{name} %D name = 4 ; %D \stopJScode %D \stoptyping %D %D assumes uses no preamble or presumes that the preamble is %D always loaded, the next definition also tells \CONTEXT\ to %D actually include the preamble needed. %D %D \starttyping %D \startJScode{uses} uses {later} %D uses = 6 ; %D \stopJScode %D \stoptyping \long\def\startJScode#1 #2 {\doifelse{#2}{uses} {\dostartJScodeA{#1}} {\dostartJScodeB{#1} #2 }} \long\def\dostartJScodeA#1#2 #3\stopJScode {\long\setgvalue{\r!java#1}{\do{#2}{#3}}} \long\def\dostartJScodeB#1#2\stopJScode {\long\setgvalue{\r!java#1}{\do{}{#2}}} \let\stopJScode\relax %D \macros %D {presetJScode} %D %D The code can be retrieved by saying %D %D \starttyping %D \presetJScode{SomeScript}{template} %D \stoptyping %D %D Such a template is a comma separated list, where %D individual entries can optionally be transformed by %D \type{R{}} and \type{V{}}. %D %D After this call, the code is available in \type{\JScode}. \newif\ifdirectJScode \def\presetJScode#1#2% #1=operation #2=arguments {\setverbosecscharacters \def\par{\delcharacter}% was: { } \scratchcounter\zerocount \globallet\JScode\empty \def\do##1##2% {\doifelse{##2}{!}\directJScodetrue\directJScodefalse}% \getvalue{\r!java#1}% \edef\!!stringa{#2}% \ifx\!!stringa\empty \else \processcommacommand[\!!stringa]\dopresetJSvariables \fi \def\docommand##1% {\doifundefinedelse{\r!java\r!java##1} {\showmessage\m!javascript2{##1}} {\useJSpreamblenow{##1}}}% % {\doglobal\increment\currentJSpreamble % \doglobal\addtocommalist{##1}\allJSpreambles}}% \def\do##1##2% {\xdef\JScode{\ifdirectJScode#1(\JScode)\else\JScode##2\fi}% %\xdef\JScode{JS\string_N=\the\scratchcounter;\JScode}% \processcommalist[##1]\docommand}% \getvalue{\r!java#1}} \def\dopresetJSvariables#1% {\advance\scratchcounter \plusone \donefalse \dodopresetJSvariables#1\end}% \def\dodopresetJSvariables {\doifnextcharelse R\dodopresetJSrefvariables {\doifnextcharelse V\dodopresetJSvervariables {\doifnextcharelse S\dodopresetJSstrvariables \dodopresetJSrawvariables}}} \def\dodopresetJSrefvariables R#1\end {\doifreferencefoundelse{#1} {\donetrue \dododopresetJSvariables R{\referenceprefix#1}% \donefalse\dododopresetJSvariables P{\currentrealreference}} {\unknownreference{#1}}% \ifminimalizeJScode \else \donetrue\dododopresetJSvariables S{#1}% \fi} \def\dodopresetJSvervariables V#1\end {\donefalse\dododopresetJSvariables V{#1}% \ifminimalizeJScode \else \donetrue\dododopresetJSvariables S{#1}% \fi} \def\dodopresetJSstrvariables S#1\end {\donetrue\dododopresetJSvariables S{#1}} \def\dodopresetJSrawvariables #1\end {\donetrue\dododopresetJSvariables S{#1}} \def\JSprefix#1% {JS\string_#1\string_\the\scratchcounter} \def\dododopresetJSvariables#1#2% {\iftraceJScode \writestatus{JavaScript}{\JSprefix#1=#2} \xdef\JScode{\JScode console.println("\JSprefix#1=#2"); }% \fi \ifdirectJScode \xdef\JScode{\ifx\JScode\empty\else\JScode,\fi\ifdone"#2"\else#2\fi}% \else \xdef\JScode{\JScode\JSprefix#1=\ifdone"#2"\else#2\fi; }% \fi} %D \macros %D {startJSpreamble, flushJSpreamble} %D %D One can define insert \JAVASCRIPT\ code at the document level %D by using: %D %D \starttyping %D \startJSpreamble{oeps} %D oeps = 1 ; %D \stopJSpreamble %D \stoptyping %D %D which is the same as: %D %D \starttyping %D \startJSpreamble{now} used now %D now = 2 ; %D \stopJSpreamble %D \stoptyping %D %D while the next definition is only included when actually %D used. %D %D \starttyping %D \startJSpreamble{later} used later %D later = 3 ; %D \stopJSpreamble %D \stoptyping %D %D This command may be used more that once, but always before %D the first page is shipped out. \newif\ifoneJSpreamble \oneJSpreamblefalse \let\allJSpreambles\empty \newcounter\nofJSpreambles \newcounter\currentJSpreamble \long\def\startJSpreamble#1 #2 % {\bgroup % we need to restore the catcodes \restoreendofline % just in case it happens while reading lists \doifelse{#2}{used} {\dostartJSpreamble#1 } {\dostartJSpreamble#1 now #2 }} \long\def\dostartJSpreamble#1 #2 % {\processaction [#2] [ later=>\chardef\JSstatus\zerocount,% now=>\chardef\JSstatus\plusone ,% \s!default=>\chardef\JSstatus\plustwo ,% \s!unknown=>\chardef\JSstatus\plustwo ]% \ifaddJSlinebreaks \obeylines \let\obeyedline \normalpar \obeyspaces \let\obeyedspace\normalspace \fi \dodostartJSpreamble{#1}} \long\def\dodostartJSpreamble#1#2\stopJSpreamble {\presetJSfunctions #2function ()\end \long\setgvalue{\r!java\r!java#1}{#2}% \ifcase\JSstatus \else \useJSpreamblenow{#1}% \fi \egroup} %D \macros %D {setJSpreamble, addtoJSpreamble} %D %D In addition to the previous preamble definitions, we can %D set a preamble \quote {in||line} and add tokens to a %D preamble. \def\setJSpreamble#1#2% {\doifundefined{\r!java\r!java#1} {\setgvalue{\r!java\r!java#1}{#2;}% \doglobal\increment\currentJSpreamble \doglobal\addtocommalist{#1}\allJSpreambles}} \def\addtoJSpreamble#1#2% {\doifdefinedelse{\r!java\r!java#1} {\edef\!!stringa{\r!java\r!java#1}% \edef\!!stringb{\csname\!!stringa\endcsname}% \@EA\setgvalue\@EA\!!stringa\@EA{\!!stringb #2;}} {\setJSpreamble{#1}{#2}}} %D \macros %D {useJSpreamblenow} %D %D The next macro can be used to force inclusion of postponed %D \JAVASCRIPT\ preambles. \def\useJSpreamblenow#1% {\doglobal\increment\currentJSpreamble \doglobal\addtocommalist{#1}\allJSpreambles} %D Because we want to check for valid calls, we preload the %D functions. This means that we can call them directly as %D well as indirectly when defined by \type {\startJScode} etc. % \long\def\presetJSfunctions#1function #2(#3)% % {\doifelsenothing{#2} % {\long\def\presetJSfunctions##1\end{}} % {\stripspaces\from#2\to\ascii % \doifundefined{\r!java\ascii}{\setgvalue{\r!java\ascii}{\do{}{!}}}}% % \presetJSfunctions} \long\def\presetJSfunctions#1function#2(#3)% {\doifelse{#2}\space {\long\def\presetJSfunctions##1\end{}} {\stripspaces\from#2\to\ascii \doifundefined{\r!java\ascii}{\setgvalue{\r!java\ascii}{\do{}{!}}}}% \presetJSfunctions} \def\getJSpreamble#1% {\getvalue{\r!java\r!java#1}} \def\presetJSpreamble {\ifx\allJSpreambles\empty\else \bgroup \setverbosecscharacters \obeyspaces \let\obeyedspace\normalspace \def\par{\delcharacter}% was: { } \globallet\JSpreamble\empty \def\@@collectedJSpreamble{\r!java\r!java collected}% \letvalue{\@@collectedJSpreamble}=\empty \def\docommand##1% {\xdef\JScode{\getvalue{\r!java\r!java##1}}% \ifoneJSpreamble % \global\letcdcsname \@EA\setxvalue\@EA\@@collectedJSpreamble\@EA {\csname\@@collectedJSpreamble\endcsname\JScode}% \else \setxvalue{\r!java\r!java##1}{\JScode}% \fi}% \processcommacommand[\allJSpreambles]\docommand \ifoneJSpreamble \gdef\allJSpreambles{collected}% \fi \globallet\presetJSpreamble\relax \egroup \fi} \def\flushJSpreamble {\iflocation\ifx\allJSpreambles\empty\else \ifcase\nofJSpreambles\else\ifnum\nofJSpreambles=\currentJSpreamble \bgroup \presetJSpreamble \expanded{\doflushJSpreamble{\allJSpreambles}}% \globallet\flushJSpreamble\relax \globallet\allJSpreambles\empty \egroup \fi\fi \fi\fi} \def\finalflushJSpreamble {\iflocation \flushJSpreamble \ifcase\currentJSpreamble\relax\else \savecurrentvalue\nofJSpreambles\currentJSpreamble \globallet\currentJSpreamble\nofJSpreambles \fi \fi} \prependtoks \flushJSpreamble \to \everyshipout \prependtoks \finalflushJSpreamble \to \everylastshipout %D \macros %D {doPSsanitizeJScode} %D %D Before the code can be passed to the (\POSTSCRIPT\ or \PDF) %D output file, some precautions must be made concerning the %D use of \type{(} and~\type{)}. Here we use a beautiful %D \type{\aftergroup} trick I discovered in the \TABLE\ format. \def\doPSsanitizeJScode#1\to#2% {\begingroup \scratchcounter\zerocount % \aftergroup counter \aftergroup\xdef \aftergroup#2% \aftergroup{% \expanded{\defconvertedargument\noexpand\JScode{#1}}% \expandafter\handletokens\JScode\with\dodoPSsanitizeJScode \aftergroup}% \endgroup \iftraceJScode \writestatus{JS trace}{#2}% \fi} %D I started with: %D %D \starttyping %D \def\dodoPSsanitizeJScode#1% %D {\aftergroup\string %D \if#1(% %D \expandafter\aftergroup\csname#1\endcsname %D \else\if#1)% %D \expandafter\aftergroup\csname#1\endcsname %D \else\if#1;% %D \aftergroup;\aftergroup\string\expandafter\aftergroup\ %D \else %D \expandafter\aftergroup#1% %D \fi\fi\fi %D \advance\scratchcounter by 1 %D \ifnum\scratchcounter=500 %D \expandafter\dododoPSsanitizeJScode %D \fi} %D \stoptyping %D %D For pretty printing purposes, we need some way to signal %D \TEX\ macros. Therefore we introduce a special keyword %D \type{TEX}. When followed by a space, this keyword is %D ignored, that is, filtered from the stream. Now we have: \chardef\JSisTEX \zerocount \chardef\JScomment\zerocount \newif\ifaddJSlinebreaks \addJSlinebreakstrue \def\flushJSisTEX {\ifcase\JSisTEX \or \aftergroup T% \or \aftergroup T\aftergroup E% \or \aftergroup T\aftergroup E\aftergroup X% \fi \chardef\JSisTEX\zerocount} % \def\doJSlinebreak % {\ifaddJSlinebreaks % \aftergroup\string\aftergroup\n% % \fi} % % \def\dodoPSsanitizeJScode#1% % input stack>500 & TEX check % {\if#1/% % \ifnum\JScomment=0 % \chardef\JScomment\plusone % \else\ifnum\JScomment=1 % \chardef\JScomment\plustwo % \fi\fi % \else % \ifnum\JScomment=1 % \aftergroup/% % \chardef\JScomment\zerocount % \fi % \ifnum\JScomment=2 % \if#1\delcharacter % \chardef\JScomment\zerocount % \fi % \else % \if#1\delcharacter % \flushJSisTEX\doJSlinebreak % \else\if#1(% % \flushJSisTEX\aftergroup\string\expandafter\aftergroup\csname#1\endcsname % \else\if#1)% % \flushJSisTEX\aftergroup\string\expandafter\aftergroup\csname#1\endcsname % \else\if#1;% % \flushJSisTEX\aftergroup;\doJSlinebreak % \else\if#1T% % \ifnum\JSisTEX=0 \chardef\JSisTEX\plusone \else\flushJSisTEX\aftergroup T\fi % \else\if#1E% % \ifnum\JSisTEX=1 \chardef\JSisTEX\plustwo \else\flushJSisTEX\aftergroup E\fi % \else\if#1X% % \ifnum\JSisTEX=2 \chardef\JSisTEX\plusthree \else\flushJSisTEX\aftergroup X\fi % \else\if#1\normalspace % \ifnum\JSisTEX=3 \chardef\JSisTEX\zerocount \else\flushJSisTEX\aftergroup#1\fi % \else % \flushJSisTEX\aftergroup\string\expandafter\aftergroup#1% % \fi\fi\fi\fi\fi\fi\fi\fi % \fi % \fi % \dododoPSsanitizeJScode} % todo: "http:\\" -> simple. maar wel \" afvangen % % use new pdftex escape mechanism or make fully expandable version, not used that often btw \chardef\JSstring\zerocount \def\doJSlinebreak {\chardef\JScomment\zerocount \chardef\JSstring\zerocount \ifaddJSlinebreaks \aftergroup\string\aftergroup\n% \fi} \def\dodoPSsanitizeJScode#1% % input stack>500 & TEX check {\if#1/% \ifnum\JSstring=0 \ifnum\JScomment=0 \chardef\JScomment\plusone \else\ifnum\JScomment=1 \chardef\JScomment\plustwo \fi\fi \else \aftergroup/% \fi \else \ifnum\JScomment=1 \aftergroup/% \chardef\JScomment\zerocount \fi % is the delchar trick still needed? \ifnum\JScomment=2 \ifnum`#1=13 % brrr \doJSlinebreak \else\if#1\par \doJSlinebreak \else\if#1\delcharacter \doJSlinebreak \fi\fi\fi \else \ifnum`#1=13 % brrr \flushJSisTEX\doJSlinebreak \else\if#1\par \flushJSisTEX\doJSlinebreak \else\if#1\delcharacter \flushJSisTEX\doJSlinebreak \else\if#1(% \flushJSisTEX\aftergroup\string\expandafter\aftergroup\csname#1\endcsname \else\if#1)% \flushJSisTEX\aftergroup\string\expandafter\aftergroup\csname#1\endcsname %\else\if#1;% % \flushJSisTEX\aftergroup;\doJSlinebreak \else\if#1T% \ifnum\JSisTEX=0 \chardef\JSisTEX\plusone \else\flushJSisTEX\aftergroup T\fi \else\if#1E% \ifnum\JSisTEX=1 \chardef\JSisTEX\plustwo \else\flushJSisTEX\aftergroup E\fi \else\if#1X% \ifnum\JSisTEX=2 \chardef\JSisTEX\plusthree \else\flushJSisTEX\aftergroup X\fi \else\if#1\normalspace \ifnum\JSisTEX=3 \chardef\JSisTEX\zerocount \else\flushJSisTEX\aftergroup#1\fi \else % todo: "test\"test" \if#1"% \ifcase\JSstring \chardef\JSstring\plusone \else \chardef\JSstring\zerocount \fi \fi \flushJSisTEX\aftergroup\string\expandafter\aftergroup#1% \fi\fi\fi\fi\fi\fi\fi\fi\fi % \fi \fi \fi \dododoPSsanitizeJScode} %D Close reading learns that one line comments (\type{// ...}) %D are removed from the stream. This permits switching in %D pretty printing \JAVASCRIPT\ sources as well as saves %D some bytes. %D The magic 500 in the next hack prevents the input stack from %D overflowing when large scripts are sanitized. \def\dododoPSsanitizeJScode {\ifcase\JSisTEX\ifcase\JScomment \advance\scratchcounter \plusone \fi\fi \ifnum\scratchcounter=500 \expandafter\dodododoPSsanitizeJScode \fi} \def\dodododoPSsanitizeJScode {\let\next={% \aftergroup}% \endgroup \begingroup \aftergroup\xdef \aftergroup\sanitizedJScode \aftergroup{% \aftergroup\sanitizedJScode \let\next=}} %D The macro \type{\doPSsanitizeJScode} converts its argument %D into the macro \type{\sanitizedJScode}, thereby prefixing %D each \type{(} and \type{)} by a slash. %D Hooking this mechanism into the general \CONTEXT\ reference %D mechanism does not take much effort: \definespecialtest{JS}% {\doifdefinedelse{\r!java\currentreferenceoperation}} \definespeciallocation{JS}#1#2% {\iflocation \bgroup \bgroup \presetJScode \currentreferenceoperation \currentreferencearguments \egroup \dohandlegoto {#2}% {\dostartgotoJS\buttonwidth\buttonheight\JScode}% {\dostopgotoJS}% \egroup \else {#2}% \fi} %D \macros %D {useJSscripts} %D %D In due time, users will build their collections of scripts, %D which can be used (loaded) when applicable. Although not all %D public, we will provide some general purpose scripts, %D collected in files with names like \type{java-...}. One can %D load these scripts with \type{\useJSscripts}, like: %D %D \starttyping %D \useJSscripts[fld] %D \stoptyping %D %D The not so complicated implementation of this macro is: \def\dodouseJSscripts#1% {\doifelse{#1}\v!reset {\let\allJSpreambles\empty} {\doifundefined{\c!file\f!javascriptprefix#1} {\startnointerference \letgvalueempty{\c!file\f!javascriptprefix#1}% \makeshortfilename[\f!javascriptprefix#1]% \startreadingfile \readsysfile{\shortfilename.\mksuffix} {\showmessage\m!javascript1{#1}} {\readsysfile{\shortfilename.tex} {\showmessage\m!javascript1{#1}} \donothing}% \stopreadingfile \stopnointerference}}} \def\douseJSscripts[#1][#2]% {\processcommalist[#1]\dodouseJSscripts \processcommalist[#2]\useJSpreamblenow} \def\useJSscripts {\dodoubleempty\douseJSscripts} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/file-job.mkvi0000644000175000017500000002653712134352503024263 0ustar norbertnorbert%D \module %D [ file=file-job, % copied from main-001, later core-job %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Job Handling, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is still to be split and documented. \writestatus{loading}{ConTeXt File Macros / Job Handling} \unprotect \registerctxluafile{file-job}{1.001} % processing \unexpanded\def\doifinputfileelse#name% {\ctxcommand{doifinputfileelse("#name")}} \unexpanded\def\processfile#name% {\ctxcommand{processfile("#name")}} % path control \unexpanded\def\usepath[#path]% {\ctxcommand{usepath("#path")}} \unexpanded\def\usesubpath[#path]% {\ctxcommand{usesubpath("#path")}} \def\allinputpaths {\ctxcommand{allinputpaths()}} % helper (not really needed nowadays) \let\locatedfilepath\empty \unexpanded\def\locatefilepath#name% no [] ? {\edef\locatedfilepath{\ctxcommand{locatefilepath("#name")}}} % zip files are tree'd \unexpanded\def\usezipfile {\dodoubleempty\syst_files_use_zip_file} \def\syst_files_use_zip_file[#zipname][#subtree]% {\ctxcommand{usezipfile("#zipname","#subtree")}} % exa stuff might become obsolete: \unexpanded\def\loadexamodes {\dosingleempty\syst_files_load_exa_modes} \def\syst_files_load_exa_modes[#name]% {\ctxcommand{loadexamodes("#name")}} % runtime files (maybe also do this in lua?) % \def\doloadsystemfile#1% only mkiv files % {\readfile{sys:///#1.\mksuffix}{\showmessage\m!system2{#1.\mksuffix}}\donothing} \unexpanded\def\loadsystemfiles {\syst_files_load\f!newfilename % new code, to be integrated at some point, plus fixes posted on the list \syst_files_load\f!locfilename % new code, somewhat experimental, not distributed (outside the dev group) \syst_files_load\f!expfilename % new code, very experimental, can be engine specific, mostly for me only \syst_files_load\f!sysfilename} % local settings, but probably not that good an idea to use \def\syst_files_load#name% only mkiv files {\readsysfile{#name.\mksuffix}{\showmessage\m!system2{#name.\mksuffix}}\donothing} % obsolete, but we keep it as reference of what happened % % \unexpanded\def\loadoptionfile % {\readjobfile{\jobname.\f!optionextension} % {\writestatus\m!system{\jobname.\f!optionextension\space loaded}% % \ctxcommand{copyfiletolog("\jobname.\f!optionextension")}}% % {\writestatus\m!system{no \jobname.\f!optionextension}}} % document structure \ifdefined\textlevel \else \newcount\textlevel \fi % might go away \ifdefined\strc_pagenumbers_flush_final_page \else \let\strc_pagenumbers_flush_final_page\relax \fi % ugly \unexpanded\def\dostarttext {\glet\dostarttext\relax \the\everystarttext \global\everystarttext\emptytoks} \unexpanded\def\dostoptext {\glet\dostoptext\relax \strc_pagenumbers_flush_final_page \page % hm, bonus \the\everystoptext \global\everystoptext\emptytoks \the\everybye \global\everybye\emptytoks \the\everygoodbye \global\everygoodbye\emptytoks \doifsometokselse\everynotabene{\writeline\the\everynotabene\writeline}\donothing \normalend} % tex's \end \unexpanded\def\starttext {\ctxcommand{starttext()}} \unexpanded\def\stoptext {\ctxcommand{stoptext()}} \unexpanded\def\forcequitjob {\ctxcommand{forcequitjob()}} \unexpanded\def\end {\ctxcommand{forceendjob()}} \unexpanded\def\autostarttext{\ctxcommand{autostarttext()}} \unexpanded\def\autostoptext {\ctxcommand{autostoptext()}} \unexpanded\def\finishjob{\stoptext} % nicer in luatex call commandline \newtoks\everystartnotext \newtoks\everystopnotext \unexpanded\def\startnotext {\the\everystartnotext} \unexpanded\def\stopnotext {\the\everystopnotext \normalend} % protect structure \unexpanded\def\processfilemany#name{\ctxcommand{processfilemany("#name")}} \unexpanded\def\processfileonce#name{\ctxcommand{processfileonce("#name")}} \unexpanded\def\processfilenone#name{\ctxcommand{processfilenone("#name")}} \unexpanded\def\project {\doifnextoptionalelse\useproject \syst_structure_arg_project} \unexpanded\def\product {\doifnextoptionalelse\useproduct \syst_structure_arg_product} \unexpanded\def\component {\doifnextoptionalelse\usecomponent \syst_structure_arg_component} \unexpanded\def\environment{\doifnextoptionalelse\useenvironment\syst_structure_arg_environment} \def\syst_structure_arg_project #name {\ctxcommand{useproject ("#name")}} \def\syst_structure_arg_product #name {\ctxcommand{useproduct ("#name")}} \def\syst_structure_arg_component #name {\ctxcommand{usecomponent ("#name")}} \def\syst_structure_arg_environment#name {\ctxcommand{useenvironment("#name")}} \unexpanded\def\startproject {\doifnextoptionalelse\syst_structure_start_opt_project \syst_structure_start_arg_project } \unexpanded\def\startproduct {\doifnextoptionalelse\syst_structure_start_opt_product \syst_structure_start_arg_product } \unexpanded\def\startcomponent {\doifnextoptionalelse\syst_structure_start_opt_component \syst_structure_start_arg_component } \unexpanded\def\startenvironment{\doifnextoptionalelse\syst_structure_start_opt_environment\syst_structure_start_arg_environment} \def\syst_structure_start_arg_project #name {\ctxcommand{startproject ("#name")}} \def\syst_structure_start_arg_product #name {\ctxcommand{startproduct ("#name")}} \def\syst_structure_start_arg_component #name {\ctxcommand{startcomponent ("#name")}} \def\syst_structure_start_arg_environment#name {\ctxcommand{startenvironment("#name")}} \unexpanded\def\useproject [#name]{\ctxcommand{useproject ("#name")}} \unexpanded\def\useproduct [#name]{\ctxcommand{useproduct ("#name")}} \unexpanded\def\usecomponent [#name]{\ctxcommand{usecomponent ("#name")}} \unexpanded\def\useenvironment[#name]{\ctxcommand{useenvironment("#name")}} \unexpanded\def\syst_structure_start_opt_project [#name]{\ctxcommand{startproject ("#name")}} \unexpanded\def\syst_structure_start_opt_product [#name]{\ctxcommand{startproduct ("#name")}} \unexpanded\def\syst_structure_start_opt_component [#name]{\ctxcommand{startcomponent ("#name")}} \unexpanded\def\syst_structure_start_opt_environment[#name]{\ctxcommand{startenvironment("#name")}} \newconditional\endofinput % hack, needed because \endinput happens one level down in the input when we write from lua \unexpanded\def\signalendofinput#1% argument just for tracing {\global\settrue\endofinput} \unexpanded\def\honorendofinput {\ifconditional\endofinput \global\setfalse\endofinput \endinput \fi} \unexpanded\def\stopproject {\ctxcommand{stopproject ()}\honorendofinput} \unexpanded\def\stopproduct {\ctxcommand{stopproduct ()}\honorendofinput} \unexpanded\def\stopcomponent {\ctxcommand{stopcomponent ()}\honorendofinput} \unexpanded\def\stopenvironment {\ctxcommand{stopenvironment()}\honorendofinput} \def\currentproject {\ctxcommand{currentproject ()}} \def\currentproduct {\ctxcommand{currentproduct ()}} \def\currentcomponent {\ctxcommand{currentcomponent ()}} \def\currentenvironment {\ctxcommand{currentenvironment()}} \def\processedfile {\ctxcommand{processedfile()}} \def\processedfiles {\ctxcommand{processedfiles()}} \unexpanded\def\dostarttextfile #name{\ctxcommand{dostarttextfile(name)}} \unexpanded\def\dostoptextfile {\ctxcommand{dostoptextfile()}} \unexpanded\def\loadtexfile [#name]{\ctxcommand{usetexfile("#name")}} \unexpanded\def\loadluafile [#name]{\ctxcommand{useluafile("#name")}} \unexpanded\def\loadcldfile [#name]{\ctxcommand{usecldfile("#name")}} \unexpanded\def\loadanyfile [#name]{\ctxcommand{useanyfile("#name")}} \unexpanded\def\loadtexfileonce [#name]{\ctxcommand{usetexfile("#name",true)}} \unexpanded\def\loadluafileonce [#name]{\ctxcommand{useluafile("#name",true)}} \unexpanded\def\loadcldfileonce [#name]{\ctxcommand{usecldfile("#name",true)}} \unexpanded\def\loadanyfileonce [#name]{\ctxcommand{useanyfile("#name",true)}} %D Handy for modules that have a test/demo appended (true added). \unexpanded\def\continueifinputfile#name{\ctxcommand{doifelsecontinuewithfile("#name",true)}\relax\endinput} % we cannot do \endinput via lua % \startproject test % 1: \startmode[*project] project \stopmode \endgraf % 2: \startmode[*product] product \stopmode \endgraf % \stopproject % replaced by modes: % % \setvalue{\e!start\v!localenvironment}[#1]% % {\let\loadedlocalenvironments\empty % \def\docommand##1% % {\beforesplitstring##1\at.\to\someevironment % \addtocommalist\someevironment\loadedlocalenvironments}% % \processcommalist[#1]\docommand % \doifcommonelse{\currentproject,\currentproduct,\currentcomponent,\currentenvironment}\loadedlocalenvironments % {\letvalue{\e!stop\v!localenvironment}\relax} % {\grabuntil{\e!stop\v!localenvironment}\gobbleoneargument}} % % \setvalue{\v!localenvironment}{\doifnextoptionalelse\uselocalenvironment\redolocalenvironment} % % \def\redolocalenvironment#1 {\uselocalenvironment[#1]} % \def\uselocalenvironment[#1]{\doexecutefileonce{#1}} % weird place: \neverypar\emptytoks %D Wrappers (the signal is a synchronization with lua hack): \newsystemmode\v!project \newsystemmode\v!product \newsystemmode\v!component \newsystemmode\v!environment \unexpanded\def\startprojectindeed {\starttext \pushsystemmode\v!project \setsystemmode\v!project} \unexpanded\def\stopprojectindeed {\popsystemmode\v!project \stoptext \signalendofinput\v!project} \unexpanded\def\startproductindeed {\starttext \pushsystemmode\v!product \setsystemmode\v!product} \unexpanded\def\stopproductindeed {\popsystemmode\v!product \stoptext \signalendofinput\v!product} \unexpanded\def\startcomponentindeed {\starttext \pushreferenceprefix\currentcomponent \pushsystemmode\v!component \setsystemmode\v!component} \unexpanded\def\stopcomponentindeed {\popsystemmode\v!component \popreferenceprefix \stoptext \signalendofinput\v!component} \unexpanded\def\startenvironmentindeed {\pushsystemmode\v!environment \setsystemmode\v!environment} \unexpanded\def\stopenvironmentindeed {\popsystemmode\v!environment \signalendofinput\v!environment} %D Relatively new (might move as it depends on setups): \newtoks\everysetupdocument \unexpanded\def\startdocument % todo: dostarttagged\t!document {\dosingleargument\syst_structure_document_start} \unexpanded\def\syst_structure_document_start[#settings]% {\setvariables[\s!document][#settings]% \the\everysetupdocument\relax \starttext \documentvariable\c!before} \unexpanded\def\stopdocument % todo: dostoptagged\t!document {\documentvariable\c!after \stoptext} \def\documentvariable#name% {\getvariable\s!document{#name}} \unexpanded\def\setupdocument[#settings]% {\setvariables[\s!document][#settings]% \the\everysetupdocument\relax} % metadata:author metadata:title metadata:subject \setvariables [document] [\c!before=\directsetup{\s!document:start}, \c!after=\directsetup{\s!document:stop}] %S The document: namespace will be used elsewhere too. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-euler.mkiv0000644000175000017500000000335411754241457025456 0ustar norbertnorbert%D \module %D [ file=type-otf, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Euler, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \loadtypescriptfile[texgyre] \starttypescriptcollection[pagella-euler] \starttypescript [\s!math] [euler] \definefontsynonym [EulerMath] [\s!file:euler.otf] \stoptypescript \starttypescript [\s!math] [euler] [\s!name] % \definefontsynonym [MathRoman] [EulerMath] [\s!features=\s!math] \definefontsynonym [MathRoman] [EulerMath] [\s!features=\s!math\mathsizesuffix] \stoptypescript \starttypescript [pagella-euler] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [pagella] [\s!default] % \definetypeface [\typescriptone] [\s!ss] [\s!sans] [pagella] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [euler] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [\s!serif] [euler] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:euler.otf] [\s!features=\s!default] \stoptypescript \starttypescript [euler] \definetypeface [euler] [\s!rm] [\s!serif] [euler] [\s!default] \definetypeface [euler] [\s!tt] [\s!mono] [modern] [\s!default] \definetypeface [euler] [\s!mm] [\s!math] [euler] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-ini.mkii0000644000175000017500000010637011754241457024266 0ustar norbertnorbert%D \module %D [ file=enco-ini, %D version=2007.02.19, % 2000.12.27, % 1998.12.03, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Quite some code will be moved to the mk files once we're ready %D for it. %D This module is a reimplementation of the module that handled %D composed characters and non \ASCII\ characters. The changed %D are not that fundamental, and mainly concerns moving %D definitions of specific glyphs and accents to other files as %D well as moving plain handling of accents to this module %D instead of overloading plain \TEX\ commands. %D Patterns are kind of mixed with font encodings and %D mappings. Alas. \ifx\synchronizepatterns\undefined \let\synchronizepatterns\relax \fi %D While dealing with input (the text source) and output (the %D glyphs), encoding comes into view. To summarize a few: %D %D \startitemize %D \item Bytes in the input file are mapped to an internal %D representation. An~\type {a} often stays an~\type {a}, %D but~\type {\"e} can become either one code or become %D two codes (ending in overlapping glyphs). %D \item Characters can be made active and mapped onto another %D character. %D \item When changing case, characters are mapped onto %D themselves, their case||counterpart or a reasonable %D alternative, like~\"e onto~e. %D \item Single character representations in a \DVI\ file can %D be mapped onto one or more characters, either of not %D in more than one font file (virtual fonts). %D \item In the final format, fonts collections can be %D partially embedded, thereby losing the one||to||one %D relation between several instances of one font. %D \item For special purposes, individual characters should be %D mapped onto a dedicated encoding vector, for instance %D \PDF\ document encoding. %D \stopitemize %D %D These and other kind of mappings are to be dealt with, and %D the exact way of dealing often depends on the language to be %D typeset. \writestatus{loading}{ConTeXt Encoding Macros / Initialization} \unprotect %D First we define a few local or not yet initialized constants. \def\@map@{@m@ap@} % mapping prefix \def\@fha@{@f@ha@} % font prefix \def\@cas@{@c@as@} % casecom prefix \ifx\currentlanguage\undefined \let\currentlanguage\s!en \fi %D \macros %D {setupencoding} %D %D The following setup command is used to tune encoding %D handling. \def\setupencoding {\dosingleargument\dosetupencoding} \def\dosetupencoding[#1]% {\getparameters[\??ec][#1]% \edef\defaultencoding {\ifx\@@ecdefault\empty\s!default\else\@@ecdefault\fi}} %D \macros %D {useencoding} %D %D Encodings things are defined in separate files and are %D loaded only once, using: %D %D \showsetup{useencoding} \def\douseencoding#1% {\doifundefined{\c!file\f!encodingprefix#1}% {\letvalue{\c!file\f!encodingprefix#1}\empty \makeshortfilename[\truefilename{\f!encodingprefix#1}]% \startreadingfile \readsysfile{\shortfilename.mkii} {\showmessage\m!encodings2{#1}} {\showmessage\m!encodings3{#1}}% \stopreadingfile}} \def\useencoding[#1]% {\processcommalist[#1]\douseencoding} %D \macros %D {startmapping,enablemapping} %D %D In order to process patterns, convert from lower to %D uppercase and vise versa and some more, we provide a %D mechanism to define mappings. The first real application %D of this command was: %D %D \starttyping %D \startmapping [something] %D \definecasemap 165 181 165 %D \definecasemap 171 187 171 %D ... %D \defineuppercasecom \i {I} %D \defineuppercasecom \l \L %D \definelowercasecom \AE \ae %D ... %D \stopmapping %D \stoptyping %D %D So, character 165 becomes 181 in uppercase and 165 in %D lowercase. A mapping is activated with \type {\enablemapping}. \def\startsavingmappingtoks#1% {\bgroup \edef\charactermapping{@#1@}% \checkmappingtoks \setmappingtoks \the\mappingtoks} \def\stopsavingmappingtoks {\global\mappingtoks\emptytoks \dostepwiserecurse{0}{255}\plusone {\edef\@@expanded {\the\mappingtoks \ifnum\recurselevel>127 \noexpand\settoletterunlessactive{\recurselevel}% \fi \lccode\recurselevel\ifnum\lccode\recurselevel=\zerocount\zerocount\else\space\the\lccode\recurselevel\space\fi \uccode\recurselevel\ifnum\uccode\recurselevel=\zerocount\zerocount\else\space\the\uccode\recurselevel\space\fi \ifnum\sfcode\recurselevel=\plusthousand\else\sfcode\recurselevel=\the\sfcode\recurselevel\space\fi }% \global\mappingtoks\expandafter{\@@expanded}}% \egroup \let\enabledmapping\empty \enablemapping[\currentmapping]} \def\startmapping[#1]% {\startsavingmappingtoks{#1}} \def\stopmapping {\stopsavingmappingtoks} \def\optimizemapping[#1]% {\startsavingmappingtoks{#1}% % nothing, just an automatic cleanup \stopsavingmappingtoks % we need to resync %\let\enabledmapping\relax }%\enablemapping[\currentmapping]} \def\setmappingtoks {\@EA\let\@EA\mappingtoks\csname\@map@\charactermapping\endcsname \@EA\let\@EA\casecomtoks\csname\@cas@\charactermapping\endcsname} \def\checkmappingtoks {\ifundefined{\@map@\charactermapping}% \expandafter\newtoks\csname\@map@\charactermapping\endcsname \fi \ifundefined{\@cas@\charactermapping}% \expandafter\newtoks\csname\@cas@\charactermapping\endcsname \fi} \def\definecasemap #1 #2 #3 % code lower upper {\doifelse{#2}{to} {\presetcaserange{#1}{#3}} {\lccode#1=#2\relax \uccode#1=#3\relax}% \ignorespaces} %D Saves a few tokens \def\definecaseswap #1 #2 % lower upper {\lccode#1=#1\relax \uccode#2=#2\relax \lccode#2=#1\relax \uccode#1=#2\relax \ignorespaces} \def\definecaseself #1 % lower=upper=self {\lccode#1=#1\relax \uccode#1=#1\relax \ignorespaces} %D Watch the \type {\definecasemap 127 to 255} option! %D Dedicated to Taco there is also: \def\definecasemaps #1 to #2 lc #3 uc #4 % from to lc+ uc+ {\dostepwiserecurse{#1}{#2}\plusone {\scratchcounter\recurselevel\advance\scratchcounter#3\lccode\recurselevel=\scratchcounter \scratchcounter\recurselevel\advance\scratchcounter#4\uccode\recurselevel=\scratchcounter}% \ignorespaces} %D This can be used like: %D %D \starttyping %D \definecasemaps 128 to 156 lc 32 uc 0 %D \definecasemaps 160 to 188 lc -32 uc 0 %D \definecasemaps 160 to 188 lc -32 uc 0 %D \definecasemaps 192 to 255 lc 32 uc 0 %D \stoptyping %D %D and saves a lot of typing (copying). \def\resetcaserange #1 to #2 {\dostepwiserecurse{#1}{#2}\plusone {\lccode\recurselevel\zerocount \uccode\recurselevel\zerocount}% \ignorespaces} \def\presetcaserange#1#2% could be pre-expanded {\dostepwiserecurse{#1}{#2}\plusone {\lccode\recurselevel=\recurselevel \uccode\recurselevel=\recurselevel}% \ignorespaces} \def\setcasemap #1 #2 #3 % {\settoletterunlessactive{#1}% \lccode #1=#2 \uccode #1=#3 } \def\setcaseswap #1 #2 % {\settoletterunlessactive{#1}% \settoletterunlessactive{#2}% \lccode #1=#1 \uccode #2=#2 \lccode #2=#1 \uccode #1=#2 } \def\setcaseself #1 % {\settoletterunlessactive{#1}% \lccode #1=#1 \uccode #1=#1 } \def\definespacemap #1 #2 % code sfcode {\sfcode#1=#2% \ignorespaces} \def\setspacemap #1 #2 % {\settootherunlessactive{#1}% %\lccode #1=\zerocount %\uccode #1=\zerocount \sfcode #1=#2 } \def\defineuppercasecom#1#2% {\global\casecomtoks\expandafter{\the\casecomtoks\setuppercasecom#1{#2}}% \ignorespaces} \def\definelowercasecom#1#2% {\global\casecomtoks\expandafter{\the\casecomtoks\setlowercasecom#1{#2}}% \ignorespaces} \let\setuppercasecom\gobbletwoarguments \let\setlowercasecom\gobbletwoarguments \def\setcasecom#1#2{\def#1{#2}} \let\enabledmapping\empty % indirect, needed to handle default too \def\enablemapping[#1]% {\edef\charactermapping{@#1@}% \ifx\enabledmapping\charactermapping \else \doifdefined{\@map@\charactermapping} {%\expandafter\showthe\csname\@map@\charactermapping\endcsname\endcsname \the\csname\@map@\charactermapping\endcsname}% % == \the\executeifdefined{\@map@\charactermapping}\emptytoks \edef\enabledmapping{\charactermapping}% \enablelanguagespecifics[\currentlanguage]% new % \edef\enabledmapping{\charactermapping\currentlanguage}% can be comma list \fi \synchronizepatterns} % on behalf of font switching: \def\fastenablemapping#1% {\edef\charactermapping{@#1@}% \ifx\enabledmapping\charactermapping \else \@EA\ifx\csname\@map@\charactermapping\endcsname\relax\else \the\csname\@map@\charactermapping\endcsname \fi % == \the\executeifdefined{\@map@\charactermapping}\emptytoks \let\enabledmapping\charactermapping \enablelanguagespecifics[\currentlanguage]% to faster \fi} %D This macro wil be implemented in \type {lang-ini.tex}. \ifx\enablelanguagespecifics\undefined \def\enablelanguagespecifics[#1]{} \fi %D Further on we have to take some precautions when dealing %D with special characters like~\type{~}, \type{_} %D and~\type{^}, so let us define ourselve some handy macros %D first. \def\protectfontcharacters {\edef\unprotectfontcharacters {\catcode`\noexpand ~=\the\catcode`~\relax \catcode`\noexpand _=\the\catcode`_\relax \catcode`\noexpand ^=\the\catcode`^\relax}% \catcode`~=\@@letter \catcode`_=\@@letter \catcode`^=\@@letter\relax} %D The completeness of the Computer Modern Roman typefaces %D makes clear how incomplete other faces are. To honour 7~bit %D \ASCII, these fonts were designed using only the first 127 %D values of the 256 ones that can be presented by one byte. %D Nowadays 8~bit character codings are more common, mainly %D because they permit us to predefine some composed %D characters, which are needed in most european languages. %D %D Supporting more than the standard \TEX\ encoding vector %D |<|which in itself is far from standard and differs per %D font|>| puts a burden on the fonts mechanism. The \CONTEXT\ %D mechanism is far from complete, but can handle several %D schemes at once. The main problem lays in the accented %D characters and ligatures like~ff, although handling %D ligatures is not the responsibility of this module. %D %D By default, we use \PLAIN\ \TEX's approach of placing %D accents. All other schemes sooner or later give problems %D when we distribute \DVI||files are distributed across %D machines and platforms. Nevertheless, we have to take care %D of different encoding vectors, which tell us where to find %D the characters we need. This means that all kind of %D character placement macro's like \type{\"} and \type{\ae} %D have to be implemented and adapted in a way that suits %D these vectors. %D %D The main difference between different vector is the way %D accents are ordered and/or the availability of prebuilt %D accented characters. Accented characters can for instance be %D called for by sequences like \type{\"e}. Here the \type{\"} %D is defined as: %D %D \starttyping %D \def\"#1{{\accent"7F #1}} %D \stoptyping %D %D This macro places the accent \accent"7F {} on top of an~e %D gives \"e. Some fonts however can have prebuild accents and %D use a more direct approach like %D %D \starttyping %D \def\"#1{\if#1e\char 235\else ... \fi} %D \stoptyping %D %D The latter approach is not used in \CONTEXT, because we %D store relevant combinations of accents and characters in %D individual macros. %D We define character substitutes and commands with definition %D commands like: %D %D \starttyping %D \startcoding[texnansi] %D %D \defineaccent " a 228 %D \defineaccent ^ e 234 %D \defineaccent ' {\dotlessi} 237 %D %D \definecharacter ae 230 %D \definecharacter oe 156 %D %D \definecommand b \texnansiencodedb %D \definecommand c \texnansiencodedc %D %D \stopcoding %D \stoptyping %D %D The last argument of \type{\defineaccent} and %D \type{\definecharacter} tells \TEX\ the position of the %D accented character in the encoding vector. In order to %D complish this, we tag each implementation with the character %D coding identifier. We therefore need two auxiliary variables %D \type{\characterencoding} and \type{\nocharacterencoding}. These %D contain the current and default encoding vectors and both %D default to the \PLAIN\ one. \edef\characterencoding {@\s!default @} \edef\nocharacterencoding {@\s!default @} \edef\charactermapping {@\s!default @} % todo, else \d j == \dj, print file and check \def\accentprefix {}%{*} \def\commandprefix {}%{=} \def\characterprefix{}%{-} %D \macros %D {startcoding, reducetocoding} %D %D Before we can redefine accents and special characters, we %D have to tell \CONTEXT\ what encoding is in force. The next %D command is responsible for doing this and also takes care of %D the definition of the recoding commands. We use the \type %D {\start}||\type {\stop}||commands for definitions and the %D \type {\reduceto}||command for local switching to %D simplified commands. % etex : \ifcsname \def\justhandleaccent#1#2% \empty makes #2={} save % no \unexpanded {\ifundefined{\accentprefix\characterencoding#1\string#2\empty}% #2% \else \csname\accentprefix\characterencoding#1\string#2\empty\endcsname \fi} \def\justhandlecommand#1% % no \unexpanded, otherwise pdfdoc will fail {\ifundefined{\commandprefix\characterencoding#1}% as well as hyph patterns #1% \else \csname\commandprefix\characterencoding#1\endcsname \fi} \def\enableencoding {\dodoubleempty\doenableencoding} \def\doenableencoding[#1][#2]% main fallback {\iffirstargument\edef\characterencoding{@#1@}\fi \edef\nocharacterencoding{@\ifsecondargument#2\else\s!default\fi @}% \synchronizepatterns} \edef\xnocharacterencoding{@\s!default @} \def\fastenableencoding#1% {\edef\characterencoding{@#1@}% \let\nocharacterencoding\xnocharacterencoding} \def\startencoding {\dodoubleempty\dostartencoding} \def\dostartencoding[#1][#2]% encoding regime {%\showmessage\m!encodings1{#1}% \pushmacro\characterencoding \pushmacro\currentregime \pushmacro\dohandleaccent % still needed? \pushmacro\dohandlecommand % still needed? \pushmacro\doautosetregime \let\dohandleaccent\donthandleaccent % still needed? \let\dohandlecommand\donthandlecommand % still needed? %let\definesortkey\savesortkey \edef\characterencoding{@#1@}% \doifelsenothing{#2}% {\let\doautosetregime\gobbletwoarguments} {\def\currentregime{#2}}} \def\stopencoding {\popmacro\doautosetregime \popmacro\dohandlecommand % still needed? \popmacro\dohandleaccent % still needed? \popmacro\currentregime \popmacro\characterencoding} % probably obsolete (hm, not yet) \def\reducetocoding[#1]% use grouped! {\doifsomething{#1} {\let\dohandleaccent \justhandleaccent \let\dohandlecommand\justhandlecommand \enableencoding[#1]% \enablelanguagespecifics[\currentlanguage]}} \let\startcoding \startencoding \def\stopcoding {\stopencoding} \let\enablecoding \enableencoding %D The use of these macros are not limited to font %D definition files, but may also be used when loading %D patterns. %D \macros %D {definesortkey,flushsortkeys,flushsortkey} %D %D Yet another definition concerns sorting of indexes and %D lists. %D %D \starttyping %D \definesortkey {\'e} {e} {a} {\'e} %D \stoptyping %D %D The first argument denotes the string to be treated. The %D second argument is the raw replacement, while the third %D argument determines the sort order given the replacement. %D The last argument is used as entry in the index (a, b, etc). %D %D The keys can be flushed using \type {\flushsortkeys} %D which in turn results in a sequence of calls to \type %D {\flushsortkey}, a macro taking 4~arguments. %D %D This mechanism is currently being tested and subjected to %D changes! Obsolete: \let\definesortkey\gobblefourarguments \let\savesortkey \gobblefourarguments \let\flushsortkeys\relax \let\flushsortkey \relax %D \macros %D {defineaccent, definecharacter, definecommand} %D %D The actual definition of accents, special characters and %D commands is done with the next three commands. \def\defineaccent {\protectfontcharacters \dodefineaccent} \def\dodefineaccent#1 #2 % {\unprotectfontcharacters \dododefineaccent#1 #2 } \def\dododefineaccent#1 #2 #3 % {\setvalue{#1}{\dohandleaccent{#1}}% \doifnumberelse{\string#3} {\setvalue{\accentprefix\characterencoding#1\string#2}{\char#3 }} % space added {\setvalue{\accentprefix\characterencoding#1\string#2}{#3}}} \def\dohandleaccent#1#2% {\ifcsname\accentprefix\characterencoding#1\string#2\empty\endcsname \csname\accentprefix\characterencoding#1\string#2\empty\endcsname \else\ifcsname\accentprefix\nocharacterencoding#1\string#2\empty\endcsname \csname\accentprefix\nocharacterencoding#1\string#2\empty\endcsname \else\ifcsname\accentprefix\characterencoding#1\endcsname \csname\accentprefix\characterencoding#1\endcsname{#2}% \else%\ifcsname\accentprefix\nocharacterencoding#1\endcsname \csname\accentprefix\nocharacterencoding#1\endcsname{#2}% % \else % \donormaltextaccent{#1}{#2}% \fi\fi\fi}%\fi} \def\patternchar#1 {\rawcharacter{#1}} % space is part of character definition ! % \ifx \enablepatterntokens\undefined % \def\handlepatterntoken#1]{\csname#1\endcsname} % \fi % we need to postpone catcode changes, e.g. hr patterns % have \catcode" -> which fails when " is letter \def\pathypsettings {\ifx \enablepatterntokens\undefined \defineactivecharacter [ {\handlepatterntoken}% \else \enablepatterntokens \fi \let\dochar\thechr \lccode16=16 % brrr, extra quote in ec (turkish) \lccode17=17 % brrr, extra quote in ec (turkish) \lccode`\-=`\- \lccode`\'=`\' \lccode`\"=`\" \relax} \def\patterns {\pathypsettings\normalpatterns } \def\hyphenation{\pathypsettings\normalhyphenation} %D Because we don't want to use the second command grouped, we %D (re)define it as follows: \def\hyphenation {\begingroup\def\hyphenation{\normalhyphenation{\the\scratchtoks}\endgroup}% \pathypsettings\afterassignment\hyphenation\scratchtoks=} %D This is not needed for patterns because they are loaded grouped %D anyway and it saves us an assignment. Can go ... no longer %D shared patterns. \def\startpatternloading#1#2#3% % we should use \everypatternloading {\startreadingfile \bgroup % let's get rid of interfering stuff \let\everyjob\scratchtoks \let\message \gobbleoneargument % we want direct characters \let\char\patternchar \doifelsenothing{#2}{\enableencoding[ec]}{\enableencoding[#2]}% \doifelsenothing{#3}{\enablemapping [ec]}{\enablemapping [#3]}% \expanded{\doifinstring{\f!languageprefix}{#1}} {\ifx \enablepatternxml\undefined \else \enablepatternxml \fi}% \let\dohandleaccent\normaldohandleaccent} \def\stoppatternloading {\egroup \stopreadingfile} \def\thechr#1{\char#1 } % just in case \relax interferes \unexpanded\def\numchr#1{\char#1\relax} \unexpanded\def\strchr#1{\csname#1\endcsname} \let\dochar\numchr \def\startdirectcharacters {\pushmacro\dochar \let\dochar\thechr} \def\stopdirectcharacters {\popmacro \dochar} \def\definecharacter#1 #2 % {\ifundefined{#1}\setvalue{#1}{\dohandlecharacter{#1}}\fi \doifnumberelse{\string#2} {\setvalue{\characterprefix\characterencoding\string#1}{\dochar{#2}}% \doautosetregime{#1}{#2}} {\setvalue{\characterprefix\characterencoding\string#1}{#2}}} \def\dohandlecharacter#1% {\csname\characterprefix\ifcsname\characterprefix\characterencoding#1\endcsname \characterencoding\else\nocharacterencoding\fi#1\endcsname} % \def\fallbackpatternchar{x} % makes no sense, duplicate patterns \def\defaultcharacter#1% {\csname\characterprefix\nocharacterencoding\strippedcsname#1\endcsname} %D Instead of numbers, a command may be entered. \def\definecommand#1 #2 % {\setvalue{\string#1}{\dohandlecommand{#1}}% %\redefinecommand #1 % just to be sure \setvalue{\commandprefix\characterencoding\string#1}{#2}} %D Here we see that redefining accents is characters is more %D or less the same as redefining commands. We also could have %D said: %D %D \starttyping %D \def\defineaccent#1 #2 {\definecommand#1\string#2 \char} %D \def\definecharacter#1 {\definecommand#1 \char} %D \stoptyping %D \macros %D {defineaccentcommand} %D %D When needed, one can overload the default positions of the %D accents. The \PLAIN\ \TEX\ defaults are: %D %D \starttyping %D \defineaccentcommand ` 18 %D \defineaccentcommand ' 19 %D \defineaccentcommand v 20 %D \defineaccentcommand u 21 %D \defineaccentcommand = 22 %D \defineaccentcommand ^ 94 %D \defineaccentcommand . 95 %D \defineaccentcommand H 125 % "7D %D \defineaccentcommand ~ 126 % "7E %D \defineaccentcommand " 127 % "7F %D \stoptyping \def\defineaccentcommand {\protectfontcharacters \dodefineaccentcommand} \def\dodefineaccentcommand#1 #2 % \string toegevoegd {\doifnumberelse{\string#2} {\setvalue{\accentprefix\characterencoding\string#1}##1{{\accent#2 ##1}}} {\setvalue{\accentprefix\characterencoding\string#1}##1{{#2##1}}}% \unprotectfontcharacters} %D We don't have to define them for the default \PLAIN\ case. %D Commands may be used instead of character codes. %D \macros %D {redefinecommand} %D %D Redefinition of encoding dependant commands like \type{\b} %D and \type{\c} can be triggered by: %D %D \starttyping %D \redefinecommand b % something math %D \redefinecommand c % something math %D \stoptyping %D %D Handling of characters is easier than handling accents %D because here we don't have to take care of arguments. We %D just call for the right glyph in the right place. %D %D The \type{\next} construction permits handling of commands %D that take arguments. This means that we can use this %D command to redefine accent handling commands too %D (although today the next is not needed any longer in test %D macros). \def\redefinecommand#1 % {% no \unexpanded, else pdfdoc fails \setvalue{\string#1}{\dohandlecommand{#1}}}% \def\dohandlecommand#1% {\csname\commandprefix \ifcsname\commandprefix\characterencoding#1\endcsname \characterencoding \else \nocharacterencoding \fi #1\endcsname} %D \macros %D {currentencoding, currentmapping} %D %D When we show 'm, we don't want to see the protection %D measures. \def\currentencoding{\@EA\dopureencodingname\characterencoding} \def\currentmapping {\@EA\dopureencodingname\charactermapping } \def\dopureencodingname @#1@{#1} \def\pureencodingname#1{\@EA\dopureencodingname#1} %D \macros %D {showaccents, showcharacters, %D showcharacterbounds, showhyphenations} %D %D Encoding is a tricky business. Therefore we provide a %D a few macros that show most of the characters involved. The %D next two tables show the result of \type {\showaccents}. %D %D \placetable %D {The special glyphs in default encoding.} %D {\showaccents} %D %D \placetable %D {The special glyphs in texnansi encoding.} %D {\switchtobodyfont[lbr]\showaccents} %D %D The command %D %D \starttyping %D \showhyphenations{doordefini\"eren} %D \stoptyping %D %D can be used to check the correct loading of hyphenation %D patterns. \fetchruntimecommand \showaccents {\f!encodingprefix\s!run} \fetchruntimecommand \showcharacters {\f!encodingprefix\s!run} \fetchruntimecommand \showcharacterbounds {\f!encodingprefix\s!run} \fetchruntimecommand \showhyphenations {\f!encodingprefix\s!run} \fetchruntimecommand \showmapping {\f!encodingprefix\s!run} %D \macros %D {everyuppercase, EveryUppercase, %D everyuppercase, EveryUppercase} %D %D When we want to uppercase strings of characters, we have to %D take care of those characters that have a special meaning or %D are only accessible by means of macros. The next hack was %D introduced when Tobias Burnus started translating head and %D label texts into spanish and italian. The first application %D of this token register therefore can be found in the module %D that deals with these texts. \newevery \everyuppercase \EveryUppercase \newevery \everylowercase \EveryLowercase %D This magic trick maps takes care of mapping from lower to %D upper case and reverse. \def\reloadmapping{\the\executeifdefined{\@cas@\charactermapping}\emptytoks} \appendtoks\let\setuppercasecom\setcasecom\to\everyuppercase \appendtoks\let\setlowercasecom\setcasecom\to\everylowercase \appendtoks\reloadmapping\to\everyuppercase % slow, will be sped up \appendtoks\reloadmapping\to\everylowercase % slow, will be sped up \newtoks\everyULmap \appendtoks\let\remapcase\remapuppercase\the\everyULmap\to\everyuppercase \appendtoks\let\remapcase\remaplowercase\the\everyULmap\to\everylowercase \let\remapcase\gobbletwoarguments \def\remapuppercase#1#2{\let#2#1} % more efficient: \def\remaplowercase#1#2{\let#1#2} \let\remaplowercase\let \def\defineLCcharacter #1 #2 % {\appendtoks\let\to\everylowercase \@EA\appendtoks\csname#1\endcsname\to\everylowercase \@EA\appendtoks\csname#2\endcsname\to\everylowercase} \def\defineUCcharacter #1 #2 % {\appendtoks\let\to\everyuppercase \@EA\appendtoks\csname#1\endcsname\to\everyuppercase \@EA\appendtoks\csname#2\endcsname\to\everyuppercase} \def\defineULcharacter #1 #2 % {\appendtoks\remapcase\to\everyULmap \@EA\appendtoks\csname#1\endcsname\to\everyULmap \@EA\appendtoks\csname#2\endcsname\to\everyULmap} % slightly faster with \smallcapped's but far more hash and stringspace % % \newif\ifuppercase \appendtoks\uppercasetrue\to\everyuppercase % \newif\iflowercase \appendtoks\lowercasetrue\to\everylowercase % % \def\defineULcharacter #1 #2 % % {\def\!!stringa{@#1}\@EA\letvalue\@EA\!!stringa\csname#1\endcsname % \def\!!stringa{@#2}\@EA\letvalue\@EA\!!stringa\csname#2\endcsname % \setvalue{#1}{\getvalue{@\ifuppercase#2\else#1\fi}}% % \setvalue{#2}{\getvalue{@\iflowercase#1\else#2\fi}}} % 2 = tricky, since expanding \definedfont[lowcasename] ... goes wrong \chardef\uppercasemode\plusthree % 0=ignore 1=normal 2=expand 3=auto \chardef\casecommode \plusone % 0=noexpand 1=expand \def\setcasecom #1#2{\def#1{\ifcase\casecommode\noexpand#1\else#2\fi}} % \def\OEPS{whatever} % % \startmapping[ec] % \defineuppercasecom \oeps {\getvalue{OEPS}} % \stopmapping % % \WORD{xx \oeps} \def\douppercase#1% {\bgroup \let\douppercase\firstofoneargument \the\everyuppercase % currently also checks uppercasemode \let\dochar\rawcharacter \ifcase\uppercasemode #1% \or % No expansion here, otherwise \getvalue problems! Default!!! %\edef\next{#1}% keep this to prevent roll back %\uppercase\expandafter{\next}% keep this to prevent roll back \uppercase{#1}% \or \chardef\casecommode\zerocount \let\docasecom\firstoftwoarguments \edef\ascii{#1}% \edef\ascii{\expandafter\uppercase\expandafter{\ascii}}% needed when in regime \chardef\casecommode\plusone \ascii \else % mode three may trigger setting 2 elsewhere (e.g. regime test) \uppercase{#1}% \fi \egroup} \prependtoksonce \doifnot\currentregime\s!default {\ifnum\uppercasemode=\plusthree \chardef\uppercasemode\plustwo \fi}% \to \everyuppercase %D \macros %D {everysanitize, EverySanitize} %D %D Whenever we are sanitizing strings, like we sometimes do %D when we deal with specials, the next token register can be %D called. \newevery \everysanitize \EverySanitize %D \macros %D {defineuclass,defineudigit,udigit} %D %D The next few macros are experimental and needed for unicoded %D chinese characters. \def\defineuclass #1 #2 #3 % {\setvalue{uc\the\numexpr#2*256+#3\relax}{#1}} \def\defineudigit #1 #2 #3 {\setvalue{\characterencoding uc#1}{\uchar{#2}{#3}}} %D It may look strange, but for the moment, we want the encoding %D to be part of the digit specification. This may change! \unexpanded\def\udigit#1#2{\getvalue{@#1@uc\number#2}} %D \macros %D {uchar, octuchar, hexuchar} \ifx\uchar\undefined \def\uchar#1#2{(\number#1,\number#2)} \fi \def\octuchar#1#2{\uchar{`#1}{`#2}} \def\hexuchar#1#2{\uchar{"#1}{"#2}} %D Basics and fallbacks. \newif\ifignoreaccent \let\textaccent \accent \let\normaltextaccent\textaccent % ** we will explicitly embrace the two arguments, since in definitions % this may not be the case, and we don't want faulty expansions like % "\dobuildtextaccent \char 18 a" but "\dobuildtextaccent {\char 18}{a}" % instead \def\buildmathaccent#1% {\mathaccent#1 } \def\buildtextaccent#1#2% ** {\ifignoreaccent \expandafter\nobuildtextaccent \else \expandafter\dobuildtextaccent \fi{#1}{#2}} \unexpanded\def\nobuildtextaccent#1#2% {#2} \unexpanded\def\dobuildtextaccent#1#2% {{\let\char\normalaccent#1\let\char\normalchar#2}} % some fake ones, name will change into build \unexpanded\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char {\dontleavehmode % why this align mess \vtop {\forgetall \baselineskip\zeropoint \lineskip#1% \everycr\emptytoks \tabskip\zeropoint \lineskiplimit\zeropoint \setbox0\hbox{#4}% \halign {##\crcr\hbox{#5}\crcr \hidewidth \hskip#2\wd0 \hskip-#3\slantperpoint % in plain 1ex * dimenless value \vbox to .2ex{\box0\vss}\hidewidth \crcr}}} \def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}} \def\buildtextbottomdot{\bottomaccent{.25ex}{0}{5}{\textbottomdot}} \def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}} \def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}} %D A collectors item: \def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}} %D Rarely needed but there: \unexpanded\def\topaccent#1#2#3#4#5% down right slantcorrection accent char {\dontleavehmode \bgroup \setbox0\hbox{#4}% \setbox2\hbox{#5}% \hbox to \wd2 \bgroup \hss\copy2\hss \hskip-\wd2 \hss\hskip#2\wd0\hskip-#3\slantperpoint\raise#1\hbox{#4}\hss \egroup \egroup} \def\buildtextgrave{\topaccent{0pt}{0}{15}{\textgrave}} % e.g. % \definecharacter schwa {\hbox{\rotate[rotation=180,location=high]{\hbox{e}}}} % \definecharacter schwagrave {\buildtextgrave\schwa} % math stuff, will change \def\definemathaccent#1 #2% {\setvalue{\string#1}{#2}% \setvalue{normalmathaccent\string#1}{#2}} \def\donormalmathaccent#1% {\getvalue{normalmathaccent\string#1}} %D Some precautions: \ifx\usepdffontresource\undefined \def\usepdffontresource #1 {} % this will be defined elsewhere \fi \def\donthandleaccent #1{\expandafter\string\csname#1\endcsname\space} \def\donthandlecommand #1{\expandafter\string\csname#1\endcsname\space} \def\donthandlecharacter #1{\expandafter\string\csname#1\endcsname\space} \def\stringifyhandleaccent #1{\strchr{#1}} \def\stringifyhandlecommand #1{\strchr{#1}} \def\stringifyhandlecharacter#1{\strchr{#1}} \def\keephandleaccent #1{\expandafter\noexpand\csname#1\endcsname} \def\keephandlecommand #1{\expandafter\noexpand\csname#1\endcsname} \def\keephandlecharacter #1{\expandafter\noexpand\csname#1\endcsname} \def\handleaccent #1{\csname#1\endcsname} \def\handlecommand #1{\csname#1\endcsname} \def\handlecharacter #1{\csname#1\endcsname} \def\dontexpandencoding {\let\dohandleaccent \donthandleaccent \let\dohandlecommand \donthandlecommand \let\dohandlecharacter\donthandlecharacter} \def\keepencodedtokens {\let\dohandleaccent \keephandleaccent \let\dohandlecommand \keephandlecommand \let\dohandlecharacter\keephandlecharacter} \def\literateencodedtokens {% \let\dohandleaccent \keephandleaccent % \let\dohandlecommand \keephandlecommand \let\dohandlecharacter\keephandlecharacter} \def\stringifyencodedtokens {% \let\dohandleaccent \stringifyhandleaccent % \let\dohandlecommand \stringifyhandlecommand \let\dohandlecharacter\stringifyhandlecharacter} \unexpanded\def\uhandleaccent #1{\csname#1\endcsname} \unexpanded\def\uhandlecommand #1{\csname#1\endcsname} \unexpanded\def\uhandlecharacter#1{\csname#1\endcsname} \def\dontexpandencodedtokens {\def\dohandleaccent {\uhandleaccent}% \def\dohandlecommand {\uhandlecommand}% \def\dohandlecharacter{\uhandlecharacter}} % no longer: \def\convertencodedtokens{\dontexpandencoding} but: \def\convertencodedtokens{\stringifyencodedtokens} % test case: % % \enableregime[cp1250] % \mainlanguage[cz] % % \starttext % % \title{Ϭuޯu餭 kon졺p % \placelist[chapter][criterium=all] % % \startbuffer % % Ϭuޯu餭 kon졺p󛱴itle> % </chapter> % \stopbuffer % % \defineXMLenvironment % [chapter] % {\defineXMLsave[title]} % {\expanded{\chapter{\XMLflush{title}}}} % \processXMLbuffer % % \setuphead[chapter][expansion=yes] % \defineXMLenvironment % [chapter] % {\defineXMLsave[title]} % {\chapter{\XMLflush{title}}} % \processXMLbuffer % % \stoptext %D Still valid? To be checked: \def\doignoreaccent #1#2{\string#1\string#2}% \def\doignorecommand #1{\string#1} \def\doignorecharacter#1{\string#1} \def\ignoreencoding {\let\dohandleaccent \doignoreaccent \let\dohandlecommand \doignorecommand \let\dohandlecharacter\doignorecharacter} \appendtoks \ignoreencoding \to \everycleanupfeatures \appendtoks \keepencodedtokens \to \everysafeexpanded %D Now we will not redefine any more, so: \let\normaldohandleaccent \dohandleaccent \let\normaldohandlecharacter\dohandlecharacter \definecommand ` {\buildtextaccent\textgrave} \definecommand ' {\buildtextaccent\textacute} \definecommand r {\buildtextaccent\textring} \definecommand v {\buildtextaccent\textcaron} \definecommand u {\buildtextaccent\textbreve} \definecommand = {\buildtextaccent\textmacron} \definecommand ^ {\buildtextaccent\textcircumflex} \definecommand . {\buildtextaccent\textdotaccent} \definecommand H {\buildtextaccent\texthungarumlaut} \definecommand ~ {\buildtextaccent\texttilde} \definecommand " {\buildtextaccent\textdiaeresis} \definecommand c {\buildtextcedilla} \definecommand b {\buildtextmacron} \definecommand d {\buildtextbottomdot} \definecommand k {\buildtextogonek} \definemathaccent acute {\buildmathaccent\mathacute} \definemathaccent grave {\buildmathaccent\mathgrave} \definemathaccent ddot {\buildmathaccent\mathddot} \definemathaccent tilde {\buildmathaccent\mathtilde} \definemathaccent bar {\buildmathaccent\mathbar} \definemathaccent breve {\buildmathaccent\mathbreve} \definemathaccent check {\buildmathaccent\mathcheck} \definemathaccent hat {\buildmathaccent\mathhat} \definemathaccent vec {\buildmathaccent\mathvec} \definemathaccent dot {\buildmathaccent\mathdot} \definemathaccent widetilde {\buildmathaccent\mathwidetilde} \definemathaccent widehat {\buildmathaccent\mathwidehat} \useencoding[def] % defaults (partly simplified) \useencoding[acc] % accent commands \useencoding[raw] % simplified (incomplete) \useencoding[com] % a few commands \useencoding[cas] % case mapping, not needed in mkiv \useencoding[mis] % a few commands %D We preload several encodings: \ifnum\texengine=\xetexengine \setupencoding[\s!default=\s!default] \else \useencoding[ans,il2,ec,tbo,pdf,pol,qx,t5,l7x,cyr,agr] % pol and il2 will go away, not needed in mkiv, uc removed \useencoding[032,033,037] % fallbacks for some unicode chars \setupencoding[\s!default=ec] % was: [\s!default=\s!default] \fi \protect \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-ldx.lua�����������������������������������0000644�0001750�0001750�00000024600�12130411274�023425� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['x-ldx'] = { version = 1.001, comment = "companion to x-ldx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- --[[ldx-- -- <topic>Introduction</topic> -- --ldx]]-- --[[ldx-- <source>Lua Documentation Module</source> This file is part of the <logo label='context'/> documentation suite and itself serves as an example of using <logo label='lua'/> in combination with <logo label='tex'/>. I will rewrite this using lpeg. On the other hand, we cannot expect proper <logo label='tex'/> and for educational purposed the syntax might be wrong. --ldx]]-- -- there is a nice parser on from http://lua-users.org/wiki/LpegRecipes (by -- Patrick Donnelly) but lua crashes when I apply functions to some of the -- matches banner = "version 1.0.1 - 2007+ - PRAGMA ADE / CONTEXT" --[[ This script needs a few libraries. Instead of merging the code here we can use <typing> mtxrun --internal x-ldx.lua </typing> That way, the libraries included in the runner will be used. ]]-- -- libraries l-string.lua l-table.lua l-io.lua l-file.lua -- begin library merge -- end library merge local gsub, find, sub = string.gsub, string.find, string.sub local splitstring, emptystring = string.split, string.is_empty local concat = table.concat --[[ Just a demo comment line. We will handle such multiline comments but only when they start and end at the beginning of a line. More rich comments are tagged differently. ]]-- --[[ldx-- First we define a proper namespace for this module. The <q>l</q> stands for <logo label='lua'/>, the <q>d</q> for documentation and the <q>x</q> for <logo label='xml'/>. --ldx]]-- if not ldx then ldx = { } end --[[ldx-- We load the lua file into a table. The entries in this table themselves are tables and have keys like <t>code</t> and <t>comment</t>. --ldx]]-- function ldx.load(filename) local data = file.readdata(filename) local expr = "%s*%-%-%[%[ldx%-*%s*(.-)%s*%-%-ldx%]%]%-*%s*" local i, j, t = 0, 0, { } while true do local comment, ni ni, j, comment = find(data, expr, j) if not ni then break end t[#t+1] = { code = sub(data, i, ni-1) } t[#t+1] = { comment = comment } i = j + 1 end local str = sub(data, i, #data) str = gsub(str, "^%s*(.-)%s*$", "%1") if #str > 0 then t[#t+1] = { code = str } end return t end --[[ldx-- We will tag keywords so that we can higlight them using a special font or color. Users can extend this list when needed. --ldx]]-- ldx.keywords = { } --[[ldx-- Here come the reserved words: --ldx]]-- ldx.keywords.reserved = { ["and"] = 1, ["break"] = 1, ["do"] = 1, ["else"] = 1, ["elseif"] = 1, ["end"] = 1, ["false"] = 1, ["for"] = 1, ["function"] = 1, ["if"] = 1, ["in"] = 1, ["local"] = 1, ["nil"] = 1, ["not"] = 1, ["or"] = 1, ["repeat"] = 1, ["return"] = 1, ["then"] = 1, ["true"] = 1, ["until"] = 1, ["while"] = 1 } --[[ldx-- We need to escape a few tokens. We keep the hash local to the definition but set it up only once, hence the <key>do</key> construction. --ldx]]-- do local e = { [">"] = ">", ["<"] = "<", ["&"] = "&" } function ldx.escape(str) return (gsub(str, "([><&])",e)) end end --[[ldx-- Enhancing the code is a bit tricky due to the fact that we have to deal with strings and escaped quotes within these strings. Before we mess around with the code, we hide the strings, and after that we insert them again. Single and double quoted strings are tagged so that we can use a different font to highlight them. --ldx]]-- ldx.make_index = true function ldx.enhance(data) -- i need to use lpeg and then we can properly autoindent -) local e = ldx.escape for k=1,#data do local v = data[k] if v.code then local dqs, sqs, com, cmt, cod = { }, { }, { }, { }, e(v.code) cod = gsub(cod, '\\"', "##d##") cod = gsub(cod, "\\'", "##s##") cod = gsub(cod, "%-%-%[%[.-%]%]%-%-", function(s) cmt[#cmt+1] = s return "<l<<<".. #cmt ..">>>l>" end) cod = gsub(cod, "%-%-([^\n]*)", function(s) com[#com+1] = s return "<c<<<".. #com ..">>>c>" end) cod = gsub(cod, "(%b\"\")", function(s) dqs[#dqs+1] = sub(s,2,-2) or "" return "<d<<<".. #dqs ..">>>d>" end) cod = gsub(cod, "(%b\'\')", function(s) sqs[#sqs+1] = sub(s,2,-2) or "" return "<s<<<".. #sqs ..">>>s>" end) cod = gsub(cod, "(%a+)",function(key) local class = ldx.keywords.reserved[key] if class then return "<key class='" .. class .. "'>" .. key .. "</key>" else return key end end) cod = gsub(cod, "<s<<<(%d+)>>>s>", function(s) return "<sqs>" .. sqs[tonumber(s)] .. "</sqs>" end) cod = gsub(cod, "<d<<<(%d+)>>>d>", function(s) return "<dqs>" .. dqs[tonumber(s)] .. "</dqs>" end) cod = gsub(cod, "<c<<<(%d+)>>>c>", function(s) return "<com>" .. com[tonumber(s)] .. "</com>" end) cod = gsub(cod, "<l<<<(%d+)>>>l>", function(s) return cmt[tonumber(s)] end) cod = gsub(cod, "##d##", "\\\"") cod = gsub(cod, "##s##", "\\\'") if ldx.make_index then local lines = splitstring(cod,"\n") local f = "(<key class='1'>function</key>)%s+([%w%.]+)%s*%(" for k=1,#lines do local v = lines[k] -- functies v = gsub(v,f,function(key, str) return "<function>" .. str .. "</function>(" end) -- variables v = gsub(v,"^([%w][%w%,%s]-)(=[^=])",function(str, rest) local t = splitstring(str,",%s*") for k=1,#t do t[k] = "<variable>" .. t[k] .. "</variable>" end return concat(t,", ") .. rest end) -- so far lines[k] = v end v.code = concat(lines,"\n") else v.code = cod end end end end --[[ldx-- We're now ready to save the file in <logo label='xml'/> format. This boils down to wrapping the code and comment as well as the whole document. We tag lines in the code as such so that we don't need messy <t>CDATA</t> constructs and by calculating the indentation we also avoid space troubles. It also makes it possible to change the indentation afterwards. --ldx]]-- function ldx.as_xml(data) -- ldx: not needed local t, cmode = { }, false t[#t+1] = "<?xml version='1.0' standalone='yes'?>\n" t[#t+1] = "\n<document xmlns:ldx='http://www.pragma-ade.com/schemas/ldx.rng' xmlns='http://www.pragma-ade.com/schemas/ldx.rng'>\n" for k=1,#data do local v = data[k] if v.code and not emptystring(v.code) then t[#t+1] = "\n<code>\n" local split = splitstring(v.code,"\n") for k=1,#split do -- make this faster local v = split[k] local a, b = find(v,"^(%s+)") if v then v = gsub(v,"[\n\r ]+$","") end if a and b then v = sub(v,b+1,#v) if cmode then t[#t+1] = "<line comment='yes' n='" .. b .. "'>" .. v .. "</line>\n" else t[#t+1] = "<line n='" .. b .. "'>" .. v .. "</line>\n" end elseif emptystring(v) then if cmode then t[#t+1] = "<line comment='yes'/>\n" else t[#t+1] = "<line/>\n" end elseif find(v,"^%-%-%[%[") then t[#t+1] = "<line comment='yes'>" .. v .. "</line>\n" cmode= true elseif find(v,"^%]%]%-%-") then t[#t+1] = "<line comment='yes'>" .. v .. "</line>\n" cmode= false elseif cmode then t[#t+1] = "<line comment='yes'>" .. v .. "</line>\n" else t[#t+1] = "<line>" .. v .. "</line>\n" end end t[#t+1] = "</code>\n" elseif v.comment then t[#t+1] = "\n<comment>\n" .. v.comment .. "\n</comment>\n" else -- cannot happen end end t[#t+1] = "\n</document>\n" return concat(t,"") end --[[ldx-- Saving the result is a trivial effort. --ldx]]-- function ldx.save(filename,data) file.savedata(filename,ldx.as_xml(data)) end --[[ldx-- The next function wraps it all in one call: --ldx]]-- function ldx.convert(luaname,ldxname) if not file.is_readable(luaname) then luaname = luaname .. ".lua" end if file.is_readable(luaname) then if not ldxname then ldxname = file.replacesuffix(luaname,"ldx") end local data = ldx.load(luaname) if data then ldx.enhance(data) if ldxname ~= luaname then ldx.save(ldxname,data) end end end end --[[ldx-- This module can be used directly: <typing> mtxrun --internal x-ldx somefile.lua </typing> will produce an ldx file that can be processed with <logo label='context'/> by running: <typing> context --use=x-ldx --forcexml somefile.ldx </typing> You can do this in one step by saying: <typing> context --ctx=x-ldx somefile.lua </typing> This will trigger <logo label='context'/> into loading the mentioned <logo label='ctx'/> file. That file describes the conversion as well as the module to be used. The main conversion call is: --ldx]]-- -- todo: assume usage of "mtxrun --script x-ldx", maybe make it mtx-ldx if environment.files and environment.files[1] then ldx.convert(environment.files[1],environment.files[2]) end --~ exit(1) ��������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-ano.lua��������������������������������0000644�0001750�0001750�00000060372�12134352503�024102� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['lpdf-ano'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- when using rotation: \disabledirectives[refences.sharelinks] (maybe flag links) -- todo: /AA << WC << ... >> >> : WillClose actions etc local next, tostring = next, tostring local rep, format = string.rep, string.format local texcount = tex.count local lpegmatch = lpeg.match local formatters = string.formatters local backends, lpdf = backends, lpdf local trace_references = false trackers.register("references.references", function(v) trace_references = v end) local trace_destinations = false trackers.register("references.destinations", function(v) trace_destinations = v end) local trace_bookmarks = false trackers.register("references.bookmarks", function(v) trace_bookmarks = v end) local report_reference = logs.reporter("backend","references") local report_destination = logs.reporter("backend","destinations") local report_bookmark = logs.reporter("backend","bookmarks") local variables = interfaces.variables local constants = interfaces.constants local settings_to_array = utilities.parsers.settings_to_array local nodeinjections = backends.pdf.nodeinjections local codeinjections = backends.pdf.codeinjections local registrations = backends.pdf.registrations local javascriptcode = interactions.javascripts.code local references = structures.references local bookmarks = structures.bookmarks local runners = references.runners local specials = references.specials local handlers = references.handlers local executers = references.executers local getinnermethod = references.getinnermethod local nodepool = nodes.pool local pdfannotation_node = nodepool.pdfannotation local pdfdestination_node = nodepool.pdfdestination local latelua_node = nodepool.latelua local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfreference = lpdf.reference local pdfunicode = lpdf.unicode local pdfconstant = lpdf.constant local pdfflushobject = lpdf.flushobject local pdfshareobjectreference = lpdf.shareobjectreference local pdfreserveobject = lpdf.reserveobject local pdfpagereference = lpdf.pagereference local pdfdelayedobject = lpdf.delayedobject local pdfregisterannotation = lpdf.registerannotation -- todo: 3dview local pdf_annot = pdfconstant("Annot") local pdf_uri = pdfconstant("URI") local pdf_gotor = pdfconstant("GoToR") local pdf_goto = pdfconstant("GoTo") local pdf_launch = pdfconstant("Launch") local pdf_javascript = pdfconstant("JavaScript") local pdf_link = pdfconstant("Link") local pdf_n = pdfconstant("N") local pdf_t = pdfconstant("T") local pdf_fit = pdfconstant("Fit") local pdf_named = pdfconstant("Named") local pdf_border = pdfarray { 0, 0, 0 } local cache = { } local function pagedestination(n) -- only cache fit if n > 0 then local pd = cache[n] if not pd then local a = pdfarray { pdfreference(pdfpagereference(n)), pdf_fit, } pd = pdfshareobjectreference(a) cache[n] = pd end return pd end end lpdf.pagedestination = pagedestination local defaultdestination = pdfarray { 0, pdf_fit } local function link(url,filename,destination,page,actions) if filename and filename ~= "" then if file.basename(filename) == tex.jobname then return false else filename = file.addsuffix(filename,"pdf") end end if url and url ~= "" then if filename and filename ~= "" then if destination and destination ~= "" then url = file.join(url,filename).."#"..destination else url = file.join(url,filename) end end return pdfdictionary { S = pdf_uri, URI = url, } elseif filename and filename ~= "" then -- no page ? if destination == "" then destination = nil end if not destination and page then destination = pdfarray { page - 1, pdf_fit } end return pdfdictionary { S = pdf_gotor, -- can also be pdf_launch F = filename, D = destination or defaultdestination, -- D is mandate NewWindow = (actions.newwindow and true) or nil, } elseif destination and destination ~= "" then return pdfdictionary { -- can be cached S = pdf_goto, D = destination, } else local p = tonumber(page) if p and p > 0 then return pdfdictionary { -- can be cached S = pdf_goto, D = pdfarray { pdfreference(pdfpagereference(p)), pdf_fit, } } elseif trace_references then report_reference("invalid page reference %a",page) end end return false end lpdf.link = link function lpdf.launch(program,parameters) if program and program ~= "" then local d = pdfdictionary { S = pdf_launch, F = program, D = ".", } if parameters and parameters ~= "" then d.P = parameters end return d end end function lpdf.javascript(name,arguments) local script = javascriptcode(name,arguments) -- make into object (hash) if script then return pdfdictionary { S = pdf_javascript, JS = script, } end end local function pdfaction(actions) local nofactions = #actions if nofactions > 0 then local a = actions[1] local action = runners[a.kind] if action then action = action(a,actions) end if action then local first = action for i=2,nofactions do local a = actions[i] local what = runners[a.kind] if what then what = what(a,actions) end if what then action.Next = what action = what else -- error return nil end end return first, actions.n end end end lpdf.action = pdfaction function codeinjections.prerollreference(actions) -- share can become option if actions then local main, n = pdfaction(actions) if main then main = pdfdictionary { Subtype = pdf_link, Border = pdf_border, H = (not actions.highlight and pdf_n) or nil, A = pdfshareobjectreference(main), F = 4, -- print (mandate in pdf/a) } return main("A"), n end end end local function use_normal_annotations() local function reference(width,height,depth,prerolled) -- keep this one if prerolled then if trace_references then report_reference("width %p, height %p, depth %p, prerolled %a",width,height,depth,prerolled) end return pdfannotation_node(width,height,depth,prerolled) end end local function finishreference() end return reference, finishreference end -- eventually we can do this for special refs only local hashed, nofunique, nofused = { }, 0, 0 local f_annot = formatters["<< /Type /Annot %s /Rect [%0.3f %0.3f %0.3f %0.3f] >>"] local f_bpnf = formatters["_bpnf_(%s,%s,%s,'%s')"] local function use_shared_annotations() local factor = number.dimenfactors.bp local function finishreference(width,height,depth,prerolled) -- %0.2f looks okay enough (no scaling anyway) local h, v = pdf.h, pdf.v local llx, lly = h*factor, (v - depth)*factor local urx, ury = (h + width)*factor, (v + height)*factor local annot = f_annot(prerolled,llx,lly,urx,ury) local n = hashed[annot] if not n then n = pdfdelayedobject(annot) hashed[annot] = n nofunique = nofunique + 1 end nofused = nofused + 1 pdfregisterannotation(n) end _bpnf_ = finishreference local function reference(width,height,depth,prerolled) if prerolled then if trace_references then report_reference("width %p, height %p, depth %p, prerolled %a",width,height,depth,prerolled) end local luacode = f_bpnf(width,height,depth,prerolled) return latelua_node(luacode) end end statistics.register("pdf annotations", function() if nofused > 0 then return format("%s embedded, %s unique",nofused,nofunique) else return nil end end) return reference, finishreference end local lln = latelua_node() if node.has_field(lln,'string') then directives.register("refences.sharelinks", function(v) if v then nodeinjections.reference, codeinjections.finishreference = use_shared_annotations() else nodeinjections.reference, codeinjections.finishreference = use_normal_annotations() end end) nodeinjections.reference, codeinjections.finishreference = use_shared_annotations() else nodeinjections.reference, codeinjections.finishreference = use_normal_annotations() end node.free(lln) -- -- -- -- -- -- -- -- local done = { } -- prevent messages function nodeinjections.destination(width,height,depth,name,view) if not done[name] then done[name] = true if trace_destinations then report_destination("width %p, height %p, depth %p, name %a, view %a",width,height,depth,name,view) end return pdfdestination_node(width,height,depth,name,view) -- can be begin/end node end end -- runners and specials runners["inner"] = function(var,actions) if getinnermethod() == "names" then local vi = var.i if vi then local vir = vi.references if vir then local internal = vir.internal if internal then var.inner = "aut:" .. internal end end end else var.inner = nil end local prefix = var.p local inner = var.inner if inner and prefix and prefix ~= "" then inner = prefix .. ":" .. inner -- might not always be ok end return link(nil,nil,inner,var.r,actions) end runners["inner with arguments"] = function(var,actions) report_reference("todo: inner with arguments") return false end runners["outer"] = function(var,actions) local file, url = references.checkedfileorurl(var.outer,var.outer) return link(url,file,var.arguments,nil,actions) end runners["outer with inner"] = function(var,actions) local file = references.checkedfile(var.outer) -- was var.f but fails ... why return link(nil,file,var.inner,var.r,actions) end runners["special outer with operation"] = function(var,actions) local handler = specials[var.special] return handler and handler(var,actions) end runners["special outer"] = function(var,actions) report_reference("todo: special outer") return false end runners["special"] = function(var,actions) local handler = specials[var.special] return handler and handler(var,actions) end runners["outer with inner with arguments"] = function(var,actions) report_reference("todo: outer with inner with arguments") return false end runners["outer with special and operation and arguments"] = function(var,actions) report_reference("todo: outer with special and operation and arguments") return false end runners["outer with special"] = function(var,actions) report_reference("todo: outer with special") return false end runners["outer with special and operation"] = function(var,actions) report_reference("todo: outer with special and operation") return false end runners["special operation"] = runners["special"] runners["special operation with arguments"] = runners["special"] function specials.internal(var,actions) -- better resolve in strc-ref local i = tonumber(var.operation) local v = i and references.internals[i] if not v then -- error report_reference("no internal reference %a",i) elseif getinnermethod() == "names" then -- named return link(nil,nil,"aut:"..i,v.references.realpage,actions) else -- page return link(nil,nil,nil,v.references.realpage,actions) end end -- realpage already resolved specials.i = specials.internal local pages = references.pages function specials.page(var,actions) local file = var.f if file then file = references.checkedfile(file) return link(nil,file,nil,var.operation,actions) else local p = var.r if not p then -- todo: call special from reference code p = pages[var.operation] if type(p) == "function" then -- double p = p() else p = references.realpageofpage(tonumber(p)) end -- if p then -- var.r = p -- end end return link(nil,nil,nil,p or var.operation,actions) end end function specials.realpage(var,actions) local file = var.f if file then file = references.checkedfile(file) return link(nil,file,nil,var.operation,actions) else return link(nil,nil,nil,var.operation,actions) end end function specials.userpage(var,actions) local file = var.f if file then file = references.checkedfile(file) return link(nil,file,nil,var.operation,actions) else local p = var.r if not p then -- todo: call special from reference code p = var.operation if p then -- no function and special check here. only numbers p = references.realpageofpage(tonumber(p)) end -- if p then -- var.r = p -- end end return link(nil,nil,nil,p or var.operation,actions) end end function specials.deltapage(var,actions) local p = tonumber(var.operation) if p then p = references.checkedrealpage(p + texcount.realpageno) return link(nil,nil,nil,p,actions) end end -- sections -- function specials.section(var,actions) -- local sectionname = var.operation -- local destination = var.arguments -- local internal = structures.sections.internalreference(sectionname,destination) -- if internal then -- var.special = "internal" -- var.operation = internal -- var.arguments = nil -- specials.internal(var,actions) -- end -- end specials.section = specials.internal -- specials.section just need to have a value as it's checked -- todo, do this in references namespace ordered instead (this is an experiment) local splitter = lpeg.splitat(":") function specials.order(var,actions) -- references.specials ! local operation = var.operation if operation then local kind, name, n = lpegmatch(splitter,operation) local order = structures.lists.ordered[kind] order = order and order[name] local v = order[tonumber(n)] local r = v and v.references.realpage if r then var.operation = r -- brrr, but test anyway return specials.page(var,actions) end end end function specials.url(var,actions) local url = references.checkedurl(var.operation) return link(url,nil,var.arguments,nil,actions) end function specials.file(var,actions) local file = references.checkedfile(var.operation) return link(nil,file,var.arguments,nil,actions) end function specials.fileorurl(var,actions) local file, url = references.checkedfileorurl(var.operation,var.operation) return link(url,file,var.arguments,nil,actions) end function specials.program(var,content) local program = references.checkedprogram(var.operation) return lpdf.launch(program,var.arguments) end function specials.javascript(var) return lpdf.javascript(var.operation,var.arguments) end specials.JS = specials.javascript executers.importform = pdfdictionary { S = pdf_named, N = pdfconstant("AcroForm:ImportFDF") } executers.exportform = pdfdictionary { S = pdf_named, N = pdfconstant("AcroForm:ExportFDF") } executers.first = pdfdictionary { S = pdf_named, N = pdfconstant("FirstPage") } executers.previous = pdfdictionary { S = pdf_named, N = pdfconstant("PrevPage") } executers.next = pdfdictionary { S = pdf_named, N = pdfconstant("NextPage") } executers.last = pdfdictionary { S = pdf_named, N = pdfconstant("LastPage") } executers.backward = pdfdictionary { S = pdf_named, N = pdfconstant("GoBack") } executers.forward = pdfdictionary { S = pdf_named, N = pdfconstant("GoForward") } executers.print = pdfdictionary { S = pdf_named, N = pdfconstant("Print") } executers.exit = pdfdictionary { S = pdf_named, N = pdfconstant("Quit") } executers.close = pdfdictionary { S = pdf_named, N = pdfconstant("Close") } executers.save = pdfdictionary { S = pdf_named, N = pdfconstant("Save") } executers.savenamed = pdfdictionary { S = pdf_named, N = pdfconstant("SaveAs") } executers.opennamed = pdfdictionary { S = pdf_named, N = pdfconstant("Open") } executers.help = pdfdictionary { S = pdf_named, N = pdfconstant("HelpUserGuide") } executers.toggle = pdfdictionary { S = pdf_named, N = pdfconstant("FullScreen") } executers.search = pdfdictionary { S = pdf_named, N = pdfconstant("Find") } executers.searchagain = pdfdictionary { S = pdf_named, N = pdfconstant("FindAgain") } executers.gotopage = pdfdictionary { S = pdf_named, N = pdfconstant("GoToPage") } executers.query = pdfdictionary { S = pdf_named, N = pdfconstant("AcroSrch:Query") } executers.queryagain = pdfdictionary { S = pdf_named, N = pdfconstant("AcroSrch:NextHit") } executers.fitwidth = pdfdictionary { S = pdf_named, N = pdfconstant("FitWidth") } executers.fitheight = pdfdictionary { S = pdf_named, N = pdfconstant("FitHeight") } local function fieldset(arguments) -- [\dogetfieldset{#1}] return nil end function executers.resetform(arguments) arguments = (type(arguments) == "table" and arguments) or settings_to_array(arguments) return pdfdictionary { S = pdfconstant("ResetForm"), Field = fieldset(arguments[1]) } end local formmethod = "post" -- "get" "post" local formformat = "xml" -- "xml" "html" "fdf" -- bit 3 = html bit 6 = xml bit 4 = get local flags = { get = { html = 12, fdf = 8, xml = 40, }, post = { html = 4, fdf = 0, xml = 32, } } function executers.submitform(arguments) arguments = (type(arguments) == "table" and arguments) or settings_to_array(arguments) local flag = flags[formmethod] or flags.post flag = (flag and (flag[formformat] or flag.xml)) or 32 -- default: post, xml return pdfdictionary { S = pdfconstant("SubmitForm"), F = arguments[1], Field = fieldset(arguments[2]), Flags = flag, -- \PDFsubmitfiller } end local pdf_hide = pdfconstant("Hide") function executers.hide(arguments) return pdfdictionary { S = pdf_hide, H = true, T = arguments, } end function executers.show(arguments) return pdfdictionary { S = pdf_hide, H = false, T = arguments, } end local pdf_movie = pdfconstant("Movie") local pdf_start = pdfconstant("Start") local pdf_stop = pdfconstant("Stop") local pdf_resume = pdfconstant("Resume") local pdf_pause = pdfconstant("Pause") local function movie_or_sound(operation,arguments) arguments = (type(arguments) == "table" and arguments) or settings_to_array(arguments) return pdfdictionary { S = pdf_movie, T = format("movie %s",arguments[1] or "noname"), Operation = operation, } end function executers.startmovie (arguments) return movie_or_sound(pdf_start ,arguments) end function executers.stopmovie (arguments) return movie_or_sound(pdf_stop ,arguments) end function executers.resumemovie(arguments) return movie_or_sound(pdf_resume,arguments) end function executers.pausemovie (arguments) return movie_or_sound(pdf_pause ,arguments) end function executers.startsound (arguments) return movie_or_sound(pdf_start ,arguments) end function executers.stopsound (arguments) return movie_or_sound(pdf_stop ,arguments) end function executers.resumesound(arguments) return movie_or_sound(pdf_resume,arguments) end function executers.pausesound (arguments) return movie_or_sound(pdf_pause ,arguments) end function specials.action(var) local operation = var.operation if var.operation and operation ~= "" then local e = executers[operation] if type(e) == "table" then return e elseif type(e) == "function" then return e(var.arguments) end end end --~ entry.A = pdfdictionary { --~ S = pdf_goto, --~ D = .... --~ } local function build(levels,start,parent,method) local startlevel = levels[start][1] local i, n = start, 0 local child, entry, m, prev, first, last, f, l while i and i <= #levels do local li = levels[i] local level, title, reference, open = li[1], li[2], li[3], li[4] if level < startlevel then pdfflushobject(child,entry) return i, n, first, last elseif level == startlevel then if trace_bookmarks then report_bookmark("%3i %w%s %s",reference.realpage,(level-1)*2,(open and "+") or "-",title) end local prev = child child = pdfreserveobject() if entry then entry.Next = child and pdfreference(child) pdfflushobject(prev,entry) end entry = pdfdictionary { Title = pdfunicode(title), Parent = parent, Prev = prev and pdfreference(prev), } if method == "internal" then entry.Dest = "aut:" .. reference.internal else -- if method == "page" then entry.Dest = pagedestination(reference.realpage) end if not first then first, last = child, child end prev = child last = prev n = n + 1 i = i + 1 elseif i < #levels and level > startlevel then i, m, f, l = build(levels,i,pdfreference(child),method) entry.Count = (open and m) or -m if m > 0 then entry.First, entry.Last = pdfreference(f), pdfreference(l) end else -- missing intermediate level but ok i, m, f, l = build(levels,i,pdfreference(child),method) entry.Count = (open and m) or -m if m > 0 then entry.First, entry.Last = pdfreference(f), pdfreference(l) end pdfflushobject(child,entry) return i, n, first, last end end pdfflushobject(child,entry) return nil, n, first, last end function codeinjections.addbookmarks(levels,method) if #levels > 0 then structures.bookmarks.flatten(levels) -- dirty trick for lack of structure local parent = pdfreserveobject() local _, m, first, last = build(levels,1,pdfreference(parent),method or "internal") local dict = pdfdictionary { Type = pdfconstant("Outlines"), First = pdfreference(first), Last = pdfreference(last), Count = m, } pdfflushobject(parent,dict) lpdf.addtocatalog("Outlines",lpdf.reference(parent)) end end -- this could also be hooked into the frontend finalizer lpdf.registerdocumentfinalizer(function() bookmarks.place() end,1,"bookmarks") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-con.mkiv�������������������������������0000644�0001750�0001750�00000011535�12130411274�024340� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=syst-con, %D version=2006.09.16, % real old stuff ... 2000.12.10 %D title=\CONTEXT\ System Macros, %D subtitle=Conversions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{syst-con}{1.001} \unprotect %D When the number of conversions grew, it did no longer make %D sense to spread them over multiple files. So, instead of %D defining these in \type {font-ini}, we now have a dedicated %D module. %D \macros %D {lchexnumber,uchexnumber,lchexnumbers,uchexnumbers} %D %D In addition to the uppercase hex conversion, as needed in %D math families, we occasionally need a lowercase one, for %D instance when we want to compose gbsong fontnames. %D %D The ugly indirectness is needed to get rid of \TEX\ %D induced spaces and \type {\relax}'s. %D %D \starttyping %D [\uchexnumber{0}] %D [\uchexnumber\scratchcounter] %D [\uchexnumber\zerocount] %D [\uchexnumber{\number0}] %D [\uchexnumber{\number\scratchcounter}] %D [\uchexnumber{\number\zerocount}] %D [\uchexnumber{\the\scratchcounter}] %D [\uchexnumber{\the\zerocount}] %D [\expandafter\uchexnumber\expandafter{\number0}] %D [\expandafter\uchexnumber\expandafter{\number\scratchcounter}] %D [\expandafter\uchexnumber\expandafter{\number\zerocount}] %D [\expandafter\uchexnumber\expandafter{\the\scratchcounter}] %D [\expandafter\uchexnumber\expandafter{\the\zerocount}] %D \stoptyping \def\lchexnumber #1{\ctxcommand{lchexnumber(\number#1)}} \def\uchexnumber #1{\ctxcommand{uchexnumber(\number#1)}} \def\lchexnumbers#1{\ctxcommand{lchexnumbers(\number#1)}} \def\uchexnumbers#1{\ctxcommand{uchexnumbers(\number#1)}} \let\hexnumber\uchexnumber %D \macros %D {octnumber} %D %D For unicode remapping purposes, we need octal numbers. \def\octnumber#1{\ctxcommand{octnumber(\number#1)}} %D \macros %D {hexstringtonumber,octstringtonumber} %D %D This macro converts a two character hexadecimal number into %D a decimal number, thereby taking care of lowercase characters %D as well. \def\hexstringtonumber#1{\ctxcommand{hexstringtonumber("#1")}} \def\octstringtonumber#1{\ctxcommand{octstringtonumber("#1")}} %D \macros %D {rawcharacter} %D %D This macro can be used to produce proper 8 bit characters %D that we sometimes need in backends and round||trips. \def\rawcharacter#1{\ctxcommand{rawcharacter(\number#1)}} %D \macros %D {twodigits, threedigits} %D %D These macros provides two or three digits always: \def\twodigits #1{\ifnum #1<10 0\fi\number#1} \def\threedigits#1{\ifnum#1<100 \ifnum#1<10 0\fi0\fi\number#1} %D \macros{modulonumber} %D %D In the conversion macros described in \type {core-con} we %D need a wrap||around method. The following solution is %D provided by Taco. %D %D The \type {modulonumber} macro expands to the mathematical %D modulo of a positive integer. It is crucial for it's %D application that this macro is fully exandable. %D %D The expression inside the \type {\numexpr} itself is %D somewhat bizarre because \ETEX\ uses a rounding %D division instead of truncation. If \ETEX's division %D would have behaved like \TEX's normal\type{\divide}, then %D the expression could have been somewhat simpler, like %D \type {#2-(#2/#1)*#1}. This works just as well, but a bit %D more complex. \def\modulonumber#1#2% {\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} %D \macros{modulatednumber} %D %D Modulo numbers run from zero to one less than the limit, %D but for conversion sets, we need a value between 1 and the %D limit. The \type{\modulatednumber} arranges that. This %D macro also needs to be fully expandable, resulting in %D two \type{\numexpr}s. \def\modulatednumber#1#2% {\ifnum\the\numexpr\modulonumber{#1}{#2}\relax=0 #1% \else \the\numexpr\modulonumber{#1}{#2}\relax \fi} %D \macros %D {realnumber} % used? \def\realnumber#1{\withoutpt\the\dimexpr#1\s!pt\relax} % brrr %D \macros %D {setcalculatedsin,setcalculatedcos,setcalculatedtan} %D %D This saves some 2K in the format. At some point we will redo the %D code that calls this. Beware: in \MKII\ this is a separate module. % \let\calculatesin\gobbleoneargument % \let\calculatecos\gobbleoneargument % \let\calculatetan\gobbleoneargument % \def\setcalculatedsin#1#2{\edef#1{\cldcontext{math.sind(#2)}}} % jit-unsafe % \def\setcalculatedcos#1#2{\edef#1{\cldcontext{math.cosd(#2)}}} % jit-unsafe % \def\setcalculatedtan#1#2{\edef#1{\cldcontext{math.tand(#2)}}} % jit-unsafe \def\setcalculatedsin#1#2{\edef#1{\ctxcommand{sind(#2)}}} \def\setcalculatedcos#1#2{\edef#1{\ctxcommand{cosd(#2)}}} \def\setcalculatedtan#1#2{\edef#1{\ctxcommand{tand(#2)}}} \def\formatted#1{\ctxcommand{format(#1)}} \unexpanded\def\format #1{\ctxcommand{format(#1)}} \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-afk.lua��������������������������������0000644�0001750�0001750�00000015321�12130411274�024076� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['font-afk'] = { version = 1.001, comment = "companion to font-afm.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } --[[ldx-- <p>For ligatures, only characters with a code smaller than 128 make sense, anything larger is encoding dependent. An interesting complication is that a character can be in an encoding twice but is hashed once.</p> --ldx]]-- local allocate = utilities.storage.allocate fonts.handlers.afm.helpdata = { ligatures = allocate { -- okay, nowadays we could parse the name but type 1 fonts ['f'] = { -- don't have that many ligatures anyway { 'f', 'ff' }, { 'i', 'fi' }, { 'l', 'fl' }, }, ['ff'] = { { 'i', 'ffi' } }, ['fi'] = { { 'i', 'fii' } }, ['fl'] = { { 'i', 'fli' } }, ['s'] = { { 't', 'st' } }, ['i'] = { { 'j', 'ij' } }, }, texligatures = allocate { -- ['space'] = { -- { 'L', 'Lslash' }, -- { 'l', 'lslash' } -- }, -- ['question'] = { -- { 'quoteleft', 'questiondown' } -- }, -- ['exclam'] = { -- { 'quoteleft', 'exclamdown' } -- }, ['quoteleft'] = { { 'quoteleft', 'quotedblleft' } }, ['quoteright'] = { { 'quoteright', 'quotedblright' } }, ['hyphen'] = { { 'hyphen', 'endash' } }, ['endash'] = { { 'hyphen', 'emdash' } } }, leftkerned = allocate { AEligature = "A", aeligature = "a", OEligature = "O", oeligature = "o", IJligature = "I", ijligature = "i", AE = "A", ae = "a", OE = "O", oe = "o", IJ = "I", ij = "i", Ssharp = "S", ssharp = "s", }, rightkerned = allocate { AEligature = "E", aeligature = "e", OEligature = "E", oeligature = "e", IJligature = "J", ijligature = "j", AE = "E", ae = "e", OE = "E", oe = "e", IJ = "J", ij = "j", Ssharp = "S", ssharp = "s", }, bothkerned = allocate { Acircumflex = "A", acircumflex = "a", Ccircumflex = "C", ccircumflex = "c", Ecircumflex = "E", ecircumflex = "e", Gcircumflex = "G", gcircumflex = "g", Hcircumflex = "H", hcircumflex = "h", Icircumflex = "I", icircumflex = "i", Jcircumflex = "J", jcircumflex = "j", Ocircumflex = "O", ocircumflex = "o", Scircumflex = "S", scircumflex = "s", Ucircumflex = "U", ucircumflex = "u", Wcircumflex = "W", wcircumflex = "w", Ycircumflex = "Y", ycircumflex = "y", Agrave = "A", agrave = "a", Egrave = "E", egrave = "e", Igrave = "I", igrave = "i", Ograve = "O", ograve = "o", Ugrave = "U", ugrave = "u", Ygrave = "Y", ygrave = "y", Atilde = "A", atilde = "a", Itilde = "I", itilde = "i", Otilde = "O", otilde = "o", Utilde = "U", utilde = "u", Ntilde = "N", ntilde = "n", Adiaeresis = "A", adiaeresis = "a", Adieresis = "A", adieresis = "a", Ediaeresis = "E", ediaeresis = "e", Edieresis = "E", edieresis = "e", Idiaeresis = "I", idiaeresis = "i", Idieresis = "I", idieresis = "i", Odiaeresis = "O", odiaeresis = "o", Odieresis = "O", odieresis = "o", Udiaeresis = "U", udiaeresis = "u", Udieresis = "U", udieresis = "u", Ydiaeresis = "Y", ydiaeresis = "y", Ydieresis = "Y", ydieresis = "y", Aacute = "A", aacute = "a", Cacute = "C", cacute = "c", Eacute = "E", eacute = "e", Iacute = "I", iacute = "i", Lacute = "L", lacute = "l", Nacute = "N", nacute = "n", Oacute = "O", oacute = "o", Racute = "R", racute = "r", Sacute = "S", sacute = "s", Uacute = "U", uacute = "u", Yacute = "Y", yacute = "y", Zacute = "Z", zacute = "z", Dstroke = "D", dstroke = "d", Hstroke = "H", hstroke = "h", Tstroke = "T", tstroke = "t", Cdotaccent = "C", cdotaccent = "c", Edotaccent = "E", edotaccent = "e", Gdotaccent = "G", gdotaccent = "g", Idotaccent = "I", idotaccent = "i", Zdotaccent = "Z", zdotaccent = "z", Amacron = "A", amacron = "a", Emacron = "E", emacron = "e", Imacron = "I", imacron = "i", Omacron = "O", omacron = "o", Umacron = "U", umacron = "u", Ccedilla = "C", ccedilla = "c", Kcedilla = "K", kcedilla = "k", Lcedilla = "L", lcedilla = "l", Ncedilla = "N", ncedilla = "n", Rcedilla = "R", rcedilla = "r", Scedilla = "S", scedilla = "s", Tcedilla = "T", tcedilla = "t", Ohungarumlaut = "O", ohungarumlaut = "o", Uhungarumlaut = "U", uhungarumlaut = "u", Aogonek = "A", aogonek = "a", Eogonek = "E", eogonek = "e", Iogonek = "I", iogonek = "i", Uogonek = "U", uogonek = "u", Aring = "A", aring = "a", Uring = "U", uring = "u", Abreve = "A", abreve = "a", Ebreve = "E", ebreve = "e", Gbreve = "G", gbreve = "g", Ibreve = "I", ibreve = "i", Obreve = "O", obreve = "o", Ubreve = "U", ubreve = "u", Ccaron = "C", ccaron = "c", Dcaron = "D", dcaron = "d", Ecaron = "E", ecaron = "e", Lcaron = "L", lcaron = "l", Ncaron = "N", ncaron = "n", Rcaron = "R", rcaron = "r", Scaron = "S", scaron = "s", Tcaron = "T", tcaron = "t", Zcaron = "Z", zcaron = "z", dotlessI = "I", dotlessi = "i", dotlessJ = "J", dotlessj = "j", AEligature = "AE", aeligature = "ae", AE = "AE", ae = "ae", OEligature = "OE", oeligature = "oe", OE = "OE", oe = "oe", IJligature = "IJ", ijligature = "ij", IJ = "IJ", ij = "ij", Lstroke = "L", lstroke = "l", Lslash = "L", lslash = "l", Ostroke = "O", ostroke = "o", Oslash = "O", oslash = "o", Ssharp = "SS", ssharp = "ss", Aumlaut = "A", aumlaut = "a", Eumlaut = "E", eumlaut = "e", Iumlaut = "I", iumlaut = "i", Oumlaut = "O", oumlaut = "o", Uumlaut = "U", uumlaut = "u", } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/math-pln.mkii�������������������������������0000644�0001750�0001750�00000022702�11754241457�024301� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=math-pln, %D version=2001.11.16, %D title=\CONTEXT\ Math Macros, %D subtitle=Plain Helpers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \points should become \bodyfontsize %D This is a temporary module, some of this code will move to %D the other math modules. \writestatus{loading}{ConTeXt Math Macros / Plain Helpers} \unprotect \ifx\displ@y\undefined \let\displ@y\relax\fi \newbox\rootbox \def\root#1\of {\setbox\rootbox\hbox{$\mathsurround\zeropoint\scriptscriptstyle{#1}$}% \mathpalette\r@@t} \def\r@@t#1#2% will be overloaded {\setbox\zerocount\hbox{$\mathsurround\zeropoint#1\sqrt{#2}$}\dimen@\ht\zerocount \advance\dimen@-\dp\zerocount \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu\box\zerocount} \def\mathhexbox#1#2#3% {\leavevmode \hbox{$\mathsurround\zeropoint\mathchar"#1#2#3$}} \def\oalign#1% {\leavevmode \vtop {\baselineskip\zeroskip \lineskip.25ex% \ialign{##\crcr#1\crcr}}} \def\o@lign {\lineskiplimit\zeropoint \oalign} \def\ooalign % chars over each other {\lineskiplimit-\maxdimen \oalign} \def\sh@ft#1% kern by #1 times the current slant {\dimen@#1% \kern\expandafter\withoutpt\the\slantperpoint \dimen@} \def\dots {\relax\ifmmode\ldots\else$\mathsurround\zeropoint\ldots\,$\fi} \def\hrulefill {\leaders\hrule\hfill} \def\dotfill {\cleaders\hbox{$\mathsurround\zeropoint \mkern1.5mu.\mkern1.5mu$}\hfill} \def\rightarrowfill {$\mathsurround\zeropoint\smash-\mkern-7mu% \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill \mkern-7mu\mathord\rightarrow$} \def\leftarrowfill {$\mathsurround\zeropoint\mathord\leftarrow\mkern-7mu% \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill \mkern-7mu\smash-$} % must go to math-tex \ifx\braceld\undefined % mkii values \mathchardef\braceld="37A \mathchardef\bracerd="37B \mathchardef\bracelu="37C \mathchardef\braceru="37D \fi \def\downbracefill {$\mathsurround\zeropoint\setbox\zerocount\hbox{$\braceld$}% \braceld\leaders\vrule\!!height\ht\zerocount\!!depth\zeropoint\hfill\braceru \bracelu\leaders\vrule\!!height\ht\zerocount\!!depth\zeropoint\hfill\bracerd$} \def\upbracefill {$\mathsurround\zeropoint\setbox\zerocount\hbox{$\braceld$}% \bracelu\leaders\vrule\!!height\ht\zerocount\!!depth\zeropoint\hfill\bracerd \braceld\leaders\vrule\!!height\ht\zerocount\!!depth\zeropoint\hfill\braceru$} % hm, shouldn't that be \kern3\bodyfontsize \def\overbrace#1% {\mathop{\vbox{\mathsurround\zeropoint\ialign{##\crcr\noalign{\kern3\points} \downbracefill\crcr\noalign{\kern3\points\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} \def\underbrace#1% {\mathop{\vtop{\mathsurround\zeropoint\ialign{##\crcr $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\points\nointerlineskip} \upbracefill\crcr\noalign{\kern3\points}}}}\limits} \let\sp=^ % will become obsolete \let\sb=_ % will become obsolete \ifx\,\undefined \def\,{\mskip \thinmuskip } \fi \ifx\>\undefined \def\>{\mskip \medmuskip } \fi \ifx\;\undefined \def\;{\mskip \thickmuskip} \fi \ifx\!\undefined \def\!{\mskip-\thinmuskip } \fi \ifx\*\undefined \def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} \fi % {\catcode`\'=\active \gdef'{^\bgroup\prim@s}} \def\activemathquote{^\bgroup\prim@s} \def\prim@s {\prime\futurelet\next\pr@m@s} \def\pr@m@s {\ifx'\next \@EA\pr@@@s \else\ifx^\next \@EAEAEA\pr@@@t \else \@EAEAEA\egroup \fi\fi} \def\pr@@@s#1% {\prim@s} \def\pr@@@t#1#2% {#2\egroup} % {\catcode`\_=\active \global\let_=\_} % _ in math is either subscript or \_ \let\activemathunderscore\_ \def\relbar {\mathrel{\smash-}} % - has the same height as + \def\Relbar {\mathrel=} \def\Longrightarrow {\Relbar\joinrel\Rightarrow} \def\longrightarrow {\relbar\joinrel\rightarrow} \def\longleftarrow {\leftarrow\joinrel\relbar} \def\Longleftarrow {\Leftarrow\joinrel\Relbar} \def\longmapsto {\mapstochar\longrightarrow} \def\longleftrightarrow{\leftarrow\joinrel\rightarrow} \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} \def\overrightarrow#1% {\vbox{\mathsurround\zeropoint\ialign{##\crcr \rightarrowfill\crcr\noalign{\kern-\onepoint\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} \def\overleftarrow#1% {\vbox{\mathsurround\zeropoint\ialign{##\crcr \leftarrowfill\crcr\noalign{\kern-\onepoint\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} \def\skew#1#2#3% {{\muskip\zerocount#1mu\divide\muskip\zerocount\plustwo \mkern\muskip\zerocount #2{\mkern-\muskip\zerocount{#3}\mkern\muskip\zerocount}\mkern-\muskip\zerocount}{}} \def\choose{\atopwithdelims()} \def\brack {\atopwithdelims[]} \def\brace {\atopwithdelims\{\}} \def\mathpalette#1#2% {\mathchoice {#1\displaystyle {#2}}% {#1\textstyle {#2}}% {#1\scriptstyle {#2}}% {#1\scriptscriptstyle{#2}}} \def\cong {\mathrel{\mathpalette\@vereq\sim}} % congruence sign \def\@vereq#1#2% {\lower.5\points\vbox{\lineskiplimit\maxdimen\lineskip-.5\points \ialign{$\mathsurround\zeropoint#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} \def\notin% can be mkiv'd {\mathrel{\mathpalette\c@ncel\in}} \def\c@ncel#1#2% {\mathsurround\zeropoint\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} \def\rightleftharpoons% {\mathrel{\mathpalette\rlh@{}}} \def\rlh@#1% {\vcenter {\mathsurround\zeropoint \hbox {\ooalign {\raise2pt\hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}} \def\buildrel#1\over#2% {\mathrel{\mathop{\kern\zeropoint#2}\limits^{#1}}} \def\doteq {\buildrel\textstyle.\over=} \ifx\mfunction\undefined \def\mfunction#1{\mathbin{\rm#1}} \fi \def\bmod {\nonscript \mskip-\medmuskip \mkern5mu \mfunction{mod}% \penalty900 \mkern5mu \nonscript \mskip-\medmuskip} \def\pmod#1% {\allowbreak \mkern18mu (\mfunction{mod}\,\,#1)} \def\cases#1% {\left\{% \,% \vcenter {\normalbaselines \mathsurround\zeropoint \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}% \right.} \def\matrix#1% {\null \,% \vcenter {\normalbaselines\mathsurround\zeropoint \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr \mathstrut\crcr\noalign{\kern-\baselineskip} #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}% \,} \def\pmatrix#1% {\left(\matrix{#1}\right)} \newdimen\mathparentwd % \setbox0=\hbox{\tenex B} \mathparentwd=\wd0 % width of the big left ( \def\bordermatrix#1% {\begingroup \mathsurround\zeropoint \setbox\zerocount\vbox {\def\cr{\crcr\noalign{\kern2\points\global\let\cr\endline}}% \ialign{$##$\hfil\kern2\points\kern\mathparentwd&\thinspace\hfil$##$\hfil &&\quad\hfil$##$\hfil\crcr \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}% #1\crcr\omit\strut\cr}}% \setbox\plustwo\vbox {\unvcopy\zerocount\global\setbox\plusone\lastbox}% \setbox\plustwo\hbox {\unhbox\plusone\unskip\global\setbox\plusone\lastbox}% \setbox\plustwo\hbox {$\kern\wd\plusone\kern-\mathparentwd\left(\kern-\wd\plusone \global\setbox\plusone\vbox{\box\plusone\kern2\points}% \vcenter{\kern-\ht\plusone\unvbox\zerocount\kern-\baselineskip}\,\right)$}% \null \;% \vbox{\kern\ht\plusone\box\plustwo}% \endgroup} % \def\openup{\afterassignment\@penup\dimen@=} % % \def\@penup{\advance\lineskip\dimen@ % \advance\baselineskip\dimen@ % \advance\lineskiplimit\dimen@} \def\openup {\afterassignment\doopenup\scratchdimen=} \def\doopenup {\advance\lineskip \scratchdimen \advance\baselineskip \scratchdimen \advance\lineskiplimit\scratchdimen} % \def\jot{.25\bodyfontsize} % plain tex: 3 pt (todo: better name and configurable) \def\displayopenupvalue{.25\bodyfontsize} \def\eqalign#1% {\null \,% \vcenter {\openup\displayopenupvalue % was \openup\jot \mathsurround\zeropoint \ialign {\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil\crcr #1\crcr}}% \,} \def\@lign % restore inside \displ@y {\tabskip\zeroskip \everycr{}} \def\displaylines#1% {\displ@y \tabskip\zeroskip \halign {\hbox to \displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr #1\crcr}} \def\eqalignno#1% {\displ@y \tabskip\centering \halign to \displaywidth {\hfil$\@lign\displaystyle{##}$\tabskip\zeroskip &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering &\llap{$\@lign##$}\tabskip\zeroskip\crcr #1\crcr}} \def\leqalignno#1% {\displ@y \tabskip\centering \halign to \displaywidth {\hfil$\@lign\displaystyle{##}$\tabskip\zeroskip &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr #1\crcr}} % temporary here % \startcatcodetable \mthcatcodes % \setcatcodetable\ctxcatcodes % \catcode`\_ = 13 % \catcode`\' = 13 % \stopcatcodetable % % \letcatcodecommand \mthcatcodes `\_ \activemathunderscore % \letcatcodecommand \mthcatcodes `\' \activemathquote % \appendtoks \setcatcodetable\mthcatcodes \to \everymath : spoils xml % tricky, but some day we will reimplement math \bgroup \catcode`\_ = 13 \catcode`\' = 13 \doglobal\appendtoks \let_\activemathunderscore \let'\activemathquote \to \everymathematics \egroup % so far \protect \endinput ��������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-ntb.mkiv�������������������������������0000644�0001750�0001750�00000216664�12161703335�024304� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=tabl-ntb, %D version=2000.04.18, %D title=\CONTEXT\ Table Macros, %D subtitle=Natural Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 as a more modern variant in xtables but as we follow a bit %D different approach with settings there, this mechanism will stay. In fact %D each of them has its advantages. This module could be sped up a bit and made %D more efficient by delegating some housekeeping to \LUA\ but it's not worth %D the effort. The code could me made more readable but again, there is no %D real purpose in it. If needed I can squeeze out a few more percentages %D runtime. \writestatus{loading}{ConTeXt Table Macros / Natural Tables} % bug: width 3cm is not honored and column becomes too wide % as given width is added to distributed width % % \bTABLE % \bTR % \bTD test \eTD % \bTD \framed[height=3cm]{test} \eTD % \bTD[width=3cm] \dorecurse{30}{a } \eTD % \bTD \input ward \eTD % \eTR % \bTR % \bTD test \eTD % \bTD \framed[height=3cm]{test} \eTD % \bTD \dorecurse{30}{a } \eTD % \bTD \input ward \eTD % \eTR % \eTABLE % \unexpanded\def\startrow {\bTR} % \unexpanded\def\stoprow {\eTR} % \unexpanded\def\startcell#1\stopcell{\bTD#1\eTD} % \let\stopcell \relax % \let\startcelltable \bTABLE % \let\stopcelltable \eTABLE % \starttext % \startcelltable % \startrow \startcell a \stopcell \stoprow % \startrow \startcell a \stopcell \stoprow % \startrow \startcell a \stopcell \stoprow % \startrow \startcell a \stopcell \stoprow % \stopcelltable % \stoptext %D As always, this is the n\high{th} version. Much time went in %D trying to speed up the many cell calculations, some %D optimizations were rejected in order not to complicate this %D module too much (and in order to prevail extensibility). In the %D meantime we've sacrified some speed for readability. \unprotect %D The next alternative also takes care of preceding and following %D white space. %D %D \startbuffer %D \bTABLE[left={(},right={)},top=\startnarrower,bottom=\stopnarrower] %D \bTR \bTD something \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer \ifdefined\dotagTABLEcell \else \let\dotagTABLEcell \relax \fi % todo: namespace \ifdefined\dotagTABLEsignal \else \let\dotagTABLEsignal\relax \fi % todo: namespace \let\tabl_ntb_next_level\relax \newtoks\t_tabl_ntb_cell_start \newtoks\t_tabl_ntb_cell_stop \appendtoks \naturaltablelocalparameter\c!left \delayedbegstrut \to \t_tabl_ntb_cell_start \appendtoks \delayedendstrut \naturaltablelocalparameter\c!right \to \t_tabl_ntb_cell_stop \appendtoks \flushpostponednodedata % maybe: \the\neverypar \to \t_tabl_ntb_cell_start \unexpanded\def\tabl_ntb_cell_start {\inhibitblank \dotagTABLEcell %\tabl_ntb_next_level \usenaturaltablelocalstyleandcolor\c!style\c!color \everypar\t_tabl_ntb_cell_start} \unexpanded\def\tabl_ntb_cell_stop {\ifhmode \the\t_tabl_ntb_cell_stop \par % added 13/4/2006 \else % not sure yet:\naturaltablelocalparameter\c!right \par \ifdim\prevdepth<\zeropoint % =-1000pt ? \vskip-\strutdp \else \removebottomthings \fi \fi} \newcount\c_tabl_ntb_row \newcount\c_tabl_ntb_col \newcount\c_tabl_ntb_spn \newcount\c_tabl_ntb_nx \newcount\c_tabl_ntb_ny \setnewconstant\c_tabl_ntb_cell \plusone \setnewconstant\c_tabl_ntb_none \plustwo \newcount\c_tabl_ntb_current_row \newcount\c_tabl_ntb_current_col \newcount\c_tabl_ntb_current_row_one \newcount\c_tabl_ntb_current_col_one \newcount\c_tabl_ntb_current_row_two \newcount\c_tabl_ntb_current_col_two \newcount\c_tabl_ntb_current_row_three \newcount\c_tabl_ntb_current_col_three \newcount\c_tabl_ntb_current_row_four \newcount\c_tabl_ntb_current_col_four \newcount\c_tabl_ntb_running_col \newcount\c_tabl_ntb_maximum_row \newcount\c_tabl_ntb_maximum_col \newcount\c_tabl_ntb_maximum_row_span \newcount\c_tabl_ntb_maximum_col_span \newtoks\t_tabl_ntb \newtoks\t_tabl_ntb_row \newconstant\c_tabl_tbl_pass \newtoks\t_tabl_ntb_head \newtoks\t_tabl_ntb_next \newtoks\t_tabl_ntb_body \newtoks\t_tabl_ntb_foot \newcount\c_tabl_ntb_n_of_head_lines \newcount\c_tabl_ntb_n_of_next_lines \newcount\c_tabl_ntb_n_of_hdnx_lines \newdimen\d_tabl_ntb_height \newdimen\d_tabl_ntb_width \newtoks\everyTABLEpass % public \newcount\tablecellrows % public (needs checking) \newcount\tablecellcolumns % public (needs checking) \newbox\b_tabl_ntb_final %D We have already prepared the previous macros for nesting, %D so we only have to pop in the right ones: \newcount\c_tabl_level \unexpanded\def\tabl_ntb_table_push {\ifnum\m_tabl_tbl_level>\plusone \tabl_ntb_parameters_reset % we need a proper count push/pop \xdef\m_tabl_ntb_saved_row{\the\c_tabl_ntb_row}\globalpushmacro\m_tabl_ntb_saved_row \xdef\m_tabl_ntb_saved_col{\the\c_tabl_ntb_col}\globalpushmacro\m_tabl_ntb_saved_col \else \global\intabletrue \fi} \unexpanded\def\tabl_ntb_table_pop {\ifnum\m_tabl_tbl_level>\plusone \globalpopmacro\m_tabl_ntb_saved_row\global\c_tabl_ntb_row\m_tabl_ntb_saved_row \globalpopmacro\m_tabl_ntb_saved_col\global\c_tabl_ntb_col\m_tabl_ntb_saved_col \else \global\intablefalse \fi} \unexpanded\def\tabl_ntb_next_level {\advance\c_tabl_level\plusone \edef\m_tabl_tbl_level{\the\c_tabl_level}} \unexpanded\def\tabl_ntb_prev_level {\advance\c_tabl_level\minusone \edef\m_tabl_tbl_level{\the\c_tabl_level}} \tabl_ntb_next_level % go to level 1 \installcorenamespace{naturaltable} % was tbl \installcorenamespace{naturaltablelocal} % was tbltbl \installdirectcommandhandler \??naturaltable {naturaltable} % \??naturaltable \installsimpleframedcommandhandler \??naturaltablelocal {naturaltablelocal} \??naturaltablelocal \installcorenamespace{naturaltablenob} \installcorenamespace{naturaltabletag} \installcorenamespace{naturaltablecol} \installcorenamespace{naturaltablerow} \installcorenamespace{naturaltablewd} \installcorenamespace{naturaltableht} \installcorenamespace{naturaltabledp} \installcorenamespace{naturaltablewid} \installcorenamespace{naturaltablehei} \installcorenamespace{naturaltabledis} \installcorenamespace{naturaltableaut} \installcorenamespace{naturaltabletxt} \installcorenamespace{naturaltablespn} \installcorenamespace{naturaltableref} \installcorenamespace{naturaltableset} \installcorenamespace{naturaltablecell} \def\tabl_ntb_set_nob#1{\expandafter\let\csname\??naturaltablenob\m_tabl_tbl_level:\number#1\endcsname\plusone} \def\tabl_ntb_get_nob#1{\ifcsname\??naturaltablenob\m_tabl_tbl_level:\number#1\endcsname\plusone\else\zerocount\fi} \def\tabl_ntb_set_tag#1#2{\expandafter\edef\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_set_col#1#2{\expandafter\edef\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_set_row#1#2{\expandafter\edef\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_let_tag#1#2{\expandafter\let\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_let_col#1#2{\expandafter\let\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_let_row#1#2{\expandafter\let\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_set_wd#1#2{\expandafter\xdef\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global ! \def\tabl_ntb_set_ht#1#2{\expandafter\xdef\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global ! \def\tabl_ntb_let_wd#1#2{\global\expandafter\let\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global ! \def\tabl_ntb_let_ht#1#2{\global\expandafter\let\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global ! \def\tabl_ntb_get_tag#1#2{\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_get_col#1#2{\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_get_row#1#2{\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_get_wd#1#2{\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_get_ht#1#2{\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_set_wid#1{\expandafter\xdef\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_set_hei#1{\expandafter\xdef\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_set_dis#1{\expandafter\xdef\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_set_aut#1{\expandafter\xdef\csname\??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_let_wid#1{\global\expandafter\let\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_let_hei#1{\global\expandafter\let\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_let_dis#1{\global\expandafter\let\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_let_aut#1{\global\expandafter\let\csname\??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} % {#2} global ! \def\tabl_ntb_get_wid#1{\ifcsname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi} \def\tabl_ntb_get_hei#1{\ifcsname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi} \def\tabl_ntb_get_dis#1{\ifcsname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi} \def\tabl_ntb_get_aut#1{\csname \??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} \def\tabl_ntb_tag_pattern#1#2{\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2} \def\tabl_ntb_row_pattern#1#2{\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2} \def\tabl_ntb_col_pattern#1#2{\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2} \def\tabl_ntb_tag_doif #1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi} \def\tabl_ntb_tag_doifnot #1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi} \def\tabl_ntb_tag_doifelse#1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi} \def\tabl_ntb_row_doif #1#2{\ifcsname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi} \def\tabl_ntb_col_doif #1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi} \def\tabl_ntb_col_doifnot #1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi} % not used % % \def\tabl_ntb_tag_state#1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi} % \def\tabl_ntb_row_state#1#2{\ifcsname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi} % \def\tabl_ntb_col_state#1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi} \def\tabl_ntb_set_spn #1{\expandafter\let\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname \!!plusone} \def\tabl_ntb_spn_doifelse#1{\doifelse {\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname}\!!plusone} \def\tabl_ntb_set_spn #1{\setvalue {\??naturaltablespn\m_tabl_tbl_level:\number#1}{1}} \def\tabl_ntb_spn_doifelse#1{\doifelsevalue{\??naturaltablespn\m_tabl_tbl_level:\number#1}{1}} \def\tabl_ntb_let_ref#1#2{\expandafter\glet\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_set_ref#1#2{\expandafter\xdef\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_get_ref#1#2{\ifcsname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname\fi} % keep for a while: % % \unexpanded\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% nasty: we restore the level % {\expandafter\def\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\expandafter\endcsname\expandafter % {\expandafter\def\expandafter\m_tabl_tbl_level\expandafter{\m_tabl_tbl_level}\tabl_ntb_cell_process{#3}{#4}[#5]{#6}}} \unexpanded\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% {\expandafter\def\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\endcsname {\tabl_ntb_cell_process{#3}{#4}[#5]{\tabl_ntb_next_level#6\tabl_ntb_prev_level}}} \def\tabl_ntb_get_txt#1#2% {\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\endcsname} % to be changed: \newif\ifsqueezeTBLspan \squeezeTBLspantrue % spans one column cell over multi column par cells \newif\ifautosqueezeTBLspan \autosqueezeTBLspantrue % unless explicit widths are given \newif\ifautoTBLspread \autoTBLspreadfalse \newif\ifautoTBLhsize \autoTBLhsizetrue \newif\ifautoTBLrowspan \autoTBLrowspantrue \newif\ifautoTBLemptycell \autoTBLemptycelltrue \newif\ifautoTBLcheckwidth \autoTBLcheckwidthtrue \newif\ifappendTBLsetups \appendTBLsetupstrue \newif\ifenableTBLbreak \enableTBLbreakfalse \newif\ifmultipleTBLheads \multipleTBLheadsfalse \newif\iftightTBLrowspan \tightTBLrowspantrue \newif\iftraceTABLE \traceTABLEfalse % so far \unexpanded\def\tabl_ntb_cell_process#1#2[#3]{} \unexpanded\def\bTC#1\eTC{\bTD#1\eTD} \let\eTC\relax \unexpanded\def\bTX#1\eTX{\bTD#1\eTD} \let\eTX\relax \unexpanded\def\bTY#1\eTY{\bTR#1\eTR} \let\eTY\relax \unexpanded\def\setupTABLE {\dotripleempty\tabl_ntb_setup} \let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal \def\tabl_ntb_setup {\ifthirdargument \expandafter\tabl_ntb_setup_three \else\ifsecondargument \doubleexpandafter\tabl_ntb_setup_two \else \doubleexpandafter\tabl_ntb_setup_one \fi\fi} \def\tabl_ntb_setup_one[#1][#2][#3]% {\setupcurrentnaturaltablelocal[#1]} \def\tabl_ntb_setup_xy[#1][#2][#3]% {\def\tabl_ntb_setup_step##1{\tabl_ntb_parameters_set[#1##1][#3]}% \processcommalist[#2]\tabl_ntb_setup_step} \def\tabl_ntb_setup_un[#1][#2][#3]% {\def\tabl_ntb_setup_step##1% {\def\tabl_ntb_setup_step_step####1{\tabl_ntb_parameters_set[\c!x##1\c!y####1][#3]}% \processcommalist[#2]\tabl_ntb_setup_step_step}% \processcommalist[#1]\tabl_ntb_setup_step} \def\tabl_ntb_setup_each[#1][#2][#3]% ignores #3 {\tabl_ntb_parameters_set[#1\v!each][#2]} \def\tabl_ntb_setup_ux[#1][#2][#3]% ignores #3 {\def\tabl_ntb_setup_step##1{\tabl_ntb_parameters_set[\c!x##1][#2]}% \processcommalist[#1]\tabl_ntb_setup_step} \installcorenamespace{naturaltablesetupthree} \installcorenamespace{naturaltablesetuptwo} \def\tabl_ntb_setup_three[#1]{\csname\??naturaltablesetupthree\ifcsname\??naturaltablesetupthree#1\endcsname#1\else\s!unknown\fi\endcsname[#1]} \def\tabl_ntb_setup_two [#1]{\csname\??naturaltablesetuptwo \ifcsname\??naturaltablesetuptwo #1\endcsname#1\else\s!unknown\fi\endcsname[#1]} \setvalue{\??naturaltablesetupthree \v!row}[#1]{\tabl_ntb_setup_xy [\c!y]} \setvalue{\??naturaltablesetupthree \v!column}[#1]{\tabl_ntb_setup_xy [\c!x]} \setvalue{\??naturaltablesetupthree \v!start}[#1]{\tabl_ntb_setup_xy [\v!start]} \setvalue{\??naturaltablesetupthree \v!header}[#1]{\tabl_ntb_setup_xy [\v!header]} \setvalue{\??naturaltablesetuptwo \v!row}[#1]{\tabl_ntb_setup_each[\c!y]} \setvalue{\??naturaltablesetuptwo \v!column}[#1]{\tabl_ntb_setup_each[\c!x]} \setvalue{\??naturaltablesetuptwo \v!start}[#1]{\tabl_ntb_setup_each[\v!start]} \setvalue{\??naturaltablesetuptwo \v!header}[#1]{\tabl_ntb_setup_each[\v!header]} \letvalue{\??naturaltablesetupthree\s!unknown}\tabl_ntb_setup_un \letvalue{\??naturaltablesetuptwo \s!unknown}\tabl_ntb_setup_ux \letcsnamecsname\csname\??naturaltablesetupthree r\endcsname\csname\??naturaltablesetupthree \v!row\endcsname \letcsnamecsname\csname\??naturaltablesetupthree c\endcsname\csname\??naturaltablesetupthree\v!column\endcsname \letcsnamecsname\csname\??naturaltablesetupthree y\endcsname\csname\??naturaltablesetupthree \v!row\endcsname \letcsnamecsname\csname\??naturaltablesetupthree x\endcsname\csname\??naturaltablesetupthree\v!column\endcsname \letcsnamecsname\csname\??naturaltablesetuptwo r\endcsname\csname\??naturaltablesetuptwo \v!row\endcsname \letcsnamecsname\csname\??naturaltablesetuptwo c\endcsname\csname\??naturaltablesetuptwo \v!column\endcsname \letcsnamecsname\csname\??naturaltablesetuptwo y\endcsname\csname\??naturaltablesetuptwo \v!row\endcsname \letcsnamecsname\csname\??naturaltablesetuptwo x\endcsname\csname\??naturaltablesetuptwo \v!column\endcsname \def\tabl_ntb_parameters_set[#1][#2]% {\ifappendTBLsetups \ifcsname\??naturaltableset\m_tabl_tbl_level:#1\endcsname \def\tabl_ntb_parameters_get[##1]% {\setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[##1,#2]}}% \getvalue{\??naturaltableset\m_tabl_tbl_level:#1}% \let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal \else \setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[#2]}% \fi \else \setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[#2]}% \fi} % % \setupTABLE [y] [first][background=color,backgroundcolor=blue,frame=off,bottomframe=on,topframe=on,framecolor=white] % \setupTABLE [first][first][backgroundcorner=2,corner=10,frame=on] % \setupTABLE [last] [first][backgroundcorner=4,corner=12,frame=on] % % \setupTABLE [row] [each] [background=color,backgroundcolor=blue,frame=on,framecolor=white] % \setupTABLE [first][2] [corner=8] % \setupTABLE [last] [2] [corner=5] % \setupTABLE [first][last] [corner=7] % \setupTABLE [last] [last] [corner=6] % % \startTEXpage % \bTABLE[frame=off,align=middle] % \bTR \bTD one \eTD \bTD two \eTD \bTD three \eTD \eTR % \bTR \bTD first \eTD \bTD second \eTD \bTD third \eTD \eTR % \bTR \bTD alpha \eTD \bTD beta \eTD \bTD gamma \eTD \eTR % \eTABLE % \stopTEXpage % % \setupTABLE [first] [two][corner=2] % special case % \setupTABLE [last] [two][corner=4] % special case % % % % \setupTABLE [one] [first] ... special case of span % % \startTEXpage % \bTABLE[frame=off,align=middle] % \bTR \bTD one \eTD \bTD two \eTD \bTD three \eTD \eTR % \bTR \bTD first \eTD \bTD second \eTD \bTD third \eTD \eTR % \eTABLE % \stopTEXpage %D By default rowspans are tight but you can change that: %D %D \startbuffer %D \bTABLE %D \bTR[height=20pt] \bTH 1. col \eTH \bTH 2. col \eTH \eTR %D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \bTD[nr=2] 2 rows in 2. col \eTD \eTR %D \bTR[height=20pt] \bTD[nr=2] 2 rows in 1. col\eTD \eTR %D \bTR[height=20pt] \bTD[nr=3] 3 rows in 2. col \eTD \eTR %D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR %D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR %D \eTABLE %D %D \bTABLE %D \bTR[height=20pt] \bTH 2. col \eTH \bTH 1. col \eTH \eTR %D \bTR[height=20pt] \bTD[nr=2] 2 rows in 2. col \eTD \bTD 1 row in 1. col \eTD \eTR %D \bTR[height=20pt] \bTD[nr=2] 2 rows in 1. col\eTD \eTR %D \bTR[height=20pt] \bTD[nr=3] 3 rows in 2. col \eTD \eTR %D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR %D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D With \type {\tightTBLrowspanfalse} we get: %D %D \start \tightTBLrowspanfalse \getbuffer \stop \let\tabl_ntb_setup_section\relax \unexpanded\def\tabl_ntb_setup_cell#1#2% cell over col over row {\tabl_ntb_setup_section % already forgotten \edef\m_tabl_ntb_positive_row{\number#1}% \edef\m_tabl_ntb_positive_col{\number#2}% \edef\m_tabl_ntb_negative_row{\the\numexpr-\c_tabl_ntb_maximum_row+#1+\minusone\relax}% \edef\m_tabl_ntb_negative_col{\the\numexpr-\c_tabl_ntb_maximum_col+#2+\minusone\relax}% % saves tokens (no speed gain) \edef\m_tabl_ntb_prefix{\??naturaltableset\m_tabl_tbl_level:}% % each each \csname\m_tabl_ntb_prefix\c!x\v!each\c!y\v!each\endcsname \csname\m_tabl_ntb_prefix\c!y\v!each\endcsname \csname\m_tabl_ntb_prefix\c!x\v!each\endcsname % odd even \csname\m_tabl_ntb_prefix\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname \csname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\endcsname \csname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname % row/col number combinations \ifcsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname\fi \ifcsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname\csname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname\fi \naturaltablelocalparameter\c!extras \letnaturaltablelocalparameter\c!extras\relax % new, see x-fo \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname\fi \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname\fi \naturaltablelocalparameter\c!extras \letnaturaltablelocalparameter\c!extras\relax % new, see x-fo % first/last combinations \ifnum\m_tabl_ntb_positive_row=\plusone \csname\m_tabl_ntb_prefix\c!y\v!first\endcsname \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname\fi \fi \ifnum\m_tabl_ntb_positive_col=\plusone \csname\m_tabl_ntb_prefix\c!x\v!first\endcsname \ifcsname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname\fi \fi \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \csname\m_tabl_ntb_prefix\c!y\v!last\endcsname \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname\fi \fi \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax \csname\m_tabl_ntb_prefix\c!x\v!last\endcsname \ifcsname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname\fi \fi \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!last\endcsname \fi\fi \ifnum\m_tabl_ntb_positive_row=\plusone \ifnum\m_tabl_ntb_positive_col=\plusone \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!first\endcsname \fi\fi \ifnum\m_tabl_ntb_positive_row=\plusone \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!first\endcsname \fi\fi \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\plusone \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!last\endcsname \fi\fi % special case: two rows and last row : two&first and two&last (round corners) \ifnum\c_tabl_ntb_maximum_row=\plustwo\relax \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\plusone \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!two\endcsname \fi\fi \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!two\endcsname \fi\fi \fi \ifnum\tabl_ntb_get_col\m_tabl_ntb_positive_row\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax % top span over whole width \ifnum\m_tabl_ntb_positive_row=\plusone \csname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!first\endcsname \fi \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \csname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!last\endcsname \fi \fi % header things \ifnum#1>\c_tabl_ntb_n_of_hdnx_lines\else \ifcsname\m_tabl_ntb_prefix\v!header\v!each \endcsname\csname\m_tabl_ntb_prefix\v!header\v!each \endcsname\fi \ifcsname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname\csname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname\fi \fi % explicit cells \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname\fi \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname\fi % local \ifcsname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname\fi % done \xdef\m_tabl_ntb_after_split{\naturaltablelocalparameter\c!after}% to be checked \relax} % we cannot use +n (checking on number/last/first would slow down too much) % % \setupTABLE[r] [2][color=red] % \setupTABLE[r] [-2][color=red] % \setupTABLE[c] [2][color=green] % \setupTABLE[c] [-2][color=green] % \setupTABLE[4] [4][color=blue] % \setupTABLE[-4][-4][color=blue] % % \bTABLE % \dorecurse{10}{\bTR \dorecurse{6}{\bTD xxx \eTD} \eTR} % \eTABLE \let\m_tabl_ntb_after_split\relax % split + page: % % \bTABLE[split=yes] % \bTR \bTD left \eTD\bTD right \eTD\eTR % \bTR[after=\page] \bTD left \eTD\bTD right \eTD\eTR % \bTR \bTD left \eTD\bTD right \eTD\eTR % \eTABLE \unexpanded\def\tabl_ntb_tr {\c_tabl_ntb_running_col\zerocount \advance\c_tabl_ntb_maximum_row\plusone \iffirstargument \expandafter\tabl_ntb_tr_yes \else \expandafter\gobbleoneoptional \fi} \def\tabl_ntb_tr_yes[#1]% {\setvalue{\??naturaltableset\m_tabl_tbl_level:\c!y++\the\c_tabl_ntb_maximum_row}{\setupcurrentnaturaltablelocal[#1]}} \def\m_tabl_ntb_default_nr{\naturaltableparameter\c!nr} \def\m_tabl_ntb_default_nc{\naturaltableparameter\c!nc} \unexpanded\def\tabl_ntb_td {\iffirstargument \expandafter\tabl_ntb_td_yes \else \expandafter\tabl_ntb_td_nop \fi} \def\tabl_ntb_td_yes[#1]#2\eTD {\letnaturaltableparameter\c!ny \m_tabl_ntb_default_nr \letnaturaltableparameter\c!nx \m_tabl_ntb_default_nc \letnaturaltableparameter\c!nc \plusone \letnaturaltableparameter\c!nr \plusone \letnaturaltableparameter\c!n \c_tabl_ntb_running_col \letnaturaltableparameter\c!m \empty \letnaturaltableparameter\c!action\empty % not that important \setupcurrentnaturaltable[#1]% % \c_tabl_ntb_nx\naturaltableparameter\c!nx\relax \c_tabl_ntb_ny\naturaltableparameter\c!ny\relax % goto first cell n/m=cellnumber \edef\m_tabl_ntb_n{\naturaltableparameter\c!n}% \edef\m_tabl_ntb_m{\naturaltableparameter\c!m}% % \ifx\m_tabl_ntb_n\empty \global\advance\c_tabl_ntb_spn\c_tabl_ntb_nx\relax \else\ifnum\m_tabl_ntb_n=\c_tabl_ntb_running_col\else \tabl_ntb_td_pass_n{#1}% \fi\fi \ifx\m_tabl_ntb_m\empty \else \ifnum\m_tabl_ntb_m=\c_tabl_ntb_running_col\else \tabl_ntb_td_pass_m{#1}% \fi \fi \doloop % skip over columns that result from earlier span {\advance\c_tabl_ntb_running_col\plusone \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\endcsname \else \exitloop \fi}% % fill r*c cells and set span \c_tabl_ntb_nx\naturaltableparameter\c!nx\relax \c_tabl_ntb_ny\naturaltableparameter\c!ny\relax \ifnum\c_tabl_ntb_nx=\plusone \ifnum\c_tabl_ntb_ny=\plusone \ifnum\c_tabl_ntb_running_col>\c_tabl_ntb_maximum_col\relax \c_tabl_ntb_maximum_col\c_tabl_ntb_running_col \fi \else \tabl_ntb_cell_preset \fi \else \tabl_ntb_cell_preset \fi % set values \tabl_ntb_let_tag\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\c_tabl_ntb_cell \tabl_ntb_set_col\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_nx}% \tabl_ntb_set_row\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_ny}% % the action key will change! \tabl_ntb_set_ref\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\naturaltableparameter\c!action}% % save text \normalexpanded {\tabl_ntb_set_txt_process\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_maximum_row}{\the\c_tabl_ntb_running_col}}% {#1}{#2}} \def\tabl_ntb_td_nop[#1]#2\eTD {\global\advance\c_tabl_ntb_spn\plusone\relax \doloop {\advance\c_tabl_ntb_running_col\plusone \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\endcsname \else \exitloop \fi}% \c_tabl_ntb_nx\plusone \c_tabl_ntb_ny\plusone \ifnum\c_tabl_ntb_running_col>\c_tabl_ntb_maximum_col\relax \c_tabl_ntb_maximum_col\c_tabl_ntb_running_col \fi \tabl_ntb_let_tag\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\c_tabl_ntb_cell \tabl_ntb_set_col\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_nx}% \tabl_ntb_set_row\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_ny}% \tabl_ntb_let_ref\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\empty \normalexpanded {\tabl_ntb_set_txt_process\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_maximum_row}{\the\c_tabl_ntb_running_col}}% {#1}{#2}} \def\tabl_ntb_td_pass_n#1% {\scratchcounter\numexpr\m_tabl_ntb_n-\c_tabl_ntb_running_col+\minusone-\c_tabl_ntb_spn\relax \ifnum\scratchcounter>\zerocount \normalexpanded{\tabl_ntb_td[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no]}\eTD \fi \letnaturaltableparameter\c!ny\m_tabl_ntb_default_nr \letnaturaltableparameter\c!nx\m_tabl_ntb_default_nc \letnaturaltableparameter\c!nc\plusone \letnaturaltableparameter\c!nr\plusone \setupcurrentnaturaltable[#1]% \letnaturaltableparameter\c!n \empty \letnaturaltableparameter\c!m \empty} \def\tabl_ntb_td_pass_m#1% {\scratchcounter\numexpr\m_tabl_ntb_m-\c_tabl_ntb_running_col+\minusone-\c_tabl_ntb_spn\relax \dorecurse\scratchcounter{\normalexpanded{\tabl_ntb_td[\c!n=,\c!m=]}\eTD}% % can be sped up \letnaturaltableparameter\c!ny\m_tabl_ntb_default_nr \letnaturaltableparameter\c!nx\m_tabl_ntb_default_nc \letnaturaltableparameter\c!nc\plusone \letnaturaltableparameter\c!nr\plusone \setupcurrentnaturaltable[#1]% \letnaturaltableparameter\c!n \empty \letnaturaltableparameter\c!m \empty} \def\tabl_ntb_cell_preset {\c_tabl_ntb_current_row\c_tabl_ntb_maximum_row \c_tabl_ntb_current_col\c_tabl_ntb_running_col \dorecurse\c_tabl_ntb_ny\tabl_ntb_cell_preset_rows % check max column \advance\c_tabl_ntb_current_col\minusone \ifnum\c_tabl_ntb_current_col>\c_tabl_ntb_maximum_col\relax \c_tabl_ntb_maximum_col\c_tabl_ntb_current_col \fi} \def\tabl_ntb_cell_preset_rows {\c_tabl_ntb_current_col\c_tabl_ntb_running_col \tabl_ntb_set_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_nx}% \ifnum\c_tabl_ntb_nx>\c_tabl_ntb_maximum_row_span\relax \c_tabl_ntb_maximum_row_span\c_tabl_ntb_nx \fi \dorecurse\c_tabl_ntb_nx\tabl_ntb_cell_preset_cells \advance\c_tabl_ntb_current_row\plusone} \def\tabl_ntb_cell_preset_cells {\tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_none \advance\c_tabl_ntb_current_col\plusone} %D The usage of n and m: %D %D \startbuffer %D \bTABLE[width=3em] %D \bTR\bTD d1 \eTD\bTD[n=2] d2 \eTD\bTD[n=5] d5 \eTD\bTD[n=7] d7 \eTD\eTR %D \bTR\bTD f1 \eTD\bTD[n=4] f4 \eTD\bTD[n=5] f5 \eTD\bTD[n=7] f7 \eTD\eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \bTABLE[width=3em] %D \bTR\bTD d1 \eTD\bTD[m=2] d2 \eTD\bTD[m=5] d5 \eTD\bTD[m=7] d7 \eTD\eTR %D \bTR\bTD f1 \eTD\bTD[m=4] f4 \eTD\bTD[m=5] f5 \eTD\bTD[m=7] f7 \eTD\eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \bTABLE[frame=on] %D \bTR \bTH[nc=3] One \eTH \bTH[m=4] Four \eTH\eTR %D \bTR \bTD a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR %D \eTABLE %D %D \bTABLE[frame=on] %D \bTR \bTH[nr=2] One \eTH \bTH[m=3] Three \eTH\eTR %D \bTR \bTD[m=3] a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR %D \bTR \bTD[m=3] a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer \def\tabl_ntb_th[#1]#2\eTH {\tabl_ntb_td[#1,\c!color=\naturaltablelocalparameter\c!headcolor,\c!style=\naturaltablelocalparameter\c!headstyle,\c!aligncharacter=\v!no]#2\eTD} \def\tabl_ntb_tn[#1]#2\eTN {\tabl_ntb_td[#1]\digits#2\relax\eTD} %D Vit Zyka needed the option to create a distance between columns, so I %D added support for individual column distances. %D %D \startbuffer %D % \setupTABLE[c][each][distance=2em] %D \setupTABLE[c][1][distance=2em] %D \setupTABLE[c][2][distance=3em] %D %D \bTABLE %D \bTR \bTD test \eTD \bTD test \eTD \bTD test \eTD \eTR %D \bTR \bTD[nx=2] test \eTD \bTD test \eTD \eTR %D \bTR \bTD test \eTD \bTD[nx=2] test \eTD \eTR %D \eTABLE %D %D \bTABLE[option=stretch] %D \bTR \bTD test \eTD \bTD test \eTD \bTD test \eTD \eTR %D \bTR \bTD[nx=2] test \eTD \bTD test \eTD \eTR %D \bTR \bTD test \eTD \bTD[nx=2] test \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection %D %D and he provided patches for the global left and right margin distances %D as well as the columndistance (although i changed the names -). Here %D is his testcase: %D %D \startbuffer %D \framed[offset=overlay]\bgroup %D \setupTABLE[column][2][align=left]% %D \setupTABLE[column][3][align=right]% %D \bTABLE[columndistance=2cm,leftmargindistance=.3cm,rightmargindistance=.5cm] %D \bTR \bTH[nc=3] Table head\eTH \eTR %D \bTR \bTD[nc=2] AB\eTD \bTD C\eTD \eTR %D \bTR \bTD[nc=2,align=left] AB\eTD \bTD C\eTD \eTR %D \bTR \bTD[nc=2,align=middle] AB\eTD \bTD C\eTD \eTR %D \bTR \bTD A\eTD \bTD B\eTD \bTD C\eTD \eTR %D \bTR \bTD Aa\eTD \bTD Bb\eTD \bTD Cccc\eTD \eTR %D \bTR \bTD[nc=3,align=middle] ABC\eTD \eTR %D \eTABLE %D \egroup %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection % to be done: head <raw> foot, dus state var \unexpanded\def\bTABLEhead{\dosingleempty\tabl_ntb_head} \let\eTABLEhead\relax \unexpanded\def\bTABLEnext{\dosingleempty\tabl_ntb_next} \let\eTABLEnext\relax \unexpanded\def\bTABLEbody{\dosingleempty\tabl_ntb_body} \let\eTABLEbody\relax \unexpanded\def\bTABLEfoot{\dosingleempty\tabl_ntb_foot} \let\eTABLEfoot\relax \def\tabl_ntb_head[#1]#2\eTABLEhead{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_head} \def\tabl_ntb_next[#1]#2\eTABLEnext{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_next} \def\tabl_ntb_body[#1]#2\eTABLEbody{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_body} \def\tabl_ntb_foot[#1]#2\eTABLEfoot{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_foot} \def\tabl_ntb_section[#1]#2% also used in tabl-nte {\unexpanded\def\tabl_ntb_setup_section{\setupcurrentnaturaltablelocal[#1]}% #2% \let\tabl_ntb_setup_section\relax} \def\tabl_ntb_preset_parameters% each odd|even level / can be sped up but only once per table {\ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname \csname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname \fi \ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname % hm \csname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname \fi \ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname % hm \csname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname \fi} \unexpanded\def\bTABLE {\dosingleempty\tabl_ntb_table} \def\tabl_ntb_table[#1]% {\tabl_ntb_table_push % box not here \bgroup \t_tabl_ntb_head\emptytoks \t_tabl_ntb_next\emptytoks \t_tabl_ntb_body\emptytoks \t_tabl_ntb_foot\emptytoks \ifhmode\kern\zeropoint\fi % blocks \removeunwantedspaces: check this on icare handelingsschema \resetcharacteralign % new \setupcurrentnaturaltablelocal[\c!align={\v!right,\v!broad,\v!high},#1]% \usesetupsparameter\naturaltablelocalparameter \doifelse{\naturaltablelocalparameter\c!textwidth}\v!local {\hsize\availablehsize} {\hsize\naturaltablelocalparameter\c!textwidth}% \processaction [\naturaltablelocalparameter\c!split] [ \v!yes=>\enableTBLbreaktrue, \v!repeat=>\enableTBLbreaktrue\multipleTBLheadstrue, \v!auto=>\ifinsidesplitfloat\enableTBLbreaktrue\fi] \processaction [\naturaltablelocalparameter\c!header] [\v!repeat=>\multipleTBLheadstrue]% \tabl_ntb_preset_parameters \processallactionsinset [\naturaltablelocalparameter\c!option] [\v!stretch=>\autoTBLspreadtrue]% \linewidth\naturaltablelocalparameter\c!rulethickness % needs to be frozen \dontcomplain \c_tabl_ntb_running_col \zerocount \c_tabl_ntb_maximum_col \zerocount \c_tabl_ntb_maximum_row \zerocount \c_tabl_ntb_maximum_row_span\plusone \let\currentTABLErow \tabl_ntb_current_row \let\currentTABLEcolumn\tabl_ntb_current_column \let\nofTABLErows \tabl_ntb_n_of_rows \let\nofTABLEcolumns \tabl_ntb_n_of_columns \let\bTR\dobTR \let\bTD\dobTD \let\bTH\dobTH \let\bTN\dobTN} \def\tabl_ntb_current_row {\m_tabl_ntb_positive_row} \def\tabl_ntb_current_column{\m_tabl_ntb_positive_col} \def\tabl_ntb_n_of_rows {\number\c_tabl_ntb_maximum_row} \def\tabl_ntb_n_of_columns {\number\c_tabl_ntb_maximum_col} \let\currentTABLErow \!!zerocount \let\currentTABLEcolumn\!!zerocount \let\nofTABLErows \!!zerocount \let\nofTABLEcolumns \!!zerocount \unexpanded\def\dobTR{\dosingleempty\tabl_ntb_tr} % also used in tabl-nte \unexpanded\def\dobTD{\dosingleempty\tabl_ntb_td} % also used in tabl-nte \unexpanded\def\dobTH{\dosingleempty\tabl_ntb_th} % also used in tabl-nte \unexpanded\def\dobTN{\dosingleempty\tabl_ntb_tn} % also used in tabl-nte % permits \expanded{\bTD ... \eTD} \let\bTR\relax \unexpanded\def\eTR{\ignorespaces} % handy in case we use a macro to generate rows \let\bTD\relax \unexpanded\def\eTD{\ignorespaces} \let\bTH\relax \unexpanded\def\eTH{\ignorespaces} \let\bTN\relax \unexpanded\def\eTN{\ignorespaces} \unexpanded\def\eTABLE % beware, we need to get rid of spurious spaces when in hmode {% tricky and dirty order -) \doifsometokselse\t_tabl_ntb_head % slow, better a flag {\the\t_tabl_ntb_head \c_tabl_ntb_n_of_head_lines\c_tabl_ntb_maximum_row\relax \doifsometokselse\t_tabl_ntb_next {\the\t_tabl_ntb_next \c_tabl_ntb_n_of_next_lines\numexpr\c_tabl_ntb_maximum_row-\c_tabl_ntb_n_of_head_lines\relax}% {\c_tabl_ntb_n_of_next_lines\zerocount}% was 1 \c_tabl_ntb_n_of_hdnx_lines\c_tabl_ntb_maximum_row} {\c_tabl_ntb_n_of_head_lines\zerocount % was 1 \c_tabl_ntb_n_of_next_lines\zerocount \c_tabl_ntb_n_of_hdnx_lines\zerocount}% \the\t_tabl_ntb_body \the\t_tabl_ntb_foot \removeunwantedspaces % only if hmode % finish cells \tabl_ntb_loop_one % to be sure \tabl_ntb_loop_two % check and do \ifcase\c_tabl_ntb_maximum_col\else \startTBLprocessing \tabl_ntb_table_start \dorecurse\c_tabl_ntb_maximum_row {\tabl_ntb_row_start \c_tabl_ntb_current_row\recurselevel\relax \dorecurse\c_tabl_ntb_maximum_col {\c_tabl_ntb_current_col\recurselevel\relax \normalexpanded{\tabl_ntb_cell{\the\c_tabl_ntb_current_row}{\the\c_tabl_ntb_current_col}}}% \tabl_ntb_row_stop}% \removeunwantedspaces % only if hmode \tabl_ntb_table_stop \stopTBLprocessing % wrong ! ! ! better to have an auto-offset-overlay % \ifnum\m_tabl_tbl_level>1 % \vskip-\strutdp % \fi \fi % tracing % \iftrue % \blank \tttf % \dorecurse\c_tabl_ntb_maximum_row % {\c_tabl_ntb_current_row\recurselevel\relax % \dorecurse\c_tabl_ntb_maximum_col % {\c_tabl_ntb_current_col\recurselevel\relax % [r=\the\c_tabl_ntb_current_row,c=\the\c_tabl_ntb_current_col,h=\the\dimexpr\tabl_ntb_get_ht\c_tabl_ntb_current_row\c_tabl_ntb_current_col,w=\the\dimexpr\tabl_ntb_get_wd\c_tabl_ntb_current_row\c_tabl_ntb_current_col]}% % \par}% % \blank % \fi \egroup \tabl_ntb_table_pop} \def\tabl_ntb_loop_one {\dorecurse\c_tabl_ntb_maximum_row{\tabl_ntb_loop_one_rows}} \def\tabl_ntb_loop_one_rows {\c_tabl_ntb_current_row\recurselevel\relax \dorecurse\c_tabl_ntb_maximum_col\tabl_ntb_loop_one_cells} \def\tabl_ntb_loop_one_cells {\c_tabl_ntb_current_col\recurselevel\relax \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else \tabl_ntb_loop_one_cells_indeed \fi} \def\tabl_ntb_loop_one_cells_indeed {\c_tabl_ntb_current_col_two\c_tabl_ntb_current_col \c_tabl_ntb_current_row_two\c_tabl_ntb_current_row \c_tabl_ntb_current_row_one\c_tabl_ntb_current_row \doloop {\c_tabl_ntb_current_col_one\c_tabl_ntb_current_col \doloop {\ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one\endcsname \exitloop \else \advance\c_tabl_ntb_current_col_one\plusone \ifnum\c_tabl_ntb_current_col_one>\c_tabl_ntb_maximum_col\relax \exitloop \fi \fi}% \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one\endcsname \exitloop \else \c_tabl_ntb_current_row_two\c_tabl_ntb_current_row_one \c_tabl_ntb_current_col_two\c_tabl_ntb_current_col_one \advance\c_tabl_ntb_current_row_one\plusone \ifnum\c_tabl_ntb_current_row_one>\c_tabl_ntb_maximum_row \exitloop \fi \fi}% \ifnum\c_tabl_ntb_current_row_two>\c_tabl_ntb_maximum_row\c_tabl_ntb_current_row_two\c_tabl_ntb_maximum_row\fi \ifnum\c_tabl_ntb_current_col_two>\c_tabl_ntb_maximum_col\c_tabl_ntb_current_col_two\c_tabl_ntb_maximum_col\fi \c_tabl_ntb_current_row_two\numexpr\c_tabl_ntb_current_row_two-\c_tabl_ntb_current_row+\plusone\relax \c_tabl_ntb_current_col_two\numexpr\c_tabl_ntb_current_col_two-\c_tabl_ntb_current_col+\plusone\relax \c_tabl_ntb_current_row_one\c_tabl_ntb_current_row \dorecurse\c_tabl_ntb_current_row_two {\c_tabl_ntb_current_col_one\c_tabl_ntb_current_col \tabl_ntb_set_col\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one{\the\c_tabl_ntb_current_col_two}% \dorecurse\c_tabl_ntb_current_col_two {\tabl_ntb_let_tag\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one\c_tabl_ntb_none \advance\c_tabl_ntb_current_col_one\plusone}% \advance\c_tabl_ntb_current_row_one\plusone}% \tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_cell \tabl_ntb_set_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_current_col_two}% \tabl_ntb_set_row\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_current_row_two}% \ifautoTBLemptycell \normalexpanded {\tabl_ntb_set_txt_process\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_current_row}{\the\c_tabl_ntb_current_col}}% {}{\strut}% \fi} \def\tabl_ntb_loop_two {\dorecurse\c_tabl_ntb_maximum_row\tabl_ntb_loop_two_rows} \def\tabl_ntb_loop_two_rows {\c_tabl_ntb_current_row\recurselevel\relax \dorecurse\c_tabl_ntb_maximum_col\tabl_ntb_loop_two_cells} \def\tabl_ntb_loop_two_cells {\c_tabl_ntb_current_col\recurselevel\relax \ifcsname\tabl_ntb_row_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \scratchcounter\numexpr\c_tabl_ntb_maximum_row-\c_tabl_ntb_current_row+\plusone\relax \ifnum\tabl_ntb_get_row\c_tabl_ntb_current_row\c_tabl_ntb_current_col>\scratchcounter \tabl_ntb_set_row\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\scratchcounter}% \fi \fi \tabl_ntb_let_ht\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint \tabl_ntb_let_wd\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint \ifcsname\tabl_ntb_col_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else \tabl_ntb_let_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zerocount \fi \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else \tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_none \fi} \let\startTBLprocessing\relax % public \let\stopTBLprocessing \relax % public \newcount\c_tabl_prelocated_rows % \prelocateTBLrows{1000} may speed up large tables \def\tabl_ntb_row_start{\t_tabl_ntb_row\emptytoks} \def\tabl_ntb_row_stop {\normalexpanded{\t_tabl_ntb{\the\t_tabl_ntb\noexpand\tabl_ntb_row_align_start\the\t_tabl_ntb_row\tabl_ntb_row_align_stop}}} \def\tabl_ntb_prelocate_error {\writestatus\m!system{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \the\c_tabl_prelocated_rows)}} % \prelocateTBLrows{1000} % may speed up large tables \installcorenamespace{naturaltabletok} \def\prelocateTBLrows#1% we start at zero so we have one to much, better play safe anyway {\dostepwiserecurse\c_tabl_prelocated_rows{#1}\plusone{\expandafter\newtoks\csname\??naturaltabletok\recurselevel\endcsname}% \def\tabl_ntb_row_start {\ifnum\c_tabl_ntb_row<\c_tabl_prelocated_rows\relax \expandafter\let\expandafter\t_tabl_ntb_row\csname\??naturaltabletok\the\c_tabl_ntb_row\endcsname\t_tabl_ntb_row\emptytoks \else \tabl_ntb_prelocate_error \fi}% \def\tabl_ntb_row_stop {\normalexpanded{\t_tabl_ntb{\the\t_tabl_ntb\noexpand\tabl_ntb_row_align_start\the\csname\??naturaltabletok\the\c_tabl_ntb_row\endcsname\tabl_ntb_row_align_stop}}}% \global\c_tabl_prelocated_rows#1\relax} % We use aligments to handle the empty (skipped) columns, so % that we don't have to (re|)|calculate these. \def\tabl_ntb_column_skip {\global\advance\c_tabl_ntb_col\plusone} \def\tabl_ntb_column_next {\global\advance\c_tabl_ntb_col\plusone \kern\naturaltablelocalparameter\c!columndistance \aligntab} \def\tabl_ntb_column_span {\span} \let\m_tabl_ntb_saved_row\!!zerocount \let\m_tabl_ntb_saved_col\!!zerocount \def\tabl_ntb_row_align_start {\noalign{\tabl_ntb_row_align_reset}% \tabl_ntb_column_next \kern\dimexpr\naturaltablelocalparameter\c!leftmargindistance-\naturaltablelocalparameter\c!columndistance\relax} \unexpanded\def\tabl_ntb_row_align_reset {\global\advance\c_tabl_ntb_row\plusone \global\c_tabl_ntb_col\zerocount \global\c_tabl_ntb_spn\zerocount} \unexpanded\def\tabl_ntb_row_align_stop {\kern\dimexpr\naturaltablelocalparameter\c!rightmargindistance-\naturaltablelocalparameter\c!columndistance\relax \crcr \noalign {\nointerlineskip \ifnum\c_tabl_ntb_row>\c_tabl_ntb_n_of_head_lines \ifnum\tabl_ntb_get_nob\c_tabl_ntb_row=\zerocount \allowbreak \fi \else \allowbreak % else no proper head split off \fi \bgroup % protect local vars \m_tabl_ntb_after_split \egroup \bgroup % protect local vars \scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax \ifnum\scratchcounter>\c_tabl_ntb_n_of_hdnx_lines\relax \ifnum\scratchcounter<\c_tabl_ntb_maximum_row\relax \doifsomething{\naturaltablelocalparameter\c!spaceinbetween} {\blank[\naturaltablelocalparameter\c!spaceinbetween]}% \fi \fi \egroup}} \def\tabl_ntb_flush_content {\the\everyTABLEpass \global\c_tabl_ntb_spn\zerocount \global\c_tabl_ntb_col\zerocount \global\c_tabl_ntb_row\zerocount \global\advance\c_tabl_ntb_row\minusone \tabskip\zeropoint \dostarttagged\t!table\empty \dostarttagged\t!tablerow\empty \appendtoks\dostoptagged\dostarttagged\t!tablerow\empty\to\everycr \halign\bgroup \registerparoptions % watch out: tagging the cell happens at the outer level (faster) \ignorespaces\alignmark\alignmark\unskip \aligntab\aligntab \ignorespaces\alignmark\alignmark\unskip \cr % one too many \the\t_tabl_ntb \dostoptagged \egroup \dostoptagged} \setvalue{\??naturaltablecell\the\c_tabl_ntb_none}#1#2% {\scratchcounter\tabl_ntb_get_col{#1}{#2}\relax \ifnum\scratchcounter>\zerocount \advance\scratchcounter\minusone \ifnum\scratchcounter>\zerocount \tabl_ntb_span \fi \t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_next} \fi} \setvalue{\??naturaltablecell\the\c_tabl_ntb_cell}#1#2% {\t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_pass #1 #2 }% space delimited -> less tokens \scratchcounter\tabl_ntb_get_col{#1}{#2}\relax \ifnum\scratchcounter>\zerocount \advance\scratchcounter\minusone \ifnum\scratchcounter>\zerocount \tabl_ntb_span \fi \t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_next} \fi} \def\tabl_ntb_span {\dorecurse\scratchcounter{\t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_span}}% \dorecurse\scratchcounter{\t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_skip}}} \unexpanded\def\tabl_ntb_cell#1#2% {\csname\??naturaltablecell\the\tabl_ntb_get_tag{#1}{#2}\endcsname{#1}{#2}} \unexpanded\def\tabl_ntb_table_start {\global\c_tabl_ntb_spn\zerocount \global\c_tabl_ntb_row\zerocount \global\c_tabl_ntb_col\zerocount \c_tabl_tbl_pass\zerocount \t_tabl_ntb\emptytoks} \def\tabl_ntb_pass_one#1 #2 % {\tabl_ntb_get_txt{#1}{#2}}% \def\tabl_ntb_pass_two#1 #2 % meer in cellD {\d_tabl_ntb_width\zeropoint \scratchcounter\c_tabl_ntb_col \!!counta\tabl_ntb_get_col{#1}{#2}\relax \dorecurse\!!counta {\advance\d_tabl_ntb_width\dimexpr \tabl_ntb_get_wid\scratchcounter +\naturaltablelocalparameter\c!columndistance \ifnum\recurselevel<\!!counta +\tabl_ntb_get_dis\scratchcounter \fi \relax \advance\scratchcounter\plusone}% \advance\d_tabl_ntb_width-\naturaltablelocalparameter\c!columndistance\relax \setbox\scratchbox\hbox{\tabl_ntb_get_txt{#1}{#2}}% \tabl_ntb_set_ht{#1}{#2}{\the\ht\scratchbox}% \tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}% \ifdim\ht\scratchbox>\tabl_ntb_get_hei{#1}\relax \tabl_ntb_set_hei{#1}{\the\ht\scratchbox}% \fi}% \def\tabl_ntb_pass_three#1 #2 % {% height \dostarttagged\t!tablecell\empty \!!counta \tabl_ntb_get_col{#1}{#2}\relax \!!countb \tabl_ntb_get_row{#1}{#2}\relax \!!heighta\tabl_ntb_get_ht {#1}{#2}\relax \tablecellcolumns\!!counta % used later so don't adapt these \tablecellrows \!!countb % used later so don't adapt these \d_tabl_ntb_height\zeropoint \ifnum\!!counta=\c_tabl_ntb_maximum_col\relax % case: nc=maxcolumns \else \scratchcounter#1\relax \dorecurse\!!countb {\advance\d_tabl_ntb_height\tabl_ntb_get_hei\scratchcounter \advance\scratchcounter\plusone}% \ifdim\d_tabl_ntb_height<\!!heighta\relax \d_tabl_ntb_height\!!heighta \fi \fi % width \d_tabl_ntb_width\zeropoint \scratchcounter\c_tabl_ntb_col \dorecurse\!!counta {\advance\d_tabl_ntb_width\dimexpr \tabl_ntb_get_wid\scratchcounter +\naturaltablelocalparameter\c!columndistance \ifnum\recurselevel<\!!counta +\tabl_ntb_get_dis\scratchcounter \fi \relax \advance\scratchcounter\plusone}% \advance\d_tabl_ntb_width-\naturaltablelocalparameter\c!columndistance\relax % cell \setbox\scratchbox\hbox attr \taggedattribute \attribute\taggedattribute \bgroup \dotagTABLEsignal % maybe we need to add some packaging in this case \tabl_ntb_get_txt{#1}{#2}% \egroup \ifnum\!!counta=\c_tabl_ntb_maximum_col\relax % case: nc=maxcolumns \else \scratchdimen\tabl_ntb_get_hei{#1}% \setbox\scratchbox\hbox {\lower\ht\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}}% \ht\scratchbox\scratchdimen \fi \dp\scratchbox\zeropoint \edef\!!stringa{\tabl_ntb_get_ref{#1}{#2}}% \ifx\!!stringa\empty \box\scratchbox \else \normalexpanded{\noexpand\directgotobox{\box\scratchbox}[\!!stringa]}% to be checked \fi \dostoptagged} % right spot \def\tabl_ntb_cell_finalize {\doifnotinset\localwidth{\v!fit,\v!broad}% user set {\scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax \ifdim\localwidth>\scratchdimen \tabl_ntb_set_aut\c_tabl_ntb_col{\the\dimexpr\localwidth}% \fi}} \def\tabl_ntb_table_stop {\setbox\scratchbox\hbox {\setupcurrentnaturaltablelocal[\c!frame=\v!off,\c!background=,\c!align=\v!no]% \inheritednaturaltablelocalframed{\strut}}% \edef\minimalcellheight{\the\ht\scratchbox}% not used \dorecurse\c_tabl_ntb_maximum_col {\tabl_ntb_let_aut\recurselevel\zeropoint % new \c_tabl_ntb_current_col_one\recurselevel\relax \dorecurse\c_tabl_ntb_maximum_row {\tabl_ntb_let_wd\recurselevel\c_tabl_ntb_current_col_one\zeropoint \tabl_ntb_let_ht\recurselevel\c_tabl_ntb_current_col_one\zeropoint}% % till here \tabl_ntb_let_wid\recurselevel\zeropoint \tabl_ntb_let_dis\recurselevel\zeropoint}% \dorecurse\c_tabl_ntb_maximum_row {\tabl_ntb_let_hei\recurselevel\maxdimen}% \c_tabl_tbl_pass\plusone \let\tabl_ntb_pass\tabl_ntb_pass_one \let\tabl_ntb_cell_process\tabl_ntb_cell_process_a \setbox0\vbox{\settrialtypesetting \tabl_ntb_flush_content}% \tabl_ntb_let_dis\c_tabl_ntb_maximum_col\zeropoint \ifautoTBLspread % experimental, stretch non fixed cells to \hsize \tabl_ntb_check_widths_one % trial run \tabl_ntb_check_widths_two % real run \tabl_ntb_stretch_widths \let\tabl_ntb_cell_process\tabl_ntb_cell_process_b \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}% \else\ifdim\wd0>\hsize \ifautoTBLhsize \tabl_ntb_check_widths_one % trial run \tabl_ntb_check_widths_two % real run \let\tabl_ntb_cell_process\tabl_ntb_cell_process_b \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}% \fi \else\ifautoTBLrowspan\ifnum\c_tabl_ntb_maximum_row_span>1 % max ? % added jan 2002 because nx=* did no longer work \edef\savedhsize{\the\hsize}% \hsize\wd0\relax % new per 17/04/2006 \tabl_ntb_check_widths_one % trial run \tabl_ntb_check_widths_two % real run \hsize\savedhsize % \let\tabl_ntb_cell_process\tabl_ntb_cell_process_c \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}% \fi\fi\fi\fi \let\tabl_ntb_cell_process\tabl_ntb_cell_process_d \c_tabl_tbl_pass\plustwo \let\tabl_ntb_pass\tabl_ntb_pass_two \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}% \tabl_ntb_check_heights_one \tabl_ntb_check_heights_two \let\tabl_ntb_cell_process\tabl_ntb_cell_process_e \c_tabl_tbl_pass\plusthree \let\tabl_ntb_pass\tabl_ntb_pass_three \ifnum\m_tabl_tbl_level>\plusone \expandafter\tabl_tbl_split_nop \else\ifenableTBLbreak \doubleexpandafter\tabl_tbl_split_yes \else \doubleexpandafter\tabl_tbl_split_nop \fi\fi{\tabl_ntb_flush_content}} \def\tabl_ntb_stretch_widths % more variants, e.g. a max to \dimend {\ifcase\c_tabl_ntb_maximum_col\else % else division by zero \!!dimend\zeropoint \!!dimene\hsize \dorecurse\c_tabl_ntb_maximum_col {\advance\!!dimend\dimexpr\tabl_ntb_get_wid\recurselevel+\naturaltablelocalparameter\c!columndistance\relax \advance\!!dimene-\tabl_ntb_get_dis\recurselevel}% \advance\!!dimend\dimexpr-\naturaltablelocalparameter\c!columndistance+\naturaltablelocalparameter\c!leftmargindistance+\naturaltablelocalparameter\c!rightmargindistance\relax % distribute width (stretch) \ifdim\!!dimend<\!!dimene \advance\!!dimend-\!!dimene \!!dimend-\!!dimend \divide\!!dimend\c_tabl_ntb_maximum_col \dorecurse\c_tabl_ntb_maximum_col {\tabl_ntb_set_wid\recurselevel{\the\dimexpr\tabl_ntb_get_wid\recurselevel+\!!dimend\relax}}% \fi \fi} \def\tabl_tbl_split_nop#1% {\setbox\b_tabl_ntb_final\vbox{#1}% \postprocessTABLEbox\b_tabl_ntb_final \beforeTABLEbox \box\b_tabl_ntb_final \afterTABLEbox} \def\tabl_tbl_split_yes % #1 {\ifinsidesplitfloat \donetrue \else\ifinsidefloat \donefalse \else \donetrue \fi\fi \ifdone \expandafter\tabl_ntb_split_box \else \expandafter\tabl_tbl_split_nop \fi} \newbox\TABLEsplitbox % public, don't change \let\extratblsplitheight\zeropoint % additional space taken by before/afterTABLEsplitbox \def\tabl_ntb_split_box#1% {\resettsplit \def\tsplitminimumfreelines{2}% \def\tsplitminimumfreespace{\dimexpr\extratblsplitheight+\naturaltablelocalparameter\c!splitoffset\relax}% \def\tsplitbeforeresult {\beforeTABLEsplitbox}% \def\tsplitafterresult {\afterTABLEsplitbox}% \def\tsplitafter {\m_tabl_ntb_after_split}% \setbox\tsplitcontent\vbox{#1}% \ifmultipleTBLheads \dorecurse\c_tabl_ntb_n_of_head_lines {\setbox\scratchbox\vsplit\tsplitcontent to \lineheight \setbox\tsplithead\vbox{\unvcopy\tsplithead\unvcopy\scratchbox}}% \dorecurse\c_tabl_ntb_n_of_next_lines {\setbox\scratchbox\vsplit\tsplitcontent to \lineheight \setbox\tsplitnext\vbox{\unvcopy\tsplitnext\unvcopy\scratchbox}}% \fi \doifsomething{\naturaltablelocalparameter\c!spaceinbetween} {\def\tsplitinbetween{\blank[\naturaltablelocalparameter\c!spaceinbetween]}}% \def\postprocesstsplit{\postprocessTABLEsplitbox{\box\tsplitresult}}% \handletsplit} % ! ! ! ! TODO: naast \postprocessTABLEsplitbox ook evt \postprocessTABLEbox voor niet split \let\postprocessTABLEsplitbox\gobbleoneargument \let\postprocessTABLEbox \gobbleoneargument \let\beforeTABLEsplitbox\relax \let\afterTABLEsplitbox \relax \let\beforeTABLEbox \relax \let\afterTABLEbox \relax \def\tabl_ntb_check_widths_one{\tabl_ntb_check_widths_indeed0} % 0 = trial run \def\tabl_ntb_check_widths_two{\tabl_ntb_check_widths_indeed1} % 1 = real run \def\tabl_ntb_check_widths_indeed#1% {\iftraceTABLE\tabl_ntb_show_widths{B#1}\fi \!!counta\zerocount \!!dimena\dimexpr\hsize-\naturaltablelocalparameter\c!leftmargindistance-\naturaltablelocalparameter\c!rightmargindistance-\naturaltablelocalparameter\c!columndistance\relax \dorecurse\c_tabl_ntb_maximum_col {\scratchdimen\tabl_ntb_get_aut\recurselevel\relax \advance\!!dimena-\tabl_ntb_get_dis\recurselevel\relax \ifdim\scratchdimen>\zeropoint\relax \advance\!!dimena -\scratchdimen \else \scratchdimen\tabl_ntb_get_wid\recurselevel\relax \ifdim\scratchdimen>\naturaltablelocalparameter\c!maxwidth\relax \ifcase#1\else\tabl_ntb_let_wid\recurselevel\zeropoint\fi \advance\!!counta \plusone \else \ifdim\scratchdimen>\zeropoint\relax \advance\!!dimena -\scratchdimen \else % eigenlijk moet dit alleen als de kolom wordt overspannen door een % vorige, maw extra dubbele loop en status var \advance\!!counta \plusone \fi \fi \fi}% \ifcase\!!counta \else \divide\!!dimena \!!counta \fi \dorecurse\c_tabl_ntb_maximum_col {\scratchdimen\tabl_ntb_get_wid\recurselevel\relax \ifcase#1\relax \ifdim\scratchdimen<\!!dimena % take natural width \tabl_ntb_set_aut\recurselevel{\the\scratchdimen}% \fi \else \ifdim\scratchdimen=\zeropoint % auto set width \tabl_ntb_set_wid\recurselevel{\the\!!dimena}% \fi \fi}% \iftraceTABLE\tabl_ntb_show_widths{E#1}\fi} \def\tabl_ntb_check_heights_one_indeed {\!!countb\tabl_ntb_get_row\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three\relax % check row span \ifnum\!!countb>\plusone % current height in row \dimen0=\tabl_ntb_get_ht\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three % find nearest height in row \dimen2=\zeropoint \dorecurse\c_tabl_ntb_maximum_col {\ifnum\recurselevel=\c_tabl_ntb_current_col_three\else \ifcsname\tabl_ntb_row_pattern\c_tabl_ntb_current_row_three\recurselevel\endcsname \!!countc=\tabl_ntb_get_row\c_tabl_ntb_current_row_three\recurselevel\relax \ifnum\!!countc=\plusone \dimen4=\tabl_ntb_get_ht\c_tabl_ntb_current_row_three\recurselevel\relax \ifdim\dimen2<\dimen4 \dimen2=\dimen4 \fi \fi \fi \fi}% \c_tabl_ntb_current_row_four\c_tabl_ntb_current_row_three % calculate cummulative height \dimen4=\dimen2 \!!countc\c_tabl_ntb_current_row_three \advance\!!countc\minusone \dorecurse\!!countb {\ifnum\c_tabl_ntb_current_row_four=\c_tabl_ntb_current_row_three\else \advance\dimen4 \tabl_ntb_get_hei\c_tabl_ntb_current_row_four \fi \ifnum\recurselevel=\!!countb\else \tabl_ntb_set_nob\!!countc \advance\!!countc\plusone \fi \advance\c_tabl_ntb_current_row_four\plusone}% % distribute overshoot equally \ifdim\dimen2>\zeropoint % new: test on natural-003 \ifdim\dimen4<\dimen0 \advance\dimen0 -\dimen4 \divide\dimen0 \!!countb \c_tabl_ntb_current_row_four\c_tabl_ntb_current_row_three \tabl_ntb_set_hei\c_tabl_ntb_current_row_three{\the\dimen2}% \dorecurse\!!countb {\dorecurse\c_tabl_ntb_maximum_col {\ifnum\recurselevel=\c_tabl_ntb_current_col_three\else \scratchdimen\dimexpr\tabl_ntb_get_ht\c_tabl_ntb_current_row_four\recurselevel+\dimen0\relax \tabl_ntb_set_ht\c_tabl_ntb_current_row_four\recurselevel{\the\scratchdimen}% \ifdim\tabl_ntb_get_hei\c_tabl_ntb_current_row_four<\scratchdimen \tabl_ntb_set_hei\c_tabl_ntb_current_row_four{\the\scratchdimen}% \fi \fi}% \advance\c_tabl_ntb_current_row_four\plusone}% \else\ifdim\dimen4>\dimen0 \iftightTBLrowspan \tabl_ntb_set_hei\c_tabl_ntb_current_row_three{\the\dimen2}% \fi \fi\fi \fi \fi} \def\tabl_ntb_check_heights_one {\dorecurse\c_tabl_ntb_maximum_row {\c_tabl_ntb_current_row_three\recurselevel\relax \dorecurse\c_tabl_ntb_maximum_col {\c_tabl_ntb_current_col_three\recurselevel\relax \ifcsname\tabl_ntb_row_pattern\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three\endcsname \tabl_ntb_check_heights_one_indeed \fi}}} \def\tabl_ntb_check_heights_two {} \def\tabl_ntb_show_widths#1% {\vbox {\forgetall\tttf[#1]\dorecurse\c_tabl_ntb_maximum_col {\scratchdimen\tabl_ntb_get_wid\recurselevel\relax [\recurselevel:\the\scratchdimen]}}} \def\tabl_ntb_char_align {\doifelse{\naturaltablelocalparameter\c!aligncharacter}\v!yes \tabl_ntb_char_align_indeed\gobbleoneargument} \def\tabl_ntb_char_align_indeed#1#2% column data {\edef\alignmentclass{#1}% \edef\alignmentcharacter{\naturaltablelocalparameter\c!alignmentcharacter}% \ifcase\c_tabl_tbl_pass\or \setfirstpasscharacteralign\checkalignment{#2}% {\strut#2\unskip}% \fi % force hsize, so always a second \setsecondpasscharacteralign \checkalignment{#2}% {\strut#2\unskip}% \ignorespaces} \unexpanded\def\tabl_ntb_cell_process_a#1#2[#3]#4% grouping added ! ! ! {\bgroup \tabl_ntb_setup_cell{#1}{#2}% \setbox\scratchbox\hbox {\scratchdimen\naturaltablelocalparameter\c!distance\relax \ifdim\scratchdimen>\tabl_ntb_get_dis{#2}\relax \tabl_ntb_set_dis{#2}{\the\scratchdimen}% \fi \setupcurrentnaturaltablelocal[#3,\c!background=,\c!frame=\v!off]% 25% faster \inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#2}{#4}\tabl_ntb_cell_stop\tabl_ntb_cell_finalize}}% \scratchdimen\tabl_ntb_get_wid\c_tabl_ntb_col\relax \ifdim\wd\scratchbox>\scratchdimen \ifsqueezeTBLspan \ifautosqueezeTBLspan \doifinsetelse{\naturaltablelocalparameter\c!width}{\v!fit,\v!fixed,\v!broad,\v!local} \donetrue \donefalse \else \donetrue \fi \ifdone % brr, 0 \ifnum\tabl_ntb_get_col{#1}{#2}>\plusone \tabl_ntb_set_spn\c_tabl_ntb_col\fi \fi \fi \tabl_ntb_spn_doifelse\c_tabl_ntb_col \donothing {\ifdim\tabl_ntb_get_wid\c_tabl_ntb_col<\wd\scratchbox \tabl_ntb_set_wid\c_tabl_ntb_col{\the\wd\scratchbox}% \fi}% auto set \fi \scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax \scratchdimen\tabl_ntb_get_hei\scratchcounter\relax \ifdim\ht\scratchbox<\scratchdimen \tabl_ntb_set_hei\scratchcounter{\the\ht\scratchbox}% auto set \fi \tabl_ntb_set_ht{#1}{#2}{\the\ht\scratchbox}% \tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}% \ifautoTBLcheckwidth \ifdim\wd\scratchbox<.75\hsize % fuzzy guess \ifdim\ht\scratchbox>2\openlineheight % honor width since this \scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax % can be a figure or so \ifdim\scratchdimen=\zeropoint % side effect: when width is set to 0pt, % we can force a span that fits the sum of spans widths \tabl_ntb_set_aut\c_tabl_ntb_col{\the\scratchdimen}% \else\ifdim\wd\scratchbox>\scratchdimen % unless span \tabl_ntb_set_aut\c_tabl_ntb_col{\the\wd\scratchbox}% % to be translated \writestatus\m!TABLE {no auto width in (\number#1,\number#2)\space\the\wd\scratchbox/\the\hsize}% \fi\fi \fi \fi \fi \setbox2\emptyhbox \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox \box2 \egroup} \unexpanded\def\tabl_ntb_cell_process_b_c#1#2#3[#4]#5% {\setbox\scratchbox\hbox {\tabl_ntb_setup_cell{#2}{#3}% \setupcurrentnaturaltablelocal[#4,#1,\c!frame=\v!off,\c!background=]% \inheritednaturaltablelocalframed{\tabl_ntb_cell_start#5\tabl_ntb_cell_stop}}% \setbox2\emptyhbox \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox \ifautoTBLrowspan \scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax \ifcsname\tabl_ntb_row_pattern\scratchcounter\c_tabl_ntb_col\endcsname \scratchdimen\tabl_ntb_get_hei\scratchcounter\relax \ifnum\tabl_ntb_get_row\scratchcounter\c_tabl_ntb_col>\plusone \ifdim\ht\scratchbox>\scratchdimen \ht2\dimexpr-\scratchdimen-\ht\scratchbox\relax \fi \fi \fi \fi \box2 } \unexpanded\def\tabl_ntb_cell_process_b#1#2[#3]#4% {\scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax \ifdim\scratchdimen>\zeropoint\relax \else \scratchdimen\tabl_ntb_get_wid\c_tabl_ntb_col\relax \ifdim\scratchdimen>\zeropoint\relax \ifnum\tabl_ntb_get_col{#1}{#2}=\c_tabl_ntb_maximum_col\relax \scratchdimen\hsize \fi \fi \fi \normalexpanded{\tabl_ntb_cell_process_b_c{\ifdim\scratchdimen>\zeropoint \c!width=\the\scratchdimen\fi}}% {#1}{#2}[#3]{\tabl_ntb_char_align{#2}{#4}}} \unexpanded\def\tabl_ntb_cell_process_c {\tabl_ntb_cell_process_b_c{}} \unexpanded\def\tabl_ntb_cell_process_d#1#2[#3]#4% {\tabl_ntb_setup_cell{#1}{#2}% \bgroup \setupcurrentnaturaltablelocal[#3,\c!width=\d_tabl_ntb_width,\c!background=,\c!frame=\v!off]% 25% faster \inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#2}{#4}\tabl_ntb_cell_stop}% \egroup} \unexpanded\def\tabl_ntb_cell_process_e#1#2[#3]#4% {\tabl_ntb_setup_cell{#1}{#2}% \setupcurrentnaturaltablelocal[#3]% to get the color right, the way we \color % handle color here prevents interference due to whatsit nodes [\naturaltablelocalparameter\c!color] % as well as permits local colors to take precedence {\ifdim\d_tabl_ntb_height=\zeropoint\relax % case: nc=maxcolumns \setupcurrentnaturaltablelocal[\c!color=,\c!width=\d_tabl_ntb_width]% \else \setupcurrentnaturaltablelocal[\c!color=,\c!width=\d_tabl_ntb_width,\c!height=\d_tabl_ntb_height]% \fi \inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#2}{#4}\tabl_ntb_cell_stop}}% \hskip\tabl_ntb_get_dis{#2}} \setupTABLE [\c!frameoffset=.5\linewidth, \c!backgroundoffset=\v!frame, \c!framecolor=\s!black, \c!width=\v!fit, \c!height=\v!fit, \c!autowidth=\v!yes, \c!rulethickness=\linewidth, \c!strut=\v!yes, \c!autostrut=\v!no, % \c!color=, \c!style=, \c!headstyle=\v!bold, \c!headcolor=, \c!aligncharacter=\v!no, \c!alignmentcharacter={,}, \c!option=, % \v!stretch \c!header=, \c!spaceinbetween=, \c!maxwidth=8\emwidth, \c!textwidth=\v!local, % was \hsize \c!split=\v!auto, \c!splitoffset=\zeropoint, \c!distance=\zeropoint, % individual column \c!columndistance=\zeropoint, % each column (whole table) \c!leftmargindistance=\zeropoint, % whole table \c!rightmargindistance=\zeropoint,% whole table \c!left=, \c!right=, \c!setups=] % \bgroup % \setupTABLE[column][1][aligncharacter=yes, alignmentcharacter={,}] % \bTABLE % \bTR \bTD 1,2 \eTD \bTD 2 \eTD \eTR % \bTR \bTD 11,2 \eTD \bTD % {\setupTABLE[column][1][aligncharacter=yes, alignmentcharacter={,}] % \bTABLE % \bTR \bTD 1,2 \eTD \bTD 2 \eTD \eTR % \bTR \bTD 11,22 \eTD \bTD 2 \eTD \eTR % \bTR \bTD 11,2 \eTD \bTD 2 \eTD \eTR \eTABLE} \eTD \eTR % \bTR \bTD 11,22 \eTD \bTD 2 \eTD \eTR % \eTABLE % \egroup \newconditional\resetTABLEmode \settrue\resetTABLEmode \def\tabl_ntb_parameters_reset {\ifnum\m_tabl_tbl_level>\plusone % in ieder geval \ifconditional\resetTABLEmode % not ok yet \setupTABLE [\c!frameoffset=.5\linewidth, \c!backgroundoffset=\v!frame, \c!framecolor=\s!black, \c!width=\v!fit, \c!height=\v!fit, \c!autowidth=\v!yes, % \c!rulethickness=\linewidth, \c!strut=\v!no, \c!strut=\v!yes, % needed for mathml, but ... maybe we need another resetTABLEmode \c!autostrut=\v!no, \c!color=, \c!style=, \c!headstyle=, \c!headcolor=, \c!aligncharacter=\v!no, \c!alignmentcharacter={,}, \c!maxwidth=8\emwidth]% \else \setupTABLE [\c!width=\v!fit, \c!height=\v!fit]% \fi \fi} % new (for Olivier Turlier) % % \defineTABLEsetup [xx] [foregroundcolor=red] % % \bTABLE % \bTR \bTD oeps \eTD \bTD oeps \eTD \eTR % \bTR \bTDs[xx] oeps \eTDs \bTD oeps \eTD \eTR % \bTRs[xx] \bTD oeps \eTD \bTD oeps \eTD \eTRs % \eTABLE \installcorenamespace{naturaltablesetup} \unexpanded\def\defineTABLEsetup {\dodoubleargument\tabl_ntb_define_setup} \def\tabl_ntb_define_setup[#1][#2]% {\setvalue{\??naturaltablesetup#1}{#2}} \let\eTDs\relax \let\eTRs\relax \unexpanded\def\bTDs[#1]#2\eTDs {\normalexpanded{\bTD[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTD} \unexpanded\def\bTRs[#1]#2\eTRs {\normalexpanded{\bTR[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTR} \protect \endinput % todo: mode: first|next (of niets) ����������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-ini.mkvi�������������������������������0000644�0001750�0001750�00000011656�11754241457�024334� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-flt, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Initialization \& Helpers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Initialization & Helpers} \registerctxluafile{strc-ini}{1.001} \unprotect % segments: 0:100 2:3 chapter:subsection 3 (=self+2) (alternative: sectionset) % section : [sectionnumber(s)] % sectionseparatorset (default) sectionconversionset (default) sectionstopper () sectionset sectionsegments % lists : [sectionnumber(s)] [text] [prefix(es)[separator][pagenumber(s)] % sectionseparatorset (default) sectionconversionset (default) sectionstopper sectionset sectionsegments % prefixseparatorset (default) prefixconversionset (default) prefixstopper (.) prefixset prefixsegments % pageseparatorset (default) pageconversionset (default) pagestopper () pagesegments % prefix (no) % counter : [prefix(es)[separator]][number(s)] % prefixseparatorset (default) prefixconversionset (default) prefixstopper (.) prefixset prefixsegments % numberseparatorset (default) numberconversionset (default) numberstopper () numbersegments % prefix (no) % pagenumber: [prefix(es)[separator]][pagenumber(s)] % prefixseparatorset (default) prefixconversionset (default) prefixstopper (.) prefixset prefixsegments % pageseparatorset (default) pageconversionset (default) pagestopper () % prefix (no) % text mark reference list % section P P P P % float P.N P.N P.N % itemize P.N P.N % enumerate P.N P.N P.N % formula P.N P.N % footnote P.N P.N P.N % number P.N P.N % number prefix section page % [text|marking|reference|list]:[number|prefix|pagenumber|pageprefix]:[separatorset|conversionset|conversion|stopper|set|segments|resetset|order] % figure caption : text:number:* text:prefix:* -> \setupcaption[figure][...]; stores defaults % figure list : list:number:* list:prefix:* list:pagenumber:* list:pageprefix:* -> \setuplist[figure][...]; takes stored defaults for number and pagenumber] % figure reference: reference:number:* reference:prefix:* reference:pagenumber:* reference:pageprefix:* -> \setupreference[figure]]...]; takes stored defaults % This module deals with structure: section headers, list and % numbering and eventually cross referencing. These components are % rather interwoven and therefore an inbetween layer is used. % Eventually this will replace the corresponding code in core-sec, % core-lst, core-num and core-ref. % We collect operations that deal with things like formatting on each % level of a number in sets. This is all handles at the \LUA\ end. % References to such sets travel with the multipass information. \unexpanded\def\defineresetset {\dotripleempty\strc_sets_define_reset_set} \unexpanded\def\defineseparatorset {\dotripleempty\strc_sets_define_separator_set} \unexpanded\def\defineconversionset{\dotripleempty\strc_sets_define_conversion_set} \unexpanded\def\defineprefixset {\dotripleempty\strc_sets_define_prefix_set} % Low level versions (no optional checking). The detokenize and escaping might go away. \unexpanded\def\strc_sets_define_reset_set [#name][#set][#default]{\ctxcommand{definestructureset("structure:resets", "#name","\luaescapestring{\detokenize{#set}}","\luaescapestring{\detokenize{#default}}",true)}} \unexpanded\def\strc_sets_define_separator_set [#name][#set][#default]{\ctxcommand{definestructureset("structure:separators", "#name","\luaescapestring{\detokenize{#set}}","\luaescapestring{\detokenize{#default}}")}} \unexpanded\def\strc_sets_define_conversion_set[#name][#set][#default]{\ctxcommand{definestructureset("structure:conversions","#name","\luaescapestring{\detokenize{#set}}","\luaescapestring{\detokenize{#default}}")}} \unexpanded\def\strc_sets_define_prefix_set [#name][#set][#default]{\ctxcommand{definestructureset("structure:prefixes", "#name","\luaescapestring{\detokenize{#set}}","\luaescapestring{\detokenize{#default}}")}} \let\definestructureresetset \defineresetset \let\definestructureseparatorset \defineseparatorset \let\definestructureconversionset\defineconversionset \let\definestructureprefixset \defineprefixset % \defineseparatorset [weird][!,?,*][:] % tex content % \defineconversionset[weird][numbers,characters,romannumerals][numbers] % symbolic names % \defineresetset [weird][0,0,1][0] % numbers \protect \endinput ����������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-imp-clp.mkiv���������������������������0000644�0001750�0001750�00000012124�11754241457�025060� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=meta-clp, %D version=2000.07.06, %D title=\METAPOST\ Graphics, %D subtitle=Clipping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this library, we define a bunch of clipping paths that %D can be fed to \type {\clip}. \startMPclip{ellipse} clip currentpicture to unitcircle xscaled \width yscaled \height ; \stopMPclip \startMPclip{negellipse} clip currentpicture to (unitcircle peepholed unitsquare) xscaled \width yscaled \height ; \stopMPclip \startMPclip{urellipse} clip currentpicture to urcircle scaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{ulellipse} clip currentpicture to ulcircle scaled 2 shifted (1,0) xscaled \width yscaled \height ; \stopMPclip \startMPclip{llellipse} clip currentpicture to llcircle scaled 2 shifted (1,1) xscaled \width yscaled \height ; \stopMPclip \startMPclip{lrellipse} clip currentpicture to lrcircle scaled 2 shifted (0,1) xscaled \width yscaled \height ; \stopMPclip \startMPclip{tellipse} clip currentpicture to tcircle shifted (.5,0) yscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{bellipse} clip currentpicture to bcircle shifted (.5,.5) yscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{lellipse} clip currentpicture to lcircle shifted (.5,.5) xscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{rellipse} clip currentpicture to rcircle shifted (0,.5) xscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{diamond} clip currentpicture to unitdiamond xscaled \width yscaled \height ; \stopMPclip \startMPclip{negdiamond} clip currentpicture to (unitdiamond peepholed unitsquare) xscaled \width yscaled \height ; \stopMPclip \startMPclip{urtriangle} clip currentpicture to urtriangle scaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{ultriangle} clip currentpicture to ultriangle scaled 2 shifted (1,0) xscaled \width yscaled \height ; \stopMPclip \startMPclip{lltriangle} clip currentpicture to lltriangle scaled 2 shifted (1,1) xscaled \width yscaled \height ; \stopMPclip \startMPclip{lrtriangle} clip currentpicture to lrtriangle scaled 2 shifted (0,1) xscaled \width yscaled \height ; \stopMPclip % More efficient: % % \def\dosimpleMPclip#1 % {clip currentpicture to (#1) xscaled \width yscaled \height ;} % % \def\simpleMPclip#1#2% % {\startMPclip{#1}\dosimpleMPclip{#2}\stopMPclip} % % \simpleMPclip {ellipse} {unitcircle} % \simpleMPclip {diamond} {unitdiamond} % % \simpleMPclip {negellipse} {unitcircle peepholed unitsquare} % \simpleMPclip {negdiamond} {unitdiamond peepholed unitsquare} % % \simpleMPclip {urellipse} {urcircle scaled 2 shifted (0,0)} % \simpleMPclip {ulellipse} {ulcircle scaled 2 shifted (1,0)} % \simpleMPclip {llellipse} {llcircle scaled 2 shifted (1,1)} % \simpleMPclip {lrellipse} {lrcircle scaled 2 shifted (0,1)} % % \simpleMPclip {tellipse} {tcircle shifted (.5,0) yscaled 2} % \simpleMPclip {bellipse} {bcircle shifted (.5,.5) yscaled 2} % \simpleMPclip {lellipse} {lcircle shifted (.5,.5) xscaled 2} % \simpleMPclip {rellipse} {rcircle shifted (0,.5) xscaled 2} % % \simpleMPclip {urtriangle} {urtriangle scaled 2 shifted (0,0)} % \simpleMPclip {ultriangle} {ultriangle scaled 2 shifted (1,0)} % \simpleMPclip {lltriangle} {lltriangle scaled 2 shifted (1,1)} % \simpleMPclip {lrtriangle} {lrtriangle scaled 2 shifted (0,1)} %D \in {Figure} [fig:clipping paths] shows which paths are %D predefined. When applied to a whole picture, their usage %D is: %D %D \starttyping %D \clip[nx=1,ny=1,mp=ellipse]{some clippable content} %D \stoptyping %D %D \startbuffer %D \setupclipping [nx=1,ny=1,x=1,y=1] %D \setupblackrules[width=2cm,height=1cm] %D \startcombination[6*3] % \startcombination[6*3] %D {\clip[mp=urellipse] {\blackrule}} {urellipse} %D {\clip[mp=ulellipse] {\blackrule}} {ulellipse} %D {\clip[mp=llellipse] {\blackrule}} {llellipse} %D {\clip[mp=lrellipse] {\blackrule}} {lrellipse} %D {\clip[mp=ellipse] {\blackrule}} {ellipse} %D {\clip[mp=negellipse]{\blackrule}} {negellipse} %D {\clip[mp=tellipse] {\blackrule}} {tellipse} %D {\clip[mp=bellipse] {\blackrule}} {bellipse} %D {\clip[mp=lellipse] {\blackrule}} {lellipse} %D {\clip[mp=rellipse] {\blackrule}} {rellipse} %D {} {} %D {} {} %D {\clip[mp=urtriangle]{\blackrule}} {urtriangle} %D {\clip[mp=ultriangle]{\blackrule}} {ultriangle} %D {\clip[mp=lltriangle]{\blackrule}} {lltriangle} %D {\clip[mp=lrtriangle]{\blackrule}} {lrtriangle} %D {\clip[mp=diamond] {\blackrule}} {diamond} %D {\clip[mp=negdiamond]{\blackrule}} {negdiamond} %D \stopcombination % \stopcombination %D \stopbuffer %D %D \placefigure % \placefigure %D [here][fig:clipping paths] %D {The predefined clipping paths.} %D {\getbuffer} % {\getbuffer} \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-reg.mkii�������������������������������0000644�0001750�0001750�00000123754�11754241457�024320� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-reg, %D version=1999.12.27, %D title=\CONTEXT\ Structure Macros, %D subtitle=Register Management, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Register Management} \newif \ifautoregisterhack % for the moment a private hack % new: eigennummer=ja => eerste {} ipv pag nummer \unprotect %D Isolated but still indocumented. % Formaat tex-utility-input-file <jobname.tui>: % % i e {tag} {loc} {pure} {entry+..} {p:c:p:sp:ssp=>page} {realpage} % i s {tag} {loc} {pure} {entry+..} {other entry} % % In plaats van + kan een & worden gebruikt. Ook kan als % eerste karakter worden opgegeven wat de scheider is. % % \index {entry} % \index[key] {entry} % \index[pageclass::] {entry} % \index[pageclass::key]{entry} % \index {textclass::entry} % \index[key] {textclass::entry} % \index[pageclass::] {textclass::entry} % \index[pageclass::key]{textclass::entry} % % Deze file wordt met het Perl script TeXUtil omgezet in % een in te lezen file met de commando's: % % \registerentrya {tag} {ingang} % \registerentryb {tag} {subingang} % \registerentryc {tag} {subsubingang} % % \registerpage {tag} {pag,txt} {volgnummer} {paginanummer} {volgnummer} % % \registersee {tag} {pag,txt} {andere ingang} % % \registerentry {tag} {letter} \def\dosetupregister[#1][#2][#3]% {\ifthirdargument \def\dodosetupregister##1% {\getparameters[\??id##1#2][#3]% \preparepageprefix{\??id##1}}% \else \def\dodosetupregister##1% {\getparameters[\??id##1][#2]% \doifvalue{\??id##1\c!coupling}\v!yes {\appendtoks\coupleregister[##1][#2]\to\everystarttext}% \preparepageprefix{\??id##1}}% \fi \processcommalist[#1]\dodosetupregister} \def\setupregister {\dotripleempty\dosetupregister} \def\getlastregisterentry#1% {\def\docommand##1{\def\!!stringa{##1}}% \processseparatedlist[#1][+]\docommand \!!stringa} \def\registerparameter#1{\csname\??id\currentregister#1\endcsname} % \enableregime[windows] \setupregister[index][keyexpansion=strict] % % \index[tsch]{tsch} test \index{Qtsch} test \index[ratsch]{Rtsch} test \newif\ifwritetoregister \writetoregistertrue \chardef\registerpagestatus\zerocount \def\doprocesspageregister[#1]#2#3% key altnum entry {\ifwritetoregister \begingroup \thisisnextinternal\s!ind \ifduplicate\getlastregisterentry{#3}\fi \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#1}% \defconvertexpanded\asciiregisterentryB{\registerparameter\c!expansion }{#3}% \doifsomething{\registerparameter\c!keyexpansion} {\ifx\asciiregisterentryA\empty \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#3}% \fi}% \makesectionformat \doifelse{\registerparameter\c!ownnumber}\v!yes \donetrue\donefalse \expanded{\writeutility{r % spaces are essential \ifcase\registerpagestatus\space\or e\or f\or t\fi\space {\currentregister} % {\nextinternalreference} % {\asciiregisterentryA} % {\asciiregisterentryB} % {\sectionformat\sectionseparator\sectionseparator\ifdone#2\else\noexpand\pagenumber\fi} % {\noexpand\realfolio}}}% \getfirstcharacter\currentregister \registerinfo{> \firstcharacter}{#3}% \endgroup \fi} \def\doregister#1% {\chardef\registerpagestatus\plusone \def\currentregister{#1}% \doifelse{\registerparameter\c!ownnumber}\v!yes {\dosingleempty\dodoregister} {\dosingleempty\donoregister}} \def\donoregister[#1]% {\dodoregister[#1]{}} % \long\def\doflushatpar#1% % %{\dogotopar{#1}} % %{\dogotopar{\dontleavehmode#1}} % this one can introduce empty lines % {\dogotopar{#1\ifvmode\nobreak\fi}} % while this one can mess up vertical space % % fails when [text] \index{test} [empty line] [text] so we now have % Taco's test based solution: \def\doflushatpar {\ifvmode \expandafter\dogotopar \else \expandafter\firstofoneargument \fi} \def\dodoregister[#1]#2#3% {\doflushatpar{\doprocesspageregister[#1]{#2}{#3}}} \def\writetoregister[#1]% to be documented {\doregister{#1}} % \def\startregister % {\dotripleempty\dostartregister} % \def\dostartregister[#1][#2][#3]#4% % {\chardef\registerpagestatus\plustwo % \def\currentregister{#1}% % \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#4}}% % \dodoregister[#3]{}{#4}} \def\startregister {\doquadrupleempty\dostartregister} \def\dostartregister[#1][#2][#3][#4]#5% % 3 args: #3 is sortkey {\chardef\registerpagestatus\plustwo % 4 args: #3 is type, #4 is sortkey \def\currentregister{#1}% \iffourthargument \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#4]{#5}}% \dodoregister[#4]{#3}{#5}% \else \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#5}}% \dodoregister[#3]{}{#5}% \fi} \def\stopregister {\dodoubleargument\dostopregister} \def\dostopregister[#1][#2]% {\getvalue{\??id#1\??id#2}\letgvalue{\??id#1\??id#2}\relax} \def\dodostopregister[#1][#2]#3% {\chardef\registerpagestatus\plusthree \def\currentregister{#1}% \dodoregister[#2]{}{#3}} % key altnum entry \def\doprocessseeregister[#1]#2#3% {\ifwritetoregister \begingroup \thisisnextinternal\s!ind \ifduplicate\getlastregisterentry{#2}\fi \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#1}% \defconvertexpanded\asciiregisterentryB{\registerparameter\c!expansion }{#2}% \defconvertexpanded\asciiregisterentryC{\registerparameter\c!expansion }{#3}% \doifsomething{\registerparameter\c!keyexpansion} {\ifx\asciiregisterentryA\empty \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#2}% \fi}% \makesectionformat \expanded{\writeutility{r s % {\currentregister} % {\nextinternalreference} % {\asciiregisterentryA} % {\asciiregisterentryB} % {\asciiregisterentryC} % {\sectionformat}}}% \endgroup \registerinfo{> see}{#2}% \fi} \def\complexdoseeregister[#1]#2#3% {\doflushatpar{\doprocessseeregister[#1]{#2}{#3}}} \def\doseeregister#1% {\def\currentregister{#1}% \complexorsimpleempty\doseeregister} % = \dosingleempty\doseeregister \def\dowritetoregister[#1]% % de twee-traps-aanroep is nodig {\edef\currentregister{#1}% % om gebruik van \ExpandBothAfter \doprocesspageregister} % mogelijk te maken \def\writetoregister {\dodoubleempty\dowritetoregister} \def\ifregistergeplaatst{\ifutilitydone} \newif\iffirstregisterpage \newif\iffirstregisterentry \let\c!entrya\empty \let\c!entryb\empty \let\c!entryc\empty \let\c!entryd\empty \def\nextregisterpage {\iffirstregisterpage \doglobal\newcounter\registerpagenumber \fi \doglobal\increment\registerpagenumber} \def\doregisterpagelocation#1#2% {\nextregisterpage \hbox to 1em{\hss\doregisterpagehowto{#1}{#2}\hss}} % todo: \installregisterpagehandler \def\setregisterpage#1% todo: currentregister gebruiken {\let\registerpageseparator\empty \processaction [\getvalue{\??id#1\c!symbol}] [ \c!n=>{\def\doregisterpage##1[##2]% {\doregisterpagelocation{#1}{\registerpagenumber}\/}}, \c!a=>{\def\doregisterpage##1[##2]% {\doregisterpagelocation{#1}{\character{\registerpagenumber}\/}}}, 1=>{\def\doregisterpage##1[##2]% {\doregisterpagelocation{#1}{$\bullet$}}}, 2=>{\def\doregisterpage##1[##2]% {\doregisterpagelocation{#1}{\vrule\!!width1em\!!height1ex\!!depth\zeropoint}}}, \v!none=>{\def\doregisterpage##1[##2]{}},% \s!unknown=>{\def\registerpagesymbol{\getvalue{\??id#1\c!symbol}}% \def\doregisterpage##1[##2]% {\doregisterpagelocation{#1}{\registerpagesymbol}}}, \s!default=>{\def\registerpageseparator{,}% \let\doregisterpage\doregisterpagedefault}]} \def\doregisterpagedefault#1[#2]% {\doregisterpagehowto{#1}{\strut\pageprefix{\??id#1}[#2]\translatednumber[#2]}} % test case % % \starttext % \placelist[section][criterium=all] \blank[2*big] % \placeregister[index][compress=no] \blank[2*big] % \placeregister[index][compress=no,sectionnumber=yes] \blank[2*big] % \placeregister[index][compress=yes] \page % test text \index{test index} % \section{heading} % more test text \index{test index} % \section{heading} % more test text \index{test index} % \page % \section{heading text \index{test index}} % more test text \index{test index} % \page % test text \index{test index} % \section{heading text \index{test index}} % more test text \index{test index} % \stoptext \let\registerpagehowto\empty \let\registertexthowto\empty \def\setregisterhowto[#1,#2]% {\def\registerpagehowto{#1}% \def\registertexthowto{#2}}% \def\doregistertexthowto#1#2% {\dostartattributes{\??id#1\registertexthowto}\c!textstyle\c!textcolor\empty \getvalue{\??id#1\c!textcommand}{#2}% \dostopattributes} \def\doregisterpagehowto#1#2% {\dostartattributes{\??id#1\registerpagehowto}\c!pagestyle\c!pagecolor\empty \getvalue{\??id#1\c!pagecommand}{#2}% \dostopattributes} \def\registerentry #1{\executeifdefined{#1\s!entry }\gobbleoneargument } \def\registerentrya#1{\executeifdefined{#1\s!entrya}\gobbleoneargument } \def\registerentryb#1{\executeifdefined{#1\s!entryb}\gobbleoneargument } \def\registerentryc#1{\executeifdefined{#1\s!entryc}\gobbleoneargument } \def\registerentryd#1{\executeifdefined{#1\s!entryd}\gobbleoneargument } \def\registersee #1{\executeifdefined{#1\s!see }\gobblethreearguments} \def\registerpage #1{\executeifdefined{#1\s!page }\gobblefourarguments } \def\registerfrom #1{\executeifdefined{#1\s!from }\gobblefourarguments } \def\registerto #1{\executeifdefined{#1\s!to }\gobblefourarguments } \def\doresetregister#1% {\letvalue{#1\s!entrya}\gobbleoneargument \letvalue{#1\s!entryb}\gobbleoneargument \letvalue{#1\s!entryc}\gobbleoneargument \letvalue{#1\s!entryd}\gobbleoneargument \letvalue{#1\s!see }\gobblethreearguments \letvalue{#1\s!page }\gobblefourarguments \letvalue{#1\s!from }\gobblefourarguments \letvalue{#1\s!to }\gobblefourarguments \letvalue{#1\s!entry }\gobbleoneargument} \newif\iffirstsubentry \newif\iffirstsubsubentry \newcounter\currententrylevel \let\c!entryletter =\empty \let\c!entryreference=\empty \let\c!entrya =\relax \let\c!entryb =\relax \let\c!entryc =\relax \let\c!entryd =\relax \def\limitedregisterentry#1#2% {\getvalue{\??id#1\c!textcommand}% {\doifelsenothing{\??id#1\c!maxwidth} {#2} {\limitatetext{#2}{\getvalue{\??id#1\c!maxwidth}}{\unknown}}}} \def\dosetpageregisterpage#1#2#3#4#5#6% {\doifreglevelelse[#5]{\dodosetpageregisterpage{#1}{#2}{#3}{#4}{#5}{#6}}{}} \def\dodosetpageregisterpageA#1#2#3#4#5#6% {\global\utilitydonetrue \c!entryletter \setregisterhowto[#3]% \def\dohandleregisterentry##1% {\bgroup \if!!donea % \strut nieuw \hhboxindent\hangindent % maybe also left and right skip \setbox0\hbox{\doregistertexthowto{#2}{\strut\limitedregisterentry{#2}{##1}}}% \unhhbox0\with{\gotonextinternal\s!ind{#4}{#6}{\box\hhbox}}% \else \doregistertexthowto{#2}{##1}% \fi \egroup \!!doneafalse}% \!!doneafalse \doifelsevalue{\??id#2\c!interaction}\v!text {\ifcase\currententrylevel \or \!!doneatrue\c!entrya\c!entryb\c!entryc\c!entryd \or \c!entrya\!!doneatrue\c!entryb\c!entryc\c!entryd \or \c!entrya\c!entryb\!!doneatrue\c!entryc\c!entryd \or \c!entrya\c!entryb\c!entryc\!!doneatrue\c!entryd \fi} {\c!entrya\c!entryb\c!entryc\c!entryd}% \global\let\c!entrya\relax \global\let\c!entryb\relax \global\let\c!entryc\relax \global\let\c!entryd\relax \global\let\c!entryletter\relax \global\let\c!entryreference\relax} % \def\dodosetpageregisterpageB#1#2#3#4#5#6% % {\iffirstregisterpage % \expandafter\hskip\getvalue{\??id#2\c!distance}\relax % \else\ifnum#1=3 % \strut|--|\relax % -- ! % \else % % \relax after space needed because | looks ahead % \strut\registerpageseparator|\space|\relax % \fi\fi % \iftrue % \iftrue ...\fi to preserve indentation, can be folded out % \begingroup % % % \doifelsevalue{\??id#2\c!prefix}\v!none % default v!both % {\chardef\pageprefixmode\zerocount}% % {\doifvalue{\??id#2\c!prefix}\v!first % only first in range (1.2-4) % {\ifnum#1=3 \chardef\pageprefixmode\zerocount \fi}}% % % % \doifelsevalue{\??id#2\c!interaction}\v!pagenumber % {\bgroup % \setbox0\hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% % \gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}% % \egroup} % {\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% % \endgroup % \ignorespaces % \relax % \fi % \global\firstregisterpagefalse} \def\dodosetpageregisterpageB#1#2#3#4#5#6% {\iffirstregisterpage \expandafter\hskip\getvalue{\??id#2\c!distance}\relax \else\ifnum#1=3 \strut|--|\relax % -- ! \else % \relax after space needed because | looks ahead % TH: next line replaced % \strut\registerpageseparator|\space|\relax \strut \registerpageseparator{ }% % /TH \fi\fi \iftrue % \iftrue ...\fi to preserve indentation, can be folded out \begingroup % \doifelsevalue{\??id#2\c!prefix}\v!none % default v!both {\chardef\pageprefixmode\zerocount}% {\doifvalue{\??id#2\c!prefix}\v!first % {\ifnum#1=3 \chardef\pageprefixmode\zerocount \fi}}% % \doifelsevalue{\??id#2\c!interaction}\v!pagenumber {\bgroup \setbox0 \hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% \gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}% \egroup} {\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% \endgroup \ignorespaces \relax \fi \global\firstregisterpagefalse} \def\resetseenregisterpage {\global\let\firstseenregisterreal \relax \global\let\currentseenregisterreal\relax \global\let\lastseenregisterreal \relax \global\let\firstseenregisterpage \relax \global\let\currentseenregisterpage\relax \global\let\lastseenregisterpage \relax} \resetseenregisterpage \def\dodosetpageregisterpageC#1#2#3#4#5#6% {\xdef\currentseenregisterpage{#5}% \xdef\currentseenregisterreal{#6}% \ifx\firstseenregisterreal\relax % no range yet \global\let\firstseenregisterreal\currentseenregisterreal \global\let\firstseenregisterpage\currentseenregisterpage \global\let\lastseenregisterreal \currentseenregisterreal \global\let\lastseenregisterpage \currentseenregisterpage \else\ifnum\lastseenregisterreal=\currentseenregisterreal\relax % same page (catch error) \else\ifnum\numexpr\lastseenregisterreal+\plusone\relax=\currentseenregisterreal\relax \global\let\lastseenregisterreal \currentseenregisterreal \global\let\lastseenregisterpage \currentseenregisterpage \else \global\let\savedcurrentseenregisterreal\currentseenregisterreal \global\let\savedcurrentseenregisterpage\currentseenregisterpage \flushseenregisterpage \global\let\firstseenregisterreal\savedcurrentseenregisterreal \global\let\firstseenregisterpage\savedcurrentseenregisterpage \global\let\lastseenregisterreal \savedcurrentseenregisterreal \global\let\lastseenregisterpage \savedcurrentseenregisterpage \fi\fi\fi \gdef\flushseenregisterpage{\doflushseenregisterpage{#1}{#2}{#3}{#4}}} % \def\dodosetpageregisterpageC#1#2#3#4#5#6% % {\xdef\currentseenregisterpage{#5}% % \xdef\currentseenregisterreal{#6}% % \firstregisterpagefalse % \gdef\flushseenregisterpage{\doflushseenregisterpage{#1}{#2}{#3}{#4}}% % \ifx\firstseenregisterreal\relax % % no range yet % \global\let\firstseenregisterreal\currentseenregisterreal % \global\let\firstseenregisterpage\currentseenregisterpage % \global\let\lastseenregisterreal \currentseenregisterreal % \global\let\lastseenregisterpage \currentseenregisterpage % \else\ifnum\firstseenregisterreal=\currentseenregisterreal\relax % \global\let\firstseenregisterreal\currentseenregisterreal % \global\let\firstseenregisterpage\currentseenregisterpage % \global\let\lastseenregisterreal \currentseenregisterreal % \global\let\lastseenregisterpage \currentseenregisterpage % \else\ifnum\lastseenregisterreal=\currentseenregisterreal\relax % \global\let\lastseenregisterpage \currentseenregisterpage % \else\ifnum\numexpr\lastseenregisterreal+\plusone\relax=\currentseenregisterreal\relax % \global\let\lastseenregisterreal \currentseenregisterreal % \global\let\lastseenregisterpage \currentseenregisterpage % \else % % back up, flush, go on % \global\let\savedcurrentseenregisterreal\currentseenregisterreal % \global\let\savedcurrentseenregisterpage\currentseenregisterpage % \let\currentseenregisterpage\lastseenregisterpage % \let\currentseenregisterreal\lastseenregisterreal % \flushseenregisterpage % \global\let\firstseenregisterreal\savedcurrentseenregisterreal % \global\let\firstseenregisterpage\savedcurrentseenregisterpage % \global\let\lastseenregisterreal \savedcurrentseenregisterreal % \global\let\lastseenregisterpage \savedcurrentseenregisterpage % \fi\fi\fi\fi} \def\doflushseenregisterpage#1#2#3#4% {\global\let\flushseenregisterpage\relax \ifx\firstseenregisterreal\relax % nothing in the hold \else\ifx\firstseenregisterreal\lastseenregisterreal \expanded{\dodosetpageregisterpageB{1}{#2}{#3}{#4}{\lastseenregisterpage}{\lastseenregisterreal}}% \else \expanded{\dodosetpageregisterpageB{2}{#2}{#3}{#4}{\firstseenregisterpage}{\firstseenregisterreal}}% \expanded{\dodosetpageregisterpageB{3}{#2}{#3}{#4}{\lastseenregisterpage }{\lastseenregisterreal }}% \fi\fi \resetseenregisterpage} \let\flushseenregisterpage\relax \chardef\collapseregisterpages\zerocount \def\dodosetpageregisterpage {\ifcase\collapseregisterpages \expandafter\dodosetpageregisterpagenormal \else \expandafter\dodosetpageregisterpagecollapsed \fi} \def\dodosetpageregisterpagenormal#1#2#3#4#5#6% {\dodosetpageregisterpageA{#1}{#2}{#3}{#4}{#5}{#6}% \dodosetpageregisterpageB{#1}{#2}{#3}{#4}{#5}{#6}} % \def\dodosetpageregisterpagecollapsed#1#2#3#4#5#6% % {\dodosetpageregisterpageA{#1}{#2}{#3}{#4}{#5}{#6}% % \dodosetpageregisterpageC{#1}{#2}{#3}{#4}{#5}{#6}} \def\dodosetpageregisterpagecollapsed#1#2#3#4#5#6% {\ifx\firstseenregisterreal\relax\flushseenregisterpage\fi \dodosetpageregisterpageA{#1}{#2}{#3}{#4}{#5}{#6}% \dodosetpageregisterpageC{#1}{#2}{#3}{#4}{#5}{#6}} % test case for collapsing (experimental, for Steffen Wolfrum) % % \starttext % \chardef\collapseregisterpages\zerocount \placeregister[index] \blank[2*big] % \chardef\collapseregisterpages\plusone \placeregister[index] \page % \dorecurse{10}{test 1:!\index{test} test \page} % \dorecurse{5} {test 2:\recurselevel \page} % \dorecurse{10}{test 3:!\index{test} test \page} % \dorecurse{5} {test 4:\recurselevel \page} % \dorecurse{1} {test 5:!\index{test} test \page} % \dorecurse{5} {test 6:\recurselevel \page} % \dorecurse{10}{test 7:!\index{test} test \page} % \dorecurse{5} {test 8:\recurselevel \page} % oeps \index{oeps} % xxxx \index{xxxx} % todo \index{todo} % \stoptext \def\dosetpageregistersee#1#2#3#4% ugly separator hack {\flushseenregisterpage \expanded{\doifreglevelelse[#4\sectionseparator\sectionseparator0]}% {{\global\utilitydonetrue \setregisterhowto[#2]% \def\dohandleregisterentry##1% dubbelop | \strut nieuw {\doregistertexthowto{#1}{\strut\limitedregisterentry{#1}{##1}}}% \getvalue {#1\ifcase\currententrylevel\s!entrya\or\s!entryb\or\s!entryc\else\s!entryd\fi}% {\doregisterpagehowto{#1}{\labeltexts\v!see{#3}}}% \c!entryletter\c!entrya\c!entryb\c!entryc\c!entryd \global\let\c!entrya\relax \global\let\c!entryb\relax \global\let\c!entryc\relax \global\let\c!entryd\relax \global\let\c!entryletter\relax \global\let\c!entryreference\relax % \global\firstregisterentrytrue \global\firstregisterpagetrue}} {}} %D Extended with variant: \def\doregistercharacter[#1]#2% {\global\firstregisterentrytrue \doifsomething{#2} {\doifelsevalue{\??id#1\c!indicator}\v!yes {\executeifdefined {\strippedcsname\doregistercharacter\getvalue{\??id#1\c!alternative}}% \doregistercharactera [#1]{#2}} {\noregistercharacter[#1]{#2}}}} \def\noregistercharacter[#1]#2% {\getvalue{\??id#1\c!before}% \goodbreak} % a = <before> <goodbreak> <character> <par> <after> <nobreak> \def\doregistercharactera[#1]#2% {\getvalue{\??id#1\c!before}% \vskip\lineheight\goodbreak\vskip-\lineheight \ifhmode\unskip\else\noindent\fi % brrr \getvalue{\??id#1\c!command}{\doattributes{\??id#1}\c!style\c!color{\strut\ignorespaces#2}}% \getvalue{\??id#1\c!after}% \par\nobreak} % b = <goodbreak> <before> <character> <after> <nobreak> \def\doregistercharacterb[#1]#2% here no lineheight hackery ! ! ! {\getvalue{\??id#1\c!before}% \ifhmode\unskip\else\noindent\fi % brrr \getvalue{\??id#1\c!command}% {\doattributes{\??id#1}\c!style\c!color{\strut\ignorespaces#2}}% \getvalue{\??id#1\c!after}% \nobreak} \def\doregistercharacterA[#1]#2{\doregistercharactera[#1]{\WORD{#2}}} \def\doregistercharacterB[#1]#2{\doregistercharacterb[#1]{\WORD{#2}}} %D Don't use \type{\string#2}; another hack is needed, since %D \type {#2} can be \type {\string} itself. % \def\doregisterreference[#1]#2% % {\doifvalue{\??id#1\c!referencing}\v!on % {\pagereference[#1:#2]}} \def\doregisterreference[#1]#2% {\doifsomething{#2} {\doifvalue{\??id#1\c!referencing}\v!on {\pagereference[#1:\strippedcsname#2]}}} \def\dosetpageregisterletter#1#2% {\flushseenregisterpage \gdef\c!entryreference {\global\let\c!entryreference\relax \doregisterreference[#1]{#2}}% \gdef\c!entryletter {\global\utilitydonetrue \global\let\c!entryletter\relax \doregistercharacter[#1]{#2}}} % \def\HowUgly #1{\doHowUgly#1\relax} % \def\doHowUgly#1#2\relax{\iffirstregisterentry{\bf#1}\else#1\fi#2} % unchecked % % \setupregister[index][indicator=no,deeptextcommand=\HowUgly] % % \starttext % \chapter{First Chapter} % Some text...\index{word} % \section {First Section} % Some text...\index{word} % Some text...\index{another entry} % Some text...\index{ansi} % Some text...\index{another entry} % \page[yes] % \completeindex % \stoptext \def\dohandlepageregisterentry#1#2% {\dohandleregisterentry{\executeifdefined{\??id#1\c!deeptextcommand}\firstofoneargument{#2}}} \def\dosetpageregisterentrya#1#2% {\flushseenregisterpage \edef\currententrylevel{1}% \global\let\c!entryb\relax \global\let\c!entryc\relax \global\let\c!entryd\relax \gdef\c!entrya {\iffirstregisterentry\else\endgraf\fi % new \global\firstregisterpagetrue \hangindent1em\noindent\c!entryreference \dohandlepageregisterentry{#1}{#2}% \global\firstregisterentryfalse \global\firstsubentrytrue \global\firstsubsubentrytrue}} \def\dosetpageregisterentryb#1#2% {\flushseenregisterpage % redundant \edef\currententrylevel{2}% \global\let\c!entryd\relax \global\let\c!entryc\relax \global\def\c!entryb {\iffirstregisterentry\else\endgraf\fi % new \global\firstregisterpagetrue \global\let\c!entrya\relax \iffirstsubentry\nobreak\fi \hangindent2em\noindent\c!entryreference\hskip1em\relax \dohandlepageregisterentry{#1}{#2}% \global\firstregisterentryfalse \global\firstsubentryfalse \global\firstsubsubentrytrue}} \def\dosetpageregisterentryc#1#2% {\flushseenregisterpage % redundant \edef\currententrylevel{3}% \gdef\c!entryc {\iffirstregisterentry\else\endgraf\fi % new \global\firstregisterpagetrue \global\let\c!entrya\relax \global\let\c!entryb\relax \iffirstsubsubentry\nobreak\fi \hangindent3em\noindent\c!entryreference\hskip2em\relax \dohandlepageregisterentry{#1}{#2}% \global\firstregisterentryfalse \global\firstsubsubentryfalse}} \def\dosetpageregisterentryd#1#2% {\flushseenregisterpage % redundant \edef\currententrylevel{4}% \gdef\c!entryd {\iffirstregisterentry\else\endgraf\fi % new \global\firstregisterpagetrue \global\let\c!entrya\relax \global\let\c!entryb\relax \global\let\c!entryc\relax \iffirstsubsubentry\nobreak\fi \hangindent4em\noindent\c!entryreference\hskip3em\relax \dohandlepageregisterentry{#1}{#2}% \global\firstregisterentryfalse \global\firstsubsubentryfalse}} \def\dosetpageregister#1% \currentregister gebruiken {\dosetreglevel{#1}% \global\let\currentregisterentry\empty \global\firstsubentrytrue \global\firstsubsubentrytrue \setregisterpage{#1}% \setvalue{#1\s!entrya}{\dosetpageregisterentrya {#1}}% \setvalue{#1\s!entryb}{\dosetpageregisterentryb {#1}}% \setvalue{#1\s!entryc}{\dosetpageregisterentryc {#1}}% \setvalue{#1\s!entryd}{\dosetpageregisterentryd {#1}}% \setvalue{#1\s!page }{\dosetpageregisterpage{1}{#1}}% \setvalue{#1\s!from }{\dosetpageregisterpage{2}{#1}}% \setvalue{#1\s!to }{\dosetpageregisterpage{3}{#1}}% \setvalue{#1\s!see }{\dosetpageregistersee {#1}}% \setvalue{#1\s!entry }{\dosetpageregisterletter {#1}}} \def\dosetreglevel#1% {\dosetfilterlevel{\getvalue{\??id#1\c!criterium}}\empty} \def\getalllistreferences#1#2% {\gdefconvertexpanded\currentregisterentry{\getvalue{\??id#1\c!expansion}}{#2}% \doifdefinedelse{\??id#1\??id\currentregisterentry} {\edef\alllistreferences% {\getvalue{\??id#1\??id\currentregisterentry}}% \beforesplitstring\alllistreferences\at::\to\internallistreference \aftersplitstring \alllistreferences\at::\to\alllistreferences} {\let\alllistreferences\empty \def\internallistreference{0}}} \def\dosetlinkregister#1% is die page reference echt nodig? {\dosetreglevel{#1}% \setregisterpage{#1}% \global\let\currentregisterentry\empty \global\firstsubentrytrue % not needed \global\firstsubsubentrytrue % not needed too \setvalue{#1\s!entrya}##1{\dosetlinkregisterentrya{#1}{##1}}% \setvalue{#1\s!entry }##1{\dosetpageregisterletter{#1}{##1}}} \def\dosetlinkregisterentrya#1#2% {\global\utilitydonetrue \c!entryletter \iflocation \getalllistreferences{#1}{#2}% % no \endgraf \hangindent1em\noindent\c!entryreference % %\thisissomeinternal{\s!lin}{\internallistreference}% % \pagereference[-:\s!lin:\internallistreference]% -: added % \getcommacommandsize[\alllistreferences]% \getfromcommacommand[\alllistreferences][1]% \ifnum\commalistsize=1 \let\firstlistreference\empty \let\midlistreference\commalistelement \let\lastlistreference\empty \else \let\firstlistreference\commalistelement \getfromcommacommand[\alllistreferences][\commalistsize]% \let\lastlistreference\commalistelement \ifnum\commalistsize=2 \let\midlistreference\empty \else \!!counta\commalistsize \divide\!!counta 2 \getfromcommacommand[\alllistreferences][\!!counta]% \let\midlistreference\commalistelement \fi \fi % aangepast \def\dodocommand[##1-##2]% {\gotonextinternal{\s!ind}{##1}{##2}{\box0}}% \doifelsevalue{\??id#1\c!interaction}\v!pagenumber {\limitedregisterentry{#1}{#2}} % paginanummer {{\setbox0\hbox{\limitedregisterentry{#1}{\begstrut#2}}% \ifx\firstlistreference\empty % tekst,alles \ifx\midlistreference\empty \box0 \else \expandafter\dodocommand\expandafter[\midlistreference]% \fi \else \expandafter\dodocommand\expandafter[\firstlistreference]% \fi}}% \doifvalue{\??id#1\c!number}\v!yes {\hskip\getvalue{\??id#1\c!distance}(\commalistsize)}% \doifnotvalue{\??id#1\c!interaction}\v!text % paginanummer,alles {\def\docommand##1##2% {{\setbox0\hbox{\showlocation{\hbox to 1em{\hss\symbol[##2]\hss}}}% \ifx##1\empty % \hskip\wd0 % (optioneel maken) \else \expandafter\dodocommand\expandafter[##1]% \fi}}% \hskip\getvalue{\??id#1\c!distance}% \docommand\firstlistreference\v!previous \docommand\midlistreference\v!somewhere \docommand\lastlistreference\v!next}% % tot hier \else % no \endgraf \noindent\c!entryreference \limitedregisterentry{#1}{#2}% \fi \endgraf} \def\dosetregister#1% {\doifelsevalue{\??id#1\c!coupling}\v!yes {\ifautoregisterhack \dosetautoregister{#1}% \else \dosetlinkregister{#1}% \fi} {\dosetpageregister{#1}}} \newcounter\internallistreference \def\doloadregisterlinks#1% {\dosetreglevel{#1}% \setregisterpage{#1}% \global\let\currentregisterentry\empty \global\firstregisterpagetrue \setvalue{#1\s!entrya}##1% {\global\firstregisterpagetrue \gdefconvertedargument\currentregisterentry{##1}% global nodig? \doglobal\increment\internallistreference}% \setvalue{#1\s!from}% {\getvalue{#1\s!page}}% \ifautoregisterhack \setvalue{#1\s!page}##1##2##3##4% {\doifreglevelelse[##3] {\global\utilitydonetrue \iffirstregisterpage \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname {\internallistreference::##4}% \else % catches errors in index \ifcsname\??id#1\??id\currentregisterentry\endcsname \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname {\csname\??id#1\??id\currentregisterentry\endcsname,##4}% \fi \fi} {}}% \else \setvalue{#1\s!page}##1##2##3##4% {\doifreglevelelse[##3] {\global\utilitydonetrue \iffirstregisterpage \global\firstregisterpagefalse \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname {\internallistreference::##2-##4}% \else % catches errors in index \ifcsname\??id#1\??id\currentregisterentry\endcsname \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname {\csname\??id#1\??id\currentregisterentry\endcsname,##2-##4}% \fi \fi} {}}% \fi} \def\docoupleregister[#1][#2]% {\iflocation \ifcase0\countervalue{autolink:#1}\relax % only once \begingroup \let\dosetregister\doloadregisterlinks \def\currentregister{#1}% \setupregister[#1][#2]% \doutilities\currentregister{\registerparameter\c!file}\currentregister\dobeforeplaceregister\doafterplaceregister \endgroup \ifautoregisterhack \doinitializeautoregister{#1}% \else \doinitializelinkregister{#1}% \fi \fi \fi} \def\coupleregister {\dodoubleempty\docoupleregister} \def\dodocommandprolinrefAA[#1-#2]% {\def\lastlistreference{#1-#2}} \def\dodocommandprolinrefA[#1-#2]% {\def\lastlistreference{#1-#2}% \ifx\firstlistreference\empty \let\firstlistreference\lastlistreference \fi \ifnum#1<\nextinternalreference\relax \let\prevlistreference\lastlistreference \else\ifnum#1>\nextinternalreference\relax \let\nextlistreference\lastlistreference \let\dodocommandprolinrefA\dodocommandprolinrefAA \else \let\selflistreference\lastlistreference \fi\fi} \def\docommandprolinrefA#1% {\dodocommandprolinrefA[#1]} \def\dodocommandprolinrefB[#1-#2]% {\gotonextinternal{\s!ind}{#1}{#2}{\box0}} \def\docommandprolinrefB#1#2#3% {\bgroup \ifx#2\empty \doifvalue{\??id#1\c!unknownreference}\v!empty{\hskip1em}% \else \setbox0\hbox to 1em{\hss\showlocation{\symbol[#3]}\hss}% \expandafter\dodocommandprolinrefB\expandafter[#2]% \fi \egroup} \def\doprocesslinkregister[#1][#2]#3% {\hbox {\doprocesspageregister[#2]{}{#3}% \let\firstlistreference\empty \let\lastlistreference\empty \let\selflistreference\empty \let\prevlistreference\empty \let\nextlistreference\empty \getalllistreferences{#1}{#3}% \ifx\alllistreferences\empty \else \expanded{\rawprocesscommalist[\alllistreferences]}\docommandprolinrefA \fi \ifx\prevlistreference\empty \let\prevlistreference\lastlistreference \fi \ifx\nextlistreference\empty \let\nextlistreference\firstlistreference \fi \ifx\prevlistreference\selflistreference \let\prevlistreference\empty \let\nextlistreference\empty \fi \setalignmentswitch{\getvalue{\??id#1\c!location}}% \ifcase\alignmentswitch % links \docommandprolinrefB{#1}\prevlistreference\v!previous \docommandprolinrefB{#1}\nextlistreference\v!next \or % midden \docommandprolinrefB{#1}\prevlistreference\v!previous \or % rechts \fi \doifreferencefoundelse{\s!lin:\internallistreference} {\gotosomeinternal \s!lin \internallistreference \currentrealreference {\showlocation{\limitedregisterentry{#1}{#3}}}} {\hbox{\limitedregisterentry{#1}{#3}}}% \ifcase\alignmentswitch % links \or % midden \docommandprolinrefB{#1}\nextlistreference\v!next \or % rechts \docommandprolinrefB{#1}\prevlistreference\v!previous \docommandprolinrefB{#1}\nextlistreference\v!next \fi}} \def\doprocesslinkedregister[#1][#2]#3% page auto link {\bgroup \chardef\registerpagestatus\plusone \def\currentregister{#1}% \iflocation % \next is not needed \ifautoregisterhack \def\next{\doprocessautoregister[#1][#2]}% \else \def\next{\doprocesslinkregister[#1][#2]}% \fi \else \def\next{\doprocesspageregister[#2]{}}% \fi \next{#3}% \egroup} \def\dodolinkedregister[#1][#2]#3% page auto link {\doflushatpar{\doprocesslinkedregister[#1][#2]{#3}}} \def\dolinkedregister#1% {\dodoubleempty\dodolinkedregister[#1]} \def\dosetautoregister#1% {\makecounter{autolink:#1}% \dosetreglevel{#1}% \setregisterpage{#1}% \global\let\currentregisterentry\empty \global\firstsubentrytrue % not needed \global\firstsubsubentrytrue % not needed too \setvalue{#1\s!entrya}##1{\dosetautoregisterentrya{#1}{##1}}% \setvalue{#1\s!entry }##1{\dosetpageregisterletter{#1}{##1}}} \def\dosetautoregisterentrya#1#2% {\global\utilitydonetrue \c!entryletter \iflocation \getalllistreferences{#1}{#2}% \endgraf\hangindent1em\noindent\c!entryreference \pagereference[-:\s!lin:\internallistreference]% \pluscounter{autolink:#1}% \bgroup %\setupinteraction[\c!color=,\c!contrastcolor=,\c!style=]% kan sneller \resetinteractionparameter\c!color \resetinteractionparameter\c!contrastcolor \resetinteractionparameter\c!style \gotobox {\limitedregisterentry{#1}{\begstrut#2}}% [JS(SetRegisterEntry{\v!register,\countervalue{autolink:#1},#2,{\alllistreferences}})]% \egroup \else \endgraf\noindent\c!entryreference \limitedregisterentry{#1}{#2}% \fi} \def\doprocessautoregister[#1][#2]#3% {\hbox {\doprocesspageregister[#2]{}{#3}% \doifreferencefoundelse{\s!lin:\internallistreference} {\gotosomeinternal \s!lin {\internallistreference}{\currentrealreference} {\showlocation{\limitedregisterentry{#1}{#3}}}} {\hbox{\limitedregisterentry{#1}{#3}}}}} % \appendmacro aan openpaginaactie (in shipout) %D The first implementation used one main field with clones. %D In a 2500 page document this resulted in a rather (anoying) %D long start||up time. This \quote {every page its own field} %D solution, combined with a \quote {page open action}, works %D much faster, but is conceptually pretty weak. \def\complexregisterfield[#1]% {\definefield[#1:\realfolio][line][\v!register]% \field[#1:\realfolio]} \def\simpleregisterfield {\complexregisterfield[\v!register]} \definecomplexorsimple\registerfield \setupfield [\v!register] [\c!width=10em, \c!height=3ex, \c!align=\v!middle, \c!option=\v!readonly, \c!location=\v!low] \def\doinitializeautoregister#1% {\useJSscripts[reg]% \useJSpreamblenow{LinkedRegisters}% \setupinteraction[\c!openpageaction=JS(UpdateRegisterField{\v!register})]% \definereference[\v!reset\v!register][JS(ResetRegisterEntry{\v!register})]% \definereference[\v!first\v!register][JS(GotoFirstRegisterEntry{\v!register})]% \definereference[\v!previous\v!register][JS(GotoPreviousRegisterEntry{\v!register})]% \definereference[\v!next\v!register][JS(GotoNextRegisterEntry{\v!register})]% \definereference[\v!last\v!register][JS(GotoLastRegisterEntry{\v!register})]} \def\doinitializelinkregister#1% {} % todo ruwe register \def\placeregister {\dodoubleempty\doplaceregister} \def\doplaceregister[#1][#2]% {\iffirstargument \begingroup \edef\currentregister{#1}% \setupregister[\currentregister][#2]% \doifelse{\registerparameter\c!compress}\v!yes % new {\chardef\collapseregisterpages\plusone} {\chardef\collapseregisterpages\zerocount}% % TH: disable next line % \raggedright % /TH \startcolumns [\c!n=\registerparameter\c!n, \c!balance=\registerparameter\c!balance, \c!align=\registerparameter\c!align, tolerance=stretch]% \dontcomplain \startpacked[\v!blank]% \doutilities\currentregister{\registerparameter\c!file}\currentregister\dobeforeplaceregister\doafterplaceregister \stoppacked \stopcolumns \endgroup \fi} \def\dobeforeplaceregister {\resetseenregisterpage \relax} \def\doafterplaceregister {\flushseenregisterpage \par} \def\completeregister {\dodoubleempty\docompleteregister} \def\docompleteregister[#1][#2]% {\iffirstargument \begingroup \edef\currentregister{#1}% % the expansion is needed because we don't want \v!'s in the tuo file (french) \expanded{\systemsuppliedchapter[\currentregister]{\noexpand\headtext{\currentregister}}}% \placeregister[\currentregister][#2]% \page[\v!yes]% \endgroup \fi} \def\doregisterregisterlanguage#1% {\savesortlanguage{\getvalue{\??id#1\s!language}}% \expanded{\immediatewriteutility{r l {#1} {\getvalue{\??id#1\s!language}}}}} \def\dodefineregister[#1][#2]% {\setupregister[#1]% [\c!n=2, \c!balance=\v!yes, % \v!no komt niet zo vaak voor \c!align=\v!flushleft, \c!before=\blank, % binnen kolommen: \blank[\v!line] \c!after=, \c!symbol=, \c!compress=\v!no, \c!interaction=\v!pagenumber, \c!alternative=\v!a, \c!distance=1em, \c!style=\v!bold, \c!pagestyle=\v!slanted, \c!indicator=\v!yes, \v!part\v!number=\v!yes, % v \v!chapter\c!number=\v!no, \c!criterium=\v!all, \c!command=, \c!referencing=\v!on, \c!location=\v!middle, \c!maxwidth=, \c!number=\v!no, \c!unknownreference=\v!empty, \c!prefix=\v!both, \c!expansion=, \c!keyexpansion=, \c!file=\jobname, %\c!deeptextcommand=, % undefined by default ! \s!language=\currentmainlanguage]% \doglobal\appendtoksonce \doregisterregisterlanguage{#1}% \to \everysavesortkeys \presetheadtext[#1=\Word{#1}]% \addutilityreset{#1}% \setvalue{#1}{\doregister{#1}}% \setvalue{\e!coupled#1}{\dolinkedregister{#1}}% \setvalue{\s!set#1}{\dosetregister{#1}}% \setvalue{\s!reset#1}{\doresetregister{#1}}% \setvalue{\e!see#1}{\doseeregister{#1}}% \setvalue{\e!place#1}{\placeregister[#1]}% \setvalue{\e!complete#1}{\completeregister[#1]}% \setvalue{\e!setup#1\e!endsetup}[##1]{\getparameters[\??id#1][##1]}} \def\defineregister {\dodoubleargument\dodefineregister} \def\registerlengte{\utilityregisterlength} \def\utilityregisterlength{0} \def\dodetermineregistercharacteristics[#1][#2]% {\begingroup \def\currentregister{#1}% \setupregister[#1][#2]% \dosetreglevel{#1}% \setvalue{#1\s!from}% {\getvalue{#1\s!page}}% \setvalue{#1\s!page}##1##2##3##4% {\doifreglevelelse[##3] {\doglobal\increment\utilitylistlength \global\utilitydonetrue} {}}% \doglobal\newcounter\utilityregisterlength \setbox0\vbox{\doutilities\currentregister{\registerparameter\c!file}\currentregister\dobeforeplaceregister\doafterplaceregister}% \endgroup \ifregistergeplaatst \setsystemmode \v!register \else \resetsystemmode\v!register \fi} \def\determineregistercharacteristics {\dodoubleempty\dodetermineregistercharacteristics} %D Default index: \defineregister [\v!index] [\v!indices] % \setupregister[index][koppeling=ja] % % \stelveldenin % [register][achtergrond=raster,kader=uit] % % \stelvoettekstenin % [{\field[index]}] % % \stelhoofdtekstenin % [{\naar {first}[eersteindex]\quad % \naar{previous}[vorigeindex]\quad % \naar {next}[volgendeindex]\quad % \naar {last}[laatsteindex]\quad\quad % \naar {index}[index]}] % % \starttekst % % oeps~~~\gekoppeldeindex{oeps} \blanko % flop~~~\gekoppeldeindex{flop} \blanko % test~~~\gekoppeldeindex{test} \pagina % flop~~~\gekoppeldeindex{flop} \blanko % test~~~\gekoppeldeindex{test} \pagina % oeps~~~\gekoppeldeindex{oeps} \blanko % test~~~\gekoppeldeindex{test} \pagina % flop~~~\gekoppeldeindex{flop} \blanko % oeps~~~\gekoppeldeindex{oeps} \pagina % % \volledigeindex \protect \endinput ��������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-aux.mkiv�������������������������������0000644�0001750�0001750�00000102611�12161703335�024337� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=mult-aux, %D version=2010.08.2, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Helpers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: setupxxx and setupxxxs (so a plural for the root setup and % we can consider blocking the root) % todo (e.g for columnsets and registers): \definexxx[parent][1] % %D A generalization of \MKIV-like inheritance. Just something to play %D with (interface might change). The code here evolved in an email %D exchange between me and Wolgang Schuster. % todo: doifelse<whatever> \writestatus{loading}{ConTeXt Multilingual Macros / Helpers} \registerctxluafile{mult-aux}{1.001} \unprotect %D \starttyping %D \unprotect %D \def\????aa{@@@@aa} %D %D \installparameterhandler \????aa {whatever} %D \installsetuphandler \????aa {whatever} %D \installdefinehandler \????aa {whatever} \????aa % #3 == defaultroot %D \installfontandcolorhandler\????aa {whatever} %D %D % \installcommandhandler \????aa {whatever} \????aa %D \protect %D %D % \whateverparameter \c!test %D % \whateverparameterhash \c!test %D % \namedwhateverparameter \mycurrentwhatever \c!test %D % \usewhateverstyleandcolor \c!style \c!color %D % \everydefinewhatever (sets \currentwhatever) %D % \everypresetwhatever (can be used to reset parameters as we can redefine) %D % \everysetupwhatever (sets \currentwhatever) %D %D \starttext %D \definewhatever[first] \definewhatever[second][first] %D test: \def\currentwhatever{first} \whateverparameter{method} \par %D \setupwhatever [method=unset] test: \def\currentwhatever{first} \whateverparameter{method} \par %D \setupwhatever[first] [method=first] test: \def\currentwhatever{first} \whateverparameter{method} \par %D test: \def\currentwhatever{second} \whateverparameter{method} \par %D \setupwhatever[second][method=second] test: \def\currentwhatever{second} \whateverparameter{method} \par %D \stoptext %D \stoptyping % problem: every* could clash % % There can be less {} in the following definitions if we assume \??aa and \c!somecs % % todo: \def\detokenized...parameter#1{\detokenize\expandafter\expandafter\expandafter{\csname#1#2\endcsname}} % always root % % it might be more efficient to do this at the lua and % % watch the push/pop and predefinition of current .. this is needed for nested % definitions and overloaded defines using the predefined one % todo: add (relaxed) postsetup and postdefine hooks, just after the everys % Start of experimental code: especially tables can have many assignments % and although most time is spent in the typesetting anyway, we can squeeze % out a little bit. Of course having 500 rows of 50 columns each with some % setting does not happen that often. One should keep in mind that in the % average document having some 500 assignments is no exception but there we're % talking of neglectable runtime for them. Of course in the definitions below % there is no real gain, only in the generated \setup* commands. Another % situation with many assignments is \XML\ where we can pass attributes % and normally don't do testing of them making sense. % % \testfeatureonce{100000}{\getparameters[bla][a=111,b=222,c=333]}% 1.669s % \testfeatureonce{100000}{\mult_interfaces_get_parameters{bla} [a=111,b=222,c=333]}% 1.529s % \testfeatureonce{100000}{\def\m_mult_interfaces_namespace{bla}\mult_interfaces_get_parameters_indeed[a=111,b=222,c=333]}% 1.466s \let\m_mult_interfaces_namespace\empty \def\mult_interfaces_get_parameters#1[#2% {\if\noexpand#2]% \expandafter\gobbleoneargument \else \def\m_mult_interfaces_namespace{#1}% \expandafter\mult_interfaces_get_parameters_indeed \fi#2} \def\mult_interfaces_get_parameters_indeed#1]% namespace already set {\mult_interfaces_get_parameters_item#1,],\_e_o_p_} \def\mult_interfaces_get_parameters_item#1,#2% #2 takes space before , {\if,#1,% dirty trick for testing #1=empty \expandafter\mult_interfaces_get_parameters_item \else\if]#1% \doubleexpandafter\gobbleoneargument \else \mult_interfaces_get_parameters_assign#1==\empty\_e_o_p_ \doubleexpandafter\mult_interfaces_get_parameters_item \fi\fi#2} \def\mult_interfaces_get_parameters_error#1#2#3% {\showassignerror{#2}{\the\inputlineno\space(#1)}} \def\mult_interfaces_get_parameters_assign#1=#2=#3#4\_e_o_p_ {\ifx\empty#1\empty \expandafter\mult_interfaces_get_parameters_error \else\ifx#3\empty \doubleexpandafter\mult_interfaces_get_parameters_error \else \doubleexpandafter\dosetvalue \fi\fi \m_mult_interfaces_namespace{#1}{#2}} \newif\ifassignment \def\mult_check_for_assignment_indeed#1=#2#3\_end_ {\if#2@\assignmentfalse\else\assignmenttrue\fi} \def\mult_check_for_assignment#1% {\expandafter\mult_check_for_assignment_indeed\detokenize{#1}=@@\_end_} % End of experimental code. % the commented detokenized variant that backtracks ... needs testing usage first % % \let\whatever\relax % % \definetest[oeps][bagger=\whatever] % % \def\currenttest{oeps} \edef\hans{\detokenizedtestparameter{bagger}}\meaning\hans\par % \def\currenttest{oeps} \edef\hans{\detokenizedtestparameter{reggab}}\meaning\hans\par \def\mult_interfaces_detokenize{\expandafter\expandafter\expandafter\detokenize\expandafter\expandafter\expandafter} \unexpanded\def\mult_interfaces_install_parameter_handler#1#2#3#4#5#6#7#8#9% inlining \csname*\endcsname is more efficient (#3 and #6 only) {\ifx#2\relax\let#2\empty\fi % it is hardly faster but produces less expansion tracing %\def#3##1{\csname#4{#1#2}{##1}\endcsname}% \def#3##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}% \def#4##1##2{\ifcsname##1:##2\endcsname##1:##2\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}% \def#5##1##2{\ifx##1\relax\s!empty\else#4{##1}{##2}\fi}% is {} needed around ##1 ? \def#6##1##2{\csname\ifcsname#1##1:##2\endcsname#1##1:##2\else\expandafter#5\csname#1##1:\s!parent\endcsname{##2}\fi\endcsname}% \def#7##1{\detokenize\expandafter\expandafter\expandafter{\csname#1#2:##1\endcsname}}% always root, no backtrack % \def#7##1{\mult_interfaces_detokenize{\csname#4{#1#2}{##1}\endcsname}}% compact version % \def#7##1{\mult_interfaces_detokenize{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}}% \def#8##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\s!empty\fi\endcsname}% \def#9##1{\csname#1#2:##1\endcsname}} \unexpanded\def\installparameterhandler#1#2% {\normalexpanded {\mult_interfaces_install_parameter_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname #2parameter\endcsname \expandafter\noexpand\csname do#2parameter\endcsname % or : #2_parameter_hash \expandafter\noexpand\csname do#2parentparameter\endcsname % or : #2_parent_parameter_hash \expandafter\noexpand\csname named#2parameter\endcsname \expandafter\noexpand\csname detokenized#2parameter\endcsname \expandafter\noexpand\csname strict#2parameter\endcsname % checked \expandafter\noexpand\csname direct#2parameter\endcsname}} % unchecked \unexpanded\def\mult_interfaces_install_root_parameter_handler#1#2#3% {\def#2##1{\detokenize\expandafter\expandafter\expandafter{\csname#1:##1\endcsname}}% always root \def#3##1{\csname\ifcsname#1:##1\endcsname#1:##1\else\s!empty\fi\endcsname}} \unexpanded\def\installrootparameterhandler#1#2% {\normalexpanded {\mult_interfaces_install_root_parameter_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname detokenizedroot#2parameter\endcsname \expandafter\noexpand\csname root#2parameter\endcsname}} \unexpanded\def\mult_interfaces_install_parameter_hash_handler#1#2#3#4#5#6#7#8#9% {\ifx#2\relax\let#2\empty\fi \def#3##1{#1#4{#1#2}{##1}:}% leading #1 was missing .. is this one used? \def#4##1##2{\ifcsname##1:##2\endcsname##1\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}% \def#5##1##2{\ifx##1\relax\else#4{##1}{##2}\fi}% \def#6{#1#2:}% \def#7##1{#1##1:}% \def#8{\ifx#2\empty\else\ifcsname#1#2:\s!parent\endcsname\else\expandafter\let\csname#1#2:\s!parent\endcsname#1\fi\fi}% \unexpanded\def#9##1{\expandafter\edef\csname#1##1:\s!parent\endcsname{#1#2}}} \unexpanded\def\installparameterhashhandler#1#2% {\expandafter\let\csname#2namespace\endcsname#1% \normalexpanded {\mult_interfaces_install_parameter_hash_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname #2parameterhash\endcsname \expandafter\noexpand\csname do#2parameterhash\endcsname % or : #2_parameter_hash \expandafter\noexpand\csname do#2parentparameterhash\endcsname % or : #2_parent_parameter_hash \expandafter\noexpand\csname current#2hash\endcsname \expandafter\noexpand\csname named#2hash\endcsname \expandafter\noexpand\csname check#2parent\endcsname \expandafter\noexpand\csname chaintocurrent#2\endcsname}} % In \MKIV\ we can probably use the english variant for all other % languages too. % todo: inline the \do*value \unexpanded\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6% {\ifx#2\relax\let#2\empty\fi \unexpanded\def#3{\dosetvalue {#1#2:}}% ##1 {##2} (braces are mandate) \unexpanded\def#4{\dosetevalue{#1#2:}}% ##1 {##2} (braces are mandate) \unexpanded\def#5{\doletvalue {#1#2:}}% ##1 ##2 \unexpanded\def#6{\doletvalue {#1#2:}\empty}}% ##1 \startinterface english \unexpanded\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6% {\ifx#2\relax\let#2\empty\fi \unexpanded\def#3##1{\expandafter \def\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate) \unexpanded\def#4##1{\expandafter\edef\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate) \unexpanded\def#5##1{\expandafter \let\csname#1#2:##1\endcsname}% ##1 ##2 \unexpanded\def#6##1{\expandafter \let\csname#1#2:##1\endcsname\empty}}% ##1 \stopinterface \unexpanded\def\installparametersethandler#1#2% {\normalexpanded {\mult_interfaces_install_parameter_set_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname set#2parameter\endcsname \expandafter\noexpand\csname setexpanded#2parameter\endcsname \expandafter\noexpand\csname let#2parameter\endcsname \expandafter\noexpand\csname reset#2parameter\endcsname}} \let\dousecurrentstyleparameter\relax \let\dousecurrentcolorparameter\relax \let\currentstyleparameter\empty \let\currentcolorparameter\empty \unexpanded\def\mult_interfaces_install_style_and_color_handler#1#2#3#4% {\unexpanded\def#2##1##2% style color {\edef\currentstyleparameter{#1{##1}}% this name is public (can also set color e.g. in underline) \ifx\currentstyleparameter\empty\else\dousecurrentstyleparameter\fi \edef\currentcolorparameter{#1{##2}}% this name is public (so we do this after the style switch) \ifx\currentcolorparameter\empty\else\dousecurrentcolorparameter\fi}% \unexpanded\def#3##1% style {\edef\currentstyleparameter{#1{##1}}% this name is public \ifx\currentstyleparameter\empty\else\dousecurrentstyleparameter\fi}% \unexpanded\def#4##1% color {\edef\currentcolorparameter{#1{##1}}% this name is public \ifx\currentcolorparameter\empty\else\dousecurrentcolorparameter\fi}} \unexpanded\def\installstyleandcolorhandler#1#2% {\normalexpanded {\mult_interfaces_install_style_and_color_handler \expandafter\noexpand\csname #2parameter\endcsname \expandafter\noexpand\csname use#2styleandcolor\endcsname % maybe an alias use#2styleandcolorparameters \expandafter\noexpand\csname use#2styleparameter\endcsname \expandafter\noexpand\csname use#2colorparameter\endcsname}} \let\definehandlerparent\empty \def\mult_check_for_parent#1#2#3#4% {\ifcsname#1#4:\s!parent\endcsname \else \ifx#4\empty \else \writestatus\m!system{error: invalid parent #4 for #3, #4 defined too (best check it)}% \expandafter\edef\csname#1#4:\s!parent\endcsname{#2}% \fi \fi} \unexpanded\def\mult_interfaces_install_define_handler#1#2#3#4#5#6#7#8#9% why is \expanded still needed in clones {\ifx#4\relax\let#4\empty\fi % see \defineregister \unexpanded\def#2{\dotripleempty#5}% \newtoks#6% \newtoks#7% \unexpanded\def#5[##1][##2][##3]% [child][parent][settings] | [child][settings] | [child][parent] | [child] {\let#9#4% \edef#4{##1}% \ifthirdargument \the#6% predefine \edef#8{##2}% \mult_check_for_parent{#1}{#3}#4#8% \expandafter\edef\csname#1#4:\s!parent\endcsname{#1##2}% \mult_interfaces_get_parameters{#1#4:}[##3]% \else\ifsecondargument \the#6% predefine \expandafter\mult_check_for_assignment_indeed\detokenize{##2}=@@\_end_ \ifassignment \let#8\empty \expandafter\edef\csname#1#4:\s!parent\endcsname{#3}% \mult_interfaces_get_parameters{#1#4:}[##2]% \else \edef#8{##2}% \mult_check_for_parent{#1}{#3}#4#8% \expandafter\edef\csname#1#4:\s!parent\endcsname{#1##2}% \fi \else \the#6% predefine \let#8\empty \expandafter\edef\csname#1#4:\s!parent\endcsname{#3}% \fi\fi \the#7% \let#4#9}} \unexpanded\def\installdefinehandler#1#2#3% {\normalexpanded {\mult_interfaces_install_define_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname define#2\endcsname {\noexpand#3}% root \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname define_#2\endcsname % semi-public \expandafter\noexpand\csname everypreset#2\endcsname \expandafter\noexpand\csname everydefine#2\endcsname \expandafter\noexpand\csname current#2parent\endcsname \expandafter\noexpand\csname saved_defined_#2\endcsname}} \unexpanded\def\mult_interfaces_install_setup_handler#1#2#3#4#5#6#7#8#9% {\ifx#3\relax\let#3\empty\fi \unexpanded\def#2{\dodoubleempty#4}% \unexpanded\def#6{\mult_interfaces_get_parameters{#1#3:}}% no every ! don't change it \newtoks#5% \newtoks#8% \unexpanded\def#4[##1][##2]% maybe helper {\let#7#3% \ifsecondargument \def#9####1% we will have a simple one as well {\edef#3{####1}% \mult_interfaces_get_parameters{#1#3:}[##2]% \the#5}% \processcommalist[##1]#9% \else \let#3\empty \mult_interfaces_get_parameters{#1:}[##1]% \the#5% \fi \let#3#7% \the#8}} \unexpanded\def\installsetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_setup_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname everysetup#2\endcsname \expandafter\noexpand\csname setupcurrent#2\endcsname \expandafter\noexpand\csname saved_setup_current#2\endcsname \expandafter\noexpand\csname everysetup#2root\endcsname \expandafter\noexpand\csname nested_setup_current#2\endcsname}} \let\doingrootsetupnamed\plusone % \setuplayout[name][key=value] \let\doingrootsetuproot \plustwo % \setuplayout [key=value] \let\doingrootsetnamed \plusthree % \setuplayout[name] \let\doingrootsetroot \plusfour % \setuplayout \unexpanded\def\mult_interfaces_install_switch_setup_handler_a#1#2#3#4#5% {\ifx#3\relax\let#3\empty\fi \unexpanded\def#2{\dodoubleempty#4}% \unexpanded\def#5{\mult_interfaces_get_parameters{#1#3:}}} \unexpanded\def\mult_interfaces_install_switch_setup_handler_b#1#2#3#4#5#6#7#8#9% {\newtoks#5% \newconstant#2% \newtoks#8% \newtoks#9% \ifx#6\relax\let#6\empty\fi \unexpanded\def#4[##1][##2]% maybe helper {\ifsecondargument % no commalist here % \setuplayout[whatever][key=value] \let#7#3% \let#6#3% \edef#3{##1}% #2\doingrootsetupnamed \mult_interfaces_get_parameters{#1#3:}[##2]% \the#5% \ifx#3#6\the#8\fi % only switchsetups if previous == current \let#3#7% \else\iffirstargument % \mult_check_for_assignment{##1}% \expandafter\mult_check_for_assignment_indeed\detokenize{##1}=@@\_end_ \ifassignment % \setuplayout[key=value] \let#7#3% \let#6#3% \let#3\empty #2\doingrootsetuproot \mult_interfaces_get_parameters{#1:}[##1]% \the#5% \the#8% switchsetups \let#3#7% \else % \setuplayout[whatever] \let#6#3% % previous becomes current \edef#3{##1}% this will catch reset so one needs to test for it #2\doingrootsetnamed \the#5% % we can check for previous vs current \the#8% switchsetups \fi \else % \setuplayout \let#6#3% % previous becomes current \let#3\empty % current becomes empty #2\doingrootsetroot \the#5% \the#8% switchsetups \fi\fi #2\zerocount % mode is always zero at the end \the#9}} \unexpanded\def\installswitchsetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_switch_setup_handler_a {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname setupcurrent#2\endcsname \mult_interfaces_install_switch_setup_handler_b {\noexpand#1}% \??aa \expandafter\noexpand\csname #2setupmode\endcsname \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname everysetup#2\endcsname \expandafter\noexpand\csname previous#2\endcsname \expandafter\noexpand\csname saved_setup_current#2\endcsname \expandafter\noexpand\csname everyswitch#2\endcsname \expandafter\noexpand\csname everysetup#2root\endcsname}} \unexpanded\def\mult_interfaces_install_auto_setup_handler#1#2#3#4#5#6#7#8#9% {\ifx#3\relax\let#3\empty\fi \unexpanded\def#2{\dotripleempty#4}% \unexpanded\def#6{\mult_interfaces_get_parameters{#1#3:}}% \newtoks#5% \def#4[##1][##2][##3]% {\let#8#3% \ifthirdargument \def#9####1% {\edef#3{####1}% \expandafter\def\csname#1#3:\s!parent\endcsname{#1##2}% \mult_interfaces_get_parameters{#1#3:}[##3]% always sets parent \the#5}% \processcommalist[##1]#9% \else\ifsecondargument \def#9####1% {\edef#3{####1}% #7% checks parent and sets if needed \mult_interfaces_get_parameters{#1#3:}[##2]% \the#5}% \processcommalist[##1]#9% \else \let#3\empty \mult_interfaces_get_parameters{#1:}[##1]% \the#5% \fi\fi \let#3#8}} \unexpanded\def\installautosetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_auto_setup_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname everysetup#2\endcsname \expandafter\noexpand\csname setupcurrent#2\endcsname \expandafter\noexpand\csname check#2parent\endcsname \expandafter\noexpand\csname saved_setup_current#2\endcsname \expandafter\noexpand\csname nested_setup_current#2\endcsname}} \unexpanded\def\installbasicparameterhandler#1#2% {\installparameterhandler {#1}{#2}% \installparameterhashhandler{#1}{#2}% \installparametersethandler {#1}{#2}% \installrootparameterhandler{#1}{#2}} \unexpanded\def\installbasicautosetuphandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installautosetuphandler {#1}{#2}} \unexpanded\def\installcommandhandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installsetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} \unexpanded\def\installswitchcommandhandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installswitchsetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} \unexpanded\def\installautocommandhandler#1#2#3% automatically defined cloned setups {\installbasicparameterhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installautosetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} \unexpanded\def\installsimplecommandhandler#1#2#3% no define (experiment) - use \check*parent when defining {\installbasicparameterhandler{#1}{#2}% \installsetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} %D Many mechanisms have some kind of inheritance in place, and these are %D the speed||critical ones. Therefore there is no reason to stick to %D \type {\@@xxkey} for the sake of performance. For this reason we also %D provide a direct variant. This permits a more consistent treatment of %D namespaces. A \type {\whateverparameter} call is three times slower %D and a \type {\directwhateverparameter} call two times but for some %D 100K expansions we only loose some .1 second which is neglectable %D given the small amount of expansions in real runs. %D We don't need colons for such simple cases. \unexpanded\def\mult_interfaces_install_direct_parameter_handler#1#2#3#4#5% {\def#3##1{\csname\ifcsname#1##1\endcsname#1##1\else\s!empty\fi\endcsname}% \def#4##1{\detokenize\expandafter\expandafter\expandafter{\csname#1##1\endcsname}}% % \def#4##1{\mult_interfaces_detokenize{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}}% \def#5##1{\csname#1##1\endcsname}} \unexpanded\def\installdirectparameterhandler#1#2% {\normalexpanded {\mult_interfaces_install_direct_parameter_handler {\noexpand#1}% \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname #2parameter\endcsname \expandafter\noexpand\csname detokenized#2parameter\endcsname \expandafter\noexpand\csname direct#2parameter\endcsname}} \unexpanded\def\mult_interfaces_install_direct_setup_handler#1#2#3#4#5% {\unexpanded\def#2{\dosingleempty#3}% \newtoks#5% \def#3[##1]{\mult_interfaces_get_parameters#1[##1]\the#5}% \def#4{\mult_interfaces_get_parameters#1}} \unexpanded\def\installdirectsetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_direct_setup_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname setupcurrent#2\endcsname % no \every (we use 'current' for consistency) \expandafter\noexpand\csname everysetup#2\endcsname}} \unexpanded\def\mult_interfaces_install_direct_parameter_set_handler#1#2#3#4#5% {\unexpanded\def#2{\dosetvalue #1}% \unexpanded\def#3{\dosetevalue#1}% \unexpanded\def#4{\doletvalue #1}% \unexpanded\def#5{\doletvalue #1\empty}}% \startinterface english \unexpanded\def\mult_interfaces_install_direct_parameter_set_handler#1#2#3#4#5% {\unexpanded\def#2##1{\expandafter \def\csname#1##1\endcsname}% \unexpanded\def#3##1{\expandafter\edef\csname#1##1\endcsname}% \unexpanded\def#4##1{\expandafter \let\csname#1##1\endcsname}% \unexpanded\def#5##1{\expandafter \let\csname#1##1\endcsname\empty}}% \stopinterface \unexpanded\def\installdirectparametersethandler#1#2% {\normalexpanded {\mult_interfaces_install_direct_parameter_set_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname set#2parameter\endcsname \expandafter\noexpand\csname setexpanded#2parameter\endcsname \expandafter\noexpand\csname let#2parameter\endcsname \expandafter\noexpand\csname reset#2parameter\endcsname}} \let\installdirectstyleandcolorhandler\installstyleandcolorhandler \unexpanded\def\installdirectcommandhandler#1#2% {\installdirectparameterhandler {#1}{#2}% \installdirectsetuphandler {#1}{#2}% \installdirectparametersethandler {#1}{#2}% \installdirectstyleandcolorhandler{#1}{#2}} \unexpanded\def\installsetuponlycommandhandler#1#2% {\installdirectparameterhandler{#1}{#2}% \installdirectsetuphandler {#1}{#2}% }% maybe \installdirectparametersethandler {#1}{#2}% % Experiment: % \installcorenamespace {one} % \installcorenamespace {two} % % \installcommandhandler \??one {one} \??one % \installcommandhandler \??two {two} \??two % % \defineone[test] \setupone[test][alpha=first] % \definetwo[test] \setuptwo[test][beta=second] % % \protect % % \def\currentone{test} % \def\currenttwo{test} % % \relateparameterhandlers {two} {test} {one} {test} % % yes:\oneparameter{alpha}\par % nop:\oneparameter{beta}\par % yes:\twoparameter{alpha}\par % yes:\twoparameter{beta}\par \unexpanded\def\relateparameterhandlers#1#2#3#4% {from} {instance} {to} {instance} {\expandafter\edef\csname\csname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}} %D Here is another experiment: \unexpanded\def\installactionhandler#1% {\normalexpanded {\mult_interfaces_install_action_handler {#1}% \expandafter\noexpand\csname current#1\endcsname \expandafter\noexpand\csname setupcurrent#1\endcsname \expandafter\noexpand\csname #1_action\endcsname}} \unexpanded\def\mult_interfaces_install_action_handler#1#2#3#4% {\unexpanded\expandafter\def\csname#1\endcsname{\dodoubleempty#4}% \unexpanded\def#4[##1][##2]% {\begingroup \ifsecondargument \edef#2{##1}% #3[##2]% \else\iffirstargument \doifassignmentelse{##1} {\let#2\empty #3[##1]}% {\edef#2{##1}}% \else \let#2\empty \fi\fi \directsetup{handler:action:#1}% \endgroup}} % First we had, in tune with the regular system variables: % % \starttyping % \unexpanded\def\installnamespace#1{\setvalue{????#1}{@@@@#1}} % \stoptyping % % The following variant is nicer and in principle faster but that gets % unnoticed unless lots of expansion happens. Also, we can use long tags % but the internal expansion will be relatively small (and unlikely more % than 4 characters). For instance, \??xx used to expand to @@xx but now % becomes for instance 123::. This is one character more but in quite some % cases we had : after such a tag in the old situation. In the new situation % we create more namespaces and don't need that : any more, so we end up % with on the average the same amount of tokens and definitely less when % we consider cases like \??xx:\c!align: which now is just \??somealign and % therefore has length 5 now (instead of 4+1+5+1=10). % % Eventualy we will have a verbose \blablanamespace and the difference between % core and regular can go ... after all, \xxxparameter can already clash between % the two prefix groups .. if users use this mechanism a lot they should use % verbose names anyway (the old two character names were mostly an optimization % as they also expanded to these characters). % todo: register namespaces at lua end for logging and reverse resolve % todo: move this to syst-ini so that we can use it real early \newcount\c_mult_interfaces_n_of_namespaces %def\v_interfaces_prefix_template{\number \c_mult_interfaces_n_of_namespaces>} \def\v_interfaces_prefix_template{\characters\c_mult_interfaces_n_of_namespaces>} \def\v_interfaces_prefix_template % consistently %03i> {\ifnum\c_mult_interfaces_n_of_namespaces<\plusten00\else\ifnum\c_mult_interfaces_n_of_namespaces<\plushundred0\fi\fi \number\c_mult_interfaces_n_of_namespaces>} \def\v_interfaces_prefix_template % consistently %03i> {\number\c_mult_interfaces_n_of_namespaces>} \unexpanded\def\installnamespace#1% for modules and users {\ifcsname ????#1\endcsname \writestatus\m!system{duplicate user namespace '#1'}\wait \else \global\advance\c_mult_interfaces_n_of_namespaces\plusone \expandafter\edef\csname ????#1\endcsname{\v_interfaces_prefix_template}% \fi} \unexpanded\def\installcorenamespace#1% {\ifcsname ??#1\endcsname \writestatus\m!system{duplicate core namespace '#1'}\wait \else \global\advance\c_mult_interfaces_n_of_namespaces\plusone \expandafter\edef\csname ??#1\endcsname{\v_interfaces_prefix_template}% \ctxcommand{registernamespace(\number\c_mult_interfaces_n_of_namespaces,"#1")}% \fi} \def\mult_interfaces_get_parameters_error#1#2#3% redefined {\ctxcommand{showassignerror("#1","#2","#3",\the\inputlineno)}% \waitonfatalerror} % We install two core namespaces here, as we want nice error messages. Maybe % we will reserve the first 9. \installcorenamespace{fontinstanceready} \installcorenamespace{fontinstancebasic} \installcorenamespace{fontinstanceclass} %D The next one is handy for local assignments. \installcorenamespace{dummy} \letvalue\??dummy\empty \def\dummyparameter #1{\csname\??dummy\ifcsname\??dummy#1\endcsname#1\fi\endcsname} \def\directdummyparameter#1{\csname\??dummy#1\endcsname} \unexpanded\def\setdummyparameter #1{\expandafter\def\csname\??dummy#1\endcsname} \unexpanded\def\letdummyparameter #1{\expandafter\let\csname\??dummy#1\endcsname} % \unexpanded\def\getdummyparameters % {\mult_interfaces_get_parameters\??dummy} \unexpanded\def\getdummyparameters[#1% {\if\noexpand#1]% \expandafter\gobbleoneargument \else \let\m_mult_interfaces_namespace\??dummy \expandafter\mult_interfaces_get_parameters_indeed \fi#1} \mult_interfaces_install_style_and_color_handler \directdummyparameter \usedummystyleandcolor \usedummystyleparameter \usedummycolorparameter % Maybe a \definecorenamespace[name][directparameter,directsetup][parent] % but we don't gain much. Actually we might just inline all definitions. % \enabletrackers[interfaces.namespaces,context.flush] % % \definenamespace % [xy] % [type=module, % comment=test module, % version=1, % name=test, % style=yes, % command=yes, % setup=list, % set=yes, % parent=xy] % % \unprotect % \getparameters % [\????xy] % [text=] % \protect % % \definetest[one] % % \starttext % % “\testparameter{text}” % % \setuptest[text=foo] % % “\testparameter{text}” % % \setuptest[one][text=bar] % % “\testparameter{text}” % % \stoptext % % This is a user (module) command: \unexpanded\def\definenamespace {\dodoubleargument\mult_interfaces_define_name_space} \def\mult_interfaces_define_name_space[#1][#2]% namespace settings {\ctxlua{interfaces.namespaces.define(\!!bs#1\!!es,\!!bs#2\!!es)}} \def\listnamespaces {\ctxlua{interfaces.namespaces.list()}} %D Helper: %D %D \starttyping %D \showparentchain{@@am}{left} %D \stoptyping \unexpanded\def\showparentchain#1#2% {\writestatus\m!system{chain: [ \mult_interfaces_show_parent_chain{#1#2}]}} \def\mult_interfaces_show_parent_chain#1% {#1 => % \ifcsname#1:\s!parent\endcsname \expandafter\mult_interfaces_show_parent_chain\csname#1:\s!parent\endcsname \fi} %D Another helper (needs to be applied): \unexpanded\def\doifelsecommandhandler#1#2% namespace name {\ifcsname#1#2:\s!parent\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifcommandhandler#1#2% namespace name {\ifcsname#1#2:\s!parent\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnotcommandhandler#1#2% namespace name {\ifcsname#1#2:\s!parent\endcsname \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \let\doifcommandhandlerelse\doifelsecommandhandler % another set of (fast) helpers (grep for usage): \def\expandnamespaceparameter#1#2#3% \??xx \getp \c!xx \c!yy {\csname#1\ifcsname#1\expandafter\expandafter\expandafter\mult_aux_expand_namespace_parameter#2#3} \def\mult_aux_expand_namespace_parameter#1#2% \cs \c!yy {#1\endcsname#1\else#2\fi\endcsname} \def\expandnamespacemacro#1#2#3% \??xx \some_edefed_cs \c!yy {\csname#1\ifcsname#1#2\endcsname#2\else#3\fi\endcsname} \def\expandnamespacevalue#1#2% \??xx {...} \c!yy == optimized \expandcheckedcsname {\csname#1\ifcsname#1\normalexpanded{\noexpand\syst_helpers_expand_checked_value{#2}}} \def\syst_helpers_expand_checked_value#1#2% {#1\endcsname#1\else#2\fi\endcsname} %D Conventions: %D %D \starttyping %D \newcount \c_class_whatever %D \newconditional \c_class_whatever %D \newconstant \c_class_whatever %D \newdimen \d_class_whatever %D \newskip \s_class_whatever %D \newmuskip \s_class_whatever %D \newbox \b_class_whatever %D \newtoks \t_class_whatever %D %D \edef\p_class_whatever{\classparameter\c!whatever} %D \edef\m_class_whatever{whatever} %D \stoptyping \protect �����������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-flt.lua��������������������������������0000644�0001750�0001750�00000020347�12134352503�024077� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['page-flt'] = { version = 1.001, comment = "companion to page-flt.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- floats -> managers.floats -- some functions are a tex/lua mix so we need a separation local insert, remove = table.insert, table.remove local find = string.find local setdimen, setcount, texbox = tex.setdimen, tex.setcount, tex.box local copy_node_list = node.copy_list local trace_floats = false trackers.register("graphics.floats", function(v) trace_floats = v end) -- name might change local report_floats = logs.reporter("structure","floats") local C, S, P, lpegmatch = lpeg.C, lpeg.S, lpeg.P, lpeg.match -- we use floatbox, floatwidth, floatheight -- text page leftpage rightpage (todo: top, bottom, margin, order) floats = floats or { } local floats = floats local noffloats, last, default, pushed = 0, nil, "text", { } local function initialize() return { text = { }, page = { }, leftpage = { }, rightpage = { }, somewhere = { }, } end local stacks = initialize() -- list location function floats.stacked(which) -- floats.thenofstacked return #stacks[which or default] end function floats.push() insert(pushed,stacks) stacks = initialize() setcount("global","savednoffloats",0) end function floats.pop() local popped = remove(pushed) if popped then for which, stack in next, stacks do for i=1,#stack do insert(popped[which],stack[i]) end end stacks = popped setcount("global","savednoffloats",#stacks[default]) end end local function setdimensions(b) local w, h, d = 0, 0, 0 if b then w, h, d = b.width, b.height, b.depth end setdimen("global","floatwidth", w) setdimen("global","floatheight", h+d) return w, h, d end local function get(stack,n,bylabel) if bylabel then for i=1,#stack do local s = stack[i] local n = string.topattern(tostring(n)) -- to be sure if find(s.data.label,n) then return s, s.box, i end end else n = n or #stack if n > 0 then local t = stack[n] if t then return t, t.box, n end end end end function floats.save(which,data) which = which or default local b = texbox.floatbox if b then local stack = stacks[which] noffloats = noffloats + 1 local w, h, d = b.width, b.height, b.depth local t = { n = noffloats, data = data or { }, box = copy_node_list(b), } texbox.floatbox = nil insert(stack,t) setcount("global","savednoffloats",#stacks[default]) if trace_floats then report_floats("%s, category %a, number %a, slot %a, width %p, height %p, depth %p","saving",which,noffloats,#stack,w,h,d) else interfaces.showmessage("floatblocks",2,noffloats) end else report_floats("ignoring empty, category %a, number %a",which,noffloats) end end function floats.resave(which) if last then which = which or default local stack = stacks[which] local b = texbox.floatbox local w, h, d = b.width, b.height, b.depth last.box = copy_node_list(b) texbox.floatbox = nil insert(stack,1,last) setcount("global","savednoffloats",#stacks[default]) if trace_floats then report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","resaving",which,noffloats,#stack,w,h,d) else interfaces.showmessage("floatblocks",2,noffloats) end else report_floats("unable to resave float") end end function floats.flush(which,n,bylabel) which = which or default local stack = stacks[which] local t, b, n = get(stack,n or 1,bylabel) if t then local w, h, d = setdimensions(b) if trace_floats then report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","flushing",which,t.n,n,w,h,d) else interfaces.showmessage("floatblocks",3,t.n) end texbox.floatbox = b last = remove(stack,n) last.box = nil setcount("global","savednoffloats",#stacks[default]) -- default? else setdimensions() end end function floats.consult(which,n) which = which or default local stack = stacks[which] local t, b, n = get(stack,n) if t then local w, h, d = setdimensions(b) if trace_floats then report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","consulting",which,t.n,n,w,h,d) end return t, b, n else if trace_floats then report_floats("nothing to consult") end setdimensions() end end function floats.collect(which,maxwidth,distance) which = which or default local stack = stacks[which] local n, m = #stack, 0 for i=1,n do local t, b, n = get(stack,i) if t then local w, h, d = setdimensions(b) if w + distance < maxwidth then m = m + 1 maxwidth = maxwidth - w - distance else break end else break end end if m == 0 then m = 1 end setcount("global","nofcollectedfloats",m) end function floats.getvariable(name,default) local value = last and last.data[name] or default return value ~= "" and value end function floats.checkedpagefloat(packed) if structures.pages.is_odd() then if #stacks.rightpage > 0 then return "rightpage" elseif #stacks.page > 0 then return "page" elseif #stacks.leftpage > 0 then if packed then return "leftpage" end end else if #stacks.leftpage > 0 then return "leftpage" elseif #stacks.page > 0 then return "page" elseif #stacks.rightpage > 0 then if packed then return "rightpage" end end end end function floats.nofstacked() return #stacks[which or default] or 0 end -- todo: check for digits ! local method = C((1-S(", :"))^1) local position = P(":") * C((1-S("*,"))^1) * (P("*") * C((1-S(","))^1))^0 local label = P(":") * C((1-S(",*: "))^0) local pattern = method * ( label * position * C("") + C("") * position * C("") + label * C("") * C("") + C("") * C("") * C("") ) + C("") * C("") * C("") * C("") -- inspect { lpegmatch(pattern,"somewhere:blabla,crap") } -- inspect { lpegmatch(pattern,"somewhere:1*2") } -- inspect { lpegmatch(pattern,"somewhere:blabla:1*2") } -- inspect { lpegmatch(pattern,"somewhere::1*2") } -- inspect { lpegmatch(pattern,"somewhere,") } -- inspect { lpegmatch(pattern,"somewhere") } -- inspect { lpegmatch(pattern,"") } function floats.analysemethod(str) -- will become a more extensive parser return lpegmatch(pattern,str or "") end -- interface local context = context local setvalue = context.setvalue commands.flushfloat = floats.flush commands.savefloat = floats.save commands.resavefloat = floats.resave commands.pushfloat = floats.push commands.popfloat = floats.pop commands.consultfloat = floats.consult commands.collectfloat = floats.collect function commands.getfloatvariable (...) local v = floats.getvariable(...) if v then context(v) end end function commands.checkedpagefloat (...) local v = floats.checkedpagefloat(...) if v then context(v) end end function commands.nofstackedfloats (...) context(floats.nofstacked(...)) end function commands.doifelsesavedfloat(...) commands.doifelse(floats.nofstacked(...)>0) end function commands.analysefloatmethod(str) -- currently only one method local method, label, row, column = floats.analysemethod(str) setvalue("floatmethod",method or "") setvalue("floatlabel", label or "") setvalue("floatrow", row or "") setvalue("floatcolumn",column or "") end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/type-lua.mkiv�������������������������������0000644�0001750�0001750�00000010576�11754241457�024344� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=type-lua, %D version=2009.11.27, %D title=\CONTEXT\ Typescript Macros, %D subtitle=\MKIV\ goodies, %D author=Hans Hagen \& Wolfgang Schuster, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection [luatex] \starttypescript [specserif] [\s!all] [\s!name] \definefontsynonym [\s!Serif] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SerifSlanted] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [spec:\cleanfontname\typescripttwo-\s!bold -\s!normal] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SerifCaps] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [specsans] [\s!all] [\s!name] \definefontsynonym [\s!Sans] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SansSlanted] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!spec:\cleanfontname\typescripttwo-\s!bold -\s!normal] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SansBoldSlanted] [\s!spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default] \definefontsynonym [\s!SansCaps] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [specmono] [\s!all] [\s!name] \definefontsynonym [\s!Mono] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!default] \definefontsynonym [\s!MonoItalic] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default] \definefontsynonym [\s!MonoSlanted] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default] \definefontsynonym [\s!MonoBold] [\s!spec:\cleanfontname\typescripttwo-\s!bold -\s!normal] [\s!features=\s!default] \definefontsynonym [\s!MonoBoldItalic] [\s!spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default] \definefontsynonym [\s!MonoBoldSlanted] [\s!spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default] \definefontsynonym [\s!MonoCaps] [\s!spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!smallcaps] \stoptypescript % we could combine these in the normal serif settings \starttypescript [specserif] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!rm] [\s!default] \stoptypescript \starttypescript [specsans] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!ss] [\s!default] \stoptypescript \starttypescript [specmono] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!tt] [\s!default] \stoptypescript \starttypescript [specserif] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!rm] [\s!default] \stoptypescript \starttypescript [specsans] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!ss] [\s!default] \stoptypescript \starttypescript [specmono] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!tt] [\s!default] \stoptypescript \stoptypescriptcollection \endinput ����������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/hand-ini.mkiv�������������������������������0000644�0001750�0001750�00000006344�11754241457�024271� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=hand-ini, %D version=2008.02.12, %D title=\CONTEXT\ Handling Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Handling is implemented differently in \MKIV. Maybe I'll cook up %D some compatibility hack. % \definefontfeature[demo][default][mode=node,expansion=quality] % \definefontfeature[demo][default][mode=node,protrusion=pure] % experimental setup: % % \showframe \setupalign[hanging] \enabletrackers[fonts.protrusion] % % \definefontfeature[default] [default][mode=node,script=latn] % %definefontfeature[whatever][default][mode=node,lfbd=yes,rtbd=yes,script=latn] % \definefontfeature[whatever][default][mode=node,protrusion=quality] % \definefontfeature[whocares][default][mode=node,protrusion=yes,opbd=yes,script=latn] % left|right|yes % % \definedfont[fxlbi.otf*default] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par % \definedfont[fxlbi.otf*whatever] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par % \definedfont[fxlbi.otf*whocares] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par % % %definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn,featurefile=texgyrepagella-regularxx.fea] % \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn] % % \definedfont[texgyrepagella-regularxx.otf*whocares] \input tufte \unprotect %D New stuff. \unexpanded\def\setupfontexpansion {\dodoubleargument\font_expansion_setup } \unexpanded\def\setupfontprotrusion{\dodoubleargument\font_protrusion_setup} \def\font_expansion_setup [#1][#2]{\ctxcommand{setupfontexpansion ("#1","#2")}} \def\font_protrusion_setup[#1][#2]{\ctxcommand{setupfontprotrusion("#1","#2")}} % \setupfontprotrusion[quality-upright][vector=quality] % \setupfontprotrusion[quality-slanted][vector=quality,right=1.5] \let\pdfadjustspacing\relax \newcount\pdfadjustspacing % a little bit protection \let\pdfprotrudechars\relax \newcount\pdfprotrudechars % a little bit protection \def\font_expansion_enable {\normalpdfadjustspacing\plustwo } \def\font_expansion_disable {\normalpdfadjustspacing\zerocount} \def\font_protruding_enable {\normalpdfprotrudechars\plustwo } \def\font_protruding_disable{\normalpdfprotrudechars\zerocount} \appendtoks \font_expansion_disable \to \everyforgetall % Here or not here? \appendtoks \font_protruding_disable \to \everyforgetall % Here or not here? % \def\fonthandlingerror{\writestatus\m!fonts{font handling is replaced by features in mkiv}} % % \let\fonthandling\empty % % \unexpanded\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen % \unexpanded\def\definefonthandling {\dotripleempty\dodefinefonthandling} % \unexpanded\def\setupfonthandling {\dodoubleempty\dosetupfonthandling } % \def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror} % \def\dosetupfonthandling [#1][#2]{\fonthandlingerror} % \def\usehandling [#1]{\fonthandlingerror} \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mbk.mkvi�������������������������������0000644�0001750�0001750�00000017734�12130411274�024253� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-mbk, % was part of page-mis.mkiv / 2008.11.17 %D version=2011.11.23, % was part of page-flt.tex / 2000.10.20 %D title=\CONTEXT\ Page Macros, %D subtitle=Margin Floats, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Margin Floats} \unprotect %D This is an old mechanism that is quite independent of other %D floats. There is for instance no save/restore used here. When %D there is need (and demand) we can use the float cache and then %D flush them in the text when they are left over. On the other %D hand, margin float are somewhat manual so it does not make too %D much sense to complicate the code. As an alternative users can %D fall back on margin texts: they do stack but don't float. %D %D \starttyping %D \dorecurse{9} { %D \placefigure[margin]{#1}{} %D \input ward %D } %D \page \null % will flush them %D \stoptyping % status=start: in margin % status=stop : in text % % todo: flush margin floats at end of text % todo: separate boxes for left and right \installcorenamespace{marginblock} \installcorenamespace{marginblocklocation} \installcommandhandler \??marginblock {marginblock} \??marginblock \let\setupmarginblocks\setupmarginblock \newconditional\c_page_margin_blocks_enabled % not really needed as we can check each time \newconditional\c_page_margin_blocks_present \newbox \b_page_margin_blocks \newbox \b_page_margin_blocks_prepared \appendtoks \doifelse{\rootmarginblockparameter\c!state}\v!start \settrue\setfalse\c_page_margin_blocks_enabled \to \everysetupmarginblock \setupmarginblocks [\c!state=\v!start, \c!location=\v!inmargin, \c!width=\rightmarginwidth, %\c!style=, %\c!color=, %\c!align=, %\c!left=, %\c!right=, %\c!top=, %\c!before=, %\c!after=, \c!inbetween=\blank, \c!bottom=\vfill] \unexpanded\def\startmarginblock {\dosingleempty\page_margin_blocks_start_block} \unexpanded\def\stopmarginblock {\page_margin_blocks_stop_block} \def\page_margin_blocks_start_block[#tag]% {\begingroup \edef\currentmarginblock{#tag}% \doifelse{\marginblockparameter\c!state}\v!start \page_margin_blocks_start_block_yes \page_margin_blocks_start_block_nop} \def\page_margin_blocks_stop_block {\doifelse{\marginblockparameter\c!state}\v!start \page_margin_blocks_stop_block_yes \page_margin_blocks_stop_block_nop \endgroup} \def\page_margin_blocks_start_block_yes % 2 maal \vbox ivm \unvbox elders {\showmessage\m!layouts4\empty \global\settrue\c_page_margin_blocks_present \global\setbox\b_page_margin_blocks\vtop\bgroup\vbox\bgroup \hsize\marginblockparameter\c!width \ifvoid\b_page_margin_blocks\else \unvbox\b_page_margin_blocks \marginblockparameter\c!inbetween \fi \setupalign[\marginblockparameter\c!align]% \usemarginblockstyleandcolor\c!style\c!color \begstrut \ignorespaces} \def\page_margin_blocks_stop_block_yes {\removeunwantedspaces \endstrut \egroup \egroup} \def\page_margin_blocks_start_block_nop {\showmessage\m!layouts5\empty \marginblockparameter\c!before \bgroup \usemarginblockstyleandcolor\c!style\c!color} \def\page_margin_blocks_stop_block_nop {\egroup \marginblockparameter\c!after} \def\page_margin_blocks_reshape {\ifdim\ht\b_page_margin_blocks_prepared>\zeropoint \beginofshapebox \unvbox\b_page_margin_blocks_prepared \endofshapebox \reshapebox {\box\shapebox}% \setbox\b_page_margin_blocks_prepared\vbox to \textheight {\marginblockparameter\c!top \flushshapebox \marginblockparameter\c!bottom}% \fi} \unexpanded\def\checkmarginblocks {\ifvoid\b_page_margin_blocks \global\setfalse\c_page_margin_blocks_present \else \page_margin_blocks_check_indeed \fi} \def\page_margin_blocks_check_indeed {\ifcsname\??marginblocklocation\marginblockparameter\c!location\endcsname \page_margin_blocks_prepare_box \csname\??marginblocklocation\marginblockparameter\c!location\endcsname \else \global\setbox\b_page_margin_blocks\emptybox \global\setfalse\c_page_margin_blocks_present \fi} \def\page_margin_blocks_prepare_box {\setbox\b_page_margin_blocks_prepared\vbox {\forgetall \splittopskip\topskip \ifvoid\b_page_margin_blocks\else \ifdim\ht\b_page_margin_blocks>\textheight \vsplit\b_page_margin_blocks to \textheight \else \unvbox\b_page_margin_blocks \fi \fi}% \page_margin_blocks_reshape \setbox\b_page_margin_blocks_prepared\vbox {\marginblockparameter\c!before \box\b_page_margin_blocks_prepared \marginblockparameter\c!after}} % inner outer \setvalue{\??marginblocklocation\v!left }{\page_margin_blocks_set_l_box} \setvalue{\??marginblocklocation\v!right }{\page_margin_blocks_set_r_box} \setvalue{\??marginblocklocation\v!inmargin}{\doifbothsidesoverruled \page_margin_blocks_set_r_box \page_margin_blocks_set_r_box \page_margin_blocks_set_l_box} \setvalue{\??marginblocklocation\v!middle }{\doifbothsidesoverruled \page_margin_blocks_set_r_box \page_margin_blocks_set_l_box \page_margin_blocks_set_r_box} \unexpanded\def\page_margin_blocks_place_r_yes {\setbox\b_page_margin_blocks_prepared\hbox to \rightmarginwidth {\marginblockparameter\c!left \box\b_page_margin_blocks_prepared \marginblockparameter\c!right}% \vsmashbox\b_page_margin_blocks_prepared \box\b_page_margin_blocks_prepared} \unexpanded\def\page_margin_blocks_place_l_yes {\setbox\b_page_margin_blocks_prepared\hbox to \leftmarginwidth {\marginblockparameter\c!right \box\b_page_margin_blocks_prepared \marginblockparameter\c!left}% \vsmashbox\b_page_margin_blocks_prepared \box\b_page_margin_blocks_prepared} \unexpanded\def\page_margin_blocks_place_r_nop{\hskip\rightmarginwidth} \unexpanded\def\page_margin_blocks_place_l_nop{\hskip\leftmarginwidth} \let\placerightmarginblock\page_margin_blocks_place_r_nop \let\placeleftmarginblock \page_margin_blocks_place_l_nop \def\page_margin_blocks_set_r_box{\let\placerightmarginblock\page_margin_blocks_place_r_yes} \def\page_margin_blocks_set_l_box{\let\placeleftmarginblock \page_margin_blocks_place_l_yes} % margin floats (keyword 'margin' in option list) \unexpanded\def\page_margin_blocks_process_float {\doifelse{\marginblockparameter\c!state}\v!start \page_margin_blocks_process_float_yes \page_margin_blocks_process_float_nop} \def\page_margin_blocks_process_float_yes {\global\setbox\b_page_margin_blocks\vbox {\hsize\marginblockparameter\c!width \unvcopy\b_page_margin_blocks \ifvoid\b_page_margin_blocks\else \expandafter\marginblockparameter\expandafter\c!inbetween \fi \box\floatbox \filbreak}% \ifdim\ht\b_page_margin_blocks>\textheight % page_floats_report_saved % no saving done anyway \else \page_floats_report_total \fi} \def\page_margin_blocks_process_float_nop {\handlefloatmethod\v!here} \def\page_margin_blocks_float_before {\ifconditional\c_page_margin_blocks_enabled \doifinset\v!margin\floatlocation\endgraf \fi} \def\page_margin_blocks_float_set_hsize {\ifconditional\c_page_margin_blocks_enabled \doifinset\v!margin\floatlocation{\hsize\rootmarginblockparameter\c!width}% \fi} \appendtoks \ifvoid\b_page_margin_blocks \else \writestatus\m!layouts{beware: there are left-over margin floats!}% \fi \to \everystoptext \unexpanded\def\flushmarginblocks {\page_otr_command_flush_margin_blocks} \protect \endinput ������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-xml.mkiv���������������������������0000644�0001750�0001750�00000002555�11754241457�025105� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=buff-imp-xml, %D version=2010.10.19, %D title=\CONTEXT\ Visualizer Macros, %D subtitle=\XML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{buff-imp-xml.lua}{1.001} \unprotect \definestartstop [XmlSnippet] [DefaultSnippet] \definestartstop [XmlSnippetName] [\c!color=darkblue, \c!style=boldface] \definestartstop [XmlSnippetKey] [\c!color=darkgreen, \c!style=boldface] \definestartstop [XmlSnippetBoundary] [\c!color=darkblue, \c!style=boldface] \definestartstop [XmlSnippetEntity] [\c!color=darkred, \c!style=boldface] \definestartstop [XmlSnippetString] [\c!color=darkblue, \c!style=boldface] \definestartstop [XmlSnippetEqual] [\c!color=darkblue, \c!style=boldface] \definestartstop [XmlSnippetComment] [\c!color=darkyellow, \c!style=boldface] \definestartstop [XmlSnippetCdata] [\c!color=darkyellow, \c!style=boldface] \definestartstop [XmlSnippetInstruction] [\c!color=darkyellow, \c!style=boldface] \definetyping [XML] [\c!option=xml] \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ini.lua��������������������������������0000644�0001750�0001750�00000042753�12161703335�024116� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['math-ini'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- if needed we can use the info here to set up xetex definition files -- the "8000 hackery influences direct characters (utf) as indirect \char's -- -- isn't characters.data loaded already ... shortcut it here -- -- replace code 7 by 0 as we don't use it anyway (chars with code 7 will adapt to -- to the fam when set ... we use other means .. ok, we could use it for spacing but -- then we also have to set the other characters (only a subset done now) local formatters, find = string.formatters, string.find local utfchar, utfbyte = utf.char, utf.byte local setmathcode, setdelcode = tex.setmathcode, tex.setdelcode local settexattribute = tex.setattribute local floor = math.floor local context = context local contextsprint = context.sprint local contextfprint = context.fprint -- a bit inefficient local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) local report_math = logs.reporter("mathematics","initializing") mathematics = mathematics or { } local mathematics = mathematics mathematics.extrabase = 0xFE000 -- here we push some virtuals mathematics.privatebase = 0xFF000 -- here we push the ex local unsetvalue = attributes.unsetvalue local allocate = utilities.storage.allocate local chardata = characters.data local families = allocate { mr = 0, mb = 1, } --- to be checked .. afew defaults in char-def that should be alpha local classes = allocate { ord = 0, -- mathordcomm mathord op = 1, -- mathopcomm mathop bin = 2, -- mathbincomm mathbin rel = 3, -- mathrelcomm mathrel open = 4, -- mathopencomm mathopen middle = 4, close = 5, -- mathclosecomm mathclose punct = 6, -- mathpunctcomm mathpunct alpha = 7, -- mathalphacomm firstofoneargument accent = 8, -- class 0 radical = 9, xaccent = 10, -- class 3 topaccent = 11, -- class 0 botaccent = 12, -- class 0 under = 13, over = 14, delimiter = 15, inner = 0, -- mathinnercomm mathinner nothing = 0, -- mathnothingcomm firstofoneargument choice = 0, -- mathchoicecomm @@mathchoicecomm box = 0, -- mathboxcomm @@mathboxcomm limop = 1, -- mathlimopcomm @@mathlimopcomm nolop = 1, -- mathnolopcomm @@mathnolopcomm -- ordinary = 0, -- ord alphabetic = 7, -- alpha unknown = 0, -- nothing default = 0, -- nothing punctuation = 6, -- punct normal = 0, -- nothing opening = 4, -- open closing = 5, -- close binary = 2, -- bin relation = 3, -- rel fence = 0, -- unknown diacritic = 8, -- accent large = 1, -- op variable = 7, -- alphabetic number = 7, -- alphabetic } local open_class = 4 local middle_class = 4 local close_class = 5 local accents = allocate { accent = true, -- some can be both topaccent = true, [11] = true, botaccent = true, [12] = true, under = true, [13] = true, over = true, [14] = true, unknown = false, } local codes = allocate { ordinary = 0, [0] = "ordinary", largeoperator = 1, [1] = "largeoperator", binaryoperator = 2, [2] = "binaryoperator", relation = 3, [3] = "relation", openingsymbol = 4, [4] = "openingsymbol", closingsymbol = 5, [5] = "closingsymbol", punctuation = 6, [6] = "punctuation", variable = 7, [7] = "variable", } local extensibles = allocate { unknown = 0, l = 1, left = 1, r = 2, right = 2, h = 3, horizontal = 3,-- lr or rl u = 5, up = 4, d = 5, down = 5, v = 6, vertical = 6,-- ud or du m = 7, mixed = 7, } table.setmetatableindex(extensibles,function(t,k) t[k] = 0 return 0 end) mathematics.extensibles = extensibles mathematics.classes = classes mathematics.codes = codes -----------.accents = codes mathematics.families = families -- there will be proper functions soon (and we will move this code in-line) -- no need for " in class and family (saves space) local function mathchar(class,family,slot) return formatters['\\Umathchar "%X "%X "%X '](class,family,slot) end local function mathaccent(class,family,slot) return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class end local function delimiter(class,family,slot) return formatters['\\Udelimiter "%X "%X "%X '](class,family,slot) end local function radical(family,slot) return formatters['\\Uradical "%X "%X '](family,slot) end local function mathchardef(name,class,family,slot) return formatters['\\Umathchardef\\%s "%X "%X "%X '](name,class,family,slot) end local function mathcode(target,class,family,slot) return formatters['\\Umathcode%s="%X "%X "%X '](target,class,family,slot) end local function mathtopaccent(class,family,slot) return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class end local function mathbotaccent(class,family,slot) return formatters['\\Umathaccent bottom "%X "%X "%X '](0,family,slot) -- no class end local function mathtopdelimiter(class,family,slot) return formatters['\\Udelimiterover "%X "%X '](family,slot) -- no class end local function mathbotdelimiter(class,family,slot) return formatters['\\Udelimiterunder "%X "%X '](family,slot) -- no class end local escapes = characters.filters.utf.private.escapes -- not that many so no need to reuse tables local setmathcharacter = function(class,family,slot,unicode,mset,dset) if mset and codes[class] then -- regular codes < 7 setmathcode("global",slot,{class,family,unicode}) mset = false end if dset and class == open_class or class == close_class or class == middle_class then setdelcode("global",slot,{family,unicode,0,0}) dset = false end return mset, dset end local setmathsymbol = function(name,class,family,slot) -- hex is nicer for tracing if class == classes.accent then contextsprint(formatters[ [[\ugdef\%s{\Umathaccent 0 "%X "%X }]] ](name,family,slot)) elseif class == classes.topaccent then contextsprint(formatters[ [[\ugdef\%s{\Umathaccent 0 "%X "%X }]] ](name,family,slot)) elseif class == classes.botaccent then contextsprint(formatters[ [[\ugdef\%s{\Umathbotaccent 0 "%X "%X }]] ](name,family,slot)) elseif class == classes.over then contextsprint(formatters[ [[\ugdef\%s{\Udelimiterover "%X "%X }]] ](name,family,slot)) elseif class == classes.under then contextsprint(formatters[ [[\ugdef\%s{\Udelimiterunder "%X "%X }]] ](name,family,slot)) elseif class == open_class or class == close_class or class == middle_class then setdelcode("global",slot,{family,slot,0,0}) contextsprint(formatters[ [[\ugdef\%s{\Udelimiter "%X "%X "%X }]] ](name,class,family,slot)) elseif class == classes.delimiter then setdelcode("global",slot,{family,slot,0,0}) contextsprint(formatters[ [[\ugdef\%s{\Udelimiter 0 "%X "%X }]] ](name,family,slot)) elseif class == classes.radical then contextsprint(formatters[ [[\ugdef\%s{\Uradical "%X "%X }]] ](name,family,slot)) else -- beware, open/close and other specials should not end up here -- contextsprint(formatters[ [[\ugdef\%s{\Umathchar "%X "%X "%X }]],name,class,family,slot)) contextsprint(formatters[ [[\Umathchardef\%s "%X "%X "%X ]] ](name,class,family,slot)) end end local function report(class,family,unicode,name) local nametype = type(name) if nametype == "string" then report_math("class name %a, class %a, family %a, char %C, name %a",classname,class,family,unicode,name) elseif nametype == "number" then report_math("class name %a, class %a, family %a, char %C, number %U",classname,class,family,unicode,name) else report_math("class name %a, class %a, family %a, char %C", classname,class,family,unicode) end end -- there will be a combined \(math)chardef (tracker) function mathematics.define(family) family = family or 0 family = families[family] or family local data = characters.data for unicode, character in next, data do local symbol = character.mathsymbol local mset, dset = true, true if symbol then local other = data[symbol] local class = other.mathclass if class then class = classes[class] or class -- no real checks needed if trace_defining then report(class,family,unicode,symbol) end mset, dset = setmathcharacter(class,family,unicode,symbol,mset,dset) end local spec = other.mathspec if spec then for i, m in next, spec do local class = m.class if class then class = classes[class] or class -- no real checks needed mset, dset = setmathcharacter(class,family,unicode,symbol,mset,dset) end end end end local mathclass = character.mathclass local mathspec = character.mathspec if mathspec then for i, m in next, mathspec do local name = m.name local class = m.class if not class then class = mathclass elseif not mathclass then mathclass = class end if class then class = classes[class] or class -- no real checks needed if name then if trace_defining then report(class,family,unicode,name) end setmathsymbol(name,class,family,unicode) else name = class == classes.variable or class == classes.number and character.adobename if name and trace_defining then report(class,family,unicode,name) end end mset, dset = setmathcharacter(class,family,unicode,m.unicode or unicode,mset,dset) -- see solidus end end end if mathclass then local name = character.mathname local class = classes[mathclass] or mathclass -- no real checks needed if name == false then if trace_defining then report(class,family,unicode,name) end mset, dset = setmathcharacter(class,family,unicode,mset,dset) else name = name or character.contextname if name then if trace_defining then report(class,family,unicode,name) end setmathsymbol(name,class,family,unicode) else if trace_defining then report(class,family,unicode,character.adobename) end end mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) end end end end -- needed for mathml analysis -- we could cache local function utfmathclass(chr, default) local cd = chardata[utfbyte(chr)] return cd and cd.mathclass or default or "unknown" end local function utfmathaccent(chr,default,asked) local cd = chardata[utfbyte(chr)] if not cd then return default or false end if asked then local mc = cd.mathclass if mc and mc == asked then return true end local ms = cd.mathspec if ms then for i=1,#ms do local msi = ms[i] local mc = msi.class if mc and mc == asked then return true end end end else local mc = cd.mathclass if mc then return accents[mc] or default or false end local ms = cd.mathspec if ms then for i=1,#ms do local msi = ms[i] local mc = msi.class if mc then return accents[mc] or default or false end end end end return default or false end local function utfmathstretch(chr, default) -- "h", "v", "b", "" local cd = chardata[utfbyte(chr)] return cd and cd.mathstretch or default or "" end local function utfmathcommand(chr,default,asked) -- local cd = chardata[utfbyte(chr)] -- local cmd = cd and cd.mathname -- return cmd or default or "" local cd = chardata[utfbyte(chr)] if not cd then return default or "" end if asked then local mn = cd.mathname local mc = cd.mathclass if mn and mc and mc == asked then return mn end local ms = cd.mathspec if ms then for i=1,#ms do local msi = ms[i] local mn = msi.name if mn and msi.class == asked then return mn end end end else local mn = cd.mathname if mn then return mn end local ms = cd.mathspec if ms then for i=1,#ms do local msi = ms[i] local mn = msi.name if mn then return mn end end end end return default or "" end local function utfmathfiller(chr, default) local cd = chardata[utfbyte(chr)] local cmd = cd and (cd.mathfiller or cd.mathname) return cmd or default or "" end mathematics.utfmathclass = utfmathclass mathematics.utfmathstretch = utfmathstretch mathematics.utfmathcommand = utfmathcommand mathematics.utfmathfiller = utfmathfiller -- interfaced function commands.utfmathclass (...) context(utfmathclass (...)) end function commands.utfmathstretch(...) context(utfmathstretch(...)) end function commands.utfmathcommand(...) context(utfmathcommand(...)) end function commands.utfmathfiller (...) context(utfmathfiller (...)) end function commands.doifelseutfmathaccent(chr,asked) commands.doifelse(utfmathaccent(chr,nil,asked)) end -- helpers function mathematics.big(tfmdata,unicode,n) local t = tfmdata.characters local c = t[unicode] if c then local vv = c.vert_variants or c.next and t[c.next].vert_variants if vv then local vvn = vv[n] return vvn and vvn.glyph or vv[#vv].glyph or unicode else local next = c.next while next do if n <= 1 then return next else n = n - 1 local tn = t[next].next if tn then next = tn else return next end end end end end return unicode end -- experimental -- local categories = { } -- indexed + hashed -- -- local a_mathcategory = attributes.private("mathcategory") -- -- local function registercategory(category,tag,data) -- always same data for tag -- local c = categories[category] -- if not c then -- c = { } -- categories[category] = c -- end -- local n = c[tag] -- if not n then -- n = #c + 1 -- c[n] = data -- n = n * 1000 + category -- c[tag] = n -- end -- return n -- end -- -- function mathematics.getcategory(n) -- local category = n % 1000 -- return category, categories[category][floor(n/1000)] -- end -- -- mathematics.registercategory = registercategory -- -- function commands.taggedmathfunction(tag,label) -- if label then -- settexattribute(a_mathcategory,registercategory(1,tag,tag)) -- context.mathlabeltext(tag) -- else -- settexattribute(a_mathcategory,1) -- context(tag) -- end -- end local categories = { } mathematics.categories = categories local a_mathcategory = attributes.private("mathcategory") local functions = storage.allocate() local noffunctions = 1000 -- offset categories.functions = functions function commands.taggedmathfunction(tag,label,apply) local delta = apply and 1000 or 0 if label then local n = functions[tag] if not n then noffunctions = noffunctions + 1 functions[noffunctions] = tag functions[tag] = noffunctions settexattribute(a_mathcategory,noffunctions + delta) else settexattribute(a_mathcategory,n + delta) end context.mathlabeltext(tag) else settexattribute(a_mathcategory,1000 + delta) context(tag) end end -- local list function commands.resetmathattributes() if not list then list = { } for k, v in next, attributes.numbers do if find(k,"^math") then list[#list+1] = v end end end for i=1,#list do settexattribute(list[i],unsetvalue) end end ���������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-ini.lua��������������������������������0000644�0001750�0001750�00000002603�12130411274�024117� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['symb-ini'] = { version = 1.001, comment = "companion to symb-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local variables = interfaces.variables fonts = fonts or { } -- brrrr local symbols = fonts.symbols or { } fonts.symbols = symbols local report_symbols = logs.reporter ("fonts","symbols") local status_symbols = logs.messenger("fonts","symbols") local patterns = { "symb-imp-%s.mkiv", "symb-imp-%s.tex", "symb-%s.mkiv", "symb-%s.tex" } local listitem = utilities.parsers.listitem local function action(name,foundname) -- context.startnointerference() context.startreadingfile() context.input(foundname) status_symbols("library %a loaded",name) context.stopreadingfile() -- context.stopnointerference() end local function failure(name) report_symbols("library %a is unknown",name) end function symbols.uselibrary(name) if name ~= variables.reset then for name in listitem(name) do commands.uselibrary { name = name, patterns = patterns, action = action, failure = failure, onlyonce = true, } end end end commands.usesymbols = symbols.uselibrary �����������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-cs.mkiv��������������������������������0000644�0001750�0001750�00000001020�11754241457�024132� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=cont-cs, %D version=1998.12.02, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Czech Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {czech} \def\defaultlanguagetag{cs} \input context.mkiv \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-ver.mkiv�������������������������������0000644�0001750�0001750�00000171244�12132111075�024303� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=spac-ver, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Vertical, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Vertical} \unprotect \registerctxluafile{spac-ver}{1.001} % todo: itemize : intro ... only when there is one or two lines preceding and then % keep these together i.e. \blank[intro] % Isn't it about time to get rid of topskip i.e. make it equivalent to % \openstrutheight so that we can remove delta code. % % There might be more namespace protection. %D There are two ways to influence the interline spacing. The %D most general and often most consistent way is using %D %D \showsetup{setupinterlinespace} %D %D For instance %D %D \starttyping %D \setupinterlinespace[line=2.8ex] %D \stoptyping %D %D This setting adapts itself to the bodyfontsize, while for %D instance saying %D %D \starttyping %D \setupinterlinespace[line=12pt] %D \stoptyping %D %D sets things fixed for all sizes, which is definitely not %D what we want. Therefore one can also say: %D %D \starttyping %D \definebodyfontenvironment[9pt][interlinespace=11pt] %D \stoptyping %D %D One can still use \type{\setupinterlinespace} (without %D arguments) to set the interline space according to the %D current font, e.g. a \type{\bfa}. % will be cleaned up but it will stay messy because we accept so % many variants \newif\iflocalinterlinespace \newskip\s_spac_vspacing_temp \s_spac_vspacing_temp\bigskipamount \def\skipfactor {.75} \def\skipgluefactor{.25} \def\normalskipamount {\openlineheight \ifgridsnapping \else \ifblankflexible \s!plus \skipgluefactor\openlineheight \s!minus\skipgluefactor\openlineheight \fi \fi \relax} \ifdefined\bodyfontinterlinespace \else \let\bodyfontinterlinespace\empty \fi \unexpanded\def\presetnormallineheight % each bodyfont {\edef\normallineheight{\interlinespaceparameter\c!line}% \iflocalinterlinespace \else \edef\m_spac_normallineheight{\bodyfontinterlinespace}% \ifx\m_spac_normallineheight\empty \else \let\normallineheight\m_spac_normallineheight \fi \fi} \unexpanded\def\setupspecifiedinterlinespace[#1]% {\setupcurrentinterlinespace[#1]% \spac_linespacing_setup_specified_interline_space} \def\spac_linespacing_setup_specified_interline_space {\edef\strutheightfactor {\interlinespaceparameter\c!height }% \edef\strutdepthfactor {\interlinespaceparameter\c!depth }% \edef\minimumstrutheight {\interlinespaceparameter\c!minheight}% \edef\minimumstrutdepth {\interlinespaceparameter\c!mindepth }% \edef\minimumlinedistance {\interlinespaceparameter\c!distance }% \edef\normallineheight {\interlinespaceparameter\c!line }% \edef\topskipfactor {\interlinespaceparameter\c!top }% \edef\maxdepthfactor {\interlinespaceparameter\c!bottom }% \edef\m_spac_vertical_baseline_stretch_factor{\interlinespaceparameter\c!stretch }% \edef\m_spac_vertical_baseline_shrink_factor {\interlinespaceparameter\c!shrink }% % often topskip does more bad than good, so: \ifx\topskipfactor\v!height \let\topskipfactor\strutheightfactor \fi \setfontparameters % redundant, can be \setstrut, test first \updateraggedskips} % yes indeed \installcorenamespace{interlinespacerelative} \let\setrelativeinterlinespace \relax % used elsewhere \let\currentrelativeinterlinespace\empty \setvalue{\??interlinespacerelative\v!on }{\oninterlineskip} \setvalue{\??interlinespacerelative\v!off }{\offinterlineskip} \setvalue{\??interlinespacerelative\v!reset}{\let\currentrelativeinterlinespace\empty \let\setrelativeinterlinespace\relax \setfontparameters} \setvalue{\??interlinespacerelative\v!auto }{\let\setrelativeinterlinespace\spac_linespacing_set_relative_interlinespace} \def\spac_linespacing_set_specified_relative_interlinespace#1% fragile? {\doifdimenstringelse{#1} {\setupspecifiedinterlinespace[\c!line=#1]} {\assignvalue{#1}\currentrelativeinterlinespace{1.00}{1.25}{1.50}% \spacing\currentrelativeinterlinespace}} \unexpanded\def\setuprelativeinterlinespace[#1]% {\processcommalist[#1]\spac_linespacing_setup_relative_interlinespace} \def\spac_linespacing_setup_relative_interlinespace#1% {\ifcsname\??interlinespacerelative#1\endcsname \csname\??interlinespacerelative#1\endcsname \else \spac_linespacing_set_specified_relative_interlinespace{#1}% \fi} \def\spac_linespacing_set_relative_interlinespace {\ifx\currentrelativeinterlinespace\empty\else \spacing\currentrelativeinterlinespace \fi} \newtoks\everysetupglobalinterlinespace \newtoks\everysetuplocalinterlinespace \newconditional\interlinespaceisset \installcorenamespace{interlinespace} \installcommandhandler \??interlinespace {interlinespace} \??interlinespace \unexpanded\def\setupinterlinespace {\dodoubleempty\spac_linespacing_setup} \def\spac_linespacing_setup[#1][#2]% {\settrue\interlinespaceisset % reset has to be done when needed \ifsecondargument \setup_interlinespace[#1][#2]% \else\iffirstargument \ifcsname\namedinterlinespacehash{#1}\s!parent\endcsname \edef\currentinterlinespace{#1}% \spac_linespacing_setup_specified_interline_space %\dosetupspecifiedinterlinespaceindeed \else \spac_linespacing_setup_specified_or_relative[#1]% \fi \else \let\currentinterlinespace\empty \spac_linespacing_synchronize_local \fi\fi} \def\spac_linespacing_setup_specified_or_relative[#1]% {\doifassignmentelse{#1}\setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]% \the\iflocalinterlinespace\everysetuplocalinterlinespace\else\everysetupglobalinterlinespace\fi} \def\spac_linespacing_synchronize_local % adapts to the font {\localinterlinespacetrue \setfontparameters \updateraggedskips % funny one here \the\everysetuplocalinterlinespace \localinterlinespacefalse} \unexpanded\def\dosetupcheckedinterlinespace#1% often a chain {\edef\p_spac_checked_interlinespace{#1}% \ifx\p_spac_checked_interlinespace\empty \spac_linespacing_synchronize_local \else\ifcsname\namedinterlinespacehash\p_spac_checked_interlinespace\s!parent\endcsname % we could have a \s!check \pushmacro\currentinterlinespace \let\currentinterlinespace\p_spac_checked_interlinespace \spac_linespacing_setup_specified_interline_space % \dosetupspecifiedinterlinespaceindeed \iflocalinterlinespace \the\everysetuplocalinterlinespace \else \localinterlinespacetrue \the\everysetuplocalinterlinespace \localinterlinespacefalse \fi \popmacro\currentinterlinespace \else \normalexpanded{\noexpand\doifassignmentelse{\p_spac_checked_interlinespace}% \setupspecifiedinterlinespace\setuprelativeinterlinespace[\p_spac_checked_interlinespace]}% \iflocalinterlinespace \the\everysetuplocalinterlinespace \else \localinterlinespacetrue \the\everysetuplocalinterlinespace \localinterlinespacefalse \fi \fi\fi} \unexpanded\def\setuplocalinterlinespace[#1]% {\localinterlinespacetrue \pushmacro\currentinterlinespace \setupinterlinespace[#1]% \popmacro\currentinterlinespace \localinterlinespacefalse} \let\switchtointerlinespace\setuplocalinterlinespace %D Helpers \newskip \s_spac_lastskip \newdimen\d_spac_prevdepth \newcount\c_spac_spacefactor \unexpanded\def\removelastskip {\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi} \def\doifoutervmode {\ifvmode \ifinner \doubleexpandafter\gobbleoneargument \else \doubleexpandafter\firstofoneargument \fi \else \expandafter\gobbleoneargument \fi} \unexpanded\def\dosomebreak#1% {\doifoutervmode {\s_spac_lastskip\lastskip \removelastskip #1\relax \ifdim\s_spac_lastskip=\zeropoint % avoid interference with footnotes \else \vskip\s_spac_lastskip \fi}} \unexpanded\def\packed {\nointerlineskip} \unexpanded\def\godown[#1]% {\relax \ifhmode\endgraf\fi \ifvmode\nointerlineskip\vskip#1\relax\fi} \unexpanded\def\smallskip{\vskip\smallskipamount} \unexpanded\def\medskip {\vskip\medskipamount} \unexpanded\def\bigskip {\vskip\bigskipamount} \unexpanded\def\smallbreak {\par \ifdim\lastskip<\smallskipamount \removelastskip \penalty-50 \smallskip \fi} \unexpanded\def\medbreak {\par \ifdim\lastskip<\medskipamount \removelastskip \penalty-100 \medskip \fi} \unexpanded\def\bigbreak {\par \ifdim\lastskip<\bigskipamount \removelastskip \penalty-200 \bigskip \fi} \unexpanded\def\break {\penalty-\plustenthousand} % can be hmode or vmode \unexpanded\def\nobreak {\penalty \plustenthousand} % can be hmode or vmode \unexpanded\def\allowbreak{\penalty \zeropoint} % can be hmode or vmode \unexpanded\def\goodbreak {\par\penalty-500\relax} % forces vmode \unexpanded\def\filbreak {\par\vfil\penalty-200\vfilneg} % forces vmode %D Made slightly more readable: \unexpanded\def\vglue {\afterassignment\spac_helpers_vglue_indeed\s_spac_lastskip=} \unexpanded\def\hglue {\afterassignment\spac_helpers_hglue_indeed\s_spac_lastskip=} \unexpanded\def\topglue{\nointerlineskip\vglue-\topskip\vglue} \def\spac_helpers_vglue_indeed {\par \d_spac_prevdepth\prevdepth \hrule\s!height\zeropoint \nobreak \vskip\s_spac_lastskip \prevdepth\d_spac_prevdepth} \def\spac_helpers_hglue_indeed {\dontleavehmode \c_spac_spacefactor\spacefactor \vrule\s!width\zeropoint \nobreak \hskip\s_spac_lastskip \spacefactor\c_spac_spacefactor} %D We adapt plain's \type {\removelastskip} a bit: \unexpanded\def\removelastskip % also in supp-box {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} % The whitespace handler. We could cache settings but normally there are not % that many in a set. \installcorenamespace{whitespacemethod} \newskip \s_spac_whitespace_parskip \s_spac_whitespace_parskip\zeropoint \newconditional\c_spac_whitespace_flexible \settrue\c_spac_whitespace_flexible \newconstant \c_spac_whitespace_grid_mode % option in layout / 1=permit_half_lines %def\v_spac_whitespace_current{\zeropoint} \let\v_spac_whitespace_current\v!none \unexpanded\def\setupwhitespace {\doifnextoptionalelse\spac_whitespace_setup_yes\spac_whitespace_setup_nop} \def\spac_whitespace_setup_nop {\ifx\v_spac_whitespace_current\v!none\else \spac_whitespace_setup \fi} \let\synchronizewhitespace\spac_whitespace_setup_nop \def\spac_whitespace_setup_yes[#1]% {\edef\m_spac_whitespace_asked{#1}% \ifx\m_spac_whitespace_asked\empty \spac_whitespace_setup_nop \else \let\v_spac_whitespace_current\m_spac_whitespace_asked \spac_whitespace_setup \fi} \def\spac_whitespace_setup % quick test for no list {\ifcsname\??whitespacemethod\v_spac_whitespace_current\endcsname \csname\??whitespacemethod\v_spac_whitespace_current\endcsname \else \expandafter\processcommalist\expandafter[\v_spac_whitespace_current]\spac_whitespace_setup_method % can be raw \fi\relax \ifgridsnapping \spac_whitespace_setup_grid \else \spac_whitespace_setup_normal \fi \parskip\s_spac_whitespace_parskip} \def\spac_whitespace_setup_normal {\ifconditional\c_spac_whitespace_flexible \else \s_spac_whitespace_parskip\plusone\s_spac_whitespace_parskip \fi} \def\spac_whitespace_setup_grid {\setfalse\c_spac_whitespace_flexible \ifdim\s_spac_whitespace_parskip>\zeropoint \s_spac_whitespace_parskip \ifcase\c_spac_whitespace_grid_mode \baselineskip \or \ifdim\scratchdimen=\baselineskip % maybe range \baselineskip \else \numexpr\s_spac_whitespace_parskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax \fi \else \baselineskip \fi \fi} \unexpanded\def\installwhitespacemethod#1#2% {\setvalue{\??whitespacemethod#1}{#2}} \installwhitespacemethod \v!fix {} \installwhitespacemethod \v!fixed {\setfalse\c_spac_whitespace_flexible} \installwhitespacemethod \v!flexible {\settrue \c_spac_whitespace_flexible} \installwhitespacemethod \v!line {\s_spac_whitespace_parskip \baselineskip} \installwhitespacemethod \v!halfline {\s_spac_whitespace_parskip .5\baselineskip} \installwhitespacemethod \v!quarterline {\s_spac_whitespace_parskip.25\baselineskip} \installwhitespacemethod \v!none {\s_spac_whitespace_parskip \zeropoint} \installwhitespacemethod \v!big {\s_spac_whitespace_parskip \bigskipamount} \installwhitespacemethod \v!medium {\s_spac_whitespace_parskip \medskipamount} \installwhitespacemethod \v!small {\s_spac_whitespace_parskip \smallskipamount} \installwhitespacemethod \s!default {\spac_whitespace_setup_nop} \def\spac_whitespace_setup_method#1% {\ifcsname\??whitespacemethod#1\endcsname \csname\??whitespacemethod#1\endcsname \else \s_spac_whitespace_parskip#1\fi \relax} \unexpanded\def\forgetparskip {\s_spac_whitespace_parskip\zeropoint \parskip\zeropoint \let\v_spac_whitespace_current\v!none} \appendtoks \forgetparskip \to \everyforgetall % \installwhitespacemethod \s!unknown {\s_spac_whitespace_parskip\commalistelement\relax} % % \def\spac_whitespace_setup_method#1% % {\csname\??whitespacemethod\ifcsname\??whitespacemethod#1\endcsname#1\else\s!unknown\endcsname\relax} \unexpanded\def\nowhitespace{\vspacing[\v!nowhite]} \unexpanded\def\whitespace {\vspacing[\v!white]} \setupwhitespace [\v!none] % Packed: % todo: when packed blocks blank, we need to enable forced \newconditional\c_spac_packed_blank \settrue\c_spac_packed_blank \newcount \c_spac_packed_level \unexpanded\def\startpacked {\dosingleempty\spac_packed_start} \def\spac_packed_start[#1]% nesting afvangen {\global\advance\c_spac_packed_level\plusone \par \ifnum\c_spac_packed_level=\plusone \ifvmode \begingroup \whitespace % not combined \blank[\v!disable]% \doifelse{#1}\v!blank\settrue\setfalse\c_spac_packed_blank \setupwhitespace[\v!none]% \fi \fi} \unexpanded\def\stoppacked {\par \ifnum\c_spac_packed_level=\plusone \ifvmode \endgroup \fi \fi \global\advance\c_spac_packed_level\minusone} \unexpanded\def\startunpacked {\blank \begingroup} \unexpanded\def\stopunpacked {\endgroup \blank} % \prevdepth crosses pageboundaries! % % todo: a version that works ok inside a box \installcorenamespace{linesaround} \let\v_spac_lines_around_action_set\relax \let\m_spac_lines_around \empty % \setvalue{\??linesaround\v!blank }{\blank} % \letvalue{\??linesaround\empty }\relax % \setvalue{\??linesaround\s!unknown}{\blank[\m_spac_lines_around]} % % \unexpanded\def\startlinecorrection % {\bgroup % \dodoubleempty\spac_lines_start_correction} % % \def\spac_lines_start_correction[#1][#2]% #2 gobbles spaces % {\edef\m_spac_lines_around{#1}% % \expandafter\let\expandafter\spac_lines_action_around\csname\??linesaround % \ifcsname\??linesaround\m_spac_lines_around\endcsname\m_spac_lines_around\else\s!unknown\fi % \endcsname % \spac_lines_action_around % \startbaselinecorrection % \offbaselinecorrection % \ignorespaces} % % \unexpanded\def\stoplinecorrection % {\stopbaselinecorrection % \spac_lines_action_around % \egroup} \setvalue{\??linesaround\v!blank }{\blank} \letvalue{\??linesaround\empty }\relax \setvalue{\??linesaround\s!unknown}{\blank[\m_spac_lines_around]} \def\spac_lines_action_around % we used to let this one but it's cleaner this way {\csname\??linesaround % i.e. do it twice \ifcsname\??linesaround\m_spac_lines_around\endcsname\m_spac_lines_around\else\s!unknown\fi \endcsname} \unexpanded\def\startlinecorrection {\endgraf \bgroup \dosingleempty\spac_lines_start_correction} \unexpanded\def\startlocallinecorrection {\endgraf \bgroup \setlocalhsize \hsize\localhsize \dosingleempty\spac_lines_start_correction} \def\spac_lines_start_correction {\ifvmode \expandafter\spac_lines_start_correction_yes \else \expandafter\spac_lines_start_correction_nop \fi} \def\spac_lines_start_correction_nop[#1]% {\vbox\bgroup \ignorespaces \let\spac_lines_stop_correction\spac_lines_stop_correction_nop} \def\spac_lines_stop_correction_nop {\removeunwantedspaces \egroup} \def\spac_lines_start_correction_yes[#1]% {\edef\m_spac_lines_around{#1}% \spac_lines_action_around \d_spac_prevdepth\prevdepth \spac_lines_initialize_corrections \offbaselinecorrection % ??? \setbox\scratchbox\vbox\bgroup \ignorespaces \let\spac_lines_stop_correction\spac_lines_stop_correction_yes} \unexpanded\def\spac_lines_stop_correction_yes {\removeunwantedspaces \egroup \ifgridsnapping \blank[\v!white]% \snaptogrid\hbox{\box\scratchbox}% \else \ifdim\d_spac_prevdepth<\maxdimen \unless\ifdim\d_spac_prevdepth<\zeropoint \ifdim\d_spac_prevdepth<\strutdp \relax \pushlastnode \ifdim\d_spac_prevdepth>\zeropoint \kern-\d_spac_prevdepth \fi \kern\strutdp \prevdepth\strutdp \poplastnode \fi \fi \fi \ifdim\pagegoal<\maxdimen \blank[\v!white,\the\d_spac_lines_correction_before]% \blank[\v!white]\dotopbaselinecorrection \fi \nointerlineskip % new \noindent % not just \dontleavehmode (MKII compatible) \box\scratchbox \endgraf \blank[\the\d_spac_lines_correction_after]% \dobotbaselinecorrection % \allowbreak % new, otherwise problems when many in a row \prevdepth\strutdp \fi \spac_lines_action_around \egroup} \unexpanded\def\stoplinecorrection{\spac_lines_stop_correction} \let\stoplocallinecorrection\stoplinecorrection % todo: \unexpanded\def\correctwhitespace {\dowithnextboxcs\correctwhitespacefinish\vbox} \unexpanded\def\correctwhitespacefinish {\startbaselinecorrection \flushnextbox \stopbaselinecorrection} \unexpanded\def\verticalstrut {\vbox{\hsize\zeropoint\forgetall\strut}} \unexpanded\def\horizontalstrut{\hbox {\strut}} % Hieronder volgen enkele instellingen en macro's ten behoeve % van de interlinie en \strut. De waarden 2.8, 0.07, 0.72 en % 0.28 zijn ooit eens ontleend aan INRS-TEX en moeten wellicht % nog eens instelbaar worden. % % \lineheight : de hoogte van een regel % \spacing{getal} : instellen interlinie % \normalbaselines : instellen regelafstend % % \setstrut : instellen \strut % \setnostrut : resetten \strut, \endstrut, \begstrut % \setnonestrut : resetten \strut (fast one) % % \setteststrut : instellen zichtbare struts % \resetteststrut : instellen onzichtbare struts % % \setfontparameters : instellen na fontset % % De hoogte van een regel (\lineheight) is gelijk aan de % som van de hoogte (\ht) en diepte (\dp) van \strutbox. % % \strut : denkbeeldig blokje met hoogte en diepte % % Een \hbox kan als deze aan het begin van een regel staat % een breedte \hsize krijgen. Dit is soms te voorkomen met het % commando \leavevmode. Binnen een \vbox geeft dit echter % niet altijd het gewenste resultaat, vandaar het commando % % \dontleavehmode % Pas op: niet zomaar \topskip en \baselineskip aanpassen % en zeker niet \widowpenalty. Dit kan ernstige gevolgen % hebben voor kolommen. % % Enige glue kan op zich geen kwaad, echter als blanko=vast, % dan moet ook de rek 0 zijn. Binnen kolommen is rek ook % niet bepaald mooi. Een hele kleine waarde (0.025) voldoet, % omdat een positieve glue eindeloos rekbaar is. % more of the next will become private: \newdimen\strutdimen \newdimen\lineheight \newdimen\openlineheight \newdimen\openstrutheight \newdimen\openstrutdepth \newdimen\topskipgap \newdimen\struttotal \def\strutheightfactor {.72} \def\strutdepthfactor {.28} \def\baselinefactor {2.8} \let\m_spac_vertical_baseline_stretch_factor \zerocount \let\m_spac_vertical_baseline_shrink_factor \zerocount \def\minimumstrutheight {\zeropoint} \def\minimumstrutdepth {\zeropoint} \def\normallineheight {\baselinefactor\exheight} \def\minimumlinedistance {\lineskip} \def\strutheight {\zeropoint} \def\strutdepth {\zeropoint} \def\strutwidth {\zeropoint} \let\spacingfactor \plusone \def\topskipfactor {1.0} \def\maxdepthfactor {0.5} \def\systemtopskipfactor {\topskipfactor} \def\systemmaxdepthfactor {\maxdepthfactor} \ifdefined\globalbodyfontsize \else \newdimen\globalbodyfontsize \globalbodyfontsize=12pt \fi \ifdefined\normalizedbodyfontsize \else \def\normalizedbodyfontsize{12pt} \fi \unexpanded\def\topskipcorrection {\simpletopskipcorrection \vskip-\struttotal \verticalstrut} \unexpanded\def\simpletopskipcorrection {\ifdim\topskip>\openstrutheight % == \vskip\topskipgap \vskip\topskip \vskip-\openstrutheight \fi} \unexpanded\def\settopskip % the extra test is needed for the lbr family {\topskip \ifgridsnapping \zeropoint \else \systemtopskipfactor\globalbodyfontsize \ifcase\bottomraggednessmode % ragged bottom \s!plus5\globalbodyfontsize \fi \fi %\relax \topskipgap\topskip \advance\topskipgap -\openstrutheight\relax \ifdim\minimumstrutheight>\zeropoint \ifdim\topskip<\minimumstrutheight \topskip\minimumstrutheight\relax \fi \else \ifdim\topskip<\strutheightfactor\openlineheight \topskip\strutheightfactor\openlineheight\relax \fi \fi} \unexpanded\def\setmaxdepth {\maxdepth\systemmaxdepthfactor\globalbodyfontsize} \unexpanded\def\normalbaselines {\baselineskip \normalbaselineskip \lineskip \normallineskip \lineskiplimit\normallineskiplimit} \unexpanded\def\flexiblebaselines {\baselineskip \normalbaselineskip \lineskip 1\normallineskip \s!plus 1\s!fill \lineskiplimit\normallineskiplimit} \unexpanded\def\setnormalbaselines {\ifdim\normallineheight>\zeropoint \lineheight\normallineheight \fi \openlineheight\spacingfactor\lineheight \openstrutheight \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight % new \else \strutheightfactor\openlineheight \fi \openstrutdepth \ifdim\minimumstrutdepth>\zeropoint \minimumstrutdepth % new \else \strutdepthfactor \openlineheight \fi \ifdim\dimexpr\minimumstrutdepth+\minimumstrutheight\relax>\zeropoint \openlineheight\dimexpr\openstrutheight+\openstrutdepth\relax % new \fi \normalbaselineskip\openlineheight \ifgridsnapping\else \s!plus \m_spac_vertical_baseline_stretch_factor\openlineheight \s!minus\m_spac_vertical_baseline_shrink_factor \openlineheight \fi \normallineskip\minimumlinedistance\relax % \onepoint\relax \normallineskiplimit\zeropoint\relax \normalbaselines} \unexpanded\def\spacing#1% vertical {\ifgridsnapping \let\spacingfactor\plusone \else \edef\spacingfactor{#1}% \fi \edef\systemtopskipfactor {\withoutpt\the\dimexpr#1\dimexpr\topskipfactor \points}% \edef\systemmaxdepthfactor{\withoutpt\the\dimexpr#1\dimexpr\maxdepthfactor\points}% \setnormalbaselines \setstrut} % \unexpanded\def\forgetverticalstretch % \forgetspacing % {\spacing\plusone} \unexpanded\def\forgetverticalstretch {\let\spacingfactor \plusone \let\systemtopskipfactor \topskipfactor \let\systemmaxdepthfactor\maxdepthfactor \setnormalbaselines \setstrut} \appendtoks \forgetverticalstretch \to \everyforgetall % needed in otr %D Sometimes one needs to freeze the interlinespacing %D %D \starttyping %D \rm \saveinterlinespace .... {\ss \restoreinterlinespace .... \endgraf} %D \stoptyping \let\restoreinterlinespace\relax \unexpanded\def\saveinterlinespace {\unexpanded\edef\restoreinterlinespace {\lineheight \the\lineheight \openstrutheight \the\openstrutheight \openstrutdepth \the\openstrutdepth \openlineheight \the\openlineheight \normalbaselineskip \the\normalbaselineskip \normallineskip \the\normallineskip \normallineskiplimit\the\normallineskiplimit \noexpand\def\noexpand\normallineheight{\the\dimexpr\normallineheight}% \noexpand\normalbaselines}} % plain definition: % % \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} % % could be: % % \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox} \newbox\strutbox \setbox\strutbox\hbox{\vrule\s!height8.5pt\s!depth3.5pt\s!width\zeropoint} % just a start \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox} \let\normalstrut\strut % The double \hbox construction enables us to \backtrack % boxes. \let\strutht\undefined \newdimen\strutht \let\strutdp\undefined \newdimen\strutdp \unexpanded\def\setstrut {\ifgridsnapping \setstrutgridyes \else \setstrutgridnop \fi} \unexpanded\def\setstrutgridyes {\strutht\spacingfactor\dimexpr \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight \else \strutheightfactor\dimexpr\normallineheight \fi \strutdp\dimexpr \ifdim\minimumstrutdepth>\zeropoint \minimumstrutdepth \else \normallineheight-\strutht \fi \dosetstrut} \unexpanded\def\setstrutgridnop {\strutht\spacingfactor\dimexpr \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight \else \strutheightfactor\dimexpr\normallineheight \fi \strutdp\spacingfactor\dimexpr \ifdim\minimumstrutdepth>\zeropoint \minimumstrutdepth \else \strutdepthfactor\dimexpr\normallineheight \fi \dosetstrut} \unexpanded\def\setcharstrut#1% {\setbox\strutbox\hbox{#1}% \strutht\ht\strutbox \strutdp\dp\strutbox \dosetstrut} \unexpanded\def\setfontstrut {\setcharstrut{(gplQT}} \unexpanded\def\setcapstrut% could be M, but Q has descender {\setcharstrut{Q}} %D Handy for math (used in mathml): \unexpanded\def\charhtstrut {\begingroup \setcharstrut{GJY}% \vrule\s!width\zeropoint\s!depth\zeropoint\s!height\strutht \endgroup} \unexpanded\def\chardpstrut {\begingroup \setcharstrut{gjy}% \vrule\s!width\zeropoint\s!depth\strutdp\s!height\zeropoint \endgroup} % because of all the callbacks in mkiv, we avoid unnecessary boxes ... % maybe use an attribute so that we can tag boxes that don't need a % treatment; tests with using an attribute so far have shown that % it's slower because testing the attribute takes time too \unexpanded\def\dosetstrut {\let\strut\normalstrut \ifabsnum\dimexpr\strutht+\strutdp-\lineheight\relax<\plustwo % compensate rounding error /- 1sp to avoid too many % 1sp baselineskips in for instance verbatim \strutht\dimexpr\lineheight-\strutdp\relax \struttotal\lineheight \else \struttotal\dimexpr\strutht+\strutdp\relax \fi \edef\strutheight{\the\strutht}% \edef\strutdepth {\the\strutdp}% \ifdim\strutwidth=\zeropoint \spac_struts_set_hide \else \spac_struts_set_vide \fi} \def\spac_struts_set_hide {\setbox\strutbox\hbox {\vrule \s!width \zeropoint \s!height\strutht \s!depth \strutdp}} \def\spac_struts_set_vide {\setbox\strutbox\hbox {\spac_struts_vide_hbox to \zeropoint {% \hss % new, will be option \vrule \s!width \strutwidth \s!height\strutht \s!depth \strutdp \hss}}} \let\spac_struts_vide_hbox\hbox % overloaded in trac-vis.mkiv %D The dimen \type {\struttotal} holds the exact size of the %D strut; occasionally a one scaled point difference can show %D up with the lineheight. % This is more efficient (less callbacks): \newbox\b_spac_struts_empty \setbox\b_spac_struts_empty\emptyhbox \def\spac_struts_set_hide {\setbox\strutbox\copy\b_spac_struts_empty \ht\strutbox\strutht \dp\strutbox\strutdp} \unexpanded\def\strut % still callbacks for \hbox{\strut} {\relax \dontleavehmode \copy\strutbox} \let\normalstrut\strut %D Sometimes a capstrut comes in handy %D %D \starttabulate[|Tl|l|l|] %D \NC yes \NC normal strut \NC {\showstruts\setupstrut[yes]\strut} \NC \NR %D \NC no \NC no strut \NC {\showstruts\setupstrut[no]\strut} \NC \NR %D \NC kap \NC a capital strut (i.e. Q) \NC {\showstruts\setupstrut[cap]\strut} \NC \NR %D \NC A B \unknown \NC a character strut (e.g. A) \NC {\showstruts\setupstrut[A]\strut} \NC \NR %D \NC \NC a normal strut \NC {\showstruts\setupstrut\strut} \NC \NR %D \stoptabulate %D Beware: using an unknown value results in char struts. \installcorenamespace{struts} \unexpanded\def\setupstrut {\dosingleempty\spac_struts_setup} \def\spac_struts_setup[#1]% {\edef\m_strut{#1}% \ifcsname\??struts\m_strut\endcsname \csname\??struts\m_strut\endcsname % these are defined later \else \setcharstrut\m_strut \fi} \unexpanded\def\synchronizestrut#1% no [] parsing, faster for internal {\edef\m_strut{#1}% \ifcsname\??struts\m_strut\endcsname \csname\??struts\m_strut\endcsname \else \setcharstrut\m_strut \fi} \unexpanded\def\dosynchronizestrut#1% no [] parsing, faster for internal {\ifcsname\??struts#1\endcsname \csname\??struts#1\endcsname \else \setcharstrut\m_strut \fi} \unexpanded\def\showstruts {\setteststrut \settestcrlf} \unexpanded\def\setteststrut {\def\strutwidth{.8pt}% \setstrut} \unexpanded\def\dontshowstruts {\unsetteststrut \settestcrlf} \unexpanded\def\unsetteststrut {\let\strutwidth\zeropoint \setstrut} \def\autostrutfactor{1.1} \unexpanded\def\setautostrut {\begingroup \setbox\scratchbox\copy\strutbox \setstrut \ifdim\strutht>\autostrutfactor\ht\scratchbox \endgroup \setstrut \else\ifdim\strutdp>\autostrutfactor\dp\scratchbox \endgroup \setstrut \else \endgroup \fi\fi} \newbox\nostrutbox \setbox\nostrutbox\emptyhbox \unexpanded\def\setnostrut {\setbox\strutbox\copy\nostrutbox \let\strut\empty \let\endstrut\empty \let\begstrut\empty \let\crlfplaceholder\empty} % when enabled, sigstruts will remove themselves if nothing % goes inbetween \newsignal\strutsignal \setfalse\sigstruts \unexpanded\def\begstrut {\relax\ifcase\strutht % \ignorespaces % maybe \else \spac_struts_beg \fi} \def\spac_struts_beg {\ifconditional\sigstruts \spac_struts_beg_signal \else \spac_struts_beg_normal \fi \ignorespaces} \def\spac_struts_beg_signal {\noindent\horizontalstrut \penalty\plustenthousand \hskip-\strutsignal \hskip\strutsignal} \def\spac_struts_beg_normal {\strut \penalty\plustenthousand \hskip\zeropoint} \unexpanded\def\endstrut {\relax\ifhmode \ifcase\strutht % \removeunwantedspaces % maybe \else \spac_struts_end \fi \fi} \def\spac_struts_end {\ifconditional\sigstruts \spac_struts_end_signal \else \spac_struts_end_normal \fi} \def\spac_struts_end_signal {\ifdim\lastskip=\strutsignal \unskip \unskip \unpenalty \setbox\scratchbox\lastbox \else \penalty\plustenthousand \hskip\zeropoint \strut \fi} \def\spac_struts_end_normal {\removeunwantedspaces \penalty\plustenthousand \hskip\zeropoint \strut} % unsave: % % \def\pseudostrut % {\bgroup % \setnostrut % \normalstrut % \egroup} % % try: % % \startchemie % \chemie[ONE,Z0,SB15,MOV1,SB15,Z0][C,C] % \stopchemie % % so: \unexpanded\def\pseudostrut {\noindent} % better: \dontleavehmode \let\pseudobegstrut\pseudostrut \let\pseudoendstrut\removeunwantedspaces \unexpanded\def\resetteststrut {\def\strutwidth{\zeropoint}% no let \setstrut} \ifdefined\setfontparameters \else \def\setfontparameters{\the\everybodyfont} \fi %D Keyword based strutting: \letvalue{\??struts\v!yes }\setstrut % \setvalue{\??struts\v!yes }{\setstrut} \letvalue{\??struts\v!auto }\setautostrut % \setvalue{\??struts\v!auto }{\setautostrut} \letvalue{\??struts\v!no }\setnostrut % \setvalue{\??struts\v!no }{\setnostrut} \letvalue{\??struts\v!cap }\setcapstrut % \setvalue{\??struts\v!cap }{\setcapstrut} \letvalue{\??struts\v!fit }\setfontstrut % \setvalue{\??struts\v!fit }{\setfontstrut} \letvalue{\??struts\v!line }\setstrut % \setvalue{\??struts\v!line }{\setstrut} \letvalue{\??struts\s!default}\setstrut % \setvalue{\??struts\s!default}{\setstrut} \letvalue{\??struts\empty }\setstrut % \setvalue{\??struts\empty }{\setstrut} %D Handy: \def\baselinedistance{\the\lineheight} %D We need \type{\normaloffinterlineskip} because the new %D definition contains an assignment, and |<|don't ask me %D why|>| this assignment gives troubles in for instance the %D visual debugger. \unexpanded\def\offinterlineskip {\baselineskip-\thousandpoint \lineskip \zeropoint \lineskiplimit\maxdimen % We also need this here now; thanks to taco for figuring that out! \def\minimumlinedistance{\zeropoint}} \unexpanded\def\nointerlineskip {\prevdepth-\thousandpoint} \let\normaloffinterlineskip\offinterlineskip % knuth's original %D My own one: \unexpanded\def\spac_helpers_push_interlineskip_yes {\edef\oninterlineskip {\baselineskip \the\baselineskip \lineskip \the\lineskip \lineskiplimit\the\lineskiplimit \noexpand\edef\noexpand\minimumlinedistance{\the\dimexpr\minimumlinedistance}% \let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}} % \noexpand not needed \unexpanded\def\spac_helpers_push_interlineskip_nop {\let\oninterlineskip\setnormalbaselines} \unexpanded\def\offinterlineskip {\ifdim\baselineskip>\zeropoint \spac_helpers_push_interlineskip_yes \else \spac_helpers_push_interlineskip_nop \fi \normaloffinterlineskip} \let\oninterlineskip\relax \unexpanded\def\leaveoutervmode {\ifvmode\ifinner\else \leavevmode \fi\fi} \unexpanded\def\resetpenalties#1% {\ifdefined#1% #1\minusone \fi} \unexpanded\def\setpenalties#1#2#3% {\ifdefined#1% space before #3 prevents lookahead problems, needed when #3=text #1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax \fi} %D \macros %D {keeplinestogether} %D %D Dirty hack, needed in margin content that can run of a page. % just before margintexts ... will eventually be done differently in mkiv using % attributes \newcount\c_spac_keep_lines_together \let\restoreinterlinepenalty\relax \unexpanded\def\spac_penalties_restore {\global\let\restoreinterlinepenalty\relax \global\resetpenalties\interlinepenalties \global\c_spac_keep_lines_together\zerocount} \unexpanded\def\keeplinestogether#1% {\ifnum#1>\c_spac_keep_lines_together \global\c_spac_keep_lines_together#1% \global\setpenalties\interlinepenalties\c_spac_keep_lines_together\plustenthousand \global\let\restoreinterlinepenalty\spac_penalties_restore \fi} \newif\ifgridsnapping % to be sure \def\defaultwidowpenalty {2000} % was: 1000 \def\defaultclubpenalty {2000} % was: 800 \def\defaultdisplaywidowpenalty {50} \def\defaultbrokenpenalty {100} \def\defaultgridwidowpenalty {0} \def\defaultgridclubpenalty {0} \def\defaultgriddisplaywidowpenalty {0} \def\defaultgridbrokenpenalty {0} \unexpanded\def\nopenalties {\widowpenalty \zerocount \clubpenalty \zerocount \brokenpenalty \zerocount \doublehyphendemerits\zerocount \finalhyphendemerits \zerocount \adjdemerits \zerocount} \unexpanded\def\setdefaultpenalties {\directsetup{\systemsetupsprefix\s!default}} \startsetups [\systemsetupsprefix\s!reset] \resetpenalties\widowpenalties \resetpenalties\clubpenalties \resetpenalties\interlinepenalties \stopsetups % we use \directsetup because it's faster and we know there is no csl \startsetups [\systemsetupsprefix\s!default] \directsetup{\systemsetupsprefix\s!reset} \widowpenalty \defaultwidowpenalty \clubpenalty \defaultclubpenalty \displaywidowpenalty\defaultdisplaywidowpenalty \brokenpenalty \defaultbrokenpenalty \stopsetups \startsetups [\v!grid] [\systemsetupsprefix\s!default] \directsetup{\systemsetupsprefix\s!reset} \widowpenalty \defaultgridwidowpenalty \clubpenalty \defaultgridclubpenalty \displaywidowpenalty\defaultgriddisplaywidowpenalty \brokenpenalty \defaultgridbrokenpenalty \stopsetups % as an illustration: \startsetups [\systemsetupsprefix\v!strict] \directsetup{\systemsetupsprefix\s!reset} \setpenalties\widowpenalties\plustwo\maxdimen \setpenalties\clubpenalties \plustwo\maxdimen \brokenpenalty \maxdimen \stopsetups \setdefaultpenalties % will happen later in \setuplayout %D To be checked: \newbox\b_spac_struts_saved \unexpanded\def\savestrut {\setbox\b_spac_struts_saved\copy\strutbox} \unexpanded\def\savedstrut{\copy \b_spac_struts_saved} %D Good old blank redone: %definesystemattribute[kernchars] [public] \definesystemattribute[skipcategory] [public] \definesystemattribute[skippenalty] [public] \definesystemattribute[skiporder] [public] \definesystemattribute[snapmethod] [public] \definesystemattribute[snapvbox] [public] %definesystemattribute[snapcategory] [public] % TODO: NAMED SNAPPERS \installcorenamespace{gridsnappers} \installcorenamespace{gridsnapperattributes} \newskip \bodyfontlineheight \newdimen \bodyfontstrutheight \newdimen \bodyfontstrutdepth \newskip \globalbodyfontlineheight \newdimen \globalbodyfontstrutheight \newdimen \globalbodyfontstrutdepth \def\snappedvboxattribute{\ifgridsnapping attr \snapvboxattribute \attribute\snapmethodattribute\fi} \def\setlocalgridsnapping{\ifgridsnapping \attribute \snapvboxattribute \attribute\snapmethodattribute\fi} \def\spac_grids_set_local_snapping#1% {\ifgridsnapping \doifsomething{#1}% {\spac_grids_snap_value_set{#1}% \attribute \snapvboxattribute \attribute\snapmethodattribute}% \fi} \unexpanded\def\installsnapvalues#1#2% todo: a proper define {\edef\currentsnapper{#1:#2}% \ifcsname\??gridsnapperattributes\currentsnapper\endcsname \else \setevalue{\??gridsnapperattributes\currentsnapper}{\ctxlua{builders.vspacing.definesnapmethod("#1","#2")}}% \fi \setevalue{\??gridsnappers#1}{\attribute\snapmethodattribute\csname\??gridsnapperattributes\currentsnapper\endcsname\space}} \unexpanded\def\definegridsnapping {\dodoubleargument\spac_grids_define} \def\spac_grids_define[#1][#2]% {\installsnapvalues{#1}{#2}} \edef\spac_grids_snap_value_reset {%\gridsnappingfalse \attribute\snapmethodattribute\attributeunsetvalue} \def\spac_grids_snap_value_set#1% {%\gridsnappingtrue \ifcsname\??gridsnappers#1\endcsname\csname\??gridsnappers#1\endcsname\fi} \def\spac_grids_snap_value_auto#1% {\ifcsname\??gridsnappers#1\endcsname \csname\??gridsnappers#1\endcsname \else \installsnapvalues\s!dummy{#1}% \csname\??gridsnappers\s!dummy\endcsname \fi} % \installsnapvalues{loose} {\v!maxdepth:0.8,\v!maxheight:0.8,\v!strut} % \installsnapvalues{normal}{\v!maxdepth:1.0,\v!maxheight:1.0,\v!strut} % \installsnapvalues{tight} {\v!maxdepth:1.2,\v!maxheight:1.2,\v!strut} % none don't enlarge % halfline enlarge by halfline/halfline % line enlarge by line/line % strut enlarge by ht/dp (default) % first align to top line % last align to bottom line % mindepth round depth down % maxdepth round depth up % minheight round height down % maxheight round height up % local use local interline space % offset:-3tp vertical shift within box % bottom:lines % top:lines %D We're not downward compatible with \MKII ! \definegridsnapping[\v!normal] [\v!maxheight,\v!maxdepth,\v!strut] \definegridsnapping[\v!standard] [\v!maxheight,\v!maxdepth,\v!strut] \definegridsnapping[\v!yes] [\v!maxheight,\v!maxdepth,\v!strut] \definegridsnapping[\v!strict] [\v!maxdepth:0.8,\v!maxheight:0.8,\v!strut] \definegridsnapping[\v!tolerant] [\v!maxdepth:1.2,\v!maxheight:1.2,\v!strut] \definegridsnapping[\v!top] [\v!minheight,\v!maxdepth,\v!strut] \definegridsnapping[\v!bottom] [\v!maxheight,\v!mindepth,\v!strut] \definegridsnapping[\v!both] [\v!minheight,\v!mindepth,\v!strut] \definegridsnapping[\v!broad] [\v!maxheight,\v!maxdepth,\v!strut,0.8] % maybe 0.85 \definegridsnapping[\v!fit] [\v!maxheight,\v!maxdepth,\v!strut,1.2] % tight 0.15 \definegridsnapping[\v!first] [\v!first] \definegridsnapping[\v!last] [\v!last] \definegridsnapping[\v!high] [\v!minheight,\v!maxdepth,\v!none] \definegridsnapping[\v!one] [\v!minheight,\v!mindepth] \definegridsnapping[\v!low] [\v!maxheight,\v!mindepth,\v!none] \definegridsnapping[\v!none] [\v!none] \definegridsnapping[\v!line] [\v!line] \definegridsnapping[\v!strut] [\v!strut] \definegridsnapping[\v!max] [\v!maxdepth,\v!maxheight,\v!strut] \definegridsnapping[\v!min] [\v!mindepth,\v!minheight,\v!strut] \definegridsnapping[\v!middle] [\v!maxheight,\v!maxdepth] % used in placement \unexpanded\def\synchronizelocallinespecs {\bodyfontlineheight \normallineheight \bodyfontstrutheight\strutheight \bodyfontstrutdepth \strutdepth} \unexpanded\def\synchronizegloballinespecs {\global\globalbodyfontlineheight \normallineheight \global\globalbodyfontstrutheight\strutheight \global\globalbodyfontstrutdepth \strutdepth} \appendtoks \synchronizegloballinespecs \synchronizelocallinespecs \to \everysetupglobalinterlinespace \appendtoks \synchronizelocallinespecs \to \everysetuplocalinterlinespace %D We still have to synchronize these: \unexpanded\def\synchronizeskipamounts {\bigskipamount \skipfactor\baselineskip plus\skipgluefactor\baselineskip minus\skipgluefactor\baselineskip \relax \medskipamount \bigskipamount \divide\medskipamount \plustwo \smallskipamount\bigskipamount \divide\smallskipamount\plusfour} \appendtoks \synchronizeskipamounts \to \everysetupglobalinterlinespace \appendtoks \synchronizeskipamounts \to \everysetuplocalinterlinespace %D Snapping. \newif\ifgridsnapping \let\showgridsnapping\relax %unexpanded\def\moveongrid {\dosingleempty\spac_grids_move_on} \unexpanded\def\snaptogrid {\dosingleempty\spac_grids_snap_to} \unexpanded\def\placeongrid{\dosingleempty\spac_grids_place_on} \unexpanded\def\startgridsnapping {\dosingleempty\spac_grids_start_snapping} \unexpanded\def\spac_grids_start_snapping[#1]% {\snaptogrid[#1]\vbox\bgroup} \unexpanded\def\stopgridsnapping {\egroup} % \def\spac_grids_move_on[#1]% % {[obsolete]} % gone, unless we set an attribute \def\spac_grids_place_on[#1]% {\snaptogrid[#1]\vbox} % mark as done \def\spac_grids_snap_to[#1]% list or predefined {\ifgridsnapping \expandafter\spac_grids_snap_to_indeed \else \expandafter\gobbleoneargument \fi{#1}} \def\spac_grids_snap_to_indeed#1% {\bgroup \spac_grids_snap_value_reset \dowithnextbox{\spac_grids_snap_to_finish{#1}}} % eventually there will always be a line snap \def\spac_grids_snap_to_finish#1% {\ifvbox\nextbox % this will go away \ctxcommand{vspacingcollapse(\number\nextbox)}% isn't that already done? \fi \doifelsenothing{#1}{\spac_grids_snap_value_set\v!normal}{\spac_grids_snap_value_set{#1}}% \ctxcommand{vspacingsnap(\number\nextbox,\number\attribute\snapmethodattribute)}% \ifvbox\nextbox\vbox\else\hbox\fi attr \snapmethodattribute \zerocount {\box\nextbox}% \egroup} \def\spac_grids_check_nop {\gridsnappingfalse \resetsystemmode\v!grid \spac_grids_snap_value_reset} \def\spac_grids_check_yes {\gridsnappingtrue \setsystemmode\v!grid \spac_grids_snap_value_set\askedgridmode} \unexpanded\def\synchronizegridsnapping {\edef\askedgridmode{\layoutparameter\c!grid}% \ifx\askedgridmode\v!no % official \spac_grids_check_nop \else\ifx\askedgridmode\v!off % for taco and luigi \spac_grids_check_nop \else\ifx\askedgridmode\empty % to be sure \spac_grids_check_nop \else \spac_grids_check_yes \fi\fi\fi} %D Visualization: \definepalet [grid] [ one=red, two=green, three=blue, four=gray] \unexpanded\def\setgridtracebox#1[#2]% % maybe reverse the order {\setbox\nextbox#1% {\hbox {\hbox to \zeropoint {\setlayoutcomponentattribute{\v!grid:\v!test}% \color[grid:#2]{\ruledhbox \layoutcomponentboxattribute {\fakebox\nextbox}}% \hss}% \flushnextbox}}} \setnewconstant\gridboxlinenomode\plusone % 0:nothing 1:all 2:lines 3:frame 4:l/r \setnewconstant\gridboxlinemode \plusone \unexpanded\def\gridboxvbox {\ifcase\gridboxlinemode \vbox \or \ruledvbox \or \vbox \or \ruledvbox \else \ruledvbox \fi} \def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\linewidth} \unexpanded\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level {\setbox#1\gridboxvbox to #3 % given size {\forgetall \resetteststrut \offinterlineskip \hsize#2% \ifnum\gridboxlinenomode=\plusthree \gridboxlinenomode\ifodd\realpageno\plusone\else\plustwo\fi \fi \topskipcorrection \gridboxvbox % calculated size {\getrawnoflines{#3}% \getnoflines{#3}% \scratchdimen\dimexpr#2+\lineheight\relax \dorecurse\noflines {\strut \hskip-.5\lineheight\relax \ifcase\gridboxlinenomode\or \rlap {\hskip\dimexpr.2\bodyfontsize+\scratchdimen\relax \infofont\hbox to \emwidth{\hss\recurselevel}}% \or \llap {\infofont\hbox to \emwidth{\hss\recurselevel}% \hskip.2\bodyfontsize}% \fi \vrule \s!height \gridboxwidth \s!depth \gridboxwidth \s!width \scratchdimen \par}} \vfill}} %D This has become obsolete: \def\fuzzysnappedbox#1#2% \box<n> \unvbox<n> {#1#2} \def\moveboxontogrid#1#2#3% will become obsolete, but it needs checking {} %D Helper: \unexpanded\def\spac_helpers_assign_skip#1#2% ook nog \v!halfline+fuzzysnap {\doifelse{#2}\v!line {#1\ifgridsnapping \bodyfontlineheight \else \openlineheight \fi} {\ifgridsnapping \assigndimension{#2}{#1}{.25\bodyfontlineheight}{.5\bodyfontlineheight}\bodyfontlineheight \else \assigndimension{#2}{#1}\smallskipamount\medskipamount\bigskipamount \fi}% \relax} % \start \dosetstretch{.25em} \setuptolerance[tolerant,stretch] \input tufte \endgraf \stop % \start \dosetstretch{.5em} effe flink doorfietsen \stop % experimental code, not yet interfaced: % category: % 0 == discard discard % 1 == only if larger largest % 2 == force even if smaller force % 3 == only take penalty component penalty % 4 == add to existing skip add % 5 == disable (ignore following) disable % 6 == kill whitespace nowhite % 7 == discard previous back % % penalty: larger wins % order: larger wins % category:2,order:5,penalty:10000,skip:value|kw % % \defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi} % todo, in grid mode: builders.vspacing.fixed = false % % \ifgridsnapping will go \installcorenamespace{vspacingamount} \unexpanded\def\definevspacingamount {\dotripleempty\spac_vspacing_define_amount} \def\spac_vspacing_define_amount[#1][#2][#3]% can be combined {\setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}% \ctxcommand{vspacingsetamount("#1")}} % \installcorenamespace{vspacingamountnormal} % \installcorenamespace{vspacingamountgrid} % \def\spac_vspacing_define_amount[#1][#2][#3]% can be combined % {\ifcsname n>#1\endcsname\else % \expandafter\newtoks\csname n>#1\endcsname % \expandafter\newtoks\csname g>#1\endcsname % \fi % \csname n>#1\endcsname{#2}% % \csname g>#1\endcsname{#3}% % \ctxcommand{vspacingsetamount("#1")}} \unexpanded\def\definevspacing {\dodoubleempty\spac_vspacing_define} \def\spac_vspacing_define[#1][#2]% {\ctxcommand{vspacingdefine("#1","#2")}} %D The injector code (generated at the \LUA\ end): \newtoks\everybeforeblankhandling \newtoks\everyafterblankhandling \newconditional\c_space_vspacing_done \newconditional\c_space_vspacing_fixed \appendtoks \s_spac_vspacing_temp\zeropoint \attribute\skipcategoryattribute\plusone \attribute\skippenaltyattribute \attributeunsetvalue \attribute\skiporderattribute \attributeunsetvalue \ifgridsnapping \settrue\c_space_vspacing_fixed \else \setfalse\c_space_vspacing_fixed \fi \to \everybeforeblankhandling \appendtoks \s_spac_vspacing_temp\plusone\s_spac_vspacing_temp \ifconditional\c_space_vspacing_fixed \else \s!plus \skipgluefactor\s_spac_vspacing_temp \s!minus\skipgluefactor\s_spac_vspacing_temp \fi \relax \to \everyafterblankhandling \unexpanded\def\setblankcategory#1% {\settrue\c_space_vspacing_done \attribute\skipcategoryattribute#1\relax} \unexpanded\def\setblankorder#1% {\attribute\skiporderattribute#1\relax} \unexpanded\def\fixedblankskip {\settrue\c_space_vspacing_fixed} \unexpanded\def\flexibleblankskip {\setfalse\c_space_vspacing_fixed} % \unexpanded\def\addblankskip#1#2#3% % {\settrue\c_space_vspacing_done % \advance\s_spac_vspacing_temp#1\dimexpr\ifgridsnapping#3\else#2\fi\relax\relax} \unexpanded\def\setblankpenalty#1% {\flushblankhandling \settrue\c_space_vspacing_done \attribute\skipcategoryattribute \plusthree \attribute\skippenaltyattribute #1\relax \flushblankhandling} \unexpanded\def\startblankhandling % move this to \vspacing {\par \ifvmode \expandafter\dostartblankhandling \else \expandafter\nostartblankhandling \fi} \def\nostartblankhandling#1\stopblankhandling {} \def\dostartblankhandling {\begingroup \setfalse\c_space_vspacing_done \the\everybeforeblankhandling} \unexpanded\def\stopblankhandling {\the\everyafterblankhandling \ifconditional\c_space_vspacing_done \vskip\s_spac_vspacing_temp \fi \endgroup} \unexpanded\def\flushblankhandling {\the\everyafterblankhandling \ifconditional\c_space_vspacing_done \vskip\s_spac_vspacing_temp \fi \setfalse\c_space_vspacing_done \the\everybeforeblankhandling} \def\addpredefinedblankskip#1#2% {\settrue\c_space_vspacing_done \advance\s_spac_vspacing_temp#1\dimexpr\csname\??vspacingamount#2\endcsname\relax} % \unexpanded\def\addpredefinedblankskip#1#2% % {\settrue\c_space_vspacing_done % \advance\s_spac_vspacing_temp#1\dimexpr\the\csname\ifgridsnapping g\else n\fi>#2\endcsname\relax} \unexpanded\def\addaskedblankskip#1#2% {\settrue\c_space_vspacing_done \advance\s_spac_vspacing_temp#1\dimexpr#2\relax} % The main spacer: \unexpanded\def\vspacing {\doifnextoptionalelse\spac_vspacing_yes\spac_vspacing_nop} \def\spac_vspacing_yes {\ifinpagebody % somewhat weird \singleexpandafter\spac_vspacing_yes_indeed \else\ifconditional\c_spac_packed_blank \doubleexpandafter\spac_vspacing_yes_indeed \else \doubleexpandafter\spac_vspacing_yes_ignore \fi\fi} \def\spac_vspacing_nop {\ifinpagebody % somewhat weird \singleexpandafter\spac_vspacing_nop_indeed \else\ifconditional\c_spac_packed_blank \doubleexpandafter\spac_vspacing_nop_indeed \else \doubleexpandafter\spac_vspacing_nop_ignore \fi\fi} \def\spac_vspacing_yes_indeed[#1]% {\ifmmode\else\par\ctxcommand{vspacing("#1")}\fi} \def\spac_vspacing_yes_ignore[#1]% {\ifmmode\else\par\fi} \def\spac_vspacing_nop_indeed {\ifmmode\else\par\ctxcommand{vspacing("\currentvspacing")}\fi} \def\spac_vspacing_nop_ignore {\ifmmode\else\par\fi} \def\directvspacing#1% {\par\ctxcommand{vspacing("#1")}} % handy (and faste): \unexpanded\def\directvpenalty#1% {\begingroup \attribute\skipcategoryattribute \plusthree \attribute\skippenaltyattribute #1\relax \attribute\skiporderattribute \attributeunsetvalue \vskip\zeropoint \endgroup} \unexpanded\def\directvskip#1% {\begingroup \attribute\skipcategoryattribute \plusone \attribute\skippenaltyattribute \attributeunsetvalue \attribute\skiporderattribute \attributeunsetvalue \vskip#1\relax \endgroup} % these depend on bigskipamount cum suis so we'd better sync them \unexpanded\def\setupvspacing {\doifnextoptionalelse\setupvspacing_yes\setupvspacing_nop} \let\currentvspacing\s!default % hm, default, standard ... \def\setupvspacing_yes[#1]% {\edef\currentvspacing{#1}% \spac_whitespace_setup_nop % yes or no, was forgotten } \def\setupvspacing_nop {\ifx\empty\currentvspacing % mistakenly had an \else \let\currentvspacing\s!default \fi \spac_whitespace_setup_nop} \unexpanded\def\restorestandardblank % or default ? {\let\currentvspacing\v!standard} \let\synchronizevspacing\setupvspacing_nop % category:4 is default % this interface might change (into an \install, buw we will then keep this one hidden) \definevspacingamount[\v!none] [\zeropoint] [\zeropoint] \definevspacingamount[\v!big] [\bigskipamount] [\bodyfontlineheight] \definevspacingamount[\v!medium] [\medskipamount] [.5\bodyfontlineheight] \definevspacingamount[\v!small] [\smallskipamount] [.25\bodyfontlineheight] \definevspacingamount[\v!line] [\openlineheight] [\bodyfontlineheight] \definevspacingamount[\v!halfline] [.5\openlineheight] [.5\bodyfontlineheight] \definevspacingamount[\v!quarterline] [.25\openlineheight] [.25\bodyfontlineheight] \definevspacingamount[\v!formula] [\medskipamount] [.5\bodyfontlineheight] \definevspacingamount[\v!white] [\parskip] [\bodyfontwhitespace] \definevspacingamount[\v!height] [\strutheight] [\bodyfontstrutheight] \definevspacingamount[\v!depth] [\strutdepth] [\bodyfontstrutdepth] \definevspacingamount[-\v!line] [-\openlineheight] [-\bodyfontlineheight] \definevspacingamount[-\v!halfline] [-.5\openlineheight] [-.5\bodyfontlineheight] \definevspacingamount[-\v!quarterline][-.25\openlineheight][-.25\bodyfontlineheight] \definevspacingamount[\v!standard] [.75\openlineheight] [.75\openlineheight] % mkii compatible \def\bodyfontwhitespace {\dimexpr \ifdim\parskip=\zeropoint \zeropoint \else\ifgridsnapping \bodyfontlineheight \else \parskip \fi\fi \relax} \definevspacing[\v!preference][penalty:-500] % goodbreak \definevspacing[\v!samepage] [penalty:10000] % nobreak \definevspacing[\v!max] [category:1] \definevspacing[\v!force] [category:2] \definevspacing[\v!disable] [category:5] \definevspacing[\v!nowhite] [category:6] \definevspacing[\v!back] [category:7] \definevspacing[\v!always] [category:0] \definevspacing[\v!weak] [order:0] \definevspacing[\v!strong] [order:100] \definevspacing[\s!default] [\v!white] % was big for a while \dorecurse{10} % todo: other values < 4000 {\normalexpanded{\definevspacing[\v!samepage-\recurselevel][penalty:\the\numexpr4000+250*\recurselevel\relax]}} \definevspacing[\v!default] [\v!big] % todo: needs to adapt to \setupblank \definevspacing[\v!before] [\v!default] % but we need to avoid circular references \definevspacing[\v!inbetween][\v!default] % then \definevspacing[\v!after] [\v!before] \setupvspacing [\v!big] % alternatively [\v!standard] %D Maybe at some point we will differ between \type {\vspacing} and %D \type {\blank} (we needed the first one while playing with the %D new code). \unexpanded\def\inhibitblank {\vspacing[\v!disable]} % can be made faster \let\doinhibitblank\inhibitblank % keep this command, used in styles \let\defineblank \definevspacing \let\setupblank \setupvspacing \let\blank \vspacing \let\synchronizeblank \synchronizevspacing \let\defineblankmethod\definevspacingamount %D The following command is for Wolfgang. It has to be used with %D care as it does {\em not} work in tandem with the other spacing %D commands. \installcorenamespace{vspace} \unexpanded\def\definevspace {\dotripleempty\spac_vspace_define} \def\spac_vspace_define[#1][#2][#3]% {\ifthirdargument \setvalue{\??vspace#1:#2}{#3}% \else \setvalue{\??vspace:#1}{#2}% \fi} \letvalue{\??vspace:\s!unknown}\zeropoint \unexpanded\def\vspace {\dodoubleempty\spac_vspace_inject} \def\spac_vspace_inject[#1][#2]% {\par \ifvmode \removelastskip \vskip \csname\??vspace \ifsecondargument \ifcsname\??vspace#1:#2\endcsname #1:#2% \else\ifcsname\??vspace:#2\endcsname :#2% \else :\s!unknown \fi\fi \else\iffirstargument \ifcsname\??vspace:#1\endcsname :#1% \else :\s!unknown \fi \else \ifcsname\??vspace:\s!default\endcsname :\s!default \else :\s!unknown \fi \fi\fi \endcsname \relax \fi} %D Some preliminary code: a simple and fast hanger, for usage in %D macros (moved from cont-new). \installcorenamespace {hanging} \installdirectcommandhandler \??hanging {hanging} \setuphanging [\c!distance=.5\emwidth, \c!location=\v!left, \c!n=\zerocount] \unexpanded\def\starthanging {\dontleavehmode\bgroup \dosingleempty\spac_hanging_start} \unexpanded\def\stophanging {\endgraf \egroup} \let\m_spac_hanging_location\empty \def\spac_hanging_start[#1]% {\doifassignmentelse{#1} {\let\m_spac_hanging_location\empty \setupcurrenthanging[#1]}% {\edef\m_spac_hanging_location{#1}}% \ifx\m_spac_hanging_location\empty \edef\m_spac_hanging_location{\directhangingparameter\c!location}% \fi \dowithnextboxcs\spac_hanging_finish\hbox} \def\spac_hanging_finish {\scratchdistance\directhangingparameter\c!distance\relax \ifdim\ht\nextbox>\strutht \setbox\nextbox\tbox{\box\nextbox}% \fi \scratchcounter\directhangingparameter\c!n\relax \ifnum\scratchcounter>\zerocount \hangafter-\scratchcounter \else \getboxheight\scratchdimen\of\box\nextbox \getnoflines\scratchdimen \hangafter-\noflines \fi \ht\nextbox\strutht \dp\nextbox\strutdp \scratchwidth\dimexpr\wd\nextbox+\scratchdistance\relax \ifx\m_spac_hanging_location\v!right \hangindent-\scratchwidth \rlap{\hskip\dimexpr\hsize-\wd\nextbox\relax\box\nextbox}% \else \hangindent\scratchwidth \llap{\box\nextbox\hskip\scratchdistance}% \fi \ignorespaces} %D \macros %D {startfixed} %D %D \starttyping %D \startitemize %D \startitem \externalfigure[cow][height=1cm] \stopitem %D \startitem \externalfigure[cow][height=1cm] \stopitem %D %D \startitem \startfixed \externalfigure[cow][height=1cm]\stopfixed \stopitem %D \startitem \startfixed[high]\externalfigure[cow][height=1cm]\stopfixed \stopitem %D \startitem \startfixed[low] \externalfigure[cow][height=1cm]\stopfixed \stopitem %D \startitem \startfixed[lohi]\externalfigure[cow][height=1cm]\stopfixed \stopitem %D %D \startitem test \par \startfixed \externalfigure[koe][height=1cm]\stopfixed \stopitem %D \startitem test \par \startfixed[high]\externalfigure[koe][height=1cm]\stopfixed \stopitem %D \startitem test \par \startfixed[low] \externalfigure[koe][height=1cm]\stopfixed \stopitem %D \startitem test \par \startfixed[lohi]\externalfigure[koe][height=1cm]\stopfixed \stopitem %D \stopitemize %D \stopbuffer %D %D \typebuffer \getbuffer \installcorenamespace{fixedalternatives} \unexpanded\def\startfixed {\bgroup \dosingleempty\typo_fixed_start} \def\typo_fixed_start {\ifhmode \expandafter\typo_fixed_start_h \else \expandafter\typo_fixed_start_v \fi} \def\typo_fixed_start_h[#1]% {\let\stopfixed\typo_fixed_stop_h \dowithnextbox{\typo_fixed_finish{#1}}% \vbox\bgroup %ignorespaces \setlocalhsize} \unexpanded\def\typo_fixed_stop_h {%removeunwantedspaces \egroup \egroup} \def\typo_fixed_start_v[#1]% {\let\stopfixed\typo_fixed_stop_v \startbaselinecorrection} \unexpanded\def\typo_fixed_stop_v {\stopbaselinecorrection \egroup} \letvalue{\??fixedalternatives \v!high}\bbox \letvalue{\??fixedalternatives \v!low}\tbox \letvalue{\??fixedalternatives \v!middle}\vcenter \letvalue{\??fixedalternatives \v!lohi}\vcenter \letvalue{\??fixedalternatives\s!unknown}\tbox \letvalue{\??fixedalternatives\s!default}\tbox \unexpanded\def\typo_fixed_finish#1% {\expandnamespacevalue\??fixedalternatives{#1}\s!default{\box\nextbox}} % %D Forgotten already: % % \def\shapefill{\vskip\zeropoint\s!plus\lineheight\s!minus\lineheight\relax} \protect \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-gb.mkiv��������������������������������0000644�0001750�0001750�00000001024�11754241457�024121� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=cont-uk, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ English Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {english} \def\defaultlanguagetag{gb} \input context.mkiv \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1251.lua�����������������������������0000644�0001750�0001750�00000004574�11571377075�024262� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['regi-cp1251'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F } ������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-spr.mkii�������������������������������0000644�0001750�0001750�00000004745�11754241457�024306� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-spr, %D version=2002.11.11, %D title=\CONTEXT\ Page Macros, %D subtitle=Spreading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Spreading} % This module is experimental and not yet official! \unprotect \newbox\spreadbox \newif \ifinspread \chardef\showspreadmode=1 % beware, ugly overload, to be redone \def\normalsettextpagecontent#1#2#3% #2 and #3 will disappear {\setbox#1\hbox {\vbox to \textheight {\offinterlineskip \freezetextwidth \hsize\textwidth % local variant of \sethsize \boxmaxdepth\maxdepth \noindent % content can be < \hsize \dopagecontents#2#3}}% \dp#1\zeropoint \setbox#1\hbox to \makeupwidth {\ifinspread \ifvoid\spreadbox \global\setbox\spreadbox\box#1% \copy\spreadbox\hss % left page \else % prevent duplicate writes in normal run \ifarrangingpages \else \ifcase\showspreadmode \global\setbox\spreadbox\null \wd\spreadbox\makeupwidth \ht\spreadbox\textheight \fi \fi \hss\box\spreadbox % right page \fi \else \hss\box#1\hss % never change the \hss's \fi}} \def\doflushspread {\ifinspread \ifvoid\spreadbox\else % this page will be discarded later \null \page \fi \fi } \def\startspread {\bgroup \ifdoublesided \page[\v!left]% %\setsystemmode{spread}% \inspreadtrue \scratchdimen2\textwidth \advance\scratchdimen2\backspace \expanded{\setuplayout[\c!textwidth=\the\scratchdimen]}% \def\startspread{\bgroup\let\stopspread\egroup}% \let\stopspread\dostopspread \else \let\stopspread\egroup \fi} \let\stopspread\relax \def\dostopspread {\kern\zeropoint\page \inspreadfalse \setuplayout[\c!textwidth=\textwidth] \page[\v!left] \egroup} \protect \endinput % texexec --arr --pdf test % % \setuplayout[width=middle] % \setuppapersize[A4][A3,landscape] % \setuppagenumbering[alternative=doublesided] % \setuparranging[2UP] % % \starttext % % \dorecurse{3}{\input tufte } % % \startspread % \dorecurse{10}{\input tufte } % \stopspread % % \dorecurse{3}{\input tufte } % % \stoptext ���������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-cod.mkiv�������������������������������0000644�0001750�0001750�00000005151�12130411274�024266� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=luat-cod, %D version=2005.05.26, %D title=\CONTEXT\ Lua Macros, %D subtitle=Code, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Macros / Code} \unprotect %D We cannot use the following due to the fact that existing usage %D demanded duplicating hashes. %D %D \starttyping %D \def\expanded#1{\normalexpanded{\noexpand#1}} % ## mess %D \stoptyping \newif\ifproductionrun %D Originally we compiled the \LUA\ files externally and loaded %D then at runtime, but when the amount grew, we realized that %D we needed away to store them in the format, which is what %D bytecode arrays do. And so the following is obsolete: %D %D \starttyping %D \setnewconstant\ctxluaembeddingmode \plusone %D %D 0 = external compilation and loading %D 1 = runtime compilation and embedding %D \stoptyping %D %D Allocation of \LUA\ engines has changed too. The original idea %D was to have multiple \LUA\ instances and it worked that way for %D several years. Hoewver in practice we used only one engine because %D scripts need to share data anyway. So eventually \LUATEX\ got only %D one instance. Because each call is reentrant there is not much %D danger for crashes. %D %D Most code here has changed after version 0.60 as part of adaption to %D new functionality. We no longer support the hooks for initializing %D code as this can be done at the \LUA\ end. % we can drop the \zerocount as it's default \let\ctxdirectlua \directlua \let\ctxlatelua \latelua \def\ctxsprint #1{\directlua{tex.sprint(tex.ctxcatcodes,#1)}} % saves tokens \def\ctxwrite #1{\directlua{tex.write(#1)}} % saves tokens \def\ctxcommand #1{\directlua{commands.#1}} % saves tokens \def\ctxdirectcommand#1{\directlua{commands.#1}} % saves tokens \def\ctxlatecommand #1{\latelua {commands.#1}} % saves tokens \def\ctxreport #1{\directlua{logs.writer[[#1]]}} %D Take your choice \unknown \let\ctxlua \ctxdirectlua \let\luacode \ctxdirectlua \let\lateluacode \ctxlatelua \let\directluacode\ctxdirectlua %D Reporting the version of \LUA\ that we use is done as follows: \edef\luaversion{\ctxwrite{_VERSION}} \def\registerctxluafile#1#2{\ctxlua{lua.registercode("#1","#2")}} \def\ctxloadluafile #1{\ctxlua{lua.registercode("#1")}} \registerctxluafile{luat-cod}{1.001} % \everydump\expandafter{\the\everydump\ctxlua{lua.finalize()}} \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-08.mkii�������������������������������0000644�0001750�0001750�00000011564�11754241457�024050� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=x-fig-08, %D version=2002.06.27, %D title=\CONTEXT\ Style File, %D subtitle=Resource Reporting, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 TODO: make rlxtools callable from texexec (class), speeds up things. %D Experimental module! %D %D \starttyping %D <rl:library> %D <rl:usage> %D <rl:type>figure</rl:type> %D <rl:state>found|missing</rl:state> %D <rl:name>filename</rl:name> %D <rl:suffix>filesuffix</rl:suffix> %D <rl:width>width in pt</rl:width> %D <rl:height>height in pt</rl:height> %D <rl:comment>text</rl:comment> %D </rl:usage> %D </rl:library> %D \stoptyping \unprotect \doifnotmode{\systemmodeprefix\v!first}{\protect\endinput} \def\XMLrlprefix{rl:} \newwrite\XMLrllog \def\openXMLresourcelog {\immediate\openout\XMLrllog\jobname.rlg\relax \immediate\write\XMLrllog{\XMLbanner{standalone='yes'}}% \immediate\write\XMLrllog{\writtenXMLstart{\XMLrlprefix library}}} \def\closeXMLresourcelog {\immediate\write\XMLrllog{\writtenXMLend{\XMLrlprefix library}}% \immediate\closeout\XMLrllog} \let\figurefilelabel \empty \let\figurefileoriginal \empty \let\figurefilefile \empty \let\figurefilepath \empty \let\figurefileconversion\empty \let\figurefileprefix \empty \def\XMLfeedbackresource#1#2% {\begingroup \defconvertedcommand\currentresourcecomment\currentresourcecomment \doifnothing\figurefilefile{\edef\figurefilefile{\figurefilename.\figurefiletype}}% \immediate\write\XMLrllog {\writtenXMLelement{\XMLrlprefix usage}% {\writtenXMLelement{\XMLrlprefix type}{#2}% 'figure' not the type in \extenalfigure \writtenXMLelement{\XMLrlprefix state}{#1}% 'missing' 'found' etc \ifx\figurefilelabel\empty \ifx\figurelabel\s!dummy \else % otherwise label equals filename \writtenXMLelementcs{\XMLrlprefix label}\figurelabel \fi \writtenXMLelementcs{\XMLrlprefix file}\figurefilefile % complete name \writtenXMLelementcs{\XMLrlprefix name}\figurefilename % no suffix \writtenXMLelementcs{\XMLrlprefix suffix}\figurefiletype \else % \figurefilelabel is set in x-res-04 and since % we fetch from this base using the normal % \externalfigure macro, the label becomes the % name of the figurebase \writtenXMLelementcs{\XMLrlprefix base}\figurefilename \writtenXMLelementcs{\XMLrlprefix label}\figurefilelabel \writtenXMLelementcs{\XMLrlprefix file}\figurefilefile \fi \writtenXMLelementcs{\XMLrlprefix path}\figurefilepath \writtenXMLelementcs{\XMLrlprefix original}\figurefileoriginal \writtenXMLelementcs{\XMLrlprefix conversion}\figurefileconversion \writtenXMLelementcs{\XMLrlprefix prefix}\figurefileprefix \writtenXMLelementcs{\XMLrlprefix cache}\figurefilecache \ifnum\figurefilepage>\zerocount \writtenXMLelement{\XMLrlprefix page}\figurefilepage \fi \writtenXMLelementcs{\XMLrlprefix comment}\currentresourcecomment \ifconditional\externalfigureflush \writtenXMLelementcs{\XMLrlprefix width}\figurewidth \writtenXMLelementcs{\XMLrlprefix height}\figureheight \fi}}% \endgroup} \def\XMLfeedbackexternalfigure {\doifmodeelse{*\v!figure}% {\XMLfeedbackresource{found}}% {\XMLfeedbackresource{\ifconditional\externalfigureflush missing\else registered\fi}}% {figure}} \setvariables [rl:manipulate] [file=rlxtools.rlx] % \startsetups[rl:manipulate] % \doiflocfileelse{\jobname.rlx} % {\installprogram{texmfstart rlxtools --manipulate kpse:\jobname.rlx \jobname.rlg}} % {\installprogram{texmfstart rlxtools --manipulate kpse:\getvariabledefault{rl:manipulate}{file}{rlxtools.rlx} \jobname.rlg}} % \stopsetups % % no longer need for \setups[rl:manipulate] \ifx\nofconversionfigures\undefined \chardef\nofconversionfigures\plusone \fi \appendtoks \ifcase\nofconversionfigures \writestatus\m!systems{not registering rlxtools (manipulator)}% \else \writestatus\m!systems{registering rlxtools (manipulator)}% \doiflocfileelse{\jobname.rlx} {\installprogram{texmfstart rlxtools --manipulate "kpse:\jobname.rlx" "\jobname.rlg"}} {\installprogram{texmfstart rlxtools --manipulate "kpse:\getvariabledefault{rl:manipulate}{file}{rlxtools.rlx}" "\jobname.rlg"}}% \fi \to \everybye % \everylastshipout \appendtoks \openXMLresourcelog \to \everystarttext \appendtoks \closeXMLresourcelog \to \everystoptext \let \feedbackexternalfigure \XMLfeedbackexternalfigure \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-foxet.mkii��������������������������������0000644�0001750�0001750�00000001322�11754241457�024146� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=x-foxet, %D version=2004.03.12, % based on earlier experiments %D title=\FOXET, %D subtitle=Formatting Objects, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is just a shortcut for: % fo = basic formatting objects % fe = basic formatting extensions % fx = extra formatting objects % fu = user formatting objects % fs = setup \usemodule[fo,fe,fx,fu,fs,mathml] \usemodule[fp] % passivetex bonus % \autoXMLnamespace[mml,mm,mathml] \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otx.lua��������������������������������0000644�0001750�0001750�00000030523�12161703335�024156� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['font-otx'] = { version = 1.001, comment = "companion to font-otf.lua (analysing)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- context only local type = type if not trackers then trackers = { register = function() end } end ----- trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end) local fonts, nodes, node = fonts, nodes, node local allocate = utilities.storage.allocate local otf = fonts.handlers.otf local analyzers = fonts.analyzers local initializers = allocate() local methods = allocate() analyzers.initializers = initializers analyzers.methods = methods ---------.useunicodemarks = false local a_state = attributes.private('state') local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local math_code = nodecodes.math local traverse_id = node.traverse_id local traverse_node_list = node.traverse local end_of_math = node.end_of_math local fontdata = fonts.hashes.identifiers local categories = characters and characters.categories or { } -- sorry, only in context local chardata = characters and characters.data local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register --[[ldx-- <p>Analyzers run per script and/or language and are needed in order to process features right.</p> --ldx]]-- -- never use these numbers directly local s_init = 1 local s_rphf = 7 local s_medi = 2 local s_half = 8 local s_fina = 3 local s_pref = 9 local s_isol = 4 local s_blwf = 10 local s_mark = 5 local s_pstf = 11 local s_rest = 6 local states = { init = s_init, medi = s_medi, fina = s_fina, isol = s_isol, mark = s_mark, rest = s_rest, rphf = s_rphf, half = s_half, pref = s_pref, blwf = s_blwf, pstf = s_pstf, } local features = { init = s_init, medi = s_medi, fina = s_fina, isol = s_isol, -- mark = s_mark, } analyzers.states = states analyzers.features = features analyzers.useunicodemarks = false -- todo: analyzers per script/lang, cross font, so we need an font id hash -> script -- e.g. latin -> hyphenate, arab -> 1/2/3 analyze -- its own namespace function analyzers.setstate(head,font) local useunicodemarks = analyzers.useunicodemarks local tfmdata = fontdata[font] local descriptions = tfmdata.descriptions local first, last, current, n, done = nil, nil, head, 0, false -- maybe make n boolean while current do local id = current.id if id == glyph_code and current.font == font then done = true local char = current.char local d = descriptions[char] if d then if d.class == "mark" then done = true current[a_state] = s_mark elseif useunicodemarks and categories[char] == "mn" then done = true current[a_state] = s_mark elseif n == 0 then first, last, n = current, current, 1 current[a_state] = s_init else last, n = current, n+1 current[a_state] = s_medi end else -- finish if first and first == last then last[a_state] = s_isol elseif last then last[a_state] = s_fina end first, last, n = nil, nil, 0 end elseif id == disc_code then -- always in the middle current[a_state] = s_midi last = current else -- finish if first and first == last then last[a_state] = s_isol elseif last then last[a_state] = s_fina end first, last, n = nil, nil, 0 if id == math_code then current = end_of_math(current) end end current = current.next end if first and first == last then last[a_state] = s_isol elseif last then last[a_state] = s_fina end return head, done end -- in the future we will use language/script attributes instead of the -- font related value, but then we also need dynamic features which is -- somewhat slower; and .. we need a chain of them local function analyzeinitializer(tfmdata,value) -- attr local script, language = otf.scriptandlanguage(tfmdata) -- attr local action = initializers[script] if not action then -- skip elseif type(action) == "function" then return action(tfmdata,value) else local action = action[language] if action then return action(tfmdata,value) end end end local function analyzeprocessor(head,font,attr) local tfmdata = fontdata[font] local script, language = otf.scriptandlanguage(tfmdata,attr) local action = methods[script] if not action then -- skip elseif type(action) == "function" then return action(head,font,attr) else action = action[language] if action then return action(head,font,attr) end end return head, false end registerotffeature { name = "analyze", description = "analysis of (for instance) character classes", default = true, initializers = { node = analyzeinitializer, }, processors = { position = 1, node = analyzeprocessor, } } -- latin methods.latn = analyzers.setstate local arab_warned = { } local function warning(current,what) local char = current.char if not arab_warned[char] then log.report("analyze","arab: character %C has no %a class",char,what) arab_warned[char] = true end end local mappers = { l = s_init, -- left d = s_medi, -- double c = s_medi, -- joiner r = s_fina, -- right u = s_isol, -- nonjoiner } local classifiers = { } -- we can also use this trick for devanagari local first_arabic, last_arabic = characters.blockrange("arabic") local first_syriac, last_syriac = characters.blockrange("syriac") local first_mandiac, last_mandiac = characters.blockrange("mandiac") local first_nko, last_nko = characters.blockrange("nko") table.setmetatableindex(classifiers,function(t,k) local c = chardata[k] local v = false if c then local arabic = c.arabic if arabic then v = mappers[arabic] if not v then log.report("analyze","error in mapping arabic %C",k) -- error v = false end elseif k >= first_arabic and k <= last_arabic or k >= first_syriac and k <= last_syriac or k >= first_mandiac and k <= last_mandiac or k >= first_nko and k <= last_nko then if categories[k] == "mn" then v = s_mark else v = s_rest end else end end t[k] = v return v end) function methods.arab(head,font,attr) local first, last = nil, nil local c_first, c_last = nil, nil local current, done = head, false while current do local id = current.id if id == glyph_code and current.font == font and current.subtype<256 and not current[a_state] then done = true local char = current.char local classifier = classifiers[char] if not classifier then if last then if c_last == s_medi or c_last == s_fina then last[a_state] = s_fina else warning(last,"fina") last[a_state] = s_error end first, last = nil, nil elseif first then if c_first == s_medi or c_first == s_fina then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end first = nil end elseif classifier == s_mark then current[a_state] = s_mark elseif classifier == s_isol then if last then if c_last == s_medi or c_last == s_fina then last[a_state] = s_fina else warning(last,"fina") last[a_state] = s_error end first, last = nil, nil elseif first then if c_first == s_medi or c_first == s_fina then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end first = nil end current[a_state] = s_isol elseif classifier == s_medi then if first then last = current c_last = classifier current[a_state] = s_medi else current[a_state] = s_init first = current c_first = classifier end elseif classifier == s_fina then if last then if last[a_state] ~= s_init then last[a_state] = s_medi end current[a_state] = s_fina first, last = nil, nil elseif first then -- if first[a_state] ~= s_init then -- -- needs checking -- first[a_state] = s_medi -- end current[a_state] = s_fina first = nil else current[a_state] = s_isol end else -- classifier == s_rest current[a_state] = s_rest if last then if c_last == s_medi or c_last == s_fina then last[a_state] = s_fina else warning(last,"fina") last[a_state] = s_error end first, last = nil, nil elseif first then if c_first == s_medi or c_first == s_fina then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end first = nil end end else if last then if c_last == s_medi or c_last == s_fina then last[a_state] = s_fina else warning(last,"fina") last[a_state] = s_error end first, last = nil, nil elseif first then if c_first == s_medi or c_first == s_fina then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end first = nil end if id == math_code then -- a bit duplicate as we test for glyphs twice current = end_of_math(current) end end current = current.next end if last then if c_last == s_medi or c_last == s_fina then last[a_state] = s_fina else warning(last,"fina") last[a_state] = s_error end elseif first then if c_first == s_medi or c_first == s_fina then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end end return head, done end methods.syrc = methods.arab methods.mand = methods.arab methods.nko = methods.arab directives.register("otf.analyze.useunicodemarks",function(v) analyzers.useunicodemarks = v end) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-chi.mkii�������������������������������0000644�0001750�0001750�00000122521�11754241457�024270� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=font-chi, %D version=1999.10.10, %D title=\CONTEXT\ Font Macros, %D subtitle=Chinese, %D author=Hans Hagen, %D date=\currentdate, %D suggestions=Wang Lei, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifx\handlechineseunicodeglyph\undefined \else \endinput \fi % NOT YET ADAPTED TO THE NEW FONT MACROS %D The first implementation (most of which is here) is based on %D the specific font layout. This is because not all glyphs are %D available in uniciode, which means that we cannot use %D unicode codepoints (yet); if it were possible we could use %D just one table per input encoding. \writestatus{loading}{ConTeXt Font Macros / Chinese} % much will to typo-chi.tex %D Still to be implemented: %D %D \startitemize %D \item columns left right touch %D \item distance = (hsize-n*bodyfontsize)/(n-1) %D \item char grids %D \item char tables %D \item all kind of rotated combinations %D \item hanging puctuation %D \item a few more encodings %D \item rotation list %D \stopitemize %M \setupbodyfont[chi] %M %M \def\WangLei{\purechinese{\uchar{205}{245}\uchar{192}{218}}} \useencoding[chi] %D When \WangLei\ sent me a mail asking if \CONTEXT\ was able %D to support Chinese, I wasn't sure if the answer could be %D yes. I knew that those languages, rich of glyphs, were %D typeset by \TEX, so in principle it should be possible. I %D asked or some more input and was told that there were %D \LATEX\ styles regarding those languages. When I unzipped %D the accompanying files, it became clear that I had to %D implement support for Chinese from scratch. There was a %D multitude of font, with rather unfamiliar encodings, a %D large collection of files with |<|at least for me|>| %D unknown purposes, and worse, the documentation was mainly %D in Chinese. %D %D So, \WangLei\ and I started exchanging some emails and it %D soon became clear that supporting Chinese was not that %D complicated at all. It mostly came to dealing with handling %D \UNICODE\ fonts. It also became clear that everything %D Chinese took place in the upper region of the eight bit %D character set. I wrote some macros that could process the %D small \type {Hello World} file \WangLei\ had send me, and %D after some bug fixes real Chinese came out. I started to %D like the look and fel of Chinese glyphs, so on we went. %D %D The first comments concerned spacing. The mix of English %D and Chinese demands some rather deliberate handling of %D spacing. Breaking lines was not so much a problem, and %D could be solved by adding some glue between Chinese glyphs. %D %D In the meantime had asked \WangLei\ for some language bound %D labels and texts, and implementing these was rather %D straightforward. But, there were still some issues to deal %D with: conversion of numbers, date handling and index %D sorting. %D %D I consider(ed) writing Chinese support to be a nice puzzle, %D since I have to act on chinese \CONTEXT\ code, where I only %D understand the \CONTEXT\ part. The drawings \WangLei\ made %D me (in drawing packages) were of great help. Since I write %D these modules from scratch, although I fall back on some %D basic encoding and font modules, I consider them to be %D rather clean. This cannot be said of all \CONTEXT\ font %D modules \type {-)}. \unprotect %D Because Chinese glyphs have more height than the average %D Latin glyph, and at the same time don't have much depth, %D we adapt the scale. %D %D Before and after the glyph we have to deal with Chinese %D spacing. Special attention is given to punctuation. %D %D \starttyping %D [some short nice chinese text with () and english] %D \stoptyping %D %D We insert a bit of stretch and introduce a signal to %D keep track of previous characters. We use a similar %D method in the units module, which may be a nice %D introduction to using signals. %D \macros %D {chineseunicodescale, chineseinterglyphskip, %D chineseunicodeheight, chineseunicodedepth, chinesespace} %D %D There are a few variables, that can be (re|)|set %D depending on the current font. They default to: % hm, why don't we use the normal unicodestrut mechanism? \def\chineseunicodescale {1.00} % not smaller than .85 \def\chineseunicodeheight {1.00} \def\chineseunicodedepth {1.00} \def\chineseinterglyphskip{0pt \!!plus .05em \!!minus .01em} \def\chinesesurroundskip {.25em \!!plus .15em \!!minus .05em} %D We define a few signals. As said, another example of %D using signals can be found in the module \type {m-units}. \newsignal\chineseLsignal % left boundary character \newsignal\chineseRsignal % right boundary character \newsignal\chineseSsignal % any other character (symbol) \chardef\chineseBstatus=0 % 0=unknown 1=left 2=right 3=chinese 4=nospace \chardef\chineseAstatus=0 % 0=unknown 1=left 2=right 3=space \chardef\chineseSstatus=0 % 0=unknown 1=left 2=right \sfcode`(=2000 % a temporary hack \def\chinesenobreak {\relax \iftracechinese \nobreak \kern-.5pt\color[red]{\vrule\!!width1pt}\kern-.5pt \nobreak \else \nobreak \fi} \newif\ifcorrectchineseboundarychars \def\chineseunskip {\unskip\unskip\unskip\unskip} \def\insertchineseglyph {\iftracechinese\tracedchineseglyph\else\insertunicodeglyph\fi} \newif\ifverticalchinese \def\handlechineseunicodeglyph {\ifinpagebody \horizontalchineseunicodeglyph \else\ifverticalchinese \verticalchineseunicodeglyph \else \horizontalchineseunicodeglyph \fi\fi} % chinese classes: left=1|right=2|center=3 \chardef\plusfour=4 \def\analyzechineseunicodeglyph % beware, no zerocount ! {\chardef\chineseSstatus0\getvalue{uc\number\unicodeposition}\relax} \def\analyzechineseunicodeenviroment {% left \ifx (\nextutoken \chardef\chineseAstatus\plusone \else \ifx [\nextutoken \chardef\chineseAstatus\plusone \else % right \ifx ,\nextutoken \chardef\chineseAstatus\plustwo \else \ifx .\nextutoken \chardef\chineseAstatus\plustwo \else \ifx ?\nextutoken \chardef\chineseAstatus\plustwo \else \ifx ;\nextutoken \chardef\chineseAstatus\plustwo \else \ifx :\nextutoken \chardef\chineseAstatus\plustwo \else \ifx !\nextutoken \chardef\chineseAstatus\plustwo \else \ifx )\nextutoken \chardef\chineseAstatus\plustwo \else \ifx ]\nextutoken \chardef\chineseAstatus\plustwo \else % space \ifx\nextutoken\blankspace \chardef\chineseAstatus\plusthree \else \ifx\nextutoken\space \chardef\chineseAstatus\plusthree \else \chardef\chineseAstatus\zerocount % unknown \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi % maybe save the last skip? \chardef\chineseBstatus\ifdim\lastskip=\zeropoint\plusfour\else\zerocount\fi \ifdim\lastskip=\chineseLsignal \chardef\chineseBstatus\plusone \else \ifdim\lastskip=\chineseRsignal \chardef\chineseBstatus\plustwo \else \ifdim\lastskip=\chineseSsignal \chardef\chineseBstatus\plusthree \else \scratchskip=\lastskip \unskip \ifdim\lastskip=\chineseLsignal \chardef\chineseBstatus\plusone \else \ifdim\lastskip=\chineseRsignal \chardef\chineseBstatus\plustwo \else \ifdim\lastskip=\chineseSsignal \chardef\chineseBstatus\plusthree \else \space\scratchskip=\lastskip \unskip \setbox\scratchbox=\hbox\bgroup (\space \ifdim\lastskip=\scratchskip \egroup \chardef\chineseBstatus\plusone \else \egroup \ifdim\scratchskip=\zeropoint \chardef\chineseBstatus\plusfour \fi \fi \fi\fi\fi \fi\fi\fi} \def\horizontalchineseunicodeglyph {\relax \ifhmode\else\dontleavehmode\fi % added \setunicodescale\chineseunicodescale % redundant \setunicodestrut\chineseunicodeheight\chineseunicodedepth % redundant \ifprocessingverbatim \iftracechinese \ruledhbox{\insertunicodeglyph}% \else \insertunicodeglyph \fi \else\ifx\nextutoken\relax \insertunicodeglyph \else \analyzechineseunicodeglyph \analyzechineseunicodeenviroment \ifcase\chineseSstatus\relax \ifcase\chineseBstatus\relax \chineseunskip \hskip\chinesesurroundskip % unknown \or \chineseunskip \chinesenobreak % left \or \ifcorrectchineseboundarychars\else\chineseunskip\fi \hskip\chineseinterglyphskip % right \or \chineseunskip \hskip\chineseinterglyphskip % chinese \or % whatever \fi \insertchineseglyph \ifcase\chineseAstatus\relax \hskip\chineseinterglyphskip % unknown \hskip\chinesesurroundskip \ifcase\chineseSstatus \hskip\chineseSsignal \or \hskip\chineseLsignal \else \hskip\chineseRsignal \fi \or \hskip\chineseinterglyphskip % left \chinesenobreak \hskip\chineseLsignal \or \chinesenobreak % right \hskip\chineseinterglyphskip \chinesenobreak \hskip\chineseRsignal \or \hskip\chineseinterglyphskip % space \hskip\chinesesurroundskip \hskip\chineseSsignal \fi \or % left \ifcorrectchineseboundarychars \let\unicodecharcommand\chineseleftcharcommand \fi \chineseunskip \insertchineseglyph \chinesenobreak \hskip\chineseLsignal \or % right \ifcorrectchineseboundarychars \let\unicodecharcommand\chineserightcharcommand \fi \chineseunskip \chinesenobreak \insertchineseglyph \hskip\chineseRsignal \else % center \chineseunskip \chinesenobreak \insertchineseglyph \hskip\chineseinterglyphskip \hskip\chineseRsignal \fi\fi \aftergroup\ignorespaces % watch this \fi} \def\verticalchineseunicodeglyph {\relax \ifprocessingverbatim % to do \horizontalchineseunicodeglyph \else \setunicodescale\chineseunicodescale % redundant \setunicodestrut\chineseunicodeheight\chineseunicodedepth % redundant \ifx\nextutoken\relax \insertchineseglyph \ifvmode % catches \hbox{...}, actually \hbox should be \vbox -) \nointerlineskip \fi \allowbreak \else \analyzechineseunicodeglyph \setbox\scratchbox\hbox to \hsize {\hss \ifcase\chineseSstatus\relax \insertchineseglyph \else % left / right \setbox\scratchbox\hbox{\insertchineseglyph}% \rotate[\c!rotation=270]{\box\scratchbox}% \fi \hss}% \ht\scratchbox\unicodeheight\strutht \dp\scratchbox\unicodedepth \strutdp \ifvmode % catches \hbox{...}, actually \hbox should be \vbox -) \nointerlineskip \fi \ifcase\prevchineseSstatus\relax \ifnum\chineseSstatus=\plustwo \par\nobreak\else\allowbreak\fi \or % left \par\nobreak \or % right \ifnum\chineseSstatus=\plustwo \par\nobreak\else\allowbreak\fi \fi \global\chardef\prevchineseSstatus\chineseSstatus % pagebody ... \box\scratchbox\par \fi \aftergroup\ignorespaces % watch this \fi} %D \macros %D {setupchinese,startvertical,nochinese} %D %D The previous macros implement horizontal as well as %D vertical typesetting. Vertical typesetting is implemented %D on top of the multi||column routines. \def\setupchinese {\dodoubleargument\getparameters[\??vt]} \def\startvertical {\dosingleempty\dostartvertical} \def\dostartvertical[#1]% {\bgroup \def\maxnofcolumns{25}% \verticalchinesetrue \global\chardef\prevchineseSstatus\zerocount \let\nochinese\nochineseinvertical \doif\@@vtn\v!fit {\dimen0=\textwidth \advance\dimen0 \@@vtdistance \dimen2=\bodyfontsize \advance\dimen2 \@@vtdistance \divide\dimen0 \number\dimen2 \edef\@@vtn{\number\dimen0}}% \startcolumns [\c!direction=\@@vtdirection, \c!balance=\@@vtbalance, \c!distance=\@@vtdistance, \c!n=\@@vtn, #1]} \def\stopvertical {\stopcolumns \egroup} \setupchinese [\c!direction=\v!left, \c!balance=\v!no, \c!n=\v!fit, \c!distance=1.5\bodyfontsize] %D We can set up vertical typesetting with \type %D {\setupchinese}. %D \macros %D {nochineseinvertical} %D %D English (non chinese) text is typeset rotated: \def\nochineseinvertical#1% {\par \setbox\scratchbox\hbox{\strut#1} \getnoflines{\wd\scratchbox} \setbox\scratchbox\hbox to \noflines\openlineheight {\hss\box\scratchbox\hss} \hbox to \hsize {\hss \rotate [\c!rotation=270] {\vbox to \ht\scratchbox{\vss\box\scratchbox\vss}}% \hss} \par} %D \macros %D {correctchineseboundarychars} %D %D Careful reading of the previous macro learns that we %D treat left and right glyphs differently. When we say %D %D \starttyping %D \correctchineseboundarycharstrue %D \stoptyping %D %D For the moment correction in on by default. \correctchineseboundarycharstrue \def\chineserightcharcommand#1% {\iftracechinese\ruledhbox\else\hbox\fi \!!to .5em{#1\hss}% \hskip.25em\!!plus .25em\relax}% \def\chineseleftcharcommand#1% {\ifnum\chineseBstatus<4 \hskip.25em \!!plus .25em\relax\fi \iftracechinese\ruledhbox\else\hbox\fi \!!to .5em{\hss#1}}% % \def\chineserightcharcommand#1% % {\setbox\scratchbox=\hbox{#1}% % \scratchdimen=.5em % \ifdim\wd\scratchbox>\scratchdimen % \iftracechinese\ruledhbox\else\hbox\fi \!!to \scratchdimen % {\box\scratchbox\hss}% % \hskip.5\scratchdimen\!!plus.5\scratchdimen\relax % \else % \box\scratchbox % \fi} % \def\chineseleftcharcommand#1% % {\setbox\scratchbox=\hbox{#1}% % \scratchdimen=.5em % \ifdim\wd\scratchbox>\scratchdimen % \ifnum\chineseBstatus<4 % \hskip.5\scratchdimen\!!plus.5\scratchdimen\relax % \fi % \iftracechinese\ruledhbox\else\hbox\fi \!!to \scratchdimen % {\hss\box\scratchbox}% % \else % \box\scratchbox % \fi} %D The long list of numbers in the previous macro identify the %D characters where special care is needed for breaking lines. %D A linebreak is not permitted before: %D %D \def\DoIt #1 #2 % %D {\hbox{\hbox to 2em{\uchar{#1}{#2}\hss}#1 #2}\par} %D %D \startcolumns[n=5] %D \DoIt 161 162 \DoIt 161 163 \DoIt 161 164 \DoIt 161 167 \DoIt 161 173 %D \DoIt 161 175 \DoIt 161 177 \DoIt 161 179 \DoIt 161 181 \DoIt 161 183 %D \DoIt 161 185 \DoIt 161 187 \DoIt 161 189 \DoIt 161 191 \DoIt 161 227 %D \DoIt 161 228 \DoIt 161 229 \DoIt 163 161 \DoIt 163 162 \DoIt 163 167 %D \DoIt 163 169 \DoIt 163 172 \DoIt 163 174 \DoIt 163 186 \DoIt 163 187 %D \DoIt 163 190 \DoIt 163 191 \DoIt 163 221 \DoIt 163 253 %D \stopcolumns %D %D A linebreak is not permitted after the following glyphs: %D %D \startcolumns[n=5] %D \DoIt 161 174 \DoIt 161 176 \DoIt 161 178 \DoIt 161 180 \DoIt 161 182 %D \DoIt 161 184 \DoIt 161 186 \DoIt 161 188 \DoIt 161 190 \DoIt 163 168 %D \DoIt 163 219 \DoIt 163 224 \DoIt 163 251 %D \stopcolumns %D \macros %D {tracechinesetrue, showchinesetracelegend} %D %D When we say \type {\tracechinesetrue}, we get some %D insight in the way \CONTEXT\ handles the Chinese glyphs. %D The symbols and color used represent: %D %D \showchinesetracelegend \newif\iftracechinese \def\showchinesetracelegend {\definetabulate[\s!dummy][|c|l|l|l|]% \startdummy \HL \NC \bf key \NC \bf meaning \NC \bf glyph \NC \bf keys \NC\NR \HL \NC u \NC unknown character type \NC \color[green]{current} \NC u l r \NC\NR \NC l \NC left boundary character \NC \color[red]{previous} \NC u l r c n \NC\NR \NC r \NC right boundary character \NC \color[blue]{next} \NC u l r s \NC\NR \NC c \NC chinese character \NC \NC \NC\NR \NC s \NC following space \NC \NC \NC\NR \NC n \NC no preceding space \NC \NC \NC\NR \HL \stopdummy} \def\tracedchineseglyph {\dontleavehmode \ruledhbox {\setbox\scratchbox\hbox{\insertunicodeglyph}% \hbox to \wd\scratchbox {\localcolortrue \copy\scratchbox \infofont \hskip-\wd\scratchbox \hbox to \wd\scratchbox {\hss \color[green]{\ifcase\chineseSstatus\relax u\or l\or r\fi}% \hss}% \hskip-\wd\scratchbox \lower\dp\scratchbox\hbox to \wd\scratchbox {\hss \color[red]{\ifcase\chineseBstatus\relax u\or l\or r\or c\or n\fi}% \hss \color[blue]{\ifcase\chineseAstatus\relax u\or l\or r\or s\fi}% \hss}}}} %D The following example shows how tracing works. %D %D \start \tracechinesetrue %D һθǽܶĵ֧֡ĵ %D ѯ \nochinese{\CONTEXT} ǷܴʱѾԹ %D еĺ꼯ûеõζŶĵֻ֧û %D ʵ֡ %D %D һ(θ) () ܶĵ֧֡ĵ, %D ѯ\nochinese{\CONTEXT}ǷܴʱѾ %D Թеĺ꼯ûеõζŶĵ֧ %D ûʵ֡. %D \stop %D Because fonts are defined each time a \UNICODE\ is %D encountered |<|which is less inefficient than one would %D imagine, because \TEX\ is optimized quite well in this %D repect|>| we can define macros like this to take care of %D font switches. When available, one can add definitions %D for italic, slanted, bold fonts and combinations of these. %D \macros %D {chinesenumber} %D %D The chinese numbering systems rather straightforward. First %D there are the digits: %D %D \starttabulate[|c|c|c|c|c|c|c|c|c|c|] %D \NC 0 \NC 1 \NC 2 \NC 3 \NC 4 \NC 5 \NC 6 \NC 7 \NC 8 \NC 9 \NC\NR %D \NC \chinesenumber{0} \NC \chinesenumber{1} \NC \chinesenumber{2} %D \NC \chinesenumber{3} \NC \chinesenumber{4} \NC \chinesenumber{5} %D \NC \chinesenumber{6} \NC \chinesenumber{7} \NC \chinesenumber{8} %D \NC \chinesenumber{9} \NC\NR %D \stoptabulate %D %D Apart from these numbers, we have dedicated representations %D of some powers of~$10$. %D %D \starttabulate[|c|c|c|c|c|] %D \NC 10 \NC 100 \NC 1000 \NC 10000 \NC 100000000 \NC\NR %D \NC \chinesenumber{10} \NC \chinesenumber{100} %D \NC \chinesenumber{1000} \NC \chinesenumber{10000} %D \NC \chinesenumber{100000000} \NC\NR %D \stoptabulate %D %D The number~12 is a combination of $1\times10+2$, or: %D \chinesenumber {12}, while~22 becomes \chinesenumber {22}. %D The numbers below 20 are treated a bit different, just like %D numbers with series of $0$'s. So $2\times10$ comes out as %D two glyphs, but $1\times10$ as one, because in the latter %D case the~$1$ is redundant. The same is true for the powers %D of~10. %D %D \starttabulate[|r|r|r|r|r|r|] %D \NC 1 \NC \chinesenumber {1} \NC %D 9 \NC \chinesenumber {9} \NC %D 4 \NC \chinesenumber {4} \NC\NR %D \NC 11 \NC \chinesenumber {11} \NC %D 99 \NC \chinesenumber {99} \NC %D 16 \NC \chinesenumber {16} \NC\NR %D \NC 111 \NC \chinesenumber {111} \NC %D 999 \NC \chinesenumber {999} \NC %D 256 \NC \chinesenumber {256} \NC\NR %D \NC 1111 \NC \chinesenumber {1111} \NC %D 9999 \NC \chinesenumber {9999} \NC %D 65536 \NC \chinesenumber {65536} \NC\NR %D \stoptabulate %D %D The implementation is rather simple. For internal purposes, %D we let zero expand to~0. The digits $0-9$ and numbers $10$, %D $100$, $1000$, $10000$ and $100000000$ are hard coded. % This was the first implementation, before \WangLei\ asked % me to look into Big Five encoding, so, like everthing in % \TEX, things become a bit more complicated, but also more % versatile. % % \starttypen % \def\chinesedigit#1% % {\ifnum #1=100000000 \uchar{210}{218}% 100000000 % \else\ifnum #1=10000 \uchar{205}{242}% 10000 % \else\ifnum #1=1000 \uchar{199}{167}% 1000 % \else\ifnum #1=100 \uchar{176}{217}% 100 % \else\ifnum #1=10 \uchar{202}{174}% 10 % \else\ifcase#1 \uchar{193}{227}% 0 % \or \uchar{210}{187}% 1 % \or \uchar{182}{254}% 2 % \or \uchar{200}{253}% 3 % \or \uchar{203}{196}% 4 % \or \uchar{206}{229}% 5 % \or \uchar{193}{249}% 6 % \or \uchar{198}{223}% 7 % \or \uchar{176}{203}% 8 % \or \uchar{190}{197}% 9 % \fi\fi\fi\fi\fi\fi} % \stoptypen %D We will implement four methods, the one described earlier, %D a derived one with capitalized characters, an extended %D version of the first method, and a rather Arabic method. %D %D \starttabulate[|l|l|] %D \HL %D \NC \bf command \NC \bf number 39 \NC\NR %D \HL %D \NC \type{\normalchinesenumber} \NC \normalchinesenumber {39} \NC\NR %D \NC \type{\capitalizedchinesenumber} \NC \capitalizedchinesenumber{39} \NC\NR %D \NC \type{\arabicchinesenumber} \NC \arabicchinesenumber {39} \NC\NR %D \NC \type{\extendedchinesenumber} \NC \extendedchinesenumber {39} \NC\NR %D \HL %D \stoptabulate %D %D We use a dirty trick to enable Chinese Capital Digits. In %D the encoding vectors, we define these by appending a suffix %D \type {*} to the digit, which in the following macro is %D appended or not (by passing \type {\empty}). \def\chinesedigit#1#2% #2: suffix, here * or \empty {\udigit{\chineseencoding}{\number#1#2}} % Normal Chinese Number \def\normalchinesenumber#1% {\expandafter\dochinesenumber\number#1\relax\empty} \def\dochinesenumber#1#2\relax#3% {\ifnum#1#2<10 % 1-10 \chinesedigit{#1}#3% \else\ifnum#1#2<20 % 11-99 \chinesedigit{10}#3% \dodochinesenumberA#2\relax#3% \else \dodochinesenumber#1#2\relax#3% \fi\fi} \def\dodochinesenumber#1#2\relax#3% {\ifnum#1=0 \chinesedigit{0}#3% \dododochinesenumber0#2\relax#3% \else\ifnum#1#2<10 % 1-10 \chinesedigit{#1#2}#3% \dodochinesenumberA#2\relax#3% \else\ifnum#1#2<100 % 11-99 \dodochinesenumber#1\relax#3% \chinesedigit{10}#3% \dodochinesenumberA#2\relax#3% \else\ifnum#1#2<1000 % 100-999 \dodochinesenumber#1\relax#3% \chinesedigit{100}#3% \dodochinesenumberA#2\relax#3% \else\ifnum#1#2<10000 % 1000-9999 \dodochinesenumber#1\relax#3% \chinesedigit{1000}#3% \dodochinesenumberA#2\relax#3% \else\ifnum#1#2<100000 % 10000-99999 \dodochinesenumber#1\relax#3% \chinesedigit{10000}#3% \dodochinesenumberA#2\relax#3% \else\ifnum#1#2<1000000 % 100000-999999 \dodochinesenumberB#1#2\relax#3% \else\ifnum#1#2<10000000 % 1000000-9999999 \dodochinesenumberC#1#2\relax#3% \else\ifnum#1#2<100000000 % 10000000-99999999 \dodochinesenumberD#1#2\relax#3% \else\ifnum#1#2<1000000000 % 10000000-99999999 \dochinesenumber#1\relax#3% \chinesedigit{100000000}#3% \dododochinesenumber#2\relax#3% \else \dodochinesenumberE#1#2\relax#3% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} \def\dododochinesenumber#1#2\relax#3% {\ifnum#1=0 \ifnum0#2>0 \dododochinesenumber#2\relax#3\fi \else \dodochinesenumber#1#2\relax#3% \fi} \def\dodochinesenumberA#1\relax#2% {\ifcase0#1 \else\dodochinesenumber#1\relax#2\fi} \def\dodochinesenumberB#1#2#3\relax#4% {\dochinesenumber#1#2\relax#4% \chinesedigit{10000}#4% \dododochinesenumber#3\relax#4} \def\dodochinesenumberC#1#2#3#4\relax#5% {\dochinesenumber#1#2#3\relax#5% \chinesedigit{10000}#5% \dododochinesenumber#4\relax#5} \def\dodochinesenumberD#1#2#3#4#5\relax#6% {\dochinesenumber#1#2#3#4\relax#6% \chinesedigit{10000}#6% \dododochinesenumber#5\relax#6} \def\dodochinesenumberE#1#2#3\relax#4% {\dochinesenumber#1#2\relax#4% \chinesedigit{100000000}#4% \dododochinesenumber#3\relax#4} % Capitalized Chinese Number \def\capitalizedchinesenumber#1% {\expandafter\dochinesenumber\number#1\relax*} % Extended Chinese Number \def\extendedchinesenumber#1% {\expandafter\doextendedchinesenumber\number#1\relax} \def\doextendedchinesenumber#1#2\relax% {\ifnum #1#2<20 % 0-19 \dochinesenumber#1#2\relax\empty \else\ifnum#1#2<30 % 20-29 \chinesedigit{20}\empty \ifcase#2\else\chinesedigit{2#2}\fi \else\ifnum#1#2<40 % 30-39 \chinesedigit{30}\empty \ifcase#2\else\chinesedigit{3#2}\fi \else \dochinesenumber#1#2\relax\empty \fi\fi\fi} % Arabic Chinese Number \def\arabicchinesenumber#1% {\expandafter\doarabicchinesenumber\number#1@\relax} \def\doarabicchinesenumber#1#2\relax {\if#1@\else \chinesedigit{#1}\empty \doarabicchinesenumber#2\relax \fi} % The short call: \def\chinesenumber{\normalchinesenumber} % \dorecurse{40} % {\hbox % {\processingverbatimtrue % \hbox to 1cm{\hss\recurselevel}\quad % \hbox to 3cm{\hss\strut\normalchinesenumber {\recurselevel}}\quad % \hbox to 3cm{\hss\strut\capitalizedchinesenumber{\recurselevel}}\quad % \hbox to 3cm{\hss\strut\arabicchinesenumber {\recurselevel}}\quad % \hbox to 3cm{\hss\strut\extendedchinesenumber {\recurselevel}}\crlf}} %D The next table demonstates the correctness of the %D conversion macro. %D %D \startbuffer %D \starttable[|l|l|l|l|l|l|] %D \HL %D \NC number \NC converter \NC hard coded \NC %D number \NC converter \NC hard coded\NC \SR %D \HL %D \NC 1 \NC \chinesenumber{1} \NC һ \NC %D 0 \NC \chinesenumber{0} \NC \NC\FR %D \NC 11 \NC \chinesenumber{11} \NC ʮһ \NC %D 10 \NC \chinesenumber{10} \NC ʮ \NC\MR %D \NC 111 \NC \chinesenumber{111} \NC һһʮһ \NC %D 100 \NC \chinesenumber{100} \NC һ \NC\MR %D \NC 101 \NC \chinesenumber{101} \NC һһ \NC %D 120 \NC \chinesenumber{120} \NC һٶʮ \NC\MR %D \NC 1111 \NC \chinesenumber{1111} \NC һǧһһʮһ \NC %D 1000 \NC \chinesenumber{1000} \NC һǧ \NC\MR %D \NC 1001 \NC \chinesenumber{1001} \NC һǧһ \NC %D 1020 \NC \chinesenumber{1020} \NC һǧʮ \NC\MR %D \NC 11111 \NC \chinesenumber{11111} \NC һһǧһһʮһ \NC %D 10000 \NC \chinesenumber{10000} \NC һ \NC\MR %D \NC 10001 \NC \chinesenumber{10001} \NC һһ \NC %D 10200 \NC \chinesenumber{10200} \NC һ \NC\LR %D \HL %D \NC 111111 \NC \chinesenumber{111111} \NC ʮһһǧһһʮһ \NC %D 100000 \NC \chinesenumber{100000} \NC ʮ \NC\FR %D \NC 1111111 \NC \chinesenumber{1111111} \NC һһʮһһǧһһʮһ \NC %D 1000000 \NC \chinesenumber{1000000} \NC һ \NC\MR %D \NC 11111111 \NC \chinesenumber{11111111} \NC һǧһһʮһһǧһһʮһ \NC %D 10000000 \NC \chinesenumber{10000000} \NC һǧ \NC\MR %D \NC 111111111 \NC \chinesenumber{111111111} \NC һһǧһһʮһһǧһһʮһ \NC %D 100000000 \NC \chinesenumber{100000000} \NC һ \NC\MR %D \NC 1111111111 \NC \chinesenumber{1111111111} \NC ʮһһǧһһʮһһǧһһʮһ \NC %D 1000000000 \NC \chinesenumber{1000000000} \NC ʮ \NC\LR %D \HL %D \stoptable %D \stopbuffer %D %D \placetable{Some Chinese number examples.}{\getbuffer} %D Although the conversion can be hooked into most commands %D that deal with numbers |<|those familiar with \TEX\ macro %D programming will notice that the macro if fully %D expandable|>| in many cases Chinese documents use western %D digits. So, in practice, the change that the next example %D shows up, is minimal. %D %D \starttabulate[|r|r|c|] %D \NC 2546 \NC \chinesenumber {2546} \NC \NC\NR %D \NC 9258 \NC \chinesenumber {9258} \NC $+$ \NC\NR %D \HL %D \NC 11804 \NC \chinesenumber {11804} \NC \NC\NR %D \stoptabulate %D %D While in arabic arithmics addition leads to more digits, in %D Chinese the number of glyphs can (temporary) decrease. %D Given that the number of people dealing with Chinese is %D considerably larger than the number of latin speaking %D people, a successor of \TEX\ definitely must provide a %D \type {\chinesenumeral} primitive. \defineconversion [c] [\normalchinesenumber] \defineconversion [chinese] [\normalchinesenumber] \defineconversion [nc] [\normalchinesenumber] \defineconversion [normalchinese] [\normalchinesenumber] \defineconversion [cc] [\capitalizedchinesenumber] \defineconversion [capitalizedchinese] [\capitalizedchinesenumber] \defineconversion [ec] [\extendedchinesenumber] \defineconversion [extendedchinese] [\extendedchinesenumber] \defineconversion [ac] [\arabicchinesenumber] \defineconversion [arabicchinese] [\arabicchinesenumber] %D Date conversion: \defineconversion [cn] [\v!day] [\chinesenumber] \defineconversion [cn] [\v!month] [\chinesenumber] \defineconversion [cn] [\v!year] [\chinesenumber] %D \macros %D {SimChi, TraChi} %D %D These components enable us to construct dedicated Chinese %D font switches, like: \setupunicodefont [chinese] [ \c!scale=\chineseunicodescale, \c!height=\chineseunicodeheight, \c!depth=\chineseunicodedepth, \c!strut=\v!yes, \c!interlinespace=\v!yes, \c!conversion=\chinesenumber, \c!commands=\setchineseencoding, % needed for digits \c!command=\handlechineseunicodeglyph] %D For the moment, this encoding is implemented rather ugly. The %D trick is to move the encoding value from the current font %D definition to the \type {\chineseencoding} macro. \let\chineseencoding\empty \def\setchineseencoding % normally SomeChineseRegular {\getfontfileparameters\unicodestyle \ifx\currentfontfileencoding\undefined \else \let\chineseencoding\currentfontfileencoding \fi} %D We could have said: %D %D \starttyping %D \defineunicodefont %D [SimChi] %D [SimplifiedChinese] %D [\c!scale=\chineseunicodescale, %D \c!height=\chineseunicodeheight, %D \c!depth=\chineseunicodedepth, %D \c!conversion=\chinesenumber, %D \c!commands=\setchineseencoding, % needed for digits %D \c!command=\handlechineseunicodeglyph] %D \stoptyping %D %D However, the former definitions is more general. Next we %D map a few fonts: \definefontsynonym [SimplifiedChineseRegular] [gbsong] [encoding=gbk] \definefontsynonym [SimplifiedChineseSlanted] [gbsongsl] [encoding=gbk] \definefontsynonym [SimplifiedChineseItalic] [gbsongsl] [encoding=gbk] \definefontsynonym [SimplifiedChineseBold] [gbhei] [encoding=gbk] \definefontsynonym [SimplifiedChineseBoldSlanted] [gbheisl] [encoding=gbk] \definefontsynonym [SimplifiedChineseBoldItalic] [gbheisl] [encoding=gbk] \definefontsynonym [TraditionalChineseRegular] [b5song] [encoding=big5] \definefontsynonym [TraditionalChineseSlanted] [b5songsl] [encoding=big5] \definefontsynonym [TraditionalChineseItalic] [b5songsl] [encoding=big5] \definefontsynonym [TraditionalChineseBold] [b5hei] [encoding=big5] \definefontsynonym [TraditionalChineseBoldSlanted] [b5heisl] [encoding=big5] \definefontsynonym [TraditionalChineseBoldItalic] [b5heisl] [encoding=big5] % we need to move this to typescripts \doifelse \currentregime {utf} { \definefontsynonym [SimplifiedChineseRegular] [ChineseRegular] \definefontsynonym [SimplifiedChineseSlanted] [ChineseSlanted] \definefontsynonym [SimplifiedChineseItalic] [ChineseItalic] \definefontsynonym [SimplifiedChineseBold] [ChineseBold] \definefontsynonym [SimplifiedChineseBoldSlanted] [ChineseBoldSlanted] \definefontsynonym [SimplifiedChineseBoldItalic] [ChineseBoldItalic] \definefontsynonym [TraditionalChineseRegular] [ChineseRegular] \definefontsynonym [TraditionalChineseSlanted] [ChineseSlanted] \definefontsynonym [TraditionalChineseItalic] [ChineseItalic] \definefontsynonym [TraditionalChineseBold] [ChineseBold] \definefontsynonym [TraditionalChineseBoldSlanted][ChineseBoldSlanted] \definefontsynonym [TraditionalChineseBoldItalic] [ChineseBoldItalic] \definefontsynonym [ChineseRegular] [uni-htsong-][encoding=cjk-uni] \definefontsynonym [ChineseSlanted] [uni-htsong-][encoding=cjk-uni] \definefontsynonym [ChineseItalic] [uni-htsong-][encoding=cjk-uni] \definefontsynonym [ChineseBold] [uni-hthei-] [encoding=cjk-uni] \definefontsynonym [ChineseBoldSlanted][uni-hthei-] [encoding=cjk-uni] \definefontsynonym [ChineseBoldItalic] [uni-hthei-] [encoding=cjk-uni] \loadmapfile[uni-htsong.map] \loadmapfile[uni-htfs.map] \loadmapfile[uni-hthei.map] \loadmapfile[uni-htkai.map] } { \loadmapfile[gbk] } \defineunicodefont [SimChi] [SimplifiedChinese] [chinese] \defineunicodefont [TraChi] [TraditionalChinese] [chinese] %D We default to these so called Simplified Chinese fonts. \SimChi %D In addition to these fonts, we (pre|)|define some commonly %D used fonts: \definefontsynonym [SimplifiedChineseSongTiRegular] [gbsong] [encoding=gbk] \definefontsynonym [SimplifiedChineseSongTiSlanted] [gbsongsl] [encoding=gbk] \definefontsynonym [SimplifiedChineseSongTiBold] [gbsong] [encoding=gbk] \definefontsynonym [SimplifiedChineseSongTiBoldSlanted] [gbsongsl] [encoding=gbk] \definefontsynonym [TraditionalChineseSongTiRegular] [b5song] [encoding=big5] \definefontsynonym [TraditionalChineseSongTiSlanted] [b5songsl] [encoding=big5] \definefontsynonym [TraditionalChineseSongTiBold] [b5song] [encoding=big5] \definefontsynonym [TraditionalChineseSongTiBoldSlanted] [b5songsl] [encoding=big5] \definefontsynonym [SimplifiedChineseHeiTiRegular] [gbhei] [encoding=gbk] \definefontsynonym [SimplifiedChineseHeiTiSlanted] [gbheisl] [encoding=gbk] \definefontsynonym [SimplifiedChineseHeiTiBold] [gbhei] [encoding=gbk] \definefontsynonym [SimplifiedChineseHeiTiBoldSlanted] [gbheisl] [encoding=gbk] \definefontsynonym [TraditionalChineseHeiTiRegular] [b5hei] [encoding=big5] \definefontsynonym [TraditionalChineseHeiTiSlanted] [b5heisl] [encoding=big5] \definefontsynonym [TraditionalChineseHeiTiBold] [b5hei] [encoding=big5] \definefontsynonym [TraditionalChineseHeiTiBoldSlanted] [b5heisl] [encoding=big5] \definefontsynonym [SimplifiedChineseKaiTiRegular] [gbkai] [encoding=gbk] \definefontsynonym [SimplifiedChineseKaiTiSlanted] [gbkaisl] [encoding=gbk] \definefontsynonym [SimplifiedChineseKaiTiBold] [gbkai] [encoding=gbk] \definefontsynonym [SimplifiedChineseKaiTiBoldSlanted] [gbkaisl] [encoding=gbk] \definefontsynonym [TraditionalChineseKaiTiRegular] [b5kai] [encoding=big5] \definefontsynonym [TraditionalChineseKaiTiSlanted] [b5kaisl] [encoding=big5] \definefontsynonym [TraditionalChineseKaiTiBold] [b5kai] [encoding=big5] \definefontsynonym [TraditionalChineseKaiTiBoldSlanted] [b5kaisl] [encoding=big5] \definefontsynonym [SimplifiedChineseFangSongRegular] [gbfs] [encoding=gbk] \definefontsynonym [SimplifiedChineseFangSongSlanted] [gbfssl] [encoding=gbk] \definefontsynonym [SimplifiedChineseFangSongBold] [gbfs] [encoding=gbk] \definefontsynonym [SimplifiedChineseFangSongBoldSlanted] [gbfssl] [encoding=gbk] \definefontsynonym [TraditionalChineseFangSongRegular] [b5fs] [encoding=big5] \definefontsynonym [TraditionalChineseFangSongSlanted] [b5fssl] [encoding=big5] \definefontsynonym [TraditionalChineseFangSongBold] [b5fs] [encoding=big5] \definefontsynonym [TraditionalChineseFangSongBoldSlanted] [b5fssl] [encoding=big5] \definefontsynonym [SimplifiedChineseLiShuRegular] [gbli] [encoding=gbk] \definefontsynonym [SimplifiedChineseLiShuSlanted] [gblisl] [encoding=gbk] \definefontsynonym [SimplifiedChineseLiShuBold] [gbli] [encoding=gbk] \definefontsynonym [SimplifiedChineseLiShuBoldSlanted] [gblisl] [encoding=gbk] \definefontsynonym [TraditionalChineseLiShuRegular] [b5li] [encoding=big5] \definefontsynonym [TraditionalChineseLiShuSlanted] [b5lisl] [encoding=big5] \definefontsynonym [TraditionalChineseLiShuBold] [b5li] [encoding=big5] \definefontsynonym [TraditionalChineseLiShuBoldSlanted] [b5lisl] [encoding=big5] %D The following definitions provide us the commands to switch %D to these fonts. \defineunicodefont [SimSongTi] [SimplifiedChineseSongTi] [chinese] \defineunicodefont [TraSongTi] [TraditionalChineseSongTi] [chinese] \defineunicodefont [SimHeiTi] [SimplifiedChineseHeiTi] [chinese] \defineunicodefont [TraHeiTi] [TraditionalChineseHeiTi] [chinese] \defineunicodefont [SimKaiTi] [SimplifiedChineseKaiTi] [chinese] \defineunicodefont [TraKaiTi] [TraditionalChineseKaiTi] [chinese] \defineunicodefont [SimFangSong] [SimplifiedChineseFangSong] [chinese] \defineunicodefont [TraFangSong] [TraditionalChineseFangSong] [chinese] \defineunicodefont [SimLiShu] [SimplifiedChineseLiShu] [chinese] \defineunicodefont [TraLiShu] [TraditionalChineseLiShu] [chinese] % \definealternativestyle [ChineseTitleFont] [\bfd\SimKaiTi] [] %D \macros %D {purechinese} %D %D Use this macro to suppress spacing around Chinese text. \def\purechinese#1% evt geen rek {\hskip\chineseSsignal\relax #1\unskip\unskip\unskip \hskip\chineseSsignal\relax} %D \macros %D {stillchinese} %D %D Use the next macro when you want the next item to be put %D tight to the previous chinese character. \def\stillchinese {\hskip\chineseSsignal\relax} %D \macros %D {nochinese} %D %D When we want to be sure of non||Chinese inline text, %D we can package the for instance english text in \type %D {\nochinese}. \def\nochinese#1% {\unskip\unskip\unskip \hskip\chinesesurroundskip \hskip\chineseinterglyphskip\relax #1% \hskip\chineseinterglyphskip\relax \hskip\chinesesurroundskip \ignorespaces} %D \macros %D {chisize} %D %D Chinese font sizes are specified in a different way, %D using positive and negative numbers: \def\chisize#1% {\ifnum#11<0 % a trick to catch -0 \ifcase#1\space36\or24\or18\or15\or12\or9\or\else6.5\fi \else \ifcase#1\space42\or26\or22\or16\or14\or10.5\or7.5\or5.5\else5\fi \fi pt} %D So: %D %D \startbuffer %D [\chisize{-1}] [\chisize{7}] [\chisize{+4}] %D \stopbuffer %D %D \typebuffer %D %D gives: %D %D \getbuffer %D %D The full range of sizes is: %D %D \starttabulate[|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|] %D \NC 8 \NC 7 \NC -6 \NC 6 \NC %D -5 \NC 5 \NC -4 \NC 4 \NC %D -3 \NC 3 \NC -2 \NC 2 \NC %D -1 \NC 1 \NC -0 \NC 0 \NC\NR %D \NC\chisize {8}\NC\chisize{7}\NC\chisize{-6}\NC\chisize{6}\NC %D \chisize{-5}\NC\chisize{5}\NC\chisize{-4}\NC\chisize{4}\NC %D \chisize{-3}\NC\chisize{3}\NC\chisize{-2}\NC\chisize{2}\NC %D \chisize{-1}\NC\chisize{1}\NC\chisize{-0}\NC\chisize{0}\NC\NR %D \stoptabulate %D Now it's time for some real Chinese. This example %D also shows that font switching is supported. %D %D \startnarrower %D \midaligned{\tfd ˮͷ} %D \blank %D \midaligned{\tfb ﵩƪ滳ɡ} %D \blank %D \midaligned{\tfb } %D \blank %D ¼ʱУѾ졣֪ϹڣϦǺꣿ˷ȥ %D ֿ¥ߴʤŪӰ˼䣿 %D \blank %D ת󣬵ͻߡӦкޣƫʱԲбϣ %D Բȱ¹ȫԸ˳ãǧﹲ濾ꡣ %D \stopnarrower %D %D The english translation is: %D %D \startnarrower %D \midaligned{\tfd Tune: Prelude to the Melody of Water} %D \blank %D \midaligned{\tfb On the night of the Mid||Autumn Festival of %D 1076, I drank happily till dawn and wrote this in my cups %D while thinking of Zi||you.} %D \blank %D \midaligned{\tfb Su Shi} %D \blank %D How long will the bright moon appear? Wine||cup in hand, I %D ask the sky. I do not know waht time of year it would be %D tonight in the palace on high. Riding the wind, there I %D would fly, yet I fear the crystal palace would be far too %D high and cold for me. I rise and dance, with my shadow I %D play. On high as on earth, would it be as gay? %D \blank %D The moon goes round the mansion red though gauze||draped %D windows soft to shed her light upon the sleepless bed. %D Against man she should have no spite. Why then when people %D part is she oft full and bright? Men have sorrow and joy, %D they part or meet again; The moon may be bright or dim, she %D may wax or wane. There has been nothing perfect since the %D olden days. So let us wish that man will live long as he %D can! Though miles apart, we'll share the beauty she %D displays. %D \stopnarrower %D This package is written in the city of Hasselt, a pretty %D small town in the |<|compared to China real small|>| %D Netherlands. Like most dutch cities, even this small one %D has a chinese restaurant, run by chinese, speaking chinese, %D and |<|indeed|>| writing chinese. Eating there will never %D be the same, since now I can at least pretend to know the %D glyphs all around the place. The numbers should pose me no %D problems, but I fear I will never manage to recognize those %D scribles they draw on their pads when thay take your order. %D To make our lives more easy, we put it here (too): \setuptyping[\c!tab=\v!no] \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/core-uti.lua��������������������������������0000644�0001750�0001750�00000023106�12130411274�024120� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['core-uti'] = { version = 1.001, comment = "companion to core-uti.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: keep track of changes here (hm, track access, and only true when -- accessed and changed) --[[ldx-- <p>A utility file has always been part of <l n='context'/> and with the move to <l n='luatex'/> we also moved a lot of multi-pass info to a <l n='lua'/> table. Instead of loading a <l n='tex'/> based utility file under different setups, we now load a table once. This saves much runtime but at the cost of more memory usage.</p> --ldx]]-- local format, match = string.format, string.match local next, type, tostring = next, type, tostring local concat = table.concat local texcount = tex.count local definetable = utilities.tables.definetable local accesstable = utilities.tables.accesstable local migratetable = utilities.tables.migratetable local serialize = table.serialize local packers = utilities.packers local allocate = utilities.storage.allocate local mark = utilities.storage.mark local report_passes = logs.reporter("job","passes") job = job or { } local job = job job.version = 1.22 -- make sure we don't have old lua 5.1 hash leftovers job.packversion = 1.02 -- make sure we don't have old lua 5.1 hash leftovers -- some day we will implement loading of other jobs and then we need -- job.jobs --[[ldx-- <p>Variables are saved using in the previously defined table and passed onto <l n='tex'/> using the following method. Of course one can also directly access the variable using a <l n='lua'/> call.</p> --ldx]]-- local savelist, comment = { }, { } function job.comment(key,value) comment[key] = value end job.comment("version",job.version) local enabled = true directives.register("job.save",function(v) enabled = v end) function job.disablesave() -- can be command enabled = false end function job.initialize(loadname,savename) job.load(loadname) -- has to come after structure is defined ! luatex.registerstopactions(function() if enabled and not status.lasterrorstring or status.lasterrorstring == "" then job.save(savename) end end) end function job.register(collected, tobesaved, initializer, finalizer) savelist[#savelist+1] = { collected, tobesaved, initializer, finalizer } end -- as an example we implement variables local tobesaved, collected, checksums = allocate(), allocate(), allocate() local jobvariables = { collected = collected, tobesaved = tobesaved, checksums = checksums, } job.variables = jobvariables if not checksums.old then checksums.old = md5.HEX("old") end -- used in experiment if not checksums.new then checksums.new = md5.HEX("new") end -- used in experiment job.register('job.variables.checksums', checksums) local rmethod, rvalue local function initializer() tobesaved = jobvariables.tobesaved collected = jobvariables.collected checksums = jobvariables.checksums rvalue = collected.randomseed if not rvalue then rvalue = math.random() math.setrandomseedi(rvalue,"initialize") rmethod = "initialized" else math.setrandomseedi(rvalue,"previous run") rmethod = "resumed" end tobesaved.randomseed = rvalue for cs, value in next, collected do context.setxvalue(cs,value) end end job.register('job.variables.collected', tobesaved, initializer) function jobvariables.save(cs,value) tobesaved[cs] = value end local packlist = { "numbers", "metadata", "sectiondata", "prefixdata", "numberdata", "pagedata", "directives", "specification", "processors", -- might become key under directives or metadata -- "references", -- we need to rename of them as only one packs (not structures.lists.references) } local jobpacker = packers.new(packlist,job.packversion) -- jump number when changs in hash job.pack = true -- job.pack = false directives.register("job.pack",function(v) pack = v end) local _save_, _load_, _others_ = { }, { }, { } -- registers timing function job.save(filename) -- we could return a table but it can get pretty large statistics.starttiming(_save_) local f = io.open(filename,'w') if f then f:write("local utilitydata = { }\n\n") f:write(serialize(comment,"utilitydata.comment",true,true),"\n\n") for l=1,#savelist do local list = savelist[l] local target = format("utilitydata.%s",list[1]) local data = list[2] local finalizer = list[4] if type(finalizer) == "function" then finalizer() end if job.pack then packers.pack(data,jobpacker,true) end local definer, name = definetable(target,true,true) -- no first and no last f:write(definer,"\n\n",serialize(data,name,true,true),"\n\n") end if job.pack then packers.strip(jobpacker) f:write(serialize(jobpacker,"utilitydata.job.packed",true,true),"\n\n") end f:write("return utilitydata") f:close() end statistics.stoptiming(_save_) end local function load(filename) if lfs.isfile(filename) then local okay, data = pcall(dofile,filename) if okay and type(data) == "table" then local jobversion = job.version local datacomment = data.comment local dataversion = datacomment and datacomment.version or "?" if dataversion ~= jobversion then report_passes("version mismatch: %s <> %s",dataversion,jobversion) else return data end else os.remove(filename) -- probably a bad file report_passes("removing stale job data file %a, restart job",filename) os.exit(true) -- trigger second run end end end function job.load(filename) statistics.starttiming(_load_) local utilitydata = load(filename) if utilitydata then local jobpacker = utilitydata.job.packed for l=1,#savelist do local list = savelist[l] local target = list[1] local initializer = list[3] local result = accesstable(target,utilitydata) local done = packers.unpack(result,jobpacker,true) if done then migratetable(target,mark(result)) if type(initializer) == "function" then initializer(result) end else report_passes("pack version mismatch") end end end statistics.stoptiming(_load_) end function job.loadother(filename) statistics.starttiming(_load_) _others_[#_others_+1] = file.nameonly(filename) local utilitydata = load(filename) if utilitydata then local jobpacker = utilitydata.job.packed local unpacked = { } for l=1,#savelist do local list = savelist[l] local target = list[1] local result = accesstable(target,utilitydata) local done = packers.unpack(result,jobpacker,true) if done then migratetable(target,result,unpacked) end end unpacked.job.packed = nil -- nicer in inspecting return unpacked end statistics.stoptiming(_load_) end -- eventually this will end up in strc-ini statistics.register("startup time", function() return statistics.elapsedseconds(statistics,"including runtime option file processing") end) statistics.register("jobdata time",function() if enabled then if #_others_ > 0 then return format("%s seconds saving, %s seconds loading, other files: %s",statistics.elapsedtime(_save_),statistics.elapsedtime(_load_),concat(_others_," ")) else return format("%s seconds saving, %s seconds loading",statistics.elapsedtime(_save_),statistics.elapsedtime(_load_)) end else if #_others_ > 0 then return format("nothing saved, %s seconds loading, other files: %s",statistics.elapsedtime(_load_),concat(_others_," ")) else return format("nothing saved, %s seconds loading",statistics.elapsedtime(_load_)) end end end) statistics.register("callbacks", function() local total, indirect = status.callbacks or 0, status.indirect_callbacks or 0 local pages = texcount['realpageno'] - 1 if pages > 1 then return format("direct: %s, indirect: %s, total: %s (%i per page)", total-indirect, indirect, total, total/pages) else return format("direct: %s, indirect: %s, total: %s", total-indirect, indirect, total) end end) statistics.register("randomizer", function() if rmethod and rvalue then return format("%s with value %s",rmethod,rvalue) end end) function statistics.formatruntime(runtime) if not environment.initex then -- else error when testing as not counters yet local shipped = texcount['nofshipouts'] local pages = texcount['realpageno'] if pages > shipped then pages = shipped end if shipped > 0 or pages > 0 then local persecond = shipped / runtime if pages == 0 then pages = shipped end return format("%s seconds, %i processed pages, %i shipped pages, %.3f pages/second",runtime,pages,shipped,persecond) else return format("%s seconds",runtime) end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-ini.mkii�������������������������������0000644�0001750�0001750�00000041706�11754241457�024275� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=spec-ini, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: make this one more plain so that i can use it in plain jobs % todo: no args, named vars instead % maybe also drop multiple drivers and make simplify the default, then simplier defs \newif\ifsimplifyspecials \simplifyspecialstrue % see later %D We will forbid loading specials after the first page is %D shipped out. \ifx\realpageno\undefined \countdef\realpageno=0 \realpageno=1 \fi %D Specials are \TEX's channel to the outside world. They make %D \TEX\ even more platform independant and permit easy %D adaption to new developments. One major drawback of specials %D is that they have to be supported by printer drivers. We've %D tried to overcome this problem by implementing specials as %D a sort of drivers themselves. \writestatus{loading}{ConTeXt Special Macros / Initialization} \unprotect %D \TEX\ produces files in the \DVI\ format. This format is %D well defined and stable. In this format one||byte commands %D are used which can optionally be followed by length %D specifiers and arguments. The \DVI||format incorporates a %D channel to the outside world. This channel is activated by %D the \TEX\ primitive \type {\special}. The sequence %D %D \starttyping %D \special{Hello here I am.} %D \stoptyping %D %D results in \DVI||codes: %D %D \starttyping %D xxx1 16 Hello here I am. %D \stoptyping %D %D The \type {xxx1} is represented in byte code 239 and the %D number of following bytes in a~1, 2, 3 or~4 byte number. So %D here we get $1+1+16$ bytes of code. %D %D Translating these codes is upto the \DVI\ driver. It's %D common use to ignore specials that cannot be interpreted, so %D the example string should have no consequences for the %D output. %D \macros %D {jobsuffix} %D %D By default, \TEX\ produces \DVI\ files which can be %D converted to other filetypes. Sometimes it is handy to %D know what the target file will be. In other driver %D modules we wil set \type {\jobsuffix} to \type {pdf}. \def\jobsuffix{dvi} \def\setjobsuffix#1% {\resetsystemmode\jobsuffix \edef\jobsuffix{#1}% \setsystemmode\jobsuffix} %D \macros %D {everyresetspecials} %D %D Now what will this one do? We'll see in a few lines. \newtoks \everyresetspecials \appendtoksonce \ifx\setjobsuffix\undefined\else\setjobsuffix{dvi}\fi \to \everyresetspecials %D A rather fundamental difference between special and direct %D settings is that the latter don't interfere with typesetting %D but must be set before the first shipout, while the specials %D must be packaged in the shipped out box in such a way that %D they don't interfere. \newif\ifspecialbasedsettings \specialbasedsettingstrue \appendtoksonce \specialbasedsettingstrue \to \everyresetspecials %D Because there is no standardization in the use of specials, %D more than one driver or program can be supported. The %D specials are grouped in libraries. Some of these are %D general, such as the \type{postscript} library, some are %D tuned to a special kind of program, like the \type{pdf} %D ones, and some support a specific driver, as we can see in %D the \type{yandy} library. A library is build with the %D commands: %D %D \starttyping %D \startspecials[name][inheritance] %D %D \definespecial\none{...} %D \definespecial\onlyone#1{...} %D \definespecial\alot#1#2#3#4{...} %D %D \stopspecials %D \stoptyping %D %D Because drivers can have overlap in low level macros, a %D mechanism of inheritance is implemented. The libraries %D defined as second argument are loaded first. %D %D Every special has to be predefined first. We do this with %D the command: %D %D \starttyping %D \installspecial [\none] [and] [0] %D \installspecial [\onlyone] [and] [1] %D \installspecial [\alot] [or] [4] %D \stoptyping %D %D This means as much as: there is a special names %D \type{\none} which has no arguments and has more than one %D appearance. The special \type{\alot} on the other hand has %D four arguments and is only defined once. Every instance in %D the libraries of a special of category \type{and} is %D executed when called upon, but only one special of %D category \type{or} can be active. Most of the %D \type{postscript}||specials are of category \type{or}, %D because they tend to interfere with driver specific ones. %D The interactive specials of \type{dviwindo} and \type{pdf} %D are an example of specials that can be called both. %D %D A library is defined in a file with the name %D \type{spec-...}. We load a library with the command: %D %D \starttyping %D \usespecials [list] %D \stoptyping %D %D where the list can contain one or more file tags, the %D \type{...} in the filename. The keyword \type{reset} %D resets all loaded specials. This is equivalent to %D \type{\resetspecials}. %D Although a mechanism of nesting can be implemented, we %D prefer to use a inheritance mechanism as mentioned. Calls %D upon \type{\usespecials} within a \type{\startspecials} %D would lead to confusion and errors. \newif\ifinheritspecials %D We define some local constants and variables. They look a %D bit horrible but we don't want conflicts. \def\@@specfil@@{@@spcfil@@} \def\@@speclst@@{@@spclst@@} \def\@@speccat@@{@@spccat@@} \def\@@specarg@@{@@spcarg@@} \def\@@specexc@@{@@spcexc@@} % not faster % % \def\@@specfil@@{@sp@f@} % \def\@@speclst@@{@sp@l@} % \def\@@speccat@@{@sp@c@} % \def\@@specarg@@{@sp@a@} % \def\@@specexc@@{@sp@e@} \let\currentspecial \empty \let\currentspecialfile\empty %D \macros %D {startspecials} %D %D Every library has a unique name, which is given as the first %D argument to \type{\startspecials}. When another library is %D defined with the same name, previous specials can be %D overruled. The name may differ from the file||tag. %D %D The optional second argument can consist of a list of %D libraries that are to be loaded first. \def\dostartspecials[#1][#2]% {\doifsomething{#2} {\processcommalist[#2]\dousespecials}% \doifelsenothing{#1} {\let\currentspecial\s!unknown} {\def\currentspecial{#1}}% \unprotect} \def\startspecials {\localpushmacro\currentspecial \dodoubleempty\dostartspecials} \def\stopspecials {\localpopmacro\currentspecial \protect} %D \macros %D {installspecial, %D resetspecials} %D %D We have to install specials before we can define and use %D them. The command itself is defined as a call to another %D command that executes one or more user||defined specials, %D depending of it's category: \type{or} versus \type{and}. %D %D The command \type{\installspecial} takes three %D (non||optional) arguments: the name of the command, the %D category it belongs to and the number of arguments it %D takes. %D %D With \type{\resetspecials} we can unload the predefined %D specials. Special reset actions |<|look in \type{spec-mis} %D for an example|>| can be assigned to the token register %D \type{\everyresetspecials}. \let\@@allspecials=\empty \def\doinstallspecial[#1][#2][#3]% {\letvalue{\@@speclst@@\string#1}\empty \setvalue{\@@speccat@@\string#1}{#2}% \setvalue{\@@specarg@@\string#1}{#3}% \addtocommalist{\string#1}\@@allspecials \def#1{\executespecial#1}} \def\installspecial {\dotripleargument\doinstallspecial} \def\resetspecials {\the\everyresetspecials \def\docommand##1% {\letvalue{\@@speclst@@##1}\empty}% \processcommacommand[\@@allspecials]\docommand} %D \macros %D {definespecial} %D %D The command \type{\definespecial} take the place of %D \type{\def} in the definition of a special. Just to be %D sure, we first check if the command is permitted, i.e. %D installed. If not, we give a warning and gobble the %D illegal command in an quite elegant way. %D %D If the command can be combined (\type{and}) with others, %D we append it to a list, otherwise (\type{or}) it becomes %D the only item in the list. \def\definespecial#1% {\ifx#1\undefined \showmessage\m!specials4{\string#1}% \def\next {\def\@@illegalspecial@@}% \else \def\next {\doifelsevalue{\@@speccat@@\string#1}{or} {\edef\@@newspeclst@@{\currentspecial}} {\edef\@@newspeclst@@{\getvalue{\@@speclst@@\string#1}}% \addtocommalist\currentspecial\@@newspeclst@@}% \setevalue{\@@speclst@@\string#1}{\@@newspeclst@@}% \setvalue{\currentspecial\string#1}}% \fi \next} %D \macros %D {usespecials} %D %D We use \type{\usespecials} to load a specific library. %D This command is only permitted outside the definition part. \def\dousespecials#1% {\doifelse{#1}\v!reset {\resetspecials} {\doifdefinedelse{\@@specfil@@#1} {\edef\currentspecialfile{\getvalue{\@@specfil@@#1}}} {\edef\currentspecialfile{#1}}% \makeshortfilename[\truefilename{\f!specialprefix\currentspecialfile}]% \startreadingfile \readsysfile{\shortfilename.mkii}{\showmessage\m!specials5\currentspecialfile}\donothing \stopreadingfile}} \def\usespecials[#1]% {\ifnum\realpageno<2 \doifelsenothing\currentspecial {\processcommalist[#1]\dousespecials} {\showmessage\m!specials6\empty}% \fi} %D \macros %D {executespecials} %D %D The command \type{\executespecials} is used to execute the %D defined specials. Once a special is installed, the special %D itself calls for this command, so it's not needed outside %D this module. One can use it if wanted. %D %D A former implementation grouped the execution. Recent %D additions however |<|like the specials that implement object %D handling|>| asked for non||grouped execution. %D \starttyping %D \def\executespecials#1#2% %D {\def\doonespecial##1% %D {\getvalue{##1\string#1}#2\relax}% %D \processcommacommand %D [\getvalue{\@@speclst@@\string#1}]\doonespecial} %D %D \def\executespecial#1% %D {\expandafter\ifcase\getvalue{\@@specarg@@\string#1}\relax %D \def\next% %D {\executespecials#1{}}% %D \or %D \def\next##1% %D {\executespecials#1{{##1}}}% %D \or %D \def\next##1##2% %D {\executespecials#1{{##1}{##2}}}% %D \or %D \def\next##1##2##3% %D {\executespecials#1{{##1}{##2}{##3}}}% %D \or %D \def\next##1##2##3##4% %D {\executespecials#1{{##1}{##2}{##3}{##4}}}% %D \or %D \def\next##1##2##3##4##5% %D {\executespecials#1{{##1}{##2}{##3}{##4}{##5}}}% %D \or %D \def\next##1##2##3##4##5##6% %D {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}}}% %D \or %D \def\next##1##2##3##4##5##6##7% %D {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}}% %D \or %D \def\next##1##2##3##4##5##6##7##8% %D {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}}% %D \or %D \def\next##1##2##3##4##5##6##7##8##9% %D {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}}% %D \else %D \def\next% %D {\message{illegal special: \string#1}}% %D \fi %D \next} %D \stoptyping %D %D Because specials happen quite often, we will use a bit more %D brute force. Keep in mind that we have to collect the %D arguments because we want to support more drivers at once. %D %D I tested this on the next test. Where the previous alternative %D took about 32 seconds, the new alternative takes 25 seconds. %D %D \starttyping %D \testfeature{10000}{\setbox0=\hbox{test \color[red]{oeps} test}} %D \stoptyping \def\@@exsp{exsp} \setvalue{\@@exsp0}{{}} \setvalue{\@@exsp1}#1{{{#1}}} \setvalue{\@@exsp2}#1#2{{{#1}{#2}}} \setvalue{\@@exsp3}#1#2#3{{{#1}{#2}{#3}}} \setvalue{\@@exsp4}#1#2#3#4{{{#1}{#2}{#3}{#4}}} \setvalue{\@@exsp5}#1#2#3#4#5{{{#1}{#2}{#3}{#4}{#5}}} \setvalue{\@@exsp6}#1#2#3#4#5#6{{{#1}{#2}{#3}{#4}{#5}{#6}}} \setvalue{\@@exsp7}#1#2#3#4#5#6#7{{{#1}{#2}{#3}{#4}{#5}{#6}{#7}}} \setvalue{\@@exsp8}#1#2#3#4#5#6#7#8{{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}} \setvalue{\@@exsp9}#1#2#3#4#5#6#7#8#9{{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}} %D \starttyping %D \def\executespecials#1% %D {\def\doonespecial##1% %D {\csname##1\xspecialcommand\endcsname#1\relax}% %D \@EA\rawprocesscommalist\@EA %D [\csname\@@speclst@@\xspecialcommand\endcsname]\doonespecial} %D %D \def\executespecial#1% %D {\def\xspecialcommand{\string#1}% %D \@EA\@EA\@EA\executespecials\csname\@@exsp\csname\@@specarg@@\xspecialcommand\endcsname\endcsname} %D \stoptyping %D Some more speed can be gained by using a dedicated string %D processing routine. Now we can bring down the execution %D time to 21 seconds, one third less than the original run time. \def\executespecials#1% {\@EA\let\@EA\speciallist\csname\@@speclst@@\xspecialcommand\endcsname \ifx\speciallist\empty\else \def\doonespecial##1% {\csname##1\xspecialcommand\endcsname#1\relax}% \@EA\dodoonespecial\speciallist,\end,% \fi} \def\executespecial#1% {\def\xspecialcommand{\string#1}% \@EA\@EA\@EA\executespecials\csname\@@exsp\csname\@@specarg@@\xspecialcommand\endcsname\endcsname} \def\dodoonespecial#1,% {\ifx\end#1\else \doonespecial{#1}\expandafter\dodoonespecial \fi} %D This kind of saving only shows up when making interative %D documents with lots of color switches. In such documents %D tens of thousands of special calls are rather normal. %D On a 650 Mhz Pentium, the previous test takes 15 seconds %D less (on about 65 seconds). When processing 2000 page %D interactive documents this saving can be neglected. %D In the previous macros, the \type{{{...}}} are needed %D because we pass all those arguments to the specials support %D macro. \let\openspecialfile \relax \let\closespecialfile \relax %D \macros %D {doifspecialavailableelse} %D %D For testing purposes (this was first needed when object %D support was implemented) we have: %D %D \starttyping %D \doifspecialavailableelse\specialcommand{true}{false} %D \stoptyping %D %D e.g: %D %D \starttyping %D \doifspecialavailableelse\doinsertobject{...}{...} %D \stoptyping \def\doifspecialavailableelse#1#2#3% {\doifelsevaluenothing{\@@speclst@@\string#1}{#3}{#2}} %D So far for the macros that deal with installing specials. %D In the file \type {spec-def} you will find the predefined %D specials. %D Now that we have seen the flexible way (permitting %D special chains) we will implement a faster and flat %D alternative. But only if flag si set. \ifsimplifyspecials \def\doinstallspecial[#1][#2][#3]% {\appendtoks\forgetspecial#1{#3}\to\everyresetspecials \@EA\chardef\csname\@@speclst@@\string#1\endcsname\zerocount \forgetspecial#1{#3}} \def\forgetspecial#1#2% {\ifcase#2\relax \let#1\relax \or \let#1\gobbleoneargument \or \let#1\gobbletwoarguments \or \let#1\gobblethreearguments \or \let#1\gobblefourarguments \or \let#1\gobblefivearguments \or \let#1\gobblesixarguments \or \let#1\gobblesevenarguments \or \let#1\gobbleeightarguments \or \let#1\gobbleninearguments \or \let#1\gobbletenarguments \fi} \def\resetspecials {\the\everyresetspecials} \def\definespecial#1% {\@EA\chardef\csname\@@speclst@@\string#1\endcsname=1 \def#1} \def\doifspecialavailableelse#1% {\ifcase\csname\@@speclst@@\string#1\endcsname \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \fi %D For quite some time the \CONTEXT\ way of specifying the %D output format has been: %D %D \starttyping %D \usespecials[ps,yy,win,pdf] %D \stoptyping %D %D Because at \PRAGMA\ we use \DVIPSONE, this was a suitable %D setting, but with \CONTEXT\ going public, the next sequence %D is more suitable for \DVIPS\ users: %D %D \starttyping %D \usespecials[reset,ps,tr,pdf] %D \stoptyping %D %D On the other hand, for \PDFTEX\ we needed: %D %D \starttyping %D \usespecials[tpd] %D \stoptyping %D %D To simplify things, I decided to provide a higher level %D command. %D %D \starttyping %D \defineoutput[name][specials] %D \setupoutput[name,...] %D \stoptyping %D %D In a \type {spec-def} you can find some examples. \def\defineoutput {\dodoubleargument\dodefineoutput} \def\dodefineoutput[#1][#2]% {\setvalue{\??ui#1}{#2}} \def\dosetupoutput#1% {\doifdefinedelse{\??ui#1} {\processcommacommand[\getvalue{\??ui#1}]\dousespecials} {\doifdefinedelse{\@@specfil@@#1} {\dousespecials{#1}} {\showmessage\m!specials7{#1}}}} % Beware, from now on changing the (default) driver files demands % remaking the format (no big deal, since only i adapt the driver % and need delayed loading). \let\currentoutput\empty \def\setupoutput[#1]% {\doifnot{#1}{\currentoutput} {\ifnum\realpageno<\plustwo % new \resetspecials\processcommacommand[#1]\dosetupoutput \edef\currentoutput{#1}% \fi}} \def\preloadspecials % it's nicer to report this {\doifsomething\currentoutput {\showmessage\m!specials1\currentoutput}} \appendtoks \savecurrentvalue\usedoutputdriver\currentoutput \to \everyfirstshipout \protect \endinput ����������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-dvi.mkii�������������������������������0000644�0001750�0001750�00000006277�11754241457�024304� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=spec-dvi, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=Generic \TEX\ Solutions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \macros %D {dostartobject, %D dostopobject, %D doinsertobject} %D %D Reuse of object is not supported by the \DVI\ format. We %D therefore just duplicate them using boxes. \setjobsuffix{dvi} % can be overloaded in other spec's \startspecials[tex] \newbox\DVIobjects \newcounter\DVIobjectcounter \definespecial\dostartobject#1#2#3#4#5% {\setbox\nextbox\vbox\bgroup \def\dodostopobject {\egroup \doglobal\increment\DVIobjectcounter \global\setbox\DVIobjects\vbox {\offinterlineskip \forgetall \unvbox\DVIobjects \setbox\nextbox\hbox{\box\nextbox}% \wd\nextbox\zeropoint \dp\nextbox\zeropoint \ht\nextbox\onepoint \allowbreak \box\nextbox}% \dosetobjectreference{#1}{#2}{\DVIobjectcounter}}} \definespecial\dostopobject {\dodostopobject} \definespecial\doinsertobject#1#2% {\bgroup \dogetobjectreference{#1}{#2}\DVIobjectreference \splittopskip\zeropoint \setbox0=\copy\DVIobjects \dimen0=\DVIobjectreference\onepoint \advance\dimen0 -\onepoint \setbox2\vsplit0 to \dimen0 \ifdim\ht0>\onepoint \setbox0\vsplit0 to \onepoint \fi \unvbox0 \setbox0\lastbox \hbox{\unhbox0}% the \hbox is really needed! \egroup} %D \macros %D {dosetposition, %D dosetpositionwhd, %D dosetpositionplus} %D %D The next specials only identify a position. It is up to %D a \DVI\ postprocessing utility to merge the right commands %D into the utility file. Since in \CONTEXT, we only deal %D with relative positions, the reference point is not so %D important. %D %D The postprocessor should translate the specials into %D commands and append these to \type {jobname.tuo} using the %D format: %D %D \starttyping %D \pospxy {identifier}{page}{x}{y} %D \pospxywhd {identifier}{page}{x}{y}{w}{h}{d} %D \pospxyplus{identifier}{page}{x}{y}{w}{h}{d}{list} %D \stoptyping %D %D The postprocessor should, of course, provide the \type %D {page}, \type {x}, and \type {y} values. %D Now in spec-mis.tex: % \definespecial\dosetposition#1% % {\special{pos:pxy "#1"}} % % \definespecial\dosetpositionwhd#1#2#3#4% % {\special{pos:pxywhd "#1" #2 #3 #4}} % % \definespecial\dosetpositionplus#1#2#3#4#5% % {\special{pos:pxyplus "#1" #2 #3 #4 #5}} %D The next special tells the position postprocessor what %D page dimensions were used. %D Also in spec-mis.tex: % \let\flushDVIpositionpapersize\relax % % \definespecial\dosetpositionpapersize#1#2% % {\xdef\flushDVIpositionpapersize% % {\special{pos:papersize \number#1 \number#2}% % \noexpand\installprogram{dvipos -o \jobname.tuo \jobname.dvi }% % \global\noexpand\let\noexpand\flushDVIpositionpapersize\relax}} % % \prependtoksonce \flushDVIpositionpapersize \to \everyshipout \stopspecials \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mix.mkiv�������������������������������0000644�0001750�0001750�00000063664�12161703335�024310� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-mix, %D version=2012.07.12, %D title=\CONTEXT\ Page Macros, %D subtitle=Mixed Columns, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Mixed Columns} %D This is a very experimental module. Eventually it will replace the current %D multi column mechanism (that then will be an instance). The \LUA\ part of %D the interface will quite probably change so don't use that one directly %D (yet). % todo: % % consult note class % notes per page % notes in each column % notes in last column % notes local/global % top and bottom inserts % wide floats % move floats % luatex buglet: % % \ctxlua{tex.setbox("global",0,node.hpack(nodes.pool.glyph("a",font.current())))}\box0 \registerctxluafile{page-mix}{1.001} \unprotect %D The mixed output routine replaces the traditional multi column handler that %D started out in \MKII. One of the complications of a routine is that it needs %D to align nicely when mixed in a single column layout. Instead of using all %D kind of shift juggling in this mechanism we simply switch to grid mode %D locally. After all, columns don't look nice when not on a. As the grid %D snapper in \MKIV\ is more advanced not that much extra code is needed. %D We use the command handler but the parent settings are not to be changed. %D Instead we could have used a dedicated root setup, but it's not worth the %D trouble. \installcorenamespace{mixedcolumns} \installframedcommandhandler \??mixedcolumns {mixedcolumns} \??mixedcolumns \setupmixedcolumns [\c!distance=1.5\bodyfontsize, \c!n=\plustwo, %\c!rule=\v!none, \c!frame=\v!off, \c!strut=\v!no, \c!offset=\v!overlay, \c!alternative=\v!local, \c!maxheight=\textheight, \c!maxwidth=\makeupwidth, \c!grid=\v!tolerant, \c!step=.25\lineheight, % needs some experimenting \c!method=\ifinner\s!box\else\s!otr\fi] % automatic as suggested by WS \let\startmixedcolumns\relax % defined later \let\stopmixedcolumns \relax % defined later \appendtoks \setuevalue{\e!start\currentmixedcolumns}{\startmixedcolumns[\currentmixedcolumns]}% \setuevalue{\e!stop \currentmixedcolumns}{\stopmixedcolumns}% \to \everydefinemixedcolumns %D In order to avoid a mixup we use quite some local registers. \newdimen \d_page_mix_column_width \newdimen \d_page_mix_max_height \newdimen \d_page_mix_max_width \newdimen \d_page_mix_distance \newcount \c_page_mix_n_of_columns \newdimen \d_page_mix_threshold \newdimen \d_page_mix_leftskip \newdimen \d_page_mix_rightskip \newdimen \d_page_mix_balance_step \setnewconstant\c_page_mix_balance_cycles 500 \setnewconstant\c_page_mix_break_forced -123 \newbox \b_page_mix_preceding \newdimen \d_page_mix_preceding_height \newbox \b_page_mix_collected \newconstant \c_page_mix_routine \setnewconstant\c_page_mix_routine_regular \zerocount \setnewconstant\c_page_mix_routine_intercept\plusone \setnewconstant\c_page_mix_routine_continue \plustwo \setnewconstant\c_page_mix_routine_balance \plusthree \setnewconstant\c_page_mix_routine_error \plusfour %D The main environment is called as follows: %D %D \starttyping %D \startmixedcolumns[instance][settings] %D \startmixedcolumns[instance] %D \startmixedcolumns[settings] %D \stoptyping %D %D However, best is not to use this one directly but define an instance and %D use that one. % % For the moment only on my machine: % % \definemixedcolumns % [\v!columns] % % \unexpanded\def\setupcolumns % {\setupmixedcolumns[\v!columns]} %D In itemizations we also need columns, so let's define a apecial instance %D for them. These need to work well in situations like this: %D %D \starttyping %D \input zapf %D %D \startnarrower %D \startitemize[columns,two,packed][before=,after=] %D \dorecurse{10}{\startitem item #1 \stopitem} %D \stopitemize %D \stopnarrower %D %D \input zapf %D %D \startnarrower %D \startitemize[columns,two][before=,after=] %D \dorecurse{10}{\startitem item #1 \stopitem} %D \stopitemize %D \stopnarrower %D %D \input zapf %D %D \startnarrower %D \startitemize[columns,two] %D \dorecurse{10}{\startitem item #1 \stopitem} %D \stopitemize %D \stopnarrower %D %D \input zapf %D \stoptyping \ifdefined\s!itemgroupcolumns \else \def\s!itemgroupcolumns{itemgroupcolumns} \fi \definemixedcolumns [\s!itemgroupcolumns] [\c!n=\itemgroupparameter\c!n, \c!rule=\v!off, \c!balance=\v!yes] \unexpanded\def\strc_itemgroups_start_columns {\startmixedcolumns[\s!itemgroupcolumns]} % we could have a fast one \unexpanded\def\strc_itemgroups_stop_columns {\stopmixedcolumns} %D The mixed output routine can be in different states. First we need to intercept %D the already present content. This permits mixed single and multi column usage. %D Then we have the continuous routine, one that intercepts pages in sequence. %D Finally, when we finish the mixed columns mode, we can (optionally) balance the %D last page. \unexpanded\def\page_mix_command_routine {\ifcase\c_page_mix_routine \page_one_command_routine \or \page_mix_routine_intercept \or \page_mix_routine_continue \or \page_mix_routine_balance \or \page_mix_routine_error \fi} %D The interceptor is quite simple, at least for the moment. % \def\page_mix_routine_intercept % {\global\setbox\b_page_mix_preceding\vbox % {\page_otr_command_flush_top_insertions % \unvbox\normalpagebox}} \def\page_mix_routine_intercept {\ifdim\pagetotal>\pagegoal % testcase: preceding-001 ... if we don't do this, text can disappear as % preceding is overwritten ... needs to be figured out some day \page_one_command_routine \fi \global\setbox\b_page_mix_preceding\vbox {\page_otr_command_flush_top_insertions \ifdim\ht\b_page_mix_preceding=\zeropoint \else \writestatus\m!columns{preceding error}% \unvbox\b_page_mix_preceding \fi \unvbox\normalpagebox}} %D The error routine is there but unlikely to be called. It is a left-over from %D the traditional routine that might come in handy some day. \def\page_mix_routine_error {\showmessage\m!columns3\empty \page_otr_construct_and_shipout\unvbox\normalpagebox} %D Some settings (and actions) depend on the current output routine and setting the %D hsize and vsize is among them. The calculation of the hsize is done elsewhere. \unexpanded\def\page_mix_command_set_hsize {\hsize\d_page_mix_column_width \textwidth\d_page_mul_used_width} % needs thinking ... grouping etc %D When setting the vsize we make sure that we collect a few more lines than needed %D so that we have enough to split over the columns. Collecting too much is somewhat %D tricky as they will spill over to the next page. \unexpanded\def\page_mix_command_set_vsize {\vsize\dimexpr\c_page_mix_n_of_columns\textheight+\c_page_mix_n_of_columns\lineheight\relax \pagegoal\vsize} %D As we use \LUA\ there is the usual amount of tracing at that end. At the tex end %D we only visualize boxes. \let\page_mix_hbox\hbox \let\page_mix_vbox\vbox \installtextracker {mixedcolumns.boxes} {\let\page_mix_hbox\ruledhbox \let\page_mix_vbox\ruledvbox} {\let\page_mix_hbox\hbox \let\page_mix_vbox\vbox} %D We provide a few column break options. Interesting is that while forcing a new %D column in the traditional mechanism was a pain, here it works quite well. \installcolumnbreakmethod \s!mixedcolumn \v!preference {\goodbreak} \installcolumnbreakmethod \s!mixedcolumn \v!yes {\penalty\c_page_mix_break_forced\relax} %D As we operate in grid snapping mode, we use a dedicated macro to enable this %D mechamism. \def\page_mix_enable_grid_snapping {\edef\p_grid{\mixedcolumnsparameter\c!grid}% \ifx\p_grid\empty % just follow the default grid settings \else \gridsnappingtrue \setsystemmode\v!grid \spac_grids_snap_value_set\p_grid \fi} %D Between columns there is normally just spacing unless one enforces a rule. %D %D \starttyping %D \input zapf %D %D \startnarrower %D \startmixedcolumns[n=2,background=color,backgroundcolor=red,rulethickness=1mm,rulecolor=green,separator=rule] %D \input zapf %D \stopmixedcolumns %D \stopnarrower %D %D \input zapf %D \stoptyping \installcorenamespace{mixedcolumnsseparator} \setvalue{\??mixedcolumnsseparator\v!rule}% {\starttextproperties \usemixedcolumnscolorparameter\c!rulecolor \vrule\s!width\mixedcolumnsparameter\c!rulethickness \stoptextproperties} \unexpanded\def\page_mix_command_inject_separator {\bgroup \hss \csname\??mixedcolumnsseparator\mixedcolumnsparameter\c!separator\endcsname \hss \egroup} %D We've now arrived at the real code. The start command mostly sets up the %D environment and variables that are used in the splitter. One of the last %D things happening at the start is switching over to the mixed continuous %D routine. \installcorenamespace{mixedcolumnsbefore} \installcorenamespace{mixedcolumnsstart} \installcorenamespace{mixedcolumnsstop} \installcorenamespace{mixedcolumnsafter} %D For practical reasons there is always a first argument needed that %D indicates the class. %D %D \starttyping %D \startmixedcolumns[n=3,alternative=global] %D \dorecurse{200}{Zomaar wat #1 met een footnote\footnote{note #1}. } %D \stopmixedcolumns %D \stoptyping \let\currentmixedcolumnsmethod\empty \unexpanded\def\startmixedcolumns {\dodoubleempty\page_mix_start_columns} \unexpanded\def\page_mix_start_columns {\pushmacro\currentmixedcolumns \pushmacro\currentmixedcolumnsmethod \ifsecondargument \singleexpandafter\page_mix_start_columns_a \else\iffirstargument \doubleexpandafter\page_mix_start_columns_b \else \doubleexpandafter\page_mix_start_columns_c \fi\fi} \def\page_mix_start_columns_a[#1][#2]% {\edef\currentmixedcolumns{#1}% \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}% \mixedcolumnsparameter\c!before\relax \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax \begingroup \setupcurrentmixedcolumns[#2]% \page_mix_initialize_columns \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} \def\page_mix_start_columns_b[#1][#2]% {\doifassignmentelse{#1}% {\let\currentmixedcolumns\empty \page_mix_error_b} {\edef\currentmixedcolumns{#1}% \firstargumentfalse}% \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}% \mixedcolumnsparameter\c!before\relax % so, it doesn't list to local settings ! \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax \begingroup \iffirstargument \setupcurrentmixedcolumns[#1]% \fi \page_mix_initialize_columns \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax \def\page_mix_error_b {\writestatus\m!columns{best use an instance of mixed columns}} \def\page_mix_start_columns_c[#1][#2]% {\let\currentmixedcolumns\empty \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}% \mixedcolumnsparameter\c!before\relax \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax \begingroup \page_mix_initialize_columns \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} \unexpanded\def\page_mix_fast_columns_start#1% {\pushmacro\currentmixedcolumns \pushmacro\currentmixedcolumnsmethod \edef\currentmixedcolumns{#1}% \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}% \mixedcolumnsparameter\c!before\relax % so, it doesn't list to local settings ! \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax \begingroup \page_mix_initialize_columns \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax %D When we stop, we switch over to the balancing routine. After we're done we %D make sure to set the sizes are set, a somewhat redundant action when we %D already have flushed but better be safe. \unexpanded\def\stopmixedcolumns {\csname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax \endgroup \csname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax \mixedcolumnsparameter\c!after\relax \popmacro\currentmixedcolumnsmethod \popmacro\currentmixedcolumns} % \unexpanded\def\stopmixedcolumns % {\csname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax % \endgroup % \csname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax % \mixedcolumnsparameter\c!after\relax % \ifx\currentmixedcolumnsmethod\s!otr % \popmacro\currentmixedcolumnsmethod % \popmacro\currentmixedcolumns % \synchronizeoutput % brrr, otherwise sometimes issues in itemize % \else % \popmacro\currentmixedcolumnsmethod % \popmacro\currentmixedcolumns % \fi % } \let\page_mix_fast_columns_stop\stopmixedcolumns %D This is how the fast one is used: \unexpanded\def\strc_itemgroups_start_columns {\page_mix_fast_columns_start\s!itemgroupcolumns} \let\strc_itemgroups_stop_columns\page_mix_fast_columns_stop \setupmixedcolumns [\s!itemgroupcolumns] [\c!grid=\itemgroupparameter\c!grid] \setupitemgroups [\c!grid=\v!tolerant] %D The common initialization: \def\page_mix_initialize_columns {\page_mix_enable_grid_snapping % \d_page_mix_distance \mixedcolumnsparameter\c!distance \c_page_mix_n_of_columns\mixedcolumnsparameter\c!n \d_page_mix_max_height \mixedcolumnsparameter\c!maxheight \d_page_mix_max_width \mixedcolumnsparameter\c!maxwidth \d_page_mix_balance_step\mixedcolumnsparameter\c!step % \d_page_mix_max_width\dimexpr\d_page_mix_max_width-\leftskip-\rightskip\relax \d_page_mix_leftskip \leftskip \d_page_mix_rightskip\rightskip \leftskip \zeropoint \rightskip\zeropoint % \d_page_mix_threshold\zeropoint % \d_page_mix_column_width\dimexpr(\d_page_mix_max_width-\d_page_mix_distance*\numexpr(\c_page_mix_n_of_columns-\plusone)\relax)/\c_page_mix_n_of_columns\relax % \usemixedcolumnscolorparameter\c!color % \nofcolumns\c_page_mix_n_of_columns} % public %D The otr method related hooks are defined next: % \setvalue{\??mixedcolumnsbefore\s!otr}% % {\par % \ifdim\pagetotal=\zeropoint \else % \verticalstrut % probably no longer needed % \vskip-\struttotal % probably no longer needed % \fi} \newcount\c_page_mix_otr_nesting \setvalue{\??mixedcolumnsbefore\s!otr}% {\par \global\advance\c_page_mix_otr_nesting\plusone \ifcase\c_page_mix_otr_nesting\or \ifdim\pagetotal=\zeropoint \else \obeydepth % we could handle this in pre material \fi \fi} \setvalue{\??mixedcolumnsstart\s!otr}% {\ifcase\c_page_mix_otr_nesting\or \setupoutputroutine[\s!mixedcolumn]% \c_page_mix_routine\c_page_mix_routine_intercept \page_otr_trigger_output_routine % \holdinginserts\maxdimen % \global\d_page_mix_preceding_height\ht\b_page_mix_preceding \c_page_mix_routine\c_page_mix_routine_continue % \page_mix_command_set_vsize \page_mix_command_set_hsize \fi} \setvalue{\??mixedcolumnsstop\s!otr}% {\par \ifcase\c_page_mix_otr_nesting\or \c_page_mix_routine\c_page_mix_routine_balance \page_otr_trigger_output_routine \fi} \setvalue{\??mixedcolumnsafter\s!otr}% {\ifcase\c_page_mix_otr_nesting\or \prevdepth\strutdp \page_otr_command_set_vsize \page_otr_command_set_hsize \fi \global\advance\c_page_mix_otr_nesting\minusone} %D The splitting and therefore balancing is done at the \LUA\ end. This gives %D more readable code and also makes it easier to deal with insertions like %D footnotes. Eventually we will have multiple strategies available. \unexpanded\def\page_mix_routine_construct#1% {\ctxcommand{mixsetsplit { box = \number\b_page_mix_collected, nofcolumns = \number\c_page_mix_n_of_columns, maxheight = \number\d_page_mix_max_height, step = \number\d_page_mix_balance_step, cycles = \number\c_page_mix_balance_cycles, preheight = \number\d_page_mix_preceding_height, prebox = \number\b_page_mix_preceding, strutht = \number\strutht, strutdp = \number\strutdp, threshold = \number\d_page_mix_threshold, balance = "#1", alternative = "\mixedcolumnsparameter\c!alternative", grid = \ifgridsnapping true\else false\fi, }}% \deadcycles\zerocount} \unexpanded\def\page_mix_routine_package {\ctxcommand{mixfinalize()}% \setbox\b_page_mix_collected\vbox \bgroup \ifvoid\b_page_mix_preceding \else \box\b_page_mix_preceding \global\d_page_mix_preceding_height\zeropoint \nointerlineskip \fi \hskip\d_page_mix_leftskip \page_mix_hbox to \d_page_mix_max_width \bgroup \letmixedcolumnsparameter\c!strut\v!no % maybe use \c_page_mix_used_of_columns \dorecurse\c_page_mix_n_of_columns {% \inheritedmixedcolumnsframed{\page_mix_command_package_column}% \ifnum\recurselevel<\c_page_mix_n_of_columns \page_mix_command_inject_separator \fi }% \egroup \egroup} \unexpanded\def\page_mix_command_package_column {\page_mix_hbox to \d_page_mix_column_width \bgroup % maybe intercept empty \ctxcommand{mixgetsplit(\recurselevel)}% \hskip-\d_page_mix_column_width \page_mix_hbox to \d_page_mix_column_width \bgroup \placenoteinserts \hss \egroup \egroup} \unexpanded\def\page_mix_routine_continue {\bgroup \forgetall \dontcomplain \setbox\b_page_mix_collected\vbox{\unvbox\normalpagebox}% brrr we need to make a tight box (combine this in lua) \page_mix_routine_construct\v!no \page_mix_routine_package \page_otr_construct_and_shipout\box\b_page_mix_collected \ctxcommand{mixflushrest()}% \ctxcommand{mixcleanup()}% \egroup} \unexpanded\def\page_mix_routine_balance {\bgroup \forgetall \dontcomplain \setbox\b_page_mix_collected\vbox{\unvbox\normalpagebox}% brrr we need to make a tight box (combine this in lua) \doloop {%writestatus\m!columns{construct continue (\the\htdp\b_page_mix_collected)}% \page_mix_routine_construct\v!no \ifcase\ctxcommand{mixstate()}\relax % 0 = okay, we can balance \setbox\b_page_mix_collected\vbox{\ctxcommand{mixflushlist()}}% we could avoid this %writestatus\m!columns{construct balance}% \page_mix_routine_construct\v!yes \page_mix_routine_package \c_page_mix_routine\c_page_mix_routine_regular % \setupoutputroutine[\s!singlecolumn]% \page_otr_command_set_vsize \page_otr_command_set_hsize \par %writestatus\m!columns{flush balance}% \box\b_page_mix_collected \vskip\zeropoint % triggers recalculation of page stuff (weird that this is needed but it *is* needed, see mixed-001.tex) \par \nointerlineskip \prevdepth\strutdp \ctxcommand{mixflushrest()}% rubish \ctxcommand{mixcleanup()}% rubish \exitloop \or % 1 = we have stuff left, so flush and rebalance %writestatus\m!columns{flush continue}% \page_mix_routine_package \page_otr_construct_and_shipout\box\b_page_mix_collected \setbox\b_page_mix_collected\vbox{\ctxcommand{mixflushrest()}}% we could avoid this \ctxcommand{mixcleanup()}% \ifdim\ht\b_page_mix_collected=\zeropoint \exitloop \fi \fi}% \egroup} %D We also implement a variant compatible with the so called simple columns %D mechanism: %D %D \starttyping %D \startboxedcolumns %D \input zapf %D \stopboxedcolumns %D \stoptyping %D %D This is a rather mininimalistic variant. % Maybe we also need a variant with obeydepth before and prevdepth after so % that we get a nice spacing. \definemixedcolumns [boxedcolumns] [\c!balance=\v!yes, \c!n=2, \c!method=\s!box, \c!strut=\v!yes, \c!maxwidth=\availablehsize] %D Boxed columns can be used nested: %D %D \starttyping %D \setupmixedcolumns %D [boxedcolumns] %D [n=2, %D background=color, %D backgroundcolor=darkred, %D color=white, %D backgroundoffset=1mm] %D %D \definemixedcolumns %D [nestedboxedcolumns] %D [boxedcolumns] %D [n=2, %D background=color, %D backgroundcolor=white, %D color=darkred, %D strut=yes, %D backgroundoffset=0mm] %D %D \startboxedcolumns %D \input zapf \par \input ward \par \obeydepth %D \startnestedboxedcolumns %D \input zapf %D \stopnestedboxedcolumns %D \par \input zapf \par \obeydepth %D \startnestedboxedcolumns %D \input zapf %D \stopnestedboxedcolumns %D \par \input zapf %D \stopboxedcolumns %D \stoptyping %D Next we define the hooks: \letvalue{\??mixedcolumnsbefore\s!box}\donothing \letvalue{\??mixedcolumnsafter \s!box}\donothing \setvalue{\??mixedcolumnsstart\s!box}% {\edef\p_page_mix_strut{\mixedcolumnsparameter\c!strut}% \setbox\b_page_mix_collected\vbox\bgroup \let\currentoutputroutine\s!mixedcolumn % makes \column work \forgetall \page_mix_command_set_hsize \ifx\p_page_mix_strut\v!yes \begstrut \ignorespaces \fi} \setvalue{\??mixedcolumnsstop\s!box}% {\ifx\p_page_mix_strut\v!yes \removeunwantedspaces \endstrut \fi \egroup \page_mix_box_balance} %D The related balancer is only a few lines: \unexpanded\def\page_mix_box_balance {\bgroup \dontcomplain \page_mix_routine_construct\v!yes \page_mix_routine_package \dontleavehmode\box\b_page_mix_collected \ctxcommand{mixflushrest()}% \ctxcommand{mixcleanup()}% \egroup} %D As usual, floats complicates matters and this is where experimental code %D starts. \let\page_mix_command_package_contents\page_one_command_package_contents \let\page_mix_command_flush_float_box \page_one_command_flush_float_box \unexpanded\def\page_mix_command_check_if_float_fits {\ifpostponecolumnfloats \global\setfalse\c_page_floats_room \else\ifconditional\c_page_floats_not_permitted \global\setfalse\c_page_floats_room \else % \bgroup % \getcolumnstatus{\count255}{\dimen0}{\dimen2}% % \page_floats_get_info\s!text % \setbox\scratchbox\vbox % tricky met objecten ? % {\blank[\rootfloatparameter\c!spacebefore] % \snaptogrid\vbox{\vskip\floatheight}}% copy? % \advance\dimen0\dimexpr\ht\scratchbox+2\openlineheight+.5\lineheight\relax\relax % needed because goal a bit higher % \ifdim\dimen0>\dimen2 % \global\setfalse\c_page_floats_room % \else \global\settrue\c_page_floats_room \fi \ifdim\floatwidth>\hsize \showmessage\m!columns{11}\empty \global\setfalse\c_page_floats_room \fi} \unexpanded\def\page_mix_command_flush_floats {\page_one_command_flush_floats} \unexpanded\def\page_mix_command_flush_saved_floats {\page_one_command_flush_saved_floats} % \unexpanded\def\page_mix_command_flush_top_insertions % {\page_one_command_flush_top_insertions} % \unexpanded\def\page_mix_place_float_top % {\showmessage\m!columns4\empty\page_one_place_float_here} % \unexpanded\def\page_mix_place_float_bottom % {\showmessage\m!columns5\empty\page_one_place_float_here} \unexpanded\def\page_mix_place_float_here {\page_one_place_float_here} \unexpanded\def\page_mix_place_float_force {\page_one_place_float_force} \unexpanded\def\page_mix_command_side_float_output % hm {\page_otr_construct_and_shipout\unvbox\normalpagebox} \unexpanded\def\page_mix_command_synchronize_side_floats % hm {\page_sides_forget_floats} \unexpanded\def\page_mix_command_flush_side_floats {\page_sides_forget_floats} \unexpanded\def\page_mix_command_next_page {\page_otr_eject_page} \unexpanded\def\page_mix_command_next_page_and_inserts {\page_otr_eject_page_and_flush_inserts} %D We need to hook some handlers into the output routine and we define %D a dedicated one: \defineoutputroutine [\s!mixedcolumn] [\s!page_otr_command_routine =\page_mix_command_routine, \s!page_otr_command_package_contents =\page_mix_command_package_contents, \s!page_otr_command_set_vsize =\page_mix_command_set_vsize, \s!page_otr_command_set_hsize =\page_mix_command_set_hsize, \s!page_otr_command_next_page =\page_mix_command_next_page, \s!page_otr_command_next_page_and_inserts =\page_mix_command_next_page_and_inserts, % \s!page_otr_command_synchronize_hsize =\page_mix_command_synchronize_hsize, % \s!page_otr_command_set_top_insertions =\page_mix_command_set_top_insertions, % \s!page_otr_command_set_bottom_insertions =\page_mix_command_set_bottom_insertions, % \s!page_otr_command_flush_top_insertions =\page_mix_command_flush_top_insertions, % \s!page_otr_command_flush_bottom_insertions=\page_mix_command_flush_bottom_insertions, % \s!page_otr_command_set_float_hsize =\page_mix_command_set_float_hsize, \s!page_otr_command_check_if_float_fits =\page_mix_command_check_if_float_fits, \s!page_otr_command_flush_float_box =\page_mix_command_flush_float_box, \s!page_otr_command_synchronize_side_floats=\page_mix_command_synchronize_side_floats, \s!page_otr_command_side_float_output =\page_mix_command_side_float_output, \s!page_otr_command_flush_floats =\page_mix_command_flush_floats, \s!page_otr_command_flush_side_floats =\page_mix_command_flush_side_floats, \s!page_otr_command_flush_saved_floats =\page_mix_command_flush_saved_floats % \s!page_otr_command_flush_margin_blocks =\page_mix_command_flush_margin_blocks, % not used ] %D Only a few float placement options are supported: \installfloatmethod \s!mixedcolumn \v!here \page_mix_place_float_here \installfloatmethod \s!mixedcolumn \v!force \page_mix_place_float_force \installfloatmethod \s!mixedcolumn \v!top \page_mix_place_float_top \installfloatmethod \s!mixedcolumn \v!bottom \page_mix_place_float_bottom \installfloatmethod \s!mixedcolumn \v!local \somelocalfloat %D It ends here. \protect \endinput ����������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/util-lib.lua��������������������������������0000644�0001750�0001750�00000025600�12161703335�024121� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['util-lib'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- This is experimental code for Hans and Luigi. Don't depend on it! There -- will be a plain variant. --[[ The problem with library bindings is manyfold. They are of course platform dependent and while a binary with its directly related libraries are often easy to maintain and load, additional libraries can each have their demands. One important aspect is that loading additional libraries from within the loaded one is also operating system dependent. There can be shared libraries elsewhere on the system and as there can be multiple libraries with the same name but different usage and versioning there can be clashes. So there has to be some logic in where to look for these sublibraries. We found out that for instance on windows libraries are by default sought on the parents path and then on the binary paths and these of course can be in an out of our control, thereby enlarging the changes on a clash. A rather safe solution for that to load the library on the path where it sits. Another aspect is initialization. When you ask for a library t.e.x it will try to initialize luaopen_t_e_x no matter if such an inializer is present. However, because loading is configurable and in the case of luatex is already partly under out control, this is easy to deal with. We only have to make sure that we inform the loader that the library has been loaded so that it won't load it twice. In swiglib we have chosen for a clear organization and although one can use variants normally in the tex directory structure predictability is more or less the standard. For instance: .../tex/texmf-mswin/bin/lib/luatex/lua/swiglib/mysql/core.dll .../tex/texmf-mswin/bin/lib/luajittex/lua/swiglib/mysql/core.dll .../tex/texmf-mswin/bin/lib/luatex/context/lua/swiglib/mysql/core.dll .../tex/texmf-mswin/bin/lib/swiglib/lua/mysql/core.dll .../tex/texmf-mswin/bin/lib/swiglib/lua/mysql/5.6/core.dll The lookups are determined via an entry in texmfcnf.lua: CLUAINPUTS = ".;$SELFAUTOLOC/lib/{$engine,luatex}/lua//", A request for t.e.x is converted to t/e/x.dll or t/e/x.so depending on the platform. Then we use the regular finder to locate the file in the tex directory structure. Once located we goto the path where it sits, load the file and return to the original path. We register as t.e.x in order to prevent reloading and also because the base name is seldom unique. The main function is a big one and evolved out of experiments that Luigi Scarso and I conducted when playing with variants of SwigLib. The function locates the library using the context mkiv resolver that operates on the tds tree and if that doesn't work out well, the normal clib path is used. The lookups is somewhat clever in the sense that it can deal with (optional) versions and can fall back on non versioned alternatives if needed, either or not using a wildcard lookup. This code is experimental and by providing a special abstract loader (called swiglib) we can start using the libraries. A complication is that we might end up with a luajittex path matching before a luatex path due to the path spec. One solution is to first check with the engine prefixed. This could be prevented by a more strict lib pattern but that is not always under our control. So, we first check for paths with engine in their name and then without. ]]-- -- seems to be clua in recent texlive local gsub, find = string.gsub, string.find local pathpart, nameonly, joinfile = file.pathpart, file.nameonly, file.join local findfile, findfiles = resolvers and resolvers.findfile, resolvers and resolvers.findfiles local loaded = package.loaded local report_swiglib = logs.reporter("swiglib") local trace_swiglib = false trackers.register("resolvers.swiglib", function(v) trace_swiglib = v end) -- We can check if there are more that one component, and if not, we can -- append 'core'. local done = false local function requireswiglib(required,version) local trace_swiglib = trace_swiglib or package.helpers.trace local library = loaded[required] if library == nil then -- initialize a few variables local required_full = gsub(required,"%.","/") -- package.helpers.lualibfile local required_path = pathpart(required_full) local required_base = nameonly(required_full) local required_name = required_base .. "." .. os.libsuffix local version = type(version) == "string" and version ~= "" and version or false local engine = environment.ownmain or false -- if trace_swiglib and not done then local list = resolvers.expandedpathlistfromvariable("lib") -- fresh, no reuse for i=1,#list do report_swiglib("tds path %i: %s",i,list[i]) end end -- helpers local function found(locate,asked_library,how,...) if trace_swiglib then report_swiglib("checking %s: %a",how,asked_library) end return locate(asked_library,...) end local function check(locate,...) local found = nil if version then local asked_library = joinfile(required_path,version,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found = locate(asked_library,...) end if not found or found == "" then local asked_library = joinfile(required_path,required_name) if trace_swiglib then report_swiglib("checking %s: %a","with version",asked_library) end found = locate(asked_library,...) end return found and found ~= "" and found or false end -- Alternatively we could first collect the locations and then do the two attempts -- on this list but in practice this is not more efficient as we might have a fast -- match anyway. local function attempt(checkpattern) -- check cnf spec using name and version if trace_swiglib then report_swiglib("checking tds lib paths strictly") end local found = findfile and check(findfile,"lib") if found and (not checkpattern or find(found,checkpattern)) then return found end -- check cnf spec using wildcard if trace_swiglib then report_swiglib("checking tds lib paths with wildcard") end local asked_library = joinfile(required_path,".*",required_name) if trace_swiglib then report_swiglib("checking %s: %a","latest version",asked_library) end local list = findfiles(asked_library,"lib",true) if list and #list > 0 then table.sort(list) local found = list[#list] if found and (not checkpattern or find(found,checkpattern)) then return found end end -- Check lib paths using name and version. if trace_swiglib then report_swiglib("checking lib paths") end package.extralibpath(environment.ownpath) local paths = package.libpaths() for i=1,#paths do local found = check(lfs.isfile) if found and (not checkpattern or find(found,checkpattern)) then return found end end return false end local found_library = nil if engine then if trace_swiglib then report_swiglib("attemp 1, engine %a",engine) end found_library = attempt("/"..engine.."/") if not found_library then if trace_swiglib then report_swiglib("attemp 2, no engine",asked_library) end found_library = attempt() end else found_library = attempt() end -- load and initialize when found if not found_library then if trace_swiglib then report_swiglib("not found: %a",required) end library = false else local path = pathpart(found_library) local base = nameonly(found_library) dir.push(path) if trace_swiglib then report_swiglib("found: %a",found_library) end local message = nil local opener = "luaopen_" .. required_base library, message = package.loadlib(found_library,opener) local libtype = type(library) if libtype == "function" then library = library() else report_swiglib("load error: %a returns %a, message %a",opener,libtype,message or "no message") library = false end dir.pop() end -- cache result if not library then report_swiglib("unknown: %a",required) elseif trace_swiglib then report_swiglib("stored: %a",required) end loaded[required] = library else report_swiglib("reused: %a",required) end return library end --[[ For convenience we make the require loader function swiglib aware. Alternatively we could put the specific loader in the global namespace. ]]-- local savedrequire = require function require(name,version) if find(name,"^swiglib%.") then return requireswiglib(name,version) else return savedrequire(name) end end --[[ At the cost of some overhead we provide a specific loader so that we can keep track of swiglib usage which is handy for development. In context this is the recommended loader. ]]-- local swiglibs = { } function swiglib(name,version) local library = swiglibs[name] if not library then statistics.starttiming(swiglibs) if trace_swiglib then report_swiglib("loading %a",name) end library = requireswiglib("swiglib." .. name,version) swiglibs[name] = library statistics.stoptiming(swiglibs) end return library end statistics.register("used swiglibs", function() if next(swiglibs) then return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs)) end end) --[[ So, we now have: local gm = require("swiglib.gmwand.core") local gm = swiglib("gmwand.core") local sq = swiglib("mysql.core") local sq = swiglib("mysql.core","5.6") Watch out, the last one is less explicit and lacks the swiglib prefix. ]]-- ��������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1254.mkii����������������������������0000644�0001750�0001750�00000026666�11754241457�024440� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=regi-cp1254, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=cp1254 (Turkish), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for cp1254 input encoding (regime) for Turkish, %D see also iso-8859-9. %D %D Usage: %D \type{\enableregime[cp1254]} or \type{\enablereregime[windows-1254]} \startregime[cp1254] \defineactivetoken 128 {\texteuro} % 20AC EURO SIGN \defineactivetoken 129 {\unknownchar} % <undefined> \defineactivetoken 130 {\quotesinglebase} % 201A SINGLE LOW-9 QUOTATION MARK \defineactivetoken 131 {\fhook} % 0192 LATIN SMALL LETTER F WITH HOOK \defineactivetoken 132 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 133 {\textellipsis} % 2026 HORIZONTAL ELLIPSIS \defineactivetoken 134 {\textdag} % 2020 DAGGER \defineactivetoken 135 {\textddag} % 2021 DOUBLE DAGGER \defineactivetoken 136 {\textcircumflex} % 02C6 MODIFIER LETTER CIRCUMFLEX ACCENT \defineactivetoken 137 {\perthousand} % 2030 PER MILLE SIGN \defineactivetoken 138 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 139 {\guilsingleleft} % 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \defineactivetoken 140 {\OEligature} % 0152 LATIN CAPITAL LIGATURE OE \defineactivetoken 141 {\unknownchar} % <undefined> \defineactivetoken 142 {\unknownchar} % <undefined> \defineactivetoken 143 {\unknownchar} % <undefined> \defineactivetoken 144 {\unknownchar} % <undefined> \defineactivetoken 145 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 146 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 147 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 148 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 149 {\textbullet} % 2022 BULLET \defineactivetoken 150 {\endash} % 2013 EN DASH \defineactivetoken 151 {\emdash} % 2014 EM DASH \defineactivetoken 152 {\texttilde} % 02DC SMALL TILDE \defineactivetoken 153 {\trademark} % 2122 TRADE MARK SIGN \defineactivetoken 154 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 155 {\guilsingleright} % 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \defineactivetoken 156 {\oeligature} % 0153 LATIN SMALL LIGATURE OE \defineactivetoken 157 {\unknownchar} % <undefined> \defineactivetoken 158 {\unknownchar} % <undefined> \defineactivetoken 159 {\Ydiaeresis} % 0178 LATIN CAPITAL LETTER Y WITH DIAERESIS \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\exclamdown} % 00A1 INVERTED EXCLAMATION MARK \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\textyen} % 00A5 YEN SIGN \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\ordfeminine} % 00AA FEMININE ORDINAL INDICATOR \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\textmacron} % 00AF MACRON \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\ordmasculine} % 00BA MASCULINE ORDINAL INDICATOR \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\onequarter} % 00BC VULGAR FRACTION ONE QUARTER \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\threequarter} % 00BE VULGAR FRACTION THREE QUARTERS \defineactivetoken 191 {\questiondown} % 00BF INVERTED QUESTION MARK \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Gbreve} % 011E LATIN CAPITAL LETTER G WITH BREVE \defineactivetoken 209 {\Ntilde} % 00D1 LATIN CAPITAL LETTER N WITH TILDE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Idotaccent} % 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE \defineactivetoken 222 {\Scedilla} % 015E LATIN CAPITAL LETTER S WITH CEDILLA \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\gbreve} % 011F LATIN SMALL LETTER G WITH BREVE \defineactivetoken 241 {\ntilde} % 00F1 LATIN SMALL LETTER N WITH TILDE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\dotlessi} % 0131 LATIN SMALL LETTER DOTLESS I \defineactivetoken 254 {\scedilla} % 015F LATIN SMALL LETTER S WITH CEDILLA \defineactivetoken 255 {\ydiaeresis} % 00FF LATIN SMALL LETTER Y WITH DIAERESIS \stopregime ��������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-jus.mkiv�������������������������������0000644�0001750�0001750�00000001221�12130411274�024300� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=trac-jus, %D version=2112.11.27, %D title=\CONTEXT\ Tracing Macros, %D subtitle=Justification, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Tracing Macros / Justification} \registerctxluafile{trac-jus}{1.001} \unprotect \definesystemattribute[justification] [public] \unexpanded\def\showjustification {\ctxcommand{showjustification()}} \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-ini.mkii�������������������������������0000644�0001750�0001750�00000271136�12130411274�024271� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-ini, %D version=2000.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Initialization} %D Beware: don't rely on \longempty things, since this may %D change! \ifdefined\keeputfcharacters \else \let\keeputfcharacters\relax \fi % for mkiv \ifdefined\utfunicodetracer \else \newconstant\utfunicodetracer \fi % for mkiv %D \macros %D {defineinputmode,setinputmode} %D %D For old times sake we still support: \unexpanded\def\defineinputmode[#1]{\expandafter\newtoks\csname every#1inputmode\endcsname} \unexpanded\def\setinputmode [#1]{\the\executeifdefined{every#1inputmode}\emptytoks} \defineinputmode [TEX] \defineinputmode [XML] \setinputmode [TEX] %D Finally we make sure that the compound handler keeps doingits job. \ifx\normalcompound\undefined \let\normalcompound=| \fi \appendtoks \catcode`|=\activecatcode \let|\normalcompound \to \everyTEXinputmode \appendtoks \catcode`|=\lettercatcode \to \everyXMLinputmode %D This module is highly optimized for speed, which sometimes %D leads to rather unreadable code. Sorry for this. \bgroup \obeylines \gdef\startXMLdefinitions% keep % {\bgroup\obeylines\dostartXMLdefinitions} \gdef\dostartXMLdefinitions #1 {\egroup\doifsomething{#1}{\writestatus{XML}{loading #1 support}}} \global\let\stopXMLdefinitions\relax \egroup % todo: XMLfullsave == also attributes % csnames % XMLelse -> elseXML %D Remark: some hard coded character things will be replaced %D by named glyphs as soon as the upgraded encoding modules %D are released. At that moment, unicode support will be %D provided in accordance with the normal support in \CONTEXT. %D Like it or not, this module deals with angle bracketed %D input. Processing \XML\ alike input in \CONTEXT\ has been %D possible since 1995, and till 2000 several methods ran in %D parallel. These were implemented in modules like the semi %D public \type {m-sgml}. %D %D There is not one optimal solution for processing \XML\ data. %D The oldest method was based on a very simple preprocessor %D written in \MODULA\ and later \PERL: \type {<command>} was %D converted into \type {\begSGML[command]} and optional %D parameters were passed. %D %D A second method uses a \PERL\ or \XSL\ transformation %D script that produces \CONTEXT\ commands. This method is %D much slower, mainly because the whole document is read into %D memory and a document tree is to be build. The advantage is %D that processing of the resulting document is fast. %D %D The third method uses a basic parser written in the \TEX\ %D language, and apart from a few pitfalls, this method is %D clean and efficient, but not always robust. Because errors %D in the input are not catched on forehand, processing in %D \TEX\ may fail due to errors. But, given that a document %D can be validated on forehand, this is no big problem. %D %D Each method has its advantage, but especially the third %D method puts some demands on \CONTEXT, since no interference %D between the parser and the core commands may occur. What %D method is used, depends on the situation. %D %D All three methods introduce some problems in interfacing to %D core \CONTEXT\ functionality. This is due to the fact that %D sometimes we want to typeset content directly, while in %D other cases we just want to pick up data for later usage, %D either or not using delimited arguments. And, when moving %D data around, there is always the expansion problem to deal %D with. %D %D As can be expected, we have to map begin and end tags onto %D \CONTEXT's start- and stopcommands. This is the easy part. %D When we have to pass the content of an element to a macro %D as argument, we need to do a delimited grab. Such mappings %D are not that hard to implement and were part of \type %D {m-sgml.tex} already. New in this core module is nested %D grabbing. Also new here is the support for namespaces and %D extensive attribute handling. On the other hand, recursive %D traceback of attributes is no longer supported. Because %D this feature was not really used, we can hereby safely we %D declare the \type {m-sgml.tex} module obsolete. %D %D In order to be able to incorporate \XML\ style definitions %D into basic \TEX\ styles, we will provide some basic %D functionality in the core itself. Some of the functionality %D can be set up with this general command. We use a token %D list register to handle post||setup actions. This permits %D us to extend this command. \unprotect \newtoks\aftersetupXMLprocessing \def\setupXMLprocessing {\dosingleargument\dosetupXMLprocessing} \def\dosetupXMLprocessing[#1]% {\getparameters[\??xp][#1]\the\aftersetupXMLprocessing} \def\XMLprocessingparameter#1% {\csname\??xp#1\endcsname} \protect %D Formally an \XML\ file starts with an unique sequence %D \type {<?xml}, but in most of the unilities that come with %D \CONTEXT\ we will be more tolerant, and gobble preceding %D spaces. \def\XMLbanner#1{\string<\string ?xml version='1.0' #1\string ?\string>} %D We will be dealing with elements, which means that we have %D to take care of \type {<this>} and \type {</that>}, but %D also with \type {<such/>} and \type {<so />}. In some cases %D the upper and lowercase alternatives need to be dealt with, %D although this is not realy needed since XML is case %D sensitive. %D %D We also have to handle entities, like \type {&you;} and %D \type {&me;}. These are quite easy to deal with and need to %D be hooked into the encoding and abbreviation mechanisms. %D %D And then there are the parameters to be taken care of. Here %D we meet \type {key="value"} but also \type {key='eulav'} %D and even the spacy \typ {key = "value"}. %D %D Since we have to handlers for each element and entity, we %D will create a few namespaces. Special care has to be %D given to preformated code. %D %D There are two namespace mechanisms in place: one for %D \TEX, and one for \XML. The later mechanism permits %D remapping and ignoring. \unprotect \def \@@XML {XML:} \edef\@@XMLentity {\@@XML ent} % &crap; \edef\@@XMLelement {\@@XML ele} % <this> </this> <that/> \edef\@@XMLvariable {\@@XML var} % key="val" \edef\@@XMLvalue {\@@XML val} % key="val" \edef\@@XMLpars {\@@XML par} % \edef\@@XMLdata {\@@XML dat} % mem buffer \edef\@@XMLcode {\@@XML cod} % named mem buffers \edef\@@XMLinstruction {\@@XML ins} % <? \edef\@@XMLmap {\@@XML map} % mapping on context attr \edef\@@XMLlist {\@@XML lst} % \edef\@@XMLnamespace {\@@XML nam} % namespace:element \edef\@@XMLurlspace {\@@XML url} % \edef\@@XMLescape {\@@XML esc} % <! \edef\@@XMLdepth {\@@XML dep} % used to track nesting \edef\@@XMLdopth {\@@XML dop} % used to track nesting \edef\@@XMLsave {\@@XML sav} % namespace for saved elements \iffalse % slightly faster \edef\@@XML {*} \edef\@@XMLentity {\@@XML a} % &crap; \edef\@@XMLelement {\@@XML b} % <this> </this> <that/> \edef\@@XMLvariable {\@@XML c} % key="val" \edef\@@XMLvalue {\@@XML d} % key="val" \edef\@@XMLpars {\@@XML e} % \edef\@@XMLdata {\@@XML f} % mem buffer \edef\@@XMLcode {\@@XML g} % named mem buffers \edef\@@XMLinstruction {\@@XML h} % <? \edef\@@XMLmap {\@@XML i} % mapping on context attr \edef\@@XMLlist {\@@XML j} % \edef\@@XMLnamespace {\@@XML k} % namespace:element \edef\@@XMLurlspace {\@@XML l} % \edef\@@XMLescape {\@@XML m} % <! \edef\@@XMLdepth {\@@XML n} % used to track nesting \edef\@@XMLdopth {\@@XML o} % used to track nesting \edef\@@XMLsave {\@@XML p} % namespace for saved elements \fi \let\normal@@XMLelement\@@XMLelement % we may overload this one later inside a group \newtoks\XMLtoks \newtoks\XMLresetlist \newif\ifignoreXMLspaces \newif\iffixedXMLfont \newif\iftraceXMLelements \newif\ifprocessingXML \newcount\XMLlevel % scratchcounter \newcount\XMLdepth % used here \newtoks\everyenableXML %D We will implement the parser by making a few characters %D active. For that reason we also have to save their %D original meaning. %D \macros %D {enableXML} %D %D The macro \type {\enableXML} will be used to turn on the %D parser. This means that after that, \TEX\ commands starting %D with a backslash will not longer be read as such. There is %D a way around this, but for convenience \TEXEXEC\ will take %D care of processing raw \XML\ files in a transparant way. % cmr -- best for tui and such % % \chardef\XMLtokensreduction\zerocount % % lmr -- best but problematic for tui file: \chardef\XMLtokensreduction\plustwo % \def\alwaysreduceXMLtokens {\XMLtokensreduction\plusone} % \def\permanentreduceXMLtokens{\XMLtokensreduction\plustwo} % part of this should move to a low level module % we predefine some macros, just to satisfy the dep parser \let\enableXMLexpansion \relax \let\disableXMLexpansion \relax \let\enableXML \relax \let\activateXMLescapetokens\relax \let\entitleXMLescapetokens \relax \let\reduceXMLescapetokens \relax \let\ignoreXMLescapetokens \relax \let\enableXMLelements \relax \let\disableXMLelements \relax % \bgroup % \catcode`\*=\commentcatcode % \catcode`\.=\escapecatcode % .catcode`.B=.begingroupcatcode % .catcode`.E=.endgroupcatcode % .catcode`.P=.parametercatcode % % .catcode`.&=.activecatcode % .catcode`.<=.activecatcode % % .catcode`.#=.activecatcode % .catcode`.$=.activecatcode % .catcode`.%=.activecatcode % .catcode`.\=.activecatcode % .catcode`.^=.activecatcode % .catcode`._=.activecatcode % .catcode`.{=.activecatcode % .catcode`.}=.activecatcode % .catcode`.|=.activecatcode % .catcode`.~=.activecatcode % % .gdef.enableXMLexpansion % B.def<B.doXMLelementE.let&=.doXMLentityE % % .gdef.disableXMLexpansion % B.unexpanded.def<B.doXMLelementE.let&=.doXMLentityE % % * internally the # becomes two #'s (before expanding, during % * the parsing stage) which is why we let the first # gobble % * the second one % * % * since this only takes place when reading arguments, as in % * \startXMLdata ... cum, suis, we can take place of it % * there; this is needed because reading from file goes wrong % * (eating up argument) % % .unexpanded.gdef.enableXML % B.catcode`.!=.othercatcode % .catcode`.?=.othercatcode % .catcode`.:=.othercatcode * active in french % .catcode`.;=.othercatcode * active in french % .catcode`.&=.activecatcode % .catcode`.<=.activecatcode % .catcode`.>=.othercatcode % .catcode`."=.othercatcode % .catcode`./=.othercatcode % .catcode`.'=.othercatcode % .catcode`.~=.othercatcode % .catcode`.#=.othercatcode % .let &=.doXMLentity % .unexpanded.def<B.doXMLelementE* % .ifcase.XMLtokensreduction % .entitleXMLescapetokens % .or % .reduceXMLescapetokens % .else % .ignoreXMLescapetokens % .fi % .processingXMLtrue % .the.everyenableXML % E % % .gdef.activateXMLescapetokens % B.catcode`.$=.activecatcode % .catcode`.%=.activecatcode % .catcode`.\=.activecatcode % .catcode`.^=.activecatcode % .catcode`._=.activecatcode % .catcode`.{=.activecatcode % .catcode`.}=.activecatcode % .catcode`.|=.activecatcode % E % % .xdef.entitleXMLescapetokens % B.noexpand.activateXMLescapetokens % .noexpand.def.noexpand#B.noexpand&.string#035;E* % .noexpand.def.noexpand$B.noexpand&.string#036;E* % .noexpand.def.noexpand%B.noexpand&.string#037;E* % .noexpand.def.noexpand\B.noexpand&.string#092;E* % .noexpand.def.noexpand^B.noexpand&.string#094;E* % .noexpand.def.noexpand_B.noexpand&.string#095;E* % .noexpand.def.noexpand{B.noexpand&.string#123;E* % .noexpand.def.noexpand}B.noexpand&.string#125;E* % .noexpand.def.noexpand|B.noexpand&.string#124;E* % E % % .gdef.reduceXMLescapetokens % B.activateXMLescapetokens % .def#B.string#E* % .def$B.string$E* % .def%B.string%E* % .def\B.string\E* % .def^B.string^E* % .def_B.string_E* % .def{B.string{E* % .def}B.string}E* % .def|B.string|E* % E % % .gdef.ignoreXMLescapetokens % B.catcode`.$=.othercatcode % .catcode`.%=.othercatcode % .catcode`.\=.othercatcode % .catcode`.^=.othercatcode % .catcode`._=.othercatcode % .catcode`.{=.othercatcode % .catcode`.}=.othercatcode % .catcode`.|=.othercatcode % E % % * The following macro can be invokes when reading from % * an auxiliary file. % % .unexpanded.gdef.enableXMLelements % B.catcode60=.activecatcode * .catcode`.<=.activecatcode % .catcode62=.othercatcode * .catcode`.>=.other % .unexpanded.def<B.doXMLelementE* % .processingXMLtrue % E % % .unexpanded.gdef.disableXMLelements % B.catcode60=.activecatcode * .catcode`.<=.activecatcode % .catcode62=.othercatcode * .catcode`.>=.othercatcode % .let<.relax * new % .processingXMLfalse % E % % .global.let<.relax * new % .global.let&.relax * new % % .egroup % % \def\disableXML % {\setnormalcatcodes\processingXMLfalse} \defcatcodecommand\xmlcatcodese 046 \doXMLentity \defcatcodecommand\xmlcatcodese 060 \doXMLelement \defcatcodecommand\xmlcatcodesr 046 \doXMLentity \defcatcodecommand\xmlcatcodesr 060 \doXMLelement \defcatcodecommand\xmlcatcodesn 046 \doXMLentity \defcatcodecommand\xmlcatcodesn 060 \doXMLelement \letcatcodecommand\xmlcatcodesr 035 \letterhash \letcatcodecommand\xmlcatcodesr 036 \letterdollar \letcatcodecommand\xmlcatcodesr 037 \letterpercent \letcatcodecommand\xmlcatcodesr 092 \letterbackslash \letcatcodecommand\xmlcatcodesr 094 \letterhat \letcatcodecommand\xmlcatcodesr 095 \letterunderscore \letcatcodecommand\xmlcatcodesr 123 \letterleftbrace \letcatcodecommand\xmlcatcodesr 125 \letterrightbrace \letcatcodecommand\xmlcatcodesr 124 \letterbar \bgroup \catcode`\&=13 \let&\relax \xdef\entityhash {&\string#035;} \xdef\entitydollar {&\string#036;} \xdef\entitypercent {&\string#037;} \xdef\entitybackslash {&\string#092;} \xdef\entityhat {&\string#094;} \xdef\entityunderscore{&\string#095;} \xdef\entityleftbrace {&\string#123;} \xdef\entityrightbrace{&\string#125;} \xdef\entitybar {&\string#124;} \egroup \letcatcodecommand\xmlcatcodese 035 \entityhash \letcatcodecommand\xmlcatcodese 036 \entitydollar \letcatcodecommand\xmlcatcodese 037 \entitypercent \letcatcodecommand\xmlcatcodese 092 \entitybackslash \letcatcodecommand\xmlcatcodese 094 \entityhat \letcatcodecommand\xmlcatcodese 095 \entityunderscore \letcatcodecommand\xmlcatcodese 123 \entityleftbrace \letcatcodecommand\xmlcatcodese 125 \entityrightbrace \letcatcodecommand\xmlcatcodese 124 \entitybar % we speed things up by explicitly setting the active char's < & \doifmodeelse {mkiv} { \def\mksetXMLtokensreduction % mkiv {\setcatcodetable\xmlcatcodesn} } { \def\mksetXMLtokensreduction % mkii {\ifcase\XMLtokensreduction \setcatcodetable\xmlcatcodese \or \setcatcodetable\xmlcatcodesr \else \setcatcodetable\xmlcatcodesn \fi} } \bgroup \catcode`\<=13 \catcode`\&=13 \gdef\enableXML {\mksetXMLtokensreduction \let&\doXMLentity \unexpanded\def<{\doXMLelement}% \processingXMLtrue \the\everyenableXML} \gdef\disableXML {\setcatcodetable\ctxcatcodes % maybe \texcatcodes \processingXMLfalse} \gdef\enableXMLexpansion {\def<{\doXMLelement}% \let&\doXMLentity} \gdef\disableXMLexpansion {\unexpanded\def<{\doXMLelement}% \let&\doXMLentity} \unexpanded\gdef\enableXMLelements {\catcode60=\activecatcode \catcode62=\othercatcode \unexpanded\def<{\doXMLelement}% \processingXMLtrue} \unexpanded\gdef\disableXMLelements {\catcode60=\activecatcode \catcode62=\othercatcode \let<\relax \processingXMLfalse} \global\let<\relax \global\let&\relax \egroup %D An element can be singular or paired. A singular element is %D called an empty element. The following definitions are %D equivalent: %D %D \starttyping %D <eerste></eerste> <eerste/> <eerste /> %D \stoptyping %D %D Empty elements can have arguments too. Conforming the %D standard, each key must have a value. These are separated %D by an \type {=} sign and the value is delimited by either %D \type {"} or \type {'}. There may be spaces around the %D equal sign. %D %D \starttyping %D <eerste a= "b" c ="d" /> <eerste a = "b" c="d"/> %D \stoptyping %D %D Officially the following definition is not valid: %D %D \starttyping %D <eerste>some text</eerste> <eerste/> <eerste /> %D \stoptyping %D %D Although we can handle both cases independently, this is %D seldom needed. %D %D Processing instructions are identified by a~\type {?} and are %D like empty elements. %D %D \starttyping %D <?doel a="b" c="d"?> <?doel a="b" c="d" ?> %D \stoptyping %D %D Comment is formatted as follows. %D %D \starttyping %D <!-- comment --> %D \stoptyping %D %D Verbatim code inits purest form is called \type {CDATA} and %D is embedded in the following ugly and therefore recognizable %D way: %D %D \starttyping %D <![CDATA[ %D Dit is nogal verbatim ! %D Dit is nogal verbatim ! %D Dit is nogal verbatim ! %D ]]> %D \stoptyping %D The parser is implemented as a multi||step macro. Because %D \type {!} and \type {?} should be picked up correctly, we %D need to define a few macros in unprotected mode! %D %D Because \XML\ is defined with some restrictions in mind, %D parsing the elements is not that complicated. First we have %D to determine if we're dealing with a comment or processing %D instruction. We need a bit of grouping because we have to %D mess up with catcodes. We probably have to treat a few %D more catcode and first character cases. We need to use %D \type {\begingroup} here, otherwise we get funny spaces in %D math. %D Maybe I will remove grouping here and introduce \type %D {\obeyXMLlines}. %D By using a few {\expandafter}'s we can avoid a \type {\next} %D construction. We could speed the first char test up a bit %D by using an installer and something \typ {\getvalue %D {#1doXMLelement}} (todo). \protect % we need an normal ! ? % \long\def\doXMLelement#1% % {\if#1!\expandafter \xparseXMLescape \else % \if#1?\expandafter\expandafter\expandafter \xparseXMLprocess \else % \expandafter\expandafter\expandafter \xparseXMLelement \fi\fi % #1} \def\expandthree{\expandafter\expandafter\expandafter} \long\def\doXMLelement#1% {\if#1!\expandafter \xparseXMLescape \else \if#1?\expandthree \xparseXMLprocess \else \expandthree \xparseXMLelement \fi\fi #1} % does it end with ? or ?> \long\def\xparseXMLescape !#1 {\parseXMLescape{#1}} \long\def\xparseXMLprocess ?#1 #2>{\parseXMLprocess{#1}{#2}} \long\def\xparseXMLelement #1>{\parseXMLelement #1 >} %D The escape handler takes care of the fuzzy \type {<!} %D constructs. Unfortunately, we need to catch \type {<--text} %D too, so we need another handler: \long\def\xparseXMLescape !#1#2% {\if#1-% \if#2-% \expandafter\expandafter\expandafter\xxparseXMLescape \else \expandafter\expandafter\expandafter\xyparseXMLescape \fi \else \if#1[% \expandafter\expandafter\expandafter\xzparseXMLescape \else \expandafter\expandafter\expandafter\xyparseXMLescape \fi \fi#1#2} \long\def\xxparseXMLescape--#1{\parseXMLescape{--}#1} \long\def\xyparseXMLescape#1 {\parseXMLescape{#1}} \long\def\xzparseXMLescape[#1[{\parseXMLescape{#1}} %D Now the real work can begin. \unprotect \def\defineXMLescape[#1]#2% {\unspaceargument#1\to\ascii % get rid of {}, like in {CDATA[} \long\setvalue{\@@XMLescape:\ascii}{#2}} \def\parseXMLescape#1% #2> parsing takes place in macros {\executeifdefined{\@@XMLescape:#1}{\csname\@@XMLescape:\s!default\endcsname}} %D In our case, processing instructions are only needed if %D we want specific \CONTEXT\ support. This may be useful in %D applications where the data is generated by an %D application. We will implement a \CONTEXT\ code handler %D later. %D The processing instructions handler is implemented as %D follows. \long\def\defineXMLprocessor[#1]#2% {\long\setvalue{\@@XMLinstruction:#1}{#2}} % \def\parseXMLprocess#1#2% % {\executeifdefined{\@@XMLinstruction:#1}\gobbleoneargument{#2}} %D Because we support \type {.. ?>} as well as \type {.. >} %D end||of||pi situations, we need to clean up the ending %D \type {?}. \protect \long\def\cleanupXMLprocess#1% {\docleanupXMLprocess#1 ? \relax} \long\def\docleanupXMLprocess#1? #2\relax {\def\currentXMLprocess{#1}} \unprotect \def\parseXMLprocess#1#2% {\cleanupXMLprocess{#2}% \defconvertedcommand\ascii{#1}% %\writestatus{xml-process}{\ascii} \expanded {\executeifdefined {\@@XMLinstruction:\ascii} \noexpand\gobbleoneargument {\expandafter\noexpand\currentXMLprocess}}} %D One never knows: \let\normalparseXMLescape \parseXMLescape \let\normalparseXMLelement\parseXMLelement \let\normalparseXMLprocess\parseXMLprocess %D Next we will implement the normal element handler. This %D piece of code is complicated by the fact that we need to %D handle namespaces. \let\currentXMLarguments \empty \let\currentXMLelement \empty % name \let\currentXMLidentifier\empty % name or name/ \let\currentXMLnamespace \empty % the (remapped) namespace \let\originalXMLnamespace\empty % the unremapped namespace \let\rawXMLidentifier \empty \def\rawXMLnamespace {\ifx\currentXMLnamespace\empty\else\currentXMLnamespace:\fi} \def\rawXMLelement{\rawXMLnamespace\rawXMLidentifier} %D The following token list register provided the user a hook %D for extensions. \newtoks\everyXMLelement %D We try to keep track of the nature of an element. This %D flag can be used for special purposes (as in the pretty %D printing macros). \chardef\kindofXMLelement=0 \chardef\beginXMLtag=1 \chardef\endXMLtag =2 \chardef\emptyXMLtag=3 %D We do a rather hard coded scan for the namespace attribute. This %D is needed because its value determines further namespace related %D actions. \def\openXMLargument{ /} \long\def\parseXMLelement#1#2 #3>% {\def\currentXMLarguments{#3}% including end / \if#1/% \chardef\kindofXMLelement\endXMLtag \def\currentXMLelement{#2}% \else \docleanupXMLelement#1#2/\empty\relax \fi \ifx\currentXMLarguments\openXMLargument \chardef\kindofXMLelement\emptyXMLtag \fi \@EA\splitoffXMLnamespace\currentXMLelement::\relax \ifcase\kindofXMLelement % can't happen \or % begintag or emptytag with arguments or space before / \the\everyXMLelement % only for begin/empty tag ! \ifx\currentXMLarguments\empty \else \dogetXMLarguments\rawXMLelement#3>% \fi \or % no arguments \or % empty element without arguments (but possible presets) \the\everyXMLelement \fi \ifcase\kindofXMLelement\or \let \currentXMLidentifier \rawXMLidentifier \edef\currentXMLfullidentifier {\rawXMLelement }% \or \edef\currentXMLidentifier {/\rawXMLidentifier }% \edef\currentXMLfullidentifier{/\rawXMLelement }% \or \edef\currentXMLidentifier {\rawXMLidentifier/}% \edef\currentXMLfullidentifier {\rawXMLelement /}% \fi \iftraceXMLelements\traceXMLelement\fi \executeXMLelement} \long\def\docleanupXMLelement#1/#2#3\relax {\def\currentXMLelement{#1}% watch out: \empty == begin or empty tag \chardef\kindofXMLelement\ifx#2\empty\beginXMLtag\else\emptyXMLtag\fi} \def\@@traceXMLelement {\originalXMLfullidentifier \ifx\originalXMLfullidentifier\currentXMLfullidentifier\else \space=>\space\currentXMLfullidentifier \fi \ifx\currentXMLarguments\empty\else \space\string|\space\currentXMLarguments \fi} \long\def\traceXMLelement {\edef\originalXMLfullidentifier{\someXMLelementID\currentXMLelement}% \cleanupXMLarguments\writestatus{xml-element}{\@@traceXMLelement}} %D We split off the namespace part, construct the %D identifier, and remap the namespace if needed. \def\splitoffXMLnamespace#1:#2:#3\relax {\def\rawXMLidentifier{#2}% \ifx\rawXMLidentifier\empty \let\currentXMLnamespace\empty \edef\rawXMLidentifier{#1}% \else \edef\currentXMLnamespace{#1}% \fi \let\originalXMLnamespace\currentXMLnamespace \checkXMLnamespace\rawXMLidentifier} \def\xsplitoffXMLnamespace% fast resplit {\ifcsname\@@XMLnamespace:\currentXMLnamespace\endcsname \csname\@@XMLnamespace:\currentXMLnamespace\endcsname \fi} %D We will implement this macro later. \let\checkXMLnamespace\gobbleoneargument % see below %D The namespace attribute checking is part of the element %D parser, since the value of \type {xmlns} may influence other %D namespace mapping. \def\@@XMLns{xmlns} \def\checkXMLnamespaceattr#1% xmlns:\@@XMLname="\XMLns" {\edef\XMLns{#1}% \ifx\XMLns\empty \else \ifcsname\@@XMLurlspace:\XMLns\endcsname % get remapped namespace (from url) % \edef\XMLns{\csname\@@XMLurlspace:\XMLns\endcsname}% \@EA\let\@EA\XMLns\csname\@@XMLurlspace:\XMLns\endcsname % remap this one \ifx\@@XMLname\empty % not watertight since no implicit grouping \xautoXMLnamespace\XMLns \else \xremapXMLnamespace\@@XMLname\XMLns % redo namespace remapping of self if needed \ifx\XMLns\currentXMLnamespace % i'm still not sure if this is ok \else \xsplitoffXMLnamespace \fi \fi \fi \fi} %D Although not really needed, we clean up the arguments. % \long\def\cleanupXMLarguments % {\ifnum\kindofXMLelement=\emptyXMLtag % \ifx\currentXMLarguments\empty \else % \@EA\docleanupXMLarguments\currentXMLarguments/\empty % \fi % \fi} % % \long\def\docleanupXMLarguments#1/#2\empty % {\edef\currentXMLarguments{#1}} % % we need to be ...="/" .... /> safe \long\def\cleanupXMLarguments {\ifnum\kindofXMLelement=\emptyXMLtag \ifx\currentXMLarguments\empty \else \@EA\docleanupXMLarguments\currentXMLarguments/ \relax \fi \else\ifnum\kindofXMLelement=\beginXMLtag \ifx\currentXMLarguments\space \let\currentXMLarguments\empty \fi \fi\fi} % \long\def\docleanupXMLarguments#1/ #2\relax % space added earlier % {\edef\currentXMLarguments{#1}} % % \startbuffer % <xsl:value-of select="map[@att=$variable]/@att2"/> % \stopbuffer % % \showXMLbuffer % % No \type {\edef} in the following, else \showXMLbuffer fails: \long\def\docleanupXMLarguments#1/ #2\relax % space added earlier {\def\currentXMLarguments{#1}} % no \edef, goes wrong in \showXML \def\executeXMLelementA % no fallback {\ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname \csname\@@XMLelement:\currentXMLfullidentifier\endcsname \fi} \def\executeXMLelementB % default fallback {\csname \@@XMLelement:% \ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname \currentXMLfullidentifier \else \defaultXMLelementID % was \s!default \fi \endcsname} \def\executeXMLelementC % no namespace of default fallback {\csname \@@XMLelement:% \ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname \currentXMLfullidentifier \else\ifcsname\@@XMLelement:\currentXMLidentifier\endcsname \currentXMLidentifier \else \defaultXMLelementID % was \s!default \fi\fi \endcsname} \def\executeXMLelementD {\csname \ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname \@@XMLelement:\currentXMLfullidentifier \else\ifcsname\@@XMLelement:\currentXMLidentifier\endcsname \@@XMLelement:\currentXMLidentifier \else \executeXMLelementDD % less skipping and thereby faster \fi\fi \endcsname} \def\executeXMLelementDD % now forget about tex mapping {\ifcsname\normal@@XMLelement:\currentXMLfullidentifier\endcsname \normal@@XMLelement:\currentXMLfullidentifier \else\ifcsname\normal@@XMLelement:\currentXMLidentifier\endcsname \normal@@XMLelement:\currentXMLidentifier \else \normal@@XMLelement:\defaultXMLelementID % was \@@XMLelement:\s!default \fi\fi} \def\setXMLfallbackmode#1% {\ifcase#1\relax \let\executeXMLelement \executeXMLelementA \let\automateXMLnamespace\automateXMLnamespaceA \or % 1 \let\executeXMLelement \executeXMLelementB \let\automateXMLnamespace\automateXMLnamespaceB \or % 2 \let\executeXMLelement \executeXMLelementC \let\automateXMLnamespace\automateXMLnamespaceC \or % 3 \let\executeXMLelement \executeXMLelementD \let\automateXMLnamespace\automateXMLnamespaceD \fi} \setXMLfallbackmode3 % was 2 %D An example of fall back modes is given below. %D The automated namespace stuff is new and yet undocumented %D (see resource libraries for usage). \def\xautoXMLnamespace#1% fast internal one {\ifcsname\@@XMLnamespace-#1\endcsname\else \@EA\appendtoks\csname\@@XMLnamespace-#1\endcsname\to\autoXMLnamespaces \fi \@EA\edef\csname\@@XMLnamespace-#1\endcsname {\noexpand\edef\noexpand\@axmlns@{#1}% quicker #1 -> \#1 \noexpand\doautoXMLnamespace\noexpand\@axmlns@}} \def\doautoXMLnamespace#1% \done is set before list {\ifdone\else\automateXMLnamespace#1\fi} \def\automateXMLnamespaceA#1% {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname \let\currentXMLnamespace#1% \else\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname \let\currentXMLnamespace#1% \fi\fi} \let\automateXMLnamespaceB\automateXMLnamespaceA \let\automateXMLnamespaceC\automateXMLnamespaceA \def\automateXMLnamespaceD#1% {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname \let\currentXMLnamespace#1% \else\ifcsname\normal@@XMLelement:#1:\checkedXMLnamespace\endcsname \let\currentXMLnamespace#1% \else \automateXMLnamespaceDD#1% \fi\fi} \def\automateXMLnamespaceDD#1% {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname \let\currentXMLnamespace#1% \else\ifcsname\normal@@XMLelement:#1:\checkedXMLnamespace/\endcsname \let\currentXMLnamespace#1% \fi\fi} %D Later we will implement the error handler, here we handle %D the default case. \def\someXMLelementID#1% {\ifnum\kindofXMLelement=\endXMLtag /\fi #1% \ifnum\kindofXMLelement=\emptyXMLtag/\fi} \def\defaultXMLelementID {\someXMLelementID\s!default} %D It is possible to keep track of nesting automatically, %D but this would kind of prohibit things like \type %D {\ignorespaces}. In the future we may provide an %D automatic depth tracking as an alternative (exclusive) %D mode of operation combined with space grabbing. \def\beginXMLelement {\global\advance\XMLdepth\plusone \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement }%\writestatus{XML TRACE}{[begin] [\the\XMLdepth] [\XMLself]}} \def\endXMLelement {%\writestatus{XML TRACE}{[end] [\the\XMLdepth] [\XMLself]}% \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\undefined \global\advance\XMLdepth\minusone} % 0 = nothing % 1 = unknown % 2 = current element \chardef\XMLancestormode=2 % never change this one globally % \def\XMLancestor#1% % {\ifnum\numexpr(\XMLdepth-#1)>0 % \csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname % \else % \ifcase\XMLancestormode\or\s!unknown\or\currentXMLelement\fi % \fi} \def\XMLancestor#1% {\ifnum\numexpr\XMLdepth-#1\relax>\zerocount \csname\@@XMLdepth:\the\numexpr\XMLdepth-#1\relax\endcsname \else \ifcase\XMLancestormode\or\s!unknown\or\currentXMLelement\fi \fi} % \def\XMLpureancestor#1% % {\ifnum\numexpr(\XMLdepth-#1)>0 % \csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname % \fi} \def\XMLpureancestor#1% {\ifcase\numexpr\XMLdepth-#1\relax\or \csname\@@XMLdepth:\the\numexpr\XMLdepth-#1\relax\endcsname \fi} \def\XMLparent {\XMLancestor \plusone } \def\XMLself {\XMLancestor \zerocount} \def\XMLpureparent{\XMLpureancestor\plusone } \def\XMLpureself {\XMLpureancestor\zerocount} % \def\XMLpureancestor#1% % {\csname % \ifnum\numexpr(\XMLdepth-#1)>\zerocount % \@@XMLdepth:\the\numexpr(\XMLdepth-#1)% % \else % \s!empty % \fi % \endcsname} \def\XMLpureparent {\XMLpureancestor\plusone} % probleem: depth is vast en dus ook ancestor % \XMLinh{...} will backtrack definitions (given that the elements % use begin/end, the backtracking stops when a non-empty value is % encountered; maybe we will add some keyword (inherit) some day \def\XMLinhpar#1#2% {\@EA\ifx\csname\@@XMLvariable:#1:#2\endcsname\empty \@EA\pXMLinh \else \csname\@@XMLvariable:#1:#2\endcsname \@EA\gobbletwoarguments \fi\XMLdepth{#2}} \def\XMLinh {\XMLinhpar\currentXMLelement} % \def\pXMLinh#1% % {\@EA\ppXMLinh\@EA{\the\numexpr(#1-\plusone)}} \def\pXMLinh#1% {\@EA\ppXMLinh\@EA{\the\numexpr#1-\plusone\relax}} \def\ppXMLinh#1#2% {\@EA\ifx\csname\@@XMLvariable:#1:#2\endcsname\empty \ifnum#1>\plusone \@EAEAEA\pXMLinh \else \@EAEAEA\gobbletwoarguments \fi \else \csname\@@XMLvariable:#1:#2\endcsname \@EA\gobbletwoarguments \fi{#1}{#2}} % better % % \def\XMLpureancestor#1% % {\ifcsname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname % \csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname % \fi} % replaces macro in xtag-ini: ! ! ! \def\edefXMLop#1#2% \macro{att} {\edef#1% {\csname\ifcsname\@@XMLvariable:\ownXMLelement:#2\endcsname \@@XMLvariable:\ownXMLelement:#2\else\s!empty \fi\endcsname}} \def\edefXMLinh#1#2% \macro{att} {\edef#1{\XMLinh{#2}}} \def\edefXMLinhpar#1#2#3% \macro{tag}{att} {\edef#1{\XMLinhpar{#2}{#3}}} % \def\doifXMLopdef#1#2% \macro{att} % {\ifcsname\@@XMLvariable:\ownXMLelement:#1\endcsname % \@EA\let\@EA#1\csname\@@XMLvariable:\ownXMLelement:#1\endcsname % \expandafter\firstofoneargument % \else % \expandafter\gobbleoneargument % \fi} \fetchruntimecommand \tracebackXMLattribute {\f!xtagprefix\s!run} \fetchruntimecommand \showXMLinh {\f!xtagprefix\s!run} % \defineXMLenvironment[one] % {\beginXMLelement} % {\endXMLelement} % % \defineXMLenvironment[two] % {\beginXMLelement % \starttabulatie % \NC ancestor 1 \NC \XMLancestor{1} \NC \NR % \NC ancestor 2 \NC \XMLancestor{2} \NC \NR % \NC ancestor 3 \NC \XMLancestor{3} \NC \NR % \NC ancestor 4 \NC \XMLancestor{4} \NC \NR % \stoptabulatie} % {\endXMLelement} % % \startbuffer % <x:one> <x:two> <one> <two> </two> </one> </x:two> </x:one> % \stopbuffer % % {fallback A: \setXMLfallbackmode 0 \processXMLbuffer}\par % {fallback B: \setXMLfallbackmode 1 \processXMLbuffer}\par % {fallback C: \setXMLfallbackmode 2 \processXMLbuffer}\par % todo: split #1 into raws en reconstruct, set current etc, push and pop % % \def\beginXMLelement % {\dosingleempty\dobeginXMLelement} % % \def\dobeginXMLelement[#1]% % {\global\advance\XMLdepth 1 % \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement % \global\@EA\edef\csname\@@XMLdopth:\the\XMLdepth\endcsname{\ownXMLelement}% % \iffirstargument\edef\ownXMLelement{#1}\fi} % % \def\endXMLelement % {\@EA\let\@EA\ownXMLelement\csname\@@XMLdopth:\the\XMLdepth\endcsname % \global\advance\XMLdepth -1 } %D \defineXMLenvironment[one] %D {\beginXMLelement} %D {\endXMLelement} %D %D \defineXMLenvironment[two] %D {\beginXMLelement %D \starttabulate %D \NC parent 1 \NC \XMLancestor{1} \NC \NR %D \NC parent 2 \NC \XMLancestor{2} \NC \NR %D \NC parent 3 \NC \XMLancestor{3} \NC \NR %D \NC parent 4 \NC \XMLancestor{4} \NC \NR %D \stoptabulate} %D {\endXMLelement} %D %D \startbuffer %D <x:one> <x:two> <one> <two> </two> </one> </x:two> </x:one> %D \stopbuffer %D %D fallback A: \setXMLfallbackmode0 \processXMLbuffer %D fallback B: \setXMLfallbackmode1 \processXMLbuffer %D fallback C: \setXMLfallbackmode2 \processXMLbuffer %D Here we do the namespace (re)mapping. More examples are %D provided in the manual. %D %D \starttyping %D \supportXMLnamespace [test] % needed to get a namespace working %D \skipXMLnamespace [test] % slow %D \ignoreXMLnamespace [test] % faster %D \defineXMLenvironment [rubish:itemize] {[} {]} %D \defineXMLenvironment [rubish:item] {(} {)} %D \remapXMLnamespace [crap] [rubish] %D \remapXMLnamespace [con] [context] %D \remapXMLurlspace [http://www.pragma-ade.com/dtd/context] [context] %D \autoXMLnamespace [context] % fallback %D \autoXMLnamespace [whatever] % second fall back %D \stoptyping \newtoks\autoXMLnamespaces %D The automatically mapped namespaces (the fallbacks so to %D day) are collected in a token list. \let\checkedXMLnamespace\empty \def\checkXMLnamespace#1% {\edef\checkedXMLnamespace{#1}% \ifcsname\@@XMLnamespace:\currentXMLnamespace\endcsname \csname\@@XMLnamespace:\currentXMLnamespace\endcsname % forced namespace \else\ifcsname\@@XMLelement:\currentXMLelement\endcsname % natural element \else\ifcsname\@@XMLelement:\currentXMLelement/\endcsname % natural element \else % locate fallback \donefalse\the\autoXMLnamespaces \fi\fi\fi} \def\skipXMLnamespace[#1]% {\letvalue{\@@XMLnamespace:#1}\doXMLskipnamespace} \def\doXMLskipnamespace {\long\@EA\def\csname\@@XMLelement:\checkedXMLnamespace\endcsname {\getXMLgroupedignore\checkedXMLnamespace}} \def\hideXMLnamespace[#1]% {\letvalue{\@@XMLnamespace:#1}\doXMLhidenamespace} \def\doXMLhidenamespace {\long\@EA\def\csname\@@XMLelement:\checkedXMLnamespace\endcsname {\redoXMLignore\checkedXMLnamespace}} \def\ignoreXMLnamespace[#1]% {\letvalue{\@@XMLnamespace:#1}\doXMLignorenamespace} \def\doXMLignorenamespace % \let binnen def {\long\@EA\def\csname\@@XMLelement:\checkedXMLnamespace\endcsname {\@EA\redoXMLignore\@EA{\checkedXMLnamespace}}} % EA ? \def\remapXMLnamespace {\dodoubleargument\doremapXMLnamespace} \def\doremapXMLnamespace[#1][#2]% {\ifsecondargument \setvalue{\@@XMLnamespace:#1}{\def\currentXMLnamespace{#2}}% \else \letvalue{\@@XMLnamespace:#1}\relax \fi} \def\supportXMLnamespace% {\dosingleargument\dosupportXMLnamespace} \def\dosupportXMLnamespace[#1]% {\setvalue{\@@XMLnamespace:#1}{\def\currentXMLnamespace{#1}}} \def\xremapXMLnamespace#1#2% fast internal one {\@EA\edef\csname\@@XMLnamespace:#1\endcsname {\def\noexpand\currentXMLnamespace{#2}}} \def\autoXMLnamespace[#1]% {\xautoXMLnamespace{#1}} \def\xautoXMLnamespace#1% fast internal one {\ifcsname\@@XMLnamespace-#1\endcsname\else \@EA\appendtoks\csname\@@XMLnamespace-#1\endcsname\to\autoXMLnamespaces \fi \@EA\edef\csname\@@XMLnamespace-#1\endcsname {\noexpand\doautoXMLnamespace{#1}}} \def\doautoXMLnamespace#1% \done is set before list {\ifdone\else \ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname \def\currentXMLnamespace{#1}% \else\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname \def\currentXMLnamespace{#1}% \fi\fi \fi} \def\resetXMLnamespace[#1]% {\letvalue{\@@XMLnamespace-#1}\gobbleoneargument \letvalue{\@@XMLnamespace:#1}\gobbleoneargument} \def\remapXMLurlspace {\dodoubleargument\doremapXMLurlspace} \def\doremapXMLurlspace[#1][#2]% {\setvalue{\@@XMLurlspace:#1}{#2}} %D Entities needs a bit more work, as well as a connection %D with the encoding handlers. % we need to be able to do: % % \defineXMLentity[amp] {\FunnyAmp} \def\FunnyAmp#1;{\getXMLentity{#1}} % % \defineXMLentity [pound] {(why not use euro's?)} % % \startXMLdata % test &pound; test % \stopXMLdata % % so we need an ifless implementation % % also .. this should work: % % \defineXMLentity[ctx-var-textwidth] {\textwidth} % % \defineXMLcommand[test][width=\textwidth] % {\the\dimexpr\XMLop{width}\relax} % % \startXMLdata % <test width=".45&ctx-var-textwidth;"/> % <test width="&ctx-var-textwidth;"/> % \stopXMLdata % \eacute -> simplified -> e (via raw encoding) % -> raw -> eacute (via handler) % % naming sucks \newif\ifXMLrawentities % proper fallback \newif\ifXMLsimpleentities % last resort \def\simpleXMLencoding{raw} \ifnum\texengine=\luatexengine \def\simplifyXMLentities {\XMLsimpleentitiestrue} \else \def\simplifyXMLentities {\fastenableencoding\simpleXMLencoding \XMLsimpleentitiestrue} \fi \def\defineXMLentity {\dodoubleempty\dodefineXMLentity} \def\dodefineXMLentity[#1][#2]#3% {\ifsecondargument \defineXMLentities[#1]{#2}{#3}% \else \dododefineXMLentity{#1}{#3}% \fi} \def\defineXMLentities[#1]#2#3% {\dododefineXMLentity{#1}{\ifXMLsimpleentities#2\else#3\fi}} \def\dododefineXMLentity#1#2% {\unspaceargument#1\to\ascii % #1 can be {[} or so \long\setvalue{\@@XMLentity:\@EA\firstofoneargument\ascii}{#2}} \def\setXMLentity#1% fast one {\long\@EA\def\csname\@@XMLentity:#1\endcsname} %D May this wile become dodo (more in tune with rest); %D beware: also remapped in xtag-map. \def\doXMLentity#1#2;% interesting: # is now ## {\if\string#1\letterhash \@EA\parseXMLcharacter \else\ifXMLrawentities \@EAEAEA\firstofoneargument \else \@EAEAEA\executeXMLentity \fi\fi{#1#2}} %D Here we need to get rid of the double hash and act upon the %D number. Proper hex/oct number support can be implemented by %D redefining \type {\executeXMLcharacter}. % \def\parseXMLcharacter#1% gobble the ##x % {\@EA\executeXMLcharacter\@EA{\gobblethreearguments#1}} % % single hash now % % \def\parseXMLcharacter#1% % {\@EA\executeXMLcharacter\@EA{\gobbleoneargument#1}} % % \def\executeXMLcharacter#1% can be overloaded % {\ifnum"#1<256 % \@EA\getXMLcharacter % \else\ifXMLrawentities % \@EAEAEA\firstofoneargument % \else % \@EAEAEA\unknownXMLcharacter % \fi\fi{\number"#1}} % % \unexpanded\def\getXMLcharacter#1{\rawcharacter{#1}} \def\parseXMLcharacter#1% {\@EA\executeXMLcharacter\gobbleoneargument#1\empty\relax} \def\executeXMLcharacter#1#2\relax {\if#1x% \@EA\noexecuteXMLhexcharacter \else \@EA\doexecuteXMLdeccharacter \fi#1#2\relax} \def\noexecuteXMLhexcharacter x#1\relax {\uppercase{\doexecuteXMLhexcharacter#1\relax}} % \unexpanded\def\getXMLcharacter#1% % {\ifXMLrawentities % \@EA\firstofoneargument % \else\ifcsname\@@XMLentity:#1\endcsname % \@EAEAEA\getXMLentity % \else % \@EAEAEA\unicodechar % was: \rawcharacter % \fi\fi{#1}} % % \def\doexecuteXMLhexcharacter#1\relax{\getXMLcharacter{"#1}} % \def\doexecuteXMLdeccharacter#1\relax{\getXMLcharacter {#1}} % % if we want to support x in entity overloading, we prefer: \unexpanded\def\getXMLdeccharacter#1% {\ifXMLrawentities \@EA\rawXMLdecentity \else\ifcsname\@@XMLentity:#1\endcsname \@EAEAEA\getXMLdecentity \else \@EAEAEA\unicodechar \fi\fi{#1}} \unexpanded\def\getXMLhexcharacter#1% {\ifXMLrawentities \@EA\rawXMLhexentity \else\ifcsname\@@XMLentity:x#1\endcsname \@EAEAEA\getXMLhexentity \else \@EAEAEA\unicodehexchar \fi\fi{#1}} \def\unicodehexchar#1{\unicodechar{"#1}} \let\getXMLcharacter\getXMLdeccharacter \def\getXMLdecentity#1{\getXMLentity {#1}} \def\getXMLhexentity#1{\getXMLentity{x#1}} \def\rawXMLdecentity#1{#1} \def\rawXMLhexentity#1{x#1} \def\doexecuteXMLhexcharacter#1\relax{\getXMLhexcharacter{#1}} \def\doexecuteXMLdeccharacter#1\relax{\getXMLdeccharacter{#1}} % \defineXMLentity[8218] {Adam} % \defineXMLentity[x007D]{Eve} % % \startbuffer % @ ‘ ‚ “ ” „• % & % $ { }   … % \stopbuffer % % \typebuffer \processXMLbuffer % left overs \def\unknownXMLcharacter#1{[#1]} \ifx\unicodechar\undefined\let\unicodechar\rawcharacter\fi % brrrr % \useXMLfilter[ent] % % \defineXMLsingular[test]{{\simplifyXMLentities\XMLpar{test}{bla}{}}} % % \startXMLdata % <test bla="Óblaébla&tex;and$andüziezoྙ" /> % \stopXMLdata % % \defineXMLentity[45]{|it works|} % {|-|} % % \startXMLdata % text-.text % textEFtext % \stopXMLdata %D May be this will change a bit ... \def\executeXMLentity#1% named one {\getXMLentity{#1}} %\def\expandedXMLentity#1% % {\ifcsname\@@XMLentity:#1\endcsname\csname\@@XMLentity:#1\endcsname\fi} % %\unexpanded\def\getXMLentity#1% % {\ifcsname\@@XMLentity:#1\endcsname\csname\@@XMLentity:#1\endcsname\fi} % %\def\expandedXMLentity#1% % {\csname\@@XMLentity:#1\endcsname} % %\unexpanded\def\getXMLentity#1% % {\csname\@@XMLentity:#1\endcsname} \doifundefined{autoXMLentitiestrue}{\expandafter\newif\csname ifautoXMLentities\endcsname} % fall back on context commands \def\expandedXMLentity#1% {\ifcsname\@@XMLentity:#1\endcsname \@EA \execXMLentity \else\ifautoXMLentities \@EAEAEA \autoXMLentity \else \@EAEAEA \crapXMLentity \fi\fi{#1}} \def\execXMLentity#1{\csname\@@XMLentity:#1\endcsname} \def\crapXMLentity#1{\inframed[\c!offset=.1ex]{\tttf#1}} \def\autoXMLentity#1{\ifcsname#1\endcsname\csname#1\endcsname\fi} \unexpanded\def\getXMLentity{\expandedXMLentity} %\def\doifXMLentityelse#1#2#3% % {\ifcsname\@@XMLentity:#1\endcsname#2\else#3\fi} \def\doifXMLentityelse#1% {\ifcsname\@@XMLentity:#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \letvalue{1@2}\firstoftwoarguments % \letvalue{2@2}\secondoftwoarguments % % \def\doifXMLentityelse#1% % {\csname\ifcsname\@@XMLentity:#1\endcsname1\else2\fi @2\endcsname} % see \defineXML... commands: % % [key=val] => \presetXMLarguments{element} => default key/vals % [blabla] => \theXMLarguments{blabla} => user key/vals % [blabla] [key=val] => \presetXMLarguments{element} => default key/vals % \theXMLarguments{blabla} => user key/vals % % <element key="val"> stored in case of [blabla] else set as \XMLpar % % see m-steps for an example of usage \let\@@XMLmapmap\empty \newif\ifXMLnamespace \long\def\getXMLarguments#1#2% {\XMLnamespacefalse \dogetXMLarguments{#1}#2>} \let\dosetXMLattributeA\gobbleoneargument \def\dosetXMLattributeB#1% {\ifx\@@XMLspac\originalXMLnamespace \@EA\def\csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname{#1}% % maybe some day global handling here as well \fi} \def\dosetXMLattributeC {\@EA\def\csname\@@XMLvariable:\@@XMLclass\ifx\@@XMLspac \originalXMLnamespace\else:\@@XMLspac\fi:\@@XMLname\endcsname} \def\dosetXMLattributeD {\@EA\def\csname\@@XMLvariable:\@@XMLclass:\ifx\@@XMLspac \originalXMLnamespace\currentXMLnamespace\else\@@XMLspac\fi:\@@XMLname\endcsname} \def\setXMLattributemode#1% {\ifcase#1\relax \let\dosetXMLattribute\dosetXMLattributeA \or \let\dosetXMLattribute\dosetXMLattributeB \or \let\dosetXMLattribute\dosetXMLattributeC \or \let\dosetXMLattribute\dosetXMLattributeD \fi} \setXMLattributemode{2} % a reasonable default \let\@@XMLspac\empty % argumentnamespace \long\def\dogetXMLarguments#1% {\XMLtoks\emptytoks \ifcsname\@@XMLmap:#1\endcsname \let\dodosetXMLargument\dodosetXMLargumentB \else \def\@@XMLclass{#1}% \let\dodosetXMLargument\dodosetXMLargumentA \fi \let\dodoparseXMLarguments\doparseXMLarguments \doparseXMLarguments} % \long\def\doparseXMLarguments#1% space goes ok % {\if#1>% % \let\dodoparseXMLarguments\empty % \else\if#1=% % \edef\@@XMLname{\the\XMLtoks}% % \XMLtoks\emptytoks % \else\if#1"% % \let\dodoparseXMLarguments\dodoparseXMLargumentsD % \else\if#1'% % \let\dodoparseXMLarguments\dodoparseXMLargumentsS % \else\if#1:% % \XMLnamespacetrue % \edef\@@XMLspac{\the\XMLtoks}% % \XMLtoks\emptytoks % \else\if#1/% % \chardef\kindofXMLelement\emptyXMLtag % \else % \XMLtoks\@EA{\the\XMLtoks#1}% % \fi\fi\fi\fi\fi\fi % \dodoparseXMLarguments} % % The next speed optimization is suggested by Taco. Since we % are dealing with validated code, we can grab larger chunks. % % \long\def\doparseXMLarguments#1% space goes ok % {\if#1>% % \let\dodoparseXMLarguments\empty % \else\if#1/% % \chardef\kindofXMLelement\emptyXMLtag % \else % \XMLtoks{#1}% % \let\dodoparseXMLarguments\dodoparseXMLargumentsX % \fi\fi % \dodoparseXMLarguments} % % we can get rid of one more assignment \long\def\doparseXMLarguments#1% space goes ok {\if#1>% %\let\dodoparseXMLarguments\empty \expandafter\gobbleoneargument % speedup \else\if#1/% \chardef\kindofXMLelement\emptyXMLtag \else \XMLtoks{#1}% \let\dodoparseXMLarguments\dodoparseXMLargumentsX \fi\fi \dodoparseXMLarguments} % slightly faster: % % \long\def\doparseXMLarguments#1% space goes ok % {\if#1>% % \@EA\gobbleoneargument % \else\if#1/% % \chardef\kindofXMLelement\emptyXMLtag % \@EAEAEA\gobbletwoarguments % \else % \@EAEAEA\dodoparseXMLargumentsX % \fi\fi#1} % % \def\dodoparseXMLargumentsX#1=#2% % {\def\@@XMLname{#1}% % \getXMLNSSSS#1:\relax % \if#2"% % \expandafter\dodoparseXMLargumentsD % \else % \expandafter\dodoparseXMLargumentsS % \fi} \def\dodoparseXMLargumentsX#1=#2% {\edef\@@XMLname{\the\XMLtoks#1}% \@EA\getXMLNSSSS\@@XMLname:\relax \XMLtoks\emptytoks \if#2"% \let\dodoparseXMLarguments\dodoparseXMLargumentsD \else \let\dodoparseXMLarguments\dodoparseXMLargumentsS \fi \dodoparseXMLarguments} \def\gobbleuntilcolon#1:{#1} \def\getXMLNSSSS#1:#2\relax {\def\!!stringa{#2}% \ifx\!!stringa\empty \else \XMLnamespacetrue \edef\@@XMLname{\gobbleuntilcolon#2}% \edef\@@XMLspac{#1}% \fi} % ok ? % % \def\dodoparseXMLargumentsX#1=#2% % {\edef\@@XMLname{\the\XMLtoks#1}% % \@EA\getXMLNSSSS\@@XMLname:\relax % \XMLtoks\emptytoks % \if#2"% % \@EA\dodoparseXMLargumentsD % \else % \@EA\dodoparseXMLargumentsS % \fi} % Storing \type {#1} in a macro in order to minimize the % amount of data passed as argument does not improve % performance, so we keep the readable form. \def\dodoparseXMLargumentsD#1"{\dosetXMLargument{#1}} \def\dodoparseXMLargumentsS#1'{\dosetXMLargument{#1}} % the readable version % % \def\dosetXMLargument#1% % {\ifXMLnamespace % \ifx\@@XMLspac\@@XMLns % \checkXMLnamespaceattr{#1}% xmlns:\@@XMLname="#1" % \else % \dosetXMLattribute{#1}% some:\@@XMLname="#1" % \fi % \XMLnamespacefalse % \else\ifx\@@XMLname\@@XMLns % \checkXMLnamespaceattr{#1}% xmlns="#1" % \else % \dodosetXMLargument{#1}% % \fi\fi % \let\dodoparseXMLarguments\doparseXMLarguments % \dodoparseXMLarguments} % % the ugly alternative % \def\dosetXMLargument#1% ugly alternative % {\ifXMLnamespace % \XMLnamespacefalse % \ifx\@@XMLspac\@@XMLns % \@EAEAEA\checkXMLnamespaceattr % xmlns:\@@XMLname="#1" % \else % \@EAEAEA\dosetXMLattribute % some:\@@XMLname="#1" % \fi % \else\ifx\@@XMLname\@@XMLns % \@EAEAEA\checkXMLnamespaceattr % xmlns="#1" % \else % \@EAEAEA\dodosetXMLargument % \fi\fi{#1}% % \let\dodoparseXMLarguments\doparseXMLarguments % \dodoparseXMLarguments} \def\dosetXMLargument#1% ugly alternative {\ifXMLnamespace \XMLnamespacefalse \ifx\@@XMLspac\@@XMLns \@EAEAEA\checkXMLnamespaceattr % xmlns:\@@XMLname="#1" \else \@EAEAEA\dosetXMLattribute % some:\@@XMLname="#1" \fi \else\ifx\@@XMLname\@@XMLns \@EAEAEA\checkXMLnamespaceattr % xmlns="#1" \else \@EAEAEA\dodosetXMLargument \fi\fi{#1}% \dodocopyXMLargument \let\dodoparseXMLarguments\doparseXMLarguments \dodoparseXMLarguments} \let\dodocopyXMLargument\relax % \def\dododocopyXMLargument % {\@EA\let\csname\@@XMLvariable:\the\numexpr(\XMLdepth+1):\@@XMLname\@EA\endcsname % \csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname} \def\dododocopyXMLargument {\@EA\let\csname\@@XMLvariable:\the\numexpr\XMLdepth+\plusone\relax:\@@XMLname\@EA\endcsname \csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname} \def\copyXMLargumentindeed {\let\dodocopyXMLargument\dododocopyXMLargument \let\copyXMLargumentindeed\relax} \def\dodosetXMLargumentA {\@EA\def\csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname} % \def\dodosetXMLargumentB#1% % {\@EA\edef\csname\@@XMLmap:\@@XMLmapmap\endcsname % {\@EA\ifx\csname\@@XMLmap:\@@XMLmapmap\endcsname\empty\else % \csname\@@XMLmap:\@@XMLmapmap\endcsname,% % \fi % \@@XMLname=#1}} \def\dodosetXMLargumentB#1% {\@EA\edef\csname\@@XMLmap:\@@XMLmapmap\endcsname {\@EA\ifx\csname\@@XMLmap:\@@XMLmapmap\endcsname\empty\else \csname\@@XMLmap:\@@XMLmapmap\endcsname,% \fi \@@XMLname={#1}}} % {} is needed for aa='bb,cc' \appendtoks \resetXMLarguments{\rawXMLnamespace\rawXMLidentifier}% \to \everyXMLelement \def\resetXMLarguments#1% {\ifcsname\@@XMLmap:#1\endcsname \@EA\let\@EA\@@XMLmapmap\csname\@@XMLmap:#1\endcsname \@EA\let\csname\@@XMLmap:\@@XMLmapmap\endcsname\empty \fi} \def\theXMLarguments#1% {\ifcsname\@@XMLmap:#1\endcsname\csname\@@XMLmap:#1\endcsname\fi} \def\doexpandXMLvalue#1#2% {\ifcsname#2\endcsname \bgroup \enableXMLexpansion \let\getXMLentity\expandedXMLentity #1% simplify maps entities back to _ and alike \expanded{\global\globalscratchtoks{\csname#2\endcsname}}% \egroup \@EA\edef\csname#2\endcsname{\the\globalscratchtoks}% \fi} \def\expandXMLvalue {\doexpandXMLvalue\relax} \def\simplifyXMLvalue{\doexpandXMLvalue\XMLsimpleentitiestrue} \def\expandTEXpar #1#2{\expandXMLvalue{#1\interfaced{#2}}} \def\expandXMLpar #1#2{\expandXMLvalue{\@@XMLvariable:#1:#2}} \def\expandXMLarguments #1{\expandXMLvalue{\@@XMLmap:#1}} \def\simplifyTEXpar #1#2{\simplifyXMLvalue{#1\interfaced{#2}}} \def\simplifyXMLpar #1#2{\simplifyXMLvalue{\@@XMLvariable:#1:#2}} \def\simplifyXMLarguments#1{\simplifyXMLvalue{\@@XMLmap:#1}} %D \startbuffer[tex] %D \defineXMLsingular [fx:root] %D {\XMLNSpar{fx:root}{xml}{lang}{} %D \XMLpar{fx:root}{xml:lang}{} %D \starttabulate[||||] %D \HL %D \NC \bf mode \NC \bf call \NC \bf result \NC\NR %D \HL %D \NC 0\NC\asciistr{\XMLpar {fx:root} {crap} {}} \NC dirt \NC\NR %D \NC \NC\asciistr{\XMLpar {fx:root} {junk} {}} \NC \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {fx} {crap} {}}\NC \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {xml} {lang} {}}\NC \NC\NR %D \HL %D \NC 1\NC\asciistr{\XMLpar {fx:root} {crap} {}} \NC dirt \NC\NR %D \NC \NC\asciistr{\XMLpar {fx:root} {junk} {}} \NC junk \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {fx} {crap} {}}\NC \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {xml} {lang} {}}\NC \NC\NR %D \HL %D \NC 2\NC\asciistr{\XMLpar {fx:root} {crap} {}} \NC dirt \NC\NR %D \NC \NC\asciistr{\XMLpar {fx:root} {junk} {}} \NC junk \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {fx} {crap} {}}\NC \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {xml} {lang} {}}\NC en \NC\NR %D \HL %D \NC 3\NC\asciistr{\XMLpar {fx:root} {crap} {}} \NC dirt \NC\NR %D \NC \NC\asciistr{\XMLpar {fx:root} {junk} {}} \NC junk \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {fx} {crap} {}}\NC rubish\NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {xml} {lang} {}}\NC en \NC\NR %D \HL %D \stoptabulate} %D %D \remapXMLurlspace [http://www.w3.org/1999/XSL/Format] [fx] %D \stopbuffer %D %D \startbuffer[xml] %D <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" %D fo:crap="rubish" %D fo:junk="junk" %D xml:lang="en" %D crap="dirt" /> %D \stopbuffer %D %D \typebuffer[tex] \processTEXbuffer[tex] %D \typebuffer[xml] \processXMLbuffer[xml] %D The previous macros were the basic parser and their working %D is left to the imagination of the reader. These macros %D will be improved over time. We use rather low level %D definitions so that the mappings will run as fast as %D possible. \bgroup \catcode`<=\activecatcode \long\gdef\dododefineXMLsingular#1#2% {\long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2}} \long\gdef\dododefineXMLcommand#1#2% {\long\@EA\def\csname\@@XMLelement:#1\endcsname{#2}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2}} \long\gdef\dododefineXMLgrouped#1#2% {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\groupedcommand{#2}\donothing\bgroup}% \@EA\let\csname\@@XMLelement:/#1\endcsname\egroup \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing} \long\gdef\dododefineXMLargument#1#2% watch the {} around ##1 {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLargument{#1}{#2}} \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2{}}} \long\gdef\redoXMLargument#1#2% potential optimization: globalnext {\long\@EA\gdef\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>{#2{##1}}% \next} \long\gdef\dododefineXMLignore#1% {\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLignore{#1}} \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing} \long\gdef\redoXMLignore#1% {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>{}% \next} \long\gdef\dododefineXMLpickup#1#2#3% {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLpickup{#1}{#2}{#3}} \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}} \long\gdef\redoXMLpickup#1#2#3% {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>{#2##1#3}% \next} \long\gdef\dododefineXMLenvironment#1#2#3% {\long\@EA\def\csname\@@XMLelement:#1\endcsname{#2}% \long\@EA\def\csname\@@XMLelement:/#1\endcsname{#3}% \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}} \long\gdef\dododefineXMLsave#1% {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty \long\@EA\def\csname\@@XMLelement:#1\endcsname {\redoXMLsave{#1}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}} \long\gdef\dododefineXMLsavecontent#1#2% {\long\@EA\def\csname\@@XMLdata:#1\endcsname{#2}% \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLsave{#1}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}} \long\gdef\redoXMLsave#1% {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>% {\long\@EA\def\csname\@@XMLdata:#1\endcsname{##1}}% \next} \long\gdef\dododefineXMLgsave#1% {\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLgsave{#1}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}} \long\gdef\dododefineXMLgsavecontent#1#2% {\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{#2}% \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLgsave{#1}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}} \long\gdef\redoXMLgsave#1% {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>% {\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{##1}}% \next} \long\gdef\dododefineXMLenvironmentsave#1#2#3% {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLenvironmentsave{#1}{#2}{#3}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}} % maybe \globalnext \long\gdef\redoXMLenvironmentsave#1#2#3% {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>% {#2\long\@EA\def\csname\@@XMLdata:#1\endcsname{##1}#3}% \next} \long\gdef\dododefineXMLenvironmentgsave#1#2#3% {\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLenvironmentgsave{#1}{#2}{#3}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}} \long\gdef\redoXMLenvironmentgsave#1#2#3% {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>% {#2\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{##1}#3}% \next} \long\gdef\dododefineXMLprocess#1% {\@EA\let\csname\@@XMLelement:#1\endcsname\donothing \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing} \long\gdef\dododefineXMLnestedenvironment#1#2#3% {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\getXMLgroupedenvironment{#1}{#2}{#3}}% \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}} \long\gdef\dododefineXMLnestedargument#1#2% {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\getXMLgroupedargument{#1}{#2}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2{}}} \long\gdef\dododefineXMLnestedsave#1% {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty \long\@EA\def\csname\@@XMLelement:#1\endcsname {\getXMLgroupednestedsave{#1}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}} \long\unexpanded\gdef\getXMLgroupednestedsave#1% {\collectXMLgroupedtrue \long\def\dodogetgrouped{\long\@EA\edef\csname\@@XMLdata:#1\endcsname{\the\groupedtoks}}% \getXMLgrouped{#1}} \long\gdef\dododefineXMLnestedenvironmentsave#1#2#3% {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty \long\@EA\def\csname\@@XMLelement:#1\endcsname {\getXMLgroupednestedenvironmentsave{#1}{#2}{#3}}% \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}} \long\unexpanded\gdef\getXMLgroupednestedenvironmentsave#1#2#3% {\collectXMLgroupedtrue \long\def\dodogetgrouped{#2\long\@EA\edef\csname\@@XMLdata:#1\endcsname{\the\groupedtoks}#3}% \getXMLgrouped{#1}} \egroup %D The high level definition macros. \def\defineXMLsingular {\dotripleempty\dodefineXMLsingular} \def\defineXMLcommand {\dotripleempty\dodefineXMLcommand} \def\defineXMLgrouped {\dotripleempty\dodefineXMLgrouped} \def\defineXMLargument {\dotripleempty\dodefineXMLargument} \def\defineXMLignore {\dotripleempty\dodefineXMLignore} \def\defineXMLpickup {\dotripleempty\dodefineXMLpickup} \def\defineXMLenvironment {\dotripleempty\dodefineXMLenvironment} \def\defineXMLsave {\dotripleempty\dodefineXMLsave} \def\defineXMLsavecontent {\dotripleempty\dodefineXMLsavecontent} \def\defineXMLgsave {\dotripleempty\dodefineXMLgsave} \def\defineXMLgsavecontent {\dotripleempty\dodefineXMLgsavecontent} \def\defineXMLenvironmentsave {\dotripleempty\dodefineXMLenvironmentsave} \def\defineXMLenvironmentgsave {\dotripleempty\dodefineXMLenvironmentgsave} \def\defineXMLprocess {\dotripleempty\dodefineXMLprocess} \def\defineXMLnested {\dotripleempty\dodefineXMLnestedenvironment} \def\defineXMLnestedenvironment {\dotripleempty\dodefineXMLnestedenvironment} \def\defineXMLnestedargument {\dotripleempty\dodefineXMLnestedargument} \def\defineXMLnestedsave {\dotripleempty\dodefineXMLnestedsave} \def\defineXMLnestedenvironmentsave{\dotripleempty\dodefineXMLnestedenvironmentsave} %D We can nill definitions with: \def\resetXMLelement[#1]{\dododefineXMLprocess{#1}} %D This is equivalent to: %D %D \starttyping %D \def\resetXMLelement[#1]% handy in case only singular %D {\@EA\let\csname\@@XMLelement:#1\endcsname \donothing %D \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing %D \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing} %D \stoptyping % push is (not yet) a real push, so: \def\defineXMLpush {\dotripleempty\dodefineXMLsave} \def\defineXMLenvironmentpush{\dotripleempty\dodefineXMLenvironmentsave} % goes for all types \long\def\dodefineXMLsingular[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLsingular{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLcommand[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLcommand{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLgrouped[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLgrouped{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLargument[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLargument{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLignore[#1][#2][#3]% {\defineXMLmethod\dododefineXMLignore{#1}{#2}{#3}{}{}} \long\def\dodefineXMLpickup[#1][#2][#3]#4#5% {\defineXMLmethod\dododefineXMLpickup{#1}{#2}{#3}{#4}{#5}} \long\def\dodefineXMLenvironment[#1][#2][#3]#4#5% {\defineXMLmethod\dododefineXMLenvironment{#1}{#2}{#3}{#4}{#5}} \long\def\dodefineXMLsave[#1][#2][#3]% {\defineXMLmethod\dododefineXMLsave{#1}{#2}{#3}{}{}} \long\def\dodefineXMLsavecontent[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLsavecontent{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLgsave[#1][#2][#3]% {\defineXMLmethod\dododefineXMLgsave{#1}{#2}{#3}{}{}} \long\def\dodefineXMLgsavecontent[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLgsavecontent{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLenvironmentsave[#1][#2][#3]#4#5% {\defineXMLmethod\dododefineXMLenvironmentsave{#1}{#2}{#3}{#4}{#5}} \long\def\dodefineXMLenvironmentgsave[#1][#2][#3]#4#5% {\defineXMLmethod\dododefineXMLenvironmentgsave{#1}{#2}{#3}{#4}{#5}} \long\def\dodefineXMLprocess[#1][#2][#3]% {\defineXMLmethod\dododefineXMLprocess{#1}{#2}{#3}{}{}} \long\def\dodefineXMLnestedenvironment[#1][#2][#3]#4#5% {\defineXMLmethod\dododefineXMLnestedenvironment{#1}{#2}{#3}{#4}{#5}} \long\def\dodefineXMLnestedargument[#1][#2][#3]#4% {\defineXMLmethod\dododefineXMLnestedargument{#1}{#2}{#3}{#4}{}} \long\def\dodefineXMLnestedsave[#1][#2][#3]% {\defineXMLmethod\dododefineXMLnestedsave{#1}{#2}{#3}{}{}} \long\def\dodefineXMLnestedenvironmentsave[#1][#2][#3]#4#5% {\defineXMLmethod\dododefineXMLnestedenvironmentsave{#1}{#2}{#3}{#4}{#5}} % [key=val] => \presetXMLarguments{element} => default key/vals % [blabla] => \theXMLarguments{blabla} => user key/vals % [blabla] [key=val] => \presetXMLarguments{element} => default key/vals % \theXMLarguments{blabla} => user key/vals % command element [map] [parlst] begin end \long\def\defineXMLmethod#1#2#3#4#5#6% {\ifsecondargument \setXMLarguments{#2}{#3}{#4}% \else \resetXMLarguments{#2}% new \fi #1{#2}{#5}{#6}} %D Arguments (attributes) \unknown % \long\def\setXMLarguments#1#2#3% element [tag] settings % {\doifassignmentelse{#2} % {\long\setvalue{\@@XMLpars:#1}{\getrawparameters[\@@XMLvariable:#1:][#2]}} % {\long\setvalue{\@@XMLmap :#1}{#2}% later we can init vars by this name % \doifsomething{#3}{\long\setvalue{\@@XMLpars:#1}{\getrawparameters[#2][#3]}}}} \long\def\setXMLarguments#1#2#3% element [tag] settings {\doifassignmentelse{#2} % ROOM FOR OPTIMIZATION {\letbeundefined{\@@XMLmap:#1}% \long\setvalue{\@@XMLpars:#1}{\getrawparameters[\@@XMLvariable:#1:][#2]}} {\long\setvalue{\@@XMLmap:#1}{#2}% later we can init vars by this name \doifsomething{#3}{\long\setvalue{\@@XMLpars:#1}{\getrawparameters[#2][#3]}}}} \def\presetXMLarguments#1% {\csname\@@XMLpars:\rawXMLnamespace#1\endcsname} % == \getvalue{} \prependtoks \presetXMLarguments\rawXMLidentifier \to \everyXMLelement %D We now overload the previously defined argument setter by one %D that is faster when definitions are surrounded by %D %D \starttyping %D \startXMLcompiling ... \stopXMLcompiling %D \stoptyping %D %D This method is twice as fast on (for instance) 100K calls to %D an empty element with 10 arguments. % \long\def\prepareXMLargument#1#2#3% % {\scratchtoks\expandafter{\the\scratchtoks\@EA\def\csname#1#2\endcsname{#3}}} % \long\def\prepareXMLargument#1#2#3% % {\scratchtoks\@EA\@EA\@EA{\@EA\the\@EA\scratchtoks\@EA\def\csname\@@XMLvariable:#1:#2\endcsname{#3}}} % \let\@@globalprefix\empty % \long\def\prepareXMLargument#1#2#3% % {\expanded{\scratchtoks % {\the\scratchtoks % \def\@EA\noexpand\csname\@@XMLvariable:#1:#2\endcsname{#3}% % \noexpand\@EA\let\noexpand\csname\@@XMLvariable:\noexpand\the\numexpr(\XMLdepth+1):#2\endcsname % \@EA\noexpand\csname\@@XMLvariable:#1:#2\endcsname}}} \long\def\prepareXMLargument#1#2#3% {\expanded{\scratchtoks {\the\scratchtoks \def\@EA\noexpand\csname\@@XMLvariable:#1:#2\endcsname{#3}% \noexpand\@EA\let\noexpand\csname\@@XMLvariable:\noexpand\the\numexpr\XMLdepth+\plusone\relax:#2\endcsname \@EA\noexpand\csname\@@XMLvariable:#1:#2\endcsname}}} \long\def\setXMLargumentsN#1#2#3% element [tag] settings {\doifassignmentelse{#2} {\letbeundefined{\@@XMLmap:#1}% \long\setvalue{\@@XMLpars:#1}{\getrawparameters[\@@XMLvariable:#1:][#2]}} {\long\setvalue{\@@XMLmap:#1}{#2}% later we can init vars by this name \doifsomething{#3}{\long\setvalue{\@@XMLpars:#1}{\getrawparameters[#2][#3]}}}} \long\def\setXMLargumentsP#1#2#3% element settings empty (we cannot test for assignment) {\letbeundefined{\@@XMLmap:#1}% \bgroup %def\XMLinheritance{\noexpand\XMLinheritance} \def\XMLop##1{\noexpand\XMLpar{#1}{##1}{}}% \def\XMLpar{\noexpand\XMLpar}% \def\XMLanc{\noexpand\XMLanc}% \def\XMLinh{\noexpand\XMLinh}% \xdef\!!XMLattr{[#1][#2]}% \scratchtoks\emptytoks \@EA\dogetparameters\@EA\prepareXMLargument\!!XMLattr \xdef\globalnext{\the\scratchtoks}% \egroup \letvalue{\@@XMLpars:#1}\globalnext \globallet\globalnext\relax} \def\defineXMLattributeset{\dodoubleargument\dodefineXMLattributeset} \def\extendXMLattributeset{\dodoubleargument\doextendXMLattributeset} \def\dodefineXMLattributeset[#1][#2]{\setvalue {\@@XMLpars::#1}{#2}} \def\doextendXMLattributeset[#1][#2]{\appendvalue{\@@XMLpars::#1}{,#2}} \def\XMLattributeset #1{\executeifdefined{\@@XMLpars::#1}\empty} %def\XMLinheritance #1{\executeifdefined{\@@XMLpars:#1}\empty} \def\showXMLattributes#1{\showvalue{\@@XMLpars:#1}} \chardef\@@precompile\zerocount \def\setXMLarguments {\ifcase\@@precompile \expandafter\setXMLargumentsN \else \expandafter\setXMLargumentsP \fi} \def\startXMLcompiling {\dosingleargument\dostartXMLcompiling} % \def\dostartXMLcompiling[#1]% % {\iffirstargument % \copyXMLargumentindeed % when needed, from now on -) % \def\@@globalprefix{#1}% % \fi % \chardef\@@precompile\plusone} \def\dostartXMLcompiling[#1]% {\doif{#1}\v!inherit \copyXMLargumentindeed \chardef\@@precompile\plusone} \def\stopXMLcompiling {\chardef\@@precompile\zerocount} % no \let\@@globalprefix\empty %D Interesting what kind of things are needed \unknown \appendtoks \ifdefined\disablelanguagespecifics\disablelanguagespecifics\fi \to \everyenableXML \long\def\longempty{} \long\def\longspace{ } % \def\doifelseXMLdata#1% always empty at start [gets a long assignment] % {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty % \expandafter\secondoftwoarguments % \else % \expandafter\firstoftwoarguments % \fi} % % \def\doifXMLdata#1% always empty at start [gets a long assignment] % {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty % \expandafter\gobbleoneargument % \else % \expandafter\firstofoneargument % \fi} % % \let\doifXMLdataelse\doifelseXMLdata \def\doifelseXMLdata#1% always empty at start [gets a long assignment] {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\doifXMLdata#1% always empty at start [gets a long assignment] {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \let\doifXMLdataelse\doifelseXMLdata \def\doifelseXMLempty#1% {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty \expandafter\firstoftwoarguments \else\@EA\ifx\csname\@@XMLdata:#1\endcsname\longspace \expandthree\firstoftwoarguments \else \expandthree\secondoftwoarguments \fi\fi} % test case: % % \defineXMLenvironmentsave[test] % {} % {\message{[\XMLflush{test}]} % \message{\doifelseXMLdata {test}{}{no }data} % \message{/} % \message{\doifelseXMLempty{test}{}{not }empty} % \wait} % % \startXMLdata % <test>xxx</test> % <test></test> % <test> </test> % <test> </test> % <test> </test> % <test> x </test> % \stopXMLdata % \def\XMLflush#1% one level % {\csname\@@XMLdata:#1\endcsname} % evt meer van dit gedoe en alle \longempty's vervangen \def\XMLflush#1% one level {\csname\ifcsname\@@XMLdata:#1\endcsname\@@XMLdata:#1\else\s!empty\fi\endcsname} %D \starttyping %D \defineXMLenvironmentsave[formula]{}{$\XMLtexdata{formula}$} %D %D \startXMLdata %D <formula>t+3+x+t\neq m\alpha\frac\theta\hbar</formula> %D \stopXMLdata %D \stoptyping \def\XMLtexdata#1% {\begingroup \disableXML \scantokens\@EA\@EA\@EA{\csname\@@XMLdata:#1\endcsname}% \endgroup} \def\XMLflushdata#1% see m-steps for usage {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty\else %\@EAEAEA\XMLdata\@EA\@EA\@EA{\csname\@@XMLdata:#1\endcsname}% \@EA\XMLdata\csname\@@XMLdata:#1\endcsname \fi} \def\XMLflushasis#1% {\detokenize\@EAEAEA{\csname\@@XMLdata:#1\endcsname}} \let\XMLpop \XMLflush \let\XMLpopdata\XMLflushdata \def\XMLappend#1#2% let to empty expands to nothing -) {\long\@EA\edef\csname\@@XMLdata:#1\endcsname{\csname\@@XMLdata:#1\endcsname#2}} \def\XMLprepend#1#2% let to empty expands to nothing -) {\long\@EA\edef\csname\@@XMLdata:#1\endcsname{#2\csname\@@XMLdata:#1\endcsname}} \def\XMLerase#1% {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty} \def\XMLassign#1% {\long\@EA\def\csname\@@XMLdata:#1\endcsname} \def\dontparseXMLelement#1>{} \def\simplifyXMLelements{\let\parseXMLelement\dontparseXMLelement} \def\defXMLstring#1#2% {\bgroup \enableXMLexpansion \simplifyXMLelements \let\getXMLentity\firstofoneargument \XMLrawentitiestrue \utfunicodetracer\plusseven % new \xdef\@@XML@@string{\csname\@@XMLdata:#2\endcsname}% \egroup \defconvertedcommand#1\@@XML@@string} % this has to expand nicely: % % <!DOCTYPE XXX SYSTEM "xxx" [ <!ENTITY aaa "../www/"> <!ENTITY bbb SYSTEM "&aaa;mmm.eps"> ]> % % so keep the following as is! \def\defXMLclean#1#2% {\bgroup \enableXMLexpansion \simplifyXMLelements \simplifyXMLentities \utfunicodetracer\plusseven % new \let\getXMLentity\expandedXMLentity % should this go in \simplify ? \xdef\@@XML@@string{\csname\@@XMLdata:#2\endcsname}% \egroup \defconvertedcommand#1\@@XML@@string} \def\defXMLpar#1#2#3% to be documented {\@EA\def\@EA#1\csname\ifcsname\@@XMLvariable:#2:#3\endcsname\@@XMLvariable:#2:#3\else\s!empty\fi\endcsname} \def\setvalueXMLpar#1#2#3% to be documented {\@EA\let\csname#1\@EA\endcsname\csname\ifcsname\@@XMLvariable:#2:#3\endcsname\@@XMLvariable:#2:#3\else\s!empty\fi\endcsname} \def\XMLshow#1% {\showvalue{\@@XMLdata:#1}} \def\XMLunspace#1% kan sneller {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty\else \long\@EA\edef\csname\@@XMLdata:#1\endcsname {\@EAEAEA\dounspaced\csname\@@XMLdata:#1\endcsname\end}% \fi} \chardef\asciispacecode=32 \def\defXMLlowerclean#1% lowercase ! evt tzt upper too {\bgroup \lccode`\#\asciispacecode \lccode`\$\asciispacecode \lccode`\%\asciispacecode \lccode`\\\asciispacecode \lccode`\^\asciispacecode \lccode`\_\asciispacecode \lccode`\{\asciispacecode \lccode`\}\asciispacecode \lccode`\|\asciispacecode \lccode`\~\asciispacecode \@EA\lowercase\@EA{\@EA\xdef\@EA#1\@EA{#1}}% \egroup} \def\processXMLparelse#1#2#3#4% {\processaction [\XMLpar{#1}{#2}{}] [#3,\s!unknown=>{#4},\s!default={#4}]} %D We can pick up key|/|value pairs, but we still need a way %D to process these. % bugged % % \def\mapXMLvalue#1#2#3% td align center -> middle % {\setvalue{\@@XMLvalue:#1:#2:#3}} \def\mapXMLvalue#1#2#3% td:align center -> middle {\setvalue{\@@XMLvalue:#1:#2}{#3}} % keep #3 to grab spaces \def\XMLvar#1#2#3% td align center {\ifcsname\@@XMLvariable:#1:#2\endcsname \XMLval{#1}{#2}{\csname\@@XMLvariable:#1:#2\endcsname}% \else \XMLval{#1}{#2}{#3}% evt inline code \fi} % \def\XMLvar#1#2#3% td align center % {\XMLval{#1}{#2}{\ifcsname\@@XMLvariable:#1:#2\endcsname % \csname\@@XMLvariable:#1:#2\endcsname\else#3\fi}} % \def\XMLval#1#2#3% td:align value default % {\ifcsname\@@XMLvalue:#1:#2\endcsname % \csname\@@XMLvalue:#1:#2\endcsname % \else % #3% % \fi} % % The next one permits commands instead of strings in #3 \def\XMLval#1#2% #1=td:align #2=value #3=default {\ifcsname\@@XMLvalue:#1:#2\endcsname \@EA\firstoftwoarguments \else \@EA\secondoftwoarguments \fi {\csname\@@XMLvalue:#1:#2\endcsname}} \def\XMLpar#1#2#3% {\ifcsname\@@XMLvariable:#1:#2\endcsname \csname\@@XMLvariable:#1:#2\endcsname \else #3% \fi} \def\XMLNSpar#1#2#3#4% element namespace name default {\ifcsname\@@XMLvariable:#1:#2:#3\endcsname \csname\@@XMLvariable:#1:#2:#3\endcsname \else #4% \fi} % \def\setXMLpar#1#2% % {\@EA\def\csname\@@XMLvariable:#1:#2\endcsname} \def\letXMLpar #1#2{\@EA \let\csname\@@XMLvariable:#1:#2\endcsname} \def\setXMLpar #1#2{\@EA \def\csname\@@XMLvariable:#1:#2\endcsname} \def\setXMLepar#1#2{\@EA\edef\csname\@@XMLvariable:#1:#2\endcsname} % ancestor arguments: % % \defineXMLenvironment % [fo:root] % [test=unset] % {\beginXMLelement} % {\endXMLelement} % % \defineXMLenvironment % [fo:block-container] % [test=oeps] % {\beginXMLelement} % {\endXMLelement} % % \defineXMLenvironment % [fo:block] % {\beginXMLelement % \begingroup} % {\endgroup % \XMLanc{test}{} % \endXMLelement} % % \startXMLdata % <fo:root> % <fo:block-container test='first'><fo:block test='second'>second:</fo:block></fo:block-container> % <fo:block>unset:</fo:block> % <fo:block test='outer'><fo:block test='nested'><fo:block>deep:</fo:block>nested:</fo:block>outer:</fo:block> % <fo:block test='last'>last:</fo:block> % </fo:root> % \stopXMLdata % % \startXMLdata % <fo:root> % <fo:block-container test='first'><fo:block>second:</fo:block></fo:block-container> % <fo:block>unset:</fo:block> % <fo:block test='second'><fo:block><fo:block>deep:</fo:block>nested:</fo:block>outer:</fo:block> % <fo:block>last:</fo:block> % </fo:root> % \stopXMLdata % % \startXMLdata % <fo:root> % <fo:block-container test='first'><fo:block>second:</fo:block></fo:block-container> % <fo:block>unset:</fo:block> % <fo:block><fo:block><fo:block>deep:</fo:block>nested:</fo:block>outer:</fo:block> % <fo:block>last:</fo:block> % </fo:root> % \stopXMLdata % dit werkt alleen ok in niet <a> <b> <b> ... situaties omdat anders % de laatste b de attributen van de vorige heeft: \def\XMLanc#1% {\ifcsname\@@XMLvariable:\currentXMLelement:#1\endcsname % \ownXMLelement \csname\@@XMLvariable:\currentXMLelement:#1\endcsname % \ownXMLelement \@EA\gobblethreearguments \else \@EA\pXMLanc \fi\XMLdepth{#1}} % \def\pXMLanc#1% % {\@EA\ppXMLanc\@EA{\the\numexpr(#1-\plusone)}} \def\pXMLanc#1% {\@EA\ppXMLanc\@EA{\the\numexpr#1-\plusone\relax}} \def\ppXMLanc#1#2#3% {\ifcsname\@@XMLdepth:#1\endcsname % is er altijd dus redundant \ifcsname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname \csname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname \@EAEAEA\gobblethreearguments \else \@EAEAEA\pppXMLanc \fi \else \@EA\pppXMLanc \fi{#1}{#2}{#3}} \def\pppXMLanc#1% {\ifnum#1>\zerocount \@EA\pXMLanc \else \@EA\thirdofthreearguments \fi{#1}} %D Experimental (not sure if this will stay): %D %D \starttyping %D \startdefineXMLhandlers[one,two] %D %D \defineXMLenvironment[a=b,c=\XMLop{a}] %D {}{} %D %D \stopdefineXMLhandlers %D \stoptyping \long\def\startdefineXMLhandlers {\bgroup\catcode\endoflineasciicode\spacecatcode \dodoubleempty\dostartdefineXMLhandlers} \long\def\dostartdefineXMLhandlers[#1][#2]#3#4\stopdefineXMLhandlers % #2 is dummy {\egroup \long\def\dodefineXMLhandlers##1{#3[##1]#4}% \processcommalist[#1]\dodefineXMLhandlers} \let\currentXMLhandler\s!unknown % \long\def\dostartdefineXMLhandlers[#1][#2]#3#4[#5]#6\stopdefineXMLhandlers % #2 is dummy % {\egroup % \pushmacro\XMLop % \pushmacro\XMLpar % \pushmacro\currentXMLhandler % \long\def\dodefineXMLhandlers##1% % {\edef\currentXMLhandler{##1}% % \def\XMLop####1{\noexpand\XMLpar{##1}{####1}{}}% % \def\XMLpar{\noexpand\XMLpar}% % \def\XMLanc{\noexpand\XMLanc}% % \edef\!!stringa{[##1][#5]}% % \expandafter#3\!!stringa#6}% % \processcommalist[#1]\dodefineXMLhandlers % \popmacro\currentXMLhandler % \popmacro\XMLpar % \popmacro\XMLop} \long\def\dostartdefineXMLhandlers[#1][#2]#3#4[#5]#6\stopdefineXMLhandlers % #2 is dummy {\egroup \long\def\dodefineXMLhandlers##1% {\bgroup \edef\currentXMLhandler{##1}% \def\XMLop####1{\noexpand\XMLpar{##1}{####1}{}}% \def\XMLpar{\noexpand\XMLpar}% \def\XMLanc{\noexpand\XMLanc}% \def\XMLinh{\noexpand\XMLinh}% \xdef\!!XMLattr{[##1][#5]}% \egroup \expandafter#3\!!XMLattr#6}% \processcommalist[#1]\dodefineXMLhandlers} \def\XMLpav#1#2#3#4% {\XMLval{#1}{\XMLpar{#2}{#3}{}}{#4}} %D A few weird ones: \def\TEXpar#1#2% {\csname#1\interfaced{#2}\endcsname} \let\texXMLpar\TEXpar % soon obsolete \let\XMLtex\TEXpar % handy one \def\XMLtyp#1#2#3% {\ifcsname\@@XMLvariable:#1:#2\endcsname \@EA\defconvertedcommand\@EA\ascii\csname\@@XMLvariable:#1:#2\endcsname \else \defconvertedargument\ascii{#3}% \fi \ascii} \defineXMLsingular [begingroup] {\begingroup} \defineXMLsingular [endgroup] {\endgroup} \defineXMLsingular [gobblespacetokens] {\gobblespacetokens} \defineXMLsingular [disableXML] {\disableXML} \long\def\XMLstr#1% {{\enableXML\scantokens{#1}\unskip}} \long\def\XMLstr#1% test, does not work {\ifprocessingXML % \begingroup\enableXML\scantokens{#1<endgroup/><gobblespacetokens/>}% \scantokens{#1<gobblespacetokens/>}% \else \begingroup\enableXML\scantokens{#1<endgroup/>\ignorespaces}% \fi} \def\XMLgetvariable#1#2% hooks into generic \getvariable and setvariables {\expanded{\XMLstr{\getvariable{#1}{#2}}}} \long\def\XMLstrpar#1#2#3% test {\ifcsname\@@XMLvariable:#1:#2\endcsname \scantokens\@EAEAEA{\@EA\begingroup\@EA\enableXML \csname\@@XMLvariable:#1:#2\endcsname<endgroup/>}% \else \scantokens{\begingroup\enableXML#3<endgroup/>}% \fi} \def\doifXMLvarelse#1#2% geen etex, \relax too {\ifcsname\@@XMLvariable:#1:#2\endcsname \expandafter\ifx\csname\@@XMLvariable:#1:#2\endcsname\empty \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi \else \@EA\secondoftwoarguments \fi} \def\doifXMLvar#1#2% geen etex, \relax too {\ifcsname\@@XMLvariable:#1:#2\endcsname \expandafter\ifx\csname\@@XMLvariable:#1:#2\endcsname\empty \@EAEAEA\gobbleoneargument \else \@EAEAEA\firstofoneargument \fi \else \@EA\gobbleoneargument \fi} \def\doifXMLvalelse#1#2% geen etex, \relax too {\ifcsname\@@XMLvalue:#1:#2\endcsname \expandafter\ifx\csname\@@XMLvalue:#1:#2\endcsname\empty \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi \else \@EA\secondoftwoarguments \fi} \let\doifXMLparelse\doifXMLvarelse \let\doifXMLpar \doifXMLvar %D Used in x-fo: I really need to document this! \bgroup \catcode`\<=\activecatcode % usage: \expanded{\rescanXMLatttributes{fo:table-cell}} \gdef\rescanXMLattributes #1{\noexpand\dogetXMLarguments{#1}\currentXMLarguments>} \gdef\parseXMLattributes #1#2{\dogetXMLarguments{#1}#2>} \egroup \def\defXMLattributestring#1#2#3#4% {\ifcsname\@@XMLvariable:#2:#3\endcsname \@EA\defconvertedcommand\@EA#1\csname\@@XMLvariable:#2:#3\endcsname \else \defconvertedargument#1{#4}% \fi} \def\XMLprocess#1% {\begingroup\enableXML\XMLflush{#1}\endgroup} \bgroup \catcode`<=\activecatcode \long\gdef\ignoreuntilXMLelement#1<{<} \long\gdef\grabuntilXMLelement #1<\to#2{\def#2{#1}<} \egroup %D Saves tokens and typing. \def\XMLownvar {\XMLvar {\rawXMLnamespace\rawXMLidentifier}} \def\XMLownval {\XMLval {\rawXMLnamespace\rawXMLidentifier}} \def\XMLownpar {\XMLpar {\rawXMLnamespace\rawXMLidentifier}} \def\XMLownstrpar {\XMLstrpar {\rawXMLnamespace\rawXMLidentifier}} \def\doifXMLownvarelse{\doifXMLvarelse{\rawXMLnamespace\rawXMLidentifier}} \def\doifXMLownvalelse{\doifXMLvalelse{\rawXMLnamespace\rawXMLidentifier}} \def\doifXMLownparelse{\doifXMLparelse{\rawXMLnamespace\rawXMLidentifier}} \def\letXMLpar #1#2{\@EA \let\csname\@@XMLvariable:#1:#2\endcsname} \def\setXMLpar #1#2{\@EA \def\csname\@@XMLvariable:#1:#2\endcsname} \def\setXMLepar#1#2{\@EA\edef\csname\@@XMLvariable:#1:#2\endcsname} \def\ownXMLelement{\rawXMLnamespace\rawXMLidentifier} \def\XMLop#1% ownpar {\csname\ifcsname\@@XMLvariable:\ownXMLelement:#1\endcsname \@@XMLvariable:\ownXMLelement:#1\else\s!empty \fi\endcsname} \def\XMLtp#1% texpar {\csname\ifcsname\@@XMLmapmap\interfaced{#1}\endcsname \@@XMLmapmap\interfaced{#1}\else\s!empty \fi\endcsname} \def\doifelseXMLop#1{\doifelse{\XMLop{#1}}} \def\doifXMLop #1{\doif {\XMLop{#1}}} \def\doifnotXMLop #1{\doifnot {\XMLop{#1}}} \def\doifelsenothingXMLop#1{\doifelsenothing{\XMLop{#1}}} \def\doifsomethingXMLop #1{\doifsomething {\XMLop{#1}}} \def\doifnothingXMLop #1{\doifnothing {\XMLop{#1}}} \def\doifelseXMLtp#1{\doifelse{\XMLtp{#1}}} \def\doifXMLtp #1{\doif {\XMLtp{#1}}} \def\doifnotXMLtp #1{\doifnot {\XMLtp{#1}}} \def\doifelsenothingXMLtp#1{\doifelsenothing{\XMLtp{#1}}} \def\doifsomethingXMLtp #1{\doifsomething {\XMLtp{#1}}} \def\doifnothingXMLtp #1{\doifnothing {\XMLtp{#1}}} \def\XMLflushself{\csname\@@XMLdata:\ownXMLelement\endcsname} \def\showXMLdata#1{\showvalue{\@@XMLdata:#1}} \def\XMLta {\theXMLarguments\@@XMLmapmap} \def\getXMLta {\expanded{\getparameters[\@@XMLmapmap][\XMLta]}} \def\expandXMLta{\expandXMLarguments\@@XMLmapmap} \def\expandXMLtp{\expandTEXpar\@@XMLmapmap} % #1 \def\getXMLparameters[#1]% faster than \rawgetparameters[#1][\theXMLar..] {\ifcsname\@@XMLmap:#1\endcsname \expanded{\rawgetparameters[#1][\csname\@@XMLmap:#1\endcsname]}% \fi} \def\defXMLop#1#2{\@EA\let\@EA#1\csname\@@XMLvariable:\ownXMLelement:#2\endcsname} \def\defXMLtp#1#2{\@EA\let\@EA#1\csname\@@XMLmapmap\interfaced{#2}\endcsname} %D ... \def\protectXMLdata {\catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode\spacecatcode \catcode\formfeedasciicode \spacecatcode \catcode\endoffileasciicode\spacecatcode \catcode`\#\othercatcode} \long\def\startXMLcode {\begingroup \protectXMLdata \dostartXMLcode} \long\def\dostartXMLcode[#1] #2 \stopXMLcode {\@EA\gdef\csname\@@XMLcode:#1\endcsname{\startXMLdata#2\stopXMLdata}% \endgroup} \def\getXMLcode[#1]% \expandXMLcode {\csname\@@XMLcode:#1\endcsname} % \long\def\startXMLdata#1\stopXMLdata% % {\begingroup\enableXML\scantokens{#1}\endgroup} % % \defineXMLentity[tex-backslash] {\catchXMLpar} % % \def\catchXMLpar#1#2#3 % {\if#1p\if#2a\if#3r\ifmmode\else\endgraf\fi % \else\texescape\fi\else\texescape\fi\else\texescape\fi} \long\def\startXMLdata {\begingroup \protectXMLdata \dostartXMLdata} \long\def\dostartXMLdata#1\stopXMLdata % evt \everyeof{} {\enableXML\scantokens{#1<gobblespacetokens/>}% \endgroup \ifhmode\unskip\unskip\fi} % suboptimal: % % \unexpanded\def\XMLdata#1% % \unexpanded added 22/5/2001 % {\begingroup % \enableXML\scantokens{#1}\ifhmode\unskip\unskip\fi % \endgroup} % % better but does not work in tables: % % \unexpanded\def\XMLdata#1% % grouping changed 20/5/2001 % {\scantokens{\begingroup\enableXML#1<endgroup/>\gobblespacetokens}} % % currently: \unexpanded\def\XMLdata % # safe {\begingroup \protectXMLdata \doXMLdata} \def\doXMLdata#1% {\enableXML \scantokens{#1<gobblespacetokens/>}% \endgroup} %D \def\bXMLs{\ifignoreXMLspaces\ignorespaces\fi} \def\eXMLs{\ifignoreXMLspaces\ifhmode\unskip\fi\fi} \protect % \defineXMLcommand{placeindex/} % {\placeindex[criterium=all]} % % \defineXMLargument{index} % {\index[\XMLvar{index}{key}{}]} %D Here we implement the handling of preformatted code. \unprotect \def\startXMLpreformatted#1% {\startpacked #1% \fixedXMLfonttrue \obeylines \obeyspaces \setbox\scratchbox=\hbox{x}% \edef\obeyedspace{\noindent\noexpand\kern\the\wd\scratchbox}} \def\stopXMLpreformatted#1% {\stoppacked} %D \def\XMLinput{\enableXML\input} \global\let\inputXML\XMLinput % options \def\processXMLfile #1{\enableXML\processfile{#1}} \def\processXMLfilegrouped#1{{\enableXML\processfile{#1}\relax\ifmmode\else\par\fi}} %D \type %D {processXMLbuffer} %D %D For illustrative purposes, we need to be able to reuse %D definitions, which is why we implement a buffer processor %D here. The macro \type {\processXMLbuffer} behaves like %D any buffer processor. \def\processXMLbuffer {\dosingleempty\doprocessXMLbuffer} \def\doprocessXMLbuffer[#1]% {\doifelsenothing{#1} {\doprocessXMLbuffer[\jobname]} {\begingroup \enableXML \def\dodoprocessXMLbuffer##1{\getbuffer[##1]}% \processcommalist[#1]\dodoprocessXMLbuffer \endgroup}} %D Loading specific modules takes place with \type %D {\useXMLfilters}. % todo: flag \def\useXMLfilter[#1]% {\processcommalist[#1]\douseXMLfilter} \def\douseXMLfilter#1% {\doifundefined{\c!file\f!xtagprefix#1} {\letvalue{\c!file\f!xtagprefix#1}\empty \startreadingfile % \truefilename removed \readsysfile{\f!xtagprefix#1.mkii} {\writestatus{xml}{loading module #1.mkii}} {\readsysfile{\f!xtagprefix#1.tex} {\writestatus{xml}{loading module #1.tex}} \donothing}% \stopreadingfile}} %D Temporarily here. \newtoks\groupedtoks \newif\ifcollectXMLgrouped \bgroup \catcode`\<=\activecatcode \newtoks\XMLgtoks \long\unexpanded\gdef\getXMLgroupedenvironment#1#2#3% {\collectXMLgroupedtrue \XMLgtoks{#2}% \long\def\dodogetgrouped{\@EA\the\@EA\XMLgtoks\the\groupedtoks#3}% \getXMLgrouped{#1}} \long\unexpanded\gdef\getXMLgroupedargument#1#2% {\collectXMLgroupedtrue \XMLgtoks{#2}% \long\def\dodogetgrouped{\@EA\the\@EA\XMLgtoks\@EA{\the\groupedtoks}}% \getXMLgrouped{#1}} \long\unexpanded\gdef\getXMLgroupedignore#1% {\collectXMLgroupedfalse \let\dodogetgrouped\relax \getXMLgrouped{#1}} \long\gdef\docountXMLgrouped#1\end#2\end % 1 relax is enough since it's {\long\def\dosplitXMLstring##1#1##2\relax\relax##3\end % another regime {\def\ascii{##2}% \ifx\ascii\empty \else \advance\scratchcounter \plusone \dosplitXMLstring##2\relax\relax#1\relax\relax\end \fi}% \dosplitXMLstring#2\relax\relax#1\relax\relax\end} \long\unexpanded\gdef\getXMLgrouped#1% #1 kan weg % klopt dit nu? {\groupedtoks\emptytoks \scratchcounter\zerocount \edef\theXMLnamespace {\ifx\originalXMLnamespace\empty\else\originalXMLnamespace:\fi \currentXMLidentifier}% \expanded{\long\noexpand\def\noexpand\dogetgrouped####1\noexpand</\currentXMLelement>}% {\ifcollectXMLgrouped\appendtoks##1\to\groupedtoks\fi \@EA\docountXMLgrouped\@EA<\theXMLnamespace>\end##1\end \@EAEAEA\docountXMLgrouped\@EA\@EA\@EA<\@EA\theXMLnamespace\space \end##1\end \ifcase\scratchcounter \let\dogetgrouped\dodogetgrouped \else \advance\scratchcounter \minusone \ifcollectXMLgrouped\@EA\appendtoks\@EA<\@EA/\currentXMLelement>\to\groupedtoks\fi \fi \dogetgrouped}% \dogetgrouped} \egroup % interesting and fully expandable \def\XMLownifequalelse#1#2% {\@EAEAEA\@@ifequal\csname\@@XMLvariable:\ownXMLelement:#1\endcsname\relax\@@and#2\relax\@@then} % \def\XMLifequalelse#1#2#3% % {\@EAEAEA\@@ifequal\csname\@@XMLvariable:#1:#2\endcsname\relax\@@and#3\relax\@@then} \def\XMLifequalelse#1#2% {\ifcsname\@@XMLvariable:#1:#2\endcsname % \@EAEAEA\doXMLifequalelse\@EA\@EA\csname\@@XMLvariable:#1:#2\endcsname \@EA\doXMLifequalelse\csname\@@XMLvariable:#1:#2\@EA\endcsname \else \@EA\secondoftwoarguments \fi} \def\doXMLifequalelse#1#2% {\@EA\@@ifequal#1\relax\@@and#2\relax\@@then} %D \starttyping %D \defineXMLenvironment[test][a=1] %D {\XMLownifequalelse{a}{2}{YES}{NO}} %D {} %D %D \defineXMLenvironment[test][a=1] %D {\XMLifequalelse{test}{a}{1}{YES}{NO}} %D {} %D %D \startXMLdata %D <test a="1">test</test> %D \stopXMLdata %D \stoptyping \def\XMLyes#1{\XMLownifequalelse{#1}{yes}{#1}{}} %D The next macro will set the variable \type {\flattenedXMLcontent} %D to the content with elements removed and entity names. \bgroup \catcode`\<\activecatcode \catcode`\&\activecatcode \gdef\flattenXMLcontent#1% we need taco's 'over one group' {\begingroup \keeputfcharacters \def<##1>{}% \def&##1;{##1}% \edef\flattenedXMLcontent{#1}% \edef\flattenedXMLcontent{\expandafter\dounspaced\flattenedXMLcontent\end}% \@EA\endgroup \@EA\def\@EA\flattenedXMLcontent\@EA{\flattenedXMLcontent}} \egroup \def\defXMLexpanded#1#2% {\begingroup \let\getXMLentity\expandedXMLentity \expanded{\endgroup\edef\noexpand#1{#2}}} \def\gdefXMLexpanded#1#2% {\begingroup \let\getXMLentity\expandedXMLentity \expanded{\endgroup\xdef\noexpand#1{#2}}} \protect \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-22.tex��������������������������������0000644�0001750�0001750�00000022502�11754241457�023675� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-pre-22, %D version=2000.08.07, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 22, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 style was made on behalf of the \PDFTEX\ presentation %D at \TUG\ 2000. It cycled a summary of each talk, with name %D and title. When documenting this style, I changed %D reprocessing into pushing on layers. %D %D A \quote {problem} like this can be solved in several ways: %D %D \startitemize %D \item writing a lot of semi||complex \TEX\ code as shown %D \item keeping track of positions and draw everything on the %D page layer %D \item defining an overlay for each summary and changing the %D order when flushing %D \item maintaining a so called field stack %D \stopitemize %D %D We go for the first method. We assume that summaries are %D simple text snippets. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] %D We use the whole page area. \setuppapersize [S6][S6] \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] %D We define a couple of matching colors and gray scales. %D Watch out, some are really meant to look dim. \setupcolors [state=start] \definecolor[PageColor] [s=.50] \definecolor[TextColor] [s=.80] \definecolor[DoneColor] [s=.65] \definecolor[TopColor] [r=.5,g=.6,b=.7] \definecolor[BotColor] [r=.6,g=.7,b=.5] \definecolor[DotColor] [r=.7,g=.5,b=.6] %D We will use foreground colors. Because these can interfere %D with the colors they overload, we can bets make sure that %D we don't have local colors. \setupinteraction [state=start, color=, contrastcolor=] %D The presentation is supposed to cycle automatically. \setupinteractionscreen [option=max, delay=5] \setuppagetransitions %D We will use random positioning of objects. \setupsystem [random=medium] %D We have two kind of graphics: the page background and %D the shape around the textual elements. \defineoverlay [shape] [\uniqueMPgraphic{shape}] \defineoverlay [page] [\reuseMPgraphic{page}] \startreusableMPgraphic{page} StartPage ; filldraw Page withcolor \MPcolor{PageColor} ; pickup pencircle scaled .375cm ; for i=1 upto 200 : drawdot center Page randomized (PaperWidth,PaperHeight) withcolor \MPcolor {DotColor} ; endfor ; StopPage ; \stopreusableMPgraphic \startuniqueMPgraphic{shape} path p ; p := unitsquare xyscaled(OverlayWidth,OverlayHeight) superellipsed .90 ; draw p withpen pencircle scaled .50cm withcolor \MPcolor{PageColor} ; fill p withcolor OverlayColor ; draw p withpen pencircle scaled .25cm withcolor OverlayLineColor ; currentpicture := currentpicture xysized(OverlayWidth,OverlayHeight) ; \stopuniqueMPgraphic %D The resizing at the end is needed to get a nice inverted %D hyperlink when we click on it in a browser. %D Behind the page we put a forward button: \defineoverlay [forward] [\overlaybutton{forward}] %D The content will be managed by means of two layers. \definelayer [main] \defineoverlay [main] [\composedlayer{main}] \definelayer [temp] \defineoverlay [temp] [\composedlayer{temp}] %D The first layer will hold everything to be shown, while %D the second one gets the data we currently focus on. %D Therefore the first layer will not be flushed each page. \setuplayer [main] [state=repeat] %D All the overlays go onto the page area. \setupbackgrounds [page] [background={page,forward,main,temp}] %D We have to collect all data before we typeset it. Each %D element will be typeset dim and bright. The dim %D alternatives will be collected on the main layer, but each %D bring one goes onto a box stack. \initializeboxstack{Summary} \initializeboxstack{Subtext} %D The macros that take care of all this manipulations look %D more complicated than they actually are. We use a %D scratchbox to collect and inspect data. Also, because we %D typeset each element twice, we need to make sure that we use %D the same random seed for both. \doglobal\newcounter\CurrentSummary \def\StartSummary% bottom bot-title top-title {\dodoublegroupempty\doStartSummary} \def\doStartSummary#1#2% {\doglobal\increment\CurrentSummary \setbox\scratchbox=\hbox{\strut#1} \getrandomseed\RandomSeed \setlayer[main] {\RandomSubtextBox{DoneColor}{BotColor}{BotColor}} \setrandomseed\RandomSeed \savebox{Subtext}{\CurrentSummary} {\RandomSubtextBox{TextColor}{BotColor}{black}} \setbox\scratchbox=\hbox \bgroup \setbox\scratchbox=\hbox{\bfb\setstrut\strut\quad#2\quad}% \SetAcceptableWidth \framed [offset=0pt,width=fit,frame=off,align=middle,strut=no] \bgroup \setupwhitespace[big] \doifsomething{#2}{\noindent\box\scratchbox\blank}} \def\StopSummary {\egroup \egroup \getrandomseed\RandomSeed \setlayer[main] {\RandomSummaryBox{DoneColor}{TopColor}{TopColor}} \setrandomseed\RandomSeed \savebox{Summary}{\CurrentSummary} {\RandomSummaryBox{TextColor}{TopColor}{black}}} %D A \type {\doStartSummary#1#2#3\StopSummary} could have been %D used too but this one is less sensitive for catcode changes %D (not that we expect problems like this in this kind of %D application). %D The width is either derived from the width ot the title or %D at random. The final width of the box is detemined by the %D content. \def\SetAcceptableWidth {\scratchdimen=.5\makeupwidth \ifdim\wd\scratchbox>.5\makeupwidth \getrandomdimen\hsize{\wd\scratchbox}{.8\makeupwidth}% \else \getrandomdimen\hsize{.5\makeupwidth}{.7\makeupwidth}% \fi} %D The subtext box goes at the bottom, somewhere in the right %D corner. \def\RandomSubtextBox#1#2#3% {\vbox to \makeupheight {\vfill \hbox to \makeupwidth {\hfill \button [offset=2ex,frame=off,background=shape,strut=no, backgroundcolor=#1,framecolor=#2,foregroundcolor=#3] {\copy\scratchbox}% [previouspage]% \getrandomdimen\scratchdimen{.5cm}{2.5cm}% \hskip\scratchdimen} \getrandomdimen\scratchdimen{.5cm}{1.5cm} \vskip \scratchdimen}} %D The main text goes in the top half of the page, not to %D far from the center. The last \type {\vskip} makes sure %D that we don't clash with the subtexts. \definereference[thispage][page(\CurrentSummary)] \def\RandomSummaryBox#1#2#3% {\vbox to \makeupheight {\getrandomdimen\scratchdimen{.5cm}\makeupheight \vskip 0pt plus \scratchdimen \hbox to \makeupwidth {\getrandomdimen\scratchdimen{.5cm}\makeupwidth \hskip 0pt plus \scratchdimen \button [offset=3ex,frame=off,background=shape,strut=no, backgroundcolor=#1,framecolor=#2,foregroundcolor=#3] {\copy\scratchbox}% [thispage]% \getrandomdimen\scratchdimen{.5cm}\makeupwidth \hskip 0pt plus \scratchdimen} \getrandomdimen\scratchdimen{.5cm}\makeupheight \vskip 0pt plus \scratchdimen \vskip.2\makeupheight}} %D Because we conly collect data, we hav eto make sure that at %D some moment it is processed and flushed. The following loop %D does this. \def\BuildPage {\dorecurse{\CurrentSummary} {\startstandardmakeup \setlayer[temp]{\foundbox{Summary}\recurselevel} \setlayer[temp]{\foundbox{Subtext}\recurselevel} \stopstandardmakeup}} %D We hook this macro into the \type {\stoptext} macro. \appendtoks \BuildPage \to \everystoptext %D We still need a title page. \def\TitlePage% {\dodoublegroupempty\doTitlePage} \long\def\doTitlePage#1#2% {\ifsecondargument \MakeTitlePage{#1}{#2} \else\iffirstargument \MakeTitlePage{\currentdate}{#1} \else \MakeTitlePage{\currentdate}{Welcome} \fi\fi} \def\MakeTitlePage#1#2% {\StartSummary{#1}{#2}\StopSummary} %D For old times sake: \long\def\StartTopic#1\StopTopic{\StartSummary#1\StopSummary} \doifnotmode{demo}{\endinput} %D The demo text. \starttext \TitlePage{Indeed}{The Title Page} \StartSummary{Alpha}{Title} A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. \StopSummary \StartSummary{Beta and Gamma}{Another Title} A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. \StopSummary \StartSummary{Delta}{Some Title} A simple and not too long text just to show the topic. \StopSummary \StartSummary{Epsilon}{What A Title} A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. \StopSummary \StartSummary{Zeta, Eta and Theta}{Eh, A Title} A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. \StopSummary \StartSummary{Omega} A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. A simple and not too long text just to show the topic. \StopSummary \stoptext ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-plg.mkii�������������������������������0000644�0001750�0001750�00000012754�11754241457�024263� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-pls, %D version=2003.03.16, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Setup, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifx\pageareabox\undefined \else \endinput \fi \writestatus{loading}{ConTeXt Page Macros / Extra Page Building} %D This feature has been present for a while but has never been %D exploited: pluggable pagebuilders. The next example code %D demonstrates the application of one such a plug-in. This variant %D support \type {page}, \type {leftpage} and \type {rightpage} %D definitions where specific areas are placed with the \type %D {\pagearea} command. %D %D \starttyping %D \setupheadertexts[the header text] %D \setupfootertexts[a pretty long left footer text][something right] %D \setupbottomtexts[a not so long bottom text][another right thing] %D \setuptexttexts [margin][something marginal][indeed] %D %D \startpagelayout[leftpage] %D \setupTABLE[offset=overlay] %D \setupTABLE[c][1][width=\leftmarginwidth] %D \bTABLE %D \bTR %D \bTD[nx=3,background=color,backgroundcolor=green] %D \pagearea[header][text][middle] %D \eTD %D \eTR %D \bTR %D \bTD \pagearea[text][margin][left] \eTD %D \bTD[nx=2] \pagearea[text] \eTD %D \eTR %D \bTR %D \bTD[nx=3,offset=overlay] %D {\bTABLE[width=.5\hsize] %D \bTR %D \bTD \pagearea[footer][text][left] \eTD %D \bTD \pagearea[bottom][text][left] \eTD %D \eTR %D \eTABLE} %D \eTD %D \eTR %D \eTABLE %D \stoppagelayout %D %D \startpagelayout[rightpage] %D \setupTABLE[offset=overlay] %D \setupTABLE[c][1][width=\rightmarginwidth] %D \bTABLE %D \bTR %D \bTD[nx=3] \pagearea[header][text][middle] \eTD %D \eTR %D \bTR %D \bTD \pagearea[text][margin][left] \eTD %D \bTD[nx=2] \pagearea[text] \eTD %D \eTR %D \bTR %D \bTD[nx=3,offset=overlay] %D {\bTABLE[width=.5\hsize] %D \bTR %D \bTD \pagearea[bottom][text][right] \eTD %D \bTD \pagearea[footer][text][right] \eTD %D \eTR %D \eTABLE} %D \eTD %D \eTR %D \eTABLE %D \stoppagelayout %D %D \setupcolors[state=start] %D %D \setupbackgrounds[text][background=color,backgroundcolor=blue] %D \setupbackgrounds[header][text][background=color,backgroundcolor=red] %D %D \setuppagenumbering[alternative=doublesided,location=] %D %D \setuplayout[method=makeup] %D %D \definetextbackground %D [test] %D [state=start, %D background=color, %D backgroundcolor=yellow] %D %D \starttext %D %D \dorecurse{10}{\input tufte \par} %D %D \input tufte \starttest \input tufte \stoptest \input tufte %D %D \starttabulate %D \NC test \NC \starttest \input tufte \stoptest \NC \NR %D \stoptabulate %D %D \dorecurse{10}{\input tufte \par} %D %D \stoptext %D \stoptyping \unprotect \setvalue{\??ly\c!method\v!makeup}#1#2% {\setbox\pagebox\hbox {\vbox to \textheight {\offinterlineskip % optie \vskip\dimexpr-1\topskip+\strutheight\relax % \textwidth\makeupwidth \hsize\textwidth \boxmaxdepth\maxdepth \noindent \dopagecontents#1#2}}% \wd\pagebox\makeupwidth \ht\pagebox\textheight \dp\pagebox\zeropoint \hsize\paperwidth \vsize\paperheight \setbox\pagebox\vbox {\doifbothsidesoverruled {\let\!!stringa\v!page} {\let\!!stringa\v!rightpage} {\let\!!stringa\v!leftpage}% \getvalue{\??ly\c!method:\!!stringa}}% \wd\pagebox\paperwidth \ht\pagebox\paperheight \dp\pagebox\zeropoint} \newbox\pageareabox \def\pagearea {\dotripleempty\dopagearea} \def\dopagearea[#1][#2][#3]% {\ifthirdargument \doifelse{#3}\v!left {\dodopagearea{#1}{#2}\c!lefttext} {\doifelse{#3}\v!right {\dodopagearea{#1}{#2}\c!righttext} {\dodopagearea{#1}{#2}\c!middletext}}% \else\ifsecondargument \doifbothsidesoverruled {\dodopagearea{#1}{#2}\c!righttext} {\dodopagearea{#1}{#2}\c!righttext} {\dodopagearea{#1}{#2}\c!lefttext }% \else \doif{#1}\v!text % copy due to trial runs in TABLE {\iftrialtypesetting \copy\pagebox \else \setbox\pagebox\vbox {\localstarttextcolor \box\pagebox \localstoptextcolor}% \localpositioningfalse \addtextbackground\pagebox \addtextgridlayer\pagebox \box\pagebox \fi}% \fi\fi} \def\dodopagearea#1#2#3% {\setbox\pageareabox\vbox{\getvalue{\??tk#1#2#3}}% \ifsomebackgroundfound{#1#2}% \iftrialtypesetting \box\pageareabox \else \localframed [\??ma#1#2] [\c!width=\wd\pageareabox, \c!height=\ht\pageareabox, \c!offset=\v!overlay] {\box\pageareabox}% \fi \else \box\pageareabox \fi} \setvalue{\??ly\c!method:\v!leftpage }{\getvalue{\??ly\c!method:\v!page}} \setvalue{\??ly\c!method:\v!rightpage}{\getvalue{\??ly\c!method:\v!page}} % \long\def\startpagelayout[#1]#2\stoppagelayout % {\long\setvalue{\??ly\c!method:#1}{#2}} \long\def\startpagelayout {\bgroup\catcode`\^^M=\@@ignore\dostartpagelayout} \long\def\dostartpagelayout[#1]#2\stoppagelayout {\egroup\long\setvalue{\??ly\c!method:#1}{#2}} \protect \endinput ��������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-prs.lua��������������������������������0000644�0001750�0001750�00000004572�12130411274�024111� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['cldf-bas'] = { version = 1.001, comment = "companion to cldf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lpegmatch, patterns = lpeg.match, lpeg.patterns local P, R, V, Cc, Cs = lpeg.P, lpeg.R, lpeg.V, lpeg.Cc, lpeg.Cs local format = string.format local cpatterns = patterns.context or { } patterns.context = cpatterns local backslash = P("\\") local csname = backslash * P(1) * (1-backslash)^0 local sign = P("+") / "\\textplus " + P("-") / "\\textminus " local leftbrace = P("{") local rightbrace = P("}") local nested = P { leftbrace * (V(1) + (1-rightbrace))^0 * rightbrace } local subscript = P("_") local superscript = P("^") local utf8char = patterns.utf8char local cardinal = patterns.cardinal -- local scripts = P { "start", -- start = V("csname") + V("lowfirst") + V("highfirst"), -- csname = csname, -- content = Cs(V("csname") + nested + sign^-1 * (cardinal + utf8char)), -- lowfirst = subscript * ( Cc("\\lohi{%s}{%s}") * V("content") * superscript + Cc("\\low{%s}" ) ) * V("content") / format, -- highfirst = superscript * ( Cc("\\hilo{%s}{%s}") * V("content") * subscript + Cc("\\high{%s}") ) * V("content") / format, -- } local scripts = P { "start", start = V("csname") + V("lowfirst") + V("highfirst"), csname = csname, content = Cs(V("csname") + nested + sign^-1 * (cardinal + utf8char)), lowfirst = (subscript /"") * ( Cc("\\lohi{") * V("content") * Cc("}{") * (superscript/"") + Cc("\\low{" ) ) * V("content") * Cc("}"), highfirst = (superscript/"") * ( Cc("\\hilo{") * V("content") * Cc("}{") * (subscript /"") + Cc("\\high{") ) * V("content") * Cc("}"), } local scripted = Cs((csname + scripts + utf8char)^0) cpatterns.scripts = scripts cpatterns.csname = csname cpatterns.scripted = scripted cpatterns.nested = nested -- inspect(scripted) -- print(lpegmatch(scripted,"10^-3_x")) -- print(lpegmatch(scripted,"10^-a")) ��������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mul.mkiv�������������������������������0000644�0001750�0001750�00000173632�12130411274�024277� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-mul, % was: core-mul %D version=1998.03.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Multi Column Output, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: basecolumns as parent for columns and itemize % !!! there are some issues with hsize an vsize as well as flushing % !!! floats but this module will be redone anyway \writestatus{loading}{ConTeXt Page Macros / Simple Multi Column} %D This module is mostly a copy from the original multi column routine as %D implemented in \type {core-mul}. When the main OTR macro's were %D isolated in modules and column sets were introduced, this module became %D part of the OTR modules. As a result this module is no longer generic. \unprotect \definesystemvariable {ks} % KolomSpan % check \count<insert> multiplications %D The following macro's implement a multi||column output routine. The original %D implementation was based on Donald Knuth's implementation, which was adapted by %D Craig Platt to support balancing of the last page. I gradually adapted Platt's %D version to our needs but under certain circumstances things still went wrong. I %D considered all calls to Platt's \type{\page_mul_routine_error} as undesirable. %D %D This completely new implementation can handle enough situations for everyday %D documents, but is still far from perfect. While at the moment the routine doesn't %D support all kind of floats, it does support: %D %D \startitemize[packed] %D \item an unlimitted number of columns %D \item ragged or not ragged bottoms %D \item optional balancing without \type{\page_mul_routine_errors} %D \item different \type{\baselineskips}, \type{\spacing}, \type {\topskip} and %D \type {\maxdepth} %D \item left- and right indentation, e.g. within lists %D \item moving columns floats to the next column or page %D \item handling of floats that are to wide for a columns %D \stopitemize %D %D One could wonder why single and multi||columns modes are still separated. One %D reason for this is that \TeX\ is not suited well for handling multi||columns. As %D a result, the single columns routines are more robust. Handling one column as a %D special case of multi||columns is posible but at the cost of worse float %D handling, worse page breaking, worse etc. Complicated multi||column page handling %D should be done in \cap{DTP}||systems anyway. \installcorenamespace {columns} \installcommandhandler \??columns {columns} \??columns %D Going to a new columns is done by means of a \type {\ejectcolumn}. The %D following definition does not always work. \unexpanded\def\ejectcolumn % not good enough {\goodbreak \showmessage\m!columns2\empty} %D The output routines plug into a more generic mechanism as can be seen at the %D end of this file. So, occasionally we need to define some plugin code. \unexpanded\def\page_mul_place_float_top {\showmessage\m!columns4\empty\page_one_place_float_here} \unexpanded\def\page_mul_place_float_bottom {\showmessage\m!columns5\empty\page_one_place_float_here} \unexpanded\def\page_mul_place_float_here {\page_one_place_float_here} \unexpanded\def\page_mul_place_float_force {\page_one_place_float_force} \unexpanded\def\page_mul_command_side_float_output {\page_otr_construct_and_shipout\unvbox\normalpagebox} \unexpanded\def\page_mul_command_flush_side_floats {\page_sides_forget_floats} \unexpanded\def\page_mul_command_synchronize_side_floats {\page_sides_forget_floats} \unexpanded\def\page_mul_command_next_page {\page_otr_eject_page} \unexpanded\def\page_mul_command_next_page_and_inserts {\page_otr_eject_page_and_flush_inserts} \let\page_mul_initialize_floats\relax \let\page_mul_flush_floats \relax \let\page_mul_flush_float \relax %D A hook: \let\finishcolumnbox\relax %D This will change to a local one: \ifdefined\nofcolumns \else \newcount\nofcolumn \fi \ifdefined\mofcolumns \else \newcount\mofcolumn \fi \appendtoks \nofcolumns\columnsparameter\c!n\relax \to \everysetupcolumns %D Columns are separated by spacing or rules or whatever suits. \installcorenamespace{columnseparators} \setvalue{\??columnseparators\v!on }{\let\page_mul_between_columns\page_mul_between_columns_rule} \setvalue{\??columnseparators\v!off }{\let\page_mul_between_columns\page_mul_between_columns_space} \setvalue{\??columnseparators }{\let\page_mul_between_columns\page_mul_between_columns_space} \setvalue{\??columnseparators\s!unknown}{\let\page_mul_between_columns\p_page_mul_rule} \def\page_mul_between_columns_rule {\bgroup \starttextproperties \scratchdistance\dimexpr\columnsparameter\c!distance/2\relax \hskip\scratchdistance\relax \vrule \s!width\linewidth \ifnum\bottomraggednessmode=\plustwo % baselinebottom \s!depth\strutdepth \fi \hskip\scratchdistance\relax \stoptextproperties \egroup} \def\page_mul_between_columns_space {\hskip\columnsparameter\c!distance\relax} \let\page_mul_between_columns\page_mul_between_columns_space %D We declare some registers: \newdimen \d_page_mul_available_width \newdimen \d_page_mul_distance \newdimen \d_page_mul_leftskip \newdimen \d_page_mul_rightskip \newdimen \d_page_mul_offset \newdimen \d_page_mul_forced_height \newdimen \d_page_mul_used_width \newdimen \d_page_mul_temp \newcount \c_page_mul_balance_minimum \newcount \c_page_mul_n_of_lines \newbox \b_page_mul_preceding \newdimen \d_page_mul_preceding_height \newdimen \d_page_mul_preceding_depth \newconditional\c_page_mul_preceding_present \newbox \b_page_mul_preceding_rest_of_page \newconditional\c_page_mul_reverse \newconditional\c_page_mul_trace %D The next dimensions reports the final column height .. todo \newdimen\finalcolumnheights \newcount\finalcolumnlines \newdimen\savedpagetotal % brrr \newif\ifstretchcolumns \stretchcolumnsfalse \newif\ifheightencolumns \heightencolumnsfalse \newif\ifinheritcolumns \inheritcolumnsfalse \newif\ifbalancecolumns %\balancecolumnstrue %D An important one: \unexpanded\def\page_mul_command_set_hsize % beware, this one is available for use in macros {\setbox\scratchbox\hbox{\page_mul_between_columns}% \d_page_mul_distance\wd\scratchbox \d_page_mul_available_width\dimexpr \makeupwidth -\d_page_mul_leftskip -\d_page_mul_rightskip -\nofcolumns\d_page_mul_distance +\d_page_mul_distance \relax \d_page_mul_used_width\dimexpr \d_page_mul_available_width/\nofcolumns -\d_page_mul_offset*\plustwo \relax \textwidth\d_page_mul_used_width % needs thinking ... grouping etc \hsize\d_page_mul_used_width} %D Torture test: %D %D \startbuffer %D \startbuffer[b] %D \startcolumns %D \input tufte %D \stopcolumns %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower %D \input tufte %D \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startcolumns \startnarrower %D \input tufte %D \stopnarrower \stopcolumns %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower \startcolumns %D \input tufte %D \stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startcolumns \startnarrower[left] %D \input tufte %D \stopnarrower \stopcolumns %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower[left] \startcolumns %D \input tufte %D \stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower \startcolumns \startnarrower %D \input tufte %D \stopnarrower\stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower[left] \startcolumns \startnarrower %D \input tufte %D \stopnarrower\stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D \stopbuffer %D %D \start %D \def\postprocesscolumnline#1{\ruledhbox{\strut\box#1}\hss} %D \getbuffer %D \stop %D One should be aware that when font related dimensions are used in typesetting the %D in||between material, these dimensions are influenced by bodyfont switches inside %D multi||column mode. \setnewconstant\multicolumnlinemethod\zerocount % 0=normal 1=raw \def\multicolumnovershootratio{.5} % {\ifgridsnapping0\else.5\fi} \unexpanded\def\page_mul_set_n_of_lines {\settotalinsertionheight \d_page_mul_temp\dimexpr -\d_page_mul_offset*\plustwo +\textheight \ifdim\d_page_mul_preceding_height>\zeropoint -\d_page_mul_preceding_height \fi -\totalinsertionheight \relax \ifcase\multicolumnlinemethod \getnoflines \d_page_mul_temp \or \getrawnoflines\d_page_mul_temp \else \getrawnoflines\d_page_mul_temp \fi % added 30/7/2004 \ifnum\layoutlines>\zerocount \ifnum\noflines>\layoutlines \noflines\layoutlines \fi \fi \c_page_mul_n_of_lines\noflines} \unexpanded\def\page_mul_command_set_vsize {\page_one_command_set_vsize % indeed? \page_mul_set_n_of_lines \d_page_mul_temp\nofcolumns\dimexpr \c_page_mul_n_of_lines\openlineheight +\multicolumnovershootratio\openlineheight % collect enough data \relax \global\vsize\d_page_mul_temp \pagegoal \d_page_mul_temp} % let's do it only here %D It really starts here. After some checks and initializations we change the output %D routine to continous multi||column mode. This mode handles columns that fill the %D current and next full pages. The method used is (more or less) multiplying \type %D {\vsize} and dividing \type {\hsize} by \type {\nofcolumns}. More on this can be %D found in the \TeX book. We save the top of the current page in box %D \type {\b_page_mul_preceding}. %D %D We manipulate \type {\topskip} a bit, just to be shure that is has no %D flexibility. This has te be done every time a font switch takles place, because %D \type {\topskip} can depend on this. \newconstant\c_page_mul_routine \setnewconstant\c_page_mul_routine_regular \zerocount \setnewconstant\c_page_mul_routine_intercept \plusone \setnewconstant\c_page_mul_routine_continue \plustwo \setnewconstant\c_page_mul_routine_balance \plusthree \setnewconstant\c_page_mul_routine_error \plusfour \unexpanded\def\page_mul_command_routine {\ifcase\c_page_mul_routine \page_one_command_routine \or \page_mul_routine_intercept \or \page_mul_routine_continue \or \page_mul_routine_balance \or \page_mul_routine_error \fi} \def\page_mul_routine_intercept {\global\setbox\b_page_mul_preceding\vbox {\page_otr_command_flush_top_insertions \unvbox\normalpagebox}} \def\page_mul_routine_error {\showmessage\m!columns3\empty \page_otr_construct_and_shipout\unvbox\normalpagebox} %D When we leave the multi||column mode, we have to process the not yet shipped out %D part of the columns. When we don't balance, we simply force a continuous output, %D but a balanced output is more tricky. %D %D First we try to fill up the page and when all or something is left we try to %D balance things. This is another useful adaption of the ancesters of these %D macro's. It takes some reasoning to find out what happens and maybe I'm making %D some mistake, but it works. %D %D Voiding box \type {\b_page_mul_preceding} is sometimes necessary, e.g. when there is no %D text given between \type {\begin..} and \type {\end..}. The \type {\par} is %D needed! %D Because some initializations happen three times, we defined a macro for %D them. Erasing \type{\everypar} is needed because we don't want anything %D to interfere. \unexpanded\def\page_mul_initialize_variables {\reseteverypar \dontcomplain \settopskip \setmaxdepth \topskip 1\topskip \splittopskip \topskip \splitmaxdepth \maxdepth \boxmaxdepth \maxdepth % dangerous \emergencystretch\zeropoint \relax} % sometimes needed ! %D Flushing the page comes to pasting the columns together and appending the result %D to box \type {\b_page_mul_preceding}, if not void. I've seen a lot of implementations in %D which some skip was put between normal text and multi||column text. When we don't %D want this, the baselines can be messed up. I hope the seemingly complicated %D calculation of a correction \type {\kern} is adequate to overcome this. Although %D not watertight, spacing is taken into account and even multiple mode changes on %D one page go well. But cross your fingers and don't blame me. %D %D One of the complications of flushing out the boxes is that \type {\b_page_mul_preceding} %D needs to be \type {\unvbox}'ed, otherwise there is too less flexibility in the %D page when using \type {\raggedbottom}. It took a lot of time before these kind of %D problems were overcome. Using \type {\unvbox} at the wrong moment can generate %D \type {\page_mul_routine_error}'s. %D %D One can use the macros \type {\maxcolumnheight} and \type {\maxcolumndepth} when %D generating material between columns as well as postprocessing column lines. \newdimen\maxcolumnheight \newdimen\maxcolumndepth \newbox\columnpagebox \def\page_mul_calculate_column_result_dimensions {\maxcolumnheight\zeropoint \maxcolumndepth \zeropoint \dohandleallcolumnscs\page_mul_calculate_column_result_dimensions_step} \def\page_mul_calculate_column_result_dimensions_step {\ifdim\ht\currentcolumnbox>\maxcolumnheight \maxcolumnheight\ht\currentcolumnbox \fi \ifdim\dp\currentcolumnbox>\maxcolumndepth \maxcolumndepth\dp\currentcolumnbox \fi} \setnewconstant\multicolumntopflushmethod\plusone % 0: no correction, 1: correction when topstuff, 2: correction, 3: correction++ \setnewconstant\multicolumntopalignmethod\plustwo % 0: nothing, 1: force grid, 2: follow grid \def\page_mul_flush_preceding_normal {\unvbox\b_page_mul_preceding} \def\page_mul_flush_preceding_ongrid {\scratchdimen\dimexpr \savedpagetotal -\d_page_mul_preceding_height -\d_page_mul_preceding_depth -\topskip \relax \box\b_page_mul_preceding \kern\scratchdimen} \def\page_mul_flush_packaged_columns_continued {\bgroup \page_mul_flush_packaged_columns_indeed \box\columnpagebox \egroup} \def\page_mul_flush_packaged_columns_balanced {\bgroup \page_mul_flush_packaged_columns_indeed % messy correction, we need to rewrite this module (newcolumns) \setbox\columnpagebox\vbox {\offinterlineskip \scratchdimen\ht\columnpagebox \advance\scratchdimen\dp\columnpagebox % we probably lost that one already \box\columnpagebox \vskip-\scratchdimen}% \scratchdimen\noflines\openlineheight \advance\scratchdimen-\openstrutdepth \ifgridsnapping % quick hack (at least it works with itemize) \else \advance\scratchdimen-\openlineheight \advance\scratchdimen\topskip \fi \ht\columnpagebox\scratchdimen \dp\columnpagebox\openstrutdepth % end of mess \box\columnpagebox \egroup} \def\page_mul_flush_packaged_columns_indeed {\ifvoid\b_page_mul_preceding \setfalse\c_page_mul_preceding_present % will be set elsewhere \else \settrue\c_page_mul_preceding_present \page_postprocessors_box\b_page_mul_preceding \fi \forgetall \page_mul_initialize_variables \page_mul_calculate_column_result_dimensions \page_mul_postprocess_linenumbers \dohandleallcolumns {\page_postprocessors_column\currentcolumnbox}% \dohandleallcolumns {\page_marks_synchronize_column\plusone\nofcolumns\mofcolumns\currentcolumnbox}% \page_mul_postprocess_lines \page_mul_postprocess_columns \dohandleallcolumns {\global\setbox\currentcolumnbox\hbox to \d_page_mul_used_width {\box\currentcolumnbox}% \wd\currentcolumnbox\d_page_mul_used_width \ifheightencolumns \ht\currentcolumnbox\d_page_mul_forced_height \fi}% \page_mul_calculate_column_result_dimensions \overlaycolumnfootnotes \setbox\columnpagebox\vbox {\hbox to \makeupwidth {\hskip\d_page_mul_leftskip\relax % new, \relax needed \ifconditional\c_page_mul_reverse \expandafter\dohandlerevcolumns \else \expandafter\dohandleallcolumns \fi {\finishcolumnbox {\setbox\scratchbox\hbox {\ifx\finishcolumnbox\relax\else\strut\fi \box\currentcolumnbox}% hm, why strut \anch_mark_column_box\scratchbox \box\scratchbox}% \hfil}% \unskip \hskip\d_page_mul_rightskip}}% new \scratchdimen\zeropoint \dohandleallcolumns {\ifdim-\ht\currenttopcolumnbox<\scratchdimen \scratchdimen-\ht\currenttopcolumnbox \fi \global\setbox\currenttopcolumnbox\emptybox}% \advance\scratchdimen \ht\columnpagebox \setbox\scratchbox\hbox to \makeupwidth {\vrule \s!width\zeropoint \s!height\scratchdimen \s!depth\dp\columnpagebox \dostepwiserecurse\plustwo\nofcolumns\plusone{\hfil\page_mul_between_columns}\hfil}% \setbox\columnpagebox\hbox {\box\columnpagebox \hskip-\makeupwidth \box\scratchbox}% \page_mul_postprocess_page \ifconditional\c_page_mul_preceding_present \settrue\c_page_mul_preceding_present % next some incredible crappy code \ifcase\multicolumntopalignmethod \page_mul_flush_preceding_normal % not on grid \or \page_mul_flush_preceding_ongrid % force on grid \else\ifgridsnapping \page_mul_flush_preceding_ongrid % obey grid settings, force on grid \else \page_mul_flush_preceding_normal % ignore grid settings, not on grid \fi \fi \fi \global\d_page_mul_preceding_height\zeropoint \page_otr_command_set_vsize \dosomebreak\nobreak % hm, only needed when topstuff \ifgridsnapping \else \ifcase\multicolumntopflushmethod % sometimes method 1 goes wrong, so we need a way out; best sort this out % when we run into it again \or % \input tufte \startcolumns \showbaselines \input tufte \stopcolumns \input tufte \ifconditional\c_page_mul_preceding_present % \scratchdimen\topskip % \advance\scratchdimen -\openstrutheight % \nointerlineskip % \vskip-\scratchdimen \nointerlineskip \vskip\dimexpr\openstrutheight-\topskip\relax \fi \or % \scratchdimen\topskip % \advance\scratchdimen -\openstrutheight % \nointerlineskip % \vskip-\scratchdimen \nointerlineskip \vskip\dimexpr\openstrutheight-\topskip\relax \or % untested but maybe handy % \scratchdimen\topskip % \advance\scratchdimen -\openstrutheight % \nointerlineskip % \vskip-\scratchdimen % \vskip-\lineheight % \vbox{\strut}% \nointerlineskip \vskip\dimexpr\openstrutheight-\topskip-\lineheight\relax \vbox{\strut}% \fi \fi \prevdepth\openstrutdepth \nointerlineskip \dp\columnpagebox\zeropoint \global\finalcolumnheights\ht\columnpagebox \getnoflines\finalcolumnheights \global\finalcolumnlines\noflines} %D In case one didn't notice, finaly \type{\finishcolumnbox} is applied to %D all boxes. One can use these hooks for special purposes. %D %D Once upon a time I wanted to manipulate the individual lines in a column. %D This feature is demonstrated in the two examples below. %D %D \startbuffer %D \def\postprocesscolumnline#1% or \postprocesscolumnbox %D {\ruledhbox{\box#1}\hss} %D %D \startcolumns[n=4] %D \dorecurse{25}{line: \recurselevel\par} %D \stopcolumns %D \stopbuffer %D %D \typebuffer %D %D Here we show the natural width of the lines: %D %D {\getbuffer} %D %D The next example does a bit more advanced manipulation: %D %D \startbuffer %D \def\postprocesscolumnline#1% %D {\ifodd\currentcolumn %D \hfill\unhbox#1\relax %D \else %D \relax\unhbox#1\hfill %D \fi} %D %D \startcolumns[n=4] %D \dorecurse{25}{line \recurselevel\par} %D \stopcolumns %D \stopbuffer %D %D \typebuffer %D %D Here we also see an application of \type{\currentcolumn}: %D %D {\getbuffer} %D %D This feature is implemented using the reshape macros presented %D in \type{supp-box}. \ifdefined\page_postprocessors_column\else\let\page_postprocessors_column\relax\fi % operates on passed box \ifdefined\postprocesscolumnline \else\let\postprocesscolumnline \relax\fi % operates on passed box \ifdefined\postprocesscolumnbox \else\let\postprocesscolumnbox \relax\fi % operates on passed box \ifdefined\postprocesscolumnpagebox \else\let\postprocesscolumnpagebox \relax\fi % operates on passed box \def\page_mul_postprocess_linenumbers{\ifx\page_postprocessors_column\relax\else\page_mul_postprocess_linenumbers_indeed\fi} \def\page_mul_postprocess_lines {\ifx\postprocesscolumnline \relax\else\page_mul_postprocess_lines_indeed \fi} \def\page_mul_postprocess_columns {\ifx\postprocesscolumnbox \relax\else\page_mul_postprocess_columns_indeed \fi} \def\page_mul_postprocess_page {\ifx\postprocesscolumnpagebox \relax\else\page_mul_postprocess_page_indeed \fi} \def\page_mul_postprocess_linenumbers_indeed {\dohandleallcolumns{\page_postprocessors_column\currentcolumnbox}} \def\page_mul_postprocess_lines_indeed {\dohandleallcolumnscs\page_mul_postprocess_lines_step} \def\page_mul_postprocess_lines_step % TODO: use lua solution instead {\global\setbox\currentcolumnbox\vtop {\beginofshapebox \unvbox\currentcolumnbox \unskip\unskip \endofshapebox \reshapebox {\scratchheight\ht\shapebox \scratchdepth \dp\shapebox \setbox\shapebox\hbox to \hsize {\postprocesscolumnline\shapebox}% \ht\shapebox\scratchheight \dp\shapebox\scratchdepth \box\shapebox}% \flushshapebox \reseteverypar \parskip\zeropoint % = \forgetall \verticalstrut \vskip-\struttotal \vfil}} \def\page_mul_postprocess_columns_indeed {\dohandleallcolumnscs\page_mul_postprocess_columns_step} \def\page_mul_postprocess_columns_step {\global\setbox\currentcolumnbox\hbox {\postprocesscolumnbox\currentcolumnbox}} \def\page_mul_postprocess_page_indeed {\postprocesscolumnpagebox\columnpagebox} %D Here comes the simple splitting routine. It's a bit longer than expected because %D of ragging bottoms or not. This part can be a bit shorter but I suppose that I %D will forget what happens. The splitting takes some already present material %D (think of floats) into account! %D %D First we present some auxiliary routines. Any material, like for instance floats, %D that is already present in the boxes is preserved. \newdimen\d_page_mul_split_height_used \newdimen\d_page_mul_split_height_max \def\page_mul_split_column#1#2#3#4% copy or box {\bgroup \ifdim\ht#4>\zeropoint \d_page_mul_split_height_used#3\relax \d_page_mul_split_height_max\d_page_mul_split_height_used \advance\d_page_mul_split_height_used -\ht#4% \columnfootnotecorrection{#1}\d_page_mul_split_height_used \setbox\scratchbox\vsplit#2 to \d_page_mul_split_height_used \global\setbox#1\vbox to \d_page_mul_split_height_max {\ifgridsnapping \scratchdimen\dimexpr\topskip-\openstrutheight\relax \vskip\scratchdimen \copy#4% \vskip-\scratchdimen \else \unvcopy#4% \fi \fuzzysnappedbox\unvbox\scratchbox \fakecolumnfootnotes{#1}}% \else\ifcase\c_strc_notes_page_location \global\setbox#1\vsplit#2 to #3% \global\setbox#1\vbox {\fuzzysnappedbox\unvbox{#1}}% % or \box ? \else \columnfootnotecorrection{#1}{#3}% \setbox\scratchbox\vsplit#2 to #3% \global\setbox#1\vbox to #3% {\fuzzysnappedbox\unvbox\scratchbox \fakecolumnfootnotes{#1}}% \fi \fi \egroup} \def\page_mul_split_current_column#1#2% {\page_mul_split_column\currentcolumnbox{#1}{#2}\currenttopcolumnbox} \def\page_mul_split_first_column#1#2% {\page_mul_split_column\firstcolumnbox{#1}{#2}\firsttopcolumnbox} \def\page_mul_split_last_column#1#2% {\global\setbox\lastcolumnbox\vbox {\unvcopy\lasttopcolumnbox \fuzzysnappedbox\unvbox{#1}% \fakecolumnfootnotes\lastcolumnbox}} %D NEW: still to be documented. \def\fakecolumnfootnotes#1% {\relax \ifcase\c_strc_notes_page_location\else \ifnum#1=\lastcolumnbox \fakenotes \fi \fi} \def\columnfootnotecorrection#1#2% {\relax \ifcase\c_strc_notes_page_location % page notes \or \ifnum#1=\firstcolumnbox\relax \calculatetotalclevernoteheight \advance#2 -\totalnoteheight \fi \else \ifnum#1=\lastcolumnbox\relax \calculatetotalclevernoteheight \advance#2 -\totalnoteheight \fi \fi} \def\overlaycolumnfootnotes {\relax \ifcase\c_strc_notes_page_location % page \or \checknotepresence \ifnotespresent \page_mul_notes_flush_first_column \fi \or \checknotepresence \ifnotespresent \page_mul_notes_flush_last_column \fi \fi} \newbox\b_page_mul_notes \def\page_mul_notes_flush_first_column {\begingroup \setbox\b_page_mul_notes\vbox{\placenoteinserts}% \ifzeropt\ht\b_page_mul_notes % can't happen as we already checked \else \page_mul_set_n_of_lines \advance\c_page_mul_n_of_lines \minustwo \scratchdimen\dimexpr\c_page_mul_n_of_lines\lineheight+\topskip\relax \setbox\b_page_mul_notes\hbox{\lower\scratchdimen\box\b_page_mul_notes}% \ht\b_page_mul_notes\openstrutheight \dp\b_page_mul_notes\openstrutdepth \wd\b_page_mul_notes\zeropoint \scratchdimen\ht\firstcolumnbox \global\setbox\firstcolumnbox\vbox to \scratchdimen {\box\firstcolumnbox \vskip-\scratchdimen \box\b_page_mul_notes}% \fi \endgroup} \def\page_mul_notes_flush_last_column {\begingroup \setbox\b_page_mul_notes\vbox{\placenoteinserts}% \ifzeropt\ht\b_page_mul_notes % can't happen as we already checked \else % maybe here also \page_mul_set_n_of_lines \scratchdimen\dimexpr\ht\firstcolumnbox-\openstrutdepth\relax % \strutdp \getnoflines\scratchdimen \advance\noflines \minustwo \scratchdimen\dimexpr\noflines\lineheight+\topskip\relax \setbox\b_page_mul_notes\hbox{\lower\scratchdimen\box\b_page_mul_notes}% \ht\b_page_mul_notes\openstrutheight \dp\b_page_mul_notes\openstrutdepth \wd\b_page_mul_notes\zeropoint \scratchdimen\ht\lastcolumnbox \global\setbox\lastcolumnbox\vbox to \scratchdimen {\box\lastcolumnbox \vskip-\scratchdimen \box\b_page_mul_notes}% \fi \endgroup} %D Here comes the routine that splits the long box in columns. The macro \type %D {\page_mul_flush_floats} can be used to flush either floats that were present before %D the multi||column mode was entered, or floats that migrate to next columns. %D Flushing floats is a delicate process. \def\page_mul_routine_continue {\bgroup \forgetall \page_mul_initialize_variables % \dimen0=\makeupheight % \advance\dimen0 -\d_page_mul_preceding_height % \settotalinsertionheight % \advance\dimen0 -\totalinsertionheight % \ifgridsnapping % evt altijd, nog testen % \getnoflines{\dimen0} % \dimen0=\noflines\openlineheight % \fi \page_mul_set_n_of_lines \d_page_mul_balance_target\c_page_mul_n_of_lines\openlineheight \ifconditional\c_page_mul_trace \writestatus\m!columns{continue: lines=\the\c_page_mul_n_of_lines, target=\the\d_page_mul_balance_target, textheight=\the\textheight}% \fi \dohandleallcolumns {\page_mul_split_current_column\normalpagebox\d_page_mul_balance_target}% \setbox\b_page_mul_preceding_rest_of_page\vbox{\unvbox\normalpagebox}% \ifinheritcolumns \ifcase\bottomraggednessmode % 0 = ragged \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox {\scratchdepth\dp\currentcolumnbox \unvbox\currentcolumnbox \vskip\dimexpr\openstrutdepth-\scratchdepth\relax \prevdepth\openstrutdepth % \strutdp \vfill}}% \strc_notes_check_if_bottom_present %\ifconditional\c_notes_bottom_present \else % \dimen0\ht\firstcolumnbox % ?? %\fi \or % 1 = normal \advance\d_page_mul_balance_target\maxdepth \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \d_page_mul_balance_target {\unvbox\currentcolumnbox}}% \or % 2 = baseline % the columns are on top of the baseline \fi \else \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \d_page_mul_balance_target {\ifstretchcolumns \unvbox\currentcolumnbox \else \unvbox\currentcolumnbox % wel of niet \unvbox ? \vfill \fi}}% \dohandleallcolumns {\ht\currentcolumnbox\d_page_mul_balance_target}% redundant \fi \setbox\b_page_mul_preceding\vbox{\page_mul_flush_packaged_columns_continued}% \page_otr_construct_and_shipout\box\b_page_mul_preceding \page_otr_command_set_hsize \page_otr_command_set_vsize \page_mul_flush_floats \unvbox\b_page_mul_preceding_rest_of_page % \penalty\outputpenalty % gaat gruwelijk mis in opsommingen \egroup} %D And this is the balancing stuff. Again, part of the routine is dedicated to %D handling ragged bottoms, but here we also see some handling concerning the %D stretching of columns. We set \type {\widowpenalty} at~0, which enables us to %D balance columns with few lines. The use of \type {\box2} and \type {\box4} %D garantees a more robust check when skips are used. \newbox \b_page_mul_balance_content \newbox \b_page_mul_balance_first_column \newbox \b_page_mul_balance_column \newconstant \c_page_mul_balance_tries_max \newcount \c_page_mul_balance_tries \newdimen \d_page_mul_balance_target \newdimen \d_page_mul_balance_target_less \newdimen \d_page_mul_balance_natural_height \newdimen \d_page_mul_balance_regular_height \newdimen \d_page_mul_balance_step \newdimen \d_page_mul_balance_fuzzyness \newdimen \d_page_mul_balance_threshold \newconditional\c_page_mul_balance_possible \c_page_mul_balance_tries_max 250 % 100 is too small when floats are involved \def\page_mul_routine_balance {\bgroup \page_mul_initialize_variables \widowpenalty\zerocount \setbox\b_page_mul_balance_content\vbox{\unvbox\normalpagebox}% \ifdim\ht\b_page_mul_balance_content>\openlineheight % at least one line \ifnum\c_page_mul_balance_minimum<\plustwo % balance anyway \settrue\c_page_mul_balance_possible \else % check criterium to available lines \getnoflines{\ht\b_page_mul_balance_content}% \divide\noflines \nofcolumns \relax \ifnum\noflines<\c_page_mul_balance_minimum \relax \ifdim\dimexpr\ht\b_page_mul_balance_content+\ht\firsttopcolumnbox+\openlineheight\relax>\makeupheight \settrue\c_page_mul_balance_possible % column exceeding text height \else \setfalse\c_page_mul_balance_possible % it seems to fit \fi \else \settrue\c_page_mul_balance_possible % balance indeed \fi \fi \else \setfalse\c_page_mul_balance_possible % balancing does not make sense \fi \ifconditional\c_page_mul_balance_possible % start balancing, was: \ifdim\ht\b_page_mul_balance_content>\openlineheight \page_mul_balance_try_one \ifinheritcolumns \page_mul_balance_try_two \else \page_mul_balance_try_three \fi \else % a one liner is not properly handled here, so best rewrite the text then \showmessage\m!columns{10}\empty \global\setbox\firstcolumnbox\vbox{\unvbox\b_page_mul_balance_content}% \fi \c_page_mul_routine\c_page_mul_routine_error \baselinebottom % forces depth in separation rule \page_mul_flush_packaged_columns_balanced \page_mul_eject_page \egroup} \def\page_mul_eject_page {%\ifdim\pagetotal>\textheight % \page_otr_trigger_output_routine % new, but wrong as fails on mixed-001.tex (wrong pagetotal at this point) %\else \allowbreak }%\fi} \def\page_mul_balance_try_one {\d_page_mul_balance_target\dimexpr\ht\b_page_mul_balance_content+\topskip-\baselineskip\relax \dohandleallcolumns {\advance\d_page_mul_balance_target \ht\currenttopcolumnbox}% \divide\d_page_mul_balance_target \nofcolumns \vbadness\plustenthousand \c_page_mul_balance_tries\zerocount \bgroup \ifgridsnapping \d_page_mul_balance_step\lineheight \else \d_page_mul_balance_step\spacingfactor\onepoint % rubish \fi \doloop\page_mul_balance_try_one_attempt \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox{\unvcopy\currentcolumnbox}}% \ifnum\c_page_mul_balance_tries>\c_page_mul_balance_tries_max\relax \showmessage\m!columns7\empty \else \showmessage\m!columns8{\the\c_page_mul_balance_tries\space}% \fi \egroup} \def\page_mul_balance_try_one_attempt {\advance\c_page_mul_balance_tries \plusone \global\setbox\b_page_mul_preceding_rest_of_page\copy\b_page_mul_balance_content\relax \page_mul_split_first_column\b_page_mul_preceding_rest_of_page\d_page_mul_balance_target \dohandlemidcolumns {\page_mul_split_current_column\b_page_mul_preceding_rest_of_page\d_page_mul_balance_target}% \page_mul_split_last_column\b_page_mul_preceding_rest_of_page\d_page_mul_balance_target \setbox\b_page_mul_balance_first_column\vbox{\unvcopy\firstcolumnbox}% \d_page_mul_balance_natural_height\zeropoint \dohandleallcolumns\page_mul_balance_try_one_attempt_step \advance\d_page_mul_balance_natural_height -.0005pt % (33sp) get rid of accurracy problem, pretty new \ifnum\c_page_mul_balance_tries>\c_page_mul_balance_tries_max\relax \exitloop \else\ifdim\d_page_mul_balance_natural_height>\ht\b_page_mul_balance_first_column \advance\d_page_mul_balance_target \d_page_mul_balance_step\relax \else \exitloop \fi\fi} \def\page_mul_balance_try_one_attempt_step {\setbox\b_page_mul_balance_column\vbox {\unvcopy\currentcolumnbox \unpenalty \unskip \unpenalty \unskip}% maybe better in main splitter \ifdim\ht\b_page_mul_balance_column>\d_page_mul_balance_natural_height \d_page_mul_balance_natural_height\ht\b_page_mul_balance_column \fi} % We cannot assume that the first column is the tallest, if only because we may % have an aborted balance (one line in the first column and a graphic in the % second one). \def\page_mul_balance_try_two {\d_page_mul_balance_target\zeropoint \dohandleallcolumns {\ifdim\ht\currentcolumnbox>\d_page_mul_balance_target \d_page_mul_balance_target\ht\currentcolumnbox \fi}% \d_page_mul_balance_target_less\dimexpr\d_page_mul_balance_target-\openlineheight\relax \dohandleallcolumnscs\page_mul_balance_try_two_step} \def\page_mul_balance_try_two_step {\d_page_mul_balance_regular_height\ht\currentcolumnbox \d_page_mul_balance_threshold\plusten\openlineheight % funny value \global\setbox\currentcolumnbox\vbox to \d_page_mul_balance_target {\unvbox\currentcolumnbox \ifdim\d_page_mul_balance_regular_height>\d_page_mul_balance_threshold \ifdim\d_page_mul_balance_regular_height<\d_page_mul_balance_target \ifdim\d_page_mul_balance_regular_height>\d_page_mul_balance_target_less \vskip\zeropoint % !! \else \vskip\openlineheight \vfill \fi \else \vskip\zeropoint \fi \else \vskip\openlineheight \vfill \fi}} \def\page_mul_balance_try_three {\bgroup \ifstretchcolumns \d_page_mul_balance_target\ht\firstcolumnbox \d_page_mul_balance_fuzzyness\bottomtolerance\ht\firstcolumnbox \setbox\b_page_mul_balance_content\vbox{\unvcopy\lastcolumnbox}% \advance\d_page_mul_balance_target-\htdp\b_page_mul_balance_content\relax \ifdim\d_page_mul_balance_target>\openlineheight\relax \ifdim\d_page_mul_balance_target>\d_page_mul_balance_fuzzyness\relax % \stretchcolumnsfalse % beter good bad than bad good \showmessage\m!columns9\empty \fi \fi \fi \dohandleallcolumnscs\page_mul_balance_try_three_step \egroup} \def\page_mul_balance_try_three_step {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox {\ifstretchcolumns \unvbox\currentcolumnbox \else \box\currentcolumnbox \vfill \fi}} %D The multicolumn mechanism is incorporated in a \CONTEXT\ interface, %D which acts like: %D %D \starttyping %D \startcolumns[n=4,balance=no] %D some text %D \stopcolumns %D \stoptyping %D %D The setup is optional. The default behaviour of columns can be set %D up with: %D %D \starttyping %D \setupcolumns %D [n=2, %D balance=yes] %D \stoptyping %D %D In this case, stretching is according to the way it's done outside columns %D (\type{\inheritcolumnstrue}). Also we can setup the \type{tolerance} within a %D column, the \type{distance} between columns and the fixed \type{height} of a %D column. %D %D Here come the routines that handle the placement of column floats. Floats that %D are to big migrate to the next column. Floats that are too wide, migrate to the %D top of the next page, where they span as much columns as needed. Floats that are %D left over from outside the multi||column mode are flushed first. In macro %D \type{\page_otr_construct_and_shipout} the topfloats that are left from previous %D text should be set. %D %D When there are some floats in the queue, we inhibit the flushing of floats on top %D of columns. The number of waiting floats is preswent in \type{\savednoftopfloats} %D and is saved. As long as there are floats waiting, the topfloats are places as if %D we are outside multi||column mode. This is neccessary for e.g. multicolumn lists. %D %D When all those floats are flushed, we switch to the local flushing routine. % \newbox \floatlist % \newbox \savedfloatlist % % \def\page_floats_column_push_saved % {\ifconditional\c_page_floats_some_waiting % \showmessage\m!columns6{\the\savednoffloats}% % \global\setbox\savedfloatlist\box\floatlist % \xdef\page_floats_column_pop_saved % {\global\savednoffloats\the\savednoffloats % \global\setbox\floatlist\box\savedfloatlist % \global\noexpand\settrue\c_page_floats_some_waiting}% % \global\savednoffloats\zerocount % \global\setfalse\c_page_floats_some_waiting % \else % \global\let\page_floats_column_pop_saved\relax % \fi} % % \let\page_floats_column_pop_saved\relax % \def\page_mul_initialize_floats % messy as it adapts everypar % {\xdef\globalsavednoffloats{\the\savednoffloats}% % \ifnum\globalsavednoffloats>\zerocount % \setglobalcolumnfloats % hm, we always push so this never happens % \else % \setlocalcolumnfloats % \fi} \def\page_mul_initialize_floats % messy as it adapts everypar, we need to adapt this {\setlocalcolumnfloats} \newconditional\onlylocalcolumnfloats % temp hack as we will redo floats (grid snapping is also messy now) \newtoks \everylocalcolumnfloatspar \unexpanded\def\page_mul_command_flush_floats {\ifconditional\onlylocalcolumnfloats \doflushcolumnfloats \else \page_one_command_flush_floats \fi} \unexpanded\def\page_mul_command_check_if_float_fits {\ifconditional\onlylocalcolumnfloats \docolumnroomfloat \fi} \unexpanded\def\page_mul_command_flush_saved_floats {\ifconditional\onlylocalcolumnfloats\relax \else \page_one_command_flush_saved_floats \fi} \unexpanded\def\page_mul_command_flush_top_insertions {\ifconditional\onlylocalcolumnfloats\relax \else \page_one_command_flush_top_insertions \fi} \appendtoks \flushnotes \page_mul_flush_float %\flushmargincontents \checkindentation \to \everylocalcolumnfloatspar \def\setlocalcolumnfloats {\settrue\onlylocalcolumnfloats \everypar\everylocalcolumnfloatspar \let\page_mul_flush_float\doflushcolumnfloat \let\page_mul_flush_floats\doflushcolumnfloats} \def\setglobalcolumnfloats {\setfalse\onlylocalcolumnfloats \reseteverypar \let\page_mul_flush_float\relax \let\page_mul_flush_floats\noflushcolumnfloats} \def\noflushcolumnfloats {\bgroup \xdef\localsavednoffloats{\the\savednoffloats}% \global\savednoffloats\globalsavednoffloats \page_otr_command_flush_top_insertions \xdef\globalsavenoffloats{\the\savednoffloats}% \ifnum\globalsavednoffloats=\zerocount \setlocalcolumnfloats \fi \global\savednoffloats\localsavednoffloats \egroup} %D We need to calculate the amount of free space in a columns. When there is not %D enough room, we migrate the float to the next column. These macro's are %D alternatives (and look||alikes) of \type {\doroomfloat}. When a float is to wide, %D for one column, it is moved to the top of the next page. Of course such moved %D floats have to be taken into account when we calculate the available space. It's %D a pitty that such things are no integral part of \TEX. \def\getcolumnstatus#1#2#3% {\dimen0=\ifdim\pagegoal<\maxdimen \pagetotal \else \zeropoint \fi \dimen2=\zeropoint \count255=\zerocount \dimen8=\makeupheight \advance\dimen8 -\d_page_mul_preceding_height \def\dogetcolumnstatus {\advance\count255 \plusone \advance\dimen2 \ht\currenttopcolumnbox \advance\dimen2 \dp\currenttopcolumnbox \dimen4\dimen2 \advance\dimen4 \dimen0 \dimen6=\count255\dimen8 \ifdim\dimen4>\dimen6 \else \let\dogetcolumnstatus\relax \fi}% \dohandleallcolumns{\dogetcolumnstatus}% \ifnum\count255=0 \count255=1 \fi #1=\count255 #2=\dimen4 #3=\dimen6 } \def\getinsertionheight {\ifdim\pagegoal<\maxdimen \bgroup \dimen0=\makeupheight \advance\dimen0 -\pagegoal \xdef\insertionheight{\the\dimen0}% \egroup \else \global\let\insertionheight\zeropoint \fi} \def\docolumnroomfloat {\ifpostponecolumnfloats \global\setfalse\c_page_floats_room \else\ifconditional\c_page_floats_not_permitted \global\setfalse\c_page_floats_room \else \bgroup \getcolumnstatus{\count255}{\dimen0}{\dimen2}% \page_floats_get_info\s!text \setbox\scratchbox\vbox % tricky met objecten ? {\blank[\rootfloatparameter\c!spacebefore] \snaptogrid\vbox{\vskip\floatheight}}% copy? \advance\dimen0\dimexpr\ht\scratchbox+2\openlineheight+.5\lineheight\relax\relax % needed because goal a bit higher \ifdim\dimen0>\dimen2 \global\setfalse\c_page_floats_room \else \global\settrue\c_page_floats_room \fi \ifdim\floatwidth>\hsize \showmessage\m!columns{11}\empty \global\setfalse\c_page_floats_room \fi \egroup \fi\fi} %D Flushing one float is done as soon as possible, i.e. \type {\everypar}. %D This means that (at the moment) sidefloats are not supported (overulled)! \newif\ifflushingcolumnfloats \flushingcolumnfloatstrue \def\doflushcolumnfloat {\ifpostponecolumnfloats\else\ifflushingcolumnfloats\ifconditional\c_page_floats_some_waiting \doflushcolumnfloatindeed \fi\fi\fi} \def\doflushcolumnfloatindeed {\bgroup \forgetall \let\doflushcolumnfloat\relax \getcolumnstatus{\mofcolumns}{\dimen0}{\dimen2}% \ifdim\dimen0>\zeropoint \page_floats_get_info\s!text \ifdim\floatwidth>\hsize % dropped ? \else \setbox2\vbox {\blank[\rootfloatparameter\c!spacebefore] \snaptogrid\vbox{\vskip\floatheight}}% \advance\dimen0 \ht2 \ifdim\dimen0>\dimen2 \ifnum\mofcolumns<\nofcolumns \advance\mofcolumns \plusone \ifdim\ht\currenttopcolumnbox=\zeropoint \page_floats_flush\s!text\plusone \global\setbox\currenttopcolumnbox\vbox {\snaptogrid\vbox{\box\floatbox} \whitespace % nodig ? \blank[\rootfloatparameter\c!spaceafter]}% \dimen4=\htdp\currenttopcolumnbox \global\advance\vsize -\dimen4 \advance\dimen4 -\pagegoal \pagegoal-\dimen4 \showmessage\m!columns{12}a% \else \showmessage\m!columns{12}b% \fi \else \showmessage\m!columns{12}c% \fi \else \ifhmode{\setbox0\lastbox}\fi% waar is die er in geslopen \par \ifdim\prevdepth<\zeropoint \else % anders bovenaan kolom witruimte \nobreak \blank[\rootfloatparameter\c!spacebefore] \nobreak \fi \page_floats_flush\s!text\plusone \page_otr_command_flush_float_box \blank[\rootfloatparameter\c!spaceafter] \fi \fi \fi \egroup} %D This one looks complicated. Upto \type{\nofcolumns} floats are placed, %D taking the width of a float into account. This routine can be improved %D on different ways: %D %D \startitemize[intro,packed] %D \item taking into account some imaginary baseline, just to get the %D captions in line %D \item multipass flushing until as many floats are displaced as possible %D \stopitemize %D %D When handling lots of (small) floats spacing can get worse because of %D lining out the columns. \def\doflushcolumnfloats {\ifpostponecolumnfloats\else \bgroup \forgetall \ifconditional\c_page_floats_some_waiting \dimen8\zeropoint \dimen4\zeropoint \count0\zerocount % count0 can be used local \count2\nofcolumns % count2 can be used local \dohandleallcolumns {\ifnum\count0>\zerocount % the wide one's reserved space \global\setbox\currenttopcolumnbox\vbox {\snaptogrid\vbox {\copy\currenttopcolumnbox \hbox{\vphantom{\vskip\floatheight}}}% known from previous \whitespace % nodig ? \blank[\rootfloatparameter\c!spaceafter]}% \else \page_floats_get_info\s!text \ifdim\floatwidth>\hsize \dimen0\dimexpr\floatwidth+\d_page_mul_distance+.5pt\relax \dimen2\dimexpr\hsize +\d_page_mul_distance+.5pt\relax \divide\dimen0 \dimen2 \count0\dimen0 \advance\count0 \plusone \ifnum\count0>\count2 \count0\zerocount \else \dimen0\dimexpr\count0\hsize+\count0\d_page_mul_distance-\d_page_mul_distance\relax \page_floats_flush\s!text\plusone \ifdim\floatwidth>\makeupwidth % better somewhere else too \global\setbox\floatbox\hbox to \makeupwidth{\hss\box\floatbox\hss}% \fi % otherwise the graphic may disappear \global\setbox\floatbox\hbox to \dimen0 {\processaction[\rootfloatparameter\c!location] % how easy to forget [ \v!left=>\box\floatbox\hss, \v!right=>\hss\box\floatbox, \s!default=>\hss\box\floatbox\hss, \s!unknown=>\hss\box\floatbox\hss]}% \fi \showmessage\m!columns{13}\empty \else \page_floats_flush\s!text\plusone \ifdim\floatwidth>\makeupwidth % better somewhere else too \global\setbox\floatbox\hbox to \makeupwidth{\hss\box\floatbox\hss}% \fi % otherwise the graphic may disappear % \showmessage\m!columns{13}\empty \fi \ifdim\ht\floatbox>\zeropoint\relax \global\setbox\currenttopcolumnbox\vbox {\snaptogrid\vbox {\box\currenttopcolumnbox % was copy \box\floatbox} \whitespace % nodig ? \blank[\rootfloatparameter\c!spaceafter]}% \fi \dimen6\htdp\currenttopcolumnbox \fi \ifdim\dimen4<\ht\currenttopcolumnbox \dimen4\ht\currenttopcolumnbox \fi \advance\dimen8 \dimen6 \advance\count2 \minusone \advance\count0 \minusone }% \page_otr_command_set_vsize \global\advance\vsize -\dimen8 \pagegoal\vsize \else % \page_mul_command_flush_floats % does not snap! \fi \egroup \fi} %D The next macro can be used to flush floats in the current stream. No %D width checking is (yet) done. \def\insertcolumnfloats {\doloop {\ifconditional\c_page_floats_some_waiting \bgroup \forgetall % no check for width \page_floats_get \blank[\rootfloatparameter\c!spacebefore] \snaptogrid\vbox{\copy\floatbox} \blank[\rootfloatparameter\c!spaceafter] \egroup \else \exitloop \fi}} %D This were the multi||column routines. They can and need to be improved %D but at the moment their behaviour is acceptable. %D %D One inprovement can be to normalize the height of floats to $ n \times $ %D \type {\lineheight} with a macro like: %D %D \starttyping %D \normalizevbox{...} %D \stoptyping % border case, should fit on one page % % \startcolumns % 1 \input tufte \par \placefigure{}{\framed[width=\hsize,height=3cm]{1}} % 2 \input tufte \par \placefigure{}{\framed[width=\hsize,height=3cm]{2}} % 3 \input tufte \par \placefigure{}{\framed[width=\hsize,height=3cm]{3}} % \stopcolumns % \def\backgroundfinishcolumnbox % {\doifinsetelse\@@kloffset{\v!none,\v!overlay} % {\let\@@kloffset\!!zeropoint} % {\scratchdimen\@@kloffset % \advance\scratchdimen -\@@klrulethickness % \edef\@@kloffset{\the\scratchdimen}}% % \localframed % [\??kl] % [\c!strut=\v!no, % \c!width=\v!fit, % \c!height=\v!fit, % \c!align=]} \def\backgroundfinishcolumnbox {} % to be reconsidered ... (in any case they need to be unexpandable sinze 2011.12.30) \unexpanded\def\page_columns_align_option_yes {\stretchcolumnstrue \inheritcolumnsfalse}% todo: new key \unexpanded\def\page_columns_align_option_no {\stretchcolumnsfalse\inheritcolumnsfalse}% todo: new key \unexpanded\def\page_columns_align_option_text{\stretchcolumnsfalse\inheritcolumnstrue }% \newtoks\t_page_mul_initialize \unexpanded\def\startcolumns {\dosingleempty\page_mul_start} \def\page_mul_start[#1]% %% \startcolumns {\bgroup \ifinsidecolumns \page_mul_start_nop \else \iffirstargument \setupcolumns[#1]% \fi \nofcolumns\columnsparameter\c!n\relax \ifnum\nofcolumns>\plusone \page_mul_start_yes \else \page_mul_start_nop \fi \fi} \unexpanded\def\page_mul_start_nop {\let\stopcolumns\page_mul_stop_nop} \unexpanded\def\page_mul_stop_nop {\egroup} \unexpanded\def\page_mul_start_yes {\whitespace \begingroup \let\stopcolumns\page_mul_stop_indeed \global\insidecolumnstrue \the\t_page_mul_initialize % \flushnotes \begingroup % \d_page_mul_leftskip\leftskip \d_page_mul_rightskip\rightskip \leftskip\zeropoint \rightskip\zeropoint % \widowpenalty\zerocount % will become option \clubpenalty \zerocount % will become option % \page_floats_column_push_saved % \ifdim\dimexpr\pagetotal+\parskip+\openlineheight\relax<\pagegoal \allowbreak \else \break % sometimes fails \fi \appendtoks \topskip1\topskip % best a switch \to \everybodyfont \the\everybodyfont % ugly here \saveinterlinespace % ugly here % \initializecolumns\nofcolumns % \hangafter\zerocount \hangindent\zeropoint \reseteverypar \ifdim\pagetotal=\zeropoint \else \verticalstrut \vskip-\struttotal \fi \global\savedpagetotal\pagetotal \setupoutputroutine[\s!multicolumn]% \c_page_mul_routine\c_page_mul_routine_intercept \page_otr_trigger_output_routine % no \holdinginserts=1, can make footnote disappear ! \global\d_page_mul_preceding_height\ht\b_page_mul_preceding \c_page_mul_routine\c_page_mul_routine_continue \page_mul_initialize_floats \dohandleallcolumns{\global\setbox\currenttopcolumnbox\emptybox}% \checkbegincolumnfootnotes \page_otr_command_set_hsize \page_otr_command_set_vsize} \setnewconstant\multicolumnendsyncmethod\plusone % 1: old sync 2: new sync (cont-loc/project) / may fail ! ! ! ! \unexpanded\def\page_mul_stop_indeed {\relax \ifnum\multicolumnendsyncmethod=\plustwo \synchronizeoutput \else % don't collapse these \vskip \lineheight \vskip-\lineheight % take footnotes into account \fi \doflushcolumnfloat % added recently %\doflushcolumnfloats % no, since it results in wrong top floats \flushnotes % before start of columns \par \ifbalancecolumns \ifnum\multicolumnendsyncmethod=\plusone \c_page_mul_routine\c_page_mul_routine_continue \goodbreak \fi \c_page_mul_routine\c_page_mul_routine_balance \else \goodbreak \fi % still the multi column routine \page_otr_trigger_output_routine % the prevdepth is important, try e.g. toclist in \prevdepth\zeropoint % columns before some noncolumned text text % \c_page_mul_routine\c_page_mul_routine_regular % \ifvoid\b_page_mul_preceding\else \unvbox\b_page_mul_preceding \fi \global\d_page_mul_preceding_height\zeropoint \endgroup % here \nofcolumns\plusone \page_otr_command_set_vsize \checkendcolumnfootnotes \dosomebreak\allowbreak \page_floats_column_pop_saved % \global\insidecolumnsfalse \endgroup \egroup}% \appendtoks \edef\p_option{\columnsparameter\c!option}% \ifx\p_option\v!background \let\finishcolumnbox\backgroundfinishcolumnbox \fi \d_page_mul_offset\columnsparameter\c!offset\relax \edef\p_command{\columnsparameter\c!command}% \ifx\p_command\empty \else \let\postprocesscolumnline\p_command \fi \edef\p_height{\columnsparameter\c!height}% \ifx\p_height\empty \d_page_mul_forced_height\textheight \heightencolumnsfalse \else \d_page_mul_forced_height\p_height\relax \heightencolumnstrue \fi \edef\p_direction{\columnsparameter\c!direction}% \ifx\p_direction\v!right \setfalse\c_page_mul_reverse \else \settrue\c_page_mul_reverse \fi \edef\p_balance{\columnsparameter\c!balance}% \ifx\p_balance\v!yes \balancecolumnstrue \else \balancecolumnsfalse \fi \installalign\v!yes {\page_columns_align_option_yes }% \installalign\v!no {\page_columns_align_option_no }% \installalign\v!text{\page_columns_align_option_text}% \stretchcolumnsfalse \inheritcolumnstrue \edef\p_align{\columnsparameter\c!align}% \ifx\p_align\empty \else \setupalign[\p_align]% \fi \edef\p_tolerance{\columnsparameter\c!tolerance}% \ifx\p_tolerance\empty \else \setuptolerance[\p_tolerance]% \fi \edef\p_blank{\columnsparameter\c!blank}% \ifx\p_blank\empty \else \setupblank[\p_blank]% \fi \ifdim\s_spac_whitespace_parskip>\zeropoint\relax \setupwhitespace[\p_blank]% \fi \c_page_mul_balance_minimum\columnsparameter\c!ntop\relax \edef\p_page_mul_rule{\columnsparameter\c!rule}% \expandnamespacemacro\??columnseparators\p_page_mul_rule\s!unknown \to \t_page_mul_initialize %D Columns breaks \installcolumnbreakmethod \s!multicolumn \v!preference {\goodbreak} % \installcolumnbreakmethod \s!multicolumn \v!yes % {\vskip\textheight % \penalty-200 % we can mark and intercept this % \vskip-\textheight} \installcolumnbreakmethod \s!multicolumn \v!yes {\vskip .5\pagegoal \penalty-200 % we can mark and intercept this \vskip-.5\pagegoal} %D Next we initialize the lot: \setupcolumns [\c!n=2, \c!ntop=1, \c!command=, \c!direction=\v!right, \c!rule=\v!off, \c!tolerance=\v!tolerant, \c!distance=1.5\bodyfontsize, % influenced by switching \c!height=, \c!balance=\v!yes, \c!align=\v!text, \c!blank={\v!line,\v!fixed}, \c!option=, \c!rulethickness=\linewidth, \c!offset=.5\bodyfontsize] %D New: only at start of columns; may change ! Rather interwoven and therefore %D to be integrated when the multi column modules are merged. \unexpanded\def\setupcolumnspan[#1]% {\getparameters[\??ks][#1]} \presetlocalframed [\??ks] \setupcolumnspan [\c!n=2, \c!offset=\v!overlay, \c!frame=\v!off] \newbox\b_page_columns_span \let\page_mul_postprocess_spanbox\gobbleoneargument \unexpanded\def\startcolumnspan {\dosingleempty\dostartcolumnspan} \unexpanded\def\stopcolumnspan {\egroup} \def\dostartcolumnspan[#1]% {\bgroup \setupcolumnspan[#1]% \forgetall \ifinsidecolumns \advance\hsize \d_page_mul_distance \hsize\@@ksn\hsize \advance\hsize -\d_page_mul_distance \fi \dowithnextboxcs\dofinishcolumnsetspan\vbox\bgroup %\topskipcorrection % becomes an option ! \EveryPar{\begstrut\EveryPar{}}} % also ! \def\dofinishcolumnsetspan {\setbox\b_page_columns_span\flushnextbox \ifinsidecolumns\wd\b_page_columns_span\hsize\fi \page_mul_postprocess_spanbox\b_page_columns_span \scratchdimen\ht\b_page_columns_span \setbox\b_page_columns_span\hbox % depth to be checked, probably option! {\localframed[\??ks][\c!offset=\v!overlay]{\box\b_page_columns_span}}% \ht\b_page_columns_span\scratchdimen \dp\b_page_columns_span\strutdp \wd\b_page_columns_span\hsize \ifinsidecolumns \ifnum\@@ksn>1 \page_otr_command_set_vsize \dohandleallcolumns {\ifnum\currentcolumn>\@@ksn\else \global\setbox\currenttopcolumnbox=\vbox {\ifnum\currentcolumn=1 \snaptogrid\vbox{\copy\b_page_columns_span} \else \snaptogrid\vbox{\vphantom{\copy\b_page_columns_span}} \fi}% \wd\currenttopcolumnbox\hsize \global\advance\vsize -\ht\currenttopcolumnbox \fi} \pagegoal\vsize \else \snaptogrid\vbox{\box\b_page_columns_span} \fi \else \snaptogrid\vbox{\box\b_page_columns_span} \fi \endgraf \ifvmode\prevdepth\strutdp\fi \egroup} %D Undocumented and still under development.\ifdefined\startsimplecolumns \else \unexpanded\def\startsimplecolumns {\dosingleempty\page_mul_simple_start} \def\page_mul_simple_start[#1]% {\bgroup \setsimplecolumnshsize[#1]% \nopenalties \setbox\scratchbox\vbox\bgroup \forgetall} % \blank[\v!disable] \unexpanded\def\stopsimplecolumns {\removebottomthings \egroup \rigidcolumnbalance\scratchbox \egroup} \unexpanded\def\setsimplecolumnshsize[#1]% {\getdummyparameters [\c!width=\hsize, \c!distance=1.5\bodyfontsize, \c!n=2, \c!lines=0, #1]% \edef\rigidcolumnlines {\directdummyparameter\c!lines}% \setrigidcolumnhsize {\directdummyparameter\c!width}% {\directdummyparameter\c!distance}% {\directdummyparameter\c!n}} \let\page_mul_command_package_contents\page_one_command_package_contents \let\page_mul_command_flush_float_box \page_one_command_flush_float_box \defineoutputroutine [\s!multicolumn] [\s!page_otr_command_routine =\page_mul_command_routine, \s!page_otr_command_package_contents =\page_mul_command_package_contents, \s!page_otr_command_set_vsize =\page_mul_command_set_vsize, \s!page_otr_command_set_hsize =\page_mul_command_set_hsize, \s!page_otr_command_next_page =\page_mul_command_next_page, \s!page_otr_command_next_page_and_inserts =\page_mul_command_next_page_and_inserts, % \s!page_otr_command_synchronize_hsize =\page_mul_command_synchronize_hsize, % \s!page_otr_command_set_top_insertions =\page_mul_command_set_top_insertions, % \s!page_otr_command_set_bottom_insertions =\page_mul_command_set_bottom_insertions, \s!page_otr_command_flush_top_insertions =\page_mul_command_flush_top_insertions, % \s!page_otr_command_flush_bottom_insertions=\page_mul_command_flush_bottom_insertions, % \s!page_otr_command_set_float_hsize =\page_mul_command_set_float_hsize, \s!page_otr_command_check_if_float_fits =\page_mul_command_check_if_float_fits, \s!page_otr_command_flush_float_box =\page_mul_command_flush_float_box, \s!page_otr_command_synchronize_side_floats=\page_mul_command_synchronize_side_floats, \s!page_otr_command_side_float_output =\page_mul_command_side_float_output, \s!page_otr_command_flush_floats =\page_mul_command_flush_floats, \s!page_otr_command_flush_side_floats =\page_mul_command_flush_side_floats, \s!page_otr_command_flush_saved_floats =\page_mul_command_flush_saved_floats % \s!page_otr_command_flush_margin_blocks =\page_mul_command_flush_margin_blocks, % not used ] \protect \endinput ������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/m-units.mkiv��������������������������������0000644�0001750�0001750�00000064157�11754241457�024204� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=m-units, %D version=1997.03.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=Scientific Units, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Best use the built in unit handle! %D Scientific units can be typeset in math mode pretty well, %D but occasionally one has to take care of spacing. %D Furthermore, entering these units is not that natural as %D wanted. Therefore this module presents a more natural way of %D doing things, like: %D %D \starttyping %D 1.23 \Cubic \Meter \Per \Second %D \stoptyping %D %D This example shows that we use the order in which we say %D things, instead of typeset things. There is a separate %D manual for this module. %D Message number~1 deals with overruling the \type {\Degrees} %D macro defined in the core modules. Let's say that this is %D an upward compatibility issue. \startmessages dutch library: units title: eenheden 1: gebruik \string\Degrees\space\string\Celsius\space in plaats van \string\Celsius ! \stopmessages \startmessages english library: units title: units 1: use \string\Degrees\space\string\Celsius\space instead of \string\Celsius ! \stopmessages \startmessages german library: units title: Einheiten 1: Verwende \string\Degrees\space\string\Celsius\space statt \string\Celsius ! \stopmessages \startmessages italian library: units title: unita 1: usare \string\Degrees\space\string\Celsius\space invece di \string\Celsius ! \stopmessages \startmessages norwegian library: units title: enheter 1: bruk \string\Degrees\space\string\Celsius\space istedenfor \string\Celsius ! \stopmessages \startmessages romanian library: units title: unitati 1: folositi \string\Degrees\space\string\Celsius\space in locul \string\Celsius ! \stopmessages \startmessages french library: units title: unitas 1: utilisez \string\Degrees\space\string\Celsius\space A la place de \string\Celsius ! \stopmessages \registerctxluafile{x-mathml}{} \unprotect \writestatus{\m!units}{The units module is obsolete because functionality is built into the core.} \let\unit\undefined \definesynonyms [\v!unit] [\v!units] [\unitmeaning] \setupsynonyms [\v!unit] [\c!synonymcommand=\dimension] \startmodule[units] %D This runtime loadable module implements a way of defining %D units. The core macro is \type {\dimension}, a rather clever %D one that is able to cooperate with some other dimension %D related macros. As said, this module enables user to enter: %D %D \starttyping %D some 10 \Square \Meter \Per \Second or more %D \stoptyping %D %D The units itself are implemented as synonyms. %D %D \starttyping %D \definesynonyms [unit] [units] [\unitmeaning] %D \setupsynonyms [unit] [textstyle=\dimension] %D \stoptyping %D %D This definition means that we can ask for the meaning of a %D unit using \type {\unitmeaning} and get a list of used %D units by saying \type {\placelistofunits} %D %D We have to use the command \type {\unitmeaning} instead %D of \type {\meaning}, simply because the latter is a \TEX\ %D primitive we don't want to loose. We use the label text %D mechanism for translations. %D \macros %D {dimension} %D %D The core of this module is the low level macro \type %D {\dimension}. Before presenting this macro, it's best to %D look at some applications, because it's supposed to show %D some intelligence that can beter be understood from the %D context. %D %D The next useless examples show some of the cases we want %D to handle in a proper way. %D %D \starttyping %D ... 10 \Square \Meter \Per \Volt \ %D ... 10 \Square \Meter \Volt \ %D ... 10 \Meter \Volt \ %D ... 10 \Milli \Square \Meter \Per \Volt \ %D ... 10 \Square \Milli \Meter \Per \Volt \ %D ... 10 \Meter \Times \Meter \ %D ... 10 \Square \Meter \Times \Meter \ %D ... 10 \Square \Milli \Meter \Times \Meter \ %D \stoptyping %D \macros %D {mathematicstypeface, dimensiontypeface, %D dimensionhalfspace, dimensionbackspace} %D %D There are some low level constants, that can be changed %D when needed. Some day I will write a decent setup command. \def\mathematicstypeface{\rm} \def\dimensiontypeface {\tf} \def\dimensionhalfspace {\ifmmode\,\else\hskip+.1em\relax\fi} \def\dimensionbackspace {\ifmmode\!\else\hskip-.1em\relax\fi} %D \macros %D {smashdimensionpower} %D %D Sometimes the baseline distance is not enough to provide %D for superscripts, so we smash their height by default. \newif\ifsmashdimensionpower \smashdimensionpowertrue %D The dimension mechanism uses a lot of signals to keep %D track if the current state. \newsignal\dimensionsignal \newsignal\dimensionpowersignal \newsignal\dimensionmidfixsignal \newsignal\dimensionaddfixsignal \let\thedimensionprefix = \empty \let\thedimensionpower = \empty %D \macros %D {spaceddimensions,textdimensions} %D %D The actual definition of \type {\dimension} overruled the %D one in the core modules. The boolean can be used to %D force spacing between units. The rather ugly test prevents %D problems with nested dimensions. \newif\ifspaceddimensions \spaceddimensionsfalse % user switch \newif\iftextdimensions \textdimensionsfalse % user switch %D You can see the consequence of forcing text dimensions %D when you compare the following code: %D %D \starttyping %D {\rm test \Square \Meter \Per \Second\ ziezo\Degrees} \par %D {\ss test \Square \Meter \Per \Second\ ziezo} \par %D {\tt test \Square \Meter \Per \Second\ ziezo} %D %D \textdimensionstrue %D %D {\rm test \Square \Meter \Per \Second\ ziezo} \par %D {\ss test \Square \Meter \Per \Second\ ziezo} \par %D {\tt test \Square \Meter \Per \Second\ ziezo} %D \stoptyping \newif\ifnesteddimension \nesteddimensionfalse % local switch \def\dodimensionpower#1% {\iftextdimensions\expandafter\high\else\expandafter\normalsuperscript\fi{#1}} \def\ustartmathmode {\iftextdimensions\else\expandafter\startmathmode \fi} \def\ustopmathmode {\iftextdimensions\else\expandafter\stopmathmode \fi} \def\umathematicstypeface{\iftextdimensions\else\expandafter\mathematicstypeface\fi} %D In forced text mode, we ignore spacing in monospaced fonts. \def\udimensionhalfspace {\dodimensionspace\dimensionhalfspace} \def\udimensionbackspace {\dodimensionspace\dimensionbackspace} \def\dodimensionspace {\iftextdimensions \begingroup \setbox0\hbox{i}% \setbox2\hbox{m}% \ifdim\wd0=\wd2 \endgroup \@EAEAEA\gobbleoneargument \else \endgroup \fi \fi} \unexpanded\def\dimension#1% {\begingroup \global\let\savedthedimensionprefix\thedimensionprefix \global\let\savedthedimensionpower\thedimensionpower \unexpanded\def\dimension##1{\global\nesteddimensiontrue}% \let\dimensionprefix\dimension \let\dimensionmidfix\dimension \let\dimensionsuffix\dimension \let\dimensionpower \dimension \global\nesteddimensionfalse \setbox\scratchbox\hbox{\ustartmathmode#1\ustopmathmode}% pre-roll \global\let\thedimensionprefix\savedthedimensionprefix \global\let\thedimensionpower \savedthedimensionpower \endgroup \ifnesteddimension#1\else\dodimension{#1}\fi} \def\dodimension#1% {\dontbreakdimension \ifdim\scratchdimen=\zeropoint\relax \ifmmode \udimensionhalfspace \udimensionhalfspace \fi \ustartmathmode\dimensiontypeface \else \ustartmathmode\dimensiontypeface \ifspaceddimensions \ifdim\scratchdimen=\dimensionsignal\relax \udimensionhalfspace \else\ifdim\scratchdimen=\dimensionpowersignal\relax \udimensionhalfspace \fi \fi \fi \fi \umathematicstypeface\thedimensionprefix#1% \ifx\thedimensionpower\empty \else\ifsmashdimensionpower \setbox\scratchbox=\hbox {\iftextdimensions \tx\thedimensionpower \else $\scriptstyle\thedimensionpower$% \fi}% \ht\scratchbox=\zeropoint \dodimensionpower{\box\scratchbox}% \else \dodimensionpower{\thedimensionpower}% \fi\fi \ustopmathmode % otherwise nobreak before space in 2 \Milli \Meter\ blabla \doifnotmode{atpragma}{\nobreak}% this was always \nobreak % only test this at pragma \ifx\thedimensionpower\empty \hskip\dimensionsignal \else \hskip\dimensionpowersignal \fi \global\let\thedimensionprefix\empty \global\let\thedimensionpower\empty} %D \macros %D {dontbreakdimension, %D dimensionprefix, dimensionaddfix, %D dimensionnopfix, dimensionmidfix, %D dimensionpower} %D %D Here are some auxilliary macros. \def\dontbreakdimension {\scratchdimen\lastskip \unskip \nobreak \hskip\scratchdimen \nobreak} \def\dimensionprefix#1% {\gdef\thedimensionprefix{#1}} \def\dimensionaddfix#1% {\unskip %\mathematics{\umathematicstypeface#1}% \ustartmathmode\umathematicstypeface#1\ustopmathmode \nobreak \hskip\dimensionaddfixsignal} \def\dimensionnopfix#1% {\dontbreakdimension \ifdim\scratchdimen=\dimensionpowersignal\relax \ustartmathmode \else \ustartmathmode \udimensionhalfspace \nobreak \fi \umathematicstypeface#1% \ustopmathmode \nobreak \hskip\dimensionsignal} \def\dimensionmidfix#1% {\dontbreakdimension \ifdim\scratchdimen=\dimensionpowersignal\relax \ustartmathmode \udimensionbackspace \nobreak \else \ustartmathmode \fi \umathematicstypeface#1% \ustopmathmode \nobreak \hskip\dimensionmidfixsignal} \def\dimensionpower#1% {\gdef\thedimensionpower{#1}} %D \macros %D {SIunits, noSI, doSI} %D %D Some low level unit switching macros: \newif\ifSIunits \SIunitstrue \def\noSI#1{\begingroup\SIunitsfalse#1\endgroup} \def\doSI#1{\begingroup\SIunitstrue #1\endgroup} %D \macros %D {Degrees} %D %D We can fake the degrees symbol with: \def\Degrees{\dimensionaddfix{\mathematics{\normalsuperscript\circ}}} %D \macros %D {Unit, NoUnit} %D %D When a dimension has no leading number, we can use \type %D {\Unit}, and when no unit is appended, \type {\NoUnit} is %D to be used, just to prevent the prefix migrating to the %D next occasion. \def\Unit {\hskip\dimensionsignal} \def\NoUnit {\dimension{}} %D The mechanism described at the top of this module, depends %D on several dimensional components, like prefixes: \def\Atto {\dimensionprefix{a}} \def\Femto {\dimensionprefix{f}} \def\Pico {\dimensionprefix{p}} \def\Nano {\dimensionprefix{n}} \def\Micro {\dimensionprefix{\iftextdimensions u\else\mu\fi}} \def\Milli {\dimensionprefix{m}} \def\Centi {\dimensionprefix{c}} \def\Deci {\dimensionprefix{d}} % 10^{01} \def\Hecto {\dimensionprefix{h}} % 10^{02} \def\Kilo {\dimensionprefix{k}} % 10^{03} \def\Mega {\dimensionprefix{M}} % 10^{06} \def\Giga {\dimensionprefix{G}} % 10^{09} \def\Tera {\dimensionprefix{T}} % 10^{12} \def\Peta {\dimensionprefix{P}} % 10^{15} \def\Exa {\dimensionprefix{E}} % 10^{18} %def\Terra {\dimensionprefix{T}} % for old times sake \def\Kibi {\dimensionprefix{ki}} % 2^{10} \def\Mebi {\dimensionprefix{Mi}} % 2^{20} \def\Gibi {\dimensionprefix{Gi}} % 2^{30} \def\Tebi {\dimensionprefix{Ti}} % 2^{40} \def\Pebi {\dimensionprefix{Pi}} % 2^{50} %D and binary prefixes: \def\Kibi {\dimensionprefix{Ki}} \def\Mebi {\dimensionprefix{Mi}} \def\Gibi {\dimensionprefix{Gi}} \def\Tebi {\dimensionprefix{Ti}} \def\Pebi {\dimensionprefix{Pi}} \def\Exbi {\dimensionprefix{Ei}} \def\Zebi {\dimensionprefix{Zi}} \def\Yobi {\dimensionprefix{Yi}} %D and operators: \def\Times {\dimensionnopfix{\iftextdimensions.\else\cdot\fi}} \def\Solidus {\dimensionmidfix{/}} \def\Per {\dimensionmidfix{/}} \def\OutOf {\dimensionnopfix{:}} %D and suffixes: \def\Linear {\dimensionpower{1}} \def\Square {\dimensionpower{2}} \def\Cubic {\dimensionpower{3}} \def\Inverse {\dimensionpower{-1}} \def\ILinear {\dimensionpower{-1}} \def\ISquare {\dimensionpower{-2}} \def\ICubic {\dimensionpower{-3}} %D Apart from these components, the units themselves are %D defined using the synonym mechanism. First we define some %D length and volume related units. \getvalue{\v!unit} [Meter] {m} {meter} \getvalue{\v!unit} [pMeter] {\Pico \Meter} {picometer} \getvalue{\v!unit} [nMeter] {\Nano \Meter} {nanometer} \getvalue{\v!unit} [uMeter] {\Micro \Meter} {micrometer} \getvalue{\v!unit} [mMeter] {\Milli \Meter} {millimeter} \getvalue{\v!unit} [cMeter] {\Centi \Meter} {centimeter} \getvalue{\v!unit} [dMeter] {\Deci \Meter} {decimeter} \getvalue{\v!unit} [hMeter] {\Hecto \Meter} {hectometer} \getvalue{\v!unit} [kMeter] {\Kilo \Meter} {kilometer} %D After some discussion on the \CONTEXT\ mailing list in %D february 2002 it was decided to go from L to l for liters %D (Karel Wesselings alternative: \mathematics{\ell}). \getvalue{\v!unit} [Liter] {l} {liter} \getvalue{\v!unit} [mLiter] {\Milli \Liter} {milliliter} \getvalue{\v!unit} [cLiter] {\Centi \Liter} {centiliter} \getvalue{\v!unit} [dLiter] {\Deci \Liter} {deciliter} %D Next we define time related units (\type {\ifSI} still dutch only). \getvalue{\v!unit} [Sec] {s} {\labeltext{u:sec}} \getvalue{\v!unit} [fSec] {\Femto \Sec} {\labeltext{u:fsec}} \getvalue{\v!unit} [pSec] {\Pico \Sec} {\labeltext{u:psec}} \getvalue{\v!unit} [nSec] {\Nano \Sec} {\labeltext{u:nsec}} \getvalue{\v!unit} [uSec] {\Micro \Sec} {\labeltext{u:usec}} \getvalue{\v!unit} [mSec] {\Milli \Sec} {\labeltext{u:msec}} \getvalue{\v!unit} [Year] {\ifSIunits a \else j\fi} {\labeltext{u:year}} \getvalue{\v!unit} [Month] {m} {\labeltext{u:month}} \getvalue{\v!unit} [Week] {w} {\labeltext{u:week}} \getvalue{\v!unit} [Day] {d} {\labeltext{u:day}} \getvalue{\v!unit} [Hour] {\ifSIunits h \else u\fi} {\labeltext{u:hour}} \getvalue{\v!unit} [Min] {min} {\labeltext{u:min}} \setuplabeltext [\s!nl] [u:sec=seconde, u:psec=picoseconde, u:fsec=femtoseconde, u:nsec=nanoseconde, u:usec=microseconde, u:msec=milliseconde, u:year=jaar, u:month=maand, u:week=week, u:day=dag, u:hour=uur, u:min=minuten] \setuplabeltext [\s!en] [u:sec=second, u:fsec=femtosecond, u:psec=picosecond, u:nsec=nanosecond, u:usec=microsecond, u:msec=millisecond, u:year=year, u:month=month, u:week=week, u:day=day, u:hour=hour, u:min=minutes] \setuplabeltext [\s!de] [u:sec=Sekunde, u:fsec=Femtosekunde, u:psec=Picosekunde, u:nsec=Nanosekunde, u:usec=Microsekunde, u:msec=Millisekunde, u:year=Jahr, u:month=Monat, u:week=Woche, u:day=Tag, u:hour=Stunde, u:min=Minuten] \setuplabeltext [\s!hr] [u:sec=sekunda, u:fsec=femtosekunda, u:psec=pikosekunda, u:nsec=nanosekunda, u:usec=mikrosekunda, u:msec=milisekunda, u:year=godina, u:month=mjesec, u:week=tjedan, u:day=dan, u:hour=sat, u:min=minuta] \setuplabeltext [\s!it] [u:sec=secondo, u:fsec=femtosecondo, u:psec=picosecondo, u:nsec=nanosecondo, u:usec=microsecondo, u:msec=millisecondo, u:year=anno, u:month=mese, u:week=settimana, u:day=giorno, u:hour=ora, u:min=minuti] %D Then we define some angles. \getvalue{\v!unit} [Rad] {rad} {\labeltext{u:rad}} \getvalue{\v!unit} [Deg] {{\mathematics{\normalsuperscript\circ}}} {\labeltext{u:deg}} \setuplabeltext [\s!nl] [u:rad=hoek radialen, u:deg=hoek graden] \setuplabeltext [\s!en] [u:rad=angle radians, u:deg=angle degrees] \setuplabeltext [\s!de] [u:rad=Bogenma\SS, u:deg=Gradma\SS] \setuplabeltext [\s!hr] [u:rad=radijani, u:deg=kutni stupnjevi] \setuplabeltext [\s!it] [u:rad=radianti, u:deg=angoli sessagesimali] %D Rotation and frequency related units are defined by: \getvalue{\v!unit} [Hertz] {Hz} {Hertz} \getvalue{\v!unit} [kHertz] {\Kilo \Hertz} {kilo Hertz} \getvalue{\v!unit} [MHertz] {\Mega \Hertz} {mega Hertz} \getvalue{\v!unit} [GHertz] {\Giga \Hertz} {giga Hertz} \getvalue{\v!unit} [THertz] {\Tera \Hertz} {tera Hertz} \getvalue{\v!unit} [mHertz] {\Milli \Hertz} {milli Hertz} \getvalue{\v!unit} [RevPerSec] {RPS} {\labeltext{u:rps}} \getvalue{\v!unit} [RevPerMin] {RPM} {\labeltext{u:rpm}} \setuplabeltext [\s!nl] [u:rps=omwentelingen per seconde, u:rpm=omwentelingen per minuut] \setuplabeltext [\s!en] [u:rps=revolutions per second, u:rpm=revolutions per minute] \setuplabeltext [\s!de] [u:rps=Umdrehungen pro Sekunde, u:rpm=Umdrehungen pro Minute] \setuplabeltext [\s!hr] [u:rps=okretaji po sekundi, u:rpm=okretaji po minuti] \setuplabeltext [\s!it] [u:rps=giri al secondo, u:rpm=giri al minuto] %D Mass and force: \getvalue{\v!unit} [Gram] {g} {gram} \getvalue{\v!unit} [uGram] {\Micro \Gram} {microgram} \getvalue{\v!unit} [mGram] {\Milli \Gram} {milligram} \getvalue{\v!unit} [kGram] {\Kilo \Gram} {kilogram} \getvalue{\v!unit} [Atom] {u} {\labeltext{u:u}} \getvalue{\v!unit} [Newton] {N} {Newton} \getvalue{\v!unit} [kNewton] {\Kilo \Newton} {kilo Newton} \getvalue{\v!unit} [Pascal] {Pa} {Pascal} \getvalue{\v!unit} [mPascal] {\Milli \Pascal} {milli Pascal} \getvalue{\v!unit} [kPascal] {\Kilo \Pascal} {kilo Pascal} \setuplabeltext [\s!nl] [u:u=atomaire massa eenheid] \setuplabeltext [\s!en] [u:u=atom mass unit] \setuplabeltext [\s!de] [u:u=Atomare Masseneinheit] \setuplabeltext [\s!hr] [u:u=unificirana atomska jedinica mase] \setuplabeltext [\s!it] [u:u=unit\`a di massa atomica] %D Energy units comes in two alternatives: \getvalue{\v!unit} [Joule] {J} {Joule} \getvalue{\v!unit} [mJoule] {\Milli \Joule} {milli Joule} \getvalue{\v!unit} [kJoule] {\Kilo \Joule} {kilo Joule} \getvalue{\v!unit} [MJoule] {\Mega \Joule} {mega Joule} \getvalue{\v!unit} [GJoule] {\Giga \Joule} {giga Joule} \getvalue{\v!unit} [Watt] {W} {Watt} \getvalue{\v!unit} [mWatt] {\Milli \Watt} {milli Watt} \getvalue{\v!unit} [kWatt] {\Kilo \Watt} {kilo Watt} \getvalue{\v!unit} [MWatt] {\Mega \Watt} {mega Watt} \getvalue{\v!unit} [GWatt] {\Giga \Watt} {giga Watt} \getvalue{\v!unit} [TWatt] {\Tera \Watt} {tera Watt} %D Although Celsius is no longer permitted, we define it by %D saying: \getvalue{\v!unit} [Celsius] {C} {Celsius} \getvalue{\v!unit} [Kelvin] {K} {Kelvin} \getvalue{\v!unit} [Fahrenheit] {F} {Fahrenheit} %D Some chemic related units are: \getvalue{\v!unit} [Mol] {mol} {mol} \getvalue{\v!unit} [mMol] {\Milli \Mol} {millimol} \getvalue{\v!unit} [kMol] {\Kilo \Mol} {kilomol} \getvalue{\v!unit} [Molair] {M} {molair (\Mol \Per \Liter)} \getvalue{\v!unit} [Equivalent] {eq} {equivalent} \getvalue{\v!unit} [mEquivalent] {\Milli \Equivalent} {milli equivalent} %D There are quite a lot units related to electricity and %D magnetism: \getvalue{\v!unit} [Farad] {F} {Farad} \getvalue{\v!unit} [pFarad] {\Pico \Farad} {pico Farad} \getvalue{\v!unit} [nFarad] {\Nano \Farad} {nano Farad} \getvalue{\v!unit} [uFarad] {\Micro \Farad} {micro Farad} \getvalue{\v!unit} [mFarad] {\Milli \Farad} {milli Farad} \getvalue{\v!unit} [Ohm] {\Omega} {Ohm} \getvalue{\v!unit} [kOhm] {\Kilo \Ohm} {kilo Ohm} \getvalue{\v!unit} [Siemens] {S} {Siemens} \getvalue{\v!unit} [Ampere] {A} {Amp\`ere} \getvalue{\v!unit} [mAmpere] {\Milli \Ampere} {milli Amp\`ere} \getvalue{\v!unit} [Coulomb] {C} {Coulomb} \getvalue{\v!unit} [Volt] {V} {Volt} \getvalue{\v!unit} [mVolt] {\Milli \Volt} {milli Volt} \getvalue{\v!unit} [kVolt] {\Kilo \Volt} {kilo Volt} \getvalue{\v!unit} [eVolt] {eV} {electronvolt} \getvalue{\v!unit} [keVolt] {\Kilo \eVolt} {kilo electronvolt} \getvalue{\v!unit} [MeVolt] {\Mega \eVolt} {mega electronvolt} \getvalue{\v!unit} [Tesla] {T} {Tesla} \getvalue{\v!unit} [VoltAC] {V\normalsubscript{\xbox{ac}}} {\labeltext{u:vac}} \getvalue{\v!unit} [VoltDC] {V\normalsubscript{\xbox{dc}}} {\labeltext{u:vdc}} \setuplabeltext [\s!nl] [u:vac=wisselspanning, u:vdc=gelijkspanning] \setuplabeltext [\s!en] [u:vac=alternating current, u:vdc=direct current] \setuplabeltext [\s!de] [u:vac=Wechselspannung, u:vdc=Gleichspannung] \setuplabeltext [\s!hr] [u:vac=izmjeni\ccaron ni napon, u:vdc=istosmjerni napon] \setuplabeltext [\s!it] [u:vac=corrente alternata, u:vdc=corrente continua] %D Network bandwidth is specified in Bits: \getvalue{\v!unit} [Bit] {bit} {\labeltext{u:bit}} \getvalue{\v!unit} [Baud] {Bd} {Baud (Bit/s)} %D Computer memory size is specified in Bytes: \getvalue{\v!unit} [Byte] {B} {\labeltext{u:byte}} \getvalue{\v!unit} [kByte] {\Kilo \Byte} {kilo Byte} \getvalue{\v!unit} [MByte] {\Mega \Byte} {mega Byte} \getvalue{\v!unit} [GByte] {\Giga \Byte} {giga Byte} \getvalue{\v!unit} [TByte] {\Tera \Byte} {tera Byte} \setuplabeltext [\s!en] [u:bit=Bit, u:byte=Byte] \setuplabeltext [\s!hr] [u:bit=bit, u:byte=bajt] %D Telecommunication call density is specified in Erlangs: \getvalue{\v!unit} [Erlang] {E} {Erlang} %D Some radiation related units: \getvalue{\v!unit} [Bequerel] {Bq} {Bequerel} \getvalue{\v!unit} [MBequerel] {\Mega \Bequerel} {Bequerel} \getvalue{\v!unit} [Sievert] {Sv} {Sievert} \getvalue{\v!unit} [mSievert] {\Milli \Sievert} {milli Sievert} %D Light: \getvalue{\v!unit} [Candela] {cd} {Candela} %D and some sound ones: \getvalue{\v!unit} [Bell] {B} {Bell} \getvalue{\v!unit} [dBell] {\Deci \Bell} {decibel} %D We also define some non||regular, sometimes even forbidden, %D units: \getvalue{\v!unit} [At] {at} {\labeltext{u:at}} \getvalue{\v!unit} [Atm] {atm} {\labeltext{u:atm}} \getvalue{\v!unit} [Bar] {bar} {bar (100 \Kilo \Pascal)} \getvalue{\v!unit} [EVolt] {eV} {electronvolt} \getvalue{\v!unit} [Foot] {ft} {\labeltext{u:ft}} \getvalue{\v!unit} [Inch] {inch} {\labeltext{u:inch}} \getvalue{\v!unit} [Cal] {cal} {\labeltext{u:cal}} \getvalue{\v!unit} [Force] {f} {\labeltext{u:f}} \getvalue{\v!unit} [kCal] {\Kilo \Cal} {\labeltext{u:kcal}} \getvalue{\v!unit} [Lux] {lux} {lux} \def\xPercent {\dimensionaddfix{\percent }} \def\xPromille{\dimensionaddfix{\promille}} \getvalue{\v!unit} [Percent] {\xPercent } {percent} \getvalue{\v!unit} [Permille] {\xPromille} {promille} \getvalue{\v!unit} [Promille] {\xPromille} {promille} %D Some more, thanks to Tobias: \getvalue{\v!unit} [Gray] {Gr} {Gray} \getvalue{\v!unit} [Weber] {Wb} {Weber} \getvalue{\v!unit} [Henry] {H} {Henry} \getvalue{\v!unit} [Sterant] {sr} {Sterant} \getvalue{\v!unit} [Angstrom] {\hbox{\Aring}} {\Aring ngstr\"om} \getvalue{\v!unit} [Gauss] {G} {Gauss} \setuplabeltext [\s!nl] [u:at=technische atmosfeer, u:atm=fysische atmosfeer, u:ft=voet, u:cal=calorie, u:f=kracht (force), u:kcal=kilocalorie] \setuplabeltext [\s!en] [u:at=technical atmospheric pressure, u:atm=physical atmospheric pressure, u:ft=foot, u:inch=inch, u:cal=calory, u:f=force, u:kcal=kilocalory] \setuplabeltext [\s!de] [u:at=Technischer atmosph\"arischer Druck, u:atm=physkalischer atmosph\"arischer Druck, u:ft=Fu\SS, u:cal=Kalorien, u:f=Force, u:kcal=Kilokalorien] \setuplabeltext [\s!hr] [u:at=tehni\ccaron ka atmosfera, u:atm=standardna atmosfera, u:ft=stopa, u:inch=in\ccaron a, u:cal=kalorija, u:f=Force, u:kcal=Kilokalorien] \setuplabeltext [\s!it] [u:at=pressione atmosferica tecnica, u:atm=pressione atmosfera fisica, u:ft=piede, u:cal=caloria, u:f=forza, u:kcal=chilocaloria] %D Here are some old ones, still there for compatibility %D reasons. These will probably be obsolete in a few years. \def\MeterTwee {\Square \Meter} \def\mMeterTwee {\Square \Milli \Meter} \def\cMeterTwee {\Square \Centi \Meter} \def\dMeterTwee {\Square \Deci \Meter} \def\kMeterTwee {\Square \Kilo \Meter} \def\MeterDrie {\Cubic \Meter} \def\mMeterDrie {\Cubic \Milli \Meter} \def\cMeterDrie {\Kubic \Centi \Meter} \def\dMeterDrie {\Cubic \Deci \Meter} \def\kMeterDrie {\Cubic \Kilo \Meter} \def\LiterTwee {\Square \Liter} \def\SecTwee {\Square \Sec} \def\SecMinEen {\Inverse \Sec} %D To make ourselves happy, we define some dutch specific %D units: \startinterface dutch \getvalue{\v!unit} [PaardenKracht] {pk} {paardenkracht} \getvalue{\v!unit} [Duits] {D} {duits} \getvalue{\v!unit} [Kwik] {Hg} {kwikkolom} \getvalue{\v!unit} [Hectare] {ha} {hectare} \getvalue{\v!unit} [kGramForce] {\Kilo \Gram \Force} {kilogramforce} \getvalue{\v!unit} [kWattUur] {\Kilo \Watt \Uur} {kilowattuur} \getvalue{\v!unit} [MeterKwik] {\Meter \Kwik} {meter kwikkolom} \getvalue{\v!unit} [Waterkolom] {WK} {waterkolom} \getvalue{\v!unit} [MeterWater] {\Meter \Waterkolom} {meter waterkolom} \getvalue{\v!unit} [DrogeStof] {ds} {droge stof} \getvalue{\v!unit} [Normaal] {N} {normaal} \getvalue{\v!unit} [Ton] {t} {ton} \getvalue{\v!unit} [kTon] {\Kilo \Ton} {kiloton} \let \OmwPerSec \RevPerSec \let \OmwPerMin \RevPerMin \let \Graden \Deg \let \PaardeKracht \PaardenKracht \let \Atoom \Atom \let \Heure \Hour \let \Jaar \Year \let \Maand \Month \let \Dag \Day \let \Uur \Hour \stopinterface %D Finally we define some equivalents. By using \type {\let} %D we can be sure that they don't end up double in the lists of %D units. \let \Second \Sec \let \Kubic \Cubic \let \IKubic \ICubic %D Option: % \def\Micro{\dimensionprefix{\iftextdimensions\mathematics\mu \else\mu \fi}} % \def\Times{\dimensionnopfix{\iftextdimensions\mathematics\cdot\else\cdot\fi}} \stopmodule \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/sort-def.mkii�������������������������������0000644�0001750�0001750�00000043504�11754241457�024307� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=sort-def, %D version=2005.08.08, %D title=\CONTEXT\ Sort Macros, %D subtitle=Defaults, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 replaces existing sort key handling and is meant to be %D used with the new texutil functionality. Here we define the default %D mappings \exportsortexpansion{aeligature} {ae} \exportsortexpansion{AEligature} {AE} \exportsortexpansion{ijligature} {ij} \exportsortexpansion{IJligature} {IJ} \exportsortexpansion{oeligature} {oe} \exportsortexpansion{OEligature} {OE} \exportsortexpansion{ssharp} {ss} \exportsortexpansion{Ssharp} {SS} \exportsortexpansion{thorn} {} \exportsortexpansion{Thorn} {} \exportsortexpansion{eth} {} \exportsortexpansion{Eth} {} \exportsortexpansion{dj} {dstroke} \exportsortexpansion{Dj} {Dstroke} \exportsortexpansion{Acircumflex} {} \exportsortexpansion{acircumflex} {} \exportsortexpansion{Ccircumflex} {} \exportsortexpansion{ccircumflex} {} \exportsortexpansion{Ecircumflex} {} \exportsortexpansion{ecircumflex} {} \exportsortexpansion{Gcircumflex} {} \exportsortexpansion{gcircumflex} {} \exportsortexpansion{Hcircumflex} {} \exportsortexpansion{hcircumflex} {} \exportsortexpansion{Icircumflex} {} \exportsortexpansion{icircumflex} {} \exportsortexpansion{Jcircumflex} {} \exportsortexpansion{jcircumflex} {} \exportsortexpansion{Ocircumflex} {} \exportsortexpansion{ocircumflex} {} \exportsortexpansion{Scircumflex} {} \exportsortexpansion{scircumflex} {} \exportsortexpansion{Ucircumflex} {} \exportsortexpansion{ucircumflex} {} \exportsortexpansion{Wcircumflex} {} \exportsortexpansion{wcircumflex} {} \exportsortexpansion{Ycircumflex} {} \exportsortexpansion{ycircumflex} {} \exportsortexpansion{Agrave} {} \exportsortexpansion{agrave} {} \exportsortexpansion{Egrave} {} \exportsortexpansion{egrave} {} \exportsortexpansion{Igrave} {} \exportsortexpansion{igrave} {} \exportsortexpansion{Ograve} {} \exportsortexpansion{ograve} {} \exportsortexpansion{Ugrave} {} \exportsortexpansion{ugrave} {} \exportsortexpansion{Ygrave} {} \exportsortexpansion{ygrave} {} \exportsortexpansion{Atilde} {} \exportsortexpansion{atilde} {} \exportsortexpansion{Itilde} {} \exportsortexpansion{itilde} {} \exportsortexpansion{Ntilde} {} \exportsortexpansion{ntilde} {} \exportsortexpansion{Otilde} {} \exportsortexpansion{otilde} {} \exportsortexpansion{Utilde} {} \exportsortexpansion{utilde} {} \exportsortexpansion{Ytilde} {} \exportsortexpansion{ytilde} {} \exportsortexpansion{Adiaeresis} {} \exportsortexpansion{adiaeresis} {} \exportsortexpansion{Ediaeresis} {} \exportsortexpansion{ediaeresis} {} \exportsortexpansion{Idiaeresis} {} \exportsortexpansion{idiaeresis} {} \exportsortexpansion{Odiaeresis} {} \exportsortexpansion{odiaeresis} {} \exportsortexpansion{Udiaeresis} {} \exportsortexpansion{udiaeresis} {} \exportsortexpansion{Ydiaeresis} {} \exportsortexpansion{ydiaeresis} {} \exportsortexpansion{Aacute} {} \exportsortexpansion{aacute} {} \exportsortexpansion{Cacute} {} \exportsortexpansion{cacute} {} \exportsortexpansion{Eacute} {} \exportsortexpansion{eacute} {} \exportsortexpansion{Iacute} {} \exportsortexpansion{iacute} {} \exportsortexpansion{Lacute} {} \exportsortexpansion{lacute} {} \exportsortexpansion{Nacute} {} \exportsortexpansion{nacute} {} \exportsortexpansion{Oacute} {} \exportsortexpansion{oacute} {} \exportsortexpansion{Racute} {} \exportsortexpansion{racute} {} \exportsortexpansion{Sacute} {} \exportsortexpansion{sacute} {} \exportsortexpansion{Uacute} {} \exportsortexpansion{uacute} {} \exportsortexpansion{Yacute} {} \exportsortexpansion{yacute} {} \exportsortexpansion{Zacute} {} \exportsortexpansion{zacute} {} \exportsortexpansion{dstroke} {} \exportsortexpansion{Dstroke} {} \exportsortexpansion{Hstroke} {} \exportsortexpansion{hstroke} {} \exportsortexpansion{Tstroke} {} \exportsortexpansion{tstroke} {} \exportsortexpansion{Cdotaccent} {} \exportsortexpansion{cdotaccent} {} \exportsortexpansion{Edotaccent} {} \exportsortexpansion{edotaccent} {} \exportsortexpansion{Gdotaccent} {} \exportsortexpansion{gdotaccent} {} \exportsortexpansion{Idotaccent} {} \exportsortexpansion{idotaccent} {} \exportsortexpansion{Zdotaccent} {} \exportsortexpansion{zdotaccent} {} \exportsortexpansion{Amacron} {} \exportsortexpansion{amacron} {} \exportsortexpansion{Emacron} {} \exportsortexpansion{emacron} {} \exportsortexpansion{Imacron} {} \exportsortexpansion{imacron} {} \exportsortexpansion{Omacron} {} \exportsortexpansion{omacron} {} \exportsortexpansion{Umacron} {} \exportsortexpansion{umacron} {} \exportsortexpansion{Ccedilla} {} \exportsortexpansion{ccedilla} {} \exportsortexpansion{Kcedilla} {} \exportsortexpansion{kcedilla} {} \exportsortexpansion{Lcedilla} {} \exportsortexpansion{lcedilla} {} \exportsortexpansion{Ncedilla} {} \exportsortexpansion{ncedilla} {} \exportsortexpansion{Rcedilla} {} \exportsortexpansion{rcedilla} {} \exportsortexpansion{Scedilla} {} \exportsortexpansion{scedilla} {} \exportsortexpansion{Tcedilla} {} \exportsortexpansion{tcedilla} {} \exportsortexpansion{Ohungarumlaut} {} \exportsortexpansion{ohungarumlaut} {} \exportsortexpansion{Uhungarumlaut} {} \exportsortexpansion{uhungarumlaut} {} \exportsortexpansion{Aogonek} {} \exportsortexpansion{aogonek} {} \exportsortexpansion{Eogonek} {} \exportsortexpansion{eogonek} {} \exportsortexpansion{Iogonek} {} \exportsortexpansion{iogonek} {} \exportsortexpansion{Uogonek} {} \exportsortexpansion{uogonek} {} \exportsortexpansion{Aring} {} \exportsortexpansion{aring} {} \exportsortexpansion{Uring} {} \exportsortexpansion{uring} {} \exportsortexpansion{Abreve} {} \exportsortexpansion{abreve} {} \exportsortexpansion{Ebreve} {} \exportsortexpansion{ebreve} {} \exportsortexpansion{Gbreve} {} \exportsortexpansion{gbreve} {} \exportsortexpansion{Ibreve} {} \exportsortexpansion{ibreve} {} \exportsortexpansion{Obreve} {} \exportsortexpansion{obreve} {} \exportsortexpansion{Ubreve} {} \exportsortexpansion{ubreve} {} \exportsortexpansion{Ccaron} {} \exportsortexpansion{ccaron} {} \exportsortexpansion{Dcaron} {} \exportsortexpansion{dcaron} {} \exportsortexpansion{Ecaron} {} \exportsortexpansion{ecaron} {} \exportsortexpansion{Lcaron} {} \exportsortexpansion{lcaron} {} \exportsortexpansion{Ncaron} {} \exportsortexpansion{ncaron} {} \exportsortexpansion{Rcaron} {} \exportsortexpansion{rcaron} {} \exportsortexpansion{Scaron} {} \exportsortexpansion{scaron} {} \exportsortexpansion{Tcaron} {} \exportsortexpansion{tcaron} {} \exportsortexpansion{Ycaron} {} \exportsortexpansion{ycaron} {} \exportsortexpansion{Zcaron} {} \exportsortexpansion{zcaron} {} \exportsortexpansion{Lstroke} {} \exportsortexpansion{lstroke} {} \exportsortexpansion{Ostroke} {} \exportsortexpansion{ostroke} {} \exportsortexpansion{aumlaut} {} \exportsortexpansion{eumlaut} {} \exportsortexpansion{iumlaut} {} \exportsortexpansion{oumlaut} {} \exportsortexpansion{uumlaut} {} \exportsortexpansion{Aumlaut} {} \exportsortexpansion{Eumlaut} {} \exportsortexpansion{Iumlaut} {} \exportsortexpansion{Oumlaut} {} \exportsortexpansion{Uumlaut} {} \exportsortexpansion{scommaaccent} {} \exportsortexpansion{Scommaaccent} {} \exportsortexpansion{tcommaaccent} {} \exportsortexpansion{Tcommaaccent} {} \exportsortexpansion{Etilde} {} \exportsortexpansion{etilde} {} \exportsortexpansion{Ahook} {} \exportsortexpansion{ahook} {} \exportsortexpansion{Ehook} {} \exportsortexpansion{ehook} {} \exportsortexpansion{Ihook} {} \exportsortexpansion{ihook} {} \exportsortexpansion{Ohook} {} \exportsortexpansion{ohook} {} \exportsortexpansion{Uhook} {} \exportsortexpansion{uhook} {} \exportsortexpansion{Yhook} {} \exportsortexpansion{yhook} {} \exportsortexpansion{Acircumflexgrave} {} \exportsortexpansion{Acircumflexacute} {} \exportsortexpansion{Acircumflextilde} {} \exportsortexpansion{Acircumflexhook} {} \exportsortexpansion{acircumflexgrave} {} \exportsortexpansion{acircumflexacute} {} \exportsortexpansion{acircumflextilde} {} \exportsortexpansion{acircumflexhook} {} \exportsortexpansion{Ecircumflexgrave} {} \exportsortexpansion{Ecircumflexacute} {} \exportsortexpansion{Ecircumflextilde} {} \exportsortexpansion{Ecircumflexhook} {} \exportsortexpansion{ecircumflexgrave} {} \exportsortexpansion{ecircumflexacute} {} \exportsortexpansion{ecircumflextilde} {} \exportsortexpansion{ecircumflexhook} {} \exportsortexpansion{Ocircumflexgrave} {} \exportsortexpansion{Ocircumflexacute} {} \exportsortexpansion{Ocircumflextilde} {} \exportsortexpansion{Ocircumflexhook} {} \exportsortexpansion{ocircumflexgrave} {} \exportsortexpansion{ocircumflexacute} {} \exportsortexpansion{ocircumflextilde} {} \exportsortexpansion{ocircumflexhook} {} \exportsortexpansion{Abrevegrave} {} \exportsortexpansion{Abreveacute} {} \exportsortexpansion{Abrevetilde} {} \exportsortexpansion{Abrevehook} {} \exportsortexpansion{abrevegrave} {} \exportsortexpansion{abreveacute} {} \exportsortexpansion{abrevetilde} {} \exportsortexpansion{abrevehook} {} \exportsortexpansion{Adotbelow} {} \exportsortexpansion{adotbelow} {} \exportsortexpansion{Edotbelow} {} \exportsortexpansion{edotbelow} {} \exportsortexpansion{Idotbelow} {} \exportsortexpansion{idotbelow} {} \exportsortexpansion{Odotbelow} {} \exportsortexpansion{odotbelow} {} \exportsortexpansion{Udotbelow} {} \exportsortexpansion{udotbelow} {} \exportsortexpansion{Ydotbelow} {} \exportsortexpansion{ydotbelow} {} \exportsortexpansion{Ohorndotbelow} {} \exportsortexpansion{ohorndotbelow} {} \exportsortexpansion{Uhorndotbelow} {} \exportsortexpansion{uhorndotbelow} {} \exportsortexpansion{Acircumflexdotbelow} {} \exportsortexpansion{acircumflexdotbelow} {} \exportsortexpansion{Ecircumflexdotbelow} {} \exportsortexpansion{ecircumflexdotbelow} {} \exportsortexpansion{Ocircumflexdotbelow} {} \exportsortexpansion{ocircumflexdotbelow} {} \exportsortexpansion{Abrevedotbelow} {} \exportsortexpansion{abrevedotbelow} {} \exportsortexpansion{Ohorn} {} \exportsortexpansion{Ohorngrave} {} \exportsortexpansion{Ohornacute} {} \exportsortexpansion{Ohorntilde} {} \exportsortexpansion{Ohornhook } {} \exportsortexpansion{ohorn} {} \exportsortexpansion{ohorngrave} {} \exportsortexpansion{ohornacute} {} \exportsortexpansion{ohorntilde} {} \exportsortexpansion{ohornhook } {} \exportsortexpansion{Uhorn} {} \exportsortexpansion{Uhorngrave} {} \exportsortexpansion{Uhornacute} {} \exportsortexpansion{Uhorntilde} {} \exportsortexpansion{Uhornhook } {} \exportsortexpansion{uhorn} {} \exportsortexpansion{uhorngrave} {} \exportsortexpansion{uhornacute} {} \exportsortexpansion{uhorntilde} {} \exportsortexpansion{uhornhook} {} \exportsortexpansion{eszett} {ssharp} \exportsortexpansion{Eszett} {Ssharp} \exportsortexpansion{lslash} {lstroke} \exportsortexpansion{Lslash} {Lstroke} \exportsortexpansion{dslash} {dstroke} \exportsortexpansion{Dslash} {Dstroke} \exportsortexpansion{oslash} {ostroke} \exportsortexpansion{Oslash} {Ostroke} \exportsortexpansion{dcroat} {dstroke} \exportsortexpansion{Dcroat} {Dstroke} % more \exportsortshortcut{\^ A} {\Acircumflex} \exportsortshortcut{\^ a} {\acircumflex} \exportsortshortcut{\^ C} {\Ccircumflex} \exportsortshortcut{\^ c} {\ccircumflex} \exportsortshortcut{\^ E} {\Ecircumflex} \exportsortshortcut{\^ e} {\ecircumflex} \exportsortshortcut{\^ G} {\Gcircumflex} \exportsortshortcut{\^ g} {\gcircumflex} \exportsortshortcut{\^ H} {\Hcircumflex} \exportsortshortcut{\^ h} {\hcircumflex} \exportsortshortcut{\^ I} {\Icircumflex} \exportsortshortcut{\^ i} {\icircumflex} \exportsortshortcut{\^\i} {\icircumflex} \exportsortshortcut{\^ J} {\Jcircumflex} \exportsortshortcut{\^ j} {\jcircumflex} \exportsortshortcut{\^\j} {\jcircumflex} \exportsortshortcut{\^ O} {\Ocircumflex} \exportsortshortcut{\^ o} {\ocircumflex} \exportsortshortcut{\^ S} {\Scircumflex} \exportsortshortcut{\^ s} {\scircumflex} \exportsortshortcut{\^ U} {\Ucircumflex} \exportsortshortcut{\^ u} {\ucircumflex} \exportsortshortcut{\^ W} {\Wcircumflex} \exportsortshortcut{\^ w} {\wcircumflex} \exportsortshortcut{\^ Y} {\Ycircumflex} \exportsortshortcut{\^ y} {\ycircumflex} \exportsortshortcut{\` A} {\Agrave} \exportsortshortcut{\` a} {\agrave} \exportsortshortcut{\` E} {\Egrave} \exportsortshortcut{\` e} {\egrave} \exportsortshortcut{\` I} {\Igrave} \exportsortshortcut{\` i} {\igrave} \exportsortshortcut{\`\i} {\igrave} \exportsortshortcut{\` O} {\Ograve} \exportsortshortcut{\` o} {\ograve} \exportsortshortcut{\` U} {\Ugrave} \exportsortshortcut{\` u} {\ugrave} \exportsortshortcut{\` Y} {\Ygrave} \exportsortshortcut{\` y} {\ygrave} \exportsortshortcut{\~ A} {\Atilde} \exportsortshortcut{\~ a} {\atilde} \exportsortshortcut{\~ I} {\Itilde} \exportsortshortcut{\~ i} {\itilde} \exportsortshortcut{\~\i} {\itilde} \exportsortshortcut{\~ O} {\Otilde} \exportsortshortcut{\~ o} {\otilde} \exportsortshortcut{\~ U} {\Utilde} \exportsortshortcut{\~ u} {\utilde} \exportsortshortcut{\" A} {\Adiaeresis} \exportsortshortcut{\" a} {\adiaeresis} \exportsortshortcut{\" E} {\Ediaeresis} \exportsortshortcut{\" e} {\ediaeresis} \exportsortshortcut{\" I} {\Idiaeresis} \exportsortshortcut{\" i} {\idiaeresis} \exportsortshortcut{\"\i} {\idiaeresis} \exportsortshortcut{\" O} {\Odiaeresis} \exportsortshortcut{\" o} {\odiaeresis} \exportsortshortcut{\" U} {\Udiaeresis} \exportsortshortcut{\" u} {\udiaeresis} \exportsortshortcut{\" Y} {\Ydiaeresis} \exportsortshortcut{\" y} {\ydiaeresis} \exportsortshortcut{\' A} {\Aacute} \exportsortshortcut{\' a} {\aacute} \exportsortshortcut{\' C} {\Cacute} \exportsortshortcut{\' c} {\cacute} \exportsortshortcut{\' E} {\Eacute} \exportsortshortcut{\' e} {\eacute} \exportsortshortcut{\' I} {\Iacute} \exportsortshortcut{\' i} {\iacute} \exportsortshortcut{\'\i} {\iacute} \exportsortshortcut{\' L} {\Lacute} \exportsortshortcut{\' l} {\lacute} \exportsortshortcut{\' N} {\Nacute} \exportsortshortcut{\' n} {\nacute} \exportsortshortcut{\' O} {\Oacute} \exportsortshortcut{\' o} {\oacute} \exportsortshortcut{\' R} {\Racute} \exportsortshortcut{\' r} {\racute} \exportsortshortcut{\' S} {\Sacute} \exportsortshortcut{\' s} {\sacute} \exportsortshortcut{\' U} {\Uacute} \exportsortshortcut{\' u} {\uacute} \exportsortshortcut{\' Y} {\Yacute} \exportsortshortcut{\' y} {\yacute} \exportsortshortcut{\' Z} {\Zacute} \exportsortshortcut{\' z} {\zacute} \exportsortshortcut{\. C} {\Cdotaccent} \exportsortshortcut{\. c} {\cdotaccent} \exportsortshortcut{\. E} {\Edotaccent} \exportsortshortcut{\. e} {\edotaccent} \exportsortshortcut{\. G} {\Gdotaccent} \exportsortshortcut{\. g} {\gdotaccent} \exportsortshortcut{\. I} {\Idotaccent} \exportsortshortcut{\. i} {\idotaccent} \exportsortshortcut{\.\i} {\idotaccent} \exportsortshortcut{\. Z} {\Zdotaccent} \exportsortshortcut{\. z} {\zdotaccent} \exportsortshortcut{\= A} {\Amacron} \exportsortshortcut{\= a} {\amacron} \exportsortshortcut{\= E} {\Emacron} \exportsortshortcut{\= e} {\emacron} \exportsortshortcut{\= I} {\Imacron} \exportsortshortcut{\= i} {\imacron} \exportsortshortcut{\=\i} {\imacron} \exportsortshortcut{\= O} {\Omacron} \exportsortshortcut{\= o} {\omacron} \exportsortshortcut{\= U} {\Umacron} \exportsortshortcut{\= u} {\umacron} \exportsortshortcut{\c C} {\Ccedilla} \exportsortshortcut{\c c} {\ccedilla} \exportsortshortcut{\c K} {\Kcedilla} \exportsortshortcut{\c k} {\kcedilla} \exportsortshortcut{\c L} {\Lcedilla} \exportsortshortcut{\c l} {\lcedilla} \exportsortshortcut{\c N} {\Ncedilla} \exportsortshortcut{\c n} {\ncedilla} \exportsortshortcut{\c R} {\Rcedilla} \exportsortshortcut{\c r} {\rcedilla} \exportsortshortcut{\c S} {\Scedilla} \exportsortshortcut{\c s} {\scedilla} \exportsortshortcut{\c T} {\Tcedilla} \exportsortshortcut{\c t} {\tcedilla} \exportsortshortcut{\H O} {\Ohungarumlaut} \exportsortshortcut{\H o} {\ohungarumlaut} \exportsortshortcut{\H u} {\uhungarumlaut} \exportsortshortcut{\H U} {\Uhungarumlaut} \exportsortshortcut{\k A} {\Aogonek} \exportsortshortcut{\k a} {\aogonek} \exportsortshortcut{\k E} {\Eogonek} \exportsortshortcut{\k e} {\eogonek} \exportsortshortcut{\k I} {\Iogonek} \exportsortshortcut{\k i} {\iogonek} \exportsortshortcut{\k U} {\Uogonek} \exportsortshortcut{\k u} {\uogonek} \exportsortshortcut{\r A} {\Aring} \exportsortshortcut{\r a} {\aring} \exportsortshortcut{\r U} {\Uring} \exportsortshortcut{\r u} {\uring} \exportsortshortcut{\u A} {\Abreve} \exportsortshortcut{\u a} {\abreve} \exportsortshortcut{\u E} {\Ebreve} \exportsortshortcut{\u e} {\ebreve} \exportsortshortcut{\u G} {\Gbreve} \exportsortshortcut{\u g} {\gbreve} \exportsortshortcut{\u I} {\Ibreve} \exportsortshortcut{\u i} {\ibreve} \exportsortshortcut{\u\i} {\ibreve} \exportsortshortcut{\u O} {\Obreve} \exportsortshortcut{\u o} {\obreve} \exportsortshortcut{\u U} {\Ubreve} \exportsortshortcut{\u u} {\ubreve} \exportsortshortcut{\v C} {\Ccaron} \exportsortshortcut{\v c} {\ccaron} \exportsortshortcut{\v D} {\Dcaron} \exportsortshortcut{\v d} {\dcaron} \exportsortshortcut{\v E} {\Ecaron} \exportsortshortcut{\v e} {\ecaron} \exportsortshortcut{\v L} {\Lcaron} \exportsortshortcut{\v l} {\lcaron} \exportsortshortcut{\v N} {\Ncaron} \exportsortshortcut{\v n} {\ncaron} \exportsortshortcut{\v R} {\Rcaron} \exportsortshortcut{\v r} {\rcaron} \exportsortshortcut{\v S} {\Scaron} \exportsortshortcut{\v s} {\scaron} \exportsortshortcut{\v T} {\Tcaron} \exportsortshortcut{\v t} {\tcaron} \exportsortshortcut{\v Z} {\Zcaron} \exportsortshortcut{\v z} {\zcaron} \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-lay.mkiv�������������������������������0000644�0001750�0001750�00000165720�12161703335�024274� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-lay, %D version=2000.10.20, % copied from main-001 %D title=\CONTEXT\ Page Macros, %D subtitle=Layout Specification, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Layout Specification} %D Before you start wondering why some of the page related %D modules skip upward or left in order to place elements, you %D must realize that the reference point is the top left %D corner of the main typesetting area. One reason for this %D choice is that it suited some viewers that displayed page %D areas. Another reason is that margins, edges and top and %D bottom areas are kind of virtual, while the header, text %D and footer areas normally determine the text flow. \unprotect %D The dimensions related to layout areas are represented by %D real dimensions. \newdimen\paperheight \paperheight = 297mm \newdimen\paperwidth \paperwidth = 210mm \newdimen\paperoffset \paperoffset = \zeropoint \newdimen\printpaperheight \printpaperheight = \paperheight \newdimen\printpaperwidth \printpaperwidth = \paperwidth \newdimen\makeupheight % calculated \newdimen\makeupwidth % calculated \newdimen\textheight % calculated \newdimen\textwidth % calculated \newdimen\topspace \topspace = 2cm \newdimen\backspace \backspace = \topspace \newdimen\cutspace \cutspace = \zeropoint \newdimen\bottomspace \bottomspace = \zeropoint \newdimen\headerheight \headerheight = 2cm \newdimen\footerheight \footerheight = \headerheight \newdimen\topoffset \topoffset = \zeropoint \newdimen\backoffset \backoffset = \topoffset \newdimen\leftmarginwidth \leftmarginwidth = 3cm \newdimen\rightmarginwidth \rightmarginwidth = \leftmarginwidth \newdimen\leftedgewidth \leftedgewidth = 3cm \newdimen\rightedgewidth \rightedgewidth = \leftedgewidth \newdimen\topheight \topheight = \zeropoint \newdimen\bottomheight \bottomheight = \topheight \newcount\layoutlines \layoutlines = \zerocount \newcount\layoutcolumns \layoutcolumns = \zerocount \newdimen\layoutcolumndistance \layoutcolumndistance = \zeropoint \newdimen\layoutcolumnwidth \layoutcolumnwidth = \zeropoint \newdimen\totaltextwidth %D The next series of dimensions are complemented by left %D and rights ones. \newdimen\margindistance \newdimen\edgedistance \newdimen\marginwidth \newdimen\edgewidth %D Because a distance does not really makes sense when there %D is no area, we use a zero distance in case there is no %D area. %D The horizontal distances are: \newdimen\leftedgedistance \newdimen\rightedgedistance \newdimen\leftmargindistance \newdimen\rightmargindistance %D The vertical distances are: \newdimen\topdistance \newdimen\headerdistance \newdimen\footerdistance \newdimen\bottomdistance %D We need to calculate the extra distances: \newdimen\naturalmarginwidth \newdimen\naturaledgewidth \newdimen\naturalmargindistance \newdimen\naturaledgedistance \newdimen\naturalleftedgedistance \newdimen\naturalrightedgedistance \newdimen\naturalleftmargindistance \newdimen\naturalrightmargindistance \newdimen\naturaltopdistance \newdimen\naturalheaderdistance \newdimen\naturalfooterdistance \newdimen\naturalbottomdistance %D Now we've come to the setup and definition commands. \installcorenamespace{layout} \installcorenamespace{layoutlocation} \installcorenamespace{layoutalternative} \installcorenamespace{layoutcolumn} \installcorenamespace{layoutmethod} \installswitchcommandhandler \??layout {layout} \??layout \appendtoks \doifnothing{\strictlayoutparameter\c!state}{\letlayoutparameter\c!state\v!start}% \to \everydefinelayout \appendtoks \ifcase\layoutsetupmode % can't happen \or % \setuplayout[name][key=value] \ifx\previouslayout\currentlayout \letlayoutparameter\c!state\v!normal % global ? still needed ? \let\currentlayout\currentlayout \page_layouts_synchronize \page_layouts_check_next \fi \or % \setuplayout[key=value] % we can inherit so we always synchronize \letlayoutparameter\c!state\v!normal % global ? still needed ? \let\currentlayout\previouslayout \page_layouts_synchronize \page_layouts_check_next \or % \setuplayout[name] \ifx\currentlayout\v!reset \let\currentlayout\empty \fi \letlayoutparameter\c!state\v!normal % global ? still needed ? \global\let\currentlayout\currentlayout % global \page_layouts_synchronize \page_layouts_check_next \or % \setuplayout (reverts to main layout) \letlayoutparameter\c!state\v!normal % global ? still needed ? \global\let\currentlayout\empty % global \page_layouts_synchronize \page_layouts_check_next \fi \to \everysetuplayout \def\doiflayoutdefinedelse#1% {\ifcsname\namedlayouthash{#1}\c!state\endcsname % maybe a helper \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\layoutdistance#1#2{\ifdim\zeropoint<#1#2\else\zeropoint\fi} \def\page_layouts_set_dimensions {\global\naturalmarginwidth \layoutparameter\c!margin \global\naturaledgewidth \layoutparameter\c!edge \global\naturalmargindistance \layoutparameter\c!margindistance \global\naturaledgedistance \layoutparameter\c!edgedistance \global\naturalleftedgedistance \layoutparameter\c!leftedgedistance \global\naturalrightedgedistance \layoutparameter\c!rightedgedistance \global\naturalleftmargindistance \layoutparameter\c!leftmargindistance \global\naturalrightmargindistance\layoutparameter\c!rightmargindistance \global\naturaltopdistance \layoutparameter\c!topdistance \global\naturalheaderdistance \layoutparameter\c!headerdistance \global\naturalfooterdistance \layoutparameter\c!footerdistance \global\naturalbottomdistance \layoutparameter\c!bottomdistance % \global\marginwidth \naturalmarginwidth \global\edgewidth \naturaledgewidth \global\margindistance \naturalmargindistance \global\edgedistance \naturaledgedistance % \global\leftedgedistance \layoutdistance\leftedgewidth \naturalleftedgedistance \global\rightedgedistance \layoutdistance\rightedgewidth \naturalrightedgedistance \global\leftmargindistance \layoutdistance\leftmarginwidth \naturalleftmargindistance \global\rightmargindistance \layoutdistance\rightmarginwidth\naturalrightmargindistance \global\topdistance \layoutdistance\topheight \naturaltopdistance \global\headerdistance \layoutdistance\headerheight \naturalheaderdistance \global\footerdistance \layoutdistance\footerheight \naturalfooterdistance \global\bottomdistance \layoutdistance\bottomheight \naturalbottomdistance } \def\page_layouts_set_distances % local in \setreducedvsize {\headerdistance\layoutdistance\headerheight\naturalheaderdistance \footerdistance\layoutdistance\footerheight\naturalfooterdistance} % these are wrong in the running text, assumes some swapping, needs a cleanup \def\outermarginwidth {\rightorleftpageaction\rightmarginwidth \leftmarginwidth } \def\innermarginwidth {\rightorleftpageaction\leftmarginwidth \rightmarginwidth} \def\outermargindistance{\rightorleftpageaction\rightmargindistance\leftmargindistance } \def\innermargindistance{\rightorleftpageaction\leftmargindistance \rightmargindistance} \def\outeredgewidth {\rightorleftpageaction\rightedgewidth \leftedgewidth } \def\inneredgewidth {\rightorleftpageaction\leftedgewidth \rightedgewidth} \def\outeredgedistance {\rightorleftpageaction\rightedgedistance\leftedgedistance } \def\inneredgedistance {\rightorleftpageaction\leftedgedistance \rightedgedistance} \def\outerspacewidth {\rightorleftpageaction\cutspace\backspace} \def\innerspacewidth {\rightorleftpageaction\backspace\cutspace} \newtoks\extralayoutcalculations \def\page_layouts_calculate_extras {\the\extralayoutcalculations} \newtoks\everyswapmargins % watch the order ! \appendtoks \swapdimens\leftmargindistance\rightmargindistance \swapdimens\leftedgedistance \rightedgedistance \swapdimens\leftmarginwidth \rightmarginwidth \swapdimens\leftedgewidth \rightedgewidth % \swapmacros\leftmargintotal \rightmargintotal \swapmacros\leftedgetotal \rightedgetotal \swapmacros\leftsidetotal \rightsidetotal \swapmacros\leftcombitotal \rightcombitotal \swapmacros\innermargintotal \outermargintotal \swapmacros\inneredgetotal \outeredgetotal \swapmacros\innercombitotal \outercombitotal \swapmacros\innersidetotal \outersidetotal \to \everyswapmargins %D The papersize macros have a long history and we don't want %D to change the commands so they keep looking a bit complex. %D \macros %D {definepapersize} %D %D Before we start calculating layout dimensions, we will %D first take care of paper sizes. The first argument can be %D either an assignment (for defaults) or an identifier, in %D which case the second argument is an assignment. %D %D \showsetup{definepapersize} %D %D Yet undocumented, let's see if it gets noticed. %D %D \starttyping %D \definepapersize[main] [A4] [A4] %D \definepapersize[extra][A4,landscape][A4,landscape] %D %D \starttext %D \setuppapersize[main] %D Page 1. \page %D Page 2. \page %D \setuppapersize[extra] %D Page 2 \page %D \setuppapersize[main] %D Page 3. \page %D Page 4. \page %D \adaptpapersize[extra] %D Page 5. \page %D Page 6. \page %D \stoptext %D \stoptyping %D %D \macros %D {setuppaper,setuppapersize} %D %D When setting up the papersize on which to typeset and %D print, we can also determine some more characteristics. %D %D \showsetup{setuppapersize} %D %D We keep track of these features with the following %D variables. \installcorenamespace{layouttarget} \installcorenamespace{layoutpaper} \installcorenamespace{layoutprint} \installcorenamespace{layoutcurrent} \installcommandhandler \??layouttarget {layouttarget} \??layouttarget % so this is a sort of mix, not really a user command / maybe switch handler \newconditional\c_page_target_paper_mirror \newconstant \c_page_target_paper_orientation \newconstant \c_page_target_paper_reverse \newconditional\c_page_target_paper_landscape \newconditional\c_page_target_paper_negate \newconditional\c_page_target_print_mirror \newconstant \c_page_target_print_orientation \newconstant \c_page_target_print_reverse \newconditional\c_page_target_print_landscape \newconditional\c_page_target_print_negate \newconditional\c_page_target_print_doublesided \let\v_page_target_left_fill \relax \let\v_page_target_right_fill \relax \let\v_page_target_top_fill \relax \let\v_page_target_bottom_fill\relax \let\papersize \empty \let\printpapersize\empty \def\v_page_target_top {\namedlayouttargetparameter\papersize\c!top } \def\v_page_target_bottom {\namedlayouttargetparameter\papersize\c!bottom} \def\v_page_target_left {\namedlayouttargetparameter\papersize\c!left } \def\v_page_target_right {\namedlayouttargetparameter\papersize\c!right } \def\v_page_target_method {\rootlayouttargetparameter \c!method} \def\v_page_target_scale {\rootlayouttargetparameter \c!scale } \def\v_page_target_nx {\numexpr\rootlayouttargetparameter \c!nx \relax} \def\v_page_target_ny {\numexpr\rootlayouttargetparameter \c!ny \relax} \def\v_page_target_dx {\dimexpr\rootlayouttargetparameter \c!dx \relax} \def\v_page_target_dy {\dimexpr\rootlayouttargetparameter \c!dy \relax} \def\v_page_target_width {\dimexpr\rootlayouttargetparameter \c!width \relax} \def\v_page_target_height {\dimexpr\rootlayouttargetparameter \c!height \relax} \def\v_page_target_topspace {\dimexpr\rootlayouttargetparameter \c!topspace \relax} \def\v_page_target_backspace{\dimexpr\rootlayouttargetparameter \c!backspace\relax} \def\v_page_target_offset {\dimexpr\rootlayouttargetparameter \c!offset \relax} \def\v_page_target_xy {\numexpr\v_page_target_nx*\v_page_target_ny\relax} % Normally we will not use this command directly but for now it % works out okay. In the future we might use more of the related % commands. \setuplayouttarget [% these are rather special \c!nx=1, \c!ny=1, \c!dx=\zeropoint, \c!dy=\zeropoint, \c!topspace=\zeropoint, \c!backspace=\zeropoint, \c!width=\zeropoint, \c!height=\zeropoint, % \c!method=\v!normal, \c!option=\v!max, \c!alternative=\v!normal, % \c!scale=1, \c!offset=\zeropoint, % \c!top=, \c!bottom=, \c!left=, \c!right=, % \c!location=] % \definepapersize[name][A4][A3] % \definepapersize[name][settings] \unexpanded\def\definepapersize {\dotripleempty\page_paper_define_size} \def\page_paper_define_size[#1][#2][#3]% {\edef\currentlayouttarget{#1}% \ifx\currentlayouttarget\empty % invalid target \else \doifassignmentelse{#2} {\definelayouttarget[#1][#2]} {\setevalue{\??layoutpaper#1}{#2}% \setevalue{\??layoutprint#1}{#3}}% \fi} \appendtoks \letvalue{\??layoutcurrent\currentlayouttarget}\relax \to \everydefinelayouttarget \def\page_paper_the_paper_size#1{\ifcsname\??layoutpaper#1\endcsname\csname\??layoutpaper#1\endcsname\else#1\fi} \def\page_paper_the_print_size#1{\ifcsname\??layoutprint#1\endcsname\csname\??layoutprint#1\endcsname\else#1\fi} % \setuppaper [page=A4,paper=A3] % the k/v variant, changes the current page mapping % \setuppapersize[A4][a=b,c=d] % the k/v variant, changes nothing, just settings % \setuppapersize[A4][A3] % changes the current page mapping \let\page_paper_reinstate\relax \let\page_paper_restore \relax \unexpanded\def\setuppapersize {\dodoubleempty\page_paper_setup_size} \unexpanded\def\page_paper_setup_size[#1][#2]% {\iffirstargument \doifassignmentelse{#1} {\page_paper_setup_size_settings[#1]} {\doifassignmentelse{#2} {\page_paper_setup_size_settings_by_name[#1][#2]} {\page_paper_setup_size_change_size[#1][#2]}}% \else \page_paper_restore \fi} \unexpanded\def\page_paper_setup_size_settings[#1]% sometimes used to set paper/print size {\let\currentlayouttarget\empty \edef\m_layouttarget_paper_saved{\page_paper_the_paper_size{\layouttargetparameter\c!page }}% \edef\m_layouttarget_print_saved{\page_paper_the_print_size{\layouttargetparameter\c!paper}}% \setupcurrentlayouttarget[#1]% \edef\m_layouttarget_paper{\page_paper_the_paper_size{\layouttargetparameter\c!page }}% \edef\m_layouttarget_print{\page_paper_the_print_size{\layouttargetparameter\c!paper}}% \ifx\m_layouttarget_paper_saved\m_layouttarget_paper \ifx\m_layouttarget_print_saved\m_layouttarget_print % we didn't change the size, maybe only sx or sy or so \else \page_paper_setup_size_settings_recalibrate \fi \else \page_paper_setup_size_settings_recalibrate \fi} \def\page_paper_setup_size_settings_recalibrate {\ifx\m_layouttarget_paper\empty % forget about it \else \ifx\m_layouttarget_print\empty \let\m_layouttarget_print\m_layouttarget_paper \fi \page_paper_set_current[\m_layouttarget_paper][\m_layouttarget_print]% \fi \letlayouttargetparameter\c!page \papersize \letlayouttargetparameter\c!paper\printpapersize} \unexpanded\def\page_paper_setup_size_settings_by_name[#1][#2]% {\def\currentlayouttarget{\page_paper_the_paper_size{#1}}% \setuplayouttarget[#2]} \unexpanded\def\page_paper_setup_size_change_size[#1][#2]% {\doifelsenothing{#2} {\page_paper_set_current[#1][#1]} {\page_paper_set_current[#1][#2]}} \let\setuppaper\page_paper_setup_size_settings \unexpanded\def\adaptpapersize {\global\let\page_paper_reinstate\page_paper_reinstate_indeed \setuppapersize} \unexpanded\def\page_paper_reinstate_indeed {\page_paper_restore \global\let\page_paper_reinstate\relax} \appendtoks \page_paper_reinstate \to \everyaftershipout \unexpanded\def\page_paper_set_restore#1#2% {\xdef\page_paper_restore{\page_paper_set_current_indeed[#1][#2]}} \unexpanded\def\page_paper_set_current[#1][#2]% {\normalexpanded{\page_paper_set_current_indeed [\page_paper_the_paper_size{#1}]% [\page_paper_the_print_size{#2}]}} \setvalue{\??layoutpaper\v!reset }{\global\setfalse\c_page_target_paper_landscape \global\setfalse\c_page_target_paper_mirror \global\setfalse\c_page_target_paper_negate \global\c_page_target_paper_orientation\uprotationangle \global\c_page_target_paper_reverse \uprotationangle} \setvalue{\??layoutpaper\v!landscape }{\global\settrue\c_page_target_paper_landscape} \setvalue{\??layoutpaper\v!mirrored }{\global\settrue\c_page_target_paper_mirror} \setvalue{\??layoutpaper\v!negative }{\global\settrue\c_page_target_paper_negate} \setvalue{\??layoutpaper\v!rotated }{\global\c_page_target_paper_orientation\rightrotationangle \global\c_page_target_paper_reverse \leftrotationangle} \setvalue{\??layoutpaper\number\rightrotationangle}{\global\c_page_target_paper_orientation\rightrotationangle \global\c_page_target_paper_reverse \leftrotationangle} \setvalue{\??layoutpaper\number\downrotationangle }{\global\c_page_target_paper_orientation\downrotationangle \global\c_page_target_paper_reverse \zerocount} \setvalue{\??layoutpaper\number\leftrotationangle }{\global\c_page_target_paper_orientation\leftrotationangle \global\c_page_target_paper_reverse \rightrotationangle} \setvalue{\??layoutprint\v!reset }{\global\setfalse\c_page_target_print_landscape \global\setfalse\c_page_target_print_mirror \global\setfalse\c_page_target_print_negate \global\c_page_target_print_orientation\uprotationangle \global\c_page_target_print_reverse \uprotationangle} \setvalue{\??layoutprint\v!landscape }{\global\settrue\c_page_target_print_landscape} \setvalue{\??layoutprint\v!mirrored }{\global\settrue\c_page_target_print_mirror} \setvalue{\??layoutprint\v!negative }{\global\settrue\c_page_target_print_negate} \setvalue{\??layoutprint\v!rotated }{\global\c_page_target_print_orientation\rightrotationangle \global\c_page_target_print_reverse \leftrotationangle} \setvalue{\??layoutprint\number\rightrotationangle}{\global\c_page_target_print_orientation\rightrotationangle \global\c_page_target_print_reverse \leftrotationangle} \setvalue{\??layoutprint\number\downrotationangle }{\global\c_page_target_print_orientation\downrotationangle \global\c_page_target_print_reverse \zerocount} \setvalue{\??layoutprint\number\leftrotationangle }{\global\c_page_target_print_orientation\leftrotationangle \global\c_page_target_print_reverse \rightrotationangle} \def\page_paper_handle_page_option #1{\ifcsname\??layoutpaper#1\endcsname\csname\??layoutpaper#1\endcsname\fi} \def\page_paper_handle_print_option#1{\ifcsname\??layoutprint#1\endcsname\csname\??layoutprint#1\endcsname\fi} \unexpanded\def\page_paper_identify_target#1% {\ifcsname\??layoutcurrent#1\endcsname \edef\currentlayouttarget{#1}% \fi} \unexpanded\def\page_paper_set_current_indeed[#1][#2]% {\edef\m_page_asked_paper{\v!reset,#1}% can be the restores \edef\m_page_asked_print{\v!reset,#2}% % \page_paper_set_restore\m_page_asked_paper\m_page_asked_print % % locate page target \let\currentlayouttarget\empty \processcommacommand[\m_page_asked_paper]\page_paper_identify_target \ifx\currentlayouttarget\empty \let\currentlayouttarget\currentpage \fi \global\let\papersize\currentlayouttarget \processcommacommand[\m_page_asked_paper]\page_paper_handle_page_option \global\paperwidth \layouttargetparameter\c!width \relax \global\paperheight\layouttargetparameter\c!height\relax \ifdim\paperwidth<\onepoint \global\paperwidth\onepoint \fi \ifdim\paperheight<\onepoint \global\paperheight\onepoint \fi \ifconditional\c_page_target_paper_landscape \doglobal\swapdimens\paperwidth\paperheight \fi \ifinpagebody % local freeze \normalexpanded{\setlayouttargetparemeter\c!height{\the\paperheight}}% \normalexpanded{\setlayouttargetparemeter\c!width {\the\paperwidth }}% \fi % \page_paper_set_offsets % locate paper target \processcommacommand[\m_page_asked_print]\page_paper_identify_target \global\let\printpapersize\currentlayouttarget \processcommacommand[\m_page_asked_print]\page_paper_handle_print_option \global\printpaperwidth \layouttargetparameter\c!width \relax \global\printpaperheight\layouttargetparameter\c!height\relax \ifdim\printpaperwidth<\onepoint \global\printpaperwidth\paperwidth \fi \ifdim\printpaperheight<\onepoint \global\printpaperheight\paperheight \fi \ifconditional\c_page_target_print_landscape \globalswapdimens\printpaperwidth\printpaperheight \fi % this check can be confusing, so we've added the possibility % to bypass this test: \setuppapersize[option=fit] \edef\m_page_asked_option{\rootlayouttargetparameter\c!option}% \ifx\m_page_asked_option\v!max % \v!fit is \begingroup % we need to pre-swap else we get the wrong paper size \ifnum\c_page_target_paper_orientation=\rightrotationangle \swapdimens\paperwidth\paperheight \else\ifnum\c_page_target_paper_orientation=\leftrotationangle \swapdimens\paperwidth\paperheight \fi\fi \ifnum\c_page_target_print_orientation=\rightrotationangle \swapdimens\printpaperwidth\printpaperheight \else\ifnum\c_page_target_print_orientation=\leftrotationangle \swapdimens\printpaperwidth\printpaperheight \fi\fi \ifdim\paperheight>\printpaperheight \global\printpaperheight\paperheight \writestatus\m!system{print height forced to paper height}% \fi \ifdim\paperwidth>\printpaperwidth \global\printpaperwidth\paperwidth \writestatus\m!system{print width forced to paper width}% \fi \endgroup \fi %\writestatus{layout target}{(\the\paperwidth,\the\paperheight) -> (\the\printpaperwidth,\the\printpaperheight)}% \page_layouts_synchronize} \ifdefined\page_paper_set_offsets \else \def\page_paper_set_offsets % will move {\global\paperoffset\v_page_target_offset \global\advance\paperwidth -2\paperoffset \global\advance\paperheight-2\paperoffset} \fi \ifdefined\setups \else \unexpanded\def\setups[#1]{\setdefaultpenalties} % still needed? \fi \ifdefined\synchronizegridsnapping \else \let\synchronizegridsnapping\relax \fi \let\p_page_layouts_width \empty \let\p_page_layouts_height\empty \def\page_layouts_synchronize {\setups[\layoutparameter\c!preset]% \global\leftmarginwidth \layoutparameter\c!leftmargin \global\rightmarginwidth\layoutparameter\c!rightmargin \global\leftedgewidth \layoutparameter\c!leftedge \global\rightedgewidth \layoutparameter\c!rightedge \global\headerheight \layoutparameter\c!header \global\footerheight \layoutparameter\c!footer \global\bottomheight \layoutparameter\c!bottom \global\topheight \layoutparameter\c!top \global\backspace \layoutparameter\c!backspace \global\topspace \layoutparameter\c!topspace \page_layouts_set_dimensions \synchronizegridsnapping \usesetupsparameter\layoutparameter % depends on gridsnapping ! \synchronizewhitespace \synchronizeblank \setupinterlinespace[\v!reset]% \synchronizegloballinespecs \global\cutspace\layoutparameter\c!cutspace\relax \edef\p_page_layouts_width{\layoutparameter\c!width}% \ifx\p_page_layouts_width\v!middle \ifdim\cutspace=\zeropoint \global\cutspace\backspace \fi \global\makeupwidth\dimexpr\paperwidth-\backspace-\cutspace\relax \else\ifx\p_page_layouts_width\v!fit \ifdim\cutspace=\zeropoint \global\cutspace\backspace \fi \global\makeupwidth\dimexpr\paperwidth-\cutspace\relax \scratchdimen\dimexpr\backspace -\leftedgewidth -\leftedgedistance -\leftmarginwidth-\leftmargindistance\relax \ifdim\scratchdimen<\zeropoint \scratchdimen\zeropoint \fi \global\advance\makeupwidth\dimexpr -\rightmargindistance-\rightmarginwidth -\rightedgedistance -\rightedgewidth -\scratchdimen\relax \else \global\makeupwidth\p_page_layouts_width\relax \ifdim\cutspace=\zeropoint \global\cutspace\dimexpr\paperwidth-\makeupwidth-\backspace\relax % \else % A kind of inconsistent specification, but used % in for instance s-pre-19.tex; the cutspace is % used only for determining some kind of right % margin; don't use this in doublesided mode \fi \fi\fi \scratchdimen\layoutparameter\c!bottomspace\relax %\ifdim\scratchdimen=\zeropoint % \scratchdimen\topspace %\fi \global\bottomspace\layoutparameter\c!bottomspace\relax \global\layoutlines0\number\layoutparameter\c!lines\relax % may be empty \ifcase\layoutlines \edef\p_page_layouts_height{\layoutparameter\c!height}% \ifx\p_page_layouts_height\v!middle \ifdim\bottomspace=\zeropoint \global\bottomspace\topspace \fi \global\makeupheight\dimexpr\paperheight-\topspace-\bottomspace\relax \else\ifx\p_page_layouts_height\v!fit \ifdim\bottomspace=\zeropoint \global\bottomspace\topspace \fi \global\makeupheight\dimexpr\paperheight-\bottomspace\relax \scratchdimen\dimexpr\topspace-\topheight-\topdistance\relax \ifdim\scratchdimen<\zeropoint \scratchdimen\zeropoint \fi \global\advance\makeupheight\dimexpr-\bottomdistance-\bottomheight-\scratchdimen\relax \else \global\makeupheight\layoutparameter\c!height\relax \ifdim\bottomspace=\zeropoint \global\bottomspace\dimexpr\paperheight-\makeupheight-\topspace\relax % \else % inconsistent specification \fi \fi\fi \else % beware, when the bodyfont changes (switched) this will change as well; implementing % a global lineheight is tricky: should we take the bodyfont interlinespace or the one set % independent of the bodyfont (before or after a layout spec); way too fuzzy, so we % stick to the current method (after a night of experimenting ...2003/10/13) \global\makeupheight\dimexpr \layoutparameter\c!lines\lineheight-\strutheight+\topskip+ \headerdistance+\headerheight+\footerdistance+\footerheight\relax \fi \backoffset\layoutparameter\c!horoffset\relax \topoffset \layoutparameter\c!veroffset\relax \ifdim\makeupwidth<\onepoint \global\makeupwidth\onepoint \fi \ifdim\makeupheight<\onepoint \global\makeupheight\onepoint \fi % handy in page builder \global\totaltextwidth\dimexpr \leftedgetotal +\leftmargintotal +\makeupwidth +\rightmargintotal +\rightedgetotal \relax % \page_layouts_check_next % here ? \page_layouts_calculate_extras \page_target_check_centering \calculatehsizes \calculatevsizes \page_layouts_check_pseudo_columns \page_backgrounds_recalculate} \def\page_layouts_check_pseudo_columns {\global\layoutcolumns\layoutparameter\c!columns \global\layoutcolumndistance\layoutparameter\c!columndistance \global\layoutcolumnwidth\dimexpr\makeupwidth-\layoutcolumns\layoutcolumndistance+\layoutcolumndistance\relax \ifnum\layoutcolumns>\plusone \global\divide\layoutcolumnwidth\layoutcolumns \dorecurse\layoutcolumns\page_layouts_check_pseudo_column \fi} \def\page_layouts_check_pseudo_column {\setxvalue{\??layoutcolumn\recurselevel}% {\the\numexpr\recurselevel-\plusone\relax\dimexpr\layoutcolumnwidth+\layoutcolumndistance\relax}} \letvalue{\??layoutcolumn0}\zeropoint \def\layoutcolumnoffset#1% {\csname\??layoutcolumn\ifcsname\??layoutcolumn#1\endcsname#1\else0\fi\endcsname} \def\page_layouts_synchronize_at_start {\ifdim\makeupheight=\layoutlines\lineheight \else % weird check \page_layouts_synchronize \fi} \appendtoks \page_layouts_synchronize_at_start % still needed? \to \everystarttext % document: % % \setuplayout[odd][state=stop] \setuplayout[even][state=stop] \setuplayout[page] % % \startstandardmakeup[page=blank] ... \stopstandardmakeup \ifdefined\lastpage \else \let\lastpage\!!plusone \fi \def\page_layouts_change#1% {%\writestatus\m!layouts{changing to layout #1}% \xdef\currentlayout{#1}% \page_layouts_synchronize} \let\changetolayout\page_layouts_change % also public \def\v_real_page_normal {\the\realpageno} \def\v_real_page_reverse{-\the\numexpr\lastpage-\realpageno\relax} \def\v_real_page_odd_or_even {\ifodd\pagenoshift \ifodd\realpageno\v!even\else\v!odd \fi \else \ifodd\realpageno\v!odd \else\v!even\fi \fi} \let\v_real_page_current\v!current \def\v_real_page_named {\ifnum\lastpage=\realpageno \v!last \else\ifnum\plusone=\realpageno \v!first \else \__unknown__ \fi\fi} \let\v_page_layouts_pre_check\relax \def\page_layouts_check_default_indeed#1% {\edef\m_page_check{#1} \edef\m_page_state{\namedlayoutparameter\m_page_check\c!state}% \ifx\m_page_state\v!start \global\let\v_page_layouts_pre_check\currentlayout \global\let\currentlayout\m_page_check \page_layouts_synchronize \else\ifx\m_page_state\v!repeat \global\let\v_page_layouts_pre_check\relax \global\let\currentlayout\m_page_check \page_layouts_synchronize \fi\fi} \def\page_layouts_check_revert {\global\let\currentlayout\v_page_layouts_pre_check \global\let\v_page_layouts_pre_check\relax \page_layouts_synchronize} \def\page_layouts_check_default {\ifcsname\namedlayouthash\v_real_page_normal\c!state\endcsname \page_layouts_check_default_indeed\v_real_page_normal \else\ifcsname\namedlayouthash\v_real_page_reverse\c!state\endcsname \page_layouts_check_default_indeed\v_real_page_reverse \else\ifcsname\namedlayouthash\v_real_page_named\c!state\endcsname \page_layouts_check_default_indeed\v_real_page_named \else\ifcsname\namedlayouthash\v_real_page_current\c!state\endcsname \page_layouts_check_default_indeed\v_real_page_current \else\ifcsname\namedlayouthash\v_real_page_odd_or_even\c!state\endcsname \page_layouts_check_default_indeed\v_real_page_odd_or_even \else\ifx\v_page_layouts_pre_check\relax % okay \else \page_layouts_check_revert \fi\fi\fi\fi\fi\fi} \unexpanded\def\installlayoutmethod#1#2% {\setgvalue{\??layoutmethod#1}{#2}} \installlayoutmethod\v!default{\page_layouts_check_default} \installlayoutmethod\v!normal {\page_layouts_check_default} \def\page_layouts_check_next {\csname\??layoutmethod\ifcsname\??layoutmethod\layoutparameter\c!method\endcsname \layoutparameter\c!method \else \v!normal \fi\endcsname} \let\checkcurrentlayout\page_layouts_check_next % public and used in naw, so this synonym will stay % inheritance % % \definelayout % [test] % [width=12cm, % height=10cm] % % \definelayout % [more] % [test] % [height=12cm] % % testcase % % \setuppagenumbering[alternative=doublesided] % % \setuplayout [width=11cm] % \definelayout [odd] [backspace=1cm] % \definelayout [even] [backspace=4cm] % \definelayout [5] [backspace=5cm] % \definelayout [6] [backspace=5cm] % \definelayout [-2] [backspace=0cm,cutspace=0cm] % \definelayout [last] [backspace=0cm,cutspace=0cm] % % \checkcurrentlayout \showframe % % \starttext % \dorecurse{20} {\input knuth \endgraf \input tufte \endgraf} % \stoptext % Because we want to keep the set parameters as they are we use some % helpers to communicate between the several page building related % mechanism. \appendtoks \page_layouts_check_next \to \everystarttext \appendtoks \page_layouts_check_next \to \everyaftershipout \newconditional\c_page_layouts_location_is_set \def\page_layouts_location_reset % we start in the left top and mirror right pages {\setfalse\c_page_layouts_location_is_set \let\v_page_target_left_fill \relax \let\v_page_target_right_fill \hss % ? \relax \let\v_page_target_top_fill \relax \let\v_page_target_bottom_fill\vss} % \relax} \setvalue{\??layoutlocation\v!right }{\settrue\c_page_layouts_location_is_set \let\v_page_target_left_fill \hss \let\v_page_target_right_fill \relax} \setvalue{\??layoutlocation\v!left }{\settrue\c_page_layouts_location_is_set \let\v_page_target_left_fill \relax \let\v_page_target_right_fill \hss} \setvalue{\??layoutlocation\v!bottom }{\settrue\c_page_layouts_location_is_set \let\v_page_target_top_fill \vss \let\v_page_target_bottom_fill\relax} \setvalue{\??layoutlocation\v!top }{\settrue\c_page_layouts_location_is_set \let\v_page_target_top_fill \relax \let\v_page_target_bottom_fill\vss} \setvalue{\??layoutlocation\v!middle }{\settrue\c_page_layouts_location_is_set \let\v_page_target_left_fill \hss \let\v_page_target_right_fill \hss \let\v_page_target_top_fill \vss \let\v_page_target_bottom_fill\vss} \setvalue{\??layoutlocation\empty }{\setfalse\c_page_layouts_location_is_set % default also signal to scrn_ \let\v_page_target_right_fill \hss \let\v_page_target_bottom_fill\hss} \setvalue{\??layoutlocation\v!doublesided}{\settrue \c_page_target_print_doublesided} \setvalue{\??layoutlocation\v!singlesided}{\setfalse\c_page_target_print_doublesided} \def\page_target_check_centering_indeed#1% {\ifcsname\??layoutlocation#1\endcsname\csname\??layoutlocation#1\endcsname\fi} \unexpanded\def\page_target_check_centering {\setfalse\c_page_target_print_doublesided \page_layouts_location_reset \processcommacommand[\layoutparameter\c!location]\page_target_check_centering_indeed} % installers \def\installlayoutalternative#1#2% {\setgvalue{\??layoutalternative#1}{#2}} \def\page_boxes_construct_content_default#1#2#3% targetbox flusher box {\setbox#1\vbox {\offinterlineskip \begingroup % needed ? \uselayoutstyleandcolor\c!style\c!color \offinterlineskip \page_layouts_insert_elements % zero size \endgroup \page_insert_body#2#3}}% including footnotes \installlayoutalternative\v!default{\page_boxes_construct_content_default} \installlayoutalternative\v!normal {\page_boxes_construct_content_default} \def\page_boxes_construct_content % targetbox flusher box {\csname\??layoutalternative\ifcsname\??layoutalternative\layoutparameter\c!alternative\endcsname \layoutparameter\c!alternative \else \v!normal \fi\endcsname} %D \macros %D {adaptlayout} \installcorenamespace{adaptlayout} \installcorenamespace{pageadaptations} \installsetuponlycommandhandler \??adaptlayout {adaptlayout} \newdimen\d_page_adepts_pushed_text_height \newdimen\d_page_adepts_pushed_footer_height \newdimen\d_page_adepts_height \unexpanded\def\adaptlayout {\dodoubleempty\page_adapts_layout} \def\page_adapts_layout[#1][#2]% {\ifsecondargument \processcommalist[#1]{\page_adapts_layout_register{#2}}% \page_adapts_check \else \page_adapts_layout_indeed{#1}% \fi} \def\page_adapts_layout_register#1#2% {\setgvalue{\??pageadaptations#2}{\page_adapts_layout_indeed{#1}}} \let\p_adapts_height\zeropoint \let\p_adapts_lines \zerocount \def\page_adapts_layout_indeed#1% {\setupcurrentadaptlayout[\c!height=\zeropoint,\c!lines=\zerocount,#1]% \page_adepts_push \edef\p_adapts_height{\adaptlayoutparameter\c!height}% \edef\p_adapts_lines {\adaptlayoutparameter\c!lines}% \ifx\p_adapts_height\v!max \global\d_page_adepts_height\footerheight \else \global\d_page_adepts_height\dimexpr \ifnum\p_adapts_lines=\zerocount \p_adapts_height \else \p_adapts_lines\openlineheight \fi \relax \ifdim\d_page_adepts_height>\footerheight \global\d_page_adepts_height\footerheight \fi \fi \global\advance\textheight \d_page_adepts_height \global\advance\footerheight-\d_page_adepts_height \showmessage\m!layouts1{\the\d_page_adepts_height,\the\realpageno}% % this will become a better one (do we need insert correction?) \page_otr_command_set_vsize % \page_backgrounds_recalculate \global\let\page_adepts_push\relax \global\let\page_adepts_pop\page_adepts_pop_indeed} \def\page_adapts_check {\ifcsname\??pageadaptations\the\realpageno\endcsname \page_adapts_check_indeed \fi} \def\page_adapts_check_indeed {\getvalue{\??pageadaptations\the\realpageno}% \letvalue{\??pageadaptations\the\realpageno}\relax} \def\page_adepts_push_indeed {\global\d_page_adepts_pushed_text_height \textheight \global\d_page_adepts_pushed_footer_height\footerheight} \def\page_adepts_pop_indeed {\global\textheight \d_page_adepts_pushed_text_height \global\footerheight\d_page_adepts_pushed_footer_height \page_layouts_synchronize \global\let\page_adepts_push\page_adepts_push_indeed \global\let\page_adepts_pop\relax} \let\page_adepts_pop \relax \let\page_adepts_push\page_adepts_push_indeed \unexpanded\def\page_adapts_synchronize % used elsewhere {\page_adepts_pop \page_adapts_check} \def\page_adapts_status_info % used elsewhere {\ifx\page_adepts_pop\relax \else \space(adept: \the\d_page_adepts_height)\space \fi \the\realpageno} %D \macros %D {startlayout,stoplayout} \unexpanded\def\startlayout[#1]% {\page \pushmacro\currentlayout \doiflayoutdefinedelse{#1}{\setuplayout[#1]}\donothing} % {\setuplayout[\currentlayout]}} \unexpanded\def\stoplayout {\page \popmacro\currentlayout \setuplayout[\currentlayout]} % NOG EENS NAGAAN WANNEER NU GLOBAL EN WANNEER NIET \ifx\doifelselayoutsomeline\undefined % defined in page-txt \let\doifelselayoutsomeline\secondofthreearguments \fi \def\compensatevsizeheader {\advance\textheight-\dimexpr\headerheight+\headerdistance\relax} \def\compensatevsizefooter {\advance\textheight-\dimexpr\footerheight+\footerdistance\relax} \def\globalcompensatevsizeheader{\global\advance\textheight-\dimexpr\headerheight+\headerdistance\relax} \def\globalcompensatevsizefooter{\global\advance\textheight-\dimexpr\footerheight+\footerdistance\relax} \def\compensatevsizeheaderzero{\headerheight\zeropoint\page_layouts_set_distances} \def\compensatevsizefooterzero{\footerheight\zeropoint\page_layouts_set_distances} \def\page_layouts_set_modes {\ifzeropt\headerheight \resetsystemmode\v!header \else \setsystemmode\v!header \fi \ifzeropt\footerheight \resetsystemmode\v!footer \else \setsystemmode\v!footer \fi} \def\calculatevsizes % name will change {\textheight\makeupheight \doifelselayoutsomeline\v!header\compensatevsizeheader\donothing \doifelselayoutsomeline\v!footer\compensatevsizefooter\donothing \page_layouts_set_modes \resetglobal \page_otr_command_set_vsize} \def\calculateglobalvsizes % name will change {\global\textheight\makeupheight \doifelselayoutsomeline\v!header\globalcompensatevsizeheader\donothing \doifelselayoutsomeline\v!footer\globalcompensatevsizefooter\donothing \page_layouts_set_modes \page_otr_command_set_vsize} \def\calculatereducedvsizes % name will change {\textheight\makeupheight \doifelselayoutsomeline\v!header\compensatevsizeheader\compensatevsizeheaderzero \doifelselayoutsomeline\v!footer\compensatevsizefooter\compensatevsizefooterzero} \newdimen\innermakeupwidth % special purpose \newdimen\innermakeupmargin % special purpose \newconditional\innermakeupcompensation \settrue\innermakeupcompensation \def\compensatedinnermakeupmargin {\dimexpr\ifconditional\innermakeupcompensation+\innermakeupmargin\else\zeropoint\fi\relax} \def\freezetextwidth % name will change % \makeupwidth may be set to \textwidth {\textwidth\makeupwidth % which is a tricky but valid value \edef\m_currentlayout_text_width {\layoutparameter\c!textwidth }% \edef\m_currentlayout_text_margin{\layoutparameter\c!textmargin}% \ifx\m_currentlayout_text_width\empty \else \textwidth\m_currentlayout_text_width % local \fi \global\innermakeupwidth\textwidth \ifx\m_currentlayout_text_margin\empty \global\innermakeupmargin\zeropoint \else \global\innermakeupmargin\m_currentlayout_text_margin\relax \fi \scratchdimen\dimexpr\innermakeupmargin+\innermakeupmargin\relax \global\advance\innermakeupwidth-\scratchdimen \advance\textwidth-\scratchdimen} % local \def\calculatehsizes % name will change {\freezetextwidth \page_otr_command_set_hsize} % The next few are better off in page-ini.mkiv %D When we start at an even page, we need to swap the layout %D differently. We cannot adapt the real page number, since %D it is used in cross referencing. The next switch is set %D when we start at an even page. % We could use nested if here plus some \@EAEAEA's but but the % next variant has less expansion which is nicer in tracing. % #single #left #right \def\doifoddpageelse {\ifodd\pagenoshift \expandafter\page_layouts_if_odd_else_yes \else \expandafter\page_layouts_if_odd_else_nop \fi} \def\page_layouts_if_odd_else_yes {\ifodd\realpageno \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\page_layouts_if_odd_else_nop {\ifodd\realpageno \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \let\doifonevenpaginaelse\doifoddpageelse \def\page_layouts_if_odd_else_again#1{\doifoddpageelse} \def\doifbothsidesoverruled {\ifdoublesided \expandafter\page_layouts_if_odd_else_again \else \expandafter\firstofthreearguments \fi} \def\doifbothsides% #1 #2 #3 {\ifdoublesided \expandafter\page_layouts_if_both_sides \else \expandafter\firstofthreearguments \fi} \def\page_layouts_if_both_sides {\ifsinglesided \expandafter\firstofthreearguments \else \expandafter\page_layouts_if_odd_else_again \fi} \newdimen\texthoffset \def\settexthoffset % name will change {\texthoffset\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}} % The next hack is too tricky as we may shipout more pages: % % \def\freezepagestatechecks % {\the\everyfreezepagestatechecks} % % \newtoks \everyfreezepagestatechecks % % \appendtoks % \doifbothsides % {\let\doifbothsides\firstofthreearguments}% % {\let\doifbothsides\secondofthreearguments}% % {\let\doifbothsides\thirdofthreearguments}% % \rightorleftpageaction % {\let\rightorleftpageaction\firstoftwoarguments}% % {\let\rightorleftpageaction\secondoftwoarguments}% % \doifmarginswapelse % {\let\doifmarginswapelse\firstoftwoarguments}% % {\let\doifmarginswapelse\secondoftwoarguments}% % \to \everyfreezepagestatechecks % % \prependtoks % \freezepagestatechecks % \to \everybeforeshipout \def\goleftonpage % name will change (we could cache) {\hskip-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax} \def\doifmarginswapelse#1#2% {\doifbothsides{#1}{#1}{#2}} \def\swapmargins % name will change {\doifmarginswapelse\relax\doswapmargins} \def\doswapmargins % name will change {\let\swapmargins \relax % to prevent local swapping \let\doswapmargins\relax % to prevent local swapping \the\everyswapmargins} \def\rightorleftpageaction {\ifdoublesided \expandafter\page_layouts_right_or_left_page_action \else \expandafter\firstoftwoarguments \fi} \def\page_layouts_right_or_left_page_action {\ifsinglesided \expandafter\firstoftwoarguments \else \expandafter\doifoddpageelse \fi} \def\outermarginwidth {\rightorleftpageaction\rightmarginwidth \leftmarginwidth } \def\innermarginwidth {\rightorleftpageaction\leftmarginwidth \rightmarginwidth} \def\outermargindistance{\rightorleftpageaction\rightmargindistance\leftmargindistance } \def\innermargindistance{\rightorleftpageaction\leftmargindistance \rightmargindistance} \def\outeredgewidth {\rightorleftpageaction\rightedgewidth \leftedgewidth } \def\inneredgewidth {\rightorleftpageaction\leftedgewidth \rightedgewidth} \def\outeredgedistance {\rightorleftpageaction\rightedgedistance\leftedgedistance } \def\inneredgedistance {\rightorleftpageaction\leftedgedistance \rightedgedistance} \def\outerspacewidth {\rightorleftpageaction\cutspace \backspace} \def\innerspacewidth {\rightorleftpageaction\backspace\cutspace } \def\leftmargintotal {\dimexpr\leftmarginwidth +\leftmargindistance \relax} \def\rightmargintotal {\dimexpr\rightmarginwidth+\rightmargindistance\relax} \def\leftedgetotal {\dimexpr\leftedgewidth +\leftedgedistance \relax} \def\rightedgetotal {\dimexpr\rightedgewidth +\rightedgedistance \relax} \def\leftsidetotal {\dimexpr\leftmarginwidth +\leftedgetotal \relax} \def\rightsidetotal {\dimexpr\rightmarginwidth+\rightedgetotal\relax} \def\leftcombitotal {\dimexpr\leftmargintotal +\leftedgetotal \relax} \def\rightcombitotal {\dimexpr\rightmargintotal+\rightedgetotal\relax} \def\innermargintotal {\dimexpr\innermarginwidth+\innermargindistance\relax} \def\outermargintotal {\dimexpr\outermarginwidth+\outermargindistance\relax} \def\inneredgetotal {\dimexpr\inneredgewidth +\inneredgedistance \relax} \def\outeredgetotal {\dimexpr\outeredgewidth +\outeredgedistance \relax} \def\innercombitotal {\dimexpr\innermargintotal+\inneredgetotal\relax} \def\outercombitotal {\dimexpr\outermargintotal+\outeredgetotal\relax} \def\innersidetotal {\dimexpr\innermarginwidth+\inneredgetotal\relax} \def\outersidetotal {\dimexpr\outermarginwidth+\outeredgetotal\relax} %D \macros %D {startlocallayout} %D %D These macros should be used with care. They permit local %D layouts (as used in fitting pages, see \type {page-app.tex}). %D This is kind of obsolete now that we have \type %D {\definelayout}, so this hack will disappear in future %D versions. \unexpanded\def\startlocallayout {\globalpushmacro\page_paper_restore \globalpushmacro\currentlayout} \unexpanded\def\stoplocallayout {\globalpopmacro\currentlayout \globalpopmacro\page_paper_restore \page_paper_restore \setuplayout\relax} %D \macros %D {showprint, showframe, showlayout, showsetups} %D %D We predefine a couple of tracing macros. %D %D \showsetup{showprint} %D \showsetup{showframe} %D \showsetup{showlayout} %D \showsetup{showsetups} %D %showsetup{showmargins} \fetchruntimecommand \showprint {page-run} \fetchruntimecommand \showframe {page-run} \fetchruntimecommand \showlayout {page-run} \fetchruntimecommand \showsetups {page-run} \fetchruntimecommand \showmargins {page-run} %D The default dimensions are quite old and will not change. %D The funny fractions were introduced when we went from fixed %D dimensions to relative ones. Since \CONTEXT\ is a dutch %D package, the dimensions are based on the metric system. The %D asymmetrical layout is kind of handy for short %D quick||and||dirty stapled documents. %D %D Although valid, it is not a real good idea to use %D dimensions based on the \type {em} unit. First of all, %D since there are no fonts loaded yet, this dimension makes %D no sense, and second, you would loose track of values, %D since they could change while going to a new page, %D depending on the current font setting. \setuplayout [ \c!topspace=.08417508418\paperheight, % 2.5cm \c!top=\zeropoint, \c!topdistance=\zeropoint, \c!header=.06734006734\paperheight, % 2.0cm \c!headerdistance=\zeropoint, \c!height=.84175084175\paperheight, % 25.0cm \c!footerdistance=\layoutparameter\c!headerdistance, \c!footer=.06734006734\paperheight, % 2.0cm \c!bottomdistance=\layoutparameter\c!topdistance, \c!bottom=\zeropoint, \c!backspace=.11904761905\paperwidth, % 2.5cm \c!edge=\zeropoint, \c!edgedistance=\layoutparameter\c!margindistance, \c!margin=.12649983170\paperwidth, % snijwit-2*afstand \c!margindistance=.02008341748\paperwidth, % 12.0pt \c!leftedge=\layoutparameter\c!edge, \c!leftedgedistance=\layoutparameter\c!edgedistance, \c!leftmargin=\layoutparameter\c!margin, \c!leftmargindistance=\layoutparameter\c!margindistance, \c!width=.71428571429\paperwidth, % 15.0cm \dimexpr\ \c!rightmargindistance=\layoutparameter\c!margindistance, \c!rightmargin=\layoutparameter\c!margin, \c!rightedgedistance=\layoutparameter\c!edgedistance, \c!rightedge=\layoutparameter\c!edge, \c!veroffset=\zeropoint, \c!bottomspace=\zeropoint, \c!horoffset=\zeropoint, \c!cutspace=\zeropoint, \c!textwidth=, % dangerous option -> centered / local \c!textmargin=, % dangerous option -> both sides \c!textdistance=\zeropoint, % shift down on grid \c!style=, \c!color=, \c!marking=\v!off, \c!location=,% \v!singlesided, but unset is signal (no other default, spoils arrange) \c!state=\v!start, \c!scale=1, \c!sx=1, \c!sy=1, \c!nx=1, \c!ny=1, \c!dx=\zeropoint, \c!dy=\zeropoint, \c!grid=\v!no, \c!preset=, \c!setups=\systemsetupsprefix\s!default, \c!clipoffset=\zeropoint, \c!lines=0, \c!paper=, % for foxet \c!page=, % for foxet \c!columns=\plusone, \c!columndistance=\zeropoint] %D First we define a whole range of (DIN) papersizes, %D of which the A-series makes most sense. We enable checking. \definepapersize [A0] [\c!width=841mm,\c!height=1189mm] \definepapersize [A1] [\c!width=594mm,\c!height=841mm] \definepapersize [A2] [\c!width=420mm,\c!height=594mm] \definepapersize [A3] [\c!width=297mm,\c!height=420mm] \definepapersize [A4] [\c!width=210mm,\c!height=297mm] \definepapersize [A5] [\c!width=148mm,\c!height=210mm] \definepapersize [A6] [\c!width=105mm,\c!height=148mm] \definepapersize [A7] [\c!width=74mm,\c!height=105mm] \definepapersize [A8] [\c!width=52mm,\c!height=74mm] \definepapersize [A9] [\c!width=37mm,\c!height=52mm] \definepapersize [A10] [\c!width=26mm,\c!height=37mm] \definepapersize [B0] [\c!width=1000mm,\c!height=1414mm] \definepapersize [B1] [\c!width=707mm,\c!height=1000mm] \definepapersize [B2] [\c!width=500mm,\c!height=707mm] \definepapersize [B3] [\c!width=353mm,\c!height=500mm] % [\c!width=354mm,\c!height=500mm] \definepapersize [B4] [\c!width=250mm,\c!height=353mm] % [\c!width=250mm,\c!height=354mm] \definepapersize [B5] [\c!width=176mm,\c!height=250mm] % [\c!width=177mm,\c!height=250mm] \definepapersize [B6] [\c!width=125mm,\c!height=176mm] % [\c!width=125mm,\c!height=177mm] \definepapersize [B7] [\c!width=88mm,\c!height=125mm] \definepapersize [B8] [\c!width=62mm,\c!height=88mm] % [\c!width=63mm,\c!height=88mm] \definepapersize [B9] [\c!width=44mm,\c!height=62mm] % [\c!width=44mm,\c!height=63mm] \definepapersize [B10] [\c!width=31mm,\c!height=44mm] \definepapersize [C0] [\c!width=917mm,\c!height=1297mm] \definepapersize [C1] [\c!width=648mm,\c!height=917mm] % [\c!width=649mm,\c!height=917mm] \definepapersize [C2] [\c!width=458mm,\c!height=648mm] % [\c!width=459mm,\c!height=649mm] \definepapersize [C3] [\c!width=324mm,\c!height=458mm] % [\c!width=324mm,\c!height=459mm] \definepapersize [C4] [\c!width=229mm,\c!height=324mm] \definepapersize [C5] [\c!width=162mm,\c!height=229mm] \definepapersize [C6] [\c!width=114mm,\c!height=162mm] % [\c!width=115mm,\c!height=162mm] \definepapersize [C7] [\c!width=81mm,\c!height=114mm] % [\c!width=81mm,\c!height=115mm] \definepapersize [C8] [\c!width=57mm,\c!height=81mm] \definepapersize [C9] [\c!width=40mm,\c!height=57mm] \definepapersize [C10] [\c!width=28mm,\c!height=40mm] %D Per August 2004 the rounding of some (seldom used) sizes %D were corrected top the latest DIN specifications. Peter %D Rolf came up with these and a few more missing sizes. %D Watch out: spaces and slashes! \definepapersize [4 A0] [\c!width=1682mm,\c!height=2378mm] \definepapersize [2 A0] [\c!width=1189mm,\c!height=1682mm] \definepapersize [C6/C5] [\c!width=114mm,\c!height=229mm] %D Because there are no standardized screen sizes, we define %D a bunch of sizes with $4:3$ ratios. The \type {S6} size is %D nearly as wide as a sheet of \type {A4} paper. \definepapersize [S3] [\c!width=300pt,\c!height=225pt] \definepapersize [S4] [\c!width=400pt,\c!height=300pt] \definepapersize [S5] [\c!width=500pt,\c!height=375pt] \definepapersize [S6] [\c!width=600pt,\c!height=450pt] \definepapersize [S8] [\c!width=800pt,\c!height=600pt] \definepapersize [SL] [\c!width=640pt,\c!height=400pt] % low \definepapersize [SM] [\c!width=720pt,\c!height=450pt] % medium \definepapersize [SW] [\c!width=800pt,\c!height=450pt] % wide \definepapersize [HD] [\c!width=1920pt,\c!height=1080pt] \definepapersize [HD+] [\c!width=1920pt,\c!height=1200pt] %D These are handy too: \definepapersize [S33] [\c!width=300pt,\c!height=300pt] \definepapersize [S44] [\c!width=400pt,\c!height=400pt] \definepapersize [S55] [\c!width=500pt,\c!height=500pt] \definepapersize [S66] [\c!width=600pt,\c!height=600pt] %D One may wonder if \TEX\ should be used for typesetting %D \CDROM\ covers, but it does not hurt to have the paper size %D ready. \definepapersize [CD] [\c!width=120mm,\c!height=120mm] %D The next series is for our English speaking friends who %D decided to stick to non metric values. Thanks to Nelson %D Beebe for completing the inch based list. \definepapersize [letter] [\c!width=8.5in,\c!height=11in] \definepapersize [ledger] [\c!width=11in,\c!height=17in] \definepapersize [tabloid] [\c!width=17in,\c!height=11in] \definepapersize [legal] [\c!width=8.5in,\c!height=14in] \definepapersize [folio] [\c!width=8.5in,\c!height=13in] \definepapersize [executive] [\c!width=7.25in,\c!height=10.5in] \definepapersize [A] [\c!width=8.5in,\c!height=11in] % 1 sheet \definepapersize [B] [\c!width=11in,\c!height=17in] % 2 sheets \definepapersize [C] [\c!width=17in,\c!height=22in] % 4 sheets %D The next set is for Tobias Burnus, who gave me the sizes. \definepapersize [envelope 9] [\c!width=8.88in,\c!height=3.88in] \definepapersize [envelope 10] [\c!width=9.5in,\c!height=4.13in] \definepapersize [envelope 11] [\c!width=10.38in,\c!height=4.5in] \definepapersize [envelope 12] [\c!width=11.0in,\c!height=4.75in] \definepapersize [envelope 14] [\c!width=11.5in,\c!height=5.0in] \definepapersize [monarch] [\c!width=7.5in,\c!height=3.88in] \definepapersize [check] [\c!width=8.58in,\c!height=3.88in] \definepapersize [DL] [\c!width=110mm,\c!height=220mm] % [\c!width=220mm,\c!height=110mm] \definepapersize [E4] [\c!width=280mm,\c!height=400mm] %D The next three sets are supplied by Taco: \definepapersize [RA0] [\c!width=860mm,\c!height=1220mm] \definepapersize [RA1] [\c!width=610mm,\c!height=860mm] \definepapersize [RA2] [\c!width=430mm,\c!height=610mm] \definepapersize [RA3] [\c!width=305mm,\c!height=430mm] \definepapersize [RA4] [\c!width=215mm,\c!height=305mm] %D ISO SRA (supplementary raw A) sizes: \definepapersize [SRA0] [\c!width=900mm,\c!height=1280mm] \definepapersize [SRA1] [\c!width=640mm,\c!height=900mm] \definepapersize [SRA2] [\c!width=450mm,\c!height=640mm] \definepapersize [SRA3] [\c!width=320mm,\c!height=450mm] \definepapersize [SRA4] [\c!width=225mm,\c!height=320mm] %D Swedish thesis formats: \definepapersize [G5] [\c!width=169mm,\c!height=239mm] \definepapersize [E5] [\c!width=155mm,\c!height=220mm] %D Industry invention: \definepapersize [A3plus] [\c!width=329mm,\c!height=483mm] %D We can now default to a reasonable size. We match the print %D paper size with the typeset paper size. This setting should %D come after the first layout specification (already done). % \definepapersize % [\v!default] % [ \c!width=\paperwidth, % \c!height=\paperheight] % \definepapersize % [samesized] % [ \c!width=\paperwidth, % \c!height=\paperheight] \definepapersize [oversized] [ \c!width=\dimexpr\paperwidth +1.5cm\relax, \c!height=\dimexpr\paperheight+1.5cm\relax] \definepapersize [undersized] [ \c!width=\dimexpr\paperwidth -1.5cm\relax, \c!height=\dimexpr\paperheight-1.5cm\relax] \definepapersize [doublesized] [ \c!width=\dimexpr \paperwidth \relax, \c!height=\dimexpr2\paperheight\relax] \definepapersize [doubleoversized] [ \c!width=\dimexpr \paperheight+1.5cm\relax, \c!height=\dimexpr2\paperwidth +1.5cm\relax] % \setuppapersize % [A4][A4] \setuppapersize [A4] % [samesized] %D A few goodies: \definelayout [\v!page] \setuplayout [\v!page] [\c!backspace=\zeropoint, \c!cutspace=\zeropoint, \c!topspace=\zeropoint, \c!bottomspace=\zeropoint, \c!margin=\zeropoint, \c!edge=\zeropoint, \c!header=\zeropoint, \c!footer=\zeropoint, \c!top=\zeropoint, \c!bottom=\zeropoint, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!leftedge=\zeropoint, \c!rightedge=\zeropoint, \c!textdistance=\zeropoint, \c!width=\v!middle, \c!height=\v!middle, \c!lines=0, \c!grid=\v!no] \definelayout [\v!middle] [\c!width=\v!middle, \c!height=\v!middle] \protect \endinput ������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-def.mkii�������������������������������0000644�0001750�0001750�00000075071�11754241457�024256� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=spec-def, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 used to be integrated in \type {spec-ini}, %D but testing optimization is more convenient this way. \writestatus{loading}{ConTeXt Special Macros / Definitions} \unprotect %D Ok, messy, but we need this because we load drivers before %D references. \newif\ifcollectreferenceactions %D The following libraries are defined. Two postscript %D drivers are supported, as well as two mechanisms for %D interactive texts. %D %D \startlinecorrection %D \starttable[|l|l|l|l|l|] %D \HL %D \NC \bf file \NC %D \bf name \NC %D \bf calls \NC %D \bf support \NC %D \bf program / driver \NC\SR %D \HL %D \NC \tttf spec-tex \NC %D \tttf tex \NC %D \NC %D Generic \TEX\ (\DVI) \NC %D (default) \NC\FR %D \NC \tttf spec-tpd \NC %D \tttf \PDF \NC %D \NC %D Han The Thanh \NC %D (pdftex) \NC\MR %D \NC \tttf spec-ps \NC %D \tttf postscript \NC %D \NC %D Adobe PostScript \NC %D (default) \NC\MR %D \NC \tttf spec-tr \NC %D \tttf rokicki \NC %D \tttf postscript \NC %D Thomas Rokicki \NC %D (dvips) \NC\MR %D \NC \tttf spec-yy \NC %D \tttf yandy \NC %D \tttf postscript \NC %D YandY \NC %D (dvipsone, dviwindo) \NC\MR %D \NC \tttf spec-pdf \NC %D \tttf pdf \NC %D \NC %D Adobe PDF \NC %D (Acrobat) \NC\MR %D \NC \tttf spec-win \NC %D \tttf dviwindo \NC %D YandY \NC %D (dviwindo) \NC\MR %D \NC \tttf spec-htm \NC %D \tttf html \NC %D \NC %D HTML V 2.0 \NC %D (dvips) \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D \macros %D {dostartgraymode,dostopgraymode, %D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode,dostopcolormode} %D %D Switching to and from color can be done in two ways: %D %D \startitemize[packed,n] %D \item insert driver specific commands %D \item pass instructions to the output device %D \stopitemize %D %D The first approach is more general and lays the %D responsibility at the driver side. Probably due to the fact %D that \TEX\ does not directly support color, we have been %D confronted for the last few years with changing special %D definitions. The need for support depends on how a macro %D package handles colored text that crosses the page boundary. %D Again, there are two approaches. %D %D \startitemize[packed,n] %D \item let \TEX\ do the job %D \item let the driver handle things %D \stopitemize %D %D The first approach is as driver independant as possible and %D can easily be accomplished by using \TEX's mark mechanism. %D In \CONTEXT\ we follow this approach. More and more, drivers %D are starting to support color, including stacking them. %D %D Colors as well as grayscales can be represented in scales %D from~0 to~1. When drivers use values in the range 0..255, %D this value has to be adapted in the translation process. %D Technically it's possible to get a grayscale from combining %D colors. In the \cap{RGB} color system, a color with Red, %D Green and Blue components of 0.80 show the same gray as a %D Gray Scale specified 0.80. The \cap{CMYK} color system %D supports a Black component apart from Cyan, Magenta and %D Yellow. %D %D Depending on the target format, color support differs from %D gray support. PostScript for example offers different %D operators for setting gray and color. This is because %D printing something using three colors is someting else than %D printing with just black. %D %D In \CONTEXT\ we have implemented a color subsystem that %D supports the use of well defined colors that, when printed %D in black and white, still can be distinguished. This %D approach enables us to serve both printed and electronic %D versions, using colored text and illustrations. More on the %D fundamentals of this topic can be found in the \cap{MAPS} of %D the Dutch User Group, 14 (95.1). %D %D To satisfy all those needs, we define four specials which %D supply enough information for drivers to act upon. We %D could have used more general commands with the keywords %D 'rgb' and 'gray', but because these specials are used often, %D we prefer the more direct and shorter alternative. %D %D We start with the installation of color and grayscale %D specials. The values are in the range 0..1 (e.g. 0.25). %D %D \starttyping %D \dostartgraymode {gray} ... \dostopgraymode %D \dostartrgbcolormode {red} {green} {blue} ... \dostopcolormode %D \dostartcmykcolormode {cyan} {magenta} {yellow} {black} ... \dostopcolormode %D \dostartgraycolormode {gray} ... \dostopcolormode %D \stoptyping %D %D Because we can expect conflicts between drivers, we %D implement them as category \type{or}. In previous versions %D of \DVIPSONE\ the use of their color||specials did not %D interfere with the PostScript ones, but recent versions do. \installspecial [\dostartgraymode] [or] [1] \installspecial [\dostopgraymode] [or] [0] \installspecial [\dostartrgbcolormode] [or] [3] \installspecial [\dostartcmykcolormode] [or] [4] \installspecial [\dostartgraycolormode] [or] [1] \installspecial [\dostopcolormode] [or] [0] %D New and experimental: \installspecial [\dostartspotcolormode] [or] [2] \installspecial [\doregisterrgbspotcolor] [or] [7] \installspecial [\doregistercmykspotcolor] [or] [8] \installspecial [\doregistergrayspotcolor] [or] [5] \installspecial [\doregisterrgbindexcolor] [or] [7] \installspecial [\doregistercmykindexcolor] [or] [8] \installspecial [\doregistergrayindexcolor] [or] [5] \installspecial [\doregisterspotcolorname] [or] [2] \installspecial [\dostartnonecolormode] [or] [0] \installspecial [\doregisternonecolor] [or] [0] %D For some drivers, the stop special is of no use and can %D simply call the start one with zero arguments. %D \macros %D {dogetfiguresize,doinsertfile,doinsertMPfile} %D %D Probably the most problematic special is the following %D one. Because we want to be able to support different %D schemes, we pass a lot of data to it. %D %D The support of inserting files (like illustrations) comes in %D many flavors. Some drivers use scales, some take dimensions. %D Some need offsets and others act on stored characteristics. %D They need one thing in common: a filename. Although separate %D specials for different formats sometimes are more clear, we %D decided to combine them all in one: %D %D \starttyping %D \doinsertfile {type,method} {file,label} %D {xscale} {yscale} {x} {y} {w} {h} %D {options} %D \stoptyping %D %D The scale is given percents, the other values are base %D points. %D %D Per 2006 we have simplified this model. The amount of drivers %D is not growing and all support scaling. We pass variables via %D Driver specific macros. %D %D \starttyping %D \doinsertfile %D \stoptyping %D %D The special is implemented as \type{or}. Because \DVIPSONE\ %D understands them all, a chain of alternatives would generate %D multiple occurrences of the same illustration. %D %D When option 1 is passed, the viewers is asked to present a %D preview, like the first frame of a movie. \installspecial [\dogetfiguresize][or] [0] % now a special \installspecial [\doinsertfile] [or] [0] % [9] \installspecial [\doinsertMPfile] [or] [1] % speed up %D No start||stop construction is needed here, because there in %D no further interference of \TEX. All dimensions are output %D in points and scales as a number, where 100 equal 100\%. (We %D used to pass scaled points). %D \macros %D {doinsertsoundtrack} %D %D Sounds are (for the moment) just files with %D associated options. %D %D \starttyping %D \doinsertsoundtrack {file} {label} {options} %D \stoptyping \installspecial [\doinsertsoundtrack] [or] [3] %D \macros %D {dogetnofinsertpages} %D %D Some file formats support more than one page, like \PDF, %D and for special applications, one may want to have access %D to the total number of pages. %D %D \starttyping %D \dogetnofinsertpages{filename} %D \stoptyping %D %D The number is also available after the insert is placed, %D since inclusion may take place immediate when an insert is %D called upon. \def\nofinsertpages{1} % one of the few 'talk backs' \installspecial [\dogetnofinsertpages] [or] [1] %D \macros %D {dostartrotation, %D dostoprotation} %D %D We support rotation with the special: %D %D \starttyping %D \dostartrotation {angle} ... \dostoprotation %D \stoptyping %D %D For the moment these specials are installed as %D category \type{or}. \installspecial [\dostartrotation] [or] [1] \installspecial [\dostoprotation] [or] [0] %D \macros %D {dostartscaling, %D dostopscaling} %D %D Scaling is also supported: %D %D \starttyping %D \dostartscaling {x} {y} ... \dostopscaling %D \stoptyping %D %D Like the previous one, these specials are of category %D \type{or}. \installspecial [\dostartscaling] [or] [2] \installspecial [\dostopscaling] [or] [0] %D \macros %D {dostartmirroring, %D dostopmirroring} %D %D And indeed, mirroring is there too: %D %D \starttyping %D \dostartmirroring {x} {y} ... \dostopmirroring %D \stoptyping %D %D Again these specials are installed as category \type{or}. \installspecial [\dostartmirroring] [or] [0] \installspecial [\dostopmirroring] [or] [0] %D \macros %D {dostartnegative, %D dostopnegative} %D %D When producing output for an image setter, negating the %D page comes into view. Here are the tools: \installspecial [\dostartnegative] [or] [0] \installspecial [\dostopnegative] [or] [0] %D \macros %D {dostartoverprint, %D dostopoverprint} %D %D Rudimentary overprint (knockout) control is implemented %D using: \installspecial [\dostartoverprint] [or] [0] \installspecial [\dostopoverprint] [or] [0] %D The following two specials are used in for instance \type %D {\vadjust}'d margin material inside colored paragraphs. \installspecial [\dostartgraphicgroup] [or] [0] \installspecial [\dostopgraphicgroup ] [or] [0] %D \macros %D {doselectfirstpaperbin, %D doselectsecondpaperbin} %D %D Here are some very printer||specific ones. No further %D comment. \installspecial [\doselectfirstpaperbin] [or] [0] \installspecial [\doselectsecondpaperbin] [or] [0] %D \macros %D {doovalbox} %D %D When we look at the implementation, this is a complicated %D one. There are seven arguments. %D %D \starttyping %D \doovalbox {w} {h} {d} {linewidth} {radius} {stroke} {fill} {variant} %D \stoptyping %D %D This command has to return a \type{\vbox} which can be used %D to lay over another one (with text). The radius is in %D degrees, the stroke and fill are~\type{1} (true) of~\type{0} %D (false). \installspecial [\doovalbox] [or] [8] %D \macros %D {dostartclipping,dostopclipping} %D %D Clipping is implemented in such a way that an arbitrary %D can be fed. %D %D \starttyping %D \dostartclipping {pathname}{width} {height} %D \dostopclipping %D \stoptyping %D %D \installspecial [\dostartclipping] [or] [3] \installspecial [\dostopclipping] [or] [0] %D \macros %D {dosetupidentity} %D %D We can declare some characteristics of the document with %D %D \starttyping %D \dosetupidentity {title} {subject} {author} {creator} {date} {keys} %D \stoptyping %D %D All data is in string format. \installspecial [\dosetupidentity] [and] [6] %D \macros %D {dosetuppaper} %D %D This special can be used to tell the driver what page size %D to use. The special takes three arguments. %D %D \starttyping %D \dosetuppaper {type} {width} {height} %D \stoptyping %D %D The type is one of the common identifiers, like A4, A5 or %D B2. \installspecial [\dosetuppaper] [and] [3] %D \macros %D {dosetupprinter} %D %D Some drivers enable the user to specify the paper type %D used and/or page dimensions to be taken into account. %D %D \starttyping %D \dosetupprinter {type} {hoffset} {voffset} {width} {height} %D \stoptyping %D %D The first argument is one of \type{letter}, \type{legal}, %D \type{A4}, \type{A5} etc. The dimensions are in %D basepoints. \installspecial [\dosetupprinter] [and] [5] %D \macros %D {dosetupopenaction, dosetupclosaction, %D dosetupopenpageaction, dosetupclospageaction, %D dosetupinteraction, %D dosetupscreen, %D dosetupviewmode} %D %D Here come some obscure interactive commands. Probably the %D specs will change with the development of the macros that %D use them. %D %D The first ones can be used to set up the interaction. %D %D \starttyping %D \dosetupinteraction %D \stoptyping %D %D Normally this command does nothing but giving a message %D that some scheme is supported. %D %D \starttyping %D \dosetupstartaction %D \dosetupstopaction %D \stoptyping %D %D These two setup the actions to be executed when the document %D is opened and closed. %D %D The next commands sets up the page and screen. They are %D kind of related. %D %D \starttyping %D \dosetuppage {hoffset} {voffset} {width} {height} {options} %D \dosetupscreen {hoffset} {voffset} {width} {height} {options} %D \stoptyping %D %D The first four arguments are in points. Option~1 results in a %D full screen launch. %D %D \starttyping %D \dosetuppageview {keyword} %D \stoptyping %D %D For the moment we only support \type{fit}. \installspecial [\dosetupinteraction] [and] [0] \installspecial [\dosetupopenaction] [and] [0] \installspecial [\dosetupscreen] [and] [5] \installspecial [\dosetuppageview] [and] [1] \installspecial [\dosetupcloseaction] [and] [0] \installspecial [\dosetupopenpageaction] [and] [0] \installspecial [\dosetupclosepageaction] [and] [0] \installspecial [\dosetuprenderingopenpageaction] [and] [0] \installspecial [\dosetuprenderingclosepageaction] [and] [0] % new, yet undocumented, replaces \dosetupscreen \installspecial [\dosetupcropbox] [and] [4] \installspecial [\dosetuptrimbox] [and] [4] \installspecial [\dosetupartbox] [and] [4] \installspecial [\dosetupbleedbox] [and] [4] %D \macros %D {dostarthide, %D dostophide} %D %D Not every part of the screen is suitable for paper. Menus %D for instance have no meaning on an non||interactive medium. %D These elements are hidden by means of: %D %D \starttyping %D \dostarthide %D \dostophide %D \stoptyping \installspecial [\dostarthide] [or] [0] \installspecial [\dostophide] [or] [0] %D \macros %D {dostartgotolocation, dostopgotolocation, %D dostartgotorealpage, dostopgotorealpage} %D %D When we want to support hypertext buttons, again we have %D to deal with two concepts. %D %D \startitemize[packed,n] %D \item let \TEX\ highlight the text %D \item let the driver show us where to click %D \stopitemize %D %D The first approach is the most secure one. It gives us %D complete control over the visual appearance of hyper %D buttons. The second alternative lets the driver guess what %D part of the text needs highlighting. As long as we deal with %D not too complicated textual buttons, this is no problem. %D It's even a bit more efficient when we take long mid %D paragraph active regions into account. When we let \TEX\ %D handle active sentences {\em for instance marked like this %D one}, we have to take care of line- and pagebreaks ourselve. %D However, it's no trivial matter to let a driver find out %D where things begin and end. Because most hyperlinks can be %D found in tables of contents and registers, the saving in %D terms of bytes can be neglected and the first approach is a %D clear winner. %D %D The most convenient way of cross||referencing is using named %D destinations. A more simple scheme is using page numbers as %D destinations. Because the latter alternative can often be %D implemented more efficient, and because we cannot be sure %D what scheme a driver supports, we always have to supply a %D pagenumber, even when we use named destinations. %D %D To enable a driver to find out what to make active, we have %D to provide begin and endpoints, so like with color, we use %D pairs of specials. The first scheme can be satisfied with %D proper dimensions of the areas to be made active. %D %D The interactive real work is done by the following four %D specials. The reason for providing the first one with both %D a label and a number, is a result of the quite poor %D implementation of \type{pdfmarks} in version 1.0 of %D Acrobat. Because only pagenumbers were supported as %D destination, we had to provide both labels (\DVIWINDO) and %D pagenumbers (\PDF). Some drivers use start stop pairs. %D %D \starttyping %D \dostartgotolocation {w} {h} {url} {file} {label} {page} %D \dostartgotorealpage {w} {h} {url} {file} {page} %D \stoptyping %D %D Their counterparts are: %D %D \starttyping %D \dostopgotolocation %D \dostopgotorealpage %D \stoptyping %D %D The internal alternative is used for system||generated %D links, the external one for user||generated links. The %D Uniform Resource Locator can be used to let the reader %D surf the net. \installspecial [\dostartgotolocation] [and] [6] \installspecial [\dostopgotolocation] [and] [0] \installspecial [\dostartgotorealpage] [and] [5] \installspecial [\dostopgotorealpage] [and] [0] %D One may wonder why jumps to page and location are not %D combined. By splitting them, we enable macro||packages to %D force the prefered alternative, while on the other hand %D drivers can pick up the alternative desired most. %D \macros %D {dostartgotoJS, doflushJSpreamble} %D %D Rather special is the option to include and execute %D JavaScript code. This is a typical \PDF\ option. %D %D \starttyping %D \dostartgotoJS {w} {h} {script} %D \stoptyping %D %D This not so standard \TEX\ feature should be used with %D care. Preamble scripts are flushed by %D %D \doflushJSpreamble {script} \installspecial [\dostartgotoJS] [and] [3] \installspecial [\dostopgotoJS] [and] [0] \installspecial [\doflushJSpreamble][and] [1] %D \macros %D {dostartthisislocation, dostopthisislocation, %D dostartthisisrealpage, dostopthisisrealpage} %D %D Before we can goto some location or page, we have to tell %D the system where it can be found. Because some drivers %D follow the \SGML\ approach of begin||end tags, we have to %D support pairs. A possible extension to this scheme is %D supplying coordinates for viewing the text. %D %D The opposite commands of \type{\dogotosomething} have only %D one argument: %D %D \starttyping %D \dostartthisislocation {label} %D \dostartthisisrealpage {page} %D \stoptyping %D %D These commands are accompanied by: %D %D \starttyping %D \dostopthisislocation %D \dostopthisisrealpage %D \stoptyping %D %D As with all interactive commands's they are installed as %D \type{and} category specials. \installspecial [\dostartthisislocation] [and] [1] \installspecial [\dostopthisislocation] [and] [0] \installspecial [\dostartthisisrealpage] [and] [1] \installspecial [\dostopthisisrealpage] [and] [0] %D In \CONTEXT\ we don't use the \type{\stopsomething} %D macros because we let \TEX\ take care of typographic %D issues. %D \macros %D {doresetgotowhereever} %D %D These and others need: \installspecial [\doresetgotowhereever] [and] [0] %D \macros %D {dostartexecutecommand, dostopexecutecommand} %D %D The actual behavior of the next pair of commands depends %D much on the viewing engine. Therefore one cannot depend %D too much on their support. %D %D \starttyping %D \dostartexecutecommand {w} {h} {command} {options} %D \stoptyping %D %D At least the next commands are supported (more examples %D can be found in \type {spec-fdf.tex}: %D %D \startlinecorrection\setupalign[middle]\leavevmode %D \starttable[|l|l|] %D \HL %D \NC \bf command \NC \bf action \NC\SR %D \HL %D \NC first \NC go to the first page \NC\FR %D \NC previous \NC go to the previous page \NC\MR %D \NC next \NC go to the next page \NC\MR %D \NC last \NC go to the last page \NC\MR %D \NC backward \NC go back to the link list \NC\MR %D \NC forward \NC go forward in the link list \NC\MR %D \NC print \NC enter print mode \NC\MR %D \NC exit \NC exit viewer \NC\MR %D \NC close \NC close document \NC\MR %D \NC enter \NC enter viewer \NC\MR %D \NC help \NC show help on the viewer \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Options are to be passed as a comma separated list of %D assignments. \installspecial [\dostartexecutecommand] [and] [4] \installspecial [\dostopexecutecommand] [and] [0] %D \macros %D {dostartobject, %D dostopobject, %D doresetobjects, %D doinsertobject} %D %D Reuse of object can reduce the output filesize %D considerably. Reusable objects are implemented with: %D %D \starttyping %D \dostartobject{class}{name}{width}{height}{depth} %D some typeset material %D \dostopobject %D \stoptyping %D %D \starttyping %D \doinsertobject{class}{name} %D \stoptyping %D %D The savings can be huge in interactive texts. The next macro needs %D to be called after a graphic is inserted (in order to clean up %D global references). %D %D \starttyping %D \doresetobjects %D \stoptyping \installspecial [\dostartobject] [or] [5] \installspecial [\dostopobject] [or] [0] \installspecial [\doinsertobject] [or] [2] \installspecial [\doresetobjects] [or] [0] %D \macros %D {doregisterfigure, doregisterfigurecolor} %D %D Images can be objects as well and it's up to the driver to %D handle this. Alternative images are also up to the driver, %D and the next macro tells the driver that the previous image %D is somehow followed by another and that both have to be %D handled together. This is a rather fuzzy model, but for the %D moment it suits its purpose: low res screen versions combined %D with high res printable ones. \installspecial [\doregisterfigure] [or] [2] \installspecial [\doregisterfigurecolor][or] [1] % %D \macros % %D {dogetobjectreference} % %D % %D For very special purposes, one can ask for the internal % %D reference to the object. Beware! % % \installspecial [\dogetobjectreference] [or] [3] % % %D The first argument is the name, the second a macro that % %D gets the associated value. %D \macros %D {dostartrunprogram, dostoprunprogram, %D dostartgotoprofile, dostopgotoprofile, %D dobeginofprofile, %D doendofprofile} %D %D These specials are still experimental. They are not yet %D supported by the programs the way they should be. %D %D {\em --- still undocumented ---} \installspecial [\dostartrunprogram] [and] [4] \installspecial [\dostoprunprogram] [and] [0] \installspecial [\dostartgotoprofile] [and] [3] \installspecial [\dostopgotoprofile] [and] [0] \installspecial [\dobeginofprofile] [and] [4] \installspecial [\doendofprofile] [and] [0] %D \macros %D {doinsertbookmark} %D %D Bookmarks, that is viewer generated tables of contents, are %D a strange phenomena, mainly because \TEX\ can provide %D whatever kind of table in much better quality. \installspecial [\doinsertbookmark] [and] [5] %D This special is called as: %D %D \starttyping %D \doinstallbookmark {level} {nofsubentries} {text} {page} {open} %D \stoptyping %D %D This definition is very \PDF\ oriented, so for more %D information we kindly refer to the \PDF\ manuals. %D \macros %D {dosetpagetransition} %D %D In presentations, fancy page transitions can, at least for a %D short moment, let the audience focus at the screen. Like the %D previous one, this special is very \PDF. %D %D \starttyping %D \dosetpagetransition{dissolve}{0} %D \stoptyping %D %D Transitions have symbolic names, like dissolve, box, split, %D blinds, wipe and glitter. The second argument determines %D the wait time (unless zero). \installspecial [\dosetpagetransition] [or] [2] %D \macros %D {dopresettextfield,dopresetlinefield, %D dopresetchoicefield,dopresetpopupfield,dopresetcombofield, %D dopresetbuttonfield,dopresetcheckfield, %D dopresetradiofield,dopresetradiorecord} %D %D The special drivers are programmed independant from their %D calling macros are thereby use the standard \TEX\ way of %D passing parameters. Unfortunately fields often have more %D than nine characteristics, so we pack some arguments in one. %D %D \starttyping %D \dopresettextfield / \dopresetlinefield %D {name} {width} {height} {default} {length} %D {style,color} {options} {alignment} {actions} %D %D \dopresetchoicefield / \dopresetpopupfield / \dopresetcombofield %D {name} {width} {height} {default} %D {style,color} {options} {values} {actions} %D %D \dopresetpushfield %D {name} {width} {height} {default} %D {options} {values} {actions} %D %D \dopresetcheckfield %D {name} {width} {height} {default} %D {options} {values} {actions} %D %D \dopresetradiofield %D {name} {width} {height} {default} %D {options} {parent} {values} {actions} %D %D \dopresetradiorecord %D {name} {top} {options} {kids} {actions} %D \stoptyping \installspecial [\dopresetlinefield] [or] [9] \installspecial [\dopresettextfield] [or] [9] \installspecial [\dopresetchoicefield] [or] [8] \installspecial [\dopresetpopupfield] [or] [8] \installspecial [\dopresetcombofield] [or] [8] \installspecial [\dopresetpushfield] [or] [7] \installspecial [\dopresetcheckfield] [or] [7] \installspecial [\dopresetradiofield] [or] [8] \installspecial [\dopresetradiorecord] [or] [5] %D \macros %D {dodefinefieldset,dogetfieldset,doiffieldset} %D %D Field sets, used in resetting and submitting, are handled %D by: \installspecial [\dodefinefieldset] [or] [2] \installspecial [\dogetfieldset] [or] [1] \installspecial [\doiffieldset] [or] [2] %D \macros %D {dosetfieldstatus} %D %D For practical reasons we set some field characteristics %D using: %D %D \starttyping %D \dosetfieldstatus {mode} {parent} {kids} {root} %D \stoptyping \installspecial [\dosetfieldstatus] [or] [4] %D with: \def\fieldlonermode {0} % no \chardef here \def\fieldparentmode{1} % no \chardef here \def\fieldchildmode {2} % no \chardef here \def\fieldcopymode {3} % no \chardef here %D \macros %D {doregistercalculationset} %D %D We can define a calculation order list with: %D %D \starttyping %D \doregistercalculationset {set identifier} %D \stoptyping \installspecial [\doregistercalculationset] [or] [1] %D \macros %D {doinsertcomment, doflushcomments} %D %D Not so much out of need, but to be complete, we also %D implement text annotations, so called comment: %D %D \starttyping %D \doinsertcomment %D {title} {width} {height} {color} {open} {symbol} {collect} {data} %D \stoptyping %D %D When enables, comments can be collected and flushed: %D %D \starttyping %D \doflushcomments %D \stoptyping \installspecial[\doinsertcomment] [and] [8] \installspecial[\doflushcomments] [and] [0] %D \macros %D {dosetposition, dosetpositionwhd, dosetpositionplus, %D dosetpositionpapersize} %D %D Not natural to \TEX, but available in \PDFTEX, and by %D means of postprocessed \DVI, we can save and call upon %D positions. %D %D \starttyping %D \dosetposition {identifier} %D \dosetpositionwhd {identifier} {width} {height} {depth} %D \dosetpositionplus {identifier} {width} {height} {depth} {list} %D \dosetpositionpapersize {width} {height} %D \stoptyping %D %D This is one of the few specials where when using \PDFTEX\ %D the driver directly deals with the utility file. %D Support is moved to spec-mis.tex. The whole idea originates %D and was implemented first in \PDFTEX. Later \DVIPDFMX\ %D supported the \CONTEXT\ specific specials and nowadays %D \PDFTEX\ supports this feature in \DVI\ mode and \XETEX\ %D implements it as well. This means that only \ALEPH\ is %D still dependent on specials, but that variant of \TEX\ has %D become obsolete anyway. % \installspecial [\dosetposition] [or] [1] % \installspecial [\dosetpositionwhd] [or] [4] % \installspecial [\dosetpositionplus] [or] [5] % \installspecial [\dosetpositionpapersize] [or] [2] %D \macros %D {dostarttransparency,dostoptransparency} %D %D \starttyping %D \dostarttransparency{fraction}{type} %D \dostoptransparency %D \stoptyping %D %D Although in \CONTEXT\ transparency is closely integrated %D in the color drivers, in the end it is an independent %D feature. \installspecial [\dostarttransparency] [or] [2] \installspecial [\dostoptransparency] [or] [0] %D \macros %D {doattachfile} %D %D \starttyping %D \doattachfile{title}{width}{height}{depth}{color}{symbol}{filename}{source} %D \stoptyping \installspecial [\doattachfile] [or] [8] %D Experimental (properties): \installspecial[\dostartviewerlayer] [or] [1] \installspecial[\dostopviewerlayer] [or] [0] \installspecial[\dodefineviewerlayer] [or] [5] %installspecial[\doflushviewertextlayers] [or] [0] %installspecial[\doflushviewerpagelayers] [or] [0] \installspecial[\domakeviewerlayerlist] [or] [1] \installspecial[\doinsertrenderingwindow] [or] [4] \installspecial[\doinsertrendering] [or] [4] \installspecial[\doinsertrenderingobject] [or] [4] \installspecial[\doinsertrenderingobject] [or] [4] \installspecial[\dostartfonteffect] [or] [3] \installspecial[\dostopfonteffect] [or] [0] %D From now on, mapfile loading is also a special; we assume the %D more or less standard dvips syntax. \installspecial[\doresetmapfilelist] [and] [0] \installspecial[\doloadmapfile] [and] [2] % + - = | filename \installspecial[\doloadmapline] [and] [2] % + - = | fileline %D We define a couple of backends: \defineoutput [dvipsone] [dvi,ps,yy] \defineoutput [dviwindo] [dvi,ps,yy,win] \defineoutput [dvips] [dvi,ps,tr] \defineoutput [dviview] [dvi,ps,tr,dv] \defineoutput [pdftex] [tpd] \defineoutput [pdf] [tpd] \defineoutput [dvipdfm] [dpm] \defineoutput [dpm] [dpm] \defineoutput [dvipdfmx] [dpx] \defineoutput [dpx] [dpx] \defineoutput [acrobat] [pdf,ps,tr] \defineoutput [xetex] [dpx,xet] \defineoutput [xtx] [dpx,xet] \defineoutput [xdv] [dvi,xtx,xet] \defineoutput [xdv2pdf] [dvi,xtx,xet] %D We don't enable \ACROBAT, because pure \POSTSCRIPT\ is not %D that strong on objects and \PDFTEX\ does a better job. %D Some reasonable alternatives are: %D %D \starttyping %D \setupoutput [dvipsone,acrobat] %D \setupoutput [dviwindo,acrobat] %D \stoptyping %D %D Although, better is: %D %D \starttyping %D \setupoutput [pdftex] %D \stoptyping %D Please let me know if we need more. From now on we default %D to: \appendtoks \setupoutput[dvips]% \to \everydump \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-06.tex��������������������������������0000644�0001750�0001750�00000016723�11756777531�023720� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-pre-06, %D version=1999.04.28, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 6, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I wrote this sixth presentation style on behalf of a %D presentation at Bachotek~'99. The joke in this style is %D (ab)using the Antikwa Torunska, a rather Polish font. When I %D was first confronted with this font, the backward slant %D stoke me as very characteristic. %D %D Each page has a slightly different background consisting of %D three O's. Although \TEX\ could do the randomization, %D scaling and placement, I prefered to use \METAPOST. The %D backward slant is also reflected in the stepwise increasing %D left margin. Due to this characteristic and the trick used, %D this style is only suited for simple presentations, using %D itemizations. \usemodule[pre-general] %D \macros %D {setupbodyfont} %D %D As said, we will use the Antikwa Torunska, and because we %D want it to show up well, we use it large. \setupbodyfont [ant,14.4pt] %D \macros %D {definecolor, setupcolors} %D %D Thus style only uses gray scales, but nevertheless we turn %D on color. We only use a few logical color names. \setupcolors [state=start] \definecolor [BackgroundColor] [s=.8] \definecolor [ContrastColor] [s=.9] \definecolor [InteractionColor] [s=.6] %D \macros %D {setuppapersize} %D %D As (nearly) always, we use a 600 pt times 450 pt screen %D width, mapped on ditto paper dimensions. \setuppapersize [S6][S6] %D \macros %D {setuplayout} %D %D The layout is rather symmetrical. We don't use headers and %D footers, and thereby automatically turn off the page %D numbering: no room, no number. We use the bottom to present %D a rather trivial menu. \setuplayout [backspace=2cm, topspace=2cm, width=middle, header=0pt, height=middle, footer=0pt, bottomdistance=.5cm, bottom=1cm] %D \macros %D {setupinteractionmenu,startinteractionmenu} %D %D This menu is slighly moved to the right because that looks %D better. The menu itself has one goto (\type {\got}) entry, %D which is forced to the right. \setupinteractionmenu [bottom] [rightoffset=-1cm] \startinteractionmenu[bottom] \hfill \got [CloseDocument] \bfd Quit \\ \stopinteractionmenu %D \macros %D {setupbackgrounds} %D %D Page background are calculated at each page, opposite to the %D other backgrounds, that are reused and only calculated when %D \CONTEXT\ is explictly told to do so. There are three %D overlays: a gray fill, the graphic, and a button that %D circulates the pages. \setupbackgrounds [page] [background={color,Joke,GoAround}, backgroundcolor=BackgroundColor] %D \macros %D {defineoverlay} %D %D The \type {forward} reference action circulates over the %D pages, so, at the last page, we are led back to the first. \defineoverlay [GoAround] [\overlaybutton{forward}] %D The joke is a simple \METAPOST\ routine. The picture is %D actually larger than the screen, but is clipped of when %D included. \defineoverlay [Joke] [\useMPgraphic{background}] \startuseMPgraphic{background} width := \overlaywidth ; height := \overlayheight ; picture p ; p := char 79 infont "\truefontname{Regular}" scaled 1 ; pwidth := xpart urcorner bbox p - xpart llcorner bbox p ; pheight := ypart urcorner bbox p - ypart llcorner bbox p ; def do (expr r) = addto currentpicture also p shifted - center p scaled r xscaled (width/pwidth) yscaled (height/pheight) withcolor \MPcolor{ContrastColor} ; enddef ; do (0.9+uniformdeviate0.1) ; do (1.4+uniformdeviate0.1) ; do (1.9+uniformdeviate0.1) ; \stopuseMPgraphic %D \macros %D {setupinteraction,setupinteractionscreen} %D %D We did not yet turn on the interaction, so let's do that %D now. When opened, the document will fil the screen. \setupinteraction [state=start, color=InteractionColor, contrastcolor=InteractionColor, menu=on] \setupinteractionscreen [option=max] %D \macros %D {TitlePage, Topics, Topic} %D %D A presentation normally consists of a title page, a list of %D topics, and the content itself. In this style, a further %D subdivision does not make sense, but because we want to be %D compatible with the other styles, they are added. A %D presentation looks like: %D %D \starttyping %D \usemodule[pre-antikwa] %D %D \startext %D %D \TitlePage{The Title} %D %D \Topics{Contents} %D %D \Topic{Some Topic} %D %D \startitemize %D \item first %D \item second %D \stopitemize %D %D \Topic{Some Topic} %D %D ... %D %D \stoptext %D \stoptyping %D \macros %D {definehead, Topic, Subject} %D %D We use dedicated sectioning commands. \definehead [Topic] [chapter] \definehead [Subject] [section] \definehead [Nopic] [title] %D \macros %D {setuphead} %D %D We turn of numbering. The assignment to \type {after} takes %D care of the increasing indentation. This indentation is the %D only low level \TEX\ code needed. Including this %D functionality in the core of \CONTEXT\ is not that useful %D and I would forget about this feature being present anyway. \setuphead [Topic, Nopic, Subject] [number=no, after={\blank[2*big]\ToTheLeft\everypar{\ToTheRight}}] %D After section titles we set the \type {\leftskip} to a value %D that suits the Antikwa slant. \def\ToTheLeft% {\gdef\LeftSkip{30}% \rightskip0pt\relax \leftskip30pt\relax} %D Each new paragraph adds to the \type {\leftskip}. \def\ToTheRight% {\doglobal\increment(\LeftSkip,20)% \leftskip=\LeftSkip pt\relax} %D \macros %D {Topics} %D %D The \type {\Topics} command uses a bot of low level %D \CONTEXT. We could have done with: %D %D \starttyping %D \def\Topics#1% %D {\Nopic[Topics]{#1} %D \placelist[Topic][criteriumcriterium=all]} %D \stoptyping %D %D but the next alternative sort of ignores this command when %D no list is found. \def\Topics#1% {\determinelistcharacteristics[Topic] \ifcase\utilitylistlength\else \Nopic[Topics]{#1} \placelist[Topic][criterium=all] \fi} %D \macros %D {setuplist} %D %D We use the single item command to achieve a result similar %D to the itemizations. \setuplist [Topic] [alternative=command, command=\TopicListCommand] \def\TopicListCommand#1#2#3% {\item#2\par} %D A dummy command, needed to be compatible with the other %D presentation styles. \def\Subjects% {} %D \macros %D {StartTitlePage} %D %D We use a nested \type {\everypar}; everything in there %D will be put in front of each paragraph. The nesting prevents %D the first paragraph from indenting. The struts give the %D lines a decent height, which looks better inrelation to the %D next pages. \def\StartTitlePage% {\startstandardmakeup \bfd\setupinterlinespace \everypar{\everypar{\advance\leftskip30pt\relax}} \let\\=\blank \begstrut} \def\StopTitlePage% {\endstrut \vfill \stopstandardmakeup} %D \macros %D {TitlePage} %D %D The title page can be generated with one command: \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \usemodule[pre-antikwa] \starttext \TitlePage{Title Page\\pre-polish} \Topics{Some Nice Lists} \Topic{Some Lists} \Subject{A list} \startitemize \item first \item second \stopitemize \Subject{A bigger list} \startitemize \item first \item second \item third \item fourth \stopitemize \stoptext ���������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-mar.lua��������������������������������0000644�0001750�0001750�00000073221�12130411274�024144� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['typo-mar'] = { version = 1.001, comment = "companion to typo-mar.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: -- -- * autoleft/right depending on available space (or distance to margin) -- * stack across paragraphs, but that is messy and one should reconsider -- using margin data then as also vertical spacing kicks in -- * floating margin data, with close-to-call anchoring -- -- experiment (does not work, too much interference) -- -- local pdfprint = pdf.print -- local format = string.format -- -- anchors = anchors or { } -- -- local whatever = { } -- local factor = (7200/7227)/65536 -- -- function anchors.set(tag) -- whatever[tag] = { pdf.h, pdf.v } -- end -- -- function anchors.reset(tag) -- whatever[tag] = nil -- end -- -- function anchors.startmove(tag,how) -- save/restore nodes but they don't support moves -- local w = whatever[tag] -- if not w then -- -- error -- elseif how == "horizontal" or how == "h" then -- pdfprint("page",format(" q 1 0 0 1 %f 0 cm ", (w[1] - pdf.h) * factor)) -- elseif how == "vertical" or how == "v" then -- pdfprint("page",format(" q 1 0 0 1 0 %f cm ", (w[2] - pdf.v) * factor)) -- else -- pdfprint("page",format(" q 1 0 0 1 %f %f cm ", (w[1] - pdf.h) * factor, (w[2] - pdf.v) * factor)) -- end -- end -- -- function anchors.stopmove(tag) -- local w = whatever[tag] -- if not w then -- -- error -- else -- pdfprint("page"," Q ") -- end -- end -- -- local latelua = nodes.pool.latelua -- -- function anchors.node_set(tag) -- return latelua(formatters["anchors.set(%q)"](tag)) -- end -- -- function anchors.node_reset(tag) -- return latelua(formatters["anchors.reset(%q)"](tag)) -- end -- -- function anchors.node_start_move(tag,how) -- return latelua(formatters["anchors.startmove(%q,%q)](tag,how)) -- end -- -- function anchors.node_stop_move(tag) -- return latelua(formatters["anchors.stopmove(%q)"](tag)) -- end -- so far local format, validstring = string.format, string.valid local insert, remove = table.insert, table.remove local setmetatable, next = setmetatable, next local attributes, nodes, node, variables = attributes, nodes, node, variables local trace_margindata = false trackers.register("typesetters.margindata", function(v) trace_margindata = v end) local trace_marginstack = false trackers.register("typesetters.margindata.stack", function(v) trace_marginstack = v end) local trace_margingroup = false trackers.register("typesetters.margindata.group", function(v) trace_margingroup = v end) local report_margindata = logs.reporter("typesetters","margindata") local tasks = nodes.tasks local prependaction = tasks.prependaction local disableaction = tasks.disableaction local enableaction = tasks.enableaction local variables = interfaces.variables local conditionals = tex.conditionals local systemmodes = tex.systemmodes local v_top = variables.top local v_depth = variables.depth local v_local = variables["local"] local v_global = variables["global"] local v_left = variables.left local v_right = variables.right local v_flushleft = variables.flushleft local v_flushright = variables.flushright local v_inner = variables.inner local v_outer = variables.outer local v_margin = variables.margin local v_edge = variables.edge local v_default = variables.default local v_normal = variables.normal local v_yes = variables.yes local v_continue = variables.continue local v_first = variables.first local v_text = variables.text local v_column = variables.column local copy_node_list = node.copy_list local slide_nodes = node.slide local hpack_nodes = node.hpack -- nodes.fasthpack not really faster here local traverse_id = node.traverse_id local free_node_list = node.flush_list local insert_node_after = node.insert_after local insert_node_before = node.insert_before local concat_nodes = nodes.concat local nodecodes = nodes.nodecodes local listcodes = nodes.listcodes local gluecodes = nodes.gluecodes local whatsitcodes = nodes.whatsitcodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue local kern_code = nodecodes.kern local penalty_code = nodecodes.penalty local whatsit_code = nodecodes.whatsit local line_code = listcodes.line local cell_code = listcodes.cell local alignment_code = listcodes.alignment local leftskip_code = gluecodes.leftskip local rightskip_code = gluecodes.rightskip local userdefined_code = whatsitcodes.userdefined local dir_code = whatsitcodes.dir local localpar_code = whatsitcodes.localpar local nodepool = nodes.pool local new_kern = nodepool.kern local new_glue = nodepool.glue local new_penalty = nodepool.penalty local new_stretch = nodepool.stretch local new_usernumber = nodepool.usernumber local new_latelua = nodepool.latelua local texcount = tex.count local texdimen = tex.dimen local texbox = tex.box local points = number.points local isleftpage = layouts.status.isleftpage local registertogether = builders.paragraphs.registertogether local jobpositions = job.positions local getposition = jobpositions.position local a_margindata = attributes.private("margindata") local inline_mark = nodepool.userids["margins.inline"] local margins = { } typesetters.margins = margins local locations = { v_left, v_right, v_inner, v_outer } -- order might change local categories = { } local displaystore = { } -- [category][location][scope] local inlinestore = { } -- [number] local nofsaved = 0 local nofstored = 0 local nofinlined = 0 local nofdelayed = 0 local h_anchors = 0 local v_anchors = 0 local mt1 = { __index = function(t,location) local v = { [v_local] = { }, [v_global] = { } } t[location] = v return v end } local mt2 = { __index = function(stores,category) categories[#categories+1] = category local v = { } setmetatable(v,mt1) stores[category] = v return v end } setmetatable(displaystore,mt2) local defaults = { __index = { location = v_left, align = v_normal, method = "", name = "", threshold = 0, -- .25ex margin = v_normal, scope = v_global, distance = 0, hoffset = 0, voffset = 0, category = v_default, line = 0, vstack = 0, dy = 0, baseline = false, inline = false, leftskip = 0, rightskip = 0, } } local enablelocal, enableglobal -- forward reference (delayed initialization) local function showstore(store,banner,location) if next(store) then for i, si in table.sortedpairs(store) do local si =store[i] report_margindata("%s: stored in %a at %s: %a => %s",banner,location,i,validstring(si.name,"no name"),nodes.toutf(si.box.list)) end else report_margindata("%s: nothing stored in location %a",banner,location) end end function margins.save(t) setmetatable(t,defaults) local content = texbox[t.number] local location = t.location local category = t.category local inline = t.inline local scope = t.scope or v_global if not content then report_margindata("ignoring empty margin data %a",location or "unknown") return end local store if inline then store = inlinestore else store = displaystore[category][location] if not store then report_margindata("invalid location %a",location) return end store = store[scope] end if not store then report_margindata("invalid scope %a",scope) return end if enablelocal and scope == v_local then enablelocal() if enableglobal then enableglobal() -- is the fallback end elseif enableglobal and scope == v_global then enableglobal() end nofsaved = nofsaved + 1 nofstored = nofstored + 1 local name = t.name if trace_marginstack then showstore(store,"before",location) end if name and name ~= "" then if inlinestore then -- todo: inline store has to be done differently (not sparse) local t = table.sortedkeys(store) for j=#t,1,-1 do local i = t[j] local si = store[i] if si.name == name then local s = remove(store,i) free_node_list(s.box) end end else for i=#store,1,-1 do local si = store[i] if si.name == name then local s = remove(store,i) free_node_list(s.box) end end end if trace_marginstack then showstore(store,"between",location) end end if t.number then -- better make a new table and make t entry in t t.box = copy_node_list(content) t.n = nofsaved -- used later (we will clean up this natural mess later) -- nice is to make a special status table mechanism local leftmargindistance = texdimen.naturalleftmargindistance local rightmargindistance = texdimen.naturalrightmargindistance t.strutdepth = texbox.strutbox.depth t.strutheight = texbox.strutbox.height t.leftskip = tex.leftskip.width -- we're not in forgetall t.rightskip = tex.rightskip.width -- we're not in forgetall t.leftmargindistance = leftmargindistance -- todo:layoutstatus table t.rightmargindistance = rightmargindistance t.leftedgedistance = texdimen.naturalleftedgedistance + texdimen.leftmarginwidth + leftmargindistance t.rightedgedistance = texdimen.naturalrightedgedistance + texdimen.rightmarginwidth + rightmargindistance t.lineheight = texdimen.lineheight -- -- t.realpageno = texcount.realpageno if inline then context(new_usernumber(inline_mark,nofsaved)) store[nofsaved] = t -- no insert nofinlined = nofinlined + 1 else insert(store,t) end end if trace_marginstack then showstore(store,"after",location) end if trace_margindata then report_margindata("saved %a, location %a, scope %a, inline %a",nofsaved,location,scope,inline) end end -- Actually it's an advantage to have them all anchored left (tags and such) -- we could keep them in store and flush in stage two but we might want to -- do more before that so we need the content to be there unless we can be -- sure that we flush this first which might not be the case in the future. -- -- When the prototype inner/outer code that was part of this proved to be -- okay it was moved elsewhere. local status, nofstatus = { }, 0 local function realign(current,candidate) local location = candidate.location local margin = candidate.margin local hoffset = candidate.hoffset local distance = candidate.distance local hsize = candidate.hsize local width = candidate.width local align = candidate.align -- local realpageno = candidate.realpageno local leftpage = isleftpage(false,true) local delta = 0 local leftdelta = 0 local rightdelta = 0 local leftdistance = distance local rightdistance = distance if margin == v_normal then -- elseif margin == v_local then leftdelta = - candidate.leftskip rightdelta = candidate.rightskip elseif margin == v_margin then leftdistance = candidate.leftmargindistance rightdistance = candidate.rightmargindistance elseif margin == v_edge then leftdistance = candidate.leftedgedistance rightdistance = candidate.rightedgedistance end if leftpage then leftdistance, rightdistance = rightdistance, leftdistance end if location == v_left then delta = hoffset + width + leftdistance + leftdelta elseif location == v_right then delta = -hoffset - hsize - rightdistance + rightdelta elseif location == v_inner then if leftpage then delta = -hoffset - hsize - rightdistance + rightdelta else delta = hoffset + width + leftdistance + leftdelta end elseif location == v_outer then if leftpage then delta = hoffset + width + leftdistance + leftdelta else delta = -hoffset - hsize - rightdistance + rightdelta end end -- we assume that list is a hbox, otherwise we had to take the whole current -- in order to get it right current.width = 0 local anchornode, move_x -- this mess is needed for alignments (combinations) so we use that -- oportunity to add arbitrary anchoring -- always increment anchor is nicer for multipass when we add new .. local inline = candidate.inline local anchor = candidate.anchor if not anchor or anchor == "" then anchor = v_text end if inline or anchor ~= v_text or candidate.psubtype == alignment_code then -- the alignment_code check catches margintexts ste before a tabulate h_anchors = h_anchors + 1 anchornode = new_latelua(format("_plib_.set('md:h',%i,{x=true,c=true})",h_anchors)) local blob = jobpositions.get('md:h', h_anchors) if blob then local reference = jobpositions.getreserved(anchor,blob.c) if reference then if location == v_left then move_x = (reference.x or 0) - (blob.x or 0) elseif location == v_right then move_x = (reference.x or 0) - (blob.x or 0) + (reference.w or 0) - hsize else -- not yet done end end end end if move_x then delta = delta - move_x if trace_margindata then report_margindata("realigned %a, location %a, margin %a, move %p",candidate.n,location,margin,move_x) end else if trace_margindata then report_margindata("realigned %a, location %a, margin %a",candidate.n,location,margin) end end current.list = hpack_nodes(concat_nodes{anchornode,new_kern(-delta),current.list,new_kern(delta)}) current.width = 0 end local function realigned(current,a) local candidate = status[a] realign(current,candidate) nofdelayed = nofdelayed - 1 status[a] = nil return true end -- Stacking is done in two ways: the v_yes option stacks per paragraph (or line, -- depending on what gets by) and mostly concerns margin data dat got set at more or -- less the same time. The v_continue option uses position tracking and works on -- larger range. However, crossing pages is not part of it. Anyway, when you have -- such messed up margin data you'd better think twice. -- -- The stacked table keeps track (per location) of the offsets (the v_yes case). This -- table gets saved when the v_continue case is active. We use a special variant -- of position tracking, after all we only need the page number and vertical position. local stacked = { } -- left/right keys depending on location local cache = { } local function resetstacked() stacked = { } end -- resetstacked() function margins.ha(tag) -- maybe l/r keys ipv left/right keys local p = cache[tag] p.p = true p.y = true jobpositions.set('md:v',tag,p) cache[tag] = nil end local function markovershoot(current) v_anchors = v_anchors + 1 cache[v_anchors] = stacked local anchor = new_latelua(format("typesetters.margins.ha(%s)",v_anchors)) -- todo: alleen als offset > line current.list = hpack_nodes(concat_nodes{anchor,current.list}) end local function getovershoot(location) local p = jobpositions.get("md:v",v_anchors) local c = jobpositions.get("md:v",v_anchors+1) if p and c and p.p and p.p == c.p then local distance = p.y - c.y local offset = p[location] or 0 local overshoot = offset - distance if trace_marginstack then report_margindata("location %a, distance %p, offset %p, overshoot %p",location,distance,offset,overshoot) end if overshoot > 0 then return overshoot end end return 0 end local function inject(parent,head,candidate) local box = candidate.box local width = box.width local height = box.height local depth = box.depth local shift = box.shift local stack = candidate.stack local location = candidate.location local method = candidate.method local voffset = candidate.voffset local line = candidate.line local baseline = candidate.baseline local strutheight = candidate.strutheight local strutdepth = candidate.strutdepth local psubtype = parent.subtype local offset = stacked[location] local firstonstack = offset == false or offset == nil nofstatus = nofstatus + 1 nofdelayed = nofdelayed + 1 status[nofstatus] = candidate -- yet untested if baseline == true then baseline = false -- hbox vtop --~ for h in traverse_id(hlist_code,box.list.list) do --~ baseline = h.height --~ break --~ end else baseline = tonumber(baseline) if not baseline or baseline <= 0 then -- in case we have a box of width 0 that is not analyzed baseline = false -- strutheight -- actually a hack end end candidate.width = width candidate.hsize = parent.width -- we can also pass textwidth candidate.psubtype = psubtype if trace_margindata then report_margindata("processing, index %s, height %p, depth %p, parent %s",candidate.n,height,depth,listcodes[psubtype]) end if firstonstack then offset = 0 else -- offset = offset + height end if stack == v_yes then offset = offset + candidate.dy shift = shift + offset elseif stack == v_continue then offset = offset + candidate.dy if firstonstack then offset = offset + getovershoot(location) end shift = shift + offset end -- -- -- -- Maybe we also need to patch offset when we apply methods, but how ... -- This needs a bit of playing as it depends on the stack setting of the -- following which we don't know yet ... so, consider stacking partially -- experimental. -- -- -- if method == v_top then local delta = height - parent.height if trace_margindata then report_margindata("top aligned by %p",delta) end if delta < candidate.threshold then shift = shift + voffset + delta end elseif method == v_first then if baseline then shift = shift + voffset + height - baseline -- option else shift = shift + voffset -- normal end if trace_margindata then report_margindata("first aligned") end elseif method == v_depth then local delta = strutdepth if trace_margindata then report_margindata("depth aligned by %p",delta) end shift = shift + voffset + delta elseif method == v_height then local delta = - strutheight if trace_margindata then report_margindata("height aligned by %p",delta) end shift = shift + voffset + delta elseif voffset ~= 0 then if trace_margindata then report_margindata("voffset %p applied",voffset) end shift = shift + voffset end -- -- -- if line ~= 0 then local delta = line * candidate.lineheight if trace_margindata then report_margindata("offset %p applied to line %s",delta,line) end shift = shift + delta offset = offset + delta end box.shift = shift box.width = 0 if not head then head = box elseif head.id == whatsit_code and head.subtype == localpar_code then -- experimental if head.dir == "TRT" then box.list = hpack_nodes(concat_nodes{new_kern(candidate.hsize),box.list,new_kern(-candidate.hsize)}) end insert_node_after(head,head,box) else head.prev = box box.next = head head = box end box[a_margindata] = nofstatus if trace_margindata then report_margindata("injected, location %a, shift %p",location,shift) end -- we need to add line etc to offset as well offset = offset + depth local room = { height = height, depth = offset, slack = candidate.bottomspace, -- todo: 'depth' => strutdepth lineheight = candidate.lineheight, -- only for tracing } offset = offset + height stacked[location] = offset -- weird, no table ? -- todo: if no real depth then zero if trace_margindata then report_margindata("status, offset %s",offset) end return head, room, stack == v_continue end local function flushinline(parent,head) local current = head local done = false local continue = false local room, don, con while current and nofinlined > 0 do local id = current.id if id == whatsit_code then if current.subtype == userdefined_code and current.user_id == inline_mark then local n = current.value local candidate = inlinestore[n] if candidate then -- no vpack, as we want to realign inlinestore[n] = nil nofinlined = nofinlined - 1 head, room, con = inject(parent,head,candidate) -- maybe return applied offset continue = continue or con done = true nofstored = nofstored - 1 end end elseif id == hlist_code or id == vlist_code then -- optional (but sometimes needed) current.list, don, con = flushinline(current,current.list) continue = continue or con done = done or don end current = current.next end return head, done, continue end local a_linenumber = attributes.private('linenumber') local function flushed(scope,parent) -- current is hlist local head = parent.list local done = false local continue = false local room, con, don for c=1,#categories do local category = categories[c] for l=1,#locations do local location = locations[l] local store = displaystore[category][location][scope] while true do local candidate = remove(store,1) -- brr, local stores are sparse if candidate then -- no vpack, as we want to realign head, room, con = inject(parent,head,candidate) done = true continue = continue or con nofstored = nofstored - 1 registertogether(parent,room) else break end end end end if nofinlined > 0 then if done then parent.list = head end head, don, con = flushinline(parent,head) continue = continue or con done = done or don end if done then local a = head[a_linenumber] -- hack .. we need a more decent critical attribute inheritance mechanism parent.list = hpack_nodes(head,parent.width,"exactly") if a then parent.list[a_linenumber] = a end -- resetstacked() end return done, continue end -- only when group : vbox|vmode_par -- only when subtype : line, box (no indent alignment cell) local function handler(scope,head,group) if nofstored > 0 then if trace_margindata then report_margindata("flushing stage one, stored %s, scope %s, delayed %s, group %a",nofstored,scope,nofdelayed,group) end local current = head local done = false while current do local id = current.id if (id == vlist_code or id == hlist_code) and not current[a_margindata] then local don, continue = flushed(scope,current) if don then current[a_margindata] = 0 -- signal to prevent duplicate processing if continue then markovershoot(current) end if nofstored <= 0 then break end done = true end end current = current.next end -- if done then resetstacked() -- why doesn't done work ok here? -- end return head, done else return head, false end end function margins.localhandler(head,group) -- sometimes group is "" which is weird local inhibit = conditionals.inhibitmargindata if inhibit then if trace_margingroup then report_margindata("ignored 3, group %a, stored %s, inhibit %a",group,nofstored,inhibit) end return head, false elseif nofstored > 0 then return handler(v_local,head,group) else if trace_margingroup then report_margindata("ignored 4, group %a, stored %s, inhibit %a",group,nofstored,inhibit) end return head, false end end function margins.globalhandler(head,group) -- check group local inhibit = conditionals.inhibitmargindata if inhibit or nofstored == 0 then if trace_margingroup then report_margindata("ignored 1, group %a, stored %s, inhibit %a",group,nofstored,inhibit) end return head, false elseif group == "hmode_par" then return handler("global",head,group) elseif group == "vmode_par" then -- experiment (for alignments) return handler("global",head,group) -- this needs checking as we then get quite some one liners to process and -- we cannot look ahead then: elseif group == "box" then -- experiment (for alignments) return handler("global",head,group) elseif group == "alignment" then -- experiment (for alignments) return handler("global",head,group) else if trace_margingroup then report_margindata("ignored 2, group %a, stored %s, inhibit %a",group,nofstored,inhibit) end return head, false end end local function finalhandler(head) if nofdelayed > 0 then local current = head local done = false while current do local id = current.id if id == hlist_code then local a = current[a_margindata] if not a or a == 0 then finalhandler(current.list) elseif realigned(current,a) then done = true if nofdelayed == 0 then return head, true end end elseif id == vlist_code then finalhandler(current.list) end current = current.next end return head, done else return head, false end end function margins.finalhandler(head) if nofdelayed > 0 then -- if trace_margindata then -- report_margindata("flushing stage two, instore: %s, delayed: %s",nofstored,nofdelayed) -- end return finalhandler(head) else return head, false end end -- Somehow the vbox builder (in combinations) gets pretty confused and decides to -- go horizontal. So this needs more testing. prependaction("finalizers", "lists", "typesetters.margins.localhandler") -- ("vboxbuilders", "normalizers", "typesetters.margins.localhandler") prependaction("mvlbuilders", "normalizers", "typesetters.margins.globalhandler") prependaction("shipouts", "normalizers", "typesetters.margins.finalhandler") disableaction("finalizers", "typesetters.margins.localhandler") -- ("vboxbuilders", "typesetters.margins.localhandler") disableaction("mvlbuilders", "typesetters.margins.globalhandler") disableaction("shipouts", "typesetters.margins.finalhandler") enablelocal = function() enableaction("finalizers", "typesetters.margins.localhandler") -- enableaction("vboxbuilders", "typesetters.margins.localhandler") enableaction("shipouts", "typesetters.margins.finalhandler") enablelocal = nil end enableglobal = function() enableaction("mvlbuilders", "typesetters.margins.globalhandler") enableaction("shipouts", "typesetters.margins.finalhandler") enableglobal = nil end statistics.register("margin data", function() if nofsaved > 0 then return format("%s entries, %s pending",nofsaved,nofdelayed) else return nil end end) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-imp-dem.mkiv���������������������������0000644�0001750�0001750�00000013070�11754241457�025056� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=colo-dem, % moved from colo-rgb, %D version=1995.01.01, %D title=\CONTEXT\ Color Macros, %D subtitle=Demo Palets and Groups, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Like colors, we first define the english colorgroups. These %D colorgroups are tuned for distinctive gray scale printing. \definecolorgroup [gray] [0.95:0.95:0.95, 0.90:0.90:0.90, 0.80:0.80:0.80, 0.70:0.70:0.70, 0.60:0.60:0.60, 0.50:0.50:0.50, 0.40:0.40:0.40, 0.30:0.30:0.30, 0.20:0.20:0.20, 0.10:0.10:0.10, 0.00:0.00:0.00] \definecolorgroup [red] [1.00:0.90:0.90, 1.00:0.80:0.80, 1.00:0.70:0.70, 1.00:0.55:0.55, 1.00:0.40:0.40, 1.00:0.25:0.25, 1.00:0.15:0.15, 0.90:0.00:0.00] \definecolorgroup [green] [0.90:1.00:0.90, 0.70:1.00:0.70, 0.50:1.00:0.50, 0.30:1.00:0.30, 0.15:0.90:0.15, 0.00:0.80:0.00, 0.00:0.65:0.00, 0.00:0.50:0.00] \definecolorgroup [blue] [0.90:0.95:1.00, 0.80:0.90:1.00, 0.55:0.85:1.00, 0.30:0.80:1.00, 0.15:0.75:1.00, 0.00:0.70:1.00, 0.00:0.55:1.00, 0.00:0.40:1.00] \definecolorgroup [cyan] [0.80:1.00:1.00, 0.60:1.00:1.00, 0.30:1.00:1.00, 0.00:0.95:0.95, 0.00:0.85:0.85, 0.00:0.75:0.75, 0.00:0.60:0.60, 0.00:0.50:0.50] \definecolorgroup [magenta] [1.00:0.90:1.00, 1.00:0.80:1.00, 1.00:0.65:1.00, 1.00:0.50:1.00, 1.00:0.35:1.00, 1.00:0.15:1.00, 0.90:0.05:0.90, 0.80:0.00:0.80] \definecolorgroup [yellow] [1.00:1.00:0.70, 1.00:1.00:0.00, 1.00:0.85:0.05, 1.00:0.70:0.00, 1.00:0.55:0.00, 0.95:0.40:0.00, 0.80:0.30:0.00, 0.60:0.30:0.00] \definecolorgroup [red*] [1.00:0.95:0.95, 1.00:0.90:0.90, 1.00:0.80:0.80, 1.00:0.70:0.70, 1.00:0.60:0.60, 1.00:0.50:0.50, 1.00:0.40:0.40, 1.00:0.30:0.30] \definecolorgroup [green*] [0.95:1.00:0.95, 0.90:1.00:0.90, 0.80:1.00:0.80, 0.70:1.00:0.70, 0.60:1.00:0.60, 0.50:1.00:0.50, 0.40:1.00:0.40, 0.30:1.00:0.30] \definecolorgroup [blue*] [0.95:0.95:1.00, 0.90:0.90:1.00, 0.80:0.80:1.00, 0.70:0.70:1.00, 0.60:0.60:1.00, 0.50:0.50:1.00, 0.40:0.40:1.00, 0.30:0.30:1.00] \definecolorgroup [yellow*] [1.00:1.00:0.10, 1.00:1.00:0.00, 0.90:0.90:0.00, 0.80:0.80:0.00, 0.70:0.70:0.00, 0.60:0.60:0.00, 0.50:0.50:0.00, 0.40:0.40:0.00] %D For the sake of implementing interface dependant color %D groups we support colorgroup duplication. \startinterface dutch \definecolorgroup [grijs] [gray] \definecolorgroup [rood] [red] \definecolorgroup [groen] [green] \definecolorgroup [blauw] [blue] \definecolorgroup [cyaan] [cyan] \definecolorgroup [magenta] [magenta] \definecolorgroup [geel] [yellow] \definecolorgroup [rood*] [red*] \definecolorgroup [groen*] [green*] \definecolorgroup [blauw*] [blue*] \definecolorgroup [geel*] [yellow*] \stopinterface \startinterface german \definecolorgroup [grau] [gray] \definecolorgroup [rot] [red] \definecolorgroup [gruen] [green] \definecolorgroup [blau] [blue] \definecolorgroup [cyan] [cyan] \definecolorgroup [magenta] [magenta] \definecolorgroup [gelb] [yellow] \definecolorgroup [rot*] [red*] \definecolorgroup [gruen*] [green*] \definecolorgroup [blau*] [blue*] \definecolorgroup [gelb*] [yellow*] \stopinterface \startinterface czech \definecolorgroup [seda] [gray] \definecolorgroup [cervena] [red] \definecolorgroup [zelena] [green] \definecolorgroup [modra] [blue] \definecolorgroup [azurova] [cyan] \definecolorgroup [fialova] [magenta] \definecolorgroup [zluta] [yellow] \definecolorgroup [cervena*] [red*] \definecolorgroup [zelena*] [green*] \definecolorgroup [modra*] [blue*] \definecolorgroup [zluta*] [yellow*] \stopinterface \startinterface italian \definecolorgroup [grigio] [gray] \definecolorgroup [rosso] [red] \definecolorgroup [verde] [green] \definecolorgroup [blu] [blue] \definecolorgroup [ciano] [cyan] \definecolorgroup [azzurro] [cyan] \definecolorgroup [turchino][cyan] \definecolorgroup [magenta] [magenta] \definecolorgroup [cremisi] [magenta] \definecolorgroup [giallo] [yellow] \definecolorgroup [rosso*] [red*] \definecolorgroup [verde*] [green*] \definecolorgroup [blu*] [blue*] \definecolorgroup [giallo*] [yellow*] \stopinterface %D The next set of color palets is quite language independant. %D These palets are meant as examples. \definepalet [alfa] [ top=red:7, bottom=green:6, up=blue:5, down=cyan:4, strange=magenta:3, charm=yellow:2] \definepalet [beta] [ top=red:7, bottom=green:5, up=blue:3, down=cyan:6, strange=magenta:2, charm=yellow:1] \definepalet [gamma] [ top=red:2, bottom=green:5, up=blue:3, down=cyan:6, strange=magenta:7, charm=yellow:4] \definepalet [delta] [ top=yellow*:5, bottom=yellow*:3, up=yellow*:2, down=magenta:6, strange=blue:4, charm=blue:1] \definepalet [epsilon] [ top=cyan:7, bottom=cyan:5, up=blue:3, down=yellow:6, strange=yellow:4, charm=yellow:2] \definepalet [zeta] [ top=red:6, bottom=green:5, up=blue:7, down=cyan:4, strange=magenta:3, charm=yellow:2] \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-chr.lua��������������������������������0000644�0001750�0001750�00000014446�12130411274�024100� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['spac-chr'] = { version = 1.001, comment = "companion to spac-chr.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local byte, lower = string.byte, string.lower -- beware: attribute copying is bugged ... there will be a proper luatex helper -- for this -- to be redone: characters will become tagged spaces instead as then we keep track of -- spaceskip etc trace_characters = false trackers.register("typesetters.characters", function(v) trace_characters = v end) report_characters = logs.reporter("typesetting","characters") local nodes, node = nodes, node local insert_node_after = node.insert_after local remove_node = nodes.remove -- ! nodes local copy_node_list = node.copy_list local nodepool = nodes.pool local tasks = nodes.tasks local new_penalty = nodepool.penalty local new_glue = nodepool.glue local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue local space_skip_code = skipcodes["spaceskip"] local chardata = characters.data local typesetters = typesetters local characters = { } typesetters.characters = characters local fonthashes = fonts.hashes local fontparameters = fonthashes.parameters local fontcharacters = fonthashes.characters local fontquads = fonthashes.quads local a_character = attributes.private("characters") local a_alignstate = attributes.private("alignstate") local c_zero = byte('0') local c_period = byte('.') local function inject_quad_space(unicode,head,current,fraction) local attr = current.attr if fraction ~= 0 then fraction = fraction * fontquads[current.font] end local glue = new_glue(fraction) -- glue.attr = copy_node_list(attr) glue.attr = attr current.attr = nil glue[a_character] = unicode head, current = insert_node_after(head,current,glue) return head, current end local function inject_char_space(unicode,head,current,parent) local attr = current.attr local font = current.font local char = fontcharacters[font][parent] local glue = new_glue(char and char.width or fontparameters[font].space) -- glue.attr = copy_node_list(current.attr) glue.attr = current.attr current.attr = nil glue[a_character] = unicode head, current = insert_node_after(head,current,glue) return head, current end local function inject_nobreak_space(unicode,head,current,space,spacestretch,spaceshrink) local attr = current.attr local glue = new_glue(space,spacestretch,spaceshrink) local penalty = new_penalty(10000) -- glue.attr = copy_node_list(attr) glue.attr = attr current.attr = nil -- penalty.attr = attr glue[a_character] = unicode head, current = insert_node_after(head,current,penalty) head, current = insert_node_after(head,current,glue) return head, current end local methods = { -- The next one uses an attribute assigned to the character but still we -- don't have the 'local' value. [0x00A0] = function(head,current) -- nbsp local para = fontparameters[current.font] if current[a_alignstate] == 1 then -- flushright head, current = inject_nobreak_space(0x00A0,head,current,para.space,0,0) current.subtype = space_skip_code else head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink) end return head, current end, [0x2000] = function(head,current) -- enquad return inject_quad_space(0x2000,head,current,1/2) end, [0x2001] = function(head,current) -- emquad return inject_quad_space(0x2001,head,current,1) end, [0x2002] = function(head,current) -- enspace return inject_quad_space(0x2002,head,current,1/2) end, [0x2003] = function(head,current) -- emspace return inject_quad_space(0x2003,head,current,1) end, [0x2004] = function(head,current) -- threeperemspace return inject_quad_space(0x2004,head,current,1/3) end, [0x2005] = function(head,current) -- fourperemspace return inject_quad_space(0x2005,head,current,1/4) end, [0x2006] = function(head,current) -- sixperemspace return inject_quad_space(0x2006,head,current,1/6) end, [0x2007] = function(head,current) -- figurespace return inject_char_space(0x2007,head,current,c_zero) end, [0x2008] = function(head,current) -- punctuationspace return inject_char_space(0x2008,head,current,c_period) end, [0x2009] = function(head,current) -- breakablethinspace return inject_quad_space(0x2009,head,current,1/8) -- same as next end, [0x200A] = function(head,current) -- hairspace return inject_quad_space(0x200A,head,current,1/8) -- same as previous (todo) end, [0x200B] = function(head,current) -- zerowidthspace return inject_quad_space(0x200B,head,current,0) end, [0x202F] = function(head,current) -- narrownobreakspace return inject_nobreak_space(0x202F,head,current,fontquads[current.font]/8) end, [0x205F] = function(head,current) -- math thinspace return inject_nobreak_space(0x205F,head,current,fontparameters[current.font].space/8) end, -- [0xFEFF] = function(head,current) -- zerowidthnobreakspace -- return head, current -- end, } function characters.handler(head) local current = head local done = false while current do local id = current.id if id == glyph_code then local next = current.next local char = current.char local method = methods[char] if method then if trace_characters then report_characters("replacing character %C, description %a",char,lower(chardata[char].description)) end head = method(head,current) head = remove_node(head,current,true) done = true end current = next else current = current.next end end return head, done end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mag-01.tex��������������������������������0000644�0001750�0001750�00000022604�11754241457�023653� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-mag-01, %D version=2002.12.14, %D title=\CONTEXT\ Style File, %D subtitle=\CONTEXT\ Magazine Base Style, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This style is used for producing explanationary documents. % Don't misuse it for other purposes, since it may confuse % users. Don't change the title either, since it provides a % way to categorize documents. Numbers are disabled in % instances produced outside PRAGMA ADE. % % The layout setup is such that one has several text areas % available: headers and footers, margins and edges as well % as the main text area. The surrounding (gray) makes the % main page stand out and is suitable for viewing in spread % mode. % % Since this style is under constant construction, messing % around with settings will produce unwanted side effects. % So, if some feature or settings is needed, let me know. % todo: mp frames \setvariables[magazine][number=0] \setvariables[magazine][author=] \setvariables[magazine][title={Zero Issue}] \setvariables[magazine][date=\currentdate] % These are reserved for PRAGMA-ADE, don't use them yourself! % \setvariables[magazine][main=Tricky] % \setvariables[magazine][main=Update] % \setvariables[magazine][main=HOWTO] % \setvariables[magazine][main=This Way] % preludes to a/the manual % \setvariables[magazine][main=A Better Way] % dirty versus clean % \setvariables[magazine][main=No Way] % how users should not do it % \setvariables[magazine][main=Your Way] % how users do it % \setvariables[magazine][main=My Way] % how users do it % \setvariables[magazine][main=Our Way] % how we do things at pragma % \setvariables[magazine][main=Their Way] % how to do latex things in context \setvariables[magazine][main=My Way] \startmode[atpragma] \setvariables[magazine][main=This Way] \stopmode \definepapersize [magazine] [width=\dimexpr\paperwidth-.1\paperwidth\relax, height=\dimexpr\paperheight-.1\paperheight\relax] \setuppapersize [magazine] [A4] \setupinteractionscreen [option=doublesided] \definecolor[OuterColor][s=.3] \definecolor[InnerColor][s=.8] \definecolor[MainColor] [s=.2] \definecolor[TitleColor][s=.7] \definecolor[MyRed] [r=.6] \definecolor[MyGreen][g=.6] \definecolor[MyBlue] [b=.6] \startuseMPgraphic{paper} sh := define_circular_shade(a,a,0,bbheight(OverlayBox), \MPcolor{InnerColor},\MPcolor{OuterColor}) ; fill OverlayBox withshade sh ; \stopuseMPgraphic \startreusableMPgraphic{middlepaper} pair a ; a := center OverlayBox ; \includeMPgraphic{paper} \stopreusableMPgraphic \startreusableMPgraphic{rightpaper} pair a ; a := .5[urcorner OverlayBox,lrcorner OverlayBox] ; \includeMPgraphic{paper} \stopreusableMPgraphic \startreusableMPgraphic{leftpaper} pair a ; a := .5[ulcorner OverlayBox,llcorner OverlayBox] ; \includeMPgraphic{paper} \stopreusableMPgraphic \startreusableMPgraphic{page} fill OverlayBox withcolor white ; \stopreusableMPgraphic \startusableMPgraphic{text} StartPage ; for i = Header,Text,Footer : for j = LeftEdge, LeftMargin, Text, RightMargin, RightEdge : draw Field[i][j] withpen pencircle scaled .5pt ; endfor ; endfor ; StopPage ; setbounds currentpicture to Field[Text][Text] ; \stopusableMPgraphic \startsetups[paper] \doifmodeelse{*makeup} {\reuseMPgraphic{middlepaper}} {\doifoddpageelse {\reuseMPgraphic{rightpaper}} {\reuseMPgraphic{leftpaper}}} \stopsetups \defineoverlay[paper] [\setups{paper}] \defineoverlay[page] [\reuseMPgraphic{page}] \defineoverlay[text] [\doifmode{frame}{\useMPgraphic{text}}] \setupbackgrounds [paper] [background=paper] \setupbackgrounds [page] [background={page,title}] \setupbackgrounds [text] [background=text] \definelayer [title] [state=repeat, hoffset=-1cm, voffset=1cm, width=\paperwidth, height=\paperheight] \setupoutput [pdftex] \setuplayout [width=middle, topspace=1.5cm, height=middle, header=1.5cm, footer=1cm, %grid=yes, headerdistance=.25cm, footerdistance=.5cm, backspace=3cm, margin=1.5cm, margindistance=.25cm, edge=.75cm, edgedistance=.25cm, bottomdistance=1.5cm, bottom=.1\printpaperheight] \definelayout [makeup] [topspace=1cm, backspace=1cm, header=0pt, footer=0pt, bottom=0pt] \setuppagenumbering [alternative=doublesided] \setupcolors [state=start] \usetypescript [palatino][\defaultencoding] \setupbodyfont [palatino,10pt] \setuptolerance [verytolerant,stretch] \appendtoks\setups[papershift]\to\beforeeverypage \startsetups[papershift] \setuppapersize[top=\vskip.5cm,bottom=\vss] \doifmodeelse{*makeup} {\setuppapersize[left=\hfill,right=\hfill]} {\doifoddpageelse {\setuppapersize[right=\hfill]} {\setuppapersize[left=\hfill]}} \stopsetups \setupbottomtexts [\setups{rightbanner}] [] [] [\setups{leftbanner}] \startsetups [leftbanner] \definedfont[Regular at \the\bottomheight] \setbox\scratchbox\hbox{\TitleColor\getvariable{magazine}{main}} \ht\scratchbox1ex \dp\scratchbox\zeropoint \MainColor \definedfont[Regular sa 2] \doifsomething{\getvariable{magazine}{number}} {\doifnot{\getvariable{magazine}{number}}{0} {\#\getvariable{magazine}{number}}} \quad \currentdate \quad \scale[height=.25\bottomheight]{\box\scratchbox} \quad \hbox to 1.5em{\hss\pagenumber\hss} \quad \hskip-\backspace \stopsetups \startsetups [rightbanner] \definedfont[Regular at \the\bottomheight] \setbox\scratchbox\hbox{\TitleColor\getvariable{magazine}{main}} \ht\scratchbox1ex \dp\scratchbox\zeropoint \MainColor \hskip-\backspace \definedfont[Regular sa 2] \quad \hbox to 1.5em{\hss\pagenumber\hss} \quad \scale[height=.25\bottomheight]{\box\scratchbox} \quad \currentdate \quad \doifmode{atpragma}{\#\getvariable{magazine}{number}} \stopsetups \startsetups[titlepage] \disablemode[frame] \setuplayout[makeup] \startstandardmakeup[doublesided=no] \dontcomplain \definelayer [makeup] [width=\textwidth, height=\textheight] \setlayerframed [makeup] [corner={left,top},location={right,bottom}] [frame=off, foregroundcolor=MainColor] {\scale [width=\makeupwidth] {\definedfont[Regular sa 10]% \getvariable{magazine}{main}}} \setlayerframed [makeup] [corner={right,top},location={left},y=.4\textheight] [frame=off, foregroundcolor=MainColor, width=\textwidth, align=left] {\definedfont[Regular sa 2.5]\setupinterlinespace \startmode[atpragma] \strut \ConTeXt\ magazine \#\getvariable{magazine}{number}\endgraf \stopmode \strut \getvariable{magazine}{date} \endgraf \blank \strut \getvariable{magazine}{title}\endgraf \doifsomething{\getvariable{magazine}{author}} {\strut \getvariable{magazine}{author}\endgraf} \doifsomething{\getvariable{magazine}{affiliation}} {\strut \getvariable{magazine}{affiliation}\endgraf}} \setlayerframed [makeup] [corner={right,bottom},location={left,top}] [frame=off, align=normal, width=.8\textwidth, foregroundcolor=MainColor] {\getbuffer[abstract]} \flushlayer[makeup] \stopstandardmakeup \setuplayout[reset] \stopsetups \startsetups[listing] \page \disablemode[frame] \setuptexttexts [][] \setuptexttexts [] \setupheadertexts[][] \setupheadertexts[source code of this document] \setupfootertexts[][] \setupfootertexts[] \start \dontcomplain \typefile[TEX]{\inputfilename} \stop \stopsetups \startsetups[lastpage] \page \disablemode[frame] \page[even] \doifoddpageelse {} {\setuplayout[makeup] \startstandardmakeup[doublesided=no,page=] \stopstandardmakeup \setuplayout[reset]} \stopsetups \startsetups[title] \disablemode[frame] \setlayerframed [title] [corner={left,top},location={left,bottom}, rotation=90] [frame=off, foregroundcolor=MainColor] {\definedfont[RegularBold sa 2]\strut\getvariable{magazine}{title}} \setlayerframed [title] [corner={right,top}, rotation=270] [frame=off, foregroundcolor=MainColor] {\definedfont[RegularBold sa 2]\strut\getvariable{magazine}{title}} \stopsetups \startbuffer[abstract] % no abstract \stopbuffer \setuphead [chapter] [page=yes, after={\blank[2*big]}, color=MainColor, style=\bfc] \setuphead [section] [before={\blank[2*big]}, after=\blank, color=MainColor, style=\bfb] \setuphead [subsection] [before=\blank, after=, color=MainColor, style=\bf] \setupwhitespace [big] \definetyping[xtyping] [style=\ttx] \definetyping[xxtyping][style=\ttxx] \definetypeface [narrowtt] [tt] [mono] [modern-cond] [default] [encoding=\defaultencoding] \definetyping[ntyping] \setuptyping[ntyping][style=\narrowtt] \definetype [ntype] \setuptype [ntype] [style=\narrowtt] \doifnotmode{demo}{\endinput} \startbuffer[abstract] \input tufte \stopbuffer \starttext % \showframe \setups[titlepage] \setups[title] \chapter{E.R. Tufte} \input tufte \page \chapter{D.E.K. Knuth} \input knuth \page \chapter{H. Zapf} \input zapf \page \chapter{D. Hofstadter} \input douglas \page \setups[lastpage] \stoptext ����������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/back-pdf.lua��������������������������������0000644�0001750�0001750�00000001070�11754241457�024053� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['back-pdf'] = { version = 1.001, comment = "companion to back-pdf.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local codeinjections = backends.pdf.codeinjections local outputfilename function codeinjections.getoutputfilename() if not outputfilename then outputfilename = file.addsuffix(tex.jobname,"pdf") end return outputfilename end backends.install("pdf") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-libertine.mkiv���������������������0000644�0001750�0001750�00000006500�11754241457�026313� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=type-imp-libertine, %D version=2010.06.21, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Libertine fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[libertine] \starttypescript [\s!serif] [libertine] \definefontsynonym [Libertine-Regular] [\s!file:linlibertiner] \definefontsynonym [Libertine-Italic] [\s!file:linlibertineri] \definefontsynonym [Libertine-Slanted] [\s!file:linlibertinearl] \definefontsynonym [Libertine-Bold] [\s!file:linlibertinerb] \definefontsynonym [Libertine-BoldItalic] [\s!file:linlibertinerbi] \definefontsynonym [Libertine-BoldSlanted] [\s!file:linlibertineabl] \stoptypescript \starttypescript [\s!serif] [libertine] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [Libertine-Regular] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [Libertine-Italic] [\s!features=\s!default] \definefontsynonym [\s!SerifSlanted] [Libertine-Slanted] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [Libertine-Bold] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [Libertine-BoldItalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted] [Libertine-BoldSlanted] [\s!features=\s!default] \definefontsynonym [SerifCaps] [Libertine-Regular] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [\s!sans] [biolinum] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [Biolinum-Regular] [\s!file:linbiolinumr] \definefontsynonym [Biolinum-Bold] [\s!file:linbiolinumrb] \definefontsynonym [Biolinum-Italic] [\s!file:linbiolinumri] \definefontsynonym [Biolinum-Slanted] [\s!file:linbiolinumarl] \definefontsynonym [Biolinum-BoldSlanted] [\s!file:linbiolinumabl] \stoptypescript \starttypescript [\s!sans] [biolinum] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Biolinum-Regular] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [Biolinum-Bold] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [Biolinum-Italic] [\s!features=\s!default] \definefontsynonym [\s!SansSlanted] [Biolinum-Slanted] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [Biolinum-BoldSlanted] [\s!features=\s!default] \definefontsynonym [SansCaps] [Biolinum-Regular] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [libertine] \definetypeface [libertine] [\s!rm] [\s!serif] [libertine] [\s!default] \definetypeface [libertine] [\s!ss] [\s!sans] [biolinum] [\s!default] \definetypeface [libertine] [\s!tt] [\s!mono] [default] [\s!default] %definetypeface [libertine] [\s!mm] [\s!math] [times] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/layo-ini.lua��������������������������������0000644�0001750�0001750�00000003117�11571377075�024134� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['layo-ini'] = { version = 1.001, comment = "companion to layo-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We need to share information between the TeX and Lua end -- about the typographical model. This happens here. -- -- Code might move. -- conditionals.layoutisdoublesided -- conditionals.layoutissinglesided -- texcount.pagenoshift -- texcount.realpageno local texcount = tex.count local conditionals = tex.conditionals layouts = { status = { }, } local status = layouts.status function status.leftorrightpagection(left,right) if left == nil then left, right = false, true end if not conditionals.layoutisdoublesided then return left, right elseif conditionals.layoutissinglesided then return left, right elseif texcount.pagenoshift % 2 == 0 then if texcount.realpageno % 2 == 0 then return right, left else return left, right end else if texcount.realpageno % 2 == 0 then return left, right else return right, left end end end function status.isleftpage() if not conditionals.layoutisdoublesided then return false elseif conditionals.layoutissinglesided then return false elseif texcount.pagenoshift % 2 == 0 then return texcount.realpageno % 2 == 0 else return not texcount.realpageno % 2 == 0 end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-fld.mkvi�������������������������������0000644�0001750�0001750�00000106165�12134352503�024300� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=scrn-fld, %D version=1997.05.18, %D title=\CONTEXT\ Screen Macros, %D subtitle=Fields, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % There is still some leftover code from mkii, where we need to % be sparse with hash entries and so have a somewhat complex % setup mechanism. % interaction checking \writestatus{loading}{ConTeXt Screen Macros / Fields} \unprotect \registerctxluafile{scrn-fld}{1.001} %D In \MKII\ we had to cheat a bit with setups in order not to run %D out of memory with thousands of fields, which we happen to need at %D that time. In \MKIV\ we can store some data at the \LUA\ end and %D use a somewhat slower but quite okay inheritance mechanism. For %D this reason we now have split definitions, although the old method %D is still somewhat supported. The clone and copy commands are %D somewhat obsolete for several reasons: we can now use inheritance %D and autocloning has been supported for a while. In most cases %D cloning (especially with check boxes) the acrobat browser is not %D stable enough with respect to appearance handling. %D %D A fieldcategory is nothing more than a collection of settings. %D %D \starttyping %D \definefieldcategory %D [all-email] %D [height=1cm, %D width=14cm, %D style=sstf] %D \stoptyping %D %D A definition can refer to this category: %D %D \starttyping %D \definefieldbody [email] [type=line,category=all-email,default=pragma@wxs.nl] %D \stoptyping %D %D A copy of a field is made as follows: %D %D \starttyping %D \definefieldbody [xmail] [email] %D \stoptyping %D %D You can also be more specific: %D %D \starttyping %D \definefieldbody[buttona][type=check,values={one,two}] %D \definefieldbody[buttonb][type=check,values={three,four}] %D \definefieldbody[buttonc][buttona][values={three,four}] %D \stoptyping %D %D Actually typesetting a field happens this way: %D %D \starttyping %D \fieldbody [Email] %D \fieldbody [Email] [width=6cm] %D \fieldbody [eMAIL] %D \fieldbody [eMAIL] [width=7cm] %D %D \fieldbody [buttona] %D \fieldbody [buttona] %D \fieldbody [buttonb] %D \fieldbody [buttonb] %D \fieldbody [buttonc] %D \fieldbody [buttonc] %D \stoptyping %D %D So, you can call up a field many times and quite some parameters %D can be set. %D %D Because there are persistent problems with acrobat rendering %D associated appearance streams (some messy /MK interferende) we %D also support native (built-in dingbat) symbols: check, circle, %D cross, diamond, square and star. %D %D \starttyping %D \definefield[test1][check] %D \definefield[test2][check] %D %D \fieldbody[test1][width=1em,height=\strutht,depth=\strutdp,symbol=check] %D \fieldbody[test1][width=1em,height=\strutht,depth=\strutdp,symbol=circle] %D \fieldbody[test2][width=1em,height=\strutht,depth=\strutdp,symbol=square] %D \stoptyping %D %D When submitting a form, we need to tell the driver module %D that we want \FDF\ or \HTML. \installcorenamespace {forms} \installdirectcommandhandler \??forms {forms} \appendtoks \ctxcommand{setformsmethod("\formsparameter\c!method")}% \to \everysetupforms \setupforms [\c!method=XML] % no need for everyjob initialization as this is the default \appendtoks \iflocation \ctxcommand{exportformdata("\formsparameter\c!export")}% \fi \to \everystoptext %D We need to initialize symbols in a special way so that they %D can be used as rendering for a widget. \unexpanded\def\presetfieldsymbols[#list]% slow {\processcommacommand[#list]\scrn_symbols_preset} \def\scrn_symbols_preset#set% {\processcommalist[#set]\scrn_symbols_preset_indeed}% \def\scrn_symbols_preset_indeed#tag% {\doifobjectfoundelse{SYM}{#tag} {} {\settightobject{SYM}{#tag}\hbox{\symbol[#tag]}% % todo: set this as immediate xform \page_otr_add_special_content{\hskip-\maxdimen\getobject{SYM}{#tag}}}} % and then force it into the file \let\dosetfieldsymbol\scrn_symbols_preset_indeed \def\dogetfieldsymbol#tag% {\getobject{SYM}{#tag}} \unexpanded\def\definedefaultsymbols % used ? {\definesymbol[defaultyes][\mathematics{\times}]% \definesymbol[defaultno] [\mathematics{\cdot }]} % \def\resetfieldsymbol[#tag]% for experimental usage only % {\resetobject{SYM}{#tag}} %D Now comes the real code: \installcorenamespace{fieldcategory} \installcorenamespace{fieldbody} \installcommandhandler \??fieldcategory {fieldcategory} \??fieldcategory \installcommandhandler \??fieldbody {fieldbody} \??fieldbody \newbox\b_scrn_field_body \setupfieldcategory [\c!alternative=\v!normal, % normal clone copy \c!type=\v!line, % line text ... \c!width=5em, \c!height=1em, \c!depth=\zeropoint, \c!align=\v!flushleft, \c!option=\v!printable, % maybe we need a globaloptions and marge them \c!n=1024] \def\scrn_field_check_category {\edef\currentfieldbodycategory{\fieldbodyparameter\c!category}% \ifx\currentfieldbodycategory\empty \letfieldbodyparameter\s!parent\??fieldcategory %\setevalue{\currentfieldbodyhash\s!parent}{\namedfieldcategoryhash\empty}% to WS: not hash ! \else \normalexpanded{\setfieldbodyparameter{\s!parent}{\??fieldcategory\currentfieldbodycategory}}% %\setevalue{\currentfieldbodyhash\s!parent}{\namedfieldcategoryhash\currentfieldbodycategory}% to WS: not hash ! \fi} \appendtoks % we cannot use parent .. maybe s!parent has to change \ifx\currentfieldbodyparent\empty \scrn_field_check_category \ctxcommand{definefield{ name = "\currentfieldbody", alternative = "normal", type = "\fieldbodyparameter\c!type", category = "\fieldbodyparameter\c!category", values = \!!bs\fieldbodyparameter\c!values\!!es, default = \!!bs\fieldbodyparameter\c!default\!!es }}% \else \ctxcommand{clonefield{ children = "\currentfieldbody", alternative = "clone", parent = "\currentfieldbodyparent", category = "\fieldbodyparameter\c!category", values = \!!bs\fieldbodyparameter\c!values\!!es, default = \!!bs\fieldbodyparameter\c!default\!!es }}% \fi \to \everydefinefieldbody \unexpanded\def\fieldbody {\dodoubleempty\scrn_field_body} \def\scrn_field_body[#tag][#settings]% {\iflocation \hbox\bgroup \edef\currentfieldbody{#tag}% \ifsecondargument \setupcurrentfieldbody[#settings]% \fi \scrn_field_body_typeset \box\b_scrn_field_body \egroup \fi} \def\scrn_field_body_typeset % todo: fieldsymbol (checkfields /MK mess) {\edef\currentfieldframecolor{\fieldbodyparameter\c!fieldframecolor}% \ifx\currentfieldframecolor\empty\else \getcolorattributevalue\currentfieldframecolor\currentfieldframecolorvalue % == \edef\currentfieldframecolorvalue{\thecolorattribute\currentfieldframecolor}% \fi \edef\currentfieldbackgroundcolor{\fieldbodyparameter\c!fieldbackgroundcolor}% \ifx\currentfieldbackgroundcolor\empty\else \getcolorattributevalue\currentfieldbackgroundcolor\currentfieldbackgroundcolorvalue % == \edef\currentfieldbackgroundcolorvalue{\thecolorattribute\currentfieldbackgroundcolor}% \fi \usefieldbodystyleandcolor\c!style\c!color \ctxcommand{insertfield("\currentfieldbody", { title = "\currentfieldbody", width = \number\dimexpr\fieldbodyparameter\c!width \relax, height = \number\dimexpr\fieldbodyparameter\c!height\relax, depth = \number\dimexpr\fieldbodyparameter\c!depth \relax, align = "\fieldbodyparameter\c!align", length = "\fieldbodyparameter\c!n", fontstyle = "\fontstyle", fontalternative = "\fontalternative", fontsize = "\fontbody", fontsymbol = "\fieldbodyparameter\c!symbol", color = "\fieldbodyparameter\c!color", colorvalue = \number\attribute\colorattribute, \ifx\currentfieldbackgroundcolor\empty \else backgroundcolor = "\currentfieldbackgroundcolor", backgroundcolorvalue = "\currentfieldbackgroundcolorvalue", \fi \ifx\currentfieldframecolor\empty \else framecolor = "\currentfieldframecolor", framecolorvalue = "\currentfieldframecolorvalue", \fi layer = "\fieldbodyparameter\c!fieldlayer", option = "\fieldbodyparameter\c!option", align = "\fieldbodyparameter\c!align", clickin = "\fieldbodyparameter\c!clickin", clickout = "\fieldbodyparameter\c!clickout", regionin = "\fieldbodyparameter\c!regionin", regionout = "\fieldbodyparameter\c!regionout", afterkey = "\fieldbodyparameter\c!afterkey", format = "\fieldbodyparameter\c!format", validate = "\fieldbodyparameter\c!validate", calculate = "\fieldbodyparameter\c!calculate", focusin = "\fieldbodyparameter\c!focusin", focusout = "\fieldbodyparameter\c!focusout", openpage = "\fieldbodyparameter\c!openpage", closepage = "\fieldbodyparameter\c!closepage", })}} %D The sets are used in grouped calculations. %D %D [name] [set] \unexpanded\def\definefieldbodyset {\dodoubleempty\scrn_field_define_set} \def\scrn_field_define_set[#tag][#list]% {\ctxcommand{definefieldset("#tag","#list")}} \let\dodefinefieldset\definefieldbodyset % compatibility %D A few testing macros: \def\doiffieldbodyelse #tag{\ctxcommand{doiffieldelse("#tag")}} \def\doiffieldcategoryelse#tag{\ctxcommand{doiffieldcategoryelse("#tag")}} \let\doiffieldelse\doiffieldbodyelse % compatibility %D We still support the traditional method of defining fields: %D %D \starttyping %D \definefield [name] [type] [category] [values] [default] %D %D \definefield [WWWW] [text] [textsetup] [default text] %D \definefield [XXXX] [push] [pushsetup] [yes,no] [yes] %D \definefield [XXXX] [check] [checksetup] [yes,no] [yes] %D \definefield [YYYY] [combo] [combosetup] [a,b,c,d] [b] %D \definefield [ZZZZ] [radio] [radiosetup] [W,X,Y,Z] [Y] %D %D \definesubfield [W] [subsetup] [p,q] %D \definesubfield [X,Y] [subsetup] [p,r] %D \definesubfield [Z] [subsetup] [y,z] %D %D evt \definemainfield ... wanneer geplaatst voor subs gegeven %D %D \clonefield [XXXX] [XX,YY] [mysetup] [on,off] %D \clonefield [Z] [AA,BB] [somesetup] [true,false] %D \clonefield [Z] [CC,DD] [anothersetup] %D %D \copyfield [XXXX] [PP,QQ,RR] %D \stoptyping %D %D Keep in mind that you can also use \type {\definefieldbody} to %D achieve the same. \unexpanded\def\definefield {\doquintupleempty\scrn_field_define_field} \unexpanded\def\definesubfield{\dotripleempty \scrn_field_define_subfield} \unexpanded\def\clonefield {\doquadrupleempty\scrn_field_clone_field} \unexpanded\def\copyfield {\dodoubleempty \scrn_field_copy_field} \let\definemainfield\definefield % obsolete ! \def\scrn_field_define_field[#tag][#type][#category][#values][#default]% {\definefieldbody[#tag][\c!type=#type,\c!category=#category,\c!values={#values},\c!default={#default}]} \def\scrn_field_define_subfield[#tag][#category][#values]% {\definefieldbody[#tag][\c!type=sub,\c!category=#category,\c!values={#values}]} \def\scrn_field_clone_field[#parent][#tag][#category][#values]% {\definefieldbody[#tag][#parent][\c!category=#category,\c!values={#values}]} \def\scrn_field_copy_field[#parent][#tag]% {\definefieldbody[#tag][#parent]} %D We hook fields into the (viewer based) layering mechanism %D (implemented as properties). \appendtoks \let\currentfieldcategory\empty \doifelse{\interactionparameter\c!fieldlayer}\v!auto {\setupcurrentfieldcategory[\c!fieldlayer=\currentviewerlayer]}% {\setupcurrentfieldcategory[\c!fieldlayer=]}% \to \everysetupinteraction \setupinteraction [\c!fieldlayer=\v!auto] % auto by default %D The \type {\fieldbody} is the more bare one. One step further goes %D \type {\fitfield}, in fact it (now) uses a dedicated instance of %D framed: \type {fitfieldframed}. %D %D \starttyping %D \ruledhbox{\fieldbody[Email][height=\strutht,depth=\strutdp,style=normal]} %D \ruledhbox{\fitfield[Email][height=\strutht,depth=\strutdp,style=normal]} %D \ruledhbox{\fitfield[buttona]} %D \stoptyping \newbox\b_scrn_field_fit_symbol \defineframed [fitfieldframed] [\c!strut=\v!no, \c!frame=off, \c!offset=\v!overlay, \c!align=] \unexpanded\def\fitfield {\dodoubleempty\scrn_field_fit} \def\scrn_field_fit[#tag][#settings]% {\iflocation \begingroup \edef\currentdefaultfieldvalue{\ctxcommand{getdefaultfieldvalue("#tag")}}% \setbox\b_scrn_field_fit_symbol\hbox{\symbol[\currentdefaultfieldvalue]}% \fitfieldframed {\fieldbody[#tag] [\c!width=\wd\b_scrn_field_fit_symbol, \c!height=\ht\b_scrn_field_fit_symbol, \c!depth=\dp\b_scrn_field_fit_symbol, #settings]}% \endgroup \fi} %D The traditional field command does some labeling and %D boxing: \installcorenamespace{fieldlabel} \installcorenamespace{fieldcontent} \installcorenamespace{fieldtotal} \installparameterhandler \??fieldlabel {fieldlabelframed} \installparameterhandler \??fieldcontent {fieldcontentframed} \installparameterhandler \??fieldtotal {fieldtotalframed} \installsetuphandler \??fieldlabel {fieldlabelframed} \installsetuphandler \??fieldcontent {fieldcontentframed} \installsetuphandler \??fieldtotal {fieldtotalframed} \installinheritedframed {fieldlabelframed} \installinheritedframed {fieldcontentframed} \installinheritedframed {fieldtotalframed} \unexpanded\def\setupfield {\doquintupleempty\scrn_field_setup_field} \unexpanded\def\setupfields{\doquadrupleempty\scrn_field_setup_fields} \setupfieldcontentframed [\c!align=\v!flushleft, \c!strut=\v!no, \s!parent=\??regularframed] % needs checking \setupfieldcontentframed % independent [\c!alternative=\v!normal, \c!type=\v!line, \c!width=5em, \c!height=\lineheight, \c!depth=\zeropoint, \c!align=\v!flushleft, \c!option=\v!printable, \c!n=1024] \setupfieldlabelframed [\c!style=, \c!color=, \c!align=\v!flushleft, \s!parent=\??regularframed] % needs checking \setupfieldtotalframed [%\c!alternative={\v!label,\v!frame,\v!horizontal}, \c!strut=\v!no, \c!align=, \s!parent=\??regularframed] % needs checking % \setupcurrent \def\scrn_field_setup_field[#tag][#variant][#totalsettings][#labelsettings][#fieldsettings]% {\iffifthargument \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#fieldsettings]% \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal,\c!alternative={#variant},#totalsettings]% \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel,#labelsettings]% \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#fieldsettings]% \else\iffourthargument \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#labelsettings]% \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal,\c!alternative={#variant},#totalsettings]% \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel]% \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#labelsettings]% \else\ifthirdargument \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#totalsettings]% \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal,\c!alternative={#variant}]% \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel]% \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#totalsettings]% \else\ifsecondargument \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#variant]% \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal]% \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel]% \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#variant]% \fi\fi\fi\fi} \def\scrn_field_setup_fields[#variant][#totalsettings][#labelsettings][#fieldsettings]% {\iffourthargument \setupfieldtotalframed [\c!alternative={#variant},#totalsettings]% \setupfieldlabelframed [#labelsettings]% \setupfieldcontentframed[#fieldsettings]% \else\ifthirdargument \setupfieldtotalframed [#variant]% \setupfieldlabelframed [#totalsettings]% \setupfieldcontentframed[#labelsettings]% \else\ifsecondargument \setupfieldtotalframed [#variant]% \setupfieldcontentframed[#totalsettings]% \else \setupfieldtotalframed [#variant]% \fi\fi\fi} % just to get the chain right for no category: \definefieldcategory [][\s!parent=\??fieldcontent] %setupfieldtotalframed [][\s!parent=\??fieldtotal] %setupfieldlabelframed [][\s!parent=\??fieldlabel] %setupfieldcontentframed[][\s!parent=\??fieldcontent] % no longer supported: \let\resetfields\relax \def\scrn_field_load_scripts{\useJSscripts[fld]\globallet\scrn_field_load_scripts\relax} \newconditional\fieldlabelshown \newconditional\fieldframeshown \newconditional\fieldisvertical \newconditional\fieldishorizontal \unexpanded\def\field {\dodoubleempty\scrn_field_direct} \def\scrn_field_direct[#tag][#label]% can be sped up with \setupcurrentfieldtotalframed etc {\iflocation \dontleavehmode \begingroup \scrn_field_load_scripts \edef\currentfieldbody {#tag}% \edef\currentfieldlabel {#label}% \edef\currentfieldcategory{\ctxcommand{getfieldcategory("#tag")}}% \ifx\currentfieldlabel\empty \let\currentfieldlabel\currentfieldbody \fi \ifx\currentfieldcategory\empty \setupfieldtotalframed [\currentfieldbody][\s!parent=\??fieldtotal]% \setupfieldlabelframed [\currentfieldbody][\s!parent=\??fieldlabel]% \setupfieldcontentframed[\currentfieldbody][\s!parent=\??fieldcontent]% \definefieldcategory [\currentfieldbody]% \setupfieldbody [\currentfieldbody][\c!category=\currentfieldbody]% \let\currentfieldcategory\currentfieldbody \fi \let\currentfieldtotalframed \currentfieldcategory \let\currentfieldlabelframed \currentfieldcategory \let\currentfieldcontentframed\currentfieldcategory \scrn_field_analyze_setups \ifconditional\fieldframeshown \inheritedfieldtotalframedframed % lower framedoffset \bgroup \else \vbox \bgroup \fi \dontcomplain \ifconditional\fieldlabelshown \scrn_field_set_label_box \fi \scrn_field_set_content_box \ifconditional\fieldlabelshown \ifconditional\fieldisvertical \scrn_field_flush_vertical \else \scrn_field_flush_horizontal \fi \else \scrn_field_flush_content \fi \egroup \endgroup \fi} % opties: veld, label, kader, vertikaal/horizontaal \newbox\b_scrn_field_label \newbox\b_scrn_field_content % lower framedoffset \def\scrn_field_set_label_box {\setbox\b_scrn_field_label\hbox {\reshapeframeboxtrue % else wrong dimensions % still needed? \inheritedfieldlabelframedframed {\currentfieldlabel}}} % \c!fieldoffset=-\framedoffset,\c!fieldbackgroundcolor=, % \hbox{\lower\@@fdfieldoffset\hbox{\typesetfield}} \def\scrn_field_set_content_box {\setbox\b_scrn_field_content\hbox {\reshapeframeboxtrue % else wrong dimensions (to be checked) \doifnothing{\fieldcontentframedparameter\c!height} {\ifconditional\fieldisvertical \setfieldcontentframedparameter\c!height{6ex}% \else\ifconditional\fieldishorizontal \setfieldcontentframedparameter\c!height{\vsize}% \else \setfieldcontentframedparameter\c!height{2cm}% \fi\fi}% \doifnothing{\fieldcontentframedparameter\c!width} {\ifconditional\fieldisvertical \setfieldcontentframedparameter\c!width{\hsize}% \else\ifconditional\fieldishorizontal \setfieldcontentframedparameter\c!width{20em}% \else \setfieldcontentframedparameter\c!width{2cm}% \fi\fi}% \inheritedfieldcontentframedframed % lower framedoffset {\fieldbody [\currentfieldbody] [\c!width=\framedwidth,\c!height=\framedheight]}}} \def\scrn_field_flush_vertical {\vbox {\copy\b_scrn_field_label \fieldtotalframedparameter\c!inbetween \copy\b_scrn_field_content}} \def\scrn_field_flush_horizontal {\hbox {\vbox \ifdim\ht\b_scrn_field_content>\ht\b_scrn_field_label to \ht\b_scrn_field_content \fi {\fieldtotalframedparameter\c!before \copy\b_scrn_field_label \fieldtotalframedparameter\c!after}% \hskip\fieldtotalframedparameter\c!distance \vbox \ifdim\ht\b_scrn_field_label>\ht\b_scrn_field_content to \ht\b_scrn_field_label \fi {\fieldtotalframedparameter\c!before \box\b_scrn_field_content \fieldtotalframedparameter\c!after}}} \def\scrn_field_flush_content {\box\b_scrn_field_content} %D todo: replace \processallactionsinset \def\scrn_field_analyze_setups {\setfalse\fieldlabelshown \setfalse\fieldframeshown \setfalse\fieldishorizontal \setfalse\fieldisvertical \normalexpanded{\processallactionsinset[\fieldtotalframedparameter\c!alternative]} [ \v!reset=>\setfalse\fieldlabelshown \setfalse\fieldframeshown \setfalse\fieldishorizontal \setfalse\fieldisvertical, \v!label=>\settrue\fieldlabelshown, \v!frame=>\settrue\fieldframeshown, \v!horizontal=>\settrue\fieldishorizontal, \v!vertical=>\settrue\fieldisvertical]% \ifconditional\fieldisvertical \setupfieldtotalframed[\c!distance=\zeropoint,\c!inbetween=\vskip\d_framed_local_offset,\c!align=\v!right,\c!width=20em]% \else\ifconditional\fieldishorizontal \setupfieldtotalframed[\c!distance=\d_framed_local_offset,\c!inbetween=,\c!align=\c!left,\c!height=10ex]% \else \setupfieldtotalframed[\c!distance=\zeropoint,\c!inbetween=,\c!align=\c!left]% \fi\fi \setupfieldtotalframed[\c!n=,\c!before=,\c!after=\vss,\c!style=,\c!color=]} %D Common stuff (obsolete) \newcount\c_scrn_field_system_n \def\nextsystemfield {\global\advance\c_scrn_field_system_n\plusone \def\currentsystemfield{sys::\number\c_scrn_field_system_n}} %D \CONTEXT\ had tooltips right from the moment that it %D supported fields. Due to the at that moment somewhat %D limited \PDF\ specification, they were implemented %D using \JAVASCRIPT, but nowadays more kind of actions %D are supported, so we can do without. The \MKIV\ version %D also supports definition of tooltips and configuration. %D %D \starttyping %D before \tooltip[right]{inbetween}{a very nice tip} after\par %D before \tooltip[align=normal]{inbetween}{a very\\nice tip} after\par %D before \tooltip[middle]{inbetween}{a very nice tip} after\par %D before \tooltip[left]{inbetween}{a very nice tip} after\par %D \stoptyping \newbox \b_scrn_tooltip_anchor \newbox \b_scrn_tooltip_text \newcount\c_scrn_tooltip_n \installcorenamespace{tooltip} \installframedcommandhandler \??tooltip {tooltip} \??tooltip \setuptooltip [\c!location=\v!right, \c!frame=\v!off, \c!offset=.1ex, \c!background=\v!color, \c!backgroundcolor=gray] \appendtoks \setuevalue\currenttooltip{\scrn_tooltip_direct{\currenttooltip}}% \to \everydefinetooltip \unexpanded\def\scrn_tooltip_direct#tag% {\def\currenttooltip{#tag}% \doifelselocation {\dosingleempty\scrn_tooltip_indeed} {\dosingleempty\scrn_tooltip_ignore}} \def\scrn_tooltip_ignore[#settings]#anchortext#tiptext% {#anchortext} \def\scrn_tooltip_indeed[#settings]#anchortext#tiptext% a more modern aproach (push buttons) {\dontleavehmode \hbox \bgroup \dontcomplain \global\advance\c_scrn_tooltip_n\plusone \edef\currenttooltipname{tooltip:\number\c_scrn_tooltip_n}% \setbox\b_scrn_tooltip_anchor\hbox {\strut#anchortext}% \doifassignmentelse{#settings} {\setupcurrenttooltip[#settings]}% {\setupcurrenttooltip[\c!location=#settings]}% \setbox\b_scrn_tooltip_text\hbox {\lettooltipparameter\c!location\empty \inheritedtooltipframed{#tiptext}}% \definesymbol [\currenttooltipname:txt] [\copy\b_scrn_tooltip_text]% \definefieldbody [\currenttooltipname:txt] [\c!type=push, \c!width=\wd\b_scrn_tooltip_text, \c!height=\ht\b_scrn_tooltip_text, \c!depth=\dp\b_scrn_tooltip_text, \c!option=\v!hidden, \c!values=\currenttooltipname:txt]% \setbox\b_scrn_tooltip_text\hbox {\fieldbody[\currenttooltipname:txt]}% \setbox\b_scrn_tooltip_text\hbox {\strut\lower\dimexpr.25ex+\ht\b_scrn_tooltip_text\relax\box\b_scrn_tooltip_text}% \edef\currenttooltiplocation{\tooltipparameter\c!location}% \ifx\currenttooltiplocation\v!left \hsmashed{\hskip\wd\b_scrn_tooltip_anchor\llap{\box\b_scrn_tooltip_text}}% \else\ifx\currenttooltiplocation\v!middle \hsmashed to \wd\b_scrn_tooltip_anchor{\hss\box\b_scrn_tooltip_text\hss}% \else \hsmashed{\box\b_scrn_tooltip_text}% \fi\fi \definesymbol [\currenttooltipname:but] [\hphantom{\copy\b_scrn_tooltip_anchor}]% \definefieldbody [\currenttooltipname:but] [\c!type=push, \c!regionin=action(show{\currenttooltipname:txt}), \c!regionout=action(hide{\currenttooltipname:txt}), \c!width=\wd\b_scrn_tooltip_anchor, \c!height=\ht\b_scrn_tooltip_anchor, \c!depth=\dp\b_scrn_tooltip_anchor]% \hsmashed{\fieldbody[\currenttooltipname:but]}% \egroup #anchortext}% when hyphenated the text wil stick out ... such are fields and we cannot use a link here \definetooltip[tooltip] %D From messages on the mailing list we can conclude that %D fieldstacks are used so we keep them in the core: %D %D \starttyping %D \definesymbol[one] [one] %D \definesymbol[two] [two] %D \definesymbol[three][three] %D %D \definefieldstack[mine][one,two,three] %D \fieldstack[mine] %D \fieldstack[mine] %D %D \goto{walk field}[Walk{mine}] %D \stoptyping \unexpanded\def\definefieldstack {\dotripleargument\scrn_fieldstack_define} \def\scrn_fieldstack_define[#tag][#symbols][#settings]% {\ifcsname scrn_fieldstack:#tag\endcsname \else \setgvalue{scrn_fieldstack:#tag}{\scrn_fieldstack_construct[#tag][#symbols][#settings]}% \fi} \unexpanded\def\fieldstack {\dotripleempty\scrn_fieldstack_direct} \def\scrn_fieldstack_direct[#tag][#symbols][#settings]% {\ifsecondargument \scrn_fieldstack_define[#tag][#symbols][#settings]% \fi \getvalue{scrn_fieldstack:#tag}} \newbox\b_scrn_fieldstack_box \def\scrn_fieldstack_add#tag#settings#symbol% {\advance\scratchcounter\plusone \edef\currentfieldstackname{#tag:\number\scratchcounter}% \ifnum\scratchcounter=\fieldcategoryparameter\c!start\relax \definefieldbody[\currentfieldstackname][\c!type=check,\c!values={#symbol,\empty},\c!default={#symbol}]% \else \definefieldbody[\currentfieldstackname][\c!type=check,\c!values={#symbol,\empty},\c!default=]% \fi \setbox\b_scrn_fieldstack_box\hbox{\symbol[#symbol]}% \setcollector [fieldstack] {\fieldbody [\currentfieldstackname] [\c!option=\v!readonly, \c!width=\wd\b_scrn_fieldstack_box, \c!height=\ht\b_scrn_fieldstack_box, \c!depth=\dp\b_scrn_fieldstack_box, #settings]}} \def\scrn_fieldstack_construct[#tag][#symbols][#settings]% start=n, 0 == leeg {\iflocation \dontleavehmode \begingroup \setupfieldcategory[\c!start=1,#settings]% was just \??fieldcategory \scrn_field_load_scripts \definecollector [fieldstack]% [\c!corner=\v!middle, \c!location=\v!middle]% \scratchcounter\zerocount \processcommalist[#symbols]{\scrn_fieldstack_add{#tag}{#settings}}% \flushcollector[fieldstack]% \endgroup \fi} %D Another goodie. Two actions can be hookes into an overlay. %D %D \starttyping %D \defineviewerlayer[test] %D %D \startviewerlayer[test]Hide Me\stopviewerlayer %D %D \defineoverlay %D [WithTest] %D [{\overlayrollbutton[HideLayer{test}][VideLayer{test}]}] %D %D \framed[background=WithTest]{toggle} %D \stoptyping \newcount\c_scrn_rollbutton_n \unexpanded\def\overlayrollbutton {\dodoubleargument\scrn_rollbutton_overlay} \def\scrn_rollbutton_overlay[#regionin][#regionout]% {\iflocation \bgroup \global\advance\c_scrn_rollbutton_n\plusone \definesymbol [rollbutton:\number\c_scrn_rollbutton_n] [{\framed[\c!frame=\v!off,\c!width=\overlaywidth,\c!height=\overlayheight]{}}]% \definefieldbody [rollbutton:\number\c_scrn_rollbutton_n] [\c!type=push, \c!regionin={#regionin}, \c!regionout={#regionout}, \c!values=\currentsystemfield, \c!default=\currentsystemfield]% \fitfield[\currentsystemfield]% \egroup \fi} % \protect \endinput % THE FOLLOWING CODE IS NOT CHECKED %D I will redo these when I need them. % \setupinteraction[state=start] % % \definepushbutton [reset] % % \startuniqueMPgraphic{whatever}{color} % fill fullcircle xysized (OverlayWidth,OverlayHeight) withcolor \MPvar{color} ; % \stopuniqueMPgraphic % % \definepushsymbol [reset] [n] [\uniqueMPgraphic{whatever}{color=red}] % \definepushsymbol [reset] [r] [\uniqueMPgraphic{whatever}{color=green}] % \definepushsymbol [reset] [d] [\uniqueMPgraphic{whatever}{color=blue}] % % \starttext % \startTEXpage % \pushbutton [reset] [page(2)] % \stopTEXpage % \startTEXpage % \pushbutton [reset] [page(1)] % \stopTEXpage % \stoptext \newcount\c_scrn_pushbutton_n \unexpanded\def\definepushbutton % name optional setup {\dodoubleempty\scrn_pushbutton_define} \def\scrn_pushbutton_define[#tag][#settings]% {\scrn_pushbutton_define_variant{#tag}{n}{push}% \scrn_pushbutton_define_variant{#tag}{r}{\symbol[pushsymbol:#tag:n]}% \scrn_pushbutton_define_variant{#tag}{d}{\symbol[pushsymbol:#tag:r]}% \setvalue{pushbutton:#tag}{\scrn_pushbutton_handle{#tag}{#settings}}} \def\scrn_pushbutton_define_variant#tag#variant#content% {\doifsymboldefinedelse{pushsymbol:#tag:#variant} \donothing {\definesymbol[pushsymbol:#tag:#variant][{#content}]}} \def\scrn_pushbutton_handle#tag#settings#reference% {\bgroup \global\advance\c_scrn_pushbutton_n\plusone \setupfield [pushbutton] [\c!frame=\v!overlay, \c!offset=\v!overlay, \c!clickout={#reference}, #settings]% \definefield [pushbutton:\number\c_scrn_pushbutton_n]% [push] [pushbutton] [pushsymbol:#tag:n,pushsymbol:#tag:r,pushsymbol:#tag:d]% \fitfield [pushbutton:\number\c_scrn_pushbutton_n]% \egroup} \unexpanded\def\definepushsymbol {\dotripleargument\scrn_pushsymbol_define} \def\scrn_pushsymbol_define[#tag][#variant]% [#reference] {\definesymbol[pushsymbol:#tag:#variant]} \def\pushbutton {\dodoubleargument\scrn_pushbutton_direct} \def\scrn_pushbutton_direct[#tag][#variant]% {\executeifdefined{pushbutton:#tag}\gobbleoneargument{#variant}} %D We plug into the menu system \unexpanded\def\scrn_menu_psh_start[#reference]#text\stoppsh {\starttxt\pushbutton[\currentmenu][#reference]\stoptxt} \unexpanded\def\scrn_menu_psh_direct[#reference]#text\\ {\scrn_menu_psh_start[#reference]\stoprob} \appendtoks \let\startpsh\scrn_menu_psh_start \let\stoppsh \relax \let\psh \scrn_menu_psh_direct \to \everysetmenucommands %D Another goodie: (unchecked in \MKIV) % calls: % {..} [JS..] % [left] {..} [JS..] % [a=b] {..} [JS..] % [left] [a=b] {..} [JS..] % % \setupbuttons[offset=0pt,frame=off] % alternative=hidden % % \rollbutton {Manuals} [JS(Goto_File{show-man.pdf})] % \rollbutton {Articles} [JS(Goto_File{show-art.pdf})] % \rollbutton {Papers} [JS(Goto_File{show-pap.pdf})] % \rollbutton {Presentations} [JS(Goto_File{show-pre.pdf})] % \rollbutton {Resources} [JS(Goto_File{show-res.pdf})] % % \rob [JS(...)] bla bla \\ % \definecolor[rollover:n][red] % \definecolor[rollover:r][green] % \definecolor[rollover:d][blue] \definepalet [rollover] [n=red, r=green, d=blue] \newcount\c_scrn_rollbutton_n_button \newcount\c_scrn_rollbutton_n_symbol \unexpanded\def\rollbutton {\dodoubleempty\scrn_rollbutton} \def\scrn_rollbutton_symbol_m {\scrn_rollbutton_symbol_indeed \interactionmenuparameter \inheritedinteractionmenuframed \setinteractionmenuparameter \useinteractionmenustyleandcolor} \def\scrn_rollbutton_symbol_b {\scrn_rollbutton_symbol_indeed \buttonparameter \inheritedbuttonframed \setbuttonparameter \usebuttonstyleandcolor} \def\scrn_rollbutton[#tag][#settings]#text[#reference]% {\dontleavehmode \bgroup \advance\c_scrn_rollbutton_n_button\plusone \advance\c_scrn_rollbutton_n_symbol\plusone \iffirstargument \ifsecondargument \edef\currentinteractionmenu{#tag}% \setupcurrentinteractionmenu[#settings]% \let\scrn_rollbutton_symbol\scrn_rollbutton_symbol_m \else \doifassignmentelse{#tag} {\let\currentbutton\empty \setupcurrentbutton[#tag]% \let\scrn_rollbutton_symbol\scrn_rollbutton_symbol_b}% {\edef\currentinteractionmenu{#tag}% \let\scrn_rollbutton_symbol\scrn_rollbutton_symbol_m}% \fi \else \let\scrn_rollbutton_symbol\scrn_rollbutton_symbol_b \fi % todo: share symbols, tricky since different dimensions \definesymbol[rollsymbol:\number\c_scrn_rollbutton_n_symbol:n][\scrn_rollbutton_symbol{n}{#text}]% \definesymbol[rollsymbol:\number\c_scrn_rollbutton_n_symbol:r][\scrn_rollbutton_symbol{r}{#text}]% \definesymbol[rollsymbol:\number\c_scrn_rollbutton_n_symbol:d][\scrn_rollbutton_symbol{d}{#text}]% \setupfield [rollbutton] [\c!frame=\v!off, \c!offset=\v!overlay, \c!clickout={#reference}]% \definefield [rollbutton:\number\c_scrn_rollbutton_n_button][push][rollbutton] [rollsymbol:\number\c_scrn_rollbutton_n_symbol:n,% rollsymbol:\number\c_scrn_rollbutton_n_symbol:r,% rollsymbol:\number\c_scrn_rollbutton_n_symbol:d]% \fitfield[rollbutton:\number\c_scrn_rollbutton_n_button]% \egroup} \unexpanded\def\scrn_rollbutton_symbol_indeed#getparameter#inheritedframed#setparameter#usestyleandcolor#what#text% {\definecolor[rollover][rollover:#what]% \doifelse{#what}{n}% ? {\doifelse{#getparameter\c!alternative}\v!hidden\phantom\hbox}\hbox {#setparameter\c!framecolor {rollover}% #setparameter\c!backgroundcolor{rollover}% #setparameter\c!color {rollover}% #inheritedframed{#usestyleandcolor\c!style\c!color{#text}}}} %D We plug into the menu system \unexpanded\def\scrn_menu_rob_start[#reference]#text\stoprob {\starttxt\rollbutton[\currentmenu]{\ignorespaces#text\unskip}[#reference]\stoptxt} \unexpanded\def\scrn_menu_rob_direct[#reference]#text\\ {\scrn_menu_rob_start[#reference]#text\stoprob} \appendtoks \let\startrob\scrn_menu_rob_start \let\stoprob \relax \let\rob \scrn_menu_rob_direct \to \everysetmenucommands \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-blk.mkiv�������������������������������0000644�0001750�0001750�00000006363�12130411274�024305� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-blk, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Blockmoves, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Blockmoves} \registerctxluafile{strc-blk}{1.001} \unprotect % we run on top of buffers and sections % % todo: prefix numbers (needs further integration elsewhere) % check functionality % alternative files (needs further integration elsewhere) % % order matters: \c!before (think of: \c!before=\startitemize) % % no \endgroups \installcorenamespace {block} \installcorenamespace {blocktemp} \installcommandhandler \??block {block} \??block \appendtoks \ctxcommand{definestructureblock("\currentblock")}% \setuevalue{\e!begin\currentblock}{\dodoubleempty\strc_blocks_begin[\currentblock]}% \setuevalue{\e!end \currentblock}{}% \to \everydefineblock \unexpanded\def\strc_blocks_begin[#1][#2]% {\normalexpanded{\buff_pickup{@block@}{\e!begin#1}{\e!end#1}} {}% before {\ctxcommand{savestructureblock("#1","#2","@block@")}}}% after \let\strc_blocks_setup\relax \unexpanded\def\dostarthiddenblock % called at lua end {\startnointerference \dostartnormalblock} \unexpanded\def\dostophiddenblock % called at lua end {\dostopnormalblock \stopnointerference} \unexpanded\def\dostartnormalblock#1% called at lua end {\bgroup \visibletrue % will change \edef\currentblock{#1}% \strc_blocks_setup \let\strc_blocks_setup\relax \blockparameter\c!before \useblockstyleandcolor\c!style\c!color % maybe moev one line up (font spacing) \blockparameter\c!inner % better \c!setups \ignorespaces} \unexpanded\def\dostopnormalblock % called at lua end {\removeunwantedspaces \blockparameter\c!after \par % todo: alternative = text, paragraph \egroup} \def\strc_blocks_set_state[#1][#2][#3]% state name tag {\ctxcommand{setstructureblockstate("#1","#2","#3")}} \def\strc_blocks_select[#1][#2][#3][#4]% state name tag setups {\bgroup \doifassignmentelse{#3} {\getparameters[\??blocktemp][\c!criterium=\v!text,#3]% \def\strc_blocks_setup{\setupcurrentblock[#3]}% \ctxcommand{selectstructureblock("#1","#2","","\csname\??blocktemp\c!criterium\endcsname")}} {\getparameters[\??blocktemp][\c!criterium=\v!text,#4]% \def\strc_blocks_setup{\setupcurrentblock[#4]}% \ctxcommand{selectstructureblock("#1","#2","#3","\csname\??blocktemp\c!criterium\endcsname")}}% \egroup} % hide : save, if [+] also hidden execute % keep : save and normal execute % use : normal execute unless [-] % process: hidden execute unless [-] % select : idem use \unexpanded\def\hideblocks {\dotripleempty \strc_blocks_set_state[hide]} \unexpanded\def\keepblocks {\dotripleempty \strc_blocks_set_state[keep]} \unexpanded\def\useblocks {\doquadrupleempty\strc_blocks_select [use]} \unexpanded\def\processblocks{\doquadrupleempty\strc_blocks_select [process]} \unexpanded\def\selectblocks {\doquadrupleempty\strc_blocks_select [use]} \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/type-def.mkiv�������������������������������0000644�0001750�0001750�00000003505�11754241457�024313� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=type-def, %D version=2005.02.04, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Default Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[simplification] \starttypescript [\s!serif] [\s!simple] [\s!name] \definefontsynonym [\s!Serif] [\s!Simple] \definefontsynonym [\s!SerifBold] [\s!Serif] \definefontsynonym [\s!SerifItalic] [\s!Serif] \definefontsynonym [\s!SerifSlanted] [\s!Serif] \definefontsynonym [\s!SerifBoldItalic] [\s!Serif] \definefontsynonym [\s!SerifBoldSlanted] [\s!Serif] \definefontsynonym [\s!SerifCaps] [\s!Serif] \stoptypescript \starttypescript [\s!sans] [\s!simple] [\s!name] \definefontsynonym [\s!Sans] [\s!Simple] \definefontsynonym [\s!SansBold] [\s!Sans] \definefontsynonym [\s!SansItalic] [\s!Sans] \definefontsynonym [\s!SansSlanted] [\s!Sans] \definefontsynonym [\s!SansBoldItalic] [\s!Sans] \definefontsynonym [\s!SansBoldSlanted] [\s!Sans] \definefontsynonym [\s!SansCaps] [\s!Sans] \stoptypescript \starttypescript [\s!mono] [\s!simple] [\s!name] \definefontsynonym [\s!Mono] [\s!Simple] \definefontsynonym [\s!MonoBold] [\s!Mono] \definefontsynonym [\s!MonoItalic] [\s!Mono] \definefontsynonym [\s!MonoSlanted] [\s!Mono] \definefontsynonym [\s!MonoBoldItalic] [\s!Mono] \definefontsynonym [\s!MonoBoldSlanted] [\s!Mono] \definefontsynonym [\s!MonoCaps] [\s!Mono] \stoptypescript \stoptypescriptcollection \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-app.mkiv�������������������������������0000644�0001750�0001750�00000014114�12130411274�024247� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-app, % from meta-fig %D version=1998.01.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Independent page building, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Applications} %D This needs an update with a proper define and inheritance. \unprotect \installcorenamespace{fittingpage} \installframedcommandhandler \??fittingpage {fittingpage} \??fittingpage \newdimen\d_page_fitting_width \newdimen\d_page_fitting_height \newbox \b_page_fitting \definepapersize [fittingpage] [\c!width=\d_page_fitting_width, \c!height=\d_page_fitting_height] \definemakeup [fittingpage] [\c!textstate=\v!empty, \c!doublesided=\v!no, \c!location=\v!top, % no topskip \c!pagestate=\fittingpageparameter\c!pagestate]% \definelayout [fittingpage] [\v!page] [\c!width=\d_page_fitting_width, \c!height=\d_page_fitting_height, \c!location=\v!middle] \appendtoks \setuevalue{\e!start\currentfittingpage}{\startfittingpage[\currentfittingpage]}% \setuevalue{\e!stop \currentfittingpage}{\stopfittingpage}% \to \everydefinefittingpage \unexpanded\def\startfittingpage {\dodoubleempty\page_fitting_start} \def\page_fitting_start[#1][#2]% {\page % this is kind of tricky! there can be preceding page refs \autostarttext \bgroup % resulting in a zero height page; test fig-make ! \setupinterlinespace[\v!top=0]% no topskip \def\currentfittingpage{#1}% \dontcomplain % runs under current page regime, i.e. page variables passed to mp \setupcurrentfittingpage[\c!paper=,#2]% auto or size or nothing \doifelsenothing{\fittingpageparameter\c!command} \page_fitting_start_normal \page_fitting_start_command} \def\page_fitting_start_command {\grabuntil{\e!stop\currentfittingpage}\page_fitting_stop_command} \def\page_fitting_stop_command#1% {\page_fitting_start_normal \fittingpageparameter\c!command{#1}% \page_fitting_stop_normal} \def\page_fitting_start_normal {\setbox\b_page_fitting\hbox \bgroup \inheritedfittingpageframed \bgroup \gobblespacetokens} \unexpanded\def\page_fitting_stop_normal % todo: figure out why a small mp image gets shifted {\removeunwantedspaces \egroup \egroup % finalize \doif{\fittingpageparameter\c!margin}\v!page {\setbox\b_page_fitting\hbox\bgroup \offsetbox [\c!leftoffset=\backspace, \c!rightoffset=\cutspace, \c!topoffset=\topspace, \c!bottomoffset=\bottomspace] {\box\b_page_fitting}% \egroup}% \doifsomething{\fittingpageparameter\c!scale} {\setbox\b_page_fitting\hbox\bgroup \scale[\c!scale=\fittingpageparameter\c!scale]{\box\b_page_fitting}% \egroup}% \ifdim\ht\b_page_fitting=\zeropoint \ht\b_page_fitting\onepoint \fi \ifdim\wd\b_page_fitting=\zeropoint \wd\b_page_fitting\onepoint \fi \d_page_fitting_width \wd\b_page_fitting \d_page_fitting_height\ht\b_page_fitting \startlocallayout % still valid? \let\checkcurrentlayout\relax % else interference with odd/even layout \processaction [\fittingpageparameter\c!paper] [ \v!auto=>\def\fittingpapersize{\printpapersize}, \s!unknown=>\let\fittingpapersize\commalistelement, \s!default=>\def\fittingpapersize{fittingpage}]% \expanded{\setuppapersize[fittingpage][\fittingpapersize]}% \startmakeup[fittingpage]% \box\b_page_fitting \stopmakeup \stoplocallayout % still valid? \egroup \autostoptext} \let\stopfittingpage\page_fitting_stop_normal \setupfittingpage [%\c!scale=1000, %\c!pagestate=, \c!strut=\v!no, \c!align=\v!normal, \c!offset=\v!overlay, \c!width=\v!fit, \c!height=\v!fit, \c!frame=\v!off] %D \TEX\ pages (for \METAPOST\ pages, see \type {meta-fig}): \definefittingpage [TEXpage] [\c!align=\v!normal] % needed, else problems ! %D For Mojca: %D %D \starttyping %D \startTEXstream \chapter{Bla} Hello world!\crlf Hello world! \stopTEXstream %D \startTEXpage \chapter{Bla} Hello world!\crlf Hello world! \stopTEXpage %D \stoptyping %D %D maybe I should support stream=yes in framed. \unexpanded\def\startTEXstream {\dosingleempty\page_streams_TEX_start} \def\page_streams_TEX_start[#1]% old code, to be redone {\page \enableoutputstream[tex]} \unexpanded\def\stopTEXstream {\disableoutputstream \startTEXpage \outputstreamunvbox[tex]% \stopTEXpage} %D Application pages, a quick \MKIV\ hack: \definetypesetting[TEXapplication] \definebuffer[TEXapplication] % we could use a counter and saves runs on numbering them. \def\TEXapplicationfilename{\jobname-texapplication.tex} \unexpanded\def\stopTEXapplication {\savebuffer[\thedefinedbuffer{TEXapplication}][\TEXapplicationfilename]% \typesetfile[TEXapplication][\TEXapplicationfilename]\relax} %D \macros %D {startpagefigure} %D %D \starttyping %D \starttext \pagefigure[two.1] \stoptext %D \stoptyping \defineexternalfigure[\v!page:\v!figure][\c!offset=\v!overlay] % we force a parent \unexpanded\def\startpagefigure {\dodoubleempty\page_figures_start} % this one: % % \def\page_figures_start[#1][#2]% % {\bgroup % \def\currentexternalfigure{\v!page:\v!figure}% % \setupcurrentexternalfigure[\c!offset=\v!overlay,#2]% % \startTEXpage[\c!offset=\externalfigureparameter\c!offset]% % \externalfigure[#1]\ignorespaces} % so we can put some text below the graphic % % or this one: \def\page_figures_start[#1][#2]% {\bgroup \setupexternalfigure[\v!page:\v!figure][\c!offset=\v!overlay,#2]% \startTEXpage[\c!offset=\namedexternalfigureparameter{\v!page:\v!figure}\c!offset]% \externalfigure[#1]\ignorespaces} % so we can put some text below the graphic \unexpanded\def\stoppagefigure {\stopTEXpage \egroup} \unexpanded\def\pagefigure {\dodoubleempty\page_figure} \def\page_figure[#1][#2]% {\page_figures_start[#1][#2]\stoppagefigure} \protect \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-eff.lua��������������������������������0000644�0001750�0001750�00000006413�12130411274�024103� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['attr-eff'] = { version = 1.001, comment = "companion to attr-eff.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local commands, interfaces = commands, interfaces local attributes, nodes, backends, utilities = attributes, nodes, backends, utilities local tex = tex local states = attributes.states local tasks = nodes.tasks local nodeinjections = backends.nodeinjections local settexattribute = tex.setattribute local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local formatters = string.formatters local variables = interfaces.variables local v_normal = variables.normal 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 = a_effect local data = effects.data local registered = effects.registered local values = effects.values local f_stamp = formatters["%s:%s:%s"] storage.register("attributes/effects/registered", registered, "attributes.effects.registered") storage.register("attributes/effects/values", values, "attributes.effects.values") -- valid effects: normal inner outer both hidden (stretch,rulethickness,effect) local function effect(...) effect = nodeinjections.effect return effect(...) end local function extender(effects,key) if key == "none" then local d = effect(0,0,0) effects.none = d return d end end local function reviver(data,n) local e = values[n] -- we could nil values[n] now but hardly needed local d = effect(e[1],e[2],e[3]) data[n] = d return d end setmetatableindex(effects, extender) setmetatableindex(effects.data, reviver) effects.handler = nodes.installattributehandler { name = "effect", namespace = effects, initializer = states.initialize, finalizer = states.finalize, processor = states.process, } local function register(specification) local alternative, stretch, rulethickness if specification then alternative = specification.alternative or v_normal stretch = specification.stretch or 0 rulethickness = specification.rulethickness or 0 else alternative = v_normal stretch = 0 rulethickness = 0 end local stamp = f_stamp(alternative,stretch,rulethickness) local n = registered[stamp] if not n then n = #values + 1 values[n] = { alternative, stretch, rulethickness } registered[stamp] = n end return n end local function enable() tasks.enableaction("shipouts","attributes.effects.handler") end effects.register = register effects.enable = enable -- interface local enabled = false function commands.triggereffect(specification) if not enabled then enable() enabled = true end settexattribute(a_effect,register(specification)) end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-brk.mkiv�������������������������������0000644�0001750�0001750�00000027624�12130411274�024257� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-brk, % moved from page-ini %D version=2011.12.07, % 2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Breaks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Breaks} \unprotect \ifdefined\resetcurrentstructuremarkswithpage \else \let\resetcurrentstructuremarkswithpage\relax \fi \ifdefined\noheaderandfooterlines \else \let\noheaderandfooterlines \relax \fi %D Page breaks. % \definepagebreak % [chapter] % [yes,header,right] % % \setuphead % [chapter] % [page=chapter, % header=empty, % footer=chapter] % % \definepagebreak % untested % [lastpage] % [left,{empty,right},{empty,left}] % public page handler, beware: definepage already in use (core-ref) % % \definepagebreak[instance][forsure] % \definepagebreak[forsure][yes,+4] \newconditional\c_page_breaks_enabled \settrue\c_page_breaks_enabled \newcount \c_page_breaks_prevpage \newtoks\everybeforepagebreak \newtoks\everyafterpagebreak \let\page_breaks_current_option \empty \let\page_breaks_current_options\empty \installcorenamespace{pagebreakmethod} \installcorenamespace{pagebreaks} \def\page_breaks_handle#1% {\edef\page_breaks_current_options{#1}% handy for tracing \processcommacommand[\page_breaks_current_options]\page_breaks_handle_step} \def\page_breaks_handle_step#1% {\edef\page_breaks_current_option{#1}% can be used in handler \ifcsname\??pagebreakmethod\page_breaks_current_option\endcsname \csname\??pagebreakmethod\page_breaks_current_option\endcsname \else\ifcsname\??pagebreaks\page_breaks_current_option\endcsname \expandafter\page_breaks_handle\csname\??pagebreaks\page_breaks_current_option\endcsname \else \csname\??pagebreakmethod\s!unknown\endcsname \fi\fi} \def\page_breaks_handle_direct#1% {\csname\??pagebreakmethod#1\endcsname} \unexpanded\def\installpagebreakmethod#1#2% low level definer {\setvalue{\??pagebreakmethod#1}{#2}} \let\installpagebreakhandler\installpagebreakmethod % will go \unexpanded\def\definepagebreak {\dodoubleargument\page_breaks_define} \def\page_breaks_define[#1][#2]% {\setvalue{\??pagebreaks#1}{#2}} \unexpanded\def\pagebreak {\par % else no vertical penalties \dosingleempty\page_breaks_process} \let\page\pagebreak \appendtoks \flushnotes \to \everybeforepagebreak \def\page_breaks_process[#1]% so, page ornaments are reset after a pagebreak command, unless set {\par % always before group so that we clear hangs etc (as in side floats) \ifvmode % extra check \begingroup \the\everybeforepagebreak \c_page_breaks_prevpage\realpageno \ifcase\pageornamentstate \or % disable reset after shipout \global\pageornamentstate\plustwo \fi \iffirstargument % or if empty i.e. [] \page_breaks_handle{#1}% \else % so, no pagebreak when \pagebreak[] ! ! ! \page_breaks_handle_direct\v!yes \fi \relax \ifnum\c_page_breaks_prevpage<\realpageno \global\pageornamentstate\zerocount \fi \the\everyafterpagebreak \endgroup \fi} \def\resetpagebreak % used elsewhere too {\global\settrue\c_page_breaks_enabled} \def\simplifypagebreak % to be used grouped ! {\def\page_breaks_process[##1]{\goodbreak}} \def\disablepagebreaks % to be used grouped ! {\def\page_breaks_process[##1]{}} \installpagebreakmethod \s!dummy {\page_otr_flush_all_floats \page_otr_command_next_page \page_otr_insert_dummy_page} \installpagebreakmethod \v!frame {\page \begingroup \showframe \page[\v!empty] \endgroup} \installpagebreakmethod \s!unknown {\doifinstringelse{+}\page_breaks_current_option {\page_otr_flush_all_floats \page_otr_command_next_page \dorecurse\page_breaks_current_option\page_otr_insert_dummy_page} {\doifnumberelse\page_breaks_current_option {\page_otr_flush_all_floats \page_otr_command_next_page \doloop {\ifnum\userpageno<\page_breaks_current_option\relax \page_otr_insert_dummy_page \else \exitloop \fi}} {}}} \installpagebreakmethod \s!default {} % do nothing if empty \installpagebreakmethod \v!reset {% better not: \global\pageornamentstate\zerocount \resetpagebreak} \installpagebreakmethod \v!disable {\global\setfalse\c_page_breaks_enabled} \installpagebreakmethod \v!yes {\ifconditional\c_page_breaks_enabled \page_otr_flush_all_floats \page_otr_command_next_page \ifinsidecolumns % this will move to MUL \page_otr_eject_page % otherwise sometimes no change \fi \fi} \installpagebreakmethod \v!makeup {\ifconditional\c_page_breaks_enabled \page_otr_fill_and_eject_page \fi} \installpagebreakmethod \v!blank {\ifcase\pageornamentstate \global\pageornamentstate\plusone \fi} \installpagebreakmethod \v!no {\ifconditional\c_page_breaks_enabled \dosomebreak\nobreak \fi} \installpagebreakmethod \v!preference {\ifconditional\c_page_breaks_enabled \ifinsidecolumns % this will move to MUL \dosomebreak\goodbreak \else \testpage[3][\zeropoint]% \fi \fi} \installpagebreakmethod \v!bigpreference {\ifconditional\c_page_breaks_enabled \ifinsidecolumns % this will move to MUL \dosomebreak\goodbreak \else \testpage[5][\zeropoint]% \fi \fi} % \installpagebreakmethod \v!empty {} % defined in page-txt.mkiv % \installpagebreakmethod \v!header{} % defined in page-txt.mkiv % \installpagebreakmethod \v!footer{} % defined in page-txt.mkiv \def\page_reset_marks_and_insert_dummy {\resetcurrentstructuremarkswithpage\page_otr_insert_dummy_page} \installpagebreakmethod \v!left {\page_otr_flush_all_floats \page_otr_command_next_page_and_inserts \doifbothsidesoverruled\donothing\page_reset_marks_and_insert_dummy\donothing} \installpagebreakmethod \v!right {\page_otr_flush_all_floats \page_otr_command_next_page_and_inserts \doifbothsidesoverruled\donothing\donothing\page_reset_marks_and_insert_dummy} \installpagebreakmethod \v!even {\page \doifoddpageelse\page_reset_marks_and_insert_dummy\donothing} \installpagebreakmethod \v!odd {\page \doifoddpageelse\donothing\page_reset_marks_and_insert_dummy} \installpagebreakmethod \v!quadruple % not yet ok inside columnsets {\ifdoublesided \ifnum\numexpr\realpageno/4\relax=\numexpr\realpageno/2\relax\else \page_breaks_handle_direct\v!yes \page_breaks_handle_direct\v!empty \page_breaks_handle_direct\v!empty \fi \fi} \installpagebreakmethod \v!last {\page_otr_flush_all_floats \page_otr_command_next_page_and_inserts \relax \doifbothsidesoverruled \page_facings_flush % hm \donothing {\noheaderandfooterlines \page_otr_insert_dummy_page}% \filluparrangedpages} \installpagebreakmethod \v!lastpage % handy for backpage preceded by empty pages {\page_breaks_handle_direct\v!yes \ifdoublesided \page_breaks_handle_direct\v!left \page_breaks_handle_direct\v!empty \page_breaks_handle_direct\v!empty \fi} \installpagebreakmethod \v!start {\global\settrue \c_otr_shipout_enabled} \installpagebreakmethod \v!stop {\global\setfalse\c_otr_shipout_enabled} % Column breaks. \installcorenamespace{columnbreakmethod} \installcorenamespace{columnbreaks} \newtoks\everybeforecolumnbreak \newtoks\everyaftercolumnbreak \let\page_breaks_columns_current_option \empty \let\page_breaks_columns_current_options\empty \def\page_breaks_columns_handle#1% {\edef\page_breaks_columns_current_options{#1}% \processcommacommand[#1]\page_breaks_columns_handle_step} \def\page_breaks_columns_handle_step#1% {\edef\page_breaks_columns_current_option{#1}% \ifcsname\??columnbreakmethod\currentoutputroutine:\page_breaks_columns_current_option\endcsname \csname\??columnbreakmethod\currentoutputroutine:\page_breaks_columns_current_option\endcsname \else\ifcsname\??columnbreaks\page_breaks_columns_current_option\endcsname \expandafter\csname\page_breaks_columns_handle\??columnbreaks\page_breaks_columns_current_option\endcsname \else \csname\??columnbreakmethod\currentoutputroutine:\s!unknown\endcsname \fi\fi} \def\page_breaks_columns_handle_direct#1% {\csname\??columnbreakmethod\currentoutputroutine:#1\endcsname} \unexpanded\def\installcolumnbreakmethod#1#2#3% #1=otr-id #2=tag #3=action {\setvalue{\??columnbreakmethod#1:#2}{#3}} \let\installcolumnbreakhandler\installcolumnbreakmethod % will go \unexpanded\def\definecolumnbreak {\dodoubleargument\page_break_columns_define} \def\page_break_columns_define[#1][#2]% {\setvalue{\??columnbreaks#1}{#2}} \unexpanded\def\columnbreak {\par % else no vertical penalties \dosingleempty\page_breaks_columns_process} \let\column\columnbreak \def\page_breaks_columns_process[#1]% so, page ornaments are reset after a pagebreak command, unless set {\begingroup \the\everybeforecolumnbreak \iffirstargument \page_breaks_columns_handle{#1}% \else \page_breaks_columns_handle_direct\v!yes \fi \relax \the\everyaftercolumnbreak \endgroup} %D Test page breaks. \newdimen \d_page_tests_test \newconstant\c_page_tests_mode \newconstant\testpagemethod % todo: \testnewpage[method=,lines=,voffset=] \newconstant\testpagetrigger \unexpanded\def\testpage {\c_page_tests_mode\plusone \dodoubleempty\page_tests_test} % \unexpanded\def\testpageonly{\c_page_tests_mode\plustwo \dodoubleempty\page_tests_test} % no penalties added to the mvl \unexpanded\def\testpagesync{\c_page_tests_mode\plusthree\dodoubleempty\page_tests_test} % force sync \def\page_tests_test[#1][#2]% don't change, only add more methods {\relax % needed before \if \ifconditional\c_page_breaks_enabled % new from here \ifcase\testpagetrigger \endgraf \or\ifvmode \dosomebreak\allowbreak \else % indeed? \vadjust{\allowbreak}% \endgraf \fi\fi % till here \ifdim\pagegoal<\maxdimen \relax \ifdim\pagetotal<\pagegoal \relax \d_page_tests_test\dimexpr #1\lineheight +\pagetotal \ifdim\lastskip<\parskip+\parskip\fi \ifsecondargument+#2\fi \relax \ifcase\testpagemethod \ifdim\d_page_tests_test>.99\pagegoal \penalty-\plustenthousand \fi \or \ifdim\dimexpr\d_page_tests_test-\pagegoal\relax>-\lineheight \penalty-\plustenthousand \fi \or \getnoflines\pagegoal \ifdim\dimexpr\d_page_tests_test-\noflines\lineheight\relax>-\lineheight \penalty-\plustenthousand \fi \or % same as 0 but more accurate \ifdim\dimexpr\d_page_tests_test-10\scaledpoint\relax>\pagegoal \penalty-\plustenthousand \fi \fi \else\ifnum\c_page_tests_mode=\plusthree \page_tests_flush_so_far \fi\fi \else\ifnum\c_page_tests_mode=\plusone \goodbreak \fi\fi \else \endgraf \fi} \def\page_tests_flush_so_far {\endgraf \ifdim\pagetotal>\pagegoal \ifdim\dimexpr\pagetotal-\pageshrink\relax>\pagegoal \goodbreak \else \page \fi \fi} %D Test column breaks. \def\testcolumn {\dodoubleempty\page_tests_columns_test} \def\page_tests_columns_test[#1][#2]% {\endgraf \ifdim\pagegoal<\maxdimen \ifdim\pagetotal<\pagegoal \d_page_tests_test\dimexpr \pagegoal -\pagetotal \ifdim\lastskip<\parskip+\parskip\fi \ifsecondargument+#2\fi \relax \getrawnoflines\d_page_tests_test % (raw) \ifnum#1>\noflines \column \fi \else \penalty-\plustenthousand % (untested) \fi \fi} \protect \endinput ������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-ini.mkiv�������������������������������0000644�0001750�0001750�00000020710�12130411274�024245� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-ini, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Initializations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Initializations} %D The \type {\processpage} command has become obsolete. It's original %D purpose was to flush only parts of a document but nowadays we have %D project structure and modes. This is just one of those very early %D features that no longer makes sense. %D The \type {\couplepage} command has become obsolete. It's original %D purpose was to provide hooks for printer directives (like choosing %D different paper trays). \unprotect %D Shipout control. \newcount\nofshipouts \appendtoks \global\advance\nofshipouts\plusone \to \everyaftershipout \newconditional\c_otr_shipout_enabled \settrue\c_otr_shipout_enabled \unexpanded\def\page_otr_shipout {\ifconditional\c_otr_shipout_enabled \expandafter\page_otr_shipout_yes \else \expandafter\page_otr_shipout_nop \fi} \let\page_otr_shipout_yes\normalshipout \unexpanded\def\page_otr_shipout_nop {\writestatus\m!system{ignoring shipout of real page \the\realpageno}% \global\advance\realpageno\minusone % else no flush of resources \dowithnextbox{\deadcycles\zerocount}} % We don't support direct user \shipouts (weird: this does not work, bug?) % % \let\shipout\page_otr_shipout_nop %D Building pages. \newbox\pagebox \ifdefined\page_postprocessors_column \else \let\page_postprocessors_column\gobbleoneargument \fi \ifdefined\page_postprocessors_page \else \let\page_postprocessors_page \gobbleoneargument \fi \ifdefined\page_postprocessors_box \else \let\page_postprocessors_box \gobbleoneargument \fi %D Floats. \def\page_otr_flush_all_floats {%\flushnotes already done \ifconditional\c_page_floats_some_waiting \begingroup \c_page_floats_n_of_top\plusthousand \c_page_floats_n_of_bottom\zerocount % this is needed in case a float that has been stored % ends up at the current page; this border case occurs when % the calculated room is 'eps' smaller that the room available % when just flushing; so now we have (maybe optional): \pagebaselinecorrection % hm, needs checking, not needed when no floats % alas, this is tricky but needed (first surfaced in prikkels) \page_otr_command_flush_floats \endgroup \fi} \def\page_otr_insert_dummy_page {\par \ifvmode \page_otr_flush_all_floats \fixedspace \vfill \page_otr_command_next_page \fi} \def\page_otr_flush_pending_content {\vskip\zeropoint\relax % brrr .. get rid of this \ifvoid\normalpagebox \else \unvbox\normalpagebox \penalty\outputpenalty \fi} \def\page_otr_construct_and_shipout#1#2% {\forgetall \page_boxes_shipout{\page_boxes_constructed_page#1#2}% \hbox removed \page_otr_flush_pending_content % not really needed, replaced by \flushsavedfloats \page_otr_check_for_pending_inserts % but does not hurt either (we're still in the otr!) \inpagebodytrue % needed for enabling \blank ! brrr \page_otr_command_flush_saved_floats \page_otr_command_set_vsize % this is needed for interacting components, like floats and multicolumns \strc_pagenumbers_increment_counters % should hook into an every \page_adapts_synchronize \page_otr_check_for_pending_inserts \page_floats_flush_page_floats % before postponed blocks \page_spread_flush % defined later \page_postponed_blocks_flush} % Can't we get rid of this hackery? It's used in some widgets % stuff so probably not. \newbox\b_page_otr_special \def\page_otr_flush_special_content {\ifvoid\b_page_otr_special \else \box\b_page_otr_special \fi} \def\page_otr_add_special_content {\dowithnextboxcs\page_otr_add_special_content_indeed\hbox} \def\page_otr_add_special_content_indeed {\wd\nextbox\zeropoint \ht\nextbox\zeropoint \dp\nextbox\zeropoint \global\setbox\b_page_otr_special\hbox {%\hskip-\maxdimen % not here, fails in acrobat (clips) \box\b_page_otr_special\box\nextbox}}% was \unhbox, is now box again \let\flushatshipout\page_otr_add_special_content \maxdeadcycles=1000 \newtoks\afterpage \newtoks\aftereverypage \newtoks\beforepage \newtoks\beforeeverypage \newif\ifarrangingpages \arrangingpagesfalse \newconstant\pageornamentstate % 0=on 1=one-off 2=always-off \appendtoks \ifcase\pageornamentstate \or \pageornamentstate\zerocount \fi \to \everyaftershipout % Mark synchronization \newconditional\c_page_marks_building_successive_pages \settrue\c_page_marks_building_successive_pages \def\page_marks_synchronize_page#1% box {\strc_markings_synchronize[\v!page][#1][\ifconditional\c_page_marks_building_successive_pages\v!keep\fi]} \def\page_marks_synchronize_column#1#2#3#4% first last column box {\ifnum#3=#1\relax \strc_markings_synchronize[\number#3,\v!column:\number#3,\v!first,\v!column:\v!first][#4][]% \else\ifnum#3=#2\relax \strc_markings_synchronize[\number#3,\v!column:\number#3,\v!last, \v!column:\v!last ][#4][]% \else \strc_markings_synchronize[\number#3,\v!column:\number#3 ][#4][]% \fi\fi} % Page body building \newconditional\c_page_boxes_save_page_body \newbox \b_page_boxes_saved_page_body \def\page_boxes_constructed_page_body#1#2% {\ifconditional\c_page_boxes_save_page_body \global\setbox\b_page_boxes_saved_page_body \fi \vbox \bgroup \boxmaxdepth\maxdimen % new \dontcomplain \page_marks_synchronize_page {#2}% we could consider doing this for \pagebox (needs testing) \page_boxes_construct_content \pagebox{#1}{#2}% \page_backgrounds_add_to_main \pagebox \page_boxes_apply_offsets \pagebox \page_info_add_to_box \pagebox \ifcase\pageornamentstate \page_backgrounds_add_to_paper \pagebox \fi \anch_positions_register_page \pagebox \ifarrangingpages \page_boxes_apply_shift_paper \pagebox % \v!paper \else \page_boxes_apply_clip_paper \pagebox \page_marks_add_page \pagebox \page_boxes_apply_replicate \pagebox \page_boxes_apply_scale \pagebox \page_boxes_apply_mirror_paper \pagebox \page_boxes_apply_orientate_paper \pagebox \page_marks_add_more \pagebox \page_boxes_apply_center \pagebox \page_backgrounds_add_to_print \pagebox \page_boxes_apply_mirror_print \pagebox \page_boxes_apply_orientate_print \pagebox \page_boxes_apply_shift_print \pagebox % \v!page \page_boxes_apply_offset \pagebox \page_boxes_apply_negate_print \pagebox \fi \box\pagebox \egroup \ifconditional\c_page_boxes_save_page_body \copy\b_page_boxes_saved_page_body \fi} \appendtoks \restoreglobalbodyfont \to \everybeforepagebody \ifdefined\nestednewbox \else \newbox\nestednextbox \fi % hm, still needed? \prependtoks \let\nextbox\nestednextbox \to \everybeforepagebody \def\page_boxes_constructed_page#1#2% {\vbox\bgroup % intercept spurious spaces \the\everybeforepagebody \starttextproperties \checkmarginblocks \the\beforeeverypage \normalexpanded{\global\beforepage\emptytoks\the\beforepage}% \inpagebodytrue \page_boxes_constructed_page_body#1#2% \normalexpanded{\global\afterpage \emptytoks\the\afterpage }% \the\aftereverypage \resetpagebreak \resetlayouttextlines % will go to \aftereverypage \stoptextproperties \the\everyafterpagebody \egroup} \def\doiftopofpageelse {\ifdim\pagegoal=\maxdimen \expandafter\firstoftwoarguments \else\ifdim\pagegoal=\vsize \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} % %D Idea: % % \newinsert\thispageinsert % <- installinsertion % % \def\flushatthispage % {\bgroup % \dowithnextbox{\insert\thispageinsert{\box\nextbox}\egroup}% % \hbox} % % \appendtoks % \ifvoid\thispageinsert\else\hbox{\smashedbox\thispageinsert}\fi % \to \everyshipout % % %D Idea: % % \definemarkedpage[nobackgrounds] % \markpage[nobackgrounds] % \doifmarkedpageelse{nobackgrounds} \protect \endinput ��������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-rng.mkii�������������������������������0000644�0001750�0001750�00000001360�11754241457�024305� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-rng, %D version=2002.10.29, %D title=\CONTEXT\ XML Macros, %D subtitle=Relax NG, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The following commands picks up a named block from the %D given file and pretty prints it. %D %D \starttyping %D \showRNGcomponent [eximple.rng] [request] %D \stoptyping %D %D If needed, you adapt the colors used by redefining the %D \type {xtag} color palet. \fetchruntimecommand\showRNGcomponent {\f!xtagprefix\s!run} \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-nested.mkiv������������������������0000644�0001750�0001750�00000001124�11754241457�025556� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=buff-imp-nested, %D version=2010.10.19, %D title=\CONTEXT\ Visualizer Macros, %D subtitle=Nested, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{buff-imp-nested.lua}{1.001} \unprotect \unexpanded\def\donestedtypingstart{\bgroup\swaptypeface{}} \unexpanded\def\donestedtypingstop {\egroup{}} \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/blob-ini.mkiv�������������������������������0000644�0001750�0001750�00000002477�11754241457�024300� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=blob-ini, %D version=2010.04.06, %D title=\CONTEXT\ \LUA\ Typesetting, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Typesetting / Initialization} %D This is a prelude to typesetting at the \LUA\ end. The code %D is already quite old but will only get nice when we are further %D down the road (close to version 1.00 of \LUATEX). Typesetting in %D pure \LUA\ sometimes makes sense. \registerctxluafile{node-typ}{1.001} % experimental \registerctxluafile{blob-ini}{1.001} %D For the moment here: \unprotect % this one takes simple (utf) strings \def\widthofstring#1{\ctxcommand{widthofstring(\!!bs#1\!!es)}} % this one takes anything that can be typeset \unexpanded\def\setwidthof#1\to#2% {\bgroup \setbox\scratchbox\hbox{#1}% \expanded{\egroup\def\noexpand#2{\the\wd\scratchbox}}} \protect \endinput % \starttext % % \startluacode % local b = blobs.new() % blobs.append(b,"Hello world.\n Here we are.\n\n And Again!") % blobs.pack(b) % blobs.write(b) % \stopluacode % % \stoptext �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-ctx.lua��������������������������������0000644�0001750�0001750�00000003201�12130411274�024110� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['trac-ctx'] = { version = 1.001, comment = "companion to trac-ctx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local commands = commands local context = context local register = trackers.register local textrackers = tex.trackers or { } local texdirectives = tex.directives or { } tex.trackers = textrackers tex.directives = texdirectives storage.register("tex/trackers", textrackers, "tex.trackers") storage.register("tex/directives",texdirectives,"tex.directives") local function doit(category,tag,v) local tt = category[tag] if tt then context.unprotect() context(v and tt[1] or tt[2]) -- could be one call context.protect() end end local function initialize(category,register) for tag, commands in next, category do register(tag, function(v) doit(category,tag,v) end) -- todo: v,tag in caller end end local function install(category,register,tag,enable,disable) category[tag] = { enable, disable } register(tag, function(v) doit(category,tag,v) end) -- todo: v,tag in caller end function commands.initializetextrackers () initialize(textrackers ,trackers .register ) end function commands.initializetexdirectives() initialize(texdirectives,directives.register) end -- commands.install(tag,enable,disable): function commands.installtextracker (...) install(textrackers ,trackers .register,...) end function commands.installtexdirective(...) install(texdirectives,directives.register,...) end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-reg.lua��������������������������������0000644�0001750�0001750�00000074654�12130411274�024135� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['strc-reg'] = { version = 1.001, comment = "companion to strc-reg.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, type = next, type local texcount = tex.count local format, gmatch = string.format, string.gmatch local equal, concat, remove = table.are_equal, table.concat, table.remove local utfchar = utf.char local lpegmatch = lpeg.match local allocate = utilities.storage.allocate local trace_registers = false trackers.register("structures.registers", function(v) trace_registers = v end) local report_registers = logs.reporter("structure","registers") local structures = structures local registers = structures.registers local helpers = structures.helpers local sections = structures.sections local documents = structures.documents local pages = structures.pages local references = structures.references local mappings = sorters.mappings local entries = sorters.entries local replacements = sorters.replacements local processors = typesetters.processors local splitprocessor = processors.split local variables = interfaces.variables local context = context local matchingtilldepth, numberatdepth = sections.matchingtilldepth, sections.numberatdepth -- some day we will share registers and lists (although there are some conceptual -- differences in the application of keywords) local function filtercollected(names,criterium,number,collected,prevmode) if not criterium or criterium == "" then criterium = variables.all end local data = documents.data local numbers, depth = data.numbers, data.depth local hash, result, nofresult, all, detail = { }, { }, 0, not names or names == "" or names == variables.all, nil if not all then for s in gmatch(names,"[^, ]+") do hash[s] = true end end if criterium == variables.all or criterium == variables.text then for i=1,#collected do local v = collected[i] if all then nofresult = nofresult + 1 result[nofresult] = v else local vmn = v.metadata and v.metadata.name if hash[vmn] then nofresult = nofresult + 1 result[nofresult] = v end end end elseif criterium == variables.current then for i=1,#collected do local v = collected[i] local sectionnumber = sections.collected[v.references.section] if sectionnumber then local cnumbers = sectionnumber.numbers if prevmode then if (all or hash[v.metadata.name]) and #cnumbers >= depth then -- is the = ok for lists as well? local ok = true for d=1,depth do if not (cnumbers[d] == numbers[d]) then -- no zero test ok = false break end end if ok then nofresult = nofresult + 1 result[nofresult] = v end end else if (all or hash[v.metadata.name]) and #cnumbers > depth then local ok = true for d=1,depth do local cnd = cnumbers[d] if not (cnd == 0 or cnd == numbers[d]) then ok = false break end end if ok then nofresult = nofresult + 1 result[nofresult] = v end end end end end elseif criterium == variables.previous then for i=1,#collected do local v = collected[i] local sectionnumber = sections.collected[v.references.section] if sectionnumber then local cnumbers = sectionnumber.numbers if (all or hash[v.metadata.name]) and #cnumbers >= depth then local ok = true if prevmode then for d=1,depth do if not (cnumbers[d] == numbers[d]) then ok = false break end end else for d=1,depth do local cnd = cnumbers[d] if not (cnd == 0 or cnd == numbers[d]) then ok = false break end end end if ok then nofresult = nofresult + 1 result[nofresult] = v end end end end elseif criterium == variables["local"] then if sections.autodepth(data.numbers) == 0 then return filtercollected(names,variables.all,number,collected,prevmode) else return filtercollected(names,variables.current,number,collected,prevmode) end else -- sectionname, number -- beware, this works ok for registers local depth = sections.getlevel(criterium) local number = tonumber(number) or numberatdepth(depth) or 0 if trace_registers then detail = format("depth: %s, number: %s, numbers: %s, startset: %s",depth,number,concat(sections.numbers(),".",1,depth),#collected) end if number > 0 then for i=1,#collected do local v = collected[i] local r = v.references if r then local sectionnumber = sections.collected[r.section] if sectionnumber then local metadata = v.metadata local cnumbers = sectionnumber.numbers if cnumbers then if (all or hash[metadata.name or false]) and #cnumbers >= depth and matchingtilldepth(depth,cnumbers) then nofresult = nofresult + 1 result[nofresult] = v end end end end end end end if trace_registers then if detail then report_registers("criterium %a, detail %a, found %a",criterium,detail,#result) else report_registers("criterium %a, detail %a, found %a",criterium,nil,#result) end end return result end local tobesaved = allocate() local collected = allocate() registers.collected = collected registers.tobesaved = tobesaved registers.filtercollected = filtercollected -- we follow a different strategy than by lists, where we have a global -- result table; we might do that here as well but since sorting code is -- older we delay that decision local function initializer() tobesaved = registers.tobesaved collected = registers.collected local internals = references.internals for name, list in next, collected do local entries = list.entries for e=1,#entries do local entry = entries[e] local r = entry.references if r then local internal = r and r.internal if internal then internals[internal] = entry end end end end end job.register('structures.registers.collected', tobesaved, initializer) local function allocate(class) local d = tobesaved[class] if not d then d = { metadata = { language = 'en', sorted = false, class = class }, entries = { }, } tobesaved[class] = d end return d end registers.define = allocate local entrysplitter = lpeg.tsplitat('+') -- & obsolete in mkiv local tagged = { } local function preprocessentries(rawdata) local entries = rawdata.entries if entries then --~ table.print(rawdata) local e, k = entries[1] or "", entries[2] or "" local et, kt, entryproc, pageproc if type(e) == "table" then et = e else entryproc, e = splitprocessor(e) et = lpegmatch(entrysplitter,e) end if type(k) == "table" then kt = k else pageproc, k = splitprocessor(k) kt = lpegmatch(entrysplitter,k) end entries = { } for k=1,#et do entries[k] = { et[k] or "", kt[k] or "" } end for k=#et,1,-1 do if entries[k][1] ~= "" then break else entries[k] = nil end end rawdata.list = entries if pageproc or entryproc then rawdata.processors = { entryproc, pageproc } end rawdata.entries = nil end local seeword = rawdata.seeword if seeword then seeword.processor, seeword.text = splitprocessor(seeword.text or "") end end function registers.store(rawdata) -- metadata, references, entries local data = allocate(rawdata.metadata.name).entries local references = rawdata.references references.realpage = references.realpage or 0 -- just to be sure as it can be refered to preprocessentries(rawdata) data[#data+1] = rawdata local label = references.label if label and label ~= "" then tagged[label] = #data end context(#data) end function registers.enhance(name,n) local r = tobesaved[name].entries[n] if r then r.references.realpage = texcount.realpageno end end function registers.extend(name,tag,rawdata) -- maybe do lastsection internally if type(tag) == "string" then tag = tagged[tag] end if tag then local r = tobesaved[name].entries[tag] if r then local rr = r.references rr.lastrealpage = texcount.realpageno rr.lastsection = sections.currentid() if rawdata then if rawdata.entries then preprocessentries(rawdata) end for k,v in next, rawdata do if not r[k] then r[k] = v else local rk = r[k] for kk,vv in next, v do if type(vv) == "table" then if next(vv) then rk[kk] = vv end elseif vv ~= "" then rk[kk] = vv end end end end end end end end -- sorting and rendering local compare = sorters.comparers.basic function registers.compare(a,b) local result = compare(a,b) if result ~= 0 then return result else local ka, kb = a.metadata.kind, b.metadata.kind if ka == kb then local page_a, page_b = a.references.realpage, b.references.realpage if not page_a or not page_b then return 0 elseif page_a < page_b then return -1 elseif page_a > page_b then return 1 end elseif ka == "see" then return 1 elseif kb == "see" then return -1 end end return 0 end function registers.filter(data,options) data.result = registers.filtercollected(nil,options.criterium,options.number,data.entries,true) end local seeindex = 0 -- meerdere loops, seewords, dan words, an seewords local function crosslinkseewords(result) -- all words -- collect all seewords local seewords = { } for i=1,#result do local data = result[i] local seeword = data.seeword if seeword then local seetext = seeword.text if seetext and not seewords[seetext] then seeindex = seeindex + 1 seewords[seetext] = seeindex if trace_registers then report_registers("see word %03i: %s",seeindex,seetext) end end end end -- mark seeparents local seeparents = { } for i=1,#result do local data = result[i] local word = data.list[1] word = word and word[1] if word then local seeindex = seewords[word] if seeindex then seeparents[word] = data data.references.seeparent = seeindex if trace_registers then report_registers("see parent %03i: %s",seeindex,word) end end end end -- mark seewords and extend sort list for i=1,#result do local data = result[i] local seeword = data.seeword if seeword then local text = seeword.text if text then local seeparent = seeparents[text] if seeparent then local seeindex = seewords[text] local s, ns, d, w, l = { }, 0, data.split, seeparent.split, data.list -- trick: we influence sorting by adding fake subentries for i=1,#d do ns = ns + 1 s[ns] = d[i] -- parent end for i=1,#w do ns = ns + 1 s[ns] = w[i] -- see end data.split = s -- we also register a fake extra list entry so that the -- collapser works okay l[#l+1] = { text, "" } data.references.seeindex = seeindex if trace_registers then report_registers("see crosslink %03i: %s",seeindex,text) end end end end end end local function removeemptyentries(result) local i, n, m = 1, #result, 0 while i <= n do local entry = result[i] if #entry.list == 0 or #entry.split == 0 then remove(result,i) n = n - 1 m = m + 1 else i = i + 1 end end if m > 0 then report_registers("%s empty entries removed in register",m) end end function registers.prepare(data) -- data has 'list' table local strip = sorters.strip local splitter = sorters.splitters.utf local result = data.result if result then for i=1, #result do local entry, split = result[i], { } local list = entry.list if list then for l=1,#list do local ll = list[l] local word, key = ll[1], ll[2] if not key or key == "" then key = word end split[l] = splitter(strip(key)) end end entry.split = split end removeemptyentries(result) crosslinkseewords(result) end end function registers.sort(data,options) sorters.sort(data.result,registers.compare) end function registers.unique(data,options) local result, nofresult, prev = { }, 0, nil local dataresult = data.result for k=1,#dataresult do local v = dataresult[k] if prev then local pr, vr = prev.references, v.references if not equal(prev.list,v.list) then -- ok elseif pr.realpage ~= vr.realpage then -- ok else local pl, vl = pr.lastrealpage, vr.lastrealpage if pl or vl then if not vl then -- ok elseif not pl then -- ok elseif pl ~= vl then -- ok else v = nil end else v = nil end end end if v then nofresult = nofresult + 1 result[nofresult] = v prev = v end end data.result = result end function registers.finalize(data,options) -- maps character to index (order) local result = data.result data.metadata.nofsorted = #result local split, nofsplit, lasttag, done, nofdone = { }, 0, nil, nil, 0 local firstofsplit = sorters.firstofsplit for k=1,#result do local v = result[k] local entry, tag = firstofsplit(v) if tag ~= lasttag then if trace_registers then report_registers("splitting at %a",tag) end done, nofdone = { }, 0 nofsplit = nofsplit + 1 split[nofsplit] = { tag = tag, data = done } lasttag = tag end nofdone = nofdone + 1 done[nofdone] = v end data.result = split end function registers.analyzed(class,options) local data = collected[class] if data and data.entries then options = options or { } sorters.setlanguage(options.language,options.method,options.numberorder) registers.filter(data,options) -- filter entries into results (criteria) registers.prepare(data,options) -- adds split table parallel to list table registers.sort(data,options) -- sorts results registers.unique(data,options) -- get rid of duplicates registers.finalize(data,options) -- split result in ranges data.metadata.sorted = true return data.metadata.nofsorted or 0 else return 0 end end -- todo take conversion from index function registers.userdata(index,name) local data = references.internals[tonumber(index)] data = data and data.userdata and data.userdata[name] if data then context(data) end end -- todo: ownnumber local function pagerange(f_entry,t_entry,is_last,prefixspec,pagespec) local fer, ter = f_entry.references, t_entry.references context.registerpagerange( f_entry.processors and f_entry.processors[2] or "", fer.internal or 0, fer.realpage or 0, function() helpers.prefixpage(f_entry,prefixspec,pagespec) end, ter.internal or 0, ter.lastrealpage or ter.realpage or 0, function() if is_last then helpers.prefixlastpage(t_entry,prefixspec,pagespec) -- swaps page and realpage keys else helpers.prefixpage (t_entry,prefixspec,pagespec) end end ) end local function pagenumber(entry,prefixspec,pagespec) local er = entry.references context.registeronepage( entry.processors and entry.processors[2] or "", er.internal or 0, er.realpage or 0, function() helpers.prefixpage(entry,prefixspec,pagespec) end ) end local function collapsedpage(pages) for i=2,#pages do local first, second = pages[i-1], pages[i] local first_first, first_last, second_first, second_last = first[1], first[2], second[1], second[2] local first_last_pn = first_last .references.realpage local second_first_pn = second_first.references.realpage local second_last_pn = second_last .references.realpage local first_last_last = first_last .references.lastrealpage local second_first_last = second_first.references.lastrealpage if first_last_last then first_last_pn = first_last_last if second_first == second_last and second_first_pn <= first_last_pn then -- 2=8, 5 -> 12=8 remove(pages,i) return true elseif second_first == second_last and second_first_pn > first_last_pn then -- 2=8, 9 -> 2-9 pages[i-1] = { first_first, second_last } remove(pages,i) return true elseif second_last_pn < first_last_pn then -- 2=8, 3-4 -> 2=8 remove(pages,i) return true elseif first_last_pn < second_last_pn then -- 2=8, 3-9 -> 2-9 pages[i-1] = { first_first, second_last } remove(pages,i) return true elseif first_last_pn + 1 == second_first_pn and second_last_pn > first_last_pn then -- 2=8, 9-11 -> 2-11 pages[i-1] = { first_first, second_last } remove(pages,i) return true elseif second_first.references.lastrealpage then -- 2=8, 9=11 -> 2-11 pages[i-1] = { first_first, second_last } remove(pages,i) return true end elseif second_first_last then second_first_pn = second_first_last if first_last_pn == second_first_pn then -- 2-4, 5=9 -> 2-9 pages[i-1] = { first_first, second_last } remove(pages,i) return true end elseif first_last_pn == second_first_pn then -- 2-3, 3-4 -> 2-4 pages[i-1] = { first_last, second_last } remove(pages,i) return true end end return false end local function collapsepages(pages) while collapsedpage(pages) do end return #pages end function registers.flush(data,options,prefixspec,pagespec) local collapse_singles = options.compress == variables.yes local collapse_ranges = options.compress == variables.all local result = data.result context.startregisteroutput() for i=1,#result do -- ranges need checking ! local sublist = result[i] local done = { false, false, false, false } local data = sublist.data local d, n = 0, 0 context.startregistersection(sublist.tag) for d=1,#data do local entry = data[d] if entry.metadata.kind == "see" then local list = entry.list if #list > 1 then list[#list] = nil else -- we have an \seeindex{Foo}{Bar} without Foo being defined anywhere report_registers("invalid see entry in register %a, reference %a",entry.metadata.name,list[1][1]) end end end while d < #data do d = d + 1 local entry = data[d] local e = { false, false, false, false } local metadata = entry.metadata local kind = metadata.kind local list = entry.list for i=1,4 do -- max 4 if list[i] then e[i] = list[i][1] end if e[i] ~= done[i] then if e[i] and e[i] ~= "" then done[i] = e[i] if n == i then context.stopregisterentries() context.startregisterentries(n) else while n > i do n = n - 1 context.stopregisterentries() end while n < i do n = n + 1 context.startregisterentries(n) end end local internal = entry.references.internal or 0 local seeparent = entry.references.seeparent or "" local processor = entry.processors and entry.processors[1] or "" if metadata then context.registerentry(processor,internal,seeparent,function() helpers.title(e[i],metadata) end) else -- ? context.registerentry(processor,internal,seeindex,e[i]) end else done[i] = false end end end if kind == 'entry' then context.startregisterpages() if collapse_singles or collapse_ranges then -- we collapse ranges and keep existing ranges as they are -- so we get prebuilt as well as built ranges local first, last, prev, pages, dd, nofpages = entry, nil, entry, { }, d, 0 while dd < #data do dd = dd + 1 local next = data[dd] if next and next.metadata.kind == "see" then dd = dd - 1 break else local el, nl = entry.list, next.list if not equal(el,nl) then dd = dd - 1 --~ first = nil break elseif next.references.lastrealpage then nofpages = nofpages + 1 pages[nofpages] = first and { first, last or first } or { entry, entry } nofpages = nofpages + 1 pages[nofpages] = { next, next } first, last, prev = nil, nil, nil elseif not first then first, prev = next, next elseif next.references.realpage - prev.references.realpage == 1 then -- 1 ? last, prev = next, next else nofpages = nofpages + 1 pages[nofpages] = { first, last or first } first, last, prev = next, nil, next end end end if first then nofpages = nofpages + 1 pages[nofpages] = { first, last or first } end if collapse_ranges and nofpages > 1 then nofpages = collapsepages(pages) end if nofpages > 0 then -- or 0 d = dd for p=1,nofpages do local first, last = pages[p][1], pages[p][2] if first == last then if first.references.lastrealpage then pagerange(first,first,true,prefixspec,pagespec) else pagenumber(first,prefixspec,pagespec) end elseif last.references.lastrealpage then pagerange(first,last,true,prefixspec,pagespec) else pagerange(first,last,false,prefixspec,pagespec) end end elseif entry.references.lastrealpage then pagerange(entry,entry,true,prefixspec,pagespec) else pagenumber(entry,prefixspec,pagespec) end else while true do if entry.references.lastrealpage then pagerange(entry,entry,true,prefixspec,pagespec) else pagenumber(entry,prefixspec,pagespec) end if d == #data then break else d = d + 1 local next = data[d] if next.metadata.kind == "see" or not equal(entry.list,next.list) then d = d - 1 break else entry = next end end end end context.stopregisterpages() elseif kind == 'see' then local t, nt = { }, 0 while true do nt = nt + 1 t[nt] = entry if d == #data then break else d = d + 1 local next = data[d] if next.metadata.kind ~= "see" or not equal(entry.list,next.list) then d = d - 1 break else entry = next end end end context.startregisterseewords() for i=1,nt do local entry = t[i] local seeword = entry.seeword local seetext = seeword.text or "" local processor = seeword.processor or (entry.processors and entry.processors[1]) or "" local seeindex = entry.references.seeindex or "" context.registerseeword(i,n,processor,0,seeindex,seetext) end context.stopregisterseewords() end end while n > 0 do context.stopregisterentries() n = n - 1 end context.stopregistersection() end context.stopregisteroutput() -- for now, maybe at some point we will do a multipass or so data.result = nil data.metadata.sorted = false end function registers.analyze(class,options) context(registers.analyzed(class,options)) end function registers.process(class,...) if registers.analyzed(class,...) > 0 then registers.flush(collected[class],...) end end ������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-reg.mkiv�������������������������������0000644�0001750�0001750�00000075333�12134352503�024320� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-reg, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Registers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Registers} \registerctxluafile{strc-reg}{1.001} \unprotect % todo: tag:: becomes rendering % todo: language, character, linked, location % todo: fonts etc at sublevels (already defined) % \starttext % \placeregister[index] % \chapter{a} \index{93} \index{456} \index{***} \index{*} \index{@} % test \index{aa} test \startregister[index][x]{bb} test \page test \page test \page test \stopregister[index][x] % test \index{aa} test \setregisterentry[index][label=x,entries=bb] test \page test \page test \page test \finishregisterentry[index][label=x] % test \index{aa} test \setregisterentry[index][label=y] test \page test \page test \page test \finishregisterentry[index][label=y,entries=yy] % \stoptext % \index {entry} % \index[key] {entry} % \index[pageclass::] {entry} % \index[pageclass::key]{entry} % \index {textclass::entry} % \index[key] {textclass::entry} % \index[pageclass::] {textclass::entry} % \index[pageclass::key]{textclass::entry} % tzt variant with n entries, parameters and userdata (altnum) \installcorenamespace{register} \installcommandhandler\??register {register} \??register \let\strc_registers_setup_saved\setupregister \unexpanded\def\setupregister % maybe we should drop the plural form {\dotripleempty\strc_registers_setup} \def\strc_registers_setup[#1][#2][#3]% {\ifthirdargument \def\strc_registers_setup_step##1{\strc_registers_setup_saved[#1:##1][#3]}% \processcommalist[#2]\strc_registers_setup_step \else\ifsecondargument \strc_registers_setup_saved[#1][#2]% \else \strc_registers_setup_saved[#1]% \fi\fi} \unexpanded\def\setupregisters {\dosingleempty\strc_registers_setup_root} \def\strc_registers_setup_root[#1]% {\strc_registers_setup_saved[#1]\relax} \setupregister [\c!n=2, \c!balance=\v!yes, % \v!no komt niet zo vaak voor \c!align=\v!flushleft, \c!tolerance=\v!stretch, \c!before=\blank, %\c!after=, %\c!symbol=, \c!compress=\v!no, \c!interaction=\v!pagenumber, \c!alternative=\v!a, \c!distance=\emwidth, \c!style=\v!bold, \c!pagestyle=\v!slanted, \c!indicator=\v!yes, \c!criterium=\v!all, %\c!command=, \c!referencing=\v!on, \c!location=\v!middle, %\c!maxwidth=, \c!number=\v!no, \c!unknownreference=\v!empty, \c!prefix=\v!both, %\c!expansion=, %\c!xmlsetup=, \c!pagenumber=\v!yes, \c!pageprefixconnector=\endash, \c!pagesegments=2:2, \c!file=\jobname, %\c!deeptextcommand=, % undefined by default ! \c!method=, % no default as we have them in the module, maybe some day in lang-* \c!numberorder=\v!numbers, % \v!characters \s!language=\currentmainlanguage]% % yes or no shared ? \setupregister [\c!label=, \c!entries=, \c!alternative=] %D \starttyping %D \setupregister[index][1][textcolor=darkred] %D \setupregister[index][2][textcolor=darkgreen,textstyle=bold] %D %D \placeregister[index][n=1] \blank[3*big] %D %D test \index{test+one} test \index{test+two} more \index{more} %D \stoptyping \newconditional\c_strc_registers_defining \ifdefined\Word \else \unexpanded\def\Word#1{#1} \fi \appendtoks \ifconditional\c_strc_registers_defining \else % todo: dosingle ... \settrue\c_strc_registers_defining \ctxlua{structures.registers.define('\currentregister')}% \normalexpanded{\presetheadtext[\currentregister=\Word{\currentregister}]}% \setuevalue{\currentregister}{\dodoubleempty\strc_registers_insert_entry[\currentregister]}% \setuevalue{\e!see\currentregister}{\dodoubleempty\strc_registers_insert_see[\currentregister]}% %setuevalue{\e!coupled\currentregister}{\dolinkedregister{\currentregister}}% % historic ballast \setuevalue{\e!place\currentregister}{\placeregister[\currentregister]}% \setuevalue{\e!complete\currentregister}{\completeregister[\currentregister]}% \setuevalue{\e!setup\currentregister\e!endsetup}{\setupregister[\currentregister]}% \dorecurse\plusthree {% weird, expanded should not be needed \normalexpanded{\defineregister[\currentregister:\recurselevel][\currentregister]}% %\defineregister[\currentregister:\recurselevel][\currentregister]% \letregisterparameter{\c!entries:\recurselevel}\empty % needed as we use detokenize (ok, we can \letregisterparameter{\c!keys :\recurselevel}\empty % avoid it, but it's faster too) }% % \setfalse\c_strc_registers_defining \fi \to \everydefineregister %D Registering: \def\strc_registers_register_page_entry {\iftrialtypesetting \expandafter\gobblethreearguments \else \expandafter\strc_registers_register_page_entry_indeed \fi} \def\strc_registers_register_page_entry_indeed#1#2#3% register data userdata {\begingroup \edef\currentregister{#1}% %\setupcurrentregister[\c!entries=,\c!label=,\c!keys=,\c!alternative=,#2]% \setupcurrentregister[#2]% \edef\currentregisterlabel {\registerparameter\c!label}% \edef\currentregisterexpansion{\registerparameter\c!expansion}% \edef\currentregisterownnumber{\registerparameter\c!ownnumber}% \xdef\currentregisterkeys {\registerparameter\c!keys}% \xdef\currentregisterentries {\registerparameter\c!entries}% \xdef\currentregisterxmlsetup {\registerparameter\c!xmlsetup}% \ifx\currentregisterentries\empty \ifx\currentregisterexpansion\s!xml \xmlstartraw \xdef\currentregisterentriesa{\registerparameter{\c!entries:1}}% \xdef\currentregisterentriesb{\registerparameter{\c!entries:2}}% \xdef\currentregisterentriesc{\registerparameter{\c!entries:3}}% \xmlstopraw \globallet\currentregistercoding\s!xml \else \ifx\currentregisterexpansion\v!yes \xdef\currentregisterentriesa{\registerparameter{\c!entries:1}}% \xdef\currentregisterentriesb{\registerparameter{\c!entries:2}}% \xdef\currentregisterentriesc{\registerparameter{\c!entries:3}}% \else \xdef\currentregisterentriesa{\detokenizedregisterparameter{\c!entries:1}}% \xdef\currentregisterentriesb{\detokenizedregisterparameter{\c!entries:2}}% \xdef\currentregisterentriesc{\detokenizedregisterparameter{\c!entries:3}}% \fi \globallet\currentregistercoding\s!tex \fi \else \ifx\currentregisterexpansion\s!xml \xmlstartraw \xdef\currentregisterentries{\registerparameter\c!entries}% \xmlstopraw \globallet\currentregistercoding\s!xml \else \ifx\currentregisterexpansion\v!yes \xdef\currentregisterentries{\registerparameter\c!entries}% \else \xdef\currentregisterentries{\detokenizedregisterparameter\c!entries}% \fi \globallet\currentregistercoding\s!tex \fi \fi \ifx\currentregisterkeys\empty \ifx\currentregistercoding\s!xml \xmlstartraw \xdef\currentregisterkeysa{\registerparameter{\c!keys:1}}% \xdef\currentregisterkeysb{\registerparameter{\c!keys:2}}% \xdef\currentregisterkeysc{\registerparameter{\c!keys:3}}% \xmlstopraw \else \xdef\currentregisterkeysa{\registerparameter{\c!keys:1}}% \xdef\currentregisterkeysb{\registerparameter{\c!keys:2}}% \xdef\currentregisterkeysc{\registerparameter{\c!keys:3}}% \fi \fi \setnextinternalreference % we could consider storing register entries in a list which we % could then sort \xdef\currentregisternumber{\ctxlua{ structures.registers.store { % 'own' should not be in metadata metadata = { kind = "entry", name = "\currentregister", level = structures.sections.currentlevel(), coding = "\currentregistercoding", catcodes = \the\catcodetable, \ifx\currentregisterownnumber\v!yes own = "\registerparameter\c!alternative", % can be used instead of pagenumber \fi xmlroot = \ifx\currentreferencecoding\s!xml "\xmldocument" \else nil \fi, % only useful when text \ifx\currentregisterxmlsetup\empty \else xmlsetup = "\currentregisterxmlsetup", \fi }, references = { internal = \nextinternalreference, section = structures.sections.currentid(), % hm, why then not also lastsection the same way label = "\currentregisterlabel", }, % \ifx\currentregisterentries\empty \else entries = { % we need a special one for xml, this is just a single one \ifx\currentregisterentries\empty { \!!bs\currentregisterentriesa\!!es, \!!bs\currentregisterentriesb\!!es, \!!bs\currentregisterentriesc\!!es }, \else \!!bs\currentregisterentries\!!es, \fi \ifx\currentregisterkeys\empty { \!!bs\currentregisterkeysa\!!es, \!!bs\currentregisterkeysb\!!es, \!!bs\currentregisterkeysc\!!es }, \else \!!bs\currentregisterkeys\!!es, \fi }, % \fi userdata = structures.helpers.touserdata(\!!bs\detokenize{#3}\!!es) } }}% \ctxlua{structures.references.setinternalreference(nil,nil,\nextinternalreference)}% \ifx\currentregisterownnumber\v!yes \glet\currentregistersynchronize\relax \else \xdef\currentregistersynchronize{\ctxlatelua{structures.registers.enhance("\currentregister",\currentregisternumber)}}% \fi \currentregistersynchronize % here? % needs thinking ... bla\index{bla}. will break before the . but adding a % penalty is also no solution \attribute\destinationattribute\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup \endgroup} \unexpanded\def\strc_registers_insert_entry[#1][#2]% {\def\currentregister{#1}% \doifelse{\registerparameter\c!ownnumber}\v!yes \strc_registers_insert_entry_yes \strc_registers_insert_entry_nop {#2}} \def\strc_registers_insert_entry_nop#1#2% {\doflushatpar{\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!entries={#2}}{}}} \def\strc_registers_insert_entry_yes#1#2#3% {\doflushatpar{\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!alternative=#2,\c!entries={#3}}{}}} \unexpanded\def\startregister{\doquadrupleempty\strc_registers_start_entry} \unexpanded\def\stopregister {\dodoubleargument\strc_registers_stop_entry} % a synonym, so that we can nest with overlap without syntax check problems \let\openregisterrange \startregister \let\closeregisterrange\stopregister \def\strc_registers_start_entry[#1][#2][#3][#4]#5% {\iffourthargument % #1=register #2=tag #3=own #4=sortkey #5=entry \doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,\c!alternative=#3,\c!keys={#4},\c!entries={#5}}{}}% \else % #1=register #2=tag #3=sortkey #5=entry \doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,\c!keys={#3},\c!entries={#5}}{}}% \fi} \def\strc_registers_stop_entry[#1][#2]% {\normalexpanded{\ctxlatelua{structures.registers.extend("#1","#2")}}} \def\setregisterentry {\dotripleempty\strc_registers_set_entry} \def\finishregisterentry{\dotripleempty\strc_registers_finish_entry} % not yet document, not sure if this will stay: \def\strc_registers_set_entry [#1][#2][#3]{\doflushatpar{\strc_registers_register_page_entry{#1}{#2}{#3}}} \def\strc_registers_finish_entry[#1][#2][#3]{\strc_registers_finish_entry_indeed{#1}{#2}{#3}} \def\strc_registers_finish_entry_indeed#1#2#3% register data userdata {\begingroup \edef\currentregister{#1}% \setupcurrentregister[\c!entries=,\c!label=,\c!keys=,\c!alternative=,#2]% \edef\currentregisterlabel {\registerparameter\c!label}% \edef\currentregisterexpansion{\registerparameter\c!expansion}% \edef\currentregisterownnumber{\registerparameter\c!ownnumber}% \xdef\currentregisterkeys {\registerparameter\c!keys}% \ifx\currentregisterexpansion\s!xml \xmlstartraw \xdef\currentregisterentries{\registerparameter\c!entries}% \xmlstopraw \globallet\currentregistercoding\s!xml \else \ifx\currentregisterexpansion\v!yes \xdef\currentregisterentries{\registerparameter\c!entries}% \else \xdef\currentregisterentries{\detokenizedregisterparameter\c!entries}% \fi \globallet\currentregistercoding\s!tex \fi % I hate this kind of mess ... but it's a user request. \ifx\currentregisterentries\empty \normalexpanded{\ctxlua{structures.registers.extend("\currentregister","\currentregisterlabel", { metadata = { \ifx\currentregisterownnumber\v!yes own = "\registerparameter\c!alternative", % can be used instead of pagenumber \fi }, userdata = structures.helpers.touserdata(\!!bs\detokenize{#3}\!!es) })% }}% \else \normalexpanded{\ctxlua{structures.registers.extend("\currentregister","\currentregisterlabel", { metadata = { catcodes = \the\catcodetable, coding = "\currentregistercoding", \ifx\currentregisterownnumber\v!yes own = "\registerparameter\c!alternative", % can be used instead of pagenumber \fi }, entries = { % we need a special one for xml, this is just a single one \!!bs\currentregisterentries\!!es, \!!bs\currentregisterkeys\!!es }, userdata = structures.helpers.touserdata(\!!bs\detokenize{#3}\!!es) }) }}% \fi \endgroup} % The following variants are meant for (for instance xml). There is some % overlap with previously defined macros. % % \starttext % \setstructurepageregister[index][entries=alpha]a % \setstructurepageregister[index][entries=gamma]g % \setstructurepageregister[index][entries=beta]b % \setstructurepageregister[index][entries:1=alpha,keys:1=z]a % \setstructurepageregister[index][entries:1=gamma,keys:1=x]g % \setstructurepageregister[index][entries:1=beta, keys:1=y]b % \index{alpha}a % \index{gamma}g % \index{beta}b % \placeregister[index][n=1] % \stoptext % some overlap wit previous \unexpanded\def\setstructurepageregister {\dotripleempty\strc_registers_set} \def\strc_registers_set[#1][#2][#3]% [register][settings][userdata] {\doflushatpar{\strc_registers_register_page_entry{#1}{#2}{#3}}} \unexpanded\def\startstructurepageregister{\doquadrupleempty\strc_registers_start} \unexpanded\def\stopstructurepageregister {\dodoubleargument\strc_registers_stop} \let\openstructurepageregisterrange \startstructurepageregister \let\closestructurepageregisterrange\stopstructurepageregister \def\strc_registers_start[#1][#2][#3][#4]% [register][tag][settings][userdata] {\doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,#3}{#4}}} \def\strc_registers_stop[#1][#2]% {\normalexpanded{\ctxlatelua{structures.registers.extend("#1","#2")}}} % So far. \unexpanded\def\strc_registers_insert_see[#1][#2]#3#4% {\doflushatpar{\strc_registers_insert_see_indeed{#1}{#2}{#3}{#4}}} \def\strc_registers_insert_see_indeed#1#2#3#4% register key entry seeword {\begingroup \edef\currentregister{#1}% \edef\currentregisterexpansion{\registerparameter\c!expansion}% \ifx\currentregisterexpansion\s!xml \xmlstartraw \xdef\currentregisterentries{\detokenize{#3}}% not ok yet \xdef\currentregisterseeword{\detokenize{#4}}% not ok yet \xmlstopraw \globallet\currentregistercoding\s!xml \else \ifx\currentregisterexpansion\v!yes \xdef\currentregisterentries{#3}% not ok yet \xdef\currentregisterseeword{#4}% not ok yet \else \xdef\currentregisterentries{\detokenize{#3}}% not ok yet \xdef\currentregisterseeword{\detokenize{#4}}% not ok yet \fi \globallet\currentregistercoding\s!tex \fi \setnextinternalreference % we could consider storing register entries in list \edef\temp{\ctxlua{ structures.registers.store { metadata = { kind = "see", name = "\currentregister", level = structures.sections.currentlevel(), catcodes = \the\catcodetable, }, references = { internal = \nextinternalreference, section = structures.sections.currentid(), }, entries = { % we need a special one for xml, this is just a single one \!!bs\currentregisterentries\!!es, \!!bs#2\!!es }, seeword = { text = \!!bs\currentregisterseeword\!!es }, } }}% \endgroup} %D Rendering: % todo: c!language ipv s!language \let\utilityregisterlength\!!zerocount \def\determineregistercharacteristics {\dodoubleempty\strc_registers_determine_characteristics} \def\strc_registers_determine_characteristics[#1][#2]% {\begingroup \edef\currentregister{#1}% \setupregister[\currentregister][#2]% \normalexpanded{\endgroup\noexpand\xdef\noexpand\utilityregisterlength{\ctxlua{structures.registers.analyze('\currentregister',{ language = "\registerparameter\s!language", method = "\registerparameter\c!method", numberorder = "\registerparameter\c!numberorder", compress = "\registerparameter\c!compress", criterium = "\registerparameter\c!criterium", })}}}% brrr \ifcase\utilityregisterlength\relax \resetsystemmode\v!register \else \setsystemmode \v!register \fi} \newtoks\everyplaceregister \appendtoks \dontcomplain \to \everyplaceregister \unexpanded\def\placeregister {\dodoubleempty\strc_registers_place} \def\strc_registers_place[#1][#2]% {\iffirstargument \begingroup %\forgetall \edef\currentregister{#1}% \setupregister[\currentregister][#2]% \the\everyplaceregister \ifnum\registerparameter\c!n>\plusone \startcolumns [\c!n=\registerparameter\c!n, \c!balance=\registerparameter\c!balance, \c!align=\registerparameter\c!align, \c!tolerance=\registerparameter\c!tolerance]% \strc_registers_place_indeed \stopcolumns \else \strc_registers_place_indeed \fi \endgroup \fi} \def\strc_registers_place_columns {\startcolumns [\c!n=\registerparameter\c!n, \c!balance=\registerparameter\c!balance, \c!align=\registerparameter\c!align, \c!tolerance=\registerparameter\c!tolerance]% \startpacked[\v!blank]% \strc_registers_place_indeed \stoppacked \stopcolumns} \def\strc_registers_place_normal {\startpacked[\v!blank]% \strc_registers_place_indeed \stoppacked} \def\strc_registers_place_indeed {\ctxlua{structures.registers.process('\currentregister',{ language = "\registerparameter\s!language", method = "\registerparameter\c!method", numberorder = "\registerparameter\c!numberorder", compress = "\registerparameter\c!compress", criterium = "\registerparameter\c!criterium", },{ separatorset = "\registerparameter\c!pageprefixseparatorset", conversionset = "\registerparameter\c!pageprefixconversionset", starter = \!!bs\registerparameter\c!pageprefixstarter\!!es, stopper = \!!bs\registerparameter\c!pageprefixstopper\!!es, set = "\registerparameter\c!pageprefixset", segments = "\registerparameter\c!pageprefixsegments", connector = \!!bs\registerparameter\c!pageprefixconnector\!!es, },{ prefix = "\registerparameter\c!pageprefix", separatorset = "\registerparameter\c!pageseparatorset", conversionset = "\registerparameter\c!pageconversionset", starter = \!!bs\registerparameter\c!pagestarter\!!es, stopper = \!!bs\registerparameter\c!pagestopper\!!es, segments = "\registerparameter\c!pagesegments", })}} \def\strc_registers_limited_entry#1% {\limitatetext{#1}\currentregistermaxwidth\unknown}% \appendtoks \edef\currentregistermaxwidth{\registerparameter\c!maxwidth}% \ifx\currentregistermaxwidth\empty \let\limitedregisterentry\firstofoneargument \else \let\limitedregisterentry\strc_registers_limited_entry \fi \to \everyplaceregister \unexpanded\def\completeregister {\dodoubleempty\strc_registers_complete} \def\strc_registers_complete[#1][#2]% {\iffirstargument \begingroup \edef\currentregister{#1}% \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\currentregister}},reference=\currentregister]}% \placeregister[\currentregister][#2]% \page[\v!yes]% \stopnamedsection \endgroup \fi} % test case for collapsing (experimental, for Steffen Wolfrum) % % \starttext % \placeregister[index][compress=no] \blank[2*big] % \placeregister[index][compress=yes] \blank[2*big] % \placeregister[index][compress=all] \page % \dorecurse{10}{test 1:!\index{test} test \page} % \dorecurse{5} {test 2:\recurselevel \page} % \dorecurse{10}{test 3:!\index{test} test \page} % \dorecurse{5} {test 4:\recurselevel \page} % \dorecurse{1} {test 5:!\index{test} test \page} % \dorecurse{5} {test 6:\recurselevel \page} % \dorecurse{10}{test 7:!\index{test} test \page} % \dorecurse{5} {test 8:\recurselevel \page} % oeps \index{oeps} % xxxx \index{xxxx} % todo \index{todo} % \stoptext %D Character rendering (sections): \installcorenamespace{registerindicator} \def\defaultregistercharacter#1% {\edef\currentregistercharacter{#1}% \ifx\currentregistercharacter\empty % skip \else\ifx\currentregistercharacter\s!unknown % skip \else \edef\p_indicator{\registerparameter\c!indicator}% \ifx\p_indicator\v!yes \strc_registers_place_character_yes \else \strc_registers_place_character_nop \fi \fi\fi} \def\strc_registers_place_character_yes {\expandnamespaceparameter\??registerindicator\registerparameter\c!alternative\v!a{\currentregistercharacter}} \def\strc_registers_place_character_nop {\registerparameter\c!before \goodbreak} % a = <before> <goodbreak> <character> <par> <after> <nobreak> \setvalue{\??registerindicator a}#1% {\registerparameter\c!before % bugged, why does leftskip gets set: \vskip\lineheight\goodbreak\vskip-\lineheight \begingroup \useregisterstyleandcolor\c!style\c!color \dontleavehmode \strut \iflocation \dosetdirectpagereference{\currentregister:\v!section:#1}% \fi \registerparameter\c!command{#1}% \endgroup \blank[\v!samepage]% \registerparameter\c!after \par \nobreak} % b = <goodbreak> <before> <character> <after> <nobreak> \setvalue{\??registerindicator b}#1% will be shared with a {\registerparameter\c!before \begingroup \useregisterstyleandcolor\c!style\c!color \dontleavehmode \strut \iflocation \dosetdirectpagereference{\currentregister:\v!section:#1}% \fi \registerparameter\c!command{#1}% \endgroup \registerparameter\c!after \nobreak} \setvalue{\??registerindicator A}#1{\getvalue{\??registerindicator a}{\WORD{#1}}} \setvalue{\??registerindicator B}#1{\getvalue{\??registerindicator b}{\WORD{#1}}} %D The following macros are the interface to the rendering. These are %D generated by \LUA. This might change. %D Beware, we get funny side effects when a dangling \index precedes an %D placeindex as then flushing takes place inside the index. Took me hours %D to notice that. \newconditional\c_strc_registers_page_done \newdimen \d_strc_registers_distance \unexpanded\def\startregisteroutput {\endgraf \begingroup \d_strc_registers_distance\registerparameter\c!distance\relax \dostarttagged\t!register\currentregister \forgeteverypar \forgetparindent \forgetparskip} \unexpanded\def\stopregisteroutput {\endgraf \dostoptagged \endgroup} \unexpanded\def\startregisterentries#1% depth {\endgraf \begingroup \dostarttagged\t!registerentries\empty \let\savedcurrentregister\currentregister \edef\currentregister{\currentregister:#1}% \useregisterstyleandcolor\c!textstyle\c!textcolor \advance\leftskip\numexpr#1-\plusone\relax\dimexpr\d_strc_registers_distance\relax \hangindent\registerparameter\c!distance\relax \hangafter\plusone \let\currentregister\savedcurrentregister} \unexpanded\def\stopregisterentries {\endgraf \dostoptagged \endgroup} \unexpanded\def\startregistersection#1% title {\dostarttagged\t!registersection\empty \dostarttagged\t!registertag\empty \registercharacter{#1}\endgraf \dostoptagged} \unexpanded\def\stopregistersection {\dostoptagged \endgraf} \unexpanded\def\startregisterpages {\begingroup \dostarttagged\t!registerpages\empty \setfalse\c_strc_registers_page_done \useregisterstyleandcolor\c!pagestyle\c!pagecolor} \unexpanded\def\stopregisterpages {\dostoptagged \endgroup} \unexpanded\def\startregisterseewords {\ifhmode\crlf\fi \begingroup \setfalse\c_strc_registers_page_done \dostarttagged\t!registerpage\empty \useregisterstyleandcolor\c!pagestyle\c!pagecolor} \unexpanded\def\stopregisterseewords {\dostoptagged \endgroup} \unexpanded\def\registerpageseparator% todo: , configurable {\ifconditional\c_strc_registers_page_done \registerpageseparatorsymbol \else \hskip\d_strc_registers_distance\relax \settrue\c_strc_registers_page_done \fi} \unexpanded\def\registeronepagerangeseparator {|\endash|} \def\withregisterpagecommand#1#2#3#4% {\def\currentregisterpageindex{#2}% \iflocation \goto{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]% \else \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}% \fi} \unexpanded\def\registeronepage#1#2#3#4% #1:processor content {\registerpageseparator \dostarttagged\t!registerpage\empty \withregisterpagecommand{#1}{#2}{#3}{#4}% \dostoptagged} \unexpanded\def\registerpagerange#1#2#3#4#5#6#7% #1:processor content, content todo: -- configurable {\registerpageseparator \dostarttagged\t!registerpagerange\empty \dostarttagged\t!registerfrompage\empty \withregisterpagecommand{#1}{#2}{#3}{#4}% \dostoptagged \registeronepagerangeseparator \dostarttagged\t!registertopage\empty \withregisterpagecommand{#1}{#5}{#6}{#7}% \dostoptagged \dostoptagged} \unexpanded\def\doapplyregisterentrycommand#1#2% processor text {\dostarttagged\t!registerentry\empty \ifx\currentregisterseeindex\empty \else \dontleavehmode \dosetdirectpagereference{seeindex:\currentregisterseeindex}% maybe some day we will support an area \fi \applyprocessor{#1}{\registerparameter\c!textcommand{\limitedregisterentry{\registerparameter\c!deeptextcommand{#2}}}}% \dostoptagged} \unexpanded\def\defaultregisterentry#1#2#3#4% #1:processor #2:internal #3:seeindex #4:word {\def\currentregisterpageindex{#2}% \iflocation \def\currentregisterseeindex{#3}% \doifelse{\registerparameter\c!interaction}\v!text {\directgoto{\setlocationcolor\doapplyregisterentrycommand{#1}{#4}}[internal(#2)]} {\doapplyregisterentrycommand{#1}{#4}}% \else \let\currentregisterseeindex\empty \doapplyregisterentrycommand{#1}{#4}% \fi} \unexpanded\def\doapplyregisterseecommand#1#2% {\ifx\currentregisterseeindex\empty % \dontleavehmode \applyprocessor{#1}{#2}% \else \goto{\applyprocessor{#1}{#2}}[seeindex:\currentregisterseeindex]% \fi} \unexpanded\def\defaultregisterseeword#1#2#3#4#5#6% i n #3:processor #4:internal #5:seeindex #6:word {%\registerpageseparator \def\currentregisterpageindex{#4}% \dostarttagged\t!registersee\empty \settrue\c_strc_registers_page_done \iflocation \def\currentregisterseeindex{#5}% \else \let\currentregisterseeindex\empty \fi \ifnum#1=\plusone \labeltexts\v!see{\doapplyregisterseecommand{#3}{#6}}% \else\ifnum#1=#2\relax \labeltexts\v!and{\doapplyregisterseecommand{#3}{#6}}% \else ,\space\doapplyregisterseecommand{#3}{#6}% \fi\fi \dostoptagged} \let\registerseeword \defaultregisterseeword \let\registerentry \defaultregisterentry \let\registercharacter\defaultregistercharacter %D A few specific rendering variants: % \def\doregisterpagelocation#1#2% % {\nextregisterpage % \hbox to 1em{\hss\doregisterpagehowto{#1}{#2}\hss}} % todo: \installregisterpagehandler % \def\MyRegisterPageCommand#1% % {#1\currentregisterpageuserdata{whatever}} % % \starttext % \setregisterentry[index][entries=aaa][whatever=f.] test \index{bbb} test % \placeregister[index][n=1,pagecommand=\MyRegisterPageCommand] % \stoptext \def\registerpageuserdata #1#2{\ctxlua{structures.registers.userdata(#1,"#2")}} \def\currentregisterpageuserdata {\registerpageuserdata\currentregisterpageindex} % {#1} % not yet ok : new internal handler names \unexpanded\def\registerpagebuttonsymbol {\vrule\s!width\emwidth\s!height\exheight\s!depth\zeropoint\relax} \installcorenamespace{registersymbol} \setvalue{\??registersymbol n}% {\def\registerpageseparatorsymbol{, }} \setvalue{\??registersymbol a}% {\def\registerpageseparatorsymbol{, }} % now done via conversion \setvalue{\??registersymbol\v!none}% {\let\registerpageseparatorsymbol\empty \let\registeronepage \gobblefourarguments \let\registerpagerange \gobblesevenarguments} \setvalue{\??registersymbol 1}% {\let\registerpageseparatorsymbol\space \def\registeronepage {\symbol[1]\gobblefourarguments}% \def\registerpagerange{\symbol[1]\gobblesevenarguments}} \setvalue{\??registersymbol 2}% {\let\registerpageseparatorsymbol\space \def\registeronepage {\registerpagebuttonsymbol\gobblefourarguments}% \def\registerpagerange{\registerpagebuttonsymbol\gobblesevenarguments}} \def\setregisterpagerendering {\doifelse{\registerparameter\c!pagenumber}\v!no {\let \currentregisterpagesymbol\v!none} {\edef\currentregisterpagesymbol{\registerparameter\c!symbol}}% \ifx\currentregisterpagesymbol\empty \csname\??registersymbol n\endcsname \else\ifcsname\??registersymbol\currentregisterpagesymbol\endcsname \csname\??registersymbol\currentregisterpagesymbol\endcsname \else \let\registerpageseparatorsymbol\space \def\registeronepage{\registerparameter\c!symbol\gobblefourarguments}% \def\registerpagerange{\registerparameter\c!symbol\gobblesevenarguments}% \fi\fi} \appendtoks \setregisterpagerendering \to \everyplaceregister %D The linked register code will be reimplemented (not that hard) when it's needed %D again and/or when I'm bored. %D Default index: \defineregister [\v!index] % [\v!indices] \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-con.mkii�������������������������������0000644�0001750�0001750�00000003633�11754241457�024321� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=mult-con, %D version=2000.09.12, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Constants, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 has been replaced by \type {mult-def.lua} from which we %D generate separate interface definition files. % obsolete: % % % \startvariables dutch english % german czech % italian romanian % french % % one: een one % eins jedna % uno unu % un % \stopvariables % % \startconstants dutch english % german czech % italian romanian % french % % sorttype: sortering sorttype % sorttype sorttype % sorttype sorttype % sorttype % \stopconstants % % \startelements dutch english % german czech % italian romanian % french % % begin: beginvan begin % anfang zacatek % inizio inceput % debut % \stopelements \endinput �����������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-def.mkii�������������������������������0000644�0001750�0001750�00000111557�11754241457�024250� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=enco-def, %D version=2000.05.07, % 2000.20.12, % split from less verbose base file %D title=\CONTEXT\ Encoding Macros, %D subtitle=Default Character Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Instead of overloading plain \TEX\ macros (and keeping them %D available as an escape), we now use the more verbose %D definitions in this file. Since memory is less a problem %D these days, this verbosity has only a small price, but we %D gain readability. The following definitions are based on %D usage of the the original \TEX\ fonts, where composed %D characters were not part of the design. So, occasionally %D we have to revert to hacks. Thanks to all those users who %D helped me to fill in the details. \startencoding[default] \definecharacter textcomma , \definecharacter textperiod . \definecharacter textacute 19 \definecharacter textbottomdot 46 \definecharacter textbreve 21 \definecharacter textcaron 20 \definecharacter textcedilla 24 \definecharacter textcircumflex 94 \definecharacter textdiaeresis 127 \definecharacter textdotaccent 95 \definecharacter textgrave 18 \definecharacter texthungarumlaut 125 \definecharacter textmacron 22 \definecharacter textogonek 24 % fake \definecharacter textring 23 \definecharacter texttilde 126 \definecharacter textat 64 % for mojca \definecharacter textbottomcomma {\hbox{\lower.35ex\hbox{\tx,}}} % for mojca \definecharacter dotlessi {\char"10 } \definecharacter dotlessj {\char"11 } \definecharacter dotlessI {I} \definecharacter dotlessJ {J} \definecharacter endash 123 \definecharacter emdash 124 \definecharacter aeligature {\char26 } % "1A \definecharacter AEligature {\char29 } % "1D \definecharacter ijligature {ij} \definecharacter IJligature {IJ} \definecharacter oeligature {\char27 } % "1B \definecharacter OEligature {\char30 } % "1E \definecharacter ssharp {\char25 } % "19 \definecharacter Ssharp {SS} \definecharacter thorn {\unknownchar} \definecharacter Thorn {\unknownchar} \definecharacter eth {\unknownchar} % mojca prefers this (was \dstroke) %definecharacter Eth {\unknownchar} \definecharacter Eth {\Dstroke} % mojca prefers this too \definecharacter exclamdown 60 \definecharacter questiondown 62 \definecharacter copyright {\encircled{\txx C}} \definecharacter registered {\encircled{\txx R}} \definecharacter trademark {\high{\txx TM}} \definecharacter sectionmark {\mathematics{\mathhexbox278}} \definecharacter paragraphmark {\mathematics{\mathhexbox27B}} \definecharacter onequarter {\vulgarfraction{1}{4}} \definecharacter onehalf {\vulgarfraction{1}{2}} \definecharacter threequarter {\vulgarfraction{3}{4}} \definecharacter onesuperior {\high{1}} \definecharacter twosuperior {\high{2}} \definecharacter threesuperior {\high{3}} \definecharacter textcent {c} \definecharacter textcurrency {\unknownchar} \definecharacter textdollar {\fakedollar} \definecharacter texteuro {E} \definecharacter textflorin {\fakeflorin} \definecharacter textsterling {\fakesterling} \definecharacter textyen {Y} \definecharacter ordfeminine {\high{\txx a}} \definecharacter ordmasculine {\high{\txx o}} \definecharacter percent {\fakepercent} \definecharacter perthousand {\fakeperthousand} \definecharacter softhyphen 45 \definecharacter periodcentered {\hbox{\mathematics\cdot}} \definecharacter compoundwordmark 23 \definecharacter textasciicircum 94 \definecharacter textasciitilde 126 \definecharacter textslash 47 \definecharacter textbackslash {\tex{}} % todo \definecharacter textbraceleft {\mathematics\{} \definecharacter textbraceright {\mathematics\}} \definecharacter textunderscore {\fakeunderscore} \definecharacter textvisiblespace {\fakevisiblespace} \definecharacter textbrokenbar {\mathematics\vert} \definecharacter textbullet {\mathematics\bullet} \definecharacter textdag {\mathematics\dag} \definecharacter textddag {\mathematics\ddag} \definecharacter textdegree {\mathematics{{}^{\circ}}} \definecharacter textdiv {\mathematics\div} \definecharacter textellipsis {\mathematics\cdots} \definecharacter textfraction {\mathematics/} \definecharacter textlognot {\mathematics\neg} \definecharacter textminus {\mathematics-} \definecharacter textmu {\mathematics\mu} \definecharacter textmultiply {\mathematics\times} \definecharacter textpm {\mathematics\pm} \definecharacter quotedbl {"} \definecharacter quotedblbase {,,} \definecharacter quotedblleft {``} \definecharacter quotedblright {''} \definecharacter quotesingle {`} \definecharacter quotesinglebase {,} \definecharacter quoteleft {`} \definecharacter quoteright {'} \definecharacter guilsingleleft {\fakeleftsubguillemot } \definecharacter guilsingleright {\fakerightsubguillemot} \definecharacter leftguillemot {\fakeleftguillemot } \definecharacter rightguillemot {\fakerightguillemot} \definecharacter Acircumflex {\buildtextaccent\textcircumflex A} \definecharacter acircumflex {\buildtextaccent\textcircumflex a} \definecharacter Ccircumflex {\buildtextaccent\textcircumflex C} \definecharacter ccircumflex {\buildtextaccent\textcircumflex c} \definecharacter Ecircumflex {\buildtextaccent\textcircumflex E} \definecharacter ecircumflex {\buildtextaccent\textcircumflex e} \definecharacter Gcircumflex {\buildtextaccent\textcircumflex G} \definecharacter gcircumflex {\buildtextaccent\textcircumflex g} \definecharacter Hcircumflex {\buildtextaccent\textcircumflex H} \definecharacter hcircumflex {\buildtextaccent\textcircumflex h} \definecharacter Icircumflex {\buildtextaccent\textcircumflex \dotlessI} \definecharacter icircumflex {\buildtextaccent\textcircumflex \dotlessi} \definecharacter Jcircumflex {\buildtextaccent\textcircumflex \dotlessJ} \definecharacter jcircumflex {\buildtextaccent\textcircumflex \dotlessj} \definecharacter Ocircumflex {\buildtextaccent\textcircumflex O} \definecharacter ocircumflex {\buildtextaccent\textcircumflex o} \definecharacter Scircumflex {\buildtextaccent\textcircumflex S} \definecharacter scircumflex {\buildtextaccent\textcircumflex s} \definecharacter Ucircumflex {\buildtextaccent\textcircumflex U} \definecharacter ucircumflex {\buildtextaccent\textcircumflex u} \definecharacter Wcircumflex {\buildtextaccent\textcircumflex W} \definecharacter wcircumflex {\buildtextaccent\textcircumflex w} \definecharacter Ycircumflex {\buildtextaccent\textcircumflex Y} \definecharacter ycircumflex {\buildtextaccent\textcircumflex y} \definecharacter Agrave {\buildtextaccent\textgrave A} \definecharacter agrave {\buildtextaccent\textgrave a} \definecharacter Egrave {\buildtextaccent\textgrave E} \definecharacter egrave {\buildtextaccent\textgrave e} \definecharacter Igrave {\buildtextaccent\textgrave \dotlessI} \definecharacter igrave {\buildtextaccent\textgrave \dotlessi} \definecharacter Ograve {\buildtextaccent\textgrave O} \definecharacter ograve {\buildtextaccent\textgrave o} \definecharacter Ugrave {\buildtextaccent\textgrave U} \definecharacter ugrave {\buildtextaccent\textgrave u} \definecharacter Ygrave {\buildtextaccent\textgrave Y} \definecharacter ygrave {\buildtextaccent\textgrave y} \definecharacter Atilde {\buildtextaccent\texttilde A} \definecharacter atilde {\buildtextaccent\texttilde a} \definecharacter Itilde {\buildtextaccent\texttilde \dotlessI} \definecharacter itilde {\buildtextaccent\texttilde \dotlessi} \definecharacter Ntilde {\buildtextaccent\texttilde N} \definecharacter ntilde {\buildtextaccent\texttilde n} \definecharacter Otilde {\buildtextaccent\texttilde O} \definecharacter otilde {\buildtextaccent\texttilde o} \definecharacter Utilde {\buildtextaccent\texttilde U} \definecharacter utilde {\buildtextaccent\texttilde u} \definecharacter Ytilde {\buildtextaccent\texttilde Y} \definecharacter ytilde {\buildtextaccent\texttilde y} \definecharacter Adiaeresis {\buildtextaccent\textdiaeresis A} \definecharacter adiaeresis {\buildtextaccent\textdiaeresis a} \definecharacter Ediaeresis {\buildtextaccent\textdiaeresis E} \definecharacter ediaeresis {\buildtextaccent\textdiaeresis e} \definecharacter Idiaeresis {\buildtextaccent\textdiaeresis \dotlessI} \definecharacter idiaeresis {\buildtextaccent\textdiaeresis \dotlessi} \definecharacter Odiaeresis {\buildtextaccent\textdiaeresis O} \definecharacter odiaeresis {\buildtextaccent\textdiaeresis o} \definecharacter Udiaeresis {\buildtextaccent\textdiaeresis U} \definecharacter udiaeresis {\buildtextaccent\textdiaeresis u} \definecharacter Ydiaeresis {\buildtextaccent\textdiaeresis Y} \definecharacter ydiaeresis {\buildtextaccent\textdiaeresis y} \definecharacter Aacute {\buildtextaccent\textacute A} \definecharacter aacute {\buildtextaccent\textacute a} \definecharacter Cacute {\buildtextaccent\textacute C} \definecharacter cacute {\buildtextaccent\textacute c} \definecharacter Eacute {\buildtextaccent\textacute E} \definecharacter eacute {\buildtextaccent\textacute e} \definecharacter Iacute {\buildtextaccent\textacute \dotlessI} \definecharacter iacute {\buildtextaccent\textacute \dotlessi} \definecharacter Lacute {\buildtextaccent\textacute L} \definecharacter lacute {\buildtextaccent\textacute l} \definecharacter Nacute {\buildtextaccent\textacute N} \definecharacter nacute {\buildtextaccent\textacute n} \definecharacter Oacute {\buildtextaccent\textacute O} \definecharacter oacute {\buildtextaccent\textacute o} \definecharacter Racute {\buildtextaccent\textacute R} \definecharacter racute {\buildtextaccent\textacute r} \definecharacter Sacute {\buildtextaccent\textacute S} \definecharacter sacute {\buildtextaccent\textacute s} \definecharacter Uacute {\buildtextaccent\textacute U} \definecharacter uacute {\buildtextaccent\textacute u} \definecharacter Yacute {\buildtextaccent\textacute Y} \definecharacter yacute {\buildtextaccent\textacute y} \definecharacter Zacute {\buildtextaccent\textacute Z} \definecharacter zacute {\buildtextaccent\textacute z} %definecharacter Dstroke {D} %definecharacter dstroke {d} \definecharacter dstroke {\pseudoencodeddj} \definecharacter Dstroke {\pseudoencodedDJ} \definecharacter Hstroke {H} \definecharacter hstroke {h} \definecharacter Tstroke {T} \definecharacter tstroke {t} \definecharacter Cdotaccent {\buildtextaccent\textdotaccent C} \definecharacter cdotaccent {\buildtextaccent\textdotaccent c} \definecharacter Edotaccent {\buildtextaccent\textdotaccent E} \definecharacter edotaccent {\buildtextaccent\textdotaccent e} \definecharacter Gdotaccent {\buildtextaccent\textdotaccent G} \definecharacter gdotaccent {\buildtextaccent\textdotaccent g} \definecharacter Idotaccent {\buildtextaccent\textdotaccent \dotlessI} \definecharacter idotaccent {\buildtextaccent\textdotaccent \dotlessi} \definecharacter Zdotaccent {\buildtextaccent\textdotaccent Z} \definecharacter zdotaccent {\buildtextaccent\textdotaccent z} \definecharacter Amacron {\buildtextaccent\textmacron A} \definecharacter amacron {\buildtextaccent\textmacron a} \definecharacter Emacron {\buildtextaccent\textmacron E} \definecharacter emacron {\buildtextaccent\textmacron e} \definecharacter Imacron {\buildtextaccent\textmacron \dotlessI} \definecharacter imacron {\buildtextaccent\textmacron \dotlessi} \definecharacter Omacron {\buildtextaccent\textmacron O} \definecharacter omacron {\buildtextaccent\textmacron o} \definecharacter Umacron {\buildtextaccent\textmacron U} \definecharacter umacron {\buildtextaccent\textmacron u} \definecharacter Ccedilla {\buildtextcedilla C} \definecharacter ccedilla {\buildtextcedilla c} \definecharacter Kcedilla {\buildtextcedilla K} \definecharacter kcedilla {\buildtextcedilla k} \definecharacter Lcedilla {\buildtextcedilla L} \definecharacter lcedilla {\buildtextcedilla l} \definecharacter Ncedilla {\buildtextcedilla N} \definecharacter ncedilla {\buildtextcedilla n} \definecharacter Rcedilla {\buildtextcedilla R} \definecharacter rcedilla {\buildtextcedilla r} \definecharacter Scedilla {\buildtextcedilla S} \definecharacter scedilla {\buildtextcedilla s} \definecharacter Tcedilla {\buildtextcedilla T} \definecharacter tcedilla {\buildtextcedilla t} \definecharacter Ohungarumlaut {\buildtextaccent\texthungarumlaut O} \definecharacter ohungarumlaut {\buildtextaccent\texthungarumlaut o} \definecharacter Uhungarumlaut {\buildtextaccent\texthungarumlaut U} \definecharacter uhungarumlaut {\buildtextaccent\texthungarumlaut u} \definecharacter Aogonek {\buildtextogonek A} \definecharacter aogonek {\buildtextogonek a} \definecharacter Eogonek {\buildtextogonek E} \definecharacter eogonek {\buildtextogonek e} \definecharacter Iogonek {\buildtextogonek I} \definecharacter iogonek {\buildtextogonek i} \definecharacter Uogonek {\buildtextogonek U} \definecharacter uogonek {\buildtextogonek u} \definecharacter Aring {\buildtextaccent\textring A} \definecharacter aring {\buildtextaccent\textring a} \definecharacter Uring {\buildtextaccent\textring U} \definecharacter uring {\buildtextaccent\textring u} \definecharacter Abreve {\buildtextaccent\textbreve A} \definecharacter abreve {\buildtextaccent\textbreve a} \definecharacter Ebreve {\buildtextaccent\textbreve E} \definecharacter ebreve {\buildtextaccent\textbreve e} \definecharacter Gbreve {\buildtextaccent\textbreve G} \definecharacter gbreve {\buildtextaccent\textbreve g} \definecharacter Ibreve {\buildtextaccent\textbreve \dotlessI} \definecharacter ibreve {\buildtextaccent\textbreve \dotlessi} \definecharacter Obreve {\buildtextaccent\textbreve O} \definecharacter obreve {\buildtextaccent\textbreve o} \definecharacter Ubreve {\buildtextaccent\textbreve U} \definecharacter ubreve {\buildtextaccent\textbreve u} \definecharacter Ccaron {\buildtextaccent\textcaron C} \definecharacter ccaron {\buildtextaccent\textcaron c} \definecharacter Dcaron {\buildtextaccent\textcaron D} \definecharacter dcaron {\buildtextaccent\textcaron d} \definecharacter Ecaron {\buildtextaccent\textcaron E} \definecharacter ecaron {\buildtextaccent\textcaron e} \definecharacter Lcaron {\buildtextaccent\textcaron L} \definecharacter lcaron {\buildtextaccent\textcaron l} \definecharacter Ncaron {\buildtextaccent\textcaron N} \definecharacter ncaron {\buildtextaccent\textcaron n} \definecharacter Rcaron {\buildtextaccent\textcaron R} \definecharacter rcaron {\buildtextaccent\textcaron r} \definecharacter Scaron {\buildtextaccent\textcaron S} \definecharacter scaron {\buildtextaccent\textcaron s} \definecharacter Tcaron {\buildtextaccent\textcaron T} \definecharacter tcaron {\buildtextaccent\textcaron t} \definecharacter Ycaron {\buildtextaccent\textcaron Y} \definecharacter ycaron {\buildtextaccent\textcaron y} \definecharacter Zcaron {\buildtextaccent\textcaron Z} \definecharacter zcaron {\buildtextaccent\textcaron z} \definecharacter Lstroke {\hsmash{\char32}L} \definecharacter lstroke {\hsmash{\char32}l} \definecharacter Ostroke {\char31 } % "1F \definecharacter ostroke {\char28 } % "1C \definecharacter aumlaut {\moveaccent{-.1ex}\adiaeresis} \definecharacter eumlaut {\moveaccent{-.1ex}\ediaeresis} \definecharacter iumlaut {\moveaccent{-.1ex}\idiaeresis} \definecharacter oumlaut {\moveaccent{-.1ex}\odiaeresis} \definecharacter uumlaut {\moveaccent{-.1ex}\udiaeresis} \definecharacter Aumlaut {\smashaccent\Adiaeresis} \definecharacter Eumlaut {\smashaccent\Ediaeresis} \definecharacter Iumlaut {\smashaccent\Idiaeresis} \definecharacter Oumlaut {\smashaccent\Odiaeresis} \definecharacter Uumlaut {\smashaccent\Udiaeresis} \definecharacter scommaaccent {\buildtextbottomcomma s} \definecharacter Scommaaccent {\buildtextbottomcomma S} \definecharacter tcommaaccent {\buildtextbottomcomma t} \definecharacter Tcommaaccent {\buildtextbottomcomma T} \definecharacter lcommaaccent {\buildtextbottomcomma l} \definecharacter Lcommaaccent {\buildtextbottomcomma L} \definecharacter Etilde {\buildtextaccent\texttilde E} \definecharacter etilde {\buildtextaccent\texttilde e} \definecharacter Ahook {A} \definecharacter ahook {a} \definecharacter Ehook {E} \definecharacter ehook {e} \definecharacter Ihook {I} \definecharacter ihook {i} \definecharacter Ohook {O} \definecharacter ohook {o} \definecharacter Uhook {U} \definecharacter uhook {u} \definecharacter Yhook {Y} \definecharacter yhook {y} \definecharacter Acircumflexgrave {\Acircumflex} \definecharacter Acircumflexacute {\Acircumflex} \definecharacter Acircumflextilde {\Acircumflex} \definecharacter Acircumflexhook {\Acircumflex} \definecharacter acircumflexgrave {\acircumflex} \definecharacter acircumflexacute {\acircumflex} \definecharacter acircumflextilde {\acircumflex} \definecharacter acircumflexhook {\acircumflex} \definecharacter Ecircumflexgrave {\Ecircumflex} \definecharacter Ecircumflexacute {\Ecircumflex} \definecharacter Ecircumflextilde {\Ecircumflex} \definecharacter Ecircumflexhook {\Ecircumflex} \definecharacter ecircumflexgrave {\ecircumflex} \definecharacter ecircumflexacute {\ecircumflex} \definecharacter ecircumflextilde {\ecircumflex} \definecharacter ecircumflexhook {\ecircumflex} \definecharacter Ocircumflexgrave {\Ocircumflex} \definecharacter Ocircumflexacute {\Ocircumflex} \definecharacter Ocircumflextilde {\Ocircumflex} \definecharacter Ocircumflexhook {\Ocircumflex} \definecharacter ocircumflexgrave {\ocircumflex} \definecharacter ocircumflexacute {\ocircumflex} \definecharacter ocircumflextilde {\ocircumflex} \definecharacter ocircumflexhook {\ocircumflex} \definecharacter Abrevegrave {\Abreve} \definecharacter Abreveacute {\Abreve} \definecharacter Abrevetilde {\Abreve} \definecharacter Abrevehook {\Abreve} \definecharacter abrevegrave {\abreve} \definecharacter abreveacute {\abreve} \definecharacter abrevetilde {\abreve} \definecharacter abrevehook {\abreve} \definecharacter Adotbelow {\buildtextbottomdot A} \definecharacter adotbelow {\buildtextbottomdot a} \definecharacter Edotbelow {\buildtextbottomdot E} \definecharacter edotbelow {\buildtextbottomdot e} \definecharacter Idotbelow {\buildtextbottomdot I} \definecharacter idotbelow {\buildtextbottomdot i} \definecharacter Odotbelow {\buildtextbottomdot O} \definecharacter odotbelow {\buildtextbottomdot o} \definecharacter Udotbelow {\buildtextbottomdot U} \definecharacter udotbelow {\buildtextbottomdot u} \definecharacter Ydotbelow {\buildtextbottomdot Y} \definecharacter ydotbelow {\buildtextbottomdot y} \definecharacter Ohorndotbelow {\buildtextbottomdot\Ohorn} \definecharacter ohorndotbelow {\buildtextbottomdot\ohorn} \definecharacter Uhorndotbelow {\buildtextbottomdot\Uhorn} \definecharacter uhorndotbelow {\buildtextbottomdot\uhorn} \definecharacter Acircumflexdotbelow {\buildtextbottomdot\Acircumflex} \definecharacter acircumflexdotbelow {\buildtextbottomdot\acircumflex} \definecharacter Ecircumflexdotbelow {\buildtextbottomdot\Ecircumflex} \definecharacter ecircumflexdotbelow {\buildtextbottomdot\ecircumflex} \definecharacter Ocircumflexdotbelow {\buildtextbottomdot\Ocircumflex} \definecharacter ocircumflexdotbelow {\buildtextbottomdot\ocircumflex} \definecharacter Abrevedotbelow {\buildtextbottomdot\Abreve} \definecharacter abrevedotbelow {\buildtextbottomdot\abreve} \definecharacter Ohorn {O} \definecharacter Ohorngrave {\Ograve} \definecharacter Ohornacute {\Oacute} \definecharacter Ohorntilde {\Otilde} \definecharacter Ohornhook {O} \definecharacter ohorn {o} \definecharacter ohorngrave {\ograve} \definecharacter ohornacute {\oacute} \definecharacter ohorntilde {\otilde} \definecharacter ohornhook {o} \definecharacter Uhorn {U} \definecharacter Uhorngrave {\Ugrave} \definecharacter Uhornacute {\Uacute} \definecharacter Uhorntilde {\Utilde} \definecharacter Uhornhook {U} \definecharacter uhorn {u} \definecharacter uhorngrave {\ugrave} \definecharacter uhornacute {\uacute} \definecharacter uhorntilde {\utilde} \definecharacter uhornhook {u} \stopencoding %D Needed for transliterated chinese (provided by Tobias Burnus). \startencoding[default] \definecharacter acaron {\buildtextaccent\textcaron a} % U+01CE \definecharacter icaron {\buildtextaccent\textcaron \dotlessi} % U+01D0 \definecharacter ocaron {\buildtextaccent\textcaron o} % U+01D2 \definecharacter ucaron {\buildtextaccent\textcaron u} % U+01D4 \stopencoding %D Greek (moved to here): \startencoding[default] % Uppercase Greek letters \definecharacter greekAlpha {\Alpha} \definecharacter greekBeta {\Beta} \definecharacter greekGamma {\Gamma} \definecharacter greekDelta {\Delta} \definecharacter greekEpsilon {\Epsilon} \definecharacter greekZeta {\Zeta} \definecharacter greekEta {\Eta} \definecharacter greekTheta {\Theta} \definecharacter greekIota {\Iota} \definecharacter greekKappa {\Kappa} \definecharacter greekLambda {\Lambda} \definecharacter greekMu {\Mu} \definecharacter greekNu {\Nu} \definecharacter greekXi {\Xi} \definecharacter greekOmicron {\Omicron} \definecharacter greekPi {\Pi} \definecharacter greekRho {\Rho} \definecharacter greekSigma {\Sigma} \definecharacter greekTau {\Tau} \definecharacter greekUpsilon {\Upsilon} \definecharacter greekPhi {\Phi} \definecharacter greekChi {\Chi} \definecharacter greekPsi {\Psi} \definecharacter greekOmega {\Omega} % Lowercase Greek letters \definecharacter greekalpha {\alpha} \definecharacter greekbeta {\beta} \definecharacter greekgamma {\gamma} \definecharacter greekdelta {\delta} \definecharacter greekepsilon {\varepsilon} \definecharacter greekepsilonalt {\epsilon} \definecharacter greekzeta {\zeta} \definecharacter greeketa {\eta} \definecharacter greektheta {\theta} \definecharacter greekthetaalt {\vartheta} \definecharacter greekiota {\iota} \definecharacter greekkappa {\kappa} \definecharacter greeklambda {\lambda} \definecharacter greekmu {\mu} \definecharacter greeknu {\nu} \definecharacter greekxi {\xi} \definecharacter greekomicron {\omicron} \definecharacter greekpi {\pi} \definecharacter greekrho {\rho} \definecharacter greeksigma {\sigma} \definecharacter greekfinalsigma {\varsigma} \definecharacter greektau {\tau} \definecharacter greekupsilon {\upsilon} \definecharacter greekphi {\varphi} \definecharacter greekphialt {\phi} \definecharacter greekchi {\chi} \definecharacter greekpsi {\psi} \definecharacter greekomega {\omega} % Accented Uppercase Greek letters \definecharacter greekAlphatonos {'A} \definecharacter greekEpsilontonos {'E} \definecharacter greekEtatonos {'H} \definecharacter greekIotatonos {'I} \definecharacter greekOmicrontonos {'O} \definecharacter greekUpsilontonos {'U} \definecharacter greekOmegatonos {'W} \definecharacter greekIotadialytika {"I} \definecharacter greekUpsilondialytika {"U} % Accented Lowercase Greek letters \definecharacter greekalphatonos {'a} \definecharacter greekepsilontonos {'e} \definecharacter greeketatonos {'h} \definecharacter greekiotatonos {'i} \definecharacter greekomicrontonos {'o} \definecharacter greekupsilontonos {'u} \definecharacter greekomegatonos {'w} \definecharacter greekiotadialytika {"i} \definecharacter greekupsilondialytika {"u} \definecharacter greekiotadialytikatonos {'"i} \definecharacter greekupsilondialytikatonos {'"u} % Miscellaneous Greek symbols \definecharacter greekleftquot {((} \definecharacter greekrightquot {))} \definecharacter greektonos {'} \definecharacter greekdialytikatonos {'"} \definecharacter greekapostrophos {''} \stopencoding %D Cyrillic (moved to here): \startencoding[default] \definecharacter cyrillicA {A} \definecharacter cyrillicB {B} \definecharacter cyrillicV {V} \definecharacter cyrillicG {G} \definecharacter cyrillicD {D} \definecharacter cyrillicE {E} \definecharacter cyrillicZH {ZH} \definecharacter cyrillicZ {Z} \definecharacter cyrillicI {I} \definecharacter cyrillicISHRT {ISHRT} \definecharacter cyrillicK {K} \definecharacter cyrillicL {L} \definecharacter cyrillicM {M} \definecharacter cyrillicN {N} \definecharacter cyrillicO {O} \definecharacter cyrillicP {P} \definecharacter cyrillicR {R} \definecharacter cyrillicS {S} \definecharacter cyrillicT {T} \definecharacter cyrillicU {U} \definecharacter cyrillicF {F} \definecharacter cyrillicH {H} \definecharacter cyrillicC {C} \definecharacter cyrillicCH {CH} \definecharacter cyrillicSH {SH} \definecharacter cyrillicSHCH {SHCH} \definecharacter cyrillicHRDSN {HRDSN} \definecharacter cyrillicERY {ERY} \definecharacter cyrillicSFTSN {SFTSN} \definecharacter cyrillicEREV {EREV} \definecharacter cyrillicYU {YU} \definecharacter cyrillicYA {YA} \definecharacter cyrillicGUP {GUP} \definecharacter cyrillicGHCRS {GHCRS} \definecharacter cyrillicDJE {DJE} \definecharacter cyrillicTSHE {TSHE} \definecharacter cyrillicSHHA {SHHA} \definecharacter cyrillicZHDSC {ZHDSC} \definecharacter cyrillicZDSC {ZDSC} \definecharacter cyrillicLJE {LJE} \definecharacter cyrillicYI {YI} \definecharacter cyrillicKDSC {KDSC} \definecharacter cyrillicKBEAK {KBEAK} \definecharacter cyrillicKVCRS {KVCRS} \definecharacter cyrillicAE {AE} \definecharacter cyrillicNDSC {NDSC} \definecharacter cyrillicNG {NG} \definecharacter cyrillicDZE {DZE} \definecharacter cyrillicOTLD {OTLD} \definecharacter cyrillicSDSC {SDSC} \definecharacter cyrillicUSHRT {USHRT} \definecharacter cyrillicY {Y} \definecharacter cyrillicYHCRS {YHCRS} \definecharacter cyrillicHDSC {HDSC} \definecharacter cyrillicDZHE {DZHE} \definecharacter cyrillicCHVCRS {CHVCRS} \definecharacter cyrillicCHRDSC {CHRDSC} \definecharacter cyrillicIE {IE} \definecharacter cyrillicSCHWA {SCHWA} \definecharacter cyrillicNJE {NJE} \definecharacter cyrillicYO {YO} \definecharacter cyrillicII {II} \definecharacter cyrillicJE {JE} \definecharacter cyrillicQ {Q} \definecharacter cyrillicW {W} \definecharacter cyrillica {a} \definecharacter cyrillicb {b} \definecharacter cyrillicv {v} \definecharacter cyrillicg {g} \definecharacter cyrillicd {d} \definecharacter cyrillice {e} \definecharacter cyrilliczh {zh} \definecharacter cyrillicz {z} \definecharacter cyrillici {i} \definecharacter cyrillicishrt {ishrt} \definecharacter cyrillick {k} \definecharacter cyrillicl {l} \definecharacter cyrillicm {m} \definecharacter cyrillicn {n} \definecharacter cyrillico {o} \definecharacter cyrillicp {p} \definecharacter cyrillicr {r} \definecharacter cyrillics {s} \definecharacter cyrillict {t} \definecharacter cyrillicu {u} \definecharacter cyrillicf {f} \definecharacter cyrillich {h} \definecharacter cyrillicc {c} \definecharacter cyrillicch {ch} \definecharacter cyrillicsh {sh} \definecharacter cyrillicshch {shch} \definecharacter cyrillichrdsn {hrdsn} \definecharacter cyrillicery {ery} \definecharacter cyrillicsftsn {sftsn} \definecharacter cyrillicerev {erev} \definecharacter cyrillicyu {yu} \definecharacter cyrillicya {ya} \definecharacter cyrillicgup {gup} \definecharacter cyrillicghcrs {ghcrs} \definecharacter cyrillicdje {dje} \definecharacter cyrillictshe {tshe} \definecharacter cyrillicshha {shha} \definecharacter cyrilliczhdsc {zhdsc} \definecharacter cyrilliczdsc {zdsc} \definecharacter cyrilliclje {lje} \definecharacter cyrillicyi {yi} \definecharacter cyrillickdsc {kdsc} \definecharacter cyrillickbeak {kbeak} \definecharacter cyrillickvcrs {kvcrs} \definecharacter cyrillicae {ae} \definecharacter cyrillicndsc {ndsc} \definecharacter cyrillicng {ng} \definecharacter cyrillicdze {dze} \definecharacter cyrillicotld {otld} \definecharacter cyrillicsdsc {sdsc} \definecharacter cyrillicushrt {ushrt} \definecharacter cyrillicy {y} \definecharacter cyrillicyhcrs {yhcrs} \definecharacter cyrillichdsc {hdsc} \definecharacter cyrillicdzhe {dzhe} \definecharacter cyrillicchvcrs {chvcrs} \definecharacter cyrillicchrdsc {chrdsc} \definecharacter cyrillicie {ie} \definecharacter cyrillicschwa {schwa} \definecharacter cyrillicnje {nje} \definecharacter cyrillicyo {yo} \definecharacter cyrillicii {ii} \definecharacter cyrillicje {je} \definecharacter cyrillicq {q} \definecharacter cyrillicw {w} \definecharacter cyrillicGJE {\'\cyrillicG} \definecharacter cyrillicgje {\'\cyrillicg} \definecharacter cyrillicKJE {\'\cyrillicK} \definecharacter cyrillickje {\'\cyrillick} \stopencoding \def\cyrillicio{\cyrillicyo} \def\cyrillicIO{\cyrillicYO} %D Hebrew: \startencoding[default] \definecharacter hebrewAlef {'} \definecharacter hebrewBet {b} \definecharacter hebrewGimel {g} \definecharacter hebrewDalet {d} \definecharacter hebrewHe {h} \definecharacter hebrewVav {w} \definecharacter hebrewZayin {z} \definecharacter hebrewHet {\hstroke} \definecharacter hebrewTet {\tcedilla} \definecharacter hebrewYod {y} \definecharacter hebrewKaffinal {k} \definecharacter hebrewKaf {k} \definecharacter hebrewLamed {l} \definecharacter hebrewMemfinal {m} \definecharacter hebrewMem {m} \definecharacter hebrewNunfinal {n} \definecharacter hebrewNun {n} \definecharacter hebrewSamekh {s} \definecharacter hebrewAyin {\gdotaccent} \definecharacter hebrewPefinal {p} \definecharacter hebrewPe {p} \definecharacter hebrewTsadifinal {\scedilla} \definecharacter hebrewTsadi {\scedilla} \definecharacter hebrewQof {q} \definecharacter hebrewResh {r} \definecharacter hebrewShin {\scaron} \definecharacter hebrewTav {th} \stopencoding %D A few goodies: \def\eszett{\ssharp} \def\Eszett{\Ssharp} \def\lslash{\lstroke} \def\Lslash{\Lstroke} \def\dslash{\dstroke} \def\Dslash{\Dstroke} \def\oslash{\ostroke} \def\Oslash{\Ostroke} \def\dcroat{\dstroke} \def\Dcroat{\Dstroke} % \startencoding [default] % % \definecharacter scommaaccent {\scedilla} % \definecharacter Scommaaccent {\Scedilla} % \definecharacter tcommaaccent {\tcedilla} % \definecharacter Tcommaaccent {\Tcedilla} % % \stopencoding % for plain tex's sake \def\S {\sectionmark } \def\P {\paragraphmark} % for latex users sake \def\textS {\sectionmark } \def\textP {\paragraphmark} % for old times sake \def\florin {\textflorin } \def\florijn{\textflorin} \def\dollar {\textdollar } \def\pound {\textsterling} \def\sterling{\textsterling} % idem \def\promille{\perthousand} \def\permille{\perthousand} \def\procent {\percent } \def\permine {\fakepermine} % some more \def\hyphen {\softhyphen} \def\cwm {\compoundwordmark} \def\nonbreakinghyphen {\hyphen} \def\breakinghyphen {\hyphen\prewordbreak} % quotes \def\lowerleftsingleninequote {\quotesinglebase} \def\lowerleftdoubleninequote {\quotedblbase} \def\lowerrightsingleninequote {\quotesinglebase} \def\lowerrightdoubleninequote {\quotedblbase} \def\upperleftsingleninequote {\quoteright} \def\upperleftdoubleninequote {\quotedblright} \def\upperrightsingleninequote {\quoteright} \def\upperrightdoubleninequote {\quotedblright} \def\upperleftsinglesixquote {\quoteleft} \def\upperleftdoublesixquote {\quotedblleft} \def\upperrightsinglesixquote {\quoteleft} \def\upperrightdoublesixquote {\quotedblleft} \def\leftsubguillemot {\guilsingleleft} \def\rightsubguillemot {\guilsingleright} %D A couple of fallbacks suggestion by users, slightly %D adapted and obscured by memory saving hacks. \unprotect \startencoding[default] \definecharacter textcent {c\rlap{\hskip-.2\s!em \vrule\!!width.2\s!pt\!!height1.2\s!ex\!!depth.2\s!ex}} \definecharacter texteuro {C\rlap{\hskip-.75\s!em \vrule\!!width.4\s!em\!!height.85\s!ex\!!depth-.8\s!ex}} \definecharacter textblacksquare {\dontleavehmode\hbox{% \vrule\!!width.3\s!em\!!height.4\s!em\!!depth-.1\s!em}} \definecharacter textbrokenbar {\dontleavehmode\hbox{\kern.05\s!em \vrule\!!width.4\s!pt\!!height1.8\s!ex\!!depth-.85\s!ex \llap{% \vrule\!!width.4\s!pt\!!height.35\s!ex\!!depth.6\s!ex}% \kern.05\s!em}} \stopencoding \protect %D We also use symbolic names for math accents. \startencoding[default] \definecharacter mathacute "7013 \definecharacter mathgrave "7012 \definecharacter mathddot "707F \definecharacter mathtilde "707E \definecharacter mathbar "7016 \definecharacter mathbreve "7015 \definecharacter mathcheck "7014 \definecharacter mathhat "705E \definecharacter mathvec "017E \definecharacter mathdot "705F \definecharacter mathwidetilde "0365 \definecharacter mathwidehat "0362 \stopencoding % \startencoding [default] % \definecommand prime {\mathematics{'}} % \definecommand doubleprime {\mathematics{''}} % \definecommand tripleprime {\mathematics{'''}} % \stopencoding \ifx\zdot\undefined \def\zdot{\zdotaccent} \fi \ifx\Zdot\undefined \def\Zdot{\Zdotaccent} \fi \ifx\greeklamda\undefined \def\greeklamda{\greeklambda} \fi \ifx\greekLamda\undefined \def\greekLamda{\greekLambda} \fi \ifx\leftguillemet \undefined \def\leftguillemet {\leftguillemot } \fi \ifx\rightguillemet\undefined \def\rightguillemet{\rightguillemot} \fi %D New: \startencoding[\s!default] \definecharacter schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}} \definecharacter schwagrave {\buildtextgrave\schwa} \stopencoding %D Also new, from Taco, for Mojca, who wanted another 8~regimes. \startencoding[\s!default] \definecharacter texthorizontalbar {{\endash\kern\zeropoint\endash}} \definecharacter textdong {\underbar{\dstroke}} \stopencoding %D Goodie (makes more sense): \def\normalcontrolspace {\getglyph{ComputerModernMono}{\char32}} \def\fakedcontrolspace % can be virtual in luatex {\dontleavehmode\hbox {\scratchdimen.1ex% \kern\scratchdimen \vrule \!!width\scratchdimen \!!height5.5\scratchdimen \!!depth3\scratchdimen \vrule \!!width\dimexpr.5em-4\scratchdimen\relax \!!height-2\scratchdimen \!!depth3\scratchdimen \vrule \!!width\scratchdimen \!!height5.5\scratchdimen \!!depth3\scratchdimen \kern\scratchdimen}} \def\fakecontrolspace{\let\normalcontrolspace\fakedcontrolspace} \endinput �������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-imp-nav.mkiv���������������������������0000644�0001750�0001750�00000013475�11754241457�025124� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%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 ADE \& \CONTEXT\ Development Team}] %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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-lucida-opentype.mkiv���������������0000644�0001750�0001750�00000010205�12130411274�027416� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=type-lucida-opentype, %D version=2011.05.18, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Lucida Nova Opentype, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % NOTA BENE: class feattures and goodies get expanded! \starttypescriptcollection[lucida-opentype] \starttypescript [lucidanova,lucidaot,otlucida] \loadfontgoodies[lucida-opentype-math] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!features=\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] [\s!features=\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [\typescriptone] [\s!default] [\s!features=\s!none] \definetypeface [\typescriptone] [\s!hw] [\s!handwriting] [\typescriptone] [\s!default] [\s!features=\s!default] \definetypeface [\typescriptone] [\s!cg] [\s!calligraphy] [\typescriptone] [\s!default] [\s!features=\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [\typescriptone] [\s!default] % for the moment here: \setupmathrendering[\typescriptone][\s!it=\s!italic] \quittypescriptscanning \stoptypescript \starttypescript [\s!serif] [lucidanova,lucidaot,otlucida] \definefontsynonym [\s!Serif] [\s!file:LucidaBrightOT.otf] \definefontsynonym [\s!SerifBold] [\s!file:LucidaBrightOT-Demi.otf] \definefontsynonym [\s!SerifItalic] [\s!file:LucidaBrightOT-Italic.otf] \definefontsynonym [\s!SerifBoldItalic] [\s!file:LucidaBrightOT-DemiItalic.otf] \definefontsynonym [\s!SerifSlanted] [\s!SerifItalic] \definefontsynonym [\s!SerifBoldSlanted] [\s!SerifBoldItalic] \stoptypescript \starttypescript [\s!sans] [lucidanova,lucidaot,otlucida] \definefontsynonym [\s!Sans] [\s!file:LucidaSansOT.otf] \definefontsynonym [\s!SansBold] [\s!file:LucidaSansOT-Demi.otf] \definefontsynonym [\s!SansItalic] [\s!file:LucidaSansOT-Italic.otf] \definefontsynonym [\s!SansBoldItalic] [\s!file:LucidaSansOT-DemiItalic.otf] \definefontsynonym [\s!SansSlanted] [\s!SansItalic] \definefontsynonym [\s!SansBoldSlanted] [\s!SansBoldItalic] \stoptypescript \starttypescript [\s!mono] [lucidanova,lucidaot,otlucida] \definefontsynonym [\s!Mono] [\s!file:LucidaSansTypewriterOT.otf] \definefontsynonym [\s!MonoBold] [\s!file:LucidaSansTypewriterOT-Bold.otf] \definefontsynonym [\s!MonoItalic] [\s!file:LucidaSansTypewriterOT-Oblique.otf] \definefontsynonym [\s!MonoBoldItalic] [\s!file:LucidaSansTypewriterOT-BoldOblique.otf] \definefontsynonym [\s!MonoSlanted] [\s!MonoItalic] \definefontsynonym [\s!MonoBoldSlanted] [\s!MonoBoldItalic] \stoptypescript \starttypescript [\s!math] [lucidanova,lucidaot,otlucida] \definefontsynonym [\s!MathRoman] [\s!file:LucidaBrightMathOT.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucida-opentype-math] \definefontsynonym [\s!MathRomanBold] [\s!file:LucidaBrightMathOT-Demi.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucida-opentype-math] \stoptypescript \starttypescript [\s!handwriting] [lucidanova,lucidaot,otlucida] \definefontsynonym [\s!Handwriting] [\s!file:LucidaHandwritingOT.otf] \stoptypescript \starttypescript [\s!calligraphy] [lucidanova,lucidaot,otlucida] \definefontsynonym [\s!Calligraphy] [\s!file:LucidaCalligraphyOT.otf] \stoptypescript \stoptypescriptcollection \endinput \starttext \setupbodyfont[lucidanova] % \showfont[Serif][all] % \showfont[MathRoman][all] \usemodule[fnt-31] \startluacode fonts.tracers.coverage { "LucidaMathOT.otf", "LucidaBrightOT.otf", "LucidaSansOT-Typewriter.otf", } \stopluacode \stoptext �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-not.mkvi�������������������������������0000644�0001750�0001750�00000200402�12134352503�024326� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-not, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Note Handling, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Note Handling} \registerctxluafile{strc-not}{1.001} \unprotect % todo: finish local rendering % todo: more p_strc_notations_* (outside trial loop) % todo: see if we can now use \insertpenalties (>0 == some left) \ifdefined\dotagsetnotesymbol \else \let\dotagsetnotesymbol\relax \fi \unexpanded\def\unvboxed {\ifvmode\unvbox \else\box \fi} % will change or used more often \unexpanded\def\unvcopied{\ifvmode\unvcopy\else\copy\fi} % will change or used more often %D Notes have two handlers: notations and notes. Although notations can %D be defined independently it makes not much sense. In principle we can %D treat notes as lists but they are currently done as a variant on %D enumerations. I will provide a list variant as well. One complication is %D that for page related notes inserts are used and therefore notes are %D typeset immediately and descriptions are better suited for that. For %D instance endnotes can as well be typeset using lists. % textcommand/textstyle/textcolor : set by note commandhandler and used for inline number %D \macros %D {setupnote,setupnotation} %D %D We can influence footnote typesetting with the setup %D command: %D %D \showsetup{setupnotation} %D \showsetup{setupnote} %D %D The definition command indicate that we can frame the footnote %D area. The footnotes themselves are treated as descriptions. %D %D \showsetup{definenote} %D %D It's sort of a custom to precede footnotes by a horizontal %D rule and although fancy rules like %D %D \starttyping %D \hbox to 10em{\hskip-3em\dotfill} %D \stoptyping %D %D Are quite ligitimate, we default to a simple one 20\% of the %D text width. % \c!headstyle=\noteparameter\c!style, % \c!headcolor=\noteparameter\c!color, \installcorenamespace{notation} \installcommandhandler \??notation {notation} \??notation \installcounterassociation{notation} \let\setupnotations\setupnotation \definesymbol[\v!note:\v!previouspage][\llap{\low{\symbol[\v!previouspage]}}] \definesymbol[\v!note:\v!nextpage ][\llap{\low{\symbol[\v!nextpage ]}}] \setupnotations % check with old [\c!alternative=\v!note, %\c!headstyle=, %\c!titlestyle=, %\c!style=, %\c!color=, %\c!headcolor=, %\c!titlecolor=, \c!numbercommand=\high, %\c!symbolcommand=\lowllap, % experiment %\c!indicator=\v!no, % was \v!yes in mkii for page notes \c!width=\v!fit, \c!titledistance=.5em, \c!distance=.5em, %\c!hang=, %\c!sample=, %\c!align=, %\c!headalign=, \c!margin=\v!no, \c!before=, \c!inbetween=, \c!after=, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!titleleft=(, \c!titleright=), %\c!closesymbol=, \c!closecommand=\wordright, \c!display=\v!yes, %\c!command=, \c!titlecommand=, \c!expansion=\v!no, %\c!xmlsetup=, %\s!catcodes=, \c!way=\v!by\v!text, \c!prefix=\v!no, \c!prefixconnector=., %\c!starter=, %\c!stopper=, \c!number=\v!yes, \c!text=, \c!start=0, \c!state=\v!start, \c!levels=3] %D The code here is mostly the same as enumersations but we want to keep them %D isolated and at some point we might differentiate. % \installcorenamespace{noteclass} \unexpanded\def\strc_define_commands_notation#tag#level#parent% {\doifelsenothing{#parent} {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!notation,\c!level=#level]}% \setevalue{\??notation#tag:\s!parent}{\??notation}}% {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!notation,\c!level=#level]}% \setevalue{\??note#tag:\s!parent}{\??note#parent}% see later for \s!note \setevalue{\??notation#tag:\s!parent}{\??notation#parent}}% \setuevalue{\e!next #tag}{\strc_notations_next {#tag}{\number#level}}% obsolete \setuevalue{\c!reset#tag}{\strc_notations_reset {#tag}{\number#level}}% obsolete %setuevalue{\c!set #tag}{\strc_notations_set {#tag}{\number#level}}% obsolete \setuevalue {#tag}{\strc_notations_command{#tag}}% \setuevalue{\e!start#tag}{\strc_notations_start {#tag}{#tag}}% okay? \setuevalue{\e!stop #tag}{\strc_notations_stop }} \appendtoks \ifx\currentnotationparent\empty % clone => parent | subclone => clone | subsubclone => subclone \let\currentnotationsub\empty \strc_define_commands_notation {\currentnotationsub\currentnotation}% \plusone \empty \edef\p_levels{\notationparameter\c!levels}% \dostepwiserecurse\plustwo\p_levels\plusone {\strc_define_commands_notation {\v!sub\currentnotationsub\currentnotation}% \recurselevel {\currentnotationsub\currentnotation}% \edef\currentnotationsub{\v!sub\currentnotationsub}}% \definelist[\currentnotation]% goodie \else % clone => parent | subclone => subparent | subsubclone => subsubparent \let\currentnotationsub\empty \edef\p_levels{\notationparameter\c!levels}% \dorecurse\p_levels {\strc_define_commands_notation {\currentnotationsub\currentnotation}% \recurselevel {\currentnotationsub\currentnotationparent}% \edef\currentnotationsub{\v!sub\currentnotationsub}}% \definelist[\currentnotation][\currentnotationparent]% goodie \fi \edef\p_counter{\notationparameter\s!counter}% can inherit from parent \ifx\p_counter\empty % \let\p_counter\currentnotation \fi \doifcounterelse\p_counter\donothing{\strc_notes_define_counter\p_counter}% \letnotationparameter\s!counter\p_counter %\strc_notes_setup_counter\currentnotation \to \everydefinenotation \let\p_strc_constructions_title \empty \let\p_strc_constructions_number\empty \unexpanded\setvalue{\??constructioninitializer\v!notation}% {\let\currentnotation \currentconstruction \let\constructionparameter \notationparameter \let\detokenizedconstructionparameter\detokenizednotationparameter \let\letconstructionparameter \letnotationparameter \let\useconstructionstyleandcolor \usenotationstyleandcolor \let\setupcurrentconstruction \setupcurrentnotation \edef\p_strc_constructions_number{\constructionparameter\c!number}% \ifx\p_strc_constructions_number\v!yes \settrue\c_strc_constructions_number_state \iftrialtypesetting \strc_counters_save\currentconstructionnumber \fi % \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel \else \setfalse\c_strc_constructions_number_state \fi \edef\p_strc_constructions_title{\constructionparameter\c!title}% \ifx\p_strc_constructions_title\v!yes \settrue\c_strc_constructions_title_state \else \setfalse\c_strc_constructions_title_state \fi} \unexpanded\setvalue{\??constructionfinalizer\v!notation}% {\ifconditional\c_strc_constructions_number_state \iftrialtypesetting \strc_counters_restore\currentconstructionnumber \fi \fi} %D Notations (we simply needed a word that relates to notes and is %D and sounds like description and enumeration) are a special case %D in the sense that they are stored, rendered elsewhere and referered %D to from where they are specified. For that reason they have a different %D set op main commands. % \notation[ref]{title} % \notation[reference=,title=] % \startnotation[ref] title \stopnotation \unexpanded\def\strc_notations_next {\strc_constructions_next_indeed \namednotationparameter} % #1#2 \unexpanded\def\strc_notations_reset{\strc_constructions_reset_indeed\namednotationparameter} % #1#2 %unexpanded\def\strc_notations_set {\strc_constructions_set_indeed \namednotationparameter} % #1#2 \unexpanded\def\strc_notations_command#tag% {\begingroup \edef\currentnote{#tag}% \strc_constructions_initialize{#tag}% \strc_notes_synchronize \ifnotesenabled \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel \fi \doifnextoptionalelse\strc_notations_command_yes\strc_notations_command_nop} \unexpanded\def\strc_notations_command_nop#title% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#title},\c!bookmark=,\c!list=][]% \csname\??constructionnotehandler\currentconstructionhandler\endcsname \strc_constructions_finalize \normalexpanded{\endgroup\noteparameter\c!next}} \unexpanded\def\strc_notations_command_yes[#optional]% {\doifassignmentelse{#optional}\strc_notations_command_assignment\strc_notations_command_argument[#optional]} \unexpanded\def\strc_notations_command_assignment[#settings]% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#settings][]% \csname\??constructionnotehandler\currentconstructionhandler\endcsname \strc_constructions_finalize \normalexpanded{\endgroup\noteparameter\c!next}} \unexpanded\def\strc_notations_command_argument[#reference]#title% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#reference},\c!title={#title},\c!bookmark=,\c!list=][]% \csname\??constructionnotehandler\currentconstructionhandler\endcsname \strc_constructions_finalize \normalexpanded{\endgroup\noteparameter\c!next}} % \unexpanded\def\strc_notations_start#tag#stoptag% % {\begingroup % \edef\currentnote{#tag}% % \strc_constructions_initialize{#tag}% % \strc_notes_synchronize % \ifnotesenabled % \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel % \fi % \normalexpanded % not that efficient but also not that frequently used (\normaldef for parser) % {\normaldef\noexpand\strc_pickup_yes[##1]##2\csname\e!stop#stoptag\endcsname{\strc_notations_command_yes[##1]{##2}}% % \normaldef\noexpand\strc_pickup_nop ##1\csname\e!stop#stoptag\endcsname{\strc_notations_command_nop {##1}}}% % \doifnextoptionalelse\strc_pickup_yes\strc_pickup_nop} \unexpanded\def\strc_notations_start#tag#stoptag% {\begingroup \edef\currentnote{#tag}% \strc_constructions_initialize{#tag}% \strc_notes_synchronize \ifnotesenabled \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel \fi \normalexpanded % not that efficient but also not that frequently used (\normaldef for parser) {\def\noexpand\strc_pickup_yes[#one]#two\csname\e!stop#stoptag\endcsname{\strc_notations_command_yes[#one]{#two}}% \def\noexpand\strc_pickup_nop #one\csname\e!stop#stoptag\endcsname{\strc_notations_command_nop {#one}}}% \doifnextoptionalelse\strc_pickup_yes\strc_pickup_nop} \unexpanded\def\strc_notations_start_yes[#reference]#title% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#reference},\c!title={#title},\c!bookmark=,\c!list=][]% \csname\??constructionnotehandler\currentconstructionhandler\endcsname \strc_constructions_finalize \normalexpanded{\endgroup\noteparameter\c!next}} \unexpanded\def\strc_notations_start_nop#title% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#title},\c!bookmark=,\c!list=][]% \csname\??constructionnotehandler\currentconstructionhandler\endcsname \strc_constructions_finalize \normalexpanded{\endgroup\noteparameter\c!next}} \unexpanded\def\strc_notations_stop {} %D A complication is that we need to set up rather specific properties %D of e.g. footnotes. It is for this reason that we introduce an extra %D level of indirectness. This way notations don't bark on undefined %D macros when used in combination. \unexpanded\setvalue{\??constructionnotehandler\v!notation}% {\csname\??constructionnotehandler\currentconstructionhandler:\constructionparameter\c!type\endcsname} \unexpanded\setvalue{\??constructionnotehandler\v!notation:}% empty case {[\currentconstructionhandler:\currentconstruction]} %D Here is a simple renderer for notes \defineconstructionalternative [\v!note] [\c!renderingsetup=\??constructionrenderings:\v!note] \startsetups[\??constructionrenderings:\v!note] \noindent \llap{\box\constructionheadbox\hskip\constructionparameter\c!distance}% \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups %D We now implement the note definer. \installcorenamespace{note} \installframedcommandhandler \??note {note} \??note \let\setupnotes\setupnote % These only concern the inline symbol/number and wrapping of the % whole list. \setupnotes % not all make sense here [\c!location=\v!page, %\c!conversion=, \c!rule=\v!on, \c!before=\blank, \c!bodyfont=\v!small, %\c!style=, %\c!color=, %\c!after=, %\c!rulecolor=, %\c!rulecommand=, \c!rulethickness=\linewidth, \c!frame=\v!off, \c!distance=.125em, % in the text between symbols % \c!textseparator={,}, % optional separator \c!columndistance=1em, % \c!margindistance=.5em, \c!align=, % also use instead of \c!tolerance \c!split=\v!tolerant, \c!width=\makeupwidth, % \ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi \c!height=\textheight, \c!command=, % \noteparameter\c!numbercommand, % (command in enumeration) too messy, called twice \c!separator=,% \c!textcommand=\high, \c!textstyle=\tx, %\c!textcolor=, \c!interaction=\v!yes, %\c!factor=, %\c!scope=, % \v!text \v!page \c!prefixconnector=., %\c!next=\autoinsertnextspace, \c!prefix=\v!no, %\c!continue=\v!no, \c!paragraph=\v!no, \c!inbetween=\hskip\emwidth, \c!symbol=\mathematics{*}, \c!n=1] \setupnotes [\c!expansion=\v!no, \c!xmlsetup=, \s!catcodes=] %D Insertions are part of notes. % \installcorenamespace{noteinsertion} \def\currentnoteinsertion {\noteparameter\s!insert} \def\currentnoteinsertionnumber{\namedinsertionnumber{\noteparameter\s!insert}} \appendtoks \ifx\currentnoteparent\empty \doifinsertionelse\currentnote \donothing {\defineinsertion[\currentnote]% could be an option \normalexpanded{\t_strc_notes{\the\t_strc_notes\noexpand\strc_notes_process_list{\currentnote}}}}% \letnoteparameter\s!insert\currentnote \definenotation[\currentnote][\c!type=\v!note]% \else \setexpandednoteparameter\s!insert{\namednoteparameter\currentnoteparent\s!insert}% \definenotation[\currentnote][\currentnoteparent][\c!type=\v!note]% \fi \ctxcommand{definenote("\currentnote","insert",\number\currentnoteinsertionnumber)}% \to \everydefinenote % maybe we will share this at some point: \def\strc_notes_define_counter#tag% todo: move inline {\definecounter[#tag]% \registerenumerationcounter{#tag}} \appendtoks \synchronizenotationcounters \to \everysetupnotation \appendtoks \synchronizenotationcounters \to \everydefinenotation % so far %expandafter\let\csname\??constructionstarthandler \v!notation\expandafter\endcsname\csname\??constructionstarthandler \v!enumeration\endcsname \expandafter\let\csname\??constructionstarthandler \v!notation\expandafter\endcsname\csname\??constructionstarthandler \v!construction\endcsname % no par mess \expandafter\let\csname\??constructionstophandler \v!notation\expandafter\endcsname\csname\??constructionstophandler \v!enumeration \endcsname \expandafter\let\csname\??constructioncommandhandler\v!notation\expandafter\endcsname\csname\??constructioncommandhandler\v!enumeration \endcsname \expandafter\let\csname\??constructiontexthandler \v!notation\expandafter\endcsname\csname\??constructiontexthandler \v!enumeration \endcsname \unexpanded\setvalue{\??constructionmainhandler\v!notation}#following% {\iftrialtypesetting \else \begingroup \currentconstructionsynchronize \attribute\destinationattribute\currentconstructionattribute\relax % todo, whole text \signalcharacter \endgroup \fi#following} \unexpanded\setvalue{\??constructionnotehandler\v!notation:\v!note}% in the running text {\ifnotesenabled % do be done elsewhere % %let\currentnote\currentconstructionmain \let\currentnote\currentconstruction % else wrong inheritance % \iftrialtypesetting \strc_notes_inject_dummy \else \begingroup \edef\currentnotenumber{\ctxcommand{storenote("\currentnote",\currentconstructionlistentry)}}% \settrue\processingnote \ifconditional\c_strc_notes_skip \globallet\lastnotesymbol\strc_notes_inject_symbol_nop \ifconditional\c_strc_notes_delayed \strc_notes_inject_symbol_snc \fi \else \iftypesettinglines % otherwise problems with \type <crlf> {xxx} \ignorelines % makes footnotes work in \startlines ... \stoplines \fi \ifconditional\c_strc_notes_symbol \strc_notes_inject_symbol_yes \else \unskip\unskip \globallet\lastnotesymbol\strc_notes_inject_symbol_yes \fi \fi \ifconditional\postponingnotes % todo: per note class \global\settrue\postponednote \else\ifconditional\inlocalnotes % todo: per note class \global\settrue\postponednote \else \handlenoteinsert\currentnote\currentnotenumber % either an insert or just delayed \fi\fi \endgroup \fi \fi \ifconditional\c_strc_notes_skip \global\setfalse\c_strc_notes_skip \else \kern\notesignal\relax % \relax is needed to honor spaces \fi} %D Interaction in notes is somewhat complex due to the way notes get %D flushed. In principle it is more or less the same as lists but where %D in lists we pack whole entries, in notes this doesn't happen. Okay, %D in retrospect we could have made descriptions lists but that will be %D a backward compatibility mess. At some point a completely new mechanism %D might show up, but not now. Also, as notes are inserts there is some %D extra mess to be kept in mind and it's easier to maintain two mechanisms %D than to combine too much. %D %D Interaction is also complicated because we want to provide several variants. %D For simple reference there is no need for anything special, as page references %D will do and we store them in the list anyway. But if we want a destination with %D dimensions we will use an additional destination because we can have only %D one with the same name and we always have the number as one. % interaction: % % all : text and number % number|yes: only number % text : only text % % \dogetsimple : injects \installcorenamespace{noteinteractioninline} \installcorenamespace{noteinteractiondisplay} \newconstant\a_strc_notes_symbol_reference \newconstant\a_strc_notes_number_reference \newconstant\a_strc_notes_text_reference \newconstant\a_strc_notes_text_destination \def\strc_notes_interaction_check_inline {\edef\p_interaction{\noteparameter\c!interaction}% \csname\??noteinteractioninline \ifcsname\??noteinteractioninline\p_interaction\endcsname\p_interaction\else\v!no\fi \endcsname} \def\strc_notes_interaction_check_display {\edef\p_interaction{\noteparameter\c!interaction}% \csname\??noteinteractiondisplay \ifcsname\??noteinteractiondisplay\p_interaction\endcsname\p_interaction\else\v!no\fi \endcsname} \setvalue{\??noteinteractioninline\v!yes}% {\strc_references_get_simple_page_reference{page(\ctxcommand{notenumberpage("\currentnote",\currentnotenumber)})}% \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}% \let \strc_notes_set_style_color_inline \strc_notes_set_style_color_inline_yes} \setvalue{\??noteinteractioninline\v!all}% {%\strc_references_get_simple_page_reference{note:\cldcontext{structures.notes.internalid("\currentnote",\currentnotenumber)}}% \strc_references_get_simple_page_reference{note:\currentnote:\currentnotenumber}% \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}% \let \strc_notes_set_style_color_inline \strc_notes_set_style_color_inline_yes} \setvalue{\??noteinteractioninline\v!no}% {\let\strc_notes_get_reference_attribute_symbol\empty \let\strc_notes_set_style_color_inline \strc_notes_set_style_color_inline_nop} \expandafter\let\csname\??noteinteractioninline\v!number\expandafter\endcsname\csname\??noteinteractioninline\v!yes\endcsname \expandafter\let\csname\??noteinteractioninline\v!text \expandafter\endcsname\csname\??noteinteractioninline\v!yes\endcsname % page(...) : we could have a dedicated one \setvalue{\??noteinteractiondisplay\v!yes}% {\strc_references_get_simple_page_reference{page(\ctxcommand{notesymbolpage("\currentnote",\currentnotenumber)})}% \edef\strc_notes_set_reference_attribute_number{\attribute\referenceattribute\currentreferenceattribute}% \let \strc_notes_set_reference_attribute_text \donothing \let \strc_notes_set_destination_attribute_text\donothing \let \strc_notes_set_style_color_display \strc_notes_set_style_color_display_yes} \setvalue{\??noteinteractiondisplay\v!no}% {\let\strc_notes_set_reference_attribute_number\donothing \let\strc_notes_set_reference_attribute_text \donothing \let\strc_notes_set_destination_attribute_text\donothing \let\strc_notes_set_style_color_display \strc_notes_set_style_color_display_nop} \setvalue{\??noteinteractiondisplay\v!all}% {\strc_references_get_simple_page_reference{page(\ctxcommand{notesymbolpage("\currentnote",\currentnotenumber)})}% \edef\strc_notes_set_reference_attribute_text {\attribute\referenceattribute\currentreferenceattribute}% %\strc_references_set_simple_page_reference{note:\cldcontext{structures.notes.internalid("\currentnote",\currentnotenumber)}}% \strc_references_set_simple_page_reference{note:\currentnote:\currentnotenumber}% \edef\strc_notes_set_destination_attribute_text{\attribute\destinationattribute\currentdestinationattribute}% \let \strc_notes_set_reference_attribute_number\strc_notes_set_reference_attribute_text \let \strc_notes_set_style_color_display \strc_notes_set_style_color_display_yes} \setvalue{\??noteinteractiondisplay\v!text}% {\strc_references_get_simple_page_reference{page(\ctxcommand{notesymbolpage("\currentnote",\currentnotenumber)})}% \edef\strc_notes_set_reference_attribute_text {\attribute\referenceattribute\currentreferenceattribute}% %\strc_references_set_simple_page_reference{note:\cldcontext{structures.notes.internalid("\currentnote",\currentnotenumber)}}% \strc_references_set_simple_page_reference{note:\currentnote:\currentnotenumber}% \edef\strc_notes_set_destination_attribute_text{\attribute\destinationattribute\currentdestinationattribute}% \let \strc_notes_set_reference_attribute_number\donothing \let \strc_notes_set_style_color_display \strc_notes_set_style_color_display_yes} \expandafter\let\csname\??noteinteractiondisplay\v!number\expandafter\endcsname\csname\??noteinteractiondisplay\v!yes\endcsname \let\strc_notes_set_style_color_inline_nop \usenotestyleandcolor \let\strc_notes_set_style_color_display_nop\usenotationstyleandcolor \unexpanded\def\strc_notes_set_style_color_inline_yes#style#color% {\usenotestyleandcolor#style#color% \iflocation\strc_notes_set_style_color_special\fi} \unexpanded\def\strc_notes_set_style_color_display_yes#style#color% {\usenotationstyleandcolor#style#color% \iflocation\strc_notes_set_style_color_special\fi} \def\strc_notes_set_style_color_special {\iftrialtypesetting % keep \else\ifx\currentcolorparameter\empty \scratchcounter\ctxcommand{notedeltapage("\currentnote",\currentnotenumber)}\relax % todo calculate once \setlocationcolorspecified\scratchcounter \fi\fi} \setvalue{\??constructiontexthandler\v!notation}% {\begingroup % we need to retrigger the reference as otherwise it gets lost because we don't do nested % references with the same id ... maybe some day if we can figure out a nice heuristic ... % the problem is that normally it's no issue but here we lap into the margin, so maybe that's % a criterium % \strc_notes_interaction_check_display \strc_notes_set_reference_attribute_number \strc_notes_set_style_color_display\c!headstyle\c!headcolor \strc_enumerations_text \endgroup} % in mkii the pointer only showed up in pagewise notes \unexpanded\def\strc_notes_inject_pointer % todo calculate once {\ifcase\ctxcommand{notedeltapage("\currentnote",\currentnotenumber)}\relax % unknown \or % same page \or \noteparameter\c!symbolcommand{\symbol[\v!note:\v!nextpage]}% \or \noteparameter\c!symbolcommand{\symbol[\v!note:\v!previouspage]}% \fi} \unexpanded\def\strc_notes_register_note_page % called more often than needed {\iftrialtypesetting \else \normalexpanded{\noexpand\ctxlatecommand{setnotesymbolpage("\currentnote",\currentnotenumber)}}% \fi} \unexpanded\def\strc_notes_inject_symbol_yes {\strc_notes_inject_symbol_indeed\conditionaltrue} \unexpanded\def\strc_notes_inject_symbol_nop {\strc_notes_inject_symbol_indeed\conditionalfalse} \unexpanded\def\strc_notes_inject_symbol_snc {\currentconstructionsynchronize} % this flushes the data to the list \unexpanded\def\strc_notes_inject_symbol_indeed#synchronize% {\removeunwantedspaces \doifitalicelse\/\donothing % Charles IV \footnote{the fourth} \ifdim\lastkern=\notesignal % \kern\noteparameter\c!distance % yes or no note font? or main text \strc_notes_inject_separator \fi \nobreak \begingroup \ifconditional#synchronize\relax \strc_notes_inject_symbol_snc % this flushes the data to the list \fi \strc_notes_register_note_page % this registers the symbol page number (late) \strc_notes_interaction_check_inline \strc_notes_set_style_color_inline\c!textstyle\c!textcolor \hbox \strc_notes_get_reference_attribute_symbol \bgroup \dostarttagged\t!descriptionsymbol\currentnote \dotagsetnotesymbol \noteparameter\c!textcommand{\ctxcommand{noteprefixednumber("\currentnote",\currentnotenumber)}}% % the next one can cycle so we need to make sure it has no advance width \doif{\noteparameter\c!indicator}\v!yes\strc_notes_inject_pointer \dostoptagged \egroup \endgroup \dostoptagged % check \globallet\lastnotesymbol\relax} \unexpanded\def\strc_notes_inject_dummy % temp hack {\removeunwantedspaces \doifitalicelse\/\donothing % Charles IV \footnote{the fourth} \ifdim\lastkern=\notesignal % \kern\noteparameter\c!distance % yes or no note font? or main text \strc_notes_inject_separator \fi \nobreak \hbox to .5\emwidth{}% \globallet\lastnotesymbol\relax} \unexpanded\def\strc_notes_inject_separator % patch by WS due to request on list {\edef\p_textseparator{\noteparameter\c!textseparator}% \ifx\p_textseparator\empty \kern\noteparameter\c!distance \else % skip or kern \nobreak \hbox\bgroup \strc_notes_interaction_check_inline \strc_notes_set_style_color_inline\c!textstyle\c!textcolor \noteparameter\c!textcommand{\p_textseparator}% \kern\noteparameter\c!distance \egroup \nobreak \fi} % this needs a further cleanup ... soon as it's a slow mechanism % % -- set breakpoint in descriptions % -- reset after trialtypesetting % -- that way we can trick the symbol space % removed: % % \pushsomestates % % core-ins -> obsolete % % saveinsertiondata % restoreinsertiondata % saveinsertionbox % eraseinsertionbackup % restoreinsertionbackup \def\savenotedata {} % \writestatus{todo}{save note data}} \def\restorenotedata {} % \writestatus{todo}{restore note data}} \def\savenotecontent {} % \writestatus{todo}{save note content}} \def\restorenotecontent{} % \writestatus{todo}{restore note content}} \def\erasenotebackup {} % \writestatus{todo}{erase note backup}} % page-set: \def\enablenotes {\writestatus{todo}{enable notes}} \def\disablenotes {\writestatus{todo}{disable notes}} \def\savenotes {\writestatus{todo}{save notes}} \def\flushsavednotes{\writestatus{todo}{flush notes}} % experiment: (compare scope=text and scope=page) % % \definenote[mynote][way=bytext,location=text,width=\leftmarginwidth,scope=page,rule=,before=,after=,factor=0] % \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] %D Footnotes are can be characterized by three components: %D %D \startitemize[packed] %D \item a small number \footnote {a footnote number} or %D symbol {\setupfootnotes [conversion=set 2]\footnote %D {a footnote}} %D \item and a similar mark at the bottom of the page %D \item followed by some additional text %D \stopitemize %D %D Because footnotes are declared at the location of their %D reference they can be seen as a special kind of %D floating bodies. Their placement is postponed but has to be %D taken into account in the pagebreak calculations. This kind %D of calculations are forced by using \type{\insert}s and dealing %D with all cases is not trivial. %D \macros %D {notesenabled} %D %D We need a couple of states because at some moments we don't want %D to mess around with inserts at all. Take for instance a table %D of contents. And so we can temporary disable footnotes by saying %D %D \starttyping %D \notesenabledfalse %D \stoptyping \newif\ifnotesenabled \notesenabledtrue % better mark a note .. once flushed no more flushing %appendtoks \notesenabledfalse \to \everymarking \appendtoks \notesenabledfalse \to \everybeforepagebody \appendtoks \notesenabledfalse \to \everystructurelist % quick hack %D Often we need to process the whole set of notes and to make that %D fast, we use a token register: % we have several synchronizers: % % - after a definition % - after a specific setup % - after a general setup (inheritance of dimensions) % - just before a note is typeset \newtoks\t_strc_notes \let\strc_notes_process_list\gobbleoneargument \unexpanded\def\strc_notes_process#action% argument is a \macro that uses \currentnote {\def\strc_notes_process_list##1{\edef\currentnote{##1}\let\currentdescription\currentnote#action}% \the\t_strc_notes} \newtoks\everychecknote % just before a note is typeset \newtoks\everysynchronizenote % after a general setup has happened \appendtoks \ifx\currentnote\empty \else \setupnotations[\currentnote][]% also a synchronize \fi \to \everysynchronizenote \def\strc_notes_synchronize {\the\everysynchronizenote} % we can speed this one up if needed by avoiding the commalist \appendtoks \strc_notes_process\strc_notes_synchronize \to \everysetupnoteroot \appendtoks \the\everysynchronizenote \to \everydefinenote % \starttext % text \startfootnote Test.\stopfootnote % test \footnote{xxxx} \subfootnote{xxxx} % test \footnote{xxxx} \subfootnote{xxxx} % \stoptext \installcorenamespace{notecommand} \installcorenamespace{notealign} \installcorenamespace{notepenalty} \installcorenamespace{noterule} \def\currentnoterulecommand{\csname\??notecommand\currentnote\endcsname} \def\currentnoterulealign {\csname\??notealign \currentnote\endcsname} \def\currentnoterulecommandcommand{\noteparameter\c!rulecommand} \def\currentnoterulecommandnormal {\normalnoterule} % no let as it can be changed afterwards %def\currentnoterulecommandunknown{\noteparameter\c!rule} \def\letcurrentnoterulecommand{\expandafter\let\csname\??notecommand\currentnote\endcsname} \def\letcurrentnoterulealign {\expandafter\let\csname\??notealign \currentnote\endcsname} \appendtoks \letvalue{\??notecommand\currentnote}\currentnoterulecommandnormal \letvalue{\??notealign \currentnote}\lefttoright \to \everysynchronizenote \def\strc_notes_set_rule {\letcurrentnoterulecommand\relax % so we default to nothing \processcommacommand[\noteparameter\c!rule]\strc_notes_set_rule_step} \def\strc_notes_set_rule_step#alternative% {\csname\??noterule\ifcsname\??noterule#alternative\endcsname#alternative\else\s!unknown\fi\endcsname} \setvalue{\??noterule\v!command}{\letcurrentnoterulecommand\currentnoterulecommandcommand} \setvalue{\??noterule \v!on}{\letcurrentnoterulecommand\currentnoterulecommandnormal} \setvalue{\??noterule \v!normal}{\letcurrentnoterulecommand\currentnoterulecommandnormal} \setvalue{\??noterule \v!left}{\letcurrentnoterulealign \lefttoright} \setvalue{\??noterule \v!right}{\letcurrentnoterulealign \righttoleft} \setvalue{\??noterule \v!off}{\letcurrentnoterulecommand\relax} %setvalue{\??noterule\s!unknown}{\letcurrentnoterulecommand\currentnoterulecommandunknown} % obsolete \appendtoks \strc_notes_set_rule \to \everysynchronizenote \def\currentnotepenalty {\ifcsname\??notepenalty\noteparameter\c!split\endcsname \csname\??notepenalty\noteparameter\c!split\endcsname \else \numexpr\noteparameter\c!split\relax \fi} \setnewconstant\notepenaltytolerant \zerocount \setnewconstant\notepenaltystrict 9999 \setnewconstant\notepenaltyverystrict\maxdimen \letvalue{\??notepenalty\v!tolerant }\notepenaltytolerant \letvalue{\??notepenalty\v!strict }\notepenaltystrict \letvalue{\??notepenalty\v!verystrict}\notepenaltyverystrict \letvalue{\??notepenalty }\notepenaltytolerant \def\strc_notes_set_width {\edef\p_width{\noteparameter\c!width}% \ifx\p_width\empty \setnoteparameter\c!width{\hsize}% \fi} \appendtoks \strc_notes_set_width \to \everysynchronizenote %D The following switch can be used to disable limiting the height of the footnote %D area, something that is needed in multi column balancing. Use this switch with %D care. \newif\ifnotelimit \notelimittrue % shared \def\strc_notes_set_factor {\edef\p_factor{\noteparameter\c!factor}% \ifx\p_factor\empty \else \ifnum\p_factor<\zerocount \else % \global \count\currentnoteinsertionnumber\p_factor % new: global \fi \fi} \appendtoks \strc_notes_set_factor \to \everysynchronizenote % locations: \installcorenamespace{notelocationvariant} \installcorenamespace{notepositionvariant} \installcorenamespace{notedelayedvariant} \installcorenamespace{notelocation} \newconditional\c_strc_notes_delayed \unexpanded\def\strc_notes_set_delayed_yes{\settrue \c_strc_notes_delayed} \unexpanded\def\strc_notes_set_delayed_nop{\setfalse\c_strc_notes_delayed} \setvalue{\??notelocation\v!page }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_page} \setvalue{\??notelocation\v!columns }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_columns} \setvalue{\??notelocation\v!lastcolumn }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_lastcolumn} \setvalue{\??notelocation\v!firstcolumn}{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_firstcolumn} \setvalue{\??notelocation\v!none }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_yes \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_none} \setvalue{\??notelocation\v!text }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_yes \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_text} \setvalue{\??notelocation\v!high }{\letvalue{\??notepositionvariant\currentnote}\strc_notes_set_position_high} \setvalue{\??notelocation\v!bottom }{\letvalue{\??notepositionvariant\currentnote}\strc_notes_set_position_bottom} \setvalue{\??notedelayedvariant \??notedelayedvariant }{\strc_notes_set_delayed_nop} % not let \setvalue{\??notepositionvariant\??notepositionvariant}{\strc_notes_set_position_bottom} % not let \setvalue{\??notelocationvariant\??notelocationvariant}{\strc_notes_set_location_page} % not let \unexpanded\def\strc_notes_set_delayed {\csname\??notedelayedvariant \ifcsname\??notedelayedvariant\currentnote\endcsname \currentnote \else \??notedelayedvariant \fi \endcsname} % \let\strc_notes_set_delayed_yes\truecondition % \let\strc_notes_set_delayed_nop\falsecondition % % \def\c_strc_notes_delayed % {\csname\??notedelayedvariant % \ifcsname\??notedelayedvariant\currentnote\endcsname % \currentnote % \else % \??notedelayedvariant % \fi % \endcsname} \unexpanded\def\strc_notes_set_position {\csname\??notepositionvariant \ifcsname\??notepositionvariant\currentnote\endcsname \currentnote \else \??notepositionvariant \fi \endcsname} \unexpanded\def\strc_notes_set_location {\csname\??notelocationvariant \ifcsname\??notelocationvariant\currentnote\endcsname \currentnote \else \??notelocationvariant \fi \endcsname} \unexpanded\def\strc_notes_set_variants {\normalexpanded{\rawprocesscommalist[\noteparameter\c!location]\strc_notes_set_location_step}} \unexpanded\def\strc_notes_set_location_step#alternative% the insert related one {\ifcsname\??notelocation#alternative\endcsname\csname\??notelocation#alternative\endcsname\fi} \appendtoks \strc_notes_set_variants \strc_notes_set_delayed \to \everysynchronizenote \newskip \s_strc_notes_distance % we need to implement stretch \newcount\c_strc_notes_columns \def\strc_notes_set_distance {\begingroup \setbox\scratchbox\vbox % no reuse as it can mirror {\forgetall % \strc_notes_set_bodyfont \dontcomplain \noteparameter\c!before \placenoterule \noteparameter\c!after}% \expandafter\endgroup\expandafter \s_strc_notes_distance\the\ht\scratchbox\relax} \def\strc_notes_set_columns {\c_strc_notes_columns\noteparameter\c!n\relax \ifcase\c_strc_notes_columns \c_strc_notes_columns\plusone \fi} \def\strc_notes_set_location_page {\setfalse\c_strc_notes_delayed \strc_notes_set_distance \strc_notes_set_columns \page_inserts_set_location\currentnoteinsertion\v!page % \setupinsertion[\currentnote][\c!location=\v!page]% \global\count\currentnoteinsertionnumber\numexpr\plusthousand/\c_strc_notes_columns\relax \global\dimen\currentnoteinsertionnumber\ifnotelimit\dimexpr\noteparameter\c!height*\c_strc_notes_columns\relax\else\maxdimen\fi \global\skip \currentnoteinsertionnumber\s_strc_notes_distance} \def\strc_notes_set_location_columns {\setfalse\c_strc_notes_delayed \strc_notes_set_distance \strc_notes_set_columns \ifnum\currentnofcolumns=\zerocount \c_strc_notes_columns\plusone \fi \page_inserts_set_location\currentnoteinsertion\v!columns % \setupinsertion[\currentnote][\c!location=\v!columns]% \global\count\currentnoteinsertionnumber\numexpr\plusthousand/\c_strc_notes_columns\relax \global\dimen\currentnoteinsertionnumber\ifnotelimit\dimexpr\noteparameter\c!height*\c_strc_notes_columns\relax\else\maxdimen\fi \global\skip \currentnoteinsertionnumber\s_strc_notes_distance} \def\strc_notes_set_location_somecolumn#whatcolumn% {\setfalse\c_strc_notes_delayed \strc_notes_set_distance \strc_notes_set_columns \page_inserts_set_location\currentnoteinsertion#whatcolumn% \setupinsertion[\currentnote][\c!location=#whatcolumn]% \global\count\currentnoteinsertionnumber\plusthousand \global\dimen\currentnoteinsertionnumber\ifnotelimit\noteparameter\c!height\else\maxdimen\fi \global\skip \currentnoteinsertionnumber\s_strc_notes_distance} \def\strc_notes_set_location_firstcolumn{\strc_notes_set_location_somecolumn\v!firstcolumn} \def\strc_notes_set_location_lastcolumn {\strc_notes_set_location_somecolumn\v!lastcolumn } \def\strc_notes_set_location_text % we don't use inserts anyway (e.g. endnotes) {\settrue\c_strc_notes_delayed \ctxcommand{setnotestate("\currentnote","store")}% \page_inserts_set_location\currentnoteinsertion\v!text % \setupinsertion[\currentnote][\c!location=\v!text]% \global\count\currentnoteinsertionnumber\zerocount \global\dimen\currentnoteinsertionnumber\maxdimen \global\skip \currentnoteinsertionnumber\zeropoint} \let\strc_notes_set_location_none\strc_notes_set_location_text \def\strc_notes_set_properties {\strc_notes_set_columns \strc_notes_set_distance \strc_notes_set_location \strc_notes_set_delayed} \let\strc_notes_set_position_high\relax \def\strc_notes_set_position_bottom {\settrue\c_notes_bottom_present} \appendtoks \strc_notes_set_properties \to \everysynchronizenote %D A fast checker for bottom notes being used: \newconditional\c_notes_bottom_present \def\strc_notes_check_if_bottom_present_indeed % in otr ! {\ifvoid\currentnoteinsertionnumber\else \strc_notes_set_position \fi} \def\strc_notes_check_if_bottom_present_step {\ifconditional\c_notes_bottom_present\else\strc_notes_check_if_bottom_present_indeed\fi} \def\strc_notes_check_if_bottom_present {\setfalse\c_notes_bottom_present \strc_notes_process\strc_notes_check_if_bottom_present_step} % Example of using factor: % % \definenote[mynote][way=bypage,location=text,width=\marginwidth,rule=,before=,factor=0] % \setuplayout[backspace=5cm,margin=3cm,margindistance=.5cm,width=middle] % \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] % \starttext % \dorecurse{10}{test \mynote{one one one one one one} \input zapf \mynote{one one one one one one} } % \stoptext %D The noterule can be a graphic and therefore calling this %D setup macro at every skipswitch is tricky (many many MP %D runs). Let's just reserve a few points, that probably match %D those of the stretch component. %D A bit messy: \unexpanded\def\placenoterule {\begingroup \currentnoterulealign \currentnoterulecommand \par \endgroup} \unexpanded\def\normalnoterule {\ifvmode \dontleavehmode \blackrule [\c!color=\noteparameter\c!rulecolor, \c!width=.2\hsize, \c!height=\noteparameter\c!rulethickness, \c!depth=\zeropoint]% \endgraf \kern\strutdepth \fi} \ifdefined\setnotehsize \else \unexpanded\def\setnotehsize{\hsize\noteparameter\c!width\relax} % can be overloaded \fi %D The formatting depends on the width of the table, so we %D have to set \type {n} to zero. %D %D \starttyping %D \startbuffer %D \bTABLE %D \bTR \bTD one \footnote{\dorecurse{10}{abcd }} \eTD \bTD two \eTD \eTR %D \bTR \bTD three fout five six seven eight nine \eTD \bTD ten \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \startlocalfootnotes[n=0,location={text,none}] %D \placelegend[n=2]{\getbuffer}{\placelocalfootnotes} %D \stoplocalfootnotes %D \stoptyping %D \macros %D {footnote} %D %D A footnote can have a reference as optional argument and %D therefore its formal specification looks like: %D %D \showsetup{footnote} %D %D This command has one optional command: the reference. By %D saying \type{[-]} the number is omitted. The footnote %D command is not that sensitive to spacing, so it's quite %D legal to say: %D %D \startbuffer %D Users of \CONTEXT\ must keep both feet \footnote{Given they %D have two.} on the ground and not get confused \footnote{Or %D even crazy.} by all those obscure \footnote{But fortunately %D readable.} parameters. %D \stopbuffer %D %D \typebuffer %D %D When setting the \type{conversion} to \type{set 2} we get %D something like: %D %D \bgroup %D \startnarrower %D \setupfootnotes[conversion=set 1] %D \getbuffer %D \stopnarrower %D \egroup %D %D Typesetting footnotes is, at least for the moment, disabled %D when reshaping boxes. %D %D The additional macro \type {\footnotetext} and the %D associated \type {\note} macro were implemented at %D request of users on the mailing list and a suggestion by %D taco to split of the symbol placement. I decided to %D merge this functionality with the existing \type {\note} %D functionality. \newconditional\c_strc_notes_symbol \settrue\c_strc_notes_symbol % not used \newconditional\c_strc_notes_skip \unexpanded\def\setnote [#tag]{\getvalue{#tag}} \unexpanded\def\setnotetext[#tag]{\global\settrue\c_strc_notes_skip\getvalue{#tag}} \unexpanded\def\handlenoteinsert#tag#id% {\begingroup \edef\currentnote{#tag}% \strc_constructions_initialize{#tag}% \strc_notes_synchronize \the\everybeforenoteinsert \insert\currentnoteinsertionnumber\bgroup \the\everyinsidenoteinsert\relax \usesetupsparameter\noteparameter % experimental \doifelse{\noteparameter\c!paragraph}\v!yes {\nointerlineskip \startvboxtohbox \handlenoteitself{#tag}{#id}% % add some slack \stopvboxtohbox} {\handlenoteitself{#tag}{#id}}% \egroup \the\everyafternoteinsert \endgroup} \unexpanded\def\betweennoteitself#tag% {\edef\currentnote{#tag}% \doif{\noteparameter\c!paragraph}\v!yes\strc_notes_between_paragraphs} \unexpanded\def\handlenoteitself#tag#id% {\edef\currentnotenumber{#id}% \edef\currentnote{#tag}% \strc_constructions_initialize{#tag}% \strc_notes_synchronize \edef\currentconstructionlistentry{\ctxcommand{notelistindex("\currentnote",#id)}}% index in list cache % as we can have collected notes (e.g. in tables) we need to recover % \currentdescriptionattribute and \currentdescriptionsynchronize % %\reinstateconstructionnumberentry\currentconstructionlistentry % we could store the number in the entry % \dontcomplain % \begingroup \strc_notes_interaction_check_display \strc_notes_set_reference_attribute_text \strc_constructions_stored_start \begstrut \strc_references_flush_destination_nodes \strc_notes_set_destination_attribute_text \strc_notes_inject_text \endstrut \strc_constructions_stored_stop % \endgroup } \unexpanded\def\strc_notes_inject_text % hm main? {\ctxcommand{savedlisttitle("\currentconstructionmain",\currentconstructionlistentry)}} \let\startpushnote\relax \let\stoppushnote \relax \newsignal\notesignal \newconditional\processingnote \newconditional\postponednote \newtoks\everybeforenoteinsert \newtoks\everyinsidenoteinsert \newtoks\everyafternoteinsert \appendtoks \let\flushnotes\relax \let\postponenotes\relax \forgetall \resetallattributes % new, we don't want color bleed into notes \to \everybeforenoteinsert \appendtoks \doif{\noteparameter\c!scope}\v!page{\floatingpenalty\maxdimen}% experiment \penalty\currentnotepenalty \forgetall \strc_notes_set_bodyfont \redoconvertfont % to undo \undo calls in in headings etc \splittopskip\strutht % not actually needed here \splitmaxdepth\strutdp % not actually needed here % brrr % \leftmargindistance \noteparameter\c!margindistance % \rightmargindistance\leftmargindistance % \ifnum\noteparameter\c!n=\zerocount % no ifcase new 31-07-99 ; always ? % \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize % ? % \fi \to \everyinsidenoteinsert \appendtoks % only needed when columns \setsimplecolumnshsize[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\noteparameter\c!width]% \to \everyinsidenoteinsert % not: \appendtoks \setnotehsize \to \everyinsidenoteinsert (spoils columns) %D Normally footnotes are saved as inserts that are called upon %D as soon as the pagebody is constructed. The footnote %D insertion routine looks just like the \PLAIN\ \TEX\ one, %D except that we check for the end note state. % testcase for split bottom alignment see (a) below % % \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}} \unexpanded\def\placenoteinserts {\strc_notes_process\strc_notes_place_inserts} \def\strc_notes_place_inserts {\strc_notes_set_delayed % \strc_notes_synchronize % we need to know if it's delayed \ifconditional\c_strc_notes_delayed \else \ifdim\ht\currentnoteinsertionnumber>\zeropoint % or a faster delayed test \strc_notes_place_inserts_indeed \fi \fi} \def\strc_notes_place_inserts_indeed {\relax \ifdim\ht\currentnoteinsertionnumber>\zeropoint \endgraf \ifvmode \whitespace \noteparameter\c!before \fi % \bgroup % \setupalign[\noteparameter\c!align]% \placenoterule % alleen in ..mode % \par % \egroup \bgroup \strc_notes_set_bodyfont \setbox\scratchbox\hbox {\strc_notes_flush_inserts}% \setbox\scratchbox\hbox {\setupcurrentnote [\c!location=, \c!width=\v!fit, \c!height=\v!fit, \c!strut=\v!no, \c!offset=\v!overlay]% \inheritednoteframed {\ifdim\dp\scratchbox=\zeropoint % this hack is needed because \vadjust \hbox{\lower\strutdp\box\scratchbox}% % in margin number placement \else % hides the (always) present depth \box\scratchbox \fi}}% \setbox\scratchbox\hbox{\lower\strutdepth\box\scratchbox}% \dp\scratchbox\strutdepth % so we know that it has the note bodyfont depth \box\scratchbox \egroup \endgraf \ifvmode \noteparameter\c!after \fi \fi} \def\strc_notes_flush_inserts {\ifcase\noteparameter\c!n\relax % should not happen \or \strc_notes_flush_inserts_normal \else \strc_notes_flush_inserts_columns \fi} \def\strc_notes_flush_inserts_normal {\strc_notes_flush_global \obeydepth} % (a) added , since split footnotes will not align properly \def\strc_notes_flush_inserts_columns {\startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\noteparameter\c!width]% \strc_notes_flush_global \stopsimplecolumns} % idea: tag with attr and then just flush them again \def\strc_notes_between_paragraphs % should not be too much {\noteparameter\c!inbetween} \def\strc_notes_between_paragraphs_first {\glet\strc_notes_between_paragraphs_indeed\strc_notes_between_paragraphs}% shape works reverse \def\strc_notes_flush_global % will be done in lua instead {\doifelse{\noteparameter\c!paragraph}\v!yes {\vbox {\beginofshapebox \iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteinsertionnumber \endofshapebox \let\strc_notes_between_paragraphs_indeed\strc_notes_between_paragraphs_first % shape works reverse \doreshapebox {\hbox{\unhbox\shapebox\strc_notes_between_paragraphs_indeed}} \donothing \donothing \donothing % get rid of penalties etc \innerflushshapebox \convertvboxtohbox}} {\iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteinsertionnumber}} %D Supporting end notes is surprisingly easy. Even better, we %D can combine this feature with solving the common \TEX\ %D problem of disappearing inserts when they're called for in %D deeply nested boxes. The general case looks like: %D %D \starttyping %D \postponenotes %D \.box{whatever we want with footnotes} %D \flushnotes %D \stoptyping %D %D This alternative can be used in headings, captions, tables %D etc. The latter one sometimes calls for notes local to %D the table, which can be realized by saying %D %D \starttyping %D \setlocalfootnotes %D some kind of table with local footnotes %D \placelocalfootnotes %D \stoptyping %D %D Postponing is accomplished by simply redefining the (local) %D insert operation. A not too robust method uses the %D \type{\insert} primitive when possible. This method fails in %D situations where it's not entirely clear in what mode \TEX\ %D is. Therefore the auto method can is to be overruled when %D needed. \newconditional\postponingnotes % we need a proper state: normal, postponing, flushing \unexpanded\def\postponenotes {\ifconditional\postponingnotes\else \global\settrue\postponingnotes \global\let\flushnotes\doflushnotes \ctxcommand{postponenotes()}% \fi} \let\flushnotes\relax \unexpanded\def\doflushnotes {\ifconditional\postponingnotes \begingroup \let\flushnotes \relax \let\postponenotes\relax \ctxcommand{flushpostponednotes()}% this also resets the states ! \global\setfalse\postponednote \global\setfalse\postponingnotes \global\let\flushnotes\relax \endgroup \fi} %D \macros %D {startlocalfootnotes,placelocalfootnotes} %D %D The next two macros can be used in for instance tables, as %D we'll demonstrate later on. %D %D \showsetup{startlocalfootnotes} %D \showsetup{placelocalfootnotes} % todo: compatibility mode: when first arg is assignment or missing, then all \newtoks\everyplacelocalnotes \appendtoks \let\flushnotes \relax \let\postponenotes\relax \to \everyplacelocalnotes \newconditional\inlocalnotes \unexpanded\def\startlocalnotes {\dosingleempty\strc_notes_local_start} \def\strc_notes_local_start[#list]% grouping ? (we used to have a second argument ... settings) {\def\localnoteslist{#list}% \settrue\inlocalnotes \processcommacommand[\localnoteslist]\strc_notes_local_start_step} \unexpanded\def\stoplocalnotes {\processcommacommand[\localnoteslist]\strc_notes_local_stop_step \setfalse\inlocalnotes} \let\p_strc_notes_continue\empty \def\strc_notes_local_start_step#tag% {\p_strc_notes_continue{\noteparameter\c!continue}% \ifx\p_strc_notes_continue\v!yes \else \strc_counters_save{#tag}% \strc_counters_reset{#tag}% \fi \ctxcommand{savenote("#tag","store")}} \def\strc_notes_local_stop_step#tag% {\p_strc_notes_continue{\noteparameter\c!continue}% \ifx\p_strc_notes_continue\v!yes \else \strc_counters_restore{#tag}% \fi \ctxcommand{restorenote("#tag")}} \unexpanded\def\placelocalnotes {\dodoubleempty\strc_notes_local_place} \def\strc_notes_local_place[#tag][#settings]% {\doif{\ctxcommand{getnotestate("#tag")}}{store}{\strc_notes_local_place_indeed{#settings}{#tag}}} \def\strc_notes_local_place_indeed#settings#tag% {\begingroup \edef\currentnote{#tag}% is already set? \the\everyplacelocalnotes % beware, we cannot trust setting \currentnote here \setupcurrentnote[#settings]% later we set height etc for framed \strc_notes_place_local_alternative \strc_notes_set_properties % restore globals (if needed) \endgroup }% TODO: just restore properties \the\everychecknote} % we need to restore the old state %D These commands can be used like: %D %D \startbuffer %D \startlocalnotes[footnote] %D \placetable %D {Some Table} %D \placeontopofeachother %D {\starttable[|l|r|] %D \HL %D \VL Nota\footnote{Bene} \VL Bene\footnote{Nota} \VL\SR %D \VL Bene\footnote{Nota} \VL Nota\footnote{Bene} \VL\SR %D \HL %D \stoptable} %D {\setupnotation[footnote][alternative={serried},distance=.5em,after=\hskip1em]% %D \placelocalnotes[footnote]} %D \stoplocalnotes %D \stopbuffer %D %D \typebuffer %D %D Because this table placement macro expect box content, and %D thanks to the grouping of the local footnotes, we don't need %D additional braces. %D %D \getbuffer %D \macros %D {placefootnotes} %D %D We still have no decent command for placing footnotes %D somewhere else than at the bottom of the page (for which no %D user action is needed). Footnotes (endnotes) can be %D placed by using %D %D \showsetup{placefootnotes} \unexpanded\def\placebottomnotes {\strc_notes_process\strc_notes_place_inserts} \unexpanded\def\placenotes {\dodoubleempty\strc_notes_place} \def\strc_notes_place[#list][#settings]% {\processcommalist[#list]{\strc_notes_place_indeed{#settings}}} \def\strc_notes_place_indeed#settings#tag% settings note {\edef\currentnote{#tag}% grouping ? \doifelse{\ctxcommand{getnotestate("#tag")}}{store} \strc_notes_local_place_indeed \strc_notes_global_place_indeed {#settings}{#tag}} \def\strc_notes_global_place_indeed#settings#tag% {\begingroup \setupnote[#tag][#settings]% \strc_notes_place_inserts \endgroup \the\everysetupnote} % to be checked .. synchronize %D Placement \installcorenamespace{notealternative} \unexpanded\def\installnotealternative#alternative#command% {\setvalue{\??notealternative#alternative}{#command}} \unexpanded\def\doifnotescollected#tag% {\ctxcommand{doifnotecontent("#tag")}} \def\strc_notes_place_local_alternative % will be a setup (wrapper) {\doifnotescollected\currentnote {\endgraf \ifvmode \whitespace \noteparameter\c!before \fi \begingroup \strc_notes_set_bodyfont \csname\??notealternative\noteparameter\c!alternative\endcsname \endgroup \ifvmode \noteparameter\c!after \fi}} \setvalue{\??notealternative}{\getvalue{\??notealternative\v!none}} %D A stupid alternative is also provided: %D %D \starttyping %D \setupfootnotes[location=text,alternative=none] %D \stoptyping % setups ? \def\flushlocalnotes#tag{\ctxcommand{flushnotes("#tag","store","\noteparameter\c!criterium")}} \installnotealternative \v!none {\flushlocalnotes\currentnote} \installnotealternative \v!grid % test if n > 0 {\begingroup \setupcurrentnote[\c!location=]% \snaptogrid\hbox {\inheritednoteframed {\flushlocalnotes\currentnote}}% \endgroup} \installnotealternative \v!fixed % test if n > 0 {\begingroup \setupcurrentnote[\c!location=]% \inheritednoteframed {\flushlocalnotes\currentnote}% \endgroup} \installnotealternative \v!columns % redundant {\begingroup \setupcurrentnote[\c!location=]% \inheritednoteframed {\edef\currentnotewidth{\noteparameter\c!width}% \doifdimensionelse\currentnotewidth\donothing {\edef\currentnotewidth{\the\hsize}}% \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\currentnotewidth]% \flushlocalnotes\currentnote \stopsimplecolumns}% \endgroup} % 0:page 1:firstcolumn 2:lastcolumn \newconstant\c_strc_notes_page_location \unexpanded\def\strc_notes_check_locations {\edef\p_strc_notes_location{\rootnoteparameter\c!location}% \c_strc_notes_page_location \ifx\p_strc_notes_location\v!firstcolumn\plusone \else \ifx\p_strc_notes_location\v!lastcolumn \plustwo \else \zerocount\fi\fi} \appendtoks \strc_notes_check_locations \to \everysynchronizenote % still semi public (but will change) \newif\ifnotespresent \unexpanded\def\checknotepresence {\notespresentfalse \strc_notes_process\strc_notes_check_presence} \def\strc_notes_check_presence {\ifdim\ht\currentnoteinsertionnumber>\zeropoint \notespresenttrue \fi} %D \macros %D {fakenotes} % used in page-mul \ifdefined\currentnofcolumns\else \def\currentnofcolumns{\nofcolumns} \fi \unexpanded\def\fakenotes {\ifhmode\endgraf\fi\ifvmode \calculatetotalclevernoteheight \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi \fi} \unexpanded\def\fakepagenotes {\ifhmode\endgraf\fi\ifvmode \calculatetotalpagenoteheight \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi \fi} % used in page-not but not yet ok \newdimen\totalnoteheight \unexpanded\def\additionaltotalnoteheight#insert% temp hacks anyway {\dimexpr \ifdim\ht#insert>\zeropoint \ifcase\count#insert % \zeropoint \else % todo: divide by count \ht#insert+\skip#insert% hm, no stretch but a dimen anyway \fi \else \zeropoint \fi \relax} \def\docalculatetotalnoteheight {\ifcase\c_strc_notes_page_location % tricky here ! ! ! to be sorted out ! ! ! \advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}% \fi} \def\docalculatetotalclevernoteheight {\ifcase\c_strc_notes_page_location \else % tricky here ! ! ! to be sorted out ! ! ! \advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}% \fi} \def\docalculatetotalpagenoteheight {\advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}} \def\calculatetotalnoteheight {\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalnoteheight} \def\calculatetotalclevernoteheight{\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalclevernoteheight} \def\calculatetotalpagenoteheight {\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalpagenoteheight} %D Now how can this mechanism be hooked into \CONTEXT\ without %D explictly postponing footnotes? The solution turned out to %D be rather simple: %D %D \starttyping %D \everypar {...\flushnotes...} %D \neverypar {...\postponenotes} %D \stoptyping %D %D We can use \type{\neverypar} because in most commands %D sensitive to footnote gobbling we disable \type{\everypar} %D in favor for \type{\neverypar}. In fact, this footnote %D implementation is the first to use this scheme. %D This is a nasty and new secondary footnote flusher. It %D can be hooked into \type {\everypar} like: %D %D \starttyping %D \appendtoks \synchronizenotes \to \everypar %D \stoptyping % \def\dosynchronizenotes % {\ifvoid\currentnoteinsertionnumber\else\insert\currentnoteinsertionnumber{\unvbox\currentnoteinsertionnumber}\fi} % % \def\synchronizenotes % {\strc_notes_process\dosynchronizenotes} \let\synchronizenotes\relax %D When typesetting footnotes, we have to return to the %D footnote specific bodyfont size, which is in most cases derived %D from the global document bodyfont size. In the previous macros %D we already used a footnote specific font setting macro. \def\strc_notes_set_bodyfont {\let\strc_notes_set_bodyfont\relax \restoreglobalbodyfont \switchtobodyfont[\noteparameter\c!bodyfont]% \setupalign[\noteparameter\c!align]} %D The footnote mechanism defaults to a traditional one %D column way of showing them. By default we precede them by %D a small line. \definenote [\v!footnote] \definenote [\v!endnote ] [\c!location=\v!none] % else no break %D Compatibility macros: \unexpanded\def\setupfootnotedefinition{\setupnotation [\v!footnote]} \unexpanded\def\setupfootnotes {\setupnote [\v!footnote]} \def\footnotetext {\setnotetext [\v!footnote]} \unexpanded\def\placefootnotes {\dodoubleempty\strc_notes_place_footnotes [\v!footnote]} \unexpanded\def\placelocalfootnotes {\dodoubleempty\strc_notes_place_local_footnotes[\v!footnote]} \unexpanded\def\startlocalfootnotes {\startlocalnotes [\v!footnote]} % alleen footnote \unexpanded\def\stoplocalfootnotes {\stoplocalnotes } \def\strc_notes_place_footnotes[#list][#settings]% {\ifsecondargument \placenotes[#list][#settings,\c!height=\textheight]% \else \placenotes[#list][\c!height=\textheight]% \fi} \def\strc_notes_place_local_footnotes[#list][#settings]% {\ifsecondargument \placelocalnotes[#list][#settings,\c!height=\textheight]% \else \placelocalnotes[#list][\c!height=\textheight]% \fi} %D Goodies: %D %D \starttyping %D \dorecurse {100} { %D test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}} %D } %D \stoptyping \def\doifnoteonsamepageelse[#tag]{\ctxcommand{doifnoteonsamepageasprevious("#tag")}} %D New trickery: %D \macros %D {note} %D %D Refering to a note is accomplished by the rather short %D command: %D %D \showsetup{note} %D %D This command is implemented rather straightforward as: \installcorenamespace{notesymbol} \let\lastnotesymbol\relax % todo: per class \unexpanded\def\notesymbol {\dodoubleempty\strc_notes_symbol} \def\strc_notes_symbol[#tag][#reference]% {\dontleavehmode \begingroup \edef\currentnote{#tag}% \usenotestyleandcolor\c!textstyle\c!textcolor \ifnotesenabled \ifsecondargument \unskip \noteparameter\c!textcommand{\in[#reference]}% command here? \else \noteparameter\c!textcommand\lastnotesymbol % check if command double \fi \fi \endgroup} \unexpanded\def\note {\dodoubleempty\strc_notes_note} \def\strc_notes_note[#tag][#reference]% {\ifsecondargument \strc_notes_symbol[#tag][#reference]% \else \secondargumenttrue \strc_notes_symbol[\v!footnote][#tag]% \fi} % will be redone if needed % % \def\ownnotesymbol#1% #1 gets number passed % {\executeifdefined{\??notesymbol\currentnote}\empty} % % \unexpanded\def\setnotesymbol[#1]#2#3% % {\prewordbreak % prevent lookback % \setgvalue{\??notesymbol#1}{#3} % \strc_notes_inject_symbol} % % \unexpanded\def\ownnote[#1]#2#3#4% % {\setnotesymbol[#1]{#2}{#3}% % \setnotetext [#1]{#4}} % % \defineconversion % [ownnote] % [\ownnotesymbol] \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-log.mkii�������������������������������0000644�0001750�0001750�00000020547�11754241457�024310� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=cont-log, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=\TEX\ Logos, %D author=J. Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 TeX Logos} %D The system that is used to typeset this text is called \TEX, %D typeset with an lowered~E. From te beginning of \TEX, %D authors of macro packages adapted this raising and lowering %D style. In this module we define some of those logos. %D The Computer Modern detection hack is gone as we now have Latin %D Modern which has more kerning pairs. \unprotect \def\Mkern#1% {{\setbox\scratchbox\hbox{M}\kern#1\wd\scratchbox}} \unexpanded\def\TeX {T% \Mkern{-.1667}\lower.5ex\hbox{E}% \Mkern{-.125}X} \unexpanded\def\ConTeXt{Con\TeX t} \unexpanded\def\PPCHTeX{ppch\TeX} \unexpanded\def\PRAGMA {Pragma ADE} \unexpanded\def\LaTeX % requested by erik frambach {{\setbox\scratchbox\hbox{L}% \scratchdimen\ht\scratchbox \setbox\scratchbox\hbox{\txx A}% L\kern-.55\wd\scratchbox \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}% \kern-.2\wd\scratchbox\TeX}} \unexpanded\def\TaBlE {T% \kern-.27em\lower.5ex\hbox{A}% \kern-.18emB% \kern-.1em\lower.5ex\hbox{L}% \kern-.075emE} \unexpanded\def\PiCTeX {P% \kern-.12em\lower.5ex\hbox{I}% \kern-.075em C% \kern-.11em\TeX} \def\AMSswitch#1% {$\cal\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$} \unexpanded\def\AmSTeX {\AMSswitch A% \kern-.1667em\lower.5ex\hbox{\AMSswitch M}% \kern-.125em\AMSswitch S% -\TeX} \unexpanded\def\LamSTeX {L% \kern-.4em\raise.3ex\hbox{\AMSswitch A}% \kern-.25em\lower.4ex\hbox{\AMSswitch M}% \kern-.1em{\AMSswitch S}% -\TeX} \unexpanded\def\AmSLaTeX {\AMSswitch A% \kern-.1667em\lower.5ex\hbox{\AMSswitch M}% \kern-.125em\AMSswitch S% -\LaTeX} %D Alternative \CONTEXT\ logo, first Idris S.~Hamid's version: %D %D \def\Context %D {{\sc C\kern -.0667emo\kern -.0667emn\kern -.0549emt\kern %D -.1667em\lower.5ex\hbox {e}\kern -.125emx\kern -.0549emt}} %D %D I changed this into one that adapts itself: \unexpanded\def\Context {{C\kern -.0667em\getscaledglyph{.8}\empty{O\kern -.0667emN\kern -.0549emT\doifitalicelse{\kern-.1em}{\kern-.1667em}\lower.5ex\hbox {E}\doifitalicelse\empty{\kern-.11em}X\kern-.055emT}}} %D The \METAFONT\ and \METAPOST\ logos adapt themselves to the %D current fontsize, an ugly but usefull hack. % rather hard coded % % \loadmapfile[original-base.map] % \loadmapfile[original-vogel-symbol] % % \unexpanded\def\setMFPfont % {\font\logofont=logo% % \ifnum\fam=\bffam\c!bf\else % \ifnum\fam=\slfam\c!sl\else % \ifnum\fam=\itfam\c!sl\else % \ifnum\fam=\bsfam\c!bf\else % \ifnum\fam=\bifam\c!bf\else % \fi\fi\fi\fi\fi % 10 at \currentfontscale\bodyfontsize % \logofont} % % or: % % \definefontsynonym [MetaLogo] [logo10] % \definefontsynonym [MetaLogoBold] [logobf10] % \definefontsynonym [MetaLogoSlanted] [logosl10] % \definefontsynonym [MetaLogoItalic] [logosl10] % \definefontsynonym [MetaLogoBoldSlanted] [logobf10] % \definefontsynonym [MetaLogoBoldtalic] [logobf10] % % \loadmapfile[original-base.map] % \loadmapfile[original-vogel-symbol] % % \def\setMFPfont{\symbolicfont{MetaLogo}} \let\logofont\nullfont \loadmapfile[original-base.map] \unexpanded\def\setMFPfont% more sensitive for low level changes {\font\logofont=logo% \ifx\fontalternative\c!bf\else \ifx\fontalternative\c!it\else \ifx\fontalternative\c!sl\else \ifx\fontalternative\c!bi\else \ifx\fontalternative\c!bs\else \fi\fi\fi\fi\fi 10 at \currentfontscale\bodyfontsize \logofont} %\unexpanded\def\MetaFont% % {\hbox{\setMFPfont METAFONT}} % %\unexpanded\def\MetaPost% % {\hbox{\setMFPfont METAPOST}} \def\MetaHyphen% there is no hyphenchar in this font {\discretionary{\vrule\!!height.33em\!!depth-.27em\!!width.33em}{}{}} \unexpanded\def\MetaFont {{\setMFPfont META\MetaHyphen FONT}} \unexpanded\def\MetaPost {{\setMFPfont META\MetaHyphen POST}} \unexpanded\def\MetaFun {MetaFun} %D \macros %D {TEX, METAFONT, METAPOST, METAFUN, %D PICTEX, TABLE, %D CONTEXT, PPCHTEX, %D AMSTEX, LATEX, LAMSTEX} %D %D We define the funny written ones as well as the less %D error prone upper case names (in \CONTEXT\ we tend to %D write all user defined commands, like abbreviations, in %D uppercase.) \unexpanded\def\METAFONT {\MetaFont} \unexpanded\def\METAPOST {\MetaPost} \unexpanded\def\PPCHTEX {\PPCHTeX} \unexpanded\def\CONTEXT {\ConTeXt} \unexpanded\def\METAFUN {\MetaFun} \unexpanded\def\TEX {\TeX} \unexpanded\def\LATEX {\LaTeX} \unexpanded\def\PICTEX {\PiCTeX} \unexpanded\def\TABLE {\TaBlE} \unexpanded\def\AMSTEX {\AmSTeX} \unexpanded\def\LAMSTEX {\LamSTeX} \unexpanded\def\INRSTEX {inrs\TeX} %D And this is how they show up: \TeX, \MetaFont, \MetaPost, %D \PiCTeX, \TaBlE, \ConTeXt, \PPCHTeX, \AmSTeX, \LaTeX, %D \LamSTeX. %D Some placeholders: \unexpanded\def\eTeX {\mathematics{\varepsilon}-\TeX} \unexpanded\def\pdfTeX {pdf\TeX} \unexpanded\def\pdfeTeX{pdfe-\TeX} \unexpanded\def\luaTeX {lua\TeX} \unexpanded\def\metaTeX{meta\TeX} \unexpanded\def\XeTeX {X\lower.5ex\hbox{\kern-.15em\mirror{E}}\kern-.1667em\TeX} % Adapted from a patch by Mojca: \def\@XeTeX@ {\setbox\scratchbox\hbox{E}% \raise\dimexpr\ht\scratchbox+\dp\scratchbox\relax\hbox{\rotate[\c!rotation=180]{\box\scratchbox}}} \ifnum\texengine=\pdftexengine \unexpanded\def\XeTeX {X\lower.5ex \hbox {\kern-.15em \ifx\fontalternative\c!bf\mirror{E}\else \ifx\fontalternative\c!it \@XeTeX@\else \ifx\fontalternative\c!sl \@XeTeX@\else \ifx\fontalternative\c!bi \@XeTeX@\else \ifx\fontalternative\c!bs \@XeTeX@\else \mirror{E}\fi\fi\fi\fi\fi}% \kern-.1667em \TeX} \else \unexpanded\def\XeTeX {X\lower.5ex \hbox {\kern-.15em \iffontchar\font"018E\relax \char"018E% \else \ifx\fontalternative\c!bf\mirror{E}\else \ifx\fontalternative\c!it \@XeTeX@\else \ifx\fontalternative\c!sl \@XeTeX@\else \ifx\fontalternative\c!bi \@XeTeX@\else \ifx\fontalternative\c!bs \@XeTeX@\else \mirror{E}\fi\fi\fi\fi\fi \fi}% \kern-.1667em \TeX} \fi \let\ETEX \eTeX \let\PDFTEX \pdfTeX \let\PDFETEX\pdfeTeX \let\LUATEX \luaTeX \let\LuaTeX \luaTeX \let\XETEX \XeTeX \unexpanded\def\MkApproved % joke, not used so it might move {\dontleavehmode\rotate [\c!rotation={\ifnum\texengine=\luatexengine\ctxlua{tex.write(45-45*\the\luatexversion/100)}\else0\fi}, \c!align=\v!middle, \c!foregroundstyle=\v!type, \c!foregroundcolor=darkred, \c!frame=\v!on, \c!offset=1ex, \c!background=\v!color, \c!backgroundcolor=lightgray, \c!framecolor=darkred, \c!rulethickness=2pt] {Mk\ifnum\texengine=\luatexengine IV\else II\fi\\approved}} % \unexpanded\def\luaTeX % {\dontleavehmode\begingroup % Lua% % \setbox0\hbox{oT}% % \setbox2\hbox{o\kern0ptT}% % \ifdim\wd0=\wd2 % \setbox0\hbox dir TRT{To}% % \setbox2\hbox{T\kern0pto}% % \hskip\dimexpr\wd0-\wd2\relax % \fi % \TeX % \endgroup} % % a further iteration from the list, patched again % \ifx\fontalternative\c!it -\else % \ifx\fontalternative\c!sl -\else % \ifx\fontalternative\c!bi -\else % \ifx\fontalternative\c!bs -\fi\fi\fi\fi \def\LuaTeX {\dontleavehmode \begingroup Lua% % hope for kerning, try aT \setbox0\hbox{aT}% \setbox2\hbox{a\kern\zeropoint T}% \ifdim\wd0=\wd2 % kerns can go two ways % no aT kerning, try oT as a is not symmetrical \setbox0\hbox{oT}% \setbox2\hbox{o\kern\zeropoint T}% \ifdim\wd0=\wd2 % kerns can go two ways % no aT and oT kerning, try To \setbox0\hbox{To}% \setbox2\hbox{T\kern\zeropoint o}% % maybe we need to compensate for the angle (sl/it/bs/bi) \fi \ifdim\wd0=\wd2\else \kern\dimexpr\wd0-\wd2\relax \fi \fi \TeX \endgroup} \let\luaTeX \LuaTeX \let\LUATEX \LuaTeX \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mer.mkii�������������������������������0000644�0001750�0001750�00000032532�11571377075�024312� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% filtered from html files by Patrick Ion % % ISOAMSR Characters Extended % % Added Math Symbols: Relations \defineMMLentity apE E315 {unknown} approximately equal or equal to \defineMMLentity ape 224A {unknown} approximate, equals \defineMMLentity apid 224B {unknown} approximately identical to \defineMMLentity asymp 224D {\asymp} asymptotically equal to \defineMMLentity Barv E311 {unknown} vert, double bar (over) \defineMMLentity bcong 224C {unknown} reverse congruent \defineMMLentity bepsi E420 {unknown} such that \defineMMLentity bowtie 22C8 {unknown} bowtie \defineMMLentity bsim 223D {unknown} reverse similar \defineMMLentity bsime 22CD {unknown} reverse similar, equals \defineMMLentity bsolhsub E34D {unknown} reverse solidus, subset \defineMMLentity bump 224E {unknown} bumpy equals \defineMMLentity bumpe 224F {unknown} bumpy equals, equals \defineMMLentity cire 2257 {unknown} circle, equals \defineMMLentity Colon 2237 {unknown} two colons \defineMMLentity Colone E30E {unknown} double colon, equals \defineMMLentity colone 2254 {unknown} colon, equals \defineMMLentity congdot E314 {unknown} congruent, dot \defineMMLentity csub E351 {unknown} subset, closed \defineMMLentity csube E353 {unknown} subset, closed, equals \defineMMLentity csup E352 {unknown} superset, closed \defineMMLentity csupe E354 {unknown} superset, closed, equals \defineMMLentity cuepr 22DE {unknown} curly equals, precedes \defineMMLentity cuesc 22DF {unknown} curly equals, succeeds \defineMMLentity Dashv E30F {unknown} double dash, vertical \defineMMLentity dashv 22A3 {\dashv} dash, vertical \defineMMLentity easter 225B {unknown} equal, asterisk above \defineMMLentity ecir 2256 {unknown} circle on equals sign \defineMMLentity ecolon 2255 {unknown} equals, colon \defineMMLentity eDDot E309 {unknown} equal with four dots \defineMMLentity eDot 2251 {unknown} equals, even dots \defineMMLentity efDot 2252 {unknown} equals, falling dots \defineMMLentity eg E328 {unknown} equal-or-greater \defineMMLentity egs 22DD {unknown} equal-or-gtr, slanted \defineMMLentity egsdot E324 {unknown} equal-or-greater, slanted, dot inside \defineMMLentity el E327 {unknown} equal-or-less \defineMMLentity els 22DC {unknown} eq-or-less, slanted \defineMMLentity elsdot E323 {unknown} equal-or-less, slanted, dot inside \defineMMLentity equest 225F {unknown} equal with questionmark \defineMMLentity equivDD E318 {unknown} equivalent, four dots above \defineMMLentity erDot 2253 {unknown} equals, rising dots \defineMMLentity esdot 2250 {unknown} equals, single dot above \defineMMLentity Esim E317 {unknown} equal, similar \defineMMLentity esim 2242 {unknown} equals, similar \defineMMLentity fork 22D4 {unknown} pitchfork \defineMMLentity forkv E31B {unknown} fork, variant \defineMMLentity frown 2322 {\frown} down curve \defineMMLentity gap 2273 {unknown} greater, approximate \defineMMLentity gE 2267 {unknown} greater, double equals \defineMMLentity gEl 22DB {unknown} gt, double equals, less \defineMMLentity gel 22DB {unknown} greater, equals, less \defineMMLentity ges E421 {unknown} gt-or-equal, slanted \defineMMLentity gescc E358 {unknown} greater than, closed by curve, equal, slanted \defineMMLentity gesdot E31E {unknown} greater-than-or-equal, slanted, dot inside \defineMMLentity gesdoto E320 {unknown} greater-than-or-equal, slanted, dot above \defineMMLentity gesdotol E322 {unknown} greater-than-or-equal, slanted, dot above left \defineMMLentity gesl E32C {unknown} greater, equal, slanted, less \defineMMLentity gesles E332 {unknown} greater, equal, slanted, less, equal, slanted \defineMMLentity Gg 22D9 {unknown} triple gtr-than \defineMMLentity gl 2277 {unknown} greater, less \defineMMLentity gla E330 {unknown} greater, less, apart \defineMMLentity glE E32E {unknown} greater, less, equal \defineMMLentity glj E32F {unknown} greater, less, overlapping \defineMMLentity gsim 2273 {unknown} greater, similar \defineMMLentity gsime E334 {unknown} greater, similar, equal \defineMMLentity gsiml E336 {unknown} greater, similar, less \defineMMLentity Gt 226B {unknown} double greater-than sign \defineMMLentity gtcc E356 {unknown} greater than, closed by curve \defineMMLentity gtcir E326 {unknown} greater than, circle inside \defineMMLentity gtdot 22D7 {unknown} greater than, with dot \defineMMLentity gtquest E32A {unknown} greater than, questionmark above \defineMMLentity gtrarr E35F {unknown} greater than, right arrow \defineMMLentity homtht 223B {unknown} homothetic \defineMMLentity lap 2272 {unknown} less, approximate \defineMMLentity lat E33A {unknown} larger than \defineMMLentity late E33C {unknown} larger than or equal \defineMMLentity lates E33E {unknown} larger than or equal, slanted \defineMMLentity lE 2266 {unknown} less, double equals \defineMMLentity lEg 22DA {unknown} less, double equals, greater \defineMMLentity leg 22DA {unknown} less, equals, greater \defineMMLentity les E425 {unknown} less-than-or-equals, slant \defineMMLentity lescc E357 {unknown} less than, closed by curve, equal, slanted \defineMMLentity lesdot E31D {unknown} less-than-or-equal, slanted, dot inside \defineMMLentity lesdoto E31F {unknown} less-than-or-equal, slanted, dot above \defineMMLentity lesdotor E321 {unknown} less-than-or-equal, slanted, dot above right \defineMMLentity lesg E32B {unknown} less, equal, slanted, greater \defineMMLentity lesges E331 {unknown} less, equal, slanted, greater, equal, slanted \defineMMLentity lg 2276 {unknown} less, greater \defineMMLentity lgE E32D {unknown} less, greater, equal \defineMMLentity Ll 22D8 {unknown} triple less-than \defineMMLentity lsim 2272 {unknown} less, similar \defineMMLentity lsime E333 {unknown} less, similar, equal \defineMMLentity lsimg E335 {unknown} less, similar, greater \defineMMLentity Lt 226A {unknown} double less-than sign \defineMMLentity ltcc E355 {unknown} less than, closed by curve \defineMMLentity ltcir E325 {unknown} less than, circle inside \defineMMLentity ltdot 22D6 {unknown} less than, with dot \defineMMLentity ltlarr E35E {unknown} less than, left arrow \defineMMLentity ltquest E329 {unknown} less than, questionmark above \defineMMLentity ltrie 22B4 {unknown} left triangle, equals \defineMMLentity mcomma E31A {unknown} minus, comma above \defineMMLentity mDDot 223A {unknown} minus with four dots, geometric properties \defineMMLentity mid 2223 {\mid} mid \defineMMLentity mlcp E30A {unknown} transversal intersection \defineMMLentity models 22A7 {\models} models \defineMMLentity mstpos 223E {unknown} most positive \defineMMLentity Pr E35C {unknown} double precedes \defineMMLentity pr 227A {\prec} precedes \defineMMLentity prap 227E {unknown} precedes, approximate \defineMMLentity prcue 227C {unknown} precedes, curly equals \defineMMLentity prE 227C {unknown} precedes, double equals \defineMMLentity pre 227C {\preceq} precedes, equals \defineMMLentity prsim 227E {unknown} precedes, similar \defineMMLentity prurel 22B0 {unknown} element precedes under relation \defineMMLentity ratio 2236 {unknown} ratio \defineMMLentity rtrie 22B5 {unknown} right triangle, equals \defineMMLentity rtriltri E359 {unknown} right triangle above left triangle \defineMMLentity Sc E35D {unknown} double succeeds \defineMMLentity sc 227B {\succ} succeeds \defineMMLentity scap 227F {unknown} succeeds, approximate \defineMMLentity sccue 227D {unknown} succeeds, curly equals \defineMMLentity scE 227E {unknown} succeeds, double equals \defineMMLentity sce 227D {\succeq} succeeds, equals \defineMMLentity scsim 227F {unknown} succeeds, similar \defineMMLentity sdote E319 {unknown} equal, dot below \defineMMLentity sfrown E426 {unknown} small down curve \defineMMLentity simg E30C {unknown} similar, greater \defineMMLentity simgE E338 {unknown} similar, greater, equal \defineMMLentity siml E30B {unknown} similar, less \defineMMLentity simlE E337 {unknown} similar, less, equal \defineMMLentity smid E301 {unknown} shortmid \defineMMLentity smile 2323 {\smile} up curve \defineMMLentity smt E339 {unknown} smaller than \defineMMLentity smte E33B {unknown} smaller than or equal \defineMMLentity smtes E33D {unknown} smaller than or equal, slanted \defineMMLentity spar E302 {unknown} short parallel \defineMMLentity sqsub 228F {unknown} square subset \defineMMLentity sqsube 2291 {\sqsubseteq} square subset, equals \defineMMLentity sqsup 2290 {unknown} square superset \defineMMLentity sqsupe 2292 {\sqsupseteq} square superset, equals \defineMMLentity ssmile E303 {unknown} small up curve \defineMMLentity Sub 22D0 {unknown} double subset \defineMMLentity subE 2286 {unknown} subset, double equals \defineMMLentity subedot E34F {unknown} subset, equals, dot \defineMMLentity submult E343 {unknown} subset, multiply \defineMMLentity subplus E341 {unknown} subset, plus \defineMMLentity subrarr E33F {unknown} subset, right arrow \defineMMLentity subsim E345 {unknown} subset, similar \defineMMLentity subsub E349 {unknown} subset above subset \defineMMLentity subsup E347 {unknown} subset above superset \defineMMLentity Sup 22D1 {unknown} double superset \defineMMLentity supdsub E34C {unknown} superset, subset, dash joining them \defineMMLentity supE 2287 {unknown} superset, double equals \defineMMLentity supedot E350 {unknown} superset, equals, dot \defineMMLentity suphsol E34E {unknown} superset, solidus \defineMMLentity suphsub E34B {unknown} superset, subset \defineMMLentity suplarr E340 {unknown} superset, left arrow \defineMMLentity supmult E344 {unknown} superset, multiply \defineMMLentity supplus E342 {unknown} superset, plus \defineMMLentity supsim E346 {unknown} superset, similar \defineMMLentity supsub E348 {unknown} superset above subset \defineMMLentity supsup E34A {unknown} superset above superset \defineMMLentity thkap E306 {unknown} thick approximate \defineMMLentity thksim E429 {unknown} thick similar \defineMMLentity topfork E31C {unknown} fork with top \defineMMLentity trie 225C {unknown} triangle, equals \defineMMLentity twixt 226C {unknown} between \defineMMLentity Vbar E30D {unknown} double vert, bar (under) \defineMMLentity vBar E310 {unknown} vert, double bar (under) \defineMMLentity vBarv E312 {unknown} double bar, vert over and under \defineMMLentity VDash 22AB {unknown} double vert, double dash \defineMMLentity Vdash 22A9 {unknown} double vertical, dash \defineMMLentity vDash 22A8 {unknown} vertical, double dash \defineMMLentity vdash 22A2 {\vdash} vertical, dash \defineMMLentity Vdashl E313 {unknown} vertical, dash (long) \defineMMLentity vltri 22B2 {\triangleleft} left triangle, open, variant \defineMMLentity vprop 221D {unknown} proportional, variant \defineMMLentity vrtri 22B3 {\triangleright} right triangle, open, variant \defineMMLentity Vvdash 22AA {unknown} triple vertical, dash ����������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-tpd.mkii�������������������������������0000644�0001750�0001750�00000123461�11754241457�024304� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=spec-tpd, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=\PDFTEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % once we can be sure that the latest versions of pdftex are % available we can use: % % \pdfobj reserveobjnum \edef\one{\the\pdflastobj} % \pdfobj reserveobjnum \edef\two{\the\pdflastobj} % % \pdfobj useobjnum \one {x} % \pdfobj useobjnum \two {x} % % we then can rewrite part of spec-fdf because the other drivers % already support symbolic references % layers and links don't work while the spec says they should % method = auto % % \definefileinsertion{tpd}{auto}% % {\executesystemcommand{t:/ruby/pstopdf.rb #2}% % \dofileinsertion{tpd}{pdf}} % \let\PDFdestvoffset\zeropoint % \newbox\pdfdestbox % % \def\doPDFdestination#1% % {\ifdim\PDFdestvoffset=\zeropoint\relax % \pdfdest name {#1}\PDFpageviewkey % \else % \setbox\pdfdestbox\hbox to \zeropoint % {\raise\PDFdestvoffset\hbox{\pdfdest name {#1}\PDFpageviewkey}}% % \ht\pdfdestbox\zeropoint % \box\pdfdestbox % \fi} % % \def\PDFdestvoffset{2\lineheight} % {1.5\strutht} %D \macros %D {jobsuffix} %D %D Being one of the first typographical systems able to support %D advances \PDF\ support, \TEX\ is also one of the first %D systems to produce high quality \PDF\ code directly. Thanks %D to Han The Thanh c.s. the \TEX\ community can leap forward %D once again. %D %D One important characteristic of \PDFTEX\ is that is can %D produce standard \DVI\ code as well as \PDF\ code. This %D enables us to use one format file to support both output %D formats. %D All modules in this group use specials to tell drivers what %D non||\TEX\ actions to take. Because from the \TEX\ point of %D view, there is no difference between \DVI\ and \PDF, we %D therefore only have to bend the \DVI\ driver support into %D \PDF\ support. Technically spoken, specials no longer serve %D a purpose, except from ending up as comment in the \PDF\ %D file. %D %D Before we continue we need to make sure if indeed those %D \PDFTEX\ primitives are permitted. If no primitives are %D available, we just stop reading any further. \unprotect \ifx\pdftexversion\undefined \writestatus\m!systems{you should use pdfTeX binaries}\wait \protect\expandafter\endinput \fi \ifnum\pdftexversion<13 \writestatus\m!systems{your pdfTeX version is much too old}\wait \protect\expandafter\endinput \fi \ifnum\pdftexversion<14 \writestatus\m!systems{please update your pdfTeX binaries} \fi \ifnum\pdftexversion>19 \pdfhorigin=1 true in \pdfvorigin=1 true in \fi %D We default to 300 dots per inch image resolution and 600 dpi %D bitmap fonts (when asked for). \ifx\pdfimageresolution\undefined \newcount\pdfimageresolution \fi \ifx\pdfpkresolution \undefined \newcount\pdfpkresolution \fi \pdfimageresolution=300 \pdfpkresolution =600 %D Another downward compatible hack: \ifx\pdflastximagepages\undefined \newcount\pdflastximagepages \pdflastximagepages=1 \fi %D And: \ifx\pdfpageresources\undefined \newtoks\pdfpageresources \fi %D In order to get high quality \METAPOST\ inclusion, we set %D the number of digits to~5 (prevents rounding errors). \ifx\pdfdecimaldigits\undefined \newcount\pdfdecimaldigits \fi \pdfdecimaldigits=10 \ifx\pdfinclusionerrorlevel\undefined \ifx\pdfoptionpdfinclusionerrorlevel\undefined \newcount\pdfinclusionerrorlevel \else \let\pdfinclusionerrorlevel\pdfoptionpdfinclusionerrorlevel \fi \fi \pdfinclusionerrorlevel=0 \ifx\pdfminorversion\undefined \ifx\pdfoptionpdfminorversion\undefined \newcount\pdfminorversion \else \let\pdfminorversion\pdfoptionpdfminorversion \fi \fi \pdfminorversion=5 \def\PDFversion{1.\number\pdfminorversion} % %D Why are the Acrobat viewers so buggy? To prevent font cache % %D mismatches, we say: % % \ifx\pdfuniqueresname\undefined \else % \pdfuniqueresname=1 % \fi %D Once we are sure that we're indeed supporting \PDFTEX, we %D force \PDF\ output at the highest compression. For debugging %D purposes one can set the compresslevel to~0. We also have to %D make sure no other specials are supported, else \PDFTEX\ %D will keep on telling us that we're wrong. We also load the %D general \PDF\ macros that are shared between this driver and %D the \ACROBAT\ one. \startspecials[tpd][reset,fdf] %D This means that by saying %D %D \starttyping %D \usespecials[tpd] %D \stoptyping %D %D we get ourselves full \PDF\ output. %D For some internal testing we need to know the output %D suffix. \setjobsuffix{pdf} %D We don't use specials here, which means that we must flush %D settings before the page is shipped out. \specialbasedsettingsfalse %D Some more internal settings. \appendtoksonce \pdfoutput\zerocount \to \everyresetspecials \pdfoutput=1 % we reset that one with \everyresetspecials %D Just in case we mimmick specials, we have to make sure no %D default specials end up in the process. \let\defaultspecial=\gobbleoneargument \appendtoksonce \let\defaultspecial\normalspecial \to \everyresetspecials \let\PDFcode \pdfliteral \def\PDFcontentcode{\pdfliteral} \def\PDFdirectcode {\pdfliteral direct} %D \macros %D {everyPDFximage} %D %D This token register is flushed before an ximage is loaded. \ifdefined\everyPDFximage \else \newtoks\everyPDFximage \fi \ifdefined\everyPDFxform \else \newtoks\everyPDFxform \fi %D \macros %D {dosetuppaper} %D %D If we don't set the paper size, \PDFTEX\ will certainly do %D it in a way we don't want, therefore we need: \definespecial\dosetuppaper#1#2#3% {\global\pdfpagewidth #2\relax \global\pdfpageheight#3\relax} %D \macros %D {doloadmapfile,doloadmapline,doresetmapfilelist} \ifx\pdfmapfile\undefined \let\pdfmapfile\gobbletwoarguments \fi \ifx\pdfmapline\undefined \let\pdfmapline\gobbletwoarguments \fi \definespecial\doresetmapfilelist {\global\let\doresetmapfilelist\relax \pdfmapfile{original-empty.map}} \ifnum\pdftexversion<120 \definespecial\doloadmapfile #1#2{\pdfmapfile{+#2}} \definespecial\doloadmapline #1#2{} \else \definespecial\doloadmapfile #1#2{\pdfmapfile{#1#2}} \definespecial\doloadmapline #1#2{\pdfmapline{#1#2}} \fi %D nasty but needed \appendtoksonce \loadallfontmapfiles \to \everyPDFximage \appendtoksonce \loadallfontmapfiles \to \everyPDFxform %D \macros %D {doinsertfile,dogetnofinsertpages} %D %D Graphics are not part of \TEX\ and therefore not part of the %D \DVI\ standard. \PDF\ on the other hand has several graphic %D primitives. During the multi||step process \TEX\ %D $\rightarrow$ \DVI\ $\rightarrow$ \POSTSCRIPT\ $\rightarrow$ %D \PDF\ one can insert graphics using specials. In \PDFTEX\ %D however there is only one step! This means that \PDFTEX\ %D itself has to do the inclusion. %D %D At the moment \PDFTEX\ supports inclusion of bitmap \PNG\ %D graphics as well as not too complicated \PDF\ code. Using %D this last option, we are able to include both \METAPOST\ and %D \PDF\ output produced by \GHOSTSCRIPT. %D %D We fall back on the generic \CONTEXT\ module supp-pdf to %D accomplish \PDF\ inclusion. The methods implemented there %D are hooked into both the figure placement mechanisms of %D \CONTEXT\ and the specials inclusion mechanism. \definespecial\doinsertfile {\dofileinsertion{tpd}{\truegraphictype\@@DriverImageType}} %D The number of pages in (for instance an \PDF) insert %D file, can be asked for using: \definespecial\dogetnofinsertpages#1% {\xdef\nofinsertpages{1}% global \doifvalidpdfimagefileelse{#1}% {\pdfximage{#1}\xdef\nofinsertpages{\the\pdflastximagepages}} {}} %D Currently we support \type{pdf} for \PDF\ files, \type{mps} %D for \METAPOST\ graphics, \type{png} and \type{jpg} for %D bitmap graphics. \definefileinsertion{tpd}{mps} {\hbox {\convertMPtoPDF\@@DriverImageFile{1}{1}% \global\let\PDFimagereference\empty}} \definefileinsertion{tpd}{pdf}{\handlepdfimage} \definefileinsertion{tpd}{png}{\handlepdfimage} \definefileinsertion{tpd}{jpg}{\handlepdfimage} \definefileinsertion{tpd}{jb2}{\handlepdfimage} % \definefileinsertion{tpd}{jpeg} {\handlepdfimage} % \definefileinsertion{tpd}{jbig2}{\handlepdfimage} %D Experimental: %D The main file insertion macro is as follows. Because %D \PDFTEX\ does not support arbitrary suffixes, we double %D check on a user supplied filename, because \PDFTEX\ chokes %D on unknown suffixes. \def\doifvalidpdfimagefileelse#1% todo: greedy split {\doiffileelse{#1} {\edef\filesuffix{#1}% \doloop {\@EA\aftersplitstring\filesuffix\at.\to\temp \ifx\temp\empty \exitloop \else \lowercasestring\temp\to\filesuffix % insertion check also needs lowercase % a temporary hack \doif\filesuffix{pdf}{\pdfimageresolution72}% % because pdfTeX scales back \fi}} {\let\filesuffix\s!unknown}% \doiffileinsertionsupportedelse\filesuffix} \ifx\pdflastximagepages\undefined \chardef\pdflastximagepages=1 \fi \def\checkpdfimagepagenumber {\edef\pdfimagepagenumber {\ifx\@@DriverImagePage\empty\else\ifnum\@@DriverImagePage>\zerocount \space page\space\@@DriverImagePage\space \fi\fi}} \ifnum\pdftexversion>13 \def\handlepdfimage {\bgroup \the\everyPDFximage \doifvalidpdfimagefileelse\@@DriverImageFile {\checkpdfimagepagenumber \ifx\pdfimagepagenumber\empty\@EA\pdfimmediateximage\else\@EA\pdfximage\fi \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \fi \ifdim\@@DriverImageHeight>\zeropoint \!!height\@@DriverImageHeight\fi \pdfimagepagenumber \@@DriverImageBox {\@@DriverImageFile} \xdef\PDFimagereference{\the\pdflastximage}% \xdef\nofinsertpages{\the\pdflastximagepages}% \pdfrefximage\pdflastximage} {\framed[\c!width=\@@DriverImageWidth,\c!height=\@@DriverImageHeight]{\@@DriverImageFile}}% \egroup} \else \def\handlepdfimage {\bgroup \doifvalidpdfimagefileelse\@@DriverImageFile {\pdfimage \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \fi \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight\fi {\@@DriverImageFile}}% {\framed[\c!width=\@@DriverImageWidth,\c!height=\@@DriverImageHeight]{\@@DriverImageFile}}% \egroup} \fi %D As we will see now, \PDFTEX\ not only directly supports %D \type{mps}, \type{png}, \type{pdf}, \type{jpg} but also %D \type{mov}. In \CONTEXT\ we support movie inserts in a way %D similar to figure inclusion. The next macro calls the %D general \PDF\ one. \definefileinsertion{tpd}{mov}{\doPDFinsertmov} \definefileinsertion{tpd}{avi}{\doPDFinsertmov} %D \macros %D {doinsertsoundtrack} %D %D We use numbers instead of labels to keep track of sounds. \definespecial\doinsertsoundtrack{\doPDFinsertsoundtrack} %D For the moment we don't test for alternatives that %D themselves have alternatives, especially cylcic %D dependencies. % some day we will do a proper check on bitmap depth, % % \pdfobj reserveobjnum\relax % \pdfximage colorspace \pdflastobj {some file} % ... \pdflastximagecolordepth ... % \immediate\pdfobj useobjnum \pdflastobj {some spec} \ifx\@@DriverImageBox\undefined \def\@@DriverImageBox{artbox} \fi \def\pdfimmediateximage{\immediate\pdfximage} \ifnum\pdftexversion>13 \def\checkpdfimageattributes {\ifx\PDFfigurereference\empty \global\let\pdfimageattributes\empty \else \immediate\pdfobj {[ << /Image \PDFobjref\PDFfigurereference /DefaultForPrinting true >> ]}% \xdef\pdfimageattributes {attr {/Alternates \PDFobjref\pdflastobj}}% \fi} \global\let\PDFimagecolorreference\empty \def\checkpdfimagecolorspecs {\ifx\pdflastximagecolordepth \undefined \global\let\pdfimagecolorspecs\empty \else\ifx\PDFimagecolorreference\empty \global\let\pdfimagecolorspecs\empty \else \xdef\pdfimagecolorspecs{colorspace \PDFimagecolorreference\space}% \fi\fi \global\let\PDFimagecolorreference\empty} \def\dogetTPDfiguresize {\doifvalidpdfimagefileelse\@@DriverImageFile {\ifvoid\foundexternalfigure \donetrue \else\ifx\PDFfigurereference\empty \donetrue \else % hm, is this still needed \doifinstringelse\filesuffix{\c!png,\c!jpg}\donetrue\donefalse \fi\fi} {\donefalse}% \ifdone \the\everyPDFximage \checkpdfimageattributes \checkpdfimagecolorspecs \checkpdfimagepagenumber \global\setbox\foundexternalfigure\hbox {\ifx\pdfimagepagenumber\empty\@EA\pdfimmediateximage\else\@EA\pdfximage\fi \pdfimageattributes \pdfimagecolorspecs \pdfimagepagenumber \@@DriverImageBox {\@@DriverImageFile}% \xdef\PDFimagereference{\the\pdflastximage}% \xdef\nofinsertpages{\the\pdflastximagepages}% \pdfrefximage\pdflastximage}% \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}% \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}% \global\let\PDFfigurereference\empty \global\let\PDFimageattributes\empty \else \global\let\analyzedfigurewidth \!!zeropoint \global\let\analyzedfigureheight\!!zeropoint \fi} \else \def\dogetTPDfiguresize {\doifvalidpdfimagefileelse\@@DriverImageFile {\global\setbox\foundexternalfigure\vbox{\pdfimage{\@@DriverImageFile}}% \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}% \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}} {\global\let\analyzedfigurewidth \!!zeropoint \global\let\analyzedfigureheight\!!zeropoint}} \fi \definefilechecker{tpd}{pdf}{\dogetTPDfiguresize} \definefilechecker{tpd}{png}{\dogetTPDfiguresize} \definefilechecker{tpd}{jpg}{\dogetTPDfiguresize} \definefilechecker{tpd}{jb2}{\dogetTPDfiguresize} \definespecial\dogetfiguresize {\dofilechecker{tpd}{\truegraphictype\@@DriverImageType}} %D \macros %D {doregisterfigure} %D %D Here is the fuzzy, very special dependant figure %D registration special. We need to refer to the innermost %D object (ximage). \ifnum\pdftexversion>13 \definespecial\doregisterfigure#1#2% {\doifundefined{IM::#1::#2} {\setxvalue{IM::#1::#2}{\the\pdflastximage}}% \xdef\PDFfigurereference{\getvalue{IM::#1::#2}}} \fi %D \macros %D {doovalbox} %D %D Drawing frames with round corners is inherited from the %D main module. \definespecial\doovalbox {\doPDFovalbox} %D \macros %D {dostartgraymode,dostopgraymode, %D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode, %D dostopcolormode, %D dostartrotation,dostoprotation, %D dostartscaling,dostopscaling, %D dostartmirroring,dostopmirroring, %D dostartnegative,dostopnegative, %D dostartoverprint,dostopoverprint} %D %D These are implemented in the main \PDF\ module. \definespecial\dostartgraymode {\doPDFstartgraymode} \definespecial\dostopgraymode {\doPDFstopgraymode} \definespecial\dostartrgbcolormode {\doPDFstartrgbcolormode} \definespecial\dostartcmykcolormode{\doPDFstartcmykcolormode} \definespecial\dostartgraycolormode{\doPDFstartgraycolormode} \definespecial\dostartspotcolormode{\doPDFstartspotcolormode} \definespecial\dostopcolormode {\doPDFstopcolormode} \definespecial\dostartrotation {\doPDFstartrotation} \definespecial\dostoprotation {\doPDFstoprotation} \definespecial\dostartscaling {\doPDFstartscaling} \definespecial\dostopscaling {\doPDFstopscaling} \definespecial\dostartmirroring {\doPDFstartmirroring} \definespecial\dostopmirroring {\doPDFstopmirroring} \definespecial\dostartnegative {\doPDFstartnegative} \definespecial\dostopnegative {\doPDFstopnegative} \definespecial\dostartoverprint {\doPDFstartoverprint} \definespecial\dostopoverprint {\doPDFstopoverprint} \definespecial\doregistercmykspotcolor{\doPDFregistercmykspotcolor} \definespecial\doregisterrgbspotcolor {\doPDFregisterrgbspotcolor} \definespecial\doregistergrayspotcolor{\doPDFregistergrayspotcolor} \definespecial\doregistercmykindexcolor{\doPDFregistercmykindexcolor} \definespecial\doregisterrgbindexcolor {\doPDFregisterrgbindexcolor} \definespecial\doregistergrayindexcolor{\doPDFregistergrayindexcolor} \definespecial\doregisterfigurecolor{\doPDFregisterfigurecolor} \definespecial\dostartnonecolormode{\doPDFstartnonecolormode} \definespecial\doregisternonecolor {\doPDFregisternonecolor} \def\doPDFregisterspotcolorname#1#2% no need for escape in luatex {\bgroup \let\ascii\empty \def\docommand##1% {\edef\ascii{\ascii \ifx\nexthandledtoken\space \letterhash20% \else\ifx\nexthandledtoken\blankspace \letterhash20% \else ##1% \fi\fi}}% \expanded{\handletokens#2}\with\docommand \letgvalue{@@pdf@@scn@@#1}\ascii \egroup} \def\doPDFregistersomespotcolor#1#2#3#4#5#6#7% name fractions names p's space domain function {\bgroup \let\spotpops\empty \ifcase#2\or %def\PDFspotcolornames{/Separation /#1}% \edef\PDFspotcolornames{/Separation /\executeifdefined{@@pdf@@scn@@#1}{#1}}% \def\PDFspotcolordomain{0.0 1.0}% \else \dorecurse{#2}{\edef\spotpops{\spotpops pop }}% \let\PDFspotcolornames \empty \let\PDFspotcolordomain\empty \def\dospotcolorcommand##1% {\edef\PDFspotcolornames {\PDFspotcolornames/\executeifdefined{@@pdf@@scn@@##1}{##1}\space}% \edef\PDFspotcolordomain{\PDFspotcolordomain 0.0 1.0\space}}% \processcommacommand[#3]\dospotcolorcommand \edef\PDFspotcolornames{/DeviceN [\PDFspotcolornames]}% \fi \immediate \pdfobj stream attr {/FunctionType 4 /Domain [\PDFspotcolordomain] /Range [#6]}{{\spotpops#7}}% \immediate \pdfobj {[\PDFspotcolornames\space /Device#5 \PDFobjref\pdflastobj]}% \dosetobjectreference{PDFCS}{#1}{\the\pdflastobj}% \appendtoPDFdocumentcolorspaces{/#1 \PDFobjref\pdflastobj}% \egroup} %D New and very experimental. % \def\doPDFregistersomeindexcolor#1#2#3#4#5#6#7% name fractions names p's space domain function % {\bgroup % \let\spotpops\empty % \dorecurse{#2}{\edef\spotpops{\spotpops exch pop\space}}% % \let\PDFspotcolornames \empty % \let\PDFspotcolordomain\empty % \def\docommand##1% % {\edef\PDFspotcolornames{\PDFspotcolornames/\executeifdefined{@@pdf@@scn@@##1}{##1}\space}% % \edef\PDFspotcolordomain{\PDFspotcolordomain 0.0 1.0\space}}% % \processcommacommand[#3,None]\docommand % \let\PDFcolorindexvector\empty % \def\docommand##1% % {\scratchdimen##1\points % \scratchdimen\recurselevel\scratchdimen % \scratchcounter\scratchdimen % \divide\scratchcounter \maxcard % \edef\PDFcolorindexvector{\PDFcolorindexvector\uchexnumbers\scratchcounter}}% % \dostepwiserecurse\zerocount{255}\plusone % {\rawprocesscommacommand[#4,1]\docommand % \xdef\PDFcolorindexvector{\PDFcolorindexvector\space}}% % \immediate \pdfobj stream attr % {/FunctionType 4 /Domain [\PDFspotcolordomain] /Range [#6]}{{\spotpops#7}}% % \immediate \pdfobj % {[/Indexed % [/DeviceN [\PDFspotcolornames] /Device#5 \PDFobjref\pdflastobj] % % 255 <\PDFcolorindexvector>]}% % \dosetobjectreference{PDFIX}{#1}{\the\pdflastobj}% % \appendtoPDFdocumentcolorspaces{/#1_INDEXED \PDFobjref\pdflastobj}% % \egroup} % we reverse the index; an alternative is to negate the graphic itself (\start/stop negative) \def\doPDFregistersomeindexcolor#1#2#3#4#5#6#7% name fractions names p's space domain function {\bgroup \let\spotpops\empty \dorecurse{#2}{\edef\spotpops{\spotpops exch pop\space}}% \let\PDFspotcolornames \empty \let\PDFspotcolordomain\empty \def\docommand##1% {%\edef\PDFspotcolornames {\PDFspotcolornames/##1\space}% \edef\PDFspotcolornames{\PDFspotcolornames/\executeifdefined{@@pdf@@scn@@##1}{##1}\space}% \edef\PDFspotcolordomain{\PDFspotcolordomain 0.0 1.0\space}}% \processcommacommand[#3,None]\docommand \let\PDFcolorindexvector\empty \def\docommand##1% {\scratchdimen##1\points \scratchdimen\recurselevel\scratchdimen \scratchcounter\scratchdimen \divide\scratchcounter \maxcard \edef\PDFcolorindexvector{\PDFcolorindexvector\uchexnumbers\scratchcounter}}% %\dostepwiserecurse\zerocount{255}\plusone \dostepwiserecurse{255}\zerocount\minusone % we need to negate {\rawprocesscommacommand[#4,1]\docommand \xdef\PDFcolorindexvector{\PDFcolorindexvector\space}}% \immediate \pdfobj stream attr {/FunctionType 4 /Domain [\PDFspotcolordomain] /Range [#6]}{{\spotpops#7}}% \immediate \pdfobj {[/Indexed [/DeviceN [\PDFspotcolornames] /Device#5 \the\pdflastobj\space0 R] % 255 <\PDFcolorindexvector>]}% \dosetobjectreference{PDFIX}{#1}{\the\pdflastobj}% \appendtoPDFdocumentcolorspaces{/#1_INDEXED \the\pdflastobj\space0 R}% \egroup} %D \macros %D {dostarttransparency,dostoptransparency} %D %D For transparency, we need to implement a couple of %D auxiliary macros. If needed, we will generalize them later. \definespecial\dostarttransparency{\doPDFstarttransparency} \definespecial\dostoptransparency {\doPDFstoptransparency} \PDFtransparencysupportedtrue \def\@@PDT{@PDT@} \ifx\PDFcurrenttransparency\undefined \newcount\PDFcurrenttransparency \PDFcurrenttransparency=0 % -1 \fi \def\assignPDFtransparency#1#2% {\edef\PDFtransparencyidentifier{/Tr#1}% \edef\PDFtransparencyreference{\PDFobjref{#2}}} \def\presetPDFtransparency#1#2% {\initializePDFtransparency \executeifdefined{\@@PDT#1:#2}{\dopresetPDFtransparency{#1}{#2}}} \def\dopresetPDFtransparency#1#2% {\global\advance\PDFcurrenttransparency \plusone \immediate\pdfobj{\PDFtransparancydictionary{#1}{#2}{}}% \edef\PDFtransparencyidentifier{/Tr\the\PDFcurrenttransparency}% \edef\PDFtransparencyreference {\PDFobjref\pdflastobj}% \setxvalue{\@@PDT#1:#2}% {\noexpand\assignPDFtransparency{\the\PDFcurrenttransparency}{\the\pdflastobj}}% \appendtoPDFdocumentextgstates {\PDFtransparencyidentifier\space \PDFtransparencyreference\space}} \def\initializePDFtransparency {\immediate\pdfobj{\PDFtransparancydictionary{1}{1}{/AIS false}}% \xdef\PDFtransparencyresetidentifier{/Tr0}% \xdef\PDFtransparencyresetreference{\PDFobjref\pdflastobj}% \setxvalue{\@@PDT0:0}% {\noexpand\assignPDFtransparency{0}{\the\pdflastobj}}% \appendtoPDFdocumentextgstates {\PDFtransparencyresetidentifier\space \PDFtransparencyresetreference\space}% \global\let\initializePDFtransparency\relax} %D \macros %D {dostartclipping,dostopclipping} %D %D Clipping in \PDFTEX\ is rather trivial. We can even hook %D in \METAPOST\ without problems. \definespecial\dostartclipping#1#2#3% {\PointsToBigPoints{#2}\width \PointsToBigPoints{#3}\height \grabMPclippath{#1}{1}\width\height {0 0 m \width\space 0 l \width \height l 0 \height l}% \pdfliteral % PDFcode ? {q 0 w \MPclippath\space W n}} \definespecial\dostopclipping {\pdfliteral{Q n}} % PDFcode %D \macros %D {dosetupinteraction} %D %D Nothing special is needed to enable \PDF\ commands and %D interaction. We stick with a message. \definespecial\dosetupinteraction {\showmessage\m!interactions{21}{pdftex}} %D \macros %D {doresetgotowhereever, %D dostartthisisrealpage,dostartthisislocation, %D dostartgotorealpage,dostartgotolocation,dostartgotoJS} %D %D The interactions macros are the core of this module. We %D support both page destinations and named ones. We don't %D need the \type{\stop}||alternatives. We also don't need %D to set the special that sets the real page number. \definespecial\doresetgotowhereever {\doPDFresetgotowhereever} \definespecial\dostartthisislocation{\doPDFstartthisislocation} %D When going to a location, we obey the time and space saving %D boolean \type{\ifusepagedestination}. Named destinations are %D stripped and made robust. This all happens in the macros %D called for. \definespecial\dostartgotolocation{\doPDFstartgotolocation} \definespecial\dostartgotorealpage{\doPDFstartgotorealpage} \definespecial\dostartgotoJS {\doPDFstartgotoJS} \let\PDFpagexyzspec\empty % pdftex does not accept spec %D \macros %D {doflushJSpreamble} %D %D It does not make sense to duplicate common \JAVASCRIPT\ %D functions, and therefore they can be predefined and must be %D output separately. Currently this special is not shared %D with the \ACROBAT\ one, simply because \DISTILLER\ does not %D yet support something \type{\pdfnames}. % \oneJSpreamblefalse % buggy in acrobat \definespecial\doflushJSpreamble#1% {\bgroup \let\compositeJScode\empty \def\docommand##1% {\edef\sanitizedJScode{\getJSpreamble{##1}}% \@EA\doPSsanitizeJScode\sanitizedJScode\to\sanitizedJScode \immediate\pdfobj {<< /S /JavaScript /JS (\sanitizedJScode) >>}% \edef\compositeJScode {\compositeJScode\space (##1) \PDFobjref\pdflastobj}}% \processcommalist[#1]\docommand \immediate\pdfobj{<< /Names [ \compositeJScode ] >>}% \pdfnames{/JavaScript \PDFobjref\pdflastobj}% \egroup} %D \macros %D {dostarthide,dostophide} %D %D Hiding parts of the document for printing is not yet %D supported by \PDF\ and therefore \PDFTEX. \definespecial\dostarthide{} \definespecial\dostophide {} %D \macros %D {dosetupscreen} %D %D Setting of the screen boundingbox involves some %D calculations. Here we also take care of (non) full screen %D startup. The dimensions are rounded. Because \PDFTEX\ and %D \ACROBAT\ handle setting the page dimensions in a %D different way, we do not share this special. \definespecial\dosetupscreen {\doPDFsetupscreen \pdfpageheight} \definespecial\dosetupartbox {\doPDFsetupartbox \pdfpageheight} \definespecial\dosetupcropbox {\doPDFsetupcropbox \pdfpageheight} \definespecial\dosetupbleedbox{\doPDFsetupbleedbox\pdfpageheight} \definespecial\dosetuptrimbox {\doPDFsetuptrimbox \pdfpageheight} %D \macros %D {dostartexecutecommand} %D %D \PDF\ viewers enable us to navigate using menus and shortcut %D keys. These navigational tools can also be accessed by using %D annotations. The next special takes care of inserting them. \definespecial\dostartexecutecommand{\doPDFstartexecutecommand} %D \macros %D {dosetupidentity} %D %D Documents can be tagged with an application accessible title %D and subtitle, the authorname, a date, the creator, keywords %D etc. For the moment \PDFTEX\ only supports the first three %D of these. \definespecial\dosetupidentity{\doPDFsetupidentity} %D \macros %D {dostartrunprogam} %D %D We can run a program form within a document, although this %D feature is rather weak, due to path problems and buggy %D argument passing. \definespecial\dostartrunprogram{\doPDFstartrunprogram} %D \macros %D {dostartgotoprofile, dostopgotoprofile, %D dobeginofprofile, doendofprofile} %D %D \CONTEXT\ user profiles and version control fall back on %D \PDF\ article threads. Unfortunately one cannot influence %D the view yet in an (for me) acceptable way. \definespecial\dostartgotoprofile{\doPDFstartgotoprofile} %D Some day, I'll reimplement threading in a useful way. %D Currently the viewers handle threads rather diffuse. \ifnum\pdftexversion>13 \definespecial\dobeginofprofile#1#2#3#4% {\setPDFdestination{#1}% \doifsomething\PDFdestination {\pdfthread width #2 height #3 attr {/Title (\PDFdestination)} % can be omitted name {\PDFdestination}}} \definespecial\doendofprofile% {} \fi %D \macros %D {doinsertbookmark} %D %D In \PDF\ bookmarks are the building blocks of a viewer %D provided sort of table of contents. \TEX\ has to provide %D the entry as well as the number of child entries. Strings %D need to be sanatized as good as possible to suit the default %D encoding. In \CONTEXT\ users can overrule this string by %D supplying an alternative one. Look at the macro called for %D to see how funny these bookmarks are defined. \definespecial\doinsertbookmark{\doPDFinsertbookmark} %D \macros %D {dostartobject,dostopobject,doinsertobject} %D %D Due to \PDF's object oriented character, we can include and %D reuse objects. These can be compared with \TEX's boxes. The %D \TEX\ counterpart is defined in the module \type{spec-dvi}. %D We don't use the dimensions here. %D %D The next solution is not that beautiful. Because objects are %D containers for whatever kind of content, graphics can be %D part of this content, and a graphic object can be part of %D the more general type. In practice this means that an ximage %D would be embedded in an xform, which in itself is not that %D big a problem, apart from a few bytes overhead. However, for %D reasons unknown to me alternative images must be pure %D ximages |<|indeed, somehow one cannot use a vector graphic %D as alternative|>| that are not embedded into forms, so this %D is why the object handler treats them different. This %D implies knowledge of the calling routines, especially the %D \type{FIG} trigger, that signals that we just embedded an %D image. Alternatively I could have introduced a dual object %D system, but the overhead in duplicate specials is currently %D not what we want. I'd rather implement a more mature %D object support system from scratch. \let\currentPDFresources\empty \let\PDFimageattributes \empty \let\PDFfigurereference \empty \let\PDFimagereference \empty \ifnum\pdftexversion>13 \definespecial\dostartobject#1#2#3#4#5% {\bgroup \setbox\nextbox\vbox\bgroup \def\dodostopobject {\egroup \ifx\PDFimagereference\empty % We also flush page resources, since shared % resources end up there; otherwise transparencies % won't work in xforms; some day I will optimize % this. \the\everyPDFxform \finalizeobjectbox\nextbox \immediate\pdfxform resources {\currentPDFresources\the\pdfpageresources}% \nextbox \global\let\currentPDFresources\empty \dosetobjectreference{#1}{#2}{\the\pdflastxform}% \else \dosetobjectreference{#1}{#2}{-\PDFimagereference}% \global\let\PDFimagereference\empty \fi}} \definespecial\dostopobject {\dodostopobject \egroup} \definespecial\doresetobjects {\global\let\PDFimagereference\empty} \definespecial\doinsertobject#1#2% {\bgroup \doifobjectreferencefoundelse{#1}{#2} {\dogetobjectreference{#1}{#2}\PDFobjectreference \ifnum\PDFobjectreference<0 \@EA\@EA\@EA\pdfrefximage\@EA\gobbleoneargument\PDFobjectreference \else \pdfrefxform\PDFobjectreference \fi}% {}% \egroup} \else \definespecial\dostartobject#1#2#3#4#5% {\bgroup \setbox\nextbox\vbox\bgroup \def\dodostopobject {\egroup \the\everyPDFxform \pdfform\nextbox \dosetobjectreference{#1}{#2}{\the\pdflastform}}} \definespecial\dostopobject {\dodostopobject \egroup} \definespecial\doinsertobject#1#2% {\bgroup \dogetobjectreference{#1}{#2}\PDFobjectreference \pdfrefform\PDFobjectreference \egroup} \fi \appendtoksonce \collectPDFresources \global\let\currentPDFresources\collectedPDFresources \to \everyPDFxform %D \macros %D {dosetpagetransition} %D %D Page transitions only make sence in presentations. They are %D passed as raw \PDF\ code to the page object. Take a look %D at the implementation to get an impression of the rubish %D passed on. \definespecial\dosetpagetransition{\doPDFsetpagetransition} %D The expansion is needed because else the \type{\pdfpageattr} %D token list flushes an unexpanded \type{\csname}. The %D \type{\global} is needed because the assignment can take %D place deeply buried (for instance in the \type{\shipout} %D box. %D \macros %D {doinsertcomment, doflushcomments} %D %D Text annotation, or comments, are provided too: \definespecial\doinsertcomment{\doPDFinsertcomment} \definespecial\doflushcomments{\doPDFflushcomments} %D \macros %D {dopresetlinefield,dopresettextfield, %D dopresetchoicefield,dopresetpopupfield,dopresetcombofield, %D dopresetpushfield,dopresetcheckfield, %D dopresetradiofield,dopresetradiorecord} %D %D \PDF\ offers extensive field support. The next bunch of %D definitions map the specials. \definespecial\dopresetlinefield {\doFDFpresetlinefield} \definespecial\dopresettextfield {\doFDFpresettextfield} \definespecial\dopresetchoicefield{\doFDFpresetchoicefield} \definespecial\dopresetpopupfield {\doFDFpresetpopupfield} \definespecial\dopresetcombofield {\doFDFpresetcombofield} \definespecial\dopresetpushfield {\doFDFpresetpushfield} \definespecial\dopresetcheckfield {\doFDFpresetcheckfield} \definespecial\dopresetradiofield {\doFDFpresetradiofield} \definespecial\dopresetradiorecord{\doFDFpresetradiorecord} %D \macros %D {dodefinefieldset,dogetfieldset,doiffieldset} %D %D Field sets, needed for reset and submit handling, are %D taken care of by: \definespecial\dodefinefieldset{\doFDFdefinefieldset} \definespecial\dogetfieldset {\doFDFgetfieldset} \definespecial\doiffieldset {\doFDFiffieldset} %D \macros %D {doregistercalculationset} %D %D The calculation order is defined using: \definespecial\doregistercalculationset{\doFDFregistercalculationset} %D \macros %D {doPDFdestination} %D %D Finally we implement some low level macros to deal with %D flushing \PDF\ code. First we handle the named destinations. \def\doPDFdestination#1% {\pdfdest name {#1}\PDFpageviewkey} %D \macros %D {doPDFaction,doPDFannotation,ifsharePDFactions} %D %D Next we handle annotations. All link annotations are %D implemented using the action dictionary. This enables us to %D use multiple actions. The second macro is for instance %D used for movie inclusion. \newif\ifsharePDFactions \sharePDFactionstrue % hm, due to some stupid optimization this feature has been % disabled for some time, watch out \lastPDFaction is to be % persistent \ifnum\pdftexversion>13 \def\doPDFaction#1#2#3% {\xdef\lastPDFcontent{#3}% \ifcollectreferenceactions \global\let\lastPDFaction\lastPDFcontent \else \ifsharePDFactions \ifcase\similarreference\relax \xdef\lastPDFaction{<<\lastPDFcontent>>}% \or \immediate\pdfobj{<<\lastPDFcontent>>}% \xdef\lastPDFaction{\PDFobjref\pdflastobj}% \else % leave \lastPDFaction untouched \fi \else \xdef\lastPDFaction{<<\lastPDFcontent>>}% \fi \pdfannot width #1 height #2 depth \zeropoint {/Subtype /Link /Border [0 0 0] \ifhighlighthyperlinks \else /H /N \fi /A \lastPDFaction}% \fi} \else \def\doPDFaction#1#2#3% {\ifcollectreferenceactions \xdef\lastPDFaction{#3}% \else \ifsharePDFactions \ifcase\similarreference\relax \xdef\lastPDFaction{<<#3>>}% \or \immediate\pdfobj{<<#3>>}% \xdef\lastPDFaction{\PDFobjref\pdflastobj}% \else % leave \lastPDFaction untouched \fi \else \xdef\lastPDFaction{<<#3>>}% \fi \pdfannotlink % could be \pdfannot if not the - problem was there width #1 height #2 depth \zeropoint user {/Subtype /Link /Border [0 0 0] \ifhighlighthyperlinks \else /H /N \fi /A \lastPDFaction}% \pdfendlink \fi} \fi % pdftex and viewers give problems with this one (printing forms) % %\def\doPDFannotation#1#2#3% % {\pdfannot width #1sp height -#2sp depth \zeropoint{#3}} % % This is corrected in version 14. When this version is wide % spread, this will be cleaned up. \ifnum\pdftexversion>13 \def\doPDFannotation#1#2#3% {\pdfannot width #1 height #2 depth \zeropoint{#3}} \else \def\doPDFannotation#1#2#3% {\hbox{\raise#2\hbox{\pdfannot width #1 height #2 depth \zeropoint{#3}}}} \fi %D \macros %D {doPDFannotationobject,doPDFactionobject} %D %D For field support we need annotation objects. Although in %D many cases we can do without indirect references (and use %D the last annotation object number directly), we take the %D save route. \def\doPDFannotationobject#1#2#3#4#5% {\doPDFannotation{#3}{#4}{#5}% \dosetobjectreference{#1}{#2}{\the\pdflastannot}} \def\doPDFactionobject#1#2#3#4#5% {\doPDFaction{#3}{#4}{#5}% \dosetobjectreference{#1}{#2}{\the\pdflastannot}} %D \macros %D {doPDFaddtocatalog,doPDFaddtoinfo, %D doPDFpageattribute,doPDFpagesattribute} %D %D Next some simple ones. Watch the global directive and the %D expansion in the page attribute macro. \def\doPDFaddtocatalog {\pdfcatalog} \def\doPDFaddtoinfo {\pdfinfo} \def\doPDFpageattribute#1% {\expanded{\global\pdfpageattr{#1\the\pdfpageattr}}} \def\doPDFpageresource#1% {\expanded{\global\pdfpageresources{#1\the\pdfpageresources}}} \def\doPDFpagesattribute#1% {\expanded{\global\pdfpagesattr{#1\the\pdfpagesattr}}} \def\doPDFresetpageattributes {\global\pdfpageattr\emptytoks} \def\doPDFresetpageresources {\global\pdfpageresources\emptytoks} %D \macros %D {doPDFbookmark} %D %D Well, isn't the next one ugly? Thanks to the \PDF\ %D standard. \def\doPDFbookmark#1#2#3#4#5% {\doPDFgetpagereference{#4}\PDFobjectreference \pdfoutline user {<</S /GoTo /D [\PDFobjectreference\space\PDFpageviewwrd]>>}% \ifcase#2 \else count \ifcase#5-\fi#2 \fi {\ifPDFunicode<#3>\else#3\fi}} %D \macros %D {doPDFdictionaryobject,doPDFarrayobject} %D %D Where \PDFTEX\ has only one object primitive, optionally a %D stream one, \ACROBAT\ has several operators. \def\doPDFdictionaryobject#1#2#3% {\flushatshipout {\immediate\pdfobj{<< #3 >>}% \dosetobjectreference{#1}{#2}{\the\pdflastobj}}} \def\doPDFarrayobject#1#2#3% {\flushatshipout {\immediate\pdfobj{[ #3 ]}% \dosetobjectreference{#1}{#2}{\the\pdflastobj}}} % tricky .. too many xforms now % % \def\doreservePDFobject#1#2% % {\pdfobj reserveobjnum{}% % \driverreferenced\dosetobjectreference{#1}{#2}{\the\pdflastobj}} % % \def\doPDFreserveddictionaryobject#1#2#3% % {\doPDFgetobjectnumber{#1}{#2}\PDFobjectnumber % \immediate\pdfobj useobjnum \PDFobjectnumber {<< #3 >>}} % % \def\doPDFreservedarrayobject#1#2#3% % {\doPDFgetobjectnumber{#1}{#2}\PDFobjectnumber % \immediate\pdfobj useobjnum \PDFobjectnumber {[ #3 ]}} % \doreservePDFobject{FDF}{docuextgstates} % \doreservePDFobject{FDF}{colorspaces} % \doreservePDFobject{FDF}{docushades} %D \macros %D {defaultobjectreference,doPDFgetobjectreference} %D %D Because in \PDFTEX\ we have to construct the object %D references \type{N 0 R}, we can default to the non existing %D zero object number. \def\defaultobjectreference#1#2% {0} \def\doPDFgetobjectreference#1#2#3% {\dogetobjectreference{#1}{#2}#3% \edef#3{\ifx#3\empty null\else\PDFobjref{#3}\fi}} \def\doPDFgetobjectnumber#1#2#3% {\dogetobjectreference{#1}{#2}#3% \edef#3{\ifx#3\empty 0\else#3\fi}} % \def\doPDFgetobjectpage #1#2#3{..} % \def\doPDFgetobjectpagereference#1#2#3{..} \ifx\pdfpageref\undefined \def\doPDFgetpagereference % number macro {\installprogram{texutil --filter \jobname}% \gdef\doPDFgetpagereference##1{\doPDFgetobjectreference{PDFP}{\number##1}}% {##2} \doPDFgetpagereference} \else \def\doPDFgetpagereference#1#2% number macro {\edef#2{\ifnum#1>\zerocount\PDFobjref{\pdfpageref#1}\else null\fi}} \fi %D \macros %D {initializePDFnegative,initializePDFoverprint} %D %D Here follow some rather obscure macros. They will only %D come into action when one wants negated output. %D Todo: move code to fdf module \def\initializePDFnegative {\immediate\pdfobj stream attr {/FunctionType 4 /Range [0 1] /Domain [0 1]} {{1 exch sub}}% \immediate\pdfobj{<</Type /ExtGState /TR \PDFobjref\pdflastobj>>}% \appendtoPDFdocumentextgstates{/GSnegative \PDFobjref\pdflastobj}% \immediate\pdfobj{<</Type /ExtGState /TR /Identity>>}% \appendtoPDFdocumentextgstates{/GSpositive \PDFobjref\pdflastobj}% \global\let\initializePDFnegative\relax} \def\initializePDFoverprint {\immediate\pdfobj{<</Type /ExtGState /OP false /OPM 0>>}% /op defaults to /OP \appendtoPDFdocumentextgstates{/GSknockout \PDFobjref\pdflastobj}% \immediate\pdfobj{<</Type /ExtGState /OP true /OPM 1>>}% /op defaults to /OP \edef\PDFobjectreferenceB{\the\pdflastobj}% \appendtoPDFdocumentextgstates{/GSoverprint \PDFobjref\pdflastobj}% \global\let\initializePDFoverprint\relax} %D File embedding. Storing the stream identifier is needed %D to get access to the number. When typeset, the user can %D feed this number to \type {pdftosrc} and filter the %D file from the \PDF\ file. \let\PDFlaststreamobject \s!unknown %def\PDFlaststreamreference{0 0 R} \def\doPDFfilestreamobject#1#2#3#4% {\immediate\pdfobj stream file{#4}% \edef\PDFlaststreamobject{\the\pdflastobj}% \dosetobjectreference{PDFFS}{#2}{\PDFlaststreamobject}% \doPDFdictionaryobject{#1}{#2}{/Type /Filespec /F (#3) /EF <</F \PDFobjref\PDFlaststreamobject>>}} \def\doPDFgetfilestreamreference#1#2% {\doPDFgetobjectreference{PDFFS}{#1}#2} \def\doPDFfilestreamidentifier#1% {\doifsomething{#1} {\doPDFgetfilestreamreference{#1}\PDFobjectreference \@EA\beforesplitstring\PDFobjectreference\at{ }\to\PDFlaststreamobject \PDFlaststreamobject}} % %D We can set \METAPOST\ prologues to~1: \def\MPprologues{1} %D Experimental: \definespecial\dostartfonteffect{\doPDFstartfonteffect} \definespecial\dostopfonteffect {\doPDFstopfonteffect} %D Some MP stuff: \let\handleMPfshow\dohandleMPfshow % default anyway \ifnum\pdftexversion<14 \def\setMPPDFobject#1#2% resources boxnumber {\def\getMPPDFobject{\box#2}} \else \def\setMPPDFobject#1#2% resources boxnumber {\the\everyPDFxform \finalizeobjectbox{#2}% \immediate\pdfxform resources{#1}#2% \edef\getMPPDFobject{\noexpand\pdfrefxform\the\pdflastxform}} \fi \let\getMPPDFobject\relax \definespecial\doinsertMPfile#1% {\doiffileelse{./#1}{\includeMPasPDF{./#1}}{\message{[MP #1]}}} %D Now we can finish this module. \stopspecials \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-inf.lua��������������������������������0000644�0001750�0001750�00000013056�12134352503�024102� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['trac-inf'] = { version = 1.001, comment = "companion to trac-inf.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- As we want to protect the global tables, we no longer store the timing -- in the tables themselves but in a hidden timers table so that we don't -- get warnings about assignments. This is more efficient than using rawset -- and rawget. local type, tonumber = type, tonumber local format, lower = string.format, string.lower local concat = table.concat local clock = os.gettimeofday or os.clock -- should go in environment statistics = statistics or { } local statistics = statistics statistics.enable = true statistics.threshold = 0.01 local statusinfo, n, registered, timers = { }, 0, { }, { } table.setmetatableindex(timers,function(t,k) local v = { timing = 0, loadtime = 0 } t[k] = v return v end) local function hastiming(instance) return instance and timers[instance] end local function resettiming(instance) timers[instance or "notimer"] = { timing = 0, loadtime = 0 } end local function starttiming(instance) local timer = timers[instance or "notimer"] local it = timer.timing or 0 if it == 0 then timer.starttime = clock() if not timer.loadtime then timer.loadtime = 0 end end timer.timing = it + 1 end local function stoptiming(instance) local timer = timers[instance or "notimer"] local it = timer.timing if it > 1 then timer.timing = it - 1 else local starttime = timer.starttime if starttime then local stoptime = clock() local loadtime = stoptime - starttime timer.stoptime = stoptime timer.loadtime = timer.loadtime + loadtime timer.timing = 0 return loadtime end end return 0 end local function elapsed(instance) if type(instance) == "number" then return instance or 0 else local timer = timers[instance or "notimer"] return timer and timer.loadtime or 0 end end local function elapsedtime(instance) return format("%0.3f",elapsed(instance)) end local function elapsedindeed(instance) return elapsed(instance) > statistics.threshold end local function elapsedseconds(instance,rest) -- returns nil if 0 seconds if elapsedindeed(instance) then return format("%0.3f seconds %s", elapsed(instance),rest or "") end end statistics.hastiming = hastiming statistics.resettiming = resettiming statistics.starttiming = starttiming statistics.stoptiming = stoptiming statistics.elapsed = elapsed statistics.elapsedtime = elapsedtime statistics.elapsedindeed = elapsedindeed statistics.elapsedseconds = elapsedseconds -- general function .. we might split this module function statistics.register(tag,fnc) if statistics.enable and type(fnc) == "function" then local rt = registered[tag] or (#statusinfo + 1) statusinfo[rt] = { tag, fnc } registered[tag] = rt if #tag > n then n = #tag end end end local report = logs.reporter("mkiv lua stats") function statistics.show() if statistics.enable then -- this code will move local register = statistics.register register("luatex banner", function() return lower(status.banner) end) register("control sequences", function() return format("%s of %s + %s", status.cs_count, status.hash_size,status.hash_extra) end) register("callbacks", function() local total, indirect = status.callbacks or 0, status.indirect_callbacks or 0 return format("%s direct, %s indirect, %s total", total-indirect, indirect, total) end) if jit then local status = { jit.status() } if status[1] then register("luajit status", function() return concat(status," ",2) end) end end -- so far -- collectgarbage("collect") register("current memory usage",statistics.memused) register("runtime",statistics.runtime) logs.newline() -- initial newline for i=1,#statusinfo do local s = statusinfo[i] local r = s[2]() if r then report("%s: %s",s[1],r) end end -- logs.newline() -- final newline statistics.enable = false end end function statistics.memused() -- no math.round yet -) local round = math.round or math.floor return format("%s MB (ctx: %s MB)",round(collectgarbage("count")/1000), round(status.luastate_bytes/1000000)) end starttiming(statistics) function statistics.formatruntime(runtime) -- indirect so it can be overloaded and return format("%s seconds", runtime) -- indeed that happens in cure-uti.lua end function statistics.runtime() stoptiming(statistics) return statistics.formatruntime(elapsedtime(statistics)) end local report = logs.reporter("system") function statistics.timed(action) starttiming("run") action() stoptiming("run") report("total runtime: %s",elapsedtime("run")) end -- where, not really the best spot for this: commands = commands or { } function commands.resettimer(name) resettiming(name or "whatever") starttiming(name or "whatever") end function commands.elapsedtime(name) stoptiming(name or "whatever") context(elapsedtime(name or "whatever")) end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-sta.lua��������������������������������0000644�0001750�0001750�00000013107�11571377075�024145� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['luat-sta'] = { version = 1.001, author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this code is used in the updater local gmatch, match = string.gmatch, string.match local type = type states = states or { } local states = states states.data = states.data or { } local data = states.data states.hash = states.hash or { } local hash = states.hash states.tag = states.tag or "" states.filename = states.filename or "" function states.save(filename,tag) tag = tag or states.tag filename = file.addsuffix(filename or states.filename,'lus') io.savedata(filename, "-- generator : luat-sta.lua\n" .. "-- state tag : " .. tag .. "\n\n" .. table.serialize(data[tag or states.tag] or {},true) ) end function states.load(filename,tag) states.filename = filename states.tag = tag or "whatever" states.filename = file.addsuffix(states.filename,'lus') data[states.tag], hash[states.tag] = (io.exists(filename) and dofile(filename)) or { }, { } end local function set_by_tag(tag,key,value,default,persistent) local d, h = data[tag], hash[tag] if d then if type(d) == "table" then local dkey, hkey = key, key local pre, post = match(key,"(.+)%.([^%.]+)$") if pre and post then for k in gmatch(pre,"[^%.]+") do local dk = d[k] if not dk then dk = { } d[k] = dk elseif type(dk) == "string" then -- invalid table, unable to upgrade structure -- hope for the best or delete the state file break end d = dk end dkey, hkey = post, key end if value == nil then value = default elseif value == false then -- special case elseif persistent then value = value or d[dkey] or default else value = value or default end d[dkey], h[hkey] = value, value elseif type(d) == "string" then -- weird data[tag], hash[tag] = value, value end end end local function get_by_tag(tag,key,default) local h = hash[tag] if h and h[key] then return h[key] else local d = data[tag] if d then for k in gmatch(key,"[^%.]+") do local dk = d[k] if dk ~= nil then d = dk else return default end end if d == false then return false else return d or default end end end end states.set_by_tag = set_by_tag states.get_by_tag = get_by_tag function states.set(key,value,default,persistent) set_by_tag(states.tag,key,value,default,persistent) end function states.get(key,default) return get_by_tag(states.tag,key,default) end --~ data.update = { --~ ["version"] = { --~ ["major"] = 0, --~ ["minor"] = 1, --~ }, --~ ["rsync"] = { --~ ["server"] = "contextgarden.net", --~ ["module"] = "minimals", --~ ["repository"] = "current", --~ ["flags"] = "-rpztlv --stats", --~ }, --~ ["tasks"] = { --~ ["update"] = true, --~ ["make"] = true, --~ ["delete"] = false, --~ }, --~ ["platform"] = { --~ ["host"] = true, --~ ["other"] = { --~ ["mswin"] = false, --~ ["linux"] = false, --~ ["linux-64"] = false, --~ ["osx-intel"] = false, --~ ["osx-ppc"] = false, --~ ["sun"] = false, --~ }, --~ }, --~ ["context"] = { --~ ["available"] = {"current", "beta", "alpha", "experimental"}, --~ ["selected"] = "current", --~ }, --~ ["formats"] = { --~ ["cont-en"] = true, --~ ["cont-nl"] = true, --~ ["cont-de"] = false, --~ ["cont-cz"] = false, --~ ["cont-fr"] = false, --~ ["cont-ro"] = false, --~ }, --~ ["engine"] = { --~ ["pdftex"] = { --~ ["install"] = true, --~ ["formats"] = { --~ ["pdftex"] = true, --~ }, --~ }, --~ ["luatex"] = { --~ ["install"] = true, --~ ["formats"] = { --~ }, --~ }, --~ ["xetex"] = { --~ ["install"] = true, --~ ["formats"] = { --~ ["xetex"] = false, --~ }, --~ }, --~ ["metapost"] = { --~ ["install"] = true, --~ ["formats"] = { --~ ["mpost"] = true, --~ ["metafun"] = true, --~ }, --~ }, --~ }, --~ ["fonts"] = { --~ }, --~ ["doc"] = { --~ }, --~ ["modules"] = { --~ ["f-urwgaramond"] = false, --~ ["f-urwgothic"] = false, --~ ["t-bnf"] = false, --~ ["t-chromato"] = false, --~ ["t-cmscbf"] = false, --~ ["t-cmttbf"] = false, --~ ["t-construction-plan"] = false, --~ ["t-degrade"] = false, --~ ["t-french"] = false, --~ ["t-lettrine"] = false, --~ ["t-lilypond"] = false, --~ ["t-mathsets"] = false, --~ ["t-tikz"] = false, --~ ["t-typearea"] = false, --~ ["t-vim"] = false, --~ }, --~ } --~ states.save("teststate", "update") --~ states.load("teststate", "update") --~ print(states.get_by_tag("update","rsync.server","unknown")) --~ states.set_by_tag("update","rsync.server","oeps") --~ print(states.get_by_tag("update","rsync.server","unknown")) --~ states.save("teststate", "update") --~ states.load("teststate", "update") --~ print(states.get_by_tag("update","rsync.server","unknown")) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-ini.mkii�������������������������������0000644�0001750�0001750�00000016154�11754241457�024314� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=symb-ini, %D version=1998.07.20, %D title=\CONTEXT\ Symbol Libraries, %D subtitle=Basic Symbols Commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The macros described here used to be part of the \type %D {core-con} module. I decided to move them here when %D symbolsets saw the light. Let their light shine. \writestatus{loading}{ConTeXt Symbol Libraries / Initialization} \unprotect %D \macros %D {definesymbol, symbol} %D %D Converting numbers or levels into a character, romannumeral, %D symbol or something else, is supported by many \CONTEXT\ %D commands. Therefore we need a mechanism for linking such %D numbers to their counterparts. %D %D First we take care of symbols. These are for instance used %D in enumerations and itemizations. We have: %D %D \showsetup{definesymbol} %D \showsetup{symbol} %D %D Symbols are simply linked to a tag. Such tags can be numbers %D or strings. %D %D \starttyping %D \definesymbol [1] [$\bullet$] %D \definesymbol [level 5] [$\star$] %D \stoptyping % ss:tag -> symbol % ss:set:tag -> symbol out of set % sstag -> list of symbols in set \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}% \doifsomething{#1}{\addvalue{\??ss*#1}{#2}}% \else \setvalue{\??ss:\currentsymboldef:#1}{#2}% \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\symbolset#1{\executeifdefined{\??ss*#1}\empty} % 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, %D since now we simplified things a bit, because the low %D level macros have been sped up now and then. \unexpanded\def\symbol % This one always gobbles spaces, {\dodoubleempty\dosymbol} % so never change it again! \newif\ifnosymbol \newtoks\everysymbol \def\dodosymbol#1#2% \relax's prevent lookahead problems {\nosymbolfalse{\the\everysymbol\csname\??ss:#1:#2\endcsname\relax}\relax} \def\directsymbol#1#2% no \relax, there can be an argument, see lists {\executeifdefined{\??ss:#1:#2}\firstofoneargument} % We support both: % % Test test \symbol[whatever]\ test \symbol[whatever]. % Test test \symbol{whatever} test \symbol{whatever}. \def\dosymbol % so we also handle \symbol{name} {\iffirstargument % which is nicer with following spaces \expandafter\donormalsymbol \else \expandafter\dospecialsymbol \fi} \def\dospecialsymbol[#1][#2]#3% {\firstargumenttrue \secondargumentfalse \donormalsymbol[#3][]} \def\donormalsymbol[#1][#2]% {\nosymboltrue \ifsecondargument \edef\currentsymbol{#2}% \doifinsymbolset{#1}{#2}{\dodosymbol{#1}{#2}}% \else \edef\currentsymbol{#1}% \fi \ifnosymbol \the\symbolsetups \ifnosymbol \redosymbol\currentsymbol \fi \fi} \def\fetchsymbol#1% {\ifnosymbol \doifinsymbolset{#1}\currentsymbol{\dodosymbol{#1}\currentsymbol}% \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 %D To simplify defining figure symbols, we offer: %D %D \showsetup{definefiguresymbol} %D %D By default, such symbols scale along the current bodyfont %D size or running font size (which is better). \def\defaultsymbolfactor{10} \def\defaultsymbolheight{1.25ex} \def\figuresymbol {\dodoubleempty\dofiguresymbol} \ifx\externalfigure \undefined \def\externalfigure[#1][#2]{#1} \fi \ifx\resetexternalfigures\undefined \let\resetexternalfigures\relax \fi \def\dofiguresymbol[#1][% #2]% {\externalfigure[#1][\c!reset=\v!yes,\c!symbol=\v!yes,\c!height=\defaultsymbolheight,}% #2]} \appendtoks \resetexternalfigures \to \everysymbol \def\definefiguresymbol {\dotripleempty\dodefinefiguresymbol} \def\dodefinefiguresymbol[#1][#2][#3]% {\ifsecondargument \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 %D A handy private one: % a bit messy \def\xfetchsymbol#1% {\ifnosymbol \doifinsymbolset{#1}\currentsymbol\nosymbolfalse \fi} \def\xredosymbol#1% {\doifinsymbolset\empty\currentsymbol\nosymbolfalse} \def\doifsymboldefinedelse#1% {\bgroup \edef\currentsymbol{#1}% \let\fetchsymbol\xfetchsymbol \nosymboltrue \the\symbolsetups \ifnosymbol \xredosymbol\currentsymbol \ifnosymbol \egroup\@EAEAEA\secondoftwoarguments \else \egroup\@EAEAEA\firstoftwoarguments \fi \else \egroup\@EA\firstoftwoarguments \fi} %D \macros %D {setupsymbolset,startsymbolset} %D %D From these macro definitions one can deduce that symbols can %D be grouped in symbol sets: %D %D \starttyping %D \startsymbolset [navigation 1] %D \definefiguresymbol [Next] [mp-symb.1] %D \definefiguresymbol [Prev] [mp-symb.2] %D \stopsymbolset %D \stoptyping %D %D Such a symbol can be typeset with: %D %D \starttyping %D \setupsymbolset[navigation 1]\symbol[Next] %D \stoptyping %D %D or simply: %D %D \starttyping %D \symbol[navigation 1][Next] %D \stoptyping %D %D Formally: %D %D \showsetup{setupsymbolset} %D \showsetup{startsymbolset} \let\currentsymboldef\empty \def\startsymbolset[#1]% {\def\currentsymboldef{#1}} \def\stopsymbolset {\let\currentsymboldef\empty} \newtoks\symbolsetups \def\setupsymbolset[#1]% {\prependtoksonce\fetchsymbol{#1}\to\symbolsetups} \def\resetsymbolset {\symbolsetups\emptytoks} \def\forcesymbolset[#1]% {\symbolsetups{\fetchsymbol{#1}}} %D \macros %D {showsymbolset} %D %D \showsetup{showsymbolset} \fetchruntimecommand \showsymbolset {\f!symbolprefix\s!run} %D \macros %D {usesymbols} %D %D \showsetup{usesymbols} \def\dousesymbols#1% {\startreadingfile \readsysfile{\truefilename{\f!symbolprefix#1}.\mksuffix} {\showmessage\m!symbols1{#1}} {\readsysfile{\truefilename{\f!symbolprefix#1}} {\showmessage\m!symbols1{#1}} \donothing}% \stopreadingfile} \def\usesymbols[#1]% {\processcommalist[#1]\dousesymbols} %D As longs as symbols are linked to levels or numbers, we can %D also use the conversion mechanism, but in for instance the %D itemization macros, we prefer symbols because they can more %D easier be (partially) redefined. \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/back-ini.lua��������������������������������0000644�0001750�0001750�00000006073�12130411274�024052� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['back-ini'] = { version = 1.001, comment = "companion to back-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, type = next, type local format = string.format local sind, cosd = math.sind, math.cosd backends = backends or { } local backends = backends local trace_backend = false trackers.register("backend.initializers", function(v) trace_finalizers = v end) local report_backend = logs.reporter("backend","initializing") local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local function nothing() return nil end backends.nothing = nothing local nodeinjections = { } local codeinjections = { } local registrations = { } local tables = allocate() local function donothing(t,k) t[k] = nothing return nothing end setmetatableindex(nodeinjections, donothing) setmetatableindex(codeinjections, donothing) setmetatableindex(registrations, donothing) local defaults = { nodeinjections = nodeinjections, codeinjections = codeinjections, registrations = registrations, tables = tables, } backends.defaults = defaults backends.nodeinjections = { } setmetatableindex(backends.nodeinjections, nodeinjections) backends.codeinjections = { } setmetatableindex(backends.codeinjections, codeinjections) backends.registrations = { } setmetatableindex(backends.registrations, registrations) backends.tables = { } setmetatableindex(backends.tables, tables) backends.current = "unknown" function backends.install(what) if type(what) == "string" then local backend = backends[what] if backend then if trace_backend then if backend.comment then report_backend("initializing backend %a, %a",what,backend.comment) else report_backend("initializing backend %a",what) end end backends.current = what for category, default in next, defaults do local target, plugin = backends[category], backend[category] setmetatableindex(plugin, default) setmetatableindex(target, plugin) end elseif trace_backend then report_backend("no backend named %a",what) end end end statistics.register("used backend", function() local bc = backends.current if bc ~= "unknown" then return format("%s (%s)",bc,backends[bc].comment or "no comment") else return nil end end) local comment = { "comment", "" } tables.vfspecials = allocate { red = comment, green = comment, blue = comment, black = comment, startslant = comment, stopslant = comment, } -- experimental code -- function commands.pdfrotation(a) -- somewhat weird here local s, c = sind(a), cosd(a) context("%0.6f %0.6f %0.6f %0.6f",c,s,-s,c) end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-fen.mkiv�������������������������������0000644�0001750�0001750�00000006447�11757142363�024271� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=pack-fen, %D version=2011.07.21, %D title=\CONTEXT\ Packaging Macros, %D subtitle= Fences for Ruled Content, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Fences for Ruled Content} %D \startbuffer %D \useMPlibrary[meta-imp-hooks.mkiv] %D %D \framed[frame=off,bottomframe=righthook]{Bottom right hook} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection \unprotect \def\installleftframerenderer#1#2% {\setvalue{\??framedleft\v!on#1}{\whateverleftframe{#2}}% \expandafter\let\csname\??framedleft\v!off#1\expandafter\endcsname\csname\??framedleft\v!on#1\endcsname} \def\installrightframerenderer#1#2% {\setvalue{\??framedright\v!on#1}{\whateverrightframe{#2}}% \expandafter\let\csname\??framedright\v!off#1\expandafter\endcsname\csname\??framedright\v!on#1\endcsname} \def\installtopframerenderer#1#2% {\setvalue{\??framedtop\v!on#1}{\whatevertopframe{#2}}% \expandafter\let\csname\??framedtop\v!off#1\expandafter\endcsname\csname\??framedtop\v!on#1\endcsname} \def\installbottomframerenderer#1#2% {\setvalue{\??framedbottom\v!on#1}{\whateverbottomframe{#2}}% \expandafter\let\csname\??framedbottom\v!off#1\expandafter\endcsname\csname\??framedbottom\v!on#1\endcsname} \ifdefined \pack_framed_overlay_initialize_indeed \let\setinstalledframedimensions\pack_framed_overlay_initialize_indeed \else \def\setinstalledframedimensions {\edef\overlaywidth {\the\frameddimenwd\space}% \edef\overlayheight {\the\dimexpr\frameddimenht+\frameddimendp\relax\space}% \edef\overlaydepth {\the\frameddimendp\space}% \edef\overlaycolor {\framedparameter\c!backgroundcolor}% \edef\overlaylinecolor{\framedparameter\c!framecolor}% \edef\overlaylinewidth{\the\ruledlinewidth}} \fi \newbox\b_framed_rendered \def\whateverleftframe#1% {\setinstalledframedimensions \setbox\b_framed_rendered\vbox to \overlayheight{\vss#1\vss}% \setbox\b_framed_rendered\hbox to \zeropoint{\box\b_framed_rendered\hss}% \ht\b_framed_rendered\zeropoint \dp\b_framed_rendered\zeropoint \box\b_framed_rendered} \def\whateverrightframe#1% {\setinstalledframedimensions \setbox\b_framed_rendered\vbox to \overlayheight{\vss#1\vss}% \setbox\b_framed_rendered\hbox to \zeropoint{\hss\box\b_framed_rendered}% \ht\b_framed_rendered\zeropoint \dp\b_framed_rendered\zeropoint \box\b_framed_rendered} \def\whatevertopframe#1% {\setinstalledframedimensions \setbox\b_framed_rendered\hbox to \overlaywidth{\hss#1\hss}% \setbox\b_framed_rendered\vbox to \zeropoint{\box\b_framed_rendered\vss}% \ht\b_framed_rendered\zeropoint \dp\b_framed_rendered\zeropoint \box\b_framed_rendered \nointerlineskip} \def\whateverbottomframe#1% {\setinstalledframedimensions \setbox\b_framed_rendered\hbox to \overlaywidth{\hss#1\hss}% \setbox\b_framed_rendered\vbox to \zeropoint{\vss\box\b_framed_rendered}% \ht\b_framed_rendered\zeropoint \dp\b_framed_rendered\zeropoint \box\b_framed_rendered} \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-utf.mkii�������������������������������0000644�0001750�0001750�00000001156�11754241457�024320� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-utf, %D version=2002.06.24, %D title=\CONTEXT\ XML Macros, %D subtitle=UTF, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / UTF} %D This filter is kind of obsolete, since \UTF\ is not %D limited to \XML. So, here we only enable \UTF\ support. \chardef\XMLtokensreduction\plustwo \enableregime[utf] \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/m-narrowtt.tex������������������������������0000644�0001750�0001750�00000001652�11754241457�024543� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=m-narrowtt, %D version=2005.09.08, %D title=\CONTEXT\ Modules, %D subtitle=Narrow Verbatim, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Test file %D %D \starttyping %D \startTEX %D \usemodule[narrowtt] %D \starttext %D \starttyping %D Test test test. %D \stoptyping %D test \type {test} test \type{test} test %D \starttyping %D Test test test. %D \stoptyping %D \stoptext %D \stopTEX \unprotect \definetypeface [narrowtt] [tt] [mono] [modern-condensed] [default] [encoding=\defaultencoding] \definetyping[n\v!typing] \setuptyping[n\v!typing][style=\narrowtt] \definetype [n\v!type] \setuptype [n\v!type] [style=\narrowtt] \protect \endinput ��������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fnt-02.mkii�������������������������������0000644�0001750�0001750�00000010266�11571377075�024034� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% output=pdftex modes=demo % nice example: % % \usemodule[s-fnt-02] % % \usetypescriptfile[type-ghz.tex] % % \usetypescript [sans] [optima,optima-nova] [texnansi] % % \setvariables % [glyphs] % [name-1=OptimaLT, % name-2=OptimaNovaLT-Regular] % % \starttext % % \setups[show-glyphs] % % \stoptext % % see end, for other example (or run texexec s-fnt-02 --mode=demo) \setvariables [glyphs] [frame=on, name-1=cmr10, name-2=cmtt10, map-1=, map-2=] \setuppapersize[S4][S4] \setupcolors[state=start] \setuplayout[page] \definecolor[Gray] [s=.2] \definecolor[ColorNone][s=1,t=.5,a=1] \definecolor[ColorOne] [r=1,t=.5,a=1] \definecolor[ColorTwo] [g=1,t=.5,a=1] \definecolor[BackOne] [b=1,t=.5,a=1] \definecolor[BackTwo] [r=1,g=1,t=.5,a=1] \setupbackgrounds [page] [background=color, backgroundcolor=Gray] \startsetups[show-glyphs] \doifnothing{\getvariable{glyphs}{name-1}}{\endinput} \doifnothing{\getvariable{glyphs}{name-2}}{\endinput} \doifsomething{\getvariable{glyphs}{map-1}}{\loadmapfile[\getvariable{glyphs}{map-1}]} \doifsomething{\getvariable{glyphs}{map-2}}{\loadmapfile[\getvariable{glyphs}{map-2}]} \definefont[FontOne][\getvariable{glyphs}{name-1} at 280pt] \definefont[FontTwo][\getvariable{glyphs}{name-2} at 280pt] % \dostepwiserecurse{0}{255}{1} % {\doiffontcharelse{\getvariable{glyphs}{name-1}}{\recurselevel} % {\doiffontcharelse{\getvariable{glyphs}{name-2}}{\recurselevel} % {\startstandardmakeup % \doifelse{\getvariable{glyphs}{frame}}{on} % too many box calculations when off, but who cares % {\boxrulewidth=2pt} % {\boxrulewidth=0pt} % \setbox 0=\hbox{\white\ruledhbox{\FontOne \char\recurselevel}} % \setbox 2=\hbox{\white\ruledhbox{\FontTwo \char\recurselevel}} % \setbox 4=\hbox{\FontOne \ColorOne \char\recurselevel} % \setbox 6=\hbox{\FontTwo \ColorTwo \char\recurselevel} % \setbox 8=\hbox{\BackOne \ruledhbox{\FontOne \phantom{\char\recurselevel}}} % \setbox10=\hbox{\BackTwo \ruledhbox{\FontTwo \phantom{\char\recurselevel}}} % \vfill % \hbox{\dostepwiserecurse{0}{10}{2}{\hbox to \hsize{\hss\box\recurselevel\hss}\hskip-\hsize}} % \vfill % \tttf % \setstrut % \hbox to \hsize{\strut\hss % {\ColorOne \getvariable{glyphs}{name-1}}\quad % {\ColorTwo \getvariable{glyphs}{name-2}}\quad % {\ColorNone char \recurselevel }\hss} % \stopstandardmakeup} % {}} % {}} \dostepwiserecurse{0}{255}{1} {\donefalse \doiffontcharelse{\getvariable{glyphs}{name-1}}{\recurselevel}{\donetrue}{}% \doiffontcharelse{\getvariable{glyphs}{name-2}}{\recurselevel}{\donetrue}{}% \ifdone \startstandardmakeup \doifelse{\getvariable{glyphs}{frame}}{on} % too many box calculations when off, but who cares {\boxrulewidth=2pt} {\boxrulewidth=0pt} \setbox 0=\hbox{\white\ruledhbox{\FontOne \char\recurselevel}} \setbox 2=\hbox{\white\ruledhbox{\FontTwo \char\recurselevel}} \setbox 4=\hbox{\FontOne \ColorOne \char\recurselevel} \setbox 6=\hbox{\FontTwo \ColorTwo \char\recurselevel} \setbox 8=\hbox{\BackOne \ruledhbox{\FontOne \phantom{\char\recurselevel}}} \setbox10=\hbox{\BackTwo \ruledhbox{\FontTwo \phantom{\char\recurselevel}}} \vfill \hbox{\dostepwiserecurse{0}{10}{2}{\hbox to \hsize{\hss\box\recurselevel\hss}\hskip-\hsize}} \vfill \tttf \setstrut \hbox to \hsize{\strut\hss {\ColorOne \getvariable{glyphs}{name-1}}\quad {\ColorTwo \getvariable{glyphs}{name-2}}\quad {\ColorNone char \recurselevel }\hss} \stopstandardmakeup \fi} \stopsetups \doifnotmode{demo}{\endinput} \starttext \setupencoding[default=ec] \loadmapline [=][aer10 <cmr10.pfb] \loadmapline [=][\defaultencoding-lmr10 <\defaultencoding.enc <lmr10.pfb] \setvariables [glyphs] [frame=on, name-1=aer10, name-2=\defaultencoding-lmr10] \setups[show-glyphs] \stoptext ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-lib.mkiv�������������������������������0000644�0001750�0001750�00000005637�12130411274�024300� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=luat-lib, %D version=2006.09.11, %D title=\CONTEXT\ Lua Macros, %D subtitle=Libraries, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Macros / Libraries} \registerctxluafile{util-str}{1.001} \registerctxluafile{util-tab}{1.001} \registerctxluafile{util-sto}{1.001} % could also be done in trac-deb.mkiv \registerctxluafile{util-pck}{1.001} \registerctxluafile{util-seq}{1.001} %registerctxluafile{util-mrg}{1.001} % not needed in context itself, only mtxrun %registerctxluafile{util-lua}{1.001} % moved \registerctxluafile{util-prs}{1.001} \registerctxluafile{util-fmt}{1.001} \registerctxluafile{util-dim}{1.001} %registerctxluafile{trac-inf}{1.001} \registerctxluafile{trac-set}{1.001} \registerctxluafile{trac-log}{1.001} \registerctxluafile{trac-inf}{1.001} %registerctxluafile{trac-pro}{1.001} \registerctxluafile{util-lua}{1.001} \registerctxluafile{util-deb}{1.001} % could also be done in trac-deb.mkiv \registerctxluafile{util-tpl}{1.001} % needs tracker \registerctxluafile{util-sta}{1.001} \registerctxluafile{data-ini}{1.001} \registerctxluafile{data-exp}{1.001} \registerctxluafile{data-env}{1.001} \registerctxluafile{data-tmp}{1.001} \registerctxluafile{data-met}{1.001} \registerctxluafile{data-res}{1.001} \registerctxluafile{data-inp}{1.001} \registerctxluafile{data-out}{1.001} \registerctxluafile{data-fil}{1.001} \registerctxluafile{data-pre}{1.001} \registerctxluafile{data-tex}{1.001} \registerctxluafile{data-vir}{1.001} \registerctxluafile{data-bin}{1.001} \registerctxluafile{data-zip}{1.001} %registerctxluafile{data-crl}{1.001} \registerctxluafile{data-sch}{1.001} \registerctxluafile{data-tre}{1.001} \registerctxluafile{data-lua}{1.001} \registerctxluafile{data-ctx}{1.001} \registerctxluafile{data-con}{1.001} \registerctxluafile{data-use}{1.001} \registerctxluafile{data-aux}{1.001} \registerctxluafile{util-lib}{1.001} \registerctxluafile{luat-cbk}{1.001} \registerctxluafile{luat-run}{1.001} \registerctxluafile{luat-fio}{1.001} \registerctxluafile{luat-cnf}{1.001} \registerctxluafile{luat-lua}{1.001} \registerctxluafile{luat-sto}{1.001} \registerctxluafile{luat-ini}{1.001} \registerctxluafile{util-env}{1.001} \registerctxluafile{luat-env}{1.001} \registerctxluafile{luat-exe}{1.001} \registerctxluafile{luat-iop}{1.001} \registerctxluafile{luat-bwc}{1.001} \registerctxluafile{trac-lmx}{1.001} % might become l-lmx or luat-lmx \registerctxluafile{luat-mac}{1.001} %registerctxluafile{luat-prp}{1.001} % for the moment of not much use \registerctxluafile{lxml-tab}{1.001} \registerctxluafile{lxml-lpt}{1.001} \registerctxluafile{lxml-xml}{1.001} \registerctxluafile{lxml-aux}{1.001} \registerctxluafile{lxml-mis}{1.001} \endinput �������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/toks-ini.lua��������������������������������0000644�0001750�0001750�00000021775�12130411274�024140� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['toks-ini'] = { version = 1.001, author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfbyte, utfchar, utfvalues = utf.byte, utf.char, utf.values local format, gsub = string.format, string.gsub --[[ldx-- <p>This code is experimental and needs a cleanup. The visualizers will move to a module.</p> --ldx]]-- -- 1 = command, 2 = modifier (char), 3 = controlsequence id -- -- callback.register('token_filter', token.get_next) -- -- token.get_next() -- token.expand() -- token.create() -- token.csname_id() -- token.csname_name(v) -- token.command_id() -- token.command_name(v) -- token.is_expandable() -- token.is_activechar() -- token.lookup(v) -- actually, we can use token registers to store tokens local token, tex = token, tex local createtoken = token.create local csname_id = token.csname_id local command_id = token.command_id local command_name = token.command_name local get_next = token.get_next local expand = token.expand local is_activechar = token.is_activechar local csname_name = token.csname_name tokens = tokens or { } local tokens = tokens tokens.vbox = createtoken("vbox") tokens.hbox = createtoken("hbox") tokens.vtop = createtoken("vtop") tokens.bgroup = createtoken(utfbyte("{"), 1) tokens.egroup = createtoken(utfbyte("}"), 2) tokens.letter = function(chr) return createtoken(utfbyte(chr), 11) end tokens.other = function(chr) return createtoken(utfbyte(chr), 12) end tokens.letters = function(str) local t, n = { }, 0 for chr in utfvalues(str) do n = n + 1 t[n] = createtoken(chr, 11) end return t end tokens.collectors = tokens.collectors or { } local collectors = tokens.collectors collectors.data = collectors.data or { } local collectordata = collectors.data collectors.registered = collectors.registered or { } local registered = collectors.registered local function printlist(data) callbacks.push('token_filter', function () callbacks.pop('token_filter') -- tricky but the nil assignment helps return data end) end tex.printlist = printlist -- will change to another namespace function collectors.flush(tag) printlist(collectordata[tag]) end function collectors.test(tag) printlist(collectordata[tag]) end function collectors.register(name) registered[csname_id(name)] = name end local call = command_id("call") local letter = command_id("letter") local other = command_id("other_char") function collectors.install(tag,end_cs) local data, d = { }, 0 collectordata[tag] = data local endcs = csname_id(end_cs) while true do local t = get_next() local a, b = t[1], t[3] if b == endcs then context["end_cs"]() return elseif a == call and registered[b] then expand() else d = d + 1 data[d] = t end end end function collectors.handle(tag,handle,flush) collectordata[tag] = handle(collectordata[tag]) if flush then collectors.flush(tag) end end local show_methods = { } collectors.show_methods = show_methods function collectors.show(tag, method) if type(tag) == "table" then show_methods[method or 'a'](tag) else show_methods[method or 'a'](collectordata[tag]) end end function collectors.defaultwords(t,str) local n = #t n = n + 1 t[n] = tokens.bgroup n = n + 1 t[n] = createtoken("red") for i=1,#str do n = n + 1 t[n] = tokens.other('*') end n = n + 1 t[n] = tokens.egroup end function collectors.dowithwords(tag,handle) local t, w, tn, wn = { }, { }, 0, 0 handle = handle or collectors.defaultwords local tagdata = collectordata[tag] for k=1,#tagdata do local v = tagdata[k] if v[1] == letter then wn = wn + 1 w[wn] = v[2] else if wn > 0 then handle(t,w) wn = 0 end tn = tn + 1 t[tn] = v end end if wn > 0 then handle(t,w) end collectordata[tag] = t end local function showtoken(t) if t then local cmd, chr, id, cs, name = t[1], t[2], t[3], nil, command_name(t) or "" if cmd == letter or cmd == other then return format("%s-> %s -> %s", name, chr, utfchar(chr)) elseif id > 0 then cs = csname_name(t) or nil if cs then return format("%s-> %s", name, cs) elseif tonumber(chr) < 0 then return format("%s-> %s", name, id) else return format("%s-> (%s,%s)", name, chr, id) end else return format("%s", name) end else return "no node" end end collectors.showtoken = showtoken function collectors.trace() local t = get_next() logs.report("tokenlist",showtoken(t)) return t end -- these might move to a runtime module show_methods.a = function(data) -- no need to store the table, just pass directly local function row(one,two,three,four,five) context.NC() context(one) context.NC() context(two) context.NC() context(three) context.NC() context(four) context.NC() context(five) context.NC() context.NR() end context.starttabulate { "|T|Tr|cT|Tr|T|" } row("cmd","chr","","id","name") context.HL() for _,v in next, data do local cmd, chr, id, cs, sym = v[1], v[2], v[3], "", "" local name = gsub(command_name(v) or "","_","\\_") if id > 0 then cs = csname_name(v) or "" if cs ~= "" then cs = "\\string " .. cs end else id = "" end if cmd == letter or cmd == other then sym = "\\char " .. chr end if tonumber(chr) < 0 then row(name,"",sym,id,cs) else row(name,chr,sym,id,cs) end end context.stoptabulate() end local function show_b_c(data,swap) -- no need to store the table, just pass directly local function row(one,two,three) context.NC() context(one) context.NC() context(two) context.NC() context(three) context.NC() context.NR() end if swap then context.starttabulate { "|Tl|Tl|Tr|" } else context.starttabulate { "|Tl|Tr|Tl|" } end row("cmd","chr","name") context.HL() for _,v in next, data do local cmd, chr, id, cs, sym = v[1], v[2], v[3], "", "" local name = gsub(command_name(v) or "","_","\\_") if id > 0 then cs = csname_name(v) or "" end if cmd == letter or cmd == other then sym = "\\char " .. chr elseif cs == "" then -- okay elseif is_activechar(v) then sym = "\\string " .. cs else sym = "\\string\\" .. cs end if swap then row(name,sym,chr) elseif tonumber(chr) < 0 then row(name,"",sym) else row(name,chr,sym) end end context.stoptabulate() end -- Even more experimental ... show_methods.b = function(data) show_b_c(data,false) end show_methods.c = function(data) show_b_c(data,true ) end local remapper = { } -- namespace collectors.remapper = remapper local remapperdata = { } -- user mappings remapper.data = remapperdata function remapper.store(tag,class,key) local s = remapperdata[class] if not s then s = { } remapperdata[class] = s end s[key] = collectordata[tag] collectordata[tag] = nil end function remapper.convert(tag,toks) local data = remapperdata[tag] local leftbracket, rightbracket = utfbyte('['), utfbyte(']') local skipping = 0 -- todo: math if data then local t, n = { }, 0 for s=1,#toks do local tok = toks[s] local one, two = tok[1], tok[2] if one == 11 or one == 12 then if two == leftbracket then skipping = skipping + 1 n = n + 1 ; t[n] = tok elseif two == rightbracket then skipping = skipping - 1 n = n + 1 ; t[n] = tok elseif skipping == 0 then local new = data[two] if new then if #new > 1 then for n=1,#new do n = n + 1 ; t[n] = new[n] end else n = n + 1 ; t[n] = new[1] end else n = n + 1 ; t[n] = tok end else n = n + 1 ; t[n] = tok end else n = n + 1 ; t[n] = tok end end return t else return toks end end ���context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-mpe.tex��������������������������������0000644�0001750�0001750�00000000174�11376503616�024173� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% This file is not needed as I don't expect other macro packages % to support the metafun extensions. \input supp-mpe.mkii ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/node-ini.lua��������������������������������0000644�0001750�0001750�00000025323�12130411274�024076� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['node-ini'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx-- <p>Most of the code that had accumulated here is now separated in modules.</p> --ldx]]-- -- this module is being reconstructed local next, type = next, type local format, match, gsub = string.format, string.match, string.gsub local concat, remove = table.concat, table.remove local sortedhash, sortedkeys, swapped, tohash = table.sortedhash, table.sortedkeys, table.swapped, table.tohash local utfchar = utf.char local lpegmatch = lpeg.match local formatcolumns = utilities.formatters.formatcolumns --[[ldx-- <p>Access to nodes is what gives <l n='luatex'/> its power. Here we implement a few helper functions. These functions are rather optimized.</p> --ldx]]-- --[[ldx-- <p>When manipulating node lists in <l n='context'/>, we will remove nodes and insert new ones. While node access was implemented, we did quite some experiments in order to find out if manipulating nodes in <l n='lua'/> was feasible from the perspective of performance.</p> <p>First of all, we noticed that the bottleneck is more with excessive callbacks (some gets called very often) and the conversion from and to <l n='tex'/>'s datastructures. However, at the <l n='lua'/> end, we found that inserting and deleting nodes in a table could become a bottleneck.</p> <p>This resulted in two special situations in passing nodes back to <l n='tex'/>: a table entry with value <type>false</type> is ignored, and when instead of a table <type>true</type> is returned, the original table is used.</p> <p>Insertion is handled (at least in <l n='context'/> as follows. When we need to insert a node at a certain position, we change the node at that position by a dummy node, tagged <type>inline</type> which itself has_attribute the original node and one or more new nodes. Before we pass back the list we collapse the list. Of course collapsing could be built into the <l n='tex'/> engine, but this is a not so natural extension.</p> <p>When we collapse (something that we only do when really needed), we also ignore the empty nodes. [This is obsolete!]</p> --ldx]]-- local traverse = node.traverse local traverse_id = node.traverse_id local free_node = node.free local remove_node = node.remove local insert_node_before = node.insert_before local insert_node_after = node.insert_after local node_fields = node.fields local allocate = utilities.storage.allocate nodes = nodes or { } local nodes = nodes nodes.handlers = nodes.handlers or { } -- there will be more of this: local skipcodes = allocate { [ 0] = "userskip", [ 1] = "lineskip", [ 2] = "baselineskip", [ 3] = "parskip", [ 4] = "abovedisplayskip", [ 5] = "belowdisplayskip", [ 6] = "abovedisplayshortskip", [ 7] = "belowdisplayshortskip", [ 8] = "leftskip", [ 9] = "rightskip", [ 10] = "topskip", [ 11] = "splittopskip", [ 12] = "tabskip", [ 13] = "spaceskip", [ 14] = "xspaceskip", [ 15] = "parfillskip", [ 16] = "thinmuskip", [ 17] = "medmuskip", [ 18] = "thickmuskip", [100] = "leaders", [101] = "cleaders", [102] = "xleaders", [103] = "gleaders", } local penaltycodes = allocate { -- unfortunately not used [ 0] = "userpenalty", } table.setmetatableindex(penaltycodes,function(t,k) return "userpenalty" end) -- not used anyway local noadcodes = allocate { [ 0] = "ord", [ 1] = "opdisplaylimits", [ 2] = "oplimits", [ 3] = "opnolimits", [ 4] = "bin", [ 5] = "rel", [ 6] = "open", [ 7] = "close", [ 8] = "punct", [ 9] = "inner", [10] = "under", [11] = "over", [12] = "vcenter", } local listcodes = allocate { [ 0] = "unknown", [ 1] = "line", [ 2] = "box", [ 3] = "indent", [ 4] = "alignment", -- row or column [ 5] = "cell", } local glyphcodes = allocate { [0] = "character", [1] = "glyph", [2] = "ligature", [3] = "ghost", [4] = "left", [5] = "right", } local kerncodes = allocate { [0] = "fontkern", [1] = "userkern", [2] = "accentkern", } local mathcodes = allocate { [0] = "beginmath", [1] = "endmath", } local fillcodes = allocate { [0] = "stretch", [1] = "fi", [2] = "fil", [3] = "fill", [4] = "filll", } local margincodes = allocate { [0] = "left", [1] = "right", } local disccodes = allocate { [0] = "discretionary", -- \discretionary [1] = "explicit", -- \- [2] = "automatic", -- following a - [3] = "regular", -- simple [4] = "first", -- hard first item [5] = "second", -- hard second item } local function simplified(t) local r = { } for k, v in next, t do r[k] = gsub(v,"_","") end return r end local nodecodes = simplified(node.types()) local whatcodes = simplified(node.whatsits()) skipcodes = allocate(swapped(skipcodes,skipcodes)) noadcodes = allocate(swapped(noadcodes,noadcodes)) nodecodes = allocate(swapped(nodecodes,nodecodes)) whatcodes = allocate(swapped(whatcodes,whatcodes)) listcodes = allocate(swapped(listcodes,listcodes)) glyphcodes = allocate(swapped(glyphcodes,glyphcodes)) kerncodes = allocate(swapped(kerncodes,kerncodes)) penaltycodes = allocate(swapped(penaltycodes,penaltycodes)) mathcodes = allocate(swapped(mathcodes,mathcodes)) fillcodes = allocate(swapped(fillcodes,fillcodes)) margincodes = allocate(swapped(margincodes,margincodes)) disccodes = allocate(swapped(disccodes,disccodes)) nodes.skipcodes = skipcodes nodes.gluecodes = skipcodes -- more official nodes.noadcodes = noadcodes nodes.nodecodes = nodecodes nodes.whatcodes = whatcodes nodes.whatsitcodes = whatcodes -- more official nodes.listcodes = listcodes nodes.glyphcodes = glyphcodes nodes.kerncodes = kerncodes nodes.penaltycodes = kerncodes nodes.mathcodes = mathcodes nodes.fillcodes = fillcodes nodes.margincodes = margincodes nodes.disccodes = disccodes nodes.discretionarycodes = disccodes listcodes.row = listcodes.alignment listcodes.column = listcodes.alignment kerncodes.italiccorrection = kerncodes.userkern kerncodes.kerning = kerncodes.fontkern nodes.codes = allocate { -- mostly for listing glue = skipcodes, noad = noadcodes, node = nodecodes, hlist = listcodes, vlist = listcodes, glyph = glyphcodes, kern = kerncodes, penalty = penaltycodes, math = mathnodes, fill = fillcodes, margin = margincodes, disc = disccodes, whatsit = whatcodes, } local report_codes = logs.reporter("nodes","codes") function nodes.showcodes() local t = { } for name, codes in sortedhash(nodes.codes) do local sorted = sortedkeys(codes) for i=1,#sorted do local s = sorted[i] if type(s) ~= "number" then t[#t+1] = { name, s, codes[s] } end end end formatcolumns(t) for k=1,#t do report_codes (t[k]) end end local whatsit_node = nodecodes.whatsit local messyhack = tohash { -- temporary solution nodecodes.attributelist, nodecodes.attribute, nodecodes.gluespec, nodecodes.action, } function nodes.fields(n) local id = n.id if id == whatsit_node then return node_fields(id,n.subtype) else local t = node_fields(id) if messyhack[id] then for i=1,#t do if t[i] == "subtype" then remove(t,i) break end end end return t end end trackers.register("system.showcodes", nodes.showcodes) local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue -- if t.id == glue_code then -- local s = t.spec -- print(t) -- print(s,s and s.writable) -- if s and s.writable then -- free_node(s) -- end -- t.spec = nil -- end local function remove(head, current, free_too) local t = current head, current = remove_node(head,current) if t then if free_too then free_node(t) t = nil else t.next = nil t.prev = nil end end return head, current, t end nodes.remove = remove function nodes.delete(head,current) return remove(head,current,true) end nodes.before = insert_node_before nodes.after = insert_node_after -- we need to test this, as it might be fixed now function nodes.before(h,c,n) if c then if c == h then n.next = h n.prev = nil h.prev = n else local cp = c.prev n.next = c n.prev = cp if cp then cp.next = n end c.prev = n return h, n end end return n, n end function nodes.after(h,c,n) if c then local cn = c.next if cn then n.next = cn cn.prev = n else n.next = nil end c.next = n n.prev = c return h, n end return n, n end -- local h, c = nodes.replace(head,current,new) -- local c = nodes.replace(false,current,new) -- local c = nodes.replace(current,new) function nodes.replace(head,current,new) -- no head returned if false if not new then head, current, new = false, head, current end local prev, next = current.prev, current.next if next then new.next = next next.prev = new end if prev then new.prev = prev prev.next = new end if head then if head == current then head = new end free_node(current) return head, new else free_node(current) return new end end -- will move local function count(stack,flat) local n = 0 while stack do local id = stack.id if not flat and id == hlist_code or id == vlist_code then local list = stack.list if list then n = n + 1 + count(list) -- self counts too else n = n + 1 end else n = n + 1 end stack = stack.next end return n end nodes.count = count local left, space = lpeg.P("<"), lpeg.P(" ") local reference = left * (1-left)^0 * left * space^0 * lpeg.C((1-space)^0) function nodes.reference(n) return lpegmatch(reference,tostring(n)) end if not node.next then function node.next(n) return n and n.next end function node.prev(n) return n and n.prev end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-en.mkiv��������������������������������0000644�0001750�0001750�00000001024�11754241457�024133� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=cont-en, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ English Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {english} \def\defaultlanguagetag{en} \input context.mkiv \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mes.lua��������������������������������0000644�0001750�0001750�00000211375�12130411274�024143� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['mult-mes'] = { version = 1.001, comment = "companion to mult-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } -- floatsblocks -> floats -- bodyfont -> fonts -- verbatims -> buffers -- check all interfaces.showmessage -- replace all writestatus (tricky as %'s in names, but we can support --) return { formats = { ["adapted: preamble %a, state %a, order %a"] = { nl = "aangepast: preamble %a, status %a, volgorde %a", }, ["already loaded: %a"] = { nl = "al geladen: %a", }, ["check:1"] = { cs = "postradam '=' po %a na radku %a", de = "Fehlendes '=' nach %a in Zeile %a", en = "missing or ungrouped '=' after %a in line %a", fr = "manquant ou dégroupé '=' après %a à la ligne %a", it = "'=' mancante o non raggruppato dopo %a alla riga %a", nl = "'=' ontbreekt of zonder {} na %a in regel %a", no = "manglende '=' etter %a i linje %a", ro = "lipseste '=' dupa %a in linia %a", }, ["check:2"] = { cs = "ocekavam %a argument(y) na radku %a", de = "%a Argument(e) in Zeile %a erwartet", en = "%a argument(s) expected in line %a", fr = "%a argument(s) attendu(s) à la ligne %a", it = "%a argomento/i attesi alla riga %a", nl = "%a argument(en) verwacht in regel %a", no = "%a argument forventet i linje %a", ro = "argumentul(ele) %a sunt asteptate in linia %a", }, ["check:3"] = { cs = "%a %a nahrazuje makro, uzijte VERZALKY!", de = "%a %a ersetzt ein Makro, verwende VERSALIEN!", en = "%a %a replaces a macro, use CAPITALS!", fr = "%a %a remplace une macro, utilisez des MAJUSCULES !", it = "%a %a sostituisce una macro, usare le MAIUSCOLE!", nl = "%a %a vervangt een macro, gebruik HOOFDLETTERS!", no = "%a %a overskygger en makro, bruk STORE BOKSTAVER!", ro = "%a %a inlocuieste un macro, folositi MAJUSCULE!", }, ["checking file: %a"] = { nl = "controleren file: %a", }, ["checking url: %a"] = { nl = "controleren url: %a", }, ["colors:1"] = { cs = "system %a je globalne aktivovana", de = "system %a ist global aktiviert", en = "system %a is global activated", fr = "le système %a est globalement activé", it = "sistema %a attivato globalmente", nl = "systeem %a is globaal actief", no = "system %a er aktivert globalt", ro = "sistem %a este activata global", }, ["colors:10"] = { cs = "%a prostor barev je podporovan", de = "%a Farbraum wird unterstuetzt", en = "%a color space is supported", fr = "%a l'espace de couleur est supporté", it = "spazio dei colori %a supportato", nl = "%a kleurruimte wordt ondersteund", no = "%a fargerom er støttet", ro = "spatiul de culoare %a este suportat", }, ["colors:11"] = { cs = "barva je prevedena na sed", de = "Farbe wird in Grau umgewandelt", en = "color is converted to gray", fr = "la couleur est convertie en niveau de gris", it = "il colore ø convertito in grigio", nl = "kleur wordt vertaald in grijs", no = "fargen vil bli vist som grø", ro = "culoarea este convertita la gri", }, ["colors:12"] = { cs = "%a is registered", de = "%a is registered", en = "%a is registered", fr = "%a est enregistré", it = "%a is registered", nl = "%a is geregistreerd", no = "%a is registered", ro = "%a is registered", }, ["colors:2"] = { cs = "system %a je lokalne activovana", de = "system %a ist lokal aktiviert", en = "system %a is local activated", fr = "le système %a est localement activé", it = "sistema %a attivato localmente", nl = "systeem %a is lokaal actief", no = "system %a er aktivert lokalt", ro = "sistem %a este activata local", }, ["colors:3"] = { cs = "%a neni definovana %a", de = "%a ist undefiniert %a", en = "%a is not defined %a", fr = "%a n'est pas défini %a", it = "%a non definito %a", nl = "%a is niet gedefinieerd %a", no = "%a er udefinert %a", ro = "%a nu este definita %a", }, ["colors:4"] = { cs = "system %a je nacten", de = "system %a ist geladen", en = "system %a is loaded", fr = "le système %a est chargé", it = "sistema %a caricato", nl = "systeem %a wordt geladen", no = "system %a er lest inn", ro = "sistem %a este incarcata", }, ["colors:5"] = { cs = "neznamy system %a", de = "unbekanntes System %a", en = "unknown system %a", fr = "système %a inconnu", it = "sistema %a sconosciuto", nl = "onbekend systeem %a", no = "ukjent system %a", ro = "sistem %a necunoscuta", }, ["colors:6"] = { cs = "palette %a je k dispozici", de = "palette %a ist verfuegbar", en = "palette %a is available", fr = "la palette %a est disponible", it = "tavolozza %a resa disponibile", nl = "palet %a is beschikbaar", no = "palett %a er tilgjengelig", ro = "paleta %a este disponibila", }, ["colors:7"] = { cs = "palette %a neni k dispozici", de = "palette %a ist nicht verfuegbar", en = "palette %a is not available", fr = "le palette %a n'est pas disponible", it = "tavolozza %a non disponibile", nl = "palet %a is niet beschikbaar", no = "palett %a er ikke tilgjengelig", ro = "palette %a nu este disponibila", }, ["colors:8"] = { cs = "specifikace %a v barve %a bude cerna", de = "Spezifikation %a bei Farbe %a wird schwarz", en = "specification %a at color %a becomes black", fr = "la spécification %a de la couleur %a devient noire", it = "specifica %a del colore %a convertita in nero", nl = "specificatie %a bij %a wordt zwart", no = "spesifikasjon %a for farge %a gir kun svart", ro = "specificatia %a la culoarea %a devine neagra", }, ["colors:9"] = { cs = "%a prostor barev neni podporovan", de = "%a Farbraum wird nicht unterstuetzt", en = "%a color space is not supported", fr = "l'espace de couleur %a n'est pas supporté", it = "spazio dei colori %a non supportato", nl = "%a kleurruimte wordt niet ondersteund", no = "%a fargerom er ikke støttet", ro = "spatiul de culoare %a nu este suportat", }, ["columns:1"] = { cs = "je mozno pouze %a sloupcu", de = "nur %a Spalten moeglich", en = "only %a columns possible", fr = "seules %a colonnes possibles", it = "solo %a colonne possibili", nl = "maximaal %a kolommen", no = "maksimalt %a kolonner", ro = "este posibil numai %a coloane", }, ["columns:10"] = { cs = "zbyl (mene nez) 1 radek", de = "(weniger als) 1 Zeile uebrig", en = "(less than) 1 line left", fr = "(moins de) 1 ligne restante", it = "(meno di) una riga rimasta", nl = "(minder dan) 1 regel over", no = "(mindre enn) 1 linje igjen", ro = "a mai ramas (mai putin de) 1 linie", }, ["columns:11"] = { cs = "plovouci objekt je pro sloupec prilis siroky", de = "Gleitobjekt zu breit fuer Spalte", en = "float too wide for column", fr = "flottant mis à la largeur de la colonne", it = "oggetto mobile troppo ampio per la colonna", nl = "plaatsblok te breed voor kolom", no = "flytblokk for bredt for kolonna", ro = "blocul este prea lat pentru coloana", }, ["columns:12"] = { cs = "plovouci objekt je presunut do nasledujiciho sloupce / %a", de = "Gleitobjekt in naechste Zeile verschoben / %a", en = "float moved to next column / %a", fr = "flottant déplacé à la colonne suivante / %a", it = "oggetto mobile spostata alla colonna successiva / %a", nl = "plaatsblok verplaatst naar volgende kolom / %a", no = "flytblokk forskjøvet til neste kolonne / %a", ro = "blocul este mutat pe urmatoarea coloana / %a", }, ["columns:13"] = { cs = "siroky plovouci objekt je presunut nad sloupce", de = "breites Gleitobjekt an den Anfang der Spalten verschoben", en = "wide float moved to top of columns", fr = "flottant large déplacé dans la partie supérieure de la colonne", it = "oggetto mobile ampio spostato sopra le colonne", nl = "breed figuur geplaatst boven kolommen", no = "bred flytblokk forksjøvet til toppen av kolonnene", ro = "blocul lat este mutat in partea de sus a coloanelor", }, ["columns:2"] = { cs = "pouzijte \\string\\filbreak\\space jako alternativu", de = "benutzte \\string\\filbreak\\space als Alternative", en = "use \\string\\filbreak\\space as alternative", fr = "utilisez \\string\\filbreak\\space en tant qu'alternative", it = "in alternativa, usare \\string\\filbreak", nl = "gebruik eventueel \\string\\filbreak", no = "bruk \\string\\filbreak\\space som et alternativ", ro = "folositi \\string\\filbreak\\space ca alternativa", }, ["columns:3"] = { cs = "problem, vypina se vyvazovani", de = "Problem, verwende [ausgleich=nein]", en = "problems, disable balancing", fr = "problèmes, désactive l'équilibrage", it = "problemi, disabilitare il bilanciamento", nl = "probleempje, probeer [balanceren=nee]", no = "problemer, slår av balansering", ro = "probleme, se dezactiveaza alinierea", }, ["columns:4"] = { cs = "horni plovouci objekt jeste neni podporovan", de = "Gleitobjekt oben ncoh nicht unterstuetzt", en = "top float not yet supported", fr = "flottant en partie supérieure pas encore supporté", it = "float in cima non ancora supportato", nl = "plaatsblok boven nog niet mogelijk", no = "flytblokker øverst er ikke støttet enda", ro = "cadrele top (top float) nu sunt inca suportate", }, ["columns:5"] = { cs = "spodni plovouci objekt jeste neni podporovan", de = "Gleitobjekt unten ncoh nicht unterstuetzt", en = "bottom float not yet supported", fr = "flottant en partie inférieure pas encore supporté", it = "float in fondo non ancora supportato", nl = "plaatsblok onder nog niet mogelijk", no = "flytblokker nedert er ikke støttet enda", ro = "cadrele bottom (bottom float) nu sunt inca suportate", }, ["columns:6"] = { cs = "%a plovouci objekt(y) odlozeny", de = "%a Gleitobjekt(e) verschoben", en = "%a float(s) postponed", fr = "%a flottant(s) reporté(s)", it = "%a float(s) posticipate", nl = "%a plaatsblok(en) opgeschort", no = "%a flytblokk forskjøvet", ro = "%a blocurile sunt amanate", }, ["columns:7"] = { cs = "vyvazovani ukonceno po 100 krocich", de = "ausgleich nach 100 Schritten abgebrocheb", en = "balancing aborted after 100 steps", fr = "équilibrage abandonné après 100 pas", it = "bilanciamento annullato dopo 100 passi", nl = "balanceren afgebroken na 100 stappen", no = "balansering avbrutt etter 100 iterasjoner", ro = "alinierea este oprita dupa 100 de incercari", }, ["columns:8"] = { cs = "vyvazeno v %a krocich", de = "ausgeglichen nach %a Schritt(en)", en = "balanced in %a step(s)", fr = "équilibré en %a pas", it = "bilanciamento in %a passo/i", nl = "gebalanceerd in %a stap(pen)", no = "balansert etter %a iterasjoner", ro = "aliniat in %a pas(i)", }, ["columns:9"] = { cs = "kontrola nerovnost", de = "Ausrichtung ueberpruefen", en = "check raggedness", fr = "vérification des irrégularités", it = "controllare seghettamento", nl = "uitlijnen controleren!", no = "kontroller tekstlayout!", ro = "verificat alinierea", }, ["databases:1"] = { cs = "%a", de = "%a", en = "%a", fr = "%a", it = "%a", nl = "%a", no = "%a", ro = "%a", }, ["databases:2"] = { cs = "local file %a", de = "lokale Datei %a", en = "local file %a", fr = "fichier local %a", it = "file locale %a", nl = "lokaal bestand %a", no = "lokal fil %a", ro = "fisier local %a", }, ["databases:3"] = { cs = "global file %a", de = "globale Datei %a", en = "global file %a", fr = "fichier global %a", it = "file globale %a", nl = "globaal bestand %a", no = "global fil %a", ro = "fisier global %a", }, ["databases:4"] = { cs = "unknown file %a", de = "unbekannte Datei %a", en = "unknown file %a", fr = "fichier inconnu %a", it = "file sconosciuto %a", nl = "onbekend bestand %a", no = "ukjent fil %a", ro = "fisier necunoscut %a", }, ["extended: preamble %a, state %a, order %a"] = { nl = "uitgebreid: preamble %a, status %a, volgorde %a", }, ["figures:1"] = { cs = "obraz %a nelze nalezt", de = "Abbildung %a kann nicht gefunden werden", en = "figure %a can not be found", fr = "la figure %a ne peut être trouvée", it = "figura %a non trovata", nl = "figuur %a is niet te vinden", ro = "figura %a nu poate fi gasita", }, ["figures:2"] = { cs = "obraz %a nepritomen", de = "Abbildung %a wird nicht erstellt", en = "figure %a is not preset", fr = "la figure %a n'est pas pré-sélectionnée", it = "la figura %a non è preimpostata", nl = "figuur %a wordt niet preset", ro = "figura %a nu este presetata", }, ["figures:3"] = { cs = "dimensions of %a are determined externally", de = "dimensions of %a are determined externally", en = "dimensions of %a are determined externally", fr = "dimensions of %a are determined externally", it = "dimensions of %a are determined externally", nl = "maten van %a worden extern vastgesteld", ro = "dimensions of %a are determined externally", }, ["figures:4"] = { cs = "dimenze obrazu %a nacteny primo z jeho souboru", de = "Dimensionen von %a geladen aus der Abbildungsdatei selbst", en = "dimensions of %a loaded from figurefile itself", fr = "les dimensions de %a chargées implicitement à partir du fichier de figure", it = "dimensioni di %a caricate dal file di immagini stesso", nl = "maten van %a geladen uit figuurfile zelf", ro = "dimensiunea figurii %a se incarca din fisierul insusi", }, ["figures:5"] = { cs = "dimensions of %a are unknown", de = "Dimensions of %a are unknown", en = "dimensions of %a are unknown", fr = "dimensions of %a are unknown", it = "dimensions of %a are unknown", nl = "maten van %a zijn onbekend", ro = "dimensions of %a are unknown", }, ["figures:6"] = { cs = "dimenze obrazu %a spocteny programem rlxtools", de = "Dimensionen von %a ausgerechnet durch rlxtools", en = "dimensions of %a calculated by rlxtools", fr = "les dimensions de %a calculées par rlxtools", it = "dimensioni di %a calcolate da rlxtools", nl = "maten van %a berekend door rlxtools", ro = "dimensiunea figurii %a este calculata de rlxtools", }, ["figures:8"] = { cs = "obrazovy objekt %a je znovu pouzit", de = "Abbildungobjekt %a wurde wiederverwandt", en = "figureobject %a is reused", fr = "figureobject %a est réutilisé", it = "oggetto-figura %a riutilizzato", nl = "figuurobject %a wordt opnieuw gebruikt", ro = "obiectul figura %a este refolosit", }, ["files:1"] = { cs = "synonymum souboru %a je jiz pouzito pro %a", de = "Dateisynonym %a wird bereits fuer %a benutzt", en = "file synonym %a is already used for %a", fr = "le synonyme de fichier %a est déjà utilisé pour %a", it = "sinonimo file %a già in uso per %a", nl = "file synoniem %a is al in gebruik voor %a", no = "filesynonym %a er allerede brukt for %a", ro = "sinonimul fisierelor %a este folosit deja pentru %a", }, ["filters:1"] = { cs = "filter %a is loaded", de = "filter %a ist geladen", en = "filter %a is loaded", fr = "le filtre %a est chargé", it = "filtro %a caricato", nl = "filter %a wordt geladen", }, ["filters:2"] = { cs = "unknown filter %a", de = "unknown filter %a", en = "unknown filter %a", fr = "filtre %a inconnu", it = "filtro sconosciuto %a", nl = "onbekend filter %a", }, ["floatblocks:1"] = { cs = "%a precislovano / %a => %a", de = "%a neu nummeriert / %a => %a", en = "%a renumbered / %a => %a", fr = "%a renuméroté / %a => %a", it = "%a rinumerato / %a => %a", nl = "%a hernummerd / %a => %a", no = "%a renummerert / %a => %a", ro = "%a renumerotat / %a => %a", }, ["floatblocks:10"] = { cs = "%a omezeno", de = "%a begrenzt", en = "%a limited", fr = "%a limité", it = "%a limitato", nl = "%a begrensd", no = "%a begrenset", ro = "%a limitat", }, ["floatblocks:11"] = { cs = "nedan zadny blok", de = "kein Block gegeben", en = "no block given", fr = "pas de bloc donné", it = "nessun oggetto specificato", nl = "geen blok opgegeven", no = "ingen blokk oppgitt", ro = "nu este dat nici un bloc", }, ["floatblocks:12"] = { cs = "nedefinovano", de = "undefiniert", en = "undefined", fr = "indéfini", it = "non definito", nl = "niet gedefinieerd", no = "udefinert", ro = "nedefinit", }, ["floatblocks:13"] = { cs = "there is nothing to split", de = "there is nothing to split", en = "there is nothing to split", fr = "there is nothing to split", it = "there is nothing to split", nl = "er is niets te splitsen", no = "there is nothing to split", ro = "there is nothing to split", }, ["floatblocks:2"] = { cs = "%a ulozeno", de = "%a gespeichert", en = "%a saved", fr = "%a sauvegardé", it = "%a salvato", nl = "%a bewaard", no = "%a lagret", ro = "%a salvat", }, ["floatblocks:3"] = { cs = "%a presunuto", de = "%a verschoben", en = "%a moved", fr = "%a déplacé", it = "%a mosso", nl = "%a verplaatst", no = "%a flyttet", ro = "%a mutat", }, ["floatblocks:4"] = { cs = "%a umisteno", de = "%a plaziert", en = "%a placed", fr = "%a placé", it = "%a sistemato", nl = "%a geplaatst", no = "%a plassert", ro = "%a plasat", }, ["floatblocks:5"] = { cs = "poradi prizpusobeno", de = "Reihenfolge angepasst", en = "order adapted", fr = "ordre adapté", it = "ordine aggiustato", nl = "volgorde aangepast", no = "rekkefølge tilpasset", ro = "ordinea adaptata", }, ["floatblocks:6"] = { cs = "pocet hornich plovoucich objektu je omezen na %a", de = "Anz. der oberen Gleitobjekte beschraengt auf %a", en = "n of top floats limited to %a", fr = "n flottants de haut de page limité à %a", it = "n di top floats limitato a %a", nl = "maximaal %a boven", no = "maksimalt %a flytblokker øverst", ro = "nr. cadrelor de sus limitat la %a", }, ["floatblocks:7"] = { cs = "pocet spodnich plovoucich objektu je omezen na %a", de = "Anz. der unteren Gleitobjekte beschraengt auf %a", en = "n of bottom floats limited to %a", fr = "n flottants de bas de page limité à %a", it = "n di bottom floats limitato a %a", nl = "maximaal %a onder", no = "maksimalt %a flytblokker nederst", ro = "nr. blocurilor de jos limitat la %a", }, ["floatblocks:8"] = { cs = "radku je mene nez %a", de = "weniger als %a zeilen", en = "less than %a lines", fr = "moins de %a lignes", it = "meno di %a righe", nl = "minder dan %a regels", no = "mindre enn %a linjer", ro = "mai putin de %a linii", }, ["floatblocks:9"] = { cs = "poradi naruseno", de = "Reigenfolge gestoert", en = "order disturbed", fr = "ordre perturbé", it = "ordine disturbato", nl = "volgorde verstoord", no = "rekkefølge endret", ro = "ordinea deranjata", }, ["flushed: preamble %a"] = { nl = "weggeschreven: preamble %a", }, ["fonts:1"] = { cs = "kodovani %a", de = "Kodierung %a", en = "coding %a", fr = "encodage %a", it = "codifica %a", nl = "codering %a", no = "koding %a", ro = "codificarea %a", }, ["fonts:10"] = { cs = "neznamy font %a", de = "unbekanntes Font %a", en = "unknown font file %a", fr = "fichier de police %a inconnu", it = "file di font sconosciuto %a", nl = "onbekende font file %a", no = "ukjent fontfil %a", ro = "fisier font necunoscut %a", }, ["fonts:14"] = { cs = "bodyfont %a is defined (can better be done global)", de = "Fliesstext %a wurde definiert (besser waere globale Definition)", en = "bodyfont %a is defined (can better be done global)", fr = "policecorps %a est défini (une définition globale pourrait être plus adéquat)", it = "corpo del testo %a definito (sarebbe meglio globale)", nl = "korps %a is gedefinieerd (kan beter globaal plaatsvinden)", no = "bodyfont %a is defined (can better be done global)", ro = "bodyfont %a is defined (can better be done global)", }, ["fonts:2"] = { cs = "varianta %a je nactena", de = "Variante %a ist geladen", en = "variant %a is loaded", fr = "la variante %a est chargée", it = "variante %a caricata", nl = "variant %a wordt geladen", no = "variant %a er lest inn", ro = "varianta %a este incarcata", }, ["fonts:3"] = { cs = "neznama varianta %a", de = "Unbekannte Variante %a", en = "unknown variant %a", fr = "variante %a inconnue", it = "variante sconosciuta %a", nl = "onbekende variant %a", no = "ukjent variant %a", ro = "varianta necunoscuta %a", }, ["fonts:4"] = { cs = "zakladni font %a neni definovan", de = "Fliesstext %a ist nicht definiert", en = "bodyfont %a is not defined", fr = "policecorps %a n'est pas définie", it = "corpo del testo %a non definito", nl = "korps %a is niet gedefinieerd", no = "hovedfont %a er ikke definert", ro = "corpul de litere %a nu este definit", }, ["fonts:5"] = { cs = "styl %a neni definovan", de = "Stil %a ist nicht definiert", en = "style %a is not defined", fr = "le style %a n'est pas défini", it = "stile %a non definito", nl = "stijl %a is niet gedefinieerd", no = "stil %a er ikke definert", ro = "stilul %a nu este definit", }, ["fonts:6"] = { cs = "%a je nacten", de = "%a ist geladen", en = "%a is loaded", fr = "%a est chargé", it = "%a caricato", nl = "%a wordt geladen", no = "%a er lest inn", ro = "%a este incarcat", }, ["fonts:7"] = { cs = "neznamy format %a", de = "unbekanntes Format %a", en = "unknown format %a", fr = "format %a inconnu", it = "formato sconosciuto %a", nl = "onbekend formaat %a", no = "ukjent format %a", ro = "format necunoscut %a", }, ["fonts:8"] = { cs = "styl %a definovan", de = "Stil %a definiert", en = "style %a defined", fr = "style %a défini", it = "stile %a definito", nl = "stijl %a gedefinieerd", no = "stil %a definert", ro = "stilul %a definit", }, ["interactions:1"] = { cs = "pomer %a x %a (s x v)", de = "Seitenverhaeltnis %a x %a (B x H)", en = "aspect ratio %a x %a (b x h)", fr = "ratio d'aspect %a x %a (b x h)", it = "rapporto %a x %a (b x a)", nl = "aspect ratio %a x %a (b x h)", no = "forholdstall %a x %a (b x h)", ro = "aspectul %a x %a (b x h)", }, ["interactions:2"] = { cs = "aktivni", de = "aktiv", en = "active", fr = "actif", it = "attiva", nl = "actief", no = "aktiv", ro = "activ", }, ["interactions:21"] = { cs = "%a kod vlozen", de = "%a Code eingefuegt", en = "%a code inserted", fr = "%a code inseré", it = "codice %a inserito", nl = "%a code tussengevoegd", no = "%a kode satt inn / tilføyd", ro = "%a cod inserat", }, ["interactions:3"] = { cs = "neaktivni", de = "inaktiv", en = "inactive", fr = "inactif", it = "inattiva", nl = "niet actief", no = "inaktiv", ro = "inactiv", }, ["interactions:4"] = { cs = "zadna strankova synchronizace (%a) v hmode", de = "keine Seitensynchronisation (%a) im hmode", en = "no pagesynchronisation (%a) in hmode", fr = "pas de synchronisation de page (%a) dans le hmode", it = "sincronizzazione di pagina (%a) non disponibile in hmode", nl = "geen paginasynchronisatie (%a) in hmode", no = "ingen sidesynkronisering (%a) i hmode", ro = "nu exista sincronizare pt. pagini (%a) in hmode", }, ["interactions:5"] = { cs = "unknown attachment %a", de = "unknown attachment %a", en = "unknown attachment %a", fr = "le fichier joint %a est inconnu", it = "unknown attachment %a", nl = "onbekend attachment %a", no = "unknown attachment %a", ro = "unknown attachment %a", }, ["interactions:6"] = { cs = "attachment file %a does not exist", de = "attachment file %a does not exist", en = "attachment file %a does not exist", fr = "le fichier joint %a n'existe pas", it = "attachment file %a does not exist", nl = "attachment file %a bestaat niet", no = "attachment file %a does not exist", ro = "attachment file %a does not exist", }, ["languages:1"] = { cs = "vzory %a pro %a nacteny (n=%a,e=%a,m=%a)", de = "Trennmuster %a fuer %a geladen (n=%a,e=%a,m=%a)", en = "patterns %a for %a loaded (n=%a,e=%a,m=%a)", fr = "les motifs %a pour %a sont chargés (n=%a,e=%a,m=%a)", it = "schemi %a per %a caricati (n=%a,e=%a,m=%a)", nl = "afbreekpatronen %a voor %a geladen (n=%a,e=%a,m=%a)", no = "orddelingsmønster %a for %a er lest inn (n=%a,e=%a,m=%a)", ro = "sablonul %a pentru %a s-a incarcat (n=%a,e=%a,m=%a)", }, ["languages:10"] = { cs = "vzory %a nacteny", de = "Trennmuster %a geladen", en = "patterns %a loaded", fr = "motifs %a chargés", it = "schemi %a caricati", nl = "patronen %ageladen", no = "orddelingsmønster %a er lest inn", ro = "sabloanele %a incarcate", }, ["languages:2"] = { cs = "zadne vzory %a pro %a (n=%a,e=%a,m=%a) (%a,%a)", de = "Keine Trennmuster %a fuer %a (n=%a,e=%a,m=%a) (%a,%a)", en = "no patterns %a for %a (n=%a,e=%a,m=%a) (%a,%a)", fr = "pas de motifs %a pour %a (n=%a,e=%a,m=%a) (%a,%a)", it = "niente schemi %a per %a (n=%a,e=%a,m=%a) (%a,%a)", nl = "geen afbreekpatronen %a voor %a (n=%a,e=%a,m=%a) (%a,%a)", no = "ingen orddelingsmønster %a for %a (n=%a,e=%a,m=%a) (%a,%a)", ro = "nu exista sabloane %a pentru %a (n=%a,e=%a,m=%a) (%a,%a)", }, ["languages:3"] = { cs = "deleni slov %a pro %a nacteno (n=%a,e=%a,m=%a)", de = "Trenndefinitionen %a fuer %a geladen (n=%a,e=%a,m=%a)", en = "hyphenations %a for %a loaded (n=%a,e=%a,m=%a)", fr = "hyphenations %a pour %a chargés (n=%a,e=%a,m=%a)", it = "sillabazione %a per %a caricata (n=%a,e=%a,m=%a)", nl = "afbreekdefinities %a voor %a geladen (n=%a,e=%a,m=%a)", no = "orddelingsdefinisjon %a for %a er lest inn (n=%a,e=%a,m=%a)", ro = "despartirea in silabe %a pentru %a s-a incarcat (n=%a,e=%a,m=%a)", }, ["languages:4"] = { cs = "zadne deleni slov %a pro %a (n=%a,e=%a,m=%a)", de = "Keine Trenndefinitionen %a fuer %a (n=%a,e=%a,m=%a)", en = "no hyphenations %a for %a (n=%a,e=%a,m=%a)", fr = "pas d'hyphenations %a pour %a (n=%a,e=%a,m=%a)", it = "niente sillabazione %a per %a (n=%a,e=%a,m=%a)", nl = "geen afbreekdefinities %a voor %a (n=%a,e=%a,m=%a)", no = "ingen orddelingsdefinisjon %a for %a (n=%a,e=%a,m=%a)", ro = "nu exista despartire in silabe %a pentru %a (n=%a,e=%a,m=%a)", }, ["languages:5"] = { cs = "vzory pro %a nenacteny", de = "Trennmuster fuer %a nicht geladen", en = "patterns for %a not loaded", fr = "les motifs pour %a ne sont pas chargés", it = "schemi per %a non caricati", nl = "afbreekpatronen voor %a niet geladen", no = "orddelingsmønster for %a er ikke lest inn", ro = "sabloanele pentru %a nu sunt incarcate", }, ["languages:6"] = { cs = "jazyk %a neni definovan", de = "Sprache %a ist undefiniert", en = "language %a is undefined", fr = "langue %a non définie", it = "lingua %a non definita", nl = "taal %a is niet gedefinieerd", no = "spràk %a er udefinert", ro = "limba %a nu este definita", }, ["languages:7"] = { cs = "specificke volby jazyka [%a] zavadeji %a (zavlecenou) mezeru", de = "Sprachenspezifische Option [%a] fuegt eine Luecke von %a ein", en = "language specific options [%a] introduce a %a skip", fr = "les options spécifiques de langue [%a] introduisent un %a saut", it = "opzioni specifiche per la lingua [%a] introducono un salto %a", nl = "taal specifieke opties [%a] introduceren een skip van %a", no = "spràk spesifikk opsjon [%a] introduserer et %a hopp", ro = "optiunile specifice ale limbii [%a] introduc un spatiu %a", }, ["languages:8"] = { cs = "specificke volby jazyka [%a] bez mezer pripojeny", de = "Sprachenspezifische Option [%a] nahtlos hinzugefuegt", en = "language specific options [%a] seamless appended", fr = "les options spécifiques de langue [%a] sont ajoutés en douceur", it = "opzioni specifiche per la lingua [%a] aggiunte trasparentemente", nl = "taal specifieke opties [%a] naadloos toegevoegd", no = "spràk spesifikk opsjon [%a] problemfritt tilføyd", ro = "optiunile specifice ale limbii [%a] adaugate", }, ["languages:9"] = { cs = "language %a is active", de = "Sprache %a ist aktiv", en = "language %a is active", fr = "la langue %a est active", it = "lingua %a attiva", nl = "taal %a is actief", no = "spràk %a er aktivt", ro = "limba %a este activa", }, ["layouts:1"] = { cs = "vyska textu prizpusobena s %a na strane %a", de = "Texthoehe angepasst mit %a auf Seite %a", en = "textheight adapted with %a at page %a", fr = "hauteurtexte adaptée avec %a à la page %a", it = "altezza del testo adattata con %a a pagina %a", nl = "teksthoogte aangepast met %a op pagina %a", no = "teksthøyde tilpasset med %a på side %a", ro = "textheight adaptat cu %a la pagina %a", }, ["layouts:10"] = { cs = "%a a %a nedava dohromady 1.0", de = "%a und %a ergeben zusammen nicht 1.0", en = "%a and %a don't add up to 1.0", fr = "%a et %a ne sont pas ajoutés à 1.0", it = "%a e %a non sommano a 1.0", nl = "%a en %a tellen niet op tot 1.0", no = "%a og %a er ikke 1.0 til sammen", ro = "%a si %a nu se adauga pana la 1.0", }, ["layouts:11"] = { cs = "svisla mezera %a neni povolena v pevnem radkovem rejstriku", de = "Zwischenraum %a nicht im Grittermoduserlau", en = "spacing %a not permitted in gridmode", fr = "espacement %a non permis en modegrille", it = "spaziatura %a non permessa in modo griglia", nl = "interlinie %a niet toegestaan in gridmode", no = "mellomrom %a ikke tillatt i gridmodus", ro = "spatierea %a nu este permisa in gridmode", }, ["layouts:2"] = { cs = "%a krat odlozeny text umisten", de = "%a mal verschobener Text plaziert", en = "%a times postponed text placed", fr = "%a times postponed text placed", it = "posizionato testo posticipato %a volte", nl = "%a maal uitgestelde tekst tussengevoegd", no = "%a ganger forskjøvet tekst plassert", ro = "textul amanat de %a ori a fost plasat", }, ["layouts:3"] = { cs = "%a krat text odlozen", de = "%a mal Text verschoben", en = "%a times text postponed", fr = "%a times text postponed", it = "testo posticipato %a volte", nl = "%a maal tekst plaatsen uitstellen", no = "%a ganger tekst forskjøvet", ro = "textul amanat de %a ori", }, ["layouts:4"] = { cs = "okrajove bloky aktivni", de = "marginalbloecke aktiv", en = "marginblocks active", fr = "blocsmarge actifs", it = "blocchi in margine attivi", nl = "margeblokken actief", no = "margblokker aktive", ro = "blocuri marginale active", }, ["layouts:5"] = { cs = "okrajove bloky neaktivni", de = "marginalbloecke inaktiv", en = "marginblocks inactive", fr = "blocsmarge inactifs", it = "blocchi in margine inattivi", nl = "margeblokken inactief", no = "margblokker inaktive", ro = "blocuri marginale inactive", }, ["layouts:6"] = { cs = "sada stran %a zpracovana (velikost %a)", de = "Unterseitenfolge %a verarbeitet (Groesse %a)", en = "subpage set %a processed (size %a)", fr = "jeu de souspage %a traité (taille %a)", it = "gruppo di sottopagine %a elaborato (dimensione %a)", nl = "subpagina reeks %a verwerkt (aantal %a)", no = "delside sett %a behandlet (størrelse %a)", ro = "setul %a de subpagini procesat (dimensiunea %a)", }, ["layouts:7"] = { cs = "pocita se misto pro logo", de = "berechne Platzbedarf des Logos", en = "calculating logospace", fr = "calcul de l'espace pour le logo", it = "calcolo dello spazio per logo", nl = "beeldmerken berekenen", no = "beregner plass for logo", ro = "se calculeaza spatiul pentru logo", }, ["layouts:8"] = { cs = "pocita se pozadi", de = "berechne Hintergrund", en = "calculating backgrounds", fr = "calcul des arrières-plans", it = "calcolo dello sfondo", nl = "achtergronden berekenen", no = "beregner bakgrunn", ro = "se calculeaza fundalurile", }, ["layouts:9"] = { cs = "aktualne ne vice nez %a urovne/urovni vyctu", de = "z.Z. nicht mehr als %a Ebenen in Aufzaehlungen", en = "currently no more than %a levels in itemizations", fr = "pas plus de %a niveaux pour l'instant dans les élémentarisations", it = "attualmente non più di %a livelli di elencazione", nl = "momenteel maximaal %a niveaus in opsommingen", no = "for øyeblikket maksimalt %a nivåer i opplisting", ro = "acum nu se supota mai mult de %a nivele de adancime la iteratii", }, ["loaded: %a"] = { nl = "geladen: %a", }, ["loaded: library %a"] = { nl = "geladen: bibliotheek %a", }, ["loading: %a"] = { nl = "laden: %a", }, ["locating: %a"] = { nl = "zoeken: %a", }, ["not found: %a"] = { nl = "niet gevonden: %a", }, ["number 1: %a, number 2: %a"] = { en = "number 1: (%a), number 2: (%a)", nl = "nummer 1: (%a), nummer 2: (%a)", }, ["popping level: %a"] = { nl = "niveau omlaag: %a", }, ["publications:1"] = { en = "file %a not found, unknown style ignored", }, ["publications:2"] = { en = "file %a not found, waiting for bibtex", }, ["publications:3"] = { en = "wrote a new auxiliary file \\jobname.aux", }, ["publications:4"] = { en = "loading database from %a", }, ["publications:5"] = { en = "warning: unknown cite argument %a on line \\the\\inputlineno", }, ["publications:6"] = { en = "loading formatting style from %a", }, ["publications:7"] = { en = "placing all entries, use 'text' to be more selective", }, ["pushing level: %a"] = { nl = "niveau omhoog: %a", }, ["references:1"] = { cs = "neznama reference %a", de = "unbekannte Referenz %a", en = "unknown reference %a", fr = "réference %a inconnue", it = "riferimento sconosciuto %a", nl = "onbekende verwijzing %a", no = "ukjent referanse %a", ro = "referinta necunoscuta %a", }, ["references:2"] = { cs = "duplicitni reference %a na strane %a", de = "doppelte Referenz %a auf Seite %a", en = "duplicate reference %a on page %a", fr = "réference %a dupliquée à la page %a", it = "riferimento duplicato %a a pagina %a", nl = "dubbele verwijzing %a op pagina %a", no = "duplikat referanse %a pø side %a", ro = "referinta duplicat %a la pagina %a", }, ["references:21"] = { cs = "dokument %a nacten", de = "Dokument %a geladen", en = "document %a loaded", fr = "document %a chargé", it = "documento %a caricato", nl = "document %a geladen", no = "dokument %a er lest inn", ro = "documentul %a este incarcat", }, ["references:22"] = { cs = "dokument %a neni interaktivni", de = "Dokument %a ist nicht aktiv", en = "document %a is not interactive", fr = "le document %a n'est pas interactif", it = "il documento %a non ø interattivo", nl = "document %a is niet interactief", no = "dokument %a er ikke interaktivt", ro = "documentul %a nu este interactiv", }, ["references:23"] = { cs = "obskurni (nejasna) reference %a (prefix=%a)", de = "Obskure Referenz %a (Prefix=%a)", en = "obscure reference %a (prefix=%a)", fr = "reference %a indéterminé (préfixe=%a)", it = "riferimento ambiguo %a (prefisso=%a)", nl = "onduidelijke verwijzing %a (prefix=%a)", no = "obskur referanse %a (Prefix=%a)", ro = "referinta obscura %a (prefix=%a)", }, ["references:24"] = { en = "references from document %a are not exported", }, ["references:25"] = { en = "references from document %a are not imported (export again)", }, ["references:26"] = { en = "references from document %a are imported", }, ["references:3"] = { cs = "neznamy typ reference %a", de = "unbekannte Referenz Typ %a", en = "unknown reference type %a", fr = "type %a de réference inconnu", it = "riferimento di tipo sconosciuto %a", nl = "type verwijzing %a onbekend", no = "ukjent referansetype %a", ro = "tip necunoscut de referinta %a", }, ["references:30"] = { cs = "neznamy objekt %a", de = "unbekanntes Object %a", en = "unknown object %a", fr = "objet %a inconnu", it = "oggetto sconosciuto %a", nl = "onbekend object %a", no = "ukjent objekt %a", ro = "obiect necunoscut %a", }, ["references:31"] = { cs = "duplicitni object %a", de = "doppeltes Object %a", en = "duplicate object %a", fr = "objet %a dupliqué", it = "oggetto duplicato %a", nl = "dubbel object %a", no = "duplikat objekt %a", ro = "obiect duplicat %a", }, ["references:4"] = { cs = "nedovolena reference %a", de = "illegale Referenz %a", en = "illegal reference %a", fr = "réference %a inconnue", it = "riferimento illecito %a", nl = "verboden verwijzing %a", no = "ulovlig referanse %a", ro = "referinta eronata %a", }, -- ["number of unknown references: %a"] = { -- }, ["references:6"] = { en = "number of illegal references: %a", }, ["start: %a"] = { }, ["stop: %a"] = { }, ["stored: preamble %a, state %a, order %a"] = { nl = "opgeslagen: preamble %a, status %a, volgorde %a", }, ["structures:1"] = { cs = "zacatek oddilu (sekce) %a", de = "Begin des Abschnittsblocks %a", en = "begin of sectionblock %a", fr = "début de blocsection %a", it = "inizio del blocco (sezione) %a", nl = "begin van sectieblok %a", no = "starten av blokk %a (seksjon)", ro = "inceput de bloc sectiune %a", }, ["structures:2"] = { cs = "konec oddilu (sekce) %a", de = "Ende des Abschnittsblocks %a", en = "end of sectionblock %a", fr = "fin de blocsection %a", it = "fine del blocco (sezione) %a", nl = "eind van sectieblok %a", no = "slutten av blokk %a (seksjon)", ro = "sfarsit de bloc sectiune %a", }, ["symbols:1"] = { cs = "nacita se soubor symbolu %a", de = "Lade Symboldatei %a", en = "loading symbolset %a", fr = "chargement du jeu de symbole %a", it = "caricamento gruppo di simboli %a", nl = "symboolset %a wordt geladen", no = "leser inn symbolsett %a", ro = "se incarca setul de simboluri %a", }, ["system:1"] = { cs = "nacteni pomocneho souboru odlozeno (typemode)", de = "Laden der Hilfsdatei aufgeschoben (Eingabe-Modus)", en = "loading utility-file postponed (typemode)", fr = "chargement de fichier utilitaire reporté (typemode)", it = "caricamento dei file supplementari posticipato (typemode)", nl = "laden hulpfile uitgesteld (typemode)", no = "innlesning av hjelpefila utsatt (typemode)", ro = "se incarca utilitarul-fisierul este amanat (typemode)", }, ["system:10"] = { cs = "nepouzivejte em v %a", de = "Benutzte kein em in %a", en = "don't use em in %a", fr = "n'utilisez pas em dans %a", it = "non usare em in %a", nl = "gebruik geen em in %a", no = "ikke bruk em i %a", ro = "nu folositi em in %a", }, ["system:11"] = { cs = "vytvarim jednoduchy pomocny soubor", de = "Erstelle einfache Hilfdatei", en = "building simple util", fr = "construction util simple", it = "costruzione di un semplice supplemento", nl = "aanmaken basale hulpfile", no = "lager enkel hjelpefil", ro = "se creeaza un utilitar simplu", }, ["system:12"] = { cs = "pomosny soubor neni setriden, pouzijte texutil", de = "Die Hilfdatei ist nicht sortiert, verwende texutil", en = "the utility-file is not sorted, use texutil", fr = "le fichier utilitaire n'est pas trié, utilise texutil", it = "file di supplemento non ordinato, usare texutil", nl = "de hulpfile is niet gesorteerd, gebruik texutil", no = "hjelpefila er ikke sortert, bruk texutil", ro = "fisierul utilitar nu este sortat, folositi texutil", }, ["system:13"] = { cs = "znacka %a definovana %a", de = "Beschriftung %a definiert %a", en = "mark %a defined %a", fr = "marquage %a defini %a", it = "marcatura %a definita %a", nl = "markering %a gedefinieerd %a", no = "markering %a definert %a", ro = "marcajul %a definit %a", }, ["system:14"] = { cs = "vynucena nova stranka v seznamu na %a", de = "Erzwungendes Seitenumbruch in Liste bei %a", en = "forced newpage in list at %a", fr = "nouvellepage forcée dans la liste à %a", it = "nuova pagina obbligata in lista a %a", nl = "geforceerde paginaovergang in lijst voor %a", no = "tvunget sideskift i liste ved %a", ro = "s-a fortat trecere pa pagina noua in lista la %a", }, ["system:15"] = { cs = "uklada se buffer %a", de = "Speichere Buffer %a", en = "saving buffer %a", fr = "sauvegarde du tampon (buffer) %a", it = "salvataggio del buffer %a", nl = "wegschrijven buffer %a", no = "lagrer Buffer %a", ro = "buffer salvat %a", }, ["system:16"] = { cs = "sazi se buffer %a", de = "Setzte Buffer %a", en = "typesetting buffer %a", fr = "composition du tampon (buffer) %a", it = "composizione del buffer %a", nl = "inlezen buffer %a", no = "tegnsetter buffer %a", ro = "buffer-ul %a s-a cules", }, ["system:17"] = { cs = "sazi se doslovny (verbatim) buffer %a", de = "Setzte tippen-Buffer %a", en = "typesetting verbatim buffer %a", fr = "composition textuelle du tampon (buffer) %a", it = "composizione verbatim del buffer %a", nl = "verbatim inlezen buffer %a", no = "tegnsetter verbatim-buffer %a", ro = "se culege buffer-ul verbatim %a", }, ["system:18"] = { cs = "synonymum %a %a neexistuje", de = "Synonym %a %a existiert nicht", en = "synonym %a %a does not exist", fr = "le synonyme %a %a n'existe pas", it = "sinonimo %a %a non esistente", nl = "synoniem %a %a bestaat niet", no = "synonym %a %a eksisterer ikke", ro = "sinonimul %a %a nu exista", }, ["system:19"] = { cs = "vyznam (synonyma) %a nacten", de = "Bedeutung (synonyme) von %a geladen", en = "meaning (synonyms) of %a loaded", fr = "signification (synonymes) de %a chargée", it = "significato (sinonimi) di %a caricato", nl = "betekenissen (synoniemen) van %a geladen", no = "betydning (synonymer) av %a er lest inn", ro = "intelesul (sinonimele) pentru %a incarcat", }, ["system:2"] = { cs = "%a nacteno", de = "%a geladen", en = "%a loaded", fr = "%a chargé", it = "%a caricato", nl = "%a geladen", no = "%a er lest inn", ro = "%a s-a incarcat", }, ["system:20"] = { cs = "vyznam (trideni) %a nacten", de = "Bedeutung (sortieren) von %a geladen", en = "meaning (sorts) of %a loaded", fr = "signification (tris) de %a chargée", it = "significato (specie) di %a caricato", nl = "betekenissen (sorteren) van %a geladen", no = "betydning (sorterer) av %a er lest inn", ro = "intelesul (ordinea) pentru %a incarcat", }, ["system:21"] = { cs = "pomocny soubor necten", de = "Die Hilfsdatei ist nicht geladen", en = "no utility data is loaded", fr = "pas de données utilitaires chargées", it = "nessuna informazione supplementare caricata", nl = "de hulpfile is niet geladen", no = "hjelpefila er ikke lest inn", ro = "nici o data utilitara nu este incarcata", }, ["system:22"] = { cs = "pouzijte platny pomocny soubor", de = "Benoetige gueltige Hilfsdateie", en = "use a valid utilityfile", fr = "utilise un fichier utilitaire valide", it = "usare un file supplementare valido", nl = "gebruik een goede hulpfile", no = "bruk en gyldig hjelpefil", ro = "folositi un fisier utilitar valid", }, ["system:23"] = { cs = "%a upraveno na %a", de = "%a angeordnet auf %a", en = "%a arranged at %a", fr = "%a arrangé à %a", it = "%a sistemato a %a", nl = "%a gearrangeerd op %a", no = "%a arrangert på %a", ro = "%a aranjat la %a", }, ["system:24"] = { cs = "plovouci bloky", de = "Fliessbloecke", en = "Floatblocks", fr = "blocsflottants", it = "Oggetti mobili", nl = "Plaatsblokken", no = "Flytblokker", ro = "Blocuri", }, ["system:25"] = { cs = "reference", de = "Referenzen", en = "References", fr = "Réferences", it = "Riferimenti", nl = "Verwijzingen", no = "Referanser", ro = "Referinte", }, ["system:26"] = { cs = "registry", de = "Register", en = "Registers", fr = "Registres", it = "Registri", nl = "Registers", no = "Registere", ro = "Registri", }, ["system:27"] = { cs = "verze", de = "Version", en = "Version", fr = "Version", it = "Versione", nl = "Versie", no = "Versjon", ro = "Versiune", }, ["system:4"] = { cs = "prikaz %a je jiz definovan", de = "Befehl %a ist bereits definiert", en = "command %a is already defined", fr = "la commande %a est déjà définie", it = "comando %a già definito", nl = "commando %a is al gedefinieerd", no = "kommando %a er allerede definert", ro = "comanda %a este deja definita", }, ["system:41"] = { cs = "externi soubor %a ve skupine %a neexistuje", de = "Externe Datei %a in Gruppe %a existiert nicht", en = "external file %a in group %a does not exist", fr = "le fichier externe %a du groupe %a n'existe pas", it = "il file esterno %a del gruppo %a non esiste", nl = "externe file %a in groep %a bestaat niet", no = "ekstern fil %a i gruppe %a eksisterer ikke", ro = "fisierul extern %a din grupul %a nu exista", }, ["system:5"] = { cs = "makra z %a nactena", de = "Modul %a geladen", en = "module %a loaded", fr = "module %a chargé", it = "macro del modulo %a caricate", nl = "module %a geladen", no = "makroene i modul %a er lest inn", ro = "macro-urile din modulul %a s-au incarcat", }, ["system:6"] = { cs = "zadna makra v %a nenalezena", de = "Modul %a gefunden", en = "module %a not found", fr = "module %a non trouvé", it = "nessuna macro trovata nel modulo %a", nl = "geen module %a gevonden", no = "ingen makroer funnet i modul %a-", ro = "nu s-au gasit macro-uri in modulul %a", }, ["system:7"] = { cs = "makra z %a jsou jiz nactena", de = "Modul %a bereits geladen", en = "module %a already loaded", fr = "module %a déjà chargé", it = "macro del modulo %a già caricate", nl = "module %a reeds geladen", no = "makroene i modul %a er allerede lest inn", ro = "macro-urile din modulul %a s-au incarcat deja", }, ["system:8"] = { cs = "nova verze pomocneho souboru, je treba druheho behu", de = "Neue Version der Hilfsdatei, zweiter Durchlauf benoetigt", en = "new version of utility file, second pass needed", fr = "nouvelle version de fichier utilitaire, seconde passe nécessaire", it = "nuova versione del file supplementare, seconda passata necessaria", nl = "nieuwe versie hulpfile, tweede run nodig", no = "ny versjon av hjelpefil, andre gjennomkjøring nødvendig", ro = "o noua versiune de fisier utilitar, este necesara o noua trecere", }, ["system:9"] = { cs = "%a nenalezeno/nezpracovano", de = "%a nicht gefunden/verarbeitet", en = "%a not found/processed", fr = "%a non trouvé/traité", it = "%a non trovato/elaborato", nl = "%a niet gevonden/geplaatst", no = "%a ikke funnet/behandlet", ro = "%a nu este gasit/procesat", }, ["system:91"] = { en = "papertray %a", nl = "papierlade %a", }, ["textblocks:1"] = { cs = "nova verze, je treba druhy beh", de = "neue Version, zweiter Durchlauf benoetigt", en = "new version, second pass needed", fr = "nouvelle version, une seconde passe est nécessaire", it = "nuova versione, seconda passata necessaria", nl = "nieuwe versie, tweede run nodig", no = "ny versjon, andre gjennomkjøring nødvendig", ro = "o noua versiune, este nevoie de inca o trecere", }, ["textblocks:10"] = { cs = "%a nacteno a zpracovano", de = "%a geladen und verarbeitet", en = "%a loaded and processed", fr = "%a chargé et traité", it = "%a caricato ed elaborato", nl = "%a geladen en verwerkt", no = "%a lest inn og behandlet", ro = "%a incarcat si procesat", }, ["textblocks:11"] = { cs = "%a nacteno a vysazeno", de = "%a geladen und gesetzt", en = "%a loaded and typeset", fr = "%a chargé et composé", it = "%a caricato e composto", nl = "%a geladen en geplaatst", no = "%a lest inn og tegnsatt", ro = "%a incarcat si cules", }, ["textblocks:12"] = { cs = "%a preskoceno", de = "%a ausgelassen", en = "%a skipped", fr = "%a sauté", it = "%a saltato", nl = "%a overgeslagen", no = "%a utelatt", ro = "%a sarit peste", }, ["textblocks:2"] = { cs = "zapisuji bloky do %a", de = "schreibe Bloecke zu %a", en = "writing blocks to %a", fr = "ecriture des blocs vers %a", it = "scrittura dei blocchi su %a", nl = "wegschrijven blokken naar %a", no = "skriver blokker til %a", ro = "se scriu blocurile in %a", }, ["textblocks:3"] = { cs = "ctu bloky z %a", de = "lese Bloecke von %a", en = "reading blocks from %a", fr = "lecture des blocs en provenance de %a", it = "lettura dei blocchi da %a", nl = "inlezen blokken uit %a", no = "leser blokker fra %a", ro = "se citesc blocurile din %a", }, ["textblocks:4"] = { cs = "je treba druhy beh", de = "zweiter Durchlauf benoetigt", en = "second pass needed", fr = "seconde passe nécessaire", it = "seconda passata necessaria", nl = "er is een tweede run nodig", no = "andre gjennomkjøring nødvendig", ro = "este nevoie de inca o trecere", }, ["textblocks:5"] = { cs = "%a neni skryto", de = "%a nicht verborgen", en = "%a not hidden", fr = "%a non caché", it = "%a non nascosto", nl = "%a niet verborgen", no = "%a ikke skjult", ro = "%a nu este ascuns", }, ["textblocks:6"] = { cs = "%a skryto a zpracovano", de = "%a verborgen und verarbeitet", en = "%a hidden and processed", fr = "%a caché et traité", it = "%a nascosto ed elaborato", nl = "%a verborgen en verwerkt", no = "%a skjult og behandlet", ro = "%a ascuns si procesat", }, ["textblocks:7"] = { cs = "%a skryto", de = "%a verborgen", en = "%a hidden", fr = "%a caché", it = "%a nascosto", nl = "%a verborgen", no = "%a skjult", ro = "%a ascuns", }, ["textblocks:8"] = { cs = "%a vysazeno", de = "%a gesetzt", en = "%a typeset", fr = "%a composé", it = "%a composto", nl = "%a gehandhaafd", no = "%a tegnsatt", ro = "%a cules", }, ["textblocks:9"] = { cs = "%a nevysazeno", de = "%a nicht gesetzt", en = "%a not typeset", fr = "%a non composé", it = "%a non composto", nl = "%a niet gehandhaafd", no = "%a ikke tegnsatt", ro = "%a nu este cules", }, ["unknown: library %a"] = { nl = "onbekend: bibliotheek %a", }, ["used: code %a"] = { nl = "gebruikt: code %a", }, ["used: code %a, preamble %a"] = { nl = "gebruikt: code %a, preamble %a", }, ["used: function %a"] = { nl = "gebruikt: functie %a", }, ["used: preamble %a, state %a, order %a"] = { nl = "gebruikt: preamble %a, status %a, volgorde %a", }, ["vector %a is loaded"] = { nl = "vector %a is geladen", }, ["vector %a is unknown"] = { nl = "onbekende vector %a", }, ["verbatims:1"] = { cs = "soubor %a neexistuje", de = "Datei %a existiert nicht", en = "file %a does not exist", fr = "le fichier %a n'existe pas", it = "il file %a non esiste", nl = "file %a bestaat niet", no = "fil %a eksisterer ikke", ro = "fisierul %a nu exista", }, }, translations = { check = { cs = "kontrola", de = "check", en = "check", fr = "vérification", it = "controllo", nl = "controle", no = "kontroll", ro = "verificari", }, colors = { cs = "barva", de = "farbe", en = "colors", fr = "couleurs", it = "colore", nl = "kleuren", no = "farge", ro = "culori", }, columns = { cs = "sloupce", de = "Spalten", en = "columns", fr = "colonnes", it = "colonne", nl = "kolommen", no = "kolonner", ro = "coloane", }, databases = { cs = "databases", de = "Datenbank", en = "databases", fr = "bases de données", it = "database", nl = "database", no = "databaser", ro = "baze de date", }, figures = { cs = "obrazy", de = "Abbildungen", en = "figures", fr = "figures", it = "figure", nl = "figuren", ro = "figuri", }, files = { cs = "soubory", de = "files", en = "files", fr = "fichiers", it = "file", nl = "files", no = "filer", ro = "fisiere", }, filters = { cs = "filters", de = "filters", en = "filters", fr = "filtre", it = "filtri", nl = "filters", }, floatblocks = { cs = "plovouciobjekty", de = "Gleitobjektbloecke", en = "floatblocks", fr = "blocs de flottants", it = "oggetti mobili", nl = "plaatsblokken", no = "flytblokker", ro = "Blocuri", }, fonts = { cs = "zakladnifont", de = "Fliesstext", en = "bodyfont", fr = "corps de texte", it = "font del corpo", nl = "korps", no = "hovedfont", ro = "corp de litere", }, interactions = { cs = "interakce", de = "Interaktions", en = "interactions", fr = "interactions", it = "interazione", nl = "interacties", no = "interaksjon", ro = "interactiuni", }, languages = { cs = "jazyky", de = "Sprache", en = "languages", fr = "langue", it = "lingua", nl = "talen", no = "sprøk", ro = "limbi", }, layouts = { cs = "layouts", de = "Layouts", en = "layouts", fr = "calque", it = "layouts", nl = "layouts", no = "layouts", ro = "aranjamente", }, numbers = { nl = "nummers", }, publications = { en = "publications", }, references = { cs = "reference", de = "referenzen", en = "references", fr = "réferences", it = "riferimenti", nl = "verwijzingen", no = "referanser", ro = "referinte", }, regimes = { de = "Kodierungen", fr = "encodages", nl = "regimes", }, structures = { cs = "struktury", de = "strukture", en = "structures", fr = "structures", it = "struttura", nl = "structuren", no = "struktur", ro = "structuri", }, symbols = { cs = "symboly", de = "Symbole", en = "symbols", fr = "symboles", it = "simboli", nl = "symbolen", no = "symboler", ro = "simboluri", }, system = { cs = "system", de = "system", en = "system", fr = "système", it = "sistema", nl = "systeem", no = "system", ro = "sistem", }, textblocks = { cs = "textovyblok", de = "textblock", en = "textblocks", fr = "blocs de texte", it = "blocchi di testo", nl = "tekstblokken", no = "tekstblokker", ro = "blocuri de text", }, verbatims = { cs = "verbatim", de = "verbatim", en = "verbatim", fr = "verbatim", it = "verbatim", nl = "typen", no = "verbatim", ro = "verbatim", }, }, } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-pst.lua��������������������������������0000644�0001750�0001750�00000004223�12130411274�024110� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['page-pst'] = { version = 1.001, comment = "companion to page-pst.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: adapt message local format, validstring = string.format, string.valid local sortedkeys = table.sortedkeys local cache = { } local function flush(page) local c = cache[page] if c then for i=1,#c do context.viafile(c[i],format("page.%s",validstring(page,"nopage"))) end cache[page] = nil end end local function setnextpage() local n = next(cache) and sortedkeys(cache)[1] if not n then n = 0 -- nothing in the cache elseif n == 0 then n = -1 -- generic buffer (0) elseif n > 0 then -- upcoming page (realpageno) end tex.setcount("global","c_page_postponed_blocks_next_page",n) end function commands.flushpostponedblocks(page) -- we need to flush previously pending pages as well and the zero -- slot is the generic one so that one is always flushed local t = sortedkeys(cache) local p = tonumber(page) or tex.count.realpageno or 0 for i=1,#t do local ti = t[i] if ti <= p then flush(ti) else break end end setnextpage() end function commands.registerpostponedblock(page) if type(page) == "string" then if string.find(page,"^+") then page = tex.count.realpageno + (tonumber(page) or 1) -- future delta page else page = tonumber(page) or 0 -- preferred page or otherwise first possible occasion end end if not page then page = 0 end local c = cache[page] if not c then c = { } cache[page] = c end c[#c+1] = buffers.raw("postponedblock") buffers.erase("postponedblock") if page == 0 then interfaces.showmessage("layouts",3,#c) else interfaces.showmessage("layouts",3,string.format("%s (realpage: %s)",#c,page)) end setnextpage() end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-jus.lua��������������������������������0000644�0001750�0001750�00000012671�12130411274�024126� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['trac-jus'] = { version = 1.001, comment = "companion to trac-jus.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local checkers = typesetters.checkers or { } typesetters.checkers = checkers ----- report_justification = logs.reporter("visualize","justification") local a_alignstate = attributes.private("alignstate") local a_justification = attributes.private("justification") local tracers = nodes.tracers local setcolor = tracers.colors.set local settransparency = tracers.transparencies.set local new_rule = nodes.pool.rule local new_glue = nodes.pool.glue local new_kern = nodes.pool.kern local concat_nodes = nodes.concat local hpack_nodes = node.hpack local copy_node = node.copy local get_list_dimensions = node.dimensions local hlist_code = nodes.nodecodes.hlist local tex_set_attribute = tex.setattribute local unsetvalue = attributes.unsetvalue local min_threshold = 0 local max_threshold = 0 local function set(n) nodes.tasks.enableaction("mvlbuilders", "typesetters.checkers.handler") nodes.tasks.enableaction("vboxbuilders","typesetters.checkers.handler") tex_set_attribute(a_justification,n or 1) function typesetters.checkers.set(n) tex_set_attribute(a_justification,n or 1) end end local function reset() tex_set_attribute(a_justification,unsetvalue) end checkers.set = set checkers.reset = reset function commands.showjustification(n) set(n) end trackers.register("visualizers.justification", function(v) if v then set(1) else reset() end end) function checkers.handler(head) for current in node.traverse_id(hlist_code,head) do if current[a_justification] == 1 then current[a_justification] = 0 local width = current.width if width > 0 then local list = current.list if list then local naturalwidth, naturalheight, naturaldepth = get_list_dimensions(list) local delta = naturalwidth - width if naturalwidth == 0 or delta == 0 then -- special box elseif delta >= max_threshold then local rule = new_rule(delta,naturalheight,naturaldepth) list = hpack_nodes(list,width,"exactly") if list.glue_set == 1 then setcolor(rule,"trace:dr") settransparency(rule,"trace:dr") else setcolor(rule,"trace:db") settransparency(rule,"trace:db") end rule = hpack_nodes(rule) rule.width = 0 rule.height = 0 rule.depth = 0 current.list = concat_nodes { list, rule } -- current.list = concat_nodes { list, new_kern(-naturalwidth+width), rule } elseif delta <= min_threshold then local alignstate = list[a_alignstate] if alignstate == 1 then local rule = new_rule(-delta,naturalheight,naturaldepth) setcolor(rule,"trace:dc") settransparency(rule,"trace:dc") rule = hpack_nodes(rule) rule.height = 0 rule.depth = 0 rule.width = 0 current.list = nodes.concat { rule, list } elseif alignstate == 2 then local rule = new_rule(-delta/2,naturalheight,naturaldepth) setcolor(rule,"trace:dy") settransparency(rule,"trace:dy") rule = hpack_nodes(rule) rule.width = 0 rule.height = 0 rule.depth = 0 current.list = concat_nodes { copy_node(rule), list, new_kern(delta/2), rule } elseif alignstate == 3 then local rule = new_rule(-delta,naturalheight,naturaldepth) setcolor(rule,"trace:dm") settransparency(rule,"trace:dm") rule = hpack_nodes(rule) rule.height = 0 rule.depth = 0 current.list = concat_nodes { list, new_kern(delta), rule } else local rule = new_rule(-delta,naturalheight,naturaldepth) setcolor(rule,"trace:dg") settransparency(rule,"trace:dg") rule = hpack_nodes(rule) rule.height = 0 rule.depth = 0 rule.width = 0 current.list = concat_nodes { list, new_kern(delta), rule } end end end end end end return head end �����������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-box.mkvi�������������������������������0000644�0001750�0001750�00000023671�12130411274�024267� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-box, %D version=2011.12.05, % moved from other page-* files %D title=\CONTEXT\ Page Macros, %D subtitle=Page Boxing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Boxing} \unprotect %D The often two step approach (_indeed) saves skippign tokens %D which is nicer for tracing. %D Centering the paper area on the print area is determined %D by the \type {top}, \type {bottom}, \type {left} and \type %D {right} parameters. \def\page_boxes_apply_center#box% we could test for a difference (saves packing) {\printpaperwidth \v_page_target_scale\printpaperwidth \relax \printpaperheight\v_page_target_scale\printpaperheight\relax \ifdim\printpaperheight>\ht#box\relax \page_boxes_apply_center_indeed#box% \else\ifdim\printpaperwidth>\wd#box\relax \page_boxes_apply_center_indeed#box% \fi\fi} \def\page_boxes_apply_center_indeed_l_r#box% {\v_page_target_left \v_page_target_left_fill \box#box% \v_page_target_right_fill \v_page_target_right} \def\page_boxes_apply_center_indeed_r_l#box% {\v_page_target_right \v_page_target_right_fill \box#box% \v_page_target_left_fill \v_page_target_left} \def\page_boxes_apply_center_indeed#box% we could test for a difference (saves packing) {\setbox#box\vbox to \printpaperheight {\v_page_target_top \v_page_target_top_fill \hbox to \printpaperwidth {\ifconditional\c_page_target_print_doublesided \doifbothsides {\page_boxes_apply_center_indeed_l_r#box}% {\page_boxes_apply_center_indeed_l_r#box}% {\page_boxes_apply_center_indeed_r_l#box}% \else \page_boxes_apply_center_indeed_l_r#box% \fi}% \par \v_page_target_bottom_fill \v_page_target_bottom}} \def\page_boxes_apply_offset % #box {\ifdim\topoffset=\zeropoint \ifdim\backoffset=\zeropoint \doubleexpandafter\gobbleoneargument \else \doubleexpandafter\page_boxes_apply_offset_indeed \fi \else \expandafter\page_boxes_apply_offset_indeed \fi} \def\page_boxes_apply_offset_indeed#box% {\scratchwidth \wd#box% \scratchheight\ht#box% \scratchdepth \dp#box% \setbox#box\vbox {\offinterlineskip \vskip\topoffset \hskip\doifbothsides\backoffset\backoffset{-\backoffset}% \box#box}% \wd#box\scratchwidth \ht#box\scratchheight \dp#box\scratchdepth} \def\page_boxes_apply_replicate {\ifnum\layoutparameter\c!nx>\plusone \expandafter\page_boxes_apply_replicate_indeed \else\ifnum\layoutparameter\c!ny>\plusone \doubleexpandafter\page_boxes_apply_replicate_indeed \else \doubleexpandafter\gobbleoneargument \fi\fi} \def\page_boxes_apply_replicate_indeed#box% {\setbox#box\vbox {\offinterlineskip \dorecurse{\layoutparameter\c!ny} {\hbox{\dorecurse{\layoutparameter\c!nx}{\copy#box\kern\layoutparameter\c!dx}\unskip}% \vskip\layoutparameter\c!dy} \unskip}} \def\page_boxes_apply_orientate_paper#box% {\ifnum\number\c_page_target_paper_orientation\number\c_page_target_paper_reverse>\zerocount \page_boxes_apply_orientate_indeed\c_page_target_paper_orientation\c_page_target_paper_reverse{#box}% \fi} \def\page_boxes_apply_orientate_print#box% {\ifnum\number\c_page_target_print_orientation\number\c_page_target_print_reverse>\zerocount \page_boxes_apply_orientate_indeed\c_page_target_print_orientation\c_page_target_print_reverse{#box}% \fi} \def\page_boxes_apply_orientate_indeed#odd#even#box% {\setbox#box\vbox {\edef\somerotation{\number\ifdoublesided\ifodd\realpageno#odd\else#even\fi\else#odd\fi}% \dorotatebox\somerotation\hbox{\box#box}}} \def\page_boxes_apply_mirror#box% {\setbox#box\vbox{\mirror{\box#box}}} \def\page_boxes_apply_mirror_paper#box{\ifconditional\c_page_target_paper_mirror\page_boxes_apply_mirror{#box}\fi} \def\page_boxes_apply_mirror_print#box{\ifconditional\c_page_target_print_mirror\page_boxes_apply_mirror{#box}\fi} \let\page_boxes_apply_negate\negatecolorbox \def\page_boxes_apply_negate_print#box% {\ifconditional\c_page_target_print_negate \page_boxes_apply_negate#box% \else\ifconditional\c_page_target_paper_negate \page_boxes_apply_negate#box% \fi\fi} \def\page_boxes_apply_scale#box% {\edef\p_page_layouts_scale{\layoutparameter\c!scale}% \ifdim\p_page_layouts_scale\points=\onepoint \edef\p_page_layouts_sx{\layoutparameter\c!sx}% \edef\p_page_layouts_sy{\layoutparameter\c!sy}% \ifdim\p_page_layouts_sx\points=\onepoint \ifdim\layoutparameter\c!sy\points=\onepoint % no scaling done (and no copying either) \else \page_boxes_apply_scale_indeed\p_page_layouts_sx\p_page_layouts_sy{#box}% \fi \else \page_boxes_apply_scale_indeed\p_page_layouts_sx\p_page_layouts_sy{#box}% \fi \else \page_boxes_apply_scale_indeed\p_page_layouts_scale\p_page_layouts_scale{#box}% \fi} \def\page_boxes_apply_scale_indeed#sx#sy#box% {\setbox#box\vbox{\scale[\c!sx=#sx,\c!sy=#sy]{\box#box}}% can be a fast one \paperwidth #sx\paperwidth \paperheight#sy\paperheight} % \setuppagenumbering[alternative=doublesided] % \setupcolors[state=start] % \setuppapersize[A4][A4,oversized] % \setuplayout[location=middle,clipoffset=5mm] % \setupbackgrounds % [page] % [frame=on,rulethickness=1mm, % backgroundoffset=10mm,background=color,backgroundcolor=red] % \starttext \dorecurse{10}{\input tufte \par} \stoptext % best use private variables \newconditional\c_page_boxes_clip_print \settrue\c_page_boxes_clip_print \def\page_boxes_apply_clip_print_left % box {\ifconditional\c_page_boxes_clip_print \expandafter\page_boxes_apply_clip_print_indeed\expandafter\conditionalfalse \else \expandafter\gobbleoneargument \fi} \def\page_boxes_apply_clip_print_right % box {\ifconditional\c_page_boxes_clip_print \expandafter\page_boxes_apply_clip_print_indeed\expandafter\conditionaltrue \else \expandafter\gobbleoneargument \fi} \def\page_boxes_apply_clip_print_indeed#right#box% can be made more efficient, see other clipper {\scratchoffset\pagebackgroundoffset % can be zero which is valid % maybe another variable \scratchwidth \wd#box% \scratchheight\ht#box% \scratchdepth \dp#box% \setbox#box\hbox {\advance\scratchheight\dimexpr\scratchdepth+2\scratchoffset\relax \advance\scratchwidth \scratchoffset \ifconditional#right\relax \scratchdimen-\scratchoffset \kern\scratchdimen \else \scratchdimen\zeropoint \fi \lower\scratchoffset\hbox {\clip [\c!hoffset=\scratchdimen, \c!voffset=-\scratchoffset, \c!width=\scratchwidth, \c!height=\scratchheight]% {\box#box}}}% \wd#box\scratchwidth \ht#box\scratchheight \dp#box\scratchdepth} \def\page_boxes_apply_clip_paper {\scratchoffset\layoutparameter\c!clipoffset\relax \ifdim\scratchoffset>\zeropoint \expandafter\page_boxes_apply_clip_paper_indeed \else \expandafter\gobbleoneargument \fi} \def\page_boxes_apply_clip_paper_indeed#box% {\scratchwidth \wd#box% \scratchheight\ht#box% \scratchdepth \dp#box% \setbox#box\hbox {\advance\scratchheight\dimexpr\scratchdepth+2\scratchoffset\relax \advance\scratchwidth \scratchoffset \doifbothsides {\advance\scratchwidth\scratchoffset \scratchdimen-\scratchoffset \kern\scratchdimen}% {\scratchdimen\zeropoint} {\scratchdimen-\scratchoffset \kern\scratchdimen}% \lower\scratchoffset\hbox {\clip [\c!hoffset=\scratchdimen, \c!voffset=-\scratchoffset, \c!width=\scratchwidth, \c!height=\scratchheight]% {\box#box}}}% \wd#box\scratchwidth \ht#box\scratchheight \dp#box\scratchdepth} % nearly always some displacement so no speedup test needed \def\page_boxes_apply_offsets#1% {\setbox#1\vbox to \paperheight {\hsize\paperwidth \vskip\topspace \doifbothsides {\hskip\backspace} {\hskip\backspace} {\hskip\dimexpr\paperwidth-\backspace-\makeupwidth\relax}% \box#1}% \dp#1\zeropoint} % \let\page_boxes_apply_clip_paper \gobbleoneargument % \let\page_boxes_apply_clip_print_left \gobbleoneargument % \let\page_boxes_apply_clip_print_right\gobbleoneargument %D This is rather specialized: \newconditional\c_page_areas_enabled \newbox \b_page_areas_registered \def\enabletextarearegistration {\global\settrue\c_page_areas_enabled} \def\page_areas_registered_box {\ifconditional\c_page_areas_enabled \expandafter\page_areas_registered_box_indeed \else \expandafter\page_areas_registered_box_forget \fi} \def\page_areas_registered_box_forget#1#2#3% #1=lower-dp #2=correct-ht #3=box {\box#3} \def\page_areas_registered_box_indeed#1#2#3% #1=lower-dp #2=correct-ht #3=box {\anch_mark_flow_box{#3}} \def\page_areas_register_boxed#1% {\begingroup \setbox\scratchbox\vbox{#1}% \wd\scratchbox\makeupwidth % somehow a space creeps in \vbox{\page_areas_registered_box00\scratchbox}% 0 0 will go \endgroup} % \def\page_areas_register_direct#1% % {\xypos{pbd:\realfolio:b}% we could save bytes by only saving the y % \endgraf % \begingroup % \scratchdimen\dimexpr\MPy{pbd:\realfolio:b}-\MPy{pbd:\realfolio:e}\relax % \setbox\scratchbox\emptyhbox % \wd\scratchbox\makeupwidth % \ht\scratchbox\scratchdimen % \vsmash{\page_areas_registered_box00\scratchbox}% % \endgroup % #1% % \endgraf % \xypos{pbd:\realfolio:e}} \def\page_areas_register_direct#1#2% {\scratchdepth\dp#2% \dp#2\strutdepth \anch_mark_flow_only{#2}% \dp#2\scratchdepth #1#2} \protect \endinput �����������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql.lua��������������������������������0000644�0001750�0001750�00000034422�12130411274�024146� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['util-sql'] = { version = 1.001, comment = "companion to m-sql.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: templates as table (saves splitting) -- Of course we could use a library but we don't want another depedency and there is -- a bit of flux in these libraries. Also, we want the data back in a way that we -- like. -- -- This is the first of set of sql related modules that are providing functionality -- for a web based framework that we use for typesetting (related) services. We're -- talking of session management, job ticket processing, storage, (xml) file processing -- and dealing with data from databases (often ambitiously called database publishing). -- -- There is no generic solution for such services, but from our perspective, as we use -- context in a regular tds tree (the standard distribution) it makes sense to put shared -- code in the context distribution. That way we don't need to reinvent wheels every time. -- We use the template mechanism from util-tpl which inturn is just using the dos cq -- windows convention of %whatever% variables that I've used for ages. -- util-sql-imp-client.lua -- util-sql-imp-library.lua -- util-sql-imp-swiglib.lua -- util-sql-imp-lmxsql.lua -- local sql = require("util-sql") -- -- local converter = sql.makeconverter { -- { name = "id", type = "number" }, -- { name = "data",type = "string" }, -- } -- -- local execute = sql.methods.swiglib.execute -- -- local execute = sql.methods.library.execute -- -- local execute = sql.methods.client.execute -- -- local execute = sql.methods.lmxsql.execute -- -- result = execute { -- presets = { -- host = "localhost", -- username = "root", -- password = "test", -- database = "test", -- id = "test", -- forces persistent session -- }, -- template = "select * from `test` where `id` > %criterium% ;", -- variables = { -- criterium = 2, -- }, -- converter = converter -- } -- -- inspect(result) local format, match = string.format, string.match local random = math.random local rawset, setmetatable, getmetatable, load, type = rawset, setmetatable, getmetatable, load, type local P, S, V, C, Cs, Ct, Cc, Cg, Cf, patterns, lpegmatch = lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.Cc, lpeg.Cg, lpeg.Cf, lpeg.patterns, lpeg.match local concat = table.concat local osuuid = os.uuid local osclock = os.clock or os.time local ostime = os.time local setmetatableindex = table.setmetatableindex local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end) local trace_queries = false trackers.register("sql.queries",function(v) trace_queries = v end) local report_state = logs.reporter("sql") -- trace_sql = true -- trace_queries = true utilities.sql = utilities.sql or { } local sql = utilities.sql local replacetemplate = utilities.templates.replace local loadtemplate = utilities.templates.load local methods = { } sql.methods = methods local helpers = { } sql.helpers = helpers local serialize = table.fastserialize local deserialize = table.deserialize sql.serialize = serialize sql.deserialize = deserialize helpers.serialize = serialize -- bonus helpers.deserialize = deserialize -- bonus local defaults = { __index = { resultfile = "result.dat", templatefile = "template.sql", queryfile = "query.sql", variables = { }, username = "default", password = "default", host = "localhost", port = 3306, database = "default", }, } setmetatableindex(sql.methods,function(t,k) report_state("start loading method %a",k) require("util-sql-imp-"..k) report_state("loading method %a done",k) return rawget(t,k) end) -- converters local converters = { } sql.converters = converters local function makeconverter(entries,celltemplate,wraptemplate) local shortcuts = { } local assignments = { } local key = false for i=1,#entries do local entry = entries[i] local name = entry.name local kind = entry.type or entry.kind local value = format(celltemplate,i,i) if kind == "boolean" then assignments[#assignments+1] = format("[%q] = booleanstring(%s),",name,value) elseif kind == "number" then assignments[#assignments+1] = format("[%q] = tonumber(%s),",name,value) elseif type(kind) == "function" then local c = #converters + 1 converters[c] = kind shortcuts[#shortcuts+1] = format("local fun_%s = converters[%s]",c,c) assignments[#assignments+1] = format("[%q] = fun_%s(%s),",name,c,value) elseif type(kind) == "table" then local c = #converters + 1 converters[c] = kind shortcuts[#shortcuts+1] = format("local tab_%s = converters[%s]",c,c) assignments[#assignments+1] = format("[%q] = tab_%s[%s],",name,#converters,value) elseif kind == "deserialize" then assignments[#assignments+1] = format("[%q] = deserialize(%s),",name,value) elseif kind == "key" then -- hashed instead of indexed key = value elseif kind == "entry" then -- so we can (efficiently) extend the hashed table local default = entry.default or "" if type(default) == "string" then assignments[#assignments+1] = format("[%q] = %q,",name,default) else assignments[#assignments+1] = format("[%q] = %s,",name,tostring(default)) end else assignments[#assignments+1] = format("[%q] = %s,",name,value) end end local code = format(wraptemplate,concat(shortcuts,"\n"),key and "{ }" or "data",key or "i",concat(assignments,"\n ")) -- print(code) local func = load(code) return func and func() end function sql.makeconverter(entries) local fields = { } for i=1,#entries do fields[i] = format("`%s`",entries[i].name) end fields = concat(fields, ", ") local converter = { fields = fields } setmetatableindex(converter, function(t,k) local sqlmethod = methods[k] local v = makeconverter(entries,sqlmethod.celltemplate,sqlmethod.wraptemplate) t[k] = v return v end) return converter, fields end -- helper for libraries: local function validspecification(specification) local presets = specification.presets if type(presets) == "string" then presets = dofile(presets) end if type(presets) == "table" then setmetatable(presets,defaults) setmetatable(specification,{ __index = presets }) else setmetatable(specification,defaults) end return true end helpers.validspecification = validspecification local whitespace = patterns.whitespace^0 local eol = patterns.eol local separator = P(";") local escaped = patterns.escaped local dquote = patterns.dquote local squote = patterns.squote local dsquote = squote * squote ---- quoted = patterns.quoted local quoted = dquote * (escaped + (1-dquote))^0 * dquote + squote * (escaped + dsquote + (1-squote))^0 * squote local comment = P("--") * (1-eol) / "" local query = whitespace * Cs((quoted + comment + 1 - separator)^1 * Cc(";")) * whitespace local splitter = Ct(query * (separator * query)^0) helpers.querysplitter = splitter -- I will add a bit more checking. local function validspecification(specification) local presets = specification.presets if type(presets) == "string" then presets = dofile(presets) end if type(presets) == "table" then local m = getmetatable(presets) if m then setmetatable(m,defaults) else setmetatable(presets,defaults) end setmetatable(specification,{ __index = presets }) else setmetatable(specification,defaults) end local templatefile = specification.templatefile or "query" local queryfile = specification.queryfile or presets.queryfile or file.nameonly(templatefile) .. "-temp.sql" local resultfile = specification.resultfile or presets.resultfile or file.nameonly(templatefile) .. "-temp.dat" specification.queryfile = queryfile specification.resultfile = resultfile if trace_sql then report_state("template file: %s",templatefile or "<none>") report_state("query file: %s",queryfile) report_state("result file: %s",resultfile) end return true end local function preparetemplate(specification) local template = specification.template if template then local query = replacetemplate(template,specification.variables,'sql') if not query then report_state("error in template: %s",template) elseif trace_queries then report_state("query from template: %s",query) end return query end local templatefile = specification.templatefile if templatefile then local query = loadtemplate(templatefile,specification.variables,'sql') if not query then report_state("error in template file %a",templatefile) elseif trace_queries then report_state("query from template file %a: %s",templatefile,query) end return query end report_state("no query template or templatefile") end helpers.preparetemplate = preparetemplate -- -- -- we delay setting this -- -- -- local currentmethod local function firstexecute(...) local execute = methods[currentmethod].execute sql.execute = execute return execute(...) end function sql.setmethod(method) currentmethod = method sql.execute = firstexecute end sql.setmethod("library") -- helper: function sql.usedatabase(presets,datatable) local name = datatable or presets.datatable if name then local method = presets.method and sql.methods[presets.method] or sql.methods.client local base = presets.database or "test" local basename = format("`%s`.`%s`",base,name) local execute = nil local m_execute = method.execute if method.usesfiles then local queryfile = presets.queryfile or format("%s-temp.sql",name) local resultfile = presets.resultfile or format("%s-temp.dat",name) execute = function(specification) -- variables template if not specification.presets then specification.presets = presets end if not specification.queryfile then specification.queryfile = queryfile end if not specification.resultfile then specification.resultfile = queryfile end return m_execute(specification) end else execute = function(specification) -- variables template if not specification.presets then specification.presets = presets end return m_execute(specification) end end local function unpackdata(records,name) if records then name = name or "data" for i=1,#records do local record = records[i] local data = record[name] if data then record[name] = deserialize(data) end end end end return { presets = preset, base = base, name = name, basename = basename, execute = execute, serialize = serialize, deserialize = deserialize, unpackdata = unpackdata, } else report_state("missing name in usedatabase specification") end end -- local data = utilities.sql.prepare { -- templatefile = "test.sql", -- variables = { }, -- host = "...", -- username = "...", -- password = "...", -- database = "...", -- } -- local presets = { -- host = "...", -- username = "...", -- password = "...", -- database = "...", -- } -- -- local data = utilities.sql.prepare { -- templatefile = "test.sql", -- variables = { }, -- presets = presets, -- } -- local data = utilities.sql.prepare { -- templatefile = "test.sql", -- variables = { }, -- presets = dofile(...), -- } -- local data = utilities.sql.prepare { -- templatefile = "test.sql", -- variables = { }, -- presets = "...", -- } -- for i=1,10 do -- local dummy = uuid() -- else same every time, don't ask -- end sql.tokens = { length = 42, -- but in practice we will reserve some 50 characters new = function() return format("%s-%x06",osuuid(),random(0xFFFFF)) -- 36 + 1 + 6 = 42 end, } -- -- -- -- local func, code = sql.makeconverter { -- { name = "a", type = "number" }, -- { name = "b", type = "string" }, -- { name = "c", type = "boolean" }, -- { name = "d", type = { x = "1" } }, -- { name = "e", type = os.fulltime }, -- } -- -- print(code) -- -- -- if tex and tex.systemmodes then local droptable = table.drop local threshold = 16 * 1024 -- use slower but less memory hungry variant function sql.prepare(specification,tag) -- could go into tuc if needed -- todo: serialize per column local tag = tag or specification.tag or "last" local filename = format("%s-sql-result-%s.tuc",tex.jobname,tag) if tex.systemmodes["first"] then local data, keys = sql.execute(specification) if not data then data = { } end if not keys then keys = { } end io.savedata(filename,droptable({ data = data, keys = keys },#keys*#data>threshold)) return data, keys else local result = table.load(filename) return result.data, result.keys end end else sql.prepare = sql.execute end return sql ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-dim.mkvi�������������������������������0000644�0001750�0001750�00000011460�12130411274�024306� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=core-gen, %D version=1995.10.10, %D title=\CONTEXT\ Core Macros, %D subtitle=General, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / General} \unprotect %D \macros %D {assigndimension,assignalfadimension} %D %D The following commands are used to process keyword based %D dimension setters. %D %D \starttyping %D \assigndimension %D {<value>|small|medium|big|-small|-medium|-big|none} %D {\dimension} %D {value small} %D {value medium} %D {value big} %D \stoptyping %D %D The given keyword determines the result. \installcorenamespace{dimensionnormal} \setvalue{\??dimensionnormal \v!none }#value#dimension#small#medium#big{#dimension\zeropoint} \setvalue{\??dimensionnormal \empty }#value#dimension#small#medium#big{#dimension\zeropoint} \setvalue{\??dimensionnormal \v!small }#value#dimension#small#medium#big{#dimension=#small\relax} \setvalue{\??dimensionnormal \v!medium}#value#dimension#small#medium#big{#dimension=#medium\relax} \setvalue{\??dimensionnormal \v!big }#value#dimension#small#medium#big{#dimension=#big\relax} \setvalue{\??dimensionnormal-\v!small }#value#dimension#small#medium#big{#dimension=-#small\relax} \setvalue{\??dimensionnormal-\v!medium}#value#dimension#small#medium#big{#dimension=-#medium\relax} \setvalue{\??dimensionnormal-\v!big }#value#dimension#small#medium#big{#dimension=-#big\relax} \setvalue{\??dimensionnormal\s!unknown}#value#dimension#small#medium#big{#dimension=#value\relax} \unexpanded\def\assigndimension#value% {\csname\??dimensionnormal\ifcsname\??dimensionnormal#value\endcsname#value\else\s!unknown\fi\endcsname{#value}} %D The next variant assigns to a macro instead of a dimension. %D %D \starttyping %D \assignalfadimension %D {<value>|small|medium|big|none} %D {\macro} %D {value small} %D {value medium} %D {value big} %D \stoptyping %D %D This one is used for factors. \installcorenamespace{dimensionalfa} \setvalue{\??dimensionalfa\v!none }#value#macro#small#medium#big{\let #macro\!!zerocount} \setvalue{\??dimensionalfa\v!small }#value#macro#small#medium#big{\edef#macro{#small}} \setvalue{\??dimensionalfa\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}} \setvalue{\??dimensionalfa\v!big }#value#macro#small#medium#big{\edef#macro{#big}} \setvalue{\??dimensionalfa\s!unknown}#value#macro#small#medium#big{\edef#macro{#value}} \unexpanded\def\assignalfadimension#value% {\csname\??dimensionalfa\ifcsname\??dimensionalfa#value\endcsname#value\else\s!unknown\fi\endcsname{#value}} %D \macros %D {assignvalue} %D %D A variant that does not assume dimenions ios the following: %D %D \starttyping %D \assignvalue %D {<value>|small|medium|big} %D {\macro} %D {value small} %D {value medium} %D {value big} %D \stoptyping \installcorenamespace{dimensionvalue} \setvalue{\??dimensionvalue\v!small }#value#macro#small#medium#big{\edef#macro{#small}} \setvalue{\??dimensionvalue\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}} \setvalue{\??dimensionvalue\v!big }#value#macro#small#medium#big{\edef#macro{#big}} \setvalue{\??dimensionvalue\s!unknown}#value#macro#small#medium#big{\edef#macro{#value}} \unexpanded\def\assignvalue#value% {\csname\??dimensionvalue\ifcsname\??dimensionvalue#value\endcsname#value\else\s!unknown\fi\endcsname{#value}} %D \macros %D {assignwidth} %D %D Een breedte van een opgegeven tekst kan worden berekend en %D toegekend aan een \DIMENSION\ met: %D %D \starttyping %D \assignwidth %D {<value>|fit|broad} %D {\dimension} %D {text} %D {extra} %D \stoptyping \installcorenamespace{dimensionwidth} \newbox\b_assign_width \setvalue{\??dimensionwidth }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width \setbox\b_assign_width\emptybox} \setvalue{\??dimensionwidth\v!fit }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width \setbox\b_assign_width\emptybox} \setvalue{\??dimensionwidth\v!broad }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\dimexpr\wd\b_assign_width+#extra\relax \setbox\b_assign_width\emptybox} \setvalue{\??dimensionwidth\s!unknown}#value#dimension#content#extra{#dimension=#value\relax} \unexpanded\def\assignwidth#value% {\csname\??dimensionwidth\ifcsname\??dimensionwidth#value\endcsname#value\else\s!unknown\fi\endcsname{#value}} \protect \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-lin.mkii�������������������������������0000644�0001750�0001750�00000024035�11754241457�024256� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-lin, % copied from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Line Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Line Numbering} \unprotect \newif\ifnumberinglines \newif\iftypesettinglines \newcount\linenumber \newcount\linestepper \chardef\linenumberlocation=0 \newtoks\beforeeverylinenumbering \newtoks\aftereverylinenumbering % het gebruik van \setlocalreference scheelt een hash entry \def\dodoshowlinenumber % for use elsewhere, to be extended {\doplacelinenumber \global\advance\linenumber \plusone} \def\completelinenumber {\@@rnleft\convertnumber\@@rnconversion\linenumber\@@rnright} \def\dosetuplinenumbering[#1]% {\getparameters[\??rn][\c!start=1,\c!step=1,#1]% \global\linenumber\plusone} \def\setuplinenumbering {\dosingleargument\dosetuplinenumbering} \def\dostartnummerenLINE {\EveryPar{\placelinenumber}} % why not append to everypar ? better \def\dostopnummerenLINE {\the\aftereverylinenumbering \egroup} \def\dostartnummerenVERB {\EveryLine{\placelinenumber}} \def\dostopnummerenVERB {\the\aftereverylinenumbering \egroup} \newevery \everylinenumber \relax \def\dodoplacelinenumber {% beware of em's, the font is already switched ! \setbox\scratchbox\hbox {\setbox0\hbox{\@@rncommand{\completelinenumber}}\vsmashbox0% \ifcase\linenumberlocation \iftypesettinglines % hack \expandafter\llap \else \expandafter\rlap \fi{\hbox to \@@rnwidth{\box0\hss}}% was \llap, nog testen !! \or \inleftmargin {\forgetall \doifelse\@@rnwidth\v!margin {\hsize\leftmarginwidth}{\hsize\@@rnwidth}% \alignedline\@@rnalign\v!right{\box0\hskip\@@rndistance}}% \else \inrightmargin {\forgetall \doifelse\@@rnwidth\v!margin {\hsize\rightmarginwidth}{\hsize\@@rnwidth}% \alignedline\@@rnalign\v!left{\hskip\@@rndistance\box0}}% \fi}% \vsmashbox\scratchbox \box\scratchbox \the\everylinenumber} \def\complexstartlinenumbering[#1]% {\doifnot{#1}\v!continue {\doifnumberelse{#1} {\global\linenumber#1\relax} {\doifelsenothing\@@rnstart {\global\linenumber\plusone} {\global\linenumber\@@rnstart}}}% \chardef\linenumberlocation\zerocount \processaction [\@@rnlocation] [ \v!inmargin=>\chardef\linenumberlocation\plusone, \v!inleft=>\chardef\linenumberlocation\plusone, \v!inright=>\chardef\linenumberlocation\plustwo, \v!margin=>\chardef\linenumberlocation\plusone]% % \v!text=>\chardef\linenumberlocation\zerocount, %\s!unknown=>\chardef\linenumberlocation\zerocount, %\s!default=>\chardef\linenumberlocation\zerocount]% \doifnot\@@rnwidth\v!margin {\freezedimenmacro\@@rnwidth \ifcase\linenumberlocation % text \advance\leftskip\@@rnwidth\relax \fi}% \freezedimenmacro\@@rndistance \chardef\@@rn@@rnmethod \ifprocessingverbatim\zerocount\else\iftypesettinglines\plusone\else\plustwo\fi\fi \processaction [\@@rnmethod] [ \v!type=>\chardef\@@rn@@rnmethod\zerocount, \v!line=>\chardef\@@rn@@rnmethod\plusone, \v!text=>\chardef\@@rn@@rnmethod\plustwo, \v!file=>\chardef\@@rn@@rnmethod\plusthree]% \ifcase\@@rn@@rnmethod % verbatim, line by line \typesettinglinestrue \let\dostartnummeren\dostartnummerenVERB \let\stoplinenumbering\dostopnummerenVERB \def\placelinenumber {\doplacelinenumber \global\advance\linenumber \plusone}% \or % text, line by line \let\dostartnummeren\dostartnummerenLINE \let\stoplinenumbering\dostopnummerenLINE \def\placelinenumber {\doplacelinenumber \global\advance\linenumber \plusone}% \or % text, whole lot \let\dostartnummeren\dostartnummerenPAR \let\stoplinenumbering\dostopnummerenPAR \def\placelinenumber {\global\advance\linenumber \minusone \doplacelinenumber}% \or % verbatim, selective line by line \typesettinglinestrue \let\dostartnummeren\dostartnummerenVERB \let\stoplinenumbering\dostopnummerenVERB \def\placelinenumber {\global\linenumber\verbatimlinenumber \global\advance\linenumber \minusone \doplacelinenumber}% \fi \dostartnummeren} \def\startlinenumbering {\bgroup \the\beforeeverylinenumbering \numberinglinestrue \complexorsimpleempty\startlinenumbering} \def\donoplacelinenumber {\the\everylinenumber} \def\doplacelinenumber {\ifnum\linenumber<\@@rnstart\relax \donoplacelinenumber \else \ifnum\numexpr(\linenumber/\@@rnstep)*\@@rnstep\relax=\linenumber \doattributes\??rn\c!style\c!color\dodoplacelinenumber \else \donoplacelinenumber \fi \fi} \def\someline[#1]% {\dolinereference0[#1]\ignorespaces} \def\startline[#1]% {\dolinereference1[#1]\ignorespaces} \def\stopline[#1]% {\removelastspace\dolinereference2[#1]} \def\inline#1[#2]% {\doifelsenothing{#1} {\doifinstringelse{--}\currenttextreference {\in{\leftlabeltext\v!lines}{\rightlabeltext\v!lines}[\@@rnprefix#2]} {\in{\leftlabeltext\v!line }{\rightlabeltext\v!line }[\@@rnprefix#2]}} {\in{#1}[\@@rnprefix#2]}} \def\dostartnummerenPAR {\beginofshapebox \doglobal\newcounter\linereference} % localcrossref heroverwegen \def\setlinereference#1#2#3#4% {\setxvalue{lrf:#1}{\noexpand\dogetlinereference{#2}{#3}{#4}}} \def\getlinereference#1% {\getvalue{lrf:#1}} \def\dogetlinereference#1#2#3% {\edef\linereferencename{#1}% \edef\linereferenceline{#2}% \edef\linereferenceplus{#3}} % 1 xxx xxx xxx xxx xxx xxx xxx % 2 xxx yyy yyy yyy yyy yyy yyy <= start y % 3 yyy yyy yyy yyy yyy yyy yyy % 4 yyy yyy yyy yyy yyy xxx xxx <= stop y % 5 xxx xxx xxx xxx xxx xxx xxx \def\dolinereference#1[#2]% {\bgroup \dimen0=\strutdp \doif\@@rnreferencing\v!on {\doglobal\increment\linereference % start 1=>(n=y,l=0,p=1) % stop 2=>(n=y,l=0,p=2) \setlinereference{\linereference}{\@@rnprefix#2}{0}{#1}% \advance\dimen0 \linereference sp}% \prewordbreak \vrule \!!width \zeropoint \!!depth \dimen0 \!!height \zeropoint \prewordbreak \egroup} \def\dostopnummerenPAR % dp's -> openstrutdepth {\endofshapebox \checkreferences \linestepper\zerocount \reshapebox{\global\advance\linestepper \plusone}% \global\advance\linenumber \linestepper \doifelse\@@rnreferencing\v!on {\reshapebox % We are going back! {\global\advance\linenumber \minusone \dimen0=\dp\shapebox \advance\dimen0 -\strutdp\relax \ifdim\dimen0>\zeropoint % 1=>4 | 2=>4 1=>2 % start 1=>(n=y,l=2,p=1) % stop 2=>(n=y,l=4,p=2) \dostepwiserecurse\plusone{\number\dimen0}\plusone {\getlinereference\recurselevel \setlinereference\recurselevel {\linereferencename}{\the\linenumber}{\linereferenceplus}}% \fi}% \global\advance\linenumber \linestepper \ifnum\linereference>\zerocount % anders vreemde loop in paragraphs+recurse \dorecurse\linereference {\getlinereference\recurselevel \ifnum\linereferenceplus=2 % stop % ref y: text = 4 / Kan dit buiten referentie mechanisme om? \expanded{\setlocalcrossreference {\referenceprefix\linereferencename}{}{}{\linereferenceline}}% \fi}% \dorecurse\linereference {\getlinereference\recurselevel \ifnum\linereferenceplus<2 % start / lone \ifnum\linereferenceplus=1 % start \getreferenceelements\linereferencename % text = 4 \ifnum\linereferenceline<0\currenttextreference\relax % 0 prevents error \edef\linereferenceline{\linereferenceline--\currenttextreference}% \fi \fi \expanded{\setlocalcrossreference {\referenceprefix\linereferencename}{}{}{\linereferenceline}}% \fi}% \global\let\scratchline\linenumber % We are going back! \reshapebox {\doglobal\decrement\scratchline \hbox {\dorecurse\linereference {\getlinereference\recurselevel \getreferenceelements\linereferencename \beforesplitstring\currenttextreference--\at--\to\firstline \ifnum\firstline=\scratchline\relax % beter een rawtextreference, i.e. expanded % \textreference[\linereferencename]{\currenttextreference}% \rawtextreference\s!lin\linereferencename\currenttextreference \expanded{\setlocalcrossreference {\referenceprefix\linereferencename}{}{}{0}}% ==done \fi}% \dimen0\dp\shapebox \advance\dimen0 -\strutdp\relax \ifdim\dimen0>\zeropoint \dp\shapebox\strutdp \fi \placelinenumber\box\shapebox}}% no \strut ! \else \reshapebox{\hbox{\placelinenumber\box\shapebox}}% no \strut ! \fi} {\reshapebox{\global\advance\linenumber \minusone}% \global\advance\linenumber \linestepper \reshapebox{\hbox{\placelinenumber\box\shapebox}}}% no \strut ! \global\advance\linenumber \linestepper \flushshapebox \the\aftereverylinenumbering \egroup} \setuplinenumbering [\c!method=, \c!conversion=\v!numbers, \c!start=1, \c!step=1, \c!location=\v!margin, \c!style=, \c!color=, \c!prefix=, \c!referencing=\v!on, \c!width=\ifcase\linenumberlocation2em\else\v!margin\fi, \c!left=, \c!right=, \c!command=, \c!distance=\zeropoint, \c!align=\ifcase\linenumberlocation\v!right\or\v!right\or\v!left\fi] \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-alt.mkii�������������������������������0000644�0001750�0001750�00000013514�11754241457�024261� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=lang-alt, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Altaic Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Altaic Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. % Uigur, Uzbek % Azeri/Azerbaijani, Chuvash, Turkish, Turkmen % Kazakh, Kazar, Kireghiz, Noghay, Talar % Buryat, Kalmuck, Khalkha % % Turkmen translation by Nazar Annagurban <nazartm at gmail.com> 18. March 2010 \unprotect \installlanguage [\s!tr] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\ ,\v!month,\ ,\v!day}] \installlanguage [\s!tk] [\c!spacing=\v!broad, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\ ,\v!month,\ ,\v!day} \s!patterns=\s!tk, \s!lefthyphenmin=1, \s!righthyphenmin=2] \installlanguage [turkish] [\s!tr] \installlanguage [turkmen] [\s!tk] \setupheadtext [\s!tr] [\v!content=Fihrist] \setupheadtext [\s!tk] [\v!content=Mazmuny] \setupheadtext [\s!tr] [\v!tables=Tablolar] \setupheadtext [\s!tk] [\v!tables=Tablisalar] \setupheadtext [\s!tr] [\v!figures=\Scedilla ekiller] \setupheadtext [\s!tk] [\v!figures=Suratlar] \setupheadtext [\s!tr] [\v!graphics=Grafikler] \setupheadtext [\s!tk] [\v!graphics=Grafikler] \setupheadtext [\s!tr] [\v!intermezzi=...] \setupheadtext [\s!tk] [\v!intermezzi=Arakesmeler] \setupheadtext [\s!tr] [\v!index=\Idotaccent ndex] \setupheadtext [\s!tk] [\v!index=Indeks] \setupheadtext [\s!tr] [\v!abbreviations=K\dotlessi saltmalar] \setupheadtext [\s!tk] [\v!abbreviations=Gysgaltmalar] \setupheadtext [\s!tr] [\v!logos=Logolar] \setupheadtext [\s!tk] [\v!logos=Logolar] \setupheadtext [\s!tr] [\v!units=Birimler] \setupheadtext [\s!tk] [\v!units=Birlikler] \setuplabeltext [\s!tr] [\v!table=Tablo ] \setuplabeltext [\s!tk] [\v!table=Tablisa] \setuplabeltext [\s!tr] [\v!figure=\Scedilla ekil ] \setuplabeltext [\s!tk] [\v!figure=Surat] \setuplabeltext [\s!tr] [\v!intermezzo=... ] \setuplabeltext [\s!tk] [\v!intermezzo=Arakesme] \setuplabeltext [\s!tr] [\v!graphic=Grafik] \setuplabeltext [\s!tk] [\v!graphic=Grafik] \setuplabeltext [\s!tr] [\v!chapter=] \setuplabeltext [\s!tk] [\v!chapter=Bap] \setuplabeltext [\s!tr] [\v!section=] \setuplabeltext [\s!tk] [\v!section=] \setuplabeltext [\s!tr] [\v!subsection=] \setuplabeltext [\s!tk] [\v!subsection=] \setuplabeltext [\s!tr] [\v!subsubsection=] \setuplabeltext [\s!tr] [\v!subsubsubsection=] \setuplabeltext [\s!tk] [\v!subsubsubsection=] \setuplabeltext [\s!tr] [\v!appendix=] \setuplabeltext [\s!tk] [\v!appendix=Go\scedilla ma\ccedilla a] \setuplabeltext [\s!tr] [\v!part=Cilt ] \setuplabeltext [\s!tk] [\v!part=B\odiaeresis l\udiaeresis m] \setuplabeltext [\s!tr] [\v!line=sat\dotlessi r ] \setuplabeltext [\s!tk] [\v!line=setir] \setuplabeltext [\s!tr] [\v!lines=sat\dotlessi rlar ] \setuplabeltext [\s!tk] [\v!lines=setirler] \setuplabeltext [\s!tk] [\v!january=\yacute anwar] \setuplabeltext [\s!tk] [\v!february=fewral] \setuplabeltext [\s!tk] [\v!march=mart] \setuplabeltext [\s!tk] [\v!april=aprel] \setuplabeltext [\s!tk] [\v!may=ma\yacute] \setuplabeltext [\s!tk] [\v!june=i\yacute un] \setuplabeltext [\s!tk] [\v!july=i\yacute ul] \setuplabeltext [\s!tk] [\v!august=awgust] \setuplabeltext [\s!tk] [\v!september=sent\yacute abr] \setuplabeltext [\s!tk] [\v!october=okt\yacute abr] \setuplabeltext [\s!tk] [\v!november=no\yacute abr] \setuplabeltext [\s!tk] [\v!december=dekabr] \setuplabeltext [\s!tr] [\v!january=ocak] \setuplabeltext [\s!tr] [\v!february=\Scedilla ubat] \setuplabeltext [\s!tr] [\v!march=mart] \setuplabeltext [\s!tr] [\v!april=nisan] \setuplabeltext [\s!tr] [\v!may=may\dotlessi s] \setuplabeltext [\s!tr] [\v!june=haziran] \setuplabeltext [\s!tr] [\v!july=temmuz] \setuplabeltext [\s!tr] [\v!august=a\gbreve ustos] \setuplabeltext [\s!tr] [\v!september=eyl\udiaeresis l] \setuplabeltext [\s!tr] [\v!october=ekim] \setuplabeltext [\s!tr] [\v!november=kas\dotlessi m] \setuplabeltext [\s!tr] [\v!december=aral\dotlessi k] \setuplabeltext [\s!tr] [\v!sunday=pazar] \setuplabeltext [\s!tr] [\v!monday=pazartesi] \setuplabeltext [\s!tr] [\v!tuesday=sal\dotlessi] \setuplabeltext [\s!tr] [\v!wednesday=\ccedilla ar\scedilla amba] \setuplabeltext [\s!tr] [\v!thursday=per\scedilla embe] \setuplabeltext [\s!tr] [\v!friday=cuma] \setuplabeltext [\s!tr] [\v!saturday=cumartesi] \setuplabeltext [\s!tk] [\v!sunday=dyn\ccedilla\ g\udiaeresis n] \setuplabeltext [\s!tk] [\v!monday=birinji g\udiaeresis n] \setuplabeltext [\s!tk] [\v!tuesday=ikinji g\udiaeresis n] \setuplabeltext [\s!tk] [\v!wednesday=\udiaeresis\ccedilla\udiaeresis nji] \setuplabeltext [\s!tk] [\v!thursday=d\odiaeresis rd\udiaeresis nji g\udiaeresis n] \setuplabeltext [\s!tk] [\v!friday=b\adiaeresis\scedilla inji g\udiaeresis n] \setuplabeltext [\s!tk] [\v!saturday=altynjy g\udiaeresis n] %D \ShowAllLanguageValues [\s!tr] [turkish] {Turkish} {delight} % turks fruit \protect \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/l-gzip.lua����������������������������������0000644�0001750�0001750�00000002273�12161703335�023603� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['l-gzip'] = { version = 1.001, author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if not gzip then -- no fallback yet return end local suffix, suffixes = file.suffix, file.suffixes function gzip.load(filename) local f = io.open(filename,"rb") if not f then -- invalid file elseif suffix(filename) == "gz" then f:close() local g = gzip.open(filename,"rb") if g then local str = g:read("*all") g:close() return str end else local str = f:read("*all") f:close() return str end end function gzip.save(filename,data) if suffix(filename) ~= "gz" then filename = filename .. ".gz" end local f = io.open(filename,"wb") if f then local s = zlib.compress(data or "",9,nil,15+16) f:write(s) f:close() return #s end end function gzip.suffix(filename) local suffix, extra = suffixes(filename) local gzipped = extra == "gz" return suffix, gzipped end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-math-coverage.mkiv������������������������0000644�0001750�0001750�00000001724�12161703335�025550� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-math-coverage, % s-fnt-33, s-fnt-32 %D version=2011.05.10, % and older %D title=\CONTEXT\ Style File, %D subtitle=Show Math Coverage, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[math-coverage] \registerctxluafile{s-math-coverage}{} \installmodulecommandluasingle \showmathalphabets {moduledata.math.coverage.showalphabets} \installmodulecommandluasingle \showmathcharacters {moduledata.math.coverage.showcharacters} \installmodulecommandluasingle \showmathscripts {moduledata.math.coverage.showscripts} \stopmodule \continueifinputfile{s-math-coverage.mkiv} \usemodule[art-01] \starttext \showmathalphabets \page \showmathcharacters \page \showmathscripts \page \stoptext ��������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-ran.mkiv�������������������������������0000644�0001750�0001750�00000002605�12130411274�024324� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=supp-ran, %D version=2008-10-31, %D title=\CONTEXT\ Support Macros, %D subtitle=Random Number Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support Macros / Random Number Generation} %D This module is downward compatible in the sense that we've kept %D the user interface (which uses intermediate variables). \registerctxluafile{supp-ran}{1.001} \unexpanded\def\getrandomcount #1#2#3{#1=\ctxcommand{getrandomcounta(\number#2,\number#3)}\relax} \unexpanded\def\getrandomdimen #1#2#3{#1=\ctxcommand{getrandomcounta(\number\dimexpr#2,\number\dimexpr#3)}\scaledpoint\relax} \unexpanded\def\getrandomnumber#1#2#3{\edef#1{\ctxcommand{getrandomcounta(\number#2,\number#3)}}} \unexpanded\def\getrandomfloat #1#2#3{\edef#1{\ctxcommand{getrandomcountb(\number\dimexpr#2\points,\number\dimexpr#3\points)}}} \unexpanded\def\setrandomseed #1{\ctxcommand{setrandomseed(\number#1)}} \unexpanded\def\getrandomseed #1{\edef#1{\ctxcommand{getrandomseed()}}} \unexpanded\def\freezerandomseed {\ctxcommand{freezerandomseed()}} \unexpanded\def\defrostrandomseed {\ctxcommand{defrostrandomseed()}} \endinput ���������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-xml.mkiv�������������������������������0000644�0001750�0001750�00000000767�11754241457�024331� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=meta-xml, %D version=2002.11.27, %D title=\METAPOST\ Graphics, %D subtitle=XML Hacks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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}{MetaPost Graphics / XML Hacks} \unprotect % not needed in mkiv \protect \endinput ���������context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-pps.mkiv�������������������������������0000644�0001750�0001750�00000011601�12130411274�024276� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=mlib-pps, %D version=2008.03.25, %D title=\METAPOST\ Integrated Graphics, %D subtitle=Basics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \registerctxluafile{mlib-pps}{1.001} %D Todo: catch nested graphics like external figures with dummies. % todo: figure out why this is shifted % % \setupbodyfont[palatino] % % \starttext % \startMPpage % draw textext("123") ; % \stopMPpage % \stoptext % % A slightly larger picture works ok so maybe there is some kind % of interference with the page builder. \newbox \MPtextbox \newtoks\everyMPLIBsettext % not used \newconditional\MPLIBtextgetdone % \def\MPLIBsettext#1% #2% % {\dowithnextbox{\ctxlua{metapost.settext(\number\nextbox,#1)}}\hbox} \def\MPLIBsettext#1% #2% {\ifconditional\MPLIBtextgetdone \else \cldcontext{metapost.tex.get()}% MPenvironments are depricated \settrue\MPLIBtextgetdone % no \global needed \fi \dowithnextbox{\ctxlua{metapost.settext(\number\nextbox,#1)}}\hbox} \def\MPLIBgettextscaled#1#2#3% why a copy .. can be used more often {\ctxlua{metapost.gettext(\number\MPtextbox,#1)}% \vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[\c!sx=#2,\c!sy=#3]{\raise\dp\MPtextbox\box\MPtextbox}\forcecolorhack\hss}}} \def\MPLIBfigure#1#2% {\setbox\scratchbox\hbox{\externalfigure[#1][\c!mask=#2]}% \ctxlua{metapost.edefsxsy(\number\wd\scratchbox,\number\ht\scratchbox,0)}% \vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[\c!sx=\sx,\c!sy=\sy]{\box\scratchbox}\hss}}} % horrible: \def\MPLIBgettextscaledcm#1#2#3#4#5#6#7#8#9% 2-7: sx,rx,ry,sy,tx,ty {\ctxlua{metapost.gettext(\number\MPtextbox,#1)}% \setbox\MPbox\hbox\bgroup \dotransformnextbox{#2}{#3}{#4}{#5}{#6}{#7}% does push pop ... will be changed to proper lua call (avoid small numbers) \vbox to \zeropoint\bgroup \vss \hbox to \zeropoint \bgroup % \scale[\c!sx=#8,\c!sy=#9]{\raise\dp\MPtextbox\box\MPtextbox}% % \scale[\c!sx=#8,\c!sy=#9,\c!depth=\v!no]{\box\MPtextbox}% \fastsxsy{#8}{#9}{\raise\dp\MPtextbox\box\MPtextbox}% % This gives: LuaTeX warning: Misplaced \pdfrestore .. don't ask me why. % but I'll retry it some day soon. % \dostartscaling{#8}{#9}% % \raise\dp\MPtextbox\box\MPtextbox % \dostopscaling \forcecolorhack % needed ? already in the scale macro \hss \egroup \egroup \egroup \smashbox\MPbox \box\MPbox} \def\MPLIBgraphictext#1% use at mp end {\startTEXpage[\c!scale=10000]#1\stopTEXpage} %D \startbuffer %D \definelayer[test] %D %D \setlayerframed %D [test] %D [x=\MPx{somepos-1},y=\MPy{somepos-1}] %D [width=\MPw{somepos-1},height=\MPh{somepos-1}] %D {Whatever we want here!} %D %D \setlayerframed %D [test] %D [x=\MPx{somepos-2},y=\MPy{somepos-2}] %D [width=\MPw{somepos-2},height=\MPh{somepos-2}] %D {Whatever we need there!} %D %D \startuseMPgraphic{oeps} %D draw fullcircle scaled 6cm withcolor red ; %D register ("somepos-1",5cm,1cm,center currentpicture) ; %D register ("somepos-2",4cm,3cm,(-1cm,-2cm)) ; %D \stopuseMPgraphic %D %D \framed[background=test,offset=overlay]{\useMPgraphic{oeps}} %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection \def\MPLIBpositionwhd#1#2#3#4#5% bp ! {\dosavepositionwhd{#1}\zerocount{#2\onebasepoint}{#3\onebasepoint}{#4\onebasepoint}{#5\onebasepoint}\zeropoint} \def\MPLIBextrapass#1% {\ctxlua{metapost.graphic_extra_pass("#1")}} % \def\MPLIBresettexts % {\ctxlua{metapost.resettextexts()}} \def\MPLIBresettexts {\ctxlua{metapost.resettextexts()}%$ \setfalse\MPLIBtextgetdone} %D Experiment \def\doMPLIBstopgroup#1#2#3#4#5#6% some day this might happen elsewhere {\egroup \setbox\scratchbox\hbox{\kern\onebasepoint\box\scratchbox}% weird correction \wd\scratchbox \dimexpr#5\onebasepoint-#3\onebasepoint+2\onebasepoint\relax \ht\scratchbox #6\onebasepoint \dp\scratchbox-#4\onebasepoint \pdfxform attr {/Group << /S /Transparency /I \ifnum#1=1 true \else false \fi /K \ifnum#1=1 true \else false \fi >>} resources {\pdfbackendcurrentresources} \scratchbox \setbox\scratchbox\hbox\bgroup\kern-\onebasepoint\pdfrefxform\pdflastxform\egroup \setbox\scratchbox\hbox\bgroup\kern-\onebasepoint\pdfrefxform\pdflastxform\egroup \wd\scratchbox\zeropoint \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \box\scratchbox \endgroup} \def\MPLIBstartgroup#1#2#3#4#5#6% isolated 0/1, knockout 0/1 llx lly urx ury {\begingroup \setbox\scratchbox\hbox\bgroup \def\MPLIBstopgroup{\doMPLIBstopgroup{#1}{#2}{#3}{#4}{#5}{#6}}} \protect \endinput �������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-bas.mkiv�������������������������������0000644�0001750�0001750�00000003051�12161703335�024271� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=luat-bas, % moved from luat-lib, %D version=2006.09.11, %D title=\CONTEXT\ Lua Macros, %D subtitle=Basic \LUA\ Libraries, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Macros / Basic Lua Libraries} \registerctxluafile{l-lua} {1.001} \registerctxluafile{l-package} {1.001} \registerctxluafile{l-lpeg} {1.001} \registerctxluafile{l-function}{1.001} \registerctxluafile{l-string} {1.001} \registerctxluafile{l-table} {1.001} \registerctxluafile{l-boolean} {1.001} \registerctxluafile{l-number} {1.001} \registerctxluafile{l-math} {1.001} %registerctxluafile{l-aux} {1.001} \registerctxluafile{l-io} {1.001} \registerctxluafile{l-os} {1.001} \registerctxluafile{l-file} {1.001} \registerctxluafile{l-gzip} {1.001} \registerctxluafile{l-md5} {1.001} \registerctxluafile{l-dir} {1.001} \registerctxluafile{l-unicode} {1.001} %registerctxluafile{l-utils} {1.001} \registerctxluafile{l-url} {1.001} \registerctxluafile{l-set} {1.001} % \registerctxluafile{socket.lua}{} % \registerctxluafile{ltn12.lua} {} % \registerctxluafile{mime.lua} {} % \registerctxluafile{http.lua} {} % \registerctxluafile{url.lua} {} % \registerctxluafile{tp.lua} {} % \registerctxluafile{ftp.lua} {} % %registerctxluafile{smtp.lua} {} \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-tex.mkii�������������������������������0000644�0001750�0001750�00000037032�11754241457�024334� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=norm-etx, %D version=2009.03.19, %D title=\CONTEXT\ Norm Macros, %D subtitle=\TEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Since \LUATEX\ can generate these lists internally it started %D to make sense to cleanup this \type {\normalstuff} for \MKII\ as %D well. The tables are generated with a \LUA\ script. % tex primitives % Beware, we already redefined \dump, \outer and \everyjob ! % \normal = \ % \normal- = \- % \normal/ = \/ \let \normalabove = \above \let \normalabovedisplayshortskip = \abovedisplayshortskip \let \normalabovedisplayskip = \abovedisplayskip \let \normalabovewithdelims = \abovewithdelims \let \normalaccent = \accent \let \normaladjdemerits = \adjdemerits \let \normaladvance = \advance \let \normalafterassignment = \afterassignment \let \normalaftergroup = \aftergroup \let \normalatop = \atop \let \normalatopwithdelims = \atopwithdelims \let \normalbadness = \badness \let \normalbaselineskip = \baselineskip \let \normalbatchmode = \batchmode \let \normalbegingroup = \begingroup \let \normalbelowdisplayshortskip = \belowdisplayshortskip \let \normalbelowdisplayskip = \belowdisplayskip \let \normalbinoppenalty = \binoppenalty \let \normalbotmark = \botmark \let \normalbox = \box \let \normalboxmaxdepth = \boxmaxdepth \let \normalbrokenpenalty = \brokenpenalty \let \normalcatcode = \catcode \let \normalchar = \char \let \normalchardef = \chardef \let \normalcleaders = \cleaders \let \normalclosein = \closein \let \normalcloseout = \closeout \let \normalclubpenalty = \clubpenalty \let \normalcopy = \copy \let \normalcount = \count \let \normalcountdef = \countdef \let \normalcr = \cr \let \normalcrcr = \crcr \let \normalcsname = \csname \let \normalday = \day \let \normaldeadcycles = \deadcycles \let \normaldef = \def \let \normaldefaulthyphenchar = \defaulthyphenchar \let \normaldefaultskewchar = \defaultskewchar \let \normaldelcode = \delcode \let \normaldelimiter = \delimiter \let \normaldelimiterfactor = \delimiterfactor \let \normaldelimitershortfall = \delimitershortfall \let \normaldimen = \dimen \let \normaldimendef = \dimendef \let \normaldirectlua = \directlua \let \normaldiscretionary = \discretionary \let \normaldisplayindent = \displayindent \let \normaldisplaylimits = \displaylimits \let \normaldisplaystyle = \displaystyle \let \normaldisplaywidowpenalty = \displaywidowpenalty \let \normaldisplaywidth = \displaywidth \let \normaldivide = \divide \let \normaldoublehyphendemerits = \doublehyphendemerits \let \normaldp = \dp % \normaldump = \dump \let \normaledef = \edef \let \normalelse = \else \let \normalemergencystretch = \emergencystretch \let \normalend = \end \let \normalendcsname = \endcsname \let \normalendgroup = \endgroup \let \normalendinput = \endinput \let \normalendlinechar = \endlinechar \let \normaleqno = \eqno \let \normalerrhelp = \errhelp \let \normalerrmessage = \errmessage \let \normalerrorcontextlines = \errorcontextlines \let \normalerrorstopmode = \errorstopmode \let \normalescapechar = \escapechar \let \normaleverycr = \everycr \let \normaleverydisplay = \everydisplay \let \normaleveryhbox = \everyhbox % \normaleveryjob = \everyjob \let \normaleverymath = \everymath \let \normaleverypar = \everypar \let \normaleveryvbox = \everyvbox \let \normalexhyphenchar = \exhyphenchar \let \normalexhyphenpenalty = \exhyphenpenalty \let \normalexpandafter = \expandafter \let \normalfam = \fam \let \normalfi = \fi \let \normalfinalhyphendemerits = \finalhyphendemerits \let \normalfirstmark = \firstmark \let \normalfloatingpenalty = \floatingpenalty \let \normalfont = \font \let \normalfontdimen = \fontdimen \let \normalfontname = \fontname \let \normalfuturelet = \futurelet \let \normalgdef = \gdef \let \normalglobal = \global \let \normalglobaldefs = \globaldefs \let \normalhalign = \halign \let \normalhangafter = \hangafter \let \normalhangindent = \hangindent \let \normalhbadness = \hbadness \let \normalhbox = \hbox \let \normalhfil = \hfil \let \normalhfill = \hfill \let \normalhfilneg = \hfilneg \let \normalhfuzz = \hfuzz \let \normalhoffset = \hoffset \let \normalholdinginserts = \holdinginserts \let \normalhrule = \hrule \let \normalhsize = \hsize \let \normalhskip = \hskip \let \normalhss = \hss \let \normalht = \ht \let \normalhyphenation = \hyphenation \let \normalhyphenchar = \hyphenchar \let \normalhyphenpenalty = \hyphenpenalty \let \normalif = \if \let \normalifcase = \ifcase \let \normalifcat = \ifcat \let \normalifdim = \ifdim \let \normalifeof = \ifeof \let \normaliffalse = \iffalse \let \normalifhbox = \ifhbox \let \normalifhmode = \ifhmode \let \normalifinner = \ifinner \let \normalifmmode = \ifmmode \let \normalifnum = \ifnum \let \normalifodd = \ifodd \let \normaliftrue = \iftrue \let \normalifvbox = \ifvbox \let \normalifvmode = \ifvmode \let \normalifvoid = \ifvoid \let \normalifx = \ifx \let \normalignorespaces = \ignorespaces \let \normalimmediate = \immediate \let \normalindent = \indent % \normalinput = \input \let \normalinputlineno = \inputlineno \let \normalinsert = \insert \let \normalinsertpenalties = \insertpenalties \let \normalinterlinepenalty = \interlinepenalty \let \normaljobname = \jobname \let \normalkern = \kern \let \normallanguage = \language \let \normallastbox = \lastbox \let \normallastkern = \lastkern \let \normallastpenalty = \lastpenalty \let \normallastskip = \lastskip \let \normallccode = \lccode \let \normalleaders = \leaders \let \normalleft = \left \let \normallefthyphenmin = \lefthyphenmin \let \normalleftskip = \leftskip \let \normalleqno = \leqno \let \normallet = \let \let \normallimits = \limits \let \normallinepenalty = \linepenalty \let \normallineskip = \lineskip \let \normallineskiplimit = \lineskiplimit \let \normallong = \long \let \normallooseness = \looseness \let \normallower = \lower \let \normallowercase = \lowercase \let \normalmag = \mag \let \normalmark = \mark \let \normalmathaccent = \mathaccent \let \normalmathbin = \mathbin \let \normalmathchar = \mathchar \let \normalmathchardef = \mathchardef \let \normalmathchoice = \mathchoice \let \normalmathclose = \mathclose \let \normalmathcode = \mathcode \let \normalmathinner = \mathinner \let \normalmathop = \mathop \let \normalmathopen = \mathopen \let \normalmathord = \mathord \let \normalmathpunct = \mathpunct \let \normalmathrel = \mathrel \let \normalmathsurround = \mathsurround \let \normalmaxdeadcycles = \maxdeadcycles \let \normalmaxdepth = \maxdepth \let \normalmeaning = \meaning \let \normalmedmuskip = \medmuskip \let \normalmessage = \message \let \normalmiddle = \middle \let \normalmkern = \mkern \let \normalmonth = \month \let \normalmoveleft = \moveleft \let \normalmoveright = \moveright \let \normalmskip = \mskip \let \normalmultiply = \multiply \let \normalmuskip = \muskip \let \normalmuskipdef = \muskipdef \let \normalnewlinechar = \newlinechar \let \normalnoalign = \noalign \let \normalnoboundary = \noboundary \let \normalnoexpand = \noexpand \let \normalnoindent = \noindent \let \normalnolimits = \nolimits \let \normalnonscript = \nonscript \let \normalnonstopmode = \nonstopmode \let \normalnulldelimiterspace = \nulldelimiterspace \let \normalnullfont = \nullfont \let \normalnumber = \number \let \normalomit = \omit \let \normalopenin = \openin \let \normalopenout = \openout \let \normalor = \or % \normalouter = \outer \let \normaloutput = \output \let \normaloutputpenalty = \outputpenalty \let \normalover = \over \let \normaloverfullrule = \overfullrule \let \normaloverline = \overline \let \normaloverwithdelims = \overwithdelims \let \normalpagedepth = \pagedepth \let \normalpagefilllstretch = \pagefilllstretch \let \normalpagefillstretch = \pagefillstretch \let \normalpagefilstretch = \pagefilstretch \let \normalpagegoal = \pagegoal \let \normalpageshrink = \pageshrink \let \normalpagestretch = \pagestretch \let \normalpagetotal = \pagetotal \let \normalpar = \par \let \normalparfillskip = \parfillskip \let \normalparindent = \parindent \let \normalparshape = \parshape \let \normalparskip = \parskip \let \normalpatterns = \patterns \let \normalpausing = \pausing \let \normalpenalty = \penalty \let \normalpostdisplaypenalty = \postdisplaypenalty \let \normalpredisplaypenalty = \predisplaypenalty \let \normalpredisplaysize = \predisplaysize \let \normalpretolerance = \pretolerance \let \normalprevdepth = \prevdepth \let \normalprevgraf = \prevgraf \let \normalradical = \radical \let \normalraise = \raise \let \normalread = \read \let \normalrelax = \relax \let \normalrelpenalty = \relpenalty \let \normalright = \right \let \normalrighthyphenmin = \righthyphenmin \let \normalrightskip = \rightskip \let \normalromannumeral = \romannumeral \let \normalscriptfont = \scriptfont \let \normalscriptscriptfont = \scriptscriptfont \let \normalscriptscriptstyle = \scriptscriptstyle \let \normalscriptspace = \scriptspace \let \normalscriptstyle = \scriptstyle \let \normalscrollmode = \scrollmode \let \normalsetbox = \setbox \let \normalsetlanguage = \setlanguage \let \normalsfcode = \sfcode \let \normalshipout = \shipout \let \normalshow = \show \let \normalshowbox = \showbox \let \normalshowboxbreadth = \showboxbreadth \let \normalshowboxdepth = \showboxdepth \let \normalshowlists = \showlists \let \normalshowthe = \showthe \let \normalskewchar = \skewchar \let \normalskip = \skip \let \normalskipdef = \skipdef \let \normalspacefactor = \spacefactor \let \normalspaceskip = \spaceskip \let \normalspan = \span \let \normalspecial = \special \let \normalsplitbotmark = \splitbotmark \let \normalsplitfirstmark = \splitfirstmark \let \normalsplitmaxdepth = \splitmaxdepth \let \normalsplittopskip = \splittopskip \let \normalstring = \string \let \normaltabskip = \tabskip \let \normaltextfont = \textfont \let \normaltextstyle = \textstyle \let \normalthe = \the \let \normalthickmuskip = \thickmuskip \let \normalthinmuskip = \thinmuskip \let \normaltime = \time \let \normaltoks = \toks \let \normaltoksdef = \toksdef \let \normaltolerance = \tolerance \let \normaltopmark = \topmark \let \normaltopskip = \topskip \let \normaltracingcommands = \tracingcommands \let \normaltracinglostchars = \tracinglostchars \let \normaltracingmacros = \tracingmacros \let \normaltracingonline = \tracingonline \let \normaltracingoutput = \tracingoutput \let \normaltracingpages = \tracingpages \let \normaltracingparagraphs = \tracingparagraphs \let \normaltracingrestores = \tracingrestores \let \normaltracingstats = \tracingstats \let \normaluccode = \uccode \let \normaluchyph = \uchyph \let \normalunderline = \underline \let \normalunhbox = \unhbox \let \normalunhcopy = \unhcopy \let \normalunkern = \unkern \let \normalunpenalty = \unpenalty \let \normalunskip = \unskip \let \normalunvbox = \unvbox \let \normalunvcopy = \unvcopy \let \normaluppercase = \uppercase \let \normalvadjust = \vadjust \let \normalvalign = \valign \let \normalvbadness = \vbadness \let \normalvbox = \vbox \let \normalvcenter = \vcenter \let \normalvfil = \vfil \let \normalvfill = \vfill \let \normalvfilneg = \vfilneg \let \normalvfuzz = \vfuzz \let \normalvoffset = \voffset \let \normalvrule = \vrule \let \normalvsize = \vsize \let \normalvskip = \vskip \let \normalvsplit = \vsplit \let \normalvss = \vss \let \normalvtop = \vtop \let \normalwd = \wd \let \normalwidowpenalty = \widowpenalty \let \normalwrite = \write \let \normalxdef = \xdef \let \normalxleaders = \xleaders \let \normalxspaceskip = \xspaceskip \let \normalyear = \year \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/status-files.pdf����������������������������0000644�0001750�0001750�00000060236�12161703335�025017� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.6 % 17 0 obj <</Length 3743 /Filter/FlateDecode>> stream x^]͎$ S Xѿ5[>9q.C|T,kzjȅ1^loEQGJas/<Bpk)./<K%Z[Ȑ/_G[ |R?zz_"i go?7'XJFM q#T?yl.c1BJ/eÀRnH7�Gg*0,]9?]Yr"'f@=FC |cn>o'j2(=H_|?o6yk8Lן^1>۾`A.ܧ/KHFK_?L0Ӵ.n_!Z?|@ ?R"7GҦU~YzH ڣB?ϓyeyʉ޵Rz,$B\;D9m-L2.mQ ]=ic@.q ;dr�58_3ºj]qGb.~5Vp\(&<h|sgVަ7-Fha)8Xo*4.$!_и92Ft*i߉{oGwc*yv#U6.%Bq$56N xS8]{vH㳋Qq20ťQxqWyn/xBҞ2F:[F4Lr̀/Os\[zBp}ubh�:gѬN2t*V$%Fm 5#@H 6T{%UyvB |Υ: mѨs@` =Zё<+LVoHh:3׶Scz d--4Ib@ [(G<9x ]jCN}va%#wIBnYHhx[[qKSq2I;F!#n 푱[s9]C=-iNc&uf7N0Ǧu/,mj59nBaDM V62J]$'儸9� !"+l#ˊR/hLܝjϰ RKE (ِzނ]kAXP�۫3x&d<CR kѰ-jܐuۓLեhBʩZX]KSNE$Pn-)4*QN˜Ň\u>r]KTҰM~7 eL(Sx"12 cW(a[ Oir<C )@f;c$'E} dj@rvwV9)?0[re4@)3OXВQ󄼡/$ fS"6\ Vx:2FRbi ivoUgJ1bܠbwuW .1ˢuBZ]LBӨ0| ! $2}F!MS_Ȉ#*}1B ֞QO%,勉XۛabmWb{ӈ߷G< mOo'4g{.9Q\-qdžDĽZX�S`QǦ^X]BF{ _0L=2ʴʲtY`,QyR^$H pT X<$إ& ORY^xnSQŦpXhv!#?WĦ&Y+4Zf79xnzV&\ NLzL&Wceˉzj!?<v7/ [ B.Oؒ>\wZKSG&FCJ\+M=YYZHMIS悻41:Ӷ<�CLg1'F[0 yݰ I k~N~msCb'C% D6 SV|CWǀ)#׍J733I#+Ea+-Q냯=×gr5),yX8SG]Ry7}[ŞUr.czZ[lۙ1Oꐆ8)'! |QBjOux 8 Y1U D݌`(S2N .`ZKT#͹`25)^B@ĥ)QE"֯:nO>wIQ癰q1[`tJ< %akYwKCgSt# &`lz ė:SHэQ�4Hmx(B8񴜊47ic 6ա=hPٻ�mO@ŗoJ+##7{wry\zUՆF&Jdv~+Fݼj'WǵI8.C5xTA7c1)ҤFQDl:浝PHe?3z2pyTYIY l!oU W蜔M� \&rse>v>[ I ng$jVeˬ":ZKY6 Ym$$T &lׇ9ug;@㼚{L9_K{*1kN!;Gpz2'0`ef$H`6yR5Q= ɟa1ruV@wl/= Iͅd/qR_inRCd7JJ) g۝}-EK :BoJ^Ɍd&;X9#b=0d+ bzܰ^]ۥNRc&)?), :*zDgK<YsVǬP)Ķ"mWQŌ7bl}`& #Ƚˢ)ѹC R ! ^z̡\C_L4[-^nm,Iv)vOҥ ﱻBts==J V؜G7 QgA Ė$|/6Kxd|E eHe6"O"_屹*oïJ= 5O##,,c6m77>xvsLuo'ǵDa XJ`fg"݌f+*zarMkAHuӊq + l/EH3x-rQE1m 4ȶC\\Rwft~Hڋ6/ctam/Iv_vI#A;Cw"owt=Xd$UhHJp|LOIs)rK7oꋊuOev^(]E oxp5wGA-$l_9ydk^2k`[\ o-^4zvn�h"~;dK jʖՠ'|yz!uhR..T^X}%_pD=FD !0ޥTˊ'n)Ϟ<l^-ڸ&72j>m2+amwx[l'w@m  Z endstream endobj 23 0 obj <</Length 5530 /Filter/FlateDecode>> stream x^]͒不S X+(El8b87}sa} QPURc:2%$?@4_3[}=~%Bú^3 L1<mqI￾~y.oC;</)<IM}7~Ϣ ?ߊ|&gwW0TR qo>/ <{> Veo%OmkUHwHX3Y"qJ+=^wBߕ|7*}?NrDT:]Rh-^)c/}s١88lw:߿ BܧHB(@}Vg_ LRNBIㆷ"baWU|~Ď|C,}ooץI,7/1eޤ@&C@%$d~H"-F/Xv�}b;QUJy  )).9oO?A}˯c+Tچ]ro?-mUyOVtX8@z~h xii9ixi,J/(ͿK6\ mX?Ze~rnS s|^rc*Nt|YM`')\8iX&ȸ89D=E<8/s`<qPJj{u=[c СÃjʒ+n5py:bC8iCĈ)P!I^fB*1I(i<)yq%ފ eydU|%znJn)v#Y;-Xn VVHE7V ڐPjvlXFlS(1¢6vX2r A[٦a^j:%!Ci}eɫk6[_mywa:,0~잛>@um{K.B�Qۚ`Y'w_\cXIBݎq_Jlfٕ꾽Zv$uO%~J񾎡X? ?EQL%on8N3;FX6fx,% ?4^YF2dmi @g"l^,3ixY}jӮn%^DX2aF _vؘ'(U]d(!3L%$H>1GnNX𬿊<-rwir/uh64/ܓ5+BNbkoӼmD|wq +ZNq#֎S*c[Cf^m}n9 mI*#DȄh#Fd!fqk6ܳ- K7Sz){r]̹KΓ3:6eTjD1jc,K&?]_ژ+ !ԺYt >*sj "TfF!Mw + uܨw(K?wTYj. 1i9a Q dvJÆJhm ѕax/z+\Y=;qOp0cJ?7hs!9ǣR!P䃉)U*BcЦJ9g[ *"-c<ПP*؆ԁz7V>Սz T)r\>#Pz.U,K7fTj-ypv=(j=@erЕ9|N : X. :M}֛-a3z5 rń7DL<E]zS&ZtbwEe)sFfXZ}9eH#R]eȈ!=y\Q|/0y!'R{,-t8J}Z2CDۡAX:|5iTn7C!x:cJacWMYDISis=2n(4dNWO4d"AI?8HO߹x,|.1@#NhISRe9qw ldPj0oĤH.@\(TݵI$|8.1p,6$4xt|x-aY ͕:堆4Ti1"JV@ ՜!)Ќ6 p}ȩo%C p%-< {�ZI7`$dwg`OX;UhSo{ڑ^+ꕛj:M\em+`\wYbVpC8H„C$AyG47F/}R"CJftjXtqP!)] ?6\8h�kNېs/:ʀMo@~SUP~J .UBDK�!z*]vָwuid?BH&a,i($yu>RG[6x||Ij5L3t!jw"tÙ)% eHay+.[[2KVx3$k+=CeYBM'Ts+Q^KE [Q%ֲ|p-\*i/$ڗjұ]/!l07eJnOX=b`Ḵ-bar�͎=ZeKK^eO=X�h5p7 ejA1$9|9E G^UF$( <sK'SBL?V+J^k*/FJ'SٕP9İ΅' su^;�,%@;y~pdN-3J3h;.mXZs6gj;{ߗ$9-G|VGrDi3p %˵Jn21rw5~)iPr>ys)^-t0Xܫmg 0p-18̺R"Bz<.li~!-C=5L?jt##Z Rm="TI7뢵�MWZs&, 6 +ar y[q#Ykk$)\!w/SoV3ϋj.BvPpr[^ҷaL(PTj4s.e٤[ k 7R\n8 5uSP`}WN?cXi;j8w,LE,ےMUcNh�K/PWlYtN<fFh ^3\[w 0T6PZ.+Dci,w42sl`Vl׶Ő�JVAw*r+=!!CuAE#B.@ f˹-:Dszce JS6ڨc<͐DF|I$S}y@鈠w]j9QBzŽA:xF7Ⱥ-Aۋ ["zŽAv?UhMeK.(5^bu=y ˧"ѥTȖL ӑss3q/cAXی)n.:8J!)rܷj֫'^#t2J\@~߲2)?(/EzApAcQ? 7Hzzn1,PvPCͯy+i 5!(".MCѨ@ e=TֻP)ÞN1,?~ ϵ"e;RbkȀ,Jj84H2)Dh;"-K=:1a55 2$VȒQ`;�?w"@릁hӃ9yY: I&k:k-m_ R>` vpp/qRGз~<\ԕ|<F]Sf89j\j1xh7]3E4<f~ͱ1eN4]_oLG5(,x.*3OiIGbHq#)*mڵ)'ܐA w�A)9.oᄇfta@{϶ƉG r|T>g9)mb[6LQ˲-ĤWq%*\ȐCmz ҉ic̬�aB9cYN?O[Kꐀ~HGI(ޒqFٖ~R DjaԈcE(ƅ>' ՙ|))ûMFg})J(zݏKwW 2w6�ZOޙ!|4Dik^%7Be7)@`|2w=Bꄻ\a]$^r0ӣO2JHJAޚjiB Ʊj}tox8T (:Qc<Mzns! c 878m^DHGs^-EFz̐nt- :iib4O p \F0ĹFFX}_cQڭmKQJ )L|: Ѫz pй:S=5iPSONX@?sA'p1Z{ΘYկ4L (Ϲ 74<>`Zw绠9A`/f7iD & [}v&;k>siC9凚 O{)6ɔk;"$Oj/!SxŕZ+5^LPc2~1+4K Ou{.zrXE4HX1u&)ញ}zLޣznz>uO1?Bvd>T:1fvbөz 2mRG,ؘSWEt6x,31R3s!^`}`5p{=ѕ ݔ@h 4m&!~4͇3fH961j 3:4\ROa(F>֊ ,.[S/'xpj8Dӓ؃2(2ZP#UD##9h4]j<w鍺6Ɠdcz~ڣXH-WB JyG7xK%CLs)͟o,壊]4n[GfI }AnI6$Ar +_F{%+t�;`8A ͶviĨOiC}Yx%@H3}iSE_[ϑq\vn}{Re2qP@Y1O݃V湇r6Z9.AOx@]v}VgZCH,n\ Ȕ>fP4Lq-3qmO0AIf1o~<a&jtG"xطpv-@ %B{QQ$4\$H:N(Ǥ:HS#pq[=�f?`TҘukL !!҃bD O)=et endstream endobj 26 0 obj <</Length 3247 /Filter/FlateDecode>> stream x^]ˎW�OƀwIfgxx&SeI-fasmT^fI-ח~s^4}mғzf)%=kߔr+P*+R*e>_Y)oUïY|Z=yx?;HxUJ,UZV\>Ez|OI9cC.~JtocwڃWݿCOv~^ooNLxw|_\ef|lv?|H9CSHaZo/0s6Og؂-F_ma#RQ¨a-PXs?oq|.@[8hl_ܣIDПeSG ԟQӿO|N[շ9F|w5>kLZ=b.gt4IGzea"AmsVMy3> FW0GVQ_~T)j>Ax8$| 3|𾋀^{/y;KTׅ>glߎ`g(geU>fԴb<δ@Bׂ ?k-mm0I ?H[}?+k@blp *vyt .'+$k?gb`&#f5ZQ 7!| ݀z_B)EQd7cx!o�λCre(>_b)E)SHӎw:�p/>~_bTmlq"Gٕ|�ӓ�LOKqBL!�aX]nO)˹YmxaP$`s\bapK;oe= DBC-?d?@D^L!wo-H7H7HFtۍ|WTIwBC2B R=6 LN}?%X̵ZjnK"IA0,>3l6 1-ed} ڷc~6ApargRr-" VV=IcV 'f'BmF}1jQ]A#|!9tTﳆrNɀ(r.VQ>WD?B (SF+}%ANХ�'6D(t�4J}-[,BkXnGÏ'g;8BބAcKYTr*yKam&l`q>Zj(ҠA_[]*nacxRAj㗴.j6|{T$;V}!Ʉ.cqd#1!KIE͑9P~֤hHq%L1wzNR$Y8iঐp$I~(QPXQs);TP�h BI|JQsQ/ G<8܎:󅚫5y35W5)>fˏNҭքϋVnlO^䟀{uV_Bp 2w#N23W`ҬrB )3 HU螺*R!{72c㟽cWNX3mLZIѱLpVBڑZY 9+xK>i9^xC{Jaˌ2k^|Lʱ=hlv%aMx "ѳz^mvK ^V7(FhHQ(3_X[hA'JjQی˄dub>rV>[B_|d-*Z{F֖-ĖBF W\DB;L֖$xE W 2x/khO Z.olqXmZ_`h&d#4deWn: PrI"ZAo2� ez.@Vmpim bd´/=T$AKv`z&k&7ڷ8OV.tOדBՄ43 ld;r(h-##k/"jm<`Ԓd >^UtRKo9/9RqVGʚ5RܯR9&. MGǖ+pj 1[qo 5 |f_+Fw=37+]nZYH0?;\e6jGQ-elSayStvJ&M+Lqr<XqfUE& M|Ý$t &^xh(# ؞`s8 grJA~7"b/Y"W?{ծvt<)ojX#feXxi`f㇋+3YRJ%x$oTE3wu7<:\L_ʐ+!=.,Ս&<0.`Y5GwFWҮG"wPG LH!eFV㗸Ϝx=)7 sҢ QIcED&--+]koY2dVR E"<"[}H;3b^;wmLsK}!SW2Zzac[DPi㾻s~E1jz7jZ#]%Rj34^ u]9ޓ+%,K{ܐM Bbd='e3.ALAқJY7x` y| 3Kw9(ݪGUޅs]Ixsx- Q'pq08౰rޛ`aO 5-]o<ָ/\WYlhm#(ӵp Q vU}U*FfVhD=um+lw2S۸0ʤd=\faa_W_<h88|{wPup𣭇.|軯wIx2SgRenѢc訥~5S驙T!=8O^mP4v ш0 _xǧrLKV=C.%5<F f- ZI"ڮ 1C"}]ULJj$C}JB=8%u!FUqo"S!aF:$ endstream endobj 29 0 obj <</Length 3636 /Filter/FlateDecode>> stream x^]ˎW�~.^9q6"sJ-jUSj6x0j5)ջTY)5{R?n/~z됦MzROO8g핟>ܷJ?yq%|J+1+ >\u?OZ=:EwU>_rWZV ۷nW~*h=G+D[~oOGDW\Xw=xzO*=GtOAXէo~_\R͸m?Qi)0k ֛Iل?57lA˖heŻ-lR*[9l-RXbn B[+LPZ^FY9e}/j'9>><LjgW,$>VA;7b.HAjHlqyY=3Lچ9G-TIH&aLZuLЖ|Q]MY HSl&yX]pHO /k`TI|It]3mz *65l P#I<&Yg>azi b<D']圮kl" u<3emT26Dxו;?:Y :݈~UQ @:QBN=sq<s .�3XENKdZ\.9rhC2>Xa*,E!#^h:x4L?tƌ[A'1` Ҙ#3FqwH($zd@;Bl7yFN!7~epK1*KLG!-%4Hy[I,a3Ct~('y f ,�I+y@++\/&}#4 ,#B|^Hr#=r#F$/{{Tdxi1`,"țMa!W.VZR`I cT 860&/ Ip )k*Lh(EI詢>5&9˵D&`R[HYB5<*99}F5鞵MFUk83@WJs)A2+g 6zĪ<UOP%ʣThʈb*ΔarVx3l:1ʳQ@#|"9+RR +0hp C*z}Xb]r&r'%<Âh*wWgkp+>ehE0g`:6 /b(8U\QRpퟨbkB(QRk'xX|[B u:m`vaP)FE'=ځN@ހ9pZcm2a &,Ɓwałڊ0hH[PR[3)`C24B` 0$ xP9�8�2#݃Ƞ2bR<iΜ(1'-Id_\MQc@y*} ,(\PQ빞p�KC5pF d"^EDB[ӯ \ ~hx瑏w(~kH!s$SFGFS=sН VMG{ǰDw]A#퉐dk/2jbn/+N|F$GjU)<J.E-)I@<ƿ{َޝ\z(T/ELRk$h7 3^é˨uK`\.^U%v_@/Kd} 1e눺2FѸ.u02$$qQDCG(?JG񢳌ȝr׈yjhjBSSbwߥ05 `Z(*#`fQ �,}! +/ڈŨ_SXA1%3mN�a7Na> З2)oH*Waʡt&h aJ !oFE[A08* ΛE9DM]4cL�mr 8é@u vfuX UBVOmW+&ц:oHjĶ2:\L6 HN(^o*�l(nR4r*H>4*B@>P]o_ hBb<`MduWu<+wXARDR� ='zȵnl�VYElBeˠhNjIRB hƎd4Fz2KUWHА$<p"ܗ&_OH է}⢟o{OW|0~. l}ƽ̪o爖xӐ\|6Y#i9Lc$V!\3%$*gJ !JИdm< ;:!hQYE+>k#n-@w< {ĆVG`]ecdhC/6 +ysA=GoRҼj7"Go:A^d Y$= ٮd@_@-j9@>.čyݧCX@o$vul*ɕSiS5} FX'M[ƹv_zxuQK{bZImFS ϨyU2 eJ7C /2Fe4e&9 [M4b*@/kA'Z =-MÙMLJO`̈P8m' JdYNЮG~qųe\#XloV^=;FsfGsŧ%^G0=^Pl_Ƶ%`HAQ~Gm11z,0-' P<dd&<$w% Ȍ?!0!/F9Z2> Jnt^ʛtѭ9%Wq.n|Ц^nhɬ HbZ;bI}T|Rm8ԩ/#אDHU/W̹Qp RaYq6e)( #mr (X3 Oq%z8̽S S#}'2ZnId\Wٝ9 guq#/c0[u1ZwS8J}םD6@wީudYZ%Ϫ>ADÁ1O8Ǟq3][7ݚ7zjYe )k{oeXYgG]ZYQz ި& |NWAq >ZVKe"~</HN%Da ճ4I[b'Zfɮ`0&Pn.,-%B_ڪ`4cg,>Ϯ.9T=<My{L{mWƛ%D[]m*&wk0/q:"*- p>la@Zb9<ovK~;nDhpѽt|1,LJ8iA:Ø ΠP(€@RoP_9*x4E�}m>gyc endstream endobj 30 0 obj <</Subtype /XML /Type /Metadata /Length 1623 >> stream <?xpacket begin="" id="ovanvqqieewtaipobiiawmqi"?><x:xmpmeta xmlns:x="adobe:ns:meta/"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about=""><dc:format>application/pdf</dc:format><dc:creator><rdf:Seq><rdf:li/></rdf:Seq></dc:creator><dc:description/><dc:title><rdf:Alt><rdf:li xml:lang="x-default">s-inf-01</rdf:li></rdf:Alt></dc:title></rdf:Description><rdf:Description xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/" rdf:about=""><pdfx:ConTeXt.Jobname/><pdfx:ConTeXt.Time/><pdfx:ConTeXt.Url/><pdfx:ConTeXt.Version/><pdfx:ID>s-inf-01.2013-05-28T00:35:46-22:00</pdfx:ID><pdfx:PTEX.Fullbanner>This is LuaTeX, Version beta-0.77.0-2013052516 (TeX Live 2013/dev) (TeX Live 2013/dev) kpathsea version 6.1.1dev</pdfx:PTEX.Fullbanner></rdf:Description><rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about=""><xmp:CreateDate>2013-05-28T00:35:46-22:00</xmp:CreateDate><xmp:CreatorTool>ConTeXt - 2013.05.28 00:34</xmp:CreatorTool><xmp:ModifyDate>2013-05-28T00:35:46-22:00</xmp:ModifyDate><xmp:MetadataDate>2013-05-28T00:35:46-22:00</xmp:MetadataDate></rdf:Description><rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about=""><pdf:Keywords/><pdf:Producer>LuaTeX-0.77.0</pdf:Producer><pdf:Trapped>False</pdf:Trapped></rdf:Description><rdf:Description xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" rdf:about=""><xmpMM:DocumentID>uuid:63ed7b87-4146-a793-70e5-9923b9e9b4ef</xmpMM:DocumentID><xmpMM:InstanceID>uuid:ae277c87-4f8b-8f06-20df-cccf46e33d5d</xmpMM:InstanceID></rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end="w"?> endstream endobj 32 0 obj <</Length 25 /Filter/FlateDecode>> stream x^c``05j[ށ=_f��%  endstream endobj 33 0 obj <</Subtype/CIDFontType0C/Length 4249 /Filter/FlateDecode>> stream x^X Xڞ�"*jҞIժ\*ZŭՊ{AD* [�H ;YU6p[ڪ8Qֵ굶ߴyB{O99~yQ66H$dZ'e*S&zDGk^^쐀( +kaMY_Y?m)JT>3FwRXؽJZQ"j$2*o7 ы`w^: -0HSb8O@QS&OybsZ W*U wg2gZOU*&UP`:XV h!utY*jMj"AhU`F R,YXVA*mbDB"ߘ4IքL &k",̿xD<9 :EZ +#NϞj<^Ɛ49QIj*5I͢ޤR|j!zrR(Oj%EPZj 6STJ)0*BERZJGP*֚T<)gs=lRwQjU= ּLFFM3Z)9dmuv0ECj5gn{docXذo{?:b43텲4~ .&0_E%Fs $_zrs# s砂\S+4>5VVdX]4dIYm }װY \ g$q1ĴDžr} ly&7Y Q!a3qk*ִ%r8+gӱmA U_túiɒwN3#b#*yA!T0G%'Ƨe!<8n[y: ͩ&yi5vW%\:6=e[4c3 c#/+,tŔwmEIutNV>}^l.fgdZ ̃㸍xVƃ؀lJ <8X5ܫ ;1X kԶn-DwlS ǁ2'WiwoN; dXpb/oЕ{<Lr, Ȼuդ\At.o2W{L2~\|Kc+X9͝9癛I)̪0mKHC+5LOAVsawxuGc_7nl\Ma:9I案�i 󤧃?{ hxdkx4sάﯹC̥qAeߺ={1 ޙC ;W}r|H} xM gn6-l㡋x~a-H澹i Z5Apk`޼SϾ]0#z׆](û<ELEмO\c۰i:>,y!A,$rݕ%Ehʯp<fYx,߾J֬+K O$̊EpZut"%lC2="qj+ ݑь [-Ж}x"*T NXwB@C˙XwdHSFJ \Z!#Շ)ɋO.ԙ[e;Eg~Ul`yr6ŋ04NNU5I|v.˸4ƴ򆼊ˆٜh7bku=q8bι<O7{ףXqS0dfn!zcL?똵dc!P1`@g.�]GNea^H"XVBItZ`-l^A/I\xX+O@hڞ}nb>c!<ߍ t/۴Z11+4H5^kj^8ȓ݀1f gTXlU`36Qhڜ8KR-xw*)9qULEK󢧝 AkZ_@4�`8 aKY ?[^qÀͤa#InM_CqYVlW#hR}n`g,xF7b>=:΃}h($%M}NӒJ$) ~}Zبlx*mS\|F1J4}~i IaD^JY%i-VvU=ܶ'?|5N5s\':l*#QEZ T#lˎb[,1s,G1mK,xH<(a$.aY2>dFd.7Aj҇LRBo!]q;O?|*|,x9Nvx\~>Y{ £Ξ0QUe eՉQQ ݺ}~Q0ͻ&={^j19Q[dM/MPKkT#&?&O ÷NO~=8 Re ,?S7g RDH9 TTqiIiȰ)l ۄ올(Y\Ir]ùygTIi+%KcFY1۹?fg?f?GǼ0P-DKc[~b ¨[ cʺ`,(;d%Zͼ~{5>|xZqs`g9L5ÓQrޅ-r]Z\jd: ex<fJJ5'R jks859[ p&|KSs-~&XA"0Hs> c\[xA} #wNڹrc`|OJ�N_LטF\o?K/qܔOE Cn_SPe];E%yD `g<vv4byaYskwr>*"4-6qz9=SРc`b[o%2-n# V:/o<gjaAώsѻʊC(V9,dd Tz^ݬTFG !DzPo.*֘߫<19^t)NpݢuKЅq"! Dmj).#io!Ƀ(lKK 3it7 iwuVIa˽1k ~,5lFzFzPTQ]2"pX/~}\ܗ/yX b<2˸*u۳VM&`&Aȑ=#01u닅 1 >b`QG47Yk!$";`*Ikp.:-ڪN4u-' ŢY5]\@;Tql c 61{KS4 WaA95n+o4p;]'B|U̹ >+=)QvV.:~ér6@=XV_'Et/%Ý}'&&CZ%-i4xtqyٓ`-z ,,DLٻm򎽼Y|/#8%533Yt]!WSa~2u,9Bu}n$YK7"heW?>иz! $}1V#U/Z 89R#M qcl ~(Vq:nO)KGEF q}JOPCU[NlYW8wQTO^54 < ׈ v[l7}EsE(0x$;@OZ?S ط~ד N+f&щ|X9@WZ=4]p ׉gy7lҭΐ=KLrFi[5 l9yy2>RIm>M(ׅ?T�O >$Q#qYi~~=3 |B+i %H+ #@+ݾw\9a@ 9 s$9v)|GG ȽT'x`ٳ=`(8._8;"{nJM3MtH.DL ˩)k'obO endstream endobj 35 0 obj <</Length 578 /Filter/FlateDecode>> stream x^Tn@+fl'!\!Av-?t D-B5S]3Ï;=ᓧ>):#wI+a^fݙtJS~ezlKV.G.^twє*1>Oz7R~~б;]ўhB2ꎌT7E<:g3a(P輶iYkegl^+}(HyitBUN\D9Ҝkz&79rfr/=KEe  geNMfTHΈCj!VE\yQ,?.C'?@D h%0�r''=/@V%PLvd^p�!x ]|VY* O H0{/J8Hb̐ k\EVB"l+E@8LJ#%HMnB45 gL/ Bּ(<9cΚw{"YW>1׿t{UY]/2mU9 endstream endobj 20 0 obj <</Type/ObjStm/N 16/First 117/Length 1002 /Filter/FlateDecode>> stream x^UKoH WV< ]o: Q ֖ Iv&M{a 3C~CHC�bB@$8$B D,ND BT8K@PR<Iҧefeٰ*[[ B0vcjW/, 'ya.3N$5�"dlXW[ w^c!Wa!d0/ NʮjqkYjY}Tߑl&)e|Hҥz~x^TC5$\q"9]oGw%V</Ǚg2AKM)~TNA Y,g>"gm,Gi|83Ig69J!LZ..!:ByXemum}Wfc_wt*+!ڭ fՀv *W<%DT`Ru,\='[Z`TMZ.jmn`y~A+2ՔdEV\" [Zʋr&9,'0u" EX3Ân3Vwe,(Wվ1>ZwS!P9}j01rYaS(~y^)mwxInvCi vj4\L8vQ$nCU\?öU, @ڈM59@QC[7EU~n%5*qBu>ݦF0`8a(By<dr~3zRq~v*-l Τ~I[iK#Ź9|-aF1v2i-Fg2FM<}vks`cnҰ BtEc#p. Q__ nx7'=sk:~?v~ǻznʒ2> eO8Os7oO> CLG $d}<}Sִ5/|ApTL1 endstream endobj 40 0 obj <</Type/XRef/Index[0 41]/Size 41/W[1 2 1]/Root 38 0 R/Info 39 0 R/ID[<DFB7827771DF5C967FA0DF0DBB1BF884> <DFB7827771DF5C967FA0DF0DBB1BF884>]/Length 107 /Filter/FlateDecode>> stream x^ǹ@љչ:V!2'B!a G7^MCJPA=20@Gɐ0\~ j?ZoygyEg_#f,~\8 endstream endobj startxref 24392 %%EOF ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/page-app.mkii�������������������������������0000644�0001750�0001750�00000014763�11754241457�024263� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=page-app, % from meta-fig %D version=1998.01.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Independent page building, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Applications} %D The fitting page code is moved from \type {meta-fig} to %D here. \unprotect \definepapersize [\??fp\s!dummy] [\c!width=\fittingwd, \c!height=\fittinght] \definelayout [\??fp\s!dummy] [\c!width=\fittingwd,\c!height=\fittinght,\c!location=\v!middle, \c!topspace=\!!zeropoint,\c!backspace=\!!zeropoint, \c!cutspace=\!!zeropoint,\c!bottomspace=\!!zeropoint, \c!textdistance=\!!zeropoint,\c!lines=0,\c!grid=\v!no, \c!top=\!!zeropoint,\c!bottom=\!!zeropoint, \c!margin=\!!zeropoint,\c!edge=\!!zeropoint, \c!leftmargin=\!!zeropoint,\c!leftedge=\!!zeropoint, \c!rightmargin=\!!zeropoint,\c!rightedge=\!!zeropoint, \c!header=\!!zeropoint,\c!footer=\!!zeropoint] \def\dostartfittingpage[#1][#2]% {\page % this is kind of tricky! there can be preceding page refs \autostarttext \bgroup % resulting in a zero height page; test fig-make ! \def\currentfittingpage{#1}% \dontcomplain % runs under current page regime, i.e. page variables passed to mp \getparameters[\currentfittingpage][\c!paper=,#2]% auto or size or nothing \setbox\scratchbox\hbox \bgroup % needed later \getparameters[\currentfittingpage][\c!paper=,#2]% auto or size or nothing \doifvalue{\currentfittingpage\c!margin}\v!page % undocumented {\offsetbox [\c!leftoffset=\backspace, \c!rightoffset=\cutspace, \c!topoffset=\topspace, \c!bottomoffset=\bottomspace]\hbox}% \bgroup \scale[\c!scale=\getvalue{\currentfittingpage\c!scale}]% \bgroup\localframed[\currentfittingpage]% \bgroup} \def\dostopfittingpage {\egroup % localframed \egroup % scale \egroup % offsetbox \egroup % scratchbox \edef\fittingwd{\the\wd\scratchbox}% \edef\fittinght{\the\ht\scratchbox}% \startlocallayout \ifdim\fittinght<\lineheight % write status : too small \setbox\scratchbox\vbox to \lineheight{\vss\box\scratchbox\vss}% \edef\fittinght{\the\lineheight}% \fi \let\checkcurrentlayout\relax % else interference with odd/even layout \processaction [\getvalue{\currentfittingpage\c!paper}] [ \v!auto=>\let\fittingpapersize\printpapersize, \s!unknown=>\let\fittingpapersize\commalistelement, \s!default=>\def\fittingpapersize{\??fp\s!dummy}]% \expanded{\setuppapersize[\??fp\s!dummy][\fittingpapersize]}% \definelayout [\v!page]% [\c!location=\v!middle, \c!width=\fittingwd, \c!height=\fittinght]% \setuplayout [\v!page]% \startmakeup[\v!standard][\c!textstate=\v!empty,\c!doublesided=\v!no,\c!page=]% \centerbox{\box\scratchbox}% \stopmakeup \stoplocallayout \egroup \autostoptext} %D \TEX\ pages (for \METAPOST\ pages, see \type {meta-fig}): \presetlocalframed[\??tg] \def\setupTEXpage {\dodoubleargument\getparameters[\??tg]} \def\startTEXpage {\dosingleempty\dostartTEXpage} \def\dostartTEXpage[#1]% {\dostartfittingpage[\??tg][#1]\gobblespacetokens} \def\stopTEXpage {\removelastspace \dostopfittingpage} \setupTEXpage [\c!scale=1000, \c!strut=\v!no, \c!align=\v!normal, % needed, else problems ! \c!offset=\v!overlay, \c!width=\v!fit, \c!height=\v!fit, \c!frame=\v!off] %D For Mojca: %D %D \starttyping %D \startTEXstream \chapter{Bla} Hello world!\crlf Hello world! \stopTEXstream %D \startTEXpage \chapter{Bla} Hello world!\crlf Hello world! \stopTEXpage %D \stoptyping %D %D maybe I should support stream=yes in framed. \def\startTEXstream {\dosingleempty\dostartTEXstream} \def\dostartTEXstream[#1]% {\page \defineoutputstream[tex]% \enableoutputstream[tex]% \def\stopTEXstream {\disableoutputstream \startTEXpage \outputstreamunvbox[tex]% \stopTEXpage}} %D Application pages (for an example, see \type {m-pstric}): \def\@@texapp{texapp} \def\@@texdim{texdim} \def\saveTEXapplication#1#2% {\immediate\openout\scratchwrite=\bufferprefix\@@texdim.tmp \immediate\write\scratchwrite{\dimen#1=\the\ht\scratchbox}% \immediate\write\scratchwrite{\dimen#2=\the\wd\scratchbox}% \immediate\closeout\scratchwrite} \def\restoreTEXapplication {\readlocfile{\bufferprefix\@@texdim.tmp}\donothing\donothing} \def\startTEXapplication {\dosingleempty\dostartTEXapplication} \long\def\dostartTEXapplication[#1]#2#3\stopTEXapplication {\bgroup \bgroup \let\f!temporaryextension\c!tex \setbuffer[\@@texapp]% \starttext #2% preamble \startTEXpage[#1]% \topskip\zeropoint \setbox\scratchbox\hbox{#3}% \saveTEXapplication02% dimensions \box\scratchbox \stopTEXpage \stoptext \endbuffer \egroup \doifelse\jobsuffix{dvi}\donetrue\donefalse \executesystemcommand{texexec \bufferprefix\@@texapp.tex --once --batch}% \ifdone % eps \executesystemcommand{dvips -E* -o \@@texapp.eps \@@texapp}% \else % pdf \executesystemcommand{dvips \bufferprefix\@@texapp}% \executesystemcommand{ps2pdf \bufferprefix\@@texapp.ps \bufferprefix\@@texapp.pdf}% % \executesystemcommand{texmfstart pstopdf \bufferprefix\@@texapp.ps \bufferprefix\@@texapp.pdf}% \fi \restoreTEXapplication % dimensions \doifelse\jobsuffix{dvi}\donetrue\donefalse \setbox\scratchbox\hbox {\expanded{\externalfigure [\bufferprefix\@@texapp.\ifdone eps\else pdf\fi] [\c!object=\v!no]}}% \setbox\scratchbox\hbox {\lower\ht\scratchbox\hbox{\raise\dimen2\box\scratchbox}}% \wd\scratchbox\dimen0 \ht\scratchbox\dimen2 \dp\scratchbox\zeropoint \box\scratchbox \egroup} %D \macros %D {startpagefigure} %D %D \starttyping %D \starttext \pagefigure[two.1] \stoptext %D \stoptyping \def\startpagefigure {\dodoubleempty\dostartpagefigure} \def\dostartpagefigure[#1][#2]% {\bgroup \getparameters[\??ex][\c!offset=\v!overlay,#2]% \startTEXpage[\c!offset=\@@exoffset]% \externalfigure[#1][#2]\ignorespaces} % so we can put some text below the graphic \def\stoppagefigure {\stopTEXpage \egroup} \def\pagefigure {\dodoubleempty\dopagefigure} \def\dopagefigure[#1][#2]% {\dostartpagefigure[#1][#2]\stoppagefigure} \protect \endinput �������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-pdx.xml��������������������������������0000644�0001750�0001750�00000003050�11571377075�024144� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <!-- lpdf-pdx.xml --> <x:xmpmeta xmlns:x="adobe:ns:meta/"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/pdf</dc:format> <dc:creator> <rdf:Seq> <rdf:li/> </rdf:Seq> </dc:creator> <dc:description/> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default"/> </rdf:Alt> </dc:title> </rdf:Description> <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/"> <pdfx:ConTeXt.Jobname/> <pdfx:ConTeXt.Time/> <pdfx:ConTeXt.Url/> <pdfx:ConTeXt.Version/> <pdfx:ID/> <pdfx:PTEX.Fullbanner/> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <xmp:CreateDate/> <xmp:CreatorTool/> <xmp:ModifyDate/> <xmp:MetadataDate/> </rdf:Description> <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> <pdf:Keywords/> <pdf:Producer/> <pdf:Trapped>False</pdf:Trapped> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> <xmpMM:DocumentID/> <xmpMM:InstanceID/> </rdf:Description> </rdf:RDF> </x:xmpmeta> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-mat.mkvi�������������������������������0000644�0001750�0001750�00000046635�12134352503�024322� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=font-mat, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Math, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Math} \unprotect %D Be nice: \ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi \ifdefined\??fontinstancebasic \else \installcorenamespace{fontinstancebasic} \fi \ifdefined\??fontinstanceclass \else \installcorenamespace{fontinstanceclass} \fi %D \macros %D {textonly} %D %D Traditionally math has a big impact on font definitions, mainly %D because we need to define alphabet variants using families and %D fonts. This means that one can easily get 10 fonts loaded per %D math size. In \MKIV\ we use a different approach: one family %D which has either a virtual font made of traditional fonts, or %D an \OPENTYPE\ font that has it all. %D %D We currently use only one math family but in the future we %D might consider using a second one for bold math. For the %D moment we keep the \MKII\ method of using a token register %D for definitions but we already dropped the text and symbols %D ones since they now live in the same family. \newtoks \t_font_math_strategies \newconditional\c_font_synchronize_math_fonts \settrue\c_font_synchronize_math_fonts \unexpanded\def\font_helpers_synchronize_math % math stuff in mmode {\ifconditional\c_font_synchronize_math_fonts\the\t_font_math_strategies\fi} \unexpanded\def\textonly{\setfalse\c_font_synchronize_math_fonts} % document this %D The main math font definer. We have removed some optimized %D code simply because we now always have a fontclass. We could %D check for fontclass being default or empty and save a few %D tests but it does not help us when no math is defined. %D Because we want to keep mr=.. and mb=... settings (read: not %D break downward compatibility by enforcing mrlr etc) we need a %D bit more code that optimal. % todo: \c_font_fam_mr \let\c_font_fam_mr \zerocount % math regular \let\c_font_fam_mr_lr\plusone % math regular l2r \let\c_font_fam_mr_rl\plustwo % math regular r2l \let\c_font_fam_mb \plusthree % math bold \let\c_font_fam_mb_lr\plusfour % math bold l2r \let\c_font_fam_mb_rl\plusfive % math bold r2l \definesystemattribute[mathfamily][public] \newconditional\c_font_bidirectional_math_strategy % can be default, not that much overhead: \settrue\c_font_bidirectional_math_strategy \newconditional\c_font_complete_bold_math_strategy \settrue\c_font_complete_bold_math_strategy \def\mathtextsuffix {-text} \def\mathscriptsuffix {-script} \def\mathscriptscriptsuffix{-scriptscript} \def\mathsizesuffix{\ifcase\fontface\or\mathtextsuffix\or\mathscriptsuffix\or\mathscriptscriptsuffix\fi} % Beware: truefontname also does a fallback on defaultfontclass so there % can be some interference here, which is why we use a different method % for bold. \def\font_helpers_set_math_family_a {\ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else \ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size \csname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \else \font_helpers_set_math_family_b \fi\fi} \def\font_helpers_set_math_family_b {\ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else \ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size \csname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \else \font_helpers_set_math_family_c \fi\fi} \def\font_helpers_set_math_family_c {\ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else \ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size \csname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \else \settrue \c_font_auto_size \fi\fi} \def\font_helpers_set_math_family_indeed#mrtag#family% \fontface etc are also used later on {\let\savedfontbody\fontbody \let\fontfamily#family% % the order is important as we depend on known id's when completing fonts \let\fontface\!!plusthree\font_helpers_set_math_family_a\scriptscriptfont#mrtag\font \let\fontface\!!plustwo \font_helpers_set_math_family_a\scriptfont #mrtag\font \let\fontface\!!plusone \font_helpers_set_math_family_a\textfont #mrtag\font \let\fontface\!!zerocount \let\fontbody\savedfontbody \setfalse\c_font_auto_size} \def\font_helpers_set_math_family_bold_a#font#mbfam#mrfam% {\ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname #font#mbfam\font \else \ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size \csname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname #font#mbfam\font \else #font#mbfam#font#mrfam% \fi\fi} \def\font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam% \c_font_fam_mb \s!mb \c_font_fam_mr {\let\savedfontclass\defaultfontclass \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one \let\savedfontbody\fontbody \let\fontfamily#familytag% \let\fontface\!!plusthree\font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% \let\fontface\!!plustwo \font_helpers_set_math_family_bold_a\scriptfont #mbfam#mrfam% \let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% \let\fontface\!!zerocount \let\fontbody\savedfontbody \let\defaultfontclass\savedfontclass \setfalse\c_font_auto_size} % optimized: math fonts are never changed (10K \bfa $x$: 3.2 => 2.5 (baseline 1.0)) % % sort of tricky: we cannot reset in \everybeforedefinetypeface as we don't know % all sizes so we postpone the optimization to the first starttext % % pitfall: we should reset 'm when a fontclass name is reused \newconditional\optimizemathfontdefinitions \settrue\optimizemathfontdefinitions \def\font_helpers_set_math_family#mrfam#familytag% {\ifconditional\optimizemathfontdefinitions \ifcsname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-1\endcsname % \writestatus{fonts}{math: reusing \fontclass\fontbody\s!mm#familytag\fontsize1}% \font_helpers_preset_math_family_indeed#mrfam#familytag% \else % \writestatus{fonts}{math: defining \fontclass\fontbody\s!mm#familytag\fontsize1}% \font_helpers_set_math_family_indeed#mrfam#familytag% \fi \else \font_helpers_set_math_family_indeed#mrfam#familytag% \fi} \def\font_helpers_set_math_family_bold#mbfam#familytag#mrfam% {\ifconditional\optimizemathfontdefinitions %\ifcsname\??fontinstanceclass\fontclass-\textface-\s!mm-#familytag-\fontsize-1\endcsname \ifcsname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-1\endcsname \font_helpers_preset_math_family_indeed#mbfam#familytag% \else \font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam% \fi \else \font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam% \fi} %D It can happen that we use a bodyfont with no math in which case %D we have a problem with setting the global bodyfont size in the %D page builder. For instance in: %D %D \starttext %D \definetypeface[test][rm][serif][pagella][default] %D \setupbodyfont[test] %D test %D \stoptext %D %D This is why we need the check. At the cost of some extra checking we gain a little %D in restoring global states and, what's more important, we get rid of large math parameter %D push/pop in tracingall when not needed. \def\font_helpers_preset_math_family_indeed#fam#familytag% {\expandafter\let\expandafter\v_font_math_one\csname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-1\endcsname \ifx\v_font_math_one\relax \font_helpers_preset_math_family_warning \else\ifnum\fontid\textfont#fam=\fontid\v_font_math_one\else \font_helpers_preset_math_family_indeed_changed#fam#familytag% \fi\fi} \def\font_helpers_preset_math_family_warning {\writestatus{fonts}{math: unset for global bodyfont \fontclass\space at \fontbody}} \def\font_helpers_preset_math_family_indeed_changed#fam#familytag% {\scriptscriptfont#fam\csname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-3\endcsname \scriptfont #fam\csname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-2\endcsname \textfont #fam\v_font_math_one} \let\font_helpers_reset_fontclass_math_families\gobbleoneargument % It would be nice if characters could be defined in a neutral way (say fam 255) and % be mapped to a real family during noad list construction. However, this changes % tex in critical places so for the moment we simulate this using manipulation. % For tracing purposes we use three families but in l2r mode 1 and 2 are copies of 0 % while in rl mode 0 is a copy of 1. There is no real overhead involved in this. This % also permits different font definitions for normal and mixed. \let\m_font_class_direction\empty \let\m_font_class_features \empty \let\m_font_class_fallbacks\empty \let\m_font_class_goodies \empty \let\m_font_direction\empty \let\m_font_features \empty \let\m_font_fallbacks\empty \let\m_font_goodies \empty \appendtoks % can be analyzed once % why here .. \edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}% % ... \ifx\m_font_class_direction\v!both \settrue\c_font_bidirectional_math_strategy \else \setfalse\c_font_bidirectional_math_strategy \fi \to \t_font_math_strategies \def\font_helpers_bidirectional_mathstrategy_yes {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else \font_helpers_bidirectional_mathstrategy_yes_changed \fi} \def\font_helpers_bidirectional_mathstrategy_yes_changed {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr} \def\font_helpers_bidirectional_mathstrategy_nop {\font_helpers_set_math_family\c_font_fam_mr\s!mr \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else \font_helpers_bidirectional_mathstrategy_nop_changed \fi} \def\font_helpers_bidirectional_mathstrategy_nop_changed {\textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr \textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr} \appendtoks \ifconditional\c_font_bidirectional_math_strategy \font_helpers_bidirectional_mathstrategy_yes \else \font_helpers_bidirectional_mathstrategy_nop \fi \to \t_font_math_strategies \def\font_helpers_complete_bold_math_strategy_yes_bidi {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else \font_helpers_complete_bold_math_strategy_yes_bidi_changed \fi} \def\font_helpers_complete_bold_math_strategy_yes_bidi_changed {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr} \def\font_helpers_complete_bold_math_strategy_yes {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else \font_helpers_complete_bold_math_strategy_yes_changed \fi} \def\font_helpers_complete_bold_math_strategy_yes_changed {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb} \def\font_helpers_complete_bold_math_strategy_nop {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else \font_helpers_complete_bold_math_strategy_nop_changed \fi} \def\font_helpers_complete_bold_math_strategy_nop_changed {\textfont \c_font_fam_mb \textfont \c_font_fam_mr \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr} \def\font_helpers_apply_complete_bold_math_strategy {\ifconditional\c_font_complete_bold_math_strategy \ifconditional\c_font_bidirectional_math_strategy \font_helpers_complete_bold_math_strategy_yes_bidi \else \font_helpers_complete_bold_math_strategy_yes \fi \else \font_helpers_complete_bold_math_strategynop \fi} \appendtoks \font_helpers_apply_complete_bold_math_strategy \to \t_font_math_strategies \ifdefined\defaultmathfamily \else \setnewconstant\defaultmathfamily\zerocount \fi \appendtoks \fam\defaultmathfamily % all characters and symbols are in this family \to \everymathematics \unexpanded\def\font_helpers_synchronize_math_family_mr {\attribute\mathfamilyattribute\ifconditional\c_font_bidirectional_math_strategy \ifconditional\c_math_right_to_left \plustwo \else \plusone \fi \else \zerocount \fi} \unexpanded\def\font_helpers_synchronize_math_family_mb {\attribute\mathfamilyattribute\ifconditional\c_font_bidirectional_math_strategy \ifconditional\c_math_right_to_left \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi \else \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi \fi \else \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi \fi} \installcorenamespace{fontmathsynchronizer} \installcorenamespace{fontmathstoredstrategy} \letvalue{\??fontmathsynchronizer\s!tf }\font_helpers_synchronize_math_family_mr \letvalue{\??fontmathsynchronizer\s!sl }\font_helpers_synchronize_math_family_mr \letvalue{\??fontmathsynchronizer\s!it }\font_helpers_synchronize_math_family_mr \letvalue{\??fontmathsynchronizer\s!bf }\font_helpers_synchronize_math_family_mb \letvalue{\??fontmathsynchronizer\s!bs }\font_helpers_synchronize_math_family_mb \letvalue{\??fontmathsynchronizer\s!bi }\font_helpers_synchronize_math_family_mb \letvalue{\??fontmathsynchronizer\empty}\font_helpers_synchronize_math_family_mr \def\font_helpers_synchronize_math_family {\csname\??fontmathsynchronizer\ifcsname\??fontmathsynchronizer\fontalternative\endcsname\fontalternative\fi\endcsname} \ifdefined \fontid % we need to keep this test for a while \appendtoks \ifnum\fontid\textfont\zerocount=\fontid\textfont\plusthree \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_partial_bold_strategy \else \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_full_bold_strategy \fi \to \t_font_math_strategies \else \appendtoks \edef\currentmathfontmr{\fontname\textfont\zerocount}% \edef\currentmathfontmb{\fontname\textfont\plusthree}% \ifx\currentmathfontmr\currentmathfontmb \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_partial_bold_strategy \else \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_full_bold_strategy \fi \to \t_font_math_strategies \fi \def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname} \newconditional\c_font_pseudo_bold_math_state \def\font_helpers_set_math_partial_bold_strategy{\settrue \c_font_pseudo_bold_math_state} \def\font_helpers_set_math_full_bold_strategy {\setfalse\c_font_pseudo_bold_math_state} \appendtoks \font_helpers_synchronize_math_bold_strategy \to \everymathematics % Bold is somewhat special as we might want both full-bold-math mixed % regular-math, as well as automatic adaption to outer bold (in titles % and inline text bold) so we will need explicit switches as well as % an automatic one. (We will use lucida as an example.) \ifdefined\mathdefault \else \let\mathdefault\relax \fi \unexpanded\def\mr % math regular {\ifmmode \font_helpers_synchronize_math_family_mr \else \font_helpers_set_current_font_alternative\s!mr \fi \mathdefault} \unexpanded\def\mb % math bold {\ifmmode \font_helpers_synchronize_math_family_mb \else \font_helpers_set_current_font_alternative\s!mb \fi \mathdefault} \appendtoks \font_helpers_synchronize_math_family % auto bold \to \everymathematics %D \macros %D {bigmath,nobigmath} %D %D We can inhibit this slow||downer with: % these can best be combined % 0=never 1=everymath 2=always \setnewconstant\synchronizebigmathflag\plusone \appendtoks \ifcase\synchronizebigmathflag % never \or \synchronizebigmath \or % always \fi \to \everymathematics \unexpanded\def\nobigmath {\synchronizebigmathflag\zerocount} \unexpanded\def\autobigmath{\synchronizebigmathflag\plusone\synchronizebigmath} \unexpanded\def\bigmath {\synchronizebigmathflag\plustwo\synchronizebigmath} \let\bigmathfontsize\empty \unexpanded\def\synchronizebigmath {\ifx\bigmathfontsize\fontsize % already in sync \else \let\bigmathfontsize\fontsize \font_helpers_synchronize_math \fi} \unexpanded\def\font_helpers_check_big_math_synchronization {\ifcase\synchronizebigmathflag % never \or \ifmmode \synchronizebigmath \fi \or \synchronizebigmath \fi} \protect \endinput ���������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-obj.mkiv�������������������������������0000644�0001750�0001750�00000033323�12130411274�024246� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=pack-obj, %D version=1998.01.15, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Objects, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Objects} \unprotect \let\objectreference\gobblefourarguments % catch mkii tuo stuff \registerctxluafile{pack-obj}{1.001} % \startluacode % local texbox, texdimen, texcount, texwrite = tex.box, tex.dimen, tex.count, tex.write % local pdfxform, pdfrefxform = pdf.xform, pdf.refxform % % function pdf.xform (l) texbox["objectbox"] = nil return l end % function pdf.refxform(l) return node.copy_list(l) end % % backends.codeinjections.register = pdf.xform % backends.codeinjections.restore = pdf.refxform % % local codeinjections = backends.codeinjections % % objects = objects or { } % % local data = { } % % objects.data = data % objects.n = 0 % % function objects.register(name) % objects.n = objects.n + 1 % local list = texbox.objectbox % nodes.handlers.finalize(list) % data[name] = { % codeinjections.restore(list), % texdimen.objectwd, % texdimen.objectht, % texdimen.objectdp, % texdimen.objectoff, % } % end % % function objects.restore(name) % local d = data[name] % if d then % texbox .objectbox = codeinjections.restore(d[1]) % texdimen.objectwd = d[2] % texdimen.objectht = d[3] % texdimen.objectdp = d[4] % texdimen.objectoff = d[5] % else % texbox .objectbox = nil % texdimen.objectwd = 0 % texdimen.objectht = 0 % texdimen.objectdp = 0 % texdimen.objectoff = 0 % end % end % % function objects.reference(name) % local d = data[name] % texwrite((d and d[1]) or 0) % end % % function objects.enhance(name) % local d = data[name] % if d then % d[6] = texcount.realpageno % end % end % % function objects.page(name) % local d = data[name] % texwrite((d and d[6]) or texcount.realpageno) % end % % function objects.doifelse(name) % commands.testcase(data[name]) % end % \stopluacode % % \unprotect % % \newbox \objectbox % \newtoks \everyobject % \newif \ifinobject % % \newdimen\objectoff \def\objectmargin{\the\objectoff} % \newdimen\objectwd \def\objectwidth {\the\objectwd } % \newdimen\objectht \def\objectheight{\the\objectht } % \newdimen\objectdp \def\objectdepth {\the\objectdp } % % \def\objectoffset{1cm} % % \everyobject{\the\pdfbackendeveryxform} % % \unexpanded\def\setobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\the\everyobject\dowithnextbox{\pack_objects_set{#1}{#2}}} % \unexpanded\def\settightobject#1#2{\begingroup\objectoff\zeropoint \inobjecttrue\the\everyobject\dowithnextbox{\pack_objects_set{#1}{#2}}} % % \let\objectsetvbox\vbox %\def\objectsetvbox{\ruledvbox} % \let\objectgetvbox\vbox %\def\objectgetvbox{\ruledvbox} % \let\objectsethbox\hbox %\def\objectsethbox{\ruledhbox} % \let\objectgethbox\hbox %\def\objectgethbox{\ruledhbox} % % \unexpanded\def\pack_objects_set#1#2% % {\objectwd\wd\nextbox % \objectht\ht\nextbox % \objectdp\dp\nextbox % \ifdim\objectoff=\zeropoint\relax % \setbox\objectbox\box\nextbox % \else % \setbox\objectbox\objectsetvbox spread 2\objectoff{\vss\objectsethbox spread 2\objectoff{\hss\box\nextbox\hss}\vss}% % \fi % \ctxlua{objects.register("#1::#2")}% % \endgroup} % % \unexpanded\def\getobject#1#2% % {\begingroup % \ctxlua{objects.restore("#1::#2")}% % \ifdim\objectoff=\zeropoint\relax \else % \setbox\objectbox\objectgetvbox to \dimexpr\objectht+\objectdp\relax % {\vss\objectgethbox to \objectwd{\hss\box\objectbox\hss}\vss}% % \wd\objectbox\objectwd % \ht\objectbox\objectht % \dp\objectbox\objectdp % \fi % \box\objectbox % \endgroup} % % \unexpanded\def\getpageobject#1#2% % {\begingroup % \ctxlua{objects.restore("#1::#2")}% % \ifdim\objectoff=\zeropoint\relax % \setbox\objectbox\objectgethbox{\ctxlatelua{objects.enhance("#1::#2")}\box\objectbox} % \else % \setbox\objectbox\objectgetvbox to \dimexpr\objectht+\objectdp\relax % {\vss\objectgethbox to \objectwd{\ctxlatelua{objects.enhance("#1::#2")}\hss\box\objectbox\hss}\vss}% % \wd\objectbox\objectwd % \ht\objectbox\objectht % \dp\objectbox\objectdp % \fi % \box\objectbox % \endgroup} % % \unexpanded\def\setobjectdirectly #1#2{\ctxlua{objects.register("#1::#2")}} % \unexpanded\def\getobjectdirectly #1#2{\ctxlua{objects.restore ("#1::#2")}} % \unexpanded\def\getobjectdimensions #1#2{\ctxlua{objects.restore ("#1::#2")}} % \unexpanded\def\doifobjectfoundelse #1#2{\ctxlua{objects.doifelse("#1::#2")}} % \unexpanded\def\doifobjectreferencefoundelse#1#2{\ctxlua{objects.doifelse("#1::#2")}} % % \let\objectreferenced\relax % \let\driverreferenced\relax % % \unexpanded\def\pack_objects_register_reference{\writestatus{objects}{obsolete: register object reference}\gobblethreearguments} % \unexpanded\def\pack_objects_overload_reference{\writestatus{objects}{obsolete: overload object reference}\gobblethreearguments} % \unexpanded\def\dosetobjectreference {\writestatus{objects}{obsolete: set object reference}\gobblethreearguments} % \unexpanded\def\dosetdriverreference {\writestatus{objects}{obsolete: set driver reference}\gobblethreearguments} % % \def\defaultobjectreference{0} % \def\defaultobjectpage {\realfolio} % % \unexpanded\def\dogetobjectreference #1#2#3{\xdef#3{\ctxlua{objects.reference("#1::#2)}}} % \unexpanded\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxlua{objects.page("#1::#2))}}} % % \protect % % \starttext % test \setobject{a}{b}\ruledhbox{xxx}\getobject{a}{b} test % \vskip3cm % test \settightobject{a}{b}\ruledhbox{xxx}\getobject{a}{b} test % test \settightobject{a}{c}\ruledhbox{xxx}\getobject{a}{c} test % \dorecurse{5000}{test \setobject{a}{b}\ruledhbox{xxx}\getobject{a}{b} test } % \stoptext %D \macros %D {setobject,getobject,ifinobject} %D %D Boxes can be considered reuable objects. Unfortunaltely once %D passed to the \DVI\ file, such objects cannot be reused. In %D \PDF\ however, reusing is possible and sometimes even a %D necessity. Therefore, \CONTEXT\ supports reusable objects. %D %D During the \TEX\ processing run, boxes can serve the purpose %D of objects, and the \DVI\ driver module implements objects %D using packed boxes. %D %D The \PDF\ and \PDFTEX\ driver modules implement objects %D using \PDF\ forms. There is no (real) restriction on the %D number of objects there. %D %D The first application of objects in \CONTEXT\ concerned %D \METAPOST\ graphics and fill||in form fields. The first %D application can save lots of bytes, while the latter use is %D more a necessity than byte saving. %D %D \starttyping %D \setobject{class}{name}\somebox{} %D \getobject{class}{name} %D \stoptyping %D %D Here \type{\somebox} can be whatever box specification suits %D \TEX. We save the dimensions of an object, although some %D drivers will do so themselves. This means that when for %D instance using \PDFTEX\ we could save a hash entry plus some %D 20+ memory locations per object by delegating this %D housekeeping to the driver. The current approach permits %D us to keep the box characteristic too. \installcorenamespace {objects} \newif\ifinobject % public (might become a conditional) \def\objectplaceholder{NOT YET FLUSHED} \unexpanded\def\presetobject#1#2% \global added {\ifcsname\??objects#1::#2\endcsname\else \global\expandafter\let\csname\??objects#1::#2\endcsname\objectplaceholder \fi} \unexpanded\def\pack_objects_set#1#2#3% {\ifcsname\??objects#2::#3\endcsname \expandafter\gobblefivearguments \else % tzt, overload internal referenced objects to save entries \expandafter\pack_objects_set_indeed \fi {#1}{#2}{#3}} \unexpanded\def\resetobject#1#2% {\letbeundefined{\??objects#1::#2}} %D \macros %D {finalizeobjectbox} %D %D This one provides a hook for last minute object box processing %D we need this in \MKIV. \ifdefined\finalizeobjectbox \else \let\finalizeobjectbox\gobbleoneargument \fi %D Somehow there is a rounding error problem in either \PDFTEX\ %D or in viewers, or maybe it is conforming the specs. The next %D variable compensate for it by removing the rather tight %D clip. \def\objectoffset{1cm} \unexpanded\def\pack_objects_set_indeed#1#2#3% {\bgroup \globalpushmacro\crossreferenceobject \objectreferenced \inobjecttrue \dowithnextbox {\globalpopmacro\crossreferenceobject \pack_objects_set_indeed_indeed{#1}{#2}{#3}% \egroup}} % in luatex version < 66 we had a 1bp compensation (hardcoded in luatex) \let\pack_objects_handle\relax \unexpanded\def\pack_objects_set_indeed_indeed#1#2#3% {\begingroup \scratchdimen\objectoffset \expandafter\xdef\csname\??objects#2::#3\endcsname {\pack_objects_handle {#2}% {#3}% {\ifhbox\nextbox\hbox\else\vbox\fi}% {\number\wd\nextbox}% {\number\ht\nextbox}% {\number\dp\nextbox}% {\number\scratchdimen}}% \expanded % freeze the dimensions since \dostartobject may use \nextbox {\dostartobject{#2}{#3}{\the\wd\nextbox}{\the\ht\nextbox}{\the\dp\nextbox}}% \ifcase#1\relax\else \ifdim\objectoffset>\zeropoint \setbox\nextbox\vbox \s!spread 2\scratchdimen {\forgetall \offinterlineskip \vss\hbox \s!spread 2\scratchdimen{\hss\box\nextbox\hss}\vss}% \fi \fi \box\nextbox \dostopobject \endgroup} \unexpanded\def\getobject#1#2% {\ifcsname\??objects#1::#2\endcsname \begingroup \let\pack_objects_handle\pack_objects_get \csname\??objects#1::#2\expandafter\endcsname \else {\infofont[object #1::#2]}% \fi} \unexpanded\def\pack_objects_get#1#2#3#4#5#6#7% don't change this, should work for dvi & pdf {\forgetall % todo: if no attr then faster \setbox\scratchbox\vbox attr \viewerlayerattribute \attribute\viewerlayerattribute {\doinsertobject{#1}{#2}}% \setbox\scratchbox#3% {\vbox to #5\scaledpoint {\ifdim\ht\scratchbox>#5\scaledpoint \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else\ifdim\wd\scratchbox>#4\scaledpoint \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else %\vss\box\scratchbox \vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% fix Chof \fi\fi}}% \box\scratchbox \endgroup} %D If needed one can ask for the dimensions of an object with: %D %D \starttyping %D \getobjectdimensions{class}{name} %D \stoptyping %D %D The results are reported in \type {\objectwidth}, \type %D {\objectheight} and \type {\objectdepth}. \unexpanded\def\pack_objects_get_dimensions#1#2#3#4#5#6#7% {\def\objectwidth {#4\s!sp}% \def\objectheight{#5\s!sp}% \def\objectdepth {#6\s!sp}% \def\objectmargin{#7\s!sp}} \unexpanded\def\getobjectdimensions#1#2% {\let\pack_objects_handle\pack_objects_get_dimensions \let\objectwidth \!!zeropoint \let\objectheight\!!zeropoint \let\objectdepth \!!zeropoint \csname\??objects#1::#2\endcsname} %D Apart from this kind of objects, that have typeset content, %D we can have low level driver specific objects. Both types %D can have references to internal representations, hidden for %D the user. We keep track of such references by means of a %D dedicated cross reference mechanism. Normally, objects are %D defined before they are used, but forward referencing %D sometimes occurs. %D %D \starttyping %D \dosetobjectreference {class} {identifier} {reference value} {page} %D \dogetobjectreference {class} {identifier} \csname %D \stoptyping %D %D These commands are to be called by the \type{\startobject}, %D \type{\stopobject} and \type{\insertobject} specials. \unexpanded\def\objectreferenced{\global\chardef\crossreferenceobject\plusone} \unexpanded\def\driverreferenced{\global\chardef\crossreferenceobject\zerocount} \objectreferenced % no undefined test ! ! ! ! (pdftex fails on undefined objects) \unexpanded\def\pack_objects_register_reference#1#2#3{\normalexpanded{\noexpand\ctxlatecommand{saveobject("#1::#2",#3,\noexpand\the\realpageno)}}} \unexpanded\def\pack_objects_overload_reference#1#2#3{\ctxcommand{setobject("#1::#2",#3,\the\realpageno)}} \unexpanded\def\dosetobjectreference {\ifcase\crossreferenceobject \objectreferenced \expandafter\pack_objects_overload_reference \else \expandafter\pack_objects_register_reference \fi} \unexpanded\def\dosetdriverreference {\driverreferenced\dosetobjectreference} \def\defaultobjectreference#1#2{0} % driver dependent \def\defaultobjectpage #1#2{\realfolio} \unexpanded\def\dogetobjectreference #1#2#3{\xdef#3{\ctxcommand{objectnumber("#1::#2","\defaultobjectreference{#1}{#2}")}}} \unexpanded\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxcommand{objectpage("#1::#2","\defaultobjectpage{#1}{#2}")}}} \unexpanded\def\setobject {\driverreferenced\pack_objects_set1} \unexpanded\def\settightobject{\driverreferenced\pack_objects_set0} %D \macros %D {doifobjectfoundelse,doifobjectreferencefoundelse} %D %D To prevent redundant definition of objects, one can use %D the next tests: %D %D \starttyping %D \doifobjectfoundelse{class}{object}{do then}{do else} %D \doifobjectreferencefoundelse{class}{object}{do then}{do else} %D \stoptyping \unexpanded\def\doifobjectfoundelse#1#2% {\ifcsname\??objects#1::#2\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifobjectreferencefoundelse#1#2% {\ctxcommand{doifobjectreferencefoundelse("#1::#2")}} \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-system.mkiv�������������������������0000644�0001750�0001750�00000002007�12161703335�025474� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-fonts0system, % s-fnt-11, %D version=2006.02.01, % or so %D title=\CONTEXT\ Style File, %D subtitle=Listing Installed Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code usd to be in the kernel but since it's hardly used %D it's now a module. %D %D \starttyping %D \showinstalledfonts[pattern={officinasans.*}] %D \showinstalledfonts[pattern={officinaserif.*}] %D \showinstalledfonts[pattern={officina.*itc.*}] %D \stoptyping \startmodule[fonts-system] \registerctxluafile{s-fonts-system}{} \installmodulecommandluasingle \showinstalledfonts {moduledata.fonts.system.showinstalled} \stopmodule \continueifinputfile{s-fonts-system.mkiv} \usemodule[art-01] \setuplayout[overview] \setupbodyfont[7pt] \starttext \showinstalledfonts \stoptext �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/math-del.mkiv�������������������������������0000644�0001750�0001750�00000004277�12130411274�024261� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=math-del, %D version=2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Delimiters, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Delimiters} \unprotect %D Old code that will be redone: %D %D \macros %D {checkdelimiters, fakeleftdelimiter, fakerightdelimiter} %D %D Handy for non matching situations (as with mathml): %D %D \starttyping %D \checkdelimiters{... bla bla ...} %D \fakeleftdelimiter %D ... bla bla ... %D \fakerightdelimiter %D \stoptyping % Actually we can do better now with lua hacks. \newcount\c_math_delimiter_nesting \def\leftfakedelimiter {\advance\c_math_delimiter_nesting\minusone\gobbleoneargument} \def\rightfakedelimiter{\advance\c_math_delimiter_nesting\plusone \gobbleoneargument} \def\checkdelimiters#1% {\c_math_delimiter_nesting\zerocount \setbox\scratchbox\hbox\bgroup \let\left \leftfakedelimiter \let\right\rightfakedelimiter $#1\expandafter$\expandafter \egroup \expandafter\c_math_delimiter_nesting\the\c_math_delimiter_nesting\relax} \def\fakeleftdelimiter {\ifnum\c_math_delimiter_nesting>\zerocount\left .\fi} \def\fakerightdelimiter{\ifnum\c_math_delimiter_nesting<\zerocount\right.\fi} %D The following macros are used in the MathML interpreter, so %D there is a good change of them never being documented for %D other usage. \let\normalordelimiter\secondoftwoarguments \let\normalorfiller \firstoftwoarguments \unexpanded\def\enabledelimiter {\let\normalordelimiter\secondoftwoarguments} \unexpanded\def\disabledelimiter{\let\normalordelimiter\firstoftwoarguments} \unexpanded\def\enablefiller {\let\normalorfiller\secondoftwoarguments} \unexpanded\def\disablefiller {\let\normalorfiller\firstoftwoarguments} \def\mathopnolimits#1{\mathop{\mr#1}\nolimits} % was \rm, which follows text fonts (used in mml parser) \def\mathopdolimits#1{\mathop{\mr#1}} % was \rm, which follows text fonts (used in mml parser) \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-dis.mkii�������������������������������0000644�0001750�0001750�00000004654�11754241457�024265� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=lang-dis, %D version=2005.02.12, %D title=\CONTEXT\ Language Macros, %D subtitle=Distribution Patterns, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code used to be part of cont-usr.tex but now that we %D use more generic pattern files, we decided to isolate these %D mappings. \writestatus{loading}{ConTeXt Language Macros / Distribution Patterns} %D Hyphenation patterns are normally sought in filed named %D \type {lang-xx.pat}. When present on the system, those %D patterns take precedence. This list will be adapted to %D the actual situation, given that it's noticed. %D The us/uk hyph 1/2 files will go \unprotect % \definefilefallback [lang-ca.pat] [cahyph.tex] % \definefilefallback [lang-da.pat] [dkhyph.tex] % \definefilefallback [lang-de.pat] [dehyphn.tex] % \definefilefallback [lang-es.pat] [eshyph.tex] % \definefilefallback [lang-fi.pat] [fihyph.tex] % \definefilefallback [lang-fr.pat] [frhyph.tex] % \definefilefallback [lang-hr.pat] [hrhyph.tex] % \definefilefallback [lang-hu.pat] [huhyph.tex] % \definefilefallback [lang-it.pat] [ithyph.tex] % \definefilefallback [lang-la.pat] [lahyph7.tex] % \definefilefallback [lang-no.pat] [nohyph.tex] % \definefilefallback [lang-pl.pat] [plhyph.tex] % \definefilefallback [lang-pt.pat] [pthyph.tex] % \definefilefallback [lang-ro.pat] [rohyph.tex] % \definefilefallback [lang-ru.pat] [ruenhyph.tex] % \definefilefallback [lang-sl.pat] [sihyph.tex,slhyph.tex] % \definefilefallback [lang-sv.pat] [svhyph.tex,sehyph.tex] % \definefilefallback [lang-tr.pat] [tkhyph.tex,trhyph.tex] % \definefilefallback [lang-ua.pat] [ukrenhyp.tex] % \definefilefallback [lang-uk.pat] [ukhyphen.tex,ukhyph.tex] % \definefilefallback [lang-us.pat] [ushyphmax.tex,ushyph.tex,ushyph1.tex,ushyph2.tex,hyphen.tex] % \definefilefallback [lang-nl.pat] [nehyph96.tex,dutch96.pat,nehyph.tex] % \definefilefallback [lang-cz.pat] [czhyphen.tex,czhyph.pat] % \definefilefallback [lang-sk.pat] [skhyphen.tex,skhyph.pat] % \definefilefallback [lang-deo.pat] [dehypht.tex] % \definefilesynonym [lang-af.pat] [lang-nl.pat] % \definefilesynonym [lang-en.pat] [lang-us.pat] % \definefilesynonym [lang-en.hyp] [lang-us.hyp] \protect \endinput ������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-select.tex����������������������0000644�0001750�0001750�00000005517�12130411274�026165� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% engine=luatex %D \module %D [ file=mtx-context-select, %D version=2008.11.10, % about that time i started playing with this %D title=\CONTEXT\ Extra Trickry, %D subtitle=Selecting Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a \TEXEXEC\ features that has been moved to \MKIV. % begin help % % usage: context --extra=select [options] list-of-files % % --sort : sort filenames first % --topspace=dimension : distance above first line % --backspace=dimension : distance before left margin % --selection=list : n:m,p:q,... % --paperformat=spec : paper*print or paperxprint or 'fit' % --interaction : add hyperlinks % % end help \input mtx-context-common.tex \setuppapersize [\getdocumentargumentdefault{paperformat_from}{A4}] [\getdocumentargumentdefault{paperformat_to}{A4}] \setuppaper [offset=\getdocumentargumentdefault{paperformat_to}{0pt}] \setuplayout [width=middle, height=middle, topspace=\getdocumentargumentdefault{topspace}{0pt}, backspace=\getdocumentargumentdefault{backspace}{0pt}, location=middle, header=0pt, footer=0pt] \doif {\getdocumentargument{marking}} {yes} { \setuplayout [marking=on] } \doif {\getdocumentargument{interaction}} {yes} { \setupinteraction [state=start] \setupexternalfigures [interaction=yes] } \setupexternalfigures [directory=] \doifelse {\getdocumentargument{paperformat_paper}} {fit} { \doifdocumentfilename {1} { \getfiguredimensions [\getdocumentfilename{1}] \definepapersize [fit] [width=\figurewidth, height=\figureheight] \setuppapersize [fit] [fit] } } \starttext \startluacode local papersize = document.arguments.paperformat_paper or "A4" local printsize = document.arguments.paperformat_print or "A4" local selection = document.arguments.selection or "" local textwidth = document.arguments.textwidth or "0cm" -- needed ? if #document.files == 0 then context("no files given") elseif selection == "" then context("no selection given") else if document.arguments.sort then table.sort(document.files) end for _, filename in ipairs(document.files) do if not string.find(filename,"^mtx%-context%-") then logs.report("select",filename) context.filterpages ( { filename }, { selection }, { width = textwidth } ) end end end \stopluacode \stoptext ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-exp.mkii�������������������������������0000644�0001750�0001750�00000004630�11754241457�024316� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-exp, %D version=2001.08.20, %D title=\CONTEXT\ XML Macros, %D subtitle=Expansion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Expansion} \ifnum\texengine=\luatexengine \endinput \fi \unprotect %D Files \newcounter\XMLfilenesting \let\restoreXMLelements\relax \def\startXMLreading {\increment \XMLfilenesting \relax \ifcase\XMLfilenesting\or \ifprocessingXML \let\restoreXMLelements\relax \else \let\restoreXMLelements\disableXMLelements \enableXMLelements \fi \fi} \def\stopXMLreading {\ifcase\XMLfilenesting\or \restoreXMLelements \let\restoreXMLelements\relax \fi \decrement \XMLfilenesting \relax} \ifnum\texengine=\luatexengine \def\enableXMLfiledata {\prependtoks \enableXMLelements \to \mainoutput % brrr, will change \appendtoks \forcefileexpansiontrue \to \everyenableXML \let\enableXMLfiledata\relax} \else \def\enableXMLfiledata {\prependtoks \enableXMLelements \to \mainoutput % brrr, will change \appendtoks \startXMLreading \to \everybeforeutilityread \appendtoks \stopXMLreading \to \everyafterutilityread \appendtoks \forcefileexpansiontrue \to \everyenableXML \let\enableXMLfiledata\relax} \fi \setupXMLprocessing[\c!state=\v!start] \appendtoks \ifproductionrun \enableXMLfiledata \fi \to \aftersetupXMLprocessing %D Here we overload the mark handler. \ifnum\texengine=\luatexengine \else \def\XMLexpanded#1% {\bgroup \honorunexpanded \dontexpandencoding \xdef\@@globalexpanded{\noexpand#1}% why \noexpand? \egroup \@@globalexpanded} \let\normalsetnormalmark\setnormalmark \long\def\setnormalmark#1% overloaded {\ifprocessingXML \expandafter\setXMLexpandedmark \else \expandafter\normalsetnormalmark \fi#1} \def\setXMLexpandedmark#1#2% using a tok prevents unwanted expansion in mark {\XMLexpanded{\scratchtoks{\enableXMLelements#2}}% \setxvalue{\@@crk\string#1}{\the\scratchtoks}% \normalmarks#1{\the\scratchtoks}} \fi \protect \endinput ��������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/m-fields.mkiv�������������������������������0000644�0001750�0001750�00000003553�11754241457�024301� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=m-fields, %D version=2010.03.14, %D title=\CONTEXT\ Extra Modules, %D subtitle=Fields, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 A rather old example of field usage is the following. It %D makes no sense to have this in the core. %D %D \starttyping %D before \fillinfield[oeps]{whatever} after %D \stoptyping \startJSpreamble{FillInField} used later function CheckFillInField(right) { if (event.value.toLowerCase() == right.toLowerCase()) { event.target.hidden = true ; } event.value = "" } \stopJSpreamble \newcount\noffillinfields \definefieldcategory [fillinfield] [\c!n=1024, \c!height=\strutht, \c!depth=\strutdp, \c!align=\v!middle, \c!color=red, \c!fieldframecolor=blue, \c!fieldbackgroundcolor=\s!white, \c!validate=JS(CheckFillInField{\therightanswer})] \def\fillinfield {\dosingleempty\dofillinfield} \def\dofillinfield[#1]#2% {\dontleavehmode \hbox {\forgetall \global\advance\noffillinfields\plusone \edef\currentfillinfieldname{fillinfield:\number\noffillinfields}% \useJSscripts[ans]% \definefieldbody [\currentfillinfieldname] [\c!type=\v!line, \c!category=fillinfield]% \doifelsenothing{#1} {\def\therightanswer{#2}} {\def\therightanswer{#1}}% \setbox0\hbox{\strut#2}% \setbox2\hbox{\strut\therightanswer}% \dimen0=\dimexpr\ifdim\wd0>\wd2 \wd0 \else \wd2 \fi + .2em\relax \hbox to \wd0 {\wd0\zeropoint \box0 \hss\fieldbody[\currentfillinfieldname][\c!width=\dimen0]\hss}}} \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-sm2om.xsl���������������������������������0000644�0001750�0001750�00000024012�11024176655�023731� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- This style sheet is used in the Math4All project. This project will provide an on-line math method for secondary and tertiary education. In addition to the web-bases content the project provides high quality typeset output as well. This style converts some elements to open math alternatives and its sole purpose is to easy the input of inline math. <i>x</i> identifier (use <v>x</v> when possible) <n>5</n> number <v>5</v> variable <r>1:2</r> interval (range) <r>x:y</r> interval (range) using variables This style is dedicated to Frits Spijkers, an open minded math author who patiently tested all the related TeX things. Hans Hagen, PRAGMA ADE, Hasselt NL / 2006-04-27 --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="processing-instruction()"><xsl:copy/><xsl:text> </xsl:text></xsl:template> <xsl:template match="node()|@*" > <xsl:copy> <xsl:apply-templates select = "node()|@*" /> </xsl:copy> </xsl:template> <xsl:template match="comment"></xsl:template> <xsl:variable name='openmath-to-content-mathml'><value-of select='$stylesheet-path'/>/x-openmath.xsl</xsl:variable> <xsl:template name='om-minus'> <OMS cd="arith1" name="unary_minus"/> </xsl:template> <xsl:template name='om-infinity'> <OMS cd="nums1" name="infinity"/> </xsl:template> <xsl:template name='om-interval-oo'> <OMS cd="interval1" name="interval_oo"/> </xsl:template> <xsl:template name='om-interval-oc'> <OMS cd="interval1" name="interval_oc"/> </xsl:template> <xsl:template name='om-interval-co'> <OMS cd="interval1" name="interval_co"/> </xsl:template> <xsl:template name='om-interval-cc'> <OMS cd="interval1" name="interval_cc"/> </xsl:template> <xsl:template name='om-kind-of-data'> <xsl:param name='arg'/> <xsl:choose> <xsl:when test="contains($arg,'/')"> <xsl:element name="OMA"> <xsl:element name="OMS"> <xsl:attribute name="cd">nums1</xsl:attribute> <xsl:attribute name="name">rational</xsl:attribute> </xsl:element> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="substring-before($arg,'/')"/> </xsl:call-template> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="substring-after($arg,'/')"/> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="contains($arg,'.') or contains($arg,',')"> <xsl:element name="OMF"> <xsl:attribute name="dec"><xsl:value-of select="$arg"/></xsl:attribute> </xsl:element> </xsl:when> <xsl:when test="number($arg)"> <xsl:choose> <xsl:when test="contains($arg,'-')"> <xsl:element name="OMA"> <xsl:call-template name='om-minus'/> <xsl:element name="OMI"> <xsl:value-of select="substring-after($arg,'-')"/> </xsl:element> </xsl:element> </xsl:when> <xsl:when test="contains($arg,'+')"> <xsl:element name="OMI"> <xsl:value-of select="substring-after($arg,'+')"/> </xsl:element> </xsl:when> <xsl:otherwise> <xsl:element name="OMI"> <xsl:value-of select="$arg"/> </xsl:element> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:element name="OMV"> <xsl:attribute name="name"><xsl:value-of select="$arg"/></xsl:attribute> </xsl:element> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match='i|n'> <xsl:element name="OMOBJ"> <xsl:attribute name="style">inline</xsl:attribute> <xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute> <xsl:attribute name="version">2.0</xsl:attribute> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="text()"/> </xsl:call-template> </xsl:element> </xsl:template> <xsl:template match='v'> <xsl:element name="OMOBJ"> <xsl:attribute name="style">inline</xsl:attribute> <xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute> <xsl:attribute name="version">2.0</xsl:attribute> <xsl:element name="OMV"> <xsl:attribute name="name"><xsl:apply-templates/></xsl:attribute> </xsl:element> </xsl:element> </xsl:template> <!-- r a/b split in two parts --> <xsl:template match='r'> <xsl:element name="OMOBJ"> <xsl:attribute name="style">inline</xsl:attribute> <xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute> <xsl:attribute name="version">2.0</xsl:attribute> <xsl:element name="OMA"> <xsl:variable name='type'> <xsl:choose> <xsl:when test="@type=''"> cc </xsl:when> <xsl:otherwise> <xsl:value-of select="@type"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="@type='io'"> <xsl:call-template name='om-interval-oo'/> <xsl:element name="OMA"> <xsl:call-template name='om-minus'/> <xsl:call-template name='om-infinity'/> </xsl:element> <xsl:element name="OMI"> <xsl:call-template name='om-kind-of-data'> <xsl:with-param name='arg' select='text()'/> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="@type='oi'"> <xsl:call-template name='om-interval-oo'/> <xsl:element name="OMI"> <xsl:call-template name='om-kind-of-data'> <xsl:with-param name='arg' select='text()'/> </xsl:call-template> </xsl:element> <xsl:call-template name='om-infinity'/> </xsl:when> <xsl:when test="@type='ic'"> <xsl:call-template name='om-interval-oc'/> <xsl:element name="OMA"> <xsl:call-template name='om-minus'/> <xsl:call-template name='om-infinity'/> </xsl:element> <xsl:element name="OMI"> <xsl:call-template name='om-kind-of-data'> <xsl:with-param name='arg' select='text()'/> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="@type='ci'"> <xsl:call-template name='om-interval-co'/> <xsl:element name="OMI"> <xsl:call-template name='om-kind-of-data'> <xsl:with-param name='arg' select='text()'/> </xsl:call-template> </xsl:element> <xsl:call-template name='om-infinity'/> </xsl:when> <xsl:otherwise> <xsl:element name="OMS"> <xsl:attribute name="cd">interval1</xsl:attribute> <xsl:attribute name="name">interval_<xsl:value-of select="$type"/></xsl:attribute> </xsl:element> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="substring-before(text(),':')"/> </xsl:call-template> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="substring-after(text(),':')"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:element> </xsl:template> <xsl:template match='c'> <xsl:element name="OMOBJ"> <xsl:attribute name="style">inline</xsl:attribute> <xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute> <xsl:attribute name="version">2.0</xsl:attribute> <xsl:element name="OMA"> <xsl:element name="OMS"> <xsl:attribute name="cd">linalg3</xsl:attribute> <xsl:attribute name="name">vector</xsl:attribute> </xsl:element> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="substring-before(text(),':')"/> </xsl:call-template> <xsl:call-template name="om-kind-of-data"> <xsl:with-param name='arg' select="substring-after(text(),':')"/> </xsl:call-template> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-set-01.mkii�������������������������������0000644�0001750�0001750�00000005335�11754241457�024042� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=x-set-01, %D version=2004.10.31, %D remark=setupx.tex: 1998.07.20 and later, %D title=\CONTEXT\ Setup Mappings, %D subtitle=Macro Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is obsolete. \endinput \unprotect \def\SETUPnamespace{xmlns:cd="http://www.pragma-ade.com/commands"} \bgroup \catcode`\<=\@@other \unexpanded\gdef\dostring#1#2#3% {\immediate\write\scratchwrite{#1<#2cd:#3>}} \gdef\doline#1% {\immediate\write\scratchwrite{#1}} \egroup \def\startsetupfile {\immediate\openout\scratchwrite=keys-\currentlanguage.xml \doline{\string<?xml version="1.0"?>} \doline{} \dostring{}{}{interface \SETUPnamespace\space name="context" language="\currentlanguage" version="\contextversion"}} \def\stopsetupfile {\doline{} \dostring{}{/}{interface} \immediate\closeout\scratchwrite} \def\interfacecomponenttoxml#1#2#3% {\doifelse{#3}\nointerfaceobject {\dostring{\space\space\space\space}{}{#1 name="#2" value="#2"/}} {\dostring{\space\space\space\space}{}{#1 name="#2" value="#3"/}}} \def\setinterfaceconstant{\interfacecomponenttoxml{constant}} \def\setinterfacevariable{\interfacecomponenttoxml{variable}} \def\setinterfaceelement {\interfacecomponenttoxml{element}} \def\setinterfacecommand {\interfacecomponenttoxml{command}} \def\startinterfacexmlcomponent{\doline{}\dostring{\space\space}{}} % #1 \def\stopinterfacexmlcomponent {\dostring{\space\space}{/}} % #1 \let\normalstartvariables\startvariables \let\normalstopvariables\stopvariables \let\normalstartconstants\startconstants \let\normalstopconstants\stopconstants \let\normalstartcommands \startcommands \let\normalstopcommands \stopcommands \let\normalstartelements \startelements \let\normalstopelements \stopelements \def\startvariables{\startinterfacexmlcomponent{variables}\normalstartvariables} \def\startconstants{\startinterfacexmlcomponent{constants}\normalstartconstants} \def\startcommands {\startinterfacexmlcomponent{commands} \normalstartcommands } \def\startelements {\startinterfacexmlcomponent{elements} \normalstartelements } \def\stopvariables{\stopinterfacexmlcomponent{variables}\normalstopvariables} \def\stopconstants{\stopinterfacexmlcomponent{constants}\normalstopconstants} \def\stopcommands {\stopinterfacexmlcomponent{commands} \normalstopcommands } \def\stopelements {\stopinterfacexmlcomponent{elements} \normalstopelements } \protect \starttext \startsetupfile \input mult-con.tex \input mult-com.tex \stopsetupfile \stoptext ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/char-enc.lua��������������������������������0000644�0001750�0001750�00000013564�12130411274�024060� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['char-enc'] = { version = 1.001, comment = "companion to char-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" -- dataonly = true, } -- Thanks to tex4ht for these mappings. local allocate, setinitializer = utilities.storage.allocate, utilities.storage.setinitializer characters = characters or { } local characters = characters characters.synonyms = allocate { -- afm mess angle = 0x2220, anticlockwise = 0x21BA, arrowaxisleft = 0x2190, arrowaxisright = 0x2192, arrowparrleftright = 0x21C6, arrowparrrightleft = 0x21C4, arrowtailleft = 0x21A2, arrowtailright = 0x21A3, arrowtripleleft = 0x21DA, arrowtripleright = 0x21DB, axisshort = 0x2212, because = 0x2235, between = 0x226C, check = 0x2713, circleasteris = 0x229B, circleequal = 0x2257, circleminus = 0x229D, circleR = 0x24C7, circlering = 0x229A, circleS = 0x24C8, clockwise = 0x21BB, complement = 0x2201, curlyleft = 0x21AB, curlyright = 0x21AC, dblarrowdwn = 0x21CA, dblarrowheadleft = 0x219E, dblarrowheadright = 0x21A0, dblarrowleft = 0x21C7, dblarrowright = 0x21C9, dblarrowup = 0x21C8, defines = 0x225C, diamond = 0x2662, diamondsolid = 0x2666, difference = 0x224F, dotplus = 0x2214, downfall = 0x22CE, equaldotleftright = 0x2252, equaldotrightleft = 0x2253, equalorfollows = 0x22DF, equalorgreater = 0x22DD, equalorless = 0x22DC, equalorprecedes = 0x22DE, equalsdots = 0x2251, followsorcurly = 0x227D, followsorequal = 0x227F, forces = 0x22A9, forcesbar = 0x22AA, fork = 0x22D4, frown = 0x2322, geomequivalent = 0x224E, greaterdbleqlless = 0x22Da, greaterdblequal = 0x2267, greaterlessequal = 0x22DA, greaterorapproxeql = 0x227F, greaterorequalslant= 0x2265, greaterorless = 0x2277, greaterorsimilar = 0x2273, harpoondownleft = 0x21C3, harpoondownright = 0x21C2, harpoonleftright = 0x21CC, harpoonrightleft = 0x21CB, harpoonupleft = 0x21BF, harpoonupright = 0x21BE, intercal = 0x22BA, intersectiondbl = 0x22D2, lessdbleqlgreater = 0x22DB, lessdblequal = 0x2266, lessequalgreater = 0x22DB, lessorapproxeql = 0x227E, lessorequalslant = 0x2264, lessorgreater = 0x2276, lessorsimilar = 0x2272, maltesecross = 0xFFFD, measuredangle = 0x2221, muchgreater = 0x22D9, muchless = 0x22D8, multimap = 0x22B8, multiopenleft = 0x22CB, multiopenright = 0x22CC, nand = 0x22BC, orunderscore = 0x22BB, perpcorrespond = 0x2259, precedesorcurly = 0x227C, precedesorequal = 0x227E, primereverse = 0x2035, proportional = 0x221D, revasymptequal = 0x2243, revsimilar = 0x223D, rightanglene = 0x231D, rightanglenw = 0x231C, rightanglese = 0x231F, rightanglesw = 0x231E, ringinequal = 0x2256, satisfies = 0x22A8, shiftleft = 0x21B0, shiftright = 0x21B1, smile = 0x2323, sphericalangle = 0x2222, square = 0x25A1, squaredot = 0x22A1, squareimage = 0x228F, squareminus = 0x229F, squaremultiply = 0x22A0, squareoriginal = 0x2290, squareplus = 0x229E, squaresmallsolid = 0x25AA, squaresolid = 0x25A0, squiggleleftright = 0x21AD, squiggleright = 0x21DD, star = 0x22C6, subsetdbl = 0x22D0, subsetdblequal = 0x2286, supersetdbl = 0x22D1, supersetdblequa = 0x2287, therefore = 0x2234, triangle = 0x25B5, triangledownsld = 0x25BE, triangleinv = 0x25BF, triangleleft = 0x25C3, triangleleftequal = 0x22B4, triangleleftsld = 0x25C2, triangleright = 0x25B9, trianglerightequal = 0x22B5, trianglerightsld = 0x25B8, trianglesolid = 0x25B4, uniondbl = 0x22D3, uprise = 0x22CF, Yen = 0x00A5, } -- if not characters.enccodes then -- -- local enccodes = { } characters.enccodes = enccodes -- -- for unicode, data in next, characters.data do -- local encname = data.adobename or data.contextname -- if encname then -- enccodes[encname] = unicode -- end -- end -- -- for name, unicode in next, characters.synonyms do -- if not enccodes[name] then enccodes[name] = unicode end -- end -- -- -- end -- -- storage.register("characters.enccodes", characters.enccodes, "characters.enccodes") -- As this table is seldom used, we can delay its definition. Beware, this means -- that table.print would not work on this file unless it is accessed once. This -- why the serializer does a dummy access. local enccodes = allocate() characters.enccodes = enccodes local function initialize() for unicode, data in next, characters.data do local encname = data.adobename or data.contextname if encname then enccodes[encname] = unicode end end for name, unicode in next, characters.synonyms do if not enccodes[name] then enccodes[name] = unicode end end end setinitializer(enccodes,initialize) ��������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-con.lua��������������������������������0000644�0001750�0001750�00000141663�12161703335�024133� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['font-con'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- some names of table entries will be changed (no _) local next, tostring, rawget = next, tostring, rawget local format, match, lower, gsub = string.format, string.match, string.lower, string.gsub local utfbyte = utf.byte local sort, insert, concat, sortedkeys, serialize, fastcopy = table.sort, table.insert, table.concat, table.sortedkeys, table.serialize, table.fastcopy local derivetable = table.derive local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local trace_scaling = false trackers.register("fonts.scaling" , function(v) trace_scaling = v end) local report_defining = logs.reporter("fonts","defining") -- watch out: no negative depths and negative eights permitted in regular fonts --[[ldx-- <p>Here we only implement a few helper functions.</p> --ldx]]-- local fonts = fonts local constructors = fonts.constructors or { } fonts.constructors = constructors local handlers = fonts.handlers or { } -- can have preloaded tables fonts.handlers = handlers local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex -- will be directives constructors.dontembed = allocate() constructors.autocleanup = true constructors.namemode = "fullpath" -- will be a function constructors.version = 1.01 constructors.cache = containers.define("fonts", "constructors", constructors.version, false) constructors.privateoffset = 0xF0000 -- 0x10FFFF -- Some experimental helpers (handy for tracing): -- -- todo: extra: -- -- extra_space => space.extra -- space => space.width -- space_stretch => space.stretch -- space_shrink => space.shrink -- We do keep the x-height, extra_space, space_shrink and space_stretch -- around as these are low level official names. constructors.keys = { properties = { encodingbytes = "number", embedding = "number", cidinfo = { }, format = "string", fontname = "string", fullname = "string", filename = "filename", psname = "string", name = "string", virtualized = "boolean", hasitalics = "boolean", autoitalicamount = "basepoints", nostackmath = "boolean", noglyphnames = "boolean", mode = "string", hasmath = "boolean", mathitalics = "boolean", textitalics = "boolean", finalized = "boolean", }, parameters = { mathsize = "number", scriptpercentage = "float", scriptscriptpercentage = "float", units = "cardinal", designsize = "scaledpoints", expansion = { stretch = "integerscale", -- might become float shrink = "integerscale", -- might become float step = "integerscale", -- might become float auto = "boolean", }, protrusion = { auto = "boolean", }, slantfactor = "float", extendfactor = "float", factor = "float", hfactor = "float", vfactor = "float", size = "scaledpoints", units = "scaledpoints", scaledpoints = "scaledpoints", slantperpoint = "scaledpoints", spacing = { width = "scaledpoints", stretch = "scaledpoints", shrink = "scaledpoints", extra = "scaledpoints", }, xheight = "scaledpoints", quad = "scaledpoints", ascender = "scaledpoints", descender = "scaledpoints", synonyms = { space = "spacing.width", spacestretch = "spacing.stretch", spaceshrink = "spacing.shrink", extraspace = "spacing.extra", x_height = "xheight", space_stretch = "spacing.stretch", space_shrink = "spacing.shrink", extra_space = "spacing.extra", em = "quad", ex = "xheight", slant = "slantperpoint", }, }, description = { width = "basepoints", height = "basepoints", depth = "basepoints", boundingbox = { }, }, character = { width = "scaledpoints", height = "scaledpoints", depth = "scaledpoints", italic = "scaledpoints", }, } -- This might become an interface: local designsizes = allocate() constructors.designsizes = designsizes local loadedfonts = allocate() constructors.loadedfonts = loadedfonts --[[ldx-- <p>We need to normalize the scale factor (in scaled points). This has to do with the fact that <l n='tex'/> uses a negative multiple of 1000 as a signal for a font scaled based on the design size.</p> --ldx]]-- local factors = { pt = 65536.0, bp = 65781.8, } function constructors.setfactor(f) constructors.factor = factors[f or 'pt'] or factors.pt end constructors.setfactor() function constructors.scaled(scaledpoints, designsize) -- handles designsize in sp as well if scaledpoints < 0 then if designsize then local factor = constructors.factor if designsize > factor then -- or just 1000 / when? mp? return (- scaledpoints/1000) * designsize -- sp's else return (- scaledpoints/1000) * designsize * factor end else return (- scaledpoints/1000) * 10 * factor end else return scaledpoints end end --[[ldx-- <p>Beware, the boundingbox is passed as reference so we may not overwrite it in the process; numbers are of course copies. Here 65536 equals 1pt. (Due to excessive memory usage in CJK fonts, we no longer pass the boundingbox.)</p> --ldx]]-- -- The scaler is only used for otf and afm and virtual fonts. If -- a virtual font has italic correction make sure to set the -- hasitalics flag. Some more flags will be added in -- the future. --[[ldx-- <p>The reason why the scaler was originally split, is that for a while we experimented with a helper function. However, in practice the <l n='api'/> calls are too slow to make this profitable and the <l n='lua'/> based variant was just faster. A days wasted day but an experience richer.</p> --ldx]]-- -- we can get rid of the tfm instance when we have fast access to the -- scaled character dimensions at the tex end, e.g. a fontobject.width -- actually we already have some of that now as virtual keys in glyphs -- -- flushing the kern and ligature tables from memory saves a lot (only -- base mode) but it complicates vf building where the new characters -- demand this data .. solution: functions that access them function constructors.cleanuptable(tfmdata) if constructors.autocleanup and tfmdata.properties.virtualized then for k, v in next, tfmdata.characters do if v.commands then v.commands = nil end -- if v.kerns then v.kerns = nil end end end end -- experimental, sharing kerns (unscaled and scaled) saves memory -- local sharedkerns, basekerns = constructors.check_base_kerns(tfmdata) -- loop over descriptions (afm and otf have descriptions, tfm not) -- there is no need (yet) to assign a value to chr.tonunicode -- constructors.prepare_base_kerns(tfmdata) -- optimalization -- we have target.name=metricfile and target.fullname=RealName and target.filename=diskfilename -- when collapsing fonts, luatex looks as both target.name and target.fullname as ttc files -- can have multiple subfonts function constructors.calculatescale(tfmdata,scaledpoints) local parameters = tfmdata.parameters if scaledpoints < 0 then scaledpoints = (- scaledpoints/1000) * (tfmdata.designsize or parameters.designsize) -- already in sp end return scaledpoints, scaledpoints / (parameters.units or 1000) -- delta end local unscaled = { ScriptPercentScaleDown = true, ScriptScriptPercentScaleDown = true, RadicalDegreeBottomRaisePercent = true } function constructors.assignmathparameters(target,original) -- simple variant, not used in context -- when a tfm file is loaded, it has already been scaled -- and it never enters the scaled so this is otf only and -- even then we do some extra in the context math plugins local mathparameters = original.mathparameters if mathparameters and next(mathparameters) then local targetparameters = target.parameters local targetproperties = target.properties local targetmathparameters = { } local factor = targetproperties.math_is_scaled and 1 or targetparameters.factor for name, value in next, mathparameters do if unscaled[name] then targetmathparameters[name] = value else targetmathparameters[name] = value * factor end end if not targetmathparameters.FractionDelimiterSize then targetmathparameters.FractionDelimiterSize = 1.01 * targetparameters.size end if not mathparameters.FractionDelimiterDisplayStyleSize then targetmathparameters.FractionDelimiterDisplayStyleSize = 2.40 * targetparameters.size end target.mathparameters = targetmathparameters end end function constructors.beforecopyingcharacters(target,original) -- can be used for additional tweaking end function constructors.aftercopyingcharacters(target,original) -- can be used for additional tweaking end function constructors.enhanceparameters(parameters) local xheight = parameters.x_height local quad = parameters.quad local space = parameters.space local stretch = parameters.space_stretch local shrink = parameters.space_shrink local extra = parameters.extra_space local slant = parameters.slant parameters.xheight = xheight parameters.spacestretch = stretch parameters.spaceshrink = shrink parameters.extraspace = extra parameters.em = quad parameters.ex = xheight parameters.slantperpoint = slant parameters.spacing = { width = space, stretch = stretch, shrink = shrink, extra = extra, } end function constructors.scale(tfmdata,specification) local target = { } -- the new table -- if tonumber(specification) then specification = { size = specification } end -- local scaledpoints = specification.size local relativeid = specification.relativeid -- local properties = tfmdata.properties or { } local goodies = tfmdata.goodies or { } local resources = tfmdata.resources or { } local descriptions = tfmdata.descriptions or { } -- bad news if empty local characters = tfmdata.characters or { } -- bad news if empty local changed = tfmdata.changed or { } -- for base mode local shared = tfmdata.shared or { } local parameters = tfmdata.parameters or { } local mathparameters = tfmdata.mathparameters or { } -- local targetcharacters = { } local targetdescriptions = derivetable(descriptions) local targetparameters = derivetable(parameters) local targetproperties = derivetable(properties) local targetgoodies = goodies -- we need to loop so no metatable target.characters = targetcharacters target.descriptions = targetdescriptions target.parameters = targetparameters -- target.mathparameters = targetmathparameters -- happens elsewhere target.properties = targetproperties target.goodies = targetgoodies target.shared = shared target.resources = resources target.unscaled = tfmdata -- the original unscaled one -- -- specification.mathsize : 1=text 2=script 3=scriptscript -- specification.textsize : natural (text)size -- parameters.mathsize : 1=text 2=script 3=scriptscript >1000 enforced size (feature value other than yes) -- local mathsize = tonumber(specification.mathsize) or 0 local textsize = tonumber(specification.textsize) or scaledpoints local forcedsize = tonumber(parameters.mathsize ) or 0 local extrafactor = tonumber(specification.factor ) or 1 if (mathsize == 2 or forcedsize == 2) and parameters.scriptpercentage then scaledpoints = parameters.scriptpercentage * textsize / 100 elseif (mathsize == 3 or forcedsize == 3) and parameters.scriptscriptpercentage then scaledpoints = parameters.scriptscriptpercentage * textsize / 100 elseif forcedsize > 1000 then -- safeguard scaledpoints = forcedsize end targetparameters.mathsize = mathsize -- context specific targetparameters.textsize = textsize -- context specific targetparameters.forcedsize = forcedsize -- context specific targetparameters.extrafactor = extrafactor -- context specific -- local tounicode = resources.tounicode local defaultwidth = resources.defaultwidth or 0 local defaultheight = resources.defaultheight or 0 local defaultdepth = resources.defaultdepth or 0 local units = parameters.units or 1000 -- if target.fonts then target.fonts = fastcopy(target.fonts) -- maybe we virtualize more afterwards end -- -- boundary keys are no longer needed as we now have a string 'right_boundary' -- that can be used in relevant tables (kerns and ligatures) ... not that I ever -- used them -- -- boundarychar_label = 0, -- not needed -- boundarychar = 65536, -- there is now a string 'right_boundary' -- false_boundarychar = 65536, -- produces invalid tfm in luatex -- targetproperties.language = properties.language or "dflt" -- inherited targetproperties.script = properties.script or "dflt" -- inherited targetproperties.mode = properties.mode or "base" -- inherited -- local askedscaledpoints = scaledpoints local scaledpoints, delta = constructors.calculatescale(tfmdata,scaledpoints) -- no shortcut, dan be redefined -- local hdelta = delta local vdelta = delta -- target.designsize = parameters.designsize -- not really needed so it muight become obsolete target.units_per_em = units -- just a trigger for the backend (does luatex use this? if not it will go) -- local direction = properties.direction or tfmdata.direction or 0 -- pointless, as we don't use omf fonts at all target.direction = direction properties.direction = direction -- target.size = scaledpoints -- target.encodingbytes = properties.encodingbytes or 1 target.embedding = properties.embedding or "subset" target.tounicode = 1 target.cidinfo = properties.cidinfo target.format = properties.format -- local fontname = properties.fontname or tfmdata.fontname -- for the moment we fall back on local fullname = properties.fullname or tfmdata.fullname -- names in the tfmdata although local filename = properties.filename or tfmdata.filename -- that is not the right place to local psname = properties.psname or tfmdata.psname -- pass them local name = properties.name or tfmdata.name -- if not psname or psname == "" then -- name used in pdf file as well as for selecting subfont in ttc/dfont psname = fontname or (fullname and fonts.names.cleanname(fullname)) end target.fontname = fontname target.fullname = fullname target.filename = filename target.psname = psname target.name = name -- -- inspect(properties) -- properties.fontname = fontname properties.fullname = fullname properties.filename = filename properties.psname = psname properties.name = name -- expansion (hz) local expansion = parameters.expansion if expansion then target.stretch = expansion.stretch target.shrink = expansion.shrink target.step = expansion.step target.auto_expand = expansion.auto end -- protrusion local protrusion = parameters.protrusion if protrusion then target.auto_protrude = protrusion.auto end -- widening local extendfactor = parameters.extendfactor or 0 if extendfactor ~= 0 and extendfactor ~= 1 then hdelta = hdelta * extendfactor target.extend = extendfactor * 1000 -- extent ? else target.extend = 1000 -- extent ? end -- slanting local slantfactor = parameters.slantfactor or 0 if slantfactor ~= 0 then target.slant = slantfactor * 1000 else target.slant = 0 end -- targetparameters.factor = delta targetparameters.hfactor = hdelta targetparameters.vfactor = vdelta targetparameters.size = scaledpoints targetparameters.units = units targetparameters.scaledpoints = askedscaledpoints -- local isvirtual = properties.virtualized or tfmdata.type == "virtual" local hasquality = target.auto_expand or target.auto_protrude local hasitalics = properties.hasitalics local autoitalicamount = properties.autoitalicamount local stackmath = not properties.nostackmath local nonames = properties.noglyphnames local nodemode = properties.mode == "node" -- if changed and not next(changed) then changed = false end -- target.type = isvirtual and "virtual" or "real" -- target.postprocessors = tfmdata.postprocessors -- local targetslant = (parameters.slant or parameters[1] or 0) local targetspace = (parameters.space or parameters[2] or 0)*hdelta local targetspace_stretch = (parameters.space_stretch or parameters[3] or 0)*hdelta local targetspace_shrink = (parameters.space_shrink or parameters[4] or 0)*hdelta local targetx_height = (parameters.x_height or parameters[5] or 0)*vdelta local targetquad = (parameters.quad or parameters[6] or 0)*hdelta local targetextra_space = (parameters.extra_space or parameters[7] or 0)*hdelta -- targetparameters.slant = targetslant -- slantperpoint targetparameters.space = targetspace targetparameters.space_stretch = targetspace_stretch targetparameters.space_shrink = targetspace_shrink targetparameters.x_height = targetx_height targetparameters.quad = targetquad targetparameters.extra_space = targetextra_space -- local ascender = parameters.ascender if ascender then targetparameters.ascender = delta * ascender end local descender = parameters.descender if descender then targetparameters.descender = delta * descender end -- constructors.enhanceparameters(targetparameters) -- official copies for us -- local protrusionfactor = (targetquad ~= 0 and 1000/targetquad) or 0 local scaledwidth = defaultwidth * hdelta local scaledheight = defaultheight * vdelta local scaleddepth = defaultdepth * vdelta -- local hasmath = (properties.hasmath or next(mathparameters)) and true -- if hasmath then constructors.assignmathparameters(target,tfmdata) -- does scaling and whatever is needed properties.hasmath = true target.nomath = false target.MathConstants = target.mathparameters else properties.hasmath = false target.nomath = true target.mathparameters = nil -- nop end -- local italickey = "italic" local useitalics = true -- something context -- -- some context specific trickery (this will move to a plugin) -- if hasmath then -- the latest luatex can deal with it itself so we now disable this -- mechanism here -- -- if properties.mathitalics then -- italickey = "italic_correction" -- if trace_defining then -- report_defining("math italics disabled for font %a, fullname %a, filename %a",name,fullname,filename) -- end -- end autoitalicamount = false -- new elseif properties.textitalics then italickey = "italic_correction" useitalics = false if properties.delaytextitalics then autoitalicamount = false end end -- -- end of context specific trickery -- if trace_defining then report_defining("defining tfm, name %a, fullname %a, filename %a, hscale %a, vscale %a, math %a, italics %a", name,fullname,filename,hdelta,vdelta, hasmath and "enabled" or "disabled",useitalics and "enabled" or "disabled") end -- constructors.beforecopyingcharacters(target,tfmdata) -- local sharedkerns = { } -- -- we can have a dumb mode (basemode without math etc) that skips most -- for unicode, character in next, characters do local chr, description, index, touni if changed then -- basemode hack (we try to catch missing tounicodes, e.g. needed for ssty in math cambria) local c = changed[unicode] if c then description = descriptions[c] or descriptions[unicode] or character character = characters[c] or character index = description.index or c if tounicode then touni = tounicode[index] -- nb: index! if not touni then -- goodie local d = descriptions[unicode] or characters[unicode] local i = d.index or unicode touni = tounicode[i] -- nb: index! end end else description = descriptions[unicode] or character index = description.index or unicode if tounicode then touni = tounicode[index] -- nb: index! end end else description = descriptions[unicode] or character index = description.index or unicode if tounicode then touni = tounicode[index] -- nb: index! end end local width = description.width local height = description.height local depth = description.depth if width then width = hdelta*width else width = scaledwidth end if height then height = vdelta*height else height = scaledheight end -- if depth then depth = vdelta*depth else depth = scaleddepth end if depth and depth ~= 0 then depth = delta*depth if nonames then chr = { index = index, height = height, depth = depth, width = width, } else chr = { name = description.name, index = index, height = height, depth = depth, width = width, } end else -- this saves a little bit of memory time and memory, esp for big cjk fonts if nonames then chr = { index = index, height = height, width = width, } else chr = { name = description.name, index = index, height = height, width = width, } end end if touni then chr.tounicode = touni end if hasquality then -- we could move these calculations elsewhere (saves calculations) local ve = character.expansion_factor if ve then chr.expansion_factor = ve*1000 -- expansionfactor, hm, can happen elsewhere end local vl = character.left_protruding if vl then chr.left_protruding = protrusionfactor*width*vl end local vr = character.right_protruding if vr then chr.right_protruding = protrusionfactor*width*vr end end -- if autoitalicamount then local vi = description.italic if not vi then local vi = description.boundingbox[3] - description.width + autoitalicamount if vi > 0 then -- < 0 indicates no overshoot or a very small auto italic chr[italickey] = vi*hdelta end elseif vi ~= 0 then chr[italickey] = vi*hdelta end elseif hasitalics then local vi = description.italic if vi and vi ~= 0 then chr[italickey] = vi*hdelta end end -- to be tested if hasmath then -- todo, just operate on descriptions.math local vn = character.next if vn then chr.next = vn else local vv = character.vert_variants if vv then local t = { } for i=1,#vv do local vvi = vv[i] t[i] = { ["start"] = (vvi["start"] or 0)*vdelta, ["end"] = (vvi["end"] or 0)*vdelta, ["advance"] = (vvi["advance"] or 0)*vdelta, ["extender"] = vvi["extender"], ["glyph"] = vvi["glyph"], } end chr.vert_variants = t else local hv = character.horiz_variants if hv then local t = { } for i=1,#hv do local hvi = hv[i] t[i] = { ["start"] = (hvi["start"] or 0)*hdelta, ["end"] = (hvi["end"] or 0)*hdelta, ["advance"] = (hvi["advance"] or 0)*hdelta, ["extender"] = hvi["extender"], ["glyph"] = hvi["glyph"], } end chr.horiz_variants = t end end end local va = character.top_accent if va then chr.top_accent = vdelta*va end if stackmath then local mk = character.mathkerns -- not in math ? if mk then local kerns = { } local v = mk.top_right if v then local k = { } for i=1,#v do local vi = v[i] k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern } end kerns.top_right = k end local v = mk.top_left if v then local k = { } for i=1,#v do local vi = v[i] k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern } end kerns.top_left = k end local v = mk.bottom_left if v then local k = { } for i=1,#v do local vi = v[i] k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern } end kerns.bottom_left = k end local v = mk.bottom_right if v then local k = { } for i=1,#v do local vi = v[i] k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern } end kerns.bottom_right = k end chr.mathkern = kerns -- singular -> should be patched in luatex ! end end end if not nodemode then local vk = character.kerns if vk then local s = sharedkerns[vk] if not s then s = { } for k,v in next, vk do s[k] = v*hdelta end sharedkerns[vk] = s end chr.kerns = s end local vl = character.ligatures if vl then if true then chr.ligatures = vl -- shared else local tt = { } for i,l in next, vl do tt[i] = l end chr.ligatures = tt end end end if isvirtual then local vc = character.commands if vc then -- we assume non scaled commands here -- tricky .. we need to scale pseudo math glyphs too -- which is why we deal with rules too local ok = false for i=1,#vc do local key = vc[i][1] if key == "right" or key == "down" then ok = true break end end if ok then local tt = { } for i=1,#vc do local ivc = vc[i] local key = ivc[1] if key == "right" then tt[i] = { key, ivc[2]*hdelta } elseif key == "down" then tt[i] = { key, ivc[2]*vdelta } elseif key == "rule" then tt[i] = { key, ivc[2]*vdelta, ivc[3]*hdelta } else -- not comment tt[i] = ivc -- shared since in cache and untouched end end chr.commands = tt else chr.commands = vc end chr.index = nil end end targetcharacters[unicode] = chr end -- constructors.aftercopyingcharacters(target,tfmdata) -- return target end function constructors.finalize(tfmdata) if tfmdata.properties and tfmdata.properties.finalized then return end -- if not tfmdata.characters then return nil end -- if not tfmdata.goodies then tfmdata.goodies = { } -- context specific end -- local parameters = tfmdata.parameters if not parameters then return nil end -- if not parameters.expansion then parameters.expansion = { stretch = tfmdata.stretch or 0, shrink = tfmdata.shrink or 0, step = tfmdata.step or 0, auto = tfmdata.auto_expand or false, } end -- if not parameters.protrusion then parameters.protrusion = { auto = auto_protrude } end -- if not parameters.size then parameters.size = tfmdata.size end -- if not parameters.extendfactor then parameters.extendfactor = tfmdata.extend or 0 end -- if not parameters.slantfactor then parameters.slantfactor = tfmdata.slant or 0 end -- if not parameters.designsize then parameters.designsize = tfmdata.designsize or 655360 end -- if not parameters.units then parameters.units = tfmdata.units_per_em or 1000 end -- if not tfmdata.descriptions then local descriptions = { } -- yes or no setmetatableindex(descriptions, function(t,k) local v = { } t[k] = v return v end) tfmdata.descriptions = descriptions end -- local properties = tfmdata.properties if not properties then properties = { } tfmdata.properties = properties end -- if not properties.virtualized then properties.virtualized = tfmdata.type == "virtual" end -- if not tfmdata.properties then tfmdata.properties = { fontname = tfmdata.fontname, filename = tfmdata.filename, fullname = tfmdata.fullname, name = tfmdata.name, psname = tfmdata.psname, -- encodingbytes = tfmdata.encodingbytes or 1, embedding = tfmdata.embedding or "subset", tounicode = tfmdata.tounicode or 1, cidinfo = tfmdata.cidinfo or nil, format = tfmdata.format or "type1", direction = tfmdata.direction or 0, } end if not tfmdata.resources then tfmdata.resources = { } end if not tfmdata.shared then tfmdata.shared = { } end -- -- tfmdata.fonts -- tfmdata.unscaled -- if not properties.hasmath then properties.hasmath = not tfmdata.nomath end -- tfmdata.MathConstants = nil tfmdata.postprocessors = nil -- tfmdata.fontname = nil tfmdata.filename = nil tfmdata.fullname = nil tfmdata.name = nil -- most tricky part tfmdata.psname = nil -- tfmdata.encodingbytes = nil tfmdata.embedding = nil tfmdata.tounicode = nil tfmdata.cidinfo = nil tfmdata.format = nil tfmdata.direction = nil tfmdata.type = nil tfmdata.nomath = nil tfmdata.designsize = nil -- tfmdata.size = nil tfmdata.stretch = nil tfmdata.shrink = nil tfmdata.step = nil tfmdata.auto_expand = nil tfmdata.auto_protrude = nil tfmdata.extend = nil tfmdata.slant = nil tfmdata.units_per_em = nil -- properties.finalized = true -- return tfmdata end --[[ldx-- <p>A unique hash value is generated by:</p> --ldx]]-- local hashmethods = { } constructors.hashmethods = hashmethods function constructors.hashfeatures(specification) -- will be overloaded local features = specification.features if features then local t, tn = { }, 0 for category, list in next, features do if next(list) then local hasher = hashmethods[category] if hasher then local hash = hasher(list) if hash then tn = tn + 1 t[tn] = category .. ":" .. hash end end end end if tn > 0 then return concat(t," & ") end end return "unknown" end hashmethods.normal = function(list) local s = { } local n = 0 for k, v in next, list do if not k then -- no need to add to hash elseif k == "number" or k == "features" then -- no need to add to hash (maybe we need a skip list) else n = n + 1 s[n] = k end end if n > 0 then sort(s) for i=1,n do local k = s[i] s[i] = k .. '=' .. tostring(list[k]) end return concat(s,"+") end end --[[ldx-- <p>In principle we can share tfm tables when we are in node for a font, but then we need to define a font switch as an id/attr switch which is no fun, so in that case users can best use dynamic features ... so, we will not use that speedup. Okay, when we get rid of base mode we can optimize even further by sharing, but then we loose our testcases for <l n='luatex'/>.</p> --ldx]]-- function constructors.hashinstance(specification,force) local hash, size, fallbacks = specification.hash, specification.size, specification.fallbacks if force or not hash then hash = constructors.hashfeatures(specification) specification.hash = hash end if size < 1000 and designsizes[hash] then size = math.round(constructors.scaled(size,designsizes[hash])) specification.size = size end -- local mathsize = specification.mathsize or 0 -- if mathsize > 0 then -- local textsize = specification.textsize -- if fallbacks then -- return hash .. ' @ ' .. tostring(size) .. ' [ ' .. tostring(mathsize) .. ' : ' .. tostring(textsize) .. ' ] @ ' .. fallbacks -- else -- return hash .. ' @ ' .. tostring(size) .. ' [ ' .. tostring(mathsize) .. ' : ' .. tostring(textsize) .. ' ]' -- end -- else if fallbacks then return hash .. ' @ ' .. tostring(size) .. ' @ ' .. fallbacks else return hash .. ' @ ' .. tostring(size) end -- end end function constructors.setname(tfmdata,specification) -- todo: get specification from tfmdata if constructors.namemode == "specification" then -- not to be used in context ! local specname = specification.specification if specname then tfmdata.properties.name = specname if trace_defining then report_otf("overloaded fontname %a",specname) end end end end function constructors.checkedfilename(data) local foundfilename = data.foundfilename if not foundfilename then local askedfilename = data.filename or "" if askedfilename ~= "" then askedfilename = resolvers.resolve(askedfilename) -- no shortcut foundfilename = resolvers.findbinfile(askedfilename,"") or "" if foundfilename == "" then report_defining("source file %a is not found",askedfilename) foundfilename = resolvers.findbinfile(file.basename(askedfilename),"") or "" if foundfilename ~= "" then report_defining("using source file %a due to cache mismatch",foundfilename) end end end data.foundfilename = foundfilename end return foundfilename end local formats = allocate() fonts.formats = formats setmetatableindex(formats, function(t,k) local l = lower(k) if rawget(t,k) then t[k] = l return l end return rawget(t,file.suffix(l)) end) local locations = { } local function setindeed(mode,target,group,name,action,position) local t = target[mode] if not t then report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode) os.exit() elseif position then -- todo: remove existing insert(t, position, { name = name, action = action }) else for i=1,#t do local ti = t[i] if ti.name == name then ti.action = action return end end insert(t, { name = name, action = action }) end end local function set(group,name,target,source) target = target[group] if not target then report_defining("fatal target error in setting feature %a, group %a",name,group) os.exit() end local source = source[group] if not source then report_defining("fatal source error in setting feature %a, group %a",name,group) os.exit() end local node = source.node local base = source.base local position = source.position if node then setindeed("node",target,group,name,node,position) end if base then setindeed("base",target,group,name,base,position) end end local function register(where,specification) local name = specification.name if name and name ~= "" then local default = specification.default local description = specification.description local initializers = specification.initializers local processors = specification.processors local manipulators = specification.manipulators local modechecker = specification.modechecker if default then where.defaults[name] = default end if description and description ~= "" then where.descriptions[name] = description end if initializers then set('initializers',name,where,specification) end if processors then set('processors', name,where,specification) end if manipulators then set('manipulators',name,where,specification) end if modechecker then where.modechecker = modechecker end end end constructors.registerfeature = register function constructors.getfeatureaction(what,where,mode,name) what = handlers[what].features if what then where = what[where] if where then mode = where[mode] if mode then for i=1,#mode do local m = mode[i] if m.name == name then return m.action end end end end end end function constructors.newhandler(what) -- could be a metatable newindex local handler = handlers[what] if not handler then handler = { } handlers[what] = handler end return handler end function constructors.newfeatures(what) -- could be a metatable newindex local handler = handlers[what] local features = handler.features if not features then local tables = handler.tables -- can be preloaded local statistics = handler.statistics -- can be preloaded features = allocate { defaults = { }, descriptions = tables and tables.features or { }, used = statistics and statistics.usedfeatures or { }, initializers = { base = { }, node = { } }, processors = { base = { }, node = { } }, manipulators = { base = { }, node = { } }, } features.register = function(specification) return register(features,specification) end handler.features = features -- will also become hidden end return features end --[[ldx-- <p>We need to check for default features. For this we provide a helper function.</p> --ldx]]-- function constructors.checkedfeatures(what,features) local defaults = handlers[what].features.defaults if features and next(features) then features = fastcopy(features) -- can be inherited (mt) but then no loops possible for key, value in next, defaults do if features[key] == nil then features[key] = value end end return features else return fastcopy(defaults) -- we can change features in place end end -- before scaling function constructors.initializefeatures(what,tfmdata,features,trace,report) if features and next(features) then local properties = tfmdata.properties or { } -- brrr local whathandler = handlers[what] local whatfeatures = whathandler.features local whatinitializers = whatfeatures.initializers local whatmodechecker = whatfeatures.modechecker -- properties.mode can be enforces (for instance in font-otd) local mode = properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base" properties.mode = mode -- also status features.mode = mode -- both properties.mode or features.mode can be changed -- local done = { } while true do local redo = false local initializers = whatfeatures.initializers[mode] if initializers then for i=1,#initializers do local step = initializers[i] local feature = step.name -- we could intercept mode here .. needs a rewrite of this whole loop then but it's cleaner that way local value = features[feature] if not value then -- disabled elseif done[feature] then -- already done else local action = step.action if trace then report("initializing feature %a to %a for mode %a for font %a",feature, value,mode,tfmdata.properties.fullname) end action(tfmdata,value,features) -- can set mode (e.g. goodies) so it can trigger a restart if mode ~= properties.mode or mode ~= features.mode then if whatmodechecker then properties.mode = whatmodechecker(tfmdata,features,properties.mode) -- force checking features.mode = properties.mode end if mode ~= properties.mode then mode = properties.mode redo = true end end done[feature] = true end if redo then break end end if not redo then break end else break end end properties.mode = mode -- to be sure return true else return false end end -- while typesetting function constructors.collectprocessors(what,tfmdata,features,trace,report) local processes, nofprocesses = { }, 0 if features and next(features) then local properties = tfmdata.properties local whathandler = handlers[what] local whatfeatures = whathandler.features local whatprocessors = whatfeatures.processors local processors = whatprocessors[properties.mode] if processors then for i=1,#processors do local step = processors[i] local feature = step.name if features[feature] then local action = step.action if trace then report("installing feature processor %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname) end if action then nofprocesses = nofprocesses + 1 processes[nofprocesses] = action end end end elseif trace then report("no feature processors for mode %a for font %a",mode,tfmdata.properties.fullname) end end return processes end -- after scaling function constructors.applymanipulators(what,tfmdata,features,trace,report) if features and next(features) then local properties = tfmdata.properties local whathandler = handlers[what] local whatfeatures = whathandler.features local whatmanipulators = whatfeatures.manipulators local manipulators = whatmanipulators[properties.mode] if manipulators then for i=1,#manipulators do local step = manipulators[i] local feature = step.name local value = features[feature] if value then local action = step.action if trace then report("applying feature manipulator %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname) end if action then action(tfmdata,feature,value) end end end end end end �����������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-spa.mkiv�������������������������������0000644�0001750�0001750�00000005113�11754241457�024275� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=lang-spa, %D version=2002.04.17, %D title=\CONTEXT\ Language Macros, %D subtitle=Spacing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Spacing} %D This module was created in the process of enhancing %D support for French (with the help of Daniel Flipo). %D %D This will (or already has) become obsolete! \unprotect \definehspace [\s!fr] [quotation] [\flexiblespaceamount{.8}{.3}{.8}] \definehspace [\s!fr] [sentence] [\fixedspaceamount{1}] %definehspace [\s!fr] [quote] [\flexiblespaceamount{.8}{.3}{.8}] %definehspace [\s!fr] [speech] [\flexiblespaceamount{.8}{.3}{.8}] \definehspace [\s!fr] [interquotation] [\zeropoint] \definehspace [\s!fr] [intersentence] [\zeropoint] \definehspace [\string :] [\zeropoint] \definehspace [\string ;] [\zeropoint] \definehspace [\string !] [\zeropoint] \definehspace [\string ?] [\zeropoint] \definehspace [\s!fr] [\string :] [\spaceamount] \definehspace [\s!fr] [\string ;] [.16667em] \definehspace [\s!fr] [\string !] [.16667em] \definehspace [\s!fr] [\string ?] [.16667em] %D Alternative discretionary handlers: \definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{:}:} \definetextmodediscretionary ; {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{;};} \definetextmodediscretionary ? {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{?}?} \definetextmodediscretionary ! {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{!}!} %D \startbuffer %D \mainlanguage[en] \quotation{test \quotation{test} test}\par %D \mainlanguage[nl] \quotation{test \quotation{test} test}\par %D \mainlanguage[fr] \quotation{test \quotation{test} test}\par %D %D \mainlanguage[en] \quotation{\quotation{test} test}\par %D \mainlanguage[nl] \quotation{\quotation{test} test}\par %D \mainlanguage[fr] \quotation{\quotation{test} test}\par %D %D \mainlanguage[en] |<|test |<|test|>| test|>| \par %D \mainlanguage[nl] |<|test |<|test|>| test|>| \par %D \mainlanguage[fr] |<|test |<|test|>| test|>| \par %D %D \mainlanguage[en] |<||<|test|>| test|>| \par %D \mainlanguage[nl] |<||<|test|>| test|>| \par %D \mainlanguage[fr] |<||<|test|>| test|>| \par %D \stopbuffer %D %D \typebuffer {\getbuffer} \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-newpml.mkii�������������������������������0000644�0001750�0001750�00000017540�11754241457�024334� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-pml, %D version=2001.06.10, %D title=\CONTEXT\ XML Support, %D subtitle=Units, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Units} \usemodule[newmml] %D Quick and dirty in||line units: %D %D \startbuffer %D <phys> %D <cn> 10 </cn> %D <cu> <Newton/> <Square/> <Meter/> <Per/> <Sec/> </cu> %D </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D A more \MATHML||like unit application: %D %D \startbuffer %D <phys> <apply> <unit/> %D <cn> 10 </cn> %D <csymbol> <Square/> <Meter/> <Per/> <Sec/> </csymbol> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D A bit more compact: %D %D \startbuffer %D <phys> <apply> <unit/> %D <cn> 10 </cn> %D <cu> <Square/> <Meter/> <Per/> <Sec/> </cu> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D A bit more complicated: %D %D \startbuffer %D <phys> <apply> <unit/> %D <apply> <divide/> <ci> a </ci> <cn> 10 </cn> </apply> %D <cu> <Square/> <Meter/> <Per/> <Sec/> </cu> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D An alternative (equivalent) for \type {</cu>}: %D %D \startbuffer %D <phys> <apply> <unit/> %D <cn> 10 </cn> <cunseq> <Square/> <Meter/> <Per/> <Sec/> </cunseq> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer \usemodule[units] \unprotect \defineXMLargument [phys] \automathematics \defineXMLargument [iphys] \inlinemathematics \defineXMLargument [dphys] \displaymathematics \defineXMLcommand [unit] {\directsetup{pml:unit}} \startsetups pml:unit \flushXMLstackwith\plustwo\relax \stopsetups % \defineXMLenvironment % [unit] % {\ignorespaces} % {\removeunwantedspaces} \defineXMLsingular [unit] [label=] {\XMLop{label}} \defineXMLsingular [unitmeaning] [label=] {\expanded{\unitmeaning{\XMLop{label}}}} \let\handlePMLunit\firstofoneargument %D All unit commands are remapped in a similar way. \defineXMLsingular [Atto] {\handlePMLunit\Atto} \defineXMLsingular [Femto] {\handlePMLunit\Femto} \defineXMLsingular [Pico] {\handlePMLunit\Pico} \defineXMLsingular [Nano] {\handlePMLunit\Nano} \defineXMLsingular [Micro] {\handlePMLunit\Micro} \defineXMLsingular [Milli] {\handlePMLunit\Milli} \defineXMLsingular [Centi] {\handlePMLunit\Centi} \defineXMLsingular [Deci] {\handlePMLunit\Deci} \defineXMLsingular [Hecto] {\handlePMLunit\Hecto} \defineXMLsingular [Kilo] {\handlePMLunit\Kilo} \defineXMLsingular [Mega] {\handlePMLunit\Mega} \defineXMLsingular [Giga] {\handlePMLunit\Giga} \defineXMLsingular [Terra] {\handlePMLunit\Terra} \defineXMLsingular [Peta] {\handlePMLunit\Peta} \defineXMLsingular [Exa] {\handlePMLunit\Exa} \defineXMLsingular [Times] {\handlePMLunit\Times} \defineXMLsingular [Solidus] {\handlePMLunit\Solidus} \defineXMLsingular [Per] {\handlePMLunit\Per} \defineXMLsingular [OutOf] {\handlePMLunit\OutOf} \defineXMLsingular [Linear] {\handlePMLunit\Linear} \defineXMLsingular [Square] {\handlePMLunit\Square} \defineXMLsingular [Cubic] {\handlePMLunit\Cubic} \defineXMLsingular [Inverse] {\handlePMLunit\Inverse} \defineXMLsingular [Degrees] {\handlePMLunit\Degrees} \defineXMLsingular [Meter] {\handlePMLunit\Meter} \defineXMLsingular [Liter] {\handlePMLunit\Liter} \defineXMLsingular [Sec] {\handlePMLunit\Sec} \defineXMLsingular [Year] {\handlePMLunit\Year} \defineXMLsingular [Month] {\handlePMLunit\Month} \defineXMLsingular [Week] {\handlePMLunit\Week} \defineXMLsingular [Day] {\handlePMLunit\Day} \defineXMLsingular [Hour] {\handlePMLunit\Hour} \defineXMLsingular [Min] {\handlePMLunit\Min} \defineXMLsingular [Minute] {\handlePMLunit\Min} \defineXMLsingular [Second] {\handlePMLunit\Sec} \defineXMLsingular [Rad] {\handlePMLunit\Rad} \defineXMLsingular [Deg] {\handlePMLunit\Deg} \defineXMLsingular [Hertz] {\handlePMLunit\Hertz} \defineXMLsingular [RevPerSec] {\handlePMLunit\RevPerSec} \defineXMLsingular [RevPerMin] {\handlePMLunit\RevPerMin} \defineXMLsingular [Gram] {\handlePMLunit\Gram} \defineXMLsingular [Atom] {\handlePMLunit\Atom} \defineXMLsingular [Newton] {\handlePMLunit\Newton} \defineXMLsingular [Pascal] {\handlePMLunit\Pascal} \defineXMLsingular [Joule] {\handlePMLunit\Joule} \defineXMLsingular [Watt] {\handlePMLunit\Watt} \defineXMLsingular [Celsius] {\handlePMLunit\Celsius} \defineXMLsingular [Kelvin] {\handlePMLunit\Kelvin} \defineXMLsingular [Fahrenheit] {\handlePMLunit\Fahrenheit} \defineXMLsingular [Mol] {\handlePMLunit\Mol} \defineXMLsingular [Molair] {\handlePMLunit\Molair} \defineXMLsingular [Equivalent] {\handlePMLunit\Equivalent} \defineXMLsingular [Farad] {\handlePMLunit\Farad} \defineXMLsingular [Ohm] {\handlePMLunit\Ohm} \defineXMLsingular [Siemens] {\handlePMLunit\Siemens} \defineXMLsingular [Ampere] {\handlePMLunit\Ampere} \defineXMLsingular [Coulomb] {\handlePMLunit\Coulomb} \defineXMLsingular [Volt] {\handlePMLunit\Volt} \defineXMLsingular [eVolt] {\handlePMLunit\eVolt} \defineXMLsingular [Tesla] {\handlePMLunit\Tesla} \defineXMLsingular [VoltAC] {\handlePMLunit\VoltAC} \defineXMLsingular [VoltDC] {\handlePMLunit\VoltDC} \defineXMLsingular [Baud] {\handlePMLunit\Baud} \defineXMLsingular [Bit] {\handlePMLunit\Bit} \defineXMLsingular [Byte] {\handlePMLunit\Byte} \defineXMLsingular [Bequerel] {\handlePMLunit\Bequerel} \defineXMLsingular [Sievert] {\handlePMLunit\Sievert} \defineXMLsingular [Candela] {\handlePMLunit\Candela} \defineXMLsingular [Bell] {\handlePMLunit\Bell} \defineXMLsingular [At] {\handlePMLunit\At} \defineXMLsingular [Atm] {\handlePMLunit\Atm} \defineXMLsingular [Bar] {\handlePMLunit\Bar} \defineXMLsingular [EVolt] {\handlePMLunit\EVolt} \defineXMLsingular [Foot] {\handlePMLunit\Foot} \defineXMLsingular [Inch] {\handlePMLunit\Inch} \defineXMLsingular [Cal] {\handlePMLunit\Cal} \defineXMLsingular [Force] {\handlePMLunit\Force} \defineXMLsingular [Lux] {\handlePMLunit\Lux} \defineXMLsingular [Gray] {\handlePMLunit\Gray} \defineXMLsingular [Weber] {\handlePMLunit\Weber} \defineXMLsingular [Henry] {\handlePMLunit\Henry} \defineXMLsingular [Sterant] {\handlePMLunit\Sterant} \defineXMLsingular [Angstrom] {\handlePMLunit\Angstrom} \defineXMLsingular [Gauss] {\handlePMLunit\Gauss} \defineXMLsingular [Percent] {\handlePMLunit\Percent} \defineXMLsingular [Promille] {\handlePMLunit\Promille} \defineXMLsingular [Permille] {\handlePMLunit\Permille} \defineXMLsingular [Unit] {\handlePMLunit\Unit} \defineXMLsingular [NoUnit] {\handlePMLunit\NoUnit} \protect \doifnotmode{demo}{\endinput} \starttext \startXMLdata <phys> <apply> <times/> <cn> 1 </cn> <ci><unit><Milli/><Sec/><Per/><Square/><Kilo/><Meter/></unit> </ci> </apply> </phys> \stopXMLdata \startXMLdata <phys> <apply> <divide/> <cn> 2 </cn> <ci> <unit><Unit/><Milli/><Sec/><Per/><Square/><Kilo/><Meter/></unit> </ci> </apply> </phys> \stopXMLdata \startXMLdata <phys> <apply> <times/> <cn> 3 </cn> <ci> <unit> <Milli/> <Sec/> <Per/> <Square/> <Kilo/> <Meter/> </unit> </ci> </apply> </phys> \stopXMLdata \startXMLdata <phys> <apply> <times/> <cn> 4 </cn> <ci> <unit><Milli/><Sec/><Per/><Square/><Kilo/><Meter/></unit> </ci> </apply> </phys> \stopXMLdata \startXMLdata <phys> <apply> <times/> <cn> 5 </cn> <ci> <unit> <Milli/> <Sec/> <Per/> <Square/> <Kilo/> <Meter/> </unit> </ci> </apply> </phys> \stopXMLdata \stoptext ����������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-run.mkii�������������������������������0000644�0001750�0001750�00000022263�11754241457�024330� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-run, %D version=2001.01.10, %D title=\CONTEXT\ XML Macros, %D subtitle=Visualization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % TODO: make this mkiv compliant, catcode tables etc \writestatus{loading}{ConTeXt XML Macros / Visualization} \unprotect \bgroup \catcode`\.=\escapecatcode .catcode`.B=.begingroupcatcode .catcode`.E=.endgroupcatcode .catcode`.#=.activecatcode .catcode`.$=.activecatcode .catcode`.%=.activecatcode .catcode`.\=.activecatcode .catcode`.^=.activecatcode .catcode`._=.activecatcode .catcode`.{=.activecatcode .catcode`.}=.activecatcode .catcode`.|=.activecatcode .catcode`.~=.activecatcode .gdef.verbatimXML B.catcode`.#=.activecatcode .let#.letterhash .catcode`.$=.activecatcode .let$.dollar .catcode`.%=.activecatcode .let%.percent .catcode`.\=.activecatcode .let\.letterbackslash .catcode`.^=.activecatcode .let^.letterhat .catcode`._=.activecatcode .let_.letterunderscore .catcode`.{=.activecatcode .let{.leftargument .catcode`.}=.activecatcode .let}.rightargument .catcode`.|=.activecatcode .let|.letterbar .catcode`.~=.activecatcode .let~.lettertilde E .egroup \gdef\@@XMLshow{\@@XML shw} \gdef\@XMLindent#1% {\ifnum\XMLlevel>\plusone\advance\leftskip#11em\relax\fi} \gdef\@XMLlevel#1% {\advance\XMLlevel#11\relax} \unexpanded\gdef\@XMLentity#1% {\noindent\hbox{\localcolortrue\color[xtag:0]{\string}}} \bgroup \@EA\catcode\string`=\activecatcode \@EA\catcode\string`"\activecatcode \@EA\catcode\string``\activecatcode \@EA\catcode\string`&\activecatcode \gdef\doshowXMLargument#1#2#3#4% {\hskip\zeropoint % or maybe \allowbreak \string#1\color[xtag:#3]{#4}\string#2}% \gdef\showXMLarguments {\hskip\zeropoint % or maybe \allowbreak \ifshowXMLarguments \bgroup \@EA\catcode\string`=\activecatcode \@EA\catcode\string`"\activecatcode \@EA\catcode\string``\activecatcode \@EA\catcode\string`&\activecatcode \def={\color[xtag:7]{\string=}}% \def"##1"{\doshowXMLargument""8{##1}}% \def`##1`{\doshowXMLargument``8{##1}}% \def&##1;{\doshowXMLargument&;7{##1}}% \scantokens\@EA{\currentXMLarguments}% \egroup \else \currentXMLarguments \fi} \egroup \ifx\XMLprettycycle\undefined \gdef\XMLprettycycle{3} \fi \doglobal\newcounter\@XMLnofelements \doglobal\newif\ifXMLunspacepretty \gdef\@XMLelement#1% {\ifnum\XMLlevel<\@@xflevel\relax \ifnum\kindofXMLelement=2\else \doglobal\increment\@XMLnofelements\relax \ifcase\@XMLnofelements\else\@@xfinbetween\fi \fi \fi % no, too fragile: % \ifnum\XMLlevel>1\hangindent2em\fi \ifcase\kindofXMLelement\or\or \getvalue{\@@XMLshow::\currentXMLelement}\relax \fi \dontleavehmode % \indent \bgroup % \localcolortrue \advance\XMLlevel \minusone \DoMod\XMLlevel by\XMLprettycycle to\scratchcounter \advance\scratchcounter \plusone \startcolor[xtag:\ifnum\scratchcounter<0 0\else\number\scratchcounter\fi]% \ifXMLunspacepretty\unskip\fi \string<% \ifnum\kindofXMLelement=2\string/\fi \currentXMLelement \stopcolor \ifcase#1\or \cleanupXMLarguments % get rid of spurious end space and end / \ifx\currentXMLarguments\empty\else \setbox\scratchbox\hbox{\space}\hskip\wd\scratchbox % hm, slow \startcolor[xtag:0]\showXMLarguments\unskip\stopcolor\unskip \fi \fi \startcolor[xtag:\ifnum\scratchcounter<0 0\else\number\scratchcounter\fi]% \ifnum\kindofXMLelement=3\string/\fi \string>% \stopcolor \egroup \ifcase\kindofXMLelement\or \getvalue{\@@XMLshow::\currentXMLelement}\relax \fi \ifnum\XMLlevel<\@@xflevel\relax \ifnum\kindofXMLelement=1\else \doglobal\increment\@XMLnofelements\relax \ifcase\@XMLnofelements\else\@@xfinbetween\fi \fi \fi \ifXMLunspacepretty\ignorespaces\fi} \gdef\nextXMLtext{\blank\@XMLlevel+\@XMLelement1\par} \gdef\prevXMLtext{\par\@XMLelement0\par\@XMLlevel-\blank} \gdef\nextXMLpara{\nextXMLline\par} \gdef\prevXMLpara{\par\prevXMLline} \gdef\nextXMLline{\par\@XMLlevel+\@XMLindent+\@XMLelement1} \gdef\prevXMLline{\@XMLelement0\par\@XMLindent-\@XMLlevel-} \gdef\nextXMLword{\@XMLlevel+\@XMLelement1} \gdef\prevXMLword{\@XMLelement0\@XMLlevel-} \gdef\someXMLtext{\blank\@XMLlevel+\@XMLelement1\@XMLlevel-\blank} \gdef\someXMLpara{\someXMLline} \gdef\someXMLline{\par\@XMLlevel+\@XMLindent+\@XMLelement1\par\@XMLindent-\@XMLlevel-} \gdef\someXMLword{\@XMLlevel+\@XMLelement1\@XMLlevel-} \gdef\@XMLindent#1% {\ifnum\XMLlevel>\zerocount \advance\leftskip#11em\relax \fi} \gdef\nextXMLtext{\blank\@XMLlevel+\@XMLelement1\par\@XMLindent+} \gdef\prevXMLtext{\par\@XMLindent-\@XMLelement0\par\@XMLlevel-\blank} \gdef\nextXMLpara{\nextXMLline\par\@XMLindent+} \gdef\prevXMLpara{\par\@XMLindent-\prevXMLline} \gdef\nextXMLline{\par\@XMLlevel+\@XMLelement1} \gdef\prevXMLline{\@XMLelement0\par\@XMLlevel-} \gdef\someXMLline{\par\@XMLlevel+\@XMLelement1\par\@XMLlevel-} \gdef\setXMLshow#1#2#3[#4]% {\def\docommand##1{#1[##1]#2#3\letvalue{\@@XMLshow:##1}\empty}% \processcommalist[#4]\docommand} \gdef\showXMLign[#1]% {\setXMLshow\defineXMLignore \relax\relax[#1]% \setXMLshow\defineXMLsingular \relax\relax[#1]} \gdef\showXMLnop[#1]% {\setXMLshow\defineXMLenvironment\relax\relax[#1]% \setXMLshow\defineXMLsingular \relax\relax[#1]} \gdef\showXMLtxt[#1]% {\setXMLshow\defineXMLenvironment\nextXMLtext\prevXMLtext[#1]% \setXMLshow\defineXMLsingular \someXMLtext\relax [#1]} \gdef\showXMLpar[#1]% {\setXMLshow\defineXMLenvironment\nextXMLpara\prevXMLpara[#1]% \setXMLshow\defineXMLsingular \someXMLline\relax [#1]} \gdef\showXMLlin[#1]% {\setXMLshow\defineXMLenvironment\nextXMLline\prevXMLline[#1]% \setXMLshow\defineXMLsingular \someXMLword\relax [#1]} \gdef\showXMLwrd[#1]% {\setXMLshow\defineXMLenvironment\nextXMLword\prevXMLword[#1]% \setXMLshow\defineXMLsingular \someXMLword\relax [#1]} \gdef\showXMLemp[#1]% {\setXMLshow\defineXMLsingular\someXMLword\relax[#1]} \gdef\showXMLbreak[#1]% {\def\docommand##1{\setvalue{\@@XMLshow::##1}{\hskip\zeropoint}}% \processcommalist[#1]\docommand} \gdef\doautoshowXMLelement {\ifcase\kindofXMLelement \or \nextXMLpara \or \prevXMLpara \or \someXMLline \fi} \gdef\autoshowXMLelement {\ifcsname\@@XMLshow:\currentXMLelement\endcsname \expandafter\normalexecuteXMLelement \else \expandafter\doautoshowXMLelement \fi} \global\let\normalexecuteXMLelement\executeXMLelement \gdef\showXMLfile#1% {\bgroup % temp hack, will be the normal definition \long\def\docleanupXMLarguments##1/ ##2\relax{\def\currentXMLarguments{##1}}% % so far for hack \nohyphens \dontcomplain \XMLlevel\zerocount \increment\@@xflevel % hack \tttf \startpacked[\v!blank] \ifautoXMLshow \let\executeXMLelement\autoshowXMLelement \fi \let\executeXMLentity\@XMLentity \enableXML\verbatimXML \enableregime[utf]% \utfunicodetracer\pluseight \veryraggedright \readfile{\truefilename{#1}}\donothing\donothing\endgraf \removelastskip % really needed \stoppacked \egroup} \gdef\showXMLtext#1% {\bgroup % temp hack, will be the normal definition \long\def\docleanupXMLarguments##1/ ##2\relax{\def\currentXMLarguments{##1}}% % so far for hack \dontcomplain \XMLlevel\maxcard \increment\@@xflevel % hack \tttf \ifautoXMLshow \let\executeXMLelement\autoshowXMLelement \fi \let\executeXMLentity\@XMLentity \let\par\allowbreak\let\endgraf\par \setbox\scratchbox\hbox {\enableXML\verbatimXML\scantokens{#1}\removelastskip}% \unhbox\scratchbox \egroup} \gdef\showXMLbuffer {\dosingleempty\doshowXMLbuffer} \gdef\doshowXMLbuffer[#1]% {\doifelsenothing{#1} {\doshowXMLbuffer[\jobname]} {\bgroup \def\dodoprocessXMLbuffer##1{\showXMLfile{\TEXbufferfile{##1}}}% \processcommalist[#1]\dodoprocessXMLbuffer \egroup}} %D \gdef\showXSDcomponent {\dodoubleargument\doshowXSDcomponent} \gdef\doshowXSDcomponent[#1][#2]% {\bgroup \showXMLnop[xsd:schema] \showXMLign[xsd:appInfo] \showXMLign[xsd:annotation] \videXMLcontextblock[#2] \showXMLfile{#1} \egroup} \gdef\showRNGcomponent {\dodoubleargument\doshowRNGcomponent} \gdef\doshowRNGcomponent[#1][#2]% {\bgroup \videXMLcontextblock[#2] \showXMLfile{#1} \egroup} %D \gdef\tracebackXMLattribute#1% {\bgroup \doloop {\ifcsname\@@XMLdepth:\recurselevel\endcsname \edef\!!stringa{\csname\@@XMLdepth:\recurselevel\endcsname}% \writestatus {XML TRACE} {[#1] [\recurselevel] [\!!stringa] [\XMLinh{#1}]}% \else \exitloop \fi}% \egroup} \gdef\showXMLinh[#1]% {\doifsomething{#1} {\bgroup\infofont[% \dorecurse\XMLdepth % {\csname\@@XMLvariable:\csname\@@XMLdepth:\recurselevel\endcsname:#1\endcsname {\csname\@@XMLvariable:\recurselevel:#1\endcsname \ifnum\recurselevel<\XMLdepth->\fi}% ]\egroup}} \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/data-bin.lua��������������������������������0000644�0001750�0001750�00000001544�11754241457�024071� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['data-bin'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local resolvers = resolvers local methodhandler = resolvers.methodhandler function resolvers.findbinfile(filename,filetype) return methodhandler('finders',filename,filetype) end function resolvers.openbinfile(filename) return methodhandler('loaders',filename) -- a bit weird: load end function resolvers.loadbinfile(filename,filetype) local fname = methodhandler('finders',filename,filetype) if fname and fname ~= "" then return resolvers.openbinfile(fname) -- a bit weird: open else return resolvers.loaders.notfound() end end ������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-14.tex��������������������������������0000644�0001750�0001750�00000014572�11754241457�023706� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-pre-14, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 14, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In the process of making a couple of simple styles for %D \EUROTEX\ 99, I came to this one. The joke is in the %D pagenumber. This style can be used for short presentations %D with much text. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] %D Since we expect text, we can best be very tolerant. \setuptolerance [verytolerant,stretch] %D As most styles we choose a large screen page size. \setuppapersize [S6][S6] \setuplayout [width=fit, rightedge=3cm, margin=0pt, rightedgedistance=2cm, height=middle, header=0pt, footer=0pt, topspace=1cm, backspace=1cm] %D We only use two colors, named \type {One} and \type %D {Two}: \setupcolors [state=start] \definecolor [One] [r=.6,g=.4,b=.4] \definecolor [Two] [r=.4,g=.6,b=.6] %D If you've looked at the demo file, you will have noticed %D that the background consists of four pieces: two filled %D rectangles and two half numbers. These are put on th epage %D using four overlays: \setupbackgrounds [page] [background={one,two,three,four}] %D When we code this in \TEX, we get the following %D definitions. As an alternative we coudl have used layers %D but I'm afraid that it would not have led to less code. \defineoverlay [one] [{\framed [frame=off,background=color,backgroundcolor=Two, width=\overlaywidth,height=\overlayheight] {}}] \defineoverlay [three] [{\hbox to \overlaywidth {\hfill\SetOverlayWidth \framed [frame=off,background=color,backgroundcolor=One, width=\overlaywidth,height=\overlayheight] {}}}] %D We could have used the main backgroundcolor instead of %D overlay \type {one}. \definefont[NumberFont][RegularBold at 3cm] \defineoverlay [two] [{\framed [frame=off,width=\overlaywidth,height=\overlayheight, offset=overlay] {\vfill \NumberFont\setstrut\SetOverlayWidth \hbox to \hsize {\hfill \setupinteraction[style=,color=]% \setbox0=\hbox{\strut\One\pagenumber}% \hbox to 0pt{\hss\gotobox{\box0}[previouspage]\hss}% \hskip\overlaywidth}}}] \defineoverlay [four] [{\framed [frame=off,width=\overlaywidth,height=\overlayheight,offset=overlay] {\vfill \hbox to \hsize {\hfill \SetOverlayWidth \framed [frame=off,width=\overlaywidth,height=\overlayheight,offset=overlay] {\vfill\NumberFont\setstrut \setbox0=\hbox{\strut\Two\pagenumber}% \setbox2=\hbox{\clip[nx=2,ny=1,x=2,y=1]{\copy0}}% \dp2=\dp0 \hbox to \hsize{\hbox to 0pt{\hss\hskip.5\wd0\box2\hss}\hfill}}}}}] \def\SetOverlayWidth% {\scratchdimen = \rightedgedistance \divide\scratchdimen by 2 \advance\scratchdimen by \rightedgewidth \advance\scratchdimen by \backspace \edef\overlaywidth{\the\scratchdimen}} %D A much cleaner implementation is the following. If you hate %D \METAPOST, you can run this style in the specified mode: \startnotmode[no-metapost] \setupbackgrounds [page] [background={number}] \defineoverlay[number][\useMPgraphic{number}] \startuseMPgraphic{number} StartPage ; path Vage ; picture Left, Right ; x1 = x2 = xpart (llcorner Field[Text][RightEdge] shifted (-RightEdgeDistance/2,0)) ; y1 = ypart llcorner Page ; y2 = ypart ulcorner Page ; Vage := llcorner Page -- z1 -- z2 -- ulcorner Page -- cycle ; fill Page withcolor \MPcolor {One} ; fill Vage withcolor \MPcolor {Two} ; if PageNumber>0 : defaultfont := "\truefontname{RegularBold}" ; Left := Right := thelabel("\folio",origin) ysized 3cm ; clip Right to boundingbox Right shifted (bbwidth(Right)/2,0) ; draw Left shifted z1 shifted (0,2.25cm) withcolor \MPcolor {One} ; draw Right shifted z1 shifted (0,2.25cm) withcolor \MPcolor {Two} ; fi ; StopPage ; \stopuseMPgraphic \stopnotmode %D We use the simple label typesetting present in \METAPOST\ %D because digits are seldom kerned so real \TEX ing is not %D needed. As in the previous method, we let the graphics %D overlap so that we don't get white lines due to rounding %D problems in viewers. %D %D We put a button behind the text (this overlay is calculated %D each page). \defineoverlay [nextpage] [\overlaybutton{nextpage}] \setupbackgrounds [text] [backgroundoffset=.5cm, background=nextpage] %D We still have to turn on interaction mode. \setupinteraction [state=start, display=new, menu=on] \setupinteraction [color=, contrastcolor=] %D Next we define structuring commands. \definehead[Topic] [chapter] \setuphead[Topic] [style=\bfc] \definehead[Subject][section] \setuphead[Subject][style=\bfa] \setuphead [Topic, Subject] [number=no, after={\blank[big]}] %D Because we will provide a menu, we don't offer lists. \let\Topics \gobbleoneargument \let\Subjects\relax %D The table of contents goes to the right edge. \startinteractionmenu[right] \setupinteraction [color=black, contrastcolor=Two] \placelist [Topic] [alternative=e, frame=off, criterium=all] \vfill \stopinteractionmenu \setuplist [Topic] [width=\rightedgewidth, maxwidth=\rightedgewidth, style=\bfa] %D We safe some space: \setupwhitespace [medium] \setupblank [medium] %D In the titlepage, we still use the \TEX\ overlays, %D so that we don't have to define a second graphic. \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} \def\StartTitlePage% {\bgroup \setupbackgrounds[page][background={one,three}] \startstandardmakeup \setupalign[middle] \def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil} \def\StopTitlePage% {\vfil\vfil\vfil \stopstandardmakeup \egroup} %D This is it. \doifnotmode{demo}{\endinput} \starttext \TitlePage{Some Quotes\\(that you probably know by now)} \Topic{Tufte} \input tufte \Topic{Knuth} \input knuth \Topic{Reich} \input reich \Topic{Zapf} \input zapf \Topic{Materie} \input materie %Topic{Stork} \input stork \stoptext ��������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ren.lua��������������������������������0000644�0001750�0001750�00000004137�11754241457�024126� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['math-ren'] = { version = 1.001, comment = "companion to math-ren.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next = next local gsub = string.gsub local settings_to_array = utilities.parsers.settings_to_array local allocate = storage.allocate local renderings = { } mathematics.renderings = renderings local mappings = allocate() renderings.mappings = mappings local numbers = allocate() renderings.numbers = numbers local sets = allocate() renderings.sets = sets mappings["blackboard-to-bold"] = { [0x1D538] = 0x1D400, [0x1D539] = 0x1D401, [0x02102] = 0x1D402, [0x1D53B] = 0x1D403, [0x1D53C] = 0x1D404, [0x1D53D] = 0x1D405, [0x1D53E] = 0x1D406, [0x0210D] = 0x1D407, [0x1D540] = 0x1D408, [0x1D541] = 0x1D409, [0x1D542] = 0x1D40A, [0x1D543] = 0x1D40B, [0x1D544] = 0x1D40C, [0x02115] = 0x1D40D, [0x1D546] = 0x1D40E, [0x02119] = 0x1D40F, [0x0211A] = 0x1D410, [0x0211D] = 0x1D411, [0x1D54A] = 0x1D412, [0x1D54B] = 0x1D413, [0x1D54C] = 0x1D414, [0x1D54D] = 0x1D415, [0x1D54E] = 0x1D416, [0x1D54F] = 0x1D417, [0x1D550] = 0x1D418, [0x02124] = 0x1D419, } local function renderset(list) -- order matters local tag = gsub(list," ","") local n = sets[tag] if not n then local list = settings_to_array(tag) local mapping = { } for i=1,#list do local m = mappings[list[i]] if m then for k, v in next, m do mapping[k] = v end end end if next(mapping) then n = #numbers + 1 numbers[n] = mapping else n = attributes.unsetvalue end sets[tag] = n end return n end mathematics.renderset = renderset function commands.mathrenderset(list) context(renderset(list)) end -- function commands.setmatrendering(list) -- tex.setattribute(renderset(list)) -- end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-present-tiles.mkiv������������������������0000644�0001750�0001750�00000015577�12161703335�025637� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-present-tiles, % was s-pre-41 %D version=2013.03.24, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment Tiles, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The Bacho\TeX\ 2013 style. \setupbodyfont[palatino,14.4pt] \setuppapersize[S6][S6] \definecolor[primarycolor] [.50(darkblue,darkgreen)] \definecolor[secondarycolor][.25(darkblue,darkyellow)] \definecolor[mixedcolor] [s=.35] \setupcolors [textcolor=white] \setupalign [flushleft,nothyphenated] \definemeasure[layoutunit][\dimexpr\paperheight/25] \setuplayout [backspace=\measured{layoutunit}, topspace=\measured{layoutunit}, width=middle, height=middle, header=0pt, footer=0pt] \definelayout [content] [backspace=.5\measured{layoutunit}, topspace=.5\measured{layoutunit}] \definemeasure [topiclistwidth] [ (\textwidth+\backspace)/ \ifcase\numexpr\structurelistsize\relax 1 % 0 \or1\or1\or1\or2\or1\or3\or3\or3\or3 % 1 - 9 \or3\or3\or3\or3\or3\or3\or4 % 10 - 16 \or4\or4\or4\or4\or % 17 - 20 \else5 % 21 - 25 \fi -\backspace ] \definemeasure [topiclistheight] [ (\textheight+\topspace)/ \ifcase\numexpr\structurelistsize\relax 1 % 0 \or1\or2\or3\or2\or5\or2\or3\or3\or3 % 1 - 9 \or4\or4\or4\or4\or4\or4\or4 % 10 - 16 \or5\or5\or5\or5\or5 % 17 - 20 \else5 % 21 - 25 \fi -\topspace ] \definemeasure [topiclistfont] [\measured{topiclistwidth}/10] \definemeasure [titlepagefont] [2\measured{layoutunit}] \defineframed [topiclistentry] [width=\measure{topiclistwidth}, height=\measure{topiclistheight}, background=color, frame=off, foregroundstyle={\definedfont[Bold at \measure{topiclistfont}]}, backgroundcolor=primarycolor, foregroundcolor=white] \setupwhitespace [big] \setupblank [big] \setupinteraction [state=start, color=, contrastcolor=, click=off] \definemakeup [topic] [standard] [top=,bottom=] \definemakeup [content] [standard] [top=,bottom=] \startsetups[topic:start] \starttopicmakeup \stopsetups \startsetups[topic:stop] \vfill \stoptopicmakeup \stopsetups \predefinefont[MyTopicTitleFont][SerifBold*default at \measure{layoutunit}] \definehead [topic] [chapter] [before=, style=MyTopicTitleFont, page=, number=off, interaction=list, beforesection=\directsetup{topic:start}, aftersection=\directsetup{topic:stop}] \setuplist [topic] [alternative=topic, interaction=all] \definelistalternative [topic] [alternative=horizontal, renderingsetup=topic:list] \startsetups[topic:list] \dontleavehmode \startcurrentlistentrywrapper \topiclistentry{\currentlistentrytitle} \stopcurrentlistentrywrapper \blankspace \stopsetups \defineoverlay[nextpage][\overlaybutton{nextpage}] \defineoverlay[prevpage][\overlaybutton{prevpage}] \defineoverlay[menupage][\overlaybutton{menupage}] \defineoverlay[homepage][\overlaybutton{homepage}] \setupbackgrounds [text] [backgroundoffset=.5\measured{layoutunit}] % begin of buttons \defineframed [bb] [width=\dimexpr\overlaywidth/10, height=\dimexpr\overlayheight/10, background=color, foregroundstyle=\bfa, frame=off] \defineframed[nb] [bb] [empty=yes] \defineframed[rb] [bb] [backgroundcolor=white,foregroundcolor=secondarycolor] \defineframed[db] [bb] [backgroundcolor=mixedcolor,foregroundcolor=white] \definepushbutton [prev] \definepushbutton [next] \definepushbutton [menu] \definepushbutton [home] \definepushsymbol [prev] [n] [\nb{prev}] \definepushsymbol [prev] [r] [\rb{prev}] \definepushsymbol [prev] [d] [\db{prev}] \definepushsymbol [next] [n] [\nb{next}] \definepushsymbol [next] [r] [\rb{next}] \definepushsymbol [next] [d] [\db{next}] \definepushsymbol [menu] [n] [\nb{menu}] \definepushsymbol [menu] [r] [\rb{menu}] \definepushsymbol [menu] [d] [\db{menu}] \definepushsymbol [home] [n] [\nb{home}] \definepushsymbol [home] [r] [\rb{home}] \definepushsymbol [home] [d] [\db{home}] \definelayer [buttons] [width=\dimexpr\textwidth+\measured{layoutunit}\relax, height=\dimexpr\textheight+\measured{layoutunit}\relax] % a setups \startsetups [document:buttons] \setlayer [buttons] [preset=leftbottom,offset=-.25\measured{layoutunit}] {\pushbutton[prev][previouspage]} \setlayer [buttons] [preset=rightbottom,offset=-.25\measured{layoutunit}] {\pushbutton[next][nextpage]} \setlayer [buttons] [preset=lefttop,offset=-.25\measured{layoutunit}] {\pushbutton[home][homepage]} \setlayer [buttons] [preset=righttop,offset=-.25\measured{layoutunit}] {\pushbutton[menu][menupage]} \stopsetups \defineoverlay[setbuttons][\directsetup{document:buttons}] % end of buttons \startsetups [document:titlepage] \definebodyfontenvironment [\measure{titlepagefont}] \setupbackgrounds [page] [background={color,menupage}, backgroundcolor=secondarycolor] \setupbackgrounds [text] [background={color,menupage}, backgroundcolor=secondarycolor] \starttopicmakeup[reference=homepage] \switchtobodyfont[\measure{titlepagefont}] \let\\=\crlf \startalignment[flushleft] \bf \setupinterlinespace \begstrut\getvariable{document}{title}\endstrut\par \stopalignment \vfill \startalignment[flushright] \bf \setupinterlinespace \begstrut\getvariable{document}{subtitle}\endstrut\par \stopalignment \stoptopicmakeup \setupbackgrounds [page] [background={color,homepage}, backgroundcolor=secondarycolor] \setupbackgrounds [text] [background={color,menupage}, backgroundcolor=secondarycolor] \startcontentmakeup[reference=menupage] \setupalign[tolerant,stretch,paragraph] \flexiblebaselines \placelist[topic][criterium=text] \stopcontentmakeup \setupbackgrounds [page] % [background={color,menupage}, [background={color,invoke}, backgroundcolor=primarycolor] \setupbackgrounds [text] % [background={color,nextpage,setbuttons,buttons}, [background={color,setbuttons,buttons}, backgroundcolor=secondarycolor] \stopsetups \setupdocument [before=\directsetup{document:titlepage}] \continueifinputfile{s-present-tiles.mkiv} \startdocument[title=Whatever We\\Want Here,subtitle=Whatever We\\Want There] \dorecurse{12}{\starttopic[title=Topic #1]\input tufte \stoptopic} \stopdocument ���������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/m-layout.tex��������������������������������0000644�0001750�0001750�00000007455�11754241457�024207� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=m-layout, %D version=2004.01.16, %D title=\CONTEXT\ Modules, %D subtitle=Additional Layouts, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % layout-preset - thf th tf %D This is a preliminary module, don't depend on these dimensions yet. \readsysfile{lang-frq}\donothing\donothing \readsysfile{lang-frd}\donothing\donothing \unprotect % \def\layouthwratio{\withoutpt\the\dimexpr8\paperheight/\dimexpr(\paperwidth/ 8192)\relax} % \def\layouthwratio{\withoutpt\the\dimexpr4\paperheight/\dimexpr(\paperwidth/16384)\relax} % \def\layouthwratio{\withoutpt\the\dimexpr2\paperheight/\dimexpr(\paperwidth/32768)\relax} \def\layouthwratio {\withoutpt\the\dimexpr2\paperheight/(\paperwidth/32768)\relax} \def\layouthfheight {\dimexpr\layoutparameter\c!header+\layoutparameter\c!headerdistance+ \layoutparameter\c!footer+\layoutparameter\c!footerdistance\relax} \startsetups[preset-1] \xdef\layoutwidth {\dimexpr\layoutparameter\c!width\relax} \gdef\layoutheight{\dimexpr\layouthwratio\dimexpr\layoutwidth\relax+\layouthfheight\relax} \stopsetups \definelayout [preset-1-1] [\c!preset=preset-1, \c!backspace=\dimexpr(\paperwidth-\layoutwidth)/2\relax, \c!width=\dimexpr2\paperwidth/3\relax, \c!cutspace=\dimexpr(\paperwidth-\layoutwidth)/2\relax, \c!margin=\dimexpr(\paperwidth-\layoutwidth)/3\relax, \c!header=2\lineheight, \c!headerdistance=\lineheight, \c!height=\v!middle, % \layoutheight \c!footerdistance=\layoutparameter\c!headerdistance, % \lineheight, \c!footer=\layoutparameter\c!header, % 2\lineheight, \c!topspace=\dimexpr1\dimexpr\paperheight-(\layoutheight+\layouthfheight)\relax/3\relax, \c!bottomspace=\dimexpr2\dimexpr\paperheight-(\layoutheight+\layouthfheight)\relax/3\relax] \startsetups[preset-2] \gdef\layouthstep{\dimexpr\paperwidth /\layoutparameter\c!columns\relax} \gdef\layoutvstep{\dimexpr\paperheight/\layoutparameter\c!columns\relax} \stopsetups \definelayout [preset-2-1] [\c!preset=preset-2, \c!columns=12, \c!backspace=\layouthstep, \c!width=\v!middle, \c!cutspace=2\layouthstep, \c!margin=\layouthstep, \c!header=2\lineheight, \c!headerdistance=\lineheight, \c!height=\v!middle, % \layoutheight \c!footerdistance=\layoutparameter\c!headerdistance, \c!footer=\layoutparameter\c!header, \c!topspace=\dimexpr\layoutvstep-\layoutparameter\c!header-\layoutparameter\c!headerdistance\relax, \c!bottomspace=\dimexpr(2\layoutvstep)-\layoutparameter\c!header-\layoutparameter\c!headerdistance\relax] \definelayout [preset-2-2] [\c!preset=preset-2, \c!columns=12, \c!backspace=\layouthstep, \c!width=\v!middle, \c!cutspace=2\layouthstep, \c!margin=\layouthstep, \c!header=2\lineheight, \c!headerdistance=\lineheight, \c!height=\v!middle, % \layoutheight \c!footerdistance=\layoutparameter\c!headerdistance, \c!footer=\layoutparameter\c!header, \c!topspace=\layoutvstep, \c!bottomspace=\layoutvstep] % maybe 1.5 % \setuplayout[preset-1-1] test \showframe \page % \setuplayout[preset-1-1][width=65\averagecharwidth] \setuplayout[preset-1-1] test \showframe \page % \setuplayout[preset-2-1] test \showframe \page % \setuplayout[preset-2-1][columns=10] \setuplayout[preset-2-1] test \showframe \page % \setuplayout[preset-2-2] test \showframe \page % \setuplayout[preset-2-2][columns=10] \setuplayout[preset-2-2] test \showframe \page \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-sol.mkvi�������������������������������0000644�0001750�0001750�00000010056�12130411274�024317� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=font-sol, %D version=2009.05.19, %D title=\CONTEXT\ Font Macros, %D subtitle=Solutions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Support / Splitters} % todo: pass color for tracing %D This module is specially made for the oriental \TEX\ project. The working is as %D follows (and tuned for fonts like Idris' Husayni. The following method came to %D my mind after a couple of Skype sessions with Idris while working on the rough %D edges of the Husayni font and playing with font dynamics. %D %D \startitemize[packed] %D %D \item We define a couple of features sets, some can have stylistics variants %D that result in the same words getting a different width. Normally this %D happens in a goodies file. %D %D \item We group such features in a solution set. A solutionset can be enabled %D by setting an attribute. %D %D \item For each paragraph we identify words that get this set applied. We replace %D these words by a user node that refers to the original. %D %D \item For each word we apply the features to a copy that we associate with this %D original word. %D %D \item At the end we have a paragraph (node list) with user nodes that point to a %D cache that has originals and processed variants. %D %D \item When the paragraph is broken into lines we optimize the spacing by %D substituting variants. %D %D \stopitemize %D %D This approach permits us to use a dedicated paragraph builder, one that treats %D the user nodes special and takes the alternatives into account. %D %D Currently we assume only one solution being active. Maybe some day I'll support %D a mixture. This is only one way of optimizing and after several experiments this %D one was chosen as testcase. It took quite some experiments (and time) to get thus %D far. %D %D The is experimental code for the Oriental \TEX\ project and aspects of it might %D change. %D %D \starttyping %D \setupfontsolutions[method={random,preroll},criterium=1,randomseed=101] %D %D \definefontsolution % actually only the last run needs to be done this way %D [FancyHusayni] %D [goodies=husayni, %D solution=experimental] %D %D \definedfont[husayni*husayni-default at 24pt] %D \setupinterlinespace[line=36pt] %D \righttoleft %D \enabletrackers[parbuilders.solutions.splitters.colors] %D \setfontsolution[FancyHusayni] %D alb alb alb \par %D \resetfontsolution %D \disabletrackers[parbuilders.solutions.splitters.colors] %D \stoptyping \registerctxluafile{font-sol}{1.001} \unprotect \definesystemattribute[splitter][public] \installcorenamespace{fontsolution} \installcommandhandler \??fontsolution {fontsolution} \??fontsolution \let\setupfontsolutions\setupfontsolution \appendtoks \ctxcommand{definefontsolution("\currentfontsolution",{ % these are frozen goodies = "\fontsolutionparameter\s!goodies", solution = "\fontsolutionparameter\c!solution", less = "\fontsolutionparameter\c!less", more = "\fontsolutionparameter\c!more", })} \to \everydefinefontsolution \unexpanded\def\setfontsolution[#solution]% just one {\edef\currentfontsolution{#solution}% \ctxcommand{setfontsolution("\currentfontsolution",{ method = "\fontsolutionparameter\c!method", criterium = "\fontsolutionparameter\c!criterium", % randomseed = "\fontsolutionparameter\c!random", })}} \unexpanded\def\resetfontsolution % resets all {\ctxcommand{resetfontsolution()}% \let\currentfontsolution\empty} \unexpanded\def\startfontsolution % [#1] {\pushmacro\currentfontsolution \setfontsolution} \unexpanded\def\stopfontsolution {\ifhmode\par\fi \ctxcommand{stopfontsolution()}% \popmacro\currentfontsolution} % We initialize this module at the \LUA\ end. % % \setupfontsolutions % [\c!method={\v!normal,preroll}, % \c!criterium=0] \protect ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-def.mkiv�������������������������������0000644�0001750�0001750�00000052370�12161703335�024246� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=lang-def, %D version=2011.01.24, % merge of language files %D title=\CONTEXT\ Language Macros, %D subtitle=Languages Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Definitions} %D See \type {lang-*.tex} for some historic notes. \unprotect % Germanic Languages: Danish, Faeroese, Icelandic, Norwegian, % Swedish, German, Yiddish, Afrikaans, Dutch, English, Flemush, % Frisian, Plattdeutsch \installlanguage [\s!nl] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\space,\v!month,\space,\v!year}] \installlanguage [\s!en] [\c!spacing=\v!broad, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!month,\space,\v!day,{,\space},\v!year}, \s!patterns=\s!us, \s!lefthyphenmin=2, \s!righthyphenmin=3] \installlanguage [\s!de] [\c!spacing=\v!packed, \s!lefthyphenmin=3, \s!righthyphenmin=3, \c!leftsentence=\hbox{\endash\space}, \c!rightsentence=\hbox{\space\endash}, \c!leftsubsentence=\endash, \c!rightsubsentence=\endash, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,{.\space},\v!month,\space,\v!year}] \installlanguage [\s!da] [\c!spacing=\v!packed, \c!leftsentence={\hbox{\endash\enskip}}, \c!rightsentence={\hbox{\enskip\endash}}, \c!leftsubsentence=\endash, \c!rightsubsentence=\endash, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,{.\space},\v!month,\space,\v!year}] \installlanguage [\s!sv] [\c!spacing=\v!packed, \c!leftsentence=\hbox{\endash\space}, \c!rightsentence=\hbox{\space\endash}, \c!leftsubsentence=\endash, \c!rightsubsentence=\endash, \c!leftquote=\upperrightsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperrightdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\space,\v!month,\space,\v!year}] \installlanguage [\s!af] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\space,\v!month,\space,\v!day}] \installlanguage [\s!nb] [\c!spacing=\v!packed, \s!lefthyphenmin=2, \s!righthyphenmin=2, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] \installlanguage [\s!nn] [\c!spacing=\v!packed, \s!lefthyphenmin=2, \s!righthyphenmin=2, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] \installlanguage [\s!no] [\s!nb] \installlanguage [\s!norwegian] [\s!nb] \installlanguage [\s!bokmal] [\s!nb] \installlanguage [\s!nynorsk] [\s!nn] \installlanguage % old german [deo] [\c!spacing=\v!packed, \c!default=\s!de] \installlanguage [de-de] [\c!spacing=\v!packed, \c!default=\s!de] \installlanguage [de-at] [\c!spacing=\v!packed, \c!default=\s!de, \c!leftquote=\leftguillemot, \c!rightquote=\rightguillemot, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot] \installlanguage [de-ch] [\c!spacing=\v!packed, \c!default=\s!de] %D And some alternative (but very real) english patterns: \installlanguage [en-gb] [\c!default=\s!en, \s!patterns=\s!gb, \s!lefthyphenmin=3, \s!righthyphenmin=3] \installlanguage [en-us] [\c!default=\s!en, \s!patterns=\s!us] \installlanguage [\s!uk] [\s!en-\s!gb] \installlanguage [\s!us] [\s!en-\s!us] \installlanguage [usenglish] [\s!en-\s!us] \installlanguage [ukenglish] [\s!en-\s!gb] \installlanguage [english] [\s!en] \installlanguage [dutch] [\s!nl] \installlanguage [german] [\s!de] \installlanguage [danish] [\s!da] \installlanguage [swedish] [\s!sv] \installlanguage [afrikaans] [\s!af] % Slavic Languages: Belarussian, Russian, Ukrainian, Bulgarian, % Macedonian, Serbian, Croatian, Slovenian, Czech, Kushubian, % Lusatian/Sorbian/Wendish, Polish, Slovak, Albanian, Illyrian, % Armenian \installlanguage [\s!pl] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,{.\space},\v!month,\space,\v!year}] \installlanguage [\s!cs] [\c!spacing=\v!packed, \c!leftsentence={\nobreakspace\endash\thickglue\penalty\zerocount\relax}, \c!rightsentence=\c!leftsentence, \c!leftsubsentence=\c!leftsentence, \c!rightsubsentence=\c!rightsentence, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,\fourperemspace,\v!month,\space,\v!year} \s!lefthyphenmin=2, \s!righthyphenmin=3 ] \installlanguage [\s!sk] [\c!spacing=\v!packed, \c!leftsentence={\nobreakspace\endash\thickglue\penalty\zerocount\relax}, \c!rightsentence=\c!leftsentence, \c!leftsubsentence=\c!leftsentence, \c!rightsubsentence=\c!rightsentence, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,\fourperemspace,\v!month,\space,\v!year} \s!lefthyphenmin=2, \s!righthyphenmin=3 ] \installlanguage [\s!hr] [\c!spacing=\v!packed, \c!leftsentence=\hbox{\endash\space}, \c!rightsentence=\hbox{\space\endash}, \c!leftsubsentence=\endash, \c!rightsubsentence=\endash, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] \installlanguage [\s!sl] [\c!spacing=\v!packed, \c!leftsentence=\hbox{\endash\space}, \c!rightsentence=\hbox{\space\endash}, \c!leftsubsentence=\endash, \c!rightsubsentence=\endash, \c!leftquote=\guilsingleright, \c!rightquote=\guilsingleleft, \c!leftquotation=\rightguillemot, \c!rightquotation=\leftguillemot, \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] \installlanguage [\s!polish] [\s!pl] \installlanguage [\s!czech] [\s!cs] \installlanguage [\s!slovak] [\s!sk] \installlanguage [\s!croatian] [\s!hr] \installlanguage [\s!slovenian] [\s!sl] \installlanguage [slovene] [\s!sl] % both possible (mojca: still needed?) \def\doconvertsloveniancharacters{\dodoconvertcharacters{25}} \def\sloveniancharacters{\doconvertsloveniancharacters\sloveniancharacter} \def\slovenianCharacters{\doconvertsloveniancharacters\slovenianCharacter} %D Define general-purpose macros for Slovenian character enumerations: \defineconversion [sloveniancharacter] [\sloveniancharacter] \defineconversion [slovenianCharacter] [\slovenianCharacter] \defineconversion [sloveniancharacters] [\sloveniancharacters] \defineconversion [slovenianCharacters] [\slovenianCharacters] %D Define these as the general character enumeration when %D language is Slovenian. If you feel uncomfortable with this, %D mail Mojca, since she promised to to take the heat. \defineconversion [\s!sl] [character] [\sloveniancharacter] \defineconversion [\s!sl] [Character] [\slovenianCharacter] \defineconversion [\s!sl] [characters] [\sloveniancharacters] \defineconversion [\s!sl] [Characters] [\slovenianCharacters] \defineconversion [\s!sl] [a] [\sloveniancharacters] \defineconversion [\s!sl] [A] [\slovenianCharacters] \defineconversion [\s!sl] [AK] [\smallcapped\sloveniancharacters] \defineconversion [\s!sl] [KA] [\smallcapped\sloveniancharacters] \def\sloveniancharacters#1{\ctxcommand{alphabetic(\number#1,"sl")}} \def\slovenianCharacters#1{\ctxcommand{Alphabetic(\number#1,"sl")}} % Cyrillic Languages \installlanguage [\s!ru] [\s!lefthyphenmin=2, \s!righthyphenmin=2, \c!spacing=\v!packed, \c!leftsentence=\leftguillemot, \c!rightsentence=\rightguillemot, \c!leftsubsentence=\lowerleftdoubleninequote, \c!rightsubsentence=\upperrightdoubleninequote, \c!leftquote=\lowerleftdoubleninequote, \c!rightquote=\upperrightdoubleninequote, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day,\space,\v!month,\space,\v!year}] \installlanguage [\s!ua] [\s!lefthyphenmin=2, \s!righthyphenmin=2, \c!spacing=\v!packed, \c!leftsentence=\leftguillemot, \c!rightsentence=\rightguillemot, \c!leftsubsentence=\lowerleftdoubleninequote, \c!rightsubsentence=\upperrightdoubleninequote, \c!leftquote=\lowerleftdoubleninequote, \c!rightquote=\upperrightdoubleninequote, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day,\space,\v!month,\space,\v!year}, \s!patterns=\s!uk] \installlanguage [\s!russian] [\s!ru] \installlanguage [\s!ukrainian] [\s!ua] % Uralic Languages: Cheremiss, Estonian, Finnish, Karelian, Laap, % Mordvinian, Permian tongues, Hungarian, Ostyak, Vogul, Samoyed \installlanguage [\s!fi] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\space,\v!month,\space,\v!day}] \installlanguage [\s!hu] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,.,\space,\v!month,\space,\v!day,.}] \installlanguage [\s!finish] [\s!fi] \installlanguage [\s!hungarian] [\s!hu] % Altaic Languages: Uigur, Uzbek, Azeri/Azerbaijani, Chuvash, % Turkish, Turkmen, Kazakh, Kazar, Kireghiz, Noghay, Talar, % Buryat, Kalmuck, Khalkha \installlanguage [\s!tr] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\space,\v!month,\space,\v!day}] \installlanguage [\s!tk] [\c!spacing=\v!broad, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\space,\v!month,\space,\v!day} \s!patterns=\s!tk, \s!lefthyphenmin=1, \s!righthyphenmin=2] \installlanguage [\s!turkish] [\s!tr] \installlanguage [\s!turkmen] [\s!tk] % Anatolian Languages % Arabic Languages \installlanguage [\s!ar] [\c!spacing=\v!broad, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\space,\v!month,{،\space},\v!year}] \installlanguage [\s!arabic] [\s!ar] % Just aliases to "ar" for now \installlanguage[\s!ar-ae][\c!default=\s!ar] % U.A.E. \installlanguage[\s!ar-bh][\c!default=\s!ar] % Bahrain \installlanguage[\s!ar-eg][\c!default=\s!ar] % Egypt \installlanguage[\s!ar-in][\c!default=\s!ar] % India? \installlanguage[\s!ar-kw][\c!default=\s!ar] % Kuwait \installlanguage[\s!ar-ly][\c!default=\s!ar] % Libya \installlanguage[\s!ar-om][\c!default=\s!ar] % Oman \installlanguage[\s!ar-qa][\c!default=\s!ar] % Qatar \installlanguage[\s!ar-sa][\c!default=\s!ar] % Saudi Arabia \installlanguage[\s!ar-sd][\c!default=\s!ar] % Sudan \installlanguage[\s!ar-tn][\c!default=\s!ar] % Tunisia \installlanguage[\s!ar-ye][\c!default=\s!ar] % Yemen % Syriac months \installlanguage[\s!ar-sy][\c!default=\s!ar] % Syria \installlanguage[\s!ar-iq][\c!default=\s!ar-sy] % Iraq \installlanguage[\s!ar-jo][\c!default=\s!ar-sy] % Jordan \installlanguage[\s!ar-lb][\c!default=\s!ar-sy] % Lebanon % Maghribi months \installlanguage[\s!ar-dz][\c!default=\s!ar] % Algeria \installlanguage[\s!ar-ma][\c!default=\s!ar] % Morocco % Artificial Languages: Esperanto % Baltic Languages: Lettish/Latvian, Lietuvių/Lithuanian \installlanguage [\s!lt] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\lowerleftdoubleninequote, \c!rightquote=\upperrightdoublesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!year,~m.,\space,\v!month,\space,\v!day,~d.}, \s!patterns=\s!lt, \s!lefthyphenmin=2, \s!righthyphenmin=2] \installlanguage [\s!lithuanian] [\s!lt] % Celtic: Breton, Welsh, Irish, Manx, Scottish Gaelic \installlanguage [\s!cn] [\c!leftsentence=——, \c!rightsentence=——, \c!leftsubsentence=——, \c!rightsubsentence=——, \c!leftquote=‘, \c!rightquote=’, \c!leftquotation=“, \c!rightquotation=”, \c!date={\v!year,年,\space,\v!month,\v!day,日}] \installlanguage [\s!ja] [\c!leftsentence=——, \c!rightsentence=——, \c!leftsubsentence=——, \c!rightsubsentence=——, \c!leftquote=‘, \c!rightquote=’, \c!leftquotation=「, \c!rightquotation=」, \c!date={西暦,\v!year,年,\v!month,月,\v!day,日}] \installlanguage [\s!kr] [\c!leftsentence=——, \c!rightsentence=——, \c!leftsubsentence=——, \c!rightsubsentence=——, \c!leftquote=‘, \c!rightquote=’, \c!leftquotation=“, \c!rightquotation=”, \c!date={서기,\v!year,년,\v!month,월,\v!day,일}] % Greek \installlanguage [\s!gr] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\greekleftquot, \c!rightquote=\greekrightquot, \c!leftquotation=\greekleftquot, \c!rightquotation=\greekrightquot, \c!date={\v!day\space\v!month\space\v!year}, \s!patterns=\s!agr] % ok? \installlanguage [\s!greek] [\s!gr] \installlanguage [\s!agr] [\s!default=\s!gr, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote] \installlanguage [\s!ancientgreek] [\s!agr] % Indo-Iranian Languages: 34. % Italic Languages: Latin, Italian, Rhaeto-Romanic, Rumanian, % Sardian, Catalan, French, Ladino, Portuguese, Proven\c{c}al, % Spanish \ifdefined\guillemotspace \else \let\guillemotspace\empty \fi \ifdefined\sentencespace \else \let\sentencespace \empty \fi \installlanguage [\s!fr] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\leftguillemot, \c!rightquote=\rightguillemot, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot, \c!date={\v!day:mnem,\v!space,\v!month,\v!space,\v!year}] \installlanguage [\s!es] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,{ de },\v!month,{ de },\v!year}] \installlanguage [sp] [\s!es] % old times context \installlanguage [\s!ca] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\space,\v!month,\space,\v!year}] % Note GB left|/|right (sub)sentences are for \quote {incisi}. \installlanguage [\s!it] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\endash, \c!rightsubsentence=\endash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!leftspeech=\leftguillemot, \c!middlespeech=\leftguillemot, \c!rightspeech=\rightguillemot, \c!date={\v!day,\space,\v!month,\space,\v!year}] \installlanguage % the same as italian [\s!la] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\space,\v!month,\space,\v!year}] \installlanguage [\s!pt] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\space,\v!month,\space,\v!day}] \installlanguage [\s!ro] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\leftguillemot, \c!rightquote=\rightguillemot, \c!leftquotation=\lowerrightdoubleninequote, \c!rightquotation=\upperleftdoublesixquote, \c!date={\v!day,\space,\v!month,\space,\v!year}] %D For compatibility reasons we also define: \installlanguage [\s!french] [\s!fr] \installlanguage [\s!spanish] [\s!es] \installlanguage [\s!catalan] [\s!ca] \installlanguage [\s!italian] [\s!it] \installlanguage [\s!latin] [\s!la] \installlanguage [\s!portuguese] [\s!pt] \installlanguage [\s!romanian] [\s!ro] \defineconversion [\s!fr] [\v!day:mnem] [\frordinaldaynumber] % Vietnamese Language \installlanguage [\s!vi] [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\quoteleft, \c!rightquote=\quoteright, \c!leftquotation=\quotedblleft, \c!rightquotation=\quotedblright, \c!date={{ },dd,{/},mm,{/},yy}] \installlanguage [\s!vietnamese] [\s!vi] % Thai (teaser for Mojca) \installlanguage [\s!th] [\c!spacing=\v!broad, \c!leftsentence=\emdash, \c!rightsentence=\emdash, \c!leftsubsentence=\emdash, \c!rightsubsentence=\emdash, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!month,\space,\v!day,{,\space},\v!year}, \s!patterns=\s!th, \s!lefthyphenmin=2, \s!righthyphenmin=3] \installlanguage [\s!thai] [\s!th] %D Todo: generate this one from languages.data \installlanguage[nld][\s!nl] \installlanguage[deu][\s!de] \installlanguage[eng][\s!en] \installlanguage[fra][\s!fr] %installlanguage[grk][\s!agr] %D This might go: \installlanguage[cz][\s!cs] %installlanguage[fa][\s!fr] % for dutchies only \protect \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-corres.rng��������������������������������0000644�0001750�0001750�00000007355�10526734267�024171� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" ?> <?context-block begin grammar ?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <?context-block end grammar ?> <?context-block begin contacts ?> <start> <ref name="contacts"/> </start> <define name="contacts"> <element name="contacts"> <zeroOrMore> <choice> <ref name="contacts.contact"/> <ref name="contacts.contactgroup"/> <ref name="contacts.contactfile"/> </choice> </zeroOrMore> </element> </define> <?context-block end contacts ?> <?context-block begin contact ?> <define name="contacts.contact"> <element name="contact"> <interleave> <optional> <ref name="contact.initials"/> </optional> <optional> <ref name="contact.formalname"/> </optional> <optional> <ref name="contact.informalname"/> </optional> <optional> <ref name="contact.title"/> </optional> <optional> <ref name="contact.prefix"/> </optional> <optional> <ref name="contact.suffix"/> </optional> <optional> <ref name="contact.telephone"/> </optional> <optional> <ref name="contact.mobiletelephone"/> </optional> <optional> <ref name="contact.telefax"/> </optional> <optional> <ref name="contact.email"/> </optional> <optional> <ref name="contact.address"/> </optional> <optional> <ref name="contact.information"/> </optional> </interleave> <attribute name="label"/> </element> </define> <?context-block end contact ?> <?context-block begin fields ?> <define name="contact.initials"> <element name="initials"> <text/> </element> </define> <define name="contact.formalname"> <element name="formalname"> <text/> </element> </define> <define name="contact.informalname"> <element name="informalname"> <text/> </element> </define> <define name="contact.title"> <element name="title"> <text/> </element> </define> <define name="contact.prefix"> <element name="prefix"> <text/> </element> </define> <define name="contact.suffix"> <element name="suffix"> <text/> </element> </define> <define name="contact.telephone"> <element name="telephone"> <text/> </element> </define> <define name="contact.mobiletelephone"> <element name="mobiletelephone"> <text/> </element> </define> <define name="contact.telefax"> <element name="telefax"> <text/> </element> </define> <define name="contact.email"> <element name="email"> <text/> </element> </define> <define name="contact.address"> <element name="address"> <zeroOrMore> <ref name="contact.address.p"/> </zeroOrMore> </element> </define> <define name="contact.information"> <element name="information"> <text/> </element> </define> <define name="contact.address.p"> <element name="p"> <text/> </element> </define> <?context-block end fields ?> <?context-block begin contactgroup ?> <define name="contacts.contactgroup"> <element name="contactgroup"> <zeroOrMore> <ref name="contactgroup.member"/> </zeroOrMore> <attribute name="label"/> </element> </define> <define name="contactgroup.member"> <element name="member"> <text/> </element> </define> <?context-block end contactgroup ?> <?context-block begin contactfile ?> <define name="contacts.contactfile"> <element name="contactfile"> <text/> </element> </define> <?context-block end contactfile ?> <?context-block begin grammar ?> </grammar> <?context-block end grammar ?>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-pmu.mkii�������������������������������0000644�0001750�0001750�00000016267�11754241457�024334� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-pmu, %D version=2001.06.10, %D title=\CONTEXT\ XML Macros, %D subtitle=Units, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Units} %D Quick and dirty in||line units: %D %D \startbuffer %D <phys> %D <cn> 10 </cn> %D <cu> <Newton/> <Square/> <Meter/> <Per/> <Sec/> </cu> %D </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D A more \MATHML||like unit application: %D %D \startbuffer %D <phys> <apply> <unit/> %D <cn> 10 </cn> %D <csymbol> <Square/> <Meter/> <Per/> <Sec/> </csymbol> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D A bit more compact: %D %D \startbuffer %D <phys> <apply> <unit/> %D <cn> 10 </cn> %D <cu> <Square/> <Meter/> <Per/> <Sec/> </cu> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D A bit more complicated: %D %D \startbuffer %D <phys> <apply> <unit/> %D <apply> <divide/> <ci> a </ci> <cn> 10 </cn> </apply> %D <cu> <Square/> <Meter/> <Per/> <Sec/> </cu> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D An alternative (equivalent) for \type {</cu>}: %D %D \startbuffer %D <phys> <apply> <unit/> %D <cn> 10 </cn> <cunseq> <Square/> <Meter/> <Per/> <Sec/> </cunseq> %D </apply> </phys> %D \stopbuffer %D %D \typebuffer \processXMLbuffer \defineXMLsingular [unitmeaning] [label=] \doPMLunitmeaning \def\doPMLunitmeaning {\expanded{\unitmeaning{\XMLop{label}}}} \startXMLmapping [mml] \remapXMLsequence [unit] [CPA] \doPMLuseq \remapXMLsingular [unit] [CPA] \doPMLunit % #2\empty \remapXMLsequence [cunseq] [CPA] \doPMLuseq % #2 \remapXMLsequence [cu] [CPA] \doPMLuseq % #2 \newif\ifPMLunit \PMLunittrue \def\doPMLuseq#1#2{\PMLunittrue\ignorespaces#2\unskip\PMLunitfalse} \def\doPMLunit#1#2\empty{\ignorespaces#2\unskip} \def\handlePMLunit#1{\ifPMLunit\ignorespaces#1\fi\ignorespaces} %D All unit commands are remapped in a similar way. \remapXMLsingular [Atto] [C] {\handlePMLunit\Atto} \remapXMLsingular [Femto] [C] {\handlePMLunit\Femto} \remapXMLsingular [Pico] [C] {\handlePMLunit\Pico} \remapXMLsingular [Nano] [C] {\handlePMLunit\Nano} \remapXMLsingular [Micro] [C] {\handlePMLunit\Micro} \remapXMLsingular [Milli] [C] {\handlePMLunit\Milli} \remapXMLsingular [Centi] [C] {\handlePMLunit\Centi} \remapXMLsingular [Deci] [C] {\handlePMLunit\Deci} \remapXMLsingular [Hecto] [C] {\handlePMLunit\Hecto} \remapXMLsingular [Kilo] [C] {\handlePMLunit\Kilo} \remapXMLsingular [Mega] [C] {\handlePMLunit\Mega} \remapXMLsingular [Giga] [C] {\handlePMLunit\Giga} \remapXMLsingular [Terra] [C] {\handlePMLunit\Terra} \remapXMLsingular [Peta] [C] {\handlePMLunit\Peta} \remapXMLsingular [Exa] [C] {\handlePMLunit\Exa} \remapXMLsingular [Times] [C] {\handlePMLunit\Times} \remapXMLsingular [Solidus] [C] {\handlePMLunit\Solidus} \remapXMLsingular [Per] [C] {\handlePMLunit\Per} \remapXMLsingular [OutOf] [C] {\handlePMLunit\OutOf} \remapXMLsingular [Linear] [C] {\handlePMLunit\Linear} \remapXMLsingular [Square] [C] {\handlePMLunit\Square} \remapXMLsingular [Cubic] [C] {\handlePMLunit\Cubic} \remapXMLsingular [Inverse] [C] {\handlePMLunit\Inverse} \remapXMLsingular [Degrees] [C] {\handlePMLunit\Degrees} \remapXMLsingular [Meter] [C] {\handlePMLunit\Meter} \remapXMLsingular [Liter] [C] {\handlePMLunit\Liter} \remapXMLsingular [Sec] [C] {\handlePMLunit\Sec} \remapXMLsingular [Year] [C] {\handlePMLunit\Year} \remapXMLsingular [Month] [C] {\handlePMLunit\Month} \remapXMLsingular [Week] [C] {\handlePMLunit\Week} \remapXMLsingular [Day] [C] {\handlePMLunit\Day} \remapXMLsingular [Hour] [C] {\handlePMLunit\Hour} \remapXMLsingular [Min] [C] {\handlePMLunit\Min} \remapXMLsingular [Second] [C] {\handlePMLunit\Sec} \remapXMLsingular [Rad] [C] {\handlePMLunit\Rad} \remapXMLsingular [Deg] [C] {\handlePMLunit\Deg} \remapXMLsingular [Hertz] [C] {\handlePMLunit\Hertz} \remapXMLsingular [RevPerSec] [C] {\handlePMLunit\RevPerSec} \remapXMLsingular [RevPerMin] [C] {\handlePMLunit\RevPerMin} \remapXMLsingular [Gram] [C] {\handlePMLunit\Gram} \remapXMLsingular [Atom] [C] {\handlePMLunit\Atom} \remapXMLsingular [Newton] [C] {\handlePMLunit\Newton} \remapXMLsingular [Pascal] [C] {\handlePMLunit\Pascal} \remapXMLsingular [Joule] [C] {\handlePMLunit\Joule} \remapXMLsingular [Watt] [C] {\handlePMLunit\Watt} \remapXMLsingular [Celsius] [C] {\handlePMLunit\Celsius} \remapXMLsingular [Kelvin] [C] {\handlePMLunit\Kelvin} \remapXMLsingular [Fahrenheit] [C] {\handlePMLunit\Fahrenheit} \remapXMLsingular [Mol] [C] {\handlePMLunit\Mol} \remapXMLsingular [Molair] [C] {\handlePMLunit\Molair} \remapXMLsingular [Equivalent] [C] {\handlePMLunit\Equivalent} \remapXMLsingular [Farad] [C] {\handlePMLunit\Farad} \remapXMLsingular [Ohm] [C] {\handlePMLunit\Ohm} \remapXMLsingular [Siemens] [C] {\handlePMLunit\Siemens} \remapXMLsingular [Ampere] [C] {\handlePMLunit\Ampere} \remapXMLsingular [Coulomb] [C] {\handlePMLunit\Coulomb} \remapXMLsingular [Volt] [C] {\handlePMLunit\Volt} \remapXMLsingular [eVolt] [C] {\handlePMLunit\eVolt} \remapXMLsingular [Tesla] [C] {\handlePMLunit\Tesla} \remapXMLsingular [VoltAC] [C] {\handlePMLunit\VoltAC} \remapXMLsingular [VoltDC] [C] {\handlePMLunit\VoltDC} \remapXMLsingular [Baud] [C] {\handlePMLunit\Baud} \remapXMLsingular [Bit] [C] {\handlePMLunit\Bit} \remapXMLsingular [Byte] [C] {\handlePMLunit\Byte} \remapXMLsingular [Bequerel] [C] {\handlePMLunit\Bequerel} \remapXMLsingular [Sievert] [C] {\handlePMLunit\Sievert} \remapXMLsingular [Candela] [C] {\handlePMLunit\Candela} \remapXMLsingular [Bell] [C] {\handlePMLunit\Bell} \remapXMLsingular [At] [C] {\handlePMLunit\At} \remapXMLsingular [Atm] [C] {\handlePMLunit\Atm} \remapXMLsingular [Bar] [C] {\handlePMLunit\Bar} \remapXMLsingular [EVolt] [C] {\handlePMLunit\EVolt} \remapXMLsingular [Foot] [C] {\handlePMLunit\Foot} \remapXMLsingular [Inch] [C] {\handlePMLunit\Inch} \remapXMLsingular [Cal] [C] {\handlePMLunit\Cal} \remapXMLsingular [Force] [C] {\handlePMLunit\Force} \remapXMLsingular [Lux] [C] {\handlePMLunit\Lux} \remapXMLsingular [Gray] [C] {\handlePMLunit\Gray} \remapXMLsingular [Weber] [C] {\handlePMLunit\Weber} \remapXMLsingular [Henry] [C] {\handlePMLunit\Henry} \remapXMLsingular [Sterant] [C] {\handlePMLunit\Sterant} \remapXMLsingular [Angstrom] [C] {\handlePMLunit\Angstrom} \remapXMLsingular [Gauss] [C] {\handlePMLunit\Gauss} \remapXMLsingular [Percent] [C] {\handlePMLunit\Percent} \remapXMLsingular [Promille] [C] {\handlePMLunit\Promille} \remapXMLsingular [Permille] [C] {\handlePMLunit\Permille} \remapXMLsingular [Unit] [C] {\handlePMLunit\Unit} \remapXMLsingular [NoUnit] [C] {\handlePMLunit\NoUnit} \stopXMLmapping \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-ini.mkii�������������������������������0000644�0001750�0001750�00000244722�11756777531�024313� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=colo-ini, %D version=2007.08.08, %D title=\CONTEXT\ Color Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We need to clean this up further but first we hav eto make sure that mkiv %D code works ok. \writestatus{loading}{ConTeXt Color Macros / Initialization} %D This module implements color. Since \MKII\ and \MKIV\ use a completely %D different approach, this module only implements a few generic mechanisms. \unprotect \chardef\colorversion=1 % temp, needed for tracing purposes, mkiv transition %D We use a couple of local registers. That way we don't have %D to group when converting colors. By the way, this is not %D really faster. We can sqeeze half a second runtime for 50K %D switches on a 1G machine, but the macros will become rather %D ugly then. To mention one such improvement: no colon %D after the key character (.25 sec). \newdimen\colordimen \newcount\colorcount %D When typesetting for paper, we prefer using the \cap{CMYK} %D color space, but for on||screen viewing we prefer \cap{RGB} %D (the previous implementation supported only this scheme). %D Independant of such specifications, we support some automatic %D conversions: %D %D \startitemize[packed] %D \item convert all colors to \cap{RGB} %D \item convert all colors to \cap{CMYK} %D \item convert all colors to gray scales %D \stopitemize %D %D We also support optimization of colors to gray scales. %D %D \startitemize[continue] %D \item reduce gray colors to gray scales %D \item reduce \cap{CMY} components to \cap{K} %D \stopitemize %D %D These options are communicated by means of: \newif\ifRGBsupported \newif\ifCMYKsupported \newif\ifSPOTsupported \newif\ifpreferGRAY \newif\ifGRAYprefered \newif\ifreduceCMYK \newif\ifconverttoGRAY \newif\ifweightGRAY \weightGRAYtrue \newif\ifconvertMPcolors \newif\ifreduceMPcolors \newif\ifforcegrayMPcolors %D The last boolean controls reduction of \cap{CMYK} to %D \cap{CMY} colors. When set to true, the black component %D is added to the other ones. %D %D Prefering gray is not the same as converting to gray. %D Conversion treats each color components in a different way, %D while prefering is just a reduction and thus a %D space||saving option. \newif\iffreezecolors \freezecolorsfalse \newif\ifincolor % true if colors enabled \newif\iflocalcolor \let\colorlist \empty \let\currentspotcolor \empty \let\allspotcolors \empty \let\usedspotcolors \empty \let\usedcolorchannels\empty \let\currentpalet \empty %D \macros %D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor} %D %D \startbuffer %D \definecolor [blue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m %D \definecolor [yellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m %D %D \definespotcolor [blue-100] [blue] [p=1] %D \definespotcolor [yellow-100] [yellow] [p=1] %D %D \definemultitonecolor [pdftoolscolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1] %D %D \useexternalfigure[demofig][mill.png][object=no] %D %D \startcombination[4*1] %D {\externalfigure[demofig]} {no color} %D {\externalfigure[demofig][color=pdftoolscolor]} {indexed duotone} %D {\externalfigure[demofig][color=blue-100]} {spot color} %D {\externalfigure[demofig][color=yellow-100]} {spot color} %D \stopcombination %D \stopbuffer %D %D \getbuffer \typebuffer \def\definecolor {\dodoubleargument\dodefinecolor} \def\defineglobalcolor {\dodoubleargument\dodefineglobalcolor} \def\definenamedcolor {\dodoubleargument\dodefinenamedcolor} \def\definespotcolor {\dotripleargument\dodefinespotcolor} \def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor} % check: registerusedspotcolors % check: registerusedcolorchannels %D \macros %D {doifcolorelse, doifcolor} %D %D Switching to a color is done by means of the following %D command. Later on we will explain the use of palets. We %D define ourselves a color conditional first. \ifx\doifcolorelse\undefined \let\doifcolorelse\secondoftwoarguments \let\doifcolor \gobbleoneargument \fi %D \macros %D {localstartcolor,localstopcolor} %D %D Simple color support, that is without nesting, is provided %D by: \ifx\localstartcolor\undefined \let\localstartcolor\undefined \let\localstopcolor \undefined \fi %D \macros %D {faststartcolor,faststopcolor} %D %D No checking for arguments and such: \ifx\faststartcolor\undefined \def\faststartcolor[#1]{} \def\faststopcolor {} \fi %D These local ones may go away in future versions. %D \macros %D {startcolor,stopcolor} %D %D The more save method, the one that saves the current color %D state and returns to this state afterward, is activated by: %D %D \showsetup{startcolor} \ifx\startcolor\undefined \let\startcolor\undefined \let\stopcolor \undefined \fi %D \macros %D {startcurrentcolor,stopcurrentcolor} \def\startcurrentcolor{\startcolor[\outercolorname]} \def\stopcurrentcolor {\stopcolor} %D \macros %D {color,graycolor} %D %D This leaves the simple color command: %D %D \showsetup{color} %D \showsetup{graycolor} \ifx\color\undefined \def\color [#1]{} \def\graycolor[#1]{} \def\gray {\graycolor} \fi %D \macros %D {localstartraster,localstopraster, %D startraster,stopraster,raster} %D %D The previous conversions are not linear and treat each color %D component according to human perception curves. Pure gray %D (we call them rasters) has equal color components. In %D \CONTEXT\ rasters are only used as backgrounds and these %D don't cross page boundaries in the way color does. Therefore %D we don't need stacks and marks. Just to be compatible with %D color support we offer both 'global' and 'local' commands. \ifx\startraster\undefined \def\startraster [#1]{} \def\stopraster {} \def\raster [#1]{} \def\localstartraster[#1]{} \def\localstopraster {} \fi %D \macros %D {colorvalue, grayvalue} %D %D We can typeset the color components using \type{\colorvalue} and %D \type{\grayvalue}. The commands: %D %D \startbuffer %D color value of SomeKindOfRed: \colorvalue{SomeKindOfRed} \crlf %D gray value of SomeKindOfRed: \grayvalue{SomeKindOfRed} %D \stopbuffer %D %D \typebuffer %D %D show us: %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld \def\colorformatseparator{ } \ifx\colorvalue\undefined \let\colorvalue\gobbleoneargument \let\grayvalue \gobbleoneargument \fi % check: \currentcolorname % check: \outercolorname %D \macros %D {setupcolor} %D %D Color definitions can be grouped in files with the name: %D %D \starttyping %D \f!colorprefix-identifier.tex %D \stoptyping %D %D where \type{\f!colorprefix} is \unprotect {\tttf \f!colorprefix}. %D Loading such a file is done by \protect %D %D \showsetup{setupcolor} %D %D Some default colors are specified in \type{colo-rgb.tex}, %D which is loaded into the format by: %D %D \starttyping %D \setupcolor[rgb] %D \stoptyping \let\colorstyle\empty \def\setupcolor {\dosingleargument\dosetupcolor} \def\dosetupcolor[#1]% {\doifnot{#1}\colorstyle {\def\colorstyle{#1}% \processcommalist[#1]\dodosetupcolor}} \def\dodosetupcolor#1% {\makeshortfilename[\truefilename{\f!colorprefix#1}]% \startreadingfile \readsysfile{\shortfilename.\mksuffix} {\showmessage\m!colors4\colorstyle} {\readsysfile{\shortfilename.tex} {\showmessage\m!colors4\colorstyle} {\showmessage\m!colors5\colorstyle}}% \stopreadingfile} \let\usecolors\setupcolor % check: \chardef\currentcolorchannel=0 % check: \startcolormode % check: \newif\iffilterspotcolor \filterspotcolorfalse % check: \newif\ifdoingspotcolor \doingspotcolorfalse % check: \registercolorchannel %D \macros %D {definetransparency} %D %D This command numbers to names: \def\definetransparency {\dodoubleargument\dodefinetransparency} \def\setupcolors {\dosingleargument\dosetupcolors} \def\resetcolorsplitting {\chardef\currentcolorchannel\zerocount \let\currentspotcolor\empty \filterspotcolorfalse} \def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplit\fi} \def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplit-\fi} \def\setcolorsplitting {\resetsystemmode{\v!color\colorsplitsuffix}% \resetcolorsplitting \processaction [\@@clsplit] [ c=>\chardef\currentcolorchannel1,% m=>\chardef\currentcolorchannel2,% y=>\chardef\currentcolorchannel3,% k=>\chardef\currentcolorchannel4,% r=>\chardef\currentcolorchannel5,% g=>\chardef\currentcolorchannel6,% b=>\chardef\currentcolorchannel7,% s=>\chardef\currentcolorchannel8,% \v!no=>,% \currentcolorchannel0,% all colors \s!default=>,% \currentcolorchannel0,% all colors \s!unknown=>\filterspotcolortrue \edef\currentspotcolor{\commalistelement}]% \setsystemmode{\v!color\colorsplitsuffix}% \iffilterspotcolor \let\@@clrgb\v!no \fi} \ifx\dosetupcolormodel\undefined \let\dosetupcolormodel\relax \fi \def\dosetupcolors[#1]% some no longer make sense in MkIV {\getparameters[\??cl][#1]% \doifelse\@@clspot\v!yes \SPOTsupportedtrue \SPOTsupportedfalse \doifelsenothing\@@clsplit \resetcolorsplitting \setcolorsplitting \doifelse\@@clreduction\v!yes \reduceCMYKtrue \reduceCMYKfalse \doifelse\@@clexpansion\v!yes \freezecolorstrue \freezecolorsfalse \doifelse\@@clcriterium\v!all \hidesplitcolortrue \hidesplitcolorfalse \doifelse\@@clrgb\v!no {\ifRGBsupported \ifproductionrun\showmessage\m!colors {9}\v!rgb \fi\RGBsupportedfalse \fi} {\ifRGBsupported \else\ifproductionrun\showmessage\m!colors{10}\v!rgb \fi\RGBsupportedtrue \fi}% \doifelse\@@clcmyk\v!no {\ifCMYKsupported \ifproductionrun\showmessage\m!colors {9}\v!cmyk \fi\CMYKsupportedfalse\fi} {\ifCMYKsupported\else\ifproductionrun\showmessage\m!colors{10}\v!cmyk \fi\CMYKsupportedtrue \fi}% \doifelse\@@clmpcmyk\v!no {\ifMPcmykcolors \ifproductionrun\showmessage\m!colors {9}{\v!mp\v!cmyk}\fi\MPcmykcolorsfalse \fi} {\ifMPcmykcolors \else\ifproductionrun\showmessage\m!colors{10}{\v!mp\v!cmyk}\fi\MPcmykcolorstrue \fi}% \doifelse\@@clmpspot\v!no {\ifMPspotcolors \ifproductionrun\showmessage\m!colors {9}{\v!mp\v!spot}\fi\MPspotcolorsfalse \fi} {\ifMPspotcolors \else\ifproductionrun\showmessage\m!colors{10}{\v!mp\v!spot}\fi\MPspotcolorstrue \fi}% \preferGRAYfalse \processaction [\@@clconversion] [ \v!yes=>\preferGRAYtrue, \v!always=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]% \ifRGBsupported \converttoGRAYfalse \forcegrayMPcolorsfalse \else\ifCMYKsupported \converttoGRAYfalse \forcegrayMPcolorsfalse \convertMPcolorstrue \ifreduceCMYK \reduceMPcolorstrue \fi \else \ifconverttoGRAY\else\showmessage\m!colors{11}\empty\fi \converttoGRAYtrue \forcegrayMPcolorstrue \convertMPcolorsfalse \reduceMPcolorsfalse \fi\fi \processaction [\@@clstate] [ \v!global=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi \incolortrue\localcolorfalse, \v!local=>\ifincolor\else\showmessage\m!colors2\colorstyle\fi \incolortrue\localcolortrue, \v!start=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi \incolortrue\localcolorfalse \let\@@clstate\v!global, \v!stop=>\incolorfalse\localcolorfalse \forcegrayMPcolorstrue]% \dosetupcolormodel \initializemaintextcolor} %D \macros %D {startregistercolor,stopregistercolor,permitcolormode} %D %D If you only want to register a color, the switch \type %D {\ifpermitcolormode} can be used. That way the nested %D colors know where to go back to. \ifx\startregistercolor\undefined \def\startregistercolor[#1]{} \def\stopregistercolor {} \fi %D We use these macros for implementing text colors %D (actually, the first application was in foreground %D colors). %D %D \starttyping %D \starttextcolor[red] %D \dorecurse{10}{\input tufte \color[green]{oeps} \par} %D \stoptextcolor %D \stoptyping %D %D This is more efficient than the alternative: %D %D \starttyping %D \setupbackgrounds[text][foregroundcolor=red] %D \startregistercolor[red] %D \dorecurse{10}{\input tufte \color[green]{oeps} \par} %D \stopregistercolor %D \stoptyping \def\maintextcolor {} \def\defaulttextcolor {black} \def\@@themaintextcolor{themaintextcolor} \ifx\initializemaintextcolor\undefined \def\starttextcolor [#1]{} \def\stoptextcolor {} \def\initializemaintextcolor {} \fi \ifx\restoretextcolor\undefined % to be redone \let\restoretextcolor \firstofoneargument \let\localstarttextcolor\relax \let\localstoptextcolor \relax \fi %D In this documentation we will not go into too much details %D on palets. Curious users can find more information on this %D topic in \from[use of color]. %D %D At the moment we implemented color in \CONTEXT\ color %D printing was not yet on the desktop. In spite of this lack our %D graphics designer made colorfull illustrations. When printed %D on a black and white printer, distinctive colors can come %D out equally gray. We therefore decided to use only colors %D that were distinctive in colors as well as in black and %D white print. %D %D Although none of the graphic packages we used supported %D logical colors and global color redefition, we build this %D support into \CONTEXT. This enabled us to experiment and %D also prepared us for the future. %D \macros %D {definepalet} %D %D Colors are grouped in palets. The colors in such a palet can %D have colorful names, but best is to use names that specify %D their use, like {\em important} or {\em danger}. As a sort %D of example \CONTEXT\ has some palets predefined, %D like:\footnote{At the time I wrote the palet support, I was %D reading 'A hort history of time' of S.~Hawkins, so that's %D why we stuck to quarks.} %D %D \starttyping %D \definepalet %D [alfa] %D [ top=rood:7, %D bottom=groen:6, %D up=blauw:5, %D down=cyaan:4, %D strange=magenta:3, %D charm=geel:2] %D \stoptyping %D %D It's formal definition is: %D %D \showsetup{definepalet} %D %D Visualized, such a palet looks like: %D %D \startbuffer[palet] %D \showpalet [alfa] [horizontal,name,number,value] %D \stopbuffer %D %D \startlinecorrection %D \getbuffer[palet] %D \stoplinecorrection %D %D This bar shows both the color and gray alternatives of the %D palet components (not visible in black and white print). %D %D When needed, one can copy a palet by saying: %D %D \starttyping %D \definepalet [TEXcolorpretty] [colorpretty] %D \stoptyping %D %D This saves us some typing in for instance the modules that %D deal with pretty verbatim typesetting. \def\definepalet {\dodoubleargument\dodefinepalet} \def\dodefinepalet[#1][#2]% {\doifassignmentelse{#2} {%\showmessage\m!colors6{#1}% \letvalue{\??pa#1}\empty \setevalue{\??pa\??pa#1}{#2}% \def\dodododefinepalet[##1=##2]% {\doifvaluesomething{\??pa#1} {\setevalue{\??pa#1}{\csname\??pa#1\endcsname,}}% \setevalue{\??pa#1}{\csname\??pa#1\endcsname##1}% \dodefinepaletcolor{#1}{##1}{##2}}% \def\dododefinepalet##1% {\dodododefinepalet[##1]}% \processcommalist[#2]\dododefinepalet} {\doifdefined{\??pa#2} {\expanded{\dodefinepalet[#1][\csname\??pa\??pa#2\endcsname]}}}} \ifx\dodefinepaletcolor\undefined \let\dodefinepaletcolor\gobblethreearguments \fi \let\paletsize\!!zerocount \def\getpaletsize[#1]% {\getcommacommandsize[\csname\??pa\??pa#1\endcsname]% \edef\paletsize{\number\commalistsize}} %D Instead of refering to colors, one can also directly specify %D a color: %D %D \starttyping %D \definepalet[test][xx=green] %D \definepalet[test][xx={y=.4}] %D \stoptyping %D \macros %D {setuppalet} %D %D Colors are taken from the current palet, if defined. %D Setting the current palet is done by: %D %D \showsetup{setuppalet} \let\currentpalet\empty \def\setuppalet {\dosingleempty\dosetuppalet} \def\dosetuppalet[#1]% {\edef\currentpalet{#1}% \ifx\currentpalet\empty % seems to be a reset \else\ifcsname\??pa\currentpalet\endcsname \edef\currentpalet{#1:}% \else \showmessage\m!colors7\currentpalet \let\currentpalet\empty \fi\fi} %D \macros %D {showpalet} %D %D The previous visualization was typeset with: %D %D \typebuffer[palet] %D %D This commands is defined as: %D %D \showsetup{showpalet} \fetchruntimecommand \showpalet {\f!colorprefix\s!run} %D \macros %D {showcolorcomponents} %D %D \starttyping %D \showcolorcomponents[color-1,color-2] %D \stoptyping \fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run} %D \macros %D {definecolorgroup} %D %D The naming of the colors in this palet suggests some %D ordening, which in turn is suported by color grouping. %D %D \starttyping %D \definecolorgroup %D [red] %D [1.00:0.90:0.90, %D 1.00:0.80:0.80, %D 1.00:0.70:0.70, %D 1.00:0.55:0.55, %D 1.00:0.40:0.40, %D 1.00:0.25:0.25, %D 1.00:0.15:0.15, %D 0.90:0.00:0.00] %D \stoptyping %D %D In such a color group colors are numbered from~$1$ to~$n$. %D %D \showsetup{definecolorgroup} %D %D This kind of specification is not only more compact than %D defining each color separate, it also loads faster and takes %D less bytes. \def\definecolorgroup {\dotripleempty\dodefinecolorgroup} \def\dododefinecolorgroupgray [#1][#2:#3]{\definecolor [#1:\the\colorcount][s=#2]} \def\dododefinecolorgrouprgb [#1][#2:#3:#4:#5]{\definecolor [#1:\the\colorcount][r=#2,g=#3,b=#4]} \def\dododefinecolorgroupcmyk[#1][#2:#3:#4:#5:#6]{\definecolor [#1:\the\colorcount][c=#2,m=#3=,y=#4,k=#5]} \def\dododefinecolorgroupspot [#1][#2:#3:#4]{\definespotcolor[#1:\the\colorcount][#2][p=#3]} \def\dododefinecolorgroup#1#2% {\advance\colorcount\plusone \getvalue{dododefinecolorgroup\currentcolorspace}[#1][#2:0:0:0:0]} \def\dodefinecolorgroup[#1][#2][#3]% obsolete, just use palets {\ifthirdargument \doifelsenothing{#2}{\let\currentcolorspace\v!rgb}{\def\currentcolorspace{#2}}% \colorcount\zerocount \processcommalist[#3]{\dododefinecolorgroup{#1}}% \else \doifinstringelse{:}{#2} {\definecolorgroup[#1][\v!rgb][#2]} {\doloop {\doifdefinedelse{\??cr#2:\recurselevel} {\setevalue{\??cr#1:\recurselevel}{\csname\??cr#2:\recurselevel\endcsname}} {\exitloop}}}% \fi} %D \macros %D {showcolorgroup} %D %D We can show the group by: %D %D \startbuffer %D \showcolorgroup [blue] [horizontal,name,number,value] %D \stopbuffer %D %D \typebuffer %D %D or in color: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D which uses: %D %D \showsetup{showcolorgroup} \fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run} %D There are ten predefined color groups, like %D \color[green]{\em groen}, \color[red]{\em rood}, %D \color[blue]{\em blauw}, \color[cyan]{\em cyaan}, %D \color[magenta]{\em magenta} and \color[yellow]{\em geel}. %D %D \startlinecorrection %D \hbox to \hsize %D {\hss %D \showcolorgroup [red] [vertical,name,number]\hss %D \showcolorgroup [green] [vertical,name]\hss %D \showcolorgroup [blue] [vertical,name]\hss %D \showcolorgroup [cyan] [vertical,name]\hss %D \showcolorgroup [magenta][vertical,name]\hss %D \showcolorgroup [yellow] [vertical,name]\hss} %D \stoplinecorrection %D %D These groups are used to define palets {\em alfa} upto {\em %D zeta}. As long as we don't use colors from the same row, we %D get ourselves distinctive palets. By activating such a palet %D one gains access to its members {\em top} to {\em charm} (of %D course one should use more suitable names than these). %D %D \startlinecorrection %D \hbox to \hsize %D {\showpalet [alfa] [vertical,name,number]\hss %D \showpalet [beta] [vertical,name]\hss %D \showpalet [gamma] [vertical,name]\hss %D \showpalet [delta] [vertical,name]\hss %D \showpalet [epsilon] [vertical,name]\hss %D \showpalet [zeta] [vertical,name]} %D \stoplinecorrection %D %D By using the keyword \type {value} the individual color %D components are shown too. When printed in color, these %D showcases show both the colors and the gray value. %D \macros %D {comparepalet} %D %D There are some more testing macros available: %D %D \startbuffer %D \comparepalet [alfa] %D \stopbuffer %D %D \typebuffer %D %D shows the palet colors against a background: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D The formal definition is: %D %D \showsetup{comparepalet} \fetchruntimecommand \comparepalet {\f!colorprefix\s!run} %D \macros %D {comparecolorgroup} %D %D The similar command: %D %D \startbuffer %D \comparecolorgroup [blue] %D \stopbuffer %D %D \typebuffer %D %D shows color groups: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D this commands are defined as: %D %D \showsetup{comparecolorgroup} \fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run} %D \macros %D {showcolor} %D %D But let's not forget that we also have the more traditional %D non||related colors. These show up after: %D %D \starttyping %D \showcolor [name] %D \stoptyping %D %D Where \type{name} for instance can be \type{rgb}. %D %D \showsetup{showcolor} \fetchruntimecommand \showcolor {\f!colorprefix\s!run} %D It would make sense to put the following code in \type %D {colo-mps}, but it it rather low level. %D \macros %D {negatecolorcomponent,negatedcolorcomponent} %D %D These speak for themselves. See \type {colo-ext} for usage. \def\negatecolorcomponent#1% #1 = \macro {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi \edef#1{\withoutpt\the\scratchdimen}} \let\negatedcolorcomponent\firstofoneargument \def\negatedcolorcomponent#1% {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint \!!zerocount \else \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax \fi} \def\negatecolorcomponent#1% #1 = \macro {\edef#1{\negatedcolorcomponent{#1}}} %D \macros %D {ifMPgraphics, ifMPcmykcolors, MPcolor} %D %D A very special macro is \type{\MPcolor}. This one can be %D used to pass a \CONTEXT\ color to \METAPOST. %D %D \starttyping %D \MPcolor{my own red} %D \stoptyping %D %D This macro returns a \METAPOST\ triplet \type{(R,G,B)}. %D Unless \CMYK\ color support is turned on with \type %D {MPcmyk}, only \cap{RGB} colors and gray scales are %D supported. \newif\ifMPcmykcolors % \MPcmykcolorsfalse \newif\ifMPspotcolors % \MPspotcolorsfalse \ifx\MPcolor\undefined \def\MPcolor#1{(0,0,0)} \fi %D \macros %D {PDFcolor,FDFcolor} %D %D Similar alternatives are avaliable for \PDF: %D For the moment we keep the next downward compatibility %D switch, i.e.\ expanded colors. However, predefined colors %D and palets are no longer expanded (which is what I wanted %D in the first place). %D %D Well, in case we want to do color separation and use CMYK %D colors only, this is dangerous since unwanted remapping may %D take place. Especially when we redefine already defined %D colors in another color space (e.g. darkgreen is %D predefined in RGB color space, so a redefinition in CMYK %D coordinates before RGB mode is disabled, would give %D unexpected results due to the already frozen color spec.) %D %D So, from now on, colors are not frozen any more! \chardef\currentcolorchannel=0 \newif\iffilterspotcolor \filterspotcolorfalse \newif\ifdoingspotcolor \doingspotcolorfalse \def\registercolorchannel#1% {\ifdoingspotcolor \else \global\expandafter\chardef\csname\??cs#1\endcsname\zerocount \fi} \newif\ifhidesplitcolor \hidesplitcolortrue %D The next macro is for instance used in figure splitting: \def\doifseparatingcolorselse {\iffilterspotcolor \@EA\firstoftwoarguments \else\ifcase\currentcolorchannel \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi\fi} \def\doifcolorchannelelse#1% {\doifseparatingcolorselse {\doifelsenothing{#1} \secondoftwoarguments {\doifelse{#1}\@@clsplit \firstoftwoarguments \secondoftwoarguments}} \secondoftwoarguments} \def\resetcolorseparation {\filterspotcolorfalse \chardef\currentcolorchannel\zerocount} %D These can be used in selecting specific files (like %D figuredatabases). % we already have: % % \def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplitsen\fi} % \def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplitsen-\fi} \def\colorchannelprefix{\doifseparatingcolorselse\@@clsplit\empty-} \def\colorchannelsuffix{-\doifseparatingcolorselse\@@clsplit\empty} %D We now define the low level macros: \chardef\colorversion=1 %D Color support is not present in \TEX. Colorful output can %D however be accomplished by using specials. This also means %D that this support depends on the \DVI\ driver used. At the %D moment this module was written, still no decent standard on %D color specials has been agreed upon. We therefore decided to %D implement a mechanism that is as independant as possible of %D drivers. %D %D Color support shares with fonts that is must be implemented %D in a way that permits processing of individual \DVI\ pages. %D Furthermore it should honour grouping. The first condition %D forces us to use a scheme that keeps track of colors at %D page boundaries. This can be done by means of \TEX's %D marking mechanism (\type{\mark}). %D %D When building pages, \TEX\ periodically looks at the %D accumulated typeset contents and breaks the page when %D suitable. At that moment, control is transfered to the %D output routine. This routine takes care of building the %D pagebody and for instance adds headers and footers. The page %D can be broken in the middle of some colored text, but %D headers and footers are often in black upon white or %D background. If colors are applied there, they definitely %D are used local, which means that they don't cross page %D borders. %D %D Boxes are handled as a whole, which means that when we %D apply colors inside a box, those colors don't cross page %D boundaries, unless of course boxes are split or unboxed. %D Especially in interactive texts, colors are often used in %D such a local way: in boxes (buttons and navigational tools) %D or in the pagebody (backgrounds). %D %D So we can distinguish local colors, that don't cross %D pages from global colors, of which we can end many pages %D later. The color macros will treat both types in a different %D way, thus gaining some speed. %D %D This module also deals with gray scales. Because similar %D colors can end up in the same gray scale when printed in %D black and white, we also implement a palet system that deals %D with these matters. Because of fundamental differences %D between color and gray scale printing, in \CONTEXT\ we also %D differ between these. For historic reasons |<|we first %D implemented gray scales using patterns of tiny periods|>| %D and therefore called them {\em rasters}. So don't be %D surprised if this term shows up. %D \macros %D {definecolor} %D %D We will enable users to specify colors in \cap{RGB} and %D \cap{CMYK} color spaces or gray scales using %D %D \showsetup{definecolor} %D %D For example: %D %D \starttyping %D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05] %D \stoptyping %D %D Such color specifications are saved in a macro in the %D following way: %D %D \starttyping %D \setvalue{\??cr name}{R:r:g:b} %D \setvalue{\??cr name}{C:c:m:y:k} %D \setvalue{\??cr name}{S:s} %D \stoptyping %D %D Gray scales are specified with the \type{s} parameter, %D where the \type {s} is derived from {\em screen}. %D %D Starting with \PDF\ 1.4 (2001) \CONTEXT\ supports %D transparent colors. The transparency factor is represented %D by a \type {t} and the transparency method by an \type {a} %D (alternative). Later we will implement more control %D (probably by symbolic methods. So, currently the data is %D stored as follows: %D %D \starttyping %D \setvalue{\??cr name}{R:r:g:b:a:t} %D \setvalue{\??cr name}{C:c:m:y:k:a:t} %D \setvalue{\??cr name}{S:s:a:t} %D \stoptyping % r g b : rbg % c m y k : cmyk % s : gray % p n d f : spot % h : hexadecimal % t a : transparency % e : equivalent (spotcolors) \def\@@cl@@z{0} \def\@@cl@@o{1} \def\@@resetcolorparameters {\let\@@cl@@r\@@cl@@z \let\@@cl@@g\@@cl@@z \let\@@cl@@b\@@cl@@z \let\@@cl@@c\@@cl@@z \let\@@cl@@m\@@cl@@z \let\@@cl@@y\@@cl@@z \let\@@cl@@k\@@cl@@z \let\@@cl@@s\@@cl@@z \let\@@cl@@p\@@cl@@o \let\@@cl@@n\empty \let\@@cl@@d\empty \let\@@cl@@f\@@cl@@o \let\@@cl@@h\empty \let\@@cl@@e\empty \let\@@cl@@t\@@cl@@z \let\@@cl@@a\@@cl@@z} \@@resetcolorparameters \def\@@cl@@A{\@@cl@@a} % a hook for symbolic conversion, see below %D Handling a few nested \type{\cs}'s is no problem (\type %D {\@EA\@EAEAEA\@EA}) but we need a full expansion, so I %D tried one of the fully expandable primitives using a sort %D of delimited thing. I tried \type {\number} first, but this %D does not work, but \type {\romannumeral} does. Actually, %D \type{\romannumeral0} returns nothing, so it's a perfect %D candidate for this kind of hackery. This reminds me that I %D have to look into David Kastrup's Euro\TeX\ 2002 article %D because he is using \type {\romannumeral} for loops %D (repetitive \quote {m} stuff). % \def\x{\y}\def\y{\z}\def\z{0:1:1:1} % % \def\bla #1:#2:#3\end{} % % \@EA\bla\romannumeral\x\end \def\colorXpattern{0S:\@@cl@@z:\@@cl@@z:\@@cl@@z} \def\colorZpattern{0S:\@@cl@@z:\@@cl@@A:\@@cl@@t} \def\colorSpattern{0S:\@@cl@@s:\@@cl@@A:\@@cl@@t} \def\colorCpattern{0C:\@@cl@@c:\@@cl@@m:\@@cl@@y:\@@cl@@k:\@@cl@@A:\@@cl@@t} \def\colorRpattern{0R:\@@cl@@r:\@@cl@@g:\@@cl@@b:\@@cl@@A:\@@cl@@t} %def\colorPpattern{0P:\@@cl@@n:\@@cl@@p:\@@cl@@A:\@@cl@@t} \def\colorPpattern{0P:\@@cl@@n:\@@cl@@f:\@@cl@@d:\@@cl@@p:\@@cl@@A:\@@cl@@t} %D The extra 0 catches empty colors specs (needed for the %D \type {\MPcolor} and \type {\PDFcolor} conversion (\type %D {\@@cr} equals \type {\relax}!). \def\handlecolorwith#1{\@EA#1\romannumeral0} %D Next comes the main definition macro. \def\dodefinecolor {\dododefinecolor\relax \setvalue \setevalue1} \def\dodefineglobalcolor{\dododefinecolor\doglobal\setgvalue\setxvalue1} \def\dodefinenamedcolor {\dododefinecolor\doglobal\setvalue \setevalue0} \let\colorlist\empty % not really used, only for colo-run \setfalse\collectcolorsinlist \def\collectcolorinlist#1{\doglobal\addtocommalist{#1}\colorlist} \def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value {\ifconditional\collectcolorsinlist\collectcolorinlist{#5}\fi \doifassignmentelse{#6} {\@@resetcolorparameters \getparameters[\??cl @@][#6]% \ifx\@@cl@@h\empty \doifelse{\@@cl@@r\@@cl@@g\@@cl@@b}{\@@cl@@z\@@cl@@z\@@cl@@z} {\doifelse{\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k}{\@@cl@@z\@@cl@@z\@@cl@@z\@@cl@@z} {\doifelse\@@cl@@s\@@cl@@z {\showmessage\m!colors8{{[#6]},#5}% #3{\??cr#5}{\colorZpattern}} {#3{\??cr#5}{\colorSpattern}}} {#3{\??cr#5}{\colorCpattern}}} {#3{\??cr#5}{\colorRpattern}}% \else \setxvalue{\??cr#5}{\colorHpattern}% \fi % new: e=external spot color name \ifx\@@cl@@e\empty \else \doregisterspotcolorname{#5}\@@cl@@e \fi} {\doifelsenothing\currentpalet \donefalse {\doifdefinedelse{\??cr\currentpalet#6}\donetrue\donefalse}% \ifdone \doifnot{#5}{#6} {#2{\??cr#5}{\paletcolorspec{#6}}}% \else \doifdefinedelse{\??cr#6} {\doifelse{#5}{#6} {% this way we can freeze \definecolor[somecolor][somecolor] % and still prevent cyclic definitions \iffreezecolors#3{\??cr#5}{\csname\??cr#6\endcsname}\fi} {\iffreezecolors\@EA#3\else\@EA#2\fi{\??cr#5}{\csname\??cr#6\endcsname}}} {\showmessage\m!colors3{#5 (def)}}% \fi}% \ifcase#4\or \unexpanded#2{#5}{\switchtocolor[#5]}% \unexpanded toegevoegd \fi} \def\paletcolorspec#1% {\csname\??cr\currentpalet#1\endcsname} %D Hex color support is not enabled by default. You need to say \type %D {\setupcolor [hex]} to get this working. \ifx\colorHpattern\undefined \let\colorHpattern\colorZpattern \fi %D New and experimental. \def\dodefinespotcolor[#1][#2][#3]% todo: always global {\doifnot{#1}{#2} {\@@resetcolorparameters \ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi \edef\@@cl@@n{#2}% \getparameters[\??cl @@][#3]% \doifnothing\@@cl@@p{\let\@@cl@@p\!!plusone}% \ifx\@@cl@@e\empty \else \doregisterspotcolorname{#2}\@@cl@@e \fi \doglobal\addtocommalist{#2}\allspotcolors \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue \setgvalue{#1}{\switchtocolor[#1]}}} % was \setvalue \def\registerusedspotcolors {\ifx\allspotcolors\empty \else \bgroup \let\usedspotcolors\empty \def\docommand##1% {\doifdefined{\??cs##1}{\addtocommalist{##1}\usedspotcolors}}% \processcommacommand[\allspotcolors]\docommand \savecurrentvalue\usedspotcolors\usedspotcolors \egroup \fi} \def\registerusedcolorchannels {\bgroup \doifdefinedelse{\??cs c} {\def\usedcolorchannels{c,m,y,k}}% {\let\usedcolorchannels\empty}% \doifdefined{\??cs r} {\addtocommalist{r,g,b}\usedcolorchannels}% \doifdefined{\??cs s} {\ExpandBothAfter\doifnotinset{k}\usedcolorchannels {\addtocommalist{s}\usedcolorchannels}}% \savecurrentvalue\usedcolorchannels\usedcolorchannels \egroup} \prependtoks \registerusedspotcolors \registerusedcolorchannels \to \everylastshipout \def\registerusedspotcolor#1% {\global\@EA\chardef\csname\??cs#1\endcsname\zerocount} %D On top of spotcolors, we define multitone colors. You'd better know %D what you're doing because invalid definitions will lead to invalid %D documents (i.e.\ resources). % \definecolor [darkblue] [c=.5,m=.5] % \definecolor [darkyellow] [y=.5] % % \definemultitonecolor [whatever] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25] [a=1,t=.5] % \definemultitonecolor [another] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25] \def\dodefinemultitonecolor[#1][#2][#3][#4]% {\let\@@cl@@cl@@D\empty % n's \let\@@cl@@cl@@P\empty % p's \let\@@cl@@cl@@N\empty % name \scratchcounter\zerocount \processcommacommand[#2]\dododefinemultitonecolor \bgroup \lccode`\.=`\_% \lccode`\,=`\_% \lccode`\:=`\_% \lccode`\;=`\_% \lccode`\+=`\_% \lccode`\-=`\_% \lccode`\*=`\_% \lccode`\/=`\_% % \lccode`\_=`\_% % not needed, other attribute in driver: % % \@@resetcolorparameters % \getparameters[#4]% % \ifx\@@cl@@t\@@cl@@z\else % \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@t_\@@cl@@a}% % \fi \lowercase\@EA{\@EA\xdef\@EA\@@cleancolor\@EA{\@@cl@@cl@@N}}% \egroup \setxvalue{\??cl\@@cleancolor\s!check}{\noexpand\docheckmultitonecolor{\@@cl@@cl@@D}}% \expanded{\defineglobalcolor[\@@cleancolor][#3,#4]}% \expanded{\definespotcolor[#1][\@@cleancolor][#4,f=\the\scratchcounter,p={\@@cl@@cl@@P},d={\@@cl@@cl@@D}]}} \def\docheckmultitonecolor#1% {\flushatshipout {\let\checkmultitonecolor\gobbleoneargument \def\docommand##1{\hbox{\definecolor[\s!dummy-100][##1][p=1]\color[\s!dummy-100]}}% \processcommalist[#1]\docommand}} \def\checkmultitonecolor#1% {\csname\??cl#1\s!check\endcsname\letgvalue{\??cl#1\s!check}\relax} \def\dodefinespotcolor[#1][#2][#3]% todo: always global (REDEFINED) {\doifnot{#1}{#2} {\@@resetcolorparameters \ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi \edef\@@cl@@n{#2}% \getparameters[\??cl @@][#3]% \doifnothing \@@cl@@p{\let\@@cl@@p\!!plusone}% \doifsomething\@@cl@@e{\doregisterspotcolorname{#2}\@@cl@@e}% \doglobal\addtocommalist{#2}\allspotcolors \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue \setgvalue{#1}{\switchtocolor[#1]}}}% was \setvalue \def\dododefinemultitonecolor#1% {\advance\scratchcounter\plusone \splitstring#1\at=\to\!!stringa\and\!!stringb \ifx\@@cl@@cl@@D\empty \let\@@cl@@cl@@D\!!stringa \let\@@cl@@cl@@P\!!stringb \normalizecolor\!!stringb \edef\@@cl@@cl@@N{\!!stringa_\!!stringb}% \else \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\!!stringa}% \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\!!stringb}% \normalizecolor\!!stringb \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\!!stringa_\!!stringb}% \fi} % \def\dododefinemultitonecolor#1% a/b safe % {\advance\scratchcounter\plusone % \splitstring#1\at=\to\@@cl@@one\and\@@cl@@two % \ifx\@@cl@@cl@@D\empty % \let\@@cl@@cl@@D\@@cl@@one % \let\@@cl@@cl@@P\@@cl@@two % \normalizecolor\@@cl@@two % \edef\@@cl@@cl@@N{\@@cl@@one_\@@cl@@two}% % \else % \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\@@cl@@one}% % \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\@@cl@@two}% % \normalizecolor\@@cl@@two % \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@one_\@@cl@@two}% % \fi} %D The names of colors are stored in a comma separated list %D only for the purpose of showing them with \type {\showcolor}. %D %D \startbuffer %D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05] %D \stopbuffer %D %D \typebuffer %D \getbuffer %D %D This color shows up as \color [SomeKindOfRed] {some kind %D of red}. %D %D \starttyping %D \setupcolors[state=start] %D %D \definecolor[mygreen][green] %D \definecolor[green][g=.5] %D %D \startcolor[mygreen]test\stopcolor %D %D \setupcolors[expansion=no] %D %D \definecolor[mygreen][green] %D \definecolor[green][g=.5] %D %D \startcolor[mygreen]test\stopcolor %D \stoptyping %D \macros %D {startcolormode,stopcolormode,permitcolormode} %D %D We use \type{\stopcolormode} to reset the color in %D whatever color space and do so by calling the corresponding %D special. Both commands can be used for fast color %D switching, like in colored verbatim, \newif\ifpermitcolormode \permitcolormodetrue \def\dowithcolor#1#2% #1=\action #2=color {\ifincolor\ifpermitcolormode \ifcsname\??cr\currentpalet#2\endcsname \handlecolorwith#1\csname\??cr\currentpalet#2\endcsname\od \else\ifcsname\??cr#2\endcsname \handlecolorwith#1\csname\??cr#2\endcsname\od \fi\fi \fi\fi} \def\startcolormode % includes \ifincolor\ifpermitcolormode {%\dostoptransparency % needed for: {test \trans test \notrans test} \conditionalstoptransparency \dowithcolor\execcolorRCSP} \def\stopcolormode {\ifincolor\ifpermitcolormode \supportedstoptransparency \dostopcolormode \fi\fi} \def\restorecolormode {\ifincolor\ifpermitcolormode \supportedstoptransparency \dostopcolormode \ifx\maintextcolor\empty \else \startcolormode\maintextcolor \fi \fi\fi} %D Color modes are entered using the next set of commands. %D The \type{\stop} alternatives are implemented in a way %D that permits non||grouped use. %D %D The, for this module redundant, check if we are in color %D mode is needed when we use these macros in other modules. \def\execcolorRCSP#1:% {\csname execcolor#1\endcsname} \def\execcolorR {\iffilterspotcolor \@EA\noexeccolorR \else \@EA\doexeccolorR \fi} \def\execcolorC {\iffilterspotcolor \@EA\noexeccolorC \else \@EA\doexeccolorC \fi} \def\execcolorS {\iffilterspotcolor \@EA\noexeccolorS \else \@EA\doexeccolorS \fi} \def\execcolorP {\iffilterspotcolor \@EA\doexeccolorPP \else\ifcase\currentcolorchannel \@EAEAEA\doexeccolorP \else \@EAEAEA\noexeccolorP \fi\fi} \def\doexeccolorR#1:#2:#3:% {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}% \ifpreferGRAY\ifx\@@cl@@r\@@cr@@g\ifx\@@cl@@r\@@cl@@b \GRAYpreferedtrue \fi\fi\fi \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi \ifGRAYprefered \registercolorchannel\c!s \let\@@cl@@s\@@cl@@r \normalizeGRAY \doexeccolorgray \else\ifRGBsupported \registercolorchannel\c!r \normalizeRGB \doexeccolorrgb \else\ifCMYKsupported \registercolorchannel\c!c \convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b \normalizeCMYK \doexeccolorcmyk \else \registercolorchannel\c!s \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b \normalizeGRAY \doexeccolorgray \fi\fi\fi \exectransparency} \def\doexeccolorC#1:#2:#3:#4:% {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}% \ifpreferGRAY\ifx\@@cl@@k\@@cl@@z\ifx\@@cl@@c\@@cr@@m\ifx\@@cl@@c\@@cl@@y \GRAYpreferedtrue \fi\fi\fi\fi \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi \ifGRAYprefered \registercolorchannel\c!s \let\@@cl@@s\@@cl@@c \normalizeGRAY \doexeccolorgray \else\ifCMYKsupported \registercolorchannel\c!c \ifreduceCMYK \convertCMYKtoCMY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \fi \normalizeCMYK \doexeccolorcmyk \else\ifRGBsupported \registercolorchannel\c!r \convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \normalizeRGB \doexeccolorrgb \else \registercolorchannel\c!s \convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \normalizeGRAY \doexeccolorgray \fi\fi\fi \exectransparency} \def\doexeccolorS#1:% {\edef\@@cl@@s{#1}% \registercolorchannel\c!s \normalizeGRAY \doexeccolorgray \exectransparency} % \def\doexeccolorP#1:#2:% % {\edef\@@cl@@n{#1}% % \edef\@@cl@@p{#2}% % \registerusedspotcolor\@@cl@@n % \ifSPOTsupported % \dowithcolor\registerspotcolor\@@cl@@n % \dostartspotcolormode\@@cl@@n\@@cl@@p % \else % \doingspotcolortrue % \let\spotcolorfactor\@@cl@@p % \factorizecolortrue % using counter and array % \dowithcolor\execcolorRCSP\@@cl@@n % \factorizecolorfalse % \let\spotcolorfactor\@@cl@@o % \doingspotcolorfalse % \fi % \exectransparency} \def\doexeccolorP#1:#2:#3:#4:% {\edef\@@cl@@n{#1}% name \edef\@@cl@@f{#2}% fractions \edef\@@cl@@d{#3}% definitions \edef\@@cl@@p{#4}% \ifx\@@cl@@d\empty \let\@@cl@@d\@@cl@@n \fi \registerusedspotcolor\@@cl@@n \ifSPOTsupported \checkmultitonecolor\@@cl@@n \dowithcolor\registerspotcolor\@@cl@@n \dostartspotcolormode\@@cl@@n\@@cl@@p \else \doingspotcolortrue \normalizespotcolor\@@cl@@p \let\spotcolorfactor\@@cl@@p \factorizecolortrue % using counter and array \dowithcolor\execcolorRCSP\@@cl@@n \factorizecolorfalse \let\spotcolorfactor\@@cl@@o \doingspotcolorfalse \fi \exectransparency} \def\doexeccolorPindex#1:#2:#3:#4:% {\edef\@@cl@@n{#1}% \edef\@@cl@@f{#2}% \edef\@@cl@@d{#3}% \edef\@@cl@@p{#4}% \ifx\@@cl@@d\empty \let\@@cl@@d\@@cl@@n \fi \ifSPOTsupported \checkmultitonecolor\@@cl@@n \dowithcolor\registerindexcolor\@@cl@@n \fi \noexectransparency} \def\doexeccolorPP#1:#2:% {\edef\@@cl@@n{#1}% \edef\@@cl@@p{#2}% \registerusedspotcolor\@@cl@@n \ifx\@@cl@@n\currentspotcolor \normalizeSPOT \dostartgraycolormode\@@cl@@p % was spotcolormode \else \dovidecolor\@@cl@@p\@@cl@@o \fi \exectransparency} \def\doexeccolorrgb {\ifcase\currentcolorchannel \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b \or \or \or \or \or \dostartgraycolormode\@@cl@@r \or \dostartgraycolormode\@@cl@@g \or \dostartgraycolormode\@@cl@@b \fi} \def\doexeccolorcmyk {\ifcase\currentcolorchannel \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k \or \negatecolorcomponent\@@cl@@c\dostartgraycolormode\@@cl@@c \or \negatecolorcomponent\@@cl@@m\dostartgraycolormode\@@cl@@m \or \negatecolorcomponent\@@cl@@y\dostartgraycolormode\@@cl@@y \or \negatecolorcomponent\@@cl@@k\dostartgraycolormode\@@cl@@k \fi} \def\doexeccolorgray {\ifcase\currentcolorchannel \dostartgraycolormode\@@cl@@s \or \or \or \or \dostartgraycolormode\@@cl@@s \or \or \or \or \dostartgraycolormode\@@cl@@s \fi} %D When filtering colors, we need to either erase %D the background, or ignore the foreground. % \newif\ifhidesplitcolor \hidesplitcolortrue % % \def\noexeccolor#1\od % {\dostartgraycolormode\@@cl@@o} % % \let\noexeccolorS\noexeccolor % \let\noexeccolorP\noexeccolor %D Well, here comes some real trickery. When we have the 100\% %D spot color or black color, we don't want to erase the %D background. So, instead we hide the content by giving it %D zero transparency. % todo : #1#2#3 met #2 > of < and #3 een threshold \def\dohidecolor#1#2% {\ifhidesplitcolor \ifx#1#2% \dostartgraycolormode\@@cl@@o \else \doregisternonecolor \dostartnonecolormode \fi \else \dostartgraycolormode\@@cl@@o \fi} \def\dovidecolor#1#2% {\ifhidesplitcolor \ifx#1#2% \doregisternonecolor \dostartnonecolormode \else \dostartgraycolormode\@@cl@@o \fi \else \dostartgraycolormode\@@cl@@o \fi} % \def\fullytransparentcolor % fails on floats % {\dostartgraycolormode\@@cl@@o % better than z % %\global\@EA\chardef\csname\@@currenttransparent\endcsname\plusone % %\global\intransparenttrue % \dostarttransparency10} \def\noexeccolorR#1:#2:#3:#4\od {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}% \dohidecolor\@@cl@@s\@@cl@@o} \def\noexeccolorC#1:#2:#3:#4:#5\od {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}% \dohidecolor\@@cl@@s\@@cl@@o} \def\noexeccolorS#1:#2\od {\edef\@@cl@@s{#1}% \dohidecolor\@@cl@@s\@@cl@@o} \def\noexeccolorP#1:#2:#3:#4:#5\od {\edef\@@cl@@p{#4}% \dohidecolor\@@cl@@p\@@cl@@z} %D For the sake of postprocessing (i.e.\ color separation) %D we can normalize colors, which comes down to giving equal %D values an equal accuracy and format. This feature is %D turned off by default due to a speed penalty. This macro %D also handles spot color percentages. \newif\iffactorizecolor \newif\ifnormalizecolor \def\spotcolorfactor{1} % \def\normalizecolor#1% % {\colordimen#1\thousandpoint % \colordimen\spotcolorfactor\colordimen % \colorcount\colordimen % \advance\colorcount \medcard % \divide\colorcount \maxcard % \edef#1{\realcolorvalue\colorcount}} \def\normalizecolor#1% {\colorcount\numexpr(\dimexpr\spotcolorfactor\dimexpr#1\thousandpoint\relax\relax+\medcard)/\maxcard\relax \edef#1{\realcolorvalue\colorcount}} % \def\normalizespotcolor#1% % {\colordimen-#1\thousandpoint % \advance\colordimen\thousandpoint % \colorcount\colordimen % \advance\colorcount \medcard % \divide\colorcount \maxcard % \edef#1{\realcolorvalue\colorcount}} \def\normalizespotcolor#1% {\colorcount\numexpr(\dimexpr\thousandpoint-#1\thousandpoint\relax+\medcard)/\maxcard\relax \edef#1{\realcolorvalue\colorcount}} \def\donormalizeRGB {\normalizecolor\@@cl@@r \normalizecolor\@@cl@@g \normalizecolor\@@cl@@b} \def\normalizeRGB {\ifnormalizecolor \donormalizeRGB \else\iffactorizecolor \donormalizeRGB \fi\fi} \def\donormalizeCMYK {\normalizecolor\@@cl@@c \normalizecolor\@@cl@@m \normalizecolor\@@cl@@y \normalizecolor\@@cl@@k} \def\normalizeCMYK {\ifnormalizecolor \donormalizeCMYK \else\iffactorizecolor \donormalizeCMYK \fi\fi} \def\donormalizeGRAY {\normalizecolor\@@cl@@s} \def\normalizeGRAY {\ifnormalizecolor \donormalizeGRAY \else\iffactorizecolor \donormalizeGRAY \fi\fi} \def\normalizeSPOT {\normalizespotcolor\@@cl@@p} %D We need to register spot colors (i.e.\ resources need to %D be created. \def\registerspotcolor#1:% {\ifcsname\??cl:\c!p:\@@cl@@n\endcsname \@EA\dontregisterspotcolor \else \letgvalue{\??cl:\c!p:\@@cl@@n}\empty %\@EA\@EA\csname registerspotcolor#1\endcsname \csname registerspotcolor#1\@EA\endcsname \fi} % todo: convert to rgb if needed, will will do this in mkiv \def\dontregisterspotcolor #1\od{} \def\registerspotcolorR #1:#2:#3:#4\od{\doregisterrgbspotcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}} \def\registerspotcolorC#1:#2:#3:#4:#5\od{\doregistercmykspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}} \def\registerspotcolorS #1:#2\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}} \def\registerspotcolorP #1:#2:#3\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}} %D Experimental feature: % \definecolor [darkblue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m % \definecolor [darkyellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m % % \definecolor [darkblue-50] [darkblue] [p=.5] % \definecolor [darkyellow-50] [darkyellow] [p=.5] % \definecolor [darkblue-80] [darkblue] [p=.8] % \definecolor [darkyellow-80] [darkyellow] [p=.8] % % \definecolor [darkblue,darkyellow] [r=.8] % \definecolor [darkdull-5030] [darkblue,darkyellow] [p={.5,.3}] % % \setupcolors[state=start] % % \blackrule[width=4cm,height=3cm,color=darkblue-50] % \blackrule[width=4cm,height=3cm,color=darkblue-80] % \blackrule[width=4cm,height=3cm,color=darkyellow-50] % \blackrule[width=4cm,height=3cm,color=darkyellow-80] % \blackrule[width=4cm,height=3cm,color=darkdull-5030] %D Experimental too (special purpose code). \def\registerindexcolor#1:% {\ifcsname\??cl:i:\@@cl@@n\endcsname \@EA\dontregisterindexcolor \else \letgvalue{\??cl:i:\@@cl@@n}\empty % signal \showmessage\m!colors{12}\@@cl@@n \@EA\@EA\csname registerindexcolor#1\endcsname \fi} \let\dontregisterindexcolor\dontregisterspotcolor \def\registerindexcolorR #1:#2:#3:#4\od{\doregisterrgbindexcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}} \def\registerindexcolorC#1:#2:#3:#4:#5\od{\doregistercmykindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}} \def\registerindexcolorS #1:#2\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}} \def\registerindexcolorP #1:#2:#3\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}} \def\predefinecolor[#1]% {\bgroup \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones \egroup} \def\predefineindexcolor[#1]% {\bgroup \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones \let\doexeccolorP\doexeccolorPindex \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% index one \egroup} % \def\checkpredefinedcolor[#1]% % {\ifcase\internalspotcolorsize{#1}\relax % \@EA\predefinecolor\or\@EA\predefinecolor\else\@EA\predefineindexcolor % \fi[#1]} \let\checkpredefinedcolor\predefineindexcolor % we need an index in order to negate bitmaps %D Transparency is handled similar for all three color modes. We %D can turn transparency off with the following switch: \newif\iftransparencysupported \transparencysupportedtrue % only mkii \def\exectransparency {\iftransparencysupported \expandafter\doexectransparency \else \expandafter\noexectransparency \fi} \def\doexectransparency#1:#2\od {\ifcase#1\space \global\intransparentfalse \else \global\intransparentfalse %\dostarttransparency{#1}{#2}% \supportedstarttransparency{#1}{#2}% \global\intransparenttrue \fi} \def\noexectransparency#1\od {} %D Experimental: minimize transparency resets. \newif\ifintransparent \newif\ifoptimizetransparency \optimizetransparencytrue % under test \let\supportedstoptransparency\relax \def\conditionalstoptransparency {\ifoptimizetransparency \ifintransparent \global\intransparentfalse \supportedstoptransparency \fi \else \supportedstoptransparency \fi} \def\supportedstarttransparency {\iftransparencysupported \globallet\supportedstoptransparency\dostoptransparency \expandafter\dostarttransparency \else \expandafter\gobbletwoarguments \fi} %D We now use the \type {\@@cl@@A} hook to implement %D symbolic names. These are converted into numbers %D at definition time (which saves runtime). \def\dodefinetransparency[#1][#2]% {\@EA\chardef\csname\??cl-#1\endcsname#2\relax} \def\transparencynumber#1% {\number\executeifdefined{\??cl-#1}{#1}} %D Now we hook 'm into the patterns: \def\@@cl@@A{\transparencynumber\@@cl@@a} %D The next macro can be used to return to the (normal) %D page color. This macro is used in the same way as %D \type {\color}. \def\startregistercolor[#1]% {\permitcolormodefalse\startcolor[#1]\permitcolormodetrue} \def\stopregistercolor {\permitcolormodefalse\stopcolor\permitcolormodetrue} \def\starttextcolor[#1]% {\doifsomething{#1} {\bgroup \def\stoptextcolor % also goes ok with \page after {\let\maintextcolor\empty % this one because the top of \stopregistercolor % page sets the color right (side \egroup}% % effect) \def\starttextcolor[##1]% {\bgroup % \@@themaintextcolor==##1 is catched in \definecolor \definecolor[\@@themaintextcolor][##1]% \let\stoptextcolor\egroup}% \startregistercolor[\@@themaintextcolor]% \definecolor[\@@themaintextcolor][#1]% \let\maintextcolor\@@themaintextcolor}} \let\stoptextcolor\relax %D The following hook permits proper support at the text %D level. This definition actually belongs in another %D module. (May need a different \MKIV\ implementation.) % \ifx\initializemaintextcolor\undefined \let\@@clprevcolor\empty \def\initializemaintextcolor {% saveguard for setting text color to empty after % it has been set \doifnothing\@@cltextcolor {\ifx\@@clprevcolor\empty\else \let\@@cltextcolor\defaulttextcolor \fi}% \doifelsenothing\@@cltextcolor {\let\maintextcolor\empty} {\edef\@@clprevcolor{\@@cltextcolor}% \let\maintextcolor\@@themaintextcolor \doifelsenothing\@@cltextcolor % another saveguard {\definecolor[\@@themaintextcolor][\defaulttextcolor]}% {\definecolor[\@@themaintextcolor][\@@cltextcolor]}% \doinitializemaintextcolor}} \def\doinitializemaintextcolor {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext \appendtoks\stoptextcolor \to\everystoptext \let\doinitializemaintextcolor\relax} % \fi \def\localstarttextcolor {\ifx\maintextcolor\empty \startcolormode\defaulttextcolor \else \startcolormode\maintextcolor \fi} % \def\localstoptextcolor % {\stopcolormode} % % better: \def\localstoptextcolor {\restorecolormode} \def\restoretextcolor {\ifx\maintextcolor\empty \expandafter\dorestoretextcolor \else % obey main text color \fi} \def\dorestoretextcolor {\color[\defaulttextcolor]} %D We use some reserved names for local color components. %D Consistent use of these scratch variables saves us %D unneccessary hash entries. %D %D \starttyping %D \@@cl@@r \@@cl@@g \@@cl@@b %D \@@cl@@c \@@cl@@m \@@cl@@y \@@cl@@k %D \@@cl@@s %D \stoptyping %D %D We implement several conversion routines. %D %D \starttyping %D \convertRGBtoCMYK {r} {g} {b} %D \convertRGBtoGRAY {r} {g} {b} %D \convertCMYKtoRGB {c} {m} {y} {k} %D \convertCMYKtoGRAY {c} {m} {y} {k} %D \convertCMYKtoCMY {c} {m} {y} {k} %D \stoptyping %D %D The relation between \cap{Gray}, \cap{RGB} and \cap{CMYK} %D is: %D %D \placeformula[-] %D \startformula %D G = .30r + .59g + .11b %D = 1.0 - \min(1.0,\ .30c + .59m + .11y + k) %D \stopformula %D %D When converting from \cap{CMYK} to \cap{RGB} we use the %D formula: %D %D \placeformula[-] %D \startformula %D \eqalign %D {r &= 1.0 - \min(1.0,\ c+k) \cr %D g &= 1.0 - \min(1.0,\ m+k) \cr %D b &= 1.0 - \min(1.0,\ y+k)} %D \stopformula %D %D In the conversion routine the color components are calculated %D in three digits precision. \def\realcolorvalue#1% {\ifnum#1>\zerocount % important, first encountered in --modu supp-mpe \ifnum#1<\plusten 0.00\the#1\else \ifnum#1<\plushundred 0.0\the#1\else \ifnum#1<\plusthousand 0.\the#1\else 1\fi\fi\fi \else 0\fi} % \def\doconvertCMYKtoRGB#1\k#2\to#3% % {\ifdim#2\points>#1\points% >= problem, repaired 2/12/2002 % \let#3\@@cl@@z % k >= color % \else % \colordimen\onepoint % \advance\colordimen -#1\points % \advance\colordimen -#2\points % \multiply\colordimen \plusthousand % \colorcount\colordimen % \advance\colorcount \medcard % \divide\colorcount \maxcard % \edef#3{\realcolorvalue\colorcount}% % \fi} \def\doconvertCMYKtoRGB#1\k#2\to#3% {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr\onepoint-#1\points-#2\points\relax\relax+\medcard)/\maxcard\relax \ifnum\colorcount>\zeropoint \edef#3{\realcolorvalue\colorcount}% \else \let#3\@@cl@@z \fi} \def\convertCMYKtoRGB#1#2#3#4% {\doconvertCMYKtoRGB#1\k#4\to\@@cl@@r \doconvertCMYKtoRGB#2\k#4\to\@@cl@@g \doconvertCMYKtoRGB#3\k#4\to\@@cl@@b} % \def\doconvertRGBtoCMYK#1\to#2% % {\colordimen#1\points % \multiply\colordimen \plusthousand % \colorcount\colordimen % \advance\colorcount \medcard % \divide\colorcount \maxcard % \colorcount-\colorcount % \advance\colorcount \plusthousand % \edef#2{\realcolorvalue\colorcount}} \def\doconvertRGBtoCMYK#1\to#2% {\colorcount\numexpr\plusthousand-(\dimexpr\plusthousand\dimexpr#1\points\relax\relax+\medcard)/\maxcard\relax \edef#2{\realcolorvalue\colorcount}} \def\convertRGBtoCMYK#1#2#3% {\doconvertRGBtoCMYK#1\to\@@cl@@c \doconvertRGBtoCMYK#2\to\@@cl@@m \doconvertRGBtoCMYK#3\to\@@cl@@y \let\@@cl@@k\@@cl@@z} %D The following switch is mainly meant for (hidden) %D documentation purposes. \def\nGRAYfactor{333.333} \def\rGRAYfactor{\ifweightGRAY300\else\nGRAYfactor\fi} \def\gGRAYfactor{\ifweightGRAY590\else\nGRAYfactor\fi} \def\bGRAYfactor{\ifweightGRAY110\else\nGRAYfactor\fi} % \def\convertRGBtoGRAY#1#2#3% % {\colordimen#1\points % \colordimen\rGRAYfactor\colordimen % \colorcount\colordimen % \colordimen#2\points % \colordimen\gGRAYfactor\colordimen % \advance\colorcount \colordimen % \colordimen#3\points % \colordimen\bGRAYfactor\colordimen % \advance\colorcount \colordimen % \advance\colorcount \medcard % \divide\colorcount \maxcard % \edef\@@cl@@s{\realcolorvalue\colorcount}} \def\convertRGBtoGRAY#1#2#3% {\colorcount\numexpr (\dimexpr\rGRAYfactor\dimexpr#1\points\relax\relax+ \dimexpr\gGRAYfactor\dimexpr#2\points\relax\relax+ \dimexpr\bGRAYfactor\dimexpr#3\points\relax\relax+ \medcard)/\maxcard \relax \edef\@@cl@@s{\realcolorvalue\colorcount}} \def\convertCMYKtoGRAY#1#2#3#4% {\convertCMYKtoRGB{#1}{#2}{#3}{#4}% \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b} % \def\doconvertCMYKtoCMY#1\k#2\to#3% % {\colordimen#1\points % \advance\colordimen #2\points\relax % \ifdim\colordimen>\onepoint % \colordimen\onepoint % %\else % % \colordimen\colordimen % \fi % \multiply\colordimen \plusthousand % \colorcount\colordimen % \advance\colorcount \medcard % \divide\colorcount \maxcard % \edef#3{\realcolorvalue\colorcount}} \def\doconvertCMYKtoCMY#1\k#2\to#3% {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr#1\points+#2\points\relax\relax+\medcard)/\maxcard\relax \ifnum\colorcount>\plusthousand \let#3\@@cl@@o \else \edef#3{\realcolorvalue\colorcount}% \fi} \def\convertCMYKtoCMY#1#2#3#4% {\doconvertCMYKtoCMY#1\k#4\to\@@cl@@c \doconvertCMYKtoCMY#2\k#4\to\@@cl@@m \doconvertCMYKtoCMY#3\k#4\to\@@cl@@y \let\@@cl@@k\@@cl@@z} %D Before we present the color macros, we first define the %D setup command. This command takes care of setting up the %D booleans that control local and global behavior (more on %D that later) and conversion to other color spaces. \let\currentspotcolor \empty \let\previousspotcolor\empty %D The tests depend on the use of constants. If we use the \MKIV\ %D method we can share more. \def\doifcolorelse#1% {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifcolor#1% {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} %D There are a couple of different color switching macros, %D the local ones can be used to speed up things (only in \MKII). \def\localstartcolor {\ifincolor \localcolortrue \expandafter\doglobalstartcolor \else \expandafter\noglobalstartcolor \fi} \def\localstopcolor {\ifincolor \doglobalstopcolor \else \noglobalstopcolor \fi} \unexpanded\def\startcolor {\ifincolor \expandafter\doglobalstartcolor \else \expandafter\noglobalstartcolor \fi} \unexpanded\def\stopcolor {\ifincolor \doglobalstopcolor \else \noglobalstopcolor \fi} %D This macros call the global color switching ones. Starting %D a global, i.e. a possible page boundary crossing, color %D mode also sets a \type{\mark} in \TEX's internal list. \newcount\colorlevel \letvalue{\??cl0C}\empty % saved color \letvalue{\??cl0S}\empty % stop command %D We keep a positive color stack for foreground colors, and %D a negative one for backgrounds. Not that brilliant a %D solution, but it suits. The signs are swapped when the %D page ornaments are typeset. \let\@@colorplus \plusone \let\@@colorminus\minusone \def\@@currentcolorname {\??cl\the\colorlevel C} \def\@@currentcolorstop {\??cl\the\colorlevel S} %def\@@currenttransparent{\??cl\the\colorlevel T} \letvalue{\??cl*\s!black}\s!black \def\currentcolorname {\csname \ifcsname\@@currentcolorname\endcsname \expandafter\ifx\csname\@@currentcolorname\endcsname\empty \??cl*\s!black \else \@@currentcolorname \fi \else \??cl*\s!black \fi \endcsname} \def\outercolorname {\ifcsname\@@currentcolorname\endcsname \expandafter\ifx\csname\@@currentcolorname\endcsname\empty \s!black \else currentcolor% \fi \else \s!black \fi} % not the following, because we need a different tag in order to trick the stack % % \def\outercolorname{\executeifdefined\@@currentcolorname\s!black} % % \def\startcurrentcolor{\expanded{\startcolor[\s!black]\noexpand\startcolor[\outercolorname]}} % \def\stopcurrentcolor {\stopcolor\stopcolor} % % test case: % % \setupcolors[state=start,textcolor=red] % \starttext % red % \color[green]{green % \startMPcode % label(\sometxt{green\color[blue]{blue}green}, origin) withcolor red; % draw fullcircle scaled 1cm xscaled 2; % \stopMPcode % green} % red % \stoptext \def\dodoglobalstartcolor {\global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname \global\advance\colorlevel \@@colorplus \global\@EA\let\csname\@@currentcolorname\endcsname\@@askedcolor %\debuggerinfo\m!colors % {start \@@askedcolor\space at level \the\colorlevel}% \ifx\@@askedcolor\empty \global\@EA\let\csname\@@currentcolorname\endcsname\@@currentcolor \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor \else\ifx\@@askedcolor\@@currentcolor \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor \else \doifcolorelse\@@askedcolor {%\docolormark\@@askedcolor \ifpermitcolormode\docolormark\@@askedcolor\fi \global\@EA\let\csname\@@currentcolorstop\endcsname\dodoglobalstopcolor \startcolormode\@@askedcolor} {\global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor \showmessage\m!colors3\@@askedcolor\empty}% \fi\fi} \def\doglobalstartcolor[#1]% {\edef\@@askedcolor{#1}% \ifcase\colorlevel\relax \ifx\@@askedcolor\empty \global\@EA\let\csname\@@currentcolorstop\endcsname\empty \else \dodoglobalstartcolor \fi \else \dodoglobalstartcolor \fi \ignorespaces} \def\noglobalstartcolor[#1]% {} \def\dodoglobalstopcolor {\ifcase\colorlevel \else \donoglobalstopcolor \global\@EA\let\@EA\@@previouscolor\csname\@@currentcolorname\endcsname \ifcase\colorlevel\relax \ifpermitcolormode \docolormark\empty \conditionalstoptransparency \dostopcolormode \fi \else % let's do a bit redundant testing here \docolormark\@@previouscolor \ifx\@@previouscolor\empty \ifpermitcolormode \conditionalstoptransparency \dostopcolormode \fi \else \doifcolorelse\@@previouscolor {\ifx\@@currentcolor\@@previouscolor\else % alternatively we could let \startcolormode handle this \ifpermitcolormode \conditionalstoptransparency % really needed % more safe but less efficient: \dostopcolormode \fi \startcolormode\@@previouscolor \fi} {\ifpermitcolormode \conditionalstoptransparency \dostopcolormode \fi}% \fi \fi \fi} \def\donoglobalstopcolor {\ifcase\colorlevel \else \global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname %\debuggerinfo{\m!colors} % {stop \@@currentcolor\normalspace at level \the\colorlevel}% \global\advance\colorlevel \@@colorminus \fi} \def\doglobalstopcolor {\csname\@@currentcolorstop\endcsname} \let\noglobalstopcolor\relax \let\faststartcolor\doglobalstartcolor \let\faststopcolor \doglobalstopcolor %D We don't use grouping and save each stop alternative. This %D permits be especially useful in for instance local color %D support in verbatim. Using \type{\bgroup}||\type{\egroup} %D pairs could interfere with calling commands %D This color mechanism takes care of nested colors, like in: %D %D \startbuffer %D \color[green]{groen \color[green]{groen \color[red]{rood}} groen} %D \color[green]{groen \color[]{groen \color[red]{rood}} groen} %D \color[green]{groen \color[red]{rood \color[red]{rood}} groen} %D \color[green]{groen \color[green]{groen \color[]{groen}} groen} %D \color[green]{groen \color[red]{rood} groen} %D \color[green]{groen \color[]{groen} groen} %D \color[]{zwart \color[red]{rood} zwart} %D \color[]{zwart} %D \stopbuffer %D %D \typebuffer %D %D or %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D Crossing page boundaries is of course also handled. %D Undefined or empty color specifications are treated as %D efficient as possible. %D %D \startbuffer %D \startcolor[green] %D [green] \input tufte [green] \par %D \startcolor[] %D [green] \input knuth [green] \par %D \startcolor[red] %D [red] \input tufte [red] \par %D \startcolor[yellow] %D [yellow] \input knuth [yellow] \par %D \stopcolor %D [red] \input tufte [red] \par %D \stopcolor %D [green] \input knuth [green] \par %D \stopcolor %D [green] \input tufte [green] \par %D \stopcolor %D \stopbuffer %D %D \startpacked %D \getbuffer %D \stoppacked %D %D These quotes are typeset by saying: %D %D \typebuffer %D We already mentioned that colors interfere with building %D the pagebody. This means that when the page is composed, %D the colors temporary have to be reset. After the page is %D shipped out, we have to revive the current color. %D %D We use \type{\mark}s to keep track of colors across page %D boundaries. Unfortunately standard \TEX\ supports only one mark, %D and using this one for color support only would be a waste. %D We therefore use an adapted version of J.~Fox's multiple mark %D mechanism as (re|)|implemented in \module{supp-mrk}. \doifdefinedelse{rawnewmark} {\rawnewmark\colormark} {\let\colormark\gobbleoneargument} %D Using this mark mechanism with lots of colors has one %D major drawback: \TEX's memory tends to overflow when %D very colorful text is stored in a global box. Even worse is that %D the processing time grows considerably. We therefore support %D local as well as global color switching. %D %D Of the next macros, \type {\popcolor} is to be used after %D the actual \type {\shipout} and \type {\startcolorpage} and %D \type {\stopcolorpage} are called when entering and leaving %D the \type {\pagebody} builder. In case of emergencies %D \type {\pushcolor} can be used to undo the current color, %D for instance when insertions are appended to the page. %D %D Out of efficiency we only use marks when needed. The next %D macro tries to find out if indeed a mark should be set. %D This macro uses the boolean \type {\ifinpagebody}, which can %D be defined and set in the module that handles the pagebody. \def\docolormark#1% {\iflocalcolor \else \ifinpagebody \else \ifinframed \else \dodocolormark{#1}% \fi \fi \fi} \let\lastcolormark=\empty \def\dodocolormark#1% {\edef\newcolormark{#1}% \ifx\newcolormark\lastcolormark\else \global\let\lastcolormark\newcolormark \@EA\rawsetmark\@EA\colormark\@EA{\lastcolormark}% \fi} %D \macros %D {pushcolor, popcolor} %D %D Pushing the current state in the output routine simply comes %D to resetting the color to black, while popping restores the %D color state to that of before the break. \def\topofpagecolor{\rawgetbotmark\colormark} % see postponing \def\pushcolor {\stopcolormode} \def\popcolor {\doifsomething{\rawgetbotmark\colormark} {%\debuggerinfo\m!colors{popping \getbotmark\colormark}% \startcolormode{\rawgetbotmark\colormark}}} \def\popsplitcolor {\getsplitmarks\colormark % hier wel \doifsomething{\rawgetsplitbotmark\colormark} {%\debuggerinfo\m!colors{split popping \getsplitbotmark\colormark}% \startcolormode{\rawgetsplitbotmark\colormark}}} \appendtoks\pushcolor \to\everypushproperties \appendtoks\popcolor \to\everypopproperties \appendtoks\popsplitcolor\to\everypopsplitproperties % Private macro: only needed in test cases (like multiple % seperations in one file); no user command! \def\resynccolor {\ifcase\pagetotal % \ifdim\pagetotal=\zeropoint \popcolor \else\ifx\@@currentcolor\empty \ifx\maintextcolor\empty\else \startcolormode\maintextcolor \fi \else \startcolormode\@@currentcolor \fi\fi} % weird stuff \def\pushpostponedpagecolor {\edef\savedtopofpagecolor{\topofpagecolor}% \doifsomething\savedtopofpagecolor\restorecolormode} % \stopcolormode \def\poppostponedpagecolor {\doifsomething\savedtopofpagecolor\startcolormode\savedtopofpagecolor} %D \macros %D {startcolorpage, stopcolorpage} %D %D Local use can be forced with the next two macros. Nesting %D is still supported but colors are no longer marked. %D %D The next implementation makes (simple) color separation more %D easy. It also supports nested colors in page backgrounds %D and texts. \def\startcolorpage {\bgroup \let\@@colorplus \minusone \let\@@colorminus\plusone \let\docolormark\gobbleoneargument \edef\savedcolorlevel{\the\colorlevel}% \global\colorlevel\zerocount % before \localstartcolor of \ifx\maintextcolor\empty % course, ugly bug removed \localstartcolor[\defaulttextcolor]% \else \localstartcolor[\maintextcolor]% \fi} \def\stopcolorpage {\localstopcolor \global\colorlevel\savedcolorlevel \egroup} \appendtoks \startcolorpage\to\everystarttextproperties \prependtoks\stopcolorpage \to\everystoptextproperties %D We want color support to be similar to font support and %D therefore implement \type{\color} using grouping. %D %D When \type {\somecolor} is issued, we can savely assume %D grouping. Using \type {\groupedcommand} here (i.e.\ the %D definition of \type {\color}) is unsafe because in %D interferes with for instance switching attributes. \unexpanded\def\color[#1]% {\groupedcommand{\startcolor[#1]}\stopcolor} %D This implementation enables use of defined colors like: %D %D \starttyping %D Look at the {\brightgreen bright} side of life and get %D yourself no \red{red} head! %D \stoptyping %D Also wrong, test in combinations: \type{...{}{\red test}} %D %D \def\switchtocolor[#1]% %D {\startcolor[#1]\aftergroup\stopcolor} \def\switchtocolor[#1]% grouping is realy needed, else migration {\bgroup\startcolor[#1]\aftergroup\stopcolor\aftergroup\egroup} \unexpanded\def\color[#1]% {\groupedcommand{\startcolor[#1]}\stopcolor} \unexpanded\def\graycolor[#1]% not \gray because this is a color {\groupedcommand{\RGBsupportedfalse\CMYKsupportedfalse\SPOTsupportedfalse\startcolor[#1]}\stopcolor} \unexpanded\def\colored[#1]% {\groupedcommand{\definecolor[@colored@][#1]\startcolor[@colored@]}\stopcolor} %D We can speed the following macros a bit up, but this %D hardly pays off; they are only used in the manual. \def\realcolorformat#1% {\ifnum#1<\plusten 0.00\the#1\else \ifnum#1<\plushundred 0.0\the#1\else \ifnum#1<\plusthousand 0.\the#1\else 1.000\fi\fi\fi} \def\dodoformatcolor#1% {\colordimen#1\points\relax \ifdim\colordimen>\onepoint \colordimen\onepoint \fi \multiply\colordimen \plusthousand \colorcount\colordimen \advance\colorcount \medcard \divide\colorcount \maxcard \relax \realcolorformat\colorcount} \def\doformatcolorR#1:#2:#3:#4:#5\od {\dodoformatcolor{#1}\colorformatseparator \dodoformatcolor{#2}\colorformatseparator \dodoformatcolor{#3}} \def\doformatcolorC#1:#2:#3:#4:#5:#6\od {\dodoformatcolor{#1}\colorformatseparator \dodoformatcolor{#2}\colorformatseparator \dodoformatcolor{#3}\colorformatseparator \dodoformatcolor{#4}} \def\doformatcolorS#1:#2:#3\od {\dodoformatcolor{#1}} \def\doformatcolorP#1:#2:#3:#4:#5:#6\od {#1\colorformatseparator \dodoformatcolor{#2}\colorformatseparator \dodoformatcolor{#3}\colorformatseparator \dodoformatcolor{#4}\colorformatseparator} \def\doformatcolor#1:% {\csname doformatcolor#1\endcsname} \def\colorvalue {\dowithcolor\doformatcolor} \def\doformatgrayR#1:#2:#3:#4:#5\od {\convertRGBtoGRAY{#1}{#2}{#3}% \dodoformatcolor\@@cl@@s} \def\doformatgrayC#1:#2:#3:#4:#5:#6\od {\convertCMYKtoGRAY{#1}{#2}{#3}{#4}% \dodoformatcolor\@@cl@@s} \def\doformatgrayS#1:#2:#3\od {\dodoformatcolor{#1}} % \def\doformatgrayP#1:#2:#3:#4:#5:#6\od % {\convertSPOTtoGRAY{#1}{#2}{#3}{#4}% % \dodoformatcolor\@@cl@@s} \def\doformatgrayP#1:#2:#3:#4:#5:#6\od {todo} \def\doformatgray#1:% {\csname doformatgray#1\endcsname} \def\grayvalue {\dowithcolor\doformatgray} %D \macros %D {localstartraster,localstopraster, %D startraster,stopraster} %D %D The previous conversions are not linear and treat each color %D component according to human perception curves. Pure gray %D (we call them rasters) has equal color components. In %D \CONTEXT\ rasters are only used as backgrounds and these %D don't cross page boundaries in the way color does. Therefore %D we don't need stacks and marks. Just to be compatible with %D color support we offer both 'global' and 'local' commands. %D %D \starttyping %D \def\localstartraster[#1]% %D {\doifelsenothing{#1} %D {\dostartgraymode\@@rsscreen} %D {\dostartgraymode{#1}}} %D %D \def\localstopraster %D {\dostopgraymode} %D %D \let\startraster\localstartraster %D \let\stopraster \localstopraster %D \stoptyping %D %D The next alternative is slower, since it works on top of the %D color (stack) mechanism, but it does provide nesting. \def\dosetrastercolor#1% {\edef\@@cl@@s{#1}% \ifx\@@cl@@s\empty \let\@@cl@@s\@@rsscreen \fi \let\@@cl@@t\@@cl@@z % else we get rogue \let\@@cl@@a\@@cl@@z % transpancies \setevalue{\??cr\??rs}{\colorSpattern}} % beware, don't add extra grouping, else color in tables % fails \def\localstartraster[#1]% {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi} \def\startraster[#1]% {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi} \def\localstopraster{\ifincolor\localstopcolor\fi} \def\stopraster {\ifincolor\stopcolor\fi} \def\raster[#1]{\groupedcommand{\startraster[#1]}{\stopraster}} %D Palets use an auxiliary macro: \def\dodefinepaletcolor#1#2#3% {\doifassignmentelse{#3} {% == \definepalet[test][xx={y=.4}] \definecolor[\??pa#1:#2][#3]% \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr\??pa#1:#2\endcsname}} {% == \definepalet[test][xx=green] \doifdefinedelse{\??cr#3} {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr#3\endcsname}} {\letvalue{\??cr#1:#2}\colorXpattern}}} %D \MP\ related conversions: \def\scaledMPcolor#1#2% {\ifMPgraphics \handlecolorwith\doMPcolor \csname\??cr \ifcsname\??cr\currentpalet#2\endcsname\currentpalet\fi #2\endcsname :::::::\end#1\end \else #2% \fi} \def\MPcolor{\scaledMPcolor1} %D Before we had transparency available, the following %D conversion macro was available: %D %D \starttyping %D \def\doMPcolor#1:#2:#3:#4:#5:#6:#7:#8\end %D {\if #1R(#2,#3,#4)% %D \else\if#1C\ifMPcmykcolors cmyk(#2,#3,#4,#5)\else(1-#2-#5,1-#3-#5,1-#4-#5)\fi %D \else\if#1S(#2,#2,#2)% %D \else (0,0,0)% %D \fi\fi\fi} %D \stoptyping %D %D In order to be useful, this macro is to be fully %D expandabele. \def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color {\csname MPc\@EA\ifx\csname MPc\string#1\endcsname\relax B\else#1\fi\endcsname} \def\MPcR{\doMPrgb} \def\MPcC{\ifMPcmykcolors\@EA\doMPcmykY\else\@EA\doMPcmykN\fi} \def\MPcS{\doMPgray} \def\MPcP{\ifMPspotcolors\@EA\doMPspotY\else\@EA\doMPspotN\fi} \def\MPcB{\doMPblack} \def\transparentMP {transparent} \def\cmykMP {scaledcmyk} \def\cmykASrgbMP {scaledcmykasrgb} % not really needed any more \def\rgbMP {scaledrgb} \def\grayMP {scaledgray} \def\spotMP {spotcolor} \def\doMPtransparent#1#2:#3:#4\end {\ifcase#2\space(#1)\else\transparentMP(#2,#3,(#1))\fi} \def\doMPgray#1:#2\end#3\end {\doMPtransparent{\grayMP(#1,#3)}#2\end} \def\doMPrgb#1:#2:#3:#4\end#5\end {\doMPtransparent{\rgbMP(#1,#2,#3,#5)}#4\end} \def\doMPcmykY#1:#2:#3:#4:#5\end#6\end {\doMPtransparent{\cmykMP(#1,#2,#3,#4,#6)}#5\end} \def\doMPcmykN#1:#2:#3:#4:#5\end#6\end {\doMPtransparent{\cmykASrgbMP(#1,#2,#3,#4,#6)}#5\end} \def\doMPspotY#1:#2:#3:#4:#5\end#6\end % best make #3 same as #1 when empty {\doMPtransparent{multitonecolor("#1",#2,"#3","#4")}#5\end} \def\doMPspotN#1:#2:#3:#4:#5\end#6\end {\scaledMPcolor{#4}{#1}} \def\doMPblack#1\end#2\end {\unknownMPcolor} \def\unknownMPcolor {(0,0,0)} \let\processMP\spotMP % for some time, will become obsolete, brrr %D \PDF\ related conversions: \def\PDFcolor #1{\handlecolorwith\doPDFcolor \csname\??cr#1\endcsname:::::::\end} \def\PDFcolorvalue#1{\handlecolorwith\doPDFcolorvalue\csname\??cr#1\endcsname:::::::\end} \def\FDFcolor #1{\handlecolorwith\doFDFcolor \csname\??cr#1\endcsname:::::::\end} \def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end {\if #1R#2 #3 #4 rg% \else\if#1C#2 #3 #4 #5 k% \else\if#1S#2 g% \else\if#1P#5 g% \else 0 g% \fi\fi\fi\fi} \def\doPDFcolorvalue#1:#2:#3:#4:#5:#6:#7:#8\end {\if #1R#2 #3 #4% \else\if#1C#2 #3 #4 #5% \else\if#1S#2% \else\if#1P#5% \else 0% \fi\fi\fi\fi} \def\doFDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end {[\if #1R#2 #3 #4% \else\if#1C#2 #3 #4 #5% \else\if#1S#2% \else\if#1P#5% \else 0% \fi\fi\fi\fi]} \def\internalspotcolorname#1{\handlecolorwith\dointernalspotcolorname\csname\??cr#1\endcsname:::::::\end} \def\internalspotcolorsize#1{\handlecolorwith\dointernalspotcolorsize\csname\??cr#1\endcsname:::::::\end} \def\dointernalspotcolorname#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 #1\else#2\fi\else#1\fi} \def\dointernalspotcolorsize#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 0\else#3\fi\else 0\fi} %D Because it's a persitent issue, we also provide \def\pgf@context@registercolor#1% {\handlecolorwith\pgf@context@registercolor@indeed\csname\??cr#1\endcsname:::::::>#1\end} \def\pgf@context@registercolor@indeed#1:#2:#3:#4:#5:#6>#7\end {\setevalue{\string\color@#7}{\noexpand\xcolor@{}{}% \if#1R{rgb}{#2,#3,#4}\else \if#1C{cmyk}{#2,#3,#4,#5}\else \if#1S{gray}{#2}\else {gray}{0}\fi\fi\fi}} %D Slow but ok \unknown \def\colorcomponents#1% might be broken {\startnointerference \localcolortrue \globallet\thecolorcomponents\empty \def\doexeccolorR ##1:##2:##3:##4:##5\od{\gdef\thecolorcomponents{r=\twodigitrounding{##1} g=\twodigitrounding{##2} b=\twodigitrounding{##3}}}% \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{c=\twodigitrounding{##1} m=\twodigitrounding{##2} y=\twodigitrounding{##3} k=\twodigitrounding{##4}}}% \def\doexeccolorS ##1:##2:##3\od{\gdef\thecolorcomponents{s=\twodigitrounding{##1}}}% \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{p=\twodigitrounding{##4} n=##1}}% \let\doexeccolorPindex\doexeccolorP \backgroundline[#1]{}% \stopnointerference \thecolorcomponents} \def\transparencycomponents#1% {\startnointerference \localcolortrue \globallet\thetransparencycomponents\empty \def\doexeccolorR ##1:##2:##3:##4:##5\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##4} t=\twodigitrounding{##5}}}% \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}% \def\doexeccolorS ##1:##2:##3\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##2} t=\twodigitrounding{##3}}}% \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}% \let\doexeccolorPindex\doexeccolorP \backgroundline[#1]{}% \stopnointerference \thetransparencycomponents} %D \macros %D {everyshapebox} %D %D A terrible hack, needed because we cannot have marks in %D shape boxes. \appendtoks \localcolortrue \to \everyshapebox %D \macros %D {forcecolorhack} %D %D Awful \unknown \let\forcecolorhack\relax %D We default to the colors defined in \module{colo-rgb} and %D support both \cap{RGB} and \cap{CMYK} output. As you can %D see, color support is turned off by default. Reduction of %D gray colors to gray scales is turned on. \definecolor[black][s=0] \definecolor[white][s=1] \definetransparency [none] [0] \definetransparency [normal] [1] \definetransparency [multiply] [2] \definetransparency [screen] [3] \definetransparency [overlay] [4] \definetransparency [softlight] [5] \definetransparency [hardlight] [6] \definetransparency [colordodge] [7] \definetransparency [colorburn] [8] \definetransparency [darken] [9] \definetransparency [lighten] [10] \definetransparency [difference] [11] \definetransparency [exclusion] [12] \definetransparency [hue] [13] \definetransparency [saturation] [14] \definetransparency [color] [15] \definetransparency [luminosity] [16] \setupcolors [\c!state=\v!stop, \c!conversion=\v!yes, \c!reduction=\v!no, \c!rgb=\v!yes, \c!cmyk=\v!yes, \c!spot=\v!yes, \c!mp\c!cmyk=\@@clcmyk, \c!mp\c!spot=\@@clspot, \c!expansion=\v!no, \c!textcolor=, \c!split=\v!no, \c!criterium=\v!all] \setupcolor [\v!rgb] \protect \endinput ����������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-uni.mkii�������������������������������0000644�0001750�0001750�00000232004�11754241457�024322� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%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 Lindsay \& Hans Hagen}] %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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-lab.mkiv�������������������������������0000644�0001750�0001750�00000027534�12130411274�024244� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=lang-lab, %D version=1997.08.27, %D title=\CONTEXT\ Language Macros, %D subtitle=Labels, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Labels} \registerctxluafile{lang-lab}{1.001} \registerctxluafile{lang-txt}{1.001} \unprotect %D Left-overs: \ifdefined\sixperemspace \else \def\sixperemspace{\normalUchar"2006} \fi %D In this module we deal with language dependant labels and %D prefixes, like in {\em Figure~12} and {\em Chapter 1}. In %D this file we set the default values. Users can easily %D overrule these. %D %D This module is dedicated to the grandfather of Tobias %D Burnus, who's extensive languages oriented library helped us %D a lot in finding the right translations. All those labels %D are collected in files that reflect their common ancestor. %D %D Not all languages can be satisfied with the labeling %D mechanism as provided here. Chinese for instance put a label %D in front as well as after a part number. This is why the %D current implementation of labels supports two labels too. %D \macros %D {setupheadtext, setuplabeltext} %D %D First we present some macros that deal with what we will %D call head and label texts. Such texts are defines by: %D %D \showsetup{setupheadtext} %D \showsetup{setuplabeltext} %D %D A regular \CONTEXT\ stores some 1500 labels at most. %D %D These commands accept all kind of inputs: %D %D \starttyping %D \setuplabeltext [language] [labellabel=text] %D \setuplabeltext [language] [labellabel=text,labellabel=text,...] %D \setuplabeltext [labellabel=text] %D \setuplabeltext [labellabel=text,labellabel=text,...] %D \stoptyping %D %D The last two cases concern the current language. \installcorenamespace{label} \let\currentlabelcategory\empty \unexpanded\def\definelabelclass {\dodoubleempty\lang_labels_define_class} \def\lang_labels_define_class[#1][#2]% {\normalexpanded {\lang_labels_define_class_indeed {#1}% {\ifsecondargument#2\else\zerocount\fi}% \expandafter\noexpand\csname dogetupsome#1text\endcsname \expandafter\noexpand\csname #1language\endcsname \expandafter\noexpand\csname dodogetupsome#1text\endcsname \expandafter\noexpand\csname left#1text\endcsname \expandafter\noexpand\csname right#1text\endcsname \expandafter\noexpand\csname #1texts\endcsname \expandafter\noexpand\csname #1text\endcsname}} \unexpanded\def\lang_labels_define_class_indeed#1#2#3#4#5#6#7#8#9% {\setuvalue{setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_setup}% \setuvalue{preset#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_setup}% \setuvalue{start#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dotripleempty\lang_labels_text_prefix_start[#1]}% \letvalue{stop#1text}\relax \def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}% \ifnum#2=\plustwo \def#3{#5#4}% \def#5##1##2% ##1=language {\ifcsname\??label\currentlabelcategory#1:##1:##2\endcsname \csname\??label\currentlabelcategory#1:##1:##2\endcsname \else\ifcsname\??label#1:##1:##2\endcsname \csname\??label#1:##1:##2\endcsname \else\ifcsname\??language#4\s!default\endcsname \expandafter#5\csname\??language#4\s!default\endcsname{##2}% \else\ifcsname\??label\currentlabelcategory#1:##2\endcsname \csname\??label\currentlabelcategory#1:##2\endcsname \else\ifcsname\??label#1:##2\endcsname \csname\??label#1:##2\endcsname \else\ifcsname\??label\currentlabelcategory#1:\s!en:##2\endcsname \csname\??label\currentlabelcategory#1:\s!en:##2\endcsname \else\ifcsname\??label#1:\s!en:##2\endcsname \csname\??label#1:\s!en:##2\endcsname \else ##2% \fi\fi\fi\fi\fi\fi\fi}% \let#6\gobbleoneargument \let#7\gobbleoneargument \let#8\gobbletwoarguments \let#9#3% \else \unexpanded\def#3{#5#4}% \unexpanded\def#5##1##2% {\ifcsname\??label#1:##1:##2\endcsname \expandafter\let\expandafter\thetextprefix\csname\??label#1:##1:##2\endcsname \else\ifcsname\??language#4\s!default\endcsname \expandafter#5\csname\??language#4\s!default\endcsname{##2}% \else\ifcsname\??label#1:##2\endcsname \expandafter\let\expandafter\thetextprefix\csname\??label#1:##2\endcsname \else\ifcsname\??label#1:\s!en:##2\endcsname \expandafter\let\expandafter\thetextprefix\csname\??label#1:\s!en:##2\endcsname \else \let\thetextprefix\dummytextprefix \fi\fi\fi\fi}% \unexpanded\def#6##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}% \unexpanded\def#7##1{#3{##1}\expandafter\flushrightlabelclass\thetextprefix}% \unexpanded\def#8##1{#3{##1}\expandafter\flushbothlabelclass \thetextprefix}% #2 \unexpanded\def#9##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}% \fi \appendtoks \let#6\firstofoneargument % to be checked \let#7\firstofoneargument % to be checked \let#8\firstofoneargument % to be checked \let#9\firstofoneargument % to be checked \to \everysimplifycommands} \let\flushleftlabelclass \firstoftwoarguments \let\flushrightlabelclass\secondoftwoarguments \def\flushbothlabelclass #1#2#3{#1#3#2} \def\dummytextprefix {\empty\empty} %D \macros %D {headtext, %D labeltext, leftlabeltext, rightlabeltext, labeltexts, %D LABELTEXT, LEFTLABELTEXT, RIGHTLABELTEXT, LABELTEXTS} %D %D Once defined, head and label texts can be called upon using: %D %D \showsetup{headtext} %D \showsetup{labeltext} %D %D The latter one has an upcased alternative \type{\LABELTEXT}. %D %D \macros %D {presetheadtext,presetlabeltext} %D %D These macros enable us to automatically define head and label %D texts without replacing predefined ones. They are internal macros. \appendtoks \let\labellanguage\currentlanguage \to \everycurrentdate \newconstant\protecttextprefixes \let\currenttextprefixtag \s!unknown \let\currenttextprefixclass\s!unknown \def\lang_labels_text_prefix_start[#1][#2][#3]% class language name {\ifthirdargument \edef\currenttextprefixtag{\reallanguagetag{#2}}% \edef\currenttextprefixname{#3}% \else \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% \edef\currenttextprefixname{#2}% \fi \grabuntil{stop#1text}\lang_labels_text_prefix_start_indeed} \def\lang_labels_text_prefix_start_indeed#1% text (not special checking done here yet, only for long texts anyway) {\expandafter\edef\csname\??label\currenttextprefixclass:\currenttextprefixtag:\currenttextprefixname\endcsname{{\ctxlua{context(string.strip(\!!bs#1\!!es))}}\empty}} \def\lang_labels_text_prefix_setup[#1][#2]% {\ifsecondargument \edef\currenttextprefixtag{\reallanguagetag{#1}}% \processcommalist[#2]\lang_labels_text_prefix_setup_indeed \else \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% \processcommalist[#1]\lang_labels_text_prefix_setup_indeed \fi} \def\lang_labels_text_prefix_setup_indeed#1% {\lang_labels_text_prefix_assign[#1]} \def\lang_labels_text_prefix_assign[#1=#2]% {\lang_labels_text_prefix_assign_indeed{#1}[#2,,]} \def\lang_labels_text_prefix_assign_indeed#1% {\ifcase\protecttextprefixes % no checking \expandafter\lang_labels_text_prefix_assign_yes \or % checking \ifcsname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname \expandafter\expandafter\expandafter\lang_labels_text_prefix_assign_nop \else \expandafter\expandafter\expandafter\lang_labels_text_prefix_assign_yes \fi \or % simple assignment (a bit overkill but it fits in the whole) \expandafter\lang_labels_text_prefix_assign_dumb \fi{#1}} \let\m_lang_labels_left \empty \let\m_lang_labels_right\empty \def\lang_labels_text_prefix_assign_yes#1[#2,#3,#4]% {\def\m_lang_labels_left {#2}% no longer an edef ... else \Word undefined expansion issues \def\m_lang_labels_right{#3}% no longer an edef ... else \Word undefined expansion issues \ifx\m_lang_labels_right\empty \ifx\m_lang_labels_left\empty \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{\empty\empty}% \else \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}\empty}% \fi \else \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}{#3}}% \fi} \def\lang_labels_text_prefix_assign_nop#1[#2]% {} \def\lang_labels_text_prefix_assign_dumb#1[#2,#3]% {\expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{#2}} \unexpanded\def\setlabeltextpair#1#2#3#4#5% a fast one for usage at the Lua end {\expandafter\def\csname\??label#1:\reallanguagetag{#2}:#3\endcsname{{#4}{#5}}} % class tag key left right \definelabelclass [head] [0] % titles \definelabelclass [label] [0] % texts \definelabelclass [mathlabel] [0] % functions \definelabelclass [taglabel] [2] % tags \ctxcommand{definelabels("head", "titles", true )} \ctxcommand{definelabels("label", "texts", true )} \ctxcommand{definelabels("mathlabel", "functions",false)} \ctxcommand{definelabels("taglabel", "tags", false)} %D \macros %D {translate} %D %D Sometimes macros contain language specific words that are to %D be typeset. Such macros can be made (more) language %D independant by using: %D %D \showsetup{translate} %D %D like for instance: %D %D \starttyping %D \translate[en=something,nl=iets] %D \stoptyping %D %D which expands to {\em something} or {\em iets}, depending on %D de current language. \installcorenamespace{translation} \unexpanded\def\translate {\dosingleempty\lang_translate} \def\lang_translate[#1]% {\getparameters[\??translation][#1]% \ifcsname\??translation\currentlanguage\endcsname \csname\??translation\currentlanguage\endcsname \else\ifcsname\??translation\s!en\endcsname \csname\??translation\s!en\endcsname \else [translation #1]% \fi\fi} %D When used without argument, the last defined values are %D used. This enables repetitive use like %D %D \starttyping %D \en \translate\ means \nl \translate %D \stoptyping %D \macros %D {assigntranslation} %D %D This macro is a system macro, and can be used to assign a %D translation to a macro. Its form is: %D %D \starttyping %D \assigntranslation[en=something,nl=iets]\to\command %D \stoptyping \def\assigntranslation[#1]\to#2% {\getparameters[\??translation][#1]% \edef#2{\csname\??translation\currentlanguage\endcsname}} %D \macros %D {commalistsentence} %D %D Redone in \LUA: %D %D \startbuffer %D \commalistsentence[aap,noot,mies] %D \commalistsentence[aap,noot] %D \commalistsentence[aap] %D \commalistsentence[a,b,c] %D \commalistsentence[a,b,c][{ \& },{ and }] %D \commalistsentence[a,b,c][+,-] %D \stopbuffer %D %D \typebuffer %D %D \startlines %D \getbuffer %D \stoplines \unexpanded\def\commalistsentence {\dodoubleempty\typo_helpers_concat_comma_list} \def\typo_helpers_concat_comma_list[#1][#2]% {\ctxcommand{concatcommalist{ text = \!!bs#1\!!es, separators = \!!bs#2\!!es, first = \!!bs\labeltext{and-1}\!!es, second = \!!bs\labeltext{and-2}\!!es }}} \setuplabeltext [\s!nl] [and-1={{, }}, and-2={{ en }}] % 1, 2 en 3 \setuplabeltext [\s!en] [and-1={{, }}, and-2={{, }}] % 1, 2, 3 \setuplabeltext [\s!de] [and-1={{, }}, and-2={{ und }}] % 1, 2 und 3 \setuplabeltext [\s!hr] [and-1={{, }}, and-2={{ i }}] % 1, 2 i 3 \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-wid.mkvi�������������������������������0000644�0001750�0001750�00000057174�12130411274�024320� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=scrn-int, %D version=2011.02.27, % moved from scrn-int %D title=\CONTEXT\ Core Macros, %D subtitle=Widgets, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Interaction Macros / Widgets} \registerctxluafile{scrn-wid}{1.001} % todo: expansion in comments (default is expanded) \unprotect %D Attachments (mkiv upgraded): %D %D As usual in \CONTEXT\ we separate the general definition (frontend) %D and the rendering (backend). % old but stil valid method: % % \useattachment[test.tex] % \useattachment[whatever][test.tex] % \useattachment[whatever][newname][test.tex] % \useattachment[whatever][title][newname][test.tex] % % new method: % % \registerattachment[sometag][specification] % name file author title subtitle % % \attachment[sometag][extra specs] % \attachment[test.tex] % \attachment[file=test.tex] % \attachment[file=test.tex,method=hidden] % \attachment[name=newname,file=test.tex] % \attachment[title=mytitle,name=newname,file=test.tex] % % indirect % % \defineattachment[whatever5][file=test.tex] \attachment[whatever5][method=hidden] % \defineattachment[whatever5][file=test.tex,method=hidden] \attachment[whatever5] % % direct (no definitions) % % \attachment[test][file=oeps.tex,title=Oeps,author=Hans,subtitle=TeX File,method=hidden] % \attachment[label=test,file=oeps.tex,title=Oeps,author=Hans,subtitle=TeX File,method=hidden] % % autolabel: % % \attachment[file=oeps.tex,title=Oeps,author=Hans,subtitle=TeX File,method=hidden] % % % \setupattachments[\c!symbol={symbol-normal,symbol-down}] % startattachment -> temp file \newbox\b_scrn_attachment_collect \newbox\b_scrn_attachment_link \newbox\b_scrn_attachment_symbol \installcorenamespace{attachment} \installcorenamespace{attachmentlocation} \installcorenamespace{attachmentmethod} \installcommandhandler \??attachment {attachment} \??attachment \let\setupattachments\setupattachment % convenience and compatibility \setupattachment [\c!state=\v!start, \c!color=\interactionparameter\c!color, %\c!textlayer=, %\c!symbol=, %\c!title=, %\c!subtitle=, %\c!file=, % input filename %\c!name=, % new filename %\c!author=, %\c!method=, % \v!hidden = not in menu %\c!buffer= \c!symbol=, \c!distance=1em, \c!width=\v!fit, \c!height=\v!fit, \c!depth=\v!fit, \c!location=\v!high] \unexpanded\def\registerattachment {\dodoubleempty\scrn_attachment_register} \def\scrn_attachment_register[#tag][#settings]% we save (globally) at the lua end {\ifsecondargument \begingroup \def\currentattachment{_}% \setupcurrentattachment[#settings,\s!parent=\??attachment]% \ctxcommand{registerattachment{ tag = "#tag", registered = "#tag", title = "\attachmentparameter\c!title", subtitle = "\attachmentparameter\c!subtitle", author = "\attachmentparameter\c!author", file = "\attachmentparameter\c!file", name = "\attachmentparameter\c!name", buffer = "\attachmentparameter\c!buffer", }}% \endgroup \else % todo \fi} \appendtoks \setuevalue \currentattachment {\scrn_attachment_direct{\currentattachment}}% \setuevalue{\e!start\currentattachment}{\scrn_attachment_start {\currentattachment}}% \setuevalue{\e!stop \currentattachment}{\scrn_attachment_stop }% \to \everydefineattachment \unexpanded\def\scrn_attachment_direct#tag% {\edef\currentattachment{#tag}% \doifelselocation {\dodoubleempty\scrn_attachment_direct_status} {\dodoubleempty\scrn_attachment_direct_ignore}} \def\scrn_attachment_direct_status {\doifelse{\attachmentparameter\c!state}\v!start \scrn_attachment_direct_indeed \scrn_attachment_direct_ignore} \def\scrn_attachment_direct_indeed[#registered][#settings]% {\bgroup \doifelsenothing{#registered} {\scrn_attachment_inject[\v!auto][]} {\doifassignmentelse{#registered} {\scrn_attachment_inject[\v!auto][#registered]} {\scrn_attachment_inject[#registered][#settings]}}% \egroup} \def\scrn_attachment_direct_ignore[#tag][#settings]% {} \unexpanded\def\scrn_attachment_start#tag% {\edef\currentattachment{#tag}% \doifelselocation {\dodoubleempty\scrn_attachment_start_indeed} {\dodoubleempty\scrn_attachment_start_ignore}} \unexpanded\def\scrn_attachment_stop {} \def\scrn_attachment_start_indeed {\doif{\attachmentparameter\c!state}\v!start {\scrn_attachment_start_indeed} {\scrn_attachment_start_ignore}} \def\scrn_attachment_start_indeed[#registered][#settings]% {\bgroup \doifelsenothing{#registered} {\def\scrn_attachment_stop{\scrn_attachment_inject[\v!auto][\c!buffer=\v!attachment]\egroup}}% {\doifassignmentelse{#registered} {\def\scrn_attachment_stop{\scrn_attachment_inject[\v!auto][\c!buffer=\v!attachment,#registered]\egroup}}% {\def\scrn_attachment_stop{\scrn_attachment_inject[#registered][\c!buffer=\v!attachment,#settings]\egroup}}}% \grabbufferdatadirect\v!attachment{\e!start\currentattachment}{\e!stop\currentattachment}} \def\scrn_attachment_start_ignore {\expandafter\gobbleuntil\csname\e!stop\currentattachment\endcsname} \def\scrn_attachment_inject[#registered][#settings]% {\edef\currentattachmentregistered{#registered}% \setupattachment[\currentattachment][#settings]% \expandnamespaceparameter\??attachmentmethod\attachmentparameter\c!method\v!normal} \setvalue{\??attachmentmethod\v!normal}% {\edef\currentattachmentsymbol{\attachmentparameter\c!symbol}% \edef\currentattachmentwidth {\attachmentparameter\c!width }% \edef\currentattachmentheight{\attachmentparameter\c!height}% \edef\currentattachmentdepth {\attachmentparameter\c!depth }% \ifx\currentattachmentsymbol\empty \ifx\currentattachmentwidth \v!fit\edef\currentattachmentwidth {.5em}\fi \ifx\currentattachmentheight\v!fit\edef\currentattachmentheight{.5em}\fi \ifx\currentattachmentdepth \v!fit\let \currentattachmentdepth \zeropoint\fi \else \ctxcommand{presetsymbollist("\attachmentparameter\c!symbol")}% % we cannot yet ask for the wd/ht/dp of an xform else we could use those \setbox\b_scrn_attachment_symbol\hbox{\symbol[\lastpredefinedsymbol]}% \ifx\currentattachmentwidth \v!fit\edef\currentattachmentwidth {\wd\b_scrn_attachment_symbol}\fi \ifx\currentattachmentheight\v!fit\edef\currentattachmentheight{\ht\b_scrn_attachment_symbol}\fi \ifx\currentattachmentdepth \v!fit\edef\currentattachmentdepth {\dp\b_scrn_attachment_symbol}\fi \fi \ctxcommand{insertattachment{ tag = "\currentattachment", registered = "\currentattachmentregistered", width = \number\dimexpr\currentattachmentwidth \relax, height = \number\dimexpr\currentattachmentheight\relax, depth = \number\dimexpr\currentattachmentdepth \relax, color = "\attachmentparameter\c!color", colormodel = \number\attribute\colormodelattribute, colorvalue = \thecolorattribute{\attachmentparameter\c!color}, transparencyvalue = \thetransparencyattribute{\attachmentparameter\c!color}, symbol = "\currentattachmentsymbol", layer = "\attachmentparameter\c!textlayer", % these will be overloaded by registered when available title = "\attachmentparameter\c!title", subtitle = "\attachmentparameter\c!subtitle", author = "\attachmentparameter\c!author", file = "\attachmentparameter\c!file", name = "\attachmentparameter\c!name", buffer = "\attachmentparameter\c!buffer", }}% \setbox\b_scrn_attachment_link\hbox{\scrn_attachment_place}% \wd\b_scrn_attachment_link\currentattachmentwidth \ht\b_scrn_attachment_link\currentattachmentheight \dp\b_scrn_attachment_link\currentattachmentdepth \box\b_scrn_attachment_link} \setvalue{\??attachmentmethod\v!hidden}% {\ctxcommand{insertattachment{ tag = "\currentattachment", registered = "\currentattachmentregistered", method = "\v!hidden" }}} \def\scrn_attachment_place {\executeifdefined {\??attachmentlocation\attachmentparameter\c!location}\hbox {\box\b_scrn_attachment_link}} \setvalue{\??attachmentlocation\v!inmargin }{\inmargin } \setvalue{\??attachmentlocation\v!leftedge }{\inleftedge } \setvalue{\??attachmentlocation\v!rightedge }{\inrightedge } \setvalue{\??attachmentlocation\v!leftmargin }{\inleftmargin } \setvalue{\??attachmentlocation\v!rightmargin}{\inrightmargin} \setvalue{\??attachmentlocation\v!high }{\high} \setvalue{\??attachmentlocation\v!none }{\scrn_attachment_collect} %setvalue{\??attachmentlocation\v!text }{\gobblenextargument} % gobbles the box \def\scrn_attachment_collect#content% {\global\setbox\b_scrn_attachment_collect\hbox\bgroup \ifvoid\b_scrn_attachment_collect\else \box\b_scrn_attachment_collect \hskip\attachmentparameter\c!distance \fi #content% \egroup} \unexpanded\def\placeattachments {\ifvoid\b_scrn_attachment_collect\else \box\b_scrn_attachment_collect \fi} \defineattachment[attachment] % \ifx\currentinterface\defaultinterface \else % \defineattachment[\v!attachment] % \fi % backward compatible: \unexpanded\def\useattachment {\doquadrupleempty\scrn_attachment_use} \def\scrn_attachment_use[#tag][#title][#name][#file]% {\iffourthargument \registerattachment[#tag][title=#title,name=#name,file=#file]% \else\ifthirdargument \registerattachment[#tag][title=#title,name=#title,file=#name]% \else\ifsecondargument \registerattachment[#tag][title=#title,name=#title,file=#title]% \else \registerattachment[#tag][title=#title,name=#tag,file=#tag]% \fi\fi\fi} %D Comments: % test % % \startcomment % hello beautiful\\world % \stopcomment % % test % % \startcomment[hello] % hello << eerste >> % beautiful % world % \stopcomment % % test % % \startcomment[hello][color=green,width=10cm,height=3cm] % hello % beautiful % world % \stopcomment % % test % % \startcomment[hello][color=red,width=4cm,height=3cm] % hello % % beautiful % % world % \stopcomment % % test % % \startcomment[symbol=Balloon] % Do we want this kind of rubish? % \stopcomment % % test % % \definesymbol [comment-normal][{\externalfigure[cow.pdf]}] % \definesymbol [comment-down] [{\externalfigure[cow.pdf]}] % % \def\CowSymbol#1#2% % {\scale % [\c!height=#1] % {\startMPcode % loadfigure "koe.mp" number 1 ; % refill currentpicture withcolor #2 ; % \stopMPcode}} % % \definesymbol [comment-normal] % [\CowSymbol{4ex}{red}] % % \definesymbol [comment-down] % [\CowSymbol{4ex}{green}] % % \setupcomment % [\c!symbol={comment-normal,comment-down}, % \c!option=\v!buffer] % % \startcomment[hello] % oeps % \stopcomment % % test % % \setupcomment % [\c!symbol=normal, % \c!option=max,width=10cm] % % \startcomment[hello] % oeps % \stopcomment % % test \installcorenamespace{comment} \installcorenamespace{commentlocation} \installcommandhandler \??comment {comment} \??comment \newbox\b_scrn_comment_collect \newbox\b_scrn_comment_rendering \newbox\b_scrn_comment_link \newbox\b_scrn_comment_symbol \setupcomment [\c!state=\v!start, \c!distance=1em, \c!color=\interactionparameter\c!color, \c!space=\v!no, \c!symbol=, %\c!title=, %\c!option=, %\c!textlayer=, \c!width=\v!fit, \c!height=\v!fit, \c!depth=\v!fit, \c!nx=40, \c!ny=10, \c!location=\v!high] \appendtoks \setuevalue \currentcomment {\scrn_comment_argument{\currentcomment}}% \setuevalue{\e!start\currentcomment}{\scrn_comment_start {\currentcomment}}% \setuevalue{\e!stop \currentcomment}{\scrn_comment_stop }% \to \everydefinecomment \unexpanded\def\scrn_comment_argument#category% {\def\currentcomment{#category}% \doifelselocation {\dodoubleempty\scrn_comment_argument_status} {\dodoubleempty\scrn_comment_argument_ignore}} \def\scrn_comment_argument_status {\doifelse{\commentparameter\c!state}\v!start \scrn_comment_argument_indeed \scrn_comment_argument_ignore} \def\scrn_comment_argument_indeed[#title][#settings]#text% {\doifassignmentelse{#title} {\setupcurrentcomment[#title]} {\setupcurrentcomment[\c!title=#title,#settings]}% \ctxlua{buffers.assign("\v!comment",\!!bs#text\!!es)}% todo: expansion control, but expanded by default (xml) \scrn_comment_inject \ignorespaces} \def\scrn_comment_argument_ignore[#title][#settings]#text% {\ignorespaces} \unexpanded\def\scrn_comment_start#category% {\def\currentcomment{#category}% \doifelselocation {\dodoubleempty\scrn_comment_start_status} {\dodoubleempty\scrn_comment_start_ignore}} \def\scrn_comment_start_status {\doifelse{\commentparameter\c!state}\v!start {\scrn_comment_start_indeed} {\scrn_comment_start_ignore}} \def\scrn_comment_start_indeed[#title][#settings]% {\bgroup \doifassignmentelse{#title} {\setupcurrentcomment[#title]} {\setupcurrentcomment[\c!title=#title,#settings]}% \unexpanded\def\scrn_comment_stop{\scrn_comment_inject\egroup}% \grabbufferdatadirect\v!comment{\e!start\currentcomment}{\e!stop\currentcomment}} \def\scrn_comment_start_ignore {\expandafter\gobbleuntil\csname\e!stop\currentcomment\endcsname} \unexpanded\def\scrn_comment_stop {} \installcorenamespace{commentmethods} \unexpanded\def\scrn_comment_inject {\expandnamespaceparameter\??commentmethods\commentparameter\c!method\v!normal} %D Beware: comments symbols don't scale in acrobat (cf. spec but somewhat %D weird, esp because for instance attachment symbols do scale). \setvalue{\??commentmethods\v!normal}% {\edef\currentcommentsymbol{\commentparameter\c!symbol}% \edef\currentcommentwidth {\commentparameter\c!width }% \edef\currentcommentheight{\commentparameter\c!height}% \edef\currentcommentdepth {\commentparameter\c!depth }% \ifx\currentcommentsymbol\empty \ifx\currentcommentwidth \v!fit\edef\currentcommentwidth {.5em}\fi \ifx\currentcommentheight\v!fit\edef\currentcommentheight{.5em}\fi \ifx\currentcommentdepth \v!fit\let \currentcommentdepth \zeropoint\fi \else \ctxcommand{presetsymbollist("\commentparameter\c!symbol")}% % we cannot yet ask for the wd/ht/dp of an xform else we could use those \setbox\b_scrn_comment_symbol\hbox{\symbol[\lastpredefinedsymbol]}% \ifx\currentcommentwidth \v!fit\edef\currentcommentwidth {\wd\b_scrn_comment_symbol}\fi \ifx\currentcommentheight\v!fit\edef\currentcommentheight{\ht\b_scrn_comment_symbol}\fi \ifx\currentcommentdepth \v!fit\edef\currentcommentdepth {\dp\b_scrn_comment_symbol}\fi \fi \ctxcommand{insertcomment{ tag = "\currentcomment", title = "\commentparameter\c!title", subtitle = "\commentparameter\c!subtitle", author = "\commentparameter\c!author", width = \number\dimexpr\currentcommentwidth, height = \number\dimexpr\currentcommentheight, depth = \number\dimexpr\currentcommentdepth, nx = \commentparameter\c!nx, ny = \commentparameter\c!ny, colormodel = \number\attribute\colormodelattribute, colorvalue = \thecolorattribute{\commentparameter\c!color}, transparencyvalue = \thetransparencyattribute{\commentparameter\c!color}, option = "\commentparameter\c!option", % todo symbol = "\commentparameter\c!symbol", buffer = "\v!comment", layer = "\commentparameter\c!textlayer" }}% \wd\b_scrn_comment_link\currentcommentwidth \ht\b_scrn_comment_link\currentcommentheight \dp\b_scrn_comment_link\currentcommentdepth \expandnamespaceparameter\??commentlocation\commentparameter\c!location\s!unknown} \setvalue{\??commentmethods\v!hidden}% {} % todo: dedicated margin classes \setvalue{\??commentlocation\v!inmargin }{\inmargin {\box\b_scrn_comment_link}} \setvalue{\??commentlocation\v!leftedge }{\inleftedge {\box\b_scrn_comment_link}} \setvalue{\??commentlocation\v!rightedge }{\inrightedge {\box\b_scrn_comment_link}} \setvalue{\??commentlocation\v!leftmargin }{\inleftmargin {\box\b_scrn_comment_link}} \setvalue{\??commentlocation\v!rightmargin}{\inrightmargin{\box\b_scrn_comment_link}} \setvalue{\??commentlocation\v!high }{\high {\box\b_scrn_comment_link}} \setvalue{\??commentlocation\v!none}% {\global\setbox\b_scrn_comment_collect\hbox\bgroup \ifvoid\b_scrn_comment_collect\else \box\b_scrn_comment_collect \hskip\commentparameter\c!distance \fi \box\b_scrn_comment_link \egroup} \setvalue{\??commentlocation\s!unknown}% {\ifvoid\b_scrn_comment_collect\else \box\b_scrn_comment_collect \fi} \unexpanded\def\placecomments {\ifvoid\b_scrn_comment_collect\else \box\b_scrn_comment_collect \fi} \definecomment[comment] % \ifx\currentinterface\defaultinterface \else % \definecomment[\v!comment] % \fi %D Soundclips: %D %D Defining sound tracks: %D %D \starttyping %D \useexternalsoundtrack[label][file] %D \stoptyping %D %D associated actions: StartSound StopSound PauseSound ResumeSound %D %D Todo: like external figures, also search on path, %D although, they need to be present ar viewing time, so ... \installcorenamespace{externalsoundtracks} \installsetuponlycommandhandler \??externalsoundtracks {externalsoundtracks} \setupexternalsoundtracks [\c!option=] \unexpanded\def\useexternalsoundtrack {\dodoubleargument\scrn_soundtrack_indeed} \def\scrn_soundtrack_indeed[#tag][#filename]% {\ctxcommand{registersoundclip{ tag = "#tag", file = "#filename" }}} \def\checksoundtrack#tag% yet untested in mkiv (also move management to lua) {\iflocation \ctxcommand{insertsoundclip{ tag = "#tag", ["repeat"] = "\directexternalsoundtrackparameter\c!option", % todo: pass option as-is }}% \fi} %D Renderings (not yet tested in mkvi): % Todo: multiple instances and inheritance .. will be done when % needed i.e. when I see usage. \let\currentrendering\empty \definereference[StartCurrentRendering] [\v!StartRendering {\currentrendering}] \definereference[StopCurrentRendering] [\v!StopRendering {\currentrendering}] \definereference[PauseCurrentRendering] [\v!PauseRendering {\currentrendering}] \definereference[ResumeCurrentRendering][\v!ResumeRendering{\currentrendering}] \def\useexternalrendering{\doquadrupleempty\scrn_rendering_use} \def\setinternalrendering{\dodoubleempty \scrn_rendering_set} \def\scrn_rendering_use[#tag][#mime][#file][#option]% {\ctxcommand{registerrendering{ type = "external", label = "#tag", mime = "#mime", filename = "#file", option = "#option", }}} \def\scrn_rendering_set[#tag][#option]% {content} {\bgroup \dowithnextbox {\ctxcommand{registerrendering{ type = "internal", label = "#tag", mime = "IRO", % brrr filename = "#tag", option = "#option", }}% \let\objectoffset\zeropoint \setobject{IRO}{#tag}\hbox{\box\nextbox}% \egroup}% \hbox} \def\renderingtype #tag{\ctxcommand{renderingvar("#tag","type")}} \def\renderingoption#tag{\ctxcommand{renderingvar("#tag","option")}} \newdimen\d_scrn_rendering_width \d_scrn_rendering_width 8cm \newdimen\d_scrn_rendering_height \d_scrn_rendering_height 6cm \let\m_scrn_rendering_page\!!zerocount \installcorenamespace{renderingwindow} \installframedcommandhandler \??renderingwindow {renderingwindow} \??renderingwindow \appendtoks \letrenderingwindowparameter\c!openpageaction \empty \letrenderingwindowparameter\c!closepageaction\empty \setrenderingwindowparameter\c!width {\d_scrn_rendering_width }% \setrenderingwindowparameter\c!height {\d_scrn_rendering_height}% \to \everypresetrenderingwindow \unexpanded\def\placerenderingwindow {\dodoubleempty\scrn_rendering_place_window} \def\scrn_rendering_place_window[#window][#rendering]% {\bgroup \edef\currentrendering{\ifsecondargument#rendering\else#window\fi}% \doifelse{\renderingtype\currentrendering}{internal} % an object {\getobjectdimensions{IRO}\currentrendering \d_scrn_rendering_height\dimexpr\objectheight+\objectdepth\relax \d_scrn_rendering_width\objectwidth\relax \dogetobjectreferencepage{IRO}\currentrendering\m_scrn_rendering_page}% {\d_scrn_rendering_height\vsize \d_scrn_rendering_width\hsize \let\m_scrn_rendering_page\realpageno}% % create fall back if needed \edef\currentrenderingwindow{\namedrenderingwindowparameter{#window}\c!width}% stupid test, we need a proper one here \ifx\currentrenderingwindow\empty \let\currentrenderingwindow\s!default \definerenderingwindow[\currentrenderingwindow]% why not global \else \edef\currentrenderingwindow{#window}% \fi % todo: % \handlereferenceactions{\renderingwindowparameter\c!openpageaction }\dosetuprenderingopenpageaction % \handlereferenceactions{\renderingwindowparameter\c!closepageaction}\dosetuprenderingclosepageaction \letrenderingwindowparameter\c!offset\v!overlay \inheritedrenderingwindowframed {\vfill \ctxcommand{insertrenderingwindow { label = "\currentrendering", width = \number\d_scrn_rendering_width, height = \number\d_scrn_rendering_height, option = "\renderingoption\currentrendering", page = \number\m_scrn_rendering_page, }}\hfill}% \egroup} %D Linkedlists (not tested in mkvi): % %D The next mechanism, linked lists, is quite old and % %D is \MKIV'd for completeness. I will finish the % %D configuration part when I need it. % %D % %D \starttyping % %D \setupinteraction[state=start] % %D \definelinkedlist[demo] % %D \dorecurse{10}{\linkedlistelement[demo]{link \recurselevel} \page} % %D \stoptyping % % \definesystemvariable {lk} % LinK % % \installcommandhandler\??lk{linkedlist}\??lk % % \let\setupbutton\setuplinkedlists\setuplinkedlist % % \appendtoks % \ctxcommand{definelinkedlist("\currentlinkedlist")}% % \to \everydefinelinkedlist % % \def\setlinkedlistproperties#1#2#3#4#5#6% % {\def\currentlink {#1}% % \def\noflinks {#2}% % \def\firstlink {#3}% % \def\previouslink{#4}% % \def\nextlink {#5}% % \def\lastlink {#6}} % % \def\linkedlistelement[#1]#2% currently no view support % {\dontleavehmode\hbox\bgroup % #2% % \iflocation % \edef\currentlinkedlist{#1}% % \ifcsname\??lk\currentlinkedlist\s!parent\endcsname % \hskip\linkedlistparameter\c!distance % \ctxcommand{addlinklistelement("\currentlinkedlist")}% % \expanded{\ctxlatelua{commands.enhancelinkedlist("\currentlinkedlist",\currentlink)}}% can also be done at the lua end % \dogotosomepage {\??lk\currentlinkedlist}\gotobegincharacter \firstlink % \ifnum\noflinks>\plustwo % \dogotosomepage{\??lk\currentlinkedlist}\gobackwardcharacter\previouslink % \dogotosomepage{\??lk\currentlinkedlist}\goforwardcharacter \nextlink % \fi % \dogotosomepage {\??lk\currentlinkedlist}\gotoendcharacter \lastlink % \else % \writestatus\m!interactions{no such linked list: \currentlinkedlist}% % \fi % \fi % \egroup} % % \setuplinkedlists % [\c!distance=.25em, % \c!width=\v!fit, % \c!location=\v!low, % \c!color=\interactionparameter\c!color, % \c!frame=\v!off, % \c!background=, % \c!backgroundcolor=] \protect \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-27.tex��������������������������������0000644�0001750�0001750�00000007710�11754241457�023706� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-pre-27, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 27, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setuppapersize [S6][S6] % \setupbodyfont[ppl] \definetypeface[main][rm][casual][informal][default] \loadmapfile[original-micropress-informal.map] \setupbodyfont[main,10pt] \setuplayout [footerdistance=20pt, footer=40pt, %footer=24pt, %bottomdistance=10pt, %bottom=12pt, header=0pt, backspace=20pt, topspace=20pt, width=middle, height=fit] % \def\MainTitle#1{\setupfootertexts[\hfill#1]} % \def\SubTitle #1{\setupbottomtexts[\hfill#1]} % % \MainTitle{a dull talk held at \currentdate} % \SubTitle {welcome to whatever} % % \setupbottom % [style=\ssbf, % color=white] % % \setupfooter % [style=\ssbfb, % color=white] \setupfooter [strut=no, style=\bfb, color=white] \setupinteraction [state=start] \setupinteractionscreen [option=max] \definecolor[white] [s=.8] \definecolor[red] [r=.7] \definecolor[green] [g=.7] \definecolor[blue] [b=.7] \definecolor[yellow][r=.7,g=.7] \setupcolors [state=start] \defineoverlay [page] [\reuseMPgraphic{page}] \defineoverlay [text] [\useMPgraphic {text}] \defineoverlay [continue] [\overlaybutton {forward}] \setupbackgrounds [page] [background={page,continue}] \definecolor [PageColor] [red] \definecolor [TextColor] [yellow] \defineframedtext [TopicPage] \defineframedtext [TopicText] \setupframedtexts [TopicPage] [width=\textwidth, height=\textheight, offset=overlay] \setupframedtexts [TopicText] [offset=10pt, style=bold, % hm width=\TopicWidth, background=text, align=normal] \setupframedtexts [TopicPage,TopicText] [frame=off, depthcorrection=off, before=, after=] \newbox \TopicBox \newcounter \KindOfTopic \newdimen \TopicWidth \def\KindOfTopic{1} \def\StartTopic {\getrandomdimen\TopicWidth{.5\textwidth}{.7\textwidth} \ifcase\KindOfTopic\or \setupframedtexts [TopicPage] [align={right,high}] \or \setupframedtexts [TopicPage] [align={left,high}] \or \setupframedtexts [TopicPage] [align={left,low}] \or \setupframedtexts [TopicPage] [align={right,low}] \fi \setbox\scratchbox=\vbox \bgroup \dontcomplain \noindent \startTopicPage [none] \noindent \startTopicText [none] \setuptolerance [verytolerant,stretch]} \def\StopTopic% {\stopTopicText \stopTopicPage \egroup \global\setbox\TopicBox=\vbox {\startoverlay {\box\TopicBox} {\box\scratchbox} \stopoverlay} \copy\TopicBox \ifnum\KindOfTopic=4 \def\KindOfTopic{1} \else \increment\KindOfTopic \fi \page} \startuseMPgraphic{text} path p ; p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ; color c ; c := (.7+uniformdeviate.3)*\MPcolor{TextColor} ; p := p enlarged -1.25pt ; fill p withcolor c ; draw p withpen pencircle scaled 2.5pt withcolor .75c ; \stopuseMPgraphic \startreusableMPgraphic{page} path p ; p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ; color c ; c := \MPcolor{PageColor} ; fill p withcolor c ; draw p withpen pencircle scaled 2.5pt withcolor c ; \stopreusableMPgraphic \def\StartNopic#1\StopNopic {\setupfootertexts [\vbox to \footerheight {\vfill \raggedleft \def\\{\endgraf\tx\setstrut\strut} \setstrut\strut\ignorespaces#1\unskip\endgraf\removedepth}] \null \page} \def\TitlePage#1% {\StartNopic#1\StopNopic} \setuphead[title] [style=\bfc,after=\blank] \setuphead[subject][style=\bfa,before=\blank] \doifnotmode{demo}{\endinput} \starttext \TitlePage {a dull talk held at \currentdate\\welcome to whatever} \dorecurse{10}{\StartTopic \input tufte \StopTopic} \stoptext ��������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-hlp.mkii�������������������������������0000644�0001750�0001750�00000011246�11754241457�024310� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=scrn-hlp, %D version=1998.10.10, %D title=\CONTEXT\ Screen Macros, %D subtitle=Help (Experimental), %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo : dedicated vide/hide voor helps \writestatus{loading}{ConTeXt Screen Macros / Help popups} %D This is an experimental and private module, so the interface %D and functionality can change. Pieces of code will be moved %D to other modules. More features are possible but will be %D interfaces later. See m-chart for an application as well %D as the second tno-tpd manual (graphic in margin, click %D on it, pop up big one, use menu with hides, as well as %D background, etc. etc. \unprotect \defineframedtext [\v!helptext] \setupframedtexts [\v!helptext] [\c!width=.75\textwidth, \c!align=\v!normal, \c!frame=\v!off, \c!background=\v!screen] \newcounter \nofhelpdataentries \newconditional \somehelpdatadefined \appendtoks \getpagehelpdata \to \beforeeverypage \appendtoks \synchronizepagehelpdata \to \aftereverypage % will be proper state variable \let\pagehelpdata\empty \def\dontresetpagedata {\let\synchronizepagehelpdata\relax} \def\resetpagehelpdata {\iflocation \let\synchronizepagehelpdata\resetpagehelpdata \global\let\pagehelpdata\empty \resetreference[HideHelp]% \fi} \let\synchronizepagehelpdata\resetpagehelpdata \resetreference[HideHelp] \def\getpagehelpdata {\iflocation\ifcase\nofhelpdataentries\else \let\pagehelpdata\empty \ifconditional\somehelpdatadefined \definetwopasslist{hlp:\realfolio}% \doloop {\gettwopassdata{hlp:\realfolio}% \iftwopassdatafound \addtocommalist\twopassdata\pagehelpdata \else \exitloop \fi}% \fi \ifx\pagehelpdata\empty \else \useJSscripts[fld]% \definereference[HideHelp][JS(Hide_Fields)]% for the moment \fi \fi\fi} \def\setpagehelpdata[#1]% {\iflocation\expanded{\dosetpagehelpdata{#1}}\fi} \def\dosetpagehelpdata#1% {\doglobal\increment\nofhelpdataentries \savetwopassdata{hlp:\realfolio}{\nofhelpdataentries}{#1}} \setvalue{\e!start\v!helptext}[#1]% {\iflocation \global\settrue\somehelpdatadefined \setvalue{\e!stop\v!helptext}% %{\definesymbol[helpinfo:#1][{\doframedtext[\v!helptext]{\getbuffer[\v!helptext]}}]% % \dopresetfieldsymbol{helpinfo:#1}}% {\definesymbol[\v!helptext:#1][{\doframedtext[\v!helptext]{\getbuffer[\v!helptext]}}]% \dopresetfieldsymbol{\v!helptext:#1}}% \else \letvalue{\e!stop\v!helptext}\relax \fi \dostartbuffer[\v!helptext][\e!start\v!helptext][\e!stop\v!helptext]} \long\def\helptext[#1]#2% {\iflocation \global\settrue\somehelpdatadefined %\definesymbol[helpinfo:#1][{\doframedtext[\v!helptext]{#2}}]% %\dopresetfieldsymbol{helpinfo:#1}% \definesymbol[\v!helptext:#1][{\doframedtext[\v!helptext]{#2}}]% \dopresetfieldsymbol{\v!helptext:#1}% \fi} \let\definehelptext\helptext % for backward compabilities sake \def\dohelpdata#1% {\setbox\scratchbox\hbox {\startoverlay {\box\scratchbox} %{\definemainfield[help:#1][check][helpsetup][helpinfo:#1][helpinfo:#1]% {\definemainfield[help:#1][check][helpsetup][\v!helptext:#1][\v!helptext:#1]% \fitfield[help:#1]} \stopoverlay}} \def\helpdata {\iflocation \bgroup %\getpagehelpdata \ifx\pagehelpdata\empty \else \setupfields[\v!reset]% \setupfield [helpsetup] [\c!width=\v!fit, \c!height=\v!fit, \c!frame=\v!off, \c!clickin=JS(Hide_Fields), \c!option={\v!readonly,\v!hidden}]% \setbox\scratchbox\emptybox \processcommacommand[\pagehelpdata]\dohelpdata \box\scratchbox \fi \egroup \fi} \def\helpbutton % also gobble spaces between [][] {\dodoubleempty\dohelpbutton} \def\dohelpbutton {\ifsecondargument \expandafter\donohelpbutton \else \expandafter\dodohelpbutton \fi} \def\dodohelpbutton[#1][#2]#3[#4]% #2 is space gobbling dummy {\iflocation \setpagehelpdata[#4]% \useJSscripts[fld]% \button[#1]{#3}[JS(Vide_Hide_Fields{help:#4})]% \fi} \def\donohelpbutton[#1][#2]% {\dodohelpbutton[#1][]{}[#2]} \def\doifhelpinfo#1#2% {\iflocation \doifsymboldefinedelse{helpinfo:#1}{#2}\donothing \fi} \def\doifelsehelpinfo#1#2#3% {\iflocation \doifsymboldefinedelse{helpinfo:#1}{#2}{#3}% \fi} \protect \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-contml.xsd��������������������������������0000644�0001750�0001750�00000024266�10526734267�024200� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:annotation> <xsd:documentation xml:lang="en"> This schema describes a class of presentations. The structure is (normally) reflected in the design. author: Hans Hagen, copyright: PRAGMA-ADE / Hasselt NL </xsd:documentation> </xsd:annotation> <?context-block begin definitions ?> <xsd:complexType name="filename.value"> <xsd:restriction base="xsd:string"> <xsd:pattern value='[a-zA-Z0-9\-\:\.]*' /> </xsd:restriction> </xsd:complexType> <xsd:complexType name="filetype.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="tex" /> <xsd:enumeration value="xml" /> <xsd:enumeration value="txt" /> </xsd:restriction> </xsd:complexType> <xsd:complexType name="confirmation.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="yes" /> <xsd:enumeration value="no" /> </xsd:restriction> </xsd:complexType> <xsd:complexType name="conversion.value"> <xsd:restriction base="xsd:string"> <xsd:pattern value='(a|A|n|g|G|r|R|1|2|3|4)' /> </xsd:restriction> </xsd:complexType> <xsd:complexType name="reference.label.value"> <xsd:restriction base="xsd:string"> <xsd:pattern value='([a-zA-Z0-9\-\:]*' /> </xsd:restriction> </xsd:complexType> <?context-block end definitions ?> <?context-block begin text ?> <xsd:element name="presentation" mixed="true" /> <?context-block end text ?> <?context-block begin p ?> <xsd:element name="p" mixed="true" /> <?context-block end p ?> <?context-block begin hide ?> <xsd:element name="hide" mixed="true" /> <?context-block end hide ?> <?context-block begin em ?> <xsd:element name="em" mixed="true" /> <?context-block end em ?> <?context-block begin b ?> <xsd:element name="b" mixed="true" /> <?context-block end b ?> <?context-block begin quote ?> <xsd:element name="quote" mixed="true" /> <xsd:element name="quotation" mixed="true" /> <?context-block end quote ?> <?context-block begin include ?> <xsd:attributeGroup name="include.attributes"> <xsd:attribute name="file" type="filename.value" use="required" /> <xsd:attribute name="type" type="filetype.value" /> </xsd:attributeGroup> <xsd:complexType type="include.type"> <xsd:attributeGroup ref="include.attributes" /> </xsd:complexType> <xsd:element name="include" type="include.type" /> <?context-block end include ?> <?context-block begin compound ?> <xsd:attributeGroup name="compound.attributes"> <xsd:attribute name="token" type="xsd:string" /> </xsd:attributeGroup> <xsd:complexType type="compound.type"> <xsd:attributeGroup ref="compound.attributes" /> </xsd:complexType> <xsd:element name="compound" type="compound.type" /> <?context-block end compound ?> <?context-block begin references ?> <xsd:attributeGroup name="reference.attributes"> <xsd:attribute name="label" type="reference.label.value" /> </xsd:attributeGroup> <xsd:complexType type="reference.type"> <xsd:attributeGroup ref="reference.attributes" /> </xsd:complexType> <xsd:element name="lineref" type="reference.type" /> <xsd:element name="pageref" type="reference.type" /> <xsd:element name="textref" type="reference.type" /> <?context-block end references ?> <?context-block begin unknown ?> <xsd:element name="unknown"/> <?context-block end unknown ?> <?context-block begin verbatim ?> <!-- string or anyType --> <xsd:complexType name="verbatim.verbatim"> <xsd:sequence maxOccurs="unbounded" > <xsd:element name="line" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="verbatim" type="verbatim.verbatim" /> <xsd:element name="typing" type="verbatim.verbatim" /> <xsd:element name="verb" type="xsd:string" /> <xsd:element name="type" type="xsd:string" /> <?context-block end verbatim ?> <?context-block begin itemize ?> <xsd:attributeGroup name="itemize.attributes"> <xsd:attribute name="type" type="conversion.value" /> <xsd:attribute name="packed" type="confirmation.value" /> <xsd:attribute name="label" type="reference.label.value" /> </xsd:attributeGroup> <xsd:attributeGroup name="item.attributes"> <xsd:attribute name="label" type="reference.label.value" /> </xsd:attributeGroup> <xsd:complexType name="item.type" mixed="true"> <xsd:attributeGroup ref="item.attributes" /> </xsd:complexType> <xsd:complexType name="itemize.type"> <xsd:sequence minOccurs="1" maxOccurs="unbounded"> <xml:element name="item" type="item.type" /> </xsd:sequence> <xsd:attributeGroup ref="itemize.attributes" /> </xsd:complexType> <xsd:element name="itemize" type="itemize.type" /> <?context-block end itemize ?> <?context-block begin fixed ?> <xsd:complexType name="fixed.type.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="figure" /> <xsd:enumeration value="table" /> </xsd:restriction> </xsd:complexType> <xsd:complexType name="fixed.location.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="high" /> <xsd:enumeration value="low" /> <xsd:enumeration value="lohi" /> </xsd:restriction> </xsd:complexType> <xsd:attributeGroup name="fixed.attributes"> <xsd:attribute name="type" type="fixed.type.value" /> <xsd:attribute name="location" type="fixed.location.value" /> <xsd:attribute name="label" type="reference.label.value" /> </xsd:attributeGroup> <xsd:complexType name="fixed.type"> <xsd:all> <xsd:element name="caption" mixed="true" /> <xsd:element name="content" mixed="true" /> </xsd:all> <xsd:attributeGroup ref="fixed.attributes" /> </xsd:complexType> <xsd:element name="fixed" type="fixed.type" /> <?context-block end fixed ?> <?context-block begin float ?> <xsd:complexType name="float.type.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="figure" /> <xsd:enumeration value="table" /> </xsd:restriction> </xsd:complexType> <xsd:complexType name="float.location.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="high" /> <xsd:enumeration value="low" /> <xsd:enumeration value="lohi" /> </xsd:restriction> </xsd:complexType> <xsd:attributeGroup name="float.attributes"> <xsd:attribute name="type" type="float.type.value" /> <xsd:attribute name="location" type="float.location.value" /> <xsd:attribute name="label" type="reference.label.value" /> </xsd:attributeGroup> <xsd:complexType name="float.type"> <xsd:all> <xsd:element name="caption" mixed="true" /> <xsd:element name="content" mixed="true" /> </xsd:all> <xsd:attributeGroup ref="float.attributes" /> </xsd:complexType> <xsd:element name="float" type="float.type" /> <?context-block end float ?> <?context-block begin externalfigure ?> <xsd:attributeGroup name="externalfigure.attributes"> <xsd:extension base="context.kernel.externalfigure.attributes"> <xsd:attribute name="base" type="filename.value"/> <xsd:attribute name="file" type="filename.value"/> <xsd:attribute name="label" type="reference.label.value"/> </xsd:extension> </xsd:attributeGroup> <xsd:complexType name="externalfigure.type"> <xsd:attributeGroup ref="externalfigure.attributes" /> </xsd:complexType> <xsd:element name="externalfigure" type="externalfigure.type" /> <?context-block end externalfigure ?> <?context-block begin table ?> <xsd:attributeGroup name="table.attributes"> <!-- these elements inherit ConTeXt TABLE parameters --> <xsd:extension base="context.kernel.table.attributes" /> </xsd:attributeGroup> <xsd:complexType name="table.td.type" mixed="true"> <xsd:attributeGroup name="table.attributes" /> </xsd:complexType> <xsd:complexType name="table.tr.type"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="td" type="table.td.type" /> </xsd:sequence> <xsd:attributeGroup name="table.attributes" /> </xsd:complexType> <xsd:complexType name="table.type"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="tr" type="table.tr.type" /> </xsd:sequence> <xsd:attributeGroup name="table.attributes" /> </xsd:complexType> <xsd:element name="table" type="table.type" /> <?context-block end table ?> <?context-block begin tabulate ?> <xsd:complexType name="tabulate.td.type" mixed="true"> </xsd:complexType> <xsd:complexType name="tabulate.tr.type"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="td" type="tabulate.td.type" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="tabulate.base.type"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="tr" type="tabulate.tr.type" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="tabulate.align.value"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="high" /> <xsd:enumeration value="low" /> <xsd:enumeration value="lohi" /> </xsd:restriction> </xsd:complexType> <xsd:attributeGroup name="tabulate.tcell.attributes"> <xsd:attribute name="align" type="tabulate.align.value" /> </xsd:attributeGroup> <xsd:complexType name="tabulate.tcell.type" mixed="true"> <xsd:attributeGroup ref="tabulate.tcell.attributes" /> </xsd:complexType> <xsd:complexType name="tabulate.tcell.type"> </xsd:complexType> <xsd:complexType name="tabulate.tcells.type"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="tcell" type="tabulate.tcell.type" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="tabulate.type"> <xsd:sequence> <xsd:element name="tcells" type="tabulate.tcells.type" /> <xsd:element name="thead" type="tabulate.base.type" minOccurs="0" maxOccurs="1" /> <xsd:element name="ttail" type="tabulate.base.type" minOccurs="0" maxOccurs="1" /> <xsd:element name="tbody" type="tabulate.base.type" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> <xsd:element name="tabulate" type="tabulate.type" /> <?context-block end tabulate ?> </xsd:schema> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/back-pdf.mkiv�������������������������������0000644�0001750�0001750�00000046302�12130411274�024230� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=back-pdf, %D version=2009.04.15, %D title=\CONTEXT\ Backend Macros, %D subtitle=\PDF, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Backend Macros / PDF} %registerctxluafile{lpdf-aux}{1.001} % common helpers \registerctxluafile{lpdf-ini}{1.001} \registerctxluafile{lpdf-nod}{1.001} \registerctxluafile{lpdf-col}{1.000} \registerctxluafile{lpdf-xmp}{1.001} \registerctxluafile{lpdf-mis}{1.001} \registerctxluafile{lpdf-ano}{1.001} \registerctxluafile{lpdf-ren}{1.001} \registerctxluafile{lpdf-grp}{1.001} \registerctxluafile{lpdf-wid}{1.001} \registerctxluafile{lpdf-fld}{1.001} \registerctxluafile{lpdf-mov}{1.001} \registerctxluafile{lpdf-u3d}{1.001} \registerctxluafile{lpdf-swf}{1.001} \registerctxluafile{lpdf-tag}{1.001} \registerctxluafile{lpdf-fmt}{1.001} \registerctxluafile{lpdf-epd}{1.001} \registerctxluafile{lpdf-epa}{1.001} \registerctxluafile{back-pdf}{1.001} % some code will move to lpdf-* \unprotect %D We will minimize the number of calls to \PDF\ specific primitives %D and delegate all management and injection of code to the backend. %D %D Here we initialize some internal quantities. We also protect them. \pdfoutput 1 \let\pdfoutput \undefined \newcount\pdfoutput \pdfoutput 1 \pdfhorigin 1 true in \let\pdfhorigin\undefined \newdimen\pdfhorigin \pdfhorigin 1 true in \pdfvorigin 1 true in \let\pdfvorigin\undefined \newdimen\pdfvorigin \pdfvorigin 1 true in % most of these will be protected as well \pdfimageresolution 300 \pdfpkresolution 600 \pdfdecimaldigits 10 \pdfinclusionerrorlevel 0 \pdfminorversion 6 % use setupbackend for changes %D This one can be consulted by users although the suffix is also %D a system mode. \back_job_set_suffix{pdf} %D PDF/X (maybe combine the two lua calls) \setupbackend [xmpfile=] \appendtoks \doifsomething{\backendparameter{xmpfile}} {\ctxcommand{setxmpfile("\backendparameter{xmpfile}")}}% \to \everysetupbackend % \doifsomething{\backendparameter\c!format} .. at the lua end \appendtoks \ctxcommand{setformat { format = "\backendparameter\c!format", level = "\backendparameter\c!level", option = "\backendparameter\c!option", profile = "\backendparameter\c!profile", intent = "\backendparameter\c!intent", file = "\backendparameter\c!file", }}% \to \everysetupbackend %D For the moment we keep these. \newtoks \pdfbackendeveryximage \newtoks \pdfbackendeveryxform %D These are the only official methods to add stuff to the resources. \unexpanded\def\pdfbackendsetcatalog #1#2{\ctxlua{lpdf.addtocatalog ("#1",\!!bs#2\!!es)}} \unexpanded\def\pdfbackendsetinfo #1#2{\ctxlua{lpdf.addtoinfo ("#1",\!!bs#2\!!es)}} \unexpanded\def\pdfbackendsetname #1#2{\ctxlua{lpdf.addtonames ("#1",\!!bs#2\!!es)}} \unexpanded\def\pdfbackendsetpageattribute #1#2{\ctxlua{lpdf.addtopageattributes ("#1",\!!bs#2\!!es)}} \unexpanded\def\pdfbackendsetpagesattribute#1#2{\ctxlua{lpdf.addtopagesattributes("#1",\!!bs#2\!!es)}} \unexpanded\def\pdfbackendsetpageresource #1#2{\ctxlua{lpdf.addtopageresources ("#1",\!!bs#2\!!es)}} \unexpanded\def\pdfbackendsetextgstate #1#2{\ctxlua{lpdf.adddocumentextgstate ("#1",lpdf.verbose(\!!bs#2\!!es))}} \unexpanded\def\pdfbackendsetcolorspace #1#2{\ctxlua{lpdf.adddocumentcolorspace("#1",lpdf.verbose(\!!bs#2\!!es))}} \unexpanded\def\pdfbackendsetpattern #1#2{\ctxlua{lpdf.adddocumentpattern ("#1",lpdf.verbose(\!!bs#2\!!es))}} \unexpanded\def\pdfbackendsetshade #1#2{\ctxlua{lpdf.adddocumentshade ("#1",lpdf.verbose(\!!bs#2\!!es))}} \def\pdfbackendcurrentresources {\cldcontext{lpdf.collectedresources()}} \def\pdfcolor #1{\ctxlua{lpdf.pdfcolor(\thecolorattribute{#1})}} \let\PDFcolor\pdfcolor %D Let's block these: \let\pdfcatalog \relax \newtoks\pdfcatalog \let\pdfinfo \relax \newtoks\pdfinfo \let\pdfnames \relax \newtoks\pdfnames \let\pdfpageresources\relax \newtoks\pdfpageresources \let\pdfpageattr \relax \newtoks\pdfpageattr \let\pdfpagesattr \relax \newtoks\pdfpagesattr %D An example of usage is: \appendtoks % this will be moved to lua \pdfbackendsetinfo{ConTeXt.Version}{\contextversion}% \pdfbackendsetinfo{ConTeXt.Time} {\number\normalyear.\twodigits\normalmonth.\twodigits\normalday\space \twodigits\currenthour:\twodigits\currentminute}% \pdfbackendsetinfo{ConTeXt.Jobname}{\jobname}% \pdfbackendsetinfo{ConTeXt.Url} {www.pragma-ade.com}% \to \everylastbackendshipout %D Transformations. Some day we will use primitives (once they're fixed). % \def\dostartscaling#1#2% the test is needed because acrobat is bugged! % {\forcecolorhack % maybe use signal instead % \pdfliteral{q \ifdim#1\points=\zeropoint.0001\else#1\fi\space 0 0 % \ifdim#2\points=\zeropoint.0001\else#2\fi\space 0 0 cm}} % % \def\dostopscaling % {\pdfliteral{Q}} % % \def\dostartrotation#1% grouped % {\forcecolorhack % maybe use signal instead % \pdfliteral{q \cldcontext{lpdf.rotationcm(#1)}}} % % \def\dostoprotation % {\pdfliteral{Q}} % % function lpdf.rotationcm(a) % local s, c = sind(a), cosd(a) % return format("%f %f %f %f 0 0 cm",c,s,-s,c) % end % % \def\dostartmirroring{\pdfliteral{-1 0 0 1 0 0 cm}} % \def\dostopmirroring {\pdfliteral{-1 0 0 1 0 0 cm}} % todo: inject at the lua end cq. deal with #5 and #6 too \unexpanded\def\dostartrotation#1% grouped {\forcecolorhack % maybe use signal instead \advance\backendtransformlevel\plusone \pdfsave \pdfsetmatrix{\ctxcommand{pdfrotation(#1)}}} \unexpanded\def\dostoprotation {\pdfrestore \advance\backendtransformlevel\minusone} \unexpanded\def\dostartscaling#1#2% the test is needed because acrobat is bugged! {\forcecolorhack % maybe use signal instead \advance\backendtransformlevel\plusone \pdfsave \pdfsetmatrix {\ifdim#1\points=\zeropoint.0001\else#1\fi\space 0 0 \ifdim#2\points=\zeropoint.0001\else#2\fi\space}}% 0 0 \unexpanded\def\dostopscaling {\pdfrestore \advance\backendtransformlevel\minusone} \unexpanded\def\dostartmirroring {\advance\backendtransformlevel\plusone \pdfsave \pdfsetmatrix{-1 0 0 1}} % 0 0 \unexpanded\def\dostopmirroring {\pdfrestore \advance\backendtransformlevel\minusone} \unexpanded\def\dotransformnextbox#1#2#3#4#5#6% sx rx ry sy tx ty (will change) / basepoints ! {\advance\backendtransformlevel\plusone % fixing ht/dp/wd should happen elsewhere \dowithnextbox{\dodotransformnextbox{#5}{#6}{#1 #2 #3 #4}}} \unexpanded\def\dodotransformnextbox#1#2#3% {\hbox {\kern#1\onebasepoint \raise#2\onebasepoint\hbox {\pdfsave \pdfsetmatrix{#3}% 0 0 (no #5 #6 yet) \box\nextbox \pdfrestore \advance\backendtransformlevel\minusone}}} \unexpanded\def\dostartclipping#1#2#3% {\PointsToBigPoints{#2}\width \PointsToBigPoints{#3}\height \meta_grab_clip_path{#1}\width\height{0 0 m \width\space 0 l \width \height l 0 \height l}% \pdfliteral{q 0 w \MPclippath\space W n}} \unexpanded\def\dostopclipping {\pdfliteral{Q n}} %D The following will move to the backend \LUA\ code: \appendtoks \ctxlua{backends.codeinjections.finalizepage ()}\to \everybackendshipout % is immediate %appendtoks \ctxlua{backends.codeinjections.finalizedocument()}\to \everylastbackendshipout % is immediate %D Temporary hack, will be removed or improved or default. %def\TransparencyHack{\ctxlua{backends.codeinjections.addtransparencygroup()}} \def\TransparencyHack{\setupcolors[\c!pagecolormodel=\v!auto]} %D \macros %D {dostartobject,dostopobject,doinsertobject} %D This will change: \newbox\objectbox \unexpanded\def\dostartobject#1#2#3#4#5% needs to be \unexpanded {\bgroup \setbox\objectbox\vbox\bgroup \def\back_object_stop{\egroup\back_object_register{#1}{#2}}} \unexpanded\def\dostopobject % needs to be \unexpanded {\back_object_stop \egroup} % attr {/Group << /S /Transparency /I false /K true >>} \def\back_object_register#1#2% {\the\pdfbackendeveryxform \finalizeobjectbox\objectbox \immediate\pdfxform resources {\pdfbackendcurrentresources}\objectbox \dosetobjectreference{#1}{#2}{\the\pdflastxform}} \let\m_back_object_reference\empty \def\doinsertobject#1#2% {\begingroup \doifobjectreferencefoundelse{#1}{#2} {\dogetobjectreference{#1}{#2}\m_back_object_reference \pdfrefxform\m_back_object_reference}% \donothing \endgroup} \let\lastpredefinedsymbol\empty % some day we can do more at the lua end \def\predefinesymbol[#1]% {\begingroup \xdef\lastpredefinedsymbol{#1}% \settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting \dogetobjectreference{SYM}{#1}\m_back_object_reference \ctxlua{backends.codeinjections.registersymbol("#1",\m_back_object_reference)}% \endgroup} % for the moment here %D \macros %D {back_ovalbox} %D %D Drawing frames with round corners is inherited from the %D main module. %D %D For drawing ovals we use quite raw \PDF\ code. The next %D implementation does not differ that much from the one %D implemented in the \POSTSCRIPT\ driver. This code is %D somewhat obsolete as we now have metapost embedded. % \def\back_oval_calculate#1#2#3% % {\PointsToBigPoints{\dimexpr#2+#3\relax}#1} \unexpanded\def\back_ovalbox#1#2#3#4#5#6#7#8% {\forcecolorhack \bgroup % \scratchdimen#4% % \divide\scratchdimen\plustwo % \back_oval_calculate\xmin \zeropoint\scratchdimen % \back_oval_calculate\xmax {#1}{-\scratchdimen}% % \back_oval_calculate\ymax {#2}{-\scratchdimen}% % \back_oval_calculate\ymin {-#3}\scratchdimen % \advance\scratchdimen by #5% % \back_oval_calculate\xxmin \zeropoint\scratchdimen % \back_oval_calculate\xxmax {#1}{-\scratchdimen}% % \back_oval_calculate\yymax {#2}{-\scratchdimen}% % \back_oval_calculate\yymin {-#3}\scratchdimen % \back_oval_calculate\stroke{#4}\zeropoint % \back_oval_calculate\radius{#5}\zeropoint % \PointsToBigPoints{#4} \stroke \PointsToBigPoints{#5} \radius \scratchdimen\dimexpr#4/\plustwo\relax \PointsToBigPoints \scratchdimen \xmin \PointsToBigPoints{\dimexpr #1-\scratchdimen}\xmax \PointsToBigPoints{\dimexpr #2-\scratchdimen}\ymax \PointsToBigPoints{\dimexpr-#3+\scratchdimen}\ymin \advance\scratchdimen by #5\relax \PointsToBigPoints \scratchdimen \xxmin \PointsToBigPoints{\dimexpr #1-\scratchdimen}\xxmax \PointsToBigPoints{\dimexpr #2-\scratchdimen}\yymax \PointsToBigPoints{\dimexpr-#3+\scratchdimen}\yymin % \edef\dostroke{\number#6}% \edef\dofill{\number#7}% \edef\mode{\number#8}% % no \ifcase, else \relax in pdfcode \setbox\scratchbox\hbox {\ifnum\dostroke\dofill>\zerocount \pdfliteral {q \stroke\space w \ifcase\mode\space \xxmin\space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or % 1 \xxmin\space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \ymax \space l \xmin \space \ymax \space l \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or % 2 \xxmin\space \ymin \space m \xmax \space \ymin \space l \xmax \space \ymax \space l \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or % 3 \xmin \space \ymin \space m \xmax \space \ymin \space l \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \ymin \space l h \or % 4 \xmin \space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xmin \space \ymax \space l \xmin \space \ymin\space l h \or % 5 \xmin \space \ymin \space m \xmax \space \ymin \space l \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax\space \ymax \space y \xmin \space \ymax \space l \xmin \space \ymin \space l h \or % 6 \xmin \space \ymin \space m \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \ymax \space l \xmin \space \ymax \space l \xmin \space \ymin \space l h \or \xxmin\space \ymin \space m \xmax \space \ymin \space l \xmax \space \ymax \space l \xmin \space \ymax \space l \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y h \or \xmin \space \ymin \space m \xmax \space \ymin \space l \xmax \space \ymax \space l \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \ymin \space l h \or % 9 top open \xmin \space \ymax \space m \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y \xxmax\space \ymin \space l \xmax \space \ymin \space \xmax \space \yymin\space y \xmax \space \ymax \space l \or % 10 right open \xmax \space \ymax \space m \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \yymin\space l \xmin \space \ymin \space \xxmin\space \ymin \space y \xmax\space \ymin \space l \or % 11 bottom open \xmax \space \ymin \space m \xmax \space \yymax\space l \xmax \space \ymax \space \xxmax \space \ymax\space y \xxmin\space \ymax \space l \xmin \space \ymax \space \xmin \space \yymax\space y \xmin \space \ymin \space l \or % 12 left open \xmin \space \ymax \space m \xxmax\space \ymax \space l \xmax \space \ymax \space \xmax \space \yymax\space y \xmax \space \yymin\space l \xmax \space \ymin \space \xxmax\space \ymin \space y \xmin \space \ymin \space l \or % 13 \xmin \space \ymax \space m \xxmax\space \ymax \space l \xmax \space \ymax \space \xmax \space \yymax\space y \xmax\space \ymin \space l \or % 14 \xmax \space \ymax \space m \xmax \space \yymin\space l \xmax \space \ymin \space \xxmax\space \ymin \space y \xmin \space \ymin \space l \or % 15 \xmax \space \ymin \space m \xxmin\space \ymin \space l \xmin \space \ymin \space \xmin \space \yymin\space y \xmin \space \ymax \space l \or % 16 \xmin \space \ymin \space m \xmin \space \yymax\space l \xmin \space \ymax \space \xxmin\space \ymax \space y \xmax \space \ymax \space l \or % 17 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \or % 18 \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \or % 19 \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \or % 20 \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 21 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 22 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \or % 23 \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \or % 24 \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 25 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 26 \xmax \space \yymin\space m \xmax \space \ymin \space \xxmax\space \ymin \space y \xmin \space \yymax\space m \xmin \space \ymax \space \xxmin\space \ymax \space y \or % 27 \xxmax\space \ymax \space m \xmax \space \ymax \space \xmax \space \yymax\space y \xxmin\space \ymin \space m \xmin \space \ymin \space \xmin \space \yymin\space y \or % 28 \fi \ifnum\mode>8\space S \else \ifnum\dostroke=\plusone S \fi \ifnum\dofill =\plusone f \fi \fi Q}% \fi}% \wd\scratchbox#1% \ht\scratchbox#2% \dp\scratchbox#3% \box\scratchbox \egroup} \unexpanded\def\pdfactualtext#1#2% not interfaced {\pdfliteral direct{/Span <</ActualText \ctxlua{tex.write(lpdf.tosixteen("#2"))} >> BDC}% #1% \pdfliteral direct{EMC}} % \starttext % text \pdfactualtext{Meier}{Müller} text % \stoptext \protect \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-mar.mkii�������������������������������0000644�0001750�0001750�00000022430�11754241457�024307� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-mar, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Markings, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Markings} \unprotect \prependtoks \getallmarks \to \everybeforepagebody \prependtoks \setallmarks \to \everyafterpagebody % currently \relax % voor 'interne' doeleinden zijn beschikbaar: % % \fetchmark[naam][plaats] \def\mainmarking#1% {\ifcsname\??mk#1\c!coupling\endcsname \csname\??mk#1\c!coupling\endcsname \fi} \def\fastresetmarker#1% {\ifcsname\??mk#1\c!coupling\endcsname \@EA\resetmark\csname\??mk\csname\??mk#1\c!coupling\endcsname\endcsname \fi} \def\fastresetmarkerlist[#1]% {\expanded{\rawprocesscommalist[#1]}\fastresetmarker} \def\doresetmarking[#1]% {\processcommalist[#1]\fastresetmarker} \def\resetmarking {\dosingleargument\doresetmarking} \def\dosetupmarking[#1][#2]% {\def\docommand##1{\getparameters[\??mk##1][#2]}% \processcommalist[#1]\docommand} \def\setupmarking {\dodoubleargument\dosetupmarking} % betere protectie \letvalue{\??mk\??mk\v!previous}\gettopmark \letvalue{\??mk\??mk\v!first }\getfirstmark \letvalue{\??mk\??mk\v!last }\getbotmark \letvalue{\??mk\??mk\v!current }\getcurrentmark % todo: make it work in balancing % % \definemarking[vers][] % \setupheadertexts % [\doiftext{\getmarking[vers][first]} % {\doiftextelse{\getmarking[vers][column:last]} % {\getmarking[vers][first] -- \getmarking[vers][column:last]} % {\getmarking[vers][first]}}] % \starttext % \startcolumns[n=2,balance=no] % \dorecurse{10}{\expanded{\marking[vers]{\recurselevel}} \recurselevel:\dorecurse{4}{\input ward } \endgraf} % \stopcolumns % \stoptext \letvalue{\??mk\??mk\v!column:\v!first}\getsplitfirstmark \letvalue{\??mk\??mk\v!column:\v!last }\getsplitbottommark \ifx\decouplemarking\undefined \def\decouplemarking[#1]{} \fi \let\alldefinedmarks\empty \def\dododefinemarking[#1][#2]% {\getparameters[\??mk#1] [\c!expansion=\v!no, % saves a macro \c!separator={\space\emdash\space}, \c!limittext=\@@kolimittext, \c!state=\v!start]% \decouplemarking[#1]% % no coupling with sections \setevalue{\??mk#1\c!coupling}{#2}% \doglobal\addtocommalist{#2}\alldefinedmarks \expandafter\newmark\csname\??mk#2\endcsname \showmessage\m!systems{13}{#1,[#2]}} \def\dodefinemarking[#1][#2]% {\doifelsenothing{#2} {\dododefinemarking[#1][#1]} {\dododefinemarking[#1][#2]}} \def\definemarking {\dodoubleempty\dodefinemarking} \def\definerawmarking[#1]% global ! ! ! ! {\getgparameters[\??mk#1] [\c!expansion=\v!no, % saves a macro \c!separator={ --- }, % watch the spaces \c!limittext=, \c!state=\v!start]% \setxvalue{\??mk#1\c!coupling}{#1}% \expandafter\newmark\csname\??mk#1\endcsname \showmessage\m!systems{13}{#1}} \let\nomarking\empty \def\fetchmark[#1][#2]% % expandable / never use \unexpanded {\ifcsname\??mk::#1\endcsname % saved mark \csname\??mk::\??mk::#2\@EA\@EA\@EA\endcsname \csname\??mk::#1\endcsname \else\ifcsname\??mk#1\c!coupling\endcsname % real mark \csname\??mk\??mk#2\@EA\endcsname \csname\??mk\csname\??mk#1\c!coupling\endcsname\endcsname \fi\fi} \letvalue{\??mk::\??mk::\v!previous}\firstoffourarguments \letvalue{\??mk::\??mk::\v!first }\secondoffourarguments \letvalue{\??mk::\??mk::\v!last }\thirdoffourarguments \letvalue{\??mk::\??mk::\v!current }\fourthoffourarguments % this version can be used when a page is built up in steps without % feedback of the otr'd list to the mvl (i.e.\ a page made of pages, % as in column sets where content is buffered) % reset at begin % preset before page % bubble in column % refresh at end \def\refreshsavedmark[#1][#2]% mark tag (packing saves many hash entries) {\setxvalue{\??mk::#1:#2}% {{\@EA\ifx\csname\??mk::#1:pp\endcsname\relax % empty \else \csname\??mk::#1:pp\endcsname \fi}% {\@EA\ifx\csname\??mk::#1:ff\endcsname\relax \fetchmark[#1][\v!first]% \else \csname\??mk::#1:ff\endcsname \fi}% {\fetchmark[#1][\v!last]}% {\fetchmark[#1][\v!current]}}% \setxvalue{\??mk::#1:pp}{\fetchmark[#1][\v!first]}% \letgvalue{\??mk::#1:ff}\relax } \def\bubblesavedmark[#1][#2]% no packing (not now, maybe make a six-pack later) {\@EA\ifx\csname\??mk::#1:ff\endcsname\relax \setxvalue{\??mk::#1:ff}{\fetchmark[#1][\v!first]}% \fi} \def\resetsavedmark[#1][#2]% mark tag {\doifelsenothing{\fetchmark[#1][\v!previous]} {\letgvalue{\??mk::#1:pp}\relax} {\setxvalue{\??mk::#1:pp}{\fetchmark[#1][\v!previous]}}% \doifelsenothing{\fetchmark[#1][\v!first]} {\letgvalue{\??mk::#1:ff}\relax} {\setxvalue{\??mk::#1:ff}{\fetchmark[#1][\v!first]}}% \letgvalue{\??mk::#1:#2}\emptysavedmark} \def\presetsavedmark[#1][#2]% mark tag {\letgvalue{\??mk::#1:#2}\emptysavedmark} \def\emptysavedmark{{}{}{}{}} % new (can be used in column sets) % % \getsavedmarking[M][previous] % \getsavedmarking[M][first] % \getsavedmarking[M][last] \def\getsavedmarking {\dodoubleargument\dogetsavedmarking} \def\dogetsavedmarking[#1][#2]% {\doifelse{#2}\v!previous {\getmarking[#1][1][\v!previous]} {\doifelse{#2}\v!first {\getmarking[#1][1][\v!first]} {\getmarking[#1][\v!last]}}} % fetching \def\fetchtwomarks[#1]% {\dofetchtwomarks[#1][#1]} \def\fetchallmarks[#1]% {\dofetchallmarks[#1][#1]} \def\dofetchtwomarks[#1][#2]% class class:tag {\doifsomething{\fetchmark[#2][\v!first]} {\fetchmark[#2][\v!first]% \doifsomething{\fetchmark[#2][\v!last]} {\doifnot{\fetchmark[#2][\v!first]}{\fetchmark[#2][\v!last]} {\getvalue{\??mk#1\c!separator}\fetchmark[#2][\v!last]}}}} \def\dofetchallmarks[#1][#2]% {\doifsomething{\fetchmark[#2][\v!first]} {\doifsomething{\fetchmark[#2][\v!previous]} {\doifnot{\fetchmark[#2][\v!previous]}{\fetchmark[#2][\v!first]} {\fetchmark[#2][\v!previous]\getvalue{\??mk#1\c!separator}}}}% \fetchtwomarks[#1][#2]} % \newtoks \everymarking % \def\Interesting{\doifmodeelse{*\v!marking}{Interesting}{Boring}} % \setupheadertexts[chapter] % \starttext % \chapter{This Is \Interesting} % \stoptext \def\dogetmarking[#1][#2][#3]% {\doifvalue{\??mk#1\c!state}\v!start {\bgroup \setsystemmode\v!marking \the\everymarking %\def\nomarking##1{\unknown\ }% \def\nomarking{\splitsequence{\getvalue{\??mk#1\c!limittext}}}% \setfullsectionnumber{\??mk#1}% \ifthirdargument \processaction % slow [#3] [ \v!both=>{\dofetchtwomarks[#1][#1:#2]}, \v!all=>{\dofetchallmarks[#1][#1:#2]}, \s!default=>{\fetchmark [#1:#2][\v!first]}, \s!unknown=>{\fetchmark [#1:#2][#3]}]% \else \processaction % slow [#2] [ \v!both=>{\dofetchtwomarks[#1][#1]}, \v!all=>{\dofetchallmarks[#1][#1]}, \s!default=>{\fetchmark [#1][\v!first]}, \s!unknown=>{\fetchmark [#1][#2]}]% \fi \egroup}} \def\nogetmarking[#1][#2][#3]% {} \unexpanded\def\getmarking {\dotripleargument\dogetmarking} \let\setsomemark\setmark \def\domarking[#1]#2% {\ifcsname\??mk#1\c!coupling\endcsname \bgroup \doifelsevalue{\??mk#1\c!expansion}\v!yes \expandmarkstrue\expandmarksfalse \@EA\setsomemark\csname\??mk\csname\??mk#1\c!coupling\endcsname\endcsname{#2}% \egroup \fi} \def\marking {\dosingleargument\domarking} %D Used in placing text lines. \def\doifelsemarking#1% {\ifundefined{\??mk#1\c!coupling}% \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} %D And then \unknown\ we had a chaptertitle packaged in a %D makeup environment. And we don't want to loose marks there! \newbox\collectedmarks \def\flushmarks % use with care to avoid empty pages {\ifvoid\collectedmarks\else\unhbox\collectedmarks\fi} \def\postponemarks {\let\setsomemark\postponemark} \def\postponemark#1#2% {%\writestatus{marks}{postponing \string#1 => #2}% \global\setbox\collectedmarks\hbox {\unhbox\collectedmarks\setmark{#1}{#2}}} \protect \endinput % Pseudo marks: (for Hraban) % % \def\RegisterPageMark#1#2% % {\iftrialtypesetting \else % \doglobal\increment\NameCounter % \textreference[#1:t:\NameCounter]{#2}% % \doifreferencefoundelse{#1:t:\NameCounter} % {\doifundefined{#1:f:\currentrealreference}% % {\setxvalue{#1:f:\currentrealreference}% % {\noexpand\in[#1:t:\NameCounter]}}% % \setxvalue{#1:l:\currentrealreference}% % {\noexpand\in[#1:t:\NameCounter]}}% % {}% % \fi} % % \def\GetFirstOnPage#1{\getvalue{#1:f:\realfolio}} % \def\GetLastOnPage #1{\getvalue{#1:l:\realfolio}} % % \setupheadertexts[\GetFirstOnPage{Name}][\GetLastOnPage{Name}] % % \starttext % % \def\Name#1{\RegisterPageMark{Name}{#1}#1} % \def\TestLine#1{\NC test \NC \Name {test: #1} \NC \NR} % % \starttabulate % \dorecurse{100}{\expanded{\TestLine{\recurselevel}}} % \stoptabulate % % \stoptext ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/data-tre.lua��������������������������������0000644�0001750�0001750�00000004714�12130411274�024076� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['data-tre'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- \input tree://oeps1/**/oeps.tex local find, gsub, format = string.find, string.gsub, string.format local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local report_trees = logs.reporter("resolvers","trees") local resolvers = resolvers local done, found, notfound = { }, { }, resolvers.finders.notfound function resolvers.finders.tree(specification) local spec = specification.filename local fnd = found[spec] if fnd == nil then if spec ~= "" then local path, name = file.dirname(spec), file.basename(spec) if path == "" then path = "." end local hash = done[path] if not hash then local pattern = path .. "/*" -- we will use the proper splitter hash = dir.glob(pattern) done[path] = hash end local pattern = "/" .. gsub(name,"([%.%-%+])", "%%%1") .. "$" for k=1,#hash do local v = hash[k] if find(v,pattern) then found[spec] = v return v end end end fnd = notfound() -- false found[spec] = fnd end return fnd end function resolvers.locators.tree(specification) local name = specification.filename local realname = resolvers.resolve(name) -- no shortcut if realname and realname ~= '' and lfs.isdir(realname) then if trace_locating then report_trees("locator %a found",realname) end resolvers.appendhash('tree',name,false) -- don't cache elseif trace_locating then report_trees("locator %a not found",name) end end function resolvers.hashers.tree(specification) local name = specification.filename if trace_locating then report_trees("analysing %a",name) end resolvers.methodhandler("hashers",name) resolvers.generators.file(specification) end resolvers.concatinators.tree = resolvers.concatinators.file resolvers.generators.tree = resolvers.generators.file resolvers.openers.tree = resolvers.openers.file resolvers.loaders.tree = resolvers.loaders.file ����������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv����������������0000644�0001750�0001750�00000003745�12161703335�027325� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=s-languages-hyphenation, % s-lan-04, %D version=2011.05.01, %D title=\CONTEXT\ Style File, %D subtitle=Language Hyphenation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For Mojca. \startmodule[languages-hyphenation] \registerctxluafile{s-languages-hyphenation}{} \unprotect \unexpanded\def\startcomparepatterns {\dosingleempty\module_languages_hyphenation_start} \unexpanded\def\module_languages_hyphenation_start[#1]% {\begingroup \par % \language\zerocount \setupalign[\v!nothyphenated]% \ctxlua{moduledata.languages.hyphenation.startcomparepatterns("#1")}} \unexpanded\def\stopcomparepatterns {\par \ctxlua{moduledata.languages.hyphenation.stopcomparepatterns()}% \endgroup} \installmodulecommandluasingle \showcomparepatternslegend {moduledata.languages.hyphenation.showcomparelegend} \protect \definecolor[hyphenation:1] [r=.8] \definecolor[hyphenation:2] [g=.8] \definecolor[hyphenation:3] [b=.8] \definecolor[hyphenation:4] [r=.4,g=.4] \definecolor[hyphenation:en] [hyphenation:1] \definecolor[hyphenation:de] [hyphenation:2] \definecolor[hyphenation:nl] [hyphenation:3] \definecolor[hyphenation:fr] [hyphenation:4] \stopmodule \continueifinputfile{s-languages-hyphenation.mkiv} \usemodule[art-01] \starttext \startsubject{Normal text} \input tufte \stopsubject \startsubject{Compare hyphenation points of \showcomparepatternslegend[en,de]} \startcomparepatterns \input tufte \quad (\showcomparepatternslegend) \stopcomparepatterns \stopsubject \startsubject{Compare hyphenation points} \startcomparepatterns[de,nl,en,fr] \input tufte \quad (\showcomparepatternslegend) \stopcomparepatterns \stopsubject \stoptext ���������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/core-ini.mkii�������������������������������0000644�0001750�0001750�00000004743�11754241457�024273� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=core-ini, %D version=2003.12.01, %D title=\CONTEXT\ Core Macros, %D subtitle=Additional Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Additional Initialization} %D We will move more code to here, so that we become less dependent of the %D orde in which modules are loaded. \unprotect \everypar \emptytoks \neverypar \emptytoks \appendtoks \flushnotes \to \everypar \appendtoks \synchronizesidefloats \to \everypar \appendtoks \checkinlinedirection \to \everypar \appendtoks \checkindentation \to \everypar \appendtoks \showparagraphnumber \to \everypar \appendtoks \flushmargincontents \to \everypar \appendtoks \flushcommentanchors \to \everypar \appendtoks \synchronizenotes \to \everypar \appendtoks \OTRSETshowstatus \to \everypar \appendtoks \flushpostponedbookmark \to \everypar \appendtoks \registerparoptions \to \everypar \appendtoks \flushsyncpositions \to \everypar \appendtoks \flushpostponednodedata \to \everypar \appendtoks \dohandlerepeatdelimitedtext \to \everypar \appendtoks \insertparagraphintro \to \everypar \appendtoks \flushpostponedbookmark \to \neverypar \appendtoks \flushpostponedbookmark \to \everylistentry \appendtoks \flushnotes \to \everydisplay \appendtoks \adjustsidefloatdisplaylines \to \everydisplay \appendtoks \flushsyncpositions \to \everyheadstart \appendtoks \flushsyncresets \to \everyendoftextbody \appendtoks \ignorespaces \to \everybeginofpar \appendtoks \removeunwantedspaces \to \everyendofpar %appendtoks \strut \to \everyendofpar % option ? \appendtoks \flushsyncresets \to \everyendofpar \appendtoks \setlastlinewidth \to \everyendofpar % must happen before endgraf \appendtoks \endgraf \to \everyendofpar % Todo: verbatim, xml, tex, move code to here \ifx\normalcompound\undefined \let\normalcompound=| \fi \appendtoks \catcode`|=\@@active \let|\normalcompound \to \everyTEXinputmode \appendtoks \catcode`|=\@@letter \to \everyXMLinputmode \protect \endinput �����������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-aux.lua��������������������������������0000644�0001750�0001750�00000056374�12130411274�024155� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['lxml-aux'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- not all functions here make sense anymore vbut we keep them for -- compatibility reasons local trace_manipulations = false trackers.register("lxml.manipulations", function(v) trace_manipulations = v end) local report_xml = logs.reporter("xml") local xml = xml local xmlconvert, xmlcopy, xmlname = xml.convert, xml.copy, xml.name local xmlinheritedconvert = xml.inheritedconvert local xmlapplylpath = xml.applylpath local xmlfilter = xml.filter local type, setmetatable, getmetatable = type, setmetatable, getmetatable local insert, remove, fastcopy, concat = table.insert, table.remove, table.fastcopy, table.concat local gmatch, gsub, format, find, strip = string.gmatch, string.gsub, string.format, string.find, string.strip local utfbyte = utf.byte local function report(what,pattern,c,e) report_xml("%s element %a, root %a, position %a, index %a, pattern %a",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern) end local function withelements(e,handle,depth) if e and handle then local edt = e.dt if edt then depth = depth or 0 for i=1,#edt do local e = edt[i] if type(e) == "table" then handle(e,depth) withelements(e,handle,depth+1) end end end end end xml.withelements = withelements function xml.withelement(e,n,handle) -- slow if e and n ~= 0 and handle then local edt = e.dt if edt then if n > 0 then for i=1,#edt do local ei = edt[i] if type(ei) == "table" then if n == 1 then handle(ei) return else n = n - 1 end end end elseif n < 0 then for i=#edt,1,-1 do local ei = edt[i] if type(ei) == "table" then if n == -1 then handle(ei) return else n = n + 1 end end end end end end end function xml.each(root,pattern,handle,reverse) local collected = xmlapplylpath(root,pattern) if collected then if reverse then for c=#collected,1,-1 do handle(collected[c]) end else for c=1,#collected do handle(collected[c]) end end return collected end end function xml.processattributes(root,pattern,handle) local collected = xmlapplylpath(root,pattern) if collected and handle then for c=1,#collected do handle(collected[c].at) end end return collected end --[[ldx-- <p>The following functions collect elements and texts.</p> --ldx]]-- -- are these still needed -> lxml-cmp.lua function xml.collect(root, pattern) return xmlapplylpath(root,pattern) end function xml.collecttexts(root, pattern, flatten) -- todo: variant with handle local collected = xmlapplylpath(root,pattern) if collected and flatten then local xmltostring = xml.tostring for c=1,#collected do collected[c] = xmltostring(collected[c].dt) end end return collected or { } end function xml.collect_tags(root, pattern, nonamespace) local collected = xmlapplylpath(root,pattern) if collected then local t, n = { }, 0 for c=1,#collected do local e = collected[c] local ns, tg = e.ns, e.tg n = n + 1 if nonamespace then t[n] = tg elseif ns == "" then t[n] = tg else t[n] = ns .. ":" .. tg end end return t end end --[[ldx-- <p>We've now arrived at the functions that manipulate the tree.</p> --ldx]]-- local no_root = { no_root = true } local function redo_ni(d) for k=1,#d do local dk = d[k] if type(dk) == "table" then dk.ni = k end end end local function xmltoelement(whatever,root) if not whatever then return nil end local element if type(whatever) == "string" then element = xmlinheritedconvert(whatever,root) -- beware, not really a root else element = whatever -- we assume a table end if element.error then return whatever -- string end if element then --~ if element.ri then --~ element = element.dt[element.ri].dt --~ else --~ element = element.dt --~ end end return element end xml.toelement = xmltoelement local function copiedelement(element,newparent) if type(element) == "string" then return element else element = xmlcopy(element).dt if newparent and type(element) == "table" then element.__p__ = newparent end return element end end function xml.delete(root,pattern) if not pattern or pattern == "" then local p = root.__p__ if p then if trace_manipulations then report('deleting',"--",c,root) end local d = p.dt remove(d,root.ni) redo_ni(d) -- can be made faster and inlined end else local collected = xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e = collected[c] local p = e.__p__ if p then if trace_manipulations then report('deleting',pattern,c,e) end local d = p.dt remove(d,e.ni) redo_ni(d) -- can be made faster and inlined end end end end end function xml.replace(root,pattern,whatever) local element = root and xmltoelement(whatever,root) local collected = element and xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e = collected[c] local p = e.__p__ if p then if trace_manipulations then report('replacing',pattern,c,e) end local d = p.dt d[e.ni] = copiedelement(element,p) redo_ni(d) -- probably not needed end end end end local function wrap(e,wrapper) local t = { rn = e.rn, tg = e.tg, ns = e.ns, at = e.at, dt = e.dt, __p__ = e, } setmetatable(t,getmetatable(e)) e.rn = wrapper.rn or e.rn or "" e.tg = wrapper.tg or e.tg or "" e.ns = wrapper.ns or e.ns or "" e.at = fastcopy(wrapper.at) e.dt = { t } end function xml.wrap(root,pattern,whatever) if whatever then local wrapper = xmltoelement(whatever,root) local collected = xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e = collected[c] if trace_manipulations then report('wrapping',pattern,c,e) end wrap(e,wrapper) end end else wrap(root,xmltoelement(pattern)) end end local function inject_element(root,pattern,whatever,prepend) local element = root and xmltoelement(whatever,root) local collected = element and xmlapplylpath(root,pattern) local function inject_e(e) local r = e.__p__ local d, k, rri = r.dt, e.ni, r.ri local edt = (rri and d[rri].dt) or (d and d[k] and d[k].dt) if edt then local be, af local cp = copiedelement(element,e) if prepend then be, af = cp, edt else be, af = edt, cp end local bn = #be for i=1,#af do bn = bn + 1 be[bn] = af[i] end if rri then r.dt[rri].dt = be else d[k].dt = be end redo_ni(d) end end if not collected then -- nothing elseif collected.tg then -- first or so inject_e(collected) else for c=1,#collected do inject_e(collected[c]) end end end local function insert_element(root,pattern,whatever,before) -- todo: element als functie local element = root and xmltoelement(whatever,root) local collected = element and xmlapplylpath(root,pattern) local function insert_e(e) local r = e.__p__ local d, k = r.dt, e.ni if not before then k = k + 1 end insert(d,k,copiedelement(element,r)) redo_ni(d) end if not collected then -- nothing elseif collected.tg then -- first or so insert_e(collected) else for c=1,#collected do insert_e(collected[c]) end end end xml.insert_element = insert_element xml.insertafter = insert_element xml.insertbefore = function(r,p,e) insert_element(r,p,e,true) end xml.injectafter = inject_element xml.injectbefore = function(r,p,e) inject_element(r,p,e,true) end local function include(xmldata,pattern,attribute,recursive,loaddata) -- parse="text" (default: xml), encoding="" (todo) -- attribute = attribute or 'href' pattern = pattern or 'include' loaddata = loaddata or io.loaddata local collected = xmlapplylpath(xmldata,pattern) if collected then for c=1,#collected do local ek = collected[c] local name = nil local ekdt = ek.dt local ekat = ek.at local epdt = ek.__p__.dt if not attribute or attribute == "" then name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- check, probably always tab or str end if not name then for a in gmatch(attribute or "href","([^|]+)") do name = ekat[a] if name then break end end end local data = (name and name ~= "" and loaddata(name)) or "" if data == "" then epdt[ek.ni] = "" -- xml.empty(d,k) elseif ekat["parse"] == "text" then -- for the moment hard coded epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data) else --~ local settings = xmldata.settings --~ settings.parent_root = xmldata -- to be tested --~ local xi = xmlconvert(data,settings) local xi = xmlinheritedconvert(data,xmldata) if not xi then epdt[ek.ni] = "" -- xml.empty(d,k) else if recursive then include(xi,pattern,attribute,recursive,loaddata) end epdt[ek.ni] = xml.body(xi) -- xml.assign(d,k,xi) end end end end end xml.include = include local function stripelement(e,nolines,anywhere) local edt = e.dt if edt then if anywhere then local t, n = { }, 0 for e=1,#edt do local str = edt[e] if type(str) ~= "string" then n = n + 1 t[n] = str elseif str ~= "" then -- todo: lpeg for each case if nolines then str = gsub(str,"%s+"," ") end str = gsub(str,"^%s*(.-)%s*$","%1") if str ~= "" then n = n + 1 t[n] = str end end end e.dt = t else -- we can assume a regular sparse xml table with no successive strings -- otherwise we should use a while loop if #edt > 0 then -- strip front local str = edt[1] if type(str) ~= "string" then -- nothing elseif str == "" then remove(edt,1) else if nolines then str = gsub(str,"%s+"," ") end str = gsub(str,"^%s+","") if str == "" then remove(edt,1) else edt[1] = str end end end local nedt = #edt if nedt > 0 then -- strip end local str = edt[nedt] if type(str) ~= "string" then -- nothing elseif str == "" then remove(edt) else if nolines then str = gsub(str,"%s+"," ") end str = gsub(str,"%s+$","") if str == "" then remove(edt) else edt[nedt] = str end end end end end return e -- convenient end xml.stripelement = stripelement function xml.strip(root,pattern,nolines,anywhere) -- strips all leading and trailing spacing local collected = xmlapplylpath(root,pattern) -- beware, indices no longer are valid now if collected then for i=1,#collected do stripelement(collected[i],nolines,anywhere) end end end local function renamespace(root, oldspace, newspace) -- fast variant local ndt = #root.dt for i=1,ndt or 0 do local e = root[i] if type(e) == "table" then if e.ns == oldspace then e.ns = newspace if e.rn then e.rn = newspace end end local edt = e.dt if edt then renamespace(edt, oldspace, newspace) end end end end xml.renamespace = renamespace function xml.remaptag(root, pattern, newtg) local collected = xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].tg = newtg end end end function xml.remapnamespace(root, pattern, newns) local collected = xmlapplylpath(root,pattern) if collected then for c=1,#collected do collected[c].ns = newns end end end function xml.checknamespace(root, pattern, newns) local collected = xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e = collected[c] if (not e.rn or e.rn == "") and e.ns == "" then e.rn = newns end end end end function xml.remapname(root, pattern, newtg, newns, newrn) local collected = xmlapplylpath(root,pattern) if collected then for c=1,#collected do local e = collected[c] e.tg, e.ns, e.rn = newtg, newns, newrn end end end --[[ldx-- <p>Helper (for q2p).</p> --ldx]]-- function xml.cdatatotext(e) local dt = e.dt if #dt == 1 then local first = dt[1] if first.tg == "@cd@" then e.dt = first.dt end else -- maybe option end end -- local x = xml.convert("<x><a>1<b>2</b>3</a></x>") -- xml.texttocdata(xml.first(x,"a")) -- print(x) -- <x><![CDATA[1<b>2</b>3]]></x> function xml.texttocdata(e) -- could be a finalizer local dt = e.dt local s = xml.tostring(dt) -- no shortcut? e.tg = "@cd@" e.special = true e.ns = "" e.rn = "" e.dt = { s } e.at = nil end -- local x = xml.convert("<x><a>1<b>2</b>3</a></x>") -- xml.tocdata(xml.first(x,"a")) -- print(x) -- <x><![CDATA[<a>1<b>2</b>3</a>]]></x> function xml.elementtocdata(e) -- could be a finalizer local dt = e.dt local s = xml.tostring(e) -- no shortcut? e.tg = "@cd@" e.special = true e.ns = "" e.rn = "" e.dt = { s } e.at = nil end xml.builtinentities = table.tohash { "amp", "quot", "apos", "lt", "gt" } -- used often so share local entities = characters and characters.entities or nil local builtinentities = xml.builtinentities function xml.addentitiesdoctype(root,option) -- we could also have a 'resolve' i.e. inline hex if not entities then require("char-ent") entities = characters.entities end if entities and root and root.tg == "@rt@" and root.statistics then local list = { } local hexify = option == "hexadecimal" for k, v in table.sortedhash(root.statistics.entities.names) do if not builtinentities[k] then local e = entities[k] if not e then e = format("[%s]",k) elseif hexify then e = format("&#%05X;",utfbyte(k)) end list[#list+1] = format(" <!ENTITY %s %q >",k,e) end end local dt = root.dt local n = dt[1].tg == "@pi@" and 2 or 1 if #list > 0 then insert(dt, n, { "\n" }) insert(dt, n, { tg = "@dt@", -- beware, doctype is unparsed dt = { format("Something [\n%s\n] ",concat(list)) }, ns = "", special = true, }) insert(dt, n, { "\n\n" }) else -- insert(dt, n, { table.serialize(root.statistics) }) end end end -- local str = [==[ -- <?xml version='1.0' standalone='yes' ?> -- <root> -- <a>test   test { test</a> -- <b><![CDATA[oeps]]></b> -- </root> -- ]==] -- -- local x = xml.convert(str) -- xml.addentitiesdoctype(x,"hexadecimal") -- print(x) --[[ldx-- <p>Here are a few synonyms.</p> --ldx]]-- xml.all = xml.each xml.insert = xml.insertafter xml.inject = xml.injectafter xml.after = xml.insertafter xml.before = xml.insertbefore xml.process = xml.each -- obsolete xml.obsolete = xml.obsolete or { } local obsolete = xml.obsolete xml.strip_whitespace = xml.strip obsolete.strip_whitespace = xml.strip xml.collect_elements = xml.collect obsolete.collect_elements = xml.collect xml.delete_element = xml.delete obsolete.delete_element = xml.delete xml.replace_element = xml.replace obsolete.replace_element = xml.replacet xml.each_element = xml.each obsolete.each_element = xml.each xml.process_elements = xml.process obsolete.process_elements = xml.process xml.insert_element_after = xml.insertafter obsolete.insert_element_after = xml.insertafter xml.insert_element_before = xml.insertbefore obsolete.insert_element_before = xml.insertbefore xml.inject_element_after = xml.injectafter obsolete.inject_element_after = xml.injectafter xml.inject_element_before = xml.injectbefore obsolete.inject_element_before = xml.injectbefore xml.process_attributes = xml.processattributes obsolete.process_attributes = xml.processattributes xml.collect_texts = xml.collecttexts obsolete.collect_texts = xml.collecttexts xml.inject_element = xml.inject obsolete.inject_element = xml.inject xml.remap_tag = xml.remaptag obsolete.remap_tag = xml.remaptag xml.remap_name = xml.remapname obsolete.remap_name = xml.remapname xml.remap_namespace = xml.remapnamespace obsolete.remap_namespace = xml.remapnamespace -- new (probably ok) function xml.cdata(e) if e then local dt = e.dt if dt and #dt == 1 then local first = dt[1] return first.tg == "@cd@" and first.dt[1] or "" end end return "" end function xml.finalizers.xml.cdata(collected) if collected then local e = collected[1] if e then local dt = e.dt if dt and #dt == 1 then local first = dt[1] return first.tg == "@cd@" and first.dt[1] or "" end end end return "" end function xml.insertcomment(e,str,n) -- also insertcdata table.insert(e.dt,n or 1,{ tg = "@cm@", ns = "", special = true, at = { }, dt = { str }, }) end function xml.setcdata(e,str) -- also setcomment e.dt = { { tg = "@cd@", ns = "", special = true, at = { }, dt = { str }, } } end -- maybe helpers like this will move to an autoloader function xml.separate(x,pattern) local collected = xmlapplylpath(x,pattern) if collected then for c=1,#collected do local e = collected[c] local d = e.dt if d == x then report_xml("warning: xml.separate changes root") x = d end local t, n = { "\n" }, 1 local i, nd = 1, #d while i <= nd do while i <= nd do local di = d[i] if type(di) == "string" then if di == "\n" or find(di,"^%s+$") then -- first test is speedup i = i + 1 else d[i] = strip(di) break end else break end end if i > nd then break end t[n+1] = "\n" t[n+2] = d[i] t[n+3] = "\n" n = n + 3 i = i + 1 end t[n+1] = "\n" setmetatable(t,getmetatable(d)) e.dt = t end end return x end -- local helpers = xml.helpers or { } xml.helpers = helpers local function normal(e,action) local edt = e.dt if edt then for i=1,#edt do local str = edt[i] if type(str) == "string" and str ~= "" then edt[i] = action(str) end end end end local function recurse(e,action) local edt = e.dt if edt then for i=1,#edt do local str = edt[i] if type(str) ~= "string" then recurse(str,action,recursive) elseif str ~= "" then edt[i] = action(str) end end end end function helpers.recursetext(collected,action,recursive) if recursive then for i=1,#collected do recurse(collected[i],action) end else for i=1,#collected do normal(collected[i],action) end end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-chemml.lua��������������������������������0000644�0001750�0001750�00000003327�12130411274�024106� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['x-chemml'] = { version = 1.001, comment = "companion to x-chemml.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- not yet acceptable cld local format, lower, upper, gsub, sub, match = string.format, string.lower, string.upper, string.gsub, string.sub, string.match local concat = table.concat local chemml = { } local moduledata = moduledata or { } moduledata.chemml = chemml function chemml.pi(id) local str = xml.content(lxml.id(id)) local _, class, key, value = match(str,"^(%S+)%s+(%S+)%s+(%S+)%s+(%S+)%s*$") if key and value then context("\\setupCMLappearance[%s][%s=%s]",class, key, value) end end function chemml.do_graphic(id) local t = { } for r, d, k in xml.elements(lxml.id(id),"cml:graphic") do t[#t+1] = xml.tostring(d[k].dt) end context(concat(t,",")) end function chemml.no_graphic(id) local t = { } for r, d, k in xml.elements(lxml.id(id),"cml:text|cml:oxidation|cml:annotation") do local dk = d[k] if dk.tg == "oxidation" then t[#t+1] = format("\\chemicaloxidation{%s}{%s}{%s}",r.at.sign or "",r.at.n or 1,xml.tostring(dk.dt)) elseif dk.tg == "annotation" then local location = r.at.location or "r" local caption = xml.content(xml.first(dk,"cml:caption")) local text = xml.content(xml.first(dk,"cml:text")) t[#t+1] = format("\\doCMLannotation{%s}{%s}{%s}",location,caption,text) else t[#t+1] = xml.tostring(dk.dt) or "" end end context(concat(t,",")) end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/util-seq.lua��������������������������������0000644�0001750�0001750�00000022702�12130411274�024135� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['util-seq'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx-- <p>Here we implement a mechanism for chaining the special functions that we use in <l n="context"> to deal with mode list processing. We assume that namespaces for the functions are used, but for speed we use locals to refer to them when compiling the chain.</p> --ldx]]-- -- todo: delayed: i.e. we register them in the right order already but delay usage -- todo: protect groups (as in tasks) local format, gsub, concat, gmatch = string.format, string.gsub, table.concat, string.gmatch local type, load = type, load utilities = utilities or { } local tables = utilities.tables local allocate = utilities.storage.allocate local sequencers = { } utilities.sequencers = sequencers local functions = allocate() sequencers.functions = functions local removevalue = tables.removevalue local insertaftervalue = tables.insertaftervalue local insertbeforevalue = tables.insertbeforevalue local function validaction(action) if type(action) == "string" then local g = _G for str in gmatch(action,"[^%.]+") do g = g[str] if not g then return false end end end return true end local compile local known = { } -- just a convenience, in case we want public access (only to a few methods) function sequencers.new(t) -- was reset local s = { list = { }, order = { }, kind = { }, askip = { }, gskip = { }, dirty = true, runner = nil, } if t then s.arguments = t.arguments s.returnvalues = t.returnvalues s.results = t.results local name = t.name if name and name ~= "" then s.name = name known[name] = s end end table.setmetatableindex(s,function(t,k) -- this will automake a dirty runner if k == "runner" then local v = compile(t,t.compiler) return v end end) known[s] = s -- saves test for string later on return s end function sequencers.prependgroup(t,group,where) t = known[t] if t then local order = t.order removevalue(order,group) insertbeforevalue(order,where,group) t.list[group] = { } t.dirty = true t.runner = nil end end function sequencers.appendgroup(t,group,where) t = known[t] if t then local order = t.order removevalue(order,group) insertaftervalue(order,where,group) t.list[group] = { } t.dirty = true t.runner = nil end end function sequencers.prependaction(t,group,action,where,kind,force) t = known[t] if t then local g = t.list[group] if g and (force or validaction(action)) then removevalue(g,action) insertbeforevalue(g,where,action) t.kind[action] = kind t.dirty = true t.runner = nil end end end function sequencers.appendaction(t,group,action,where,kind,force) t = known[t] if t then local g = t.list[group] if g and (force or validaction(action)) then removevalue(g,action) insertaftervalue(g,where,action) t.kind[action] = kind t.dirty = true t.runner = nil end end end function sequencers.enableaction(t,action) t = known[t] if t then t.askip[action] = false t.dirty = true t.runner = nil end end function sequencers.disableaction(t,action) t = known[t] if t then t.askip[action] = true t.dirty = true t.runner = nil end end function sequencers.enablegroup(t,group) t = known[t] if t then t.gskip[action] = false t.dirty = true t.runner = nil end end function sequencers.disablegroup(t,group) t = known[t] if t then t.gskip[action] = true t.dirty = true t.runner = nil end end function sequencers.setkind(t,action,kind) t = known[t] if t then t.kind[action] = kind t.dirty = true t.runner = nil end end function sequencers.removeaction(t,group,action,force) t = known[t] local g = t and t.list[group] if g and (force or validaction(action)) then removevalue(g,action) t.dirty = true t.runner = nil end end local function localize(str) return (gsub(str,"[%.: ]+","_")) end local function construct(t) local list, order, kind, gskip, askip = t.list, t.order, t.kind, t.gskip, t.askip local arguments, returnvalues, results = t.arguments or "...", t.returnvalues, t.results local variables, calls, n = { }, { }, 0 for i=1,#order do local group = order[i] if not gskip[group] then local actions = list[group] for i=1,#actions do local action = actions[i] if not askip[action] then if type(action) == "function" then local name = localize(tostring(action)) functions[name] = action action = format("utilities.sequencers.functions.%s",name) end local localized = localize(action) n = n + 1 variables[n] = format("local %s = %s",localized,action) if not returnvalues then calls[n] = format("%s(%s)",localized,arguments) elseif n == 1 then calls[n] = format("local %s = %s(%s)",returnvalues,localized,arguments) else calls[n] = format("%s = %s(%s)",returnvalues,localized,arguments) end end end end end t.dirty = false if n == 0 then t.compiled = "" else variables = concat(variables,"\n") calls = concat(calls,"\n") if results then t.compiled = format("%s\nreturn function(%s)\n%s\nreturn %s\nend",variables,arguments,calls,results) else t.compiled = format("%s\nreturn function(%s)\n%s\nend",variables,arguments,calls) end end -- print(t.compiled) return t.compiled -- also stored so that we can trace end sequencers.tostring = construct sequencers.localize = localize compile = function(t,compiler,n) -- already referred to in sequencers.new local compiled if not t or type(t) == "string" then -- weird ... t.compiled = t .. so return false end if compiler then compiled = compiler(t,n) t.compiled = compiled else compiled = construct(t,n) end local runner if compiled == "" then runner = false else runner = compiled and load(compiled)() -- we can use loadstripped here end t.runner = runner return runner end sequencers.compile = compile -- we used to deal with tail as well but now that the lists are always -- double linked and the kernel function no longer expect tail as -- argument we stick to head and done (done can probably also go -- as luatex deals with return values efficiently now .. in the -- past there was some copying involved, but no longer) -- todo: use sequencer (can have arguments and returnvalues etc now) local template_yes = [[ %s return function(head%s) local ok, done = false, false %s return head, done end]] local template_nop = [[ return function() return false, false end]] function sequencers.nodeprocessor(t,nofarguments) -- todo: handle 'kind' in plug into tostring local list, order, kind, gskip, askip = t.list, t.order, t.kind, t.gskip, t.askip local vars, calls, args, n = { }, { }, nil, 0 if nofarguments == 0 then args = "" elseif nofarguments == 1 then args = ",one" elseif nofarguments == 2 then args = ",one,two" elseif nofarguments == 3 then args = ",one,two,three" elseif nofarguments == 4 then args = ",one,two,three,four" elseif nofarguments == 5 then args = ",one,two,three,four,five" else args = ",..." end for i=1,#order do local group = order[i] if not gskip[group] then local actions = list[group] for i=1,#actions do local action = actions[i] if not askip[action] then local localized = localize(action) n = n + 1 vars[n] = format("local %s = %s",localized,action) -- only difference with tostring is kind and rets (why no return) if kind[action] == "nohead" then calls[n] = format(" ok = %s(head%s) done = done or ok",localized,args) else calls[n] = format(" head, ok = %s(head%s) done = done or ok",localized,args) end end end end end local processor = #calls > 0 and format(template_yes,concat(vars,"\n"),args,concat(calls,"\n")) or template_nop return processor end ��������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otb.lua��������������������������������0000644�0001750�0001750�00000063311�12161703335�024131� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['font-otb'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local concat = table.concat local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip local type, next, tonumber, tostring = type, next, tonumber, tostring local lpegmatch = lpeg.match local utfchar = utf.char local trace_baseinit = false trackers.register("otf.baseinit", function(v) trace_baseinit = v end) local trace_singles = false trackers.register("otf.singles", function(v) trace_singles = v end) local trace_multiples = false trackers.register("otf.multiples", function(v) trace_multiples = v end) local trace_alternatives = false trackers.register("otf.alternatives", function(v) trace_alternatives = v end) local trace_ligatures = false trackers.register("otf.ligatures", function(v) trace_ligatures = v end) local trace_ligatures_detail = false trackers.register("otf.ligatures.detail", function(v) trace_ligatures_detail = v end) local trace_kerns = false trackers.register("otf.kerns", function(v) trace_kerns = v end) local trace_preparing = false trackers.register("otf.preparing", function(v) trace_preparing = v end) local report_prepare = logs.reporter("fonts","otf prepare") local fonts = fonts local otf = fonts.handlers.otf local otffeatures = otf.features local registerotffeature = otffeatures.register otf.defaultbasealternate = "none" -- first last local wildcard = "*" local default = "dflt" local formatters = string.formatters local f_unicode = formatters["%U"] local f_uniname = formatters["%U (%s)"] local f_unilist = formatters["% t (% t)"] local function gref(descriptions,n) if type(n) == "number" then local name = descriptions[n].name if name then return f_uniname(n,name) else return f_unicode(n) end elseif n then local num, nam = { }, { } for i=2,#n do local ni = n[i] if tonumber(ni) then -- first is likely a key local di = descriptions[ni] num[i] = f_unicode(ni) nam[i] = di and di.name or "-" end end return f_unilist(num,nam) else return "<error in base mode tracing>" end end local function cref(feature,lookupname) if lookupname then return formatters["feature %a, lookup %a"](feature,lookupname) else return formatters["feature %a"](feature) end end local function report_alternate(feature,lookupname,descriptions,unicode,replacement,value,comment) report_prepare("%s: base alternate %s => %s (%S => %S)", cref(feature,lookupname), gref(descriptions,unicode), replacement and gref(descriptions,replacement), value, comment) end local function report_substitution(feature,lookupname,descriptions,unicode,substitution) report_prepare("%s: base substitution %s => %S", cref(feature,lookupname), gref(descriptions,unicode), gref(descriptions,substitution)) end local function report_ligature(feature,lookupname,descriptions,unicode,ligature) report_prepare("%s: base ligature %s => %S", cref(feature,lookupname), gref(descriptions,ligature), gref(descriptions,unicode)) end local function report_kern(feature,lookupname,descriptions,unicode,otherunicode,value) report_prepare("%s: base kern %s + %s => %S", cref(feature,lookupname), gref(descriptions,unicode), gref(descriptions,otherunicode), value) end local basemethods = { } local basemethod = "<unset>" local function applybasemethod(what,...) local m = basemethods[basemethod][what] if m then return m(...) end end -- We need to make sure that luatex sees the difference between -- base fonts that have different glyphs in the same slots in fonts -- that have the same fullname (or filename). LuaTeX will merge fonts -- eventually (and subset later on). If needed we can use a more -- verbose name as long as we don't use <()<>[]{}/%> and the length -- is < 128. local basehash, basehashes, applied = { }, 1, { } local function registerbasehash(tfmdata) local properties = tfmdata.properties local hash = concat(applied," ") local base = basehash[hash] if not base then basehashes = basehashes + 1 base = basehashes basehash[hash] = base end properties.basehash = base properties.fullname = properties.fullname .. "-" .. base -- report_prepare("fullname base hash '%a, featureset %a",tfmdata.properties.fullname,hash) applied = { } end local function registerbasefeature(feature,value) applied[#applied+1] = feature .. "=" .. tostring(value) end -- The original basemode ligature builder used the names of components -- and did some expression juggling to get the chain right. The current -- variant starts with unicodes but still uses names to make the chain. -- This is needed because we have to create intermediates when needed -- but use predefined snippets when available. To some extend the -- current builder is more stupid but I don't worry that much about it -- as ligatures are rather predicatable. -- -- Personally I think that an ff + i == ffi rule as used in for instance -- latin modern is pretty weird as no sane person will key that in and -- expect a glyph for that ligature plus the following character. Anyhow, -- as we need to deal with this, we do, but no guarantes are given. -- -- latin modern dejavu -- -- f+f 102 102 102 102 -- f+i 102 105 102 105 -- f+l 102 108 102 108 -- f+f+i 102 102 105 -- f+f+l 102 102 108 102 102 108 -- ff+i 64256 105 64256 105 -- ff+l 64256 108 -- -- As you can see here, latin modern is less complete than dejavu but -- in practice one will not notice it. -- -- The while loop is needed because we need to resolve for instance -- pseudo names like hyphen_hyphen to endash so in practice we end -- up with a bit too many definitions but the overhead is neglectable. -- -- Todo: if changed[first] or changed[second] then ... end local trace = false local function finalize_ligatures(tfmdata,ligatures) local nofligatures = #ligatures if nofligatures > 0 then local characters = tfmdata.characters local descriptions = tfmdata.descriptions local resources = tfmdata.resources local unicodes = resources.unicodes local private = resources.private local alldone = false while not alldone do local done = 0 for i=1,nofligatures do local ligature = ligatures[i] if ligature then local unicode, lookupdata = ligature[1], ligature[2] if trace then trace_ligatures_detail("building % a into %a",lookupdata,unicode) end local size = #lookupdata local firstcode = lookupdata[1] -- [2] local firstdata = characters[firstcode] local okay = false if firstdata then local firstname = "ctx_" .. firstcode for i=1,size-1 do -- for i=2,size-1 do local firstdata = characters[firstcode] if not firstdata then firstcode = private if trace then trace_ligatures_detail("defining %a as %a",firstname,firstcode) end unicodes[firstname] = firstcode firstdata = { intermediate = true, ligatures = { } } characters[firstcode] = firstdata descriptions[firstcode] = { name = firstname } private = private + 1 end local target local secondcode = lookupdata[i+1] local secondname = firstname .. "_" .. secondcode if i == size - 1 then target = unicode if not unicodes[secondname] then unicodes[secondname] = unicode -- map final ligature onto intermediates end okay = true else target = unicodes[secondname] if not target then break end end if trace then trace_ligatures_detail("codes (%a,%a) + (%a,%a) -> %a",firstname,firstcode,secondname,secondcode,target) end local firstligs = firstdata.ligatures if firstligs then firstligs[secondcode] = { char = target } else firstdata.ligatures = { [secondcode] = { char = target } } end firstcode = target firstname = secondname end end if okay then ligatures[i] = false done = done + 1 end end end alldone = done == 0 end if trace then for k, v in next, characters do if v.ligatures then table.print(v,k) end end end tfmdata.resources.private = private end end local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist) local characters = tfmdata.characters local descriptions = tfmdata.descriptions local resources = tfmdata.resources local changed = tfmdata.changed local unicodes = resources.unicodes local lookuphash = resources.lookuphash local lookuptypes = resources.lookuptypes local ligatures = { } local alternate = tonumber(value) local defaultalt = otf.defaultbasealternate local trace_singles = trace_baseinit and trace_singles local trace_alternatives = trace_baseinit and trace_alternatives local trace_ligatures = trace_baseinit and trace_ligatures local actions = { substitution = function(lookupdata,lookupname,description,unicode) if trace_singles then report_substitution(feature,lookupname,descriptions,unicode,lookupdata) end changed[unicode] = lookupdata end, alternate = function(lookupdata,lookupname,description,unicode) local replacement = lookupdata[alternate] if replacement then changed[unicode] = replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"normal") end elseif defaultalt == "first" then replacement = lookupdata[1] changed[unicode] = replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end elseif defaultalt == "last" then replacement = lookupdata[#data] if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end else if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"unknown") end end end, ligature = function(lookupdata,lookupname,description,unicode) if trace_ligatures then report_ligature(feature,lookupname,descriptions,unicode,lookupdata) end ligatures[#ligatures+1] = { unicode, lookupdata } end, } for unicode, character in next, characters do local description = descriptions[unicode] local lookups = description.slookups if lookups then for l=1,#lookuplist do local lookupname = lookuplist[l] local lookupdata = lookups[lookupname] if lookupdata then local lookuptype = lookuptypes[lookupname] local action = actions[lookuptype] if action then action(lookupdata,lookupname,description,unicode) end end end end local lookups = description.mlookups if lookups then for l=1,#lookuplist do local lookupname = lookuplist[l] local lookuplist = lookups[lookupname] if lookuplist then local lookuptype = lookuptypes[lookupname] local action = actions[lookuptype] if action then for i=1,#lookuplist do action(lookuplist[i],lookupname,description,unicode) end end end end end end finalize_ligatures(tfmdata,ligatures) end local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist) -- todo what kind of kerns, currently all local characters = tfmdata.characters local descriptions = tfmdata.descriptions local resources = tfmdata.resources local unicodes = resources.unicodes local sharedkerns = { } local traceindeed = trace_baseinit and trace_kerns for unicode, character in next, characters do local description = descriptions[unicode] local rawkerns = description.kerns -- shared if rawkerns then local s = sharedkerns[rawkerns] if s == false then -- skip elseif s then character.kerns = s else local newkerns = character.kerns local done = false for l=1,#lookuplist do local lookup = lookuplist[l] local kerns = rawkerns[lookup] if kerns then for otherunicode, value in next, kerns do if value == 0 then -- maybe no 0 test here elseif not newkerns then newkerns = { [otherunicode] = value } done = true if traceindeed then report_kern(feature,lookup,descriptions,unicode,otherunicode,value) end elseif not newkerns[otherunicode] then -- first wins newkerns[otherunicode] = value done = true if traceindeed then report_kern(feature,lookup,descriptions,unicode,otherunicode,value) end end end end end if done then sharedkerns[rawkerns] = newkerns character.kerns = newkerns -- no empty assignments else sharedkerns[rawkerns] = false end end end end end basemethods.independent = { preparesubstitutions = preparesubstitutions, preparepositionings = preparepositionings, } local function makefake(tfmdata,name,present) local resources = tfmdata.resources local private = resources.private local character = { intermediate = true, ligatures = { } } resources.unicodes[name] = private tfmdata.characters[private] = character tfmdata.descriptions[private] = { name = name } resources.private = private + 1 present[name] = private return character end local function make_1(present,tree,name) for k, v in next, tree do if k == "ligature" then present[name] = v else make_1(present,v,name .. "_" .. k) end end end local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done,lookupname) for k, v in next, tree do if k == "ligature" then local character = characters[preceding] if not character then if trace_baseinit then report_prepare("weird ligature in lookup %a, current %C, preceding %C",lookupname,v,preceding) end character = makefake(tfmdata,name,present) end local ligatures = character.ligatures if ligatures then ligatures[unicode] = { char = v } else character.ligatures = { [unicode] = { char = v } } end if done then local d = done[lookupname] if not d then done[lookupname] = { "dummy", v } else d[#d+1] = v end end else local code = present[name] or unicode local name = name .. "_" .. k make_2(present,tfmdata,characters,v,name,code,k,done,lookupname) end end end local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist) local characters = tfmdata.characters local descriptions = tfmdata.descriptions local resources = tfmdata.resources local changed = tfmdata.changed local lookuphash = resources.lookuphash local lookuptypes = resources.lookuptypes local ligatures = { } local alternate = tonumber(value) local defaultalt = otf.defaultbasealternate local trace_singles = trace_baseinit and trace_singles local trace_alternatives = trace_baseinit and trace_alternatives local trace_ligatures = trace_baseinit and trace_ligatures for l=1,#lookuplist do local lookupname = lookuplist[l] local lookupdata = lookuphash[lookupname] local lookuptype = lookuptypes[lookupname] for unicode, data in next, lookupdata do if lookuptype == "substitution" then if trace_singles then report_substitution(feature,lookupname,descriptions,unicode,data) end changed[unicode] = data elseif lookuptype == "alternate" then local replacement = data[alternate] if replacement then changed[unicode] = replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"normal") end elseif defaultalt == "first" then replacement = data[1] changed[unicode] = replacement if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end elseif defaultalt == "last" then replacement = data[#data] if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,defaultalt) end else if trace_alternatives then report_alternate(feature,lookupname,descriptions,unicode,replacement,value,"unknown") end end elseif lookuptype == "ligature" then ligatures[#ligatures+1] = { unicode, data, lookupname } if trace_ligatures then report_ligature(feature,lookupname,descriptions,unicode,data) end end end end local nofligatures = #ligatures if nofligatures > 0 then local characters = tfmdata.characters local present = { } local done = trace_baseinit and trace_ligatures and { } for i=1,nofligatures do local ligature = ligatures[i] local unicode, tree = ligature[1], ligature[2] make_1(present,tree,"ctx_"..unicode) end for i=1,nofligatures do local ligature = ligatures[i] local unicode, tree, lookupname = ligature[1], ligature[2], ligature[3] make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,lookupname) end end end local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist) local characters = tfmdata.characters local descriptions = tfmdata.descriptions local resources = tfmdata.resources local lookuphash = resources.lookuphash local traceindeed = trace_baseinit and trace_kerns -- check out this sharedkerns trickery for l=1,#lookuplist do local lookupname = lookuplist[l] local lookupdata = lookuphash[lookupname] for unicode, data in next, lookupdata do local character = characters[unicode] local kerns = character.kerns if not kerns then kerns = { } character.kerns = kerns end if traceindeed then for otherunicode, kern in next, data do if not kerns[otherunicode] and kern ~= 0 then kerns[otherunicode] = kern report_kern(feature,lookup,descriptions,unicode,otherunicode,kern) end end else for otherunicode, kern in next, data do if not kerns[otherunicode] and kern ~= 0 then kerns[otherunicode] = kern end end end end end end local function initializehashes(tfmdata) nodeinitializers.features(tfmdata) end basemethods.shared = { initializehashes = initializehashes, preparesubstitutions = preparesubstitutions, preparepositionings = preparepositionings, } basemethod = "independent" local function featuresinitializer(tfmdata,value) if true then -- value then local t = trace_preparing and os.clock() local features = tfmdata.shared.features if features then applybasemethod("initializehashes",tfmdata) local collectlookups = otf.collectlookups local rawdata = tfmdata.shared.rawdata local properties = tfmdata.properties local script = properties.script local language = properties.language local basesubstitutions = rawdata.resources.features.gsub local basepositionings = rawdata.resources.features.gpos if basesubstitutions then for feature, data in next, basesubstitutions do local value = features[feature] if value then local validlookups, lookuplist = collectlookups(rawdata,feature,script,language) if validlookups then applybasemethod("preparesubstitutions",tfmdata,feature,value,validlookups,lookuplist) registerbasefeature(feature,value) end end end end if basepositionings then for feature, data in next, basepositionings do local value = features[feature] if value then local validlookups, lookuplist = collectlookups(rawdata,feature,script,language) if validlookups then applybasemethod("preparepositionings",tfmdata,feature,features[feature],validlookups,lookuplist) registerbasefeature(feature,value) end end end end registerbasehash(tfmdata) end if trace_preparing then report_prepare("preparation time is %0.3f seconds for %a",os.clock()-t,tfmdata.properties.fullname) end end end registerotffeature { name = "features", description = "features", default = true, initializers = { -- position = 1, -- after setscript (temp hack ... we need to force script / language to 1 base = featuresinitializer, } } -- independent : collect lookups independently (takes more runtime ... neglectable) -- shared : shares lookups with node mode (takes more memory unless also a node mode variant is used ... noticeable) directives.register("fonts.otf.loader.basemethod", function(v) if basemethods[v] then basemethod = v end end) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-dir-05.mkiv�������������������������������0000644�0001750�0001750�00000003727�12130411274�024032� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=x-dir-05, %D version=2003.05.10, % around that time -) %D title=\CONTEXT\ Directory Handling, %D subtitle=Access, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setvariables [filestate] [name=, base=, type=, size=, permissions=, date=] % \savefilestate[zip-latest][context/latest/cont-#2.zip]% % TODO: move to module namespace \startluacode local filestates = { } function commands.savefilestate(tag,name) if not filestates[tag] then local attr = lfs.attributes(name) if attr then attr.name = name end filestates[tag] = attr end end function commands.getfilestatevariable(tag,name) local fs = filestates[tag] if fs then local value if name == "base" then value = file.basename(fs.name) elseif name == "type" then value = file.extname(fs.name) elseif name == "date" then value = os.date("%Y-%m-%d %H:%M",fs.modification) else value = fs[name] or "" end context.sprint(tex.vrbcatcodes,value) end end \stopluacode \def\getfilestatevariable#1#2% {\ctxcommand{getfilestatevariable("#1","#2")}} \def\savefilestate {\dodoubleargument\dosavefilestate} \def\dosavefilestate[#1][#2]% {\ctxcommand{savefilestate("#1","#2")}% \setxvariables [#1] [name={#2}, base=\getfilestatevariable{#1}{base}, type=\getfilestatevariable{#1}{type}, size=\getfilestatevariable{#1}{size}, date=\getfilestatevariable{#1}{date}, permissions=\getfilestatevariable{#1}{permissions}]} \def\getfilestate#1% old one {\savefilestate[filestate][#1]} \endinput �����������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-mis.mkii�������������������������������0000644�0001750�0001750�00000011073�11754241457�024272� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=enco-mis, %D version=2000.05.07, % 1999.11.11, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Missing Glyphs, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this file we collect some definitions that construct %D pseudo characters. Some day we will move some definitions %D from \type {plain.tex} to this file. Some definitions are %D derived from definitions in the \LATEX\ distribution, %D especially Johannes Braams' Babel system. \startmapping[\s!default] \defineuppercasecom \dj \DJ \defineuppercasecom \Dj \dj \defineuppercasecom \DJ \dj \definecharacter dstroke {\pseudoencodeddj} \definecharacter Dstroke {\pseudoencodedDJ} \stopmapping %D We need proper names like in enco-com.tex! \definecharacter dj {\dstroke} % {\pseudoencodeddj} \definecharacter Dj {\Dstroke} % {\pseudoencodedDJ} \definecharacter DJ {\Dstroke} % {\pseudoencodedDJ} \unprotect \def\pseudoencodeddj % like in babel, but safer {\dontleavehmode\hbox\bgroup \setbox\scratchbox\hbox{d}% \scratchdimen\ht\scratchbox \advance\scratchdimen 1ex \scratchdimen.45\scratchdimen \dimen2=\withoutpt\the\slantperpoint\dimen0 \advance\dimen2 .5ex \hbox to \wd\scratchbox {\box\scratchbox\hss \raise\scratchdimen\hbox{\kern\dimen2\vbox{\hrule\!!height0.1ex\!!width0.3em}}}% \egroup} \def\pseudoencodedDJ % design: taco; quality assurance: mojca; cleanup: hans {\dontleavehmode \hbox\bgroup \setbox\scratchbox\hbox{D}% \dimen2=1.1ex \dimen2=\withoutpt\the\slantperpoint\dimen2 \hbox to \wd\scratchbox {\rlap {\raise.52\ht\scratchbox \hbox {\kern\dimen2 \vbox{\hrule\!!height.04ex\!!depth.04ex\!!width.4\wd\scratchbox}}}% \box\scratchbox}% \egroup} % currency \def\fakedollar % pretty cmr dependent {\bgroup \ifnum\fam=\itfam \sl \else\ifnum\fam=\bifam \bs \fi\fi \$% \egroup} \def\fakesterling % pretty cmr dependent {\bgroup \ifnum\fam=\bffam \bi \else\ifnum\fam=\bifam \bi \else\ifnum\fam=\bsfam \bi \else \it \fi\fi\fi \$% \egroup} \def\fakeflorin {\bgroup \ifnum\fam=\bffam \bi \else\ifnum\fam=\bifam \bi \else\ifnum\fam=\bsfam \bi \else \it \fi\fi\fi f% \egroup} % perthings \def\fakepercent {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle0}}} \def\fakeperthousand {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle00}}} \def\fakepermine {\dontleavehmode \bgroup \setbox\scratchbox\hbox {\mathematics{+}}% \hbox to \wd\scratchbox {\hss \mathematics{^{\scriptscriptstyle-}\kern-.4em/\kern-.3em_{\scriptscriptstyle-}}% \hss}% \egroup} % guillemots %D Yes I know, they are ugly: \def\fakeleftguillemot {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}} \def\fakerightguillemot {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}} \def\fakeleftsubguillemot {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}} \def\fakerightsubguillemot {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}} %D Needed: \def\fakevisiblespace {\leavevmode\hbox {\setbox\scratchbox\hbox{(}% \scratchdimen.1\dp\scratchbox \setbox\scratchbox\hbox{\space}% \hbox to \wd\scratchbox {\vrule \!!depth 5\scratchdimen \!!width \scratchdimen \!!height \zeropoint \hss \vrule \!!depth 5\scratchdimen \!!width \wd\scratchbox \!!height-4\scratchdimen \hss \vrule \!!depth 5\scratchdimen \!!width \scratchdimen \!!height \zeropoint}}} %\def\fakeunderscore{\leavevmode\kern.06em\vbox{\hrule\!!width.3em}} \def\fakeunderscore {\leavevmode\hbox {\setbox\scratchbox\hbox{(}% \scratchdimen.2\dp\scratchbox \setbox\scratchbox\hbox{\space}% \vrule \!!depth \scratchdimen \!!width \wd\scratchbox \!!height\zeropoint}} \ifx\mathunderscore\undefined \let\mathunderscore\fakeunderscore \fi \ifx\textunderscore\undefined \let\textunderscore\fakeunderscore \fi \unexpanded\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi} \let\_\normalunderscore % Handy but obsolete, replaced by \unknownchar: % % \def\missingglyph{\ruledhbox{?}} \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/file-syn.lua��������������������������������0000644�0001750�0001750�00000002727�12130411274�024125� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['file-syn'] = { version = 1.001, comment = "companion to file-syn.mkvi", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local report_files = logs.reporter("files") environment.filesynonyms = environment.filesynonyms or { } local filesynonyms = environment.filesynonyms local settings_to_array = utilities.parsers.settings_to_array local findfile = resolvers.findfile storage.register("environment/filesynonyms", filesynonyms, "environment.filesynonyms") local function truefilename(name) local realname = filesynonyms[name] or name if realname ~= name then return truefilename(realname) else return realname end end environment.truefilename = truefilename function commands.truefilename(name) context(truefilename(name)) end function commands.definefilesynonym(name,realname) local synonym = filesynonyms[name] if synonym then interfaces.showmessage("files",1,{ name or "?", realname or "?", synonym or "?" }) end filesynonyms[name] = realname end function commands.definefilefallback(name,alternatives) local names = settings_to_array(alternatives) for i=1,#names do local realname = findfile(names[i]) if realname ~= "" then filesynonyms[name] = realname break end end end �����������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-contml.mkii�������������������������������0000644�0001750�0001750�00000035444�11754241457�024331� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%M \usemodule [contml] \autoXMLnamespace [context] %M \definefilesynonym [context] [x-contml.xsd] %D \module %D [ file=x-contml, %D version=mid 2001, %D title=\CONTEXT\ XML Support, %D subtitle=Basic \CONTEXT\ commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This module provides some basic \XML\ elements. These definitions % are highly experimental and serve as a playground for interface % development. \unprotect %D \elements {include} %D %D \startbuffer %D You can include another file in the current document with the %D <element>include</element> element. When including the file, &context; %D will look at the suffix, in order to decide how to include the file. %D %D <verbatim> %D <line><include name="mine"/></line> %D <line><include name="mine" type="txt"/></line> %D <line><include name="mine" type="tex"/></line> %D </verbatim> %D \stopbuffer %D %D \showelements [context] [include] \defineXMLsingular [context:include] [name=,type=xml] {\doifsomethingXMLop{name} {\processaction [\XMLop{type}] [xml=>\readfile{\XMLop{name}}\donothing\donothing, tex=>{{\disableXML\readfile{\XMLop{name}}\donothing\donothing}}, txt=>{{\disableXML\typefile{\XMLop{name}}}}]}} % or, nicer: % % \defineXMLsingular [context:include] [name=unknown,type=txt] % {\XMLval{include:type}{\XMLop{type}}{}} % % \mapXMLvalue {include:type} {xml} {\readfile{\XMLop{name}}\donothing\donothing} % \mapXMLvalue {include:type} {tex} {{\disableXML\readfile{\XMLop{name}}\donothing\donothing}} % \mapXMLvalue {include:type} {txt} {{\disableXML\typefile{\XMLop{name}}}} %D \elements {compound} %D %D \startbuffer %D Instead of using hard coded compound tokens, you should use the %D <element>compound</element> element, as in high<compound token="/" />low. %D The overhead in keying is rewarded with proper symbols and hyphenation. %D \stopbuffer %D %D \showelements [context] [compound] \ifx\normalcompound\undefined \let\normalcompound=| \fi % \defineXMLsingular [context:compound] [token=] % {\expanded{\normalcompound\XMLop{token}}|} % \defineXMLsingular [context:compound] [token=] % {\ifmmode % \doifXMLop{token}{\XMLop{token}}{\compoundhyphen}% % \else % \expanded{\normalcompound\XMLop{token}}|% % \fi} \defineXMLsingular [context:compound] [token=] {\mathortext % disc comm looks ahead, so \relax {\doifXMLop{token}{\XMLop{token}}\compoundhyphen}% {\expanded{\directdiscretionary{\XMLop{token}}}\relax}} \defineXMLenvironmentsave [context:cp] {} {\expanded{\directdiscretionary{\XMLflush{cp}}}\relax} %D \elements {p} %D %D \startbuffer %D <p>Although for &tex; it is often enough to mark the end of a paragraph, %D in &xml; we want to add a bit more structure. <p/> This permits a more %D robust implementation of begin<compound/>of<compound/>par actions</p> %D \stopbuffer %D %D \showelements [context] [p] \defineXMLenvironment [context:p] {} \endgraf \defineXMLsingular [context:p] \endgraf %D \elements {pageref,textref,lineref} %D %D \startbuffer %D You can ask for a page (<pageref label="lastpage">the last pagenumber %D is</pageref> aka page <pageref label="lastpage"/>), text or line reference %D with the following three elements. The label may be any valid &context; %D reference label. %D \stopbuffer %D %D \showelements [context] [references] \defineXMLpickup [context:pageref] [label=] {\at} {[\XMLop{label}]} \defineXMLpickup [context:textref] [label=] {\in} {[\XMLop{label}]} \defineXMLpickup [context:lineref] [label=] {\inline} {[\XMLop{label}]} %D \elements{text} %D %D \startbuffer %D If you have a self contained &xml; file, you need to signal &context; the %D begin and end of the document. The following elements can be used for %D that purpose: %D %D <verbatim> %D <line><text></line> %D <line> ...</line> %D <line></text></line> %D </verbatim> %D \stopbuffer %D %D \showelements [context] [text] \defineXMLenvironment [context:text] \starttext \stoptext %D \elements {em} %D %D \startbuffer %D Authors often want some control over the way a text is typeset, which is %D why we provide the <element>em</element> element. We may only hope that %D the author is <em>consistent</em> in his decisions on what to emphasize. %D \stopbuffer %D %D \showelements [context] [em] \defineXMLgrouped [context:em] \em %D \elements {b} %D %D \startbuffer %D Bold is not always <b>beautiful</b> but if you really want it, you can %D get it by using this element. %D \stopbuffer %D %D \showelements [context] [b] \defineXMLgrouped [context:b] \bf %D \elements {verbatim,typing,line,verb,type} %D %D \startbuffer %D Although the following method can be used to typeset a piece of code %D verbatim %D %D <![CDATA[ %D Dit \is nogal verbatim ! %D Dit is {nogal} verbatim ! %D Dit is <nogal> verbatim ! %D ]]> %D %D we prefer the more structured: %D %D <verbatim> %D <line>Dit \is nogal verbatim !</line> %D <line>Dit is {nogal} verbatim !</line> %D <line>Dit is <nogal> verbatim !</line> %D </verbatim> %D \stopbuffer %D %D The element to tag in<compound/>line verbatim is <type><verb></type>. %D %D \showelements [context] [verbatim] \defineXMLenvironment [context:verbatim] {\startpacked \defineXMLargument[context:line]{\endgraf\type}} {\stoppacked} \defineXMLenvironment [context:typing] {\startpacked\defineXMLargument[context:line]{\endgraf\type}} {\stoppacked} \defineXMLargument [context:verb] \type \defineXMLargument [context:type] \type %D \elements {itemize,item} %D %D \startbuffer %D Itemized lists are quite common in documents, al least in the ones that %D we produce. For the moment we only provide a few options, later we will %D hook it into the &context; attribute handler. %D %D <itemize type="a"> %D <item label="bla"> test </item> %D <item> test </item> %D </itemize> %D %D <itemize packed="yes"> %D <item label="more bla"> test </item> %D <item> test <em>what?</em></item> %D </itemize> %D \stopbuffer %D %D \showelements [context] [itemize] \defineXMLenvironment [context:itemize] [type=,packed=] {\let\XMLoptions\empty \doifsomethingXMLop{type}{\addtocommalist{\XMLop{type}}\XMLoptions}% \doifXMLop{packed}{yes}{\addtocommalist{packed}\XMLoptions}% \expanded{\startitemize[\XMLoptions]}} {\stopitemize} \defineXMLenvironment [context:item] [label=] {\expanded{\item[\XMLop{label}]}} {\endgraf} %D \elements {externalfigure} %D %D \startbuffer %D The previous examples already demonstrated how we can include a graphic: %D %D <verbatim> %D <line><externalfigure file="cow" width="5cm" /></line> %D </verbatim> %D \stopbuffer %D %D \showelements [context] [externalfigure] \defineXMLsingular [context:externalfigure] [\??ef] [base=,label=,file=] {\bgroup % \getXMLta \expandXMLta \expandXMLtp{file}% \expandXMLta \getXMLta % expand entities first \doifelsenothing{\XMLtp{label}} {\expanded{\externalfigure[\XMLtp{file}][\XMLta]}} {\doifsomething{\XMLtp{base}}{\usefigurebase[\XMLtp{base}]}% \expanded{\externalfigure[\XMLtp{label}][\XMLta]}} \egroup} %D \elements {fixed} %D \setupexternalfigures[directory={../sample}] %D \startbuffer %D Something fixed will end up at the place where it defined in the input %D stream. The main idea behind this element is that it gives you control %D over the placement. %D %D <itemize> %D <item> %D <fixed align="high"> %D <content> %D <externalfigure file="cow" frame="on" height="1cm" /> %D </content> %D </fixed> %D </item> %D </itemize> %D \stopbuffer %D %D \showelements [context] [fixed] \defineXMLenvironment [context:fixed] [type=figure,location=,label=] {\bgroup \defineXMLsave[context:caption] \defineXMLsave[context:content]} {\expanded{\startfixed[\XMLop{location}]}% \doifXMLdataelse{context:caption} {\startcombination[1*1] {\XMLflush{context:content}} {\XMLflush{context:caption}} \stopcombination} {\XMLflush{context:content}}% \stopfixed \egroup} %D \elements {float} %D \setupexternalfigures[directory={../sample}] %D \startbuffer %D A floating body will be placed at the first location available, unless %D a location is specified. As with the <element>fixed</element> element, %D you can provide a caption. %D %D <float type="figure"> %D <content> %D <externalfigure file="cow" frame="on" height="3cm" /> %D </content> %D <caption>This is a cow!</caption> %D </float> %D \stopbuffer %D %D \showelements [context] [float] \defineXMLenvironment [context:float] [type=figure,location=here,label=] {\bgroup \defineXMLsave[context:caption] \defineXMLsave[context:content]} {\expanded {\placefloat [\XMLop{type}] [\XMLop{location}] [\XMLop{label}] {\XMLflush{context:caption}} {\XMLflush{context:content}}} \egroup} %D \elements {quotation,quote} %D %D \startbuffer %D There is a (not so) subtle difference between a display %D <quotation>quotation</quotation> and an <quote>in<compound/>line</quote> %D one. %D \stopbuffer %D %D \showelements [context] [table] \defineXMLgrouped [context:quote] \quote \defineXMLgrouped [context:quotation] \quotation %D \elements {table,tr,td} %D %D \startbuffer %D There are (currently) three table mechanisms in &context;. One of them %D resembles the well known &html; tables. %D %D <?context-command \startlinecorrection[blank] ?> %D <table> %D <tr> <td>one</td> <td>a</td> <td>first </td> </tr> %D <tr> <td>two</td> <td>b</td> <td>second</td> </tr> %D </table> %D <?context-command \stoplinecorrection ?> %D %D As you can see here, we use a similar syntax but stick to the &context; %D attributes (which provide quite advanced control over the layout). %D %D <?context-command \startlinecorrection[blank] ?> %D <table frame="off" background="color" color="white"> %D <tr backgroundcolor="red"> <td>xx</td> <td>xx</td> </tr> %D <tr backgroundcolor="green"> <td>xx</td> <td>xx</td> </tr> %D </table> %D <?context-command \stoplinecorrection ?> %D \stopbuffer %D %D \showelements [context] [table] \defineXMLenvironment [context:table] [\@@tbl\@@tbl] {\bgroup \defineXMLnested [context:tr] [\@@tbl] {\expanded{\bTR[\theXMLarguments{\@@tbl}}]} \eTR \defineXMLnested [context:td] [\@@tbl] {\expanded{\bTD[\theXMLarguments{\@@tbl}}]} \eTD \expanded{\bTABLE[\theXMLarguments{\@@tbl\@@tbl}]}} {\eTABLE \egroup} %D \elements {tabulate,tspec,thead,tbody,ttail,trule,tr,td} %D %D \startbuffer %D The second mechanism that we support is tabulation. The advantage of this %D mechanism is that it it well tuned for tables that have much text in the %D cells and cross page boundaires. %D %D <tabulate> %D <tspec> %D <tcell align="left"/> <tcell align="middle"/> <tcell align="right"/> %D </tspec> %D <thead> %D <trule/> %D <tr> <td> bagger </td> <td> bagger </td> <td> bagger </td> </tr> %D <trule/> %D </thead> %D <ttail> %D <trule/> %D </ttail> %D <tbody> %D <tr> <td> bagger </td> <td> bagger </td> <td> bagger </td> </tr> %D <tr> <td> bagg </td> <td> ger </td> <td> gr </td> </tr> %D <tr> <td> bag </td> <td> er </td> <td> gger </td> </tr> %D </tbody> %D </tabulate> %D \stopbuffer %D %D \showelements [context] [tabulate] \newtoks\XMLtabtoks \defineXMLgrouped [context:tabulate] {\XMLtabtoks{|l|p|}} \defineXMLpickup [context:tbody] {\expanded{\definetabulate[dummy][\the\XMLtabtoks]} \startdummy\XMLflush{context:thead}} {\XMLflush{context:ttail}\stopdummy} \defineXMLsave [context:thead] \defineXMLsave [context:ttail] \defineXMLenvironment[context:tspec] {\XMLtabtoks\emptytoks} {\appendtoks|\to\XMLtabtoks} \defineXMLsingular [context:trule] % verrrry ugly {\crcr\noalign{\kern-\lineheight}\HL} \defineXMLsingular [context:tcell] [align=] {\appendtoks|\to\XMLtabtoks \expanded{\processallactionsinset [\XMLop{align}]} [ paragraph=>\appendtoks p\to\XMLtabtoks, left=>\appendtoks l\to\XMLtabtoks, right=>\appendtoks r\to\XMLtabtoks, center=>\appendtoks c\to\XMLtabtoks, middle=>\appendtoks c\to\XMLtabtoks]} \defineXMLenvironment [context:tr] {\ignorespaces} {\NC\NR} \defineXMLenvironment [context:td] {\NC} {\ignorespaces} %D \elements {hide} %D %D \startbuffer %D This is the way to [<hide>this is gone</hide>] something for the %D typesetting engine. Normally this element is only used for testing %D purposes. %D \stopbuffer %D %D \showelements [context] [tabulate] \defineXMLignore[context:hide] %D \elements {unknown} %D %D \startbuffer %D We can go on and on and <unknown/> with defining elements that map onto %D &context; commands, but why not just use &tex; input syntax then? %D \stopbuffer %D %D \showelements [context] [unknown] \defineXMLsingular [context:unknown] \unknown %D A (for the moment) private one. \defineXMLargument [context:element] \type %D The following common schema definitions apply: %D %D {\setupcolors[state=stop]\showXSDcomponent[context][definitions]} \defineXMLargument [context:chapter] [label=] {\chapter[\XMLop{label}]} \defineXMLargument [context:section] [label=] {\section[\XMLop{label}]} \defineXMLargument [context:subsection] [label=] {\subsection[\XMLop{label}]} \defineXMLargument [context:subsubsection] [label=] {\subsubsection[\XMLop{label}]} \defineXMLargument [context:subsubsubsection] [label=] {\subsubsubsection[\XMLop{label}]} \defineXMLargument [context:title] [label=] {\title[\XMLop{label}]} \defineXMLargument [context:subject] [label=] {\subject[\XMLop{label}]} \defineXMLargument [context:subsubject] [label=] {\subsubject[\XMLop{label}]} \defineXMLargument [context:subsubsubject] [label=] {\subsubsubject[\XMLop{label}]} \defineXMLargument [context:subsubsubsubject] [label=] {\subsubsubsubject[\XMLop{label}]} \defineXMLenvironment [context:frontmatter] \startfrontmatter \stopfrontmatter \defineXMLenvironment [context:bodymatter] \startbodymatter \stopbodymatter \defineXMLenvironment [context:backmatter] \startbackmatter \stopbackmatter \defineXMLenvironment [context:appendices] \startappendices \stopappendices \defineXMLargument [context:index] [key=] {\doifelsenothingXMLop{key}{\index}{\expanded{\index[\XMLop{key}]}}} % \enableXMLfiledata % Needed for example (stickers and so): \defineXMLenvironment [context:makeup] \startstandardmakeup \stopstandardmakeup \protect \endinput % TO DO \defineXMLenvironment [combination] [columns=2,rows=1] {\scratchtoks\emptytoks \expanded{\appendtoks \noexpand \startcombination [\XMLop{columns}*\XMLop{rows}]}\to \scratchtoks} {\appendtoks \stopcombination \to \scratchtoks \the\scratchtoks} \defineXMLprocess[combinationentry] \defineXMLpickup [combinationitem] {\appendtoks\bgroup}{\egroup\to\scratchtoks} \defineXMLpickup [combinationcaption] {\appendtoks\bgroup}{\egroup\to\scratchtoks} \endinput ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-txt.mkvi�������������������������������0000644�0001750�0001750�00000014741�12130411274�024373� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=typo-txt, %D version=2011.10.27, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Text Hacks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 replaces the by now rather old supp-fun module. \writestatus{loading}{ConTeXt Typesetting Macros / Text Hacks} \unprotect \registerctxluafile{typo-txt}{1.001} %D \macros %D {normalizefontheight,normalizefontwidth,normalizedfontsize} %D %D Next we introduce some font manipulation macros. When we %D want to typeset some text spread in a well defined area, it %D can be considered bad practice to manipulate character and %D word spacing. In such situations the next few macros can be %D of help: %D %D \starttyping %D \normalizefontheight \name {sample text} {height} {font} %D \normalizefontwidth \name {sample text} {width} {font} %D \stoptyping %D %D Consider for instance: %D %D \startbuffer[a] %D \NormalizeFontHeight \TempFont {X} {2\baselineskip} {Serif} %D \stopbuffer %D %D \startbuffer[b] %D \ruledhbox{\TempFont To Be Or Not To Be} %D \stopbuffer %D %D \typebuffer[a,b] \getbuffer[a] %D %D This shows up as: %D %D \startlinecorrection %D \ruledhbox{\getbuffer[b]} %D \stoplinecorrection %D %D The horizontal counterpart is: %D %D \startbuffer[a] %D \NormalizeFontWidth \TempFont {This Line Fits} {\hsize} {Serif} %D \stopbuffer %D %D \startbuffer[b] %D \ruledhbox{\TempFont This Line Fits} %D \stopbuffer %D %D \typebuffer[a,b] \getbuffer[a] %D %D This gives: %D %D \startlinecorrection %D \ruledhbox{\getbuffer[b]} %D \stoplinecorrection %D %D The calculated font scale is avaliable in \type {\normalizedfontsize}. \newbox\b_typo_normalizers \def\typo_normalizers_size#axis#size% {\dimexpr\ifdim#1\b_typo_normalizers=\zeropoint \bodyfontsize \else \luaexpr{\number\dimexpr10pt\relax*\number\dimexpr#size\relax/\number#axis\b_typo_normalizers}\scaledpoint \fi\relax} \def\typo_normalizers_font_at_size#axis#cs#text#size#font% avoid overflow by using lua {\begingroup \setbox\b_typo_normalizers\hbox{\definedfont[#font at 10pt]\settrialtypesetting#text}% \normalexpanded{\endgroup\edef\noexpand\normalizedfontsize{\the\typo_normalizers_size{#axis}{#size}}}% \definefont[\strippedcsname#cs][#font at \normalizedfontsize]} \unexpanded\def\typo_normalizers_text_at_size#axis#font#size#text% {\dontleavehmode \begingroup \setbox\b_typo_normalizers\hbox{\definedfont[#font at 10pt]\settrialtypesetting#text}% \definedfont[#font at \the\typo_normalizers_size{#axis}{#size}]#text% \endgroup} \def\normalizedfontsize{\bodyfontsize} \unexpanded\def\normalizetextwidth {\typo_normalizers_text_at_size\wd} \unexpanded\def\normalizetextheight{\typo_normalizers_text_at_size\ht} \unexpanded\def\normalizetextdepth {\typo_normalizers_text_at_size\dp} \unexpanded\def\normalizetextline {\typo_normalizers_text_at_size\htdp} \unexpanded\def\normalizefontwidth {\typo_normalizers_font_at_size\wd} \unexpanded\def\normalizefontheight{\typo_normalizers_font_at_size\ht} \unexpanded\def\normalizefontdepth {\typo_normalizers_font_at_size\dp} \unexpanded\def\normalizefontline {\typo_normalizers_font_at_size\htdp} \unexpanded\def\widthspanningtext #text#size#specification{\hbox{\normalizefontwidth \temp{#text}{#size}{#specification}\temp#text}} \unexpanded\def\heightspanningtext#text#size#specification{\hbox{\normalizefontheight\temp{#text}{#size}{#specification}\temp#text}} \unexpanded\def\depthspanningtext #text#size#specification{\hbox{\normalizefontdepth \temp{#text}{#size}{#specification}\temp#text}} \unexpanded\def\linespanningtext #text#size#specification{\hbox{\normalizefontline \temp{#text}{#size}{#specification}\temp#text}} %D Traditionally we use UpperCasedNames for this kind of functionality. \let\NormalizeFontHeight \normalizefontheight \let\NormalizeFontWidth \normalizefontwidth \let\NormalizeTextHeight \normalizetextheight \let\NormalizeTextWidth \normalizetextwidth \let\WidthSpanningText \widthspanningtext \def\TheNormalizedFontSize{\normalizedfontsize} %D \macros %D {vulgarfraction} %D %D This code is moved from \type {cor-mis.mkiv}. We show three versions. First %D the simple one using \type {\low} and \type {high}: %D %D \startbuffer %D \def\vfrac#1#2% %D {\hbox{\high{\tx#1\kern-.25em}/\low{\kern-.25em\tx#2}}} %D %D test \vfrac{1}{2} test \vfrac{123}{456} test %D \stopbuffer %D %D \typebuffer {\showmakeup\getbuffer} %D %D A better way to handle the kerning is the following, here we kind of assume %D that tye slash is symmetrical and has nearly zero width. %D %D \startbuffer %D \def\vfract#1#2% %D {\hbox{\high{\tx#1}\hbox to \zeropoint{\hss/\hss}\low{\tx#2}}} %D \stopbuffer %D %D \typebuffer {\showmakeup\getbuffer} %D %D The third and best alternative is the following: %D %D {\showmakeup\getbuffer}\crlf\getbuffer %D %D This time we measure the height of the \type {/} and shift over the maximum %D height and depths of this character and the fractional digits (we use 57 as %D sample). Here we combine all methods in one macros. \setnewconstant\vulgarfractionmethod\plusthree \definehspace[\v!vulgarfraction][.25em] % [.15em] \definesymbol[\v!vulgarfraction][/] % [\raise.2ex\hbox{/}] \unexpanded\def\vulgarfraction#1#2% {\dontleavehmode \hbox {\def\vulgarfraction{vulgarfraction}% \ifcase\vulgarfractionmethod #1\symbol[\v!vulgarfraction]#2% \or \high{\tx#1\kern-\hspaceamount\empty\v!vulgarfraction}% \symbol[\vulgarfraction]% \low {\kern-\hspaceamount\empty\v!vulgarfraction\tx#2}% \or \high{\tx#1}% \hbox to \zeropoint{\hss\symbol[\v!vulgarfraction]\hss}% \low{\tx#2}% \or \setbox0\hbox{\symbol[\vulgarfraction]}% \setbox2\hbox{\txx57}% \raise\ht0\hbox{\lower\ht2\hbox{\txx#1}}% \hbox to \zeropoint{\hss\symbol[\v!vulgarfraction]\hss}% \lower\dp0\hbox{\raise\dp2\hbox{\txx#2}}% \fi}} \ifdefined\vfrac \else \let\vfrac\vulgarfraction \fi %D \starttabulate[|l|l|] %D \HL %D \NC \bf method \NC \bf visualization \NC\NR %D \HL %D \NC 0 \NC \vulgarfractionmethod0 \vulgarfraction{1}{2} \NC\NR %D \NC 1 \NC \vulgarfractionmethod1 \vulgarfraction{1}{2} \NC\NR %D \NC 2 \NC \vulgarfractionmethod2 \vulgarfraction{1}{2} \NC\NR %D \NC 3 \NC \vulgarfractionmethod3 \vulgarfraction{1}{2} \NC\NR %D \HL %D \stoptabulate \protect \endinput �������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/font-fbk.lua��������������������������������0000644�0001750�0001750�00000036661�12130411274�024111� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['font-fbk'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local cos, tan, rad, format = math.cos, math.tan, math.rad, string.format local utfbyte, utfchar = utf.byte, utf.char --[[ldx-- <p>This is very experimental code!</p> --ldx]]-- local trace_combining_visualize = false trackers.register("fonts.composing.visualize", function(v) trace_combining_visualize = v end) local trace_combining_define = false trackers.register("fonts.composing.define", function(v) trace_combining_define = v end) trackers.register("fonts.combining", "fonts.composing.define") -- for old times sake (and manuals) trackers.register("fonts.combining.all", "fonts.composing.*") -- for old times sake (and manuals) local report_combining = logs.reporter("fonts","combining") local force_combining = false -- just for demo purposes (see mk) local allocate = utilities.storage.allocate local fonts = fonts local handlers = fonts.handlers local constructors = fonts.constructors local registerotffeature = handlers.otf.features.register local registerafmfeature = handlers.afm.features.register local unicodecharacters = characters.data local unicodefallbacks = characters.fallbacks local vf = handlers.vf local commands = vf.combiner.commands local push = vf.predefined.push local pop = vf.predefined.pop local force_composed = false local cache = { } -- we could make these weak local fraction = 0.15 -- 30 units for lucida local function composecharacters(tfmdata) -- this assumes that slot 1 is self, there will be a proper self some day local characters = tfmdata.characters local descriptions = tfmdata.descriptions local parameters = tfmdata.parameters local properties = tfmdata.properties local Xdesc = descriptions[utfbyte("X")] local xdesc = descriptions[utfbyte("x")] if Xdesc and xdesc then local scale = parameters.factor or 1 local deltaxheight = scale * (Xdesc.boundingbox[4] - xdesc.boundingbox[4]) local extraxheight = fraction * deltaxheight -- maybe use compose value local italicfactor = parameters.italicfactor or 0 local vfspecials = backends.tables.vfspecials --brr local red, green, blue, black if trace_combining_visualize then red = vfspecials.red green = vfspecials.green blue = vfspecials.blue black = vfspecials.black end local compose = fonts.goodies.getcompositions(tfmdata) if compose and trace_combining_visualize then report_combining("using compose information from goodies file") end local done = false for i, c in next, unicodecharacters do -- loop over all characters ... not that efficient but a specials hash takes memory if force_combining or not characters[i] then local s = c.specials if s and s[1] == 'char' then local chr = s[2] local charschr = characters[chr] if charschr then local cc = c.category if cc == 'll' or cc == 'lu' or cc == 'lt' then -- characters.is_letter[cc] local acc = s[3] local t = { } for k, v in next, charschr do if k ~= "commands" then t[k] = v end end local charsacc = characters[acc] --~ local ca = charsacc.category --~ if ca == "mn" then --~ -- mark nonspacing --~ elseif ca == "ms" then --~ -- mark spacing combining --~ elseif ca == "me" then --~ -- mark enclosing --~ else if not charsacc then -- fallback accents acc = unicodefallbacks[acc] charsacc = acc and characters[acc] end local chr_t = cache[chr] if not chr_t then chr_t = {"slot", 1, chr} cache[chr] = chr_t end if charsacc then if trace_combining_define then report_combining("composed %C, base %C, accent %C",i,chr,acc) end local acc_t = cache[acc] if not acc_t then acc_t = {"slot", 1, acc} cache[acc] = acc_t end local cb = descriptions[chr].boundingbox local ab = descriptions[acc].boundingbox -- todo: adapt height if cb and ab then local c_llx, c_lly, c_urx, c_ury = scale*cb[1], scale*cb[2], scale*cb[3], scale*cb[4] local a_llx, a_lly, a_urx, a_ury = scale*ab[1], scale*ab[2], scale*ab[3], scale*ab[4] local done = false if compose then local i_compose = compose[i] local i_anchored = i_compose and i_compose.anchored if i_anchored then local c_compose = compose[chr] local a_compose = compose[acc] local c_anchors = c_compose and c_compose.anchors local a_anchors = a_compose and a_compose.anchors if c_anchors and a_anchors then local c_anchor = c_anchors[i_anchored] local a_anchor = a_anchors[i_anchored] if c_anchor and a_anchor then local cx = c_anchor.x or 0 local cy = c_anchor.y or 0 local ax = a_anchor.x or 0 local ay = a_anchor.y or 0 local dx = cx - ax local dy = cy - ay if trace_combining_define then report_combining("building %C from %C and %C",i,chr,acc) report_combining(" boundingbox:") report_combining(" chr: %3i %3i %3i %3i",unpack(cb)) report_combining(" acc: %3i %3i %3i %3i",unpack(ab)) report_combining(" anchors:") report_combining(" chr: %3i %3i",cx,cy) report_combining(" acc: %3i %3i",ax,ay) report_combining(" delta:") report_combining(" %s: %3i %3i",i_anchored,dx,dy) end if trace_combining_visualize then t.commands = { push, {"right", scale*dx}, {"down",-scale*dy}, green, acc_t, black, pop, chr_t } -- t.commands = { -- push, {"right", scale*cx}, {"down", -scale*cy}, red, {"rule",10000,10000,10000}, pop, -- push, {"right", scale*ax}, {"down", -scale*ay}, blue, {"rule",10000,10000,10000}, pop, -- push, {"right", scale*dx}, {"down", -scale*dy}, green, acc_t, black, pop, chr_t -- } else t.commands = { push, {"right", scale*dx}, {"down",-scale*dy}, acc_t, pop, chr_t } end done = true end end end end if not done then -- can be sped up for scale == 1 local dx = (c_urx - a_urx - a_llx + c_llx)/2 local dd = (c_urx - c_llx)*italicfactor if a_ury < 0 then if trace_combining_visualize then t.commands = { push, {"right", dx-dd}, red, acc_t, black, pop, chr_t } else t.commands = { push, {"right", dx-dd}, acc_t, pop, chr_t } end elseif c_ury > a_lly then -- messy test local dy if compose then -- experimental: we could use sx but all that testing -- takes time and code dy = compose[i] if dy then dy = dy.dy end if not dy then dy = compose[acc] if dy then dy = dy and dy.dy end end if not dy then dy = compose.dy end if not dy then dy = - deltaxheight + extraxheight elseif dy > -1.5 and dy < 1.5 then -- we assume a fraction of (percentage) dy = - dy * deltaxheight else -- we assume fontunits (value smaller than 2 make no sense) dy = - dy * scale end else dy = - deltaxheight + extraxheight end if trace_combining_visualize then t.commands = { push, {"right", dx+dd}, {"down", dy}, green, acc_t, black, pop, chr_t } else t.commands = { push, {"right", dx+dd}, {"down", dy}, acc_t, pop, chr_t } end else if trace_combining_visualize then t.commands = { push, {"right", dx+dd}, blue, acc_t, black, pop, chr_t } else t.commands = { push, {"right", dx+dd}, acc_t, pop, chr_t } end end end else t.commands = { chr_t } -- else index mess end else if trace_combining_define then report_combining("%C becomes simplfied %C",i,chr) end t.commands = { chr_t } -- else index mess end done = true characters[i] = t local d = { } for k, v in next, descriptions[chr] do d[k] = v end descriptions[i] = d end end end end end if done then properties.virtualized = true end end end registerotffeature { name = "compose", description = "additional composed characters", manipulators = { base = composecharacters, node = composecharacters, } } registerafmfeature { name = "compose", description = "additional composed characters", manipulators = { base = composecharacters, node = composecharacters, } } vf.helpers.composecharacters = composecharacters -- This installs the builder into the regular virtual font builder, -- which only makes sense as demo. commands["compose.trace.enable"] = function() trace_combining_visualize = true end commands["compose.trace.disable"] = function() trace_combining_visualize = false end commands["compose.force.enable"] = function() force_combining = true end commands["compose.force.disable"] = function() force_combining = false end commands["compose.trace.set"] = function(g,v) if v[2] == nil then trace_combining_visualize = true else trace_combining_visualize = v[2] end end commands["compose.apply"] = function(g,v) composecharacters(g) end -- vf builder -- {'special', 'pdf: q ' .. s .. ' 0 0 '.. s .. ' 0 0 cm'}, -- {'special', 'pdf: q 1 0 0 1 ' .. -w .. ' ' .. -h .. ' cm'}, -- {'special', 'pdf: /Fm\XX\space Do'}, -- {'special', 'pdf: Q'}, -- {'special', 'pdf: Q'}, �������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/l-package.lua�������������������������������0000644�0001750�0001750�00000023245�12161703335�024227� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['l-package'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Code moved from data-lua and changed into a plug-in. -- We overload the regular loader. We do so because we operate mostly in -- tds and use our own loader code. Alternatively we could use a more -- extensive definition of package.path and package.cpath but even then -- we're not done. Also, we now have better tracing. -- -- -- local mylib = require("libtest") -- -- local mysql = require("luasql.mysql") local type = type local gsub, format = string.gsub, string.format local P, S, Cs, lpegmatch = lpeg.P, lpeg.S, lpeg.Cs, lpeg.match local package = package local searchers = package.searchers or package.loaders -- dummies local filejoin = file and file.join or function(path,name) return path .. "/" .. name end local isreadable = file and file.is_readable or function(name) local f = io.open(name) if f then f:close() return true end end local addsuffix = file and file.addsuffix or function(name,suffix) return name .. "." .. suffix end -- local separator, concatinator, placeholder, pathofexecutable, ignorebefore = string.match(package.config,"(.-)\n(.-)\n(.-)\n(.-)\n(.-)\n") -- -- local config = { -- separator = separator, -- \ or / -- concatinator = concatinator, -- ; -- placeholder = placeholder, -- ? becomes name -- pathofexecutable = pathofexecutable, -- ! becomes executables dir (on windows) -- ignorebefore = ignorebefore, -- - remove all before this when making lua_open -- } local function cleanpath(path) -- hm, don't we have a helper for this? return path end local pattern = Cs((((1-S("\\/"))^0 * (S("\\/")^1/"/"))^0 * (P(".")^1/"/"+P(1))^1) * -1) local function lualibfile(name) return lpegmatch(pattern,name) or name end local offset = luarocks and 1 or 0 -- todo: also check other extras local helpers = package.helpers or { cleanpath = cleanpath, lualibfile = lualibfile, trace = false, report = function(...) print(format(...)) end, builtin = { ["preload table"] = searchers[1+offset], -- special case, built-in libs ["path specification"] = searchers[2+offset], ["cpath specification"] = searchers[3+offset], ["all in one fallback"] = searchers[4+offset], -- special case, combined libs }, methods = { }, sequence = { "already loaded", "preload table", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } } package.helpers = helpers local methods = helpers.methods local builtin = helpers.builtin -- extra tds/ctx paths ... a bit of overhead for efficient tracing local extraluapaths = { } local extralibpaths = { } local luapaths = nil -- delayed local libpaths = nil -- delayed local oldluapath = nil local oldlibpath = nil local nofextralua = -1 local nofextralib = -1 local nofpathlua = -1 local nofpathlib = -1 local function listpaths(what,paths) local nofpaths = #paths if nofpaths > 0 then for i=1,nofpaths do helpers.report("using %s path %i: %s",what,i,paths[i]) end else helpers.report("no %s paths defined",what) end return nofpaths end local function getextraluapaths() if helpers.trace and #extraluapaths ~= nofextralua then nofextralua = listpaths("extra lua",extraluapaths) end return extraluapaths end local function getextralibpaths() if helpers.trace and #extralibpaths ~= nofextralib then nofextralib = listpaths("extra lib",extralibpaths) end return extralibpaths end local function getluapaths() local luapath = package.path or "" if oldluapath ~= luapath then luapaths = file.splitpath(luapath,";") oldluapath = luapath nofpathlua = -1 end if helpers.trace and #luapaths ~= nofpathlua then nofpathlua = listpaths("builtin lua",luapaths) end return luapaths end local function getlibpaths() local libpath = package.cpath or "" if oldlibpath ~= libpath then libpaths = file.splitpath(libpath,";") oldlibpath = libpath nofpathlib = -1 end if helpers.trace and #libpaths ~= nofpathlib then nofpathlib = listpaths("builtin lib",libpaths) end return libpaths end package.luapaths = getluapaths package.libpaths = getlibpaths package.extraluapaths = getextraluapaths package.extralibpaths = getextralibpaths local hashes = { lua = { }, lib = { }, } local function registerpath(tag,what,target,...) local pathlist = { ... } local cleanpath = helpers.cleanpath local trace = helpers.trace local report = helpers.report local hash = hashes[what] -- local function add(path) local path = cleanpath(path) if not hash[path] then target[#target+1] = path hash[path] = true if trace then report("registered %s path %s: %s",tag,#target,path) end else if trace then report("duplicate %s path: %s",tag,path) end end end -- for p=1,#pathlist do local path = pathlist[p] if type(path) == "table" then for i=1,#path do add(path[i]) end else add(path) end end return paths end helpers.registerpath = registerpath function package.extraluapath(...) registerpath("extra lua","lua",extraluapaths,...) end function package.extralibpath(...) registerpath("extra lib","lib",extralibpaths,...) end -- lib loader (used elsewhere) local function loadedaslib(resolved,rawname) -- todo: strip all before first - local base = gsub(rawname,"%.","_") -- so, we can do a require("foo/bar") and initialize bar -- local base = gsub(file.basename(rawname),"%.","_") local init = "luaopen_" .. gsub(base,"%.","_") if helpers.trace then helpers.report("calling loadlib with '%s' with init '%s'",resolved,init) end return package.loadlib(resolved,init) end helpers.loadedaslib = loadedaslib -- wrapped and new loaders local function loadedbypath(name,rawname,paths,islib,what) local trace = helpers.trace for p=1,#paths do local path = paths[p] local resolved = filejoin(path,name) if trace then helpers.report("%s path, identifying '%s' on '%s'",what,name,path) end if isreadable(resolved) then if trace then helpers.report("%s path, '%s' found on '%s'",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbypath = loadedbypath methods["already loaded"] = function(name) return package.loaded[name] end methods["preload table"] = function(name) return builtin["preload table"](name) end methods["lua extra list"] = function(name) return loadedbypath(addsuffix(lualibfile(name),"lua" ),name,getextraluapaths(),false,"lua") end methods["lib extra list"] = function(name) return loadedbypath(addsuffix(lualibfile(name),os.libsuffix),name,getextralibpaths(),true, "lib") end methods["path specification"] = function(name) getluapaths() -- triggers list building and tracing return builtin["path specification"](name) end methods["cpath specification"] = function(name) getlibpaths() -- triggers list building and tracing return builtin["cpath specification"](name) end methods["all in one fallback"] = function(name) return builtin["all in one fallback"](name) end methods["not loaded"] = function(name) if helpers.trace then helpers.report("unable to locate '%s'",name or "?") end return nil end local level = 0 local used = { } helpers.traceused = false function helpers.loaded(name) local sequence = helpers.sequence level = level + 1 for i=1,#sequence do local method = sequence[i] if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end local result, rest = methods[method](name) if type(result) == "function" then if helpers.trace then helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) end if helpers.traceused then used[#used+1] = { level = level, name = name } end level = level - 1 return result, rest end end -- safeguard, we never come here level = level - 1 return nil end function helpers.showused() local n = #used if n > 0 then helpers.report("%s libraries loaded:",n) helpers.report() for i=1,n do local u = used[i] helpers.report("%i %a",u.level,u.name) end helpers.report() end end function helpers.unload(name) if helpers.trace then if package.loaded[name] then helpers.report("unloading, name '%s', %s",name,"done") else helpers.report("unloading, name '%s', %s",name,"not loaded") end end package.loaded[name] = nil end -- overloading require does not work out well so we need to push it in -- front .. table.insert(searchers,1,helpers.loaded) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/file-res.lua��������������������������������0000644�0001750�0001750�00000013407�12130411274�024102� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['file-res'] = { version = 1.001, comment = "companion to supp-fil.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local isfile = lfs.isfile local is_qualified_path = file.is_qualified_path local hasscheme = url.hasscheme local trace_files = false trackers.register("resolvers.readfile", function(v) trace_files = v end) local report_files = logs.reporter("files","readfile") resolvers.maxreadlevel = 2 directives.register("resolvers.maxreadlevel", function(v) resolvers.maxreadlevel = tonumber(v) or resolvers.maxreadlevel end) local finders, loaders, openers = resolvers.finders, resolvers.loaders, resolvers.openers local found = { } -- can best be done in the resolver itself local function readfilename(specification,backtrack,treetoo) local name = specification.filename local fnd = name and found[name] if not fnd then local names local suffix = file.suffix(name) if suffix ~= "" then names = { name } else local defaultsuffixes = resolvers.defaultsuffixes names = { } for i=1,#defaultsuffixes do names[i] = name .. "." .. defaultsuffixes[i] end if trace_files then report_files("locating: %s, using default suffixes: %a",name,defaultsuffixes) end end for i=1,#names do local fname = names[i] if isfile(fname) then if trace_files then report_files("found local: %s",name) end fnd = fname break end end if not fnd and backtrack then for i=1,#names do local fname = names[i] for i=1,backtrack,1 do fname = "../" .. fname if isfile(fname) then if trace_files then report_files("found by backtracking: %s",fname) end fnd = fname break elseif trace_files then report_files("not found by backtracking: %s",fname) end end if fnd then break end end end if not fnd then local paths = resolvers.instance.extra_paths if paths then for i=1,#paths do for i=1,#names do local fname = paths[i] .. "/" .. names[i] if isfile(fname) then if trace_files then report_files("found on extra path: %s",fname) end fnd = fname break end end if fnd then break end end end end if not fnd and treetoo then fnd = resolvers.findtexfile(name) or "" if trace_files then if fnd ~= "" then report_files("found by tree lookup: %s",fnd) else report_files("not found by tree lookup: %s",name) end end end found[name] = fnd elseif trace_files then if fnd ~= "" then report_files("already found: %s",fnd) else report_files("already not found: %s",name) end end return fnd or "" end --~ resolvers.readfilename = readfilename -- bonus use getreadfilename instead function finders.job(specification) return readfilename(specification,false, false) end -- current path, no backtracking function finders.loc(specification) return readfilename(specification,resolvers.maxreadlevel,false) end -- current path, backtracking function finders.sys(specification) return readfilename(specification,false, true ) end -- current path, obeys tex search function finders.fix(specification) return readfilename(specification,resolvers.maxreadlevel,false) end -- specified path, backtracking function finders.set(specification) return readfilename(specification,false, false) end -- specified path, no backtracking function finders.any(specification) return readfilename(specification,resolvers.maxreadlevel,true ) end -- loc job sys openers.job = openers.file loaders.job = loaders.file -- default anyway openers.loc = openers.file loaders.loc = loaders.file openers.sys = openers.file loaders.sys = loaders.file openers.fix = openers.file loaders.fix = loaders.file openers.set = openers.file loaders.set = loaders.file openers.any = openers.file loaders.any = loaders.file function getreadfilename(scheme,path,name) -- better do a split and then pass table local fullname if hasscheme(name) or is_qualified_path(name) then fullname = name else fullname = ((path == "") and format("%s:///%s",scheme,name)) or format("%s:///%s/%s",scheme,path,name) end --~ print(">>>",fullname) return resolvers.findtexfile(fullname) or "" -- can be more direct end resolvers.getreadfilename = getreadfilename function commands.getreadfilename(scheme,path,name) context(getreadfilename(scheme,path,name)) end -- a name belonging to the run but also honoring qualified function commands.locfilename(name) context(getreadfilename("loc",".",name)) end function commands.doiflocfileelse(name) commands.doifelse(isfile(getreadfilename("loc",".",name))) end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-par.lua��������������������������������0000644�0001750�0001750�00000011757�12130411274�024104� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['buff-par'] = { version = 1.001, comment = "companion to buff-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local context, commands = context, commands local insert, remove, find, gmatch = table.insert, table.remove, string.find, string.gmatch local strip, format = string.strip, string.format local trace_parallel = false trackers.register("buffers.parallel", function(v) trace_parallel = v end) local report_parallel = logs.reporter("buffers","parallel") local variables = interfaces.variables local parallel = buffers.parallel or { } buffers.parallel = parallel local settings_to_array = utilities.parsers.settings_to_array local data = { } function parallel.define(category,tags) local tags = settings_to_array(tags) local entries = { } data[category] = { tags = tags, entries = entries, } for i=1,#tags do entries[tags[i]] = { lines = { }, number = 0, } end end function parallel.reset(category,tags) if not tags or tags == "" or tags == variables.all then tags = table.keys(entries) else tags = settings_to_array(tags) end for i=1,#tags do entries[tags[i]] = { lines = { }, number = 0, } end end function parallel.next(category) local dc = data[category] local tags = dc.tags local entries = dc.entries for i=1,#tags do insert(entries[tags[i]].lines, { }) end end function parallel.save(category,tag,content) local dc = data[category] if not dc then return end local entries = dc.entries[tag] if not entries then return end local lines = entries.lines if not lines then return end local line = lines[#lines] if not line then return end -- maybe no strip -- use lpeg if find(content,"%s*%[") then local done = false for label, content in gmatch(content,"%s*%[(.-)%]%s*([^%[]+)") do if done then line = { } insert(lines,line) else done = true end if trace_parallel and label ~= "" then report_parallel("reference found of category %a, tag %a, label %a",category,tag,label) end line.label = label line.content = strip(content) end else line.content = strip(content) line.label = "" end end function parallel.hassomecontent(category,tags) local dc = data[category] if not dc then return false end local entries = dc.entries if not tags or tags == "" or tags == variables.all then tags = table.keys(entries) else tags = utilities.parsers.settings_to_array(tags) end for t=1,#tags do local tag = tags[t] local lines = entries[tag].lines for i=1,#lines do local content = lines[i].content if content and content ~= "" then return true end end end return false end local save = resolvers.savers.byscheme function parallel.place(category,tags,options) local dc = data[category] if not dc then return end local entries = dc.entries local tags = utilities.parsers.settings_to_array(tags) local options = utilities.parsers.settings_to_hash(options) local start, n, criterium = options.start, options.n, options.criterium start, n = start and tonumber(start), n and tonumber(n) local max = 1 if n then max = n elseif criterium == variables.all then max = 0 for t=1,#tags do local tag = tags[t] local lines = entries[tag].lines if #lines > max then max = #lines end end end for i=1,max do for t=1,#tags do local tag = tags[t] local entry = entries[tag] if entry then local lines = entry.lines local number = entry.number + 1 entry.number = number local line = remove(lines,1) if line and line.content then local content = format("\\input{%s}",save("virtual","parallel",line.content)) context.doflushparallel(tag,1,number,line.label,content) else context.doflushparallel(tag,0,number,"","") end end end end end -- interface commands.defineparallel = parallel.define commands.nextparallel = parallel.next commands.saveparallel = parallel.save commands.placeparallel = parallel.place commands.resetparallel = parallel.reset function commands.doifelseparallel(category,tags) commands.doifelse(parallel.hassomecontent(category,tags)) end �����������������context-2013.05.28.20130704/texmf-dist/tex/context/base/context-version.png�������������������������0000644�0001750�0001750�00000116636�12161703335�025564� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ZL���IDATxsdٕ'�ZDH$S0If2,Ȫꩩj;fk6felzںEMW(:%3#e� 8\k{u@��c0}ssۿ[|E_?U�aW+'MWB}Wh&( ?Omm{ocR۶){aOäc!AQv].(snQ(|mۮT*1]F\T*Kt,_ 16~%8Nt:Nez^.CaG ɲ,0*JRm^W*0jZ8 JWp$ p8|@3((J$,˲,wxU H^4l|FI{c7CSJa1˲LӴm[ӴRT*bV,kg+8bm ˲qnAQΒ9mvmnVM,suB~){<g]p!i_9JNڭBEQUѲ,M:]ժժiZMuJ6G_ ![Vrqņ+^x^Y,ݴVskkS9`�@ظxq5YVbfFVU*}G8s (U* la%}%�nEQEQdYX, AYrOivuk~><;-#1]睵Rx {93NBr\_FT*e2t:7fI)i+7u3=wGrM<D"xw||LY(_7 |^ƢѲTҕ+wkLMnAe`}=x<OOOōd2YV-}+m~?X,p89Qv-/_ iLL ٧34 }~27}K/B#IL6flw}%�{QǙ cX,CeEQf.م~Xl1R(mZm@/0NL擿{J+x#{'3~fG帜B!]׋b&8RSJ�SgUnptZܵ?vض[[V+ 8 (U�f[V%MS�F[z>?o''m}36G$I,sC? be=^�ܦ = ~AÁ.wQalV3++߼ͦF\.8hT FciI4 .�"N�% F''6ď,r0 B`0s[; W�9WD<|(n#|(5Lfqe哛7W, "$~ضR'i0� $%j߿Yu(OJ\j&߂1'-�M{uG(V&`ۦ66.]O; b1LM0A @�jZ賬8@o֞gov @莄:4UUGGGrXl6i>>S̙3{ ݚ`p||ӓ@r�m3]5[X熑02BZl_]V{Ͻ) t�P4�jۦqz8f@ `vxDDw�bAýGx㚋W߽zlvɲe�dCC|^Y,fq�XZ_'sqa@EDB2f8=RON�=cccx:nSMuշJ)22,A8FGptNDYQ>v[@F� Ѐ&FB>o:<F<ǣFnݪV S^ b1Ӊ=wrh!(M&5:!83ALL lR!8nF(uSv <�{MH^ެմry߈mmQF.llllmmi9I�(~{^%mtN-/_X\ɬm�cØF4 QkY"0f1u}': Po1[]m\K/%NRn.Dž v�ra |\@ 044^۰G{ӎDY^._u2AJI$P;�cƜ2M\q-1`c+ԋūuamoxQbI u&VX,ˋRIo+r] Й_Q O huy04`{d+^/&'16Y!zk^VA`hZesKn,?O@۲,kSOz'U+$@;g:66F4M҇+_NL|$=f16kZXx0469߹˅a:] aAp0{0ph�34WWO믻B!A r?uT4tRPx/�t$XLm/uzS!Dظx67/W*Y]v\##8y0 ( B�t["$\�۲ ͛c/0\z01!p 0??eƱ&�R422200 :Yv5RX\]Zq:=iUc�PLNbz~ݻ$BӠ(Yv�&r9+ߠc (0@9`�m5v5kTq嗣cc;kGKݖ(:ΕFq~ЗD�:iMNg``W9&fAdV*˫}Q(wd}_U1>iD"6CJ<a`0R6p#(Z{ m!L3RJc??pLaX,Ɓ+Pe�(|>_;Xn)]᠆.νGKhc4DaEqirP *`Y~FzrkkՁsDBVᰪ,sуw =Й/EQB86ㅭ�PjzU ++\T_!gt}}8w^/ڃx] QAd`bDrI� @x l [ Ͻ׾v=v t|c~M۶].̌zjTN� @wI^8IcQ2j͛_XxTڴެ6{<éSp" 882bvЌn3E`wRZN.~:'^z)O,uJ�I\.˗Sԃ *B(:Ȉ(c޸i6xO>?~Vf-Oc0=Y8�Tf"\7o6{/tGb;djzu+yYaGg:)m-dN34r=;�TQp8(  ugڶyyiB2yXдbG[@)zz05a8/SH!*z(w-!N`X53uP7oV3Ο|==D0Y$E"A= @FFF"Hoĝfy5y-Yj�A@") mܶTP � MkJ(�VNb@�۲JLX,Gz*:>SnjYGXw&>P$�%!MBijAԪ׳Z:=fK{A{w8ۋ AUos=ɲP .WXdBHSӌRwbH�^�9hHY,RXԩ訯2JKy#cTiYֱc#�%I B.kǪxG`ZQ.[[WV>I&[>�Q׋~LO# lGM|DB�0 RJP'RN~`HZx[k"�''&Ϟ<w;^A;#)Be 꺞 =Ѝ/'"$IG0yg̶,Ck ˟T�O͓K_s<mht%Ia`av ~V �S)|z.˭}y79+CzzTK$Y ._\*ox cpppvv{{�,TJ./4?nezv;_^j&I4z{qTDB*8!QA]-,'0 D%PZvYfnyww?<{vL<)JaG焐$ippիWs ~< vԞ#1ykD+W>JnjFsM`fCCvx!ḞIe+>~pݠƟ._ڶmki ᄏqRtllX̌ ot؍7x ͏�p[ood<!(e2 Ba\Nvk8-8H$r?0yceӟ 58Հ�" K Ш׵zZ(VV<ptl,6>8y2/* C7�os �x<>55߯*mgh ܧY|~9ϯI۶a6nוR( Q @<0!,qB$�zFk5a.hgQ"@(�y"S*,]ϭ׷n}Edd$ �F遀Bt\5 ^7ͣEvwl1jZ^ j:=JךᠺJ'%ctE0;j6i֎V* @k൸A 9V`6饥%NO>s`PxZwru݃Riiih�tܝ`ɓ, c̲tr.q9˭fu"T>&&0< w�]TK�ѰӜ?  ` HU.g _wz:~Dɓ+pL^y !R7==]("=lGK�:D"q̙`0x*\q6vYOn$67sR(cs'mEc|##po9*2  5 q$�@?9`l;hh;?uFjn~Dz{&'㓓a>2!?qV;M�� :u* ?e51F|:=N/-]ղeXVGSyPEi](@oa4uNsۥ> @ H%%:A239+V,}h42:ON}%I陜j_*pǷ]UwF,d2RltZ)%hϝ~"A[Ntm GHFCv#<2ݨVi|po<Y'X�c@(9 dۖt?)7u@-/}uBH7<4 8e-m/kkki޿ <Щ3<<<55FynW״ FW+TUՂkܔE: $|-K7E(tʼn#];&@HTZ2t6Z�@Ё PRH@sU!=?D\;F"pÞHDr8Z"A띜l4;88xIw IFW|~\Nr+ pto"B4pxf[C!I7@Rժ>thenkJZ[ ;2�Xb>B!O4F@0uUHoooR4X,d! @tOOٳg}>k?3 ٬[V4V*7d.,J[8?�Sp@Qt"A_q\dj6aYц~bR9wq8>*b2 @�? s3 JT  Dx4yu%$ ޼ e�$sy<�mضEEe\n1+ō|~4N[V@!ex<H$ ҠrTDMPzZY6~&�7w`uR1q \.W___>___}�p@ 4J6T,nr-2(gn=MXŹ!oi9rvi4)rjXt= }|q-KxNP˜�!  )0RʽZPfac J%-5Yhb'p!0jJ~Ysvec@ ,|yhĺEI﫯e_w==h4:00|蜁#�T__(Ԧ-EYGF Ah^oGO."� ^/ .8PU8V$bЃ x�X�p` B:}ƙdyU[?|X_[t30;>>;N zUx7>>>08 ^>U]dYL?l:U&L 6 WIjaeѪj.W'(nźSp! rw8z4R @sq•ͷh̚hԧlf. f1�.gbbr׊ϊaST@TRTw߼kP�0E6a= ۆa1(cFAL;+::�Cy+'y|v. >-�,OLLd\.wNnJ?.[Ss#J(IWI< a{*M$ɯIktQ7H$I&-~~W fq%X'shZ=�<8!&Uj-[Wvf)/U*q1Pрm|[g]|9UÑ~iǂHvso?~^ !:'qpj `]ItPe``̙3JЬ53[NnlϫէjDc.OP A|QVr++a예/![`_Ѩ ʥF?#?[:!)Êly'Ff < 3NNN|BAK*VOJVVoz=,i~cB<:h4Q:c<:8"nZ@鬟:?:~釮Sr*6" !]aERXpKRt@5�p'fFt5kFa*CjZwYBRɝN7y/ :$)P.omqzD"Pj==G,+a}["9[ !Y]6 >^8vZZ#Ыz�`J!BPUɷ/+b0 83G>'(K)Z�Fi=S CncO@^SSҋ/>2<,;U޺X3gW+w)x9*�dX,ۻ}#W�DQx<ݵzPr �2dOSUP)MDE %?p_2JSU=| Ms ɪNH3,G󊢚^[/ύix \BW%u=B`0///│1 @Dv7-Vj� G&0r@ 46+_ۡS!A\ym@`AvMMj۹eKӾOI QW&Co<N)jm?i NՈJ@HCrDnI~$d2�# V2u�ՠQ "@@@K}2f$M0 EqOM`mgs7c%I]3J � Bq|o6:;z<R>|!H5͝(Y:�h!eyElǻ8Ήx<.2¬fWtPE .^cQi <,Jz#=O2D1�̶K[[?;@g)׀pX7&]WtDܯgJ[o�e Iܫ3gx<z+~G�PJUUu8;7n!beu#e7Fi8QIN$blm9?u�m 錹ZJmY�v}$mf+ 4[{w.J\wۨ�� Q}N@vv݉D^?4`Fǹnt@(vත3}‚PKzQW%R$2#d2ػ CFi-c~KRxS=~\  #S˼y?.xLmTj�(~_ n*_gEZ__Oo�?<<ӳ["BmB]+k/6~�O|ʆ6fՄ+r,v \N3M3Yr2Q(VKZ PAA HgFxdDQԆV_-~Pzr}sTi% (Ќ1Yp(u4MIG,� crZQӊ [j64aҹ0PPف8OB_޸WD7v[*sX/ԶQ*!Kx<Q+0&>7&&vURkTrso{sl={-P�j�vB7vv]y7*ZQ#wN@u ۡ?0 s7""@y77Qo2.w>@)4 B\,zq(Kʞ{n?OM D7ﯼ/nDo1 } nŽ !A= `4'.h%mۗ5[㺐i1ˍʊ#o"K.W`m'GSS^ :l^o 0Fm:<8Nvo ~kXLeҭ_Eꢷy2`T$/'׎(z<{=b b; m; Ӻݫ΋cj}lljojύBřHq8|K~:1aJVcQU!" Ll[z[Q%OF|vIh6>\_^ ^jpbk/"*^gvHP(T*p+ {^G%Sz<6Oh7u'z},3*3$a7?2RF!IYL)j5pej4=0wSdq/GywfFuMS+o37Rd}~X]I?bMv{7:$aIJN#`B+hnlh{X;#ֈ+4i& #> ?qõ]ONoG O\QZ.QJnwՆ2u:+cco|cW=@fS_/|m3H|i@yVHqGDakB(z2;sd;(PhxxXQFޤҝca۸w $֛vxnv  ?|moZq RT$ bFisaY &P�2@sv6oO< JT/wwΠWl XOTE?/ jJq:~t6v,vW,;66ibwS(+q>WG}Bj y\SkN|{q ˎ/k##V#E|, "aY@bχ)}Ԣ`]0'IpWOaPjS֬?&q)mn@ }C9>4hv;(x|xxx}e[Fq�N7?<_JNt7�YvLMrnɓO2<j[m^cB4:trˢm|=b*ߋƦg]�c̦v>{?;Ex'mƘM{@)D";"vY-W3u*sEH K]Px'E,Csh˂ E VJԇ:&lї_~') bU~?\ZOyx@P"ޯ�0Ƽ^o___8 xB[eahߛ!첽O'ߙ8{{%I^Puh.Rx=J/.N^/xᎱbO Xɡ^ q9[x"eBTܗ�pL RicK�cx<H$$IOE n֛;} LETH+ܨ`S(*/]am , :tDQfk"� @I+=;+CϻZM\ŕ+[݇x C| " h@Ùt|�su0=۴Eٰ#);F v6? -XML%@ߓO+d26FIeRlwc�@s?0 A&'wSS`]no]/ _m6$ngEq^G~wD"FEQoU:۰3 KPi_uA'gF醩cϏ)nx<g˗?Izh2 ˂OX%t]+B&P�T5HL7@Et5Ƨ7{61x#+G`tvG� 0006Z69()Pܥ ͘Ό$K oW9cb=>`75Mjb, ` mY#O5BnuvpPۦW~r'~@=jL|4?p݌z@D" &˰iy6⢥B9WT'^dY|RQܟ}?dbku~D) %(0u(Œ=ؤ 4FW^D,B4C`ჟdٻ1<�(<I#�^g/]D-Z/[eۺ?>Τsk=On0"Ir<~⩧͛_zuj �~DB@W6u]+|pDt`XEsMjP@o컛MkԂL޻qG �P(Tq@D"Q8H'FK<U 3DH,ack3(L) lf&&}='r 8Al=d0B*`^|grRuAe~; @^ȉb;"~.dYx<;rcttt U==f.e-(2#.`6ll/獺q͓(� Ξz{ډ遪>84hEhhmc.]$5Um>̫{{A]J}_/G38w|S}eH:%Irw/|@P(8a QX-쑣Ӂlas2q5z,6S*@ܹ_\hF-j$%$JE+CuW-:w3⋢,LR~şlyij�Rwy܊s0<K722(ʁFr#m� C<M�N8n\^8ScϏIDٳ?.\.ݲ  x@N/zFAyU7%) ~k~!m6nenu%טl`PvP2L7$#IMj!G"8hFqh4jjZ]'d%_x {vLv qp𬪺?bQF8|�t ^,V2  m�-QtOM=g63 B(.\ŵ_\.[g,9;wetSH eݑoxFQ`BH-_˭I|&Bzc7o~?wf~'??ĵF6=Dy3tj6Flp(x<^8'X,m?N}$Q A@:(,jzNރ.<aR+idy#U61z4S}i<_yirj [044(nB`z**H:o =ddhHRUެ_\뿹ԸT+!`W#<3&z�D0͘D�lUY�$C>*/#i=l_7k͙WgQFy Eq27۫WLcc[ Z $Iz#h*+$e  gg_xa]cJW+戉u#-!ZBE;=r_@  )]j\(wN֯:<渼qOn5E"``ӧ_w:=WsţLo6erԴf1LuY Z<>s'_}gzZ$Vsee3h)Zmfך5E<q�.4X, #.e+ynksmrw]a%y\|+ԤO品D@TDz<ѓ'_s:.zsrPxpQ].Jf.=yL�* \w8^;^F)WoxH_Px4U9|x|_*(H<9нc^,m>2L䣥-<Y.-vQq!LQccϹݡ>+,<o _#D"\�V y_n<`�`HݽO{eR[7Zqn_s6Aٯ4߯EF~Yۈk9F\  Ir7sILY͖Aީ^ >S(?7nܻ>^CQTYTkc�`o?O˭=,mZ4�GnEI H$x~!TBUꮃA|3y;SItk}'6ᎸaCpxեKw.]jsx16tbMM3MuOž/' 4_Q-0 ?J;Q> ^-�].W4w];g2lM׆PJo".}߿-{)OC-*b4:z97pjq㇯<Wلz<HkBRp?�kgϔ`hD"#>;+'eQ*qzgN&-ݩ?D`3W)uf#t6tk_;(XQLcZ4u3UTw:c > u1IkW~yɯMB2۶ʲշnZi4er\JdYD!RYN V5Qt<K/EFGcy-y7I9Sh[%oÝdfǪ*b"gɷSVT3Kp%B<h]#_H|')Fq|=>Bm>_ɓVUϵkoݴ,ӲHqp˥^a@ĩY_ց[=믏>臨 3?RU#U4ejMjJš`A/!�E@JԢ#BnwS"Y*Pv܏y#^A]`{EMk58x4aYx6@-e?OvHT("=~ڶEBpy?ְI 5{ (6wq=Hm{�숣7ؖO7k#B @y3qx\{Za둑 �$IzO._V8}n*UuH(۳A)cLlo&>S& \@d|weU%~1?yo=ͣ}kWԈ|=Om=;�o>,Ь5/wzF b�:[A?j6/o{\L/Z>55~tޞ/jx P(4Ժ/!ōj>�|lI҉o~k&'v3ew~~77:fH=Ha 5CBw{ �#�fRZI{@ (*TRxX*gp vIyq;gwfQťAPh\k~n8qCCp8r 1B ˲Ӷ �吥="5x_x!/*lU~s7|wX3F L�a;Ûzw MLS0Wx<{WW\AG{� p7u`s}c`k_lM6'(ξ&ʕ+oml&5 5Şr9N+0|l4v&w @8uċ/N|`1FLj]ٸ;ͿWF1g- 흪lQB-}8@ crBͪu59j#wTe@8AݸÞbY;3QT^U*da`l ~1ԈCӄ=!0ƪiN8*i$B'Ξ= ?/H(4*//?O~tLCd! خ°^lH\.W8n ZIKϥ+ Zv?裶Ġ {z>7%m<ܺxѨV1; osViTeYfڶt rGp K/~Mo4 QjXFQ+~j4y\ۈn]zT%w#w�x"!KDRIUV>YzO| `[*)" r>??5^?e16B08vufjH�Jp_g-/7*sp#)s|s9MZ_ 6b<'ݽ5kAp\"BH5Wݼ��|4Yn r sչK?T\DZ"IJ8<sDKヒӧ12rG1|:ηtEXL2p("O|'^z)/2xw٥H0N1uD [,8s-wϮͫ;&/1nh :2s /{OcDQFGz\_X,_FndpxJ:m4.$uYяxD(j/  c u1ww4wa`$Kp3&HB~%u} mώGR�x("BӘV^][ӂ^g=3 X ξN/߼i7рm {<ᎾӨT,Pa`X$ BSO=uOVn0&Bk[~ww/"dr?j�X7,phpέK{rN #AӵA1mÞ+ݺp5EI878�@7T}Rś7M]a o�;󦮫u`(ɯ}K/LOSc jOV>}1 >2YEj�y:dovw+(7URR^~?ǝ�y :S�欹ͫV2us9ULOKK~5Ь19 ˂mCU%Eq v-l lY!Ǔwǿ5W0H- Md)~s7 ām\#{}wa XQ6yP<'۶ v8:KnߎR4"N je@xͼ~賣!IRr?쿮]Lr�, j�* @]~Ϟя"##(rY3?|.XeU�g@{ė@`:G)*oUM\1i~ cy^110l\-fk\"?ۈ?̸.WZ'іeO00pzWFSA)! e66f� ^Ƭ>oB!BCUO/t%t41 <ޞ=H�8,Vm0WNOhImMv�tFJ޴=?a ǞVO|8F0B~RΕ/ LuhА(`3?P˿h4* (` Qڬ�{'g䤳c~uW̽d섍iP vV8Pj%Krrzv%H�ncF'\9cT}裠|)L<ӽӽ"B(4pgJ%tWjYT0_}r DK~{.6ZNq8df[ g^u^mm_#ĶRtw=]TƸ b[vv1yeS+k{1D! h�l (P0dbf9˰N~jA 33;~,;x9DJiZ:}zg5DL/}뺢0u>^�CM."s{L5SkƘwtq9 n-}TVp&0s_wԑ &�,`!UJͽ7g QqI�0FNoz<;6A3DT61_zg?ze!`j)34YJV ޯ#1v �.3{<ƥ C3` җF� Lc U\]k-{{OA'N҆�Q0(Nċ/,fیZv+{WUpz\֖)oj^0-@J. zE߸O~Bh3mDAH�aKsc/~w< Q~:?R҄a`w_Ιۉ]v0dLs;��ͽ=g&vl{ 2q<Eo:#-6 ^ӧ9v$ م_olЀmo쟂$pXl K hۗIfdɫIj5!=c=^I aPRD1|U RJ˙҇K{ʼn=֬\-^\/%$ˀ-�Ȁ!V;'~)U#@WJR@߿1&Jb%]ټuS> c wFq6ШRCZ * 44h5Ԩ@=>O"D=Ds݁;*c1gl-,%3L`pNx�܀ ;&b[+aNJ:SDg<c0�NsEp !Ԧ[OVv,V3R9�DSC^BR*uRWݪ=_~o .AM_1V^w,:i5s\T2Z.[jJRBYg۶p.5@0~ [n ۸gNqMawJ(:rTRͫݝ/:Cvhښ ۀa4`Q/XDJS6TăAN<٦] |�r(=ޞ^_/A7d)JneUJfQi9]5R@{t@.Q<>/�" ��dJz$>s٬T*w@c~/o\ڸ_QD'0@ {ݭٰ) ۄA"[F9|I,)J(x,<##qGmMM(پh((( B-?2m3S,d6ōBEXuˬmZ̢AB@��(=�~us��i; `2껑V־XK/wllG;~*. ,| YdKB| _t,CɸQ"Ah7TRn4@ȵCe6ۦ|pKx<"^,ʽޘ7w jv1Y\/o7լY1A@AXLH;U|ԉ>`Xhk+7R/46 >~�+doew 20c#K=:﶑& (𕾎 ӄ)h(Ec1O#H*z琻+jڭlvTJr?'1d2[՚?h^rm}/BHDQhGTHm覞6˛Rr5_ʮeH |s�.LuJ~{w;ղ,M%�hoLT/ow+)% M_.wߝ(h"5rȕQ-d8ߟG"^T=r,z@!D !J%Sbq\.Fl֚r63:UZI%8Mcc#LKK[xTr)o` q_< ]$RDDAa 40ٜ7RiT*Zam5Z[\2hVSb3$@?�eZrj'B#B,!=;RvS )4մ1Ħ1D};?j{DRDD<}>^'>'S,L�Z-U4iJ%]je*rf6T7Tr##O /\m+1<Ll_,_^R*jRFpBP ~b1o(/r+p5QF$HW D`3;Sͤʩ^) jP+BP*Ɋ)-naۯ3dFpdQKŽ a}��DQ[�x7G 2)^Tp7hqݎK{-R5P $' *WmUL ԛrQo6kfQ6|>[dխrPU*nBPP OnRFi_A^d5m[H"\Y3 u@'F2Y@"_O/ q_ nt^s xyb\yzT2R2_Wr\sjJ)p�<Q_mV7qA@ fm!𵱯^2n^mhu''C�.l4>_.eMvxN8J �,&CRt5U; ƒaO-ZQY�FY JY4u4) nJ.,6 |(E"Q\C0Bdp|crr&(`͹&Zu`lҖYG)3l 4� (�\*@Xl14 D"HEQDYUUe`v'pr0g 6Zq],lުnV56Mt;`#8V|7鸅_\�F�jڭ-c7m4j`Wn}srG1 W}�2&EB*UBZ4ť`0>$Ki\#]1he5m)[fsB&U B(a|>D"#,n իc/NMMDԮ>m #٨W.o�c 7Pi/mMGU@@(W70B LL@< DQE"߂ \2"+DQfoenVBv!5`P?i9`SxP[A ^XOW#;Gun?%f޿um6nWlFGvW930 ZJ9R|щT|*0 G\$(H<ז; |&N bZe6c!6WlvC "vDBP,biIдT0H#Dj+RH1j3.8?ob"6:y=1^³KRe�lhYZ^.nl%IEAU@`oI]C&"I{#ȓCOZ2,֬-VJ+͕啕+P0X!mCIe- 4Bf/;"CMl4]o�v+Α?TyyC7M[@(F9h m8v"eHWQo$;vx*).Eq*$pV']sce**|~5T*f h"�TI$A";C.%(:==( ]Z9;zC9B)\1&xĉޛ7s@ݩ-kL]Q?mv:eUsᐝNs{z{p0<6 \-т( IOO4FhrqyKҶd钎0b0T4 ۘK=;zzVJ;C!v,/W*}[uoa; f|u2 r %lT1""޾^ox];v]-g0! @Pj4RV+b1]4iE,(z n7N*dVݻ%!(D_ߋ1&Jrv3y壷l"QzOiբ @)OO޼rSum]&`c54MFHSUS>_b+D"H{~g"ż*QJYk:kS{>Y*FҨT=4r%YHit8B pO<f6~vj1%s] y5eZh[6l\><{hfzn[sMjuN6ňzވSn/یB4(hZV+kZVW[RN tI)T�<xz[>ꨛr7҇؈|ߚ $A�!r~kfzހ,Xbvsg%Aш$Eu~J=K5t5R^,D<s\j8xA 2Y wS*jŭVQ*meLr\Z(eL~q> Rz%u)mZP^/fs7p:Ńo\,dp9S8A|S&&&i6͊Z]zS7Cft$D#ѱ`- yW,flZV,iZZ]/Wz}\ |>8z AUowt״{Z{U.UG>55ؘ(7po3K }A !z|'!+RKI$}}*c[@G W|@uVc%èz:] &8 )áXNr)EQ`��aAw0mKꅥJn%UN%d^5ݥknM5S0[(=tg|P~L&~i2>qx{gBJRRæݯ�0GK68e'q<˟agǐ\)Z+q7'1ökSZk67ť|>hW iBQ ~p]Z+H%rñ >S @]_>'*lDRz٨+p#luFm(<#M^*iRBUUx9E$QDYeEa{Y� ,Spڪ%o5\ +`^ӔM->I'aWW_4z^�Qw>u+r$&1Fwe 9#+ I1h84>1H@Zi伔>|&^,d\6 rQz{TpGM;{,�$Ic燇_ h!7?8>"0 %1/YLZqةRxNJl;Twe?1C+'DqQj?0GG#@B@Z m óY6kfVJae-h,nJhReR;"CvZKjauwF[܈- {�gx+*Tߏ{![RJft:Gb,qbSDUP3Inհ\nPHjb\M߈DaAU!-w RTG,�bn_DjzhD 2$D<Bfjm~`0<p$rg2U @p?@ڎ�QpQԶ,MZ)j\b*ʆιD{w,:( "*6mT6K˛+J^[^ }tK�p pxl#V*ժeY{xWx˰>_[dE+j�xq8 D^BDJǐGdGvA1,>Yv.q�9zU*mJ%U.'k"!5&@톪ဢ@Q;5㏃Mdz<FFc16r3fq'>'zB./]3�ΙDl�.7'wVfFOM]�hښvO.s~=4?E"K= 7a (CΡSSREJ93UZ67Y"%cËۈnYF*./˞;s¶ZbQ4rfykdɆ-CA nYEP GaBw{Wr]wKxTTLR z\.04gYE. Bc^8p8rwsC8!h407'6/:u_$2jKW/VeWJ. 8H'[V9XzTRvg|J@~Ĺ*gM]o:uQ4A5lP(H#EK%s{lڨ-c+rR@aanR]3ڶ Zeެ+RXXl4{%Rf~q}ztCn./6l!pAX v0 TJmfѨzM+2Z-h͵Z8ۍ@�Ngg|U ֖J |ώ6r!}_*02\1Y$A7 {H^Ȍv^[TJ@hewԙmi b$\ǧaJ80ÒO<=wɲ(?#[ƭ,꬞s9jShB`#lZY)ZU,u]?�tR/~Etݏ$0OYb2Ӯ:Z@c1GUǔQٴ,òQ|~ZMjˆQ <-|vdh; ;yqrr84n\PJa712 |8>@x7<)jf(G;oeHK*ǫy ?X GK#EERU]3' vQ^~ETKY Tֲk7*7SJRVMܻîZZZeN(FڰhVv̈́IF{; :I0)B( 3 趽^*mJ|buUe. Uߍ5x#5H&tz8ɓ12bvǿ!</|m/֝�UF_7\&TT'E<r&u tsoX]# BR `CC20: 0Q$D$I .\Ϲ3 ʥ꟭w�4N7{6\f~9k©( 0RYtϻCX$F "IdmJ0N붽 4$xASQ,wMrH٣$A@:n7#ݸu¯Kٵ/\ۑDH^_dʲ?T*G{?lkE0C7,SI*:yddDLOG].Y q>ϛT2J)-˖uw�yt]eYdO0euw.Igǖm8!DէJDa5JeRYѴMN3VUz@Gɝs(ʊ^?=2rv`!I 21O>�* Rv31<mS*ZYF ItzdQb0M4<+N*zVN륁�fg}@P䁛QFjJ=}jvʲO!r[3t#04V^dKBʂP]T鄢t~6�`c#N\A+}lq!$q'_J"|6e]ʊ(҉=7on&e =g>r"moԁzۣ�,^R4h4S� YfN' ]S%q l#i0eY1H/Sq3D0PM;Ym54B*n54 ǎyc熇OѪūKnL챱1E<PsBz=>0{T…[d(#~YSa 4n\�;noRq�8>+xqwi0M1&8KAA ``M+k5mRZRzFiQ, *-PٍYI8@cQ:OE02F=󯾀UB (HooHE~WG?k��Ё&P�· A > <\iWt:m ډvP*O,КnY6cmgk固i]Im<fnw+9*-a&ΌTJ$=;>~jwK屈<7y?Mz?#璙[erT GlT#�; ؀- lͮU΋C^ws7gA@t{BﭯoU*FiFd:v`HšH aI}|0j'l�X1;˦KFKRF>M.@clt42<f @ ێ"7DQę?>33r)|]LfMvN2 )i7n,Q f4 "67!"->zi"!˳3~?c̶Bz'E#=6 &~/ɗ\BM._&FJXld$'@ 8b�&,Xwpb�K$N>L&k@85^V봗+xwE1J<66Z8 x<ǂ(Ғjߞ j~l$n=/l'^x FF"3/�>@_M^+~ '<3y.&B\fi};@>$q+JeZ(^G.EA:ֆ Bn͏Ǧڒf{{g}Zum 1<cp*$L^+d6BAEQMNF?0?:ĺ� `}71yL ಺o S;�fz1Q#?w[kaough χ>$DLGV# u+63x@Pn^vpb܄`;gA7cmHgf~xI^כ@Xրb{GR~*40~o{?(iُF#�y7gΜz1F)p:;H҉4~SS`尵Mk #K%~dU}t_&|t_t))"tEJaxp1n^7>p4Aȏ紀 \Vڝ݅#yáLM[vZZꦝwR0's,I_/^Z_o9YW0M,/#0N\|(VS,װŵO~S*8d.|Vr)@b1ӽ~:}4� 0 0�~$~K$G~sN&:3Dž\?�A#4hH}@4#Uu\*!i녢Pc7_:qBEBH9r$ 8;&֚0Y.#@OQ�,k׮mv�Þ<ׁE 92w:̏|~b"&In}X\XX2��`0wteIr#e۫1h(P*AQ6$t_=L$�GoݺZ=3()R $a)KeͺaJH�yg4 c.>tt!62P?ҵ�xx+,Xd0? ]Tn+vpt:][j50lbp-c~zKKx\xSQO J.#UYD%D49_)fCABJ}}͛9j�ᇑ$1yu`XҀq� (Do>h(&<YT=wx#�wW&ؔ<g>5:%84LU͡Vk%\qή8+g!�cQ\Z@?B0Z6ܨu>+?$aU XGvۭ;7qWa73*6XzR'm,�j0 R R*D/|Аe� RӸt -у:j'yĶ[W? ˥Tz؃x,/(6.[Dc*:"\�`_:R\j+I<>؏|WUtWYQӴU0gzPaFc*Bl_pai<*Pm�@p2(T<$~fKKNMɓeShRe<Þw$I !NW}J33@� ?1 HׁB0 ݯ:맆Bvny筭bOݴ�T*iw �|&&nǹ5\ø] cT䅅: h Ϭ ~>{(`0,f%Z<3@A`p>( gsAL˜f\hp-hABfz{H QNN�8sUwRbycۯ8pl1~W w}0,8ڔDCa2Lr9^sB1Q$?i!+G:z?wd{Q>$ ##vTVwsMg2\.ݴRǬfɒ43g9=-wJ!u[pl˹^M. rjx >'9Oer[+(Eav/�epS;qXp ȴNG$a|</g|pJ`<첻�e.�lL)uto9S&VV`8I& |gfthkiԻW,zkdS*4ӡkl,@8` \R|#$9yf/ɧ&BH^O&L>]GuMSXFQI$~|8B\j5\\^ss3}ĉXLE"鍅zrWPɾrOV1^_hu+l|<H@fnIq V/uO=5qN~"Rfy??�YVsoKS}}?:{vWVH$4nB昈rB:=89)Ao|X\|G {  I/Z.Ļ:t; H׀7GE ө>x'vDph4|v�]P(-kNMǸBc}~,G;gii4_!/\,lNƅSMе*瞱hL u ;�OY, Q+ .scOwcZyss3ZX,EtՊB^zԩD ptv�`XX12ꪳP8(!`Jq4#0aWR>tރ1�jyG8N~g\./,,{4f\.&*Iߘ3aut3ؾZ"tun:<;:UU�Զ|`q[BrN<L+VeD``ZMӏl3!P}S}}AIs9...JmQM{�d>?=v>1쬲G3666*}$)ݵl4;Bl&)’$۠A-QXb:�J@hr2JH{u`+*ob^}S==>prO1M3L>iiZG�U1(c=>߷_rqXr !TB~o; ==g=ʀF|[1~p?^e(e72, s E 7mCgXC T_yeߝ ؈zI ]XXT*Gh48䓳}},�pX^ƑJk$K͘kW 4#^QxTƘ[%=~)4_h!m۱̙Aȶ3Qg&#EPoNWN|5 #nmm##a&o4ph3<Q=p8L<tEH+sV;_+ʷ&'#IcI]*IxV@)=#Iy~ZkC#0x_OӨ8/ M!f3JZdQ|zxӧ#q J90ZMJ&)}er2v3Z9r'{S!|A2zrnOYf1`(s BI p35j\x7fAz}cc#JgG�;*fq-*LmCps+ [k ~IDn- WK9"� Y �宾FOs^{dOO+`L%J.òBPayt:NO0>~ Od`xtz|ntԩ(ɕWkqQ>jW!H�B~ZXAy<gvL` 8RxӯvǿO睏�d9(ȽxЭ-ts=Ȧt4ޣt\v&h4 ll V*ߞx<!i,^yq(h>SݏA ^\/SfSg .29v'Ƀ@5 ?X'D"p8VVoݺc~gzA0DA8H:3CXh^uP,^S##RkA!7*I [ Ʌr!M IB8 9Ev@%.K@Hoyz` Aܶޫeeee}}}ܬ ŶL&y!6 {<Ϗt℃9|MNӒSQ�kչ/l,DCz@ -ōԪ 1IΞvjwR@㈸~[: v vLfaaZ�ܬV`pz<9ґiA&j0i3p>t(t1fgϣJ)խAA/2R Ӊ�`|3U}@TU~oyz` H);ܪIw|>ȇ>6clssc0~$a*t@)_I$%1U W?ULE"x~"NYJ-fy6mWz[IRGa�TUzo~s/S[w-BHVy|ȫ=JCSuT"'>QWz}v0?Ʋq|'^]S_NxMᄽ& R:ߐED8.h?#&xWss~zp0ī;OYFccc֭[:۱%�O** \<: ~əDBT^oy++OD"(ZZ^7z.@A./o,_g msoWOb(D'Ƣ,}X&t?wT*lVzX199]mVCq#9[MPT*ڍ?yը_M~q/II>}(SSzp>H\.;P.\.Nz�`SS##NhBh<@hQoRW+N_!1 8p =OP6{ `N}[3".R9V-..nlluP:OV?��IDAT oO>ѧGF'o(]tQ,N[+^UeͷcR*OQ}TWC\BK[Զcq&m7l<s2�O|kcYZ1/0ylv~iqJy~l,AJއ\nR*I 0FpD| +֯TKY(clt464$Nݦ�(?/&}@u qF,kiiiii4x "}^'NGTP$�Bn|d8`LJ@|N2; aj?`> Io̾x894Feڍ7* uƺ}8??66 0P<{=dr4_s2rn+X xP;}O9Ő/\-B@Pj#G_|q7f,+\v\.a>НVVg|ِEq,})g吏B 3Tgޱxe6o|{65U6|"U&>Iom۔tut^G+ʩS}?,Kszrn7nr8Al|?1?ʘD<'>bF6duI~Yll,6,ϗY �A<DRdJn#F~ؙ9bkˇdM$WBݙ!"DQ/@2_Z+0}OJc$ c(t:<5em`�ht+!<>W;2 R3@(VuI !PJU2()ePv?!^_FBB9{>! V>1Iq},�žbj.Vhiiiuue:8hy B<{]%Y~hs˹GحʪU6-d|BG}me34ܺ5Ĉ9�>Ȑ$z(ti b[)mmZ!\y}R!<~ ; k ~q>J& j ]J:,B{8D\]Y2tRH$a<Hg>g}ݻWq"kYWWWm>>< pV+J:IwE7=9y9]Ry̨355#F} paKNά!B">O녻w Aj[777_8 ZA8?�!FGAzh B8JkfII(Omcǐ߳ A\AFy�@UߏHR Yg p$PpqcTer̝'R�Q,O>rclf ynf("+ƽ_L̃}O 8mJAׇ%1xE[�QV>d,&뎄Lɓ3qS4k憓xc/gIXVQm^Oc! =Zg~i&B{;:  C鴅ۧGIEuk /,ɓ'dg8`뀦i?ax|&|vV1d/x!f wZ->q*",`(9mgmpeq8�#f}sSSCD)5 eYZyFɓ'l3p|0@RQ/gG&2(OguoD:�<]Cp\f@<ކ^wm �8_F IϠx^�tz:Q gaYҒj�Ay핕R$|<,R<no;SSƾ<{)%}:O& ])-�G cЗ�hGCC۷/}㣮1lO?Τ )jIN 1YY(LRkQ hm_uݛTUnqT;'G\Ig}g'&f29IT0_Q?ꫫ,5yi6}X<qVr8؋�q.== E^˟s4`zRd-"3<R99uW[q�`]s?ڵ>MCb !Z_~)JiOU�6OPJ777:gtRY>t)(G K)!׻aY%Cm;5cOɐ)'b[ iQ-QJ�`n.W(p}+؇X(B(չQkx�qJ*?m),xI%3٬203�"$lpأmnח9DDw�@LUhVV~AƸn D{'L&!΃kY<c9~x&C?~|Rƌ!a|gv6*( "o<o.˲c[zy\c$D_Y1n{s�(@}x/f2ϼ߶ﳠs<^E OGFqx;F8 <^b{oǓLx^c1-zu>B؋VV<RPe,GccIsUMlJ0 ceeeii4cB *$/_IPU $_ °;Y|~0̓ (&=ǤMNfg~؋bʝ;\PU {XX?8s?+$IBAûGiGRiV[0(( v'uQ7WTKL0m.CCB<!!I_w�z|BXM|B$ Wc0�/<_ۿH{2eY,aVc/3ڒ5M[XX@Itu B*5ѳz)dD`wa,'ԷW-I9r#c!�@Sǣ+GmL^Mo]RUOFs H #0W} ۡh`VIq2UJX}oz:CKⳂbu]/+++Z-Kʙ*�RBAE8$˹L&sc]?3$Hx߿p'%xUy/JT^N20>=p<p|jshbmRӡr]~པ ("J("!xy`rDnyI͛o}y@%IysKl{'tݵV\K5(�� 8VlV, !L6{T=Y!8 B"v\G{!shjO'еh]'M=0QJ옗z =`,SI@JQ:* a11"n')d2<3C uGn,|L<#[YǏ3 wTʹP�P^_<ϛ7aPDZ>opx: 1tw:OS)c9)!J�J)aZ k0w6ҿY`{J"�I EP63Q&DJ^.9UI*@3~Xx)y=ziZ|z)i뺑HDC`ϫzή5x]$qSAcX|IFpo:}?(Rt[?RK{>u ݆ZnkҦ""Uu�,EjN$"џ]w7ܹ3/=6Ǐ?~Xs~{�Y`׮]K/M>ŮǓ'(e6< N{ZsLho(B6iY;]2Pۣhς? S݆/WQBE# 4jk`BT?r:7i~:撊`<�OM ݺ5|QUmY__4-Zw^@zcfggs /V t:MàhS </rwBU5"+F{D5.DpZ!.mhӠmz>ky5gkJiˀA:wQ%FQWP*9 B+ ٛ 8,jD&\/29yo0",ZX,JNB[``8lVQ)<ǥTu6z-pRt4(e?%FFOhׂEmRjN]>uw|җ7MC>xܦumkMGpDo5YnT67aE䓩g6ԩz\.J۶mc_]׏3P�rlY,Aݍ}t#"I/@"gD$" b}k!J@)K=ZjRM@^4̧Mn$ E}=Akd`7z,x! wޥ&8I{sHkz)$g%i;,[D"ܽ{%`نX,`.J<g�h6]t.p(Ȉ$=f;Vɱ#<ﺶWNy&=RBt`CԢ,zaKObn/:1%a ]]; wS'#n�Jȁ RZX.<&[-2.U^"<eb}*I+_~yEQA~8|mۮV[['/$s~q zÇիW4e#TkY dcۉDL1@wɐ {Yǃr,Fm])B>"DX*qB"Gj,K p04rAC c r!ˮmfužki2vݱY`)ml+y<@@\t(MNfLN},a0ݰ}ccE59ޛa�A[d*b"286!Y=1h4l[&&dx<7"' �D(l*i԰Y ]. 9S"h"MdH\ DžKfy!/B8x@ĸO0gn\D4{. D \}:iFY-&*-"�.E syֻ*~K޻AhO^~ȱU,aFyٛ@0-n4eu:aIsh7.jb APH$׳$tes<\Rth] (kL,HHR"L$V"q1d5$QB2O�|H(=nPBB(1=/,&<׶zkVO=umSo[XVj5SﴛVmqCEfs^Zwѵkx7e qeri}xӥΉ9m۝Nj T*x$M&ےaA2zHCp6zݯhQDhR$hJQRL4 ɪ()XJ$yA~<ǮtO.+*F'"pL i!aıM; j]ftVm=nt{V!pԶp"!~iAQ3=ϫT*JZ6 F\?[8/ �gCR4Mu}rr2NK�!$r܍B!Ї\NGީRjEӪD$%ɌjL ع�}@=}wFXz8γ[FYm7+rk4BCH ukByjZe.7H#󼕕p8(t (aֽn[j.g2#Shft:3:-*~Yqziٞ>�jl\co4e] u:]M\7ynpm8t:=555::*2qR%5v7!H|x:[bg8oTcv#!Bl.,~$)�_=q DB011a$ll^񢄟N6ӷzZuqֆWh}lz[[[ÅB!s, I[AOv˼C ,IƆalooommu:nk-s�nF^r|>H$&2B4MjZ^Z&yN� jni\.E"St<{giLrz- ER�zōL&ɤ(Ph0 ^ݚ뺌ZvwvvF\<ܿOmT*mnnBl6;:::44( qǽ!,-OVi67NX3m16(|>yE 9_arhT*4=#qׯXz8ELEfL&LF"e4b v]WӴfi-b\lD`iNeITUeh4D 1Џisho0t]gLx\H$ᰢ($E"f& ZW*Rd=xk-˲,0 0ݮa^nOo0-j$+0i:VUUEAx'A9/v>'/Mr0%3]eY{v;Noà>PJ{^+KKKDžX,&r(F,+¸wI1/Ӂ4RV>MB|^šaveLg/:{c( ̶2cIUU,ˢ(:1fӁ XUæFXN+΁6*>< Vu=,W B] >W>I<W=]z;޹;x.޹c[w o5);/$Z���<tEXtcomment� Image generated by GPL Ghostscript (device=ppmraw) ����IENDB`��������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/math-cow.mkii�������������������������������0000644�0001750�0001750�00000001557�11754241457�024305� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=math-cow, %D version=2006.06.23, %D title=\CONTEXT\ Math Macros, %D subtitle=Cow Math, %D author={Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \def\COWsqrt {\mthsqrt{\char"7A}{\char"7B}} \def\COWfrac {\mthfrac{\char"7C}{\char"7A}{\char"7B}} \def\COWarrowfill{\mtharrowfill 1001} \startmathcollection [cow] % todo \stopmathcollection \startrawmathcollection[cow] \definemathcommand [frac] {\COWfrac} \definemathcommand [sqrt] {\COWsqrt} %definemathcommand [r@@t] {\COWroot} %definemathcommand [matrix] {\COWmatrix} \stoprawmathcollection \protect \endinput �������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-agr.mkii�������������������������������0000644�0001750�0001750�00000051073�11571377075�024262� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=enco-agr, %D version=2005.02.20, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Ancient Greek, %D author=Thomas A. Schmitz, %D date=\currentdate] \startmapping[agr] \definecasemaps 13 to 64 lc 0 uc 0 \definecasemaps 65 to 66 lc +32 uc 0 \definecasemaps 67 to 67 lc 0 uc 0 \definecasemaps 68 to 85 lc +32 uc 0 \definecasemaps 86 to 86 lc 0 uc 0 \definecasemaps 87 to 90 lc +32 uc 0 \definecasemaps 91 to 255 lc 0 uc 0 \definecaseself 4 % apostrofe \stopmapping \startencoding[agr] \definecharacter greeksigmalunate 1 \definecharacter endash 2 \definecharacter emdash 3 \definecharacter apostrophe 4 \definecharacter greekaltbeta 5 \definecharacter epih 6 \definecharacter textbraceleft 8 \definecharacter textbraceright 9 \definecharacter textbreve 10 \definecharacter greekSigmalunate 13 \definecharacter greekIotadialytika 14 \definecharacter greekUpsilondialytika 15 \definecharacter greekepsilonperispomeni 18 \definecharacter greekomicronperispomeni 19 \definecharacter greekepsilondasiaperispomeni 20 \definecharacter greekomicrondasiaperispomeni 21 \definecharacter greekepsilonpsiliperispomeni 22 \definecharacter greekomicronpsiliperispomeni 23 \definecharacter greekiotadialytikaperispomeni 24 \definecharacter greekupsilondialytikaperispomeni 25 \definecharacter greekdialytikaperispomeni 26 \definecharacter textbottomdot 33 \definecharacter greeksampi 34 \definecharacter greekdigamma 35 \definecharacter greekstigma 36 \definecharacter greeknumkoppa 37 \definecharacter greekkoppa 38 \definecharacter guilsingleright 39 \definecharacter textdag 43 \definecharacter greekoxia 47 \definecharacter greekanoteleia 59 \definecharacter greekdasia 60 \definecharacter greekpsili 62 \definecharacter greekquestionmark 63 \definecharacter dialytika 64 \definecharacter greekAlpha 65 \definecharacter greekBeta 66 \definecharacter greekomegaiotasub 67 \definecharacter greekDelta 68 \definecharacter greekEpsilon 69 \definecharacter greekPhi 70 \definecharacter greekGamma 71 \definecharacter greekEta 72 \definecharacter greekIota 73 \definecharacter greekTheta 74 \definecharacter greekKappa 75 \definecharacter greekLambda 76 \definecharacter greekMu 77 \definecharacter greekNu 78 \definecharacter greekOmicron 79 \definecharacter greekPi 80 \definecharacter greekChi 81 \definecharacter greekRho 82 \definecharacter greekSigma 83 \definecharacter greekTau 84 \definecharacter greekUpsilon 85 \definecharacter greeketaiotasub 86 \definecharacter greekOmega 87 \definecharacter greekXi 88 \definecharacter greekPsi 89 \definecharacter greekZeta 90 \definecharacter bracketleft 91 \definecharacter greekvaria 92 \definecharacter bracketright 93 \definecharacter greekperispomeni 94 \definecharacter guilsingleleft 96 % the above is a quote character \definecharacter greekalpha 97 \definecharacter greekbeta 98 \definecharacter greekfinalsigma 99 \definecharacter greekdelta 100 \definecharacter greekepsilon 101 \definecharacter greekphi 102 \definecharacter greekgamma 103 \definecharacter greeketa 104 \definecharacter greekiota 105 \definecharacter greektheta 106 \definecharacter greekkappa 107 \definecharacter greeklambda 108 \definecharacter greekmu 109 \definecharacter greeknu 110 \definecharacter greekomicron 111 \definecharacter greekpi 112 \definecharacter greekchi 113 \definecharacter greekrho 114 \definecharacter greeksigma 115 \definecharacter greektau 116 \definecharacter greekupsilon 117 \definecharacter greekalphaiotasub 118 \definecharacter greekomega 119 \definecharacter greekxi 120 \definecharacter greekpsi 121 \definecharacter greekzeta 122 \definecharacter floorleft 123 \definecharacter textbar 124 \definecharacter floorright 125 \definecharacter greekperispomeni 126 \definecharacter quotedblleft 128 \definecharacter quotedblright 129 \definecharacter exclam 130 \definecharacter greekiotadasia 131 \definecharacter greekiotapsili 132 \definecharacter greekiotaoxia 133 \definecharacter greekiotadasiatonos 134 \definecharacter greekiotapsilitonos 135 \definecharacter greekiotavaria 136 \definecharacter greekiotadasiavaria 137 \definecharacter greekiotapsilivaria 138 \definecharacter greekiotaperispomeni 139 \definecharacter greekiotadasiaperispomeni 140 \definecharacter greekiotapsiliperispomeni 141 \definecharacter greekiotadialytika 142 \definecharacter greekiotadialytikatonos 143 \definecharacter greekiotadialytikavaria 144 \definecharacter greekdasiaperispomeni 145 \definecharacter greekpsiliperispomeni 146 \definecharacter greekdasiatonos 147 \definecharacter greekpsilitonos 148 \definecharacter greekdasiavaria 149 \definecharacter greekpsilivaria 150 \definecharacter greekdialytikatonos 151 \definecharacter greekepsilondasia 152 \definecharacter greekepsilonpsili 153 \definecharacter greekepsilonoxia 154 \definecharacter greekepsilondasiatonos 155 \definecharacter greekepsilonpsilitonos 156 \definecharacter greekepsilonvaria 157 \definecharacter greekepsilondasiavaria 158 \definecharacter greekepsilonpsilivaria 159 \definecharacter greekdialytikavaria 160 \definecharacter greekalphadasia 161 \definecharacter greekalphapsili 162 \definecharacter greekalphaoxia 163 \definecharacter greekalphadasiatonos 164 \definecharacter greekalphapsilitonos 165 \definecharacter greekalphavaria 166 \definecharacter greekalphadasiavaria 167 \definecharacter greekalphapsilivaria 168 \definecharacter greekalphaperispomeni 169 \definecharacter greekalphadasiaperispomeni 170 \definecharacter greekalphapsiliperispomeni 171 \definecharacter greekalphaiotasubdasia 172 \definecharacter greekalphaiotasubpsili 173 \definecharacter greekalphaiotasubtonos 174 \definecharacter greekalphaiotasubdasiatonos 175 \definecharacter greekalphaiotasubpsilitonos 176 \definecharacter greekalphaiotasubvaria 177 \definecharacter greekalphaiotasubdasiavaria 178 \definecharacter greekalphaiotasubpsilivaria 179 \definecharacter greekalphaiotasubperispomeni 180 \definecharacter greekalphaiotasubdasiaperispomeni 181 \definecharacter greekalphaiotasubpsiliperispomeni 182 \definecharacter greekrhodasia 183 \definecharacter greekrhopsili 184 \definecharacter greeketadasia 185 \definecharacter greeketapsili 186 \definecharacter greeketaoxia 187 \definecharacter greeketadasiatonos 188 \definecharacter greeketapsilitonos 189 \definecharacter greeketavaria 190 \definecharacter greeketadasiavaria 191 \definecharacter greeketapsilivaria 192 \definecharacter greeketaperispomeni 193 \definecharacter greeketadasiaperispomeni 194 \definecharacter greeketapsiliperispomeni 195 \definecharacter textslash 196 \definecharacter greeketaiotasubdasia 197 \definecharacter greeketaiotasubpsili 198 \definecharacter greeketaiotasubtonos 199 \definecharacter greeketaiotasubdasiatonos 200 \definecharacter greeketaiotasubpsilitonos 201 \definecharacter greeketaiotasubvaria 202 \definecharacter greeketaiotasubdasiavaria 203 \definecharacter greeketaiotasubpsilivaria 204 \definecharacter greeketaiotasubperispomeni 205 \definecharacter greeketaiotasubdasiaperispomeni 206 \definecharacter greeketaiotasubpsiliperispomeni 207 \definecharacter greekomicrondasia 208 \definecharacter greekomicronpsili 209 \definecharacter greekomicronoxia 210 \definecharacter greekomicrondasiatonos 211 \definecharacter greekomicronpsilitonos 212 \definecharacter greekomicronvaria 213 \definecharacter greekomicrondasiavaria 214 \definecharacter greekomicronpsilivaria 215 \definecharacter greekupsilondasia 216 \definecharacter greekupsilonpsili 217 \definecharacter greekupsilonoxia 218 \definecharacter greekupsilondasiatonos 219 \definecharacter greekupsilonpsilitonos 220 \definecharacter greekupsilonvaria 221 \definecharacter greekupsilondasiavaria 222 \definecharacter greekupsilonpsilivaria 223 \definecharacter greekupsilonperispomeni 224 \definecharacter greekupsilondasiaperispomeni 225 \definecharacter greekupsilonpsiliperispomeni 226 \definecharacter greekupsilondiaeresis 227 \definecharacter greekupsilondialytikatonos 228 \definecharacter greekupsilondialytikavaria 229 \definecharacter greekomegadasia 230 \definecharacter greekomegapsili 231 \definecharacter greekomegaoxia 232 \definecharacter greekomegadasiatonos 233 \definecharacter greekomegapsilitonos 234 \definecharacter greekomegavaria 235 \definecharacter greekomegadasiavaria 236 \definecharacter greekomegapsilivaria 237 \definecharacter greekomegaperispomeni 238 \definecharacter greekomegadasiaperispomeni 239 \definecharacter greekomegapsiliperispomeni 240 \definecharacter greekomegaiotasubdasia 241 \definecharacter greekomegaiotasubpsili 242 \definecharacter greekomegaiotasubtonos 243 \definecharacter greekomegaiotasubdasiatonos 244 \definecharacter greekomegaiotasubpsilitonos 245 \definecharacter greekomegaiotasubvaria 246 \definecharacter greekomegaiotasubdasiavaria 247 \definecharacter greekomegaiotasubpsilivaria 248 \definecharacter greekomegaiotasubperispomeni 249 \definecharacter greekomegaiotasubdasiaperispomeni 250 \definecharacter greekomegaiotasubpsiliperispomeni 251 \definecharacter greeknumeralsign 254 \definecharacter greeknumeralsignlower 255 \stopencoding \startencoding[default] \definecharacter greekAlphapsili {\greekpsili \greekAlpha} \definecharacter greekAlphadasia {\greekdasia \greekAlpha} \definecharacter greekAlphapsilivaria {\greekpsilivaria \greekAlpha} \definecharacter greekAlphadasiavaria {\greekdasiavaria \greekAlpha} \definecharacter greekAlphapsilitonos {\greekpsilitonos \greekAlpha} \definecharacter greekAlphadasiatonos {\greekdasiatonos \greekAlpha} \definecharacter greekAlphapsiliperispomeni {\greekpsiliperispomeni \greekAlpha} \definecharacter greekAlphadasiaperispomeni {\greekdasiaperispomeni \greekAlpha} \definecharacter greekEpsilonpsili {\greekpsili \greekEpsilon} \definecharacter greekEpsilondasia {\greekdasia \greekEpsilon} \definecharacter greekEpsilonpsilivaria {\greekpsilivaria \greekEpsilon} \definecharacter greekEpsilondasiavaria {\greekdasiavaria \greekEpsilon} \definecharacter greekEpsilonpsilitonos {\greekpsilitonos \greekEpsilon} \definecharacter greekEpsilondasiatonos {\greekdasiatonos \greekEpsilon} \definecharacter greekEtapsili {\greekpsili \greekEta} \definecharacter greekEtadasia {\greekdasia \greekEta} \definecharacter greekEtapsilivaria {\greekpsilivaria \greekEta} \definecharacter greekEtadasiavaria {\greekdasiavaria \greekEta} \definecharacter greekEtapsilitonos {\greekpsilitonos \greekEta} \definecharacter greekEtadasiatonos {\greekdasiatonos \greekEta} \definecharacter greekEtapsiliperispomeni {\greekpsiliperispomeni \greekEta} \definecharacter greekEtadasiaperispomeni {\greekdasiaperispomeni \greekEta} \definecharacter greekIotapsili {\greekpsili \greekIota} \definecharacter greekIotadasia {\greekdasia \greekIota} \definecharacter greekIotapsilivaria {\greekpsilivaria \greekIota} \definecharacter greekIotadasiavaria {\greekdasiavaria \greekIota} \definecharacter greekIotapsilitonos {\greekpsilitonos \greekIota} \definecharacter greekIotadasiatonos {\greekdasiatonos \greekIota} \definecharacter greekIotapsiliperispomeni {\greekpsiliperispomeni \greekIota} \definecharacter greekIotadasiaperispomeni {\greekdasiaperispomeni \greekIota} \definecharacter greekOmicronpsili {\greekpsili \greekOmicron} \definecharacter greekOmicrondasia {\greekdasia \greekOmicron} \definecharacter greekOmicronpsilivaria {\greekpsilivaria \greekOmicron} \definecharacter greekOmicrondasiavaria {\greekdasiavaria \greekOmicron} \definecharacter greekOmicronpsilitonos {\greekpsilitonos \greekOmicron} \definecharacter greekOmicrondasiatonos {\greekdasiatonos \greekOmicron} \definecharacter greekUpsilondasia {\greekdasia \greekUpsilon} \definecharacter greekUpsilondasiavaria {\greekdasiavaria \greekUpsilon} \definecharacter greekUpsilondasiatonos {\greekdasiatonos \greekUpsilon} \definecharacter greekUpsilondasiaperispomeni {\greekdasiaperispomeni \greekUpsilon} \definecharacter greekOmegapsili {\greekpsili \greekOmega} \definecharacter greekOmegadasia {\greekdasia \greekOmega} \definecharacter greekOmegapsilivaria {\greekpsilivaria \greekOmega} \definecharacter greekOmegadasiavaria {\greekdasiavaria \greekOmega} \definecharacter greekOmegapsilitonos {\greekpsilitonos \greekOmega} \definecharacter greekOmegadasiatonos {\greekdasiatonos \greekOmega} \definecharacter greekOmegapsiliperispomeni {\greekpsiliperispomeni \greekOmega} \definecharacter greekOmegadasiaperispomeni {\greekdasiaperispomeni \greekOmega} \definecharacter greekAlphaiotasubpsili {\greekpsili \greekAlpha \greekiota} \definecharacter greekAlphaiotasubdasia {\greekdasia \greekAlpha \greekiota} \definecharacter greekAlphaiotasubpsilivaria {\greekpsilivaria \greekAlpha \greekiota} \definecharacter greekAlphaiotasubdasiavaria {\greekdasiavaria \greekAlpha \greekiota} \definecharacter greekAlphaiotasubpsilitonos {\greekpsilitonos \greekAlpha \greekiota} \definecharacter greekAlphaiotasubdasiatonos {\greekdasiatonos \greekAlpha \greekiota} \definecharacter greekAlphaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekAlpha \greekiota} \definecharacter greekAlphaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekAlpha \greekiota} \definecharacter greekEtaiotasubpsili {\greekpsili \greekEta \greekiota} \definecharacter greekEtaiotasubdasia {\greekdasia \greekEta \greekiota} \definecharacter greekEtaiotasubpsilivaria {\greekpsilivaria \greekEta \greekiota} \definecharacter greekEtaiotasubdasiavaria {\greekdasiavaria \greekEta \greekiota} \definecharacter greekEtaiotasubpsilitonos {\greekpsilitonos \greekEta \greekiota} \definecharacter greekEtaiotasubdasiatonos {\greekdasiatonos \greekEta \greekiota} \definecharacter greekEtaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekEta \greekiota} \definecharacter greekEtaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekEta \greekiota} \definecharacter greekOmegaiotasubpsili {\greekpsili \greekOmega \greekiota} \definecharacter greekOmegaiotasubdasia {\greekdasia \greekOmega \greekiota} \definecharacter greekOmegaiotasubpsilivaria {\greekpsilivaria \greekOmega \greekiota} \definecharacter greekOmegaiotasubdasiavaria {\greekdasiavaria \greekOmega \greekiota} \definecharacter greekOmegaiotasubpsilitonos {\greekpsilitonos \greekOmega \greekiota} \definecharacter greekOmegaiotasubdasiatonos {\greekdasiatonos \greekOmega \greekiota} \definecharacter greekOmegaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekOmega \greekiota} \definecharacter greekOmegaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekOmega \greekiota} \definecharacter greekAlphavaria {\greekvaria \greekAlpha} \definecharacter greekAlphaoxia {\greekoxia \greekAlpha} \definecharacter greekAlphaiotasub {\greekAlpha \greekiota} \definecharacter greekEpsilonvaria {\greekvaria \greekEpsilon} \definecharacter greekEpsilonoxia {\greekoxia \greekEpsilon} \definecharacter greekEtavaria {\greekvaria \greekEta} \definecharacter greekEtaoxia {\greekoxia \greekEta} \definecharacter greekEtaiotasub {\greekEta \greekiota} \definecharacter greekIotavaria {\greekvaria \greekIota} \definecharacter greekIotaoxia {\greekoxia \greekIota} \definecharacter greekUpsilonvaria {\greekvaria \greekUpsilon} \definecharacter greekUpsilonoxia {\greekoxia \greekUpsilon} \definecharacter greekOmicronvaria {\greekvaria \greekOmicron} \definecharacter greekOmicronoxia {\greekoxia \greekOmicron} \definecharacter greekOmegavaria {\greekvaria \greekOmega} \definecharacter greekOmegaoxia {\greekoxia \greekOmega} \definecharacter greekOmegaiotasub {\greekOmega \greekiota} \definecharacter greekRhodasia {\greekdasia \greekRho} \definecharacter digamma {\greekdigamma} \definecharacter sampi {\greeksampi} \definecharacter stigma {\greekstigma} \definecharacter koppa {\greeknumkoppa} \definecharacter lunars {\greeksigmalunate} \definecharacter lunarS {\greekSigmalunate} \definecharacter halfbraceleft {\floorleft} \definecharacter halfbraceright {\floorright} \definecharacter crux {\textdag} \stopencoding \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-vis.mkii�������������������������������0000644�0001750�0001750�00000143614�11754241457�024355� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=supp-vis, %D version=1996.10.21, %D title=\CONTEXT\ Support Macros, %D subtitle=Visualization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % no longer generic, who cares ... %D \gdef\ShowBufferedExample% private typeseting macro %D {\startlinecorrection %D \bgroup %D \setuptyping[margin=0pt,option=color] %D \showmakeup %D \centeredvcuetrue %D \dontinterfere %D \baselinerulefalse %D \normalvbox %D {\normalhbox to \hsize %D {$\hsize=.5\hsize %D \advance\hsize by -.5em %D \normalvcenter{\vbox{\getbuffer}}\normalhss %D \normalvcenter{\vbox{\dontshowcomposition\typebuffer}}$}} %D \egroup %D \stoplinecorrection} %D %D \gdef\ShowBufferedExampleBox% private typeseting macro %D {\startlinecorrection %D \bgroup %D \setuptyping[margin=0pt,option=color] %D \showmakeup %D \centeredvcuetrue %D \dontinterfere %D \baselinerulefalse %D \normalvbox %D {\normalhbox to \hsize %D {$\hsize=.5\hsize %D \advance\hsize by -.5em %D \normalvcenter{\baselineruletrue\vbox{\getbuffer}}\normalhss %D \normalvcenter{\vbox{\dontshowcomposition\typebuffer}}$}} %D \egroup %D \stoplinecorrection} %D Although an integral part of \CONTEXT, this module is one %D of the support modules. Its stand alone character permits %D use in \PLAIN\ \TEX\ or \TEX\ based macropackages. %D \ifCONTEXT \else If in some examples the verbatim listings %D don't show up nice, this is due to processing by a system %D that does not support buffering. In \CONTEXT\ we show the %D commands in the margin, use bit more advanced way of %D numbering, and typeset the source in \TEX nicolored %D verbatim. Sorry for this inconvenience.\fi %D %D Depending on my personal needs and those of whoever uses it, %D the macros will be improved in terms of visualization, %D efficiency and compatibility. These rather low level %D visualization macros are supplemented by ones that can %D visualize baselines, the page layout and whatever deserves %D attention. Most of those macros can be found in \type %D {core-vis} and other core modules. Their integration in %D \CONTEXT\ prohibits generic applications. \ifx \undefined \writestatus \input supp-mis.tex \fi %D One of the strong points of \TEX\ is abstraction of textual %D input. When macros are defined well and do what we %D want them to do, we will seldom need the tools present in %D What You See Is What You Get systems. For instance, when %D entering text we don't need rulers, because no manual %D shifting and/or alignment of text is needed. On the other %D hand, when we are designing macros or specifying layout %D elements, some insight in \TEX's advanced spacing, kerning, %D filling, boxing and punishment abilities will be handy. %D That's why we've implemented a mechanism that shows some of %D the inner secrets of \TEX. \writestatus{loading}{ConTeXt Support Macros / Visualization} %D In this module we are going to redefine some \TEX\ %D primitives and \PLAIN\ macro's. Their original meaning is %D saved in macros with corresponding names, preceded by %D \type{normal}. These original macros are (1)~used to %D temporary restore the old values when needed and %D (2)~used to prevent recursive calls in the macros that %D replace them. \unprotect \let\visualvrule\vrule \let\visualhrule\hrule %D \macros %D {dontinterfere} %D %D Indentation, left and/or right skips, redefinition of %D \type{\par} and assignments to \type{\everypar} can lead to %D unwanted results. We can therefore turn all those things %D off with \type{\dontinterfere}. \def\dontinterfere {\everypar \emptytoks \let\par \endgraf \parindent\zeropoint \parskip \zeropoint \leftskip \zeropoint \rightskip\zeropoint \relax} %D \macros %D {dontcomplain} %D %D In this module we do a lot of box manipulations. Because we %D don't want to be confronted with to many over- and underfull %D messages we introduce \type{\dontcomplain}. \def\dontcomplain {\hbadness\!!tenthousand \vbadness\hbadness \hfuzz \maxdimen \vfuzz \hfuzz} % This obsolete dutch name is sometimes uses in manual styles; when % cleaning up the codebase I decided to move this definition here. \let\mindermeldingen\dontcomplain %D \macros %D {normaloffinterlineskip} %D %D The next hack is needed because in \CONTEXT\ we redefine %D \type{\offinterlineskip}. \ifx\undefined\normaloffinterlineskip \let\normaloffinterlineskip\offinterlineskip \fi %D \macros %D {normalhbox, %D normalvbox,normalvtop} %D %D There are three types of boxes, one horizontal and two %D vertical in nature. As we will see later on, all three types %D are to be handled according to their orientation and %D baseline behavior. Especially \type{\vtop}'s need our %D special attention. % already saved %D \macros %D {normalhskip, %D normalvskip} %D %D Next come the flexible skips, which come in two flavors %D too. Like boxes these are handled with \TEX\ primitives. % already saved %D \macros %D {normalpenalty, %D normalkern} %D %D Both penalties and kerns are taken care of by mode sensitive %D primitives. This means that when making them visible, we %D have to take the current mode into account. % already saved %D \macros %D {normalhglue, %D normalvglue} %D %D Glues on the other hand are macro's defined in \PLAIN\ \TEX. %D As we will see, their definitions make the implementation of %D their visible counterparts a bit more \TeX{}nical. \let\normalhglue = \hglue \let\normalvglue = \vglue %D \macros %D {normalmkern, %D normalmskip} %D %D Math mode has its own spacing primitives, preceded by %D \type{m}. Due to the relation with the current font and the %D way math is typeset, their unit \type{mu} is not compatible %D with other dimensions. As a result, the visual appearance %D of these primitives is kept primitive too. % already saved %D \macros %D {hfilneg, %D vfilneg} %D %D Fills can be made visible quite easy. We only need some %D additional negation macros. Because \PLAIN\ \TEX\ only %D offers \type{\hfilneg} and \type{\vfilneg}, we define our %D own alternative double \type{ll}'ed ones. \def\hfilneg {\normalhskip\zeropoint \!!plus-1fil\relax} \def\vfilneg {\normalvskip\zeropoint \!!plus-1fil\relax} \def\hfillneg {\normalhskip\zeropoint \!!plus-1fill\relax} \def\vfillneg {\normalvskip\zeropoint \!!plus-1fill\relax} \def\hfilllneg{\normalhskip\zeropoint \!!plus-1filll\relax} \def\vfilllneg{\normalvskip\zeropoint \!!plus-1filll\relax} %D \macros %D {normalhss,normalhfil,normalhfill, %D normalvss,normalvfil,normalvfill} %D %D The positive stretch primitives are used independant and in %D combination with \type{\leaders}. % already saved %D \macros %D {normalhfilneg,normalhfillneg, %D normalvfilneg,normalvfillneg} %D %D Keep in mind that both \type{\hfillneg} and \type{\vfillneg} %D are not part of \PLAIN\ \TEX\ and therefore not documented %D in standard \TEX\ documentation. They can nevertheless be %D used at will. \let\normalhfillneg = \hfillneg \let\normalvfillneg = \vfillneg %D Visualization is not always wanted. Instead of turning this %D option off in those (unpredictable) situations, we just %D redefine a few \PLAIN\ macros. \ifx\tlap\undefined \def\rlap#1{\normalhbox to \zeropoint{#1\normalhss}} \def\llap#1{\normalhbox to \zeropoint{\normalhss#1}} \def\blap#1{\normalvbox to \zeropoint{#1\normalvss}} \def\tlap#1{\normalvbox to \zeropoint{\normalvss#1}} \fi \ifx\contextversion\undefined \def~{\normalpenalty\!!tenthousand\ } \fi %D \macros %D {makeruledbox} %D %D Ruled boxes can be typeset is many ways. Here we present %D just one alternative. This implementation may be a little %D complicated, but it supports all three kind of boxes. The %D next command expects a \BOX\ specification, like: %D %D \starttyping %D \makeruledbox0 %D \stoptyping %D \macros %D {baselinerule,baselinefill} %D %D We can make the baseline of a box visible, both dashed and %D as a rule. The line is drawn on top of the baseline. All %D we have to say is: %D %D \starttyping %D \baselineruletrue %D \baselinefilltrue %D \stoptyping %D %D At the cost of some overhead these alternatives are %D implemented using \type{\if}'s: \newif\ifbaselinerule \baselineruletrue \newif\ifbaselinefill \baselinefillfalse %D \macros %D {iftoprule,ifbottomrule,ifleftrule,ifrightrule} %D %D Rules can be turned on and off, but by default we have: %D %D \starttyping %D \topruletrue %D \bottomruletrue %D \leftruletrue %D \rightruletrue %D \stoptyping %D %D As we see below: \newif\iftoprule \topruletrue \newif\ifbottomrule \bottomruletrue \newif\ifleftrule \leftruletrue \newif\ifrightrule \rightruletrue %D \macros %D {boxrulewidth} %D %D The width in the surrounding rules can be specified by %D assigning an apropriate value to the dimension used. This %D module defaults the width to: %D %D \starttyping %D \boxrulewidth=.2pt %D \stoptyping %D %D Although we are already low on \DIMENSIONS\ it's best to %D spend one here, mainly because it enables easy manipulation, %D like multiplication by a given factor. \newdimen\boxrulewidth \boxrulewidth=.2pt %D The core macro \type{\makeruledbox} looks a bit hefty. The %D manipulation at the end is needed because we want to %D preserve both the mode and the baseline. This means that %D \type{\vtop}'s and \type{\vbox}'es behave the way we expect %D them to do. %D %D \startlinecorrection %D \hbox %D {\ruledhbox to 5em{\strut test\normalhss}\hskip1em %D \ruledvbox{\hsize 5em\strut test \par test\strut}\hskip1em %D \ruledvtop{\hsize 5em\strut test \par test\strut}} %D \stoplinecorrection %D %D The \type{\cleaders} part of the macro is responsible for %D the visual baseline. The \type{\normalhfill} belongs to this %D primitive too. By storing and restoring the height and depth %D of box \type{#1}, we preserve the mode. \let\dowithruledbox\relax \let\ruledheight\!!zeropoint \let\ruleddepth \!!zeropoint \let\ruledwidth \!!zeropoint \def\makeruledbox#1% {\edef\ruledheight{\the\ht#1}% \edef\ruleddepth {\the\dp#1}% \edef\ruledwidth {\the\wd#1}% \setbox\scratchbox\normalvbox {\dontcomplain \normaloffinterlineskip \visualhrule \!!height\boxrulewidth \iftoprule\else\!!width\zeropoint\fi \normalvskip-\boxrulewidth \normalhbox to \ruledwidth {\visualvrule \!!height\ruledheight \!!depth\ruleddepth \!!width\ifleftrule\else0\fi\boxrulewidth \ifdim\ruledheight>\zeropoint \else \baselinerulefalse \fi \ifdim\ruleddepth>\zeropoint \else \baselinerulefalse \fi \ifbaselinerule \ifdim\ruledwidth<20\boxrulewidth \baselinefilltrue \fi \cleaders \ifbaselinefill \visualhrule \!!height\boxrulewidth \else \normalhbox {\normalhskip2.5\boxrulewidth \visualvrule \!!height\boxrulewidth \!!width5\boxrulewidth \normalhskip2.5\boxrulewidth}% \fi \fi \normalhfill \visualvrule \!!width\ifrightrule\else0\fi\boxrulewidth}% \normalvskip-\boxrulewidth \visualhrule \!!height\boxrulewidth \ifbottomrule\else\!!width\zeropoint\fi}% \wd#1\zeropoint \setbox#1=\ifhbox#1\normalhbox\else\normalvbox\fi {\normalhbox {\box#1% \lower\ruleddepth\normalhbox{\dowithruledbox{\box\scratchbox}}}}% \ht#1=\ruledheight \wd#1=\ruledwidth \dp#1=\ruleddepth} %D Just in case one didn't notice: the rules are in fact layed %D over the box. This way the contents of a box cannot %D visually interfere with the rules around (upon) it. A more %D advanced version of ruled boxes can be found in one of the %D core modules of \CONTEXT. There we take offsets, color, %D rounded corners, backgrounds and alignment into account too. %D \macros %D {ruledhbox, %D ruledvbox,ruledvtop, %D ruledvcenter} %D %D These macro's can be used instead of \type{\hbox}, %D \type{\vbox}, \type{\vtop} and, when in math mode, %D \type{\vcenter}. They just do what their names state. Using %D an auxiliary macro would save us a few words of memory, but %D it would make their appearance even more obscure. %D %D \startbuffer %D \hbox %D {\strut %D one %D two %D \hbox{three} %D four %D five} %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledhbox {\normalhbox\bgroup \dowithnextbox{\makeruledbox\nextbox\box\nextbox\egroup}% \normalhbox} %D \startbuffer %D \vbox %D {\strut %D first line \par %D second line \par %D third line \par %D fourth line \par %D fifth line %D \strut } %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledvbox {\normalvbox\bgroup \dowithnextbox{\makeruledbox\nextbox\box\nextbox\egroup}% \normalvbox} %D \startbuffer %D \vtop %D {\strut %D first line \par %D second line \par %D third line \par %D fourth line \par %D fifth line %D \strut } %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledvtop {\normalvtop\bgroup \dowithnextbox{\makeruledbox\nextbox\box\nextbox\egroup}% \normalvtop} %D \startbuffer %D \hbox %D {$\vcenter{\hsize.2\hsize %D alfa \par beta}$ %D $\vcenter to 3cm{\hsize.2\hsize %D alfa \par beta \par gamma}$ %D $\vcenter{\hsize.2\hsize %D alfa \par beta}$} %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledvcenter {\normalvbox\bgroup \dontinterfere \dowithnextbox {\scratchdimen.5\ht\nextbox \advance\scratchdimen .5\dp\nextbox \ht\nextbox\scratchdimen \dp\nextbox\scratchdimen \ruledhbox{\box\nextbox}% \egroup}% \normalvbox} %D \macros %D {ruledbox, %D setruledbox} %D %D Of the next two macros the first can be used to precede a %D box of ones own choice. One can for instance prefix boxes %D with \type{\ruledbox} and afterwards --- when the macro %D satisfy the needs --- let it to \type{\relax}. %D %D \starttyping %D \ruledbox\hbox{What rules do you mean?} %D \stoptyping %D %D The macro \type{\setruledbox} can be used to directly %D rule a box. %D %D \starttyping %D \setruledbox12=\hbox{Who's talking about rules here?} %D \stoptyping %D %D At the cost of some extra macros we can implement a %D variant that does not need the~\type{=}, but we stick to: \unexpanded\def\ruledbox {\dowithnextbox{\makeruledbox\nextbox\box\nextbox}} \def\setruledbox#1=% {\dowithnextbox{\makeruledbox\nextbox\setbox#1\nextbox}} %D \macros %D {investigateskip, %D investigatecount, %D investigatemuskip} %D %D Before we meet the visualizing macro's, we first implement %D ourselves some handy utility ones. Just for the sake of %D efficiency and readability, we introduce some status %D variables, that tell us a bit more about the registers we %D use: %D %D \starttyping %D \ifflexible %D \ifzero %D \ifnegative %D \ifpositive %D \stoptyping %D %D These status variables are set when we call for one of the %D investigation macros, e.g. %D %D \starttyping %D \investigateskip\scratchskip %D \stoptyping %D %D We use some dirty trick to check stretchability of \SKIPS. %D Users of these macros are invited to study their exact %D behavior first. The positive and negative states both %D include zero and are in fact non-negative ($\geq0$) and %D non-positive ($\leq0$) . \newif\ifflexible \newif\ifzero \newif\ifnegative \newif\ifpositive \def\investigateskip#1% {\relax \scratchdimen#1\relax \edef\!!stringa{\the\scratchdimen}% \edef\!!stringb{\the#1}% \ifx\!!stringa\!!stringb \flexiblefalse \else \flexibletrue \fi \ifdim#1=\zeropoint\relax \zerotrue \else \zerofalse \fi \ifdim#1<\zeropoint\relax \positivefalse \else \positivetrue \fi \ifdim#1>\zeropoint\relax \negativefalse \else \negativetrue \fi} % etex % % \def\investigateskip#1% % {\relax % \ifdim\scratchskip=\zeropoint % \ifdim\gluestretch\scratchskip=\zeropoint % \ifdim\glueshrink\scratchskip=\zeropoint % \flexiblefalse % \else % \flexibletrue % \fi % \else % \flexibletrue % \fi % \else % \flexibletrue % \fi % \ifdim#1=\zeropoint\relax % \zerotrue \else % \zerofalse \fi % \ifdim#1<\zeropoint\relax % \positivefalse \else % \positivetrue \fi % \ifdim#1>\zeropoint\relax % \negativefalse \else % \negativetrue \fi} \def\investigatecount#1% {\relax \flexiblefalse \ifnum#1=\zerocount \zerotrue \else \zerofalse \fi \ifnum#1<\zerocount \positivefalse \else \positivetrue \fi \ifnum#1>\zerocount \negativefalse \else \negativetrue \fi} \def\investigatemuskip#1% {\relax \edef\!!stringa{\the\scratchmuskip}% \edef\!!stringb{0mu}% \def\!!stringc##1##2\\{##1}% \expandafter\edef\expandafter\!!stringc\expandafter {\expandafter\!!stringc\!!stringa\\}% \edef\!!stringd{-}% \flexiblefalse \ifx\!!stringa\!!stringb \zerotrue \negativefalse \positivefalse \else \zerofalse \ifx\!!stringc\!!stringd \positivefalse \negativetrue \else \positivetrue \negativefalse \fi \fi} %D Now the neccessary utility macros are defined, we can make a %D start with the visualizing ones. The implementation of these %D macros is a compromise between readability, efficiency of %D coding and processing speed. Sometimes we do in steps what %D could have been done in combination, sometimes we use a few %D boxes more or less then actually needed, and more than once %D one can find the same piece of rule drawing code twice. %D \macros %D {ifcenteredvcue,normalvcue} %D %D Depending on the context, one can force visual vertical cues %D being centered along \type{\hsize} or being put at the %D current position. Although centering often looks better, %D we've chosen the second alternative as default. The main %D reason for doing so is that often when we don't set the %D \type{\hsize} ourselves, \TEX\ takes the value of the %D surrounding box. As a result the visual cues can migrate %D outside the current context. %D %D This behavior is accomplished by a small but effective %D auxiliary macro, which behavior can be influenced by the %D boolean \type{\centeredvcue}. By saying %D %D \starttyping %D \centeredvcuetrue %D \stoptyping %D %D one turns centering on. As said, we turn it off. \newif\ifcenteredvcue \centeredvcuefalse \def\normalvcue#1% {\normalhbox \ifcenteredvcue to \hsize \fi {\normalhss#1\normalhss}} %D We could have used the more robust version %D %D \starttyping %D \def\normalvcue% %D {\normalhbox \ifcenteredvcue to \hsize \fi %D \bgroup\bgroup\normalhss %D \aftergroup\normalhss\aftergroup\egroup %D \let\next=} %D \stoptyping %D %D or the probably best one: %D %D \starttyping %D \def\normalvcue% %D {\hbox \ifcenteredvcue to \hsize %D \bgroup\bgroup\normalhss %D \aftergroup\normalhss\aftergroup\egroup %D \else %D \bgroup %D \fi %D \let\next=} %D \stoptyping %D %D Because we don't have to preserve \CATCODES\ and only use %D small arguments, we stick to the first alternative. %D \macros %D {testrulewidth} %D %D We build our visual cues out of rules. At the cost of a much %D bigger \DVI\ file, this is to be prefered over using %D characters (1)~because we cannot be sure of their %D availability and (2)~because their dimensions are fixed. %D %D As with ruled boxes, we use a \DIMENSION\ to specify the %D width of the ruled elements. This dimension defaults to: %D %D \starttyping %D \testrulewidth=\boxrulewidth %D \stoptyping %D %D Because we prefer whole numbers for specifying the %D dimensions, we often use even multiples of %D \type{\testrulewidth}. %D \macros %D {visiblestretch} %D %D A second variable is introduced because of the stretch %D components of \SKIPS. At the cost of some accuracy we can %D make this stretch visible. %D %D \starttyping %D \visiblestretchtrue %D \stoptyping \newdimen\testrulewidth \testrulewidth=\boxrulewidth \newif\ifvisiblestretch \visiblestretchfalse %D \macros %D {ruledhss, %D ruledhfil,ruledhfilneg, %D ruledhfill,ruledhfillneg} %D %D We start with the easiest part, the fills. The scheme we %D follow is {\em visual filling -- going back -- normal %D filling}. Visualizing is implemented using \type{\cleaders}. %D Because the \BOX\ that follows this command is constructed %D only once, the \type{\copy} is not really a prerequisite. We %D prefer using a \type{\normalhbox} here instead of a %D \type{\hbox}. \def\setvisiblehfilbox#1\to#2#3#4% {\setbox#1\normalhbox {\visualvrule \!!width #2\testrulewidth \!!height#3\testrulewidth \!!depth #4\testrulewidth}% \smashbox#1} \def\doruledhfiller#1#2#3#4% {#1#2% \bgroup \dontinterfere \dontcomplain \setvisiblehfilbox0\to{4}{#3}{#4}% \setvisiblehfilbox2\to422% \copy0\copy2 \bgroup \setvisiblehfilbox0\to422% \cleaders \normalhbox to 12\testrulewidth {\normalhss\copy0\normalhss}% #1% \egroup \setbox0\normalhbox {\normalhskip-4\testrulewidth\copy0\copy2}% \smashbox0% \box0 \egroup} %D The horizontal fillers differ in their boundary %D visualization. Watch the small dots. Fillers can be %D combined within reasonable margins. %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hss}\ruledhss test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfil}\ruledhfil test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfill}\ruledhfill test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut %D \type{\hfil}\type{\hfil}\ruledhfil\ruledhfil %D test% %D \ruledhfil\type{\hfil}} %D \stoplinecorrection %D %D The negative counterparts are visualizes, but seldom %D become visible, apart from their boundaries. %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfilneg}\ruledhfilneg test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfillneg}\ruledhfillneg test} %D \stoplinecorrection %D %D Although leaders are used for visualizing, they are %D visualized themselves correctly as the next example shows. %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\cleaders\normalhbox to 2em{\normalhss$\circ$\normalhss}\ruledhfill} %D \stoplinecorrection %D %D All five substitutions use the same auxiliary macro. Watch %D the positive first -- negative next approach. \unexpanded\def\ruledhss {\doruledhfiller\normalhss\normalhfilneg{0}{0}} \unexpanded\def\ruledhfil {\doruledhfiller\normalhfil\normalhfilneg{10}{-6}} \unexpanded\def\ruledhfill {\doruledhfiller\normalhfill\normalhfillneg{18}{-14}} \unexpanded\def\ruledhfilneg {\doruledhfiller\normalhfilneg\normalhfil{-6}{10}} \unexpanded\def\ruledhfillneg {\doruledhfiller\normalhfillneg\normalhfill{-14}{18}} %D \macros %D {ruledvss, %D ruledvfil,ruledvfilneg, %D ruledvfill,ruledvfillneg} %D %D The vertical mode commands adopt the same visualization %D scheme, but are implemented in a slightly different way. \def\setvisiblevfilbox#1\to#2#3#4% {\setbox#1\normalhbox {\visualvrule \!!width #2\testrulewidth \!!height#3\testrulewidth \!!depth #4\testrulewidth}% \smashbox#1}% \def\doruledvfiller#1#2#3% {#1#2% \bgroup \dontinterfere \dontcomplain \normaloffinterlineskip \setvisiblevfilbox0\to422% \setbox2\normalvcue {\normalhskip -#3\testrulewidth\copy0}% \smashbox2% \copy2 \bgroup \setbox2\normalvcue {\normalhskip -2\testrulewidth\copy0}% \smashbox2% \copy2 \cleaders \normalvbox to 12\testrulewidth {\normalvss\copy2\normalvss}% #1% \setbox2\normalvbox {\normalvskip-2\testrulewidth\copy2}% \smashbox2% \box2 \egroup \box2 \egroup} %D Because they act the same as their horizontal counterparts %D we only show a few examples. %D %D \startlinecorrection %D \hbox to \hsize %D {\dontinterfere %D \baselinerulefalse %D \centeredvcuetrue %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vss}\ruledvss last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfil}\ruledvfil last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfill}\ruledvfill last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfilneg}\ruledvfilneg last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfillneg}\ruledvfillneg last line}} %D \stoplinecorrection %D %D Keep in mind that \type{\vfillneg} is not part of \PLAIN\ %D \TEX, but are mimmicked by a macro. \unexpanded\def\ruledvss {\doruledvfiller\normalvss \normalvfilneg {2}} \unexpanded\def\ruledvfil {\doruledvfiller\normalvfil \normalvfilneg {-4}} \unexpanded\def\ruledvfill {\doruledvfiller\normalvfill \normalvfillneg{-12}} \unexpanded\def\ruledvfilneg {\doruledvfiller\normalvfilneg \normalvfil {8}} \unexpanded\def\ruledvfillneg{\doruledvfiller\normalvfillneg\normalvfill {16}} %D \macros %D {ruledhskip} %D %D Skips differ from kerns in two important aspects: %D %D \startitemize[packed] %D \item line and pagebreaks are allowed at a skip %D \item skips can have a positive and/or negative %D stretchcomponent %D \stopitemize %D %D Stated a bit different: kerns are fixed skips at which no %D line or pagebreak can occur. Because skips have a more open %D character, they are visualized in a open way. %D %D \startbuffer %D one %D \hskip +30pt plus 5pt %D two %D \hskip +30pt %D \hskip -10pt plus 5pt %D three %D \hskip 0pt %D four %D \hskip +30pt %D five %D \stopbuffer %D %D \ShowBufferedExample %D %D When skips have a stretch component, this is visualized by %D means of a dashed line. Positive skips are on top of the %D baseline, negative ones are below it. This way we can show %D the combined results. An alternative visualization of %D stretch could be drawing the mid line over a length of the %D stretch, in positive or negative direction. \def\doruledhskip {\relax \dontinterfere \dontcomplain \investigateskip\scratchskip \ifzero \setbox0\normalhbox {\normalhskip-\testrulewidth \visualvrule \!!width4\testrulewidth \!!height16\testrulewidth \!!depth16\testrulewidth}% \else \setbox0\normalhbox to \ifnegative-\fi\scratchskip {\visualvrule \!!width2\testrulewidth \ifnegative\!!depth\else\!!height\fi16\testrulewidth \cleaders \visualhrule \ifnegative \!!depth2\testrulewidth \!!height\zeropoint \else \!!height2\testrulewidth \!!depth\zeropoint \fi \normalhfill \ifflexible \normalhskip\ifnegative\else-\fi\scratchskip \normalhskip2\testrulewidth \cleaders \normalhbox {\normalhskip 2\testrulewidth \visualvrule \!!width2\testrulewidth \!!height\ifnegative-7\else9\fi\testrulewidth \!!depth\ifnegative9\else-7\fi\testrulewidth \normalhskip 2\testrulewidth}% \normalhfill \fi \visualvrule \!!width2\testrulewidth \ifnegative\!!depth\else\!!height\fi16\testrulewidth}% \setbox0\normalhbox {\ifnegative\else\normalhskip-\scratchskip\fi \box0}% \fi \smashbox0% \ifvisiblestretch \else \flexiblefalse \fi \ifflexible % breaks ok but small displacements can occur \skip2\scratchskip \advance\skip2 -1\scratchskip \divide\skip2 2 \advance\scratchskip -\skip2 \normalhskip\scratchskip \normalpenalty\!!tenthousand \box0 \normalhskip\skip2 \else \normalhskip\scratchskip \box0 \fi \egroup} \unexpanded\def\ruledhskip {\bgroup \afterassignment\doruledhskip \scratchskip=} %D The visual skip is located at a feasible point. Normally %D this does not interfere with the normaltypesetting process. %D The next examples show (1)~the default behavior, (2)~the %D (not entirely correct) distributed stretch and (3)~the way %D the text is typeset without cues. %D %D \startbuffer %D \dorecurse %D {15} %D {test\hskip1em plus .5em minus .5em %D test\hskip2em %D test} %D \stopbuffer %D %D \startlinecorrection %D \showmakeup %D \getbuffer %D \stoplinecorrection %D %D \startlinecorrection %D \showmakeup %D \visiblestretchtrue %D \getbuffer %D \stoplinecorrection %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D \macros %D {ruledvskip} %D %D We are less fortunate when implementing the vertical skips. %D This is a direct result of interference between the boxes that %D visualize the skip and skip removal at a pagebreak. Normally %D skips disappear at the top of a page, but not of course when %D visualized in a \type{\vbox}. A quite perfect simulation %D could have been built if we would have had available two %D more primitives: \type{\hnop} and \type{\vnop}. These new %D primitives could stand for boxes that are visible but are %D not taken into account in any way. They are there for us, %D but not for \TEX. %D %D \startbuffer %D first line %D \vskip +30pt plus 5pt %D second line %D \vskip +30pt %D \vskip -10pt plus 5pt %D third line %D \par %D fourth line %D \vskip +30pt %D fifth line %D \vskip 0pt %D sixth line %D \stopbuffer %D %D \ShowBufferedExample %D %D We have to postpone \type{\prevdepth}. Although this %D precaution probably is not completely waterproof, it works %D quite well. \def\dodoruledvskip {\nextdepth\prevdepth \dontinterfere \dontcomplain \normaloffinterlineskip \investigateskip\scratchskip \ifzero \setbox0\normalvcue {\visualvrule \!!width32\testrulewidth \!!height2\testrulewidth \!!depth2\testrulewidth}% \else \setbox0\normalvbox to \ifnegative-\fi\scratchskip {\visualhrule \!!width16\testrulewidth \!!height2\testrulewidth \ifflexible \cleaders \normalhbox to 16\testrulewidth {\normalhss \normalvbox {\normalvskip 2\testrulewidth \visualhrule \!!width2\testrulewidth \!!height2\testrulewidth \normalvskip 2\testrulewidth}% \normalhss}% \normalvfill \else \normalvfill \fi \visualhrule \!!width16\testrulewidth \!!height2\testrulewidth}% \setbox2\normalvbox to \ht0 {\visualhrule \!!width2\testrulewidth \!!height\ht0}% \ifnegative \ht0\zeropoint \setbox0\normalhbox {\normalhskip2\testrulewidth % will be improved \normalhskip-\wd0\box0}% \fi \smashbox0% \smashbox2% \setbox0\normalvcue {\box2\box0}% \setbox0\normalvbox {\ifnegative\normalvskip\scratchskip\fi\box0}% \smashbox0% \fi \ifvisiblestretch \ifflexible \skip2\scratchskip \advance\skip2 -1\scratchskip \divide\skip2 2 \advance\scratchskip -\skip2 \normalvskip\skip2 \fi \fi \normalpenalty\!!tenthousand \box0 \prevdepth\nextdepth % not \dp0=\nextdepth \normalvskip\scratchskip} %D We try to avoid interfering at the top of a page. Of course %D we only do so when we are in the main vertical list. \def\doruledvskip {\endgraf % \par \ifdim\pagegoal=\maxdimen \ifinner \dodoruledvskip \fi \else \dodoruledvskip \fi \egroup} \unexpanded\def\ruledvskip {\bgroup \afterassignment\doruledvskip \scratchskip=} %D \macros %D {ruledkern} %D %D The macros that implement the kerns are a bit more %D complicated than needed, because they also serve the %D visualization of glue, our \PLAIN\ defined kerns with %D stretch or shrink. We've implemented both horizontal and %D vertical kerns as ruled boxes. %D %D \startbuffer %D one %D \kern +30pt %D two %D \kern +30pt %D \kern -10pt %D three %D \kern 0pt %D four %D \kern +30pt %D five %D \stopbuffer %D %D \ShowBufferedExample %D %D Positive and negative kerns are placed on top or below the %D baseline, so we are able to track their added result. We %D didn't mention spacings of 0~pt yet. Zero values are %D visualized a bit different, because we want to see them %D anyhow. \def\doruledhkern {\dontinterfere \dontcomplain \baselinerulefalse \investigateskip\scratchskip \boxrulewidth2\testrulewidth \ifzero \setbox0\ruledhbox to 8\testrulewidth {\visualvrule \!!width\zeropoint \!!height16\testrulewidth \!!depth16\testrulewidth}% \setbox0\normalhbox {\normalhskip-4\testrulewidth\box0}% \else \setbox0\ruledhbox to \ifnegative-\fi\scratchskip {\visualvrule \!!width\zeropoint \ifnegative\!!depth\else\!!height\fi16\testrulewidth \ifflexible \normalhskip2\testrulewidth \cleaders \normalhbox {\normalhskip 2\testrulewidth \visualvrule \!!width2\testrulewidth \!!height\ifnegative-7\else9\fi\testrulewidth \!!depth\ifnegative9\else-7\fi\testrulewidth \normalhskip 2\testrulewidth}% \normalhfill \else \normalhfill \fi}% \testrulewidth2\testrulewidth \setbox0\ruledhbox{\box0}% \make... \fi \smashbox0% \normalpenalty\!!tenthousand \normalhbox to \zeropoint {\ifnegative\normalhskip1\scratchskip\fi \box0}% \afterwards\scratchskip \egroup} \unexpanded\def\ruledhkern#1% {\bgroup \let\afterwards#1% \afterassignment\doruledhkern \scratchskip=} %D After having seen the horizontal ones, the vertical kerns %D will not surprise us. In this example we use \type{\par} to %D switch to vertical mode. %D %D \startbuffer %D first line %D \par \kern +30pt %D second line %D \par \kern +30pt %D \par \kern -10pt %D third line %D \par %D fourth line %D \par \kern +30pt %D fifth line %D \par \kern 0pt %D sixth line %D \stopbuffer %D %D \ShowBufferedExample %D %D Like before, we have to postpone \type{\prevdepth}. If we %D leave out this trick, we got ourselves some wrong spacing. \def\dodoruledvkern {\nextdepth\prevdepth \dontinterfere \dontcomplain \baselinerulefalse \normaloffinterlineskip \investigateskip\scratchskip \boxrulewidth2\testrulewidth \ifzero \setbox0\ruledhbox to 32\testrulewidth {\visualvrule \!!width\zeropoint \!!height4\testrulewidth \!!depth4\testrulewidth}% \else \setbox0\ruledvbox to \ifnegative-\fi\scratchskip {\hsize16\testrulewidth \ifflexible \cleaders \normalhbox to 16\testrulewidth {\normalhss \normalvbox {\normalvskip 2\testrulewidth \visualhrule \!!width2\testrulewidth \!!height2\testrulewidth \normalvskip 2\testrulewidth}% \normalhss}% \normalvfill \else \visualvrule \!!width\zeropoint \!!height\ifnegative-\fi\scratchskip \normalhfill \fi} \fi \testrulewidth2\testrulewidth \setbox0\ruledvbox{\box0}% \make... \smashbox0% \setbox0\normalvbox {\ifnegative\normalvskip\scratchskip\fi \normalvcue {\ifnegative\normalhskip-16\testrulewidth\fi\box0}}% \smashbox0% \normalpenalty\!!tenthousand \box0 \prevdepth\nextdepth} % not \dp0=\nextdepth \def\doruledvkern {\ifdim\pagegoal=\maxdimen \ifinner \dodoruledvkern \fi \else \dodoruledvkern \fi \afterwards\scratchskip \egroup} \unexpanded\def\ruledvkern#1% {\bgroup \let\afterwards#1\relax \afterassignment\doruledvkern \scratchskip=} \unexpanded\def\ruledkern {\ifvmode \expandafter\ruledvkern \else \expandafter\ruledhkern \fi \normalkern} %D A a bit more \TEX nice solution is: %D %D \starttyping %D \unexpanded\def\ruledkern% %D {\csname ruled\ifvmode v\else h\fi kern\endcsname\normalkern} %D \stoptyping %D \macros %D {ruledhglue,ruledvglue} %D %D The non-primitive glue commands are treated as kerns with %D stretch. This stretch is presented as a dashed line. I %D have to admit that until now, I've never used these glue %D commands. %D %D \startbuffer %D one %D \hglue +30pt plus 5pt %D two %D \hglue +30pt %D \hglue -10pt plus 5pt %D three %D \hglue 0pt %D four %D \hglue +30pt %D five %D \stopbuffer %D %D \ShowBufferedExample \def\doruledhglue {\leavevmode \scratchcounter\spacefactor \visualvrule\!!width\zeropoint \normalpenalty\!!tenthousand \ruledhkern\normalhskip\scratchskip \spacefactor\scratchcounter \egroup} \unexpanded\def\ruledhglue {\bgroup \afterassignment\doruledhglue\scratchskip=} %D \startbuffer %D first line %D \vglue +30pt plus 5pt %D second line %D \vglue +30pt %D \vglue -10pt plus 5pt %D third line %D \par %D fourth line %D \vglue +30pt %D fifth line %D \vglue 0pt %D sixth line %D \stopbuffer %D %D \ShowBufferedExample \def\doruledvglue {\endgraf % \par \nextdepth\prevdepth \visualhrule\!!height\zeropoint \normalpenalty\!!tenthousand \ruledvkern\normalvskip\scratchskip \prevdepth\nextdepth \egroup} \unexpanded\def\ruledvglue {\bgroup \afterassignment\doruledvglue\scratchskip=} %D \macros %D {ruledmkern,ruledmskip} %D %D Mathematical kerns and skips are specified in mu. This %D font related unit is incompatible with those of \DIMENSIONS\ %D and \SKIPS. Because in math mode spacing is often a very %D subtle matter, we've used a very simple, not overloaded way %D to show them. \def\dodoruledmkern#1% {\dontinterfere \dontcomplain \setbox0\normalhbox {$\normalmkern\ifnegative-\fi\scratchmuskip$}% \setbox0\normalhbox to \wd0 {\visualvrule \!!height16\testrulewidth \!!depth16\testrulewidth \!!width\testrulewidth \leaders \visualhrule \!!height\ifpositive16\else-14\fi\testrulewidth \!!depth\ifpositive-14\else16\fi\testrulewidth \normalhfill \ifflexible \normalhskip-\wd0 \leaders \visualhrule \!!height\testrulewidth \!!depth\testrulewidth \normalhfill \fi \visualvrule \!!height16\testrulewidth \!!depth16\testrulewidth \!!width\testrulewidth}% \smashbox0% \ifnegative #1\scratchmuskip \box0 \else \box0 #1\scratchmuskip \fi \egroup} %D \startbuffer %D $a \mkern3mu = \mkern3mu %D b \quad %D \mkern-2mu + \mkern-2mu %D \quad c$ %D \stopbuffer %D %D \ShowBufferedExample \def\doruledmkern {\investigatemuskip\scratchmuskip \flexiblefalse \dodoruledmkern\normalmkern} \unexpanded\def\ruledmkern {\bgroup \afterassignment\doruledmkern\scratchmuskip=} %D \startbuffer %D $a \mskip3mu = \mskip3mu %D b \quad %D \mskip-2mu + \mskip-2mu %D \quad c$ %D \stopbuffer %D %D \ShowBufferedExample \def\doruledmskip {\investigatemuskip\scratchmuskip \flexibletrue \dodoruledmkern\normalmskip} \unexpanded\def\ruledmskip {\bgroup \afterassignment\doruledmskip\scratchmuskip=} %D \macros %D {penalty} %D %D After presenting fills, skip, kerns and glue we've come to %D see penalties. In the first implementation --- most of the %D time needed to develop this set of macros went into testing %D different types of visualization --- penalties were mere %D small blocks with one black half, depending on the sign. %D This most recent version also gives an indication of the %D amount of penalty. Penalties can go from less than $-10000$ %D to over $+10000$, and their behavior is somewhat %D non-lineair, with some values having special meanings. We %D therefore decided not to use its value for a lineair %D indicator. %D %D \startbuffer %D one %D \penalty +100 %D two %D \penalty +100 %D \penalty -100 %D three %D \penalty 0 %D four %D \penalty +100 %D five %D \stopbuffer %D %D \ShowBufferedExample %D %D The small sticks at the side of the penalty indicate it %D size. The next example shows the positive and negative %D penalties of 0, 1, 10, 100, 1000 and 10000. %D %D \startlinecorrection %D \hbox %D {test \ruledhpenalty0 %D test \ruledhpenalty1 %D test \ruledhpenalty10 %D test \ruledhpenalty100 %D test \ruledhpenalty1000 %D test \ruledhpenalty10000 %D test} %D \stoplinecorrection %D %D \blank %D %D \startlinecorrection %D \hbox %D {test \ruledhpenalty0 %D test \ruledhpenalty-1 %D test \ruledhpenalty-10 %D test \ruledhpenalty-100 %D test \ruledhpenalty-1000 %D test \ruledhpenalty-10000 %D test} %D \stoplinecorrection %D %D \blank %D %D This way stacked penalties of different severance can be %D shown in combination. %D %D test \ruledhpenalty10 \ruledhpenalty100 %D test %D test \ruledhpenalty1000 \ruledhpenalty-1000 %D test \def\setruledpenaltybox#1#2#3#4#5#6% {\setbox#1\normalhbox {\ifnum#2=0 \else \edef\sign {\ifnum#2>0 +\else-\fi}% \dimen0=\ifnum\sign#2>9999 28\else \ifnum\sign#2>999 22\else \ifnum\sign#2>99 16\else \ifnum\sign#2>9 10\else 4 \fi\fi\fi\fi \testrulewidth \ifnum#2<0 \normalhskip-\dimen0 \normalhskip-2\testrulewidth \visualvrule \!!width2\testrulewidth \!!height#3\testrulewidth \!!depth#4\testrulewidth \fi \visualvrule \!!width\dimen0 \!!height#5\testrulewidth \!!depth#6\testrulewidth \ifnum#2>0 \visualvrule \!!width2\testrulewidth \!!height#3\testrulewidth \!!depth#4\testrulewidth \fi \fi}% \smashbox#1} \def\doruledhpenalty {\dontinterfere \dontcomplain \investigatecount\scratchcounter \testrulewidth2\testrulewidth \boxrulewidth\testrulewidth \setbox0\ruledhbox to 8\testrulewidth {\ifnegative\else\normalhss\fi \visualvrule \!!depth8\testrulewidth \!!width\ifzero0\else4\fi\testrulewidth \ifpositive\else\normalhss\fi}% \setruledpenaltybox{2}{\scratchcounter}{0}{8}{-3.5}{4.5}% \normalpenalty\!!tenthousand \setbox0\normalhbox {\normalhskip-4\testrulewidth \ifnegative \box2\box0 \else \box0\box2 \fi}% \smashbox0% \box0 \normalpenalty\scratchcounter \egroup} \unexpanded\def\ruledhpenalty {\bgroup \afterassignment\doruledhpenalty \scratchcounter=} %D The size of a vertical penalty is also shown on the %D horizontal axis. This way there is less interference with %D the often preceding or following skips and kerns. %D %D \startbuffer %D first line %D \par \penalty +100 %D second line %D \par \penalty +100 %D \par \penalty -100 %D third line %D \par \penalty 0 %D fourth line %D \par \penalty +100 %D fifth line %D \stopbuffer %D %D \ShowBufferedExample \def\doruledvpenalty {\ifdim\pagegoal=\maxdimen \else \nextdepth\prevdepth \dontinterfere \dontcomplain \investigatecount\scratchcounter \testrulewidth2\testrulewidth \boxrulewidth\testrulewidth \setbox0\ruledhbox {\visualvrule \!!height4\testrulewidth \!!depth4\testrulewidth \!!width\zeropoint \visualvrule \!!height\ifnegative.5\else4\fi\testrulewidth \!!depth\ifpositive.5\else4\fi\testrulewidth \!!width8\testrulewidth}% \setruledpenaltybox{2}{\scratchcounter}{4}{4}{.5}{.5}% \setbox0\normalhbox {\normalhskip-4\testrulewidth \ifnegative \box2\box0 \else \box0\box2 \fi \normalhss}% \smashbox0% \normalpenalty\!!tenthousand \nointerlineskip \dp0\nextdepth % not \prevdepth=\nextdepth \normalvbox {\normalvcue{\box0}}% \fi \normalpenalty\scratchcounter \egroup} \unexpanded\def\ruledvpenalty {\bgroup \afterassignment\doruledvpenalty \scratchcounter=} \unexpanded\def\ruledpenalty {\ifvmode \expandafter\ruledvpenalty \else \expandafter\ruledhpenalty \fi} %D At the cost of some more tokens, a bit more clever %D implementation would be: %D %D \starttyping %D \unexpanded\def\ruledpenalty% %D {\csname ruled\ifvmode v\else h\fi penalty\endcsname} %D \stoptyping %D \macros %D {showfils,dontshowfils, %D showboxes,dontshowboxes, %D showskips,dontshowskips, %D showpenalties,dontshowpenalties} %D %D For those who want to manipulate the visual cues in detail, %D we have grouped them. \newif\ifshowingcomposition % see later why we need this \def\showfils {\showingcompositiontrue \let\hss \ruledhss \let\hfil \ruledhfil \let\hfill \ruledhfill \let\hfilneg \ruledhfilneg \let\hfillneg \ruledhfillneg \let\vss \ruledvss \let\vfil \ruledvfil \let\vfill \ruledvfill \let\vfilneg \ruledvfilneg \let\vfillneg \ruledvfillneg} \def\dontshowfils {\let\hss \normalhss \let\hfil \normalhfil \let\hfill \normalhfill \let\hfilneg \normalhfilneg \let\hfillneg \normalhfillneg \let\vss \normalvss \let\vfil \normalvfil \let\vfill \normalvfill \let\vfilneg \normalvfilneg \let\vfillneg \normalvfillneg} \def\showboxes {\showingcompositiontrue \baselineruletrue \let\hbox \ruledhbox \let\vbox \ruledvbox \let\vtop \ruledvtop \let\vcenter \ruledvcenter} \def\dontshowboxes {\let\hbox \normalhbox \let\vbox \normalvbox \let\vtop \normalvtop \let\vcenter \normalvcenter} \def\showskips {\showingcompositiontrue \let\hskip \ruledhskip \let\vskip \ruledvskip \let\kern \ruledkern \let\mskip \ruledmskip \let\mkern \ruledmkern \let\hglue \ruledhglue \let\vglue \ruledvglue} \def\dontshowskips {\let\hskip \normalhskip \let\vskip \normalvskip \let\kern \normalkern \let\mskip \normalmskip \let\mkern \normalmkern \let\hglue \normalhglue \let\vglue \normalvglue} \def\showpenalties {\showingcompositiontrue \let\penalty \ruledpenalty} \def\dontshowpenalties {\let\penalty \normalpenalty} %D \macros %D {showcomposition,dontshowcomposition, %D showingcomposition} %D %D All these nice options come together in three macros. One %D for turning the options on, one for turning them off, and a %D boolean for enabling the mechanism outside the scope of the %D user. The first two macros only do their job when we are %D actually showing the composition. %D %D \starttyping %D \showingcompositiontrue %D \showcomposition %D \stoptyping %D %D Because the output routine can do tricky things, like %D multiple column typesetting and manipulation of the %D pagebody, shifting things around and so on, the macro %D \type{\dontshowcomposition} best can be called when we enter %D this routine. Too much visual cues just don't make sense. In %D \CONTEXT\ this has been taken care of. \newif\ifshowingcomposition \def\showcomposition {\ifshowingcomposition \showfils \showboxes \showskips \showpenalties \fi} \def\dontshowcomposition {\ifshowingcomposition \dontshowfils \dontshowboxes \dontshowskips \dontshowpenalties \fi} %D \macros %D {showmakeup, %D defaulttestrulewidth} %D %D Just to make things even more easy, we have defined: %D %D \starttyping %D \showmakeup %D \stoptyping %D %D For the sake of those who don't (yet) use \CONTEXT\ we %D preset \type{\defaulttestrulewidth} to the already set %D value. Otherwise we default to a bodyfontsize related value. %D %D \starttyping %D \def\defaulttestrulewidth{.2pt} %D \stoptyping %D %D Beware, it's a macro not a \DIMENSION. \ifx\bodyfontsize\undefined \edef\defaulttestrulewidth{\the\testrulewidth} \else \def\defaulttestrulewidth{.02\bodyfontsize} \fi \def\showmakeup {\testrulewidth\defaulttestrulewidth \showingcompositiontrue \showcomposition} \protect %D \ifCONTEXT \let\next=\relax \else \let\next=\endinput %D The documented source you have been reading was processed %D using some surrogate makeup. When this file is processed %D in \CONTEXT, a few more examples show up here, like a local %D table of contents and a local register. %D \fi \next %D Lets end with some more advanced examples. %D Definitions and enumerations come in many flavors. The %D next one for instance is defined as: %D %D \starttyping %D \definedescription[test][place=left,hang=3,width=6em] %D \stoptyping %D %D When applied to some text, this would look like: %D %D \bgroup %D \showmakeup %D \definedescription[test][location=left,hang=3,width=6em] %D %D \test{visual\\debugger} I would be very pleased if \TEX\ %D had two more primitives: \type{\vnop} and \type{\hnop}. Both %D should act and show up as normal boxes, but stay invisible %D for \TEX\ when it's doing calculations. The \type{\vnop} %D for instance should not interact with the internal mechanism %D responsible for the disappearing skips, kerns and penalties %D at a pagebreak. As long as we don't have these two boxtypes, %D visual debugging will never be perfect. %D %D \egroup %D %D The index to this section looks like: %D %D {\setupreferencing[prefixprefix=dummy]\showmakeup\placeindex[criterium=local]} %D %D Although not impressive examples or typesetting, both %D show us how and where things happen. When somehow the last %D lines in this two column index don't allign, then this is %D due to some still unknown interference. \endinput ��������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/data-aux.lua��������������������������������0000644�0001750�0001750�00000004532�12130411274�024077� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['data-aux'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local find = string.find local type, next = type, next local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local resolvers = resolvers local report_scripts = logs.reporter("resolvers","scripts") function resolvers.updatescript(oldname,newname) -- oldname -> own.name, not per se a suffix local scriptpath = "scripts/context/lua" newname = file.addsuffix(newname,"lua") local oldscript = resolvers.cleanpath(oldname) if trace_locating then report_scripts("to be replaced old script %a", oldscript) end local newscripts = resolvers.findfiles(newname) or { } if #newscripts == 0 then if trace_locating then report_scripts("unable to locate new script") end else for i=1,#newscripts do local newscript = resolvers.cleanpath(newscripts[i]) if trace_locating then report_scripts("checking new script %a", newscript) end if oldscript == newscript then if trace_locating then report_scripts("old and new script are the same") end elseif not find(newscript,scriptpath) then if trace_locating then report_scripts("new script should come from %a",scriptpath) end elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then if trace_locating then report_scripts("invalid new script name") end else local newdata = io.loaddata(newscript) if newdata then if trace_locating then report_scripts("old script content replaced by new content") end io.savedata(oldscript,newdata) break elseif trace_locating then report_scripts("unable to load new script") end end end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-pas.mkii�������������������������������0000644�0001750�0001750�00000015636�11376503616�024306� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=verb-pas, %D version=1999.12.09, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty \PASCAL\ and \MODULA\ Verbatim, %D author=Berend de Boer, %D date=\currentdate, %D copyright={Berend de Boer \& Hans Hagen}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This module will be cleaned up a bit in the process of more % flexible verbatim options. \writestatus{loading}{ConTeXt Verbatim Macros / Pretty PASCAL Verbatim} %D Typeset Pascal(-like) code: %D %D \startbuffer %D \startPAS %D program Hello; %D %D begin %D writeln('hello world.'); %D end. %D \stopPAS %D \stopbuffer %D %D Berend's preferences: %D %D \startbuffer[setup] %D \setuptyping %D [DELPHI] %D [palet=,icommand=\bf,vcommand=,ccommand=\it] %D \stopbuffer \ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi \unprotect \doglobal\newif\ifinPASbracketcomment \doglobal\newif\ifinPASslashstarcomment \doglobal\newif\ifinPASslashslashcomment \gdef\PASsetspecials% {\PLsetspecials \setpretty`\#=32 \setpretty`\%=41 \setpretty`\:=41 \setpretty`\/=43 \setpretty`\*=44 \setpretty`\{=45 \setpretty`\}=46 } \gdef\PASsethandlers% {\PLsethandlers \installprettyhandler 43 \PAStypefourthree \installprettyhandler 44 \PAStypefourfour \installprettyhandler 45 \PAStypefourfive \installprettyhandler 46 \PAStypefoursix } \gdef\PASsetcontrols% {\PLsetcontrols \def\flushrestofverbatimline% {\endPLtypesix \ifinPASslashslashcomment \PASstopslashslashcomment \fi \PLverbosefalse \PLverboseskipped=0}} \gdef\PASsetvariables {\PLsetvariables \global\inPASbracketcommentfalse \global\inPASslashstarcommentfalse \global\inPASslashslashcommentfalse} \gdef\setupprettyPAStype% {\def\prettyidentifier{PAS}% \let\PLidentifiers=\PASidentifiers \let\PLvariables=\PASvariables \PASsetvariables \PASsetcontrols \PASsethandlers \PASsetspecials \PLsetdiagnostics} % the // and /* comments \gdef\PAStypefourthree% {\handlenextnextpretty\doPAStypefourthree\PLtypefourtwo} \gdef\doPAStypefourthree#1#2% {\endPLtypesix \ifinPLcomment \let\next=\PLtypefourtwo \else \ifinPLsingle \let\next=\PLtypefourtwo \else \getprettydata{#2}% \ifnum\prettytype=43 \PLverbosecorrection \let\next=\PASstartslashslashcomment \else\ifnum\prettytype=44 \PLverbosecorrection \let\next=\PASstartslashstarcomment \else \let\next=\PLtypefourtwo \fi\fi \fi \fi \next{#1}#2} \gdef\PASstartslashstarcomment#1#2% {\global\inPLcommenttrue \global\inPASslashstarcommenttrue \prettynaturalfont \beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty} \gdef\PASstopslashstarcomment#1#2% {\beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty \verbatimfont \global\inPLcommentfalse \global\inPASslashstarcommentfalse} \gdef\PASstartslashslashcomment#1#2% {\global\inPLcommenttrue \global\inPASslashslashcommenttrue \prettynaturalfont \beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty} \gdef\PASstopslashslashcomment% {\verbatimfont \inPLcommentfalse \inPASslashslashcommentfalse} % \gdef\dodoPAStypefourthree% #1% % {\endPLtypesix % \handlenextnextpretty\dododoPAStypefourthree\dodododoPLtypefourthree} % \gdef\dododoPAStypefourthree% % {\ifnewpretty\expandafter\handlenewpretty\fi\dodododoPAStypefourthree} % \gdef\dodododoPAStypefourthree#1#2% % {\ifinPLcomment % \getpretties{#1}{#2}% % \else % \global\inPLcommenttrue % \PLverbosecorrection % \beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty % \fi} \gdef\PAStypefourfour% {\handlenextnextpretty\doPAStypefourfour\PLtypefourtwo} \gdef\doPAStypefourfour#1#2% {\ifinPASslashstarcomment \getprettydata{#2}% \ifnum\prettytype=43 \PASstopslashstarcomment{#1}#2% \else \endPLtypesix \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \expandafter#2% \fi \else \endPLtypesix \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \expandafter#2% \fi} % the { and } comments % we assume { is closed by } and do not follow the braindead Standard % Pascal standard in this respect % Note: brackets are not output correctly if natural font is \tf. % Therefore natural font is default to \tttf now (Hans is this ok??) % You have to use postscript fonts it seems to get brackets in that case. \gdef\PAStypefourfive#1% {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else \ifinPLsingle \getpretty{#1}% \else \global\inPLcommenttrue \global\inPASbracketcommenttrue \prettynaturalfont \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi \fi} \gdef\PAStypefoursix#1% {\endPLtypesix \ifinPASbracketcomment \prettynaturalfont\beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \verbatimfont \global\inPLcommentfalse \global\inPASbracketcommentfalse \else \getpretty{#1}% \fi} % Standard Pascal keywords (ISO/IEC 7185) \useprettyidentifiers \PASidentifiers \PASsetspecials and array begin case const div do downto else end file for function goto if in label mod nil not of or packed procedure program record repeat set then to type until var while with % Standard Pascal directives (ISO/IEC 7185) \useprettyidentifiers \PASidentifiers \PASsetspecials forward % Extended Pascal keywords (ISO/IEC 10206) \useprettyidentifiers \PASidentifiers \PASsetspecials and_then bindable export import module only or_else otherwise pow protected qualified restricted % Extended Pascal directives (ISO/IEC 10206) \useprettyidentifiers \PASidentifiers \PASsetspecials implementation interface % Object Pascal keywords (draft September 20, 1993) \useprettyidentifiers \PASidentifiers \PASsetspecials abstract class constructor destructor inherited is property view % Object Pascal directives (draft September 20, 1993) \useprettyidentifiers \PASidentifiers \PASsetspecials override % Delphi keywords \useprettyidentifiers \PASidentifiers \PASsetspecials as asm dispinterface except exports finalization finally initialization inline library object out raise resourcestring shl shr string threadvar try unit uses xor % Delphi directives % the read and write directive have been skipped % as they're pretty common procedure calls too \useprettyidentifiers \PASidentifiers \PASsetspecials absolute assembler automated cdecl contains default dispid dynamic external far implements index message name near nodefault overload override package pascal private protected public published readonly register reintroduce requires resident safecall stdcall stored virtual writeonly \useprettyidentifiers \PASvariables \PASsetspecials not-yet-defined \protect \endinput ��������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-hyp.mkii�������������������������������0000644�0001750�0001750�00000004302�11754241457�024316� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=xtag-hyp, %D version=2003.11.24, %D title=\CONTEXT\ XML MAcros, %D subtitle=Hyphenation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Hyphenation} %D This filter is kind of obsolete, since \UTF\ is not %D limited to \XML. So, here we only enable \UTF\ support. \ifnum\texengine=\luatexengine \defineXMLenvironment [hyphenations] [language=\currentlanguage,regime=utf,encoding=\defaultencoding] {\startnointerference \defineXMLargument [hyphenation] \hyphenation \language[\XMLop{language}]} {\stopnointerference} \else \defineXMLenvironment [hyphenations] [language=\currentlanguage,regime=utf,encoding=\defaultencoding] {\startnointerference \defineXMLargument [hyphenation] \hyphenation \language[\XMLop{language}]% \enableregime[\XMLop{regime}]% \enableencoding[\XMLop{encoding}]} {\stopnointerference} \fi \defineXMLsingular [hyphenate] {\-} \defineXMLgrouped [language] [code=\currentlanguage,scope=local] {\doifelse{\XMLop{scope}}{global}\mainlanguage\language[\XMLop{code}]} \defineXMLsingular [language] [code=\currentlanguage] {\doifelse{\XMLop{scope}}{global}\mainlanguage\language[\XMLop{code}]} \defineXMLsingular [compound] [token=-] {\expanded{\directdiscretionary{\XMLop{token}}}} \endinput % \mainlanguage[nl] \setupbodyfont[pos] \useXMLfilter[utf,hyp] % % \starttext % % \hyphenatedword{pati\ediaeresis nten} % \hyphenatedword{pati\ediaeresis ntenorganisatie} % \hyphenatedword{pati\ediaeresis ntenplatform} % % \startXMLdata % <hyphenations language='nl' regime='utf'> % <hyphenation>pa-tiën-ten</hyphenation> % <hyphenation>pa-tiën-ten-or-ga-ni-sa-tie</hyphenation> % <hyphenation>pa-tiën-ten-plat-form</hyphenation> % </hyphenations> % \stopXMLdata % % \hyphenatedword{pati\ediaeresis nten} % \hyphenatedword{pati\ediaeresis ntenorganisatie} % \hyphenatedword{pati\ediaeresis ntenplatform} % % \stoptext ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/core-env.mkiv�������������������������������0000644�0001750�0001750�00000060303�12130411274�024274� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=core-env, % was core-new %D version=1995.01.01, % wrong %D title=\CONTEXT\ Core Macros, %D subtitle=New ones, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Environments} \registerctxluafile{core-env}{1.001} \unprotect %D Modes: %D %D \starttyping %D \enablemode[screen,paper,bound] %D %D \doifmodeelse {paper} {this} {that} %D \doifmode {paper,screen} {this} %D \doifnotmode {paper,bound} {that} %D %D \startmode [list] %D \stopmode %D %D \startnotmode [list] %D \stopnotmode %D \stoptyping %D %D system modes have a * as prefix %D %D Sometimes, we want to prevent a mode for being set. Think %D of situations where a style enables a mode, but an outer %D level style does not want that. Preventing can be %D considered a permanent disabling on forehand. \def\systemmodeprefix{*} % we will have \installcorenamespace{mode} but need some hackery at the lua end then \installcorenamespace{modestack} % todo: check prevent mode, also at the lua end \setnewconstant\disabledmode \zerocount \setnewconstant\enabledmode \plusone \setnewconstant\preventedmode\plustwo % fast internal ones \def\??mode{mode>} % special namespace, also used at lua end \def\syst_modes_new#1% {\expandafter\newcount\csname\??mode#1\endcsname} \unexpanded\def\newmode#1% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi} \unexpanded\def\setmode#1% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi \csname\??mode#1\endcsname\enabledmode} \unexpanded\def\resetmode#1% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi \csname\??mode#1\endcsname\disabledmode} \unexpanded\def\newsystemmode#1% {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi} \unexpanded\def\setsystemmode#1% {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi \csname\??mode\systemmodeprefix#1\endcsname\enabledmode} \unexpanded\def\resetsystemmode#1% {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi \csname\??mode\systemmodeprefix#1\endcsname\disabledmode} % \def\dosetsystemmode#1% % {\csname\??mode\systemmodeprefix#1\endcsname\enabledmode} % % \def\doresetsystemmode#1% % {\csname\??mode\systemmodeprefix#1\endcsname\disabledmode} % demo: trialtypesetting is a systemmode as well as an if \newsystemmode{trialtypesetting} % the name of \@@trialtypesetting might change (also at the lua end) \expandafter\let\expandafter\@@trialtypesetting\csname\??mode\systemmodeprefix trialtypesetting\endcsname % private ! \appendtoks \@@trialtypesetting\enabledmode \to \everysettrialtypesetting \appendtoks \@@trialtypesetting\disabledmode \to \everyresettrialtypesetting % user ones \let\syst_mode_prefix\relax \unexpanded\def\preventmode{\unprotect\syst_modes_prevent} \unexpanded\def\enablemode {\unprotect\syst_modes_enable } \unexpanded\def\disablemode{\unprotect\syst_modes_disable} \unexpanded\def\globalpreventmode{\let\syst_mode_prefix\global\unprotect\syst_modes_prevent} \unexpanded\def\globalenablemode {\let\syst_mode_prefix\global\unprotect\syst_modes_enable } \unexpanded\def\globaldisablemode{\let\syst_mode_prefix\global\unprotect\syst_modes_disable} \let\definemode\disablemode % nicer \def\syst_modes_prevent[#1]{\protect\rawprocesscommacommand[#1]\syst_modes_prevent_indeed\let\syst_mode_prefix\relax} \def\syst_modes_enable [#1]{\protect\rawprocesscommacommand[#1]\syst_modes_enable_indeed \let\syst_mode_prefix\relax} \def\syst_modes_disable[#1]{\protect\rawprocesscommacommand[#1]\syst_modes_disable_indeed\let\syst_mode_prefix\relax} \def\syst_modes_prevent_indeed#1% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi \syst_mode_prefix\csname\??mode#1\endcsname\preventedmode} \def\syst_modes_enable_indeed#1% we can speed it up by moving the new outside {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi \ifnum\csname\??mode#1\endcsname=\preventedmode \else \syst_mode_prefix\csname\??mode#1\endcsname\enabledmode \fi} \def\syst_modes_disable_indeed#1% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi \ifnum\csname\??mode#1\endcsname=\preventedmode \else \syst_mode_prefix\csname\??mode#1\endcsname\disabledmode \fi} % handy for mp \def\booleanmodevalue#1% {\ifcsname\??mode#1\endcsname\ifcase\csname\??mode#1\endcsname\s!false\else\s!true\fi\else\s!false\fi} % check macros % For some reason the older version had an unprotect for grabbing the % mode list (only) which does not really make sense any more so that % has been removed. One should (un)protect at the outer level instead. \newconditional\c_checked_mode \def\syst_modes_check_indeed#1% {\ifcsname\??mode#1\endcsname \ifcase\csname\??mode#1\endcsname\else \let\syst_modes_check_step\gobbleoneargument \fi \fi} \def\syst_modes_check#1#2#3% {\let\syst_modes_check_step\syst_modes_check_indeed \rawprocesscommacommand[#3]\syst_modes_check_step \ifx\syst_modes_check_step\gobbleoneargument \expandafter#1% \else \expandafter#2% \fi} \def\syst_modes_check_all_indeed#1% {\ifcsname\??mode#1\endcsname \ifcase\csname\??mode#1\endcsname \let\syst_modes_check_all_step\gobbleoneargument \fi \else \let\syst_modes_check_all_step\gobbleoneargument \fi} \def\syst_modes_check_all#1#2#3% {\let\syst_modes_check_all_step\syst_modes_check_all_indeed \rawprocesscommacommand[#3]\syst_modes_check_all_step \ifx\syst_modes_check_all_step\gobbleoneargument \expandafter#2% \else \expandafter#1% \fi} \unexpanded\def\doifmodeelse {\syst_modes_check\firstoftwoarguments\secondoftwoarguments} \unexpanded\def\doifmode {\syst_modes_check\firstofoneargument\gobbleoneargument} \unexpanded\def\doifnotmode {\syst_modes_check\gobbleoneargument\firstofoneargument} \unexpanded\def\startmode [#1]{\syst_modes_check\donothing\syst_modes_stop_yes{#1}} \unexpanded\def\startnotmode [#1]{\syst_modes_check\syst_modes_stop_nop\donothing{#1}} \unexpanded\def\doifallmodeselse {\syst_modes_check_all\firstoftwoarguments\secondoftwoarguments} \unexpanded\def\doifallmodes {\syst_modes_check_all\firstofoneargument\gobbleoneargument} \unexpanded\def\doifnotallmodes {\syst_modes_check_all\gobbleoneargument\firstofoneargument} \unexpanded\def\startallmodes [#1]{\syst_modes_check_all\donothing\syst_modes_stop_all_yes{#1}} \unexpanded\def\startnotallmodes[#1]{\syst_modes_check_all\syst_modes_stop_all_nop\donothing{#1}} \unexpanded\def\stopmode {} % no relax \unexpanded\def\stopnotmode {} % no relax \unexpanded\def\stopallmodes {} % no relax \unexpanded\def\stopnotallmodes {} % no relax \def\syst_modes_stop_yes #1\stopmode {} \def\syst_modes_stop_nop #1\stopnotmode {} \def\syst_modes_stop_all_yes#1\stopallmodes {} \def\syst_modes_stop_all_nop#1\stopnotallmodes{} %D Pushing/popping: \unexpanded\def\pushmode[#1]% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\??mode#1\endcsname}% \expandafter\pushmacro\csname\??modestack#1\endcsname} \unexpanded\def\popmode[#1]% {\ifcsname\??modestack#1\endcsname \expandafter\popmacro\csname\??modestack#1\endcsname \csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax \fi} \def\pushsystemmode#1% {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\??mode\systemmodeprefix#1\endcsname}% \expandafter\pushmacro\csname\??modestack\systemmodeprefix#1\endcsname} \def\popsystemmode#1% {\ifcsname\??modestack\systemmodeprefix#1\endcsname \expandafter\popmacro\csname\??modestack\systemmodeprefix#1\endcsname \csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax \fi} %D Here is a relatively new variant of mode checking: %D %D \starttyping %D \enablemode[two] %D %D \startmodes %D [one] {1} %D [two] {2} %D [two] {2} %D [three] {3} %D [default] {?} %D \stopmodes %D %D \startmodes %D [one] {1} %D [three] {3} %D [default] {?} %D \stopmodes %D %D \startmodes %D [one] { %D \input tufte %D } %D [two] { %D \startmodes %D [one] {1} %D [two] {2} %D [two] {2} %D [three] {3} %D [default] {?} %D \stopmodes %D } %D [three] { %D \input zapf %D } %D [default] { %D \input ward %D } %D \stopmodes %D \stoptyping \newconditional\c_syst_modes_set_done % conditionals can be pushed/popped \unexpanded\def\startmodeset {\pushmacro\c_syst_modes_set_done \setfalse\conditionalfalse \doifnextoptionalelse\syst_modes_set_start\syst_modes_set_quit} \def\syst_modes_set_start[#1]% {\edef\m_mode_case{#1}% \ifx\m_mode_case\s!default \ifconditional\c_syst_modes_set_done \doubleexpandafter\syst_modes_set_quit \else \doubleexpandafter\syst_modes_set_yes \fi \else \singleexpandafter\syst_modes_set_check \fi} \def\syst_modes_set_check {\syst_modes_check\syst_modes_set_yes\syst_modes_set_nop\m_mode_case} \def\syst_modes_set_yes#1% {\settrue\c_syst_modes_set_done #1% \doifnextoptionalelse\syst_modes_set_start\syst_modes_set_quit} \def\syst_modes_set_nop#1% {\doifnextoptionalelse\syst_modes_set_start\syst_modes_set_quit} \def\syst_modes_set_quit#1\stopmodeset {\popmacro\c_syst_modes_set_done} \let\stopmodeset\relax %D Lets now set a mode: \enablemode[mkiv] \newsystemmode{mkiv} \setsystemmode{mkiv} %D Setups: \installcorenamespace{setup} % we can probably get rid of some :'s later on \unexpanded\def\startsetups{} % to please dep checker \unexpanded\def\stopsetups {} % to please dep checker \expanded % will become obsolete {\def\expandafter\noexpand\csname\e!start\v!setups\endcsname {\begingroup\noexpand\doifnextoptionalelse {\noexpand\dostartsetupsA\expandafter\noexpand\csname\e!stop\v!setups\endcsname} {\noexpand\dostartsetupsB\expandafter\noexpand\csname\e!stop\v!setups\endcsname}}} \letvalue{\e!stop\v!setups}\relax \unexpanded\def\setups{\doifnextbgroupelse\syst_setups_a\syst_setups_b} % {..} or [..] \unexpanded\def\setup {\doifnextbgroupelse\syst_setups \syst_setups_c} % {..} or [..] \def\syst_setups_a #1{\processcommacommand[#1]\syst_setups} % {..} \def\syst_setups_b[#1]{\processcommacommand[#1]\syst_setups} % [..] \def\syst_setups_c[#1]{\syst_setups{#1}} % [..] \letvalue{\??setup:\letterpercent}\gobbleoneargument \def\syst_setups#1% the grid option will be extended to other main modes {\csname\??setup \ifgridsnapping \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi\fi \else \ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi \fi \endcsname\empty} % takes one argument % We can consider: % % \setvalue{\??setup->\v!auto}#1{\ctxcommand{autosetup("#1")}} % % ":\letterpercent" => "->\v!auto" with "\endcsname{#1}" % % but it won't work out well with multiple setups (intercepted at the % lua end) that then get only one argument. % the next one is meant for \c!setups situations, hence the check for % a shortcut \let\m_syst_setups_asked\empty \def\doprocesslocalsetups#1% sort of public, fast local variant {\edef\m_syst_setups_asked{#1}% \ifx\m_syst_setups_asked\empty\else \expandafter\syst_setups_process_local \fi} \unexpanded\def\usesetupsparameter#1% {\edef\m_syst_setups_asked{#1\c!setups}% \ifx\m_syst_setups_asked\empty\else \expandafter\syst_setups_process_local \fi} % \def\syst_setups_process_local % {\expandafter\processcommalist\expandafter[\m_syst_setups_asked]\syst_setups} % setups=S1 % setups=lua(S2) % setups=S3 % setups={S1,lua(S2),xml(test{123}),S3} \def\syst_setups_process_local {\ctxcommand{autosetups("\m_syst_setups_asked")}% \relax} % let's prevent lookahead \def\autosetups#1% {\ctxcommand{autosetups("#1")}} \edef\setupwithargument#1% saves a few expansions {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname} \let\directsetup\syst_setups \let\texsetup \syst_setups % nicer than \directsetup and more en par with xmlsetup and luasetup \unexpanded\def\doifsetupselse#1% to be done: grid {\ifcsname\??setup:#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifsetups#1% to be done: grid {\ifcsname\??setup:#1\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnotsetups#1% to be done: grid {\ifcsname\??setup:#1\endcsname \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} % \startluasetups oeps % context("DONE") % a = 1 % b = 1 % \stopluasetups % % \luasetup{oeps} % % \startsetups xxx % ziezo % \stopsetups % % \directsetup{xxx} % % \startxmlsetups zzz % [[#1]] % \stopxmlsetups % % \xmlsetup{123}{zzz} % % \startbuffer[what] % context("DONE") % \stopbuffer % % \startbuffer % context("MORE") % \stopbuffer % % \ctxluabuffer[what] % % \ctxluabuffer \newtoks\t_syst_setups_tex \appendtoks \catcode\endoflineasciicode \ignorecatcode \to \t_syst_setups_tex \newtoks\t_syst_setups_loc \appendtoks \catcode\endoflineasciicode \ignorecatcode \to \t_syst_setups_loc \newtoks\t_syst_setups_raw \appendtoks % nothing \to \t_syst_setups_raw \newtoks\t_syst_setups_xml \appendtoks \catcode\endoflineasciicode\ignorecatcode \catcode\barasciicode \othercatcode \to \t_syst_setups_xml \newtoks\t_syst_setups_lua \appendtoks \obeylualines \obeyluatokens \to \t_syst_setups_lua % Is doglobal still relevant? Maybe always global? Or never? Anyway, it will become obsolete. \unexpanded\def\startluasetups {\begingroup\doifnextoptionalelse\syst_setups_start_lua_a\syst_setups_start_lua_b} \unexpanded\def\startxmlsetups {\begingroup\doifnextoptionalelse\syst_setups_start_xml_a\syst_setups_start_xml_b} \unexpanded\def\startrawsetups {\begingroup\doifnextoptionalelse\syst_setups_start_raw_a\syst_setups_start_raw_b} \unexpanded\def\startlocalsetups{\begingroup\doifnextoptionalelse\syst_setups_start_loc_a\syst_setups_start_loc_b} \unexpanded\def\startsetups {\begingroup\doifnextoptionalelse\syst_setups_start_tex_a\syst_setups_start_tex_b} \let\stopluasetups \relax \let\stopxmlsetups \relax \let\stoprawsetups \relax \let\stoplocalsetups \relax \let\stopsetups \relax \def\syst_setups_start_lua_indeed#1#2#3\stopluasetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} \def\syst_setups_start_xml_indeed#1#2#3\stopxmlsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} \def\syst_setups_start_raw_indeed#1#2#3\stoprawsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} \def\syst_setups_start_loc_indeed#1#2#3\stoplocalsetups{\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} \def\syst_setups_start_tex_indeed#1#2#3\stopsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} \def\syst_setups_start_lua{\ifsecondargument\expandafter\syst_setups_start_lua_c\else\expandafter\syst_setups_start_lua_d\fi} \def\syst_setups_start_xml{\ifsecondargument\expandafter\syst_setups_start_xml_c\else\expandafter\syst_setups_start_xml_d\fi} \def\syst_setups_start_raw{\ifsecondargument\expandafter\syst_setups_start_raw_c\else\expandafter\syst_setups_start_raw_d\fi} \def\syst_setups_start_loc{\ifsecondargument\expandafter\syst_setups_start_loc_c\else\expandafter\syst_setups_start_loc_d\fi} \def\syst_setups_start_tex{\ifsecondargument\expandafter\syst_setups_start_tex_c\else\expandafter\syst_setups_start_tex_d\fi} \def\syst_setups_start_lua_a{\the\t_syst_setups_lua\dodoubleempty\syst_setups_start_lua} % [ ] delimited \def\syst_setups_start_xml_a{\the\t_syst_setups_xml\dodoubleempty\syst_setups_start_xml} % [ ] delimited \def\syst_setups_start_raw_a{\the\t_syst_setups_raw\dodoubleempty\syst_setups_start_raw} % [ ] delimited \def\syst_setups_start_loc_a{\the\t_syst_setups_loc\dodoubleempty\syst_setups_start_loc} % [ ] delimited \def\syst_setups_start_tex_a{\the\t_syst_setups_tex\dodoubleempty\syst_setups_start_tex} % [ ] delimited % empty preserves inner {} (is removed by the \expandafter{#3}) \def\syst_setups_start_lua_b#1 {\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty} % space delimited \def\syst_setups_start_xml_b#1 {\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty} % space delimited \def\syst_setups_start_raw_b#1 {\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty} % space delimited \def\syst_setups_start_loc_b#1 {\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty} % space delimited \def\syst_setups_start_tex_b#1 {\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty} % space delimited \def\syst_setups_start_lua_c[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed{#1}{#2}\empty} % [..] [..] \def\syst_setups_start_xml_c[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed{#1}{#2}\empty} % [..] [..] \def\syst_setups_start_raw_c[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed{#1}{#2}\empty} % [..] [..] \def\syst_setups_start_loc_c[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed{#1}{#2}\empty} % [..] [..] \def\syst_setups_start_tex_c[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed{#1}{#2}\empty} % [..] [..] \def\syst_setups_start_lua_d[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty} % [..] \def\syst_setups_start_xml_d[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty} % [..] \def\syst_setups_start_raw_d[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty} % [..] \def\syst_setups_start_loc_d[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty} % [..] \def\syst_setups_start_tex_d[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty} % [..] \def\luasetup#1{\ctxlua{\syst_setups{#1}}} % % % % \def\systemsetupsprefix{*} \def\systemsetups#1{\syst_setups{\systemsetupsprefix#1}} \def\resetsetups[#1]% see x-fo for usage {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname \dodoglobal\letbeundefined{\??setup\ifgridsnapping\v!grid\fi:#1}% \else \dodoglobal\letbeundefined{\??setup:#1}% \fi} \def\showsetupsdefinition[#1]% {\showvalue{\??setup:#1}} % temp hack for debugging %D \macros %D {setvariables,getvariable,getvariabledefault} %D %D \starttyping %D \setvariables[xx][title=] %D \setvariables[xx][title=test test] %D \setvariables[xx][title=test $x=1$ test] % fatal error reported %D \setvariables[xx][title=test {$x=1$} test] %D \setvariables[xx][title] % fatal error reported %D \setvariables[xx][titletitel=e] %D \stoptyping \installcorenamespace{variables} \unexpanded\def\setvariables {\dotripleargument\syst_variables_set[\getrawparameters ]} \unexpanded\def\setevariables{\dotripleargument\syst_variables_set[\getraweparameters]} \unexpanded\def\setgvariables{\dotripleargument\syst_variables_set[\getrawgparameters]} \unexpanded\def\setxvariables{\dotripleargument\syst_variables_set[\getrawxparameters]} \unexpanded\def\globalsetvariables % obsolete {\dotripleargument\syst_variables_set[\globalgetrawparameters]} \def\syst_variables_set[#1][#2][#3]% tricky, test on s-pre-60 {\errorisfataltrue \doifelse{#2}\currentvariableclass {#1[\??variables#2:][#3]}% {\pushmacro\currentvariableclass \def\currentvariableclass{#2}% \getvariable{#2}\s!reset #1[\??variables#2:][#3]% \getvariable{#2}\s!set \popmacro\currentvariableclass}% \errorisfatalfalse} \unexpanded\def\setvariable #1#2#3{\expandafter\def \csname\??variables#1:#2\endcsname{#3}} \unexpanded\def\setevariable#1#2#3{\expandafter\edef\csname\??variables#1:#2\endcsname{#3}} \unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}} \unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}} \def\getvariable#1#2% {\csname \ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi \endcsname} \def\showvariable#1#2% {\showvalue{\ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi}} \let\currentvariableclass\empty %D \macros %D {checkvariables} %D %D I'll probably forget that this on exists. \let\m_syst_variables_temp\empty \def\checkvariables {\dodoubleargument\syst_variables_check} \def\syst_variables_check {\dogetparameters\syst_variables_check_value} \def\syst_variables_check_value#1#2#3% {\ifcsname\??variables#1:#2\endcsname \edef\m_syst_variables_temp{\csname\??variables#1:#2\endcsname}% \ifx\m_syst_variables_temp\empty \expandafter\def\csname\??variables#1:#2\endcsname{#3}% \fi \else \expandafter\def\csname\??variables#1:#2\endcsname{#3}% \fi} %D \macros %D {doifelsevariable,doifvariable,doifnotvariable} %D %D A few trivial macros: \unexpanded\def\doifelsevariable#1#2% {\ifcsname\??variables#1:#2\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifvariable#1#2% {\ifcsname\??variables#1:#2\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnotvariable#1#2% {\ifcsname\??variables#1:#2\endcsname \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \def\getvariabledefault#1#2% #3% can be command, so no ifcsname here {\executeifdefined{\??variables#1:#2}}% {#3} \unexpanded\def\setupenv {\dotripleargument\syst_variables_set[\getrawparameters][\s!environment]} \unexpanded\def\doifenvelse{\doifelsevariable \s!environment} \unexpanded\def\doifenv {\doifvariable \s!environment} \unexpanded\def\doifnotenv {\doifnotvariable \s!environment} \def\env {\getvariable \s!environment} \def\envvar {\getvariabledefault\s!environment} %D \macros %D {defineselector,setupselector,select,directselect} %D %D \starttyping %D \defineselector[caption][max=2,n=2] %D %D \start %D \setupselector[caption][n=1] %D \placelist[figure][criterium=all] %D \stop %D %D \starttext %D \placefigure %D {\select{caption}{zapf}{\input zapf \relax}} %D {} %D \stoptext %D \stoptyping \installcorenamespace{selector} \unexpanded\def\defineselector{\dodoubleargument\syst_selectors_define} \unexpanded\def\setupselector {\dodoubleargument\syst_selectors_setup} % \def\syst_selectors_define[#1][#2]{\getparameters[\??selector#1][\c!max=\plusone,\c!n=\plusone,#2]} % \def\syst_selectors_setup [#1][#2]{\getparameters[\??selector#1][#2]} \def\syst_selectors_define[#1][{\getparameters[\??selector#1][\c!max=\plustwo,\c!n=\plusone,} \def\syst_selectors_setup [#1][{\getparameters[\??selector#1][} \unexpanded\def\select % unexpandable {\directselect} % \def\directselect#1% expandable % {\filterfromnext % maybe add an \expanded % {\csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\endcsname}% % {\csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname}} % % this is more efficient when the arguments are used a few times (or passed along): \def\directselect#1% expandable {\expandafter\filterfromnext \csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\expandafter\endcsname \csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname} \letvalue{\??selector\c!max}\plusone \letvalue{\??selector\c!n }\plusone \protect \endinput �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-001.mkii�������������������������������0000644�0001750�0001750�00000012415�11754241457�024015� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=unic-001, %D version=2002.12.03, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Readable: %D %D \starttyping %D \startunicodevector 1 %D \ifcase#1\or %D unknownchar\or Abreve\or abreve\or %D .... %D Zcaron\or zcaron\else unknownchar\fi %D \stopunicodevector %D %D \stoptyping %D But we can speed things up, watch how we avoid zero and \TEX's %D automatically added \type {\relax}. % remark: % - gcommaaccent, kcomaaccent, lcomaaccent, ncomaaccent, rcomaaccent % bear the name "WITH CEDILLA" in Unicode % - scomaaccent and tcomaaccent point to the "WITH CEDILLA" in the % Adobe Glyph List \startunicodevector 1 \expandafter\strippedcsname \ifcase\numexpr#1\relax \Amacron \or \amacron \or \Abreve \or \abreve \or \Aogonek \or \aogonek \or \Cacute \or \cacute \or \Ccircumflex \or \ccircumflex \or \Cdotaccent \or \cdotaccent \or \Ccaron \or \ccaron \or \Dcaron \or \dcaron \or \Dstroke \or \dstroke \or \Emacron \or \emacron \or \Ebreve \or \ebreve \or \Edotaccent \or \edotaccent \or \Eogonek \or \eogonek \or \Ecaron \or \ecaron \or \Gcircumflex \or \gcircumflex \or \Gbreve \or \gbreve \or \Gdotaccent \or \gdotaccent \or \Gcommaaccent \or % WITH CEDILLA \gcommaaccent \or % WITH CEDILLA \Hcircumflex \or \hcircumflex \or \Hstroke \or \hstroke \or \Itilde \or \itilde \or \Imacron \or \imacron \or \Ibreve \or \ibreve \or \Iogonek \or \iogonek \or \Idotaccent \or \dotlessi \or \IJligature \or \ijligature \or \Jcircumflex \or \jcircumflex \or \Kcommaaccent \or % WITH CEDILLA \kcommaaccent \or % WITH CEDILLA \kkra \or % \kkra \or \Lacute \or \lacute \or \Lcommaaccent \or % WITH CEDILLA \lcommaaccent \or % WITH CEDILLA \Lcaron \or \lcaron \or \Ldotmiddle \or % \Ldotmiddle \or \ldotmiddle \or % \ldotmiddle \or \Lstroke \or \lstroke \or \Nacute \or \nacute \or \Ncommaaccent \or % WITH CEDILLA \ncommaaccent \or % WITH CEDILLA \Ncaron \or \ncaron \or \napostrophe \or \Neng \or \neng \or \Omacron \or \omacron \or \Obreve \or \obreve \or \Ohungarumlaut \or \ohungarumlaut \or \OEligature \or \oeligature \or \Racute \or \racute \or \Rcommaaccent \or % WITH CEDILLA \rcommaaccent \or % WITH CEDILLA \Rcaron \or \rcaron \or \Sacute \or \sacute \or \Scircumflex \or \scircumflex \or \Scedilla \or \scedilla \or \Scaron \or \scaron \or \Tcedilla \or \tcedilla \or \Tcaron \or \tcaron \or \Tstroke \or \tstroke \or \Utilde \or \utilde \or \Umacron \or \umacron \or \Ubreve \or \ubreve \or \Uring \or \uring \or \Uhungarumlaut \or \uhungarumlaut \or \Uogonek \or \uogonek \or \Wcircumflex \or \wcircumflex \or \Ycircumflex \or \ycircumflex \or \Ydiaeresis \or \Zacute \or \zacute \or \Zdotaccent \or \zdotaccent \or \Zcaron \or \zcaron \or \slong \or % 127 \slong \else \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \textflorin \or % 146 \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \Ohorn \or % 160 \ohorn \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \unknownchar \or \Uhorn \or % 175 \uhorn \else \unknownchar \fi \stopunicodevector \protect \endinput ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-fil.lua��������������������������������0000644�0001750�0001750�00000012271�12130411274�024073� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������if not modules then modules = { } end modules ['trac-fil'] = { version = 1.001, comment = "for the moment for myself", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local rawset, tonumber, type, pcall = rawset, tonumber, type, pcall local format, concat = string.format, table.concat local openfile = io.open local date = os.date local sortedpairs = table.sortedpairs local P, C, Cc, Cg, Cf, Ct, Cs, Carg = lpeg.P, lpeg.C, lpeg.Cc, lpeg.Cg, lpeg.Cf, lpeg.Ct, lpeg.Cs, lpeg.Carg local lpegmatch = lpeg.match local patterns = lpeg.patterns local cardinal = patterns.cardinal local whitespace = patterns.whitespace^0 local timestamp = Cf(Ct("") * ( Cg (Cc("year") * (cardinal/tonumber)) * P("-") * Cg (Cc("month") * (cardinal/tonumber)) * P("-") * Cg (Cc("day") * (cardinal/tonumber)) * P(" ") * Cg (Cc("hour") * (cardinal/tonumber)) * P(":") * Cg (Cc("minute") * (cardinal/tonumber)) * P(":") * Cg (Cc("second") * (cardinal/tonumber)) * P("+") * Cg (Cc("thour") * (cardinal/tonumber)) * P(":") * Cg (Cc("tminute") * (cardinal/tonumber)) )^0, rawset) local keysvalues = Cf(Ct("") * ( Cg(C(patterns.letter^0) * whitespace * "=" * whitespace * Cs(patterns.unquoted) * whitespace) )^0, rawset) local statusline = Cf(Ct("") * ( whitespace * P("[") * Cg(Cc("timestamp") * timestamp ) * P("]") * whitespace * Cg(Cc("status" ) * keysvalues) ),rawset) patterns.keysvalues = keysvalues patterns.statusline = statusline patterns.timestamp = timestamp loggers = loggers or { } local timeformat = format("[%%s%s]",os.timezone(true)) local dateformat = "!%Y-%m-%d %H:%M:%S" function loggers.makeline(t) local result = { } -- minimize time that file is open result[#result+1] = format(timeformat,date(dateformat)) for k, v in sortedpairs(t) do local tv = type(v) if tv == "string" then if v ~= "password" then result[#result+1] = format(" %s=%q",k,v) end elseif tv == "number" or tv == "boolean" then result[#result+1] = format(" %s=%q",k,tostring(v)) end end return concat(result," ") end local function append(filename,...) local f = openfile(filename,"a+") if not f then dir.mkdirs(file.dirname(filename)) f = openfile(filename,"a+") end if f then f:write(...) f:close() return true else return false end end function loggers.store(filename,data) -- a log service is nicer if type(data) == "table"then data = loggers.makeline(data) end pcall(append,filename,data,"\n") end function loggers.collect(filename,result) if lfs.isfile(filename) then local r = lpegmatch(Ct(statusline^0),io.loaddata(filename)) if result then -- append local nofresult = #result for i=1,#r do nofresult = nofresult + 1 result[nofresult] = r[i] end return result else return r end else return result or { } end end function loggers.fields(results) -- returns hash of fields with counts so that we can decide on importance local fields = { } if results then for i=1,#results do local r = results[i] for k, v in next, r do local f = fields[k] if not f then fields[k] = 1 else fields[k] = f + 1 end end end end return fields end local template = [[<!-- log entries: begin --!> <table> <tr>%s</tr> %s </table> <!-- log entries: end --!> ]] function loggers.tohtml(entries,fields) if not fields or #fields == 0 then return "" end if type(entries) == "string" then entries = loggers.collect(entries) end local scratch, lines = { }, { } for i=1,#entries do local entry = entries[i] local status = entry.status for i=1,#fields do local field = fields[i] local v = status[field.name] if v ~= nil then v = tostring(v) local f = field.format if f then v = format(f,v) end scratch[i] = format("<td nowrap='nowrap' align='%s'>%s</td>",field.align or "left",v) else scratch[i] = "<td/>" end end lines[i] = format("<tr>%s</tr>",concat(scratch)) end for i=1,#fields do local field = fields[i] scratch[i] = format("<th nowrap='nowrap' align='left'>%s</th>", field.label or field.name) end local result = format(template,concat(scratch),concat(lines,"\n")) return result, entries end -- loggers.store("test.log", { name = "whatever", more = math.random(1,100) }) -- local fields = { -- { name = "name", align = "left" }, -- { name = "more", align = "right" }, -- } -- local entries = loggers.collect("test.log") -- local html = loggers.tohtml(entries,fields) -- inspect(entries) -- inspect(fields) -- inspect(html) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fig-00.mkii�������������������������������0000644�0001750�0001750�00000017115�11754241457�024012� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=x-fig-00, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Loading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \readfile{x-res-04} \donothing \donothing \endinput % naast label, ook fig als ref en dan naar fig ref springen %D This module implements an interface to a figure database %D and file. The database is formatted in \XML\ conforming %D the following \DTD: %D %D \typefile{x-fig-00.dtd} %D %D A figure base coded this way looks like: %D %D \starttyping %D <!-- texexec --pdf --use=fig-01 figtest.xml --> %D %D <figurelibrary language="nl"> %D %D <description> %D <organization>PRAGMA Advanced Document Engineering</organization> %D <project>Manuals</project> %D <product>Beginners Manual</product> %D <comment>A bunch of figures.</comment> %D </description> %D %D <figure> %D <file>koe.pdf</file> %D <label>a dutch cow</label> %D <copyright>Corel Draw Suite</copyright> %D <comment>I bet that you've seen this cow before.</comment> %D </figure> %D %D <figure> %D <dummy width="4cm" height="3cm">non existent</dummy> %D <label>a european cow</label> %D <copyright>Nobody</copyright> %D <comment>When will we talk about European cows?</comment> %D </figure> %D %D </figurelibrary> %D \stoptyping %D %D You can convert this base into a \PDF\ file using %D \TEXEXEC\ and another module in this suite. %D %D \starttyping %D texexec --pdf --use=fig-make yourfile.xml %D \stoptyping %D %D You can now select a graphic from this file using the %D %D \starttyping %D \externalfigure[a dutch cow][width=4cm] %D \stoptyping %D %D This module overloads this command so that a figure is %D it first searched in the list of databases. %D %D \starttyping %D \usemodule [fig-base] %D \usefigurebases[yourfile] %D \stoptyping %D %D The special keyword \type {reset} can be used to reset %D this list. %D We park some mkiv code here. Eventually we will hook this into mkiv %D searching differently (just a standard feature, no need for loading %D modules because we need less code). Actually, what we do here is more %D like res-*: we load the xml file once. % \startluacode % % document.figurebases = { } % document.figurebases.data = { } % document.figurebases.found = { } % % function document.figurebases.find(basename,askedlabel) % document.figurebases.found = { } % local base = document.figurebases.data[basename] % local page = 0 % if not base then % base = xml.load(basename) % document.figurebases.data[basename] = base % end % for e, d, k in xml.elements(base,"figurelibrary/figure/label") do % page = page + 1 % if xml.content(d[k]) == askedlabel then % document.figurebases.found = { % name = xml.filters.text(e,"file"), % page = page, % } % return true % end % end % return false % end % % function commands.findfigurefilenameinbase(basename,askedlabel) % if document.figurebases.find(basename,askedlabel) then % commands.xdef("figurefilename",document.figurebases.found.name or "") % commands.xdef("figurefilepage",document.figurebases.found.page or "") % end % end % % \stopluacode % % \def\findfigurefilenameinbase#1#2% % {\ctxlua{commands.findfigurefilenameinbase("#1","\askedlabel")}} \startcommands dutch english german czech italian romanian usefigurebase: gebruikfiguurbestand usefigurebase usefigurebase usefigurebase usefigurebase usefigurebase \stopcommands \unprotect \consultutilityfilefalse \startXMLmapping [-] [figbase] \defineXMLprocess [figurelibrary] \defineXMLignore [description] \defineXMLignore [copyright] \defineXMLignore [comment] \defineXMLignore [status] \defineXMLpush [file] \defineXMLpush [label] \defineXMLpush [dummy] \defineXMLenvironment [figure] \figbase@StartFigure \figbase@StopFigure \stopXMLmapping \newcounter\figurefilepage \def\figbase@StartFigure {\bgroup} \def\figbase@StopFigure {\doglobal\increment\figurefilepage \doif\askedlabel{\XMLpop{label}} {\doglobal\settrue\figurefiledone \xdef\figurefilename{\XMLpop{file}}\endinput}% \egroup} \def\findfigurefilenameinbase#1#2% sets \figurefilename and \figurefilepage {\processXMLfilegrouped{#1}} \def\getfigurefilename#1#2% {\startnointerference \traceXMLelementsfalse \startXMLmapping[-][figbase] \resetfigurefilebase \XMLerase{file} \XMLerase{dummy} \XMLerase{label} \xdef\figurefilebase{#1}% \doglobal\newcounter\figurefilepage \def\askedlabel{#2} \processcommacommand[\figurepathlist]\dogetfigurefilename \stopXMLmapping \stopnointerference} \globalletempty\figurebasepath \def\dogetfigurefilename#1% {\ifx\figurefilename\empty \bgroup \xdef\figurefilebasepath{#1}% \assignfullfilename{#1}{\figurefilebase}\to\filename \doiffileelse{\filename.xml} {\doshowfigurestate{base file : \filename}% \expanded{\findfigurefilenameinbase{\filename.xml}{\askedlabel}}} \donothing \ifx\figurefilename\empty\else % \globallet\figurefilebase\figurefilebase \globallet\figurefilebase\filename % hm, bad omen that this is needed \fi \egroup \fi} \def\resetfigurefilebase {\globalletempty\figurefilebase \globalletempty\figurefilename \globalletempty\figurefilebasepath \globalletempty\figurefilepage} \def\doanalyzefiguredimensionsfromfile {\ifcase\figurestatus \ifx\figurebaselist\empty \else \resetfigurefilebase \doshowfigurestate{base list : \figurebaselist}% \processcommacommand[\figurebaselist]\dodoanalyzefiguredimensionsfromfile \ifx\figurefilename\empty \doshowfigurestate{base warning : no matching name found}% \else \doiffileelse{\figurefilebase.pdf} {\doshowfigurestate{base file : \figurefilebase.pdf}% \doshowfigurestate{base page : \figurefilepage}% \let\figurepathlist\figurefilebasepath \analyzefigurefilename{\figurefilebase.pdf}\wantedfigurelabel \let\wantedfigurepage\figurefilepage} {\doshowfigurestate{base missing : \figurefilebase.pdf}} \fi \ifcase\figurestatus \analyzefigurefilename\expandedfigurename\wantedfigurelabel \fi \fi \fi} \def\dodoanalyzefiguredimensionsfromfile#1% {\doshowfigurestate{base check : \wantedfigurename\space in #1}% \getfigurefilename{#1}\wantedfigurename \ifx\figurefilename\empty\else \quitcommalist \fi} \def\usefigurebase[#1]% {\doifelse{#1}\v!reset {\let\figurebaselist\empty} {\addtocommalist{#1}\figurebaselist}} \let\figurebaselist\empty \resetfigurefilebase \protect \endinput \usefigurebase[figtest] \externalfigure[koetje] [width=3cm] \externalfigure[de molen op de dijk][width=3cm] \externalfigure[de molen op de dijk][width=2cm] \externalfigure[weet ik veel] [width=3cm] \externalfigure[weet ik veel] [width=2cm] \externalfigure[weet ik wat] [width=2cm] \externalfigure[koe] [width=2cm] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/type-msw.mkii�������������������������������0000644�0001750�0001750�00000000071�11376503616�024337� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\input type-win.mkii \endinput % could be a file synonym �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/ppchtex.mkii��������������������������������0000644�0001750�0001750�00000356653�12130411274�024234� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=ppchtex (m-chemie), %D version=1997.03.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PPCHTEX\ (Plain Pictex Context cHemie \TEX), %D author=Hans Hagen, %D date=\currentdate, %D suggestions={Tobias Burnus, Dirk Kuypers \& Ton Otten}. %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % option=test => boxes % dummy => file % final => file / local run % % constante van phantom in definitie ONE: \setchemicaltextwidth 300 % % it would be interesting to rewrite this module with todays % experiences and new context functionality, maybe ... % Deze module ondersteunt het zetten van chemische % (structuur)formules. Hoewel de macro' zijn afgestemd op % CONTEXT, zijn ze ook buiten deze zetomgeving te gebruiken. % % Dit is, afgezien van updates, de definitieve versie van % PPCHTEX. Gebruikersgemak, eenvoud, flexibiliteit, en % snelheid zijn inmiddels redelijk geoptimaliseerd. Dit neemt % niet weg dat hier en daar nog verbetering mogelijk is. Dit % zal dan ook nog gebeuren. % % Volgende versies zullen tenminste dezelfde functionaliteit % hebben. We houden ons natuurlijk het recht voor de kwaliteit % van de output te verbeteren. Daarnaast staan nog op het % wensenlijstje: % % - optimaliseren in termen van proces-tijd % - aanpassen naamgeving van interne macro's % - toevoegen van functionaliteit % - in \x!-vorm omzetten van GIVES, TB enz. % % De mix tussen engels en nederlands lijkt soms verwarrend. % Meestal zijn verborgen macro's engels en zichtbare macro's % nederlands. Het gebruik van [ ] en { } sluit aan op andere % Context-macro's. Hetzelfde geldt voor instellingen en % \start-\stop-constructies. % % De schijnbaar overbodige \bgroup-\egroup constructie % garandeert aansluiting bij de Context-macro's voor het % plaatsen van figuren, tabellen en andere floats. % % Binnen Context worden de macro's geladen met % \gebruikextras[chemie]. Daarbij wordt een passende melding % getoont. Buiten Context genereren we een melding: \doifundefined{usemodule} {\writestatus{loading}{ConTeXt Chemical Macro's / 1996.3.1}} % Er kan gebruik worden gemaakt van PiCTeX of PStricks. Een % van deze pakketten moet van te voren zijn geladen. % % \input prepictex.tex (i.g.v. LaTeX) % \input pictex.tex % \input postpictex.tex (i.g.v. LaTeX) % % of: % % \input multido.tex % \input pstricks.tex % \input pst-plot.tex % % In \CONTEXT\ kan men de modules m-pictex en m-pstricks % gebruiken. De eerste module laad of efficiente wijze PiCTeX % en de tweede module koppelt het PSTRICKS kleurmechanisme % aan dat van \CONTEXT. % % PSTricks: {-\chemicalangle} instead of {*0}, which produces % faulty ps code when \chemicalangle=0 \startcommands dutch english german gotochemical: naarchemie gotochemical zurchemie setupchemical: stelchemiein setupchemical stellechemieein startchemical: startchemie startchemical startchemie stopchemical: stopchemie stopchemical stopchemie definechemical: definieerchemie definechemical definierechemie chemical: chemie chemical chemie toptext: boventekst toptext textueber bottext: ondertekst bottext textunter midtext: middentekst midtext textmitte \stopcommands \doifundefined{fiverm} % In the more recent LaTeX versions {\font\fiverm=cmr5 } % \fiverm is no longer (pre)defined. \doifdefinedelse{beginpicture} % PiCTeX {\doifdefinedelse{startMPdrawing} {\chardef\chemicaldrawingmode=2 } % MetaPost {\chardef\chemicaldrawingmode=0 }} % raw {\doifdefinedelse{psaxes} {\chardef\chemicaldrawingmode=1 } % PSTricks {\chardef\chemicaldrawingmode=3 }} % unknown \ifcase\chemicaldrawingmode \writestatus{ppchtex}{using PiCTeX} \or \writestatus{ppchtex}{using PSTricks (still experimental)} \writestatus{ppchtex}{automatic sizing not (yet) supported} \or \writestatus{ppchtex}{using PiCTeX and MetaPost} \else \writestatus{ppchtex}{load PiCTeX (+pre/post) or PSTricks (+pst_plot) first} \bgroup \read16 to \exit \egroup \expandafter\endinput \fi % De onderstaande help-informatie (%I) kan worden opgeroepen % in TeXEdit. De daaropvolgende setup-informatie (%S) kan % nadat zij is uit deze file is gefilterd met TeXUtil, in % handleidingen worden gebruikt. In deze file opgenomen % documentatie (%D en %M) kan worden gebruikt voor een % technische handleiding. Met %T kunnen templates worden % gedefinieerd voor TeXEdit. %I n=Chemie %I c=\stelchemiein,\chemie %I %I Chemische formules kunnen worden gezet met behulp van de %I onderstaande commando's: %I %I buiten $ en $$ : %I %I \chemie[segmenten][symbolen] %I %I \startchemie[instellingen] %I \chemie... %I \chemie... %I \stopchemie %I %I en binnen $ en $$: %I %I \chemie{}{} %I %I Voor tekst, uitleg en voorbeelde verwijzen we vooralsnog %I naar de handleiding. %P %I Het gedrag van de macro's kan worden ingesteld met: %I %I \stelchemiein[breedte=,hoogte=,links=,rechts=,boven=, %I onder=,korps=,schaal=,status=,assenstelsel=,kader=, %I variant=,optie=,formaat=,tekstformaat=,resolutie=, %I offset=,letter=] %I %I Structuren kunnen worden voorgedefinieerd met het commando %I %I \definieerchemie[naam]{\chemie...} %S \startsetup %S \command %S [\!stelchemiein] %S \type %S [\c!vars!] %S \variable %S [\c!breedte] %S [\c!number!,\v!passend] %S [0] %S \variable %S [\c!hoogte] %S [\c!number!,\v!passend] %S [0] %S \variable %S [\c!links] %S [\c!number!] %S [0] %S \variable %S [\c!rechts] %S [\c!number!] %S [0] %S \variable %S [\c!boven] %S [\c!number!] %S [0] %S \variable %S [\c!onder] %S [\c!number!] %S [0] %S \variable %S [\c!resolutie] %S [\c!number!] %S [\outputresolution] %S \variable %S [\c!korps] %S [10pt,11pt,12pt] %S [\bodyfontsize] %S \variable %S [\c!schaal] %S [\v!klein,\v!middel,\v!groot] %S [\v!middel] %S \variable %S [\c!formaat] %S [\v!klein,\v!middel,\v!groot] %S [\v!groot] %S \variable %S [\c!tekstformaat] %S [\v!klein,\v!middel,\v!groot] %S [\v!groot] %S \variable %S [\c!status] %S [\v!start,\v!stop] %S [\v!start] %S \variable %S [\c!kader] %S [\v!aan,\v!uit] %S [\v!uit] %S \variable %S [\c!assenstelsel] %S [\v!aan,\v!uit] %S [\v!uit] %S \variable %S [\c!optie] %S [\v!test] %S [] %S \variable %S [\c!variant] %S [1,2] %S [1] %S \variable %S [\c!offset] %S [HIGH,LOW] %S [LOW] %S \variable %S [\c!letter] %S [\c!command!] %S [\rm] %S \stopsetup %S \startsetup %S \command %S [\v!startchemie] %S \type %S [\c!vars!\c!stp!] %S \inheritvariable %S [\v!stelchemiein] %S [] %S \stopsetup %S \startsetup %S \command %S [\v!chemie] %S \type %S [\c!vals!\c!vals!] %S \value %S [\c!list!] %S [] %S \value %S [\c!list!] %S [] %S \stopsetup %S \startsetup %S \command %S [definieerchemie] %S \type %S [\c!val!\c!arg!] %S \value %S [\c!text!] %S [] %S \stopsetup \unprotect % Om te voorkomen dat sub- en superscripts botsen passen we % wat fontdimen's aan (Knuth, The TeXBook, p179). Helaas % kunnen deze instellingen niet lokaal worden gehouden door % groeperen, vandaar dat een en ander moet worden geset n % gereset. % % Er dient een relatie te worden gelegd met de afmetingen % van de letters. In een eerdere versie werden daartoe de % \fontdimen's opgehoogd. Omdat dit problemen gaf bij % scaled fonts, is bij nader inzien gekozen voor de % onderstaande oplossing, waarbij de nieuwe waarden worden % afgeleid van de x-height (\fontexheight). De factor 0.70 % is min of meer experimenteel vastgesteld. Soms worden de % regels iets verder uit elkaar gezet. Jammer. Italic fonts % hebben grotere cijfers en vallen min of meer uit de boot. \newif\ifloweredsubscripts % Due to some upward incompatibality of LaTeX to LaTeX2.09 % and/or LaTeX2e we had to force \@@dochemicalstyle. Otherwise % some weird \nullfont error comes up. \def\beginlatexmathmodehack {\ifmmode \let\endlatexmathmodehack=\relax \else \def\endlatexmathmodehack{$}$\@@dochemicalstyle\empty \fi} \def\setsubscripts% {\beginlatexmathmodehack \def\dosetsubscript##1##2##3% {\dimen0=##3\fontexheight##2% \setxvalue{@@\string##1\string##2}{\the##1##2\relax}% ##1##2=\dimen0\relax}% \def\dodosetsubscript##1##2% {\dosetsubscript{##1}{\textfont 2}{##2}% \dosetsubscript{##1}{\scriptfont 2}{##2}% \dosetsubscript{##1}{\scriptscriptfont2}{##2}}% %dodosetsubscript\mathsupnormal {?}% \dodosetsubscript\mathsubnormal {.7}% \dodosetsubscript\mathsubcombined{.7}% \global\loweredsubscriptstrue \endlatexmathmodehack} \def\resetsubscripts {\ifloweredsubscripts \beginlatexmathmodehack \def\doresetsubscript##1##2% {\dimen0=\getvalue{@@\string##1\string##2}\relax ##1##2=\dimen0}% \def\dodoresetsubscript##1% {\doresetsubscript{##1}{\textfont2}% \doresetsubscript{##1}{\scriptfont2}% \doresetsubscript{##1}{\scriptscriptfont2}}% %dodoresetsubscript\mathsupnormal \dodoresetsubscript\mathsubnormal \dodoresetsubscript\mathsubcombined \global\loweredsubscriptsfalse \endlatexmathmodehack \fi} \ifx\Umathchar\undefined \else % for the moment we nil them, soon we will have a proper % way to deal with this \let\setsubscripts \relax \let\resetsubscripts\relax \fi \def\doresetsubscripts {\resetsubscripts} \def\sethighsubscripts {\resetsubscripts \let\dosetsubscripts=\relax} \def\setlowsubscripts {\def\dosetsubscripts{\setsubscripts}} \setlowsubscripts \newcount\horchemical % t.z.t. \newcounter \newcount\verchemical % t.z.t. \newcounter \newcount\txtchemical % t.z.t. \newcounter \newcount\levchemical % t.z.t. \newcounter \newif\ifinchemical \inchemicalfalse \newif\iffixedchemical \fixedchemicalfalse \newbox\chemicalsymbols % Eigenlijk moeten de constanten en variabelen in cont-nl.tex % staan. Dit pakket is echter relatief onafhankelijk van CONTEXT. \definesystemvariable {chemical} \definesystemconstant {chemical} \definesystemconstant {translate} \definesystemconstant {distance} \definesystemconstant {mirror} \definesystemconstant {rotate} \definesystemconstant {substitute} \definesystemconstant {angle} \definesystemconstant {executechemical} \definesystemconstant {chemicaltextelement} \definesystemconstant {chemicallinesegment} \definesystemconstant {chemicalcircsegment} \def\chemicalspace {\quad} % begin van experiment: % % De onderstaande twee macro's kunnen worden gebruikt voor % bijvoorbeeld een interactiemechanisme. % % \localgotochemical {verwijzing} {tekst} % \localthisischemical {verwijzing} \def\dowithchemical% {} \doifdefinedelse{@@iastate} {\def\localgotochemical#1#2{\naarbox{#2}[#1]}% \def\localthisischemical#1{\pagereference[#1]}} {\def\localgotochemical#1{}% \def\localthisischemical#1{}} % eind van experiment \def\setchemicalmaximum #1 {\def\maxchemical{#1}} \def\doifchemicalnumber#1#2#3% {\doifnumberelse{#1} {\ifnum#1>\maxchemical\relax \writestatus{ppchtex}{number #1 is skipped}% \else #3% \fi} {\unknownchemical{#2}}}% \newif\ifsmallchemicaltext \let\@@localchemicalstyle\empty \def\setupchemicalformat[#1]% {\processaction [\getvalue{#1\c!size}] [ \v!small=>\def\@@localchemicalformat{\scriptscriptstyle}, \v!medium=>\def\@@localchemicalformat{\ifsmallchemicaltext\scriptscriptstyle\else\scriptstyle\fi}, \v!big=>\def\@@localchemicalformat{\ifsmallchemicaltext\scriptstyle\else\textstyle\fi}, \s!unknown=>\def\@@localchemicalformat{\getvalue{#1\c!size}}]% \processaction [\getvalue{#1\c!textsize}] [ \v!small=>\def\@@localchemicalstyle{\scriptscriptstyle}, \v!medium=>\def\@@localchemicalstyle{\ifsmallchemicaltext\scriptscriptstyle\else\scriptstyle\fi}, \v!big=>\def\@@localchemicalstyle{\ifsmallchemicaltext\scriptstyle\else\textstyle\fi}, \s!unknown=>\def\@@localchemicalstyle{\getvalue{#1\c!textsize}}]% \processaction [\getvalue{#1\c!scale}] [ \v!small=>\def\@@localchemicalscale{500}, \v!medium=>\def\@@localchemicalscale{625}, \v!big=>\def\@@localchemicalscale{750}, \s!unknown=>\def\@@localchemicalscale{\getvalue{#1\c!scale}}]} \def\@@currentchemicalformat {\ifinchemical \@@localchemicalformat \else \@@localchemicalstyle \fi} \def\dosetupchemical[#1]% {\getparameters[\??chemical\s!chemical][#1]% \doifelse{\@@chemicalchemicaloffset}{LOW} {\setlowsubscripts} {\sethighsubscripts}% \setupchemicalformat[\??chemical\s!chemical]% \ignorespaces} \def\setupchemical {\dosingleargument\dosetupchemical} \def\@@dochemicalstyle% % default mapping {\@@chemicalstyle} \def\@@dochemicalcolor% % no mapping yet {} \def\@@chemicalstyle % $inner-style$ % (overloaded) {\@@chemicalchemicalstyle} % $$outer-style$$ \def\@@writechemicalstate#1#2% {} \def\@@beginchemicallocalpicture {\ifcase\chemicaldrawingmode \beginpicture \or \pspicture(0,0)(0,0) % is this permitted ? \or \pushMPdrawing \startMPdrawing %prologues := 1 ; %input mp-tool ; u := 10*\@@chemicalunit; bboxmargin := 0pt ; pickup pencircle scaled 2u ; % ??? \stopMPdrawing \beginpicture \fi} \def\@@endchemicallocalpicture#1#2% {\ifcase\chemicaldrawingmode \endpicture \or \endpspicture \or \resetchemicalcoordinates \setbox2\hbox{\MPshiftdrawingtrue\MPstaticgraphictrue\getMPdrawing}% \wd2=\!!zeropoint \ht2=\!!zeropoint \dp2=\!!zeropoint \put {\box2} at 0 0 \endpicture \popMPdrawing \fi} \def\@@beginchemicalpicture#1#2#3#4% {\ifnum\chemicaldrawingmode=1 \pspicture(#1,#3)(#2,#4)% \def\account##1##2{}% \psaxes[axesstyle=none,labels=none,ticks=none](#1,#3)(#2,#4)% \else \beginpicture \setplotarea x from {#1} to {#2}, y from {#3} to {#4} \iffixedchemical \accountingon \def\account##1##2% {\put {} at {##1} {##2} }% \else \accountingoff \def\account##1##2{}% \fi \fi \ignorespaces} \def\@@endchemicalpicture% {\ifcase\chemicaldrawingmode \put {\box\chemicalsymbols} at 0 0 % elders \endpicture \or \rput(0,0){\box\chemicalsymbols}% \endpspicture \or \put {\box\chemicalsymbols} at 0 0 % elders \ifMPdrawingdone \resetchemicalcoordinates \setbox2\hbox{\MPshiftdrawingtrue\MPstaticgraphictrue\getMPdrawing}% \wd2=\!!zeropoint \ht2=\!!zeropoint \dp2=\!!zeropoint \put {\box2} at 0 0 % \fi \endpicture \fi} \def\@@setchemicalcoordinatesystem#1% {\edef\@@chemicalunit{#1}% \ifcase\chemicaldrawingmode \setcoordinatesystem units <\@@chemicalunit,\@@chemicalunit> % \or \psset{unit=\@@chemicalunit}% \or \setcoordinatesystem units <\@@chemicalunit,\@@chemicalunit> % \startMPdrawing %input mp-tool ; %prologues := 1 ; u := 10*#1; bboxmargin := 0pt ; pickup pencircle scaled 2u ; % ??? \stopMPdrawing \fi} \ifx\MPdivten\undefined % hack to prevent overflows in mp \def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax} \fi \def\@@setchemicalaxis#1#2#3#4% {\ifcase\chemicaldrawingmode \axis bottom shiftedto y=0 ticks from {#1} to {#2} by 500 / \axis left shiftedto x=0 ticks from {#3} to {#4} by 500 / % \or \psaxes[labels=none,Dx=500,Dy=500](0,0)(#1,#3)(#2,#4)% \or \global\MPdrawingdonetrue % we need to div beforehand because of mp limitations \startMPdrawing x1 := \MPdivten[#1]u ; x2 := \MPdivten[#2]u; y1 := \MPdivten[#3]u ; y2 := \MPdivten[#4]u; draw z1--(x2,y1)--z2--(x1,y2)--cycle ; d := 50u ; dd := 10u ; draw (x1,0)--(x2,0) ; draw (0,y1)--(0,y2) ; for i=d step -d until x1: draw (i,dd)--(i,-dd) ; endfor ; for i=d step d until x2: draw (i,dd)--(i,-dd) ; endfor ; for i=d step -d until y1: draw (-dd,i)--(dd,i) ; endfor ; for i=d step d until y2: draw (-dd,i)--(dd,i) ; endfor ; \stopMPdrawing \fi} \def\@@setsecondchemicalplotsymbol% {\ifcase\chemicaldrawingmode \!!widtha=50.8mm \divide\!!widtha by \@@chemicalresolution\relax \plotsymbolspacing=\!!widtha \setplotsymbol({\vrule\!!height\!!widtha\!!width\!!widtha})% \fi} % Something for Dirk: \newcount \currentchemical %\newif \ifskipchemical \def\setchemicaldimensions#1#2#3% {\bgroup \global\advance\currentchemical by 1 \dimen0=#1\relax \dimen2=#2\relax \dimen4=#3\relax \setxvalue{chemical::\the\currentchemical}% {\noexpand\docommand{\the\dimen0}{\the\dimen2}{\the\dimen4}}% \egroup} %\def\getchemicaldimensions#1#2#3% % {\global\advance\currentchemical by 1 % \def\docommand##1##2##3% % {#1=##1\relax#2=##2\relax#3=##3\relax}% % \doifdefinedelse{chemical::\the\currentchemical} % {\getvalue{chemical::\the\currentchemical}} % {\docommand{6cm}{4cm}{0cm}}} % %\def\savechemicaldimensions% % {\bgroup % \writestatus{ppchtex}{saving dimensions in ppchtex.dim}% % \def\docommand##1##2##3% % {\immediate\write\scratchwrite % {\noexpand\setchemicaldimensions{##1}{##2}{##3}}}% % \immediate\openout\scratchwrite=ppchtex.dim % \scratchcounter=0 % \loop % \ifnum\scratchcounter<\currentchemical % \advance\scratchcounter by 1 % \getvalue{chemical::\the\scratchcounter}% % \repeat % \immediate\closeout\scratchwrite % \egroup} % %\def\loadchemicaldimensions% oh, how nice it would be to use % {\bgroup % one of the context read commands % \global\currentchemical=0 % \immediate\openin\scratchread=./ppchtex.dim % \ifeof\scratchread % \immediate\closein\scratchread % \global\skipchemicalfalse % \else % \immediate\closein\scratchread % \input ./ppchtex.dim\relax % \ifnum\currentchemical>0 % \writestatus{ppchtex}{loading dimensions from ppchtex.dim}% % \global\skipchemicaltrue % \else % \global\skipchemicalfalse % \fi % \global\currentchemical=0 % \global\let\savechemicaldimensions=\relax % \fi % \egroup % \global\let\loadchemicaldimensions=\relax} \ifx\normalchemicalframe\undefined \let\normalchemicalframe\hbox % hook for educational purposes \fi \unexpanded\def\complexstartchemical[#1]% {\copyparameters [\??chemical][\??chemical\s!chemical] [\c!width,\c!height,\c!left,\c!right,\c!top,\c!bottom, \c!bodyfont,\c!size,\c!scale,\c!state,\c!frame,\c!axis,\c!factor, \c!location,\c!option,\c!alternative,\c!resolution,\c!offset,\c!style, \c!color,\c!rulecolor,\c!rulethickness]% \getparameters [\??chemical] [#1]% % \setupchemicalformat[\??chemical]% % \ifnum\chemicaldrawingmode=2 \resetMPdrawing \fi % \doif{\@@chemicalalternative}{2} {\@@setsecondchemicalplotsymbol}% % \doif{\@@chemicalaxis}\v!on {\let\chemicalframe\hbox}% % \!!counta=250000 \divide\!!counta by \@@localchemicalscale \!!widtha=\@@chemicalbodyfont \divide\!!widtha by \!!counta \@@setchemicalcoordinatesystem{\the\!!widtha}% % % \!!counta = -x \!!countc = -y % \!!countb = +x \!!countd = +y % \def\calculateaxis##1##2##3##4##5% {##1=##3\relax ##2=##4\relax \ifnum##5=0 \ifnum##3=0 \ifnum##4=0 ##1=2000 ##2=2000 \fi \fi \else \ifnum##3=0 \ifnum##4=0 ##1=##5\relax \divide##1 by 2 ##2=##1\relax \else ##1=##5\relax \advance##1 by -##2\relax \fi \else \ifnum##4=0 ##2=##5\relax \advance##2 by -##1\relax \fi \fi \fi}% \fixedchemicalfalse \doif\@@chemicalwidth\v!fit {\edef\@@chemicalwidth {\ifnum\chemicaldrawingmode=1 2000 \else 1 \fi}% \fixedchemicaltrue}% \doif\@@chemicalheight\v!fit {\edef\@@chemicalheight {\ifnum\chemicaldrawingmode=1 2000 \else 1 \fi}% \fixedchemicaltrue}% \doifelse\@@chemicallocation\v!intext {\!!counta=0 \!!countb=0 \!!counta=0 \!!countd=0 } {\calculateaxis \!!counta\!!countb \@@chemicalleft\@@chemicalright\@@chemicalwidth \calculateaxis \!!countc\!!countd \@@chemicalbottom\@@chemicaltop\@@chemicalheight}% % \edef\@@chemheight {\the\!!countc}% \edef\@@chemdepth {\the\!!countd}% \edef\@@chemicaltop {\the\!!countc}% \edef\@@chemicalbottom{\the\!!countd}% % \doifinsetelse\v!on{\@@chemicalframe,\@@chemicalaxis} {\def\@@chemicalborder{\chemicalframe}} {\def\@@chemicalborder{\normalchemicalframe}}% % \setbox0=\hbox\bgroup % this was a \vbox which took \hsize % \@@beginchemicalpicture {-\the\!!counta}{\the\!!countb} {-\the\!!countc}{\the\!!countd}% \doif{\@@chemicalstate}\v!start {\doif\@@chemicalaxis\v!on {\@@setchemicalaxis {-\the\!!counta}{\the\!!countb} {-\the\!!countc}{\the\!!countd}}}% \doifelse\@@chemicaloption\v!test {\def\@@writechemicalstate##1##2% {\convertargument##2\to\ascii \writestatus{##1}{\ascii}}} {\def\@@writechemicalstate##1##2{}}% \ignorespaces} \def\dostartchemical% {\catcode`\^=\@@superscript% t.b.v. \enableduplication \catcode`\_=\@@subscript % t.b.v. de zekerheid \begingroup \inchemicaltrue \def\toptext##1{\gdef\thetoptext{##1}\ignorespaces}\toptext{}% \def\bottext##1{\gdef\thebottext{##1}\ignorespaces}\bottext{}% \def\midtext##1{\gdef\themidtext{##1}\ignorespaces}\midtext{}% \def\@@chemicalpostponed{}% \complexorsimpleempty\startchemical} \def\startchemical {\bgroup % t.b.v. ungrouped floats % \loadchemicaldimensions % \ifskipchemical % \def\dostartchemical% % {\def\dummy[####1]{}\dosingleempty\dummy}% % \def\chemical% % {\def\dummy[####1][####2][####3]{}\dotripleempty\dummy}% % \def\toptext##1{}% % \def\midtext##1{}% % \def\bottext##1{}% % \fi \dostartchemical} \def\stopchemical {%\ifskipchemical % \getchemicaldimensions{\dimen0}{\dimen2}{\dimen4}% % \dimen8=\dimen2\advance\dimen8 by \dimen4 % \setbox0=\vbox to \dimen8 % {\vss\hbox to \dimen0{\hss\the\currentchemical\hss}\vss}% % \wd0=\dimen0\ht0=\dimen2\dp0=\dimen4 % \chemicalframe{\box0}% %\else \checkchemicalpicture \@@endchemicalpicture \egroup \ifnum\chemicaldrawingmode=1 \dimen0=\@@chemicalunit \setbox0=\hbox{\lower\@@chemdepth\dimen0\box0}% \ht0=\@@chemheight\dimen0 \dp0=\@@chemdepth\dimen0 \fi \dimen0=\ht0 \advance\dimen0 by \dp0 \inchemicalfalse % enables \chemie{} in text \setbox4=\alignedchemical\themidtext \setbox6=\alignedchemical\thetoptext \setbox8=\alignedchemical\thebottext \setbox4=\hbox to \wd0 {\strut\hss$\vcenter{\box4}$\hss}% \setbox2=\vbox to \dimen0 {\hbox to \wd0{\strut\hss\box6\hss} \vfill \hbox to \wd0{\strut\hss\box8\hss} \vss}% disables the depth \wd0=0pt \wd4=0pt \ht2=\ht0 \dp2=\dp0 \ht4=\ht0 \dp4=\dp0 %\setchemicaldimensions{\wd2}{\ht2}{\dp2}% \@@chemicalborder{\box0\box4\box2}% text on top of chemicals \endgroup %\fi \ignorespaces \egroup} % t.b.v. ungrouped floats \def\alignedchemical#1% {\vtop {\def\par{\egroup\hbox\bgroup\strut}% \let\\=\par \let\endgraf=\par \hbox\bgroup\strut#1\egroup}} % \setchemicalcoordinates{#1}{#2} % % #1: verplaatsing in x-richting % #2: verplaatsing in y-richting \newif\ifchemicaldirection \def\checkchemicaldirection#1#2% {\ifchemicaldirection \ifnum#1>0 \advance\horchemical -\chemicaldirection \fi \ifnum#1<0 \advance\horchemical +\chemicaldirection \fi \ifnum#2>0 \advance\verchemical -\chemicaldirection \fi \ifnum#2<0 \advance\verchemical +\chemicaldirection \fi \chemicaldirectionfalse \fi} \def\processchemicaldirection% {\chemicaldirectiontrue\processchemicaltranslate} \def\setchemicalcoordinates#1#2% {\advance\horchemical #1\relax \advance\verchemical #2\relax \checkchemicaldirection{#1}{#2}% \!!counta=-\horchemical\edef\chemicalxoffset{\the\!!counta}% \!!countb=-\verchemical\edef\chemicalyoffset{\the\!!countb}% \ifnum\chemicaldrawingmode=1 % njet \else \setcoordinatesystem point at {\the\horchemical} {\the\verchemical} \fi} \def\resetchemicalcoordinates {\horchemical=0 \verchemical=0 \edef\chemicalxoffset{0}% \edef\chemicalyoffset{0}% \ifnum\chemicaldrawingmode=1 % njet \else \setcoordinatesystem point at 0 0 \fi} \def\restorechemicalcoordinates {%\writestatus{ppchtex}{restoring \the\horchemical,\the\verchemical}% \edef\chemicalxoffset{\the\horchemical}% \edef\chemicalyoffset{\the\verchemical}% \ifnum\chemicaldrawingmode=1 % njet \else \setcoordinatesystem point at {\the\horchemical} {\the\verchemical} \fi} \def\setchemicaltranslate #1 #2 #3 {\setvalue{\s!translate#1}{\setchemicalcoordinates{#2}{#3}}} \def\processchemicaltranslate#1% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{MOV#1} {\ifnum##1=0 \def\chemicaloffset{0}% incompatible change \resetchemicalcoordinates \else \getvalue{\s!translate##1}% \dochemicaloffset{##1}% \def\chemicaloffset{0}% \fi}}% \doprocess[#1]} \def\setchemicaldistance #1 {\setvalue{\s!distance1}{\setchemicalcoordinates{-#1}{ 0}}% \setvalue{\s!distance2}{\setchemicalcoordinates{ 0}{ #1}}% \setvalue{\s!distance3}{\setchemicalcoordinates{ #1}{ 0}}% \setvalue{\s!distance4}{\setchemicalcoordinates{ 0}{-#1}}} \def\setchemicaldirection #1 {\def\chemicaldirection{#1}} \def\processchemicaldistance#1% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{ADJ#1} {\ifnum##1=0 \resetchemicalcoordinates \else \def\@@chemicalpostponed{\getvalue{\s!distance##1}}% \@@chemicalpostponed \fi}}% \doprocess[#1]} \def\setchemicalsubstitute #1 {\setvalue{\s!substitute1}{\setchemicalcoordinates{-#1}{ 0}}% \setvalue{\s!substitute2}{\setchemicalcoordinates{ 0}{ #1}}% \setvalue{\s!substitute3}{\setchemicalcoordinates{ #1}{ 0}}% \setvalue{\s!substitute4}{\setchemicalcoordinates{ 0}{-#1}}} \def\processchemicalsubstitute#1% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{SUB#1} {\ifnum##1=0 \resetchemicalcoordinates \else \def\@@chemicalpostponed{\getvalue{\s!substitute##1}}% \@@chemicalpostponed \fi}}% \doprocess[#1]} % Het is mogelijk een offset of move meerdere malen uit te % voeren, door een nummer voor het commando te plaatsen. \def\chemicalrepeat {1} \def\redoprocesschemical[#1#2]% {\doifinstringelse{#1}{0123456789.} {\edef\chemicalrepeat{\chemicalrepeat#1}% \redoprocesschemical[#2]} {\processchemical[#1#2]% \def\chemicalrepeat{1}}} \def\doprocesschemical[#1#2]#3% {\doifinstringelse{#1}{0123456789.} {\def\chemicalrepeat{#1}% \redoprocesschemical[#2]} {#3}} % \dochemicaloffset{#1} % % #1: binding \def\chemicaloffset{0} \def\processchemicaloffset#1% {\dimen0=62500 sp % real calc on cardinals, funny number \dimen0=\chemicalrepeat\dimen0 \divide\dimen0 by \@@localchemicalscale \!!counta=\dimen0 \def\doprocess[##1##2]% {\doifinstringelse{##1}{128} {\edef\chemicaloffset{\the\!!counta}} {\doifinstringelse{##1}{456} {\edef\chemicaloffset{-\the\!!counta}} {\doifelse{##1}{0} {\edef\chemicaloffset{0}} {\unknownchemical{OFF#1}}}}}% \doprocess[#1]} \def\dochemicaloffset#1% {\ifnum\chemicaloffset=0 \def\undochemicaloffset{}% \else \setchemicalcoordinates{-\chemicaloffset}{0}% \def\undochemicaloffset% {\setchemicalcoordinates{\chemicaloffset}{0}% \def\undochemicaloffset{}}% \fi} \def\processchemicalphantom#1#2% {\setbox0=\hbox {\def\splitoff##1????{##1}% $\@@dochemicalstyle{\@@localchemicalformat\splitoff#2}$}% \dimen0=.25\wd0 \divide\dimen0 by \@@localchemicalscale \!!counta=\dimen0 \doifinstringelse{#1}{128} {\edef\chemicaloffset{\the\!!counta}} {\doifinstringelse{#1}{456} {\edef\chemicaloffset{-\the\!!counta}} {\doifelse{#1}{0} {\edef\chemicaloffset{0}} {\unknownchemical{OF#1:#2}}}}} % \dosetchemicalrotation{#1}{#2} % % #1: cos(phi) % #2: sin(phi) \def\chemicalrotation {1} \def\chemicalangle {0} \def\chemicalxoffset {0} \def\chemicalyoffset {0} \def\setchemicalmirror#1% {\setvalue{\s!mirror#1}{*}} \def\resetchemicalmirror#1% {\resetvalue{\s!mirror#1}} \def\togglechemicalmirror#1% {\doifelse{\getvalue{\s!mirror#1}}{*} {\resetchemicalmirror{#1}} {\setchemicalmirror{#1}}} \def\setchemicalrotation #1 #2 #3 #4 #5 #6 #7 #8 #9 {\setvalue{\s!rotate1.#1}{\dosetchemicalrotation{#2}{#3}}% \setvalue{\s!rotate2.#1}{\dosetchemicalrotation{#4}{#5}}% \setvalue{\s!rotate3.#1}{\dosetchemicalrotation{#6}{#7}}% \setvalue{\s!rotate4.#1}{\dosetchemicalrotation{#8}{#9}}} \def\setchemicalangle #1 #2 #3 #4 #5 {\setvalue{\s!angle1.#1}{\dosetchemicalangle{#2}}% \setvalue{\s!angle2.#1}{\dosetchemicalangle{#3}}% \setvalue{\s!angle3.#1}{\dosetchemicalangle{#4}}% \setvalue{\s!angle4.#1}{\dosetchemicalangle{#5}}} \def\chemicalrotate[#1]% {\doifdefinedelse{\s!mirror#1} {\getvalue{\s!rotate\chemicalrotation.#1\getvalue{\s!mirror#1}}% \getvalue{\s!angle\chemicalrotation.#1\getvalue{\s!mirror#1}}} {\getvalue{\s!rotate\chemicalrotation.#1}% \getvalue{\s!angle\chemicalrotation.#1}}} \def\dosetchemicalangle#1% zwak zie onder {\def\chemicalangle{#1}} \def\dosetchemicalrotation#1#2% {\ifnum\chemicaldrawingmode=1 % njet \else \startrotation by {#1} {#2} %% \stoprotation (t.b.v. testen) \fi} \def\doresetchemicalrotation {\ifnum\chemicaldrawingmode=1 % njet \else \stoprotation \fi} \def\processchemicalrotation#1% {\def\doprocess[##1##2]% {\doifnumberelse{##1} {\def\chemicalrotation{##1}} {\unknownchemical{ROT#1}}}% \doprocess[#1]} % \filtertextelement[#1][#2][#3][#4] % % #1: volgnummer % #2: offset in uitlijningen % #3: lijst met uitlijningen -> \chemicalloca % #4: lijst met teksten -> \chemicaltext \def\setchemicallocation#1% {\doifelse{#1}{} {\edef\chemicalloca{c}} {\edef\chemicalloca{#1}}} \newif\iffixedchemicaltext \def\filterchemicaltextelement[#1][#2][#3][#4]% {\ifchemicaltextconstant \def\chemicaltext{#4}% \setchemicallocation{}% \else \ifnum#1=0\relax \setchemicallocation{}% \else \iffixedchemicaltext \!!counta#2 \else \!!counta=\chemicalrotation \advance\!!counta -1 \multiply\!!counta #2 \advance\!!counta #1 \fi \getfromcommalist[#3][\the\!!counta]% \setchemicallocation\commalistelement \fi \ifchemicalpicture \let\chemicaltext\relax \else \advance\txtchemical 1 \getfromcommalist[#4][\txtchemical]% \let\chemicaltext\commalistelement \fi \fi \fixedchemicaltextfalse} % \putchemicaltext{#1}{#2} % % #1 : x-coordinaat % #2 : y-coordinaat % % \chemicaltext en \chemicalloca worden met \gettextelement % opgehaald uit de tweede set bij \chemie % % Ten behoeve van testdoeleinden wordt gebruik gemaakt van % \chemicalframe in plaats van het meer sjieke, maar tevens % meer trage \framed. \ifx\ruledhbox\undefined \def\chemicalframe#1% {\hbox {\vrule\hskip-.4pt \vbox{\hrule\vskip-.4pt\hbox{#1}\vskip-.4pt\hrule}% \hskip-.4pt\vrule}} \else \def\chemicalframe#1% {\ruledhbox{#1}} \fi \def\doputchemicaltext#1 [#2] at #3 #4 % {\ifnum\chemicaldrawingmode=1 \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\expanded{\rput[#2]{\chemicalangle}(#3,#4){#1}}}% \else \put {#1} [#2] at {#3} {#4} % \fi} \def\dodoifsinglelocation#1#2\\#3% {\ifx#2\relax#3\fi} \def\doifsinglelocationelse#1% {\expandafter\dodoifsinglelocationelse#1\relax\\} \def\putchemicaltext#1#2% {\enablechemicalspecials \ifchemicalpicture \setchemicalpicture{#1}{#2}% \else \doifelse\@@chemicaloption\v!test {\def\@@chemicalframe{\chemicalframe}} {\def\@@chemicalframe{}}% \dosetsubscripts \setbox2=\hbox{\@@dochemicalcolor $\@@dochemicalstyle{\@@localchemicalformat \chemicaltext}$}% \setbox4=\hbox{$\@@dochemicalstyle{\@@localchemicalformat C_2^2}$}% \setbox6=\hbox{$\@@dochemicalstyle{\@@localchemicalformat O}$}% or C \doresetsubscripts \doifnot\@@chemicallocation\v!intext {\ht2=\ht4 \dp2=\dp4}% \setbox2=\hbox{\@@chemicalframe{\box2}}% \ifdim\wd2>\wd6 \doifelse{#1}{0} {\doifnot{#2}{0}{\wd2=\wd6}} {%\doifsinglelocation\chemicalloca {\doifinset{\chemicalloca}{t,b}{\wd2=\wd6}}}% common ? \fi \expanded {\doputchemicaltext {\noexpand\dowithchemical{\copy2}} % per se \copy2 i.p.v. \box2 [\chemicalloca] at {#1} {#2} } \nomoreaccounting \fi \disablechemicalspecials} \def\setchemicaltextelement #1 #2 #3 {\setvalue{\s!chemicaltextelement#1}{\putchemicaltext{#2}{#3}}} \def\getchemicalfixedtextelement% {\fixedchemicaltexttrue \getchemicaltextelement} \def\getchemicaltextelement[#1][#2][#3][#4][#5]% {\filterchemicaltextelement[#2][#3][#4][#5]% \doifelse{#2}{0} {\dochemicaloffset{#2}% % incompatible change \putchemicaltext{0}{0}% \undochemicaloffset} % incompatible change {\chemicalrotate[#2]% \dochemicaloffset{#2}% \def\chemicaltextelementnumber{#2}% \getvalue{\s!chemicaltextelement#1}% \getvalue{\s!chemicaltextelement#11}% \getvalue{\s!chemicaltextelement#12}% \getvalue{\s!chemicaltextelement#13}% \undochemicaloffset}} \def\processchemicaltextelement#1#2#3#4#5% {\def\doprocess[##1##2##3##4##5]% {\doifelse{##1}{?} {\doprocess[1..\maxchemical ????]} {\doifchemicalnumber{##1}{#1#2} {\doifelse{##2##3}{..} {\doifchemicalnumber{##4}{#1#2} {\getchemicaltextelement[#1][##1][#4][#5][#3]% \doifnot{##1}{##4} {\!!counta=##1\relax \advance\!!counta by 1 \edef\nextsegment{\the\!!counta}% \doprocess[\nextsegment..##4##5]}}} {\getchemicaltextelement[#1][##1][#4][#5][#3]% \doifnot{##2}{?}{\doprocess[##2##3##4##5]}}}}}% \doprocess[#2]% \smallchemicaltextfalse} \def\processchemicalsmalltextelement% {\smallchemicaltexttrue\processchemicaltextelement} \def\processchemicalsmalltextconstant% {\smallchemicaltexttrue\processchemicaltextconstant} \def\processchemicalunrotatedtextelement#1#2#3#4#5#6% {\bgroup \xdef\@@xxx{0}% \xdef\@@yyy{0}% \def\putchemicaltext##1##2% {\xdef\@@xxx{##1}% \xdef\@@yyy{##2}}% \getvalue{\s!chemicaltextelement#1}% \egroup \bgroup \def\doputchemicaltext##1 [##2] at ##3 ##4 % {\ifnum\chemicaldrawingmode=1 \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\rput{\chemicalangle}(\@@xxx,\@@yyy){\expanded{\rput[##2](##3,##4){##1}}}}% \else \put {\stoprotation \setcoordinatesystem point at 0 0 \expanded{\put {##1} [##2] at {##3} {##4} }} at {\@@xxx} {\@@yyy} \fi}% \processchemicaltextelement{#2}{#3}{#4}{#5}{#6}% \egroup} \newif\ifchemicaltextconstant \def\processchemicaltextconstant#1#2#3#4% {\chemicaltextconstanttrue \let\@@oldchemicalframe\@@chemicalframe \let\@@chemicalframe\relax \processchemicaltextelement{#1}{#2}{#3}{#4}{}% \let\@@chemicalframe\@@oldchemicalframe \chemicaltextconstantfalse} % \plotchemicalline{#1}{#2}{#3}{#4} % % #1: x-coordinaat beginpunt % #2: y-coordinaat beginpunt % #3: x-coordinaat eindpunt % #4: y-coordinaat eindpunt \chardef\chemicallinetype=0 \def\doplotchemicalline {\!!counte=\!!countc \advance\!!counte by -\!!counta \!!countf=\!!countd \advance\!!countf by -\!!countb \bgroup \ifcase\chemicaldrawingmode \ifcase\chemicallinetype % 0 : normal line \plot {\!!counta} {\!!countb} {\!!countc} {\!!countd} /% \or % 1 : normal arrow \arrow <5pt> [.2,.67] from {\!!counta} {\!!countb} to {\!!countc} {\!!countd} \or % 2 : reverse arrow \arrow <5pt> [.2,.67] from {\!!countc} {\!!countd} to {\!!counta} {\!!countb} \or % 3 : unrotated line \put {\stoprotation \setcoordinatesystem point at 0 0 \plot 0 0 {\!!counte} {\!!countf} /} [\chemicallineposition] at {\!!counta} {\!!countb} \else % 4 : dashed line \findlength {\plot {\!!counta} {\!!countb} {\!!countc} {\!!countd} /}% \setdashesnear <2pt> for <\totalarclength>% \plot {\!!counta} {\!!countb} {\!!countc} {\!!countd} /% \fi \or \ifcase\chemicallinetype \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline(\!!counta,\!!countb)(\!!countc,\!!countd)}% \or \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline{->}(\!!counta,\!!countb)(\!!countc,\!!countd)}% \or \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline{<-}(\!!counta,\!!countb)(\!!countc,\!!countd)}% \or \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\expanded{\rput[\chemicallineposition]{-\chemicalangle}% (\!!counta,\!!countb){\psline(0,0)(\!!counte,\!!countf)}}}% \else \psset{linestyle=dashed}% \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline(\!!counta,\!!countb)(\!!countc,\!!countd)}% \fi \or \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; x3 := \MPdivten[\the\!!counte]u ; y3 := \MPdivten[\the\!!countf]u ; \ifcase\chemicallinetype % 0 : normal line draw ((z1--z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \or % 1 : normal arrow drawarrow ((z1--z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \or % 2 : reverse arrow drawarrow ((z2--z1) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \or % 3 : unrotated line % nog \chemicalineposition: t/b draw (origin--z3) shifted (z1 rotatedaround(origin,-\chemicalangle)) shifted z0 ; \else % 4 : dashed line draw ((z1--z2) rotatedaround(origin,-\chemicalangle)) % shifted z0 dashed evenly ; shifted z0 dashed dashpattern(on 5.5u off 6u) ; \fi \stopMPdrawing \fi \egroup \account\!!counta\!!countb \account\!!countc\!!countd} \def\plotchemicalline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \doplotchemicalline} \def\plotchemicalfactorline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifdim\@@chemicalfactor\onepoint=\onepoint \else \scratchdimen\!!counta\s!sp \multiply\scratchdimen1000 \scratchdimen\@@chemicalfactor\scratchdimen \divide\scratchdimen1000 \!!counta\scratchdimen \scratchdimen\!!countc\s!sp \multiply\scratchdimen1000 \scratchdimen\@@chemicalfactor\scratchdimen \divide\scratchdimen1000 \!!countc\scratchdimen \fi \doplotchemicalline} \def\plotchemicalzline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; filldraw (( \ifnum\chemicalangle>180 z1--z2 \else\ifnum\chemicalangle<90 z1--(z2 shifted (-2u,+2u))--(z2 shifted (+2u,-2u)) \else\ifnum\chemicalangle=90 (z1 shifted (-2u,+2u))--(z1 shifted (+2u,-2u))-- (z2 shifted (+2u,+2u))--(z2 shifted (-2u,-2u)) \else (z1 shifted (+2u,+2u))--(z1 shifted (-2u,-2u))--z2 \fi\fi\fi --cycle) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \else \doplotchemicalline \ifnum\chemicalangle>180 \else \ifnum\chemicalangle=90 \advance\!!counta by -20 \advance\!!countc by -20 \doplotchemicalline \advance\!!counta by 40 \advance\!!countc by 40 \else\ifnum\chemicalangle<90 \advance\!!countc by -20 \advance\!!countd by +20 \doplotchemicalline \advance\!!countc by +40 \advance\!!countd by -40 \else \advance\!!counta by 20 \advance\!!countb by 20 \doplotchemicalline \advance\!!counta by -40 \advance\!!countb by -40 \fi\fi \fi \doplotchemicalline \fi} \def\plotchemicaldeltaline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; filldraw ((z1--(z2 rotatedaround(z1,5))--(z2 rotatedaround(z1,-5)) --cycle) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \account{#1}{#2}% \account{#3}{#4}% \else \doplotchemicalline \advance\!!countc by 16 \advance\!!countd by -21 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -8 \advance\!!countd by 14 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \fi} \def\setchemicallinesegment #1 #2 #3 #4 #5 {\setvalue{\s!chemicallinesegment#1}{\plotchemicalline{#2}{#3}{#4}{#5}}} \def\setchemicalfactorlinesegment #1 #2 #3 #4 #5 {\setvalue{\s!chemicallinesegment#1}{\plotchemicalfactorline{#2}{#3}{#4}{#5}}} \def\getchemicallinesegment[#1][#2]% {\chemicalrotate[#1]% \dochemicaloffset{#1}% \getvalue{\s!chemicallinesegment#2}% \getvalue{\s!chemicallinesegment#21}% \getvalue{\s!chemicallinesegment#22}% \undochemicaloffset} \def\getprivatechemicallinesegment[#1][#2]% {\chemicalrotate[#1]% \getvalue{\s!chemicallinesegment#2#1}} \def\doprocesschemicallinesegment#1#2#3#4#5% {\chardef\chemicallinetype=#1 \def\chemicallineposition{#2}% \def\doprocess[##1##2##3##4##5]% {\doifelse{##1}{?} {\doprocess[1..\maxchemical ????]} {\doifchemicalnumber{##1}{#4#5} {\doifelse{##2##3}{..} {\doifchemicalnumber{##4}{#4#5} {#3[##1][#4]% \doifnot{##1}{##4} {\!!counta=##1\relax \advance\!!counta by 1 \edef\nextsegment{\the\!!counta}% \doprocess[\nextsegment..##4##5]}}} {#3[##1][#4]% \doifnot{##2}{?} {\doprocess[##2##3##4##5]}}}}}% \doprocess[#5]} \def\processchemicallinesegment {\doprocesschemicallinesegment0c\getchemicallinesegment} \def\processchemicalzlinesegment#1#2% {%\doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \bgroup \def\plotchemicalline{\plotchemicalzline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processchemicaldeltalinesegment#1#2% {%\doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \bgroup \def\plotchemicalline{\plotchemicaldeltaline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processprivatechemicallinesegment% {\doprocesschemicallinesegment0c\getprivatechemicallinesegment} \def\processchemicaldownarrowsegment% {\doprocesschemicallinesegment1c\getchemicallinesegment} \def\processchemicaluparrowsegment% {\doprocesschemicallinesegment2c\getchemicallinesegment} \def\processchemicalunrotatedlinesegment#1% {\doprocesschemicallinesegment3{#1}\getchemicallinesegment} \def\processchemicaldashedlinesegment {\doprocesschemicallinesegment4c\getchemicallinesegment} \def\plotchemicaldasheddeltaline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; z20 = z2 rotatedaround(z1,+5) ; z21 = z2 rotatedaround(z1,-5) ; draw (z1 rotatedaround(origin,-\chemicalangle)) shifted z0 ; save n ; n := 5 ; for i=1 upto n : draw ((((z20--z21) shifted -z2) shifted (i/n)[z2,z1]) rotatedaround(origin,-\chemicalangle)) shifted z0 ; endfor \stopMPdrawing \account{#1}{#2}% \account{#3}{#4}% \else \doplotchemicalline \advance\!!countc by 16 \advance\!!countd by -21 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -8 \advance\!!countd by 14 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \fi} \def\plotchemicalwavyline#1#2#3#4% {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \ifnum\chemicaldrawingmode=2 \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; save d ; pair d ; d := z2 rotatedaround(z1,+5) shifted -z2 ; save n ; n := 4 ; draw ((for i=0 upto n-1 : ((i)/n)[z1,z2] .. ((i+.25)/n)[z1,z2] shifted d .. ((i+.50)/n)[z1,z2] .. ((i+.75)/n)[z1,z2] shifted -d .. endfor z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \account{#1}{#2}% \account{#3}{#4}% \else \doplotchemicalline \advance\!!countc by 16 \advance\!!countd by -21 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -8 \advance\!!countd by 14 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \advance\!!countc by -4 \advance\!!countd by 7 \doplotchemicalline \fi} \def\processchemicaldasheddeltalinesegment#1#2% {\bgroup \def\plotchemicalline{\plotchemicaldasheddeltaline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processchemicalwavylinesegment#1#2% {\bgroup \def\plotchemicalline{\plotchemicalwavyline}% \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}% \egroup} \def\processchemicalopenend#1#2% {\doprocesschemicallinesegment0c\doprocesschemicalopenend{#1}{#2}} \def\doprocesschemicalopenend[#1][#2]% {\chemicalrotate[#1]% \dochemicaloffset{#1}% \ifcase\chemicaldrawingmode \beginpicture \setquadratic\plot 300 0 400 0 500 0 550 75 600 0 650 -75 700 0 750 75 800 0 850 -75 900 0 950 0 1050 0 / \endpicture \or \rput{-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psline(300,0)(500,0)% \rput(500,0){\psplot[yunit=75,plotstyle=curve]{0}{720}{x sin}}% \psline(950,0)(1050,0)}% \or \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; draw (((30.0u,0)--(50.0u,0){up}..(55.0u,7.5u).. (60.0u,0)..(65.0u,-7.5u)..(70.0u,0).. (75.0u,7.5u)..(80.0u,0)..(85.0u,-7.5u)..{up} (90.0u,0)--(105.0u,0)) rotatedaround(origin,-\chemicalangle)) shifted z0 ; \stopMPdrawing \fi \undochemicaloffset} % \plotchemicalcircle{#1}{#2}{#3}{#4} % % #1: lengte van de boog in graden % #2: x-coordinaat eindpunt % #3: y-coordinaat eindpunt \newif\ifchemicaldotted \def\plotchemicalcircle#1#2#3#4#5#6% {\bgroup \ifcase\chemicaldrawingmode \ifchemicaldotted \findlength{\circulararc {#4} degrees from {#5} {#6} center at {0} {0} }% \divide\totalarclength by 6 \def\b{\the\totalarclength}% \divide\totalarclength by 2 \def\a{\the\totalarclength}% \setdashpattern <\a,\b,\b,\b,\b,\b,\a> \fi \circulararc {#4} degrees from {#5} {#6} center at {0} {0} % \or \ifchemicaldotted \psset{linestyle=dashed}% \fi \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\psarc(0,0){#3}{#1}{#2}}% \or \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing r := \MPdivten[#3]*2u; x0 := \MPdivten[\chemicalxoffset]u ; y0 := \MPdivten[\chemicalyoffset]u ; draw ((subpath (#1/45,#2/45) of (fullcircle scaled (r))) rotatedaround (origin,\chemicalangle+150)) shifted z0 \ifchemicaldotted dashed withdots \fi ; \stopMPdrawing \fi \egroup} \def\setchemicalcircsegment #1 #2 #3 #4 #5 #6 #7 {\setvalue{\s!chemicalcircsegment#1}{\plotchemicalcircle{#2}{#3}{#4}{#5}{#6}{#7}}} \def\getchemicalcircsegment[#1][#2]% {\chemicalrotate[#1]% \getvalue{\s!chemicalcircsegment#2}} \def\doprocesschemicalcircsegment#1#2% {\def\doprocess[##1##2##3##4##5]% {\doifelse{##1}{?} {\doprocess[1..\maxchemical ????]} {\doifchemicalnumber{##1}{#1#2} {\doifelse{##2##3}{..} {\doifchemicalnumber{##4}{#1#2} {\getchemicalcircsegment[##1][#1]% \doifnot{##1}{##4} {\!!counta=##1\relax \advance\!!counta by 1 \edef\nextsegment{\the\!!counta}% \doprocess[\nextsegment..##4##5]}}} {\getchemicalcircsegment[##1][#1]% \doifnot{##2}{?} {\doprocess[##2##3##4##5]}}}}}% \doprocess[#2]} \def\processchemicalcircsegment% {\chemicaldottedfalse\doprocesschemicalcircsegment} \def\processchemicaldottsegment% {\chemicaldottedtrue\doprocesschemicalcircsegment} \let\endchemicalpicture = \relax \let\checkchemicalpicture = \relax \let\nomoreaccounting = \relax \newif\ifchemicalpicture \def\beginchemicalpicture#1% NO PSTRICKS SUPPORT YET {\checkchemicalpicture \bgroup % DOES NOT HANDLE AUTOWIDTH/HEIGHT \chemicalpicturetrue \processchemical[#1]} \def\setchemicalpicture#1#2% {\chemicalpicturefalse \def\endchemicalpicture% {\@@endchemicallocalpicture{#1}{#2}% \egroup \ifnum\chemicaldrawingmode=1 \rput {-\chemicalangle}(\chemicalxoffset,\chemicalyoffset)% {\expanded{\rput[\chemicalloca]{\chemicalangle}(#1,#2){\box\nextbox}}}% \else \expanded{\put{\box\nextbox}[\chemicalloca] at {#1} {#2} } \fi \egroup}% \def\checkchemicalpicture% {\ifx\endchemicalpicture\relax \else \writestatus{ppchtex}{missing end of picture (PE)}% \endchemicalpicture \fi}% \setbox\nextbox=\hbox\bgroup \@@beginchemicallocalpicture % alternatief: gewoon accounting, en zelf l,r afhandelen \ifnum\chemicaldrawingmode=1 % njet \else \accountingon \let\nomoreaccounting=\accountingoff \fi} \def\doskipchemical[#1][#2]% {{\tt[ppchtex]}} \def\skipchemical% {\dodoubleargument\doskipchemical} \def\complexchemical% met \expandafter {\ifinchemical \expandafter\dochemical \else \writestatus{ppchtex}{the [][]-alternative is not permitted here}% \expandafter\skipchemical \fi} \newif\ifinnerchemical \def\dosimplechemical#1#2#3% {\doifdefinedelse{\??chemical\c!location} {\writestatus{ppchtex}{the {}{}-alternative is not permitted here}} {\ifinnerchemical \let\chemicalsign = \chemicalinnersign \let\chemicalmolecule = \chemicalinnermolecule \let\chemicalsinglearrow = \chemicalsingleinnerarrow \let\chemicaldoublearrow = \chemicaldoubleinnerarrow \let\chemicaltwintiparrow = \chemicaltwintipinnerarrow \else \let\chemicalsign = \chemicaloutersign \let\chemicalmolecule = \chemicaloutermolecule \let\chemicalsinglearrow = \chemicalsingleouterarrow \let\chemicaldoublearrow = \chemicaldoubleouterarrow \let\chemicaltwintiparrow = \chemicaltwintipouterarrow \fi \disablechemicalspecials \unexpandedprocessallactionsinset [#1] [ HIGH=>\sethighsubscripts, LOW=>\setlowsubscripts, PLUS=>\chemicalsign{+}, GIVES=>\chemicalsinglearrow{#2}{#3}, EQUILIBRIUM=>\chemicaldoublearrow{#2}{#3}, MESOMERIC=>\chemicaltwintiparrow{#2}{#3}, SINGLE=>\singlechemicalbond, DOUBLE=>\doublechemicalbond, TRIPLE=>\triplechemicalbond, +=>\chemicalsign{+}, ->=>\chemicalsinglearrow{#2}{#3}, <->=>\chemicaldoublearrow{#2}{#3}, <>=>\chemicaltwintiparrow{#2}{#3}, -=>\singlechemicalbond, --=>\doublechemicalbond, ---=>\triplechemicalbond, \s!unknown=>\enablechemicalspecials \chemicalmolecule{\commalistelement}{#2}{#3}]}} %\def\dosimplechemicalA#1#2#3% % {\let\chemicalspace=\relax % \def\dodosimplechemical##1% % {\dosimplechemical{##1}{}{}}% % \@EA\processcommalist\@EA[\@@chemicalchemicaloffset,#1]\dodosimplechemical % \egroup} \def\dosimplechemicalA#1#2#3% % evt: {#1,\relax} {\let\chemicalspace=\relax \@EA\dosimplechemical\@EA{\@@chemicalchemicaloffset,#1}{#2}{#3}% \egroup} \def\dosimplechemicalB#1#2#3% {\dosimplechemical{#1}{#2}{#3}% \egroup} \def\dosimplechemicalC#1#2#3% {$\simplechemical{#1}{#2}{#3}$% \egroup} % erbij \def\simplechemical {\ifinner \innerchemicaltrue \else \innerchemicalfalse \fi \bgroup \catcode`\^=\@@superscript % t.b.v. \enableduplication \catcode`\_=\@@subscript % t.b.v. de zekerheid \ifmmode \ifinnerchemical \def\next{\dotriplegroupempty\dosimplechemicalA}% \else \def\next{\dotriplegroupempty\dosimplechemicalB}% \fi \else \def\next{\dotriplegroupempty\dosimplechemicalC}% \fi \next} \definecomplexorsimple\chemical \def\dogotochemical#1#2% {\def\dowithchemical% % experiment {\localgotochemical{#1}}% % experiment \chemical} % experiment \def\gotochemical% % experiment {\dosingleargument\dogotochemical} % experiment \def\dododochemical#1[#2][#3]% % experiment {\def\simpledododochemical% % experiment {#1[#2][#3]}% % experiment \def\complexdododochemical[##1]% % experiment {\def\dowithchemical% % experiment {\localthisischemical{#2}}% % experiment #1[#3][##1]}% % experiment \complexorsimple\dododochemical} % experiment \def\dodochemical[#1][#2]% {\ignorespaces \ifinchemical \drawchemical[#1][#2]% \ignorespaces \else \startchemical[\c!location=\v!intext]% \drawchemical[#1][#2]% \expandafter\stopchemical \fi \ignorespaces} \def\dochemical[#1]% {\def\simpledochemical% {\@@writechemicalstate{ppchtex}{[#1][]}% \dodochemical[#1][]}% % \def\complexdochemical[##1]% {\@@writechemicalstate{ppchtex}{[#1][##1]}% \txtchemical=0% \dodochemical[#1][##1]}% % \def\complexdochemical[##1]% % experiment {\@@writechemicalstate{ppchtex}{[#1][##1]}% % experiment \txtchemical=0% % experiment \dododochemical\dodochemical[#1][##1]}% % experiment % \complexorsimple\dochemical} % \processlocalchemicals{#1} % % #1: commando's \def\dodoprocesschemical#1% {\processchemical[#1????]} \def\processlocalchemicals#1% {\processcommalist[#1]\dodoprocesschemical} % \drawchemical[#1][#2] % % #1: bindingen enz. % #2: atomen enz. \def\localdodochemical[#1][#2]% {\@@writechemicalstate{ppchtex}{[#1][#2]}% %\bgroup % koppelen en afmetingen gaat fout, vandaar: \advance\levchemical 1 \letvalue{\??chemical\s!unknown\the\levchemical}\unknownchemical \setevalue{\??chemical\c!text\the\levchemical}{\the\txtchemical}% \txtchemical=0 \dodochemical[#1][#2]% % \@EA\txtchemical\@EA\csname\??chemical\c!text\the\levchemical\endcsname \txtchemical\csname\??chemical\c!text\the\levchemical\endcsname \@EA\let\@EA\unknownchemical\csname\??chemical\s!unknown\the\levchemical\endcsname \advance\levchemical -1 %\egroup \ignorespaces} \def\drawchemical[#1][#2]% {\ignorespaces \def\dodochemical[##1][##2]% {\drawchemical[##1][##2]% \ignorespaces}% \def\dochemical[##1]% {\def\simpledochemical% {\@@writechemicalstate{ppchtex}{[##1][#2]}% \dodochemical[##1][#2]% \ignorespaces}% \def\complexdochemical[####1]% {\dododochemical\localdodochemical[##1][####1,#2]}% \complexorsimple\dochemical}% \doif\@@chemicalstate\v!start {\doifelse\chemicalname\s!unknown {\getvalue{\s!executechemical\defaultchemical}[#2]} {\getvalue{\s!executechemical\chemicalname}[#2]}% \def\unknownchemical##1% {\processunknownchemical[##1][#2]}% \processcommalist[\@@chemicaloffset,#1]\dodoprocesschemical}% \ignorespaces} \unexpanded\def\chemicaloxidation#1#2#3% {\chemicaltop {\ifnum#20=0 0% \else #1\expandafter\uppercase\expandafter{\romannumeral#2}% \fi} {#3}} \def\chemicaltfraction{\ifinchemical.60\else.8\fi} \def\chemicalbfraction{\ifinchemical.45\else.6\fi} \def\chemicallfraction{\ifinchemical.1\else.1\fi} \def\chemicalrfraction{\ifinchemical.1\else.1\fi} \def\chemicaltighttext {\def\chemicaltfraction{\ifinchemical.3\else.6\fi}% \def\chemicalbfraction{\ifinchemical.2\else.4\fi}% \def\chemicallfraction{\ifinchemical 0\else 0\fi}% \def\chemicalrfraction{\ifinchemical 0\else 0\fi}} \def\dochemicaltop#1#2#3#4% {\vbox {\@@dochemicalcolor \baselineskip=\chemicaltfraction\baselineskip \lineskip0pt \halign {#1###2\cr $\@@dochemicalstyle{\scriptscriptstyle#3}$\cr $\@@dochemicalstyle{\@@currentchemicalformat#4}$\cr}}} \def\dochemicalbottom#1#2#3#4% {\vtop {\@@dochemicalcolor \baselineskip=\chemicalbfraction\baselineskip \lineskip0pt \halign {#1###2\cr $\@@dochemicalstyle{\@@currentchemicalformat#4}$\cr $\@@dochemicalstyle{\scriptscriptstyle#3}$\cr}}} \def\chemicalleft#1#2% {\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\scriptscriptstyle#1}$% $\@@dochemicalstyle{\@@currentchemicalformat\hskip\chemicallfraction em#2}$}} \def\chemicalright#1#2% {\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\@@currentchemicalformat#2\hskip\chemicalrfraction em}$% $\@@dochemicalstyle{\scriptscriptstyle#1}$}} \def\chemicalcentered#1% {\setbox0=\hbox{$\@@dochemicalstyle{\scriptscriptstyle#1}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \dimen0=.5\ht2 \advance\dimen0 by -.5\ht0 \advance\dimen0 by \dp0 \hbox{\@@dochemicalcolor\raise\dimen0\box0}} \def\chemicalleftcentered#1#2% {\hbox {\@@dochemicalcolor \chemicalcentered{#1}% $\@@dochemicalstyle{\@@currentchemicalformat\hskip\chemicallfraction em#2}$}} \def\chemicalrightcentered#1#2% {\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\@@currentchemicalformat#2\hskip\chemicalrfraction em}$% \chemicalcentered{#1}}} \def\chemicaltop {\dochemicaltop \hss \hss } \def\chemicallefttop {\dochemicaltop \relax \hss } \def\chemicalrighttop {\dochemicaltop \hss \relax} \def\chemicalbottom {\dochemicalbottom \hss \hss } \def\chemicalleftbottom {\dochemicalbottom \relax \hss } \def\chemicalrightbottom {\dochemicalbottom \hss \relax} \def\chemicaltopleft #1{\chemicalleft {\chemicallefttop {#1}{}}} \def\chemicalbottomleft #1{\chemicalleft {\chemicalleftbottom{#1}{}}} \def\chemicaltopright #1{\chemicalright{\chemicallefttop {#1}{}}} \def\chemicalbottomright#1{\chemicalright{\chemicalleftbottom{#1}{}}} \def\chemicalsmashedleft#1% {\hbox\bgroup \@@dochemicalcolor \setbox0=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat#1}$}% \wd2=\wd0 \box2 \egroup} \def\chemicalsmashedmiddle#1% {\hbox\bgroup \@@dochemicalcolor \setbox0=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat#1}$}% \hbox{\hskip-.5\wd2\hskip.5\wd0\box2} \egroup} \def\chemicalsmashedright#1% {\hbox\bgroup \@@dochemicalcolor \setbox0=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat C}$}% \setbox2=\hbox{$\@@dochemicalstyle{\@@currentchemicalformat#1}$}% \hbox to \wd0{\hskip-\wd2\hskip\wd0\box2}% \egroup} \def\+{\tabalign} % is \long in Plain \def\chemicalforever#1#2% {\bgroup \setbox0=\hbox {\@@dochemicalcolor $\@@dochemicalstyle{\scriptscriptstyle\hskip-.15em#2}$}% \wd0=0pt \big#1_{\hskip.1em\box0}% \egroup} \def\disablechemicalspecials% {\def\+##1{##1}\def\-##1{##1}% \def\[{[}\def\]{]}% \def\1{}\def\2{}\def\3{}\def\4{}\def\5{}\def\6{}\def\7{}% \def\X{}% \def\T{}\def\B{}\def\L{}\def\R{}\def\LC{}\def\RC{}% \def\TL{}\def\BL{}\def\TR{}\def\BR{}% \def\LT{}\def\LB{}\def\RT{}\def\RB{}% \def\SL{}\def\SM{}\def\SR{}} \def\enablechemicalspecials% {\def\+{\dodoublegroupempty\chemicaloxidation{+}}% {} needed! \def\-{\dodoublegroupempty\chemicaloxidation{-}}% {} needed! \def\[{\dodoublegroupempty\chemicalforever {[}}% {} needed! \def\]{\dodoublegroupempty\chemicalforever {]}}% {} needed! \def\1{\chemicaloxidation\relax1}% \def\2{\chemicaloxidation\relax2}% \def\3{\chemicaloxidation\relax3}% \def\4{\chemicaloxidation\relax4}% \def\5{\chemicaloxidation\relax5}% \def\6{\chemicaloxidation\relax6}% \def\7{\chemicaloxidation\relax7}% \def\X{\chemicaltighttext}% \def\T{\chemicaltop}% \def\B{\chemicalbottom}% \def\L{\chemicalleft}% \def\LC{\chemicalleftcentered}% \def\R{\chemicalright}% \def\RC{\chemicalrightcentered}% \def\TL{\chemicaltopleft}% \def\BL{\chemicalbottomleft}% \def\TR{\chemicaltopright}% \def\BR{\chemicalbottomright}% \def\LT{\chemicallefttop}% \def\LB{\chemicalleftbottom}% \def\RT{\chemicalrighttop}% \def\RB{\chemicalrightbottom}% \def\SL{\chemicalsmashedleft}% \def\SM{\chemicalsmashedmiddle}% \def\SR{\chemicalsmashedright}% } % \reversechemical#1#2#3 % % #1: prefix % #2: volgnummer enz % #3: tegengestelde volgnummers \def\reversechemical#1#2#3% {\def\doprocess[##1##2]% {\doifchemicalnumber{##1}{#1#2}% {\getfromcommalist[#3][##1]% \let\reversechemicalaction=\commalistelement \processchemical[#1\reversechemicalaction##2]}}% \doprocess[#2]} % \processunknownchemical[#1????][#2] % % #1: bindingen enz. % #2: atomen enz. \def\defaultchemical% {SIX} \def\processunknownchemical[#1????][#2]% {\processaction [#1] [ SAVE=>\executechemicalSAVE, RESTORE=>\executechemicalRESTORE, HIGH=>\sethighsubscripts, LOW=>\setlowsubscripts, \s!default=>, \s!unknown=>\doifdefinedelse{\s!executechemical#1} {\def\chemicalrotation{1}% \def\chemicaloffset{0}% \doifdefined{\s!executechemical#1} {\getvalue{\s!executechemical#1}[#2]}% \@@chemicalpostponed} {\getpredefinedchemical{#1}}]} \newcount\chemicalstack % tzt \newwounter \setvalue{\s!chemical\c!x1}{0} \setvalue{\s!chemical\c!y1}{0} \def\executechemicalSAVE {%\writestatus{ppchtex}{saving \the\horchemical,\the\verchemical}% \advance\chemicalstack by 1 \letvalue {\s!chemical n\the\chemicalstack}=\chemicalname %\letvalue {\s!chemical p\the\chemicalstack}=\@@chemicalpostponed \setevalue{\s!chemical x\the\chemicalstack}{\the\horchemical}% \setevalue{\s!chemical y\the\chemicalstack}{\the\verchemical}} \def\restorechemicalvalues#1% {\let\oldprocesschemical=\processchemical \doifdefined{\s!executechemical#1}{\getvalue{\s!executechemical#1}[]}% \let\processchemical=\oldprocesschemical} \def\executechemicalRESTORE {\ifnum\chemicalstack=0\relax \horchemical=\getvalue{\s!chemical x1}\relax \verchemical=\getvalue{\s!chemical y1}\relax \else \restorechemicalvalues{\getvalue{\s!chemical n\the\chemicalstack}}% %\@EA\let\@EA\@@chemicalpostponed\@EA=\csname\s!chemical p\the\chemicalstack\endcsname \let\@@chemicalpostponed=\relax \horchemical=\getvalue{\s!chemical x\the\chemicalstack}\relax \verchemical=\getvalue{\s!chemical y\the\chemicalstack}\relax \advance\chemicalstack by -1 \fi \restorechemicalcoordinates} % De onderstaande macro's zijn verantwoordelijk voor het zetten % van de + en pijlen. De +, en dus ook de pijlen, worden omhoog % gehaald. Dit oogt m.i. fraaier. \def\chemicalinnerclip#1% {{\setbox0=\hbox{#1}\ht0\ht\strutbox\dp0\dp\strutbox\box0}} \def\chemicalraise#1#2% {\chemicalinnerclip {\setbox0=\hbox{$#1+$}% \raise\dp0\hbox{$#1#2$}}} \def\chemicalinnersign#1% todo: \@@chemicaltextcolor {\chemicalraise{\@@localchemicalstyle}{#1}} \def\chemicaloutersign#1% {\chemicalraise{}{\@@dochemicalcolor#1}} \def\chemicalsingleinnerarrow#1#2% {\chemicalraise{\@@localchemicalstyle}{\longrightarrow}} \def\chemicaldoubleinnerarrow#1#2% todo: \@@chemicaltextcolor {\chemicalinnerclip {\lower.2ex\hbox {\setbox0=\hbox{$\@@localchemicalstyle\longrightarrow$}% \setbox2=\hbox{$\@@localchemicalstyle\longleftarrow$}% \wd0=0pt\raise\ht0\box0\box2}}} \def\chemicaltwintipinnerarrow#1#2% todo: \@@chemicaltextcolor {\chemicalinnerclip {\setbox0=\hbox{\chemicalraise{\@@localchemicalstyle}{\longrightarrow}}% \setbox2=\hbox{\chemicalraise{\@@localchemicalstyle}{\longleftarrow}}% \wd0=0pt\box0\box2}} \def\dochemicalouterarrow#1#2#3% {\bgroup \setbox0=\hbox{$\longrightarrow$}% \setbox2=\hbox{$\@@dochemicalstyle{\scriptstyle\quad#2\quad}$}% \setbox4=\hbox{$\@@dochemicalstyle{\scriptstyle\quad#3\quad}$}% \dimen2=\wd0 % \dimen0 is used elsewhere \ifdim\wd2>\dimen2 \dimen0=\wd2 \fi \ifdim\wd4>\dimen2 \dimen0=\wd4 \fi \chemicaloutermolecule {#1} {\ifdim\ht2>\!!zeropoint\box2\fi} % expands to \empty in test {\ifdim\ht4>\!!zeropoint\box4\fi}% % expands to \empty in test \egroup} \def\chemicalsingleouterarrow {\dochemicalouterarrow {\hbox to \dimen2{\rightarrowfill}}} \def\chemicaldoubleouterarrow {\dochemicalouterarrow {\lower.5\ht0\vbox {\offinterlineskip \hbox to \dimen2{\rightarrowfill} \hbox to \dimen2{\leftarrowfill}}}} \def\chemicaltwintipouterarrow {\dochemicalouterarrow {\hbox {\hbox to \dimen2{\rightarrowfill}% \hskip-\dimen2 \hbox to \dimen2{\leftarrowfill}}}} \def\chemicalinnermolecule#1#2#3% no mathop here, can generate space {\chemicalspace % todo: \@@chemicaltextcolor \chemicalinnerclip {\dosetsubscripts $\@@dochemicalstyle{\@@localchemicalstyle\strut#1}$% \doresetsubscripts}% \chemicalspace} \def\chemicaloutermolecule#1#2#3% {\chemicalspace \bgroup \@@dochemicalcolor \setbox0=\hbox % else the font is reset {\dosetsubscripts \hbox{$\@@dochemicalstyle{\strut#1}$}% \doresetsubscripts}% \mathop{\box0}% \ifthirdargument \doifnot{#2}{} {^{\@@dochemicalstyle{\strut#2}}}% \doifnot{#3}{} {_{\@@dochemicalstyle{\strut#3}}}% \else \doifnot{#2}{} {_{\@@dochemicalstyle{\strut#2}}}% \fi \egroup \chemicalspace} \def\chemicalsinglepicturearrow#1% {\lower.5ex\hbox {\@@dochemicalstyle $\chemicalspace \buildrel \@@dochemicalstyle{\scriptstyle\quad#1\quad}% \over{\overrightarrow {\hphantom{\@chemicalstyle{\scriptstyle\quad#1\quad}}}}% \chemicalspace$}} \def\chemicaldoublepicturearrow#1% {\lower.5ex\hbox {\@@dochemicalstyle $\chemicalspace \buildrel \@@dochemicalstyle{\scriptstyle\quad#1\quad}% \over{\overrightarrow{\overleftarrow {\hphantom{\@@dochemicalstyle{\scriptstyle\quad#1\quad}}}}}% \chemicalspace$}} % Bij de in-line bindingen wordt gebruik gemaakt van % een \hrule. De maatvoering wordt bepaald door een % kunstmatige em (\wd0). \def\somechemicalbond% {\hrule width \wd0 height .4pt} \def\dochemicalbonds#1#2#3% todo: \@@chemicaltextstyle {{\setbox0=\hbox {${\@@localchemicalstyle M}$}% \vbox to \ht0 {\@@dochemicalcolor \hsize\wd0 \vskip.1\wd0#1\vfill#2\vfill#3\vskip.1\wd0}}} \def\singlechemicalbond% {\dochemicalbonds{}{\somechemicalbond}{}} \def\doublechemicalbond% {\dochemicalbonds{\somechemicalbond}{}{\somechemicalbond}} \def\triplechemicalbond% {\dochemicalbonds{\somechemicalbond}{\somechemicalbond}{\somechemicalbond}} % In plaats van \def\naam{\chemie[...]...} kan beter gebruik % worden gemaakt van het commando % % \definieerchemie[naam]{commando's} % % De naam krijgt, om problemen met bestaande macro's te % voorkomen, een prefix. Bij het ophalen van een commando % worden beide definities afgehandeld. \def\dodefinechemical[#1]#2% {\doifdefined{\??chemical#1} {\writestatus{ppchtex}{chemical definition #1 is redefined}}% \setvalue{\??chemical#1}{#2}} \def\definechemical% {\dosingleargument\dodefinechemical} \def\getpredefinedchemical#1% {\doifdefinedelse{\??chemical#1} {\getvalue{\??chemical#1}} {\doifdefinedelse{#1} {\getvalue{#1}} {\writestatus{ppchtex}{unknown chemical definition #1}}}} % Hieronder zijn de definities van de structuren opgenomen. De % naam van de structuur is als volgt opgebouwd: % % \executechemicalNUMBER[#1] % % waarbij [#1] betrekking heeft op de tekstelementen van \chemie, % de [tweede lijst] dus. % % De aan \chemie[#1][#2] meegegeven lijst van segmenten wordt % deels door de in \execute gedefinieerde macro's afgehandeld, % deels door algemene macro's. Segmenten hebben de vorm: % % [+|-|]identifier[X|XYZ|X..Y] % % Voorbeelden van segmenten zijn: % % R1 % R1..4 % R135 % -R1 % +R35 \setchemicalmaximum 0 \def\processchemical[#1]% {\unknownchemical{#1}} \def\setchemicalname#1 % {\def\chemicalname{#1}} \let\chemicalname=\s!unknown % Vooruitlopend op een gedetailleerde documentatie, zijn hier % vast enkele gebruikte afmetingen: % % lengte radikalen : 500 % afstand radikalen : 100 % afstand dubbele radikalen : 260 % afstand substituenten : +125 \def\executechemicalONE[#1]% {\setchemicalname ONE % \setchemicalmaximum 8 \setchemicaldistance 0 \setchemicalsubstitute 625 \setchemicaldirection 303 % \setchemicalrotation 1 1 0 1 0 1 0 1 0 \setchemicalrotation 2 0.707 -0.707 0.707 -0.707 0.707 -0.707 0.707 -0.707 \setchemicalrotation 3 0 -1 0 -1 0 -1 0 -1 \setchemicalrotation 4 -0.707 -0.707 -0.707 -0.707 -0.707 -0.707 -0.707 -0.707 \setchemicalrotation 5 -1 0 -1 0 -1 0 -1 0 \setchemicalrotation 6 -0.707 0.707 -0.707 0.707 -0.707 0.707 -0.707 0.707 \setchemicalrotation 7 0 1 0 1 0 1 0 1 \setchemicalrotation 8 0.707 0.707 0.707 0.707 0.707 0.707 0.707 0.707 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 45 135 225 315 \setchemicalangle 3 90 180 270 0 \setchemicalangle 4 135 225 315 45 \setchemicalangle 5 180 270 0 90 \setchemicalangle 6 225 315 45 135 \setchemicalangle 7 270 0 90 180 \setchemicalangle 8 315 45 135 225 % \setchemicaltranslate 1 -1000 0 \setchemicaltranslate 2 -1000 1000 \setchemicaltranslate 3 0 1000 \setchemicaltranslate 4 1000 1000 \setchemicaltranslate 5 1000 0 \setchemicaltranslate 6 1000 -1000 \setchemicaltranslate 7 0 -1000 \setchemicaltranslate 8 -1000 -1000 % \setchemicallinesegment SB 300 0 700 0 \setchemicallinesegment DB1 300 50 700 50 \setchemicallinesegment DB2 300 -50 700 -50 % %setchemicallinesegment EP 200 125 200 -125 \setchemicalfactorlinesegment EP 200 125 200 -125 % \setchemicaltextelement ES 200 0 \setchemicaltextelement ED1 200 50 \setchemicaltextelement ED2 200 -50 \setchemicaltextelement ET1 200 75 \setchemicaltextelement ET2 200 0 \setchemicaltextelement ET3 200 -75 \setchemicaltextelement HB1 300 0 \setchemicaltextelement HB2 475 0 \setchemicaltextelement HB3 650 0 % \setchemicaltextelement Z 800 0 \setchemicaltextelement RZ 950 0 \setchemicaltextelement ZN 500 0 \setchemicaltextelement ZTN 500 150 \setchemicaltextelement ZBN 500 -150 % \def\processchemical[##1##2##3##4##5]% {\doprocesschemical[##1##2##3##4##5] {\processaction [##1##2##3##4##5] [ PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, SUB##4##5=>\processchemicalsubstitute{##4##5}, ADJ##4##5=>\processchemicaldistance{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, DIR##4##5=>\processchemicaldirection{##4##5}, OFF##4##5=>\processchemicaloffset{##4##5}, CCD##4##5=>\processchemicaldottsegment{CC}{##4##5}, LDD##4##5=>\processchemicaldashedlinesegment{DB1}{##4##5}% \processchemicallinesegment{DB2}{##4##5}, RDD##4##5=>\processchemicallinesegment{DB1}{##4##5}% \processchemicaldashedlinesegment{DB2}{##4##5}, OF##3:##5=>\processchemicalphantom{##3}{##5}, OE##3##4##5=>\processchemicalopenend{OE}{##3##4##5}, EP##3##4##5=>\processchemicallinesegment{EP}{##3##4##5}, ES##3##4##5=>\processchemicaltextconstant{ES}{##3##4##5}{\hbox{$\cdot$}}{0}, ED##3##4##5=>\processchemicaltextconstant{ED}{##3##4##5}{\hbox{$\cdot$}}{0}, ET##3##4##5=>\processchemicaltextconstant{ET}{##3##4##5}{\hbox{$\cdot$}}{0}, HB##3##4##5=>\processchemicaltextconstant{HB}{##3##4##5}{\hbox{$\cdot$}}{0}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, DB##3##4##5=>\processchemicallinesegment{DB}{##3##4##5}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, BB##3##4##5=>\processchemicaldeltalinesegment{SB}{##3##4##5}, BD##3##4##5=>\processchemicaldasheddeltalinesegment{SB}{##3##4##5}, BW##3##4##5=>\processchemicalwavylinesegment{SB}{##3##4##5}, SD##3##4##5=>\processchemicaldashedlinesegment{SB}{##3##4##5}, TB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}% \processchemicallinesegment{DB}{##3##4##5}, CZ##3##4##5=>\processchemicaltextelement{RZ}{##3##4##5}{#1}{0}{}, ZTN##4##5=>\processchemicalsmalltextconstant{ZTN}{##4##5}{\chemicaltextelementnumber}{0}, ZTT##4##5=>\processchemicalsmalltextelement{ZTN}{##4##5}{#1}{0}{}, ZBN##4##5=>\processchemicalsmalltextconstant{ZBN}{##4##5}{\chemicaltextelementnumber}{0}, ZBT##4##5=>\processchemicalsmalltextelement{ZBN}{##4##5}{#1}{0}{}, ZN##3##4##5=>\processchemicaltextconstant{ZN}{##3##4##5}{\chemicaltextelementnumber}{0}, ZT##3##4##5=>\processchemicaltextelement{ZN}{##3##4##5}{#1}{0}{}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0} {l,l,t,r,r,r,b,l}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}}} \def\executechemicalTHREE[#1]% {\setchemicalname THREE % \setchemicalmaximum 3 \setchemicaldistance 289 \setchemicalsubstitute 952 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 -0.5 -0.866 -0.866 0.5 0.5 0.866 0.866 -0.5 \setchemicalrotation 3 -0.5 0.866 0.866 0.5 0.5 -0.866 -0.866 -0.5 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 120 210 300 30 \setchemicalangle 3 240 330 60 150 % \setchemicaltranslate 1 -1000 0 \setchemicaltranslate 2 0 1000 \setchemicaltranslate 3 1000 0 \setchemicaltranslate 4 0 -1000 % \setchemicallinesegment B 577 0 -289 -500 \setchemicallinesegment SB 352 -130 -64 -370 \setchemicallinesegment -SB 352 -130 -289 -500 \setchemicallinesegment +SB 577 0 -64 -370 \setchemicallinesegment DB1 327 -87 -89 -327 \setchemicallinesegment DB2 377 -172 -39 -413 \setchemicallinesegment R 577 0 1077 0 \setchemicallinesegment -R 577 0 1010 250 \setchemicallinesegment +R 577 0 1010 -250 \setchemicallinesegment ER1 577 50 1077 50 \setchemicallinesegment ER2 577 -50 1077 -50 \setchemicallinesegment SR 837 0 1077 0 \setchemicallinesegment -SR 802 130 1010 250 \setchemicallinesegment +SR 802 -130 1010 -250 \setchemicallinesegment DR1 837 50 1077 50 \setchemicallinesegment DR2 837 -50 1077 -50 % \setchemicaltextelement Z 577 0 \setchemicaltextelement RZ 1177 0 \setchemicaltextelement -RZ 1097 300 \setchemicaltextelement +RZ 1097 -300 \setchemicaltextelement CRZ 1077 0 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [ ROT##4=>\processchemicalrotation{##4}, MOV##4=>\processchemicaltranslate{##4}, SUB##4=>\processchemicalsubstitute{##4}, ADJ##4=>\processchemicaldistance{##4}, -RZ##4=>\processchemicaltextelement{-RZ}{##4}{#1}{3} {l,t,r, l,r,l, r,b,l, r,l,r}, +RZ##4=>\processchemicaltextelement{+RZ}{##4}{#1}{3} {l,r,b, r,r,l, r,l,t, l,l,r}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, -SR##4=>\processchemicallinesegment{-SR}{##4}, +SR##4=>\processchemicallinesegment{+SR}{##4}, CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0} {}, DB##3##4=>\processchemicallinesegment{DB}{##3##4}, DR##3##4=>\processchemicallinesegment{DR}{##3##4}, RZ##3##4=>\processchemicaltextelement{RZ}{##3##4}{#1}{3} {l,r,r, t,r,l, r,l,l, b,l,r}, ER##3##4=>\processchemicallinesegment{ER}{##3##4}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, SR##3##4=>\processchemicallinesegment{SR}{##3##4}, -R##3##4=>\processchemicallinesegment{-R}{##3##4}, +R##3##4=>\processchemicallinesegment{+R}{##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, R##2##3##4=>\processchemicallinesegment{R}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalFOUR[#1]% {\setchemicalname FOUR % \setchemicalmaximum 4 \setchemicaldistance 500 \setchemicalsubstitute 0 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 0 -1 -1 0 0 1 1 0 \setchemicalrotation 3 -1 0 0 1 1 0 0 -1 \setchemicalrotation 4 0 1 1 0 0 -1 -1 0 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 90 180 270 0 \setchemicalangle 3 180 270 0 90 \setchemicalangle 4 270 0 90 180 % \setchemicaltranslate 1 -1000 0 \setchemicaltranslate 2 0 1000 \setchemicaltranslate 3 1000 0 \setchemicaltranslate 4 0 -1000 % \setchemicallinesegment B 500 500 500 -500 \setchemicallinesegment SB 500 240 500 -240 \setchemicallinesegment -SB 500 240 500 -500 \setchemicallinesegment +SB 500 500 500 -240 \setchemicallinesegment DB1 450 240 450 -240 \setchemicallinesegment DB2 550 240 550 -240 \setchemicallinesegment EB 360 300 360 -300 \setchemicallinesegment R 500 500 854 854 \setchemicallinesegment -R 500 500 500 1000 \setchemicallinesegment +R 500 500 1000 500 \setchemicallinesegment ER1 465 535 819 889 \setchemicallinesegment ER2 535 465 889 819 \setchemicallinesegment SR 684 684 854 854 \setchemicallinesegment -SR 500 760 500 1000 \setchemicallinesegment +SR 760 500 1000 500 \setchemicallinesegment DR1 649 719 819 889 \setchemicallinesegment DR2 719 649 889 819 % \setchemicaltextelement Z 500 500 \setchemicaltextelement RZ 925 925 \setchemicaltextelement -RZ 500 1100 \setchemicaltextelement +RZ 1100 500 \setchemicaltextelement CRZ 1038 1038 % \setchemicaltextelement ZN 350 350 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [ PB:##4=>\beginchemicalpicture{##4}, PE????=>\endchemicalpicture, ROT##4=>\processchemicalrotation{##4}, SUB##4=>\processchemicalsubstitute{##4}, ADJ##4=>\processchemicaldistance{##4}, MOV##4=>\processchemicaltranslate{##4}, -RZ##4=>\processchemicaltextelement{-RZ}{##4}{#1}{4} {b,l,t,r, l,t,r,b, t,r,b,l, r,b,l,t}, +RZ##4=>\processchemicaltextelement{+RZ}{##4}{#1}{4} {l,t,r,b, t,r,b,l, r,b,l,t, b,l,t,r}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, -SR##4=>\processchemicallinesegment{-SR}{##4}, +SR##4=>\processchemicallinesegment{+SR}{##4}, CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0}{}, ZN##3##4=>\processchemicaltextconstant{ZN}{##3##4}{\chemicaltextelementnumber}{0}, ZT##3##4=>\processchemicaltextelement{ZN}{##3##4}{#1}{0}{}, DB##3##4=>\processchemicallinesegment{DB}{##3##4}, DR##3##4=>\processchemicallinesegment{DR}{##3##4}, EB##3##4=>\processchemicallinesegment{EB}{##3##4}, ER##3##4=>\processchemicallinesegment{ER}{##3##4}, RZ##3##4=>\processchemicaltextelement{RZ}{##3##4}{#1}{4} {lb,lt,rt,rb, lt,rt,rb,lb, rt,rb,lb,lt, rb,lb,lt,rt}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, SR##3##4=>\processchemicallinesegment{SR}{##3##4}, -R##3##4=>\processchemicallinesegment{-R}{##3##4}, +R##3##4=>\processchemicallinesegment{+R}{##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, R##2##3##4=>\processchemicallinesegment{R}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalFIVE[#1]% {\setchemicalname FIVE % \setchemicalmaximum 5 \setchemicaldistance 688 \setchemicalsubstitute 1226 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 0.309 -0.951 -0.951 -0.309 -0.309 0.940 0.951 0.309 \setchemicalrotation 3 -0.809 -0.588 -0.588 0.809 0.809 0.588 0.588 -0.809 \setchemicalrotation 4 -0.809 0.588 0.588 0.809 0.809 -0.588 -0.588 -0.809 \setchemicalrotation 5 0.309 0.951 0.951 -0.309 -0.309 -0.951 -0.951 0.309 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 72 162 252 342 \setchemicalangle 3 144 234 324 54 \setchemicalangle 4 216 306 36 126 \setchemicalangle 5 288 18 108 198 % \setchemicaltranslate 1 -1376 0 \setchemicaltranslate 2 -425 1304 \setchemicaltranslate 3 1113 809 \setchemicaltranslate 4 1113 -809 \setchemicaltranslate 5 -425 -1304 % \setchemicallinesegment A 1188 500 1188 -500 \setchemicallinesegment B 688 500 688 -500 \setchemicallinesegment S -263 808 688 -500 \setchemicallinesegment SS -116 606 541 -298 \setchemicallinesegment -SS -263 808 541 -298 \setchemicallinesegment +SS -116 606 688 -500 \setchemicallinesegment SB 688 240 688 -240 \setchemicallinesegment -SB 688 240 688 -500 \setchemicallinesegment +SB 688 500 688 -240 \setchemicallinesegment DB1 638 240 638 -240 \setchemicallinesegment DB2 738 240 738 -240 \setchemicallinesegment EB 548 340 548 -340 \setchemicallinesegment R 688 500 1093 794 \setchemicallinesegment -R 688 500 688 1000 \setchemicallinesegment +R 688 500 1163 345 \setchemicallinesegment ER1 659 540 1064 834 \setchemicallinesegment ER2 727 460 1122 754 \setchemicallinesegment SR 898 653 1093 794 \setchemicallinesegment -SR 688 760 688 1000 \setchemicallinesegment +SR 935 420 1163 345 \setchemicallinesegment DR1 869 693 1064 834 \setchemicallinesegment DR2 927 613 1122 754 % \setchemicaltextelement Z 688 500 \setchemicaltextelement RZ 1188 863 \setchemicaltextelement -RZ 688 1100 \setchemicaltextelement +RZ 1258 315 \setchemicaltextelement CRZ 1323 947 % \setchemicalcircsegment C -36 36 590 72 475 -345 \setchemicalcircsegment CC -72 0 590 72 182 -561 % \setchemicaltextelement ZN 468 350 \setchemicaltextelement RN 860 625 % 1.25 Z \setchemicaltextelement RTN 785 728 % .12 / 103 75 \setchemicaltextelement RBN 935 522 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [ FRONT????=>{\executechemicalFIVEFRONT[#1]}, PB:##4=>\beginchemicalpicture{##4}, PE????=>\endchemicalpicture, ROT##4=>\processchemicalrotation{##4}, SUB##4=>\processchemicalsubstitute{##4}, ADJ##4=>\processchemicaldistance{##4}, MOV##4=>\processchemicaltranslate{##4}, -RZ##4=>\processchemicaltextelement{-RZ}{##4}{#1}{5} {b,l,t,r,r, l,t,r,r,l, t,r,r,l,l, r,b,l,t,r}, +RZ##4=>\processchemicaltextelement{+RZ}{##4}{#1}{5} {l,t,r,r,b, t,r,r,l,l, r,r,l,l,r, b,l,l,r,r}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, -SR##4=>\processchemicallinesegment{-SR}{##4}, +SR##4=>\processchemicallinesegment{+SR}{##4}, -RD##4=>\processchemicaldashedlinesegment{-R}{##4}, +RD##4=>\processchemicaldashedlinesegment{+R}{##4}, -RB##4=>\processchemicaldeltalinesegment{-R}{##4}, +RB##4=>\processchemicaldeltalinesegment{+R}{##4}, CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0}{}, RTN##4=>\processchemicaltextconstant{RTN}{##4}{\chemicaltextelementnumber}{0}, RTT##4=>\processchemicaltextelement{RTN}{##4}{#1}{0}{}, RBN##4=>\processchemicaltextconstant{RBN}{##4}{\chemicaltextelementnumber}{0}, RBT##4=>\processchemicaltextelement{RBN}{##4}{#1}{0}{}, -SS##4=>\processchemicallinesegment{-SS}{##4}, +SS##4=>\processchemicallinesegment{+SS}{##4}, CCD##4=>\processchemicaldottsegment{CC}{##4}, SS##3##4=>\processchemicallinesegment{SS}{##3##4}, RD##3##4=>\processchemicaldashedlinesegment{R}{##3##4}, RB##3##4=>\processchemicaldeltalinesegment{R}{##3##4}, ZN##3##4=>\processchemicaltextconstant{ZN}{##3##4}{\chemicaltextelementnumber}{0}, ZT##3##4=>\processchemicaltextelement{ZN}{##3##4}{#1}{0}{}, RN##3##4=>\processchemicaltextconstant{RN}{##3##4}{\chemicaltextelementnumber}{0}, RT##3##4=>\processchemicaltextelement{RN}{##3##4}{#1}{0}{}, AU##3##4=>\processchemicaluparrowsegment{A}{##3##4}, AD##3##4=>\processchemicaldownarrowsegment{A}{##3##4}, CC##3##4=>\processchemicalcircsegment{CC}{##3##4}, CD##3##4=>\processchemicaldottsegment{C}{##3##4}, DB##3##4=>\processchemicallinesegment{DB}{##3##4}, DR##3##4=>\processchemicallinesegment{DR}{##3##4}, EB##3##4=>\processchemicallinesegment{EB}{##3##4}, ER##3##4=>\processchemicallinesegment{ER}{##3##4}, RZ##3##4=>\processchemicaltextelement{RZ}{##3##4}{#1}{5} {l,l,r,r,r, l,r,r,b,l, r,r,b,l,t, r,l,l,t,r}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, SR##3##4=>\processchemicallinesegment{SR}{##3##4}, -R##3##4=>\processchemicallinesegment{-R}{##3##4}, +R##3##4=>\processchemicallinesegment{+R}{##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, C##2##3##4=>\processchemicalcircsegment{C}{##2##3##4}, R##2##3##4=>\processchemicallinesegment{R}{##2##3##4}, S##2##3##4=>\processchemicallinesegment{S}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalSIX[#1]% {\setchemicalname SIX % \setchemicalmaximum 6 \setchemicalsubstitute 1375 \setchemicaldistance 866 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 0.5 -0.866 -0.866 -0.5 -0.5 0.866 0.866 0.5 \setchemicalrotation 3 -0.5 -0.866 -0.866 0.5 0.5 0.866 0.866 -0.5 \setchemicalrotation 4 -1 0 0 1 1 0 0 -1 \setchemicalrotation 5 -0.5 0.866 0.866 0.5 0.5 -0.866 -0.866 -0.5 \setchemicalrotation 6 0.5 0.866 0.866 -0.5 -0.5 -0.866 -0.866 0.5 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 60 150 240 330 \setchemicalangle 3 120 210 300 30 \setchemicalangle 4 180 270 0 90 \setchemicalangle 5 240 330 60 150 \setchemicalangle 6 300 30 120 210 % \setchemicaltranslate 1 -1732 0 \setchemicaltranslate 2 -866 1500 \setchemicaltranslate 3 866 1500 \setchemicaltranslate 4 1732 0 \setchemicaltranslate 5 866 -1500 \setchemicaltranslate 6 -866 -1500 % \setchemicallinesegment A 1386 500 1386 -500 \setchemicallinesegment S 0 1000 866 -500 \setchemicallinesegment SS 125 783 741 -283 \setchemicallinesegment -SS 0 1000 741 -283 \setchemicallinesegment +SS 125 783 866 -500 \setchemicallinesegment B 866 500 866 -500 \setchemicallinesegment SB 866 240 866 -240 \setchemicallinesegment -SB 866 240 866 -500 \setchemicallinesegment +SB 866 500 866 -240 \setchemicallinesegment DB1 816 240 816 -240 \setchemicallinesegment DB2 916 240 916 -240 \setchemicallinesegment EB 726 340 726 -340 \setchemicallinesegment R 866 500 1299 750 \setchemicallinesegment -R 866 500 866 1000 \setchemicallinesegment +R 866 500 1299 250 \setchemicallinesegment ER1 841 543 1274 793 \setchemicallinesegment ER2 891 457 1324 707 \setchemicallinesegment SR 1091 630 1299 750 \setchemicallinesegment -SR 866 740 866 1000 \setchemicallinesegment +SR 1091 370 1299 250 \setchemicallinesegment DR1 1066 673 1274 793 \setchemicallinesegment DR2 1116 588 1324 707 \setchemicallinesegment MID1 0 1000 -150 200 \setchemicallinesegment MID2 0 -1000 -150 -200 \setchemicallinesegment MIDS1 0 1000 -180 0 \setchemicallinesegment MIDS2 0 -1000 -180 0 % \setchemicalcircsegment C -30 30 700 60 600 -346 \setchemicalcircsegment CC -60 0 700 60 350 -606 % \setchemicaltextelement Z 866 500 \setchemicaltextelement RZ 1386 800 \setchemicaltextelement -RZ 866 1100 \setchemicaltextelement +RZ 1386 200 \setchemicaltextelement CRZ 1524 880 \setchemicaltextelement MIDZ -150 0 % \setchemicaltextelement ZN 589 350 \setchemicaltextelement RN 1083 625 % 1.25 Z \setchemicaltextelement RTN 1008 755 % .12 / 130 75 \setchemicaltextelement RBN 1158 495 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ FRONT????=>{\executechemicalSIXFRONT[#1]}, MID????=>\processchemicallinesegment{MID}{1????}, MIDS????=>\processchemicallinesegment{MIDS}{1????}, MIDZ????=>\processchemicaltextelement{MIDZ}{1????}{#1}{0}{}, PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, ROT##4##5=>\processchemicalrotation{##4##5}, SUB##4##5=>\processchemicalsubstitute{##4##5}, ADJ##4##5=>\processchemicaldistance{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, -RZ##4##5=>\processchemicaltextelement{-RZ}{##4##5}{#1}{6} {b,l,l,t,r,r, l,l,r,r,r,l, t,r,r,b,l,l, r,r,l,l,l,r}, +RZ##4##5=>\processchemicaltextelement{+RZ}{##4##5}{#1}{6} {l,t,r,r,b,l, r,r,r,l,l,l, r,b,l,l,t,r, l,l,l,r,r,r}, -SB##4##5=>\processchemicallinesegment{-SB}{##4##5}, +SB##4##5=>\processchemicallinesegment{+SB}{##4##5}, -SR##4##5=>\processchemicallinesegment{-SR}{##4##5}, +SR##4##5=>\processchemicallinesegment{+SR}{##4##5}, -RD##4##5=>\processchemicaldashedlinesegment{-R}{##4##5}, +RD##4##5=>\processchemicaldashedlinesegment{+R}{##4##5}, -RB##4##5=>\processchemicaldeltalinesegment{-R}{##4##5}, +RB##4##5=>\processchemicaldeltalinesegment{+R}{##4##5}, CRZ##4##5=>\processchemicaltextelement{CRZ}{##4##5}{#1}{0}{}, -SS##4##5=>\processchemicallinesegment{-SS}{##4##5}, +SS##4##5=>\processchemicallinesegment{+SS}{##4##5}, CCD##4##5=>\processchemicaldottsegment{CC}{##4##5}, RTN##4##5=>\processchemicaltextconstant{RTN}{##4##5}{\chemicaltextelementnumber}{0}, RTT##4##5=>\processchemicaltextelement{RTN}{##4##5}{#1}{0}{}, RBN##4##5=>\processchemicaltextconstant{RBN}{##4##5}{\chemicaltextelementnumber}{0}, RBT##4##5=>\processchemicaltextelement{RBN}{##4##5}{#1}{0}{}, SS##3##4##5=>\processchemicallinesegment{SS}{##3##4##5}, RD##3##4##5=>\processchemicaldashedlinesegment{R}{##3##4##5}, RB##3##4##5=>\processchemicaldeltalinesegment{R}{##3##4##5}, ZN##3##4##5=>\processchemicaltextconstant{ZN}{##3##4##5}{\chemicaltextelementnumber}{0}, ZT##3##4##5=>\processchemicaltextelement{ZN}{##3##4##5}{#1}{0}{}, RN##3##4##5=>\processchemicaltextconstant{RN}{##3##4##5}{\chemicaltextelementnumber}{0}, RT##3##4##5=>\processchemicaltextelement{RN}{##3##4##5}{#1}{0}{}, AU##3##4##5=>\processchemicaluparrowsegment{A}{##3##4##5}, AD##3##4##5=>\processchemicaldownarrowsegment{A}{##3##4##5}, CD##3##4##5=>\processchemicaldottsegment{C}{##3##4##5}, CC##3##4##5=>\processchemicalcircsegment{CC}{##3##4##5}, DB##3##4##5=>\processchemicallinesegment{DB}{##3##4##5}, EB##3##4##5=>\processchemicallinesegment{EB}{##3##4##5}, ER##3##4##5=>\processchemicallinesegment{ER}{##3##4##5}, RZ##3##4##5=>\processchemicaltextelement{RZ}{##3##4##5}{#1}{6} {l,l,t,r,r,b, l,r,r,r,l,l, r,r,b,l,l,t, r,l,l,l,r,r}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, SR##3##4##5=>\processchemicallinesegment{SR}{##3##4##5}, DR##3##4##5=>\processchemicallinesegment{DR}{##3##4##5}, -R##3##4##5=>\processchemicallinesegment{-R}{##3##4##5}, +R##3##4##5=>\processchemicallinesegment{+R}{##3##4##5}, B##2##3##4##5=>\processchemicallinesegment{B}{##2##3##4##5}, C##2##3##4##5=>\processchemicalcircsegment{C}{##2##3##4##5}, R##2##3##4##5=>\processchemicallinesegment{R}{##2##3##4##5}, S##2##3##4##5=>\processchemicallinesegment{S}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalSEVEN[#1]% incomplete ! {\setchemicalname SEVEN % \setchemicalmaximum 7 \setchemicalsubstitute - \setchemicaldistance 1038 % \setchemicalrotation 1 .623 .782 - - - - - - \setchemicalrotation 2 -.223 .975 - - - - - - \setchemicalrotation 3 -.901 .434 - - - - - - \setchemicalrotation 4 -.901 -.434 - - - - - - \setchemicalrotation 5 -.223 -.975 - - - - - - \setchemicalrotation 6 .623 -.782 - - - - - - \setchemicalrotation 7 1 0 - - - - - - % \setchemicalangle 1 0 - - - \setchemicalangle 2 51.429 - - - \setchemicalangle 3 102.857 - - - \setchemicalangle 4 154.286 - - - \setchemicalangle 5 205.714 - - - \setchemicalangle 6 257.143 - - - \setchemicalangle 7 308.571 - - - % \setchemicaltranslate 1 - - \setchemicaltranslate 2 - - \setchemicaltranslate 3 - - \setchemicaltranslate 4 - - \setchemicaltranslate 5 - - \setchemicaltranslate 6 - - \setchemicaltranslate 7 - - % \setchemicallinesegment B 1038 500 1038 -500 \setchemicallinesegment SB 1038 240 1038 -240 \setchemicallinesegment -SB 1038 240 1038 -500 \setchemicallinesegment +SB 1038 500 1038 -240 % \setchemicaltextelement Z 1038 500 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, %ROT##4##5=>\processchemicalrotation{##4}, %SUB##4##5=>\processchemicalsubstitute{##4##5}, %ADJ##4##5=>\processchemicaldistance{##4##5}, %MOV##4##5=>\processchemicaltranslate{##4##5}, -SB##4##5=>\processchemicallinesegment{-SB}{##4##5}, +SB##4##5=>\processchemicallinesegment{+SB}{##4##5}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, B##2##3##4##5=>\processchemicallinesegment{B}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalEIGHT[#1]% incomplete ! {\setchemicalname EIGHT % \setchemicalmaximum 8 %\setchemicalsubstitute 1307 \setchemicaldistance 1207 % \setchemicalrotation 1 .707 .707 - - - - - - \setchemicalrotation 2 0 1 - - - - - - \setchemicalrotation 3 -.707 .707 - - - - - - \setchemicalrotation 4 -1 0 - - - - - - \setchemicalrotation 5 -.707 -.707 - - - - - - \setchemicalrotation 6 0 -1 - - - - - - \setchemicalrotation 7 .707 -.707 - - - - - - \setchemicalrotation 8 1 0 - - - - - - % \setchemicalangle 1 45 - - - \setchemicalangle 2 90 - - - \setchemicalangle 3 135 - - - \setchemicalangle 4 180 - - - \setchemicalangle 5 225 - - - \setchemicalangle 6 270 - - - \setchemicalangle 7 315 - - - \setchemicalangle 8 0 - - - % \setchemicaltranslate 1 -2414 0 \setchemicaltranslate 2 -1706 1706 \setchemicaltranslate 3 0 2414 \setchemicaltranslate 4 1706 1706 \setchemicaltranslate 5 2414 0 \setchemicaltranslate 6 1706 -1706 \setchemicaltranslate 7 0 -2414 \setchemicaltranslate 8 -1706 -1706 % \setchemicallinesegment B 1207 500 1207 -500 \setchemicallinesegment SB 1207 240 1207 -240 \setchemicallinesegment -SB 1207 240 1207 -500 \setchemicallinesegment +SB 1207 500 1207 -240 % \setchemicaltextelement Z 1207 500 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ PB:##4##5=>\beginchemicalpicture{##4##5}, PE????=>\endchemicalpicture, %SUB##4##5=>\processchemicalsubstitute{##4##5}, ADJ##4##5=>\processchemicaldistance{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, -SB##4##5=>\processchemicallinesegment{-SB}{##4##5}, +SB##4##5=>\processchemicallinesegment{+SB}{##4##5}, SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}, B##2##3##4##5=>\processchemicallinesegment{B}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalFIVEFRONT[#1]% {\executechemicalFIVE[]% % \setchemicalname FIVEFRONT % \setchemicallinesegment -R 688 500 688 100 \setchemicallinesegment +R 688 500 688 900 % \setchemicaltextelement -RZ 0 -1300 \setchemicaltextelement +RZ 0 1300 % \def\processchemical[##1##2##3##4]% {\def\chemicalrotation{2}% \processaction [##1##2##3##4] [ -RZ##4=>\processchemicalunrotatedtextelement{Z}{-RZ}{##4}{#1}{5} {,,,,, t,t,t,t,t}, +RZ##4=>\processchemicalunrotatedtextelement{Z}{+RZ}{##4}{#1}{5} {,,,,, b,b,b,b,b}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, -R##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##3##4}, +R##3##4=>\processchemicalunrotatedlinesegment{b}{+R}{##3##4}, BB##3##4=>\processchemicalzlinesegment{B}{##3##4}, R##2##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##2##3##4}% \processchemicalunrotatedlinesegment{b}{+R}{##2##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalSIXFRONT[#1]% {\executechemicalSIX[]% % \setchemicalname SIXFRONT % \setchemicallinesegment -R 866 500 866 100 \setchemicallinesegment +R 866 500 866 900 % \setchemicaltextelement -RZ 0 -1300 \setchemicaltextelement +RZ 0 1300 % \def\processchemical[##1##2##3##4]% {\def\chemicalrotation{2}% \processaction [##1##2##3##4] [ -RZ##4=>\processchemicalunrotatedtextelement{Z}{-RZ}{##4}{#1}{6} {,,,,,, t,t,t,t,t,t}, +RZ##4=>\processchemicalunrotatedtextelement{Z}{+RZ}{##4}{#1}{6} {,,,,,, b,b,b,b,b,b}, -SB##4=>\processchemicallinesegment{-SB}{##4}, +SB##4=>\processchemicallinesegment{+SB}{##4}, SB##3##4=>\processchemicallinesegment{SB}{##3##4}, -R##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##3##4}, +R##3##4=>\processchemicalunrotatedlinesegment{b}{+R}{##3##4}, BB##3##4=>\processchemicalzlinesegment{B}{##3##4}, R##2##3##4=>\processchemicalunrotatedlinesegment{t}{-R}{##2##3##4}% \processchemicalunrotatedlinesegment{b}{+R}{##2##3##4}, B##2##3##4=>\processchemicallinesegment{B}{##2##3##4}, Z##2##3##4=>\processchemicaltextelement{Z}{##2##3##4}{#1}{0}{}, \s!unknown=>\unknownchemical{##1##2##3##4}]}} % 1 : 0 % 2 : -115 % 3* : -195 % 3 : -165 % 4 : -245 \def\executechemicalCARBON[#1]% {\setchemicalname CARBON % \setchemicalmaximum 4 \setchemicaldistance 0 \setchemicalsubstitute 0 % \setchemicalrotation 1 1 0 0 -1 -1 0 0 1 \setchemicalrotation 2 -0.423 -0.906 -0.906 0.423 0.423 0.906 0.906 -0.423 \setchemicalrotation 3 -0.966 -0.259 -0.259 0.966 0.966 0.259 0.259 -0.966 \setchemicalrotation 3* -0.966 0.259 0.259 0.966 0.966 -0.259 -0.259 -0.966 \setchemicalrotation 4 -0.423 0.906 0.906 0.423 0.423 -0.906 -0.906 -0.423 % \setchemicalangle 1 0 90 180 270 \setchemicalangle 2 115 205 295 25 \setchemicalangle 3 165 255 345 75 \setchemicalangle 3* 195 285 15 105 \setchemicalangle 4 245 335 65 155 % \setchemicaltranslate 1 -1500 0 \setchemicaltranslate 2 0 1500 \setchemicaltranslate 3 1500 0 \setchemicaltranslate 4 0 -1500 % \setchemicallinesegment B1 500 0 1000 0 \setchemicallinesegment B2 300 0 1000 0 \setchemicallinesegment B3 500 0 1000 0 \setchemicallinesegment B4 300 0 1000 0 % \setchemicaltextelement Z 1100 0 % \setchemicalcircsegment C 0 360 500 360 0 -500 % \def\processchemical[##1##2##3##4##5]% {\processaction [##1##2##3##4##5] [ MIR????=>\setchemicalmirror{3}, -MIR????=>\resetchemicalmirror{3}, *MIR????=>\togglechemicalmirror{3}, CB????=>\processlocalchemicals{B,C,Z}, C????=>\processchemicalcircsegment{C}{1????}, -ROT##5=>\reversechemical{ROT}{##5}{3,4,1,2}, ROT##4##5=>\processchemicalrotation{##4##5}, MOV##4##5=>\processchemicaltranslate{##4##5}, CB##3##4##5=>\processlocalchemicals {ROT##3,C,B,Z2..4, MOV##3,*MIR,-ROT##3,C,B,Z2..4}, B##2##3##4##5=>\processprivatechemicallinesegment{B}{##2##3##4##5}, Z##2##3##4##5=>\processchemicaltextelement{Z}{##2##3##4##5}{#1}{4} {l,t,r,b, t,r,b,l, r,b,l,t, b,l,t,r}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} % 1: 45 2: -90 3: -225 % 4: -45 5: -135 6: -270 \newif\ifNEWMANstagger \NEWMANstaggertrue \def\executechemicalNEWMANSTAGGER% {\NEWMANstaggertrue\executechemicalNEWMAN} \def\executechemicalNEWMANECLIPSE% {\NEWMANstaggerfalse\executechemicalNEWMAN} \def\executechemicalNEWMAN[#1]% {\setchemicalname NEWMAN % \setchemicalmaximum 6 \setchemicaldistance 0 \setchemicalsubstitute 0 % \ifNEWMANstagger \setchemicalrotation 1 0.707 0.707 0.707 -0.707 -0.707 -0.707 -0.707 0.707 \setchemicalrotation 2 0 -1 -1 0 0 1 1 0 \setchemicalrotation 3 -0.707 0.707 0.707 0.707 0.707 -0.707 -0.707 -0.707 \else \setchemicalrotation 1 .866 -.5 -.5 -.866 -.866 .5 .5 .866 \setchemicalrotation 2 -.259 .966 .966 .259 .259 -.966 -.966 -.259 \setchemicalrotation 3 -.5 -.866 -.866 .5 .5 .866 .866 -.5 \fi \setchemicalrotation 4 0.707 -0.707 -0.707 -0.707 -0.707 0.707 0.707 0.707 \setchemicalrotation 5 -0.707 -0.707 -0.707 0.707 0.707 0.707 0.707 -0.707 \setchemicalrotation 6 0 1 1 0 0 -1 -1 0 % \ifNEWMANstagger \setchemicalangle 1 315 45 135 225 \setchemicalangle 2 90 180 270 0 \setchemicalangle 3 225 315 45 135 \else \setchemicalangle 1 30 120 210 300 \setchemicalangle 2 255 345 75 165 \setchemicalangle 3 120 210 300 30 \fi \setchemicalangle 4 45 135 225 315 \setchemicalangle 5 135 225 315 45 \setchemicalangle 6 270 0 90 180 % \setchemicaltranslate 1 -1500 0 \setchemicaltranslate 2 0 1500 \setchemicaltranslate 3 1500 0 \setchemicaltranslate 4 0 -1500 % \setchemicallinesegment B1 0 0 1000 0 \setchemicallinesegment B2 0 0 1000 0 \setchemicallinesegment B3 0 0 1000 0 \setchemicallinesegment B4 500 0 1000 0 \setchemicallinesegment B5 500 0 1000 0 \setchemicallinesegment B6 500 0 1000 0 % \setchemicaltextelement Z 1100 0 % \setchemicalcircsegment C 0 360 500 360 0 -500 % \def\processchemical[##1##2##3##4]% {\processaction [##1##2##3##4] [STAGGER????=>{\executechemicalNEWMANSTAGGER[#1]}, ECLIPSE????=>{\executechemicalNEWMANECLIPSE[#1]}, B????=>\processlocalchemicals{B1..6}, CB????=>\processlocalchemicals{B1..6,C,Z1..6}, C????=>\processchemicalcircsegment{C}{1????}, ROT##4=>\processchemicalrotation{##4}, MOV##4=>\processchemicaltranslate{##4}, B##2##3##4=>\processprivatechemicallinesegment{B}{##2##3##4}, Z##2##3##4=>\ifNEWMANstagger \processchemicaltextelement{Z}{##2##3##4}{#1}{6} {l,t,r,l,r,b, l,r,l,r,r,l, r,b,l,r,l,t, r,l,r,l,l,r}% \else \processchemicaltextelement{Z}{##2##3##4}{#1}{6} {l,r,t,t,r,b, t,b,r,r,b,l, r,l,b,b,l,t, b,t,l,l,t,r}% \fi, \s!unknown=>\unknownchemical{##1##2##3##4}]}} \def\executechemicalCHAIR[#1]% smaller {\setchemicalname CHAIR % \setchemicalmaximum 6 % \setchemicallinesegment B1 1600 800 2800 -800 \setchemicallinesegment B2 2800 -800 800 0 \setchemicallinesegment B3 800 0 -1600 -800 \setchemicallinesegment B4 -1600 -800 -2800 800 \setchemicallinesegment B5 -2800 800 -800 0 \setchemicallinesegment B6 -800 0 1600 800 % \setchemicallinesegment +R1 1600 800 1600 1600 \setchemicallinesegment +R2 2800 -800 2800 -1600 \setchemicallinesegment +R3 800 0 800 800 \setchemicallinesegment +R4 -1600 -800 -1600 -1600 \setchemicallinesegment +R5 -2800 800 -2800 1600 \setchemicallinesegment +R6 -800 0 -800 -800 % \setchemicallinesegment -R1 1600 800 2350 522 % 750 278 \setchemicallinesegment -R2 2800 -800 3493 -400 \setchemicallinesegment -R3 800 0 1329 -600 % 528 600 \setchemicallinesegment -R4 -1600 -800 -2350 -522 % 750 278 \setchemicallinesegment -R5 -2800 800 -3493 400 \setchemicallinesegment -R6 -800 0 -1329 600 % 528 600 % \setchemicaltextelement +RZ1 1600 1800 \setchemicaltextelement +RZ2 2800 -1800 \setchemicaltextelement +RZ3 800 1000 \setchemicaltextelement +RZ4 -1600 -1800 \setchemicaltextelement +RZ5 -2800 1800 \setchemicaltextelement +RZ6 -800 -1000 % \setchemicaltextelement -RZ1 2538 453 % 200 lang \setchemicaltextelement -RZ2 3666 -300 \setchemicaltextelement -RZ3 1460 -750 \setchemicaltextelement -RZ4 -2538 -453 \setchemicaltextelement -RZ5 -3666 300 \setchemicaltextelement -RZ6 -1460 750 % \def\processchemical[##1##2##3##4##5]% {\def\chemicalrotation{1}% \processaction [##1##2##3##4##5] [ B????=>\processlocalchemicals{B1,B2,B3,B4,B5,B6}, -R????=>\processlocalchemicals{-R1,-R2,-R3,-R4,-R5,-R6}, +R????=>\processlocalchemicals{+R1,+R2,+R3,+R4,+R5,+R6}, B##2????=>{\getchemicallinesegment[0][B##2]}, -RZ##4????=>{\getchemicalfixedtextelement[-RZ##4][1][##4][l,l,tc,r,r,bc][#1]}, +RZ##4????=>{\getchemicalfixedtextelement[+RZ##4][1][##4][c][#1]}, -R##3????=>{\getchemicallinesegment[0][-R##3]}, +R##3????=>{\getchemicallinesegment[0][+R##3]}, \s!unknown=>\unknownchemical{##1##2##3##4##5}]}} \def\executechemicalarrow#1#2[#3]% {\dogetcommalistelement1\from#3\to\toptext \dogetcommalistelement2\from#3\to\bottext \def\dochemicaltext##1% {\dosetsubscripts% $\@@dochemicalstyle{\@@localchemicalformat\strut##1}$% \doresetsubscripts}% \doifelse\@@chemicallocation\v!intext {#1{\dochemicaltext\toptext}}% {\setbox\chemicalsymbols=\hbox {\box\chemicalsymbols \vbox{\halign{##\cr \hbox to 3em{\hss\dochemicaltext{\toptext}\hss}\cr #2% \hbox to 3em{\hss\dochemicaltext{\bottext}\hss}\cr}}}}} \def\executechemicalGIVES {\executechemicalarrow {\chemicalsinglepicturearrow}% nodig {\rightarrowfill\cr}} \def\executechemicalEQUILIBRIUM {\executechemicalarrow {\chemicaldoublepicturearrow}% nodig {\rightarrowfill\cr\leftarrowfill\cr}} \def\executechemicalMESOMERIC {\executechemicalarrow {\chemicalsinglepicturearrow}% nodig {$\leftarrow\hskip-1em$\rightarrowfill\cr}} \def\executechemicalsign#1[#2]% {\doifelse\@@chemicallocation\v!intext {\dosetsubscripts $\@@dochemicalstyle{\@@localchemicalformat#1}$% \doresetsubscripts} {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols \dosetsubscripts $\@@dochemicalstyle{\@@localchemicalformat#1}$% \doresetsubscripts}}} \def\executechemicalPLUS {\executechemicalsign{+}} \def\executechemicalMINUS {\executechemicalsign{-}} \def\executechemicalEQUAL {\executechemicalsign{=}} \def\executechemicalSPACE[#1]% {\doifnot\@@chemicallocation\v!intext {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols \quad}}} \def\executechemicalCHEM[#1]% {\doifnot\@@chemicallocation\v!intext {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols $\@@dochemicalstyle{\@@localchemicalformat#1}$}}} \def\executechemicalTEXT[#1]% {\doifnot\@@chemicallocation\v!intext {\setbox\chemicalsymbols\hbox {\box\chemicalsymbols#1}}} %\def\executechemicalLOW[#1]% % {\setlowsubscripts} % %\def\executechemicalHIGH[#1]% % {\sethighsubscripts} \def\putchemicalrule#1#2#3#4% {\ifcase\chemicaldrawingmode \putrule from {#1} {#2} to {#3} {#4} \or \psline(#1,#2)(#3,#4)% \or \bgroup \!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax \global\MPdrawingdonetrue \setchemicalattributes \startMPdrawing x1 := \MPdivten[\the\!!counta]u ; y1 := \MPdivten[\the\!!countb]u ; x2 := \MPdivten[\the\!!countc]u ; y2 := \MPdivten[\the\!!countd]u ; draw z1--z2 ; \stopMPdrawing \egroup \fi} \def\executechemicalcomplex#1% {\bgroup \putchemicalrule {0} {-\@@chemicalbottom} {0} {\@@chemicaltop}% \putchemicalrule {0} {\@@chemicaltop} {#1150} {\@@chemicaltop}% \putchemicalrule {0} {-\@@chemicalbottom} {#1150} {-\@@chemicalbottom}% \egroup} \def\executechemicalOPENCOMPLEX[#1]% {\executechemicalcomplex+\ignorespaces \executechemicalSPACE[]} \def\executechemicalCLOSECOMPLEX[#1]% {\executechemicalSPACE[]% \executechemicalcomplex-\ignorespaces} % nog niet door midden as! \def\executechemicalverticalsymbol#1#2% {\executechemicalTEXT [$\left#1\relax \dimen0=\@@chemicalunit \scratchcounter=\@@chemicaltop \advance\scratchcounter by \@@chemicalbottom \dimen0=\scratchcounter\dimen0 \vcenter to \dimen0{} \dimen2=\@@chemicalunit \dimen2=\@@chemicalright\dimen0 \vcenter{\leftskip1em\hsize\dimen2\relax\strut#2\strut}% \right.$]}% \def\executechemicalUPARROW[#1]% {\executechemicalverticalsymbol\uparrow{#1}} \def\executechemicalDOWNARROW[#1]% {\executechemicalverticalsymbol\downarrow{#1}} \def\executechemicalUPDOWNARROW[#1]% {\executechemicalverticalsymbol\updownarrow{#1}} \let\setchemicalattributes\relax \setupchemical [\c!width=0, \c!height=0, \c!left=0, \c!right=0, \c!top=0, \c!bottom=0, \c!bodyfont=\the\bodyfontsize, \c!resolution=\outputresolution, \c!scale=\v!medium, \c!size=\v!medium, \c!textsize=\v!big, \c!frame=\v!off, \c!axis=\v!off, \c!state=\v!start, \c!style=\rm, \c!location=, \c!option=, \c!offset=LOW, \c!alternative=1, \c!color=, \c!rulethickness=, \c!rulecolor=, \c!factor=1] % Tijdelijk plaatsen we deze extra macro's hier. % % mathontop: \mtop {} {} % textontop: \ttop {} {} \def\putontop#1#2% {\vbox {\halign {\strut\hss##\hss\cr #1\cr #2\cr}}} \def\ttop#1#2% {\putontop{\tx#1}{#2}} \def\mtop#1#2% {\vbox {\offinterlineskip \halign {\hss##\hss\cr $\scriptscriptstyle#1$\cr \noalign{\vskip.5ex}% $#2$\cr}}} \def\ctop#1#2% {\vbox {\offinterlineskip \halign {\hss##\hss\cr $\@@dochemicalstyle{\@@localchemicalformat\scriptscriptstyle#1}$\cr \noalign{\vskip.5ex}% $\@@dochemicalstyle{\@@localchemicalformat#2}$\cr}}} %D Here are a couple of \CONTEXT\ goodies: %D %D \startitemize %D \item styles hooked into \CONTEXT\ style mechanism %D \item support for color and rulethickness (mp mode only) %D \item position tracking %D \stopitemize \ifCONTEXT \else \protect \endinput \fi \let\@@chemicalrulecolor\empty \let\@@chemicalcolor \empty % \def\setchemicalattributes % {\scratchdimen\@@chemicalchemicalrulethickness % \def\chemicalattributes % {withpen pencircle scaled \the\scratchdimen\space % withcolor }% % \doifelsenothing\@@chemicalchemicalrulecolor % {\edef\chemicalattributes{\chemicalattributes black}} % {\edef\chemicalattributes{\chemicalattributes \MPcolor{\@@chemicalchemicalrulecolor}}}% % \startMPdrawing % drawoptions (\chemicalattributes) ; % \stopMPdrawing} \def\setchemicalattributes {\scratchdimen\@@chemicalrulethickness \def\chemicalattributes {withpen pencircle scaled \the\scratchdimen\space withcolor }% \doifelsenothing\@@chemicalrulecolor {\edef\chemicalattributes{\chemicalattributes black}} {\edef\chemicalattributes{\chemicalattributes \MPcolor{\@@chemicalrulecolor}}}% \startMPdrawing drawoptions (\chemicalattributes) ; \stopMPdrawing} \def\@@dochemicalcolor {\doifsomething\@@chemicalcolor{\color[\@@chemicalcolor]}} \def\@@dochemicalstyle {\doconvertfont\@@chemicalstyle} \setupchemical [\c!rulethickness=\linewidth, \c!rulecolor=, \c!color=] \def\cpos#1#2% {\iftrialtypesetting #2% \else \bgroup \globalpushmacro\dowithchemical \gdef\dowithchemical##1{\hpos{#1}{##1}\globalpopmacro\dowithchemical}% #2% \egroup \fi} \protect \endinput % \startchemical[axis=on,frame=yes] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical % \startchemical[size=big,scale=small,axis=on,frame=yes,factor=1.5] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical % \startchemical[size=big,scale=medium,axis=on,frame=yes,factor=1.5] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical % \startchemical[size=big,scale=big,axis=on,frame=yes,factor=1.5] % \chemical[SIX,ROT2,B,R36,RZ6][CH_3] % \chemical[PB:RZ3,ONE,Z05,SB5,EP37,PE][O,H] % \stopchemical �������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-escaped.mkiv�����������������������0000644�0001750�0001750�00000000753�11754241457�025707� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=buff-imp-escaped, %D version=2010.10.19, %D title=\CONTEXT\ Visualizer Macros, %D subtitle=Escaped, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{buff-imp-escaped.lua}{1.001} \unprotect \protect \endinput ���������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-ini.mkiv�������������������������������0000644�0001750�0001750�00000002527�12130411274�024247� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=cldf-ini, %D version=2010.10.19,, %D title=\CONTEXT\ \LUA\ Document Functions, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Documents / Initialization} \registerctxluafile{cldf-ini}{1.001} %D With each new update of \MKIV\ we can join Within Temptation in %D singing: %D %D \startbuffer %D \startluacode %D context("I go faster%s",string.rep(" and faster",6)) %D \stopluacode %D %D \cldcontext{"I go faster\letterpercent s", %D string.rep(" and faster",6)} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Anyway \unknown\ the following are {\em not} user commands: % \zerocount removes as it's the default \def\cldf#1{\directlua{_cldf_(#1)}} % global (functions) \def\cldn#1{\directlua{_cldn_(#1)}} % global (nodes) \normalprotected\def\cldprocessfile#1{\directlua{context.runfile("#1")}} \def\cldcontext #1{\directlua{context(#1)}} \def\cldcommand #1{\directlua{context.#1}} % \def\cldverbatim #1{\directlua{context.verbatim.#1}} % maybe make verbatim global \endinput �������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-ref.mkvi�������������������������������0000644�0001750�0001750�00000201261�12132111075�024301� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=strc-ref, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Cross Referencing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: (1) configure references, (2) rendering => with presets % % \defineconversionset[default][Character,number,Romannumerals,Character][number] % \defineseparatorset [default][.,.,--][.] % \setuphead[subsection][sectionstopper=),sectionsegments=4:4] % \setupreferencestructureprefix[default][prefixsegments=2:4] % \setupreferencestructureprefix[figure][default][prefixsegments=3:4] % \chapter {One} % \section {One} % \subsection[sec:test]{Two} % See \in[sec:test] and \in[fig:xx] and \in[fig:yy] % \placefigure[here][fig:xx]{}{} % \placefigure[here][fig:yy]{}{} \writestatus{loading}{ConTeXt Structure Macros / Cross Referencing} \registerctxluafile{strc-rsc}{1.001} \registerctxluafile{strc-ref}{1.001} \registerctxluafile{node-ref}{1.001} \unprotect %D This module is a (partial) rewrite of core-ref.tex for \MKIV. As %D such it will be a moving target for a while. %D Later we will do a further cleanup and move much of the code to %D \LUA\ (i.e.\ better backend integration). \let\mainreference\gobblefivearguments % this will go when we got rid of the tuo file \let\currentfolioreference \!!zerocount % only used in xml-fo \let\resetreferences \relax \let\setreferences \relax \let\showcurrentreference \relax \let\setexecutecommandcheck\gobbletwoarguments % todo : unknown/illegal reference no arg % todo : +n pages check on 'samepage' (contrastcolor) % todo : multiple text in reference % Makes more sense to build action data first, especially now % openaction etc are supported. % % \definespecial\doexecuteactionchain w h % \definespecial\dosetgotolocation % \definespecial\dosetexecuteJScode % ... %D This module deals with referencing. In \CONTEXT\ referencing is one of %D the core features, although at a first glance probably nobody will %D notice. This is good, because referencing should be as hidden as possible. %D %D Before we start implementing functionality we provide a way to set %D up this mechanism. %D %D \showsetup{setupreferencing} %D %D In interactive documents verbose references don't always %D make sense (what is a page number in an unnumbered %D document). By setting the \type{interaction} variable, one %D can influences the way interactive references are set. \installcorenamespace{referencing} \installdirectcommandhandler \??referencing {referencing} % \??referencing \newif\ifreferencing \referencingtrue \appendtoks \edef\p_state{\referencingparameter\c!state}% \ifx\p_state\v!start \referencingtrue \else \referencingfalse \fi \to \everysetupreferencing %D In paper documents, referencing comes down to cross referencing, but in %D their interactive counterparts, is also involves navigation. Many features %D implemented here are therefore closely related to navigation. %D %D Many \CONTEXT\ commands can optionally be fed with a reference. Such a %D reference, when called upon, returns the number of a figure, table, chapter %D etc, a piece of text, or a pagenumber. %D %D There are three ways of defining a reference: %D %D \starttyping %D \pagereference[here] %D \textreference[here]{some text} %D \stoptyping %D %D the third alternative combines them in: %D %D \starttyping %D \reference[here]{some text} %D \stoptyping \unexpanded\def\textreference {\dosingleargument\strc_references_text_reference} % no need for \dosingle \unexpanded\def\pagereference {\dosingleargument\strc_references_page_reference} % as they're mandate and \unexpanded\def\reference {\dosingleargument\strc_references_full_reference} % never forgotten \unexpanded\def\setreference {\dodoubleargument\strc_references_set_reference } % %D These are implemented in a low level form as: \unexpanded\def\strc_references_text_reference [#labels]{\strc_references_set_named_reference\s!text{#labels}{}} \unexpanded\def\strc_references_page_reference [#labels]{\strc_references_set_named_reference\s!page{#labels}{}{}} \unexpanded\def\strc_references_full_reference [#labels]{\strc_references_set_named_reference\s!full{#labels}{}} \unexpanded\def\strc_references_set_reference[#labels][#settings]{\strc_references_set_named_reference\s!user{#labels}{#settings}{}} \unexpanded\def\dosetdirectpagereference#1{\strc_references_set_named_reference\s!page{#1}{}{}} % low level, maybe use _ \unexpanded\def\usereferenceparameter#1% faster local variant {\edef\m_strc_references_asked{#1\c!reference}% \ifx\m_strc_references_asked\empty\else \dosetdirectpagereference\m_strc_references_asked \fi} %D Actually there is not much difference between a text and a %D full reference, but it's the concept that counts. The low %D level implementation is: \newcount\lastreferenceattribute \newcount\lastdestinationattribute \def\dofinishfullreference#prefix#label{\normalexpanded{\ctxlatecommand{enhancereference("#prefix","#label")}}} \def\dofinishtextreference#prefix#label{\normalexpanded{\ctxlatecommand{enhancereference("#prefix","#label",{})}}} \let\dofinishpagereference\dofinishfullreference \let\dofinishuserreference\dofinishfullreference \def\dofinishsomereference#kind{\executeifdefined{dofinish#{kind}reference}\gobbletwoarguments} \unexpanded\def\strc_references_set_named_reference {\ifreferencing \expandafter\strc_references_set_named_reference_indeed \else \expandafter\gobblefourarguments \fi} \newbox\b_strc_destination_nodes \unexpanded\def\strc_references_flush_destination_nodes {\ifvoid\b_strc_destination_nodes \else \unhbox\b_strc_destination_nodes \fi} \unexpanded\def\strc_references_start_destination_nodes % messy but we need the delay {\setbox\b_strc_destination_nodes\hbox\bgroup} % also sets lastdestinationattribute \unexpanded\def\strc_references_stop_destination_nodes {\normalexpanded{\egroup\lastdestinationattribute\the\lastdestinationattribute\relax}} \unexpanded\def\strc_references_set_named_reference_indeed#kind#labels#userdata#text% labels userdata text -> todo: userdata {\ifreferencing % we could have a more efficient one for page references but for the moment % we don't care too much \edef\currentreferencekind {#kind}% \edef\currentreferencelabels {#labels}% \edef\currentreferenceuserdata {#userdata}% \edef\currentreferenceexpansion{\referencingparameter\c!expansion}% {\referenceparameter\c!expansion} \ifx\currentreferencelabels\empty \lastdestinationattribute\attributeunsetvalue \else \ifx\currentreferenceexpansion\s!xml \xmlstartraw \xdef\currentreferencedata{#text}% data, no text else conflict \xmlstopraw \globallet\currentreferencecoding\s!xml \else \ifx\currentreferenceexpansion\v!yes \xdef\currentreferencedata{#text}% \else \xdef\currentreferencedata{\detokenize{#text}}% \fi \globallet\currentreferencecoding\s!tex \fi % beware, the structures.references.set writes a % \setnextinternalreference \strc_references_start_destination_nodes \ctxcommand{setreferenceattribute("\currentreferencekind", "\referenceprefix","\currentreferencelabels", { references = { % internal = \nextinternalreference, % no need for an internal as we have an explicit block = "\currentsectionblock", section = structures.sections.currentid(), }, metadata = { % we could assume page to have no metadata kind = "#kind", % \currentreferencekind \ifx\currentreferencekind\s!page\else catcodes = \the\catcodetable, xmlroot = \ifx\currentreferencecoding\s!xml "\xmldocument"\else nil\fi, % only useful when text \fi }, \ifx\currentreferencedata\empty\else entries = { text = \!!bs\currentreferencedata\!!es }, \fi \ifx\currentreferenceuserdata\empty\else userdata = structures.helpers.touserdata(\!!bs\detokenize{#userdata}\!!es) \fi },"\interactionparameter\c!focus") }% \strc_references_stop_destination_nodes \fi \else \setbox\b_strc_destination_nodes\emptyhbox \lastdestinationattribute\attributeunsetvalue \fi % will become obsolete: \xdef\currentdestinationattribute{\number\lastdestinationattribute}% % will become an option: \ifnum\lastdestinationattribute>\zerocount \dontleavehmode\hbox attr \destinationattribute\lastdestinationattribute\bgroup \strc_references_flush_destination_nodes \egroup \fi} \def\strc_references_set_page_only_destination_attribute#labels% could in fact be fully expandable {\ifreferencing \edef\currentreferencelabels{#labels}% \ifx\currentreferencelabels\empty \setbox\b_strc_destination_nodes\emptyhbox \lastdestinationattribute\attributeunsetvalue \else \strc_references_start_destination_nodes \ctxcommand{setreferenceattribute("\s!page", "\referenceprefix","\currentreferencelabels", { references = { block = "\currentsectionblock", section = structures.sections.currentid(), }, metadata = { kind = "page", }, },"\interactionparameter\c!focus") }% \strc_references_stop_destination_nodes \fi \else \setbox\b_strc_destination_nodes\emptyhbox \lastdestinationattribute\attributeunsetvalue \fi} \def\strc_references_set_page_only_destination_box_attribute#cs#labels% {\strc_references_set_page_only_destination_attribute{#labels}% \ifnum\lastdestinationattribute>\zerocount \edef#cs{attr \destinationattribute\number\lastdestinationattribute}% \else \let#cs\empty \fi} %D It's about time to clean up references .. stable enough now. \unexpanded\def\boxreference[#1]% {\begingroup \dowithnextbox {\strc_references_set_page_only_destination_attribute{#1}% \hbox \ifnum\lastdestinationattribute=\attributeunsetvalue\else attr \destinationattribute \lastdestinationattribute \fi {\box\b_strc_destination_nodes\box\nextbox}% \endgroup}} \unexpanded\def\hboxreference[#1]{\boxreference[#1]\hbox} \unexpanded\def\vboxreference[#1]{\boxreference[#1]\vbox} % \ifx\currentdestinationattribute\empty % \begingroup\attribute\destinationattribute\currentdestinationattribute\emptyhbox\endgroup % todo % \fi \def\defaultreferencepage#text{[[[#text]]]} \def\defaultreferencetext#text{[[[#text]]]} %D For internal usage: \def\strc_references_set_simple_page_reference#label% {\iflocation \strc_references_start_destination_nodes \ctxcommand{setreferenceattribute("\s!page", "\referenceprefix","#label", { references = { % block = "\currentsectionblock", % section = structures.sections.currentid(), }, metadata = { % we could assume page to have no metadata kind = "\s!page", }, },"\interactionparameter\c!focus") }% \strc_references_stop_destination_nodes \xdef\currentdestinationattribute{\number\lastdestinationattribute}% \else \setbox\b_strc_destination_nodes\emptyhbox \xdef\currentdestinationattribute{\number\attributeunsetvalue}% \fi} \def\strc_references_get_simple_page_reference#label% {\iflocation \ctxcommand{injectreference("\referenceprefix","#label",\number\ht\strutbox,\number\dp\strutbox,\extrareferencearguments)}% \xdef\currentreferenceattribute{\number\lastreferenceattribute}% \else \xdef\currentreferenceattribute{\number\attributeunsetvalue}% \fi} %D \macros %D {contentreference} %D %D \starttyping %D \setupinteraction %D [state=start, %D focus=standard] %D %D \setupheader %D [state=stop] %D %D See page \goto{page 2}[page2] \page %D %D \contentreference %D [page2] %D [offset=1cm,toffset=2cm,frame=on] %D {\externalfigure[cow.pdf][factor=fit]} %D %D \stoptyping \unexpanded\def\contentreference {\hbox\bgroup \dodoubleempty\strc_references_content_pickup} \def\strc_references_content_pickup {\ifsecondargument \expandafter\strc_references_content_pickup_yes \else \expandafter\strc_references_content_pickup_yes \fi} \def\strc_references_content_pickup_yes[#1][#2]% {\dowithnextbox{\strc_references_content_yes_finish{#1}{#2}}\hbox} \def\strc_references_content_pickup_nop[#1][#2]% {\dowithnextbox{\strc_references_content_nop_finish{#1}{#2}}\hbox} \def\strc_references_content_yes_finish#1#2% {\scratchwidth \wd\nextbox \scratchheight\ht\nextbox \scratchdepth \dp\nextbox \setbox\nextbox\hbox {\framed[\c!frame=\v!off,#2]{\box\nextbox}}% \strc_references_set_simple_page_reference{#1}% \setbox\nextbox\hbox attr \destinationattribute \currentdestinationattribute {\strc_references_flush_destination_nodes \box\nextbox}% \setbox\nextbox\hbox{\box\nextbox}% \wd\nextbox\scratchwidth \ht\nextbox\scratchheight \dp\nextbox\scratchdepth \box\nextbox \egroup} \def\strc_references_content_nop_finish#1#2% {\strc_references_set_simple_page_reference{#1}% \hbox attr \destinationattribute \currentdestinationattribute {\strc_references_flush_destination_nodes \box\nextbox}% \egroup} %D \macros %D {everyreference} %D %D For rather tricky purposes, one can assign sanitizing %D macros to \type{\everyreference} (no longer that relevant). \newevery \everyreference \relax %D This is really needed, since for instance Polish has a %D different alphabet and needs accented entries in registers. \appendtoks \cleanupfeatures \to \everyreference %D We did not yet discuss prefixing. Especially in interactive %D documents, it's not always easy to keep track of duplicate %D references. The prefix mechanism, which we will describe %D later on, solves this problem. By (automatically) adding a %D prefix one keeps references local, but the global ones in %D view. To enable this feature, we explictly split the prefix %D from the reference. \let\referenceprefix\empty %D For a long time the only way to access an external file was %D to use the file prefix (\type {somefile::}. However, when %D you split up a document, redefining the references may be %D such a pain, that another approach is feasible. By setting %D the \type {autofile} variable to \type {yes} or \type %D {page}, you can access the reference directly. %D %D \starttabulate[||||] %D \NC filename::tag \NC page(filename::pnum) \NC tag \NC\NR %D \NC $\star$ \NC \NC \NC\NR %D \NC $\star$ \NC $\star$ \NC $\star$ \NC\NR %D \NC \NC $\star$ \NC \NC\NR %D \stoptabulate \unexpanded\def\usereferences[#filename]{} % obsolete %D As mentioned we will also use the cross reference mechanism %D for navigational purposes. The main reason for this is that %D we want to treat both categories alike: %D %D \starttyping %D \goto{go back}[PreviousJump] %D \goto{colofon}[colofon page] %D \stoptyping %D %D Here \type{PreviousJump} is handled by the viewer, while the %D \type{colofon page} reference is, apart from hyperlinking, a %D rather normal reference. %D %D We already saw that cross refences are written to and read %D from a file. The pure navigational ones don't need to be %D written to file, but both for fast processing and %D transparant integration, they are saved internally as a sort %D of reference. We can easily distinguish such system %D references from real cross reference ones by their tag. %D %D We also use the odd/even characteristic to determine the %D page state. \let\currentrealreference \empty \let\currentpagereference \empty \let\currenttextreference \empty \let\currentreferenceorder \empty \let\currentsubtextreference \empty \let\currentsubsubtextreference\empty \newcount\referencehastexstate % set in backend \def\referencepagestate{\ctxcommand{referencepagestate()}} \def\referencerealpage {\ctxcommand{referencerealpage ()}} % referencepagestate: % % 0 = no page ref, 1=same page, 2=before, 3=after %D Cross references appear as numbers (figure~1.1, chapter~2) %D or pagenumbers (page~2, page 3--2), and are called with %D \type{\in} and \type{\at}. In interactive documents we also %D have \type{\goto}, \type{\button} and alike. These are more %D versatile and look like: %D %D \starttyping %D \goto[reference] %D \goto[outer reference::] %D \goto[outer reference::inner reference] %D \goto[operation(argument)] %D \goto[operation(action{argument,argument})] %D \goto[action] %D \goto[action{argument}] %D \stoptyping %D %D The first one is a normal reference, the second and third %D are references to a file or \URL. The brace delimited %D references for instance refer to a \JAVASCRIPT. The last %D example shows that we can pass arguments to the actions. %D %D Now we've come to the testing step. As we can see below, %D this macro does bit more than testing: it also resolves %D the reference. This means that whenever we test for the %D existance of a reference at an outer level, we have all the %D relevant properties of that reference avaliable inside the %D true branche~(\type{#2}). %D %D The prefix has to do with localizing references. When a %D prefix is set, looking for a reference comes to looking for %D the prefixed one, and when not found, looking for the non %D prefixed one. Consider for instance the prefix set to %D \type{sidetrack}. %D %D \starttyping %D \pagereference[important] %D \pagereference[unimportant] %D \setupreferencing[prefix=sidetrack] %D \pagereference[important] %D \stoptyping %D %D results in saving (writing) the references %D %D \starttyping %D ...{}{important} %D ...{}{unimportant} %D ...{sidetrack}{important}... %D \stoptyping %D %D Now when we call for \type{unimportant}, we will indeed get %D the pagenumber associated to this reference. But when we %D call for \type{important}, while the prefix is still set, we %D will get the pagenumber bound to the prefixed one. %D %D {\em Some day, when processing time and memory are no longer %D performance factors, we will introduce multi||level %D prefixes.} %D %D Before we start analyzing, I introduce a general %D definition macro. Consider: %D %D \starttyping %D \goto{do}[JS(My_Script{"test",123}),titlepage] %D \stoptyping %D %D This can also be achieved by: %D %D \starttyping %D \definereference[startup][JS(My_Script{"test",123}),titlepage] %D \goto{do}[startup] %D \stoptyping %D %D Now is this is a handy feature or not? %D %D \showsetup{definereference} %D %D We can trace references by setting the next switch to %D true. \unexpanded\def\definereference {\dodoubleempty\strc_references_define_reference} \def\strc_references_define_reference[#name][#specification]% {\ctxcommand{definereference("\referenceprefix","#name",\!!bs\detokenize{#specification}\!!es)}} \unexpanded\def\resetreference[#name]% {\ctxcommand{resetreference("\referenceprefix","#name")}} \def\setpagereference#name#specification% hm,. low level ? {\ctxcommand{definereference("","#name",\!!bs\v!page(\luaescapestring{#specification})\!!es)}} %D Chained references are defined as: %D %D \starttyping %D \goto{somewhere}[JS(somescript),nextpage,JS(anotherscript)] %D \stoptyping %D %D Actually supporting chains is up to the special driver. Here %D we only provide the hooks. %D \macros %D {highlighthyperlinks} %D %D The next switch can be used to make user hyperlinks are %D not highlighted when clicked on. \newconditional\highlighthyperlinks \settrue\highlighthyperlinks %D \macros %D {gotonewwindow} %D %D To make the {\em goto previous jump} feature more %D convenient when using more than one file, it makes sense %D to force the viewer to open a new window for each file %D opened. \newconditional\gotonewwindow \setfalse\gotonewwindow \def\expandtexincurrentreference % will happen in lua some time {\ifcase\referencehastexstate\else\ctxcommand{expandcurrentreference()}\fi} \def\expandreferenceoperation#tag#content{\ctxcommand{setreferenceoperation(#tag,\!!bs#content\!!es)}} \def\expandreferencearguments#tag#content{\ctxcommand{setreferencearguments(#tag,\!!bs#content\!!es)}} \def\doifreferencefoundelse#labels#yes#nop% {\ctxcommand{doifelsereference("\referenceprefix",\!!bs#labels\!!es,\luaconditional\highlighthyperlinks,\luaconditional\gotonewwindow)}% {\expandtexincurrentreference #yes}% {#nop}} %D The tester only splits the reference in components but does %D not look into them. The following macro does a preroll and %D determines for instance the current real reference pagenumber. %D The \type {\currentrealreference} macro does the same so unless %D one wants to use the pagestate the next macro seldom needs to %D be called. %D The inner case is simple. Only two cases have to be taken %D care of: %D %D \starttyping %D \goto{some text}[reference] %D \goto{some text}[prefix:reference] %D \stoptyping %D %D References to other files however are treated strict or %D tolerant, depending on their loading and availability: %D %D \starttyping %D \useexternaldocument[somefile][filename][a nice description] %D %D \goto{checked reference}[somefile::reference] %D \goto{unchecked reference}[somefile::] %D \goto{unchecked reference}[anotherfile::reference] %D \stoptyping %D %D An unknown reference is reported on the screen, in the log %D file and, when enabled, in the left margin of the text. \let\unknownreference\gobbleoneargument %D When a reference is not found, we typeset a placeholder %D (two glyphs are often enough to represent the reference %D text). \def\dummyreference{{\tttf ??}} \def\emptyreference{{\tttf !!}} %D To prevent repetitive messages concerning a reference %D being defined, we set such an unknown reference to an empty %D one after the first encounter. %D Apart from cross references supplied by the user, \CONTEXT\ %D generates cross references itself. Most of them are not %D saved as a reference, but stored with their source, for %D instance a list or an index entry. Such automatically %D generated, for the user invisible, references are called %D {\em internal references}. The user supplied ones are %D labeled as {\em external references}. %D %D A second important characteristic is that when we want to %D support different backends (viewers), we need to support %D named destinations as well as page numbers. I invite readers %D to take a glance at the special driver modules to understand %D the fine points of this. As a result we will deal with {\em %D locations} as well as {\em real page numbers}. We explictly %D call this pagenumber a real one, because it is independant %D of the page numbering scheme used in the document. %D %D One of the reasons for \CONTEXT\ being the first \TEX\ base %D macropackage to support sophisticated interactive \PDF\ %D files, lays in the mere fact that real page numbers are %D available in most two pass data, like references, list data %D and index entries. %D %D We will speak of \type{thisis...} when we are marking a %D location, and \type{goto...} when we point to such a %D location. The latter one can be seen as a hyperlink to the %D former one. In the next macros one we use constructs like: %D %D \starttyping %D \dostart... %D \dostop... %D \stoptyping %D %D Such macros are used to invoke the relevant specials from %D the special driver modules (see \type{spec-ini}). The flag %D \type{\iflocation} signals if we're in interactive mode. \ifdefined\buttonheight \else \newdimen\buttonheight \fi \ifdefined\buttonwidth \else \newdimen\buttonwidth \fi %D Internal references can best be set using the next few %D macros. Setting such references to unique values is %D completely up to the macros that call them. %D %D \starttyping %D \thisissomeinternal{tag}{identifier} %D \gotosomeinternal {tag}{identifier}{pagenumber}{text} %D \stoptyping %D We could do this in lua ... \newif \iflocation \newcount\locationcount \newcount\locationorder \newbox \locationbox \def\nextinternalreference {\the\locationcount} \def\nextinternalorderreference{\the\locationorder} \def\setnextinternalreference {\global\advance\locationcount\plusone} \def\setnextinternalreferences#kind#name% plural {\ctxcommand{setnextinternalreference("#kind","#name")}} \def\getinternalorderreference#kind#name% {\ctxcommand{currentreferenceorder("#kind","#name")}} \def\thisissomeinternal#kind#name% only for old time sake {\begingroup \ctxcommand{setinternalreference("","#kind:#name")}% \hbox attr \destinationattribute\lastdestinationattribute{}% \endgroup} \installcorenamespace{savedinternalreference} \letvalue{\??savedinternalreference\s!default}\!!zerocount \unexpanded\def\storeinternalreference#1#2% {\setxvalue{\??savedinternalreference\currentstructurename}{#2}} \newconditional\preferpagereferences \def\gotosomeinternal#kind#name#target#text% {\ifconditional\preferpagereferences \directgoto{#text}[page(#target)]% \else \directgoto{#text}[#kind:#name]% \fi} \def\gotonextinternal#text#target% {\directgoto{#text}[internal(#target)]} %D In this module we define three system references: one for %D handling navigational, viewer specific, commands, another %D for jumping to special pages, like the first or last one, %D and a third reference for linking tree like lists, like %D tables of contents. The latter two adapt themselves to the %D current state. %D %D An example of an action is: %D %D \starttyping %D \goto{some action}[PreviousJump] %D \stoptyping %D %D as well as: %D %D \starttyping %D \goto{some text}[\v!action(PreviousJump] %D \stoptyping %D One can also activate an automatic prefix mechanism. By %D setting the \type{\prefix} variable to \type{+}, the prefix %D is incremented, when set to \type{-} or empty, the prefix is %D reset. Other values become the prefix. \newcount\prefixcounter \newconditional\autocrossfilereferences \appendtoks \edef\p_autofile{\referencingparameter\c!autofile}% \ifx\p_autofile\v!yes \settrue \autocrossfilereferences \else \setfalse\autocrossfilereferences \fi \to \everysetupreferencing \appendtoks \edef\p_export{\referencingparameter\c!export}% \ifx\p_export\v!yes \ctxcommand{exportreferences()}% \fi \to \everygoodbye \unexpanded\def\setupglobalreferenceprefix[#prefix]% {\xdef\referenceprefix{#prefix}} \unexpanded\def\pushreferenceprefix#prefix% {\pushmacro\referenceprefix \xdef\referenceprefix{#prefix}} \unexpanded\def\popreferenceprefix {\popmacro\referenceprefix} \def\m_strc_references_prefix_yes{+} \def\m_strc_references_prefix_nop{-} \unexpanded\def\setupreferenceprefix[#prefix]% {\edef\p_prefix{#prefix}% \ifx\p_prefix\empty \let\referenceprefix\empty \else\ifx\p_prefix\m_strc_references_prefix_yes \letreferencingparameter\c!prefix\s!unknown \global\advance\prefixcounter\plusone \edef\referenceprefix{\the\prefixcounter}% \else\ifx\p_prefix\m_strc_references_prefix_nop \letreferencingparameter\c!prefix\s!unknown \let\referenceprefix\empty \else\ifx\p_prefix\s!unknown % forget about it \else \let\referenceprefix\p_prefix \fi\fi\fi\fi} \appendtoks \setupreferenceprefix[\referencingparameter\c!prefix] \to \everysetupreferencing %D We can typeset a reference using \type{\in}, \type{\at} and %D \type{\about} and goto specific locations using %D \type{\goto}. The last one does not make that much sense in %D a paper document. To complicate things, \PLAIN\ \TEX\ also %D implements an \type {\in} but fortunately that one only %D makes sense in math mode. %D %D Typesetting the reference is a bit more complicated than one %D would at first sight expect. This is due to the fact that we %D distinguish three (five) alternative calls: %D %D \placefigure %D [here][three calls] %D {Three alternatives reference calls.} %D {\startcombination[1*3] %D {\framed{\type{ \in }}} {a} %D {\framed{\type{ \at }}} {b} %D {\framed{\type{\goto}}} {c} %D \stopcombination} %D %D \startbuffer %D \in figure[fig:three calls] %D \in{figure}[fig:three calls] %D \in figure a[fig:three calls] %D \in{figure}{a}[fig:three calls] %D figure~\in[fig:three calls] %D \stopbuffer %D %D \typebuffer %D %D This turns up as: %D %D \startlines %D \getbuffer %D \stoplines %D %D The dual \type{{}} results in a split reference. In a %D document meant for paper, one is tempted to use the last %D (most straightforward) alternative. When a document is also %D meant voor electronic distribution, the former alternatives %D have preference, because everything between the \type{\in} %D and~\type{[} becomes active (and when asked for, typeset %D in a different color and typeface). % \unexpanded\def\in {\mathortext\donormalmathin \strc_references_in} % \unexpanded\def\at {\mathortext\donormalmathat \strc_references_at} % \unexpanded\def\about{\mathortext\donormalmathabout\strc_references_about} % \unexpanded\def\from {\mathortext\donormalmathfrom \strc_references_from} % \unexpanded\def\over {\mathortext\donormalmathover \strc_references_about} % \definecommand in {\strc_references_in} % \definecommand at {\strc_references_at} % \definecommand about {\strc_references_about} % \definecommand from {\strc_references_from} % \definecommand over {\strc_references_about} % needed here, else math problems \appendtoks \ifdefined\in \let\normalmathin \in \unexpanded\def\in {\mathortext\normalmathin \strc_references_in } \else \let\in \strc_references_in \fi \ifdefined\at \let\normalmathat \at \unexpanded\def\at {\mathortext\normalmathat \strc_references_at } \else \let\at \strc_references_at \fi \ifdefined\about \let\normalmathabout\about \unexpanded\def\about{\mathortext\normalmathabout\strc_references_about} \else \let\about\strc_references_about \fi \ifdefined\from \let\normalmathfrom \from \unexpanded\def\from {\mathortext\normalmathfrom \strc_references_from } \else \let\from \strc_references_from \fi \ifdefined\over \let\normalmathover \over \unexpanded\def\over {\mathortext\normalmathover \strc_references_about} \else \let\over \strc_references_about \fi \to \everydump \def\filterreference #key{\ctxcommand{filterreference("#key")}} % no checking, expanded \unexpanded\def\getreferenceentry#key{\ctxcommand{filterreference("#key")}} % no checking, unexpanded \def\currentreferencenumber {\filterreference{number}} \def\currentreferencepage {\filterreference{page}} \def\currentreferencetitle {\filterreference{title}} \def\currentreferencetext {\filterreference{text}} \def\currentreferencedefault {\filterreference{default}} \def\currentreferencerealpage{\filterreference{realpage}} %D The most straightforward way of retrieving references is %D using \type{\ref}. \unexpanded\def\getreference % checking, unexpanded {\dodoubleargument\strc_references_get_reference} \def\strc_references_get_reference[#key][#label]% #key = number page title text default realpage ... {\ifsecondargument \doifreferencefoundelse{#label}{\ctxcommand{filterreference("#key")}}\dummyreference \else \dummyreference \fi} \let\ref\getreference %D Special cases: \unexpanded\def\strc_references_about[#label]% {\dontleavehmode \begingroup \let\crlf\space \let\\\space \postponenotes \referencingparameter\c!left \doifreferencefoundelse{#label} {\goto{\limitatetext\currentreferencetitle{\referencingparameter\c!width}\unknown}[#label]}% not so efficient (dup lookup) {}% todo \referencingparameter\c!right \endgroup} %D The previously discussed setup macro lets us specify the %D representation of references. A symbol reference does not %D show the specific data, like the number of a figure, but %D shows one of: \hbox {$^\goforwardcharacter$ %D $^\gobackwardcharacter$ $^\gonowherecharacter$}, depending %D on the direction to go. %D %D \starttyping %D ... \somewhere{backward text}{forward text}[someref] ... %D ... \atpage[someref] ... %D \stoptyping % 0 = unknown % 1 = same % 2 = before % 3 = after \def\strc_references_by_reference_page_state#unknown#before#current#after% {\ifcase\referencepagestate\space#unknown\or#current\or#before\or#after\fi} % \unexpanded\def\somewhere#backward#foreward#dummy[#label]% #dummy gobbles space around #foreward % {\doifreferencefoundelse{#label}% usage needs checking (useless) % {\goto{\strc_references_by_reference_page_state{#label}{#backward}{}{#foreward}}[#label]} % {[#label]}} % % better: \unexpanded\def\somewhere#backward#foreward#dummy[#label]% #dummy gobbles space around #foreward {\doifreferencefoundelse{#label}% {\strc_references_by_reference_page_state{#label}{\goto{#backward}[#label]}{}{\goto{#foreward}[#label]}} {[#label]}} \unexpanded\def\atpage[#label]% todo {\doifreferencefoundelse{#label}% kind of inefficient as \goto also analyzes {\goto {\strc_references_by_reference_page_state {\labeltexts\v!page\dummyreference}% {\labeltext\v!hencefore}% {\labeltexts\v!atpage\currentreferencepage}% {\labeltext\v!hereafter}}% [#label]} {[#label]}} \unexpanded\def\referencesymbol {\hbox{\strut\high {\setupsymbolset[\interactionparameter\c!symbolset]% \symbol[\strc_references_by_reference_page_state\v!somewhere\v!nowhere\v!previous\v!next]}}} %D The other alternatives just conform their names: only the %D label, only the text, or the label and the text. % \dounknownreference -> \dummyreference \def\symbolreference[#label]% for old times sake {\goto{\referencesymbol}[#label]} % \referencecontentmode 0=all 1=label 2=text 3=symbol \newtoks\leftreferencetoks \newtoks\rightreferencetoks \newtoks\defaultleftreferencetoks \newtoks\defaultrightreferencetoks \def\leftofreferencecontent {\nobreakspace} % we cannot do \definereferenceformat[at] .. so we need this \let\rightofreferencecontent \empty \let\leftofreference \empty \let\rightofreference \empty \installcorenamespace{referencinginteraction} \setvalue{\??referencinginteraction\v!all}% {\the\leftreferencetoks \doifsometokselse\leftreferencetoks \leftofreferencecontent \donothing \leftofreference \currentreferencecontent \rightofreference \doifsometokselse\rightreferencetoks\rightofreferencecontent\donothing \the\rightreferencetoks} \setvalue{\??referencinginteraction\v!label}% {\leftofreference \the\leftreferencetoks \the\rightreferencetoks \rightofreference} \setvalue{\??referencinginteraction\v!text}% {\leftofreference \currentreferencecontent \rightofreference} \setvalue{\??referencinginteraction\v!symbol}% {\referencesymbol} \def\referencesequence {\csname\??referencinginteraction \ifcsname\??referencinginteraction\referencingparameter\c!interaction\endcsname \referencingparameter\c!interaction \else \v!all \fi \endcsname} \newtoks\everyresetinatreference \appendtoks \glet\leftofreference \relax \glet\rightofreference\relax \to \everyresetinatreference \def\strc_references_start_goto {\dontleavehmode \begingroup} \def\strc_references_stop_goto {\the\everyresetinatreference \endgroup} \def\strc_references_pickup_goto {\dodoublegroupempty\strc_references_pickup_goto_indeed} \def\strc_references_pickup_goto_indeed#left#right#dummy[#label]% #dummy gobbles spaces (really needed) {\leftreferencetoks \iffirstargument {#left}% \else \defaultleftreferencetoks \let\leftofreferencecontent\empty \fi \rightreferencetoks \ifsecondargument {#right}% \else \defaultrightreferencetoks \let\rightofreferencecontent\empty \fi % inefficient: double resolve \doifreferencefoundelse{#label} % we need to resolve the text {\goto{\referencesequence}[#label]} {\let\currentreferencecontent\dummyreference \goto{\referencesequence}[#label]}% \strc_references_stop_goto} \unexpanded\def\strc_references_in{\strc_references_start_goto\let\currentreferencecontent\currentreferencedefault\strc_references_pickup_goto} \unexpanded\def\strc_references_at{\strc_references_start_goto\let\currentreferencecontent\currentreferencepage \strc_references_pickup_goto} %D \macros %D {definereferenceformat} %D %D The next few macros were made for for David Arnold and Taco %D Hoekwater. They can be used for predefining reference %D texts, and thereby stimulate efficiency. %D %D \starttyping %D \definereferenceformat[informula] [left=(,right=),text=formula] %D \definereferenceformat[informulas] [left=(,right=),text=formulas] %D \definereferenceformat[andformula] [left=(,right=),text=and] %D \definereferenceformat[andformulas][left=(,right=),text=and] %D %D \informula [b] and \informula [for:c] %D the \informula {formulas}[b] \informula {and} [for:c] %D the \informulas {formulas}[b] \informula {and} [for:c] %D the \informulas [b] \informula {en} [for:c] %D the \informulas [b] \andformula [for:c] %D \stoptyping %D %D Instead of a text, one can specify a label, which should %D be defined with \type {\setuplabeltext}. %D %D Watch out: the second argument is somewhat special and mostly %D meant for a suffix to a number: %D %D \startbuffer %D \definereferenceformat [intesta] [left=(,right=),text=Whatever~] %D \definereferenceformat [intestb] [left=(,right=),label=figure] %D %D \placeformula[x]\startformula a \stopformula %D %D \starttabulate[|||||] %D \NC \in [x] \NC \in {left}[x] \NC \in {}{right}[x] \NC \in {left}{right}[x] \NC \NR %D \NC \intesta[x] \NC \intesta{left}[x] \NC \intesta{}{right}[x] \NC \intesta{left}{right}[x] \NC \NR %D \NC \intestb[x] \NC \intestb{left}[x] \NC \intestb{}{right}[x] \NC \intestb{left}{right}[x] \NC \NR %D \stoptabulate %D \stopbuffer %D %D \typebuffer \getbuffer % to be done: interfaced \installcorenamespace{referenceformat} \installcommandhandler \??referenceformat {referenceformat} \??referenceformat \appendtoks \setuevalue\currentreferenceformat{\strc_references_apply_format{\currentreferenceformat}}% \to \everydefinereferenceformat \setupreferenceformat [\c!left=, \c!right=, \c!text=, \c!label=, \c!autocase=\v!no, \c!style=, \c!type=default, % to be done: interfaced \c!setups=, \c!color=] \unexpanded\def\strc_references_apply_format#name% {\strc_references_start_goto \edef\currentreferenceformat{#name}% \gdef\leftofreference {\referenceformatparameter\c!left }% \gdef\rightofreference {\referenceformatparameter\c!right }% \edef\currentreferenceformatlabel {\referenceformatparameter\c!label }% \edef\currentreferenceformattype {\referenceformatparameter\c!type }% \edef\currentreferenceformatsetups {\referenceformatparameter\c!setups }% \edef\currentreferenceformatautocase{\referenceformatparameter\c!autocase}% \usereferenceformatstyleandcolor\c!style\c!color \ifx\currentstyleparameter\empty \else \resetinteractionparameter\c!style \fi \ifx\currentcolorparameter\empty \else \resetinteractionparameter\c!contrastcolor \resetinteractionparameter\c!color \fi \ifx\currentreferenceformatlabel\autoreferencelabeltextflag \edef\currentreferenceformatlabel{\autoreferencelabeltext}% \fi \ifx\currentreferenceformatautocase\v!yes \setcharactercleaning[1]% \fi \ifx\currentreferenceformatlabel\empty \defaultleftreferencetoks {\referenceformatparameter\c!text}% \defaultrightreferencetoks\emptytoks \else \defaultleftreferencetoks {\leftlabeltext \currentreferenceformatlabel}% \defaultrightreferencetoks{\rightlabeltext\currentreferenceformatlabel}% \fi \ifx\currentreferenceformattype\empty \def\currentreferenceformattype{default}% \fi % \ifx\currentreferenceformatsetups\empty \def\currentreferencecontent{\filterreference\currentreferenceformattype}% \else \def\currentreferencecontent{\directsetup\currentreferenceformatsetups}% \fi % \let\leftofreferencecontent \empty \let\rightofreferencecontent\empty \strc_references_pickup_goto} \def\autoreferencelabeltextflag{*} % a proper key like 'auto' or 'name' can clash with a label key \unexpanded\def\autoreferencelabeltext {\ctxcommand{getcurrentreferencemetadata("name")}} % \starttext % \definereferenceformat[inxx] [left=(,right=),text=txt] % \setupinteraction[state=start] % \chapter[one]{xx} % [\goto{state}[file(mk-last-state)]] % [\goto{state} [file(mk-last-state)]] % [\at{page} [one]] % [\at{page}[one]] % [\at{page}{okay}[one]] % [\inxx{a}{b}[one]] % \stoptext % \startsetups referenceformat:numberplustext % \filterreference{number}, \filterreference{title} % \stopsetups % % \definereferenceformat[hellup][text=Hellup ,setups=referenceformat:numberplustext] %D In interactive documents going to a specific location is not %D bound to cross references. The \type{\goto} commands can be %D used to let users access another part of the document. In %D this respect, interactive tables of contents and registers %D can be considered goto's. Because in fact a \type{\goto} is %D just a reference without reference specific data, the %D previous macros are implemented using the goto %D functionality. %D %D \showsetup{goto} %D %D One important characteristic is that the first argument of %D \type{\goto} (and therefore \type{\at} and \type{\in} is %D split at spaces. This means that, although hyphenation is %D prevented, long references can cross line endings. % \starttext % \setupinteraction[state=start] % [\goto{state}[file(mk-last-state)]] % [\goto{state} [file(mk-last-state)]] % \stoptext \newconditional\uselocationstrut \settrue\uselocationstrut \def\extrareferencearguments {\luaconditional\highlighthyperlinks,\luaconditional\gotonewwindow,"\currentviewerlayer"} \unexpanded\def\directgoto {\ifconditional\uselocationstrut \expandafter\dodirectgoto \else \expandafter\dodirectgotohtdp \fi} \unexpanded\def\goto {\ifconditional\uselocationstrut \expandafter\dogoto \else \expandafter\dogotohtdp \fi} % The unbox trick is needed in order to permit \par inside a reference. Otherwise % the reference attribute migrates to the outer boxes. \newcount\lastsavedreferenceattribute \newbox\referencebox \def\revivesavedreferenceattribute % sometimes handy as no test etc needed {\attribute\referenceattribute\lastsavedreferenceattribute} \def\dodirectgoto#content[#label]% no test for valid references {\dontleavehmode \begingroup \attribute\referenceattribute\attributeunsetvalue \global\lastsavedreferenceattribute\attributeunsetvalue \iflocation \ctxcommand{injectreference("\referenceprefix","#label",\number\ht\strutbox,\number\dp\strutbox,\extrareferencearguments)}% \setlocationattributes \setstrut % can be option \global\lastsavedreferenceattribute\lastreferenceattribute \attribute\referenceattribute\lastreferenceattribute \dostarttagged\t!link\empty % not here #content% \dostoptagged \else #content% \fi \endgroup} \def\dodirectgotohtdp#content[#label]% no test for valid references {\dontleavehmode \begingroup \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{injectreference("\referenceprefix","#label",\number\dimexpr\interactionparameter\c!height\relax,\number\dimexpr\interactionparameter\c!depth\relax,\extrareferencearguments)}% \setlocationattributes \attribute\referenceattribute\lastreferenceattribute \global\lastsavedreferenceattribute\lastreferenceattribute \dostarttagged\t!link\empty #content% \dostoptagged \else #content% \fi \endgroup} \def\dogoto#content#dummy[#label]% #dummy gobbles spaces {\dontleavehmode \begingroup %\setbox\referencebox\hbox\bgroup % experiment, might change again to non \par support \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{doifelsereference("\referenceprefix","#label",\extrareferencearguments)}% {\expandtexincurrentreference \ctxcommand{injectcurrentreference(\number\ht\strutbox,\number\dp\strutbox)}% \setlocationattributes \setstrut % can be option \global\lastsavedreferenceattribute\lastreferenceattribute \attribute\referenceattribute\lastreferenceattribute \dostarttagged\t!link\empty #content% \dostoptagged}% {#content}% \else #content% \fi %\egroup\unhbox\referencebox} \endgroup} \def\dogotohtdp#content#dummy[#label]% dummy gobbles spaces {\dontleavehmode \begingroup \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{doifelsereference("\referenceprefix","#label",\extrareferencearguments)}% {\expandtexincurrentreference \ctxcommand{injectcurrentreference(\number\dimexpr\interactionparameter\c!height\relax,\number\dimexpr\interactionparameter\c!depth\relax)}% \setlocationattributes \global\lastsavedreferenceattribute\lastreferenceattribute \attribute\referenceattribute\lastreferenceattribute \dostarttagged\t!link\empty #content% \dostoptagged}% {#content}% \else #content% \fi \endgroup} \unexpanded\def\directgotobox#content[#label]% no test for valid references {\dontleavehmode \begingroup \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{injectreference("\referenceprefix","#label",nil,nil,\extrareferencearguments)}% \setlocationattributes \global\lastsavedreferenceattribute\lastreferenceattribute \dostarttagged\t!link\empty \hbox attr \referenceattribute \lastreferenceattribute {#content}% \dostoptagged \else #content% \fi \endgroup} \unexpanded\def\directgotospecbox#resolver#content[#label]% no test for valid references {\dontleavehmode \begingroup \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{injectreference("\referenceprefix","#label",nil,nil,\extrareferencearguments)}% \setlocationcolorspec{#resolver}% no consequence for strut \global\lastsavedreferenceattribute\lastreferenceattribute \dostarttagged\t!link\empty \hbox attr \referenceattribute \lastreferenceattribute {#content}% \dostoptagged \else #content% \fi \endgroup} \unexpanded\def\directgotodumbbox#content[#label]% no test for valid references {\dontleavehmode \begingroup \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{injectreference("\referenceprefix","#label",nil,nil,\extrareferencearguments)}% \global\lastsavedreferenceattribute\lastreferenceattribute \dostarttagged\t!link\empty \hbox attr \referenceattribute \lastreferenceattribute {#content}% \dostoptagged \else #content% \fi \endgroup} \unexpanded\def\gotobox#content[#label]% {\dontleavehmode \begingroup \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \iflocation \ctxcommand{doifelsereference("\referenceprefix","#label",\extrareferencearguments)}% {\expandtexincurrentreference \ctxcommand{injectcurrentreference(nil,nil)}% \setlocationattributes \global\lastsavedreferenceattribute\lastreferenceattribute \dostarttagged\t!link\empty \hbox attr \referenceattribute \lastreferenceattribute {#content}% \dostoptagged}% {#content}% \else #content% \fi \endgroup} \unexpanded\def\gotowdhtbox#width#height[#label]% fast variant for overlays {\dontleavehmode \begingroup \setbox\scratchbox\emptyhbox \wd\scratchbox#width% \ht\scratchbox#height% \global\lastsavedreferenceattribute\attributeunsetvalue \attribute\referenceattribute\attributeunsetvalue \ctxcommand{doifelsereference("\referenceprefix","#label",\extrareferencearguments)}% {\ctxcommand{injectcurrentreference(nil,nil)}% \global\lastsavedreferenceattribute\lastreferenceattribute \hbox attr \referenceattribute \lastreferenceattribute {\box\scratchbox}} {\box\scratchbox}% \endgroup} %D An reference to another document can be specified as a file %D or as an \URL. Both are handled by the same mechanism and %D can be issued by saying something like: %D %D \starttyping %D \goto[dictionary::the letter a] %D \stoptyping %D %D One can imagine that many references to such a dictionary %D are made, so in most cases such a document reference in an %D indirect one. %D %D \showsetup{useexternaldocument} %D %D For example: %D %D \starttyping %D \useexternaldocument %D [dictionary][engldict] %D [The Famous English Dictionary] %D \stoptyping %D %D The next macro implements these relations, and also take %D care of loading the document specific references. %D %D The \URL\ alternative takes four arguments: %D %D \showsetup{useURL} %D %D like: %D %D \starttyping %D \useURL %D [dictionary][http://www.publisher.com/public][engldict] %D [The Famous English Dictionary] %D \stoptyping %D %D Several specifications are possible: %D %D \starttyping %D \useURL [id] [url] [file] [description] %D \useURL [id] [url] [file] %D \useURL [id] [url] %D \stoptyping %D %D This time we don't load the references when no file is %D specified. This is logical when one keeps in mind that a %D valid \URL\ can also be a mail address. \unexpanded\def\useurl {\doquadrupleempty\strc_references_use_url } % so that they can be used in expanded arguments \unexpanded\def\usefile{\dotripleargument\strc_references_use_file} % so that they can be used in expanded arguments \let\useURL \useurl \let\useexternaldocument\usefile \def\strc_references_use_url[#label][#url][#file][#description]% {\ctxcommand{useurl("#label",\!!bs\detokenize{#url}\!!es,\!!bs\detokenize{#file}\!!es,\!!bs\detokenize{#description}\!!es)}} \def\strc_references_use_file[#label][#file][#description]% {\ctxcommand{usefile("#label",\!!bs\detokenize{#file}\!!es,\!!bs\detokenize{#description}\!!es)}} \def\doifurldefinedelse #label{\ctxcommand{doifurldefinedelse ("#label")}} \def\doiffiledefinedelse#label{\ctxcommand{doiffiledefinedelse("#label")}} %D \macros %D {url,setupurl} %D %D We also have: \type{\url} for directly calling the %D description. So we can say: %D %D \starttyping %D \useURL [one] [http://www.test.nl] %D \useURL [two] [http://www.test.nl] [] [Some Site] %D %D \url[one] or \from[two] or \goto{Whatever Site}[URL(two)] %D \stoptyping %D %D An \URL\ can be set up with %D %D \showsetup{setupurl} \installcorenamespace{url} \installdirectcommandhandler \??url {url} \setupurl [\c!style=\v!type, \c!color=] \unexpanded\def\url[#label]% move \hyphenatedurl to lua end (is already lua) {\dontleavehmode \begingroup \useurlstyleandcolor\c!style\c!color \hyphenatedurl{\ctxcommand{geturl("#label")}}% \endgroup} %D This macro is hooked into a support macro, and thereby %D \URL's break ok, according to the setting of a switch, %D %D \startbuffer %D \useURL %D [test] %D [sentence_sentence~sentence//sentence:sentence.sentence] %D \stopbuffer %D %D \typebuffer %D %D Such an \URL\ is, depending on the settings, hyphenated as: %D %D \getbuffer %D When defining the external source of information, one can %D also specify a suitable name (the last argument). This name %D can be called upon with: %D %D \showsetup{from} %D %D We keep this for compatibility reasons, hence the hackery. \unexpanded\def\strc_references_from {\dosingleempty\strc_references_do_special_from} \def\strc_references_do_special_from[#label]% {\dontleavehmode \goto{\ctxcommand{from("#label")}}[fileorurl(#label)]} \def\dofromurldescription#content% called at the lua end {#content} \def\dofromurlliteral#content% called at the lua end {\useurlstyleandcolor\c!style\c!color \hyphenatedurl{#content}} \let\dofromfiledescription\dofromurldescription \let\dofromfileliteral \dofromurlliteral % maybe some day setupfile that inherits from url %D We also support: %D %D \starttyping %D \goto{some text}[file(identifier{location}] %D \stoptyping %D %D which is completely equivalent with %D %D \starttyping %D \goto{some text}[identifier::location] %D \stoptyping %D A special case of references are those to programs. These, %D very system dependant references are implemented by abusing %D some of the previous macros. %D %D \showsetup{setupprograms} %D \showsetup{defineprogram} %D \showsetup{program} % changed functionality ! %D %D The latter gives access to the description of the program, %D being the last argument to the definition command. % also lua, like urls and files \installcorenamespace{programs} \installdirectcommandhandler \??programs {programs} \unexpanded\def\defineprogram {\dotripleargument\strc_references_define_program} \def\strc_references_define_program[#name][#program][#description]% {\ctxcommand{defineprogram("#name",\!!bs#program\!!es,\!!bs#description\!!es)}} \def\program[#name]% incompatible, more consistent, hardy used anyway {\dontleavehmode \begingroup \useprogramsstyleandcolor\c!style\c!color \ctxcommand{getprogram("#name","\directprogramsparameter\c!alternative","\directprogramsparameter\c!space")}% \endgroup} %D As we can see, we directly use the special reference %D mechanism, which means that %D %D \starttyping %D \goto{some text}[program(name{args})] %D \stoptyping %D %D is valid. %D The next macro provides access to the actual pagenumbers. %D When documenting and sanitizing the original reference %D macros, I decided to keep the present meaning as well as to %D make this meaning available as a special reference method. %D So now one can use: %D %D \starttyping %D \gotopage{some text}[location] %D \gotopage{some text}[number] %D \gotopage{some text}[file::number] %D \stoptyping %D %D as well as: %D %D \starttyping %D \goto{some text}[page(location)] %D \goto{some text}[page(number)] %D \goto{some text}[file::page(number)] %D \stoptyping %D %D Here location is a keyword like \type{nextpage}. %D %D \showsetup{gotopage} \unexpanded\def\definepage {\dodoubleargument\strc_references_define_page} \def\strc_references_define_page[#name][#target]% {\definereference[#name][page(#target)]} \def\gotopage#text[#target]% {\goto{#text}[\v!page(#target)]} %D The previous definitions are somewhat obsolete so we don't %D use it here. %D We can cross link documents by using: %D %D \showsetup{coupledocument} %D %D like: %D %D \starttyping %D \coupledocument[print][somefile][chapter,section] %D \stoptyping %D %D After which when applicable, we have available the %D references: %D %D \starttyping %D \goto{print version}[print::chapter] %D \stoptyping %D %D and alike. The title placement definition macros have a %D key \type{file}, which is interpreted as the file to jump %D to, that is, when one clicks on the title. \def\coupledocument {\doquadrupleempty\strc_references_couple_document} \def\strc_references_couple_document[#name][#file][#sections][#description]% {\ifthirdargument % this will be done differently (when it's needed) \fi} %D \macros %D {dotextprefix} %D %D In previous macros we used \type {\dotextprefix} to %D generate a space between a label and a number. %D %D \starttyping %D \dotextprefix{text} %D \stoptyping %D %D Only when \type {text} is not empty, a space is inserted. \def\dotextprefix#text% {\begingroup \setbox\scratchbox\hbox{#text}% to be solved some day \ifdim\wd\scratchbox>\zeropoint \unhbox\scratchbox \edef\p_separator{\referencingparameter\c!separator}% \ifx\p_separator\empty \else \removeunwantedspaces % remove is new \p_separator \fi \else \unhbox\scratchbox \fi \endgroup} %D In the next settings we see some variables that were not %D used here and that concern the way the pagenumbers refered %D to are typeset. \setupreferencing [\c!state=\v!start, \c!autofile=\v!no, \v!part\c!number=\v!yes, \v!chapter\c!number=\v!no, \c!interaction=\v!all, \c!convertfile=\v!no, %\c!strut=\v!no, % some day an option \c!prefix=, \c!width=.75\makeupwidth, \c!left=\quotation\bgroup, \c!right=\egroup, \c!global=\v!no, \c!expansion=\v!no, \c!separator=\nonbreakablespace, \c!export=\v!no] \setupprograms [\c!directory=, \c!style=\v!type, \c!color=] \definereference [\v!CloseDocument ] [action(close)] \definereference [\v!ExitViewer ] [action(exit)] \definereference [\v!FirstPage ] [action(first)] \definereference [\v!LastPage ] [action(last)] \definereference [\v!NextJump ] [action(forward)] \definereference [\v!NextPage ] [action(next)] \definereference [\v!PauseMovie ] [action(pausemovie)] \definereference [\v!PauseSound ] [action(pausesound)] \definereference [\v!PauseRendering ] [action(pauserendering)] \definereference [\v!PreviousJump ] [action(backward)] \definereference [\v!PreviousPage ] [action(previous)] \definereference [\v!PrintDocument ] [action(print)] \definereference [\v!SaveForm ] [action(exportform)] \definereference [\v!LoadForm ] [action(importform)] \definereference [\v!ResetForm ] [action(resetform)] \definereference [\v!ResumeMovie ] [action(resumemovie)] \definereference [\v!ResumeSound ] [action(resumesound)] \definereference [\v!ResumeRendering ] [action(resumerendering)] \definereference [\v!SaveDocument ] [action(save)] \definereference [\v!SaveNamedDocument] [action(savenamed)] \definereference [\v!OpenNamedDocument] [action(opennamed)] \definereference [\v!SearchDocument ] [action(search)] \definereference [\v!SearchAgain ] [action(searchagain)] \definereference [\v!StartMovie ] [action(startmovie)] \definereference [\v!StartSound ] [action(startsound)] \definereference [\v!StartRendering ] [action(startrendering)] \definereference [\v!StopMovie ] [action(stopmovie)] \definereference [\v!StopSound ] [action(stopsound)] \definereference [\v!StopRendering ] [action(stoprendering)] \definereference [\v!SubmitForm ] [action(submitform)] \definereference [\v!ToggleViewer ] [action(toggle)] \definereference [\v!ViewerHelp ] [action(help)] \definereference [\v!HideField ] [action(hide)] \definereference [\v!ShowField ] [action(show)] \definereference [\v!GotoPage ] [action(gotopage)] \definereference [\v!Query ] [action(query)] \definereference [\v!QueryAgain ] [action(queryagain)] \definereference [\v!FitWidth ] [action(fitwidth)] \definereference [\v!FitHeight ] [action(fitheight)] \definereference [\v!ShowThumbs ] [action(thumbnails)] \definereference [\v!ShowBookmarks ] [action(bookmarks)] \definereference [\v!HideLayer ] [action(hidelayer)] \definereference [\v!VideLayer ] [action(videlayer)] \definereference [\v!ToggleLayer ] [action(togglelayer)] \definereference [\v!firstpage] [page(firstpage)] \definereference [\v!previouspage] [page(previouspage)] \definereference [\v!nextpage] [page(nextpage)] \definereference [\v!lastpage] [page(lastpage)] \definereference [\v!forward] [page(forward)] \definereference [\v!backward] [page(backward)] \definereference [\v!firstsubpage] [page(firstsubpage)] \definereference [\v!previoussubpage] [page(previoussubpage)] \definereference [\v!nextsubpage] [page(nextsubpage)] \definereference [\v!lastsubpage] [page(lastsubpage)] % we can do this but only when later in resolve (else problems with \chapter[first]{...} % % \definereference [\v!first] [page(firstpage)] % \definereference [\v!previous] [page(prevpage)] % \definereference [\v!next] [page(nextpage)] % \definereference [\v!last] [page(lastpage)] % \definereference [\v!first\v!sub] [page(firstsubpage)] % \definereference [\v!previous\v!sub] [page(prevsubpage)] % \definereference [\v!next\v!sub] [page(nextsubpage)] % \definereference [\v!last\v!sub] [page(lastsubpage)] %D We cannot set up buttons (not yet, this one calls a menu macro): %D New (and experimental): % \starttext % \chapter{test} % \placefigure[here][xx:1]{}{\framed{one}} \placefigure[here][xx:2]{}{\framed{three}} % \placetable [here][xx:3]{}{\framed{two}} \placetable [here][xx:4]{}{\framed{four}} % \start % \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4] % \stop \blank \start % \setupreferencestructureprefix[default][prefix=no] % \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4] % \stop \blank \start % \setupreferencestructureprefix[float][default][prefix=no] % \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4] % \stop \blank \start % \setupreferencestructureprefix[figure][default][prefix=no] % \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4] % \stop \blank % \stoptext % todo: parameterhandler \installcorenamespace{referencingprefix} \def\getreferencestructureprefix#kind#name#category% name will change {{ prefix = "\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefix", separatorset = "\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixseparatorset", conversion = "\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixconversion", conversionset = "\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixconversionset", set = "\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixset", segments = "\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixsegments", connector = \!!bs\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixconnector\!!es, }} \unexpanded\def\setupreferencestructureprefix {\dotripleempty\strc_references_setup_reference_structure_prefix} \def\strc_references_setup_reference_structure_prefix[#kind][#category][#settings]% {\ifthirdargument \getparameters[\??referencingprefix#kind:#category][#settings]% \else\ifsecondargument \getparameters[\??referencingprefix:#kind][#category]% \fi\fi} \def\referencestructureprefixparameter#kind#name#category#parameter% {\ifcsname\??referencingprefix#name:#category#parameter\endcsname \csname\??referencingprefix#name:#category#parameter\endcsname \else\ifcsname\??referencingprefix#kind:#category#parameter\endcsname \csname \??referencingprefix#kind:#category#parameter\endcsname \else\ifcsname\??referencingprefix:#category#parameter\endcsname \csname \??referencingprefix:#category#parameter\endcsname \fi\fi\fi} % \def\currentreferencedefault % {\ctxcommand{filterdefaultreference()}} \def\currentreferencedefault {\ctxcommand{filterreference("\s!default",\ctxcommand{getcurrentprefixspec("\s!default")})}} % needs testing % % \def\currentreferencedefault % {\ctxcommand{currentreferencedefault()}} %D Not all support is visible by looking at the \TEX\ code; here is one of those:^ %D %D \starttyping %D \startinteractionmenu[right] %D \startbut [section(first {chapter})] first chapter \stopbut %D \startbut [section(previous{chapter})] previous chapter \stopbut %D \startbut [section(next {chapter})] next chapter \stopbut %D \startbut [section(last {chapter})] last chapter \stopbut %D \blank[2*big] %D \startbut [section(first {section})] first section \stopbut %D \startbut [section(previous{section})] previous section \stopbut %D \startbut [section(next {section})] next section \stopbut %D \startbut [section(last {section})] last section \stopbut %D \stopinteractionmenu %D \stoptyping \protect \endinput % tricky: % % \enabletrackers[nodes.references] % \setupinteraction[state=start] % \def\KnuthTest{\input knuth } % \def\KnuthTest{\input tufte } % \def\TufteTest{\input tufte } % \defineoverlay[xxx][\overlaybutton{page(3)}] % \setupbackgrounds[text][background=xxx] % \starttext % test {\red \KnuthTest} test \par % \button{test}[page(1)] \par % \goto{page 2 \TeX}[page(2)] \goto{page 2 \TeX}[page(2)] \goto{\TufteTest}[page(2)] test \page % test \goto{page 3}[page(3)] \goto{\TufteTest\space\par\TufteTest}[page(4)] test \page % \goto{page 1}[page(1)] \goto{\TufteTest\space test}[page(1)] \page % \goto{page 1}[page(1)] \goto{\KnuthTest\space test}[page(1)] \page % test \goto{page 1}[page(1)] {\goto{\KnuthTest\space test}[page(1)]} test % \goto{page 1}[page(1)] \goto{\TufteTest}[page(1)] test \page % \stoptext �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-032.mkii�������������������������������0000644�0001750�0001750�00000037374�11754241457�024034� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=unic-032, %D version=2006.03.30, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 32, %D author={Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startunicodevector 32 \expandafter\strippedcsname \ifcase\numexpr#1\relax \enspace \or % U+2000 EN QUAD \emspace \or % U+2001 EM QUAD \enspace \or % U+2002 EN SPACE \emspace \or % U+2003 EM SPACE \unic@threeperemspace \or % U+2004 THREE-PER-EM SPACE \unic@fourperemspace \or % U+2005 FOUR-PER-EM SPACE \unic@sixperemspace \or % U+2006 SIX-PER-EM SPACE \unic@figurespace \or % U+2007 FIGURE SPACE \unmic@punctiationspace \or % U+2008 PUNCTUATION SPACE \thinspace \or % U+2009 THIN SPACE \unic@hairspace \or % U+200A HAIR SPACE \unic@zerowidthspace \or % U+200B ZERO WIDTH SPACE \unic@zerowidthnonjoiner \or % U+200C ZERO WIDTH NON-JOINER \unic@zerowidthjoiner \or % U+200D ZERO WIDTH JOINER \unknownchar \or % U+200E LEFT-TO-RIGHT MARK \unknownchar \or % U+200F RIGHT-TO-LEFT MARK \breakinghyphen \or % U+2010 HYPHEN \nonbreakinghyphen \or % U+2011 NON-BREAKING HYPHEN \endash \or % U+2012 FIGURE DASH \endash \or % U+2013 EN DASH \emdash \or % U+2014 EM DASH \emdash \or % U+2015 HORIZONTAL BAR \unic@doubleverticalline \or % U+2016 DOUBLE VERTICAL LINE \unic@doublelowline \or % U+2017 DOUBLE LOW LINE \quoteleft \or % U+2018 LEFT SINGLE QUOTATION MARK \quoteright \or % U+2019 RIGHT SINGLE QUOTATION MARK \quotesinglebase \or % U+201A SINGLE LOW-9 QUOTATION MARK \unic@quoteleftreversed \or % U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK \quotedblleft \or % U+201C LEFT DOUBLE QUOTATION MARK \quotedblright \or % U+201D RIGHT DOUBLE QUOTATION MARK \quotedblbase \or % U+201E DOUBLE LOW-9 QUOTATION MARK \unic@quotedblleftreversed \or % U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK \textdag \or % U+2020 DAGGER \textddag \or % U+2021 DOUBLE DAGGER \textbullet \or % U+2022 BULLET \blacktriangleright \or % U+2023 TRIANGULAR BULLET \unic@onedotleader \or % U+2024 ONE DOT LEADER \unic@twodotleader \or % U+2025 TWO DOT LEADER \periods \or % U+2026 HORIZONTAL ELLIPSIS % was: \textellipsis \unic@hyphenationpoint \or % U+2027 HYPHENATION POINT \crlf \or % U+2028 LINE SEPARATOR \endgraf \or % U+2029 PARAGRAPH SEPARATOR \unknownchar \or % U+202A LEFT-TO-RIGHT EMBEDDING \unknownchar \or % U+202B RIGHT-TO-LEFT EMBEDDING \unknownchar \or % U+202C POP DIRECTIONAL FORMATTING \unknownchar \or % U+202D LEFT-TO-RIGHT OVERRIDE \unknownchar \or % U+202E RIGHT-TO-LEFT OVERRIDE \ \or % U+202F NARROW NO-BREAK SPACE \perthousand \or % U+2030 PER MILLE SIGN \unknownchar \or % U+2031 PER TEN THOUSAND SIGN \prime \or % U+2032 PRIME \unic@doubleprime \or % U+2033 DOUBLE PRIME \unic@tripleprime \or % U+2034 TRIPLE PRIME \backprime \or % U+2035 REVERSED PRIME \unic@reverseddoubleprime \or % U+2036 REVERSED DOUBLE PRIME \unic@reversedtripleprime \or % U+2037 REVERSED TRIPLE PRIME \unknownchar \or % U+2038 CARET \guilsingleleft \or % U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \guilsingleright \or % U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \unknownchar \or % U+203B REFERENCE MARK \unic@doubleexclamationmark \or % U+203C DOUBLE EXCLAMATION MARK \unknownchar \or % U+203D INTERROBANG \unknownchar \or % U+203E OVERLINE \unknownchar \or % U+203F UNDERTIE \unknownchar \or % U+2040 CHARACTER TIE \unknownchar \or % U+2041 CARET INSERTION POINT \unknownchar \or % U+2042 ASTERISM \unknownchar \or % U+2043 HYPHEN BULLET \unic@fractionslash \or % U+2044 FRACTION SLASH \unknownchar \or % U+2045 LEFT SQUARE BRACKET WITH QUILL \unknownchar \or % U+2046 RIGHT SQUARE BRACKET WITH QUILL \unic@doublequestionmark \or % U+2047 DOUBLE QUESTION MARK \unic@exclamationquestionmark\or % U+2048 QUESTION EXCLAMATION MARK \unic@questionexclamationmark\or % U+2049 EXCLAMATION QUESTION MARK \unknownchar \or % U+204A TIRONIAN SIGN ET \unic@reversedpilcrowsign \or % U+204B REVERSED PILCROW SIGN \unknownchar \or % U+204C BLACK LEFTWARDS BULLET \unknownchar \or % U+204D BLACK RIGHTWARDS BULLET \unic@lowasterisk \or % U+204E LOW ASTERISK \unic@reversedsemicolon \or % U+204F REVERSED SEMICOLON \unknownchar \or % U+2050 CLOSE UP \unknownchar \or % U+2051 TWO ASTERISKS ALIGNED VERTICALLY \unknownchar \or % U+2052 COMMERCIAL MINUS SIGN \unknownchar \or % U+2053 SWUNG DASH \unknownchar \or % U+2054 INVERTED UNDERTIE \unknownchar \or % U+2055 FLOWER PUNCTUATION MARK \unknownchar \or % U+2056 THREE DOT PUNCTUATION \unknownchar \or % U+2057 QUADRUPLE PRIME \unknownchar \or % U+2058 FOUR DOT PUNCTUATION \unknownchar \or % U+2059 FIVE DOT PUNCTUATION \unknownchar \or % U+205A TWO DOT PUNCTUATION \unknownchar \or % U+205B FOUR DOT MARK \unknownchar \or % U+205C DOTTED CROSS \unknownchar \or % U+205D TRICOLON \unknownchar \or % U+205E VERTICAL FOUR DOTS \thickspace \or % U+205F MEDIUM MATHEMATICAL SPACE \relax \or % U+2060 WORD JOINER \unic@functionapplication \or % U+2061 FUNCTION APPLICATION \unic@invisibletimes \or % U+2062 INVISIBLE TIMES \unic@invisibleseparator \or % U+2063 INVISIBLE SEPARATOR (COMMA) \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \relax \or % U+206A INHIBIT SYMMETRIC SWAPPING \relax \or % U+206B ACTIVATE SYMMETRIC SWAPPING \relax \or % U+206C INHIBIT ARABIC FORM SHAPING \relax \or % U+206D ACTIVATE ARABIC FORM SHAPING \relax \or % U+206E NATIONAL DIGIT SHAPES \relax \or % U+206F NOMINAL DIGIT SHAPES \unic@superscriptzero \or % U+2070 SUPERSCRIPT ZERO \unic@superscripti \or % U+2071 SUPERSCRIPT LATIN SMALL LETTER I \unknownchar \or % U+2072 <reserved> \unknownchar \or % U+2073 <reserved> \unic@superscriptfour \or % U+2074 SUPERSCRIPT FOUR \unic@superscriptfive \or % U+2075 SUPERSCRIPT FIVE \unic@superscriptsix \or % U+2076 SUPERSCRIPT SIX \unic@superscriptseven \or % U+2077 SUPERSCRIPT SEVEN \unic@superscripteight \or % U+2078 SUPERSCRIPT EIGHT \unic@superscriptnine \or % U+2079 SUPERSCRIPT NINE \unic@superscriptplus \or % U+207A SUPERSCRIPT PLUS SIGN \unic@superscriptminus \or % U+207B SUPERSCRIPT MINUS \unic@superscriptequals \or % U+207C SUPERSCRIPT EQUALS SIGN \unic@superscriptleft \or % U+207D SUPERSCRIPT LEFT PARENTHESIS \unic@superscriptright \or % U+207E SUPERSCRIPT RIGHT PARENTHESIS \unic@superscriptn \or % U+207F SUBSCRIPT LATIN SMALL LETTER N \unic@subscriptzero \or % U+2080 SUBSCRIPT ZERO \unic@subscriptone \or % U+2081 SUBSCRIPT ONE \unic@subscripttwo \or % U+2082 SUBSCRIPT TWO \unic@subscriptthree \or % U+2083 SUBSCRIPT THREE \unic@subscriptfour \or % U+2084 SUBSCRIPT FOUR \unic@subscriptfive \or % U+2085 SUBSCRIPT FIVE \unic@subscriptsix \or % U+2086 SUBSCRIPT SIX \unic@subscriptseven \or % U+2087 SUBSCRIPT SEVEN \unic@subscripteight \or % U+2088 SUBSCRIPT EIGHT \unic@subscriptnine \or % U+2089 SUBSCRIPT NINE \unic@subscriptplus \or % U+208A SUBSCRIPT PLUS SIGN \unic@subscriptminus \or % U+208B SUBSCRIPT MINUS \unic@subscriptequals \or % U+208C SUBSCRIPT EQUALS SIGN \unic@subscriptleft \or % U+208D SUBSCRIPT LEFT PARENTHESIS \unic@subscriptright \or % U+208E SUBSCRIPT RIGHT PARENTHESIS \unknownchar \or % \unic@subscripta \or % U+2090 LATIN SUBSCRIPT SMALL LETTER A \unic@subscripte \or % U+2091 LATIN SUBSCRIPT SMALL LETTER E \unic@subscripto \or % U+2092 LATIN SUBSCRIPT SMALL LETTER O \unic@subscriptx \or % U+2093 LATIN SUBSCRIPT SMALL LETTER X \unic@subscriptschwa \or % U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % U+20A0 EURO-CURRENCY SIGN \unknownchar \or % U+20A1 COLON SIGN \unknownchar \or % U+20A2 CRUZEIRO SIGN \unknownchar \or % U+20A3 FRENCH FRANC SIGN \unknownchar \or % U+20A4 LIRA SIGN \unknownchar \or % U+20A5 MILL SIGN \unknownchar \or % U+20A6 NAIRA SIGN \unknownchar \or % U+20A7 PESETA SIGN \unknownchar \or % U+20A8 RUPEE SIGN \unknownchar \or % U+20A9 WON SIGN \unknownchar \or % U+20AA NEW SHEQEL SIGN \textdong \or % U+20AB DONG SIGN \texteuro \or % U+20AC EURO SIGN \unknownchar \or % U+20AD KIP SIGN \unknownchar \or % U+20AE TUGRIK SIGN \unknownchar \or % U+20AF DRACHMA SIGN \unknownchar \or % U+20B0 GERMAN PENNY SIGN \unknownchar \or % U+20B1 PESO SIGN \unknownchar \or % U+20B2 GUARANI SIGN \unknownchar \or % U+20B3 AUSTRAL SIGN \unknownchar \or % U+20B4 HRYVNIA SIGN \unknownchar \or % U+20B5 CEDI SIGN \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % U+20D0 COMBINING LEFT HARPOON ABOVE \unknownchar \or % U+20D1 COMBINING RIGHT HARPOON ABOVE \unknownchar \or % U+20D2 COMBINING LONG VERTICAL LINE OVERLAY \unknownchar \or % U+20D3 COMBINING SHORT VERTICAL LINE OVERLAY \unknownchar \or % U+20D4 COMBINING ANTICLOCKWISE ARROW ABOVE \unknownchar \or % U+20D5 COMBINING CLOCKWISE ARROW ABOVE \unknownchar \or % U+20D6 COMBINING LEFT ARROW ABOVE \unknownchar \or % U+20D7 COMBINING RIGHT ARROW ABOVE \unknownchar \or % U+20D8 COMBINING RING OVERLAY \unknownchar \or % U+20D9 COMBINING CLOCKWISE RING OVERLAY \unknownchar \or % U+20DA COMBINING ANTICLOCKWISE RING OVERLAY \unknownchar \or % U+20DB COMBINING THREE DOTS ABOVE \unknownchar \or % U+20DC COMBINING FOUR DOTS ABOVE \unknownchar \or % U+20DD COMBINING ENCLOSING CIRCLE \unknownchar \or % U+20DE COMBINING ENCLOSING SQUARE \unknownchar \or % U+20DF COMBINING ENCLOSING DIAMOND \unknownchar \or % U+20E0 COMBINING ENCLOSING CIRCLE BACKSLASH \unknownchar \or % U+20E1 COMBINING LEFT RIGHT ARROW ABOVE \unknownchar \or % U+20E2 COMBINING ENCLOSING SCREEN \unknownchar \or % U+20E3 COMBINING ENCLOSING KEYCAP \unknownchar \or % U+20E4 COMBINING ENCLOSING UPWARD POINTING TRIANGLE \unknownchar \or % U+20E5 COMBINING REVERSE SOLIDUS OVERLAY \unknownchar \or % U+20E6 COMBINING DOUBLE VERTICAL STROKE OVERLAY \unknownchar \or % U+20E7 COMBINING ANNUITY SYMBOL \unknownchar \or % U+20E8 COMBINING TRIPLE UNDERDOT \unknownchar \or % U+20E9 COMBINING WIDE BRIDGE ABOVE \unknownchar \or % U+20EA COMBINING LEFTWARDS ARROW OVERLAY \unknownchar \or % U+20EB COMBINING LONG DOUBLE SOLIDUS OVERLAY \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \or % \unknownchar \else % \unknownchar \fi \stopunicodevector \protect \endinput ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/type-one.mkii�������������������������������0000644�0001750�0001750�00000542200�11754241457�024321� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=type-one, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Type One Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 merges the traditional enc, syn and map files into one. If %D you think that it looks messy you're right. It shows some history of %D \TEX\ fonts and the development towards latin modern. % texfont --ven=public --col=antt --enc=ec --sou=auto % texfont --ven=public --col=antp --enc=ec --sou=auto % texfont --ven=urw --col=palatino --enc=ec --sou=auto % texfont --ven-lucas --col=sun --enc=ec --sou=. % \usetypescript [all] [modern] [texnansi] % \setupbodyfont[reset] \setupbodyfont[cmr] % \starttext \showfont[Serif] \stoptext \starttypescriptcollection[latinmodern] \starttypescript [map] [all] \loadmapfile[original-base.map] \loadmapfile[original-ams-base.map] \stoptypescript \starttypescript[all][modern,latin-modern][all] % fallbacks, no math in latin modern \definefontsynonym[lmdunh10][cmdunh10] \definefontsynonym[lmff10] [cmff10] \definefontsynonym[lmfi10] [cmfi10] \definefontsynonym[lmfib8] [cmfib8] \definefontsynonym[lmtex10] [cmtex10] \definefontsynonym[lmtex8] [cmtex8] \definefontsynonym[lmtex9] [cmtex9] \loadmapfile[original-public-lm.map] \stoptypescript \starttypescript [serif] [modern,latin-modern] [texnansi,ec,qx,t5] \definefontsynonym [LMRoman5-Regular] [\typescriptthree-lmr5] [encoding=\typescriptthree] \definefontsynonym [LMRoman6-Regular] [\typescriptthree-lmr6] [encoding=\typescriptthree] \definefontsynonym [LMRoman7-Regular] [\typescriptthree-lmr7] [encoding=\typescriptthree] \definefontsynonym [LMRoman8-Regular] [\typescriptthree-lmr8] [encoding=\typescriptthree] \definefontsynonym [LMRoman9-Regular] [\typescriptthree-lmr9] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-Regular] [\typescriptthree-lmr10] [encoding=\typescriptthree] \definefontsynonym [LMRoman12-Regular] [\typescriptthree-lmr12] [encoding=\typescriptthree] \definefontsynonym [LMRoman17-Regular] [\typescriptthree-lmr17] [encoding=\typescriptthree] \definefontsynonym [LMRoman5-Bold] [\typescriptthree-lmbx5] [encoding=\typescriptthree] \definefontsynonym [LMRoman6-Bold] [\typescriptthree-lmbx6] [encoding=\typescriptthree] \definefontsynonym [LMRoman7-Bold] [\typescriptthree-lmbx7] [encoding=\typescriptthree] \definefontsynonym [LMRoman8-Bold] [\typescriptthree-lmbx8] [encoding=\typescriptthree] \definefontsynonym [LMRoman9-Bold] [\typescriptthree-lmbx9] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-Bold] [\typescriptthree-lmbx10] [encoding=\typescriptthree] \definefontsynonym [LMRoman12-Bold] [\typescriptthree-lmbx12] [encoding=\typescriptthree] \definefontsynonym [LMRoman7-Italic] [\typescriptthree-lmri7] [encoding=\typescriptthree] \definefontsynonym [LMRoman8-Italic] [\typescriptthree-lmri8] [encoding=\typescriptthree] \definefontsynonym [LMRoman9-Italic] [\typescriptthree-lmri9] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-Italic] [\typescriptthree-lmri10] [encoding=\typescriptthree] \definefontsynonym [LMRoman12-Italic] [\typescriptthree-lmri12] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-BoldItalic] [\typescriptthree-lmbxi10] [encoding=\typescriptthree] \definefontsynonym [LMRoman8-Oblique] [\typescriptthree-lmro8] [encoding=\typescriptthree] \definefontsynonym [LMRoman9-Oblique] [\typescriptthree-lmro9] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-Oblique] [\typescriptthree-lmro10] [encoding=\typescriptthree] \definefontsynonym [LMRoman12-Oblique] [\typescriptthree-lmro12] [encoding=\typescriptthree] \definefontsynonym [LMRoman17-Oblique] [\typescriptthree-lmro17] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-BoldOblique] [\typescriptthree-lmbxo10] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-Demi] [\typescriptthree-lmb10] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-DemiOblique] [\typescriptthree-lmbo10] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-CapsRegular] [\typescriptthree-lmcsc10] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-CapsOblique] [\typescriptthree-lmcsco10] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-Dunhill] [\typescriptthree-lmdunh10] [encoding=\typescriptthree] \definefontsynonym [LMRoman10-DunhillOblique] [\typescriptthree-lmduno10] [encoding=\typescriptthree] \loadmapfile[lm-\typescriptthree.map] \stoptypescript \starttypescript [sans] [modern,latin-modern] [texnansi,ec,qx,t5] \definefontsynonym [LMSans8-Regular] [\typescriptthree-lmss8] [encoding=\typescriptthree] \definefontsynonym [LMSans9-Regular] [\typescriptthree-lmss9] [encoding=\typescriptthree] \definefontsynonym [LMSans10-Regular] [\typescriptthree-lmss10] [encoding=\typescriptthree] \definefontsynonym [LMSans12-Regular] [\typescriptthree-lmss12] [encoding=\typescriptthree] \definefontsynonym [LMSans17-Regular] [\typescriptthree-lmss17] [encoding=\typescriptthree] \definefontsynonym [LMSans10-Bold] [\typescriptthree-lmssbx10] [encoding=\typescriptthree] \definefontsynonym [LMSans8-Oblique] [\typescriptthree-lmsso8] [encoding=\typescriptthree] \definefontsynonym [LMSans9-Oblique] [\typescriptthree-lmsso9] [encoding=\typescriptthree] \definefontsynonym [LMSans10-Oblique] [\typescriptthree-lmsso10] [encoding=\typescriptthree] \definefontsynonym [LMSans12-Oblique] [\typescriptthree-lmsso12] [encoding=\typescriptthree] \definefontsynonym [LMSans17-Oblique] [\typescriptthree-lmsso17] [encoding=\typescriptthree] \definefontsynonym [LMSans10-BoldOblique] [\typescriptthree-lmssbo10] [encoding=\typescriptthree] \definefontsynonym [LMSans10-DemiCondensed] [\typescriptthree-lmssdc10] [encoding=\typescriptthree] \definefontsynonym [LMSans10-DemiCondensedOblique] [\typescriptthree-lmssdo10] [encoding=\typescriptthree] \definefontsynonym [LMSansQuotation8-Regular] [\typescriptthree-lmssq8] [encoding=\typescriptthree] \definefontsynonym [LMSansQuotation8-Bold] [\typescriptthree-lmssqbx8] [encoding=\typescriptthree] \definefontsynonym [LMSansQuotation8-Oblique] [\typescriptthree-lmssqo8] [encoding=\typescriptthree] \definefontsynonym [LMSansQuotation8-BoldOblique] [\typescriptthree-lmssqbo8] [encoding=\typescriptthree] \loadmapfile[lm-\typescriptthree.map] \stoptypescript \starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond] [texnansi,ec,qx,t5] \definefontsynonym [LMTypewriter8-Regular] [\typescriptthree-lmtt8] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter9-Regular] [\typescriptthree-lmtt9] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-Regular] [\typescriptthree-lmtt10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter12-Regular] [\typescriptthree-lmtt12] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-Italic] [\typescriptthree-lmtti10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-Oblique] [\typescriptthree-lmtto10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-CapsRegular] [\typescriptthree-lmtcsc10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-CapsOblique] [\typescriptthree-lmtcso10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-Light] [\typescriptthree-lmtl10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-LightOblique] [\typescriptthree-lmtlo10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-LightCondensed] [\typescriptthree-lmtlc10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-LightCondensedOblique] [\typescriptthree-lmtlco10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-Dark] [\typescriptthree-lmtk10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-DarkOblique] [\typescriptthree-lmtko10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriter10-Unslanted] [\typescriptthree-lmu10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriterVarWd10-Regular] [\typescriptthree-lmvtt10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriterVarWd10-Oblique] [\typescriptthree-lmvtto10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriterVarWd10-Light] [\typescriptthree-lmvtl10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriterVarWd10-LightOblique] [\typescriptthree-lmvtlo10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriterVarWd10-Dark] [\typescriptthree-lmvtk10] [encoding=\typescriptthree] \definefontsynonym [LMTypewriterVarWd10-DarkOblique] [\typescriptthree-lmvtko10] [encoding=\typescriptthree] \loadmapfile[lm-\typescriptthree.map] \stoptypescript \starttypescript [math] [modern,latin-modern] \definefontsynonym [LMMathRoman5-Regular] [rm-lmr5] \definefontsynonym [LMMathRoman6-Regular] [rm-lmr6] \definefontsynonym [LMMathRoman7-Regular] [rm-lmr7] \definefontsynonym [LMMathRoman8-Regular] [rm-lmr8] \definefontsynonym [LMMathRoman9-Regular] [rm-lmr9] \definefontsynonym [LMMathRoman10-Regular] [rm-lmr10] \definefontsynonym [LMMathRoman12-Regular] [rm-lmr12] \definefontsynonym [LMMathRoman17-Regular] [rm-lmr17] \definefontsynonym [LMMathRoman5-Bold] [rm-lmbx5] \definefontsynonym [LMMathRoman6-Bold] [rm-lmbx6] \definefontsynonym [LMMathRoman7-Bold] [rm-lmbx7] \definefontsynonym [LMMathRoman8-Bold] [rm-lmbx8] \definefontsynonym [LMMathRoman9-Bold] [rm-lmbx9] \definefontsynonym [LMMathRoman10-Bold] [rm-lmbx10] \definefontsynonym [LMMathRoman12-Bold] [rm-lmbx12] \definefontsynonym [LMMathSymbols5-BoldItalic] [lmbsy5] \definefontsynonym [LMMathSymbols7-BoldItalic] [lmbsy7] \definefontsynonym [LMMathSymbols10-BoldItalic][lmbsy10] \definefontsynonym [LMMathSymbols5-Italic] [lmsy5] \definefontsynonym [LMMathSymbols6-Italic] [lmsy6] \definefontsynonym [LMMathSymbols7-Italic] [lmsy7] \definefontsynonym [LMMathSymbols8-Italic] [lmsy8] \definefontsynonym [LMMathSymbols9-Italic] [lmsy9] \definefontsynonym [LMMathSymbols10-Italic] [lmsy10] \definefontsynonym [LMMathExtension10-Regular] [lmex10] \definefontsynonym [LMMathItalic5-Italic] [lmmi5] \definefontsynonym [LMMathItalic6-Italic] [lmmi6] \definefontsynonym [LMMathItalic7-Italic] [lmmi7] \definefontsynonym [LMMathItalic8-Italic] [lmmi8] \definefontsynonym [LMMathItalic9-Italic] [lmmi9] \definefontsynonym [LMMathItalic10-Italic] [lmmi10] \definefontsynonym [LMMathItalic12-Italic] [lmmi12] \definefontsynonym [LMMathItalic5-BoldItalic] [lmmib5] \definefontsynonym [LMMathItalic7-BoldItalic] [lmmib7] \definefontsynonym [LMMathItalic10-BoldItalic] [lmmib10] \usemathcollection[default] \loadmapfile[lm-math.map] \loadmapfile[lm-rm.map] \stoptypescript %D {\em Comments by Victor Figurnov:} the wcmb10, wcmbx10, %D \unknown\ fonts below are taken from the Paradissa %D collection by Basil Malyshev. These fonts don't conform t2a %D encoding but are in MS Windows Cyrillic codepage 1251 %D encoding. These fonts contain only 33 russian letters in %D upper and lower case, the number sign, and guillemots. But %D even among these characters only the basic 32 russian %D letters (in upper and lower case) will be typeset correctly %D with this definition. The letters cyrillicYO and %D cyrillicyo, as well as number sign (textnumero) and %D guillemots won't be typeset properly, because these symbols %D have different positions in t2a and MS CP1251 encodings. %D %D I think that the russian lh fonts and|/|or cm-super provide %D better alternatives (type1). Therefore, the names below %D match those of cm-super (\type {0NNN} instead of \type %D {NNN}, i.e.\ four digit numbers). \starttypescript [serif] [computer-modern] [cyr] \definefontsynonym [cmb10] [wcmb10] [encoding=t2a] \definefontsynonym [cmbsy10] [wcmbsy10] [encoding=t2a] \definefontsynonym [cmbx10] [wcmbx10] [encoding=t2a] \definefontsynonym [cmbx12] [wcmbx12] [encoding=t2a] \definefontsynonym [cmbx5] [wcmbx5] [encoding=t2a] \definefontsynonym [cmbx6] [wcmbx6] [encoding=t2a] \definefontsynonym [cmbx7] [wcmbx7] [encoding=t2a] \definefontsynonym [cmbx8] [wcmbx8] [encoding=t2a] \definefontsynonym [cmbx9] [wcmbx9] [encoding=t2a] \definefontsynonym [cmbxsl10] [wcmbxsl10] [encoding=t2a] \definefontsynonym [cmbxti10] [wcmbxti10] [encoding=t2a] \definefontsynonym [cmcsc10] [wcmcsc10] [encoding=t2a] %definefontsynonym [cmdunh10] [wcmdunh10] [encoding=t2a] \definefontsynonym [cminch] [wcminch] [encoding=t2a] \definefontsynonym [cmr10] [wcmr10] [encoding=t2a] \definefontsynonym [cmr12] [wcmr12] [encoding=t2a] \definefontsynonym [cmr17] [wcmr17] [encoding=t2a] \definefontsynonym [cmr5] [wcmr5] [encoding=t2a] \definefontsynonym [cmr6] [wcmr6] [encoding=t2a] \definefontsynonym [cmr7] [wcmr7] [encoding=t2a] \definefontsynonym [cmr8] [wcmr8] [encoding=t2a] \definefontsynonym [cmr9] [wcmr9] [encoding=t2a] \definefontsynonym [cmsl10] [wcmsl10] [encoding=t2a] \definefontsynonym [cmsl12] [wcmsl12] [encoding=t2a] \definefontsynonym [cmsl8] [wcmsl8] [encoding=t2a] \definefontsynonym [cmsl9] [wcmsl9] [encoding=t2a] \definefontsynonym [cmti10] [wcmti10] [encoding=t2a] \definefontsynonym [cmti12] [wcmti12] [encoding=t2a] \definefontsynonym [cmti7] [wcmti7] [encoding=t2a] \definefontsynonym [cmti8] [wcmti8] [encoding=t2a] \definefontsynonym [cmti9] [wcmti9] [encoding=t2a] \definefontsynonym [cmu10] [wcmu10] [encoding=t2a] \stoptypescript \starttypescript [sans] [computer-modern] [cyr] \definefontsynonym [cmss10] [wcmss10] [encoding=t2a] \definefontsynonym [cmss12] [wcmss12] [encoding=t2a] \definefontsynonym [cmss17] [wcmss17] [encoding=t2a] \definefontsynonym [cmss8] [wcmss8] [encoding=t2a] \definefontsynonym [cmss9] [wcmss9] [encoding=t2a] %definefontsynonym [cmssbi10] [wcmssbi10] [encoding=t2a] \definefontsynonym [cmssbx10] [wcmssbx10] [encoding=t2a] \definefontsynonym [cmssdc10] [wcmssdc10] [encoding=t2a] \definefontsynonym [cmssi10] [wcmssi10] [encoding=t2a] \definefontsynonym [cmssi12] [wcmssi12] [encoding=t2a] \definefontsynonym [cmssi17] [wcmssi17] [encoding=t2a] \definefontsynonym [cmssi8] [wcmssi8] [encoding=t2a] \definefontsynonym [cmssi9] [wcmssi9] [encoding=t2a] \definefontsynonym [cmssq8] [wcmssq8] [encoding=t2a] \definefontsynonym [cmssqi8] [wcmssqi8] [encoding=t2a] \stoptypescript \starttypescript [mono] [computer-modern] [cyr] \definefontsynonym [cmitt10] [wcmitt10] [encoding=t2a] \definefontsynonym [cmsltt10] [wcmsltt10] [encoding=t2a] \definefontsynonym [cmtt10] [wcmtt10] [encoding=t2a] \definefontsynonym [cmtt12] [wcmtt12] [encoding=t2a] \definefontsynonym [cmtt8] [wcmtt8] [encoding=t2a] \definefontsynonym [cmtt9] [wcmtt9] [encoding=t2a] %definefontsynonym [cmvtt10] [wcmvtt10] [encoding=t2a] \stoptypescript \definetypescriptprefix [c:t2a] [la] \definetypescriptprefix [c:t2b] [lb] \definetypescriptprefix [c:t2c] [lc] \definetypescriptprefix [c:x2] [rx] \starttypescript [all] [computer-modern] [t2a,t2b,t2c,x2] \loadmapfile[subset-cmsuper-\typescriptthree.map] \loadmapfile[subset-cmsuper-\typescriptthree.map] \loadmapfile[cm-super-\typescriptthree.map] \stoptypescript \starttypescript [serif] [computer-modern] [t2a,t2b,t2c,x2] \definefontsynonym [cmb10] [\typescriptprefix{c:\typescriptthree}rb1000] [encoding=\typescriptthree] \definefontsynonym [cmbx10] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree] \definefontsynonym [cmbx12] [\typescriptprefix{c:\typescriptthree}bx1200] [encoding=\typescriptthree] \definefontsynonym [cmbx5] [\typescriptprefix{c:\typescriptthree}bx0500] [encoding=\typescriptthree] \definefontsynonym [cmbx6] [\typescriptprefix{c:\typescriptthree}bx0600] [encoding=\typescriptthree] \definefontsynonym [cmbx7] [\typescriptprefix{c:\typescriptthree}bx0700] [encoding=\typescriptthree] \definefontsynonym [cmbx8] [\typescriptprefix{c:\typescriptthree}bx0800] [encoding=\typescriptthree] \definefontsynonym [cmbx9] [\typescriptprefix{c:\typescriptthree}bx0900] [encoding=\typescriptthree] \definefontsynonym [cmbxsl10] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree] \definefontsynonym [cmbxti10] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree] \definefontsynonym [cmcsc10] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree] \definefontsynonym [cmdunh10] [\typescriptprefix{c:\typescriptthree}dh1000] [encoding=\typescriptthree] \definefontsynonym [cmff10] [\typescriptprefix{c:\typescriptthree}ff1000] [encoding=\typescriptthree] \definefontsynonym [cmfi10] [\typescriptprefix{c:\typescriptthree}fi1000] [encoding=\typescriptthree] \definefontsynonym [cmfib8] [\typescriptprefix{c:\typescriptthree}fb0800] [encoding=\typescriptthree] %\definefontsynonym [cminch] [\typescriptprefix{c:\typescriptthree}inch00] [encoding=\typescriptthree] \definefontsynonym [cmr10] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree] \definefontsynonym [cmr12] [\typescriptprefix{c:\typescriptthree}rm1200] [encoding=\typescriptthree] \definefontsynonym [cmr17] [\typescriptprefix{c:\typescriptthree}rm1700] [encoding=\typescriptthree] \definefontsynonym [cmr5] [\typescriptprefix{c:\typescriptthree}rm0500] [encoding=\typescriptthree] \definefontsynonym [cmr6] [\typescriptprefix{c:\typescriptthree}rm0600] [encoding=\typescriptthree] \definefontsynonym [cmr7] [\typescriptprefix{c:\typescriptthree}rm0700] [encoding=\typescriptthree] \definefontsynonym [cmr8] [\typescriptprefix{c:\typescriptthree}rm0800] [encoding=\typescriptthree] \definefontsynonym [cmr9] [\typescriptprefix{c:\typescriptthree}rm0900] [encoding=\typescriptthree] \definefontsynonym [cmsl10] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree] \definefontsynonym [cmsl12] [\typescriptprefix{c:\typescriptthree}sl1200] [encoding=\typescriptthree] \definefontsynonym [cmsl8] [\typescriptprefix{c:\typescriptthree}sl0800] [encoding=\typescriptthree] \definefontsynonym [cmsl9] [\typescriptprefix{c:\typescriptthree}sl0900] [encoding=\typescriptthree] \definefontsynonym [cmtcsc10] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree] \definefontsynonym [cmti10] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree] \definefontsynonym [cmti12] [\typescriptprefix{c:\typescriptthree}ti1200] [encoding=\typescriptthree] \definefontsynonym [cmti7] [\typescriptprefix{c:\typescriptthree}ti0700] [encoding=\typescriptthree] \definefontsynonym [cmti8] [\typescriptprefix{c:\typescriptthree}ti0800] [encoding=\typescriptthree] \definefontsynonym [cmti9] [\typescriptprefix{c:\typescriptthree}ti0900] [encoding=\typescriptthree] \definefontsynonym [cmu10] [\typescriptprefix{c:\typescriptthree}ui1000] [encoding=\typescriptthree] \stoptypescript \starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2] \definefontsynonym [cmss10] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree] \definefontsynonym [cmss12] [\typescriptprefix{c:\typescriptthree}ss1200] [encoding=\typescriptthree] \definefontsynonym [cmss17] [\typescriptprefix{c:\typescriptthree}ss1700] [encoding=\typescriptthree] \definefontsynonym [cmss8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree] \definefontsynonym [cmss9] [\typescriptprefix{c:\typescriptthree}ss0900] [encoding=\typescriptthree] \definefontsynonym [cmssbx10] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree] %\definefontsynonym [cmssdc10] [\typescriptprefix{c:\typescriptthree}ssdc1000] [encoding=\typescriptthree] \definefontsynonym [cmssi10] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree] \definefontsynonym [cmssi12] [\typescriptprefix{c:\typescriptthree}si1200] [encoding=\typescriptthree] \definefontsynonym [cmssi17] [\typescriptprefix{c:\typescriptthree}si1700] [encoding=\typescriptthree] \definefontsynonym [cmssi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree] \definefontsynonym [cmssi9] [\typescriptprefix{c:\typescriptthree}si0900] [encoding=\typescriptthree] \definefontsynonym [cmssq8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree] \definefontsynonym [cmssqi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree] \stoptypescript \starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2] \definefontsynonym [cmitt10] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree] \definefontsynonym [cmsltt10] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree] \definefontsynonym [cmtt10] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree] \definefontsynonym [cmtt12] [\typescriptprefix{c:\typescriptthree}tt1200] [encoding=\typescriptthree] \definefontsynonym [cmtt8] [\typescriptprefix{c:\typescriptthree}tt0800] [encoding=\typescriptthree] \definefontsynonym [cmtt9] [\typescriptprefix{c:\typescriptthree}tt0900] [encoding=\typescriptthree] \definefontsynonym [cmvtt10] [\typescriptprefix{c:\typescriptthree}vt1000] [encoding=\typescriptthree] \stoptypescript \starttypescript [serif] [computer-modern] [lcy] \definefontsynonym [cmb10] [lhb10] [encoding=lcy] \definefontsynonym [cmbx10] [lhbx10] [encoding=lcy] \definefontsynonym [cmbx12] [lhbx12] [encoding=lcy] \definefontsynonym [cmbx5] [lhbx5] [encoding=lcy] \definefontsynonym [cmbx6] [lhbx6] [encoding=lcy] \definefontsynonym [cmbx7] [lhbx7] [encoding=lcy] \definefontsynonym [cmbx8] [lhbx8] [encoding=lcy] \definefontsynonym [cmbx9] [lhbx9] [encoding=lcy] \definefontsynonym [cmbxsl10] [lhbxsl10] [encoding=lcy] \definefontsynonym [cmbxti10] [lhbxti10] [encoding=lcy] \definefontsynonym [cmcsc10] [lhcsc10] [encoding=lcy] \definefontsynonym [cmdunh10] [lhdunh10] [encoding=lcy] \definefontsynonym [cmff10] [lhff10] [encoding=lcy] \definefontsynonym [cmfi10] [lhfi10] [encoding=lcy] \definefontsynonym [cmfib8] [lhfib8] [encoding=lcy] \definefontsynonym [cminch] [lhinch] [encoding=lcy] \definefontsynonym [cmr10] [lhr10] [encoding=lcy] \definefontsynonym [cmr12] [lhr12] [encoding=lcy] \definefontsynonym [cmr17] [lhr17] [encoding=lcy] \definefontsynonym [cmr5] [lhr5] [encoding=lcy] \definefontsynonym [cmr6] [lhr6] [encoding=lcy] \definefontsynonym [cmr7] [lhr7] [encoding=lcy] \definefontsynonym [cmr8] [lhr8] [encoding=lcy] \definefontsynonym [cmr9] [lhr9] [encoding=lcy] \definefontsynonym [cmsl10] [lhsl10] [encoding=lcy] \definefontsynonym [cmsl12] [lhsl12] [encoding=lcy] \definefontsynonym [cmsl8] [lhsl8] [encoding=lcy] \definefontsynonym [cmsl9] [lhsl9] [encoding=lcy] \definefontsynonym [cmtcsc10] [lhtcsc10] [encoding=lcy] \definefontsynonym [cmtex10] [lhtex10] [encoding=lcy] \definefontsynonym [cmtex8] [lhtex8] [encoding=lcy] \definefontsynonym [cmtex9] [lhtex9] [encoding=lcy] \definefontsynonym [cmti10] [lhti10] [encoding=lcy] \definefontsynonym [cmti12] [lhti12] [encoding=lcy] \definefontsynonym [cmti7] [lhti7] [encoding=lcy] \definefontsynonym [cmti8] [lhti8] [encoding=lcy] \definefontsynonym [cmti9] [lhti9] [encoding=lcy] \definefontsynonym [cmu10] [lhu10] [encoding=lcy] \stoptypescript \starttypescript [sans] [computer-modern] [lcy] \definefontsynonym [cmss10] [lhss10] [encoding=lcy] \definefontsynonym [cmss12] [lhss12] [encoding=lcy] \definefontsynonym [cmss17] [lhss17] [encoding=lcy] \definefontsynonym [cmss8] [lhss8] [encoding=lcy] \definefontsynonym [cmss9] [lhss9] [encoding=lcy] \definefontsynonym [cmssbi10] [lhssbi10] [encoding=lcy] \definefontsynonym [cmssbx10] [lhssbx10] [encoding=lcy] \definefontsynonym [cmssdc10] [lhssdc10] [encoding=lcy] \definefontsynonym [cmssi10] [lhssi10] [encoding=lcy] \definefontsynonym [cmssi12] [lhssi12] [encoding=lcy] \definefontsynonym [cmssi17] [lhssi17] [encoding=lcy] \definefontsynonym [cmssi8] [lhssi8] [encoding=lcy] \definefontsynonym [cmssi9] [lhssi9] [encoding=lcy] \definefontsynonym [cmssq8] [lhssq8] [encoding=lcy] \definefontsynonym [cmssqi8] [lhssqi8] [encoding=lcy] \stoptypescript \starttypescript [mono] [computer-modern] [lcy] \definefontsynonym [cmitt10] [lhitt10] [encoding=lcy] \definefontsynonym [cmsltt10] [lhsltt10] [encoding=lcy] \definefontsynonym [cmtt10] [lhtt10] [encoding=lcy] \definefontsynonym [cmtt12] [lhtt12] [encoding=lcy] \definefontsynonym [cmtt8] [lhtt8] [encoding=lcy] \definefontsynonym [cmtt9] [lhtt9] [encoding=lcy] \definefontsynonym [cmvtt10] [lhvtt10] [encoding=lcy] \stoptypescript % \starttypescript [math] [modern,computer-modern,latin-modern] % [default] % watch the space, it prevents remapping \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10]% [lmr10 ] \definefontsynonym [ComputerModernMath-Extension] [lmex10] \definefontsynonym [ComputerModernMath-Italic] [lmmi10] \definefontsynonym [ComputerModernMath-Symbol] [lmsy10] \stoptypescript \starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern] % [default] % watch the space, it prevents remapping \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10] % [lmb10 ] \definefontsynonym [ComputerModernMath-Extension] [lmex10] \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10] \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10] \stoptypescript % Till we have cyrilic in lm: % \usetypescript[modern-base][t2a] % \setupbodyfont[modern,10pt] \starttypescript [serif] [computer-modern] [t2a,t2b,t2c,x2] \definefontsynonym [Serif] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree] \definefontsynonym [SerifItalic] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree] \definefontsynonym [SerifSlanted] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree] \definefontsynonym [SerifBold] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree] \definefontsynonym [SerifBoldItalic] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree] \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree] \definefontsynonym [SerifCaps] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree] \definefontsynonym [SerifCapsSlanted] [\typescriptprefix{c:\typescriptthree}sc1000] [encoding=\typescriptthree] \stoptypescript \starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2] \definefontsynonym [Sans] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree] \definefontsynonym [SansItalic] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree] \definefontsynonym [SansSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree] \definefontsynonym [SansBold] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree] \definefontsynonym [SansBoldItalic] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree] \definefontsynonym [SansBoldSlanted] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree] \definefontsynonym [SansCaps] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree] \definefontsynonym [SansCapsSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree] \stoptypescript \starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2] \definefontsynonym [Mono] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree] \definefontsynonym [MonoItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree] \definefontsynonym [MonoSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree] \definefontsynonym [MonoBold] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree] \definefontsynonym [MonoBoldItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree] \definefontsynonym [MonoBoldSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree] \definefontsynonym [MonoCaps] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree] \definefontsynonym [MonoCapsSlanted] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree] \stoptypescript % Computer Concrete (AMS) \starttypescript [serif] [concrete] [default] \definefontsynonym [ComputerConcrete] [ccr10] \definefontsynonym [ComputerConcrete-Italic] [ccti10] \definefontsynonym [ComputerConcrete-Slanted] [ccsl10] \definefontsynonym [ComputerConcrete-Bold] [ComputerConcrete] \definefontsynonym [ComputerConcrete-BoldItalic] [ComputerConcrete-Italic] \definefontsynonym [ComputerConcrete-BoldSlanted] [ComputerConcrete-Slanted] \definefontsynonym [ComputerConcrete-Caps] [cccsc10] \stoptypescript \starttypescript [serif] [modern,computer-modern,latin-modern] [name] \definefontsynonym [Serif] [LMRoman-Regular] \definefontsynonym [SerifBold] [LMRoman-Bold] \definefontsynonym [SerifItalic] [LMRoman-Italic] \definefontsynonym [SerifSlanted] [LMRoman-Oblique] \definefontsynonym [SerifBoldItalic] [LMRoman-BoldItalic] \definefontsynonym [SerifBoldSlanted] [LMRoman-BoldOblique] \definefontsynonym [SerifCaps] [LMRoman-CapsRegular] \definefontsynonym [SerifCapsSlanted] [LMRoman-CapsOblique] \stoptypescript \starttypescript [sans] [modern,computer-modern,latin-modern] [name] \definefontsynonym [Sans] [LMSans-Regular] \definefontsynonym [SansBold] [LMSans-Bold] \definefontsynonym [SansItalic] [LMSans-Oblique] \definefontsynonym [SansSlanted] [LMSans-Oblique] \definefontsynonym [SansBoldItalic] [LMSans-BoldOblique] \definefontsynonym [SansBoldSlanted] [LMSans-BoldOblique] \definefontsynonym [SansCaps] [LMSans-Regular] \definefontsynonym [SansCapsSlanted] [LMSans-Oblique] \stoptypescript \starttypescript [mono] [modern,computer-modern,latin-modern] [name] \definefontsynonym [Mono] [LMTypewriter-Regular] \definefontsynonym [MonoBold] [LMTypewriter-Dark] \definefontsynonym [MonoItalic] [LMTypewriter-Italic] \definefontsynonym [MonoSlanted] [LMTypewriter-Oblique] \definefontsynonym [MonoBoldItalic] [LMTypewriter-DarkOblique] \definefontsynonym [MonoBoldSlanted] [LMTypewriter-DarkOblique] \definefontsynonym [MonoCaps] [LMTypewriter-CapsRegular] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-CapsOblique] \definefontsynonym [MonoVariable] [LMTypewriterVarWd-Regular] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern] [name] \definefontsynonym [MathRoman] [LMMathRoman-Regular] \definefontsynonym [MathExtension] [LMMathExtension-Regular] \definefontsynonym [MathItalic] [LMMathItalic-Italic] \definefontsynonym [MathSymbol] [LMMathSymbols-Italic] \stoptypescript \starttypescript [boldmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [MathRoman] [LMMathRoman-Bold] \definefontsynonym [MathExtension] [LMMathExtension-Regular] \definefontsynonym [MathItalic] [LMMathItalic-BoldItalic] \definefontsynonym [MathSymbol] [LMMathSymbols-BoldItalic] \stoptypescript \starttypescript [bfmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [MathRomanBold] [LMMathRoman-Bold] \definefontsynonym [MathExtension] [LMMathExtension-Regular] \definefontsynonym [MathItalicBold] [LMMathItalic-BoldItalic] \definefontsynonym [MathSymbolBold] [LMMathSymbols-BoldItalic] \stoptypescript \starttypescript [math,boldmath,bfmath] [modern,computer-modern,latin-modern] [name] \usemathcollection[default] \stoptypescript \starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari] [name] \definefontsynonym [Serif] [LMTypewriterVarWd-Regular] \definefontsynonym [SerifBold] [LMTypewriterVarWd-Oblique] \definefontsynonym [SerifItalic] [LMTypewriterVarWd-Oblique] \definefontsynonym [SerifSlanted] [LMTypewriterVarWd-Dark] \definefontsynonym [SerifBoldItalic] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [SerifBoldSlanted] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [SerifCaps] [LMTypewriterVarWd-Regular] \definefontsynonym [SerifCapsSlanted] [LMTypewriterVarWd-Oblique] \stoptypescript \starttypescript [mono] [modern-cond,computer-modern-cond,latin-modern-cond,modern-lightcond,computer-modern-lightcond,latin-modern-lightcond] [name] \definefontsynonym [Mono] [LMTypewriter-LightCondensed] \definefontsynonym [MonoBold] [LMTypewriter-LightCondensed] \definefontsynonym [MonoItalic] [LMTypewriter-LightCondensedOblique] \definefontsynonym [MonoSlanted] [LMTypewriter-LightCondensedOblique] \definefontsynonym [MonoBoldItalic] [LMTypewriter-LightCondensed] \definefontsynonym [MonoBoldSlanted] [LMTypewriter-LightCondensed] \definefontsynonym [MonoCaps] [LMTypewriter-LightCondensed] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-LightCondensed] \stoptypescript \starttypescript [mono] [modern-light,computer-modern-light,latin-modern-light] [name] \definefontsynonym [Mono] [LMTypewriter-Light] \definefontsynonym [MonoBold] [LMTypewriter-Light] \definefontsynonym [MonoItalic] [LMTypewriter-LightOblique] \definefontsynonym [MonoSlanted] [LMTypewriter-LightOblique] \definefontsynonym [MonoBoldItalic] [LMTypewriter-Light] \definefontsynonym [MonoBoldSlanted] [LMTypewriter-Light] \definefontsynonym [MonoCaps] [LMTypewriter-Light] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-Light] \stoptypescript % Later we will map the real fonts, here we just map synonyms. \starttypescript [serif] [modern,latin-modern] \definefontsynonym [LMRoman-DemiOblique] [LMRoman10-DemiOblique] \definefontsynonym [LMRoman-Bold] [LMRoman10-Bold] \definefontsynonym [LMRoman-BoldItalic] [LMRoman10-BoldItalic] \definefontsynonym [LMRoman-BoldOblique] [LMRoman10-BoldOblique] \definefontsynonym [LMRoman-CapsRegular] [LMRoman10-CapsRegular] \definefontsynonym [LMRoman-CapsOblique] [LMRoman10-CapsOblique] \definefontsynonym [LMRoman-Regular] [LMRoman10-Regular] \definefontsynonym [LMRoman-Italic] [LMRoman10-Italic] \definefontsynonym [LMRoman-Oblique] [LMRoman10-Oblique] \stoptypescript \starttypescript [sans] [modern,latin-modern] \definefontsynonym [LMSans-Regular] [LMSans10-Regular] \definefontsynonym [LMSans-BoldOblique] [LMSans10-BoldOblique] \definefontsynonym [LMSans-Bold] [LMSans10-Bold] \definefontsynonym [LMSans-DemiCondensed] [LMSans10-DemiCondensed] \definefontsynonym [LMSans-DemiCondensedOblique] [LMSans10-DemiCondensedOblique] \definefontsynonym [LMSans-Oblique] [LMSans10-Oblique] \stoptypescript \starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond] \definefontsynonym [LMTypewriter-CapsRegular] [LMTypewriter10-CapsRegular] \definefontsynonym [LMTypewriter-CapsOblique] [LMTypewriter10-CapsOblique] \definefontsynonym [LMTypewriter-Light] [LMTypewriter10-Light] \definefontsynonym [LMTypewriter-LightOblique] [LMTypewriter10-LightOblique] \definefontsynonym [LMTypewriter-LightCondensed] [LMTypewriter10-LightCondensed] \definefontsynonym [LMTypewriter-LightCondensedOblique] [LMTypewriter10-LightCondensedOblique] \definefontsynonym [LMTypewriter-Dark] [LMTypewriter10-Dark] \definefontsynonym [LMTypewriter-DarkOblique] [LMTypewriter10-DarkOblique] \definefontsynonym [LMTypewriter-Regular] [LMTypewriter10-Regular] \definefontsynonym [LMTypewriter-Italic] [LMTypewriter10-Italic] \definefontsynonym [LMTypewriter-Oblique] [LMTypewriter10-Oblique] \definefontsynonym [LMTypewriterVarWd-Regular] [LMTypewriterVarWd10-Regular] \definefontsynonym [LMTypewriterVarWd-Oblique] [LMTypewriterVarWd10-Oblique] \definefontsynonym [LMTypewriterVarWd-Light] [LMTypewriterVarWd10-Light] \definefontsynonym [LMTypewriterVarWd-LightOblique] [LMTypewriterVarWd10-LightOblique] \definefontsynonym [LMTypewriterVarWd-Dark] [LMTypewriterVarWd10-Dark] \definefontsynonym [LMTypewriterVarWd-DarkOblique] [LMTypewriterVarWd10-DarkOblique] \stoptypescript \starttypescript [serif] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModern] [LMRoman-Regular] \definefontsynonym [ComputerModern-Italic] [LMRoman-Italic] \definefontsynonym [ComputerModern-Slanted] [LMRoman-Oblique] \definefontsynonym [ComputerModern-Bold] [LMRoman-Bold] \definefontsynonym [ComputerModern-BoldItalic] [LMRoman-BoldItalic] \definefontsynonym [ComputerModern-BoldSlanted] [LMRoman-BoldOblique] \definefontsynonym [ComputerModern-Caps] [LMRoman-CapsRegular] \definefontsynonym [ComputerModern-CapsSlanted] [LMRoman-CapsOblique] \stoptypescript \starttypescript [sans] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModernSans] [LMSans-Regular] \definefontsynonym [ComputerModernSans-Italic] [LMSans-Oblique] \definefontsynonym [ComputerModernSans-Slanted] [LMSans-Oblique] \definefontsynonym [ComputerModernSans-Bold] [LMSans-Bold] \definefontsynonym [ComputerModernSans-BoldItalic] [LMSans-BoldOblique] \definefontsynonym [ComputerModernSans-BoldSlanted] [LMSans-BoldOblique] \definefontsynonym [ComputerModernSans-Caps] [LMSans-Regular] % [LMSans-CapsRegular] \definefontsynonym [ComputerModernSans-CapsSlanted] [LMSans-Oblique] % [LMSans-CapsOblique] \stoptypescript \starttypescript [mono] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModernMono] [LMTypewriter-Regular] \definefontsynonym [ComputerModernMono-Italic] [LMTypewriter-Italic] \definefontsynonym [ComputerModernMono-Slanted] [LMTypewriter-Oblique] \definefontsynonym [ComputerModernMono-Bold] [LMTypewriter-Dark] \definefontsynonym [ComputerModernMono-BoldItalic] [LMTypewriter-DarkOblique] % ! \definefontsynonym [ComputerModernMono-BoldSlanted] [LMTypewriter-DarkOblique] \definefontsynonym [ComputerModernMono-Caps] [LMTypewriter-CapsRegular] \definefontsynonym [ComputerModernMono-CapsSlanted] [LMTypewriter-CapsOblique] \definefontsynonym [ComputerModernMono-Variable] [LMTypewriterVarWd-Regular] \stoptypescript \starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari] \definefontsynonym [ComputerModernVariable] [LMTypewriterVarWd-Regular] \definefontsynonym [ComputerModernVariable-Italic] [LMTypewriterVarWd-Oblique] \definefontsynonym [ComputerModernVariable-Slanted] [LMTypewriterVarWd-Oblique] \definefontsynonym [ComputerModernVariable-Bold] [LMTypewriterVarWd-Dark] \definefontsynonym [ComputerModernVariable-BoldItalic] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [ComputerModernVariable-BoldSlanted] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [ComputerModernVariable-Caps] [LMTypewriterVarWd-Regular] \definefontsynonym [ComputerModernVariable-CapsSlanted] [LMTypewriterVarWd-Oblique] \stoptypescript \starttypescript [math] [modern,latin-modern] \definefontsynonym [LMMathRoman-Regular] [LMMathRoman10-Regular] \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold] \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic] \definefontsynonym [LMMathSymbols-Italic] [LMMathSymbols10-Italic] \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular] \definefontsynonym [LMMathItalic-Italic] [LMMathItalic10-Italic] \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic] \stoptypescript % can boldmath and bfmath be joined? \starttypescript [boldmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold] \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular] \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic] \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic] \stoptypescript \starttypescript [bfmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold] \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular] \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic] \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic] \stoptypescript \starttypescript [serif] [modern,latin-modern,computer-modern] \definefontsynonym [cmr5] [LMRoman5-Regular] \definefontsynonym [cmr6] [LMRoman6-Regular] \definefontsynonym [cmr7] [LMRoman7-Regular] \definefontsynonym [cmr8] [LMRoman8-Regular] \definefontsynonym [cmr9] [LMRoman9-Regular] \definefontsynonym [cmr10] [LMRoman10-Regular] \definefontsynonym [cmr12] [LMRoman12-Regular] \definefontsynonym [cmr17] [LMRoman17-Regular] \definefontsynonym [cmbx5] [LMRoman5-Bold] \definefontsynonym [cmbx6] [LMRoman6-Bold] \definefontsynonym [cmbx7] [LMRoman7-Bold] \definefontsynonym [cmbx8] [LMRoman8-Bold] \definefontsynonym [cmbx9] [LMRoman9-Bold] \definefontsynonym [cmbx10] [LMRoman10-Bold] \definefontsynonym [cmbx12] [LMRoman12-Bold] \definefontsynonym [cmsl10] [LMRoman10-Oblique] \definefontsynonym [cmsl12] [LMRoman12-Oblique] \definefontsynonym [cmsl17] [LMRoman17-Oblique] \definefontsynonym [cmsl8] [LMRoman8-Oblique] \definefontsynonym [cmsl9] [LMRoman9-Oblique] \definefontsynonym [cmti7] [LMRoman7-Italic] \definefontsynonym [cmti8] [LMRoman8-Italic] \definefontsynonym [cmti9] [LMRoman9-Italic] \definefontsynonym [cmti10] [LMRoman10-Italic] \definefontsynonym [cmti12] [LMRoman12-Italic] \definefontsynonym [cmbsl10] [LMRoman10-DemiOblique] \definefontsynonym [cmbxsl10] [LMRoman10-BoldOblique] \definefontsynonym [cmbxti10] [LMRoman10-BoldItalic] \definefontsynonym [cmcsc10] [LMRoman10-CapsRegular] \definefontsynonym [cmcscsl10][LMRoman10-CapsOblique] %definefontsynonym [cmb10] \stoptypescript \starttypescript [sans] [modern,latin-modern,computer-modern] \definefontsynonym [cmss8] [LMSans8-Regular] \definefontsynonym [cmss9] [LMSans9-Regular] \definefontsynonym [cmss10] [LMSans10-Regular] \definefontsynonym [cmss12] [LMSans12-Regular] \definefontsynonym [cmss17] [LMSans17-Regular] \definefontsynonym [cmssi10] [LMSans10-Oblique] \definefontsynonym [cmssi12] [LMSans12-Oblique] \definefontsynonym [cmssi17] [LMSans17-Oblique] \definefontsynonym [cmssi8] [LMSans8-Oblique] \definefontsynonym [cmssi9] [LMSans9-Oblique] \definefontsynonym [cmssq8] [LMSansQuotation8-Regular] \definefontsynonym [cmssqb8] [LMSansQuotation8-Bold] \definefontsynonym [cmssqbi8] [LMSansQuotation8-BoldOblique] \definefontsynonym [cmssqi8] [LMSansQuotation8-Oblique] \definefontsynonym [cmssbx10] [LMSans10-Bold] \definefontsynonym [cmssdc10] [LMSans10-DemiCondensed] \definefontsynonym [cmssbi10] [LMSans10-BoldOblique] \definefontsynonym [cmssdi10] [LMSans10-DemiCondensedOblique] \stoptypescript \starttypescript [mono] [modern,latin-modern,computer-modern] \definefontsynonym [cmtt8] [LMTypewriter8-Regular] \definefontsynonym [cmtt9] [LMTypewriter9-Regular] \definefontsynonym [cmtt10] [LMTypewriter10-Regular] \definefontsynonym [cmtt12] [LMTypewriter12-Regular] \definefontsynonym [cmitt10] [LMTypewriter10-Italic] \definefontsynonym [cmsltt10] [LMTypewriter10-Oblique] \definefontsynonym [cmvtt10] [LMTypewriterVarWd10-Regular] \definefontsynonym [cmvtti10] [LMTypewriterVarWd10-Oblique] \definefontsynonym [cmtcsc10] [LMTypewriter10-CapsRegular] \stoptypescript \starttypescript [math] [modern,latin-modern,computer-modern] \definefontsynonym [cmbsy5] [LMMathSymbols5-BoldItalic] \definefontsynonym [cmbsy7] [LMMathSymbols7-BoldItalic] \definefontsynonym [cmbsy10] [LMMathSymbols10-BoldItalic] \definefontsynonym [cmsy5] [LMMathSymbols5-Italic] \definefontsynonym [cmsy6] [LMMathSymbols6-Italic] \definefontsynonym [cmsy7] [LMMathSymbols7-Italic] \definefontsynonym [cmsy8] [LMMathSymbols8-Italic] \definefontsynonym [cmsy9] [LMMathSymbols9-Italic] \definefontsynonym [cmsy10] [LMMathSymbols10-Italic] \definefontsynonym [cmex10] [LMMathExtension10-Regular] \definefontsynonym [cmmi5] [LMMathItalic5-Italic] \definefontsynonym [cmmi6] [LMMathItalic6-Italic] \definefontsynonym [cmmi7] [LMMathItalic7-Italic] \definefontsynonym [cmmi8] [LMMathItalic8-Italic] \definefontsynonym [cmmi9] [LMMathItalic9-Italic] \definefontsynonym [cmmi10] [LMMathItalic10-Italic] \definefontsynonym [cmmi12] [LMMathItalic12-Italic] \definefontsynonym [cmmib5] [LMMathItalic5-BoldItalic] \definefontsynonym [cmmib7] [LMMathItalic7-BoldItalic] \definefontsynonym [cmmib10] [LMMathItalic10-BoldItalic] \stoptypescript % This will change some day. \starttypescript [math] [modern,computer-modern,latin-modern] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [msbm10] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [cmsy10] \stoptypescript \starttypescript [fallback] [texnansi,ec,qx,t5,default] \definetypeface [] [rm] [serif] [modern] [computer-modern] [encoding=\typescripttwo] \definetypeface [] [ss] [sans] [modern] [computer-modern] [encoding=\typescripttwo] \definetypeface [] [tt] [mono] [modern] [computer-modern] [encoding=\typescripttwo] \definetypeface [] [mm] [math] [modern] [computer-modern] [encoding=\typescripttwo] \quittypescriptscanning \stoptypescript \starttypescript [modern] [texnansi,ec,qx,t5,default] \definetypeface [modern] [rm] [serif] [modern] [computer-modern] [encoding=\typescripttwo] \definetypeface [modern] [ss] [sans] [modern] [computer-modern] [encoding=\typescripttwo] \definetypeface [modern] [tt] [mono] [modern] [computer-modern] [encoding=\typescripttwo] \definetypeface [modern] [mm] [math] [modern] [computer-modern] [encoding=\typescripttwo] \quittypescriptscanning \stoptypescript \starttypescript [modern-base] [texnansi,ec,qx,t5,default] \definetypeface [modern] [rm] [serif] [modern] [default] [encoding=\typescripttwo] \definetypeface [modern] [ss] [sans] [modern] [default] [encoding=\typescripttwo] \definetypeface [modern] [tt] [mono] [modern] [default] [encoding=\typescripttwo] \definetypeface [modern] [mm] [math] [modern] [default] [encoding=\typescripttwo] \quittypescriptscanning \stoptypescript \starttypescript [modern-base] [t2a,t2b,t2c,x2] \definetypeface [modern] [rm] [serif] [computer-modern] [default] [encoding=\typescripttwo] \definetypeface [modern] [ss] [sans] [computer-modern] [default] [encoding=\typescripttwo] \definetypeface [modern] [tt] [mono] [computer-modern] [default] [encoding=\typescripttwo] \definetypeface [modern] [mm] [math] [computer-modern] [default] [encoding=\typescripttwo] \quittypescriptscanning \stoptypescript \starttypescript [modernvariable] [texnansi,ec,qx,8r,t5] \definetypeface [modernvariable] [rm] [serif] [simple] [default] [encoding=\typescripttwo] \definetypeface [modernvariable] [ss] [sans] [modern] [default] [encoding=\typescripttwo] \definetypeface [modernvariable] [tt] [mono] [modern] [default] [encoding=\typescripttwo] \definetypeface [modernvariable] [mm] [math] [modern] [default] \quittypescriptscanning \stoptypescript \starttypescript [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it \definefontsynonym [Simple] [cmvtt10] \setupfontsynonym [Simple] [handling=pure] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[concrete] \starttypescript [serif] [concrete] [name] \definefontsynonym [Serif] [ComputerConcrete] \definefontsynonym [SerifBold] [ComputerConcrete] \definefontsynonym [SerifItalic] [ComputerConcrete-Italic] \definefontsynonym [SerifSlanted] [ComputerConcrete-Slanted] \definefontsynonym [SerifBoldItalic] [ComputerConcrete-Italic] \definefontsynonym [SerifBoldSlanted] [ComputerConcrete-Slanted] \definefontsynonym [SerifCaps] [ComputerConcrete-Caps] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[euler] \starttypescript [math] [euler] [default] \definefontsynonym [Euler-Roman] [zeurm10] \definefontsynonym [Euler-Extension] [zeuex10] \definefontsynonym [Euler-Symbol] [zeusm10] \definefontsynonym [Euler-Fraktur] [eufm10] \usemathcollection[eul] \loadmapfile[original-ams-euler.map] \stoptypescript \starttypescript [boldmath,bfmath] [euler] [default] \definefontsynonym [Euler-Roman-Bold] [zeurb10] \definefontsynonym [Euler-Extension] [zeuex10] \definefontsynonym [Euler-Symbol-Bold] [zeusb10] \definefontsynonym [Euler-Fraktur-Bold] [eufb10] \usemathcollection[eul] \loadmapfile[original-ams-euler.map] \stoptypescript \starttypescript [math] [euler] [name] \definefontsynonym [MathRoman] [Euler-Roman] % mr \definefontsynonym [MathItalic] [Euler-Fraktur] % mi \definefontsynonym [MathExtension] [Euler-Extension] % ex \definefontsynonym [MathSymbol] [Euler-Symbol] % sy \stoptypescript \starttypescript [boldmath] [euler] [name] \definefontsynonym [MathRoman] [Euler-Roman-Bold] % mr \definefontsynonym [MathItalic] [Euler-Fraktur-Bold] % mi \definefontsynonym [MathExtension] [Euler-Extension] % ex \definefontsynonym [MathSymbol] [Euler-Symbol-Bold] % sy \stoptypescript \starttypescript [bfmath] [euler] [name] \definefontsynonym [MathRomanBold] [Euler-Roman-Bold] % mr \definefontsynonym [MathItalicBold] [Euler-Fraktur-Bold] % mi \definefontsynonym [MathExtension] [Euler-Extension] % ex \definefontsynonym [MathSymbolBold] [Euler-Symbol-Bold] % sy \stoptypescript \starttypescript [math] [euler] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [MathItalic] \definefontsynonym [Gothic] [MathItalic] \definefontsynonym [Calligraphic] [MathSymbol] \stoptypescript \starttypescript [boldmath] [euler] [name] \definefontsynonym [OldStyle] [MathItalicBold] \definefontsynonym [Fraktur] [MathItalicBold] \definefontsynonym [Gothic] [MathItalicBold] \definefontsynonym [Calligraphic] [MathSymbolBold] \stoptypescript \starttypescript [math,boldmath,bfmath] [euler] [name] \usemathcollection[eul] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[amssymbols] \starttypescript [math] [modern,computer-modern,latin-modern,ams] [default] \definefontsynonym [AMS-SymbolA] [msam10] \definefontsynonym [AMS-SymbolB] [msbm10] \usemathcollection[default] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern,ams] [name] \definefontsynonym [MathAlpha] [AMS-SymbolA] \definefontsynonym [MathBeta] [AMS-SymbolB] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[utopia] \starttypescript [math] [fourier] [default,ec] \definefontsynonym [Fourier-Math-Letters] [futr8t] [encoding=ec] %definefontsynonym [Fourier-Math-Letters] [futmi] \definefontsynonym [Fourier-Math-Letters-Italic] [futmii] \definefontsynonym [Fourier-Math-Symbols] [futsy] \definefontsynonym [Fourier-Math-Extension] [fourier-mex] \usemathcollection[fou] \loadmapfile[fourier.map] \stoptypescript \starttypescript [serif] [utopia] [name] \definefontsynonym [Serif] [Utopia-Regular] \definefontsynonym [SerifItalic] [Utopia-Italic] \definefontsynonym [SerifBold] [Utopia-Bold] \definefontsynonym [SerifBoldItalic] [Utopia-BoldItalic] \definefontsynonym [SerifSlanted] [Utopia-Slanted] \definefontsynonym [SerifBoldSlanted] [Utopia-BoldSlanted] \definefontsynonym [SerifCaps] [Utopia-Regular-Caps] \stoptypescript \starttypescript [serif] [fourier] [ec] \definefontsynonym [Fourier-Regular] [futr8t] [encoding=ec] \definefontsynonym [Fourier-Slanted] [futro8t] [encoding=ec] \definefontsynonym [Fourier-Italic] [futri8t] [encoding=ec] \definefontsynonym [Fourier-RegularCaps] [futrc8t] [encoding=ec] \definefontsynonym [Fourier-Bold] [futb8t] [encoding=ec] \definefontsynonym [Fourier-BoldSlanted] [futbo8t] [encoding=ec] \definefontsynonym [Fourier-BoldItalic] [futbi8t] [encoding=ec] \definefontsynonym [Fourier-BoldCaps] [futbc8t] [encoding=ec] \definefontsynonym [Fourier-Regular-Expert] [futr9e] [encoding=ec] \definefontsynonym [Fourier-Slanted-Expert] [futro9e] [encoding=ec] \definefontsynonym [Fourier-Italic-Expert] [futri9e] [encoding=ec] \definefontsynonym [Fourier-RegularCaps-Expert] [futrc9e] [encoding=ec] \definefontsynonym [Fourier-Semi-Expert] [futs9e] [encoding=ec] \definefontsynonym [Fourier-SemiSlanted-Expert] [futso9e] [encoding=ec] \definefontsynonym [Fourier-SemiItalic-Expert] [futsi9e] [encoding=ec] \definefontsynonym [Fourier-SemiCaps-Expert] [futsc9e] [encoding=ec] \definefontsynonym [Fourier-Bold-Expert] [futb9e] [encoding=ec] \definefontsynonym [Fourier-BoldSlanted-Expert] [futbo9e] [encoding=ec] \definefontsynonym [Fourier-BoldItalic-Expert] [futbi9e] [encoding=ec] \definefontsynonym [Fourier-Black-Expert] [futc9e] [encoding=ec] \definefontsynonym [Fourier-Regular-OldStyle] [futr9d] [encoding=ec] \definefontsynonym [Fourier-Slanted-OldStyle] [futro9d] [encoding=ec] \definefontsynonym [Fourier-Italic-OldStyle] [futri9d] [encoding=ec] \definefontsynonym [Fourier-RegularCaps-OldStyle] [futrc9d] [encoding=ec] \definefontsynonym [Fourier-Semi-OldStyle] [futs9d] [encoding=ec] \definefontsynonym [Fourier-SemiSlanted-OldStyle] [futso9d] [encoding=ec] \definefontsynonym [Fourier-SemiItalic-OldStyle] [futsi9d] [encoding=ec] \definefontsynonym [Fourier-SemiCaps-OldStyle] [futsc9d] [encoding=ec] \definefontsynonym [Fourier-Bold-OldStyle] [futb9d] [encoding=ec] \definefontsynonym [Fourier-BoldSlanted-OldStyle] [futbo9d] [encoding=ec] \definefontsynonym [Fourier-BoldItalic-OldStyle] [futbi9d] [encoding=ec] \definefontsynonym [Fourier-Black-OldStyle] [futc9d] [encoding=ec] \loadmapfile[fourier.map] \loadmapfile[fourier-utopia-expert.map] \stoptypescript \starttypescript [serif] [fourier] [name] \definefontsynonym [Serif] [Fourier-Regular] \definefontsynonym [SerifSlanted] [Fourier-Slanted] \definefontsynonym [SerifItalic] [Fourier-Italic] \definefontsynonym [SerifCaps] [Fourier-RegularCaps] \definefontsynonym [SerifBold] [Fourier-Bold] \definefontsynonym [SerifBoldSlanted] [Fourier-BoldSlanted] \definefontsynonym [SerifBoldItalic] [Fourier-BoldItalic] \definefontsynonym [SerifBoldCaps] [Fourier-BoldCaps] \definefontsynonym [Serif-Expert] [Fourier-Regular-Expert] \definefontsynonym [SerifSlanted-Expert] [Fourier-Slanted-Expert] \definefontsynonym [SerifItalic-Expert] [Fourier-Italic-Expert] \definefontsynonym [SerifCaps-Expert] [Fourier-RegularCaps-Expert] \definefontsynonym [SerifSemiBold-Expert] [Fourier-Semi-Expert] \definefontsynonym [SerifSemiSlanted-Expert] [Fourier-SemiSlanted-Expert] \definefontsynonym [SerifSemiItalic-Expert] [Fourier-SemiItalic-Expert] \definefontsynonym [SerifSemiCaps-Expert] [Fourier-SemiCaps-Expert] \definefontsynonym [SerifBold-Expert] [Fourier-Bold-Expert] \definefontsynonym [SerifBoldSlanted-Expert] [Fourier-BoldSlanted-Expert] \definefontsynonym [SerifBoldItalic-Expert] [Fourier-BoldItalic-Expert] \definefontsynonym [SerifBlack-Expert] [Fourier-Black-Expert] \definefontsynonym [Serif-OldStyle] [Fourier-Regular-OldStyle] \definefontsynonym [SerifSlanted-OldStyle] [Fourier-Slanted-OldStyle] \definefontsynonym [SerifItalic-OldStyle] [Fourier-Italic-OldStyle] \definefontsynonym [SerifCaps-OldStyle] [Fourier-RegularCaps-OldStyle] \definefontsynonym [SerifSemiBold-OldStyle] [Fourier-Semi-OldStyle] \definefontsynonym [SerifSemiSlanted-OldStyle] [Fourier-SemiSlanted-OldStyle] \definefontsynonym [SerifSemiItalic-OldStyle] [Fourier-SemiItalic-OldStyle] \definefontsynonym [SerifSemiCaps-OldStyle] [Fourier-SemiCaps-OldStyle] \definefontsynonym [SerifBold-OldStyle] [Fourier-Bold-OldStyle] \definefontsynonym [SerifBoldSlanted-OldStyle] [Fourier-BoldSlanted-OldStyle] \definefontsynonym [SerifBoldItalic-OldStyle] [Fourier-BoldItalic-OldStyle] \definefontsynonym [SerifBlack-OldStyle] [Fourier-Black-OldStyle] \definefontsynonym [SerifBlackSlanted-OldStyle] [Fourier-BlackSlanted-OldStyle] \stoptypescript \starttypescript [math] [fourier] [name] \definefontsynonym [MathRoman] [Fourier-Math-Letters] \definefontsynonym [MathItalic] [Fourier-Math-Letters-Italic] \definefontsynonym [MathSymbol] [Fourier-Math-Symbols] \definefontsynonym [MathExtension] [Fourier-Math-Extension] \stoptypescript \starttypescript [math] [fourier] [name] % todo \definefontsynonym [OldStyle] [Serif-OldStyle] % strange, no oldstyles \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [msbm10] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [eusm10] \stoptypescript \starttypescript [serif] [utopia] [ec,texnansi] \definefontsynonym [Utopia-Regular] [\typescriptthree-putr8a] [encoding=\typescriptthree] \definefontsynonym [Utopia-Italic] [\typescriptthree-putri8a] [encoding=\typescriptthree] \definefontsynonym [Utopia-Bold] [\typescriptthree-putb8a] [encoding=\typescriptthree] \definefontsynonym [Utopia-BoldItalic] [\typescriptthree-putbi8a] [encoding=\typescriptthree] \definefontsynonym [Utopia-Slanted] [\typescriptthree-putr8a-slanted-167] [encoding=\typescriptthree] \definefontsynonym [Utopia-BoldSlanted] [\typescriptthree-putb8a-slanted-167] [encoding=\typescriptthree] \definefontsynonym [Utopia-Regular-Caps][\typescriptthree-putr8a-capitalized-800] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-adobe-utopia.map] \stoptypescript \starttypescript [fourier] [ec] \definetypeface [fourier] [rm] [serif] [fourier] [default] [encoding=ec] \definetypeface [fourier] [ss] [sans] [modern] [default] [encoding=ec,rscale=1.07] \definetypeface [fourier] [tt] [mono] [modern] [default] [encoding=ec,rscale=1.07] \definetypeface [fourier] [mm] [math] [fourier] [default] [encoding=default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[antykwa] % Antykwa Torunska (GUST) % \starttypescript [serif] [antykwa-torunska] [texnansi,ec,8r] % \definefontsynonym [AntykwaTorunska-Regular] [\typescriptthree-anttr] [encoding=\typescriptthree] % \definefontsynonym [AntykwaTorunska-Bold] [\typescriptthree-anttb] [encoding=\typescriptthree] % \definefontsynonym [AntykwaTorunska-Italic] [\typescriptthree-anttri] [encoding=\typescriptthree] % \stoptypescript \starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [texnansi,qx,t5,ec,t2a,t2b,t2c,greek] \definefontsynonym [AntykwaTorunska-Regular] [\typescriptthree-anttr] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-Italic] [\typescriptthree-anttri] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-Bold] [\typescriptthree-anttb] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-BoldItalic] [\typescriptthree-anttbi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-Light] [\typescriptthree-anttl] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightItalic] [\typescriptthree-anttli] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-Medium] [\typescriptthree-anttm] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MedItalic] [\typescriptthree-anttmi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondRegular] [\typescriptthree-anttcr] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondItalic] [\typescriptthree-anttcri] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBold] [\typescriptthree-anttcb] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldItalic] [\typescriptthree-anttcbi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLight] [\typescriptthree-anttcl] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightItalic][\typescriptthree-anttcli] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMedium] [\typescriptthree-anttcm] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMedItalic] [\typescriptthree-anttcmi] [encoding=\typescriptthree] \loadmapfile[antt-\typescriptthree.map] \stoptypescript \starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [texnansi,qx,t5,ec] \definefontsynonym [AntykwaTorunska-Cap] [\typescriptthree-anttrcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-ItalicCap] [\typescriptthree-anttricap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-BoldCap] [\typescriptthree-anttbcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\typescriptthree-anttbicap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightCap] [\typescriptthree-anttlcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightItalicCap] [\typescriptthree-anttlicap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MediumCap] [\typescriptthree-anttmcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MedItalicCap] [\typescriptthree-anttmicap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondCap] [\typescriptthree-anttcrcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondItalicCap] [\typescriptthree-anttcricap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldCap] [\typescriptthree-anttcbcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\typescriptthree-anttcbicap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightCap] [\typescriptthree-anttclcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\typescriptthree-anttclicap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMediumCap] [\typescriptthree-anttcmcap] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\typescriptthree-anttcmicap] [encoding=\typescriptthree] \loadmapfile[antt-\typescriptthree.map] \stoptypescript % duplicates ? ? % atl: no: fallbacks for the named variants \starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [t2a,t2b,t2c,greek] \definefontsynonym [AntykwaTorunska-BoldCap] [\typescriptthree-anttb] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\typescriptthree-anttbi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightCap] [\typescriptthree-anttl] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightItalicCap] [\typescriptthree-anttli] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MediumCap] [\typescriptthree-anttm] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MedItalicCap] [\typescriptthree-anttmi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-Cap] [\typescriptthree-anttr] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-ItalicCap] [\typescriptthree-anttri] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldCap] [\typescriptthree-anttcb] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\typescriptthree-anttcbi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightCap] [\typescriptthree-anttcl] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\typescriptthree-anttcli] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMediumCap] [\typescriptthree-anttcm] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\typescriptthree-anttcmi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondCap] [\typescriptthree-anttcr] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondItalicCap] [\typescriptthree-anttcri] [encoding=\typescriptthree] \loadmapfile[antt-\typescriptthree.map] \stoptypescript \starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [t2a,t2b,t2c] \definefontsynonym [AntykwaTorunska-BoldCap] [\typescriptthree-anttb] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\typescriptthree-anttbi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightCap] [\typescriptthree-anttl] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-LightItalicCap] [\typescriptthree-anttli] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MediumCap] [\typescriptthree-anttm] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-MedItalicCap] [\typescriptthree-anttmi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-Cap] [\typescriptthree-anttr] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-ItalicCap] [\typescriptthree-anttri] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldCap] [\typescriptthree-anttcb] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\typescriptthree-anttcbi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightCap] [\typescriptthree-anttcl] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\typescriptthree-anttcli] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMediumCap] [\typescriptthree-anttcm] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\typescriptthree-anttcmi] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondCap] [\typescriptthree-anttcr] [encoding=\typescriptthree] \definefontsynonym [AntykwaTorunska-CondItalicCap] [\typescriptthree-anttcri] [encoding=\typescriptthree] \loadmapfile[antt-\typescriptthree.map] \stoptypescript % mabye no -Regular etc % dunny reverse of condlight lightcond \starttypescript [math] [antykwa-torunska] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-Regular] [rm-anttr] \definefontsynonym [AntykwaTorunska-Math-Letters-Italic] [mi-anttri] \definefontsynonym [AntykwaTorunska-Math-Symbols-Regular] [sy-anttrz] \definefontsynonym [AntykwaTorunska-Math-Extension-Regular] [ex-anttr] \stoptypescript \starttypescript [math] [antykwa-torunska-light] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-Light] [rm-anttl] \definefontsynonym [AntykwaTorunska-Math-Letters-LightItalic] [mi-anttli] \definefontsynonym [AntykwaTorunska-Math-Symbols-Light] [sy-anttlz] \definefontsynonym [AntykwaTorunska-Math-Extension-Light] [ex-anttl] \stoptypescript \starttypescript [math] [antykwa-torunska-cond] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-CondRegular] [rm-anttcr] \definefontsynonym [AntykwaTorunska-Math-Letters-CondItalic] [mi-anttcri] \definefontsynonym [AntykwaTorunska-Math-Symbols-CondRegular] [sy-anttcrz] \definefontsynonym [AntykwaTorunska-Math-Extension-CondRegular] [ex-anttcr] \stoptypescript \starttypescript [math] [antykwa-torunska-lightcond] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-CondLight] [rm-anttcl] \definefontsynonym [AntykwaTorunska-Math-Letters-CondLightItalic] [mi-anttcli] \definefontsynonym [AntykwaTorunska-Math-Symbols-CondLight] [sy-anttclz] \definefontsynonym [AntykwaTorunska-Math-Extension-CondLight] [ex-anttcl] \stoptypescript \starttypescript [math] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [default] \usemathcollection[default] \loadmapfile[antt-rm.map] \loadmapfile[antt-mi.map] \loadmapfile[antt-sy.map] \loadmapfile[antt-ex.map] \stoptypescript \starttypescript [serif] [antykwa-torunska] [name] \definefontsynonym [Serif] [AntykwaTorunska-Regular] \definefontsynonym [SerifBold] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalic] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-Cap] \stoptypescript \starttypescript [serif] [antykwa-torunska-light] [name] \definefontsynonym [Serif] [AntykwaTorunska-Light] \definefontsynonym [SerifBold] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalic] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-LightCap] \stoptypescript \starttypescript [serif] [antykwa-torunska-cond] [name] \definefontsynonym [Serif] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBold] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalic] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-CondCap] \stoptypescript \starttypescript [serif] [antykwa-torunska-lightcond] [name] \definefontsynonym [Serif] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBold] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalic] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-CondLightCap] \stoptypescript \starttypescript [serif] [antykwa-torunska] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-Cap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-BoldCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-ItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-ItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-BoldItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-BoldItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-Cap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularLight] [AntykwaTorunska-Light] \definefontsynonym [SerifBoldLight] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalicLight] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCapsLight] [AntykwaTorunska-LightCap] \definefontvariant [Serif][lt][Light] \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondCap] \definefontvariant [Serif][cond][Cond] \stoptypescript \starttypescript [serif] [antykwa-torunska-light] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-LightCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-MediumCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-LightItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-LightItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-MedItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-MedItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-LightCap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularDark] [AntykwaTorunska-Regular] \definefontsynonym [SerifBoldDark] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalicDark] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCapsDark] [AntykwaTorunska-Cap] \definefontvariant [Serif][dk][Dark] \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondLightCap] \definefontvariant [Serif][cond][Cond] \stoptypescript \starttypescript [serif] [antykwa-torunska-cond] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondBoldCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondBoldItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondBoldItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondCap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularLight] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBoldLight] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalicLight] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCapsLight] [AntykwaTorunska-CondLightCap] \definefontvariant [Serif][lt][Light] \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Regular] \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalicExp] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCapsExp] [AntykwaTorunska-Cap] \definefontvariant [Serif][exp][Exp] \stoptypescript \starttypescript [serif] [antykwa-torunska-lightcond] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondLightCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondMediumCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondLightItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondLightItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondMedItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondMedItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondLightCap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularDark] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBoldDark] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalicDark] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCapsDark] [AntykwaTorunska-CondCap] \definefontvariant [Serif][dk][Dark] \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Light] \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalicExp] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCapsExp] [AntykwaTorunska-LightCap] \definefontvariant [Serif][exp][Exp] \stoptypescript % maybe no -Regular etc \starttypescript [math] [antykwa-torunska-light] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-Light] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-LightItalic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-Light] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-Light] \stoptypescript \starttypescript [math] [antykwa-torunska] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-Regular] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-Italic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-Regular] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-Regular] \stoptypescript \starttypescript [math] [antykwa-torunska-cond] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-CondRegular] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-CondItalic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-CondRegular] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-CondRegular] \stoptypescript \starttypescript [math] [antykwa-torunska-lightcond] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-CondLight] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-CondLightItalic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-CondLight] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-CondLight] \stoptypescript \starttypescript [antykwa-torunska] [texnansi,ec,8r,uc,t5,t2a] \definetypeface[antykwa][rm][serif][antykwa-torunska] [default][encoding=\typescripttwo] \definetypeface[antykwa][ss][sans] [modern] [default][encoding=\typescripttwo,rscale=1.05] \definetypeface[antykwa][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1] \definetypeface[antykwa][mm][math] [antykwa-torunska] [default][encoding=\typescripttwo] \quittypescriptscanning \stoptypescript % Antykwa Poltawskiego (GUST) \starttypescript [serif] [antykwa-poltawskiego,antykwa-poltawskiego-light] [ec,texnansi,qx,t5] \definefontsynonym [AntykwaPoltawskiego-Condensed-Light] [\typescriptthree-antpl17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-LightItalic] [\typescriptthree-antpli17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-Regular] [\typescriptthree-antpr17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-Italic] [\typescriptthree-antpri17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-Medium] [\typescriptthree-antpm17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-MediumItalic] [\typescriptthree-antpmi17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-Bold] [\typescriptthree-antpb17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-BoldItalic] [\typescriptthree-antpbi17] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLight] [\typescriptthree-antpl17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLightItalic] [\typescriptthree-antpli17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsRegular] [\typescriptthree-antpr17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsItalic] [\typescriptthree-antpri17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMedium] [\typescriptthree-antpm17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMediumItalic] [\typescriptthree-antpmi17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBold] [\typescriptthree-antpb17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBoldItalic] [\typescriptthree-antpbi17-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\typescriptthree-antpl12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\typescriptthree-antpli12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\typescriptthree-antpr12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\typescriptthree-antpri12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Medium] [\typescriptthree-antpm12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-MediumItalic] [\typescriptthree-antpmi12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Bold] [\typescriptthree-antpb12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-BoldItalic] [\typescriptthree-antpbi12] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\typescriptthree-antpl12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\typescriptthree-antpli12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\typescriptthree-antpr12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\typescriptthree-antpri12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMedium] [\typescriptthree-antpm12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMediumItalic] [\typescriptthree-antpmi12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBold] [\typescriptthree-antpb12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBoldItalic] [\typescriptthree-antpbi12-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Light] [\typescriptthree-antpl10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-LightItalic] [\typescriptthree-antpli10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Regular] [\typescriptthree-antpr10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Italic] [\typescriptthree-antpri10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Medium] [\typescriptthree-antpm10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-MediumItalic] [\typescriptthree-antpmi10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Bold] [\typescriptthree-antpb10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [\typescriptthree-antpbi10] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsLight] [\typescriptthree-antpl10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsLightItalic] [\typescriptthree-antpli10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsRegular] [\typescriptthree-antpr10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsItalic] [\typescriptthree-antpri10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsMedium] [\typescriptthree-antpm10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsMediumItalic] [\typescriptthree-antpmi10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsBold] [\typescriptthree-antpb10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-CapsBoldItalic] [\typescriptthree-antpbi10-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Light] [\typescriptthree-antpl8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-LightItalic] [\typescriptthree-antpli8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Regular] [\typescriptthree-antpr8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Italic] [\typescriptthree-antpri8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Medium] [\typescriptthree-antpm8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-MediumItalic] [\typescriptthree-antpmi8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Bold] [\typescriptthree-antpb8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-BoldItalic] [\typescriptthree-antpbi8] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsLight] [\typescriptthree-antpl8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsLightItalic] [\typescriptthree-antpli8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsRegular] [\typescriptthree-antpr8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsItalic] [\typescriptthree-antpri8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsMedium] [\typescriptthree-antpm8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsMediumItalic] [\typescriptthree-antpmi8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsBold] [\typescriptthree-antpb8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsBoldItalic] [\typescriptthree-antpbi8-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-Light] [\typescriptthree-antpl6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-LightItalic] [\typescriptthree-antpli6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-Regular] [\typescriptthree-antpr6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-Italic] [\typescriptthree-antpri6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-Medium] [\typescriptthree-antpm6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-MediumItalic] [\typescriptthree-antpmi6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-Bold] [\typescriptthree-antpb6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-BoldItalic] [\typescriptthree-antpbi6] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsLight] [\typescriptthree-antpl6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsLightItalic] [\typescriptthree-antpli6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsRegular] [\typescriptthree-antpr6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsItalic] [\typescriptthree-antpri6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsMedium] [\typescriptthree-antpm6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsMediumItalic] [\typescriptthree-antpmi6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsBold] [\typescriptthree-antpb6-sc] [encoding=\typescriptthree] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsBoldItalic] [\typescriptthree-antpbi6-sc] [encoding=\typescriptthree] % \loadmapfile[poltawski-\typescriptthree.map] \loadmapfile[ap-\typescriptthree.map] \stoptypescript \starttypescript [serif] [antykwa-poltawskiego] [name] \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular] \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold] \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic] \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic] \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-BoldItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-BoldItalic] \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsRegular] \stoptypescript \starttypescript [serif] [antykwa-poltawskiego-light] [name] \definefontsynonym [Serif] [AntykwaPoltawskiego-Light] \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Medium] \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-LightItalic] \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-LightItalic] \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-MediumItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-MediumItalic] \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsLight] \stoptypescript % condensed and extended variants are still missing \starttypescript [antykwa-poltawskiego,antykwa-poltawskiego-light] [ec,texnansi,qx,t5] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo,rscale=1.05] % scaling? \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05] % scaling? \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=\typescripttwo,rscale=1.05] % scaling? \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[iwona] % maybe this will change in Iwona-Math-Letters and Iwona-Math-Letters-Italic \starttypescript [sans] [iwona-light,iwona,iwona-medium,iwona-heavy,iwona-light-cond,iwona-cond,iwona-medium-cond,iwona-heavy-cond] [texnansi,ec,el,qx,t5] \definefontsynonym[Iwona-Regular] [\typescriptthree-iwonar] [encoding=\typescriptthree] \definefontsynonym[Iwona-Italic] [\typescriptthree-iwonari] [encoding=\typescriptthree] \definefontsynonym[Iwona-Bold] [\typescriptthree-iwonab] [encoding=\typescriptthree] \definefontsynonym[Iwona-BoldItalic] [\typescriptthree-iwonabi] [encoding=\typescriptthree] \definefontsynonym[Iwona-Light-Regular] [\typescriptthree-iwonal] [encoding=\typescriptthree] \definefontsynonym[Iwona-Light-Italic] [\typescriptthree-iwonali] [encoding=\typescriptthree] \definefontsynonym[Iwona-Medium-Regular] [\typescriptthree-iwonam] [encoding=\typescriptthree] \definefontsynonym[Iwona-Medium-Italic] [\typescriptthree-iwonami] [encoding=\typescriptthree] \definefontsynonym[Iwona-Heavy-Regular] [\typescriptthree-iwonah] [encoding=\typescriptthree] \definefontsynonym[Iwona-Heavy-Italic] [\typescriptthree-iwonahi] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsRegular] [\typescriptthree-iwonar-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsItalic] [\typescriptthree-iwonari-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsBold] [\typescriptthree-iwonab-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsBoldItalic] [\typescriptthree-iwonabi-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsLight-Regular] [\typescriptthree-iwonal-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsLight-Italic] [\typescriptthree-iwonali-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsMedium-Regular] [\typescriptthree-iwonam-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsMedium-Italic] [\typescriptthree-iwonami-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsHeavy-Regular] [\typescriptthree-iwonah-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsHeavy-Italic] [\typescriptthree-iwonahi-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondRegular] [\typescriptthree-iwonacr] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondItalic] [\typescriptthree-iwonacri] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondBold] [\typescriptthree-iwonacb] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondBoldItalic] [\typescriptthree-iwonacbi] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondLight-Regular] [\typescriptthree-iwonacl] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondLight-Italic] [\typescriptthree-iwonacli] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondMedium-Regular] [\typescriptthree-iwonacm] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondMedium-Italic] [\typescriptthree-iwonacmi] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondHeavy-Regular] [\typescriptthree-iwonach] [encoding=\typescriptthree] \definefontsynonym[Iwona-CondHeavy-Italic] [\typescriptthree-iwonachi] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondRegular] [\typescriptthree-iwonacr-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondItalic] [\typescriptthree-iwonacri-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondBold] [\typescriptthree-iwonacb-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondBoldItalic] [\typescriptthree-iwonacbi-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondLight-Regular] [\typescriptthree-iwonacl-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondLight-Italic] [\typescriptthree-iwonacli-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondMedium-Regular][\typescriptthree-iwonacm-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondMedium-Italic] [\typescriptthree-iwonacmi-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondHeavy-Regular] [\typescriptthree-iwonach-sc] [encoding=\typescriptthree] \definefontsynonym[Iwona-CapsCondHeavy-Italic] [\typescriptthree-iwonachi-sc] [encoding=\typescriptthree] \loadmapfile[iwona-\typescriptthree.map] \stoptypescript \starttypescript [math] [iwona] [default] \definefontsynonym [Iwona-Math-Letters-Regular] [rm-iwonar] \definefontsynonym [Iwona-Math-Letters-Italic] [mi-iwonari] \definefontsynonym [Iwona-Math-Symbols-Regular] [sy-iwonarz] \definefontsynonym [Iwona-Math-Extension-Regular] [ex-iwonar] \stoptypescript \starttypescript [math] [iwona-light] [default] \definefontsynonym [Iwona-Math-Letters-Light-Regular] [rm-iwonal] \definefontsynonym [Iwona-Math-Letters-Light-Italic] [mi-iwonali] \definefontsynonym [Iwona-Math-Symbols-Light] [sy-iwonalz] \definefontsynonym [Iwona-Math-Extension-Light] [ex-iwonal] \stoptypescript \starttypescript [math] [iwona-medium] [default] \definefontsynonym [Iwona-Math-Letters-Medium-Regular][rm-iwonam] \definefontsynonym [Iwona-Math-Letters-Medium-Italic] [mi-iwonami] \definefontsynonym [Iwona-Math-Symbols-Medium] [sy-iwonamz] \definefontsynonym [Iwona-Math-Extension-Medium] [ex-iwonam] \stoptypescript \starttypescript [math] [iwona-heavy] [default] \definefontsynonym [Iwona-Math-Letters-Heavy-Regular] [rm-iwonah] \definefontsynonym [Iwona-Math-Letters-Heavy-Italic] [mi-iwonahi] \definefontsynonym [Iwona-Math-Symbols-Heavy] [sy-iwonahz] \definefontsynonym [Iwona-Math-Extension-Heavy] [ex-iwonah] \stoptypescript \starttypescript [math] [iwona,iwona-light,iwona-medium,iwona-heavy] [default] \usemathcollection[default] \loadmapfile[iwona-rm.map] \loadmapfile[iwona-mi.map] \loadmapfile[iwona-sy.map] \loadmapfile[iwona-ex.map] \stoptypescript \starttypescript [sans] [iwona-light] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Light-Regular] \definefontsynonym [SansItalic] [Iwona-Light-Italic] \definefontsynonym [SansBold] [Iwona-Medium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-Medium-Italic] \definefontsynonym [SansCaps] [Iwona-CapsLight] \definefontsynonym [SansItalicCaps] [Iwona-CapsLightItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsMedium] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsMediumItalic] \stoptypescript \starttypescript [sans] [iwona-light-caps] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsLight-Regular] \definefontsynonym [SansItalic] [Iwona-CapsLight-Italic] \definefontsynonym [SansBold] [Iwona-CapsMedium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsMedium-Italic] \stoptypescript \starttypescript [sans] [iwona] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Regular] \definefontsynonym [SansItalic] [Iwona-Italic] \definefontsynonym [SansBold] [Iwona-Bold] \definefontsynonym [SansBoldItalic] [Iwona-BoldItalic] \definefontsynonym [SansCaps] [Iwona-CapsRegular] \definefontsynonym [SansItalicCaps] [Iwona-CapsItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsBold] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsBoldItalic] \stoptypescript \starttypescript [sans] [iwona-caps] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsRegular] \definefontsynonym [SansItalic] [Iwona-CapsItalic] \definefontsynonym [SansBold] [Iwona-CapsBold] \definefontsynonym [SansBoldItalic] [Iwona-CapsBoldItalic] \stoptypescript \starttypescript [sans] [iwona-medium] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Medium-Regular] \definefontsynonym [SansItalic] [Iwona-Medium-Italic] \definefontsynonym [SansBold] [Iwona-Heavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsMedium-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-medium-caps] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalic] [Iwona-CapsMedium-Italic] \definefontsynonym [SansBold] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-heavy] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Heavy-Regular] \definefontsynonym [SansItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansBold] [Iwona-Heavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-heavy-caps] [name] \setups[font:fallback:sans] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-light-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CondLight-Regular] \definefontsynonym [SansItalic] [Iwona-CondLight-Italic] \definefontsynonym [SansBold] [Iwona-CondMedium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CondMedium-Italic] \definefontsynonym [SansCaps] [Iwona-CapsCondLight-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondLight-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondMedium-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondMedium-Italic] \stoptypescript \starttypescript [sans] [iwona-light-cond-caps,iwona-light-caps-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsCondLight-Regular] \definefontsynonym [SansItalic] [Iwona-CapsCondLight-Italic] \definefontsynonym [SansBold] [Iwona-CapsCondMedium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsCondMedium-Italic] \stoptypescript \starttypescript [sans] [iwona-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CondRegular] \definefontsynonym [SansItalic] [Iwona-CondItalic] \definefontsynonym [SansBold] [Iwona-CondBold] \definefontsynonym [SansBoldItalic] [Iwona-CondBoldItalic] \definefontsynonym [SansCaps] [Iwona-CapsCondRegular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondBold] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondBoldItalic] \stoptypescript \starttypescript [sans] [iwona-cond-caps,iwona-caps-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsCondRegular] \definefontsynonym [SansItalic] [Iwona-CapsCondItalic] \definefontsynonym [SansBold] [Iwona-CapsCondBold] \definefontsynonym [SansBoldItalic] [Iwona-CapsCondBoldItalic] \stoptypescript \starttypescript [sans] [iwona-medium-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CondMedium-Regular] \definefontsynonym [SansItalic] [Iwona-CondMedium-Italic] \definefontsynonym [SansBold] [Iwona-CondHeavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CondHeavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondMedium-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-medium-cond-caps,iwona-medium-caps-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansItalic] [Iwona-CapsCondMedium-Italic] \definefontsynonym [SansBold] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsCondHeavy-Italic] \stoptypescript \starttypescript [math] [iwona-light] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Light-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Light-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Light] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Light] \stoptypescript \starttypescript [math] [iwona] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Regular] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Regular] \stoptypescript \starttypescript [math] [iwona-medium] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Medium-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Medium-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Medium] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Medium] \stoptypescript \starttypescript [math] [iwona-heavy] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Heavy-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Heavy-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Heavy] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Heavy] \stoptypescript \starttypescript [iwona,iwona-light,iwona-heavy,iwona-medium] [texnansi,ec,8r,uc,t2a] \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default][encoding=\typescripttwo] \definetypeface[\typescriptone][rm][serif][modern] [default][encoding=\typescripttwo] \definetypeface[\typescriptone][tt][mono] [modern] [default][encoding=\typescripttwo] \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][encoding=\typescripttwo,text=ss] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[kurier] \starttypescript [sans] [kurier-light,kurier,kurier-medium] [texnansi,ec,qx,t5] \definefontsynonym[Kurier-Regular] [\typescriptthree-kurierr] [encoding=\typescriptthree] \definefontsynonym[Kurier-Italic] [\typescriptthree-kurierri] [encoding=\typescriptthree] \definefontsynonym[Kurier-RegularItalic] [Kurier-Italic] \definefontsynonym[Kurier-Bold] [\typescriptthree-kurierb] [encoding=\typescriptthree] \definefontsynonym[Kurier-BoldItalic] [\typescriptthree-kurierbi] [encoding=\typescriptthree] \definefontsynonym[Kurier-Light] [\typescriptthree-kurierl] [encoding=\typescriptthree] \definefontsynonym[Kurier-LightItalic] [\typescriptthree-kurierli] [encoding=\typescriptthree] \definefontsynonym[Kurier-Medium] [\typescriptthree-kurierm] [encoding=\typescriptthree] \definefontsynonym[Kurier-MediumItalic] [\typescriptthree-kuriermi] [encoding=\typescriptthree] \definefontsynonym[Kurier-Heavy] [\typescriptthree-kurierh] [encoding=\typescriptthree] \definefontsynonym[Kurier-HeavyItalic] [\typescriptthree-kurierhi] [encoding=\typescriptthree] \loadmapfile[kurier-\typescriptthree.map] \stoptypescript \starttypescript [math] [kurier] [default] \definefontsynonym [Kurier-Math-Letters-Regular] [rm-kurierr] \definefontsynonym [Kurier-Math-Letters-Italic] [mi-kurierri] \definefontsynonym [Kurier-Math-Symbols-Regular] [sy-kurierrz] \definefontsynonym [Kurier-Math-Extension-Regular] [ex-kurierr] \stoptypescript \starttypescript [math] [kurier-light] [default] \definefontsynonym [Kurier-Math-Letters-Light-Regular] [rm-kurierl] \definefontsynonym [Kurier-Math-Letters-Light-Italic] [mi-kurierli] \definefontsynonym [Kurier-Math-Symbols-Light] [sy-kurierlz] \definefontsynonym [Kurier-Math-Extension-Light] [ex-kurierl] \stoptypescript \starttypescript [math] [kurier-medium] [default] \definefontsynonym [Kurier-Math-Letters-Medium-Regular][rm-kurierm] \definefontsynonym [Kurier-Math-Letters-Medium-Italic] [mi-kuriermi] \definefontsynonym [Kurier-Math-Symbols-Medium] [sy-kuriermz] \definefontsynonym [Kurier-Math-Extension-medium] [ex-kurierm] \stoptypescript \starttypescript [math] [kurier,kurier-light,kurier-medium] [default] \usemathcollection[default] \loadmapfile[kurier-rm.map] \loadmapfile[kurier-mi.map] \loadmapfile[kurier-sy.map] \loadmapfile[kurier-ex.map] \stoptypescript \starttypescript [sans] [kurier-light] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Kurier-Light-Regular] \definefontsynonym [SansItalic] [Kurier-Light-Italic] \definefontsynonym [SansBold] [Kurier-Medium-Regular] \definefontsynonym [SansBoldItalic] [Kurier-Medium-Italic] \stoptypescript \starttypescript [sans] [kurier] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Kurier-Regular] \definefontsynonym [SansItalic] [Kurier-Italic] \definefontsynonym [SansBold] [Kurier-Bold] \definefontsynonym [SansBoldItalic] [Kurier-BoldItalic] \stoptypescript \starttypescript [sans] [kurier-medium] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Kurier-Medium-Regular] \definefontsynonym [SansItalic] [Kurier-Medium-Italic] \definefontsynonym [SansBold] [Kurier-Heavy-Regular] \definefontsynonym [SansBoldItalic] [Kurier-Heavy-Italic] \stoptypescript \starttypescript [math] [kurier-light] [name] \definefontsynonym [MathRoman] [Kurier-Math-Letters-Light-Regular] \definefontsynonym [MathItalic] [Kurier-Math-Letters-Light-Italic] \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Light] \definefontsynonym [MathExtension] [Kurier-Math-Extension-Light] \stoptypescript \starttypescript [math] [kurier] [name] \definefontsynonym [MathRoman] [Kurier-Math-Letters-Regular] \definefontsynonym [MathItalic] [Kurier-Math-Letters-Italic] \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Regular] \definefontsynonym [MathExtension] [Kurier-Math-Extension-Regular] \stoptypescript \starttypescript [math] [kurier-medium] [name] \definefontsynonym [MathRoman] [Kurier-Math-Letters-Medium-Regular] \definefontsynonym [MathItalic] [Kurier-Math-Letters-Medium-Italic] \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Medium] \definefontsynonym [MathExtension] [Kurier-Math-Extension-Medium] \stoptypescript \starttypescript [kurier-light,kurier,kurier-medium] [texnansi,ec,qx,t5] \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default][encoding=\typescripttwo] \definetypeface[\typescriptone][rm][serif][modern] [default][encoding=\typescripttwo] \definetypeface[\typescriptone][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.05] \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][encoding=\typescripttwo,text=ss] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[charter] \starttypescript [serif] [charter] [ec,texnansi,8r] \definefontsynonym [Charter-Roman] [\typescriptthree-bchr8a] [encoding=\typescriptthree] \definefontsynonym [Charter-Italic] [\typescriptthree-bchri8a] [encoding=\typescriptthree] \definefontsynonym [Charter-Bold] [\typescriptthree-bchb8a] [encoding=\typescriptthree] \definefontsynonym [Charter-BoldItalic] [\typescriptthree-bchbi8a] [encoding=\typescriptthree] \definefontsynonym [Charter-Slanted] [\typescriptthree-bchr8a-slanted-167] [encoding=\typescriptthree] \definefontsynonym [Charter-BoldSlanted][\typescriptthree-bchb8a-slanted-167] [encoding=\typescriptthree] \definefontsynonym [Charter-Roman-Caps] [\typescriptthree-bchr8a-capitalized-800] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-bitstrea-charter.map] \stoptypescript \starttypescript [serif] [charter] [name] \definefontsynonym [Serif] [Charter-Roman] \definefontsynonym [SerifItalic] [Charter-Italic] \definefontsynonym [SerifBold] [Charter-Bold] \definefontsynonym [SerifBoldItalic] [Charter-BoldItalic] \definefontsynonym [SerifSlanted] [Charter-Slanted] \definefontsynonym [SerifBoldSlanted] [Charter-BoldSlanted] \definefontsynonym [SerifCaps] [Charter-Roman-Caps] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[symbols] \starttypescript \definefontsynonym [ZapfDingbats] [uzdr] \definefontsynonym [RalfSmithFormalScript] [rsfs10] \definefontsynonym [MartinVogel] [umvs] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[texgyre] \definetypescriptprefix [f:pagella] [pl] \definetypescriptprefix [f:palatino] [pl] \definetypescriptprefix [f:termes] [tm] \definetypescriptprefix [f:times] [tm] \definetypescriptprefix [f:heros] [hv] \definetypescriptprefix [f:helvetica] [hv] \definetypescriptprefix [f:bonum] [bk] \definetypescriptprefix [f:bookman] [bk] \definetypescriptprefix [f:schola] [cs] \definetypescriptprefix [f:schoolbook] [cs] \definetypescriptprefix [f:adventor][ag] %definetypescriptprefix [f:adventor] [ag] \definetypescriptprefix [f:cursor] [cr] \definetypescriptprefix [f:courier] [cr] \definetypescriptprefix [f:chorus] [zc] \definetypescriptprefix [f:chancery] [zc] % not the full set \starttypescript [serif,sans,mono] [pagella,palatino,termes,times,adventor,bonum,bookman,cursor,courier,heros,helvetica,schola,schoolbook] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}r] [encoding=\typescriptthree] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}ri] [encoding=\typescriptthree] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}b] [encoding=\typescriptthree] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}bi] [encoding=\typescriptthree] \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map] \stoptypescript \starttypescript [serif,sans,mono] [pagella,palatino,termes,times,adventor,bonum,bookman,cursor,courier,heros,helvetica,schola,schoolbook] [ec,texnansi,cs,qx,rm,t5,l7x] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}r-sc] [encoding=\typescriptthree] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}ri-sc] [encoding=\typescriptthree] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}b-sc] [encoding=\typescriptthree] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}bi-sc] [encoding=\typescriptthree] \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map] \stoptypescript \starttypescript [serif,calligraphy] [chorus,chancery] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definefontsynonym [TeXGyreChorus-MediumItalic] [\typescriptthree-qzcmi] [encoding=\typescriptthree] \loadmapfile[qzc-\typescriptthree.map] \stoptypescript \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella] \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes] \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros] \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum] \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola] \definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor] \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor] \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [name] \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [SerifCaps] \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps] \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps] \definefontsynonym [SerifCapsCaps] [SerifCaps] \stoptypescript \starttypescript [serif] [chorus,chancery] [name] \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic] \definefontsynonym [Serif] [SerifMediumItalic] \definefontsynonym [SerifItalic] [SerifMediumItalic] \definefontsynonym [SerifBold] [SerifMediumItalic] \definefontsynonym [SerifBoldItalic] [SerifMediumItalic] \definefontsynonym [SerifSlanted] [SerifMediumItalic] \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic] \definefontsynonym [SerifCaps] [SerifMediumItalic] \stoptypescript \starttypescript [calligraphy] [chorus,chancery] [name] \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic] \stoptypescript \starttypescript [sans] [heros,helvetica,adventor] [name] \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontvariant [Sans][osf][Caps] \definefontvariant [Sans][sc] [Caps] \definefontsynonym [SansRegular] [Sans] \definefontsynonym [SansRegularCaps] [SansCaps] \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [SansSlantedCaps] [SansItalicCaps] \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps] \definefontsynonym [SansCapsCaps] [SansCaps] \stoptypescript \starttypescript [mono] [cursor,courier] [name] \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [MonoSlanted] [MonoItalic] \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic] \definefontvariant [Mono][osf][Caps] \definefontvariant [Mono][sc] [Caps] \definefontsynonym [MonoRegular] [Mono] \definefontsynonym [MonoRegularCaps] [MonoCaps] \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps] \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps] \definefontsynonym [MonoCapsCaps] [MonoCaps] \stoptypescript % bonus definitions % when these fonts are in tex live ... % % \definefontsynonym [Palatino-Caps] [TeXPalladioL-SC] [encoding=\typescriptthree] % % \starttypescript [serif] [palatino] [ec,texnansi] % \definefontsynonym[TeXPalladioL-BoldItalicOsF][\typescriptthree-fplbij8a][encoding=\typescriptthree] % \definefontsynonym[TeXPalladioL-BoldOsF] [\typescriptthree-fplbj8a] [encoding=\typescriptthree] % \definefontsynonym[TeXPalladioL-SC] [\typescriptthree-fplrc8a] [encoding=\typescriptthree] % \definefontsynonym[TeXPalladioL-ItalicOsF] [\typescriptthree-fplrij8a][encoding=\typescriptthree] % \loadmapfile[\typescriptthree-urw-palatino.map] % \stoptypescript % Faces: \starttypescript [times,termes] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05] \definetypeface [\typescriptone] [mm] [math] [times] [default] [encoding=\typescripttwo] \quittypescriptscanning \stoptypescript \starttypescript [palatino,pagella] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo,rscale=1.075] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.075] \definetypeface [\typescriptone] [mm] [math] [palatino] [default] [encoding=default] \quittypescriptscanning \stoptypescript \starttypescript [schoolbook,schola] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default] \quittypescriptscanning \stoptypescript \starttypescript [bookman,bonum] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default] \quittypescriptscanning \stoptypescript \starttypescript [chancery,chorus] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default] \quittypescriptscanning \stoptypescript \starttypescript [helvetica,heros] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo,rscale=1.15] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.15] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default,rscale=1.15] \quittypescriptscanning \stoptypescript \starttypescript [avantgarde,adventor] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [ss] [sans] [adventor] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo,rscale=1.15] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.15] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default] \quittypescriptscanning \stoptypescript \starttypescript [courier,cursor] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[xmath] \starttypescript [math] [palatino] [all] \definefontsynonym [Palatino-Roman-Upright] [pxr] \definefontsynonym [Palatino-Roman-Italic] [pxi] \definefontsynonym [Palatino-Roman-Slanted] [pxsl] \definefontsynonym [Palatino-Roman-Caps] [pxsc] \definefontsynonym [Palatino-Companion-Upright] [pcxr] \definefontsynonym [Palatino-Companion-Italic] [pcxi] \definefontsynonym [Palatino-Companion-Slanted] [pcxsl] \definefontsynonym [Palatino-Math-Italic] [pxmi] \definefontsynonym [Palatino-Math-Symbols] [pxsy] \definefontsynonym [Palatino-Math-Extension] [pxex] \definefontsynonym [Palatino-Math-SymbolsA] [pxsya] \definefontsynonym [Palatino-Math-SymbolsB] [pxsyb] \definefontsynonym [Palatino-Math-SymbolsC] [pxsyc] \definefontsynonym [Palatino-Math-Italic-A] [pxmia] \definefontsynonym [Palatino-Math-Extension-A] [pxexa] \usemathcollection[default] \loadmapfile[original-youngryu-px.map] \stoptypescript \starttypescript [math] [times] [all] \definefontsynonym [Times-Roman-Upright] [txr] \definefontsynonym [Times-Roman-Italic] [txi] \definefontsynonym [Times-Roman-Slanted] [txsl] \definefontsynonym [Times-Roman-Caps] [txsc] \definefontsynonym [Times-Companion-Upright] [tcxr] \definefontsynonym [Times-Companion-Italic] [tcxi] \definefontsynonym [Times-Companion-Slanted] [tcxsl] \definefontsynonym [Times-Math-Italic] [txmi] \definefontsynonym [Times-Math-Symbols] [txsy] \definefontsynonym [Times-Math-Extension] [txex] \definefontsynonym [Times-Math-SymbolsA] [txsya] \definefontsynonym [Times-Math-SymbolsB] [txsyb] \definefontsynonym [Times-Math-SymbolsC] [txsyc] \definefontsynonym [Times-Math-Italic-A] [txmia] \definefontsynonym [Times-Math-Extension-A] [txexa] \usemathcollection[default] \loadmapfile[original-youngryu-tx.map] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[pregyre] %D These are just fallbacks in case anyone stil uses the %D old names (might also be removed?). % TeXGyrePagella \starttypescript [serif] [palatino] \definefontsynonym [Palatino] [TeXGyrePagella-Regular] \definefontsynonym [Palatino-Italic] [TeXGyrePagella-Italic] \definefontsynonym [Palatino-Bold] [TeXGyrePagella-Bold] \definefontsynonym [Palatino-BoldItalic] [TeXGyrePagella-BoldItalic] \definefontsynonym [Palatino-Slanted] [TeXGyrePagella-Italic] \definefontsynonym [Palatino-BoldSlanted] [TeXGyrePagella-BoldItalic] \definefontsynonym [Palatino-Caps] [TeXGyrePagella-Caps] \stoptypescript \starttypescript [serif] [palatino] [name] \definefontsynonym [Serif] [Palatino] \definefontsynonym [SerifBold] [Palatino-Bold] \definefontsynonym [SerifItalic] [Palatino-Italic] \definefontsynonym [SerifSlanted] [Palatino-Slanted] \definefontsynonym [SerifBoldItalic] [Palatino-BoldItalic] \definefontsynonym [SerifBoldSlanted] [Palatino-BoldSlanted] \definefontsynonym [SerifCaps] [Palatino-Caps] \stoptypescript \starttypescript [math] [palatino] [name] \definefontsynonym [MathRoman] [Palatino-Roman-Upright] \definefontsynonym [MathExtension] [Palatino-Math-Extension] \definefontsynonym [MathItalic] [Palatino-Math-Italic] \definefontsynonym [MathSymbol] [Palatino-Math-Symbols] \definefontsynonym [MathAlpha] [Palatino-Math-SymbolsA] \definefontsynonym [MathBeta] [Palatino-Math-SymbolsB] \stoptypescript \starttypescript [math] [palatino] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [MathBeta] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [eusm10] \stoptypescript % TeXGyreTermes \starttypescript [serif] [times] \definefontsynonym [Times-Roman] [TeXGyreTermes-Regular] \definefontsynonym [Times-Italic] [TeXGyreTermes-Italic] \definefontsynonym [Times-Bold] [TeXGyreTermes-Bold] \definefontsynonym [Times-BoldItalic] [TeXGyreTermes-BoldItalic] \definefontsynonym [Times-Slanted] [TeXGyreTermes-Italic] \definefontsynonym [Times-BoldSlanted] [TeXGyreTermes-BoldItalic] \definefontsynonym [Times-Caps] [TeXGyreTermes-Caps] \stoptypescript \starttypescript [serif] [times] [name] \definefontsynonym [Serif] [Times-Roman] \definefontsynonym [SerifBold] [Times-Bold] \definefontsynonym [SerifItalic] [Times-Italic] \definefontsynonym [SerifSlanted] [Times-Italic] \definefontsynonym [SerifBoldItalic] [Times-BoldItalic] \definefontsynonym [SerifBoldSlanted] [Times-BoldItalic] \definefontsynonym [SerifCaps] [Times-Caps] \stoptypescript \starttypescript [math] [times] [name] \definefontsynonym [MathRoman] [Times-Roman-Upright] \definefontsynonym [MathExtension] [Times-Math-Extension] \definefontsynonym [MathItalic] [Times-Math-Italic] \definefontsynonym [MathSymbol] [Times-Math-Symbols] \definefontsynonym [MathAlpha] [Times-Math-SymbolsA] \definefontsynonym [MathBeta] [Times-Math-SymbolsB] \stoptypescript \starttypescript [math] [times] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [MathBeta] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [eusm10] \stoptypescript % TeXGyreHeros \starttypescript [sans] [helvetica] \definefontsynonym [Helvetica] [TeXGyreHeros-Regular] \definefontsynonym [Helvetica-Oblique] [TeXGyreHeros-Italic] \definefontsynonym [Helvetica-Bold] [TeXGyreHeros-Bold] \definefontsynonym [Helvetica-BoldOblique] [TeXGyreHeros-BoldItalic] \definefontsynonym [Helvetica-Caps] [TeXGyreHeros-Caps] \stoptypescript \starttypescript [sans] [helvetica] [name] \definefontsynonym [Sans] [Helvetica] \definefontsynonym [SansBold] [Helvetica-Bold] \definefontsynonym [SansItalic] [Helvetica-Oblique] \definefontsynonym [SansSlanted] [Helvetica-Oblique] \definefontsynonym [SansBoldItalic] [Helvetica-BoldOblique] \definefontsynonym [SansBoldSlanted] [Helvetica-BoldOblique] \definefontsynonym [SansCaps] [Helvetica-Caps] \stoptypescript \starttypescript [math] [helvetica] [name] \definefontsynonym [MathRoman] [Helvetica-MathRoman] \definefontsynonym [MathExtension] [Helvetica-MathExtendedSymbols] \definefontsynonym [MathItalic] [Helvetica-MathItalics] \definefontsynonym [MathSymbol] [Helvetica-MathSymbols] \stoptypescript % TeXGyreBonum \starttypescript [serif] [bookman] \definefontsynonym [Bookman-Light] [TeXGyreBonum-Regular] \definefontsynonym [Bookman-LightItalic] [TeXGyreBonum-Italic] \definefontsynonym [Bookman-DemiBold] [TeXGyreBonum-Bold] \definefontsynonym [Bookman-DemiBoldItalic] [TeXGyreBonum-BoldItalic] \definefontsynonym [Bookman-LightSlanted] [TeXGyreBonum-Italic] \definefontsynonym [Bookman-DemiBoldSlanted] [TeXGyreBonum-BoldItalic] \definefontsynonym [Bookman-Light-Caps] [TeXGyreBonum-Caps] \stoptypescript \starttypescript [serif] [bookman] [name] \definefontsynonym [Serif] [Bookman-Light] \definefontsynonym [SerifItalic] [Bookman-LightItalic] \definefontsynonym [SerifBold] [Bookman-DemiBold] \definefontsynonym [SerifBoldItalic] [Bookman-DemiBoldItalic] \definefontsynonym [SerifSlanted] [Bookman-LightSlanted] \definefontsynonym [SerifBoldSlanted] [Bookman-DemiBoldSlanted] \definefontsynonym [SerifCaps] [Bookman-Light-Caps] \stoptypescript % TeXGyreScola \starttypescript [serif] [schoolbook] \definefontsynonym [Schoolbook-Roman] [TeXGyreScola-Regular] \definefontsynonym [Schoolbook-Italic] [TeXGyreScola-Italic] \definefontsynonym [Schoolbook-Bold] [TeXGyreScola-Bold] \definefontsynonym [Schoolbook-BoldItalic] [TeXGyreScola-BoldItalic] \definefontsynonym [Schoolbook-Slanted] [TeXGyreScola-Italic] \definefontsynonym [Schoolbook-BoldSlanted] [TeXGyreScola-BoldItalic] \definefontsynonym [Schoolbook-Roman-Caps] [TeXGyreScola-Caps] \stoptypescript \starttypescript [serif] [schoolbook] [name] \definefontsynonym [Serif] [Schoolbook-Roman] \definefontsynonym [SerifItalic] [Schoolbook-Italic] \definefontsynonym [SerifBold] [Schoolbook-Bold] \definefontsynonym [SerifBoldItalic] [Schoolbook-BoldItalic] \definefontsynonym [SerifSlanted] [Schoolbook-RomanSlanted] \definefontsynonym [SerifBoldSlanted] [Schoolbook-BoldSlanted] \definefontsynonym [SerifCaps] [Schoolbook-Roman-Caps] \stoptypescript % TeXGyreAdventor % TeXGyreCursor \starttypescript [mono] [courier] \definefontsynonym [Courier] [TeXGyreCursor-Regular] \definefontsynonym [Courier-Bold] [TeXGyreCursor-Bold] \definefontsynonym [Courier-Oblique] [TeXGyreCursor-Italic] \definefontsynonym [Courier-BoldOblique] [TeXGyreCursor-BoldItalic] \fakecontrolspace \stoptypescript \starttypescript [mono] [courier] [name] \definefontsynonym [Mono] [Courier] \definefontsynonym [MonoBold] [Courier-Bold] \definefontsynonym [MonoItalic] [Courier-Oblique] \definefontsynonym [MonoSlanted] [Courier-Oblique] \definefontsynonym [MonoBoldItalic] [Courier-BoldOblique] \definefontsynonym [MonoBoldSlanted] [Courier-BoldOblique] \definefontsynonym [MonoCaps] [Courier] \stoptypescript % TeXGyreChorus \starttypescript [calligraphy] [chancery] \definefontsynonym [Chancery] [TeXGyreChorus-MediumItalic] \stoptypescript \starttypescript [calligraphy] [chancery] [name] \definefontsynonym [Calligraphy] [Chancery] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[Lucida] % We can remove the intermediate names as no one will use them. \definetypescriptprefix [e:ec] [8t] \definetypescriptprefix [e:texnansi] [8y] \definetypescriptprefix [e:8r] [8r] % Lucida Bright \starttypescript [serif] [lucida] [ec,texnansi,8r] \definefontsynonym [\typescriptthree-lbr] [hlhr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright \definefontsynonym [\typescriptthree-lbd] [hlhb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Demi \definefontsynonym [\typescriptthree-lbi] [hlhri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Italic \definefontsynonym [\typescriptthree-lbdi] [hlhbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-DemiItalic \definefontsynonym [\typescriptthree-lbsl] [hlhro\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Oblique \definefontsynonym [\typescriptthree-lbrsc] [hlhrc\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBrightSmallcaps \definefontsynonym [\typescriptthree-lbdsc] [hlhbc\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBrightSmallcaps-Demi \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree] \definefontsynonym [LucidaBright-Demi] [\typescriptthree-lbd] [encoding=\typescriptthree] \definefontsynonym [LucidaBright-Italic] [\typescriptthree-lbi] [encoding=\typescriptthree] \definefontsynonym [LucidaBright-DemiItalic] [\typescriptthree-lbdi] [encoding=\typescriptthree] \definefontsynonym [LucidaBright-Oblique] [\typescriptthree-lbsl] [encoding=\typescriptthree] \definefontsynonym [LucidaBrightSmallcaps] [\typescriptthree-lbrsc] [encoding=\typescriptthree] \definefontsynonym [LucidaBrightSmallcaps-Demi] [\typescriptthree-lbdsc] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Bright Sans \starttypescript [sans] [lucida] [ec,texnansi,8r] \definefontsynonym [\typescriptthree-lsr] [hlsr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans \definefontsynonym [\typescriptthree-lsd] [hlsb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Demi \definefontsynonym [\typescriptthree-lsb] [hlsu\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Bold \definefontsynonym [\typescriptthree-lsi] [hlsri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Italic \definefontsynonym [\typescriptthree-lsdi] [hlsbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-DemiItalic \definefontsynonym [\typescriptthree-lsbi] [hlsui\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-BoldItalic \definefontsynonym [LucidaSans] [\typescriptthree-lsr] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-Demi] [\typescriptthree-lsd] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-Bold] [\typescriptthree-lsb] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-Italic] [\typescriptthree-lsi] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-DemiItalic] [\typescriptthree-lsdi] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-BoldItalic] [\typescriptthree-lsbi] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Bright Typewriter \starttypescript [mono] [lucida] [ec,texnansi,8r] \definefontsynonym [\typescriptthree-lbtr] [hlcrt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriter \definefontsynonym [\typescriptthree-lbtb] [hlcbt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterBold \definefontsynonym [\typescriptthree-lbto] [hlcrot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterOblique \definefontsynonym [\typescriptthree-lbtbo] [hlcbot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterBoldOblique \definefontsynonym [LucidaTypewriter] [\typescriptthree-lbtr] [encoding=\typescriptthree] \definefontsynonym [LucidaTypewriterBold] [\typescriptthree-lbtb] [encoding=\typescriptthree] \definefontsynonym [LucidaTypewriterOblique] [\typescriptthree-lbto] [encoding=\typescriptthree] \definefontsynonym [LucidaTypewriterBoldOblique] [\typescriptthree-lbtbo] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Bright Sans Typewriter \starttypescript [mono] [lucida] [ec,texnansi,8r] \definefontsynonym [\typescriptthree-lstr] [hlsrt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Typewriter \definefontsynonym [\typescriptthree-lstb] [hlsbt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterBold \definefontsynonym [\typescriptthree-lsto] [hlsrot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterOblique \definefontsynonym [\typescriptthree-lstbo] [hlsbot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterBoldOblique \definefontsynonym [LucidaSans-Typewriter] [\typescriptthree-lstr] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-TypewriterBold] [\typescriptthree-lstb] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-TypewriterOblique] [\typescriptthree-lsto] [encoding=\typescriptthree] \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\typescriptthree-lstbo] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Calligraphy \starttypescript [calligraphy] [lucida] [texnansi,ec,8r] \definefontsynonym [\typescriptthree-lbc] [hlcrie\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCalligraphy-Italic \definefontsynonym [LucidaCalligraphy-Italic] [\typescriptthree-lbc] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Casual \starttypescript [casual] [lucida] [texnansi,ec,8r] \definefontsynonym [\typescriptthree-lbkr] [hlcrn\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCasual \definefontsynonym [\typescriptthree-lbki] [hlcrin\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCasual-Italic \definefontsynonym [LucidaCasual] [\typescriptthree-lbkr] [encoding=\typescriptthree] \definefontsynonym [LucidaCasual-Italic] [\typescriptthree-lbki] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Handwriting \starttypescript [handwriting] [lucida] [texnansi,ec,8r] \definefontsynonym [\typescriptthree-lbh] [hlcriw\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaHandwriting-Italic \definefontsynonym [LucidaHandwriting-Italic] [\typescriptthree-lbh] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript % Lucida Fax \starttypescript [fax] [lucida] [texnansi,ec,8r] \definefontsynonym [\typescriptthree-lfr] [hlxr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax \definefontsynonym [\typescriptthree-lfd] [hlxb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-Demi \definefontsynonym [\typescriptthree-lfi] [hlxri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-Italic \definefontsynonym [\typescriptthree-lfdi] [hlxbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-DemiItalic \definefontsynonym [LucidaFax] [\typescriptthree-lfr] [encoding=\typescriptthree] % LucidaFax \definefontsynonym [LucidaFax-Demi] [\typescriptthree-lfd] [encoding=\typescriptthree] % LucidaFax-Demi \definefontsynonym [LucidaFax-Italic] [\typescriptthree-lfi] [encoding=\typescriptthree] % LucidaFax-Italic \definefontsynonym [LucidaFax-DemiItalic] [\typescriptthree-lfdi] [encoding=\typescriptthree] % LucidaFax-DemiItalic \loadmapfile[lucida.map] \stoptypescript \starttypescript [blackletter] [lucida] [texnansi,ec,8r] \definefontsynonym [\typescriptthree-lbl] [hlcrf\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBlackletter \definefontsynonym [LucidaBlackletter] [\typescriptthree-lbl] [encoding=\typescriptthree] \loadmapfile[lucida.map] \stoptypescript \starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r] \definetypeface [lucida] [rm] [serif] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [ss] [sans] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [tt] [mono] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo] \loadmapfile[lucida.map] \stoptypescript \starttypescript [math] [lucida] [default] \definefontsynonym [LucidaNewMath-AltItalic] [hlcrima] \definefontsynonym [LucidaNewMath-Arrows] [hlcra] \definefontsynonym [LucidaNewMath-Extension] [hlcrv] \definefontsynonym [LucidaNewMath-Roman] [hlcrm] \definefontsynonym [LucidaNewMath-Italic] [hlcrim] \definefontsynonym [LucidaNewMath-Symbol] [hlcry] \definefontsynonym [LucidaBlackletter] [hlcrf8y] % what a mess \usemathcollection[lbr] \loadmapfile [lucida.map] \stoptypescript \starttypescript [boldmath,bfmath] [lucida] [default] \definefontsynonym [LucidaNewMath-AltDemiItalic] [hlcdima] \definefontsynonym [LucidaNewMath-Arrows-Demi] [hlcda] \definefontsynonym [LucidaNewMath-Extension] [hlcrv] \definefontsynonym [LucidaNewMath-Demi] [hlcdm] \definefontsynonym [LucidaNewMath-DemiItalic] [hlcdim] \definefontsynonym [LucidaNewMath-Symbol-Demi] [hlcdy] \loadmapfile [lucida.map] \stoptypescript % Lucida Bright \starttypescript [serif] [lucida] [name] \definefontsynonym [Serif] [LucidaBright] \definefontsynonym [SerifBold] [LucidaBright-Demi] \definefontsynonym [SerifItalic] [LucidaBright-Italic] \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic] \definefontsynonym [SerifSlanted] [LucidaBright-Oblique] \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic] \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps] \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi] \stoptypescript % Lucida Bright Sans \starttypescript [sans] [lucida] [name] \definefontsynonym [Sans] [LucidaSans] \definefontsynonym [SansBold] [LucidaSans-Demi] \definefontsynonym [SansItalic] [LucidaSans-Italic] \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic] \definefontsynonym [SansSlanted] [LucidaSans-Italic] \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic] \definefontsynonym [SansCaps] [LucidaSans] \stoptypescript % Lucida Bright Typewriter % only one family may be used as mono; sans used to be that since the beginning, % so we keep using that as default % \starttypescript [mono] [lucida] [name] % \definefontsynonym [Mono] [LucidaTypewriter] % \definefontsynonym [MonoBold] [LucidaTypewriterBold] % \definefontsynonym [MonoItalic] [LucidaTypewriterOblique] % \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique] % \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique] % \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique] % \definefontsynonym [MonoCaps] [LucidaTypewriter] % \stoptypescript % Lucida Bright Sans Typewriter \starttypescript [mono] [lucida] [name] \definefontsynonym [Mono] [LucidaSans-Typewriter] \definefontsynonym [MonoBold] [LucidaSans-TypewriterBold] \definefontsynonym [MonoItalic] [LucidaSans-TypewriterOblique] \definefontsynonym [MonoBoldItalic] [LucidaSans-TypewriterBoldOblique] \definefontsynonym [MonoSlanted] [LucidaSans-TypewriterOblique] \definefontsynonym [MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique] \definefontsynonym [MonoCaps] [LucidaSans-Typewriter] \stoptypescript % Lucida Calligraphy \starttypescript [calligraphy] [lucida] [name] \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic] \stoptypescript % Lucida Casual % \starttypescript [casual] [lucida] [name] % % LucidaCasual % % LucidaCasual-Italic % \stoptypescript % Lucida Handwriting \starttypescript [handwriting] [lucida] [name] \definefontsynonym [Handwriting] [LucidaHandwriting-Italic] \stoptypescript % Lucida Fax % % \starttypescript [fax] [lucida] [name] % \definefontsynonym [FaksRegular] [LucidaFax] % \definefontsynonym [FaksBold] [LucidaFax-Demi] % \definefontsynonym [FaksItalic] [LucidaFax-Italic] % \definefontsynonym [FaksBoldItalic] [LucidaFax-DemiItalic] % \stoptypescript % Lucida Black Letter % % \starttypescript [blackletter] [lucida] [name] % \definefontsynonym [Blackletter] [LucidaBlackletter] % \stoptypescript % Lucida Math \starttypescript [math] [lucida] [name] % \definefontsynonym [MathRoman] [LucidaBright] \definefontsynonym [MathRoman] [LucidaNewMath-Roman] \definefontsynonym [MathExtension] [LucidaNewMath-Extension] \definefontsynonym [MathItalic] [LucidaNewMath-AltItalic] \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol] \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows] \definefontsynonym [MathBeta] [LucidaNewMath-Roman] \stoptypescript \starttypescript [math] [lucida] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [MathAlpha] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [MathSymbol] % math caligraphic ! \stoptypescript \starttypescript [boldmath] [lucida] [name] \definefontsynonym [MathRoman] [LucidaBright-Demi] \definefontsynonym [MathExtension] [LucidaNewMath-Extension] \definefontsynonym [MathItalic] [LucidaNewMath-AltDemiItalic] \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol-Demi] \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows-Demi] \definefontsynonym [MathBeta] [LucidaNewMath-Demi] \stoptypescript \starttypescript [bfmath] [lucida] [name] \definefontsynonym [MathRomanBold] [LucidaNewMath-Demi] \definefontsynonym [MathExtensionBold] [LucidaNewMath-Extension] \definefontsynonym [MathItalicBold] [LucidaNewMath-AltDemiItalic] \definefontsynonym [MathSymbolBold] [LucidaNewMath-Symbol-Demi] \definefontsynonym [MathAlphaBold] [LucidaNewMath-Arrows-Demi] \definefontsynonym [MathBetaBold] [LucidaNewMath-Demi] \stoptypescript \starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r,uc] \definetypeface [lucida] [rm] [serif] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [ss] [sans] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [tt] [mono] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucida] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo] \loadmapfile [lucida.map] \stoptypescript \starttypescript [lucida] [texnansi,ec,8r] \definetypeface [lucida] [mm] [math] [lucida] [default] [encoding=\typescripttwo] \stoptypescript \starttypescript [lucidabfm] [texnansi,ec,8r] \definetypeface [lucida] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo] \stoptypescript \starttypescript [lucidaboldmath] [texnansi,ec,8r] \definetypeface [lucida] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo] \stoptypescript \starttypescript [lucidabfm] [texnansi,ec,8r,uc] \definetypeface [lucidabfm] [rm] [serif] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidabfm] [ss] [sans] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidabfm] [tt] [mono] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidabfm] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidabfm] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidabfm] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo] \loadmapfile [lucida.map] \stoptypescript \starttypescript [lucidaboldmath] [texnansi,ec,8r,uc] \definetypeface [lucidaboldmath] [rm] [serif] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidaboldmath] [ss] [sans] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidaboldmath] [tt] [mono] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidaboldmath] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidaboldmath] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo] \definetypeface [lucidaboldmath] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo] \loadmapfile [bh-lucida.map] \stoptypescript \starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r] \usemathcollection[lbr] \quittypescriptscanning % last in the row \stoptypescript \stoptypescriptcollection \starttypescriptcollection[postscript] \starttypescript [postscript] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x] \definetypeface [postscript] [rm] [serif] [times] [default] [encoding=\typescripttwo] \definetypeface [postscript] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9] \definetypeface [postscript] [tt] [mono] [courier] [default] [encoding=\typescripttwo,rscale=1.1] \definetypeface [postscript] [mm] [math] [times] [default] [encoding=\typescripttwo] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[libertine] \starttypescript [serif] [libertine] [ec] \definefontsynonym [Libertine-Regular] [fxlr-t1] [encoding=ec] \definefontsynonym [Libertine-Italic] [fxlri-t1] [encoding=ec] \definefontsynonym [Libertine-Bold] [fxlb-t1] [encoding=ec] \definefontsynonym [Libertine-BoldItalic] [fxlbi-t1] [encoding=ec] \definefontsynonym [Libertine-SmallCaps] [fxlrc-t1] %[encoding=ec] \loadmapfile [libertine.map] \stoptypescript \starttypescript [serif] [libertine] [name] \definefontsynonym [Serif] [Libertine-Regular] \definefontsynonym [SerifItalic] [Libertine-Italic] \definefontsynonym [SerifSlanted] [Libertine-Italic] \definefontsynonym [SerifBold] [Libertine-Bold] \definefontsynonym [SerifBoldItalic] [Libertine-BoldItalic] \definefontsynonym [SerifBoldSlanted][Libertine-BoldItalic] \definefontsynonym [SerifCaps] [Libertine-SmallCaps] \stoptypescript \starttypescript [libertine] [ec] \definetypeface [libertine] [tt] [mono] [default] [default] [encoding=ec] \definetypeface [libertine] [ss] [sans] [default] [default] [encoding=ec] \definetypeface [libertine] [rm] [serif] [libertine] [default] [encoding=ec] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[inconsolata] \starttypescript [mono] [inconsolata] [ec] \definefontsynonym [Inconsolata] [ec-inconsolata] [encoding=ec] \pdfmapline{ec-inconsolata Inconsolata "fi4ECEncoding ReEncodeFont" <[fi4-ec.enc <Inconsolata.pfb} \stoptypescript \starttypescript [mono] [inconsolata] [name] \definefontsynonym [Mono] [Inconsolata] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[dejavu] \definetypescriptprefix [e:ec] [t1] \definetypescriptprefix [e:qx] [qx] \definetypescriptprefix [e:t2a] [t2a] \starttypescript [serif] [dejavu] [ec,qx,t2a] \definefontsynonym [DejaVuSerif] [DejaVuSerif-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSerif-Italic] [DejaVuSerif-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSerif-Bold] [DejaVuSerif-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSerif-BoldItalic] [DejaVuSerif-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \loadmapfile[dejavu-truetype.map] \stoptypescript \starttypescript [serif] [dejavu-condensed] [ec,qx,t2a] \definefontsynonym [DejaVuSerifCondensed] [DejaVuSerifCondensed-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSerifCondensed-Italic] [DejaVuSerifCondensed-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSerifCondensed-Bold] [DejaVuSerifCondensed-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSerifCondensed-BoldItalic] [DejaVuSerifCondensed-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \loadmapfile[dejavu-truetype.map] \stoptypescript \starttypescript [sans] [dejavu] [ec,qx,t2a] \definefontsynonym [DejaVuSans] [DejaVuSans-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSans-Italic] [DejaVuSans-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSans-Bold] [DejaVuSans-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSans-BoldItalic] [DejaVuSans-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \loadmapfile[dejavu-truetype.map] \stoptypescript \starttypescript [sans] [dejavu-condensed] [ec,qx,t2a] \definefontsynonym [DejaVuSansCondensed] [DejaVuSansCondensed-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSansCondensed-Italic] [DejaVuSansCondensed-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSansCondensed-Bold] [DejaVuSansCondensed-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSansCondensed-BoldItalic] [DejaVuSansCondensed-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \loadmapfile[dejavu-truetype.map] \stoptypescript \starttypescript [mono] [dejavu,dejavu-condensed] [ec,qx,t2a] \definefontsynonym [DejaVuSansMono] [DejaVuSansMono-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSansMono-Italic] [DejaVuSansMono-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSansMono-Bold] [DejaVuSansMono-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \definefontsynonym [DejaVuSansMono-BoldItalic] [DejaVuSansMono-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] \loadmapfile[dejavu-truetype.map] \stoptypescript \starttypescript [serif] [dejavu] [name] \definefontsynonym [Serif] [DejaVuSerif] \definefontsynonym [SerifItalic] [DejaVuSerif-Italic] \definefontsynonym [SerifBold] [DejaVuSerif-Bold] \definefontsynonym [SerifBoldItalic] [DejaVuSerif-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [Serif] \stoptypescript \starttypescript [serif] [dejavu-condensed] [name] \definefontsynonym [Serif] [DejaVuSerifCondensed] \definefontsynonym [SerifItalic] [DejaVuSerifCondensed-Italic] \definefontsynonym [SerifBold] [DejaVuSerifCondensed-Bold] \definefontsynonym [SerifBoldItalic] [DejaVuSerifCondensed-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [Serif] \stoptypescript \starttypescript [sans] [dejavu] [name] \definefontsynonym [Sans] [DejaVuSans] \definefontsynonym [SansItalic] [DejaVuSans-Italic] \definefontsynonym [SansBold] [DejaVuSans-Bold] \definefontsynonym [SansBoldItalic] [DejaVuSans-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \definefontsynonym [SansCaps] [Sans] \stoptypescript \starttypescript [sans] [dejavu-condensed] [name] \definefontsynonym [Sans] [DejaVuSansCondensed] \definefontsynonym [SansItalic] [DejaVuSansCondensed-Italic] \definefontsynonym [SansBold] [DejaVuSansCondensed-Bold] \definefontsynonym [SansBoldItalic] [DejaVuSansCondensed-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \definefontsynonym [SansCaps] [Sans] \stoptypescript \starttypescript [mono] [dejavu,dejavu-condensed] [name] \definefontsynonym [Mono] [DejaVuSansMono] \definefontsynonym [MonoItalic] [DejaVuSansMono-Italic] \definefontsynonym [MonoBold] [DejaVuSansMono-Bold] \definefontsynonym [MonoBoldItalic] [DejaVuSansMono-BoldItalic] \definefontsynonym [MonoSlanted] [MonoItalic] \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic] \definefontsynonym [MonoCaps] [Mono] \stoptypescript \starttypescript [dejavu] [ec,qx,t2a] \definetypeface [dejavu] [rm] [serif] [dejavu] [default] [encoding=\typescripttwo] \definetypeface [dejavu] [ss] [sans] [dejavu] [default] [encoding=\typescripttwo] \definetypeface [dejavu] [tt] [mono] [dejavu] [default] [encoding=\typescripttwo] \definetypeface [dejavu] [mm] [math] [xits] [default] [rscale=auto] \loadmapfile [dejavu-truetype.map] \stoptypescript \starttypescript [dejavu-condensed] [ec,qx,t2a] \definetypeface [dejavu-condensed] [rm] [serif] [dejavu-condensed] [default] [encoding=\typescripttwo] \definetypeface [dejavu-condensed] [ss] [sans] [dejavu-condensed] [default] [encoding=\typescripttwo] \definetypeface [dejavu-condensed] [tt] [mono] [dejavu-condensed] [default] [encoding=\typescripttwo] \definetypeface [dejavu-condensed] [mm] [math] [xits] [default] [rscale=auto] \loadmapfile [dejavu-truetype.map] \stoptypescript \stoptypescriptcollection \endinput ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1253.mkii����������������������������0000644�0001750�0001750�00000026056�11754241457�024430� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=regi-cp1253, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=cp1253 (Greek), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for cp1253 input encoding (regime) for Greek, %D see also iso-8859-7. %D %D Usage: %D \type{\enableregime[cp1253]} or \type{\enablereregime[windows-1253]} \startregime[cp1253] \defineactivetoken 128 {\texteuro} % 20AC EURO SIGN \defineactivetoken 129 {\unknownchar} % <undefined> \defineactivetoken 130 {\quotesinglebase} % 201A SINGLE LOW-9 QUOTATION MARK \defineactivetoken 131 {\fhook} % 0192 LATIN SMALL LETTER F WITH HOOK \defineactivetoken 132 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 133 {\textellipsis} % 2026 HORIZONTAL ELLIPSIS \defineactivetoken 134 {\textdag} % 2020 DAGGER \defineactivetoken 135 {\textddag} % 2021 DOUBLE DAGGER \defineactivetoken 136 {\unknownchar} % <undefined> \defineactivetoken 137 {\perthousand} % 2030 PER MILLE SIGN \defineactivetoken 138 {\unknownchar} % <undefined> \defineactivetoken 139 {\guilsingleleft} % 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \defineactivetoken 140 {\unknownchar} % <undefined> \defineactivetoken 141 {\unknownchar} % <undefined> \defineactivetoken 142 {\unknownchar} % <undefined> \defineactivetoken 143 {\unknownchar} % <undefined> \defineactivetoken 144 {\unknownchar} % <undefined> \defineactivetoken 145 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 146 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 147 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 148 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 149 {\textbullet} % 2022 BULLET \defineactivetoken 150 {\endash} % 2013 EN DASH \defineactivetoken 151 {\emdash} % 2014 EM DASH \defineactivetoken 152 {\unknownchar} % <undefined> \defineactivetoken 153 {\trademark} % 2122 TRADE MARK SIGN \defineactivetoken 154 {\unknownchar} % <undefined> \defineactivetoken 155 {\guilsingleright} % 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \defineactivetoken 156 {\unknownchar} % <undefined> \defineactivetoken 157 {\unknownchar} % <undefined> \defineactivetoken 158 {\unknownchar} % <undefined> \defineactivetoken 159 {\unknownchar} % <undefined> \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\greekdialytikatonos} % 0385 GREEK DIALYTIKA TONOS \defineactivetoken 162 {\greekAlphatonos} % 0386 GREEK CAPITAL LETTER ALPHA WITH TONOS \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\textyen} % 00A5 YEN SIGN \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\unknownchar} % <undefined> \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\texthorizontalbar} % 2015 HORIZONTAL BAR \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\greektonos} % 0384 GREEK TONOS \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\greekEpsilontonos} % 0388 GREEK CAPITAL LETTER EPSILON WITH TONOS \defineactivetoken 185 {\greekEtatonos} % 0389 GREEK CAPITAL LETTER ETA WITH TONOS \defineactivetoken 186 {\greekIotatonos} % 038A GREEK CAPITAL LETTER IOTA WITH TONOS \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\greekOmicrontonos} % 038C GREEK CAPITAL LETTER OMICRON WITH TONOS \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\greekUpsilontonos} % 038E GREEK CAPITAL LETTER UPSILON WITH TONOS \defineactivetoken 191 {\greekOmegatonos} % 038F GREEK CAPITAL LETTER OMEGA WITH TONOS \defineactivetoken 192 {\greekiotadialytikatonos} % 0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS \defineactivetoken 193 {\greekAlpha} % 0391 GREEK CAPITAL LETTER ALPHA \defineactivetoken 194 {\greekBeta} % 0392 GREEK CAPITAL LETTER BETA \defineactivetoken 195 {\greekGamma} % 0393 GREEK CAPITAL LETTER GAMMA \defineactivetoken 196 {\greekDelta} % 0394 GREEK CAPITAL LETTER DELTA \defineactivetoken 197 {\greekEpsilon} % 0395 GREEK CAPITAL LETTER EPSILON \defineactivetoken 198 {\greekZeta} % 0396 GREEK CAPITAL LETTER ZETA \defineactivetoken 199 {\greekEta} % 0397 GREEK CAPITAL LETTER ETA \defineactivetoken 200 {\greekTheta} % 0398 GREEK CAPITAL LETTER THETA \defineactivetoken 201 {\greekIota} % 0399 GREEK CAPITAL LETTER IOTA \defineactivetoken 202 {\greekKappa} % 039A GREEK CAPITAL LETTER KAPPA \defineactivetoken 203 {\greekLambda} % 039B GREEK CAPITAL LETTER LAMDA \defineactivetoken 204 {\greekMu} % 039C GREEK CAPITAL LETTER MU \defineactivetoken 205 {\greekNu} % 039D GREEK CAPITAL LETTER NU \defineactivetoken 206 {\greekXi} % 039E GREEK CAPITAL LETTER XI \defineactivetoken 207 {\greekOmicron} % 039F GREEK CAPITAL LETTER OMICRON \defineactivetoken 208 {\greekPi} % 03A0 GREEK CAPITAL LETTER PI \defineactivetoken 209 {\greekRho} % 03A1 GREEK CAPITAL LETTER RHO \defineactivetoken 210 {\unknownchar} % <undefined> \defineactivetoken 211 {\greekSigma} % 03A3 GREEK CAPITAL LETTER SIGMA \defineactivetoken 212 {\greekTau} % 03A4 GREEK CAPITAL LETTER TAU \defineactivetoken 213 {\greekUpsilon} % 03A5 GREEK CAPITAL LETTER UPSILON \defineactivetoken 214 {\greekPhi} % 03A6 GREEK CAPITAL LETTER PHI \defineactivetoken 215 {\greekChi} % 03A7 GREEK CAPITAL LETTER CHI \defineactivetoken 216 {\greekPsi} % 03A8 GREEK CAPITAL LETTER PSI \defineactivetoken 217 {\greekOmega} % 03A9 GREEK CAPITAL LETTER OMEGA \defineactivetoken 218 {\greekIotadialytika} % 03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA \defineactivetoken 219 {\greekUpsilondialytika} % 03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA \defineactivetoken 220 {\greekalphatonos} % 03AC GREEK SMALL LETTER ALPHA WITH TONOS \defineactivetoken 221 {\greekepsilontonos} % 03AD GREEK SMALL LETTER EPSILON WITH TONOS \defineactivetoken 222 {\greeketatonos} % 03AE GREEK SMALL LETTER ETA WITH TONOS \defineactivetoken 223 {\greekiotatonos} % 03AF GREEK SMALL LETTER IOTA WITH TONOS \defineactivetoken 224 {\greekupsilondialytikatonos} % 03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS \defineactivetoken 225 {\greekalpha} % 03B1 GREEK SMALL LETTER ALPHA \defineactivetoken 226 {\greekbeta} % 03B2 GREEK SMALL LETTER BETA \defineactivetoken 227 {\greekgamma} % 03B3 GREEK SMALL LETTER GAMMA \defineactivetoken 228 {\greekdelta} % 03B4 GREEK SMALL LETTER DELTA \defineactivetoken 229 {\greekepsilon} % 03B5 GREEK SMALL LETTER EPSILON \defineactivetoken 230 {\greekzeta} % 03B6 GREEK SMALL LETTER ZETA \defineactivetoken 231 {\greeketa} % 03B7 GREEK SMALL LETTER ETA \defineactivetoken 232 {\greektheta} % 03B8 GREEK SMALL LETTER THETA \defineactivetoken 233 {\greekiota} % 03B9 GREEK SMALL LETTER IOTA \defineactivetoken 234 {\greekkappa} % 03BA GREEK SMALL LETTER KAPPA \defineactivetoken 235 {\greeklambda} % 03BB GREEK SMALL LETTER LAMDA \defineactivetoken 236 {\greekmu} % 03BC GREEK SMALL LETTER MU \defineactivetoken 237 {\greeknu} % 03BD GREEK SMALL LETTER NU \defineactivetoken 238 {\greekxi} % 03BE GREEK SMALL LETTER XI \defineactivetoken 239 {\greekomicron} % 03BF GREEK SMALL LETTER OMICRON \defineactivetoken 240 {\greekpi} % 03C0 GREEK SMALL LETTER PI \defineactivetoken 241 {\greekrho} % 03C1 GREEK SMALL LETTER RHO \defineactivetoken 242 {\greekfinalsigma} % 03C2 GREEK SMALL LETTER FINAL SIGMA \defineactivetoken 243 {\greeksigma} % 03C3 GREEK SMALL LETTER SIGMA \defineactivetoken 244 {\greektau} % 03C4 GREEK SMALL LETTER TAU \defineactivetoken 245 {\greekupsilon} % 03C5 GREEK SMALL LETTER UPSILON \defineactivetoken 246 {\greekphi} % 03C6 GREEK SMALL LETTER PHI \defineactivetoken 247 {\greekchi} % 03C7 GREEK SMALL LETTER CHI \defineactivetoken 248 {\greekpsi} % 03C8 GREEK SMALL LETTER PSI \defineactivetoken 249 {\greekomega} % 03C9 GREEK SMALL LETTER OMEGA \defineactivetoken 250 {\greekiotadialytika} % 03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA \defineactivetoken 251 {\greekupsilondiaeresis} % 03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA \defineactivetoken 252 {\greekomicrontonos} % 03CC GREEK SMALL LETTER OMICRON WITH TONOS \defineactivetoken 253 {\greekupsilontonos} % 03CD GREEK SMALL LETTER UPSILON WITH TONOS \defineactivetoken 254 {\greekomegatonos} % 03CE GREEK SMALL LETTER OMEGA WITH TONOS \defineactivetoken 255 {\unknownchar} % <undefined> \stopregime ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-dpm.mkii�������������������������������0000644�0001750�0001750�00000031654�11754241457�024277� 0����������������������������������������������������������������������������������������������������ustar �norbert�������������������������norbert����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%D \module %D [ file=spec-dpm, %D version=1998.11.24, %D title=\CONTEXT\ Special Macros, %D subtitle=DVIPDFM support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 driver is build on top of the general \PDF\ macros, %D as defined in \type{spec-fdf}, so we inherit that one. Remark: %D this driver is no longer actively maintained, use the dpx one %D instead! \startspecials[dpm][reset,fdf] %D \macros %D {jobsuffix} %D %D Because no intermediate output format is used, we set the %D jobsuffix to \PDF. \setjobsuffix{pdf} %D Literal \PDF\ inclusion is implemented as: \def\PDFcode #1{\special{pdf: content #1}} \def\PDFcontentcode#1{\special{pdf: content #1}} \def\PDFdirectcode #1{\special{pdf: literal #1}} %D \macros %D {dosetuppaper} %D %D A simple one. \def\doDPMsetuppaper#1#2#3% {\bgroup \scratchdimen#2\edef\width {\the\scratchdimen\space}% \scratchdimen#3\edef\height{\the\scratchdimen\space}% \special{pdf: pagesize width \width height \height}% \global\let\doDPMsetuppaper\gobblethreearguments \egroup} \definespecial\dosetuppaper#1#2#3% {\doDPMsetuppaper{#1}{#2}{#3}} %D \macros %D {doinsertfile} %D %D Only \METAPOST, \JPG\ and \PDF\ inclusion are supported. \definespecial\doinsertfile {\dofileinsertion{dpm}\@@DriverImageType} \definefileinsertion{dpm}{mps}% {\PointsToWholeBigPoints\@@DriverImageWidth \width \PointsToWholeBigPoints\@@DriverImageHeight\height \special {PSfile="\@@DriverImageFile"\space llx=\EPSllx\space lly=\EPSlly\space urx=\EPSurx\space ury=\EPSury\space rwi=\width0\space rhi=\height0}} \definefileinsertion{dpm}{pdf}% {\special{pdf: epdf width \@@DriverImageWidth \space height \@@DriverImageHeight\space (\@@DriverImageFile)}} \definefileinsertion{dpm}{jpg}% {\special{pdf: image width \@@DriverImageWidth \space height \@@DriverImageHeight\space (\@@DriverImageFile)}} \definefileinsertion{dpm}{mov}{\doPDFinsertmov} \definefileinsertion{dpm}{avi}{\doPDFinsertmov} %D \macros %D {doinsertsoundtrack} %D %D Sounds are supported too. \definespecial\doinsertsoundtrack{\doPDFinsertsoundtrack} %D \macros %D {doovalbox} \definespecial\doovalbox{\doPDFovalbox} %D \macros %D {dostartgraymode,dostopgraymode, %D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode, %D dostopcolormode, %D dostartrotation,dostoprotation, %D dostartscaling,dostopscaling, %D dostartmirroring,dostopmirroring, %D dostartnegative,dostopnegative} %D %D Unfortunately the direct \PDF\ inclusion is not suited %D for the next macros, which means that we cannot use the %D \type {\doPDF..} alternatives. Since \CONTEXT\ maintains %D its own colorstack, we use the \DVIPS\ alternatives. \definespecial\dostartgraymode #1{\special{color gray #1}} \definespecial\dostopgraymode {\special{color gray 0}} \definespecial\dostartrgbcolormode #1#2#3{\special{color rgb #1 #2 #3}} \definespecial\dostartcmykcolormode#1#2#3#4{\special{color cmyk #1 #2 #3 #4}} \definespecial\dostartgraycolormode #1{\special{color gray #1}} \definespecial\dostopcolormode {\special{color gray 0}} \definespecial\dostartrotation #1{\special{pdf: bt rotate #1}} \definespecial\dostoprotation {\special{pdf: et}} \definespecial\dostartscaling #1#2{\special{pdf: bt xscale #1 yscale #2}} \definespecial\dostopscaling {\special{pdf: et}} \definespecial\dostartmirroring {\special{pdf: bt xscale -1}} % ? \definespecial\dostopmirroring {\special{pdf: et}} %D Negation is not (yet) supported: % \definespecial\dostartnegative {} % \definespecial\dostopnegative {} % \definespecial\dostarttransparency {} % \definespecial\dostoptransparency {} %D \macros %D {dosetupinteraction, %D dosetupopenaction,dosetupcloseaction} \definespecial\dosetupinteraction% {\showmessage\m!interactions{21}{DVIPDFM}} \definespecial\dosetupopenaction {\doPDFsetupopenaction} \definespecial\dosetupcloseaction{\doPDFsetupcloseaction} %D \macros %D {doresetgotowhereever, %D dostartthisisrealpage,dostartthisislocation, %D dostartgotorealpage,dostartgotolocation,dostartgotoJS} \definespecial\doresetgotowhereever {\doPDFresetgotowhereever} \definespecial\dostartthisislocation{\doPDFstartthisislocation} \definespecial\dostartgotolocation{\doPDFstartgotolocation} \definespecial\dostartgotorealpage{\doPDFstartgotorealpage} \definespecial\dostartgotoJS {\doPDFstartgotoJS} %D \macros %D {doflushJSpreamble} \definespecial\doflushJSpreamble#1% {\bgroup \let\compositeJScode=\empty \def\docommand##1% {\edef\sanitizedJScode{\getJSpreamble{##1}}% \@EA\doPSsanitizeJScode\sanitizedJScode\to\sanitizedJScode \special{pdf: object @JS:#1 <</S /JavaScript /JS (\sanitizedJScode)>>}% \edef\compositeJScode{\compositeJScode\space (##1) @JS:#1}}% \processcommalist[#1]\docommand \special{pdf: object @JS:JS <</Names [\compositeJScode]>>}% \special{pdf: put @names <</JavaScript @JS:JS>>}% \egroup} %D \macros %D {dostarthide,dostophide} \definespecial\dostarthide{} \definespecial\dostophide {} %D \macros %D {dosetupscreen} \definespecial\dosetupscreen {\doPDFsetupscreen \printpaperheight} \definespecial\dosetupartbox {\doPDFsetupartbox \printpaperheight} \definespecial\dosetupcropbox {\doPDFsetupcropbox \printpaperheight} \definespecial\dosetupbleedbox{\doPDFsetupbleedbox\printpaperheight} \definespecial\dosetuptrimbox {\doPDFsetuptrimbox \printpaperheight} %D \macros %D {dostartexecutecommand} \definespecial\dostartexecutecommand{\doPDFstartexecutecommand} %D \macros %D {dosetupidentity} \definespecial\dosetupidentity{\doPDFsetupidentity} %D \macros %D {dostartrunprogam} \definespecial\dostartrunprogram{\doPDFstartrunprogram} %D \macros %D {dostartgotoprofile, dostopgotoprofile, %D dobeginofprofile, doendofprofile} \definespecial\dostartgotoprofile{\doPDFstartgotoprofile} \definespecial\dobeginofprofile#1#2#3#4% {\bgroup \setPDFdestination{#1}% \scratchdimen#2\edef\width {\the\scratchdimen\space}% \scratchdimen#3\edef\height{\the\scratchdimen\space}% \doifsomething{\PDFdestination} {\special {pdf: thread @ART::\PDFdestination\space width \width height \height <>}}% \egroup} \definespecial\doendofprofile% {} %D \macros %D {doinsertbookmark} \definespecial\doinsertbookmark{\doPDFinsertbookmark} %D \macros %D {dostartobject,dostopobject,doinsertobject} % \definespecial\dostartobject#1#2#3#4#5% % {\bgroup % \setbox\nextbox=\hbox\bgroup % \dosetobjectreference{#1}{#2}{#1::#2}% % \scratchdimen#3\edef\width {\the\scratchdimen\space}% % \scratchdimen#4\edef\height{\the\scratchdimen\space}% % \special{pdf: bxobj @#1::#2 width \width height \height}} % \definespecial\dostopobject% % {\special{pdf: exobj}% % \egroup % \smashbox\nextbox % \flushatshipout{\box\nextbox}% % \egroup} \definespecial\dostartobject#1#2#3#4#5% {\bgroup \dowithnextbox {\dosetobjectreference{#1}{#2}{#1::#2}% \scratchdimen#3\edef\width {\the\scratchdimen\space}% \scratchdimen#4\edef\height{\the\scratchdimen\space}% \setbox\nextbox\vbox {\special{pdf: bxobj @#1::#2 width \width height \height}% % we need to compensate for the box offset (ugly, sigh) \scratchdimen\nextboxht \advance\scratchdimen\nextboxdp \advance\scratchdimen-#4\relax \nextboxdp\zeropoint \nextboxht\zeropoint \hbox to #3{\hss\lower.5\scratchdimen\box\nextbox\hss}% \special{pdf: exobj}% \global\let\currentPDFresources\empty}% \smashbox\nextbox \flushatshipout{\box\nextbox}% \egroup}% \hbox\bgroup} \definespecial\dostopobject {\egroup} \definespecial\doinsertobject#1#2% {\hbox {\dogetobjectreference{#1}{#2}\PDFobjectreference \ifx\PDFobjectreference\empty \else \special{pdf: usexobj @#1::#2}% \fi}} %D \macros %D {dosetpagetransition} \definespecial\dosetpagetransition{\doPDFsetpagetransition} %D \macros %D {doinsertcomment, doflushcomments} \definespecial\doinsertcomment{\doPDFinsertcomment} \definespecial\doflushcomments{\doPDFflushcomments} %D \macros %D {dopresetlinefield,dopresettextfield, %D dopresetchoicefield,dopresetpopupfield,dopresetcombofield, %D dopresetpushfield,dopresetcheckfield, %D dopresetradiofield,dopresetradiorecord} \definespecial\dopresetlinefield {\doFDFpresetlinefield} \definespecial\dopresettextfield {\doFDFpresettextfield} \definespecial\dopresetchoicefield{\doFDFpresetchoicefield} \definespecial\dopresetpopupfield {\doFDFpresetpopupfield} \definespecial\dopresetcombofield {\doFDFpresetcombofield} \definespecial\dopresetpushfield {\doFDFpresetpushfield} \definespecial\dopresetcheckfield {\doFDFpresetcheckfield} \definespecial\dopresetradiofield {\doFDFpresetradiofield} \definespecial\dopresetradiorecord{\doFDFpresetradiorecord} %D \macros %D {dodefinefieldset,dogetfieldset,doiffieldset} \definespecial\dodefinefieldset{\doFDFdefinefieldset} \definespecial\dogetfieldset {\doFDFgetfieldset} \definespecial\doiffieldset {\doFDFiffieldset} %D \macros %D {doregistercalculationset} \definespecial\doregistercalculationset{\doFDFregistercalculationset} %D \macros %D {doPDFdestination} \def\doPDFdestination#1% {\special{pdf: dest (#1) [@thispage /View [/Fit]]}} %D \macros %D {doPDFaction,doPDFannotation,ifsharePDFactions} %D %D Sharing is not yet supported. \newif\ifsharePDFactions \sharePDFactionsfalse \def\dodoPDFaction#1#2#3#4% {\ifcollectreferenceactions \xdef\lastPDFaction{#4}% \else \bgroup % this is yet untested %\ifsharePDFactions % \ifcase\similarreference\relax % \xdef\lastPDFaction{<<#4>>}% % \or % \global\advance\nofPDFsimilar by 1 % \special{pdf: object @PDF::sim:\the\nofPDFsimilar\space<<#4>>}% % \xdef\lastPDFaction{@PDF::sim:\the\nofPDFsimilar}% % \else % % leave \lastPDFaction untouched % \fi %\else \xdef\lastPDFaction{<<#4>>}% %\fi \scratchdimen#2\edef\width {\the\scratchdimen\space}% \scratchdimen#3\edef\height{\the\scratchdimen\space}% \special{pdf: ann #1 width \width height \height <>}% \egroup \fi} \def\doPDFaction#1#2#3% {\dodoPDFaction\empty{#1}{#2}{#3}} \def\doPDFannotation#1#2#3% {\bgroup \scratchdimen#1\edef\width {\the\scratchdimen\space}% \scratchdimen#2\edef\height{\the\scratchdimen\space}% \special{pdf: ann width \width height \height <>}% \egroup} %D \macros %D {doPDFannotationobject,doPDFactionobject} \def\doPDFannotationobject#1#2#3#4#5% {\bgroup \scratchdimen#3\edef\width {\the\scratchdimen\space}% \scratchdimen#4\edef\height{\the\scratchdimen\space}% \special{pdf: ann @#1::#2 width \width height \height <<#5>>}% \dosetobjectreference{#1}{#2}{@#1::#2}% \egroup} \def\doPDFactionobject#1#2#3#4#5% {\dodoPDFaction{@#1::#2}{#3}{#4}{#5}% \dosetobjectreference{#1}{#2}{#1::#2}} %D \macros %D {doPDFaddtocatalog,doPDFaddtoinfo, %D doPDFpageattribute,doPDFpagesattribute} \def\doPDFaddtocatalog#1% {\special{pdf: put @catalog <<#1>>}} \def\doPDFaddtoinfo#1% Is this auto appended? Not checked! {\special{pdf: docinfo <<#1>>}} % put @docinfo <<#1>>}} \def\doPDFpageattribute#1% {\special{pdf: put @thispage <<#1>>}} \def\doPDFpagesattribute#1% {\special{pdf: put @pages <<#1>>}} \def\doPDFpageresource#1% {\message{[skipping PDF resource]}} \let\doPDFresetpageresources \relax \let\doPDFresetpageattributes\relax %D \macros %D {doPDFbookmark} \def\doPDFbookmark#1#2#3#4#5% {\ifcase#2\else \scratchcounter#4\advance\scratchcounter\minusone \special{pdf: out \ifcase#5-\fi#2 % <>}% % <> >>}% <\else(#3)\fi\space /A <
> >>}% \fi} %D \macros %D {doPDFdictionaryobject,doPDFarrayobject} \def\doPDFdictionaryobject#1#2#3% {\special{pdf: object @#1::#2 <<#3>>}} \def\doPDFarrayobject#1#2#3% {\special{pdf: object @#1::#2 [#3]}} %D \macros %D {defaultobjectreference,doPDFgetobjectreference} \def\defaultobjectreference#1#2{#1::#2} \def\doPDFgetobjectreference#1#2#3% {\dogetobjectreference{#1}{#2}#3% \ifx#3\empty\else\edef#3{{#3}}\fi} % \def\doPDFgetobjectpage #1#2#3{..} % \def\doPDFgetobjectpagereference#1#2#3{..} \def\doPDFgetpagereference#1#2% {\edef#2{@page#1}} %D Done. \stopspecials \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ger.mkii0000644000175000017500000006525511754241457024267 0ustar norbertnorbert%D \module %D [ file=lang-ger, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Germanic Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Germanic Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. %D %D \starttabulate[|lB|l|] %D \NC Norwegian \NC Hans Fredrik Nordhaug \NC \NR %D \NC Danish \NC Arne Jorgensen \NC \NR % check the o %D \NC Afrikaans \NC \NC \NR %D \stoptabulate % Danish, Faeroese, Icelandic, Norwegian, Swedish, German, Yiddish % Afrikaans, Dutch, English, Flemush, Frisian, Plattdeutsch \unprotect \installlanguage [\s!nl] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\ ,\v!month,\ ,\v!year}, \s!mapping={texnansi,ec}, \s!encoding={texnansi,ec}] \installlanguage [\s!en] [\c!spacing=\v!broad, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!month,\ ,\v!day,{,\ },\v!year}, \s!patterns=\s!us, \s!lefthyphenmin=2, \s!righthyphenmin=3] \installlanguage [\s!de] [\c!spacing=\v!packed, \s!lefthyphenmin=3, \s!righthyphenmin=3, \c!leftsentence={\hbox{--~}}, \c!rightsentence={\hbox{~--}}, \c!leftsubsentence={--}, \c!rightsubsentence={--}, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year}, \s!mapping={texnansi,ec}, \s!encoding={texnansi,ec}] \installlanguage [\s!da] [\c!spacing=\v!packed, \c!leftsentence={\hbox{--\hskip.5em}}, \c!rightsentence={\hbox{\hskip.5em--}}, \c!leftsubsentence={--}, \c!rightsubsentence={--}, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year}] \installlanguage [\s!sv] [\c!spacing=\v!packed, \c!leftsentence={\hbox{--~}}, \c!rightsentence={\hbox{~--}}, \c!leftsubsentence={--}, \c!rightsubsentence={--}, \c!leftquote=\upperrightsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperrightdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,\ ,\v!month,\ ,\v!year}] \installlanguage [\s!af] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\ ,\v!month,\ ,\v!day}, \s!patterns=\s!af] % was nl \installlanguage [\s!nb] [spacing=packed, lefthyphenmin=2, righthyphenmin=2, leftsentence=---, rightsentence=---, leftsubsentence=---, rightsubsentence=---, leftquote=\upperleftsinglesixquote, rightquote=\upperrightsingleninequote, leftquotation=\leftguillemot, rightquotation=\rightguillemot, date={day,{.},\ ,month,\ ,year}, state=stop] \installlanguage [\s!nn] [spacing=packed, lefthyphenmin=2, righthyphenmin=2, leftsentence=---, rightsentence=---, leftsubsentence=---, rightsubsentence=---, leftquote=\upperleftsinglesixquote, rightquote=\upperrightsingleninequote, leftquotation=\leftguillemot, rightquotation=\rightguillemot, date={day,{.},\ ,month,\ ,year}, state=stop] \installlanguage [\s!no] [\s!nb] \installlanguage [\s!norwegian] [\s!nb] \installlanguage [\s!bokmal] [\s!nb] \installlanguage [\s!nynorsk] [\s!nn] %D Extra: % \mainlanguage[en] % \mainlanguage[de] % \mainlanguage[deo] % \mainlanguage[de-de] % \mainlanguage[de-at] % \mainlanguage[de-ch] % % \starttext % Die Herren Meier\index{Meier}, Müller\index{Müller}, Huber\index{Huber} % und Schmidt\index{Schmidt} arbeiten in der gleichen Firma. % % \index{Mass}\index{Mas}\index{Maß}\index{Maße}\index{Masse} % \index{Muller}\index{Mûller} % \index{Hutte}\index{Hütte}\index{Huttf} % \index{paar}\index{Paar} % \index{a}\index{aa}\index{ä}\index{az}\index{aza} % \index{o}\index{oo}\index{ö}\index{oz}\index{oza} % \index{u}\index{uu}\index{ü}\index{uz}\index{uza}\index{üa} % \index{call}\index{chip} % % \subject{Index} \placeindex % \stoptext \installlanguage % old german [deo] [\c!spacing=\v!packed, \c!default=\s!de] \installlanguage [de-de] [\c!spacing=\v!packed, \c!default=\s!de] \installlanguage [de-at] [\c!spacing=\v!packed, \c!default=\s!de, \c!leftquote=\leftguillemot, \c!rightquote=\rightguillemot, \c!leftquotation=\leftguillemot, \c!rightquotation=\rightguillemot] \installlanguage [de-ch] [\c!spacing=\v!packed, \c!default=\s!de] %D And some alternative (but very real) english patterns: \installlanguage [en-gb] [\c!default=\s!en, \s!patterns=\s!gb, \s!lefthyphenmin=3, \s!righthyphenmin=3] \installlanguage [en-us] [\c!default=\s!en, \s!patterns=\s!us] \installlanguage [\s!uk] [\s!en-\s!gb] \installlanguage [\s!us] [\s!en-\s!us] %D For compatibility reasons we also define: %installlanguage [du] [\s!de] % old times context %installlanguage [sp] [\s!es] % old times context /lang-ita \installlanguage [usenglish] [\s!en-\s!us] \installlanguage [ukenglish] [\s!en-\s!gb] \installlanguage [english] [\s!en] \installlanguage [dutch] [\s!nl] \installlanguage [german] [\s!de] \installlanguage [danish] [\s!da] \installlanguage [swedish] [\s!sv] \installlanguage [afrikaans] [\s!af] \setupheadtext [\s!en] [\v!content=Contents] \setupheadtext [\s!nl] [\v!content=Inhoud] \setupheadtext [\s!de] [\v!content=Inhalt] \setupheadtext [\s!da] [\v!content=Indhold] \setupheadtext [\s!sv] [\v!content=Inneh\aring ll] \setupheadtext [\s!af] [\v!content=Inhoud] \setupheadtext [\s!nb] [\v!content=Innhold] \setupheadtext [\s!nn] [\v!content=Innhald] \setupheadtext [\s!en] [\v!tables=Tables] \setupheadtext [\s!nl] [\v!tables=Tabellen] \setupheadtext [\s!de] [\v!tables=Tabellen] \setupheadtext [\s!da] [\v!tables=Tabeller] \setupheadtext [\s!sv] [\v!tables=Tabeller] \setupheadtext [\s!af] [\v!tables=Tabelle] \setupheadtext [\s!nb] [\v!tables=Tabeller] \setupheadtext [\s!nn] [\v!tables=Tabellar] \setupheadtext [\s!en] [\v!figures=Figures] \setupheadtext [\s!nl] [\v!figures=Figuren] \setupheadtext [\s!de] [\v!figures=Abbildungen] \setupheadtext [\s!da] [\v!figures=Figurer] \setupheadtext [\s!sv] [\v!figures=Figurer] \setupheadtext [\s!af] [\v!figures=Figure] \setupheadtext [\s!nb] [\v!figures=Figurer] \setupheadtext [\s!nn] [\v!figures=Figurar] \setupheadtext [\s!en] [\v!graphics=Graphics] \setupheadtext [\s!nl] [\v!graphics=Grafieken] \setupheadtext [\s!de] [\v!graphics=Graphiken] \setupheadtext [\s!da] [\v!graphics=Grafik] \setupheadtext [\s!sv] [\v!graphics=Grafik] \setupheadtext [\s!af] [\v!graphics=Grafieke] \setupheadtext [\s!nb] [\v!graphics=Bilde] \setupheadtext [\s!nn] [\v!graphics=Bilete] \setupheadtext [\s!en] [\v!intermezzi=Intermezzos] \setupheadtext [\s!nl] [\v!intermezzi=Intermezzo's] \setupheadtext [\s!de] [\v!intermezzi=Intermezzi] \setupheadtext [\s!da] [\v!intermezzi=Intermezzoer] \setupheadtext [\s!sv] [\v!intermezzi=Intermezzon] \setupheadtext [\s!af] [\v!intermezzi=Intermezzos] \setupheadtext [\s!nb] [\v!intermezzi=Intermesso] \setupheadtext [\s!nn] [\v!intermezzi=Intermesso] \setupheadtext [\s!en] [\v!index=Index] \setupheadtext [\s!nl] [\v!index=Index] \setupheadtext [\s!de] [\v!index=Index] \setupheadtext [\s!da] [\v!index=Indeks] \setupheadtext [\s!sv] [\v!index=Sakregister] \setupheadtext [\s!af] [\v!index=Indeks] \setupheadtext [\s!nb] [\v!index=Register] \setupheadtext [\s!nn] [\v!index=Register] \setupheadtext [\s!en] [\v!abbreviations=Abbreviations] \setupheadtext [\s!nl] [\v!abbreviations=Afkortingen] \setupheadtext [\s!de] [\v!abbreviations=Abk\uumlaut rzungen] \setupheadtext [\s!da] [\v!abbreviations=Forkortelser] \setupheadtext [\s!sv] [\v!abbreviations=F\oumlaut rkortningar] \setupheadtext [\s!af] [\v!abbreviations=Afkortings] \setupheadtext [\s!nb] [\v!abbreviations=Forkortelser] \setupheadtext [\s!nn] [\v!abbreviations=Forkortingar] \setupheadtext [\s!en] [\v!logos=Logos] \setupheadtext [\s!nl] [\v!logos=Logo's] \setupheadtext [\s!de] [\v!logos=Logos] \setupheadtext [\s!da] [\v!logos=Logoer] \setupheadtext [\s!sv] [\v!logos=Loggor] \setupheadtext [\s!af] [\v!logos=Logos] \setupheadtext [\s!nb] [\v!logos=Logoer] \setupheadtext [\s!nn] [\v!logos=Logoar] \setupheadtext [\s!en] [\v!units=Units] \setupheadtext [\s!nl] [\v!units=Eenheden] \setupheadtext [\s!de] [\v!units=Einheiten] \setupheadtext [\s!da] [\v!units=Enheder] \setupheadtext [\s!sv] [\v!units=Enheter] \setupheadtext [\s!af] [\v!units=Eenhede] \setupheadtext [\s!nb] [\v!units=Enheter] \setupheadtext [\s!nn] [\v!units=Einingar] \setupheadtext [\s!en] [pubs=References] \setupheadtext [\s!nl] [pubs=Literatuur] \setupheadtext [\s!de] [pubs=Literatur] %setupheadtext [\s!da] [pubs=?] %setupheadtext [\s!sv] [pubs=?] %setupheadtext [\s!af] [pubs=?] %setupheadtext [\s!nb] [pubs=?] %setupheadtext [\s!nn] [pubs=?] \setuplabeltext [\s!en] [\v!table=Table ] \setuplabeltext [\s!nl] [\v!table=Tabel ] \setuplabeltext [\s!de] [\v!table=Tabelle ] \setuplabeltext [\s!da] [\v!table=Tabel ] \setuplabeltext [\s!sv] [\v!table=Tabell ] \setuplabeltext [\s!af] [\v!table=Tabel] \setuplabeltext [\s!nb] [\v!table=Tabell ] \setuplabeltext [\s!nn] [\v!table=Tabell ] \setuplabeltext [\s!en] [\v!figure=Figure ] \setuplabeltext [\s!nl] [\v!figure=Figuur ] \setuplabeltext [\s!de] [\v!figure=Abbildung ] \setuplabeltext [\s!da] [\v!figure=Figur ] \setuplabeltext [\s!sv] [\v!figure=Figur ] \setuplabeltext [\s!af] [\v!figure=Figuur ] \setuplabeltext [\s!nb] [\v!figure=Figur ] \setuplabeltext [\s!nn] [\v!figure=Figur ] \setuplabeltext [\s!en] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!nl] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!de] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!da] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!sv] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!af] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!nb] [\v!intermezzo=Intermesso ] \setuplabeltext [\s!nn] [\v!intermezzo=Intermesso ] \setuplabeltext [\s!en] [\v!graphic=Graphic ] \setuplabeltext [\s!nl] [\v!graphic=Grafiek ] \setuplabeltext [\s!de] [\v!graphic=Graphik ] \setuplabeltext [\s!da] [\v!graphic=Grafik ] \setuplabeltext [\s!sv] [\v!graphic=Grafik ] \setuplabeltext [\s!af] [\v!graphic=Grafiek ] \setuplabeltext [\s!nb] [\v!graphic=Bilde ] \setuplabeltext [\s!nn] [\v!graphic=Bilete ] %D We don't set these here. One can do that in a style. \setuplabeltext [\s!en] [\v!chapter=] % Chapter \setuplabeltext [\s!nl] [\v!chapter=] \setuplabeltext [\s!de] [\v!chapter=] % Kapitel \setuplabeltext [\s!da] [\v!chapter=] \setuplabeltext [\s!sv] [\v!chapter=] \setuplabeltext [\s!af] [\v!chapter=] % Hoofstuk \setuplabeltext [\s!nb] [\v!chapter=] \setuplabeltext [\s!nn] [\v!chapter=] \setuplabeltext [\s!en] [\v!section=] \setuplabeltext [\s!nl] [\v!section=] \setuplabeltext [\s!de] [\v!section=] \setuplabeltext [\s!da] [\v!section=] \setuplabeltext [\s!sv] [\v!section=] \setuplabeltext [\s!af] [\v!section=] % Paragraaf \setuplabeltext [\s!nb] [\v!section=] \setuplabeltext [\s!nn] [\v!section=] \setuplabeltext [\s!en] [\v!subsection=] \setuplabeltext [\s!nl] [\v!subsection=] \setuplabeltext [\s!de] [\v!subsection=] \setuplabeltext [\s!da] [\v!subsection=] \setuplabeltext [\s!sv] [\v!subsection=] \setuplabeltext [\s!af] [\v!subsection=] \setuplabeltext [\s!nb] [\v!subsection=] \setuplabeltext [\s!nn] [\v!subsection=] \setuplabeltext [\s!en] [\v!subsubsection=] \setuplabeltext [\s!nl] [\v!subsubsection=] \setuplabeltext [\s!de] [\v!subsubsection=] \setuplabeltext [\s!da] [\v!subsubsection=] \setuplabeltext [\s!sv] [\v!subsubsection=] \setuplabeltext [\s!af] [\v!subsubsection=] \setuplabeltext [\s!nb] [\v!subsubsection=] \setuplabeltext [\s!nn] [\v!subsubsection=] \setuplabeltext [\s!en] [\v!subsubsubsection=] \setuplabeltext [\s!nl] [\v!subsubsubsection=] \setuplabeltext [\s!de] [\v!subsubsubsection=] \setuplabeltext [\s!da] [\v!subsubsubsection=] \setuplabeltext [\s!sv] [\v!subsubsubsection=] \setuplabeltext [\s!af] [\v!subsubsubsection=] \setuplabeltext [\s!nb] [\v!subsubsubsection=] \setuplabeltext [\s!nn] [\v!subsubsubsection=] \setuplabeltext [\s!en] [\v!appendix=] % Appendix \setuplabeltext [\s!nl] [\v!appendix=] \setuplabeltext [\s!de] [\v!appendix=] % Anhang \setuplabeltext [\s!da] [\v!appendix=] % Bilag \setuplabeltext [\s!sv] [\v!appendix=] \setuplabeltext [\s!af] [\v!appendix=] % Bylae \setuplabeltext [\s!nb] [\v!appendix=] % Tillegg \setuplabeltext [\s!nn] [\v!appendix=] % Tillegg \setuplabeltext [\s!en] [\v!part=Part ] \setuplabeltext [\s!nl] [\v!part=Deel ] \setuplabeltext [\s!de] [\v!part=Teil ] \setuplabeltext [\s!da] [\v!part=Del ] \setuplabeltext [\s!sv] [\v!part=Del ] \setuplabeltext [\s!af] [\v!part=Deel ] \setuplabeltext [\s!nb] [\v!part=Del] \setuplabeltext [\s!nn] [\v!part=Del] \setuplabeltext [\s!en] [\v!line=line ] \setuplabeltext [\s!nl] [\v!line=regel ] \setuplabeltext [\s!de] [\v!line=Zeile ] \setuplabeltext [\s!da] [\v!line=linie ] % or linje \setuplabeltext [\s!sv] [\v!line=rad ] \setuplabeltext [\s!af] [\v!line=re\ediaeresis l ] \setuplabeltext [\s!nb] [\v!line=linje ] \setuplabeltext [\s!nn] [\v!line=linje ] \setuplabeltext [\s!en] [\v!lines=lines ] \setuplabeltext [\s!nl] [\v!lines=regels ] \setuplabeltext [\s!de] [\v!lines=Zeilen ] \setuplabeltext [\s!da] [\v!lines=linier ] % or linjer \setuplabeltext [\s!sv] [\v!lines=rader ] \setuplabeltext [\s!af] [\v!lines=re\ediaeresis ls ] \setuplabeltext [\s!nb] [\v!lines=linjer ] \setuplabeltext [\s!nn] [\v!lines=linjer ] \setuplabeltext [\s!en] [\v!january=January] \setuplabeltext [\s!en] [\v!february=February] \setuplabeltext [\s!en] [\v!march=March] \setuplabeltext [\s!en] [\v!april=April] \setuplabeltext [\s!en] [\v!may=May] \setuplabeltext [\s!en] [\v!june=June] \setuplabeltext [\s!en] [\v!july=July] \setuplabeltext [\s!en] [\v!august=August] \setuplabeltext [\s!en] [\v!september=September] \setuplabeltext [\s!en] [\v!october=October] \setuplabeltext [\s!en] [\v!november=November] \setuplabeltext [\s!en] [\v!december=December] \setuplabeltext [\s!nl] [\v!january=januari] \setuplabeltext [\s!nl] [\v!february=februari] \setuplabeltext [\s!nl] [\v!march=maart] \setuplabeltext [\s!nl] [\v!april=april] \setuplabeltext [\s!nl] [\v!may=mei] \setuplabeltext [\s!nl] [\v!june=juni] \setuplabeltext [\s!nl] [\v!july=juli] \setuplabeltext [\s!nl] [\v!august=augustus] \setuplabeltext [\s!nl] [\v!september=september] \setuplabeltext [\s!nl] [\v!october=oktober] \setuplabeltext [\s!nl] [\v!november=november] \setuplabeltext [\s!nl] [\v!december=december] \setuplabeltext [\s!de] [\v!january=Januar] \setuplabeltext [\s!de] [\v!february=Februar] \setuplabeltext [\s!de] [\v!march=M\aumlaut rz] \setuplabeltext [\s!de] [\v!april=April] \setuplabeltext [\s!de] [\v!may=Mai] \setuplabeltext [\s!de] [\v!june=Juni] \setuplabeltext [\s!de] [\v!july=Juli] \setuplabeltext [\s!de] [\v!august=August] \setuplabeltext [\s!de] [\v!september=September] \setuplabeltext [\s!de] [\v!october=Oktober] \setuplabeltext [\s!de] [\v!november=November] \setuplabeltext [\s!de] [\v!december=Dezember] \setuplabeltext [\s!da] [\v!january=januar] \setuplabeltext [\s!da] [\v!february=februar] \setuplabeltext [\s!da] [\v!march=marts] \setuplabeltext [\s!da] [\v!april=april] \setuplabeltext [\s!da] [\v!may=maj] \setuplabeltext [\s!da] [\v!june=juni] \setuplabeltext [\s!da] [\v!july=juli] \setuplabeltext [\s!da] [\v!august=august] \setuplabeltext [\s!da] [\v!september=september] \setuplabeltext [\s!da] [\v!october=oktober] \setuplabeltext [\s!da] [\v!november=november] \setuplabeltext [\s!da] [\v!december=december] \setuplabeltext [\s!sv] [\v!january=januari] \setuplabeltext [\s!sv] [\v!february=februari] \setuplabeltext [\s!sv] [\v!march=mars] \setuplabeltext [\s!sv] [\v!april=april] \setuplabeltext [\s!sv] [\v!may=maj] \setuplabeltext [\s!sv] [\v!june=juni] \setuplabeltext [\s!sv] [\v!july=juli] \setuplabeltext [\s!sv] [\v!august=augusti] \setuplabeltext [\s!sv] [\v!september=september] \setuplabeltext [\s!sv] [\v!october=oktober] \setuplabeltext [\s!sv] [\v!november=november] \setuplabeltext [\s!sv] [\v!december=december] \setuplabeltext [\s!af] [\v!january=januarie] \setuplabeltext [\s!af] [\v!february=februarie] \setuplabeltext [\s!af] [\v!march=maart] \setuplabeltext [\s!af] [\v!april=april] \setuplabeltext [\s!af] [\v!may=mei] \setuplabeltext [\s!af] [\v!june=junie] \setuplabeltext [\s!af] [\v!july=julie] \setuplabeltext [\s!af] [\v!august=augustus] \setuplabeltext [\s!af] [\v!september=september] \setuplabeltext [\s!af] [\v!october=oktober] \setuplabeltext [\s!af] [\v!november=november] \setuplabeltext [\s!af] [\v!december=desember] \setuplabeltext [\s!nb] [\v!january=januar] \setuplabeltext [\s!nb] [\v!february=februar] \setuplabeltext [\s!nb] [\v!march=mars] \setuplabeltext [\s!nb] [\v!april=april] \setuplabeltext [\s!nb] [\v!may=mai] \setuplabeltext [\s!nb] [\v!june=juni] \setuplabeltext [\s!nb] [\v!july=juli] \setuplabeltext [\s!nb] [\v!august=august] \setuplabeltext [\s!nb] [\v!september=september] \setuplabeltext [\s!nb] [\v!october=oktober] \setuplabeltext [\s!nb] [\v!november=november] \setuplabeltext [\s!nb] [\v!december=desember] \setuplabeltext [\s!nn] [\v!january=januar] \setuplabeltext [\s!nn] [\v!february=februar] \setuplabeltext [\s!nn] [\v!march=mars] \setuplabeltext [\s!nn] [\v!april=april] \setuplabeltext [\s!nn] [\v!may=mai] \setuplabeltext [\s!nn] [\v!june=juni] \setuplabeltext [\s!nn] [\v!july=juli] \setuplabeltext [\s!nn] [\v!august=august] \setuplabeltext [\s!nn] [\v!september=september] \setuplabeltext [\s!nn] [\v!october=oktober] \setuplabeltext [\s!nn] [\v!november=november] \setuplabeltext [\s!nn] [\v!december=desember] \setuplabeltext [\s!en] [\v!sunday=Sunday] \setuplabeltext [\s!en] [\v!monday=Monday] \setuplabeltext [\s!en] [\v!tuesday=Tuesday] \setuplabeltext [\s!en] [\v!wednesday=Wednesday] \setuplabeltext [\s!en] [\v!thursday=Thursday] \setuplabeltext [\s!en] [\v!friday=Friday] \setuplabeltext [\s!en] [\v!saturday=Saturday] \setuplabeltext [\s!nl] [\v!sunday=zondag] \setuplabeltext [\s!nl] [\v!monday=maandag] \setuplabeltext [\s!nl] [\v!tuesday=dinsdag] \setuplabeltext [\s!nl] [\v!wednesday=woensdag] \setuplabeltext [\s!nl] [\v!thursday=donderdag] \setuplabeltext [\s!nl] [\v!friday=vrijdag] \setuplabeltext [\s!nl] [\v!saturday=zaterdag] \setuplabeltext [\s!de] [\v!sunday=Sonntag] \setuplabeltext [\s!de] [\v!monday=Montag] \setuplabeltext [\s!de] [\v!tuesday=Dienstag] \setuplabeltext [\s!de] [\v!wednesday=Mittwoch] \setuplabeltext [\s!de] [\v!thursday=Donnerstag] \setuplabeltext [\s!de] [\v!friday=Freitag] \setuplabeltext [\s!de] [\v!saturday=Samstag] \setuplabeltext [\s!da] [\v!sunday=s\ostroke ndag] \setuplabeltext [\s!da] [\v!monday=mandag] \setuplabeltext [\s!da] [\v!tuesday=tirsdag] \setuplabeltext [\s!da] [\v!wednesday=onsdag] \setuplabeltext [\s!da] [\v!thursday=torsdag] \setuplabeltext [\s!da] [\v!friday=fredag] \setuplabeltext [\s!da] [\v!saturday=l\ostroke rdag] \setuplabeltext [\s!sv] [\v!sunday=s\oumlaut ndag] \setuplabeltext [\s!sv] [\v!monday=m\aring ndag] \setuplabeltext [\s!sv] [\v!tuesday=tisdag] \setuplabeltext [\s!sv] [\v!wednesday=onsdag] \setuplabeltext [\s!sv] [\v!thursday=torsdag] \setuplabeltext [\s!sv] [\v!friday=fredag] \setuplabeltext [\s!sv] [\v!saturday=l\oumlaut rdag] \setuplabeltext [\s!af] [\v!sunday=sondag] \setuplabeltext [\s!af] [\v!monday=maandag] \setuplabeltext [\s!af] [\v!tuesday=dinsdag] \setuplabeltext [\s!af] [\v!wednesday=woensdag] \setuplabeltext [\s!af] [\v!thursday=donderdag] \setuplabeltext [\s!af] [\v!friday=vrydag] \setuplabeltext [\s!af] [\v!saturday=saterdag] \setuplabeltext [\s!nb] [\v!sunday=s\ostroke ndag] \setuplabeltext [\s!nb] [\v!monday=mandag] \setuplabeltext [\s!nb] [\v!tuesday=tirsdag] \setuplabeltext [\s!nb] [\v!wednesday=onsdag] \setuplabeltext [\s!nb] [\v!thursday=torsdag] \setuplabeltext [\s!nb] [\v!friday=fredag] \setuplabeltext [\s!nb] [\v!saturday=l\ostroke rdag] \setuplabeltext [\s!nn] [\v!sunday=sundag] \setuplabeltext [\s!nn] [\v!monday=m\aring ndag] \setuplabeltext [\s!nn] [\v!tuesday=tysdag] \setuplabeltext [\s!nn] [\v!wednesday=onsdag] \setuplabeltext [\s!nn] [\v!thursday=torsdag] \setuplabeltext [\s!nn] [\v!friday=fredag] \setuplabeltext [\s!nn] [\v!saturday=laurdag] %D Rather new ... \setuplabeltext [\s!nl] [\v!page=pagina ] \setuplabeltext [\s!nl] [\v!atpage=op pagina ] \setuplabeltext [\s!nl] [\v!hencefore=hierboven] \setuplabeltext [\s!nl] [\v!hereafter=hieronder] \setuplabeltext [\s!nl] [\v!see=zie ] \setuplabeltext [\s!nl] [\v!and= en ] \setuplabeltext [\s!nl] [\v!continued={ (vervolged)}] \setuplabeltext [\s!en] [\v!page=page ] \setuplabeltext [\s!en] [\v!atpage=at page ] \setuplabeltext [\s!en] [\v!hencefore=as we show above] \setuplabeltext [\s!en] [\v!hereafter=as we show below] \setuplabeltext [\s!en] [\v!see=see ] \setuplabeltext [\s!en] [\v!and= and ] \setuplabeltext [\s!en] [\v!continued={ (continued)}] \setuplabeltext [\s!de] [\v!page=Seite ] \setuplabeltext [\s!de] [\v!atpage=auf Seite ] \setuplabeltext [\s!de] [\v!hencefore=siehe oben] \setuplabeltext [\s!de] [\v!hereafter=siehe unten] \setuplabeltext [\s!de] [\v!see=siehe ] \setuplabeltext [\s!de] [\v!and= und ] \setuplabeltext [\s!da] [\v!page=Side ] \setuplabeltext [\s!da] [\v!atpage=p\aring\ side ] \setuplabeltext [\s!da] [\v!hencefore=se foroven] \setuplabeltext [\s!da] [\v!hereafter=se forneden] \setuplabeltext [\s!da] [\v!see=se ] \setuplabeltext [\s!sv] [\v!page=Sida ] \setuplabeltext [\s!sv] [\v!atpage=p\aring\ sida ] \setuplabeltext [\s!sv] [\v!hencefore=se ovan] \setuplabeltext [\s!sv] [\v!hereafter=se nedan] \setuplabeltext [\s!sv] [\v!see=se ] \setuplabeltext [\s!nb] [\v!page=side ] \setuplabeltext [\s!nb] [\v!atpage=p\aring\ side ] \setuplabeltext [\s!nb] [\v!hencefore=som vist over] \setuplabeltext [\s!nb] [\v!hereafter=som vist under] \setuplabeltext [\s!nb] [\v!see=se ] \setuplabeltext [\s!nn] [\v!page=side ] \setuplabeltext [\s!nn] [\v!atpage=p\aring\ side ] \setuplabeltext [\s!nn] [\v!hencefore=som vist over] \setuplabeltext [\s!nn] [\v!hereafter=som vist under] \setuplabeltext [\s!nn] [\v!see=sj\aring\ ] %D ... and to be completed! %D Next we implement couple of ordinal mumber converters: \def\enordinaldaynumber#1% {#1\ifnum\lasttwodigits{#1}=11 \highordinalstr{th}% \else\ifnum\lasttwodigits{#1}=12 \highordinalstr{th}% \else\ifnum\lasttwodigits{#1}=13 \highordinalstr{th}% \else\ifcase\lastdigit{#1}% \highordinalstr{th}% \or % 1 \highordinalstr{st}% \or % 2 \highordinalstr{nd}% \or % 3 \highordinalstr{rd}% \else \highordinalstr{th}% \fi\fi\fi\fi} % \def\enordinaldaynumber#1% % {#1\ordinalstr{\ifnum\lasttwodigits{#1}=11 th\else\ifcase\lastdigit{#1} % th\or st\or nd\or rd\else th\fi\fi}} \def\nlordinaldaynumber#1% {#1\highordinalstr{e}} %D \ShowAllLanguageValues [\s!en] [english] {English} {horn} % engelse humor %D \ShowAllLanguageValues [\s!nl] [dutch] {Dutch} {treat} % nederlandse zuinigheid %D \ShowAllLanguageValues [\s!de] [german] {German} {beer} % duitse degelijkheid %D \ShowAllLanguageValues [\s!da] [danish] {Danish} {pastry} %D \ShowAllLanguageValues [\s!sv] [swedish] {Swedish} {design} %D \ShowAllLanguageValues [\s!af] [afrikaans] {Afrikaaner} {boer} % afrikaanse gasvryheid %D \ShowAllLanguageValues [\s!nb] [bokmal] {Norwegian} {wood} %D \ShowAllLanguageValues [\s!nn] [nynorsk] {Norwegian} {fish} %D Extra month names: \setuplabeltext [\s!en] [\v!january :\s!mnem=jan] \setuplabeltext [\s!en] [\v!february :\s!mnem=feb] \setuplabeltext [\s!en] [\v!march :\s!mnem=mar] \setuplabeltext [\s!en] [\v!april :\s!mnem=apr] \setuplabeltext [\s!en] [\v!may :\s!mnem=may] \setuplabeltext [\s!en] [\v!june :\s!mnem=jun] \setuplabeltext [\s!en] [\v!july :\s!mnem=jul] \setuplabeltext [\s!en] [\v!august :\s!mnem=aug] \setuplabeltext [\s!en] [\v!september:\s!mnem=sep] \setuplabeltext [\s!en] [\v!october :\s!mnem=oct] \setuplabeltext [\s!en] [\v!november :\s!mnem=nov] \setuplabeltext [\s!en] [\v!december :\s!mnem=dec] \setuplabeltext [\s!nb] [\v!january :\s!mnem=jan.] \setuplabeltext [\s!nb] [\v!february :\s!mnem=feb.] \setuplabeltext [\s!nb] [\v!march :\s!mnem=mars] \setuplabeltext [\s!nb] [\v!april :\s!mnem=april] \setuplabeltext [\s!nb] [\v!may :\s!mnem=mai] \setuplabeltext [\s!nb] [\v!june :\s!mnem=juni] \setuplabeltext [\s!nb] [\v!july :\s!mnem=juli] \setuplabeltext [\s!nb] [\v!august :\s!mnem=aug.] \setuplabeltext [\s!nb] [\v!september:\s!mnem=sep.] \setuplabeltext [\s!nb] [\v!october :\s!mnem=okt.] \setuplabeltext [\s!nb] [\v!november :\s!mnem=nov.] \setuplabeltext [\s!nb] [\v!december :\s!mnem=des.] \setuplabeltext [\s!nn] [\v!january :\s!mnem=jan.] \setuplabeltext [\s!nn] [\v!february :\s!mnem=feb.] \setuplabeltext [\s!nn] [\v!march :\s!mnem=mars] \setuplabeltext [\s!nn] [\v!april :\s!mnem=april] \setuplabeltext [\s!nn] [\v!may :\s!mnem=mai] \setuplabeltext [\s!nn] [\v!june :\s!mnem=juni] \setuplabeltext [\s!nn] [\v!july :\s!mnem=juli] \setuplabeltext [\s!nn] [\v!august :\s!mnem=aug.] \setuplabeltext [\s!nn] [\v!september:\s!mnem=sep.] \setuplabeltext [\s!nn] [\v!october :\s!mnem=okt.] \setuplabeltext [\s!nn] [\v!november :\s!mnem=nov.] \setuplabeltext [\s!nn] [\v!december :\s!mnem=des.] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-def.mkiv0000644000175000017500000001416412130411274024271 0ustar norbertnorbert%D [ file=strc-def, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Definitions} %registerctxluafile{strc-def}{1.001} \unprotect % \setupsectionblock[appendix][sectionconversionset=appendix] % \setuphead[chapter][sectionconversionset=\sectionblockparameter\c!sectionconversionset] % \sectionblockparameter] % \defineresetset[default][0,1,1,0][1] % this will not reset parts and subsections % \setuphead[part][sectionresetset=default] % \starttext % \placelist[chapter,section,subsection][criterium=all,width=3cm] % \part{first} \chapter{alpha} \section{a} \section{b} \subsection{x} \subsection{y} \chapter{beta} % \part{second} \chapter{gamma} \section{a} \section{b} \subsection{x} \subsection{y} \chapter{delta} % \stoptext \defineseparatorset [\s!default] [] [.] \defineconversionset [\s!default] [] [numbers] \defineresetset [\s!default] [] [1] % each level \defineprefixset [\s!default] [section-1,section-2,section-3] [] \defineconversionset [\v!pagenumber] [] [numbers] \defineprefixset [\v!all] [section-1,section-2,section-3,section-4,section-5,section-6,section-7,section-8] [] \defineprefixset [\v!none] [] [] \defineprefixset [\v!part] [section-1] [] \defineprefixset [\v!chapter] [section-2] [] \defineseparatorset [\v!appendix:\s!default] [] [.] \defineconversionset [\v!appendix:\s!default] [Romannumerals,Characters] [numbers] \defineresetset [\v!appendix:\s!default] [] [1] % why was this 0 \setupuserpagenumber [\c!numberconversionset=\v!pagenumber] % \startsetups defaults:frontpart:pagenumbers:roman % \defineconversionset[\c!frontpart:\c!pagenumber][][romannumerals] % \setupuserpagenumber[\c!way=\v!by\v!block] % \stopsetups % \definesectionblock \definesectionblock [\v!frontpart] [\v!frontmatter] [\c!number=\v!no] \definesectionblock [\v!bodypart] [\v!bodymatter] [\c!number=\v!yes] \definesectionblock [\v!appendix] [\v!appendices] [\c!number=\v!yes] \definesectionblock [\v!backpart] [\v!backmatter] [\c!number=\v!no] \setsectionblock [\v!bodypart] % default \appendtoks \setsectionblock [\v!bodypart]% default \to \everyjob % \definesection (could become \definehead with one parameter) \definesection[\s!section-1] % part \definesection[\s!section-2] % chapter \definesection[\s!section-3] % section \definesection[\s!section-4] % subsection \definesection[\s!section-5] % subsubsection \definesection[\s!section-6] % subsubsubsection \definesection[\s!section-7] % subsubsubsubsection % \definehead \definehead [\v!part] [\c!section=\s!section-1] \definehead [\v!chapter] [\c!section=\s!section-2] \definehead [\v!section] [\c!section=\s!section-3] \definehead [\v!subsection] [\c!section=\s!section-4, \c!default=\v!section] \definehead [\v!subsubsection] [\c!section=\s!section-5, \c!default=\v!subsection] \definehead [\v!subsubsubsection] [\c!section=\s!section-6, \c!default=\v!subsubsection] \definehead [\v!subsubsubsubsection] [\c!section=\s!section-7, \c!default=\v!subsubsubsection] \definehead [\v!title] [\c!coupling=\v!chapter, \c!default=\v!chapter, \c!incrementnumber=\v!no] \definehead [\v!subject] [\c!coupling=\v!section, \c!default=\v!section, \c!incrementnumber=\v!no] \definehead [\v!subsubject] [\c!coupling=\v!subsection, \c!default=\v!subsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubject] [\c!coupling=\v!subsubsection, \c!default=\v!subsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubject] [\c!coupling=\v!subsubsubsection, \c!default=\v!subsubsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubsubject] [\c!coupling=\v!subsubsubsubsection, \c!default=\v!subsubsubsubsection, \c!incrementnumber=\v!no] \setuphead [\v!part] [\c!placehead=\v!no] \setuphead [\v!chapter] [\v!appendix\c!label=\v!appendix, \v!bodypart\c!label=\v!chapter] % bijlageconversie=\Character \setuphead [\v!section] [\v!appendix\c!label=\v!section, \v!bodypart\c!label=\v!section] % bijlageconversie=\Character \setuphead [\v!subsection] [\v!appendix\c!label=\v!subsection, \v!bodypart\c!label=\v!subsection] % bijlageconversie=\Character \setuphead [\v!subsubsection] [\v!appendix\c!label=\v!subsubsection, \v!bodypart\c!label=\v!subsubsection] % bijlageconversie=\Character % \setuphead \setuphead [\v!part,\v!chapter] [%\c!align=, %\c!indentnext=\v!no, \c!continue=\v!no, \c!page=\v!right, \c!marking=\v!page, \c!header=, \c!style=\tfc, \c!distance=.75\emwidth, \c!before={\blank[2*\v!big]}, \c!after={\blank[2*\v!big]}] \setuphead [\v!section] [%\c!align=, %\c!indentnext=\v!no, \c!style=\tfa, \c!distance=.75\emwidth, \c!before={\blank[2*\v!big]}, \c!after=\blank] \setuphead % nieuw [\v!subsection] [\c!page=] % brrr % \definecounter[\v!page][\c!start=1] % todo: setup % lists \definecombinedlist [\v!content] [\v!part, \v!chapter, \v!section, \v!subsection, \v!subsubsection, \v!subsubsubsection, \v!subsubsubsubsection] [\c!level=\v!subsubsubsubsection, \c!criterium=\v!local] \setuplist [\v!part] [\c!before={\blank[\v!preference,\v!big]}, % sort of mkii compatible, watch columns \c!after=\blank, \c!label=\v!yes, \c!distance=1em] \setuplist [\v!chapter] [\c!before={\blank[\v!preference,\v!big]}, % sort of mkii compatible, watch columns \c!after=] \setuplist [\v!part] [\c!width=0em] \setuplist [\v!chapter] [\c!width=2em] \setuplist [\v!section] [\c!width=3em] \setuplist [\v!subsection] [\c!width=4em] \setuplist [\v!subsubsection] [\c!width=5em] \setuplist [\v!subsubsubsection] [\c!width=6em] \setuplist [\v!subsubsubsubsection] [\c!width=7em] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-hex.mkii0000644000175000017500000000715211754241457024301 0ustar norbertnorbert%D \module %D [ file=colo-hex, %D version=2004.06.23, %D title=\CONTEXT\ Color Macros, %D subtitle=Hex Colors, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifdefined \hexcolorprefix \expandafter \endinput \fi \writestatus{loading}{ConTeXt Color Macros / Hexadecimal} % \edef\testcolor{\string#FFC0C0} % \edef\testcolor{\string#55} % % \setupcolors[state=start] % % \expanded{\definecolor[thehexcolor][\hexcolorspec\testcolor]} % % \checkhexcolor[\testcolor] % % \definecolor[thehexcolor][\testcolor] % % \starttext % % test \color[thehexcolor]{rood} % test \color[red]{rood} % test \color[\testcolor]{rood} % % \stoptext \unprotect % \definecolor[rgbtestcolor] [r=0.87843,g=0.87451,b=0.89020] % RGB(224,223,227) % \definecolor[hextestcolor] [h=E0DFE3] % % \startMPpage % path p ; % example by Peter Rolf % p := unitsquare xyscaled(5cm,5cm) ; % fill (point 0 of p -- point 1 of p -- point 2 of p --cycle) withcolor \MPcolor{rgbtestcolor} ; % bottom right part of the square % fill (point 0 of p -- point 3 of p -- point 2 of p --cycle) withcolor \MPcolor{hextestcolor} ; % top left part % \stopMPpage \newdimen\hexcolorfraction \hexcolorfraction=\dimexpr1pt/255\relax \chardef\hexcolorprefix=`# \def\hexcolorspec #1{\expandafter\dohexcolorspec #1\empty\empty\empty\empty\relax} \def\hexcolorpattern#1{\expandafter\dohexcolorpattern#1\empty\empty\empty\empty\relax} \ifx\dohexstringtonumber\undefined \def\dohexstringtonumber{"} \fi \def\hexcolorcomponent#1#2% {\ifnum\dohexstringtonumber#1#2=\zerocount0\else\ifnum\dohexstringtonumber#1#2=\plusone1\else \expandafter\withoutpt\the\dimexpr\dohexstringtonumber#1#2\hexcolorfraction\relax \fi\fi} \def\dohexcolorspec#1#2#3#4#5#6#7#8\relax {\ifx#4\empty s=\hexcolorcomponent#2#3% \else r=\hexcolorcomponent#2#3,g=\hexcolorcomponent#4#5,b=\hexcolorcomponent#6#7% \fi} \def\dohexcolorpattern#1#2#3#4#5#6#7#8\relax {0\ifx#4\empty S:\hexcolorcomponent#2#3% \else R:\hexcolorcomponent#2#3:\hexcolorcomponent#4#5:\hexcolorcomponent#6#7% \fi:0:0} \def\doifhexcolorelse#1% {\expandafter\dodoifhexcolorelse#10\od} % 0 is a dirty trick to catch an empty #1 \def\dodoifhexcolorelse#1#2\od {\ifnum`#1=\hexcolorprefix \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\docheckhexcolor#1% {\doifhexcolorelse{#1}{\doifundefined{#1}{\setxvalue{\??cr#1}{\hexcolorpattern{#1}}}}\donothing} \def\checkhexcolor[#1]% {\expanded{\docheckhexcolor{#1}}} \def\colorHpattern{\@EA\hexcolorpattern\@EA{\@EA*\@@cl@@h}} % * == dummy placeholder \let\dodododefinecolor\dododefinecolor % we will overload this one \def\dododefinecolor#1#2#3#4[#5][#6]% {\doifhexcolorelse{#6} {\setxvalue{\??cr#5}{\hexcolorpattern{#6}}} {\dodododefinecolor#1#2#3#4[#5][#6]}} %D For Adam Lindsay and his XeTeX special driver: % because we intercept the zero condition, the .23pt in 1.23pt will disappear in the % ifcase zero part branch \def\colorhexcomponent#1% {\ifdim#1\points<.005\points 00\else\lchexnumbers{\the\dimexpr255\dimexpr#1\points\relax+.5\points\relax}% \fi} % the faster one \newdimen\hex@color@a \hex@color@a=.005pt \newdimen\hex@color@b \hex@color@b=.5pt \chardef \hex@color@c =255 \def\colorhexcomponent#1% {\ifdim#1\points<\hex@color@a 00\else\lchexnumbers{\the\dimexpr#1\points*\hex@color@c+\hex@color@b\relax}% \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-jsn.lua0000644000175000017500000001125712161703335024150 0ustar norbertnorbertif not modules then modules = { } end modules ['util-jsn'] = { version = 1.001, comment = "companion to m-json.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Of course we could make a nice complete parser with proper error messages but -- as json is generated programmatically errors are systematic and we can assume -- a correct stream. If not, we have some fatal error anyway. So, we can just rely -- on strings being strings (apart from the unicode escape which is not in 5.1) and -- as we first catch known types we just assume that anything else is a number. -- -- Reminder for me: check usage in framework and extend when needed. Also document -- it in the cld lib documentation. local P, V, R, S, C, Cc, Cs, Ct, Cf, Cg = lpeg.P, lpeg.V, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct, lpeg.Cf, lpeg.Cg local lpegmatch = lpeg.match local format = string.format local utfchar = utf.char local concat = table.concat local tonumber, tostring, rawset, type = tonumber, tostring, rawset, type local json = utilities.json or { } utilities.json = json -- moduledata = moduledata or { } -- moduledata.json = json -- \\ \/ \b \f \n \r \t \uHHHH local lbrace = P("{") local rbrace = P("}") local lparent = P("[") local rparent = P("]") local comma = P(",") local colon = P(":") local dquote = P('"') local whitespace = lpeg.patterns.whitespace local optionalws = whitespace^0 local escape = C(P("\\u") / "0x" * S("09","AF","af")) / function(s) return utfchar(tonumber(s)) end local jstring = dquote * Cs((escape + (1-dquote))^0) * dquote local jtrue = P("true") * Cc(true) local jfalse = P("false") * Cc(false) local jnull = P("null") * Cc(nil) local jnumber = (1-whitespace-rparent-rbrace-comma)^1 / tonumber local key = jstring local jsonconverter = { "value", object = lbrace * Cf(Ct("") * V("pair") * (comma * V("pair"))^0,rawset) * rbrace, pair = Cg(optionalws * key * optionalws * colon * V("value")), array = Ct(lparent * V("value") * (comma * V("value"))^0 * rparent), value = optionalws * (jstring + V("object") + V("array") + jtrue + jfalse + jnull + jnumber + #rparent) * optionalws, } -- local jsonconverter = { "value", -- object = lbrace * Cf(Ct("") * V("pair") * (comma * V("pair"))^0,rawset) * rbrace, -- pair = Cg(optionalws * V("string") * optionalws * colon * V("value")), -- array = Ct(lparent * V("value") * (comma * V("value"))^0 * rparent), -- string = jstring, -- value = optionalws * (V("string") + V("object") + V("array") + jtrue + jfalse + jnull + jnumber) * optionalws, -- } -- lpeg.print(jsonconverter) -- size 181 function json.tolua(str) return lpegmatch(jsonconverter,str) end local function tojson(value,t) -- we could optimize #t local kind = type(value) if kind == "table" then local done = false local size = #value if size == 0 then for k, v in next, value do if done then t[#t+1] = "," else t[#t+1] = "{" done = true end t[#t+1] = format("%q:",k) tojson(v,t) end if done then t[#t+1] = "}" else t[#t+1] = "{}" end elseif size == 1 then -- we can optimize for non tables t[#t+1] = "[" tojson(value[1],t) t[#t+1] = "]" else for i=1,size do if done then t[#t+1] = "," else t[#t+1] = "[" done = true end tojson(value[i],t) end t[#t+1] = "]" end elseif kind == "string" then t[#t+1] = format("%q",value) elseif kind == "number" then t[#t+1] = value elseif kind == "boolean" then t[#t+1] = tostring(value) end return t end function json.tostring(value) -- todo optimize for non table local kind = type(value) if kind == "table" then return concat(tojson(value,{}),"") elseif kind == "string" or kind == "number" then return value else return tostring(value) end end -- local tmp = [[ { "a" : true, "b" : [ 123 , 456E-10, { "a" : true, "b" : [ 123 , 456 ] } ] } ]] -- tmp = json.tolua(tmp) -- inspect(tmp) -- tmp = json.tostring(tmp) -- inspect(tmp) -- tmp = json.tolua(tmp) -- inspect(tmp) -- tmp = json.tostring(tmp) -- inspect(tmp) -- inspect(json.tostring(true)) context-2013.05.28.20130704/texmf-dist/tex/context/base/prop-ini.mkiv0000644000175000017500000000425712130411274024321 0ustar norbertnorbert%D \module %D [ file=prop-ini, %D version=2003.04.20, %D title=\CONTEXT\ Property Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Property Macros / Initialization} %D This module is replaced by dedicated mechanisms. Originally properties were %D a sort of attributes in \MKII, but now we do things different anyway. We keep %D a surrogate mechanism around for compatibility reasons but even this will %D become obsolete some day. \unprotect \installcorenamespace{propertytypes} \installcorenamespace{propertydefiners} \installcorenamespace{propertystarters} \def\properties_obsolete_message {\writestatus\m!system{properties are obsolete, use dedicated commands}% \glet\properties_obsolete_message\donothing} \setvalue{\??propertydefiners\v!layer }[#1][#2][#3]{\defineviewerlayer[#1][#3]} \setvalue{\??propertydefiners\s!effect }[#1][#2][#3]{\defineeffect [#1][#3]} \setvalue{\??propertydefiners\v!negative}[#1][#2][#3]{} \unexpanded\def\defineproperty {\dotripleempty\properties_define} \def\properties_define[#1][#2][#3]% {\properties_obsolete_message \setevalue{\??propertytypes#1}{#2}% \getvalue{\??propertydefiners#2}[#1][#2][#3]} \setvalue{\??propertystarters\v!layer }#1{\let\properties_stop\stopviewerlayer\startviewerlayer[#1]} \setvalue{\??propertystarters\s!effect }#1{\let\properties_stop\stopeffect \starteffect [#1]} \setvalue{\??propertystarters\v!negative}#1{\let\properties_stop\stopnegative \startnegative } \unexpanded\def\property[#1]% {\groupedcommand{\properties_start{#1}}\properties_stop} \unexpanded\def\startproperty[#1]% {\properties_start{#1}} \unexpanded\def\stopproperty {\properties_stop} \unexpanded\def\properties_start#1% {\pushmacro\properties_stop \getvalue{\??propertystarters\getvalue{\??propertytypes#1}}{#1}} \unexpanded\def\properties_stop {\properties_stop \popmacro\properties_stop} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context-characters.lmx0000644000175000017500000001276711376503616026241 0ustar norbertnorbert <?lua pv('title') ?>
     
characters     
unicodes     
indices     
fonts     
     
before utf     
after utf     
before hex     
after hex     
after hex     
after dec     
filename     
     
     
     
     
     
     
     

Processed Words


Job Name:     ConTeXt Version:    
context-2013.05.28.20130704/texmf-dist/tex/context/base/context.tmp0000644000175000017500000002742512161703335024112 0ustar norbertnorbert%D \module %D [ file=context, %D version=2008.28.10, % 1995.10.10, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 %D From the next string (which is set by the script that assembles the %D distribution) later on we will calculate a number that can be used %D by use modules to identify the feature level. Starting with version %D 2004.8.30 the low level interface is english. Watch out and adapt %D your styles an modules. % \everypar{\writestatus{!!!!}{some spurious input in line \the\inputlineno}\wait} %D The order of loading will change when all modules have been cleaned %D up and the dependencies are more consistent. \edef\contextformat {\jobname} \edef\contextversion{2013.05.28 00:34} \edef\contextkind {beta} %D For those who want to use this: \let\fmtname \contextformat \let\fmtversion\contextversion %D Loading: \edef\mksuffix {mkiv} \edef\contextmark{MKIV} \ifx\normalinput\undefined \let\normalinput\input \fi \def\loadcorefile#1{\normalinput#1\relax} \def\loadmarkfile#1{\normalinput#1.\mksuffix\relax} \def\loadmkiifile#1{} \def\loadmkivfile#1{\normalinput#1.mkiv\relax} \def\loadmkvifile#1{\normalinput#1.mkvi\relax} %D First we load the system modules. These implement a lot of %D manipulation macros. We start with setting up some basic \TEX\ %D machinery. \loadmarkfile{syst-ini} %D Some checking (more primitives are now defined): \ifdefined\defaultinterface \else \def\defaultinterface {english} \fi %ifdefined\messageinterface \else \let\messageinterface \defaultinterface \fi \ifdefined\defaultlanguagetag \else \def\defaultlanguagetag{en} \fi %D We just quit if new functionality is expected. \ifnum\luatexversion<70 % also change message \writestatus{!!!!}{Your luatex binary is too old, you need at least version 0.70!} \expandafter\end \fi %D There is only this way to pass the version info to \LUA\ (currently). Hm, we could %D now put it into the environment. \newtoks\contextversiontoks \contextversiontoks\expandafter{\contextversion} \newtoks\contextkindtoks \contextkindtoks \expandafter{\contextkind} % \normaleverypar{\wait} % uncomment for test of funny injections %D Now the more fundamental code gets defined. \loadmarkfile{norm-ctx} \loadmarkfile{syst-pln} \loadmarkfile{syst-mes} \loadmarkfile{luat-cod} \loadmarkfile{luat-bas} \loadmarkfile{luat-lib} \loadmarkfile{catc-ini} \loadmarkfile{catc-act} \loadmarkfile{catc-def} \loadmarkfile{catc-ctx} \loadmarkfile{catc-sym} \loadmarkfile{cldf-ini} % From here on we have \unexpanded being \normalprotected, as we already had % \unexpanded long before etex came around. \loadmarkfile{syst-aux} \loadmarkfile{syst-lua} \loadmarkfile{syst-con} \loadmarkfile{syst-fnt} \loadmarkfile{syst-rtp} \loadmkvifile{file-ini} \loadmkvifile{file-res} \loadmkvifile{file-lib} \loadmarkfile{supp-dir} \loadmarkfile{char-ini} \loadmarkfile{char-utf} \loadmarkfile{char-act} \loadmarkfile{mult-ini} \loadmarkfile{mult-sys} \loadmarkfile{mult-aux} \loadmarkfile{mult-def} \loadmarkfile{mult-chk} %loadmarkfile{mult-aux} % moved up \loadmkvifile{mult-dim} \loadmarkfile{cldf-int} % interface \loadmarkfile{luat-ini} \loadmarkfile{toks-ini} \loadmarkfile{attr-ini} \loadmarkfile{core-ini} \loadmarkfile{core-env} \loadmarkfile{layo-ini} \loadmarkfile{node-ini} \loadmarkfile{cldf-bas} % basics / depends on nodes \loadmarkfile{node-fin} \loadmarkfile{node-mig} \loadmarkfile{typo-bld} % par builders %loadmarkfile{node-pag} \loadmarkfile{back-ini} \loadmarkfile{attr-col} \loadmarkfile{attr-lay} \loadmarkfile{attr-neg} \loadmarkfile{attr-eff} \loadmarkfile{attr-mkr} \loadmarkfile{trac-tex} \loadmarkfile{trac-deb} % will move up \loadmarkfile{trac-ctx} % maybe move up %loadmarkfile{blob-ini} % not to be used, we only use a helper \loadmarkfile{supp-box} %loadmarkfile{supp-vis} % replaced by trac-vis %loadmarkfile{supp-fun} % mostly replaced \loadmarkfile{supp-ran} \loadmarkfile{supp-mat} \loadmarkfile{spac-cha} %loadmarkfile{supp-num} % obsolete \loadmarkfile{typo-ini} \loadmkvifile{file-syn} \loadmkvifile{file-mod} \loadmarkfile{core-con} \loadmarkfile{cont-fil} \loadmarkfile{regi-ini} \loadmarkfile{enco-ini} \loadmarkfile{hand-ini} \loadmarkfile{lang-ini} \loadmarkfile{lang-lab} \loadmarkfile{unic-ini} \loadmarkfile{core-uti} \loadmarkfile{core-two} \loadmarkfile{core-dat} \loadmarkfile{colo-ini} \loadmarkfile{colo-grp} % optional \loadmarkfile{colo-ext} \loadmarkfile{node-bck} % overloads anch-pgr (experimental and undocumented) \loadmarkfile{pack-cut} % leftovers from trac-vis \loadmarkfile{lang-mis} \loadmarkfile{lang-url} \loadmarkfile{lang-def} \loadmkvifile{file-job} % why so late? \loadmarkfile{symb-ini} % brrr depends on fonts \loadmarkfile{sort-ini} \loadmkvifile{pack-mis} \loadmarkfile{pack-rul} \loadmarkfile{pack-mrl} \loadmkvifile{pack-bck} \loadmarkfile{pack-fen} \loadmarkfile{lxml-ini} \loadmarkfile{lxml-sor} \loadmkvifile{typo-prc} \loadmkvifile{strc-ini} \loadmarkfile{strc-tag} \loadmarkfile{strc-doc} \loadmarkfile{strc-num} \loadmarkfile{strc-mar} \loadmarkfile{strc-sbe} \loadmkvifile{strc-lst} \loadmarkfile{strc-sec} \loadmarkfile{strc-pag} % hm, depends on core-num \loadmarkfile{strc-ren} \loadmarkfile{strc-xml} \loadmarkfile{strc-def} % might happen later \loadmkvifile{strc-ref} \loadmarkfile{strc-reg} \loadmkvifile{strc-lev} % experiment \loadmarkfile{spac-ali} \loadmarkfile{spac-hor} \loadmarkfile{spac-flr} \loadmarkfile{spac-ver} \loadmarkfile{spac-lin} \loadmarkfile{spac-pag} \loadmarkfile{spac-par} %loadmarkfile{spac-adj} % no longer needed \loadmarkfile{spac-def} \loadmarkfile{spac-grd} \loadmarkfile{anch-pos} \loadmkvifile{scrn-ini} \loadmkvifile{scrn-ref} \loadmarkfile{pack-obj} \loadmkvifile{strc-itm} \loadmkvifile{strc-con} \loadmkvifile{strc-des} \loadmkvifile{strc-enu} \loadmarkfile{strc-ind} \loadmarkfile{strc-lab} \loadmarkfile{strc-syn} \loadmarkfile{core-sys} \loadmarkfile{page-var} \loadmkvifile{page-otr} \loadmarkfile{page-ini} \loadmarkfile{page-ins} \loadmarkfile{page-fac} \loadmarkfile{page-brk} \loadmarkfile{page-col} \loadmarkfile{page-inf} \loadmarkfile{page-grd} \loadmarkfile{page-flt} \loadmarkfile{page-bck} \loadmarkfile{page-not} \loadmarkfile{page-one} \loadmarkfile{page-lay} \loadmkvifile{page-box} \loadmkvifile{page-txt} \loadmarkfile{page-sid} % when \loadmkvifile{strc-flt} \loadmarkfile{page-pst} \loadmkvifile{page-mbk} \loadmarkfile{page-mul} % partly overloaded \loadmarkfile{page-mix} % new \loadmarkfile{page-set} \loadmarkfile{pack-lyr} \loadmarkfile{pack-pos} \loadmkvifile{page-mak} \loadmarkfile{page-lin} \loadmarkfile{page-par} \loadmarkfile{typo-pag} \loadmarkfile{typo-mar} \loadmarkfile{typo-itm} \loadmarkfile{buff-ini} \loadmarkfile{buff-ver} \loadmkvifile{buff-par} \loadmarkfile{buff-imp-tex} % optional as also runtime if not loaded \loadmarkfile{buff-imp-mp} % optional as also runtime if not loaded \loadmarkfile{buff-imp-lua} % optional as also runtime if not loaded \loadmarkfile{buff-imp-xml} % optional as also runtime if not loaded \loadmarkfile{buff-imp-parsed-xml} % optional %loadmarkfile{buff-imp-parsed-lua} % optional \loadmarkfile{strc-blk} \loadmarkfile{page-imp} \loadmkvifile{page-sel} % optional \loadmkvifile{page-inj} % optional \loadmkvifile{scrn-pag} \loadmkvifile{scrn-wid} \loadmkvifile{scrn-but} \loadmkvifile{scrn-bar} \loadmarkfile{page-com} % optional (after scrn-pag) \loadmarkfile{strc-bkm} % bookmarks \loadmarkfile{tabl-com} \loadmarkfile{tabl-pln} \loadmarkfile{tabl-tab} % thrd-tab stripped and merged \loadmarkfile{tabl-tbl} \loadmarkfile{tabl-ntb} \loadmarkfile{tabl-nte} \loadmarkfile{tabl-ltb} \loadmarkfile{tabl-tsp} \loadmkvifile{tabl-xtb} \loadmarkfile{tabl-mis} \loadmarkfile{java-ini} \loadmkvifile{scrn-fld} \loadmkvifile{scrn-hlp} \loadmarkfile{char-enc} % will move up \loadmkvifile{font-lib} % way too late \loadmkvifile{font-fil} \loadmkvifile{font-var} \loadmkvifile{font-fea} \loadmkvifile{font-mat} \loadmkvifile{font-ini} \loadmkvifile{font-sym} \loadmkvifile{font-sty} \loadmkvifile{font-set} \loadmkvifile{font-emp} \loadmarkfile{font-pre} \loadmarkfile{font-unk} \loadmarkfile{font-tra} \loadmarkfile{font-chk} \loadmarkfile{font-uni} \loadmkvifile{font-col} \loadmkvifile{font-gds} \loadmkvifile{font-aux} \loadmarkfile{typo-lan} \loadmarkfile{lxml-css} \loadmarkfile{spac-chr} % depends on fonts \loadmarkfile{blob-ini} % not to be used, we only use a helper \loadmarkfile{trac-vis} \loadmarkfile{trac-jus} \loadmarkfile{typo-cln} \loadmarkfile{typo-spa} \loadmarkfile{typo-krn} \loadmkvifile{typo-itc} \loadmarkfile{typo-dir} \loadmarkfile{typo-brk} \loadmarkfile{typo-cap} \loadmarkfile{typo-dig} \loadmarkfile{typo-rep} \loadmkvifile{typo-txt} \loadmarkfile{typo-par} \loadmkvifile{type-ini} \loadmarkfile{type-set} \loadmarkfile{scrp-ini} \loadmarkfile{lang-wrd} % can be optional (discussion with mm sideeffect) %loadmarkfile{lang-rep} % can be optional (bt 2013 side effect) \loadmarkfile{prop-ini} % only for downward compatibility \loadmarkfile{mlib-ctx} \loadmarkfile{meta-ini} \loadmarkfile{meta-tex} \loadmarkfile{meta-fun} \loadmarkfile{meta-pag} \loadmarkfile{meta-grd} \loadmarkfile{page-mrk} % depends on mp \loadmarkfile{page-flw} \loadmarkfile{page-spr} \loadmarkfile{page-plg} \loadmarkfile{page-str} \loadmarkfile{anch-pgr} % can be moved up (nicer for dependencies) \loadmkvifile{anch-bck} \loadmarkfile{anch-tab} % overloads tabl-tbl \loadmarkfile{anch-bar} %loadmarkfile{anch-snc} % when needed this one will be redone \loadmarkfile{math-ini} \loadmarkfile{math-pln} \loadmarkfile{math-for} \loadmarkfile{math-def} \loadmarkfile{math-ali} %loadmarkfile{math-arr} \loadmkvifile{math-stc} \loadmarkfile{math-frc} \loadmarkfile{math-mis} \loadmarkfile{math-scr} \loadmarkfile{math-int} \loadmarkfile{math-del} \loadmarkfile{math-fen} \loadmarkfile{math-inl} \loadmarkfile{math-dis} %loadmarkfile{math-lan} \loadmarkfile{phys-dim} \loadmarkfile{strc-mat} \loadmarkfile{chem-ini} \loadmarkfile{chem-str} \loadmarkfile{typo-scr} \loadmarkfile{node-rul} \loadmkvifile{font-sol} % font solutions \loadmkvifile{strc-not} \loadmkvifile{strc-lnt} \loadmarkfile{pack-com} \loadmarkfile{typo-del} \loadmarkfile{grph-trf} \loadmarkfile{grph-inc} \loadmarkfile{grph-fig} \loadmarkfile{grph-raw} \loadmarkfile{pack-box} \loadmarkfile{pack-bar} \loadmarkfile{page-app} \loadmarkfile{meta-fig} \loadmarkfile{lang-spa} % will become obsolete \loadmarkfile{bibl-bib} \loadmarkfile{bibl-tra} %loadmarkfile{x-xtag} % no longer preloaded \loadmarkfile{meta-xml} \loadmarkfile{cont-log} \loadmarkfile{task-ini} \loadmarkfile{cldf-ver} % verbatim, this can come late \loadmarkfile{cldf-com} % commands, this can come late \loadmarkfile{core-ctx} % this order might change but we need to check depedencies / move to another namespace \loadmarkfile{core-def} %usemodule[x][res-04] % xml resource libraries %usemodule[x][res-08] % rlx runtime conversion %usemodule[x][res-12] % rli external indentification % now we hook in backend code (needs checking) \loadmarkfile{back-pdf} % actually, this one should load the next three using document.arguments.backend \loadmarkfile{mlib-pdf} \loadmarkfile{mlib-pps} \loadmarkfile{meta-pdf} \loadmarkfile{grph-epd} \loadmarkfile{back-exp} \setupcurrentlanguage[\defaultlanguagetag] \prependtoks \ctxlua{statistics.starttiming(statistics)}% \to \everyjob \appendtoks \ctxlua{statistics.stoptiming(statistics)}% \to \everyjob \appendtoks \ctxlua{statistics.savefmtstatus("\jobname","\contextversion","context.mkiv","\contextkind")}% can become automatic \to \everydump \errorstopmode \dump \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-fnt.lua0000644000175000017500000001715412130411274024111 0ustar norbertnorbertif not modules then modules = { } end modules ['node-fnt'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } if not context then os.exit() end -- generic function in node-dum local next, type = next, type local concat, keys = table.concat, table.keys local nodes, node, fonts = nodes, node, fonts local trace_characters = false trackers.register("nodes.characters", function(v) trace_characters = v end) local trace_fontrun = false trackers.register("nodes.fontrun", function(v) trace_fontrun = v end) local report_fonts = logs.reporter("fonts","processing") local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local otf = fonts.handlers.otf local traverse_id = node.traverse_id local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming local nodecodes = nodes.nodecodes local handlers = nodes.handlers local glyph_code = nodecodes.glyph local setmetatableindex = table.setmetatableindex -- some tests with using an array of dynamics[id] and processes[id] demonstrated -- that there was nothing to gain (unless we also optimize other parts) -- -- maybe getting rid of the intermediate shared can save some time -- potential speedup: check for subtype < 256 so that we can remove that test -- elsewhere, danger: injected nodes will not be dealt with but that does not -- happen often; we could consider processing sublists but that might need more -- checking later on; the current approach also permits variants local run = 0 local setfontdynamics = { } local fontprocesses = { } setmetatableindex(setfontdynamics, function(t,font) local tfmdata = fontdata[font] local shared = tfmdata.shared local v = shared and shared.dynamics and otf.setdynamics or false t[font] = v return v end) setmetatableindex(fontprocesses, function(t,font) local tfmdata = fontdata[font] local shared = tfmdata.shared -- we need to check shared, only when same features local processes = shared and shared.processes if processes and #processes > 0 then t[font] = processes return processes else t[font] = false return false end end) fonts.hashes.setdynamics = setfontdynamics fonts.hashes.processes = fontprocesses function handlers.characters(head) -- either next or not, but definitely no already processed list starttiming(nodes) local usedfonts, attrfonts, done = { }, { }, false local a, u, prevfont, prevattr = 0, 0, nil, 0 if trace_fontrun then run = run + 1 report_fonts() report_fonts("checking node list, run %s",run) report_fonts() local n = head while n do local id = n.id if id == glyph_code then local font = n.font local attr = n[0] or 0 report_fonts("font %03i, dynamic %03i, glyph %s",font,attr,utf.char(n.char)) else report_fonts("[%s]",nodecodes[n.id]) end n = n.next end end for n in traverse_id(glyph_code,head) do -- if n.subtype<256 then -- all are 1 local font = n.font local attr = n[0] or 0 -- zero attribute is reserved for fonts in context if font ~= prevfont or attr ~= prevattr then if attr > 0 then local used = attrfonts[font] if not used then used = { } attrfonts[font] = used end if not used[attr] then local sd = setfontdynamics[font] if sd then -- always true ? local d = sd(font,attr) -- can we cache this one? if d then used[attr] = d a = a + 1 else -- can't happen ... otherwise best use nil/false distinction end end end else local used = usedfonts[font] if not used then local fp = fontprocesses[font] if fp then usedfonts[font] = fp u = u + 1 else -- can't happen ... otherwise best use nil/false distinction end end end prevfont = font prevattr = attr end -- end end if trace_fontrun then report_fonts() report_fonts("statics : %s",(u > 0 and concat(keys(usedfonts)," ")) or "none") report_fonts("dynamics: %s",(a > 0 and concat(keys(attrfonts)," ")) or "none") report_fonts() end if u == 0 then -- skip elseif u == 1 then local font, processors = next(usedfonts) local n = #processors if n > 0 then local h, d = processors[1](head,font,0) head = h or head done = done or d if n > 1 then for i=2,n do local h, d = processors[i](head,font,0) head = h or head done = done or d end end end else for font, processors in next, usedfonts do local n = #processors local h, d = processors[1](head,font,0) head = h or head done = done or d if n > 1 then for i=2,n do local h, d = processors[i](head,font,0) head = h or head done = done or d end end end end if a == 0 then -- skip elseif a == 1 then local font, dynamics = next(attrfonts) for attribute, processors in next, dynamics do -- attr can switch in between local n = #processors if n == 0 then report_fonts("no processors associated with dynamic %s",attribute) else local h, d = processors[1](head,font,attribute) head = h or head done = done or d if n > 1 then for i=2,n do local h, d = processors[i](head,font,attribute) head = h or head done = done or d end end end end else for font, dynamics in next, attrfonts do for attribute, processors in next, dynamics do -- attr can switch in between local n = #processors if n == 0 then report_fonts("no processors associated with dynamic %s",attribute) else local h, d = processors[1](head,font,attribute) head = h or head done = done or d if n > 1 then for i=2,n do local h, d = processors[i](head,font,attribute) head = h or head done = done or d end end end end end end stoptiming(nodes) if trace_characters then nodes.report(head,done) end return head, true end handlers.protectglyphs = node.protect_glyphs handlers.unprotectglyphs = node.unprotect_glyphs context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-snc.mkiv0000644000175000017500000001501611754241457024270 0ustar norbertnorbert%D \module %D [ file=anch-snc, %D version=2003.12.01, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Synchronization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % this can be optimized (will do when used again) \writestatus{loading}{ConTeXt Anchoring Macros / Synchronization} \unprotect \ifx\s!num \undefined \def\s!num {num} \fi \ifx\s!set \undefined \def\s!set {set} \fi \ifx\s!reset \undefined \def\s!reset {reset} \fi \ifx\s!preset \undefined \def\s!preset {preset} \fi \ifx\s!syncpos\undefined \def\s!syncpos{syncpos} \fi \unexpanded\def\definesyncpositions[#1]% {\ifcsname\s!num:\s!syncpos:#1\endcsname \else \global\let\flushsyncpositions\doflushsyncpositions % only when used \global\let\flushsyncresets \doflushsyncresets \global\let\flushsyncpresets \doflushsyncpresets \expandafter\newcount\csname\s!num:\s!syncpos:#1\endcsname \doglobal\appendtoksonce\csname\s!reset :\s!syncpos:#1\endcsname\to\resetsyncpositions \doglobal\appendtoksonce\csname\s!preset:\s!syncpos:#1\endcsname\to\presetsyncpositions % to be tested: % \doglobal\expandafter\appendtoksonce\csname\s!reset :\s!syncpos:#1\endcsname\to\resetsyncpositions % \doglobal\expandafter\appendtoksonce\csname\s!preset:\s!syncpos:#1\endcsname\to\presetsyncpositions \setgvalue{\s!syncpos:#1}{sync_n[#1] := 0 ;}% \setgvalue{\s!set:\s!syncpos:#1}{\dosetsyncpositions{#1}}% \fi} \def\syncposition {\dodoubleempty\dosyncposition} \def\dosyncposition[#1][#2]% {\letgvalue{\s!reset :\s!syncpos:#1}\relax \letgvalue{\s!preset:\s!syncpos:#1}\relax \dontleavehmode \dodosyncposition{#1}{#2}\s!set \ignorespaces} \def\doifelselastsyncposition#1#2% {\doifelse{\lastsyncclass\lastsyncposition}{#1#2}} \def\dodosyncposition#1#2#3% {\letgvalue{\s!reset:\s!syncpos:#1}\relax \letgvalue{\s!preset:\s!syncpos:#1}\relax \ifcsname\s!syncpos:#1\endcsname \global\advance\csname\s!num:\s!syncpos:#1\endcsname\plusone \setsyncpositions{#1}% % option: geen w/h, alleen p 0 0 0 data \setpositionplus{\s!syncpos:#1:\the\csname\s!num:\s!syncpos:#1\endcsname}{#2}\hbox{\strut}% \else \strut \fi} \def\setsyncpositions#1% {\enabletextarearegistration \getvalue {\s!set:\s!syncpos:#1}% \letgvalue{\s!set:\s!syncpos:#1}\relax} \def\dosetsyncpositions#1% {\startnointerference % removing out of sync can best be done in mp \!!dimena\maxdimen \!!counta\zerocount \!!countc\zerocount \doloop {\doifpositionelse{\s!syncpos:#1:\recurselevel} {\!!dimenb\MPy{\s!syncpos:#1:\recurselevel}\relax \!!countb\MPp{\s!syncpos:#1:\recurselevel}\relax \ifnum\!!countb=\!!counta % same page \ifdim\!!dimenb>\!!dimena \donefalse % out of order nodes \else \donetrue % nodes in order \fi \else \donetrue % different page \fi \ifdone \!!counta\!!countb \!!dimena\!!dimenb \advance\!!countc\plusone \edef\!!stringa{[#1][\the\!!countc]:=}% \edef\!!stringc{\s!syncpos:#1:\the\!!countc}% \edef\!!stringd{\MPplus\!!stringc{1}{0}}% \setxvalue{\s!syncpos:#1}% {\getsyncpositions{#1}% sync_p \!!stringa \MPp \!!stringc ; sync_xy\!!stringa \MPxy\!!stringc ; sync_w \!!stringa \MPw \!!stringc ; sync_h \!!stringa \MPh \!!stringc ; sync_d \!!stringa \MPd \!!stringc ; \ifx\!!stringd\empty \else sync_t \!!stringa \MPplus\!!stringc{1}{0} ; \fi}% \fi} {\setxvalue{\s!syncpos:#1}% {\getsyncpositions{#1}% sync_n[#1] := \the\!!countc ;} \exitloop}}% \stopnointerference} \def\getsyncpositions#1% {\getvalue{\s!syncpos:#1}} \newtoks\resetsyncpositions \newtoks\presetsyncpositions \def\resyncposition {\dodoubleargument\doresyncposition} \def\presyncposition{\dodoubleargument\dopresyncposition} \def\dodoresyncposition #1#2{\dodosyncposition{#1}{#2}\s!reset} \def\dodopresyncposition#1#2{\dodosyncposition{#1}{#2}\s!preset} \def\doresyncposition [#1][#2]{\setxvalue{\s!reset :\s!syncpos:#1}{\noexpand\dodoresyncposition{#1}{#2}}} \def\dopresyncposition[#1][#2]{\setxvalue{\s!preset:\s!syncpos:#1}{\noexpand\dodopresyncposition{#1}{#2}}} \let\flushsyncpositions\relax \def\doflushsyncpositions % this order ! {\begingroup \the\presetsyncpositions \the\resetsyncpositions \endgroup} \def\flushsyncxxsets#1% {\begingroup \setbox\scratchbox\hbox{\the#1}% \ifvoid\scratchbox\else \prewordbreak %\let\prewordbreak\relax % only once \smashbox\scratchbox \box\scratchbox \fi \endgroup} \let\flushsyncresets \relax \let\flushsyncpresets\relax \def\doflushsyncresets {\flushsyncxxsets\resetsyncpositions } \def\doflushsyncpresets{\flushsyncxxsets\presetsyncpositions} % \appendtoks \flushsyncpositions \to \everypar % \appendtoks \flushsyncpositions \to \everyheadstart % \explicitneverypar -> in grid snapper, eerst testen % % \appendtoks \flushsyncpositions \to \neverypar \protect \continueifinputfile{anch-snc.mkiv} \starttext \setupbodyfont[dejavu] \definesyncpositions[1] \startuseMPgraphic{sync} if unknown context_abck : input mp-abck.mpiv ; fi ; StartPage ; \getsyncpositions{1} ; SyncThreshold := 2LineHeight ; SyncLeftOffset := -.5LeftMarginDistance ; % SetSyncThreshold(1,3,3LineHeight) ; SyncWidth := - (BackSpace + SyncLeftOffset) ; SetSyncColor(1,1,\MPcolor{red}) ; SetSyncColor(1,2,\MPcolor{green}) ; SetSyncColor(1,3,\MPcolor{blue}) ; SetSyncColor(1,4,\MPcolor{yellow}) ; PrepareSyncTasks(1,true,true,false) ; for i = 1 upto NOfSyncPaths : fill SyncPaths[i] withcolor TheSyncColor(CurrentSyncClass,sync_t[CurrentSyncClass][SyncTasks[i]]) ; endfor ; setbounds currentpicture to Page ; StopPage ; \stopuseMPgraphic \defineoverlay[tempoverlay][\useMPgraphic{sync}] \setupbackgrounds[page][background=tempoverlay] \dorecurse {10} { \startchapter[title={Test #1}] \syncposition[1][1] \dorecurse{10}{\input ward \endgraf} \syncposition[1][2] \dorecurse {4}{\input ward \endgraf} \syncposition[1][3] \dorecurse {7}{\input ward \endgraf} \syncposition[1][4] \dorecurse {3}{\input ward \endgraf} \stopchapter } \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-imp-xwi.mkiv0000644000175000017500000001723411754241457025126 0ustar norbertnorbert%D \module %D [ file=colo-xwi, %D version=1995.01.01, %D title=\CONTEXT\ Color Macros, %D subtitle=X Windows, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I've forgotten where I got these definitions from, but maybe %D they can be of use. \definecolor [aliceblue] [r=0.94,g=0.97,b=1.00] \definecolor [antiquewhite] [r=0.98,g=0.92,b=0.84] \definecolor [aquamarine] [r=0.50,g=1.00,b=0.83] \definecolor [azure] [r=0.94,g=1.00,b=1.00] \definecolor [beige] [r=0.96,g=0.96,b=0.86] \definecolor [bisque] [r=1.00,g=0.89,b=0.77] \definecolor [black] [s=0] % [r=0.00,g=0.00,b=0.00] \definecolor [blanchedalmond] [r=1.00,g=0.92,b=0.80] \definecolor [blue] [r=0.00,g=0.00,b=1.00] \definecolor [blueviolet] [r=0.54,g=0.17,b=0.89] \definecolor [brown] [r=0.65,g=0.16,b=0.16] \definecolor [burlywood] [r=0.87,g=0.72,b=0.53] \definecolor [cadetblue] [r=0.37,g=0.62,b=0.63] \definecolor [chartreuse] [r=0.50,g=1.00,b=0.00] \definecolor [chocolate] [r=0.82,g=0.41,b=0.12] \definecolor [coral] [r=1.00,g=0.50,b=0.31] \definecolor [cornflowerblue] [r=0.39,g=0.58,b=0.93] \definecolor [cornsilk] [r=1.00,g=0.97,b=0.86] \definecolor [cyan] [r=0.00,g=1.00,b=1.00] \definecolor [darkgoldenrod] [r=0.72,g=0.53,b=0.04] \definecolor [darkgreen] [r=0.00,g=0.39,b=0.00] \definecolor [darkkhaki] [r=0.74,g=0.72,b=0.42] \definecolor [darkolivegreen] [r=0.33,g=0.42,b=0.18] \definecolor [darkorange] [r=1.00,g=0.55,b=0.00] \definecolor [darkorchid] [r=0.60,g=0.20,b=0.80] \definecolor [darksalmon] [r=0.91,g=0.59,b=0.48] \definecolor [darkseagreen] [r=0.56,g=0.74,b=0.56] \definecolor [darkslateblue] [r=0.28,g=0.24,b=0.55] \definecolor [darkturquoise] [r=0.00,g=0.81,b=0.82] \definecolor [darkviolet] [r=0.58,g=0.00,b=0.83] \definecolor [deeppink] [r=1.00,g=0.08,b=0.58] \definecolor [deepskyblue] [r=0.00,g=0.75,b=1.00] \definecolor [dodgerblue] [r=0.12,g=0.56,b=1.00] \definecolor [firebrick] [r=0.70,g=0.13,b=0.13] \definecolor [floralwhite] [r=1.00,g=0.98,b=0.94] \definecolor [forestgreen] [r=0.13,g=0.55,b=0.13] \definecolor [gainsboro] [r=0.86,g=0.86,b=0.86] \definecolor [ghostwhite] [r=0.97,g=0.97,b=1.00] \definecolor [gold] [r=1.00,g=0.84,b=0.00] \definecolor [goldenrod] [r=0.85,g=0.65,b=0.13] \definecolor [green] [r=0.00,g=1.00,b=0.00] \definecolor [greenyellow] [r=0.68,g=1.00,b=0.18] \definecolor [honeydew] [r=0.94,g=1.00,b=0.94] \definecolor [hotpink] [r=1.00,g=0.41,b=0.71] \definecolor [indianred] [r=0.80,g=0.36,b=0.36] \definecolor [ivory] [r=1.00,g=1.00,b=0.94] \definecolor [khaki] [r=0.94,g=0.90,b=0.55] \definecolor [lavender] [r=0.90,g=0.90,b=0.98] \definecolor [lavenderblush] [r=1.00,g=0.94,b=0.96] \definecolor [lawngreen] [r=0.49,g=0.99,b=0.00] \definecolor [lemonchiffon] [r=1.00,g=0.98,b=0.80] \definecolor [lightblue] [r=0.68,g=0.85,b=0.90] \definecolor [lightcoral] [r=0.94,g=0.50,b=0.50] \definecolor [lightcyan] [r=0.88,g=1.00,b=1.00] \definecolor [lightgoldenrod] [r=0.93,g=0.87,b=0.51] \definecolor [lightgoldenrodyellow] [r=0.98,g=0.98,b=0.82] \definecolor [lightpink] [r=1.00,g=0.71,b=0.76] \definecolor [lightsalmon] [r=1.00,g=0.63,b=0.48] \definecolor [lightseagreen] [r=0.13,g=0.70,b=0.67] \definecolor [lightskyblue] [r=0.53,g=0.81,b=0.98] \definecolor [lightslateblue] [r=0.52,g=0.44,b=1.00] \definecolor [lightsteelblue] [r=0.69,g=0.77,b=0.87] \definecolor [lightyellow] [r=1.00,g=1.00,b=0.88] \definecolor [limegreen] [r=0.20,g=0.80,b=0.20] \definecolor [linen] [r=0.98,g=0.94,b=0.90] \definecolor [magenta] [r=1.00,g=0.00,b=1.00] \definecolor [maroon] [r=0.69,g=0.19,b=0.38] \definecolor [mediumaquamarine] [r=0.40,g=0.80,b=0.67] \definecolor [mediumblue] [r=0.00,g=0.00,b=0.80] \definecolor [mediumorchid] [r=0.73,g=0.33,b=0.83] \definecolor [mediumpurple] [r=0.58,g=0.44,b=0.86] \definecolor [mediumseagreen] [r=0.24,g=0.70,b=0.44] \definecolor [mediumslateblue] [r=0.48,g=0.41,b=0.93] \definecolor [mediumspringgreen] [r=0.00,g=0.98,b=0.60] \definecolor [mediumturquoise] [r=0.28,g=0.82,b=0.80] \definecolor [mediumvioletred] [r=0.78,g=0.08,b=0.52] \definecolor [midnightblue] [r=0.10,g=0.10,b=0.44] \definecolor [mintcream] [r=0.96,g=1.00,b=0.98] \definecolor [mistyrose] [r=1.00,g=0.89,b=0.88] \definecolor [moccasin] [r=1.00,g=0.89,b=0.71] \definecolor [navajowhite] [r=1.00,g=0.87,b=0.68] \definecolor [navy] [r=0.00,g=0.00,b=0.50] \definecolor [navyblue] [r=0.00,g=0.00,b=0.50] \definecolor [oldlace] [r=0.99,g=0.96,b=0.90] \definecolor [olivedrab] [r=0.42,g=0.56,b=0.14] \definecolor [orange] [r=1.00,g=0.65,b=0.00] \definecolor [orangered] [r=1.00,g=0.27,b=0.00] \definecolor [orchid] [r=0.85,g=0.44,b=0.84] \definecolor [palegoldenrod] [r=0.93,g=0.91,b=0.67] \definecolor [palegreen] [r=0.60,g=0.98,b=0.60] \definecolor [paleturquoise] [r=0.69,g=0.93,b=0.93] \definecolor [palevioletred] [r=0.86,g=0.44,b=0.58] \definecolor [papayawhip] [r=1.00,g=0.94,b=0.84] \definecolor [peachpuff] [r=1.00,g=0.85,b=0.73] \definecolor [peru] [r=0.80,g=0.52,b=0.25] \definecolor [pink] [r=1.00,g=0.75,b=0.80] \definecolor [plum] [r=0.87,g=0.63,b=0.87] \definecolor [powderblue] [r=0.69,g=0.88,b=0.90] \definecolor [purple] [r=0.63,g=0.13,b=0.94] \definecolor [red ] [r=1.00,g=0.00,b=0.00] \definecolor [rosybrown] [r=0.74,g=0.56,b=0.56] \definecolor [royalblue] [r=0.25,g=0.41,b=0.88] \definecolor [saddlebrown] [r=0.55,g=0.27,b=0.07] \definecolor [salmon] [r=0.98,g=0.50,b=0.45] \definecolor [sandybrown] [r=0.96,g=0.64,b=0.38] \definecolor [seagreen] [r=0.18,g=0.55,b=0.34] \definecolor [seashell] [r=1.00,g=0.96,b=0.93] \definecolor [sienna] [r=0.63,g=0.32,b=0.18] \definecolor [skyblue] [r=0.53,g=0.81,b=0.92] \definecolor [slateblue] [r=0.42,g=0.35,b=0.80] \definecolor [snow] [r=1.00,g=0.98,b=0.98] \definecolor [springgreen] [r=0.00,g=1.00,b=0.50] \definecolor [steelblue] [r=0.27,g=0.51,b=0.71] \definecolor [tan ] [r=0.82,g=0.71,b=0.55] \definecolor [thistle] [r=0.85,g=0.75,b=0.85] \definecolor [tomato] [r=1.00,g=0.39,b=0.28] \definecolor [turquoise] [r=0.25,g=0.88,b=0.82] \definecolor [violet] [r=0.93,g=0.51,b=0.93] \definecolor [violetred] [r=0.82,g=0.13,b=0.56] \definecolor [wheat] [r=0.96,g=0.87,b=0.70] \definecolor [white] [r=1.00,g=1.00,b=1.00] \definecolor [whitesmoke] [s=0.96] % [r=0.96,g=0.96,b=0.96] \definecolor [yellow] [r=1.00,g=1.00,b=0.00] \definecolor [yellowgreen] [r=0.60,g=0.80,b=0.20] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fig-00.dtd0000644000175000017500000000144610526734267023636 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-tex.mkii0000644000175000017500000002107311754241457024315 0ustar norbertnorbert%D \module %D [ file=verb-tex, %D version=1997.12.22, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty \TEX\ verbatim, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Verbatim Macros / Pretty TEX Verbatim} %D The original module \type{supp-ver} had the \TEX\ %D interpreter built in. The current implementation is more %D natural and less complicated. %D \startTEX %D \definetyping[niceTEX][option=TEX,paletpalet=graypretty] %D %D \startniceTEX %D \message{A vivid look at TeX} %D \stopniceTEX %D \stopTEX \unprotect %D \macros %D {ifsplitTEXparameters} %D %D The mechanism described here, is meant to be used with %D color. It is nevertheless possible to use different fonts %D instead of distinctive colors. When using color, it's better %D to end parameter mode after the \type{#}. When on the %D other hand we use a slanted typeface for the hashmark, then %D a slanted number looks better. \doglobal\newif\ifsplitTEXparameters \global\splitTEXparameterstrue %D \macros %D {ifsplitTEXcontrols} %D %D With \type{\splittexcontrols} we can influence the way %D control characters are processed in macro names. By default, %D the \type{^^} part is uncolored. When this boolean is set to %D false, they get the same color as the other characters. \doglobal\newif\ifsplitTEXcontrols \global\splitTEXcontrolstrue %D The next boolean is used for internal purposes only and %D keeps track of the length of the name. Because two||character %D sequences starting with a backslash are always seen as a %D command. \doglobal\newif\iffirstinTEXcommand %D We use a maximum of four colors because more colors will %D distract too much. In the following table we show the %D logical names of the colors, their color and \cap{RGB} values. %D %D \placetable{geen} %D \starttable[|l|l|c|c|c|c|] %D \HL %D \FC\bf identifier \MC\bf color \MC\bf r \MC\bf g \MC\bf b \MC\bf bw \LC\SR %D \HL %D \FC prettyone \MC red \MC 0.9 \MC 0.0 \MC 0.0 \MC 0.30 \LC\FR %D \FC prettytwo \MC green \MC 0.0 \MC 0.8 \MC 0.0 \MC 0.45 \LC\MR %D \FC prettythree \MC yellow \MC 0.0 \MC 0.0 \MC 0.9 \MC 0.60 \LC\MR %D \FC prettyfour \MC blue \MC 0.8 \MC 0.8 \MC 0.6 \MC 0.75 \LC\LR %D \HL %D \stoptable %D %D Outside \CONTEXT\ these colors are defined in %D \type{verb-ini}, in \CONTEXT\ their definitions can be found %D in \type{core-ver}, where in fact we use the color palet %D mechanism. That way we can use different schemes i a quite %D natural way. \gdef\setupprettyTEXtype {\def\prettyidentifier{TEX}% \global\inTEXcommandfalse \global\firstinTEXcommandfalse \global\inTEXparameterfalse \TEXsetcontrols \TEXsethandlers \TEXsetspecials} \gdef\TEXsetcontrols {\saveprettycontrols \everyprettyend {\TEXendofcommand \TEXendofparameter}% \def\obeyedspace {\TEXendofcommand \TEXendofparameter \oldobeyedspace}% \def\flushrestofverbatimline {\TEXendofcommand \TEXendofparameter}% \let\obeytabs=\ignoretabs} \gdef\TEXsetspecials {\setpretty`\$=1 \setpretty`\{=1 \setpretty`\}=1 \setpretty`\[=2 \setpretty`\]=2 \setpretty`\(=2 \setpretty`\)=2 \setpretty`\==2 \setpretty`\<=2 \setpretty`\>=2 \setpretty`\"=2 \setpretty`\-=3 \setpretty`\+=3 \setpretty`\/=3 \setpretty`\|=3 \setpretty`\%=3 \setpretty`\'=3 \setpretty`\`=3 \setpretty`\_=3 \setpretty`\&=3 \setpretty`\~=3 \setpretty`\.=4 \setpretty`\,=4 \setpretty`\:=4 \setpretty`\;=4 \setpretty`\*=4 \setpretty`\#=5 \setpretty`\1=6 \setpretty`\2=6 \setpretty`\3=6 \setpretty`\4=6 \setpretty`\5=6 \setpretty`\6=6 \setpretty`\7=6 \setpretty`\8=6 \setpretty`\9=6 \setpretty`\0=6 \setpretty`\\=7 \setpretty`\^=8 \setpretty`\A=9 \setpretty`\B=9 \setpretty`\C=9 \setpretty`\D=9 \setpretty`\E=9 \setpretty`\F=9 \setpretty`\G=9 \setpretty`\H=9 \setpretty`\I=9 \setpretty`\J=9 \setpretty`\K=9 \setpretty`\L=9 \setpretty`\M=9 \setpretty`\N=9 \setpretty`\O=9 \setpretty`\P=9 \setpretty`\Q=9 \setpretty`\R=9 \setpretty`\S=9 \setpretty`\T=9 \setpretty`\U=9 \setpretty`\V=9 \setpretty`\W=9 \setpretty`\X=9 \setpretty`\Y=9 \setpretty`\Z=9 \setpretty`\a=9 \setpretty`\b=9 \setpretty`\c=9 \setpretty`\d=9 \setpretty`\e=9 \setpretty`\f=9 \setpretty`\g=9 \setpretty`\h=9 \setpretty`\i=9 \setpretty`\j=9 \setpretty`\k=9 \setpretty`\l=9 \setpretty`\m=9 \setpretty`\n=9 \setpretty`\o=9 \setpretty`\p=9 \setpretty`\q=9 \setpretty`\r=9 \setpretty`\s=9 \setpretty`\t=9 \setpretty`\u=9 \setpretty`\v=9 \setpretty`\w=9 \setpretty`\x=9 \setpretty`\y=9 \setpretty`\z=9 \setpretty`\?=9 \setpretty`\!=9 \setpretty`\@=9 \setpretty`\%=0 } \gdef\TEXsethandlers {\installprettyhandler 1 \TEXtypeone \installprettyhandler 2 \TEXtypetwo \installprettyhandler 3 \TEXtypethree \installprettyhandler 4 \TEXtypefour \installprettyhandler 5 \TEXtypefive \installprettyhandler 6 \TEXtypesix \installprettyhandler 7 \TEXtypeseven \installprettyhandler 8 \TEXtypeeight \installprettyhandler 9 \TEXtypenine \installprettyhandler 0 \TEXtypezero} \doglobal\newif\ifinTEXcommand \doglobal\newif\ifinTEXparameter \gdef\TEXbeginofcommand {\TEXendofparameter \ifinTEXcommand \else \global\inTEXcommandtrue \global\firstinTEXcommandtrue \beginofpretty[\!!prettytwo]% \fi} \gdef\TEXendofcommand {\ifinTEXcommand \endofpretty \global\inTEXcommandfalse \global\firstinTEXcommandfalse \fi} \gdef\TEXbeginofparameter {\TEXendofcommand \ifinTEXparameter \else \global\inTEXparametertrue \beginofpretty[\!!prettythree]% \fi} \gdef\TEXendofparameter {\ifinTEXparameter \endofpretty \global\inTEXparameterfalse \fi} \gdef\ifnotfirstinTEXcommand#1 {\iffirstinTEXcommand \getpretty{#1}% \TEXendofcommand \else} \gdef\TEXtypeone#1% {\ifnotfirstinTEXcommand#1 \TEXendofcommand \TEXendofparameter \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi} \gdef\TEXtypetwo#1% {\ifnotfirstinTEXcommand#1 \TEXendofcommand \TEXendofparameter \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi} \gdef\TEXtypethree#1% {\ifnotfirstinTEXcommand#1 \TEXendofcommand \TEXendofparameter \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi} \gdef\TEXtypefour#1% {\ifnotfirstinTEXcommand#1 \TEXendofcommand \TEXendofparameter \getpretty{#1}% \fi} \gdef\TEXtypefive#1% {\ifnotfirstinTEXcommand#1 \TEXbeginofparameter \getpretty{#1}% \fi} \gdef\TEXtypesix#1% {\ifnotfirstinTEXcommand#1 \ifinTEXparameter \ifsplitTEXparameters \TEXendofparameter \getpretty{#1}% \else \getpretty{#1}% \TEXendofparameter \fi \else \TEXendofcommand \getpretty{#1}% \fi \fi} \gdef\TEXtypeseven#1% {\ifnotfirstinTEXcommand#1 \TEXbeginofcommand \getpretty{#1}% \fi} \gdef\TEXtypeeightA#1#2% {\getprettydata{#2}% \ifnum\prettytype=80 \TEXendofparameter \ifsplitTEXcontrols \ifinTEXcommand \def\next{\TEXendofcommand\getpretty{#1}\getpretty{#1}\TEXbeginofcommand}% \else \def\next{\getpretty{#1}\getpretty{#1}}% \fi \else \def\next{\getpretty{#1}\getpretty{#1}}% \fi \else \def\next{\TEXtypeeightB{#1}#2}% \fi \next} \gdef\TEXtypeeightB {\TEXendofparameter \ifinTEXcommand \firstinTEXcommandfalse \expandafter\getpretty \else \expandafter\TEXtypethree \fi} \gdef\TEXtypeeight {\handlenextnextpretty\TEXtypeeightA\TEXtypeeightB} \gdef\TEXtypenine {\TEXendofparameter \global\firstinTEXcommandfalse \getpretty} %\gdef\TEXtypezero % {\disableprettyafterwards % only when enabled of course % \ifnewpretty\expandafter\handlenewpretty\fi\TEXtypethree} \long\gdef\naturalTEXtext#1#2\relax% local alternative for \naturaltextext {\convertargument#2\to\ascii \doifinstringelse{\letterpercent}{\ascii} {\long\def\next{\TEXtypethree{#1}#2\relax}} %{\long\def\next{\bgroup\prettynaturalfont\restorecatcodes\scantokens{\ignorespaces#2}\egroup}}% {\long\def\next{\bgroup\prettynaturalfont{\restorecatcodes\scantokens{\ignorespaces#2}}\egroup}}% \next} \gdef\TEXtypezero {\ifnaturaltextext \expandafter\naturalTEXtext \else \disableprettyafterwards % only when enabled of course \expandafter\handlenewpretty\expandafter\TEXtypethree \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-mkr.mkiv0000644000175000017500000000151712130411274024321 0ustar norbertnorbert%D \module %D [ file=attr-mkr, %D version=2013.01.09, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Markers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Attribute Macros / Markers} \unprotect \registerctxluafile{attr-mkr}{1.001} \unexpanded\def\definemarker [#1]{\defineattribute[\s!marker:#1]} \unexpanded\def\setmarker [#1]#2[#3]{\dosetattribute{\s!marker:#1}{#3}} \unexpanded\def\resetmarker [#1]{\dogetattribute{\s!marker:#1}} \def\boxmarker #1#2{attr \numexpr\dogetattributeid{\s!marker:#1}\numexpr \numexpr#2\relax} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-stk.mkii0000644000175000017500000002024511754241457024323 0ustar norbertnorbert%D \module %D [ file=xtag-exp, %D version=2006.01.19, %D title=\CONTEXT\ XML Macros, %D subtitle=Stacking Data, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Stacks} %D This module is experimental. Don't use it (yet). It needs a %D clean-up. The stack handler is used in the third MathML renderer. \unprotect \ifx\XMLRtoks \undefined \newtoks \XMLRtoks \fi \ifx\XMLstacklevel\undefined \newcount\XMLstacklevel \fi \def\@@xmlstack{xmlstack} \let\XMLstackid\empty \def\resetXMLelements {\XMLstacklevel\zerocount} \def\startsavingXMLelements % maybe something with \ignorespaces \\removeunwantedspaces {\XMLstacklevel\zerocount \let\normalexecuteXMLelement\executeXMLelement \def\executeXMLelement{\csname\@@XMLelement:\@@xmlstack\ifcase\kindofXMLelement\or\or\or/\fi\endcsname}} \def\stopsavingXMLelements {\let\executeXMLelement\normalexecuteXMLelement} \defineXMLnestedenvironmentsave [\@@xmlstack] {} {\pushXMLdataonstack} \startXMLmapping[xmlstack:test] \defineXMLnestedenvironmentsave [\@@xmlstack] {} {\pushXMLnameonstack} % in mathml handler: % % \defineXMLnested % [apply] % {\startsavingXMLelements} % {\stopsavingXMLelements} \stopXMLmapping \def\pushXMLdataonstack {\advance\XMLstacklevel\plusone \letvalue {\@@xmlstack:n:\XMLstackid:\number\XMLstacklevel}\currentXMLelement \saveXMLdata {\@@xmlstack:t:\XMLstackid:\number\XMLstacklevel} \@@xmlstack \saveXMLdatainelement{\@@xmlstack:d:\XMLstackid:\number\XMLstacklevel}\currentXMLelement\@@xmlstack} \def\pushXMLnameonstack {\advance\XMLstacklevel\plusone \letvalue {\@@xmlstack:n:\XMLstackid:\number\XMLstacklevel}\currentXMLelement} \def\eraseXMLdataonstack#1% {\letvalue{\@@xmlstack:n:\XMLstackid:\number#1}\empty \XMLerase{\@@xmlstack:t:\XMLstackid:\number#1}% \XMLerase{\@@xmlstack:d:\XMLstackid:\number#1}} \def\getXMLstackdata{\getXMLstackiddata\XMLstackid} \def\getXMLstackname{\getXMLstackidname\XMLstackid} \def\getXMLstacktext{\getXMLstackidtext\XMLstackid} \def\getXMLstackiddata#1#2{\flushXMLelement{\@@xmlstack:d:#1:\ifnum#2>\XMLstacklevel\else\number#2\fi}} \def\getXMLstackidname#1#2{\getvalue {\@@xmlstack:n:#1:\ifnum#2>\XMLstacklevel\else\number#2\fi}} \def\getXMLstackidtext#1#2{\flushXMLelement{\@@xmlstack:t:#1:\ifnum#2>\XMLstacklevel\else\number#2\fi}} \def\rawXMLstackdata{\rawXMLstackiddata\XMLstackid} \def\rawXMLstackname{\rawXMLstackidname\XMLstackid} \def\rawXMLstacktext{\rawXMLstackidtext\XMLstackid} \def\rawXMLstackiddata#1#2{\flushXMLelement{\@@xmlstack:d:#1:\number#2}} \def\rawXMLstackidname#1#2{\getvalue {\@@xmlstack:n:#1:\number#2}} \def\rawXMLstackidtext#1#2{\flushXMLelement{\@@xmlstack:t:#1:\number#2}} \def\defXMLstackiddata#1#2#3% {\defXMLelement#1{\@@xmlstack:d:#2:\ifnum#3>\XMLstacklevel\else\number#3\fi}} \def\defXMLstackdata#1% #2 {\defXMLstackiddata#1\XMLstackid} \def\showXMLstacknames {\hbox{[\space\dorecurse\XMLstacklevel{\recurselevel:\getXMLstackname\recurselevel\space}]}} \def\flushXMLstackfrom#1% {\dostepwiserecurse{#1}\XMLstacklevel\plusone {\getXMLstackdata\recurselevel}} \def\flushXMLstackwith#1#2% {\dostepwiserecurse{#1}\XMLstacklevel\plusone {\relax\ifnum\recurselevel>#1\relax#2\fi \getXMLstackdata\recurselevel}} \def\flushXMLnamedstackwith#1#2#3% {\dostepwiserecurse{#1}\XMLstacklevel\plusone {\expanded{\doifinset{\getXMLstackname\recurselevel}{#2}} {\ifnum\recurselevel>#1\relax#3\fi \getXMLstackdata\recurselevel}}} \def\countXMLnamedstack#1% todo: \nofXMLchildren ! ! ! ! ! {\scratchcounter\zerocount \dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#1}} {\advance\scratchcounter\plusone}}} \def\collectXMLstack#1% {\XMLRtoks\emptytoks \dorecurse\XMLstacklevel {\ifnum\recurselevel>\plusone\appendtoks#1\to\XMLRtoks\fi \expandafter\appendtoks\expandafter\getXMLstackdata\expandafter{\recurselevel}\to\XMLRtoks}} \def\collectXMLstackrows#1#2% {\XMLRtoks\emptytoks \dostepwiserecurse{#1}\XMLstacklevel\plusone {\ifnum\recurselevel>#1\appendtoks#2\to\XMLRtoks\fi \expandafter\appendtoks\expandafter\getXMLstackdata\expandafter{\recurselevel}\to\XMLRtoks}} \def\collectXMLnamedstack#1#2% {\XMLRtoks\emptytoks \dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#1}} {\ifnum\recurselevel>\plusone\appendtoks#2\to\XMLRtoks\fi \expandafter\appendtoks\expandafter\getXMLstackdata\expandafter{\recurselevel}\to\XMLRtoks}}} \def\collectXMLnamedstacknamed#1#2#3% names, inbetween, nestednames (maddness, this macro) {\XMLRtoks\emptytoks \!!doneafalse \let\globalascii\empty \dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#1}} {\begingroup \startsavingXMLelements \rawXMLstacktext\recurselevel % still on stack, raw does not test \stopsavingXMLelements \let\globalascii\empty \dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#2}} {\xdef\globalascii{\getXMLstackdata\recurselevel}}}% \endgroup \ifx\globalascii\empty\else \if!!donea\appendtoks#3\to\XMLRtoks\fi \expandafter\appendtoks\globalascii\to\XMLRtoks \!!doneatrue \fi}}} \def\XMLcopydata#1#2% to from {\@EA\let\csname\@@XMLdata:#1\@EA\endcsname\csname\@@XMLdata:#2\endcsname} \def\XMLcopysave#1#2% to from {\@EA\let\csname\@@XMLsave:#1\@EA\endcsname\csname\@@XMLsave:#2\endcsname} \def\removeXMLdatafromstack#1% {\dorecurse\XMLstacklevel {\doif{\getXMLstackname\recurselevel}{#1} {\dostepwiserecurse\recurselevel{\numexpr\XMLstacklevel+\minusone}\plusone {\scratchcounter\numexpr\recurselevel+\plusone\relax \@EA\let\csname\@@xmlstack:n:\XMLstackid:\recurselevel\@EA\endcsname\csname\@@xmlstack:n:\XMLstackid:\number\scratchcounter\endcsname \XMLcopysave{\@@xmlstack:t:\XMLstackid:\recurselevel}{\@@xmlstack:t:\XMLstackid:\number\scratchcounter}% \XMLcopysave{\@@xmlstack:d:\XMLstackid:\recurselevel}{\@@xmlstack:d:\XMLstackid:\number\scratchcounter}}% \advance\XMLstacklevel\minusone \exitloop}}} %D BEWARE: these names may change (get stack in the name) \def\XMLallnamed#1% {\dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#1}} {\getXMLstackdata\recurselevel}}} \def\defXMLfirstnamed#1#2% \cs list {\dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#2}} {\defXMLstackdata#1\recurselevel\exitloop}}} \def\defXMLfirstnamedtext#1#2% \cs list {\dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#2}} {\edef#1{\getXMLstacktext\recurselevel}\exitloop}}} \def\XMLfirstnamed#1% {\dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#1}} {\getXMLstackdata\recurselevel\exitloop}}} \def\XMLnotnamed#1% {\dorecurse\XMLstacklevel {\expanded{\doifnotinset{\getXMLstackname\recurselevel}{#1}} {\getXMLstackdata\recurselevel\exitloop}}} \let\XMLstackposition\!!zerocount \def\XMLdoifonstackelse#1% was \XMLdoifelsefound {\!!doneafalse \let\XMLstackposition\!!zerocount \dorecurse\XMLstacklevel {\expanded{\doifinset{\getXMLstackname\recurselevel}{#1}} {\let\XMLstackposition\recurselevel\!!doneatrue\exitloop}}% \if!!donea \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D Handy: \def\pushXMLmeaning#1% or [#1] {\@EA\pushmacro\csname\@@XMLelement:#1/\endcsname \@EA\pushmacro\csname\@@XMLelement:#1\endcsname \@EA\pushmacro\csname\@@XMLelement:/#1\endcsname} \def\popXMLmeaning#1% or [#1] {\@EA\popmacro\csname\@@XMLelement:#1/\endcsname \@EA\popmacro\csname\@@XMLelement:#1\endcsname \@EA\popmacro\csname\@@XMLelement:/#1\endcsname} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-ini.lua0000644000175000017500000000232012130411274024053 0ustar norbertnorbertif not modules then modules = { } end modules ['catc-ini'] = { version = 1.001, comment = "companion to catc-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } catcodes = catcodes or { } catcodes.numbers = catcodes.numbers or { } catcodes.names = catcodes.names or { } storage.register("catcodes/numbers", catcodes.numbers, "catcodes.numbers") storage.register("catcodes/names", catcodes.names, "catcodes.names") local numbers = catcodes.numbers local names = catcodes.names -- this only happens at initime function catcodes.register(name,number) numbers[name] = number local cnn = names[number] if cnn then cnn[#cnn+1] = name else names[number] = { name } end tex[name] = number -- downward compatible end -- this only happens at runtime for k, v in next, numbers do tex[k] = v -- downward compatible end -- nasty table.setmetatableindex(numbers,function(t,k) if type(k) == "number" then t[k] = k return k end end) table.setmetatableindex(names, function(t,k) if type(k) == "string" then t[k] = k return k end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/task-ini.mkiv0000644000175000017500000000113011754241457024305 0ustar norbertnorbert%D \module %D [ file=task-ini, %D version=2007.06.06, %D title=\CONTEXT\ Task Handler, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Task Handler / initialization} \unprotect %D Maybe we will make things configureable (speed up and such). \registerctxluafile{task-ini}{1.001} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-itc.mkvi0000644000175000017500000000316112130411274024325 0ustar norbertnorbert%D \module %D [ file=typo-itc, %D version=2011.10.08, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Italic Correction, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Italics Corrections} \unprotect %D The brave might try: %D %D \starttyping %D \definefontfeature[default][default][itlc=yes,textitalics=yes] %D \setupitaliccorrection[global,always] %D \stoptyping \registerctxluafile{typo-itc}{1.001} \definesystemattribute[italics][public] % \let\/=/ % \let\emphasiscorrection\donothing \ifdefined \normalitaliccorrection \else \let\normalitaliccorrection\italiccorrection \fi \unexpanded\def\italiccorrection {\ifnum\attribute\italicsattribute<\plusone\normalitaliccorrection\fi} \let\/\italiccorrection % 1 = end of word % 2 = end of word and end of a list \unexpanded\def\setitaliccorrection[#code]% rather low level (might go away) {\ctxlua{typesetters.italics.set(\number#code)}} \unexpanded\def\resetitaliccorrection% rather low level (might go away) {\ctxlua{typesetters.italics.reset()}} % global : no attributes, just always (faster and less memory) % text : only text % always : text and boxes % none : - \unexpanded\def\setupitaliccorrection[#settings]% {\ctxcommand{setupitaliccorrection("#settings")}} \appendtoks \attribute\italicsattribute\attributeunsetvalue \to \everymathematics \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-xnt.mkvi0000644000175000017500000000751712130411274024317 0ustar norbertnorbert% macros=mkvi %D \module %D [ file=tabl-xtb, %D version=2011.10.28, %D title=\CONTEXT\ Table Macros, %D subtitle=Natural to Xtreme Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Natural to Xtreme Tables} \unprotect %D Don't expect wonders but it might come in handy: %D %D \starttyping %D \mapTABLEtoxtable %D \restoreTABLEfromxtable %D \stoptyping %D %D We stick to a simple example: %D %D \startbuffer %D \bTABLE %D \bTR %D \bTD[width=1cm,background=color,backgroundcolor=red] one \eTD %D \bTD[width=2cm] two \eTD %D \eTR %D \bTR %D \bTD alpha \eTD %D \bTD beta \eTD %D \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer %D %D \startbuffer %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D \startlinecorrection %D \mapTABLEtoxtable \getbuffer %D \stoplinecorrection %D \stopbuffer %D %D \typebuffer \getbuffer \let\tabl_x_normal_bTABLEhead\bTABLEhead \let\tabl_x_normal_eTABLEhead\eTABLEhead \let\tabl_x_normal_bTABLEnext\bTABLEnext \let\tabl_x_normal_eTABLEnext\eTABLEnext \let\tabl_x_normal_bTABLEfoot\bTABLEfoot \let\tabl_x_normal_eTABLEfoot\eTABLEfoot \let\tabl_x_normal_bTABLEbody\bTABLEbody \let\tabl_x_normal_eTABLEbody\eTABLEbody \let\tabl_x_normal_bTR \bTR \let\tabl_x_normal_eTR \eTR \let\tabl_x_normal_bTD \bTD \let\tabl_x_normal_eTD \eTD \let\tabl_x_normal_bTH \bTH \let\tabl_x_normal_eTH \eTH \let\tabl_x_normal_setupTABLE\setupTABLE \let\tabl_x_normal_bTABLE \bTABLE \let\tabl_x_normal_eTABLE \eTABLE \unexpanded\def\restoreTABLEfromxtable {\let\bTABLEhead\tabl_x_normal_bTABLEhead \let\eTABLEhead\tabl_x_normal_eTABLEhead \let\bTABLEnext\tabl_x_normal_bTABLEnext \let\eTABLEnext\tabl_x_normal_eTABLEnext \let\bTABLEfoot\tabl_x_normal_bTABLEfoot \let\eTABLEfoot\tabl_x_normal_eTABLEfoot \let\bTABLEbody\tabl_x_normal_bTABLEbody \let\eTABLEbody\tabl_x_normal_eTABLEbody \let\bTR \tabl_x_normal_bTR \let\eTR \tabl_x_normal_eTR \let\bTD \tabl_x_normal_bTD \let\eTD \tabl_x_normal_eTD \let\bTH \tabl_x_normal_bTH \let\eTH \tabl_x_normal_eTH \let\setupTABLE\tabl_x_normal_setupTABLE \let\bTABLE \tabl_x_normal_bTABLE \let\eTABLE \tabl_x_normal_eTABLE} \unexpanded\def\mapTABLEtoxtable {\let\bTABLEhead\startxtablehead \let\eTABLEhead\stopxtablehead \let\bTABLEnext\startxtablefoot \let\eTABLEnext\stopxtablefoot \let\bTABLEfoot\startxtablefoot \let\eTABLEfoot\stopxtablefoot \let\bTABLEbody\startxtablebody \let\eTABLEbody\stopxtablebody \let\bTR \startxrow \let\eTR \stopxrow \let\bTD \startxcell \let\eTD \stopxcell \let\bTH \tabl_x_TABLE_TH_start_cell \let\eTH \tabl_x_TABLE_TH_stop_cell \let\setupTABLE\tabl_x_TABLE_setup \let\bTABLE \tabl_x_TABLE_start \let\eTABLE \tabl_x_TABLE_stop} \unexpanded\def\tabl_x_TABLE_setup{\dosingleempty\tabl_x_TABLE_setup_indeed} \unexpanded\def\tabl_x_TABLE_start{\dosingleempty\tabl_x_TABLE_start_indeed} \unexpanded\def\tabl_x_TABLE_stop {\stopxtable} \unexpanded\def\tabl_x_TABLE_TH_start_cell {\startxcellgroup[\c!foregroundstyle=\v!bold]% \startxcell} \unexpanded\def\tabl_x_TABLE_TH_stop_cell {\stopxcell \stopxcellgroup} \unexpanded\def\tabl_x_TABLE_setup_indeed[#settings]% {\iffirstargument \setupxtable[#settings]% \fi} \unexpanded\def\tabl_x_TABLE_start_indeed[#settings]% {\bgroup \tabl_x_prepare{#settings}% \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% \buff_pickup\tabl_x_current_buffer{bTABLE}{eTABLE}\relax\tabl_x_process} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-bck.mkiv0000644000175000017500000000732512130411274024245 0ustar norbertnorbert%D \module %D [ file=node-bck, %D version=2009.06.08, %D title=\CONTEXT\ Node Macros, %D subtitle=Backgrounds, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Support / Backgrounds} %D This is first attempt to replacing backgrounds in a few tables %D mechanisms. When used more frequently, we can store the color %D spec in the attribute. \unprotect \registerctxluafile{node-bck}{1.001} \def\node_backgrounds_boxes_initialize % will move to lua {\ctxlua{nodes.tasks.enableaction("shipouts","nodes.handlers.backgrounds")}% \glet\node_backgrounds_boxes_initialize\donothing} \def\node_backgrounds_align_initialize % will move to lua {\ctxlua{nodes.tasks.enableaction("shipouts","nodes.handlers.alignbackgrounds")}% \glet\node_backgrounds_align_initialize\donothing} % \backgroundvbox[green] {\input tufte } \par % \backgroundvbox[blue] {\input ward } \par % \backgroundvbox[red] {\input knuth } \par % \backgroundhbox[yellow]{\rotate[rotation=45]{hello world}} \par \def\colorattr#1% {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname \thecolorattr{\currentcolorprefix#1}% \else\ifcsname\??colorattribute#1\endcsname \thecolorattr{#1}% \fi\fi} \def\thecolorattr#1% {attr \colormodelattribute \attribute\colormodelattribute attr \colorattribute \csname\??colorattribute#1\endcsname attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized \def\backgroundcolorattr#1% {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname \thebackgroundcolorattr{\currentcolorprefix#1}% \else\ifcsname\??colorattribute#1\endcsname \thebackgroundcolorattr{#1}% \fi\fi} \def\thebackgroundcolorattr#1% {attr \backgroundattribute \plusone attr \colormodelattribute \attribute\colormodelattribute attr \colorattribute \csname\??colorattribute#1\endcsname attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized \def\thealignbackgroundcolorattr#1% {attr \alignbackgroundattribute \plusone attr \colormodelattribute \attribute\colormodelattribute attr \colorattribute \csname\??colorattribute#1\endcsname attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized \unexpanded\def\backgroundhbox{\node_backgrounds_boxes_add\hbox} \unexpanded\def\backgroundvbox{\node_backgrounds_boxes_add\vbox} \unexpanded\def\backgroundvtop{\node_backgrounds_boxes_add\vtop} % \def\node_backgrounds_boxes_add#1[#2]% % {\begingroup % \node_backgrounds_boxes_initialize % \dousecolorparameter{#2}% % \normalexpanded{\endgroup#1 % attr \backgroundattribute \plusone % attr \colormodelattribute \the\attribute\colormodelattribute % attr \colorattribute \the\attribute\colorattribute % attr \transparencyattribute \the\attribute\transparencyattribute}} % % more efficient: \def\node_backgrounds_boxes_add#1[#2]% {\node_backgrounds_boxes_initialize #1\backgroundcolorattr{#2}} % less argument carry over: % % \def\node_backgrounds_boxes_add#1[#2]% % {\node_backgrounds_boxes_initialize#1% % \ifcsname\??colorattribute\currentcolorprefix#2\endcsname % \thebackgroundcolorattr{\currentcolorprefix#2}% % \else\ifcsname\??colorattribute#2\endcsname % \thebackgroundcolorattr{#2}% % \fi\fi} % \def\backgroundvbox[#1]{\vbox \backgroundcolorattr{#1}} % \def\backgroundvtop[#1]{\vtop \backgroundcolorattr{#1}} % \def\backgroundhbox[#1]{\hbox \backgroundcolorattr{#1}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-two.mkiv0000644000175000017500000001140011754241457024326 0ustar norbertnorbert%D \module %D [ file=core-two, % moved from core-uti %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Two Pass Data, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Two Pass Data} %D This is a rather old mechanism which has not changed much over %D time, apart from adding a few more selectors. This code used %D to be part of \type {core-uti}. The following examples demonstrate %D the interface. %D %D \startbuffer %D \definetwopasslist{test-1} %D %D \gettwopassdatalist{test-1} [\twopassdatalist=] %D \checktwopassdata {test-1} [\twopassdata=] %D \checktwopassdata {test-1} [\twopassdata=] %D \gettwopassdata {test-1} [\twopassdata=] %D \gettwopassdata {test-1} [\twopassdata=] %D %D \definetwopasslist{test-2} %D %D \lazysavetwopassdata{test-2}{1}{x} %D \lazysavetwopassdata{test-2}{2}{y} %D \lazysavetwopassdata{test-2}{3}{z} %D %D \gettwopassdatalist{test-2} [\twopassdatalist=x,y,z] %D \checktwopassdata {test-2} [\twopassdata=x] %D \checktwopassdata {test-2} [\twopassdata=x] %D \gettwopassdata {test-2} [\twopassdata=x] %D \gettwopassdata {test-2} [\twopassdata=y] %D \gettwopassdata {test-2} [\twopassdata=z] %D \gettwopassdata {test-2} [\twopassdata=] %D %D \definetwopasslist{test-3} %D %D \lazysavetaggedtwopassdata{test-3}{1}{x}{a} %D \lazysavetaggedtwopassdata{test-3}{2}{y}{b} %D \lazysavetaggedtwopassdata{test-3}{3}{z}{c} %D %D \findtwopassdata{test-3}{x} [\twopassdata=a] %D \findtwopassdata{test-3}{y} [\twopassdata=b] %D \findtwopassdata{test-3}{z} [\twopassdata=c] %D \findtwopassdata{test-3}{w} [\twopassdata=] %D %D \definetwopasslist{test-4} %D %D \lazysavetwopassdata{test-4}{1}{A} %D \lazysavetwopassdata{test-4}{2}{B} %D \lazysavetwopassdata{test-4}{3}{C} %D %D \getfirsttwopassdata{test-4} [\twopassdata=A] %D \getlasttwopassdata {test-4} [\twopassdata=C] %D \getfirsttwopassdata{test-4} [\twopassdata=A] %D \getlasttwopassdata {test-4} [\twopassdata=C] %D \getfromtwopassdata {test-4}{1} [\twopassdata=A] %D \getfromtwopassdata {test-4}{3} [\twopassdata=C] %D \getfromtwopassdata {test-4}{2} [\twopassdata=B] %D \stopbuffer %D %D \getbuffer \typebuffer \unprotect \registerctxluafile{core-two}{1.001} \def\immediatesavetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxcommand {savetwopassdata('#1',"#3")}}} \def\savetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlatecommand{savetwopassdata('#1',"#3")}}} \def\lazysavetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlatecommand{savetwopassdata('#1',"#3")}}} \def\savetaggedtwopassdata #1#2#3#4{\normalexpanded{\noexpand\ctxcommand {savetaggedtwopassdata('#1','#3',"#4")}}} \def\lazysavetaggedtwopassdata#1#2#3#4{\normalexpanded{\noexpand\ctxlatecommand{savetaggedtwopassdata('#1','#3',"#4")}}} % temp hack: needs a proper \starteverytimeluacode \setfalse\twopassdatafound \let \twopassdata \empty \let \twopassdatalist \empty \newif \iftwopassdatafound % obsolete, will go \def\syst_twopass_check {\ifx\twopassdata\empty \twopassdatafoundfalse % obsolete \setfalse\twopassdatafound \else \twopassdatafoundtrue % obsolete \settrue\twopassdatafound \fi} \def\syst_twopass_set_not_found {\twopassdatafoundfalse % obsolete \setfalse\twopassdatafound} \def\syst_twopass_set_found {\twopassdatafoundtrue % obsolete \settrue\twopassdatafound} \unexpanded\def\definetwopasslist #1{\ctxcommand{definetwopasslist('#1')}} \unexpanded\def\gettwopassdata #1{\edef\twopassdata {\ctxcommand{gettwopassdata ("#1")}}\syst_twopass_check} \unexpanded\def\checktwopassdata #1{\edef\twopassdata {\ctxcommand{checktwopassdata ("#1")}}\syst_twopass_check} \unexpanded\def\findtwopassdata #1#2{\edef\twopassdata {\ctxcommand{findtwopassdata("#1","#2")}}\syst_twopass_check} \unexpanded\def\getfirsttwopassdata #1{\edef\twopassdata {\ctxcommand{getfirsttwopassdata ("#1")}}\syst_twopass_check} \unexpanded\def\getlasttwopassdata #1{\edef\twopassdata {\ctxcommand{getlasttwopassdata ("#1")}}% \edef\noftwopassitems{\ctxcommand{counttwopassdata ("#1")}}\syst_twopass_check} \unexpanded\def\getnamedtwopassdatalist#1#2{\edef #1{\ctxcommand{gettwopassdatalist ("#2")}}} \unexpanded\def\gettwopassdatalist #1{\edef\twopassdatalist{\ctxcommand{gettwopassdatalist ("#1")}}} \unexpanded\def\doifelseintwopassdata #1#2{\ctxcommand{doifelseintwopassdata("#1","#2")}} \let\getfromtwopassdata \findtwopassdata \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-prc.mkvi0000644000175000017500000000611411754241457024352 0ustar norbertnorbert%D \module %D [ file=typo-prc, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Processors, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Processors} \registerctxluafile{typo-prc}{1.001} \unprotect %D Processors are used when we cannot easily associate typesetting directives %D with (for instance) structural elements. Instead of ending up with numerous %D additional definitions we can group treatments in so called processors. %D %D An example of where processors can be used is in separator sets (these are %D related to typesetting numbers using structure). %D %D \starttyping %D \defineprocessor[demo][style=\bfb,color=red] %D \stoptyping %D %D This defines a processor named \type {demo}. Such a name ends up as prefix in %D for instance: %D %D \starttyping %D \defineseparatorset [demosep] [demo->!,demo->?,demo->!,demo->?] [demo->@] %D \stoptyping %D %D Here the \type {!} and \type {?} are just the seperator characters that end %D up between part, chapter, section, etc.\ numbers. The third argument defines the %D default. When a separator is inserted, the \type{demo} processor will be applied. %D Here the number will be separated by red slightly bigger than normal bold %D exclamation marks and questionmarks %D %D Valid keys for defining a processor are \type {style}, \type {color}, \type {left}, %D \type {right}, and \type {command} (the given command takes one argument). \installcorenamespace{processor} \installcorenamespace{processorcheck} \installcommandhandler \??processor {processor} \??processor \appendtoks \letvalue{\??processorcheck\currentprocessor}\relax \ctxcommand{registerstructureprocessor("\currentprocessor")}% global, but it permits using processor that are yet undefined \to \everydefineprocessor %D The following command can be used by users but normally it will be %D invoked behind the screens. After all, processor prefixes need to %D be split off first. At the \LUA\ end we do check for a processor %D being registered anyway. \unexpanded\def\applyprocessor#tag% {\def\currentprocessor{#tag}% \ifcsname\??processorcheck\currentprocessor\endcsname \expandafter\typo_processor_apply \else \expandafter\firstofoneargument \fi} \def\typo_processor_apply {\doifelse{\processorparameter\c!state}\v!stop \firstofoneargument \typo_processor_apply_indeed} \def\typo_processor_apply_indeed#content% {\begingroup \useprocessorstyleandcolor\c!style\c!color \processorparameter\c!left \processorparameter\c!command{#content}% \processorparameter\c!right \endgroup} %D \startbuffer %D \defineprocessor[first] [style=bold] %D \defineprocessor[last] [first] [color=red] %D %D \applyprocessor{first}{hans} \applyprocessor{last}{hagen} %D \stopbuffer %D %D \typebuffer \start \blank \getbuffer \blank \stop \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-flt.mkvi0000644000175000017500000024420612134352503024325 0ustar norbertnorbert%D \module %D [ file=strc-flt, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Float Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Float Numbering} \registerctxluafile{strc-flt}{1.001} \unprotect % todo: delay caption creation and make setups for each method instead % so that we can have a list of methods and redo them as we can % keep the list or even better: recreate it % % todo: strc_floats_analyze_variables_two could trigger a setup % and we could have nofmethods of them % % todo: move variables from page-flt to strc-flt % % todo: p_name etc % % todo: less globals! % % todo: do all options in lua %D This module is being converted into a mkvi one. %D %D - rename macros %D - get rid of dead code %D - less gobal mess %D - more mkiv-ish \installcorenamespace{float} \installcorenamespace{floatbuilder} \installcorenamespace{floatcaption} \installframedcommandhandler \??float {float} \??float \installframedcommandhandler \??floatcaption {floatcaption} \??floatcaption \let\setupfloats \setupfloat \let\setupcaption \setupfloatcaption \let\setupcaptions\setupfloatcaption \unexpanded\def\dohandlenextfloatindent {\useindentnextparameter\floatparameter \dorechecknextindentation} \setupcaptions [\c!location=\v!bottom, \c!grid=, \c!before=, % not used (yet) \c!inbetween={\blank[\v!medium]}, \c!after=, % not used (yet) \c!spacebefore=, \c!spaceinbetween=, % replaces fuzzy inbetween dual usage \c!spaceafter=, \c!width=\v!fit, \c!minwidth=\v!fit, % id est: the width of the floatbox in some cases \c!headstyle=\v!bold, \c!headcolor=, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!outermargin=\zeropoint, \c!innermargin=\zeropoint, \c!setups=, \c!style=\v!normal, \c!color=, \c!textstyle=, \c!textcolor=, \c!align=, \c!number=\v!yes, % \c!expansion=\v!no % \c!prefix=\v!no, % \c!prefixconnector=., % \c!way=\v!by\v!chapter, % \c!prefixsegments=2:2, % \c!way=\@@nrway, % \c!blockway=\@@nrblockway, % \c!sectionnumber=\@@nrsectionnumber, % \c!separator=\@@koseparator, % \c!starter=\@@kostarter, % \c!stopper=\@@kostopper, \c!suffixseparator=, % currently rather hard coded \c!suffix=\floatcaptionsuffix, \c!distance=1em, \c!conversion=\v!numbers, \c!command=] % we can comment some of these \setupfloats [\c!location=\v!middle, \c!width=8\lineheight, \c!height=6\lineheight, \c!offset=\v!overlay, \c!frame=\v!off, \c!strut=\v!no, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, %\c!background=, %\c!backgroundcolor=, \c!backgroundoffset=\!!zeropoint, %\c!topframe=, %\c!bottomframe=, %\c!leftframe=, %\c!rightframe=, \c!frameoffset=\!!zeropoint, %\c!before=, %\c!after=, \c!spacebefore=\v!big, \c!spaceafter=\v!big, \c!sidespacebefore=\rootfloatparameter\c!spacebefore, \c!sidespaceafter=\rootfloatparameter\c!spaceafter, \c!sidealign=\v!normal, \c!textmethod=\ifgridsnapping2\else0\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) % THIS WILL CHANGE \c!sidemethod=\ifgridsnapping2\else1\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) % THIS WILL CHANGE \c!indentnext=\v!no, \c!margin=1\emwidth, \c!method=1, \c!cache=\v!yes, % when no, then intermediate flush \c!leftmargin=\zeropoint, % displacement in 'normal floats' \c!rightmargin=\zeropoint, % idem \c!innermargin=\zeropoint, % idem \c!outermargin=\zeropoint, % idem \c!leftmargindistance=\zeropoint, \c!rightmargindistance=\floatparameter\c!leftmargindistance, \c!ntop=2, \c!nbottom=0, \c!nlines=4, % used? %\c!local=, %\c!bottombefore=, % e.g. \vfill %\c!bottomafter=, %\c!default=, % default location \c!numbering=\v!yes] %D Individial settings: \installcounterassociation{floatcaption} \appendtoks \let\currentfloat\currentfloatcaption % ? \synchronizefloatcaptioncounters \to \everysetupfloatcaption \appendtoks \let\currentfloat\currentfloatcaption % ? \synchronizefloatcaptioncounters \to \everydefinefloatcaption %D Definitions: \let\strc_floats_define_saved\definefloat \unexpanded\def\definefloat {\dotripleempty\strc_floats_define} \def\strc_floats_define[#1][#2][#3]% #1=naam #2=meervoud #3=parent {\ifthirdargument \strc_floats_define_cloned[#1][#2][#3]% \else\ifsecondargument \strc_floats_define_normal[#1][#2]% \else \strc_floats_define_normal[#1][#1]% \fi\fi} \def\strc_floats_define_normal[#1][#2]% {\registerfloatcaptioncounter{#1}% \definefloatcaption[#1]% \definecounter[#1]% \definelist[#1]% \presetlabeltext[#1=\Word{#1}~]% \presetheadtext[#2=\Word{#2}]% \strc_floats_define_saved[#1]% \strc_floats_define_commands{#1}{#2}} \def\strc_floats_define_cloned[#1][#2][#3]% {\definefloatcaption[#1][#3]% \definecounter[#1][#3]% \definelist[#1][#3]% \presetlabeltext[#1=\Word{#3}~]% \presetheadtext[#2=\Word{#2}]% \strc_floats_define_saved[#1][#3]% \strc_floats_define_commands{#1}{#2}} \def\strc_floats_define_commands#1#2% {\setuvalue {\e!place\e!listof#2}{\dodoubleempty\strc_lists_place[#1]}% call will change \setuvalue {\e!complete\e!listof#2}{\dotripleempty\strc_lists_complete_indeed[#1][#2]}% call will change \setuevalue {\e!place#1}{\strc_floats_place{#1}}% \setuevalue {\e!start\e!place#1}{\strc_floats_start_place{#1}}% \setuevalue {\e!stop\e!place#1}{\strc_floats_stop_place}% \setuevalue {\e!start#1\e!text}{\strc_floats_start_text{#1}}% \setuevalue {\e!stop#1\e!text}{\strc_floats_stop_text}% % these will become obsolete: \setuevalue {\e!reserve#1}{\strc_floats_reserve{#1}}% \setuevalue{\e!start\e!reserve#1\e!text}{\strc_floats_start_reserve_text{#1}}% \setuevalue {\e!stop\e!reserve#1\e!text}{\strc_floats_stop_reserve_text}} %D Fallback float body: \unexpanded\def\strc_floats_place_empty_box % \inheritedfloatframed {\framed [\c!frame=\v!on, \c!width=\rootfloatparameter\c!width, \c!height=\rootfloatparameter\c!height, \c!location=\v!normal, \c!offset=\rootfloatparameter\c!offset]% {\getmessage\m!floatblocks{12}\empty}} %D Data. We can generalize this to lists. \newif\ifnofloatcaption \newif\ifnofloatnumber \newif\ifemptyfloatcaption \installstructurelistprocessor\s!float{\usestructurelistprocessor{number+title}} \unexpanded\def\thecurrentfloatnumbersuffix {\doifsomething{\floatcaptionparameter\c!suffix} {\floatcaptionparameter\c!suffixseparator \floatcaptionparameter\c!suffix \floatcaptionparameter\c!suffixstopper}} \unexpanded\def\thecurrentfloatnumber {\ifnofloatcaption \else \ifnofloatnumber \else \ifx\currentfloatnumber\relax\else \namedtaggedlabeltexts \t!floatlabel \currentfloat \t!floatnumber\currentfloat {\ctxcommand{savedlistprefixednumber("\currentfloat",\currentfloatnumber)}% \thecurrentfloatnumbersuffix}% \fi \fi \fi} \unexpanded\def\thecurrentfloatcaption {\ifnofloatcaption \else \ifx\currentfloatnumber\relax\else \dostarttagged\t!floattext\empty \ctxcommand{savedlisttitle("\currentfloat",\currentfloatnumber)}% \dostoptagged \fi \fi} %D Captions. \let\floatcaptionsuffix\empty % an optional suffix \let\floatcaptionnumber\empty % a logical counter % the split is needed when for instance the float goes into % a multi page field and the list of figs becomes larger than % one page: cycle between 'only flush when object ref ok' % and 'one/many page fig list'; see "uguide finometer" % % potential sync bug with sectionblocks, see uguide.tex % begin of todo \unexpanded\def\placefloatcaption{\dodoubleempty\strc_floats_place_caption} \unexpanded\def\setfloatcaption {\dodoubleempty\strc_floats_set_caption} \def\strc_floats_place_caption[#tag][#reference]#caption{[not supported]} \def\strc_floats_set_caption [#tag][#reference]#caption{[not supported]} \unexpanded\def\placefloatcaptiontext [#tag]{[not suported yet]} \unexpanded\def\placefloatcaptionnumber [#tag]{[not suported yet]} \unexpanded\def\placefloatcaptionreference[#tag]{[not suported yet]} \let\placefloatlabel \placefloatcaption \let\placefloatlabeltext \placefloatcaptiontext \let\placefloatlabelreference\placefloatcaptionreference % end of todo \newbox \b_strc_floats_caption \newbox \b_strc_floats_content \newdimen\d_strc_floats_caption_height \newdimen\d_strc_floats_caption_depth \def\strc_floats_make_complete_caption {\doifsomething{\floatcaptionparameter\c!spacebefore}{\blank[\floatcaptionparameter\c!spacebefore]}% \synchronizedisplaydirection % temp hack, till we have a proper model \noindent \gdef\lastcaptiontag{\strut\thecurrentfloatnumber}% was xdef ... needs checking \begingroup \usefloatcaptionstyleandcolor\c!style\c!color \ifnofloatnumber \else \hbox{\usefloatcaptionstyleandcolor\c!headstyle\c!headcolor\strut\thecurrentfloatnumber}% \ifnofloatcaption \else \ifemptyfloatcaption \else \doifelsenothing{\floatcaptionparameter\c!spaceinbetween} {\scratchskip\floatcaptionparameter\c!distance\relax \dotfskip\scratchskip\emergencystretch.5\scratchskip} {\blank[\floatcaptionparameter\c!spaceinbetween]}% \fi \fi \fi \ifnofloatcaption \global\d_strc_floats_caption_height\zeropoint \global\d_strc_floats_caption_depth \zeropoint \else \usefloatcaptionstyleandcolor\c!textstyle\c!textcolor \global\d_strc_floats_caption_height\strutheight \global\d_strc_floats_caption_depth \strutdepth \begstrut\thecurrentfloatcaption\endstrut\endgraf \fi \endgroup \doifsomething{\floatcaptionparameter\c!spaceafter}{\blank[\floatcaptionparameter\c!spaceafter]}} % \newif\iftracecaptions % % \def\settracedcaptionbox % {\iftracecaptions\setbox\b_strc_floats_caption\ruledhbox{\box\b_strc_floats_caption}\fi} % \definefloat [figure-1] [figure] % \definefloat [figure-2] [figure] % \setupfloat [figure-1] [location=left,leftmargin=10mm] % \setupfloat [figure-2] [location=left,leftmargin=-5mm] % \setupcaption [figure-1] [align=flushleft] % \setupcaption [figure-2] [align=flushleft,leftmargin=15mm] % % \startsetups somefigure % \ifdim\wd\nextbox>\textwidth % \placefloat[figure-2][][]{}{\box\nextbox} % \else % \placefloat[figure-1][][]{}{\box\nextbox} % \fi % \stopsetups % % \unexpanded\def\setupswithbox[#1]{\dowithnextbox{\setups[#1]}\vbox} % % test \setupswithbox[somefigure]{\framed[width=3cm] {}} test % test \setupswithbox[somefigure]{\framed[width=\dimexpr\textwidth+3cm\relax]{}} test % temporary removed ... was not applied systematically % % \def\dosetcaptionthings % {\usesetupsparameter\floatcaptionparameter} \def\strc_floats_check_caption_content {\ifnofloatcaption \else \setbox\b_strc_floats_caption\hbox {\settrialtypesetting \notesenabledfalse \strc_floats_make_complete_caption}% % new, \placefigure{\xmlfirst{#1}{somecaption}}{} passes earlier empty check % so here we misuse the scratch box; actually this means that the previous % test can go away (some day, when i redo this module) \ifdim\wd\b_strc_floats_caption=\zeropoint \global\emptyfloatcaptiontrue \ifnofloatnumber \global\nofloatcaptiontrue \fi \else \global\emptyfloatcaptionfalse \setbox\b_strc_floats_caption\hbox{\hskip\leftskip\box\b_strc_floats_caption}% \fi \fi} % The tricky part of getting float related two pass data is % that we should fetch is early but can only save it with % the composed float box; this determines the order: get it % before saving it. % We had this: % % \definetwopasslist{\s!float\s!data} \newcounter\noffloatdata % % \let\strc_float_realpage\realpageno % used for odd/even determination, can be combined with nodelocation % % \def\strc_float_save_data % \expanded ... will change in mkiv % {\doglobal\increment\noffloatdata % \lazysavetaggedtwopassdata{\s!float\s!data}{\noffloatdata}{\noffloatpages}{\noexpand\realfolio}}% later {}{}{}{} and \getfirst... % % \def\strc_float_load_data % precedes save ! % {\doglobal\increment\noffloatpages % \findtwopassdata{\s!float\s!data}{\noffloatpages}% % \ifconditional\twopassdatafound % \globallet\strc_float_realpage\twopassdata % \else % \globallet\strc_float_realpage\realpageno % \realfolio % \fi} %D We can do this ... %D %D \starttyping %D \newcount\c_strc_floats_n %D %D \definedataset[\s!float][\c!delay=\v!yes] %D %D \let\strc_float_realpage\realpageno %D %D \def\strc_float_save_data %D {\setdataset[\s!float][\number\c_strc_floats_n][]} %D %D \def\strc_float_load_data % precedes save ! %D {\global\advance\c_strc_floats_n\plusone %D \xdef\strc_float_realpage{\datasetvariable\s!float{\number\c_strc_floats_n}\s!page}% %D \ifx\strc_float_realpage\empty %D \globallet\strc_float_realpage\realpageno % \realfolio %D \fi} %D \stoptyping %D %D ... but this is more efficient: \definepagestate[\s!float][\c!delay=\v!yes] \newcount\c_strc_floats_n \let\strc_float_realpage\realpageno \def\strc_float_save_data {\setpagestate[\s!float][\number\c_strc_floats_n]} \def\strc_float_load_data % precedes save ! {\global\advance\c_strc_floats_n\plusone \xdef\strc_float_realpage{\pagestaterealpage\s!float{\number\c_strc_floats_n}}% \ifx\strc_float_realpage\empty \globallet\strc_float_realpage\realpageno % \realfolio \fi} %D test case: %D %D \starttyping %D \setupfloat[figure][criterium=\marginwidth,fallback=bottom] %D \dorecurse{3}{ %D \chapter{test} %D \placefigure[bottom]{1}{\framed{bottom}} %D test %D \placetable[bottom]{1}{\framed{table}} %D test %D \placetable{2}{\framed{table}} %D test %D \placefigure[left]{2}{\framed{left but way too wide}} %D \input tufte %D \placefigure[left]{3}{\framed{left but ok}} %D \input tufte } %D \stoptyping % A complication is that we may have to handle a pagebreak % first, which in turn may issue a (postponed) float. % Therefore we may not trust on variable assignments before % we're really dealing with the float. Some day I'll root out % the global settings. \let\lastplacedfloat\empty \def\strc_floats_set_current_tag#tag% {\edef\currentfloat{#tag}% \ifx\currentfloat\empty \let\currentfloat\v!figure % a bit of a hack \fi \global\let\lastplacedfloat\currentfloat \let\m_strc_floats_saved_userdata\empty \let\currentfloatcaption\currentfloat} \def\strc_floats_reset_variables {\global\emptyfloatcaptionfalse \global\nofloatcaptionfalse \global\nofloatnumberfalse} % place \def\strc_floats_analyze_location {% moved here, will do more \let\floatlabel \empty \let\floatcolumn\empty \let\floatrow \empty \setfloatmethodvariables\floatlocation} \unexpanded\def\strc_floats_place#tag% {\flushnotes \page_otr_command_flush_side_floats % here ! \strc_floats_begin_group \strc_floats_set_current_tag{#tag}% \dodoubleempty\strc_floats_place_indeed} \def\strc_floats_place_indeed[#location][#reference]#caption% {\strc_floats_reset_variables \edef\floatlocation{#location}% \ifx\floatlocation\empty \edef\floatlocation{\floatparameter\c!default}% beware of a clash between alignment locations \fi \strc_floats_analyze_location \setupcurrentfloatcaption[\c!reference={#reference},\c!title={#caption},\c!marking=,\c!list=,\c!bookmark=]% \doifinsetelse\v!split\floatlocation\strc_floats_place_next_box_split\strc_floats_place_next_box_normal} \unexpanded\def\placefloat {\flushnotes \page_otr_command_flush_side_floats % here ! \strc_floats_begin_group \dotripleempty\strc_floats_place_float} \def\strc_floats_place_float[#tag]% {\strc_floats_set_current_tag{#tag}% \strc_floats_place_indeed} % start-stop % \startplacefigure[title=oeps][subtitle=whatever] % \framed[width=10cm,height=5cm]{\floatuserdataparameter{subtitle}} % \stopplacefigure \installcorenamespace{floatuserdata} \installsetuponlycommandhandler \??floatuserdata {floatuserdata} \let\m_strc_floats_saved_userdata\empty % todo: reset this in non start|stop cases \unexpanded\def\strc_floats_start_place#tag% {\flushnotes \page_otr_command_flush_side_floats % here ! \strc_floats_begin_group \strc_floats_set_current_tag{#tag}% \dodoubleempty\strc_floats_start_place_indeed} \def\strc_floats_start_place_indeed[#settings][#userdata]% {\strc_floats_reset_variables \edef\savedfloatlocation{\floatcaptionparameter\c!location}% \setupcurrentfloatcaption[\c!location=,\c!reference=,\c!title=,\c!marking=,\c!list=,\c!bookmark=,#settings]% \def\m_strc_floats_saved_userdata{#2}% \edef\floatlocation{\floatcaptionparameter\c!location}% \setupcurrentfloatcaption[\c!location=\savedfloatlocation]% \ifx\floatlocation\empty \edef\floatlocation{\floatparameter\c!default}% \fi \ifsecondargument \setupcurrentfloatuserdata[#userdata]% \fi \strc_floats_analyze_location \doifinsetelse\v!split\floatlocation\strc_floats_place_next_box_split\strc_floats_place_next_box_normal \bgroup \ignorespaces} \unexpanded\def\strc_floats_stop_place {\removeunwantedspaces \egroup} \unexpanded\def\startplacefloat {\flushnotes \page_otr_command_flush_side_floats % here ! \strc_floats_begin_group \dodoubleempty\strc_floats_start_place_float} \def\strc_floats_start_place_float[#tag]% {\strc_floats_set_current_tag{#tag}% \strc_floats_start_place_indeed} \let\stopplacefloat\strc_floats_stop_place % reserve \unexpanded\def\strc_floats_reserve#tag% {\flushnotes \page_otr_command_flush_side_floats % here ! \strc_floats_begin_group \strc_floats_set_current_tag{#tag}% \dotripleempty\strc_floats_reserve_indeed} \def\strc_floats_reserve_indeed[#settings][#location][#reference]#caption% maybe check for #settings {\strc_floats_place_indeed[#location][#reference]{#caption}{\strc_floats_reserve_box{#settings}}} \def\strc_floats_reserve_box#settings% {\begingroup \setupcurrentfloat[\c!frame=\v!on,#settings]% \inheritedfloatframed{}% \endgroup} % text \unexpanded\def\strc_floats_start_text#tag% {\flushnotes % Here indeed? \page_otr_command_flush_side_floats % Here indeed? \strc_floats_begin_text_group \strc_floats_set_current_tag{#tag}% \dodoubleempty\strc_floats_start_text_indeed} \def\strc_floats_start_text_indeed[#location][#reference]% {\strc_floats_place_indeed[\v!text,#location,\v!left][#reference]} \unexpanded\def\strc_floats_stop_text {\strc_floats_stop_text_indeed} % reserved text \unexpanded\def\strc_floats_start_reserve_text#tag% {\flushnotes \page_otr_command_flush_side_floats \strc_floats_begin_text_group \strc_floats_set_current_tag{#tag}% \dotripleempty\strc_floats_start_reserve_text_indeed} \def\strc_floats_start_reserve_text_indeed[#settings][#location][#reference]#caption% {\strc_floats_place_indeed[\v!text,#location,\v!left][#reference]{#caption}{\strc_floats_reserve_box{#settings}}} \unexpanded\def\strc_floats_stop_reserve_text {\strc_floats_stop_text_indeed} % special hack \def\strc_floats_begin_group {\begingroup} \def\strc_floats_end_group {\carryoverpar\endgroup} \def\strc_floats_end_split_group {\endgroup} \def\strc_floats_begin_text_group{\begingroup\let\strc_floats_end_group\relax} \def\strc_floats_end_text_group {\endgroup} % implementation %setnewconstant\c_page_one_float_method \zerocount % 0=raw 1=safe (.99) 2=tight (-1pt) / belongs in page-one \setnewconstant\c_strc_floats_rotation \zerocount % 0 90 180 270 \newconditional\c_strc_floats_par_float \ifdefined\page_margin_strc_floats_before \else \let\page_margin_strc_floats_before \relax \fi \ifdefined\page_margin_strc_floats_set_hsize \else \let\page_margin_strc_floats_set_hsize\relax \fi \def\flushfloatslist {\v!left,\v!right,\v!inner,\v!outer,% \v!backspace,\v!cutspace,% \v!inleft,\v!inright,\v!inmargin,% \v!leftmargin,\v!rightmargin,\v!leftedge,\v!rightedge,% \v!innermargin,\v!outermargin,\v!inneredge,\v!outeredge,% \v!text,\v!opposite}% \v!page \unexpanded\def\strc_floats_place_next_box_split {\let\splitfloatfinalizer\strc_floats_end_split_group \let\strc_floats_end_group\relax \splitfloat{\strc_floats_place_next_box_normal}} \unexpanded\def\strc_floats_place_next_box_normal {\ifconditional\c_page_floats_some_waiting % this was \checkwaitingfloats spread all over \doifinsetelse\v!always\floatlocation {\showmessage\m!floatblocks5\empty} {\doifcommonelse\floatlocation\flushfloatslist\page_otr_command_flush_floats\donothing}% % but which should be done before using box \floatbox \fi \page_margin_strc_floats_before % todo: each float handler gets a before \global\insidefloattrue \dostarttagged\t!float\currentfloat \page_margin_strc_floats_set_hsize % todo: each float handler gets a set_hsize \the\everyinsidefloat \strc_floats_analyze_variables_one \dostarttagged\t!floatcontent\empty \dowithnextboxcontent {\strc_floats_set_local_hsize \floatparameter\c!inner \postponenotes} % new {\dostoptagged \strc_floats_finish_placement} \vbox} \def\strc_floats_finish_placement {\doifsomething{\floatparameter\c!criterium} {\ifdim\wd\nextbox>\floatparameter\c!criterium\relax \edef\forcedfloatmethod{\floatparameter\c!fallback}% \ifx\forcedfloatmethod\empty\let\forcedfloatmethod\v!here\fi \fi}% \strc_floats_check_extra_actions \strc_floats_analyze_variables_two \strc_floats_place_packaged_boxes \dostoptagged % tricky .... needs checking % we need to carry over the par because of side floats \global\d_page_sides_downshift \zeropoint \global\d_page_sides_extrashift\zeropoint \ifconditional\c_strc_floats_par_float \doifinset\v!reset\floatlocation\page_sides_forget_floats \doinhibitblank \fi \strc_floats_end_group} % nicer is a bunch of states and one loop that sets those states \def\strc_floats_analyze_variables_two {\ifinsidecolumns \global\setfalse\c_strc_floats_par_float \else \doifcommonelse\floatlocation\flushfloatslist {\global\settrue \c_strc_floats_par_float} {\global\setfalse\c_strc_floats_par_float}% \fi \global\d_page_sides_shift \zeropoint \global\d_page_sides_maximum \zeropoint \global\c_page_sides_method \floatparameter\c!sidemethod \global\c_page_one_float_method \floatparameter\c!textmethod \global\c_page_sides_align \zerocount \global\c_strc_floats_rotation \zerocount \strc_floats_calculate_skips \ifconditional\c_strc_floats_par_float \processaction [\floatparameter\c!sidealign] [\v!height=>\global\c_page_sides_align\plusone ,% \v!line=>\global\c_page_sides_align\plustwo ,% (***) \v!depth=>\global\c_page_sides_align\plusthree,% \v!grid=>\global\c_page_sides_align\plusfour ,% \v!halfline=>\global\c_page_sides_align\plusfive ]% \ifcase\c_page_sides_align\relax % todo: optie v!lokaal => \else \doifinset\v!height \floatlocation{\global\c_page_sides_align\plusone }% \doifinset\v!line \floatlocation{\global\c_page_sides_align\plustwo }% \doifinset\v!depth \floatlocation{\global\c_page_sides_align\plusthree}% \doifinset\v!grid \floatlocation{\global\c_page_sides_align\plusfour }% \doifinset\v!halfline\floatlocation{\global\c_page_sides_align\plusfive }% meant for 'none' \fi \doifinset\v!high\floatlocation{\global\d_page_sides_topskip \zeropoint}% \doifinset\v!low \floatlocation{\global\d_page_sides_bottomskip\zeropoint}% \doifinset\v!fit \floatlocation {\global\d_page_sides_topskip \zeropoint \global\d_page_sides_bottomskip\zeropoint \global\d_strc_floats_margin \zeropoint}% \else \processallactionsinset [\floatlocation] [ 90=>\global\c_strc_floats_rotation\commalistelement\relax,% 180=>\global\c_strc_floats_rotation\commalistelement\relax,% 270=>\global\c_strc_floats_rotation\commalistelement\relax]% \fi \doifinsetelse\v!nonumber\floatlocation {\global\nofloatnumbertrue} {\doifelse{\floatcaptionparameter\c!number}\v!yes {\global\nofloatnumberfalse} {\global\nofloatnumbertrue}}% \doifinsetelse\v!none\floatlocation {\global\nofloatcaptiontrue} {\global\nofloatcaptionfalse}% \doif{\floatcaptionparameter\c!number}\v!none % new {\global\nofloatcaptiontrue}% \ifemptyfloatcaption \ifnofloatnumber \global\nofloatcaptiontrue \fi \fi} % documenteren in details \def\strc_floats_analyze_variables_one {\doifelse{\floatparameter\c!local}\v!yes\settrue\setfalse\c_page_floats_center_box_global % fout keyword \ifconditional\c_page_floats_center_box_global \settrue\c_page_floats_center_box_local \else \doifinsetelse\v!local\floatlocation\settrue\setfalse\c_page_floats_center_box_local \fi \doifnotcommon{\v!always,\v!here,\v!force}\floatlocation % ! ! ! ! ! ! {\setfalse\c_page_floats_center_box_global \setfalse\c_page_floats_center_box_local}} \let\naturalfloatheight\!!zeropoint \let\naturalfloatwidth \!!zeropoint \let\naturalfloatdepth \!!zeropoint \def\strc_floats_set_natural_dimensions#box% {\xdef\naturalfloatheight{\the\ht#box}% \xdef\naturalfloatwidth {\the\wd#box}% \xdef\naturalfloatdepth {\the\dp#box}} \def\doifelsemainfloatbody {\ifinsidesplitfloat \ifconditional\splitfloatfirstdone \doubleexpandafter\secondoftwoarguments \else \doubleexpandafter\firstoftwoarguments \fi \else \expandafter\firstoftwoarguments \fi} % todo: optional user pars \let\currentfloatattribute\empty % to be checked \def\floatcaptionattribute {\iflocation %\ifnofloatnumber %\else \ifnofloatcaption \else \ifinsidesplitfloat \ifconditional\splitfloatfirstdone \else attr \destinationattribute \currentfloatattribute \fi \else attr \destinationattribute \currentfloatattribute \fi \fi %\fi \fi} \newconditional\usesamefloatnumber % \startplacefigure[location=here,reference=first, title=first, group=alpha,groupsuffix=.a] % \externalfigure[dummy][height=2cm] % \stopplacefigure % \startplacefigure[location=here,reference=second,title=second,group=alpha,groupsuffix=.b] % \externalfigure[dummy][height=2cm] % \stopplacefigure % % uses: \def\strc_floats_group_index {\numexpr\ctxcommand{listgroupindex("\currentfloat","\currentfloatgroup")}\relax} \def\strc_floats_place_packaged_boxes {\expandafter\strc_floats_place_packaged_boxes_indeed\expandafter{\m_strc_floats_saved_userdata}} \def\strc_floats_place_packaged_boxes_indeed#userdata% {\bgroup \ifconditional\usesamefloatnumber \globallet\currentfloatnumber \previousfloatnumber \globallet\currentfloatattribute \empty \globallet\currentfloatsynchronize\relax \else \edef\currentfloatcounter{\namedcounterparameter\currentfloat\s!name}% \edef\currentfloatgroup {\floatcaptionparameter\c!group}% \ifnofloatnumber \else \ifnofloatcaption \else \ifx\currentfloatgroup\empty % independent \strc_counters_increment\currentfloatcounter \else\ifcase\strc_floats_group_index % first in group \strc_counters_increment\currentfloatcounter \else % next in group \fi \fi \fi \fi % *1* as an alternative we could set counter parameters here if needed \strc_counters_register_component \s!float \setupcurrentfloatcaption \floatcaptionparameter \detokenizedfloatcaptionparameter \relax \relax \relax [\c!name=\currentfloat,% \s!counter=\currentfloatcounter,% \s!hascaption=\ifnofloatcaption \v!no\else\v!yes\fi,% \s!hasnumber=\ifnofloatnumber \v!no\else\v!yes\fi,% \s!hastitle=\ifemptyfloatcaption\v!no\else\v!yes\fi]% [#userdata]% \globallet\previousfloatnumber \m_strc_counters_last_registered_index \globallet\currentfloatnumber \m_strc_counters_last_registered_index \globallet\currentfloatattribute \m_strc_counters_last_registered_attribute \globallet\currentfloatsynchronize\m_strc_counters_last_registered_synchronize \fi % \global\setfalse\usesamefloatnumber % one shot % check float box \strc_floats_set_natural_dimensions\nextbox \global\setbox\floatbox\vbox{\floatparameter\c!command{\box\nextbox}}% \strc_floats_set_natural_dimensions\floatbox \ifdim\htdp\floatbox=\zeropoint \showmessage\m!floatblocks{11}\empty \global\setbox\floatbox\vbox {\dostarttagged\t!floatcontent\empty \strc_floats_place_empty_box \dostoptagged}% \fi % deal with lack of caption \global\setbox\floatbox\vbox \floatcaptionattribute {\doifelsemainfloatbody\currentfloatsynchronize\donothing \unvbox\floatbox \ifnofloatcaption \vss \fi}% gets rid of the depth (unless tabulate) \egroup % place the float \strc_floats_set_box \strc_floats_get_box \global\insidefloatfalse} \newdimen\availablefloatwidth \newdimen\availablefloatheight \def\strc_floats_set_local_hsize {\ifconditional\c_page_floats_center_box_local % also available check here? \seteffectivehsize \hsize\localhsize \else \doifinset\v!margin\floatlocation % brr, really needed! see wm will be redone {\hsize\namedmarginblockparameter\empty\c!width}% \fi \edef\p_availablewidth {\floatparameter\c!availablewidth }% \edef\p_availableheight{\floatparameter\c!availableheight}% \availablefloatwidth \ifx\p_availablewidth \empty\hsize\else\p_availablewidth \relax\fi \availablefloatheight\ifx\p_availableheight\empty\vsize\else\p_availableheight\relax\fi} \ifdefined\everyinsidefloat \else \newevery \everyinsidefloat \relax \fi \appendtoks \everyinsidefloat\emptytoks % in case it's called earlier \strc_float_load_data \to \everyinsidefloat \def\doifrightpagefloatelse {\ifdoublesided \ifsinglesided \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\doifoddfloatpageelse \fi \else \expandafter\firstoftwoarguments \fi} \def\doifoddfloatpageelse {\ifodd\purenumber\strc_float_realpage\space \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \appendtoks \let\rightorleftpageaction\doifrightpagefloatelse \to \everyinsidefloat % \let\movesidefloat\gobbleoneargument % new : \place...[leftmargin,-2*line]; we need to catch fxtb:2*3 % watch out: line alone aligns on the line ! ! ! \unexpanded\def\movesidefloat[#settings]% (-)n*line|x=,y= {\global\d_page_sides_downshift \zeropoint \global\d_page_sides_extrashift\zeropoint \doifassignmentelse{#settings}% {\begingroup \setupcurrentfloat[\c!x=\zeropoint,\c!y=\zeropoint,#settings]% \ifgridsnapping \getnoflines{\floatparameter\c!y}% \global\d_page_sides_downshift\noflines\lineheight \else \global\d_page_sides_downshift\floatparameter\c!y \fi \global\d_page_sides_extrashift\floatparameter\c!x \endgroup} {\movedownsidefloat[#settings]}} \installcorenamespace{floatmovement} \setvalue{\??floatmovement \v!line}{\strc_floats_move_down_line+} \setvalue{\??floatmovement+\v!line}{\strc_floats_move_down_line+} \setvalue{\??floatmovement-\v!line}{\strc_floats_move_down_line-} \setvalue{\??floatmovement \v!hang}{\strc_floats_move_down_hang\plusone} \setvalue{\??floatmovement+\v!hang}{\strc_floats_move_down_hang\plusone} \setvalue{\??floatmovement-\v!hang}{\strc_floats_move_down_hang\minusone} \def\strc_floats_move_down#setting% {\csname\??floatmovement \ifcsname\??floatmovement#setting\endcsname#setting\fi \endcsname} \def\strc_floats_move_down_line#sign% {\if!!donea \else \global\d_page_sides_downshift\zeropoint \!!doneatrue \fi \global\advance\d_page_sides_downshift#sign\lineheight} \def\strc_floats_move_down_hang#lines% {\if!!doneb \else \global\c_page_sides_n_of_lines\zerocount \!!donebtrue \fi \global\advance\c_page_sides_n_of_lines#lines\relax} \unexpanded\def\movedownsidefloat[#settings]% already in core {\doifnotinstring{:}{#settings} {\begingroup \!!doneafalse \!!donebfalse \normalexpanded{\dorepeatwithcommand[#settings]}\strc_floats_move_down \endgroup}} \unexpanded\def\hangsidefloat[#number]% {\global\c_page_sides_n_of_lines#number\relax} \def\strc_floats_set_extra_action#rightpagelocation#leftpagelocation% {\rightorleftpageaction {\let\extrafloatlocation#rightpagelocation}% {\let\extrafloatlocation#leftpagelocation}} \installcorenamespace{extrafloataction} \setvalue{\??extrafloataction \v!inner}#1{\strc_floats_set_extra_action\v!left \v!right} \setvalue{\??extrafloataction \v!outer}#1{\strc_floats_set_extra_action\v!right \v!left} \setvalue{\??extrafloataction\v!innermargin}#1{\strc_floats_set_extra_action\v!leftmargin \v!rightmargin} \setvalue{\??extrafloataction\v!outermargin}#1{\strc_floats_set_extra_action\v!rightmargin\v!leftmargin} \setvalue{\??extrafloataction \v!inneredge}#1{\strc_floats_set_extra_action\v!leftedge \v!rightedge} \setvalue{\??extrafloataction \v!outeredge}#1{\strc_floats_set_extra_action\v!rightedge \v!leftedge} \setvalue{\??extrafloataction \v!backspace}#1{\strc_floats_set_extra_action\v!backspace \v!cutspace} \setvalue{\??extrafloataction \v!cutspace}#1{\strc_floats_set_extra_action\v!cutspace \v!backspace} %setvalue{\??extrafloataction \v!margin}#1{\strc_floats_set_extra_action\v!cutspace \v!backspace} \setvalue{\??extrafloataction \v!left}#1{\strc_floats_set_extra_action\v!left \v!left} \setvalue{\??extrafloataction \v!right}#1{\strc_floats_set_extra_action\v!right \v!right} \setvalue{\??extrafloataction \v!line}#1{} % only -n*line is handled (see ***) \setvalue{\??extrafloataction \s!unknown}#1{\movedownsidefloat[#1]} \def\strc_floats_check_extra_actions % less tracingthis way .... {\doifnotinset\v!text\floatlocation % fuzzy, text overloads left, since then it's a directive {\let\extrafloatlocation\empty % \d_page_sides_downshift will be reset afterwards, and can % already be set at this point \processcommacommand[\floatlocation]\strc_floats_check_extra_actions_step \ifx\extrafloatlocation\empty \else \edef\floatlocation{\extrafloatlocation,\floatlocation}% \fi}} \def\strc_floats_check_extra_actions_step#step% {\csname\??extrafloataction \ifcsname\??extrafloataction#step\endcsname#step\else\s!unknown\fi \endcsname{#step}} % pas op, maxbreedte niet instellen als plaats=links/rechts \def\strc_floats_set_local_dimensions {\global\d_page_sides_shift \zeropoint % duplicate \global\d_page_sides_maximum\zeropoint\relax % duplicate \ifdim\d_page_sides_downshift=\zeropoint\else \global\setbox\floatbox\vbox {\vskip\d_page_sides_downshift \nointerlineskip \box\floatbox}% \fi \edef\p_minwidth{\floatparameter\c!minwidth}% \ifx\p_minwidth\empty % nothing \else \scratchwidth\p_minwidth\relax \ifdim\wd\floatbox<\scratchwidth \strc_floats_realign_floatbox_horizontal_two \fi \fi % we can also support edges .. in that case no common but a fast loop \doifinsetelse\v!hanging\floatlocation {\doifcommonelse{\v!inleft,\v!leftmargin}\floatlocation {\let\p_maxwidth\leftmarginwidth}% {\doifcommonelse{\v!inright,\v!rightmargin}\floatlocation {\let\p_maxwidth\rightmarginwidth}% {\edef\p_maxwidth{\floatparameter\c!maxwidth}}}}% {\edef\p_maxwidth{\floatparameter\c!maxwidth}}% \ifx\p_maxwidth\empty % nothing \else \scratchwidth\p_maxwidth\relax \ifdim\wd\floatbox>\scratchwidth \doifcommonelse{\v!inright,\v!rightmargin,\v!rightedge,\v!inleft,\v!leftmargin,\v!leftedge}\floatlocation {\global\d_page_sides_maximum\scratchwidth} {\doifcommonelse{\v!right,\v!left}\floatlocation \strc_floats_realign_floatbox_horizontal_one \strc_floats_realign_floatbox_horizontal_two}% \fi \fi} \def\strc_floats_realign_floatbox_horizontal_one {\global\setbox\floatbox\hbox to \scratchwidth {\doifnotinset\v!right\floatlocation\hss \box\floatbox \doifnotinset\v!left \floatlocation\hss}} \def\strc_floats_realign_floatbox_horizontal_two {\global\setbox\floatbox\hbox to \scratchwidth {\doifnot{\floatparameter\c!location}\v!left \hss \box\floatbox \doifnot{\floatparameter\c!location}\v!right\hss}} \unexpanded\def\placefloats {\page_otr_command_flush_floats} \newdimen\d_strc_floats_margin \newdimen\d_strc_floats_top \newdimen\d_strc_floats_bottom \def\strc_floats_calculate_skip#target#skip% {\edef\askedfloatskip{#skip}% \ifx\askedfloatskip\empty \global#target\zeropoint \else\ifx\askedfloatskip\v!none \global#target\zeropoint \else \setbox\scratchbox\vbox{\whitespace\blank[\askedfloatskip]}% todo: move whitespace inside blank \global#target\ht\scratchbox \fi\fi} \def\strc_floats_calculate_skips {\begingroup \strc_floats_calculate_skip\d_strc_floats_top {\rootfloatparameter\c!spacebefore }% \strc_floats_calculate_skip\d_strc_floats_bottom {\rootfloatparameter\c!spaceafter }% \strc_floats_calculate_skip\d_page_sides_topskip {\rootfloatparameter\c!sidespacebefore}% \strc_floats_calculate_skip\d_page_sides_bottomskip{\rootfloatparameter\c!sidespaceafter }% \global\d_strc_floats_margin \rootfloatparameter\c!margin \global\d_page_sided_leftshift \floatparameter \c!leftmargindistance \global\d_page_sided_rightshift\floatparameter \c!rightmargindistance \global\c_page_floats_n_of_top \rootfloatparameter\c!ntop \global\c_page_floats_n_of_bottom \rootfloatparameter\c!nbottom \endgroup} \unexpanded\def\betweenfloatblanko % assumes that spaceafter is present {\blank[\rootfloatparameter\c!spacebefore]} % or v!back,.... \unexpanded\def\doplacefloatbox % used elsewhere {%\forgetall % NO \whitespace \blank[\rootfloatparameter\c!spacebefore] \page_otr_command_flush_float_box \blank[\rootfloatparameter\c!spaceafter]} % test case: % % \placefigure[page,none]{}{\blackrule[width=\textwidth,height=0.9\textheight,color=green]} % \placefigure[page,none]{}{\blackrule[width=\textwidth,height=1.0\textheight,color=green]} % \placefigure[page,none]{}{\blackrule[width=\textwidth,height=1.1\textheight,color=green]} % the [#1] will go away \def\page_one_place_float_text % this macro should be defined elsewhere {%\checkwaitingfloats\floatlocationmethod % todo: check if #1 is indeed \floatlocation or maybe more \global\floatwidth \wd\floatbox \global\floatheight \ht\floatbox % forget about the depth \global\floattextwidth\dimexpr\hsize-\floatwidth-\rootfloatparameter\c!margin\relax \edef\floatlocation{\floatlocationmethod}% to be sure .. why \doifinsetelse\v!tall\floatlocationmethod {\floattextheight\dimexpr\pagegoal-\pagetotal-\bigskipamount\relax % ugly, this bigskip \ifdim\floattextheight>\textheight \floattextheight\textheight \fi \boxmaxdepth\zeropoint\relax % toegevoegd \ifdim\floattextheight<\floatheight \floattextheight\floatheight \fi \setbox\floattext\vbox to \floattextheight} {\setbox\floattext\vbox}% \bgroup \forgetall \setupblank \setupwhitespace % new, also needed for footnotes \blank[\v!disable] \hsize\floattextwidth \ignorespaces} \def\strc_floats_stop_text_indeed {\egroup \doifnotinset\v!tall\floatlocation {\floattextheight\ifdim\ht\floattext<\floatheight\floatheight\else\ht\floattext\fi}% \setbox\floatbox\vbox to \floattextheight {\hsize\floatwidth \doifinsetelse\v!both\floatlocation {\doifinsetelse\v!low\floatlocation {\vfill\box\floatbox} {\doifinsetelse\v!middle\floatlocation {\vfill\box\floatbox\vfill} {\box\floatbox\vfill}}} {\box\floatbox\vfill}}% \setbox\floattext\vbox to \floattextheight {\hsize\floattextwidth \doifinsetelse\v!low\floatlocation {\vfill \box\floattext \doifinset\c!offset\floatlocation{\whitespace\blank}} {\doifinsetelse\v!middle\floatlocation {\vfill \box\floattext \vfill} {\doifinset\v!offset\floatlocation{\whitespace\blank}% \box\floattext \vfill}}}% \doifinsetelse\v!right\floatlocation {\setbox\floatbox\hbox to \hsize {\box\floattext \hfill \box\floatbox}} {\setbox\floatbox\hbox to \hsize {\box\floatbox \hfill \box\floattext}}% \baselinecorrection \whitespace \blank[\rootfloatparameter\c!spacebefore]% \doifnotinset\v!tall\floatlocation {\dp\floatbox\openstrutdepth}% dp\strutbox}% % toegevoegd \box\floatbox \dostoptagged \blank[\rootfloatparameter\c!spaceafter]% \strc_floats_end_text_group \page_floats_report_total} \def\borderedfloatbox {\begingroup \setupcurrentfloat[\c!location=\v!normal,\c!width=\v!fit,\c!height=\v!fit]% \inheritedfloatframed{\box\floatbox}% \endgroup} % minwidth=fit,width=max : no overshoot, as wide as graphic \def\strc_floats_align_content_indeed {\alignstrutmode\zerocount \doifnotcommon{\floatcaptionparameter\c!location}{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin} {\shiftalignedline {\floatparameter\c!leftmargin }{\floatparameter\c!rightmargin}% {\floatparameter\c!innermargin}{\floatparameter\c!outermargin}}% \alignedline{\floatparameter\c!location}\v!middle} \def\strc_floats_align_caption_indeed {\alignstrutmode\zerocount \shiftalignedline {\floatcaptionparameter\c!leftmargin }{\floatcaptionparameter\c!rightmargin}% {\floatcaptionparameter\c!innermargin}{\floatcaptionparameter\c!outermargin}% \alignedline{\floatparameter\c!location}\v!middle} \newdimen\d_strc_floats_content \newdimen\d_strc_float_temp_height \newdimen\d_strc_float_temp_width \def\captionminwidth {15\bodyfontsize} \def\captionovershoot{2\emwidth} \def\strc_floats_set_page_variant {\bgroup \strc_floats_set_local_hsize \ifcase\c_strc_floats_rotation\else \swapdimens\hsize\vsize \fi \forgetall \postponenotes \dontcomplain \setbox\b_strc_floats_content\vbox{\borderedfloatbox}% \let\strc_floats_align_content\strc_floats_align_content_indeed \let\strc_floats_align_caption\strc_floats_align_caption_indeed \strc_floats_check_caption_content \d_strc_floats_content\wd\b_strc_floats_content \ifcase\floatparameter\c!method % nothing \or % automatic \ifnofloatcaption \strc_floats_prepare_no_caption %\page_backgrounds_add_local_to_box\floatbox % was \doglobal but not needed \else % todo: installable maken, variant/method=auto vs macro \strc_floats_prepare_page_caption %\page_backgrounds_add_local_to_box\b_strc_floats_content \setbox\b_strc_floats_caption\hbox {\floatcaptionparameter\c!command{\box\b_strc_floats_caption}}% \moveboxontogrid\b_strc_floats_caption{\floatcaptionparameter\c!grid}\d_strc_floats_caption_height %\page_backgrounds_add_local_to_box\b_strc_floats_caption \strc_floats_build_box \fi \or % semi automatic \or % manual \fi \ifcase\c_strc_floats_rotation \doifnotinset\v!margin\floatlocation % brr, really needed! see wm {\postcenterfloatbox\d_strc_floats_content}% \else \global\setbox\floatbox\vbox {\rotate[\c!rotation=\number\c_strc_floats_rotation]{\box\floatbox}}% \fi \egroup} \def\strc_floats_prepare_no_caption {\global\setbox\floatbox\vbox % pas op als wd groter dan hsize {\ifinsidecolumns\ifdim\wd\b_strc_floats_content>\hsize \let\strc_floats_align_content\relax \fi\fi \strc_floats_align_content{\copy\b_strc_floats_content}}} \def\strc_floats_prepare_page_caption {\edef\p_strc_floats_caption_location{\floatcaptionparameter\c!location}% \edef\p_strc_floats_caption_width {\floatcaptionparameter\c!width}% \edef\p_strc_floats_caption_minwidth{\floatcaptionparameter\c!minwidth}% \edef\p_strc_floats_caption_align {\floatcaptionparameter\c!align}% \dostarttagged\t!floatcaption\empty \ifx\p_strc_floats_caption_location\v!top \strc_floats_prepare_page_caption_top_bottom \else\ifx\p_strc_floats_caption_location\v!bottom \strc_floats_prepare_page_caption_top_bottom \else\ifx\p_strc_floats_caption_width\v!fit \strc_floats_prepare_side_auto_caption \else\ifx\p_strc_floats_caption_width\v!max \strc_floats_prepare_side_auto_caption \else \strc_floats_prepare_side_width_caption \fi\fi\fi\fi \dostoptagged} \def\strc_floats_prepare_page_caption_top_bottom {\ifx\p_strc_floats_caption_width\v!fit \strc_floats_prepare_page_caption_top_bottom_fit_max \else\ifx\p_strc_floats_caption_width\v!max \strc_floats_prepare_page_caption_top_bottom_fit_max \else \strc_floats_prepare_side_width_caption % new, special effects (see icare) \fi\fi} \def\strc_floats_prepare_page_caption_top_bottom_fit_max {\ifx\p_strc_floats_caption_minwidth\v!fit \ifx\p_strc_floats_caption_width\v!max \strc_floats_prepare_stack_caption_max \else\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content % wider caption \ifx\p_strc_floats_caption_width\v!fit \strc_floats_prepare_stack_caption_auto \else \strc_floats_prepare_stack_caption_width \fi \else \strc_floats_prepare_stack_caption_min \fi\fi \else \strc_floats_prepare_stack_caption_fixed \fi} \def\strc_floats_caption_set_align {\normalexpanded{\setupalign[\v!reset,\p_strc_floats_caption_align]}} \def\strc_floats_prepare_side_auto_caption {\scratchdimen\dimexpr\hsize-\wd\b_strc_floats_content-\floatparameter\c!margin\relax \ifdim\wd\b_strc_floats_caption>\scratchdimen \ifdim\wd\b_strc_floats_caption<1.3\scratchdimen \scratchdimen0.8\scratchdimen \fi \fi \setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\scratchdimen \strc_floats_make_complete_caption}} \def\strc_floats_prepare_side_width_caption {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\floatcaptionparameter\c!width \strc_floats_make_complete_caption}} \def\strc_floats_prepare_stack_caption_fixed {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\floatcaptionparameter\c!minwidth % special effects \strc_floats_make_complete_caption}} \def\strc_floats_prepare_stack_caption_max {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\wd\b_strc_floats_content \strc_floats_make_complete_caption}} \def\strc_floats_prepare_stack_caption_width {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\floatcaptionparameter\c!width \strc_floats_make_complete_caption}} \def\strc_floats_prepare_stack_caption_min {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\wd\b_strc_floats_content \ifx\p_strc_floats_caption_align\empty \raggedcenter % on purpose overloads align ! \fi \strc_floats_make_complete_caption}} \def\strc_floats_prepare_stack_caption_auto {\ifx\p_strc_floats_caption_align\empty \else \doifnotinset\v!middle\p_strc_floats_caption_align{\let\captionovershoot\!!zeropoint}% \fi \edef\captionhsize{\the\wd\b_strc_floats_content}% \ifdim\captionhsize>\hsize % float is wider than \hsize \setbox\b_strc_floats_caption\vbox {\settrialtypesetting \strc_floats_caption_set_align \hsize\captionhsize \notesenabledfalse \strc_floats_make_complete_caption}% \ifdim\ht\scratchbox>\lineheight % more lines \setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\dimexpr\captionhsize-\captionovershoot\relax \ifdim\hsize<\captionminwidth\relax \hsize\captionhsize \fi \strc_floats_make_complete_caption}% \else \setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\captionhsize \strc_floats_make_complete_caption}% \fi \else % float is smaller of equal to \hsize \ifdim\captionhsize<\captionminwidth\relax \scratchdimen\captionminwidth % float smaller than min width \edef\captionhsize{\the\scratchdimen}% \fi \setbox\scratchbox\vbox % test with overshoot {\settrialtypesetting \scratchdimen\dimexpr\captionhsize+\captionovershoot+3\emwidth\relax % 3em is an average word length \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi \notesenabledfalse \strc_floats_make_complete_caption}% \ifdim\ht\scratchbox>\lineheight % at least an average word longer than a line \setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \scratchdimen\dimexpr\captionhsize+\captionovershoot\relax \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi \strc_floats_make_complete_caption}% \else\ifx\p_strc_floats_caption_align\empty \setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\captionhsize \raggedcenter % overloads \strc_floats_make_complete_caption}% \else \setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\captionhsize \strc_floats_make_complete_caption}% \fi\fi \fi} \def\strc_floats_between_stack {\endgraf \nointerlineskip \floatcaptionparameter\c!inbetween \endgraf} \def\strc_floats_build_box_default % done {\strc_floats_align_content{\box\b_strc_floats_content}} \def\strc_floats_build_box_next_right#1% {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi {\d_strc_float_temp_height\ht\b_strc_floats_content \box\b_strc_floats_content \doifnotinset\v!hang{\floatcaptionparameter\c!location} {\dotfskip{\floatcaptionparameter\c!distance}}% \vbox to\d_strc_float_temp_height{#1}}} \def\strc_floats_build_box_next_left#1% {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi {\d_strc_float_temp_height\ht\b_strc_floats_content \vbox to\d_strc_float_temp_height{#1}% \doifnotinset\v!hang{\floatcaptionparameter\c!location} {\dotfskip{\floatcaptionparameter\c!distance}}% \box\b_strc_floats_content}} \def\strc_floats_build_box_next_outer {\doifrightpagefloatelse\strc_floats_build_box_next_right\strc_floats_build_box_next_left} \def\strc_floats_build_box_next_inner {\doifrightpagefloatelse\strc_floats_build_box_next_left\strc_floats_build_box_next_right} \def\strc_floats_build_box_next_right_hang#1% {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi {\d_strc_float_temp_height\ht\b_strc_floats_content \box\b_strc_floats_content \vbox to\d_strc_float_temp_height{#1}}} \def\strc_floats_build_box_next_left_hang#1% {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi {\d_strc_float_temp_height\ht\b_strc_floats_content \vbox to\d_strc_float_temp_height{#1}% \box\b_strc_floats_content}} \def\strc_floats_build_box_next_right_margin_indeed#1#2% {\ifconditional\c_strc_floats_par_float \hbox\bgroup \d_strc_float_temp_height\ht\b_strc_floats_content \box\b_strc_floats_content \hsmash{\hskip#1\vbox to\d_strc_float_temp_height{#2}}% \egroup \else \begingroup \d_strc_float_temp_height\ht\b_strc_floats_content \everyrightofalignedline{\hsmash{\hskip#1\vbox to\d_strc_float_temp_height{#2}}}% \strc_floats_align_content{\box\b_strc_floats_content}% \endgroup \fi} \def\strc_floats_build_box_next_left_margin_indeed#1#2% {\ifconditional\c_strc_floats_par_float \hbox\bgroup \d_strc_float_temp_height\ht\b_strc_floats_content \hsmash{\hskip-\dimexpr#1+\wd\b_strc_floats_caption\relax\vbox to\d_strc_float_temp_height{#2}}% \box\b_strc_floats_content \egroup \else \begingroup \d_strc_float_temp_height\ht\b_strc_floats_content \everyleftofalignedline{\hsmash{\hskip-\dimexpr#1+\wd\b_strc_floats_caption\relax\vbox to\d_strc_float_temp_height{#2}}}% \strc_floats_align_content{\box\b_strc_floats_content}% \endgroup \fi} \def\strc_floats_build_box_next_right_margin {\strc_floats_build_box_next_right_margin_indeed\rightmargindistance} \def\strc_floats_build_box_next_left_margin {\strc_floats_build_box_next_left_margin_indeed \leftmargindistance } \def\strc_floats_build_box_next_outer_margin {\doifrightpagefloatelse {\strc_floats_build_box_next_right_margin_indeed\rightmargindistance} {\strc_floats_build_box_next_left_margin_indeed \rightmargindistance}} \def\strc_floats_build_box_next_inner_margin {\doifrightpagefloatelse {\strc_floats_build_box_next_left_margin_indeed \leftmargindistance} {\strc_floats_build_box_next_right_margin_indeed\leftmargindistance}} \def\strc_floats_build_box_next % beware, we first check on left/rightmargin because there can be left/right also {\let\next\strc_floats_build_box_next_left \processallactionsinset[\floatcaptionparameter\c!location] [ \v!outermargin=>\let\next\strc_floats_build_box_next_outer_margin, \v!innermargin=>\let\next\strc_floats_build_box_next_inner_margin, \v!leftmargin=>\let\next\strc_floats_build_box_next_left_margin, \v!rightmargin=>\let\next\strc_floats_build_box_next_right_margin, \v!lefthanging=>\let\next\strc_floats_build_box_next_left_hang, \v!righthanging=>\let\next\strc_floats_build_box_next_right_hang, \v!outer=>\let\next\strc_floats_build_box_next_outer, \v!inner=>\let\next\strc_floats_build_box_next_inner, \v!left=>\let\next\strc_floats_build_box_next_left, \v!right=>\let\next\strc_floats_build_box_next_right]% \next} \def\strc_floats_build_box_side {\ifconditional\c_strc_floats_par_float \let\next\strc_floats_build_box_high \else \let\next\strc_floats_build_box_middle \processallactionsinset[\floatcaptionparameter\c!location] [ \v!low=>\let\next\strc_floats_build_box_low, \v!middle=>\let\next\strc_floats_build_box_middle, \v!high=>\let\next\strc_floats_build_box_high]% \fi \next} \def\strc_floats_flush_right_caption_hang {\hsmash{\rlap{\dotfskip{\floatcaptionparameter\c!distance}\box\b_strc_floats_caption}}} \def\strc_floats_flush_left_caption_hang {\hsmash{\llap{\box\b_strc_floats_caption\dotfskip{\floatcaptionparameter\c!distance}}}} % \def\strc_floats_flush_caption_hang % expanded can go % {\expanded{\doifinsetelse{\v!righthanging}{\floatcaptionparameter\c!location}} % {\strc_floats_flush_right_caption_hang} % {\expanded{\doifinsetelse{\v!lefthanging}{\floatcaptionparameter\c!location}} % {\strc_floats_flush_left_caption_hang} % {\expanded{\doifinsetelse{\v!hang}{\floatcaptionparameter\c!location}} % {\expanded{\doifinsetelse{\v!outer}{\floatcaptionparameter\c!location}} % {\doifrightpagefloatelse{\strc_floats_flush_right_caption_hang}{\strc_floats_flush_left_caption_hang}} % {\expanded{\doifinsetelse{\v!right}{\floatcaptiondirectives}} % {\strc_floats_flush_right_caption_hang} % {\strc_floats_flush_left_caption_hang}}} % {\box\b_strc_floats_caption}}}} \def\strc_floats_flush_caption_hang % expanded can go {\edef\p_strc_floats_caption_location{\floatcaptionparameter\c!location}% \doifinsetelse\v!righthanging\p_strc_floats_caption_location {\strc_floats_flush_right_caption_hang} {\doifinsetelse\v!lefthanging\p_strc_floats_caption_location {\strc_floats_flush_left_caption_hang} {\doifinsetelse\v!hang\p_strc_floats_caption_location {\doifinsetelse\v!outer\p_strc_floats_caption_location {\doifrightpagefloatelse{\strc_floats_flush_right_caption_hang}{\strc_floats_flush_left_caption_hang}} {\doifinsetelse\v!right\floatcaptiondirectives {\strc_floats_flush_right_caption_hang} {\strc_floats_flush_left_caption_hang}}} {\box\b_strc_floats_caption}}}} \def\strc_floats_build_box_high {\strc_floats_build_box_next{\strc_floats_between_stack\strc_floats_flush_caption_hang\vfill}} \def\strc_floats_build_box_low {\strc_floats_build_box_next{\vfill\strc_floats_flush_caption_hang\strc_floats_between_stack}} \def\strc_floats_build_box_middle {\strc_floats_build_box_next{\vfill\box\b_strc_floats_caption\vfill}} % \definefloat % [lefty][lefties][figure] % \setupfloat % [lefty] % [default=left, % rightmargindistance=-2cm, % leftmargindistance=-2cm] % \setupcaption % [lefty] % [location={bottom,overlay}] % % \starttext % \placelefty{}{} \input tufte \input tufte % \placelefty{}{} \input tufte \input tufte % \stoptext \def\strc_floats_build_box_top_stack_normal_overlay {\vbox to \ht\b_strc_floats_content{\vss\strc_floats_build_box_top_stack_normal_content}} \def\strc_floats_build_box_top_stack_normal_content {\d_strc_float_temp_width\wd\b_strc_floats_content \ifconditional\c_strc_floats_par_float \hbox{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}% \strc_floats_between_stack \hbox{\hbox{\box\b_strc_floats_content}}% \else \page_otr_command_set_float_hsize \hbox{\strc_floats_locate_text_float{\box\b_strc_floats_caption}} \strc_floats_between_stack \hbox{\strc_floats_align_content{\box\b_strc_floats_content}}% \fi} \def\strc_floats_build_box_bottom_stack_normal_overlay {\vbox to \ht\b_strc_floats_content{\strc_floats_build_box_bottom_stack_normal_content\vss}} \def\strc_floats_build_box_bottom_stack_normal_content {\d_strc_float_temp_width\wd\b_strc_floats_content \ifconditional\c_strc_floats_par_float \hbox{\hbox{\box\b_strc_floats_content}}% \strc_floats_between_stack \hbox{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}% \else \page_otr_command_set_float_hsize \hbox{\strc_floats_align_content{\box\b_strc_floats_content}}% \strc_floats_between_stack \hbox{\strc_floats_locate_text_float{\box\b_strc_floats_caption}}% \fi} \def\strc_floats_build_box_top_stack_normal {\doifinsetelse\v!overlay{\floatcaptionparameter\c!location} \strc_floats_build_box_top_stack_normal_overlay \strc_floats_build_box_top_stack_normal_content} \def\strc_floats_build_box_bottom_stack_normal {\doifinset\v!overlay{\floatcaptionparameter\c!location} \strc_floats_build_box_bottom_stack_normal_overlay \strc_floats_build_box_bottom_stack_normal_content} \def\strc_floats_build_box_top_stack_grid {\dp\b_strc_floats_caption\strutdepth \setbox\scratchbox\vbox {\d_strc_float_temp_width\wd\b_strc_floats_content \ifconditional\c_strc_floats_par_float \strc_floats_locate_side_float{\box\b_strc_floats_caption}% \vss\strc_floats_between_stack \hbox{\box\b_strc_floats_content}% \else \page_otr_command_set_float_hsize \strc_floats_locate_text_float{\box\b_strc_floats_caption}% \vss\strc_floats_between_stack \strc_floats_align_content{\box\b_strc_floats_content}% \fi}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight{\unvbox\scratchbox}} \def\strc_floats_build_box_bottom_stack_grid {\dp\b_strc_floats_caption\strutdepth \setbox\scratchbox\vbox {\d_strc_float_temp_width\wd\b_strc_floats_content \ifconditional\c_strc_floats_par_float \hbox{\box\b_strc_floats_content}% \vss\strc_floats_between_stack \strc_floats_locate_side_float{\box\b_strc_floats_caption}% \else \page_otr_command_set_float_hsize \strc_floats_align_content{\box\b_strc_floats_content}% \vss\strc_floats_between_stack \strc_floats_locate_text_float{\box\b_strc_floats_caption}% \fi}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight{\unvbox\scratchbox}} \def\strc_floats_build_box_top_stack_stretch {\dp\b_strc_floats_caption\strutdepth \setbox\scratchbox\vbox {\strc_floats_align_caption{\copy\b_strc_floats_caption}% \strc_floats_align_content {\copy\b_strc_floats_content }}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight {\d_strc_float_temp_width\wd\b_strc_floats_content \ifconditional\c_strc_floats_par_float \strc_floats_locate_side_float{\box\b_strc_floats_caption}% \vss\strc_floats_between_stack\vss \hbox{\box\b_strc_floats_content}% \else \page_otr_command_set_float_hsize \strc_floats_locate_text_float{\box\b_strc_floats_caption}% \vss\strc_floats_between_stack\vss \strc_floats_align_content{\box\b_strc_floats_content}% \fi}} \def\strc_floats_build_box_bottom_stack_stretch {\dp\b_strc_floats_caption\strutdepth \setbox\scratchbox\vbox {\strc_floats_align_content{\copy\b_strc_floats_content }% \strc_floats_align_caption{\copy\b_strc_floats_caption}}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight {\d_strc_float_temp_width\wd\b_strc_floats_content \ifconditional\c_strc_floats_par_float \hbox{\box\b_strc_floats_content}% \vss\strc_floats_between_stack\vss \strc_floats_locate_side_float{\box\b_strc_floats_caption} \else \page_otr_command_set_float_hsize \strc_floats_align_content{\box\b_strc_floats_content}% \vss\strc_floats_between_stack\vss \strc_floats_locate_text_float{\box\b_strc_floats_caption}% \fi}} \def\strc_floats_build_box_top {\let\next\strc_floats_build_box_top_stack_normal \processfirstactioninset[\floatcaptionparameter\c!location] [ \v!grid=>\let\next\strc_floats_build_box_top_stack_grid, \v!stretch=>\let\next\strc_floats_build_box_top_stack_stretch]% \next} \def\strc_floats_build_box_bottom {\let\next\strc_floats_build_box_bottom_stack_normal \processfirstactioninset[\floatcaptionparameter\c!location] [ \v!grid=>\let\next\strc_floats_build_box_bottom_stack_grid, \v!stretch=>\let\next\strc_floats_build_box_bottom_stack_stretch]% \next} \def\strc_floats_relocate_caption_right#1{\strc_floats_align_caption{\hbox to \d_strc_float_temp_width{\hss#1}}} \def\strc_floats_relocate_caption_left #1{\strc_floats_align_caption{\hbox to \d_strc_float_temp_width{#1\hss}}} \unexpanded\def\installfloatboxbuilder#1#2{\setvalue{\??floatbuilder#1}{#2}} \def\strc_floats_build_box {\global\setbox\floatbox\vbox {\strc_floats_set_local_hsize \forgetall \let\floatcaptionarrangement\s!default \processcommacommand[\floatcaptionparameter\c!location]\strc_floats_build_box_step \executeifdefined{\??floatbuilder\floatcaptionarrangement}{\getvalue{\??floatbuilder\s!default}}}} \def\strc_floats_build_box_step#1% {\doifdefined{\??floatbuilder#1}{\def\floatcaptionarrangement{#1}\quitcommalist}} \def\strc_floats_locate_text_float {\let\next\strc_floats_align_caption \processallactionsinset[\floatcaptionparameter\c!location] [ \v!left=>\let\next\strc_floats_relocate_caption_left, \v!right=>\let\next\strc_floats_relocate_caption_right, \v!inner=>\doifrightpagefloatelse{\let\next\strc_floats_relocate_caption_left }{\let\next\strc_floats_relocate_caption_right}, \v!outer=>\doifrightpagefloatelse{\let\next\strc_floats_relocate_caption_right}{\let\next\strc_floats_relocate_caption_left }]% \next} \installfloatboxbuilder \v!none \strc_floats_build_box_default \installfloatboxbuilder \s!default \strc_floats_build_box_default \installfloatboxbuilder \v!high \strc_floats_build_box_high \installfloatboxbuilder \v!low \strc_floats_build_box_low \installfloatboxbuilder \v!middle \strc_floats_build_box_middle \installfloatboxbuilder \v!left \strc_floats_build_box_side \installfloatboxbuilder \v!right \strc_floats_build_box_side \installfloatboxbuilder \v!top \strc_floats_build_box_top \installfloatboxbuilder \v!bottom \strc_floats_build_box_bottom % \setuplayout[grid=yes] \showgrid \setupcaptions[style=smallbodyfont,location=grid,inbetween=] % % \starttext % test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=yes]} test \page % test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=yes]} test \page % test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=depth]} test \page % test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=depth]} test \page % \stoptext % This might move to page-flt: \newif\ifpostponecolumnfloats \postponecolumnfloatsfalse % don't change \setnewconstant\postcenterfloatmethod\plusone \def\postcenterfloatbox#1% {\scratchdimen \ifcase\postcenterfloatmethod #1% \wd\floatbox \or\ifinsidecolumns \ifpostponecolumnfloats\makeupwidth\else#1\fi \else\ifdim#1>\hsize \hsize \else \wd\floatbox \fi\fi\fi \global\setbox\floatbox\hbox to \scratchdimen % {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen ! % {\hss \box\floatbox\hss }} % wel \hss, anders mis in colset {\ifconditional\c_page_floats_center_box_global \donetrue \else\ifconditional\c_page_floats_center_box_local \donetrue \else \donefalse \fi\fi \ifdim\scratchdimen>\effectivehsize \donefalse \fi \hss\ifdone\hskip\effectiveleftskip\fi \box\floatbox \ifdone\hskip\effectiverightskip\fi\hss}} \def\strc_floats_set_paragraph_variant {\bgroup \forgetall \postponenotes \dontcomplain \setbox\b_strc_floats_content\vbox{\borderedfloatbox}% %\page_backgrounds_add_local_to_box\b_strc_floats_content \ifnofloatcaption \global\setbox\floatbox\vbox{\box\b_strc_floats_content}% \else \strc_floats_check_caption_content \strc_floats_prepare_side_caption \setbox\b_strc_floats_caption\hbox{\floatcaptionparameter\c!command{\box\b_strc_floats_caption}}% \moveboxontogrid\b_strc_floats_caption{\floatcaptionparameter\c!grid}\d_strc_floats_caption_height %\page_backgrounds_add_local_to_box\b_strc_floats_caption \strc_floats_build_side_box \fi \egroup} % \def\strc_floats_prepare_side_caption % {\dostarttagged\t!floatcaption\empty % \edef\p_strc_floats_caption_align{\floatcaptionparameter\c!align}% % \doifelse{\floatcaptionparameter\c!width}\v!max % {\setbox\b_strc_floats_caption\vbox % {\strc_floats_caption_set_align % \hsize\wd\b_strc_floats_content % \strc_floats_make_complete_caption}}% % {\doifelse{\floatcaptionparameter\c!width}\v!fit % {\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax % \setbox\b_strc_floats_caption\vbox % {\forgetall % needed? % \hsize\wd\b_strc_floats_content % \strc_floats_make_complete_caption}% % \else % \setbox\b_strc_floats_caption\hbox to \wd\b_strc_floats_content % {\hss\hbox{\strc_floats_make_complete_caption}\hss}% % \fi} % {\setbox\b_strc_floats_caption\vbox % {\strc_floats_caption_set_align % \hsize\floatcaptionparameter\c!width % \wd\b_strc_floats_content % \strc_floats_make_complete_caption}}}% % \dostoptagged} \def\strc_floats_prepare_side_caption {\dostarttagged\t!floatcaption\empty \edef\p_strc_floats_caption_width{\floatcaptionparameter\c!width}% \edef\p_strc_floats_caption_align{\floatcaptionparameter\c!align}% \ifx\p_strc_floats_caption_width\v!max \strc_floats_prepare_side_caption_max \else\ifx\p_strc_floats_caption_width\v!fit \strc_floats_prepare_side_caption_fit \else \strc_floats_prepare_side_caption_width \fi\fi \dostoptagged} % these could be \??floatpreparesidecaption \def\strc_floats_prepare_side_caption_max {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\wd\b_strc_floats_content \strc_floats_make_complete_caption}} \def\strc_floats_prepare_side_caption_fit {\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax \setbox\b_strc_floats_caption\vbox {\forgetall % needed? \hsize\wd\b_strc_floats_content \strc_floats_make_complete_caption}% \else \setbox\b_strc_floats_caption\hbox to \wd\b_strc_floats_content {\hss\hbox{\strc_floats_make_complete_caption}\hss}% \fi} \def\strc_floats_prepare_side_caption_width {\setbox\b_strc_floats_caption\vbox {\strc_floats_caption_set_align \hsize\p_strc_floats_caption_width % \wd\b_strc_floats_content \strc_floats_make_complete_caption}} % % maybe (but then also prepare_page that way): % % \installcorenamespace{floatpreparesidecaption} % % \def\strc_floats_prepare_side_caption % {\dostarttagged\t!floatcaption\empty % \edef\p_strc_floats_caption_width{\floatcaptionparameter\c!width}% % \edef\p_strc_floats_caption_align{\floatcaptionparameter\c!align}% % \expandnamespacemacro\??floatpreparesidecaption\p_strc_floats_caption_width\s!unknown % \dostoptagged} % % \setvalue{\??floatpreparesidecaption\v!max}% % {\setbox\b_strc_floats_caption\vbox % {\strc_floats_caption_set_align % \hsize\wd\b_strc_floats_content % \strc_floats_make_complete_caption}} % % \setvalue{\??floatpreparesidecaption\v!fit}% % {\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax % \setbox\b_strc_floats_caption\vbox % {\forgetall % needed? % \hsize\wd\b_strc_floats_content % \strc_floats_make_complete_caption}% % \else % \setbox\b_strc_floats_caption\hbox to \wd\b_strc_floats_content % {\hss\hbox{\strc_floats_make_complete_caption}\hss}% % \fi} % % \setvalue{\??floatpreparesidecaption\s!unknown}% % {\setbox\b_strc_floats_caption\vbox % {\strc_floats_caption_set_align % \hsize\p_strc_floats_caption_width % \wd\b_strc_floats_content % \strc_floats_make_complete_caption}} \def\strc_floats_locate_side_float#1% {\begingroup \alignstrutmode\zerocount \hsize\d_strc_float_temp_width \forgetall \alignedline{\floatparameter\c!location}\v!middle{#1}% \endgroup} \def\strc_floats_build_side_box {\let\strc_floats_align_content\relax \let\strc_floats_align_caption\relax \strc_floats_build_box} \def\strc_floats_set_box % todo : \global\setbox, currently messy {\ifvisible \par \edef\floatcaptiondirectives{\floatparameter\c!location,\floatcaptionparameter\c!location}% \ifconditional\c_strc_floats_par_float \strc_floats_set_paragraph_variant \else \strc_floats_set_page_variant \fi \strc_floats_set_local_dimensions \global\advance\totalnoffloats\plusone \setbox\floatbox\hbox{\strc_float_save_data\box\floatbox}% still needed? we will do renumbering differently \global\floatheight\htdp\floatbox \global\floatwidth\wd\floatbox \doifnotinset\v!margin\floatlocation % gaat namelijk nog fout {\setbox\floatbox\vbox {\parindent\zeropoint \box\floatbox}}% \wd\floatbox\floatwidth \ifdim\dimexpr\floatheight+\lineheight\relax<\textheight \else \global\floatheight\dimexpr\textheight-\lineheight\relax \ht\floatbox\floatheight \dp\floatbox\zeropoint \showmessage\m!floatblocks{10}{\the\totalnoffloats}% \fi \fi} % \def\dooutput{\sidefloatoutput} % redefinition of \dooutput \definefloat [\v!figure] [\v!figures] \definefloat [\v!table] [\v!tables] \setupfloat [\v!table] [\c!frame=\v!off] \definefloat [\v!intermezzo] [\v!intermezzi] \definefloat [\v!graphic] [\v!graphics] % float strategy, replaces some of the above macros \installcorenamespace{floatmethods} \let\floatmethod \empty % set by lua \let\floatlabel \empty % set by lua \let\floatcolumn \empty % set by lua \let\floatrow \empty % set by lua \let\forcedfloatmethod\empty % set by lua \def\setfloatmethodvariables#1% \floatmethod \floatlabel \floatrow \floatcolumn {\ctxcommand{analysefloatmethod("#1")}} \def\somesomewherefloat[#1]% {\page_floats_save_somewhere_float\s!somewhere{#1}} \def\strc_floats_get_box {\ifvisible % \let\floatlabel \empty % \let\floatcolumn\empty % \let\floatrow \empty % \setfloatmethodvariables\floatlocation % todo: nog algemeen otr \ifdefined\OTRSETsetpreferedcolumnslot \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow \fi \ifcsname\??floatmethods\currentoutputroutine:\floatmethod\endcsname \else \let\floatmethod\v!here \fi \ifx\forcedfloatmethod\empty \else \let\floatmethod\forcedfloatmethod \fi % [] will go \edef\floatlocationmethod{\floatmethod,\floatlocation}% \csname\??floatmethods\currentoutputroutine:\floatmethod\endcsname \fi} \installcorenamespace{floatsettings} \unexpanded\def\installfloatmethod#1#2#3% routine keyword handler {\setvalue{\??floatmethods#1:#2}{#3}} \unexpanded\def\handlefloatmethod#1% {\csname\??floatmethods\currentoutputroutine:#1\endcsname} % \unexpanded\def\installfloatmethod#1#2#3% routine keyword handler % {\ifcsname\??floatsettings#1:#2\endcsname \else % \expandafter\newtoks\csname\??floatsettings#1:#2\endcsname % \fi % \setvalue{\??floatmethods#1:#2}{#3}} % % \unexpanded\def\startfloatmethodsettings#1#2 #3\stopfloatmethodsettings % {\csname\??floatsettings#1:#2\endcsname\expandafter{\the\csname\??floatsettings#1:#2\endcsname#3}} % % \let\stopfloatmethodsettings\relax % % \unexpanded\def\applyfloatmethodsettings#1#2{\the\??floatsettings#1:#2\endcsname} \definesystemconstant{tblr} \definesystemconstant{lrtb} \definesystemconstant{tbrl} \definesystemconstant{rltb} \definesystemconstant{btlr} \definesystemconstant{lrbt} \definesystemconstant{btrl} \definesystemconstant{rlbt} \definesystemconstant{fxtb} \definesystemconstant{fxbt} \definesystemconstant{fixd} \installfloatmethod \s!singlecolumn \v!here \page_one_place_float_here \installfloatmethod \s!singlecolumn \v!force \page_one_place_float_force \installfloatmethod \s!singlecolumn \v!left \page_one_place_float_left \installfloatmethod \s!singlecolumn \v!right \page_one_place_float_right \installfloatmethod \s!singlecolumn \v!text \page_one_place_float_text \installfloatmethod \s!singlecolumn \v!top \page_one_place_float_top \installfloatmethod \s!singlecolumn \v!bottom \page_one_place_float_bottom \installfloatmethod \s!singlecolumn \v!auto \page_one_place_float_auto \installfloatmethod \s!singlecolumn \v!margin \page_one_place_float_margin \installfloatmethod \s!singlecolumn \v!opposite \page_one_place_float_face \installfloatmethod \s!singlecolumn \v!page \page_one_place_float_page \installfloatmethod \s!singlecolumn \v!leftpage \page_one_place_float_leftpage \installfloatmethod \s!singlecolumn \v!rightpage \page_one_place_float_rightpage \installfloatmethod \s!singlecolumn \v!inmargin \page_one_place_float_inmargin \installfloatmethod \s!singlecolumn \v!inleft \page_one_place_float_leftmargin \installfloatmethod \s!singlecolumn \v!inright \page_one_place_float_rightmargin \installfloatmethod \s!singlecolumn \v!leftmargin \page_one_place_float_leftmargin \installfloatmethod \s!singlecolumn \v!rightmargin \page_one_place_float_rightmargin \installfloatmethod \s!singlecolumn \v!leftedge \page_one_place_float_leftedge \installfloatmethod \s!singlecolumn \v!rightedge \page_one_place_float_rightedge \installfloatmethod \s!singlecolumn \v!somewhere \page_one_place_float_somewhere \installfloatmethod \s!singlecolumn \v!backspace \page_one_place_float_backspace \installfloatmethod \s!singlecolumn \v!cutspace \page_one_place_float_cutspace \installfloatmethod \s!singlecolumn \s!tblr \page_one_place_float_top \installfloatmethod \s!singlecolumn \s!lrtb \page_one_place_float_top \installfloatmethod \s!singlecolumn \s!tbrl \page_one_place_float_top \installfloatmethod \s!singlecolumn \s!fxtb \page_one_place_float_top \installfloatmethod \s!singlecolumn \s!rltb \page_one_place_float_top \installfloatmethod \s!singlecolumn \s!btlr \page_one_place_float_bottom \installfloatmethod \s!singlecolumn \s!lrbt \page_one_place_float_bottom \installfloatmethod \s!singlecolumn \s!btrl \page_one_place_float_bottom \installfloatmethod \s!singlecolumn \s!rlbt \page_one_place_float_bottom \installfloatmethod \s!singlecolumn \s!fxbt \page_one_place_float_bottom \installfloatmethod \s!singlecolumn \s!fixd \page_one_place_float_force \installfloatmethod \s!multicolumn \v!here \page_mul_place_float_here \installfloatmethod \s!multicolumn \v!force \page_mul_place_float_force %installfloatmethod \s!multicolumn \v!left %installfloatmethod \s!multicolumn \v!right %installfloatmethod \s!multicolumn \v!text \installfloatmethod \s!multicolumn \v!top \page_mul_place_float_top \installfloatmethod \s!multicolumn \v!bottom \page_mul_place_float_bottom %installfloatmethod \s!multicolumn \v!auto %installfloatmethod \s!multicolumn \v!margin %installfloatmethod \s!multicolumn \v!opposite %installfloatmethod \s!multicolumn \v!page %installfloatmethod \s!multicolumn \v!leftpage %installfloatmethod \s!multicolumn \v!rightpage %installfloatmethod \s!multicolumn \v!inmargin %installfloatmethod \s!multicolumn \v!inleft %installfloatmethod \s!multicolumn \v!inright %installfloatmethod \s!multicolumn \v!leftmargin %installfloatmethod \s!multicolumn \v!rightmargin %installfloatmethod \s!multicolumn \v!leftedge %installfloatmethod \s!multicolumn \v!rightedge %installfloatmethod \s!multicolumn \v!somewhere %installfloatmethod \s!multicolumn \v!backspace %installfloatmethod \s!multicolumn \v!cutspace %installfloatmethod \s!multicolumn \s!tblr %installfloatmethod \s!multicolumn \s!lrtb %installfloatmethod \s!multicolumn \s!tbrl %installfloatmethod \s!multicolumn \s!rltb %installfloatmethod \s!multicolumn \s!fxtb %installfloatmethod \s!multicolumn \s!btlr %installfloatmethod \s!multicolumn \s!lrbt %installfloatmethod \s!multicolumn \s!btrl %installfloatmethod \s!multicolumn \s!rlbt %installfloatmethod \s!multicolumn \s!fxbt %installfloatmethod \s!multicolumn \s!fixd \installfloatmethod \s!columnset \v!here \page_set_place_float_here \installfloatmethod \s!columnset \v!force \page_set_place_float_force %installfloatmethod \s!columnset \v!left %installfloatmethod \s!columnset \v!right %installfloatmethod \s!columnset \v!text \installfloatmethod \s!columnset \v!top \page_set_place_float_top \installfloatmethod \s!columnset \v!bottom \page_set_place_float_bottom %installfloatmethod \s!columnset \v!auto %installfloatmethod \s!columnset \v!margin %installfloatmethod \s!columnset \v!opposite \installfloatmethod \s!columnset \v!page \page_set_place_float_page %installfloatmethod \s!columnset \v!leftpage %installfloatmethod \s!columnset \v!rightpage %installfloatmethod \s!columnset \v!inmargin %installfloatmethod \s!columnset \v!inleft %installfloatmethod \s!columnset \v!inright %installfloatmethod \s!columnset \v!leftmargin %installfloatmethod \s!columnset \v!rightmargin %installfloatmethod \s!columnset \v!leftedge %installfloatmethod \s!columnset \v!rightedge %installfloatmethod \s!columnset \v!somewhere %installfloatmethod \s!columnset \v!backspace %installfloatmethod \s!columnset \v!cutspace \installfloatmethod \s!columnset \s!tblr \page_set_place_float_slot \installfloatmethod \s!columnset \s!lrtb \page_set_place_float_slot \installfloatmethod \s!columnset \s!tbrl \page_set_place_float_slot \installfloatmethod \s!columnset \s!rltb \page_set_place_float_slot \installfloatmethod \s!columnset \s!fxtb \page_set_place_float_slot \installfloatmethod \s!columnset \s!btlr \page_set_place_float_slot \installfloatmethod \s!columnset \s!lrbt \page_set_place_float_slot \installfloatmethod \s!columnset \s!btrl \page_set_place_float_slot \installfloatmethod \s!columnset \s!rlbt \page_set_place_float_slot \installfloatmethod \s!columnset \s!fxbt \page_set_place_float_slot \installfloatmethod \s!columnset \s!fixd \page_set_place_float_force %D Local floats: \installcorenamespace{localfloats} \installcorenamespace{localfloatstack} \installsetuponlycommandhandler \??localfloats {localfloats} \setuplocalfloats [%\c!before=\blank, %\c!after=\blank, \c!inbetween=\blank] \initializeboxstack\??localfloatstack \newcount\c_strc_localfloats_n \let\noflocalfloats\c_strc_localfloats_n \unexpanded\def\resetlocalfloats {\global\c_strc_localfloats_n\zerocount \initializeboxstack\??localfloatstack} \unexpanded\def\somelocalfloat {\global\advance\c_strc_localfloats_n\plusone \savebox\??localfloatstack{\number\c_strc_localfloats_n}{\box\floatbox}} \unexpanded\def\getlocalfloats {\dorecurse\c_strc_localfloats_n {\ifnum\recurselevel=\plusone % 1\relax \directlocalfloatsparameter\c!before \else \directlocalfloatsparameter\c!inbetween \fi \dontleavehmode\hbox{\foundbox\??localfloatstack\recurselevel}% \ifnum\recurselevel=\c_strc_localfloats_n\relax \directlocalfloatsparameter\c!after \fi}} \unexpanded\def\flushlocalfloats {\getlocalfloats \resetlocalfloats} \unexpanded\def\getlocalfloat#1% {\normalexpanded{\foundbox{\??localfloatstack}{\number#1}}} \unexpanded\def\forcelocalfloats {\let\forcedfloatmethod\v!local} \installfloatmethod \s!singlecolumn \v!local \somelocalfloat \installfloatmethod \s!multicolumn \v!local \somelocalfloat \installfloatmethod \s!columnset \v!local \somelocalfloat \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-lmx.lua0000644000175000017500000005130212130411274024117 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-lmx'] = { version = 1.002, comment = "companion to trac-lmx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this one will be adpated to the latest helpers local type, tostring, rawget, loadstring, pcall = type, tostring, rawget, loadstring, pcall local format, sub, gsub = string.format, string.sub, string.gsub local concat = table.concat local collapsespaces = string.collapsespaces local P, Cc, Cs, C, Carg, lpegmatch = lpeg.P, lpeg.Cc, lpeg.Cs, lpeg.C, lpeg.Carg, lpeg.match local joinpath, replacesuffix, pathpart, filesuffix = file.join, file.replacesuffix, file.pathpart, file.suffix local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex ----- trace_templates = false trackers .register("lmx.templates", function(v) trace_templates = v end) local trace_variables = false trackers .register("lmx.variables", function(v) trace_variables = v end) local cache_templates = true directives.register("lmx.cache.templates",function(v) cache_templates = v end) local cache_files = true directives.register("lmx.cache.files", function(v) cache_files = v end) local report_lmx = logs.reporter("lmx") local report_error = logs.reporter("lmx","error") lmx = lmx or { } local lmx = lmx -- This will change: we will just pass the global defaults as argument, but then we need -- to rewrite some older code or come up with an ugly trick. local lmxvariables = { ['title-default'] = 'ConTeXt LMX File', ['color-background-green'] = '#4F6F6F', ['color-background-blue'] = '#6F6F8F', ['color-background-yellow'] = '#8F8F6F', ['color-background-purple'] = '#8F6F8F', ['color-background-body'] = '#808080', ['color-background-main'] = '#3F3F3F', } local lmxinherited = { ['title'] = 'title-default', ['color-background-one'] = 'color-background-green', ['color-background-two'] = 'color-background-blue', ['color-background-three'] = 'color-background-one', ['color-background-four'] = 'color-background-two', } lmx.variables = lmxvariables lmx.inherited = lmxinherited setmetatableindex(lmxvariables,function(t,k) k = lmxinherited[k] while k do local v = rawget(lmxvariables,k) if v then return v end k = lmxinherited[k] end end) function lmx.set(key,value) lmxvariables[key] = value end function lmx.get(key) return lmxvariables[key] or "" end lmx.report = report_lmx -- helpers -- the variables table is an empty one that gets linked to a defaults table -- that gets passed with a creation (first time only) and that itself links -- to one that gets passed to the converter local variables = { } -- we assume no nesting local result = { } -- we assume no nesting local function do_print(one,two,...) if two then result[#result+1] = concat { one, two, ... } else result[#result+1] = one end end -- Although it does not make much sense for most elements, we provide a mechanism -- to print wrapped content, something that is more efficient when we are constructing -- tables. local html = { } lmx.html = html function html.td(str) if type(str) == "table" then for i=1,#str do -- spoils t ! str[i] = format("%s",str[i] or "") end result[#result+1] = concat(str) else result[#result+1] = format("%s",str or "") end end function html.th(str) if type(str) == "table" then for i=1,#str do -- spoils t ! str[i] = format("%s",str[i]) end result[#result+1] = concat(str) else result[#result+1] = format("%s",str or "") end end function html.a(text,url) result[#result+1] = format("%s",url,text) end setmetatableindex(html,function(t,k) local f = format("<%s>%%s",k,k) local v = function(str) result[#result+1] = format(f,str or "") end t[k] = v return v end) -- Loading templates: local function loadedfile(name) name = resolvers and resolvers.findfile and resolvers.findfile(name) or name local data = io.loaddata(name) if not data or data == "" then report_lmx("file %a is empty",name) end return data end local function loadedsubfile(name) return io.loaddata(resolvers and resolvers.findfile and resolvers.findfile(name) or name) end lmx.loadedfile = loadedfile -- A few helpers (the next one could end up in l-lpeg): local usedpaths = { } local givenpath = nil local do_nested_include = nil local pattern = lpeg.replacer { ["&"] = "&", [">"] = ">", ["<"] = "<", ['"'] = """, } local function do_escape(str) return lpegmatch(pattern,str) or str end local function do_variable(str) local value = variables[str] if not trace_variables then -- nothing elseif type(value) == "string" then if #value > 80 then report_lmx("variable %a is set to: %s ...",str,collapsespaces(sub(value,1,80))) else report_lmx("variable %a is set to: %s",str,collapsespaces(value)) end elseif type(value) == "nil" then report_lmx("variable %a is set to: %s",str,"") else report_lmx("variable %a is set to: %S",str,value) end if type(value) == "function" then -- obsolete ... will go away return value(str) else return value end end local function do_type(str) if str and str ~= "" then result[#result+1] = format("%s",do_escape(str)) end end local function do_fprint(str,...) if str and str ~= "" then result[#result+1] = format(str,...) end end local function do_eprint(str,...) if str and str ~= "" then result[#result+1] = lpegmatch(pattern,format(str,...)) end end local function do_print_variable(str) local str = do_variable(str) -- variables[str] if str and str ~= "" then result[#result+1] = str end end local function do_type_variable(str) local str = do_variable(str) -- variables[str] if str and str ~= "" then result[#result+1] = format("%s",do_escape(str)) end end local function do_include(filename,option) local data = loadedsubfile(filename) if (not data or data == "") and givenpath then data = loadedsubfile(joinpath(givenpath,filename)) end if (not data or data == "") and type(usedpaths) == "table" then for i=1,#usedpaths do data = loadedsubfile(joinpath(usedpaths[i],filename)) if data and data ~= "" then break end end end if not data or data == "" then data = format("",filename) report_lmx("include file %a is empty",filename) else -- report_lmx("included file: %s",filename) data = do_nested_include(data) end if filesuffix(filename,"css") and option == "strip" then -- new data = lmx.stripcss(data) end return data end -- Flushers: lmx.print = do_print lmx.type = do_type lmx.eprint = do_eprint lmx.fprint = do_fprint lmx.escape = do_escape lmx.urlescape = url.escape lmx.variable = do_variable lmx.include = do_include lmx.inject = do_print lmx.finject = do_fprint lmx.einject = do_eprint lmx.pv = do_print_variable lmx.tv = do_type_variable -- The next functions set up the closure. function lmx.initialize(d,v) if not v then setmetatableindex(d,lmxvariables) if variables ~= d then setmetatableindex(variables,d) if trace_variables then report_lmx("using chain: variables => given defaults => lmx variables") end elseif trace_variables then report_lmx("using chain: variables == given defaults => lmx variables") end elseif d ~= v then setmetatableindex(v,d) if d ~= lmxvariables then setmetatableindex(d,lmxvariables) if variables ~= v then setmetatableindex(variables,v) if trace_variables then report_lmx("using chain: variables => given variables => given defaults => lmx variables") end elseif trace_variables then report_lmx("using chain: variables == given variables => given defaults => lmx variables") end else if variables ~= v then setmetatableindex(variables,v) if trace_variables then report_lmx("using chain: variabes => given variables => given defaults") end elseif trace_variables then report_lmx("using chain: variables == given variables => given defaults") end end else setmetatableindex(v,lmxvariables) if variables ~= v then setmetatableindex(variables,v) if trace_variables then report_lmx("using chain: variables => given variables => lmx variables") end elseif trace_variables then report_lmx("using chain: variables == given variables => lmx variables") end end result = { } end function lmx.finalized() local collapsed = concat(result) result = { } -- free memory return collapsed end function lmx.getvariables() return variables end function lmx.reset() -- obsolete end -- Creation: (todo: strip ) -- local template = [[ -- return function(defaults,variables) -- -- -- initialize -- -- lmx.initialize(defaults,variables) -- -- -- interface -- -- local definitions = { } -- local variables = lmx.getvariables() -- local html = lmx.html -- local inject = lmx.print -- local finject = lmx.fprint -- local einject = lmx.eprint -- local escape = lmx.escape -- local verbose = lmx.type -- -- -- shortcuts (sort of obsolete as there is no gain) -- -- local p = lmx.print -- local f = lmx.fprint -- local v = lmx.variable -- local e = lmx.escape -- local t = lmx.type -- local pv = lmx.pv -- local tv = lmx.tv -- -- -- generator -- -- %s -- -- -- finalize -- -- return lmx.finalized() -- -- end -- ]] local template = [[ -- interface local html = lmx.html local inject = lmx.print local finject = lmx.fprint -- better use the following local einject = lmx.eprint -- better use the following local injectf = lmx.fprint local injecte = lmx.eprint local injectfmt = lmx.fprint local injectesc = lmx.eprint local escape = lmx.escape local verbose = lmx.type local i_n_j_e_c_t = lmx.print -- shortcuts (sort of obsolete as there is no gain) local p = lmx.print local f = lmx.fprint local v = lmx.variable local e = lmx.escape local t = lmx.type local pv = lmx.pv local tv = lmx.tv local lmx_initialize = lmx.initialize local lmx_finalized = lmx.finalized local lmx_getvariables = lmx.getvariables -- generator return function(defaults,variables) lmx_initialize(defaults,variables) local definitions = { } local variables = lmx_getvariables() %s -- the action: appends to result return lmx_finalized() end ]] local function savedefinition(definitions,tag,content) definitions[tag] = content return "" end local function getdefinition(definitions,tag) return definitions[tag] or "" end local whitespace = lpeg.patterns.whitespace local optionalspaces = whitespace^0 local dquote = P('"') local begincomment = P("") local beginembedxml = P("") local beginembedcss = P("/*") local endembedcss = P("*/") local gobbledendxml = (optionalspaces * endembedxml) / "" ----- argumentxml = (1-gobbledendxml)^0 local argumentxml = (whitespace^1 + dquote * C((1-dquote)^1) * dquote + C((1-gobbledendxml-whitespace)^1))^0 local gobbledendcss = (optionalspaces * endembedcss) / "" ----- argumentcss = (1-gobbledendcss)^0 local argumentcss = (whitespace^1 + dquote * C((1-dquote)^1) * dquote + C((1-gobbledendcss-whitespace)^1))^0 local commentxml = (begincomment * (1-endcomment)^0 * endcomment) / "" local beginluaxml = (beginembedxml * P("lua")) / "" local endluaxml = endembedxml / "" local luacodexml = beginluaxml * (1-endluaxml)^1 * endluaxml local beginluacss = (beginembedcss * P("lua")) / "" local endluacss = endembedcss / "" local luacodecss = beginluacss * (1-endluacss)^1 * endluacss local othercode = (1-beginluaxml-beginluacss)^1 / " i_n_j_e_c_t[==[%0]==] " local includexml = ((beginembedxml * P("lmx-include") * optionalspaces) / "") * (argumentxml / do_include) * gobbledendxml local includecss = ((beginembedcss * P("lmx-include") * optionalspaces) / "") * (argumentcss / do_include) * gobbledendcss local definexml_b = ((beginembedxml * P("lmx-define-begin") * optionalspaces) / "") * argumentxml * gobbledendxml local definexml_e = ((beginembedxml * P("lmx-define-end") * optionalspaces) / "") * argumentxml * gobbledendxml local definexml_c = C((1-definexml_e)^0) local definexml = (Carg(1) * C(definexml_b) * definexml_c * definexml_e) / savedefinition local resolvexml = ((beginembedxml * P("lmx-resolve") * optionalspaces) / "") * ((Carg(1) * C(argumentxml)) / getdefinition) * gobbledendxml local definecss_b = ((beginembedcss * P("lmx-define-begin") * optionalspaces) / "") * argumentcss * gobbledendcss local definecss_e = ((beginembedcss * P("lmx-define-end") * optionalspaces) / "") * argumentcss * gobbledendcss local definecss_c = C((1-definecss_e)^0) local definecss = (Carg(1) * C(definecss_b) * definecss_c * definecss_e) / savedefinition local resolvecss = ((beginembedcss * P("lmx-resolve") * optionalspaces) / "") * ((Carg(1) * C(argumentcss)) / getdefinition) * gobbledendcss local pattern_1 = Cs((commentxml + includexml + includecss + P(1))^0) -- get rid of xml comments asap local pattern_2 = Cs((definexml + resolvexml + definecss + resolvecss + P(1))^0) local pattern_3 = Cs((luacodexml + luacodecss + othercode)^0) local cache = { } local function lmxerror(str) report_error(str) return html.tt(str) end local function wrapper(converter,defaults,variables) local outcome, message = pcall(converter,defaults,variables) if not outcome then return lmxerror(format("error in conversion: %s",message)) else return message end end do_nested_include = function(data) -- also used in include return lpegmatch(pattern_1,data) end function lmxnew(data,defaults,nocache,path) -- todo: use defaults in calling routines data = data or "" local known = cache[data] if not known then givenpath = path usedpaths = lmxvariables.includepath or { } if type(usedpaths) == "string" then usedpaths = { usedpaths } end data = lpegmatch(pattern_1,data) data = lpegmatch(pattern_2,data,1,{}) data = lpegmatch(pattern_3,data) local converted = loadstring(format(template,data)) if converted then converted = converted() end defaults = defaults or { } local converter if converted then converter = function(variables) return wrapper(converted,defaults,variables) end else report_error("error in:\n%s\n:",data) converter = function() lmxerror("error in template") end end known = { data = defaults.trace and data or "", variables = defaults, converter = converter, } if cache_templates and nocache ~= false then cache[data] = known end elseif variables then known.variables = variables end return known, known.variables end local function lmxresult(self,variables) if self then local converter = self.converter if converter then local converted = converter(variables) if trace_variables then -- will become templates report_lmx("converted size: %s",#converted) end return converted or lmxerror("no result from converter") else return lmxerror("invalid converter") end else return lmxerror("invalid specification") end end lmx.new = lmxnew lmx.result = lmxresult local loadedfiles = { } function lmx.convertstring(templatestring,variables,nocache,path) return lmxresult(lmxnew(templatestring,nil,nocache,path),variables) end function lmx.convertfile(templatefile,variables,nocache) if trace_variables then -- will become templates report_lmx("converting file %a",templatefile) end local converter = loadedfiles[templatefile] if not converter then converter = lmxnew(loadedfile(templatefile),nil,nocache,pathpart(templatefile)) loadedfiles[templatefile] = converter end return lmxresult(converter,variables) end function lmxconvert(templatefile,resultfile,variables,nocache) -- or (templatefile,variables) if trace_variables then -- will become templates report_lmx("converting file %a",templatefile) end if not variables and type(resultfile) == "table" then variables = resultfile end local converter = loadedfiles[templatefile] if not converter then converter = lmxnew(loadedfile(templatefile),nil,nocache,pathpart(templatefile)) if cache_files then loadedfiles[templatefile] = converter end end local result = lmxresult(converter,variables) if resultfile then io.savedata(resultfile,result) else return result end end lmx.convert = lmxconvert -- helpers local nocomment = (beginembedcss * (1 - endembedcss)^1 * endembedcss) / "" local nowhitespace = whitespace^1 / " " -- "" local semistripped = whitespace^1 / "" * P(";") local stripper = Cs((nocomment + semistripped + nowhitespace + 1)^1) function lmx.stripcss(str) return lpegmatch(stripper,str) end function lmx.color(r,g,b,a) if r > 1 then r = 1 end if g > 1 then g = 1 end if b > 1 then b = 1 end if not a then a= 0 elseif a > 1 then a = 1 end if a > 0 then return format("rgba(%s%%,%s%%,%s%%,%s)",r*100,g*100,b*100,a) else return format("rgb(%s%%,%s%%,%s%%)",r*100,g*100,b*100) end end -- these can be overloaded lmx.lmxfile = string.itself lmx.htmfile = string.itself lmx.popupfile = os.launch function lmxmake(name,variables) local lmxfile = lmx.lmxfile(name) local htmfile = lmx.htmfile(name) if lmxfile == htmfile then htmfile = replacesuffix(lmxfile,"html") end lmxconvert(lmxfile,htmfile,variables) return htmfile end lmxmake = lmx.make function lmx.show(name,variables) local htmfile = lmxmake(name,variables) lmx.popupfile(htmfile) return htmfile end -- Command line (will become mtx-lmx): if arg then if arg[1] == "--show" then if arg[2] then lmx.show (arg[2]) end elseif arg[1] == "--convert" then if arg[2] then lmx.convert(arg[2], arg[3] or "temp.html") end end end -- Test 1: -- inspect(lmx.result(lmx.new(io.loaddata("t:/sources/context-timing.lmx")))) -- Test 2: -- local str = [[ -- -- -- some content a -- some content b -- -- -- -- -- -- -- -- -- -- -- -- ]] -- local defaults = { trace = true, a = 3, b = 3 } -- local result = lmx.new(str,defaults) -- inspect(result.data) -- inspect(result.converter(defaults)) -- inspect(result.converter { a = 1 }) -- inspect(lmx.result(result, { b = 2 })) -- inspect(lmx.result(result, { a = 20000, b = 40000 })) context-2013.05.28.20130704/texmf-dist/tex/context/base/util-env.lua0000644000175000017500000002102212134352503024132 0ustar norbertnorbertif not modules then modules = { } end modules ['util-env'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local allocate, mark = utilities.storage.allocate, utilities.storage.mark local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find local unquoted, quoted = string.unquoted, string.quoted local concat, insert, remove = table.concat, table.insert, table.remove environment = environment or { } local environment = environment -- precautions os.setlocale(nil,nil) -- useless feature and even dangerous in luatex function os.setlocale() -- no way you can mess with it end -- dirty tricks (we will replace the texlua call by luatex --luaonly) local validengines = allocate { ["luatex"] = true, ["luajittex"] = true, -- ["luatex.exe"] = true, -- ["luajittex.exe"] = true, } local basicengines = allocate { ["luatex"] = "luatex", ["texlua"] = "luatex", ["texluac"] = "luatex", ["luajittex"] = "luajittex", ["texluajit"] = "luajittex", -- ["texlua.exe"] = "luatex", -- ["texluajit.exe"] = "luajittex", } local luaengines=allocate { ["lua"] = true, ["luajit"] = true, } environment.validengines = validengines environment.basicengines = basicengines -- [-1] = binary -- [ 0] = self -- [ 1] = argument 1 ... -- instead we could set ranges if not arg then -- used as library elseif luaengines[file.removesuffix(arg[-1])] then -- arg[-1] = arg[0] -- arg[ 0] = arg[1] -- for k=2,#arg do -- arg[k-1] = arg[k] -- end -- remove(arg) -- last elseif validengines[file.removesuffix(arg[0])] then if arg[1] == "--luaonly" then arg[-1] = arg[0] arg[ 0] = arg[2] for k=3,#arg do arg[k-2] = arg[k] end remove(arg) -- last remove(arg) -- pre-last else -- tex run end -- This is an ugly hack but it permits symlinking a script (say 'context') to 'mtxrun' as in: -- -- ln -s /opt/minimals/tex/texmf-linux-64/bin/mtxrun context -- -- The special mapping hack is needed because 'luatools' boils down to 'mtxrun --script base' -- but it's unlikely that there will be more of this local originalzero = file.basename(arg[0]) local specialmapping = { luatools == "base" } if originalzero ~= "mtxrun" and originalzero ~= "mtxrun.lua" then arg[0] = specialmapping[originalzero] or originalzero insert(arg,0,"--script") insert(arg,0,"mtxrun") end end -- environment environment.arguments = allocate() environment.files = allocate() environment.sortedflags = nil -- context specific arguments (in order not to confuse the engine) function environment.initializearguments(arg) local arguments, files = { }, { } environment.arguments, environment.files, environment.sortedflags = arguments, files, nil for index=1,#arg do local argument = arg[index] if index > 0 then local flag, value = match(argument,"^%-+(.-)=(.-)$") if flag then flag = gsub(flag,"^c:","") arguments[flag] = unquoted(value or "") else flag = match(argument,"^%-+(.+)") if flag then flag = gsub(flag,"^c:","") arguments[flag] = true else files[#files+1] = argument end end end end environment.ownname = file.reslash(environment.ownname or arg[0] or 'unknown.lua') end function environment.setargument(name,value) environment.arguments[name] = value end -- todo: defaults, better checks e.g on type (boolean versus string) -- -- tricky: too many hits when we support partials unless we add -- a registration of arguments so from now on we have 'partial' function environment.getargument(name,partial) local arguments, sortedflags = environment.arguments, environment.sortedflags if arguments[name] then return arguments[name] elseif partial then if not sortedflags then sortedflags = allocate(table.sortedkeys(arguments)) for k=1,#sortedflags do sortedflags[k] = "^" .. sortedflags[k] end environment.sortedflags = sortedflags end -- example of potential clash: ^mode ^modefile for k=1,#sortedflags do local v = sortedflags[k] if find(name,v) then return arguments[sub(v,2,#v)] end end end return nil end environment.argument = environment.getargument function environment.splitarguments(separator) -- rather special, cut-off before separator local done, before, after = false, { }, { } local originalarguments = environment.originalarguments for k=1,#originalarguments do local v = originalarguments[k] if not done and v == separator then done = true elseif done then after[#after+1] = v else before[#before+1] = v end end return before, after end function environment.reconstructcommandline(arg,noquote) arg = arg or environment.originalarguments if noquote and #arg == 1 then -- we could just do: return unquoted(resolvers.resolve(arg[i])) local a = arg[1] a = resolvers.resolve(a) a = unquoted(a) return a elseif #arg > 0 then local result = { } for i=1,#arg do -- we could just do: result[#result+1] = format("%q",unquoted(resolvers.resolve(arg[i]))) local a = arg[i] a = resolvers.resolve(a) a = unquoted(a) a = gsub(a,'"','\\"') -- tricky if find(a," ") then result[#result+1] = quoted(a) else result[#result+1] = a end end return concat(result," ") else return "" end end -- handy in e.g. package.addluapath(environment.relativepath("scripts")) function environment.relativepath(path,root) if not path then path = "" end if not file.is_rootbased_path(path) then if not root then root = file.pathpart(environment.ownscript or environment.ownname or ".") end if root == "" then root = "." end path = root .. "/" .. path end return file.collapsepath(path,true) end -- -- when script lives on e:/tmp we get this: -- -- print(environment.relativepath("x/y/z","c:/w")) -- c:/w/x/y/z -- print(environment.relativepath("x")) -- e:/tmp/x -- print(environment.relativepath("../x")) -- e:/x -- print(environment.relativepath("./x")) -- e:/tmp/x -- print(environment.relativepath("/x")) -- /x -- print(environment.relativepath("c:/x")) -- c:/x -- print(environment.relativepath("//x")) -- //x -- print(environment.relativepath()) -- e:/tmp -- -- to be tested: -- -- function environment.reconstructcommandline(arg,noquote) -- arg = arg or environment.originalarguments -- if noquote and #arg == 1 then -- return unquoted(resolvers.resolve(arg[1])) -- elseif #arg > 0 then -- local result = { } -- for i=1,#arg do -- result[#result+1] = format("%q",unquoted(resolvers.resolve(arg[i]))) -- always quote -- end -- return concat(result," ") -- else -- return "" -- end -- end if arg then -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later) local newarg, instring = { }, false for index=1,#arg do local argument = arg[index] if find(argument,"^\"") then newarg[#newarg+1] = gsub(argument,"^\"","") if not find(argument,"\"$") then instring = true end elseif find(argument,"\"$") then newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","") instring = false elseif instring then newarg[#newarg] = newarg[#newarg] .. " " .. argument else newarg[#newarg+1] = argument end end for i=1,-5,-1 do newarg[i] = arg[i] end environment.initializearguments(newarg) environment.originalarguments = mark(newarg) environment.rawarguments = mark(arg) arg = { } -- prevent duplicate handling end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-ind.mkiv0000644000175000017500000000761112130411274024304 0ustar norbertnorbert%D \module %D [ file=strc-ind, % was part of strc-des, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Indented Text, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Indented Text} \unprotect %D \macros %D {defineindentedtext, %D setupindentedtext} %D %D Ok, we keep it but with a different command as it all looks too %D much like indentation and indenting. We also assume start/stop %D usage or some explicit par. \installcorenamespace{indentedtext} \installcommandhandler \??indentedtext {indentedtext} \??indentedtext %D \startbuffer %D \defineindentedtext[one][text=one] %D \defineindentedtext[two][text=two] %D %D \one test test \par %D \subone test test \par %D \subtwo test test \par %D \subsubone test test \par %D %D \startone %D test test %D \startone %D test test %D \startone %D test test %D \stopone %D \starttwo %D test test %D \startone %D test test %D \stopone %D \stoptwo %D \stopone %D \stopone %D \stopbuffer %D %D \typebuffer \getbuffer \newcount\c_strc_indentedtexts_nesting \newdimen\d_strc_indentedtexts_width \newdimen\d_strc_indentedtexts_distance \appendtoks \setuevalue {\e!start\currentindentedtext}{\strc_indentedtexts_start{\currentindentedtext}\c_strc_indentedtexts_nesting}% \setuevalue {\e!stop \currentindentedtext}{\strc_indentedtexts_stop}% % to be avoided ... might go away \setuevalue {\currentindentedtext}{\strc_indentedtexts_direct{\currentindentedtext}{0}}% \setuevalue {\v!sub\currentindentedtext}{\strc_indentedtexts_direct{\currentindentedtext}{1}}% \setuevalue{\v!sub\v!sub\currentindentedtext}{\strc_indentedtexts_direct{\currentindentedtext}{2}}% \to \everydefineindentedtext \unexpanded\def\strc_indentedtexts_start#1#2% we need to get rid of \spr {\par \begingroup \edef\currentindentedtext{#1}% \c_strc_indentedtexts_nesting#2\relax \indentedtextparameter\c!before \d_strc_indentedtexts_distance\indentedtextparameter\c!distance\relax \doifnothing{\indentedtextparameter\c!sample} {\setindentedtextparameter\c!sample{\indentedtextparameter\c!text}}% \assignwidth {\indentedtextparameter\c!width} {\d_strc_indentedtexts_width} {\useindentedtextstyleandcolor\c!headstyle\c!headcolor \indentedtextparameter\c!sample \spr{\indentedtextparameter\c!separator}} {\d_strc_indentedtexts_distance}% \advance\d_strc_indentedtexts_width \d_strc_indentedtexts_distance \setbox\scratchbox\hbox to \d_strc_indentedtexts_width {\useindentedtextstyleandcolor\c!headstyle\c!headcolor \strut \indentedtextparameter\c!text \hss \spr{\indentedtextparameter\c!separator}% \hskip\d_strc_indentedtexts_distance}% \parindent\zeropoint \hskip\c_strc_indentedtexts_nesting\d_strc_indentedtexts_width \advance\c_strc_indentedtexts_nesting\plusone \dontleavehmode\box\scratchbox \hangindent\c_strc_indentedtexts_nesting\d_strc_indentedtexts_width \useindentedtextstyleandcolor\c!style\c!color} \unexpanded\def\strc_indentedtexts_stop {\indentedtextparameter\c!after \par \endgroup} \let\stopindentedtext\strc_indentedtexts_stop \unexpanded\def\strc_indentedtexts_direct#1#2#3\par % no longer clever grabpar trickery {\strc_indentedtexts_start{#1}{#2}#3\strc_indentedtexts_stop} \setupindentedtext [\c!style=\v!normal, \c!headstyle=\v!normal, %\c!color=, %\c!headcolor=, \c!width=\v!fit, \c!text=\unknown, %\c!sample=, \c!before=\blank, \c!after=\blank, \c!distance=1em, \c!separator={ :}] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-imp-mvs.mkiv0000644000175000017500000003675011754241457025146 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-trf.mkii0000644000175000017500000005363511754241457024323 0ustar norbertnorbert%D \module %D [ file=grph-fig, %D version=2006.08.26, % overhaul/split of 1997.03.31 core-fig %D title=\CONTEXT\ Graphic Macros, %D subtitle=Transformations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 It may be that some functionality got lost. If it concerns %D defined features, let me know and it will be sorted out. \writestatus{loading}{ConTeXt Graphic Macros / Transformations} \unprotect %D Scaling: \unexpanded\def\scale{\dodoubleempty\doscalenextbox[\??xy]} % probably too many dimens / the width calculations can go % since we may assume scaling is available (was not true % long ago which is why we also calculate the width) \newdimen\scaleboxwidth \newdimen\scaleboxheight \newdimen\scaleboxdepth \newdimen\scaleboxsizex \newdimen\scaleboxsizey \newdimen\scaleboxoffsetx \newdimen\scaleboxoffsety \newdimen\scaleboxhsize \newdimen\scaleboxvsize % global \newdimen\scaleboxdimx \let\figwid \scaleboxdimx \newdimen\scaleboxdimy \let\fighei \scaleboxdimy \newcount\scaleboxscax \let\figxsca\scaleboxscax \newcount\scaleboxscay \let\figysca\scaleboxscay \newdimen\scaleboxoutervsize % we cannot manipulate any global vsize ! \let\finalscaleboxxscale \!!plusone \let\finalscaleboxyscale \!!plusone \let\finalscaleboxwidth \!!zeropoint \let\finalscaleboxheight \!!zeropoint \let\finalscaleboxxfactor\!!hundred \let\finalscaleboxyfactor\!!hundred \newconditional\scaleboxdone \def\doscalenextbox[#1][#2]% {\bgroup \getparameters [#1] [\c!scale=,\c!xscale=,\c!yscale=,\c!width=,\c!height=,\c!lines=, \c!factor=,\c!hfactor=,\c!wfactor=,\c!grid=,\c!sx=1,\c!sy=1, \c!equalwidth=,\c!equalheight=, \c!maxwidth=\scaleparameter\c!width,\c!maxheight=\scaleparameter\c!height, #2]% \dowithnextbox{\dodoscalenextbox{#1}\egroup}\hbox} \def\doscalebox#1% {\bgroup\dowithnextbox{\dodoscalenextbox{#1}\egroup}\hbox} \let\currentscaletag\??xy \def\scaleparameter#1% {\csname\currentscaletag#1\endcsname} \def\setscaleparameter#1#2% {\setvalue{\currentscaletag#1}{#2}} \def\dodoscalenextbox#1% {\edef\currentscaletag{#1}% \doif{\scaleparameter\c!depth}\v!no{\setbox\nextbox\hbox{\raise\nextboxdp\box\nextbox}}% new \forgetall \dontshowcomposition \dontcomplain \doscaleboxcalculations \doscaleboxindeed \doscaleboxposition \flushnextbox} \def\doscaleboxindeed {\ifconditional\scaleboxdone \scaleboxwidth \finalscaleboxxscale\nextboxwd \scaleboxheight\finalscaleboxyscale\nextboxht \scaleboxdepth \finalscaleboxyscale\nextboxdp \setbox\nextbox\hbox {\dostartscaling \finalscaleboxxscale \finalscaleboxyscale \smashedbox\nextbox \dostopscaling}% \nextboxwd\scaleboxwidth \nextboxht\scaleboxheight \nextboxdp\scaleboxdepth \fi} \def\doscaleboxcalculations {\setfalse\scaleboxdone % initial final value \global\let\finalscaleboxxscale \!!plusone \global\let\finalscaleboxyscale \!!plusone \xdef \finalscaleboxwidth {\the\nextboxwd}% \xdef \finalscaleboxheight{\the\nextboxht}% \global\let\finalscaleboxxfactor\!!hundred \global\let\finalscaleboxyfactor\!!hundred \ifdim\nextboxht>\zeropoint \ifdim\nextboxwd>\zeropoint \edef\scaleboxstampa % slow way [can be combined] {\scaleparameter\c!scale \scaleparameter\c!xscale \scaleparameter\c!yscale \scaleparameter\c!factor\scaleparameter\c!wfactor\scaleparameter\c!hfactor \scaleparameter\c!lines \scaleparameter\c!width \scaleparameter\c!height}% \edef\scaleboxstampb % fast way [just sx/sy] {\scaleparameter\c!sx \scaleparameter\c!sy}% \edef\scaleboxstampc {11}% \ifx\scaleboxstampa\empty \ifx\scaleboxstampb\scaleboxstampc % no scaling, but still check; new, gone again % wrong: scaled proportionally as side effect % \doifsomething{\scaleparameter\c!maxwidth }{\letvalue{\currentscaletag\c!factor}\v!fit}% % \doifsomething{\scaleparameter\c!maxheight}{\letvalue{\currentscaletag\c!factor}\v!fit}% \insidefloattrue % trick \dodoscaleboxcalculations \else \dosetscalboxsxsy \nodoscaleboxcalculations \fi \else \ifx\scaleboxstampb\empty % no need to check further \else \dosetscalboxsxsy \fi \dodoscaleboxcalculations \fi \fi \fi} \def\dosetscalboxsxsy {\ifdim\scaleparameter\c!sx\onepoint=\onepoint\else \setevalue{\currentscaletag\c!width }{\the\dimexpr\scaleparameter\c!sx\wd\nextbox\relax}% \fi \ifdim\scaleparameter\c!sy\onepoint=\onepoint\else \setevalue{\currentscaletag\c!height}{\the\dimexpr\scaleparameter\c!sy\ht\nextbox\relax}% \fi} \def\doscaleboxrounding#1.#2\relax{#1} \def\scaleboxrounding#1% {\@EA\@EA\@EA\doscaleboxrounding\@EA\WITHOUTPT\the\dimexpr#1\points*100+32768sp\relax.\relax} \def\nodoscaleboxcalculations {\settrue\scaleboxdone \xdef\finalscaleboxwidth {\the\dimexpr\scaleparameter\c!sx\wd\nextbox\relax}% \xdef\finalscaleboxheight {\the\dimexpr\scaleparameter\c!sy\ht\nextbox\relax}% \xdef\finalscaleboxxscale {\scaleparameter\c!sx}% \xdef\finalscaleboxyscale {\scaleparameter\c!sy}% \ifx\finalscaleboxxscale\empty\let\finalscaleboxxscale\!!plusone\fi \ifx\finalscaleboxyscale\empty\let\finalscaleboxyscale\!!plusone\fi \xdef\finalscaleboxxfactor{\scaleboxrounding\finalscaleboxxscale}% \xdef\finalscaleboxyfactor{\scaleboxrounding\finalscaleboxyscale}} \def\dodoscaleboxcalculations {\settrue\scaleboxdone % initial values \scaleboxoffsetx\zeropoint \scaleboxoffsety\zeropoint \scaleboxsizex \nextboxwd \scaleboxsizey \nextboxht % alleen ht wordt geschaald! % final values \global\scaleboxdimx \zeropoint % see note * (core-fig) \global\scaleboxdimy \zeropoint % see note * (core-fig) \scaleboxscax \plusone % see note * (core-fig) \scaleboxscay \plusone % see note * (core-fig) % preparations \setfalse\scaleboxscalingdone \checkscaleboxsettings % calculators % beware, they operate in sequence, and calculate missing dimensions / messy %setscaleboxbynature % when? needed? \ifconditional\scaleboxscalingdone\else\setscaleboxbyfactor \fi \ifconditional\scaleboxscalingdone\else\setscaleboxbyscale \fi \ifconditional\scaleboxscalingdone\else\setscaleboxbydimension\fi % finalizers / to be done (no longer needed this way, clean up) \convertscaleboxinsertscale\scaleboxhsize\figx\scaleboxscax\scax \convertscaleboxinsertscale\scaleboxvsize\figy\scaleboxscay\scay % used in actual scaling \xdef\finalscaleboxwidth {\the\scaleboxdimx}% \xdef\finalscaleboxheight {\the\scaleboxdimy}% \xdef\finalscaleboxxfactor{\the\scaleboxscax}% \xdef\finalscaleboxyfactor{\the\scaleboxscay}% \xdef\finalscaleboxxscale {\withoutpt\the\dimexpr\scax\points/\plushundred\relax}% \xdef\finalscaleboxyscale {\withoutpt\the\dimexpr\scay\points/\plushundred\relax}} \setvalue{\??xy:\c!grid:\v!yes }{\getnoflines \fighei\setevalue{\currentscaletag\c!height}{\the\noflines\lineheight}} \setvalue{\??xy:\c!grid:\v!height }{\getrawnoflines\fighei\setevalue{\currentscaletag\c!height}{\the\dimexpr\noflines\lineheight+\strutdepth\relax}} \setvalue{\??xy:\c!grid:\v!depth }{\getrawnoflines\fighei\setevalue{\currentscaletag\c!height}{\the\dimexpr\noflines\lineheight-\strutdepth\relax}} \setvalue{\??xy:\c!grid:\v!halfline}{\getrawnoflines\fighei\setevalue{\currentscaletag\c!height}{\the\dimexpr\noflines\lineheight+.5\lineheight\relax}} \setvalue{\??xy:\c!grid:\v!fit }{\getrawnoflines\fighei\setevalue{\currentscaletag\c!height}{\the\noflines\lineheight}} \letvalue{\??xy:\c!grid:\empty }\donothing \def\checkscaleboxsettings {\doifsomething{\scaleparameter\c!maxwidth }% can be defined in itself {\setevalue{\currentscaletag\c!maxwidth }{\the\dimexpr\scaleparameter\c!maxwidth \relax}}% \doifsomething{\scaleparameter\c!maxheight}% can be defined in itself {\setevalue{\currentscaletag\c!maxheight}{\the\dimexpr\scaleparameter\c!maxheight\relax}}% \doifsomething{\scaleparameter\c!lines} {\setevalue{\currentscaletag\c!height}{\the\dimexpr\scaleparameter\c!lines\lineheight\relax}}% \getvalue{\??xy:\c!grid:\scaleparameter\c!grid}} \def\setscaleboxbynature % where ! ! ! ! ! {\doifsomething{\scaleparameter\c!width }{\global\scaleboxdimx\scaleparameter\c!width }% \doifsomething{\scaleparameter\c!height}{\global\scaleboxdimy\scaleparameter\c!height}% \doifsomething{\scaleparameter\c!scale } {\scaleboxscax\scaleparameter\c!scale \scaleboxscay\scaleparameter\c!scale }% \doifsomething{\scaleparameter\c!xscale} {\scaleboxscax\scaleparameter\c!xscale}% \doifsomething{\scaleparameter\c!yscale} {\scaleboxscay\scaleparameter\c!yscale}} % oeps, was x % \defineexternalfigure[width-6][factor=auto,maxwidth=\textheight,maxheight=\textwidth] % \defineexternalfigure[width-7][factor=auto,maxwidth=\textwidth,maxheight=\textheight] % \placefigure{none}{\rotate[frame=on,offset=overlay]{\externalfigure[t:/sources/cow.pdf][width-6]}} \page % \placefigure{none}{\framed[frame=on,offset=overlay]{\externalfigure[t:/sources/cow.pdf][width-7]}} \def\setscaleboxbyfactor {\doifinsetelse{\scaleparameter\c!factor}{\v!max,\v!fit,\v!broad,\v!auto} {\doapplyscaleboxsize \ifdim\scaleboxsizex>\scaleboxsizey \docalculatescaleboxnorm \scaleboxdimx\c!factor\c!maxwidth\hsize\scaleboxhsize \docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey \else \docalculatescaleboxnorm \scaleboxdimy\c!factor\c!maxheight\scaleboxoutervsize\scaleboxvsize \docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex \fi \donetrue} {\doifinsetelse{\scaleparameter\c!hfactor}{\v!max,\v!fit,\v!broad,\v!auto} {\doapplyscaleboxsize \docalculatescaleboxnorm \scaleboxdimy\c!hfactor\c!maxheight\scaleboxoutervsize\scaleboxvsize \docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex \donetrue} {\doifinsetelse{\scaleparameter\c!wfactor}{\v!max,\v!fit,\v!broad,\v!auto} {\doapplyscaleboxsize \docalculatescaleboxnorm \scaleboxdimx\c!wfactor\c!maxwidth\hsize\scaleboxhsize \docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey \donetrue} {\docalculatescaleboxnorm\scaleboxdimy\c!factor \c!height \textheight\scaleboxvsize \docalculatescaleboxnorm\scaleboxdimy\c!hfactor\c!height \textheight\scaleboxvsize \docalculatescaleboxnorm\scaleboxdimx\c!wfactor\c!width \hsize \hsize \donefalse}}}% \ifdone \settrue\scaleboxscalingdone \ifdim\scaleboxdimx>\scaleboxhsize \global\scaleboxdimy\zeropoint \global\scaleboxdimx\scaleboxhsize \else\ifdim\scaleboxdimy>\scaleboxvsize \global\scaleboxdimx\zeropoint \global\scaleboxdimy\scaleboxvsize \fi\fi \setscaleboxbydimension \fi} \def\setscaleboxbyscale {\doifsomething{\scaleparameter\c!scale\scaleparameter\c!xscale\scaleparameter\c!yscale} {\doapplyscaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax\c!xscale \doapplyscaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay\c!yscale \global\scaleboxdimx\zeropoint \global\scaleboxdimy\zeropoint \doifelsenothing{\scaleparameter\c!maxwidth} {\doifsomething{\scaleparameter\c!maxheight} {\ifdim\scaleboxsizey>\scaleparameter\c!maxheight\relax \global\scaleboxdimy\scaleparameter\c!maxheight \fi}} {\ifdim\scaleboxsizex>\scaleparameter\c!maxwidth\relax \global\scaleboxdimx\scaleparameter\c!maxwidth \fi}}} \def\setscaleboxbydimension {\ifdim\scaleboxdimx>\zeropoint \ifdim\scaleboxdimy>\zeropoint \dosetdimensionscaleboxsize {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}% {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}% {\docalculatescaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay \docalculatescaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax}% \else \dosetdimensionscaleboxsize {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}% {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}% {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}% \fi \else \ifdim\scaleboxdimy>\zeropoint \dosetdimensionscaleboxsize {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}% {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}% {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}% \else \dosetdimensionscaleboxsize {\doapplyscaleboxscale\scaleboxdimx\scaleboxsizex\scaleboxscax\c!xscale \doapplyscaleboxscale\scaleboxdimy\scaleboxsizey\scaleboxscay\c!yscale}% {\docalculatescaleboxscales\scaleboxdimx\scaleboxsizex\scaleboxdimy\scaleboxsizey}% {\docalculatescaleboxscales\scaleboxdimy\scaleboxsizey\scaleboxdimx\scaleboxsizex}% \fi \fi} \def\dosetdimensionscaleboxsize#1#2#3% {#1\relax \doifsomething{\scaleparameter\c!maxwidth} {\ifdim\scaleboxdimx>\scaleparameter\c!maxwidth\relax \global\scaleboxdimx\scaleparameter\c!maxwidth #2\relax \fi}% \doifsomething{\scaleparameter\c!maxheight} {\ifdim\scaleboxdimy>\scaleparameter\c!maxheight\relax \global\scaleboxdimy\scaleparameter\c!maxheight #3\relax \fi}} \def\docalculatescaleboxnorm#1#2#3#4#5% 2 3 parameters (dodo:speedup) {\processaction [\scaleparameter#2] [ \v!max=>\global#1\dimexpr#4\relax, \v!fit=>\global#1\dimexpr#5\relax, \v!broad=>\global#1\dimexpr#5-4\@@exbodyfont\relax, \v!auto=>\doifsomething{\scaleparameter#3}{\global#1\dimexpr\scaleparameter#3\relax}, \s!default=>\doifsomething{\scaleparameter#3}{\global#1\dimexpr\scaleparameter#3\relax}, \s!unknown=>\global#1\dimexpr\scaleparameter#2\dimexpr\@@exbodyfont/10\relax\relax]} \def\docalculatescaleboxscales#1#2#3#4% {\scratchdimen\dimexpr#1/\dimexpr#2/\plusthousand\relax\relax \scaleboxscax\scratchdimen \scaleboxscay\scratchdimen #3\dimexpr\scaleboxscax\dimexpr#4/\plusthousand\relax\relax} \def\docalculatescaleboxscale#1#2#3% {#3\dimexpr#1/\dimexpr#2/\plusthousand\relax\relax} \def\doapplyscaleboxscale#1#2#3#4% $4 = parameter / scale can be empty {\ifcase0\scaleparameter#4\relax \ifcase0\scaleparameter\c!scale\relax #3=\plusthousand \else #3=\scaleparameter\c!scale \fi \else #3=\scaleparameter#4% \fi \relax % important ! still ? \global#1\ifnum#3=\plusthousand#2\else\dimexpr#3\dimexpr#2/\plusthousand\relax\relax\fi \relax} \def\doapplyscaleboxsize {\doifelsenothing{\scaleparameter\c!maxheight} {\scaleboxoutervsize\textheight \ifinner \scaleboxoutervsize \vsize % \textheight =\vsize \scratchdimen\vsize % \scratchdimen=\textheight \else\ifinsidefloat \scaleboxoutervsize \vsize % \textheight =\vsize \scratchdimen\vsize % \scratchdimen=\textheight \else\ifinpagebody \scaleboxoutervsize \vsize % \textheight =\vsize \scratchdimen\vsize % \scratchdimen=\textheight \else % hm, there should be an option to force this \ifdim\pagegoal<\maxdimen \ifdim\pagetotal<\pagegoal \scratchdimen\pagegoal \advance\scratchdimen -\pagetotal \else \scratchdimen\scaleboxoutervsize % \textheight \fi \else \scratchdimen\scaleboxoutervsize % \textheight \fi \fi\fi\fi} {\scratchdimen\scaleparameter\c!maxheight \scaleboxoutervsize\scratchdimen}% \doifelsenothing{\scaleparameter\c!height} {\scaleboxvsize\scratchdimen} {\scaleboxvsize\scaleparameter\c!height}% \doifelsenothing{\scaleparameter\c!width} {\scaleboxhsize\hsize} {\scaleboxhsize\scaleparameter\c!width}} \def\convertscaleboxinsertscale#1#2#3#4% {\scratchdimen#1\relax \ifnum#3=\plusthousand % == scale 1 \else % better 1000 100 10 ranges, evt round 2sp \divide\scratchdimen \plusthousand \multiply\scratchdimen #3\relax \fi \scratchdimen-\scratchdimen % beter hier - dan in driver \edef#2{\the\scratchdimen}% \scratchcounter#3\relax \ifnum\scratchcounter>\plustenthousand \divide\scratchcounter\!!ten \scratchdimen\the\scratchcounter\points \else \scratchdimen\the\scratchcounter\points \divide\scratchdimen\!!ten \fi \edef#4{\withoutpt\the\scratchdimen}} % \startcombination % {\externalfigure[cow.pdf] [frame=on,height=3cm,equalwidth=6cm]} {} % {\externalfigure[mill.png][frame=on,height=3cm,equalwidth=6cm]} {} % \stopcombination \def\doscaleboxposition {\doifsomething{\scaleparameter\c!equalwidth} {\scratchdimen\scaleparameter\c!equalwidth\relax \ifdim\wd\nextbox<\scratchdimen \setbox\nextbox\hbox to \scratchdimen{\hss\box\nextbox\hss}% \fi}% \doifsomething{\scaleparameter\c!equalheight} {\scratchdimen\scaleparameter\c!equalheight\relax \ifdim\ht\nextbox<\scratchdimen \setbox\nextbox\vbox to \scratchdimen{\vss\box\nextbox\vss}% \fi}} %D \macros %D {clip, setupclipping} %D %D Although related to figures, clipping can be applied to %D arbitrary content. We can use \METAPOST\ to provide a non %D rectangular clipping path. %D %D \starttyping %D \startMPclip{fun} %D clip currentpicture to fullcircle %D shifted (.5,.5) xscaled \width yscaled \height ; %D \stopMPclip %D \stoptyping %D %D We get a rectangular piece of the figure when we say: %D %D \starttyping %D \clip[x=2,y=1]{\externalfigure[photo]} %D \stoptyping %D %D When we want to clip to the oval we defined a few lines ago, %D we say: %D %D \starttyping %D \clip[nx=1,ny=1,x=1,y=1,mp=fun]{\externalfigure[photo]} %D \stoptyping %D %D The general characteristics of clipping can be set up with %D %D \showsetup{setupclipping} \def\setupclipping {\dodoubleargument\getparameters[\??cp]} \def\clip {\dosingleempty\doclip} \def\doclip[#1]% nb top->bottom left->right {\bgroup \getparameters[\??cp][#1]% \doifelse\@@cpstate\v!start\dodoclip{\egroup\hbox}} \def\dodoclip {\dowithnextbox {\ifdim\@@cpwidth>\zeropoint \!!dimena\@@cpwidth \!!dimenc\@@cphoffset \else \!!dimena\nextboxwd \divide\!!dimena \@@cpnx \!!dimenc\@@cpx\!!dimena \advance\!!dimenc -\!!dimena \!!dimena\@@cpsx\!!dimena \fi \relax % sure \ifdim\@@cpheight>\zeropoint \!!dimenb\@@cpheight \!!dimend\nextboxht \advance\!!dimend -\@@cpvoffset \advance\!!dimend -\!!dimenb \else \!!dimenb\nextboxht \divide\!!dimenb \@@cpny \!!dimend-\@@cpy\!!dimenb \advance\!!dimend -\@@cpsy\!!dimenb \advance\!!dimend \!!dimenb \!!dimenb\@@cpsy\!!dimenb \advance\!!dimend \nextboxht % dimend ! \fi \setbox\nextbox\hbox % old {\advance\!!dimenc -\@@cpleftoffset % new ! \advance\!!dimend -\@@cpbottomoffset % new ! % - added \hskip-\!!dimenc\lower\!!dimend\flushnextbox}% old \nextboxwd\zeropoint \nextboxht\zeropoint \nextboxdp\zeropoint \setbox\nextbox\hbox {\advance\!!dimena \@@cpleftoffset % new ! \advance\!!dimena \@@cprightoffset % new ! \advance\!!dimenb \@@cpbottomoffset % new ! \advance\!!dimenb \@@cptopoffset % new ! \dostartclipping\@@cpmp\!!dimena\!!dimenb % old \flushnextbox \dostopclipping}% \setbox\nextbox\hbox % new ! {\!!dimena-\@@cpleftoffset % new ! \!!dimenb \@@cpbottomoffset % new ! % - removed \hskip\!!dimena\lower\!!dimenb\flushnextbox}% new ! \nextboxwd\!!dimena \nextboxht\!!dimenb \nextboxdp\zeropoint \flushnextbox \egroup}% \hbox} \setupclipping [\c!state=\v!start, \c!n=1, % was 2 \c!nx=\@@cpn,\c!x=1,\c!sx=1, \c!ny=\@@cpn,\c!y=1,\c!sy=1, \c!width=\!!zeropoint, \c!height=\!!zeropoint, \c!hoffset=\!!zeropoint, \c!voffset=\!!zeropoint, \c!offset=\zeropoint, \c!leftoffset=\@@cpoffset, % \zeropoint, \c!rightoffset=\@@cpoffset, % \zeropoint, \c!topoffset=\@@cpoffset, % \zeropoint, \c!bottomoffset=\@@cpoffset,% \zeropoint, \c!mp=] %D \startbuffer %D \startuseMPgraphic{test} %D path p ; p := fullcircle scaled 4cm ; %D draw p withpen pencircle scaled 1cm ; %D setbounds currentpicture to boundingbox p ; %D \stopuseMPgraphic %D %D \hbox to \hsize \bgroup %D \hss %D \ruledhbox{\useMPgraphic{test}}% %D \hss %D \ruledhbox{\clip{\useMPgraphic{test}}}% %D \hss %D \egroup %D \stopbuffer %D %D \typebuffer \getbuffer %D Mirroring. \def\domirrorbox % \hbox/\vbox/\vtop {\bgroup \dowithnextbox {\dontshowcomposition \scratchdimen\nextboxwd % better use an hbox (if no \forgetall, leftskip etc may creep in) %\setbox\nextbox\vbox{\forgetall\dostartmirroring\hskip-\nextboxwd\flushnextbox\dostopmirroring}% \setbox\nextbox\hbox{\dostartmirroring\hskip-\nextboxwd\flushnextbox\dostopmirroring}% \nextboxwd\scratchdimen \flushnextbox \egroup}} \unexpanded\def\mirror {\domirrorbox\hbox} % \setbox0=\hbox{gans} % \ruledhbox{\copy0 \schaal[sx=2,sy=2]{\copy0}} % \mirror{\ruledhbox{\copy0 \schaal{\box0}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-url.mkii0000644000175000017500000002122111754241457024275 0ustar norbertnorbert%D \module %D [ file=lang-url, %D version=2008.01.22, % used to be lang-mis %D title=\CONTEXT\ Language Macros, %D subtitle=Language Options, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This is rather old code. The following solution was used %D for a long time and is kind of built-up over the years. \ifx\\\undefined \let\\\crlf \fi %D \macros %D {hyphenatedurl} %D %D For those who want to put full \URL's in a text, we offer %D %D \startbuffer %D \hyphenatedurl{http://optimist.optimist/optimist/optimist.optimist#optimist} %D \stopbuffer %D %D \typebuffer %D %D which breaks at the appropriate places. Watch the \type{#} %D hack. %D %D When passed as argument, like in \type {\goto}, one needs %D to substitute a \type {\\} for each \type{#}. %D %D \startbuffer %D \hyphenatedurl{http://this.is.a.rather/strange/reference#indeed} %D \stopbuffer %D %D \typebuffer \ifx\urlsplitmode\undefined \chardef\urlsplitmode\plusone \fi % 0 => don't split % 1 => . : na, rest voor % 2 => alles na % 3 => alles voor % \bgroup \catcode`\~=\active \catcode`\/=\active % % \unexpanded\gdef\hyphenatedurl#1% {}{} handles accents % {\bgroup % \ifnum\hyphenpenalty<10000 \else % \def\discretionary##1##2##3{##1\allowbreak##2}% % \fi % \obeyhyphens % \def\splitbefore##1% % {\setbox\scratchbox=\hbox{##1{}{}}% % \ifcase\urlsplitmode % \box\scratchbox % \or % \postwordbreak\box\scratchbox\prewordbreak % \or % \prewordbreak\discretionary{\box\scratchbox}{}{\box\scratchbox}\prewordbreak % \else % \postwordbreak\box\scratchbox\prewordbreak % \fi}% % \def\splitafter##1% % {\ifcase\urlsplitmode % ##1{}{}% % \or % \prewordbreak\discretionary{##1{}{}}{}{##1{}{}}\prewordbreak % \or % \prewordbreak\discretionary{##1{}{}}{}{##1{}{}}\prewordbreak % \else % \prewordbreak\discretionary{}{##1{}{}}{##1{}{}}\prewordbreak % \fi}% % \def\splitanyway##1% % {\prewordbreak##1\prewordbreak}% % \def\flushurl% % {\savedurl\let\savedurl\empty}% % \def\\% % {\spliturl\#}% % \let\~=\lettertilde\let~=\~% % \let\/=\letterslash\let/=\/% % \let\savedurl\empty % \scratchcounter\zerocount % used for hyphenmethod % \handletokens#1\with\scanurl\savedurl % \egroup} % % \egroup % \chardef\urlhyphenmethod=0 % \def\scanurl#1% % {\advance\scratchcounter\plusone % \ifx#1\blankspace % \flushurl\splitanyway\normalspace % \else\ifx#1\ % % \flushurl\splitanyway\normalspace % \else\ifx#1\space % \flushurl\splitanyway\normalspace % \else\ifx#1\~% % \flushurl\splitbefore\~% % \else\ifx#1\#% % \flushurl\splitbefore\#% % \else\ifx#1\&% % \flushurl\splitbefore\&% % \else\ifx#1\%% % \flushurl\splitbefore\%% % \else\ifx#1\_% % \flushurl\splitbefore\_% % \else\if\noexpand#1\relax % #1% % \else\ifnum\catcode`#1=8 % \flushurl\splitbefore\_% % \else\ifnum\catcode`#1=6 % \flushurl\splitbefore\#% % \else\ifnum\catcode`#1=4 % \flushurl\splitbefore\&% % \else\expandafter\if\string#1\lettertilde % \flushurl\splitbefore\~% % \else\expandafter\if\string#1\letterpercent % \flushurl\splitbefore\%% % \else\expandafter\if\string#1\letterunderscore % \flushurl\splitbefore\_% % \else\expandafter\if\string#1\letterquestionmark % \flushurl\splitafter\letterquestionmark % \else\expandafter\if\string#1\letterat % \flushurl\splitafter\letterat % \else\expandafter\if\string#1\letterslash % \edef\savedurl{\savedurl\letterslash}% % \else\expandafter\if\string#1+% % \flushurl\splitafter+% % \else\expandafter\if\string#1:% % \flushurl\splitafter:% % \else\expandafter\if\string#1.% % \flushurl\splitafter.% % \else\expandafter\if\string#1(% % \flushurl\splitbefore(% % \else\expandafter\if\string#1)% % \flushurl\splitafter)% % \else % \ifx\savedurl\empty\else % \splitbefore\savedurl % \let\savedurl\empty % \fi % \ifcase\urlhyphenmethod % \string#1% % \else % \ifnum\scratchcounter>\plusthree % so, \http: will not break % \edef\savedurl{\string#1}% % \else % \string#1% % \fi % \fi % \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} %D The following approach takes more resources but is cleaner (after all, we now %D have huge \TEX's. It's is basically a \TEX\ version of the \MKIV\ variant. \newtoks\everyhyphenatedurl \appendtoks \let\&\letterampersand \let\#\letterhash \let\~\lettertilde \let\\\letterbackslash \let\$\letterdollar \let\^\letterhat \let\_\letterunderscore \let\{\letterleftbrace \let\}\letterrightbrace \let\|\letterbar \let~=\lettertilde \let|=\letterbar \to \everyhyphenatedurl \def\hyphenatedurlseparator{} % \periodcentered \def\dohyphenatedurlnormal#1{\char#1\relax}% \def\dohyphenatedurlafter #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}% \def\dohyphenatedurlbefore#1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}% % 0=normal 1=before 2=after \def\sethyphenatedurlnormal#1{\expandafter\chardef\csname url @ #1\endcsname\zerocount} \def\sethyphenatedurlbefore#1{\expandafter\chardef\csname url @ #1\endcsname\plusone } \def\sethyphenatedurlafter #1{\expandafter\chardef\csname url @ #1\endcsname\plustwo } \sethyphenatedurlbefore ! \sethyphenatedurlbefore " \sethyphenatedurlbefore \letterhash \sethyphenatedurlbefore \letterdollar \sethyphenatedurlbefore \letterpercent \sethyphenatedurlbefore \letterampersand \sethyphenatedurlbefore ( \sethyphenatedurlbefore * \sethyphenatedurlbefore + \sethyphenatedurlbefore , \sethyphenatedurlbefore - \sethyphenatedurlbefore . \sethyphenatedurlbefore / \sethyphenatedurlbefore : \sethyphenatedurlbefore ; \sethyphenatedurlbefore < \sethyphenatedurlbefore = \sethyphenatedurlbefore > \sethyphenatedurlbefore ? \sethyphenatedurlbefore @ \sethyphenatedurlbefore [ \sethyphenatedurlbefore \letterbackslash \sethyphenatedurlbefore ^ \sethyphenatedurlbefore _ \sethyphenatedurlbefore ` \sethyphenatedurlbefore \letteropenbrace \sethyphenatedurlbefore \letterbar \sethyphenatedurlbefore \lettertilde \sethyphenatedurlafter ' \sethyphenatedurlafter ) \sethyphenatedurlafter ] \sethyphenatedurlafter \letterclosebrace \unexpanded \def\hyphenatedurl#1% {\dontleavehmode \begingroup \the\everyhyphenatedurl \edef\ascii{#1}% \expanded{\handletokens{\detokenize\expandafter{\ascii}}}\with\dohyphenatedurl \endgroup} \def\dohyphenatedurl#1% {\ifcase\executeifdefined{url @ #1}\zerocount\relax \expandafter\dohyphenatedurlnormal \or \expandafter\dohyphenatedurlbefore \or \expandafter\dohyphenatedurlafter \fi{\number`#1}} % maybe ... to be finished % % \def\hyphenatedstring#1% % {\bgroup % \nohyphens % \def\next##1{##1\doif{##1}{-}{\allowbreak}}% % \handletokens#1\with\next % \egroup} % % {\hsize1cm\hyphenatedstring{ABXXXXXXXXXXC-12345-12345}} %D \macros %D {hyphenatedfilename} %D %D For the moment we treat filenames in a similar way, %D %D \starttyping %D \hyphenatedfilename{here/there/filename.suffix} %D \stoptyping \ifx\hyphenatedfilename\undefined \let\hyphenatedfilename\hyphenatedurl \fi % \def\test#1% % {\dontleavehmode % \begingroup % \tttf % \hyphenatedurl {% % \letterampersand #1\letterampersand #1\letterampersand #1\letterampersand #1\letterampersand % \letterhash #1\letterhash #1\letterpercent #1\letterslash #1\letterampersand % }% % \endgroup} % \dorecurse{100}{\test{a} \test{ab} \test{abc} \test{abcd} \test{abcde} \test{abcdef}} \protect \endinput % \bgroup % \gdef\lettercolon{:} % \catcode`\:=\active % \catcode`\^=\active % \catcode`\/=\active % \catcode`\~=\active % \gdef\theurlcolon {\nobreak\hbox{\lettercolon}\allowbreak} % \gdef\theurlslash#1{\nobreak\hbox{\letterslash}\ifx#1\relax\else\ifnum`/=\expandafter`\string#1\else\allowbreak\fi#1\fi} % \gdef\theurlhat {\allowbreak\hbox{\letterhat}\nobreak} % \gdef\theurltilde {\allowbreak\hbox{\lettertilde}\nobreak} % \gdef\ForMojcaWhoLikesHacks#1% % {\dontleavehmode % \begingroup % \mathcode`\:="8000 \let:\theurlcolon % \mathcode`\^="8000 \let^\theurlhat % \mathcode`\/="8000 \let/\theurlslash % \mathcode`\~="8000 \let~\theurltilde % \everymath\emptytoks % \mathsurround\zeropoint$\tf#1\relax$% % \endgroup} % \egroup % \hsize 1mm \ForMojcaWhoLikesHacks{http://www.sil.org//silesr/} context-2013.05.28.20130704/texmf-dist/tex/context/base/math-pln.mkiv0000644000175000017500000000466311754241457024324 0ustar norbertnorbert%D \module %D [ file=math-pln, %D version=2001.11.16, %D title=\CONTEXT\ Math Macros, %D subtitle=Plain Helpers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Here we collect some Plain \TEX\ leftovers. \writestatus{loading}{ConTeXt Math Macros / Plain Helpers} \unprotect % we need proper unicode: \def\relbar{\mathrel{\smash-}} % - has the same height as + .. no clue what this refers to % might change \unexpanded\def\hrulefill{\leaders\hrule\hfill} \unexpanded\def\dotfill {\cleaders\hbox{$\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu$}\hfill} % will move \def\oalign#1% {\leavevmode \vtop {\baselineskip\zeroskip \lineskip.25\exheight \ialign{##\crcr#1\crcr}}} \def\ooalign % chars over each other {\lineskiplimit-\maxdimen \oalign} % needs checking \def\choose{\atopwithdelims()} \def\brack {\atopwithdelims[]} \def\brace {\atopwithdelims\{\}} % needs checking \unexpanded\def\buildrel#1\over#2% {\mathrel{\mathop{\kern\zeropoint#2}\limits^{#1}}} \unexpanded\def\bmod {\nonscript \mskip-\medmuskip \mkern5mu \mfunction{mod}% \penalty900 \mkern5mu \nonscript \mskip-\medmuskip} \unexpanded\def\pmod#1% {\allowbreak \mkern18mu (\mfunction{mod}\mskip\medmuskip#1)} \unexpanded\def\cases#1% {\left\{% \mskip\thinmuskip \vcenter {\normalbaselines \mathsurround\zeropoint \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}% \right.} \unexpanded\def\matrix#1% {\emptyhbox \mskip\thinmuskip \vcenter {\normalbaselines\mathsurround\zeropoint \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr \mathstrut\crcr\noalign{\kern-\baselineskip} #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}% \mskip\thinmuskip} \unexpanded\def\pmatrix#1% {\left(\matrix{#1}\right)} \unexpanded\def\openup {\afterassignment\math_openup\scratchdimen=} \def\math_openup {\advance\lineskip \scratchdimen \advance\baselineskip \scratchdimen \advance\lineskiplimit\scratchdimen} \unexpanded\def\displaylines#1% {\the\mathdisplayaligntweaks \tabskip\zeroskip \halign {\hbox to \displaywidth{$\tabskip\zeroskip\everycr\emptytoks\hfil\displaystyle##\hfil$}\crcr #1\crcr}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-spe.mkii0000644000175000017500000002056711754241457024276 0ustar norbertnorbert%D \module %D [ file=lang-spe, %D version=2002.05.07, % 1996.01.25, %D title=\CONTEXT\ Language Macros, %D subtitle=Specifics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code was originally placed in the language %D initialization module, but isolating it is clearer. Language %D specifics evolved out of user demands for special features, %D like the german active quote. After a while I decided to %D associate them to languages in a more general way so that we %D could associate all kind of things with language switching. %D %D This is a typical example of functionality that occasionally %D gets improved based on user input and experience. Much of the %D code is pretty old and could probabbly be done in better ways. %D It's probably also the kind of code that has been and will be %D written over and over again by \TEX\ users around the world, %D so there are probably better implementations of similar %D functionality around. Therefore, users are invited to pop in %D their own handling as long as it does not interfere with %D existing code. Writing the more obscure macros that deal with %D this is a good learning experience (catcodes, lccodes, token %D lists, expansion, \unknown). \writestatus{loading}{ConTeXt Language Macros / Specifics} \unprotect %D \macros %D {everyresetlanguagespecifics,resetlanguagespecifics} %D %D Cleanup macros. \newevery \everyresetlanguagespecifics \relax \def\resetlanguagespecifics {\ifcase\protectionlevel \the\everyresetlanguagespecifics \else % to be translated % \writestatus\m!systems{don't change language in unprotected mode!}% \fi} \appendtoks \resetlanguagespecifics \to \everycleanupfeatures %D \macros %D {startlanguagespecifics,enablelanguagespecifics} %D %D Each language has its own typographic pecularities. Some of %D those can be influenced by parameters, others are handled by %D the interface, but as soon as specific commands come into %D view we need another mechanism. In the macro that activates %D a language, we call \type{\enablelanguagespecifics}. This %D macro in return calls for the setup of language specific %D macros. Such specifics are defined as: %D %D \starttyping %D \startlanguagespecifics[de] %D \installcompoundcharacter "a {\"a} %D \installcompoundcharacter "e {\"e} %D \installcompoundcharacter "s {\SS} %D \stoplanguagespecifics %D \stoptyping %D %D Instead of \type{[du]} we can pass a comma separated %D list, like \type{[du,nl]}. Next calls to this macro add the %D specifics to the current list. %D %D Before we actually read the specifics, we first take some %D precautions that will prevent spurious spaces to creep into %D the list. % We should use token registers, but alas, we run out of them and % \ETEX\ has a bug. Well, let's use a token register now (2006). \def\startlanguagespecifics% % we use double to {\bgroup \catcode`\^^I=\@@ignore \catcode`\^^M=\@@ignore \catcode`\^^L=\@@ignore \dodoubleempty\dostartlanguagespecifics} % get rid of spaces %D The main macro looks quite complicated but actually does %D nothing special. By embedding \type{\do} we can easily %D append to the lists and also execute them at will. Just to %D be sure, we check on spurious spaces. The second dummy %D argument gobbles spaces. \def\languageencoding {\ifx\characterencoding\nocharacterencoding \else \characterencoding-% \fi} \long\def\dostartlanguagespecifics[#1][#2]#3\stoplanguagespecifics {\egroup \processcommalist[#1]{\dosetlanguagespecifics{#3}}} % \long\def\dosetlanguagespecifics#1#2% % {\ifundefined{\??la\languageencoding#2\??la}\forgetlanguagespecifics[#2]\fi % % the next line catches the case that specifics are enabled *before* they are defined % \expandafter\ifx\csname\??la\languageencoding#2\??la\endcsname\relax\forgetlanguagespecifics[#2]\fi % \appendvalue{\??la\languageencoding#2\??la}{#1}% % \bgroup % \setbox\scratchbox\hbox{\enablelanguagespecifics[#2]}% % \ifdim\wd\scratchbox>\zeropoint % \showmessage\m!linguals7{\currentencoding-#2,\the\wd\scratchbox\space}\wait % \else % \showmessage\m!linguals8{\currentencoding-#2}% % \fi % \egroup % \doif{#2}\currentmainlanguage{\enablelanguagespecifics[#2]}} \def\languagespectag#1{\??la\languageencoding#1\??la} \long\def\dosetlanguagespecifics#1#2% {\edef\askedlanguagespecificstag{\languagespectag{#2}}% \ifcsname\askedlanguagespecificstag\endcsname \else \expandafter\newtoks\csname\askedlanguagespecificstag\endcsname \fi \csname\askedlanguagespecificstag\endcsname\@EA{\the\csname\askedlanguagespecificstag\endcsname#1}% \bgroup \setbox\scratchbox\hbox{\enablelanguagespecifics[#2]}% \ifdim\wd\scratchbox>\zeropoint \showmessage\m!linguals7{\currentencoding-#2,\the\wd\scratchbox\space}\wait \else \showmessage\m!linguals8{\currentencoding-#2}% \fi \egroup \doif{#2}\currentmainlanguage{\enablelanguagespecifics[#2]}} \def\forgetlanguagespecifics[#1]% {\csname\languagespectag{#1}\endcsname\emptytoks} %D Enabling them is rather straightforward. We only have to %D define \type{\do} in such a way that \type{{ }} is removed %D and the language key is gobbled. % \def\enablelanguagespecifics[#1]% % {\the\executeifdefined{\??la % \@EA\ifx\csname\??la#1\c!default\endcsname\relax % \languageencoding % \else % \csname\??la#1\c!default\endcsname % \fi % \??la}\emptytoks % \the\executeifdefined{\??la#1\??la}\emptytoks % \the\executeifdefined{\??la\languageencoding#1\??la}\emptytoks} % dup ? \def\enablelanguagespecifics[#1]% {\edef\askedlanguagespecificslanguage{\defaultlanguage{#1}}% \ifcsname\??la\askedlanguagespecificslanguage\??la\endcsname \the\csname\??la\askedlanguagespecificslanguage\??la\endcsname \fi \ifx\languageencoding\empty\else \ifcsname\??la\languageencoding\askedlanguagespecificslanguage\??la\endcsname \the\csname\??la\languageencoding\askedlanguagespecificslanguage\??la\endcsname \fi \fi} %D \macros %D {deactivatelanguagespecific} %D %D The next code makes it possible to disable the specifics. % \def\deactivatelanguagespecific#1% % {\ifundefined{l g s \string#1}% % \letgvalueempty{l g s \string#1}% signal to prevent dup def % \bgroup % \catcode`#1=\@@active % \uccode`~=`#1 % \uppercase{\doglobal\appendtoks\dodeactivatetoken{~}\to\everyresetlanguagespecifics}% % \egroup % \expanded{\doglobal\noexpand\appendtoks{#1}{\the\catcode`#1}}\to\everyresetlanguagespecifics % \fi} % \def\dodeactivatetoken#1#2#3% test needed to avoid clash with \unprotect % {\def#1{#2}\ifnum\catcode`#2=\@@active\catcode`#2=#3\relax\fi} %D We cannot hook this into the installer since language %D specifics can be anything. So far, we have the following %D potentially active characters. %D Beware, this should happen under an unprotected regime; %D thanks to Giuseppe Oblomov Bilotta, who first noticed %D that something was wrong. \protect % \deactivatelanguagespecific " % \deactivatelanguagespecific / % \deactivatelanguagespecific : % \deactivatelanguagespecific ; % \deactivatelanguagespecific ? % \deactivatelanguagespecific ! \unprotect % yes or no (taco wins: no) % \startlanguagespecifics[nl,cs,sk,fr] % \lccode`\'=`\' % \stoplanguagespecifics %D \macros %D {ordinaldaynumber, highordinalstr, ordinalstr} %D %D Efficient general ordinal number converters are sometimes %D difficult to implement. Fortunately dates never exceed the %D number~31. \ifx\high \undefined \let\high \firstofoneargument \fi % todo \ifx\notsmallcapped\undefined \let\notsmallcapped\firstofoneargument \fi % todo \def\highordinalstr#1{\high{\notsmallcapped{#1}}} \def\ordinalstr #1{\notsmallcapped{#1}} \def\ordinaldaynumber#1% \strippedcsname\ordinaldaynumber {\expanded{\executeifdefined{\currentlanguage ordinaldaynumber}% \noexpand\firstofoneargument{\number#1}}} %D Language specific converters have definitions like: %D %D \starttyping %D \def\enordinaldaynumber#1{...} %D \stoptyping %D %D Examples can be found in the other \type {lang} modules. % \ifprocessingXML is a nasty dependency \appendtoks \ifprocessingXML \else \resetlanguagespecifics \fi \to \everylanguage \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-pe.mkiv0000644000175000017500000000106511754241457024142 0ustar norbertnorbert%D \module %D [ file=cont-en, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ English Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {persian} \def\messageinterface {english} \def\defaultlanguagetag{pe} \input context.mkiv \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-txt.mkii0000644000175000017500000002331111754241457024321 0ustar norbertnorbert%D \module %D [ file=meta-txt, %D version=2000.07.06, %D title=\METAPOST\ Graphics, %D subtitle=Text Tricks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this library some handy text manipulations are %D defined. Some can and will be improved as soon as the %D \TEX||\METAPOST\ interface is stable. Some of the %D solutions may look weird, which is entirely my fault, %D since I implemented them in the process of getting grip %D on this kind of manipulations. Undoubtly better %D \METAPOST\ code is possible, but my way of learning %D this kind of trickery happens to be by \quote {trial %D and error} and \quote {look and feel} (as well as %D identifying tricks in Hobby's code). % textext ipv btex ... etex % we need a proper prefix here \unprotect \startMPextensions if unknown context_text: input mp-text; fi; \stopMPextensions %%%%%%% % \def\newchar#1{\chardef#1=0 } \ifdefined\MPtoks \else \newtoks\MPtoks \fi \ifdefined\MPbox \else \newbox \MPbox \fi \ifdefined\parwidth \else \newdimen\parwidth \fi \ifdefined\parheight \else \newdimen\parheight \fi \ifdefined\parvoffset \else \newdimen\parvoffset \fi \ifdefined\parhoffset \else \newdimen\parhoffset \fi \ifdefined\parlines \else \newcount\parlines \fi \ifdefined\partoks \else \newtoks \partoks \fi \ifdefined\shapetextbox \else \newbox \shapetextbox \fi \newif \ifparseries \ifdefined\parfirst \else \chardef \parfirst=0 \fi \def\startshapetext[#1]% {\global\newcounter\currentshapetext \global\setbox\shapetextbox\vbox\bgroup \expanded{\switchtobodyfont[\@@shbodyfont]}% \dontcomplain \hsize\parwidth \setuptolerance[\v!verytolerant,\v!stretch]% \!!counta\zerocount \!!toksa\emptytoks \def\docommand##1% {\setbox\scratchbox\hbox{\useMPgraphic{##1}}% \global\chardef\parfirst\zerocount \getMPdata % \readlocfile{\MPdatafile}{}{}% \setshapecharacteristics \advance\!!counta by \parlines \expandafter\appendtoks\the\partoks\to\!!toksa}% \processcommalist[#1]\docommand \global\parseriestrue \xdef\totalparlines{\the\!!counta}% \global\partoks\!!toksa %\ifx\partoks\emptytoks\else % safeguard \expanded{\parshape \the\!!counta \the\!!toksa}% %\fi \setshapecharacteristics % extra dummy \ifparseries\def\par{\endgraf\adaptparshape}\fi \EveryPar{\begstrut}} \def\stopshapetext {\endstrut %\removebottomthings \egroup \global\newcounter\currentshapetext \getshapecharacteristics} \def\adaptparshape% {\def\docommand##1% {\ifcase\!!counta \expandafter\appendtoks\space##1 \to\!!toksa \else \advance\!!counta \minusone \fi}% \!!counta\prevgraf \doglobal\decrement(\totalparlines,\!!counta)% \multiply\!!counta \plustwo \!!toksa\emptytoks \expanded{\processseparatedlist[\the\partoks][\space]}\docommand \global\partoks\!!toksa %\ifx\partoks\emptytoks\else % safeguard \expanded{\parshape\totalparlines\the\partoks}% }%\fi} \def\getshapecharacteristics% {\doglobal\increment\currentshapetext \doifdefinedelse{parlines:\currentshapetext} {\global\parlines \getvalue{parlines:\currentshapetext}% \global\chardef\parfirst \getvalue{parfirst:\currentshapetext}% \global\parvoffset \getvalue{parvoffset:\currentshapetext}% \global\parhoffset \getvalue{parhoffset:\currentshapetext}% \global\parwidth \getvalue{parwidth:\currentshapetext}% \global\parheight \getvalue{parheight:\currentshapetext}} {\global\parlines \plusone \global\chardef\parfirst \zerocount \global\parvoffset \zeropoint \global\parhoffset \zeropoint \global\parwidth \hsize \global\parheight \vsize}} \def\setshapecharacteristics% {\doglobal\increment\currentshapetext \setxvalue{parlines:\currentshapetext }{\the\parlines}% \setxvalue{parfirst:\currentshapetext }{\the\parfirst}% \setxvalue{parvoffset:\currentshapetext}{\the\parvoffset}% \setxvalue{parhoffset:\currentshapetext}{\the\parhoffset}% \setxvalue{parwidth:\currentshapetext }{\the\parwidth}% \setxvalue{parheight:\currentshapetext }{\the\parheight}} \def\getshapetext% option: unvbox {\vbox\bgroup \forgetall \setbox\scratchbox\vbox to \parheight {\expanded{\switchtobodyfont[\@@shbodyfont]}% evt strutheight en \splittopskip\strutheight % lineheight opslaan \vskip\parvoffset % scheelt switch en \ifcase\parfirst\or\vskip\lineheight\fi % is ook veiliger \hskip\parhoffset \hbox{\vsplit\shapetextbox to \parlines\lineheight}}% \wd\scratchbox\parwidth \ht\scratchbox\parheight \dp\scratchbox\zeropoint \box\scratchbox \getshapecharacteristics \egroup} \def\setupshapetexts% {\dodoubleempty\getparameters[\??sh]} \setupshapetexts% [\c!bodyfont=] %%%%%%% rotfont nog definieren \doifundefined{RotFont}{\definefont[RotFont][RegularBold]} \def\processfollowingtoken#1% strut toegevoegd {\appendtoks#1\to\MPtoks \setbox\MPbox=\hbox{\RotFont\setstrut\strut\the\MPtoks}% \startMPdrawing n := n + 1 ; len[n] := \the\wd\MPbox ; \stopMPdrawing \startMPdrawing[-] % pic[n] := textext{\RotFont\setstrut\strut#1} ; % btex \RotFont\setstrut\strut#1 etex ; pic[n] := btex \RotFont\setstrut\strut#1 etex ; pic[n] := pic[n] shifted - llcorner pic[n] ; \stopMPdrawing} \startuseMPgraphic{followtokens} % we default to nothing \stopuseMPgraphic \def\followtokens#1% {\vbox\bgroup \forgetall \dontcomplain \startMPenvironment \doifundefined{RotFont}{\definefont[RotFont][RegularBold]} \stopMPenvironment \MPtoks\emptytoks \resetMPdrawing \startMPdrawing \includeMPgraphic{followtokens} ; picture pic[] ; numeric len[], n ; n := 0 ; \stopMPdrawing \handletokens#1\with\processfollowingtoken \startMPdrawing if unknown RotPath : path RotPath ; RotPath := origin ; fi ; if unknown RotColor : color RotColor ; RotColor := black ; fi ; if unknown TraceRot : boolean TraceRot ; TraceRot := false ; fi ; if unknown ExtraRot : numeric ExtraRot ; ExtraRot := 0 ; fi ; numeric al, at, pl, wid, pos ; pair ap, ad ; al := arclength RotPath ; if al=0 : al := len[n] + ExtraRot ; RotPath := origin -- (al,0) ; fi ; if al1 : (n-1) else : 1 fi) ; if TraceRot : draw RotPath withpen pencircle scaled 1pt withcolor blue ; fi ; for i=1 upto n : wid := abs(xpart urcorner pic[i] - xpart llcorner pic[i]) ; pos := len[i]-wid/2 + (i-1)*pl ; at := arctime pos of RotPath ; ap := point at of RotPath ; ad := direction at of RotPath ; draw pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap withcolor RotColor ; if TraceRot : draw boundingbox pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap withpen pencircle scaled .25pt withcolor red ; draw ap withpen pencircle scaled .50pt withcolor green ; fi ; endfor ; \stopMPdrawing \MPdrawingdonetrue \getMPdrawing \resetMPdrawing \egroup} % \followtokens % {This is just a dummy text, kerned by T{\kern % -.1667em\lower .5ex\hbox {E}}{\kern -.125emX} and typeset % in a circle using {\setMFPfont M}{\setMFPfont % E}{\setMFPfont T}{\setMFPfont A}{\setMFPfont % P}{\setMFPfont O}{\setMFPfont S}{\setMFPfont T}.\quad} \startuseMPgraphic{fuzzycount} begingroup save height, span, drift, d, cp ; height := 3/ 5 * \baselinedistance ; span := 1/ 3 * height ; drift := 1/10 * height ; pickup pencircle scaled (1/12 * height) ; def d = (uniformdeviate drift) enddef ; for i := 1 upto \MPvar{n} : draw if (i mod 5)=0 : ((-d-4.5span,d)--(+d-0.5span,height-d)) else : ((-d,+d)--(+d,height-d)) fi shifted (span*i,d-drift) ; endfor; picture cp ; cp := currentpicture ; % for readability setbounds currentpicture to (llcorner cp shifted (0,-ypart llcorner cp) -- lrcorner cp shifted (0,-ypart lrcorner cp) -- urcorner cp -- ulcorner cp -- cycle) ; endgroup ; \stopuseMPgraphic \setupMPvariables [fuzzycount] [n=10] \def\fuzzycount#1% {{\tx\useMPgraphic{fuzzycount}{n=#1}}} \defineconversion[fuzzy][\fuzzycount] %%%%%%% \setupMPvariables [EnglishRule] [height=1ex, width=\the\localhsize, % without \the, problems in non e-tex color=darkgray] \defineblank [EnglishRule] [medium] \startuniqueMPgraphic{EnglishRule}{height,width,color} height = \MPvar{height} ; x1 = 0 ; x3 = \MPvar{width} ; x2 = x4 = .5x3 ; y1 = y3 = 0 ; y2 = -y4 = height/2 ; fill z1..z2..z3 & z3..z4..z1 & cycle withcolor \MPvar{color} ; \stopuniqueMPgraphic \def\EnglishRule% {\startlinecorrection[EnglishRule] \setlocalhsize \noindent \reuseMPgraphic{EnglishRule} \stoplinecorrection} %D The following macro returns a tight bound character %D sequence. %D %D \useMPlibrary[txt] %D %D \startlinecorrection %D \TightText{\ss\bf 123}{0cm}{3cm}{red} %D \stoplinecorrection \def\TightText#1#2#3#4% {\hbox % \ruledhbox {\startMPcode picture p ; p := image (graphictext "#1" withfillcolor red) ; draw p xsized #2 ysized #3 withcolor \MPcolor{#4} ; \stopMPcode}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-lua.mkiv0000644000175000017500000000310012130411274024327 0ustar norbertnorbert%D \module %D [ file=syst-lua, %D version=2008.01.25, %D title=\CONTEXT\ System Macros, %D subtitle=Helper macros based on \LUA, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{syst-lua}{1.001} \unprotect \def\expdoifelse#1#2{\ctxcommand{doifelse(\!!bs#1\!!es==\!!bs#2\!!es)}} \def\expdoif #1#2{\ctxcommand{doif (\!!bs#1\!!es==\!!bs#2\!!es)}} \def\expdoifnot #1#2{\ctxcommand{doifnot (\!!bs#1\!!es==\!!bs#2\!!es)}} % \testfeatureonce{100000}{\doifelse{hello world}{here i am}{}} % 0.3 % \testfeatureonce{100000}{\expandabledoifelse{hello world}{here i am}{}} % 1.5 \def\expdoifcommonelse#1#2{\ctxcommand{doifcommonelse("#1","#2")}} \def\expdoifinsetelse #1#2{\ctxcommand{doifinsetelse("#1","#2")}} % we define these here, just in case ... \def\luastringsep{===} % this permits \typefile{self} otherwise nested b/e sep problems \edef\!!bs{[\luastringsep[} \edef\!!es{]\luastringsep]} \unexpanded\def\writestatus#1#2{\ctxcommand{writestatus(\!!bs#1\!!es,\!!bs#2\!!es)}} % A handy helper: % \def\luaexpr#1{\ctxlua{context(tostring(#1))}} % more efficient: % We can omit the tex.ctxcatcodes here as nowadays we seldom % change the regime at the \TEX\ end: \def\luaexpr#1{\directlua{tex.print(tostring(#1))}} % helpers: \def\ui_fo #1{#1} \def\ui_go #1{} \def\ui_ft#1#2{#1} \def\ui_st#1#2{#2} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-heb.mkii0000644000175000017500000000014611244221744024250 0ustar norbertnorbert\unprotected \writestatus\m!systems{load ARABTEX as a module instead} \usemodule[arabtex] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-col.mkiv0000644000175000017500000000111511754241457024316 0ustar norbertnorbert%D \module %D [ file=attr-col, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Color, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Attribute Macros / Color} \registerctxluafile{attr-col}{1.001} \unprotect % We implement this elsewhere but some coce might end up here. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-con.mkii0000644000175000017500000006755511754241457024305 0ustar norbertnorbert%D \module %D [ file=core-con, %D version=1997.26.08, %D title=\CONTEXT\ Core Macros, %D subtitle=Conversion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Conversion} \unprotect \ifx\currentlanguage\undefined \let\currentlanguage\empty \fi \ifx\labeltext \undefined \let\labeltext\firstofoneargument \fi %D This module deals with all kind of conversions from numbers %D and dates. I considered splitting this module in a support %D one and a core one, but to keep things simple as well as %D preserve the overview, I decided against splitting. \let\spr\firstofoneargument % separator \let\stp\firstofoneargument % stopper % cleaner, some day: % % \def\isolateseparators % etex only, even works with list separator overloading % {\unexpanded\def\spr##1{{##1}}% % \unexpanded\def\stp##1{{##1}}} % needed for arab : \def\isolateseparators % even works with list separator overloading {\def\spr##1{{##1}}% \def\stp##1{{##1}}} %D \macros %D {numbers} %D %D First we deal with the dummy conversion of numbers using the %D \TEX\ primitive \type{\number}. The uppercase alternative is %D only there for compatibility with the other conversion %D macros. We could do without \type{#1} but this way we get %D rid of unwanted braces. For the savety we also define a %D non||sence uppercase alternative. %D %D \showsetup{numbers} %D %D \starttyping %D \def\numbers#1{\number#1} %D \def\Numbers#1{\number#1} %D \stoptyping %D %D Due to read ahead, as in \type{[\pagenumber\space]} the space will %D disappear, unless we use: \def\numbers#1{\purenumber{#1}} \def\Numbers#1{\purenumber{#1}} %D \macros %D {romannumerals,Romannumerals} %D %D \TEX\ the program uses a rather tricky conversion from %D numbers to their roman counterparts. This conversion could %D of course be programmed in \TEX\ itself, but I guess Knuth %D found the programming trick worth presenting. %D %D \showsetup{romannumerals} %D \showsetup{Romannumerals} %D When upcasing the result, we just follow the text book rules %D of expansion. Later on we'll see some more uppercase tricks. \def\romannumerals#1% {\romannumeral#1} %D For some years we had \unknown %D %D \starttyping %D \def\Romannumerals#1% %D {\uppercase\expandafter{\romannumeral#1}} %D \stoptyping %D %D \unknown but we need to be fully expandable in order to get %D the utility output file right, so now we have the following %D solution. It was Patrick Gundlach who first noticed this %D ommision. \def\Romannumerals#1% {\expandafter\doRomannumerals\number#1\relax} \def\doRomannumerals#1#2\relax % spaces after ifcase prevent \relax {\ifnum#1#2<10 \ifcase0#1#2 \or I\or II\or III\or IV\or V\or VI\or VII\or VIII\or IX\fi \else\ifnum#1#2<100 \ifcase0#1 \or X\or XX\or XXX\or XL\or L\or LX\or LXX\or LXXX\or XC\fi \doRomannumerals#2\relax \else\ifnum#1#2<1000 \ifcase0#1 \or C\or CC\or CCC\or CD\or D\or DC\or DCC\or DCCC\or CM\fi \doRomannumerals#2\relax \else\ifnum#1#2<4000 \ifcase0#1 \or M\or MM\or MMM\fi \doRomannumerals#2\relax \else \uppercase\expandafter{\romannumeral#1#2}% \fi\fi\fi\fi} %D \macros %D {character,Character} %D %D Converting a number into a character can of course only %D be done with numbers less or equal to~26. At the cost of %D much more macros a faster conversion is possible, using: %D %D \starttyping %D \setvalue{char1}{a} \def\character#1{\getvalue{char#1}} %D \stoptyping %D %D But we prefer a simpel \type{\case}. %D %D \showsetup{character} %D \showsetup{Character} \def\unknowncharacter{-} % else in lists \relax %D Big case statements but pretty fast: \def\character#1% {\ifcase#1\unknowncharacter \or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m% \or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z% \else \unknowncharacter \fi} \def\Character#1% {\ifcase#1\unknowncharacter \or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M% \or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z% \else \unknowncharacter \fi} %D \macros %D {characters,Characters} %D %D Converting large numbers is supported by the next two %D macros. This time we just count on: $\cdots$~x, y, z, aa, %D ab, ac~$\cdots$. %D %D \showsetup{characters} %D \showsetup{Characters} %D The fully expandable alternative: \def\dodoconvertcharacters#1#2#3% {\ifcase#3\else \ifnum#3>#1 \expandafter\doconvertcharacters\expandafter#2\expandafter{\the\numexpr(#3+12)/#1-1\relax}% \expandafter#2\expandafter{\the\numexpr#3-((#3+12)/#1-1)*#1\relax}% \else \expandafter#2\expandafter{\number#3}% \fi \fi} \def\doconvertcharacters{\dodoconvertcharacters{26}} \def\characters{\doconvertcharacters\character} \def\Characters{\doconvertcharacters\Character} %D \macros %D {greeknumerals,Greeknumerals} %D %D Why should we only honour the romans, and not the greek? \def\greeknumerals#1% {% no longer needed: \mathematics {\ifcase#1\unknowncharacter\or \alpha \or \beta \or \gamma \or \delta \or \varepsilon \or \zeta \or \eta \or \theta \or \iota \or \kappa \or \lambda \or \mu \or \nu \or \xi \or \omicron \or \pi \or \varrho \or \sigma \or \tau \or \upsilon \or \phi \or \chi \or \psi \or \omega \else \unknowncharacter \fi}} \def\Greeknumerals#1% {% no longer needed: \mathematics {\ifcase#1\unknowncharacter \or \Alpha \or \Beta \or \Gamma \or \Delta \or \Epsilon \or \Zeta \or \Eta \or \Theta \or \Iota \or \Kappa \or \Lambda \or \Mu \or \Nu \or \Xi \or \Omicron \or \Pi \or \Rho \or \Sigma \or \Tau \or \Upsilon \or \Phi \or \Xi \or \Psi \or \Omega \else \unknowncharacter \fi}} %D \macros %D {oldstylenumerals,oldstyleromannumerals} %D %D These conversions are dedicated to Frans Goddijn. \unexpanded\def\oldstylenumerals#1% {{\os\number#1}} \unexpanded\def\oldstyleromannumerals#1% {{\leftrulefalse\rightrulefalse\ss\txx\boxrulewidth.15ex \ruledhbox spread .15em{\hss\uppercased{\romannumerals{#1}}\hss}}} %D \macros %D {protectconversion} %D %D The previous two commands are not robust enough to be %D passed to \type{\write} en \type{\message}. That's why we %D introduce: \def\protectconversion {\def\doconvertcharacters##1{##1}} % was \relax %{\def\doconvertcharacters##1{\ifcase0##1 0\else##1\fi}} more save %D \macros %D {normaltime,normalyear,normalmonth,normalday} %D %D The last part of this module is dedicated to converting %D dates. Because we want to use as meaningful commands as %D possible, and because \TEX\ already uses up some of those, %D we save the original meanings. \savenormalmeaning\time \savenormalmeaning\year \savenormalmeaning\month \savenormalmeaning\day %D \macros %D {month,MONTH} %D %D Converting the month number into a month name is done %D using a case statement, abstact values and the label %D mechanism. This way users can easily redefine a label from %D for instance german into austrian. %D %D \starttyping %D \setuplabeltext [de] [january=J\"anner] %D \stoptyping %D %D Anyhow, the conversion looks like: \def\domonthtag#1% {\ifcase#1% \or \v!january \or \v!february \or \v!march \or \v!april \or \v!may \or \v!june \or \v!july \or \v!august \or \v!september \or \v!october \or \v!november \or \v!december \else \v!unknown \fi} \def\doconvertmonthlong #1{\labeltext{\domonthtag{#1}}} \def\doconvertmonthshort#1{\labeltext{\domonthtag{#1}:\s!mnem}} \let\doconvertmonth\doconvertmonthlong %D We redefine the \TEX\ primitive \type{\month} as: %D %D \showsetup{month} %D \showsetup{MONTH} \def\monthlong {\doconvertmonthlong} \def\monthshort{\doconvertmonthshort} \def\month {\doconvertmonth} \def\MONTH #1{{\let\labeltext\LABELTEXT\month {#1}}} \def\MONTHLONG #1{{\let\labeltext\LABELTEXT\monthlong {#1}}} \def\MONTHSHORT#1{{\let\labeltext\LABELTEXT\monthshort{#1}}} %D We never explicitly needed this, but Tobias Burnus pointed %D out that it would be handy to convert to the day of the %D week. In doing so, we have to calculate the total number of %D days, taking leapyears into account. For those who are %D curious: %D %D \startitemize[packed] %D \item years that can be divided by 4 are leapyears %D \item exept years that can be divided by 100 %D \item unless years can be divided by 400 %D \stopitemize %D %D This makes the year 1900 into a normal year and 1996 and %D 2000 into leap years, right? Well, converting to string %D looks familiar: \def\doconvertday#1% {\labeltext {\ifcase#1 \or \v!sunday \or \v!monday \or \v!tuesday \or \v!wednesday \or \v!thursday \or \v!friday \or \v!saturday \fi}} %D \macros %D {getdayoftheweek, dayoftheweek} %D %D The conversion algoritm is an old one and a translation from %D a procedure written in MODULA~2 back in the 80's. I finaly %D found the 4--100-400 rules in some enclopedia. Look at this %D messy low level routine that takes the day, month and year %D as arguments: \newcount\normalweekday \def\getdayoftheweek#1#2#3% {\bgroup \!!counta#3\relax \advance\!!counta \minusone \!!countb\!!counta \multiply\!!countb 365 \advance\!!countb \ifcase#2\relax 0 \or 0 \or 31 \or 59 \or 90 \or120 \or151 \or 181 \or212 \or243 \or273 \or304 \or334 \or365 \fi \advance\!!countb #1\relax \ifnum#2>2 \doifleapyearelse{#3}{\advance\!!countb 1}{}\relax \fi \!!countc\!!counta \dosetdivision\!!countc4\!!countc \advance\!!countb \!!countc \!!countc\!!counta \dosetdivision\!!countc{100}\!!countc \advance\!!countb -\!!countc \!!countc\!!counta \dosetdivision\!!countc{400}\!!countc \advance\!!countb \!!countc \dosetmodulo\!!countb7\!!countb \advance\!!countb \plusone \@EA\egroup\@EA\normalweekday\the\!!countb\relax} \def\dayoftheweek#1#2#3% {\getdayoftheweek{#1}{#2}{#3}\doconvertday{\normalweekday}} %D Using this macro in %D %D \startbuffer %D monday: \dayoftheweek {4} {5} {1992} %D friday: \dayoftheweek {16} {6} {1995} %D monday: \dayoftheweek {25} {8} {1997} %D saturday: \dayoftheweek {30} {8} {1997} %D tuesday: \dayoftheweek {2} {1} {1996} %D tuesday: \dayoftheweek {7} {1} {1997} %D tuesday: \dayoftheweek {13} {1} {1998} %D friday: \dayoftheweek {1} {1} {2000} %D \stopbuffer %D %D \typebuffer %D %D gives %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D The macro \type {\getdayoftheweek} can be used to calculate %D the number \type {\normalweekday}. %D \macros %D {weekday,WEEKDAY} %D %D The first one is sort of redundant. It takes the day %D number argument. %D %D \showsetup{weekday} %D \showsetup{WEEKDAY} \def\weekday {\doconvertday} \def\WEEKDAY#1% {{\let\labeltext\LABELTEXT\doconvertday{#1}}} %D \macros %D {weekoftheday} %D %D {\em not yet implemented:} %D %D \starttyping %D \def\weekoftheday#1#2#3% %D {} %D \stoptyping %D \macros %D {doifleapyearelse, %D getdayspermonth} %D %D Sometimes we need to know if we're dealing with a %D leapyear, so here is a testmacro: %D %D \starttyping %D \doifleapyearelse{year}{yes}{no} %D \stoptyping %D %D An example of its use can be seen in the macro %D %D \starttyping %D \getdayspermonth{year}{month} %D \stoptyping %D %D The number of days is available in the macro \type %D {\numberofdays}. \def\doifleapyearelse#1% #2#3% {\bgroup \!!doneafalse \!!counta#1% \dosetmodulo\!!counta4\!!countb \ifcase\!!countb \dosetmodulo\!!counta{100}\!!countb \ifcase\!!countb \else \!!doneatrue \fi \dosetmodulo\!!counta{400}\!!countb \ifcase\!!countb \!!doneatrue \fi \fi \if!!donea \egroup\@EA\firstoftwoarguments % \def\next{#2}% \else \egroup\@EA\secondoftwoarguments % \def\next{#3}% \fi} % \next} % untested but cleaner: % % \def\doifleapyearelse#1% #2#3% % {\bgroup % \dosetmodulo{#1}{400}\scratchcounter % \ifcase\scratchcounter % \else % \dosetmodulo{#1}{100}\scratchcounter % \ifcase\scratchcounter % \scratchcounter\plusone % \else % \dosetmodulo{#1}4\scratchcounter % \fi % \fi % \ifcase\scratchcounter % \egroup\@EA\firstoftwoarguments % \else % \egroup\@EA\secondoftwoarguments % \fi} \def\getdayspermonth#1#2% {\doifleapyearelse{#1} {\def\numberofdays{29}} {\def\numberofdays{28}}% \edef\numberofdays {\ifcase#2 \or31\or\numberofdays\or31\or30\or 31\or30\or31\or31\or30\or31\or30\or31\fi}} %D \macros %D {currentdate, date} %D %D We use these conversion macros in the date formatting %D macro: %D %D \showsetup{currentdate} %D %D This macro takes care of proper spacing and delivers for %D instance: %D %D \startbuffer %D \currentdate[weekday,day,month,year] % still dutch example %D \currentdate[WEEKDAY,day,MONTH,year] % still dutch example %D \stopbuffer %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D depending of course on the keywords. Here we gave: %D %D \typebuffer %D %D If needed one can also add non||keywords, like in %D %D \startbuffer %D \currentdate[dd,--,mm,--,yy] %D \stopbuffer %D %D \typebuffer %D %D or typeset: \getbuffer. %D %D When no argument is passed, the current date is given as %D specified per language (using \type{\installlanguage}). %D %D \showsetup{currentdate} %D %D \startbuffer %D \date %D \date[d=12,m=12,y=1998][weekday] %D \date[d=12,m=12,y=1998] %D \stopbuffer %D %D We can also typeset arbitrary dates, using the previous %D command. %D %D \typebuffer %D %D The date is specified by one character keys. When no date %D is given, we get the current date. %D %D \startlines %D \getbuffer %D \stoplines \def\kenmerkdatumpatroon{j,mm,dd} % jj,mm,dd changed at januari 1-1-2000 \newsignal\datesignal \def\dobetweendates {\ifdim\lastskip=\datesignal\relax\else \unskip\space \hskip\datesignal\relax \fi} \newtoks \everycurrentdate \def\complexcurrentdate[#1]% {\bgroup \the\everycurrentdate \def\betweendates{\let\betweendates\dobetweendates}% % was \processcommacommandp[#1]\docomplexcurrentdate \safeedef\ascii{\empty#1}% keep encoded chars \@EA\processcommalist\@EA[\ascii]\docomplexcurrentdate \ifdim\lastskip=\datesignal\relax \unskip \fi \egroup} \def\docomplexcurrentdate#1% {\lowercase{\edef\!!stringa{#1}}% permits usage in \smallcapped \expanded{\processaction[\!!stringa]}% [#1] [ \v!day=>\betweendates\the\normalday, %\v!day+=>\betweendates\ordinaldaynumber\normalday, \v!day+=>\betweendates\convertnumber{\v!day+}\normalday, \v!month=>\betweendates\month\normalmonth, \v!year=>\betweendates\the\normalyear, \v!space=>\unskip\ \hskip\datesignal,% optimization -) \ =>\unskip\ \hskip\datesignal,% optimization -) d=>\convertnumber\v!day\normalday, %d+=>\ordinaldaynumber\normalday, d+=>\convertnumber{\v!day+}\normalday, m=>\convertnumber\v!month\normalmonth, j=>\convertnumber\v!year\normalyear, y=>\convertnumber\v!year\normalyear, w=>\betweendates\dayoftheweek\normalday\normalmonth\normalyear, dd=>\ifnum\normalday >9 \else0\fi\the\normalday, %dd+=>\ordinaldaynumber{\ifnum\normalday >9 \else0\fi\the\normalday}, dd+=>\convertnumber{\v!day+}{\ifnum\normalday >9 \else0\fi\the\normalday}, mm=>\ifnum\normalmonth>9 \else0\fi\the\normalmonth, jj=>\expandafter\gobbletwoarguments\the\normalyear, yy=>\expandafter\gobbletwoarguments\the\normalyear, \v!weekday=>\betweendates\dayoftheweek\normalday\normalmonth\normalyear, \v!referral=>\expanded{\complexcurrentdate[\kenmerkdatumpatroon]}, \s!unknown=>\unskip % #1 and not the lowercased \commalistelement, vietnamese has text % {} because #1 can have comma, like: {\ ,} {#1}% \hskip\datesignal \def\betweendates{\let\betweendates\dobetweendates}]} \def\simplecurrentdate {\expanded{\complexcurrentdate[\currentdatespecification]}} \definecomplexorsimple\currentdate \def\dodate[#1][#2]% {\bgroup \iffirstargument \getparameters[\??da][d=\normalday,m=\normalmonth,y=\normalyear,#1]% \normalday \@@dad\relax \normalmonth\@@dam\relax \normalyear \@@day\relax \ifsecondargument \currentdate[#2]% \else \currentdate \fi \else \currentdate \fi \egroup} \def\date {\dodoubleempty\dodate} %D \macros %D {currenttime} %D %D The currenttime is actually the jobtime. You can specify %D a pattern similar to the previous date macro using the %D keys \type {h}, \type {m} and a separator. \def\calculatecurrenttime {\dosetdivision\time{60}\scratchcounter \edef\currenthour {\ifnum\scratchcounter<10 0\fi \the\scratchcounter}% \dosetmodulo \time{60}\scratchcounter \edef\currentminute{\ifnum\scratchcounter<10 0\fi \the\scratchcounter}} \let\currenthour \!!plusone \let\currentminute\!!plusone \def\currenttimespecification{h,:,m} \def\complexcurrenttime[#1]% {\calculatecurrenttime \processallactionsinset[#1] [h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]} \def\simplecurrenttime {\expanded{\complexcurrenttime[\currenttimespecification]}} \definecomplexorsimple\currenttime %D Because we're dealing with dates, we also introduce a few %D day loops: %D %D \starttyping %D \processmonth{year}{month}{command} %D \processyear{year}{command}{before}{after} %D \stoptyping %D %D The counters \type {\normalyear}, \type {\normalmonth} and %D \type{\normalday} can be used for for date manipulations. \long\def\processmonth#1#2#3% year month command {\bgroup \getdayspermonth{#1}{#2}% \dostepwiserecurse1\numberofdays1% {\normalyear #1\relax \normalmonth#2\relax \normalday \recurselevel\relax #3}% \egroup} \def\lastmonth{12} % can be set to e.g. 1 when testing \long\def\processyear#1#2#3#4% year command before after {\bgroup \dorecurse\lastmonth {\normalyear #1\relax \normalmonth\recurselevel\relax #3\processmonth\normalyear\normalmonth{#2}#4}% \egroup} %D \macros %D {defineconversion, convertnumber} %D %D Conversion involves the macros that we implemented earlier %D in this module. %D %D \showsetup{defineconversion} %D \showsetup{convertnumber} %D %D We can feed this command with conversion macros as well as %D a set of conversion symbols. Both need a bit different %D treatment. %D %D \starttyping %D \defineconversion [roman] [\romannumerals] %D \defineconversion [set 1] [$\star$,$\bullet$,$\ast$] %D \stoptyping %D %D You can define a language dependent conversion with: %D %D \starttyping %D \defineconversion [en] [whatever] [\something] %D \stoptyping % \def\dodefineconversion[#1][#2]% % {\ConvertConstantAfter\doifinstringelse{,}{#2} % {\scratchcounter=0 % \def\docommand##1% % {\advance\scratchcounter 1 % \setvalue{\??cv#1\the\scratchcounter}{##1}}% % \processcommalist[#2]\docommand % \setvalue{\??cv#1}##1{\csname\??cv#1##1\endcsname}} % {\setvalue{\??cv#1}{#2}}} % % \def\defineconversion% % {\dodoubleargument\dodefineconversion} \def\defineconversion {\dotripleempty\dodefineconversion} \def\dodefineconversion[#1][#2][#3]% {\ifthirdargument \dododefineconversion[#1][#2][#3]% \else \dododefineconversion[][#1][#2]% \fi} %D \starttyping %D \def\dododefineconversion[#1][#2][#3]% %D {\ConvertConstantAfter\doifinstringelse{,}{#3} %D {\scratchcounter\zerocount %D \def\docommand##1% %D {\advance\scratchcounter \plusone %D \setvalue{\??cv#1#2\the\scratchcounter}{##1}}% %D \processcommalist[#3]\docommand %D \setvalue{\??cv#1#2}##1{\executeifdefined{\??cv#1#2##1}\unknown}} % catch out-of-range numbers %D {\setvalue{\??cv#1#2}{#3}}} %D \stoptyping %D This approach has the disadvantage that when you run out of %D symbols you get unknown results. The following implementation %D permits overloading of the converter: \def\dododefineconversion[#1][#2][#3]% {\ConvertConstantAfter\doifinstringelse{,}{#3} {\scratchcounter\zerocount \def\docommand##1% {\advance\scratchcounter \plusone \setvalue{\??cv#1#2\the\scratchcounter}{##1}}% \processcommalist[#3]\docommand \setevalue{\??cv#1#2}##1% {\noexpand\docheckedconversion{#1#2}{\the\scratchcounter}{##1}}} {\setvalue{\??cv#1#2}{#3}}} \def\docheckedconversion#1#2#3% class maxnumber number {\executeifdefined{\??cv#1#3}\unknown} %D When Gerben reported problems with footnote numbering per page, %D Taco came with the following wrap around solution. So, let's %D overload the checked conversion macro: \def\docheckedconversion#1#2#3% class maxnumber number {\executeifdefined{\??cv#1\modulatednumber{#2}{#3}}\unknown} %D Taco's modulo code is implemented in the system module %D \type {syst-con}. %D If a conversion is just a font switch then we need to make sure %D that the number is indeed end up as number in the input, so we %D need to handle the second argument. \def\convertnumber#1#2% {\csname\??cv \ifcsname\??cv\currentlanguage#1\endcsname \currentlanguage#1% \else\ifcsname\??cv#1\endcsname #1% \else \s!default \fi\fi \endcsname{\number#2}} \def\doifconversiondefinedelse#1% {\ifcsname\??cv\currentlanguage#1\endcsname \@EA\firstoftwoarguments \else\ifcsname\??cv#1\endcsname \@EAEAEA\firstoftwoarguments \else \@EAEAEA\secondoftwoarguments \fi\fi} \def\doifelseconversionnumber#1#2% slow but seldom used {\doifdefinedelse{\??cv#1#2}} %D Handy. \setvalue{\??cv:\c!n:\v!one }{1} \setvalue{\??cv:\c!n:\v!two }{2} \setvalue{\??cv:\c!n:\v!three}{3} \setvalue{\??cv:\c!n:\v!four }{4} \setvalue{\??cv:\c!n:\v!five }{5} \def\wordtonumber#1#2{\ifcsname\??cv:\c!n:#1\endcsname\csname\??cv:\c!n:#1\endcsname\else#2\fi} % \defineconversion[ctx][c,o,n,t,e,x,t] % % \doloop{\doifelseconversionnumber{ctx}{\recurselevel}{[\recurselevel]}{\exitloop}} \defineconversion [\s!default] [\numbers] %D As longs as symbols are linked to levels or numbers, we can %D also use the conversion mechanism, but in for instance the %D itemization macros, we prefer symbols because they can more %D easier be (partially) redefined. Symbols are implemented %D in another module. \defineconversion [] [\numbers] % the default conversion \defineconversion [a] [\characters] \defineconversion [A] [\Characters] \defineconversion [AK] [\smallcapped\characters] \defineconversion [KA] [\smallcapped\characters] \defineconversion [n] [\numbers] \defineconversion [N] [\Numbers] \defineconversion [m] [\mediaeval] \defineconversion [i] [\romannumerals] \defineconversion [I] [\Romannumerals] \defineconversion [r] [\romannumerals] \defineconversion [R] [\Romannumerals] \defineconversion [KR] [\smallcapped\romannumerals] \defineconversion [RK] [\smallcapped\romannumerals] \defineconversion [g] [\greeknumerals] \defineconversion [G] [\Greeknumerals] \defineconversion [o] [\oldstylenumerals] \defineconversion [O] [\oldstylenumerals] \defineconversion [or] [\oldstyleromannumerals] \defineconversion [\v!character] [\character] \defineconversion [\v!Character] [\Character] \defineconversion [\v!characters] [\characters] \defineconversion [\v!Characters] [\Characters] \defineconversion [\v!numbers] [\numbers] \defineconversion [\v!Numbers] [\Numbers] \defineconversion [\v!mediaeval] [\mediaeval] \defineconversion [\v!romannumerals] [\romannumerals] \defineconversion [\v!Romannumerals] [\Romannumerals] \defineconversion [\v!greek] [\greeknumerals] \defineconversion [\v!Greek] [\Greeknumerals] \defineconversion [arabicnumerals] [\arabicnumerals] \defineconversion [persiannumerals] [\arabicnumerals] \defineconversion [month] [\doconvertmonthlong] \defineconversion [month:mnem] [\doconvertmonthshort] % Some bonus ones: \defineconversion [\v!empty] [\gobbleoneargument] \defineconversion [\v!none] [\numbers] \ifx\symbol\undefined \def\symbol[#1]{#1} \fi % todo \defineconversion [set 0] [{\symbol[bullet]}, {\symbol[dash]}, {\symbol[star]}, {\symbol[triangle]}, {\symbol[circle]}, {\symbol[medcircle]}, {\symbol[bigcircle]}, {\symbol[square]}] \defineconversion [set 1] [\mathematics{\star}, \mathematics{\star\star}, \mathematics{\star\star\star}, \mathematics{\ddagger}, \mathematics{\ddagger\ddagger}, \mathematics{\ddagger\ddagger\ddagger}, \mathematics{\ast}, \mathematics{\ast\ast}, \mathematics{\ast\ast\ast}] \defineconversion [set 2] [\mathematics{*}, \mathematics{\dag}, \mathematics{\ddag}, \mathematics{**}, \mathematics{\dag\dag}, \mathematics{\ddag\ddag}, \mathematics{***}, \mathematics{\dag\dag\dag}, \mathematics{\ddag\ddag\ddag}, \mathematics{****}, \mathematics{\dag\dag\dag\dag}, \mathematics{\ddag\ddag\ddag\ddag}] \defineconversion [set 3] [\mathematics{\star}, \mathematics{\star\star}, \mathematics{\star\star\star}, \mathematics{\ddagger}, \mathematics{\ddagger\ddagger}, \mathematics{\ddagger\ddagger\ddagger}, \mathematics{\P}, \mathematics{\P\P}, \mathematics{\P\P\P}, \mathematics{\S}, \mathematics{\S\S}, \mathematics{\S\S\S}, \mathematics{\ast}, \mathematics{\ast\ast}, \mathematics{\ast\ast\ast}] %D \macros %D {defineconversionvector,conversionnumber} % bad names so no danger for clash %D %D For Adam and friends \unknown %D %D \startitemize[persiannummerals] %D \item test \item test \item test \item test %D \stopitemize \def\defineconversionvector#1#2% name base {\bgroup % dirty trick \uccode`\*=`\1 % plain: % \uccode`\0=\numexpr#2+0\relax \uccode`\1=\numexpr#2+1\relax % \uccode`\2=\numexpr#2+2\relax \uccode`\3=\numexpr#2+3\relax % \uccode`\4=\numexpr#2+4\relax \uccode`\5=\numexpr#2+5\relax % \uccode`\6=\numexpr#2+6\relax \uccode`\7=\numexpr#2+7\relax % \uccode`\8=\numexpr#2+8\relax \uccode`\9=\numexpr#2+9\relax % context: \dostepwiserecurse091{\expandafter\uccode\expandafter`\recurselevel=\numexpr#2+\recurselevel}% % prepared macro \uppercase\expandafter{\expandafter\gdef\csname::cvn::#1::\endcsname##*% {\ifcase##* 0\or1\or2\or3\or4\or5\or6\or7\or8\or9\fi}}% \egroup} \def\conversionnumber#1#2% {\ifcsname::cvn::#1::\endcsname \expandafter\doconversionnumber\csname::cvn::#1::\expandafter\endcsname\number#2\relax \else \number#2% \fi} \def\doconversionnumber#1#2% {\ifx#2\relax \expandafter\gobbleoneargument \else #1{#2}% \expandafter\doconversionnumber \fi#1} % actually mkiii code \ifnum\texengine=\xetexengine \defineconversionvector{arabicnumerals} {"0660} \defineconversionvector{persiannumerals} {"06F0} \defineconversionvector{thainumerals} {"0E50} \defineconversionvector{devanagarinumerals}{"0966} \defineconversionvector{gurmurkhinumerals} {"0A66} \defineconversionvector{gujaratinumerals} {"0AE6} \defineconversionvector{tibetannumerals} {"0F20} % also "half numerals?" \defineconversion[arabicnumerals] [\conversionnumber{arabicnumerals}] \defineconversion[persiannumerals] [\conversionnumber{persiannumerals}] \defineconversion[thainumerals] [\conversionnumber{thainumerals}] \defineconversion[devanagarinumerals][\conversionnumber{devanagarinumerals}] \defineconversion[gurmurkhinumerals] [\conversionnumber{gurmurkhinumerals}] \defineconversion[gujaratinumerals] [\conversionnumber{gujaratinumerals}] \defineconversion[tibetannumerals] [\conversionnumber{tibetannumerals}] \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-de.mkiv0000644000175000017500000000102211754241457024117 0ustar norbertnorbert%D \module %D [ file=cont-de, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ German Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {german} \def\defaultlanguagetag{de} \input context.mkiv \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-logcategories.mkiv0000644000175000017500000000005411571377075025656 0ustar norbertnorbert\starttext \showlogcategories \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-xml-11.mkii0000644000175000017500000000564111754241457024050 0ustar norbertnorbert%D \module %D [ file=x-xml-11, %D version=2004.09.16, %D title=\CONTEXT\ XML Style File, %D subtitle=Formatting X?? files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % xmltools --analyze yourfile.xml % texexec --use=xml-analyze yourfile.* % \doifnothing {\inputfilename} {\end} % \doiffileelse {\inputfilename} {} {\end} \doifnothing {\jobfullname} {\end} \doiffileelse {\jobfullname} {} {\end} \useXMLfilter[ent] \useXMLfilter[utf] \chardef\XMLtokensreduction\plustwo \definehead [SomeElement] [subsection] \setuphead [SomeElement] [ownnumber=yes, style=\tfb, numberstyle=\tfxx, alternative=margin] \setuplayout [width=middle, height=middle, backspace=2cm, cutspace=1cm, topspace=1cm, header=0pt] \setupfootertexts [\jobfullname] % [\inputfilename] \usetypescript[modern][texnansi] \setupbodyfont[modern,tt,10pt] \defineXMLenvironment [document] {} {} \defineXMLpickup [entities][n=0] {\expanded{\SomeElement{\XMLop{n}}{Entities}} \starttabulate[|l|l|l|]} {\stoptabulate} \defineXMLcommand % ugly hack (make macro of it) [entity][name=,n=0] {\startexpanded \noexpand \NC \XMLop{name} \noexpand \NC \XMLop{n} \noexpand \NC \noexpand\doXMLentity\XMLop{name}; \noexpand \NC \noexpand \NR \stopexpanded} \defineXMLpickup [characters][n=0] {\expanded{\SomeElement{\XMLop{n}}{Characters}} \bgroup \let\nonbreakablespace\empty % messes up the table \starttabulate[|l|r|r|l|l|l|l|]} {\stoptabulate \egroup} % todo: narrowtt \defineXMLcommand [character][number=,utf=,n=0,uname=,pname=,cname=] {\startexpanded \noexpand \NC \noexpand \unicodehexnumber{\XMLop{number}} \noexpand \NC \XMLop{number} \noexpand \NC \XMLop{n} \noexpand \NC \noexpand \unicodechar {\XMLop{number}} \noexpand \NC \tx \lowercase\expandafter{\XMLop{uname}} \noexpand \NC \tx \noexpand \unicodepair {\XMLop{number}} \noexpand \NC \tx \XMLop{cname} \noexpand \NC \noexpand \NR \stopexpanded} \defineXMLenvironment [elements] {} {} \newtoks \TabulateToks \defineXMLpickup [element][name=,n=0] {\expanded{\SomeElement{\XMLop{n}}{\XMLop{name}}} \TabulateToks\emptytoks} {\starttabulate[|l|r|p|] \the\TabulateToks \stoptabulate} \defineXMLenvironment [attribute][name=] {\xdef\AttributeName{\XMLop{name}}} {} \defineXMLenvironment [instance][value=,n=0] {\appendetoks \noexpand \NC \AttributeName \noexpand \NC \XMLop{n} \noexpand \NC \XMLop{value} \noexpand \NC \noexpand \NR \to \TabulateToks} {\xdef\AttributeName{}} \starttext % \processXMLfilegrouped{\inputfilename} \processXMLfilegrouped{\jobfullname} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-ro.mkii0000644000175000017500000023552712130411274024154 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language ro % \setinterfacevariable{Addition}{Adaugare} \setinterfacevariable{Balloon}{Balon} \setinterfacevariable{Cap}{Cap} \setinterfacevariable{Capital}{Majuscula} \setinterfacevariable{Character}{Caracter} \setinterfacevariable{Characters}{Caractere} \setinterfacevariable{CloseDocument}{InchideDocument} \setinterfacevariable{ExitViewer}{IesireVizualizator} \setinterfacevariable{FirstPage}{PrimaPagina} \setinterfacevariable{FitHeight}{AjustatInaltime} \setinterfacevariable{FitWidth}{AjustatLatime} \setinterfacevariable{GotoPage}{LaPagina} \setinterfacevariable{Greek}{Grec} \setinterfacevariable{Help}{Ajutor} \setinterfacevariable{HideField}{AscundeCamp} \setinterfacevariable{HideLayer}{HideLayer} \setinterfacevariable{Key}{Cheie} \setinterfacevariable{LastPage}{UltimaPagina} \setinterfacevariable{LoadForm}{IncarcaFormular} \setinterfacevariable{MONTH}{LUNA} \setinterfacevariable{New}{Nou} \setinterfacevariable{NextJump}{SaltUrmator} \setinterfacevariable{NextPage}{PaginaUrmatoare} \setinterfacevariable{Numbers}{Numere} \setinterfacevariable{OpenNamedDocument}{OpenNamedDocument} \setinterfacevariable{Paragraph}{Paragraf} \setinterfacevariable{PauseMovie}{PauzaFilm} \setinterfacevariable{PauseRendering}{PauseRendering} \setinterfacevariable{PauseSound}{PauzaSunet} \setinterfacevariable{PreviousJump}{SaltPrecedent} \setinterfacevariable{PreviousPage}{PaginaPrecedenta} \setinterfacevariable{PrintDocument}{TiparesteDocument} \setinterfacevariable{Query}{Query} \setinterfacevariable{QueryAgain}{QueryAgain} \setinterfacevariable{ResetForm}{ResetareFormular} \setinterfacevariable{ResumeMovie}{RepornesteFilm} \setinterfacevariable{ResumeRendering}{ResumeRendering} \setinterfacevariable{ResumeSound}{RepornesteSunet} \setinterfacevariable{Romannumerals}{Numereromane} \setinterfacevariable{SaveDocument}{SalvareDocument} \setinterfacevariable{SaveForm}{SalveazaFormular} \setinterfacevariable{SaveNamedDocument}{SaveNamedDocument} \setinterfacevariable{SearchAgain}{CautaDinNou} \setinterfacevariable{SearchDocument}{CautaDocument} \setinterfacevariable{ShowBookmarks}{ShowBookmarks} \setinterfacevariable{ShowField}{AfiseazaCamp} \setinterfacevariable{ShowThumbs}{ShowThumbs} \setinterfacevariable{StartMovie}{StartFilm} \setinterfacevariable{StartRendering}{StartRendering} \setinterfacevariable{StartSound}{StartSunet} \setinterfacevariable{StopMovie}{StopFilm} \setinterfacevariable{StopRendering}{StopRendering} \setinterfacevariable{StopSound}{StopSunet} \setinterfacevariable{SubmitForm}{TrimiteFormular} \setinterfacevariable{ToggleLayer}{ToggleLayer} \setinterfacevariable{ToggleViewer}{SchimbaVizualizator} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{VideLayer} \setinterfacevariable{ViewerHelp}{AjutorVizualizator} \setinterfacevariable{WEEKDAY}{ZISAPTAMANA} \setinterfacevariable{WORD}{CUVANT} \setinterfacevariable{WORDS}{CUVINTE} \setinterfacevariable{Word}{Cuvant} \setinterfacevariable{Words}{Cuvinte} \setinterfacevariable{abbreviation}{abreviere} \setinterfacevariable{abbreviations}{abrevieri} \setinterfacevariable{absolute}{absolut} \setinterfacevariable{action}{actiune} \setinterfacevariable{after}{dupa} \setinterfacevariable{all}{tot} \setinterfacevariable{always}{totdeauna} \setinterfacevariable{and}{and} \setinterfacevariable{answerarea}{answerarea} \setinterfacevariable{appendices}{apendixuri} \setinterfacevariable{appendix}{apendix} \setinterfacevariable{april}{aprilie} \setinterfacevariable{atmargin}{lamargine} \setinterfacevariable{atpage}{lapagina} \setinterfacevariable{attachment}{attachment} \setinterfacevariable{august}{august} \setinterfacevariable{author}{autor} \setinterfacevariable{auto}{auto} \setinterfacevariable{autointro}{autointro} \setinterfacevariable{back}{inapot} \setinterfacevariable{background}{fundal} \setinterfacevariable{backmatter}{epilogul} \setinterfacevariable{backpart}{epilog} \setinterfacevariable{backspace}{spatiuspate} \setinterfacevariable{backward}{inapoi} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{inainte} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{mare} \setinterfacevariable{bigbodyfont}{bigbodyfont} \setinterfacevariable{bigger}{bigger} \setinterfacevariable{bigpreference}{preferintamare} \setinterfacevariable{blank}{blank} \setinterfacevariable{blockquote}{blockquote} \setinterfacevariable{bodymatter}{principalul} \setinterfacevariable{bodypart}{principal} \setinterfacevariable{bold}{aldin} \setinterfacevariable{bolditalic}{aldinitalic} \setinterfacevariable{boldslanted}{aldininclinat} \setinterfacevariable{bookmark}{semncarte} \setinterfacevariable{both}{ambele} \setinterfacevariable{bottom}{subsol} \setinterfacevariable{brief}{brief} \setinterfacevariable{broad}{broad} \setinterfacevariable{buffer}{buffer} \setinterfacevariable{by}{de} \setinterfacevariable{calligraphic}{caligrafic} \setinterfacevariable{cap}{cap} \setinterfacevariable{capital}{majuscula} \setinterfacevariable{center}{center} \setinterfacevariable{chapter}{capitol} \setinterfacevariable{character}{caracter} \setinterfacevariable{characters}{caractere} \setinterfacevariable{chemistry}{chemistry} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{culoare} \setinterfacevariable{column}{coloana} \setinterfacevariable{columns}{coloane} \setinterfacevariable{command}{comanda} \setinterfacevariable{commands}{comenzi} \setinterfacevariable{comment}{comentariu} \setinterfacevariable{component}{componenta} \setinterfacevariable{concept}{concept} \setinterfacevariable{content}{cuprins} \setinterfacevariable{contents}{cuprinsuri} \setinterfacevariable{continue}{continuu} \setinterfacevariable{continued}{continued} \setinterfacevariable{controls}{controale} \setinterfacevariable{conversion}{conversie} \setinterfacevariable{current}{curent} \setinterfacevariable{cutspace}{cutspace} \setinterfacevariable{date}{data} \setinterfacevariable{day}{zi} \setinterfacevariable{december}{decembrie} \setinterfacevariable{default}{implicit} \setinterfacevariable{depth}{adancime} \setinterfacevariable{description}{descriere} \setinterfacevariable{disable}{dezactivat} \setinterfacevariable{display}{display} \setinterfacevariable{dot}{punct} \setinterfacevariable{doublesided}{douafete} \setinterfacevariable{down}{down} \setinterfacevariable{each}{fiecare} \setinterfacevariable{edge}{bordura} \setinterfacevariable{embed}{embed} \setinterfacevariable{empty}{gol} \setinterfacevariable{end}{end} \setinterfacevariable{endnote}{endnote} \setinterfacevariable{enumeration}{enumerare} \setinterfacevariable{environment}{mediu} \setinterfacevariable{even}{par} \setinterfacevariable{export}{export} \setinterfacevariable{external}{extern} \setinterfacevariable{fact}{fapt} \setinterfacevariable{february}{februarie} \setinterfacevariable{figure}{figura} \setinterfacevariable{figures}{figure} \setinterfacevariable{file}{fisier} \setinterfacevariable{final}{final} \setinterfacevariable{first}{primul} \setinterfacevariable{firstcolumn}{firstcolumn} \setinterfacevariable{firstpage}{primapagina} \setinterfacevariable{firstsubpage}{primasubpagina} \setinterfacevariable{fit}{ajustat} \setinterfacevariable{five}{cinci} \setinterfacevariable{fix}{fix} \setinterfacevariable{fixed}{fixat} \setinterfacevariable{flexible}{flexibil} \setinterfacevariable{float}{obiectmobil} \setinterfacevariable{flushinner}{flushinner} \setinterfacevariable{flushleft}{flushleft} \setinterfacevariable{flushouter}{flushouter} \setinterfacevariable{flushright}{flushright} \setinterfacevariable{footer}{subsol} \setinterfacevariable{footnote}{notasubsol} \setinterfacevariable{force}{fortat} \setinterfacevariable{foreground}{primplan} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{formula} \setinterfacevariable{formulae}{formule} \setinterfacevariable{forward}{avans} \setinterfacevariable{four}{patru} \setinterfacevariable{frame}{incadrat} \setinterfacevariable{framedtext}{textinconjurat} \setinterfacevariable{friday}{vineri} \setinterfacevariable{frontmatter}{prologul} \setinterfacevariable{frontpart}{prolog} \setinterfacevariable{global}{global} \setinterfacevariable{graphic}{graficul} \setinterfacevariable{graphics}{graficele} \setinterfacevariable{gray}{gri} \setinterfacevariable{greek}{grec} \setinterfacevariable{grid}{grila} \setinterfacevariable{halfline}{jumatatelinie} \setinterfacevariable{handwritten}{scrismanual} \setinterfacevariable{hang}{suspenda} \setinterfacevariable{hanging}{suspendat} \setinterfacevariable{head}{antet} \setinterfacevariable{header}{antet} \setinterfacevariable{height}{inaltime} \setinterfacevariable{helptext}{textajutator} \setinterfacevariable{hencefore}{precedent} \setinterfacevariable{here}{aici} \setinterfacevariable{hereafter}{urmator} \setinterfacevariable{hidden}{ascuns} \setinterfacevariable{hiding}{ascundere} \setinterfacevariable{high}{inalt} \setinterfacevariable{horizontal}{orizontal} \setinterfacevariable{hyphenated}{despsilabe} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{intre} \setinterfacevariable{index}{index} \setinterfacevariable{indices}{indexuri} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{inherit} \setinterfacevariable{inleft}{instanga} \setinterfacevariable{inmargin}{inmargine} \setinterfacevariable{inner}{intern} \setinterfacevariable{inneredge}{inneredge} \setinterfacevariable{innermargin}{innermargin} \setinterfacevariable{inright}{indreapta} \setinterfacevariable{interaction}{interactiune} \setinterfacevariable{interactionmenu}{meniuinteractiune} \setinterfacevariable{intermezzi}{intermezzi} \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{intext} \setinterfacevariable{intro}{intro} \setinterfacevariable{italic}{italic} \setinterfacevariable{italicbold}{italicaldin} \setinterfacevariable{item}{element} \setinterfacevariable{itemize}{enumerare} \setinterfacevariable{its}{propriu} \setinterfacevariable{january}{ianuarie} \setinterfacevariable{joinedup}{unit} \setinterfacevariable{july}{iulie} \setinterfacevariable{june}{iunie} \setinterfacevariable{keep}{mentine} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{eticheta} \setinterfacevariable{landscape}{vedere} \setinterfacevariable{last}{ultim} \setinterfacevariable{lastcolumn}{lastcolumn} \setinterfacevariable{lastpage}{ultimapagina} \setinterfacevariable{lastpagenumber}{lastpagenumber} \setinterfacevariable{lastsubpage}{ultimasubpagina} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{stanga} \setinterfacevariable{leftedge}{bordurastanga} \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{marginestanga} \setinterfacevariable{leftpage}{paginastanga} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legenda} \setinterfacevariable{less}{less} \setinterfacevariable{lesshyphenation}{lesshyphenation} \setinterfacevariable{line}{linie} \setinterfacevariable{linenote}{linenote} \setinterfacevariable{lines}{linii} \setinterfacevariable{list}{lista} \setinterfacevariable{local}{local} \setinterfacevariable{localenvironment}{mediulocal} \setinterfacevariable{logo}{logo} \setinterfacevariable{logos}{logos} \setinterfacevariable{lohi}{lohi} \setinterfacevariable{loose}{larg} \setinterfacevariable{low}{jos} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{marcaj} \setinterfacevariable{mar}{mar} \setinterfacevariable{march}{martie} \setinterfacevariable{margin}{margine} \setinterfacevariable{marginedge}{marginebordura} \setinterfacevariable{margintitle}{titlumarginal} \setinterfacevariable{marking}{marcaje} \setinterfacevariable{mathalignment}{mathalignment} \setinterfacevariable{mathcases}{mathcases} \setinterfacevariable{mathematics}{matematica} \setinterfacevariable{mathmatrix}{mathmatrix} \setinterfacevariable{max}{max} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{mai} \setinterfacevariable{mediaeval}{medieval} \setinterfacevariable{medium}{mediu} \setinterfacevariable{middle}{centru} \setinterfacevariable{min}{min} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{inaltimeminima} \setinterfacevariable{minwidth}{latimeminima} \setinterfacevariable{mirrored}{oglindit} \setinterfacevariable{monday}{luni} \setinterfacevariable{mono}{mono} \setinterfacevariable{month}{luna} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} \setinterfacevariable{name}{nume} \setinterfacevariable{narrow}{ingust} \setinterfacevariable{negative}{negativ} \setinterfacevariable{never}{niciodata} \setinterfacevariable{new}{nou} \setinterfacevariable{next}{urmatorul} \setinterfacevariable{nextevenpage}{paginaparaurmatoarea} \setinterfacevariable{nextoddpage}{paginaimparaurmatoarea} \setinterfacevariable{nextpage}{paginaurmatoare} \setinterfacevariable{nextsubpage}{urmatoareasubpagina} \setinterfacevariable{no}{nu} \setinterfacevariable{nocheck}{nocheck} \setinterfacevariable{nofit}{nofit} \setinterfacevariable{nogrid}{nogrid} \setinterfacevariable{nohz}{nohz} \setinterfacevariable{nomarking}{faramarcare} \setinterfacevariable{none}{niciunul} \setinterfacevariable{nonumber}{nonumber} \setinterfacevariable{normal}{normal} \setinterfacevariable{nospacing}{nospacing} \setinterfacevariable{not}{nu} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{nothanging} \setinterfacevariable{nothyphenated}{nedespsilabe} \setinterfacevariable{november}{noiembrie} \setinterfacevariable{nowhere}{niciunde} \setinterfacevariable{nowhite}{faraalb} \setinterfacevariable{number}{numar} \setinterfacevariable{numbers}{numere} \setinterfacevariable{october}{octombrie} \setinterfacevariable{odd}{impar} \setinterfacevariable{off}{dezactivat} \setinterfacevariable{offset}{offset} \setinterfacevariable{old}{old} \setinterfacevariable{on}{on} \setinterfacevariable{one}{unu} \setinterfacevariable{opposite}{opus} \setinterfacevariable{outer}{extern} \setinterfacevariable{outeredge}{outeredge} \setinterfacevariable{outermargin}{outermargin} \setinterfacevariable{overbar}{barasus} \setinterfacevariable{overbars}{supralinie} \setinterfacevariable{overlay}{overlay} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{liniepeste} \setinterfacevariable{overstrikes}{liniipeste} \setinterfacevariable{packed}{impachetat} \setinterfacevariable{page}{pagina} \setinterfacevariable{pagecomment}{comentariupagina} \setinterfacevariable{pagenumber}{numarpagina} \setinterfacevariable{paper}{foaie} \setinterfacevariable{paragraph}{paragraf} \setinterfacevariable{part}{parte} \setinterfacevariable{positive}{positiv} \setinterfacevariable{postponing}{postponing} \setinterfacevariable{postscript}{postscript} \setinterfacevariable{preference}{preferinta} \setinterfacevariable{preview}{previzualizare} \setinterfacevariable{previous}{precedent} \setinterfacevariable{previousevenpage}{paginaparaprecedenta} \setinterfacevariable{previousoddpage}{paginaimparaprecedenta} \setinterfacevariable{previouspage}{paginaanterioara} \setinterfacevariable{previoussubpage}{subpaginaanterioara} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{tiparibil} \setinterfacevariable{process}{process} \setinterfacevariable{product}{produs} \setinterfacevariable{program}{program} \setinterfacevariable{project}{proiect} \setinterfacevariable{protected}{protejat} \setinterfacevariable{quadruple}{cvadrupul} \setinterfacevariable{quarterline}{quarterline} \setinterfacevariable{quotation}{citat} \setinterfacevariable{quote}{minicitat} \setinterfacevariable{ran}{rulat} \setinterfacevariable{random}{aleator} \setinterfacevariable{readonly}{readonly} \setinterfacevariable{rectangular}{rectangular} \setinterfacevariable{reference}{referinta} \setinterfacevariable{referral}{referinta} \setinterfacevariable{register}{registru} \setinterfacevariable{regular}{regular} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{relativ} \setinterfacevariable{repeat}{repetat} \setinterfacevariable{required}{obligatoriu} \setinterfacevariable{reset}{reset} \setinterfacevariable{reverse}{reverse} \setinterfacevariable{right}{dreapta} \setinterfacevariable{rightedge}{borduradreapta} \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{marginedreapta} \setinterfacevariable{rightpage}{paginadreapta} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{roman} \setinterfacevariable{romannumerals}{numereromane} \setinterfacevariable{rotate}{rotit} \setinterfacevariable{rotated}{rotat} \setinterfacevariable{round}{rotund} \setinterfacevariable{row}{rand} \setinterfacevariable{rule}{rigla} \setinterfacevariable{samepage}{aceeasipagina} \setinterfacevariable{sans}{sans} \setinterfacevariable{sansbold}{sansaldin} \setinterfacevariable{sansserif}{sansserif} \setinterfacevariable{saturday}{sambata} \setinterfacevariable{screen}{ecran} \setinterfacevariable{section}{sectiune} \setinterfacevariable{sectionblockenvironment}{blocsectiuneambient} \setinterfacevariable{sectionnumber}{numarsetiune} \setinterfacevariable{see}{vezi} \setinterfacevariable{september}{septembrie} \setinterfacevariable{serif}{serif} \setinterfacevariable{serried}{serried} \setinterfacevariable{setups}{setari} \setinterfacevariable{sheet}{sheet} \setinterfacevariable{short}{short} \setinterfacevariable{singlesided}{ofata} \setinterfacevariable{slanted}{inclinat} \setinterfacevariable{slantedbold}{inclinataldin} \setinterfacevariable{small}{mic} \setinterfacevariable{smallbodyfont}{smallbodyfont} \setinterfacevariable{smallbold}{micaldin} \setinterfacevariable{smallbolditalic}{micaldininclinat} \setinterfacevariable{smallboldslanted}{micaldininclinat} \setinterfacevariable{smallcaps}{majusculemici} \setinterfacevariable{smaller}{smaller} \setinterfacevariable{smallitalic}{micitalic} \setinterfacevariable{smallitalicbold}{micitalicaldin} \setinterfacevariable{smallnormal}{micnormal} \setinterfacevariable{smallslanted}{micinclinat} \setinterfacevariable{smallslantedbold}{micinclinataldin} \setinterfacevariable{smalltype}{mictype} \setinterfacevariable{somewhere}{undeva} \setinterfacevariable{sorted}{sortat} \setinterfacevariable{space}{spatiu} \setinterfacevariable{spacing}{spatiere} \setinterfacevariable{speech}{speech} \setinterfacevariable{split}{split} \setinterfacevariable{spot}{spot} \setinterfacevariable{standard}{standard} \setinterfacevariable{start}{start} \setinterfacevariable{starter}{starter} \setinterfacevariable{sticker}{sticker} \setinterfacevariable{stop}{stop} \setinterfacevariable{stopper}{stopper} \setinterfacevariable{stretch}{dilatat} \setinterfacevariable{strict}{strict} \setinterfacevariable{strong}{strong} \setinterfacevariable{strut}{strut} \setinterfacevariable{sub}{sub} \setinterfacevariable{subbackward}{subinapoi} \setinterfacevariable{subformula}{subformula} \setinterfacevariable{subforward}{subavans} \setinterfacevariable{subject}{subiect} \setinterfacevariable{subpage}{subpagina} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{subsectiune} \setinterfacevariable{subsubject}{subsubiect} \setinterfacevariable{subsubsection}{subsubsectiune} \setinterfacevariable{subsubsubject}{subsubsubiect} \setinterfacevariable{subsubsubsection}{subsubsubsectiune} \setinterfacevariable{subsubsubsubject}{subsubsubsubiect} \setinterfacevariable{subsubsubsubsection}{subsubsubsubsectiune} \setinterfacevariable{subsubsubsubsubject}{subsubsubsubsubiect} \setinterfacevariable{subsubsubsubsubsection}{subsubsubsubsubsectiune} \setinterfacevariable{subsubsubsubsubsubject}{subsubsubsubsubsubiect} \setinterfacevariable{subsubsubsubsubsubsection}{subsubsubsubsubsubsectiune} \setinterfacevariable{subsubsubsubsubsubsubject}{subsubsubsubsubsubsubiect} \setinterfacevariable{subsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsectiune} \setinterfacevariable{subsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubiect} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsubsectiune} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubsubiect} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsubsubsectiune} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubsubsubiect} \setinterfacevariable{sunday}{duminica} \setinterfacevariable{support}{suport} \setinterfacevariable{sym}{sym} \setinterfacevariable{symbol}{simbol} \setinterfacevariable{synchronize}{synchronize} \setinterfacevariable{system}{sistem} \setinterfacevariable{table}{tabelul} \setinterfacevariable{tablehead}{antettabel} \setinterfacevariable{tables}{tabelele} \setinterfacevariable{tabletail}{subsoltabel} \setinterfacevariable{tabulate}{tabulate} \setinterfacevariable{tabulatehead}{tabulatehead} \setinterfacevariable{tabulatetail}{tabulatetail} \setinterfacevariable{tall}{inalt} \setinterfacevariable{teletype}{teletype} \setinterfacevariable{temporary}{temporar} \setinterfacevariable{test}{test} \setinterfacevariable{text}{text} \setinterfacevariable{three}{trei} \setinterfacevariable{thursday}{joi} \setinterfacevariable{tight}{tight} \setinterfacevariable{title}{titlu} \setinterfacevariable{toggle}{toggle} \setinterfacevariable{tolerant}{tolerant} \setinterfacevariable{top}{sus} \setinterfacevariable{tuesday}{marti} \setinterfacevariable{two}{doi} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{type} \setinterfacevariable{typing}{typing} \setinterfacevariable{unavailable}{nedisponibil} \setinterfacevariable{underbar}{sublinie} \setinterfacevariable{underbars}{sublinii} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{unitate} \setinterfacevariable{units}{unitati} \setinterfacevariable{unknown}{necunoscut} \setinterfacevariable{unpacked}{despachetat} \setinterfacevariable{up}{up} \setinterfacevariable{url}{url} \setinterfacevariable{used}{folosit} \setinterfacevariable{value}{valoare} \setinterfacevariable{vertical}{vertical} \setinterfacevariable{very}{foarte} \setinterfacevariable{verystrict}{foartestrict} \setinterfacevariable{verytolerant}{foartetolerant} \setinterfacevariable{weak}{weak} \setinterfacevariable{wednesday}{miercuri} \setinterfacevariable{week}{saptamana} \setinterfacevariable{weekday}{zisaptamana} \setinterfacevariable{white}{alb} \setinterfacevariable{wide}{larg} \setinterfacevariable{width}{latime} \setinterfacevariable{word}{cuvant} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{an} \setinterfacevariable{yes}{da} % definitions for interface constants for language ro % \setinterfaceconstant{action}{actiune} \setinterfaceconstant{address}{adresa} \setinterfaceconstant{after}{dupa} \setinterfaceconstant{afterhead}{dupatitlu} \setinterfaceconstant{afterkey}{dupatasta} \setinterfaceconstant{aftersection}{aftersection} \setinterfaceconstant{align}{aliniere} \setinterfaceconstant{aligncharacter}{aliniazacaracter} \setinterfaceconstant{alignmentcharacter}{alierecaracter} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{alinieretitlu} \setinterfaceconstant{alternative}{alternativ} \setinterfaceconstant{anchor}{anchor} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{sageata} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{la} \setinterfaceconstant{author}{autor} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{auto} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{autofile} \setinterfaceconstant{autofocus}{autofocus} \setinterfaceconstant{autohang}{autohang} \setinterfaceconstant{autostrut}{autostrut} \setinterfaceconstant{autowidth}{autolatime} \setinterfaceconstant{availableheight}{availableheight} \setinterfaceconstant{availablewidth}{availablewidth} \setinterfaceconstant{axis}{axa} \setinterfaceconstant{background}{fundal} \setinterfaceconstant{backgroundcolor}{culoarefundal} \setinterfaceconstant{backgroundcorner}{coltfundal} \setinterfaceconstant{backgrounddepth}{adancimefundal} \setinterfaceconstant{backgroundoffset}{offsetfundal} \setinterfaceconstant{backgroundradius}{razafundal} \setinterfaceconstant{backgroundscreen}{ecranfundal} \setinterfaceconstant{backreference}{backreference} \setinterfaceconstant{backspace}{spatiuspate} \setinterfaceconstant{balance}{balanta} \setinterfaceconstant{before}{inainte} \setinterfaceconstant{beforehead}{inaintetitlu} \setinterfaceconstant{beforesection}{beforesection} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{mare} \setinterfaceconstant{blank}{blanc} \setinterfaceconstant{blockway}{blockway} \setinterfaceconstant{bodyfont}{fonttext} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{semncarte} \setinterfaceconstant{bottom}{jos} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{distantajos} \setinterfaceconstant{bottomframe}{framejos} \setinterfaceconstant{bottomoffset}{offsetjos} \setinterfaceconstant{bottomspace}{spatiujos} \setinterfaceconstant{bottomstate}{starejos} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{cache} \setinterfaceconstant{calculate}{calculeaza} \setinterfaceconstant{category}{category} \setinterfaceconstant{ccommand}{comandac} \setinterfaceconstant{click}{click} \setinterfaceconstant{clickin}{clickintru} \setinterfaceconstant{clickout}{clickies} \setinterfaceconstant{clipoffset}{clipoffset} \setinterfaceconstant{closeaction}{actiuneinchidere} \setinterfaceconstant{closecommand}{closecommand} \setinterfaceconstant{closepage}{closepage} \setinterfaceconstant{closepageaction}{actiuneinchiderepagina} \setinterfaceconstant{closesymbol}{closesymbol} \setinterfaceconstant{color}{culoare} \setinterfaceconstant{column}{coloana} \setinterfaceconstant{columndistance}{distantacoloane} \setinterfaceconstant{columns}{coloane} \setinterfaceconstant{command}{comanda} \setinterfaceconstant{commandafter}{comandadupa} \setinterfaceconstant{commandbefore}{comandainainte} \setinterfaceconstant{commands}{comenzi} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{component} \setinterfaceconstant{compoundhyphen}{compoundhyphen} \setinterfaceconstant{compress}{compress} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{continua} \setinterfaceconstant{contrastcolor}{culoarecontrast} \setinterfaceconstant{controls}{controale} \setinterfaceconstant{conversion}{conversie} \setinterfaceconstant{convertfile}{convertestefisier} \setinterfaceconstant{corner}{colt} \setinterfaceconstant{coupling}{cuplare} \setinterfaceconstant{couplingway}{modcuplare} \setinterfaceconstant{criterium}{criteriu} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{curent} \setinterfaceconstant{cutspace}{cutspace} \setinterfaceconstant{dash}{dash} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{data} \setinterfaceconstant{deepnumbercommand}{deepnumbercommand} \setinterfaceconstant{deeptextcommand}{deeptextcommand} \setinterfaceconstant{default}{implicit} \setinterfaceconstant{delay}{intarziere} \setinterfaceconstant{depth}{inaltime} \setinterfaceconstant{depthcorrection}{corectieadancime} \setinterfaceconstant{direction}{directie} \setinterfaceconstant{directory}{director} \setinterfaceconstant{display}{display} \setinterfaceconstant{distance}{distanta} \setinterfaceconstant{dot}{punct} \setinterfaceconstant{doublesided}{douafete} \setinterfaceconstant{dummy}{dummy} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{bordura} \setinterfaceconstant{edgedistance}{distantabordura} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{gol} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{entries} \setinterfaceconstant{equalheight}{equalheight} \setinterfaceconstant{equalwidth}{equalwidth} \setinterfaceconstant{escape}{escape} \setinterfaceconstant{evenmargin}{marginepara} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{expansiune} \setinterfaceconstant{export}{export} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{factor} \setinterfaceconstant{fallback}{fallback} \setinterfaceconstant{family}{familie} \setinterfaceconstant{fieldbackgroundcolor}{culoarefundalcamp} \setinterfaceconstant{fieldframecolor}{culoareframecamp} \setinterfaceconstant{fieldlayer}{fieldlayer} \setinterfaceconstant{fieldoffset}{offsetcamp} \setinterfaceconstant{file}{fisier} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{primapagina} \setinterfaceconstant{focus}{focus} \setinterfaceconstant{focusin}{focusin} \setinterfaceconstant{focusout}{focusout} \setinterfaceconstant{footer}{subsol} \setinterfaceconstant{footerdistance}{distantasubsol} \setinterfaceconstant{footerstate}{staresubsol} \setinterfaceconstant{force}{fortat} \setinterfaceconstant{foregroundcolor}{foregroundcolor} \setinterfaceconstant{foregroundstyle}{foregroundstyle} \setinterfaceconstant{format}{format} \setinterfaceconstant{frame}{frame} \setinterfaceconstant{framecolor}{culoareframe} \setinterfaceconstant{framecorner}{coltframe} \setinterfaceconstant{framedepth}{adancimeframe} \setinterfaceconstant{frameoffset}{offsetframe} \setinterfaceconstant{frameradius}{razaframe} \setinterfaceconstant{frames}{frames} \setinterfaceconstant{from}{dela} \setinterfaceconstant{get}{adu} \setinterfaceconstant{global}{global} \setinterfaceconstant{grid}{grid} \setinterfaceconstant{hang}{suspenda} \setinterfaceconstant{hcompact}{hcompact} \setinterfaceconstant{headalign}{headalign} \setinterfaceconstant{headcolor}{culoaretitlu} \setinterfaceconstant{headcommand}{headcommand} \setinterfaceconstant{headconversion}{conversietitlu} \setinterfaceconstant{header}{antet} \setinterfaceconstant{headerdistance}{distantaantet} \setinterfaceconstant{headerstate}{stareantet} \setinterfaceconstant{headlabel}{etichetatitlu} \setinterfaceconstant{headnumber}{numartitlu} \setinterfaceconstant{headstyle}{stiltitlu} \setinterfaceconstant{height}{inaltime} \setinterfaceconstant{hfactor}{hfactor} \setinterfaceconstant{hfil}{hfil} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{hoffset} \setinterfaceconstant{horoffset}{offsetoriz} \setinterfaceconstant{hyphen}{hyphen} \setinterfaceconstant{icommand}{comandai} \setinterfaceconstant{in}{in} \setinterfaceconstant{inbetween}{intre} \setinterfaceconstant{increment}{increment} \setinterfaceconstant{incrementnumber}{numarincrement} \setinterfaceconstant{indenting}{aliniat} \setinterfaceconstant{indentnext}{aliniaturmator} \setinterfaceconstant{indicator}{indicator} \setinterfaceconstant{inner}{intern} \setinterfaceconstant{innermargin}{innermargin} \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interactiune} \setinterfaceconstant{interlinespace}{spatiereinterliniara} \setinterfaceconstant{internalgrid}{internalgrid} \setinterfaceconstant{itemalign}{itemalign} \setinterfaceconstant{items}{elemente} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{keyexpansion} \setinterfaceconstant{keys}{keys} \setinterfaceconstant{keyword}{keyword} \setinterfaceconstant{label}{eticheta} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{ultimapagina} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{stanga} \setinterfaceconstant{leftcolor}{culoarestanga} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{bordurastanga} \setinterfaceconstant{leftedgedistance}{distantabordurastanga} \setinterfaceconstant{leftframe}{framestanga} \setinterfaceconstant{lefthyphen}{lefthyphen} \setinterfaceconstant{leftmargin}{marginestanga} \setinterfaceconstant{leftmargindistance}{distantamarginestanga} \setinterfaceconstant{leftoffset}{offsetstanga} \setinterfaceconstant{leftquotation}{citatstanga} \setinterfaceconstant{leftquote}{minicitatstanga} \setinterfaceconstant{leftsentence}{propozitiestanga} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{stilstanga} \setinterfaceconstant{leftsubsentence}{subpropozitiestanga} \setinterfaceconstant{lefttext}{textstanga} \setinterfaceconstant{leftwidth}{latimestanga} \setinterfaceconstant{less}{less} \setinterfaceconstant{level}{nivel} \setinterfaceconstant{levels}{nivele} \setinterfaceconstant{limittext}{limittext} \setinterfaceconstant{line}{linie} \setinterfaceconstant{linecorrection}{corectielinie} \setinterfaceconstant{lines}{linii} \setinterfaceconstant{list}{lista} \setinterfaceconstant{listtext}{listtext} \setinterfaceconstant{local}{local} \setinterfaceconstant{location}{locatie} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{logo} \setinterfaceconstant{logos}{logos} \setinterfaceconstant{marcolor}{culoaremarcaj} \setinterfaceconstant{margin}{margine} \setinterfaceconstant{margindistance}{distantamargine} \setinterfaceconstant{marginedge}{coltbordura} \setinterfaceconstant{marginedgetext}{textcoltbordura} \setinterfaceconstant{margintext}{textmargine} \setinterfaceconstant{marking}{marcaje} \setinterfaceconstant{marstyle}{stilmarcaj} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{inaltimemaxima} \setinterfaceconstant{maxwidth}{latimemaxima} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{meniu} \setinterfaceconstant{method}{metoda} \setinterfaceconstant{middle}{mijloc} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middletext}{textmijloc} \setinterfaceconstant{midsentence}{midsentence} \setinterfaceconstant{min}{min} \setinterfaceconstant{mindepth}{mindepth} \setinterfaceconstant{minheight}{inaltimeminima} \setinterfaceconstant{minwidth}{latimeminima} \setinterfaceconstant{monthconversion}{monthconversion} \setinterfaceconstant{more}{more} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{nume} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{njos} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{urmatorul} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{nstanga} \setinterfaceconstant{nlines}{nlinii} \setinterfaceconstant{norm}{norm} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{ndreapta} \setinterfaceconstant{ntop}{nsus} \setinterfaceconstant{number}{numar} \setinterfaceconstant{numbercolor}{culoarenumar} \setinterfaceconstant{numbercommand}{comandanumar} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{numerotare} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{separatornumar} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{stilnumar} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{obiect} \setinterfaceconstant{obstruction}{obstructie} \setinterfaceconstant{oddmargin}{margineimpara} \setinterfaceconstant{offset}{offset} \setinterfaceconstant{openaction}{actiunedeschidere} \setinterfaceconstant{openpage}{openpage} \setinterfaceconstant{openpageaction}{actiunedeschiderepagina} \setinterfaceconstant{option}{optiune} \setinterfaceconstant{order}{order} \setinterfaceconstant{orientation}{orientation} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{outermargin} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{numarpropriu} \setinterfaceconstant{page}{pagina} \setinterfaceconstant{pageboundaries}{marginipagina} \setinterfaceconstant{pagecolor}{culoarepagina} \setinterfaceconstant{pagecolormodel}{pagecolormodel} \setinterfaceconstant{pagecommand}{comandapagina} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{numarpagina} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{pagestate} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{stilpagina} \setinterfaceconstant{palet}{paleta} \setinterfaceconstant{paper}{hartie} \setinterfaceconstant{paragraph}{paragraf} \setinterfaceconstant{place}{pune} \setinterfaceconstant{placehead}{punetitlu} \setinterfaceconstant{placestopper}{punestopper} \setinterfaceconstant{position}{pozitie} \setinterfaceconstant{prefix}{prefix} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{preset} \setinterfaceconstant{preview}{previzualizare} \setinterfaceconstant{previous}{precendent} \setinterfaceconstant{previousnumber}{numarprecedent} \setinterfaceconstant{printable}{tiparibil} \setinterfaceconstant{process}{process} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{raza} \setinterfaceconstant{random}{aleator} \setinterfaceconstant{range}{range} \setinterfaceconstant{reduction}{reducere} \setinterfaceconstant{ref}{ref} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{referinta} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{referinta} \setinterfaceconstant{region}{region} \setinterfaceconstant{regionin}{regiuneintrare} \setinterfaceconstant{regionout}{regiuneiesire} \setinterfaceconstant{repeat}{repeta} \setinterfaceconstant{reset}{reset} \setinterfaceconstant{resetnumber}{resetnumber} \setinterfaceconstant{resolution}{rezolutie} \setinterfaceconstant{right}{dreapta} \setinterfaceconstant{rightcolor}{culoaredreapta} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{borduradreapta} \setinterfaceconstant{rightedgedistance}{distantacoltdreapta} \setinterfaceconstant{rightframe}{framedreapta} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{marginedreapta} \setinterfaceconstant{rightmargindistance}{distantamarginedreapta} \setinterfaceconstant{rightoffset}{offsetdreapta} \setinterfaceconstant{rightquotation}{citatdreapta} \setinterfaceconstant{rightquote}{minicitatdreapta} \setinterfaceconstant{rightsentence}{propozitiedreapta} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{stildreapta} \setinterfaceconstant{rightsubsentence}{subpropozitiedreapta} \setinterfaceconstant{righttext}{textdreapta} \setinterfaceconstant{rightwidth}{marginedreapta} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{rotatie} \setinterfaceconstant{rule}{rigla} \setinterfaceconstant{rulecolor}{culoarerigla} \setinterfaceconstant{rulecommand}{rulecommand} \setinterfaceconstant{rulethickness}{grosimerigla} \setinterfaceconstant{samepage}{aceeasipagina} \setinterfaceconstant{sample}{exemplu} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{scala} \setinterfaceconstant{scope}{scop} \setinterfaceconstant{screen}{ecran} \setinterfaceconstant{section}{sectiune} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{numarsectiune} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{separator} \setinterfaceconstant{set}{set} \setinterfaceconstant{setups}{setups} \setinterfaceconstant{shrink}{shrink} \setinterfaceconstant{side}{parte} \setinterfaceconstant{sidealign}{sidealign} \setinterfaceconstant{sidemethod}{sidemethod} \setinterfaceconstant{sidespaceafter}{spatiulateraldupa} \setinterfaceconstant{sidespacebefore}{spatiulateralinainte} \setinterfaceconstant{sign}{semn} \setinterfaceconstant{size}{dimensiune} \setinterfaceconstant{small}{mic} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} \setinterfaceconstant{source}{sursa} \setinterfaceconstant{space}{spatiu} \setinterfaceconstant{spaceafter}{spatiudupa} \setinterfaceconstant{spacebefore}{spatiuinainte} \setinterfaceconstant{spaceinbetween}{spaceinbetween} \setinterfaceconstant{spacing}{spatiere} \setinterfaceconstant{split}{split} \setinterfaceconstant{splitcolor}{splitcolor} \setinterfaceconstant{splitmethod}{splitmethod} \setinterfaceconstant{splitoffset}{splitoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stack} \setinterfaceconstant{start}{start} \setinterfaceconstant{starter}{starter} \setinterfaceconstant{state}{stare} \setinterfaceconstant{step}{pas} \setinterfaceconstant{stop}{stop} \setinterfaceconstant{stopper}{stopper} \setinterfaceconstant{stretch}{dilatat} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{strut} \setinterfaceconstant{style}{stil} \setinterfaceconstant{sub}{sub} \setinterfaceconstant{subtitle}{subtitlu} \setinterfaceconstant{suffix}{suffix} \setinterfaceconstant{suffixseparator}{suffixseparator} \setinterfaceconstant{suffixstopper}{suffixstopper} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{symaliniere} \setinterfaceconstant{symbol}{simbol} \setinterfaceconstant{symbolset}{setsimbol} \setinterfaceconstant{symcolor}{culoaresimbol} \setinterfaceconstant{symstyle}{stilsimbol} \setinterfaceconstant{synonym}{sinonim} \setinterfaceconstant{synonymcolor}{culoaresinonim} \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{stilsinonim} \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{text} \setinterfaceconstant{textcolor}{culoaretext} \setinterfaceconstant{textcommand}{comandatext} \setinterfaceconstant{textdistance}{textdistance} \setinterfaceconstant{textheight}{inaltimetext} \setinterfaceconstant{textlayer}{textlayer} \setinterfaceconstant{textmargin}{textmargin} \setinterfaceconstant{textmethod}{textmethod} \setinterfaceconstant{textseparator}{separatortext} \setinterfaceconstant{textsize}{dimensiunetext} \setinterfaceconstant{textstate}{staretext} \setinterfaceconstant{textstyle}{stiltext} \setinterfaceconstant{textwidth}{latimetext} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{titlu} \setinterfaceconstant{titlecolor}{culoaretitlu} \setinterfaceconstant{titlecommand}{titlecommand} \setinterfaceconstant{titledistance}{distantatitlu} \setinterfaceconstant{titleleft}{titleleft} \setinterfaceconstant{titleright}{titleright} \setinterfaceconstant{titlestyle}{stiltitlu} \setinterfaceconstant{to}{catre} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{toleranta} \setinterfaceconstant{top}{sus} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{distantasus} \setinterfaceconstant{topframe}{framesus} \setinterfaceconstant{topoffset}{offsetsus} \setinterfaceconstant{topspace}{spatiusus} \setinterfaceconstant{topstate}{staresus} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{type} \setinterfaceconstant{unit}{unitate} \setinterfaceconstant{unknownreference}{referintanecunoscuta} \setinterfaceconstant{urlalternative}{urlalternativ} \setinterfaceconstant{urlspace}{spatiuurl} \setinterfaceconstant{validate}{verifica} \setinterfaceconstant{values}{values} \setinterfaceconstant{vcommand}{comandav} \setinterfaceconstant{vcompact}{vcompact} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{veroffset} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{voffset} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{mod} \setinterfaceconstant{wfactor}{factorw} \setinterfaceconstant{white}{alb} \setinterfaceconstant{width}{latime} \setinterfaceconstant{xfactor}{xfactor} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{xoffset} \setinterfaceconstant{xscale}{xscala} \setinterfaceconstant{xstep}{xstep} \setinterfaceconstant{yfactor}{yfactor} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{yoffset} \setinterfaceconstant{yscale}{yscala} \setinterfaceconstant{ystep}{ystep} % definitions for interface elements for language ro % \setinterfaceelement{answerlines}{answerlines} \setinterfaceelement{answerspace}{answerspace} \setinterfaceelement{begin}{inceput} \setinterfaceelement{complete}{complet} \setinterfaceelement{coupled}{cuplat} \setinterfaceelement{currentlocal}{localcurent} \setinterfaceelement{end}{sfarsit} \setinterfaceelement{endsetup}{} \setinterfaceelement{get}{get} \setinterfaceelement{increment}{increment} \setinterfaceelement{list}{lista} \setinterfaceelement{listof}{listade} \setinterfaceelement{load}{incarca} \setinterfaceelement{local}{local} \setinterfaceelement{makeup}{makeup} \setinterfaceelement{next}{urmatorul} \setinterfaceelement{place}{pune} \setinterfaceelement{previous}{precedent} \setinterfaceelement{previouslocal}{precedentlocal} \setinterfaceelement{reserve}{rezervat} \setinterfaceelement{see}{vezi} \setinterfaceelement{setup}{setare} \setinterfaceelement{start}{start} \setinterfaceelement{stop}{stop} \setinterfaceelement{text}{text} \setinterfaceelement{type}{type} % definitions for interface commands for language ro % \setinterfacecommand{CAPPED}{KAP} \setinterfacecommand{Character}{Litera} \setinterfacecommand{Characters}{Litere} \setinterfacecommand{MONTH}{LUNA} \setinterfacecommand{Numbers}{Numere} \setinterfacecommand{Romannumerals}{Numereromane} \setinterfacecommand{SmallCapped}{Kap} \setinterfacecommand{SmallCaps}{Kaps} \setinterfacecommand{WEEKDAY}{ZIDINSAPTAMANA} \setinterfacecommand{WORD}{CUVANT} \setinterfacecommand{WORDS}{CUVINTE} \setinterfacecommand{Word}{Cuvant} \setinterfacecommand{Words}{Cuvinte} \setinterfacecommand{about}{despre} \setinterfacecommand{adaptlayout}{adapteazaaspect} \setinterfacecommand{arg}{arg} \setinterfacecommand{at}{la} \setinterfacecommand{atleftmargin}{atleftmargin} \setinterfacecommand{atpage}{lapagina} \setinterfacecommand{atrightmargin}{atrightmargin} \setinterfacecommand{background}{fundal} \setinterfacecommand{backspace}{spatiuspate} \setinterfacecommand{blackrule}{linieneagra} \setinterfacecommand{blackrules}{liniinegre} \setinterfacecommand{blank}{blanc} \setinterfacecommand{bookmark}{semncarte} \setinterfacecommand{bottomdistance}{distantajos} \setinterfacecommand{bottomheight}{inaltimejos} \setinterfacecommand{bottomspace}{spatiujos} \setinterfacecommand{but}{but} \setinterfacecommand{button}{buton} \setinterfacecommand{bypassblocks}{saripesteblocuri} \setinterfacecommand{character}{litera} \setinterfacecommand{characters}{litere} \setinterfacecommand{chem}{chem} \setinterfacecommand{clip}{clip} \setinterfacecommand{clonefield}{cloneazacamp} \setinterfacecommand{color}{culoare} \setinterfacecommand{colorbar}{baraculoare} \setinterfacecommand{colorvalue}{valoareculoare} \setinterfacecommand{column}{coloana} \setinterfacecommand{comparecolorgroup}{comparagrupculoare} \setinterfacecommand{comparepalet}{comparapaleta} \setinterfacecommand{completepagenumber}{completeazanumarpagina} \setinterfacecommand{completeregister}{completeregister} \setinterfacecommand{component}{componenta} \setinterfacecommand{convertnumber}{convertestenumar} \setinterfacecommand{copyfield}{copiazacamp} \setinterfacecommand{correctwhitespace}{corecteazaspatiualb} \setinterfacecommand{coupledocument}{cupleazadocument} \setinterfacecommand{couplemarking}{cupleazamarcaje} \setinterfacecommand{couplepage}{paginadubla} \setinterfacecommand{couplepaper}{hartiedubla} \setinterfacecommand{coupleregister}{cupleazaregistru} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{datacurenta} \setinterfacecommand{currentheadnumber}{numartitlucurent} \setinterfacecommand{cutspace}{cutspace} \setinterfacecommand{date}{data} \setinterfacecommand{decouplemarking}{decupleazamarcaje} \setinterfacecommand{decrementnumber}{decrementnumber} \setinterfacecommand{define}{defineste} \setinterfacecommand{defineaccent}{definesteaccent} \setinterfacecommand{defineblank}{definesteblanc} \setinterfacecommand{defineblock}{definestebloc} \setinterfacecommand{definebodyfont}{definestefonttext} \setinterfacecommand{definebodyfontenvironment}{definestemediulfonttext} \setinterfacecommand{definebuffer}{definestebuffer} \setinterfacecommand{definecharacter}{definestecaracter} \setinterfacecommand{definecolor}{definesteculoare} \setinterfacecommand{definecolorgroup}{definestegrupculori} \setinterfacecommand{definecolumnbreak}{definecolumnbreak} \setinterfacecommand{definecolumnset}{definecolumnset} \setinterfacecommand{definecombination}{definecombination} \setinterfacecommand{definecombinedlist}{definestelistacombinata} \setinterfacecommand{definecommand}{definestecomanda} \setinterfacecommand{defineconversion}{definesteconversie} \setinterfacecommand{definedescription}{definestedescriere} \setinterfacecommand{defineenumeration}{definesteenumerare} \setinterfacecommand{definefield}{definestecamp} \setinterfacecommand{definefieldstack}{definestestivacampuri} \setinterfacecommand{definefiguresymbol}{definestesimbolfigura} \setinterfacecommand{definefloat}{definestefloat} \setinterfacecommand{definefont}{definestefont} \setinterfacecommand{definefontstyle}{definestestilfont} \setinterfacecommand{definefontsynonym}{definestesinonimfont} \setinterfacecommand{defineframed}{definesteinconjurare} \setinterfacecommand{defineframedtext}{definestetextinconjurat} \setinterfacecommand{definehbox}{definestehbox} \setinterfacecommand{definehead}{definesteantet} \setinterfacecommand{defineindentedtext}{defineindentedtext} \setinterfacecommand{defineinmargin}{defineinmargin} \setinterfacecommand{defineinteractionmenu}{definestemeniuinteractiune} \setinterfacecommand{defineitemgroup}{defineitemgroup} \setinterfacecommand{definelabel}{definesteeticheta} \setinterfacecommand{definelayer}{definelayer} \setinterfacecommand{definelayout}{definelayout} \setinterfacecommand{definelist}{definestelista} \setinterfacecommand{definelogo}{definestelogo} \setinterfacecommand{definemainfield}{definestecampprincipal} \setinterfacecommand{definemakeup}{definestemakeup} \setinterfacecommand{definemarking}{definestemarcaje} \setinterfacecommand{definemathalignment}{definemathalignment} \setinterfacecommand{defineoutput}{definesteoutput} \setinterfacecommand{defineoverlay}{definesteoverlay} \setinterfacecommand{definepagebreak}{definepagebreak} \setinterfacecommand{definepalet}{definestepaleta} \setinterfacecommand{definepapersize}{definestedimensiunehartie} \setinterfacecommand{defineparagraphs}{definesteparagraf} \setinterfacecommand{defineplacement}{defineplacement} \setinterfacecommand{defineprofile}{definesteprofil} \setinterfacecommand{defineprogram}{definesteprogram} \setinterfacecommand{definerawfont}{definestefontraw} \setinterfacecommand{definereference}{definestereferinte} \setinterfacecommand{definereferenceformat}{definesteformatreferinte} \setinterfacecommand{definereferencelist}{definestelistareferinte} \setinterfacecommand{defineregister}{definesteregistru} \setinterfacecommand{definerule}{definesterigla} \setinterfacecommand{definesection}{definestesectiune} \setinterfacecommand{definesectionblock}{definesteblocsectiune} \setinterfacecommand{definesorting}{definestesortare} \setinterfacecommand{definestartstop}{definestestartstop} \setinterfacecommand{definestyle}{definestestil} \setinterfacecommand{definesubfield}{definestesubcamp} \setinterfacecommand{definesymbol}{definestesimbol} \setinterfacecommand{definesynonyms}{definestesinonim} \setinterfacecommand{definetabletemplate}{definestesablontabel} \setinterfacecommand{definetabulate}{definestetabulatori} \setinterfacecommand{definetext}{definestetext} \setinterfacecommand{definetextposition}{definestepozitietext} \setinterfacecommand{definetextvariable}{definestevariabilatext} \setinterfacecommand{definetype}{definetype} \setinterfacecommand{definetyping}{definestetyping} \setinterfacecommand{defineversion}{definesteversiune} \setinterfacecommand{determineheadnumber}{determinanumartitlu} \setinterfacecommand{determinelistcharacteristics}{determinacaracteristicilelistei} \setinterfacecommand{determineregistercharacteristics}{determinacaracteristiciregistru} \setinterfacecommand{dimension}{dimensiune} \setinterfacecommand{disableinteractionmenu}{dezactiveazameniuinteractiune} \setinterfacecommand{domicile}{domiciliu} \setinterfacecommand{donttest}{nutesta} \setinterfacecommand{edgedistance}{distantacolt} \setinterfacecommand{edgewidth}{latimecolturi} \setinterfacecommand{emptylines}{emptylines} \setinterfacecommand{environment}{mediu} \setinterfacecommand{externalfigure}{figuraexterna} \setinterfacecommand{fact}{fact} \setinterfacecommand{field}{camp} \setinterfacecommand{fieldstack}{stivacampuri} \setinterfacecommand{fillinfield}{campumplere} \setinterfacecommand{fillinline}{linieumplere} \setinterfacecommand{fillinrules}{rigleumplere} \setinterfacecommand{fillintext}{textumplere} \setinterfacecommand{fitfield}{potrivestecamp} \setinterfacecommand{fixedspace}{spatiufixat} \setinterfacecommand{fixedspaces}{spatiifixate} \setinterfacecommand{followprofile}{urmeazaprofil} \setinterfacecommand{followprofileversion}{urmeazaversiuneprofil} \setinterfacecommand{followversion}{urmeazaversiune} \setinterfacecommand{footerdistance}{distantasubsol} \setinterfacecommand{footerheight}{inaltimesubsol} \setinterfacecommand{footnote}{notasubsol} \setinterfacecommand{footnotetext}{footnotetext} \setinterfacecommand{forceblocks}{forteazablocuri} \setinterfacecommand{formulanumber}{numarformula} \setinterfacecommand{fraction}{fractie} \setinterfacecommand{framed}{framed} \setinterfacecommand{from}{din} \setinterfacecommand{getbuffer}{adubuffer} \setinterfacecommand{getmarking}{adumarcaje} \setinterfacecommand{getnumber}{getnumber} \setinterfacecommand{godown}{injos} \setinterfacecommand{goto}{dute} \setinterfacecommand{gotobox}{dutebox} \setinterfacecommand{gotopage}{dutepagina} \setinterfacecommand{graycolor}{culoaregri} \setinterfacecommand{greyvalue}{valoaregri} \setinterfacecommand{grid}{grid} \setinterfacecommand{hairline}{firdepar} \setinterfacecommand{head}{titlu} \setinterfacecommand{headerdistance}{distantaantet} \setinterfacecommand{headerheight}{inaltimeantet} \setinterfacecommand{headlevel}{niveltitlu} \setinterfacecommand{headnumber}{numartitlu} \setinterfacecommand{headsym}{headsym} \setinterfacecommand{headtext}{texttitlu} \setinterfacecommand{hideblocks}{ascundeblocuri} \setinterfacecommand{high}{inalt} \setinterfacecommand{hl}{hl} \setinterfacecommand{immediatebetweenlist}{immediatebetweenlist} \setinterfacecommand{immediatetolist}{immediatetolist} \setinterfacecommand{in}{in} \setinterfacecommand{incrementnumber}{numarincrement} \setinterfacecommand{indenting}{aliniat} \setinterfacecommand{inframed}{inframed} \setinterfacecommand{infull}{pelung} \setinterfacecommand{ininner}{ininner} \setinterfacecommand{inleft}{instanga} \setinterfacecommand{inleftedge}{inparteastanga} \setinterfacecommand{inleftmargin}{inmargineastanga} \setinterfacecommand{inline}{inlinie} \setinterfacecommand{inmargin}{marginal} \setinterfacecommand{inmframed}{inmaframed} \setinterfacecommand{inneredgedistance}{inneredgedistance} \setinterfacecommand{inneredgewidth}{inneredgewidth} \setinterfacecommand{innermargindistance}{innermargindistance} \setinterfacecommand{innermarginwidth}{innermarginwidth} \setinterfacecommand{inothermargin}{inaltamargine} \setinterfacecommand{inouter}{inouter} \setinterfacecommand{inright}{indreapta} \setinterfacecommand{inrightedge}{inparteadreapta} \setinterfacecommand{inrightmargin}{inmargineadreapta} \setinterfacecommand{installlanguage}{instalarelimba} \setinterfacecommand{interactionbar}{barainteractiune} \setinterfacecommand{interactionbuttons}{butoaneinteractiune} \setinterfacecommand{interactionmenu}{meniuinteractiune} \setinterfacecommand{item}{element} \setinterfacecommand{items}{element} \setinterfacecommand{its}{el} \setinterfacecommand{keepblocks}{pastreazablocuri} \setinterfacecommand{label}{eticheta} \setinterfacecommand{labels}{etichete} \setinterfacecommand{labeltext}{texteticheta} \setinterfacecommand{language}{limba} \setinterfacecommand{leftaligned}{aliniatstanga} \setinterfacecommand{leftedgedistance}{distantacoltstanga} \setinterfacecommand{leftedgewidth}{latimecoltstanga} \setinterfacecommand{leftmargindistance}{distantamarginestanga} \setinterfacecommand{leftmarginwidth}{latimemarginestanga} \setinterfacecommand{leg}{leg} \setinterfacecommand{linewidth}{grosimelinie} \setinterfacecommand{listheight}{inaltimelista} \setinterfacecommand{listlength}{lungimelista} \setinterfacecommand{listsymbol}{listsymbol} \setinterfacecommand{listwidth}{latimelista} \setinterfacecommand{logfields}{logcampuri} \setinterfacecommand{lohi}{jossus} \setinterfacecommand{low}{jos} \setinterfacecommand{macroname}{nume} \setinterfacecommand{mainlanguage}{limbaprincipala} \setinterfacecommand{makeupheight}{inaltimemakeup} \setinterfacecommand{makeupwidth}{latimemakeup} \setinterfacecommand{mar}{mar} \setinterfacecommand{margindistance}{distantamargine} \setinterfacecommand{marginrule}{liniemargine} \setinterfacecommand{margintext}{textmarginal} \setinterfacecommand{margintitle}{titlumarginal} \setinterfacecommand{marginwidth}{latimemargine} \setinterfacecommand{marginword}{cuvantmarginal} \setinterfacecommand{marking}{marcaje} \setinterfacecommand{markversion}{marcheazaversiune} \setinterfacecommand{mathematics}{matematica} \setinterfacecommand{menubutton}{butonmeniu} \setinterfacecommand{mframed}{maframed} \setinterfacecommand{midaligned}{aliniatcentru} \setinterfacecommand{mirror}{reflexie} \setinterfacecommand{month}{luna} \setinterfacecommand{moveformula}{moveformula} \setinterfacecommand{moveongrid}{mutapegrid} \setinterfacecommand{movesidefloat}{movesidefloat} \setinterfacecommand{navigating}{navigating} \setinterfacecommand{nodimension}{faradimensiune} \setinterfacecommand{noheaderandfooterlines}{faraliniiantetsisubsol} \setinterfacecommand{noindenting}{faraaliniat} \setinterfacecommand{nolist}{faralista} \setinterfacecommand{nomarking}{faramarcaje} \setinterfacecommand{nomoreblocks}{gatablocuri} \setinterfacecommand{nomorefiles}{farafisiere} \setinterfacecommand{nop}{nop} \setinterfacecommand{nospace}{faraspatiu} \setinterfacecommand{note}{nota} \setinterfacecommand{notopandbottomlines}{faraliniisussijos} \setinterfacecommand{notsmallcapped}{nokap} \setinterfacecommand{nowhitespace}{faraspatiualb} \setinterfacecommand{numberofsubpages}{numberofsubpages} \setinterfacecommand{numbers}{numere} \setinterfacecommand{outeredgedistance}{outeredgedistance} \setinterfacecommand{outeredgewidth}{outeredgewidth} \setinterfacecommand{outermargindistance}{outermargindistance} \setinterfacecommand{outermarginwidth}{outermarginwidth} \setinterfacecommand{packed}{impachetat} \setinterfacecommand{page}{pagina} \setinterfacecommand{pagedepth}{pagedepth} \setinterfacecommand{pagenumber}{numarpagina} \setinterfacecommand{pageoffset}{pageoffset} \setinterfacecommand{pagereference}{referintapagina} \setinterfacecommand{paperheight}{inaltimehartie} \setinterfacecommand{paperwidth}{latimehartie} \setinterfacecommand{periods}{puncte} \setinterfacecommand{plaatsruwelijst}{placerawlist} \setinterfacecommand{placebookmarks}{plaseazasemnecarte} \setinterfacecommand{placecombinedlist}{punelistacombinata} \setinterfacecommand{placefloat}{placefloat} \setinterfacecommand{placefootnotes}{punenotesubsol} \setinterfacecommand{placeformula}{puneformula} \setinterfacecommand{placeheadnumber}{placeheadnumber} \setinterfacecommand{placeheadtext}{placeheadtext} \setinterfacecommand{placelegend}{punelegenda} \setinterfacecommand{placelist}{punelista} \setinterfacecommand{placelocalfootnotes}{punenotesubsollocale} \setinterfacecommand{placelogos}{punelogouri} \setinterfacecommand{placeongrid}{plaseazapegrid} \setinterfacecommand{placeontopofeachother}{punedeasuprafiecareia} \setinterfacecommand{placepagenumber}{punenumarpagina} \setinterfacecommand{placereferencelist}{placereferencelist} \setinterfacecommand{placeregister}{puneregistru} \setinterfacecommand{placerule}{punerigla} \setinterfacecommand{placesidebyside}{punefatainfata} \setinterfacecommand{placesubformula}{punesubformula} \setinterfacecommand{placetextvariable}{punevariabilatext} \setinterfacecommand{position}{pozitie} \setinterfacecommand{positiontext}{pozitietext} \setinterfacecommand{printpaperheight}{inaltimehartieimprimanta} \setinterfacecommand{printpaperwidth}{latimehartieimprimanta} \setinterfacecommand{processblocks}{proceseazabloc} \setinterfacecommand{processpage}{proceseazapagina} \setinterfacecommand{product}{produs} \setinterfacecommand{program}{program} \setinterfacecommand{project}{proiect} \setinterfacecommand{publication}{publicatie} \setinterfacecommand{quotation}{citat} \setinterfacecommand{quote}{minicitat} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{refa} \setinterfacecommand{ref}{ref} \setinterfacecommand{reference}{referinta} \setinterfacecommand{referral}{referit} \setinterfacecommand{referraldate}{datareferit} \setinterfacecommand{referring}{referring} \setinterfacecommand{remark}{remarca} \setinterfacecommand{reset}{reset} \setinterfacecommand{resetmarking}{reseteazamarcaje} \setinterfacecommand{resetnumber}{resetnumber} \setinterfacecommand{resettext}{resettextcontent} \setinterfacecommand{rightaligned}{aliniatdreapta} \setinterfacecommand{rightedgedistance}{distantacoltdreapta} \setinterfacecommand{rightedgewidth}{latimecoltdreapta} \setinterfacecommand{rightmargindistance}{distantamarginedreapta} \setinterfacecommand{rightmarginwidth}{latimemarginedreapta} \setinterfacecommand{romannumerals}{numereromane} \setinterfacecommand{rotate}{roteste} \setinterfacecommand{scale}{scala} \setinterfacecommand{screen}{ecran} \setinterfacecommand{selectblocks}{selecteazablocuri} \setinterfacecommand{selectpaper}{selecteazahartie} \setinterfacecommand{selectversion}{selecteazaversiune} \setinterfacecommand{setnumber}{setnumber} \setinterfacecommand{settextcontent}{settextcontent} \setinterfacecommand{settextvariable}{setvariabilatext} \setinterfacecommand{setupalign}{seteazaalinierea} \setinterfacecommand{setupanswerarea}{setupanswerarea} \setinterfacecommand{setuparranging}{seteazaaranjareapag} \setinterfacecommand{setupbackground}{seteazafundal} \setinterfacecommand{setupbackgrounds}{seteazafundaluri} \setinterfacecommand{setupblackrules}{seteazaliniinegre} \setinterfacecommand{setupblank}{seteazablanc} \setinterfacecommand{setupblock}{seteazabloc} \setinterfacecommand{setupbodyfont}{seteazafonttext} \setinterfacecommand{setupbodyfontenvironment}{seteazamediulfonttext} \setinterfacecommand{setupbottom}{seteazajos} \setinterfacecommand{setupbottomtexts}{seteazatextejos} \setinterfacecommand{setupbuffer}{seteazabuffer} \setinterfacecommand{setupbuttons}{seteazabutoane} \setinterfacecommand{setupcapitals}{seteazamajuscule} \setinterfacecommand{setupcaption}{seteazalegenda} \setinterfacecommand{setupcaptions}{seteazalegendele} \setinterfacecommand{setupclipping}{seteazaclipping} \setinterfacecommand{setupcolor}{seteazaculoare} \setinterfacecommand{setupcolors}{seteazaculori} \setinterfacecommand{setupcolumns}{seteazacoloane} \setinterfacecommand{setupcolumnset}{setupcolumnset} \setinterfacecommand{setupcolumnsetlines}{setupcolumnsetlines} \setinterfacecommand{setupcolumnsetstart}{setupcolumnsetstart} \setinterfacecommand{setupcombinations}{seteazacombinari} \setinterfacecommand{setupcombinedlist}{seteazalistacombinata} \setinterfacecommand{setupcomment}{seteazacomentariu} \setinterfacecommand{setupdescriptions}{seteazadescriere} \setinterfacecommand{setupenumerations}{seteazaenumerare} \setinterfacecommand{setupexternalfigures}{seteazafiguriexterne} \setinterfacecommand{setupfield}{seteazacamp} \setinterfacecommand{setupfields}{seteazacampuri} \setinterfacecommand{setupfillinlines}{seteazaliniiumplere} \setinterfacecommand{setupfillinrules}{seteazarigleumplere} \setinterfacecommand{setupfloat}{seteazafloat} \setinterfacecommand{setupfloats}{seteazafloats} \setinterfacecommand{setupfloatsplitting}{seteazaimpartireafloat} \setinterfacecommand{setupfooter}{seteazasubsol} \setinterfacecommand{setupfootertexts}{seteazatextesubsol} \setinterfacecommand{setupfootnotedefinition}{seteazadefinireanotasubsol} \setinterfacecommand{setupfootnotes}{seteazanotasubsol} \setinterfacecommand{setupforms}{seteazaformulare} \setinterfacecommand{setupformulas}{seteazaformule} \setinterfacecommand{setupframed}{seteazainconjurat} \setinterfacecommand{setupframedtexts}{definestetexteinconjurate} \setinterfacecommand{setuphead}{seteazatitlu} \setinterfacecommand{setupheader}{seteazaantet} \setinterfacecommand{setupheadertexts}{seteazatexteantet} \setinterfacecommand{setupheadnumber}{seteazanumartitlu} \setinterfacecommand{setupheads}{seteazatitluri} \setinterfacecommand{setupheadtext}{seteazatexttitlu} \setinterfacecommand{setuphyphenmark}{seteazaliniesilabe} \setinterfacecommand{setupindentedtext}{setupindentedtext} \setinterfacecommand{setupindenting}{seteazaaliniat} \setinterfacecommand{setupinmargin}{seteazamarginal} \setinterfacecommand{setupinteraction}{seteazainteractiunea} \setinterfacecommand{setupinteractionbar}{seteazabarainteractiune} \setinterfacecommand{setupinteractionmenu}{seteazameniuinteractiune} \setinterfacecommand{setupinteractionscreen}{seteazaecraninteractiune} \setinterfacecommand{setupinterlinespace}{seteazaspatiuinterliniar} \setinterfacecommand{setupitemgroup}{setupitemgroup} \setinterfacecommand{setupitemgroups}{setareitemization} \setinterfacecommand{setupitems}{seteazaelemente} \setinterfacecommand{setuplabeltext}{seteazatexteticheta} \setinterfacecommand{setuplanguage}{setarelimba} \setinterfacecommand{setuplayout}{seteazaaspect} \setinterfacecommand{setuplegend}{seteazalegenda} \setinterfacecommand{setuplinenumbering}{seteazanumerotarelinii} \setinterfacecommand{setuplines}{seteazalinii} \setinterfacecommand{setuplinewidth}{seteazagrosimelinie} \setinterfacecommand{setuplist}{seteazalista} \setinterfacecommand{setupmakeup}{seteazamakeup} \setinterfacecommand{setupmarginblocks}{seteazablocurimarginale} \setinterfacecommand{setupmarginrules}{seteazaliniimargine} \setinterfacecommand{setupmarking}{seteazamarcaje} \setinterfacecommand{setupmathalignment}{setupmathalignment} \setinterfacecommand{setupnarrower}{seteazaingust} \setinterfacecommand{setupnumber}{setupnumber} \setinterfacecommand{setupnumbering}{seteazanumerotare} \setinterfacecommand{setupoppositeplacing}{seteazaplasareaopozita} \setinterfacecommand{setupoutput}{setareoutput} \setinterfacecommand{setuppagecomment}{seteazacomentariupagina} \setinterfacecommand{setuppagenumber}{seteazanumarpagina} \setinterfacecommand{setuppagenumbering}{seteazanumerotarepagina} \setinterfacecommand{setuppagetransitions}{seteazatranzitiepagina} \setinterfacecommand{setuppalet}{seteazapaleta} \setinterfacecommand{setuppaper}{setuppaper} \setinterfacecommand{setuppapersize}{seteazadimensiunihartie} \setinterfacecommand{setupparagraphnumbering}{seteazanumerotareparagrafe} \setinterfacecommand{setupparagraphs}{seteazaparagrafe} \setinterfacecommand{setupplacement}{setupplacement} \setinterfacecommand{setuppositioning}{setarepozitie} \setinterfacecommand{setupprofiles}{seteazaprofile} \setinterfacecommand{setupprograms}{seteazaprograme} \setinterfacecommand{setuppublications}{seteazapublicatii} \setinterfacecommand{setupquote}{seteazaminicitat} \setinterfacecommand{setupreferencelist}{seteazalistareferinte} \setinterfacecommand{setupreferencing}{seteazareferinte} \setinterfacecommand{setupregister}{seteazaregistru} \setinterfacecommand{setuprotate}{seteazarotare} \setinterfacecommand{setuprule}{seteazarigla} \setinterfacecommand{setups}{setari} \setinterfacecommand{setupscreens}{seteazaecrane} \setinterfacecommand{setupsection}{seteazasectiune} \setinterfacecommand{setupsectionblock}{seteazablocsectiune} \setinterfacecommand{setupsorting}{seteazasortare} \setinterfacecommand{setupspacing}{seteazaspatiu} \setinterfacecommand{setupstartstop}{setupstartstop} \setinterfacecommand{setupstrut}{seteazastrut} \setinterfacecommand{setupsubpagenumber}{seteazanumarsubpagina} \setinterfacecommand{setupsymbolset}{seteazasimbol} \setinterfacecommand{setupsynchronization}{setaresincronizare} \setinterfacecommand{setupsynchronizationbar}{setarebarasincronizare} \setinterfacecommand{setupsynonyms}{seteazasinonime} \setinterfacecommand{setupsystem}{seteazasistem} \setinterfacecommand{setuptab}{seteazatab} \setinterfacecommand{setuptables}{seteazatabele} \setinterfacecommand{setuptabulate}{seteazatabulatori} \setinterfacecommand{setuptext}{seteazatext} \setinterfacecommand{setuptextposition}{seteazapozitietext} \setinterfacecommand{setuptextrules}{seteazarigletext} \setinterfacecommand{setuptexttexts}{seteazatextetext} \setinterfacecommand{setuptextvariable}{seteazavariabilatext} \setinterfacecommand{setupthinrules}{seteazaliniesubtire} \setinterfacecommand{setuptolerance}{seteazatoleranta} \setinterfacecommand{setuptop}{seteazasus} \setinterfacecommand{setuptoptexts}{seteazatextesus} \setinterfacecommand{setuptype}{seteazatype} \setinterfacecommand{setuptyping}{seteazatyping} \setinterfacecommand{setupunderbar}{seteazasublinie} \setinterfacecommand{setupurl}{seteazaurl} \setinterfacecommand{setupversions}{seteazaversiuni} \setinterfacecommand{setupwhitespace}{seteazaspatiualb} \setinterfacecommand{showbodyfont}{afiseazafonttext} \setinterfacecommand{showbodyfontenvironment}{afiseazamediufonttext} \setinterfacecommand{showcolor}{afiseazaculoare} \setinterfacecommand{showcolorgroup}{afiseazagrupculoare} \setinterfacecommand{showexternalfigures}{afiseazafiguriexterne} \setinterfacecommand{showfields}{afiseazacampuri} \setinterfacecommand{showframe}{afiseazarama} \setinterfacecommand{showgrid}{afiseazagrid} \setinterfacecommand{showlayout}{afiseazaaspect} \setinterfacecommand{showmakeup}{afiseazamakeup} \setinterfacecommand{showpalet}{afiseazapaleta} \setinterfacecommand{showprint}{afiseazatiparire} \setinterfacecommand{showsetups}{afiseazasetari} \setinterfacecommand{showstruts}{afiseazastruts} \setinterfacecommand{showsymbolset}{afiseazasetsimboluri} \setinterfacecommand{smallcapped}{kap} \setinterfacecommand{someline}{olinie} \setinterfacecommand{somewhere}{undeva} \setinterfacecommand{space}{spatiu} \setinterfacecommand{splitfloat}{impartefloat} \setinterfacecommand{startalignment}{startaliniere} \setinterfacecommand{startbackground}{startfundal} \setinterfacecommand{startcoding}{startcodificare} \setinterfacecommand{startcolor}{startculoare} \setinterfacecommand{startcolumnmakeup}{startcolumnmakeup} \setinterfacecommand{startcolumns}{startcoloane} \setinterfacecommand{startcolumnset}{startcolumnset} \setinterfacecommand{startcombination}{startcombinare} \setinterfacecommand{startcomponent}{startcomponenta} \setinterfacecommand{startdocument}{startdocument} \setinterfacecommand{startenvironment}{startmediu} \setinterfacecommand{startfigure}{startfigura} \setinterfacecommand{startglobal}{startglobal} \setinterfacecommand{startline}{startlinie} \setinterfacecommand{startlinecorrection}{startcorectielinie} \setinterfacecommand{startlinenumbering}{startnumerotarelinii} \setinterfacecommand{startlines}{startlinii} \setinterfacecommand{startlocal}{startlocal} \setinterfacecommand{startlocalfootnotes}{startnotesubsollocale} \setinterfacecommand{startmakeup}{startmakeup} \setinterfacecommand{startmarginblock}{startblocmarginal} \setinterfacecommand{startmarginrule}{startliniemargine} \setinterfacecommand{startnarrower}{startingust} \setinterfacecommand{startopposite}{startopozit} \setinterfacecommand{startoverlay}{startoverlay} \setinterfacecommand{startoverzicht}{startoverview} \setinterfacecommand{startpacked}{startimpachetat} \setinterfacecommand{startpositioning}{startpozitionare} \setinterfacecommand{startproduct}{startprodus} \setinterfacecommand{startprofile}{startprofil} \setinterfacecommand{startproject}{startproiect} \setinterfacecommand{startquotation}{startcitat} \setinterfacecommand{startraster}{startraster} \setinterfacecommand{startsymbolset}{startsetsimboluri} \setinterfacecommand{startsynchronization}{startsincronizare} \setinterfacecommand{starttable}{starttabel} \setinterfacecommand{starttables}{starttabele} \setinterfacecommand{starttext}{starttext} \setinterfacecommand{starttextrule}{startriglatext} \setinterfacecommand{startunpacked}{startneimpachetat} \setinterfacecommand{startversion}{startversiune} \setinterfacecommand{stopalignment}{stopaliniere} \setinterfacecommand{stopbackground}{stopfundal} \setinterfacecommand{stopcoding}{stopcodificare} \setinterfacecommand{stopcolor}{stopculoare} \setinterfacecommand{stopcolumnmakeup}{stopcolumnmakeup} \setinterfacecommand{stopcolumns}{stopcoloane} \setinterfacecommand{stopcolumnset}{stopcolumnset} \setinterfacecommand{stopcombination}{stopcombinare} \setinterfacecommand{stopcomponent}{stopcomponenta} \setinterfacecommand{stopdocument}{stopdocument} \setinterfacecommand{stopenvironment}{stopmediu} \setinterfacecommand{stopglobal}{stopblobal} \setinterfacecommand{stopline}{stoplinie} \setinterfacecommand{stoplinecorrection}{stopcorectielinie} \setinterfacecommand{stoplinenumbering}{stopnumerotarelinii} \setinterfacecommand{stoplines}{stoplinii} \setinterfacecommand{stoplocal}{stoplocal} \setinterfacecommand{stoplocalfootnotes}{stopnotesubsollocale} \setinterfacecommand{stopmakeup}{stopmakeup} \setinterfacecommand{stopmarginblock}{stopblocmarginal} \setinterfacecommand{stopmarginrule}{stopliniemargine} \setinterfacecommand{stopnarrower}{stopingust} \setinterfacecommand{stopopposite}{stopopozit} \setinterfacecommand{stopoverlay}{stopoverlay} \setinterfacecommand{stopoverzicht}{stopoverview} \setinterfacecommand{stoppacked}{stopimpachetat} \setinterfacecommand{stoppositioning}{stoppozitionare} \setinterfacecommand{stopproduct}{stopprodus} \setinterfacecommand{stopprofile}{stopprofil} \setinterfacecommand{stopproject}{stopproiect} \setinterfacecommand{stopquotation}{stopcitat} \setinterfacecommand{stopraster}{stopraster} \setinterfacecommand{stopsynchronization}{stopsincronizare} \setinterfacecommand{stoptable}{stoptabel} \setinterfacecommand{stoptables}{stoptabele} \setinterfacecommand{stoptext}{stoptext} \setinterfacecommand{stoptextrule}{stopriglatext} \setinterfacecommand{stopunpacked}{stopneimpachetat} \setinterfacecommand{stopversion}{stopversiune} \setinterfacecommand{stretched}{intins} \setinterfacecommand{subformulanumber}{numarsubformula} \setinterfacecommand{subpagenumber}{subpagenumber} \setinterfacecommand{switchtobodyfont}{trecilafonttext} \setinterfacecommand{switchtorawfont}{trecilafontraw} \setinterfacecommand{sym}{sim} \setinterfacecommand{symbol}{simbol} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{barasincronizare} \setinterfacecommand{synchronize}{sincronizeaza} \setinterfacecommand{tab}{tab} \setinterfacecommand{testcolumn}{testcolumn} \setinterfacecommand{testpage}{testpage} \setinterfacecommand{tex}{tex} \setinterfacecommand{textheight}{inaltimetext} \setinterfacecommand{textreference}{referintatext} \setinterfacecommand{textrule}{riglatext} \setinterfacecommand{textvariable}{variabilatext} \setinterfacecommand{textwidth}{latimetext} \setinterfacecommand{thinrule}{liniesubtire} \setinterfacecommand{thinrules}{liniisubtiri} \setinterfacecommand{tooltip}{tooltip} \setinterfacecommand{topdistance}{distantasus} \setinterfacecommand{topheight}{inaltimesus} \setinterfacecommand{topspace}{spatiusus} \setinterfacecommand{totalnumberofpages}{numartotalpagini} \setinterfacecommand{translate}{traduce} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{typ} \setinterfacecommand{type}{type} \setinterfacecommand{typebuffer}{scriebuffer} \setinterfacecommand{typefile}{typefile} \setinterfacecommand{unitmeaning}{numeunitate} \setinterfacecommand{unknown}{necunoscut} \setinterfacecommand{useJSscripts}{folosestescriptJS} \setinterfacecommand{useURL}{folosesteURL} \setinterfacecommand{useXMLfilter}{useXMLfilter} \setinterfacecommand{useblocks}{folosestebloc} \setinterfacecommand{usecommands}{folosestecomenzi} \setinterfacecommand{useencoding}{folosestecodificarea} \setinterfacecommand{useexternaldocument}{folosestedocumentextern} \setinterfacecommand{useexternalfigure}{folosestefiguraexterna} \setinterfacecommand{useexternalfile}{folosestefisierextern} \setinterfacecommand{useexternalfiles}{folosestefisiereexterne} \setinterfacecommand{useexternalsoundtrack}{folosestemuzicaexterna} \setinterfacecommand{usemodule}{folosestemodul} \setinterfacecommand{usemodules}{folosestemodule} \setinterfacecommand{usepath}{folosestedirector} \setinterfacecommand{usereferences}{folosestereferinte} \setinterfacecommand{usespecials}{folosestespeciale} \setinterfacecommand{usesymbols}{folosestesimboluri} \setinterfacecommand{usetypescript}{usetypescript} \setinterfacecommand{usetypescriptfile}{usetypescriptfile} \setinterfacecommand{useurl}{folosesteurl} \setinterfacecommand{version}{versiune} \setinterfacecommand{vl}{vl} \setinterfacecommand{weekday}{zidinsaptamana} \setinterfacecommand{whitespace}{spatiualb} \setinterfacecommand{wordright}{cuvantdreapta} \setinterfacecommand{writebetweenlist}{scrieintreliste} \setinterfacecommand{writetolist}{scrieinlista} \setinterfacecommand{writetoreferencelist}{scrieinlistareferinte} \setinterfacecommand{writetoregister}{scrieinregistru} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/m-morse.mkvi0000644000175000017500000001610012130411274024131 0ustar norbertnorbert%D \module %D [ file=m-morse, %D version=2010.12.10, %D title=\CONTEXT\ Extra Modules, %D subtitle=Morse, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: act upon the node list % make it a buffer operation % nice in cld manual \startluacode moduledata.morse = moduledata.morse or { } local morse = moduledata.morse local utfcharacters, gsub = string.utfcharacters, string.gsub local ucchars, shchars = characters.ucchars, characters.shchars local codes = { ["A"] = "·—", ["B"] = "—···", ["C"] = "—·—·", ["D"] = "—··", ["E"] = "·", ["F"] = "··—·", ["G"] = "——·", ["H"] = "····", ["I"] = "··", ["J"] = "·———", ["K"] = "—·—", ["L"] = "·—··", ["M"] = "——", ["N"] = "—·", ["O"] = "———", ["P"] = "·——·", ["Q"] = "——·—", ["R"] = "·—·", ["S"] = "···", ["T"] = "—", ["U"] = "··—", ["V"] = "···—", ["W"] = "·——", ["X"] = "—··—", ["Y"] = "—·——", ["Z"] = "——··", ["0"] = "—————", ["1"] = "·————", ["2"] = "··———", ["3"] = "···——", ["4"] = "····—", ["5"] = "·····", ["6"] = "—····", ["7"] = "——···", ["8"] = "———··", ["9"] = "————·", ["."] = "·—·—·—", [","] = "——··——", [":"] = "———···", [";"] = "—·—·—", ["?"] = "··——··", ["!"] = "—·—·——", ["-"] = "—····—", ["/"] = "—··—· ", ["("] = "—·——·", [")"] = "—·——·—", ["="] = "—···—", ["@"] = "·——·—·", ["'"] = "·————·", ['"'] = "·—··—·", ["À"] = "·——·—", ["Å"] = "·——·—", ["Ä"] = "·—·—", ["Æ"] = "·—·—", ["Ç"] = "—·—··", ["É"] = "··—··", ["È"] = "·—··—", ["Ñ"] = "——·——", ["Ö"] = "———·", ["Ø"] = "———·", ["Ü"] = "··——", ["ß"] = "··· ···", } morse.codes = codes local fallbackself = false local function codefallback(t,k) if k then local u = ucchars[k] local v = rawget(t,u) or rawget(t,shchars[u]) or false t[k] = v return v elseif fallbackself then return k else return false end end table.setmetatableindex(codes,codefallback) local MorseBetweenWords = context.MorseBetweenWords local MorseBetweenCharacters = context.MorseBetweenCharacters local MorseLong = context.MorseLong local MorseShort = context.MorseShort local MorseSpace = context.MorseSpace local MorseUnknown = context.MorseUnknown local function toverbose(str) str = gsub(str,"%s*+%s*","+") str = gsub(str,"%s+"," ") local done = false for m in utfcharacters(str) do if done then MorseBetweenCharacters() end if m == "·" or m == "." then MorseShort() done = true elseif m == "—" or m == "-" then MorseLong() done = true elseif m == " " then if done then MorseBetweenCharacters() end done = false elseif m == "+" then MorseBetweenWords() done = false else MorseUnknown(m) end end end local function toregular(str) local inmorse = false for s in utfcharacters(str) do local m = codes[s] if m then if inmorse then MorseBetweenWords() else inmorse = true end local done = false for m in utfcharacters(m) do if done then MorseBetweenCharacters() else done = true end if m == "·" then MorseShort() elseif m == "—" then MorseLong() elseif m == " " then MorseBetweenCharacters() end end inmorse = true elseif s == "\n" or s == " " then MorseSpace() inmorse = false else if inmorse then MorseBetweenWords() else inmorse = true end MorseUnknown(s) end end end local function tomorse(str,verbose) if verbose then toverbose(str) else toregular(str) end end morse.tomorse = tomorse function morse.filetomorse(name,verbose) tomorse(resolvers.loadtexfile(name),verbose) end function morse.showtable() context.starttabulate { "|l|l|" } -- { "|l|l|l|" } for k, v in table.sortedpairs(codes) do context.NC() context(k) -- context.NC() context(v) context.NC() tomorse(v,true) context.NC() context.NR() end context.stoptabulate() end \stopluacode \unprotect % todo: \setupmorse, but probably it's not worth the trouble. \def\MorseWidth {0.4em} \def\MorseHeight {0.2em} %def\MorseShort {\dontleavehmode\blackrule[\c!height=\MorseHeight,\c!width=\dimexpr\MorseWidth]} %def\MorseLong {\dontleavehmode\blackrule[\c!height=\MorseHeight,\c!width=3\dimexpr\MorseWidth]} \def\MorseShort {\dontleavehmode\vrule\!!width \dimexpr\MorseWidth\!!height\MorseHeight\!!depth\zeropoint\relax} \def\MorseLong {\dontleavehmode\vrule\!!width3\dimexpr\MorseWidth\!!height\MorseHeight\!!depth\zeropoint\relax} \def\MorseBetweenCharacters {\kern\MorseWidth} \def\MorseBetweenWords {\hskip3\dimexpr\MorseWidth\relax} \def\MorseSpace {\hskip7\dimexpr\MorseWidth\relax} \def\MorseUnknown #text{[\detokenize{#text}]} \unexpanded\def\MorseCode #text{\ctxlua{moduledata.morse.tomorse(\!!bs#text\!!es,true)}} \unexpanded\def\MorseString #text{\ctxlua{moduledata.morse.tomorse(\!!bs#text\!!es)}} \unexpanded\def\MorseFile #text{\ctxlua{moduledata.morse.filetomorse("#text")}} \unexpanded\def\MorseTable {\ctxlua{moduledata.morse.showtable()}} \let\Morse \MorseString %def\MorseShort {·} %def\MorseLong {—} \protect \continueifinputfile{m-morse.mkvi} \starttext \MorseTable \startlines \MorseCode{—·—· ——— —· — · —··— —+—— —·— ·· ···—} \MorseCode{—·—· ——— —· — · —··— — + —— —·— ·· ···—} \Morse{ÀÁÂÃÄÅàáâãäå} \Morse{ÆÇæç} \Morse{ÈÉÊËèéêë} \Morse{ÌÍÎÏìíîï} \Morse{Ññ} \Morse{ÒÓÔÕÖòóôõö} \Morse{Øø} \Morse{ÙÚÛÜùúû} \Morse{Ýýÿ} \Morse{ß} \Morse{Ţţ} \stoplines \Morse{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/page-lin.mkiv0000644000175000017500000004577712130411274024274 0ustar norbertnorbert%D \module %D [ file=page-lin, %D version=2007.11.29, %D title=\CONTEXT\ Core Macros, %D subtitle=Line Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % generic or not ... maybe not bother too much and simplify to mkiv only % get rid of \mk* (left over from experimental times) % % to be redone (was experiment) .. can be hooked into margin code \writestatus{loading}{ConTeXt Core Macros / Line Numbering} \unprotect % todo: save settings % % low level interface % % we should use normal counters but then we need to sync settings % some line % % \startlocallinenumbering % some source code 1\par % some source code 2\par % some source code 3\par % \stoplocallinenumbering % % some line \registerctxluafile{page-lin}{1.001} \definesystemattribute[linenumber] [public] \definesystemattribute[linereference][public] \appendtoksonce \attribute\linenumberattribute\attributeunsetvalue \to \everyforgetall \newcount \linenumber % not used \newbox \b_page_lines_scratch \newcount \c_page_lines_reference \newconstant\c_page_lines_nesting \newconditional\tracelinenumbering % id nr shift width leftskip dir \installcorenamespace{linenumberinginstance} \let\makelinenumber\gobblesevenarguments % used at lua end \newconditional\page_postprocessors_needed_box \unexpanded\def\page_postprocessors_linenumbers_page #1{\page_lines_add_numbers_to_box{#1}\plusone \plusone \zerocount} \unexpanded\def\page_postprocessors_linenumbers_box #1{\page_lines_add_numbers_to_box{#1}\plusone \plusone \zerocount} \unexpanded\def\page_postprocessors_linenumbers_deepbox#1{\page_lines_add_numbers_to_box{#1}\plusone \plusone \plusone } \unexpanded\def\page_postprocessors_linenumbers_column #1{\page_lines_add_numbers_to_box{#1}\currentcolumn\nofcolumns\zerocount} \def\page_lines_parameters_regular {continue = "\ifnum\c_page_lines_mode=\zerocount\v!yes\else\v!no\fi", start = \number\linenumberingparameter\c!start, step = \number\linenumberingparameter\c!step, method = "\linenumberingparameter\c!method", tag = "\currentlinenumbering"} \def\page_lines_parameters_update {continue = "\ifnum\c_page_lines_mode=\zerocount\v!yes\else\v!no\fi"} \def\page_lines_start_define {\setxvalue{\??linenumberinginstance\currentlinenumbering}{\ctxcommand{registerlinenumbering({\page_lines_parameters_regular})}}} \def\page_lines_start_update {\ctxcommand{setuplinenumbering(\csname\??linenumberinginstance\currentlinenumbering\endcsname,{\page_lines_parameters_update})}} \def\page_lines_setup {\ifcsname \??linenumberinginstance\currentlinenumbering\endcsname \ctxcommand{setuplinenumbering(\csname\??linenumberinginstance\currentlinenumbering\endcsname,{\page_lines_parameters_regular})}% \fi} % we could make this a bit more efficient by putting the end reference % in the same table as the start one but why make things complex ... \let\dofinishlinereference\dofinishfullreference % at lua end \unexpanded\def\page_lines_some_reference#1#2#3% {\dontleavehmode\begingroup \global\advance\c_page_lines_reference\plusone \attribute\linereferenceattribute\c_page_lines_reference #3% % for the moment we use a simple system i.e. no prefixes etc .. todo: store as number \normalexpanded{\strc_references_set_named_reference{line}{#2}{conversion=\linenumberingparameter\c!conversion}{\the\c_page_lines_reference}}% kind labels userdata text \endgroup} \def\page_lines_reference_start#1{\page_lines_some_reference{#1}{lr:b:#1}{}\ignorespaces} \def\page_lines_reference_stop #1{\removeunwantedspaces\page_lines_some_reference{#1}{lr:e:#1}{}} % \def\mklinestartreference#1[#2]{\in{#1}[lr:b:#2]} % not interfaced/ not used % \def\mklinestopreference #1[#2]{\in{#1}[lr:e:#2]} % not interfaced/ not used \newif\ifnumberinglines % will change \newif\iftypesettinglines % will change \installcorenamespace{linenumbering} \installcommandhandler \??linenumbering {linenumbering} \??linenumbering \setnewconstant\c_page_lines_mode \plusone % 0=continue, 1=restart \setnewconstant\c_page_lines_location \plusone % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end \setnewconstant\c_page_lines_alignment\plusfive % 0=middle, 1=left, 2=right, 5=auto \newdimen\d_page_lines_width \newdimen\d_page_lines_distance \newevery \beforeeverylinenumbering \relax \newevery \aftereverylinenumbering \relax \newevery \everylinenumber \relax \appendtoks \page_lines_setup \to \everysetuplinenumbering \appendtoks \page_lines_start_define \to \everydefinelinenumbering \setuplinenumbering [\c!conversion=\v!numbers, \c!start=1, \c!step=1, \c!method=\v!first, \c!continue=\v!no, \c!location=\v!left, \c!style=, \c!color=, \c!width=2\emwidth, \c!left=, \c!right=, \c!command=, \c!distance=\zeropoint, \c!align=\v!auto] \definelinenumbering [] % no intermediate changes in values, define a class, otherwise each range % would need a number % todo: text \installcorenamespace{linennumberinglocation} \installcorenamespace{linennumberingalternative} \expandafter\let\csname\??linennumberinglocation\v!middle \endcsname \zerocount \expandafter\let\csname\??linennumberinglocation\v!left \endcsname \plusone \expandafter\let\csname\??linennumberinglocation\v!margin \endcsname \plusone \expandafter\let\csname\??linennumberinglocation\v!inmargin \endcsname \plusone \expandafter\let\csname\??linennumberinglocation\v!inleft \endcsname \plusone \expandafter\let\csname\??linennumberinglocation\v!right \endcsname \plustwo \expandafter\let\csname\??linennumberinglocation\v!inright \endcsname \plustwo \expandafter\let\csname\??linennumberinglocation\v!inner \endcsname \plusthree \expandafter\let\csname\??linennumberinglocation\v!outer \endcsname \plusfour \expandafter\let\csname\??linennumberinglocation\v!text \endcsname \plusfive \expandafter\let\csname\??linennumberinglocation\v!begin \endcsname \plussix \expandafter\let\csname\??linennumberinglocation\v!end \endcsname \plusseven \expandafter\let\csname\??linennumberingalternative\v!middle \endcsname \zerocount \expandafter\let\csname\??linennumberingalternative\v!right \endcsname \plusone \expandafter\let\csname\??linennumberingalternative\v!flushleft \endcsname \plusone \expandafter\let\csname\??linennumberingalternative\v!left \endcsname \plustwo \expandafter\let\csname\??linennumberingalternative\v!flushright\endcsname \plustwo \expandafter\let\csname\??linennumberingalternative\v!auto \endcsname \plusfive % \startlinenumbering[|continue|settings|name] % \startlinenumbering[name][|continue|settings] \unexpanded\def\startlinenumbering {\dodoubleempty\page_lines_start} \def\page_lines_start % we stay downward compatible {\begingroup \ifsecondargument \expandafter\page_lines_start_two \else\iffirstargument \doubleexpandafter\page_lines_start_one \else \doubleexpandafter\page_lines_start_zero \fi\fi} \def\page_lines_start_zero[#1][#2]% {\edef\m_argument{\linenumberingparameter\c!continue}% \ifx\m_argument\v!continue \c_page_lines_mode\zerocount \else \c_page_lines_mode\plusone \fi \page_lines_start_followup} \def\page_lines_start_one[#1][#2]% [continue||settings] % historic {\edef\m_argument{#1}% \ifx\m_argument\v!continue \c_page_lines_mode\zerocount \let\currentlinenumbering\empty \else \c_page_lines_mode\plusone \ifx\m_argument\v!empty \let\currentlinenumbering\empty \else \doifassignmentelse{#1} {\let\currentlinenumbering\empty \setupcurrentlinenumbering[#1]} {\doifnumberelse\m_argument {\let\currentlinenumbering\empty \letlinenumberingparameter\c!start\m_argument} {\let\currentlinenumbering\m_argument}}% \fi \edef\p_continue{\linenumberingparameter\c!continue}% \ifx\p_continue\v!yes \c_page_lines_mode\zerocount \fi \fi \page_lines_start_followup} \def\page_lines_start_two[#1][#2]% [tag][continue||settings] {\edef\currentlinenumbering{#1}% \edef\m_argument{#2}% \ifx\m_argument\v!continue \c_page_lines_mode\zerocount \else \c_page_lines_mode\plusone \ifx\m_argument\v!empty \else \doifassignmentelse{#2} {\setupcurrentlinenumbering[#2]} {\doifnumber\m_argument {\letlinenumberingparameter\c!start\m_argument}}% \fi \edef\p_continue{\linenumberingparameter\c!continue}% \ifx\p_continue\v!yes \c_page_lines_mode\zerocount \fi \fi \page_lines_start_followup} \def\page_lines_start_followup {\numberinglinestrue \the\beforeeverylinenumbering \globallet\page_postprocessors_page \page_postprocessors_linenumbers_page \globallet\page_postprocessors_column\page_postprocessors_linenumbers_column \global\settrue\page_postprocessors_needed_box % see core-rul.mkiv \ifcase\c_page_lines_mode\relax \page_lines_start_update % continue \or \page_lines_start_define % only when assignment \fi \attribute\linenumberattribute\getvalue{\??linenumberinginstance\currentlinenumbering}\relax} \unexpanded\def\stoplinenumbering {\attribute\linenumberattribute\attributeunsetvalue \the\aftereverylinenumbering \endgroup} % number placement .. will change into (the new) margin code \def\page_lines_number_inner_indeed{\doifoddpageelse\page_lines_number_left_indeed\page_lines_number_right_indeed} \def\page_lines_number_outer_indeed{\doifoddpageelse\page_lines_number_right_indeed\page_lines_number_left_indeed} \def\page_lines_number_left {\ifcase\c_page_lines_location \expandafter\page_lines_number_left_indeed \or \expandafter\page_lines_number_left_indeed \or \expandafter\page_lines_number_left_indeed \or \expandafter\page_lines_number_inner_indeed \or \expandafter\page_lines_number_outer_indeed \or \expandafter\page_lines_number_text_indeed \or \expandafter\page_lines_number_begin_indeed \or \expandafter\page_lines_number_end_indeed \fi} \def\page_lines_number_right {\ifcase\c_page_lines_location \expandafter\page_lines_number_right_indeed \or \expandafter\page_lines_number_right_indeed \or \expandafter\page_lines_number_right_indeed \or \expandafter\page_lines_number_outer_indeed \or \expandafter\page_lines_number_inner_indeed \or \expandafter\page_lines_number_text_indeed \or \expandafter\page_lines_number_end_indeed \or \expandafter\page_lines_number_begin_indeed \fi} \newconditional\c_page_lines_fake_number \newconstant \b_page_lines_number \newconstant \c_page_lines_column \newconstant \c_page_lines_last_column \def\page_lines_add_numbers_to_box#1#2#3#4% box col max nesting {\bgroup \b_page_lines_number #1\relax \c_page_lines_column #2\relax \c_page_lines_last_column#3\relax \c_page_lines_nesting #4\relax \fullrestoreglobalbodyfont \let\makelinenumber\page_lines_make_number % used at lua end \setbox\b_page_lines_scratch\vbox {\forgetall \offinterlineskip \ctxcommand{linenumbersstageone(\number\b_page_lines_number,\ifcase\c_page_lines_nesting false\else true\fi)}}% \ctxcommand{linenumbersstagetwo(\number\b_page_lines_number,\number\b_page_lines_scratch)}% can move to lua code \egroup} \let\page_lines_make_number_indeed\relax \def\page_lines_make_number#1#2% {\edef\currentlinenumbering{#1}% \ifcase#2\relax \settrue \c_page_lines_fake_number \else \setfalse\c_page_lines_fake_number \fi \c_page_lines_location \executeifdefined{\??linennumberinglocation \linenumberingparameter\c!location}\plusone \relax % left \c_page_lines_alignment\executeifdefined{\??linennumberingalternative\linenumberingparameter\c!align }\plusfive\relax % auto \ifcase\c_page_lines_last_column\relax \settrue \c_page_lines_fake_number \or % one column \ifcase\c_page_lines_location \settrue \c_page_lines_fake_number \let\page_lines_make_number_indeed\page_lines_number_fake_indeed \or \let\page_lines_make_number_indeed\page_lines_number_left \or \let\page_lines_make_number_indeed\page_lines_number_right \or % inner \let\page_lines_make_number_indeed\page_lines_number_inner_indeed \or % outer \let\page_lines_make_number_indeed\page_lines_number_outer_indeed \or % text \let\page_lines_make_number_indeed\page_lines_number_text_indeed \or \let\page_lines_make_number_indeed\page_lines_number_begin_indeed \or \let\page_lines_make_number_indeed\page_lines_number_end_indeed \fi \else\ifcase\c_page_lines_column\relax \settrue \c_page_lines_fake_number \or \let\page_lines_make_number_indeed\page_lines_number_left \ifcase\c_page_lines_location\or \c_page_lines_location\plusone \or \c_page_lines_location\plustwo \else \c_page_lines_location\plusone \or \c_page_lines_location\plusone \or \c_page_lines_location\plusone \or \c_page_lines_location\plusone % todo \or \c_page_lines_location\plusone % todo \fi \else \let\page_lines_make_number_indeed\page_lines_number_right \ifcase\c_page_lines_location\or \c_page_lines_location\plustwo \or \c_page_lines_location\plusone \or \c_page_lines_location\plustwo \or \c_page_lines_location\plustwo \or \c_page_lines_location\plustwo % todo \or \c_page_lines_location\plustwo % todo \fi \fi\fi \page_lines_make_number_indeed{#1}} \let\page_lines_number_fake_indeed\gobblesixarguments % needs checking \def\page_lines_number_text_indeed#1#2#3#4#5#6% beware, one needs so compensate for this in the \hsize {\hbox{\page_lines_number_construct{#1}{2}{#2}{#5}\hskip#3\scaledpoint}} \def\page_lines_number_left_indeed#1#2#3#4#5#6% {\naturalhbox to \zeropoint {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi \llap{\page_lines_number_construct{#1}{2}{#2}{#5}\kern#3\scaledpoint}}} \def\page_lines_number_right_indeed#1#2#3#4#5#6% {\naturalhbox to \zeropoint {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi \rlap{\hskip\dimexpr#4\scaledpoint+#3\scaledpoint\relax\page_lines_number_construct{#1}{1}{#2}{#5}}}} \def\page_lines_number_begin_indeed#1#2#3#4#5#6% {\ifcase\istltdir#6\relax \c_page_lines_location\plusone \expandafter\page_lines_number_left_indeed \else \c_page_lines_location\plustwo \expandafter\page_lines_number_left_indeed \fi{#1}{#2}{#3}{#4}{#5}{#6}} \def\page_lines_number_end_indeed#1#2#3#4#5#6% {\ifcase\istltdir#6\relax \c_page_lines_location\plustwo \expandafter\page_lines_number_left_indeed \else \c_page_lines_location\plusone \expandafter\page_lines_number_left_indeed \fi{#1}{#2}{#3}{#4}{#5}{#6}} \def\page_lines_number_construct#1#2#3#4% tag 1=left|2=right linenumber leftskip {\begingroup \def\currentlinenumbering{#1}% \def\linenumber{#3}% unsafe \doifelse{\linenumberingparameter\c!width}\v!margin {\d_page_lines_width\leftmarginwidth} {\d_page_lines_width\linenumberingparameter\c!width}% \d_page_lines_distance\linenumberingparameter\c!distance\relax \ifcase#2\relax\or\hskip\d_page_lines_distance\fi\relax \ifnum\c_page_lines_location=\plusfive \scratchdimen\dimexpr#4\scaledpoint-\d_page_lines_distance\relax \c_page_lines_location\plusone \else \scratchdimen\zeropoint \fi \ifcase\c_page_lines_alignment \c_page_lines_location\zerocount % middle \or \c_page_lines_location\plusone % left \or \c_page_lines_location\plustwo % right \fi \ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \d_page_lines_width {\ifcase\c_page_lines_location \hss % middle \or % left \or \hss % right \or \doifoddpageelse\relax\hss % inner \or \doifoddpageelse\hss\relax % outer \fi \ifconditional\c_page_lines_fake_number % we need to reserve space \else \uselinenumberingstyleandcolor\c!style\c!color \linenumberingparameter\c!command {\linenumberingparameter\c!left \convertnumber{\linenumberingparameter\c!conversion}{#3}% \linenumberingparameter\c!right}% \fi \ifcase\c_page_lines_location \hss % middle \or \hss % left \or % right \or \doifoddpageelse\hss\relax % inner \or \doifoddpageelse\relax\hss % outer \fi}% \ifcase#2\relax \hskip-\scratchdimen \or \hskip-\scratchdimen \or \hskip\dimexpr\d_page_lines_distance-\scratchdimen\relax \fi \relax \the\everylinenumber \endgroup} % referencing \unexpanded\def\someline [#1]{\page_lines_reference_start{#1}\page_lines_reference_stop{#1}} % was just a def \unexpanded\def\startline[#1]{\page_lines_reference_start{#1}} \unexpanded\def\stopline [#1]{\page_lines_reference_stop {#1}} \def\page_lines_reference_show_start#1% {\ifconditional\tracelinenumbering \setbox\scratchbox\hbox{\llap {\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}% \smashbox\scratchbox \box\scratchbox \fi} \def\page_lines_reference_show_stop#1% {\ifconditional\tracelinenumbering \setbox\scratchbox\hbox{\rlap {\raise.85\strutht\hbox{\rlap{\tt\txx#1}}\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht}}% \smashbox\scratchbox \box\scratchbox \fi} \def\page_lines_reference_start#1{\page_lines_some_reference{#1}{lr:b:#1}{\page_lines_reference_show_start{#1}}\ignorespaces} \def\page_lines_reference_stop #1{\removeunwantedspaces\page_lines_some_reference{#1}{lr:e:#1}{\page_lines_reference_show_stop{#1}}} % eventually we will do this in lua \def\currentreferencelinenumber{\ctxcommand{filterreference("linenumber")}} \let\m_page_lines_from\empty \let\m_page_lines_to \empty \unexpanded\def\doifelsesamelinereference#1#2#3% {\doifreferencefoundelse{lr:b:#1} {\edef\m_page_lines_from{\currentreferencelinenumber}% \doifreferencefoundelse{lr:e:#1} {\edef\m_page_lines_to{\currentreferencelinenumber}% %[\m_page_lines_from,\m_page_lines_to] \ifx\m_page_lines_from\m_page_lines_to#2\else#3\fi} {#2}} {#2}} \unexpanded\def\inline#1[#2]% {\doifelsenothing{#1} {\doifelsesamelinereference{#2} {\in{\leftlabeltext\v!line}{\rightlabeltext\v!line}[lr:b:#2]} {\in{\leftlabeltext\v!lines}{}[lr:b:#2]--\in{}{\rightlabeltext\v!lines}[lr:e:#2]}} {\doifelsesamelinereference{#2} {\in{#1}[lr:b:#2]} {\in{#1}[lr:b:#2]--\in[lr:e:#2]}}} \unexpanded\def\inlinerange[#1]% {\doifelsesamelinereference{#1} {\in[lr:b:#1]} {\in[lr:b:#1]\endash\in[lr:e:#1]}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-00.tex0000644000175000017500000001330411754241457023671 0ustar norbertnorbert%D \module %D [ file=s-pre-00, %D version=1997.07.22, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 0, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 provides some non core functionality that can %D be used in the presentations styles. This module contains %D experimental macros. %D %D The presentation environments are independent of each other. %D Although they have much in common, and in many cases can be %D exchanged, the common components are not collected in this %D file. That way they can serve as examples of style %D definitions. \unprotect \newbox \presentationstack \newcounter \presentationcounter \newdimen \presentationheight \appendtoks\doglobal\newcounter\presentationcounter\to\everyshipout \defineframedtext [presentationshield] \setupframedtexts [presentationshield] [\c!background=\v!color, \c!backgroundcolor=StepColor, \c!offset=\v!overlay, \c!frame=\v!off] \definecolor[StepColor][white] \def\enablepresentationstep% {\let\enablepresentationstep\relax \useJSpreamblenow{presentation}% \setuptexttexts [\vbox to \textheight {\dopresentationstep1\box\presentationstack\vfill}]} \def\presentationstep {\dopresentationstep0} \def\dopresentationstep#1% not ok yet {\global\setbox\presentationstack=\vbox {\ifnum\presentationcounter=0 \global\presentationheight=\!!zeropoint \fi \ifcase#1\relax \scratchdimen=\pagetotal \else \scratchdimen=\textheight \fi \advance\scratchdimen by -\presentationheight \edef\presentationstepheight{\the\scratchdimen} \global\presentationheight=\pagetotal \forgetall \offinterlineskip \dontcomplain \box\presentationstack \doglobal\increment\presentationcounter \scratchcounter=\realpageno \multiply\scratchcounter by 100 \advance\scratchcounter by \presentationcounter \edef\presentationtag{presentation:\the\scratchcounter} \setupfield [presentation] [\c!width=\v!fit,\c!height=\v!fit,\c!offset=\v!overlay, \c!strut=\v!no,\c!frame=\v!off,\c!option=\v!readonly] \definesymbol [\presentationtag] [\presentationshade] \def\presentationshade {\presentationshield [\c!width=\textwidth,\c!height=\presentationstepheight]{}} \definefield[\presentationtag][check][presentation][\presentationtag,\v!none][\presentationtag] \fitfield[\presentationtag]}} \startJSpreamble {presentation} used later var presentation = new Array() ; for (i=1;i<=\lastpage;i++) { presentation[i] = 0 } this.dirty = false ; function NextPresentation (pagenumber) { % ++presentation[pagenumber] ; presentation[pagenumber] = presentation[pagenumber] + 1 ; var dummy = 100*pagenumber + presentation[pagenumber] ; var v = this.getField("presentation:"+dummy) ; if (v) { v.hidden = true } % { v.display = display.hidden } else { ++pagenumber ; if (pagenumber<=\lastpage) { presentation[pagenumber] = presentation[pagenumber] + 1 ; dummy = 100*(pagenumber) + presentation[pagenumber] ; v = this.getField("presentation:"+dummy) ; if (v) { v.hidden = true } % if (v) { v.display = display.hidden } ++this.pageNum } } this.dirty = false } \stopJSpreamble \definereference[NextStep][JS(NextPresentation{\realfolio})] %D \macros %D {presentationstep} %D %D The macro \type {\presentationstep} provides a basic slide %D show functionality. It sort of records pieces of the page %D that will show up stepwise. It can be used like: %D %D \starttyping %D \startitemize %D \item eerste %D \item tweede %D \stopitemize %D %D \presentationstep %D %D \startformula %D ax^2+bx+c %D \stopformula %D %D \presentationstep %D \stoptyping %D %D When the document is opened, the two text fragments are %D covered by a shield. Each page has its own shield stack. The %D logical reference \type {NextStep} can be used to hide the %D shield. %D %D \starttyping %D \setupfootertexts[{\button{Show Up}[NextStep]}] %D \stoptyping %D %D In case of presentation style 2, you can say: %D %D \starttyping %D \definereference[Whatever][JS(NextPresentation{\realfolio})] %D \stoptyping %D %D Depending of the viewer, you need to reset the fields at %D startup: %D %D \starttyping %D \setupinteraction[openaction=ResetForm] %D \stoptyping %D %D Fixed spacing give you the best results: %D %D \starttyping %D \setupwhitespace[fixed] %D \setupblank[fixed] %D \stoptyping %D %D Sometimes you need to set the color of the background, as %D with style 2: %D %D \starttyping %D \definecolor[StepColor][Page] %D \stoptyping %D %D Special effects can be reached with: %D %D \starttyping %D \setupframedtexts %D [presentationshield] %D [background=color,backgroundcolor=red] %D \stoptyping %D %D There is also: %D %D \starttyping %D \autopresentationsteptrue %D \stoptyping %D %D One can enable this feature as \type {step} mode. \newif\ifautopresentationstep \appendtoks \ifautopresentationstep\presentationstep\fi \to \everypar \doifmode{step} {\enablepresentationstep} \doifmode{autostep}{\autopresentationsteptrue\enablepresentationstep} %D When in \type {comment} mode, embedded page comments are %D processed and put below the page. The default space of %D 5cm should be adequate but can of course be changed. \doifmode{comment}{\setuppagecomment[state=start,location=bottom]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-cml.mkii0000644000175000017500000001441211571377075024277 0ustar norbertnorbert% see mathml, == \defineXMLdirective [mathml] \setupMMLappearance % will be rewritten avoiding the mapper \useXMLfilter[map] \unprotect \def\setupCMLappearance[#1]{\dodoubleargument\getparameters[@@CML#1]} \defineXMLdirective [chemml] \setupCMLappearance \defineXMLargument [chem] \doXMLchem \defineXMLargument [ichem] \doXMLichem \defineXMLargument [dchem] \doXMLdchem \unexpanded\def\doXMLchem {\ifhmode\@EA\doXMLichem\else\@EA\doXMLdchem\fi} \unexpanded\def\doXMLichem{\XMLremapdata[cml]{$\rm}{$}} \unexpanded\def\doXMLdchem{\XMLremapdata[cml]{\dostartformula{}\rm}{\dostopformula}} \startXMLmapping [cml] \remapXMLsequence [molecule] [CPA] \doCMLmolecule \remapXMLsequence [ion] [CPA] \doCMLion \remapXMLsequence [atom] [CPA] \doCMLatom \setupCMLappearance [ion] [\c!alternative=\v!a] \let\CMLtopcaption\empty \let\CMLbotcaption\empty \def\someCMLtext#1% {\ifx\CMLtopcaption\empty \setbox0\null \else \setbox0\hbox{\txx\setstrut\strut\ignorespaces\CMLtopcaption\unskip}% \fi \setbox2\hbox{\ignorespaces\strut#1\unskip}% \ifx\CMLbotcaption\empty \setbox4\null \else \setbox4\hbox{\txx\setstrut\strut\ignorespaces\CMLbotcaption\unskip}% \fi \scratchdimen=\wd2\advance\scratchdimen-.5em \ifdim\wd0>\scratchdimen \setbox0\hbox spread .5em{\hss\box0\hss}% \fi \ifdim\wd4>\scratchdimen \setbox4\hbox spread .5em{\hss\box4\hss}% \fi \setbox6=\vbox {\offinterlineskip\halign{\hss##\hss\cr\copy0\cr\copy2\cr\copy4\cr}}% \hbox{\lower\ht4\hbox{\lower\dp2\box6}}} \def\CMLscript#1% {$\scriptscriptstyle\ignorespaces#1\unskip$} \def\doifnotXMLzero#1#2#3% {\ifcase\XMLpar{#1}{#2}{0}\else#3{\XMLpar{#1}{#2}{0}}\fi} \newcounter\currentCMLatom \newcounter\nofCMLatoms \def\doCMLmolecule#1#2% {\resetCMLcaption \processXMLRchild{caption}{#2}% \someCMLtext {\bgroup \newcounter\currentCMLatom \newcounter\nofCMLatoms \getXMLarguments{cml-m}{n="0" #1}% \doifnotXMLzero{cml-m}{n}\firstofoneargument \ignorespaces \processXMLRchild{atom,ion,bond/,singlebond/,doublebond/,triplebond/}{#2}% \unskip \egroup}% \ignorespaces} \def\doCMLion#1#2% {\resetCMLcaption \processXMLRchild{caption}{#2}% \someCMLtext {\bgroup \newcounter\currentCMLatom \newcounter\nofCMLatoms \getXMLarguments{cml-i}{n="0" charge="0" #1}% \doifnotXMLzero{cml-i}{n}\firstofoneargument \doifelse\@@CMLionalternative\v!b {[\ignorespaces \processXMLRchild{atom,bond/,singlebond/,doublebond/,triplebond/}{#2}% \unskip]% \high{\doifnotXMLzero{cml-i}{charge}\CMLscript}} {\countXMLRchild{atom}{\ignorespaces#2\unskip}% \let\nofCMLatoms\nofXMLRchildren \ignorespaces \processXMLRchild{atom,bond/,singlebond/,doublebond/,triplebond/}{#2}% \unskip}% \egroup}% \ignorespaces} \def\doCMLatom#1#2% {\getXMLarguments{cml-a}{n="0" weight="0" protons="0" charge="0" #1}% \increment\currentCMLatom \resetCMLcaption \someCMLtext {\bgroup \lohi {\doifnotXMLzero{cml-a}{protons}\CMLscript} {\doifnotXMLzero{cml-a}{weight}\CMLscript}% \ignorespaces#2\unskip \lohi {\doifnotXMLzero{cml-a}{n}\CMLscript} {\ifnum\nofCMLatoms=\currentCMLatom\relax \doifnotXMLzero{cml-i}{charge}\CMLscript \else \doifnotXMLzero{cml-a}{charge}\CMLscript \fi}% \egroup}% \ignorespaces} \remapXMLsequence [reaction] [CPA] \doCMLreaction \let\someCMLsymbol\gobbleoneargument \let\someCMLarrow \gobblethreearguments \def\doCMLreaction#1#2% {\begingroup \let\someCMLsymbol\dosomeCMLsymbol \let\someCMLarrow \dosomeCMLarrow #2% \endgroup} \remapXMLsequence [plus] [CPA] \doCMLplus \remapXMLsingular [plus] [CPA] \doCMLplus \remapXMLsequence [minus] [CPA] \doCMLminus \remapXMLsingular [minus] [CPA] \doCMLminus \remapXMLsequence [equal] [CPA] \doCMLequal \remapXMLsingular [equal] [CPA] \doCMLequal \def\doCMLplus #1#2{\someCMLsymbol{+}} \def\doCMLminus#1#2{\someCMLsymbol{-}} \def\doCMLequal#1#2{\someCMLsymbol{=}} \def\dosomeCMLsymbol#1% {\quad\mathop{#1}\quad} \remapXMLsequence [gives] [CPA] \doCMLgives \remapXMLsingular [gives] [CPA] \doCMLgives \remapXMLsequence [equilibrium] [CPA] \doCMLequilibrium \remapXMLsingular [equilibrium] [CPA] \doCMLequilibrium \remapXMLsequence [mesomeric] [CPA] \doCMLmesomeric \remapXMLsingular [mesomeric] [CPA] \doCMLmesomeric \def\doCMLgives #1#2{\resetCMLcaption#2\someCMLgives } \def\doCMLequilibrium#1#2{\resetCMLcaption#2\someCMLequilibrium} \def\doCMLmesomeric #1#2{\resetCMLcaption#2\someCMLmesomeric } \def\dosomeCMLarrow#1% {\quad \someCMLtext {$\vcenter{\offinterlineskip\halign{##\cr\hskip3em\cr#1\cr}}$}% \quad} \def\someCMLgives {\someCMLarrow{\rightarrowfill}} \def\someCMLequilibrium {\someCMLarrow{\rightarrowfill\cr\noalign{\nointerlineskip}\leftarrowfill}} \def\someCMLmesomeric {\someCMLarrow{$\leftarrow\hskip-1em$\rightarrowfill}} \remapXMLsequence [cml] [caption] [CPA] \doCMLcaption \let\CMLtopcaption\empty \let\CMLbotcaption\empty \def\dodoCMLcaption#1#2% {\def\CMLbotcaption{#2}% \def\doCMLcaption##1##2% {\def\CMLtopcaption{##2}% \let\doCMLcaption\gobbletwoarguments}} \def\resetCMLcaption {\let\CMLtopcaption\empty \let\CMLbotcaption\empty \let\doCMLcaption\dodoCMLcaption} \resetCMLcaption \remapXMLsingular [bond] [CPA] \doCMLbond \remapXMLsingular [singlebond] [CPA] \doCMLsinglebond \remapXMLsingular [doublebond] [CPA] \doCMLdoublebond \remapXMLsingular [triplebond] [CPA] \doCMLtriplebond \def\doCMLbond#1#2% {\getXMLarguments{cml-b}{n="0" #1}% \ifcase\XMLpar{cml-b}{n}{0}\relax \doCMLsinglebond \or \doCMLdoublebond \or \doCMLtriplebond \fi} \def\someCMLbond {\hrule \!!width \hsize \!!height .1ex} % .4pt \def\dosomeCMLbond#1#2#3% {{\setbox\scratchbox=\hbox{$M$}% \vbox to \ht\scratchbox {\hsize\wd\scratchbox \vskip.1\wd\scratchbox #1\vfill#2\vfill#3% \vskip.1\wd\scratchbox}}} \def\doCMLsinglebond {\dosomeCMLbond\relax\someCMLbond\relax} \def\doCMLdoublebond {\dosomeCMLbond\someCMLbond\relax\someCMLbond} \def\doCMLtriplebond {\dosomeCMLbond\someCMLbond\someCMLbond\someCMLbond} \stopXMLmapping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-69.mkiv0000644000175000017500000002316212130411274024042 0ustar norbertnorbert%D \module %D [ file=s-pre-69, %D version=2010.04.28, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 69, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setuppapersize[S6][S6] \setuppapersize[SM][SM] \usemodule [abr-01,pre-60] \setupinteraction [state=start, contrastcolor=white, color=white, click=no] \setuplayout [location=middle, topspace=60pt, bottomspace=80pt, backspace=80pt, header=0pt, footer=0pt, width=middle, height=middle] \setupcolors [textcolor=white] \setupbodyfont[euler] \definecolor[maincolor] [blue] \definecolor[extracolor][green] % \definecolor[maincolor] [red] % \definecolor[extracolor][blue] \startMPinitializations if unknown MyColor[1] : color MyColor[] ; MyColor[1] := transparent(1,.25,\MPcolor{maincolor}) ; MyColor[2] := transparent(1,.25,\MPcolor{extracolor}) ; picture MySoFar ; MySoFar := nullpicture ; path MyLastOne ; MyLastOne := origin -- cycle ; color MyPageColor ; MyPageColor := MyColor[1] ; path MyLeftSteps, MyRightSteps ; boolean MyPageDone ; MyPageDone := false ; vardef MySmallShape(expr parent) = path p ; p := boundingbox parent ; p := boundingbox parent ; numeric w, h ; w := bbwidth(p) ; h := bbheight(p) ; urcorner p shifted (-uniformdeviate w/4,0) -- lrcorner p shifted (0,uniformdeviate h/4) -- llcorner p shifted (uniformdeviate w/4,0) -- ulcorner p shifted (0,-uniformdeviate h/4) -- cycle enddef ; vardef MyShape(expr parent) = path p ; p := boundingbox parent ; if MyPageDone : MyPageDone := false ; urcorner p shifted (-EmWidth + -uniformdeviate CutSpace/2,0) -- lrcorner p shifted (0,EmWidth + uniformdeviate BottomSpace/2) -- llcorner p shifted (EmWidth + uniformdeviate BackSpace/2,0) -- ulcorner p shifted (0,-EmWidth + -uniformdeviate TopSpace/2) -- cycle else : MyPageDone := true ; urcorner p shifted (0,-EmWidth + -uniformdeviate TopSpace/2) -- lrcorner p shifted (-EmWidth + -uniformdeviate CutSpace/2,0) -- llcorner p shifted (0,EmWidth + uniformdeviate BottomSpace/2) -- ulcorner p shifted (EmWidth + uniformdeviate BackSpace/2,0) -- cycle fi enddef ; vardef MyMakeOne = MyLastOne := MyShape(Page) ; enddef ; vardef MyAddOne = addto MySoFar also image(fill MyLastOne withcolor MyPageColor ; ) ; enddef ; vardef MyDrawOne = fill MyLastOne withcolor black ; fill MyLastOne withcolor MyPageColor ; enddef ; vardef MyDrawPage = draw MySoFar ; enddef ; vardef MySetSteps = path l, r ; numeric s ; path ll[], rr[] ; path t ; l := point 2 of MyLastOne -- point 3 of MyLastOne ; r := point 0 of MyLastOne -- point 1 of MyLastOne ; t := topboundary Field[Text][Text] rightenlarged TextWidth leftenlarged TextWidth ; s := bbheight(Field[Text][Text])/LineHeight + 2 ; t := t shifted (0,-TopSkip) ; for i=1 upto s : ll[i] := t intersectionpoint l ; rr[i] := t intersectionpoint r ; t := t shifted (0,-LineHeight) ; endfor ; MyLeftSteps := for i=1 upto s : ll[i] -- endfor cycle ; MyRightSteps := for i=1 upto s : rr[i] -- endfor cycle ; enddef ; vardef MyDrawText(expr txt) = pair a ; a := (point 1 of MyLastOne) - (point 2 of MyLastOne) ; picture p ; p := txt ; p := p shifted (-EmWidth,EmWidth) shifted ulcorner txt shifted point 1 of MyLastOne ; p := p rotatedaround(lrcorner p, radian * tan(ypart a/xpart a)) ; setbounds p to origin -- cycle ; draw p ; enddef ; vardef MyDrawTitle(expr txt) = % pair a ; a := (point 2 of MyLastOne) - (point 3 of MyLastOne) ; pair a ; a := (point 3 of MyLastOne) - (point 4 of MyLastOne) ; picture p ; if bbheight(txt) > bbwidth(txt) : p := txt ysized(0.8*TextHeight) ; else : p := txt xsized(0.8*TextWidth) ; fi ; numeric d ; d := arclength(point 2 of MyLastOne -- point 3 of MyLastOne) - bbheight(p) ; p := p shifted (BackSpace,-d/2) shifted -ulcorner p shifted point 3 of MyLastOne ; % p := p rotatedaround(ulcorner p, - radian * tan(xpart a/ypart a)) ; % p := p rotatedaround(ulcorner p, radian * tan(ypart a/xpart a)) ; setbounds p to origin -- cycle ; draw p ; enddef ; vardef MyDrawSteps = s := bbheight(Field[Text][Text])/LineHeight + 2 ; for i=1 upto s : draw ll[i] withpen pencircle scaled 1mm ; draw rr[i] withpen pencircle scaled 1mm ; draw ll[i] -- rr[i] ; endfor ; draw Field[Text][Text] ; enddef ; fi ; \stopMPinitializations \startuseMPgraphic{initialization} StartPage ; MySoFar := image(fill Page enlarged 12pt withcolor MyPageColor) ; MyMakeOne ; MySetSteps ; StopPage ; \stopuseMPgraphic \appendtoks \startnointerference \useMPgraphic{initialization} \stopnointerference \to \everystarttext \startuseMPgraphic{page} StartPage ; MyDrawPage ; MyDrawOne ; MySetSteps ; MyDrawTitle(textext("\getvariable{document}{title}")) ; MyDrawText(textext("\getvariable{document}{topic}")) ; % % we have multiple runs when we have text % % MyDrawSteps ; % MyMakeOne ; % MySetSteps ; StopPage ; \stopuseMPgraphic \appendtoks \startnointerference \startMPcode MyAddOne ; MyMakeOne ; MySetSteps ; \stopMPcode \stopnointerference \to \everyshipout \defineoverlay[page][\useMPgraphic{page}] \startuseMPgraphic{symbol} color cc ; cc := MyColor[2] ; path p ; p := MySmallShape(unitsquare scaled (.6*LineHeight)) ; fill p withcolor white ; fill p withcolor cc ; \stopuseMPgraphic \definesymbol[mysymbol][\struttedbox{\useMPgraphic{symbol}}] \setupitemgroup[itemize][1][symbol=mysymbol] \setupbackgrounds [page] [background=page] \startluacode local texdimen = tex.dimen function document.SetParShape() local leftpath = metapost.getclippath("metafun","metafun","clip currentpicture to MyLeftSteps ;") local rightpath = metapost.getclippath("metafun","metafun","clip currentpicture to MyRightSteps ;") local shape = { } for i=1,#leftpath do local left = leftpath[i].x_coord local right = rightpath[i].x_coord local hsize = right - left - (texdimen.backspace + texdimen.cutspace)*number.dimenfactors.bp shape[#shape+1] = string.format("%sbp %sbp",left,hsize) end -- print(table.serialize(shape)) -- context.parshape(string.format("%s %s ",#shape,table.concat(shape," "))) context("\\parshape %s %s ",#shape,table.concat(shape," ")) end \stopluacode \nopenalties \dontcomplain \setupwhitespace[none] \def\StartText#1#2% {\starttext \setvariable{document}{title}{\framed[frame=off,offset=0pt,align=flushleft,foregroundstyle=\tfd\setupinterlinespace]{\begstrut#1\endstrut}} \setvariable{document}{topic}{\tfb#2} \startstandardmakeup % dummy page \stopstandardmakeup \setvariable{document}{title}{} \setvariable{document}{topic}{}} \def\StopText {\stoptext} \def\StartItems#1% {\setvariable{document}{topic}{\tfb#1} \startstandardmakeup[top=,bottom=\vss] \startelement[items][title={#1}]% \ctxlua{document.SetParShape()} \StartSteps} \def\StopItems {\StopSteps \stopelement \stopstandardmakeup} \def\StartItem {\dontleavehmode \startelement[item]% \llap{\symbol[mysymbol]\quad}% graphic \ignorespaces} \def\StopItem {\removeunwantedspaces \nobreak \crlf \stopelement \crlf \FlushStep} \def\ShapeParagraph {\ctxlua{document.SetParShape()}} % no parshape yet \def\StartParagraphs#1% {\setvariable{document}{topic}{\tfb#1} \startstandardmakeup[top=,bottom=\vss] %\ctxlua{document.SetParShape()} \startelement[paragraphs]% \StartSteps} \def\StopParagraphs {\StopSteps \stopelement \stopstandardmakeup} \def\StartParagraph {\startelement[paragraph]} \def\StopParagraph {\par \stopelement \FlushStep} % experiment .. likely to change \setelementexporttag[items] [nature][display] \setelementexporttag[item] [nature][mixed] \setelementexporttag[paragraphs][nature][display] \setelementexporttag[paragraph] [nature][mixed] \continueifinputfile{s-pre-69.mkiv} % finetuning: \StartText{\TEX\ and Reality\vskip2exClashing Mindsets?\vskip1ex}{Bacho\TEX, May 1, 2010} \StartText{Just\\A Demo}{Bacho\TEX, May 1, 2010} \StartItems{Quote from Tufte and Ward} \StartItem \input tufte \StopItem \StartItem \input ward \StopItem \StopItems % \dorecurse{20}{ % \ctxlua{document.SetParShape()} % \input tufte % \page % } \StopText context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-hyphenation.lua0000644000175000017500000001046312161703335027133 0ustar norbertnorbertif not modules then modules = { } end modules ['s-languages-hyphenation'] = { version = 1.001, comment = "companion to s-languages-hyphenation.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.languages = moduledata.languages or { } moduledata.languages.hyphenation = moduledata.languages.hyphenation or { } local a_colormodel = attributes.private('colormodel') local nodecodes = nodes.nodecodes local nodepool = nodes.pool local disc = nodecodes.disc local glyph = nodecodes.glyph local emwidths = fonts.hashes.emwidths local exheights = fonts.hashes.exheights local newkern = nodepool.kern local newrule = nodepool.rule local newglue = nodepool.glue local insert_node_after = node.insert_after local traverse_by_id = node.traverse_id local hyphenate = lang.hyphenate local find_tail = node.slide local remove_node = nodes.remove local tracers = nodes.tracers local colortracers = tracers and tracers.colors local setnodecolor = colortracers.set local function identify(head,marked) local current, prev = head, nil while current do local id = current.id local next = current.next if id == disc then if prev and next.id == glyph then -- catch other usage of disc marked[#marked+1] = prev end elseif id == glyph then prev = current end current = next end end local function strip(head,marked) for i=1,#marked do local prev = marked[i] remove_node(head,prev.next,true) end end local function mark(head,marked,w,h,d,how) for i=1,#marked do local prev = marked[i] local font = prev.font local em = emwidths[font] local ex = exheights[font] local width = w*em local rule = newrule(width,h*ex,d*ex) head, prev = insert_node_after(head,prev,newkern(-width/2)) head, prev = insert_node_after(head,prev,rule) head, prev = insert_node_after(head,prev,newkern(-width/2)) head, prev = insert_node_after(head,prev,newglue(0)) setnodecolor(rule,how,prev[a_colormodel]) end end local langs, tags, noflanguages = { }, { }, 0 local colorbytag = false function moduledata.languages.hyphenation.showhyphens(head) if noflanguages > 0 then local marked = { } for i=1,noflanguages do local m = { } local l = langs[i] marked[i] = m for n in traverse_by_id(glyph,head) do n.lang = l end hyphenate(head,find_tail(head)) identify(head,m) strip(head,m) end for i=noflanguages,1,-1 do local l = noflanguages - i + 1 mark(head,marked[i],1/16,l/2,l/4,"hyphenation:"..(colorbytag and tags[i] or i)) end return head, true else return head, false end end local savedlanguage function moduledata.languages.hyphenation.startcomparepatterns(list) if list and list ~= "" then tags = utilities.parsers.settings_to_array(list) end savedlanguage = tex.language tex.language = 0 noflanguages = #tags for i=1,noflanguages do langs[i] = tags[i] and languages.getnumber(tags[i]) end nodes.tasks.enableaction("processors","moduledata.languages.hyphenation.showhyphens") end function moduledata.languages.hyphenation.stopcomparepatterns() noflanguages = 0 tex.language = savedlanguage or tex.language nodes.tasks.disableaction("processors","moduledata.languages.hyphenation.showhyphens") end function moduledata.languages.hyphenation.showcomparelegend(list) if list and list ~= "" then tags = utilities.parsers.settings_to_array(list) end for i=1,#tags do if i > 1 then context.enspace() end context.color( { "hyphenation:"..(colorbytag and tags[i] or i) }, tags[i]) end end nodes.tasks.appendaction("processors","before","moduledata.languages.hyphenation.showhyphens") nodes.tasks.disableaction("processors","moduledata.languages.hyphenation.showhyphens") context-2013.05.28.20130704/texmf-dist/tex/context/base/java-ini.mkiv0000644000175000017500000000750211754241457024275 0ustar norbertnorbert%D \module %D [ file=java-ini, %D version=1998.01.30, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 JavaScript Macros / Initialization} \registerctxluafile{java-ini}{1.001} \unprotect %D \macros %D {JS*} %D %D Because \JAVASCRIPT's are activated by the user, for %D instance by activating on a button, their support is closely %D related to the referencing mechanism. Integration takes %D place by %D %D \starttyping %D \goto{calculate total}[Sum()] %D \stoptyping %D %D The \type{()} classify this as a script. If they are absent, %D the keyword is treated as a normal reference. %D %D One can pass arguments to such a script by saying: %D %D \starttyping %D \goto{calculate total}[Sum(1.5,2.3)] %D \stoptyping %D \macros %D {startJScode} %D %D A piece of \JAVASCRIPT\ code is defined by saying: %D %D \starttyping %D \startJScode{name} %D name = 4 ; %D \stopJScode %D \stoptyping %D %D This assumes uses no preamble or presumes that the preamble is %D always loaded, the next definition also tells \CONTEXT\ to %D actually include the preamble needed. %D %D \starttyping %D \startJScode{uses} uses {later} %D uses = 6 ; %D \stopJScode %D \stoptyping %D %D \macros %D {startJSpreamble} %D %D One can define insert \JAVASCRIPT\ code at the document level %D by using: %D %D \starttyping %D \startJSpreamble{oeps} %D oeps = 1 ; %D \stopJSpreamble %D \stoptyping %D %D which is the same as: %D %D \starttyping %D \startJSpreamble{now} used now %D now = 2 ; %D \stopJSpreamble %D \stoptyping %D %D while the next definition is only included when actually %D used. %D %D \starttyping %D \startJSpreamble{later} used later %D later = 3 ; %D \stopJSpreamble %D \stoptyping %D %D This command may be used more that once, but always before %D the first page is shipped out. %D %D \macros %D {setJSpreamble, addtoJSpreamble} %D %D In addition to the previous preamble definitions, we can %D set a preamble \quote {in||line} and add tokens to a %D preamble. %D %D \macros %D {useJSpreamblenow} %D %D This macro can be used to force inclusion of postponed %D \JAVASCRIPT\ preambles. \unexpanded\def\startJScode {\begingroup \obeylualines \obeyluatokens \def\u{\letterbackslash u}% \java_start_code} \def\java_start_code#1\stopJScode {\normalexpanded{\endgroup\ctxcommand{storejavascriptcode(\!!bs#1\!!es)}}} \let\stopJScode\relax \unexpanded\def\startJSpreamble {\begingroup \obeylualines \obeyluatokens \def\u{\letterbackslash u}% \java_start_preamble} \def\java_start_preamble#1\stopJSpreamble {\normalexpanded{\endgroup\ctxcommand{storejavascriptpreamble(\!!bs#1\!!es)}}} \let\stopJSpreamble\relax \unexpanded\def\setJSpreamble #1#2{\ctxcommand{storejavascriptpreamble("#1",\!!bs#2\!!es)}} \unexpanded\def\addtoJSpreamble#1#2{\ctxcommand{addtojavascriptpreamble("#1",\!!bs#2\!!es)}} %D \macros %D {useJSscripts} %D %D In due time, users will build their collections of scripts, %D which can be used (loaded) when applicable. Although not all %D public, we will provide some general purpose scripts, %D collected in files with names like \type{java-...}. One can %D load these scripts with \type{\useJSscripts}, like: %D %D \starttyping %D \useJSscripts[fld] %D \stoptyping %D %D The not so complicated implementation of this macro is: \def\useJSscripts {\dodoubleempty\java_use_scripts} \def\java_use_scripts[#1][#2]% {\ctxcommand{usejavascriptscripts(\!!bs#1\!!es)}% two steps as this one calls tex code \ctxcommand{usejavascriptpreamble("#2")}} % so this one comes later \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-dir.lua0000644000175000017500000001436512130411274024101 0ustar norbertnorbertif not modules then modules = { } end modules ['node-dir'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Taco Hoekwater and Hans Hagen", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[

In the process of cleaning up the lua variant of the parbuilder we ran into a couple of functions (translated c macros) that were somewhat inefficient. More convenient is to use hashes although at the c-end still macros are used. In the process directions.h was adapted and now has the mappings as comments. This lua file is based on that file. ]]-- local allocate = utilities.storage.allocate local nodes = nodes nodes.is_mirrored = allocate { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, } nodes.is_rotated = allocate { -- TLT = false, -- TRT = false, -- LTL = false, RTT = true, ["+RTT"] = true, } nodes.textdir_is_parallel = allocate { TLT = { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, TRT= { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, LTL = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, RTT = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, } } nodes.pardir_is_parallel = allocate { TLT = { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, TRT = { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, LTL = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, RTT = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, } nodes.pardir_is_opposite = allocate { TLT = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, TRT = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, LTL = { -- TLT = false, -- TRT = false, -- LTL = false, RTT = true, ["+RTT"] = true, }, RTT = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, -- RTT = false, }, } nodes.textdir_is_opposite = allocate { TLT = { -- TLT = false, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, TRT= { TLT = true, ["+TLT"] = true, -- TRT = false, -- LTL = false, -- RTT = false, }, LTL = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, RTT = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, } nodes.glyphdir_is_opposite = allocate { TLT = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, TRT= { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, LTL = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, RTT = { -- TLT = false, -- TRT = false, -- LTL = false, -- RTT = false, }, } nodes.pardir_is_equal = allocate { TLT = { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, TRT= { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, LTL= { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, -- RTT = false, }, RTT= { -- TLT = false, -- TRT = false, -- LTL = false, RTT = true, ["+RTT"] = true, }, } nodes.textdir_is_equal = allocate { TLT = { TLT = true, ["+TLT"] = true, -- TRT = false, -- LTL = false, -- RTT = false, }, TRT= { -- TLT = false, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, LTL = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, RTT = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, } nodes.glyphdir_is_equal = allocate { TLT = { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, RTT = true, ["+RTT"] = true, }, TRT= { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, RTT = true, ["+RTT"] = true, }, LTL = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, -- RTT = false, }, RTT = { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, -- LTL = false, RTT = true, ["+RTT"] = true, }, } nodes.partextdir_is_equal = allocate { TLT = { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, TRT= { -- TLT = false, -- TRT = false, LTL = true, ["+LTL"] = true, RTT = true, ["+RTT"] = true, }, LTL = { TLT = true, ["+TLT"] = true, -- TRT = false, -- LTL = false, -- RTT = false, }, RTT = { -- TLT = false, TRT = true, ["+TRT"] = true, -- LTL = false, -- RTT = false, }, } nodes.textdir_is_is = allocate { TLT = true, ["+TLT"] = true, -- TRT = false, -- LTL = false, -- RTT = false, } nodes.glyphdir_is_orthogonal = allocate { TLT = true, ["+TLT"] = true, TRT = true, ["+TRT"] = true, LTL = true, ["+LTL"] = true, -- RTT = false } nodes.dir_is_pop = allocate { ["-TRT"] = true, ["-TLT"] = true, ["-LTL"] = true, ["-RTT"] = true, } nodes.dir_negation = allocate { ["-TRT"] = "+TRT", ["-TLT"] = "+TLT", ["-LTL"] = "+LTL", ["-RTT"] = "+RTT", ["+TRT"] = "-TRT", ["+TLT"] = "-TLT", ["+LTL"] = "-LTL", ["+RTT"] = "-RTT", } context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-nte.mkiv0000644000175000017500000000607212130411274024267 0ustar norbertnorbert%D \module %D [ file=core-nte, %D version=2009.03.08, %D title=\CONTEXT\ Table Macros, %D subtitle=Natural Tables Extensions, %D author=Hans Hagen \& Wolfgang Schuster, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Module / Natural Tables Extensions} \unprotect %D This module is suggested by Wolfgang Schuster who also prototyped %D it and came up with the rationale: %D %D This module provides an easy way to use natural in a similiar %D way as the older table module (based on the \TABLE\ macros) and %D the newer tabulate module. %D %D You can see the advantage in the following table, once created %D with the new macros and once with the normal macros provided %D with the natural table module. %D %D Let us start with the original macros: %D %D \startbuffer %D \bTABLE %D \bTR %D \bTD Text 1 \eTD %D \bTD Text 2 \eTD %D \eTR %D \bTR %D \bTD Text 3 \eTD %D \bTD Text 4 \eTD %D \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Watch how the new macros use less code: %D %D \startbuffer %D \startTABLE %D \NC Text 1 \NC Text 2 \NC\NR %D \NC Text 3 \NC Text 4 \NC\NR %D \stopTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D The actual code differs from the prototype that it does not need %D to collect whole rows and parse them but looks ahead instead. \newconditional\c_tabl_nte_in_nc \unexpanded\def\startTABLE {\dosingleempty\tabl_nte_start} \def\tabl_nte_start[#1]% {\bgroup \bTABLE[#1]% \let\NC\tabl_nte_start_nc \let\NR\tabl_nte_start_nr \let\bTR\relax \let\bTD\relax \let\bTH\relax \let\bTN\relax} \unexpanded\def\stopTABLE {\eTABLE \egroup} \unexpanded\def\tabl_nte_start_nr {\eTR \setfalse\c_tabl_nte_in_nc} \unexpanded\def\tabl_nte_start_nc {\futurelet\next\tabl_nte_start_nc_indeed} \def\tabl_nte_start_nc_indeed {\ifx\next\tabl_nte_start_nr \else \expandafter\tabl_nte_start_nc_finish \fi} \def\tabl_nte_start_nc_finish#1\NC {\ifconditional\c_tabl_nte_in_nc \else \settrue\c_tabl_nte_in_nc \dobTR[]% \fi \dobTD#1\eTD\NC} %D The related structure commands are also available: \unexpanded\def\startTABLEhead{\dosingleempty\tabl_nte_start_head} \let\stopTABLEhead\relax \unexpanded\def\startTABLEnext{\dosingleempty\tabl_nte_start_next} \let\stopTABLEnext\relax \unexpanded\def\startTABLEbody{\dosingleempty\tabl_nte_start_body} \let\stopTABLEbody\relax \unexpanded\def\startTABLEfoot{\dosingleempty\tabl_nte_start_foot} \let\stopTABLEfoot\relax \def\tabl_nte_start_head[#1]#2\stopTABLEhead{\appendtoks\doTABLEsection[#1]{#2}\to\TBLhead} \def\tabl_nte_start_next[#1]#2\stopTABLEnext{\appendtoks\doTABLEsection[#1]{#2}\to\TBLnext} \def\tabl_nte_start_body[#1]#2\stopTABLEbody{\appendtoks\doTABLEsection[#1]{#2}\to\TBLbody} \def\tabl_nte_start_foot[#1]#2\stopTABLEfoot{\appendtoks\doTABLEsection[#1]{#2}\to\TBLfoot} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-cow.mkiv0000644000175000017500000000645412161703335025125 0ustar norbertnorbert%D \module %D [ file=type-cow, %D version=2006.06.23, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Cow Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The cow fonts are a project of Duane Bibby, Hans Hagen and Taco %D Hoekwater. \starttypescriptcollection[cow] \starttypescript [math,serif] [cow,sheep] \setups[font:fallback:serif] % \usemathcollection[cow] \loadmapfile[koeieletters.map] \definefontsynonym [Serif] [Cows] \definefontsynonym [SerifContour] [CowsContour] \definefontsynonym [SerifLogo] [CowsLogo] \definefontsynonym [SerifLogoContour][CowsLogoContour] \definefontsynonym [MathRoman] [CowsMathRoman] \definefontsynonym [MathItalic] [CowsMathItalic] \definefontsynonym [MathSymbol] [CowsMathSymbol] \definefontsynonym [MathExtension] [CowsMathExtensions] \stoptypescript \starttypescript [math,serif] [sheep] \setups[font:fallback:serif] % \usemathcollection[cow] \loadmapfile[koeieletters.map] \definefontsynonym [Serif] [Sheep] \definefontsynonym [SerifContour] [SheepContour] \definefontsynonym [SerifLogo] [SheepLogo] \definefontsynonym [SerifLogoContour][SheepLogoContour] \definefontsynonym [MathRoman] [SheepMathRoman] \definefontsynonym [MathItalic] [SheepMathItalic] \definefontsynonym [MathSymbol] [SheepMathSymbol] \definefontsynonym [MathExtension] [SheepMathExtensions] \stoptypescript \starttypescript [all] [cow,sheep] \definefontsynonym [Cows] [koeielett] \definefontsynonym [CowsContour] [koeielett-contour] \definefontsynonym [CowsLogo] [koeielogos] \definefontsynonym [CowsLogoContour] [koeielogos-contour] \definefontsynonym [CowsMathRoman] [koeielett] \definefontsynonym [CowsMathItalic] [koeieletter-mi] \definefontsynonym [CowsMathSymbol] [koeieletter-sy] \definefontsynonym [CowsMathExtensions][koeieletter-ex] \stoptypescript \starttypescript [all] [sheep] \definefontsynonym [Sheep] [koeielett] \definefontsynonym [SheepContour] [koeielett-contour] \definefontsynonym [SheepLogo] [koeielogos] \definefontsynonym [SheepLogoContour] [koeielogos-contour] \definefontsynonym [SheepMathRoman] [koeielettx] \definefontsynonym [SheepMathItalic] [koeieletter-mi] \definefontsynonym [SheepMathSymbol] [koeieletter-syx] \definefontsynonym [SheepMathExtensions][koeieletter-ex] \stoptypescript \starttypescript [cow] \definetypeface [cow][rm][serif][cow] [default] \definetypeface [cow][ss][serif][cow] [default] \definetypeface [cow][mm][math] [cow] [default] \definetypeface [cow][tt][mono] [modern][default][rscale=0.85] \stoptypescript \starttypescript [sheep] \definetypeface [sheep][rm][serif][sheep] [default] \definetypeface [sheep][ss][serif][sheep] [default] \definetypeface [sheep][mm][math] [sheep] [default] \definetypeface [sheep][tt][mono] [modern][default][rscale=0.85] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-map-10.mkiv0000644000175000017500000002654012134352503024021 0ustar norbertnorbert%D \module %D [file=s-map-10.mkiv, %D version=2012.06.06, %D title=\CONTEXT\ Style File, %D subtitle=\MAPS\ journal style, %D author={Hans Hagen, Taco Hoekwater and Siep Kroonenberg}, %D date=\currentdate, %D copyright=NTG/MAPS] % This module implements the MAPS style for use with the Context % macro package. The original MAPS layout was designed and % implemented in LaTeX by Taco Hoekwater and Siep Kroonenberg. % - three layouts: % 1. two columns % 2. one column, with wide outer margins (option onecolumn) % 3. one column, with wide left margin (option asym) % - font sizes deviate from TeX's usual geometric progression % - use of sans-serif for headers and various details % - option realfonts uses Linux Libertine, Euler Math and Inconsolata. % This is used for final typesetting. % The default font setup, intended for authors, uses Computer % Modern Math instead of Euler Math (which is still in beta), % and LM Mono instead of Inconsolata. % A mode nosubsub defines only two levels of sectioning. If you % don't need more and use the two-column layout, then this option % will probably improve the looks of your paper. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif\ifMapsInColumns \doifmode{asym}{\enablemode[onecolumn]} % implies onecolumn \doifnotmode{onecolumn}{\MapsInColumnstrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% fonts %%%%%%%%% first, font sizes \definebodyfontenvironment [7pt][% LaTeX: scriptsize interlinespace=8pt, big=8pt, small=6pt% ] \definebodyfontenvironment [8pt][% LaTeX: footnotesize interlinespace=9pt, big=9pt, small=7pt, x=6pt% ] \definebodyfontenvironment [9pt][% LaTeX: small interlinespace=10pt, big=10pt, small=8pt,% x=7pt,% script=6pt% ] \definebodyfontenvironment [10pt][% LaTeX: normalsize interlinespace=11pt, big=11pt, a=11pt, small=9pt,% x=8pt,% script=7pt% ] \definebodyfontenvironment [11pt][% LaTeX: large interlinespace=11pt, big=11pt, small=10pt,% x=9pt,% script=8pt% ] \definebodyfontenvironment [14pt][% interlinespace=14pt, big=18pt, small=11pt, x=10pt% ] \definebodyfontenvironment [18pt][% interlinespace=18pt, big=24pt, small=14pt, x=10pt% ] \definebodyfontenvironment [24pt][% interlinespace=24pt, big=24pt, small=18pt, x=11pt% ] %%% font families \starttypescript [maps] \definetypeface [maps] [rm] [serif] [modern] [default] [rscale=0.95] \definetypeface [maps] [mm] [math] [modern] [latin-modern] \definetypeface [maps] [tt] [mono] [modern] [default] [rscale=0.90] \definetypeface [maps] [ss] [sans] [modern] [default] [rscale=0.95] \stoptypescript \startmode[realfonts] \usetypescriptfile[type-libertine] \usetypescriptfile[type-inconsolata] \starttypescript [maps] \definetypeface [maps] [rm] [serif] [libertine] [default] \definetypeface [maps] [mm] [math] [euler] [default] [rscale=0.9] \definetypeface [maps] [tt] [mono] [inconsolata] [default] [rscale=0.92] \definetypeface [maps] [ss] [sans] [modern] [default] [rscale=0.95] \stoptypescript \stopmode \setupbodyfont[maps,10pt,rm] % activate protruding \setupinterlinespace[line=11pt] \setupfontsynonym[handling=pure] \setupalign[hanging] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% additional general typographic details \setupindenting [yes,next,11pt] % indenting after enumerations etc. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% 3 versions of layout with matching headers \definepapersize [maps] [width=21cm,height=26.5cm] \setuppapersize [maps][maps] \setuplayout[ [topspace=40pt, height=688pt, header=33pt, margin=106pt, leftmargindistance=11pt, rightmargindistance=11pt] \setupblank[5.5pt] \setuppagenumbering [location=] \definetyping [widetyping] \setupheader [style=\ss] \setupfooter [style=\ss] \def\AuHead{\MapsRunningAuthor} \def\TiHead{\ifnum\pageno=\MapsPage \relax \MapsRunningAuthor \else \MapsRunningTitle\fi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% sectioning \setupheads[sectionnumber=no, align=right] \def\hfonti{\ssbfa} \def\hfontii{\ssbf} \def\hfontiii{\rm\it} \doifmodeelse{nosubsub}{% \setuphead [section][% style=\hfontii, before={\blank[line]}, after={}% ] \setuphead [subsection][% style=\hfontiii, alternative=text, distance=6pt, before={\blank[halfline]}% ]}{% \setuphead [section][% style=\hfonti, before={\blank[line]}, after={\blank[halfline]}% ] \setuphead [subsection][% style=\hfontii, before={\blank[halfline]}, after={}% ] \setuphead [subsubsection][% style=\hfontiii, distance=6pt, alternative=text, before={\blank[halfline]}% ]} \doifmodeelse{nosubsub}{% \setuphead [subject][% style=\hfontii, before={\blank[halfline]}, after={}% ] \setuphead [subsubject][% style=\hfontiii, alternative=text, before={\blank[halfline]}% ]}{% \setuphead [subject][% style=\hfonti, before={\blank}, after={\blank[halfline]}% ] \setuphead [subsubject][% style=\hfontii, before={\blank[halfline]}, after={}% ] \setuphead [subsubsubject][% style=\hfontiii, alternative=text, before={\blank[halfline]}% ]} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% floats \setupfloats [location=center, before={\ss}] \setupcaptions [headstyle={\ssbf},style={\ssx}, suffix=.,distance=6pt, inbetween={\blank[halfline]}] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% various document elements \definesymbol [1][\getnamedglyphdirect{file:stmary10}{boxempty}] \setupitemize[1][packed] \setupitemize [each][% indentnext=no, align=right, width=1em, distance=0pt% ] % an outer form of itemize that does not indent % the paragraph. \definecomplexorsimpleempty\startouteritemize \def\complexstartouteritemize[#1]{\begingroup \startitemize[width=1sp,#1] \let\doitem\item \def\item{\doitem[]\hbox{}\kern12pt\rightskip=0pt}% } \def\stopouteritemize{\stopitemize\endgroup} \setupenumerations [indentnext=no] \setupdescriptions [indentnext=no] \unexpanded\def\smalltyping{% \switchtobodyfont[tt]% \parindent=0pt } % typing: % - prettyverbatim is NOT the default % - smaller size \unexpanded\def \XeTeX{X\lower.5ex\hbox{\kern-.1em\mirror{E}}\kern-.1667em\TeX} \setuptyping [% style={\smalltyping}, option=none, indentnext=no% ] \def\footnum#1{#1.} \setupnotation [footnote] [alternative=serried, before=, after=, location=none, width=\textwidth, before={\blank}, numbercommand=, command=\footnum, distance=0.5em] \setuptabulate [before=\blank, inner=\ss, after=\blank] \def\startIntroEntry#1% {\startlinecorrection \bgroup \setupalign[right] \setuptolerance[verytolerant] \setupindenting[no] \noindent \switchtobodyfont[9pt]% \setuplocalinterlinespace[line=10pt]% %\hyphenpenalty10000 \parfillskip 0pt plus 1fill \rightskip6pt plus 1fill \ss \bgroup\bf #1\par\egroup \ignorespaces } \def\stopIntroEntry {\par\egroup \stoplinecorrection \blank[line] } \def\defineIntroEntry[#1][#2][#3]% {\setvalue{start#1}{\startIntroEntry{#2}}% \setvalue {stop#1}{\stopIntroEntry#3}} \defineIntroEntry[Keywords][Keywords][] \defineIntroEntry[Abstract][Abstract][] % article parameters (other fields and defaults) \def\MapsBibData[#1]% {\getparameters [Maps] [SubTitle=, RunningAuthor=, RunningTitle=, Email=, Address=, Page=1, Title=, Author=, Period=, Number=, Year=, #1]% \doifnothing{\MapsPeriod}{% \ifnum \normalmonth<6 \gdef\MapsPeriod{VOORJAAR}\else \gdef\MapsPeriod{NAJAAR}\fi} \doifinstringelse{oorjaar}{\MapsPeriod}{\gdef\MapsPeriod{VOORJAAR}}{}% \doifinstringelse{pring}{\MapsPeriod}{\gdef\MapsPeriod{VOORJAAR}}{}% \doifinstringelse{ajaar}{\MapsPeriod}{\gdef\MapsPeriod{NAJAAR}}{}% \doifinstringelse{utumn}{\MapsPeriod}{\gdef\MapsPeriod{NAJAAR}}{}% \doifnothing{\MapsYear}{\gdef\MapsYear{\the\year}}% \doifnothing{\MapsNumber}{% \ifnum \normalmonth<6 \xdef\MapsNumber{\the\numexpr (\the\year-1990)*2\relax}% \else \xdef\MapsNumber{\the\numexpr (\the\year-1990)*2+1\relax}% \fi }% \doifnothing\MapsRunningAuthor {\global\let\MapsRunningAuthor\MapsAuthor}% \doifnothing\MapsRunningTitle {\global\let\MapsRunningTitle\MapsTitle}}% \def\dostartArticle[#1]{% \MapsBibData[#1] \pageno=\MapsPage \setupuserpagenumber[start=\MapsPage] \startbaselinecorrection \bgroup \hsize = 457pt \let\\\crlf \blank[35pt,force] \switchtobodyfont[24pt] \setupalign[right] {\noindent\bf\MapsTitle\par} \ifx\MapsSubTitle\empty \blank[30pt] \else \bgroup \blank[12pt] \switchtobodyfont[18pt]\noindent \it \advance \rightskip 0pt plus 2em \MapsSubTitle\par \egroup \blank[30pt] \fi \egroup \setupalign[width] \switchtobodyfont[rm,10pt] \stopbaselinecorrection \ifMapsInColumns \startcolumns\hyphenpenalty1000 \else \clubpenalty10000 \widowpenalty10000 \fi } \def\startArticle{\dosingleempty\dostartArticle} \def\signArticle{% \blank\let\\\crlf \noindent\switchtobodyfont[ss,9pt]% \MapsAuthor \doifsomething{\MapsAddress}{\\\MapsAddress}% \doifsomething{\MapsEmail}{\\\MapsEmail}% \switchtobodyfont[10pt]% \def\signArticle{}% } \def\stopArticle{% \par\signArticle \ifMapsInColumns \stopcolumns \fi \page } \installpagebreakmethod{last}{} %%% `logos' %%%%%%%%%%%%%%%%%%%%%%%%%% \unexpanded\def\LaTeX % requested by erik frambach {{\setbox\scratchbox\hbox{L}% \scratchdimen\ht\scratchbox \setbox\scratchbox\hbox{\switchtobodyfont[script]A}% L\kern-.55\wd\scratchbox \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}% \kern-.2\wd\scratchbox\TeX}} \def\CONTEXT{Con{\TeX}t} \def\ConTeXt{Con{\TeX}t} \def\METAFONT{Metafont} \def\METAPOST{MetaPost} \def\POSTSCRIPT{PostScript} \def\acro#1{{\switchtobodyfont[9pt]#1}} %%%%%%%%%%% \doifmodeelse{onecolumn}{% \setuplayout[width=340pt] \doifmodeelse{asym}{% one col, asymmetric \setuplayout[backspace=187.3pt]% \setuptyping [widetyping][oddmargin=-117pt] \setuppagenumbering [alternative={singlesided,doublesided}] \setupheadertexts [{\hbox{}\hskip-117pt\TiHead}] [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-30pt\hbox{}}] [{\hbox{}\hskip-147pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}] [\AuHead] \setupfootertexts }{% one col, symmetric \setuplayout[backspace=70.3pt] \setuppagenumbering [alternative=doublesided] \setuptyping[blank=halfline] \setupheadertexts [\TiHead] [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-147pt\hbox{}}] [{\hbox{}\hskip-147pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}] [\AuHead] \setupfootertexts }}{% two col \setuplayout[width=457pt] \setupcolumns[n=2,tolerance=verytolerant,distance=11pt] \setuplayout[backspace=70.3pt,grid=yes] \setuppagenumbering [alternative=doublesided] \setuptyping[blank=halfline] \setupheadertexts [\TiHead] [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-30pt\hbox{}}] [{\hbox{}\hskip-30pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}] [\AuHead] \setupfootertexts } \def\fulltextwidth{457pt} \def\startdescription {\blank \bgroup \def\sym##1{\par\noindent\hbox{\bf\kern -16pt ##1}\hskip 12pt} \startnarrower[left] } \def\stopdescription {\par \stopnarrower \egroup \blank \noindentation } \frenchspacing \setuptolerance[tolerant] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-fio.lua0000644000175000017500000001265312130411274024116 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-fio'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local concat = table.concat local sequenced = table.sequenced texconfig.kpse_init = false texconfig.shell_escape = 't' texconfig.max_in_open = 127 texconfig.max_print_line = 100000 if not resolvers.instance then resolvers.reset() resolvers.instance.validfile = resolvers.validctxfile -- we now load the file database as we might need files other than -- tex and lua file on the given path -- trackers.enable("resolvers.*") resolvers.load() -- trackers.disable("resolvers.*") local findbinfile, loadbinfile = resolvers.findbinfile, resolvers.loadbinfile local findtexfile, opentexfile = resolvers.findtexfile, resolvers.opentexfile if callback then local register = callbacks.register -- register('process_jobname' , function(name) return name end, true) register('find_read_file' , function(id,name) return findtexfile(name) end, true) register('open_read_file' , function( name) return opentexfile(name) end, true) register('find_data_file' , function(name) return findbinfile(name,"tex") end, true) register('find_enc_file' , function(name) return findbinfile(name,"enc") end, true) register('find_font_file' , function(name) return findbinfile(name,"tfm") end, true) register('find_format_file' , function(name) return findbinfile(name,"fmt") end, true) register('find_image_file' , function(name) return findbinfile(name,"tex") end, true) register('find_map_file' , function(name) return findbinfile(name,"map") end, true) register('find_opentype_file' , function(name) return findbinfile(name,"otf") end, true) register('find_output_file' , function(name) return name end, true) register('find_pk_file' , function(name) return findbinfile(name,"pk") end, true) register('find_sfd_file' , function(name) return findbinfile(name,"sfd") end, true) register('find_truetype_file' , function(name) return findbinfile(name,"ttf") end, true) register('find_type1_file' , function(name) return findbinfile(name,"pfb") end, true) register('find_vf_file' , function(name) return findbinfile(name,"vf") end, true) register('find_cidmap_file' , function(name) return findbinfile(name,"cidmap") end, true) register('read_data_file' , function(file) return loadbinfile(file,"tex") end, true) register('read_enc_file' , function(file) return loadbinfile(file,"enc") end, true) register('read_font_file' , function(file) return loadbinfile(file,"tfm") end, true) -- format -- image register('read_map_file' , function(file) return loadbinfile(file,"map") end, true) -- output register('read_pk_file' , function(file) return loadbinfile(file,"pk") end, true) -- 600dpi/manfnt.720pk register('read_sfd_file' , function(file) return loadbinfile(file,"sfd") end, true) register('read_vf_file' , function(file) return loadbinfile(file,"vf" ) end, true) register('find_font_file' , function(name) return findbinfile(name,"ofm") end, true) register('find_vf_file' , function(name) return findbinfile(name,"ovf") end, true) register('read_font_file' , function(file) return loadbinfile(file,"ofm") end, true) register('read_vf_file' , function(file) return loadbinfile(file,"ovf") end, true) -- register('read_opentype_file' , function(file) return loadbinfile(file,"otf") end, true) -- register('read_truetype_file' , function(file) return loadbinfile(file,"ttf") end, true) -- register('read_type1_file' , function(file) return loadbinfile(file,"pfb") end, true) -- register('read_cidmap_file' , function(file) return loadbinfile(file,"cidmap") end, true) register('find_write_file' , function(id,name) return name end, true) register('find_format_file' , function(name) return name end, true) end end local report_system = logs.reporter("system","files") local report_files = logs.reporter("used files") luatex.registerstopactions(function() local foundintrees = resolvers.instance.foundintrees if #foundintrees > 0 then logs.pushtarget("logfile") logs.newline() report_system("start used files") logs.newline() for i=1,#foundintrees do report_files("%4i: % T",i,foundintrees[i]) end logs.newline() report_system("stop used files") logs.newline() logs.poptarget() end end) statistics.register("resource resolver", function() local scandata = resolvers.scandata() return format("loadtime %s seconds, %s scans with scantime %s seconds, %s shared scans, %s found files, scanned paths: %s", resolvers.loadtime(), scandata.n, scandata.time, scandata.shared, #resolvers.instance.foundintrees, #scandata.paths > 0 and concat(scandata.paths," ") or "" ) end) context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-missing.lua0000644000175000017500000000661712161703335025447 0ustar norbertnorbertif not modules then modules = { } end modules ['s-fonts-missing'] = { version = 1.001, comment = "companion to s-fonts-missing.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.missing = moduledata.fonts.missing or { } local function legend(id) local c = fonts.hashes.identifiers[id] local privates = c.properties.privates if privates then local categories = table.swapped(fonts.loggers.category_to_placeholder) -- context.starttabulate { "|l|c|c|l|" } context.starttabulate { "|l|c|l|" } context.HL() context.NC() context.bold("name") context.NC() context.bold("symbol") context.NC() -- context.bold("node") -- context.NC() context.bold("category") context.NC() context.NR() context.HL() for k, v in table.sortedhash(privates) do local tag = characters.categorytags[categories[k]] if tag and tag ~= "" then context.NC() context(k) context.NC() context.dontleavehmode() context.char(v) context.NC() -- context.dontleavehmode() -- commands.getprivatechar(k) -- context.NC() context(string.lower(tag)) context.NC() context.NR() end end context.HL() context.stoptabulate() end end function moduledata.fonts.missing.showlegend(specification) specification = interfaces.checkedspecification(specification) context.begingroup() context.definedfont { "Mono*missing" } -- otherwise no privates added context(function() legend(specification.id or font.current()) end) context.endgroup() end local function missings() local collected = fonts.checkers.getmissing() for filename, list in table.sortedhash(collected) do if #list > 0 then context.starttabulate { "|l|l|" } context.NC() context.bold("filename") context.NC() context(file.basename(filename)) context.NC() context.NR() context.NC() context.bold("missing") context.NC() context(#list) context.NC() context.NR() context.stoptabulate() context.starttabulate { "|l|c|l|" } for i=1,#list do local u = list[i] context.NC() context("%U",u) context.NC() context.char(u) context.NC() context(characters.data[u].description) context.NC() context.NR() end context.stoptabulate() end end end function moduledata.fonts.missing.showcharacters(specification) context.begingroup() context.definedfont { "Mono*missing" } -- otherwise no privates added context(function() missings() end) context.endgroup() end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-frequencies.lua0000644000175000017500000000226312161703335027115 0ustar norbertnorbertif not modules then modules = { } end modules ['s-languages-frequencies'] = { version = 1.001, comment = "companion to s-languages-frequencies.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.languages = moduledata.languages or { } moduledata.languages.frequencies = moduledata.languages.frequencies or { } function moduledata.languages.frequencies.showlist(specification) specification = interfaces.checkedspecification(specification) local t = languages.frequencies.getdata(specification.language or languages.current()) context.starttabulate { "|lT|cw(2em)|r|" } context.NC() context.formatted.rlap("%s: %p",t.language,languages.frequencies.averagecharwidth(t.language)) context.NC() context.NC() context.NR() context.HL() for k, v in table.sortedhash(t.frequencies) do context.NC() context("%U",k) context.NC() context("%c",k) context.NC() context("%0.3f",v) context.NC() context.NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ott.lua0000644000175000017500000010220312161703335024145 0ustar norbertnorbertif not modules then modules = { } end modules ['font-ott'] = { version = 1.001, comment = "companion to font-otf.lua (tables)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", -- dataonly = true, } local type, next, tonumber, tostring, rawget, rawset = type, next, tonumber, tostring, rawget, rawset local gsub, lower, format, match = string.gsub, string.lower, string.format, string.match local is_boolean = string.is_boolean local setmetatableindex = table.setmetatableindex local setmetatablenewindex = table.setmetatablenewindex local allocate = utilities.storage.allocate local fonts = fonts local otf = fonts.handlers.otf local otffeatures = otf.features local registerotffeature = otffeatures.register local tables = otf.tables or { } otf.tables = tables local statistics = otf.statistics or { } otf.statistics = statistics local scripts = allocate { ['arab'] = 'arabic', ['armn'] = 'armenian', ['bali'] = 'balinese', ['beng'] = 'bengali', ['bopo'] = 'bopomofo', ['brai'] = 'braille', ['bugi'] = 'buginese', ['buhd'] = 'buhid', ['byzm'] = 'byzantine music', ['cans'] = 'canadian syllabics', ['cher'] = 'cherokee', ['copt'] = 'coptic', ['cprt'] = 'cypriot syllabary', ['cyrl'] = 'cyrillic', ['deva'] = 'devanagari', ['dsrt'] = 'deseret', ['ethi'] = 'ethiopic', ['geor'] = 'georgian', ['glag'] = 'glagolitic', ['goth'] = 'gothic', ['grek'] = 'greek', ['gujr'] = 'gujarati', ['guru'] = 'gurmukhi', ['hang'] = 'hangul', ['hani'] = 'cjk ideographic', ['hano'] = 'hanunoo', ['hebr'] = 'hebrew', ['ital'] = 'old italic', ['jamo'] = 'hangul jamo', ['java'] = 'javanese', ['kana'] = 'hiragana and katakana', ['khar'] = 'kharosthi', ['khmr'] = 'khmer', ['knda'] = 'kannada', ['lao' ] = 'lao', ['latn'] = 'latin', ['limb'] = 'limbu', ['linb'] = 'linear b', ['math'] = 'mathematical alphanumeric symbols', ['mlym'] = 'malayalam', ['mong'] = 'mongolian', ['musc'] = 'musical symbols', ['mymr'] = 'myanmar', ['nko' ] = "n'ko", ['ogam'] = 'ogham', ['orya'] = 'oriya', ['osma'] = 'osmanya', ['phag'] = 'phags-pa', ['phnx'] = 'phoenician', ['runr'] = 'runic', ['shaw'] = 'shavian', ['sinh'] = 'sinhala', ['sylo'] = 'syloti nagri', ['syrc'] = 'syriac', ['tagb'] = 'tagbanwa', ['tale'] = 'tai le', ['talu'] = 'tai lu', ['taml'] = 'tamil', ['telu'] = 'telugu', ['tfng'] = 'tifinagh', ['tglg'] = 'tagalog', ['thaa'] = 'thaana', ['thai'] = 'thai', ['tibt'] = 'tibetan', ['ugar'] = 'ugaritic cuneiform', ['xpeo'] = 'old persian cuneiform', ['xsux'] = 'sumero-akkadian cuneiform', ['yi' ] = 'yi', } local languages = allocate { ['aba'] = 'abaza', ['abk'] = 'abkhazian', ['ady'] = 'adyghe', ['afk'] = 'afrikaans', ['afr'] = 'afar', ['agw'] = 'agaw', ['als'] = 'alsatian', ['alt'] = 'altai', ['amh'] = 'amharic', ['ara'] = 'arabic', ['ari'] = 'aari', ['ark'] = 'arakanese', ['asm'] = 'assamese', ['ath'] = 'athapaskan', ['avr'] = 'avar', ['awa'] = 'awadhi', ['aym'] = 'aymara', ['aze'] = 'azeri', ['bad'] = 'badaga', ['bag'] = 'baghelkhandi', ['bal'] = 'balkar', ['bau'] = 'baule', ['bbr'] = 'berber', ['bch'] = 'bench', ['bcr'] = 'bible cree', ['bel'] = 'belarussian', ['bem'] = 'bemba', ['ben'] = 'bengali', ['bgr'] = 'bulgarian', ['bhi'] = 'bhili', ['bho'] = 'bhojpuri', ['bik'] = 'bikol', ['bil'] = 'bilen', ['bkf'] = 'blackfoot', ['bli'] = 'balochi', ['bln'] = 'balante', ['blt'] = 'balti', ['bmb'] = 'bambara', ['bml'] = 'bamileke', ['bos'] = 'bosnian', ['bre'] = 'breton', ['brh'] = 'brahui', ['bri'] = 'braj bhasha', ['brm'] = 'burmese', ['bsh'] = 'bashkir', ['bti'] = 'beti', ['cat'] = 'catalan', ['ceb'] = 'cebuano', ['che'] = 'chechen', ['chg'] = 'chaha gurage', ['chh'] = 'chattisgarhi', ['chi'] = 'chichewa', ['chk'] = 'chukchi', ['chp'] = 'chipewyan', ['chr'] = 'cherokee', ['chu'] = 'chuvash', ['cmr'] = 'comorian', ['cop'] = 'coptic', ['cos'] = 'corsican', ['cre'] = 'cree', ['crr'] = 'carrier', ['crt'] = 'crimean tatar', ['csl'] = 'church slavonic', ['csy'] = 'czech', ['dan'] = 'danish', ['dar'] = 'dargwa', ['dcr'] = 'woods cree', ['deu'] = 'german', ['dgr'] = 'dogri', ['div'] = 'divehi', ['djr'] = 'djerma', ['dng'] = 'dangme', ['dnk'] = 'dinka', ['dri'] = 'dari', ['dun'] = 'dungan', ['dzn'] = 'dzongkha', ['ebi'] = 'ebira', ['ecr'] = 'eastern cree', ['edo'] = 'edo', ['efi'] = 'efik', ['ell'] = 'greek', ['eng'] = 'english', ['erz'] = 'erzya', ['esp'] = 'spanish', ['eti'] = 'estonian', ['euq'] = 'basque', ['evk'] = 'evenki', ['evn'] = 'even', ['ewe'] = 'ewe', ['fan'] = 'french antillean', ['far'] = 'farsi', ['fin'] = 'finnish', ['fji'] = 'fijian', ['fle'] = 'flemish', ['fne'] = 'forest nenets', ['fon'] = 'fon', ['fos'] = 'faroese', ['fra'] = 'french', ['fri'] = 'frisian', ['frl'] = 'friulian', ['fta'] = 'futa', ['ful'] = 'fulani', ['gad'] = 'ga', ['gae'] = 'gaelic', ['gag'] = 'gagauz', ['gal'] = 'galician', ['gar'] = 'garshuni', ['gaw'] = 'garhwali', ['gez'] = "ge'ez", ['gil'] = 'gilyak', ['gmz'] = 'gumuz', ['gon'] = 'gondi', ['grn'] = 'greenlandic', ['gro'] = 'garo', ['gua'] = 'guarani', ['guj'] = 'gujarati', ['hai'] = 'haitian', ['hal'] = 'halam', ['har'] = 'harauti', ['hau'] = 'hausa', ['haw'] = 'hawaiin', ['hbn'] = 'hammer-banna', ['hil'] = 'hiligaynon', ['hin'] = 'hindi', ['hma'] = 'high mari', ['hnd'] = 'hindko', ['ho'] = 'ho', ['hri'] = 'harari', ['hrv'] = 'croatian', ['hun'] = 'hungarian', ['hye'] = 'armenian', ['ibo'] = 'igbo', ['ijo'] = 'ijo', ['ilo'] = 'ilokano', ['ind'] = 'indonesian', ['ing'] = 'ingush', ['inu'] = 'inuktitut', ['iri'] = 'irish', ['irt'] = 'irish traditional', ['isl'] = 'icelandic', ['ism'] = 'inari sami', ['ita'] = 'italian', ['iwr'] = 'hebrew', ['jan'] = 'japanese', ['jav'] = 'javanese', ['jii'] = 'yiddish', ['jud'] = 'judezmo', ['jul'] = 'jula', ['kab'] = 'kabardian', ['kac'] = 'kachchi', ['kal'] = 'kalenjin', ['kan'] = 'kannada', ['kar'] = 'karachay', ['kat'] = 'georgian', ['kaz'] = 'kazakh', ['keb'] = 'kebena', ['kge'] = 'khutsuri georgian', ['kha'] = 'khakass', ['khk'] = 'khanty-kazim', ['khm'] = 'khmer', ['khs'] = 'khanty-shurishkar', ['khv'] = 'khanty-vakhi', ['khw'] = 'khowar', ['kik'] = 'kikuyu', ['kir'] = 'kirghiz', ['kis'] = 'kisii', ['kkn'] = 'kokni', ['klm'] = 'kalmyk', ['kmb'] = 'kamba', ['kmn'] = 'kumaoni', ['kmo'] = 'komo', ['kms'] = 'komso', ['knr'] = 'kanuri', ['kod'] = 'kodagu', ['koh'] = 'korean old hangul', ['kok'] = 'konkani', ['kon'] = 'kikongo', ['kop'] = 'komi-permyak', ['kor'] = 'korean', ['koz'] = 'komi-zyrian', ['kpl'] = 'kpelle', ['kri'] = 'krio', ['krk'] = 'karakalpak', ['krl'] = 'karelian', ['krm'] = 'karaim', ['krn'] = 'karen', ['krt'] = 'koorete', ['ksh'] = 'kashmiri', ['ksi'] = 'khasi', ['ksm'] = 'kildin sami', ['kui'] = 'kui', ['kul'] = 'kulvi', ['kum'] = 'kumyk', ['kur'] = 'kurdish', ['kuu'] = 'kurukh', ['kuy'] = 'kuy', ['kyk'] = 'koryak', ['lad'] = 'ladin', ['lah'] = 'lahuli', ['lak'] = 'lak', ['lam'] = 'lambani', ['lao'] = 'lao', ['lat'] = 'latin', ['laz'] = 'laz', ['lcr'] = 'l-cree', ['ldk'] = 'ladakhi', ['lez'] = 'lezgi', ['lin'] = 'lingala', ['lma'] = 'low mari', ['lmb'] = 'limbu', ['lmw'] = 'lomwe', ['lsb'] = 'lower sorbian', ['lsm'] = 'lule sami', ['lth'] = 'lithuanian', ['ltz'] = 'luxembourgish', ['lub'] = 'luba', ['lug'] = 'luganda', ['luh'] = 'luhya', ['luo'] = 'luo', ['lvi'] = 'latvian', ['maj'] = 'majang', ['mak'] = 'makua', ['mal'] = 'malayalam traditional', ['man'] = 'mansi', ['map'] = 'mapudungun', ['mar'] = 'marathi', ['maw'] = 'marwari', ['mbn'] = 'mbundu', ['mch'] = 'manchu', ['mcr'] = 'moose cree', ['mde'] = 'mende', ['men'] = "me'en", ['miz'] = 'mizo', ['mkd'] = 'macedonian', ['mle'] = 'male', ['mlg'] = 'malagasy', ['mln'] = 'malinke', ['mlr'] = 'malayalam reformed', ['mly'] = 'malay', ['mnd'] = 'mandinka', ['mng'] = 'mongolian', ['mni'] = 'manipuri', ['mnk'] = 'maninka', ['mnx'] = 'manx gaelic', ['moh'] = 'mohawk', ['mok'] = 'moksha', ['mol'] = 'moldavian', ['mon'] = 'mon', ['mor'] = 'moroccan', ['mri'] = 'maori', ['mth'] = 'maithili', ['mts'] = 'maltese', ['mun'] = 'mundari', ['nag'] = 'naga-assamese', ['nan'] = 'nanai', ['nas'] = 'naskapi', ['ncr'] = 'n-cree', ['ndb'] = 'ndebele', ['ndg'] = 'ndonga', ['nep'] = 'nepali', ['new'] = 'newari', ['ngr'] = 'nagari', ['nhc'] = 'norway house cree', ['nis'] = 'nisi', ['niu'] = 'niuean', ['nkl'] = 'nkole', ['nko'] = "n'ko", ['nld'] = 'dutch', ['nog'] = 'nogai', ['nor'] = 'norwegian', ['nsm'] = 'northern sami', ['nta'] = 'northern tai', ['nto'] = 'esperanto', ['nyn'] = 'nynorsk', ['oci'] = 'occitan', ['ocr'] = 'oji-cree', ['ojb'] = 'ojibway', ['ori'] = 'oriya', ['oro'] = 'oromo', ['oss'] = 'ossetian', ['paa'] = 'palestinian aramaic', ['pal'] = 'pali', ['pan'] = 'punjabi', ['pap'] = 'palpa', ['pas'] = 'pashto', ['pgr'] = 'polytonic greek', ['pil'] = 'pilipino', ['plg'] = 'palaung', ['plk'] = 'polish', ['pro'] = 'provencal', ['ptg'] = 'portuguese', ['qin'] = 'chin', ['raj'] = 'rajasthani', ['rbu'] = 'russian buriat', ['rcr'] = 'r-cree', ['ria'] = 'riang', ['rms'] = 'rhaeto-romanic', ['rom'] = 'romanian', ['roy'] = 'romany', ['rsy'] = 'rusyn', ['rua'] = 'ruanda', ['rus'] = 'russian', ['sad'] = 'sadri', ['san'] = 'sanskrit', ['sat'] = 'santali', ['say'] = 'sayisi', ['sek'] = 'sekota', ['sel'] = 'selkup', ['sgo'] = 'sango', ['shn'] = 'shan', ['sib'] = 'sibe', ['sid'] = 'sidamo', ['sig'] = 'silte gurage', ['sks'] = 'skolt sami', ['sky'] = 'slovak', ['sla'] = 'slavey', ['slv'] = 'slovenian', ['sml'] = 'somali', ['smo'] = 'samoan', ['sna'] = 'sena', ['snd'] = 'sindhi', ['snh'] = 'sinhalese', ['snk'] = 'soninke', ['sog'] = 'sodo gurage', ['sot'] = 'sotho', ['sqi'] = 'albanian', ['srb'] = 'serbian', ['srk'] = 'saraiki', ['srr'] = 'serer', ['ssl'] = 'south slavey', ['ssm'] = 'southern sami', ['sur'] = 'suri', ['sva'] = 'svan', ['sve'] = 'swedish', ['swa'] = 'swadaya aramaic', ['swk'] = 'swahili', ['swz'] = 'swazi', ['sxt'] = 'sutu', ['syr'] = 'syriac', ['tab'] = 'tabasaran', ['taj'] = 'tajiki', ['tam'] = 'tamil', ['tat'] = 'tatar', ['tcr'] = 'th-cree', ['tel'] = 'telugu', ['tgn'] = 'tongan', ['tgr'] = 'tigre', ['tgy'] = 'tigrinya', ['tha'] = 'thai', ['tht'] = 'tahitian', ['tib'] = 'tibetan', ['tkm'] = 'turkmen', ['tmn'] = 'temne', ['tna'] = 'tswana', ['tne'] = 'tundra nenets', ['tng'] = 'tonga', ['tod'] = 'todo', ['trk'] = 'turkish', ['tsg'] = 'tsonga', ['tua'] = 'turoyo aramaic', ['tul'] = 'tulu', ['tuv'] = 'tuvin', ['twi'] = 'twi', ['udm'] = 'udmurt', ['ukr'] = 'ukrainian', ['urd'] = 'urdu', ['usb'] = 'upper sorbian', ['uyg'] = 'uyghur', ['uzb'] = 'uzbek', ['ven'] = 'venda', ['vit'] = 'vietnamese', ['wa' ] = 'wa', ['wag'] = 'wagdi', ['wcr'] = 'west-cree', ['wel'] = 'welsh', ['wlf'] = 'wolof', ['xbd'] = 'tai lue', ['xhs'] = 'xhosa', ['yak'] = 'yakut', ['yba'] = 'yoruba', ['ycr'] = 'y-cree', ['yic'] = 'yi classic', ['yim'] = 'yi modern', ['zhh'] = 'chinese hong kong', ['zhp'] = 'chinese phonetic', ['zhs'] = 'chinese simplified', ['zht'] = 'chinese traditional', ['znd'] = 'zande', ['zul'] = 'zulu' } local features = allocate { ['aalt'] = 'access all alternates', ['abvf'] = 'above-base forms', ['abvm'] = 'above-base mark positioning', ['abvs'] = 'above-base substitutions', ['afrc'] = 'alternative fractions', ['akhn'] = 'akhands', ['blwf'] = 'below-base forms', ['blwm'] = 'below-base mark positioning', ['blws'] = 'below-base substitutions', ['c2pc'] = 'petite capitals from capitals', ['c2sc'] = 'small capitals from capitals', ['calt'] = 'contextual alternates', ['case'] = 'case-sensitive forms', ['ccmp'] = 'glyph composition/decomposition', ['cjct'] = 'conjunct forms', ['clig'] = 'contextual ligatures', ['cpsp'] = 'capital spacing', ['cswh'] = 'contextual swash', ['curs'] = 'cursive positioning', ['dflt'] = 'default processing', ['dist'] = 'distances', ['dlig'] = 'discretionary ligatures', ['dnom'] = 'denominators', ['dtls'] = 'dotless forms', -- math ['expt'] = 'expert forms', ['falt'] = 'final glyph alternates', ['fin2'] = 'terminal forms #2', ['fin3'] = 'terminal forms #3', ['fina'] = 'terminal forms', ['flac'] = 'flattened accents over capitals', -- math ['frac'] = 'fractions', ['fwid'] = 'full width', ['half'] = 'half forms', ['haln'] = 'halant forms', ['halt'] = 'alternate half width', ['hist'] = 'historical forms', ['hkna'] = 'horizontal kana alternates', ['hlig'] = 'historical ligatures', ['hngl'] = 'hangul', ['hojo'] = 'hojo kanji forms', ['hwid'] = 'half width', ['init'] = 'initial forms', ['isol'] = 'isolated forms', ['ital'] = 'italics', ['jalt'] = 'justification alternatives', ['jp04'] = 'jis2004 forms', ['jp78'] = 'jis78 forms', ['jp83'] = 'jis83 forms', ['jp90'] = 'jis90 forms', ['kern'] = 'kerning', ['lfbd'] = 'left bounds', ['liga'] = 'standard ligatures', ['ljmo'] = 'leading jamo forms', ['lnum'] = 'lining figures', ['locl'] = 'localized forms', ['mark'] = 'mark positioning', ['med2'] = 'medial forms #2', ['medi'] = 'medial forms', ['mgrk'] = 'mathematical greek', ['mkmk'] = 'mark to mark positioning', ['mset'] = 'mark positioning via substitution', ['nalt'] = 'alternate annotation forms', ['nlck'] = 'nlc kanji forms', ['nukt'] = 'nukta forms', ['numr'] = 'numerators', ['onum'] = 'old style figures', ['opbd'] = 'optical bounds', ['ordn'] = 'ordinals', ['ornm'] = 'ornaments', ['palt'] = 'proportional alternate width', ['pcap'] = 'petite capitals', ['pnum'] = 'proportional figures', ['pref'] = 'pre-base forms', ['pres'] = 'pre-base substitutions', ['pstf'] = 'post-base forms', ['psts'] = 'post-base substitutions', ['pwid'] = 'proportional widths', ['qwid'] = 'quarter widths', ['rand'] = 'randomize', ['rkrf'] = 'rakar forms', ['rlig'] = 'required ligatures', ['rphf'] = 'reph form', ['rtbd'] = 'right bounds', ['rtla'] = 'right-to-left alternates', ['rtlm'] = 'right to left math', -- math ['ruby'] = 'ruby notation forms', ['salt'] = 'stylistic alternates', ['sinf'] = 'scientific inferiors', ['size'] = 'optical size', ['smcp'] = 'small capitals', ['smpl'] = 'simplified forms', -- ['ss01'] = 'stylistic set 1', -- ['ss02'] = 'stylistic set 2', -- ['ss03'] = 'stylistic set 3', -- ['ss04'] = 'stylistic set 4', -- ['ss05'] = 'stylistic set 5', -- ['ss06'] = 'stylistic set 6', -- ['ss07'] = 'stylistic set 7', -- ['ss08'] = 'stylistic set 8', -- ['ss09'] = 'stylistic set 9', -- ['ss10'] = 'stylistic set 10', -- ['ss11'] = 'stylistic set 11', -- ['ss12'] = 'stylistic set 12', -- ['ss13'] = 'stylistic set 13', -- ['ss14'] = 'stylistic set 14', -- ['ss15'] = 'stylistic set 15', -- ['ss16'] = 'stylistic set 16', -- ['ss17'] = 'stylistic set 17', -- ['ss18'] = 'stylistic set 18', -- ['ss19'] = 'stylistic set 19', -- ['ss20'] = 'stylistic set 20', ['ssty'] = 'script style', -- math ['subs'] = 'subscript', ['sups'] = 'superscript', ['swsh'] = 'swash', ['titl'] = 'titling', ['tjmo'] = 'trailing jamo forms', ['tnam'] = 'traditional name forms', ['tnum'] = 'tabular figures', ['trad'] = 'traditional forms', ['twid'] = 'third widths', ['unic'] = 'unicase', ['valt'] = 'alternate vertical metrics', ['vatu'] = 'vattu variants', ['vert'] = 'vertical writing', ['vhal'] = 'alternate vertical half metrics', ['vjmo'] = 'vowel jamo forms', ['vkna'] = 'vertical kana alternates', ['vkrn'] = 'vertical kerning', ['vpal'] = 'proportional alternate vertical metrics', ['vrt2'] = 'vertical rotation', ['zero'] = 'slashed zero', ['trep'] = 'traditional tex replacements', ['tlig'] = 'traditional tex ligatures', ['ss..'] = 'stylistic set ..', ['cv..'] = 'character variant ..', ['js..'] = 'justification ..', ["dv.."] = "devanagari ..", } local baselines = allocate { ['hang'] = 'hanging baseline', ['icfb'] = 'ideographic character face bottom edge baseline', ['icft'] = 'ideographic character face tope edige baseline', ['ideo'] = 'ideographic em-box bottom edge baseline', ['idtp'] = 'ideographic em-box top edge baseline', ['math'] = 'mathmatical centered baseline', ['romn'] = 'roman baseline' } tables.scripts = scripts tables.languages = languages tables.features = features tables.baselines = baselines local acceptscripts = true directives.register("otf.acceptscripts", function(v) acceptscripts = v end) local acceptlanguages = true directives.register("otf.acceptlanguages", function(v) acceptlanguages = v end) local report_checks = logs.reporter("fonts","checks") -- hm, we overload the metatables if otffeatures.features then for k, v in next, otffeatures.features do features[k] = v end otffeatures.features = features end local function swapped(h) local r = { } for k, v in next, h do r[gsub(v,"[^a-z0-9]","")] = k -- is already lower end return r end local verbosescripts = allocate(swapped(scripts )) local verboselanguages = allocate(swapped(languages)) local verbosefeatures = allocate(swapped(features )) local verbosebaselines = allocate(swapped(baselines)) -- lets forget about trailing spaces local function resolve(t,k) if k then k = gsub(lower(k),"[^a-z0-9]","") local v = rawget(t,k) if v then return v end end end setmetatableindex(verbosescripts, resolve) setmetatableindex(verboselanguages, resolve) setmetatableindex(verbosefeatures, resolve) setmetatableindex(verbosebaselines, resolve) -- We could optimize the next lookups by using an extra metatable and storing -- already found values but in practice there are not that many lookups so -- it's never a bottleneck. setmetatableindex(scripts, function(t,k) if k then k = lower(k) if k == "dflt" then return k end local v = rawget(t,k) if v then return v end k = gsub(k," ","") v = rawget(t,v) if v then return v elseif acceptscripts then report_checks("registering extra script %a",k) rawset(t,k,k) return k end end return "dflt" end) setmetatableindex(languages, function(t,k) if k then k = lower(k) if k == "dflt" then return k end local v = rawget(t,k) if v then return v end k = gsub(k," ","") v = rawget(t,v) if v then return v elseif acceptlanguages then report_checks("registering extra language %a",k) rawset(t,k,k) return k end end return "dflt" end) setmetatablenewindex(languages, "ignore") setmetatablenewindex(baselines, "ignore") setmetatablenewindex(baselines, "ignore") local function resolve(t,k) if k then k = lower(k) local v = rawget(t,k) if v then return v end k = gsub(k," ","") local v = rawget(t,k) if v then return v end local tag, dd = match(k,"(..)(%d+)") if tag and dd then local v = rawget(t,tag) if v then return v -- return format(v,tonumber(dd)) -- old way else local v = rawget(t,tag.."..") -- nicer in overview if v then return (gsub(v,"%.%.",tonumber(dd))) -- new way end end end end return k -- "dflt" end setmetatableindex(features, resolve) local function assign(t,k,v) if k and v then v = lower(v) rawset(t,k,v) -- rawset ? -- rawset(features,gsub(v,"[^a-z0-9]",""),k) -- why ? old code end end setmetatablenewindex(features, assign) local checkers = { rand = function(v) return v == true and "random" or v end } -- Keep this: -- -- function otf.features.normalize(features) -- if features then -- local h = { } -- for k, v in next, features do -- k = lower(k) -- if k == "language" then -- v = gsub(lower(v),"[^a-z0-9]","") -- h.language = rawget(verboselanguages,v) or (languages[v] and v) or "dflt" -- auto adds -- elseif k == "script" then -- v = gsub(lower(v),"[^a-z0-9]","") -- h.script = rawget(verbosescripts,v) or (scripts[v] and v) or "dflt" -- auto adds -- else -- if type(v) == "string" then -- local b = is_boolean(v) -- if type(b) == "nil" then -- v = tonumber(v) or lower(v) -- else -- v = b -- end -- end -- if not rawget(features,k) then -- k = rawget(verbosefeatures,k) or k -- end -- local c = checkers[k] -- h[k] = c and c(v) or v -- end -- end -- return h -- end -- end -- inspect(fonts.handlers.otf.statistics.usedfeatures) if not storage then return end local usedfeatures = statistics.usedfeatures or { } statistics.usedfeatures = usedfeatures table.setmetatableindex(usedfeatures, function(t,k) if k then local v = { } t[k] = v return v end end) -- table.autotable storage.register("fonts/otf/usedfeatures", usedfeatures, "fonts.handlers.otf.statistics.usedfeatures" ) function otf.features.normalize(features) if features then local h = { } for key, value in next, features do local k = lower(key) if k == "language" then local v = gsub(lower(value),"[^a-z0-9]","") h.language = rawget(verboselanguages,v) or (languages[v] and v) or "dflt" -- auto adds elseif k == "script" then local v = gsub(lower(value),"[^a-z0-9]","") h.script = rawget(verbosescripts,v) or (scripts[v] and v) or "dflt" -- auto adds else local uk = usedfeatures[key] local uv = uk[value] if uv then -- report_checks("feature value %a first seen at %a",value,key) else if type(value) == "string" then local b = is_boolean(value) if type(b) == "nil" then uv = tonumber(value) or lower(value) else uv = b end else uv = v end if not rawget(features,k) then k = rawget(verbosefeatures,k) or k end local c = checkers[k] if c then uv = c(uv) or vc end uk[value] = uv end h[k] = uv end end return h end end --~ table.print(otf.features.normalize({ language = "dutch", liga = "yes", ss99 = true, aalt = 3, abcd = "yes" } )) -- When I feel the need ... --~ tables.aat = { --~ [ 0] = { --~ name = "allTypographicFeaturesType", --~ [ 0] = "allTypeFeaturesOnSelector", --~ [ 1] = "allTypeFeaturesOffSelector", --~ }, --~ [ 1] = { --~ name = "ligaturesType", --~ [0 ] = "requiredLigaturesOnSelector", --~ [1 ] = "requiredLigaturesOffSelector", --~ [2 ] = "commonLigaturesOnSelector", --~ [3 ] = "commonLigaturesOffSelector", --~ [4 ] = "rareLigaturesOnSelector", --~ [5 ] = "rareLigaturesOffSelector", --~ [6 ] = "logosOnSelector ", --~ [7 ] = "logosOffSelector ", --~ [8 ] = "rebusPicturesOnSelector", --~ [9 ] = "rebusPicturesOffSelector", --~ [10] = "diphthongLigaturesOnSelector", --~ [11] = "diphthongLigaturesOffSelector", --~ [12] = "squaredLigaturesOnSelector", --~ [13] = "squaredLigaturesOffSelector", --~ [14] = "abbrevSquaredLigaturesOnSelector", --~ [15] = "abbrevSquaredLigaturesOffSelector", --~ }, --~ [ 2] = { --~ name = "cursiveConnectionType", --~ [ 0] = "unconnectedSelector", --~ [ 1] = "partiallyConnectedSelector", --~ [ 2] = "cursiveSelector ", --~ }, --~ [ 3] = { --~ name = "letterCaseType", --~ [ 0] = "upperAndLowerCaseSelector", --~ [ 1] = "allCapsSelector ", --~ [ 2] = "allLowerCaseSelector", --~ [ 3] = "smallCapsSelector ", --~ [ 4] = "initialCapsSelector", --~ [ 5] = "initialCapsAndSmallCapsSelector", --~ }, --~ [ 4] = { --~ name = "verticalSubstitutionType", --~ [ 0] = "substituteVerticalFormsOnSelector", --~ [ 1] = "substituteVerticalFormsOffSelector", --~ }, --~ [ 5] = { --~ name = "linguisticRearrangementType", --~ [ 0] = "linguisticRearrangementOnSelector", --~ [ 1] = "linguisticRearrangementOffSelector", --~ }, --~ [ 6] = { --~ name = "numberSpacingType", --~ [ 0] = "monospacedNumbersSelector", --~ [ 1] = "proportionalNumbersSelector", --~ }, --~ [ 7] = { --~ name = "appleReserved1Type", --~ }, --~ [ 8] = { --~ name = "smartSwashType", --~ [ 0] = "wordInitialSwashesOnSelector", --~ [ 1] = "wordInitialSwashesOffSelector", --~ [ 2] = "wordFinalSwashesOnSelector", --~ [ 3] = "wordFinalSwashesOffSelector", --~ [ 4] = "lineInitialSwashesOnSelector", --~ [ 5] = "lineInitialSwashesOffSelector", --~ [ 6] = "lineFinalSwashesOnSelector", --~ [ 7] = "lineFinalSwashesOffSelector", --~ [ 8] = "nonFinalSwashesOnSelector", --~ [ 9] = "nonFinalSwashesOffSelector", --~ }, --~ [ 9] = { --~ name = "diacriticsType", --~ [ 0] = "showDiacriticsSelector", --~ [ 1] = "hideDiacriticsSelector", --~ [ 2] = "decomposeDiacriticsSelector", --~ }, --~ [10] = { --~ name = "verticalPositionType", --~ [ 0] = "normalPositionSelector", --~ [ 1] = "superiorsSelector ", --~ [ 2] = "inferiorsSelector ", --~ [ 3] = "ordinalsSelector ", --~ }, --~ [11] = { --~ name = "fractionsType", --~ [ 0] = "noFractionsSelector", --~ [ 1] = "verticalFractionsSelector", --~ [ 2] = "diagonalFractionsSelector", --~ }, --~ [12] = { --~ name = "appleReserved2Type", --~ }, --~ [13] = { --~ name = "overlappingCharactersType", --~ [ 0] = "preventOverlapOnSelector", --~ [ 1] = "preventOverlapOffSelector", --~ }, --~ [14] = { --~ name = "typographicExtrasType", --~ [0 ] = "hyphensToEmDashOnSelector", --~ [1 ] = "hyphensToEmDashOffSelector", --~ [2 ] = "hyphenToEnDashOnSelector", --~ [3 ] = "hyphenToEnDashOffSelector", --~ [4 ] = "unslashedZeroOnSelector", --~ [5 ] = "unslashedZeroOffSelector", --~ [6 ] = "formInterrobangOnSelector", --~ [7 ] = "formInterrobangOffSelector", --~ [8 ] = "smartQuotesOnSelector", --~ [9 ] = "smartQuotesOffSelector", --~ [10] = "periodsToEllipsisOnSelector", --~ [11] = "periodsToEllipsisOffSelector", --~ }, --~ [15] = { --~ name = "mathematicalExtrasType", --~ [ 0] = "hyphenToMinusOnSelector", --~ [ 1] = "hyphenToMinusOffSelector", --~ [ 2] = "asteriskToMultiplyOnSelector", --~ [ 3] = "asteriskToMultiplyOffSelector", --~ [ 4] = "slashToDivideOnSelector", --~ [ 5] = "slashToDivideOffSelector", --~ [ 6] = "inequalityLigaturesOnSelector", --~ [ 7] = "inequalityLigaturesOffSelector", --~ [ 8] = "exponentsOnSelector", --~ [ 9] = "exponentsOffSelector", --~ }, --~ [16] = { --~ name = "ornamentSetsType", --~ [ 0] = "noOrnamentsSelector", --~ [ 1] = "dingbatsSelector ", --~ [ 2] = "piCharactersSelector", --~ [ 3] = "fleuronsSelector ", --~ [ 4] = "decorativeBordersSelector", --~ [ 5] = "internationalSymbolsSelector", --~ [ 6] = "mathSymbolsSelector", --~ }, --~ [17] = { --~ name = "characterAlternativesType", --~ [ 0] = "noAlternatesSelector", --~ }, --~ [18] = { --~ name = "designComplexityType", --~ [ 0] = "designLevel1Selector", --~ [ 1] = "designLevel2Selector", --~ [ 2] = "designLevel3Selector", --~ [ 3] = "designLevel4Selector", --~ [ 4] = "designLevel5Selector", --~ }, --~ [19] = { --~ name = "styleOptionsType", --~ [ 0] = "noStyleOptionsSelector", --~ [ 1] = "displayTextSelector", --~ [ 2] = "engravedTextSelector", --~ [ 3] = "illuminatedCapsSelector", --~ [ 4] = "titlingCapsSelector", --~ [ 5] = "tallCapsSelector ", --~ }, --~ [20] = { --~ name = "characterShapeType", --~ [0 ] = "traditionalCharactersSelector", --~ [1 ] = "simplifiedCharactersSelector", --~ [2 ] = "jis1978CharactersSelector", --~ [3 ] = "jis1983CharactersSelector", --~ [4 ] = "jis1990CharactersSelector", --~ [5 ] = "traditionalAltOneSelector", --~ [6 ] = "traditionalAltTwoSelector", --~ [7 ] = "traditionalAltThreeSelector", --~ [8 ] = "traditionalAltFourSelector", --~ [9 ] = "traditionalAltFiveSelector", --~ [10] = "expertCharactersSelector", --~ }, --~ [21] = { --~ name = "numberCaseType", --~ [ 0] = "lowerCaseNumbersSelector", --~ [ 1] = "upperCaseNumbersSelector", --~ }, --~ [22] = { --~ name = "textSpacingType", --~ [ 0] = "proportionalTextSelector", --~ [ 1] = "monospacedTextSelector", --~ [ 2] = "halfWidthTextSelector", --~ [ 3] = "normallySpacedTextSelector", --~ }, --~ [23] = { --~ name = "transliterationType", --~ [ 0] = "noTransliterationSelector", --~ [ 1] = "hanjaToHangulSelector", --~ [ 2] = "hiraganaToKatakanaSelector", --~ [ 3] = "katakanaToHiraganaSelector", --~ [ 4] = "kanaToRomanizationSelector", --~ [ 5] = "romanizationToHiraganaSelector", --~ [ 6] = "romanizationToKatakanaSelector", --~ [ 7] = "hanjaToHangulAltOneSelector", --~ [ 8] = "hanjaToHangulAltTwoSelector", --~ [ 9] = "hanjaToHangulAltThreeSelector", --~ }, --~ [24] = { --~ name = "annotationType", --~ [ 0] = "noAnnotationSelector", --~ [ 1] = "boxAnnotationSelector", --~ [ 2] = "roundedBoxAnnotationSelector", --~ [ 3] = "circleAnnotationSelector", --~ [ 4] = "invertedCircleAnnotationSelector", --~ [ 5] = "parenthesisAnnotationSelector", --~ [ 6] = "periodAnnotationSelector", --~ [ 7] = "romanNumeralAnnotationSelector", --~ [ 8] = "diamondAnnotationSelector", --~ }, --~ [25] = { --~ name = "kanaSpacingType", --~ [ 0] = "fullWidthKanaSelector", --~ [ 1] = "proportionalKanaSelector", --~ }, --~ [26] = { --~ name = "ideographicSpacingType", --~ [ 0] = "fullWidthIdeographsSelector", --~ [ 1] = "proportionalIdeographsSelector", --~ }, --~ [103] = { --~ name = "cjkRomanSpacingType", --~ [ 0] = "halfWidthCJKRomanSelector", --~ [ 1] = "proportionalCJKRomanSelector", --~ [ 2] = "defaultCJKRomanSelector", --~ [ 3] = "fullWidthCJKRomanSelector", --~ }, --~ } context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-x11.mkii0000644000175000017500000007431311571377075024134 0ustar norbertnorbert%D \module %D [ file=colo-x11, %D version=2009.11.13, %D title=\CONTEXT\ Color Macros, %D subtitle=X11, %D author=Alan Braslau] %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 Standard X11 rgb colors (from \type {/usr/share/X11/rgb.txt}): \doifnotmode{mkiv} { \input colo-hex.mkii } \definecolor [snow] [h=fffafa] \definecolor [ghostwhite] [h=f8f8ff] \definecolor [whitesmoke] [s=0.96] \definecolor [gainsboro] [s=0.86] \definecolor [floralwhite] [h=fffaf0] \definecolor [oldlace] [h=fdf5e6] \definecolor [linen] [h=faf0e6] \definecolor [antiquewhite] [h=faebd7] \definecolor [papayawhip] [h=ffefd5] \definecolor [blanchedalmond] [h=ffebcd] \definecolor [bisque] [h=ffe4c4] \definecolor [peachpuff] [h=ffdab9] \definecolor [navajowhite] [h=ffdead] \definecolor [moccasin] [h=ffe4b5] \definecolor [cornsilk] [h=fff8dc] \definecolor [ivory] [h=fffff0] \definecolor [lemonchiffon] [h=fffacd] \definecolor [seashell] [h=fff5ee] \definecolor [honeydew] [h=f0fff0] \definecolor [mintcream] [h=f5fffa] \definecolor [azure] [h=f0ffff] \definecolor [aliceblue] [h=f0f8ff] \definecolor [lavender] [h=e6e6fa] \definecolor [lavenderblush] [h=fff0f5] \definecolor [mistyrose] [h=ffe4e1] \definecolor [white] [s=1] \definecolor [black] [s=0] \definecolor [darkslategray] [h=2f4f4f] \definecolor [darkslategrey] [darkslategray] \definecolor [dimgray] [s=0.41] \definecolor [dimgrey] [dimgray] \definecolor [slategray] [h=708090] \definecolor [slategrey] [slategray] \definecolor [lightslategray] [h=778899] \definecolor [lightslategrey] [lightslategray] \definecolor [gray] [s=0.75] \definecolor [grey] [gray] \definecolor [lightgrey] [s=0.83] \definecolor [lightgray] [lightgrey] \definecolor [midnightblue] [h=191970] \definecolor [navy] [h=000080] \definecolor [navyblue] [navy] \definecolor [cornflowerblue] [h=6495ed] \definecolor [darkslateblue] [h=483d8b] \definecolor [slateblue] [h=6a5acd] \definecolor [mediumslateblue] [h=7b68ee] \definecolor [lightslateblue] [h=8470ff] \definecolor [mediumblue] [h=0000cd] \definecolor [royalblue] [h=4169e1] \definecolor [blue] [h=0000ff] \definecolor [dodgerblue] [h=1e90ff] \definecolor [deepskyblue] [h=00bfff] \definecolor [skyblue] [h=87ceeb] \definecolor [lightskyblue] [h=87cefa] \definecolor [steelblue] [h=4682b4] \definecolor [lightsteelblue] [h=b0c4de] \definecolor [lightblue] [h=add8e6] \definecolor [powderblue] [h=b0e0e6] \definecolor [paleturquoise] [h=afeeee] \definecolor [darkturquoise] [h=00ced1] \definecolor [mediumturquoise] [h=48d1cc] \definecolor [turquoise] [h=40e0d0] \definecolor [cyan] [h=00ffff] \definecolor [lightcyan] [h=e0ffff] \definecolor [cadetblue] [h=5f9ea0] \definecolor [mediumaquamarine] [h=66cdaa] \definecolor [aquamarine] [h=7fffd4] \definecolor [darkgreen] [h=006400] \definecolor [darkolivegreen] [h=556b2f] \definecolor [darkseagreen] [h=8fbc8f] \definecolor [seagreen] [h=2e8b57] \definecolor [mediumseagreen] [h=3cb371] \definecolor [lightseagreen] [h=20b2aa] \definecolor [palegreen] [h=98fb98] \definecolor [springgreen] [h=00ff7f] \definecolor [lawngreen] [h=7cfc00] \definecolor [green] [h=00ff00] \definecolor [chartreuse] [h=7fff00] \definecolor [mediumspringgreen] [h=00fa9a] \definecolor [greenyellow] [h=adff2f] \definecolor [limegreen] [h=32cd32] \definecolor [yellowgreen] [h=9acd32] \definecolor [forestgreen] [h=228b22] \definecolor [olivedrab] [h=6b8e23] \definecolor [darkkhaki] [h=bdb76b] \definecolor [khaki] [h=f0e68c] \definecolor [palegoldenrod] [h=eee8aa] \definecolor [lightgoldenrodyellow] [h=fafad2] \definecolor [lightyellow] [h=ffffe0] \definecolor [yellow] [h=ffff00] \definecolor [gold] [h=ffd700] \definecolor [lightgoldenrod] [h=eedd82] \definecolor [goldenrod] [h=daa520] \definecolor [darkgoldenrod] [h=b8860b] \definecolor [rosybrown] [h=bc8f8f] \definecolor [indianred] [h=cd5c5c] \definecolor [saddlebrown] [h=8b4513] \definecolor [sienna] [h=a0522d] \definecolor [peru] [h=cd853f] \definecolor [burlywood] [h=deb887] \definecolor [beige] [h=f5f5dc] \definecolor [wheat] [h=f5deb3] \definecolor [sandybrown] [h=f4a460] \definecolor [tan] [h=d2b48c] \definecolor [chocolate] [h=d2691e] \definecolor [firebrick] [h=b22222] \definecolor [brown] [h=a52a2a] \definecolor [darksalmon] [h=e9967a] \definecolor [salmon] [h=fa8072] \definecolor [lightsalmon] [h=ffa07a] \definecolor [orange] [h=ffa500] \definecolor [darkorange] [h=ff8c00] \definecolor [coral] [h=ff7f50] \definecolor [lightcoral] [h=f08080] \definecolor [tomato] [h=ff6347] \definecolor [orangered] [h=ff4500] \definecolor [red] [h=ff0000] \definecolor [hotpink] [h=ff69b4] \definecolor [deeppink] [h=ff1493] \definecolor [pink] [h=ffc0cb] \definecolor [lightpink] [h=ffb6c1] \definecolor [palevioletred] [h=db7093] \definecolor [maroon] [h=b03060] \definecolor [mediumvioletred] [h=c71585] \definecolor [violetred] [h=d02090] \definecolor [magenta] [h=ff00ff] \definecolor [violet] [h=ee82ee] \definecolor [plum] [h=dda0dd] \definecolor [orchid] [h=da70d6] \definecolor [mediumorchid] [h=ba55d3] \definecolor [darkorchid] [h=9932cc] \definecolor [darkviolet] [h=9400d3] \definecolor [blueviolet] [h=8a2be2] \definecolor [purple] [h=a020f0] \definecolor [mediumpurple] [h=9370db] \definecolor [thistle] [h=d8bfd8] \definecolor [snow1] [h=fffafa] \definecolor [snow2] [h=eee9e9] \definecolor [snow3] [h=cdc9c9] \definecolor [snow4] [h=8b8989] \definecolor [seashell1] [h=fff5ee] \definecolor [seashell2] [h=eee5de] \definecolor [seashell3] [h=cdc5bf] \definecolor [seashell4] [h=8b8682] \definecolor [antiquewhite1] [h=ffefdb] \definecolor [antiquewhite2] [h=eedfcc] \definecolor [antiquewhite3] [h=cdc0b0] \definecolor [antiquewhite4] [h=8b8378] \definecolor [bisque1] [h=ffe4c4] \definecolor [bisque2] [h=eed5b7] \definecolor [bisque3] [h=cdb79e] \definecolor [bisque4] [h=8b7d6b] \definecolor [peachpuff1] [h=ffdab9] \definecolor [peachpuff2] [h=eecbad] \definecolor [peachpuff3] [h=cdaf95] \definecolor [peachpuff4] [h=8b7765] \definecolor [navajowhite1] [h=ffdead] \definecolor [navajowhite2] [h=eecfa1] \definecolor [navajowhite3] [h=cdb38b] \definecolor [navajowhite4] [h=8b795e] \definecolor [lemonchiffon1] [h=fffacd] \definecolor [lemonchiffon2] [h=eee9bf] \definecolor [lemonchiffon3] [h=cdc9a5] \definecolor [lemonchiffon4] [h=8b8970] \definecolor [cornsilk1] [h=fff8dc] \definecolor [cornsilk2] [h=eee8cd] \definecolor [cornsilk3] [h=cdc8b1] \definecolor [cornsilk4] [h=8b8878] \definecolor [ivory1] [h=fffff0] \definecolor [ivory2] [h=eeeee0] \definecolor [ivory3] [h=cdcdc1] \definecolor [ivory4] [h=8b8b83] \definecolor [honeydew1] [h=f0fff0] \definecolor [honeydew2] [h=e0eee0] \definecolor [honeydew3] [h=c1cdc1] \definecolor [honeydew4] [h=838b83] \definecolor [lavenderblush1] [h=fff0f5] \definecolor [lavenderblush2] [h=eee0e5] \definecolor [lavenderblush3] [h=cdc1c5] \definecolor [lavenderblush4] [h=8b8386] \definecolor [mistyrose1] [h=ffe4e1] \definecolor [mistyrose2] [h=eed5d2] \definecolor [mistyrose3] [h=cdb7b5] \definecolor [mistyrose4] [h=8b7d7b] \definecolor [azure1] [h=f0ffff] \definecolor [azure2] [h=e0eeee] \definecolor [azure3] [h=c1cdcd] \definecolor [azure4] [h=838b8b] \definecolor [slateblue1] [h=836fff] \definecolor [slateblue2] [h=7a67ee] \definecolor [slateblue3] [h=6959cd] \definecolor [slateblue4] [h=473c8b] \definecolor [royalblue1] [h=4876ff] \definecolor [royalblue2] [h=436eee] \definecolor [royalblue3] [h=3a5fcd] \definecolor [royalblue4] [h=27408b] \definecolor [blue1] [h=0000ff] \definecolor [blue2] [h=0000ee] \definecolor [blue3] [h=0000cd] \definecolor [blue4] [h=00008b] \definecolor [dodgerblue1] [h=1e90ff] \definecolor [dodgerblue2] [h=1c86ee] \definecolor [dodgerblue3] [h=1874cd] \definecolor [dodgerblue4] [h=104e8b] \definecolor [steelblue1] [h=63b8ff] \definecolor [steelblue2] [h=5cacee] \definecolor [steelblue3] [h=4f94cd] \definecolor [steelblue4] [h=36648b] \definecolor [deepskyblue1] [h=00bfff] \definecolor [deepskyblue2] [h=00b2ee] \definecolor [deepskyblue3] [h=009acd] \definecolor [deepskyblue4] [h=00688b] \definecolor [skyblue1] [h=87ceff] \definecolor [skyblue2] [h=7ec0ee] \definecolor [skyblue3] [h=6ca6cd] \definecolor [skyblue4] [h=4a708b] \definecolor [lightskyblue1] [h=b0e2ff] \definecolor [lightskyblue2] [h=a4d3ee] \definecolor [lightskyblue3] [h=8db6cd] \definecolor [lightskyblue4] [h=607b8b] \definecolor [slategray1] [h=c6e2ff] \definecolor [slategray2] [h=b9d3ee] \definecolor [slategray3] [h=9fb6cd] \definecolor [slategray4] [h=6c7b8b] \definecolor [lightsteelblue1] [h=cae1ff] \definecolor [lightsteelblue2] [h=bcd2ee] \definecolor [lightsteelblue3] [h=a2b5cd] \definecolor [lightsteelblue4] [h=6e7b8b] \definecolor [lightblue1] [h=bfefff] \definecolor [lightblue2] [h=b2dfee] \definecolor [lightblue3] [h=9ac0cd] \definecolor [lightblue4] [h=68838b] \definecolor [lightcyan1] [h=e0ffff] \definecolor [lightcyan2] [h=d1eeee] \definecolor [lightcyan3] [h=b4cdcd] \definecolor [lightcyan4] [h=7a8b8b] \definecolor [paleturquoise1] [h=bbffff] \definecolor [paleturquoise2] [h=aeeeee] \definecolor [paleturquoise3] [h=96cdcd] \definecolor [paleturquoise4] [h=668b8b] \definecolor [cadetblue1] [h=98f5ff] \definecolor [cadetblue2] [h=8ee5ee] \definecolor [cadetblue3] [h=7ac5cd] \definecolor [cadetblue4] [h=53868b] \definecolor [turquoise1] [h=00f5ff] \definecolor [turquoise2] [h=00e5ee] \definecolor [turquoise3] [h=00c5cd] \definecolor [turquoise4] [h=00868b] \definecolor [cyan1] [h=00ffff] \definecolor [cyan2] [h=00eeee] \definecolor [cyan3] [h=00cdcd] \definecolor [cyan4] [h=008b8b] \definecolor [darkslategray1] [h=97ffff] \definecolor [darkslategray2] [h=8deeee] \definecolor [darkslategray3] [h=79cdcd] \definecolor [darkslategray4] [h=528b8b] \definecolor [aquamarine1] [h=7fffd4] \definecolor [aquamarine2] [h=76eec6] \definecolor [aquamarine3] [h=66cdaa] \definecolor [aquamarine4] [h=458b74] \definecolor [darkseagreen1] [h=c1ffc1] \definecolor [darkseagreen2] [h=b4eeb4] \definecolor [darkseagreen3] [h=9bcd9b] \definecolor [darkseagreen4] [h=698b69] \definecolor [seagreen1] [h=54ff9f] \definecolor [seagreen2] [h=4eee94] \definecolor [seagreen3] [h=43cd80] \definecolor [seagreen4] [h=2e8b57] \definecolor [palegreen1] [h=9aff9a] \definecolor [palegreen2] [h=90ee90] \definecolor [palegreen3] [h=7ccd7c] \definecolor [palegreen4] [h=548b54] \definecolor [springgreen1] [h=00ff7f] \definecolor [springgreen2] [h=00ee76] \definecolor [springgreen3] [h=00cd66] \definecolor [springgreen4] [h=008b45] \definecolor [green1] [h=00ff00] \definecolor [green2] [h=00ee00] \definecolor [green3] [h=00cd00] \definecolor [green4] [h=008b00] \definecolor [chartreuse1] [h=7fff00] \definecolor [chartreuse2] [h=76ee00] \definecolor [chartreuse3] [h=66cd00] \definecolor [chartreuse4] [h=458b00] \definecolor [olivedrab1] [h=c0ff3e] \definecolor [olivedrab2] [h=b3ee3a] \definecolor [olivedrab3] [h=9acd32] \definecolor [olivedrab4] [h=698b22] \definecolor [darkolivegreen1] [h=caff70] \definecolor [darkolivegreen2] [h=bcee68] \definecolor [darkolivegreen3] [h=a2cd5a] \definecolor [darkolivegreen4] [h=6e8b3d] \definecolor [khaki1] [h=fff68f] \definecolor [khaki2] [h=eee685] \definecolor [khaki3] [h=cdc673] \definecolor [khaki4] [h=8b864e] \definecolor [lightgoldenrod1] [h=ffec8b] \definecolor [lightgoldenrod2] [h=eedc82] \definecolor [lightgoldenrod3] [h=cdbe70] \definecolor [lightgoldenrod4] [h=8b814c] \definecolor [lightyellow1] [h=ffffe0] \definecolor [lightyellow2] [h=eeeed1] \definecolor [lightyellow3] [h=cdcdb4] \definecolor [lightyellow4] [h=8b8b7a] \definecolor [yellow1] [h=ffff00] \definecolor [yellow2] [h=eeee00] \definecolor [yellow3] [h=cdcd00] \definecolor [yellow4] [h=8b8b00] \definecolor [gold1] [h=ffd700] \definecolor [gold2] [h=eec900] \definecolor [gold3] [h=cdad00] \definecolor [gold4] [h=8b7500] \definecolor [goldenrod1] [h=ffc125] \definecolor [goldenrod2] [h=eeb422] \definecolor [goldenrod3] [h=cd9b1d] \definecolor [goldenrod4] [h=8b6914] \definecolor [darkgoldenrod1] [h=ffb90f] \definecolor [darkgoldenrod2] [h=eead0e] \definecolor [darkgoldenrod3] [h=cd950c] \definecolor [darkgoldenrod4] [h=8b6508] \definecolor [rosybrown1] [h=ffc1c1] \definecolor [rosybrown2] [h=eeb4b4] \definecolor [rosybrown3] [h=cd9b9b] \definecolor [rosybrown4] [h=8b6969] \definecolor [indianred1] [h=ff6a6a] \definecolor [indianred2] [h=ee6363] \definecolor [indianred3] [h=cd5555] \definecolor [indianred4] [h=8b3a3a] \definecolor [sienna1] [h=ff8247] \definecolor [sienna2] [h=ee7942] \definecolor [sienna3] [h=cd6839] \definecolor [sienna4] [h=8b4726] \definecolor [burlywood1] [h=ffd39b] \definecolor [burlywood2] [h=eec591] \definecolor [burlywood3] [h=cdaa7d] \definecolor [burlywood4] [h=8b7355] \definecolor [wheat1] [h=ffe7ba] \definecolor [wheat2] [h=eed8ae] \definecolor [wheat3] [h=cdba96] \definecolor [wheat4] [h=8b7e66] \definecolor [tan1] [h=ffa54f] \definecolor [tan2] [h=ee9a49] \definecolor [tan3] [h=cd853f] \definecolor [tan4] [h=8b5a2b] \definecolor [chocolate1] [h=ff7f24] \definecolor [chocolate2] [h=ee7621] \definecolor [chocolate3] [h=cd661d] \definecolor [chocolate4] [h=8b4513] \definecolor [firebrick1] [h=ff3030] \definecolor [firebrick2] [h=ee2c2c] \definecolor [firebrick3] [h=cd2626] \definecolor [firebrick4] [h=8b1a1a] \definecolor [brown1] [h=ff4040] \definecolor [brown2] [h=ee3b3b] \definecolor [brown3] [h=cd3333] \definecolor [brown4] [h=8b2323] \definecolor [salmon1] [h=ff8c69] \definecolor [salmon2] [h=ee8262] \definecolor [salmon3] [h=cd7054] \definecolor [salmon4] [h=8b4c39] \definecolor [lightsalmon1] [h=ffa07a] \definecolor [lightsalmon2] [h=ee9572] \definecolor [lightsalmon3] [h=cd8162] \definecolor [lightsalmon4] [h=8b5742] \definecolor [orange1] [h=ffa500] \definecolor [orange2] [h=ee9a00] \definecolor [orange3] [h=cd8500] \definecolor [orange4] [h=8b5a00] \definecolor [darkorange1] [h=ff7f00] \definecolor [darkorange2] [h=ee7600] \definecolor [darkorange3] [h=cd6600] \definecolor [darkorange4] [h=8b4500] \definecolor [coral1] [h=ff7256] \definecolor [coral2] [h=ee6a50] \definecolor [coral3] [h=cd5b45] \definecolor [coral4] [h=8b3e2f] \definecolor [tomato1] [h=ff6347] \definecolor [tomato2] [h=ee5c42] \definecolor [tomato3] [h=cd4f39] \definecolor [tomato4] [h=8b3626] \definecolor [orangered1] [h=ff4500] \definecolor [orangered2] [h=ee4000] \definecolor [orangered3] [h=cd3700] \definecolor [orangered4] [h=8b2500] \definecolor [red1] [h=ff0000] \definecolor [red2] [h=ee0000] \definecolor [red3] [h=cd0000] \definecolor [red4] [h=8b0000] \definecolor [debianred] [h=d70751] \definecolor [deeppink1] [h=ff1493] \definecolor [deeppink2] [h=ee1289] \definecolor [deeppink3] [h=cd1076] \definecolor [deeppink4] [h=8b0a50] \definecolor [hotpink1] [h=ff6eb4] \definecolor [hotpink2] [h=ee6aa7] \definecolor [hotpink3] [h=cd6090] \definecolor [hotpink4] [h=8b3a62] \definecolor [pink1] [h=ffb5c5] \definecolor [pink2] [h=eea9b8] \definecolor [pink3] [h=cd919e] \definecolor [pink4] [h=8b636c] \definecolor [lightpink1] [h=ffaeb9] \definecolor [lightpink2] [h=eea2ad] \definecolor [lightpink3] [h=cd8c95] \definecolor [lightpink4] [h=8b5f65] \definecolor [palevioletred1] [h=ff82ab] \definecolor [palevioletred2] [h=ee799f] \definecolor [palevioletred3] [h=cd6889] \definecolor [palevioletred4] [h=8b475d] \definecolor [maroon1] [h=ff34b3] \definecolor [maroon2] [h=ee30a7] \definecolor [maroon3] [h=cd2990] \definecolor [maroon4] [h=8b1c62] \definecolor [violetred1] [h=ff3e96] \definecolor [violetred2] [h=ee3a8c] \definecolor [violetred3] [h=cd3278] \definecolor [violetred4] [h=8b2252] \definecolor [magenta1] [h=ff00ff] \definecolor [magenta2] [h=ee00ee] \definecolor [magenta3] [h=cd00cd] \definecolor [magenta4] [h=8b008b] \definecolor [orchid1] [h=ff83fa] \definecolor [orchid2] [h=ee7ae9] \definecolor [orchid3] [h=cd69c9] \definecolor [orchid4] [h=8b4789] \definecolor [plum1] [h=ffbbff] \definecolor [plum2] [h=eeaeee] \definecolor [plum3] [h=cd96cd] \definecolor [plum4] [h=8b668b] \definecolor [mediumorchid1] [h=e066ff] \definecolor [mediumorchid2] [h=d15fee] \definecolor [mediumorchid3] [h=b452cd] \definecolor [mediumorchid4] [h=7a378b] \definecolor [darkorchid1] [h=bf3eff] \definecolor [darkorchid2] [h=b23aee] \definecolor [darkorchid3] [h=9a32cd] \definecolor [darkorchid4] [h=68228b] \definecolor [purple1] [h=9b30ff] \definecolor [purple2] [h=912cee] \definecolor [purple3] [h=7d26cd] \definecolor [purple4] [h=551a8b] \definecolor [mediumpurple1] [h=ab82ff] \definecolor [mediumpurple2] [h=9f79ee] \definecolor [mediumpurple3] [h=8968cd] \definecolor [mediumpurple4] [h=5d478b] \definecolor [thistle1] [h=ffe1ff] \definecolor [thistle2] [h=eed2ee] \definecolor [thistle3] [h=cdb5cd] \definecolor [thistle4] [h=8b7b8b] \definecolor [gray0] [s=0.00] \definecolor [grey0] [gray0] \definecolor [gray1] [s=0.01] \definecolor [grey1] [gray1] \definecolor [gray2] [s=0.02] \definecolor [grey2] [gray2] \definecolor [gray3] [s=0.03] \definecolor [grey3] [gray3] \definecolor [gray4] [s=0.04] \definecolor [grey4] [gray4] \definecolor [gray5] [s=0.05] \definecolor [grey5] [gray5] \definecolor [gray6] [s=0.06] \definecolor [grey6] [gray6] \definecolor [gray7] [s=0.07] \definecolor [grey7] [gray7] \definecolor [gray8] [s=0.08] \definecolor [grey8] [gray8] \definecolor [gray9] [s=0.09] \definecolor [grey9] [gray9] \definecolor [gray10] [s=0.10] \definecolor [grey10] [gray10] \definecolor [gray11] [s=0.11] \definecolor [grey11] [gray11] \definecolor [gray12] [s=0.12] \definecolor [grey12] [gray12] \definecolor [gray13] [s=0.13] \definecolor [grey13] [gray13] \definecolor [gray14] [s=0.14] \definecolor [grey14] [gray14] \definecolor [gray15] [s=0.15] \definecolor [grey15] [gray15] \definecolor [gray16] [s=0.16] \definecolor [grey16] [gray16] \definecolor [gray17] [s=0.17] \definecolor [grey17] [gray17] \definecolor [gray18] [s=0.18] \definecolor [grey18] [gray18] \definecolor [gray19] [s=0.19] \definecolor [grey19] [gray19] \definecolor [gray20] [s=0.20] \definecolor [grey20] [gray20] \definecolor [gray21] [s=0.21] \definecolor [grey21] [gray21] \definecolor [gray22] [s=0.22] \definecolor [grey22] [gray22] \definecolor [gray23] [s=0.23] \definecolor [grey23] [gray23] \definecolor [gray24] [s=0.24] \definecolor [grey24] [gray24] \definecolor [gray25] [s=0.25] \definecolor [grey25] [gray25] \definecolor [gray26] [s=0.26] \definecolor [grey26] [gray26] \definecolor [gray27] [s=0.27] \definecolor [grey27] [gray27] \definecolor [gray28] [s=0.28] \definecolor [grey28] [gray28] \definecolor [gray29] [s=0.29] \definecolor [grey29] [gray29] \definecolor [gray30] [s=0.30] \definecolor [grey30] [gray30] \definecolor [gray31] [s=0.31] \definecolor [grey31] [gray31] \definecolor [gray32] [s=0.32] \definecolor [grey32] [gray32] \definecolor [gray33] [s=0.33] \definecolor [grey33] [gray33] \definecolor [gray34] [s=0.34] \definecolor [grey34] [gray34] \definecolor [gray35] [s=0.35] \definecolor [grey35] [gray35] \definecolor [gray36] [s=0.36] \definecolor [grey36] [gray36] \definecolor [gray37] [s=0.37] \definecolor [grey37] [gray37] \definecolor [gray38] [s=0.38] \definecolor [grey38] [gray38] \definecolor [gray39] [s=0.39] \definecolor [grey39] [gray39] \definecolor [gray40] [s=0.40] \definecolor [grey40] [gray40] \definecolor [gray41] [s=0.41] \definecolor [grey41] [gray41] \definecolor [gray42] [s=0.42] \definecolor [grey42] [gray42] \definecolor [gray43] [s=0.43] \definecolor [grey43] [gray43] \definecolor [gray44] [s=0.44] \definecolor [grey44] [gray44] \definecolor [gray45] [s=0.45] \definecolor [grey45] [gray45] \definecolor [gray46] [s=0.46] \definecolor [grey46] [gray46] \definecolor [gray47] [s=0.47] \definecolor [grey47] [gray47] \definecolor [gray48] [s=0.48] \definecolor [grey48] [gray48] \definecolor [gray49] [s=0.49] \definecolor [grey49] [gray49] \definecolor [gray50] [s=0.50] \definecolor [grey50] [gray50] \definecolor [gray51] [s=0.51] \definecolor [grey51] [gray51] \definecolor [gray52] [s=0.52] \definecolor [grey52] [gray52] \definecolor [gray53] [s=0.53] \definecolor [grey53] [gray53] \definecolor [gray54] [s=0.54] \definecolor [grey54] [gray54] \definecolor [gray55] [s=0.55] \definecolor [grey55] [gray55] \definecolor [gray56] [s=0.56] \definecolor [grey56] [gray56] \definecolor [gray57] [s=0.57] \definecolor [grey57] [gray57] \definecolor [gray58] [s=0.58] \definecolor [grey58] [gray58] \definecolor [gray59] [s=0.59] \definecolor [grey59] [gray59] \definecolor [gray60] [s=0.60] \definecolor [grey60] [gray60] \definecolor [gray61] [s=0.61] \definecolor [grey61] [gray61] \definecolor [gray62] [s=0.62] \definecolor [grey62] [gray62] \definecolor [gray63] [s=0.63] \definecolor [grey63] [gray63] \definecolor [gray64] [s=0.64] \definecolor [grey64] [gray64] \definecolor [gray65] [s=0.65] \definecolor [grey65] [gray65] \definecolor [gray66] [s=0.66] \definecolor [grey66] [gray66] \definecolor [gray67] [s=0.67] \definecolor [grey67] [gray67] \definecolor [gray68] [s=0.68] \definecolor [grey68] [gray68] \definecolor [gray69] [s=0.69] \definecolor [grey69] [gray69] \definecolor [gray70] [s=0.70] \definecolor [grey70] [gray70] \definecolor [gray71] [s=0.71] \definecolor [grey71] [gray71] \definecolor [gray72] [s=0.72] \definecolor [grey72] [gray72] \definecolor [gray73] [s=0.73] \definecolor [grey73] [gray73] \definecolor [gray74] [s=0.74] \definecolor [grey74] [gray74] \definecolor [gray75] [s=0.75] \definecolor [grey75] [gray75] \definecolor [gray76] [s=0.76] \definecolor [grey76] [gray76] \definecolor [gray77] [s=0.77] \definecolor [grey77] [gray77] \definecolor [gray78] [s=0.78] \definecolor [grey78] [gray78] \definecolor [gray79] [s=0.79] \definecolor [grey79] [gray79] \definecolor [gray80] [s=0.80] \definecolor [grey80] [gray80] \definecolor [gray81] [s=0.81] \definecolor [grey81] [gray81] \definecolor [gray82] [s=0.82] \definecolor [grey82] [gray82] \definecolor [gray83] [s=0.83] \definecolor [grey83] [gray83] \definecolor [gray84] [s=0.84] \definecolor [grey84] [gray84] \definecolor [gray85] [s=0.85] \definecolor [grey85] [gray85] \definecolor [gray86] [s=0.86] \definecolor [grey86] [gray86] \definecolor [gray87] [s=0.87] \definecolor [grey87] [gray87] \definecolor [gray88] [s=0.88] \definecolor [grey88] [gray88] \definecolor [gray89] [s=0.89] \definecolor [grey89] [gray89] \definecolor [gray90] [s=0.90] \definecolor [grey90] [gray90] \definecolor [gray91] [s=0.91] \definecolor [grey91] [gray91] \definecolor [gray92] [s=0.92] \definecolor [grey92] [gray92] \definecolor [gray93] [s=0.93] \definecolor [grey93] [gray93] \definecolor [gray94] [s=0.94] \definecolor [grey94] [gray94] \definecolor [gray95] [s=0.95] \definecolor [grey95] [gray95] \definecolor [gray96] [s=0.96] \definecolor [grey96] [gray96] \definecolor [gray97] [s=0.97] \definecolor [grey97] [gray97] \definecolor [gray98] [s=0.98] \definecolor [grey98] [gray98] \definecolor [gray99] [s=0.99] \definecolor [grey99] [gray99] \definecolor [gray100] [s=1.00] \definecolor [grey100] [gray100] \definecolor [darkgrey] [s=0.66] \definecolor [darkgray] [darkgrey] \definecolor [darkblue] [h=00008b] \definecolor [darkcyan] [h=008b8b] \definecolor [darkmagenta] [h=8b008b] \definecolor [darkred] [h=8b0000] \definecolor [lightgreen] [h=90ee90] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/layo-ini.mkiv0000644000175000017500000000205711754241457024320 0ustar norbertnorbert%D \module %D [ file=layo-ini, %D version=2011.02.18, %D title=\CONTEXT\ Layout Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Layout Macros / Initialization} %D This module deals with the basic variables etc. for layout %D and code from other modules will move here. This will make %D the dependencies somewhat cleaner. \unprotect %D We need to check this in case a smaller format is loaded. \ifdefined\layoutisdoublesided \else \newconditional\layoutisdoublesided \fi \ifdefined\layoutissinglesided \else \newconditional\layoutissinglesided \fi \ifdefined\pagenoshift \else \newcount \pagenoshift \fi \ifdefined\realpageno \else \newcount \realpageno \fi \registerctxluafile{layo-ini}{1.001} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-flr.mkiv0000644000175000017500000000676012130411274024274 0ustar norbertnorbert%D \module %D [ file=spac-fil, %D version=2013.01.13, %D title=\CONTEXT\ Spacing Macros, %D subtitle=Fillers, %D author={Hans Hagen and Wolfgang Schuster}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Fillers} \unprotect %D A bit more extensive variant of a prototype posted by Wolfgang to the %D development list. Instead of dealing with a few leader types it makes %D sense to support them all as well as simple rule fillers. Eventually we %D can also use in for the mathfillers. We distinguish between alternatives %D and with them methods, and a checker is provided for use in applying %D e.g.\ fillers in lists. \installcorenamespace{filler} \installcorenamespace{filleralternative} \installcorenamespace{fillerleadermethod} \installcommandhandler \??filler {filler} \??filler \let\setupfillers\setupfiller \unexpanded\def\filler {\dosingleempty\spac_fillers_indeed} \unexpanded\def\checkedfiller#1% {\ifcsname\namedfillerhash{#1}\s!parent\endcsname \spac_fillers_indeed[#1]% \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi{#1}} \def\spac_fillers_indeed[#1]% {\removeunwantedspaces \begingroup \edef\currentfiller{#1}% \scratchdimen\fillerparameter\c!leftmargin\relax \ifdim\scratchdimen=\zeropoint\else \hskip\scratchdimen \fi \fillerparameter\c!left\relax \expandnamespaceparameter\??filleralternative\fillerparameter\c!alternative\s!unknown\relax \fillerparameter\c!right\relax \scratchdimen\fillerparameter\c!rightmargin\relax \ifdim\scratchdimen=\zeropoint\else \hskip\scratchdimen \fi \endgroup \ignorespaces} \setvalue{\??filleralternative\s!unknown}% {} \setvalue{\??filleralternative\v!symbol}% {\expandnamespaceparameter\??fillerleadermethod\fillerparameter\c!method\v!local \simplealignedbox {\fillerparameter\c!width}% {\fillerparameter\c!align}% {\fillerparameter\c!symbol}% \hfill} \setvalue{\??filleralternative\c!stretch}% {\hfill} \setvalue{\??filleralternative\c!rule}% {\expandnamespaceparameter\??fillerleadermethod\fillerparameter\c!method\v!local \hrule \!!height\fillerparameter\c!height \!!depth \fillerparameter\c!depth \hfill} \letvalue{\??fillerleadermethod\s!local }\normalleaders % overflow ends up inbetween (current box) \letvalue{\??fillerleadermethod\v!global}\normalgleaders % overflow ends up inbetween (outermost box) \letvalue{\??fillerleadermethod\v!middle}\normalcleaders % overflow ends up before, after (current box) \letvalue{\??fillerleadermethod\v!broad }\normalxleaders % overflow ends up before, inbetween, after (current box) \setupfillers [\c!width=\emwidth, \c!symbol=., \c!align=\v!middle, \c!height=.1\exheight, \c!depth=\zeropoint, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!alternative=\v!symbol, \c!method=\s!local] % maybe box -> symbol \protect \endinput % \definefiller[test-a][alternative=stretch] % \definefiller[test-b][alternative=symbol,symbol=!] % \definefiller[test-c][alternative=rule,height=.1ex,leftmargin=.5em,rightmargin=.25em] % \starttext % text\filler[test-a]text \par % text\filler[test-b]text \par % text\filler[test-c]text \par % text\checkedfiller{}text \par % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-averia.mkiv0000644000175000017500000001132511754241457025606 0ustar norbertnorbert%D \module %D [ file=type-imp-averia, %D version=2012.04.24, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Averia fonts (iotic.com), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The fonts can be downloaded from the (nice looking) page: %D %D \starttyping %D http://iotic.com/averia %D \stoptyping %D %D This link was posted by Aditya on the ConTeXt mailing list. %D %D There is no monospace font yet. \starttypescriptcollection[averia] \starttypescript [\s!serif] [averia] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:averia-regular] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:averia-bold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:averia-italic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:averia-bolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!serif] [averiaserif] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:averiaserif-regular] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:averiaserif-bold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:averiaserif-italic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:averiaserif-bolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!serif] [averialight] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:averia-light] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:averia-regular] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:averia-lightitalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:averia-italic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!serif] [averiaseriflight] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:averiaserif-light] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:averiaserif-regular] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:averiaserif-lightitalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:averiaserif-italic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [averiasans] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:averiasans-regular] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:averiasans-bold] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:averiasans-italic] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:averiasans-bolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [averiasanslight] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:averiasans-light] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:averiasans-regular] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:averiasans-lightitalic] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:averiasans-italic] [\s!features=\s!default] \stoptypescript % todo: rscale \starttypescript[averia] \definetypeface [averia] [\s!rm] [\s!serif] [averiaserif] [\s!default] \definetypeface [averia] [\s!ss] [\s!sans] [averiasans] [\s!default] \definetypeface [averia] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.850] \definetypeface [averia] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.025] \stoptypescript \starttypescript[averialight] \definetypeface [averialight] [\s!rm] [\s!serif] [averiaseriflight] [\s!default] \definetypeface [averialight] [\s!ss] [\s!sans] [averiasanslight] [\s!default] \definetypeface [averialight] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.850] \definetypeface [averialight] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.025] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ext.lua0000644000175000017500000007731012130411274024143 0ustar norbertnorbertif not modules then modules = { } end modules ['font-ext'] = { version = 1.001, comment = "companion to font-ini.mkiv and hand-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, type, byte = next, type, string.byte local gmatch, concat, format = string.gmatch, table.concat, string.format local utfchar = utf.char local commands, context = commands, context local fonts, utilities = fonts, utilities local trace_protrusion = false trackers.register("fonts.protrusion", function(v) trace_protrusion = v end) local trace_expansion = false trackers.register("fonts.expansion", function(v) trace_expansion = v end) local report_expansions = logs.reporter("fonts","expansions") local report_protrusions = logs.reporter("fonts","protrusions") -- todo: byte(..) => 0xHHHH --[[ldx--

When we implement functions that deal with features, most of them will depend of the font format. Here we define the few that are kind of neutral.

--ldx]]-- local handlers = fonts.handlers local hashes = fonts.hashes local otf = handlers.otf local registerotffeature = handlers.otf.features.register local registerafmfeature = handlers.afm.features.register local fontdata = hashes.identifiers local allocate = utilities.storage.allocate local settings_to_array = utilities.parsers.settings_to_array local getparameters = utilities.parsers.getparameters local setmetatableindex = table.setmetatableindex -- -- -- -- -- -- -- shared -- -- -- -- -- -- local function get_class_and_vector(tfmdata,value,where) -- "expansions" local g_where = tfmdata.goodies and tfmdata.goodies[where] local f_where = fonts[where] local g_classes = g_where and g_where.classes local f_classes = f_where and f_where.classes local class = (g_classes and g_classes[value]) or (f_classes and f_classes[value]) if class then local class_vector = class.vector local g_vectors = g_where and g_where.vectors local f_vectors = f_where and f_where.vectors local vector = (g_vectors and g_vectors[class_vector]) or (f_vectors and f_vectors[class_vector]) return class, vector end end -- -- -- -- -- -- -- expansion (hz) -- -- -- -- -- -- local expansions = fonts.expansions or allocate() fonts.expansions = expansions local classes = expansions.classes or allocate() local vectors = expansions.vectors or allocate() expansions.classes = classes expansions.vectors = vectors -- beware, pdftex itself uses percentages * 10 classes.preset = { stretch = 2, shrink = 2, step = .5, factor = 1 } function commands.setupfontexpansion(class,settings) getparameters(classes,class,'preset',settings) end classes['quality'] = { stretch = 2, shrink = 2, step = .5, vector = 'default', factor = 1 } vectors['default'] = { [byte('A')] = 0.5, [byte('B')] = 0.7, [byte('C')] = 0.7, [byte('D')] = 0.5, [byte('E')] = 0.7, [byte('F')] = 0.7, [byte('G')] = 0.5, [byte('H')] = 0.7, [byte('K')] = 0.7, [byte('M')] = 0.7, [byte('N')] = 0.7, [byte('O')] = 0.5, [byte('P')] = 0.7, [byte('Q')] = 0.5, [byte('R')] = 0.7, [byte('S')] = 0.7, [byte('U')] = 0.7, [byte('W')] = 0.7, [byte('Z')] = 0.7, [byte('a')] = 0.7, [byte('b')] = 0.7, [byte('c')] = 0.7, [byte('d')] = 0.7, [byte('e')] = 0.7, [byte('g')] = 0.7, [byte('h')] = 0.7, [byte('k')] = 0.7, [byte('m')] = 0.7, [byte('n')] = 0.7, [byte('o')] = 0.7, [byte('p')] = 0.7, [byte('q')] = 0.7, [byte('s')] = 0.7, [byte('u')] = 0.7, [byte('w')] = 0.7, [byte('z')] = 0.7, [byte('2')] = 0.7, [byte('3')] = 0.7, [byte('6')] = 0.7, [byte('8')] = 0.7, [byte('9')] = 0.7, } vectors['quality'] = vectors['default'] -- metatable ? local function initializeexpansion(tfmdata,value) if value then local class, vector = get_class_and_vector(tfmdata,value,"expansions") if class then if vector then local stretch = class.stretch or 0 local shrink = class.shrink or 0 local step = class.step or 0 local factor = class.factor or 1 if trace_expansion then report_expansions("setting class %a, vector %a, factor %a, stretch %a, shrink %a, step %a", value,class.vector,factor,stretch,shrink,step) end tfmdata.parameters.expansion = { stretch = 10 * stretch, shrink = 10 * shrink, step = 10 * step, factor = factor, auto = true, } local data = characters and characters.data for i, chr in next, tfmdata.characters do local v = vector[i] if data and not v then -- we could move the data test outside (needed for plain) local d = data[i] if d then local s = d.shcode if not s then -- sorry elseif type(s) == "table" then v = ((vector[s[1]] or 0) + (vector[s[#s]] or 0)) / 2 else v = vector[s] or 0 end end end if v and v ~= 0 then chr.expansion_factor = v*factor else -- can be option chr.expansion_factor = factor end end elseif trace_expansion then report_expansions("unknown vector %a in class %a",class.vector,value) end elseif trace_expansion then report_expansions("unknown class %a",value) end end end registerotffeature { name = "expansion", description = "apply hz optimization", initializers = { base = initializeexpansion, node = initializeexpansion, } } registerafmfeature { name = "expansion", description = "apply hz optimization", initializers = { base = initializeexpansion, node = initializeexpansion, } } fonts.goodies.register("expansions", function(...) return fonts.goodies.report("expansions", trace_expansion, ...) end) local report_opbd = logs.reporter("fonts","otf opbd") -- -- -- -- -- -- -- protrusion -- -- -- -- -- -- fonts.protrusions = allocate() local protrusions = fonts.protrusions protrusions.classes = allocate() protrusions.vectors = allocate() local classes = protrusions.classes local vectors = protrusions.vectors -- the values need to be revisioned classes.preset = { factor = 1, left = 1, right = 1 } function commands.setupfontprotrusion(class,settings) getparameters(classes,class,'preset',settings) end classes['pure'] = { vector = 'pure', factor = 1 } classes['punctuation'] = { vector = 'punctuation', factor = 1 } classes['alpha'] = { vector = 'alpha', factor = 1 } classes['quality'] = { vector = 'quality', factor = 1 } vectors['pure'] = { [0x002C] = { 0, 1 }, -- comma [0x002E] = { 0, 1 }, -- period [0x003A] = { 0, 1 }, -- colon [0x003B] = { 0, 1 }, -- semicolon [0x002D] = { 0, 1 }, -- hyphen [0x00AD] = { 0, 1 }, -- also hyphen [0x2013] = { 0, 0.50 }, -- endash [0x2014] = { 0, 0.33 }, -- emdash [0x3001] = { 0, 1 }, -- ideographic comma 、 [0x3002] = { 0, 1 }, -- ideographic full stop 。 [0x060C] = { 0, 1 }, -- arabic comma ، [0x061B] = { 0, 1 }, -- arabic semicolon ؛ [0x06D4] = { 0, 1 }, -- arabic full stop ۔ } vectors['punctuation'] = { [0x003F] = { 0, 0.20 }, -- ? [0x00BF] = { 0, 0.20 }, -- ¿ [0x0021] = { 0, 0.20 }, -- ! [0x00A1] = { 0, 0.20 }, -- ¡ [0x0028] = { 0.05, 0 }, -- ( [0x0029] = { 0, 0.05 }, -- ) [0x005B] = { 0.05, 0 }, -- [ [0x005D] = { 0, 0.05 }, -- ] [0x002C] = { 0, 0.70 }, -- comma [0x002E] = { 0, 0.70 }, -- period [0x003A] = { 0, 0.50 }, -- colon [0x003B] = { 0, 0.50 }, -- semicolon [0x002D] = { 0, 0.70 }, -- hyphen [0x00AD] = { 0, 0.70 }, -- also hyphen [0x2013] = { 0, 0.30 }, -- endash [0x2014] = { 0, 0.20 }, -- emdash [0x060C] = { 0, 0.70 }, -- arabic comma [0x061B] = { 0, 0.50 }, -- arabic semicolon [0x06D4] = { 0, 0.70 }, -- arabic full stop [0x061F] = { 0, 0.20 }, -- ؟ -- todo: left and right quotes: .5 double, .7 single [0x2039] = { 0.70, 0.70 }, -- left single guillemet ‹ [0x203A] = { 0.70, 0.70 }, -- right single guillemet › [0x00AB] = { 0.50, 0.50 }, -- left guillemet « [0x00BB] = { 0.50, 0.50 }, -- right guillemet » [0x2018] = { 0.70, 0.70 }, -- left single quotation mark ‘ [0x2019] = { 0, 0.70 }, -- right single quotation mark ’ [0x201A] = { 0.70, 0 }, -- single low-9 quotation mark , [0x201B] = { 0.70, 0 }, -- single high-reversed-9 quotation mark ‛ [0x201C] = { 0.50, 0.50 }, -- left double quotation mark “ [0x201D] = { 0, 0.50 }, -- right double quotation mark ” [0x201E] = { 0.50, 0 }, -- double low-9 quotation mark „ [0x201F] = { 0.50, 0 }, -- double high-reversed-9 quotation mark ‟ } vectors['alpha'] = { [byte("A")] = { .05, .05 }, [byte("F")] = { 0, .05 }, [byte("J")] = { .05, 0 }, [byte("K")] = { 0, .05 }, [byte("L")] = { 0, .05 }, [byte("T")] = { .05, .05 }, [byte("V")] = { .05, .05 }, [byte("W")] = { .05, .05 }, [byte("X")] = { .05, .05 }, [byte("Y")] = { .05, .05 }, [byte("k")] = { 0, .05 }, [byte("r")] = { 0, .05 }, [byte("t")] = { 0, .05 }, [byte("v")] = { .05, .05 }, [byte("w")] = { .05, .05 }, [byte("x")] = { .05, .05 }, [byte("y")] = { .05, .05 }, } vectors['quality'] = table.merged( vectors['punctuation'], vectors['alpha'] ) -- As this is experimental code, users should not depend on it. The -- implications are still discussed on the ConTeXt Dev List and we're -- not sure yet what exactly the spec is (the next code is tested with -- a gyre font patched by / fea file made by Khaled Hosny). The double -- trick should not be needed it proper hanging punctuation is used in -- which case values < 1 can be used. -- -- preferred (in context, usine vectors): -- -- \definefontfeature[whatever][default][mode=node,protrusion=quality] -- -- using lfbd and rtbd, with possibibility to enable only one side : -- -- \definefontfeature[whocares][default][mode=node,protrusion=yes, opbd=yes,script=latn] -- \definefontfeature[whocares][default][mode=node,protrusion=right,opbd=yes,script=latn] -- -- idem, using multiplier -- -- \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn] -- \definefontfeature[whocares][default][mode=node,protrusion=double,opbd=yes,script=latn] -- -- idem, using named feature file (less frozen): -- -- \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn,featurefile=texgyrepagella-regularxx.fea] classes['double'] = { -- for testing opbd factor = 2, left = 1, right = 1, } local function map_opbd_onto_protrusion(tfmdata,value,opbd) local characters = tfmdata.characters local descriptions = tfmdata.descriptions local properties = tfmdata.properties local rawdata = tfmdata.shared.rawdata local lookuphash = rawdata.lookuphash local script = properties.script local language = properties.language local done, factor, left, right = false, 1, 1, 1 local class = classes[value] if class then factor = class.factor or 1 left = class.left or 1 right = class.right or 1 else factor = tonumber(value) or 1 end if opbd ~= "right" then local validlookups, lookuplist = otf.collectlookups(rawdata,"lfbd",script,language) if validlookups then for i=1,#lookuplist do local lookup = lookuplist[i] local data = lookuphash[lookup] if data then if trace_protrusion then report_protrusions("setting left using lfbd lookup %a",lookup) end for k, v in next, data do -- local p = - v[3] / descriptions[k].width-- or 1 ~= 0 too but the same local p = - (v[1] / 1000) * factor * left characters[k].left_protruding = p if trace_protrusion then report_protrusions("lfbd -> %s -> %C -> %0.03f (% t)",lookup,k,p,v) end end done = true end end end end if opbd ~= "left" then local validlookups, lookuplist = otf.collectlookups(rawdata,"rtbd",script,language) if validlookups then for i=1,#lookuplist do local lookup = lookuplist[i] local data = lookuphash[lookup] if data then if trace_protrusion then report_protrusions("setting right using rtbd lookup %a",lookup) end for k, v in next, data do -- local p = v[3] / descriptions[k].width -- or 3 local p = (v[1] / 1000) * factor * right characters[k].right_protruding = p if trace_protrusion then report_protrusions("rtbd -> %s -> %C -> %0.03f (% t)",lookup,k,p,v) end end end done = true end end end local parameters = tfmdata.parameters local protrusion = tfmdata.protrusion if not protrusion then parameters.protrusion = { auto = true } else protrusion.auto = true end end -- The opbd test is just there because it was discussed on the -- context development list. However, the mentioned fxlbi.otf font -- only has some kerns for digits. So, consider this feature not -- supported till we have a proper test font. local function initializeprotrusion(tfmdata,value) if value then local opbd = tfmdata.shared.features.opbd if opbd then -- possible values: left right both yes no (experimental) map_opbd_onto_protrusion(tfmdata,value,opbd) else local class, vector = get_class_and_vector(tfmdata,value,"protrusions") if class then if vector then local factor = class.factor or 1 local left = class.left or 1 local right = class.right or 1 if trace_protrusion then report_protrusions("setting class %a, vector %a, factor %a, left %a, right %a", value,class.vector,factor,left,right) end local data = characters.data local emwidth = tfmdata.parameters.quad tfmdata.parameters.protrusion = { factor = factor, left = left, right = right, auto = true, } for i, chr in next, tfmdata.characters do local v, pl, pr = vector[i], nil, nil if v then pl, pr = v[1], v[2] else local d = data[i] if d then local s = d.shcode if not s then -- sorry elseif type(s) == "table" then local vl, vr = vector[s[1]], vector[s[#s]] if vl then pl = vl[1] end if vr then pr = vr[2] end else v = vector[s] if v then pl, pr = v[1], v[2] end end end end if pl and pl ~= 0 then chr.left_protruding = left *pl*factor end if pr and pr ~= 0 then chr.right_protruding = right*pr*factor end end elseif trace_protrusion then report_protrusions("unknown vector %a in class %a",class.vector,value) end elseif trace_protrusion then report_protrusions("unknown class %a",value) end end end end registerotffeature { name = "protrusion", description = "shift characters into the left and or right margin", initializers = { base = initializeprotrusion, node = initializeprotrusion, } } registerafmfeature { name = "protrusion", description = "shift characters into the left and or right margin", initializers = { base = initializeprotrusion, node = initializeprotrusion, } } fonts.goodies.register("protrusions", function(...) return fonts.goodies.report("protrusions", trace_protrusion, ...) end) -- -- -- local function initializenostackmath(tfmdata,value) tfmdata.properties.nostackmath = value and true end registerotffeature { name = "nostackmath", description = "disable math stacking mechanism", initializers = { base = initializenostackmath, node = initializenostackmath, } } local function initializeitlc(tfmdata,value) -- hm, always value if value then -- the magic 40 and it formula come from Dohyun Kim but we might need another guess local parameters = tfmdata.parameters local italicangle = parameters.italicangle if italicangle and italicangle ~= 0 then local properties = tfmdata.properties local factor = tonumber(value) or 1 properties.hasitalics = true properties.autoitalicamount = factor * (parameters.uwidth or 40)/2 end end end registerotffeature { name = "itlc", description = "italic correction", initializers = { base = initializeitlc, node = initializeitlc, } } registerafmfeature { name = "itlc", description = "italic correction", initializers = { base = initializeitlc, node = initializeitlc, } } local function initializetextitalics(tfmdata,value) -- yes no delay local delay = value == "delay" tfmdata.properties.textitalics = delay and true or value tfmdata.properties.delaytextitalics = delay end registerotffeature { name = "textitalics", description = "use alternative text italic correction", initializers = { base = initializetextitalics, node = initializetextitalics, } } registerafmfeature { name = "textitalics", description = "use alternative text italic correction", initializers = { base = initializetextitalics, node = initializetextitalics, } } -- slanting local function initializeslant(tfmdata,value) value = tonumber(value) if not value then value = 0 elseif value > 1 then value = 1 elseif value < -1 then value = -1 end tfmdata.parameters.slantfactor = value end registerotffeature { name = "slant", description = "slant glyphs", initializers = { base = initializeslant, node = initializeslant, } } registerafmfeature { name = "slant", description = "slant glyphs", initializers = { base = initializeslant, node = initializeslant, } } local function initializeextend(tfmdata,value) value = tonumber(value) if not value then value = 0 elseif value > 10 then value = 10 elseif value < -10 then value = -10 end tfmdata.parameters.extendfactor = value end registerotffeature { name = "extend", description = "scale glyphs horizontally", initializers = { base = initializeextend, node = initializeextend, } } registerafmfeature { name = "extend", description = "scale glyphs horizontally", initializers = { base = initializeextend, node = initializeextend, } } -- For Wolfgang Schuster: -- -- \definefontfeature[thisway][default][script=hang,language=zhs,dimensions={2,2,2}] -- \definedfont[file:kozminpr6nregular*thisway] -- -- For the moment we don't mess with the descriptions. local function manipulatedimensions(tfmdata,key,value) if type(value) == "string" and value ~= "" then local characters = tfmdata.characters local parameters = tfmdata.parameters local emwidth = parameters.quad local exheight = parameters.xheight local spec = settings_to_array(value) local width = (spec[1] or 0) * emwidth local height = (spec[2] or 0) * exheight local depth = (spec[3] or 0) * exheight if width > 0 then local resources = tfmdata.resources local additions = { } local private = resources.private for unicode, old_c in next, characters do local oldwidth = old_c.width if oldwidth ~= width then -- Defining the tables in one step is more efficient -- than adding fields later. private = private + 1 local new_c local commands = { { "right", (width - oldwidth) / 2 }, { "slot", 1, private }, } if height > 0 then if depth > 0 then new_c = { width = width, height = height, depth = depth, commands = commands, } else new_c = { width = width, height = height, commands = commands, } end else if depth > 0 then new_c = { width = width, depth = depth, commands = commands, } else new_c = { width = width, commands = commands, } end end setmetatableindex(new_c,old_c) characters[unicode] = new_c additions[private] = old_c end end for k, v in next, additions do characters[k] = v end resources.private = private elseif height > 0 and depth > 0 then for unicode, old_c in next, characters do old_c.height = height old_c.depth = depth end elseif height > 0 then for unicode, old_c in next, characters do old_c.height = height end elseif depth > 0 then for unicode, old_c in next, characters do old_c.depth = depth end end end end registerotffeature { name = "dimensions", description = "force dimensions", manipulators = { base = manipulatedimensions, node = manipulatedimensions, } } -- for zhichu chen (see mailing list archive): we might add a few more variants -- in due time -- -- \definefontfeature[boxed][default][boundingbox=yes] % paleblue -- -- maybe: -- -- \definecolor[DummyColor][s=.75,t=.5,a=1] {\DummyColor test} \nopdfcompression -- -- local gray = { "special", "pdf: /Tr1 gs .75 g" } -- local black = { "special", "pdf: /Tr0 gs 0 g" } local push = { "push" } local pop = { "pop" } local gray = { "special", "pdf: .75 g" } local black = { "special", "pdf: 0 g" } local downcache = { } -- handy for huge cjk fonts local rulecache = { } -- handy for huge cjk fonts setmetatableindex(downcache,function(t,d) local v = { "down", d } t[d] = v return v end) setmetatableindex(rulecache,function(t,h) local v = { } t[h] = v setmetatableindex(v,function(t,w) local v = { "rule", h, w } t[w] = v return v end) return v end) local function showboundingbox(tfmdata,key,value) if value then local vfspecials = backends.pdf.tables.vfspecials local gray = vfspecials and (vfspecials.rulecolors[value] or vfspecials.rulecolors.palegray) or gray local characters = tfmdata.characters local resources = tfmdata.resources local additions = { } local private = resources.private for unicode, old_c in next, characters do private = private + 1 local width = old_c.width or 0 local height = old_c.height or 0 local depth = old_c.depth or 0 local new_c if depth == 0 then new_c = { width = width, height = height, commands = { push, gray, rulecache[height][width], black, pop, { "slot", 1, private }, } } else new_c = { width = width, height = height, depth = depth, commands = { push, downcache[depth], gray, rulecache[height+depth][width], black, pop, { "slot", 1, private }, } } end setmetatableindex(new_c,old_c) characters[unicode] = new_c additions[private] = old_c end for k, v in next, additions do characters[k] = v end resources.private = private end end registerotffeature { name = "boundingbox", description = "show boundingbox", manipulators = { base = showboundingbox, node = showboundingbox, } } -- -- historic stuff, move from font-ota (handled differently, typo-rep) -- -- local delete_node = nodes.delete -- local fontdata = fonts.hashes.identifiers -- -- local nodecodes = nodes.nodecodes -- local glyph_code = nodecodes.glyph -- -- local strippables = allocate() -- fonts.strippables = strippables -- -- strippables.joiners = table.tohash { -- 0x200C, -- zwnj -- 0x200D, -- zwj -- } -- -- strippables.all = table.tohash { -- 0x000AD, 0x017B4, 0x017B5, 0x0200B, 0x0200C, 0x0200D, 0x0200E, 0x0200F, 0x0202A, 0x0202B, -- 0x0202C, 0x0202D, 0x0202E, 0x02060, 0x02061, 0x02062, 0x02063, 0x0206A, 0x0206B, 0x0206C, -- 0x0206D, 0x0206E, 0x0206F, 0x0FEFF, 0x1D173, 0x1D174, 0x1D175, 0x1D176, 0x1D177, 0x1D178, -- 0x1D179, 0x1D17A, 0xE0001, 0xE0020, 0xE0021, 0xE0022, 0xE0023, 0xE0024, 0xE0025, 0xE0026, -- 0xE0027, 0xE0028, 0xE0029, 0xE002A, 0xE002B, 0xE002C, 0xE002D, 0xE002E, 0xE002F, 0xE0030, -- 0xE0031, 0xE0032, 0xE0033, 0xE0034, 0xE0035, 0xE0036, 0xE0037, 0xE0038, 0xE0039, 0xE003A, -- 0xE003B, 0xE003C, 0xE003D, 0xE003E, 0xE003F, 0xE0040, 0xE0041, 0xE0042, 0xE0043, 0xE0044, -- 0xE0045, 0xE0046, 0xE0047, 0xE0048, 0xE0049, 0xE004A, 0xE004B, 0xE004C, 0xE004D, 0xE004E, -- 0xE004F, 0xE0050, 0xE0051, 0xE0052, 0xE0053, 0xE0054, 0xE0055, 0xE0056, 0xE0057, 0xE0058, -- 0xE0059, 0xE005A, 0xE005B, 0xE005C, 0xE005D, 0xE005E, 0xE005F, 0xE0060, 0xE0061, 0xE0062, -- 0xE0063, 0xE0064, 0xE0065, 0xE0066, 0xE0067, 0xE0068, 0xE0069, 0xE006A, 0xE006B, 0xE006C, -- 0xE006D, 0xE006E, 0xE006F, 0xE0070, 0xE0071, 0xE0072, 0xE0073, 0xE0074, 0xE0075, 0xE0076, -- 0xE0077, 0xE0078, 0xE0079, 0xE007A, 0xE007B, 0xE007C, 0xE007D, 0xE007E, 0xE007F, -- } -- -- strippables[true] = strippables.joiners -- -- local function processformatters(head,font) -- local subset = fontdata[font].shared.features.formatters -- local vector = subset and strippables[subset] -- if vector then -- local current, done = head, false -- while current do -- if current.id == glyph_code and current.subtype<256 and current.font == font then -- local char = current.char -- if vector[char] then -- head, current = delete_node(head,current) -- done = true -- else -- current = current.next -- end -- else -- current = current.next -- end -- end -- return head, done -- else -- return head, false -- end -- end -- -- registerotffeature { -- name = "formatters", -- description = "hide formatting characters", -- methods = { -- base = processformatters, -- node = processformatters, -- } -- } -- a handy helper (might change or be moved to another namespace) local new_special = nodes.pool.special local new_glyph = nodes.pool.glyph local hpack_node = node.hpack function fonts.helpers.addprivate(tfmdata,name,characterdata) local properties = tfmdata.properties local privates = properties.privates local lastprivate = properties.lastprivate if lastprivate then lastprivate = lastprivate + 1 else lastprivate = 0xE000 end if not privates then privates = { } properties.privates = privates end if name then privates[name] = lastprivate end properties.lastprivate = lastprivate tfmdata.characters[lastprivate] = characterdata if properties.finalized then properties.lateprivates = true end return lastprivate end function fonts.helpers.getprivatenode(tfmdata,name) local properties = tfmdata.properties local privates = properties and properties.privates if privates then local p = privates[name] if p then local char = tfmdata.characters[p] local commands = char.commands if commands then local fake = hpack_node(new_special(commands[1][2])) fake.width = char.width fake.height = char.height fake.depth = char.depth return fake else -- todo: set current attribibutes return new_glyph(properties.id,p) end end end end function fonts.helpers.hasprivate(tfmdata,name) local properties = tfmdata.properties local privates = properties and properties.privates return privates and privates[name] or false end function commands.getprivatechar(name) context(fonts.helpers.getprivatenode(fontdata[font.current()],name)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-run.mkii0000644000175000017500000001004111754241457024305 0ustar norbertnorbert%D \module %D [ file=math-run, %D version=2001.23.04, %D title=\CONTEXT\ Math Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Runtime Macros} \unprotect \ifx\showmathmodern\undefined \global\chardef\showmathmodern\zerocount \fi \gdef\showmathcharacters% nearly \showcharacters {\par \bgroup \ifcase\showmathmodern\or\ifx\modern\undefined\chardef\showmathmodern\zerocount\fi\fi \setuptextrules[\c!bodyfont=,\c!style=] \starttextrule{math characters -- \currentmathcollection} \whitespace \dontcomplain \forgetall \def\startmathcollection[##1]{} \let\stopmathcollection\relax \dimen0\zeropoint \dimen2\zeropoint \def\definemathsymbol {\dosixtupleempty\dodefinemathsymbol} \def\definemathcharacter{\dosixtupleempty\dodefinemathcharacter} \def\definemathcommand {\dotripleempty \dodefinemathcommand} %\newcounter\mathcolor \def\dodefinemathsymbol[##1][##2][##3][##4][##5][##6]% {%\doifcolorelse{math \purefamilyhex{##3}}{} % {\increment\mathcolor % \definecolor[math \purefamilyhex{##3}][\mathcolor]}% \setbox0\hbox spread 1em{\mathematics{\getvalue{##1}{}{}{}}}% \ifdim\wd0>\dimen0 \dimen0=\wd0 \fi \setbox2\hbox spread 1em{\hbox to 1em{\tttf\purefamilyhex{##3}\hss}\box0 ##1}% \ifdim\wd2>\dimen2 \dimen2=\wd2 \fi} \def\dodefinemathcharacter[##1][##2][##3][##4][##5][##6]{} \def\dodefinemathcommand [##1][##2][##3]##4{} \readsysfile{\f!mathprefix tex.mkii}\!!doneatrue\!!doneafalse \readsysfile{\f!mathprefix ams.mkii}\!!donebtrue\!!donebfalse \if!!donea \if!!doneb \edef\encwidth{\the\dimen0} \dimen0=\hsize \advance\dimen0 2em \advance\dimen2 2em \ifcase\showmathmodern\or\advance\dimen2 4em\fi \divide \dimen0 by \dimen2 \advance\dimen0 1sp \edef\enccols{\number\dimen0} \startcolumns[\c!n=\enccols,\c!distance=2em] \def\dodefinemathsymbol[##1][##2][##3][##4][##5][##6]% {%\localcolortrue %\color % [math \purefamilyhex{##3}] {\hbox {\ifcase\showmathmodern\or \hbox to \encwidth{\modern\let\mathcollection\nomathcollection\mathematics{\getvalue{##1}{}{}{}}\hss}% \fi \hbox to \encwidth{\mathematics{\getvalue{##1}{}{}{}}\hss}% \hbox to 1em{\tttf\purefamilyhex{##3}\hss}##1}\par}} \readsysfile{\f!mathprefix tex.mkii}\donothing\donothing \readsysfile{\f!mathprefix ams.mkii}\donothing\donothing \stopcolumns \else \par \tttf no chars in \f!mathprefix ams\par \fi \else \par \tttf no chars in \f!mathprefix tex\par \fi \stoptextrule \egroup} % \definecolor[math \purefamilyhex{mr}] [darkred] % \definecolor[math \purefamilyhex{mi}] [darkgreen] % \definecolor[math \purefamilyhex{sy}] [darkblue] % \definecolor[math \purefamilyhex{ex}] [darkmagenta] % \definecolor[math \purefamilyhex{nn}] [darkyellow] % \definecolor[math \purefamilyhex{ma}] [lightred] % \definecolor[math \purefamilyhex{mb}] [lightgreen] % \definecolor[math \purefamilyhex{mc}] [lightblue] % \definecolor[math \purefamilyhex{md}] [lightmagenta] \gdef\showmathtoken#1% {\starttabulate[|lT|lT|lT|l|] \NC token \NC #1 \NC \NR \NC collection \NC \ifcsname\@mt@\mathcollection#1\endcsname \mathcollection \else\ifcsname\@mt@\nomathcollection#1\endcsname \nomathcollection \else ?% \fi\fi \NC \NR \NC visualization \NC \mathematics{\getvalue{#1}} \NC \NR \NC definition \NC \tttf \@EA\defconvertedcommand\@EA\ascii\csname\@mt@\mathcollection#1\endcsname \ascii \NC \NR \stoptabulate} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-dir-05.mkii0000644000175000017500000000271611754241457024031 0ustar norbertnorbert%D \module %D [ file=x-dir-05, %D version=2003.05.10, % around that time -) %D title=\CONTEXT\ Directory Handling, %D subtitle=Access, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setvariables [filestate] [name=,base=,type=,size=,permissions=,date=] \def\savefilestate {\dodoubleargument\dosavefilestate} \def\dosavefilestate[#1][#2]% {\startnointerference \setxvariables [#1] [name=#2,base=,type=,size=,permissions=,date=] \executesystemcommand{texmfstart xmltools.rb --dir --pattern=\getvariable{#1}{name} --output=xmldir.tmp} \defineXMLprocess [files] \defineXMLprocess [directory] \defineXMLenvironment [file] {\defineXMLsave [base] \defineXMLsave [type] \defineXMLsave [size] \defineXMLsave [permissions] \defineXMLsave [date]} {\setxvariables [#1] [name=\XMLop{name}, base=\XMLflush{base}, type=\XMLflush{type}, size=\XMLflush{size}, permissions=\XMLflush{permissions}, date=\XMLflush{date}]} \startXMLignore \processXMLfile{xmldir.tmp} \stopXMLignore \stopnointerference} \def\getfilestate#1% old one {\savefilestate[filestate][#1]} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-run.mkii0000644000175000017500000002670311754241457024336 0ustar norbertnorbert%D \module %D [ file=font-run, %D version=1998.09.11, % (second) %D version=2001.02.20, % (third) %D title=\CONTEXT\ Font Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code is hooked into the core macros and saves some %D format space.] \unprotect \gdef\@@onlyenglish#1% {\blank{\tttf \type {#1} is only available in the english interface}\blank} \gdef\dosetshowfonttitle#1% {\tabskip\zeropoint \parindent\zeropoint \setlocalhsize \doifelsenothing{#1} {\def\title{[\the\bodyfontsize]}} {\switchtobodyfont[#1]\def\title{[#1]}} \doifsomething\fontclass {\doifnot{[\fontclass]}\title {\edef\title{[\fontclass]\space\title}}}} \gdef\showbodyfont {\dosingleempty\doshowbodyfont} \gdef\doshowbodyfont[#1]% {\ifinsidefloat\else\startbaselinecorrection\fi \vbox {\dosetshowfonttitle{#1}% \def\bigstrut##1##2% {\hbox{\vrule \!!height##1\strutht \!!depth ##2\strutdp \!!width \zeropoint}} \def\next##1##2##3% {&&##1&&##2\tf##3&&##2\sc##3% &&##2\sl##3&&##2\it##3&&##2\bf##3&&##2\bs##3&&##2\bi##3% &&##2\tfx##3&&##2\tfxx##3% &&##2\tfa##3&&##2\tfb##3&&##2\tfc##3&&##2\tfd##3&\cr}% \halign to \localhsize {\bigstrut{1.5}{2}##&\vrule## \tabskip=\!!zeropoint \!!plus 1fill &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&##\vrule \tabskip=\!!zeropoint\cr \noalign{\hrule} &\multispan{29}{\vrule\hfil\tttf\strut\title\hfil \llap{\string\mr\hbox to 1em{\hss:\hss}$\mr \languageparameter\c!text$\quad}\vrule}\cr \noalign{\hrule}\next{}{\tt\string}{} \noalign{\hrule}\next{\tt\string\rm}\rm{\languageparameter\c!text} \noalign{\hrule}\next{\tt\string\ss}\ss{\languageparameter\c!text} \noalign{\hrule}\next{\tt\string\tt}\tt{\languageparameter\c!text} \noalign{\hrule}}} \ifinsidefloat\else\stopbaselinecorrection\fi} \gdef\showbodyfontenvironment {\dosingleempty\doshowbodyfontenvironment} \gdef\doshowbodyfontenvironment[#1]% {\ifinsidefloat\else\startbaselinecorrection\fi \vbox {\dosetshowfonttitle{#1}% \def\next##1% {&&\getvalue{\bodyfontvariable{##1\s!text}}% &&\getvalue{\bodyfontvariable{##1\s!script}}% &&\getvalue{\bodyfontvariable{##1\s!scriptscript}}% &&\getvalue{\bodyfontvariable{##1\c!x}}% &&\getvalue{\bodyfontvariable{##1\c!xx}}% &&\getvalue{\bodyfontvariable{##1\interfaced\v!small}}% &&\getvalue{\bodyfontvariable{##1\interfaced\v!big}}% &&\edef\next{\getvalue{\bodyfontvariable{##1\c!interlinespace}}}\ifx\next\empty not set\else\next\fi&\cr \noalign{\hrule}} \halign to \localhsize {##&\vrule##\strut \tabskip=\!!zeropoint \!!plus 1fill &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&##\vrule \tabskip\zeropoint\cr \noalign{\hrule} &\multispan{17}{\vrule\hfil\tttf\strut\title\hfil}\vrule\cr \noalign{\hrule} &&\tttf\tx\s!text&&\tttf\tx\s!script&&\tttf\tx\s!scriptscript &&\tttf\tx\c!x&&\tttf\tx\c!xx&&\tttf\tx\v!small&&\tttf\tx\v!big &&\tttf\tx\c!interlinespace&\cr \noalign{\hrule} \@EA\globalprocesscommalist\@EA[\bodyfontenvironmentlist]\next}} \ifinsidefloat\else\stopbaselinecorrection\fi} \gdef\showfont {\dodoubleempty\doshowfont} \gdef\doshowfont[#1][#2]% {\bgroup \boxrulewidth=.1pt \setupcolors[\c!state=\v!local]% \iffirstargument \definefont[\s!dummy][#1]\dummy \else\ifdim2.5em>.05\hsize \tx \ifdim2.5em>.05\hsize \txx \fi\fi\fi \ifinsidefloat\else\startbaselinecorrection\fi \vbox\bgroup \forgetall \startoverlay {\vbox {\tf \setstrut \dummy \localcolortrue \offinterlineskip \dostepwiserecurse{0}{15}{1} {\let\row\recurselevel \hbox {\red \dostepwiserecurse{0}{15}{1} {\let\col\recurselevel \@EA\scratchcounter\normaldblquote\hexnumber\row\hexnumber\col\relax \edef\rowcol{\the\scratchcounter}% \iffontchar\font\scratchcounter \setbox\scratchbox\ruledhbox{\black\char\scratchcounter}% \ifdim\wd\scratchbox>\zeropoint \donetrue \else \donefalse \fi \else \setbox\scratchbox\hbox{\gray\vrule\!!width1ex\!!height.5ex\!!depth.5ex}% \fi \startoverlay {\tf\vbox to 2.5em {\vss \hbox to 2.5em {\dummy\ifdim\interwordspace=\zeropoint \setbox\scratchbox\hbox {\raise.5\dp\scratchbox\hbox {\lower.5\ht\scratchbox\copy\scratchbox}}% \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \else \ht\scratchbox\strutht \dp\scratchbox\strutdp \strut \fi \hss\copy\scratchbox\hss} \vss}} {\tf\vbox to 2.3em {\ifdone \hsize2.4em \blue \edef\theshowfontspecs {\ifnum\hyphenchar\font=\rowcol hyph\else \ifnum\skewchar \font=\rowcol skew\fi\fi}% \tinyfont % after \edef, else wrong font analyzed \doifnot\v!unknown{#2}{{\red\theshowfontspecs}}\hfill\number\rowcol \vfill \octnumber\rowcol\hfill\lchexnumbers\rowcol \par \fi}} \stopoverlay}}} \par}} {\tf\basegrid[\c!nx=16,\c!ny=16,\c!dx=2.5,\c!dy=2.5,\c!unit=em]} \stopoverlay \nointerlineskip \vskip2pt % the \noexpand before \blank is needed for non etex \edef\ascii{name: {\noexpand\black\fontname\font}} \def\do##1##2{\ifx##1\undefined\else\ifx##1\empty\else##2\fi\fi}% \doifelse\v!unknown{#2} {\edef\theshowfontspecs {name: {\noexpand\black\fontname\font}}} {\edef\theshowfontspecs {name: {\noexpand\black\fontname\font}\noexpand\quad \do\currentencoding{encoding: {\noexpand\black\currentencoding\noexpand\quad}}% \do\currentmapping {mapping: {\noexpand\black\currentmapping \noexpand\quad}}% \do\fonthandling {handling: {\noexpand\black\fonthandling }}}}% \tf % also sets em \hbox to 40em{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs} \egroup \ifinsidefloat\else\stopbaselinecorrection\fi \egroup} \gdef\showfontstyle {\dotripleempty\doshowfontstyle} \gdef\doshowfontstyle[#1][#2][#3]% {\ifthirdargument \bgroup \raggedright \switchtobodyfont[#1] \def\dodocommand##1##2% {\starttextrule{\tttf #1 ##1 ##2} \nobreak \getvalue{##2}% \dorecurse{255} {\iffontchar\font\recurselevel\relax \char\recurselevel\relax\space \fi} \par \nobreak \stoptextrule} \def\docommand##1% {\getvalue{##1}\processcommacommand[#3]{\dodocommand{##1}}} \processcommalist[#2]\docommand \egroup \else\ifsecondargument \showfontstyle[#1][#2][\fontalternativelist]% math is gone \else \showfontstyle[#1][\c!rm]\showfontstyle[#1][\c!ss] \showfontstyle[#1][\c!tt]\showfontstyle[#1][\c!mm] \fi\fi} \gdef\showligature#1% {\hbox{\type{#1}\enspace\red\ruledhbox{\black#1}}} \gdef\showligatures[#1]% {\ifx\starttabulate\undefined \@@onlyenglish\showligatures \else \bgroup \setupcolors[\c!state=\v!local]% \def\show##1{\hbox{\red\ruledhbox{\black##1}}}% \definefont[\s!dummy][#1]\dummy \starttabulate[|*{9}{c|}] \NC\type{ff}\NC\type{fi}\NC\type{fl}\NC\type{ffi}\NC\type{ffl}\NC \type{``}\NC\type{''}\NC\type{--}\NC\type{---}\NC\NR \NC\show{ff}\NC\show{fi}\NC\show{fl}\NC\show{ffi}\NC\show{ffl}\NC \show{``}\NC\show{''}\NC\show{--}\NC\show{---}\NC\NR \stoptabulate \egroup \fi} \gdef\showfontstrip {\dosingleempty\doshowfontstrip} \gdef\doshowfontstrip[#1]% {\ifx\starttabulate\undefined \@@onlyenglish\showfontstrip \else \bgroup \def\dofontstripa##1##2% {\tttf\string##1} \def\dofontstripb##1##2% {\ruledhbox{\switchtobodyfont[#1]##1{##2}}} \def\dofontstripc##1##2% {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}% \tt\tfx\the\ht\scratchbox}% \def\dofontstripd##1##2% {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}% \tt\tfx\the\wd\scratchbox}% \def\fontstrip##1##2##3% {\NC##2\rm{##3}\NC ##2\ss{##3}\NC ##2\tt{##3}\NC ##2\mathematics{##3}\NC \tttf##1\NR} \starttabulate[|c|c|c|c|c|] \fontstrip\relax\dofontstripa\empty \TB \fontstrip\relax\dofontstripb{xxxx} \fontstrip\relax\dofontstripb{12345} \fontstrip\relax\dofontstripb{(Agw)} \TB \fontstrip{(x height)}\dofontstripc{x} \fontstrip{(m width)}\dofontstripd{m} \stoptabulate \egroup \fi} \ifx\databox\undefined \newbox\databox \fi \gdef\testminimalbaseline#1% {\setbox\databox\ruledhbox{#1}% \scratchdimen\ht\databox \advance\scratchdimen\dp\databox \scratchtoks{#1}% \expanded {\NC \ruledhbox{\the\scratchtoks} \noexpand \NC -> \noexpand \NC \the\scratchdimen \noexpand \NC = \noexpand \NC \the\ht\databox \noexpand \NC + \noexpand \NC \the\dp\databox \noexpand \NC \ifdim\scratchdimen<\baselineskip < \else\ifdim\scratchdimen=\baselineskip = \else > \fi\fi \noexpand \NC \the\baselineskip \noexpand \NC (\ifdim\scratchdimen>\baselineskip not \fi ok) \noexpand \NC \noexpand \NR }} \gdef\showminimalbaseline {\ifx\starttabulate\undefined \@@onlyenglish\showminimalbaseline \else \starttabulate[||T|T|T|T|T|T|T|T|T|] \testminimalbaseline{\hbox to 1em{\hss\showstruts\strut\hss}}% \testminimalbaseline{(/)}% \testminimalbaseline{$\frac{1}{2}x^2_3$} \stoptabulate \fi} \gdef\showkerning#1% {\bgroup \let\MPfshowcommand\ruledhbox \setMPtext\s!dummy{#1}% \startMPcode draw textext(\MPstring\s!dummy);\stopMPcode \egroup} \gdef\showcharratio {\dowithnextboxcontent {\switchtobodyfont[10pt]}% {(\expanded{\withoutpt\the\nextboxht},% \expanded{\withoutpt\the\nextboxdp})}% \hbox} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/file-res.mkvi0000644000175000017500000001321111754241457024277 0ustar norbertnorbert%D \module %D [ file=file-mod, % was supp-fil, %D version=20110701, % 1995.10.10, %D title=\CONTEXT\ File Macros, %D subtitle=Resolvers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 File Macros / Resolvers} \unprotect \registerctxluafile{file-res}{1.001} %D \macros %D {readfile,ReadFile} %D %D One cannot be sure if a file exists. When no file can be %D found, the \type{\input} primitive gives an error message %D and switches to interactive mode. The macro \type{\readfile} %D takes care of non||existing files. This macro has two faces. %D %D \starttyping %D \ReadFile {filename} %D \readfile {filename} {before loading} {not found} %D \stoptyping %D %D Many \TEX\ implementations have laid out some strategy for %D locating files. This can lead to unexpected results, %D especially when one loads files that are not found in the %D current directory. Let's give an example of this. In %D \CONTEXT\ illustrations can be defined in an external file. %D The resizing macro first looks if an illustration is defined %D in the local definitions file. When no such file is found, %D it searches for a global file and when this file is not %D found either, the illustration itself is scanned for %D dimensions. One can imagine what happens if an adapted, %D localy stored illustration, is scaled according to %D dimensions stored somewhere else. %D %D When some \TEX\ implementation starts looking for a file, it %D normally first looks in the current directory. When no file %D is found, \TEX\ starts searching on the path where format %D and|/|or style files are stored. Depending on the implementation %D this can considerably slow down processing speed. %D %D In \CONTEXT, we support a project||wise ordening of files. %D In such an approach it seems feasible to store common files %D in a lower directory. When for instance searching for a %D general layout file, we therefore have to backtrack. %D %D These three considerations have lead to a more advanced %D approach for loading files. %D %D We first present an earlier implementation of %D \type{\readfile}. This command backtracks parent %D directories, upto a predefined level. Users can change this %D level (on the commandline using a directive); we default to~3. %D %D We use \type{\normalinput} instead of \type{\input} %D because we want to be able to redefine the original %D \type{\input} when needed, for instance when loading third %D party libraries. \let\readfilename\empty \def\syst_files_read_file#protocol#path#name% #true #false {\edef\readfilename{\ctxcommand{getreadfilename("#protocol","#path","#name")}}% \ifx\readfilename\empty \expandafter\secondoftwoarguments \else \expandafter\syst_files_read_file_indeed \fi} \def\syst_files_read_file_indeed#true#false% {#true% \relax \normalinput{\readfilename}% \relax} %D \macros %D {readjobfile,readlocfile,readsysfile, %D readfixfile,readsetfile} %D %D This implementation honnors the third situation, but we %D still can get unwanted files loaded and/or can get involved %D in extensive searching. %D %D Due to different needs, we decided to offer four alternative %D loading commands. With \type{\readjobfile} we load a local %D file and do no backtracking, while \type{\readlocfile} %D backtracks~\number\maxreadlevel\ directories, including the current %D one. %D %D System files can be anywhere and therefore %D \type{\readsysfile} is not bound to the current directory %D and obeys the \TEX\ implementation. %D %D Of the last two, \type{\readfixfile} searches on the %D directory specified and backtracks too, while %D \type{\readsetfile} does only search on the specified path. %D %D The most liberal is \type {\readfile}. \unexpanded\def\readjobfile #name{\syst_files_read_file{job} {.}{#name}} % current path, no backtracking \unexpanded\def\readlocfile #name{\syst_files_read_file{loc} {.}{#name}} % current path, backtracking \unexpanded\def\readsysfile #name{\syst_files_read_file{sys} {.}{#name}} % current path, obeys tex search \unexpanded\def\readfixfile#path#name{\syst_files_read_file{fix}{#path}{#name}} % specified path, backtracking \unexpanded\def\readsetfile#path#name{\syst_files_read_file{set}{#path}{#name}} % specified path, no backtracking \unexpanded\def\readfile #name{\syst_files_read_file{any} {.}{#name}} \unexpanded\def\ReadFile #name{\syst_files_read_file{any} {.}{#name}\donothing\donothing} %D So now we've got ourselves five file loading commands: %D %D \starttyping %D \readfile {filename} {before loading} {not found} %D %D \readjobfile {filename} {before loading} {not found} %D \readlocfile {filename} {before loading} {not found} %D \readfixfile {filename} {before loading} {not found} %D \readsysfile {directory} {filename} {before loading} {not found} %D \stoptyping \unexpanded\def\readtexfile#name#true#false% {\pushcatcodetable \catcodetable\ctxcatcodes \readfile{#name}{#true}{#false}% \popcatcodetable} \unexpanded\def\readxmlfile#name#true#false% {\pushcatcodetable \catcodetable\xmlcatcodes \readfile{#name}{#true}{#false}% \popcatcodetable} %D \macros %D {doiflocfileelse,locfilename} %D %D \starttyping %D \doiflocfileelse {filename} {before loading} {not found} %D \stoptyping \unexpanded\def\doiflocfileelse#name{\ctxcommand{doiflocfileelse([[#name]])}} \def\locfilename #name{\ctxcommand{locfilename([[#name]])}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-num.mkii0000644000175000017500000001053611754241457024333 0ustar norbertnorbert%D \module %D [ file=strc-num, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Numbering} \unprotect % Commando's ten behoeve van nummeren: % % \definenumber[name] % \setupnumber[name][wijze=,blok=,tekst=,plaats=,conversie=,start=] % \setnumber[name]{value} % \resetnumber[name] % \incrementnumber[name] % \decrementnumber[name] % \convertednumber[name] % getnumber % \savenumber[name] % \restorenumber[name] % \convertednumber[name] % \rawnumber[name] % private (defined in core-des.tex) % % \nextnumber[name][tag][reference] % \currentnumber[name] \def\@@thenumber#1{\s!number\csname\s!number#1\c!number\endcsname} % this will be the new (public) one: \let\numberparameterprefix\@@thenumber \def\numberparameter#1#2{\csname\@@thenumber{#1}#2\endcsname} % sort of public \def\dosetupnumber[#1][#2]% {\@EA\let\@EA\savedstartnumber\csname\@@thenumber{#1}\c!start\endcsname \getparameters[\@@thenumber{#1}][\c!start=,#2]% \doifelsenothing{\numberparameter{#1}\c!start} {\letvalue{\@@thenumber{#1}\c!start}\savedstartnumber} {\setcounter{\@@thenumber{#1}}{\numberparameter{#1}\c!start}}} \def\setupnumber {\dodoubleargument\dosetupnumber} \def\definenumber {\dodoubleempty\dodefinenumber} \def\dodefinenumber[#1][#2]% ook overal class als localframed {\doifassignmentelse{#2} {\dododefinenumber[#1][#2]} {\doifelsenothing{#2} % can break on not yet defined macros in #2 {\dododefinenumber[#1][#2]} {\setvalue{\s!number#1\c!number}{#2}}}} \def\dododefinenumber[#1][#2]% {\getparameters [\s!number#1] [\c!number=#1, \s!check=, \c!way=\@@nrway, \c!way\c!local=\numberparameter{#1}\c!way, \c!sectionnumber=\v!yes, \c!text=, % no longer used here, will go away \c!location=, % no longer used here, will go away (was ooit \c!zetwijze) \c!conversion=\v!numbers, \c!start=0, \c!state=\v!start, #2]% \makecounter{\@@thenumber{#1}}% \setxvalue{\@@thenumber{#1}\c!n}{\countervalue{\@@thenumber{#1}}}% \setcounter{\@@thenumber{#1}}{\numberparameter{#1}\c!start}} \def\setnumber[#1]#2% {\setcounter{\@@thenumber{#1}}{#2}} \def\resetnumber[#1]% {\setcounter{\@@thenumber{#1}}{0\numberparameter{#1}\c!start}} \def\savenumber[#1]% {\savecounter{\@@thenumber{#1}}} \def\restorenumber[#1]% {\restorecounter{\@@thenumber{#1}}} %D Bonus macro (we need to keep this one for downward %D compatibility reasons). \def\doreset[#1]% {\processcommalist[#1]\dodoreset} \def\dodoreset#1% {\getvalue{\s!reset#1}}% \def\reset {\dosingleargument\doreset} \def\incrementnumber[#1]% bypage tricky: needs a {\doifelse{\numberparameter{#1}\c!way}{\v!by\v!page} {\checkpagechange{#1}% \ifpagechanged\resetcounter{\@@thenumber{#1}}\fi} {\checknumber[#1]}% \doifelse\@@nrstate\v!start % only here {\doif{\numberparameter{#1}\c!state}\v!start{\pluscounter{\@@thenumber{#1}}}} {\setcounter{\@@thenumber{#1}}{0\numberparameter{#1}\c!start}}} % \defineenumeration [test] [way=bypage,text=\lastchangedpage] % % \starttext \dorecurse{10}{\test \input tufte \par} \stoptext \def\decrementnumber[#1]% {\minuscounter{\@@thenumber{#1}}} \def\convertednumber[#1]% {\convertnumber {\numberparameter{#1}\c!conversion} {\countervalue{\@@thenumber{#1}}}} \def\rawnumber[#1]% {\countervalue{\@@thenumber{#1}}} \def\accumulatednumber[#1]% {\getvalue{\@@thenumber{#1}\c!n}} \let\getnumber\convertednumber \def\doifdefinednumber #1{\doifdefined {\csname\s!number#1\c!number\endcsname}} \def\doifundefinednumber #1{\doifundefined {\csname\s!number#1\c!number\endcsname}} \def\doifdefinednumberelse#1{\doifdefinedelse{\csname\s!number#1\c!number\endcsname}} \ifx\checknumber\undefined \def\checknumber[#1]{} \fi % ook de pag nummers hierheen halen ivm \@@nrwijze \def\setupnumbering {\dodoubleempty\getparameters[\??nr]} \setupnumbering [\c!way=\v!by\v!chapter, \c!blockway=, \c!sectionnumber=\v!yes, \c!state=\v!start] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-bck.mkiv0000644000175000017500000005707612130411274024244 0ustar norbertnorbert%D \module %D [ file=page-bck, % copied from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Backgrounds, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % Currently the text cells are fakes and no (foreground) frames which makes sense % as order might matter e.g. is text sticks in other cells. The page, text etc % areas do support foreground order change. \writestatus{loading}{ConTeXt Page Macros / Backgrounds} \unprotect % maybe use \currentframedhash here %D For special purposes, users can question the \type {*background} mode. This mode %D is only available when typesetting the pagebody. %D %D \starttyping %D \startmode[*background] ... %D \stoptyping \newconditional\c_page_backgrounds_new \newconditional\c_page_backgrounds_new_right \newconditional\c_page_backgrounds_new_left \newconditional\c_page_backgrounds_some \appendtoks \ifconditional\c_page_backgrounds_some \ifconditional\c_page_backgrounds_new \setsystemmode\v!background \fi \fi \to \everybeforepagebody \unexpanded\def\initializepagebackgrounds {\setfalse\c_page_backgrounds_new \setfalse\c_page_backgrounds_new_right \setfalse\c_page_backgrounds_new_left \setfalse\c_page_backgrounds_some} %D We keep calculations and checks to a minimum and also try to minimize %D the amount of tracing due to expansion. \let\currentotrbackground\empty %D This is the only spot where we hav ea low level dependency on the way %D parent chains are defined but we want the speed. \def\page_backgrounds_check_background {\ifcsname\??framed\currentotrbackground:\c!background\endcsname \edef\page_background_temp{\csname\??framed\currentotrbackground:\c!background\endcsname}% \ifx\page_background_temp\empty \expandafter\expandafter\expandafter\page_backgrounds_check_frame \else \page_backgrounds_set_yes \fi \else \expandafter\page_backgrounds_check_frame \fi} \def\page_backgrounds_check_frame {\ifcsname\??framed\currentotrbackground:\c!frame\endcsname \edef\page_background_temp{\csname\??framed\currentotrbackground:\c!frame\endcsname}% \ifx\page_background_temp\v!on \page_backgrounds_set_yes \else \expandafter\expandafter\expandafter\page_backgrounds_check_leftframe \fi \else \expandafter\page_backgrounds_check_leftframe \fi} \def\page_backgrounds_check_leftframe {\ifcsname\??framed\currentotrbackground:\c!leftframe\endcsname \edef\page_background_temp{\csname\??framed\currentotrbackground:\c!leftframe\endcsname}% \ifx\page_background_temp\v!on \page_backgrounds_set_yes \else \expandafter\expandafter\expandafter\page_backgrounds_check_rightframe \fi \else \expandafter\page_backgrounds_check_rightframe \fi} \def\page_backgrounds_check_rightframe {\ifcsname\??framed\currentotrbackground:\c!rightframe\endcsname \edef\page_background_temp{\csname\??framed\currentotrbackground:\c!rightframe\endcsname}% \ifx\page_background_temp\v!on \page_backgrounds_set_yes \else \expandafter\expandafter\expandafter\page_backgrounds_check_topframe \fi \else \expandafter\page_backgrounds_check_topframe \fi} \def\page_backgrounds_check_topframe {\ifcsname\??framed\currentotrbackground:\c!topframe\endcsname \edef\page_background_temp{\csname\??framed\currentotrbackground:\c!topframe\endcsname}% \ifx\page_background_temp\v!on \page_backgrounds_set_yes \else \expandafter\expandafter\expandafter\page_backgrounds_check_bottomframe \fi \else \expandafter\page_backgrounds_check_bottomframe \fi} \def\page_backgrounds_check_bottomframe {\ifcsname\??framed\currentotrbackground:\c!bottomframe\endcsname \edef\page_background_temp{\csname\??framed\currentotrbackground:\c!bottomframe\endcsname}% \ifx\page_background_temp\v!on \page_backgrounds_set_yes \else \page_backgrounds_set_nop \fi \else \page_backgrounds_set_nop \fi} %D We don't use the commandhandler code as we want these multitude of backgrounds to be %D as fast as possible. \installcorenamespace{layoutbackgrounds} \installcorenamespace{layoutbackgroundcheck} % we need another hash as \??layoutbackgrounds<...> gets defined \def\page_backgrounds_set_yes{\expandafter\let\csname\currentotrbackground\endcsname\relax } \def\page_backgrounds_set_nop{\expandafter\let\csname\currentotrbackground\endcsname\undefined} \unexpanded\def\page_backgrounds_check#1% {\edef\currentotrbackground{\??layoutbackgrounds#1}% \page_backgrounds_check_background} \def\doifsomebackgroundelse#1% {\ifcsname\??layoutbackgrounds#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifsomebackground#1% {\ifcsname\??layoutbackgrounds#1\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} %D The background mechanism falls back on the \type {\framed} macro. This means %D that all normal frame and overlay features can be used. \def\page_backgrounds_add_to_box#1% area {\ifcsname\??layoutbackgrounds#1\endcsname \expandafter\page_backgrounds_add_to_box_indeed \else \expandafter\gobblefourarguments \fi#1} %D We don't need the dimensions here as this is a real framed but the question is: %D do we indeed need a real framed or can we use a fake (i.e. no foreground, only %D for hidden). \def\page_backgrounds_add_to_box_indeed#1#2#3#4% area box width height / always non zero {\edef\p_page_backgrounds_setups{\namedframedparameter{\??layoutbackgrounds#1}\c!setups}% \ifx\p_page_backgrounds_setups\empty \else \doprocesslocalsetups\p_page_backgrounds_setups % should not produce funny spaces ! \fi % #2 has the right dimensions already \setbox#2\hbox{\localbackgroundframed{\??layoutbackgrounds#1}#1#2}}% a real framed (including foreground) %D There are quite some backgrounds. At the bottom layer, there is the {\em %D paper} background. This one is only used for special purposes, like %D annotations to documents. \def\page_backgrounds_add_to_print#1% {\page_backgrounds_add_to_box\v!paper#1\printpaperwidth\printpaperheight} %D The page backgrounds can be put behind the {\em left page}, the {\em %D right page} or {\em each page}. As with the paper background, these are %D calculated on each page. \def\page_backgrounds_add_to_paper#1% {\doifbothsidesoverruled {\page_backgrounds_add_to_box\v!rightpage#1\paperwidth\paperheight}% {\page_backgrounds_add_to_box\v!rightpage#1\paperwidth\paperheight}% {\page_backgrounds_add_to_box\v!leftpage #1\paperwidth\paperheight}% \page_backgrounds_add_to_box\v!page#1\paperwidth\paperheight} %D Then there are the 25 areas that make up the layout: {\em top, header, text, %D footer, bottom} times {\em left edge, left margin, text, right margin, right %D edge}. These are only recalculated when they change or when the \type {status} %D is set to \type {repeat}. \newbox\leftbackground % todo: rename \newbox\rightbackground % todo: rename %D Finaly there is an aditional {\em text} background, again useful for %D special purposes only. This one is calculated each time. The hidden %D backgrounds are not meant for users! \newconditional\c_page_backgrounds_hidden_enabled \def\page_backgrounds_add_to_text#1% {\ifconditional\c_page_backgrounds_hidden_enabled \page_backgrounds_add_to_box\v!hidden#1\makeupwidth\textheight % mine ! \fi \page_backgrounds_add_to_box\v!text#1\makeupwidth\textheight} %D The next couple of macros implement the area backgrounds. As said, these %D are cached in dedicated boxes. The offsets and depth of the page are used %D for alignment purposes. %newdimen\pageoffset % bleed %newdimen\pagedepth % built-in %D We need a bit more clever mechanism in order to handle layers well. %D This means that we cannot calculate both background at the same time %D since something may have changed halfway a page. %D Margin swapping has been simplified: see mkii code in case of regression. %D Calculation is delayed till the page anyway so the state is known. \def\page_backgrounds_recalculate {\global\settrue\c_page_backgrounds_new} \def\page_backgrounds_set_boxes {\ifconditional\c_page_backgrounds_new \page_backgrounds_set_boxes_r \fi \doifbothsides \page_backgrounds_set_boxes_a \page_backgrounds_set_boxes_b \page_backgrounds_set_boxes_c \ifx\p_page_backgrounds_state\v!repeat\else \global\setfalse\c_page_backgrounds_new \fi} \def\page_backgrounds_set_boxes_r {\global\settrue\c_page_backgrounds_new_right \global\settrue\c_page_backgrounds_new_left \global\setbox\leftbackground\emptybox \global\setbox\rightbackground\emptybox} \def\page_backgrounds_set_boxes_a {\ifconditional\c_page_backgrounds_new_left % \showmessage\m!layouts8\empty \page_backgrounds_set_box\leftbackground % \conditionalfalse \global\setfalse\c_page_backgrounds_new_left \global\setfalse\c_page_backgrounds_new_right \fi} \def\page_backgrounds_set_boxes_b {\ifconditional\c_page_backgrounds_new_left % \showmessage\m!layouts8\empty \page_backgrounds_set_box\leftbackground % \conditionalfalse \global\setfalse\c_page_backgrounds_new_left \fi} \def\page_backgrounds_set_boxes_c {\ifconditional\c_page_backgrounds_new_right % \showmessage\m!layouts8\empty \page_backgrounds_set_box\rightbackground % \conditionaltrue \global\setfalse\c_page_backgrounds_new_right \fi} \def\page_backgrounds_add_to_main#1% todo: dimension spec {\ifconditional\c_page_backgrounds_some \page_backgrounds_set_boxes \setbox#1\vbox {\offinterlineskip \doifmarginswapelse{\copy\leftbackground}{\copy\rightbackground}% \box#1}% \fi} \newdimen\pagebackgroundhoffset % THESE WILL BECOME OBSOLETE \newdimen\pagebackgroundvoffset \newdimen\pagebackgroundoffset % used elsewhere \newdimen\pagebackgrounddepth \newdimen\pagebackgroundcompensation \def\page_backgrounds_set_offsets % used in menus (we can use ifcsname's here) {\ifconditional\c_page_backgrounds_some \ifconditional\c_page_backgrounds_new \page_backgrounds_set_offsets_indeed % indirect, less tracing \fi \fi} \def\page_backgrounds_set_offsets_indeed {\ifcsname\??layoutbackgrounds\v!text\v!text\endcsname \page_backgrounds_set_offsets_yes \else\ifcsname\??layoutbackgrounds\v!text\endcsname \page_backgrounds_set_offsets_yes \else \page_backgrounds_set_offsets_nop \fi\fi} \def\page_backgrounds_set_offsets_nop {\global\pagebackgroundhoffset \zeropoint \global\pagebackgroundvoffset \zeropoint \global\pagebackgrounddepth \zeropoint \global\pagebackgroundcompensation\zeropoint} \def\page_backgrounds_set_offsets_yes {\global\pagebackgroundoffset \d_page_backgrounds_depth \global\pagebackgroundcompensation\d_page_backgrounds_offset\relax \ifzeropt\pagebackgroundcompensation \page_backgrounds_set_offsets_nop \else \ifcsname\??layoutbackgrounds\v!top\v!text\endcsname \global\pagebackgroundhoffset\zeropoint \else\ifcsname\??layoutbackgrounds\v!bottom\v!text\endcsname \global\pagebackgroundhoffset\zeropoint \else \global\pagebackgroundhoffset\pagebackgroundcompensation \fi\fi \ifcsname\??layoutbackgrounds\v!text\v!rightedge\endcsname \global\pagebackgroundvoffset\zeropoint \global\pagebackgrounddepth \zeropoint \else\ifcsname\??layoutbackgrounds\v!text\v!leftedge\endcsname \global\pagebackgroundvoffset\zeropoint \global\pagebackgrounddepth \zeropoint \else \global\pagebackgroundvoffset\pagebackgroundcompensation \global\pagebackgrounddepth \d_page_backgrounds_depth \fi\fi \fi} \appendtoks \page_backgrounds_set_offsets \to \everybeforepagebody \newconditional\swapbackgroundmargins \settrue\swapbackgroundmargins \def\page_backgrounds_set_box#1% #2% {\global\setbox#1\vbox {\dontcomplain \swapmargins \ifconditional\swapbackgroundmargins \doifmarginswapelse \donothing {\swapmacros\v!rightmargin\v!leftmargin \swapmacros\v!rightedge \v!leftedge}% \fi \calculatereducedvsizes \offinterlineskip % \ifconditional#2\relax % \doswapmargins % hm, this one gets nilled in \swapmargins anyway % \fi \ifdim\topheight>\zeropoint \kern\dimexpr-\topheight-\topdistance\relax \page_backgrounds_set_box_row\v!top\topheight \kern\topdistance \fi \ifdim\headerheight>\zeropoint \page_backgrounds_set_box_row\v!header\headerheight \kern\headerdistance \fi \ifdim\textheight>\zeropoint \page_backgrounds_set_box_row\v!text\textheight \fi \ifdim\footerheight>\zeropoint \kern\footerdistance \page_backgrounds_set_box_row\v!footer\footerheight \fi \ifdim\bottomheight>\zeropoint \kern\bottomdistance \page_backgrounds_set_box_row\v!bottom\bottomheight \fi \vfilll}% \smashbox#1} \def\page_backgrounds_set_box_row#1#2% maybe helper {\setbox\scratchbox\vbox to #2 \bgroup\hbox\bgroup \goleftonpage \ifdim\leftedgewidth>\zeropoint \ifcsname\??layoutbackgrounds#1\v!leftedge\endcsname \page_backgrounds_set_box_cell#1\v!leftedge\leftedgewidth#2% \else \kern\leftedgewidth \fi \kern\leftedgedistance \fi \ifdim\leftmarginwidth>\zeropoint \ifcsname\??layoutbackgrounds#1\v!leftmargin\endcsname \page_backgrounds_set_box_cell#1\v!leftmargin\leftmarginwidth#2% \else \kern\leftmarginwidth \fi \kern\leftmargindistance \fi \ifcsname\??layoutbackgrounds#1\v!text\endcsname \page_backgrounds_set_box_cell#1\v!text\makeupwidth#2% \else \kern\makeupwidth \fi \ifdim\rightmarginwidth>\zeropoint \kern\rightmargindistance \ifcsname\??layoutbackgrounds#1\v!rightmargin\endcsname \page_backgrounds_set_box_cell#1\v!rightmargin\rightmarginwidth#2% \else \kern\rightmarginwidth \fi \fi \ifdim\rightedgewidth>\zeropoint \kern\rightedgedistance \ifcsname\??layoutbackgrounds#1\v!rightedge\endcsname \page_backgrounds_set_box_cell#1\v!rightedge\rightedgewidth#2% \else \kern\rightedgewidth \fi \fi \egroup\egroup \wd\scratchbox\zeropoint \box\scratchbox\relax} % these are fake framed .. maybe it's nicer to honor foreground here as well % but it's probably a slow downer \def\page_backgrounds_set_box_cell#1#2#3#4% pos pos width height {\begingroup \edef\p_page_backgrounds_setups{\namedframedparameter{\??layoutbackgrounds#1#2}\c!setups}% \ifx\p_page_backgrounds_setups\empty \else \doprocesslocalsetups\p_page_backgrounds_setups % should not produce funny spaces ! \fi \edef\p_page_backgrounds_command{\namedframedparameter{\??layoutbackgrounds#1#2}\c!command}% \ifx\p_page_backgrounds_command\empty \expandafter\page_backgrounds_set_box_cell_nop \else \expandafter\page_backgrounds_set_box_cell_yes \fi#3#4% \localbackgroundframed{\??layoutbackgrounds#1#2}{#1:#2}\scratchbox \endgroup} \def\page_backgrounds_set_box_cell_nop#1#2% {\setbox\scratchbox\emptyvbox \wd\scratchbox#1% \ht\scratchbox#2} \def\page_backgrounds_set_box_cell_yes#1#2% {\setbox\scratchbox\vbox to #2{\vss\hbox to#1{\hss\p_page_backgrounds_command\hss}\vss}% \dp\scratchbox\zeropoint} %D The background mechanism is quite demanding in terms or resources. We used to %D delay these definitions till runtime usage, but since today's \TEX's are large, %D we now do the work on forehand. %D %D \starttyping %D \setupbackgrounds [settings] %D \setupbackgrounds [paper,page,text,..] [settings] %D \setupbackgrounds [top,...] [leftedge,...] [settings] %D \stoptyping %D %D \showsetup{setupbackgrounds} %D %D Because the number of arguments runs from one to three, we need to check %D for it. \newtoks\everybackgroundssetup \unexpanded\def\setupbackgrounds {\dotripleempty\page_backgrounds_setup} \def\page_backgrounds_setup {\ifthirdargument \expandafter\page_backgrounds_setup_double \else\ifsecondargument \doubleexpandafter\page_backgrounds_setup_single \else\iffirstargument \tripleexpandafter\page_backgrounds_setup_basics \fi\fi\fi} \newdimen\d_page_backgrounds_offset \newdimen\d_page_backgrounds_depth \appendtoks \edef\p_page_backgrounds_offset{\namedframedparameter{\??layoutbackgrounds\v!page}\c!offset}% \edef\p_page_backgrounds_depth {\namedframedparameter{\??layoutbackgrounds\v!page}\c!depth }% \edef\p_page_backgrounds_state {\namedframedparameter{\??layoutbackgrounds }\c!state }% \global\d_page_backgrounds_offset\ifx\p_offset\empty\zeropoint\else\p_page_backgrounds_offset\fi \global\d_page_backgrounds_depth \ifx\p_depth \empty\zeropoint\else\p_page_backgrounds_depth \fi \global\pagebackgroundoffset\d_page_backgrounds_offset\relax \global\pagebackgrounddepth \d_page_backgrounds_depth \relax \ifx\p_page_backgrounds_state\v!stop \global\setfalse\c_page_backgrounds_new \else \global\settrue \c_page_backgrounds_new \fi \to \everybackgroundssetup \def\v_page_backgrounds_double_set{\v!paper,\v!page,\v!leftpage,\v!rightpage} \def\v_page_backgrounds_single_set{\v!text,\v!hidden,\v!paper,\v!page,\v!leftpage,\v!rightpage} \def\v_page_backgrounds_common_set{\v!leftedge,\v!leftmargin,\v!text,\v!rightmargin,\v!rightedge} \unexpanded\def\page_backgrounds_setup_double[#1][#2][#3]% if needed we can speed this up {\global\settrue\c_page_backgrounds_some \def\page_backgrounds_setup_step##1% {\doifinsetelse{##1}\v_page_backgrounds_double_set {\page_backgrounds_setup_and_check{##1}{#3}} {\def\page_backgrounds_setup_step_nested####1{\page_backgrounds_setup_and_check{##1####1}{#3}}% \processcommacommand[#2]\page_backgrounds_setup_step_nested}}% \processcommacommand[#1]\page_backgrounds_setup_step \the\everybackgroundssetup} \unexpanded\def\page_backgrounds_setup_single[#1][#2][#3]% {\global\settrue\c_page_backgrounds_some \doifcommonelse{#1}\v_page_backgrounds_single_set {\def\page_backgrounds_setup_step##1{\page_backgrounds_setup_and_check{##1}{#2}}% \processcommacommand[#1]\page_backgrounds_setup_step \the\everybackgroundssetup}% {\page_backgrounds_setup_double[#1][\v_page_backgrounds_common_set][#2]}} \unexpanded\def\page_backgrounds_setup_basics[#1][#2][#3]% {\setupframed[\??layoutbackgrounds][#1]% \the\everybackgroundssetup} \unexpanded\def\page_backgrounds_setup_and_check#1#2% tag settings {\edef\currentotrbackground{\??layoutbackgrounds#1}% \setupframed[\currentotrbackground][#2]% \page_backgrounds_check_background} %D Each areas (currently there are $1+3+25+1=30$ of them) has its own low level %D framed object associated. \definesimplifiedframed[\??layoutbackgrounds\v!paper] \definesimplifiedframed[\??layoutbackgrounds\v!page] \definesimplifiedframed[\??layoutbackgrounds\v!leftpage] \definesimplifiedframed[\??layoutbackgrounds\v!rightpage] \definesimplifiedframed[\??layoutbackgrounds\v!text] \definesimplifiedframed[\??layoutbackgrounds\v!hidden] \definesimplifiedframed[\??layoutbackgrounds\v!top\v!leftedge] \definesimplifiedframed[\??layoutbackgrounds\v!top\v!leftmargin] \definesimplifiedframed[\??layoutbackgrounds\v!top\v!text] \definesimplifiedframed[\??layoutbackgrounds\v!top\v!rightmargin] \definesimplifiedframed[\??layoutbackgrounds\v!top\v!rightedge] \definesimplifiedframed[\??layoutbackgrounds\v!header\v!leftedge] \definesimplifiedframed[\??layoutbackgrounds\v!header\v!leftmargin] \definesimplifiedframed[\??layoutbackgrounds\v!header\v!text] \definesimplifiedframed[\??layoutbackgrounds\v!header\v!rightmargin] \definesimplifiedframed[\??layoutbackgrounds\v!header\v!rightedge] \definesimplifiedframed[\??layoutbackgrounds\v!text\v!leftedge] \definesimplifiedframed[\??layoutbackgrounds\v!text\v!leftmargin] \definesimplifiedframed[\??layoutbackgrounds\v!text\v!text] \definesimplifiedframed[\??layoutbackgrounds\v!text\v!rightmargin] \definesimplifiedframed[\??layoutbackgrounds\v!text\v!rightedge] \definesimplifiedframed[\??layoutbackgrounds\v!footer\v!leftedge] \definesimplifiedframed[\??layoutbackgrounds\v!footer\v!leftmargin] \definesimplifiedframed[\??layoutbackgrounds\v!footer\v!text] \definesimplifiedframed[\??layoutbackgrounds\v!footer\v!rightmargin] \definesimplifiedframed[\??layoutbackgrounds\v!footer\v!rightedge] \definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!leftedge] \definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!leftmargin] \definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!text] \definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!rightmargin] \definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!rightedge] \setupbackgrounds [\v!page] [\c!offset=\zeropoint, % hm, so we need to force overlay elsewhere \c!depth=\zeropoint] %D General setup: \setupbackgrounds [\c!state=\c!start] %D The hidden layer can be populated by extending the following comma separated %D list. This only happens in core modules. % todo page-2 .. page+2 achter pagina -> bleed % spread-2 .. spread+2 achter spread -> spread (repeat 2 times) \unexpanded\def\enablehiddenbackground {\global\settrue\c_page_backgrounds_hidden_enabled \global\settrue\c_page_backgrounds_some \page_backgrounds_recalculate} \unexpanded\def\disablehiddenbackground {\global\setfalse\c_page_backgrounds_hidden_enabled} \def\hiddenbackgroundlist {\v!text-2,\v!text-1,\v!foreground,\v!text+1,\v!text+2} \defineoverlay[\v!text-2][\positionregionoverlay\textanchor{\v!text-2}] % no new anchor, we share text \defineoverlay[\v!text-1][\positionregionoverlay\textanchor{\v!text-1}] \defineoverlay[\v!text+1][\positionregionoverlay\textanchor{\v!text+1}] \defineoverlay[\v!text+2][\positionregionoverlay\textanchor{\v!text+2}] \setupbackgrounds [\v!hidden] [\c!background=\hiddenbackgroundlist] %D Because we haven't really set up backgrounds yet, we set the main efficiency %D switch to false. \setfalse\c_page_backgrounds_some \protect \endinput % %D The next series is used in local (for instance floating) backgrounds. % % \installsimplifiedframed{\??layoutbackgrounds\v!local} % % \getparameters % [\??layoutbackgrounds\v!local] % [\c!component=local, % \c!background=\localbackgroundlist] % % \def\localbackgroundlist % {\v!local-2,\v!local-1,\v!foreground,\v!local+1,\v!local+2} % % \defineoverlay[\v!local-2][\positionoverlay{\v!local-2}] % todo share % \defineoverlay[\v!local-1][\positionoverlay{\v!local-1}] % \defineoverlay[\v!local+1][\positionoverlay{\v!local+1}] % \defineoverlay[\v!local+2][\positionoverlay{\v!local+2}] % % \def\page_backgrounds_add_local_to_box % {\ifconditional\c_page_backgrounds_hidden_enabled % \expandafter\page_backgrounds_add_local_to_box_indeed % \else % \expandafter\gobbleoneargument % \fi} % % \def\page_backgrounds_add_local_to_box_indeed#1% % {\setbox#1\hbox{\localbackgroundframed{\??layoutbackgrounds\v!local}\v!local#1}% % \global\advance\localpositionnumber\plusone} % afterwards ! % % \let\page_backgrounds_add_local_to_box\gobbleoneargument % Test how previous macro behaves with depth: % % \startcolumnset % \input tufte % \placefigure{none}{\framed[lines=5]{xxx}} % \input tufte % \placefigure{none}{\starttabulate\NC test\nc test\NC\NR\stoptabulate} % \input tufte % \stopcolumnset context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-ctx.mkiv0000644000175000017500000000244212130411274024326 0ustar norbertnorbert%D \module %D [ file=lxml-ini, %D version=2007.08.17, %D title=\CONTEXT\ \XML\ Support, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Experimental. This might change! Also, it might become a module %D instead if core code. \writestatus{loading}{ConTeXt XML Support / Goodies} \registerctxluafile{lxml-ctx}{1.001} \unprotect \settrue \xmllshowbuffer \setfalse\xmllshowtitle \settrue \xmllshowwarning \definehead [lshowtitle] [subsubsubsubsubject] \setuphead [lshowtitle] [\c!style=\tta] \unexpanded\def\xmllshow#1% {\ctxlua{xml.ctx.tshow { pattern = \!!bs\detokenize{#1}\!!es, \ifconditional\xmllshowtitle title = "lshowtitle", \fi \ifconditional\xmllshowwarning warning = true, \fi } }} \unexpanded\def\xmllshowbuffer#1#2#3% {\ctxlua{xml.ctx.tshow { pattern = \!!bs\detokenize{#2}\!!es, \ifconditional\xmllshowbuffer xmlroot = "#1", attribute = "#3", \fi \ifconditional\xmllshowwarning warning = true, \fi } }} \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-users.lua0000644000175000017500000002365012130411274025306 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-users'] = { version = 1.001, comment = "companion to lmx-*", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is experimental code and currently part of the base installation simply -- because it's easier to dirtribute this way. Eventually it will be documented -- and the related scripts will show up as well. -- local sql = sql or (utilities and utilities.sql) or require("util-sql") -- local md5 = md5 or require("md5") local sql = utilities.sql local format, upper, find, gsub, topattern = string.format, string.upper, string.find, string.gsub, string.topattern local sumhexa = md5.sumhexa local booleanstring = string.booleanstring local sql = utilities.sql local users = { } sql.users = users local trace_sql = false trackers.register("sql.users.trace", function(v) trace_sql = v end) local report = logs.reporter("sql","users") local function encryptpassword(str) if not str or str == "" then return "" elseif find(str,"^MD5:") then return str else return upper(format("MD5:%s",sumhexa(str))) end end local function cleanuppassword(str) return (gsub(str,"^MD5:","")) end local function samepasswords(one,two) if not one or not two then return false end if not find(one,"^MD5:") then one = encryptpassword(one) end if not find(two,"^MD5:") then two = encryptpassword(two) end return one == two end local function validaddress(address,addresses) if address and addresses and address ~= "" and addresses ~= "" then if find(address,topattern(addresses,true,true)) then return true, "valid remote address" end return false, "invalid remote address" else return true, "no remote address check" end end users.encryptpassword = encryptpassword users.cleanuppassword = cleanuppassword users.samepasswords = samepasswords users.validaddress = validaddress -- print(users.encryptpassword("test")) -- MD5:098F6BCD4621D373CADE4E832627B4F6 local function checkeddb(presets,datatable) return sql.usedatabase(presets,datatable or presets.datatable or "users") end users.usedb = checkeddb local groupnames = { } local groupnumbers = { } local function registergroup(name) local n = #groupnames + 1 groupnames [n] = name groupnames [tostring(n)] = name groupnames [name] = name groupnumbers[n] = n groupnumbers[tostring(n)] = n groupnumbers[name] = n return n end registergroup("superuser") registergroup("administrator") registergroup("user") registergroup("guest") users.groupnames = groupnames users.groupnumbers = groupnumbers -- password 'test': -- -- INSERT insert into users (`name`,`password`,`group`,`enabled`) values ('...','MD5:098F6BCD4621D373CADE4E832627B4F6',1,1) ; local template =[[ CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(80) NOT NULL, `fullname` varchar(80) NOT NULL, `password` varchar(50) DEFAULT NULL, `group` int(11) NOT NULL, `enabled` int(11) DEFAULT '1', `email` varchar(80) DEFAULT NULL, `address` varchar(256) DEFAULT NULL, `theme` varchar(50) DEFAULT NULL, `data` longtext, PRIMARY KEY (`id`), UNIQUE KEY `name_unique` (`name`) ) DEFAULT CHARSET = utf8 ; ]] local converter, fields = sql.makeconverter { { name = "id", type = "number" }, { name = "name", type = "string" }, { name = "fullname", type = "string" }, { name = "password", type = "string" }, { name = "group", type = groupnames }, { name = "enabled", type = "boolean" }, { name = "email", type = "string" }, { name = "address", type = "string" }, { name = "theme", type = "string" }, { name = "data", type = "deserialize" }, } function users.createdb(presets,datatable) local db = checkeddb(presets,datatable) db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a created in %a",db.name,db.base) return db end local template =[[ SELECT %fields% FROM %basename% WHERE `name` = '%[name]%' AND `password` = '%[password]%' ; ]] local template =[[ SELECT %fields% FROM %basename% WHERE `name` = '%[name]%' ; ]] function users.valid(db,username,password,address) local data = db.execute { template = template, converter = converter, variables = { basename = db.basename, fields = fields, name = username, }, } local data = data and data[1] if not data then return false, "unknown user" elseif not data.enabled then return false, "disabled user" elseif data.password ~= encryptpassword(password) then return false, "wrong password" elseif not validaddress(address,data.address) then return false, "invalid address" else data.password = nil return data, "okay" end end local template =[[ INSERT INTO %basename% ( `name`, `fullname`, `password`, `group`, `enabled`, `email`, `address`, `theme`, `data` ) VALUES ( '%[name]%', '%[fullname]%', '%[password]%', '%[group]%', '%[enabled]%', '%[email]%', '%[address]%', '%[theme]%', '%[data]%' ) ; ]] function users.add(db,specification) local name = specification.username or specification.name if not name or name == "" then return end local data = specification.data db.execute { template = template, variables = { basename = db.basename, name = name, fullname = name or fullname, password = encryptpassword(specification.password or ""), group = groupnumbers[specification.group] or groupnumbers.guest, enabled = booleanstring(specification.enabled) and "1" or "0", email = specification.email, address = specification.address, theme = specification.theme, data = type(data) == "table" and db.serialize(data,"return") or "", }, } end local template =[[ SELECT %fields% FROM %basename% WHERE `name` = '%[name]%' ; ]] function users.getbyname(db,name) local data = db.execute { template = template, converter = converter, variables = { basename = db.basename, fields = fields, name = name, }, } return data and data[1] or nil end local template =[[ SELECT %fields% FROM %basename% WHERE `id` = '%id%' ; ]] local function getbyid(db,id) local data = db.execute { template = template, converter = converter, variables = { basename = db.basename, fields = fields, id = id, }, } return data and data[1] or nil end users.getbyid = getbyid local template =[[ UPDATE %basename% SET `fullname` = '%[fullname]%', `password` = '%[password]%', `group` = '%[group]%', `enabled` = '%[enabled]%', `email` = '%[email]%', `address` = '%[address]%', `theme` = '%[theme]%', `data` = '%[data]%' WHERE `id` = '%id%' ; ]] function users.save(db,id,specification) id = tonumber(id) if not id then return end local user = getbyid(db,id) if tonumber(user.id) ~= id then return end local fullname = specification.fullname == nil and user.fulname or specification.fullname local password = specification.password == nil and user.password or specification.password local group = specification.group == nil and user.group or specification.group local enabled = specification.enabled == nil and user.enabled or specification.enabled local email = specification.email == nil and user.email or specification.email local address = specification.address == nil and user.address or specification.address local theme = specification.theme == nil and user.theme or specification.theme local data = specification.data == nil and user.data or specification.data db.execute { template = template, variables = { basename = db.basename, id = id, fullname = fullname, password = encryptpassword(password), group = groupnumbers[group], enabled = booleanstring(enabled) and "1" or "0", email = email, address = address, theme = theme, data = type(data) == "table" and db.serialize(data,"return") or "", }, } return getbyid(db,id) end local template =[[ DELETE FROM %basename% WHERE `id` = '%id%' ; ]] function users.remove(db,id) db.execute { template = template, variables = { basename = db.basename, id = id, }, } end local template =[[ SELECT %fields% FROM %basename% ORDER BY `name` ; ]] function users.collect(db) -- maybe also an id/name only variant local records, keys = db.execute { template = template, converter = converter, variables = { basename = db.basename, fields = fields, }, } return records, keys end context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-lay.mkiv0000644000175000017500000000736112130411274024320 0ustar norbertnorbert%D \module %D [ file=attr-lay, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Viewerlayers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Attribute Macros / Viewerlayers} %D Currently there is a limitation in mixed inline usage. This has to do with the fact %D that we have a stacked model but cannot determine where to revert to (as we can %D have AABBCCAA ranges). Maybe I'll solve that one day. It only affects nested inline %D layers and these make not much sense anyway. We'd have to store the complete nesting %D stack in the attribute in order to be able to cross pages and that demands a new %D mechanism. \unprotect \registerctxluafile{attr-lay}{1.001} % needs to work over stopitemize grouping etc \installcorenamespace{viewerlayer} \installcommandhandler \??viewerlayer {viewerlayer} \??viewerlayer \setupviewerlayer [\c!state=\v!start, \c!title=, \c!printable=\v!yes, \c!scope=\v!local, % maybe global but needs checking with layout \c!method=\v!none] \appendtoks \ctxcommand{defineviewerlayer{ tag = "\currentviewerlayer", title = "\viewerlayerparameter\c!title", visible = "\viewerlayerparameter\c!state", editable = "\v!yes", printable = "\viewerlayerparameter\c!printable", scope = "\viewerlayerparameter\c!scope" }}% \doif{\viewerlayerparameter\c!method}\v!command {\setuxvalue{\e!start#1}{\startviewerlayer[\currentviewerlayer]}% \setuxvalue{\e!stop #1}{\stopviewerlayer}}% \to \everydefineviewerlayer \unexpanded\def\startviewerlayer[#1]{\ctxcommand{startviewerlayer("#1")}} % not grouped \unexpanded\def\stopviewerlayer {\ctxcommand{stopviewerlayer()}} % not grouped \unexpanded\def\viewerlayer [#1]{\groupedcommand{\startviewerlayer[#1]}{\stopviewerlayer}} % grouped % some day we will keep this at the lua end as the info is only needed there \newtoks\currentviewerlayertoks % soon we can set macros at the lua end \def\currentviewerlayer{\the\currentviewerlayertoks} \appendtoks \let\currentviewerlayer\empty \to \everybeforepagebody % layout components are implemented rather directly (speed) \installcorenamespace{layoutcomponentattribute} \def\attr_layoutcomponent_initialize#1% {\edef\layoutcomponentboxattribute{\ctxcommand{definedviewerlayer{% tag = "#1", title = utilities.strings.nice("#1"), % only here as in steps we have step: visible = "\v!start", editable = "\v!yes", printable = "\v!yes" }}}% \edef\layoutcomponentboxattribute{attr \viewerlayerattribute \layoutcomponentboxattribute\relax}% \expandafter\glet\csname\??layoutcomponentattribute#1\endcsname\layoutcomponentboxattribute} \def\attr_layoutcomponent_set#1% make this faster {\expandafter\let\expandafter\layoutcomponentboxattribute\csname\??layoutcomponentattribute#1\endcsname \ifx\layoutcomponentboxattribute\relax \attr_layoutcomponent_initialize{#1}% get rid of { } \fi} \def\attr_layoutcomponent_reset {\let\layoutcomponentboxattribute\empty} \let\setlayoutcomponentattribute \gobbleoneargument \let\resetlayoutcomponentattribute\relax \let\layoutcomponentboxattribute \empty \unexpanded\def\showlayoutcomponents {%\ctxlua{attributes.viewerlayers.enable()}% automatic \let\setlayoutcomponentattribute \attr_layoutcomponent_set \let\resetlayoutcomponentattribute\attr_layoutcomponent_reset} \appendtoks \ctxcommand{cleanuplayers()}% \to \everyshipout \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-graph.mkiv0000644000175000017500000001117312161703335024120 0ustar norbertnorbert%D \module %D [ file=m-graph, %D version=2008.09.08, %D title=\CONTEXT\ Extra Modules, %D subtitle=\METAPOST\ graph module support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % We just assume lua specification instead of the graph ones that % are limited by what mp can do. We support @ as replacement for % the percent symbol. We also add a specifier when no one is given. \unprotect \startluacode local format, gsub, find, match = string.format, string.gsub, string.find, string.match local simplify = true local function strip(n,e) -- get rid of e(0) -- get rid of e(+*) e = gsub(e,"^+","") -- remove leading zeros e = gsub(e,"^([+-]*)0+(%d)","%1%2") if not simplify then -- take it as it is elseif n == "1" then return format("10^{%s}",e) end return format("%s\\times10^{%s}",n,e) end function metapost.format_n(fmt,str) fmt = gsub(fmt,"@","%%") local initial, hasformat, final = match(fmt,"^(.-)(%%.-[%a])(.-)$") if hasformat then str = format(fmt,str) str = gsub(str,"(.-)e(.-)$",strip) str = format("%s\\mathematics{%s}%s",initial,str,final) elseif not find(fmt,"%%") then str = format("%"..fmt,str) str = gsub(str,"(.-)e(.-)$",strip) str = format("\\mathematics{%s}",str) end context(str) end \stopluacode \unexpanded\def\MPgraphformat#1#2{\ctxlua{metapost.format_n("#1","#2")}} % We could also delegate parsing using lower level plugins. \defineMPinstance [graph] [\s!format=metafun, \s!extensions=\v!yes, \s!initializations=\v!yes, \c!method=\s!double] \startMPdefinitions{graph} if unknown context_grap: input "mp-grap.mpiv" ; fi ; \stopMPdefinitions % For backwards compatibility (for the moment), also load the graph macros in % the standard MP instance (scaled integer): \startMPdefinitions if unknown context_grap: input "mp-grap.mpiv" ; fi ; \stopMPdefinitions \protect \continueifinputfile{m-graph.mkiv} \starttext \startMPpage[instance=graph] label(format("@g","1e-8"), (0, 0)) ; label(format("@g","1e+8"), (2cm, 0)) ; label(format("@g","1e-10"), (0, -0.5cm)) ; label(format("@g","1e+10"), (2cm,-0.5cm)) ; label(format("@g","1e-12"), (0, -1.0cm)) ; label(format("@g","1e+12"), (2cm,-1.0cm)) ; label(format("@g","1e-0"), (0, -1.5cm)) ; label(format("@g","1e+0"), (2cm,-1.5cm)) ; label(format("@g","1"), (0, -2.0cm)) ; label(format("@g","1"), (2cm,-2.0cm)) ; label(format("@g","1e-102"),(0, -2.5cm)) ; label(format("@g","1e+102"),(2cm,-2.5cm)) ; \stopMPpage % \startMPpage[instance=graph] % draw begingraph(3in,2in); % gdraw "t:/metapost/grphdata/agepop91.d"; % endgraph; % \stopMPpage % \startMPpage[instance=graph] % draw begingraph(3in,2in); % gdraw "agepop91.d" plot btex $\bullet$ etex; % endgraph; % \stopMPpage % \startMPpage[instance=graph] % draw begingraph(3in,2in); % glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT); % glabel.bot(btex Age in years etex, OUT); % gdraw "agepopm.d"; % endgraph; % \stopMPpage % \startMPpage[instance=graph] % draw begingraph(3in,2in); % glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT); % glabel.bot(btex Age in years etex, OUT); % setrange(origin, whatever,whatever); % gdraw "agepopm.d"; % endgraph; % \stopMPpage % \startMPpage[instance=graph] % draw begingraph(2.3in,2in); % setcoords(log,log); % glabel.lft(btex Seconds etex,OUT); % glabel.bot(btex Matrix size etex, % OUT); % gdraw "matmul.d" dashed evenly; % glabel.ulft(btex Standard etex,8); % gdraw "matmul.d"; % glabel.lrt(btex Strassen etex,7); % endgraph; % \stopMPpage % \startMPpage[instance=graph] % draw begingraph(6.5cm,4.5cm); % setrange(80,0, 90,whatever); % glabel.bot(btex Year etex, OUT); % glabel.lft(btex \vbox{\hbox{Emissions in} \hbox{thousands of} % \hbox{metric tons} \hbox{(heavy line)}}etex, OUT); % gdraw "lead.d" withpen pencircle scaled 1.5pt; % autogrid(,otick.lft); % setcoords(linear,linear); % setrange(80,0, 90,whatever); % glabel.rt(btex \vbox{\hbox{Micrograms} \hbox{per cubic} % \hbox{meter of air} \hbox{(thin line)}}etex, OUT); % gdraw "lead.d"; % autogrid(otick.bot,otick.rt); % endgraph; % \stopMPpage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-ibm.mkii0000644000175000017500000000422111754241457024250 0ustar norbertnorbert%D \module %D [ file=regi-ibm, %D version=1995.01.01, %D title=\CONTEXT\ Encoding Macros, %D subtitle=The Good Old MSDOS IBM codepage, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 activates the \cap{IBM PC} high \ASCII\ %D characters, such as and . \startregime [ibm] \defineactivetoken 145 {\aeligature} % \defineactivetoken 146 {\AEligature} % \defineactivetoken 152 {\ijligature} % \defineactivetoken 225 {\ssharp} % \defineactivetoken 160 {\aacute} % \defineactivetoken 130 {\eacute} % \defineactivetoken 144 {\Eacute} % \defineactivetoken 161 {\iacute} % \defineactivetoken 162 {\oacute} % \defineactivetoken 163 {\uacute} % \defineactivetoken 135 {\ccedilla} % \defineactivetoken 128 {\Ccedilla} % \defineactivetoken 132 {\adiaeresis} % \defineactivetoken 142 {\Adiaeresis} % \defineactivetoken 137 {\ediaeresis} % \defineactivetoken 139 {\idiaeresis} % \defineactivetoken 148 {\odiaeresis} % \defineactivetoken 153 {\Odiaeresis} % \defineactivetoken 129 {\udiaeresis} % \defineactivetoken 154 {\Udiaeresis} % \defineactivetoken 164 {\ntilde} % \defineactivetoken 165 {\Ntilde} % \defineactivetoken 134 {\aring} % \defineactivetoken 143 {\Aring} % \defineactivetoken 131 {\acircumflex} % \defineactivetoken 136 {\ecircumflex} % \defineactivetoken 140 {\icircumflex} % \defineactivetoken 147 {\ocircumflex} % \defineactivetoken 150 {\ucircumflex} % \defineactivetoken 133 {\agrave} % \defineactivetoken 138 {\egrave} % \defineactivetoken 141 {\igrave} % \defineactivetoken 149 {\ograve} % \defineactivetoken 151 {\ugrave} % \stopregime % todo \startregime [ibm] \defineactivetoken {\ifvmode\leavevmode\fi\leftguillemot\prewordbreak} \defineactivetoken {\prewordbreak\rightguillemot} \stopregime \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-url.lua0000644000175000017500000000563212130411274024116 0ustar norbertnorbertif not modules then modules = { } end modules ['lang-url'] = { version = 1.001, comment = "companion to lang-url.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfcharacters, utfvalues, utfbyte, utfchar = utf.characters, utf.values, utf.byte, utf.char context = context commands = commands or { } local commands = commands --[[

Hyphenating 's is somewhat tricky and a matter of taste. I did consider using a dedicated hyphenation pattern or dealing with it by node parsing, but the following solution suits as well. After all, we're mostly dealing with characters.

]]-- commands.hyphenatedurl = commands.hyphenatedurl or { } local hyphenatedurl = commands.hyphenatedurl local characters = utilities.storage.allocate { ["!"] = 1, ["\""] = 1, ["#"] = 1, ["$"] = 1, ["%"] = 1, ["&"] = 1, ["("] = 1, ["*"] = 1, ["+"] = 1, [","] = 1, ["-"] = 1, ["."] = 1, ["/"] = 1, [":"] = 1, [";"] = 1, ["<"] = 1, ["="] = 1, [">"] = 1, ["?"] = 1, ["@"] = 1, ["["] = 1, ["\\"] = 1, ["^"] = 1, ["_"] = 1, ["`"] = 1, ["{"] = 1, ["|"] = 1, ["~"] = 1, ["'"] = 2, [")"] = 2, ["]"] = 2, ["}"] = 2, } local mapping = utilities.storage.allocate { -- [utfchar(0xA0)] = "~", -- nbsp (catch) } hyphenatedurl.characters = characters hyphenatedurl.mapping = mapping hyphenatedurl.lefthyphenmin = 2 hyphenatedurl.righthyphenmin = 3 hyphenatedurl.discretionary = nil -- more fun is to write nodes .. maybe it's nicer to do this -- in an attribute handler anyway local function action(hyphenatedurl,str,left,right,disc) local n = 0 local b = math.max( left or hyphenatedurl.lefthyphenmin, 2) local e = math.min(#str-(right or hyphenatedurl.righthyphenmin)+2,#str) local d = disc or hyphenatedurl.discretionary for s in utfcharacters(str) do n = n + 1 s = mapping[s] or s if n > 1 then context.s() -- can be option end if s == d then context.d(utfbyte(s)) else local c = characters[s] if not c or n<=b or n>=e then context.n(utfbyte(s)) elseif c == 1 then context.b(utfbyte(s)) elseif c == 2 then context.a(utfbyte(s)) end end end end -- hyphenatedurl.action = function(_,...) action(...) end -- sort of obsolete table.setmetatablecall(hyphenatedurl,action) -- watch out: a caller -- todo, no interface in mkiv yet function hyphenatedurl.setcharacters(str,value) -- 1, 2 == before, after for s in utfcharacters(str) do characters[s] = value or 1 end end -- .hyphenatedurl.setcharacters("')]}",2) context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-def.mkiv0000644000175000017500000000677212161703335024313 0ustar norbertnorbert%D \module %D [ file=mult-def, %D version=2008.10.22, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \installcorenamespace{multilingual} \setvalue{\??multilingual czech}{cs} \setvalue{\??multilingual german}{de} \setvalue{\??multilingual english}{en} \setvalue{\??multilingual french}{fr} \setvalue{\??multilingual italian}{it} \setvalue{\??multilingual dutch}{nl} \setvalue{\??multilingual persian}{pe} \setvalue{\??multilingual romanian}{ro} \def\userinterfacetag{\ifcsname\??multilingual\currentinterface\endcsname\csname\??multilingual\currentinterface\endcsname\else en\fi} \def\userresponsestag{\ifcsname\??multilingual\currentresponses\endcsname\csname\??multilingual\currentresponses\endcsname\else en\fi} % \input mult-\userinterfacetag \relax % \input mult-m\userresponsestag \relax \ctxlua{interfaces.setuserinterface("\userinterfacetag","\userresponsestag")} % start todo: \def\c!language {language} \def\c!compressseparator{compressseparator} \def\c!renderingsetup {renderingsetup} \def\c!filler {filler} \def\c!resources {resources} \def\c!first {first} \def\c!last {last} \def\c!quotechar {quotechar} \def\c!commentchar {commentchar} \def\c!symbolcommand {symbolcommand} \def\c!xmlsetup {xmlsetup} \def\c!comma {comma} \def\c!period {period} \def\c!monthconversion {monthconversion} \def\c!comment {comment} \def\c!textalign {textalign} \def\c!up {up} \def\c!down {down} \def\c!instance {instance} \def\c!database {database} \def\c!group {group} \def\c!groupsuffix {groupsuffix} \def\v!compressseparator{compressseparator} \def\v!notation {notation} \def\v!endnote {endnote} \def\v!interactive {interactive} \def\v!autopunctuation {autopunctuation} \def\v!integral {integral} \def\v!shiftup {shiftup} \def\v!shiftdown {shiftdown} \def\v!construction {construction} \def\v!unframed {unframed} \def\v!chemical {chemical} \def\v!chemicals {chemicals} \def\v!words {words} \def\v!combination {combination} \def\v!norepeat {norepeat} \def\s!lcgreek {lcgreek} \def\s!ucgreek {ucgreek} \def\s!sygreek {sygreek} \def\s!italics {italics} \def\s!integral {integral} \def\s!insert {insert} % maybe insertclass \def\s!marker {marker} \def\s!mixedcolumn {mixedcolumn} \def\s!double {double} \def\s!decimal {decimal} \def\s!current {current} \def\c!HL {HL} \def\c!VL {VL} \def\c!NL {NL} \ifdefined\v!kerncharacters\else \def\v!kerncharacters{kerncharacters} \fi % no time now for translations should be a e! actually \ifdefined\v!stretched \else \def\v!stretched {stretched} \fi \ifdefined\v!vulgarfraction\else \def\v!vulgarfraction{vulgarfraction} \fi \ifdefined\v!block \else \def\v!block {block} \fi \ifdefined\v!rule \else \def\v!rule {rule} \fi \ifdefined\v!oldstyle \else \def\v!oldstyle {oldstyle} \fi % stop todo \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-inj.lua0000644000175000017500000005134212161703335024105 0ustar norbertnorbertif not modules then modules = { } end modules ['node-inj'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- This is very experimental (this will change when we have luatex > .50 and -- a few pending thingies are available. Also, Idris needs to make a few more -- test fonts. Btw, future versions of luatex will have extended glyph properties -- that can be of help. Some optimizations can go away when we have faster machines. local next = next local utfchar = utf.char local trace_injections = false trackers.register("nodes.injections", function(v) trace_injections = v end) local report_injections = logs.reporter("nodes","injections") local attributes, nodes, node = attributes, nodes, node fonts = fonts local fontdata = fonts.hashes.identifiers nodes.injections = nodes.injections or { } local injections = nodes.injections local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local kern_code = nodecodes.kern local nodepool = nodes.pool local newkern = nodepool.kern local traverse_id = node.traverse_id local insert_node_before = node.insert_before local insert_node_after = node.insert_after local a_kernpair = attributes.private('kernpair') local a_ligacomp = attributes.private('ligacomp') local a_markbase = attributes.private('markbase') local a_markmark = attributes.private('markmark') local a_markdone = attributes.private('markdone') local a_cursbase = attributes.private('cursbase') local a_curscurs = attributes.private('curscurs') local a_cursdone = attributes.private('cursdone') -- This injector has been tested by Idris Samawi Hamid (several arabic fonts as well as -- the rather demanding Husayni font), Khaled Hosny (latin and arabic) and Kaj Eigner -- (arabic, hebrew and thai) and myself (whatever font I come across). I'm pretty sure -- that this code is not 100% okay but examples are needed to figure things out. function injections.installnewkern(nk) newkern = nk or newkern end local cursives = { } local marks = { } local kerns = { } -- Currently we do gpos/kern in a bit inofficial way but when we have the extra fields in -- glyphnodes to manipulate ht/dp/wd explicitly I will provide an alternative; also, we -- can share tables. -- For the moment we pass the r2l key ... volt/arabtype tests .. idris: this needs -- checking with husayni (volt and fontforge). function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext) local dx, dy = factor*(exit[1]-entry[1]), factor*(exit[2]-entry[2]) local ws, wn = tfmstart.width, tfmnext.width local bound = #cursives + 1 start[a_cursbase] = bound nxt[a_curscurs] = bound cursives[bound] = { rlmode, dx, dy, ws, wn } return dx, dy, bound end function injections.setpair(current,factor,rlmode,r2lflag,spec,tfmchr) local x, y, w, h = factor*spec[1], factor*spec[2], factor*spec[3], factor*spec[4] -- dy = y - h if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then local bound = current[a_kernpair] if bound then local kb = kerns[bound] -- inefficient but singles have less, but weird anyway, needs checking kb[2], kb[3], kb[4], kb[5] = (kb[2] or 0) + x, (kb[3] or 0) + y, (kb[4] or 0)+ w, (kb[5] or 0) + h else bound = #kerns + 1 current[a_kernpair] = bound kerns[bound] = { rlmode, x, y, w, h, r2lflag, tfmchr.width } end return x, y, w, h, bound end return x, y, w, h -- no bound end function injections.setkern(current,factor,rlmode,x,tfmchr) local dx = factor*x if dx ~= 0 then local bound = #kerns + 1 current[a_kernpair] = bound kerns[bound] = { rlmode, dx } return dx, bound else return 0, 0 end end function injections.setmark(start,base,factor,rlmode,ba,ma,index) -- ba=baseanchor, ma=markanchor local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2]) -- the index argument is no longer used but when this local bound = base[a_markbase] -- fails again we should pass it local index = 1 if bound then local mb = marks[bound] if mb then -- if not index then index = #mb + 1 end index = #mb + 1 mb[index] = { dx, dy, rlmode } start[a_markmark] = bound start[a_markdone] = index return dx, dy, bound else report_injections("possible problem, %U is base mark without data (id %a)",base.char,bound) end end -- index = index or 1 index = index or 1 bound = #marks + 1 base[a_markbase] = bound start[a_markmark] = bound start[a_markdone] = index marks[bound] = { [index] = { dx, dy, rlmode } } return dx, dy, bound end local function dir(n) return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset" end local function trace(head) report_injections("begin run") for n in traverse_id(glyph_code,head) do if n.subtype < 256 then local kp = n[a_kernpair] local mb = n[a_markbase] local mm = n[a_markmark] local md = n[a_markdone] local cb = n[a_cursbase] local cc = n[a_curscurs] local char = n.char report_injections("font %s, char %U, glyph %c",n.font,char,char) if kp then local k = kerns[kp] if k[3] then report_injections(" pairkern: dir %a, x %p, y %p, w %p, h %p",dir(k[1]),k[2],k[3],k[4],k[5]) else report_injections(" kern: dir %a, dx %p",dir(k[1]),k[2]) end end if mb then report_injections(" markbase: bound %a",mb) end if mm then local m = marks[mm] if mb then local m = m[mb] if m then report_injections(" markmark: bound %a, index %a, dx %p, dy %p",mm,md,m[1],m[2]) else report_injections(" markmark: bound %a, missing index",mm) end else m = m[1] report_injections(" markmark: bound %a, dx %p, dy %p",mm,m and m[1],m and m[2]) end end if cb then report_injections(" cursbase: bound %a",cb) end if cc then local c = cursives[cc] report_injections(" curscurs: bound %a, dir %a, dx %p, dy %p",cc,dir(c[1]),c[2],c[3]) end end end report_injections("end run") end -- todo: reuse tables (i.e. no collection), but will be extra fields anyway -- todo: check for attribute -- We can have a fast test on a font being processed, so we can check faster for marks etc -- but I'll make a context variant anyway. local function show_result(head) local current = head local skipping = false while current do local id = current.id if id == glyph_code then report_injections("char: %C, width %p, xoffset %p, yoffset %p",current.char,current.width,current.xoffset,current.yoffset) skipping = false elseif id == kern_code then report_injections("kern: %p",current.kern) skipping = false elseif not skipping then report_injections() skipping = true end current = current.next end end function injections.handler(head,where,keep) local has_marks, has_cursives, has_kerns = next(marks), next(cursives), next(kerns) if has_marks or has_cursives then if trace_injections then trace(head) end -- in the future variant we will not copy items but refs to tables local done, ky, rl, valid, cx, wx, mk, nofvalid = false, { }, { }, { }, { }, { }, { }, 0 if has_kerns then -- move outside loop local nf, tm = nil, nil for n in traverse_id(glyph_code,head) do -- only needed for relevant fonts if n.subtype < 256 then nofvalid = nofvalid + 1 valid[nofvalid] = n if n.font ~= nf then nf = n.font tm = fontdata[nf].resources.marks end if tm then mk[n] = tm[n.char] end local k = n[a_kernpair] if k then local kk = kerns[k] if kk then local x, y, w, h = kk[2] or 0, kk[3] or 0, kk[4] or 0, kk[5] or 0 local dy = y - h if dy ~= 0 then ky[n] = dy end if w ~= 0 or x ~= 0 then wx[n] = kk end rl[n] = kk[1] -- could move in test end end end end else local nf, tm = nil, nil for n in traverse_id(glyph_code,head) do if n.subtype < 256 then nofvalid = nofvalid + 1 valid[nofvalid] = n if n.font ~= nf then nf = n.font tm = fontdata[nf].resources.marks end if tm then mk[n] = tm[n.char] end end end end if nofvalid > 0 then -- we can assume done == true because we have cursives and marks local cx = { } if has_kerns and next(ky) then for n, k in next, ky do n.yoffset = k end end -- todo: reuse t and use maxt if has_cursives then local p_cursbase, p = nil, nil -- since we need valid[n+1] we can also use a "while true do" local t, d, maxt = { }, { }, 0 for i=1,nofvalid do -- valid == glyphs local n = valid[i] if not mk[n] then local n_cursbase = n[a_cursbase] if p_cursbase then local n_curscurs = n[a_curscurs] if p_cursbase == n_curscurs then local c = cursives[n_curscurs] if c then local rlmode, dx, dy, ws, wn = c[1], c[2], c[3], c[4], c[5] if rlmode >= 0 then dx = dx - ws else dx = dx + wn end if dx ~= 0 then cx[n] = dx rl[n] = rlmode end -- if rlmode and rlmode < 0 then dy = -dy -- end maxt = maxt + 1 t[maxt] = p d[maxt] = dy else maxt = 0 end end elseif maxt > 0 then local ny = n.yoffset for i=maxt,1,-1 do ny = ny + d[i] local ti = t[i] ti.yoffset = ti.yoffset + ny end maxt = 0 end if not n_cursbase and maxt > 0 then local ny = n.yoffset for i=maxt,1,-1 do ny = ny + d[i] local ti = t[i] ti.yoffset = ny end maxt = 0 end p_cursbase, p = n_cursbase, n end end if maxt > 0 then local ny = n.yoffset for i=maxt,1,-1 do ny = ny + d[i] local ti = t[i] ti.yoffset = ny end maxt = 0 end if not keep then cursives = { } end end if has_marks then for i=1,nofvalid do local p = valid[i] local p_markbase = p[a_markbase] if p_markbase then local mrks = marks[p_markbase] local nofmarks = #mrks for n in traverse_id(glyph_code,p.next) do local n_markmark = n[a_markmark] if p_markbase == n_markmark then local index = n[a_markdone] or 1 local d = mrks[index] if d then local rlmode = d[3] -- local k = wx[p] if k then local x = k[2] local w = k[4] if w then if rlmode and rlmode >= 0 then -- kern(x) glyph(p) kern(w-x) mark(n) n.xoffset = p.xoffset - p.width + d[1] - (w-x) else -- kern(w-x) glyph(p) kern(x) mark(n) n.xoffset = p.xoffset - d[1] - x end else if rlmode and rlmode >= 0 then -- okay for husayni n.xoffset = p.xoffset - p.width + d[1] else -- needs checking: is x ok here? n.xoffset = p.xoffset - d[1] - x end end else if rlmode and rlmode >= 0 then n.xoffset = p.xoffset - p.width + d[1] else n.xoffset = p.xoffset - d[1] end end -- -- if mk[p] then n.yoffset = p.yoffset + d[2] else n.yoffset = n.yoffset + p.yoffset + d[2] end -- if nofmarks == 1 then break else nofmarks = nofmarks - 1 end end else -- KE: there can be sequences in ligatures end end end end if not keep then marks = { } end end -- todo : combine if next(wx) then for n, k in next, wx do -- only w can be nil (kernclasses), can be sped up when w == nil local x = k[2] local w = k[4] if w then local rl = k[1] -- r2l = k[6] local wx = w - x if rl < 0 then -- KE: don't use r2l here if wx ~= 0 then insert_node_before(head,n,newkern(wx)) -- type 0/2 end if x ~= 0 then insert_node_after (head,n,newkern(x)) -- type 0/2 end else if x ~= 0 then insert_node_before(head,n,newkern(x)) -- type 0/2 end if wx ~= 0 then insert_node_after (head,n,newkern(wx)) -- type 0/2 end end elseif x ~= 0 then -- this needs checking for rl < 0 but it is unlikely that a r2l script -- uses kernclasses between glyphs so we're probably safe (KE has a -- problematic font where marks interfere with rl < 0 in the previous -- case) insert_node_before(head,n,newkern(x)) -- a real font kern, type 0 end end end if next(cx) then for n, k in next, cx do if k ~= 0 then local rln = rl[n] if rln and rln < 0 then insert_node_before(head,n,newkern(-k)) -- type 0/2 else insert_node_before(head,n,newkern(k)) -- type 0/2 end end end end if not keep then kerns = { } end -- if trace_injections then -- show_result(head) -- end return head, true elseif not keep then kerns, cursives, marks = { }, { }, { } end elseif has_kerns then if trace_injections then trace(head) end for n in traverse_id(glyph_code,head) do if n.subtype < 256 then local k = n[a_kernpair] if k then local kk = kerns[k] if kk then local rl, x, y, w = kk[1], kk[2] or 0, kk[3], kk[4] if y and y ~= 0 then n.yoffset = y -- todo: h ? end if w then -- copied from above -- local r2l = kk[6] local wx = w - x if rl < 0 then -- KE: don't use r2l here if wx ~= 0 then insert_node_before(head,n,newkern(wx)) end if x ~= 0 then insert_node_after (head,n,newkern(x)) end else if x ~= 0 then insert_node_before(head,n,newkern(x)) end if wx ~= 0 then insert_node_after(head,n,newkern(wx)) end end else -- simple (e.g. kernclass kerns) if x ~= 0 then insert_node_before(head,n,newkern(x)) end end end end end end if not keep then kerns = { } end -- if trace_injections then -- show_result(head) -- end return head, true else -- no tracing needed end return head, false end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-chart.lua0000644000175000017500000007102712130411274023731 0ustar norbertnorbertif not modules then modules = { } end modules ['x-flow'] = { version = 1.001, comment = "companion to m-flow.mkvi", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- when we can resolve mpcolor at the lua end we will -- use metapost.graphic(....) directly -- todo: labels moduledata.charts = moduledata.charts or { } local gsub, match, find, format, lower = string.gsub, string.match, string.find, string.format, string.lower local setmetatableindex = table.setmetatableindex local P, S, C, Cc, lpegmatch = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc, lpeg.match local report_chart = logs.reporter("chart") local points = number.points local variables = interfaces.variables local v_yes = variables.yes local v_no = variables.no local v_none = variables.none local v_standard = variables.standard local v_overlay = variables.overlay local v_round = variables.round local v_test = variables.test local defaults = { chart = { name = "", option = "", backgroundcolor = "", width = 100*65536, height = 50*65536, dx = 30*65536, dy = 30*65536, offset = 0, bodyfont = "", dot = "", hcompact = variables_no, vcompact = variables_no, autofocus = "", focus = "", labeloffset = 5*65536, commentoffset = 5*65536, exitoffset = 0, }, shape = { -- FLOS rulethickness = 65536, default = "", framecolor = "darkblue", backgroundcolor = "lightgray", }, focus = { -- FLOF rulethickness = 65536, framecolor = "darkred", backgroundcolor = "gray", }, line = { -- FLOL rulethickness = 65536, radius = 10*65536, color = "darkgreen", corner = "", dash = "", arrow = "", offset = "", }, set = { -- FLOX }, split = { nx = 3, ny = 3, command = "", marking = "", before = "", after = "", } } local validshapes = { ["node"] = { kind = "shape", number = 0 }, ["action"] = { kind = "shape", number = 24 }, ["procedure"] = { kind = "shape", number = 5 }, ["product"] = { kind = "shape", number = 12 }, ["decision"] = { kind = "shape", number = 14 }, ["archive"] = { kind = "shape", number = 19 }, ["loop"] = { kind = "shape", number = 35 }, ["wait"] = { kind = "shape", number = 6 }, ["subprocedure"] = { kind = "shape", number = 20 }, ["singledocument"] = { kind = "shape", number = 32 }, ["multidocument"] = { kind = "shape", number = 33 }, ["right"] = { kind = "line", number = 66 }, ["left"] = { kind = "line", number = 67 }, ["up"] = { kind = "line", number = 68 }, ["down"] = { kind = "line", number = 69 }, } local validlabellocations = { l = "l", left = "l", r = "r", right = "r", t = "t", top = "t", b = "b", bottom = "b", lt = "lt", rt = "rt", lb = "lb", rb = "rb", tl = "tl", tr = "tr", bl = "bl", br = "br", } local validcommentlocations = { l = "l", left = "l", r = "r", right = "r", t = "t", top = "t", b = "b", bottom = "b", lt = "lt", rt = "rt", lb = "lb", rb = "rb", tl = "tl", tr = "tr", bl = "bl", br = "br", } local validtextlocations = { l = "l", left = "l", r = "r", right = "r", t = "t", top = "t", b = "b", bottom = "b", c = "c", center = "c", m = "c", middle = "m", lt = "lt", rt = "rt", lb = "lb", rb = "rb", tl = "lt", tr = "rt", bl = "lb", br = "rb", } setmetatableindex(validshapes,function(t,k) local l = gsub(lower(k)," ","") local v = rawget(t,l) if not v then local n = tonumber(k) if n then v = { kind = "shape", number = n } else v = rawget(t,"action") end end t[k] = v return v end) local charts = { } local data, hash, temp, last_x, last_y, name function commands.flow_start_chart(chartname) data = { } hash = { } last_x, last_y = 0, 0 name = chartname end function commands.flow_stop_chart() charts[name] = { data = data, hash = hash, last_x = last_x, last_y = last_y, } data, hash, temp = nil, nil, nil end -- function commands.flow_set(chartname,chartdata) -- local hash = { } -- local data = { } -- charts[name] = { -- data = data, -- hash = hash, -- } -- for i=1,#chartdata do -- local di = data[i] -- local name = di.name or "" -- if name then -- data[#data+1] = { -- name = name, -- labels = di.labels or { }, -- comments = di.comments or { }, -- exits = di.exits or { }, -- connections = di.connections or { }, -- settings = di.settings or { }, -- x = di.x or 1, -- y = di.y or 1, -- } -- hash[name] = i -- end -- end -- end function commands.flow_reset(chartname) charts[name] = nil end function commands.flow_set_current_cell(n) temp = data[tonumber(n)] or { } end function commands.flow_start_cell(settings) temp = { texts = { }, labels = { }, exits = { }, connections = { }, settings = settings, x = 1, y = 1, name = "", } end function commands.flow_stop_cell() data[#data+1] = temp hash[temp.name or #data] = temp end function commands.flow_set_name(str) temp.name = str end function commands.flow_set_shape(str) temp.shape = str end function commands.flow_set_destination(str) temp.destination = str end function commands.flow_set_text(align,str) temp.texts[#temp.texts+1] = { location = align, text = str, } end function commands.flow_set_overlay(str) temp.overlay = str end function commands.flow_set_focus(str) temp.focus = str end function commands.flow_set_figure(str) temp.figure = str end function commands.flow_set_label(location,text) temp.labels[#temp.labels+1] = { location = location, text = text, } end function commands.flow_set_comment(location,text) local connections = temp.connections if connections then local connection = connections[#connections] if connection then local comments = connection.comments if comments then comments[#comments+1] = { location = location, text = text, } end end end end function commands.flow_set_exit(location,text) temp.exits[#temp.exits+1] = { location = location, text = text, } end function commands.flow_set_include(name,x,y,settings) data[#data+1] = { include = name, x = x, y = y, -- settings = settings, } end local function inject(includedata,data,hash) local subchart = charts[includedata.include] if not subchart then return end local subdata = subchart.data if not subdata then return end local xoffset = (includedata.x or 1) - 1 local yoffset = (includedata.y or 1) - 1 local settings = includedata.settings for i=1,#subdata do local si = subdata[i] if si.include then inject(si,data,hash) else local t = { x = si.x + xoffset, y = si.y + yoffset, settings = settings, } setmetatableindex(t,si) data[#data+1] = t hash[si.name or #data] = t end end end local function pack(data,field) local list, max = { }, 0 for e=1,#data do local d = data[e] local f = d[field] list[f] = true if f > max then max = f end end for i=1,max do if not list[i] then for e=1,#data do local d = data[e] local f = d[field] if f > i then d[field] = f - 1 end end end end end local function expanded(chart,chartsettings) local expandeddata = { } local expandedhash = { } local expandedchart = { data = expandeddata, hash = expandedhash, } setmetatableindex(expandedchart,chart) local data = chart.data local hash = chart.hash for i=1,#data do local di = data[i] if di.include then inject(di,expandeddata,expandedhash) else expandeddata[#expandeddata+1] = di expandedhash[di.name or #expandeddata] = di end end -- expandedchart.settings = chartsettings or { } -- make locals chartsettings.shape = chartsettings.shape or { } chartsettings.focus = chartsettings.focus or { } chartsettings.line = chartsettings.line or { } chartsettings.set = chartsettings.set or { } chartsettings.split = chartsettings.split or { } chartsettings.chart = chartsettings.chart or { } setmetatableindex(chartsettings.shape,defaults.shape) setmetatableindex(chartsettings.focus,defaults.focus) setmetatableindex(chartsettings.line ,defaults.line ) setmetatableindex(chartsettings.set ,defaults.set ) setmetatableindex(chartsettings.split,defaults.split) setmetatableindex(chartsettings.chart,defaults.chart) -- if chartsettings.chart.vcompact == v_yes then pack(expandeddata,"y") end if chartsettings.chart.hcompact == v_yes then pack(expandeddata,"x") end -- for i=1,#expandeddata do local cell = expandeddata[i] local settings = cell.settings if not settings then cell.settings = chartsettings else settings.shape = settings.shape or { } settings.focus = settings.focus or { } settings.line = settings.line or { } setmetatableindex(settings.shape,chartsettings.shape) setmetatableindex(settings.focus,chartsettings.focus) setmetatableindex(settings.line ,chartsettings.line) end end return expandedchart end local splitter = lpeg.splitat(",") function commands.flow_set_location(x,y) if type(x) == "string" and not y then x, y = lpegmatch(splitter,x) end if not x or x == "" then x = last_x elseif type(x) == "number" then -- ok elseif x == "+" then x = last_x + 1 elseif x == "-" then x = last_x - 1 elseif find(x,"^[%+%-]") then x = last_x + (tonumber(x) or 0) else x = tonumber(x) end if not y or y == "" then y = last_y elseif type(y) == "number" then -- ok elseif y == "+" then y = last_y + 1 elseif x == "-" then y = last_y - 1 elseif find(y,"^[%+%-]") then y = last_y + (tonumber(y) or 0) else y = tonumber(y) end temp.x = x or 1 temp.y = y or 1 last_x = x or last_x last_y = y or last_y end function commands.flow_set_connection(location,displacement,name) local dx, dy = lpegmatch(splitter,displacement) dx = tonumber(dx) dy = tonumber(dy) temp.connections[#temp.connections+1] = { location = location, dx = dx or 0, dy = dy or 0, name = name, comments = { }, } end local function visible(chart,cell) local x, y = cell.x, cell.y return x >= chart.from_x and x <= chart.to_x and y >= chart.from_y and y <= chart.to_y and cell end local function process_cells(chart,xoffset,yoffset) local data = chart.data if not data then return end local focus = utilities.parsers.settings_to_hash(chart.settings.chart.focus or "") for i=1,#data do local cell = visible(chart,data[i]) if cell then local settings = cell.settings local shapesettings = settings.shape local shape = cell.shape if not shape or shape == "" then shape = shapesettings.default or "none" end if shape ~= v_none then local shapedata = validshapes[shape] context("flow_begin_sub_chart ;") -- when is this needed if shapedata.kind == "line" then local linesettings = settings.line context("flow_shape_line_color := \\MPcolor{%s} ;", linesettings.color) context("flow_shape_fill_color := \\MPcolor{%s} ;", linesettings.backgroundcolor) context("flow_shape_line_width := %s ; ", points(linesettingsrulethickness)) elseif focus[cell.focus] or focus[cell.name] then local focussettings = settings.focus context("flow_shape_line_color := \\MPcolor{%s} ;", focussettings.framecolor) context("flow_shape_fill_color := \\MPcolor{%s} ;", focussettings.backgroundcolor) context("flow_shape_line_width := %s ; ", points(focussettings.rulethickness)) else local shapesettings = settings.shape context("flow_shape_line_color := \\MPcolor{%s} ;", shapesettings.framecolor) context("flow_shape_fill_color := \\MPcolor{%s} ;", shapesettings.backgroundcolor) context("flow_shape_line_width := %s ; " , points(shapesettings.rulethickness)) end context("flow_peepshape := false ;") -- todo context("flow_new_shape(%s,%s,%s) ;",cell.x+xoffset,cell.y+yoffset,shapedata.number) context("flow_end_sub_chart ;") end end end end -- todo : make lpeg for splitter local sign = S("+p") / "1" + S("-m") / "-1" local full = C(P("left")) + C(P("right")) + C(P("top")) + C(P("bottom")) local char = P("l") / "left" + P("r") / "right" + P("t") / "top" + P("b") / "bottom" local space = P(" ")^0 local what = space * (sign + Cc("0")) * space * (full + char) * space * (sign + Cc("0")) * space * (full + char) * space * P(-1) -- print(lpegmatch(what,"lr")) -- print(lpegmatch(what,"+l+r")) -- print(lpegmatch(what,"+l")) -- print(lpegmatch(what,"+ left+r ")) local function process_connections(chart,xoffset,yoffset) local data = chart.data local hash = chart.hash if not data then return end local settings = chart.settings for i=1,#data do local cell = visible(chart,data[i]) if cell then local connections = cell.connections for j=1,#connections do local connection = connections[j] local othername = connection.name local othercell = hash[othername] if othercell then -- and visible(chart,data[i]) then local cellx, celly = cell.x, cell.y local otherx, othery, location = othercell.x, othercell.y, connection.location if otherx > 0 and othery > 0 and cellx > 0 and celly > 0 and connection.location then local what_cell, where_cell, what_other, where_other = lpegmatch(what,location) if what_cell and where_cell and what_other and where_other then local linesettings = settings.line context("flow_smooth := %s ;", linesettings.corner == v_round and "true" or "false") context("flow_dashline := %s ;", linesettings.dash == v_yes and "true" or "false") context("flow_arrowtip := %s ;", linesettings.arrow == v_yes and "true" or "false") context("flow_touchshape := %s ;", linesettings.offset == v_none and "true" or "false") context("flow_dsp_x := %s ; flow_dsp_y := %s ;",connection.dx or 0, connection.dy or 0) context("flow_connection_line_color := \\MPcolor{%s} ;",linesettings.color) context("flow_connection_line_width := 2pt ;",points(linesettings.rulethickness)) context("flow_connect_%s_%s (%s) (%s,%s,%s) (%s,%s,%s) ;",where_cell,where_other,j,cellx,celly,what_cell,otherx,othery,what_other) context("flow_dsp_x := 0 ; flow_dsp_y := 0 ;") end end end end end end end local texttemplate = "\\setvariables[flowcell:text][x=%s,y=%s,text={%s},align={%s},figure={%s},destination={%s}]" local splitter = lpeg.splitat(":") local function process_texts(chart,xoffset,yoffset) local data = chart.data local hash = chart.hash if not data then return end for i=1,#data do local cell = visible(chart,data[i]) if cell then local x = cell.x or 1 local y = cell.y or 1 local texts = cell.texts for i=1,#texts do local text = texts[i] local data = text.text local align = validlabellocations[text.align or ""] or text.align or "" local figure = i == 1 and cell.figure or "" local destination = i == 1 and cell.destination or "" context('flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,format(texttemplate,x,y,data,align,figure,destination)) end local labels = cell.labels for i=1,#labels do local label = labels[i] local text = label.text local location = validlabellocations[label.location or ""] or label.location or "" if text and location then context('flow_chart_draw_label(%s,%s,"%s",textext("\\strut %s")) ;',x,y,location,text) end end local exits = cell.exits for i=1,#exits do local exit = exits[i] local text = exit.text local location = validlabellocations[exit.location or ""] if text and location then -- maybe make autoexit an option if location == "l" and x == chart.from_x + 1 or location == "r" and x == chart.to_x - 1 or location == "t" and y == chart.to_y - 1 or location == "b" and y == chart.from_y + 1 then context('flow_chart_draw_exit(%s,%s,"%s",textext("\\strut %s")) ;',x,y,location,text) end end end local connections = cell.connections for i=1,#connections do local comments = connections[i].comments for j=1,#comments do local comment = comments[j] local text = comment.text local location = comment.location or "" local length = 0 -- "tl" "tl:*" "tl:0.5" local loc, len = lpegmatch(splitter,location) -- do the following in lpeg if len == "*" then location = validcommentlocations[loc] or "" if location == "" then location = "*" else location = location .. ":*" end elseif loc then location = validcommentlocations[loc] or "*" length = tonumber(len) or 0 else location = validcommentlocations[location] or "" end if text and location then context('flow_chart_draw_comment(%s,%s,%s,"%s",%s,textext("\\strut %s")) ;',x,y,i,location,length,text) end end end end end end local function getchart(settings,forced_x,forced_y,forced_nx,forced_ny) if not settings then print("no settings given") return end local chartname = settings.chart.name if not chartname then print("no name given") return end local chart = charts[chartname] if not chart then print("no such chart",chartname) return end chart = expanded(chart,settings) local chartsettings = chart.settings.chart local autofocus = chart.settings.chart.autofocus if autofocus then autofocus = utilities.parsers.settings_to_hash(autofocus) if not next(autofocus) then autofocus = false end end -- check natural window local x = forced_x or tonumber(chartsettings.x) local y = forced_y or tonumber(chartsettings.y) local nx = forced_nx or tonumber(chartsettings.nx) local ny = forced_ny or tonumber(chartsettings.ny) -- local minx, miny, maxx, maxy = 0, 0, 0, 0 local data = chart.data for i=1,#data do local cell = data[i] if not autofocus or autofocus[cell.name] then -- offsets probably interfere with autofocus local x = cell.x local y = cell.y if minx == 0 or x < minx then minx = x end if miny == 0 or y < miny then miny = y end if minx == 0 or x > maxx then maxx = x end if miny == 0 or y > maxy then maxy = y end end end -- print("1>",x,y,nx,ny) -- print("2>",minx, miny, maxx, maxy) -- check of window should be larger (maybe autofocus + nx/ny?) if autofocus then -- x and y are ignored if nx and nx > 0 then maxx = minx + nx - 1 end if ny and ny > 0 then maxy = miny + ny - 1 end else if x and x > 0 then minx = x end if y and y > 0 then miny = y end if nx and nx > 0 then maxx = minx + nx - 1 end if ny and ny > 0 then maxy = miny + ny - 1 end end -- print("3>",minx, miny, maxx, maxy) -- local nx = maxx - minx + 1 local ny = maxy - miny + 1 -- relocate cells for i=1,#data do local cell = data[i] cell.x = cell.x - minx + 1 cell.y = cell.y - miny + 1 end chart.from_x = 1 chart.from_y = 1 chart.to_x = nx chart.to_y = ny chart.nx = nx chart.ny = ny -- -- inspect(chart) return chart end local function makechart(chart) local settings = chart.settings local chartsettings = settings.chart -- context.begingroup() context.forgetall() -- context.startMPcode() context("if unknown context_flow : input mp-char.mpiv ; fi ;") context("flow_begin_chart(0,%s,%s);",chart.nx,chart.ny) -- if chartsettings.option == v_test or chartsettings.dot == v_yes then context("flow_show_con_points := true ;") context("flow_show_mid_points := true ;") context("flow_show_all_points := true ;") elseif chartsettings.dot ~= "" then -- no checking done, private option context("flow_show_%s_points := true ;",chartsettings.dot) end -- local backgroundcolor = chartsettings.backgroundcolor if backgroundcolor and backgroundcolor ~= "" then context("flow_chart_background_color := \\MPcolor{%s} ;",backgroundcolor) end -- local shapewidth = chartsettings.width local gridwidth = shapewidth + 2*chartsettings.dx local shapeheight = chartsettings.height local gridheight = shapeheight + 2*chartsettings.dy local chartoffset = chartsettings.offset local labeloffset = chartsettings.labeloffset local exitoffset = chartsettings.exitoffset local commentoffset = chartsettings.commentoffset context("flow_grid_width := %s ;", points(gridwidth)) context("flow_grid_height := %s ;", points(gridheight)) context("flow_shape_width := %s ;", points(shapewidth)) context("flow_shape_height := %s ;", points(shapeheight)) context("flow_chart_offset := %s ;", points(chartoffset)) context("flow_label_offset := %s ;", points(labeloffset)) context("flow_exit_offset := %s ;", points(exitoffset)) context("flow_comment_offset := %s ;", points(commentoffset)) -- local radius = settings.line.radius local rulethickness = settings.line.rulethickness local dx = chartsettings.dx local dy = chartsettings.dy if radius < rulethickness then radius = 2.5*rulethickness if radius > dx then radius = dx end if radius > dy then radius = dy end end context("flow_connection_line_width := %s ;", points(rulethickness)) context("flow_connection_smooth_size := %s ;", points(radius)) context("flow_connection_arrow_size := %s ;", points(radius)) context("flow_connection_dash_size := %s ;", points(radius)) -- local offset = chartsettings.offset -- todo: pass string if offset == v_none or offset == v_overlay or offset == "" then offset = -2.5 * radius -- or rulethickness? elseif offset == v_standard then offset = radius -- or rulethickness? end context("flow_chart_offset := %s ;",points(offset)) -- context("flow_reverse_y := true ;") process_cells(chart,0,0) process_connections(chart,0,0) process_texts(chart,0,0) -- context("clip_chart(%s,%s,%s,%s) ;",x,y,nx,ny) -- todo: draw lines but not shapes context("flow_end_chart ;") context.stopMPcode() context.endgroup() end local function splitchart(chart) local settings = chart.settings local splitsettings = settings.split local chartsettings = settings.chart -- local name = chartsettings.name -- local from_x = chart.from_x local from_y = chart.from_y local to_x = chart.to_x local to_y = chart.to_y -- local step_x = splitsettings.nx or to_x local step_y = splitsettings.ny or to_y local delta_x = splitsettings.dx or 0 local delta_y = splitsettings.dy or 0 -- report_chart("spliting %a from (%s,%s) upto (%s,%s) into (%s,%s) with overlap (%s,%s)", name,from_x,from_y,to_x,to_y,step_x,step_y,delta_x,delta_y) -- local part_x = 0 local first_x = from_x while true do part_x = part_x + 1 local last_x = first_x + step_x - 1 local done = last_x >= to_x if done then last_x = to_x end local part_y = 0 local first_y = from_y while true do part_y = part_y + 1 local last_y = first_y + step_y - 1 local done = last_y >= to_y if done then last_y = to_y end -- report_chart("part (%s,%s) of %a is split from (%s,%s) -> (%s,%s)",part_x,part_y,name,first_x,first_y,last_x,last_y) local x, y, nx, ny = first_x, first_y, last_x - first_x + 1,last_y - first_y + 1 context.beforeFLOWsplit() context.handleFLOWsplit(function() makechart(getchart(settings,x,y,nx,ny)) -- we need to pass frozen settings ! end) context.afterFLOWsplit() -- if done then break else first_y = last_y + 1 - delta_y end end if done then break else first_x = last_x + 1 - delta_x end end end function commands.flow_make_chart(settings) local chart = getchart(settings) if chart then local settings = chart.settings if settings then local chartsettings = settings.chart if chartsettings and chartsettings.split == v_yes then splitchart(chart) else makechart(chart) end else makechart(chart) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-dig.lua0000644000175000017500000001200512161703335024127 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-dig'] = { version = 1.001, comment = "companion to typo-dig.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- we might consider doing this after the otf pass because now osf do not work -- out well in node mode. local next, type = next, type local format, insert = string.format, table.insert local round, div = math.round, math.div local trace_digits = false trackers.register("typesetters.digits", function(v) trace_digits = v end) local report_digits = logs.reporter("typesetting","digits") local nodes, node = nodes, node local hpack_node = node.hpack local traverse_id = node.traverse_id local insert_node_before = node.insert_before local insert_node_after = node.insert_after local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local nodepool = nodes.pool local tasks = nodes.tasks local new_glue = nodepool.glue local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local chardata = fonthashes.characters local quaddata = fonthashes.quads local v_reset = interfaces.variables.reset local charbase = characters.data local getdigitwidth = fonts.helpers.getdigitwidth typesetters = typesetters or { } local typesetters = typesetters typesetters.digits = typesetters.digits or { } local digits = typesetters.digits digits.actions = { } local actions = digits.actions local a_digits = attributes.private("digits") digits.attribute = a_digits -- at some point we can manipulate the glyph node so then i need -- to rewrite this then function nodes.aligned(head,start,stop,width,how) if how == "flushright" or how == "middle" then head, start = insert_node_before(head,start,new_glue(0,65536,65536)) end if how == "flushleft" or how == "middle" then head, stop = insert_node_after(head,stop,new_glue(0,65536,65536)) end local prv, nxt = start.prev, stop.next start.prev, stop.next = nil, nil local packed = hpack_node(start,width,"exactly") -- no directional mess here, just lr if prv then prv.next, packed.prev = packed, prv end if nxt then nxt.prev, packed.next = packed, nxt end if packed.prev then return head, packed else return packed, packed end end actions[1] = function(head,start,attribute,attr) local font = start.font local char = start.char local unic = chardata[font][char].tounicode local what = unic and tonumber(unic,16) or char if charbase[what].category == "nd" then local oldwidth, newwidth = start.width, getdigitwidth(font) if newwidth ~= oldwidth then if trace_digits then report_digits("digit trigger %a, instance %a, char %C, unicode %U, delta %s", attr%100,div(attr,100),char,what,newwidth-oldwidth) end head, start = nodes.aligned(head,start,start,newwidth,"middle") return head, start, true end end return head, start, false end local function process(namespace,attribute,head) local done, current, ok = false, head, false while current do if current.id == glyph_code then local attr = current[attribute] if attr and attr > 0 then current[attribute] = unsetvalue local action = actions[attr%100] -- map back to low number if action then head, current, ok = action(head,current,attribute,attr) done = done and ok elseif trace_digits then report_digits("unknown digit trigger %a",attr) end end end current = current and current.next end return head, done end local m, enabled = 0, false -- a trick to make neighbouring ranges work function digits.set(n) -- number or 'reset' if n == v_reset then n = unsetvalue else n = tonumber(n) if n then if not enabled then tasks.enableaction("processors","typesetters.digits.handler") if trace_digits then report_digits("enabling digit handler") end enabled = true end if m == 100 then m = 1 else m = m + 1 end n = m * 100 + n else n = unsetvalue end end texattribute[a_digits] = n end digits.handler = nodes.installattributehandler { -- we could avoid this wrapper name = "digits", namespace = digits, processor = process, } -- interface commands.setdigitsmanipulation = digits.set context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-lmnames.mkiv0000644000175000017500000002477112161703335025773 0ustar norbertnorbert%D \module %D [ file=type-otf, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Opentype Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[latinmodern-names] \starttypescript [\s!serif] [modern,latin-modern-designsize,latin-modern] \definefontsynonym [LMRoman5-Regular] [\s!file:lmroman5-regular] [\s!features=\s!default] \definefontsynonym [LMRoman6-Regular] [\s!file:lmroman6-regular] [\s!features=\s!default] \definefontsynonym [LMRoman7-Regular] [\s!file:lmroman7-regular] [\s!features=\s!default] \definefontsynonym [LMRoman8-Regular] [\s!file:lmroman8-regular] [\s!features=\s!default] \definefontsynonym [LMRoman9-Regular] [\s!file:lmroman9-regular] [\s!features=\s!default] \definefontsynonym [LMRoman10-Regular] [\s!file:lmroman10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman12-Regular] [\s!file:lmroman12-regular] [\s!features=\s!default] \definefontsynonym [LMRoman17-Regular] [\s!file:lmroman17-regular] [\s!features=\s!default] \definefontsynonym [LMRoman5-Bold] [\s!file:lmroman5-bold] [\s!features=\s!default] \definefontsynonym [LMRoman6-Bold] [\s!file:lmroman6-bold] [\s!features=\s!default] \definefontsynonym [LMRoman7-Bold] [\s!file:lmroman7-bold] [\s!features=\s!default] \definefontsynonym [LMRoman8-Bold] [\s!file:lmroman8-bold] [\s!features=\s!default] \definefontsynonym [LMRoman9-Bold] [\s!file:lmroman9-bold] [\s!features=\s!default] \definefontsynonym [LMRoman10-Bold] [\s!file:lmroman10-bold] [\s!features=\s!default] \definefontsynonym [LMRoman12-Bold] [\s!file:lmroman12-bold] [\s!features=\s!default] \definefontsynonym [LMRoman7-Italic] [\s!file:lmroman7-italic] [\s!features=\s!default] \definefontsynonym [LMRoman8-Italic] [\s!file:lmroman8-italic] [\s!features=\s!default] \definefontsynonym [LMRoman9-Italic] [\s!file:lmroman9-italic] [\s!features=\s!default] \definefontsynonym [LMRoman10-Italic] [\s!file:lmroman10-italic] [\s!features=\s!default] \definefontsynonym [LMRoman12-Italic] [\s!file:lmroman12-italic] [\s!features=\s!default] \definefontsynonym [LMRoman10-BoldItalic] [\s!file:lmroman10-bolditalic] [\s!features=\s!default] \definefontsynonym [LMRoman8-Oblique] [\s!file:lmromanslant8-regular] [\s!features=\s!default] \definefontsynonym [LMRoman9-Oblique] [\s!file:lmromanslant9-regular] [\s!features=\s!default] \definefontsynonym [LMRoman10-Oblique] [\s!file:lmromanslant10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman12-Oblique] [\s!file:lmromanslant12-regular] [\s!features=\s!default] \definefontsynonym [LMRoman17-Oblique] [\s!file:lmromanslant17-regular] [\s!features=\s!default] \definefontsynonym [LMRoman10-BoldOblique] [\s!file:lmromanslant10-bold] [\s!features=\s!default] \definefontsynonym [LMRoman10-Demi] [\s!file:lmromandemi10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman10-DemiOblique] [\s!file:lmromandemi10-oblique] [\s!features=\s!default] \definefontsynonym [LMRoman10-CapsRegular] [\s!file:lmromancaps10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman10-CapsOblique] [\s!file:lmromancaps10-oblique] [\s!features=\s!default] \definefontsynonym [LMRoman10-Dunhill] [\s!file:lmromandunh10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman10-DunhillOblique] [\s!file:lmromandunh10-oblique] [\s!features=\s!default] \definefontsynonym [LMRoman10-Unslanted] [\s!file:lmromanunsl10-regular] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [modern,latin-modern-designsize,latin-modern] \definefontsynonym [LMSans8-Regular] [\s!file:lmsans8-regular] [\s!features=\s!default] \definefontsynonym [LMSans9-Regular] [\s!file:lmsans9-regular] [\s!features=\s!default] \definefontsynonym [LMSans10-Regular] [\s!file:lmsans10-regular] [\s!features=\s!default] \definefontsynonym [LMSans12-Regular] [\s!file:lmsans12-regular] [\s!features=\s!default] \definefontsynonym [LMSans17-Regular] [\s!file:lmsans17-regular] [\s!features=\s!default] \definefontsynonym [LMSans10-Bold] [\s!file:lmsans10-bold] [\s!features=\s!default] \definefontsynonym [LMSans8-Oblique] [\s!file:lmsans8-oblique] [\s!features=\s!default] \definefontsynonym [LMSans9-Oblique] [\s!file:lmsans9-oblique] [\s!features=\s!default] \definefontsynonym [LMSans10-Oblique] [\s!file:lmsans10-oblique] [\s!features=\s!default] \definefontsynonym [LMSans12-Oblique] [\s!file:lmsans12-oblique] [\s!features=\s!default] \definefontsynonym [LMSans17-Oblique] [\s!file:lmsans17-oblique] [\s!features=\s!default] \definefontsynonym [LMSans10-BoldOblique] [\s!file:lmsans10-boldoblique] [\s!features=\s!default] \definefontsynonym [LMSans10-DemiCondensed] [\s!file:lmsansdemicond10-regular] [\s!features=\s!default] \definefontsynonym [LMSans10-DemiCondensedOblique] [\s!file:lmsansdemicond10-oblique] [\s!features=\s!default] \definefontsynonym [LMSansQuotation8-Regular] [\s!file:lmsansquot8-regular] [\s!features=\s!default] \definefontsynonym [LMSansQuotation8-Bold] [\s!file:lmsansquot8-bold] [\s!features=\s!default] \definefontsynonym [LMSansQuotation8-Oblique] [\s!file:lmsansquot8-oblique] [\s!features=\s!default] \definefontsynonym [LMSansQuotation8-BoldOblique] [\s!file:lmsansquot8-boldoblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [modern,latin-modern-designsize,latin-modern,modern-variable,modern-condensed,latin-modern-variable,latin-modern-condensed] \definefontsynonym [LMTypewriter8-Regular] [\s!file:lmmono8-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter9-Regular] [\s!file:lmmono9-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-Regular] [\s!file:lmmono10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter12-Regular] [\s!file:lmmono12-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-Italic] [\s!file:lmmono10-italic] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-Oblique] [\s!file:lmmonoslant10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-CapsRegular] [\s!file:lmmonocaps10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-CapsOblique] [\s!file:lmmonocaps10-oblique] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-Light] [\s!file:lmmonolt10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-LightOblique] [\s!file:lmmonolt10-oblique] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-LightCondensed] [\s!file:lmmonoltcond10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-LightCondensedOblique] [\s!file:lmmonoltcond10-oblique] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-Dark] [\s!file:lmmonolt10-bold] [\s!features=\s!none] \definefontsynonym [LMTypewriter10-DarkOblique] [\s!file:lmmonolt10-boldoblique] [\s!features=\s!none] \definefontsynonym [LMTypewriterVarWd10-Regular] [\s!file:lmmonoproplt10-regular] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd10-Oblique] [\s!file:lmmonoproplt10-oblique] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd10-Light] [\s!file:lmmonoprop10-regular] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd10-LightOblique] [\s!file:lmmonoprop10-oblique] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd10-Dark] [\s!file:lmmonoproplt10-bold] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd10-DarkOblique] [\s!file:lmmonoproplt10-boldoblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!math] [modern,latin-modern] \definefontsynonym [LMMathRoman5-Regular] [LMMath5-Regular@lmroman5-math] \definefontsynonym [LMMathRoman6-Regular] [LMMath6-Regular@lmroman6-math] \definefontsynonym [LMMathRoman7-Regular] [LMMath7-Regular@lmroman7-math] \definefontsynonym [LMMathRoman8-Regular] [LMMath8-Regular@lmroman8-math] \definefontsynonym [LMMathRoman9-Regular] [LMMath9-Regular@lmroman9-math] \definefontsynonym [LMMathRoman10-Regular] [LMMath10-Regular@lmroman10-math] \definefontsynonym [LMMathRoman12-Regular] [LMMath12-Regular@lmroman12-math] \definefontsynonym [LMMathRoman17-Regular] [LMMath17-Regular@lmroman17-math] % we no longer care to provide pseudo full bold \definefontsynonym [LMMathRoman5-Bold] [LMMathRoman5-Regular] \definefontsynonym [LMMathRoman6-Bold] [LMMathRoman6-Regular] \definefontsynonym [LMMathRoman7-Bold] [LMMathRoman7-Regular] \definefontsynonym [LMMathRoman8-Bold] [LMMathRoman8-Regular] \definefontsynonym [LMMathRoman9-Bold] [LMMathRoman9-Regular] \definefontsynonym [LMMathRoman10-Bold] [LMMathRoman10-Regular] \definefontsynonym [LMMathRoman12-Bold] [LMMathRoman12-Regular] \definefontsynonym [LMMathRoman17-Bold] [LMMathRoman17-Regular] \loadfontgoodies[lm-math] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/s-math-coverage.lua0000644000175000017500000001325212161703335025362 0ustar norbertnorbertif not modules then modules = { } end modules ['s-math-coverage'] = { version = 1.001, comment = "companion to s-math-coverage.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.math = moduledata.math or { } moduledata.math.coverage = moduledata.math.coverage or { } local utfchar, utfbyte = utf.char, utf.byte local formatters, lower = string.formatters, string.lower local concat = table.concat local context = context local NC, NR, HL = context.NC, context.NR, context.HL local char, getglyph, bold = context.char, context.getglyph, context.bold local ucgreek = { 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9 } local lcgreek = { 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03D1, 0x03D5, 0x03D6, 0x03F0, 0x03F1, 0x03F4, 0x03F5 } local ucletters = { 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047, 0x00048, 0x00049, 0x0004A, 0x0004B, 0x0004C, 0x0004D, 0x0004E, 0x0004F, 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057, 0x00058, 0x00059, 0x0005A, } local lcletters = { 0x00061, 0x00062, 0x00063, 0x00064, 0x00065, 0x00066, 0x00067, 0x00068, 0x00069, 0x0006A, 0x0006B, 0x0006C, 0x0006D, 0x0006E, 0x0006F, 0x00070, 0x00071, 0x00072, 0x00073, 0x00074, 0x00075, 0x00076, 0x00077, 0x00078, 0x00079, 0x0007A, } local digits = { 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039, } local styles = { "regular", "sansserif", "monospaced", "fraktur", "script", "blackboard" } local alternatives = { "normal", "bold", "italic", "bolditalic" } local alphabets = { ucletters, lcletters, ucgreek, lcgreek, digits, } local getboth = mathematics.getboth local remapalphabets = mathematics.remapalphabets local chardata = characters.data local superscripts = characters.superscripts local subscripts = characters.subscripts function moduledata.math.coverage.showalphabets() context.starttabulate { "|lT|l|Tl|" } for i=1,#styles do local style = styles[i] for i=1,#alternatives do local alternative = alternatives[i] for i=1,#alphabets do local alphabet = alphabets[i] NC() if i == 1 then context("%s %s",style,alternative) end NC() context.startimath() context.setmathattribute(style,alternative) for i=1,#alphabet do local letter = alphabet[i] local id = getboth(style,alternative) local unicode = remapalphabets(letter,id) if not unicode then context.underbar(utfchar(letter)) elseif unicode == letter then context(utfchar(unicode)) else context(utfchar(unicode)) end end context.stopimath() NC() local first = alphabet[1] local last = alphabet[#alphabet] local id = getboth(style,alternative) local f_unicode = remapalphabets(first,id) or utfbyte(first) local l_unicode = remapalphabets(last,id) or utfbyte(last) context("%05X - %05X",f_unicode,l_unicode) NC() NR() end end end context.stoptabulate() end function moduledata.math.coverage.showcharacters() context.startcolumns() context.setupalign { "nothyphenated" } context.starttabulate { "|T|i2|Tpl|" } for u, d in table.sortedpairs(chardata) do local mathclass = d.mathclass local mathspec = d.mathspec if mathclass or mathspec then NC() context("%05X",u) NC() getglyph("MathRoman",u) NC() if mathspec then local t = { } for i=1,#mathspec do t[mathspec[i].class] = true end t = table.sortedkeys(t) context("% t",t) else context(mathclass) end NC() NR() end end context.stoptabulate() context.stopcolumns() end -- This is a somewhat tricky table as we need to bypass the math machinery. function moduledata.math.coverage.showscripts() context.starttabulate { "|cT|c|cT|c|c|c|l|" } for k, v in table.sortedpairs(table.merged(superscripts,subscripts)) do local ck = utfchar(k) local cv = utfchar(v) local ss = superscripts[k] and "^" or "_" NC() context("%05X",k) NC() context(ck) NC() context("%05X",v) NC() context(cv) NC() context.formatted.rawmathematics("x%s = x%s%s",ck,ss,cv) NC() context.formatted.mathematics("x%s = x%s%s",ck,ss,cv) NC() context(lower(chardata[k].description)) NC() NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/file-mod.lua0000644000175000017500000001346212130411274024071 0ustar norbertnorbertif not modules then modules = { } end modules ['file-mod'] = { version = 1.001, comment = "companion to file-mod.mkvi", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This module will be redone! For instance, the prefixes will move to data-* -- as they arr sort of generic along with home:// etc/. -- context is not defined yet! todo! (we need to load tupp-fil after cld) -- todo: move startreadingfile to lua and push regime there --[[ldx--

It's more convenient to manipulate filenames (paths) in than in . These methods have counterparts at the side.

--ldx]]-- local format, concat, tonumber = string.format, table.concat, tonumber local trace_modules = false trackers.register("modules.loading", function(v) trace_modules = v end) local report_modules = logs.reporter("resolvers","modules") commands = commands or { } local commands = commands local findbyscheme = resolvers.finders.byscheme -- use different one local iterator = utilities.parsers.iterator -- modules can have a specific suffix or can specify one local prefixes = { "m", "p", "s", "x", "v", "t" } local suffixes = { "mkvi", "mkiv", "tex", "cld", "lua" } -- order might change and how about cld local modstatus = { } local function usemodule(name,hasscheme) local foundname if hasscheme then -- no auto suffix as http will return a home page or error page -- so we only add one if missing local fullname = file.addsuffix(name,"tex") if trace_modules then report_modules("checking url %a",fullname) end foundname = resolvers.findtexfile(fullname) or "" elseif file.suffix(name) ~= "" then if trace_modules then report_modules("checking file %a",name) end foundname = findbyscheme("any",name) or "" else for i=1,#suffixes do local fullname = file.addsuffix(name,suffixes[i]) if trace_modules then report_modules("checking file %a",fullname) end foundname = findbyscheme("any",fullname) or "" if foundname ~= "" then break end end end if foundname ~= "" then if trace_modules then report_modules("loading file %a",foundname) end context.startreadingfile() resolvers.jobs.usefile(foundname,true) -- once, notext -- context.input(foundname) context.stopreadingfile() return true else return false end end function commands.usemodules(prefix,askedname,truename) local truename = truename or environment.truefilename(askedname) local hasprefix = prefix and prefix ~= "" local hashname = ((hasprefix and prefix) or "*") .. "-" .. truename local status = modstatus[hashname] if status == 0 then -- not found elseif status == 1 then status = status + 1 else if trace_modules then report_modules("locating, prefix %a, askedname %a, truename %a",prefix,askedname,truename) end local hasscheme = url.hasscheme(truename) if hasscheme then -- no prefix and suffix done if usemodule(truename,true) then status = 1 else status = 0 end elseif hasprefix then if usemodule(prefix .. "-" .. truename) then status = 1 else status = 0 end else for i=1,#prefixes do -- todo: reconstruct name i.e. basename local thename = prefixes[i] .. "-" .. truename if usemodule(thename) then status = 1 break end end if status then -- ok, don't change elseif usemodule(truename) then status = 1 else status = 0 end end end if status == 0 then report_modules("%a is not found",askedname) elseif status == 1 then report_modules("%a is loaded",trace_modules and truename or askedname) else report_modules("%a is already loaded",trace_modules and truename or askedname) end modstatus[hashname] = status end statistics.register("loaded tex modules", function() if next(modstatus) then local t, f, nt, nf = { }, { }, 0, 0 for k, v in table.sortedhash(modstatus) do k = file.basename(k) if v == 0 then nf = nf + 1 f[nf] = k else nt = nt + 1 t[nt] = k end end if nf == 0 then return format("%s requested, all found (%s)",nt,concat(t," ")) elseif nt == 0 then return format("%s requested, all missing (%s)",nf,concat(f," ")) else return format("%s requested, %s found (%s), %s missing (%s)",nt+nf,nt,concat(t," "),nf,concat(f," ")) end else return nil end end) -- moved from syst-lua.lua: local splitter = lpeg.tsplitter(lpeg.S(". "),tonumber) function commands.doifolderversionelse(one,two) -- one >= two if not two then one, two = environment.version, one elseif one == "" then one = environment.version end one = lpeg.match(splitter,one) two = lpeg.match(splitter,two) one = (one[1] or 0) * 10000 + (one[2] or 0) * 100 + (one[3] or 0) two = (two[1] or 0) * 10000 + (two[2] or 0) * 100 + (two[3] or 0) commands.doifelse(one>=two) end function commands.useluamodule(list) for filename in iterator(list) do environment.loadluafile(filename) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-run.mkiv0000644000175000017500000003132012130411274024323 0ustar norbertnorbert%D \module %D [ file=font-run, %D version=1998.09.11, % (second) %D version=2001.02.20, % (third) %D title=\CONTEXT\ Font Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code is hooked into the core macros and saves some %D format space. It needs a cleanup.] \unprotect \gdef\@@onlyenglish#1% {\blank{\tttf \type {#1} is only available in the english interface}\blank} \gdef\dosetshowfonttitle#1% {\tabskip\zeropoint \parindent\zeropoint \setlocalhsize \doifelsenothing{#1} {\def\title{[\the\bodyfontsize]}} {\switchtobodyfont[#1]\def\title{[#1]}} \doifsomething\fontclass {\doifnot{[\fontclass]}\title {\edef\title{[\fontclass]\space\title}}}} \unexpanded\gdef\showbodyfont {\dosingleempty\doshowbodyfont} \gdef\doshowbodyfont[#1]% {\ifinsidefloat\else\startbaselinecorrection\fi \vbox {\dosetshowfonttitle{#1}% \def\bigstrut##1##2% {\hbox{\vrule \s!height##1\strutht \s!depth ##2\strutdp \s!width \zeropoint}} \def\next##1##2##3% {&&##1&&##2\tf##3&&##2\sc##3% &&##2\sl##3&&##2\it##3&&##2\bf##3&&##2\bs##3&&##2\bi##3% &&##2\tfx##3&&##2\tfxx##3% &&##2\tfa##3&&##2\tfb##3&&##2\tfc##3&&##2\tfd##3&\cr}% \halign to \localhsize {\bigstrut{1.5}{2}##&\vrule## \tabskip\zeropoint \s!plus 1\s!fill &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&##\vrule \tabskip=\zeropoint\cr \noalign{\hrule} &\multispan{29}{\vrule\hfil\tttf\strut\title\hfil \llap{\string\mr\hbox to 1em{\hss:\hss}$\mr \languageparameter\c!text$\quad}\vrule}\cr \noalign{\hrule}\next{}{\tt\string}{} \noalign{\hrule}\next{\tt\string\rm}\rm{\languageparameter\c!text} \noalign{\hrule}\next{\tt\string\ss}\ss{\languageparameter\c!text} \noalign{\hrule}\next{\tt\string\tt}\tt{\languageparameter\c!text} \noalign{\hrule}}} \ifinsidefloat\else\stopbaselinecorrection\fi} \unexpanded\gdef\showbodyfontenvironment {\dosingleempty\doshowbodyfontenvironment} \gdef\doshowbodyfontenvironment[#1]% {\ifinsidefloat\else\startbaselinecorrection\fi \vbox {\dosetshowfonttitle{#1}% \def\next##1% {&&\bodyfontsizevariable{##1}\s!text &&\bodyfontsizevariable{##1}\s!script &&\bodyfontsizevariable{##1}\s!scriptscript &&\bodyfontsizevariable{##1}\s!x &&\bodyfontsizevariable{##1}\s!xx &&\bodyfontsizevariable{##1}\v!small &&\bodyfontsizevariable{##1}\v!big &&\bodyfontsizevariable{##1}\c!interlinespace &\cr \noalign{\hrule}} \halign to \localhsize {##&\vrule##\strut \tabskip=\zeropoint \s!plus 1\s!fill &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule##&\hfil##\hfil&\vrule## &\hfil##\hfil&\vrule##&\hfil##\hfil&##\vrule \tabskip\zeropoint\cr \noalign{\hrule} &\multispan{17}{\vrule\hfil\tttf\strut\title\hfil}\vrule\cr \noalign{\hrule} &&\tttf\tx\s!text&&\tttf\tx\s!script&&\tttf\tx\s!scriptscript &&\tttf\tx\s!x&&\tttf\tx\s!xx&&\tttf\tx\v!small&&\tttf\tx\v!big &&\tttf\tx\c!interlinespace&\cr \noalign{\hrule} \@EA\globalprocesscommalist\@EA[\bodyfontenvironmentlist]\next}} \ifinsidefloat\else\stopbaselinecorrection\fi} \unexpanded\gdef\showfont {\dodoubleempty\doshowfont} \gdef\doshowfont[#1][#2]% {\bgroup \iffirstargument \definefont[\s!dummy][#1]\dummy \fi \doifelsenothing{#2} {\dodoshowfont{#1}{0}} {\doifelse{#2}\v!all {\dostepwiserecurse{0}{255}{1} {\donefalse \let\charplane\recurselevel \dostepwiserecurse{0}{255}{1} {\iffontchar\font\numexpr\charplane*256+\recurselevel\relax \donetrue \exitloop \fi}% \ifdone \dodoshowfont{#1}\charplane \fi}} {\processcommalist[#2]{\dodoshowfont{#1}}}}% \egroup} \gdef\dodoshowfont#1#2% {\bgroup \edef\charplane{\number#2}% \iffirstargument % \definefont[\s!dummy][#1]\dummy \else\ifdim2.5em>.05\hsize \tx \ifdim2.5em>.05\hsize \txx \fi\fi\fi \ifinsidefloat\else\startbaselinecorrection\fi \vbox\bgroup \forgetall \startoverlay % easier in cld {\vbox {\tf \setstrut \dummy \offinterlineskip \dostepwiserecurse{0}{15}{1} {\let\row\recurselevel \hbox {\red \dostepwiserecurse{0}{15}{1} {\let\col\recurselevel \@EA\scratchcounter\string"\hexnumber\row\hexnumber\col\relax \edef\rowcol{\the\scratchcounter}% \iffontchar\font\scratchcounter \setbox\scratchbox\ruledhbox{\black\char\numexpr\charplane*256+\scratchcounter\relax}% \ifdim\wd\scratchbox>\zeropoint \donetrue \else \donefalse \fi \else \setbox\scratchbox\hbox{\gray\vrule\s!width1ex\s!height.5ex\s!depth.5ex}% \fi \startoverlay {\tf\vbox to 2.5em {\vss \hbox to 2.5em {\dummy\ifdim\interwordspace=\zeropoint \setbox\scratchbox\hbox {\raise.5\dp\scratchbox\hbox {\lower.5\ht\scratchbox\copy\scratchbox}}% \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \else \ht\scratchbox\strutht \dp\scratchbox\strutdp \strut \fi \hss\copy\scratchbox\hss} \vss}} {\tf\vbox to 2.3em {\ifdone \hsize2.4em \blue \tinyfont \hfill\number\rowcol \vfill \octnumber\rowcol\hfill\lchexnumbers\rowcol \par \fi}} \stopoverlay}}} \par}} {\tf\basegrid[\c!nx=16,\c!ny=16,\c!dx=2.5,\c!dy=2.5,\c!unit=em]} \stopoverlay \nointerlineskip \vskip2pt % the \noexpand before \blank is needed for non etex \edef\ascii{name: {\noexpand\black\fontname\font}} \def\do##1##2{\ifx##1\undefined\else\ifx##1\empty\else##2\fi\fi}% \edef\theshowfontspecs{name: {\noexpand\black\fontname\font}\quad plane: \charplane\enspace"\hexnumber\charplane}% \tf % also sets em \hbox to 40em{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs} \egroup \ifinsidefloat\else\stopbaselinecorrection\fi \egroup} % \showfontstyle[modern][rm][tf][all] % #2, #3 and #4 can be 'all' \unexpanded\gdef\showfontstyle {\dodoubleempty \dodoshowfontstyle} \unexpanded\gdef\redoshowfontstyle {\dotripleempty \dododoshowfontstyle} \unexpanded\gdef\redodoshowfontstyle{\doquadrupleempty\dodododoshowfontstyle} % no lists any more, so no 'all' any longer \gdef\dodoshowfontstyle[#1][#2]% {\doifelsenothing{#2} {\redoshowfontstyle[#1][\s!rm,\s!ss,\s!tt,\s!mm]} {\redoshowfontstyle[#1][#2]}} \gdef\dododoshowfontstyle[#1][#2][#3]% {\doifelsenothing{#3} {\redodoshowfontstyle[#1][#2][\s!tf,\s!bf,\s!it,\s!sl,\s!bs,\s!bi]} {\redodoshowfontstyle[#1][#2][#3]}} \gdef\dodododoshowfontstyle[#1][#2][#3][#4]% {\doshowfontstyleindeed[#1][#2][#3][#4]} % so far \gdef\doshowfontstyleindeed[#1][#2][#3][#4]% {\bgroup \raggedright \switchtobodyfont[#1] \def\dododocommand##1% {\dostepwiserecurse{0}{255}{1} {\scratchcounter\numexpr##1*256+\recurselevel\relax \iffontchar\font\scratchcounter\relax \char\scratchcounter \space \fi}}% \def\dodocommand##1##2% {\starttextrule{\tttf #1 ##1 ##2} \nobreak\getvalue{##2}% \doifelsenothing{#4} {\dododocommand{0}} {\doifelse{#4}\v!all {\dostepwiserecurse{0}{255}{1}{\expanded{\dododocommand{\recurselevel}}}} {\processcommalist[#4]{\dododocommand}}}% \par \nobreak \stoptextrule} \def\docommand##1% {\getvalue{##1}% \processcommacommand[#3]{\dodocommand{##1}}} \processcommalist[#2]\docommand \egroup} \unexpanded\gdef\showligature#1% {\hbox{\type{#1}\enspace\red\ruledhbox{\black#1}}} \unexpanded\gdef\showligatures[#1]% {\ifx\starttabulate\undefined \@@onlyenglish\showligatures \else \bgroup \def\show##1{\hbox{\red\ruledhbox{\black##1}}}% \definefont[\s!dummy][#1]\dummy \starttabulate[|*{9}{c|}] \NC\type{ff}\NC\type{fi}\NC\type{fl}\NC\type{ffi}\NC\type{ffl}\NC \type{``}\NC\type{''}\NC\type{--}\NC\type{---}\NC\NR \NC\show{ff}\NC\show{fi}\NC\show{fl}\NC\show{ffi}\NC\show{ffl}\NC \show{``}\NC\show{''}\NC\show{--}\NC\show{---}\NC\NR \stoptabulate \egroup \fi} \unexpanded\gdef\showfontstrip {\dosingleempty\doshowfontstrip} \gdef\doshowfontstrip[#1]% {\ifx\starttabulate\undefined \@@onlyenglish\showfontstrip \else \bgroup \def\dofontstripa##1##2% {\tttf\string##1} \def\dofontstripb##1##2% {\ruledhbox{\switchtobodyfont[#1]##1{##2}}} \def\dofontstripc##1##2% {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}% \tt\tfx\the\ht\scratchbox}% \def\dofontstripd##1##2% {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}% \tt\tfx\the\wd\scratchbox}% \def\fontstrip##1##2##3% {\NC##2\rm{##3}\NC ##2\ss{##3}\NC ##2\tt{##3}\NC ##2\mathematics{##3}\NC \tttf##1\NR} \starttabulate[|c|c|c|c|c|] \fontstrip\relax\dofontstripa\empty \TB \fontstrip\relax\dofontstripb{xxxx} \fontstrip\relax\dofontstripb{12345} \fontstrip\relax\dofontstripb{(Agw)} \TB \fontstrip{(x height)}\dofontstripc{x} \fontstrip{(m width)}\dofontstripd{m} \stoptabulate \egroup \fi} \ifdefined\databox \else \newbox\databox \fi \unexpanded\gdef\testminimalbaseline#1% {\setbox\databox\ruledhbox{#1}% \scratchdimen\ht\databox \advance\scratchdimen\dp\databox \scratchtoks{#1}% \expanded {\NC \ruledhbox{\the\scratchtoks} \noexpand \NC -> \noexpand \NC \the\scratchdimen \noexpand \NC = \noexpand \NC \the\ht\databox \noexpand \NC + \noexpand \NC \the\dp\databox \noexpand \NC \ifdim\scratchdimen<\baselineskip < \else\ifdim\scratchdimen=\baselineskip = \else > \fi\fi \noexpand \NC \the\baselineskip \noexpand \NC (\ifdim\scratchdimen>\baselineskip not \fi ok) \noexpand \NC \noexpand \NR }} \unexpanded\gdef\showminimalbaseline {\ifx\starttabulate\undefined \@@onlyenglish\showminimalbaseline \else \starttabulate[||T|T|T|T|T|T|T|T|T|] \testminimalbaseline{\hbox to 1em{\hss\showstruts\strut\hss}}% \testminimalbaseline{(/)}% \testminimalbaseline{$\frac{1}{2}x\normalsuperscript2\normalsubscript3$} \stoptabulate \fi} \unexpanded\gdef\showkerning#1% {\bgroup \let\MPfshowcommand\ruledhbox \setMPtext\s!dummy{#1}% \startMPcode draw textext(\MPstring\s!dummy);\stopMPcode \egroup} \unexpanded\gdef\showcharratio {\dowithnextboxcontent {\switchtobodyfont[10pt]}% {(\withoutpt\the\nextboxht,\withoutpt\the\nextboxdp)}% \hbox} \unexpanded\gdef\showfontparameters {\starttabulate[|tl|l|] \NC slantperpoint \NC \the\fontslantperpoint \font \NC\NR \NC interwordspace \NC \the\fontinterwordspace \font \NC\NR \NC interwordstretch\NC \the\fontinterwordstretch\font \NC\NR \NC interwordshrink \NC \the\fontinterwordshrink \font \NC\NR \NC exheight \NC \the\fontexheight \font \NC\NR \NC emwidth \NC \the\fontemwidth \font \NC\NR \NC extraspace \NC \the\fontextraspace \font \NC\NR \stoptabulate} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-con.lua0000644000175000017500000000471712130411274024157 0ustar norbertnorbertif not modules then modules = { } end modules ['syst-con'] = { version = 1.001, comment = "companion to syst-con.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } converters = converters or { } --[[ldx--

For raw 8 bit characters, the offset is 0x110000 (bottom of plane 18) at the top of 's char range but outside the unicode range.

--ldx]]-- local tonumber = tonumber local utfchar = utf.char local gsub, format = string.gsub, string.format function converters.hexstringtonumber(n) tonumber(n,16) end function converters.octstringtonumber(n) tonumber(n, 8) end function converters.rawcharacter (n) utfchar(0x110000+n) end function converters.lchexnumber (n) format("%x" ,n) end function converters.uchexnumber (n) format("%X" ,n) end function converters.lchexnumbers (n) format("%02x",n) end function converters.uchexnumbers (n) format("%02X",n) end function converters.octnumber (n) format("%03o",n) end function commands.hexstringtonumber(n) context(tonumber(n,16)) end function commands.octstringtonumber(n) context(tonumber(n, 8)) end function commands.rawcharacter (n) context(utfchar(0x110000+n)) end function commands.lchexnumber (n) context("%x" ,n) end function commands.uchexnumber (n) context("%X" ,n) end function commands.lchexnumbers (n) context("%02x",n) end function commands.uchexnumbers (n) context("%02X",n) end function commands.octnumber (n) context("%03o",n) end function commands.format(fmt,...) -- used ? fmt = gsub(fmt,"@","%%") context(fmt,...) end local cosd, sind, tand = math.cosd, math.sind, math.tand local cos, sin, tan = math.cos, math.sin, math.tan -- unfortunately %s spits out: 6.1230317691119e-017 -- -- function commands.sind(n) context(sind(n)) end -- function commands.cosd(n) context(cosd(n)) end -- function commands.tand(n) context(tand(n)) end -- -- function commands.sin (n) context(sin (n)) end -- function commands.cos (n) context(cos (n)) end -- function commands.tan (n) context(tan (n)) end function commands.sind(n) context("%0.6f",sind(n)) end function commands.cosd(n) context("%0.6f",cosd(n)) end function commands.tand(n) context("%0.6f",tand(n)) end function commands.sin (n) context("%0.6f",sin (n)) end function commands.cos (n) context("%0.6f",cos (n)) end function commands.tan (n) context("%0.6f",tan (n)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-tex.mkii0000644000175000017500000002474511754241457024316 0ustar norbertnorbert%D \module %D [ file=meta-tex, %D version=2006.06.07, %D title=\CONTEXT\ Support Macros, %D subtitle=\METAPOST\ fast text insertion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Many thanks to Fabrice Popineau and Taco Hoekwater in helping me %D figure out some aspects of the text inclusion method implemented %D here. The following code is derived from a more advanced (and to %D be used) mechanism where \TEX, \METAPOST\ and \LUA\ play together. %D Much of this mechanism was written with running live DVD's of %D the Dave Matthews band in the background (or the corner of my %D screen). % todo: testmacro for empty pic \unprotect \newwrite\TeXtextwrite \def\openTeXtexts {\immediate\openout \TeXtextwrite\currentTeXtext.mpb\relax} \def\closeTeXtexts{\immediate\closeout\TeXtextwrite} \def\currentTeXtext {\jobname-mpgraph} \def\currentTeXstack{mpgtxt} \initializeboxstack\currentTeXstack \newtoks\collectedmptexts \newtoks\everyTeXtexts \chardef\TeXtextsmode\zerocount % no inheritance \long\def\startTeXtexts#1\stopTeXtexts {\global\collectedmptexts\expandafter{\the\collectedmptexts#1}} \def\dostartTeXtexts {\global\setfalse\TeXtextdone \startnointerference \openTeXtexts \ifcase\TeXtextsmode % normally there is no need for this (faster anyway) \or \scantokens\expandafter{\the\everyMPTEXgraphic}% brr \or \the\everyTeXtexts \fi \ifrunMPgraphics \initializeboxstack\currentTeXstack \else \global\let\openTeXtexts\relax \global\let\finishTeXtexts\closeTeXtexts \fi} \def\dostopTeXtexts {\ifrunMPgraphics \closeTeXtexts \fi \stopnointerference} \let\finishTeXtexts\relax \appendtoks \finishTeXtexts \to \everystoptext \newconditional\TeXtextdone % \long\def\TeXtext#1% % {\dowithnextboxcontent % {\setnormalcatcodes} % {\global\settrue\TeXtextdone % \immediate\write\TeXtextwrite{savetxt(#1,\the\wd\nextbox,\the\ht\nextbox,\the\dp\nextbox);}% % \savebox\currentTeXstack{#1}{\box\nextbox}} % \hbox} \long\def\TeXtext {\dosingleempty\doTeXtext} % currently, colors in the converter don't use the color stack % % 0 = nothing, withcolor works ok, but nested colors fail % 1 = local color stack ok % 2 = obey color stack (not yet supported) \chardef\TeXtextcolormode\plusone \def\definetextext[#1]#2{\setvalue{textext@@#1}{#2}} % \definetextext[framed]{\framed} % % \startMPcode % draw \sometxt[framed]{black} rotated 45 ; % \stopMPcode \long\def\doTeXtext[#1]#2#3% {\begingroup \setnormalcatcodes \chardef\activecharactermode\plusone % compensates ** in meta-ini.mkii \endlinechar\minusone \everyeof\emptytoks %\def\ascii{#3}\scantokens\expandafter{\ascii}}% \setbox\nextbox\hbox {\ifcase\TeXtextcolormode \scantokens{\executeifdefined{textext@@#1}\firstofoneargument{#3}}% \else \localcolortrue \startcurrentcolor \scantokens{\executeifdefined{textext@@#1}\firstofoneargument{#3}}% \stopcurrentcolor \fi}% \global\settrue\TeXtextdone \edef\currenttextxt{\number#2}% \executeifdefined{textext::#1}{\getvalue{textext::depth}}% \savebox\currentTeXstack\currenttextxt{\box\nextbox}% \endgroup} \setvalue{textext::depth}{\immediate\write\TeXtextwrite{savetxt(\currenttextxt,\the\nextboxwd,\the\nextboxht,\the\nextboxdp) shifted (0,-\the\nextboxdp);}} \setvalue{textext::nodepth}{\immediate\write\TeXtextwrite{savetxt(\currenttextxt,\the\nextboxwd,\the\nextboxht,\the\nextboxdp);}} \setvalue{textext::d}{\getvalue{textext::depth}} \setvalue{textext::n}{\getvalue{textext::nodepth}} \newbox\mptextbox % \loadmapfile[lm-texnansi.map] % the font is not really used, i.e. nothing ends up in the file \definefontsynonym[MPtxtfont][texnansi-lmtt10] \definefont[localMPtxtfont][MPtxtfont at 10bp] \ifx\getTeXtext\undefined % this took a while to figure out \let\MPtextdata\empty \def\getTeXtext {\ifx\MPtextdata\empty\else \localMPtxtfont \setbox\mptextbox\hbox{\foundbox\currentTeXstack{\number\nofTeXtexts}}% \setbox\scratchbox\hbox{\MPtextdata}% set in meta-pdf.mkii/mkiv \edef\mpwd{\the\dimexpr\MPtextsize\dimexpr\wd\scratchbox/10\relax\relax}% \edef\mpht{\the\dimexpr\MPtextsize\dimexpr\ht\scratchbox/10\relax\relax}% \setbox\mptextbox\hbox{\raise\dp\mptextbox\box\mptextbox}% \dp\mptextbox\zeropoint \scale[\c!width=\mpwd,\c!height=\mpht]{\box\mptextbox}% \fi} \fi \let\nofTeXtexts\!!zerocount \setvalue{handleMPtext00001}% only height in tag (00001) {\setbox\scratchbox\hbox {\obeyMPspecials \edef\nofTeXtexts{\number\MPtextnumber}% \getTeXtext}% \setbox\scratchbox\hbox {\hskip\lastMPmoveX\onebasepoint\raise\lastMPmoveY\onebasepoint \box\scratchbox}% \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \wd\scratchbox\zeropoint \box\scratchbox} \startMPextensions string txtfile ; txtfile := "\currentTeXtext.mpb" ; string txtfont ; txtfont := "\truefontname{MPtxtfont}" ; string txtpref ; txtpref := "00001::::" ; \stopMPextensions \newcount\metatxtcounter \long\def\dodofiltersometxt#1#2#3% {\ifx#2\empty \else \advance\metatxtcounter\plusone \TeXtext{\the\metatxtcounter}{#1}% \expandafter\filtersometxt \fi#2#3} \long\def\redofiltersometxt[#1]#2% {\advance\metatxtcounter\plusone \TeXtext[#1]{\the\metatxtcounter}{#2}% \filtersometxt} \long\def\filtersometxt#1\sometxt {\doifnextoptionalelse\redofiltersometxt\dodofiltersometxt} % cleaner in mkiv % % \filtersometxt abc\sometxt{def};hij\sometxt{klm};\sometxt{}\empty\relax \long\def\flushTeXtexts#1% {\metatxtcounter\zerocount \dostartTeXtexts \the\collectedmptexts \filtersometxt#1\sometxt{}\empty\relax \dostopTeXtexts \ifconditional\TeXtextdone \immediate\write\MPwrite{loadtxts ; txtnext := 0 ;}% \global\collectedmptexts\emptytoks \fi \metatxtcounter\zerocount} % \long\def\sometxt#1{sometxt(nexttxt)} % to be used in mp definitions, no ; here \long\def\sometxt #1#{\dosometxt} % grab optional [args] \long\def\dosometxt#1{sometxt(nexttxt)} % to be used in mp definitions, no ; here % we redefine the writer: \long\def\writecheckedMPgraphic#1% {\ifforceMPTEXgraphic \global\MPTEXgraphictrue \else \global\MPTEXgraphicfalse \edef\ascii{#1}\defconvertedcommand\MPascii\ascii \the\MPTEXgraphicchecks\relax % \relax is end condition! \fi \flushMPTEXgraphic% % verbatimtex etc \flushTeXtexts{#1}% added \writeMPgraphic{#1}} % potential optimization: pass \ascii \protect \endinput % torture test (will move) \startMPpage numeric a_b_c ; picture p ; pickup pencircle scaled .1pt ; p := \sometxt{Just a \color[blue]{simple} example text.} ; p := image(draw p; draw boundingbox p withcolor red; ) ; p := p rotatedaround(center p, 360*(5/100)) ; draw p ; draw boundingbox p withcolor blue ; currentpicture := currentpicture scaled 20 ; draw boundingbox currentpicture withcolor .5white ; setbounds currentpicture to boundingbox currentpicture enlarged 10pt ; \stopMPpage \startMPpage picture p ; p := \sometxt{\framed[width=fit,align=middle]{\input tufte\relax}} ; draw p rotatedaround(center p, 30) ; \stopMPpage \startMPpage picture p ; p := \sometxt{\framed[width=fit,align=middle]{\input tufte\relax}} ; draw p slanted .5 ; \stopMPpage \dorecurse{10} { \startTeXtexts \TeXtext{\recurselevel}{\ruledhbox{I must be {\green crazy} to implement this}} \stopTeXtexts \startMPpage picture p ; pickup pencircle scaled .1pt ; numeric i ; i := \recurselevel ; p := sometxt(i) ; p := p rotatedaround(center p, 360*(i*5/100)) ; draw p ; draw boundingbox p withcolor blue ; currentpicture := currentpicture scaled 20 ; draw boundingbox currentpicture withcolor .5white ; \stopMPpage } \startTeXtexts \dorecurse{100}{\TeXtext{\recurselevel}{\ruledhbox{\strut interesting \recurselevel}}} \stopTeXtexts \startMPpage picture p ; pickup pencircle scaled .1pt ; for i = 1 upto 100: p := sometxt(i) ; p := p rotatedaround(center p, 360*(i*5/100)) ; draw p ; draw boundingbox p withcolor blue ; endfor ; currentpicture := currentpicture scaled 20 ; draw boundingbox currentpicture withcolor .5white ; \stopMPpage \startTeXtexts \dorecurse{100}{\TeXtext{\recurselevel}{\ruledhbox{\strut interesting \recurselevel}}} \stopTeXtexts \startMPpage picture p ; pickup pencircle scaled .1pt ; for i = 1 step 5 until 100 : p := sometxt(i) ; p := p rotatedaround(center p, 360*(i/100)) ; draw p ; draw boundingbox p withcolor blue ; endfor ; currentpicture := currentpicture scaled 20 ; draw boundingbox currentpicture withcolor .5white ; \stopMPpage \startTeXtexts \dorecurse{20}{\TeXtext{\recurselevel}{\externalfigure[t:/sources/cow.pdf][width=1cm]}} \stopTeXtexts \startMPpage picture p ; pickup pencircle scaled .1pt ; for i = 1 upto 20 : p := sometxt(i) ; p := p shifted (2.5cm,0) rotated (360*(i/20)) ; draw p ; draw boundingbox p withcolor blue ; endfor ; currentpicture := currentpicture scaled 10 ; draw boundingbox currentpicture withcolor .5white ; \stopMPpage \startTeXtexts \dorecurse{200}{\TeXtext{\recurselevel}{\ruledhbox{\strut I must be {\green crazy} \recurselevel}}} \stopTeXtexts \startMPpage picture p ; pickup pencircle scaled .1pt ; numeric i ; i := 100 ; p := sometxt(i) ; p := p rotatedaround(center p, 360*(i*36/100)) ; draw p ; draw boundingbox p withcolor blue ; currentpicture := currentpicture scaled 20 ; draw boundingbox currentpicture withcolor .5white ; \stopMPpage \dorecurse{10}{ \startTeXtexts \dorecurse{200}{\TeXtext{\recurselevel}{\ruledhbox{\strut I must be {\green crazy} \recurselevel}}} \stopTeXtexts \startMPpage picture p ; pickup pencircle scaled .1pt ; j := 10*\recurselevel-9; k := 10*\recurselevel; for i = j upto k: p := sometxt(i) ; p := p rotatedaround(center p, 360*(i/100)) ; draw p ; draw boundingbox p withcolor blue ; endfor ; currentpicture := currentpicture scaled 20 ; draw boundingbox currentpicture withcolor red ; \stopMPpage } context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-3.lua0000644000175000017500000000457411571377075024124 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-3'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0000, 0x0124, 0x00A7, 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0x0000, 0x017B, 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0x0000, 0x017C, 0x00C0, 0x00C1, 0x00C2, 0x0000, 0x00C4, 0x010A, 0x0108, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x0000, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x0000, 0x00E4, 0x010B, 0x0109, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x0000, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9 } context-2013.05.28.20130704/texmf-dist/tex/context/base/font-aux.lua0000644000175000017500000001122212130411274024126 0ustar norbertnorbertif not modules then modules = { } end modules ['font-aux'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local tonumber, type = tonumber, type ----- wrap, yield = coroutine.wrap, coroutine.yield local fonts, font = fonts, font local iterators = { } fonts.iterators = iterators local currentfont = font.current local identifiers = fonts.hashes.identifiers local sortedkeys = table.sortedkeys -- for unicode, character in fonts.iterators.characters () do print(unicode) end -- for unicode, description in fonts.iterators.descriptions() do print(unicode) end -- for index, glyph in fonts.iterators.glyphs () do print(index ) end local function dummy() end local function checkeddata(data) -- beware, nullfont is the fallback in identifiers local t = type(data) if t == "table" then return data elseif t ~= "number" then data = currentfont() end return identifiers[data] -- has nullfont as fallback end local function getindices(data) data = checkeddata(data) local indices = { } local characters = data.characters if characters then for unicode, character in next, characters do indices[character.index or unicode] = unicode end end return indices end -- function iterators.characters(data) -- data = checkeddata(data) -- local characters = data.characters -- if characters then -- local collected = sortedkeys(characters) -- return wrap(function() -- for c=1,#collected do -- local cc = collected[c] -- local dc = characters[cc] -- if dc then -- yield(cc,dc) -- end -- end -- end) -- else -- return wrap(function() end) -- end -- end -- function iterators.descriptions(data) -- data = checkeddata(data) -- local characters = data.characters -- local descriptions = data.descriptions -- if characters and descriptions then -- local collected = sortedkeys(characters) -- return wrap(function() -- for c=1,#collected do -- local cc = collected[c] -- local dc = descriptions[cc] -- if dc then -- yield(cc,dc) -- end -- end -- end) -- else -- return wrap(function() end) -- end -- end -- function iterators.glyphs(data) -- data = checkeddata(data) -- local descriptions = data.descriptions -- if descriptions then -- local indices = getindices(data) -- local collected = sortedkeys(indices) -- return wrap(function() -- for c=1,#collected do -- local cc = collected[c] -- local dc = descriptions[indices[cc]] -- if dc then -- yield(cc,dc) -- end -- end -- end) -- else -- return wrap(function() end) -- end -- end function iterators.characters(data) data = checkeddata(data) local characters = data.characters if characters then local collected = sortedkeys(characters) local n, i = #collected, 0 return function() i = i + 1 if i <= n then local cc = collected[i] local dc = characters[cc] return cc, dc or { } end end else return dummy end end function iterators.descriptions(data) data = checkeddata(data) local characters = data.characters local descriptions = data.descriptions if characters and descriptions then local collected = sortedkeys(characters) local n, i = #collected, 0 return function() i = i + 1 if i <= n then local cc = collected[i] local dc = descriptions[cc] return cc, dc or { } end end else return dummy end end function iterators.glyphs(data) data = checkeddata(data) local descriptions = data.descriptions if descriptions then local indices = getindices(data) local collected = sortedkeys(indices) local n, i = #collected, 0 return function() i = i + 1 if i <= n then local cc = collected[i] local dc = descriptions[indices[cc]] return cc, dc or { } end end else return dummy end end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-itm.lua0000644000175000017500000000203011754241457024143 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-itm'] = { version = 1.001, comment = "companion to strc-itm.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local structures = structures local itemgroups = structures.itemgroups local jobpasses = job.passes local setfield = jobpasses.save local getfield = jobpasses.getfield function itemgroups.register(name,nofitems,maxwidth) setfield("itemgroup", { nofitems, maxwidth }) end function itemgroups.nofitems(name,index) return getfield("itemgroup", index, 1, 0) end function itemgroups.maxwidth(name,index) return getfield("itemgroup", index, 2, 0) end -- interface (might become counter/dimension) commands.registeritemgroup = itemgroups.register function commands.nofitems(name,index) context(getfield("itemgroup", index, 1, 0)) end function commands.maxitemwidth(name,index) context(getfield("itemgroup", index, 2, 0)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-raw.lua0000644000175000017500000000257312130411274024125 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-raw'] = { version = 1.001, comment = "companion to grph-raw.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This module is for Mojca, who wanted something like this for -- her gnuplot project. It's somewhat premliminary code but it -- works ok for that purpose. local tonumber = tonumber local report_bitmap = logs.reporter("graphics","bitmaps") local context = context local texsp = tex.sp function figures.bitmapimage(t) local data = t.data local xresolution = tonumber(t.xresolution) local yresolution = tonumber(t.yresolution) if data and xresolution and yresolution then local width, height = t.width or "", t.height or "" local n = backends.nodeinjections.injectbitmap { xresolution = xresolution, yresolution = yresolution, width = width ~= "" and texsp(width) or nil, height = height ~= "" and texsp(height) or nil, data = data, colorspace = t.colorspace, } if n then context.hbox(n) else report_bitmap("format no supported by backend") end else report_bitmap("invalid specification") end end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-sid.mkiv0000644000175000017500000006203112130411274024247 0ustar norbertnorbert%D \module %D [ file=page-sid, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Side Floats, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Side Floats} \unprotect % These macro deal with side floats. We started with Daniel % Comenetz macros as published in TUGBoat Volume 14 (1993), % No.\ 1: Anchored Figures at Either Margin. I extended and % patched the macros to suite our needs which results in a % messy module. Therefore, this module badly needs an update % because it's now a mixture of old and new macros. % Interesting cases where it goes wrong: % % \placefigure[left]{}{} \dorecurse{3}{\input ward } {\par} \input ward % % Here we get an unwanted carried over hangindent and parindent. A % solution is to associate it with the local par node instead. This % is something to discuss with Taco as it could be a new luatex % feature: explicitly set par properties. % Maybe I should just rewrite the lot. \newdimen \d_page_sides_height % includes the topskip \newdimen \d_page_sides_width \newdimen \d_page_sides_hsize \newdimen \d_page_sides_vsize \newdimen \d_page_sides_vsize_reset \d_page_sides_vsize_reset -\onepoint % could be a \let \newdimen \d_page_sides_progress \newdimen \d_page_sides_page_total \newdimen \d_page_sides_saved_depth \newdimen \d_page_sides_grid_shift \newbox \b_page_sides_bottom \newcount \c_page_sides_lines_done \newcount \c_page_sides_checks_done \newcount \c_page_sides_n_of_lines \newcount \c_page_sides_n_of_hang \newconstant \c_page_sides_float_type \newconditional \c_page_sides_short % needs checking .. best write this from scratch \newconditional \c_page_sides_flag \newconditional \c_page_sides_r_eq % messy, needs checking anyway \newconditional \c_page_sides_l_eq % messy, needs checking anyway \newdimen \d_page_sides_shift \newdimen \d_page_sides_extrashift \newdimen \d_page_sided_leftshift \newdimen \d_page_sided_rightshift \newdimen \d_page_sides_leftskip \newdimen \d_page_sides_rightskip \newdimen \d_page_sides_maximum \newdimen \d_page_sides_topskip \newdimen \d_page_sides_bottomskip \newdimen \d_page_sides_downshift \setnewconstant \c_page_sides_method \plusone % 0=raw 1=safe (.99) 2=tight (-1pt) \setnewconstant \c_page_sides_align \zerocount \def\page_sides_process_float_backspace {\global\c_page_sides_float_type\plusone \page_sides_handle_float} \def\page_sides_process_float_leftedge {\global\c_page_sides_float_type\plustwo \page_sides_handle_float} \def\page_sides_process_float_leftmargin {\global\c_page_sides_float_type\plusthree\page_sides_handle_float} \def\page_sides_process_float_left {\global\c_page_sides_float_type\plusfour \page_sides_handle_float} \def\page_sides_process_float_right {\global\c_page_sides_float_type\plusfive \page_sides_handle_float} \def\page_sides_process_float_rightmargin{\global\c_page_sides_float_type\plussix \page_sides_handle_float} \def\page_sides_process_float_rightedge {\global\c_page_sides_float_type\plusseven\page_sides_handle_float} \def\page_sides_process_float_cutspace {\global\c_page_sides_float_type\pluseight\page_sides_handle_float} \def\page_sides_process_float_margin {\global\c_page_sides_float_type\pluseight\page_sides_handle_float} \let\logsidefloat \relax \newif\iftracesidefloats % public (might change) % end of public variables \def\page_sides_insert_info {\page_floats_report_total} \def\page_sides_apply_horizontal_shift {\ifdim\d_page_sides_maximum>\zeropoint \ifcase\c_page_sides_float_type % invalid \or % backspace \or \global\d_page_sides_shift\dimexpr -\d_page_sides_maximum -\rightorleftpageaction \leftedgedistance \rightedgedistance -\rightorleftpageaction \leftmarginwidth \rightmarginwidth -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or \global\d_page_sides_shift\dimexpr -\d_page_sides_maximum -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or % left \or % right \or \global\d_page_sides_shift\dimexpr -\d_page_sides_maximum -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or \global\d_page_sides_shift\dimexpr -\d_page_sides_maximum -\rightorleftpageaction \leftedgedistance \rightedgedistance -\rightorleftpageaction \leftmarginwidth \rightmarginwidth -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or % cutspace \fi \fi \ifdim\d_page_sides_shift=\zeropoint \relax \ifnum\c_page_sides_float_type=\plusfour \global\advance\d_page_sides_shift\d_page_sides_extrashift \global\d_page_sides_extrashift\zeropoint \else\ifnum\c_page_sides_float_type=\plusfive \global\advance\d_page_sides_shift\d_page_sides_extrashift \global\d_page_sides_extrashift\zeropoint \fi\fi \else \ifnum\c_page_sides_float_type<\plusfour \global\c_page_sides_float_type\plusfour \else\ifnum\c_page_sides_float_type>\plusfive \global\c_page_sides_float_type\plusfive \fi\fi \fi} \def\page_sides_set_skips {\global\d_page_sides_rightskip\zeropoint \global\d_page_sides_leftskip \zeropoint \ifcase\c_page_sides_float_type \or % backspace \global\d_page_sides_leftskip\dimexpr +\rightorleftpageaction \backspace \cutspace +\compensatedinnermakeupmargin \relax \or % leftedge \global\d_page_sides_leftskip\dimexpr +\rightorleftpageaction \leftmargindistance \rightmargindistance +\rightorleftpageaction \leftmarginwidth \rightmarginwidth +\rightorleftpageaction \leftedgedistance \rightedgedistance +\compensatedinnermakeupmargin \relax \or % leftmargin \global\d_page_sides_leftskip\dimexpr +\rightorleftpageaction \leftmargindistance \rightmargindistance +\compensatedinnermakeupmargin \relax \or % leftside \or % rightside \or % rightmargin \global\d_page_sides_rightskip\dimexpr +\rightorleftpageaction \rightmargindistance \leftmargindistance +\compensatedinnermakeupmargin \relax \or % rightedge \global\d_page_sides_rightskip\dimexpr +\rightorleftpageaction \rightmargindistance \leftmargindistance +\rightorleftpageaction \rightmarginwidth \leftmarginwidth +\rightorleftpageaction \rightedgedistance \leftedgedistance +\compensatedinnermakeupmargin \relax \or % cutspace \global\d_page_sides_rightskip\dimexpr +\rightorleftpageaction \cutspace \backspace +\compensatedinnermakeupmargin \relax \fi \ifdim\d_page_sides_rightskip>\zeropoint \global\advance\d_page_sides_rightskip\rightskip \fi \ifdim\d_page_sides_leftskip >\zeropoint \global\advance\d_page_sides_leftskip \leftskip \fi} \def\page_sides_flush_floats {\par \ifnum\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint \page_sides_flush_floats_indeed \fi % also here if used at all \global\holdinginserts\zerocount \global\d_page_sides_vsize\d_page_sides_vsize_reset \global\setfalse\c_page_sides_short \global\setfalse\c_page_sides_flag} \def\page_sides_flush_floats_indeed {\global\advance\d_page_sides_vsize-\d_page_sides_bottomskip \begingroup \let\page_sides_flush_floats\relax \forgetall \doloop {\strut \iftracesidefloats \color[darkgray]{\ruledhbox{\strut\kern\d_page_sides_width}}% \fi \par \ifdim\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint \ifnum\recurselevel>\plushundred % safeguard, sort of deadcycles \exitloop \fi \else \exitloop \fi}% \endgroup \ifdim\parskip>\zeropoint % why this test ? \ifdim\d_page_sides_bottomskip>\parskip \nowhitespace \vskip\d_page_sides_bottomskip \fi \fi} \def\page_sides_check_floats_after_par {\page_sides_check_floats_indeed \ifdim\oldpagetotal=\pagetotal \else \global\let\page_sides_check_floats\page_sides_check_floats_indeed \page_sides_flush_floats \global\c_page_sides_n_of_lines\zerocount % here ! \fi} \unexpanded\def\page_sides_flush_floats_after_par {\xdef\oldpagetotal{\the\pagetotal}% \global\let\page_sides_check_floats\page_sides_check_floats_after_par} \unexpanded\def\page_sides_forget_floats {\global\d_page_sides_vsize\d_page_sides_vsize_reset \global\c_page_sides_n_of_lines\zerocount % also here if used at all \global\holdinginserts\zerocount \global\setfalse\c_page_sides_short \global\setfalse\c_page_sides_flag} \let\page_otr_sides_pop_penalties \relax \let\page_otr_sides_push_penalties\relax % \def\page_otr_sides_push_penalties % needed ? and right % {\widowpenalty\plusone % \clubpenalty\plustwo % \brokenpenalty\plusone % \let\page_otr_sides_push_penalties\relax % \edef\page_otr_sides_pop_penalties % {\widowpenalty \the\widowpenalty % \clubpenalty \the\clubpenalty % \brokenpenalty\the\brokenpenalty % \let\page_otr_sides_pop_penalties\relax}} % % shouldn't that be: % % \def\page_otr_sides_push_penalties % needed? % {\let\page_otr_sides_push_penalties\relax % \edef\page_otr_sides_pop_penalties % {\widowpenalty \the\widowpenalty % \clubpenalty \the\clubpenalty % \brokenpenalty\the\brokenpenalty % \let\page_otr_sides_pop_penalties\relax}% % \widowpenalty\plusone % \clubpenalty\plustwo % \brokenpenalty\plusone} \def\page_sides_restore_output_penalty {\ifnum\outputpenalty=\plustenthousand \else \penalty\outputpenalty \fi} \def\page_sides_output_routine {\ifconditional\c_page_sides_short \page_sides_output_routine_yes \else \page_sides_output_routine_nop \fi} \def\page_sides_output_routine_nop {\page_otr_command_side_float_output % otr specific \global\d_page_sides_vsize\d_page_sides_vsize_reset \global\c_page_sides_n_of_lines\zerocount % we can end up in fig lock, so \global\holdinginserts\zerocount here too ? \page_otr_sides_pop_penalties} \def\page_sides_output_routine_yes % we need to rework this ... add pagediscards and such {\unvbox\normalpagebox \setbox\b_page_sides_bottom\lastbox \ifdim\wd\b_page_sides_bottom>\d_page_sides_hsize \penalty-201 \box\b_page_sides_bottom \else\ifvoid\b_page_sides_bottom \else \page_sides_restore_left_indent \ifdim\wd\b_page_sides_bottom<\d_page_sides_hsize \parskip\zeropoint %\noindent \ifinner\else \vadjust{\penalty\minusone}% \fi \ifconditional\c_page_sides_l_eq \global\setfalse\c_page_sides_l_eq \else \global\advance\d_page_sides_hsize -\wd\b_page_sides_bottom \ifconditional\c_page_sides_r_eq \global\setfalse\c_page_sides_r_eq \else \global\divide\d_page_sides_hsize \plustwo \fi \hskip\d_page_sides_hsize % \kern \fi \fi \box\b_page_sides_bottom \page_sides_restore_output_penalty \fi\fi % why was this \global\holdinginserts\zerocount \global\setfalse\c_page_sides_short} \def\page_sides_restore_left_indent {\relax \ifnum\c_page_sides_float_type>\plusfour \else \parskip\zeropoint % here ? \ifdim\d_page_sides_width>\zeropoint % new, see prikkels \noindent \ifinner \else \vadjust{\penalty\minusone}% \fi \hskip\d_page_sides_width\relax % \kern %\else % we have a margin or edge float \fi \fi} % The clean way: % % \global\setbox\floatbox\hbox % {\ifcase\c_page_sides_float_type % \vbox{#1}% % \or % 1 % \kern\d_page_sided_leftshift % \kern\d_page_sides_shift % \vbox{#1}% % \kern-\d_page_sides_extrashift % \or % 2 % \kern\d_page_sides_shift % \vbox{#1}% % \kern-\d_page_sides_extrashift % \or % 3 % \kern\d_page_sides_shift % \vbox{#1}% % \kern-\d_page_sides_extrashift % \or % 4 % \kern\d_page_sided_leftshift % \kern\d_page_sides_shift % \vbox{#1\removedepth}% % \kern-\d_page_sides_extrashift % \or % 5 % \kern-\d_page_sides_extrashift % \vbox{#1}% % \kern\d_page_sides_shift % \kern\d_page_sided_rightshift % \or % 6 % \kern-\d_page_sides_extrashift % \vbox{#1}% % \kern\d_page_sides_shift % \or % 7 % \kern-\d_page_sides_extrashift % \vbox{#1}% % \kern\d_page_sides_shift % \or % 8 % \kern-\d_page_sides_extrashift % \vbox{#1}% % \kern\d_page_sides_shift % \kern\d_page_sided_rightshift % \fi} % % The compact way: \def\page_sides_relocate_float#1% {\global\setbox\floatbox\hbox {\ifnum\c_page_sides_float_type=\plusfour \kern\d_page_sided_leftshift \else\ifnum\c_page_sides_float_type=\plusone \kern\d_page_sided_leftshift \fi\fi \ifnum\c_page_sides_float_type>\plusfour \kern-\d_page_sides_extrashift \else \kern\d_page_sides_shift \fi \vbox{#1\ifnum\c_page_sides_align=\plusfour \removedepth \fi}% \ifnum\c_page_sides_float_type>\plusfour \kern\d_page_sides_shift \else \kern-\d_page_sides_extrashift \fi \ifnum\c_page_sides_float_type=\pluseight \kern\d_page_sided_rightshift \else\ifnum\c_page_sides_float_type=\plusfive \kern\d_page_sided_rightshift \fi\fi}} \def\page_sides_apply_vertical_shift {\ifnum\c_page_sides_align=\plusfour \getnoflines{\ht\floatbox}% \scratchdimen\dimexpr\noflines\lineheight-\strutdepth\relax \getrawnoflines\d_page_sides_topskip \advance\scratchdimen\noflines\lineheight % todo: maybe rounding problem here % \global\setbox\floatbox\hbox{\lower\lineheight\box\floatbox}% \global\setbox\floatbox\hbox{\lower\strutdepth\box\floatbox}% \ht\floatbox\scratchdimen \dp\floatbox\zeropoint \fi \ifcase\c_page_sides_align \else \global\d_page_sides_topskip\zeropoint \fi \scratchdimen \ifnum\c_page_sides_float_type<\plusfour \d_page_sides_topskip \else\ifnum\c_page_sides_float_type>\plusfive \d_page_sides_topskip \else \zeropoint \fi\fi % the top of the box is at the previous baseline \ifcase\c_page_sides_align % 0 normal \advance\scratchdimen\strutdepth % or \openstrutdepth \or % 1 height \advance\scratchdimen\strutdepth % or \openstrutdepth \or % 2 line \or % 3 depth \advance\scratchdimen\lineheight % or \openlineheight \advance\scratchdimen\strutdepth % or \openstrutdepth \or % 4 grid \scratchdimen\zeropoint \or \advance\scratchdimen\strutheight % or \openstrutheight \fi % new \global\c_page_sides_lines_done\zerocount \ifnum\c_page_sides_n_of_lines>\zerocount \advance\scratchdimen\c_page_sides_n_of_lines\lineheight \fi \global\setbox\floatbox\hbox % why extra box {\vbox {\vskip\scratchdimen \nointerlineskip \box\floatbox \ifnum\c_page_sides_align=\plusfive \vskip-\lineheight \fi}}% \ifnum\c_page_sides_float_type<\plusfour \global\d_page_sides_topskip\zeropoint \else\ifnum\c_page_sides_float_type>\plusfive \global\d_page_sides_topskip\zeropoint \fi\fi \global\d_page_sides_downshift\zeropoint} \def\page_sides_place_float {\ifnum\c_page_sides_float_type=\plusfour \kern\d_page_sides_topskip \fi \ifnum\c_page_sides_float_type=\plusfive \kern\d_page_sides_topskip \fi \d_page_sides_saved_depth\prevdepth \nointerlineskip \ifgridsnapping \page_sides_place_float_grid \else \page_sides_place_float_normal \fi \par \kern-\d_page_sides_height \penalty10001 % oeps, this will change \normalbaselines \prevdepth\d_page_sides_saved_depth} \def\page_sides_place_float_normal {\d_page_sides_grid_shift\zeropoint % be nice \page_sides_push_float_inline\firstofoneargument} % The following needs some more work .. consider this a quick hack. We % probably need an mkiv hanging grid option. \def\page_sides_place_snap_to_grid#1% {\snaptogrid[\v!line,\v!offset:\the\d_page_sides_grid_shift]\hbox{#1}} % this will be a grid option in float placement: \newconstant\c_page_sides_place_grid_shift \c_page_sides_place_grid_shift\plustwo \def\page_sides_place_float_grid {\getrawnoflines\d_page_sides_height % raw ? \d_page_sides_height\noflines\lineheight \d_page_sides_grid_shift\the\dimexpr \plustwo\lineheight \ifcase\c_page_sides_place_grid_shift -3\lineheight % high \or -2.5\lineheight % half (does not work currently) \else -2\lineheight % low \fi \relax \page_sides_push_float_inline\page_sides_place_snap_to_grid} \def\page_sides_push_float_inline#1% {\begingroup \reseteverypar % needed ! \parskip\zeropoint % needed ! \page_sides_set_skips \page_sides_insert_info \relax \lefttoright % \textdir TLT\relax % or \ifconditional\displaylefttoright below (more work) \ifcase\c_page_sides_float_type % invalid \or % backspace \noindent#1{\llap{\rlap{\box\floatbox}\kern\d_page_sides_leftskip}}\hfill \or % leftedge \noindent#1{\llap{\box\floatbox\kern\d_page_sides_leftskip}}\hfill \or % leftmargin \noindent#1{\llap{\box\floatbox\kern\d_page_sides_leftskip}}\hfill \or % leftside \noindent#1{\box\floatbox}\hfill \or % rightside \hfill#1{\box\floatbox}% \or % rightmargin \hfill#1{\rlap{\kern\d_page_sides_rightskip\box\floatbox}}% \or % rightedge \hfill#1{\rlap{\kern\d_page_sides_rightskip\box\floatbox}}% \or % cutspace \hfill#1{\rlap{\kern\d_page_sides_rightskip\llap{\box\floatbox}}}% \fi \endgroup} \def\page_sides_analyse_progress {\d_page_sides_progress\d_page_sides_vsize \ifconditional\c_page_sides_flag \advance\d_page_sides_progress-\d_page_sides_page_total \global\setfalse\c_page_sides_flag \else \advance\d_page_sides_progress-\pagetotal \fi} \def\page_sides_analyse_space {\global\settrue\c_page_sides_flag \global\d_page_sides_page_total \pagetotal % global \ifnum\c_page_sides_float_type<\plusfour \global\d_page_sides_width \zeropoint \else\ifnum\c_page_sides_float_type>\plusfive \global\d_page_sides_width\zeropoint \else \global\d_page_sides_width\dimexpr\wd\floatbox+\d_strc_floats_margin\relax \fi\fi \ifdim\d_page_sides_width<\zeropoint \global\d_page_sides_width\zeropoint \fi \global\d_page_sides_hsize \dimexpr\hsize-\d_page_sides_width\relax \global\d_page_sides_height\dimexpr\ht\floatbox+\dp\floatbox+\d_page_sides_topskip\relax \global\d_page_sides_vsize \dimexpr\d_page_sides_height+\d_page_sides_page_total\relax \dimen0\d_page_sides_vsize \dimen2\pagegoal \relax \ifcase\c_page_sides_method % method 0 : raw \or % method 1 : safe \dimen2 .99\pagegoal \or % method 2 : tight \advance\dimen0 -\onepoint \fi \relax % really needed ! ! ! ! \ifdim\dimen0>\dimen2 \global\setfalse\c_page_floats_room \else \ifdim\dimexpr\pagegoal-\d_page_sides_vsize\relax<\d_page_sides_bottomskip \global\advance\d_page_sides_vsize \dimen0 \global\settrue\c_page_sides_short \page_otr_sides_push_penalties % why was this \global\holdinginserts\plusone \else \global\advance\d_page_sides_vsize \d_page_sides_bottomskip \global\setfalse\c_page_sides_short \fi \global\settrue\c_page_floats_room \fi} \def\page_sides_prepare_space {\par \whitespace \begingroup \forgetall \reseteverypar \verticalstrut \vskip-\struttotal \endgroup} \def\page_sides_handle_float#1% grid (4) is rather experimental {\page_sides_prepare_space \page_sides_apply_horizontal_shift \page_sides_check_previous_float \page_sides_inject_dummy_lines \page_sides_relocate_float{#1}% \page_sides_apply_vertical_shift \page_sides_analyse_space \ifconditional\c_page_floats_room \else \page_otr_fill_and_eject_page \page_sides_analyse_space \page_sides_inject_dummy_lines \fi \page_sides_place_float \page_sides_check_floats_reset \ignorespaces} % not really needed \def\page_sides_check_floats_indeed {\page_sides_analyse_progress \ifdim\d_page_sides_progress>\zeropoint \page_sides_check_floats_set \else \page_sides_check_floats_reset \fi \parskip\s_spac_whitespace_parskip} \let\page_sides_check_floats\page_sides_check_floats_indeed \unexpanded\def\page_sides_check_floats_set {\scratchdimen\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax \c_page_sides_n_of_hang\scratchdimen \divide\c_page_sides_n_of_hang \baselineskip\relax \ifnum\c_page_sides_n_of_hang>\zerocount % new from here (needs test case, old code) \ifcase\c_page_sides_n_of_lines \else \ifcase\c_page_sides_lines_done \global\c_page_sides_lines_done\c_page_sides_n_of_hang \else \scratchcounter\c_page_sides_lines_done \advance\scratchcounter-\c_page_sides_n_of_hang \global\advance\c_page_sides_n_of_lines-\scratchcounter \fi \fi % hm, when do we get the parshape branch? needs testing \ifnum\c_page_sides_n_of_lines>\zerocount \scratchtoks\emptytoks \scratchcounter\c_page_sides_n_of_lines \scratchdimen\dimexpr\hsize-\d_page_sides_width\relax \dorecurse\c_page_sides_n_of_lines {\appendtoks \zeropoint \hsize \to \scratchtoks}% \ifnum\c_page_sides_n_of_hang>\c_page_sides_n_of_lines \advance\c_page_sides_n_of_hang -\c_page_sides_n_of_lines\relax \advance\scratchcounter\c_page_sides_n_of_hang \dorecurse\c_page_sides_n_of_hang % weird, shouldn't that be scratchcounter {\ifnum\c_page_sides_float_type>\plusfour \appendtoks \zeropoint \scratchdimen \to \scratchtoks \else \appendtoks \d_page_sides_width\scratchdimen \to \scratchtoks \fi}% \fi \parshape \numexpr\scratchcounter+\plusone\relax \the\scratchtoks % \scratchcounter \zeropoint \hsize % \plusone \relax \else % new till here \hangindent \ifnum\c_page_sides_float_type>\plusfour -\fi\d_page_sides_width \hangafter-\c_page_sides_n_of_hang \fi \fi \global\advance\c_page_sides_checks_done \plusone \iftracesidefloats \hskip-\d_page_sides_width % kern \color[darkgray]% {\vrule\s!height.5\points\s!depth.5\points\s!width\d_page_sides_width \llap{\showstruts\strut\kern.25\bodyfontsize}}% \fi} \unexpanded\def\page_sides_check_floats_reset {\global\c_page_sides_checks_done\zerocount} \unexpanded\def\page_sides_synchronize_floats {\ifinner \else \page_sides_check_floats \fi} \unexpanded\def\page_sides_check_previous_float {\page_sides_analyse_progress \ifdim\d_page_sides_progress>\zeropoint \relax \ifconditional\c_page_sides_short \global\setfalse\c_page_sides_short \page_otr_fill_and_eject_page \else \kern\d_page_sides_progress \fi \fi} \def\page_sides_inject_dummy_lines {\scratchcounter\pageshrink \divide\scratchcounter \baselineskip \advance\scratchcounter \plusone \parskip\zeropoint \dorecurse\scratchcounter{\hbox to \hsize{}}% \kern-\scratchcounter\baselineskip \penalty\zerocount} % Display math % % If we need this, it will be redone but redefining % these macros does not really work out in the current % situation. % % \ifx\normalleqno\undefined % % \let\floatrighteqo=\eqno % \let\floatleftleqo=\leqno % % \else % % \let\floatrighteqo=\normaleqno % \let\floatleftleqo=\normalleqno % % \fi % % \ifx\normaleqno\undefined % % \def\normaleqno % {\ifconditional\c_page_sides_short % \global\settrue\c_page_sides_r_eq % \fi % \floatrighteqo} % % \else % % \def\eqno % {\ifconditional\c_page_sides_short % \global\settrue\c_page_sides_r_eq % \fi % \floatrighteqo} % % \fi \def\adjustsidefloatdisplaylines % public, will change {\aftergroup\page_sides_adjust_display_lines} \def\page_sides_adjust_display_lines {\par \noindent \ignorespaces} % We need to hook it into the other otr's. This code will be adapted % once we rename the callers. % \def as they can be redefined! % some will become obsolete \def\checksidefloat {\page_sides_check_floats} \def\flushsidefloats {\page_sides_flush_floats} \def\flushsidefloatsafterpar{\page_sides_flush_floats_after_par} %def\forgetsidefloats {\page_sides_forget_floats} %def\synchronizesidefloats {\page_sides_synchronize_floats} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-cleartype.mkiv0000644000175000017500000000550711754241457026334 0ustar norbertnorbert%D \module %D [ file=type-imp-cleartype, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Microsoft Cleartype, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[cleartype] \starttypescript [\s!sans] [candara] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:candara] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:candarab] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:candarai] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:candaraz] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [consolas] [\s!name] \setups[\s!font:\s!fallback:\s!mono] \definefontsynonym [\s!Mono] [\s!file:consola] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [\s!file:consolab] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [\s!file:consolai] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [\s!file:consolaz] [\s!features=\s!none] \stoptypescript \starttypescript [\s!serif] [constantia] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:constan] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:constanb] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:constani] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:constanz] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [corbel] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:corbel] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:corbelb] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:corbeli] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:corbelz] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [calibri] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:calibri] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:calibrib] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:calibrii] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:calibriz] [\s!features=\s!default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ext.lua0000644000175000017500000001456512130411274024131 0ustar norbertnorbertif not modules then modules = { } end modules ['math-ext'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local trace_virtual = false trackers.register("math.virtual", function(v) trace_virtual = v end) local basename = file.basename local mathematics = mathematics local characters = characters local report_math = logs.reporter("mathematics") mathematics.extras = mathematics.extras or { } local extras = mathematics.extras characters.math = characters.math or { } local mathdata = characters.math local chardata = characters.data function extras.add(unicode,t) -- todo: if already stored ... local min, max = mathematics.extrabase, mathematics.privatebase - 1 -- if mathdata[unicode] or chardata[unicode] then -- report_math("extra %U overloads existing character",unicode) -- end if unicode >= min and unicode <= max then mathdata[unicode], chardata[unicode] = t, t else report_math("extra %U should be in range %U - %U",unicode,min,max) end end function extras.copy(target,original) local characters = target.characters local properties = target.properties local parameters = target.parameters for unicode, extradesc in next, mathdata do -- always, because in an intermediate step we can have a non math font local extrachar = characters[unicode] local nextinsize = extradesc.nextinsize if nextinsize then local first = 1 local charused = unicode if not extrachar then for i=1,#nextinsize do local slot = nextinsize[i] extrachar = characters[slot] if extrachar then characters[unicode] = extrachar first = i + 1 charused = slot break end end end if not extrachar then if trace_virtual then report_math("extra %U in %a at %p with class %a and name %a is not mapped", unicode,basename(properties.fullname),parameters.size, extradesc.mathclass,extradesc.mathname) end elseif not extrachar.next then local nextused = false for i=first,#nextinsize do local nextslot = nextinsize[i] local nextbase = characters[nextslot] if nextbase then local nextnext = nextbase and nextbase.next if nextnext then local nextchar = characters[nextnext] if nextchar then extrachar.next = nextchar nextused = nextslot break end end end end if trace_virtual then if nextused then report_math("extra %U in %a at %p with class %a and name %a maps onto %U with next %U", unicode,basename(properties.fullname),parameters.size,charused, extradesc.mathclass,extradesc.mathname,nextused) else report_math("extra %U in %a at %p with class %a and name %a maps onto %U with no next", unicode,basename(properties.fullname),parameters.size,charused, extradesc.mathclass,extradesc.mathname) end end else if trace_virtual then report_math("extra %U in %a at %p with class %a and name %a maps onto %U with no next", -- own next unicode,basename(properties.fullname),parameters.size,charused, extradesc.mathclass,extradesc.mathname) end end end end end utilities.sequencers.appendaction(mathactions,"system","mathematics.extras.copy") -- 0xFE302 -- 0xFE320 for accents (gone with new lm/gyre) -- -- extras.add(0xFE302, { -- category="mn", -- description="WIDE MATHEMATICAL HAT", -- direction="nsm", -- linebreak="cm", -- mathclass="topaccent", -- mathname="widehat", -- mathstretch="h", -- unicodeslot=0xFE302, -- nextinsize={ 0x00302, 0x0005E }, -- } ) -- -- extras.add(0xFE303, { -- category="mn", -- cjkwd="a", -- description="WIDE MATHEMATICAL TILDE", -- direction="nsm", -- linebreak="cm", -- mathclass="topaccent", -- mathname="widetilde", -- mathstretch="h", -- unicodeslot=0xFE303, -- nextinsize={ 0x00303, 0x0007E }, -- } ) -- 0xFE321 -- 0xFE340 for missing characters extras.add(0xFE321, { category="sm", description="MATHEMATICAL SHORT BAR", -- direction="on", -- linebreak="nu", mathclass="relation", mathname="mapstochar", unicodeslot=0xFE321, } ) extras.add(0xFE322, { category="sm", description="MATHEMATICAL LEFT HOOK", mathclass="relation", mathname="lhook", unicodeslot=0xFE322, } ) extras.add(0xFE323, { category="sm", description="MATHEMATICAL RIGHT HOOK", mathclass="relation", mathname="rhook", unicodeslot=0xFE323, } ) extras.add(0xFE324, { category="sm", description="MATHEMATICAL SHORT BAR MIRRORED", -- direction="on", -- linebreak="nu", mathclass="relation", mathname="mapsfromchar", unicodeslot=0xFE324, } ) --~ extras.add(0xFE304, { --~ category="sm", --~ description="TOP AND BOTTOM PARENTHESES", --~ direction="on", --~ linebreak="al", --~ mathclass="doubleaccent", --~ mathname="doubleparent", --~ unicodeslot=0xFE304, --~ accents={ 0x023DC, 0x023DD }, --~ } ) --~ extras.add(0xFE305, { --~ category="sm", --~ description="TOP AND BOTTOM BRACES", --~ direction="on", --~ linebreak="al", --~ mathclass="doubleaccent", --~ mathname="doublebrace", --~ unicodeslot=0xFE305, --~ accents={ 0x023DE, 0x023DF }, --~ } ) --~ \Umathchardef\braceld="0 "1 "FF07A --~ \Umathchardef\bracerd="0 "1 "FF07B --~ \Umathchardef\bracelu="0 "1 "FF07C --~ \Umathchardef\braceru="0 "1 "FF07D context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-vis.mkii0000644000175000017500000000015411244221744024270 0ustar norbertnorbert% temporary module, needed for downward compatibility \input regi-vis.tex \enableregime[viscii] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ali.mkiv0000644000175000017500000010577712132111075024267 0ustar norbertnorbert%D \module %D [ file=math-ali, %D version=2008.10.20, %D title=\CONTEXT\ Math Macros, %D subtitle=Math Alignments, %D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Math Alignments} \unprotect %D The code here has been moved from other files. Beware: the \MKII\ and %D \MKIV\ code is not gathered in files with the same name. In the %D meantime this code has been adapted to \MKIV\ but mnore is possible. %D \macros %D {definemathalignment, setupmathalignment, startmathalignment} %D %D Modules may provide additional alignment features. The following %D mechanisms are provided by the core. % n>1 #### needed, strange # interaction in recurse \newtoks\c_math_align_a \newtoks\c_math_align_b \newtoks\c_math_align_c \def\math_build_eqalign {\scratchtoks\emptytoks \dorecurse{\mathalignmentparameter\c!m}\math_build_eqalign_step \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_c}}} \def\math_build_eqalign_step {\ifnum\recurselevel>\plusone %\appendtoks % \tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint %\to\scratchtoks \scratchtoks\expandafter{\the\scratchtoks\tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint}% \fi \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_a}}% \dorecurse{\numexpr\mathalignmentparameter\c!n-\plusone\relax} {\normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_b}}}} \def\math_math_in_eqalign#1{$\tabskip\zeropoint\everycr\emptytoks\displaystyle{{}#1{}}$} \def\math_text_in_eqalign#1{$\tabskip\zeropoint\everycr\emptytoks#1$} \def\displayopenupvalue{.25\bodyfontsize} \def\eqalign#1% why no halign here, probably because of displaywidth {\emptyhbox \mskip\thinmuskip \vcenter {\openup\displayopenupvalue % was: \openup\jot \mathsurround\zeropoint \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##{}}$\hfil\crcr#1\crcr}}% \mskip\thinmuskip} % preamble is scanned for tabskips so we need the span to prevent an error message \setnewconstant\eqalignmode\plusone % use zeroskipplusfill \def\math_prepare_r_eqalign_no {\c_math_align_a{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% \c_math_align_b{&\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% \ifnum\mathraggedstatus=\plusone \c_math_align_c{\hfil&\span\math_text_in_eqalign{##}\tabskip\zeropoint}% \else\ifnum\mathraggedstatus=\plusthree \c_math_align_c{\hfil\tabskip\zeropoint\s!plus 1\s!fill&\span\math_text_in_eqalign{##}\tabskip\zeropoint}% \else \c_math_align_c{\hfil\tabskip\centering&\llap{\span\math_text_in_eqalign{##}}\tabskip\zeropoint}% \fi\fi \global\mathnumberstatus\zerocount \math_build_eqalign \the\mathdisplayaligntweaks \tabskip\centering} \def\math_prepare_l_eqalign_no {\c_math_align_a{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% \c_math_align_b{&\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% % problem: number is handled after rest and so ends up in the margin \ifnum\mathraggedstatus=\plusone \c_math_align_c{\hfil&\kern-\displaywidth\rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}% \else\ifnum\mathraggedstatus=\plusthree \c_math_align_c{\hfil\tabskip\zeropoint\s!plus 1\s!fill&\kern-\displaywidth\span\math_rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}% \else \c_math_align_c{\hfil\tabskip\centering&\kern-\displaywidth\rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}% \fi\fi \global\mathnumberstatus\zerocount \math_build_eqalign \the\mathdisplayaligntweaks \tabskip\centering} \def\math_both_eqalign_no_normal#1#2% {\ifmmode \the\mathdisplayaligntweaks % \let\strc_formulas_place_number\relax % strange hack \vcenter\bgroup \let\math_finish_eqalign_no\egroup \else \let\math_finish_eqalign_no\relax \fi #1% \halign \ifcase\eqalignmode \or to \displaywidth \fi \expandafter {\the\scratchtoks\crcr#2\crcr}% \math_finish_eqalign_no} \def\math_both_eqalign_no_aligned#1% {\ifmmode \the\mathdisplayaligntweaks \global\mathnumberstatus\plusone \ifcase\mathraggedstatus \def\math_finish_eqalign_no{\crcr\egroup}% \else % we're in a mathbox \vcenter\bgroup \def\math_finish_eqalign_no{\crcr\egroup\egroup}% \fi \fi #1% \halign \ifcase\eqalignmode \or to \displaywidth \fi \expandafter \bgroup\the\scratchtoks\crcr} \def\math_rlap#1% {\setbox\scratchbox\hbox{#1}% \ifdim\wd\scratchbox>\mathnumbercorrection \xdef\mathnumbercorrection{\the\wd\scratchbox}% \fi \box\scratchbox \global\mathnumberstatus\plustwo} \def\math_handle_eqalign_no_r_normal {\math_both_eqalign_no_normal \math_prepare_r_eqalign_no} \def\math_handle_eqalign_no_l_normal {\math_both_eqalign_no_normal \math_prepare_l_eqalign_no} \def\math_handle_eqalign_no_r_aligned{\math_both_eqalign_no_aligned\math_prepare_r_eqalign_no} \def\math_handle_eqalign_no_l_aligned{\math_both_eqalign_no_aligned\math_prepare_l_eqalign_no} \def\math_finish_eqalign_no {\crcr\egroup} \let \reqalignno \math_handle_eqalign_no_r_normal \let \leqalignno \math_handle_eqalign_no_l_normal \let\alignreqalignno \math_handle_eqalign_no_r_aligned \let\alignleqalignno \math_handle_eqalign_no_l_aligned \let \eqalignno \math_handle_eqalign_no_r_normal \let \aligneqalignno \math_handle_eqalign_no_r_aligned %D Here we implement the user interface part. We start with basic math alignments: \newcount\c_math_eqalign_column \newtoks \everymathalignment \def\math_alignment_NR_indeed[#1][#2]% {\strc_formulas_place_number_nested{#1}{#2}% to be tagged (better an attribute) \crcr \dostoptagged % finish row \noalign{\glet\math_alignment_NC\math_alignment_NC_first}} % noalign used for change state, conditional does not work here \def\math_alignment_NC_first {\glet\math_alignment_NC\math_alignment_NC_rest} \def\math_alignment_NC_rest {\aligntab} \def\math_alignment_EQ {\NC=} \def\math_alignment_NR {\aligntab \dostoptagged % finish cell \dodoubleempty\math_alignment_NR_indeed} % use xx from tabulate \appendtoks \glet\math_alignment_NC\math_alignment_NC_first \unexpanded\def\NC{\math_alignment_NC}% messy, due to lookahead (we cannot use a flag) \let\EQ\math_alignment_EQ \let\NR\math_alignment_NR \to \everymathalignment \unexpanded\def\math_alignment_start#1% {\edef\currentmathalignment{#1}% \dosingleempty\math_alignment_start_indeed} \def\math_alignment_start_indeed[#1]% {% \begingroup not permitted ($$...assignments...\halign... ) \iffirstargument \setupmathalignment[\currentmathalignment][#1]% \fi \the\everymathalignment \c_math_eqalign_column\zerocount \processcommacommand [\mathalignmentparameter\c!align] {\advance\c_math_eqalign_column\plusone\doseteqaligncolumn}% takes argument \global\c_math_eqalign_column\plusone \dostarttagged\t!math\empty \dostarttagged\t!mathtable\currentmathalignment \numberedeqalign} \def\math_alignment_stop {\math_finish_eqalign_no \dostoptagged \dostoptagged} \installcorenamespace{mathalignment} \installcorenamespace{mathalignmentvariant} \installcommandhandler \??mathalignment {mathalignment} \??mathalignment \appendtoks \setuevalue{\e!start\currentmathalignment}{\math_alignment_start{\currentmathalignment}}% \setvalue {\e!stop \currentmathalignment}{\math_alignment_stop}% \to \everydefinemathalignment \setupmathalignment [\c!n=2, \c!m=1, \c!distance=\emwidth] \definemathalignment[align] % default case (this is what amstex users expect) \definemathalignment[\v!mathalignment] % prefered case (this is cleaner, less clashing) % special case.. in case one mistypes .. \ifdefined \startalignment \let\align_math_normal_start\startalign \let\align_math_normal_stop \stopalign \let\align_text_normal_start\startalignment \let\align_text_normal_stop \stopalignment \unexpanded\def\startalign {\ifmmode \let\stopalign\align_math_normal_stop % cannot be an unexpanded def ... lookahead in align \expandafter\align_math_normal_start \else \let\stopalign\align_text_normal_stop \expandafter\align_text_normal_start \fi} \let\stopalign\relax \unexpanded\def\startalignment {\ifmmode \let\stopalignment\align_math_normal_stop % cannot be an unexpanded def ... lookahead in align \expandafter\align_math_normal_start \else \let\stopalignment\align_text_normal_stop \expandafter\align_text_normal_start \fi} \let\stopalignment\relax \fi % \def\numberedeqalign {\doifelse{\formulaparameter\c!location}\v!left \math_handle_eqalign_no_l_aligned \math_handle_eqalign_no_r_aligned} \def\math_first_in_eqalign {\global\c_math_eqalign_column\plusone \dostarttagged\t!mathtablerow \empty \dostarttagged\t!mathtablecell\empty} \def\math_next_in_eqalign {\global\advance\c_math_eqalign_column\plusone \dostoptagged % finish cell \dostarttagged\t!mathtablecell\empty} \def\math_left_of_equalign {\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname \ifcase\csname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname\or \relax \or \hfill \or \hfill \fi \fi} \def\math_right_of_eqalign {\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname \ifcase\csname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname\or \hfill \or \relax \or \hfill \fi \fi} \def\doseteqaligncolumn#1% we could just add to the preamble (as with other alignments) {\expandafter\let\csname\??mathalignmentvariant\number\c_math_eqalign_column\expandafter\endcsname \csname\??mathalignmentvariant\ifcsname\??mathalignmentvariant#1\endcsname#1\else\v!normal\fi\endcsname} \letvalue{\??mathalignmentvariant\v!normal}\zerocount \letvalue{\??mathalignmentvariant\v!left }\plusone \letvalue{\??mathalignmentvariant\v!right }\plustwo \letvalue{\??mathalignmentvariant\v!middle}\plusthree \def\math_align_NR_generic[#1][#2]% {\strc_formulas_place_number_nested{#1}{#2}\crcr} %D \starttyping %D \placeformula[eqn0]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn0] %D \placeformula[eqn1]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn1] %D \placeformula \startformula \startalign[n=1] a\NR[eqn2] \stopalign \stopformula See \in[eqn2] %D \placeformula[eqn3]\startformula \startalign[n=1] a\NR[+] \stopalign \stopformula See \in[eqn3] %D \stoptyping %D \startbuffer %D \placeformula \startformula \eqalignno { %D a &= b & \formulanumber \cr %D c &= d \cr %D &= e \cr %D &= f & \formulanumber %D } \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \EQ b \NR[+] %D \NC c \EQ d \NR %D \NC \EQ f \NR[for:demo-a-1] %D \NC \EQ g \NR[for:demo-a-2][a] %D \NC \EQ h \NR[for:demo-a-3][b] %D \NC \EQ i \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \EQ b \NR[+] %D \NC c \EQ d \NR %D \NC \EQ f \NR %D \NC \EQ g \NR %D \NC \EQ h \NR %D \NC \EQ i \NR[+] %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \NC \eq b \NR[+] %D \NC c \NC \neq d \NR %D \NC \NC \neq f \NR[for:demo-b-1] %D \NC \NC \geq g \NR[for:demo-b-2][a] %D \NC \NC \leq h \NR[for:demo-b-3][b] %D \NC \NC \neq i \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=3,align={left,middle,right}] %D \NC l \NC = \NC r \NR %D \NC left \NC = \NC right \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=3,align={right,middle,left}] %D \NC l \NC = \NC r \NR %D \NC left \NC = \NC right \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=3,align={middle,middle,middle}] %D \NC l \NC = \NC r \NR %D \NC left \NC = \NC right \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula %D \startformula %D \startalign[n=3,align={middle,middle,middle}] %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula %D \startformulas %D \setupmathalignment[n=3,align={middle,middle,middle}]% %D \startformula %D \startalign %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula %D \startformula %D \startalign %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula %D \stopformulas %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula %D \startformulas %D \dorecurse{5}{\startformula %D \startalign[n=3,align={middle,middle,middle}] %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula} %D \stopformulas %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {definemathcases, setupmathcases, startmathcases} %D %D Another wish \unknown \installcorenamespace{mathcases} \installcommandhandler \??mathcases {mathcases} \??mathcases \setupmathcases [\c!distance=\emwidth, \c!strut=\v!yes, % new \c!numberdistance=2.5\emwidth, \c!left={\left\{\mskip\thinmuskip}, \c!right={\right.}] \appendtoks \setuevalue{\e!start\currentmathcases}{\math_cases_start{\currentmathcases}}% \setvalue {\e!stop \currentmathcases}{\math_cases_stop}% \to \everydefinemathcases \unexpanded\def\math_cases_start#1% {\begingroup \edef\currentmathcases{#1}% \dosingleempty\math_cases_start_indeed} \def\math_cases_NC_zero {\math_cases_NC} \def\math_cases_MC_zero {\math_cases_NC \ifmmode\else \startimath \let\math_cases_end_math\stopimath \fi} \let\math_cases_end_math\relax \def\math_cases_NR_zero {\unskip \math_cases_end_math \aligntab \global\let\math_cases_NC\math_cases_NC_first \dodirectdoubleempty\math_cases_NR} \def\math_cases_NC_first {\global\let\math_cases_NC\math_cases_NC_second} \def\math_cases_NC_second {\math_cases_end_math\aligntab} \let\math_cases_NR\math_align_NR_generic \unexpanded\def\math_cases_start_indeed[#1]% {\iffirstargument \setupcurrentmathcases[#1]% \fi \edef\p_strut{\mathcasesparameter\c!strut}% \ifx\p_strut\v!yes \let\math_cases_strut\strut \else \let\math_cases_strut\relax \fi \mathcasesparameter\c!left \vcenter\bgroup \pushmacro\math_cases_NC \let\endmath\relax \let\NC\math_cases_NC_zero \let\MC\math_cases_MC_zero \let\NR\math_cases_NR_zero \global\let\math_cases_NC\math_cases_NC_first \normalbaselines \mathsurround\zeropoint \everycr\emptytoks \tabskip\zeropoint \global\c_math_eqalign_column\plusone \halign\bgroup \startimath \mathcasesparameter\c!style \alignmark\alignmark \stopimath \hfil \aligntab \hskip\mathcasesparameter\c!distance\relax \popmacro\math_cases_NC \math_cases_strut % looks better \alignmark\alignmark \hfil \aligntab \hskip\mathcasesparameter\c!numberdistance\relax \let\formuladistance\!!zeropoint \span\math_text_in_eqalign{\alignmark\alignmark}% \crcr} % todo: number \def\math_cases_stop {\crcr \egroup \popmacro\math_cases_NC \egroup \mathcasesparameter\c!right \endgroup} \definemathcases[cases] \definemathcases[\v!mathcases] %D \startbuffer %D \placeformula \startformula \startcases %D \NC 2 \NC $ y > 0 $ \NR %D \NC 7 \NC $ x = 7 $ \NR[+] %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula x \startcases %D \NC 2 \NC $ y > 0 $ \NR[+] %D \NC 7 \NC $ x = 7 $ \NR %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startcases %D \NC 2 \NC $ y > 0 $ \NR %D \NC 7 \NC $ x = 7 $ \NR %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula x \startcases %D \NC 2 \NC $ y > 0 $ \NR %D \NC 7 \NC $ x = 7 $ \NR %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {definemathmatrix, setupmathmatrix, startmathmatrix} %D %D Yet another one \unknown \installcorenamespace{mathmatrix} \installcommandhandler \??mathmatrix {mathmatrix} \??mathmatrix \setupmathmatrix [\c!distance=\emwidth, \c!left=, \c!right=, \c!align=\v!middle] \appendtoks \setuevalue{\e!start\currentmathmatrix}{\math_matrix_start{\currentmathmatrix}}% \setvalue {\e!stop \currentmathmatrix}{\math_matrix_stop}% no u else lookahead problem \to \everydefinemathmatrix \unexpanded\def\math_matrix_start#1% {\begingroup \edef\currentmathmatrix{#1}% \dosingleempty\math_matrix_start_indeed} \unexpanded\def\math_matrix_start_indeed[#1]% {\iffirstargument \setupcurrentmathmatrix[#1]% \fi \emptyhbox \math_matrix_align_method_analyze \mathmatrixleft \mathmatrixbox\bgroup \pushmacro\domatrixNC \let\endmath\relax \def\NC{\domatrixNC}% \def\MC{\domatrixNC\ifmmode\else$\def\endmath{$}\fi}% \global\let\domatrixNC\dodomatrixNC \def\NR{\endmath\global\let\domatrixNC\dodomatrixNC\crcr}% \normalbaselines \mathsurround\zeropoint \everycr\emptytoks \tabskip\zeropoint \c_math_eqalign_column\zerocount \processcommacommand [\mathmatrixparameter\c!align] {\advance\c_math_eqalign_column\plusone\doseteqaligncolumn}% was \dosetmatrixcolumn \scratchcounter=\ifnum\c_math_eqalign_column>\zerocount \c_math_eqalign_column \else \plusone \fi \global\c_math_eqalign_column\plusone \math_matrix_prepare} \def\math_matrix_stop {\crcr \mathstrut\crcr \noalign{\kern-\baselineskip}% \egroup \popmacro\domatrixNC \egroup \mathmatrixright \endgroup} \definemathmatrix[matrix] \definemathmatrix[\v!mathmatrix] \def\math_matrix_prepare {\c_math_align_a{\strut\math_first_in_eqalign\math_left_of_equalign\span \math_text_in_eqalign{\mathmatrixparameter\c!style##}\math_right_of_eqalign}% \c_math_align_b{&\hskip\mathmatrixparameter\c!distance \math_next_in_eqalign\math_left_of_equalign\span \math_text_in_eqalign{\mathmatrixparameter\c!style##}\math_right_of_eqalign}% \c_math_align_c{&&\hskip\mathmatrixparameter\c!distance \math_left_of_equalign\span \math_text_in_eqalign{\mathmatrixparameter\c!style##}\math_right_of_eqalign}% \scratchtoks\emptytoks \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_a}}% \dorecurse{\numexpr\scratchcounter-\plusone\relax} {\normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_b}}}% \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_c}}% \halign \expandafter \bgroup\the\scratchtoks \crcr} \unexpanded\def\dodomatrixNC {\gdef\domatrixNC{\endmath&}} \installcorenamespace{mathmatrixalignmethod} \let\mathmatrixleft \empty % experimental hook \let\mathmatrixright\empty % experimental hook \def\math_matrix_process#1#2% {\dowithnextbox {\scratchdimen\dimexpr(\nextboxdp-\nextboxht)/2 \ifcase#2\or+\mathaxisheight\textfont2\fi\relax \ifcase#1\relax\or\lower\scratchdimen\or\or\raise\scratchdimen\fi \hbox{$\mathmatrixparameter\c!left \vcenter{\unvbox\nextbox}% \mathmatrixparameter\c!right$}}% \vbox} \unexpanded\def\installmathmatrixalignmethod#1#2% {\setvalue{\??mathmatrixalignmethod#1}{#2}} \def\math_matrix_align_method_analyze {\csname\??mathmatrixalignmethod\ifcsname\??mathmatrixalignmethod\mathmatrixparameter\c!location\endcsname \mathmatrixparameter\c!location \else \v!normal \fi\endcsname} \installmathmatrixalignmethod\v!top {\def\mathmatrixbox{\math_matrix_process\plusthree\plusone }} \installmathmatrixalignmethod\v!high {\def\mathmatrixbox{\math_matrix_process\plusthree\zerocount}} \installmathmatrixalignmethod\v!lohi {\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}} \installmathmatrixalignmethod\v!low {\def\mathmatrixbox{\math_matrix_process\plusone \zerocount}} \installmathmatrixalignmethod\v!bottom{\def\mathmatrixbox{\math_matrix_process\plusone \plusone }} \installmathmatrixalignmethod\v!normal{\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}} % lohi %D \startbuffer %D \placeformula \startformula[-] \startmatrix %D \NC 1 \NC x \NC a \NR %D \NC 2 \NC y \NC b \NR %D \NC 3 \NC z \NC c \NR %D \stopmatrix \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \definemathmatrix[bmatrix][left={\left[\mskip\thinmuskip},right={\mskip\thinmuskip\right]}] %D %D \startbuffer %D \placeformula \startformula[-] \startbmatrix %D \NC 1 \NC x \NC a \NR %D \NC 2 \NC y \NC b \NR %D \NC 3 \NC z \NC c \NR %D \stopbmatrix \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Taco added some code (dedicated to Aditya Mahajan) that gives more %D control over aligments: %D \startbuffer %D \startformula %D \startmatrix %D \NC a + x \NC = \NC a + d \NR %D \NC y \NC = \NC d \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \startbuffer %D \startformula %D \startmatrix [distance=3pt,align={right,left}] %D \NC a + x \NC = a + d \NR %D \NC y \NC = d \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \startbuffer %D \startformula %D \startmatrix [left=\left(,right=\right)] %D \NC a + x \NR %D \NC y \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D A bit more complex code: %D %D \startbuffer %D \startformula %D \text{Let }{\cal R} = \bigcup_{P_{X_1},P_{X_2}} %D \left\{ (R_1, R_2) : %D \startmatrix[distance=1em,align={left,left,right}] %D \NC R_1 \NC < I(X_1 ; Y \mid X_2) \NC R_1 \NR %D \NC \hfill Q_2 \NC < I(X_2 ; Y \mid X_1) \NC R_2 \NR %D \NC R_1 + R_2 \NC < I(X_1 ; Y) \NC R_1 + R_2 \NR %D \stopmatrix %D \right\} %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {startmatrices} %D %D Just a handy keystroke safer: \unexpanded\def\startmatrices {\begingroup \setupmathmatrix} \unexpanded\def\stopmatrices {\endgroup} %D \startbuffer %D \startformula %D \startmatrix[left={\left(},right={\right)}] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[left={\left(},right={\right)},location=low] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[left={\left(},right={\right)},location=high] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \startformula %D \startmatrices[left={\left(},right={\right)}] %D \startmatrix %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[location=bottom] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[location=top] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D \stopmatrices %D \stopformula %D \stopbuffer %D %D \typebuffer % does not run well: \getbuffer %D \macros %D {startintertext} %D %D Preliminary feature: %D %D {\em example code} %D %D The intertext commands have to be expandable (in aligment lookahead) so %D we cannot use \type {\unexpanded}. \def\startintertext#1\stopintertext {\noalign{\math_intertext{#1}}} \let\stopintertext\relax \def\intertext#1% {\noalign{\math_intertext{#1}}} \unexpanded\def\math_intertext#1% {\penalty\postdisplaypenalty \afterdisplayspace \vbox{\forgetall\noindent#1\par}% \penalty\predisplaypenalty \beforedisplayspace} %D \macros %D {substack} %D %D Preliminary code: %D %D \startbuffer %D \startformula %D \sum_{% %D \startsubstack %D i = 1 \NR %D i \neq n \NR %D i \neq m %D \stopsubstack %D }a_i %D \stopformula %D \stopbuffer %D %D \getbuffer which was typed as \typebuffer %D %D Notice that these macros give the correct spacing for %D subscripts. Compare for example %D %D \startbuffer %D \startformula %D \sum_{\startsubstack a \NR b \NR \stopsubstack} %D \text{ and } %D \sum_{\scriptstyle a \atop \scriptstyle} %D \stopformula %D \stopbuffer %D %D \typebuffer which gives \getbuffer \unexpanded\def\startsubstack {\begingroup \vcenter\bgroup \baselineskip\mathstacktotal \lineskip\mathstackvgap \lineskiplimit\lineskip \let\stopmathmode\relax \def\NC{\domatrixNC}% \def\MC{\domatrixNC\startmathmode}% \global\let\domatrixNC\dodomatrixNC \def\NR {\stopmathmode \global\let\domatrixNC\dodomatrixNC \crcr}% \mathsurround\zeropoint \everycr\emptytoks \halign\bgroup\hfil$\scriptstyle##$\hfil\crcr} \def\stopsubstack {\crcr \egroup \egroup \endgroup} %D \macros %D {bordermatrix} %D %D In \PLAIN\ \TEX\ the width of a parenthesis is stored in %D the \DIMENSION\ \type{\mathparentwd}. This value is derived from %D the width of \type{\tenrm B}, so let's take care of it now: \ifx\mathparentwd\undefined \newdimen\mathparentwd \fi \let\normalbordermatrix\bordermatrix % move that code to here instead \def\bordermatrix {\begingroup \setbox\scratchbox\hbox{\mr\char"239C}% \global\mathparentwd\wd\scratchbox \endgroup \normalbordermatrix} % to be tested % % \def\bordermatrix % {\begingroup\mr\global\mathparentwd\fontcharwd\font"239C\relax\endgroup % \normalbordermatrix} %D \macros{overset, underset} %D %D The macros \type{\overset} and \type{\underset} are provided by %D \AMS\ packages in \LATEX. These macro allows you to place a symbol %D above or below another symbol, irrespective of whether the other %D symbol is a relation or something else, and without influencing the %D spacing. For most cases there is a better way to do such things %D (declaring a math command with limop option, or using accents), but %D occasionally these macros can be useful, for example: %D %D \startbuffer %D \startformula %D \overset{*}{X} \underset{*}{X} %D \stopformula %D \stopbuffer %D \typebuffer \getbuffer %D %D Use these macros sparingly. Remember, \TEX\ was designed for %D mathematics, so there is usually a proper method for typesetting %D common math notation. %D %D These macros are a cleaner version of \type {\binrel@} and %D \type {\binrel@@} macros in \AMSTEX\ packages. \def\math_binrel_apply#1% {\begingroup \setbox\scratchbox\hbox {\thinmuskip 0mu \medmuskip -1mu \thickmuskip -1mu \setbox\scratchbox\hbox{$#1\mathsurround\zeropoint$}% \kern-\wd\scratchbox ${}#1{}\mathsurround\zeropoint$}% \ifdim\wd\scratchbox<\zeropoint \endgroup \expandafter\mathbin \else\ifdim\wd\scratchbox>\zeropoint \endgroup \doubleexpandafter\mathrel \else \endgroup \doubleexpandafter\firstofoneargument \fi\fi} \unexpanded\def\overset#1#2% {\math_binrel_apply{#2}{\mathop{\kern\zeropoint#2}\limits\normalsuperscript{#1}}} \unexpanded\def\underset#1#2% {\math_binrel_apply{#2}{\mathop{\kern\zeropoint#2}\limits\normalsubscript {#1}}} %D The following code comes from \type {math-str.mkiv}. %D %D Here we implement a basic math alignment mechanism. Numbers %D are also handled. The macros \type {\startinnermath} and %D \type {\stopinnermath} can be overloaded in specialized %D modules. \installcorenamespace{mathinnerstart} \installcorenamespace{mathinnerstop} \unexpanded\def\startinnermath{\csname\??mathinnerstart\formulaparameter\c!align\endcsname} \unexpanded\def\stopinnermath {\csname\??mathinnerstop \formulaparameter\c!align\endcsname} \unexpanded\def\mathinnerstrut {\doif{\formulaparameter\c!strut}\v!yes\strut} \unexpanded\def\defineinnermathhandler#1#2#3% {\setvalue{\??mathinnerstart#1}{#2}% \setvalue{\??mathinnerstop #1}{#3}} \newif\iftracemath \def\math_hbox {\iftracemath\ruledhbox\else\hbox\fi} \newconstant\mathraggedstatus % normal left center right \newconstant\mathnumberstatus % nothing normal shift_right \let\mathnumbercorrection\!!zeropoint \let\math_the_r_eq_no\empty \let\math_the_l_eq_no\empty \unexpanded\def\startmathbox#1% {\hsize\displaywidth \global\mathnumberstatus\plusone \mathraggedstatus#1\relax \let\mathnumbercorrection\!!zeropoint \global\let\math_the_r_eq_no\empty \global\let\math_the_l_eq_no\empty \def\reqno{\gdef\math_the_r_eq_no}% \def\leqno{\gdef\math_the_l_eq_no}% \let\eqno\reqno % added \let\normalreqno\reqno \let\normalleqno\leqno \let\normaleqno \eqno % added \strc_formulas_place_number \setbox\scratchbox\math_hbox to \displaywidth\bgroup \mathinnerstrut $% \displaystyle \ifcase\mathraggedstatus\or\hfill\or\hfill\fi} \def\math_box_llapped_math_no {\ifcase\mathraggedstatus\or \math_the_r_eq_no \or \llap{\math_the_r_eq_no}% \or \llap{\math_the_r_eq_no}% \fi} \def\math_box_rlapped_math_no {\ifcase\mathraggedstatus\or \rlap{\math_the_l_eq_no}% \or \rlap{\math_the_l_eq_no}% \or \math_the_l_eq_no \fi} \unexpanded\def\stopmathbox {$% \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi \egroup \setbox0\hbox{\unhcopy\scratchbox}% \scratchdimen\wd0 \ifdim\scratchdimen>\displaywidth \donetrue \else \donefalse \fi \hbox to \displaywidth\bgroup \ifcase\mathnumberstatus \box\scratchbox \or \ifx\math_the_l_eq_no\empty \ifx\math_the_r_eq_no\empty \box\scratchbox \else \ifdone \vbox{\box\scratchbox\hbox to \displaywidth{\hss\math_box_llapped_math_no}}% \else \hss\box\scratchbox\math_box_llapped_math_no % hss makes room for number \fi \fi \else \ifdone \vbox{\hbox to \displaywidth{\math_box_rlapped_math_no\hss}\box\scratchbox}% \else \math_box_rlapped_math_no\box\scratchbox\hss % hss makes room for number \fi \fi \or \hskip\mathnumbercorrection \box\scratchbox \hss \else \box\scratchbox \fi \egroup} \defineinnermathhandler\v!left {\startmathbox\plusone }{\stopmathbox} \defineinnermathhandler\v!middle {\startmathbox\plustwo }{\stopmathbox} \defineinnermathhandler\v!right {\startmathbox\plusthree}{\stopmathbox} \defineinnermathhandler\v!flushleft {\startmathbox\plusthree}{\stopmathbox} \defineinnermathhandler\v!center {\startmathbox\plustwo }{\stopmathbox} \defineinnermathhandler\v!flushright{\startmathbox\plusone }{\stopmathbox} %D [The examples below are in english and don't process in the %D documentation style, which will be english some day.] %D %D Normally a formula is centered, but in case you want to %D align it left or right, you can set up formulas to behave %D that way. Normally a formula will adapt is left indentation %D to the environment: %D %D \startbuffer %D \fakewords{20}{40}\epar %D \startitemize %D \item \fakewords{20}{40}\epar %D \placeformula \startformula \fakeformula \stopformula %D \item \fakewords{20}{40}\epar %D \stopitemize %D \fakewords{20}{40}\epar %D \stopbuffer %D %D % \getbuffer %D %D In the next examples we explicitly align formulas to the %D left (\type {\raggedleft}), center and right (\type %D {\raggedright}): %D %D \startbuffer %D \setupformulas[align=left] %D \startformula\fakeformula\stopformula %D \setupformulas[align=middle] %D \startformula\fakeformula\stopformula %D \setupformulas[align=right] %D \startformula\fakeformula\stopformula %D \stopbuffer %D %D \typebuffer %D %D Or in print: %D %D % {\getbuffer} %D %D With formula numbers these formulas look as follows: %D %D \startbuffer %D \setupformulas[align=left] %D \placeformula \startformula\fakeformula\stopformula %D \setupformulas[align=middle] %D \placeformula \startformula\fakeformula\stopformula %D \setupformulas[align=right] %D \placeformula \startformula\fakeformula\stopformula %D \stopbuffer %D %D % {\getbuffer} %D %D This was keyed in as: %D %D \typebuffer %D %D When tracing is turned on (\type {\tracemathtrue}) you can %D visualize the bounding box of the formula, %D %D % {\tracemathtrue\getbuffer} %D %D As you can see, the dimensions are the natural ones, but if %D needed you can force a normalized line: %D %D \startbuffer %D \setupformulas[strut=yes] %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer %D %D This time we get a more spacy result. %D %D % {\tracemathtrue\getbuffer} %D %D We will now show a couple of more settings and combinations %D of settings. In centered formulas, the number takes no space %D %D \startbuffer %D \setupformulas[align=middle] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D %D You can influence the placement of the whole box with the %D parameters \type {leftmargin} and \type {rightmargin}. %D %D \startbuffer %D \setupformulas[align=right,leftmargin=3em] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D %D \setupformulas[align=left,rightmargin=1em] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D %D You can also inherit the margin from the environment. %D %D \startbuffer %D \setupformulas[align=right,margin=standard] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D %D The distance between the formula and the number is only %D applied when the formula is left or right aligned. %D %D \startbuffer %D \setupformulas[align=left,distance=2em] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} \protect \endinput % \placeformula \startformula[-] \startmatrix % \NC 1 \NC x \NC a \NR % \NC 2 \NC y \NC b \NR % \NC 3 \NC z \NC c \NR % \stopmatrix \stopformula % \definemathmatrix[bordermatrix][left={\left[\mskip\thinmuskip},right={\mskip\thinmuskip\right]}] % \placeformula \startformula[-] \startbordermatrix % \NC 1 \NC x \NC a \NR % \NC 2 \NC y \NC b \NR % \NC 3 \NC z \NC c \NR % \stopbordermatrix \stopformula context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-cs.mkii0000644000175000017500000000102011754241457024115 0ustar norbertnorbert%D \module %D [ file=cont-cs, %D version=1998.12.02, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Czech Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {czech} \def\defaultlanguagetag{cs} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-60.mkii0000644000175000017500000000657511754241457024044 0ustar norbertnorbert%D \module %D [ file=s-pre-60, %D version=2004.03.15, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 60, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmode[paper,print] \let\StartSteps\relax \let\StopSteps \relax \let\FlushStep \relax \let\ResetStep \relax \let\StartBusy\relax \let\StopBusy \relax \endinput \stopmode \newcounter\StepCounter \newcounter\StepMaximum \useJSscripts[stp] \startsetups[set-stepper] \ifnum\getvariable{stepper}{nofsteps}>\StepMaximum \dostepwiserecurse {\numexpr(\StepMaximum+1)} {\getvariable{stepper}{nofsteps}} {1} {\doifnotmode{nosteps,nostep} {\expanded{\defineproperty[step:\recurselevel][layer][state=stop,global=yes]}}} \xdef\StepMaximum{\getvariable{stepper}{nofsteps}} \fi \stopsetups \setvariables [stepper] [set=\setups{set-stepper}, nofsteps=50] \defineproperty[step:busy][layer][state=start,global=no] \definereference [SetupStepper] [JS(SetupStepper{step,\StepMaximum})] \definereference [ResetStepper] [JS(ResetStepper)] \definereference [CheckStepper] [JS(CheckStepper{\StepCounter})] \definereference [InvokeStepper] [JS(InvokeStepper)] \def\ResetStep {\doglobal\newcounter\StepCounter} \def\NextStep {\doglobal\increment \StepCounter} \def\PrevStep {\doglobal\decrement \StepCounter} % todo: roll back blank \def\StepLayer {step:\StepCounter} \def\NextStepLayer {step:\the\numexpr\StepCounter+1\relax} \def\FirstStepLayer{step:1} \def\StartStep {\ifvmode \scratchskip\lastskip \vskip-\scratchskip \startproperty[\StepLayer]% \vskip\scratchskip \else \startproperty[\StepLayer]% \fi \ignorespaces} \def\StopStep {\removeunwantedspaces \stopproperty} \def\StartSteps{\iftrialtypesetting\else\ResetStep\NextStep\StartStep\fi} \def\StopSteps {\iftrialtypesetting\else\StopStep \PrevStep \fi} \def\FlushStep {\iftrialtypesetting\else\StopStep \NextStep\StartStep\fi} \appendtoks \ResetStep \to \everyaftershipout \def\StartBusy{\startproperty[step:busy]\ignorespaces} \def\StopBusy {\removeunwantedspaces\stopproperty} \setupinteraction [%openaction=SetupStepper, closeaction=ResetStepper, openpageaction=CheckStepper, closepageaction=ResetStepper] \defineoverlay[invoke][\overlaybutton{InvokeStepper}] \setupbackgrounds [text] [background=invoke] % bonus \useMPlibrary[nav] \definepalet [navplus] [attach=interactioncolor, comment=interactioncolor] \setupcomment [symbol={comment-normal,comment-down}, textlayer=\StepLayer, option=buffer, height=\textheight, width=\textwidth, margin=0pt] \setupattachments [symbol={attach-normal,attach-down}, textlayer=\StepLayer] %D Handy: \def\StartLocalSteps{\ResetStep} \def\StopLocalSteps {} \def\StartLocalStep {\NextStep\StartStep} \def\StopLocalStep {\StopStep} %D used as (given some definitions): %D %D \starttyping %D \StartLocalSteps %D \startcombination[both] %D {\StartLocalStep\placestreamlayer[left]\StopLocalStep} {} %D {\StartLocalStep\placestreamlayer[right]\StopLocalStep} {} %D \stopcombination %D \StopLocalSteps %D \stoptyping \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-spr.mkiv0000644000175000017500000000673512130411274024305 0ustar norbertnorbert%D \module %D [ file=page-spr, %D version=2002.11.11, %D title=\CONTEXT\ Page Macros, %D subtitle=Spreading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Spreading} % This module is experimental and not yet official! \unprotect \newbox \b_page_spread_content \newconditional\c_page_spread_busy \newconditional\c_page_spread_once % when true only one flush (writes etc) % beware, ugly overload, to be redone \def\normalsettextpagecontent#1#2#3% #2 and #3 will disappear {\setbox#1\hbox {\setlayoutcomponentattribute{\v!page:\v!text}% \vbox \layoutcomponentboxattribute to \textheight {\offinterlineskip \freezetextwidth \hsize\textwidth % local variant of \sethsize \boxmaxdepth\maxdepth \noindent % content can be < \hsize \page_otr_command_package_contents#2#3}}% \dp#1\zeropoint \ifconditional\c_page_spread_busy \normalsettextpagecontent_spread{#1}% \else \normalsettextpagecontent_normal{#1}% \fi} \def\normalsettextpagecontent_normal#1% {\setbox#1\hbox to \makeupwidth {\hss\box#1\hss}} % never change the \hss's \def\normalsettextpagecontent_spread#1% {\setbox#1\hbox to \makeupwidth {\ifvoid\b_page_spread_content \ifconditional\c_page_spread_once \box#1% \else \global\setbox\b_page_spread_content\box#1% \copy\b_page_spread_content \fi \hss % left page \else \hss % right page \ifarrangingpages % writes don't matter anyway \else\ifconditional\c_page_spread_once \global\setbox\b_page_spread_content\emptyhbox \wd\b_page_spread_content\makeupwidth \ht\b_page_spread_content\textheight \else % writes can interfere (todo: write stripper, but how about hyperlinks) \fi \fi \box\b_page_spread_content \fi}} \unexpanded\def\page_spread_flush {\ifconditional\c_page_spread_busy \ifvoid\b_page_spread_content\else % this page will be discarded later \emptyhbox \page \fi \fi } \unexpanded\def\startspread {\ifdoublesided \ifconditional\c_page_spread_busy \doubleexpandafter\page_spread_start_nop \else \doubleexpandafter\page_spread_start_yes \fi \else \expandafter\page_spread_start_nop \fi} \let\stopspread\relax \unexpanded\def\page_spread_start_yes {\bgroup \page[\v!left]% %\setsystemmode{spread}% \settrue\c_page_spread_busy \expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}% \let\stopspread\page_spread_stop_yes} \unexpanded\def\page_spread_stop_yes {\kern\zeropoint \page \setuplayout[\c!textwidth=\textwidth] \page[\v!left] \egroup} \unexpanded\def\page_spread_start_nop {\bgroup \let\stopspread\page_spread_stop_nop} \unexpanded\def\page_spread_stop_nop {\egroup} \protect \endinput % texexec --arr --pdf test % % \setuplayout[width=middle] % \setuppapersize[A4][A3,landscape] % \setuppagenumbering[alternative=doublesided] % \setuparranging[2UP] % % \starttext % % \dorecurse{3}{\input tufte } % % \startspread % \dorecurse{10}{\input tufte } % \stopspread % % \dorecurse{3}{\input tufte } % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ind.mkii0000644000175000017500000000146411754241457024254 0ustar norbertnorbert%D \module %D [ file=lang--ind, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Indo Iranian Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Indo-Iranian Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. % 34 languages \unprotect \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-run.mkii0000644000175000017500000000332311754241457024342 0ustar norbertnorbert%D \module %D [ file=type-run, %D version=2001.04.20, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \gdef\typetypescript {\dotripleempty\dotypetypescript} \gdef\dotypetypescript[#1][#2][#3]% {\bgroup \def\dochecktypescript##1##2% script use {\doifelsenothing{##1##2} {\donetrue} {\ExpandBothAfter\doifcommonelse{##1}{##2}\donetrue\donefalse}} \edef\typescriptone {\truetypescript{#1}}% \edef\typescripttwo {\truetypescript{#2}}% \edef\typescriptthree{\truetypescript{#3}}% \def\starttypescript {\bgroup \obeylines % else we loose the first line due to lookahead \dotripleempty\dostarttypescript} \def\dostarttypescript[##1][##2][##3]% {\long\def\next####1\stoptypescript{\egroup} \dochecktypescript{##1}\typescriptone \ifdone \dochecktypescript{##2}\typescripttwo \ifdone \dochecktypescript{##3}\typescriptthree\ifdone \def\next% {\def\stoptypescript{\egroup\type{\stoptypescript}} % what follows now is quite ugly \skipfirstverbatimlinefalse \type{\starttypescript} \doifsomething{##1}{\type{[##1]}} \doifsomething{##2}{\type{[##2]}} \doifsomething{##3}{\type{[##3]}} \processdisplayverbatim{\stoptypescript}}% \fi\fi\fi \next} \processcommacommand[\typescriptfiles]\ReadFile % \dodousetypescript \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-number.lua0000644000175000017500000001151312130411274024111 0ustar norbertnorbertif not modules then modules = { } end modules ['l-number'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this module will be replaced when we have the bit library .. the number based sets -- might go away local tostring, tonumber = tostring, tonumber local format, floor, match, rep = string.format, math.floor, string.match, string.rep local concat, insert = table.concat, table.insert local lpegmatch = lpeg.match number = number or { } local number = number if bit32 then -- I wonder if this is faster local btest, bor = bit32.btest, bit32.bor function number.bit(p) return 2 ^ (p - 1) -- 1-based indexing end number.hasbit = btest number.setbit = bor function number.setbit(x,p) -- why not bor? return btest(x,p) and x or x + p end function number.clearbit(x,p) return btest(x,p) and x - p or x end else -- http://ricilake.blogspot.com/2007/10/iterating-bits-in-lua.html function number.bit(p) return 2 ^ (p - 1) -- 1-based indexing end function number.hasbit(x, p) -- typical call: if hasbit(x, bit(3)) then ... return x % (p + p) >= p end function number.setbit(x, p) return (x % (p + p) >= p) and x or x + p end function number.clearbit(x, p) return (x % (p + p) >= p) and x - p or x end end -- print(number.tobitstring(8)) -- print(number.tobitstring(14)) -- print(number.tobitstring(66)) -- print(number.tobitstring(0x00)) -- print(number.tobitstring(0xFF)) -- print(number.tobitstring(46260767936,4)) if bit32 then local bextract = bit32.extract local t = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", } function number.tobitstring(b,m) -- if really needed we can speed this one up -- because small numbers need less extraction local n = 32 for i=0,31 do local v = bextract(b,i) local k = 32 - i if v == 1 then n = k t[k] = "1" else t[k] = "0" end end if m then m = 33 - m * 8 if m < 1 then m = 1 end return concat(t,"",m) elseif n < 8 then return concat(t) elseif n < 16 then return concat(t,"",9) elseif n < 24 then return concat(t,"",17) else return concat(t,"",25) end end else function number.tobitstring(n,m) if n > 0 then local t = { } while n > 0 do insert(t,1,n % 2 > 0 and 1 or 0) n = floor(n/2) end local nn = 8 - #t % 8 if nn > 0 and nn < 8 then for i=1,nn do insert(t,1,0) end end if m then m = m * 8 - #t if m > 0 then insert(t,1,rep("0",m)) end end return concat(t) elseif m then rep("00000000",m) else return "00000000" end end end function number.valid(str,default) return tonumber(str) or default or nil end function number.toevenhex(n) local s = format("%X",n) if #s % 2 == 0 then return s else return "0" .. s end end -- a,b,c,d,e,f = number.toset(100101) -- -- function number.toset(n) -- return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)") -- end -- -- -- the lpeg way is slower on 8 digits, but faster on 4 digits, some 7.5% -- -- on -- -- for i=1,1000000 do -- local a,b,c,d,e,f,g,h = number.toset(12345678) -- local a,b,c,d = number.toset(1234) -- local a,b,c = number.toset(123) -- local a,b,c = number.toset("123") -- end local one = lpeg.C(1-lpeg.S('')/tonumber)^1 function number.toset(n) return lpegmatch(one,tostring(n)) end -- function number.bits(n,zero) -- local t, i = { }, (zero and 0) or 1 -- while n > 0 do -- local m = n % 2 -- if m > 0 then -- insert(t,1,i) -- end -- n = floor(n/2) -- i = i + 1 -- end -- return t -- end -- -- -- a bit faster local function bits(n,i,...) if n > 0 then local m = n % 2 local n = floor(n/2) if m > 0 then return bits(n, i+1, i, ...) else return bits(n, i+1, ...) end else return ... end end function number.bits(n) return { bits(n,1) } end context-2013.05.28.20130704/texmf-dist/tex/context/base/data-fil.lua0000644000175000017500000000733112130411274024054 0ustar norbertnorbertif not modules then modules = { } end modules ['data-fil'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local report_files = logs.reporter("resolvers","files") local resolvers = resolvers local finders, openers, loaders, savers = resolvers.finders, resolvers.openers, resolvers.loaders, resolvers.savers local locators, hashers, generators, concatinators = resolvers.locators, resolvers.hashers, resolvers.generators, resolvers.concatinators local checkgarbage = utilities.garbagecollector and utilities.garbagecollector.check function locators.file(specification) local name = specification.filename local realname = resolvers.resolve(name) -- no shortcut if realname and realname ~= '' and lfs.isdir(realname) then if trace_locating then report_files("file locator %a found as %a",name,realname) end resolvers.appendhash('file',name,true) -- cache elseif trace_locating then report_files("file locator %a not found",name) end end function hashers.file(specification) local name = specification.filename local content = caches.loadcontent(name,'files') resolvers.registerfilehash(name,content,content==nil) end function generators.file(specification) local path = specification.filename local content = resolvers.scanfiles(path,false,true) -- scan once --~ inspect(content) resolvers.registerfilehash(path,content,true) end concatinators.file = file.join function finders.file(specification,filetype) local filename = specification.filename local foundname = resolvers.findfile(filename,filetype) if foundname and foundname ~= "" then if trace_locating then report_files("file finder: %a found",filename) end return foundname else if trace_locating then report_files("file finder: %a not found",filename) end return finders.notfound() end end -- The default textopener will be overloaded later on. function openers.helpers.textopener(tag,filename,f) return { reader = function() return f:read () end, close = function() logs.show_close(filename) return f:close() end, } end function openers.file(specification,filetype) local filename = specification.filename if filename and filename ~= "" then local f = io.open(filename,"r") if f then if trace_locating then report_files("file opener: %a opened",filename) end return openers.helpers.textopener("file",filename,f) end end if trace_locating then report_files("file opener: %a not found",filename) end return openers.notfound() end function loaders.file(specification,filetype) local filename = specification.filename if filename and filename ~= "" then local f = io.open(filename,"rb") if f then logs.show_load(filename) if trace_locating then report_files("file loader: %a loaded",filename) end local s = f:read("*a") -- io.readall(f) is faster but we never have large files here if checkgarbage then checkgarbage(#s) end f:close() if s then return true, s, #s end end end if trace_locating then report_files("file loader: %a not found",filename) end return loaders.notfound() end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-rsc.lua0000644000175000017500000001475711754241457024164 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-rsc'] = { version = 1.001, comment = "companion to strc-ref.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The scanner is in a separate module so that we can test without too -- many dependencies. -- The scanner accepts nested outer, but we don't care too much, maybe -- some day we will have both but currently the innermost wins. local lpegmatch, lpegP, lpegS, lpegCs, lpegCt, lpegCf, lpegCc, lpegC, lpegCg = lpeg.match, lpeg.P, lpeg.S, lpeg.Cs, lpeg.Ct, lpeg.Cf, lpeg.Cc, lpeg.C, lpeg.Cg local find = string.find local spaces = lpegP(" ")^0 local lparent = lpegP("(") local rparent = lpegP(")") local lbrace = lpegP("{") local rbrace = lpegP("}") local tcolon = lpegP(":::") -- component or outer local dcolon = lpegP("::") -- outer local scolon = lpegP(":") -- prefix local backslash = lpegP("\\") lparent = spaces * lparent * spaces rparent = spaces * rparent * spaces lbrace = spaces * lbrace * spaces rbrace = spaces * rbrace * spaces tcolon = spaces * tcolon * spaces dcolon = spaces * dcolon * spaces local endofall = spaces * lpegP(-1) local o_token = 1 - rparent - rbrace - lparent - lbrace -- can be made more efficient local a_token = 1 - rbrace local s_token = 1 - lparent - lbrace local i_token = 1 - lparent - lbrace - endofall local f_token = 1 - lparent - lbrace - dcolon local c_token = 1 - lparent - lbrace - tcolon local hastexcode = lpegCg(lpegCc("has_tex") * lpegCc(true)) -- cannot be made to work local component = lpegCg(lpegCc("component") * lpegCs(c_token^1)) local outer = lpegCg(lpegCc("outer") * lpegCs(f_token^1)) local operation = lpegCg(lpegCc("operation") * lpegCs(o_token^1)) local arguments = lpegCg(lpegCc("arguments") * lpegCs(a_token^0)) local special = lpegCg(lpegCc("special") * lpegCs(s_token^1)) local inner = lpegCg(lpegCc("inner") * lpegCs(i_token^1)) arguments = (lbrace * arguments * rbrace)^-1 component = component * tcolon outer = outer * dcolon operation = outer^-1 * operation -- special case: page(file::1) and file::page(1) inner = inner * arguments special = special * lparent * (operation * arguments)^-1 * rparent local referencesplitter = spaces * lpegCf (lpegCt("") * (component + outer)^-1 * (special + inner)^-1 * endofall, rawset) local prefixsplitter = lpegCs(lpegP((1-scolon)^1 * scolon)) * #-scolon * lpegCs(lpegP(1)^1) local componentsplitter = lpegCs(lpegP((1-scolon)^1)) * scolon * #-scolon * lpegCs(lpegP(1)^1) prefixsplitter = componentsplitter local function splitreference(str) if str and str ~= "" then local t = lpegmatch(referencesplitter,str) if t then local a = t.arguments if a and find(a,"\\") then t.has_tex = true else local o = t.arguments if o and find(o,"\\") then t.has_tex = true end end return t end end end local function splitprefix(str) return lpegmatch(prefixsplitter,str) end local function splitcomponent(str) return lpegmatch(componentsplitter,str) end -- register in the right namespace structures = structures or { } structures.references = structures.references or { } local references = structures.references references.referencesplitter = referencesplitter references.splitreference = splitreference references.prefixsplitter = prefixsplitter references.splitprefix = splitprefix references.componentsplitter = componentsplitter references.splitcomponent = splitcomponent -- test code: -- inspect(splitreference([[component:::inner]])) -- inspect(splitprefix([[component:::inner]])) -- inspect(splitprefix([[component:inner]])) -- inspect(splitreference([[ ]])) -- inspect(splitreference([[ inner ]])) -- inspect(splitreference([[ special ( operation { argument, argument } ) ]])) -- inspect(splitreference([[ special ( operation { argument } ) ]])) -- inspect(splitreference([[ special ( operation { argument, \argument } ) ]])) -- inspect(splitreference([[ special ( operation { \argument } ) ]])) -- inspect(splitreference([[ special ( operation ) ]])) -- inspect(splitreference([[ special ( \operation ) ]])) -- inspect(splitreference([[ special ( o\peration ) ]])) -- inspect(splitreference([[ special ( ) ]])) -- inspect(splitreference([[ inner { argument } ]])) -- inspect(splitreference([[ inner { \argument } ]])) -- inspect(splitreference([[ inner { ar\gument } ]])) -- inspect(splitreference([[inner{a\rgument}]])) -- inspect(splitreference([[ inner { argument, argument } ]])) -- inspect(splitreference([[ inner { argument, \argument } ]])) -- fails: bug in lpeg? -- inspect(splitreference([[ inner { \argument, \argument } ]])) -- inspect(splitreference([[ outer :: ]])) -- inspect(splitreference([[ outer :: inner]])) -- inspect(splitreference([[ outer :: special (operation { argument,argument } ) ]])) -- inspect(splitreference([[ outer :: special (operation { } )]])) -- inspect(splitreference([[ outer :: special ( operation { argument, \argument } ) ]])) -- inspect(splitreference([[ outer :: special ( operation ) ]])) -- inspect(splitreference([[ outer :: special ( \operation ) ]])) -- inspect(splitreference([[ outer :: special ( ) ]])) -- inspect(splitreference([[ outer :: inner { argument } ]])) -- inspect(splitreference([[ special ( outer :: operation ) ]])) -- inspect(splitreference([[]])) -- inspect(splitreference([[inner]])) -- inspect(splitreference([[special(operation{argument,argument})]])) -- inspect(splitreference([[special(operation)]])) -- inspect(splitreference([[special(\operation)]])) -- inspect(splitreference([[special()]])) -- inspect(splitreference([[inner{argument}]])) -- inspect(splitreference([[inner{\argument}]])) -- inspect(splitreference([[outer::]])) -- inspect(splitreference([[outer::inner]])) -- inspect(splitreference([[outer::special(operation{argument,argument})]])) -- inspect(splitreference([[outer::special(operation{argument,\argument})]])) -- inspect(splitreference([[outer::special(operation)]])) -- inspect(splitreference([[outer::special(\operation)]])) -- inspect(splitreference([[outer::special()]])) -- inspect(splitreference([[outer::inner{argument}]])) -- inspect(splitreference([[special(outer::operation)]])) context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-aux.mkii0000644000175000017500000001354611754241457024343 0ustar norbertnorbert%D \module %D [ file=mult-aux, %D version=2010.08.2, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=helpers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a subset of the \MKIV\ variant which has more comments). There %D is no support for attributes (fonts and color). This code is mostly %D meant for usage in modules that are backported from \MKIV. \writestatus{loading}{ConTeXt Multilingual Macros / Helpers} \unprotect %D \starttyping %D \unprotect %D \def\????aa{@@@@aa} %D %D \installparameterhandler \????aa {whatever} %D \installsetuphandler \????aa {whatever} %D \installdefinehandler \????aa {whatever} \????aa % #3 == defaultroot %D %D % \installcommandhandler \????aa {whatever} \????aa %D \protect %D %D % \whateverparameter \c!test %D % \whateverparameterhash \c!test %D % \namedwhateverparameter \mycurrentwhatever \c!test %D % \everydefinewhatever (sets \currentwhatever) %D % \everypresetwhatever (can be used to reset parameters as we can redefine) %D % \everysetupwhatever (sets \currentwhatever) %D %D \starttext %D \definewhatever[first] \definewhatever[second][first] %D test: \def\currentwhatever{first} \whateverparameter{method} \par %D \setupwhatever [method=unset] test: \def\currentwhatever{first} \whateverparameter{method} \par %D \setupwhatever[first] [method=first] test: \def\currentwhatever{first} \whateverparameter{method} \par %D test: \def\currentwhatever{second} \whateverparameter{method} \par %D \setupwhatever[second][method=second] test: \def\currentwhatever{second} \whateverparameter{method} \par %D \stoptext %D \stoptyping \unexpanded\def\doinstallparameterhandler#1#2#3#4#5#6#7#8#9% {\def#3##1{\csname#4{#1#2}{##1}\endcsname}% \def#4##1##2{\ifcsname##1##2\endcsname##1##2\else\expandafter#5\csname##1\s!parent\endcsname{##2}\fi}% \def#5##1##2{\ifx##1\relax\s!empty\else#4{##1}{##2}\fi}% \def#6##1##2{\csname#4{#1##1}{##2}\endcsname}% \def#7##1{\detokenize\expandafter\expandafter\expandafter{\csname#1##1\endcsname}}% always root \def#8{\dosetvalue{#1}}% ##1 {##2} (braces are mandate) \def#9{\doletvalue{#1}}}% ##1 ##2 \unexpanded\def\installparameterhandler#1#2% {%\message{\detokenize{#1}/\detokenize{#2}}% \normalexpanded {\doinstallparameterhandler {\noexpand#1}% \??aa \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname #2parameter\endcsname \expandafter\noexpand\csname do#2parameter\endcsname \expandafter\noexpand\csname do#2parentparameter\endcsname \expandafter\noexpand\csname named#2parameter\endcsname \expandafter\noexpand\csname detokenized#2parameter\endcsname \expandafter\noexpand\csname doset#2parameter\endcsname \expandafter\noexpand\csname dolet#2parameter\endcsname}} \unexpanded\def\doinstallparameterhashhandler#1#2#3#4#5% {\def#3##1{#4{#1#2}{##1}}% \def#4##1##2{\ifcsname##1##2\endcsname##1\else\expandafter#5\csname##1\s!parent\endcsname{##2}\fi}% \def#5##1##2{\ifx##1\relax\else#4{##1}{##2}\fi}} \unexpanded\def\installparameterhashhandler#1#2% {\normalexpanded {\doinstallparameterhashhandler {\noexpand#1}% \??aa \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname #2parameterhash\endcsname \expandafter\noexpand\csname do#2parameterhash\endcsname \expandafter\noexpand\csname do#2parentparameterhash\endcsname}} \unexpanded\def\doinstalldefinehandler#1#2#3#4#5#6#7% {\unexpanded\def#2{\dotripleempty#5}% \newtoks#6% \newtoks#7% \def#5[##1][##2][##3]% [child][parent][settings] {\edef#4{##1}% % [child] [settings] \the#6% predefine % [child][parent] \ifthirdargument % [child] \getparameters[#1#4][\s!parent=#1##2,##3]% \else\ifsecondargument \doifassignmentelse{##2} {\getparameters[#1#4][\s!parent=#3,##2]} {\getparameters[#1#4][\s!parent=#1##2]}% \else \getparameters[#1#4][\s!parent=#3]% \fi\fi \the#7}} \unexpanded\def\installdefinehandler#1#2#3% {\normalexpanded {\doinstalldefinehandler {\noexpand#1}% \??aa \expandafter\noexpand\csname define#2\endcsname {\noexpand#3}% root \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname d@define#2\endcsname \expandafter\noexpand\csname everypreset#2\endcsname \expandafter\noexpand\csname everydefine#2\endcsname}} \unexpanded\def\doinstallsetuphandler#1#2#3#4#5% {\unexpanded\def#2{\dodoubleempty#4}% \newtoks#5% \def#4[##1][##2]% maybe helper {\ifsecondargument \def\docommand####1% we will have a simple one as well {\edef#3{####1}% \getparameters[#1#3][##2]% \the#5}% \processcommalist[##1]\docommand \else \let#3\empty \getparameters[#1][##1]% \the#5% \fi}} \unexpanded\def\installsetuphandler#1#2% {\normalexpanded {\doinstallsetuphandler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname d@setup#2\endcsname \expandafter\noexpand\csname everysetup#2\endcsname}} \unexpanded\def\installcommandhandler#1#2#3% \??self name \??parent (can be \??self) {\installparameterhandler {#1}{#2}% \installparameterhashhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installsetuphandler {#1}{#2}} \unexpanded\def\installnamespace#1% {\setvalue{????#1}{@@@@#1}} \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frq.mkiv0000644000175000017500000001542712130411274024274 0ustar norbertnorbert%D \module %D [ file=lang-frq, %D version=2004.01.15, %D title=\CONTEXT\ Language Macros, %D subtitle=Frequency Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \endinput \writestatus{loading}{ConTeXt Language Macros / Frequency Tables} %D Some day I might redo this \LUA. But anyway, who uses it. It's rather %D old code. \unprotect %M \usemodule[layout] %D \macros %D {charwidthmethod} %D %D This module implements a method for determining the width of an %D average character in a language. It uses the dimensions of the %D current fonts. %D %D \def\ShwChrWd#1#2#3% %D {\chardef\charwidthmethod#1\relax %D \mainlanguage[#2#3]\the\dimexpr(\averagecharwidth)} %D %D \starttabulate[|c|c|c|c|c|c|] %D \HL %D \NC \NC\bf0=amount\NC\bf1=.5em\NC2=ex\NC\bf3=frequency\NC\bf4=list\NC\NR %D \HL %D \NC\bf en\NC\ShwChrWd0en\NC\ShwChrWd1en\NC\ShwChrWd2en\NC\ShwChrWd3en\NC\ShwChrWd4en\NC\NR %D \NC\bf nl\NC\ShwChrWd0nl\NC\ShwChrWd1nl\NC\ShwChrWd2nl\NC\ShwChrWd3nl\NC\ShwChrWd4nl\NC\NR %D \NC\bf de\NC\ShwChrWd0de\NC\ShwChrWd1de\NC\ShwChrWd2de\NC\ShwChrWd3de\NC\ShwChrWd4de\NC\NR %D \HL %D \stoptabulate %D %D Method~1 ignores the widths and assumes that each character has a %D width of .5em, which is true for most monospaced fonts. Method~2 %D takes the x as starting point, and assumes that it's height kind of %D matches its width. Method~3 is the best one, and determines the %D average width based on the language specific character table. %D Method~4 is a mixture between the first two methods: character %D specific widths applied to an equal distribution. Method~0 reports %D the total count, which normally is~100. \chardef\charwidthmethod=3 % 0=amount 1=em 2=ex 3=frequency 4=flattened >4=ex %D \macros %D {charwidthlanguage} %D %D The language used for the calculations is defined as: \def\charwidthlanguage{\currentmainlanguage} %D \macros %D {charfreq} %D %D This method comes into action in the following macro: \def\charfreq#1 #2 % character fraction {+(\ifcase\charwidthmethod #2\dimexpr100\onepoint\relax \or #2\dimexpr\emwidth/2\relax \or #2\dimexpr\exheight\relax \or #2\fontcharwd\font`#1% \or \dimexpr100\fontcharwd\font`#1/\charactertsize\charwidthlanguage\relax % ugly hack \else #2\dimexpr\exheight\relax \fi)} %D \macros %D {startcharactertable} %D %D A frequency table is defined with the following macro. The \type %D {charfreq} macro is used in this table. \installcorenamespace{frequencywidths} \installcorenamespace{frequencycounts} \let\stopcharactertable\relax \unexpanded\def\startcharactertable[#1]#2\stopcharactertable % \dimexpr has fuzzy lookahead {\startnointerference \setgvalue{\??frequencywidths#1}{#2}% the width vector \scratchcounter\zerocount \def\charfreq##1 ##2 {\advance\scratchcounter\plusone} #2% \setxvalue{\??frequencycounts#1}{\the\scratchcounter}% the character count \stopnointerference} %D \macros %D {charactertable,charactertsize} %D %D The table content as well as the number of entries can be fetched with %D the following two macros. The architecture of the table and calling %D macro permits a fully expandable application. \def\charactertable#1% {\csname\??frequencywidths\ifcsname\??frequencywidths#1\endcsname#1\else\s!en\fi\endcsname} \def\charactertsize#1% {\csname\??frequencycounts\ifcsname\??frequencycounts#1\endcsname#1\else\s!en\fi\endcsname} %D Although it is of hardly any use, you can inherit a character table: %D %D \starttyping %D \startcharactertable[cz] \charactertable{en} \stopcharactertable %D \stoptyping \startcharactertable[en] % empty \stopcharactertable % kind of default %D \macros %D {averagecharwidth} %D %D This macro reports the average width for the current main %D language (\the \dimexpr (\averagecharwidth)). \def\averagecharwidth{\dimexpr(\zeropoint\charactertable\charwidthlanguage)/100\relax} \unexpanded\def\showcharfreq {\hbox\bgroup \charwidthlanguage:% \dostepwiserecurse\zerocount\plusfour\plusone {\chardef\charwidthmethod\recurselevel\relax \enspace\recurselevel/\the\dimexpr(\averagecharwidth)}% \egroup} %D Just for fun, we show a few frequency tables as graphic (\in {figure} %D [fig:charfreq]). %D %D \startbuffer %D \definepalet [charfreq] [en=darkred, nl=darkgreen, de=darkblue] %D %D \def\charfreq#1 #2 % %D {\startMPdrawing %D interim linejoin := butt ; %D a := ASCII "#1" ; %D if (a >= (ASCII "a")) and (a <= (ASCII "z")) : %D draw ((0,#2*.25cm)--origin--(0,#2*.5cm)) %D shifted (a*4mm+o,0) %D withpen pencircle scaled .5mm %D withcolor c; %D fi ; %D \stopMPdrawing} %D %D \resetMPdrawing %D \startMPdrawing %D numeric a, o ; a := o := 0 ; %D color c ; c := .5white ; %D string s ; s := "" ; %D \stopMPdrawing %D %D \startMPdrawing o := 0mm ; c := \MPcolor{charfreq:en} ; \stopMPdrawing %D \charactertable{en} %D %D \startMPdrawing o := 1mm ; c := \MPcolor{charfreq:nl} ; \stopMPdrawing %D \charactertable{nl} %D %D \startMPdrawing o := 2mm ; c := \MPcolor{charfreq:de} ; \stopMPdrawing %D \charactertable{de} %D %D \startMPdrawing %D for a := ASCII "a" upto ASCII "z" : %D draw textext.bot("\strut\tttf " & char a) shifted (a*4mm+1mm,-1mm) ; %D endfor ; %D \stopMPdrawing %D %D \MPdrawingdonetrue \getMPdrawing \resetMPdrawing %D \stopbuffer %D %D \placefigure %D [here] %D [fig:charfreq] %D {The character distributions for English, Dutch and German.} %D {\getbuffer} %D %D A few samples of usage of this mechanism are shown below: %D %D \startbuffer %D {\mainlanguage[en]\hsize65\averagecharwidth\mainlanguage[en]\input ward \blank} %D {\mainlanguage[nl]\hsize65\averagecharwidth\mainlanguage[en]\input ward \blank} %D {\mainlanguage[de]\hsize65\averagecharwidth\mainlanguage[en]\input ward \blank} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Although the widthts differ, the consequenes for breaking the paragraph %D into lines are minimal. %D \macros %D {freezeaveragecharacterwidth} %D %D This macro can be used to make sure that the width does not change during a %D page break when another font is used. \let\normalaveragecharacterwidth\averagecharacterwidth \unexpanded\def\freezeaveragecharacterwidth % global {\xdef\averagecharacterwidth{\dimexpr\the\normalaveragecharacterwidth\relax}} %D Example: %D %D \starttyping %D \input lang-frq.mkiv %D \input lang-frd.mkiv %D %D \setupbodyfont %D [dejavu] %D %D \setemeasure{textwidth}{\the\dimexpr70\averagecharwidth} %D %D \setuplayout %D [width=\measure{textwidth}] %D %D \showframe %D %D \starttext %D \input ward %D \stoptext %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context-base.lmx0000644000175000017500000000656712130411274025020 0ustar norbertnorbert <?lua inject(variables.title) ?> 0 and variables.refreshurl then ?> 0 and variables.refreshurl then ?>
context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-71.mkii0000644000175000017500000001277511754241457024045 0ustar norbertnorbert% engine=luatex %D \module %D [ file=s-pre-71, %D version=2008.08.05, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 71, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I might improve this module so consider it experimental. % \enablemode[numbers] % \enablemode[paper] \usemodule[pre-60,abr-02] \setupinteraction[state=start,click=off] \definepapersize[wide][width=900pt,height=600pt] \setuppapersize[wide][wide] \setuplayout[page] % \setupbodyfont[15pt] \usetypescriptfile[type-hgz] \usetypescript[palatino-informal] \setupbodyfont[palatino-informal,15pt] \setupsorting[logo][style=] \startnotmode[paper] \setupbackgrounds[page][background=color,backgroundcolor=black] \stopnotmode \TransparencyHack \definelayer[page][width=\paperwidth,height=\paperheight] \definecolor[TopicColor-1][r=.3,g=.4,b=.5] \definecolor[TopicColor-2][r=.3,g=.5,b=.4] \definecolor[TopicColor-3][r=.4,g=.3,b=.5] \definecolor[TopicColor-4][r=.4,g=.5,b=.3] \definecolor[TopicColor-5][r=.5,g=.3,b=.4] \definecolor[TopicColor-6][r=.5,g=.4,b=.3] \definecolor[TopicColor-7][r=.35,g=.35,b=.6] \definecolor[TopicColor-8][r=.6,g=.35,b=.35] \definecolor[TopicColor-9][r=.35,g=.6,b=.35] \definecolor[TopicColor-0][t=.5,a=1,s=.5] \definecolor[TopicColor] [s=1] \setupcolors[state=start] \setupcolors[textcolor=TopicColor] \startluacode local locations = { 'lefttop', 'middletop', 'righttop', 'middleleft', 'middle', 'middleright', 'leftbottom', 'middlebottom', 'rightbottom', } local done, current, previous, n = table.tohash(locations,false), 0, 0, 0 function document.reset_locations() done, current, previous, n = table.tohash(locations,false), 0, 0, 0 end function document.next_location(loc) previous = current n = n + 1 loc = loc and loc ~= "" and tonumber(loc) while true do current = loc or math.random(1,#locations) if not done[current] then done[current] = true break end end end function document.current_location() tex.print(locations[current] or "") end function document.previous_location() tex.print(locations[previous] or "") end function document.current_n() tex.print(tostring(current)) end function document.previous_n() tex.print(tostring(previous)) end function document.step() tex.print(tostring(n)) end \stopluacode \def\StartTopics {\startstandardmakeup \ctxlua{document.reset_locations()} \doifnotmode{paper}{\StartLocalSteps}} \def\StopTopics {\doifnotmode{paper}{\StopLocalSteps} \flushlayer[page] \stopstandardmakeup} \def\StartTopic {\dosingleempty\doStartTopic} \def\doStartTopic[#1]% {\doifnotmode{paper}{\NextStep} \ctxlua{document.next_location("#1")} \startnotmode[paper] \doifnothing{#1} {\ifcase\ctxlua{document.previous_n()}\else \setlayer [page] [preset=\ctxlua{document.previous_location()}] \bgroup \doifnotmode{paper}{\startproperty[\StepLayer]}% \framed [offset=20pt, strut=no, align=normal, frame=off, height=\dimexpr\paperheight/3\relax, width=\dimexpr\paperwidth/3\relax, background=color, backgroundcolor=TopicColor-0] {}% \doifnotmode{paper}{\stopproperty}% \egroup \fi} \stopnotmode \setlayer [page] [preset=\ctxlua{document.current_location()}] \bgroup \doifnotmode{paper}{\startproperty[\StepLayer]}% \framed [offset=20pt, strut=no, align=\expdoifelse{#1}{}{normal}{middle,lohi}, align=\expdoifelse{#1}{}{flushleft,verytolerant}{middle,lohi}, frame=off, height=\dimexpr\paperheight/3\relax, width=\dimexpr\paperwidth/3\relax, background=color, backgroundcolor=TopicColor-\ctxlua{document.current_n()}] \bgroup \ignorespaces} \def\StopTopic {\removeunwantedspaces \egroup \doifnotmode{paper}{\stopproperty}% \egroup \startmode[numbers] \setlayerframed [page] [preset=\ctxlua{document.current_location()}] [height=\dimexpr\paperheight/3\relax, width=\dimexpr\paperwidth/3\relax, frame=off, foregroundstyle=\bfa, align={flushright,low}] {\doifnotmode{paper}{\startproperty[\StepLayer]}% \ctxlua{document.step()}\kern\strutdepth \doifnotmode{paper}{\stopproperty}} \stopmode} \logo [METAPOST] {MetaPost} \definefont[TitleFont][SansBold at 60pt] \definefont[TempFont] [SansBold at 12pt] \let\StartText\starttext \let\StopText \stoptext \doifnotmode{demo}{\endinput} \starttext \StartTopics \StartTopic[1] A \StopTopic \StartTopic[5] B \StopTopic \StartTopic[9] C \StopTopic \StopTopics \StartTopics \StartTopic A \StopTopic \StartTopic B \StopTopic \StartTopic C \StopTopic \StartTopic D \StopTopic \StartTopic E \StopTopic \StartTopic F \StopTopic \StartTopic G \StopTopic \StartTopic H \StopTopic \StartTopic I \StopTopic \StopTopics \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-de.mkii0000644000175000017500000000102211754241457024102 0ustar norbertnorbert%D \module %D [ file=cont-de, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ German Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {german} \def\defaultlanguagetag{de} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-box.mkii0000644000175000017500000007104111754241457024265 0ustar norbertnorbert%D \module %D [ file=pack-box, %D version=2002.04.12, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Boxes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Boxes} %D This module contains all kind of macros for moving content %D around. Many macros here come from other modules, but %D depencies made it more clear to isolate them. % \placeornament \unprotect % \definelayer[\v!tekst-2][\c!positie=\v!ja] % \definelayer[\v!tekst-1][\c!positie=\v!ja] % \definelayer[\v!tekst+1][\c!positie=\v!ja] % \definelayer[\v!tekst+2][\c!positie=\v!ja] % we need to set the size, else we get dimensions depending % on the content, which in itsel fis ok, but can lead to loops % due to rounding errors (happened in demo-obv) \definelayer[\v!text-2][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight] \definelayer[\v!text-1][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight] \definelayer[\v!text+1][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight] \definelayer[\v!text+2][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight] \def\internaltextoverlay#1% will become more generic and installable {\startoverlay % i.e. probably an overlay by itself {\positionoverlay{\v!text#1}} % see later {\composedlayer {\v!text#1}} \stopoverlay} %\def\internaltextoverlay#1% % {\hbox to \zeropoint{\positionoverlay{\v!tekst#1}\hss}% % \composedlayer{\v!tekst#1}} % todo: share info, so that tuo will be smaller \defineoverlay[\v!text-2][\internaltextoverlay{-2}] \defineoverlay[\v!text-1][\internaltextoverlay{-1}] \defineoverlay[\v!text+1][\internaltextoverlay{+1}] \defineoverlay[\v!text+2][\internaltextoverlay{+2}] % to be documented \definelayer[anchor] \def\anchor {\dosingleargument\doanchor} \def\doanchor[#1]% {\ifundefined{\??an#1}\@EA\dodoanchor\else\@EA\nonoanchor\fi[#1]} \def\nonoanchor[#1]% {\getvalue{\??an#1}} \def\dodoanchor[#1]% {\dotripleempty\dododoanchor[#1]} \def\dododoanchor {\ifthirdargument \expandafter\dodoanchorT \else \expandafter\dodoanchorS \fi} \def\dodoanchorS[#1][#2][#3]% {\dodoanchorT[#1][#2][#2]} \def\dodoanchorT[#1][#2][#3]% {\dowithnextbox {\bgroup \checktextbackgrounds \setbox\scratchbox\null \wd\scratchbox\nextboxwd \ht\scratchbox\nextboxht \dp\scratchbox\nextboxdp \setlayer [anchor] [\c!width=\wd\scratchbox, \c!height=\ht\scratchbox, \c!offset=\!!zeropoint, #2,#3] {\setlayer[#1]{\flushnextbox}}% \framed [#2, \c!background=anchor, \c!offset=\v!overlay, \c!frame=\v!off, #3] {\box\scratchbox}% \egroup}% \vbox} \def\defineanchor {\doquadrupleempty\dodefineanchor} \def\dodefineanchor[#1][#2][#3][#4]% {\setvalue{\??an#1}{\dodefinedanchor[#2][#3][#4]}} \def\dodefinedanchor[#1][#2][#3]% {\def\docommand[##1][##2]% {\ifsecondargument \def\next{\dodoanchorT[#1][#2,##1][#3,##2]}% \else\iffirstargument \def\next{\dodoanchorT[#1][#2,##1][#2,##1]}% \else \def\next{\dodoanchorT[#1][#2][#3]}% \fi\fi \next}% \dodoubleempty\docommand} \def\@@collectorbox{@@collectorbox} \def\definecollector {\dodoubleargument\dodefinecollector} \def\dodefinecollector[#1][#2]% {\ifundefined{\@@collectorbox#1}% \expandafter\newbox\csname\@@collectorbox#1\endcsname \fi \resetcollector[#1]% \setupcollector [#1] [\c!state=\v!start, \c!x=\!!zeropoint,\c!y=\!!zeropoint, \c!offset=\!!zeropoint,\c!rotation=, % geen 0 ! \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint, \c!location=rb,\c!corner=,#2]} \def\setupcollector {\dodoubleargument\dosetupcollector} \def\dosetupcollector[#1][#2]% {\def\docommand##1{\getparameters[\??cb##1][#2]}% \processcommalist[#1]\docommand} \def\setcollector {\dodoubleargument\dosetcollector} \def\dosetcollector[#1][#2]% {\bgroup \forgetall \dontcomplain \dowithnextbox {\ifundefined{\@@collectorbox#1}% \writestatus{collector}{unknown layer #1}% \else \dodosetcollector[#1][#2]% \fi \egroup} \hbox} \def\collectorparameter#1{\csname\??cb\currentcollector#1\endcsname} \def\dodosetcollector[#1][#2]% todo: keep reference point {\def\currentcollector{#1}% \mathchardef\collectorbox\csname\@@collectorbox#1\endcsname \getparameters[\??cb#1][#2]% \@@layerxsiz\wd\collectorbox \@@layerysiz\ht\collectorbox \doifvaluesomething{\??cb#1\c!rotation} {\setbox\nextbox\hbox {\rotate [\c!location=\v!high, \c!rotation=\collectorparameter\c!rotation] {\flushnextbox}}}% \advance\@@layerysiz\dp\collectorbox \@@layerxpos\collectorparameter\c!x \advance\@@layerxpos\collectorparameter\c!hoffset \@@layerypos\collectorparameter\c!y \advance\@@layerypos\collectorparameter\c!voffset \doifelse\v!middle{\collectorparameter\c!corner} {\ifdim\@@layerxsiz>\zeropoint \advance\@@layerxpos.5\@@layerxsiz \fi \ifdim\@@layerysiz>\zeropoint \advance\@@layerypos.5\@@layerysiz \fi}% {\ExpandBothAfter\doifinset\v!bottom{\collectorparameter\c!corner} {\ifdim\@@layerysiz>\zeropoint \advance\@@layerypos-\@@layerysiz \@@layerypos-\@@layerypos \fi}% \ExpandBothAfter\doifinset\v!right{\collectorparameter\c!corner} {\ifdim\@@layerxsiz>\zeropoint \advance\@@layerxpos-\@@layerxsiz \@@layerxpos-\@@layerxpos \fi}}% \setbox\nextbox\hbox {\alignedbox[\collectorparameter\c!location]\vbox{\flushnextbox}}% \boxmaxdepth\zeropoint % really needed, nice example \global\advance\boxhdisplacement\@@layerxpos \ifdim\boxhdisplacement<\zeropoint \global\setbox\collectorbox\hbox {\hskip-\boxhdisplacement \box\collectorbox}% \fi \global\advance\boxvdisplacement\@@layerypos \ifdim\boxvdisplacement<\zeropoint \global\setbox\collectorbox\hbox {\lower-\boxvdisplacement \box\collectorbox}% \fi \@@layerxsiz\wd\collectorbox \@@layerysiz\ht\collectorbox \advance\@@layerysiz\dp\collectorbox \global\setbox\collectorbox\hbox {\box\collectorbox \hskip-\@@layerxsiz \hskip\@@layerxpos\relax \ifdim\boxhdisplacement<\zeropoint \hskip-\boxhdisplacement \fi \lower\@@layerypos\hbox {\ifdim\boxvdisplacement<\zeropoint \lower-\boxvdisplacement\flushnextbox \else \flushnextbox \fi}}% % combine height and depth into depth only (later flushed as height) \global\setbox\collectorbox\hbox {\lower\ht\collectorbox\box\collectorbox}% % just to be sure \ifdim\wd\collectorbox<\@@layerxsiz \wd\collectorbox\@@layerxsiz \fi} \def\flushcollector[#1]% {\ifundefined{\@@collectorbox#1}% \writestatus{collector}{unknown collector #1}% \else \doifnotvalue{\??cb#1\c!state}\v!stop {\vbox {\hbox {\doifelsevalue{\??cb#1\c!state}\v!repeat {\let\next\copy}{\let\next\box}% \raise\dp\csname\@@collectorbox#1\endcsname \next\csname\@@collectorbox#1\endcsname}}}% \fi} \def\composedcollector#1{\flushcollector[#1]} \def\resetcollector[#1]% {\ifundefined{\@@collectorbox#1}\else \global\setbox\csname\@@collectorbox#1\endcsname\emptybox \fi} \def\adaptcollector {\dodoubleargument\doadaptcollector} \def\doadaptcollector[#1][#2]% % a typical case where \global\wd looks better in the code {\bgroup \def\currentcollector{#1}% \mathchardef\collectorbox\csname\@@collectorbox#1\endcsname \getparameters [\??cb#1][\c!voffset=\zeropoint,\c!hoffset=\zeropoint,#2]% \scratchdimen\wd\collectorbox \advance\scratchdimen\collectorparameter\c!hoffset \global\wd\collectorbox\scratchdimen \scratchdimen\ht\collectorbox \advance\scratchdimen\collectorparameter\c!voffset \global\ht\collectorbox\scratchdimen \egroup} %\definecollector[test] %\setcollector[test] % [location=rb] % {\externalfigure[koe][frame=on,width=3cm]} %\setcollector[test] % [corner={right,bottom},location={left,top}] % {\framed{gans}} %\composedcollector{test} \definecollector [caption] \def\collectedtext {\dodoubleempty\docollectedtext} \def\docollectedtext[#1][#2]#3% {\bgroup \dowithnextbox {\setcollector [caption] {\flushnextbox}% \setcollector [caption][#1] {\getparameters[\??du][#2]% \dosetfontattribute\??du\c!style\setupinterlinespace \framed % watch the special setting of kader/overlay [\c!frame=\v!overlay,#2] {\doattributes\??du\c!style\c!color{#3}}}% \composedcollector{caption}% \egroup}% \hbox} % \collectedtext % [corner={right,bottom},location={left,top}] % [background=color,backgroundcolor=white,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \collectedtext % [rotation=90,corner={right,bottom},location={right,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \collectedtext % [rotation=90,corner={left,bottom},location={left,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} \definelayer [caption] \def\layeredtext {\dodoubleempty\dolayeredtext} \def\dolayeredtext[#1][#2]#3% {\bgroup \dowithnextbox {\!!widtha \nextboxwd \!!heighta\nextboxht \bgroup % preserve \nextbox \setuplayer [caption] [\c!width=\!!widtha,\c!height=\!!heighta]% \setlayer [caption] [#1] {\getparameters[\??du][#2]% \dosetfontattribute\??du\c!style\setupinterlinespace \framed [\c!frame=\v!overlay,,#2] {\doattributes\??du\c!style\c!color{#3}}}% \egroup \framed [\c!offset=\v!overlay, \c!frame=\v!off, \c!background={\v!foreground,caption}, \c!width=\!!widtha, \c!height=\!!heighta] {\flushnextbox}% \egroup}% \hbox} % \layeredtext % [corner={right,bottom},location={left,top}] % [background=color,backgroundcolor=white,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \layeredtext % [rotation=90,corner={right,bottom},location={right,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \layeredtext % [rotation=90,corner={left,bottom},location={left,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} \def\ornamenttext {\dodoubleempty\doornamenttext} \def\doornamenttext[#1][#2]% {\bgroup \doifassignmentelse{#1} {\getparameters[\s!dummy][\c!alternative=\v!a,#1]% \doifelse\dummyalternative\v!a {\egroup\collectedtext}% {\egroup\layeredtext }% [#1][#2]}% {\egroup\getvalue{#1}}} \def\defineornament {\dotripleempty\dodefineornament} \def\dodefineornament[#1][#2][#3]% {\setvalue{#1}{\doornamenttext[#2][#3]}} % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={right,top}, % hoffset=-.25ex] % [frame=on,background=color,backgroundcolor=red,offset=0pt] % % \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}} % % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={right,top}, % hoffset=-.25ex,alternative=b] % [frame=on,background=color,backgroundcolor=red,offset=0pt] % % \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}} % % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={left,top}, % hoffset=.25ex,voffset=.25ex,alternative=a] % [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] % % \affiliation{photo}{\externalfigure[molen][width=3cm]} % % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={left,top}, % hoffset=.25ex,voffset=.25ex,alternative=b] % [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] % % \affiliation{drawing}{\externalfigure[hakker][width=3cm]} % pas op: aanpassen aan nieuwe layer hoek ankers en columnset \newcount\nofbleeds % per pag \def\setupbleeding {\dodoubleempty\getparameters[\??bg]} \setupbleeding [\c!location=l, \c!stretch=\v!yes, \c!width=3cm, \c!height=3cm, \c!offset=2mm, \c!page=\v!no, \c!voffset=\@@bgoffset, \c!hoffset=\@@bgoffset] \def\bleed {\dosingleempty\dobleed} \def\bleedwidth {\the\hsize}% \def\bleedheight{\the\vsize}% \def\dobleed[#1]#2% {\hbox\bgroup \xdef\bleedwidth {\the\hsize}% \xdef\bleedheight{\the\vsize}% \global\advance\nofbleeds\plusone \getparameters[\??bg][#1]% \!!doneafalse % left \!!donebfalse % right \!!donecfalse % top \!!donedfalse % bottom % replace this part ! todo: default location \processaction [\@@bglocation] [ t=>\!!donectrue\let\@@bghoffset\!!zeropoint, b=>\!!donedtrue\let\@@bghoffset\!!zeropoint, l=>\!!doneatrue\let\@@bgvoffset\!!zeropoint, r=>\!!donebtrue\let\@@bgvoffset\!!zeropoint, bl=>\!!doneatrue\!!donedtrue, lb=>\!!doneatrue\!!donedtrue, br=>\!!donebtrue\!!donedtrue, rb=>\!!donebtrue\!!donedtrue, tl=>\!!doneatrue\!!donectrue, lt=>\!!doneatrue\!!donectrue, tr=>\!!donebtrue\!!donectrue, rt=>\!!donebtrue\!!donectrue]% \doifelse\@@bgstretch\v!yes\donetrue\donefalse \scratchdimen\@@bgwidth \edef\currentbgposition {\??bg:\number\nofbleeds}% \edef\currentpageposition{page:0}% todo: per page \ifdone \if!!donea \advance\scratchdimen\dimexpr \MPx\currentbgposition-\MPx\currentpageposition\relax \else\if!!doneb \scratchdimen\dimexpr\paperwidth-\MPx\currentbgposition-\MPx\currentpageposition\relax % not checked \fi\fi \fi \advance\scratchdimen\@@bghoffset \xdef\bleedwidth{\the\scratchdimen}% \scratchdimen\@@bgheight \ifdone \if!!donec \scratchdimen\dimexpr\paperheight-\MPy\currentbgposition-\MPy\currentpageposition\relax % not checked \else\if!!doned \advance\scratchdimen\dimexpr \MPy\currentbgposition-\MPy\currentpageposition\relax % not checked \fi\fi \fi \advance\scratchdimen\@@bgvoffset \xdef\bleedheight{\the\scratchdimen}% \hsize\bleedwidth \vsize\bleedheight \setbox\scratchbox\hbox{#2}% \doif\@@bgpage\v!yes {\setbox\scratchbox\topskippedbox{\box\scratchbox}}% \setbox\scratchbox\hbox to \@@bgwidth {\if!!donea\hss\fi\box\scratchbox\if!!doneb\hss\fi}% \if!!doned \setbox\scratchbox\hbox {\lower\bleedheight\hbox{\raise\@@bgheight\box\scratchbox}}% \fi \wd\scratchbox\@@bgwidth \ht\scratchbox\@@bgheight \dp\scratchbox\zeropoint \ifdone \hpos\currentbgposition{\box\scratchbox}% \else \box\scratchbox \fi \egroup} \setupbleeding[\c!stretch=\v!yes] \defineexternalfigure[bleed][\c!width=\bleedwidth,\c!height=\bleedheight] % \placefigure[left]{none} % {\bleed[width=5cm,height=3cm,location=lt]{\externalfigure[koe][bleed]}} % % \input tufte % % \placefigure[left]{none} % {\bleed[width=5cm,height=3cm,location=l]{\externalfigure[koe][bleed]}} % % \input tufte % % \placefigure[right]{none} % {\bleed[width=5cm,height=3cm,location=r]{\externalfigure[koe][bleed]}} % % \input tufte % % \placesomefloat[right]{none} % {\bleed[width=5cm,height=3cm,location=rb]{\externalfigure[koe][bleed]}} % % \input tufte % % \placefigure % [top,none] % {} % no caption % {\bleed % [hoffset=-\backspace, % voffset=3mm, % width=0cm, % height=6\lineheight, % page=yes, % correct for topskip % location=lt] % {\externalfigure[koe][bleed][frame=on]}} % \setlayerframed[layer id][layer settings][framed setting]{data} % \setlayerframed[layer id][combined settings]{data} \def\setlayerframed {\dotripleempty\dosetlayerframed} \def\dosetlayerframed {\ifthirdargument \expandafter\dosetlayerframedT \else \expandafter\dosetlayerframedS \fi} \def\dosetlayerframedT[#1][#2][#3]% {\dowithnextbox{\setlayer[#1][#2]{\flushnextbox}}% \hbox\framed[#3]} % \def\dosetlayerframedS[#1][#2][#3]% % {\dowithnextbox % {\setlayer[#1][\c!width=\nextboxwd,\c!height=\nextboxht,\c!offset=\!!zeropoint,#2]{\flushnextbox}}% % \hbox\framed[\c!location=\v!normal,#2]} % % better (2011-09-06) \def\dosetlayerframedS[#1][#2][#3]% {\dowithnextbox {\setlayer[#1][\c!width=\nextboxwd,\c!height=\nextboxht,#2,\c!offset=\!!zeropoint]{\flushnextbox}}% \hbox\framed[\c!location=\v!normal,#2]} \def\setlayertext {\dotripleempty\dosetlayertext} \def\dosetlayertext[#1][#2][#3]% {\bgroup \getparameters [\??lx] [\c!align=, \c!width=\hsize, \c!color=, \c!style=, #3]% \dowithnextboxcontent {\forgetall \hsize\@@lxwidth \expanded{\setupalign[\@@lxalign]}% \dosetfontattribute\??lx\c!style} {\setlayer[#1][#2]{\strut\color[\@@lxcolor]{\flushnextbox}}% \egroup}% \vtop} % \setupbackgrounds % [page] % [background=pagefigures] % % \definelayer % [pagefigures] % [x=-2mm, % y=-2mm, % width=\paperwidth, % height=\paperheight] % % \definelayerpreset [lefttop] [corner={left,top},location={right,bottom}] % \definelayerpreset [righttop] [corner={right,top},location={left,bottom}] % \definelayerpreset [leftbottom] [corner={left,bottom},location={right,top}] % \definelayerpreset [rightbottom] [corner={right,bottom},location={left,top}] % \definelayerpreset [middle] [corner=middle,location=middle] % % \setlayer[pagefigures][preset=lefttop] % \setlayer[pagefigures][preset=righttop] % \setlayer[pagefigures][preset=leftbottom] % \setlayer[pagefigures][preset=rightbottom] \definelayerpreset [\v!left\v!top] [\c!corner={\v!left,\v!top},\c!location={\v!right,\v!bottom}] \definelayerpreset [\v!right\v!top] [\c!corner={\v!right,\v!top},\c!location={\v!left,\v!bottom}] \definelayerpreset [\v!left\v!bottom] [\c!corner={\v!left,\v!bottom},\c!location={\v!right,\v!top}] \definelayerpreset [\v!right\v!bottom] [\c!corner={\v!right,\v!bottom},\c!location={\v!left,\v!top}] \definelayerpreset [\v!middle] [\c!corner=\v!middle,\c!location=\v!middle] % \definelayerpreset % [\v!middle\v!top] % [\c!location=\v!bottom,\c!hoffset=.5\layerwidth] % \definelayerpreset % [\v!middle\v!bottom] % [\c!location=\v!top,\c!hoffset=.5\layerwidth,\c!voffset=\layerheight] % \definelayerpreset % [\v!middle\v!left] % [\c!location=\v!right,\c!voffset=.5\layerheight] % \definelayerpreset % [\v!middle\v!right] % [\c!location=\v!left,\c!hoffset=\layerwidth,\c!voffset=.5\layerheight] \definelayerpreset [\v!middle\v!top] [\c!location=\v!bottom,\c!corner=\v!top,\c!dx=.5\layerwidth] \definelayerpreset [\v!middle\v!bottom] [\c!location=\v!top,\c!corner=\v!bottom,\c!dx=.5\layerwidth] \definelayerpreset [\v!middle\v!left] [\c!location=\v!right,\c!corner=\v!left,\c!dy=.5\layerheight] \definelayerpreset [\v!middle\v!right] [\c!location=\v!left,\c!corner=\v!right,\c!dy=.5\layerheight] \def\alignedbox {\dodoubleempty\doalignedbox[]} % \def\doalignedbox[#1][#2]% % {\bgroup % %\let\iftraceboxplacement\iftracelayers % ugly % \dowithnextbox % {\let\next\middlebox % \processaction % [#2] % [ t=>\let\next\topbox , b=>\let\next\bottombox , % l=>\let\next\leftbox , r=>\let\next\rightbox , % bl=>\let\next\bottomleftbox,br=>\let\next\bottomrightbox, % tl=>\let\next\topleftbox ,tr=>\let\next\toprightbox , % lt=>\let\next\lefttopbox ,lb=>\let\next\leftbottombox , % rt=>\let\next\righttopbox ,rb=>\let\next\rightbottombox]% % \next{\flushnextbox}% % \egroup}#1} \def\doalignedbox[#1][#2]% {\bgroup %\let\iftraceboxplacement\iftracelayers % ugly \dowithnextbox {\serializecommalist[#2]% \executeifdefined{\??ab\??ab\serializedcommalist}\middlebox{\flushnextbox}% \egroup}#1} \setvalue{\??ab\??ab }{\middlebox} \setvalue{\??ab\??ab\v!middle }{\middlebox} \setvalue{\??ab\??ab\v!left }{\leftbox } \setvalue{\??ab\??ab\v!right }{\rightbox } \setvalue{\??ab\??ab\v!bottom }{\bottombox} \setvalue{\??ab\??ab\v!top }{\topbox } \setvalue{\??ab\??ab\v!middle\v!middle}{\middlebox} \setvalue{\??ab\??ab\v!left \v!top }{\lefttopbox} \setvalue{\??ab\??ab\v!left \v!bottom}{\leftbottombox} \setvalue{\??ab\??ab\v!right \v!top }{\righttopbox} \setvalue{\??ab\??ab\v!right \v!bottom}{\rightbottombox} \setvalue{\??ab\??ab\v!top \v!left }{\topleftbox} \setvalue{\??ab\??ab\v!bottom\v!left }{\bottomleftbox} \setvalue{\??ab\??ab\v!top \v!right }{\toprightbox} \setvalue{\??ab\??ab\v!bottom\v!right }{\bottomrightbox} \setvalue{\??ab\??ab c}{\middlebox} \setvalue{\??ab\??ab l}{\leftbox} \setvalue{\??ab\??ab r}{\rightbox} \setvalue{\??ab\??ab b}{\bottombox} \setvalue{\??ab\??ab t}{\topbox} \setvalue{\??ab\??ab lt}{\lefttopbox} \setvalue{\??ab\??ab lb}{\leftbottombox} \setvalue{\??ab\??ab rt}{\righttopbox} \setvalue{\??ab\??ab rb}{\rightbottombox} \setvalue{\??ab\??ab tl}{\topleftbox} \setvalue{\??ab\??ab bl}{\bottomleftbox} \setvalue{\??ab\??ab tr}{\toprightbox} \setvalue{\??ab\??ab br}{\bottomrightbox} \setvalue{\??ab\??ab m}{\middlebox} % The next ones were desparately needed by Vit Zyka (see % \type {supp-box} for definitions). \setvalue{\??ab\??ab g}{\baselinemiddlebox} \setvalue{\??ab\??ab gl}{\baselineleftbox} \setvalue{\??ab\??ab gc}{\baselinemiddlebox} \setvalue{\??ab\??ab gr}{\baselinerightbox} \setvalue{\??ab\??ab \v!line }{\baselinemiddlebox} % \v!grid is taken \setvalue{\??ab\??ab \v!line\v!left }{\baselineleftbox} \setvalue{\??ab\??ab \v!line\v!middle}{\baselinemiddlebox} \setvalue{\??ab\??ab \v!line\v!right }{\baselinerightbox} \unexpanded\def\offsetbox {\dodoubleempty\dooffsetbox[]} % left/right/top/bottomoffset -> dimensions change % x/y | method=fixed -> dimensions don't change \def\dooffsetbox[#1][#2]% {\bgroup \dowithnextbox {\getparameters[\??ox] [\c!x=\zeropoint, \c!y=\zeropoint, \c!width=\nextboxwd, \c!height=\nextboxht, \c!depth=\nextboxdp, \c!location=, \c!leftoffset=\zeropoint, \c!rightoffset=\zeropoint, \c!topoffset=\zeropoint, \c!bottomoffset=\zeropoint, \c!method=, #2]% \donefalse \ifdim\@@oxleftoffset =\zeropoint\else\donetrue\fi \ifdim\@@oxrightoffset=\zeropoint\else\donetrue\fi \ifdim\@@oxtopoffset =\zeropoint\else\donetrue\fi \ifdim\@@oxbottomoffset =\zeropoint\else\donetrue\fi \ifdone \doif\@@oxmethod\v!fixed % new {\ifdim\@@oxleftoffset=\zeropoint \ifdim\@@oxrightoffset=\zeropoint \else \scratchdimen-\@@oxrightoffset \edef\@@oxx{\the\scratchdimen}% \let\@@oxrightoffset\zeropoint \fi \else \let\@@oxx\@@oxleftoffset \let\@@oxleftoffset\zeropoint \fi \ifdim\@@oxtopoffset=\zeropoint \ifdim\@@oxbottomoffset=\zeropoint \else \scratchdimen-\@@oxbottomoffset \edef\@@oxy{\the\scratchdimen}% \let\@@oxbottomoffset\zeropoint \fi \else \let\@@oxy\@@oxtopoffset \let\@@oxtopoffset\zeropoint \fi \donefalse}% \fi \ifdone \setbox\nextbox\vbox {\forgetall\offinterlineskip \vskip\@@oxtopoffset \hbox {\hskip\@@oxleftoffset \flushnextbox \hskip\@@oxrightoffset}% \vskip\@@oxbottomoffset}% \scratchdimen\nextboxht \advance\scratchdimen\nextboxdp \nextboxht\scratchdimen \nextboxdp\zeropoint \fi \freezedimenmacro\@@oxwidth \freezedimenmacro\@@oxheight \freezedimenmacro\@@oxdepth \setbox\nextbox\hbox {\hskip\@@oxx\lower\@@oxy\hbox {\doifelsenothing\@@oxlocation {\flushnextbox} {\alignedbox[\@@oxlocation]\hbox{\flushnextbox}}}}% \nextboxwd\@@oxwidth \nextboxht\@@oxheight \nextboxdp\@@oxdepth \flushnextbox \egroup}#1} % \useMPlibrary[pre] \setupbackgrounds[page][background=pagegrid] % % \placefigure[left,none]{}{\offset[leftoffset=1cm]{\externalfigure[koe][breedte=3cm]}} % \input tufte % \placefigure[left,none]{}{\offset[rightoffset=1cm]{\externalfigure[koe][breedte=3cm]}} % \input tufte % \placefigure[left,none]{}{\offset[topoffset=1cm]{\externalfigure[koe][breedte=3cm]}} % \input tufte % \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[koe][breedte=3cm]}} % \input tufte \unexpanded\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no \unexpanded\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no %\ruledhbox{\offsetbox[x=-1cm,y=-1cm,location=c] % {\framed[width=4cm,height=4cm]{x}}} \def\dotabbed#1#2#3#4% {\dontleavehmode \bgroup \setbox\scratchbox\hbox{#3}% \hbox to \wd\scratchbox{#1#4#2}% \egroup} \unexpanded\def\ltabbed{\dotabbed\relax\hss} \unexpanded\def\rtabbed{\dotabbed\hss \relax} \unexpanded\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed % \ltabbed{\romeins{3}}{\romeins{1}} test \endgraf % \ltabbed{\romeins{3}}{\romeins{2}} test \endgraf % \ltabbed{\romeins{3}}{\romeins{3}} test \endgraf % % \rtabbed{\romeins{3}}{\romeins{1}} test \endgraf % \rtabbed{\romeins{3}}{\romeins{2}} test \endgraf % \rtabbed{\romeins{3}}{\romeins{3}} test \endgraf % % \ctabbed{\romeins{3}}{\romeins{1}} test \endgraf % \ctabbed{\romeins{3}}{\romeins{2}} test \endgraf % \ctabbed{\romeins{3}}{\romeins{3}} test \endgraf % alternative, if done, then other name % % \def\dotabbed#1#2#3#4% % {\dontleavehmode % \bgroup % \scratchdimen\zeropoint % \def\docommand##1% % {\setbox\scratchbox\hbox{##1}% % \ifdim\wd\scratchbox>\scratchdimen % \scratchdimen\wd\scratchbox % \fi}% % \processcommalist[#3]\docommand % \hbox to \scratchdimen{#1#4#2}% % \egroup} % % \def\ltabbed{\dotabbed\relax\hss} % \def\rtabbed{\dotabbed\hss \relax} % \def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed % % \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf % \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf % \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf % % \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf % \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf % \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf % % \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf % \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf % \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf % to be documented \unexpanded\def\phantombox[#1]% {\hbox\bgroup \getparameters [\??ol] [\c!width=\zeropoint,% \c!height=\zeropoint,% \c!depth=\zeropoint,#1]% \setbox\scratchbox\null \wd\scratchbox\@@olwidth \ht\scratchbox\@@olheight \dp\scratchbox\@@oldepth \box\scratchbox \egroup} % \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]} \unexpanded\def\backgroundimage#1#2#3% repeat hsize vsize {\bgroup \forgetall \dowithnextbox {\offinterlineskip \ifcase#1\relax % just one \else \scratchdimen#2\divide\scratchdimen\nextboxwd\count0\scratchdimen\advance\count0\plusone \scratchdimen#3\divide\scratchdimen\nextboxht\count2\scratchdimen\advance\count2\plusone % to be considered, probably methods \ifcase#1\or % x and y \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}% \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}% \or % x \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}% \or % y \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}% \fi \fi \ifdim\nextboxwd>#2\relax \setbox\nextbox\hbox to #2{\hss\flushnextbox\hss}% \setbox\nextbox\hbox{\expanded{\clip[\c!width=#2,\c!height=\the\nextboxht]{\flushnextbox}}}% \fi \ifdim\nextboxht>#3\relax \setbox\nextbox\vbox to #3{\vss\flushnextbox\vss}% \setbox\nextbox\hbox{\expanded{\clip[\c!width=\the\nextboxwd,\c!height=#3]{\flushnextbox}}}% \fi \flushnextbox \egroup}% \hbox} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-bwc.lua0000644000175000017500000000207512130411274024111 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-bwc'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- backward compatibility if not tex.wd then local box = tex.box local wd = { } setmetatable(wd, { __index = function(t,k) local bk = box[k] return bk and bk.width or 0 end, __newindex = function(t,k,v) local bk = box[k] if bk then bk.width = v end end, } ) local ht = { } setmetatable(ht, { __index = function(t,k) local bk = box[k] return bk and bk.height or 0 end, __newindex = function(t,k,v) local bk = box[k] if bk then bk.height = v end end, } ) local dp = { } setmetatable(dp, { __index = function(t,k) local bk = box[k] return bk and bk.depth or 0 end, __newindex = function(t,k,v) local bk = box[k] if bk then bk.depth = v end end, } ) -- tex.wd, tex.ht, tex.dp = wd, ht, dp end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-num.mkiv0000644000175000017500000010065112134352503024332 0ustar norbertnorbert%D \module %D [ file=strc-num, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Basic Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Basic Numbering} \registerctxluafile{strc-num}{1.001} \unprotect % work in progress % to be checked: can we use the command handler code here? % all settings will move to lua \installcorenamespace{counter} \installcommandhandler \??counter {counter} \??counter \let\setupstructurecounting\setupcounter \setupcounter [\c!way=\v!by\v!chapter, % \c!blockway=, % \c!prefixstarter=, % \c!prefixstopper=, \c!prefixconnector=., \c!prefixsegments=\autostructureprefixsegments\rootcounterparameter, \c!start=\zerocount, \c!prefix=\v!yes, \c!state=\v!start] \def\autostructureprefixsegments#1% todo: \c!prefixsegments=\v!auto {2:\thenamedheadlevel{\ctxcommand{way("#1\c!way")}}} \appendtoks \resetcounterparameter\s!counter \to \everypresetcounter \appendtoks \ifx\currentcounterparent\empty \edef\p_start{\counterparameter\c!start}% \ctxcommand{definecounter { name = "\currentcounter", start = \ifx\p_start\empty0\else\number\p_start\fi, counter = "\counterparameter\s!counter", method = "\counterparameter\c!method", }}% \letcounterparameter\s!name\currentcounter \else \letcounterparameter\s!name\currentcounterparent \fi \strc_counters_check_setup \to \everydefinecounter \appendtoks \ifx\currentcounter\empty \else \edef\p_start{\counterparameter\c!start}% \setexpandedcounterparameter\c!start{\ifx\p_start\empty0\else\number\p_start\fi}% \strc_counters_check_setup \fi \to \everysetupcounter % % % % \def\strc_counters_way#1% slow, we need to store it at the tex end {\ctxcommand{way("\namedcounterparameter{#1}\c!way")}} % \def\thenamedcounterlevel#1% % {\thenamedheadlevel{\strc_counters_way{#1}}} \def\thenamedcounterlevel#1% {\xthenamedheadlevel{\strc_counters_way{#1}}} % \def\strc_counters_check_setup#1% does it have to happen here? % {% this can be done at the lua end / a bit messy here ... todo ... % \ifcsname\??counter#1\c!number\endcsname % \doifelsevalue {\??counter#1\c!number}{#1} {\letbeundefined{\??counter#1\c!number}}% % {\doifvaluenothing{\??counter#1\c!number} {\letbeundefined{\??counter#1\c!number}}}% % \fi % \ifcsname\??counter#1\c!number\endcsname % % it's a clone % \else % \edef\currentcounterlevel{\thenamedcounterlevel{#1}}% % \edef\p_start{\counterparameter{#1}\c!start}% % \ctxcommand{checkcountersetup("#1",\currentcounterlevel,\ifx\p_start\empty0\else\number\p_start\fi,"\counterparameter{#1}\c!state")}% % \fi} \def\strc_counters_check_setup {\edef\p_name{\directcounterparameter\s!name}% \ifx\currentcounter\p_name \edef\currentcounterlevel{\thenamedcounterlevel\currentcounter}% \edef\p_start{\counterparameter\c!start}% \ctxcommand{checkcountersetup("\currentcounter",\currentcounterlevel,\ifx\p_start\empty0\else\number\p_start\fi,"\counterparameter\c!state")}% \fi} \unexpanded\def\doifcounterelse #1{\ctxcommand{doifelsecounter("\namedcounterparameter{#1}\s!name")}} \unexpanded\def\doifcounter #1{\ctxcommand{doifcounter ("\namedcounterparameter{#1}\s!name")}} \unexpanded\def\doifnotcounter #1{\ctxcommand{doifnotcounter ("\namedcounterparameter{#1}\s!name")}} \unexpanded\def\setcounter {\dotripleempty \strc_counters_set_interfaced} \unexpanded\def\setcounterown {\dotripleempty \strc_counters_setown_interfaced} \unexpanded\def\restartcounter {\dotripleempty \strc_counters_restart_interfaced} \unexpanded\def\resetcounter {\dodoubleempty \strc_counters_reset_interfaced} \unexpanded\def\incrementcounter {\dodoubleempty \strc_counters_increment_interfaced} \unexpanded\def\decrementcounter {\dodoubleempty \strc_counters_decrement_interfaced} \unexpanded\def\rawcounter {\dodoubleargument\strc_counters_raw_interfaced} \unexpanded\def\lastcounter {\dodoubleargument\strc_counters_last_interfaced} \unexpanded\def\firstcounter {\dodoubleargument\strc_counters_first_interfaced} \unexpanded\def\nextcounter {\dodoubleargument\strc_counters_next_interfaced} \unexpanded\def\prevcounter {\dodoubleargument\strc_counters_prev_interfaced} \unexpanded\def\countersubs {\dodoubleargument\strc_counters_subs_interfaced} \unexpanded\def\savecounter {\dodoubleempty \strc_counters_save_interfaced} \unexpanded\def\restorecounter {\dodoubleempty \strc_counters_restore_interfaced} \def\strc_counters_set_interfaced {\ifthirdargument \singleexpandafter\strc_counters_set_two \else\ifsecondargument \doubleexpandafter\strc_counters_set_one \else \doubleexpandafter\gobblethreeoptionals \fi\fi} \def\strc_counters_setown_interfaced {\ifthirdargument \singleexpandafter\strc_counters_setown_two \else\ifsecondargument \doubleexpandafter\strc_counters_setown_one \else \doubleexpandafter\gobblethreeoptionals \fi\fi} \def\strc_counters_restart_interfaced {\ifthirdargument \singleexpandafter\strc_counters_restart_two \else\ifsecondargument \doubleexpandafter\strc_counters_restart_one \else \doubleexpandafter\gobblethreeoptionals \fi\fi} \def\strc_counters_reset_interfaced {\ifsecondargument \singleexpandafter\strc_counters_reset_two \else\iffirstargument \doubleexpandafter\strc_counters_reset_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_increment_interfaced {\ifsecondargument \singleexpandafter\strc_counters_increment_two \else\iffirstargument \doubleexpandafter\strc_counters_increment_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_decrement_interfaced {\ifsecondargument \singleexpandafter\strc_counters_decrement_two \else\iffirstargument \doubleexpandafter\strc_counters_decrement_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_raw_interfaced {\ifsecondargument \singleexpandafter\strc_counters_raw_two \else\iffirstargument \doubleexpandafter\strc_counters_raw_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_last_interfaced {\ifsecondargument \singleexpandafter\strc_counters_last_two \else\iffirstargument \doubleexpandafter\strc_counters_last_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_first_interfaced {\ifsecondargument \singleexpandafter\strc_counters_first_two \else\iffirstargument \doubleexpandafter\strc_counters_first_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_prev_interfaced {\ifsecondargument \singleexpandafter\strc_counters_prev_two \else\iffirstargument \doubleexpandafter\strc_counters_prev_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_next_interfaced {\ifsecondargument \singleexpandafter\strc_counters_next_two \else\iffirstargument \doubleexpandafter\strc_counters_next_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_subs_interfaced {\ifsecondargument \singleexpandafter\strc_counters_subs_two \else\iffirstargument \doubleexpandafter\strc_counters_subs_one \else \doubleexpandafter\gobbletwooptionals \fi\fi} \def\strc_counters_save_interfaced {\iffirstargument \expandafter\strc_counters_save_one \else \expandafter\gobbleoneoptional \fi} \def\strc_counters_restore_interfaced {\iffirstargument \expandafter\strc_counters_restore_one \else \expandafter\gobbleoneoptional \fi} \def\strc_counters_set_two [#1][#2][#3]{\strc_counters_set_sub {#1}{#2}{#3}} \def\strc_counters_setown_two [#1][#2][#3]{\strc_counters_setown_sub {#1}{#2}{#3}} \def\strc_counters_restart_two [#1][#2][#3]{\strc_counters_restart_sub {#1}{#2}{#3}} \def\strc_counters_reset_two [#1][#2]{\strc_counters_reset_sub {#1}{#2}} \def\strc_counters_increment_two [#1][#2]{\strc_counters_increment_sub{#1}{#2}} \def\strc_counters_decrement_two [#1][#2]{\strc_counters_decrement_sub{#1}{#2}} \def\strc_counters_raw_two [#1][#2]{\strc_counters_raw_sub {#1}{#2}} \def\strc_counters_last_two [#1][#2]{\strc_counters_last_sub {#1}{#2}} \def\strc_counters_first_two [#1][#2]{\strc_counters_first_sub {#1}{#2}} \def\strc_counters_next_two [#1][#2]{\strc_counters_next_sub {#1}{#2}} \def\strc_counters_prev_two [#1][#2]{\strc_counters_prev_sub {#1}{#2}} \def\strc_counters_subs_two [#1][#2]{\strc_counters_subs_sub {#1}{#2}} \def\strc_counters_set_one [#1][#2][#3]{\strc_counters_set_sub {#1}\plusone{#2}} \def\strc_counters_setown_one [#1][#2][#3]{\strc_counters_setown_sub {#1}\plusone{#2}} \def\strc_counters_restart_one [#1][#2][#3]{\strc_counters_restart_sub {#1}\plusone{#2}} \def\strc_counters_reset_one [#1][#2]{\strc_counters_reset_sub {#1}\plusone} \def\strc_counters_increment_one [#1][#2]{\strc_counters_increment_sub{#1}\plusone} \def\strc_counters_decrement_one [#1][#2]{\strc_counters_decrement_sub{#1}\plusone} \def\strc_counters_raw_one [#1][#2]{\strc_counters_raw_sub {#1}\plusone} \def\strc_counters_last_one [#1][#2]{\strc_counters_last_sub {#1}\plusone} \def\strc_counters_first_one [#1][#2]{\strc_counters_first_sub {#1}\plusone} \def\strc_counters_next_one [#1][#2]{\strc_counters_next_sub {#1}\plusone} \def\strc_counters_prev_one [#1][#2]{\strc_counters_prev_sub {#1}\plusone} \def\strc_counters_subs_one [#1][#2]{\strc_counters_subs_sub {#1}\plusone} \def\strc_counters_save_one [#1]{\strc_counters_save {#1}} \def\strc_counters_restore_one [#1]{\strc_counters_restore {#1}} \unexpanded\def\strc_counters_set #1#2{\strc_counters_set_sub {#1}\plusone{#2}} \unexpanded\def\strc_counters_setown #1#2{\strc_counters_setown_sub {#1}\plusone{#2}} \unexpanded\def\strc_counters_restart #1#2{\strc_counters_restart_sub {#1}\plusone{#2}} \unexpanded\def\strc_counters_reset #1{\strc_counters_reset_sub {#1}\plusone} \unexpanded\def\strc_counters_increment #1{\strc_counters_increment_sub{#1}\plusone} \unexpanded\def\strc_counters_decrement #1{\strc_counters_decrement_sub{#1}\plusone} \def\strc_counters_raw #1{\strc_counters_raw_sub {#1}\plusone} \def\strc_counters_last #1{\strc_counters_last_sub {#1}\plusone} \def\strc_counters_first #1{\strc_counters_first_sub {#1}\plusone} \def\strc_counters_next #1{\strc_counters_next_sub {#1}\plusone} \def\strc_counters_prev #1{\strc_counters_prev_sub {#1}\plusone} \def\strc_counters_subs #1{\strc_counters_subs_sub {#1}\plusone} \unexpanded\def\strc_counters_set_sub #1#2#3{\ctxcommand{setcounter ("\namedcounterparameter{#1}\s!name",\number#2,\number#3)}} \unexpanded\def\strc_counters_setown_sub #1#2#3{\ctxcommand{setowncounter ("\namedcounterparameter{#1}\s!name",\number#2,"#3")}} \unexpanded\def\strc_counters_restart_sub #1#2#3{\ctxcommand{restartcounter("\namedcounterparameter{#1}\s!name",\number#2,\number#3)}} \unexpanded\def\strc_counters_reset_sub #1#2{\ctxcommand{resetcounter ("\namedcounterparameter{#1}\s!name",\number#2)}} \unexpanded\def\strc_counters_increment_sub #1#2{\ctxcommand{addcounter ("\namedcounterparameter{#1}\s!name",\number#2,1)}} \unexpanded\def\strc_counters_decrement_sub #1#2{\ctxcommand{addcounter ("\namedcounterparameter{#1}\s!name",\number#2,-1)}} \def\strc_counters_raw_sub #1#2{\ctxcommand{countervalue ("\namedcounterparameter{#1}\s!name",\number#2)}} % maybe raw \def\strc_counters_last_sub #1#2{\ctxcommand{lastcountervalue ("\namedcounterparameter{#1}\s!name",\number#2)}} \def\strc_counters_first_sub #1#2{\ctxcommand{firstcountervalue ("\namedcounterparameter{#1}\s!name",\number#2)}} \def\strc_counters_next_sub #1#2{\ctxcommand{nextcountervalue ("\namedcounterparameter{#1}\s!name",\number#2)}} \def\strc_counters_prev_sub #1#2{\ctxcommand{previouscountervalue("\namedcounterparameter{#1}\s!name",\number#2)}} \def\strc_counters_subs_sub #1#2{\ctxcommand{subcountervalues ("\namedcounterparameter{#1}\s!name",\number#2)}} \unexpanded\def\strc_counters_save #1{\ctxcommand{savecounter ("\namedcounterparameter{#1}\s!name")}} \unexpanded\def\strc_counters_restore #1{\ctxcommand{restorecounter("\namedcounterparameter{#1}\s!name")}} \unexpanded\def\strc_counters_incremented #1{\ctxcommand{incrementedcounter("\namedcounterparameter{#1}\s!name",1, 1)}} \unexpanded\def\strc_counters_decremented #1{\ctxcommand{incrementedcounter("\namedcounterparameter{#1}\s!name",1,-1)}} \unexpanded\def\showcounter [#1]{\ctxcommand{tracecounter("\namedcounterparameter{#1}\s!name")}} \unexpanded\def\incrementedcounter [#1]{\strc_counters_incremented{#1}} % expandable, no \dosingleargument \unexpanded\def\decrementedcounter [#1]{\strc_counters_decremented{#1}} % expandable, no \dosingleargument % public variants ... beware, for old cases, from now on the value variants are the % ones that are expandable \def\rawcountervalue [#1]{\strc_counters_raw_sub {#1}\plusone} \def\lastcountervalue [#1]{\strc_counters_last_sub {#1}\plusone} \def\firstcountervalue[#1]{\strc_counters_first_sub{#1}\plusone} \def\nextcountervalue [#1]{\strc_counters_next_sub {#1}\plusone} \def\prevcountervalue [#1]{\strc_counters_prev_sub {#1}\plusone} \let\rawsubcountervalue \strc_counters_raw_two \let\lastsubcountervalue \strc_counters_last_two \let\firstsubcountervalue\strc_counters_first_two \let\nextsubcountervalue \strc_counters_next_two \let\prevsubcountervalue \strc_counters_prev_two % The bypage check needs a multipass reference and therefore we only check for it when we increment % and know that some content will be placed. We could also check for spreads. \unexpanded\def\strc_counters_increment_sub#1#2% {% this will be combined into one lua call \edef\m_strc_counters_way{\strc_counters_way{#1}}% \ifx\m_strc_counters_way\v!page \checkpagechange{#1}% \ifpagechanged \strc_counters_reset{#1}% \fi \fi \ctxcommand{addcounter("\namedcounterparameter{#1}\s!name",\number#2,1)}} \unexpanded\def\convertedcounter {\dodoubleempty\strc_counters_converted} \def\strc_counters_converted[#1][#2]% {\begingroup \edef\currentcounter{#1}% \ifsecondargument\setupcurrentcounter[#2]\fi \ctxlua{structures.sections.prefixedconverted( "\counterparameter\s!name", { prefix = "\counterparameter\c!prefix", separatorset = "\counterparameter\c!prefixseparatorset", conversion = "\counterparameter\c!prefixconversion", conversionset = "\counterparameter\c!prefixconversionset", starter = \!!bs\counterparameter\c!prefixstarter\!!es, stopper = \!!bs\counterparameter\c!prefixstopper\!!es, set = "\counterparameter\c!prefixset", segments = "\counterparameter\c!prefixsegments", connector = \!!bs\counterparameter\c!prefixconnector\!!es, }, { order = "\counterparameter\c!numberorder", separatorset = "\counterparameter\c!numberseparatorset", conversion = \!!bs\counterparameter\c!numberconversion\!!es, conversionset = "\counterparameter\c!numberconversionset", starter = \!!bs\counterparameter\c!numberstarter\!!es, stopper = \!!bs\counterparameter\c!numberstopper\!!es, segments = "\counterparameter\c!numbersegments", type = "\counterparameter\c!type", criterium = "\counterparameter\c!criterium", % might change if we also want this with sectioning } )}% \endgroup} \def\directconvertedcounter#1#2% name, type {\ctxlua{structures.sections.prefixedconverted( "\namedcounterparameter{#1}\s!name", { prefix = "\namedcounterparameter{#1}\c!prefix", separatorset = "\namedcounterparameter{#1}\c!prefixseparatorset", conversion = "\namedcounterparameter{#1}\c!prefixconversion", conversionset = "\namedcounterparameter{#1}\c!prefixconversionset", % starter = \!!bs\namedcounterparameter{#1}\c!prefixstarter\!!es, % stopper = \!!bs\namedcounterparameter{#1}\c!prefixstopper\!!es, set = "\namedcounterparameter{#1}\c!prefixset", segments = "\namedcounterparameter{#1}\c!prefixsegments", connector = \!!bs\namedcounterparameter{#1}\c!prefixconnector\!!es, }, { order = "\namedcounterparameter{#1}\c!numberorder", separatorset = "\namedcounterparameter{#1}\c!numberseparatorset", conversion = \!!bs\namedcounterparameter{#1}\c!numberconversion\!!es, conversionset = "\namedcounterparameter{#1}\c!numberconversionset", starter = \!!bs\namedcounterparameter{#1}\c!numberstarter\!!es, stopper = \!!bs\namedcounterparameter{#1}\c!numberstopper\!!es, segments = "\namedcounterparameter{#1}\c!numbersegments", type = "#2", } )}} \unexpanded\def\convertedsubcounter {\dotripleempty\strc_counters_converted_sub} \def\strc_counters_converted_sub[#1][#2][#3]% #2 can be n or n:m {\ifsecondargument \strc_counters_converted[#1][\c!numbersegments=#2,#3]% \else \secondargumentfalse\strc_counters_converted[#1][]% \fi} % \unexpanded\def\doifdefinedcounter#1% % {\ifcsname\namedcounterhash{#1}\s!name\endcsname % \expandafter\firstofoneargument % \else % \expandafter\gobbleoneargument % \fi} % % \unexpanded\def\doifundefinedcounter#1% % {\ifcsname\namedcounterhash{#1}\s!name\endcsname % \expandafter\gobbleoneargument % \else % \expandafter\firstofoneargument % \fi} % % \unexpanded\def\doifdefinedcounterelse#1% % {\ifcsname\namedcounterhash{#1}\s!name\endcsname % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} \unexpanded\def\doifdefinedcounter {\doifcommandhandler \??counter} \unexpanded\def\doifundefinedcounter {\doifnotcommandhandler \??counter} \unexpanded\def\doifdefinedcounterelse{\doifelsecommandhandler\??counter} %D What follows is a compatibility layer. \let \numberparameter \namedcounterparameter % {name}\c!key \let \definenumber \definecounter % [name] \let \setupnumber \setupcounter % [name][setups] \let \setnumber \setcounter % [name]{value} \let \resetnumber \resetcounter % [name] \let \savenumber \savecounter % [name] \let \restorenumber \restorecounter % [name] \let \incrementnumber \incrementcounter % [name] \let \decrementnumber \decrementcounter % [name] \let \rawnumber \rawcounter % [name] \let \getnumber \convertedcounter % [name] \let \convertednumber \convertedcounter % [name] \let \doifdefinednumber \doifdefinedcounter % {number}{true} \let \doifundefinednumber \doifnotdefinedcounter % {number}{true} \let \doifdefinednumberelse \doifdefinedcounterelse % {number}{true}{false} \let \setupnumbering \setupcounter %D Helpers: % call: % % \strc_counters_register_component % \currentfloat % \getfloatparameters \floatparameter \detokenizedfloatparameter % \hascaption \hastitle \hasnumber % [settings][userdata] % % sets: % % \m_strc_counters_last_registered_index % \m_strc_counters_last_registered_attribute % \m_strc_counters_last_registered_synchronize % currentstructurecomponent => \strc_current_ or just \m_strc_ \unexpanded\def\strc_counters_register_component#1#2#3#4#5#6#7[#8][#9]% maybe also nolist {\begingroup % #2[\s!haslevel=1,#8]% \edef\p_haslevel {#3\s!haslevel}% \edef\p_hascaption{#3\s!hascaption}% \edef\p_hastitle {#3\s!hastitle}% \edef\p_hasnumber {#3\s!hasnumber}% % \edef\p_prefixsegments{#3\c!prefixsegments}% \ifx\p_prefixsegments\v!auto \edef\p_prefixsegments{\autostructureprefixsegments#3}% \fi % \edef\currentname{#3\s!name}% \ifx\currentname\empty \edef\currentname{#1}% \fi \edef\currentcounter{#3\s!counter}% \ifx\currentcounter\empty \let\currentcounter\currentname \fi % \ifx\p_hascaption\v!yes \xdef\currentstructurecomponentname {#3\s!name}% \xdef\currentstructurecomponentlevel {#3\c!level}% \edef\currentstructurecomponentexpansion {#3\c!expansion}% \xdef\currentstructurecomponentxmlsetup {#3\c!xmlsetup}% \xdef\currentstructurecomponentcatcodes {#3\s!catcodes}% \xdef\currentstructurecomponentlabel {#3\c!label}% \xdef\currentstructurecomponentreference {#3\c!reference}% \xdef\currentstructurecomponentreferenceprefix{#3\c!referenceprefix}% \ifx\currentstructurecomponentexpansion\s!xml \xmlstartraw \xdef\currentstructurecomponenttitle {#3\c!title}% \xdef\currentstructurecomponentbookmark{#3\c!bookmark}% \xdef\currentstructurecomponentmarking {#3\c!marking}% \xdef\currentstructurecomponentlist {#3\c!list}% \xmlstopraw \ifx\currentstructurecomponentlist\empty \globallet\currentstructurecomponentlist\currentstructurecomponenttitle \fi \globallet\currentstructurecomponentcoding\s!xml \else \ifx\currentstructurecomponentexpansion\v!yes \xdef\currentstructurecomponenttitle {#3\c!title}% \xdef\currentstructurecomponentbookmark{#3\c!bookmark}% \xdef\currentstructurecomponentmarking {#3\c!marking}% \xdef\currentstructurecomponentlist {#3\c!list}% \else \xdef\currentstructurecomponenttitle {#4\c!title}% \xdef\currentstructurecomponentbookmark{#4\c!bookmark}% \xdef\currentstructurecomponentmarking {#4\c!marking}% \xdef\currentstructurecomponentlist {#4\c!list}% \iflocation \ifx\currentstructurecomponentbookmark\empty \begingroup \simplifycommands \xdef\currentstructurecomponentbookmark{\detokenize\expandafter{\normalexpanded{#3\c!title}}}% \endgroup \fi \fi \fi \ifx\currentstructurecomponentlist\empty \globallet\currentstructurecomponentlist\currentstructurecomponenttitle \fi \globallet\currentstructurecomponentcoding\s!tex \fi % \setnextinternalreference \xdef\m_strc_counters_last_registered_index{\ctxcommand{addtolist{ metadata = { kind = "#1", name = "\currentname", level = structures.sections.currentlevel(), catcodes = \the\ifx\currentstructurecomponentcatcodes\empty\catcodetable\else\csname\currentstructurecomponentcatcodes\endcsname\fi, coding = "\currentstructurecomponentcoding", \ifx\currentstructurecomponentcoding\s!xml xmlroot = "\xmldocument", \fi \ifx\currentstructurecomponentxmlsetup\empty \else xmlsetup = "\currentstructurexmlsetup", \fi }, references = { internal = \nextinternalreference, block = "\currentsectionblock", reference = "\currentstructurecomponentreference", referenceprefix = "\currentstructurecomponentreferenceprefix", section = structures.sections.currentid(), }, titledata = { label = \!!bs\detokenize\expandafter{\currentstructurecomponentlabel }\!!es, title = \!!bs\detokenize\expandafter{\currentstructurecomponenttitle }\!!es, \ifx\currentstructurecomponentbookmark\currentstructurecomponenttitle \else bookmark = \!!bs\detokenize\expandafter{\currentstructurecomponentbookmark }\!!es, \fi \ifx\currentstructurecomponentmarking\currentstructurecomponenttitle \else marking = \!!bs\detokenize\expandafter{\currentstructurecomponentmarking }\!!es, \fi \ifx\currentstructurecomponentlist\currentstructurecomponenttitle \else list = \!!bs\detokenize\expandafter{\currentstructurecomponentlist}\!!es, \fi }, \ifx\p_hasnumber\v!yes prefixdata = { prefix = "#3\c!prefix", separatorset = "#3\c!prefixseparatorset", conversion = \!!bs#3\c!prefixconversion\!!es, conversionset = "#3\c!prefixconversionset", set = "#3\c!prefixset", % segments = "#3\c!prefixsegments", segments = "\p_prefixsegments", connector = \!!bs#3\c!prefixconnector\!!es, }, numberdata = { % more helpers here, like compact elsewhere numbers = structures.counters.compact("\currentcounter",nil,true), group = "#3\c!group", groupsuffix = \!!bs#3\c!groupsuffix\!!es, counter = "\currentcounter", separatorset = "#3\c!numberseparatorset", conversion = \!!bs#3\c!numberconversion\!!es, conversionset = "#3\c!numberconversionset", starter = \!!bs#3\c!numberstarter\!!es, stopper = \!!bs#3\c!numberstopper\!!es, segments = "#3\c!numbersegments", }, \fi userdata = \!!bs\detokenize{#9}\!!es % will be converted to table at the lua end } }}% \xdef\m_strc_counters_last_registered_attribute {\ctxcommand {setinternalreference(nil,nil,\nextinternalreference)}}% \xdef\m_strc_counters_last_registered_synchronize{\ctxlatecommand{enhancelist(\m_strc_counters_last_registered_index)}}% \else \glet\m_strc_counters_last_registered_index \relax \glet\m_strc_counters_last_registered_attribute \attributeunsetvalue \glet\m_strc_counters_last_registered_synchronize\relax \fi \endgroup} \let\m_strc_counters_last_registered_index \relax \let\m_strc_counters_last_registered_attribute \relax \let\m_strc_counters_last_registered_synchronize\relax % This can be improved as we don't need to pas all these variables % each time (we can set them up once). \unexpanded\def\strc_counter_preset_using_parameter#1#2% \setupcommand \someparameter {#1% [\c!way =#2\c!way, \c!prefix =#2\c!prefix, \c!prefixseparatorset =#2\c!prefixseparatorset, \c!prefixconversion =#2\c!prefixconversion, \c!prefixconversionset=#2\c!prefixconversionset, \c!prefixstarter =#2\c!prefixstarter, \c!prefixstopper =#2\c!prefixstopper, \c!prefixsegments =#2\c!prefixsegments, \c!prefixset =#2\c!prefixset, \c!prefixconnector =#2\c!prefixconnector, \c!numberseparatorset =#2\c!numberseparatorset, \c!numberconversion =#2\c!numberconversion, \c!numberconversionset=#2\c!numberconversionset, \c!numberstarter =#2\c!numberstarter, \c!numberstopper =#2\c!numberstopper, \c!numbersegments =#2\c!numbersegments]} % \unexpanded\def\strc_counter_setup_using_parameter#1#2% name \someparameter % {\setupcounter % [#1] % [ \c!start=#2\c!start, % \c!state=#2\c!state, % beware, "" == start % \c!way=#2\c!way, % % % \c!prefix=#2\c!prefix, % \c!prefixseparatorset=#2\c!prefixseparatorset, % \c!prefixconversion=#2\c!prefixconversion, % \c!prefixconversionset=#2\c!prefixconversionset, % \c!prefixstarter=#2\c!prefixstarter, % \c!prefixstopper=#2\c!prefixstopper, % \c!prefixset=#2\c!prefixset, % \c!prefixsegments=#2\c!prefixsegments, % \c!prefixset=#2\c!prefixset, % \c!prefixconnector=#2\c!prefixconnector, % % % \c!numberseparatorset=#2\c!numberseparatorset, % \c!numberconversion=#2\c!numberconversion, % \c!numberconversionset=#2\c!numberconversionset, % \c!numberstarter=#2\c!numberstarter, % \c!numberstopper=#2\c!numberstopper, % \c!numbersegments=#2\c!numbersegments]} \unexpanded\def\strc_counter_setup_using_parameter#1#2% name \someparameter {\edef\currentcounter{#1}% % \setcounterparameter \c!start{#2\c!start}% \setcounterparameter \c!state{#2\c!state}% % beware, "" == start \setcounterparameter \c!way{#2\c!way}% % \setcounterparameter \c!prefix{#2\c!prefix}% \setcounterparameter \c!prefixseparatorset{#2\c!prefixseparatorset}% \setcounterparameter \c!prefixconversion{#2\c!prefixconversion}% \setcounterparameter\c!prefixconversionset{#2\c!prefixconversionset}% \setcounterparameter \c!prefixstarter{#2\c!prefixstarter}% \setcounterparameter \c!prefixstopper{#2\c!prefixstopper}% \setcounterparameter \c!prefixset{#2\c!prefixset}% \setcounterparameter \c!prefixsegments{#2\c!prefixsegments}% \setcounterparameter \c!prefixset{#2\c!prefixset}% \setcounterparameter \c!prefixconnector{#2\c!prefixconnector}% % \setcounterparameter \c!numberseparatorset{#2\c!numberseparatorset}% \setcounterparameter \c!numberconversion{#2\c!numberconversion}% \setcounterparameter\c!numberconversionset{#2\c!numberconversionset}% \setcounterparameter \c!numberstarter{#2\c!numberstarter}% \setcounterparameter \c!numberstopper{#2\c!numberstopper}% \setcounterparameter \c!numbersegments{#2\c!numbersegments}% % \the\everysetupcounter} \unexpanded\def\mult_interfaces_counter_association#1#2#3#4#5#6#7% tag current setup parameter list sync register {\strc_counter_preset_using_parameter#3\rootcounterparameter \newtoks#5% \unexpanded\def #6{\ifx#2\empty\the#5\else\strc_counter_setup_using_parameter#2#4\fi}% sync \unexpanded\def#7##1{\normalexpanded{#5{\the#5\strc_counter_setup_using_parameter{##1}\noexpand#4}}}} % register \unexpanded\def\installcounterassociation#1% => synchronize#1counters register#1counter {\normalexpanded {\mult_interfaces_counter_association {#1}% not \??xx but xx \expandafter\noexpand\csname current#1\endcsname \expandafter\noexpand\csname setup#1\endcsname \expandafter\noexpand\csname #1parameter\endcsname \expandafter\noexpand\csname counter_association_list_#1\endcsname \expandafter\noexpand\csname synchronize#1counters\endcsname \expandafter\noexpand\csname register#1counter\endcsname}} % needs testing: % % \unexpanded\def\strc_counter_setup_push#1#2#3% \someparameter \directsomeparameter \setexpandedsomeparameter % {\let\savedcounterparameter \counterparameter % \let\saveddirectcounterparameter \directcounterparameter % \let\savedsetexpandedcounterparameter\setexpandedcounterparameter % % remap % \let\counterparameter #1% % \let\directcounterparameter #2% % \let\setexpandedcounterparameter #3} % % \unexpanded\def\strc_counter_setup_pop % {\let\counterparameter \savedcounterparameter % \let\directcounterparameter \saveddirectcounterparameter % \let\setexpandedcounterparameter \savedsetexpandedcounterparameter} % % \unexpanded\def\mult_interfaces_counter_association#1#2#3#4#5#6#7% tag current setup parameter list sync register % {\strc_counter_preset_using_parameter#3\rootcounterparameter % \newtoks#5% % \unexpanded\def#6% sync % {\strc_counter_setup_push % \ifx#2\empty % \the#5% % \else % \let\currentcounter\empty % \the\everysetupcounter % \fi % \strc_counter_setup_pop}% % \unexpanded\def#7##1% register % {\normalexpanded{#5{\the#5\edef\noexpand\currentcounter{##1}\noexpand\the\everysetupcounter}}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-prs.lua0000644000175000017500000004264312161703335024165 0ustar norbertnorbertif not modules then modules = { } end modules ['util-prs'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lpeg, table, string = lpeg, table, string local P, R, V, S, C, Ct, Cs, Carg, Cc, Cg, Cf, Cp = lpeg.P, lpeg.R, lpeg.V, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Carg, lpeg.Cc, lpeg.Cg, lpeg.Cf, lpeg.Cp local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local concat, format, gmatch, find = table.concat, string.format, string.gmatch, string.find local tostring, type, next, rawset = tostring, type, next, rawset utilities = utilities or {} local parsers = utilities.parsers or { } utilities.parsers = parsers local patterns = parsers.patterns or { } parsers.patterns = patterns local setmetatableindex = table.setmetatableindex local sortedhash = table.sortedhash -- we share some patterns local digit = R("09") local space = P(' ') local equal = P("=") local comma = P(",") local lbrace = P("{") local rbrace = P("}") local lparent = P("(") local rparent = P(")") local period = S(".") local punctuation = S(".,:;") local spacer = lpegpatterns.spacer local whitespace = lpegpatterns.whitespace local newline = lpegpatterns.newline local anything = lpegpatterns.anything local endofstring = lpegpatterns.endofstring local nobrace = 1 - ( lbrace + rbrace ) local noparent = 1 - ( lparent + rparent) -- we could use a Cf Cg construct local escape, left, right = P("\\"), P('{'), P('}') lpegpatterns.balanced = P { [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0, [2] = left * V(1) * right } local nestedbraces = P { lbrace * (nobrace + V(1))^0 * rbrace } local nestedparents = P { lparent * (noparent + V(1))^0 * rparent } local spaces = space^0 local argument = Cs((lbrace/"") * ((nobrace + nestedbraces)^0) * (rbrace/"")) local content = (1-endofstring)^0 lpegpatterns.nestedbraces = nestedbraces -- no capture lpegpatterns.nestedparents = nestedparents -- no capture lpegpatterns.nested = nestedbraces -- no capture lpegpatterns.argument = argument -- argument after e.g. = lpegpatterns.content = content -- rest after e.g = local value = P(lbrace * C((nobrace + nestedbraces)^0) * rbrace) + C((nestedbraces + (1-comma))^0) local key = C((1-equal-comma)^1) local pattern_a = (space+comma)^0 * (key * equal * value + key * C("")) local pattern_c = (space+comma)^0 * (key * equal * value) local key = C((1-space-equal-comma)^1) local pattern_b = spaces * comma^0 * spaces * (key * ((spaces * equal * spaces * value) + C(""))) -- "a=1, b=2, c=3, d={a{b,c}d}, e=12345, f=xx{a{b,c}d}xx, g={}" : outer {} removes, leading spaces ignored -- todo: rewrite to fold etc -- -- parse = lpeg.Cf(lpeg.Carg(1) * lpeg.Cg(key * equal * value) * separator^0,rawset)^0 -- lpeg.match(parse,"...",1,hash) local hash = { } local function set(key,value) hash[key] = value end local pattern_a_s = (pattern_a/set)^1 local pattern_b_s = (pattern_b/set)^1 local pattern_c_s = (pattern_c/set)^1 patterns.settings_to_hash_a = pattern_a_s patterns.settings_to_hash_b = pattern_b_s patterns.settings_to_hash_c = pattern_c_s function parsers.make_settings_to_hash_pattern(set,how) if type(str) == "table" then return set elseif how == "strict" then return (pattern_c/set)^1 elseif how == "tolerant" then return (pattern_b/set)^1 else return (pattern_a/set)^1 end end function parsers.settings_to_hash(str,existing) if type(str) == "table" then if existing then for k, v in next, str do existing[k] = v end return exiting else return str end elseif str and str ~= "" then hash = existing or { } lpegmatch(pattern_a_s,str) return hash else return { } end end function parsers.settings_to_hash_tolerant(str,existing) if type(str) == "table" then if existing then for k, v in next, str do existing[k] = v end return exiting else return str end elseif str and str ~= "" then hash = existing or { } lpegmatch(pattern_b_s,str) return hash else return { } end end function parsers.settings_to_hash_strict(str,existing) if type(str) == "table" then if existing then for k, v in next, str do existing[k] = v end return exiting else return str end elseif str and str ~= "" then hash = existing or { } lpegmatch(pattern_c_s,str) return next(hash) and hash else return nil end end local separator = comma * space^0 local value = P(lbrace * C((nobrace + nestedbraces)^0) * rbrace) + C((nestedbraces + (1-comma))^0) local pattern = spaces * Ct(value*(separator*value)^0) -- "aap, {noot}, mies" : outer {} removes, leading spaces ignored patterns.settings_to_array = pattern -- we could use a weak table as cache function parsers.settings_to_array(str,strict) if type(str) == "table" then return str elseif not str or str == "" then return { } elseif strict then if find(str,"{") then return lpegmatch(pattern,str) else return { str } end else return lpegmatch(pattern,str) end end local function set(t,v) t[#t+1] = v end local value = P(Carg(1)*value) / set local pattern = value*(separator*value)^0 * Carg(1) function parsers.add_settings_to_array(t,str) return lpegmatch(pattern,str,nil,t) end function parsers.hash_to_string(h,separator,yes,no,strict,omit) if h then local t, tn, s = { }, 0, table.sortedkeys(h) omit = omit and table.tohash(omit) for i=1,#s do local key = s[i] if not omit or not omit[key] then local value = h[key] if type(value) == "boolean" then if yes and no then if value then tn = tn + 1 t[tn] = key .. '=' .. yes elseif not strict then tn = tn + 1 t[tn] = key .. '=' .. no end elseif value or not strict then tn = tn + 1 t[tn] = key .. '=' .. tostring(value) end else tn = tn + 1 t[tn] = key .. '=' .. value end end end return concat(t,separator or ",") else return "" end end function parsers.array_to_string(a,separator) if a then return concat(a,separator or ",") else return "" end end function parsers.settings_to_set(str,t) -- tohash? -- todo: lpeg -- duplicate anyway t = t or { } -- for s in gmatch(str,"%s*([^, ]+)") do -- space added for s in gmatch(str,"[^, ]+") do -- space added t[s] = true end return t end function parsers.simple_hash_to_string(h, separator) local t, tn = { }, 0 for k, v in sortedhash(h) do if v then tn = tn + 1 t[tn] = k end end return concat(t,separator or ",") end -- for chem (currently one level) local value = P(lbrace * C((nobrace + nestedbraces)^0) * rbrace) + C(digit^1 * lparent * (noparent + nestedparents)^1 * rparent) + C((nestedbraces + (1-comma))^1) local pattern_a = spaces * Ct(value*(separator*value)^0) local function repeater(n,str) if not n then return str else local s = lpegmatch(pattern_a,str) if n == 1 then return unpack(s) else local t, tn = { }, 0 for i=1,n do for j=1,#s do tn = tn + 1 t[tn] = s[j] end end return unpack(t) end end end local value = P(lbrace * C((nobrace + nestedbraces)^0) * rbrace) + (C(digit^1)/tonumber * lparent * Cs((noparent + nestedparents)^1) * rparent) / repeater + C((nestedbraces + (1-comma))^1) local pattern_b = spaces * Ct(value*(separator*value)^0) function parsers.settings_to_array_with_repeat(str,expand) -- beware: "" => { } if expand then return lpegmatch(pattern_b,str) or { } else return lpegmatch(pattern_a,str) or { } end end -- local value = lbrace * C((nobrace + nestedbraces)^0) * rbrace local pattern = Ct((space + value)^0) function parsers.arguments_to_table(str) return lpegmatch(pattern,str) end -- temporary here (unoptimized) function parsers.getparameters(self,class,parentclass,settings) local sc = self[class] if not sc then sc = { } self[class] = sc if parentclass then local sp = self[parentclass] if not sp then sp = { } self[parentclass] = sp end setmetatableindex(sc,sp) end end parsers.settings_to_hash(settings,sc) end function parsers.listitem(str) return gmatch(str,"[^, ]+") end -- local pattern = Cs { "start", start = V("one") + V("two") + V("three"), rest = (Cc(",") * V("thousand"))^0 * (P(".") + endofstring) * anything^0, thousand = digit * digit * digit, one = digit * V("rest"), two = digit * digit * V("rest"), three = V("thousand") * V("rest"), } lpegpatterns.splitthousands = pattern -- maybe better in the parsers namespace ? function parsers.splitthousands(str) return lpegmatch(pattern,str) or str end -- print(parsers.splitthousands("11111111111.11")) local optionalwhitespace = whitespace^0 lpegpatterns.words = Ct((Cs((1-punctuation-whitespace)^1) + anything)^1) lpegpatterns.sentences = Ct((optionalwhitespace * Cs((1-period)^0 * period))^1) lpegpatterns.paragraphs = Ct((optionalwhitespace * Cs((whitespace^1*endofstring/"" + 1 - (spacer^0*newline*newline))^1))^1) -- local str = " Word1 word2. \n Word3 word4. \n\n Word5 word6.\n " -- inspect(lpegmatch(lpegpatterns.paragraphs,str)) -- inspect(lpegmatch(lpegpatterns.sentences,str)) -- inspect(lpegmatch(lpegpatterns.words,str)) -- handy for k="v" [, ] k="v" local dquote = P('"') local equal = P('=') local escape = P('\\') local separator = S(' ,') local key = C((1-equal)^1) local value = dquote * C((1-dquote-escape*dquote)^0) * dquote ----- pattern = Cf(Ct("") * Cg(key * equal * value) * separator^0,rawset)^0 * P(-1) -- was wrong local pattern = Cf(Ct("") * (Cg(key * equal * value) * separator^0)^1,rawset)^0 * P(-1) function parsers.keq_to_hash(str) if str and str ~= "" then return lpegmatch(pattern,str) else return { } end end -- inspect(lpeg.match(pattern,[[key="value" foo="bar"]])) local defaultspecification = { separator = ",", quote = '"' } -- this version accepts multiple separators and quotes as used in the -- database module function parsers.csvsplitter(specification) specification = specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator = specification.separator local quotechar = specification.quote local separator = S(separator ~= "" and separator or ",") local whatever = C((1 - separator - newline)^0) if quotechar and quotechar ~= "" then local quotedata = nil for chr in gmatch(quotechar,".") do local quotechar = P(chr) local quoteword = quotechar * C((1 - quotechar)^0) * quotechar if quotedata then quotedata = quotedata + quoteword else quotedata = quoteword end end whatever = quotedata + whatever end local parser = Ct((Ct(whatever * (separator * whatever)^0) * S("\n\r"))^0 ) return function(data) return lpegmatch(parser,data) end end -- and this is a slightly patched version of a version posted by Philipp Gesang -- local mycsvsplitter = utilities.parsers.rfc4180splitter() -- local crap = [[ -- first,second,third,fourth -- "1","2","3","4" -- "a","b","c","d" -- "foo","bar""baz","boogie","xyzzy" -- ]] -- local list, names = mycsvsplitter(crap,true) inspect(list) inspect(names) -- local list, names = mycsvsplitter(crap) inspect(list) inspect(names) function parsers.rfc4180splitter(specification) specification = specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification local separator = specification.separator --> rfc: COMMA local quotechar = P(specification.quote) --> DQUOTE local dquotechar = quotechar * quotechar --> 2DQUOTE / specification.quote local separator = S(separator ~= "" and separator or ",") local escaped = quotechar * Cs((dquotechar + (1 - quotechar))^0) * quotechar local non_escaped = C((1 - quotechar - newline - separator)^1) local field = escaped + non_escaped local record = Ct((field * separator^-1)^1) local headerline = record * Cp() local wholeblob = Ct((newline^-1 * record)^0) return function(data,getheader) if getheader then local header, position = lpegmatch(headerline,data) local data = lpegmatch(wholeblob,data,position) return data, header else return lpegmatch(wholeblob,data) end end end -- utilities.parsers.stepper("1,7-",9,function(i) print(">>>",i) end) -- utilities.parsers.stepper("1-3,7,8,9") -- utilities.parsers.stepper("1-3,6,7",function(i) print(">>>",i) end) -- utilities.parsers.stepper(" 1 : 3, ,7 ") -- utilities.parsers.stepper("1:4,9:13,24:*",30) local function ranger(first,last,n,action) if not first then -- forget about it elseif last == true then for i=first,n or first do action(i) end elseif last then for i=first,last do action(i) end else action(first) end end local cardinal = lpegpatterns.cardinal / tonumber local spacers = lpegpatterns.spacer^0 local endofstring = lpegpatterns.endofstring local stepper = spacers * ( C(cardinal) * ( spacers * S(":-") * spacers * ( C(cardinal) + Cc(true) ) + Cc(false) ) * Carg(1) * Carg(2) / ranger * S(", ")^0 )^1 local stepper = spacers * ( C(cardinal) * ( spacers * S(":-") * spacers * ( C(cardinal) + (P("*") + endofstring) * Cc(true) ) + Cc(false) ) * Carg(1) * Carg(2) / ranger * S(", ")^0 )^1 * endofstring -- we're sort of strict (could do without endofstring) function parsers.stepper(str,n,action) if type(n) == "function" then lpegmatch(stepper,str,1,false,n or print) else lpegmatch(stepper,str,1,n,action or print) end end -- local pattern_math = Cs((P("%")/"\\percent " + P("^") * Cc("{") * lpegpatterns.integer * Cc("}") + P(1))^0) local pattern_text = Cs((P("%")/"\\percent " + (P("^")/"\\high") * Cc("{") * lpegpatterns.integer * Cc("}") + P(1))^0) patterns.unittotex = pattern function parsers.unittotex(str,textmode) return lpegmatch(textmode and pattern_text or pattern_math,str) end local pattern = Cs((P("^") / "" * lpegpatterns.integer * Cc("") + P(1))^0) function parsers.unittoxml(str) return lpegmatch(pattern,str) end -- print(utilities.parsers.unittotex("10^-32 %"),utilities.parsers.unittoxml("10^32 %")) local cache = { } local spaces = lpeg.patterns.space^0 local dummy = function() end table.setmetatableindex(cache,function(t,k) local separator = P(k) local value = (1-separator)^0 local pattern = spaces * C(value) * separator^0 * Cp() t[k] = pattern return pattern end) local commalistiterator = cache[","] function utilities.parsers.iterator(str,separator) local n = #str if n == 0 then return dummy else local pattern = separator and cache[separator] or commalistiterator local p = 1 return function() if p <= n then local s, e = lpegmatch(pattern,str,p) if e then p = e return s end end end end end -- for s in utilities.parsers.iterator("a b c,b,c") do -- print(s) -- end local function initialize(t,name) local source = t[name] if source then local result = { } for k, v in next, t[name] do result[k] = v end return result else return { } end end local function fetch(t,name) return t[name] or { } end function process(result,more) for k, v in next, more do result[k] = v end return result end local name = C((1-S(", "))^1) local parser = (Carg(1) * name / initialize) * (S(", ")^1 * (Carg(1) * name / fetch))^0 local merge = Cf(parser,process) function utilities.parsers.mergehashes(hash,list) return lpegmatch(merge,list,1,hash) end -- local t = { -- aa = { alpha = 1, beta = 2, gamma = 3, }, -- bb = { alpha = 4, beta = 5, delta = 6, }, -- cc = { epsilon = 3 }, -- } -- -- inspect(utilities.parsers.mergehashes(t,"aa, bb, cc")) context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-cln.mkiv0000644000175000017500000000156111754241457024343 0ustar norbertnorbert%D \module %D [ file=typo-cln, %D version=2011.02.11, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Cleaning, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Cleaning} \unprotect \registerctxluafile{typo-cln}{1.001} \definesystemattribute[cleaner][public] %D Currently there is no interface. %D %D 1: Autocap first character of a line \unexpanded\def\setcharactercleaning[#1]% This name might change! {\ctxcommand{setcharactercleaning("#1")}} % also accepts "reset" % \appendtoks % \attribute\cleanerattribute\attributeunsetvalue % \to \everyforgetall \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-mat.mkiv0000644000175000017500000002067112130411274024330 0ustar norbertnorbert%D \module %D [ file=supp-mat, %D version=1998.09.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Math, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For practical reasons, I decided to move some math things to %D a support module. There is nothing spectacular here. It may move %D back to math-ini. \writestatus{loading}{ConTeXt Support Macros / Math} \unprotect %D \macros %D {mathematics, math, nomathematics, startmathmode} %D %D The \type{$} can be both an begin and end math character. %D This can lead to confusing and errorprone situations when %D macros insert \type{$}. When for instance we have defined: %D %D \starttyping %D \def\MyPlus{$\,+\,$} %D \stoptyping %D %D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to: %D %D \starttyping %D $x^2 $\,+\,$ y^2 = r^2$ %D \stoptyping %D %D Here the \type{\,} are given outside math mode and \TEX\ will %D definitely complain about this. A more save definition would %D have been: %D %D \starttyping %D \def\MyPlus{\mathematics{\,+\,}} %D \stoptyping %D %D Which is implemented as: \let\normalsuperscript \Usuperscript \let\normalsubscript \Usubscript \let\normalstartimath \Ustartmath \let\normalstopimath \Ustopmath \let\normalstartdmath \Ustartdisplaymath \let\normalstopdmath \Ustopdisplaymath \def\normalmathaligntab{&} % \let\normalmathaligntab\aligntab does to work well in a let to & (a def works ok) \let\normalsuper \Usuperscript % obsolete \let\normalsuber \Usubscript % obsolete \let\startimath \Ustartmath \let\stopimath \Ustopmath \let\startdmath \Ustartdisplaymath \let\stopdmath \Ustopmath \unexpanded\def\mathematics#1{\relax \ifmmode#1\else\normalstartimath#1\normalstopimath\fi} \unexpanded\def\displaymath#1{\noindent \ifmmode#1\else\normalstartdmath#1\normalstopdmath\fi} \unexpanded\def\inlinemath #1{\dontleavehmode\ifmmode#1\else\normalstartimath#1\normalstopimath\fi} \unexpanded\def\textmath #1{\dontleavehmode\ifmmode#1\else\begingroup\everymath\emptytoks\normalstartimath#1\normalstopimath\endgroup\fi} % \mathsurround\zeropoint \let\m\mathematics \let\stopmathmode\relax \unexpanded\def\startmathmode % nested variant {\relax\ifmmode \begingroup \let\stopmathmode\endgroup \else \normalstartimath \let\stopmathmode\normalstopimath \fi} \unexpanded\def\nomathematics#1% {\relax\ifmmode\hbox{#1}\else#1\fi} \let\math\mathematics %D \macros %D {displaymathematics,inlinemathematics,automathematics} %D %D An example of usage of the following can be found in the MathML module: \ifdefined\strc_formulas_start_formula \else \def\strc_formulas_start_formula{\normalstartdmath} \def\strc_formulas_stop_formula {\normalstopdmath } \fi \unexpanded\def\displaymathematics#1{\relax\ifmmode#1\else\strc_formulas_start_formula{}#1\strc_formulas_stop_formula\fi} \unexpanded\def\inlinemathematics {\dontleavehmode\mathematics} \unexpanded\def\automathematics {\relax\ifhmode\expandafter\inlinemathematics\else\expandafter\displaymathematics\fi} % better, esp when used in bTABLE ... eTABLE \unexpanded\def\automathematics {\relax \ifhmode \expandafter\inlinemathematics \else\ifintable \doubleexpandafter\inlinemathematics \else \doubleexpandafter\displaymathematics \fi\fi} %D \macros %D {dimension, nodimension} %D %D The next few macros are used for typesetting dimensions in %D such a way that spacing is acceptable. I won't spend much %D words on these macros, because they will be overloaded in %D the units module. %D %D REPLACED (keep commented): \newsignal\dimensionsignal \def\dimensiontypeface {\tf} \def\dimensionhalfspace {\,} \unexpanded\def\dimension#1% {\pushmacro\dodimensionsignal \gdef\dodimensionsignal{\kern\dimensionsignal}% \ifdim\lastskip=\zeropoint\relax \ifdim\lastkern=\zeropoint\relax \ifmmode \mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% \else \mathematics{\dimensiontypeface#1}% \fi \else\ifdim\lastkern=\dimensionsignal \mathematics{\dimensionhalfspace\dimensiontypeface#1}% \else \unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% \fi\fi \else \unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% \fi \dodimensionsignal \popmacro\dodimensionsignal} \unexpanded\def\nodimension#1% {\unskip#1\global\let\dodimensionsignal\relax} %D \macros %D {cramped} %D %D Cramped math: %D %D \startbuffer %D \ruledhbox{$\left\{{x^2\over y^2}\right\}$} %D \ruledhbox{$\cramped{\left\{ {x^2\over y^2}\right\}}$} %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\cramped {\mathpalette\math_cramped} %D We force a cramped style by issuing a non||existing radical (box). %D After that we make sure the height is correct. (Comment taken from %D Morten Høgholm's mathtools package.) Macro suggested by AM and %D cleaned up a bit by HH. % original % % \def\docramped#1#2% % {\setbox\scratchbox\hbox % {\nulldelimiterspace\zeropoint % $\mathsurround\zeropoint#1\radical\zerocount{#2}$}% % \ifx#1\displaystyle % \scratchdimen\fontdimen8\textfont3 % \advance\scratchdimen .25\fontdimen5\textfont2 % \else % \scratchdimen1.25\fontdimen8 % \ifx#1\textstyle\textfont % \else % \ifx#1\scriptstyle\scriptfont\else\scriptscriptfont\fi % \fi % 3 % \fi % \advance\scratchdimen-\ht\scratchbox % \ht\scratchbox-\scratchdimen % \box\scratchbox} % mkii: % % \def\math_cramped#1#2% % {\begingroup % added HH, made even more cramped % \setbox\scratchbox\hbox % {\nulldelimiterspace\zeropoint % \normalstartimath\mathsurround\zeropoint#1\radical\zerocount{#2}\normalstopimath}% % \ht\scratchbox-\dimexpr % \ifx#1\displaystyle % \fontdimen\pluseight\textfont\plusthree % +.25\fontdimen\plusfive\textfont\plustwo % \else % 1.25\fontdimen\pluseight % \ifx#1\textstyle % \textfont % \else\ifx#1\scriptstyle % \scriptfont % \else % \scriptscriptfont % \fi \fi % \plusthree % \fi % -\ht\scratchbox % \relax % \box\scratchbox % \endgroup} \def\math_cramped#1#2% we have all in one family {\begingroup % added HH, made even more cramped \setbox\scratchbox\hbox {\nulldelimiterspace\zeropoint \normalstartimath\mathsurround\zeropoint#1\radical\zerocount{#2}\normalstopimath}% \ht\scratchbox-\dimexpr \ifx#1\displaystyle \fontdimen\pluseight\textfont\plusone + .25\fontdimen\plusfive \textfont\plusone \else 1.25\fontdimen\pluseight \ifx#1\textstyle \textfont \else \ifx#1\scriptstyle\scriptfont \else \scriptscriptfont\fi\fi \plusone \fi -\ht\scratchbox \relax \box\scratchbox \endgroup} %D \macros %D {cramedllap, crampedrlap, crampedclap} %D %D In many cases, one wants to use the \tex {clap} macro in %D math mode while using subscripts. Normally, subscripts are %D in cramped mode, and these macros allow you to go to %D cramped mode. For example: %D %D \startbuffer %D \startformula %D \sum_{a^2 < b^2 < c^2} \quad %D \sum_{\clap{a^2 < b^2 < c^2}} \quad %D \sum_{\crampedclap{a^2 < b^2 < c^2}} %D \stopformula %D \stopbuffer %D %D \start %D \typebuffer %D \switchtobodyfont[24pt] %D \getbuffer %D \stop %D %D Notice that \type {\clap{\cramped ... }} would also work, %D but it requires \TEX\ to typeset it arguments 16 times. \unexpanded\def\crampedllap{\mathpalette\math_cramped_llap} \unexpanded\def\crampedrlap{\mathpalette\math_cramped_rlap} \unexpanded\def\crampedclap{\mathpalette\math_cramped_clap} \def\math_cramped_llap#1#2{{}\dollap{\math_cramped #1{#2}}} \def\math_cramped_rlap#1#2{{}\dorlap{\math_cramped #1{#2}}} \def\math_cramped_clap#1#2{{}\doclap{\math_cramped #1{#2}}} % experiment, not yet to be used % \unexpanded\def\displaybreak % {\ifhmode % \removeunwantedspaces % \ifcase\raggedstatus\hfill\fi % \strut\penalty-9999 % \break fails on case (3) % \fi} % % \def\startdisplay{\displaybreak\ignorespaces\startpacked} % \def\stopdisplay {\stoppacked\displaybreak\ignorespaces} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-ext.mkii0000644000175000017500000000325111754241457024311 0ustar norbertnorbert%D \module %D [ file=colo-ext, % mostof thsi code used to be in colo-ini.tex %D version=1997.04.01, %D title=\CONTEXT\ Color Macros, %D subtitle=Extras, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Color Macros / Extras} \unprotect %D \macros %D {negatecolorcomponent, negativecolorbox} %D %D Sometimes, especially when we deal with typesetting %D devices, we want to reverse the color scheme. Instead of %D recalculating all those colors, we use a quick and dirty %D approach: %D %D \starttyping %D \negativecolorbox0 %D \stoptyping %D %D will negate the colors in box zero. \def\negatecolorbox#1% {\setbox#1\hbox {\dostartnegative \localstartcolor[white]\vrule\!!height\ht#1\!!depth\dp#1\!!width\wd#1\localstopcolor \hskip-\wd#1% \box#1% \dostopnegative}} %D There are in principle two ways to handle overprint: bound to colors %D or independent. For the moment we only support independent overprint %D handling. Here we deal with a per-document setting. \setupcolors [\c!intent=\v!none] \def\starttextoverprint {\doifelse\@@clintent\v!overprint {\glet\stoptextoverprint \dostopoverprint \glet\starttextoverprint\dostartoverprint \dostartoverprint} {\glet\stoptextoverprint\donothing}} \let\stoptextoverprint\donothing \appendtoks \starttextoverprint \to \everystarttextproperties \appendtoks \stoptextoverprint \to \everystoptextproperties \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-asciimath.mkiv0000644000175000017500000000731412130411274024770 0ustar norbertnorbert%D \module %D [ file=m-asciimath, %D version=2006.04.24, % 1999.11.06, %D title=\CONTEXT\ Modules, %D subtitle=AsciiMath, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua code. \registerctxluafile{x-asciimath}{} \def\ctxmoduleasciimath#1{\ctxlua{moduledata.asciimath.#1}} %D The following code is not officially supported and is only meant %D for the Math4All project. %D %D The following code kind of maps ascii math %D http://www1.chapman.edu/~jipsen/mathml/asciimath.html onto \TEX. The %D code was written for the math4all project but in retrospect we %D could have used just tex code as the web version can handle that %D as well. Anyhow, as we use \MATHML\ as basis it makes sense to add %D this to the repertoire as annotation variant, so now we have %D content \MATHML\ (prefered), presentation \MATHML\ (often messy), %D \OPENMATH\ (what was which we started with in this project) %D calcmath (handy for students who are accustomed to calculators), %D asciimath (to make Frits's live easier) and of course \TEX. Of %D course all are used mixed. %D %D We don't support all quirks of asciimath as I am not in the mood to %D write a complex parser while a bit of sane coding can work as well. %D %D \startitemize %D \item We support only the syntactically clear variants and as long %D as lpeg does not support left recursion this is as far as we %D want to go. %D \item The parser is rather insensitive for spaces but yet the advice is %D to avoid weird coding like \type {d/dxf(x)} but use \type {d/dx %D f(x)} instead. After all we're not in a compact coding cq.\ %D parser challenge. %D \item We also don't support the somewhat confusing \type {sqrt sqrt 2} %D nor \type {root3x} (although the second one kind of works). A bit %D of defensive coding does not hurt. %D \item We can process \type {a/b/c/d} but it's not compatible with the %D default behaviour of asciimath. Use grouping instead. Yes, we do %D support the somewhat nonstandard grouping token mix. %D \item You should use explicit \type {text(..)} directives as one can %D never be sure what is a reserved word and not. %D \stopitemize %D %D Actually, as the only parsing sensitive elements of \TEX\ are %D fractions (\type {\over} and friends, a restricted use of \TEX\ %D coding is probably as comprehensive and parseble. %D %D The webpage with examples served as starting point so anything beyond %D what can be found there isn't supported. \unprotect \writestatus{asciimath}{beware, this is an experimental (m4all only) module} \unexpanded\def\asciimath#1{\ctxmoduleasciimath{convert(\!!bs\detokenize{#1}\!!es,true)}} \protect \continueifinputfile{x-asciimath.mkiv} \enabletrackers[modules.asciimath.mapping] \starttext \startlines \asciimath{x^2+y_1+z_12^34} \asciimath{sin^-1(x)} \asciimath{d/dx f(x)=lim_(h->0) (f(x+h)-f(x))/h} \asciimath{f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n} \asciimath{int_0^1 f(x)dx} \asciimath{int^1_0 f(x)dx} \asciimath{a//b} \asciimath{(a/b)/(d/c)} \asciimath{((a*b))/(d/c)} \asciimath{[[a,b],[c,d]]((n),(k))} \asciimath{1/x={(1,text{if } x!=0),(text{undefined},if x=0):}} \asciimath{{ (1,2), (x,(x + text(x))) }} \asciimath{{(1,2),(x,(x+text(x))),(x,text(x))}} \asciimath{{(1,2),(x,(x+text(x))),(x,x text(x))}} \asciimath{{(1,2/2),(x,(x+x^22+sqrt(xx))),(x,x text(xyz))}} \asciimath{{(1,2/2),(x,(x+x^22+sqrt(xx))),(x,text(xyz)+1+text(hans))}} \asciimath{<> text{and} {:(x,y),(u,v):}} \asciimath{(a,b] = {x text(in) RR | a < x <= b}} \stoplines \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/math-tim.mkii0000644000175000017500000002522411754241457024303 0ustar norbertnorbert%D \module %D [ file=math-tim, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, %D subtitle=Mathtime Specials, %D author={Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \endinput % i will clean this up after taco has gone over it %D With thanks to Berthold Horn from YandY for providing me %D evaluation copies of the MathTimePlus fonts. % version 0 : Michael Spivak % version 1 : Taco Hoekwater % version 2 : Hans Hagen % version 3 : etc etc etc \unprotect %D We use the predefined spare families \type {\mcfam} and %D \type {\mdfam}. \let\cafam\mcfam \let\hexcafam\hexmcfam \let\gbfam\mdfam \let\hexgbfam\hexmdfam \let\gkfam\mdfam \let\hexgkfam\hexmdfam % Why is this needed? % \font\tenmd =mtgu at 10pt % \font\sevenmd=mtgu at 7.6pt % \font\fivemd =mtgu at 6pt % \font\tenmc =mtms at 10pt % \font\sevenmc=mtms at 7.6pt % \font\fivemc =mtms at 6pt % % \textfont \mcfam\tenmc \textfont \mdfam\tenmd % \scriptfont \mcfam\sevenmc \scriptfont \mdfam\sevenmd % \scriptscriptfont\mcfam\fivemc \scriptscriptfont\mdfam\fivemd % \addtocommalist{gk}\familylist % \addtocommalist{gb}\familylist % % \defineinterfaceconstant {ca} {ca} % boohoo! % \defineinterfaceconstant {gk} {gk} % boohoo! % \defineinterfaceconstant {gb} {gb} % boohoo! % \definealternativestyle[script] [\ca][\ca] % \definealternativestyle[greek] [\gk][\gk] % \definealternativestyle[boldgreek][\gb][\gb] % \definebodyfont % [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt] [rm] % [ca=mtms sa 1, % gk=mtgu sa 1, % gb=mtgub sa 1] %D Since a font size is a rather fuzzy thing, it will be no %D surprise that the Math Times fonts have different specs %D than the Computer Modern Roman fonts. %D %D \starttabulate[|Bl|c|c|c|c|c|c|c|c|c|c|] %D \NC Computer Modern\NC %D 5 \NC6 \NC7 \NC8 \NC9 \NC10 \NC11 \NC12 \NC14 \NC18\NC\NR %D \NC Math Times \NC %D 6.0\NC6.8\NC7.6\NC8.4\NC9.2\NC10.0\NC10.8\NC11.6\NC13.2\NC--\NC\NR %D \stoptabulate %D %D The following definitions presume the existence of \type %D {tio} and \type {tibio} font alternatives. Definitions for %D \type {\tf.} etc and \type {\sc} are left as they are. %D moved code %D The next lines set up coding dependant versions of math %D accents (for \type {texnansi} of course). These are needed %D in commands like \type {\bf} and \type {\it} (which use the %D text font encoding) a opposed to \type {_no spec_} and %D \type {mi} that use the math font encoding. This stuff %D should be made more general! % \daghex, \ddaghex and \dothex were wrong in my version of mtmacs \def\daghex {86} % to do \def\ddaghex {87} \def\Shex {A7} \def\Phex {B6} \def\barhex {16} \def\gravehex{12} \def\acutehex{13} \def\checkhex{14} \def\brevehex{15} \def\hathex {5E} \def\dothex {05} \def\tildehex{7E} \def\ddothex {7F} %D The \type {mtex} fonts need a recalculation of \type %D {\p@renwd}, which in \CONTEXT\ is done automatically. %D The following definitions are mostly copied from the file %D \type {mtmacs.tex}, which banner said: %D %D \starttyping %D MTMACS.TEX VERSION 1.1.1 (1996 Dec 8) %D COPYRIGHT (C) 1992, 1993, 1996 BY THE TEXPLORATORS CORPORATION %D ALL RIGHTS RESERVED %D \stoptyping %D %D We reformatted the macros and changed a few bits and %D pieces. A further cleanup with regards to the scratch %D registers will be done later. \mathchardef\Gamma = "0130 \mathchardef\Delta = "0131 \mathchardef\Theta = "0132 \mathchardef\Lambda = "0133 \mathchardef\Xi = "0134 \mathchardef\Pi = "0135 \mathchardef\Sigma = "0136 \mathchardef\Upsilon = "0137 \mathchardef\Phi = "0138 \mathchardef\Psi = "0139 \mathchardef\Omega = "017F \mathchardef\varGamma = "0100 \mathchardef\varDelta = "0101 \mathchardef\varTheta = "0102 \mathchardef\varLambda = "0103 \mathchardef\varXi = "0104 \mathchardef\varPi = "0105 \mathchardef\varSigma = "0106 \mathchardef\varUpsilon = "0107 \mathchardef\varPhi = "0108 \mathchardef\varPsi = "0109 \mathchardef\varOmega = "010A \mathchardef\varkappa = "017E \mathchardef\ldotp = "613A \mathchardef\triangleleft = "2247 \mathchardef\triangleright = "2246 \mathchardef\comp = "2242 \mathchardef\Relbar = "3248 \mathchardef\dagger = "20\daghex % to do \mathchardef\ddagger = "20\ddaghex % to do \mathchardef\dotacc = "0250 \mathcode`\( = "412E \mathcode`\) = "512F \mathcode`\. = "013A \mathcode`\, = "613B \mathcode`\+ = "2243 \mathcode`\= = "3244 \mathcode`\; = "6249 \delcode `\( = "12E300 \delcode `\) = "12F301 \let\mit=\undefined % to do \def\vec{\mathaccent"0245 } \def\t#1{{\edef\next{\the\font}\the\textfont2\accent"41\next#1}} % fam equals -1 unless the user has said something % like \rm (cf. the texbook page 290) \def\ifdefaultfamelse#1#2% {\ifnum\fam=\minusone\mathaccent#1\else\mathaccent#2\fi} \let\noaccents@\relax \def\grave {\ifdefaultfamelse{"024A}{"70\gravehex}} \def\acute {\ifdefaultfamelse{"024B}{"70\acutehex}} \def\check {\ifdefaultfamelse{"024C}{"70\checkhex}} \def\breve {\ifdefaultfamelse{"024D}{"70\brevehex}} \def\bar {\ifdefaultfamelse{"024E}{"70\barhex }} \def\hat {\ifdefaultfamelse{"024F}{"70\hathex }} \def\dot {\ifdefaultfamelse{"0250}{"70\dothex }} \def\tilde {\ifdefaultfamelse{"0251}{"70\tildehex}} \def\ddot {\ifdefaultfamelse{"0252}{"70\ddothex }} \def\widebar{\mathaccent"0253 } \def\mathhexbox@#1#2#3% {\relax \ifmmode \mathpalette{}{\mathsurround\zeropoint\rm\mathchar"#1#2#3}% \else \leavevmode \hbox{$\mathsurround\zeropoint\rm\mathchar"#1#2#3$}% \fi} \def\dag {\edef\next@{0\daghex }\expandafter\mathhexbox@\next@} \def\ddag{\edef\next@{0\ddaghex}\expandafter\mathhexbox@\next@} \def\S{\edef\next@{0\Shex}\expandafter\mathhexbox@\next@} \def\P{\edef\next@{0\Phex}\expandafter\mathhexbox@\next@} \def\vdots% {\vbox {\baselineskip4\points \lineskiplimit\zeropoint \kern6\points\hbox{$\mathsurround\zeropoint.$}\hbox{$\mathsurround\zeropoint.$}\hbox{$\mathsurround\zeropoint.$}}} \def\ddots% {\mathinner {\mkern1mu \raise7\points\vbox{\kern 7\points\hbox{$\mathsurround\zeropoint.$}}\mkern2mu \raise4\points\hbox{$\mathsurround\zeropoint.$}\mkern2mu \raise \points\hbox{$\mathsurround\zeropoint.$}\mkern1mu}} \def\hbar {{\mathchoice {\hbox{\lower.07em \hbox{$\mathchar"\barhex$}}} {\hbox{\lower.07em \hbox{$\mathchar"\barhex$}}} {\hbox{\lower.049em\hbox{$\scriptstyle\mathchar"\barhex$}}} {\hbox{\lower.035em\hbox{$\scriptscriptstyle\mathchar"\barhex$}}}% \mkern-6.3muh}} \def\angle% {{\vbox{\ialign{$\mathsurround\zeropoint\scriptstyle##$\crcr \not\mathrel{\mkern14mu}\crcr \noalign{\nointerlineskip} \mkern2.5mu\leaders\hrule height.48\points\hfill\mkern2.5mu\crcr}}}} \newdimen\amstexex \amstexex = .2326ex \def\varinjlim% {\mathop{\vtop{\ialign{##\crcr \hfil\the\textfont\zerocount lim\hfil\crcr \noalign{\nointerlineskip}\rightarrowfill\crcr \noalign{\nointerlineskip\kern-\amstexex}\crcr}}}} \def\varprojlim% {\mathop{\vtop{\ialign{##\crcr \hfil\the\textfont\zerocount lim\hfil\crcr \noalign{\nointerlineskip}\leftarrowfill\crcr \noalign{\nointerlineskip\kern-\amstexex}\crcr}}}} \def\varliminf{\mathop{\underbar {lim}}} % context-ified \def\varlimsup{\mathop{\overstrike{lim}}} % context-ified \def\spdot {^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount .}}}} \def\spddot {^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount ..}}}} \def\spdddot {^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount ...}}}} \def\spddddot{^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount....}}}} %D Here some code is merged in order to save strings. \def\domultidot#1#2% {\setbox0\hbox{$#1#2$}% \setbox2\hbox{$#1\infty$}% \dimen0\ht2 \ifdim\ht0<\dimen0 \dimen0\ht0 \fi \setbox2\hbox{$#1#2\mathchar"012D$}% \dimen2\wd2 \advance\dimen2-\wd0 \setbox0\hbox{$#1\rhook$}% \advance\dimen2-\wd0 \vbox {\offinterlineskip \ialign{\hfil$#1##$\hfil\cr \kern\dimen2\dotacc\mkern-2.5mu\dotacc\mkern-2.5mu\dotacc\thirddot\cr \noalign{\vskip-\dimen0}% #2\cr}}} \def\dddot% {\def\thirddot{}% \mathpalette\domultidot} \def\ddddot% {\def\thirddot{\mkern-2.5mu\dotacc}% \mathpalette\domultidot} \newcount\uproot@ \newcount\leftroot@ \def\nonmatherr#1% {\errmessage{\noexpand#1allowed only in math mode}} \def\uproot#1% {\relax \ifmmode \uproot@#1\relax \else \nonmatherr\uproot \fi} \def\leftroot#1% {\relax \ifmmode \leftroot@#1\relax \else \nonmatherr\leftroot \fi} \def\root#1\of#2% {\setbox\rootbox=\hbox{$\mathsurround\zeropoint\scriptscriptstyle{#1}$}% \mathpalette\r@@t{#2}} \def\r@@t#1#2% {\setbox\zerocount\hbox{$\uproot@\zerocount\leftroot\zerocount\mathsurround\zeropoint#1\sqrt{#2}$}% \dimen@\ht\zerocount\advance\dimen@-\dp\zerocount \dimen@ii\dimen@ \ifdim\dimen@>30\points \advance\dimen@ii-16\points \else \ifdim\dimen@>24\points \advance\dimen@ii -8\points \else \ifdim\dimen@>18\points \advance\dimen@ii -6\points \else \ifdim\dimen@>12\points \advance\dimen@ii -4\points \else \ifdim\dimen@>10\points \advance\dimen@ii -2\points \fi\fi\fi\fi\fi \setbox\plustwo=\hbox{$\mathsurround\zeropoint#1\mskip\uproot@ mu$}% \advance\dimen@ii by1.667\wd\plustwo \mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@ii\copy\rootbox \mkern-8mu\mkern\leftroot@ mu\box\zerocount\leftroot\zerocount\uproot\zerocount} \def\space@.{\futurelet\space@\relax} \space@. % really needed ? \def\jadjust% {\mkern-\plustwo mu} %D For the moment the following code is left unchanged. It is %D not used anyway. \newif\ifsubscriptcorrection \subscriptcorrectionfalse \ifsubscriptcorrection \expandafter\let\csname subscript character \string_\endcsname_ \catcode`\_=\active \def_% {\ifmmode \expandafter\sb@ \else \expandafter\csname subscript character \string_\endcsname \fi} \let\sb_ \ifnum\catcode`\^^A=8 \catcode`\^^A\active\let^^A_\fi \def\sb@#1% {\csname subscript character \string_\endcsname {\futurelet\next\sb@@#1}} \def\sb@@% {\ifx\next\space@ \def\next@. % {\futurelet\next\sb@@}% \else \def\next@.% {\ifx\next j% \mkern-\plustwo mu\else \ifx\next f% \mkern-\plustwo mu\else \ifx\next p% \mkern-\plusone mu\fi\fi\fi}% \fi \next@.} \fi \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/m-mathcrap.mkiv0000644000175000017500000000706311754241457024632 0ustar norbertnorbert%D \module %D [ file=m-mathcrap, %D version=2010.05.30, %D title=\CONTEXT\ Modules, %D subtitle=Math Crap, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is meant for those who want to use the (incomplete and sort of useless) %D unicode superscripts and subscripts. We should look ahead and collapse them %D but I will only implement that in calcmath when the need is there. Now the %D spacing can be somewhat non optimal but probably that does not matter here. %D %D \startbuffer %D $a₀₁₂₃₄₅₆₇₈₉₋₌₊$ %D \stopbuffer %D %D \typebuffer \blank \getbuffer \blank \unprotect \unexpanded\def\mathunicodesupercrap#1{\mathortext{{\normalsuperscript{#1}}}{\high{#1}}} \unexpanded\def\mathunicodesubcrap #1{\mathortext{{\normalsubscript {#1}}}{\low {#1}}} \ifdefined\installanddefineactivecharacter\else \def\installanddefineactivecharacter #1 #2% we need this as command {\normalexpanded{\noexpand\installactivecharacter \utfchar{#1} }% \defineactivecharacter #1 {#2}} \fi \installanddefineactivecharacter "2070 {\mathunicodesupercrap 0} \installanddefineactivecharacter "00B9 {\mathunicodesupercrap 1} \installanddefineactivecharacter "00B2 {\mathunicodesupercrap 2} \installanddefineactivecharacter "00B3 {\mathunicodesupercrap 3} \installanddefineactivecharacter "2074 {\mathunicodesupercrap 4} \installanddefineactivecharacter "2075 {\mathunicodesupercrap 5} \installanddefineactivecharacter "2076 {\mathunicodesupercrap 6} \installanddefineactivecharacter "2077 {\mathunicodesupercrap 7} \installanddefineactivecharacter "2078 {\mathunicodesupercrap 8} \installanddefineactivecharacter "2079 {\mathunicodesupercrap 9} \installanddefineactivecharacter "207A {\mathunicodesupercrap +} \installanddefineactivecharacter "207B {\mathunicodesupercrap -} \installanddefineactivecharacter "207C {\mathunicodesupercrap =} \installanddefineactivecharacter "207D {\mathunicodesupercrap (} \installanddefineactivecharacter "207E {\mathunicodesupercrap )} \installanddefineactivecharacter "207F {\mathunicodesupercrap n} \installanddefineactivecharacter "2080 {\mathunicodesubcrap 0} \installanddefineactivecharacter "2081 {\mathunicodesubcrap 1} \installanddefineactivecharacter "2082 {\mathunicodesubcrap 2} \installanddefineactivecharacter "2083 {\mathunicodesubcrap 3} \installanddefineactivecharacter "2084 {\mathunicodesubcrap 4} \installanddefineactivecharacter "2085 {\mathunicodesubcrap 5} \installanddefineactivecharacter "2086 {\mathunicodesubcrap 6} \installanddefineactivecharacter "2087 {\mathunicodesubcrap 7} \installanddefineactivecharacter "2088 {\mathunicodesubcrap 8} \installanddefineactivecharacter "2089 {\mathunicodesubcrap 9} \installanddefineactivecharacter "208A {\mathunicodesubcrap +} \installanddefineactivecharacter "208B {\mathunicodesubcrap -} \installanddefineactivecharacter "208C {\mathunicodesubcrap =} \installanddefineactivecharacter "208D {\mathunicodesubcrap (} \installanddefineactivecharacter "208E {\mathunicodesubcrap )} \installanddefineactivecharacter "2090 {\mathunicodesubcrap A} \installanddefineactivecharacter "2091 {\mathunicodesubcrap E} \installanddefineactivecharacter "2092 {\mathunicodesubcrap O} \installanddefineactivecharacter "2093 {\mathunicodesubcrap X} %installanddefineactivecharacter "2094 {\mathunicodesubcrap ?} % SCHWAA \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-tex.lua0000644000175000017500000000215012130411274024111 0ustar norbertnorbertif not modules then modules = { } end modules ['meta-tex'] = { version = 1.001, comment = "companion to meta-tex.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --~ local P, C, lpegmatch = lpeg.P, lpeg.C, lpeg.match -- local left = P("[") -- local right = P("]") -- local space = P(" ") -- local argument = left * C((1-right)^1) * right -- local pattern = (argument + space)^0 -- function metapost.sometxt(optional,str) -- if optional == "" then -- context.sometxta(str) -- else -- local one, two = lpegmatch(pattern,optional) -- if two then -- context.sometxtc(one,two,str) -- elseif one then -- context.sometxtb(one,str) -- else -- context.sometxta(str) -- end -- end -- end local P, Cs, lpegmatch = lpeg.P, lpeg.Cs, lpeg.match local pattern = Cs((P([[\"]]) + P([["]])/"\\quotedbl{}" + P(1))^0) -- or \char function metapost.escaped(str) context(lpegmatch(pattern,str)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-dir-01.tex0000644000175000017500000000525211754241457023672 0ustar norbertnorbert%D \module %D [ file=x-dir-01, %D version=2003.05.10, % around that time -) %D title=\CONTEXT\ Directory Handling, %D subtitle=Overview (1), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setuppapersize [S6][S6] \setuplayout [width=middle, height=middle, backspace=12pt, topspace=12pt, bottomspace=32pt, header=0pt, footer=0pt, bottomdistance=9pt, bottom=18pt] \setupinteractionmenu [bottom] [state=start, frame=off, rightoffset=-3pt, background=color, backgroundcolor=TextColor, middle=\hskip4pt, left=\hfill] \startinteractionmenu[bottom] \but [PreviousJump] Previous Jump \\ \but [previouspage] Previous Page \\ \but [nextpage] Next Page \\ \stopinteractionmenu \setupbackgrounds [page] [backgroundoffset=3pt, background=color, backgroundcolor=PageColor] \setupbackgrounds [text] [background=color, backgroundcolor=TextColor] \definecolor [PageColor] [r=.6,g=.7,b=.8] \definecolor [TextColor] [r=.7,g=.8,b=.9] \definecolor [DoneColor] [s=.5] \startmode[colorscheme-red] \definecolor [PageColor] [r=.9,g=.7,b=.6] \definecolor [TextColor] [r=.9,g=.8,b=.7] \stopmode \startmode[colorscheme-green] \definecolor [PageColor] [r=.6,g=.8,b=.7] \definecolor [TextColor] [r=.7,g=.9,b=.8] \stopmode \setupcolors [state=start] \setupinteraction [state=start, menu=on, color=, display=new, contrastcolor=DoneColor, style=] \definehead [directory] [subject] \setuphead [directory] [style=\tfc] \setupbodyfont [tt] \defineXMLenvironment [files] [url=] {\doifelsenothing{\XMLop{url}} {\xdef\XMLDIRurl{}} {\xdef\XMLDIRurl{\XMLop{url}/}} \startXMLignore} {\stopXMLignore} \newcounter\NOfEntries \startsetups[xmldir:file] \doglobal\increment\NOfEntries \goto {\hbox to \hsize \bgroup \XMLflush{base} \hss \hbox to 2em{\XMLflush{type}\hss} \quad \quad \hbox to 5em{\hss\XMLflush{size}} \quad \quad \XMLflush{date} \egroup} [url(\XMLDIRurl\XMLop{name})]% [program(\XMLDIRurl\XMLop{name})] \stopsetups \defineXMLenvironment [directory] [name=] {\directory{Path \XMLop{name}}} {} \defineXMLenvironment [file] [name=] {\bgroup} {\setups[xmldir:file] \endgraf \egroup} \defineXMLsave[base] \defineXMLsave[type] \defineXMLsave[size] \defineXMLsave[date] \starttext \processXMLfilegrouped{\inputfilename} \ifnum\NOfEntries=0 There are no files found that match the pattern. \fi \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-cap.lua0000644000175000017500000002313012130411274024122 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-cap'] = { version = 1.001, comment = "companion to typo-cap.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, type = next, type local format, insert = string.format, table.insert local div = math.div local trace_casing = false trackers.register("typesetters.casing", function(v) trace_casing = v end) local report_casing = logs.reporter("typesetting","casing") local nodes, node = nodes, node local traverse_id = node.traverse_id local copy_node = node.copy local end_of_math = node.end_of_math local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local kerncodes = nodes.kerncodes local glyph_code = nodecodes.glyph local kern_code = nodecodes.kern local math_code = nodecodes.math local kerning_code = kerncodes.kerning local userskip_code = skipcodes.userskip local tasks = nodes.tasks local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local fontchar = fonthashes.characters local variables = interfaces.variables local v_reset = variables.reset local chardata = characters.data typesetters = typesetters or { } local typesetters = typesetters typesetters.cases = typesetters.cases or { } local cases = typesetters.cases cases.actions = { } local actions = cases.actions cases.attribute = c_cases -- no longer needed local a_cases = attributes.private("case") local lastfont = nil -- we use char(0) as placeholder for the larger font, so we need to remove it -- before it can do further harm -- -- we could do the whole glyph run here (till no more attributes match) but -- then we end up with more code .. maybe i will clean this up anyway as the -- lastfont hack is somewhat ugly .. on the other hand, we need to deal with -- cases like: -- -- \WORD {far too \Word{many \WORD{more \word{pushed} in between} useless} words} local uccodes = characters.uccodes local lccodes = characters.lccodes local function helper(start, codes, special, attribute, once) local char = start.char local dc = codes[char] if dc then local fnt = start.font if special then -- will become function if start.char == 0 then lastfont = fnt local prev, next = start.prev, start.next prev.next = next if next then next.prev = prev end return prev, true elseif lastfont and start.prev.id ~= glyph_code then fnt = lastfont start.font = lastfont end end local ifc = fontchar[fnt] if type(dc) == "table" then local ok = true for i=1,#dc do ok = ok and ifc[dc[i]] end if ok then -- tood; use generic injector local prev, original = start, start for i=1,#dc do local chr = dc[i] prev = start if i == 1 then start.char = chr else local g = copy_node(original) g.char = chr local next = start.next g.prev = start if next then g.next = next start.next = g next.prev = g end start = g end end if once then lastfont = nil end return prev, true end if once then lastfont = nil end return start, false elseif ifc[dc] then start.char = dc if once then lastfont = nil end return start, true end end if once then lastfont = nil end return start, false end local registered, n = { }, 0 local function register(name,f) if type(f) == "function" then n = n + 1 actions[n] = f registered[name] = n return n else local n = registered[f] registered[name] = n return n end end cases.register = register local function WORD(start,attribute) lastfont = nil return helper(start,uccodes) end local function word(start,attribute) lastfont = nil return helper(start,lccodes) end local function Word(start,attribute,attr) lastfont = nil local prev = start.prev if prev and prev.id == kern_code and prev.subtype == kerning_code then prev = prev.prev end if not prev or prev.id ~= glyph_code then --- only the first character is treated for n in traverse_id(glyph_code,start.next) do if n[attribute] == attr then n[attribute] = unsetvalue else -- break -- we can have nested mess end end -- we could return the last in the range and save some scanning -- but why bother return helper(start,uccodes) else return start, false end end local function Words(start,attribute) lastfont = nil local prev = start.prev if prev and prev.id == kern_code and prev.subtype == kerning_code then prev = prev.prev end if not prev or prev.id ~= glyph_code then return helper(start,uccodes) else return start, false end end local function capital(start,attribute) -- 3 return helper(start,uccodes,true,attribute,true) end local function Capital(start,attribute) -- 4 return helper(start,uccodes,true,attribute,false) end local function none(start) return start, false end local function random(start) lastfont = nil local ch = start.char local mr = math.random -- local tfm = fontdata[start.font].characters local tfm = fontchar[start.font] if lccodes[ch] then while true do local d = chardata[mr(1,0xFFFF)] if d then local uc = uccodes[d] if uc and tfm[uc] then -- this also intercepts tables start.char = uc return start, true end end end elseif uccodes[ch] then while true do local d = chardata[mr(1,0xFFFF)] if d then local lc = lccodes[d] if lc and tfm[lc] then -- this also intercepts tables start.char = lc return start, true end end end end return start, false end register(variables.WORD, WORD) -- 1 register(variables.word, word) -- 2 register(variables.Word, Word) -- 3 register(variables.Words, Words) -- 4 register(variables.capital, capital) -- 5 register(variables.Capital, Capital) -- 6 register(variables.none, none) -- 7 (dummy) register(variables.random, random) -- 8 register(variables.cap, variables.capital) -- clone register(variables.Cap, variables.Capital) -- clone -- node.traverse_id_attr local function process(namespace,attribute,head) -- not real fast but also not used on much data lastfont = nil local lastattr = nil local done = false local start = head while start do -- while because start can jump ahead local id = start.id if id == glyph_code then local attr = start[attribute] if attr and attr > 0 then if attr ~= lastattr then lastfont = nil lastattr = attr end start[attribute] = unsetvalue local action = actions[attr%100] -- map back to low number if action then start, ok = action(start,attribute,attr) done = done and ok if trace_casing then report_casing("case trigger %a, instance %a, result %a",attr%100,div(attr,100),ok) end elseif trace_casing then report_casing("unknown case trigger %a",attr) end end elseif id == math_code then start = end_of_math(start) end if start then -- why test start = start.next end end lastfont = nil return head, done end local m, enabled = 0, false -- a trick to make neighbouring ranges work function cases.set(n) if n == v_reset then n = unsetvalue else n = registered[n] or tonumber(n) if n then if not enabled then tasks.enableaction("processors","typesetters.cases.handler") if trace_casing then report_casing("enabling case handler") end enabled = true end if m == 100 then m = 1 else m = m + 1 end n = m * 100 + n else n = unsetvalue end end texattribute[a_cases] = n -- return n -- bonus end cases.handler = nodes.installattributehandler { name = "case", namespace = cases, processor = process, } -- interface commands.setcharactercasing = cases.set context-2013.05.28.20130704/texmf-dist/tex/context/base/x-calcmath.lua0000644000175000017500000002630512130411274024416 0ustar norbertnorbertif not modules then modules = { } end modules ['x-calcmath'] = { version = 1.001, comment = "companion to x-calcmath.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this really needs to be redone local format, lower, upper, gsub, sub = string.format, string.lower, string.upper, string.gsub, string.sub local concat = table.concat local lpegmatch = lpeg.match local calcmath = { } local moduledata = moduledata or { } moduledata.calcmath = calcmath local list_1 = { "median", "min", "max", "round", "ln", "log", "sin", "cos", "tan", "sinh", "cosh", "tanh" } local list_2 = { "int", "sum", "prod" } local list_3 = { "f", "g" } local list_4 = { "pi", "inf" } local list_1_1 = { } local list_2_1 = { } local list_2_2 = { } local list_2_3 = { } local list_4_1 = { } local frozen = false local function freeze() for k=1,#list_1 do local v = list_1[k] list_1_1[v] = "\\".. upper(v) .." " end for k=1,#list_2 do local v = list_2[k] list_2_1[v .. "%((.-),(.-),(.-)%)"] = "\\" .. upper(v) .. "^{%1}_{%2}{%3}" list_2_2[v .. "%((.-),(.-)%)"] = "\\" .. upper(v) .. "^{%1}{%2}" list_2_3[v .. "%((.-)%)"] = "\\" .. upper(v) .. "{%1}" end for k=1,#list_4 do local v = list_4[k] list_4_1[v] = "\\" .. upper(v) end frozen = true end local entities = { ['gt'] = '>', ['lt'] = '<', } local symbols = { ["<="] = "\\LE ", [">="] = "\\GE ", ["=<"] = "\\LE ", ["=>"] = "\\GE ", ["=="] = "\\EQ ", ["<" ] = "\\LT ", [">" ] = "\\GT ", ["="] = "\\EQ ", } local function nsub(str,tag,pre,post) return (gsub(str,tag .. "(%b())", function(body) return pre .. nsub(sub(body,2,-2),tag,pre,post) .. post end)) end local function totex(str,mode) if not frozen then freeze() end local n = 0 -- crap str = gsub(str,"%s+",' ') -- xml str = gsub(str,"&(.-);",entities) -- ...E... str = gsub(str,"([%-%+]?[%d%.%+%-]+)E([%-%+]?[%d%.]+)", "{\\SCINOT{%1}{%2}}") -- ^-.. str = gsub(str,"%^([%-%+]*%d+)", "^{%1}") -- ^(...) str = nsub(str,"%^", "^{", "}") -- 1/x^2 repeat str, n = gsub(str,"([%d%w%.]+)/([%d%w%.]+%^{[%d%w%.]+})", "\\frac{%1}{%2}") until n == 0 -- todo: autoparenthesis -- int(a,b,c) for k, v in next, list_2_1 do repeat str, n = gsub(str,k,v) until n == 0 end -- int(a,b) for k, v in next, list_2_2 do repeat str, n = gsub(str,k,v) until n == 0 end -- int(a) for k, v in next, list_2_3 do repeat str, n = gsub(str,k,v) until n == 0 end -- sin(x) => {\\sin(x)} for k, v in next, list_1_1 do repeat str, n = gsub(str,k,v) until n == 0 end -- mean str = nsub(str, "mean", "\\OVERLINE{", "}") -- (1+x)/(1+x) => \\FRAC{1+x}{1+x} repeat str, n = gsub(str,"(%b())/(%b())", function(a,b) return "\\FRAC{" .. sub(a,2,-2) .. "}{" .. sub(b,2,-2) .. "}" end ) until n == 0 -- (1+x)/x => \\FRAC{1+x}{x} repeat str, n = gsub(str,"(%b())/([%+%-]?[%.%d%w]+)", function(a,b) return "\\FRAC{" .. sub(a,2,-2) .. "}{" .. b .. "}" end ) until n == 0 -- 1/(1+x) => \\FRAC{1}{1+x} repeat str, n = gsub(str,"([%.%d%w]+)/(%b())", function(a,b) return "\\FRAC{" .. a .. "}{" .. sub(b,2,-2) .. "}" end ) until n == 0 -- 1/x => \\FRAC{1}{x} repeat str, n = gsub(str,"([%.%d%w]+)/([%+%-]?[%.%d%w]+)", "\\FRAC{%1}{%2}") until n == 0 -- times str = gsub(str,"%*", " ") -- symbols -- we can use a table substitution here str = gsub(str,"([<>=][<>=]*)", symbols) -- functions str = nsub(str,"sqrt", "\\SQRT{", "}") str = nsub(str,"exp", "e^{", "}") str = nsub(str,"abs", "\\left|", "\\right|") -- d/D str = nsub(str,"D", "{\\FRAC{\\MBOX{d}}{\\MBOX{d}x}{(", ")}}") str = gsub(str,"D([xy])", "\\FRAC{{\\RM d}%1}{{\\RM d}x}") -- f/g for k,v in next, list_3 do -- todo : prepare k,v str = nsub(str,"D"..v,"{\\RM "..v.."}^{\\PRIME}(",")") str = nsub(str,v,"{\\RM "..v.."}(",")") end -- more symbols for k,v in next, list_4_1 do str = gsub(str,k,v) end -- parenthesis (optional) if mode == 2 then str = gsub(str,"%(", "\\left(") str = gsub(str,"%)", "\\right)") end -- csnames str = gsub(str,"(\\[A-Z]+)", lower) -- report return str end calcmath.totex = totex function calcmath.tex(str,mode) context(totex(str)) end function calcmath.xml(id,mode) context(totex(lxml.id(id).dt[1],mode)) end -- work in progress ... lpeg variant if false then -- todo: -- maybe rewrite to current lpeg, i.e. string replacement and no Cc's -- table approach we have now is less efficient but more flexible -- D \frac {\rm d} {{\rm d}x} -- Dx Dy \frac {{\rm d}y} {{\rm d}x} -- Df Dg {\rm f}^{\prime} -- f() g() {\rm f}() -- valid utf8 local S, P, R, C, V, Cc, Ct = lpeg.S, lpeg.P, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Ct local space = S(" \n\r\t")^0 local integer = P("-")^-1 * R("09")^1 local realpart = P("-")^-1 * R("09")^1 * S(".")^1 * R("09")^1 local number = Cc("number") * C(integer) * space local real = Cc("real") * C(realpart) * space local float = Cc("float") * C(realpart) * lpeg.P("E") * lpeg.C(integer) * space local identifier = Cc("identifier") * C(R("az","AZ")) * space local compareop = Cc("compare") * C(P("<") + P("=") + P(">") + P(">=") + P("<=") + P(">") + P("<")) * space local factorop = Cc("factor") * C(S("+-^_,")) * space local termop = Cc("term") * C(S("*/")) * space local constant = Cc("constant") * C(P("pi") + lpeg.P("inf")) * space local functionop = Cc("function") * C(R("az")^1) * space local open = P("(") * space local close = P(")") * space local grammar = P { "expression", expression = Ct(V("factor") * ((factorop+compareop) * V("factor"))^0), factor = Ct(V("term") * (termop * V("term"))^0), term = Ct( float + real + number + (open * V("expression") * close) + (functionop * open * (V("expression") * (P(",") * V("expression"))^0) * close) + (functionop * V("term")) + constant + identifier ), } local parser = space * grammar * -1 local function has_factor(t) for i=1,#t do if t[i] == "factor" then return true end end end -- can be sped up if needed ... function totex(t) if t then local one = t[1] if type(one) == "string" then local two, three = t[2], t[3] if one == "number" then context(two) elseif one == "real" then context(two) elseif one == "float" then context("\\scinot{",two,"}{",three,"}") elseif one == "identifier" then context(two) elseif one == "constant" then context("\\"..two) elseif one == "function" then if two == "sqrt" then context("\\sqrt{") totex(three) context("}") elseif two == "exp" then context(" e^{") totex(three) context("}") elseif two == "abs" then context("\\left|") totex(three) context("\\right|") elseif two == "mean" then context("\\overline{") totex(three) context("}") elseif two == "int" or two == "prod" or two == "sum" then local four, five = t[4], t[5] if five then context("\\"..two.."^{") -- context[two]("{") totex(three) context("}_{") totex(four) context("}") totex(five) elseif four then context("\\"..two.."^{") totex(three) context("}") totex(four) elseif three then context("\\"..two.." ") -- " " not needed totex(three) else context("\\"..two) end else context("\\"..two.."(") totex(three) context(")") end end else local nt = #t local hasfactor = has_factor(t) if hasfactor then context("\\left(") end totex(one) for i=2,nt,3 do local what, how, rest = t[i], t[i+1], t[i+2] if what == "factor" then if how == '^' or how == "_" then context(how) context("{") totex(rest) context("}") else context(how) totex(rest) end elseif what == "term" then if how == '/' then context("\\frac{") totex(rest) context("}{") totex(t[i+3] or "") context("}") elseif how == '*' then context("\\times") totex(rest) else context(how) totex(three) end elseif what == "compare" then if two == ">=" then context("\\ge") elseif two == "<=" then context("\\le") elseif two == ">" then context(">") elseif two == "<" then context("<") end totex(three) end end if hasfactor then context("\\right)") end end end end calcmath = { } function calcmath.parse(str) return lpegmatch(parser,str) end function calcmath.tex(str) str = totex(lpegmatch(parser,str)) return (str == "" and "[error]") or str end end context-2013.05.28.20130704/texmf-dist/tex/context/base/data-inp.lua0000644000175000017500000000161611571377075024112 0ustar norbertnorbertif not modules then modules = { } end modules ['data-inp'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local allocate = utilities.storage.allocate local resolvers = resolvers local methodhandler = resolvers.methodhandler local registermethod = resolvers.registermethod local finders = allocate { helpers = { }, notfound = function() end } local openers = allocate { helpers = { }, notfound = function() end } local loaders = allocate { helpers = { }, notfound = function() return false, nil, 0 end } registermethod("finders", finders, "uri") registermethod("openers", openers, "uri") registermethod("loaders", loaders, "uri") resolvers.finders = finders resolvers.openers = openers resolvers.loaders = loaders context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-krn.lua0000644000175000017500000003331012130411274024152 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-krn'] = { version = 1.001, comment = "companion to typo-krn.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, type, tonumber = next, type, tonumber local utfchar = utf.char local nodes, node, fonts = nodes, node, fonts local find_node_tail = node.tail or node.slide local free_node = node.free local free_nodelist = node.flush_list local copy_node = node.copy local copy_nodelist = node.copy_list local insert_node_before = node.insert_before local insert_node_after = node.insert_after local end_of_math = node.end_of_math local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local nodepool = nodes.pool local tasks = nodes.tasks local new_gluespec = nodepool.gluespec local new_kern = nodepool.kern local new_glue = nodepool.glue local nodecodes = nodes.nodecodes local kerncodes = nodes.kerncodes local skipcodes = nodes.skipcodes local glyph_code = nodecodes.glyph local kern_code = nodecodes.kern local disc_code = nodecodes.disc local glue_code = nodecodes.glue local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local math_code = nodecodes.math local kerning_code = kerncodes.kerning local userkern_code = kerncodes.userkern local userskip_code = skipcodes.userskip local spaceskip_code = skipcodes.spaceskip local xspaceskip_code = skipcodes.xspaceskip local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local chardata = fonthashes.characters local quaddata = fonthashes.quads local markdata = fonthashes.marks local v_max = interfaces.variables.max typesetters = typesetters or { } local typesetters = typesetters typesetters.kerns = typesetters.kerns or { } local kerns = typesetters.kerns kerns.mapping = kerns.mapping or { } kerns.factors = kerns.factors or { } local a_kerns = attributes.private("kern") local a_fontkern = attributes.private('fontkern') kerns.attribute = kerns.attribute storage.register("typesetters/kerns/mapping", kerns.mapping, "typesetters.kerns.mapping") storage.register("typesetters/kerns/factors", kerns.factors, "typesetters.kerns.factors") local mapping = kerns.mapping local factors = kerns.factors -- one must use liga=no and mode=base and kern=yes -- use more helpers -- make sure it runs after all others -- there will be a width adaptor field in nodes so this will change -- todo: interchar kerns / disc nodes / can be made faster local gluefactor = 4 -- assumes quad = .5 enspace kerns.keepligature = false -- just for fun (todo: control setting with key/value) kerns.keeptogether = false -- just for fun (todo: control setting with key/value) -- can be optimized .. the prev thing .. but hardly worth the effort local function kern_injector(fillup,kern) if fillup then local g = new_glue(kern) local s = g.spec s.stretch = kern s.stretch_order = 1 return g else return new_kern(kern) end end local function spec_injector(fillup,width,stretch,shrink) if fillup then local s = new_gluespec(width,2*stretch,2*shrink) s.stretch_order = 1 return s else return new_gluespec(width,stretch,shrink) end end -- needs checking ... base mode / node mode local function do_process(namespace,attribute,head,force) -- todo: glue so that we can fully stretch local start, done, lastfont = head, false, nil local keepligature = kerns.keepligature local keeptogether = kerns.keeptogether local fillup = false while start do -- faster to test for attr first local attr = force or start[attribute] if attr and attr > 0 then start[attribute] = unsetvalue local krn = mapping[attr] if krn == v_max then krn = .25 fillup = true else fillup = false end if krn and krn ~= 0 then local id = start.id if id == glyph_code then lastfont = start.font local c = start.components if c then if keepligature and keepligature(start) then -- keep 'm else c = do_process(namespace,attribute,c,attr) local s = start local p, n = s.prev, s.next local tail = find_node_tail(c) if p then p.next = c c.prev = p else head = c end if n then n.prev = tail end tail.next = n start = c s.components = nil -- we now leak nodes ! -- free_node(s) done = true end end local prev = start.prev if not prev then -- skip elseif markdata[lastfont][start.char] then -- skip else local pid = prev.id if not pid then -- nothing elseif pid == kern_code then if prev.subtype == kerning_code or prev[a_fontkern] then if keeptogether and prev.prev.id == glyph_code and keeptogether(prev.prev,start) then -- we could also pass start -- keep 'm else -- not yet ok, as injected kerns can be overlays (from node-inj.lua) prev.subtype = userkern_code prev.kern = prev.kern + quaddata[lastfont]*krn -- here done = true end end elseif pid == glyph_code then if prev.font == lastfont then local prevchar, lastchar = prev.char, start.char if keeptogether and keeptogether(prev,start) then -- keep 'm else local kerns = chardata[lastfont][prevchar].kerns local kern = kerns and kerns[lastchar] or 0 krn = kern + quaddata[lastfont]*krn -- here insert_node_before(head,start,kern_injector(fillup,krn)) done = true end else krn = quaddata[lastfont]*krn -- here insert_node_before(head,start,kern_injector(fillup,krn)) done = true end elseif pid == disc_code then -- a bit too complicated, we can best not copy and just calculate -- but we could have multiple glyphs involved so ... local disc = prev -- disc local pre, post, replace = disc.pre, disc.post, disc.replace local prv, nxt = disc.prev, disc.next if pre and prv then -- must pair with start.prev -- this one happens in most cases local before = copy_node(prv) pre.prev = before before.next = pre before.prev = nil pre = do_process(namespace,attribute,before,attr) pre = pre.next pre.prev = nil disc.pre = pre free_node(before) end if post and nxt then -- must pair with start local after = copy_node(nxt) local tail = find_node_tail(post) tail.next = after after.prev = tail after.next = nil post = do_process(namespace,attribute,post,attr) tail.next = nil disc.post = post free_node(after) end if replace and prv and nxt then -- must pair with start and start.prev local before = copy_node(prv) local after = copy_node(nxt) local tail = find_node_tail(replace) replace.prev = before before.next = replace before.prev = nil tail.next = after after.prev = tail after.next = nil replace = do_process(namespace,attribute,before,attr) replace = replace.next replace.prev = nil after.prev.next = nil disc.replace = replace free_node(after) free_node(before) else if prv and prv.id == glyph_code and prv.font == lastfont then local prevchar, lastchar = prv.char, start.char local kerns = chardata[lastfont][prevchar].kerns local kern = kerns and kerns[lastchar] or 0 krn = kern + quaddata[lastfont]*krn -- here else krn = quaddata[lastfont]*krn -- here end disc.replace = kern_injector(false,krn) -- only kerns permitted, no glue end end end elseif id == glue_code then local subtype = start.subtype if subtype == userskip_code or subtype == xspaceskip_code or subtype == spaceskip_code then local s = start.spec local w = s.width if w > 0 then local width, stretch, shrink = w+gluefactor*w*krn, s.stretch, s.shrink start.spec = spec_injector(fillup,width,stretch*width/w,shrink*width/w) done = true end end elseif id == kern_code then -- if start.subtype == kerning_code then -- handle with glyphs -- local sk = start.kern -- if sk > 0 then -- start.kern = sk*krn -- done = true -- end -- end elseif lastfont and (id == hlist_code or id == vlist_code) then -- todo: lookahead local p = start.prev if p and p.id ~= glue_code then insert_node_before(head,start,kern_injector(fillup,quaddata[lastfont]*krn)) done = true end local n = start.next if n and n.id ~= glue_code then insert_node_after(head,start,kern_injector(fillup,quaddata[lastfont]*krn)) done = true end elseif id == math_code then start = end_of_math(start) end end end if start then start = start.next end end return head, done end local enabled = false function kerns.set(factor) if factor ~= v_max then factor = tonumber(factor) or 0 end if factor == v_max or factor ~= 0 then if not enabled then tasks.enableaction("processors","typesetters.kerns.handler") enabled = true end local a = factors[factor] if not a then a = #mapping + 1 factors[factors], mapping[a] = a, factor end factor = a else factor = unsetvalue end texattribute[a_kerns] = factor return factor end local function process(namespace,attribute,head) return do_process(namespace,attribute,head) -- no direct map, because else fourth argument is tail == true end kerns.handler = nodes.installattributehandler { name = "kern", namespace = kerns, processor = process, } -- interface commands.setcharacterkerning = kerns.set context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-ltb.mkiv0000644000175000017500000005346312130411274024270 0ustar norbertnorbert%D \module %D [ file=tabl-ltb, %D version=2002.10.31, %D title=\CONTEXT\ Table Macros, %D subtitle=Line Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % testfile: tfmetrics.tex % todo: als nx>1, dan in geval van rek tussenruimte berekenen en optellen % bij breedte, dus: nx nog niet gebruiken in combinatie met rek ! ! ! ! ! % This module is experimental, undocumented, and currently only set up % eTeX. It provides a mechanism for typesetting very large tables, % spanning many pages horizontally and vertically, with repeated % header lines and (entry) columns, tab tracking, color, etc. In does % two passes over a table, which is why the table goes into a % buffer or file. As said, tables can be real huge. % \BH \BC .. \EC \BC .. \EC \EH % append % \BR \BC .. \EC \BC .. \EC \ER % % or % % \NC .. \NC .. \NC \NR (todo: optional last \NC) % alternative: % % (1) direct run, save content in macro, but only if needed % % todo % % (2) buffered table content % % \startbuffer % \startlinetablehead % \stoplinetablehead % \startlinetablebody % \stoplinetablebody % \stopbuffer % % \processlinetablebuffer[buffer] % % in buffer : head and body % % (3) unbuffered run, multipass % % - run with starting width zero / prev run % - clip on prev run % - flush real widths \writestatus{loading}{ConTeXt Table Macros / Line Tables} \unprotect \newconstant\linetablesplitstate \newconstant\linetableheadstate \newconstant\linetablemode \definesystemvariable {le} % LinetablE \edef\??ler{\??le:r:} \edef\??lec{\??le:c:} \edef\??lew{\??le:w:} \edef\??leh{\??le:h:} \edef\??led{\??le:d:} \newif\iflinetablepreroll \newif\ifinlinetable \newcount\linetablecolumn \newcount\linetablesubcol \newdimen\linetablewidth \newdimen\linetableheight \newbox \linetablecell \let\noflinetablecolumns\!!zerocount \let\noflinetablerows \!!zerocount \let\noflinetablelines \!!zerocount \let\noflinetableparts \!!zerocount \let\linetablepart \!!plusone \let\linetablestep \!!plusone \let\linetableline \!!zerocount \let\linetablerow \!!zerocount \let\linetablerows \!!zerocount \initializetablebox \zerocount % holds repeater \newconstant\linetablehmode \newconstant\linetablepage \newconstant\linetablerepeat \unexpanded\def\setuplinetable {\dotripleempty\dosetuplinetable} \def\dosetuplinetable[#1][#2][#3]% {\ifthirdargument \getparameters[\??le:#1:#2][#3]% \else\ifsecondargument \getparameters[\??lec#1][#2]% \else \getparameters[\??le][#1]% \fi\fi} \setuplinetable [\c!n=\!!maxcard, \c!lines=\!!maxcard, \c!nx=\plusone, \c!nleft=0, \c!repeat=\v!yes, % when \c!nleft>0, repeat on both pages \c!before=, \c!after=, \c!inbetween=\page, \c!distance=\zeropoint, \c!stretch=\v!no, \c!align=\c!right, \c!leftoffset=.25ex, \c!rightoffset=\linetableparameter\c!leftoffset, \c!maxwidth=\zeropoint, \c!width=5em, \c!height=\v!fit, % \v!line = faster \c!background=, \c!backgroundcolor=] \def\linetableparameter#1% {\csname\??le#1\endcsname} \def\doifelselinetablecparameter#1% {\ifcsname\??lec\number\linetablecolumn#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\linetablecparameter#1% {\csname \ifcsname\??lec\number\linetablecolumn#1\endcsname \??lec\number\linetablecolumn \else \??le \fi #1\endcsname} \def\linetablerparameter#1% faster, leaner and meaner {\csname \ifnum\linetablerow=\zerocount % geen ifcase \ifcsname\??ler\v!header#1\endcsname \??ler\v!header#1% \else\ifcsname\??ler0#1\endcsname \??ler0#1% \else \s!empty \fi\fi \else \ifcsname\??ler\number\linetablerow#1\endcsname \??ler\number\linetablerow#1% \else\ifcsname\??ler\v!oddeven\linetablerow#1\endcsname \??ler\v!oddeven\linetablerow#1% \else \s!empty \fi\fi \fi \endcsname} \def\setnoftableslines {\doifelse{\linetableparameter\c!lines}\v!fit {% whitespace already added by vertical strut \ifdim\pagegoal<\maxdimen \scratchdimen\pagegoal \advance\scratchdimen -\pagetotal \else \scratchdimen\textheight \fi \getrawnoflines\scratchdimen \xdef\noflinetablelines{\the\noflines} \iflinetablepreroll \else \ifnum\noflinetablelines<\plustwo \page \setnoftableslines \fi \fi } {\xdef\noflinetablelines{\linetableparameter\c!lines}}} \unexpanded\def\startlinetablecell {\dosingleempty\dostartlinetablecell} \def\dostartlinetablecell[#1]% {\global\setbox\linetablecell\hbox\bgroup \iffirstargument \getparameters[\??lec\number\linetablecolumn][#1]% \fi \xdef\linetablestep{\linetablecparameter\c!nx}% \ifcase\linetablestep\or \scratchdimen\linetablecparameter\c!width \scratchskip \linetablecparameter\c!distance \else \scratchdimen \zeropoint \scratchskip \zeropoint \scratchcounter\linetablecolumn \dorecurse\linetablestep {\advance\scratchdimen\linetablecparameter\c!width %\advance\scratchskip \linetablecparameter\c!distance \global\advance \linetablecolumn\plusone \advance\scratchskip \linetablecparameter\c!distance }% \global\linetablecolumn\scratchcounter \fi \linetablemode \iflinetablepreroll \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi \else \zerocount \fi \ifcase\linetablemode \ifcase\linetablehmode % nothing \or % fit, keep it simple \or \linetablemode\plusone % line \else % some already calculated height \fi \fi \setbox\scratchbox\hbox \bgroup \dontcomplain \hskip\linetablecparameter\c!leftoffset\relax % 0 = width, unknown height % 1 = width, fixed height % 2 = no width, auto hsize \ifnum\linetablemode<\plustwo \advance\scratchdimen-\linetablecparameter\c!leftoffset \advance\scratchdimen-\linetablecparameter\c!rightoffset \fi \ifcase\linetablemode \dosetraggedcommand{\linetablecparameter\c!align}% \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup \hsize\scratchdimen \raggedcommand \else \setalignmentswitch{\linetablecparameter\c!align}% \hbox \ifcase\linetablemode \or to\scratchdimen \fi \bgroup \ifcase\alignmentswitch\hss\or\hss\fi \fi \dousestylehashparameter{\??lec\number\linetablecolumn}\c!style \dousecolorhashparameter{\??lec\number\linetablecolumn}\c!color \begstrut \ignorespaces} \newconditional\linetableautoheight \settrue\linetableautoheight \unexpanded\def\stoplinetablecell {\unskip \endstrut \ifcase\linetablemode \endgraf \else \ifcase\alignmentswitch\else\hss\fi \fi \egroup \hskip\linetablecparameter\c!rightoffset \egroup \iflinetablepreroll \box\scratchbox \else \doifelse{\linetablecparameter\c!background}\v!color {\ifconditional\linetableautoheight \hbox{\blackrule [ \c!color=\linetablecparameter\c!backgroundcolor, \c!height=\linetablerparameter{x\c!height}, \c!depth=\linetablerparameter{x\c!depth}, \c!width=\wd\scratchbox]% \hskip-\wd\scratchbox\box\scratchbox}% \else \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}% \fi}% {\box\scratchbox}% \fi \egroup} \def\savelinetablepart {\global\setbox\tablebox\linetablepart \ifnum\linetablepart=\zerocount \box\scratchbox % just storing \else \vbox {\ifvoid\tablebox\linetablepart\else\unvbox\tablebox\linetablepart\fi \doif{\linetablerparameter\c!background}\v!color {\backgroundline[\linetablerparameter\c!backgroundcolor]}% {\box\scratchbox}% is also arg to \backgroundline \endgraf \linetablerparameter\c!after}% \fi} \def\flushlinetableparts {\doglobal\increment\linetableline \ifnum\linetableline<\noflinetablelines % keep collecting \else \iflinetablepreroll % forget about them \else \dorecurse\noflinetableparts {\let\linetablepart\recurselevel \dp\tablebox\linetablepart\strutdepth % noindent en endgraf needed else whitespace mess-up! \whitespace % here not after verticalstrut \ifdim\topskipgap=\zeropoint\else \verticalstrut\nobreak\kern-\struttotal\kern-\parskip\nobreak\nointerlineskip % fix topskip \fi \noindent\strut\hbox to \hsize{\box\tablebox\linetablepart\hss}\endgraf \ifnum\linetablepart<\noflinetableparts\relax \linetableparameter\c!inbetween \fi}% \ifnum\linetablerows<\noflinetablerows\relax \linetableparameter\c!inbetween \else % after, later \fi \linetableheadstate\plusthree \global\setbox\tablebox\zerocount\emptybox % here \fi % reset \linetablerow will be an option, currently % starts at zero after split \globallet\linetablerow\!!zerocount \globallet\linetableline\!!zerocount \global\linetablepage\zerocount \global\linetablewidth\zeropoint \setnoftableslines \fi} \unexpanded\def\startlinetablepart {\global\linetablesubcol\zerocount \setbox\scratchbox\hbox\bgroup \dousestyleparameter{\linetablerparameter\c!style}% \dousecolorparameter{\linetablerparameter\c!color}% \ignorespaces} \unexpanded\def\stoplinetablepart {\ifnum\linetablepart>\zerocount \unskip \unskip % remove last intercolumn skip (distance+fill) \fi \egroup \iflinetablepreroll \else \ifcase\linetablepart % we're collecting the repeater \else \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax \ifdim\scratchdimen>\linetableparameter\c!stretch\else \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}% \fi \fi \fi} \def\checklinetablepart {\global\advance\linetablewidth\wd\linetablecell \global\advance\linetablecolumn\linetablestep \global\advance\linetablesubcol\linetablestep \relax %\message{\the\linetablecolumn,\the\linetablesubcol}\wait % from now on the column counter is already incremented \ifcase\linetablesplitstate \iflinetablepreroll \else \box\linetablecell % the columncounter is one ahead ! % \hskip\linetablecparameter\c!afstand \hskip\scratchskip \fi %%% \donefalse \ifcase\linetablerepeat\else % van te voren berekenen \scratchcounter\linetablecolumn\advance\scratchcounter-\plustwo \ifnum\linetablerepeat=\scratchcounter \donetrue % collecting repeater \fi \fi %%%% \ifdone % collecting repeater \else \ifnum\linetablecolumn>\getvalue{\??le::\linetablepart}\relax \donetrue \fi \fi \ifdone \stoplinetablepart \iflinetablepreroll \else \savelinetablepart \fi \ifcase\linetablepage \or \global\linetablepage \plustwo \else \global\linetablepage \plusone \fi \doglobal\increment\linetablepart \global\linetablewidth\wd\tablebox\zerocount \startlinetablepart \fi \else \donefalse \!!doneafalse \ifcase\linetablerepeat\else % van te voren berekenen \scratchcounter\linetablecolumn \advance\scratchcounter-\plustwo \ifnum\linetablerepeat=\scratchcounter \donetrue % collecting repeater \fi \fi \ifdone \!!doneatrue % collecting repeater \else\ifdim\linetablewidth>\hsize \donetrue \else % \global\advance\linetablewidth\linetablecparameter\c!afstand\relax \global\advance\linetablewidth\scratchskip \ifdim\linetablewidth>\hsize % ? \donetrue \fi \fi\fi \ifdone \stoplinetablepart \savelinetablepart \ifcase\linetablepage \or \global\linetablepage \plustwo \else \global\linetablepage \plusone \fi \doglobal\increment\linetablepart \ifnum\linetablepart>\noflinetableparts \globallet\noflinetableparts\linetablepart \initializetablebox\linetablepart \fi \global\linetablewidth\wd\linetablecell \startlinetablepart \if!!doneb \else \ifcase\linetablerepeat \else % check for left/right page \ifcase\linetablepage\donetrue\or\donetrue\or\donefalse\fi\ifdone % insert repeater \global\advance\linetablewidth\wd\tablebox\zerocount \iflinetablepreroll\kern\wd\else\unhcopy\fi\tablebox\zerocount \fi \fi \fi \fi \iflinetablepreroll \else \box\linetablecell % the columncounter is one ahead ! % \hskip\linetablecparameter\c!afstand % \hskip\scratchskip \dorecurse\linetablestep{\strut\hfil}% \hskip\scratchskip \fi \fi} % \linetableparameter\c!var -> \@@levar (when no classes) \unexpanded\def\startlinetablerun % to do: quit when nested {\bgroup \inlinetabletrue % autowidth \doif{\linetableparameter\c!maxwidth}\v!fit {\setuplinetable[\c!maxwidth=\zeropoint]}% \processaction [\linetableparameter\c!stretch] [ \v!no=>{\setuplinetable[\c!stretch=\maxdimen]},% no stretch \v!yes=>{\setuplinetable[\c!stretch=\zeropoint]}]% max stretch \linetablerepeat\linetableparameter\c!nleft \linetablesplitstate % = \ifdim\linetableparameter\c!maxwidth>\zeropoint \zerocount \else \plusone \fi % optional prevdepth correction \iflinetablepreroll \globallet\noflinetablerows\!!zerocount \else \linetableparameter\c!before \fi \globallet\linetablerows\!!zerocount \globallet\noflinetablecolumns\!!zerocount \globallet\noflinetableparts\!!zerocount \!!counta\zerocount \def\docommand##1% {\doglobal\increment\noflinetableparts \advance\!!counta##1% \setxvalue{\??le::\noflinetableparts}{\the\!!counta}}% \processcommacommand[\linetableparameter\c!n]\docommand \initializetableboxes\noflinetableparts \ifcase\linetablerepeat \globallet\linetablepart\!!plusone \else \globallet\linetablepart\!!zerocount % repeater \fi \globallet\linetablestep\!!plusone \globallet\linetableline\!!zerocount \globallet\linetablerow \!!zerocount \global\linetablecolumn \zerocount \global\linetablesubcol \zerocount \global\linetablewidth \zeropoint \iflinetablepreroll \else \ifdim\pagetotal>\zeropoint \verticalstrut\kern-\struttotal \fi \fi \setnoftableslines \checklinetablepage \let\BR\linetableBR \let\ER\linetableER \let\BH\linetableBR \let\EH\linetableER \let\BC\linetableBC \let\EC\linetableEC \let\NC\linetableNC \let\NR\linetableNR \flushlinetablehead} \unexpanded\def\stoplinetablerun {\globallet\linetableline\!!maxcard \linetableheadstate\zerocount % blocked \flushlinetableparts \iflinetablepreroll \else \linetableparameter\c!after \fi \globallet\linetablepart \!!zerocount \globallet\noflinetableparts\!!zerocount \egroup} \def\checklinecolumndimension#1#2#3% {\expandafter\xdef\csname#1\number#3\endcsname {\expandafter\ifx\csname#1\number#3\endcsname\relax \the#2\linetablecell \else\ifdim\csname#1\number#3\endcsname<#2\linetablecell \the#2\linetablecell \else \csname#1\number#3\endcsname \fi\fi}} \def\checklinecolumnwidth {\checklinecolumndimension\??lew\wd\linetablecolumn} \def\checklinecolumnheight{\checklinecolumndimension\??leh\ht\linetablerow} \def\checklinecolumndepth {\checklinecolumndimension\??led\dp\linetablerow} \def\linetableBR {\dosingleempty\dolinetableBR} \def\dolinetableBR[#1]% #1 not yet implemented {\ifnum\linetableheadstate=1\else \doglobal\increment\linetablerow \doglobal\increment\linetablerows \fi \global\linetablecolumn\plusone \global\linetablesubcol\plusone % \linetableheight\linetablerparameter\c!height % % \ifx\linetableheight\empty % % nothing % \else\ifx\linetableheight\v!fit % % keep it simple % \else\ifx\linetableheight\v!line % \linetablemode\plusone % \else % \!!heighta\linetableheight % \advance\!!heighta-\strutdepth % \fi\fi\fi % \linetableheight\zeropoint \edef\!!stringa{\linetablerparameter\c!height}% \ifx\!!stringa\empty \linetablehmode\zerocount \else\ifx\!!stringa\v!fit \linetablehmode\plusone \else\ifx\!!stringa\v!line \linetablehmode\plustwo \else \linetableheight\!!stringa \advance\linetableheight-\strutdepth \fi\fi\fi % \startlinetablepart} \def\linetableBC {\startlinetablecell} \def\linetableEC {\stoplinetablecell \iflinetablepreroll \checklinecolumnwidth \checklinecolumnheight \checklinecolumndepth \fi \checklinetablepart} \def\linetableER {% \stoplinetablecell % no \box\linetablecell, i.e. dummy columnn, last \NC \NR \stoplinetablepart \savelinetablepart \advance\linetablecolumn \minusone \ifnum\linetablecolumn>\noflinetablecolumns \xdef\noflinetablecolumns{\number\linetablecolumn}% \fi \flushlinetableparts \global\linetablecolumn\zerocount \global\linetablewidth \zeropoint \ifcase\linetablerepeat \globallet\linetablepart\!!plusone \else \globallet\linetablepart\!!zerocount % repeater \fi \checklinetablepage \flushlinetablehead} \def\checklinetablepage {\global\linetablepage\zerocount \ifcase\linetablerepeat \else \ifcase\linetablepage \doif{\linetableparameter\c!repeat}\v!no {\global\linetablepage\doifoddpageelse\plusone\plustwo}% \fi \fi} \def\flushlinetablehead {\ifcase\linetableheadstate % 0 blocked \or % 1 doing head \or % 2 head done \or % 3 trigger flush \linetableheadstate\plusone \the\@@linetablehead\relax \linetableheadstate\plustwo \fi} \def\linetableNC % first time special treatment {\relax \ifcase\linetablecolumn \linetableBR \else \linetableEC \fi \linetableBC} % beware, this will result in BR BC EC BC NR \def\linetableNR {\stoplinetablecell % dummy \linetableER} \unexpanded\def\startlinetable {\startlinetablerun} \unexpanded\def\stoplinetable {\stoplinetablerun} \unexpanded\def\startlinetableanalysis {\bgroup \linetableprerolltrue \settrialtypesetting \startlinetablerun} \unexpanded\def\stoplinetableanalysis {\stoplinetablerun \egroup \globallet\noflinetablerows\linetablerows \dorecurse\noflinetablerows % global, from last run {\linetableparameter\c!n} {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% \setevalue{\??ler\recurselevel x\c!height}{\getvalue{\??leh\recurselevel}}% \setevalue{\??ler\recurselevel x\c!depth }{\getvalue{\??led\recurselevel}}% \letgvalue{\??leh\recurselevel}\!!zeropoint \letgvalue{\??led\recurselevel}\!!zeropoint} \dorecurse\noflinetablecolumns % global, from last run {\linetableparameter\c!n} {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% \setevalue{\??lec\recurselevel\c!width}{\getvalue{\??lew\recurselevel}}% \letgvalue{\??lew\recurselevel}\!!zeropoint}} % init next table % todo: store in box instead of macro \newtoks \@@linetablehead \unexpanded\def\startlinetablehead#1\stoplinetablehead {\ifinlinetable \@@linetablehead\emptytoks \fi \linetableheadstate\plusthree % full \@@linetablehead{#1}% \ifinlinetable \flushlinetablehead \fi} \def\linetableBH {\ifx\EC\relax % signal, grabbing lines \else \@@linetablehead\emptytoks \fi \pushmacro\BC \pushmacro\EC \def\BC##1\EC{\appendtoks##1\to\@@linetablehead}% \let\EC\relax} % signal \def\linetableEH {\popmacro\EC \popmacro\BC \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead} \let\startlinetablebody\donothing \let\stoplinetablebody \donothing \def\processlinetablebuffer {\dosingleempty\doprocesslinetablebuffer} \def\doprocesslinetablebuffer[#1]% {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis \startlinetablerun \getbuffer[#1]\stoplinetablerun \egroup} \def\processlinetablefile#1% {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun \egroup} \protect \continueifinputfile{tabl-ltb.mkiv} \setuplinetable[n=6,m={2,2,2},lines=25] % m ? \setuplinetable[c][1] [width=2cm,background=color,backgroundcolor=red] \setuplinetable[c][4] [width=3cm,background=color,backgroundcolor=yellow] \setuplinetable[c][6] [width=3cm,background=color,backgroundcolor=magenta] \setuplinetable[r][odd] [background=color,backgroundcolor=gray] \setuplinetable[r][even][background=color,backgroundcolor=green] \starttext \showframe \showstruts \setupcolors[state=start] \setuppagenumbering[alternative=doublesided]\page[left] \startlinetable \NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR \dorecurse{100}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} \stoplinetable \startlinetable \NC[style=slanted,color=green,background=color,backgroundcolor=darkred,nx=2,uitlijnen=middle] xxx \NC yy \NC ddddd \NC eeee \NC ff \NC \NR \dorecurse{100}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} \stoplinetable % \startbuffer[lt] % \NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC ee \NC ff \NC \NR % \NC aaa\crlf aaa \NC b \NC cc \NC ddd \NC eeee \NC f \NC \NR % \stopbuffer % % \processlinetablebuffer[lt] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-xsl.mkii0000644000175000017500000001255611754241457024336 0ustar norbertnorbert%D \module %D [ file=xtag-xsl, %D version=2002.03.07, %D title=\CONTEXT\ XML Support, %D subtitle=XSLT processing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % FOR THIS TO WORK YOU NEED A PROPER cp8bit VECTOR % % 8 bit support has been messed up in a couple of distributions % % 0x00 0x00 % 0x01 0x01 % 0x02 0x02 % etc %D This module is rather experimental so users may expect %D changes in the interface. \unprotect \definesystemvariable {xl} \newif\iftraceXSLTprocessing % \traceXSLTprocessingtrue \def\XSLTscriptfile{\bufferprefix xlscript} % to be sped up: \def\presetXSLTcharacters {\let\par\empty \def\{{\rawcharacter{`\{}}% \string^^.. \def\}{\rawcharacter{`\}}}% \string^^.. \def\\{\rawcharacter{`\\}}}% \string^^.. \def\obeyXSLTcharacters {\setnaturalcatcodes \catcode`\\=\escapecatcode} \long\def\startXSLTscript #1 #2 % {\bgroup \obeyXSLTcharacters \doifelse{#2}{capsule}\dostartXSLTscript\nostartXSLTscript#1 #2 } \long\def\dostartXSLTscript#1 #2 #3 % {\obeylines \dodostartXSLTscript#1 #2 #3 } \long\def\dodostartXSLTscript#1 #2 #3 #4\stopXSLTscript {\egroup \long\setvalue{\??xl#1}{\doXSLTscript{#3}{#4}}} \long\def\nostartXSLTscript {\obeylines \nonostartXSLTscript} \long\def\nonostartXSLTscript#1 #2\stopXSLTscript {\egroup \long\setvalue{\??xl#1}{\doXSLTscript\empty{#2}}} \long\def\donormalXSLTscript#1#2% {\includeXSLTscript{b-capsule-#1}% #2% \includeXSLTscript{e-capsule-#1}} \def\includeXSLTscript#1% {\csname\ifcsname\??xl#1\endcsname\??xl#1\else\s!empty\fi\endcsname} \startXSLTscript b-capsule-1.0 \stopXSLTscript \startXSLTscript e-capsule-1.0 \stopXSLTscript \def\applyXSLTscript {\dotripleempty\doapplyXSLTscript} \long\def\doapplyXSLTscript[#1][#2][#3]% {\ifthirdargument \bgroup \let\doXSLTscript\donormalXSLTscript \presetXSLTcharacters \donefalse \def\docommand##1{\dodoapplyXSLTscript{##1}{\ifdone#3\else#2\fi}{#3}\donetrue}% \processcommalist[#1]\docommand \egroup \else \applyXSLTscript[#1][#2][#2]% \fi} % Since a \XML\ file is loaded into memory as a tree, we % can safely use the same input and output filename, thereby % avoiding temporary files. \def\dodoapplyXSLTscript#1#2#3% {\bgroup \doifundefined{\??xl#1}% {\writestatus{XSLT}{unknown script #1}} {\writestatus{XSLT}{convert #2 into #3 using #1}% \edef\par{\outputnewlinechar}% \edef\!!stringc{\getvalue{\??xl#1}}% \immediate\openout\scratchwrite=\XSLTscriptfile.xsl \immediate\write\scratchwrite{\!!stringc}% \immediate\closeout\scratchwrite \iftraceXSLTprocessing\wait\fi \executeXSLT{\XSLTscriptfile.xsl}{#2}{#3}% \iftraceXSLTprocessing\wait\fi}% \egroup} \def\executeXSLT#1#2#3% script input output {\executesystemcommand{xsltproc -o #3 #1 #2}} \long\def\applyXSLTtobuffer {\dodoubleempty\doapplyXSLTtobuffer} \long\def\doapplyXSLTtobuffer[#1][#2]% {\expanded{\applyXSLTscript[#1][\TEXbufferfile{\ifsecondargument#2\else\jobname\fi}]}} \def\resetXSLTscripting#1% {\setgvalue{\??xl\s!dummy}{\doXSLTscript{#1}{}}} \resetXSLTscripting{1.0} \def\startXSLTscripting {\bgroup \obeyXSLTcharacters \obeylines \dostartXSLTscripting} \long\def\dostartXSLTscripting#1\stopXSLTscripting {\egroup \let\doXSLTscript\doextendXSLTscript \getvalue{\??xl\s!dummy}{#1}} \long\def\doextendXSLTscript#1#2#3% {\setgvalue{\??xl\s!dummy}{\doXSLTscript{#1}{#2#3}}} \def\applyXSLTscripting {\applyXSLTscript[\s!dummy]} \protect \doifnotmode{demo}{\endinput} % \def\Whow{Whow It Works} % % \startXSLTscript test capsule 1.0 % % % % \Whow \\ # % % % % % % \stopXSLTscript % % \applyXSLTscript [test] [figtest.xml] [crap.tmp] \typefile{crap.tmp} % % \startbuffer % world % \stopbuffer % % \applyXSLTtobuffer[test] \typebuffer % % \startXSLTscripting % % \stopXSLTscripting % % \startXSLTscripting % % % % \stopXSLTscripting % % \startXSLTscripting % % % % \stopXSLTscripting % % \applyXSLTscripting [figtest.xml] [crap.tmp] \typefile{crap.tmp} \starttext \startXSLTscript another name: \\par \stopXSLTscript \applyXSLTscript [another] [cont-en.xml] [whatever.tmp] \readfile{whatever.tmp}{}{} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-1.mkii0000644000175000017500000002631611754241457024265 0ustar norbertnorbert%D \module %D [ file=regi-8859-1, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-1 (West European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-1/Latin1 input encoding (regime) for West European languages, %D see also cp1252 and iso-8859-15 (includes Euro). %D %D (Contributors to the original file: Daniel Flipo, Hans Hagen \& Denis Roegel.) %D %D Usage: \type{\enableregime[8859-1]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-1] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\exclamdown} % 00A1 INVERTED EXCLAMATION MARK \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\textyen} % 00A5 YEN SIGN \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\ordfeminine} % 00AA FEMININE ORDINAL INDICATOR \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\textmacron} % 00AF MACRON \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\ordmasculine} % 00BA MASCULINE ORDINAL INDICATOR \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\onequarter} % 00BC VULGAR FRACTION ONE QUARTER \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\threequarter} % 00BE VULGAR FRACTION THREE QUARTERS \defineactivetoken 191 {\questiondown} % 00BF INVERTED QUESTION MARK \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Eth} % 00D0 LATIN CAPITAL LETTER ETH \defineactivetoken 209 {\Ntilde} % 00D1 LATIN CAPITAL LETTER N WITH TILDE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\Thorn} % 00DE LATIN CAPITAL LETTER THORN \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\eth} % 00F0 LATIN SMALL LETTER ETH \defineactivetoken 241 {\ntilde} % 00F1 LATIN SMALL LETTER N WITH TILDE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\thorn} % 00FE LATIN SMALL LETTER THORN \defineactivetoken 255 {\ydiaeresis} % 00FF LATIN SMALL LETTER Y WITH DIAERESIS \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-prs.mkii0000644000175000017500000000350211754241457024323 0ustar norbertnorbert%D \module %D [ file=xtag-prs, %D version=2004.08.18, %D title=\CONTEXT\ XML Macros, %D subtitle=Parsing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \def\analyzefunction#1% {\expanded{\doanalyzefunction#1\relax\relax(#1)}\empty\relax\end} \def\doanalyzefunction#1#2(#3)#4\relax#5\end {\ifx#4\empty \let\functionname\empty \else \def\functionname{#1#2}% \fi \getfunctionargs#3,\empty,\empty,\empty,\empty,\empty,\empty,\empty,\empty\relax} \def\getfunctionargs#1,#2,#3,#4,#5,#6,#7,#8,#9\relax {\edef\functionA{#1}\edef\functionB{#2}% \edef\functionC{#3}\edef\functionD{#4}% \edef\functionE{#5}\edef\functionF{#6}% \edef\functionG{#7}\edef\functionH{#8}} % \analyzefunction{x} [\functionname][a:\functionA/b:\functionB/c:\functionC/d:\functionD] \endgraf % \analyzefunction{sin(x)} [\functionname][a:\functionA/b:\functionB/c:\functionC/d:\functionD] \endgraf % \analyzefunction{1pt,2pt,3pt,4pt} [\functionname][a:\functionA/b:\functionB/c:\functionC/d:\functionD] \endgraf % \analyzefunction{rect(1pt,2pt,3pt,4pt)} [\functionname][a:\functionA/b:\functionB/c:\functionC/d:\functionD] \endgraf % \analyzefunction{1pt,2pt,3pt,4pt,5pt,6pt,7pt,8pt} [\functionname][e:\functionE/f:\functionF/g:\functionG/h:\functionH] \endgraf % \analyzefunction{rect(1pt,2pt,3pt,4pt,5pt,6pt,7pt,8pt)} [\functionname][e:\functionE/f:\functionF/g:\functionG/h:\functionH] \endgraf % todo [#1][settings][maxwidth,maxheight,method=] with method=x y xy [1] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-trf.mkiv0000644000175000017500000013426112130411274024314 0ustar norbertnorbert%D \module %D [ file=grph-trf, %D version=2006.08.26, % overhaul/split of 1997.03.31 core-fig %D title=\CONTEXT\ Graphic Macros, %D subtitle=Transformations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Graphic Macros / Transformations} \unprotect %D We probably use too many dimens as the width calculations can %D go away. Some of this is an inheritance of limited backends %D (some supported fractions, some 1000's, some dimentions) so %D we calculate all of them. Nowadays scaling is always available %D so we could simplify the code. On the other hand, we now get %D some extra values for free. %D %D We could move the calculations to \LUA\ and clean up this %D lot anyway. On the other hand, there is some danger of messing %D up so it has a real low priority. % local: \newdimen\d_grph_scale_x_size \newdimen\d_grph_scale_y_size \newdimen\d_grph_scale_x_offset \newdimen\d_grph_scale_y_offset \newdimen\d_grph_scale_h_size \newdimen\d_grph_scale_v_size \newconditional\c_grph_scale_done \newconditional\c_grph_scale_scaling_done \newconditional\c_grph_scale_limit_factors \settrue\c_grph_scale_limit_factors \newdimen\d_grph_scale_wd \newdimen\d_grph_scale_ht \newdimen\d_grph_scale_dp % global \newdimen\d_grph_scale_used_x_size \newdimen\d_grph_scale_used_y_size \newcount\c_grph_scale_used_x_scale \newcount\c_grph_scale_used_y_scale \let \m_grph_scale_used_x_scale\!!plusone \let \m_grph_scale_used_y_scale\!!plusone \newdimen\d_grph_scale_outer_v_size % we cannot manipulate any global vsize ! % scratch: \let\m_grph_scale_temp \empty \let\m_grph_scale_temp_x\empty \let\m_grph_scale_temp_y\empty % public: \let\finalscaleboxxscale \!!plusone \let\finalscaleboxyscale \!!plusone \let\finalscaleboxwidth \!!zeropoint \let\finalscaleboxheight \!!zeropoint % we can let sx/sy win (first check) \installcorenamespace{scale} \installcorenamespace{scalegrid} \installcorenamespace{scalenorm} \installcommandhandler \??scale {scale} \??scale % we can have instances \setupscale [\c!sx=\scaleparameter\c!s, \c!sy=\scaleparameter\c!s, \c!s=1, %\c!scale=, %\c!xscale=, %\c!yscale=, %\c!width=, %\c!height=, %\c!lines=, %\c!factor=, %\c!hfactor=, %\c!wfactor=, %\c!grid=, %\c!equalwidth=, %\c!equalheight=, \c!maxwidth=\scaleparameter\c!width, \c!maxheight=\scaleparameter\c!height] \unexpanded\def\scale{\dodoubleempty\grph_scale} % we could have: \freezeparameter\c!scale etc (less backtracking when used multiple) \def\grph_scale[#1][#2]% {\bgroup % this is quite common so we might make this a helper \ifsecondargument \edef\currentscale{#1}% \setupcurrentscale[#2]% \else\iffirstargument \doifassignmentelse{#1} {\let\currentscale\empty \setupcurrentscale[#1]} {\edef\currentscale{#1}}% \else \let\currentscale\empty \fi\fi % \dowithnextboxcs\grph_scale_finish\hbox} \def\grph_scale_finish {% todo: p_scale_ \edef\p_scale {\scaleparameter\c!scale }% \edef\p_xscale {\scaleparameter\c!xscale }% \edef\p_yscale {\scaleparameter\c!yscale }% \edef\p_width {\scaleparameter\c!width }% \edef\p_height {\scaleparameter\c!height }% \edef\p_depth {\scaleparameter\c!depth }% \edef\p_lines {\scaleparameter\c!lines }% \edef\p_factor {\scaleparameter\c!factor }% \edef\p_hfactor {\scaleparameter\c!hfactor }% \edef\p_wfactor {\scaleparameter\c!wfactor }% % \edef\p_grid {\scaleparameter\c!grid }% used once \edef\p_maxwidth {\scaleparameter\c!maxwidth }% \edef\p_maxheight {\scaleparameter\c!maxheight }% \edef\p_sx {\scaleparameter\c!sx }% \edef\p_sy {\scaleparameter\c!sy }% \edef\p_equalwidth {\scaleparameter\c!equalwidth }% \edef\p_equalheight{\scaleparameter\c!equalheight}% % \d_grph_scale_dp\dp\nextbox \ifx\p_depth\v!no \ifzeropt\d_grph_scale_dp \else \setbox\nextbox\hbox{\raise\d_grph_scale_dp\box\nextbox}% new \d_grph_scale_dp\dp\nextbox \fi \fi \d_grph_scale_wd\wd\nextbox \d_grph_scale_ht\ht\nextbox \d_grph_scale_dp\dp\nextbox % \global\let\finalscaleboxxscale \!!plusone \global\let\finalscaleboxyscale \!!plusone \xdef \finalscaleboxwidth {\the\d_grph_scale_wd}% \xdef \finalscaleboxheight{\the\d_grph_scale_ht}% % \forgetall \dontcomplain % \setfalse\c_grph_scale_done \grph_scale_calculate \ifconditional\c_grph_scale_done \grph_scale_apply \fi \grph_scale_position % \box\nextbox \egroup} \def\grph_scale_apply {\d_grph_scale_wd\finalscaleboxxscale\d_grph_scale_wd \d_grph_scale_ht\finalscaleboxyscale\d_grph_scale_ht \d_grph_scale_dp\finalscaleboxyscale\d_grph_scale_dp \setbox\nextbox\hbox {\dostartscaling \finalscaleboxxscale \finalscaleboxyscale \smashedbox\nextbox \dostopscaling}% \wd\nextbox\d_grph_scale_wd \ht\nextbox\d_grph_scale_ht \dp\nextbox\d_grph_scale_dp} \def\m_grph_scale_stamp_c{11} \def\grph_scale_calculate {\ifdim\d_grph_scale_ht>\zeropoint \ifdim\d_grph_scale_wd>\zeropoint \edef\m_grph_scale_stamp_a{\p_scale\p_xscale\p_yscale\p_factor\p_wfactor\p_hfactor\p_lines\p_width\p_height}% \edef\m_grph_scale_stamp_b{\p_sx\p_sy}% \ifx\m_grph_scale_stamp_a\empty \ifx\m_grph_scale_stamp_b\m_grph_scale_stamp_c % no scaling, don't change this (previous attempts failed anyway) \insidefloattrue % trick \grph_scale_calculations_yes \else \grph_scale_check_sx_sy \grph_scale_calculations_nop \fi \else \ifx\m_grph_scale_stamp_b\empty % no need to check further \else \grph_scale_check_sx_sy \fi \grph_scale_calculations_yes \fi \fi \fi} \def\grph_scale_check_sx_sy {\ifdim\p_sx\onepoint=\onepoint\else\edef\p_width {\the\dimexpr\p_sx\d_grph_scale_wd}\fi \ifdim\p_sy\onepoint=\onepoint\else\edef\p_height{\the\dimexpr\p_sy\d_grph_scale_ht}\fi} \def\grph_scale_rounded#1% {\expandafter\expandafter\expandafter\grph_scale_rounded_indeed \expandafter\WITHOUTPT\the\dimexpr#1\points*100+32768\scaledpoint\relax.\relax} \def\grph_scale_rounded_indeed#1.#2\relax{#1} \def\grph_scale_calculations_nop {\settrue\c_grph_scale_done \xdef\finalscaleboxwidth {\the\dimexpr\p_sx\d_grph_scale_wd\relax}% \xdef\finalscaleboxheight{\the\dimexpr\p_sy\d_grph_scale_ht\relax}% \glet\finalscaleboxxscale\p_sx \glet\finalscaleboxyscale\p_sy \ifx\finalscaleboxxscale\empty\let\finalscaleboxxscale\!!plusone\fi \ifx\finalscaleboxyscale\empty\let\finalscaleboxyscale\!!plusone\fi} \let\grph_scale_calculations_report\relax % \def\grph_scale_calculations_report % {\writestatus % {scaled}% % {wd:\finalscaleboxwidth,ht:\finalscaleboxheight % ,xscale:\finalscaleboxxscale,yscale:\finalscaleboxyscale}} % \def\grph_scale_calculations_yes % {\settrue\c_grph_scale_done % % initial values % \d_grph_scale_x_offset\zeropoint % \d_grph_scale_y_offset\zeropoint % \d_grph_scale_x_size \d_grph_scale_wd % \d_grph_scale_y_size \d_grph_scale_ht % alleen ht wordt geschaald! % % final values % \global\d_grph_scale_used_x_size \zeropoint % see note * (core-fig) % \global\d_grph_scale_used_y_size \zeropoint % see note * (core-fig) % \c_grph_scale_used_x_scale \plusone % see note * (core-fig) % \c_grph_scale_used_y_scale \plusone % see note * (core-fig) % \let\m_grph_scale_used_x_scale \!!plusone % \let\m_grph_scale_used_y_scale \!!plusone % % preparations % \setfalse\c_grph_scale_scaling_done % \grph_scale_check_parameters % % calculators % % beware, they operate in sequence, and calculate missing dimensions / messy % % grph_scale_by_nature % when? needed? % \ifconditional\c_grph_scale_scaling_done\else\grph_scale_by_factor \fi % \ifconditional\c_grph_scale_scaling_done\else\grph_scale_by_scale \fi % \ifconditional\c_grph_scale_scaling_done\else\grph_scale_by_dimension\fi % % used in actual scaling % \xdef\finalscaleboxwidth {\the\d_grph_scale_used_x_size}% % \xdef\finalscaleboxheight {\the\d_grph_scale_used_y_size}% % \xdef\finalscaleboxxscale {\luaexpr{\number\c_grph_scale_used_x_scale/1000}}% % \xdef\finalscaleboxyscale {\luaexpr{\number\c_grph_scale_used_y_scale/1000}}% % \grph_scale_calculations_report} \def\grph_scale_calculations_yes {\settrue\c_grph_scale_done % initial values \d_grph_scale_x_offset\zeropoint \d_grph_scale_y_offset\zeropoint \d_grph_scale_x_size \d_grph_scale_wd \d_grph_scale_y_size \d_grph_scale_ht % alleen ht wordt geschaald! % final values \global\d_grph_scale_used_x_size \zeropoint % see note * (core-fig) \global\d_grph_scale_used_y_size \zeropoint % see note * (core-fig) \c_grph_scale_used_x_scale \plusone % see note * (core-fig) \c_grph_scale_used_y_scale \plusone % see note * (core-fig) \let\m_grph_scale_used_x_scale \!!plusone \let\m_grph_scale_used_y_scale \!!plusone % preparations \setfalse\c_grph_scale_scaling_done \grph_scale_check_parameters % calculators % beware, they operate in sequence, and calculate missing dimensions / messy % grph_scale_by_nature % when? needed? \ifconditional\c_grph_scale_scaling_done\else\grph_scale_by_factor \fi \ifconditional\c_grph_scale_scaling_done\else\grph_scale_by_scale \fi \ifconditional\c_grph_scale_scaling_done\else\grph_scale_by_dimension\fi % used in actual scaling \xdef\finalscaleboxwidth {\the\d_grph_scale_used_x_size}% \xdef\finalscaleboxheight {\the\d_grph_scale_used_y_size}% \glet\finalscaleboxxscale \m_grph_scale_used_x_scale \glet\finalscaleboxyscale \m_grph_scale_used_y_scale \grph_scale_calculations_report} \setvalue{\??scalegrid\v!yes }{\getnoflines \d_grph_scale_used_y_size\edef\p_height{\the\noflines\lineheight}} \setvalue{\??scalegrid\v!height }{\getrawnoflines\d_grph_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight+\strutdepth}} \setvalue{\??scalegrid\v!depth }{\getrawnoflines\d_grph_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight-\strutdepth}} \setvalue{\??scalegrid\v!halfline}{\getrawnoflines\d_grph_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight+.5\lineheight}} \setvalue{\??scalegrid\v!fit }{\getrawnoflines\d_grph_scale_used_y_size\edef\p_height{\the\noflines\lineheight}} \letvalue{\??scalegrid\empty }\donothing \def\grph_scale_check_parameters % resolve self referencing loops {\ifx\p_maxwidth \empty\else \edef\p_maxwidth {\the\dimexpr\p_maxwidth }\fi \ifx\p_maxheight\empty\else \edef\p_maxheight{\the\dimexpr\p_maxheight }\fi \ifx\p_lines \empty\else \edef\p_height {\the\dimexpr\p_lines\lineheight}\fi \getvalue{\??scalegrid\scaleparameter\c!grid}} \def\grph_scale_by_nature % where ! ! ! ! ! {\ifx\p_width \empty\else \global\d_grph_scale_used_x_size\p_width \fi \ifx\p_height\empty\else \global\d_grph_scale_used_y_size\p_height\fi \ifx\p_scale \empty\else \c_grph_scale_used_x_scale\p_scale \c_grph_scale_used_y_scale\p_scale \fi \ifx\p_xscale\empty\else \c_grph_scale_used_x_scale\p_xscale\fi \ifx\p_yscale\empty\else \c_grph_scale_used_y_scale\p_yscale\fi} % \defineexternalfigure[width-6][factor=auto,maxwidth=\textheight,maxheight=\textwidth] % \defineexternalfigure[width-7][factor=auto,maxwidth=\textwidth,maxheight=\textheight] % \placefigure{none}{\rotate[frame=on,offset=overlay]{\externalfigure[t:/sources/cow.pdf][width-6]}} \page % \placefigure{none}{\framed[frame=on,offset=overlay]{\externalfigure[t:/sources/cow.pdf][width-7]}} \def\m_grph_scale_factor_set{\v!max,\v!fit,\v!broad,\v!auto} % can be an \edef \def\grph_scale_by_factor {\doifinsetelse\p_factor\m_grph_scale_factor_set \grph_scale_by_factor_a {\doifinsetelse\p_hfactor\m_grph_scale_factor_set \grph_scale_by_factor_b {\doifinsetelse\p_wfactor\m_grph_scale_factor_set \grph_scale_by_factor_c \grph_scale_by_factor_d}}} % \def\grph_scale_by_factor_a % {\grph_scale_apply_size % \ifdim\d_grph_scale_x_size>\d_grph_scale_y_size % \grph_scale_calculate_norm \d_grph_scale_used_x_size\p_factor\p_maxwidth\hsize\d_grph_scale_h_size % \grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size\d_grph_scale_used_y_size\d_grph_scale_y_size % \else % \grph_scale_calculate_norm \d_grph_scale_used_y_size\p_factor\p_maxheight\d_grph_scale_outer_v_size\d_grph_scale_v_size % \grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size\d_grph_scale_used_x_size\d_grph_scale_x_size % \fi % \grph_scale_by_factor_indeed} % % \def\grph_scale_by_factor_b % {\grph_scale_apply_size % \grph_scale_calculate_norm \d_grph_scale_used_y_size\p_hfactor\p_maxheight\d_grph_scale_outer_v_size\d_grph_scale_v_size % \grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size\d_grph_scale_used_x_size\d_grph_scale_x_size % \grph_scale_by_factor_indeed} % % \def\grph_scale_by_factor_c % {\grph_scale_apply_size % \grph_scale_calculate_norm \d_grph_scale_used_x_size\p_wfactor\p_maxwidth\hsize\d_grph_scale_h_size % \grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size\d_grph_scale_used_y_size\d_grph_scale_y_size % \grph_scale_by_factor_indeed} % % \def\grph_scale_by_factor_d % {\grph_scale_calculate_norm\d_grph_scale_used_y_size\p_factor \p_height \textheight\d_grph_scale_v_size % \grph_scale_calculate_norm\d_grph_scale_used_y_size\p_hfactor\p_height \textheight\d_grph_scale_v_size % \grph_scale_calculate_norm\d_grph_scale_used_x_size\p_wfactor\p_width \hsize \hsize} \def\grph_scale_by_factor_a {\grph_scale_apply_size \ifdim\d_grph_scale_x_size>\d_grph_scale_y_size \grph_scale_calculate_norm \d_grph_scale_used_x_size\p_factor\p_maxwidth\hsize\d_grph_scale_h_size \grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size \d_grph_scale_used_y_size\m_grph_scale_used_x_scale\d_grph_scale_y_size \else \grph_scale_calculate_norm \d_grph_scale_used_y_size\p_factor\p_maxheight\d_grph_scale_outer_v_size\d_grph_scale_v_size \grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size \d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size \fi \grph_scale_by_factor_indeed} \def\grph_scale_by_factor_b {\grph_scale_apply_size \grph_scale_calculate_norm \d_grph_scale_used_y_size\p_hfactor\p_maxheight\d_grph_scale_outer_v_size\d_grph_scale_v_size \grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size \d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size \grph_scale_by_factor_indeed} \def\grph_scale_by_factor_c {\grph_scale_apply_size \grph_scale_calculate_norm \d_grph_scale_used_x_size\p_wfactor\p_maxwidth\hsize\d_grph_scale_h_size \grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size \d_grph_scale_used_y_size\m_grph_scale_used_x_scale\d_grph_scale_y_size \grph_scale_by_factor_indeed} \def\grph_scale_by_factor_d {\grph_scale_calculate_norm\d_grph_scale_used_y_size\p_factor \p_height \textheight\d_grph_scale_v_size \grph_scale_calculate_norm\d_grph_scale_used_y_size\p_hfactor\p_height \textheight\d_grph_scale_v_size \grph_scale_calculate_norm\d_grph_scale_used_x_size\p_wfactor\p_width \hsize \hsize} \def\grph_scale_by_factor_indeed {\settrue\c_grph_scale_scaling_done \ifconditional\c_grph_scale_limit_factors \ifdim\d_grph_scale_used_x_size>\d_grph_scale_h_size \global\d_grph_scale_used_y_size\zeropoint \global\d_grph_scale_used_x_size\d_grph_scale_h_size \else\ifdim\d_grph_scale_used_y_size>\d_grph_scale_v_size \global\d_grph_scale_used_x_size\zeropoint \global\d_grph_scale_used_y_size\d_grph_scale_v_size \fi\fi \fi \grph_scale_by_dimension} % \def\grph_scale_by_scale % {\edef\m_grph_scale_temp{\p_scale\p_xscale\p_yscale}% % \ifx\m_grph_scale_temp\empty \else % \grph_scale_apply_scale\d_grph_scale_used_x_size\d_grph_scale_x_size\c_grph_scale_used_x_scale\p_xscale % \grph_scale_apply_scale\d_grph_scale_used_y_size\d_grph_scale_y_size\c_grph_scale_used_y_scale\p_yscale % \global\d_grph_scale_used_x_size\zeropoint % \global\d_grph_scale_used_y_size\zeropoint % \ifx\p_maxwidth\empty % \ifx\p_maxheight\empty % \else % \ifdim\d_grph_scale_y_size>\p_maxheight\relax % \global\d_grph_scale_used_y_size\p_maxheight % \fi % \fi % \else % \ifdim\d_grph_scale_x_size>\p_maxwidth\relax % \global\d_grph_scale_used_x_size\p_maxwidth % \fi % \fi % \fi} \def\grph_scale_by_scale {\edef\m_grph_scale_temp{\p_scale\p_xscale\p_yscale}% \ifx\m_grph_scale_temp\empty \else \grph_scale_apply_scale\m_grph_scale_used_x_scale\p_xscale \grph_scale_apply_scale\m_grph_scale_used_y_scale\p_yscale % \global\d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size\relax % no global needed here % \global\d_grph_scale_used_y_size\m_grph_scale_used_y_scale\d_grph_scale_y_size\relax % no global needed here % wrong: we need to recalculate the scale \global\d_grph_scale_used_x_size\zeropoint \global\d_grph_scale_used_y_size\zeropoint % \ifx\p_maxwidth\empty \ifx\p_maxheight\empty \else \ifdim\d_grph_scale_y_size>\p_maxheight\relax \global\d_grph_scale_used_y_size\p_maxheight \fi \fi \else \ifdim\d_grph_scale_x_size>\p_maxwidth\relax \global\d_grph_scale_used_x_size\p_maxwidth \fi \fi \fi} \def\grph_scale_by_dimension {\ifdim\d_grph_scale_used_x_size>\zeropoint \ifdim\d_grph_scale_used_y_size>\zeropoint \grph_scale_by_dimension_a \else \grph_scale_by_dimension_b \fi \else \ifdim\d_grph_scale_used_y_size>\zeropoint \grph_scale_by_dimension_c \else \grph_scale_by_dimension_d \fi \fi} % \def\grph_scale_by_dimension_a % {\grph_scale_by_dimension_indeed % {\grph_scale_calculate_scale\d_grph_scale_used_y_size\d_grph_scale_y_size\c_grph_scale_used_y_scale % \grph_scale_calculate_scale\d_grph_scale_used_x_size\d_grph_scale_x_size\c_grph_scale_used_x_scale}% % {\grph_scale_calculate_scale\d_grph_scale_used_y_size\d_grph_scale_y_size\c_grph_scale_used_y_scale % \grph_scale_calculate_scale\d_grph_scale_used_x_size\d_grph_scale_x_size\c_grph_scale_used_x_scale}% % {\grph_scale_calculate_scale\d_grph_scale_used_y_size\d_grph_scale_y_size\c_grph_scale_used_y_scale % \grph_scale_calculate_scale\d_grph_scale_used_x_size\d_grph_scale_x_size\c_grph_scale_used_x_scale}} % % \def\grph_scale_by_dimension_b % {\grph_scale_by_dimension_indeed % {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size\d_grph_scale_used_y_size\d_grph_scale_y_size}% % {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size\d_grph_scale_used_y_size\d_grph_scale_y_size}% % {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size\d_grph_scale_used_y_size\d_grph_scale_y_size}} % % \def\grph_scale_by_dimension_c % {\grph_scale_by_dimension_indeed % {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size\d_grph_scale_used_x_size\d_grph_scale_x_size}% % {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size\d_grph_scale_used_x_size\d_grph_scale_x_size}% % {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size\d_grph_scale_used_x_size\d_grph_scale_x_size}} % % \def\grph_scale_by_dimension_d % {\grph_scale_by_dimension_indeed % {\grph_scale_apply_scale\d_grph_scale_used_x_size\d_grph_scale_x_size\c_grph_scale_used_x_scale\p_xscale % \grph_scale_apply_scale\d_grph_scale_used_y_size\d_grph_scale_y_size\c_grph_scale_used_y_scale\p_yscale}% % {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size\d_grph_scale_used_y_size\d_grph_scale_y_size}% % {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size\d_grph_scale_used_x_size\d_grph_scale_x_size}} \def\grph_scale_by_dimension_a {\grph_scale_by_dimension_indeed {\grph_scale_calculate_scale\m_grph_scale_used_y_scale\d_grph_scale_used_y_size\d_grph_scale_y_size \grph_scale_calculate_scale\m_grph_scale_used_x_scale\d_grph_scale_used_x_size\d_grph_scale_x_size}% {\grph_scale_calculate_scale\m_grph_scale_used_y_scale\d_grph_scale_used_y_size\d_grph_scale_y_size \grph_scale_calculate_scale\m_grph_scale_used_x_scale\d_grph_scale_used_x_size\d_grph_scale_x_size}% {\grph_scale_calculate_scale\m_grph_scale_used_y_scale\d_grph_scale_used_y_size\d_grph_scale_y_size \grph_scale_calculate_scale\m_grph_scale_used_x_scale\d_grph_scale_used_x_size\d_grph_scale_x_size}} \def\grph_scale_by_dimension_b {\grph_scale_by_dimension_indeed {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size \d_grph_scale_used_y_size\m_grph_scale_used_x_scale\d_grph_scale_y_size}% {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size \d_grph_scale_used_y_size\m_grph_scale_used_x_scale\d_grph_scale_y_size}% {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size \d_grph_scale_used_y_size\m_grph_scale_used_x_scale\d_grph_scale_y_size}} \def\grph_scale_by_dimension_c {\grph_scale_by_dimension_indeed % weird .. three same cases {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size \d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size}% {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size \d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size}% {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size \d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size}} \def\grph_scale_by_dimension_d {\grph_scale_by_dimension_indeed {\grph_scale_apply_scale\m_grph_scale_used_x_scale\p_xscale \grph_scale_apply_scale\m_grph_scale_used_y_scale\p_yscale \global\d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size \global\d_grph_scale_used_y_size\m_grph_scale_used_y_scale\d_grph_scale_y_size}% {\grph_scale_calculate_scales\d_grph_scale_used_x_size\d_grph_scale_x_size \d_grph_scale_used_y_size\m_grph_scale_used_x_scale\d_grph_scale_y_size}% {\grph_scale_calculate_scales\d_grph_scale_used_y_size\d_grph_scale_y_size \d_grph_scale_used_x_size\m_grph_scale_used_x_scale\d_grph_scale_x_size}} \def\grph_scale_by_dimension_indeed#1#2#3% {#1\relax \ifx\p_maxwidth\empty \else \ifdim\d_grph_scale_used_x_size>\p_maxwidth\relax \global\d_grph_scale_used_x_size\p_maxwidth #2\relax \fi \fi \ifx\p_maxheight\empty \else \ifdim\d_grph_scale_used_y_size>\p_maxheight\relax \global\d_grph_scale_used_y_size\p_maxheight #3\relax \fi \fi} \def\grph_scale_calculate_norm#1#2% todo: swap 1 and 2 and pass one less {\csname\??scalenorm\ifcsname\??scalenorm#2\endcsname#2\else\s!unknown\fi\endcsname#1#2} \setvalue{\??scalenorm\v!max }#1#2#3#4#5{\global#1#4} \setvalue{\??scalenorm\v!fit }#1#2#3#4#5{\global#1#5} \setvalue{\??scalenorm\v!broad }#1#2#3#4#5{\global#1\dimexpr#5-4\externalfigureparameter\c!bodyfont\relax} \setvalue{\??scalenorm\s!unknown}#1#2#3#4#5{\global#1\dimexpr#2\dimexpr\externalfigureparameter\c!bodyfont/10\relax\relax} % brr ex \setvalue{\??scalenorm\v!auto }#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi} \setvalue{\??scalenorm\empty }#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi} \setvalue{\??scalenorm\s!default}#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi} % \def\grph_scale_calculate_scales#1#2#3#4% % {\scratchdimen\dimexpr#1/\dimexpr#2/\plusthousand\relax\relax % \c_grph_scale_used_x_scale\scratchdimen % \c_grph_scale_used_y_scale\scratchdimen % %\writestatus{!!!!}{\the#3/\luaexpr{\number\dimexpr#1\relax/\number\dimexpr#2/1000}}% % #3\dimexpr\c_grph_scale_used_x_scale\dimexpr#4/\plusthousand\relax\relax} % % \def\grph_scale_calculate_scale#1#2#3% % {#3\dimexpr#1/\dimexpr#2/\plusthousand\relax\relax} % % \def\grph_scale_apply_scale#1#2#3#4% #4 = parameter / scale can be empty % {\ifcase0#4\relax % \ifcase0\p_scale\relax % #3=\plusthousand % \else % #3=\p_scale % \fi % \else % #3=#4% % \fi % \relax % important ! still ? % \global#1\ifnum#3=\plusthousand#2\else\dimexpr#3\dimexpr#2/\plusthousand\relax\relax\fi % \relax} \def\grph_scale_calculate_scales#1#2% {\edef\m_grph_scale_used_x_scale{\luaexpr{\number#1/\number#2}}% \let\m_grph_scale_used_y_scale\m_grph_scale_used_x_scale} % we could inline this: % % \grph_scale_calculate_scale\m_grph_scale_used_x_scale#1#2 % \let\m_grph_scale_used_y_scale\m_grph_scale_used_x_scale \def\grph_scale_calculate_scale#1#2#3% {\edef#1{\luaexpr{\number#2/\number#3}}} \def\grph_scale_apply_scale#1#2% #1 = parameter / scale can be empty {\edef#1{\luaexpr {\number \ifx#2\empty \ifx \p_scale \empty \plusthousand \else \ifnum\p_scale=\zerocount \plusthousand \else \p_scale \fi\fi \else\ifnum#2=\zerocount \ifx \p_scale \empty \plusthousand \else \ifnum\p_scale=\zerocount \plusthousand \else \p_scale \fi\fi \else #2% \fi\fi /1000}}} \def\grph_scale_apply_size {\ifx\p_maxheight\empty \d_grph_scale_outer_v_size\textheight \ifinner \d_grph_scale_outer_v_size \vsize % \textheight =\vsize \scratchdimen\vsize % \scratchdimen=\textheight \else\ifinsidefloat \d_grph_scale_outer_v_size \vsize % \textheight =\vsize \scratchdimen\vsize % \scratchdimen=\textheight \else\ifinpagebody \d_grph_scale_outer_v_size \vsize % \textheight =\vsize \scratchdimen\vsize % \scratchdimen=\textheight \else % hm, there should be an option to force this \ifdim\pagegoal<\maxdimen \ifdim\pagetotal<\pagegoal \scratchdimen\dimexpr\pagegoal-\pagetotal\relax \else \scratchdimen\d_grph_scale_outer_v_size % \textheight \fi \else \scratchdimen\d_grph_scale_outer_v_size % \textheight \fi \fi\fi\fi \else \scratchdimen\p_maxheight \d_grph_scale_outer_v_size\scratchdimen \fi \ifx\p_height\empty \d_grph_scale_v_size\scratchdimen \else \d_grph_scale_v_size\p_height \fi \ifx\p_width\empty \d_grph_scale_h_size\hsize \else \d_grph_scale_h_size\p_width \fi} %\def\grph_scale_convert_large_scale#1#2#3#4% % {\scratchdimen#1\relax % \ifnum#3=\plusthousand % % == scale 1 % \else % % better 1000 100 10 ranges, evt round 2sp % \divide\scratchdimen \plusthousand % \multiply\scratchdimen #3\relax % \fi % \scratchdimen-\scratchdimen % beter hier - dan in driver % \edef#2{\the\scratchdimen}% % \scratchcounter#3\relax % \ifnum\scratchcounter>\plustenthousand % \divide\scratchcounter\plusten % \scratchdimen\the\scratchcounter\points % \the ? % \else % \scratchdimen\the\scratchcounter\points % \the ? % \divide\scratchdimen\plusten % \fi % \edef#4{\withoutpt\the\scratchdimen}} % % \def\grph_scale_convert_large_scale#1#2#3#4% less overflow % {\edef#2{\ifnum#3=\plusthousand-\the\dimexpr#1\else\luaexpr{-\number#3*\number\dimexpr#1/1000}sp\fi}% % \edef#4{\luaexpr{\number#3/10}}} % \startcombination % {\externalfigure[cow.pdf] [frame=on,height=3cm,equalwidth=6cm]} {a cow} % {\externalfigure[mill.png][frame=on,height=3cm,equalwidth=6cm]} {a mill} % \stopcombination \def\grph_scale_position {\ifx\p_equalwidth\empty \else \scratchdimen\p_equalwidth\relax \ifdim\d_grph_scale_wd<\scratchdimen \setbox\nextbox\hbox to \scratchdimen{\hss\box\nextbox\hss}% \fi \fi \ifx\p_equalheight\empty \else \scratchdimen\p_equalheight\relax \ifdim\d_grph_scale_ht<\scratchdimen \setbox\nextbox\vbox to \scratchdimen{\vss\box\nextbox\vss}% \fi \fi} \unexpanded\def\fastscale#1% {\ifnum#1=1000\relax \expandafter\grph_scale_fast_nop \else \expandafter\grph_scale_fast_yes \fi{#1}} \def\grph_scale_fast_nop#1% {\hbox} \def\grph_scale_fast_yes#1% {\edef\finalscaleboxxscale{\withoutpt\the\dimexpr#1\onepoint/1000\relax}% brrr \let\finalscaleboxyscale\finalscaleboxxscale \dowithnextboxcs\grph_scale_fast_finish\hbox} \def\grph_scale_fast_finish {\grph_scale_apply \box\nextbox \endgroup} \unexpanded\def\fastsxsy#1#2% {\bgroup \edef\p_sx{#1}% \edef\p_sy{#2}% \dowithnextboxcs\grph_scale_fast_sx_xy_finish\hbox} \def\grph_scale_fast_sx_xy_finish {\grph_scale_check_sx_sy \grph_scale_calculations_nop \grph_scale_apply \box\nextbox \egroup} %D \macros %D {clip, setupclipping} %D %D Although related to figures, clipping can be applied to %D arbitrary content. We can use \METAPOST\ to provide a non %D rectangular clipping path. %D %D \starttyping %D \startMPclip{fun} %D clip currentpicture to fullcircle %D shifted (.5,.5) xscaled \width yscaled \height ; %D \stopMPclip %D \stoptyping %D %D We get a rectangular piece of the figure when we say: %D %D \starttyping %D \clip[x=2,y=1]{\externalfigure[photo]} %D \stoptyping %D %D When we want to clip to the oval we defined a few lines ago, %D we say: %D %D \starttyping %D \clip[nx=1,ny=1,x=1,y=1,mp=fun]{\externalfigure[photo]} %D \stoptyping %D %D The general characteristics of clipping can be set up with %D %D \showsetup{setupclipping} \installcorenamespace{clipping} \installdirectcommandhandler \??clipping {clipping} \unexpanded\def\clip {\dosingleempty\grph_clip} \def\grph_clip[#1]% nb top->bottom left->right {\bgroup \iffirstargument \setupcurrentclipping[#1]% \fi \dowithnextboxcs\grph_clip_finish\hbox} \def\grph_clip_finish {\doifelse{\clippingparameter\c!state}\v!start \grph_clip_yes_finish \grph_clip_nop_finish} % \def\grph_clip_yes_finish % {\ifdim\@@cpwidth>\zeropoint % \!!dimena\@@cpwidth % \!!dimenc\@@cphoffset % \else % \!!dimena\wd\nextbox % \divide\!!dimena \@@cpnx % \!!dimenc\@@cpx\!!dimena % \advance\!!dimenc -\!!dimena % \!!dimena\@@cpsx\!!dimena % \fi % \relax % sure % \ifdim\@@cpheight>\zeropoint % \!!dimenb\@@cpheight % \!!dimend\ht\nextbox % \advance\!!dimend -\@@cpvoffset % \advance\!!dimend -\!!dimenb % \else % \!!dimenb\ht\nextbox % \divide\!!dimenb \@@cpny % \!!dimend-\@@cpy\!!dimenb % \advance\!!dimend -\@@cpsy\!!dimenb % \advance\!!dimend \!!dimenb % \!!dimenb\@@cpsy\!!dimenb % \advance\!!dimend \ht\nextbox % dimend ! % \fi % \setbox\nextbox\hbox % old % {\advance\!!dimenc -\@@cpleftoffset % new ! % \advance\!!dimend -\@@cpbottomoffset % new ! % - added % \hskip-\!!dimenc\lower\!!dimend\box\nextbox}% old % \wd\nextbox\zeropoint % \ht\nextbox\zeropoint % \dp\nextbox\zeropoint % \setbox\nextbox\hbox % {\advance\!!dimena \@@cpleftoffset % new ! % \advance\!!dimena \@@cprightoffset % new ! % \advance\!!dimenb \@@cpbottomoffset % new ! % \advance\!!dimenb \@@cptopoffset % new ! % \dostartclipping\@@cpmp\!!dimena\!!dimenb % old % \box\nextbox % \dostopclipping}% % \setbox\nextbox\hbox % new ! % {\!!dimena-\@@cpleftoffset % new ! % \!!dimenb \@@cpbottomoffset % new ! % - removed % \hskip\!!dimena\lower\!!dimenb\box\nextbox}% new ! % \wd\nextbox\!!dimena % \ht\nextbox\!!dimenb % \dp\nextbox\zeropoint % \box\nextbox % \egroup} \def\grph_clip_yes_finish {\ifdim\clippingparameter\c!width>\zeropoint \scratchwidth \clippingparameter\c!width \scratchxoffset\clippingparameter\c!hoffset \else \scratchwidth\dimexpr\wd\nextbox/\clippingparameter\c!nx\relax \scratchxoffset\dimexpr\clippingparameter\c!x\scratchwidth-\scratchwidth\relax \scratchwidth\clippingparameter\c!sx\scratchwidth \fi \relax % sure \ifdim\clippingparameter\c!height>\zeropoint \scratchheight\clippingparameter\c!height \scratchyoffset\dimexpr\ht\nextbox-\clippingparameter\c!voffset-\scratchheight\relax \else \scratchheight\dimexpr\ht\nextbox/\clippingparameter\c!ny\relax \scratchyoffset\dimexpr-\clippingparameter\c!y\scratchheight-\clippingparameter\c!sy\scratchheight+\scratchheight\relax \scratchheight\clippingparameter\c!sy\scratchheight \advance\scratchyoffset \ht\nextbox \fi \setbox\nextbox\hbox {\advance\scratchxoffset -\clippingparameter\c!leftoffset \relax \advance\scratchyoffset -\clippingparameter\c!bottomoffset\relax \hskip-\scratchxoffset \lower\scratchyoffset \box\nextbox}% \wd\nextbox\zeropoint \ht\nextbox\zeropoint \dp\nextbox\zeropoint \setbox\nextbox\hbox {\advance\scratchwidth \dimexpr\clippingparameter\c!leftoffset +\clippingparameter\c!rightoffset\relax \advance\scratchheight\dimexpr\clippingparameter\c!bottomoffset+\clippingparameter\c!topoffset \relax \dostartclipping{\clippingparameter\c!mp}\scratchwidth\scratchheight \box\nextbox \dostopclipping}% \setbox\nextbox\hbox {\hskip-\clippingparameter\c!leftoffset \lower \clippingparameter\c!bottomoffset \box\nextbox}% \wd\nextbox\scratchwidth \ht\nextbox\scratchheight \dp\nextbox\zeropoint \box\nextbox \egroup} \def\grph_clip_nop_finish {\box\nextbox \egroup} \setupclipping [\c!state=\v!start, \c!n=\plusone, % was \plustwo \c!nx=\clippingparameter\c!n,\c!x=\plusone,\c!sx=\plusone, \c!ny=\clippingparameter\c!n,\c!y=\plusone,\c!sy=\plusone, \c!width=\zeropoint, \c!height=\zeropoint, \c!hoffset=\zeropoint, \c!voffset=\zeropoint, \c!offset=\zeropoint, \c!leftoffset=\clippingparameter\c!offset, \c!rightoffset=\clippingparameter\c!offset, \c!topoffset=\clippingparameter\c!offset, \c!bottomoffset=\clippingparameter\c!offset, \c!mp=] %D \startbuffer %D \startuseMPgraphic{test} %D path p ; p := fullcircle scaled 4cm ; %D draw p withpen pencircle scaled 1cm ; %D setbounds currentpicture to boundingbox p ; %D \stopuseMPgraphic %D %D \hbox to \hsize \bgroup %D \hss %D \ruledhbox{\useMPgraphic{test}}% %D \hss %D \ruledhbox{\clip{\useMPgraphic{test}}}% %D \hss %D \egroup %D \stopbuffer %D %D \typebuffer \getbuffer %D Mirroring. \unexpanded\def\mirror {\bgroup \dowithnextboxcs\grph_mirror_finish\hbox} \def\grph_mirror_finish {\scratchdimen\wd\nextbox % better use an hbox (if no \forgetall, leftskip etc may creep in) %\setbox\nextbox\vbox{\forgetall\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}% \setbox\nextbox\hbox{\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}% \wd\nextbox\scratchdimen \box\nextbox \egroup} %D A couple of examples, demonstrating how the depth is %D taken care of: %D %D \startbuffer %D test\rotate[frame=on, rotation=0] {gans}% %D test\rotate[frame=on, rotation=90] {gans}% %D test\rotate[frame=on, rotation=180]{gans}% %D test\rotate[frame=on, rotation=270]{gans}% %D test %D \stopbuffer %D %D \typebuffer \getbuffer % When we rotate over arbitrary angles, we need to relocate the % resulting box because rotation brings that box onto the negative % axis. The calculations (mostly sin and cosine) need to be tuned for % the way a box is packages (i.e. the refence point). A typical example % of drawing, scribbling, and going back to the days of school math. % % We do a bit more calculations than needed, simply because that way % it's easier to debug the code. % Cleanup in progress ... todo: less boxing \installcorenamespace {rotate} \installcorenamespace {rotatelocation} \installcorenamespace {rotatepreset} % we can alias these to \d_layers-* to save some dimens or maybe have a generic % set of scratch variables % maybe just \rotation_... \newdimen\d_grph_rotate_x_size \newdimen\d_grph_rotate_y_size \newdimen\d_grph_rotate_x_offset \newdimen\d_grph_rotate_y_offset \newdimen\d_grph_rotate_x_position \newdimen\d_grph_rotate_y_position \newdimen\d_grph_rotate_used_height \let\d_grph_rotate_width \!!widtha \let\d_grph_rotate_height\!!heighta \let\d_grph_rotate_depth \!!deptha \let\d_grph_rotate_saved_width \!!widthb \let\d_grph_rotate_saved_height\!!heightb \let\d_grph_rotate_saved_depth \!!depthb \newconditional\c_grph_rotate_obey_depth \newconditional\c_grph_rotate_not_fit \newconditional\c_grph_rotate_center \installframedcommandhandler \??rotate {rotate} \??rotate \setuprotate [\c!rotation=90, \c!location=\v!normal, \c!width=\v!fit, \c!height=\v!fit, \c!offset=\v!overlay, \c!frame=\v!off] \let\p_rotation_location\empty \let\p_rotation_rotation\empty \unexpanded\def\rotate % \bgroup: \rotate kan argument zijn {\bgroup \dosingleempty\grph_rotate} \def\grph_rotate[#1]% {\iffirstargument \setupcurrentrotate[#1]% \fi \edef\p_rotation_location{\rotateparameter\c!location}% \edef\p_rotation_rotation{\rotateparameter\c!rotation}% \csname\??rotatelocation \ifcsname\??rotatelocation\p_rotation_location\endcsname\p_rotation_location\else\v!default\fi \endcsname} \def\grph_rotate_framed {\resetrotateparameter\c!location \dowithnextboxcs\grph_rotate_finish\vbox \inheritedrotateframed} \def\grph_rotate_normal {\dowithnextboxcs\grph_rotate_finish\vbox} \def\grph_rotate_finish {\grph_rotate_finish_indeed \egroup} \setvalue{\??rotatelocation\v!depth}% {\setfalse\c_grph_rotate_not_fit \setfalse\c_grph_rotate_center \settrue \c_grph_rotate_obey_depth \grph_rotate_normal} \setvalue{\??rotatelocation\v!fit}% {\settrue \c_grph_rotate_not_fit \setfalse\c_grph_rotate_center \settrue \c_grph_rotate_obey_depth \grph_rotate_normal} \setvalue{\??rotatelocation\v!broad}% {\setfalse\c_grph_rotate_not_fit \setfalse\c_grph_rotate_center \setfalse\c_grph_rotate_obey_depth \grph_rotate_normal} \setvalue{\??rotatelocation\v!high}% {\setfalse\c_grph_rotate_not_fit \setfalse\c_grph_rotate_center \setfalse\c_grph_rotate_obey_depth \grph_rotate_framed} \setvalue{\??rotatelocation\v!middle}% {\setfalse\c_grph_rotate_not_fit \settrue \c_grph_rotate_center \setfalse\c_grph_rotate_obey_depth % hm, depth ? \grph_rotate_normal} \setvalue{\??rotatelocation\v!default}% {\setfalse\c_grph_rotate_not_fit \setfalse\c_grph_rotate_center \settrue \c_grph_rotate_obey_depth \grph_rotate_framed} \unexpanded\def\dorotatebox#1% {angle} \hbox/\vbox/\vtop % a fast low level one {\ifcase#1\relax \expandafter\gobbleoneargument \else \expandafter\grph_rotate_box \fi{#1}} \def\grph_rotate_box#1% {angle} \hbox/\vbox/\vtop {\bgroup \hbox\bgroup % compatibility hack \edef\p_rotation_rotation{#1}% \dowithnextboxcs\grph_rotate_finish_box} \def\grph_rotate_finish_box {\setfalse\c_grph_rotate_not_fit % this is the same as broad but \setfalse\c_grph_rotate_center % without the following grab as \setfalse\c_grph_rotate_obey_depth % we call finish directly \grph_rotate_finish_indeed \egroup \egroup} \def\grph_rotate_finish_indeed {\hbox\bgroup \ifx\p_rotation_rotation\empty \grph_rotate_finish_nop \else \grph_rotate_finish_yes \fi \egroup} \def\grph_rotate_finish_nop {\boxcursor\box\nextbox} \setvalue{\??rotatepreset\v!left}% {\edef\p_rotation_rotation{\doifoddpageelse{90}{270}}} \setvalue{\??rotatepreset\v!right}% {\edef\p_rotation_rotation{\doifoddpageelse{270}{90}}} \setvalue{\??rotatepreset\v!inner}% {\signalrightpage \doifrightpageelse{\def\p_rotation_rotation{270}}{\def\p_rotation_rotation{90}}} \setvalue{\??rotatepreset\v!outer}% {\signalrightpage \doifrightpageelse{\def\p_rotation_rotation{90}}{\def\p_rotation_rotation{270}}} \setvalue{\??rotatepreset\v!default}% {\edef\p_rotation_rotation{\realnumber{\p_rotation_rotation}}}% get rid of leading zeros and spaces \def\grph_rotate_finish_yes {\csname\??rotatepreset \ifcsname\??rotatepreset\p_rotation_rotation\endcsname\p_rotation_rotation\else\v!default\fi \endcsname \setbox\nextbox\vbox{\box\nextbox}% not really needed \dontcomplain \ifconditional\c_grph_rotate_center \d_grph_rotate_saved_width \wd\nextbox \d_grph_rotate_saved_height\ht\nextbox \d_grph_rotate_saved_depth \dp\nextbox \setbox\nextbox\vbox{\vskip.5\ht\nextbox\hskip-.5\wd\nextbox\box\nextbox}% \smashbox\nextbox \fi \d_grph_rotate_width \wd\nextbox \d_grph_rotate_height\ht\nextbox \d_grph_rotate_depth \dp\nextbox \setbox\nextbox\vbox{\hbox{\raise\dp\nextbox\box\nextbox}}% \d_grph_rotate_used_height \ht\nextbox % much of the next happens in lua (all the sin and cos) so we can do that in % one go if needed \setcalculatedcos\cos\p_rotation_rotation \setcalculatedsin\sin\p_rotation_rotation \ifdim\sin\points>\zeropoint \ifdim\cos\points>\zeropoint \grph_rotate_calculate_a \grph_rotate_apply \else \grph_rotate_calculate_b \grph_rotate_apply \wd\nextbox\ifconditional\c_grph_rotate_not_fit\sin\d_grph_rotate_depth\else\d_grph_rotate_x_size\fi \fi \else \ifdim\cos\points<\zeropoint \grph_rotate_calculate_c \grph_rotate_apply \wd\nextbox\ifconditional\c_grph_rotate_not_fit\negated\sin\d_grph_rotate_height\else\d_grph_rotate_x_size\fi \else\ifdim\sin\points=\zeropoint \grph_rotate_calculate_d \grph_rotate_apply % no wd ? \else \grph_rotate_calculate_e \grph_rotate_apply \wd\nextbox\ifconditional\c_grph_rotate_not_fit\negated\sin\d_grph_rotate_height\else\d_grph_rotate_x_size\fi \fi\fi \fi \ifconditional\c_grph_rotate_center \setbox\nextbox\vbox{\vskip-.5\d_grph_rotate_saved_height\hskip.5\d_grph_rotate_saved_height\box\nextbox}% \wd\nextbox\d_grph_rotate_saved_width \ht\nextbox\d_grph_rotate_saved_height \dp\nextbox\d_grph_rotate_saved_depth \fi \boxcursor\box\nextbox} \def\grph_rotate_calculate_a {\d_grph_rotate_x_size\dimexpr\cos\d_grph_rotate_width+\sin\d_grph_rotate_used_height\relax \d_grph_rotate_y_size\dimexpr\sin\d_grph_rotate_width+\cos\d_grph_rotate_used_height\relax \d_grph_rotate_x_position\zeropoint \d_grph_rotate_y_position\cos\d_grph_rotate_used_height \ifconditional\c_grph_rotate_not_fit \d_grph_rotate_x_offset\dimexpr\negated\sin\d_grph_rotate_used_height+\sin\d_grph_rotate_depth\relax \fi \ifconditional\c_grph_rotate_obey_depth \d_grph_rotate_y_offset\cos\d_grph_rotate_depth \fi} \def\grph_rotate_calculate_b {\d_grph_rotate_x_size\dimexpr\negated\cos\d_grph_rotate_width+\sin\d_grph_rotate_used_height\relax \d_grph_rotate_y_size\dimexpr\sin\d_grph_rotate_width+\negated\cos\d_grph_rotate_used_height\relax \d_grph_rotate_x_position\negated\cos\d_grph_rotate_width \d_grph_rotate_y_position\zeropoint \ifconditional\c_grph_rotate_not_fit \d_grph_rotate_x_offset\dimexpr-\d_grph_rotate_x_size+\sin\d_grph_rotate_depth\relax \fi \ifconditional\c_grph_rotate_obey_depth \d_grph_rotate_y_offset\negated\cos\d_grph_rotate_height \fi} \def\grph_rotate_calculate_c {\d_grph_rotate_x_size\dimexpr\negated\cos\d_grph_rotate_width+\negated\sin\d_grph_rotate_used_height\relax \d_grph_rotate_y_size\dimexpr\negated\sin\d_grph_rotate_width+\negated\cos\d_grph_rotate_used_height\relax \d_grph_rotate_x_position\d_grph_rotate_x_size \d_grph_rotate_y_position\negated\sin\d_grph_rotate_width \ifconditional\c_grph_rotate_not_fit \d_grph_rotate_x_offset\dimexpr-\d_grph_rotate_x_size+\negated\sin\d_grph_rotate_height\relax \fi \ifconditional\c_grph_rotate_obey_depth \d_grph_rotate_y_offset\dimexpr\d_grph_rotate_y_size+\cos\d_grph_rotate_depth\relax \fi} \def\grph_rotate_calculate_d {\d_grph_rotate_x_size\dimexpr\cos\d_grph_rotate_width+\negated\sin\d_grph_rotate_used_height\relax \d_grph_rotate_y_size\dimexpr\negated\sin\d_grph_rotate_width+\cos\d_grph_rotate_used_height\relax \d_grph_rotate_x_position\zeropoint \d_grph_rotate_y_position\d_grph_rotate_y_size \d_grph_rotate_x_offset\zeropoint \ifconditional\c_grph_rotate_obey_depth \d_grph_rotate_y_offset\d_grph_rotate_depth \fi} \def\grph_rotate_calculate_e {\d_grph_rotate_x_size\dimexpr\cos\d_grph_rotate_width+\negated\sin\d_grph_rotate_used_height\relax \d_grph_rotate_y_size\dimexpr\negated\sin\d_grph_rotate_width+\cos\d_grph_rotate_used_height\relax \d_grph_rotate_x_position\negated\sin\d_grph_rotate_used_height \d_grph_rotate_y_position\d_grph_rotate_y_size \ifconditional\c_grph_rotate_not_fit \d_grph_rotate_x_offset\dimexpr-\d_grph_rotate_x_size+\negated\sin\d_grph_rotate_height\relax \fi \ifconditional\c_grph_rotate_obey_depth \d_grph_rotate_y_offset\negated\sin\d_grph_rotate_depth \fi} \def\grph_rotate_apply {\setbox\nextbox\vbox to \d_grph_rotate_y_size {\vfill \hbox to \d_grph_rotate_x_size {\dostartrotation\p_rotation_rotation \wd\nextbox\zeropoint \ht\nextbox\zeropoint \box\nextbox \dostoprotation \hfill}% \kern\d_grph_rotate_y_position}% \setbox\nextbox\hbox {\kern\dimexpr\d_grph_rotate_x_position+\d_grph_rotate_x_offset\relax \lower\d_grph_rotate_y_offset\box\nextbox}} % \dostepwiserecurse{0}{360}{10} % {\startlinecorrection[blank] % \hbox % {\expanded{\setuprotate[rotation=\recurselevel]}% % \traceboxplacementtrue % \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=depth] {\ruledhbox{\bfb (depth)}}}}% % \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=fit] {\ruledhbox{\bfb (fit)}}}}% % \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=broad] {\ruledhbox{\bfb (broad)}}}}% % \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=normal]{\ruledhbox{\bfb (normal)}}}}% % \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high] {\ruledhbox{\bfb (high)}}}}} % \stoplinecorrection} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-hlp.lua0000644000175000017500000000562612130411274024126 0ustar norbertnorbertif not modules then modules = { } end modules ['scrn-hlp'] = { version = 1.001, comment = "companion to scrn-hlp.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local help = { } interactions.help = help local a_help = attributes.private("help") local copy_nodelist = node.copy_list local hpack_nodelist = node.hpack local register_list = nodes.pool.register local nodecodes = nodes.nodecodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local data, references = { }, { } local helpscript = [[ function Hide_All_Help(prefix) { var n = 0 while (true) { n += 1 ; v = this.getField(prefix + n) ; if (v) { v.hidden = true ; this.dirty = false ; } else { return ; } } } ]] local template = "javascript(Hide_All_Help{help:}),action(show{help:%s})" function help.register(number,name,box) if helpscript then interactions.javascripts.setpreamble("HelpTexts",helpscript) helpscript = false end local b = copy_nodelist(tex.box[box]) register_list(b) data[number] = b if name and name ~= "" then references[name] = number structures.references.define("",name,format(template,number)) end end local function collect(head,used) while head do local id = head.id if id == hlist_code then local a = head[a_help] if a then if not used then used = { a } else used[#used+1] = a end else used = collect(head.list,used) end elseif id == vlist_code then used = collect(head.list,used) end head = head.next end return used end function help.collect(box) if next(data) then return collect(tex.box[box].list) end end commands.registerhelp = help.register function commands.collecthelp(box) local used = help.collect(box) if used then local done = { } context.startoverlay() for i=1,#used do local d = data[used[i]] if d and not done[d] then local box = hpack_nodelist(copy_nodelist(d)) context(false,box) done[d] = true else -- error end end context.stopoverlay() end end function help.reference(name) return references[name] or tonumber(name) or 0 end function commands.helpreference(name) context(references[name] or tonumber(name) or 0) end function commands.helpaction(name) context(template,references[name] or tonumber(name) or 0) end context-2013.05.28.20130704/texmf-dist/tex/context/base/core-fnt.mkii0000644000175000017500000004266011754241457024303 0ustar norbertnorbert%D \module %D [ file=core-fnt, %D version=1995.10.10, %D title=\CONTEXT\ Core Macros, %D subtitle=Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Fonts} \unprotect %D \macros %D {compound} %D %D We will overload the already active \type {|} so we have %D to save its meaning in order to be able to use this handy %D macro. %D %D \starttyping %D so test\compound{}test can be used instead of test||test %D \stoptyping \bgroup \catcode`\|=\@@active \gdef\compound#1{|#1|} \egroup %D Here we hook some code into the clean up mechanism needed %D for verbatim data. \appendtoks \disablecompoundcharacters \disablediscretionaries \to \everycleanupfeatures %D \macros %D {kap,KAP,Kap,Kaps,nokap,userealcaps,usepseudocaps} %D %D We already introduced \type{\cap} as way to capitalize %D words. This command comes in several versions: %D %D \startbuffer %D \cap {let's put on a \cap{cap}} %D \cap {let's put on a \nocap{cap}} %D \CAP {let's put on a \\{cap}} %D \Cap {let's put on a \\{cap}} %D \Caps{let's put on a cap} %D \stopbuffer %D %D \typebuffer %D %D Note the use of \type{\nocap}, \type{\\} and the nested %D \type{\cap}. %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D These macros show te main reason why we introduced the %D smaller \type{\tx} and \type{\txx}. %D %D \starttyping %D \cap\romannumerals{1995} %D \stoptyping %D %D This at first sight unusual capitilization is completely %D legal. %D %D \showsetup{smallcapped} %D \showsetup{notsmallcapped} %D \showsetup{CAPPED} %D \showsetup{SmallCapped} %D \showsetup{SmallCaps} %D %D The difference between pseudo and real caps is demonstrated %D below: %D %D \startbuffer %D \usepseudocaps \cap{Hans Hagen} %D \userealcaps \cap{Hans Hagen} %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D The \type {\bgroup} trickery below is needed because of %D \type {\groupedcommand}. \def\usepseudocaps {\def\cap@@uppercase{\the\everyuppercase\uppercased}% \def\cap@@lowercase{\the\everylowercase\lowercased}% \def\cap@@visualize{\tx}} \def\userealcaps {\let\cap@@uppercase\relax %\let\cap@@lowercase\relax % Definitely not! \def\cap@@visualize{\sc}} \usepseudocaps \unexpanded\def\smallcapped % else conflict with math {\futurelet\next\dosmallcapped} \def\disablepseudocaps {\let\smallcapped\donothing} \def\dosmallcapped {\ifx\next\bgroup \expandafter\dodosmallcapped\expandafter\relax \else \expandafter\dodosmallcapped \fi} \def\dodosmallcapped#1#2% {\ifmmode\hbox\fi \bgroup \cap@@visualize \cap@@uppercase{#1{#2}}% \egroup} \unexpanded\def\notsmallcapped#1% {\cap@@lowercase{#1}} \unexpanded\def\CAPPED#1% {{\def\\##1{\smallcapped{##1}}#1}} \unexpanded\def\SmallCapped#1% {\CAPPED{\\#1}} \unexpanded\def\SmallCaps {\let\processword\SmallCapped \processwords} %D Sure: \def\kap{\smallcapped} % for old times sake %D Some precautions for a \PLAIN\ \TEX\ definition. \unexpanded\def\normalcap{\dohandlemathtoken{cap}} \unexpanded\def\normalCap{\dohandlemathtoken{Cap}} \def\cap{\mathortext\normalcap\smallcapped} \def\Cap{\mathortext\normalCap\SmallCapped} \appendtoks \let\cap\firstofoneargument \let\Cap\firstofoneargument \to \simplifiedcommands %D \macros %D {setupcapitals} %D %D By default we use pseudo small caps in titles. This can be %D set up with: %D %D \showsetup{setupcapitals} \let\normalsmallcapped\smallcapped \def\setupcapitals {\dosingleempty\dosetupcapitals} \def\dosetupcapitals[#1]% {\getparameters[\??kk][#1]% \doifelse\@@kktitle\v!yes {\definealternativestyle[\v!capital][\normalsmallcapped][\normalsmallcapped]% \definealternativestyle[\v!smallcaps][\sc][\sc]% \unexpanded\def\smallcapped{\normalsmallcapped}} {\definealternativestyle[\v!capital][\normalsmallcapped][\uppercased]% \definealternativestyle[\v!smallcaps][\sc][\uppercased]% \unexpanded\def\smallcapped{\doconvertfont\v!capital}}% \doifelse\@@kksc\v!yes \userealcaps \usepseudocaps} \ifx\uppercased\undefined \let\uppercased\uppercase \fi \ifx\lowercased\undefined \let\lowercased\lowercase \fi % pretty tricky stuff: % % \usemodule[abr-01] \TEX \METAPOST \PPCHTEX \LATEX % \usemodule[abr-02] \TEX \METAPOST \PPCHTEX \LATEX %def\uppercased#1{{\forceunexpanded\xdef\@@globalcrap{\uppercase{#1}}}\@@globalcrap} %def\lowercased#1{{\forceunexpanded\xdef\@@globalcrap{\lowercase{#1}}}\@@globalcrap} \def\uppercased#1{{\forceunexpanded\xdef\@@expanded{\uppercase{#1}}}\@@expanded} \def\lowercased#1{{\forceunexpanded\xdef\@@expanded{\lowercase{#1}}}\@@expanded} \setupcapitals [\c!title=\v!yes, \c!sc=\v!no] %D \macros %D {Word, Words, WORD, WORDS, doprocesswords} %D %D This is probably not the right place to present the next set %D of macros. %D %D \starttyping %D \Word {far too many words} %D \Words{far too many words} %D \WORD {far too many words} %D \WORDS{far too many words} %D \stoptyping %D %D \typebuffer %D %D This calls result in: %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D \showsetup{Word} %D \showsetup{Words} %D \showsetup{WORD} %D \showsetup{WORDS} \def\doWord#1% {\bgroup \the\everyuppercase \uppercase{#1}% \egroup} \unexpanded\def\Word#1% {\doWord#1} \def\doprocesswords#1 #2\od {\ConvertToConstant\doifnot{#1}{} {\processword{#1} % \doprocesswords#2 \od}} \def\processwords#1% {\doprocesswords#1 \od\unskip} \let\processword\relax \unexpanded\def\Words {\let\processword\Word \processwords} \unexpanded\def\WORD#1% {\bgroup \let\smallcapped\firstofoneargument \let\WORD\firstofoneargument \douppercase{#1}% \egroup} \unexpanded\def\WORDS#1% {\WORD{#1}} %D \macros %D {stretched} %D %D Stretching characters in a word is a sort of typographical %D murder. Nevertheless we support this manipulation for use in %D for instance titles. %D %D \starttyping %D \hbox to 5cm{\stretched{murder}} %D \stoptyping %D %D \typebuffer %D %D or %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D \showsetup{stretched} \def\stretched#1% {\ifvmode\hbox to \hsize\else\ifinner\else\hbox\fi\fi \bgroup\processtokens\relax\hss\relax{\hss\hss}{#1}\egroup} %D \startbuffer %D \stretched{Unknown Box} %D \hbox to .5\hsize{\stretched{A Horizontal Box}} %D \vbox to 2cm{\stretched{A Vertical Box}} %D \hbox to 3cm{\stretched{sp{\'e}c{\`\i}{\"a}l}} %D \stopbuffer %D %D \getbuffer %D %D The first line of this macros takes care of boxing. Normally %D one will use an \type{\hbox} specification. The last line %D shows how special characters should be passed. %D %D \typebuffer %D \macros %D {stretchednormalcase, stretcheduppercase, stretchedlowercase} %D %D A convenient alternative is: %D %D \starttyping %D \stretcheduppercase{Is this what you like?} %D \stoptyping %D %D \typebuffer %D %D this one uses fixed skips and kerns. %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D The default skip can be set with: % \def\stretchedspacefactor{4} % \def\stretchedspaceamount{.25em} % % \unexpanded\def\stretcheduppercase#1% % {\bgroup % \the\everyuppercase % \uppercase{\def\textstring{#1}}% % \ifdim\stretchedspaceamount>\zeropoint % \def\textkern% % {\kern\stretchedspaceamount}% % \def\textskip% % {\scratchdimen=\stretchedspaceamount % \hskip\stretchedspacefactor\scratchdimen}% % \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA % \textskip\@EA{\textstring}% % \else % \textstring % \fi % \egroup} %D Given the following settings, the space is 1em by default: \def\stretchedspacefactor{4} \def\stretchedspaceamount{.25em} \def\stretchedbreaktokens{.@/} \unexpanded\def\stretchednormalcase {\stretchedsomecase\firstofoneargument} \unexpanded\def\stretcheduppercase {\stretchedsomecase{\the\everyuppercase\uppercase}} \unexpanded\def\stretchedlowercase {\stretchedsomecase{\the\everylowercase\lowercase}} \def\stretchedsomecase#1#2% {\bgroup #1{\def\textstring{#2}}% \ifdim\stretchedspaceamount=\zeropoint \textstring \else \def\textkern##1% {% beware: ##1 may not be \box\somebox -) \determinemidwordbreak{##1}{\stretchedbreaktokens}% \kern\stretchedspaceamount##1\domidwordbreak}% \def\textskip {\scratchdimen\stretchedspaceamount \hskip\stretchedspacefactor\scratchdimen}% \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA \textskip\@EA{\textstring}% \fi \egroup} %D An auxiliary macro, see for usage \type {\stretcheduppercase}. \let\domidwordbreak\relax \def\setmidwordbreaktoken#1% {\sfcode`#1=5000\relax} \def\determinemidwordbreak#1#2% {\edef\midwordbreaktokens{#2}% \ifx\midwordbreaktokens\empty \global\let\domidwordbreak\relax \else \setbox\scratchbox\hbox {\expandafter\handletokens\midwordbreaktokens\with\setmidwordbreaktoken a\space \!!dimena\lastskip #1\space\!!dimenb\lastskip \relax % needed \ifdim\!!dimena=\!!dimenb \globallet\domidwordbreak\relax \else \globallet\domidwordbreak\allowbreak \fi}% \fi} %D \macros %D {underbar,underbars, %D overbar,overbars, %D overstrike,overstrikes, %D setupunderbar} %D %D In the rare case that we need undelined words, for instance %D because all font alternatives are already in use, one can %D use \type{\underbar} and \type{\overstrike} and their plural %D forms. %D %D \startbuffer %D \underbars{drawing \underbar{bars} under words is a typewriter leftover} %D \overstrikes{striking words makes them \overstrike{unreadable} but %D sometimes even \overbar{top lines} come into view.} %D \stopbuffer %D %D \typebuffer %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D The next macros are derived from the \PLAIN\ \TEX\ one, but %D also supports nesting. The \type{$} keeps us in horizontal %D mode and at the same time applies grouping. %D %D \showsetup{underbar} %D \showsetup{underbars} %D \showsetup{overbar} %D \showsetup{overbars} %D \showsetup{overstrike} %D \showsetup{overstrikes} %D %D Although underlining is ill advised, we permit some %D alternatives, that can be set up by: %D %D \showsetup{setupunderbar} %D %D The alternatives show up as %D {\setupunderbar [alternative=a]\underbar{alternative a}}, %D {\setupunderbar [alternative=b]\underbar{alternative b}}, %D {\setupunderbar [alternative=c]\underbar{alternative c}} %D and %D {\setupunderbar [rulethickness=1pt]\underbar{1pt width}}, %D {\setupunderbar [rulethickness=2pt]\underbar{2pt width}}, %D or whatever. Because \type{\overstrike} uses the same %D method, the settings also apply to that macro. \newcount\underbarlevel \def\underbarmethoda#1#2#3% RULE {\hbox to #1{\vrule\!!width#1\!!height#2\!!depth#3}} \def\underbarmethodb#1#2#3% DASH {\hbox to #1 {\hskip-.25em \xleaders \hbox{\hskip.25em\vrule\!!width.25em\!!height#2\!!depth#3} \hfil}} \def\underbarmethodc#1#2#3% PERIOD {\hbox to #1 {\dimen4=#3 \advance\dimen4 .2ex \hskip-.25em \xleaders \hbox{\hskip.25em\lower\dimen4\hbox{.}} \hfil}} \def\dododounderbar#1#2#3% {\startmathmode \setbox0\hbox{#3}% \setbox2\hbox{\color[\@@onrulecolor]{\getvalue{underbarmethod\@@onalternative}{\wd0}{#1}{#2}}}% \wd0\zeropoint \ht2\ht0 \dp2\dp0 \box0\box2 \stopmathmode} \unexpanded\def\dodounderbar#1% {\bgroup \dimen0=\@@onbottomoffset \dimen0=\underbarlevel\dimen0 \ifdone \else \advance\dimen0 -\strutht \fi \dimen2\dimen0 \advance\dimen2 \@@onrulethickness \dododounderbar{-\dimen0}{\dimen2}{#1}% \egroup} \def\betweenunderbarwords {\bgroup \setbox0\hbox{\dodounderbar{\hskip\interwordspace}}% \nobreak \hskip\zeropoint\!!minus\interwordshrink \discretionary{}{}{\box0}% \egroup} \def\betweenunderbarspaces {\hskip\currentspaceskip} % \unexpanded\def\dounderbar#1#2% % {\let\betweenisolatedwords#1% % \processisolatedwords{#2}\dodounderbar % \egroup} \unexpanded\def\underbar {\bgroup \advance\underbarlevel\plusone \donetrue \dounderbar\betweenunderbarwords} \unexpanded\def\dounderbar#1% {\let\betweenisolatedwords#1% \dosingleempty\redounderbar} \unexpanded\def\redounderbar[#1]#2% {\iffirstargument\setupunderbar[#1]\fi \processisolatedwords{#2}\dodounderbar \egroup} \unexpanded\def\underbars {\bgroup \advance\underbarlevel\plusone \donetrue \dounderbar\betweenunderbarspaces} \unexpanded\def\overbar {\bgroup \advance\underbarlevel\minusone \donefalse \dounderbar\betweenunderbarwords} \unexpanded\def\overbars {\bgroup \advance\underbarlevel\minusone \donefalse \dounderbar\betweenunderbarspaces} \def\dooverstrike#1% {\bgroup \dimen0=\@@ontopoffset \dimen2=\dimen0 \advance\dimen2 \@@onrulethickness \dododounderbar{\dimen2}{-\dimen0}{#1}% \egroup} \def\betweenoverstrikewords {\bgroup \setbox0\hbox{\dooverstrike{\hskip\interwordspace}}% \nobreak \hskip\zeropoint\!!minus\interwordshrink \discretionary{}{}{\box0}% \egroup} \unexpanded\def\overstrike#1% {\bgroup \let\betweenisolatedwords\betweenoverstrikewords \processisolatedwords{#1}\dooverstrike \egroup} \unexpanded\def\overstrikes#1% {\bgroup \processisolatedwords{#1}\dooverstrike \egroup} \def\underbarparameter#1{\csname\??on#1\csname} \def\setupunderbar {\dodoubleargument\getparameters[\??on]} %D \macros %D {shiftedword, shiftedwords} %D %D Used as \type {\shiftedwords {10pt} {some text}} this macro will %D move % \def\shiftedword#1% #2% % {\raise#1\hbox} % {#2}} % officially: {\ifdim#1>\zeropoint\raise\else\lower\fi#1\hbox{#2}} % \def\shiftedwords#1#2% % {\processisolatedwords{#2}{\shiftedword{#1}}} %D \macros %D {low, high, lohi} %D %D Although \TEX\ is pretty well aware of super- and %D subscripts, its mechanism is mainly tuned for math mode. %D The next few commands take care of script texts both modes. %D %D \startbuffer %D The higher\high{one goes} the lower\low{one drops}, or\lohi{yes}{no}? %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D Note the different placement of \type {\lohi}, where we %D need a bit more space. The implementation looks a bit %D fuzzy, since some \type {\fontdimen}'s are involved to %D determine the optimal placement. \def\dodohighlow {\ifx\fontsize\empty \ifmmode \ifnum\fam<0 \tx \else \holamathfont \fi \else \tx \fi \else \tx \fi} \def\dohighlow#1#2#3#4#5% todo, named fontdimens {\dontleavehmode \bgroup \scratchdimen\ifdim\fontexheight\textfont2=1ex #2\textfont2\else #3ex\fi \advance\scratchdimen #4ex \kern.1ex \setbox\scratchbox\hbox{#1\scratchdimen\hbox{\dodohighlow#5}}% \ht\scratchbox\strutheight \dp\scratchbox\strutdepth \box\scratchbox \egroup} \unexpanded\def\high{\dohighlow\raise\mathsupnormal{.86}{0}} \unexpanded\def\low {\dohighlow\lower\mathsubnormal{.48}{0}} % \unexpanded\def\lohi#1#2% % {\dontleavehmode % \hbox % {\setbox4=\hbox{\dohighlow\lower\mathsubnormal{.48}{.1}{#1}}% % \setbox6=\hbox{\dohighlow\raise\mathsupnormal{.86}{.1}{#2}}% % \ifdim\wd4<\wd6 % \wd4=\zeropoint\box4\box6 % \else % \wd6=\zeropoint\box6\box4 % \fi}} \unexpanded\def\lohi {\dosingleempty\dolohi} \def\dolohi[#1]#2#3% {\dontleavehmode \hbox {\setbox4\hbox{\dohighlow\lower\mathsubnormal{.48}{.1}{#2}}% \setbox6\hbox{\dohighlow\raise\mathsupnormal{.86}{.1}{#3}}% \doif{#1}{\v!left} {\ifdim\wd4<\wd6 \setbox4\hbox to \wd6{\hss\box4}% \else \setbox6\hbox to \wd4{\hss\box6}% \fi}% \ifdim\wd4<\wd6 \wd4=\zeropoint\box4\box6 \else \wd6=\zeropoint\box6\box4 \fi}} %D You can provide an optional keyword \type {left}, in which %D case the super and subscripts will be aligned in a way that %D permits placement at the left of a word (which means that %D it will be right aligned). %D %D \startbuffer %D \lohi{aha}{ah} test \lohi{aha}{ah} test %D \lohi[left]{aha}{ah} test \lohi[left]{aha}{ah} test %D \lohi{aha}{ah} test\lohi{aha}{ah} test %D \lohi[left]{aha}{ah}test \lohi[left]{aha}{ah}test %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D \macros %D {setupinitial,placeinitial,checkinitial} %D %D {\em To be documented.} %D %D \starttyping %D \setupinitial[state=start] \placeinitial \input tufte %D \stoptyping %D %D and %D %D \starttyping %D \def\bpar{\ifvmode\checkinitial\fi} %D \def\epar{\ifhmode\par\fi\checkinitial} %D \stoptyping % to do: more fine tuning \def\setupinitial {\dodoubleempty\getparameters[\??dc]} \definefontsynonym[Initial][Regular] % prefered initial identifier \definefontsynonym[initial][Initial] % internal but accepted too \setupinitial [\c!state=\v!stop, \c!location=\v!text, \c!n=3, \c!distance=.125em, \c!command=, \s!font=initial] \def\AutoDroppedCapsCommand{\NiceDroppedCaps\@@dccommand\@@dcfont\@@dcdistance\@@dcn}% \def\placeinitial {\doifelse\@@dclocation\v!margin{\chardef\DropMode\plusone}{\chardef\DropMode\zerocount}% \doif \@@dcstate\v!start{\ifcase\@@dcn\else\AutoDroppedCaps\fi}} \let\checkinitial\CheckDroppedCaps %D This module has only a few setups: \setupunderbar [\c!alternative=a, \c!rulethickness=\linewidth, \c!bottomoffset=1.5pt, \c!topoffset=2.5pt, \c!rulecolor=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-vectors.lua0000644000175000017500000000750012161703335025453 0ustar norbertnorbertif not modules then modules = { } end modules ['s-fonts-vectors'] = { version = 1.001, comment = "companion to s-fonts-vectors.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.protrusions = moduledata.fonts.protrusions or { } moduledata.fonts.expansions = moduledata.fonts.expansions or { } local NC, NR = context.NC, context.NR local classes = fonts.protrusions.classes local vectors = fonts.protrusions.vectors function moduledata.fonts.protrusions.showvector(specification) specification = interfaces.checkedspecification(specification) local vector = vectors[specification.name or "?"] if vector then context.blank() context.startcolumns { n = specification.columns or 3 } context.starttabulate { "|T||cw(.5em)||" } for unicode, values in table.sortedhash(vector) do NC() context("%U",unicode) NC() context("%.02f",values[1]) NC() context("%c",unicode) NC() context("%.02f",values[2]) NC() NR() end context.stoptabulate() context.stopcolumns() context.blank() end end function moduledata.fonts.protrusions.showclass(specification) specification = interfaces.checkedspecification(specification) local class = specification.name and classes[specification.name] local classes = class and { class} or classes context.starttabulate { "|l|l|r|r|r|" } NC() context.bold("name") NC() context.bold("vector") NC() context.bold("factor") NC() context.bold("left") NC() context.bold("right") NC() NR() for name, class in table.sortedhash(classes) do NC() context(name) NC() context(class.vector) NC() context("%.02f",class.factor) NC() context("%.02f",class.left) NC() context("%.02f",class.right) NC() NR() end context.stoptabulate() end local classes = fonts.expansions.classes local vectors = fonts.expansions.vectors function moduledata.fonts.expansions.showvector(specification) specification = interfaces.checkedspecification(specification) local vector = vectors[specification.name or "?"] if vector then context.blank() context.startcolumns { n = specification.columns or 3 } context.starttabulate { "|T|cw(.5em)||" } for unicode, value in table.sortedhash(vector) do NC() context("%U",unicode) NC() context("%c",unicode) NC() context("%.02f",value) NC() NR() end context.stoptabulate() context.stopcolumns() context.blank() end end function moduledata.fonts.expansions.showclass(specification) specification = interfaces.checkedspecification(specification) local class = specification.name and classes[specification.name] local classes = class and { class} or classes context.starttabulate { "|l|l|r|r|r|" } NC() context.bold("name") NC() context.bold("vector") NC() context.bold("step") NC() context.bold("factor") NC() context.bold("stretch") NC() context.bold("shrink") NC() NR() for name, class in table.sortedhash(classes) do NC() context(name) NC() context(class.vector) NC() context("%.02f",class.step) NC() context("%.02f",class.factor) NC() context("% 2i",class.stretch) NC() context("% 2i",class.shrink) NC() NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-lab.mkii0000644000175000017500000002231611754241457024237 0ustar norbertnorbert%D \module %D [ file=lang-lab, %D version=1997.08.27, %D title=\CONTEXT\ Language Macros, %D subtitle=Labels, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this module we deal with language dependant labels and %D prefixes, like in {\em Figure~12} and {\em Chapter 1}. In %D this file we set the default values. Users can easily %D overrule these. %D %D This module is dedicated to the grandfather of Tobias %D Burnus, who's extensive languages oriented library helped us %D a lot in finding the right translations. All those labels %D are collected in files that reflect their common ancestor. %D %D Not all languages can be satisfied with the labeling %D mechanism as provided here. Chinese for instance put a label %D in front as well as after a part number. This is why the %D current implementation of labels supports two labels too. %D \macros %D {setupheadtext, setuplabeltext} %D %D First we present some macros that deal with what we will %D call head and label texts. Such texts are defines by: %D %D \showsetup{setupheadtext} %D \showsetup{setuplabeltext} %D %D In a few paragraphs we'll show quite a lot of examples %D of its use. \let\handletextprefix\relax \def\setupheadtext {\dosetupsometextprefix[\c!title]} \def\setuplabeltext{\dosetupsometextprefix[\c!label]} \def\dosetupsometextprefix {\let\dodocommand\xdosetupsometextprefix \dotripleempty\dodosetupsometextprefix} % \def\dodosetupsometextprefix[#1][#2][#3]% % {\ifthirdargument % \def\docommand##1{\dodocommand[#1#2][##1]}% % \processcommalist[#3]\docommand % \else % \def\docommand##1{\dodocommand[#1\currentmainlanguage][##1]}% % \processcommalist[#2]\docommand % \fi} \def\dodosetupsometextprefix[#1][#2][#3]% {\ifthirdargument \def\docommand##1{\expanded{\dodocommand[#1\reallanguagetag{#2}]}[##1]}% \processcommalist[#3]\docommand \else \def\docommand##1{\expanded{\dodocommand[#1\reallanguagetag\currentmainlanguage]}[##1]}% \processcommalist[#2]\docommand \fi} \def\doassignsometextprefix[#1][#2,#3,#4]% {\setvalue{#1}{\handletextprefix{#2}{#3}}} \def\xdosetupsometextprefix[#1][#2=#3]% {\doassignsometextprefix[#1#2][#3,,]} %D By changing the meaning of \type {\handletextprefix} we %D can filter the left and right labeltext as well as convert %D labels to uppercase. %D %D These commands accept all kind of inputs: %D %D \starttyping %D \setuplabeltext [language] [labellabel=text] %D \setuplabeltext [language] [labellabel=text,labellabel=text,...] %D \setuplabeltext [labellabel=text] %D \setuplabeltext [labellabel=text,labellabel=text,...] %D \stoptyping %D %D The last two cases concern the current language. %D \macros %D {headtext, %D labeltext, leftlabeltext, rightlabeltext, labeltexts, %D LABELTEXT, LEFTLABELTEXT, RIGHTLABELTEXT, LABELTEXTS} %D %D Once defined, head and label texts can be called upon using: %D %D \showsetup{headtext} %D \showsetup{labeltext} %D %D The latter one has an upcased alternative \type{\LABELTEXT}. % \def\labellanguage{\currentmainlanguage} % \def\headlanguage {\currentmainlanguage} % \def\labellanguage{\defaultlanguage\currentmainlanguage} % \def\headlanguage {\defaultlanguage\currentmainlanguage} \def\labellanguage{\reallanguagetag{\defaultlanguage\currentmainlanguage}} \def\headlanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}} \appendtoks \let\labellanguage\currentlanguage \to \everycurrentdate \unexpanded\def\headtext {\let\handletextprefix\firstoftwoarguments \let\reporttextprefixerror\doreporttextprefixerror \global\labeltextdonetrue \dogetupsometextprefix\headlanguage\c!title} \unexpanded\def\leftlabeltext {\let\handletextprefix\firstoftwoarguments \let\reporttextprefixerror\doreporttextprefixerror \global\labeltextdonetrue \dogetupsometextprefix\labellanguage\c!label} \unexpanded\def\rightlabeltext {\let\handletextprefix\secondoftwoarguments \let\reporttextprefixerror\doreporttextprefixerror \global\labeltextdonetrue \dogetupsometextprefix\labellanguage\c!label} \unexpanded\def\LEFTLABELTEXT {\def\handletextprefix##1##2{\uppercase{##1}}\DOLABELTEXT} \unexpanded\def\RIGHTLABELTEXT {\def\handletextprefix##1##2{\uppercase{##2}}\DOLABELTEXT} \def\DOLABELTEXT#1% {\bgroup \the\everyuppercase \let\reporttextprefixerror\doreporttextprefixerror \global\labeltextdonetrue \dogetupsometextprefix\labellanguage\c!label{#1}% not \labeltext (see \MONTH) \egroup} \let\labeltext \leftlabeltext \let\LABELTEXT \LEFTLABELTEXT \unexpanded\def\labeltexts#1#2{\leftlabeltext{#1}#2\rightlabeltext{#1}} \unexpanded\def\LABELTEXTS#1#2{\LEFTLABELTEXT{#1}#2\RIGHTLABELTEXT{#1}} \newif\iflabeltextdone % needs to be reset elsewhere \newif\iftracelabels % shows missing labels \def\doreporttextprefixerror#1#2#3% {\iftracelabels{\tttf[#2:~#3/#1]~}\fi} \def\dosetexpandedheadlabeltext#1#2#3% {\bgroup \let\handletextprefix\firstoftwoarguments \let\reporttextprefixerror\gobblethreearguments \keepencodedtokens % test on multilingual pascal, ok in stretched %\dontexpandencodedtokens % not usable in token handler \expanded {\egroup\noexpand\def\noexpand#2% watch out, no \edef {\dogetupsometextprefix{\headlanguage}{#1}{#3}}}} \def\setexpandedheadtext {\dosetexpandedheadlabeltext\c!title} \def\setexpandedlabeltext{\dosetexpandedheadlabeltext\c!label} % \def\dogetupsometextprefix#1#2#3% % {\ifcsname#2#1#3\endcsname % \csname#2#1#3\endcsname \else % \ifcsname#2#3\endcsname % \csname#2#3\endcsname \else % \ifcsname#2\defaultlanguage#1#3\endcsname % \csname#2\defaultlanguage#1#3\endcsname \else % \ifcsname#2\s!en#3\endcsname % \csname#2\s!en#3\endcsname \else % \ifcsname#2\s!nl#3\endcsname % \csname#2\s!nl#3\endcsname \else % \reporttextprefixerror{#1}{#2}{#3}% % \fi\fi\fi\fi\fi} % % \def\dogetupsometextprefix#1#2#3% must be expandable ! % {\ifcsname#2#1#3\endcsname % \csname#2#1#3\endcsname % \else\@EA\ifx\csname\??la#1\c!default\endcsname\empty % \ifcsname#2#3\endcsname % \csname#2#3\endcsname % \else\ifcsname#2\s!en#3\endcsname % \csname#2\s!en#3\endcsname % \else % \reporttextprefixerror{#1}{#2}{#3}% % \fi\fi % \else % \dogetupsometextprefix{\csname\??la#1\c!default\endcsname}{#2}{#3}% % \fi\fi} \def\dogetupsometextprefix#1#2#3% must be expandable ! #1 == language {\ifcsname#2#1#3\endcsname \csname#2#1#3\endcsname \else\ifcsname\??la#1\s!default\endcsname \expandafter\dogetupsometextprefix\csname\??la#1\s!default\endcsname{#2}{#3}% \else\ifcsname#2#3\endcsname \csname#2#3\endcsname \else\ifcsname#1\s!en#3\endcsname \csname#2\s!en#3\endcsname \else \reporttextprefixerror{#1}{#2}{#3}% \fi\fi\fi\fi} \ifx\simplifiedcommands\undefined \newtoks\simplifiedcommands \fi \appendtoks \let \headtext \firstofoneargument \let \labeltext \firstofoneargument \let \leftlabeltext \firstofoneargument \let \rightlabeltext \firstofoneargument \let \HEADTEXT \firstofoneargument \let \LABELTEXT \firstofoneargument \let \LEFTLABELTEXT \firstofoneargument \let \RIGHTLABELTEXT \firstofoneargument \to \simplifiedcommands %D \macros %D {presetheadtext,presetlabeltext} %D %D The next two macros enable us to automatically define %D head and label texts without replacing predefined ones. %D These are internal macros. \def\xdopresetsometextprefix[#1][#2=#3]% {\ifundefined{#1#2}\doassignsometextprefix[#1\reallanguagetag{#2}][#3,,]\fi} \def\dopresetsometextprefix {\let\dodocommand\xdopresetsometextprefix \dotripleempty\dodosetupsometextprefix} \def\presetheadtext {\dopresetsometextprefix[\c!title]} \def\presetlabeltext{\dopresetsometextprefix[\c!label]} %D \macros %D {translate} %D %D Sometismes macros contain language specific words that are to %D be typeset. Such macros can be made (more) language %D independant by using: %D %D \showsetup{translate} %D %D like for instance: %D %D \starttyping %D \translate[en=something,nl=iets] %D \stoptyping %D %D which expands to {\em something} or {\em iets}, depending on %D de current language. \def\dotranslate[#1]% {\getparameters[\??lg][#1]% \ifcsname\??lg\currentlanguage\endcsname \csname\??lg\currentlanguage\endcsname \else\ifcsname\??lg\s!en\endcsname \csname\??lg\s!en\endcsname \else [translation #1]% \fi\fi} \unexpanded\def\translate {\dosingleempty\dotranslate} %D When used without argument, the last defined values are %D used. This enables repetitive use like %D %D \starttyping %D \en \translate\ means \nl \translate %D \stoptyping %D \macros %D {assigntranslation} %D %D This macro is a system macro, and can be used to assign a %D translation to a macro. Its form is: %D %D \starttyping %D \assigntranslation[en=something,nl=iets]\to\command %D \stoptyping \def\assigntranslation[#1]\to#2% {\getparameters[\??lg][#1]% \edef#2{\csname\??lg\currentlanguage\endcsname}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mod-02.mkii0000644000175000017500000002144111754241457024016 0ustar norbertnorbert%D \module %D [ file=s-mod-02, %D version=very-old, %D title=\CONTEXT\ Style File, %D subtitle=Documentation Screen Environment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 looks like crap, is not documented, will %D change, and used to be called modu-*.tex. % Macro's \usemodule[mod-00] \unprotect % todo: internationalize + setups \setuphead[paragraaf][expansion=command] \setuphead[section][expansion=command] \def\complexmodule[#1]% redefined {\startglobal % i.v.m. \bgroup in \startdocumentation \getparameters[Module][#1] \stopglobal % i.v.m. \bgroup in \startdocumentation %%\section{\Modulesubtitle} \xdef\Temp{\Modulesubtitle}%%Modulesubtitle:\framed{BEGIN \Modulesubtitle END} :#1 !} \@EA\section\@EA{\Temp} \WriteLists} \def\stopmodule % redefined {\page \determineregistercharacteristics [index] [criterium=section] \doifmode{*register} {\pagereference [index] \placeregister [index] [balance=yes, indicator=no, criterium=section]}} \let\ComposeLists=\relax \newcounter\ModuleNumber \newwrite\BatchFile \openout\BatchFile=\jobname.bat \def\WriteBatchFile {\doglobal\increment\ModuleNumber % \immediate\write\BatchFile{call modu-run \FileName\space \ModuleNumber}} % \immediate\write\BatchFile{texmfstart texutil --modu \FileName}} \immediate\write\BatchFile{texmfstart texexec --pdf --modu --batch \FileName }} \newif\ifProcessingPublic \def\WriteLists {\writetolist[FileNames] {}{\FileName} \writetolist[GroupItems]{}{\GroupItem}} \def\moduletitle{} \def\TypeZeroModule#1% {\section{[to be extracted: #1]} {\em This module is not yet split off.} \WriteLists} \def\TypeOneModule#1% {\section{[to be documented: #1]} {\em This module is not yet fully documented.} \WriteLists} \def\TypeTwoModule#1% {\ifProcessingPublic \readfile{#1.ted}{}{}% \WriteBatchFile \else \section{[not yet public: #1]} {\em This module is documented but not yet public.} \WriteLists \fi} \def\TypeThreeModule#1% {\readfile{#1.ted}{}{}% \WriteBatchFile} \def\processmodule#1#2% {\page \bgroup \def\FileName{#1} \setupreferencing[prefix=#1] \useexternaldocument[PaperVersion][#1][] \aftersplitstring#1\at-\to\GroupItem \ComposeLists \ifcase#2 \TypeZeroModule{#1} \or \TypeOneModule{#1} \or \TypeTwoModule{#1} \or \TypeThreeModule{#1} \fi \page \setupreferencing[prefix=] \egroup} \def\ModuleGroup#1#2% {\page \let\Modulefile=\empty \setupreferencing[prefix=#1] \def\FileGroup{#1} \writetolist[FileGroups]{}{\FileGroup} \chapter[content]{#2} \MakeListOfItems \MakeListOfNames \MakeListOfGroups \placecontent[criterium=chapter,level=section]} % Layout \setupbodyfont [9pt] \setuppapersize [S6][S6] \setuplayout [backspace=72.5pt, leftmargin=50pt, leftmargindistance=12.5pt, rightmargin=0pt, rightedge=80pt, rightedgedistance=10pt, leftedge=0pt, width=430pt, topspace=10pt, header=0pt, footer=30pt, bottomdistance=10pt, bottom=15pt, height=410pt, style=\ss] \setuptyping [palet=colorpretty] \setupsetup [reference=3] \definecolor [AchtergrondKleur] [s=.6] \definecolor [ButtonKleur] [r=.2,g=.2,b=.6] \definecolor [TekstKleur] [r=.6,g=.2,b=.2] \definecolor [colorprettyone] [r=.6,g=.0,b=.0] % red \definecolor [colorprettytwo] [r=.0,g=.6,b=.0] % green \definecolor [colorprettythree] [r=.0,g=.0,b=.6] % blue \definecolor [colorprettyfour] [r=.6,g=.6,b=.0] % yellow \setupinteraction [state=start, page=yes, contrastcolor=, menu=on, color=] \setupbackgrounds [page] [background=color, backgroundcolor=AchtergrondKleur, offset=2.5pt] % this offset influences the menus! \setupbackgrounds [text,footer] [text,leftmargin] [background=color, backgroundcolor=white] \setupsubpagenumber [way=bysection, state=start] \setupinteractionbar [frame=off, offset=0pt, height=fit] \setupwhitespace [big] \setuptyping [typing] [option=color] \setuptyping [definition] [option=color] \setuptyping [file] [option=color] \setuppagenumbering [alternative=singlesided, way=bysection, state=none] \setupinmargin [location=left] \setupheads [alternative=inmargin] \setuphead [chapter] [style=\ssc, page=right] \setuphead [section] [style=\ssb, page=right] \setuplist [chapter] [style=bold, after=\blank] \setupcontent [width=2em] \setupindex [balance=yes, indicator=no] \setupcolors [state=start] \def\TitelBlad#1% {\startstandardmakeup \definefont[GrootFont] [SansBold at 72pt] \definefont[MiddelFont][Sans at 32pt] \definefont[KleinFont] [Sans at 24pt] \startcolor[AchtergrondKleur] \vskip12pt \midaligned{\GrootFont\setstrut\strut Con\TeX t} \vskip24pt \midaligned{\MiddelFont\setstrut\strut #1} \vskip24pt \midaligned{\KleinFont\setstrut\strut Hans Hagen} \vfilll \midaligned{\KleinFont\setstrut\strut PRAGMA ADE} \vskip24pt \midaligned{\KleinFont\setstrut\strut www.pragma-ade.com --- \currentdate} \vskip12pt \stopcolor \stopstandardmakeup} \def\ColofonBlad {\startmode[atpragma] \page \bgroup \def\PragmaHoogte {\makeupheight} \def\PragmaBreedte{\textwidth} \def\PragmaKopwit {\topspace} \def\PragmaRugwit {\backspace} \def\PragmaMarge {0pt} \PragmaLijnentrue \PlaatsPragmaLogo[ADE] \vfill todo: colofon \startnarrower[3*middle] This is the official documentation of \CONTEXT\ version \referraldate, a \TEX\ macropackage developed by J.~Hagen \& A.F.~Otten, who both hold the copyrights. \stopnarrower \vfill \page \egroup \stopmode} \def\ColofonBlad {} \newbox\ListOfItems \newbox\ListOfGroups \newbox\ListOfNames \definelist[FileNames] \def\FileName {} \definelist[FileGroups] \def\FileGroup {} \definelist[GroupItems] \def\GroupItem {} \setuplist [FileNames,FileGroups,FileGroups] [expansion=yes, pagenumber=no, style=\ss\bf] \setuplist [FileNames] [command=\FileNameEntry, after=\endgraf, alternative=none] % horizontal \setuplist [FileGroups] [command=\FileGroupEntry, after=\hss, alternative=horizontal] \def\FileNameEntry#1#2#3% {\strut\hbox{#2}\endgraf} \def\FileGroupEntry#1#2#3% {\strut\hbox{#2}\endgraf} \def\MakeListOfItems {\setbox\ListOfItems=\vbox {\ss\bf \placelist[GroupItems][color=ButtonKleur,contrastcolor=white,criterium=chapter]}} \def\MakeListOfNames {\setbox\ListOfNames=\vbox {\hsize\rightedgewidth \ss\bf\setupinterlinespace \startsimplecolumns[distance=10pt] \placelist[FileNames][color=ButtonKleur,contrastcolor=white,criterium=chapter] \stopsimplecolumns}} \def\MakeListOfGroups {\setbox\ListOfGroups=\hbox to \textwidth {\ss\bf \setupinteraction[color=ButtonKleur]% \placelist[FileGroups][color=ButtonKleur,contrastcolor=white,criterium=all]\unskip\unskip}} \setbox\ListOfGroups=\hbox{} %\setupfootertexts % [rand] % [] % [{\interactiebalk[variant=g]}] \setupinteractionmenu [right,bottom] [state=start, frame=off, color=AchtergrondKleur, contrastcolor=white, style=\ss\bf, height=15pt, offset=0pt, inbetween=\vskip5pt, background=color, backgroundcolor=ButtonKleur] \startinteractionmenu[right] \boxofsize \vbox \textheight \footerdistance \footerheight 5pt \bgroup \copy\ListOfNames \vfill \but [\FileGroup:content] local contents \\ \but [\FileName:index] local register \\ \but [PaperVersion::begin] paper version \\ \but [content] main contents \\ \but [index] main register \\ \but [PreviousJump] previous jump \\ \but [CloseDocument] close document \\ \unskip \egroup \stopinteractionmenu \startinteractionmenu[bottom] \unhcopy\ListOfGroups \stopinteractionmenu \def\placemoduleregister {\startbackmatter \setupsubpagenumber[reset] \title[-:index]{Register} \placeregister[index] \stopbackmatter} \def\placemodulecontent {\startfrontmatter \title[-:content]{Contents} \setupinteractionbar[state=stop] \placecontent[criterium=text,level=chapter] \stopfrontmatter} \setupcontent [pagenumber=no, level=chapter, interaction=all, style=, before=, after=] \setupfootertexts [margin] [\tt\Modulefile] [] \setupfootertexts [text] [chapter][chapter] \setupindex [symbol=1] \setuptolerance [verytolerant] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-visual.mkii0000644000175000017500000002140111754241457024311 0ustar norbertnorbert%D \module %D [ file=m-visual, %D version=2000.01.10, %D title=\CONTEXT\ Extra Modules, %D subtitle=Visualization and Faking, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This module collect a few more visual debugger features. I %D needed them for manuals and styles. The macros are documented %D in a my way document. %D For Mojca: %D %D \starttyping %D \def\simplethesis %D {\setupsystem[random=1234] %D \title{\fakewords{3}{4}} %D \placelist[chapter,section] %D \dorecurse{6} %D {\chapter{\fakewords{5}{10}} %D \dorecurse{5} %D {\section{\fakewords{2}{5}} %D \dorecurse{2} %D {\dorecurse{3}{\fakewords{100}{200}\endgraf} %D \placefigure{\fakewords{8}{15}}{\fakefigure{5cm}{3cm}{10cm}{5cm}} %D \dorecurse{2}{\fakewords{100}{200}\endgraf}}}}} %D %D \starttext %D \simplethesis %D \stoptext %D \stoptyping \definecolor[fakerulecolor] [black] \definecolor[fakebaselinecolor] [green] \definecolor[fakeparindentcolor][blue] \newif\iffakebaseline \fakebaselinetrue \def\fakerule#1% {\strut \startcolor[fakerulecolor]% \iffakebaseline \vrule\!!height1.25ex\!!depth-.05ex\!!width#1% \kern-#1% \vrule\!!height-.05ex\!!depth .25ex\!!width#1% \else \vrule\!!height1.25ex\!!depth .25ex\!!width#1% \fi \stopcolor \allowbreak} \def\dorandomrecurse#1% {\getrandomcount\scratchcounter{1}{#1}% \dorecurse\scratchcounter} % can be used in hbox, so %'s are really needed \unexpanded\def\fakelines#1#2% min max / 3 10 {\fakeparindent \scratchdimen\hsize \ifindentation \advance\scratchdimen -\parindent \fi \fakerule\scratchdimen\break \getrandomcount\scratchcounter{\ifcase0#1 3\else#1\fi}{\ifcase0#2 10\else#2\fi}% \dorecurse\scratchcounter{\fakerule\hsize}% \getrandomdimen\scratchdimen{.25\hsize}\hsize \fakerule\scratchdimen \par} % indeed \unexpanded\def\fakewords {\ifvmode\fakeparindent\fi\onlyfakewords} \definepalet [fakerule] [fr1c=darkred, fr2c=darkgreen, fr3c=darkblue, fr4c=darkyellow, fr5c=darkgray] \unexpanded\def\onlyfakewords#1#2% min max / 10 40 {\getrandomcount\scratchcounter{\ifcase0#1 10\else#1\fi}{\ifcase0#2 40\else#2\fi}% \dofakewords\scratchcounter } % no \par \unexpanded\def\fakenwords#1#2% words seed {\fakeparindent \getrandomseed\fakedwordseed \setrandomseed{\ifcase0#2 #1\else#2\fi}% \dofakewords{#1}% \setrandomseed\fakedwordseed } % no \par \def\dofakewords#1% {\bgroup \dorecurse{#1} {\getrandomcount\scratchcounter{1}{5}% \dorecurse\scratchcounter {\getrandomdimen\scratchdimen{.5em}{1.25em}% \fakerule\scratchdimen}% \space}% \removeunwantedspaces \egroup} \def\doshowfakewords#1% {\bgroup \setuppalet[fakerule]% \definecolor[fakerulecolor]% \dorecurse{#1} {\getrandomcount\scratchcounter{1}{5}% \dorecurse\scratchcounter {\getrandomdimen\scratchdimen{.5em}{1.25em}% \color[fr\recurselevel c]{\fakerule\scratchdimen}}% \space}% \removeunwantedspaces \egroup} \def\showfakewords{\let\dofakewords\doshowfakewords} \def\fakeword {\fakewords{1}{1}} % no \plusone \def\fakeparindent {\noindent \ifindentation \ifx\dofakedroppedcaps\relax {\fakeparindentcolor \vrule \!!height \strutheight % not longer .5ex \!!depth \strutdepth % not longer 0pt \!!width \parindent}% \else \dofakedroppedcaps \let\dofakedroppedcaps\relax \fi % \else % \dontleavehmode \fi} \let\dofakedroppedcaps\relax \unexpanded\def\fakedroppedcaps#1% {\ifnum#1>0 \def\dofakedroppedcaps {\setbox\scratchbox\hbox {\setbox\scratchbox\hbox{W}% \scratchdimen#1\lineheight \advance\scratchdimen -\lineheight \advance\scratchdimen \dp\strutbox \vrule \!!width#1\wd\scratchbox \!!height\ht\scratchbox \!!depth\scratchdimen}% \ht\scratchbox\ht\strutbox \dp\scratchbox\dp\strutbox \hangindent\wd\scratchbox \advance\hangindent .5em \wd\scratchbox\hangindent \hangafter-#1\noindent \llap{\fakeparindentcolor\box\scratchbox}}% \fi} \newcounter\noffakedfigures \unexpanded\def\showfakefigure {\donetrue\dodoubleempty\dofakefigure} \unexpanded\def\fakefigure {\donefalse\dodoubleempty\dofakefigure} \def\dofakefigure[#1][#2]#3#4#5#6% [] [] minwidth maxwidth minheight maxheight {\doglobal\increment\noffakedfigures \ifdone \endgraf \hbox to \hsize {\hss\fakeparindentcolor \strut\bf Figure \noffakedfigures \doifsomething{#1}{\space(#1)}% \hss} \endgraf \fi \getvalue{\e!place\v!figure} [#1][#2]% {\freezerandomseed \let\endstrut\relax \let\begstrut\relax \doifinsetelse{#1}{\v!left,\v!right} {\fakewords{2}{4}} {\fakewords{4}{10}}}% {\getrandomdimen{\dimen0}{#3}{#4}% \getrandomdimen{\dimen2}{#5}{#6}% \doifinset{#1}{\v!left,\v!right} {\dimen0=.75\dimen0 \ifdim\dimen0>.6\hsize \dimen0=.5\hsize\fi \ifdim\dimen0<.3\hsize \dimen0=.3\hsize\fi}% \framed [\c!width=\dimen0, \c!height=\dimen2, \c!frame=\v!off, \c!background=\v!color, \c!backgroundcolor=fakeparindentcolor] {\bf\white#1}}% \defrostrandomseed} \def\fakeformula {\dimen0\zeropoint \getrandomcount\scratchcounter{3}{6}% \dorecurse\scratchcounter {\getrandomdimen\scratchdimen{1em}{3em}% \mathinner{\red\fakerule\scratchdimen}% \ifnum\recurselevel<\scratchcounter+\fi \advance\scratchdimen\dimen0}% =\mathinner{\red\fakerule\scratchdimen}} \def\fakespacingformula {\color[fakebaselinecolor]{\ruledbaseline}\fakeformula} %D test \type{\bodyfontgrid}\space test %D test \type{\emexgrid} \space test \def\smashedgrid {\dosingleempty\dosmashedgrid} \def\dosmashedgrid[#1]% {\hsmashed {\setbox\scratchbox=\hbox {\basegrid [\c!nx=10,\c!ny=10,\c!dx=1,\c!dy=1, \c!unit=\bodyfontsize,#1]}% \hbox to \zeropoint {\hss\lower.5\ht\scratchbox\box\scratchbox\hss}% \hbox to \zeropoint {\hss \black\vrule\!!width6\linewidth\!!height3\linewidth\!!depth3\linewidth \hss}}} \def\bodyfontgrid {\hbox {{\linewidth.1pt\yellow\smashedgrid[\c!nx=30,\c!ny=30,\c!scale=.3333]}% {\linewidth.2pt\green \smashedgrid[\c!nx=20,\c!ny=20,\c!scale=.5]}% {\linewidth.3pt\red \smashedgrid[\c!nx=10,\c!ny=10,\c!scale=1]}}} \def\emexgrid {\hbox {{\linewidth.15pt\green\smashedgrid[\c!nx=20,\c!ny=20,\c!unit=ex]}% {\linewidth.15pt\red \smashedgrid[\c!nx=10,\c!ny=10,\c!unit=em]}}} %D The next few macros are not really public and kind of low %D level. They are obscure and a bit perverse. \definecolor[llblack][s=0.01] \def\lowlevelstream#1#2#3% {\ifinotr \else \dontleavehmode \prewordbreak \bgroup\bgroup % make sure aftergroup stuff is handled %\let#1#2\optimizetransparencyfalse\black \infofont\clap{\vl}\ignorespaces#3\unskip\clap{\vl}% \egroup\egroup \prewordbreak \fi #2{#3}} \let\normalPDFcode\PDFcode \def\showlowlevelstream {\def\PDFcode{\lowlevelstream\PDFcode\normalPDFcode}% \def\special{\lowlevelstream\special\normalspecial}} \def\showlowlevelstreamonly {\def\PDFcode{\lowlevelstream\PDFcode\gobbleoneargument}% \def\special{\lowlevelstream\special\gobbleoneargument}} \startnotmode[mkiv] \let\normaldostartgraymode \dostartgraymode \let\normaldostartgraycolormode\dostartgraycolormode \let\normaldostartrgbcolormode \dostartrgbcolormode \let\normaldostartcmykcolormode\dostartcmykcolormode \let\normaldostartspotcolormode\dostartspotcolormode \def\traceddostartgraymode#1% {#1\normaldostartgraymode{#1}} \def\traceddostartgraycolormode#1% {#1\normaldostartgraycolormode{#1}} \def\traceddostartrgbcolormode#1#2#3% {#1 #2 #3\normaldostartrgbcolormode{#1}{#2}{#3}} \def\traceddostartcmykcolormode#1#2#3#4% {#1 #2 #3 #4\normaldostartcmykcolormode{#1}{#2}{#3}{#4}} \def\traceddostartspotcolormode#1#2% {#1 #2\normaldostartspotcolormode{#1}{#2}} \def\showcolormodes {\let\dostartgraymode \traceddostartgraymode \let\dostartgraycolormode\traceddostartgraycolormode \let\dostartrgbcolormode \traceddostartrgbcolormode \let\dostartcmykcolormode\traceddostartcmykcolormode \let\dostartspotcolormode\traceddostartspotcolormode} \stopnotmode \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-heb.mkii0000644000175000017500000000065111754241457024240 0ustar norbertnorbert%D \module %D [ file=enco-heb, %D version=2005.01.27, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Hebrew, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 To be done. \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-pag.mkii0000644000175000017500000004005511754241457024302 0ustar norbertnorbert%D \module %D [ file=strc-num, % moved here from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Numbering} % todo: {}{}{} ipv ...--...-...-...--... in pag ref \unprotect % \gotonextsubpage : voor de pagebody % \subpaginanummer : alleen in de voet/kopregels % \aantalsubpaginas : alleen in de voet/kopregels % \firstsubpage : eerste \realpageno, voor interne doeleinden % \prevsubpage : vorige \realpageno, voor interne doeleinden % \nextsubpage : volgende \realpageno, voor interne doeleinden % \lastsubpage : laatste \realpageno, voor interne doeleinden % \nofsubpages : laatste subpage (in berekeningen) % \subpageno : huidige subpage (in berekeningen) \newif\ifsubpaging \newif\ifshowingsubpage \definenumber [\s!subpage] \setupnumber [\s!subpage] [\c!way=\@@snway] % hard to sync % % \def\resetsubpagenumber % {\resetnumber[\s!subpage]% % \global\subpageno=\rawnumber[\s!subpage]} % % better sync \newif\ifresettingsubpagenumber \def\resetsubpagenumber {\global\resettingsubpagenumbertrue} % so far for sync, see \gotonext... \def\dosetupsubpagenumber[#1]% {\doifelse{#1}\v!reset \resetsubpagenumber % \resetnumber[\s!subpage] {\getparameters[\??sn][#1]% \processaction [\@@snstate] [ \v!stop=>\ifsubpaging \resetsubpagenumber % new, see sync \else \subpagingfalse \fi \showingsubpagefalse, \v!start=>\subpagingtrue \showingsubpagetrue, \v!none=>\subpagingtrue \showingsubpagefalse]}} \def\numberofsubpages {\ifshowingsubpage\nofsubpages\else0\fi} \def\subpagenumber {\ifshowingsubpage\the\subpageno\else0\fi} \def\setupsubpagenumber {\dosingleargument\dosetupsubpagenumber} \def\newnofsubpages{0} \def\nofsubpages {0} \def\firstsubpage {1} \def\prevsubpage {1} \def\nextsubpage {1} \def\lastsubpage {1} \def\nextpage {1} \def\prevpage {1} \definetwopasslist\s!subpage \def\savenofsubpages {\ifsubpaging \showmessage\m!layouts6{\newnofsubpages,\the\subpageno}% \immediatesavetwopassdata{\s!subpage}{\newnofsubpages}{\the\subpageno}% \fi} \def\setsubpagenumbers {\iftwopassdatafound \bgroup \xdef \nofsubpages {\twopassdata}% \xdef \firstsubpage {\realfolio}% \advance\realpageno \nofsubpages \advance\realpageno \minusone \xdef \lastsubpage {\realfolio}% \egroup \else \xdef \nofsubpages{0}% \fi} \def\gotonextsubpage % overlapt behoorlijk met realpage macro {\global\let\checksubpages\relax \ifresettingsubpagenumber \resetnumber[\s!subpage]% \global\resettingsubpagenumberfalse \fi \ifsubpaging \xdef\oldsubpage{\the\subpageno}% \incrementnumber[\s!subpage]% \global\subpageno\rawnumber[\s!subpage]\relax \ifnum\subpageno=\plusone \gettwopassdata\s!subpage \setsubpagenumbers \ifnum\oldsubpage>\zerocount \showmessage\m!layouts6{\newnofsubpages,\oldsubpage}% \savetwopassdata{\s!subpage}{\newnofsubpages}{\oldsubpage}% \fi \doglobal\increment\newnofsubpages\relax \fi \setglobalsystemreference\rt!page\v!firstsubpage\firstsubpage \setglobalsystemreference\rt!page\v!lastsubpage\lastsubpage \bgroup \ifnum\realpageno=\firstsubpage\relax \global\let\prevsubpage\firstsubpage \setglobalsystemreference\rt!page\v!subbackward\lastsubpage \else \xdef\prevsubpage{\realfolio}% \doglobal\decrement\prevsubpage \setglobalsystemreference\rt!page\v!subbackward\prevsubpage \fi \setglobalsystemreference\rt!page\v!previoussubpage\prevsubpage \ifnum\realpageno=\lastsubpage\relax \global\let\nextsubpage\lastsubpage \setglobalsystemreference\rt!page\v!subforward\firstsubpage \else \xdef\nextsubpage{\realfolio}% \doglobal\increment\nextsubpage \setglobalsystemreference\rt!page\v!subforward\nextsubpage \fi \setglobalsystemreference\rt!page\v!nextsubpage\nextsubpage \egroup \fi} \def\checksubpages {\getfromtwopassdata\s!subpage1% \setsubpagenumbers \global\let\checksubpages\relax} % Omdat \gotonextrealpage gebruik maakt van de hulpfile, % moet het initialiseren van \realpageno plaatsvinden in % een later stadium, namelijk zodra referenties worden % gebruikt (anders gaat het mis op nog niet gedefinieerde % lijstcommando's e.d.). De eerst aanroep vindt dan ook % plaats vlak nadat de hulpfile voor de eerste maal is % ingelezen. \countdef\realpageno = 0 \realpageno = 1 \countdef\userpageno = 1 \userpageno = 1 \countdef\subpageno = 2 \subpageno = 0 % !! \countdef\arrangeno = 3 \arrangeno = 0 % !! \let\pageno\userpageno % we don't want conflicts when \pageno is used by other % packages, like CWEB, so we redefine \pageno \newcount\pageno \pageno = 1 \def\setuserpageno#1% {\global\userpageno#1\relax \global\pageno\userpageno} \def\realfolio {\the\realpageno} \def\folio {\the\userpageno} \def\firstpage {1} \def\lastpage {1} \def\currentpage {\the\realpageno} \def\lastpagenumber{1} \def\gotonextrealpage {\global\advance\realpageno \plusone\relax \ifnum\realpageno>\lastpage \xdef\lastpage{\realfolio}% \fi \setglobalsystemreference\rt!page\v!firstpage \firstpage \setglobalsystemreference\rt!page\v!lastpage\lastpage \bgroup \ifnum\realpageno>\plusone \advance\realpageno \minusone \xdef\prevpage{\realfolio}% \setglobalsystemreference\rt!page\v!backward\prevpage \else \global\let\prevpage\firstpage \setglobalsystemreference\rt!page\v!backward\lastpage \fi \setglobalsystemreference\rt!page\v!previouspage\prevpage \egroup \bgroup \ifnum\realpageno<\lastpage\relax \advance\realpageno \plusone \xdef\nextpage{\realfolio}% \setglobalsystemreference\rt!page\v!page\nextpage \setglobalsystemreference\rt!page\v!forward\nextpage \bgroup \xdef\nextnextpage{\realfolio}% \ifodd\realpageno \setglobalsystemreference\rt!page\v!nextoddpage\nextnextpage \else \setglobalsystemreference\rt!page\v!nextevenpage\nextnextpage \fi \advance\realpageno \plusone \xdef\nextnextpage{\realfolio}% \ifnum\realpageno>\lastpage\relax %\ifodd\realpageno % \setglobalsystemreference\rt!page\v!nextoddpage\lastpage %\else % \setglobalsystemreference\rt!page\v!nextevenpage\lastpage %\fi \else \ifodd\realpageno \setglobalsystemreference\rt!page\v!nextoddpage\nextnextpage \else \setglobalsystemreference\rt!page\v!nextevenpage\nextnextpage \fi \fi \egroup \else \global\let\nextpage\lastpage \setglobalsystemreference\rt!page\v!page\firstpage \setglobalsystemreference\rt!page\v!forward\firstpage \setglobalsystemreference\rt!page\v!nextoddpage\lastpage \setglobalsystemreference\rt!page\v!nextevenpage\lastpage \fi \setglobalsystemreference\rt!page\v!nextpage\realfolio \egroup} \def\checkrealpage {\global\realpageno\zerocount \gotonextrealpage \global\let\checkrealpage\relax} \def\savenofpages {\bgroup \advance\realpageno \minusone \savecurrentvalue\lastpage\realfolio \advance\userpageno \minusone \savecurrentvalue\lastpagenumber\folio \egroup} \def\totalnumberofpages {\lastpage} \def\setpagecounters {\setuserpageno{\rawnumber[\s!page]}% \doifelse\@@snstate\v!stop {\global\subpageno\zerocount} {\global\subpageno\rawnumber[\s!subpage]}\relax} % Standaard is \count0 in Plain TeX de paginateller. Omwille % van de afhandeling van lokaal nummeren, definieren we % echter een eigen nummer. \definenumber [\s!page] [\c!conversion=\@@nmconversion, \c!way=\@@nmway, \c!state=\@@nmstate, \c!start=1] % \@@pnstatus global, but \@@nmstatus local and only start/stop \global\let\@@pnstate\@@pnstate % brrr \def\pushpagestate{\globalpushmacro\@@pnstate} \def\poppagestate {\globalpopmacro \@@pnstate} \def\dosetuppagenumber[#1]% {\getparameters[\??pn][\c!number=,#1]% \global\let\@@pnstate\@@pnstate \doifsomething\@@pnnumber {\setnumber[\s!page]{\@@pnnumber}% \setuserpageno{\rawnumber[\s!page]}}% % this makes starting at an even page possible \ifnum\realpageno=1 \ifodd\pageno \else \global\shiftedrealpagenotrue \fi \fi} \def\setuppagenumber {\dosingleargument\dosetuppagenumber} \def\dodecrementpagenumber {\decrementnumber[\s!page]\setuserpageno{\rawnumber[\s!page]}} \def\doincrementpagenumber {\incrementnumber[\s!page]\setuserpageno{\rawnumber[\s!page]}} \def\dosynchronizepagenumber {\global\let\@@pnstate\v!start} \def\decrementpagenumber{\getvalue{\??pn-\@@pnstate}} \def\incrementpagenumber{\getvalue{\??pn+\@@pnstate}} \letvalue{\??pn-\v!start}\dodecrementpagenumber \letvalue{\??pn-\v!none }\dodecrementpagenumber \letvalue{\??pn-\v!empty}\dodecrementpagenumber \letvalue{\??pn+\v!start}\doincrementpagenumber \letvalue{\??pn+\v!none }\doincrementpagenumber \setvalue{\??pn+\v!empty}{\doincrementpagenumber\dosynchronizepagenumber} \letvalue{\??pn+\v!keep }\dosynchronizepagenumber % so far \def\checkpagecounter {\checknumber[\s!page]} % \getpagestatus % \ifrightpage als odd/singlesided \newif\ifrightpage \rightpagetrue \newcounter \nofpagesets \definetwopasslist\s!page \def\dopagesetreference {\doglobal\increment\nofpagesets\relax \lazysavetwopassdata{\s!page}{\nofpagesets}{\noexpand\realfolio}} \def\getpagestatus % hierboven gebruiken {\ifdoublesided \gettwopassdata\s!page \iftwopassdatafound \else \let\twopassdata\realpageno \fi \ifodd\twopassdata \global\rightpagetrue \else \global\rightpagefalse \fi \dopagesetreference \else \global\rightpagetrue \fi} \def\@@nmin {} % kan vervallen (upward compatibility) \def\@@nmlocation {} % mag {plaats, in} zijn \newcounter\@@pagenumberlocation \def\do@@plaatspaginanummer#1% {\ifnum#1=\@@pagenumberlocation\@@plaatspaginanummer\fi} \def\dodosetpagenumberlocation#1% tricky because of ...texts {\increment\@@pagenumberlocation \ifx\@@nmlocation\empty\else \def\dododosetpagenumberlocation##1% {\donetrue \setevalue{\??tk#1##1}{\noexpand\do@@plaatspaginanummer{\@@pagenumberlocation}}}% \donefalse \ExpandFirstAfter\processallactionsinset [\@@nmlocation] [ \v!middle=>\dododosetpagenumberlocation{\v!text\c!middletext}, \v!left=>\dododosetpagenumberlocation{\v!text\c!lefttext}, \v!right=>\dododosetpagenumberlocation{\v!text\c!righttext}, \v!inleft=>\dododosetpagenumberlocation{\v!margin\c!lefttext}, \v!inright=>\dododosetpagenumberlocation{\v!margin\c!righttext}, \v!inmargin=>\dododosetpagenumberlocation{\v!margin\ifdoublesided\c!margintext\else\c!righttext\fi}, \v!margin=>\dododosetpagenumberlocation{\v!margin\ifdoublesided\c!margintext\else\c!righttext\fi}, \v!atmargin=>\dododosetpagenumberlocation{\v!text\c!marginedgetext}, \v!marginedge=>\dododosetpagenumberlocation{\v!text\c!marginedgetext}]% \ifdone \else \dododosetpagenumberlocation{\v!text\c!middletext}% default \fi \fi} \def\dosetpagenumberlocation {\ExpandBothAfter\doifinsetelse\v!header{\@@nmlocation,\@@nmin} {\dodosetpagenumberlocation\v!header} {\dodosetpagenumberlocation\v!footer }} \def\dosetuppagenumbering[#1]% {\getparameters[\??nm][#1]% \preparepageprefix\??nm \singlesidedfalse \doublesidedfalse \ExpandFirstAfter\processallactionsinset [\@@nmalternative] [ \v!singlesided=>\singlesidedtrue, \v!doublesided=>\doublesidedtrue]% \ifx\trackingmarginnotestrue\undefined\else \ifdoublesided \trackingmarginnotestrue \else \trackingmarginnotesfalse \fi \fi \dosetpagenumberlocation \recalculatebackgrounds \recalculatelogos} \def\setuppagenumbering {\dosingleempty\dosetuppagenumbering} \let\stelnummeringin\setuppagenumbering % wrong % % \def\preparepageprefix#1% % {\def\dopreparepageprefix##1% % {\doifvalue{#1##1\c!number}{\v!yes} % {\setvalue{#1\getvalue{\??by##1}\c!nummer}{\v!yes}}}% % \processcommacommand[\@@kolijst]\dopreparepageprefix} % % more wrong % % \def\preparepageprefix#1% % {\def\dopreparepageprefix##1% % {\doifelsevalue{#1##1\v!number}{\v!yes} % v % {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!yes}} % v % {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!no}}}% % v % \processcommacommand[\@@kolijst]\dopreparepageprefix} % % best, beware, chapter (yes) can be followed by title (no) \def\preparepageprefix#1% {\def\dopreparepageprefix##1% {\ifcsname\??by##1\endcsname\letvalue{#1\csname\??by##1\endcsname\v!number}\v!no\fi}% %v \rawprocesscommalist[\@@kolist]\dopreparepageprefix \def\dopreparepageprefix##1% {\doifvalue{#1##1\v!number}\v!yes %v {\ifcsname\??by##1\endcsname\letvalue{#1\csname\??by##1\endcsname\v!number}\v!yes\fi}}% \rawprocesscommalist[\@@kolist]\dopreparepageprefix} \def\dodopageprefix#1% uti seperator -- {\let\normaluchar\uchar \let\uchar\relax % ugly but needed \doifelsevalue{\pageprefixtype#1\v!number}\v!yes % \v! and no \c! {\edef\preprefix {\@@filterheadpart[\postprefix]}% \edef\postprefix{\@@filtertailpart[\postprefix]}% \let\uchar\normaluchar % ugly but needed \ifx\preprefix\empty \else \ifx\preprefix\zerocountervalue\else \preprefix\@@nmnumberseparator \fi \fi} {\edef\postprefix{\@@filtertailpart[\postprefix]}% \let\uchar\normaluchar}} % ugly but needed \def\dopageprefix#1% {\dodopageprefix{#1}% \donexttracklevel{#1}} \chardef\pageprefixmode\plusone \def\pageprefix#1[#2]% {\ifcase\pageprefixmode % skip \or \bgroup \edef\pageprefixtype{#1}% \edef\postprefix{\@@filternumberpart[#2]}% \let\donexttrackcommando\dopageprefix \donexttrackcommando\firstsection \egroup \fi} %D It was Marco Kuhlmann who uncovered the missing strut. This %D was a pretty old bug kind of covered up by the fact that non %D oldstyle numbers are about as high as strutheight. Rather %D interesting that it went unnoticed for so long. \unexpanded\def\@@plaatspaginanummer % called in empty tests {\doif{\@@nmstate\@@pnstate}{\v!start\v!start} {{\doif\@@nmstrut\v!yes\strut \@@nmcommand{\doattributes\??nm\c!style\c!color{\completepagenumber}}}}} \def\userfolio {\convertednumber[\s!page]} % naast realfolio \def\pagenumber{\userfolio} \def\pageprefixes {\let\donexttrackcommando\dopageprefixes \donexttrackcommando\firstsection} \def\dopageprefixes#1% {\doifvalue{\??nm#1\v!number}\v!yes % v {\ifnum\countervalue{\??se#1}>\zerocount \getvalue{#1\c!number}\@@nmnumberseparator \fi}% \doifsomething\@@nmtext{\@@nmtext\@@nmnumberseparator}% strange option, what was the purpose of text? \donexttracklevel{#1}} \unexpanded\def\completepagenumber {\doif{\@@nmstate\@@pnstate}{\v!start\v!start} {\@@nmleft\labeltexts\v!pagenumber{\pageprefixes\pagenumber}\@@nmright}} \unexpanded\def\placepagenumber {\doif{\@@nmstate\@@pnstate}{\v!start\v!start} {\labeltexts\v!pagenumber{\pagenumber}}} % Nog een variant; wat is een goeie naam? % \unexpanded\def\placexxpagenumber % {\@@plaatspaginanummer} % \def\translatednumber[#1::#2::#3]{#3} \def\translatednumber{\@@filterpagepart} \unexpanded\def\referencepagenumber[#1]% {\doifelsenothing{#1}{?}% {\preparepageprefix\??rf \pageprefix\??rf[#1]\translatednumber[#1]}} \setuppagenumber [\c!state=\v!start, \c!number=1] \setupsubpagenumber [\c!way=\v!by\v!part, \c!state=\v!stop] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-bkm.lua0000644000175000017500000001560312130411274024116 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-bkm'] = { version = 0.200, comment = "companion to strc-bkm.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Future version will support adding arbitrary bookmarks with -- associated complex actions (rather trivial to implement). -- this should become proper separated backend code -- we should hook the placement into everystoptext ... needs checking local format, concat, gsub = string.format, table.concat, string.gsub local utfvalues = utf.values local settings_to_hash = utilities.parsers.settings_to_hash local codeinjections = backends.codeinjections local trace_bookmarks = false trackers.register("references.bookmarks", function(v) trace_bookmarks = v end) local report_bookmarks = logs.reporter("structure","bookmarks") local structures = structures structures.bookmarks = structures.bookmarks or { } local bookmarks = structures.bookmarks local sections = structures.sections local lists = structures.lists local levelmap = sections.levelmap local variables = interfaces.variables bookmarks.method = "internal" -- or "page" local names, opened, forced, numbered = { }, { }, { }, { } function bookmarks.register(settings) local force = settings.force == variables.yes local number = settings.number == variables.yes local allopen = settings.opened == variables.all for k, v in next, settings_to_hash(settings.names or "") do names[k] = true if force then forced[k] = true if allopen then opened[k] = true end end if number then numbered[k] = true end end if not allopen then for k, v in next, settings_to_hash(settings.opened or "") do opened[k] = true end end end function bookmarks.overload(name,text) local l, ls = lists.tobesaved, nil if #l == 0 then -- no entries elseif name == "" then ls = l[#l] else for i=#l,0,-1 do local li = l[i] local metadata = li.metadata if metadata and not metadata.nolist and metadata.name == name then ls = li break end end end if ls then ls.titledata.bookmark = text end end local function stripped(str) -- kind of generic str = gsub(str,"\\([A-Z]+)","%1") -- \LOGO str = gsub(str,"\\ "," ") -- \ str = gsub(str,"\\([A-Za-z]+) *{(.-)}","%1") -- \bla{...} str = gsub(str," +"," ") -- spaces return str end -- todo: collect specs and collect later i.e. multiple places local numberspec = { } function bookmarks.setup(spec) -- table.merge(numberspec,spec) for k, v in next, spec do numberspec[k] = v end end function bookmarks.place() if next(names) then local list = lists.filtercollected(names,"all",nil,lists.collected,forced) if #list > 0 then local levels, noflevels, lastlevel = { }, 0, 1 for i=1,#list do local li = list[i] local metadata = li.metadata local name = metadata.name if not metadata.nolist or forced[name] then -- and levelmap[name] then local titledata = li.titledata if titledata then local structural = levelmap[name] lastlevel = structural or lastlevel local title = titledata.bookmark if not title or title == "" then -- We could typeset the title and then convert it. if not structural then -- placeholder, todo: bookmarklabel title = name .. ": " .. (titledata.title or "?") else title = titledata.title or "?" end end if numbered[name] then local sectiondata = sections.collected[li.references.section] local numberdata = li.numberdata if sectiondata and numberdata and not numberdata.hidenumber then -- we could typeset the number and convert it title = concat(sections.typesetnumber(sectiondata,"direct",numberspec,sectiondata)) .. " " .. title end end noflevels = noflevels + 1 levels[noflevels] = { lastlevel, stripped(title), -- can be replaced by converter li.references, -- has internal and realpage allopen or opened[name] } end end end bookmarks.finalize(levels) end function bookmarks.place() end -- prevent second run end end function bookmarks.flatten(levels) -- This function promotes leading structurelements with a higher level -- to the next lower level. Such situations are the result of lack of -- structure: a subject preceding a chapter in a sectionblock. So, the -- following code runs over section blocks as well. (bookmarks-007.tex) local noflevels = #levels if noflevels > 1 then local skip, start, one = false, 1, levels[1] local first, block = one[1], one[3].block for i=2,noflevels do local li = levels[i] local new, newblock = li[1], li[3].block if newblock ~= block then first, block, start, skip = new, newblock, i, false elseif skip then -- go on elseif new > first then skip = true elseif new < first then for j=start,i-1 do local lj = levels[j] local old = lj[1] lj[1] = new if trace_bookmarks then report_bookmarks("promoting entry %a from level %a to %a: %s",j,old,new,lj[2]) end end skip = true end end end end function bookmarks.finalize(levels) -- This function can be overloaded by an optional converter -- that uses nodes.toutf on a typeset stream. This is something -- that we will support when the main loop has become a coroutine. codeinjections.addbookmarks(levels,bookmarks.method) end -- interface commands.overloadbookmark = bookmarks.overload commands.registerbookmark = bookmarks.register commands.setupbookmarks = bookmarks.setup context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-l7x.mkii0000644000175000017500000002074511754241457024222 0ustar norbertnorbert%D \module %D [ file=enco-l7x, %D version=2010.01.22, %D title=\CONTEXT\ Encoding Macros, %D subtitle=\LATEX\ L7x Encoding, %D author={Hans Hagen \& Mojca Miklavec}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Encoding vector to support Latvian and Lithuanian. The first %D part is taken from EC encoding, the rest has not been tested %D extensively. \startmapping[l7x] \definecaseswap 25 `I % dotless i (TODO - probably wrong; maybe use \defineuppercasecom) \definecaseswap 156 140 % oeligature \definecaseswap 184 168 % ostroke \definecaseswap 186 170 % rcommaaccent \definecaseswap 191 175 % aeligature \definecaseself 223 % ssharp (this is wrong, but no better way) \definecasemaps 192 to 222 lc +32 uc 0 \definecasemaps 224 to 254 lc 0 uc -32 \resetcaserange 215 to 215 % textmultiply \resetcaserange 247 to 247 % textdiv \stopmapping \startencoding[l7x] \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter quotesinglebase 13 \definecharacter guilsingleleft 14 \definecharacter guilsingleright 15 \definecharacter quotedblleft 16 \definecharacter quotedblright 17 \definecharacter quotedblbase 18 \definecharacter leftguillemot 19 \definecharacter rightguillemot 20 \definecharacter endash 21 \definecharacter emdash 22 %definecharacter compoundwordmark 23 %definecharacter perthousand 24 \definecharacter dotlessi 25 % or when missing: {j} \definecharacter dotlessj 26 % ff 27 % fi 28 % fl 29 % ffi 30 % ffl 31 %definecharacter textvisiblespace 32 % exclam ! 33 \definecharacter quotedbl 34 % numbersign # 35 % dollar $ 36 \definecharacter percent 37 % ampersand & 38 %definecharacter quotesingle 39 % fake 'm TODO:enco-def!!!! \definecharacter quoteright 39 % parenleft ( 40 % parenright ) 41 % asterisk * 42 % plus + 43 % comma , 44 \definecharacter softhyphen 45 % period . 46 % slash / 47 % 0-9 48-57 % colon : 58 % semicolon ; 59 % less < 60 % equal = 61 % greater > 62 % question ? 63 % at @ 64 % A-Z 65-90 % bracketleft [ 91 \definecharacter textbackslash 92 % bracketright ] 93 \definecharacter textasciicircum 94 \definecharacter textunderscore 95 \definecharacter quoteleft 96 % a-z 97-122 \definecharacter textbraceleft 123 \definecharacter textbraceright 125 \definecharacter textasciitilde 126 % .notdef 127 \definecharacter texteuro 128 % .notdef 129 \definecharacter quotesinglebase 130 \definecharacter textflorin 131 \definecharacter fhook 131 \definecharacter quotedblbase 132 \definecharacter textellipsis 133 \definecharacter textdag 134 \definecharacter textddag 135 % .notdef 136 \definecharacter perthousand 137 % .notdef 138 \definecharacter guilsingleleft 139 \definecharacter OEligature 140 % TODO: also \OE??? \definecharacter textdiaeresis 141 \definecharacter textcaron 142 \definecharacter textcedilla 143 % .notdef 144 \definecharacter quoteleft 145 \definecharacter quoteright 146 \definecharacter quotedblleft 147 \definecharacter quotedblright 148 \definecharacter textbullet 149 \definecharacter endash 150 \definecharacter emdash 151 % .notdef 152 \definecharacter trademark 153 % .notdef 154 \definecharacter guilsingleright 155 \definecharacter oeligature 156 \definecharacter textmacron 157 \definecharacter textogonek 158 % .notdef 159 %definecharacter space 160 % TODO!!! \definecharacter quotedblright 161 \definecharacter textcent 162 \definecharacter textsterling 163 \definecharacter textcurrency 164 \definecharacter quotedblbase 165 \definecharacter textbrokenbar 166 \definecharacter sectionmark 167 \definecharacter Ostroke 168 \definecharacter copyright 169 \definecharacter Rcommaaccent 170 \definecharacter leftguillemot 171 \definecharacter textlognot 172 %definecharacter softhyphen 173 % -> 45 (TODO!!!) \definecharacter registered 174 \definecharacter AEligature 175 \definecharacter textdegree 176 \definecharacter textpm 177 \definecharacter twosuperior 178 \definecharacter threesuperior 179 \definecharacter quotedblleft 180 \definecharacter textmu 181 \definecharacter paragraphmark 182 \definecharacter periodcentered 183 \definecharacter ostroke 184 \definecharacter onesuperior 185 \definecharacter rcommaaccent 186 \definecharacter rightguillemot 187 \definecharacter onequarter 188 \definecharacter onehalf 189 \definecharacter threequarter 190 \definecharacter aeligature 191 \definecharacter Aogonek 192 \definecharacter Iogonek 193 \definecharacter Amacron 194 \definecharacter Cacute 195 \definecharacter Adiaeresis 196 \definecharacter Aring 197 \definecharacter Eogonek 198 \definecharacter Emacron 199 \definecharacter Ccaron 200 \definecharacter Eacute 201 \definecharacter Zacute 202 \definecharacter Edotaccent 203 \definecharacter Gcommaaccent 204 \definecharacter Kcommaaccent 205 \definecharacter Imacron 206 \definecharacter Lcommaaccent 207 \definecharacter Scaron 208 \definecharacter Nacute 209 \definecharacter Ncommaaccent 210 \definecharacter Oacute 211 \definecharacter Omacron 212 \definecharacter Otilde 213 \definecharacter Odiaeresis 214 \definecharacter textmultiply 215 \definecharacter Uogonek 216 \definecharacter Lstroke 217 \definecharacter Sacute 218 \definecharacter Umacron 219 \definecharacter Udiaeresis 220 \definecharacter Zdotaccent 221 \definecharacter Zcaron 222 \definecharacter ssharp 223 \definecharacter aogonek 224 \definecharacter iogonek 225 \definecharacter amacron 226 \definecharacter cacute 227 \definecharacter adiaeresis 228 \definecharacter aring 229 \definecharacter eogonek 230 \definecharacter emacron 231 \definecharacter ccaron 232 \definecharacter eacute 233 \definecharacter zacute 234 \definecharacter edotaccent 235 \definecharacter gcommaaccent 236 \definecharacter kcommaaccent 237 \definecharacter imacron 238 \definecharacter lcommaaccent 239 \definecharacter scaron 240 \definecharacter nacute 241 \definecharacter ncommaaccent 242 \definecharacter oacute 243 \definecharacter omacron 244 \definecharacter otilde 245 \definecharacter odiaeresis 246 \definecharacter textdiv 247 \definecharacter uogonek 248 \definecharacter lstroke 249 \definecharacter sacute 250 \definecharacter umacron 251 \definecharacter udiaeresis 252 \definecharacter zdotaccent 253 \definecharacter zcaron 254 \definecharacter quoteright 255 \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ota.lua0000644000175000017500000003715312130411274024127 0ustar norbertnorbertif not modules then modules = { } end modules ['font-ota'] = { version = 1.001, comment = "companion to font-otf.lua (analysing)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this might become scrp-*.lua local type = type if not trackers then trackers = { register = function() end } end ----- trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end) local fonts, nodes, node = fonts, nodes, node local allocate = utilities.storage.allocate local otf = fonts.handlers.otf local analyzers = fonts.analyzers local initializers = allocate() local methods = allocate() analyzers.initializers = initializers analyzers.methods = methods analyzers.useunicodemarks = false local a_state = attributes.private('state') local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local math_code = nodecodes.math local traverse_id = node.traverse_id local traverse_node_list = node.traverse local end_of_math = node.end_of_math local fontdata = fonts.hashes.identifiers local categories = characters and characters.categories or { } -- sorry, only in context local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register --[[ldx--

Analyzers run per script and/or language and are needed in order to process features right.

--ldx]]-- -- never use these numbers directly local s_init = 1 local s_rphf = 7 local s_medi = 2 local s_half = 8 local s_fina = 3 local s_pref = 9 local s_isol = 4 local s_blwf = 10 local s_mark = 5 local s_pstf = 11 local s_rest = 6 local states = { init = s_init, medi = s_medi, fina = s_fina, isol = s_isol, mark = s_mark, rest = s_rest, rphf = s_rphf, half = s_half, pref = s_pref, blwf = s_blwf, pstf = s_pstf, } local features = { init = s_init, medi = s_medi, fina = s_fina, isol = s_isol, -- mark = s_mark, } analyzers.states = states analyzers.features = features -- todo: analyzers per script/lang, cross font, so we need an font id hash -> script -- e.g. latin -> hyphenate, arab -> 1/2/3 analyze -- its own namespace function analyzers.setstate(head,font) local useunicodemarks = analyzers.useunicodemarks local tfmdata = fontdata[font] local descriptions = tfmdata.descriptions local first, last, current, n, done = nil, nil, head, 0, false -- maybe make n boolean while current do local id = current.id if id == glyph_code and current.font == font then done = true local char = current.char local d = descriptions[char] if d then if d.class == "mark" or (useunicodemarks and categories[char] == "mn") then done = true current[a_state] = s_mark elseif n == 0 then first, last, n = current, current, 1 current[a_state] = s_init else last, n = current, n+1 current[a_state] = s_medi end else -- finish if first and first == last then last[a_state] = s_isol elseif last then last[a_state] = s_fina end first, last, n = nil, nil, 0 end elseif id == disc_code then -- always in the middle current[a_state] = s_midi last = current else -- finish if first and first == last then last[a_state] = s_isol elseif last then last[a_state] = s_fina end first, last, n = nil, nil, 0 if id == math_code then current = end_of_math(current) end end current = current.next end if first and first == last then last[a_state] = s_isol elseif last then last[a_state] = s_fina end return head, done end -- in the future we will use language/script attributes instead of the -- font related value, but then we also need dynamic features which is -- somewhat slower; and .. we need a chain of them local function analyzeinitializer(tfmdata,value) -- attr local script, language = otf.scriptandlanguage(tfmdata) -- attr local action = initializers[script] if not action then -- skip elseif type(action) == "function" then return action(tfmdata,value) else local action = action[language] if action then return action(tfmdata,value) end end end local function analyzeprocessor(head,font,attr) local tfmdata = fontdata[font] local script, language = otf.scriptandlanguage(tfmdata,attr) local action = methods[script] if not action then -- skip elseif type(action) == "function" then return action(head,font,attr) else action = action[language] if action then return action(head,font,attr) end end return head, false end registerotffeature { name = "analyze", description = "analysis of (for instance) character classes", default = true, initializers = { node = analyzeinitializer, }, processors = { position = 1, node = analyzeprocessor, } } -- latin methods.latn = analyzers.setstate -- This info eventually can go into char-def and we will have a state -- table for generic then (unicode recognized all states but in practice -- only has only -- -- isolated : isol -- final : isol_fina -- medial : isol_fina_medi_init -- -- so in practice, without analyzer it's rather useless info which is -- why having it in char-def makes only sense for special purposes (like) -- like tracing cq. visualizing. local tatweel = 0x0640 local zwnj = 0x200C local zwj = 0x200D local isolated = { -- isol [0x0600] = true, [0x0601] = true, [0x0602] = true, [0x0603] = true, [0x0604] = true, [0x0608] = true, [0x060B] = true, [0x0621] = true, [0x0674] = true, [0x06DD] = true, -- mandaic [0x0856] = true, [0x0858] = true, [0x0857] = true, -- n'ko [0x07FA] = true, -- also here: [zwnj] = true, } local final = { -- isol_fina [0x0622] = true, [0x0623] = true, [0x0624] = true, [0x0625] = true, [0x0627] = true, [0x0629] = true, [0x062F] = true, [0x0630] = true, [0x0631] = true, [0x0632] = true, [0x0648] = true, [0x0671] = true, [0x0672] = true, [0x0673] = true, [0x0675] = true, [0x0676] = true, [0x0677] = true, [0x0688] = true, [0x0689] = true, [0x068A] = true, [0x068B] = true, [0x068C] = true, [0x068D] = true, [0x068E] = true, [0x068F] = true, [0x0690] = true, [0x0691] = true, [0x0692] = true, [0x0693] = true, [0x0694] = true, [0x0695] = true, [0x0696] = true, [0x0697] = true, [0x0698] = true, [0x0699] = true, [0x06C0] = true, [0x06C3] = true, [0x06C4] = true, [0x06C5] = true, [0x06C6] = true, [0x06C7] = true, [0x06C8] = true, [0x06C9] = true, [0x06CA] = true, [0x06CB] = true, [0x06CD] = true, [0x06CF] = true, [0x06D2] = true, [0x06D3] = true, [0x06D5] = true, [0x06EE] = true, [0x06EF] = true, [0x0759] = true, [0x075A] = true, [0x075B] = true, [0x076B] = true, [0x076C] = true, [0x0771] = true, [0x0773] = true, [0x0774] = true, [0x0778] = true, [0x0779] = true, [0x08AA] = true, [0x08AB] = true, [0x08AC] = true, [0xFEF5] = true, [0xFEF7] = true, [0xFEF9] = true, [0xFEFB] = true, -- syriac [0x0710] = true, [0x0715] = true, [0x0716] = true, [0x0717] = true, [0x0718] = true, [0x0719] = true, [0x0728] = true, [0x072A] = true, [0x072C] = true, [0x071E] = true, [0x072F] = true, [0x074D] = true, -- mandaic [0x0840] = true, [0x0849] = true, [0x0854] = true, [0x0846] = true, [0x084F] = true } local medial = { -- isol_fina_medi_init [0x0626] = true, [0x0628] = true, [0x062A] = true, [0x062B] = true, [0x062C] = true, [0x062D] = true, [0x062E] = true, [0x0633] = true, [0x0634] = true, [0x0635] = true, [0x0636] = true, [0x0637] = true, [0x0638] = true, [0x0639] = true, [0x063A] = true, [0x063B] = true, [0x063C] = true, [0x063D] = true, [0x063E] = true, [0x063F] = true, [0x0641] = true, [0x0642] = true, [0x0643] = true, [0x0644] = true, [0x0645] = true, [0x0646] = true, [0x0647] = true, [0x0649] = true, [0x064A] = true, [0x066E] = true, [0x066F] = true, [0x0678] = true, [0x0679] = true, [0x067A] = true, [0x067B] = true, [0x067C] = true, [0x067D] = true, [0x067E] = true, [0x067F] = true, [0x0680] = true, [0x0681] = true, [0x0682] = true, [0x0683] = true, [0x0684] = true, [0x0685] = true, [0x0686] = true, [0x0687] = true, [0x069A] = true, [0x069B] = true, [0x069C] = true, [0x069D] = true, [0x069E] = true, [0x069F] = true, [0x06A0] = true, [0x06A1] = true, [0x06A2] = true, [0x06A3] = true, [0x06A4] = true, [0x06A5] = true, [0x06A6] = true, [0x06A7] = true, [0x06A8] = true, [0x06A9] = true, [0x06AA] = true, [0x06AB] = true, [0x06AC] = true, [0x06AD] = true, [0x06AE] = true, [0x06AF] = true, [0x06B0] = true, [0x06B1] = true, [0x06B2] = true, [0x06B3] = true, [0x06B4] = true, [0x06B5] = true, [0x06B6] = true, [0x06B7] = true, [0x06B8] = true, [0x06B9] = true, [0x06BA] = true, [0x06BB] = true, [0x06BC] = true, [0x06BD] = true, [0x06BE] = true, [0x06BF] = true, [0x06C1] = true, [0x06C2] = true, [0x06CC] = true, [0x06CE] = true, [0x06D0] = true, [0x06D1] = true, [0x06FA] = true, [0x06FB] = true, [0x06FC] = true, [0x06FF] = true, [0x0750] = true, [0x0751] = true, [0x0752] = true, [0x0753] = true, [0x0754] = true, [0x0755] = true, [0x0756] = true, [0x0757] = true, [0x0758] = true, [0x075C] = true, [0x075D] = true, [0x075E] = true, [0x075F] = true, [0x0760] = true, [0x0761] = true, [0x0762] = true, [0x0763] = true, [0x0764] = true, [0x0765] = true, [0x0766] = true, [0x0767] = true, [0x0768] = true, [0x0769] = true, [0x076A] = true, [0x076D] = true, [0x076E] = true, [0x076F] = true, [0x0770] = true, [0x0772] = true, [0x0775] = true, [0x0776] = true, [0x0777] = true, [0x077A] = true, [0x077B] = true, [0x077C] = true, [0x077D] = true, [0x077E] = true, [0x077F] = true, [0x08A0] = true, [0x08A2] = true, [0x08A4] = true, [0x08A5] = true, [0x08A6] = true, [0x0620] = true, [0x08A8] = true, [0x08A9] = true, [0x08A7] = true, [0x08A3] = true, -- syriac [0x0712] = true, [0x0713] = true, [0x0714] = true, [0x071A] = true, [0x071B] = true, [0x071C] = true, [0x071D] = true, [0x071F] = true, [0x0720] = true, [0x0721] = true, [0x0722] = true, [0x0723] = true, [0x0724] = true, [0x0725] = true, [0x0726] = true, [0x0727] = true, [0x0729] = true, [0x072B] = true, [0x072D] = true, [0x072E] = true, [0x074E] = true, [0x074F] = true, -- mandaic [0x0841] = true, [0x0842] = true, [0x0843] = true, [0x0844] = true, [0x0845] = true, [0x0847] = true, [0x0848] = true, [0x0855] = true, [0x0851] = true, [0x084E] = true, [0x084D] = true, [0x084A] = true, [0x084B] = true, [0x084C] = true, [0x0850] = true, [0x0852] = true, [0x0853] = true, -- n'ko [0x07D7] = true, [0x07E8] = true, [0x07D9] = true, [0x07EA] = true, [0x07CA] = true, [0x07DB] = true, [0x07CC] = true, [0x07DD] = true, [0x07CE] = true, [0x07DF] = true, [0x07D4] = true, [0x07E5] = true, [0x07E9] = true, [0x07E7] = true, [0x07E3] = true, [0x07E2] = true, [0x07E0] = true, [0x07E1] = true, [0x07DE] = true, [0x07DC] = true, [0x07D1] = true, [0x07DA] = true, [0x07D8] = true, [0x07D6] = true, [0x07D2] = true, [0x07D0] = true, [0x07CF] = true, [0x07CD] = true, [0x07CB] = true, [0x07D3] = true, [0x07E4] = true, [0x07D5] = true, [0x07E6] = true, -- also here: [tatweel]= true, [zwj] = true, } local arab_warned = { } -- todo: gref local function warning(current,what) local char = current.char if not arab_warned[char] then log.report("analyze","arab: character %C has no %a class",char,what) arab_warned[char] = true end end -- potential optimization: local medial_final = table.merged(medial,final) local function finish(first,last) if last then if first == last then local fc = first.char if medial[fc] or final[fc] then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end else local lc = last.char if medial[lc] or final[lc] then -- if laststate == 1 or laststate == 2 or laststate == 4 then last[a_state] = s_fina else warning(last,"fina") last[a_state] = s_error end end first, last = nil, nil elseif first then -- first and last are either both set so we never com here local fc = first.char if medial[fc] or final[fc] then first[a_state] = s_isol else warning(first,"isol") first[a_state] = s_error end first = nil end return first, last end function methods.arab(head,font,attr) local useunicodemarks = analyzers.useunicodemarks local tfmdata = fontdata[font] local marks = tfmdata.resources.marks local first, last, current, done = nil, nil, head, false while current do local id = current.id if id == glyph_code and current.font == font and current.subtype<256 and not current[a_state] then done = true local char = current.char if marks[char] or (useunicodemarks and categories[char] == "mn") then current[a_state] = s_mark elseif isolated[char] then -- can be zwj or zwnj too first, last = finish(first,last) current[a_state] = s_isol first, last = nil, nil elseif not first then if medial[char] then current[a_state] = s_init first, last = first or current, current elseif final[char] then current[a_state] = s_isol first, last = nil, nil else -- no arab first, last = finish(first,last) end elseif medial[char] then first, last = first or current, current current[a_state] = s_medi elseif final[char] then if not last[a_state] == s_init then -- tricky, we need to check what last may be ! last[a_state] = s_medi end current[a_state] = s_fina first, last = nil, nil elseif char >= 0x0600 and char <= 0x06FF then -- needs checking current[a_state] = s_rest first, last = finish(first,last) else -- no first, last = finish(first,last) end else if first or last then first, last = finish(first,last) end if id == math_code then current = end_of_math(current) end end current = current.next end if first or last then finish(first,last) end return head, done end methods.syrc = methods.arab methods.mand = methods.arab methods.nko = methods.arab directives.register("otf.analyze.useunicodemarks",function(v) analyzers.useunicodemarks = v end) context-2013.05.28.20130704/texmf-dist/tex/context/base/s-sql-tables.mkiv0000644000175000017500000000112412161703335025067 0ustar norbertnorbert%D \module %D [ file=s-sql-tables, %D version=2012.07.12, %D title=\CONTEXT\ Extra Modules, %D subtitle=SQL, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % for the moment no helpers \startmodule[s-sql-tables] \registerctxluafile{s-sql-tables}{} \installmodulecommandluasingle \showdefinedsqltables {moduledata.sql.tables.showdefined} \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-hvmath.mkiv0000644000175000017500000000202711754241457025625 0ustar norbertnorbert%D \module %D [ file=type-imp-hvmath, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=HV Math Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \loadtypescriptfile[texgyre] \starttypescriptcollection[hvmath] \starttypescript [\s!math] [hvmath] \definefontsynonym[\s!MathRoman][hvmath@hvmath-math] \loadfontgoodies[hvmath-math] \stoptypescript \starttypescript [hvmath] \definetypeface [hvmath] [\s!ss] [\s!sans] [heros] [\s!default] [\s!rscale=0.9] \definetypeface [hvmath] [\s!rm] [\s!serif] [termes] [\s!default] \definetypeface [hvmath] [\s!tt] [\s!mono] [cursor] [\s!default] [\s!rscale=1.05] \definetypeface [hvmath] [\s!mm] [\s!math] [hvmath] [\s!default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-fr.mkiv0000644000175000017500000000102211754241457024136 0ustar norbertnorbert%D \module %D [ file=cont-de, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ French Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {french} \def\defaultlanguagetag{fr} \input context.mkiv \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-ver.mkiv0000644000175000017500000006337512130411274024306 0ustar norbertnorbert%D \module %D [ file=buff-ver, % was core-ver %D version=2000.05.09, %D title=\CONTEXT\ Buffer Macros, %D subtitle=Verbatim, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % check after-first and before-last breaks \writestatus{loading}{ConTeXt Buffer Macros / Verbatim} \registerctxluafile{buff-ver}{1.001} \unprotect \definesystemattribute[verbatimline][public] \appendtoksonce \attribute\verbatimlineattribute\attributeunsetvalue \to \everyforgetall %D Initializations. \installcorenamespace{typinglines} \installcorenamespace{typingspace} \installcorenamespace{typingblank} % needs checking ... used? \newtoks\everyinitializeverbatim \appendtoks \the\everyresettypesetting \resetfontfeature \resetcharacterspacing \to \everyinitializeverbatim \def\setverbatimspaceskip % to be checked: must happen after font switch {\spaceskip\fontcharwd\font`x\relax \xspaceskip\spaceskip} \unexpanded\def\specialcontrolspace{\hskip\zeropoint\fastcontrolspace\hskip\zeropoint} \setvalue{\??typinglines\v!yes }{\obeybreakpoints} \setvalue{\??typinglines\v!hyphenated}{\obeyhyphens} \setvalue{\??typingspace\v!on }{\let\obeyedspace\specialcontrolspace} \setvalue{\??typingspace\v!stretch }{\let\obeyedspace\specialstretchedspace} \setvalue{\??typingspace\v!normal }{} \setvalue{\??typingspace\v!fixed }{\let\obeyedspace\specialfixedspace} \setvalue{\??typingblank\v!standard }{\s_spac_whitespace_parskip} \setvalue{\??typingblank\v!small }{\smallskipamount} \setvalue{\??typingblank\v!medium }{\medskipamount} \setvalue{\??typingblank\v!big }{\bigskipamount} \setvalue{\??typingblank\v!halfline }{.5\baselineskip} \setvalue{\??typingblank\v!line }{\baselineskip} \setvalue{\??typingblank\v!none }{\zeropoint} \def\buff_verbatim_initialize_type_one {\let\obeylines\ignorelines \ignorehyphens % default \usetypestyleandcolor\c!style\c!color \setcatcodetable\vrbcatcodes} \def\buff_verbatim_initialize_type_two {\let\obeyedspace\specialobeyedspace \csname\??typingspace\typeparameter\c!space\endcsname \relax\the\everyinitializeverbatim\relax} \unexpanded\def\doinitializeverbatim % for use elsewhere .. temp hack (see lxml-ini) {\buff_verbatim_initialize_type_one \buff_verbatim_initialize_type_two} \let\buff_verbatim_set_line_margin\relax \def\buff_verbatim_set_line_margin_indeed {\hskip\doifoddpageelse{\typingparameter\c!oddmargin}{\typingparameter\c!evenmargin}\relax} \def\buff_verbatim_check_margins {\scratchskip\typingparameter\c!oddmargin\relax \ifzeropt\scratchskip \else \let\buff_verbatim_set_line_margin\buff_verbatim_set_line_margin_indeed \fi \scratchskip\typingparameter\c!evenmargin\relax \ifzeropt\scratchskip \else \let\buff_verbatim_set_line_margin\buff_verbatim_set_line_margin_indeed \fi \ifx\buff_verbatim_set_line_margin\relax \doadaptleftskip{\typingparameter\c!margin}% \fi} \def\buff_verbatim_initialize_typing_one {\switchtobodyfont[\typingparameter\c!bodyfont]% can be low level call \buff_verbatim_check_margins \usetypingstyleandcolor\c!style\c!color \doifsomething{\typingparameter\c!align}{\setupalign[\typingparameter\c!align]}% \ignorehyphens} % default \def\buff_verbatim_initialize_typing_two {\let\obeyedspace\specialobeyedspace \csname\??typingspace\typingparameter\c!space\endcsname \csname\??typinglines\typingparameter\c!lines\endcsname \relax\the\everyinitializeverbatim\relax} %D \macros %D {definetype,setuptype} %D %D Specific inline verbatim commands can be defined with the %D following command. \installcorenamespace{type} \installcommandhandler \??type {type} \??type \appendtoks \setuevalue{\currenttype}{\buff_verbatim_type{\currenttype}}% \to \everydefinetype \appendtoks \buff_verbatim_initialize_visualizer{\typeparameter\c!option}% \to \everysetuptype %D \macros %D {definetyping,setuptyping} %D %D For most users the standard \type{\start}||\type{\stop}||pair %D will suffice, but for documentation purposes the next %D definition command can be of use: %D %D \starttyping %D \definetyping[extratyping][margin=3em] %D %D \startextratyping %D these extra ones are indented by 1 em %D \stopextratyping %D \stoptyping %D %D The definitions default to the standard typing values. \installcorenamespace{typing} \installcommandhandler \??typing {typing} \??typing \appendtoks \setuevalue{\e!start\currenttyping}{\buff_verbatim_typing_start{\currenttyping}}% \setuevalue{\e!stop \currenttyping}{\buff_verbatim_typing_stop {\currenttyping}}% \normalexpanded{\definelinenumbering[\currenttyping]}% \to \everydefinetyping \appendtoks \buff_verbatim_initialize_visualizer{\typingparameter\c!option}% we can check at the tex end \to \everysetuptyping \def\buff_verbatim_initialize_visualizer#1% {\ifproductionrun\ctxcommand{loadvisualizer("#1")}\fi} %D Verbatim command are very sensitive to argument processing, %D which is a direct result of the \CATCODES\ being fixed at %D reading time. %D %D Typesetting inline verbatim can be accomplished by %D \type{\type}, which in this sentence was typeset by saying %D just \type{\type{\type}}, which in turn was typeset by %D \unknown. Using the normal grouping characters \type{{}} is %D the most natural way of using this command. %D %D A second, more or less redundant, alternative is delimiting %D the argument with an own character. This method was %D implemented in the context of a publication in the \MAPS, %D where this way of delimiting is recognized by \LATEX\ users. %D %D The third, more original alternative, is the one using %D \type{<<} and \type{>>} as delimiters. This alternative can %D be used in situations where slanted typeseting is needed. %D \macros %D {type} %D %D We define \type{\type} as a protected command. This command %D has several invocations: grouped, wirt boundary characters, %D and with font switches. %D %D \starttyping %D normal: \par \type{xx<<..xx..<> >>..>>xx} \par \type<<....>> \par \type<<..<>..>> \par %D normal: \par \type{xx<..xx.. >..>xx} \par \type{<....>} \par \type{<....>} %D \setuptype[option=slanted] %D slanted: \par \type{xx<<..sl..<> xx>>..sl..>>xx} \par \type<<..xx..>> \par \type<<..<>..>> \par %D slanted: \par \type{xx<<..sl.. xx>..sl..>>xx} \par \type<<..xx..>> \par \type<<....>> \par %D \setuptype[option=none] %D none: \par \type{xx<<..xx..<> >>..>>xx} \par \type<<....>> \par \type<<..<>..>> \par %D \stoptyping %D %D When writing the manual to \CONTEXT\ and documenting this %D source we needed to typeset \type{<<} and \type{>>}. Because %D we wanted to do this in the natural way, we've adapted the %D original definition a bit. This implementation went through %D several live cycles. The final implementation looks a bit %D further and treats the lone \type{<<} and \type{>>} a bit %D different. The \type {\null} prevents ligatures, which %D unfortunately turn up in Lucida fonts. %D %D The following lines show what happens when we set %D \type {option=commands}. %D %D \startbuffer %D \starttyping %D test//test test/BTEX \footnote{test test test}/ETEX test %D test//test test/BTEX \footnote{test test test}/ETEX test %D test test test/BTEX \bf(nota bene)/ETEX test %D test test test /BTEX \bf(nota bene)/ETEX test %D \stoptyping %D \stopbuffer %D %D % \bgroup\setuptyping[option=commands]\getbuffer\egroup %D %D this was keyed in as: %D %D \typebuffer % Beware, the command is supposed to do something like \framed and not % manipulate content i.e. it gets no argument but something b/egrouped % instead: \def\buff_verbatim_left_of_type {\typeparameter\c!left \typeparameter\c!command\bgroup} \def\buff_verbatim_right_of_type {\egroup \typeparameter\c!right} \unexpanded\def\type{\buff_verbatim_type\empty} \unexpanded\def\typ {\buff_verbatim_typ \empty} \unexpanded\def\buff_verbatim_type#1% {\dontleavehmode \bgroup \edef\currenttype{#1}% \doifnextoptionalelse\buff_verbatim_type_yes\buff_verbatim_type_nop} \def\buff_verbatim_type_yes[#1]% {\setupcurrenttype[#1]% \buff_verbatim_type_nop} \def\buff_verbatim_type_nop {\buff_verbatim_left_of_type \futurelet\next\buff_verbatim_type_one} \def\buff_verbatim_typ#1% {\dontleavehmode \bgroup \edef\currenttype{#1}% \lettypeparameter\v!lines\v!hyphenated \let\specialobeyedspace\specialstretchedspace \doifnextoptionalelse\buff_verbatim_type_yes\buff_verbatim_type_nop} \def\buff_verbatim_type_one {\ifx\next\bgroup \expandafter\buff_verbatim_type_a \else \expandafter\buff_verbatim_type_two \fi} \def\buff_verbatim_type_two {\catcode`<=\othercatcode % old precaution \catcode`>=\othercatcode % old precaution \futurelet\next\buff_verbatim_type_three} \def\buff_verbatim_type_three {\if\next<% \expandafter\buff_verbatim_type_b \else \expandafter\buff_verbatim_type_c \fi} \def\buff_verbatim_type_a {\buff_verbatim_initialize_type_one \setcatcodetable\tpacatcodes \buff_verbatim_type_normal} \def\buff_verbatim_type_b#1% {\buff_verbatim_initialize_type_one \setcatcodetable\tpbcatcodes \buff_verbatim_type_nested} \def\buff_verbatim_type_c#1% {\buff_verbatim_initialize_type_one \setcatcodetable\vrbcatcodes \def\next##1#1{\buff_verbatim_type_normal{##1}}% \next} \def\buff_verbatim_type_normal#1% {\buff_verbatim_initialize_type_two \dostarttagged\t!verbatim\currenttype \ctxcommand{typestring{ data = \!!bs\detokenize{#1}\!!es, tab = "\typeparameter\c!tab", method = "\typeparameter\c!option", nature = "inline", }}% \dostoptagged \buff_verbatim_right_of_type \egroup} \def\buff_verbatim_type_nested#1% {\buff_verbatim_initialize_type_two \dostarttagged\t!verbatim\currenttype \ctxcommand{typestring{ data = \!!bs\detokenize{#1}\!!es, tab = "\typeparameter\c!tab", method = "nested", % we force a special visualizer option = "\typeparameter\c!option", % extra visualizer (maybe: nested,\typeparameter\c!option) nature = "inline", }}% \dostoptagged \buff_verbatim_right_of_type \egroup \gobbleoneargument} % grab last > %D \macros %D {obeyhyphens,obeybreakpoints} %D %D Although it's not clear from the macros, one character %D trait of this macros, which are build on top of the support %D module, is that they don't hyphenate. We therefore offer %D the alternative \type{\typ}. The current implementation %D works all right, but a decent hyphenation support of %D \type{\tt} text will be implemented soon. \unexpanded\def\specialfixedspace {\kern\interwordspace\relax} \unexpanded\def\specialobeyedspace {\hskip\interwordspace\relax} % better than spaceskip \unexpanded\def\specialstretchedspace{\hskip.5\interwordspace\s!plus.125\interwordstretch\relax} % more but not less \unexpanded\def\specialcontrolspace {\hskip\zeropoint\hbox{\normalcontrolspace}\hskip\zeropoint\relax} \unexpanded\def\obeyhyphens {\let\obeyedspace \specialobeyedspace % maybe \specialstretchedspace \let\controlspace\specialcontrolspace \spaceskip.25em\relax} % hm a bit of stretch ! \unexpanded\def\obeybreakpoints {\ignorehyphens \veryraggedright} \unexpanded\def\ignorehyphens {\language\minusone % extra bonus, the \null should do the job too \let\obeyedspace \specialobeyedspace \let\controlspace\specialcontrolspace \spaceskip.5em\relax} %D \macros %D {tex,arg,mat,dis,astype} %D %D Sometimes, for instance when we pass verbatim text as an %D argument, the fixed \CATCODES\ interfere with our wishes. An %D experimental implementation of character by character %D processing of verbatim text did overcome this limitation, %D but we've decided not to use that slow and sometimes %D troublesome solution. Instead we stick to some 'old' %D \CONTEXT\ macros for typesetting typical \TEX\ characters. \def\lesscharacter {<} % obsolete \def\morecharacter {>} % obsolete \let\texescape \textbackslash \let\leftargument \textbraceleft \let\rightargument \textbraceright \let\inlinemathmarker \textdollar \def\displaymathmarker{\textdollar\textdollar} \def\buff_verbatim_special_type#1#2#% # gobbles spaces {\dontleavehmode\bgroup \buff_verbatim_initialize_type_one \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode\endgroupcatcode #1% \aftergroup#2% \let\nexttoken} \unexpanded\def\tex{\buff_verbatim_special_type\texescape \relax} \unexpanded\def\arg{\buff_verbatim_special_type\leftargument \rightargument} \unexpanded\def\mat{\buff_verbatim_special_type\inlinemathmarker \inlinemathmarker} \unexpanded\def\dis{\buff_verbatim_special_type\displaymathmarker\displaymathmarker} \let\normaltexttex\tex \let\normaltextarg\arg \let\normaltextmat\mat \let\normaltextdis\dis \unexpanded\def\astype{\bgroup\usetypestyleandcolor\c!style\c!color\let\nexttoken} \unexpanded\def\asciistr#1{\dontleavehmode{\verbatimfont\detokenize{#1}}} % use in some old styles %D The basic display verbatim commands are defined in an indirect way. As we %D will see, they are a specific case of a more general mechanism. \let\beginofverbatimlines\relax % hooks \let\endofverbatimlines \relax % hooks \unexpanded\def\buff_verbatim_typing_start#1% tricky non standard lookahead {\begingroup \edef\currenttyping{#1}% \obeylines \futurelet\nexttoken\buff_verbatim_typing_start_indeed} \def\buff_verbatim_typing_start_indeed {\ifx\nexttoken[% \expandafter\buff_verbatim_typing_start_yes \else \expandafter\buff_verbatim_typing_start_nop \fi} \def\buff_verbatim_typing_start_nop {\typingparameter\c!before \startpacked[\v!blank] \buff_verbatim_setup_line_numbering \buff_verbatim_initialize_typing_one \normalexpanded{\buff_verbatim_type_block{\e!start\currenttyping}{\e!stop\currenttyping}}} \def\buff_verbatim_typing_start_yes[#1]% {\typingparameter\c!before \startpacked[\v!blank] \doifassignmentelse{#1} {\setuptyping[\currenttyping][#1]} {\doifinset\v!continue{#1}{\setuptyping[\currenttyping][\c!continue=\v!yes]}}% \buff_verbatim_setup_line_numbering \buff_verbatim_initialize_typing_one \normalexpanded{\buff_verbatim_type_block{\e!start\currenttyping}{\e!stop\currenttyping}}} \unexpanded\def\buff_verbatim_type_block#1#2% {\buff_pickup{_typing_}{#1}{#2}{}{\buff_verbatim_type_block_verbatim_indeed{#1}{#2}}} % was dowithbuffer \def\buff_verbatim_type_block_verbatim_indeed#1#2% {\buff_verbatim_initialize_typing_two \dostarttagged\t!verbatimblock\currenttyping \beginofverbatimlines \dostarttagged\t!verbatimlines\empty \ctxcommand{typebuffer { name = "_typing_", strip = "\typingparameter\c!strip", range = "\typingparameter\c!range", tab = "\typingparameter\c!tab", method = "\typingparameter\c!option", escape = \!!bs\typingparameter\c!escape\!!es, nature = "display", }}% \dostoptagged \endofverbatimlines \dostoptagged \csname#2\endcsname} \unexpanded\def\buff_verbatim_typing_stop#1% hm, currenttyping {\stoppacked \typingparameter\c!after \useindentnextparameter\typingparameter \endgroup \dorechecknextindentation} %D Line numbering for files is combined with filtering, while %D display verbatim has the ability to continue. %D %D \starttyping %D \typefile[numbering=file,start=10,stop=12]{test.tex} %D %D \definetyping[code][numbering=line] %D %D \starttext %D \startcode %D ... %D ... %D \stopcode %D %D \startcode[start=continue] %D ... %D ... %D \stopcode %D %D \startcode[start=10] %D ... %D \stopcode %D \stoptyping %D Ranges: %D %D \starttyping %D % label:start:one %D %D \def\MyMacro %D {just an example} %D %D % label:stop:one %D %D \starttext %D %D % \typefile[file][range={3,6}] {whatever.tex} %D % \typefile[file][range={3,+2}]{whatever.tex} %D %D \typefile[file][range={label:start:one,label:stop:one}]{whatever.tex} %D %D \stoptext %D \stoptyping %D \macros %D {typefile} %D %D Typesetting files verbatim (for the moment) only supports %D colorization of \TEX\ sources as valid option. The other %D setup values are inherited from display verbatim. %D The implementation of \type{\typefile} is straightforward: % [category] [settings] {name} % for historic reasons, all filenames are {} \unexpanded\def\typefile {\dodoubleempty\buff_verbatim_type_file} \def\buff_verbatim_type_file[#1][#2]#3% {\begingroup \ifsecondargument \setuptyping[#1][#2]% \buff_verbatim_type_file_checked{#1}{#3}% \else\iffirstargument \doifassignmentelse{#1} {\setuptyping[\v!file][#1] \buff_verbatim_type_file_checked\v!file{#3}} {\buff_verbatim_type_file_checked{#1}{#3}}% \else \buff_verbatim_type_file_checked\v!file{#3}% \fi\fi \endgroup} \def\buff_verbatim_type_file_checked#1#2% {\doifelsetypingfile{#2} {\buff_verbatim_type_file_indeed{#1}\askedtypingfile} {\showmessage\m!verbatims1{#2}}} \unexpanded\def\doifelsetypingfile#1% {\edef\askedtypingfile{\locfilename{#1}}% \ifx\askedtypingfile\empty \edef\askedtypingfile{\locfilename{#1.tex}}% downward compatible \fi \ifx\askedtypingfile\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\buff_verbatim_type_file_indeed#1#2% category name {\edef\currenttyping{#1}% \typingparameter\c!before \startpacked[\v!blank] \buff_verbatim_setup_line_numbering \buff_verbatim_initialize_typing_one \buff_verbatim_initialize_typing_two \dostarttagged\t!verbatimblock\currenttyping \beginofverbatimlines \dostarttagged\t!verbatimlines\empty \ctxcommand{typefile { name = "#2", strip = "\typingparameter\c!strip", range = "\typingparameter\c!range", regime = "\currentregime", tab = "\typingparameter\c!tab", method = "\typingparameter\c!option", nature = "display", }}% \dostoptagged \endofverbatimlines \dostoptagged \stoppacked \typingparameter\c!after} %D Line numbering: \newconditional\verbatimnumberinglines \def\beginofverbatimlinenumbering {\startlinenumbering [\currenttyping]% [\c!continue=\typingparameter\c!continue, \c!method=\v!type, \c!start=\typingparameter\c!start, \c!stop=\typingparameter\c!stop, % ? \c!step=\typingparameter\c!step]} \def\endofverbatimlinenumbering {\stoplinenumbering} \def\buff_verbatim_setup_line_numbering {\ifdefined\startlinenumbering \edef\currenttypingnumbering{\typingparameter\c!numbering}% \ifx\currenttypingnumbering\v!file \setuplinenumbering[\currenttyping][\c!method=\v!file]% \settrue\verbatimnumberinglines \else\ifx\currenttypingnumbering\v!line \settrue\verbatimnumberinglines \else \setfalse\verbatimnumberinglines \fi\fi \ifconditional\verbatimnumberinglines \let\beginofverbatimlines\beginofverbatimlinenumbering \let\endofverbatimlines \endofverbatimlinenumbering \fi \fi} %D \macros %D {filename} %D %D Typesetting filenames in monospaced fonts is possible with %D %D \starttyping %D \filename{here/there/filename.suffix} %D \stoptyping %D %D The definition is not that spectacular. \unexpanded\def\filename#1{{\tttf\hyphenatedfilename{#1}}} %D \macros %D {verbatim} %d %D And a bonus macro, an unexpanded detokenize: \unexpanded\def\verbatim#1{\detokenize{#1}} %D The setups for display verbatim and file verbatim are %D shared. One can adapt the extra defined typing environments, %D but they also default to the values below. Watch the %D alternative escape character. % \tttf gives problems with {\tx \type...} % \tt\tf does not adapt to e.g. \bf \setuptyping [\c!before=\blank, \c!after=\blank, %\c!bodyfont=, %\c!color=, \c!space=\v!off, \c!page=\v!no, \c!tab=\v!yes, % what is this: \s!ascii ? \c!option=\v!none, \c!text=\v!no, \c!style=\tt, \c!indentnext=\v!yes, \c!margin=\zeropoint, \c!evenmargin=\zeropoint, \c!oddmargin=\zeropoint, \c!blank=\v!line, %\c!escape=, % yes | no | {START,STOP} | default when yes: {BTEX,ETEX} \c!numbering=\v!no, %\c!lines=, %\c!range=, \c!start=1, %\c!stop=, \c!step=1, %\c!continue=, \c!strip=\v!no] % auto or number \definetyping[\v!typing] \setuptyping[\v!file] [\s!parent=\??typing\v!typing] % we don't want \start..\stop overload \setuptyping[\v!buffer][\s!parent=\??typing\v!file] % we don't want \start..\stop overload %D The setups for inline verbatim default to: \setuptype [\c!space=\v!off, %\c!color=, \c!style=\tt, %\c!option=\v!normal, \c!page=\v!no, \c!tab=\v!yes] %D Buffers % [name] [settings] | [name] | [settings] \unexpanded\def\typebuffer {\dodoubleempty\buff_verbatim_type_buffer} \unexpanded\def\buff_verbatim_type_defined_buffer {\dotripleempty\buff_verbatim_type_defined_buffer_indeed} \appendtoks \setuevalue{\e!type\currentbuffer}{\buff_verbatim_type_defined_buffer[\v!buffer][\currentdefinedbuffer]}% \to \everydefinebuffer \unexpanded\def\buff_verbatim_type_buffer[#1][#2]% {\begingroup \ifsecondargument \setuptyping[\v!buffer][#2]% \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\v!buffer}% [name] [settings] \else\iffirstargument \doifassignmentelse{#1} {\setuptyping[\v!buffer][#1]% \buff_verbatim_type_buffer_indeed\v!buffer\empty}% [settings] {\processcommalist[#1]{\buff_verbatim_type_buffer_indeed\v!buffer}}% [name] \else \buff_verbatim_type_buffer_indeed\v!buffer\empty% [] \fi\fi \endgroup} \def\buff_verbatim_type_defined_buffer_indeed[#1][#2][#3]% category name settings {\begingroup \ifthirdargument \setuptyping[#1][#3]% \fi \buff_verbatim_type_buffer_indeed{#1}{#2}% \endgroup} \def\buff_verbatim_type_buffer_indeed#1#2% category name {\edef\currenttyping{#1}% \typingparameter\c!before \startpacked[\v!blank] \buff_verbatim_setup_line_numbering \buff_verbatim_initialize_typing_one \buff_verbatim_initialize_typing_two \beginofverbatimlines \dostarttagged\t!verbatimblock{#1}% \ctxcommand{typebuffer { name = "#2", strip = "\typingparameter\c!strip", range = "\typingparameter\c!range", regime = "\currentregime", tab = "\typingparameter\c!tab", method = "\typingparameter\c!option", escape = \!!bs\typingparameter\c!escape\!!es, nature = "display", }}% \dostoptagged \endofverbatimlines \stoppacked \typingparameter\c!after} % get : before/after of buffer % typing : before/after of typing % process : no before/after (special case anyway) % the next one is obsolete (bad name and used nowhere) so if it stays % the name will change \unexpanded\def\processbuffer {\writestatus{nota bene}{\string\processbuffer\space is obsolete}% \dodoubleempty\buff_verbatim_process} \def\buff_verbatim_process[#1][#2]% {\begingroup \ifsecondargument \setuptyping[\v!buffer][#2]% \processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}% [name] [settings] \else\iffirstargument \doifassignmentelse{#1} {\setuptyping[\v!buffer][#1]% \buff_verbatim_process_indeed\v!buffer\empty}% [settings] {\processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}}% [name] \else \buff_verbatim_process_indeed\v!buffer\empty% [] \fi\fi \endgroup} \def\buff_verbatim_process_indeed#1#2% {\edef\currenttyping{#1}% \ctxcommand{processbuffer { name = "#2", strip = "\typingparameter\c!strip", tab = "\typingparameter\c!tab", method = "\typingparameter\c!option", nature = "direct", }}} % so far for obsolete % line numbering, keep broken lines together \newcount\nofverbatimlines \unexpanded\def\buff_verbatim_begin_of_line {\ifconditional\verbatimnumberinglines \global\advance\nofverbatimlines\plusone \attribute\verbatimlineattribute\nofverbatimlines \fi \noindent \buff_verbatim_set_line_margin \the\everyline\strut \dostarttagged\t!verbatimline\empty} \unexpanded\def\buff_verbatim_end_of_line {\dostoptagged \obeyedline % still needed? \par \ifconditional\verbatimnumberinglines \attribute\verbatimlineattribute\attributeunsetvalue \fi} \unexpanded\def\buff_verbatim_empty_line {\dostoptagged \ifconditional\verbatimnumberinglines \par\strut\par % this will be an option where we use a signal instead of a strut \else \blank[\typingparameter\c!blank]% \fi \dostarttagged\t!verbatimlines\empty} % hooks: \def\doinlineverbatimstart {} \def\doinlineverbatimstop {} \def\doinlineverbatimbeginline {} \def\doinlineverbatimnewline {\obeyedspace} \def\doinlineverbatimemptyline {\obeyedspace} \def\dodisplayverbatimstart {\buff_verbatim_begin_of_line} \def\dodisplayverbatimstop {\buff_verbatim_end_of_line} \def\dodisplayverbatimbeginline {\buff_verbatim_begin_of_line} \def\dodisplayverbatimnewline {\buff_verbatim_end_of_line\par} \def\dodisplayverbatimemptyline {\buff_verbatim_empty_line} \def\doverbatimspace {\obeyedspace} \loadmarkfile{buff-imp-default} % preloaded as otherwise spurious spaces inline due to loading \loadmarkfile{buff-imp-nested} % preloaded as otherwise spurious spaces inline due to loading \loadmarkfile{buff-imp-escaped} % for completeness %D To be considered: % \installcorenamespace{visualizer} % % \installcommandhandler \??visualizer {visualizer} \??visualizer % % \appendtoks % \setuevalue{\currentvisualizer}{\buff_verbatim_visualize{\currentvisualizer}}% % \to \everydefinevisualizer % % \unexpanded\def\buff_verbatim_visualize#1% % {\bgroup % \def\currentvisualizer{#1}% % \usevisualizerstyleandcolor\c!style\c!color % \let\next} \appendtoks \def\type#1{\letterbackslash\checkedstrippedcsname#1}% or maybe detokenize \def\tex #1{\letterbackslash#1}% \to \everysimplifycommands \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-63.tex0000644000175000017500000000404412130411274023664 0ustar norbertnorbert%D \module %D [ file=s-pre-63, %D version=2006.05.11, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 63, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. this module is under reconstruction \endinput \usemodule[pre-61,streams] \definemeasure[textgap] [\dimexpr24pt\relax] \definemeasure[leftwidth] [\dimexpr.25\textwidth-.5\measure{textgap}\relax] \definemeasure[rightwidth][\dimexpr.75\textwidth-.5\measure{textgap}\relax] \definestreamlayer[left] [width=\measure{leftwidth}] \definestreamlayer[right][width=\measure{rightwidth}] \setupbodyfont[12pt] \definefont[LeftFont][Normal sa 3] \setupheader[style=\tfc,before=\vss,after=\vss] \startsetups streamlayer:left:settings \hsize\measure{leftwidth} \LeftFont \setupinterlinespace \stopsetups \startsetups streamlayer:right:settings \hsize\measure{rightwidth} \stopsetups \definecombination[both][distance=\measure{textgap},location=top] \startsetups place:both \startcombination[both] {\StartLocalStep\placestreamlayer[left]\StopLocalStep} {} {\StartLocalStep\placestreamlayer[right]\StopLocalStep} {} \stopcombination \stopsetups \def\StartPage {\page \StartLocalSteps} \def\StopPage {\StopLocalSteps \page} \def\StartLeft {\startstreamlayer[left]} \def\StartRight{\startstreamlayer[right]} \def\StopLeft {\stopstreamlayer} \def\StopRight {\stopstreamlayer} \def\StartPair {} \def\StopPair {\setups[place:both]} % \doifnotmode {demo} {\endinput} \setupbodyfont[8pt] \definefont[BigFont][Normal sa 4] \starttext \StartPage \StartPair \StartLeft ZAPF \StopLeft \StartRight \input zapf \StopRight \StopPair \StartPair \StartLeft DAVIS \StopLeft \StartRight \input davis \StopRight \StopPair \StartPair \StartLeft WARD \StopLeft \StartRight \input ward \StopRight \StopPair \StopPage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/prop-ini.mkii0000644000175000017500000001132611754241457024316 0ustar norbertnorbert%D \module %D [ file=prop-ini, %D version=2003.04.20, %D title=\CONTEXT\ Property Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Property Macros / Initialization} %D Welcome to the third alternative of this yet undocumented module, %D which means that there is no public interface yet! \unprotect \newcount\propertylevel \def\currentpropertylevel {\csname\??py:l:\currentpropertytype\endcsname} % counter \def\previouspropertylevel{\csname\??py:p:\currentpropertytype\endcsname} % counter \def\currentproperty {\csname\??py:c:\number\currentpropertylevel \endcsname} % string \def\previousproperty {\csname\??py:c:\number\previouspropertylevel\endcsname} % string % more efficient: \def\currentproperty {\csname\??py:c:\number\propertylevel\endcsname} % string \def\currentpropertytype {\csname\??py\currentproperty\c!type\endcsname} \def\docheckproperty % watch the s instead of e {\csname\s!check\currentpropertytype property\endcsname \global\expandafter\let\csname\??py\s!check\currentproperty\endcsname\empty} \def\checkproperty[#1]% {\bgroup \def\currentproperty{#1}% \csname\??py\s!check\currentproperty\endcsname \egroup} \unexpanded\def\property[#1]% {\groupedcommand{\dostartproperty{#1}}\dostopproperty} \unexpanded\def\startproperty[#1]% {\dostartproperty{#1}} \unexpanded\def\stopproperty {\dostopproperty} \def\dostartgproperty {\begingroup\dostartproperty} \def\dostopgproperty {\dostopproperty\endgroup} \def\dostartproperty#1% evt pack: {current}{level}{ {\global\advance\propertylevel\plusone \@EAEAEA\xdef\currentproperty{#1}% \global\advance\previouspropertylevel\plusone \global\advance\currentpropertylevel\plusone \csname\??py\s!check\currentproperty\endcsname \csname\s!start\currentpropertytype\s!property\endcsname} \def\dostopproperty {\csname\s!stop\currentpropertytype\s!property\endcsname \global\advance\currentpropertylevel\minusone \global\advance\previouspropertylevel\minusone \global\advance\propertylevel\minusone} \def\defineproperty {\dotripleempty\dodefineproperty} \def\dodefineproperty[#1]% {\ifcsname\??py#1\c!global\endcsname \expandafter\nododefineproperty \else \expandafter\dododefineproperty \fi[#1]} % due to initializations/counters, definitions are always global % % global : yes : ungrouped % no : grouped % method : command : define commands % none : no commands \def\dododefineproperty[#1][#2][#3]% global ! ! ! {\getgparameters[\??py#1][\c!global=\v!no,\c!type=#2,\c!method=\v!none,#3]% global ! ! ! ! \ifcsname\??py:l:#2\endcsname \else \expandafter\newcount\csname\??py:l:#2\endcsname % current level \expandafter\newcount\csname\??py:p:#2\endcsname % previous level \global\csname\??py:p:#2\endcsname\minusone \global\expandafter\expandafter\let\csname\??py:c:0\endcsname\empty \fi \letgvalue{\??py\s!check#1}\docheckproperty \doifelsevalue{\??py#1\c!method}\v!command {\doifelsevalue{\??py#1\c!global}\v!yes {\setgvalue{\e!start#1}{\dostartproperty{#1}}% \letgvalue{\e!stop #1}\dostopproperty}% {\setgvalue{\e!start#1}{\dostartgproperty{#1}}% \letgvalue{\e!stop #1}\dostopgproperty}}% {\doifelsevalue{\??py#1\c!global}\v!yes {\setgvalue{\e!start#2}[##1]{\dostartproperty{##1}}% \letgvalue{\e!stop #2}\dostopproperty}% {\setgvalue{\e!start#2}[##1]{\dostartgproperty{##1}}% \letgvalue{\e!stop #2}\dostopgproperty}}} \def\nododefineproperty[#1][#2][#3]% {} \def\doifelseproperty#1{\doifdefinedelse{\??py#1\c!global}} \def\setupproperty {\dodoubleempty\dosetupproperty} \def\dosetupproperty[#1][#2]% local {\ifsecondargument \getparameters[\??py#1][#2]% \else \getparameters[\??py][#1]% \fi} \letvalue{\??py\s!empty}\empty % beware, normally \*parameter concerns the current one \def\propertyparameter#1#2% expands to #1 when not defined (see \define...) {\csname\??py \ifcsname\??py#1#2\endcsname #1#2% \else\ifcsname\??py\csname\??py#1\c!type\endcsname#2\endcsname \csname\??py#1\c!type\endcsname#2% \else \s!empty \fi\fi \endcsname} \def\currentpropertyparameter % self and class {\propertyparameter\currentproperty} \def\checkedpropertyparameter#1% only self {\executeifdefined{\??py\currentproperty#1}} \def\definepropertyhandler#1{\setvalue{\??py*#1}} \def\propertyhandler #1{\getvalue{\??py*#1}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-grk.mkii0000644000175000017500000001552011754241457024263 0ustar norbertnorbert%D \module %D [ file=lang-grk, %D version=2003.04.01, %D title=\CONTEXT\ Language Macros, %D subtitle=Uralic Languages, %D author=Apostolos Syropoulos %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Greek} %D The framework of this module is set up by Hans Hagen while %D all the translations have been done by Apostolos Syropoulos \unprotect \installlanguage [\s!gr] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\greekleftquot, \c!rightquote=\greekrightquot, \c!leftquotation=\greekleftquot, \c!rightquotation=\greekrightquot, \c!date={\v!day\ \v!month\ \v!year}] \installlanguage [greek] [\s!gr] \setupheadtext [\s!gr] [\v!content=\greekPi\greekepsilon\greekrho\greekiota\greekepsilon\greekchi\greekomicrontonos\greekmu\greekepsilon\greeknu\greekalpha] \setupheadtext [\s!gr] [\v!tables=\greekPi\greekiotatonos\greeknu\greekalpha\greekkappa\greekepsilon\greekfinalsigma] \setupheadtext [\s!gr] [\v!figures=\greekSigma\greekchi\greeketatonos\greekmu\greekalpha\greektau\greekalpha] \setupheadtext [\s!gr] [\v!graphics=\greekGamma\greekrho\greekalpha\greekphi\greekiota\greekkappa\greekalphatonos] \setupheadtext [\s!gr] [\v!intermezzi=\greekPi\greekalpha\greekupsilontonos\greeksigma\greekepsilon\greekiota\greekfinalsigma] \setupheadtext [\s!gr] [\v!index=\greekEpsilon\greekupsilon\greekrho\greekepsilon\greektau\greeketatonos\greekrho\greekiota\greekomicron] \setupheadtext [\s!gr] [\v!abbreviations=\greekSigma\greekupsilon\greeknu\greektau\greekomicron\greekmu\greekomicron\greekgamma\greekrho\greekalpha\greekphi\greekiotatonos\greekepsilon\greekfinalsigma] \setupheadtext [\s!gr] [\v!logos=\greekLambda\greekomicron\greekgamma\greekomicrontonos\greektau\greekupsilon\greekpi\greekalpha] \setupheadtext [\s!gr] [\v!units=\greekMu\greekomicron\greeknu\greekalphatonos\greekdelta\greekepsilon\greekfinalsigma] \setuplabeltext [\s!gr] [\v!table=\greekPi\greekiotatonos\greeknu\greekalpha\greekkappa\greekalpha\greekfinalsigma] \setuplabeltext [\s!gr] [\v!figure=\greekSigma\greekchi\greeketatonos\greekmu\greekalpha] \setuplabeltext [\s!gr] [\v!intermezzo=\greekPi\greekalpha\greekupsilontonos\greeksigma\greeketa] \setuplabeltext [\s!gr] [\v!graphic=\greekGamma\greekrho\greekalpha\greekphi\greekiota\greekkappa\greekomicrontonos] \setuplabeltext [\s!gr] [\v!chapter=\greekKappa\greekepsilon\greekphi\greekalphatonos\greeklambda\greekalpha\greekiota\greekomicron] \setuplabeltext [\s!gr] [\v!section=\greekEpsilon\greeknu\greekomicrontonos\greektau\greeketa\greektau\greekalpha] \setuplabeltext [\s!gr] [\v!subsection=\greekUpsilon\greekpi\greekomicrontonos\greekepsilon\greeknu\greekomicrontonos\greektau\greeketa\greektau\greekalpha] \setuplabeltext [\s!gr] [\v!subsubsection=] \setuplabeltext [\s!gr] [\v!subsubsubsection=] \setuplabeltext [\s!gr] [\v!appendix=\greekPi\greekalpha\greekrho\greekalphatonos\greekrho\greektau\greeketa\greekmu\greekalpha] \setuplabeltext [\s!gr] [\v!part=\greekMu\greekepsilontonos\greekrho\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!line=\greekGamma\greekrho\greekalpha\greekmu\greekmu\greeketatonos] \setuplabeltext [\s!gr] [\v!lines=\greekGamma\greekrho\greekalpha\greekmu\greekmu\greekepsilontonos\greekfinalsigma] \setuplabeltext [\s!gr] [\v!january=\greekIota\greekalpha\greeknu\greekomicron\greekupsilon\greekalphatonos\greekrho\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!february=\greekPhi\greekepsilon\greekbeta\greekrho\greekomicron\greekupsilon\greekalphatonos\greekrho\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!march=\greekMu\greekalphatonos\greekrho\greektau\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!april=\greekAlpha\greekpi\greekrho\greekiotatonos\greeklambda\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!may=\greekMu\greekalphatonos\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!june=\greekIota\greekomicron\greekupsilontonos\greeknu\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!july=\greekIota\greekomicron\greekupsilontonos\greeklambda\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!august=\greekAlpha\greekupsilontonos\greekgamma\greekomicron\greekupsilon\greeksigma\greektau\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!september=\greekSigma\greekepsilon\greekpi\greektau\greekepsilontonos\greekmu\greekbeta\greekrho\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!october=\greekOmicron\greekkappa\greektau\greekomegatonos\greekbeta\greekrho\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!november=\greekNu\greekomicron\greekepsilontonos\greekmu\greekbeta\greekrho\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!december=\greekDelta\greekepsilon\greekkappa\greekepsilontonos\greekmu\greekbeta\greekrho\greekiota\greekomicron\greekfinalsigma] \setuplabeltext [\s!gr] [\v!sunday=\greekKappa\greekupsilon\greekrho\greekiota\greekalpha\greekkappa\greeketatonos] \setuplabeltext [\s!gr] [\v!monday=\greekDelta\greekepsilon\greekupsilon\greektau\greekepsilontonos\greekrho\greekalpha] \setuplabeltext [\s!gr] [\v!tuesday=\greekTau\greekrho\greekiotatonos\greektau\greeketa] \setuplabeltext [\s!gr] [\v!wednesday=\greekTau\greekepsilon\greektau\greekalphatonos\greekrho\greektau\greeketa] \setuplabeltext [\s!gr] [\v!thursday=\greekPi\greekepsilontonos\greekmu\greekpi\greektau\greeketa] \setuplabeltext [\s!gr] [\v!friday=\greekPi\greekalpha\greekrho\greekalpha\greeksigma\greekkappa\greekepsilon\greekupsilon\greeketatonos] \setuplabeltext [\s!gr] [\v!saturday=\greekSigma\greekalphatonos\greekbeta\greekbeta\greekalpha\greektau\greekomicron] %D % \ShowAllLanguageValues [\s!gr] [\greekEpsilon\greeklambda\greeklambda\greeketa\greeknu\greekiota\greekkappa\greekalphatonos] {Greek} {love} \installlanguage [\s!agr] [\s!default=\s!gr, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \s!patterns=\s!agr, \s!mapping=\s!agr, % not needed for mkiv \s!encoding=\s!agr] % not needed for mkiv \installlanguage [ancientgreek] [\s!agr] \installlanguage [grk] [\s!agr] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ini.mkiv0000644000175000017500000015660212161703335024302 0ustar norbertnorbert%D \module %D [ file=math-ini, %D version=2008.01.02, %D title=\CONTEXT\ Math Macros, %D subtitle=Initializations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Initializations} %D This module provides namespaces for math fonts, thereby permitting mixed usage of %D math fonts. Although not strictly needed, we also provide a family name mapping %D mechanism as used in the (original) AMS math definition files, but here these %D names can recursively be remapped and if needed, dynamically be changed. We've %D tried to minimize the number of definition commands and use plain \TEX\ %D definitions as fallback. We've tried to follow a couple of conventions from plain %D and AMS math in order to achieve backward compatinility. We also kept an eye on %D future usage of these modules in the perspective of MathML and unicode fonts. %D There is a subtle issue with grouping: the \type {\begingroup} method will not %D restore a changed mathstyle so best avoid that one. However, there are cases where %D we really need to use such grouping. \unprotect %D We move these definitions into the format: % test [[\char948 \cldcontext{utf.char(948)}]] % test $[[\char948 \cldcontext{utf.char(948)}]]$ \registerctxluafile{math-ini}{1.001} \registerctxluafile{math-dim}{1.001} \registerctxluafile{math-act}{1.001} \registerctxluafile{math-ext}{1.001} \registerctxluafile{math-vfu}{1.001} \registerctxluafile{math-ttv}{1.001} \registerctxluafile{math-map}{1.001} \registerctxluafile{math-ren}{1.001} \registerctxluafile{math-noa}{1.001} \registerctxluafile{math-tag}{1.001} \registerctxluafile{math-fbk}{1.001} \definesystemattribute[mathalphabet] [public] \definesystemattribute[mathsize] [public] \definesystemattribute[mathpunctuation][public] \definesystemattribute[mathgreek] [public] % will become generic \definesystemattribute[mathalternate] [public] \definesystemattribute[mathrendering] [public] \definesystemattribute[mathcategory] [public] \definesystemattribute[mathmode] [public] \definesystemattribute[mathitalics] [public] \definesystemattribute[displaymath] [public] \appendtoks \attribute\mathmodeattribute\plusone \to \everydisplay \appendtoks \attribute\mathmodeattribute\plusone \to \everybeforedisplayformula \appendtoksonce \attribute\displaymathattribute\plusone \to \everybeforedisplayformula \setnewconstant\defaultmathfamily \zerocount % 255 \unexpanded\def\resetmathattributes{\ctxcommand{resetmathattributes()}} % \unexpanded\def\rawmathcharacter#1% slow but only for tracing % {\begingroup % \ifmmode % \resetmathattributes\Uchar#1% % \else % \startimath\resetmathattributes\Uchar#1\stopimath % \fi % \endgroup} \unexpanded\def\rawmathematics#1% slow but only for tracing {\begingroup \ifmmode \resetmathattributes#1% \else \startimath\resetmathattributes#1\stopimath \fi \endgroup} %D Some measures (maybe spac-mth): % \def\mathskipsmall {\mskip\thinmuskip} % \def\mathskipmedium{\mskip\medmuskip} % \def\mathskipbig {\mskip\thickmuskip} %D \macros %D {setupmathematics} %D %D Configuration for integrals. (If needed we can speed this up and make it %D installable; no processaction is needed then). \installcorenamespace{mathematics} \installswitchcommandhandler \??mathematics {mathematics} \??mathematics \unexpanded\def\startmathematics % no grouping, if ever then also an optional second {\doifnextoptionalelse\math_mathematics_start_yes\math_mathematics_start_nop} \unexpanded\def\math_mathematics_start_yes[#1]% {\pushmacro\currentmathematics \edef\currentmathematics{#1}% check for valid \the\everyswitchmathematics} \unexpanded\def\math_mathematics_start_nop {\pushmacro\currentmathematics \let\currentmathematics\empty \the\everyswitchmathematics} \unexpanded\def\stopmathematics {\popmacro\currentmathematics \the\everyswitchmathematics} \definemathematics[\v!default] % not needed, but nicer when nesting back to normal % Normally this is applied to only one character. % % $ABC$ $\cal ABC$ $\mathaltcal ABC$ % todo: only in mmode % these commands are semi-public but should not be used directly (lua names wil change) \unexpanded\def\math_set_attribute #1#2{\ifmmode\ctxcommand{setmathattribute("#1","#2")}\fi} \unexpanded\def\math_set_alphabet #1{\ifmmode\ctxcommand{setmathalphabet("#1")}\fi} \unexpanded\def\math_set_font_style #1{\ifmmode\ctxcommand{setmathstyle("#1")}\fi} \unexpanded\def\math_set_font_alternate#1{\ifmmode\ctxcommand{setmathalternate(\number\defaultmathfamily,"#1")}\fi} \installcorenamespace{mathstylealternate} % might become a setuphandler \unexpanded\def\math_set_font_style_alterternate#1% {\ifcsname\??mathstylealternate\fontclass:#1\endcsname \expandafter\math_set_font_alternate\csname\??mathstylealternate\fontclass:#1\endcsname \else\ifcsname\??mathstylealternate#1\endcsname \expandafter\math_set_font_alternate\csname\??mathstylealternate#1\endcsname \fi\fi} \unexpanded\def\setupmathrendering % the name might change {\dodoubleargument\math_setup_rendering} \def\math_setup_rendering[#1][#2]% {\ifsecondargument \getparameters[\??mathstylealternate#1:][#2]% \else \getparameters[\??mathstylealternate][#1]% \fi} \unexpanded\def\mathaltcal{\math_set_font_alternate{cal}\cal} % ss01 in xits \let\setmathattribute \math_set_attribute \let\setmathalphabet \math_set_alphabet \let\setmathfontstyle \math_set_font_style \let\setmathfontalternate \math_set_font_alternate \let\setmathfontstylealterternate\math_set_font_style_alterternate \let\mathalternate \math_set_font_alternate % obsolete \unexpanded\def\mathupright {\math_set_attribute\s!regular\s!tf\math_set_font_style_alterternate\s!tf} \unexpanded\def\mathdefault {\math_set_attribute\s!regular\s!it\math_set_font_style_alterternate\s!it} \unexpanded\def\mathscript {\math_set_alphabet \s!script \math_set_font_style_alterternate\s!script} \unexpanded\def\mathfraktur {\math_set_alphabet \s!fraktur \math_set_font_style_alterternate\s!fraktur} \unexpanded\def\mathblackboard{\math_set_alphabet \s!blackboard \math_set_font_style_alterternate\s!blackboard} \unexpanded\def\mathrm {\math_set_attribute\s!rm\s!tf \math_set_font_style_alterternate\s!tf} \unexpanded\def\mathss {\math_set_attribute\s!ss\s!tf \math_set_font_style_alterternate\s!tf} \unexpanded\def\mathtt {\math_set_attribute\s!tt\s!tf \math_set_font_style_alterternate\s!tf} \unexpanded\def\mathtf {\math_set_font_style\s!tf \math_set_font_style_alterternate\s!tf} \unexpanded\def\mathsl {\math_set_font_style\s!it \math_set_font_style_alterternate\s!it} % no sl \unexpanded\def\mathit {\math_set_font_style\s!it \math_set_font_style_alterternate\s!it} \unexpanded\def\mathbf {\math_set_font_style\s!bf \math_set_font_style_alterternate\s!bf} \unexpanded\def\mathbs {\math_set_font_style\s!bi \math_set_font_style_alterternate\s!bi} % no sl \unexpanded\def\mathbi {\math_set_font_style\s!bi \math_set_font_style_alterternate\s!bi} \let\tfmath\mathtf % maybe a grouped command \let\slmath\mathsl \let\itmath\mathit \let\bfmath\mathbf \let\bsmath\mathbs \let\bimath\mathbi \let\Bbb\mathblackboard \unexpanded\def\frak {\ifmmode\expandafter\mathfraktur \fi} \unexpanded\def\cal {\ifmmode\expandafter\mathscript \fi} \unexpanded\def\bbd {\ifmmode\expandafter\mathblackboard\fi} \unexpanded\def\blackboard{\ifmmode\expandafter\mathblackboard\fi} \unexpanded\def\fraktur {\ifmmode\expandafter\mathfraktur \fi} \unexpanded\def\gothic {\ifmmode\expandafter\mathfraktur \fi} \unexpanded\def\mathcal #1{{\mathscript #1}} % for AMS compatibility \unexpanded\def\mathfrak#1{{\mathfraktur #1}} % for AMS compatibility \unexpanded\def\mathbb #1{{\mathblackboard#1}} % for AMS compatibility \let\normaltf\tf \unexpanded\def\tf{\ifmmode\mathtf\else\normaltf\fi} \let\normalbf\bf \unexpanded\def\bf{\ifmmode\mathbf\else\normalbf\fi} \let\normalit\it \unexpanded\def\it{\ifmmode\mathit\else\normalit\fi} \let\normalsl\sl \unexpanded\def\sl{\ifmmode\mathsl\else\normalsl\fi} \let\normalbi\bi \unexpanded\def\bi{\ifmmode\mathbi\else\normalbi\fi} \let\normalbs\bs \unexpanded\def\bs{\ifmmode\mathbs\else\normalbs\fi} \let\normalrm\rm \unexpanded\def\rm{\ifmmode\mathrm\else\normalrm\fi} \let\normalss\ss \unexpanded\def\ss{\ifmmode\mathss\else\normalss\fi} \let\normaltt\tt \unexpanded\def\tt{\ifmmode\mathtt\else\normaltt\fi} \ifdefined\mr \else \let\mr\relax \fi \ifdefined\mb \else \let\mb\relax \fi \prependtoks \mathdefault \to \everymathematics %D We could set the rendering attribute at the \LUA\ end but as there can be many %D small math snippets we keep track of the state at the \TEX\ end (mapping is %D export safe). %D %D \starttyping %D \startformula %D \reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411} %D \stopformula %D %D \setupmathematics %D [symbolset=blackboard-to-bold] %D %D \startformula %D \reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411} %D \stopformula %D \stoptyping \newcount\c_math_renderings_attribute \appendtoks \c_math_renderings_attribute\ctxcommand{mathrenderset("\mathematicsparameter\c!symbolset")}\relax \to \everysetupmathematics % only in mathematics \appendtoks \ifcase\c_math_renderings_attribute\else \attribute\mathrenderingattribute\c_math_renderings_attribute \fi \to \everymathematics \setupmathematics [\c!symbolset=] %D \macros %D {boldsymbol} %D %D To be done. \let\mathboldsymbol\relax % yet unsupported, will be \unexpanded\def\boldsymbol {\mathortext\mathboldsymbol\bold} %D Helpers: \def\utfmathclass #1{\ctxcommand{utfmathclass (\!!bs#1\!!es)}} \def\utfmathstretch#1{\ctxcommand{utfmathstretch(\!!bs#1\!!es)}} \def\utfmathcommand#1{\ctxcommand{utfmathcommand(\!!bs#1\!!es)}} \def\utfmathfiller #1{\ctxcommand{utfmathfiller (\!!bs#1\!!es)}} \def\utfmathclassfiltered #1#2{\ctxcommand{utfmathclass (\!!bs#1\!!es,nil,"#2")}} \def\utfmathcommandfiltered#1#2{\ctxcommand{utfmathcommand(\!!bs#1\!!es,nil,"#2")}} \unexpanded\def\doifelseutfmathaccent #1{\ctxcommand{doifelseutfmathaccent(\!!bs#1\!!es)}} \unexpanded\def\doifelseutfmathaccentfiltered#1#2{\ctxcommand{doifelseutfmathaccent(\!!bs#1\!!es,"#2")}} %D Not used that much: \installcorenamespace{mathcodecommand} \unexpanded\def\mathlimop#1{\mathop{#1}} %no \limits \unexpanded\def\mathbox #1{\dontleavehmode\hbox\Ustartmath\mathsurround\zeropoint#1\Ustopmath} \unexpanded\def\mathnolop#1{\mathop{#1}\nolimits} \let\mathnothing\firstofoneunexpanded \let\mathalpha \firstofoneunexpanded \setnewconstant\mathordcode \zerocount \letvalue{\??mathcodecommand ord}\mathord \setnewconstant\mathopcode \plusone \letvalue{\??mathcodecommand op}\mathop \setnewconstant\mathbincode \plustwo \letvalue{\??mathcodecommand bin}\mathbin \setnewconstant\mathrelcode \plusthree \letvalue{\??mathcodecommand rel}\mathrel \setnewconstant\mathopencode \plusfour \letvalue{\??mathcodecommand open}\mathopen \setnewconstant\mathclosecode \plusfive \letvalue{\??mathcodecommand close}\mathclose \setnewconstant\mathpunctcode \plussix \letvalue{\??mathcodecommand punct}\mathpunct \setnewconstant\mathalphacode \plusseven \letvalue{\??mathcodecommand alpha}\mathalpha \setnewconstant\mathinnercode \zerocount \letvalue{\??mathcodecommand inner}\mathinner \setnewconstant\mathnothingcode \zerocount \letvalue{\??mathcodecommand nothing}\mathnothing \setnewconstant\mathlimopcode \plusone \letvalue{\??mathcodecommand limop}\mathlimop \setnewconstant\mathnolopcode \plusone \letvalue{\??mathcodecommand nolop}\mathnolop \setnewconstant\mathboxcode \zerocount \letvalue{\??mathcodecommand box}\mathbox \setnewconstant\mathchoicecode \zerocount %letvalue{\??mathcodecommand choice}\mathnothing \setnewconstant\mathaccentcode \pluseight \setnewconstant\mathradicalcode \plusnine \def\mathcodenumber #1{\the\csname math#1code\endcsname} \unexpanded\def\mathcodecommand#1{\csname\??mathcodecommand#1\endcsname} % \startlines % $\mathopnolimits{\rm d}x$ % $\mathopnolimits{\kern\zeropoint \rm d}x$ % $\mathcodecommand{nolop}{\rm d}x$ % $\mathcodecommand{nolop}{\kern\zeropoint\rm d}x$ % \blank % $\mathcodecommand{nolop}{\mr d}x$ % $\mathcodecommand{nolop}{\kern\zeropoint\mr d}x$ % $\mathop{\kern\zeropoint\mr d}x$ % $\mathopnolimits{\kern\zeropoint d}x$ % \stoplines \installcorenamespace{mathcommand} \unexpanded\def\definemathcommand {\dotripleempty\math_define_command} \def\math_define_command[#1][#2][#3]#4% command class args meaning {\ifthirdargument \edef\nofmathcommandarguments{#3}% \ifx\nofmathcommandarguments\v!one \setuvalue{\??mathcommand#1}##1{\mathcodecommand{#2}{#4{##1}}}% \else\ifx\nofmathcommandarguments\v!two \setuvalue{\??mathcommand#1}##1##2{\mathcodecommand{#2}{#4{##1}{##2}}}% \else \setuvalue{\??mathcommand#1}{\mathcodecommand{#2}{#4}}% \fi\fi \else\ifsecondargument \setuvalue{\??mathcommand#1}{\mathcodecommand{#2}{#4}}% \else \setuvalue{\??mathcommand#1}{\mathcodecommand{nothing}{#4}}% \fi\fi \letcsnamecsname\csname#1\endcsname\csname\??mathcommand#1\endcsname} \unexpanded\def\mathcommand#1% {\csname\??mathcommand#1\endcsname} %D Moved from font-ini.mkiv: %D %D \macros %D {mf,mbox,enablembox,mathop} %D %D Todo: \unexpanded\def\mf {\csname\fontalternative\endcsname} \let\normalmathop\mathop \unexpanded\def\mathop {\normalmathop \bgroup \let\rm\mf \let\nexttoken=} % this one too: \letvalue{\??mathcodecommand op}\mathop ? \unexpanded\def\normalmbox {\normalhbox\bgroup\mf \dowithnextboxcs\math_mbox_finish\normalhbox} \def\math_mbox_finish {\flushnextbox \egroup} \unexpanded\def\mbox % we cannot add \dontleavehmode ... else no \setbox0\mbox possible {\ifmmode\normalmbox\else\normalhbox\fi} \unexpanded\def\enablembox {\appendtoks\math_enable_mbox\to \everymathematics} {\everymathematics\expandafter{\the\everymathematics\math_enable_mbox}} \def\math_enable_mbox {\ifdefined\normalhbox\else\let\normalhbox\hbox\fi % ? \let\hbox\mbox} %D The next hack is needed needed for sine, cosine etc. \let\mathfunction\firstofoneunexpanded \let\math_tags_function \firstofoneunexpanded \let\math_tags_functionlabeltext\mathlabeltext \let\math_tags_mo\firstofoneunexpanded \let\math_tags_mi\firstofoneunexpanded \unexpanded\def\math_tags_mn#1{\begingroup\mathupright#1\endgroup} \unexpanded\def\math_tags_ms#1{\begingroup\mathupright#1\endgroup} \unexpanded\def\mfunction #1{{\mathupright\math_tags_function{#1}}} \unexpanded\def\mfunctionlabeltext#1{{\mathupright\math_tags_functionlabeltext{#1}}} % Once this is stable we can store the number at the tex end which is % faster. Functions getnumbers >= 1000. \expanded\def\math_tags_mathfunction_indeed #1{\ctxcommand{taggedmathfunction("#1",false,\ifconditional\c_apply_function true\else false\fi)}} \expanded\def\math_tags_mathfunctionlabeltext_indeed#1{\ctxcommand{taggedmathfunction("#1",true ,\ifconditional\c_apply_function true\else false\fi)}} \expanded\def\math_tags_mo_indeed#1{\begingroup \attribute\mathcategoryattribute\plusone #1\endgroup} \expanded\def\math_tags_mi_indeed#1{\begingroup \attribute\mathcategoryattribute\plustwo #1\endgroup} \expanded\def\math_tags_mn_indeed#1{\begingroup\mathupright\attribute\mathcategoryattribute\plusthree#1\endgroup} \expanded\def\math_tags_ms_indeed#1{\begingroup\mathupright\attribute\mathcategoryattribute\plusfour #1\endgroup} \newconditional\c_apply_function \unexpanded\def\math_tags_apply#1#2% {\begingroup \settrue\c_apply_function #1% \endgroup \begingroup % todo: auto () #2% \endgroup} \appendtoks \let\math_tags_function \math_tags_mathfunction_indeed \let\math_tags_functionlabeltext\math_tags_mathfunctionlabeltext_indeed \let\math_tags_mo \math_tags_mo_indeed \let\math_tags_mi \math_tags_mi_indeed \let\math_tags_mn \math_tags_mn_indeed \let\math_tags_ms \math_tags_ms_indeed \to \everyenableelements \appendtoks \let\mo \math_tags_mo \let\mi \math_tags_mi \let\mn \math_tags_mn \let\ms \math_tags_ms \let\apply\math_tags_apply \to\everymathematics % \def\mlimitsfunction #1{\mathlimopcomm{{\mr#1}} % \def\mnolimitsfunction#1{\mathnolopcomm{{\mr#1}} %D Taco posted this solution as response to a mail by Olivier, so let's integrate %D it here. \def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option \unexpanded\def\math_function_style_opnolimits #1{\mathop{\mscaledtext{#1}}\nolimits} \unexpanded\def\math_function_style_mfunction #1{\mscaledtext{\math_tags_function{#1}}} \unexpanded\def\math_function_style_mfunctionlabeltext#1{\mscaledtext{\math_tags_functionlabeltext{#1}}} \unexpanded\def\setmathfunctionstyle#1% rm ss tt (can be made faster if needed) {\doifsomething{#1} {\def\currentmscaledstyle{#1}% \let\mathopnolimits \math_function_style_opnolimits \let\mfunction \math_function_style_mfunction \let\mfunctionlabeltext\math_function_style_mfunctionlabeltext}} \unexpanded\def\mscaledtext#1% {\mathchoice {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tfx #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tfxx#1}}} %D We can force the way functions are typeset by manipulating the text option: %D %D \starttyping %D \definetypeface[iwona][ss][sans][iwona][default][encoding=texnansi] %D \definetypeface[iwona][mm][math][iwona][default][encoding=texnansi,text=ss] %D \stoptyping %D %D This hooks into the math handler with: % no longer supported this way, has to be done with \setupmathematics % % \appendtoks % \setmathfunctionstyle\currentmathtextstyle % \to \everybodyfont %D Usage: %D %D \starttyping %D \setmathfunctionstyle\fontstyle % or {rm} or {ss} or .. %D \rm test $\sin{(x^{\sin(x^{\sin(x)})})}$ test %D \ss test $\sin{(x^{\sin(x^{\sin(x)})})}$ test %D \tt test $\sin{(x^{\sin(x^{\sin(x)})})}$ test %D \stoptyping %D Some goodies: \unexpanded\def\Angstrom{\nomathematics{\Aring}} %D \macros %D {nonknuthmode, donknuthmode} %D %D The underscore is frequently used in manuals but unfortunately \TEX\ prefers %D it to be a math specific character. And since computer modern fonts didn't %D have an underscore, one had to use commands to fake one. Nowadays we do %D have underscores in latin modern, and since all other fonts have them, we %D decided to get away from the restriction to use the underscore character in %D text mode. %D %D \starttyping %D \def\test#1{#1} %D %D \nonknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2} %D %D \donknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2} %D \stoptyping %D %D The result is as expected: the first line typesets ok, while the second %D one triggers an error message. \setnewconstant\activemathcharcode "8000 \newtoks\activatedmathcharacters \unexpanded\def\activatemathcharacter#1% {\appendtoks \global\mathcode#1=\activemathcharcode \to \activatedmathcharacters} \def\activatemathcharacters {\the\activatedmathcharacters} % \setnewconstant\primeasciicode 39 % ' \activatemathcharacter\circumflexasciicode \activatemathcharacter\underscoreasciicode \activatemathcharacter\ampersandasciicode \activatemathcharacter\primeasciicode % not used: % % \mathcode\spaceasciicode\activemathcharcode % % not used: % % \bgroup % \catcode\underscoreasciicode\activecatcode % \doglobal\appendtoks % \mathcode\underscoreasciicode\activemathcharcode % \let_\activemathunderscore % \to \everymathematics % \egroup % Here follows some plain legacy: primes. % % The \let\prime\math_prime_indeed might become an obsolete as we have \doubleprime % and \tripleprime and collapsing can nicely handle the script then. % % Collapsing to 0x2033 and 0x2034 happens elsewhere. % % \switchtobodyfont[modern] % \switchtobodyfont[cambria] % \switchtobodyfont[xits] % \switchtobodyfont[minion] % \setupbodyfont[dejavu] % % \startbuffer % \def\SampleLine#1{% % \NC#1 % \NC\switchtobodyfont[#1]$f^2$ % 1 % \NC\switchtobodyfont[#1]$f\prime^2$ % 2 % \NC\switchtobodyfont[#1]$f\prime\prime^2$ % 3 % \NC\switchtobodyfont[#1]$f\prime\prime\prime^2$ % 4 % \NC\switchtobodyfont[#1]$f{\prime}^2$ % 5 % \NC\switchtobodyfont[#1]$f{\prime\prime}^2$ % 6 % \NC\switchtobodyfont[#1]$f{\prime\prime\prime}^2$ % 7 % \NC\switchtobodyfont[#1]$f'(x)$ % 8 % \NC\switchtobodyfont[#1]$f''(x)$ % 9 % \NC\switchtobodyfont[#1]$f'''(x)$ % 10 % \NC\NR % } % % \starttabulate[|Tl|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tc|] % \NC\NC1\NC2\NC3\NC4\NC5\NC6\NC7\NC8\NC9\NC10\NC\NR % \SampleLine{modern} % \SampleLine{cambria} % \SampleLine{xits} % \SampleLine{minion} % \stoptabulate % \stopbuffer % % \typebuffer \getbuffer % most math fonts have messed up primes, just test this: $\prime^{\prime^{\prime}}$ { \catcode\circumflexasciicode\othercatcode \global\let\othercircumflextoken ^ } { \catcode\circumflexasciicode\superscriptcatcode \global\let\superscriptcircumflextoken^ } \ifdefined \prime \else \Umathchardef\prime "0 "0 "2032 \fi \let\math_prime_indeed_normal\prime \appendtoks \let\math_prime_indeed_normal\prime % gets defined later \let\mathfontprime\prime % for tracing \let\prime\math_prime_indeed % so this is needed \to \everydump \unexpanded\def\math_prime_indeed {\iffontchar\textfont\zerocount"FE325\relax ^\bgroup \expandafter\math_prime_indeed_virtual % virtual mess (using funny signal) \else % \expandafter\math_prime_indeed_normal % gets collapsed \expandafter\math_prime_indeed_crapped % gets collapsed \fi} \def\math_prime_indeed_crapped {{^{\math_prime_indeed_normal}}} \let\prime\math_prime_indeed \def\math_prime_indeed_virtual {\math_prime_indeed_normal \futurelet\nexttoken\math_prime_indeed_choice} \installcorenamespace{mathprime} \def\math_prime_indeed_choice {\csname\??mathprime \ifx '\nexttoken a\else \ifx \math_prime_indeed_normal\nexttoken a\else \ifx \prime\nexttoken a\else \ifx\superscriptcircumflextoken\nexttoken b\else \ifx\othercircumflextoken \nexttoken b\else c\fi\fi\fi\fi\fi \endcsname} \setvalue{\??mathprime a}#1{\math_prime_indeed_virtual} \setvalue{\??mathprime b}#1#2{#2\egroup} \setvalue{\??mathprime c}{\egroup} \let\activemathprime\math_prime_indeed \bgroup \catcode\primeasciicode\activecatcode \global\everymathematics\expandafter{\the\everymathematics\let'\math_prime_indeed} % todo: do this at the lua end \egroup \bgroup \catcode\underscoreasciicode\activecatcode \catcode\circumflexasciicode\activecatcode \catcode\ampersandasciicode \activecatcode \doglobal \appendtoks \let _\normalsubscript \let ^\normalsuperscript \let &\normalmathaligntab % use \def when it's \aligntab \to \everymathematics \egroup \newtoks\everydonknuthmode \newtoks\everynonknuthmode \newconditional \knuthmode \let\nonknuthmode\relax \let\donknuthmode\relax % \def\nonknuthmode % {\pushcatcodetable % \setcatcodetable\ctxcatcodes % \the\everynonknuthmode % \let\nonknuthmode\relax % \popcatcodetable} % % \def\donknuthmode % {\pushcatcodetable % \setcatcodetable\ctxcatcodes % \the\everydonknuthmode % \popcatcodetable} % % \bgroup % % \catcode\underscoreasciicode\activecatcode % \catcode\circumflexasciicode\activecatcode % \catcode\ampersandasciicode \activecatcode % % \global \everynonknuthmode {\appendtoks % \let_\normalsubscript % \let^\normalsuperscript % \let&\normalmathaligntab % use \def when it's \aligntab % \to \everymathematics} % % \egroup % % \appendtoks % \setfalse\knuthmode % \catcode\underscoreasciicode\othercatcode % \catcode\circumflexasciicode\othercatcode % \catcode\ampersandasciicode \othercatcode % \to \everynonknuthmode % % \appendtoks % \settrue\knuthmode % \catcode\underscoreasciicode\subscriptcatcode % \catcode\circumflexasciicode\superscriptcatcode % \catcode\ampersandasciicode \alignmentcatcode % \to \everydonknuthmode % % \appendtoks % \startextendcatcodetable\ctxcatcodes % \catcode\underscoreasciicode\othercatcode % \catcode\circumflexasciicode\othercatcode % \catcode\ampersandasciicode \othercatcode % \stopextendcatcodetable % \to \everynonknuthmode % % \appendtoks % \startextendcatcodetable\ctxcatcodes % \catcode\underscoreasciicode\subscriptcatcode % \catcode\circumflexasciicode\superscriptcatcode % \catcode\ampersandasciicode \alignmentcatcode % \stopextendcatcodetable % \to \everydonknuthmode %D Even more drastic (this code will move as nonknuthmode is default now) % \unexpanded\def\enableasciimode % {\ctxlua{resolvers.macros.enablecomment()}% % \glet\enableasciimode\relax} % % \unexpanded\def\asciimode % {\catcodetable\txtcatcodes % \enableasciimode % \nonknuthmode} % % \unexpanded\def\startasciimode % {\pushcatcodetable % \catcodetable\txtcatcodes % \enableasciimode % \nonknuthmode} % % \unexpanded\def\stopasciimode % {\popcatcodetable % \ifconditional\knuthmode\else\donknuthmode\fi} \unexpanded\def\enableasciimode {\ctxlua{resolvers.macros.enablecomment()}% \glet\enableasciimode\relax} \unexpanded\def\asciimode {\catcodetable\txtcatcodes \enableasciimode} \unexpanded\def\startasciimode {\pushcatcodetable \catcodetable\txtcatcodes \enableasciimode} \unexpanded\def\stopasciimode {\popcatcodetable} %D Needed for unicode: \def\nulloperator{\mathortext{\mathop{\emptyhbox}}{\emptyhbox}} %D Memory saver: \appendtoks \ifx\currentmathematics\empty \doifelse{\mathematicsparameter\c!compact}\v!yes\enabledirectives\disabledirectives[math.virtual.optional]% \fi \to \everysetupmathematics \setupmathematics [\c!compact=no] %D Arabic: \newconditional\c_math_right_to_left \appendtoks \doifelse{\mathematicsparameter\c!align}{r2l}\settrue\setfalse\c_math_right_to_left \to \everyswitchmathematics \unexpanded\def\math_basics_synchronize_direction {\mathdir T\ifconditional\c_math_right_to_left R\else L\fi T} \appendtoks \math_basics_synchronize_direction %to \everymathematics % comes too late and I'm not in the mood for a mixed mode kludge now \to \everyswitchmathematics %D Delayed: greek. %D %D \starttyping %D \usetypescript[cambria]\setupbodyfont[cambria] %D \startTEXpage %D $\alpha \mathgreekupright \alpha \mathgreekitalic \alpha$ %D \stopTEXpage %D \stoptyping % [lc uc] normal (upright) = 2, italic = 3, none = 0/1 % We can move the setting to the lua end and use abstract numbers instead % if funny ones here. \installcorenamespace{mathgreek} \newconstant\c_math_greek_attribute \setvalue{\??mathgreek\v!none }{1} \setvalue{\??mathgreek\v!normal}{2} \setvalue{\??mathgreek\v!italic}{3} \appendtoks \edef\p_sygreek{\mathematicsparameter\s!sygreek}% \edef\p_lcgreek{\mathematicsparameter\s!lcgreek}% \edef\p_ucgreek{\mathematicsparameter\s!ucgreek}% \c_math_greek_attribute"% hex digits \csname\??mathgreek\ifcsname\??mathgreek\p_sygreek\endcsname\p_sygreek\else\v!none\fi\endcsname \csname\??mathgreek\ifcsname\??mathgreek\p_lcgreek\endcsname\p_lcgreek\else\v!none\fi\endcsname \csname\??mathgreek\ifcsname\??mathgreek\p_ucgreek\endcsname\p_ucgreek\else\v!none\fi\endcsname \relax \ifcase\c_math_greek_attribute \c_math_greek_attribute\attributeunsetvalue \fi \to \everyswitchmathematics % only used local \unexpanded\def\mathgreekupright{\attribute\mathgreekattribute"222\relax} \unexpanded\def\mathgreekitalic {\attribute\mathgreekattribute"333\relax} \unexpanded\def\mathgreekdefault{\attribute\mathgreekattribute"000\relax} \let\mathgreeknormal\mathgreekupright \let\mathgreeknone \mathgreekdefault \appendtoks \attribute\mathgreekattribute\c_math_greek_attribute \to \everymathematics \setupmathematics [\s!sygreek=\v!normal, \s!lcgreek=\v!italic, \s!ucgreek=\v!normal] % was: none %D Math italics (experiment) % we need keys \installcorenamespace{mathitalics} \setnewconstant\c_math_italics_attribute\attributeunsetvalue \letvalue{\??mathitalics 1}\plusone % fontitalics \letvalue{\??mathitalics 2}\plustwo % fontdata \letvalue{\??mathitalics 3}\plusthree % quad based \letvalue{\??mathitalics 4}\plusfour % combination of 1 and 3 \letvalue{\??mathitalics\v!none}\attributeunsetvalue \def\math_italics_initialize {\ifnum\c_math_italics_attribute=\attributeunsetvalue \else \ctxcommand{setmathitalics()}% one time \global\let\math_italics_initialize\relax \fi} \appendtoks \edef\p_italics{\mathematicsparameter\s!italics}% \c_math_italics_attribute\csname\??mathitalics \ifcsname\??mathitalics\p_italics\endcsname\p_italics\else\v!none\fi \endcsname\relax % \math_italics_initialize \to \everyswitchmathematics % only in mathematics \appendtoks \math_italics_initialize \attribute\mathitalicsattribute\c_math_italics_attribute \to \everymathematics \setupmathematics [\s!italics=3] % for the moment only this one makes sense .. still experimental % looks nicer but can generate bogus csnames % % \setvalue{\??mathitalics1}{\math_italics_initialize\c_math_italics_attribute\plusone } % fontitalics % \setvalue{\??mathitalics2}{\math_italics_initialize\c_math_italics_attribute\plustwo } % fontdata % \setvalue{\??mathitalics3}{\math_italics_initialize\c_math_italics_attribute\plusthree} % quad based % \setvalue{\??mathitalics4}{\math_italics_initialize\c_math_italics_attribute\plusfour } % combination of 1 and 3 % % \appendtoks % \c_math_italics_attribute\attributeunsetvalue % \csname\??mathitalics\mathematicsparameter\s!italics\endcsname % \to \everyswitchmathematics % only in mathematics %D \macros %D {enablemathpunctuation,disablemathpunctuation} %D %D \startbuffer %D \enablemathpunctuation$(1,2) (1, 2) (1{,}2) \hbox{foo, not bar}$ %D \stopbuffer %D %D \typebuffer %D %D \blank{\getbuffer}\blank % \newconditional\automathpunctuation % % \unexpanded\def\enablemathpunctuation {\settrue \automathpunctuation} % \unexpanded\def\disablemathpunctuation{\setfalse\automathpunctuation} % % \appendtoks % \doifelse{\mathematicsparameter\v!autopunctuation}\v!yes\settrue\setfalse\automathpunctuation % \to \everyswitchmathematics % % \setupmathematics % [\v!autopunctuation=\v!no] % % \def\math_punctuation_next{\ifx\nexttoken\blankspace\char\zerocount\fi} % % \unexpanded\def\math_punctuation_comma {\textcomma \futurelet\nexttoken\math_punctuation_next} % \unexpanded\def\math_punctuation_period{\textperiod\futurelet\nexttoken\math_punctuation_next} % % \setnewconstant\c_math_comma "002C % \setnewconstant\c_math_period "002E % \setnewconstant\c_math_special"8000 % % \bgroup % % \catcode\c_math_comma \activecatcode % \catcode\c_math_period\activecatcode % % \unexpanded\gdef\math_punctuation_initialize_indeed % {\mathcode\c_math_comma \c_math_special % \mathcode\c_math_period\c_math_special % \let,\math_punctuation_comma % \let.\math_punctuation_period % \attribute\mathpunctuationattribute\plustwo} % % \unexpanded\gdef\math_punctuation_initialize_yes % {\attribute\mathpunctuationattribute\plustwo} % % \unexpanded\gdef\math_punctuation_initialize_nop % {\attribute\mathpunctuationattribute\plusone} % % \egroup % % \appendtoks % \ifconditional\automathpunctuation % \math_punctuation_initialize_indeed % \math_punctuation_initialize_yes % \let\enablemathpunctuation \math_punctuation_initialize_yes % \let\disablemathpunctuation\math_punctuation_initialize_nop % \fi % \to \everymathematics % Later I will look again into a \LUATEX\ based solution. It only makes sense % to delegate to \LUA\ when we have more variants and need analysis (experimental % trickery removed for a while). \def\math_punctuation_comma_next {\ifx\nexttoken\blankspace \mathpunct{\textcomma }\else\mathord{\textcomma }\fi} \def\math_punctuation_period_next{\ifx\nexttoken\blankspace \mathpunct{\textperiod}\else\mathord{\textperiod}\fi} \unexpanded\def\math_punctuation_nop_comma {\mathpunct{\textcomma}} \unexpanded\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next} \let\math_punctuation_yes_comma \math_punctuation_all_comma \unexpanded\def\math_punctuation_nop_period{\mathord{\textperiod}} \unexpanded\def\math_punctuation_all_period{\futurelet\nexttoken\math_punctuation_period_next} \let\math_punctuation_yes_period\math_punctuation_nop_period \setnewconstant\c_math_comma "002C \setnewconstant\c_math_period "002E \setnewconstant\c_math_special"8000 \installcorenamespace {mathautopunctuation} \bgroup \catcode\c_math_comma \activecatcode \catcode\c_math_period\activecatcode \setgvalue{\??mathautopunctuation\v!no}% {\let,\math_punctuation_nop_comma \let.\math_punctuation_nop_period} \setgvalue{\??mathautopunctuation\v!yes}% {\let,\math_punctuation_yes_comma \let.\math_punctuation_yes_period} \setgvalue{\??mathautopunctuation\v!all}% {\let,\math_punctuation_all_comma \let.\math_punctuation_all_period} \egroup % \appendtoks % \global\mathcode\c_math_comma \c_math_special % \global\mathcode\c_math_period\c_math_special % \to \everyjob \appendtoks \mathcode\c_math_comma \c_math_special \mathcode\c_math_period\c_math_special \csname\??mathautopunctuation\mathematicsparameter\v!autopunctuation\endcsname \to \everymathematics \appendtoks \ifcsname\??mathautopunctuation\mathematicsparameter\v!autopunctuation\endcsname \else \letmathematicsparameter\v!autopunctuation\v!no \fi \to \everysetupmathematics \def\enablemathpunctuation {\csname\??mathautopunctuation\v!no \endcsname} \def\disablemathpunctuation{\csname\??mathautopunctuation\v!yes\endcsname} \setupmathematics [\v!autopunctuation=\v!no] % no | yes | all %D \macros %D {mathstyle} %D %D If one want to be sure that something is typeset in the appropriate style, \type %D {\mathstyle} can be used: %D %D \starttyping %D \mathstyle{something} %D \stoptyping % \def\mathstyle#1% % {\mathchoice % {\displaystyle #1}% % {\textstyle #1}% % {\scriptstyle #1}% % {\scriptscriptstyle#1}} % % We now have a primitive operation for this. As the macro overloads a new % primitive introduced in \LUATEX, we need to use \type {\normalmathstyle} when we % consult the current math style. % % \let \mathstyle \Ustack % spoils cramped % % \let \mathstyle \firstofoneargument % % 0 = display % 1 = crampeddisplay % 2 = text % 3 = crampedtext % 4 = script % 5 = crampedscript % 6 = scriptscript % 7 = crampedscriptscript \def\uncramped#1% {{\ifcase\normalmathstyle \or \displaystyle \or \or \textstyle \or \or \scriptstyle \or \or \scriptscriptstyle \fi #1}} \def\cramped#1% {{\ifcase\normalmathstyle \crampeddisplaystyle \or \or % 0 -> 1 \crampedtextstyle \or \or % 2 -> 3 \crampedscriptstyle \or \or % 4 -> 5 \crampedscriptscriptstyle \fi % 6 -> 7 #1}} \def\triggermathstyle#1% #1 is number {\ifcase\numexpr#1\relax \displaystyle \or \crampeddisplaystyle \or \textstyle \or \crampedtextstyle \or \scriptstyle \or \crampedscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \else % error \fi} \def\mathstylefont#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \textfont \or \textfont \or \textfont \or \textfont \or \scriptfont \or \scriptfont \or \scriptscriptfont \or \scriptscriptfont \else \textfont \fi\zerocount} % hm, can ie other value as well \def\mathsmallstylefont#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \scriptfont \or \scriptfont \or \scriptfont \or \scriptfont \or \scriptscriptfont \or \scriptscriptfont \or \scriptscriptfont \or \scriptscriptfont \else \scriptfont \fi\zerocount} % hm, can ie other value as well \def\mathstyleface#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \textface \or \textface \or \textface \or \textface \or \scriptface \or \scriptface \or \scriptscriptface \or \scriptscriptface \else \textface \fi} \def\mathsmallstyleface#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \scriptface \or \scriptface \or \scriptface \or \scriptface \or \scriptscriptface \or \scriptscriptface \or \scriptscriptface \or \scriptscriptface \else \scriptface \fi} \def\mathstylecommand#1#2#3% {\ifcase\numexpr\normalmathstyle\relax \expandafter#1\or \expandafter#1\or \expandafter#1\or \expandafter#1\or \expandafter#2\or \expandafter#2\or \expandafter#3\or \expandafter#3\else \expandafter#1\fi} %D A plain inheritance: \def\mathpalette#1#2% {\mathchoice {#1\displaystyle {#2}}% {#1\textstyle {#2}}% {#1\scriptstyle {#2}}% {#1\scriptscriptstyle{#2}}} %D Often we can use: %D %D \startbuffer %D $x^{\mathstylehbox{x^{\mathstylehbox{x}}}}$ %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\mathstylehbox#1% {\normalexpanded{\hbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup} \unexpanded\def\mathstylevbox#1% {\normalexpanded{\vbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup} \unexpanded\def\mathstylevcenter#1% {\normalexpanded{\vcenter\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup} \unexpanded\def\mathstylevcenteredhbox#1% {\normalexpanded{\vcenter\bgroup\hbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup\egroup} \unexpanded\def\mathstylevcenteredvbox#1% {\normalexpanded{\vcenter\bgroup\vbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup\egroup} \unexpanded\def\setmathsmalltextbox#1#2#% {\normalizebodyfontsize\m_math_text_choice_face{\mathsmallstyleface\normalmathstyle}% \setbox#1#2\bgroup \font_basics_switchtobodyfont\m_math_text_choice_face \let\next} \unexpanded\def\setmathtextbox#1#2#% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}% \setbox#1#2\bgroup \font_basics_switchtobodyfont\m_math_text_choice_face \let\next} %D Here is the new mechanism ... it might replace some of the above but we will do %D that stepwise. Keep in mind that cramped only affects superscripts and even then, %D only when in a smaller size than normal. %D %D \def\TestMe#1% %D {\NC \ttbf #1 %D \NC \ruledhbox{$\setupmathstyle[#1]x + x_j^2 + x_i^{e^2} + \frac{1}{x}$} %D \NC \ruledhbox{$\setupmathstyle[#1,small]x + x_j^2 + x_i^{e^2} + \frac{1}{x}$} %D \NC \NR} %D %D \starttabulate[|l|r|l|] %D \HL %D \NC \NC \NC \ttbf ...,small \NC \NR %D \HL %D \TestMe{text} \TestMe{text,cramped} %D \TestMe{script} \TestMe{script,cramped} %D \TestMe{scriptscript} \TestMe{scriptscript,cramped} %D \TestMe{display} \TestMe{display,cramped} %D \HL %D \stoptabulate \def\triggerdisplaystyle {\ifcase\normalmathstyle\relax \displaystyle \or \crampeddisplaystyle \or \displaystyle \or \crampeddisplaystyle \or \displaystyle \or \crampeddisplaystyle \or \displaystyle \or \crampeddisplaystyle \or \fi} \def\triggertextstyle {\ifcase\normalmathstyle\relax \textstyle \or \crampedtextstyle \or \textstyle \or \crampedtextstyle \or \textstyle \or \crampedtextstyle \or \textstyle \or \crampedtextstyle \else \fi} \def\triggerscriptstyle {\ifcase\normalmathstyle\relax \scriptstyle \or \crampedscriptstyle \or \scriptstyle \or \crampedscriptstyle \or \scriptstyle \or \crampedscriptstyle \or \scriptstyle \or \crampedscriptstyle \or \fi} \def\triggerscriptscriptstyle {\ifcase\normalmathstyle\relax \scriptscriptstyle \or \crampedscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \or \fi} \def\triggeruncrampedstyle {\ifcase\normalmathstyle\relax \or \displaystyle \or \or \textstyle \or \or \scriptstyle \or \or \scriptscriptstyle \fi} \def\triggercrampedstyle {\ifcase\normalmathstyle\relax \crampeddisplaystyle \or \or \crampedtextstyle \or \or \crampedscriptstyle \or \or \crampedscriptscriptstyle \fi} \def\triggersmallstyle {\ifcase\normalmathstyle\relax \scriptstyle \or \crampedscriptstyle \or \scriptstyle \or \crampedscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \or \fi} \def\triggeruncrampedsmallstyle {\ifcase\normalmathstyle\relax \scriptstyle \or \scriptstyle \or \scriptstyle \or \scriptstyle \or \scriptscriptstyle \or \scriptscriptstyle \or \scriptscriptstyle \or \scriptscriptstyle \or \fi} \def\triggercrampedsmallstyle {\ifcase\normalmathstyle\relax \crampedscriptstyle \or \crampedscriptstyle \or \crampedscriptstyle \or \crampedscriptstyle \or \crampedscriptscriptstyle \or \crampedscriptscriptstyle \or \crampedscriptscriptstyle \or \crampedscriptscriptstyle \or \fi} \def\triggerbigstyle {\ifcase\normalmathstyle\relax \displaystyle \or \crampeddisplaystyle \or \textstyle \or \crampedtextstyle \or \textstyle \or \crampedtextstyle \or \scriptstyle \or \crampedscriptstyle \or \fi} \def\triggeruncrampedbigstyle {\ifcase\normalmathstyle\relax \displaystyle \or \displaystyle \or \textstyle \or \textstyle \or \textstyle \or \textstyle \or \scriptstyle \or \scriptstyle \or \fi} \def\triggercrampedbigstyle {\ifcase\normalmathstyle\relax \crampeddisplaystyle \or \crampeddisplaystyle \or \crampedtextstyle \or \crampedtextstyle \or \crampedtextstyle \or \crampedtextstyle \or \crampedscriptstyle \or \crampedscriptstyle \or \fi} \installcorenamespace{mathstylecommand} \installcorenamespace{mathstylecache} \newconstant\c_math_styles_state_style \newconstant\c_math_styles_state_cramped \newconstant\c_math_styles_state_size \def\math_style_add_to_cache_choice {% \ifcase\c_math_styles_state_size \ifcase\c_math_styles_state_style \ifcase\c_math_styles_state_cramped \relax \or \noexpand\triggeruncrampedstyle \or \noexpand\triggercrampedstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerdisplaystyle \or \displaystyle \or \crampeddisplaystyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggertextstyle \or \textstyle \or \crampedtextstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptstyle \or \scriptstyle \or \crampedscriptstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \fi \fi \or % small \ifcase\c_math_styles_state_style \ifcase\c_math_styles_state_cramped \noexpand\triggersmallstyle \or \noexpand\triggeruncrampedsmallstyle \or \noexpand\triggercrampedsmallstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptstyle \or \scriptstyle \or \crampedscriptstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptstyle \or \scriptstyle \or \crampedscriptstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptscriptstyle \or \scriptscriptstyle \or \crampedscriptscriptstyle \fi \fi \or % large \ifcase\c_math_styles_state_style \ifcase\c_math_styles_state_cramped \noexpand\triggerbigstyle \or \noexpand\triggeruncrampedbigstyle \or \noexpand\triggercrampedbigstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerdisplaystyle \or \displaystyle \or \crampeddisplaystyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggertextstyle \or \textstyle \or \crampedtextstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggertextstyle \or \textstyle \or \crampedtextstyle \fi \or\ifcase\c_math_styles_state_cramped \noexpand\triggerscriptstyle \or \scriptstyle \or \crampedscriptstyle \fi \fi \fi } \unexpanded\def\math_style_set#1% {\edef\m_math_style_asked{#1}% \ifx\m_math_style_asked\empty \else \math_style_set_indeed \fi} \let\setmathstyle\math_style_set \def\installmathstyle#1#2% {\ifcsname\??mathstylecommand#1\endcsname \else \setvalue{\??mathstylecommand#1}{#2}% \fi} \def\math_style_collect#1% {\csname\??mathstylecommand#1\endcsname} \setvalue{\??mathstylecommand\s!display }{\c_math_styles_state_style \plusone} \setvalue{\??mathstylecommand\s!text }{\c_math_styles_state_style \plustwo} \setvalue{\??mathstylecommand\s!script }{\c_math_styles_state_style \plusthree} \setvalue{\??mathstylecommand\s!scriptscript}{\c_math_styles_state_style \plusfour} \setvalue{\??mathstylecommand\s!uncramped }{\c_math_styles_state_cramped\plusone} \setvalue{\??mathstylecommand\s!cramped }{\c_math_styles_state_cramped\plustwo} \setvalue{\??mathstylecommand\v!normal }{\c_math_styles_state_cramped\plusone} \setvalue{\??mathstylecommand\v!packed }{\c_math_styles_state_cramped\plustwo} \setvalue{\??mathstylecommand\v!small }{\c_math_styles_state_size \plusone} \setvalue{\??mathstylecommand\v!big }{\c_math_styles_state_size \plustwo} \unexpanded\def\setupmathstyle[#1]% {\edef\m_math_style_asked{#1}% \ifx\m_math_style_asked\empty \else \math_style_set_indeed \fi} \unexpanded\def\usemathstyleparameter#1% faster local variant {\edef\m_math_style_asked{#1\c!mathstyle}% \ifx\m_math_style_asked\empty \else \math_style_set_indeed \fi} %D \startbuffer %D \definemathstyle[mystyle][scriptscript] %D %D $text\startmathstyle[mystyle]scriptscript\stopmathstyle text$ %D \stopbuffer %D %D \typebuffer \blank \start \getbuffer \stop \blank \installcorenamespace {mathstyle} \unexpanded\def\definemathstyle {\dodoubleargument\math_style_define} \def\math_style_define[#1][#2]% {\c_math_styles_state_style \zerocount \c_math_styles_state_cramped\zerocount \c_math_styles_state_size \zerocount \rawprocesscommacommand[#2]\math_style_collect \expandafter\let\csname\??mathstyle#1\normalexpanded{\endcsname\math_style_add_to_cache_choice}} % \def\math_style_set_indeed % {\ifcsname\??mathstyle\m_math_style_asked\endcsname % \csname\??mathstyle\m_math_style_asked\endcsname % \else % \math_style_set_indeed_cached % \fi} % % \def\math_style_set_indeed_cached % {\ifcsname\??mathstylecache\m_math_style_asked\endcsname % % already in cache % \else % \math_style_add_to_cache % \fi % \csname\??mathstylecache\m_math_style_asked\endcsname} % % \def\math_style_add_to_cache % {\c_math_styles_state_style \zerocount % \c_math_styles_state_cramped\zerocount % \c_math_styles_state_size \zerocount % \rawprocesscommacommand[\m_math_style_asked]\math_style_collect % \global\expandafter\let\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}} % % ugly but more efficient (as called often) \def\math_style_set_indeed {\csname\??mathstyle \ifcsname\??mathstyle\m_math_style_asked\endcsname \m_math_style_asked \else \??mathstyle \fi \endcsname} \setvalue{\??mathstyle\??mathstyle}% {\csname\??mathstylecache \ifcsname\??mathstylecache\m_math_style_asked\endcsname \m_math_style_asked \else \??mathstylecache \fi \endcsname} \setvalue{\??mathstylecache\??mathstylecache}% {\c_math_styles_state_style \zerocount \c_math_styles_state_cramped\zerocount \c_math_styles_state_size \zerocount \rawprocesscommacommand[\m_math_style_asked]\math_style_collect \global\expandafter\let\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}% \csname\??mathstylecache\m_math_style_asked\endcsname} %D \startbuffer %D $x\begingroup\setupmathstyle[script]x\endgroup x$ %D $x{\setupmathstyle[script]x}x$ %D $x\startmathstyle[script]x\stopmathstyle x$ %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\startmathstyle[#1]% {\edef\m_math_style_asked{#1}% \ifx\m_math_style_asked\empty \let\stopmathstyle\relax \else \bgroup \math_style_set_indeed \let\stopmathstyle\egroup \fi} \let\stopmathstyle\relax \unexpanded\def\startusemathstyleparameter#1% {\edef\m_math_style_asked{#1\c!mathstyle}% \ifx\m_math_style_asked\empty \let\stopusemathstyleparameter\relax \else \bgroup \math_style_set_indeed \let\stopusemathstyleparameter\egroup \fi} \let\stopusemathstyleparameter\relax %D Something similar can be used in the (re|)|definition of \type {\text}. This %D version is a variation on the one in the math module (see \type{m-math} and|/|or %D \type {m-newmat}). \unexpanded\def\mathtext {\mathortext\math_text_choice\hbox} % \def\math_text_choice#1% % {\mathchoice % {\math_text_choice_indeed\displaystyle\textface {#1}}% % {\math_text_choice_indeed\textstyle \textface {#1}}% % {\math_text_choice_indeed\textstyle \scriptface {#1}}% % {\math_text_choice_indeed\textstyle \scriptscriptface{#1}}} % % \def\math_text_choice_indeed#1#2#3% no \everymath ! % {\hbox{\everymath{#1}\switchtobodyfont[#2]#3}} % 15 sec % \let\m_math_text_choice_style\relax % % \def\math_text_choice#1% % {\edef\m_math_text_choice_style{\normalmathstyle}% % \hbox\bgroup % % \everymath{\triggermathstyle\m_math_text_choice_style}% % \normalizebodyfontsize\m_math_text_choice_style{\mathstylefont\m_math_text_choice_style}% % \font_basics_switchtobodyfont\m_math_text_choice_style % #1% % \egroup} \let\m_math_text_choice_face \relax % \def\math_text_choice#1% if needed we can get rid of the normalize (predo in font code) % {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}% % \hbox{\font_basics_switchtobodyfont\m_math_text_choice_face#1}} \def\math_text_choice% if needed we can get rid of the normalize (predo in font code) {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}% \hbox\bgroup\font_basics_switchtobodyfont\m_math_text_choice_face\let\next} %D Safeguard against redefinitions: \appendtoks \let\_\normalunderscore % is textunderscore or fakeunderscore \to \everymathematics %D Because we may overload \type {\text} in other (structuring) macros, we say: \appendtoks \let\text\mathtext \to \everymathematics %D The next code is derived from plain \TEX. The names will change! \newcount\interdisplaylinepenalty \interdisplaylinepenalty\plushundred % Actually, not using an if saves one macro so there is no penalty % for splitting up this macro. % % \newif\ifdt@p % % \def\displ@y % {\global\dt@ptrue % \openup\displayopenupvalue % was \openup\jot % \everycr % {\noalign % {\ifdt@p % \global\dt@pfalse % \ifdim\prevdepth>-\thousandpoint % \vskip-\lineskiplimit % \vskip\normallineskiplimit % \fi % \else % \penalty\interdisplaylinepenalty % \fi}}} \newtoks\mathdisplayaligntweaks \appendtoks \resetdisplaymatheq % moved to here \to \mathdisplayaligntweaks \unexpanded\def\math_display_align_hack % I don't like the global, maybe we should push and pop {\global\let\math_display_align_hack_indeed\math_display_align_hack_remove_skip \openup\displayopenupvalue % was \openup\jot \everycr{\noalign{\math_display_align_hack_indeed}}} \def\math_display_align_hack_remove_skip {\ifdim\prevdepth>-\thousandpoint \vskip\dimexpr-\lineskiplimit+\normallineskiplimit\relax \fi \global\let\math_display_align_hack_indeed\math_display_align_hack_insert_penalty} \def\math_display_align_hack_insert_penalty {\penalty\interdisplaylinepenalty} \appendtoks \math_display_align_hack \to \mathdisplayaligntweaks %D Text in math: \unexpanded\def\mathortext {\ifmmode \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \defineactivecharacter _ {\mathortext{_}{\_}} text_text $a^2$ % force text mode, will be overloaded later \ifdefined\text\else \let\text\hbox \fi \unexpanded\def\mathoptext#1{\mathop{\text{#1}}} % new: % \startsetups math:morespacing % \Umathordordspacing\textstyle 1mu plus .5mu minus .25mu\relax % \stopsetups % % \setupmathematics % [setups=math:morespacing] \appendtoks \edef\p_setups{\mathematicsparameter\c!setups}% \ifx\p_setups\empty\else \directsetup\p_setups \fi \to \everyswitchmathematics % new: \unexpanded\def\smallmathsymbol#1% {\mathematics{\mathbin{\normalexpanded{\raise.15\exheight\hbox{$\triggermathstyle{\the\numexpr\normalmathstyle+2\relax}#1$}}}}} % this should be a primitive: % \def\mathextensiblecode#1#2% % {\cldcontext{mathematics.extensiblecode(\number#1,\number#2)}} \def\mathextensiblecode#1#2{\ctxcommand{extensiblecode(\number#1,\number#2)}} \def\mathhorizontalcode#1#2{\ctxcommand{horizontalcode(\number#1,\number#2)}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-pat.lua0000644000175000017500000001007512130411274024122 0ustar norbertnorbertif not modules then modules = { } end modules ['font-pat'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This functiononality is nowadays provided via lfg files so what you see here -- is more an example. local match, lower = string.match, string.lower -- Older versions of latin modern didn't have the designsize set so for them we -- get it from the name reporter moved to elsewhere. local fonts = fonts local otf = fonts.handlers.otf local patches = otf.enhancers.patches local register = patches.register local report = patches.report local function patch(data,filename) if data.design_size == 0 then local ds = match(file.basename(lower(filename)),"(%d+)") if ds then report("font %a has design size %a",filename,ds) data.design_size = tonumber(ds) * 10 end end end register("after","migrate metadata","^lmroman", patch) register("after","migrate metadata","^lmsans", patch) register("after","migrate metadata","^lmtypewriter",patch) -- For some reason (either it's a bug in the font, or it's a problem in the -- library) the palatino arabic fonts don't have the mkmk features properly -- set up. local function patch(data,filename) local gpos = data.gpos if gpos then for k=1,#gpos do local v = gpos[k] if not v.features and v.type == "gpos_mark2mark" then report("mkmk feature, name %a", v.name) v.features = { { scripts = { arab = { ["ara "] = true, ["far "] = true, ["urd "] = true, ["dflt"] = true, } }, tag = "mkmk", } } end end end end register("after","rehash features","palatino.*arabic",patch) -- -- this code is now in lm-math.lfg -- -- local function patch(data,filename) -- local uni_to_ind = data.map.map -- if not uni_to_ind[0x391] then -- -- beware, this is a hack, features for latin often don't apply to greek -- -- but lm has not much features anyway (and only greek for math) -- report("adding 13 greek capitals") -- uni_to_ind[0x391] = uni_to_ind[0x41] -- uni_to_ind[0x392] = uni_to_ind[0x42] -- uni_to_ind[0x395] = uni_to_ind[0x45] -- uni_to_ind[0x397] = uni_to_ind[0x48] -- uni_to_ind[0x399] = uni_to_ind[0x49] -- uni_to_ind[0x39A] = uni_to_ind[0x4B] -- uni_to_ind[0x39C] = uni_to_ind[0x4D] -- uni_to_ind[0x39D] = uni_to_ind[0x4E] -- uni_to_ind[0x39F] = uni_to_ind[0x4F] -- uni_to_ind[0x3A1] = uni_to_ind[0x52] -- uni_to_ind[0x3A4] = uni_to_ind[0x54] -- uni_to_ind[0x3A7] = uni_to_ind[0x58] -- uni_to_ind[0x396] = uni_to_ind[0x5A] -- end -- end -- -- register("after","prepare glyphs","^lmroman", patch) -- register("after","prepare glyphs","^lmsans", patch) -- register("after","prepare glyphs","^lmtypewriter",patch) -- -- -- this code is now in cambria-math.lfg and asana-math.lfg -- -- local function patch_domh(data,filename,threshold) -- local m = data.metadata.math -- if m then -- local d = m.DisplayOperatorMinHeight or 0 -- if d < threshold then -- report("DisplayOperatorMinHeight(%s -> %s)",d,threshold) -- m.DisplayOperatorMinHeight = threshold -- end -- end -- end -- -- register("after","check math parameters","cambria", function(data,filename) patch_domh(data,filename,2800) end) -- register("after","check math parameters","cambmath",function(data,filename) patch_domh(data,filename,2800) end) -- register("after","check math parameters","asana", function(data,filename) patch_domh(data,filename,1350) end) context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-spe.mkii0000644000175000017500000001001611754241457024330 0ustar norbertnorbert%D \module %D [ file=supp-spe, %D version=1997.07.05, %D title=\CONTEXT\ Support Macros, %D subtitle=Specials, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 some \type{\special} manipulation %D macros. I needed these when I implemented the code that %D handles the conversion of \TPIC\ specials to \PDF\ code. \ifx \undefined \writestatus \input supp-mis.tex \relax \fi \ifx \undefined \redefinespecial \else \expandafter \endinput \fi \writestatus{loading}{ConTeXt Support Macros / Specials} \unprotect %D When interpreting specials we need to do some basic scanning. %D For the moment we distinguish between three cases. We need %D %D \starttyping %D \special{tag: arguments} %D \special{tag arguments} %D \special{tag} %D \stoptyping %D %D We cannot be sure that the first case isn't %D %D \starttyping %D \special{tag:arguments} %D \stoptyping %D %D So we have to take care of that one too. %D \macros %D {redefinespecial} %D %D Specials that are to be interpreted are defined with %D commands like: %D %D \startbuffer[tmp-1] %D \redefinespecial a: \using#1\endspecial% %D {let's execute special 'a:' using '#1'} %D %D \redefinespecial a \using#1\endspecial% %D {let's execute special 'a' using '#1'} %D %D \redefinespecial a \using#1\endspecial% %D {let's execute special 'a' using nothing} %D \stopbuffer %D %D \typebuffer[tmp-1] %D %D The first two always take an argument, the last one not. %D The definition of this redefinition macro is not that %D complex. The names are internally tagged with \type{\@rds@} %D which saves both time and space. \def\@rds@{@rds@} \def\redefinespecial #1 {\setvalue{\@rds@#1}} %D \macros %D {mimmickspecials} %D %D Mimmicking specials is activated by saying: %D %D \starttyping %D \mimmickspecials %D \stoptyping %D %D This commands redefines the \PLAIN\ \TEX\ primitive %D \type{\special}. \def\mimmickspecials {\let\special\domimmickspecial} %D The special mimmicking macro first looks if it can find an %D colon terminated tag, next it searches for a tag that end %D with a space. If both cannot find, the tag itself is treated %D without argument. \def\domimmickspecial#1% {\domimmickcolonspecial#1:\relax/:\relax/\end} \def\domimmickcolonspecial#1:#2#3:\relax/#4\end {\ifx#2\relax \domimmickspacespecial#1 \relax/ \relax/\end \else \dodomimmickspecial#1:\using#2#3\endspecial \fi} \def\domimmickspacespecial#1 #2#3 \relax/#4\end {\ifx#2\relax \dodomimmickspecial#1\using\endspecial \else \dodomimmickspecial#1\using#2#3\endspecial \fi} \def\dodomimmickspecial#1\using#2\endspecial {\expandafter\ifx\csname\@rds@#1\endcsname\relax % \doifdefinedelse \defaultspecial{#1 #2}% \else %\message{[mimmick special #1 with #2]}% \getvalue{\@rds@#1}\using#2\endspecial \fi} %D Now let's show that things work the way we want, using the %D previous definitions of tag~a. %D %D \startbuffer[tmp-2] %D \mimmickspecials %D \special{a: 1 2 3 4 5} %D \special{a: 1 2 3 4 5} %D \special{a} %D \stopbuffer %D %D \typebuffer[tmp-2] %D %D Which results in: %D %D \startlines %D \getbuffer[tmp-1] %D \getbuffer[tmp-2] %D \stoplines %D \macros %D {mimmickspecial} %D %D When needed, one can call a mimmicked special directly by %D saying for instance: %D %D \starttyping %D \mimmickspecial a: \using...\endspecial %D \stoptyping %D %D This can be handy when specials have much in common. \def\mimmickspecial #1 {\getvalue{\@rds@#1}} %D \macros %D {normalspecial,defaultspecial} %D %D Unknown specials are passed to the default special handler. %D One can for instance ignore all further specials by saying %D \type{\normalspecial}: %D %D \starttyping %D \def\defaultspecial#1{} %D \stoptyping %D %D But here we default to idle. \let\normalspecial \special \let\defaultspecial\special \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-ctx.mkiv0000644000175000017500000000176512130411274024311 0ustar norbertnorbert%D \module %D [ file=core-ctx, %D version=2006.08.16, % old stuff %D title=\CONTEXT\ Core Macros, %D subtitle=Job Control, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Job Control} \registerctxluafile{core-ctx}{1.000} \unprotect \unexpanded\def\job_options_get_commandline {\ctxcommand{getcommandline()}} \unexpanded\def\job_options_get_ctxfile {\ctxcommand{getctxfile()}} \unexpanded\def\job_options_set_modes {\ctxcommand{setdocumentmodes()}} \unexpanded\def\job_options_set_modules {\ctxcommand{setdocumentmodules()}} \unexpanded\def\job_options_set_environments{\ctxcommand{setdocumentenvironments()}} \unexpanded\def\job_options_set_filenames {\ctxcommand{setdocumentfilenames()}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-rtp.mkiv0000644000175000017500000000076011754241457024403 0ustar norbertnorbert%D \module %D [ file=syst-rtp, %D version=2006.10.13, %D title=\CONTEXT\ Core Macros, %D subtitle=Run Time Processes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \def\executesystemcommand#1{\ctxlua{os.execute([[#1]])}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-env.lua0000644000175000017500000001336212130411274024127 0ustar norbertnorbert if not modules then modules = { } end modules ['luat-env'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- A former version provided functionality for non embeded core scripts i.e. runtime -- library loading. Given the amount of Lua code we use now, this no longer makes -- sense. Much of this evolved before bytecode arrays were available and so a lot of -- code has disappeared already. local rawset, rawget, loadfile, assert = rawset, rawget, loadfile, assert local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local report_lua = logs.reporter("resolvers","lua") local luautilities = utilities.lua local luasuffixes = luautilities.suffixes environment = environment or { } local environment = environment -- environment local mt = { __index = function(_,k) if k == "version" then local version = tex.toks and tex.toks.contextversiontoks if version and version ~= "" then rawset(environment,"version",version) return version else return "unknown" end elseif k == "kind" then local kind = tex.toks and tex.toks.contextkindtoks if kind and kind ~= "" then rawset(environment,"kind",kind) return kind else return "unknown" end elseif k == "jobname" or k == "formatname" then local name = tex and tex[k] if name or name== "" then rawset(environment,k,name) return name else return "unknown" end elseif k == "outputfilename" then local name = environment.jobname rawset(environment,k,name) return name end end } setmetatable(environment,mt) -- weird place ... depends on a not yet loaded module function environment.texfile(filename) return resolvers.findfile(filename,'tex') end function environment.luafile(filename) -- needs checking local resolved = resolvers.findfile(filename,'tex') or "" if resolved ~= "" then return resolved end resolved = resolvers.findfile(filename,'texmfscripts') or "" if resolved ~= "" then return resolved end return resolvers.findfile(filename,'luatexlibs') or "" end -- local function checkstrip(filename) -- local modu = modules[file.nameonly(filename)] -- return modu and modu.dataonly -- end local stripindeed = false directives.register("system.compile.strip", function(v) stripindeed = v end) local function strippable(filename) if stripindeed then local modu = modules[file.nameonly(filename)] return modu and modu.dataonly else return false end end function environment.luafilechunk(filename,silent) -- used for loading lua bytecode in the format filename = file.replacesuffix(filename, "lua") local fullname = environment.luafile(filename) if fullname and fullname ~= "" then local data = luautilities.loadedluacode(fullname,strippable,filename) -- can be overloaded if trace_locating then report_lua("loading file %a %s",fullname,not data and "failed" or "succeeded") elseif not silent then texio.write("<",data and "+ " or "- ",fullname,">") end return data else if trace_locating then report_lua("unknown file %a",filename) end return nil end end -- the next ones can use the previous ones / combine function environment.loadluafile(filename, version) local lucname, luaname, chunk local basename = file.removesuffix(filename) if basename == filename then luaname = file.addsuffix(basename,luasuffixes.lua) lucname = file.addsuffix(basename,luasuffixes.luc) else luaname = basename -- forced suffix lucname = nil end -- when not overloaded by explicit suffix we look for a luc file first local fullname = (lucname and environment.luafile(lucname)) or "" if fullname ~= "" then if trace_locating then report_lua("loading %a",fullname) end -- maybe: package.loaded[file.nameonly(fullname)] = true chunk = loadfile(fullname) -- this way we don't need a file exists check end if chunk then assert(chunk)() if version then -- we check of the version number of this chunk matches local v = version -- can be nil if modules and modules[filename] then v = modules[filename].version -- new method elseif versions and versions[filename] then v = versions[filename] -- old method end if v == version then return true else if trace_locating then report_lua("version mismatch for %a, lua version %a, luc version %a",filename,v,version) end environment.loadluafile(filename) end else return true end end fullname = (luaname and environment.luafile(luaname)) or "" if fullname ~= "" then if trace_locating then report_lua("loading %a",fullname) end chunk = loadfile(fullname) -- this way we don't need a file exists check if not chunk then if trace_locating then report_lua("unknown file %a",filename) end else assert(chunk)() return true end end return false end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mod-01.mkii0000644000175000017500000000502611760010301023771 0ustar norbertnorbert%D \module %D [ file=s-mod-01, %D version=very-old, %D title=\CONTEXT\ Style File, %D subtitle=Documentation Paper Environment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 looks like crap, is not documented, will %D change, and used to be called modu-*.tex. \usemodule[mod-00,abr-01] \dontcomplain \unprotect \setupbodyfont [10pt] \definetypeface [narrowtt] [tt] [mono] [modern-cond] [default] [encoding=\defaultencoding] \setuptyping[\v!typing][\c!style=\narrowtt] \setuptype [\v!type] [\c!style=\narrowtt] \mainlanguage [en] \setupwhitespace [\v!big] \setuptolerance [\v!verytolerant,\v!stretch] \setuplayout [\c!backspace=3.5cm, \c!leftmargin=1.75cm, \c!rightmargin=0cm, \c!margindistance=.5cm, \c!leftedgedistance=.25cm, \c!rightedgedistance=.5cm, \c!edge=1.5cm, \c!width=15.55333cm, % 13.998cm at 9pt => 15.55333 at 10pt \c!topspace=2cm, \c!header=1.25cm, \c!footer=1.25cm, \c!height=middle, \c!style=\ss] \setupsetup [\c!reference=1] \startnotmode[single] \setuppagenumbering [\c!alternative={\v!doublesided,\v!singlesided}] \stopnotmode \setuppagenumbering [\c!location=] \expanded{\setupfootertexts [\v!edge] [][\v!pagenumber]} \startmode[single] \setupfootertexts [\v!margin] [\filename{\Modulefile}][] \stopmode \startnotmode[single] \setupfootertexts [\v!margin] [\filename{\Modulefile}][] [\filename{\Modulefile}][] \stopnotmode \setupfootertexts [\v!text] [\CONTEXT] [\Moduletitle] \setupheadertexts [\v!text] [] [\Modulesubtitle] \setupinmargin [\c!location=\v!left] \setupheads [\c!alternative=\v!inmargin] \setuphead [\v!chapter] [\c!style=\ssc, \c!page=\v!right, \c!header=\v!empty] \setuphead [\v!section] [\c!style=\ssb, \c!page=\v!right] \setuplist [\v!chapter] [\c!style=\v!bold, \c!after=\blank] \setupcombinedlist [\v!content] [\c!width=3em, \c!aligntitle=\v!yes] \setupregister [\v!index] [\c!balance=\v!yes, \c!indicator=\v!no] \startnotmode[nocolor] \setupcolors [\c!state=\v!start] \stopnotmode \startnotmode[color] \setupcolors [\c!conversion=\v!always] \setuptyping [\c!palet=graypretty] \stopnotmode \setupinteraction [\c!state=\v!start, \c!color=, \c!style=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ini.mkii0000644000175000017500000005135411754241457024274 0ustar norbertnorbert%D \module %D [ file=math-ini, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, %D subtitle=Initializations, %D author={Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Initializations} % todo: make all definitions global since file loaded only once %D This module provides namespaces for math fonts, thereby %D permitting mixed usage of math fonts. Although not strictly %D needed, we also provide a family name mapping mechanism as %D used in the (original) AMS math definition files, but here %D these names can recursively be remapped and if needed, %D dynamically be changed. We've tried to minimize the number %D of definition commands and use plain \TEX\ definitions as %D fallback. We've tried to follow a couple of conventions %D from plain and AMS math in order to achieve backward %D compatinility. We also kept an eye on future usage of these %D modules in the perspective of MathML and unicode fonts. \unprotect \def\@ml@{@ml@} % math list (used for collection) \def\@mf@{@mf@} % math family %def\@mh@{@mh@} % math handler (not used) \def\@mt@{@mt@} % math token \def\@mc@{@mc@} % math collection \def\@@mathlimopcomm#1{\mathop{#1}} %no \limits \def\@@mathnolopcomm#1{\mathop{#1}\nolimits} \def\@@mathboxcomm #1{\dontleavehmode\hbox{$\mathsurround\zeropoint#1$}} \chardef\mathordcode = 0 \let\mathordcomm \mathord \chardef\mathopcode = 1 \let\mathopcomm \mathop \chardef\mathbincode = 2 \let\mathbincomm \mathbin \chardef\mathrelcode = 3 \let\mathrelcomm \mathrel \chardef\mathopencode = 4 \let\mathopencomm \mathopen \chardef\mathclosecode = 5 \let\mathclosecomm \mathclose \chardef\mathpunctcode = 6 \let\mathpunctcomm \mathpunct \chardef\mathalphacode = 7 \let\mathalphacomm \firstofoneargument \chardef\mathinnercode = 0 \let\mathinnercomm \mathinner \chardef\mathnothingcode= 0 \let\mathnothingcomm \firstofoneargument \chardef\mathlimopcode = 1 \let\mathlimopcomm \@@mathlimopcomm \chardef\mathnolopcode = 1 \let\mathnolopcomm \@@mathnolopcomm \chardef\mathchoicecode = 0 \let\mathchoicecomm \@@mathchoicecomm \chardef\mathboxcode = 0 \let\mathboxcomm \@@mathboxcomm \chardef\mathaccentcode = 8 \chardef\mathradicalcode= 9 \def\@@mathchoicecomm#1{[todo #1]} \def\puremathcode#1{\the\csname math#1code\endcsname} \def\puremathcomm#1{\csname math#1comm\endcsname} \newif\iftracemathcollection % Simple variant: % % \def\dohandlemathtoken#1% % {\csname\@mt@ % \ifcsname\@mt@\mathcollection#1\endcsname % \mathcollection % \else\ifcsname\@mt@\nomathcollection#1\endcsname % \nomathcollection % \fi\fi % #1\endcsname} %D Because a command can have a different meaning in math %D and in text mode, we provide a selector. We also provide %D the pure alternatives as \type {\mathcharacter} and \type %D {\textcharacter}. % \ifx\dohandlecommand\undefined \wait \fi % troubles ! but not in mkiv so ... \let\mathcharacter\dohandlemathtoken \let\textcharacter\dohandlecommand % better \dohandletexttoken % More clever layout: % % \def\dohandlemathtoken#1% % {\csname % \ifmmode % \ifcsname\@mt@\mathcollection#1\endcsname % \@mt@\mathcollection % \else\ifcsname\@mt@\nomathcollection#1\endcsname % \@mt@\nomathcollection % \else\ifcsname\characterencoding#1\endcsname % \characterencoding % \else % \nocharacterencoding % \fi\fi\fi % \else % \ifcsname\characterencoding#1\endcsname % \characterencoding % \else % \nocharacterencoding % \fi % \fi % #1\endcsname} % % fallback to math when in text mode (handy for unicode vectors) \def\dohandlemathtoken#1% {\csname \ifmmode \ifcsname\@mt@\mathcollection#1\endcsname \@mt@\mathcollection \else\ifcsname\@mt@\nomathcollection#1\endcsname \@mt@\nomathcollection \else\ifcsname\characterencoding#1\endcsname \characterencoding \else \nocharacterencoding \fi\fi\fi \else \ifcsname\characterencoding#1\endcsname \characterencoding \else\ifcsname\nocharacterencoding#1\endcsname \nocharacterencoding \else\ifcsname\@mt@\mathcollection#1\endcsname \strippedcsname\mathematics\expandafter\endcsname\csname\@mt@\mathcollection \else\ifcsname\@mt@\nomathcollection#1\endcsname \strippedcsname\mathematics\expandafter\endcsname\csname\@mt@\nomathcollection \else \nocharacterencoding \fi\fi\fi\fi \fi #1\endcsname} %D Now we redefine the text encoding handler. %D A better fallback: % Just ETEX which is the default nowadays. \def\dohandlemathtoken#1% {\csname \ifmmode \ifcsname\@mt@\mathcollection:\outerencoding#1\endcsname \@mt@\mathcollection:\outerencoding \else\ifcsname\@mt@\mathcollection#1\endcsname \@mt@\mathcollection \else\ifcsname\@mt@\nomathcollection#1\endcsname \@mt@\nomathcollection \else\ifcsname\characterencoding#1\endcsname \characterencoding \else \nocharacterencoding \fi\fi\fi\fi \else \ifcsname\characterencoding#1\endcsname \characterencoding \else\ifcsname\nocharacterencoding#1\endcsname \nocharacterencoding \else\ifcsname\@mt@\mathcollection:\outerencoding#1\endcsname \@mt@\mathcollection:\outerencoding \else\ifcsname\@mt@\mathcollection#1\endcsname \strippedcsname\mathematics\expandafter\endcsname\csname\@mt@\mathcollection \else\ifcsname\@mt@\nomathcollection#1\endcsname \strippedcsname\mathematics\expandafter\endcsname\csname\@mt@\nomathcollection \else \nocharacterencoding \fi\fi\fi\fi\fi \fi #1\endcsname} \let\dohandlecommand\dohandlemathtoken \def\definefamilysynonym {\dotripleempty\dodefinefamilysynonym} \def\dodefinefamilysynonym[#1][#2][#3]% [mathcollection] [] [] {\ifthirdargument \setvalue{\@mf@#1#2}{#3}% \else \setvalue{\@mf@ #1}{#2}% \fi} \let\mathsubfamily\empty \def\purefamily #1{\csname \truefamily{#1}\mathsubfamily\s!fam\endcsname} \def\purefamilyhex#1{\csname hex\truefamily{#1}\mathsubfamily\s!fam\endcsname} \def\truefamily#1% {\ifcsname\@mf@\mathcollection#1\endcsname \@EA\truefamily\csname\@mf@\mathcollection#1\endcsname \else\ifcsname\@mf@#1\endcsname \@EA\truefamily\csname\@mf@#1\endcsname \else\ifcsname\@mf@\nomathcollection#1\endcsname \@EA\truefamily\csname\@mf@\nomathcollection#1\endcsname \else #1% \fi\fi\fi} \newif\ifdynamicmathfamilies \dynamicmathfamiliestrue % true per 2003.11.25; needed for mixed bold math \let\normalpurefamilyhex\purefamilyhex % todo: reset collection (tok legen) en opnieuw laden met true \def\definemathsymbol {\dosixtupleempty\dodefinemathsymbol} \def\dodefinemathsymbol[#1][#2][#3][#4][#5][#6]% {\unexpanded\setgvalue{#1}{\dohandlemathtoken{#1}}% \ifdynamicmathfamilies \let\purefamilyhex\relax \fi \setevalue{\@mt@\mathcollection#1}% {\ifsixthargument \ifnum\puremathcode{#2}=\mathradicalcode \radical"% \else \delimiter"% \ifnum\puremathcode{#2}>7 0\else\puremathcode{#2}\fi \fi \purefamilyhex{#3}\uchexnumbers{#4}% \purefamilyhex{#5}\uchexnumbers{#6}\space \else\iffourthargument \ifnum\puremathcode{#2}=\mathaccentcode \mathaccent\else\mathchar \fi "\ifnum\puremathcode{#2}>7 0\else\puremathcode{#2}\fi \purefamilyhex{#3}\uchexnumbers{#4}\space \fi\fi}% \let\purefamilyhex\normalpurefamilyhex \tracemathsymbol{#1}} \def\tracemathsymbol#1% {\iftracemathcollection {\endgraf \hbox{\tex{#1}~:~{\mathematics{\getvalue{#1}{}}}} \endgraf}% \fi} \def\definemathcharacter {\dosixtupleempty\dodefinemathcharacter} % \def\dodefinemathcharacter[#1][#2][#3][#4][#5][#6]% % {\setmathtoks % \ifdynamicmathfamilies \let\purefamilyhex\relax \fi % \doifnumberelse{#1} % {\scratchcounter#1} % {\scratchcounter\@EA`\string#1}% % \appendetoks % \ifsixthargument % \delcode\the\scratchcounter="% % \ifnum\puremathcode{#2}>7 0\else\puremathcode{#2}\fi % \purefamilyhex{#3}\uchexnumbers{#4}% % \purefamilyhex{#5}\uchexnumbers{#6}\space % \else\iffourthargument % \mathcode\the\scratchcounter="% % \ifnum\puremathcode{#2}>7 0\else\puremathcode{#2}\fi % \purefamilyhex{#3}\uchexnumbers{#4}\space % \fi\fi\to\mathtoks % \let\purefamilyhex\normalpurefamilyhex % \tracemathcharacter{#1}} \newtoks\mathscratchtoks \def\definemathcharacter {\chardef\mathcharactermode\zerocount \dosixtupleempty\dodefinemathcharacter} \def\redefinemathcharacter {\chardef\mathcharactermode\plusone \dosixtupleempty\dodefinemathcharacter} \def\dodefinemathcharacter[#1][#2][#3][#4][#5][#6]% {\ifcase\mathcharactermode \setmathtoks \or \let\mathtoks\mathscratchtoks \mathtoks\emptytoks \fi \ifdynamicmathfamilies \let\purefamilyhex\relax \fi \doifnumberelse{#1} {\scratchcounter#1} {\scratchcounter\@EA`\string#1}% \appendetoks \ifsixthargument \delcode\the\scratchcounter="% \ifnum\puremathcode{#2}>7 0\else\puremathcode{#2}\fi \purefamilyhex{#3}\uchexnumbers{#4}% \purefamilyhex{#5}\uchexnumbers{#6}\space \else\iffourthargument \mathcode\the\scratchcounter="% \ifnum\puremathcode{#2}>7 0\else\puremathcode{#2}\fi \purefamilyhex{#3}\uchexnumbers{#4}\space \fi\fi \to \mathtoks \let\purefamilyhex\normalpurefamilyhex \ifcase\mathcharactermode \expandafter\tracemathcharacter \or \the\mathtoks \mathtoks\emptytoks \expandafter\gobbleoneargument \fi{#1}} % maybe lookahead \def\tracemathcharacter#1% {\iftracemathcollection {\endgraf \doifnumberelse{#1} {\hbox{\tttf\rawcharacter{#1}~:~{\mathematics{\rawcharacter{#1}}}}} {\hbox{\type{#1}~:~{\mathematics{#1}}}} \endgraf}% \fi} \def\definemathcommand {\dotripleempty\dodefinemathcommand} \def\dodefinemathcommand[#1][#2][#3]#4% command class args meaning {\unexpanded\setgvalue{#1}{\dohandlemathtoken{#1}}% \ifthirdargument \processaction [#3] [one=>\setvalue{\@mt@\mathcollection#1}##1{\puremathcomm{#2}{#4{##1}}}, two=>\setvalue{\@mt@\mathcollection#1}##1##2{\puremathcomm{#2}{#4{##1}{##2}}}]% \else\ifsecondargument \setvalue{\@mt@\mathcollection#1}{\puremathcomm{#2}{#4}}% \else \setvalue{\@mt@\mathcollection#1}{\puremathcomm{nothing}{#4}}% \fi\fi \tracemathcommand{#1}} \def\tracemathcommand#1% {\iftracemathcollection \endgraf\hbox{\tex{#1}~:~{\mathematics{\getvalue{#1}{}}}}\endgraf \fi} \def\startmathcollection[#1]% {\pushmacro\mathcollection \setmathcollection{#1}} \def\setmathcollection#1% {\edef\mathcollection{#1}% \doifundefined{\@ml@\mathcollection} {\expandafter\newtoks\csname\@ml@\mathcollection\endcsname}} \def\stopmathcollection {\popmacro\mathcollection} \def\startrawmathcollection {\startmathcollection} \def\stoprawmathcollection {\stopmathcollection} \newtoks\mathtoks \def\setmathtoks {\@EA\let\@EA\mathtoks\csname\@ml@\mathcollection\endcsname} \def\currentmathcollection{\mathcollection} \let\nomathcollection\s!default \def\enablemathcollection[#1]% {\doifnot{#1}\s!default {\setmathcollection\s!default \the\csname\@ml@\mathcollection\endcsname}% \setmathcollection{#1}% \the\csname\@ml@\mathcollection\endcsname} % hook 'm into the font mechanism \definefilesynonym[\f!mathprefix\s!default][\f!mathprefix tex] \def\usemathcollection {\dodoubleempty\dousemathcollection} \def\dousemathcollection[#1][#2]% {\pushmacro\fontclass \pushmacro\mathclass \ifsecondargument \edef\fontclass{#1}% \edef\mathclass{#2}% \else \edef\mathclass{#1}% \fi \doinputonce{\truefilename{\f!mathprefix\mathclass}.mkii}% \doifsomething\fontclass{\setevalue{\@mc@\fontclass\@mc@}{\mathclass}}% \popmacro\mathclass \popmacro\fontclass} \let\mathclass\nomathcollection \letvalue{\@mc@\@mc@}\nomathcollection % \def\autoenablemathcollection % {\doifdefinedelse{\@mc@\fontclass\@mc@} % {\enablemathcollection[\getvalue{\@mc@\fontclass\@mc@}]} % {\enablemathcollection[\s!default]}} % ? ? ? \def\autoenablemathcollection {\expanded{\enablemathcollection[\executeifdefined{\@mc@\fontclass\@mc@}\nomathcollection]}} \appendtoks\autoenablemathcollection\to\mathstrategies \fetchruntimecommand \showmathcharacters {\f!mathprefix\s!run} \fetchruntimecommand \showmathtoken {\f!mathprefix\s!run} \def\resetmathcollection[#1]% {\def\mathcollection{#1}% \forgetdoingonce{\f!mathprefix\mathcollection.mkii}% \setmathtoks \ifx\mathtoks\relax\else\mathtoks\emptytoks\fi} %D \macros %D {ifmathpunctuation, enablemathpunctuation, %D definemathpunctuation} %D %D This will replace periods by comma's: %D %D \starttyping %D \definemathpunctuation . textcomma textperiod %D \definemathpunctuation , textcomma textcomma %D %D \appendtoks %D \redefinemathcharacter [.] [ord] [mi] ["3B]% %D \to \everymathpunctuation %D \stoptyping % \newif\ifmathpunctuation % % \def\enablemathpunctuation{\mathpunctuationtrue} % % \def\definemathpunctuation #1 #2 #3 % % {\appendtoks % \initializemathpunctuation{#1}{#2}{#3}% % \to\everymathematics} % % \def\initializemathpunctuation#1#2#3% sloowww % {\ifmathpunctuation % hm move this test to everymath, or better a separate token list % \mathcode`#1="8000 % \defineactivecharacter #1 {\dohandlemathpunctuation{#2}{#3}}% % \fi} % % \unexpanded\def\dohandlemathpunctuation#1#2% \if fails in mathml interval % {\def\next{\csname\ifx\space\nexttoken#2\else#1\fi\endcsname}% % \futurelet\nexttoken\next} \newtoks\everymathpunctuation \def\enablemathpunctuation % can be called inside math, so after \everymathematics {\relax \ifmmode \the\everymathpunctuation \fi \appendtoksonce \the\everymathpunctuation \to\everymathematics} \def\definemathpunctuation #1 #2 #3 % {\appendtoks \initializemathpunctuation{#1}{#2}{#3}% \to\everymathpunctuation} \def\initializemathpunctuation#1#2#3% sloowww {\mathcode`#1="8000 \defineactivecharacter #1 {\dohandlemathpunctuation{#2}{#3}}} \unexpanded\def\dohandlemathpunctuation#1#2% \if fails in mathml interval {\def\next{\csname\ifx\space\nexttoken#2\else#1\fi\endcsname}% \futurelet\nexttoken\next} %D \startbuffer %D \enablemathpunctuation$(1,2) (1, 2) (1{,}2) \hbox{foo, not bar}$ %D \stopbuffer %D %D \typebuffer %D %D \blank{\getbuffer}\blank %D needed for sin, cos etc \def\mfunction #1{{\mr#1}} % \def\mlimitsfunction #1{\mathlimopcomm{{\mr#1}} % \def\mnolimitsfunction#1{\mathnolopcomm{{\mr#1}} %D Taco posted this solution as response to a mail by Olivier, so %D let's integrate it here. % \def\setmathfunctionstyle#1% rm ss tt % {\def\mfunction##1% no families, just scaling a la text % {\mathchoice % {\hbox{\csname#1\endcsname\tf ##1}} % {\hbox{\csname#1\endcsname\tf ##1}} % {\hbox{\csname#1\endcsname\tfx ##1}} % {\hbox{\csname#1\endcsname\tfxx##1}}}} \def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option \def\setmathfunctionstyle#1% rm ss tt {\doifsomething{#1} {\def\currentmscaledstyle{#1}% \def\mathopnolimits##1{\mathop{\mscaledtext{##1}}\nolimits}% \def\mfunction##1{\mscaledtext{##1}}}} \def\mscaledtext#1% {\mathchoice {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tfx #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tfxx#1}}} %D We can force the way functions are typeset by manipulating the text %D option: %D %D \starttyping %D \definetypeface[iwona][ss][sans][iwona][default][encoding=texnansi] %D \definetypeface[iwona][mm][math][iwona][default][encoding=texnansi,text=ss] %D \stoptyping %D %D This hooks into the math handler with: \appendtoks \setmathfunctionstyle\currentmathtextstyle \to \everybodyfont %D Usage: %D %D \starttyping %D \setmathfunctionstyle\fontstyle % or {rm} or {ss} or .. %D \rm test $\sin{(x^{\sin(x^{\sin(x)})})}$ test %D \ss test $\sin{(x^{\sin(x^{\sin(x)})})}$ test %D \tt test $\sin{(x^{\sin(x^{\sin(x)})})}$ test %D \stoptyping \edef\hexmrfam {0} \edef\hexbsfam {8} \edef\hexmifam {1} \edef\hexbifam {9} \edef\hexsyfam {2} \edef\hexscfam {A} \edef\hexexfam {3} \edef\hextffam {B} \edef\hexitfam {4} \edef\hexmafam {C} \edef\hexslfam {5} \edef\hexmbfam {D} \edef\hexbffam {6} \edef\hexmcfam {E} \edef\hexnnfam {7} \edef\hexmdfam {F} \definefamilysynonym [default] [letters] [mr] \definefamilysynonym [default] [operators] [sy] \definefamilysynonym [default] [lcgreek] [mi] \definefamilysynonym [default] [ucgreek] [mr] \definefamilysynonym [default] [vargreek] [mi] \definefamilysynonym [default] [mitfamily] [mi] \definefamilysynonym [default] [calfamily] [sy] \definefamilysynonym [default] [0] [mr] \definefamilysynonym [default] [1] [mi] \definefamilysynonym [default] [2] [sy] \definefamilysynonym [default] [3] [ex] \enablemathcollection[default] \usemathcollection [default] [tex] \usemathcollection [default] [ams] \usemathcollection [default] [uni] \enablemathcollection[default] %D Some goodies: \def\Angstrom{\nomathematics{\Aring}} %D Bold math: %D %D \starttyping %D \usetypescript [lucida] [texnansi] %D %D \definetypeface [boldmath] [rm] [serif] %D [lucida] [default] [encoding=texnansi] %D \definetypeface [boldmath] [tt] [mono] %D [lucida] [default] [encoding=texnansi] %D \definetypeface [boldmath] [ss] [sans] %D [lucida] [default] [encoding=texnansi] %D \definetypeface [boldmath] [mm] [boldmath] %D [lucida] [default] [encoding=texnansi] %D %D \switchtobodyfont[lucida,10pt] %D %D \showmathtoken{Gamma} $\Gamma \Delta \alpha \delta \zeta$ %D %D \switchtobodyfont[boldmath,10pt] %D %D \showmathtoken{Gamma} $\Gamma \Delta \alpha \delta \zeta$ %D \stoptyping %D \macros %D {nonknuthmode, donknuthmode} %D %D The underscore is frequently used in manuals but unfortunately \TEX\ prefers %D it to be a math specific character. And since computer modern fonts didn't %D have an underscore, one had to use commands to fake one. Nowadays we do %D have underscores in latin modern, and since all other fonts have them, we %D decided to get away from the restriction to use the underscore character in %D text mode. %D %D \starttyping %D \def\test#1{#1} %D %D \nonknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2} %D %D \donknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2} %D \stoptyping %D %D The result is as expected: the first line typesets ok, while the second %D one triggers an error message. \bgroup \ifx\normalsuber\undefined \def\normalsuber{_} \fi \ifx\normalsuper\undefined \def\normalsuper{^} \fi \catcode`_=\active \catcode`^=\active \gdef\nonknuthmode {\appendtoks\let_\normalsuber\let^\normalsuper\to\everymathematics \mathcode`_="8000 \mathcode`^="8000 \catcode`_=\@@other \catcode`^=\@@other \let\nonknuthmode\relax} \gdef\donknuthmode {\catcode`_=\@@subscript \catcode`^=\@@superscript} \egroup %D \macros %D {checkdelimiters, fakeleftdelimiter, fakerightdelimiter} %D %D Handy for non matching situations (as with mathml): %D %D \starttyping %D \checkdelimiters{... bla bla ...} %D \fakeleftdelimiter %D ... bla bla ... %D \fakerightdelimiter %D \stoptyping \newcount\delimitercount \def\leftfakedelimiter {\advance\delimitercount\minusone\gobbleoneargument}% \def\rightfakedelimiter{\advance\delimitercount\plusone \gobbleoneargument}% \def\checkdelimiters#1% {\delimitercount\zerocount \setbox\scratchbox\hbox\bgroup \let\left \leftfakedelimiter \let\right\rightfakedelimiter $#1\expandafter$\expandafter \egroup \expandafter\delimitercount\the\delimitercount\relax} \def\fakeleftdelimiter {\ifnum\delimitercount>\zerocount\left .\fi} \def\fakerightdelimiter{\ifnum\delimitercount<\zerocount\right.\fi} %D Needed for unicode: \def\nulloperator{\mathortext{\mathop{\null}}{\null}} %D To be dealt with ... \mathcode`\ ="8000 % \space \mathcode`\'="8000 % ^\prime \mathcode`\_="8000 % \_ \protect \endinput \tracemathcollectiontrue \input math-tex \page \setupbodyfont[ams] \enablemathcollection[default] \input math-ams \page \setupbodyfont[lbr] \enablemathcollection[lbr] \input math-lbr \page \setupbodyfont[eul] \enablemathcollection[eul] \input math-eul \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-run.mkiv0000644000175000017500000000274512130411274024340 0ustar norbertnorbert%D \module %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 ADE \& \CONTEXT\ Development Team}] %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 \unexpanded\gdef\showsymbolset {\dosingleargument\symb_show_set} \gdef\symb_show_set[#1]% {\ctxcommand{showsymbolset("#1","\symbolset{#1}")}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-enc.mkiv0000644000175000017500000000100211754241457024244 0ustar norbertnorbert%D \module %D [ file=char-enc, %D version=2006.08.20, %D title=\CONTEXT\ Character Support, %D subtitle=Encodings, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Character Support / Encodings} \registerctxluafile{char-enc}{1.001} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-cbk.lua0000644000175000017500000002252212161703335024102 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-cbk'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local insert, remove, find, format = table.insert, table.remove, string.find, string.format local collectgarbage, type, next = collectgarbage, type, next local round = math.round local sortedhash, tohash = table.sortedhash, table.tohash local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end) local report_callbacks = logs.reporter("system","callbacks") local report_memory = logs.reporter("system","memory") --[[ldx--

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

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

When you (temporarily) want to install a callback function, and after a while wants to revert to the original one, you can use the following two functions.

--ldx]]-- local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end) local trace_calls = false -- only used when analyzing performance and initializations local register_callback = callback.register local find_callback = callback.find local list_callbacks = callback.list local frozen, stack, list = { }, { }, callbacks.list if not list then -- otherwise counters get reset list = utilities.storage.allocate(list_callbacks()) for k, _ in next, list do list[k] = 0 end callbacks.list = list end local delayed = tohash { "buildpage_filter", } if trace_calls then local functions = { } local original = register_callback register_callback = function(name,func) if type(func) == "function" then if functions[name] then functions[name] = func return find_callback(name) else functions[name] = func local cnuf = function(...) list[name] = list[name] + 1 return functions[name](...) end return original(name,cnuf) end else return original(name,func) end end end local function frozen_message(what,name) report_callbacks("not %s frozen %a to %a",what,name,frozen[name]) end local function frozen_callback(name) return nil, format("callback '%s' is frozen to '%s'",name,frozen[name]) -- no formatter yet end local function state(name) local f = find_callback(name) if f == false then return "disabled" elseif f then return "enabled" else return "undefined" end end function callbacks.known(name) return list[name] end function callbacks.report() for name, _ in sortedhash(list) do local str = frozen[name] if str then report_callbacks("%s: %s -> %s",state(name),name,str) else report_callbacks("%s: %s",state(name),name) end end end function callbacks.freeze(name,freeze) freeze = type(freeze) == "string" and freeze if find(name,"%*") then local pattern = name for name, _ in next, list do if find(name,pattern) then frozen[name] = freeze or frozen[name] or "frozen" end end else frozen[name] = freeze or frozen[name] or "frozen" end end function callbacks.register(name,func,freeze) if frozen[name] then if trace_callbacks then frozen_message("registering",name) end return frozen_callback(name) elseif freeze then frozen[name] = type(freeze) == "string" and freeze or "registered" end if delayed[name] and environment.initex then return nil end return register_callback(name,func) end function callback.register(name,func) -- original if not frozen[name] then return register_callback(name,func) elseif trace_callbacks then frozen_message("registering",name) end return frozen_callback(name) end function callbacks.push(name,func) if not frozen[name] then local sn = stack[name] if not sn then sn = { } stack[name] = sn end insert(sn,find_callback(name)) register_callback(name, func) elseif trace_callbacks then frozen_message("pushing",name) end end function callbacks.pop(name) if not frozen[name] then local sn = stack[name] if not sn or #sn == 0 then -- some error register_callback(name, nil) -- ! really needed else -- this fails: register_callback(name, remove(stack[name])) local func = remove(sn) register_callback(name, func) end end end if trace_calls then statistics.register("callback details", function() local t = { } -- todo: pass function to register and quit at nil for name, n in sortedhash(list) do if n > 0 then t[#t+1] = format("%s -> %s",name,n) end end return t end) end -- -- somehow crashes later on -- -- callbacks.freeze("find_.*_file","finding file") -- callbacks.freeze("read_.*_file","reading file") -- callbacks.freeze("open_.*_file","opening file") --[[ldx--

The simple case is to remove the callback:

callbacks.push('linebreak_filter') ... some actions ... callbacks.pop('linebreak_filter')

Often, in such case, another callback or a macro call will pop the original.

In practice one will install a new handler, like in:

callbacks.push('linebreak_filter', function(...) return something_done(...) end)

Even more interesting is:

callbacks.push('linebreak_filter', function(...) callbacks.pop('linebreak_filter') return something_done(...) end)

This does a one-shot.

--ldx]]-- --[[ldx--

Callbacks may result in doing some hard work which takes time and above all resourses. Sometimes it makes sense to disable or tune the garbage collector in order to keep the use of resources acceptable.

At some point in the development we did some tests with counting nodes (in this case 121049).

setstepmulsecondsmegabytes
20024.080.5
17521.078.2
15022.074.6
16022.074.6
16521.077.6
12521.589.2
10021.588.4

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

--ldx]]-- -- For the moment we keep this here and not in util-gbc.lua or so. utilities = utilities or { } utilities.garbagecollector = utilities.garbagecollector or { } local garbagecollector = utilities.garbagecollector garbagecollector.enabled = false -- could become a directive garbagecollector.criterium = 4*1024*1024 -- Lua allocates up to 12 times the amount of memory needed for -- handling a string, and for large binary chunks (like chinese otf -- files) we get a prominent memory consumption. Even when a variable -- is nilled, there is some delay in freeing the associated memory (the -- hashed string) because if we do the same thing directly afterwards, -- we see only a slight increase in memory. For that reason it makes -- sense to do a collector pass after a huge file. -- -- test file: -- -- function test() -- local b = collectgarbage("count") -- local s = io.loaddata("some font table, e.g. a big tmc file") -- local a = collectgarbage("count") -- print(">>> STATUS",b,a,a-b,#s,1000*(a-b)/#s) -- end -- -- test() test() test() test() collectgarbage("collect") test() test() test() test() -- -- As a result of this, LuaTeX now uses an optimized version of f:read("*a"), -- one that does not use the 4K allocations but allocates in one step. function garbagecollector.check(size,criterium) if garbagecollector.enabled then criterium = criterium or garbagecollector.criterium if not size or (criterium and criterium > 0 and size > criterium) then if trace_checking then local b = collectgarbage("count") collectgarbage("collect") local a = collectgarbage("count") report_memory("forced sweep, collected: %s MB, used: %s MB",round((b-a)/1000),round(a/1000)) else collectgarbage("collect") end end end end -- this will move commands = commands or { } function commands.showcallbacks() local NC, NR, verbatim = context.NC, context.NR, context.type context.starttabulate { "|l|l|p|" } for name, _ in sortedhash(list) do NC() verbatim(name) NC() verbatim(state(name)) NC() context(frozen[name] or "") NC() NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-num.lua0000644000175000017500000004547112130411274024152 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-num'] = { version = 1.001, comment = "companion to strc-num.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local next, type = next, type local min, max = math.min, math.max local texcount, texsetcount = tex.count, tex.setcount -- Counters are managed here. They can have multiple levels which makes it easier to synchronize -- them. Synchronization is sort of special anyway, as it relates to document structuring. local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local trace_counters = false trackers.register("structures.counters", function(v) trace_counters = v end) local report_counters = logs.reporter("structure","counters") local structures = structures local helpers = structures.helpers local sections = structures.sections local counters = structures.counters local documents = structures.documents local variables = interfaces.variables local v_start = variables.start local v_page = variables.page local v_reverse = variables.reverse local v_first = variables.first local v_next = variables.next local v_previous = variables.previous local v_prev = variables.prev local v_last = variables.last ----- v_no = variables.no local v_backward = variables.backward local v_forward = variables.forward ----- v_subs = variables.subs or "subs" -- states: start stop none reset -- specials are used for counters that are set and incremented in special ways, like -- pagecounters that get this treatment in the page builder counters.specials = counters.specials or { } local counterspecials = counters.specials local counterranges, tbs = { }, 0 counters.collected = allocate() counters.tobesaved = counters.tobesaved or { } counters.data = counters.data or { } storage.register("structures/counters/data", counters.data, "structures.counters.data") storage.register("structures/counters/tobesaved", counters.tobesaved, "structures.counters.tobesaved") local collected = counters.collected local tobesaved = counters.tobesaved local counterdata = counters.data local function initializer() -- not really needed collected = counters.collected tobesaved = counters.tobesaved counterdata = counters.data end local function finalizer() for name, cd in next, counterdata do local cs = tobesaved[name] local data = cd.data for i=1,#data do local d = data[i] local r = d.range cs[i][r] = d.number d.range = r + 1 end end end job.register('structures.counters.collected', tobesaved, initializer, finalizer) local constructor = { -- maybe some day we will provide an installer for more variants last = function(t,name,i) local cc = collected[name] local stop = (cc and cc[i] and cc[i][t.range]) or 0 -- stop is available for diagnostics purposes only t.stop = stop if t.offset then return stop - t.step else return stop end end, first = function(t,name,i) local start = t.start if start > 0 then return start -- brrr elseif t.offset then return start + t.step + 1 else return start + 1 end end, prev = function(t,name,i) return max(t.first,t.number-1) -- todo: step end, previous = function(t,name,i) return max(t.first,t.number-1) -- todo: step end, next = function(t,name,i) return min(t.last,t.number+1) -- todo: step end, backward =function(t,name,i) if t.number - 1 < t.first then return t.last else return t.previous end end, forward = function(t,name,i) if t.number + 1 > t.last then return t.first else return t.next end end, subs = function(t,name,i) local cc = collected[name] t.subs = (cc and cc[i+1] and cc[i+1][t.range]) or 0 return t.subs end, } local function dummyconstructor(t,name,i) return nil -- was 0, but that is fuzzy in testing for e.g. own end setmetatableindex(constructor,function(t,k) if trace_counters then report_counters("unknown constructor %a",k) end return dummyconstructor end) local function enhance() for name, cd in next, counterdata do local data = cd.data for i=1,#data do local ci = data[i] setmetatableindex(ci, function(t,s) return constructor[s](t,name,i) end) end end enhance = nil end local function allocate(name,i) -- can be metatable local cd = counterdata[name] if not cd then cd = { level = 1, -- block = "", -- todo numbers = nil, state = v_start, -- true data = { }, saved = { }, } tobesaved[name] = { } counterdata[name] = cd end cd = cd.data local ci = cd[i] if not ci then ci = { number = 0, start = 0, saved = 0, step = 1, range = 1, offset = false, stop = 0, -- via metatable: last, first, stop only for tracing } setmetatableindex(ci, function(t,s) return constructor[s](t,name,i) end) cd[i] = ci tobesaved[name][i] = { } else if enhance then enhance() end -- not stored in bytecode end return ci end function counters.record(name,i) return allocate(name,i or 1) end local function savevalue(name,i) if name then local cd = counterdata[name].data[i] local cs = tobesaved[name][i] local cc = collected[name] if trace_counters then report_counters("action %a, counter %s, value %s","save",name,cd.number) end local cr = cd.range local old = (cc and cc[i] and cc[i][cr]) or 0 local number = cd.number if cd.method == v_page then -- we can be one page ahead number = number - 1 end cs[cr] = (number >= 0) and number or 0 cd.range = cr + 1 return old else return 0 end end function counters.define(specification) local name = specification.name if name and name ~= "" then -- todo: step local d = allocate(name,1) d.start = tonumber(specification.start) or 0 d.state = v_state or "" local counter = specification.counter if counter and counter ~= "" then d.counter = counter -- only for special purposes, cannot be false d.method = specification.method -- frozen at define time end end end function counters.raw(name) return counterdata[name] end function counters.compact(name,level,onlynumbers) local cd = counterdata[name] if cd then local data = cd.data local compact = { } for i=1,level or #data do local d = data[i] if d.number ~= 0 then compact[i] = (onlynumbers and d.number) or d end end return compact end end -- depends on when incremented, before or after (driven by d.offset) function counters.previous(name,n) return allocate(name,n).previous end function counters.next(name,n) return allocate(name,n).next end counters.prev = counters.previous function counters.currentvalue(name,n) return allocate(name,n).number end function counters.first(name,n) return allocate(name,n).first end function counters.last(name,n) return allocate(name,n).last end function counters.subs(name,n) return counterdata[name].data[n].subs or 0 end local function setvalue(name,tag,value) local cd = counterdata[name] if cd then cd[tag] = value end end counters.setvalue = setvalue function counters.setstate(name,value) -- true/false value = variables[value] if value then setvalue(name,"state",value) end end function counters.setlevel(name,value) setvalue(name,"level",value) end function counters.setoffset(name,value) setvalue(name,"offset",value) end local function synchronize(name,d) local dc = d.counter if dc then if trace_counters then report_counters("action %a, name %a, counter %a, value %a","synchronize",name,dc,d.number) end texsetcount("global",dc,d.number) end local cs = counterspecials[name] if cs then if trace_counters then report_counters("action %a, name %a, counter %a","synccommand",name,dc) end cs(name) end end local function reset(name,n) local cd = counterdata[name] if cd then for i=n or 1,#cd.data do local d = cd.data[i] savevalue(name,i) local number = d.start or 0 d.number = number d.own = nil if trace_counters then report_counters("action %a, name %a, sub %a, value %a","reset",name,i,number) end synchronize(name,d) end cd.numbers = nil else end end local function set(name,n,value) local cd = counterdata[name] if cd then local d = allocate(name,n) local number = value or 0 d.number = number d.own = nil if trace_counters then report_counters("action %a, name %a, sub %a, value %a","set",name,"no",number) end synchronize(name,d) end end local function check(name,data,start,stop) for i=start or 1,stop or #data do local d = data[i] savevalue(name,i) local number = d.start or 0 d.number = number d.own = nil if trace_counters then report_counters("action %a, name %a, sub %a, value %a","check",name,i,number) end synchronize(name,d) end end counters.reset = reset counters.set = set function counters.setown(name,n,value) local cd = counterdata[name] if cd then local d = allocate(name,n) d.own = value d.number = (d.number or d.start or 0) + (d.step or 0) local level = cd.level if not level or level == -1 then -- -1 is signal that we reset manually elseif level > 0 or level == -3 then check(name,d,n+1) elseif level == 0 then -- happens elsewhere, check this for block end synchronize(name,d) end end function counters.restart(name,n,newstart,noreset) local cd = counterdata[name] if cd then newstart = tonumber(newstart) if newstart then local d = allocate(name,n) d.start = newstart if not noreset then reset(name,n) -- hm end end end end function counters.save(name) -- or just number local cd = counterdata[name] if cd then table.insert(cd.saved,table.copy(cd.data)) end end function counters.restore(name) local cd = counterdata[name] if cd and cd.saved then cd.data = table.remove(cd.saved) end end function counters.add(name,n,delta) local cd = counterdata[name] if cd and (cd.state == v_start or cd.state == "") then local data = cd.data local d = allocate(name,n) d.number = (d.number or d.start or 0) + delta*(d.step or 0) -- d.own = nil local level = cd.level if not level or level == -1 then -- -1 is signal that we reset manually if trace_counters then report_counters("action %a, name %a, sub %a, how %a","add",name,"no","no checking") end elseif level == -2 then -- -2 is signal that we work per text if trace_counters then report_counters("action %a, name %a, sub %a, how %a","add",name,"text","checking") end check(name,data,n+1) elseif level > 0 or level == -3 then -- within countergroup if trace_counters then report_counters("action %a, name %a, sub %a, how %a","add",name,level,"checking within group") end check(name,data,n+1) elseif level == 0 then -- happens elsewhere if trace_counters then report_counters("action %a, name %a, sub %a, how %a","add",name,level,"no checking") end else if trace_counters then report_counters("action %a, name %a, sub %a, how %a","add",name,"unknown","no checking") end end synchronize(name,d) return d.number -- not needed end return 0 end function counters.check(level) for name, cd in next, counterdata do if level > 0 and cd.level == -3 then -- could become an option if trace_counters then report_counters("action %a, name %a, sub %a, detail %a","reset",name,level,"head") end reset(name) elseif cd.level == level then if trace_counters then report_counters("action %a, name %a, sub %a, detail %a","reset",name,level,"normal") end reset(name) end end end local function get(name,n,key) local d = allocate(name,n) d = d and d[key] if not d then return 0 elseif type(d) == "function" then return d() else return d end end counters.get = get function counters.value(name,n) -- what to do with own return get(name,n or 1,'number') or 0 end function counters.converted(name,spec) -- name can be number and reference to storage local cd if type(name) == "number" then cd = specials.retrieve("counter",name) cd = cd and cd.counter else cd = counterdata[name] end if cd then local spec = spec or { } local numbers, ownnumbers = { }, { } local reverse = spec.order == v_reverse local kind = spec.type or "number" local data = cd.data for k=1,#data do local v = data[k] -- somewhat messy, what if subnr? only last must honour kind? local vn if v.own then numbers[k], ownnumbers[k] = v.number, v.own else if kind == v_first then vn = v.first elseif kind == v_next then vn = v.next elseif kind == v_prev or kind == v_previous then vn = v.prev elseif kind == v_last then vn = v.last else vn = v.number if reverse then local vf = v.first local vl = v.last if vl > 0 then -- vn = vl - vn + 1 + vf vn = vl - vn + vf -- see testbed for test end end end numbers[k], ownnumbers[k] = vn or v.number, nil end end cd.numbers = numbers cd.ownnumbers = ownnumbers sections.typesetnumber(cd,'number',spec) cd.numbers = nil cd.ownnumbers = nil end end -- interfacing commands.definecounter = counters.define commands.setcounter = counters.set commands.setowncounter = counters.setown commands.resetcounter = counters.reset commands.restartcounter = counters.restart commands.savecounter = counters.save commands.restorecounter = counters.restore commands.addcounter = counters.add commands.rawcountervalue = function(...) context(counters.raw (...)) end commands.countervalue = function(...) context(counters.value (...)) end commands.lastcountervalue = function(...) context(counters.last (...)) end commands.firstcountervalue = function(...) context(counters.first (...)) end commands.nextcountervalue = function(...) context(counters.next (...)) end commands.prevcountervalue = function(...) context(counters.previous(...)) end commands.subcountervalues = function(...) context(counters.subs (...)) end function commands.showcounter(name) local cd = counterdata[name] if cd then context("[%s:",name) local data = cd.data for i=1,#data do local d = data[i] context(" (%s: %s,%s,%s s:%s r:%s)",i,d.start or 0,d.number or 0,d.last,d.step or 0,d.range or 0) end context("]") end end function commands.doifelsecounter(name) commands.doifelse(counterdata[name]) end function commands.doifcounter (name) commands.doif (counterdata[name]) end function commands.doifnotcounter (name) commands.doifnot (counterdata[name]) end function commands.incrementedcounter(...) context(counters.add(...)) end function commands.checkcountersetup(name,level,start,state) counters.restart(name,1,start,true) -- no reset counters.setstate(name,state) counters.setlevel(name,level) sections.setchecker(name,level,counters.reset) end -- -- move to strc-pag.lua -- -- function counters.analyze(name,counterspecification) -- local cd = counterdata[name] -- -- safeguard -- if not cd then -- return false, false, "no counter data" -- end -- -- section data -- local sectiondata = sections.current() -- if not sectiondata then -- return cd, false, "not in section" -- end -- local references = sectiondata.references -- if not references then -- return cd, false, "no references" -- end -- local section = references.section -- if not section then -- return cd, false, "no section" -- end -- sectiondata = sections.collected[references.section] -- if not sectiondata then -- return cd, false, "no section data" -- end -- -- local preferences -- local no = v_no -- if counterspecification and counterspecification.prefix == no then -- return cd, false, "current spec blocks prefix" -- end -- -- stored preferences (not used) -- if cd.prefix == no then -- return cd, false, "entry blocks prefix" -- end -- -- sectioning -- -- if sectiondata.prefix == no then -- -- return false, false, "sectiondata blocks prefix" -- -- end -- -- final verdict -- return cd, sectiondata, "okay" -- end -- -- function counters.prefixedconverted(name,prefixspec,numberspec) -- local cd, prefixdata, result = counters.analyze(name,prefixspec) -- if cd then -- if prefixdata then -- sections.typesetnumber(prefixdata,"prefix",prefixspec or false,cd or false) -- end -- counters.converted(name,numberspec) -- end -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/char-ini.mkiv0000644000175000017500000000547412130411274024260 0ustar norbertnorbert%D \module %D [ file=char-ini, %D version=2006.08.20, %D title=\CONTEXT\ Character Support, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Character Support / Initialization} \registerctxluafile{char-def}{1.001} % let's load this one first \registerctxluafile{char-ini}{1.001} \registerctxluafile{char-cjk}{1.001} \registerctxluafile{char-map}{1.001} % maybe we will load this someplace else \registerctxluafile{char-tex}{1.001} \unprotect % ¨äëïöüÿ % ´áćéíĺńóŕśúýź % ˙ċėġiż % ¯āēīōū % ˝őű % ˆâĉêĝĥîĵôŝûŵŷ % `àèìòùỳ % ¸çķļņŗşţ % ˛ąęįų % ˚åů % ˘ăĕğĭŏŭ % ˇčďěľňřšťž % ˜ãĩñõũ % \def\checkedchar#1% #2% % {\relax\iffontchar\font#1 \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi{\char#1}} % % impossible in math mode so there always fallback (till we have gyre): % % use \normalUchar when possible .. the next one is nice for documents and it also accepts % 0x prefixed numbers \def\utfchar#1{\ctxcommand{utfchar(\number#1)}} \def\checkedchar {\relax\ifmmode\expandafter\checkedmathchar\else\expandafter\checkedtextchar\fi} % #1#2 \def\checkedmathchar#1#2{#2} \def\checkedtextchar #1{\iffontchar\font#1 \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi{\char#1}} \unexpanded\def\textormathchar#1% {\relax\ifmmode \char#1\relax \else\iffontchar\font#1\relax \char#1\relax \else $\char#1$% \fi\fi} %D The codes are stored in the format, so we don't need to reinitialize %D them (unless of course we have adapted the table). It is on the agenda %D to do this with \type {tex.lccode} cum suis once they're available. % \def\setcclcuc#1#2#3{\global\catcode#1=\lettercatcode\global\lccode#1=#2\global\uccode#1=#3\relax} % \def\setcclcucself#1{\global\catcode#1=\lettercatcode\global\lccode#1=#1\global\uccode#1=#1\relax } \ctxlua{characters.setcodes()} % Is setting up vrb tpa and tpb needed? \ctxlua { characters.define( { % letter catcodes \number\texcatcodes, \number\ctxcatcodes, \number\notcatcodes, %number\mthcatcodes, \number\vrbcatcodes, \number\prtcatcodes, \number\tpacatcodes, \number\tpbcatcodes, \number\txtcatcodes, }, { % activate catcodes \number\ctxcatcodes, \number\notcatcodes, \number\prtcatcodes, % new } ) % catcodes.register("xmlcatcodes",\number\xmlcatcodes) } \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-pdf.mkii0000644000175000017500000002347411754241457024263 0ustar norbertnorbert%D \module %D [ file=enco-pdf, %D version=1995.01.01, %D title=\CONTEXT\ Encoding Macros, %D subtitle=\YandY\ texnansi Encoding, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is the \PDF\ document encoding. \startencoding[pdfdoc] % \rawcharacter{number} \definecharacter oeligature ^^9c \definecharacter leftguillemot ^^ab \definecharacter rightguillemot ^^bb \definecharacter Agrave ^^c0 \definecharacter Aacute ^^c1 \definecharacter Acircumflex ^^c2 \definecharacter Atilde ^^c3 \definecharacter Adiaeresis ^^c4 \definecharacter OAligature ^^c5 \definecharacter AEligature ^^c6 \definecharacter Ccedilla ^^c7 \definecharacter Egrave ^^c8 \definecharacter Eacute ^^c9 \definecharacter Ecircumflex ^^ca \definecharacter Ediaeresis ^^cb \definecharacter Igrave ^^cc \definecharacter Iacute ^^cd \definecharacter Icircumflex ^^ce \definecharacter Idiaeresis ^^cf \definecharacter Ntilde ^^d1 \definecharacter Ograve ^^d2 \definecharacter Oacute ^^d3 \definecharacter Ocircumflex ^^d4 \definecharacter Otilde ^^d5 \definecharacter Odiaeresis ^^d6 \definecharacter Ugrave ^^d9 \definecharacter Uacute ^^da \definecharacter Ucircumflex ^^db \definecharacter Udiaeresis ^^dc \definecharacter Yacute ^^dd \definecharacter ssharp ^^df \definecharacter agrave ^^e0 \definecharacter aacute ^^e1 \definecharacter acircumflex ^^e2 \definecharacter atilde ^^e3 \definecharacter adiaeresis ^^e4 \definecharacter oaligature ^^e5 \definecharacter aeligature ^^e6 \definecharacter ccedilla ^^e7 \definecharacter egrave ^^e8 \definecharacter eacute ^^e9 \definecharacter ecircumflex ^^ea \definecharacter ediaeresis ^^eb \definecharacter igrave ^^ec \definecharacter iacute ^^ed \definecharacter icircumflex ^^ee \definecharacter idiaeresis ^^ef \definecharacter ntilde ^^f1 \definecharacter ograve ^^f2 \definecharacter oacute ^^f3 \definecharacter ocircumflex ^^f4 \definecharacter otilde ^^f5 \definecharacter odiaeresis ^^f6 \definecharacter ugrave ^^f9 \definecharacter uacute ^^fa \definecharacter ucircumflex ^^fb \definecharacter udiaeresis ^^fc \definecharacter yacute ^^fd \definecharacter ydiaeresis ^^ff \definecharacter leftsubguillemot {\leftguillemot} \definecharacter rightsubguillemot {\rightguillemot} \definecharacter Uhungarumlaut {\Ucircumflex} \definecharacter uhungarumlaut {\ucircumflex} \definecharacter Ohungarumlaut {\Ocircumflex} \definecharacter ohungarumlaut {\ocircumflex} \definecharacter Aogonek {A} \definecharacter aogonek {a} \definecharacter Eogonek {E} \definecharacter eogonek {e} \definecharacter Iogonek {I} \definecharacter iogonek {i} \definecharacter Uogonek {U} \definecharacter uogonek {u} \definecharacter Aring {A} \definecharacter aring {a} \definecharacter Uring {U} \definecharacter uring {u} \definecharacter Abreve {A} \definecharacter abreve {a} \definecharacter Ebreve {E} \definecharacter ebreve {e} \definecharacter Gbreve {G} \definecharacter gbreve {g} \definecharacter Ibreve {I} \definecharacter ibreve {i} \definecharacter Obreve {O} \definecharacter obreve {o} \definecharacter Ubreve {U} \definecharacter ubreve {u} \definecharacter Ccaron {C} \definecharacter ccaron {c} \definecharacter Dcaron {D} \definecharacter dcaron {d} \definecharacter Ecaron {E} \definecharacter ecaron {e} \definecharacter Lcaron {L} \definecharacter lcaron {l} \definecharacter Ncaron {N} \definecharacter ncaron {n} \definecharacter Rcaron {R} \definecharacter rcaron {r} \definecharacter Scaron {S} \definecharacter scaron {s} \definecharacter Tcaron {T} \definecharacter tcaron {t} \definecharacter Ycaron {Y} \definecharacter ycaron {y} \definecharacter Zcaron {Z} \definecharacter zcaron {z} \definecharacter Lstroke {L} \definecharacter lstroke {l} \definecharacter Ostroke {O} \definecharacter ostroke {o} \definecharacter aumlaut {\adiaeresis} \definecharacter eumlaut {\ediaeresis} \definecharacter iumlaut {\idiaeresis} \definecharacter oumlaut {\odiaeresis} \definecharacter uumlaut {\udiaeresis} \definecharacter Aumlaut {\Adiaeresis} \definecharacter Eumlaut {\Ediaeresis} \definecharacter Iumlaut {\Idiaeresis} \definecharacter Oumlaut {\Odiaeresis} \definecharacter Uumlaut {\Udiaeresis} \definecharacter scommaaccent {s} \definecharacter Scommaaccent {S} \definecharacter tcommaaccent {t} \definecharacter Tcommaaccent {T} \definecharacter Etilde {E} \definecharacter etilde {e} \definecharacter Ahook {A} \definecharacter ahook {a} \definecharacter Ehook {E} \definecharacter ehook {e} \definecharacter Ihook {I} \definecharacter ihook {i} \definecharacter Ohook {O} \definecharacter ohook {o} \definecharacter Uhook {U} \definecharacter uhook {u} \definecharacter Yhook {Y} \definecharacter yhook {y} \definecharacter Acircumflexgrave {\Acircumflex} \definecharacter Acircumflexacute {\Acircumflex} \definecharacter Acircumflextilde {\Acircumflex} \definecharacter Acircumflexhook {\Acircumflex} \definecharacter acircumflexgrave {\acircumflex} \definecharacter acircumflexacute {\acircumflex} \definecharacter acircumflextilde {\acircumflex} \definecharacter acircumflexhook {\acircumflex} \definecharacter Ecircumflexgrave {\Ecircumflex} \definecharacter Ecircumflexacute {\Ecircumflex} \definecharacter Ecircumflextilde {\Ecircumflex} \definecharacter Ecircumflexhook {\Ecircumflex} \definecharacter ecircumflexgrave {\ecircumflex} \definecharacter ecircumflexacute {\ecircumflex} \definecharacter ecircumflextilde {\ecircumflex} \definecharacter ecircumflexhook {\ecircumflex} \definecharacter Ocircumflexgrave {\Ocircumflex} \definecharacter Ocircumflexacute {\Ocircumflex} \definecharacter Ocircumflextilde {\Ocircumflex} \definecharacter Ocircumflexhook {\Ocircumflex} \definecharacter ocircumflexgrave {\ocircumflex} \definecharacter ocircumflexacute {\ocircumflex} \definecharacter ocircumflextilde {\ocircumflex} \definecharacter ocircumflexhook {\ocircumflex} \definecharacter Abrevegrave {A} \definecharacter Abreveacute {A} \definecharacter Abrevetilde {A} \definecharacter Abrevehook {A} \definecharacter abrevegrave {a} \definecharacter abreveacute {a} \definecharacter abrevetilde {a} \definecharacter abrevehook {a} \definecharacter Adotbelow {A} \definecharacter adotbelow {a} \definecharacter Edotbelow {E} \definecharacter edotbelow {e} \definecharacter Idotbelow {I} \definecharacter idotbelow {i} \definecharacter Odotbelow {O} \definecharacter odotbelow {o} \definecharacter Udotbelow {U} \definecharacter udotbelow {u} \definecharacter Ydotbelow {Y} \definecharacter ydotbelow {y} \definecharacter Ohorndotbelow {O} \definecharacter ohorndotbelow {o} \definecharacter Uhorndotbelow {U} \definecharacter uhorndotbelow {u} \definecharacter Acircumflexdotbelow {\Acircumflex} \definecharacter acircumflexdotbelow {\acircumflex} \definecharacter Ecircumflexdotbelow {\Ecircumflex} \definecharacter ecircumflexdotbelow {\ecircumflex} \definecharacter Ocircumflexdotbelow {\Ocircumflex} \definecharacter ocircumflexdotbelow {\ocircumflex} \definecharacter Abrevedotbelow {\Abreve} \definecharacter abrevedotbelow {\abreve} \definecharacter Ohorn {O} \definecharacter Ohorngrave {O} \definecharacter Ohornacute {O} \definecharacter Ohorntilde {O} \definecharacter Ohornhook {O} \definecharacter ohorn {o} \definecharacter ohorngrave {o} \definecharacter ohornacute {o} \definecharacter ohorntilde {o} \definecharacter ohornhook {o} \definecharacter Uhorn {U} \definecharacter Uhorngrave {U} \definecharacter Uhornacute {U} \definecharacter Uhorntilde {U} \definecharacter Uhornhook {U} \definecharacter uhorn {u} \definecharacter uhorngrave {u} \definecharacter uhornacute {u} \definecharacter uhorntilde {u} \definecharacter uhornhook {u} \definecharacter Utilde {U} \definecharacter utilde {u} \definecharacter Itilde {I} \definecharacter itilde {i} \definecharacter Ygrave {Y} \definecharacter ygrave {y} \definecharacter Ytilde {Y} \definecharacter ytilde {y} \definecharacter dstroke {d} \definecharacter Dstroke {D} \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-sorting.mkiv0000644000175000017500000000134012161703335026451 0ustar norbertnorbert%D \module %D [ file=s-languages-sorting, % s-lan-02.mkiv %D version=2010.09.21, %D title=\CONTEXT\ Style File, %D subtitle=Language Sorting, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[languages-sorting] \registerctxluafile{s-languages-sorting}{} \installmodulecommandluasingle \showinstalledsorting {moduledata.languages.sorting.showinstalled} \stopmodule \continueifinputfile{s-languages-sorting.mkiv} \usemodule[art-01] \starttext \showinstalledsorting \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-tab.mkiv0000644000175000017500000017733112130411274024256 0ustar norbertnorbert%D \module %D [ file=core-tab, %D version=1997.10.10, %D title=\CONTEXT\ Table Macros, %D subtitle=\TABLE\ Embedding, %D author=Hans Hagen with copied and patched code from MJ Wichura, %D date=\currentdate] %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 Table Macros / TaBlE Embedding} % Todo: consistent namespace and get rid of not used code % In \MKIV\ the old table macros are sort of obsolete. The color extensions % have been removed and some code is stripped. For practical reasons the % \TABLE\ macros that are used are embedded in this file. % % The following code is based on TABLE 1.0 by Michael J. Wichura (August 1988. % We used a patched version with many overloads and extensions. The documented % (and larger) source can be found in \type {thrd-tab.tex}. % % Some code has been stripped. Some color has been added. Some macros have % been renamed. Registers have been replaces. And probably much more can be % cleaned up. We also need to use \tabl_tab_ prefixes here. \unprotect \newconditional\tablehasleftspacing \newconditional\tablehasrightspacing \newdimen\tablelinethicknessunit \newdimen\tablestrutunit \newskip \tableintercolumnspaceunit \newdimen\tablecolumnwidthunit \newdimen\tablekernunit \def\tablestrutheightfactor {8} \def\tablestrutdepthfactor {3} \def\tableintercolumnspacefactor {3} \def\tablecolumnwidthfactor {10} \def\tablevspacefactor {2} \def\tablekernfactor {1} \def\tablelinethicknessfactor {4} \newtoks\everytable \newtoks\everytableparbox \unexpanded\def\dotablebeginparbox#1% {\setbox\scratchbox\vtop\bgroup % \setbox added \hsize#1\relax \dontcomplain \dorestoretablelineskips \normalbaselines \let~\fixedspace \blank[\v!disable]% % added \the\everytableparbox} \unexpanded\def\dotableendparbox {\removelastskip % itemize or so \endgraf \ifnum\prevgraf>\zerocount % we want at least \verticalstrut \nowhitespace \vskip-\struttotal % one line of text \egroup \ifdim\dp\scratchbox>\lineheight % see (*) for an \getnoflines{\dp\scratchbox}% % example of where \dp\scratchbox\zeropoint % saving can go \setbox\scratchbox % terrible wrong \vtop to \noflines\lineheight{\box\scratchbox}% \fi % esp between rows \else % of paragraphs \egroup \fi \box\scratchbox} \appendtoks \parindent\zeropoint \raggedright \rightskip\zeropoint \s!plus 4em \relax \to \everytableparbox \newskip \tablelefttabskip \newskip \tablerighttabskip \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 \!taTableSpread \newtoks \!taPreamble \newtoks \!taDataColumnTemplate \newtoks \!taRuleColumnTemplate \newtoks \!taOldRuleColumnTemplate \newtoks \!taLeftGlue \newtoks \!taRightGlue \newskip \!taLastRegularTabskip \newif \if!taBeginFormat \newif \if!taOnceOnlyTabskip \def\!thToksEdef#1#2% {\edef\!ttemp{#2}% #1\expandafter{\!ttemp}% \ignorespaces} \def\!thLoop#1\repeat {\def\!thIterate{#1\expandafter \!thIterate\fi}% \!thIterate \let\!thIterate\relax} \def\dobegintableformat {\!taPreamble\emptytoks \!taColumnNumber\zerocount \scratchskip\tableintercolumnspaceunit \multiply\scratchskip\tableintercolumnspacefactor \divide\scratchskip\plustwo \!taRuleColumnTemplate\expandafter{\expandafter\tabskip\the\scratchskip}% \!taLastRegularTabskip\scratchskip \!taOnceOnlyTabskipfalse \!taBeginFormattrue \let\!tfRowOfWidths\empty \doreadtableformatkeys} \def\!tfSetWidth {\ifx\!tfRowOfWidths\empty % true if no prior "w" keys \ifnum\!taColumnNumber>\zerocount % true if "w" key is to right of first "|" \begingroup % RowOfWidths={&\omit || n copies of &\omit&\omit}, where n = number of column to the left of this one \scratchcounter\plusone \aftergroup \edef \aftergroup \!tfRowOfWidths \aftergroup {% \aftergroup &\aftergroup \omit \!thLoop \ifnum \scratchcounter<\!taColumnNumber \advance\scratchcounter\plusone \aftergroup \!tfAOAO \repeat \aftergroup}% \endgroup \fi \fi \ifx[\!ttemp % \!tgGetValue sets \!ttemp = token after w \expandafter\!tfSetWidthText \else \expandafter\!tfSetWidthValue \fi} \def\!tfAOAO{&\omit&\omit} \def\!tfSetWidthText[#1]% {\def\!tfWidthText{#1}% \doreadtableformatkeys} \def\!tfSetWidthValue {\!taMinimumColumnWidth= \ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablecolumnwidthfactor \else \!tgValue \fi \tablecolumnwidthunit \else \!tgValue \fi \let\!tfWidthText\empty % Override possible prior `w[sample entry]' \doreadtableformatkeys} \def\!tfSetTabskip {\ifnum\!tgCode=\plusone \scratchskip\tableintercolumnspaceunit \multiply\scratchskip \ifx\!tgValue\empty\tableintercolumnspacefactor\else\!tgValue\fi \else \scratchskip\!tgValue \fi \divide\scratchskip\plustwo \ifnum\!taColumnNumber=\zerocount %\!thToksEdef\!taRuleColumnTemplate{\the\!taRuleColumnTemplate\tabskip\the\scratchskip}% \normalexpanded{\!taRuleColumnTemplate{\the\!taRuleColumnTemplate\tabskip\the\scratchskip}}% \else %\!thToksEdef\!taDataColumnTemplate{\the\!taDataColumnTemplate\tabskip\the\scratchskip}% \normalexpanded{\!taDataColumnTemplate{\the\!taDataColumnTemplate\tabskip\the\scratchskip}}% \fi \if!taOnceOnlyTabskip\else \!taLastRegularTabskip\scratchskip % Remember this Tabskip, for possible \fi % restoration after a subsequent"OnceOnly" \doreadtableformatkeys} \def\!tfSetVrule {\!thToksEdef\!taRuleColumnTemplate {\hfil \vrule \noexpand\!!width \ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablevrulethicknessfactor \else \!tgValue \fi \tablelinethicknessunit \else \!tgValue \fi ####% \hfil \the\!taRuleColumnTemplate}% \!tfAdjoinPriorColumn} \def\!tfSetAlternateVrule {\afterassignment\!tfSetAlternateA \scratchtoks} \def\!tfSetAlternateA {\!thToksEdef\!taRuleColumnTemplate{\the\scratchtoks\the\!taRuleColumnTemplate}% \!tfAdjoinPriorColumn} \def\!tfAdjoinPriorColumn {\ifnum \!taColumnNumber=0 \!taPreamble=\!taRuleColumnTemplate % New \tabskip may have been added \else \ifx\!tfRowOfWidths\empty % no "w" keys specified yet, not even this col \else \!tfUpdateRowOfWidths \fi \!thToksEdef\!taDataColumnTemplate{\the\!taLeftGlue\the\!taDataColumnTemplate\the\!taRightGlue}% \!thToksEdef\!taPreamble{\the\!taPreamble&\the\!taDataColumnTemplate&\the\!taRuleColumnTemplate}% \fi \advance \!taColumnNumber \plusone \if!taOnceOnlyTabskip \!thToksEdef\!taDataColumnTemplate{####\tabskip \the\!taLastRegularTabskip}% \else \!taDataColumnTemplate{##}% \fi \!taRuleColumnTemplate\emptytoks \!taLeftGlue{\hfil}% \!taRightGlue{\hfil}% \!taMinimumColumnWidth\zeropoint \let\!tfWidthText\empty \!taOnceOnlyTabskipfalse \doreadtableformatkeys} \def\!tfUpdateRowOfWidths {\ifx\!tfWidthText\empty \else \!tfComputeMinColWidth \fi \edef\!tfRowOfWidths {\!tfRowOfWidths &% \omit \ifdim \!taMinimumColumnWidth>\zeropoint \hskip \the\!taMinimumColumnWidth \fi & \omit}} \def\!tfComputeMinColWidth {\setbox0\vbox {\ialign{% Plain's initialized \halign; \tabskip=0pt \everycr={} \span\the\!taDataColumnTemplate\cr \!tfWidthText\cr}}% \!taMinimumColumnWidth=\wd0 } \def\!tfFinishFormat {\!thToksEdef\!taPreamble{####\tabskip\tablelefttabskip&\the\!taPreamble \tabskip\tablerighttabskip&####\tabskip\zeropoint\cr} \!taBeginFormatfalse \!ttDoHalign} \def\dotablereformat[#1]% will become local {\omit \!taDataColumnTemplate{##}% \!taLeftGlue\emptytoks \!taRightGlue\emptytoks \begingroup \@@useotherbar \expanded{\endgroup\noexpand\doreadtableformatkeys#1]}}% appear in a \dotablereformat cmd; this is here as a safeguard. \appendtoks \let\ReFormat\dotablereformat \to \everytable \def\!tfEndReFormat {\!tfReFormat} \appendtoks \dotableparalignment \to \everytableparbox \def\!tfReFormat#1% {\the \!taLeftGlue \vbox{\forgetall\ialign{\span\the\!taDataColumnTemplate\cr#1\cr}}% \the \!taRightGlue \kern\zeropoint} % prevents \unskip / really needed \def\!tgGetValue#1% {\def\!tgReturn{#1}% \futurelet\!ttemp\!tgCheckForParen} \def\!tgCheckForParen% {\ifx\!ttemp (% \expandafter \!tgDoParen \else \expandafter \!tgCheckForSpace \fi} \def\!tgDoParen(#1)% {\def\!tgCode{2}% will be expanded \def\!tgValue{#1}% \!tgReturn} \def\!tgCheckForSpace {\def\!tgCode{1}% \let\!tgValue\empty \ifx\!ttemp\!thSpaceToken \expandafter \!tgReturn \else \expandafter \!tgCheckForDigit \fi} % \def\!tgCheckForDigit % {\donefalse % \ifx 0\!ttemp \donetrue % \else\ifx 1\!ttemp \donetrue % \else\ifx 2\!ttemp \donetrue % \else\ifx 3\!ttemp \donetrue % \else\ifx 4\!ttemp \donetrue % \else\ifx 5\!ttemp \donetrue % \else\ifx 6\!ttemp \donetrue % \else\ifx 7\!ttemp \donetrue % \else\ifx 8\!ttemp \donetrue % \else\ifx 9\!ttemp \donetrue % \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi % \ifdone % \expandafter \!tgGetNumber % \else % \expandafter \!tgReturn % \fi} \def\!tgCheckForDigit % less tokens: {\donetrue \ifx 0\!ttemp \else \ifx 1\!ttemp \else \ifx 2\!ttemp \else \ifx 3\!ttemp \else \ifx 4\!ttemp \else \ifx 5\!ttemp \else \ifx 6\!ttemp \else \ifx 7\!ttemp \else \ifx 8\!ttemp \else \ifx 9\!ttemp \else \donefalse \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \ifdone \expandafter \!tgGetNumber \else \expandafter \!tgReturn \fi} % \def\!tgCheckForDigit % does not work % {\relax\doifnumberelse\!ttemp\!tgGetNumber\!tgReturn} \def\!tgGetNumber {\afterassignment\!tgGetNumberA\scratchcounter=} \def\!tgGetNumberA{\edef\!tgValue{\the\scratchcounter}\!tgReturn} \def\!tgSetUpParBox {\normalexpanded {\noexpand \doreadtableformatkeys b{\dotablebeginparbox {\ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablecolumnwidthfactor \else \!tgValue \fi \tablecolumnwidthunit \else \!tgValue \fi}}% a{\dotableendparbox}}} \def\!tgInsertKern {\edef\!ttemp {\kern \ifnum \!tgCode=\plusone \ifx \!tgValue\empty \tablekernfactor \else \!tgValue \fi \tablekernunit \else \!tgValue \fi}% \edef\!ttemp {\noexpand\doreadtableformatkeys \ifconditional\tablehasleftspacing b{\!ttemp} \fi \ifconditional\tablehasrightspacing a{\!ttemp} \fi}% \!ttemp} \def\newtableformatkey #1{\setvalue{!tk<\string#1>}} \def\doreadtableformatkeys#1{\getvalue{!tk<\string#1>}} % Key "b": b{TOKENS} adds TOKENS to the left of (before) the template \newtableformatkey b#1% {\expandafter\!tkJoin\expandafter{\the\!taDataColumnTemplate}{#1}% \doreadtableformatkeys} \def\!tkJoin#1#2% {\!taDataColumnTemplate{#2#1}}% % Key "a": a{TOKENS} adds TOKENS to the right of (after) the template \newtableformatkey a#1% {\!taDataColumnTemplate\expandafter{\the\!taDataColumnTemplate #1}% \doreadtableformatkeys} % Key "\{": Enclose template in braces. \newtableformatkey \{% {\!taDataColumnTemplate=\expandafter{\expandafter{\the\!taDataColumnTemplate}}% \doreadtableformatkeys} % Key "*": "*{N}{KEY LETTERS}" is equivalent to specifying % N times. % KEY LETTERS may contain further * specifications \newtableformatkey *#1#2% {\scratchcounter=#1\relax \scratchtoks\emptytoks \!thLoop \ifnum\scratchcounter>\zerocount \scratchtoks\expandafter{\the\scratchtoks#2}% \advance\scratchcounter\minusone \repeat \expandafter\doreadtableformatkeys\the\scratchtoks} % Key "\LeftGlue": Specifies the glue (usually \hfil, or nothing) to be % added to extreme left of the template to position a column \newtableformatkey \LeftGlue#1% {\!taLeftGlue{#1}% \doreadtableformatkeys} \newtableformatkey \RightGlue#1% {\!taRightGlue{#1}% \doreadtableformatkeys} \newtableformatkey c% {\prependtoks\raggedcenter\to\!taDataColumnTemplate \doreadtableformatkeys \LeftGlue\hfil \RightGlue\hfil} \newtableformatkey l% {\prependtoks\raggedright\to\!taDataColumnTemplate \doreadtableformatkeys \LeftGlue\empty \RightGlue\hfil} \newtableformatkey r% {\prependtoks\raggedleft\to\!taDataColumnTemplate \doreadtableformatkeys \LeftGlue\hfil \RightGlue\empty} \newtableformatkey x% {\prependtoks\notragged\to\!taDataColumnTemplate \doreadtableformatkeys \LeftGlue\hfil \RightGlue\empty} % Key "k": Adds kerns to left and right of "#" % This key and the two below use Plain TeX's \if@h as if it were \if@left, % and \if@v as if it were \if@right. Table making goes on in a group, % so even in the unlikely circumstance that a \phantom is currently under % construction, there's no problem. \newtableformatkey k% {\settrue\tablehasleftspacing \settrue\tablehasrightspacing \!tgGetValue{\!tgInsertKern}} % Key "i": Adds a kern to the left of "#" \newtableformatkey i% {\settrue\tablehasleftspacing \setfalse\tablehasrightspacing \!tgGetValue{\!tgInsertKern}} % Key "j": Adds a kern to the right of "#" \newtableformatkey j% {\setfalse\tablehasleftspacing \settrue\tablehasrightspacing \!tgGetValue{\!tgInsertKern}} % Key "n": numeric item , non-math mode. \newtableformatkey n% {\def\!tnStyle{}% \futurelet\!tnext\!tnTestForBracket} % Key "N": numeric item, math mode. \newtableformatkey N% {\def\!tnStyle{$}% \futurelet\!tnext\!tnTestForBracket} % Key "m": Math mode. \newtableformatkey m% {\doreadtableformatkeys b$ a$} % Key "M": Displaymath mode. \newtableformatkey M% {\doreadtableformatkeys \{ b{$\displaystyle} a$} % Key "\m": Template ${}#\hfil$ \newtableformatkey \m% {\doreadtableformatkeys l b{{}} m} % Key "\M": Template $\displaystyle{{}#\hfil}$ \newtableformatkey \M% {\doreadtableformatkeys l b{{}} M} % Key "f": Set font (E.g., f\it sets up italic font (assuming \it % has its usual meaning) \newtableformatkey f#1% {\doreadtableformatkeys b{#1}} \newtableformatkey B{\doreadtableformatkeys f\bf} % Key "B": abbreviation for f\bf \newtableformatkey I{\doreadtableformatkeys f\it} % Key "I": abbreviation for f\it \newtableformatkey S{\doreadtableformatkeys f\sl} % Key "S": abbreviation for f\sl \newtableformatkey R{\doreadtableformatkeys f\rm} % Key "R": abbreviation for f\rm \newtableformatkey T{\doreadtableformatkeys f\tt} % Key "T": abbreviation for f\tt % Key "p": ParBox \newtableformatkey p% {\!tgGetValue{\!tgSetUpParBox}} % Key "w": minimum column width \newtableformatkey w% {\!tkTestForBeginFormat w{\!tgGetValue{\!tfSetWidth}}} % Key "s": Set tabskip for the inter-column space to the right % of the current column, and all subsequent spaces, until overriden % by a new "s" or "o" key. \newtableformatkey s% {\!taOnceOnlyTabskipfalse % in case same column has a prior "o" key \!tkTestForBeginFormat t{\!tgGetValue{\!tfSetTabskip}}} % Key "o": Apply the \tabskip stated for this column ONLY to the % inter-column space just to the right of this column; restore the % the previous \tabskip for subsequent columns. \newtableformatkey o% {\!taOnceOnlyTabskiptrue \!tkTestForBeginFormat o{\!tgGetValue{\!tfSetTabskip}}} % Key "|": Standard rule column designator \newtableformatkey |% {\!tkTestForBeginFormat |{\!tgGetValue{\!tfSetVrule}}} % Key "\|": Non-standard rule column designator \newtableformatkey \|% {\!tkTestForBeginFormat \|{\!tfSetAlternateVrule}} % Key ".": PERIOD -- end of \dobegintableformat section. \newtableformatkey .% {\!tkTestForBeginFormat.{\!tfFinishFormat}} % Key "\doendtableformat": Equivalent to "." \newtableformatkey \doendtableformat {\!tkTestForBeginFormat\doendtableformat{\!tfFinishFormat}} % Key "]": End of \dotablereformat section \newtableformatkey ]% {\!tkTestForReFormat ] \!tfEndReFormat} % TEST FOR BEGIN FORMAT{}{Intended Action}: This test is run % on keys that can only be used by \dobegintableformat --- "s", "o", % "|", "\|", "w", ".", and "\doendtableformat". \def\!tkTestForBeginFormat#1#2% {\if!taBeginFormat \def\!ttemp{#2}% \expandafter\!ttemp \else \toks0={#1}% \toks2=\expandafter{\string\dotablereformat}% \expandafter\!tkImproperUse \fi} % TEST FOR RE FORMAT{}{Intended Action}: This test is run % on the key "]", which can only be used by \dotablereformat. \def\!tkTestForReFormat#1#2% {\if!taBeginFormat \toks0={#1}% \toks2=\expandafter{\string\dobegintableformat}% \expandafter\!tkImproperUse \else \def\!ttemp{#2}% \expandafter\!ttemp \fi} % NOTE: THE SPACE BETWEEN A NUMERIC ENTRY AND THE FOLLOWING '|', '"', % OR '\|' IS MANDATORY. % EMPTY NUMERIC ENTRIES ARE NOT ALLOWED: USE '{}' OR '\omit' INSTEAD. \def\!tnTestForBracket {\ifx[\!tnext \expandafter\!tnGetArgument \else \expandafter\!tnGetCode \fi} % GET CODE: E.g. "4", or "4.0", "0.4", or "10.2" \def\!tnGetCode#1 % {\!tnConvertCode #1..!} % CONVERT CODE: E.g. converts above to [0000], [0000.], [.0000], % [0000000000.00] \def\!tnConvertCode #1.#2.#3!% {\begingroup \aftergroup\edef \aftergroup\!ttemp \aftergroup{% \aftergroup[% \scratchcounter#1\relax \!thLoop \ifnum \scratchcounter>\zerocount \advance\scratchcounter\minusone \aftergroup0 \repeat \def\!ttemp{#3}% \ifx\!ttemp \empty \else \aftergroup. \scratchcounter#2\relax \!thLoop \ifnum \scratchcounter>\zerocount \advance\scratchcounter\minusone \aftergroup0 \repeat \fi \aftergroup]\aftergroup}% \endgroup\relax \expandafter\!tnGetArgument\!ttemp} % GET ARGUMENT: [ > \def\!tnGetArgument[#1]% {\!tnMakeNumericTemplate\!tnStyle#1..!} % MAKE NUMERIC TEMPLATE \def\!tnMakeNumericTemplate#1#2.#3.#4!% #1= or $ {\def\!ttemp{#4}% \ifx\!ttemp\empty \!taDimenC\zeropoint \else \setbox\scratchbox=\hbox{\mathsurround\zeropoint #1.#3#1}% \!taDimenC\wd\scratchbox \fi \setbox\scratchbox\hbox{\mathsurround\zeropoint #1#2#1}% \!thToksEdef\!taDataColumnTemplate {\noexpand\!tnSetNumericItem{\the\wd\scratchbox}{\the\!taDimenC}{#1}% \the\!taDataColumnTemplate}% Might have tabskip glue in here \doreadtableformatkeys} % SET NUMERIC ITEM \def\!tnSetNumericItem #1#2#3#4 % {\!tnSetNumericItemA {#1}{#2}{#3}#4..!} \def\!tnSetNumericItemA #1#2#3#4.#5.#6!% {\def\!ttemp{#6}% \hbox to #1{\hss \mathsurround\zeropoint #3#4#3}% \hbox to #2{\ifx\!ttemp\empty\else\mathsurround\zeropoint #3.#5#3\fi\hss}} % extensions \newtableformatkey q% {\letempty\!tqStyle \futurelet\!tnext\!tqTestForBracket} \newtableformatkey Q% {\def\!tqStyle{$}% \futurelet\!tnext\!tqTestForBracket} \def\!tqTestForBracket {\ifx[\!tnext \!thx\!tqGetArgument \else \!thx\!tqGetCode \fi} \def\!tqGetCode#1 % note the blank {\!tqConvertCode #1,,!} \def\!tqConvertCode #1,#2,#3!% {\begingroup \aftergroup\edef \aftergroup\!ttemp \aftergroup{% \aftergroup[% \scratchcounter#1\relax \!thLoop \ifnum \scratchcounter>\zerocount \advance\scratchcounter\minusone \aftergroup0 \repeat \def\!ttemp{#3}% \ifx\!ttemp\empty \else \aftergroup, \scratchcounter#2\relax \!thLoop \ifnum\scratchcounter>\zerocount \advance\scratchcounter\minusone \aftergroup0 \repeat \fi \aftergroup]\aftergroup}% \endgroup\relax \!thx\!tqGetArgument\!ttemp} \def\!tqGetArgument[#1]% {\!tqMakeQuantityTemplate\!tqStyle#1,,!} \def\!tqMakeQuantityTemplate#1#2,#3,#4!% #1= or $ {\def\!ttemp{#4}% \ifx\!ttemp\empty \!taDimenC\zeropoint \else \setbox\scratchbox\hbox{\mathsurround\zeropoint #1,#3#1}% \!taDimenC\wd\scratchbox \fi \setbox\scratchbox\hbox{\mathsurround\zeropoint #1#2#1}% \!thToksEdef\!taDataColumnTemplate {\noexpand\!tqSetQuantityItem{\the\wd\scratchbox}{\the\!taDimenC}{#1}% \the\!taDataColumnTemplate}% \doreadtableformatkeys} \def\!tqSetQuantityItem #1#2#3#4 % {\!tqSetQuantityItemA{#1}{#2}{#3}#4,,!} \def\!tqSetQuantityItemA #1#2#3#4,#5,#6!% {\def\!ttemp{#6}% \hbox to #1{\hss\mathsurround\zeropoint#3#4#3}% \hbox to #2{\ifx\!ttemp\empty\else\mathsurround\zeropoint#3,#5#3\fi\hss}} % \Enlarge % \enlarge \def\dotableEnlarge#1#2% {% 3rd argument is picked up later % #1=extra height % #2=extra depth \!taDimenA=#1\relax \!taDimenB=#2\relax \let\!TsSpaceFactor\empty \ifmmode \expandafter\mathpalette \expandafter\!TsEnlargeMath \else \expandafter\!TsEnlargeOther \fi} \def\!TsEnlargeOther#1% {\ifhmode \setbox\scratchbox\hbox{#1\xdef\!TsSpaceFactor{\spacefactor\the\spacefactor}}% \else \setbox\scratchbox\hbox{#1}% \fi \!TsFinishEnlarge} \def\!TsEnlargeMath#1#2% {\setbox\scratchbox\hbox{$\mathsurround\zeropoint#1{#2}$}% \!TsFinishEnlarge} \def\!TsFinishEnlarge {\ht\scratchbox\dimexpr\ht\scratchbox+\!taDimenA\relax \dp\scratchbox\dimexpr\dp\scratchbox+\!taDimenB\relax \box\scratchbox \!TsSpaceFactor\relax} \def\dotableenlarge#1#2% 3rd argument is picked up later {\dotableEnlarge{#1\tablestrutunit}{#2\tablestrutunit}} \appendtoks \let\enlarge\dotableenlarge \let\Enlarge\dotableEnlarge \to \everytable % BEGIN TABLE \let\dotablestandardend\relax \def\dotablestandardbegin[#1]% \!ttBeginTable (always argument) {\if#1u% unboxed table \ifmmode \let\dotablestandardend\relax % user had better be in display math mode and have only one table at the outer level \else % user had better be in vertical mode \bgroup \let\dotablestandardend\egroup \fi \else \hbox\bgroup \def\dotablestandardend{\egroup\egroup}% \if#1t% \vtop \else\if#1b% \vbox \else \def\dotablestandardend{\egroup$\egroup}% %$\vcenter \scratchtoks\everymath\everymath\emptytoks$\everymath\scratchtoks\vcenter \fi\fi \bgroup % for the \vtop, \vbox, or \vcenter \fi \advance\!taRecursionLevel\plusone \let\!ttRightGlue\relax \everycr\emptytoks \ifnum\!taRecursionLevel=\plusone \the\everytable \fi} \bgroup \catcode\tildeasciicode\activecatcode \appendtoks \catcode\barasciicode\activecatcode \def~{\kern.5em}% \def\\{\ifhmode\space\else\par\fi}% \to \everytable \egroup \let\!ttRightGlue\relax % This may be changed, in a group, by \JustCenter, etc % DO HALIGN: Invoked by END FORMAT (or the key ".") \def\!ttDoHalign {\edef\dorestoretablelineskips {\baselineskip \the\baselineskip \lineskiplimit\the\lineskiplimit \lineskip \the\lineskip \tabskip \the\tabskip \relax}% \baselineskip \zeropoint \lineskiplimit\zeropoint \lineskip \zeropoint \tabskip \zeropoint \edef\p_tabl_table_textwidth{\directtablesparameter\c!textwidth}% \halign \ifx\p_tabl_table_textwidth\empty \else to \ifx\p_tabl_table_textwidth\v!max \hsize \else \p_tabl_table_textwidth \fi\fi % \the\!taTableSpread \bgroup \span \the\!taPreamble \ifx\!tfRowOfWidths\empty\else \!tfRowOfWidths\cr \fi} % END TABLE \def\dotablenormalend {\egroup % finishes the \halign \dotablestandardend} % closes off the table envirnoment set up by \tablestandardbegin \def\donormaltablelineending {\cr} \def\donormaltablelineformat#1#2% {\vrule \s!width \zeropoint \s!height\dimexpr\tablestrutheightfactor\tablestrutunit+#1\tablestrutunit\relax \s!depth \dimexpr\tablestrutdepthfactor \tablestrutunit+#2\tablestrutunit\relax \relax \cr} % INSERT VRULE \newcount\noftablevrules \noftablevrules\plusone \let\tablecurrentvrulecolor\empty \let\tablecurrenthrulecolor\empty \def\@VLd{.125em} \def\do!ttInsertVrule {\vrule\!!width \ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablevrulethicknessfactor \else \!tgValue \fi \tablelinethicknessunit \else \!tgValue \fi \hskip\@VLd} \def\donormaltablesimplebar {\unskip\!ttRightGlue&&} \def\donormaltablecomplexbar {\unskip\!ttRightGlue&\omit \hfil \ifx\tablecurrentvrulecolor\empty\else \switchtocolor[\tablecurrentvrulecolor]% \fi \ifcase\noftablevrules\or \do!ttInsertVrule \unskip \else \dorecurse\noftablevrules\do!ttInsertVrule \global\noftablevrules\plusone \unskip \fi \global\let\tablecurrentvrulecolor\empty \hfil &} \def\donormaltablenobar {\unskip\!ttRightGlue&\omit&} \def\donormaltablesinglerule {&\donormaltablelongrule&} \def\donormaltablemultirule {&\!ttuse\tabledrulespan\donormaltablelongrule&} % USE \def\!ttuse#1% {\ifnum#1>\plusone \omit \global\setfalse\istabledivision % added \scratchcounter\currenttablecolumn % added \advance\scratchcounter #1% % added \advance\scratchcounter \minusone % added \def\next % added {\global\advance\currenttablecolumn #1% % added \global\advance\currenttablecolumn \minusone % added \scratchcounter#1% \advance\scratchcounter \minusone \advance\scratchcounter \scratchcounter \!thLoop \ifnum\scratchcounter>\plusone \spanomit \advance\scratchcounter\minusone \repeat \span}% \else % added \def\next % conflicts with possible next \omit % added {\global\advance\currenttablecolumn \plusone}%% added \fi \next} % added \def\!ttUse#1[% {\!ttuse{#1}% \dotablereformat[} \appendtoks \let\use\!ttuse \let\Use\!ttUse \to \everytable % rules \def\donormaltablefullrule {\starttablenoalign \!ttGetHalfRuleThickness \hrule\s!height\scratchdimen\s!depth\scratchdimen \stoptablenoalign} \def\donormaltableshortrule % was: \!ttShortHrule {\omit \!ttGetHalfRuleThickness \ifx\tablecurrenthrulecolor\empty\else \switchtocolor[\tablecurrenthrulecolor]% see *DL* \fi \leaders\hrule\s!height\scratchdimen\s!depth\scratchdimen\hfill \emptyhbox \ignorespaces} \def\donormaltablelongrule % was: \!ttLongHrule {\omit\span \omit\span \donormaltableshortrule} \def\!ttGetHalfRuleThickness {\scratchdimen\dimexpr \ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablehrulethicknessfactor \else \!tgValue % user-specified integer \fi \tablelinethicknessunit \else \!tgValue % user-specified dimension \fi \divide\scratchdimen\plustwo} % \emptyhbox prevents \unskip \def\dotableLeft #1{#1\hfill\emptyhbox} \def\dotableCenter#1{\hfill#1\hfill\emptyhbox} \def\dotableRight #1{\hfill#1} \def\dotableOpenUp#1#2% {\edef\tablestrutheightfactor{\withoutpt\the\dimexpr\tablestrutheightfactor\points+#1\points}% \edef\tablestrutdepthfactor {\withoutpt\the\dimexpr\tablestrutdepthfactor \points+#2\points}} % SetTableToWidth -> textwidth=dimension [to dimension] % Expand -> textwidth=max [to \hsize] % WidenTableBy -> [spread #1] % \tablelefttabskip\zeropoint\s!plus1\s!fill % \tablerighttabskip\tablelefttabskip % LongLines -> [spread \hsize] \def\dotableJustLeft {\omit\let\!ttRightGlue\hfill} \def\dotableJustCenter{\omit\hfill\emptyhbox\let\!ttRightGlue\hfill} \def\dotableJustRight {\omit\hfill\emptyhbox} \def\dotableSmash {\relax \ifmmode \expandafter\mathpalette \expandafter\!thDoMathVCS \else \expandafter\!thDoVCS \fi} \def\!thDoVCS#1% {\setbox\zerocount\hbox{#1}% \!thFinishVCS} \def\!thDoMathVCS#1#2% {\setbox\zerocount\hbox{$\mathsurround\zeropoint#1{#2}$}% \!thFinishVCS} \def\!thFinishVCS {\vbox to\zeropoint{\vss\box\zerocount\vss}} \def\dotableRaise {\def\!thSign{+}% \!tgGetValue\!thSetDimen} \def\dotableLower {\def\!thSign{-}% \!tgGetValue\!thSetDimen} \def\!thSetDimen {\ifnum\!tgCode=\plusone \ifx\!tgValue\empty \!taDimenA\tablestrutheightfactor\tablestrutunit \advance\!taDimenA\tablestrutdepthfactor\tablestrutunit \divide\!taDimenA\plustwo \else \!taDimenA\!tgValue\tablestrutunit \fi \else \!taDimenA\!tgValue \fi \!taDimenA\!thSign\!taDimenA\relax \ifmmode \expandafter\mathpalette \expandafter\!thDoMathRaise \else \expandafter\!thDoSimpleRaise \fi} \def\!thDoSimpleRaise#1% {\setbox\zerocount\hbox{\raise \!taDimenA\hbox{#1}}% \!thFinishRaise} % From Plain TeX: \ht0=0pt \dp0=0pt \box0 \def\!thDoMathRaise#1#2% {\setbox\zerocount\hbox{\raise \!taDimenA\hbox{$\mathsurround\zeropoint#1{#2}$}}% \!thFinishRaise} \def\!thFinishRaise {\ht\zerocount\zeropoint \dp\zerocount\zeropoint \box\zerocount} \def\dotableBackSpace {\!tgGetValue\!thKernBack} \def\!thKernBack {\kern - \ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablekernfactor \else \!tgValue % user-specified integer \fi \tablekernunit \else \!tgValue % user-specified dimension \fi \ignorespaces} \def\dotableVspace {\noalign \bgroup \!tgGetValue\!thVspace} \def\!thVspace {\vskip \ifnum\!tgCode=\plusone \ifx\!tgValue\empty \tablevspacefactor \else \!tgValue % user-specified integer \fi \tablestrutunit \else \!tgValue % user-specified skip \fi \egroup} % Ends the \noalign \appendtoks \let\JustLeft \dotableJustLeft \let\JustCenter \dotableJustCenter \let\JustRight \dotableJustRight \let\Smash \dotableSmash \let\Raise \dotableRaise \let\Lower \dotableLower \let\BackSpace \dotableBackSpace \let\Vspace \dotableVspace \let\OpenUp \dotableOpenUp \let\TableLeft \dotableLeft \let\TableCenter \dotableCenter \let\TableRight \dotableRight \to \everytable %D \macros %D {inintable, ifsplittables} %D %D First we declare some variables. These show a bit what we %D are dealing with. First we introdoce some booleans that %D enable us, inside as well as outside this module, to %D determine in what mode we are. \newif\ifintable \newif\ifsplittables %D We show this feature in an example that also shows some of %D the basic table typesetting commands. %D %D \startbuffer %D \starttable[|||] %D \HL %D \VL first \VL second \VL\AR %D \HL %D \VL alfa \VL 1 \VL\AR %D \VL beta \VL 2 \VL\AR %D \VL gamma \VL 3 \VL\AR %D \HL %D \stoptable %D \stopbuffer %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D This table is specified as: %D %D \typebuffer %D %D This examples shows about the minimum of commands needed to %D typeset such a table. In this table, the \type {\AR} is %D automatically translated into the more primitive (but more %D verbose) commands \type {\SR}, \type {\FR}, \type {\MR} and %D \type {\LR} commands. %D %D \startbuffer %D \starttables[|||] %D \HL %D \VL first \VL second \VL\AR %D \HL %D \VL alfa \VL 1 \VL\AR %D \VL beta \VL 2 \VL\AR %D \VL gamma \VL 3 \VL\AR %D \HL %D \stoptables %D \stopbuffer %D %D \getbuffer %D %D Some simple color support is provided: %D %D \startbuffer %D \starttable[|c|c|] %D \HL %D \VL test \VL test \VL \SR %D \HL[green,5] %D \VL[red] test \VL test \VL \FR %D \VL test \VL[10,red] test \VL \MR %D \VL test \VL test \VL[10] \LR %D \HL %D \stoptable %D \stopbuffer %D %D \typebuffer \getbuffer \installcorenamespace{tabletemplate} \def\m!TABLE{TABLE} %D We already saw that the table macros report errors and %D provide automatic spacing. These features can only be %D implemented by keeping track of the state, often the last %D command on a row. \newconstant\tableforcestate \newconstant\tableactionstate \setnewconstant\tableunknownstate 0 \setnewconstant\tableseparaterowstate 1 \setnewconstant\tablefirstrowstate 2 \setnewconstant\tablemidrowstate 3 \setnewconstant\tablelastrowstate 4 \setnewconstant\tablerulestate 5 %setnewconstant\tableskipstate 6 %setnewconstant\tableautorowstate 7 \setnewconstant\tableforcefirstrowstate 1 \setnewconstant\tableforcelastrowstate 2 \newconstant\tablerowfactor \newconstant\TABLEendofrowdepth \newconstant\TABLEendofrowheight \newconstant\TABLEcr \newconstant\tablerowzero \newconstant\TABLEn %D We store these states using \type {constants}'s and %D like most variables, these are global ones. When needed, %D especially when we flush the backgrounds, we can temporary %D disable the assignment. \newconditional\tableactionstatepermitted \def\dosettableaction#1{\ifconditional\tableactionstatepermitted\global\tableactionstate#1\fi} \def\dosettableforce #1{\ifconditional\tableactionstatepermitted\global\tableforcestate #1\fi} %D To give an impression of what the (well documented) source %D of \TABLE\ looks like, we first implement an alternative for %D the numeric keys. The quantity keys (\type{q} and \type{Q}) %D support the more european way of writing numbers: %D %D \startnarrower %D 100.000.000,00 instead of 100,000,000.00 %D \stopnarrower %D %D The next table shows how to use these keys. We use braces %D instead of brackets because we need brackets to specify the %D format. %D %D \starttyping %D \starttable{|q[00,000]|Q[00,00]|} %D \HL %D \VL -1,2 \VL 12,35 \VL\FR %D \VL 11,203 \VL 2,4 \VL\LR %D \HL %D \stoptable %D \stoptyping %D %D Although a more efficient implementation is possible |<|we %D can for instance share common macros|>| we just adapt a copy %D of the numeric ones. To permit double loading of this %D module, we check for the existence of one of the macros. %D To be compatible with the tabulate environment, we also %D support the \type {l}, \type {c} and \type {r} keys for %D paragraph entries. %D All commands that are executed between rows are to be put in %D \type {\noalign}. We can however not verify if we (that is %D \TABLE) does or did not enter this mode. A moderate dirty %D but useful trick is using our own alternative:\footnote{Once %D one has entered the stage of redefining \TEX\ primitives, %D such hacks become a second nature. However, redefining \type %D {\omit} and \type{\span} is not that easy.} \def\tablenoalign {\noalign \bgroup \let\noalign\relax \let\tablenoalign\relax \let\next=} \def\starttablenoalign {\tablenoalign\bgroup} \let\stoptablenoalign\egroup %D \macros %D {starttable} %D %D The rest of this module is not easy to comprehend, mainly %D because we have to take care of: %D %D \startitemize[packed] %D \item \type{\startitemize[template]} %D \item \type{\startitemize{template}} %D \item \type{\startitemize[predefined]} %D \stopitemize %D %D as well as: %D %D \startitemize[continue] %D \item restart after table break %D \stopitemize %D %D The official specification of the start command is: %D %D \showsetup{starttable} \newconditional\tablerepeathead \newconditional\tablerepeattail \unexpanded\def\starttable {\bgroup \dodoubleempty\dostarttable} \unexpanded\def\dostarttable[#1][#2]% preamble optional-settings {\ifsecondargument \setupcurrenttables[#2]% \fi \let\stoptable\dostoptable \edef\p_tabl_table_split{\directtablesparameter\c!split}% \edef\p_tabl_table_frame{\directtablesparameter\c!frame}% \ifx\p_tabl_table_split\v!auto \ifinsidesplitfloat \let\p_tabl_table_split\v!yes \lettablesparameter\c!split\v!yes % might be used later, best make a proper mode \fi \fi \ifx\p_tabl_table_split\v!yes \def\stoptable{\dostoptables\egroup}% not \unexpanded as we look ahead \expandafter\starttables \else\ifx\p_tabl_table_split\v!repeat \def\stoptable{\dostoptables\egroup}% not \unexpanded as we look ahead \doubleexpandafter\starttables \else \ifx\p_tabl_table_frame\empty \ifinsidefloat\else\startbaselinecorrection\fi \else \startframedcontent[\p_tabl_table_frame]% \fi \postponenotes \doubleexpandafter\firststagestarttable \fi\fi [#1]} % We cannot define \unexpanded\def\dostoptable a ssomehow lookahead % in alignments fail then, so we relax it and define it locally. \let\stoptable\relax \def\dostoptable {\dochucktableautorow % before the tail, else noalign problem \doinserttabletail \starttablenoalign \global\let\dotablehead\empty \global\let\dotabletail\empty \stoptablenoalign \dofinishtable \ifx\p_tabl_table_frame\empty \ifinsidefloat\else \stopbaselinecorrection \goodbreak % compensates all the nobreaks \fi \else \stopframedcontent \fi \egroup} %D Before we can grab the argument, we have to make sure that %D the \CATCODES\ are set. The first stage takes care of that. \def\firststagestarttable {\bgroup \global\intabletrue \secondstagestarttable} %D \macros %D {definetabletemplate} %D %D The complex (and main) start macro first takes care of the %D predefined case. Such a predefined setup looks like: %D %D \starttyping %D \definetabletemplate[test][|||] %D %D \starttable[test] %D \VL test \VL test \VL\AR %D \VL test \VL test \VL\AR %D \VL test \VL test \VL\AR %D \stoptable %D \stoptyping %D %D The implementation of the definition macro is not that %D complicated: \installcorenamespace{tablehead} \installcorenamespace{tabletail} \unexpanded\def\definetabletemplate % to be redone {\bgroup \catcode\barasciicode\othercatcode \doquadrupleempty\dodefinetabletemplate} \def\dodefinetabletemplate[#1][#2][#3][#4]% {\ifsecondargument \setgvalue{\??tabletemplate#1}{\dousetabletemplate{#2}{#3}{#4}}% \fi \egroup} \def\dousetabletemplate#1#2#3% {\gdef\dotablehead{\executeifdefined{\??tablehead#2}\empty}% \gdef\dotabletail{\executeifdefined{\??tabletail#3}\empty}% \secondstagestarttable[#1]} %D The optional third and fourth arguments define which table %D head and tail to use. %D %D \starttyping %D \definetabletemplate[test][|||][before][after] %D \stoptyping %D %D This also means that one can define table heads and tails %D by name! %D %D \starttyping %D \starttablehead[before] %D \HL \VL first \VL second \VL \SR \HL %D \stoptablehead %D \stoptyping %D %D Templates defined this way get protected names, that cannot %D conflict with existing commands. %D %D \showsetup{definetabletemplate} %D %D The second half of the next macro prepares table %D splitting. \def\doinserttablehead {\starttablenoalign \global\settrue\preventtablebreak \global\setfalse\hassometablehead \stoptablenoalign \dotablehead \starttablenoalign \global\setfalse\preventtablebreak \stoptablenoalign} \def\doinserttabletail {\starttablenoalign \global\settrue\preventtablebreak \global\setfalse\hassometabletail \stoptablenoalign \dotabletail \starttablenoalign \global\setfalse\preventtablebreak \stoptablenoalign} % \def\doverysimpletableHL % todo % {\starttablenoalign % \normalexpanded{\noexpand\donormaltablefullrule\m_tabl_table_HLheight}% % \stoptablenoalign} \def\dorestarttable#1% {\gdef\restarttable{#1}% \restarttable % \starttablenoalign % \globalpushmacro\simpletableHL % \global\let\simpletableHL\doverysimpletableHL % \stoptablenoalign \doinserttablehead \ifsplittables \ifconditional \tablerepeattail \tablenoalign{\goodbreak}% \doinserttabletail \tablenoalign{\goodbreak}% \fi \fi % \starttablenoalign % \globalpopmacro\simpletableHL % \stoptablenoalign } \bgroup \catcode\barasciicode\othercatcode \gdef\secondstagestarttable[#1]% brr nested mess {\bgroup \@@useotherbar \global\setfalse\tableactionstatepermitted \global\setfalse\hassometablehead \global\setfalse\hassometabletail \expanded{\doifinstringelse{|}{#1}} {\xdef\restarttable{\noexpand\dorestarttable{\noexpand\thirdstagestarttable{#1}}}} {\doifdefinedelse{\??tabletemplate#1} {\gdef\restarttable{\getvalue{\??tabletemplate#1}}} {\gdef\restarttable{\dorestarttable{\getvalue{#1}}}}}% \egroup \restarttable} \egroup %D The third stage involves a lot of (re)sets, which we will %D explain later. \appendtoks \fixedspaces \let\_\normalunderscore \to \everytable %D Now we can start the table. \newtoks \localtabledefinitions \def\thirdstagestarttable#1% {\global\settrue\tableactionstatepermitted \dosettableaction\tableunknownstate \dosettableforce\tableunknownstate \dotableresetVLvalues \appendtoks\dolocaltablesetup\to\everytable \dotablestandardbegin[\ifsplittables u\else b\fi]% \the\localtabledefinitions \forgetall % added \edef\currenttableformat{#1}% \doifsomething\currenttableformat {\dogettablenofcolumns\currenttableformat % more modern is to use catcode tables \expandafter\dobegintableformat\currenttableformat\doendtableformat}} \def\dofinishtable {\dochucktableautorow \unskip\crcr \dotablenormalend \global\intablefalse \egroup} %D \macros %D {starttables} %D %D Split tables are specified using the plural form of the %D start and stop commands. %D %D \showsetup{starttables} %D %D For example: %D %D \starttyping %D \starttables[|||] %D \HL %D \VL element \VL atom weight \VL\AR %D \HL %D \VL ....... \VL ........... \VL\AR %D \VL ....... \VL ........... \VL\AR %D \HL %D \stoptables %D \stoptyping \newbox\tablecontentbox \unexpanded\def\starttables {\bgroup \let\stoptables\dostoptables \splittablestrue \edef\p_tabl_table_split{\directtablesparameter\c!split}% \ifx\p_tabl_table_split\v!repeat \settrue\tablerepeathead \settrue\tablerepeattail \else \setfalse\tablerepeathead \setfalse\tablerepeattail \fi \flushnotes \setbox\tablecontentbox\vbox\bgroup \forgetall \firststagestarttable} \let\stoptables\relax % needed for \noalign \def\dostoptables % not \unexpanded as we need the lookahead (brrr) {\dochucktableautorow % AM: before the tail, else noalign problem \ifconditional\tablerepeattail\else\doinserttabletail\fi \dofinishtable \egroup \dontcomplain \dosplittablebox\tablecontentbox \global\let\dotablehead\empty % new here \global\let\dotabletail\empty % new here \flushnotes \egroup} \def\dosplittablebox#1% {\resettsplit \def\tsplitminimumfreelines{2}% \def\tsplitminimumfreespace{\zeropoint}% \setbox\tsplitcontent\box#1% \ifconditional\tablerepeathead \ifconditional\hassometablehead \setbox\tsplithead\vsplit\tsplitcontent to \lineheight \setbox\tsplithead\vbox{\unvbox\tsplithead}% \fi \fi \ifconditional\tablerepeattail \ifconditional\hassometabletail \setbox\tsplittail\vsplit\tsplitcontent to \lineheight \setbox\tsplittail\vbox{\unvbox\tsplittail}% \fi \fi \ifinsidefloat\else \def\tsplitbeforeresult{\startbaselinecorrection}% \def\tsplitafterresult {\stopbaselinecorrection}% \fi \handletsplit} %D When the table in the previous example is split across %D pages, only the first gets a head. We could have said %D something like: %D %D \starttyping %D \starttablehead %D \HL %D \VL element \VL atom weight \VL\AR %D \HL %D \stoptablehead %D %D \starttabletail %D \HL %D \stoptabletail %D %D \starttables[|||] %D \VL ....... \VL ........... \VL\AR %D \VL ....... \VL ........... \VL\AR %D \stoptables %D \stoptyping %D %D This time each split table gets a head line and ends with %D a rule. Keep in mind that such heads also apply to the %D unbroken ones and should be defined local (grouped) if %D needed. The rather complicated definition below is due to %D the fact that the stopcondition is interface language %D dependant. \let\dotablehead\empty % needs checking \let\dotabletail\empty % needs checking \letvalue{\e!start\v!tablehead}\relax \letvalue{\e!stop \v!tablehead}\relax \letvalue{\e!start\v!tabletail}\relax \letvalue{\e!stop \v!tabletail}\relax %D The second argument is a dummy one, by scanning for it, we %D get rid of interfering spaces. \newconditional\preventtablebreak \newconditional\hassometablehead \newconditional\hassometabletail \unexpanded\def\settablehead{\dodoubleempty\dosettablehead} \unexpanded\def\settabletail{\dodoubleempty\dosettabletail} % \def\dosettablehead[#1][#2]#3\end{\setvalue{\??tablehead#1}{\tablenoalign{\global\settrue\hassometablehead}#3}} % \def\dosettabletail[#1][#2]#3\end{\setvalue{\??tabletail#1}{\tablenoalign{\global\settrue\hassometabletail}#3}} \def\dosettablehead[#1][#2]#3\end {\gdef\dotablehead{\executeifdefined{\??tablehead#1}\empty}% new \setvalue{\??tablehead#1}{\tablenoalign{\global\settrue\hassometablehead}#3}} \def\dosettabletail[#1][#2]#3\end {\gdef\dotabletail{\executeifdefined{\??tabletail#1}\empty}% new \setvalue{\??tabletail#1}{\tablenoalign{\global\settrue\hassometabletail}#3}} \normalexpanded {\def\csname\e!start\v!tablehead\endcsname#1\csname\e!stop\v!tablehead\endcsname% {\settablehead#1\noexpand\end}} \normalexpanded {\def\csname\e!start\v!tabletail\endcsname#1\csname\e!stop\v!tabletail\endcsname% {\settabletail#1\noexpand\end}} %D Redundant \type{\HL}'s are removed automatically, so %D mid||lines can be used without problems. %D The order of the next macros is more or less random. First %D we implement error recovery. Errors are reported to the %D screen and log file as well as visualized in the table in %D teletype. \def\dofinishtablerow {\crcr \starttablenoalign \nobreak \dosettableaction\tableunknownstate \globalletempty\dochecktableautorow \globalletempty\dochucktableautorow \global\currenttablecolumn\zerocount \stoptablenoalign} %D Next we enter the more complicated area of column and row %D switching. I won't go into much detail from now on, but just %D mention the general principles. %D %D \startitemize[3*ruim] %D \sym{\type{\SR}} end a separate row (between rules) %D \sym{\type{\FR}} end a first row (after a rule) %D \sym{\type{\MR}} end a mid row (between text lines) %D \sym{\type{\LR}} end a last row (before a rule) %D \stopitemize %D %D and best of all: %D %D \startitemize[continue] %D \sym{\type{\AR}} end a row with automatic spacing %D \stopitemize %D %D As far as possible, we report confusing situations. In %D most cases one can use \type{\AR}, which transfigurates %D itself into one of the other types. %D %D \starttyping %D \starttable[||] %D \HL %D \VL a separate row \VL\SR %D \HL %D \VL a first row \VL\FR %D \VL a mid row \VL\MR %D \VL a last row \VL\LR %D \HL %D \stoptable %D \stoptyping %D %D In this example we could have used \type{\AR} without %D problems. %D %D Color or gray scale backgrounds precede the content. They %D are passed over horizontal (division) lines when needed. %D Errors in the color template are traced elsewhere. Here we %D only check for inconsistent spacing. Due to the way \TEX\ %D handles alignments, we cannot automate spacing for colored %D rows and columns. \setnewconstant\tablerowzero\zerocount \appendtoks \let\SR\dotableSR \let\FR\dotableFR \let\MR\dotableMR \let\LR\dotableLR \let\AR\dotableAR \to \localtabledefinitions \unexpanded\def\dotableSR {\ifnum\tableactionstate=\tablefirstrowstate \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}% \else\ifnum\tableactionstate=\tablemidrowstate \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}% \else\ifnum\tableactionstate=\tablemidrowstate \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}% \fi\fi\fi \doendtablerow\tableseparaterowstate\tablerowfactor\tablerowfactor} \unexpanded\def\dotableFR {\ifnum\tableactionstate=\tablemidrowstate \writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}% \else\ifnum\tableactionstate=\tablelastrowstate \writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}% \fi\fi \doendtablerow\tablefirstrowstate\tablerowfactor\tablerowzero} \unexpanded\def\dotableMR {\ifnum\tableactionstate=\tablerulestate \writestatus\m!TABLE{change \string\MR\space into \string\FR/\string\SR}% \else\ifnum\tableactionstate=\tablelastrowstate \writestatus\m!TABLE{change \string\MR\space into \string\FR}% \fi\fi \doendtablerow\tablemidrowstate00} \unexpanded\def\dotableLR {\ifnum\tableactionstate=\tablerulestate \writestatus\m!TABLE{change \string\LR\space into \string\FR/\string\SR}% \fi \doendtablerow\tablelastrowstate\tablerowzero\tablerowfactor} %D \macros %D {ifcheckTABLEcolums} %D %D %D The next macros handle the actual row ending. This macro %D also take care of space corrections due to table splitting %D when \type{\MR} and collegues are used. When tracing is %D enabled, the corrections as well as the values used to %D determine the available space are shown (in color). By default %D checking is off. \def\doendtablerow#1#2#3% {\dosettableaction#1% \ifcase#1\relax % unknown \or \doendoftableline\SR\SR\tablerowfactor\tablerowfactor \or \doendoftableline\FR\FR\tablerowfactor\tablerowzero \or\ifnum\tableforcestate=\tableforcelastrowstate \doendoftableline\MR\LR\tablerowzero\tablerowfactor \else\ifnum\tableforcestate=\tableforcefirstrowstate \doendoftableline\MR\FR\tablerowfactor\tablerowzero \else \doendoftableline\MR\MR\tablerowzero\tablerowzero \fi\fi\or \doendoftableline\LR\LR\tablerowzero\tablerowfactor \fi \starttablenoalign \dosettableforce\tableunknownstate \global\currenttablecolumn\zerocount \ifconditional\preventtablebreak \nobreak \else \goodbreak \fi \stoptablenoalign} %D Handling \type{\AR} is postponed till the next row. The %D check takes care of the first and mid rows, the chuck macro %D |<|how about that name|>| handles the last row. \unexpanded\def\dotableAR {\globallet\dochecktableautorow\dodochecktableautorow \globallet\dochucktableautorow\dodochucktableautorow} \let\dochecktableautorow\empty \let\dochucktableautorow\empty \def\dodochecktableautorow {\globallet\dochecktableautorow\empty \ifnum\tableactionstate=\tablerulestate \FR\else \ifnum\tableactionstate=\tableunknownstate\FR\else \MR\fi\fi} \def\dodochucktableautorow {\globalletempty\dochecktableautorow \globalletempty\dochucktableautorow \ifnum\tableactionstate=\tablerulestate \SR\else \ifnum\tableactionstate=\tableunknownstate\SR\else \LR\fi\fi} %D When a table is split, we also add a tail and when present %D we repeat the table head. %D When tables are split, the spacing before and after a %D horizontal rule is corrected according to what we expect. \def\doendoftableline#1#2#3#4% {\ifx#1#2\else \writestatus\m!TABLE{\string#1\space changed into \string#2}% \fi \expandafter\donormaltablelineformat#3#4\crcr % \crcr nodig ? \tablenoalign{\nobreak\global\settrue\tableactionstatepermitted}} %D In order to prevent (as good as possible) alignment overflow %D and therefore \TEX\ error messages, we check the maximum %D number of columns. We keep track of the current column and %D maximum column by means of two \COUNTERS. Keep in mind that %D the number of \type{|}'s and \type{\VL}'s or alike is always %D one more than the number of columns. \newcount\currenttablecolumn %D While defining this macro we change the \CATCODE\ of %D \type{|}. When counting the bars, we use a non active %D representation of the bar, simply because we cannot be sure %D if the bar is active or not.\footnote{Normally it is, but %D \TABLE\ changes the catcode when needed.} \bgroup \catcode\barasciicode\othercatcode \gdef\@@otherbar {|} \catcode\barasciicode\activecatcode \gdef\@@useotherbar {\let|\@@otherbar} \egroup \bgroup \catcode\barasciicode\othercatcode \gdef\dogettablenofcolumns#1% todo: also divert this to lua as with tabulate {\bgroup \cleanupfeatures % needed ! \@@useotherbar \egroup} \egroup %D \startitemize[3*ruim] %D \sym{\type{\VL}} a vertical line %D \sym{\type{\VC}} a vertical colored line %D \sym{\type{\HL}} a horizontal line %D \sym{\type{\HC}} a horizontal colored line %D \stopitemize \newcount\tablevrulethicknessfactor \newcount\tablehrulethicknessfactor \newcount\tabledrulespan \let \tablecurrentvrulecolor \empty \let \tablecurrenthrulecolor \empty \appendtoks \let\VL\dotableVL \let\VC\dotableVC \let\HL\dotableHL \let\HC\dotableHC \let\VS\dotableVS \let\VD\dotableVD \let\VT\dotableVT \let\VN\dotableVN \to \localtabledefinitions \def\dotableresetVLvalues {\global\currenttablecolumn\zerocount} \def\dotablevrulecommand#1% global assignments {\doifnumberelse{#1} {\global\tablevrulethicknessfactor#1\relax \global\multiply\tablevrulethicknessfactor\m_tabl_table_VLwidth\relax} {\xdef\tablecurrentvrulecolor{#1}}} \unexpanded\def\dotableVL {\dochecktableautorow \global\advance\currenttablecolumn\plusone \dosingleempty\dodotableVL} \def\dodotableVL[#1]% {\global\let\tablecurrentvrulecolor\empty \global\tablevrulethicknessfactor\m_tabl_table_VLwidth\relax \iffirstargument \rawprocesscommalist[#1]\dotablevrulecommand \fi \donormaltablecomplexbar}% \relax breaks \use \let\dotableVC\dotableVL % for mojca % \starttable[|||] % \HL % \VL test \VS test \VL \FR % \VL test \VD test \VL \MR % \VL test \VT test \VL \LR % \HL % \stoptable \unexpanded\def\dotableVS {\VN1} \unexpanded\def\dotableVD {\VN2} \unexpanded\def\dotableVT {\VN3} \unexpanded\def\dotableVN#1{\global\noftablevrules#1\relax\VL} \def\dotablehrulecommand#1% global assignments {\doifnumberelse{#1} {\global\tablehrulethicknessfactor#1\relax \global\multiply\tablehrulethicknessfactor\m_tabl_table_HLheight\relax} {\xdef\tablecurrenthrulecolor{#1}}} \unexpanded\def\dotableHL {\dochucktableautorow \dofinishtablerow \starttablenoalign \dosingleempty\dodotableHL} \def\dodotableHL[#1]% {\nobreak \ifnum\tableactionstate=\tablerulestate \writestatus\m!TABLE{skipping \string\HL}% \statusmessage \else \ifnum\tableactionstate=\tablemidrowstate \writestatus\m!TABLE{change \string\MR\space into \string\LR/\string\SR}% \else\ifnum\tableactionstate=\tablefirstrowstate \writestatus\m!TABLE{change \string\MR\space into \string\SR}% \fi\fi \bgroup \global\tablehrulethicknessfactor\m_tabl_table_HLheight\relax \iffirstargument \global\let\tablecurrenthrulecolor\empty \rawprocesscommalist[#1]\dotablehrulecommand \ifx\tablecurrenthrulecolor\empty\else \switchtocolor[\tablecurrenthrulecolor]% \fi \fi \donormaltablefullrule \egroup \doaccounttablelinewidth \fi \dosettableaction\tablerulestate \nobreak \stoptablenoalign} \let\dotableHC\dotableHL % for mojca %D \startitemize[3*ruim] %D \sym{\type{\NL}} a vertical skip %D \sym{\type{\NR}} goto the next row %D \sym{\type{\NC}} goto the next column %D \sym{\type{\FC}} a first column %D \sym{\type{\MC}} a mid column %D \sym{\type{\LC}} a last column %D \stopitemize % \starttable[|||] % \VL text \VL text \VL \AR % \TB[small] % \VL text \VL text \VL \AR % \TB[4*big] % \VL text \VL text \VL \AR % \stoptable % n+1 uitleggen \appendtoks \let\TB\dotableTB \let\NL\dotableNL % old \let\NR\dotableNR \let\NC\dotableNC \let\FC\dotableNC \let\MC\dotableNC \let\LC\dotableNC \to \localtabledefinitions \unexpanded\def\dotableTB {\dochucktableautorow \dofinishtablerow \starttablenoalign \dosingleempty\dodotableTB} \def\dodotableTB[#1]% {\blank[\iffirstargument#1\else\directtablesparameter\c!NL\fi]% \nobreak \stoptablenoalign} \let\dotableNL\dotableTB \unexpanded\def\dotableNR {\global\currenttablecolumn\zerocount \donormaltablelineending \starttablenoalign \nobreak \dosettableaction\tableunknownstate \stoptablenoalign} \unexpanded\def\dotableNC {\dochecktableautorow \global\advance\currenttablecolumn \plusone \donormaltablenobar} %D \startitemize[3*broad] %D \sym{\type{\DL}} %D \sym{\type{\DV}} (\type{\VD}) %D \sym{\type{\DC}} %D \sym{\type{\DR}} %D \stopitemize \newconditional\istabledivision \appendtoks \global\setfalse\istabledivision \let\DL\dotableDL \let\DC\dotableDC \let\DV\dotableDV \let\DR\dotableDR \to \localtabledefinitions \def\dochecktabledivision {\ifconditional\istabledivision\else \dochucktableautorow \global\currenttablecolumn\zerocount \global\settrue\istabledivision \fi} \def\dotabledrulecommand#1% global assignments {\doifnumberelse{#1} {\ifcase\tabledrulespan \global\tabledrulespan#1\relax \else \global\tablehrulethicknessfactor#1\relax \global\multiply\tablehrulethicknessfactor\m_tabl_table_VLwidth\relax \fi} {\xdef\tablecurrenthrulecolor{#1}}} \unexpanded\def\dotableDL {\dochecktabledivision \dosingleempty\dodotableDL} \def\dodotableDL[#1]% {\ifnum\tableactionstate=\tablerulestate \writestatus\m!TABLE{skipping \string\DL}% \else \ifnum\tableactionstate=\tablemidrowstate \writestatus\m!TABLE{change \string\MR\space into \string\LR/\string\SR}% \else\ifnum\tableactionstate=\tablefirstrowstate \writestatus\m!TABLE{change \string\MR\space into \string\SR}% \fi\fi \dosettableaction\tableunknownstate \global\tablehrulethicknessfactor\m_tabl_table_HLheight\relax \global\tabledrulespan\zerocount \iffirstargument \global\let\tablecurrenthrulecolor\empty \rawprocesscommalist[#1]\dotabledrulecommand % \ifx\tablecurrenthrulecolor\empty\else % \switchtocolor[\tablecurrenthrulecolor]% see *DL* % \fi \fi \ifcase\tabledrulespan \global\advance\currenttablecolumn \plusone \donormaltablesinglerule \or \global\advance\currenttablecolumn \plustwo \donormaltablesinglerule \else \global\advance\currenttablecolumn \plusone \donormaltablemultirule \fi \fi} \unexpanded\def\dotableDV {\dotableDCV\donormaltablesimplebar} \unexpanded\def\dotableDC {\dotableDCV\donormaltablenobar} \unexpanded\def\dotableDCV#1% {\dochecktabledivision \dochecktableautorow \global\advance\currenttablecolumn \plusone #1} \unexpanded\def\dotableDR {\global\currenttablecolumn\zerocount % nog check \donormaltablelineending \starttablenoalign \nobreak \global\setfalse\istabledivision \doaccounttablelinewidth % temporary solution \dosettableaction\tablerulestate \stoptablenoalign} \def\doaccounttablelinewidth {\scratchdimen\tablelinethicknessunit} \def\dotableTWO {\use\plustwo} \def\dotableTHREE {\use\plusthree} \def\dotableFOUR {\use\plusfour} \def\dotableFIVE {\use\plusfive} \def\dotableSIX {\use\plussix} \appendtoks \let\TWO \dotableTWO \let\THREE\dotableTHREE \let\FOUR \dotableFOUR \let\FIVE \dotableFIVE \let\SIX \dotableSIX \let\SPAN \use \let\REF \dotablereformat \to \localtabledefinitions \installcorenamespace{tables} \installcorenamespace{tabledistance} \installcorenamespace{tablealign} \installsetuponlycommandhandler \??tables {tables} % some day we can have named tables \setvalue{\??tabledistance\v!none }{\dotableOpenUp00\def\LOW{\Lower6 }} \setvalue{\??tabledistance\v!small }{\dotableOpenUp00\def\LOW{\Lower6 }} % == baseline \setvalue{\??tabledistance\v!medium}{\dotableOpenUp11\def\LOW{\Lower7 }} \setvalue{\??tabledistance\v!big }{\dotableOpenUp22\def\LOW{\Lower8 }} \appendtoks \expandnamespaceparameter\??tabledistance\directtablesparameter\c!distance\v!medium \to \localtabledefinitions \setvalue{\??tablealign\v!right }{\def\dotableparalignment{\raggedright}} \setvalue{\??tablealign\v!left }{\def\dotableparalignment{\raggedleft}} \setvalue{\??tablealign\v!middle }{\def\dotableparalignment{\raggedcenter}} \setvalue{\??tablealign\s!unknown}{\def\dotableparalignment{\notragged}} \appendtoks \doifelse{\directtablesparameter\c!distance}\v!none {\tablerowfactor\zerocount} {\tablerowfactor\plustwo }% \to \localtabledefinitions \def\dohandlebar % here ? {\ifmmode \@EA\domathmodebar \else\ifintable \@EAEAEA\domathmodebar \else \@EAEAEA\dotextmodebar \fi\fi} \appendtoks \expandnamespaceparameter\??tablealign\directtablesparameter\c!align\s!unknown \assignalfadimension{\directtablesparameter\c!VL}\m_tabl_table_VLwidth 246% \assignalfadimension{\directtablesparameter\c!HL}\m_tabl_table_HLheight246% \to \everysetuptables \def\dolocaltablesetup {\directtablesparameter\c!commands\relax \doifsomething{\directtablesparameter\c!bodyfont}{\switchtobodyfont[\directtablesparameter\c!bodyfont]}% \tablelinethicknessunit\dimexpr\directtablesparameter\c!rulethickness/\tablelinethicknessfactor\relax \edef\p_tabl_table_height{\directtablesparameter\c!height}% \edef\p_tabl_table_depth{\directtablesparameter\c!depth}% \ifx\p_tabl_table_height\v!strut \let\tablestrutheightfactor\tablestrutheightfactor \else \let\tablestrutheightfactor\p_tabl_table_height \fi \ifx\p_tabl_table_depth\v!strut \let\tablestrutdepthfactor\tablestrutdepthfactor \else \let\tablestrutdepthfactor\p_tabl_table_depth \fi \edef\tablestrutheightfactor{\withoutpt\the\dimexpr10\dimexpr\tablestrutheightfactor\points}% \edef\tablestrutdepthfactor {\withoutpt\the\dimexpr10\dimexpr\tablestrutdepthfactor \points}% \tablestrutunit\dimexpr\normalbaselineskip/12\relax % 12 is default bodyfont \tableintercolumnspaceunit.5em plus 1fil minus .25em\relax \tablecolumnwidthunit .5em\relax \tablekernunit .5em\relax} %D As one can see, we didn't only add color, but also more %D control over spacing. %D %D \startbuffer[a] %D \starttable[|c|] %D \HL %D \VL \strut test \VL \FR %D \VL \strut test \VL \MR %D \VL \strut test \VL \MR %D \VL \strut test \VL \LR %D \HL %D \stoptable %D \stopbuffer %D %D \startbuffer[b] %D \starttabulate[|c|] %D \HL %D \NC test \NC \NR %D \NC test \NC \NR %D \NC test \NC \NR %D \NC test \NC \NR %D \HL %D \stoptabulate %D \stopbuffer %D %D In the next example, the first table is defined as: %D %D \typebuffer[a] %D %D and the second one as: %D %D \typebuffer[b] %D %D The first table is typeset using the default height and %D depth factors .8 and .4. The second table has both factors %D set to \type {strut}, and the third table shows what %D happens when we set the values to zero. The rightmost table %D is typeset using the tabulate environment. %D %D \startcombination[4*1] %D {$\vcenter{\getbuffer[a]}$} %D {\hbox{h=.8 d=.4}} %D {\setuptables[height=strut,depth=strut]$\vcenter{\getbuffer[a]}$} %D {\hbox{h=d=\type{strut}}} %D {\setuptables[height=0,depth=0]$\vcenter{\getbuffer[a]}$} %D {\hbox{h=d=0}} %D {$\vcenter{\getbuffer[b]}$} %D {\hbox{tabulate}} %D \stopcombination \setuptables [\c!HL=\v!medium, \c!VL=\v!medium, \c!NL=\v!small, \c!frame=, \c!align=\v!right, \c!depth=.40, % \v!strut \c!height=.80, % \v!strut \c!textwidth=, \c!rulethickness=\linewidth, \c!rulecolor=, \c!distance=\v!medium, \c!bodyfont=, \c!commands=, \c!background=\v!screen, % huh? \c!backgroundscreen=\defaultbackgroundscreen, \c!backgroundcolor=, \c!split=\v!auto] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/status-mkiv.lua0000644000175000017500000033221712161703335024674 0ustar norbertnorbertreturn { todo = { category = "lua", filename = "core-run", status = "idea", }, main = { { category = "mkiv", filename = "context", loading = "parent", status = "okay", }, { category = "lus", comment = "stub file for context", filename = "context", loading = "parent", status = "okay", }, { category = "tex", filename = "metatex", loading = "parent", status = "pending", }, { category = "lus", comment = "stub file for metatex", filename = "metatex", loading = "parent", status = "pending", }, { category = "mkiv", filename = "cont-cs", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-de", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-en", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-fr", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-gb", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-it", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-nl", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-pe", loading = "parent", status = "okay", }, { category = "mkiv", filename = "cont-ro", loading = "parent", status = "okay", }, { category = "mpiv", comment = "maybe more delayed loading", filename = "metafun", loading = "parent", status = "okay", }, { category = "mkiv", comment = "we keep this around for historic reasons", filename = "ppchtex", loading = "never", status = "okay", }, }, core = { { category = "mkiv", filename = "syst-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "norm-ctx", loading = "always", status = "okay", }, { category = "mkiv", filename = "syst-pln", loading = "always", status = "okay", }, { category = "mkiv", filename = "syst-mes", loading = "always", status = "okay", }, { category = "mkiv", filename = "luat-cod", loading = "luat-cod", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe combine (3)", filename = "luat-bas", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe combine (3)", filename = "luat-lib", loading = "always", status = "okay", }, { category = "mkiv", filename = "catc-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "forward dependency", filename = "catc-act", loading = "always", status = "okay", }, { category = "mkiv", filename = "catc-def", loading = "always", status = "okay", }, { category = "mkiv", filename = "catc-ctx", loading = "always", status = "okay", }, { category = "mkiv", filename = "catc-sym", loading = "always", status = "okay", }, { category = "mkiv", filename = "catc-xml", loading = "module", status = "okay", comment = "only needed for mkii xml parser", }, { category = "mkiv", comment = "maybe combine (1)", filename = "cldf-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "syst-aux", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe combine (1)", filename = "syst-lua", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe combine (1)", filename = "syst-con", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe combine (1)", filename = "syst-fnt", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe combine (1)", filename = "syst-rtp", loading = "always", status = "okay", }, { category = "mkvi", comment = "maybe combine (2)", filename = "file-ini", loading = "always", status = "okay", }, { category = "mkvi", comment = "maybe combine (2)", filename = "file-res", loading = "always", status = "okay", }, { category = "mkvi", filename = "file-lib", loading = "always", status = "okay", }, { category = "mkiv", filename = "supp-dir", loading = "always", status = "okay", }, { category = "mkiv", filename = "char-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "char-utf", loading = "always", status = "okay", }, { category = "mkiv", comment = "forward dependency", filename = "char-act", loading = "always", status = "okay", }, { category = "mkiv", filename = "mult-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "mult-sys", loading = "always", status = "okay", }, { category = "mkiv", filename = "mult-aux", loading = "always", status = "okay", }, { category = "mkiv", filename = "mult-def", loading = "always", status = "okay", }, { category = "mkiv", filename = "mult-chk", loading = "always", status = "okay", }, { category = "mkvi", filename = "mult-dim", loading = "always", status = "okay", }, { category = "mkiv", filename = "cldf-int", loading = "always", status = "okay", }, { category = "mkiv", filename = "luat-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe this becomes a runtime module", filename = "toks-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "attr-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "attr-mkr", loading = "always", status = "okay", }, { category = "mkiv", comment = "code might move from here", filename = "core-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "might need more redoing", filename = "core-env", loading = "always", status = "okay", }, { category = "mkiv", comment = "in due time more might move to here", filename = "layo-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe this becomes a runtime module", filename = "node-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe use context.generics/context.sprint here", filename = "cldf-bas", loading = "always", status = "okay", }, { category = "mkiv", comment = "might need more redoing", filename = "node-fin", loading = "always", status = "okay", }, { category = "mkiv", comment = "needs integration and configuration", filename = "node-mig", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-bld", loading = "always", status = "okay", }, { category = "mkiv", filename = "node-pag", loading = "never", status = "okay", }, { category = "mkiv", filename = "back-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "attr-col", loading = "always", status = "okay", }, { category = "mkiv", filename = "attr-lay", loading = "always", status = "okay", }, { category = "mkiv", filename = "attr-neg", loading = "always", status = "okay", }, { category = "mkiv", filename = "attr-eff", loading = "always", status = "okay", }, { category = "mkiv", comment = "needs more usage", filename = "trac-tex", loading = "always", status = "okay", }, { category = "mkiv", filename = "trac-deb", loading = "always", status = "okay", }, { category = "mkiv", filename = "trac-ctx", loading = "always", status = "okay", }, { category = "mkiv", filename = "supp-box", loading = "always", status = "okay", }, { category = "mkiv", filename = "supp-ran", loading = "always", status = "okay", }, { category = "mkiv", comment = "will be moved to the math-* modules", filename = "supp-mat", loading = "always", status = "okay", }, { category = "mkiv", comment = "will grow", filename = "typo-ini", loading = "always", status = "okay", }, { category = "mkvi", filename = "file-syn", loading = "always", status = "okay", }, { category = "mkvi", filename = "file-mod", loading = "always", status = "okay", }, { category = "mkiv", filename = "core-con", loading = "always", status = "okay", }, { category = "mkiv", filename = "cont-fil", loading = "always", status = "okay", }, { category = "mkiv", filename = "cont-nop", loading = "always", status = "okay", }, { category = "mkiv", filename = "cont-yes", loading = "always", status = "okay", }, { category = "mkiv", filename = "regi-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "enco-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "hand-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "lang-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "namespace should be languages", filename = "lang-lab", loading = "always", status = "okay", }, { category = "mkiv", filename = "unic-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "core-uti", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe rename to core-two", filename = "core-two", loading = "always", status = "okay", }, { category = "mkiv", filename = "core-dat", loading = "always", status = "okay", }, { category = "mkiv", filename = "colo-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "colo-ext", loading = "always", status = "okay", }, { category = "mkiv", filename = "colo-grp", loading = "always", status = "okay", }, { category = "mkiv", filename = "node-bck", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-cut", loading = "always", status = "okay", }, { category = "mkiv", filename = "lang-mis", loading = "always", status = "okay", }, { category = "mkiv", filename = "lang-url", loading = "always", status = "okay", }, { category = "mkiv", filename = "lang-def", loading = "always", status = "okay", }, { category = "mkiv", filename = "lang-frq", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "lang-frd", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "lang-wrd", loading = "always", status = "okay", }, { category = "mkvi", comment = "might need more redoing", filename = "file-job", loading = "always", status = "okay", }, { category = "mkiv", filename = "symb-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "sort-ini", loading = "always", status = "okay", }, { category = "mkvi", filename = "pack-mis", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-rul", loading = "always", status = "okay", }, { category = "mkiv", comment = "endpar experimental code", filename = "pack-mrl", loading = "always", status = "okay", }, { category = "mkvi", filename = "pack-bck", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-fen", loading = "always", status = "okay", }, { category = "mkiv", filename = "lxml-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "lxml-sor", loading = "always", status = "okay", }, { category = "mkvi", filename = "typo-prc", loading = "always", status = "okay", }, { category = "mkvi", filename = "strc-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-tag", loading = "always", status = "okay", }, { category = "mkiv", comment = "this module might go away when code has been moved", filename = "strc-doc", loading = "always", status = "okay", }, { category = "mkiv", comment = "still some rough edges", filename = "strc-num", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-mar", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-sbe", loading = "always", status = "okay", }, { category = "mkvi", filename = "strc-lst", loading = "always", status = "okay", }, { category = "mkiv", comment = "some of the local current and synchronization macros will be renamed", filename = "strc-sec", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-pag", loading = "always", status = "okay", }, { category = "mkiv", comment = "(support for) setups might get improved", filename = "strc-ren", loading = "always", status = "okay", }, { category = "mkiv", comment = "this module might go away", filename = "strc-xml", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-def", loading = "always", status = "okay", }, { category = "mkvi", comment = "some more low level names might change", filename = "strc-ref", loading = "always", status = "okay", }, { category = "mkiv", comment = "use setups for rendering", filename = "strc-reg", loading = "always", status = "okay", }, { category = "mkvi", filename = "strc-lev", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe some tuning is needed / will happen", filename = "spac-ali", loading = "always", status = "okay", }, { category = "mkiv", comment = "probably needs some more work", filename = "spac-hor", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe some changes will happen", filename = "spac-ver", loading = "always", status = "okay", }, { category = "mkiv", comment = "could be improved if needed", filename = "spac-lin", loading = "always", status = "okay", }, { category = "mkiv", comment = "this needs to be checked occasionally", filename = "spac-pag", loading = "always", status = "okay", }, { category = "mkiv", filename = "spac-par", loading = "always", status = "okay", }, { category = "mkiv", filename = "spac-def", loading = "always", status = "todo", }, { category = "mkiv", comment = "needs thinking and redoing", filename = "spac-grd", loading = "always", status = "todo", }, { category = "mkiv", comment = "in transition", filename = "anch-pos", loading = "always", status = "okay", }, { category = "mkvi", comment = "maybe change locationattribute names", filename = "scrn-ini", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "scrn-ref", loading = "always", status = "okay", }, { category = "mkiv", comment = "will change when we have objects at lua end", filename = "pack-obj", loading = "always", status = "okay", }, { category = "mkvi", filename = "strc-itm", loading = "always", status = "okay", }, { category = "mkvi", comment = "maybe more common counter code here and setups need to be improved", filename = "strc-con", loading = "always", status = "okay", }, { category = "mkvi", filename = "strc-des", loading = "always", status = "okay", }, { category = "mkvi", comment = "(interactive) coupling is not yet working", filename = "strc-enu", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-ind", loading = "always", status = "okay", }, { category = "mkiv", comment = "needs to be adapted when strc-con/des/enu changes", filename = "strc-lab", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-syn", loading = "always", status = "todo", }, { category = "mkiv", comment = "a funny mix", filename = "core-sys", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-var", loading = "always", status = "okay", }, { category = "mkvi", filename = "page-otr", loading = "always", status = "okay", }, { category = "mkiv", comment = "code might end up elsewhere", filename = "page-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "dealing with insertions might change", filename = "page-ins", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-fac", loading = "always", status = "okay", }, { category = "mkiv", comment = "otr commands will be redone", filename = "page-brk", loading = "always", status = "okay", }, { category = "mkiv", comment = "helpers for columns", filename = "page-col", loading = "always", status = "okay", }, { category = "mkiv", comment = "room for improvement and extension", filename = "page-inf", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-grd", loading = "always", status = "okay", }, { category = "mkiv", comment = "will be extended when columns are redone", filename = "page-flt", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-bck", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-not", loading = "always", status = "todo", }, { category = "mkiv", comment = "can probably be improved", filename = "page-one", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-lay", loading = "always", status = "okay", }, { category = "mkvi", filename = "page-box", loading = "always", status = "okay", }, { category = "mkvi", comment = "a few things left", filename = "page-txt", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-sid", loading = "always", status = "okay", }, { category = "mkvi", comment = "in due time we need a further cleanup", filename = "strc-flt", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-pst", loading = "always", status = "okay", }, { category = "mkvi", comment = "might be extended", filename = "page-mbk", loading = "always", status = "okay", }, { category = "mkiv", comment = "will be reimplemented", filename = "page-mul", loading = "always", status = "todo", }, { category = "mkiv", comment = "work in progress", filename = "page-mix", loading = "always", status = "todo", }, { category = "mkiv", comment = "will be reimplemented", filename = "page-set", loading = "always", status = "todo", }, { category = "mkiv", filename = "pack-lyr", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-pos", loading = "always", status = "okay", }, { category = "mkvi", filename = "page-mak", loading = "always", status = "okay", }, { category = "mkiv", comment = "will probably be overhauled some day", filename = "page-lin", loading = "always", status = "okay", }, { category = "mkiv", comment = "might get extended", filename = "page-par", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-pag", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-mar", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-itm", loading = "always", status = "okay", }, { category = "mkiv", comment = "check other modules for buffer usage", filename = "buff-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "check obsolete processbuffer", filename = "buff-ver", loading = "always", status = "okay", }, { category = "mkvi", comment = "experimental code", filename = "buff-par", loading = "always", status = "okay", }, { category = "mkiv", filename = "buff-imp-tex", loading = "always", status = "okay", }, { category = "mkiv", filename = "buff-imp-mp", loading = "always", status = "okay", }, { category = "mkiv", filename = "buff-imp-lua", loading = "always", status = "okay", }, { category = "mkiv", filename = "buff-imp-xml", loading = "always", status = "okay", }, { category = "mkiv", filename = "buff-imp-parsed-xml", loading = "always", status = "okay", }, { category = "mkiv", filename = "buff-imp-default", loading = "indirect", status = "okay", }, { category = "mkiv", filename = "buff-imp-escaped", loading = "indirect", status = "okay", }, { category = "mkiv", filename = "buff-imp-nested", loading = "indirect", status = "okay", }, { category = "mkiv", filename = "strc-blk", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-imp", loading = "always", status = "okay", }, { category = "mkvi", comment = "maybe some extensions and delayed loading, needs checking", filename = "page-sel", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-com", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "scrn-pag", loading = "always", status = "okay", }, { category = "mkvi", comment = "functionality needs checking", filename = "scrn-wid", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "scrn-but", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "scrn-bar", loading = "always", status = "okay", }, { category = "mkiv", filename = "strc-bkm", loading = "always", status = "okay", }, { category = "mkiv", comment = "somewhat weird", filename = "tabl-com", loading = "always", status = "okay", }, { category = "mkiv", comment = "unchecked", filename = "tabl-pln", loading = "always", status = "okay", }, { category = "mkiv", filename = "tabl-tab", loading = "always", status = "pending", }, { category = "mkiv", comment = "can probably be improved (names and such)", filename = "tabl-tbl", loading = "always", status = "okay", }, { category = "mkiv", comment = "frozen functionaly so no drastic cleanup", filename = "tabl-ntb", loading = "always", status = "okay", }, { category = "mkiv", filename = "tabl-mis", loading = "always", status = "okay", }, { category = "mkiv", filename = "tabl-nte", loading = "always", status = "okay", }, { category = "mkiv", comment = "will be redone when needed", filename = "tabl-ltb", loading = "always", status = "pending", }, { category = "mkiv", comment = "will be adapted when needed (and rest is done)", filename = "tabl-tsp", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "tabl-xtb", loading = "always", status = "okay", }, { category = "mkvi", filename = "tabl-xnt", loading = "module", status = "okay", loading = "always", comment = "only when natural tables need a replacement", }, { category = "mkiv", filename = "java-ini", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "scrn-fld", loading = "always", status = "okay", }, { category = "mkvi", comment = "namespace needs checking", filename = "scrn-hlp", loading = "always", status = "okay", }, { category = "mkiv", filename = "char-enc", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-lib", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-fil", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-var", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-fea", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-mat", loading = "always", status = "okay", }, { category = "mkvi", comment = "needs occasional checking and upgrading", filename = "font-ini", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-sym", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-sty", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-set", status = "okay", }, { category = "mkvi", filename = "font-emp", status = "okay", }, { category = "mkvi", filename = "font-col", status = "okay", }, { category = "mkiv", filename = "font-pre", status = "okay", }, { category = "mkiv", filename = "font-unk", status = "okay", }, { category = "mkiv", comment = "likely this will become a module", filename = "font-tra", status = "okay", }, { category = "mkiv", comment = "this could become a module", filename = "font-chk", status = "okay", }, { category = "mkiv", comment = "this one might be merged", filename = "font-uni", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-col", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-gds", loading = "always", status = "okay", }, { category = "mkvi", filename = "font-aux", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-lan", loading = "always", status = "okay", }, { category = "mkiv", comment = "this is work in progress", filename = "lxml-css", loading = "always", status = "okay", }, { category = "mkiv", filename = "spac-chr", loading = "always", status = "okay", }, { category = "mkiv", filename = "spac-cha", loading = "always", status = "okay", }, { category = "mkiv", comment = "work in progress", filename = "blob-ini", loading = "always", status = "pending", }, { category = "mkiv", filename = "trac-vis", loading = "always", status = "okay", }, { category = "mkiv", filename = "trac-jus", loading = "always", status = "okay", }, { category = "mkvi", filename = "trac-vis", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-cln", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-spa", loading = "always", status = "okay", }, { category = "mkiv", comment = "do we keep the style and color or not", filename = "typo-krn", loading = "always", status = "okay", }, { category = "mkvi", filename = "typo-itc", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe singular setup", filename = "typo-dir", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-brk", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-cap", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-dig", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-rep", loading = "always", status = "okay", }, { category = "mkvi", comment = "maybe there will be a nicer interface", filename = "typo-txt", loading = "always", status = "okay", }, { category = "mkiv", comment = "might get extended", filename = "typo-par", loading = "always", status = "okay", }, { category = "mkvi", filename = "type-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "type-set", loading = "always", status = "okay", }, { category = "mkiv", filename = "type-def", loading = "type-set", status = "okay", }, { category = "mkiv", filename = "type-fbk", loading = "type-set", status = "okay", }, { category = "mkiv", filename = "type-lua", loading = "type-set", status = "okay", }, { category = "mkiv", filename = "type-one", loading = "type-set", status = "okay", }, { category = "mkiv", filename = "type-otf", loading = "type-set", status = "okay", }, { category = "mkiv", filename = "type-siz", loading = "type-set", status = "okay", }, { category = "mkiv", filename = "type-tmf", loading = "never", status = "okay", comment = "placeholder to prevent other loading", }, { category = "mkiv", filename = "scrp-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "this module is obsolete", filename = "prop-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "mlib-ctx", loading = "always", status = "okay", }, { category = "mkiv", comment = "metapost code is always evolving", filename = "meta-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "code used in a project", filename = "meta-lua", loading = "experimental", status = "okay", }, { category = "mkiv", filename = "meta-tex", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe this one will be merged", filename = "meta-fun", loading = "always", status = "okay", }, { category = "mkiv", comment = "might get updated when mp code gets cleaned up", filename = "meta-pag", loading = "always", status = "okay", }, { category = "mkiv", filename = "meta-grd", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-mrk", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-flw", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-spr", loading = "always", status = "okay", }, { category = "mkiv", comment = "will be made better", filename = "page-plg", loading = "always", status = "okay", }, { category = "mkiv", comment = "needs more work (and thinking)", filename = "page-str", loading = "always", status = "okay", }, { category = "mkiv", comment = "in transition", filename = "anch-pgr", loading = "always", status = "okay", }, { category = "mkvi", comment = "in transition", filename = "anch-bck", loading = "always", status = "okay", }, { category = "mkiv", comment = "will stay experimental for a while", filename = "anch-tab", loading = "always", status = "okay", }, { category = "mkiv", filename = "anch-bar", loading = "always", status = "okay", }, { category = "mkiv", comment = "interesting old mechanism to keep around (module?)", filename = "anch-snc", loading = "always", status = "pending", }, { category = "mkiv", filename = "math-ini", loading = "always", status = "okay", }, { category = "mkiv", comment = "this file might merge into others", filename = "math-pln", loading = "always", status = "okay", }, { category = "mkiv", filename = "math-for", loading = "always", status = "okay", }, { category = "mkiv", comment = "eventually this will be split and spread", filename = "math-def", loading = "always", status = "okay", }, { category = "mkiv", comment = "will be checked and improved", filename = "math-ali", loading = "always", status = "okay", }, { category = "mkiv", comment = "needs testing", filename = "math-arr", loading = "always", status = "okay", }, { category = "mkvi", filename = "math-stc", loading = "always", status = "okay", }, { category = "mkiv", comment = "at least for the moment", filename = "math-frc", loading = "always", status = "okay", }, { category = "mkiv", filename = "math-scr", loading = "always", status = "okay", }, { category = "mkiv", filename = "math-int", loading = "always", status = "okay", }, { category = "mkiv", comment = "code get replaced (by autodelimiters)", filename = "math-del", loading = "always", status = "okay", }, { category = "mkiv", filename = "math-fen", loading = "always", status = "okay", }, { category = "mkiv", comment = "code might move to here", filename = "math-inl", loading = "always", status = "okay", }, { category = "mkiv", comment = "code might move to here", filename = "math-dis", loading = "always", status = "okay", }, { category = "mkiv", filename = "phys-dim", loading = "always", status = "okay", }, { category = "mkiv", comment = "some more functionality will end up here", filename = "strc-mat", loading = "always", status = "okay", }, { category = "mkiv", filename = "chem-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "chem-str", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-scr", loading = "always", status = "okay", }, { category = "mkiv", comment = "maybe some cleanup is needed", filename = "node-rul", loading = "always", status = "okay", }, { category = "mkiv", comment = "needs testing", filename = "font-sol", loading = "always", status = "okay", }, { category = "mkvI", filename = "strc-not", loading = "always", status = "todo", }, { category = "mkvi", comment = "will be extended as part of crited", filename = "strc-lnt", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-com", loading = "always", status = "okay", }, { category = "mkiv", filename = "typo-del", loading = "always", status = "okay", }, { category = "mkiv", filename = "grph-trf", loading = "always", status = "okay", }, { category = "mkiv", filename = "grph-inc", loading = "always", status = "okay", }, { category = "mkiv", filename = "grph-fig", loading = "always", status = "okay", }, { category = "mkiv", filename = "grph-raw", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-box", loading = "always", status = "okay", }, { category = "mkiv", filename = "pack-bar", loading = "always", status = "okay", }, { category = "mkiv", filename = "page-app", loading = "always", status = "okay", }, { category = "mkiv", filename = "meta-fig", loading = "always", status = "okay", }, { category = "mkiv", comment = "more or less obsolete", filename = "lang-spa", loading = "always", status = "okay", }, { category = "mkiv", filename = "bibl-bib", loading = "always", status = "pending", }, { category = "mkiv", filename = "bibl-tra", loading = "always", status = "pending", }, { category = "mkiv", comment = "not needed", filename = "meta-xml", loading = "always", status = "okay", }, { category = "mkiv", filename = "cont-log", loading = "always", status = "okay", }, { category = "mkiv", filename = "task-ini", loading = "always", status = "okay", }, { category = "mkiv", filename = "cldf-ver", loading = "always", status = "okay", }, { category = "mkiv", filename = "cldf-com", loading = "always", status = "okay", }, { category = "mkiv", filename = "core-ctx", loading = "always", status = "okay", }, { category = "mkiv", comment = "will always be messy", filename = "core-def", loading = "always", status = "okay", }, { category = "mkiv", comment = "object related code might move or change", filename = "back-pdf", loading = "always", status = "okay", }, { category = "mkiv", filename = "back-swf", loading = "never", status = "okay", comment = "no code, just an example of usage", }, { category = "mkiv", filename = "back-u3d", loading = "never", status = "okay", comment = "no code, just an example of usage", }, { category = "mkiv", filename = "mlib-pdf", loading = "always", status = "okay", }, { category = "mkiv", filename = "mlib-pps", loading = "always", status = "okay", }, { category = "mkiv", filename = "meta-pdf", loading = "always", status = "okay", }, { category = "mkiv", comment = "might need more work", filename = "grph-epd", loading = "always", status = "okay", }, { category = "mkiv", comment = "some parameters might move from export to backend", filename = "back-exp", loading = "always", status = "okay", }, }, extras = { { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-arrange", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-combine", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-common", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-ideas", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-listing", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-markdown", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-select", loading = "on demand", status = "okay", }, { category = "tex", comment = "add-on for mtx-context", filename = "mtx-context-timing", loading = "on demand", status = "okay", }, }, implementations = { { category = "mkiv", filename = "colo-imp-dem", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "colo-imp-ema", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "colo-imp-rgb", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "colo-imp-x11", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "colo-imp-xwi", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "java-imp-exa", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "java-imp-fil", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "java-imp-fld", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "java-imp-rhh", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "java-imp-stp", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-clp", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-dum", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-fen", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-mis", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-nav", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-pre", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "meta-imp-txt", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "symb-imp-cow", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "symb-imp-eur", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "symb-imp-jmn", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "symb-imp-mis", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "symb-imp-mvs", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "symb-imp-nav", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-antykwa", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-antykwapoltawskiego", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-asana", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-averia", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-buy", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-cambria", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-charter", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-cleartype", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-computer-modern-unicode", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-cow", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-dejavu", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-euler", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-ghz", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-hgz", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-husayni", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-hvmath", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-inconsolata", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-informal", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-iwona", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-kurier", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-latinmodern", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-liberation", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-libertine", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-lmnames", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-lucida-opentype", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-lucida-typeone", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-mathdesign", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-mathtimes", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-mscore", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-osx", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-postscript", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-punknova", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-texgyre", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-unfonts", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-xits", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-imp-xitsbidi", loading = "on demand", status = "okay", }, }, lua = { { category = "lua", filename = "anch-pgr", loading = "anch-pgr", status = "okay", }, { category = "lua", filename = "anch-pos", loading = "anch-pos", status = "okay", }, { category = "lua", filename = "attr-col", loading = "attr-col", status = "okay", }, { category = "lua", filename = "attr-eff", loading = "attr-eff", status = "okay", }, { category = "lua", filename = "attr-ini", loading = "attr-ini", status = "okay", }, { category = "lua", filename = "attr-lay", loading = "attr-lay", status = "okay", }, { category = "lua", filename = "attr-neg", loading = "attr-neg", status = "okay", }, { category = "lua", filename = "attr-mkr", loading = "attr-mkr", status = "okay", }, { category = "lua", comment = "experimental code, maybe some will move elsewhere", filename = "back-exp", loading = "back-exp", status = "pending", }, { category = "lua", filename = "back-ini", loading = "back-ini", status = "okay", }, { category = "lua", filename = "back-pdf", loading = "back-pdf", status = "okay", }, { category = "lua", filename = "bibl-bib", status = "todo", }, { category = "lua", filename = "bibl-tra", status = "todo", }, { category = "lua", filename = "blob-ini", status = "todo", }, { category = "lua", filename = "buff-imp-default", loading = "buff-imp-default", status = "okay", }, { category = "lua", filename = "buff-imp-escaped", loading = "buff-imp-escaped", status = "okay", }, { category = "lua", comment = "todo: colorization and nesting as in scite", filename = "buff-imp-lua", loading = "buff-imp-lua", status = "okay", }, { category = "lua", comment = "todo: colorization and nesting as in scite", filename = "buff-imp-mp", loading = "buff-imp-mp", status = "okay", }, { category = "lua", filename = "buff-imp-nested", loading = "buff-imp-nested", status = "okay", }, { category = "lua", filename = "buff-imp-parsed-xml", loading = "buff-imp-parsed-xml", status = "okay", }, { category = "lua", comment = "todo: colorization and nesting as in scite", filename = "buff-imp-tex", loading = "buff-imp-tex", status = "okay", }, { category = "lua", comment = "todo: colorization and nesting as in scite", filename = "buff-imp-xml", loading = "buff-imp-xml", status = "okay", }, { category = "lua", filename = "buff-ini", status = "okay", }, { category = "lua", filename = "buff-par", status = "okay", }, { category = "lua", comment = "maybe we will provide a few more (nesting) methods", filename = "buff-ver", status = "okay", }, { category = "lua", filename = "catc-ini", loading = "catc-ini", status = "okay", }, { category = "lua", filename = "char-cjk", loading = "char-ini", status = "okay", }, { category = "lua", filename = "char-def", loading = "char-ini", status = "okay", }, { category = "lua", comment = "maybe dataonly", filename = "char-enc", loading = "char-enc", status = "okay", }, { category = "lua", filename = "char-ent", loading = "char-ent", status = "okay", }, { category = "lua", comment = "maybe move blocks table to separate (dataonly) file", filename = "char-ini", loading = "char-ini", status = "okay", }, { category = "lua", filename = "char-map", loading = "char-ini", status = "okay", }, { category = "lua", filename = "char-tex", loading = "char-ini", status = "okay", }, { category = "lua", filename = "char-utf", loading = "char-utf", status = "okay", }, { category = "lua", filename = "chem-ini", loading = "chem-ini", status = "okay", }, { category = "lua", filename = "chem-str", loading = "chem-str", status = "okay", }, { category = "lua", comment = "will be extended and can be optimized if needed", filename = "cldf-bas", loading = "cldf-bas", status = "okay", }, { category = "lua", comment = "might change or even go away", filename = "cldf-com", loading = "cldf-com", status = "okay", }, { category = "lua", filename = "cldf-ini", loading = "cldf-ini", status = "okay", }, { category = "lua", filename = "cldf-int", loading = "cldf-int", status = "pending", }, { category = "lua", comment = "maybe this code can be redone more efficiently/robust", filename = "cldf-ver", loading = "cldf-ver", status = "pending", }, { category = "lua", comment = "also used in mtx-*", filename = "colo-icc", loading = "colo-ini", status = "okay", }, { category = "lua", filename = "colo-ini", loading = "colo-ini", status = "okay", }, { category = "lua", comment = "this code might move to a module", filename = "colo-run", loading = "on demand", status = "okay", }, { category = "lua", filename = "core-con", loading = "core-con", status = "okay", }, { category = "lua", filename = "core-ctx", loading = "core-ctx", status = "okay", }, { category = "lua", filename = "core-dat", loading = "core-dat", status = "okay", }, { category = "lua", comment = "maybe abusing the tex namespace is wrong", filename = "core-env", loading = "core-env", status = "okay", }, { category = "lua", filename = "core-sys", loading = "core-sys", status = "okay", }, { category = "lua", commands = "this is in fact replaced by core-dat", filename = "core-two", loading = "core-two", status = "okay", }, { category = "lua", comment = "some code will move to better places", filename = "core-uti", loading = "core-uti", status = "okay", }, { category = "lua", filename = "data-aux", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-bin", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-con", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-crl", loading = "never", status = "todo", }, { category = "lua", filename = "data-ctx", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-env", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-exp", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-fil", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-gen", status = "todo", }, { category = "lua", filename = "data-ini", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-inp", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-lst", status = "todo", }, { category = "lua", filename = "data-lua", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-met", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-out", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-pre", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-res", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-sch", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-tex", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-tmf", status = "todo", }, { category = "lua", filename = "data-tmp", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-tre", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-use", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-vir", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "data-zip", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "file-ini", loading = "file-ini", status = "okay", }, { category = "lua", filename = "file-job", loading = "file-job", status = "okay", }, { category = "lua", filename = "file-lib", loading = "file-lib", status = "okay", }, { category = "lua", filename = "file-mod", loading = "file-mod", status = "okay", }, { category = "lua", filename = "file-res", loading = "file-res", status = "okay", }, { category = "lua", filename = "file-syn", loading = "file-syn", status = "okay", }, { category = "lua", filename = "font-afm", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-afk", loading = "font-lib", status = "okay", }, { category = "lua", comment = "only used in luatex-fonts", filename = "font-age", loading = "never", status = "okay", }, { category = "lua", filename = "font-agl", loading = "on demand", status = "okay", }, { category = "lua", comment = "needs some documentation in usage", filename = "font-aux", loading = "font-lib", status = "okay", }, { category = "lua", comment = "move more to the commands namespace", filename = "font-chk", loading = "font-chk", status = "okay", }, { category = "lua", filename = "font-cid", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-col", loading = "font-col", status = "okay", }, { category = "lua", filename = "font-con", loading = "font-lib", status = "okay", }, { category = "lua", comment = "will be improved over time", filename = "font-ctx", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-def", loading = "font-lib", status = "okay", }, { category = "lua", comment = "part of this code is obsolete", filename = "font-enc", loading = "font-lib", status = "okay", }, { category = "lua", comment = "needs documentation at the tex end", filename = "font-enh", loading = "font-lib", status = "okay", }, { category = "lua", comment = "maybe some data tables can be be external", filename = "font-ext", loading = "font-lib", status = "okay", }, { category = "lua", comment = "okay but can be improved", filename = "font-fbk", loading = "font-lib", status = "pending", }, { category = "lua", filename = "font-gds", loading = "font-lib", status = "okay", }, { category = "mkvi", filename = "font-hsh", loading = "always", status = "okay", }, { category = "lua", filename = "font-ini", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-ldr", loading = "on demand", status = "okay", }, { category = "lua", filename = "font-log", loading = "font-lib", status = "okay", }, { category = "lua", comment = "currently rather minimalistic", filename = "font-lua", loading = "font-lib", status = "okay", }, { category = "lua", comment = "the lum file support will be dropped / no map files anyway", filename = "font-map", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-mis", loading = "on demand", status = "okay", }, { category = "mkvi", filename = "font-nod", loading = "always", status = "okay", }, { category = "lua", comment = "when more scripts are supported we might end up with imp files", filename = "font-ota", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-otb", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-otc", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-otd", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-otf", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-oth", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-oti", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-otn", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-otp", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-ott", loading = "font-lib", status = "okay", }, { category = "lua", comment = "is mostly replaced by lfg files", filename = "font-pat", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-sol", loading = "font-sol", status = "okay", }, { category = "lua", comment = "also loaded on demand", filename = "font-syn", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-tfm", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-trt", loading = "font-lib", status = "okay", }, { category = "lua", filename = "font-vf", loading = "font-lib", status = "pending", }, { category = "lua", filename = "grph-epd", loading = "grph-epd", status = "okay", }, { category = "lua", filename = "grph-fil", loading = "grph-inc", status = "okay", }, { category = "lua", filename = "grph-inc", loading = "grph-inc", status = "todo", }, { category = "lua", filename = "grph-raw", loading = "grph-raw", status = "okay", }, { category = "lua", filename = "grph-swf", loading = "grph-swf", status = "okay", }, { category = "lua", filename = "grph-u3d", loading = "grph-u3d", status = "okay", }, { category = "lua", comment = "experiment with graphic magick library", filename = "grph-wnd", loading = "on demand", status = "okay", }, { category = "lua", filename = "java-ini", loading = "java-ini", status = "okay", }, { category = "lua", filename = "l-boolean", status = "todo", }, { category = "lua", filename = "l-dir", status = "todo", }, { category = "lua", filename = "l-file", status = "todo", }, { category = "lua", filename = "l-function", status = "todo", }, { category = "lua", filename = "l-io", status = "todo", }, { category = "lua", filename = "l-lpeg", status = "todo", }, { category = "lua", filename = "l-math", status = "todo", }, { category = "lua", filename = "l-md5", status = "todo", }, { category = "lua", filename = "l-number", status = "todo", }, { category = "lua", filename = "l-os", status = "todo", }, { category = "lua", filename = "l-pdfview", status = "todo", }, { category = "lua", filename = "l-set", status = "todo", }, { category = "lua", filename = "l-string", status = "todo", }, { category = "lua", filename = "l-table", status = "todo", }, { category = "lua", filename = "l-unicode", status = "todo", }, { category = "lua", filename = "l-url", status = "todo", }, { category = "lua", filename = "l-xml", status = "todo", }, { category = "lua", filename = "lang-def", loading = "lang-def", status = "okay", }, { category = "lua", filename = "lang-ini", loading = "lang-ini", status = "okay", }, { category = "lua", filename = "lang-lab", loading = "lang-lab", status = "okay", }, { category = "lua", filename = "lang-txt", loading = "lang-lab", status = "okay", }, { category = "lua", comment = "maybe another approach is nicer", filename = "lang-url", loading = "lang-url", status = "pending", }, { category = "lua", filename = "lang-wrd", loading = "lang-wrd", status = "okay", }, { category = "lua", comment = "more will end up here", filename = "layo-ini", loading = "layo-ini", status = "okay", }, { category = "lua", filename = "lpdf-ano", status = "todo", }, { category = "lua", filename = "lpdf-col", status = "todo", }, { category = "lua", filename = "lpdf-enc", status = "todo", }, { category = "lua", filename = "lpdf-epa", status = "todo", }, { category = "lua", filename = "lpdf-epd", status = "todo", }, { category = "lua", filename = "lpdf-fld", status = "todo", }, { category = "lua", filename = "lpdf-fmt", status = "todo", }, { category = "lua", filename = "lpdf-grp", status = "todo", }, { category = "lua", filename = "lpdf-ini", status = "todo", }, { category = "lua", filename = "lpdf-mis", status = "todo", }, { category = "lua", filename = "lpdf-mov", status = "todo", }, { category = "lua", filename = "lpdf-nod", status = "todo", }, { category = "lua", filename = "lpdf-ren", status = "todo", }, { category = "lua", filename = "lpdf-swf", status = "todo", }, { category = "lua", filename = "lpdf-tag", status = "todo", }, { category = "lua", filename = "lpdf-u3d", status = "todo", }, { category = "lua", filename = "lpdf-wid", status = "todo", }, { category = "lua", filename = "lpdf-xmp", status = "todo", }, { category = "lua", comment = "replacement code for wd/ht/dp", filename = "luat-bwc", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-cbk", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-cnf", loading = "luat-lib", status = "okay", }, { category = "lua", comment = "maybe some code should move", filename = "luat-cod", loading = "luat-cod", status = "okay", }, { category = "lua", filename = "luat-env", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-exe", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-fio", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-fmt", loading = "on demand", status = "okay", }, { category = "lua", comment = "will be upgraded when we have Lua 5.2", filename = "luat-ini", loading = "luat-lib", status = "pending", }, { category = "lua", comment = "will be upgraded when we have Lua 5.2", filename = "util-env", loading = "luat-lib", status = "pending", }, { category = "lua", filename = "luat-iop", loading = "luat-lib", status = "okay", }, { category = "lua", comment = "this is likely to change some day", filename = "luat-lua", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-mac", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "luat-run", loading = "luat-lib", status = "okay", }, { category = "lua", comment = "related to the socket code", filename = "luat-soc", loading = "on demand", status = "pending", }, { category = "lua", filename = "luat-sta", loading = "on demand", status = "okay", }, { category = "lua", filename = "luat-sto", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "lxml-aux", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "lxml-css", status = "todo", }, { category = "lua", filename = "lxml-ctx", status = "todo", }, { category = "lua", filename = "lxml-dir", status = "todo", }, { category = "lua", filename = "lxml-ent", status = "todo", }, { category = "lua", filename = "lxml-inf", status = "todo", }, { category = "lua", filename = "lxml-lpt", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "lxml-mis", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "lxml-sor", status = "todo", }, { category = "lua", filename = "lxml-tab", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "lxml-tex", status = "todo", }, { category = "lua", filename = "lxml-xml", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "m-chart", status = "todo", }, { category = "lua", filename = "m-database", status = "todo", }, { category = "lua", filename = "m-markdown", status = "todo", }, { category = "lua", filename = "m-pstricks", status = "todo", }, { category = "lua", filename = "m-spreadsheet", status = "todo", }, { category = "lua", filename = "m-steps", status = "todo", }, { category = "lua", filename = "math-act", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-frc", loading = "math-frc", status = "okay", }, { category = "lua", comment = "could be made look nicer, but who cares", filename = "math-dim", loading = "math-ini", status = "okay", }, { category = "lua", comment = "the code is related to math-vfu", filename = "math-ext", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-fbk", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-frc", loading = "math-frc", status = "okay", }, { category = "lua", comment = "okay, but we might have a few more low level definers some day", filename = "math-ini", loading = "math-ini", status = "pending", }, { category = "lua", filename = "math-map", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-noa", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-ren", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-tag", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-ttv", loading = "math-ini", status = "okay", }, { category = "lua", filename = "math-vfu", loading = "math-ini", status = "okay", }, { category = "lua", comment = "this is just a first version", filename = "meta-fun", loading = "meta-fun", status = "okay", }, { category = "lua", filename = "meta-ini", loading = "meta-ini", status = "okay", }, { category = "lua", filename = "meta-lua", loading = "meta-lua", status = "okay", }, { category = "lua", comment = "could be done nicer nowadays but who needs it", filename = "meta-pdf", loading = "meta-pdf", status = "okay", }, { category = "lua", filename = "meta-pdh", loading = "meta-pdh", status = "okay", loading = "never", comment = "this is historic code that we keep around", }, { category = "lua", filename = "meta-tex", loading = "meta-tex", status = "okay", }, { category = "lua", filename = "mlib-ctx", loading = "mlib-ctx", status = "okay", }, { category = "lua", filename = "mlib-pdf", loading = "mlib-pdf", status = "okay", }, { category = "lua", filename = "mlib-pps", loading = "mlib-pdf", status = "okay", }, { category = "lua", filename = "mlib-run", loading = "mlib-ctx", status = "okay", }, { category = "lua", comment = "this is an experiment, namespaces need to be dealt with properly", filename = "mult-aux", loading = "mult-aux", status = "pending", }, { category = "lua", comment = "this is an experiment", filename = "mult-chk", loading = "mult-chk", status = "pending", }, { category = "lua", filename = "mult-def", loading = "mult-ini", status = "okay", }, { category = "lua", comment = "used for generating editor lexing files", filename = "mult-fun", loading = "never", status = "okay", }, { category = "lua", filename = "mult-ini", loading = "mult-ini", status = "okay", }, { category = "lua", comment = "used for generating editor lexing files", filename = "mult-low", loading = "never", status = "okay", }, { category = "lua", comment = "all messages need to be checked", filename = "mult-mes", loading = "mult-ini", status = "pending", }, { category = "lua", comment = "used for generating editor lexing files", filename = "mult-mps", loading = "never", status = "okay", }, { category = "lua", comment = "used for generating editor lexing files", filename = "mult-prm", loading = "never", status = "okay", }, { category = "lua", filename = "node-acc", status = "todo", }, { category = "lua", filename = "node-aux", status = "todo", }, { category = "lua", filename = "node-bck", status = "todo", }, { category = "lua", filename = "node-dir", status = "todo", }, { category = "lua", filename = "node-ext", status = "todo", }, { category = "lua", filename = "node-fin", status = "todo", }, { category = "lua", filename = "node-fnt", loading = "font-lib", status = "todo", }, { category = "lua", filename = "node-ini", status = "todo", }, { category = "lua", filename = "node-inj", loading = "font-lib", status = "todo", }, { category = "lua", filename = "node-mig", status = "todo", }, { category = "lua", filename = "node-pag", status = "todo", }, { category = "lua", filename = "node-pro", status = "todo", }, { category = "lua", filename = "node-ref", status = "todo", }, { category = "lua", filename = "node-res", status = "todo", }, { category = "lua", filename = "node-rul", status = "todo", }, { category = "lua", filename = "node-ser", status = "todo", }, { category = "lua", filename = "node-shp", status = "todo", }, { category = "lua", filename = "node-tex", status = "todo", }, { category = "lua", filename = "node-tra", status = "todo", }, { category = "lua", filename = "node-snp", status = "todo", }, { category = "lua", filename = "node-tsk", status = "todo", }, { category = "lua", filename = "node-tst", status = "todo", }, { category = "lua", filename = "node-typ", status = "todo", }, { category = "lua", comment = "will be extended when we have opened up pdf objects", filename = "pack-obj", loading = "pack-obj", status = "okay", }, { category = "lua", filename = "pack-rul", loading = "pack-rul", status = "okay", }, { category = "lua", filename = "page-flt", status = "todo", }, { category = "lua", filename = "page-ins", status = "todo", }, { category = "lua", filename = "page-lin", status = "todo", }, { category = "lua", filename = "page-mix", status = "todo", }, { category = "lua", filename = "page-pst", status = "todo", }, { category = "lua", filename = "page-str", status = "todo", }, { category = "lua", filename = "phys-dim", loading = "phys-dim", status = "okay", }, { category = "lua", filename = "regi-8859-1", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-10", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-11", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-13", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-14", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-15", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-16", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-2", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-3", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-4", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-5", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-6", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-7", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-8", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-8859-9", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1250", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1251", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1252", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1253", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1254", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1255", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1256", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1257", loading = "on demand", status = "okay", }, { category = "lua", filename = "regi-cp1258", loading = "on demand", status = "okay", }, { category = "lua", comment = "just a demo file", filename = "regi-demo", loading = "never", status = "okay", }, { category = "lua", filename = "regi-ini", loading = "regi-ini", status = "okay", }, { category = "lua", filename = "s-fonts-coverage", status = "okay", }, { category = "lua", filename = "s-fonts-features", status = "okay", }, { category = "lua", filename = "s-fonts-missing", status = "okay", }, { category = "lua", filename = "s-fonts-shapes", status = "okay", }, { category = "lua", filename = "s-fonts-system", status = "okay", }, { category = "lua", filename = "s-fonts-tables", status = "okay", }, { category = "lua", filename = "s-fonts-vectors", status = "okay", }, { category = "lua", filename = "s-languages-counters", status = "okay", }, { category = "lua", filename = "s-languages-frequencies", status = "okay", }, { category = "lua", filename = "s-languages-hyphenation", status = "okay", }, { category = "lua", filename = "s-languages-sorting", status = "okay", }, { category = "lua", filename = "s-languages-system", status = "okay", }, { category = "lua", filename = "s-math-characters", status = "okay", }, { category = "lua", filename = "s-math-coverage", status = "okay", }, { category = "lua", filename = "s-math-extensibles", status = "okay", }, { category = "lua", filename = "s-fonts-goodies", status = "okay", }, { category = "lua", filename = "s-math-parameters", status = "okay", }, { category = "lua", filename = "s-physics-units", status = "okay", }, { category = "lua", filename = "s-pre-71", status = "todo", }, { category = "lua", filename = "s-sql-tables", status = "okay", }, { category = "lua", filename = "scrn-but", status = "todo", }, { category = "lua", filename = "scrn-fld", status = "todo", }, { category = "lua", filename = "scrn-hlp", status = "todo", }, { category = "lua", filename = "scrn-ini", status = "todo", }, { category = "lua", filename = "scrn-pag", status = "todo", }, { category = "lua", filename = "scrn-ref", status = "todo", }, { category = "lua", filename = "scrn-wid", status = "todo", }, { category = "lua", comment = "we can speed this up", filename = "scrp-cjk", loading = "scrp-ini", status = "okay", }, { category = "lua", comment = "we can speed this up", filename = "scrp-eth", loading = "scrp-ini", status = "okay", }, { category = "lua", filename = "scrp-ini", loading = "scrp-ini", status = "okay", }, { category = "lua", filename = "sort-ini", status = "todo", }, { category = "lua", filename = "sort-lan", status = "todo", }, { category = "lua", filename = "spac-adj", status = "todo", }, { category = "lua", filename = "spac-ali", status = "todo", }, { category = "lua", filename = "spac-chr", status = "todo", }, { category = "lua", filename = "spac-hor", status = "todo", }, { category = "lua", filename = "spac-ver", status = "todo", }, { category = "lua", filename = "status-mkiv", status = "todo", }, { category = "lua", filename = "strc-bkm", status = "todo", }, { category = "lua", filename = "strc-blk", status = "todo", }, { category = "lua", filename = "strc-con", status = "todo", }, { category = "lua", filename = "strc-doc", status = "todo", }, { category = "lua", filename = "strc-flt", status = "todo", }, { category = "lua", filename = "strc-ini", status = "todo", }, { category = "lua", filename = "strc-itm", status = "todo", }, { category = "lua", filename = "strc-lev", status = "todo", }, { category = "lua", filename = "strc-lst", status = "todo", }, { category = "lua", filename = "strc-mar", status = "todo", }, { category = "lua", filename = "strc-mat", status = "todo", }, { category = "lua", filename = "strc-not", status = "todo", }, { category = "lua", filename = "strc-num", status = "todo", }, { category = "lua", filename = "strc-pag", status = "todo", }, { category = "lua", filename = "strc-ref", status = "todo", }, { category = "lua", filename = "strc-reg", status = "todo", }, { category = "lua", filename = "strc-rsc", status = "todo", }, { category = "lua", filename = "strc-syn", status = "todo", }, { category = "lua", filename = "strc-tag", status = "todo", }, { category = "lua", filename = "supp-box", loading = "supp-box", status = "okay", }, { category = "lua", filename = "supp-ran", loading = "supp-ran", status = "okay", }, { category = "lua", filename = "symb-ini", loading = "symb-ini", status = "okay", }, { category = "lua", comment = "there will be more in here", filename = "syst-aux", loading = "syst-aux", status = "okay", }, { category = "lua", comment = "do some tests with speedups (sprint)", filename = "syst-con", loading = "syst-con", status = "pending", }, { category = "lua", comment = "do some tests with speedups (less tokens)", filename = "syst-lua", loading = "syst-lua", status = "pending", }, { category = "lua", filename = "tabl-tbl", loading = "tabl-tbl", status = "okay", }, { category = "lua", comment = "work in progress", filename = "tabl-xtb", loading = "tabl-xtb", status = "okay", }, { category = "lua", comment = "we need a well defined defintion moment", filename = "task-ini", loading = "task-ini", status = "pending", }, { category = "lua", filename = "toks-ini", status = "todo", }, { category = "lua", comment = "must be applied in more places", filename = "trac-ctx", loading = "trac-ctx", status = "okay", }, { category = "lua", filename = "trac-deb", loading = "trac-deb", status = "okay", }, { category = "lua", comment = "for the moment somewhat private", filename = "trac-fil", loading = "never", status = "okay", }, { category = "lua", filename = "trac-inf", loading = "luat-lib", status = "okay", }, { category = "lua", comment = "will be redone and extended", filename = "trac-lmx", loading = "luat-lib", status = "pending", }, { category = "lua", filename = "trac-log", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "trac-xml", loading = "mtxrun", status = "okay", }, { category = "lua", filename = "trac-exp", loading = "mtxrun", status = "okay", }, { category = "lua", comment = "experimental code, will be redone when lua 5.2", filename = "trac-pro", loading = "luat-lib", status = "pending", }, { category = "lua", comment = "some code can better be in util-set", filename = "trac-set", loading = "luat-lib", status = "pending", }, { category = "lua", filename = "trac-tex", loading = "trac-tex", status = "okay", }, { category = "lua", filename = "trac-tim", loading = "on demand", status = "okay", }, { category = "lua", filename = "trac-vis", loading = "trac-vis", status = "okay", }, { category = "lua", filename = "trac-jus", loading = "trac-jus", status = "okay", }, { category = "lua", filename = "type-ini", loading = "type-ini", status = "okay", }, { category = "lua", filename = "typo-bld", status = "todo", }, { category = "lua", filename = "typo-brk", status = "todo", }, { category = "lua", filename = "typo-cap", status = "todo", }, { category = "lua", filename = "typo-cln", status = "todo", }, { category = "lua", filename = "typo-dig", status = "todo", }, { category = "lua", filename = "typo-dir", status = "todo", }, { category = "lua", filename = "typo-ini", status = "todo", }, { category = "lua", filename = "typo-itc", status = "todo", }, { category = "lua", filename = "typo-krn", status = "todo", }, { category = "lua", filename = "typo-mar", status = "todo", }, { category = "lua", filename = "typo-pag", status = "todo", }, { category = "lua", filename = "typo-par", status = "todo", }, { category = "lua", filename = "typo-prc", status = "todo", }, { category = "lua", filename = "typo-lan", status = "okay", }, { category = "lua", filename = "typo-rep", status = "todo", }, { category = "lua", filename = "typo-spa", status = "todo", }, { category = "lua", filename = "unic-ini", loading = "unic-ini", status = "okay", }, { category = "lua", filename = "util-deb", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-dim", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-fmt", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-jsn", loading = "m-json", status = "todo", }, { category = "lua", filename = "util-lua", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "util-lib", loading = "luat-lib", status = "okay", }, { category = "lua", filename = "util-mrg", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-pck", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-prs", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-seq", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-sql", loading = "m-sql", status = "todo", }, { category = "lua", filename = "util-sta", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-sto", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-str", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-tab", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "util-tpl", loading = "luat-lib", status = "todo", }, { category = "lua", filename = "x-asciimath", status = "todo", }, { category = "lua", filename = "x-calcmath", status = "todo", }, { category = "lua", filename = "x-cals", status = "todo", }, { category = "lua", filename = "x-chemml", status = "todo", }, { category = "lua", filename = "x-ct", status = "todo", }, { category = "lua", filename = "x-ldx", status = "todo", }, { category = "lua", filename = "x-mathml", status = "todo", }, }, metafun = { { category = "mpiv", filename = "mp-base", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-tool", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-mlib", loading = "always", status = "okay", }, { category = "mpiv", comment = "sort of obsolete", filename = "mp-core", status = "okay", }, { category = "mpiv", comment = "maybe some nicer synonyms", filename = "mp-page", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-butt", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-shap", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-grph", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-grid", loading = "always", status = "okay", }, { category = "mpiv", comment = "a hack anyway", filename = "mp-form", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-figs", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-func", loading = "always", status = "okay", }, { category = "mpiv", filename = "mp-text", loading = "on demand", status = "todo", }, { category = "mpiv", filename = "mp-crop", loading = "on demand", status = "okay", }, { category = "mpiv", comment = "follows m-chart", filename = "mp-char", loading = "on demand", status = "okay", }, { category = "mpiv", comment = "follows m-steps", filename = "mp-step", loading = "on demand", status = "okay", }, { category = "mpiv", filename = "mp-chem", loading = "on demand", status = "okay", }, { category = "mpiv", comment = "maybe some namespace changes", filename = "mp-abck", loading = "on demand", status = "okay", }, { category = "mpiv", comment = "maybe some namespace changes", filename = "mp-apos", loading = "on demand", status = "okay", }, { category = "mpiv", comment = "will be done when needed", filename = "mp-asnc", loading = "on demand", status = "todo", }, }, modules = { { category = "mkiv", comment = "best use m-zint instead", filename = "m-barcodes", loading = "module", status = "okay", }, { category = "mkvi", filename = "m-chart", loading = "module", status = "okay", }, { category = "mkiv", comment = "this is a placeholder (chemistry is built-in)", filename = "m-chemic", loading = "never", status = "okay", }, { category = "tex", filename = "m-cweb", status = "todo", }, { category = "mkiv", filename = "m-database", status = "todo", }, { category = "tex", filename = "m-datastrc", status = "todo", }, { category = "mkiv", comment = "add-on for mtx-context", filename = "m-directives", loading = "on demand", status = "okay", }, { category = "tex", filename = "m-educat", status = "todo", }, { category = "mkiv", filename = "m-fields", status = "todo", }, { category = "tex", filename = "m-format", status = "todo", }, { category = "mkiv", filename = "m-graph", status = "todo", }, { category = "mkiv", filename = "m-ipsum", loading = "module", status = "okay", }, { category = "mkiv", filename = "m-json", loading = "module", status = "okay", }, { category = "tex", filename = "m-layout", status = "todo", }, { category = "mkiv", comment = "add-on for mtx-context", filename = "m-logcategories", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "m-markdown", status = "todo", }, { category = "mkiv", filename = "m-mathcrap", status = "todo", }, { category = "mkiv", filename = "m-mkii", status = "todo", }, { category = "mkiv", filename = "m-mkivhacks", status = "todo", }, { category = "mkvi", filename = "m-morse", loading = "module", status = "okay", }, { category = "tex", filename = "m-narrowtt", loading = "module", status = "okay", }, { category = "tex", filename = "m-newmat", status = "todo", }, { category = "mkiv", filename = "m-ntb-to-xtb", status = "okay", }, { category = "mkiv", filename = "m-obsolete", status = "todo", }, { category = "mkiv", filename = "m-oldfun", status = "todo", }, { category = "mkiv", filename = "m-oldnum", status = "todo", }, { category = "tex", filename = "m-pictex", status = "todo", }, { category = "mkiv", filename = "m-pstricks", status = "todo", }, { category = "mkiv", comment = "keep an eye on changes in lua code", filename = "m-punk", status = "okay", }, { category = "tex", filename = "m-r", status = "todo", }, { category = "mkiv", filename = "m-spreadsheet", status = "okay", }, { category = "mkvi", filename = "m-steps", status = "todo", }, { category = "tex", filename = "m-streams", status = "todo", }, { category = "tex", filename = "m-subsub", status = "todo", }, { category = "mkiv", filename = "m-sql", loading = "module", status = "okay", }, { category = "mkiv", filename = "m-timing", status = "okay", }, { category = "mkiv", comment = "add-on for mtx-context", filename = "m-trackers", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "m-translate", status = "okay", }, { category = "mkiv", filename = "m-units", status = "todo", }, { category = "mkiv", filename = "m-visual", status = "todo", }, { category = "mkiv", filename = "m-zint", status = "okay", }, { category = "tex", filename = "s-abr-01", status = "todo", }, { category = "tex", filename = "s-abr-02", status = "todo", }, { category = "tex", filename = "s-abr-03", status = "todo", }, { category = "tex", filename = "s-abr-04", status = "todo", }, { category = "mkiv", filename = "s-art-01", status = "todo", }, { category = "tex", filename = "s-cdr-01", status = "todo", }, { category = "mkiv", filename = "s-def-01", status = "todo", }, { category = "tex", filename = "s-faq-00", status = "todo", }, { category = "tex", filename = "s-faq-01", status = "todo", }, { category = "tex", filename = "s-faq-02", status = "todo", }, { category = "tex", filename = "s-faq-03", status = "todo", }, { category = "mkiv", filename = "s-fnt-10", status = "todo", }, { category = "mkiv", filename = "s-fnt-20", status = "todo", }, { category = "mkiv", filename = "s-fnt-21", status = "todo", }, { category = "mkiv", filename = "s-fnt-24", status = "todo", }, { category = "mkiv", filename = "s-fnt-30", status = "todo", }, { category = "mkiv", filename = "s-fonts-coverage", loading = "s-fonts-coverage", status = "okay", }, { category = "mkiv", filename = "s-fonts-features", loading = "s-fonts-features", status = "okay", }, { category = "mkiv", filename = "s-fonts-goodies", loading = "s-fonts-goodies", status = "okay", }, { category = "mkiv", filename = "s-fonts-missing", loading = "s-fonts-missing", status = "okay", }, { category = "mkiv", filename = "s-fonts-shapes", loading = "s-fonts-shapes", status = "okay", }, { category = "mkiv", filename = "s-fonts-system", loading = "s-fonts-system", status = "okay", }, { category = "mkiv", filename = "s-fonts-tables", loading = "s-fonts-tables", status = "okay", }, { category = "mkiv", filename = "s-fonts-vectors", loading = "s-fonts-vectors", status = "okay", }, { category = "mkvi", filename = "s-inf-01", status = "okay", }, { category = "mkiv", filename = "s-inf-02", status = "todo", }, { category = "mkiv", filename = "s-inf-03", status = "todo", }, { category = "mkiv", filename = "s-inf-04", status = "todo", }, { category = "lua", filename = "s-languages-counters", loading = "s-languages-counters", status = "okay", }, { category = "lua", filename = "s-languages-frequencies", loading = "s-languages-frequencies", status = "okay", }, { category = "lua", filename = "s-languages-hyphenation", loading = "s-languages-hyphenation", status = "okay", }, { category = "mkiv", filename = "s-languages-sorting", loading = "s-languages-sorting", status = "okay", }, { category = "mkiv", filename = "s-languages-system", loading = "s-languages-system", status = "okay", }, { category = "mkiv", filename = "s-lan-03", status = "todo", }, { category = "mkiv", filename = "s-lan-04", status = "todo", }, { category = "mkiv", filename = "s-lan-06", status = "okay", }, { category = "tex", filename = "s-mag-01", status = "todo", }, { category = "mkiv", filename = "s-map-10", status = "todo", }, { category = "mkiv", filename = "s-math-characters", loading = "s-math-characters", status = "okay", }, { category = "mkiv", filename = "s-math-coverage", loading = "s-math-coverage", status = "okay", }, { category = "mkiv", filename = "s-math-extensibles", loading = "s-math-extensibles", status = "okay", }, { category = "mkiv", filename = "s-math-parameters", loading = "s-math-parameters", status = "okay", }, { category = "mkiv", filename = "s-math-repertoire", loading = "s-math-repertoire", status = "okay", }, { category = "mkiv", filename = "s-mod-00", status = "todo", }, { category = "mkiv", filename = "s-mod-01", status = "todo", }, { category = "mkiv", filename = "s-mod-02", status = "todo", }, { category = "mkiv", filename = "s-pages-statistics", status = "okay", }, { category = "mkiv", filename = "s-physics-units", loading = "s-physics-units", status = "okay", }, { category = "tex", filename = "s-pre-00", status = "todo", }, { category = "tex", filename = "s-pre-01", status = "todo", }, { category = "tex", filename = "s-pre-02", status = "todo", }, { category = "tex", filename = "s-pre-03", status = "todo", }, { category = "tex", filename = "s-pre-04", status = "todo", }, { category = "tex", filename = "s-pre-05", status = "todo", }, { category = "tex", filename = "s-pre-06", status = "todo", }, { category = "tex", filename = "s-pre-07", status = "todo", }, { category = "tex", filename = "s-pre-08", status = "todo", }, { category = "tex", filename = "s-pre-09", status = "todo", }, { category = "tex", filename = "s-pre-10", status = "todo", }, { category = "tex", filename = "s-pre-11", status = "todo", }, { category = "tex", filename = "s-pre-12", status = "todo", }, { category = "tex", filename = "s-pre-13", status = "todo", }, { category = "tex", filename = "s-pre-14", status = "todo", }, { category = "tex", filename = "s-pre-15", status = "todo", }, { category = "tex", filename = "s-pre-16", status = "todo", }, { category = "tex", filename = "s-pre-17", status = "todo", }, { category = "tex", filename = "s-pre-18", status = "todo", }, { category = "tex", filename = "s-pre-19", status = "todo", }, { category = "tex", filename = "s-pre-22", status = "todo", }, { category = "tex", filename = "s-pre-23", status = "todo", }, { category = "tex", filename = "s-pre-26", status = "todo", }, { category = "tex", filename = "s-pre-27", status = "todo", }, { category = "mkiv", filename = "s-pre-30", status = "todo", }, { category = "mkiv", filename = "s-present-tiles", status = "okay", }, { category = "tex", filename = "s-pre-50", status = "todo", }, { category = "mkiv", filename = "s-pre-60", status = "todo", }, { category = "tex", filename = "s-pre-61", status = "todo", }, { category = "tex", filename = "s-pre-62", status = "todo", }, { category = "tex", filename = "s-pre-63", status = "todo", }, { category = "tex", filename = "s-pre-64", status = "todo", }, { category = "tex", filename = "s-pre-66", status = "todo", }, { category = "tex", filename = "s-pre-67", status = "todo", }, { category = "tex", filename = "s-pre-68", status = "todo", }, { category = "mkiv", filename = "s-pre-69", status = "todo", }, { category = "mkiv", filename = "s-pre-70", status = "todo", }, { category = "mkiv", filename = "s-pre-71", status = "todo", }, { category = "tex", filename = "s-pre-93", status = "todo", }, { category = "tex", filename = "s-pre-96", status = "todo", }, { category = "tex", filename = "s-ptj-01", status = "todo", }, { category = "mkiv", filename = "s-reg-01", status = "todo", }, { category = "mkiv", filename = "s-set-31", status = "todo", }, { category = "tex", filename = "s-syn-01", status = "todo", }, { category = "mkiv", filename = "s-sql-tables", loading = "s-sql-tables", status = "okay", }, { category = "mkiv", filename = "x-asciimath", status = "okay", }, { category = "mkiv", filename = "x-calcmath", status = "todo", }, { category = "mkiv", filename = "x-cals", status = "todo", }, { category = "mkiv", filename = "x-chemml", status = "todo", }, { category = "mkiv", filename = "x-ct", status = "todo", }, { category = "tex", filename = "x-dir-01", status = "todo", }, { category = "mkiv", filename = "x-dir-05", status = "todo", }, { category = "mkiv", filename = "x-entities", status = "okay", }, { category = "mkiv", filename = "x-foxet", status = "todo", }, { category = "mkiv", filename = "x-ldx", status = "todo", }, { category = "mkiv", filename = "x-mathml", status = "todo", }, { category = "mkiv", filename = "x-newmml", status = "todo", }, { category = "mkiv", comment = "pfsense xml configuration rendering", filename = "x-pfs-01", status = "okay", }, { category = "mkiv", filename = "x-physml", status = "todo", }, { category = "mkiv", filename = "x-res-01", status = "todo", }, { category = "mkiv", filename = "x-res-50", status = "todo", }, { category = "mkiv", filename = "x-set-11", status = "todo", }, { category = "mkiv", filename = "x-set-12", status = "todo", }, { category = "mkiv", filename = "x-udhr", status = "okay", }, { category = "mkiv", filename = "x-xtag", status = "todo", }, }, optional = { { category = "mkiv", filename = "bxml-apa", status = "todo", }, { category = "mkiv", filename = "colo-run", loading = "on demand", status = "okay", }, { category = "mkiv", comment = "always needs some work", filename = "cont-new", loading = "runtime", status = "todo", }, { category = "mkiv", filename = "font-run", loading = "on demand", status = "todo", }, { category = "mkiv", filename = "lxml-ctx", status = "okay", comment = "this is an experimental module", }, { category = "mkiv", filename = "meta-pdh", loading = "never", status = "okay", comment = "this is historic code that we keep around", }, { category = "mkiv", filename = "mult-prm", loading = "never", status = "okay", comment = "this is just a helper for generating files", }, { category = "mkiv", filename = "page-run", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "spac-adj", loading = "never", status = "obsolete", }, { category = "mkiv", filename = "supp-vis", loading = "never", status = "obsolete", comment = "replaced by a more modern variant", }, { category = "mkiv", filename = "symb-run", loading = "on demand", status = "okay", }, { category = "mkiv", filename = "type-run", loading = "on demand", status = "todo", }, }, resources = { { category = "ori", comment = "template for a user configuration file (with suffix mkiv)", filename = "cont-sys", loading = "runtime", status = "okay", }, { category = "lmx", filename = "context-base", status = "todo", }, { category = "lmx", filename = "context-characters", status = "todo", }, { category = "lmx", filename = "context-debug", status = "todo", }, { category = "lmx", filename = "context-error", status = "todo", }, { category = "lmx", filename = "context-fonttest", status = "todo", }, { category = "lmx", filename = "context-help", status = "todo", }, { category = "lmx", filename = "context-timing", status = "todo", }, { category = "pdf", filename = "context-version", status = "todo", }, { category = "png", filename = "context-version", status = "todo", }, { category = "css", comment = "layout specification for debug and error pages and web services", filename = "context", status = "okay", }, { category = "rme", comment = "readme file", filename = "context", status = "okay", }, { category = "ctx", comment = "example of a ctx file (for mtx-context)", filename = "core-ctx", status = "okay", }, { category = "css", filename = "export-example", status = "todo", }, { category = "rng", filename = "export-example", status = "todo", }, { category = "tex", filename = "export-example", status = "todo", }, { category = "xml", comment = "this file is auto-generated by mtx-language", filename = "lang-all", status = "okay", }, { category = "xml", filename = "lpdf-pda", status = "todo", }, { category = "xml", filename = "lpdf-pdx", status = "todo", }, { category = "rlx", filename = "rlxcache", status = "todo", }, { category = "rlx", filename = "rlxtools", status = "todo", }, { category = "ctx", filename = "s-mod", status = "todo", }, { category = "pdf", filename = "status-files", status = "todo", }, { category = "pdf", filename = "status-lua", status = "todo", }, { category = "tex", filename = "status-mkiv", status = "todo", }, { category = "xsd", filename = "x-chemml", status = "todo", }, { category = "xsd", filename = "x-contml", status = "todo", }, { category = "rng", filename = "x-corres", status = "todo", }, { category = "dtd", filename = "x-fig-00", status = "todo", }, { category = "xsd", filename = "x-fig-00", status = "todo", }, { category = "ctx", filename = "x-ldx", status = "todo", }, { category = "xsd", filename = "x-mathml", status = "todo", }, { category = "xsl", filename = "x-om2cml", status = "todo", }, { category = "xsl", filename = "x-openmath", status = "todo", }, { category = "ctx", comment = "runner for x-pfs-01", filename = "x-pfsense", status = "okay", }, { category = "xsd", filename = "x-physml", status = "todo", }, { category = "xsl", filename = "x-sm2om", status = "todo", }, }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-but.mkvi0000644000175000017500000010201112130411274024304 0ustar norbertnorbert%D \module %D [ file=scrn-but, % moved code %D version=1995.01.01, %D title=\CONTEXT\ Core Macros, %D subtitle=Interaction, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \restorestandardblank % better namespace for pos \writestatus{loading}{ConTeXt Screen Macros / Buttons} \registerctxluafile{scrn-but}{1.001} \unprotect %D Buttons are just what their names says: things that can be %D clicked (pushed) on. They are similar to \type{\goto}, %D except that the text argument is not interpreted. %D Furthermore one can apply anything to them that can be done %D with \type{\framed}. %D %D \startbuffer %D \button[width=3cm,height=1.5cm]{Exit}[ExitViewer] %D \stopbuffer %D %D \typebuffer %D %D gives %D %D \getbuffer %D %D This command is formally specified as: %D %D \showsetup{button} %D %D The characteristics can be set with: %D %D \showsetup{setupbuttons} \installcorenamespace{button} \installcorenamespace{buttonlocation} \installframedcommandhandler \??button {button} \??button \let\setupbuttons\setupbutton \appendtoks \setuevalue\currentbutton{\scrn_button_direct{\currentbutton}}% \to \everydefinebutton \unexpanded\def\scrn_button_direct#tag% {\begingroup \edef\currentbutton{#tag}% \doifelselocation {\dosingleempty\scrn_button_direct_status}% {\dosingleempty\scrn_button_direct_ignore}} \def\scrn_button_direct_status {\doifelse{\buttonparameter\c!state}\v!start \scrn_button_direct_indeed \scrn_button_direct_ignore} % empty=yes % % \button[settings]{}[action] % normally used at the tex end \def\scrn_button_direct_indeed[#settings]#text[#action]% {\iffirstargument \setupcurrentbutton[#settings]% \fi \scrn_button_make \buttonparameter \inheritedbuttonframed \letbuttonparameter \setbuttonparameter {#text}% {#action}% \endgroup} \def\scrn_button_direct_ignore[#settings]#text[#destination]% {\endgroup} \definebutton[button] % english \setupbuttons [\c!state=\v!start, \c!width=\v!fit, \c!height=\v!broad, \c!offset=0.25em, \c!frame=\v!on, \c!background=, \c!backgroundcolor=, \c!foregroundstyle=\buttonparameter\c!style, \c!foregroundcolor=\buttonparameter\c!color, \c!style=\interactionparameter\c!style, \c!color=\interactionparameter\c!color, \c!contrastcolor=\interactionparameter\c!contrastcolor, \c!samepage=\v!yes, \c!unknownreference=\v!yes, \c!distance=\zeropoint] % for menubuttons %D \macros %D {overlaybutton} %D %D For converience we provide: %D %D \starttyping %D \overlaybutton[reference] %D \stoptyping %D %D This command can be used to define overlays an/or can be %D used in the whatevertext areas, like: %D %D \starttyping %D \defineoverlay[PrevPage][\overlaybutton{PrevPage}] %D \setupbackgrounds[page][background=PrevPage] %D \setuptexttexts[\overlaybutton{NextPage}] %D \stoptyping %D %D For practical reasons, this macro accepts square brackets %D as well as braces. \unexpanded\def\overlaybutton {\dosingleempty\scrn_button_overlay} \def\scrn_button_overlay[#1]% {\iffirstargument \scrn_button_overlay_indeed{#1}% \else \expandafter\scrn_button_overlay_indeed \fi} \def\scrn_button_overlay_indeed#1% {\iflocation \gotobox{\overlayfakebox}[#1]% \fi} %D The renderers: \expandafter\let\csname\??buttonlocation\v!yes \endcsname\zerocount \expandafter\let\csname\??buttonlocation\v!empty \endcsname\plusone \expandafter\let\csname\??buttonlocation\v!no \endcsname\plustwo \expandafter\let\csname\??buttonlocation\v!none \endcsname\plusthree \expandafter\let\csname\??buttonlocation\v!normal \endcsname\plusone % default \expandafter\let\csname\??buttonlocation\s!default\endcsname\plusone % default \expandafter\let\csname\??buttonlocation\s!empty \endcsname\plusone % default \newconditional\c_scrn_button_skipped \def\scrn_button_make#currentparameter#inheritedframed#letparameter#setparameter#text#action% {\begingroup \attribute\referenceattribute\attributeunsetvalue \global\setfalse\c_scrn_button_skipped \chardef\locationboxpagestate\csname\??buttonlocation#currentparameter\c!samepage\endcsname % ?? bt: todo \doifreferencefoundelse{#action}\scrn_button_make_yes\scrn_button_make_nop #currentparameter% #inheritedframed% #letparameter% #setparameter {#text}% \endgroup} \def\scrn_button_make_yes {\scratchcounter\referencerealpage\relax % called in otr \ifcase\scratchcounter \expandafter\scrn_button_make_normal % no state : something else than a page reference \else\ifnum\scratchcounter=\realpageno \expandafter\expandafter\expandafter\scrn_button_make_yes_same \else \expandafter\expandafter\expandafter\scrn_button_make_yes_other \fi\fi} \def\scrn_button_make_yes_same {\ifcase\locationboxpagestate\relax \expandafter\scrn_button_make_contrast % same page: yes: same page or not ... todo \or \expandafter\scrn_button_make_empty % same page: empty but frame: no click \or \expandafter\scrn_button_make_nothing % same page: empty no frame: no \else \expandafter\scrn_button_make_skipped % same page: nothing at all \fi} \def\scrn_button_make_yes_other {\ifcase\locationboxpagestate\relax \expandafter\scrn_button_make_normal % other page: yes: same page or not ... todo \or \expandafter\scrn_button_make_normal % other page: empty but frame: no click \or \expandafter\scrn_button_make_normal % other page: empty no frame: no \else \expandafter\scrn_button_make_skipped % other page: nothing at all \fi} \def\scrn_button_make_nop {\ifcase\locationboxpagestate\relax \expandafter\scrn_button_make_framed \or \expandafter\scrn_button_make_empty \or \expandafter\scrn_button_make_nothing \or \expandafter\scrn_button_make_skipped \fi} \def\scrn_button_make_framed#currentparameter#inheritedframed#letparameter#setparameter#text% {#inheritedframed{\ignorespaces#text\removeunwantedspaces}} \def\scrn_button_make_skipped#currentparameter#inheritedframed#letparameter#setparameter#text% {\global\settrue\c_scrn_button_skipped} \def\scrn_button_make_normal#currentparameter#inheritedframed#letparameter#setparameter#text% {\ctxlua{structures.references.injectcurrentset(nil,nil)}% \hbox attr \referenceattribute \lastreferenceattribute {#inheritedframed{\ignorespaces#text\removeunwantedspaces}}} \def\scrn_button_make_contrast#currentparameter#inheritedframed#letparameter#setparameter#text% {\ctxlua{structures.references.injectcurrentset(nil,nil)}% \hbox attr \referenceattribute \lastreferenceattribute {#setparameter\c!foregroundcolor{#currentparameter\c!contrastcolor}% #inheritedframed{\ignorespaces#text\removeunwantedspaces}}} \def\scrn_button_make_empty#currentparameter#inheritedframed#letparameter#setparameter#text% {#letparameter\c!empty\v!yes #inheritedframed{\ignorespaces#text\removeunwantedspaces}} \def\scrn_button_make_nothing#currentparameter#inheritedframed#letparameter#setparameter#text% {#letparameter\c!empty\v!yes #letparameter\c!frame\empty #letparameter\c!background\empty #inheritedframed{\ignorespaces#text\removeunwantedspaces}} %D Menus: %D %D \starttyping %D \setuppapersize %D [S6][S6] %D %D \setuplayout %D [backspace=6cm, cutspace=6cm, %D leftedge=3cm, rightedge=3cm, %D leftmargin=1cm, rightmargin=1cm, %D margindistance=5mm, edgedistance=5mm, %D topspace=4cm, bottomspace=4cm, %D header=0pt, footer=0pt, %D top=1cm, bottom=1cm, %D topdistance=5mm, bottomdistance=5mm, %D width=middle, height=middle] %D %D \setupinteraction %D [state=start, %D menu=on] %D %D \setupinteractionmenu %D [right] %D [state=start,background=color,frame=off,backgroundcolor=red,color=white,contrastcolor=blue] %D \setupinteractionmenu %D [left] %D [state=start,background=color,frame=off,backgroundcolor=green,color=white] %D \setupinteractionmenu %D [top] %D [state=start,background=color,frame=off,backgroundcolor=blue,color=white] %D \setupinteractionmenu %D [bottom] %D [state=start,background=color,frame=off,backgroundcolor=yellow,color=white] %D %D \setupinteractionmenu %D [left] %D [state=local] %D \setupinteractionmenu %D [bottom] %D [state=local] %D %D \startinteractionmenu[right] %D \startbut [page(2)] Page 2 \stopbut %D \startbut [page(1)] Page 1 \stopbut %D \includemenu[left] %D \includemenu[bottom] %D \stopinteractionmenu %D %D \startinteractionmenu[left] %D \startbut [page(1)] Page 1 \stopbut %D \startbut [page(2)] Page 2 \stopbut %D \stopinteractionmenu %D %D \startinteractionmenu[top] %D \startbut [page(1)] Page 1 \stopbut %D \startbut [page(2)] Page 2 \stopbut %D \stopinteractionmenu %D %D \startinteractionmenu[bottom] %D \startbut [page(2)] Page 2 \stopbut %D \startbut [page(1)] Page 1 \stopbut %D \stopinteractionmenu %D \stoptyping %D %D \starttyping %D \startinteractionmenu[rechts] %D \startbut [eerste] eerste \stopbut %D \starttxt hello world \stoptxt %D \startbut [tweede] tweede \stopbut %D \startnop \stopnop %D \startbut [tweede] tweede \stopbut %D \startrul whow \stoprul %D \startbut [tweede] tweede \stopbut %D \startraw hello world \stopraw %D \startbut [tweede] tweede \stopbut %D \startcom \vfill \stopcom %D \startbut [derde] derde \stopbut %D \stopinteractionmenu %D \stoptyping %D %D \starttyping %D \setupinteractionmenu[right][samepage=yes, unknownreference=yes] %D \setupinteractionmenu[right][samepage=empty,unknownreference=empty] %D \setupinteractionmenu[right][samepage=no, unknownreference=no] %D \setupinteractionmenu[right][samepage=none, unknownreference=none] %D \stoptyping \installcorenamespace{menu} \installcorenamespace{menutoks} \installcorenamespace{menustate} \installcorenamespace{menupacker} \installcorenamespace{menualign} \installframedcommandhandler \??menu {interactionmenu} \??menu \let\setupinteractionmenus\setupinteractionmenu \let\scrn_menu_action\relax \let\scrn_menu_define_original\defineinteractionmenu \unexpanded\def\defineinteractionmenu {\dotripleempty\scrn_menu_define} \def\scrn_menu_define[#tag][#category][#settings]% category reflects location, settings can be parent {\ifthirdargument \doifassignmentelse{#settings}% {\scrn_menu_define_original[#tag][#category][\c!category=#category,#settings]}% child definition {\scrn_menu_define_original[#tag][#settings][\c!category=#category]}% % child definition \scrn_menu_register{#tag}{#category}% \else\ifsecondargument \doifassignmentelse{#category}% {\scrn_menu_define_original[#tag][#category]}% % root definition {\scrn_menu_define_original[#tag][#category][\c!category=#category]% % child definition \scrn_menu_register{#tag}{#category}}% \else \scrn_menu_define_original[#tag]% % root definition \fi\fi} \def\scrn_menu_register#tag#category% {\ifcsname\??menutoks#category\endcsname \else \expandafter\newtoks \csname\??menutoks#category\endcsname \expandafter\setfalse\csname\??menustate#category\endcsname \fi \normalexpanded{\csname\??menutoks#category\endcsname{\the\csname\??menutoks#category\endcsname\scrn_menu_action{#tag}}}} \def\scrn_menu_actions#category% {\the\csname\??menutoks#category\endcsname} %D Fill menus: \normalexpanded{\long\def\expandafter\noexpand\csname\e!start\v!interactionmenu\endcsname[#tag]#content\expandafter\noexpand\csname\e!stop\v!interactionmenu\endcsname}% {\def\currentinteractionmenu{#tag}% \expandafter\settrue\csname\??menustate\interactionmenuparameter\c!category\endcsname \setinteractionmenuparameter\c!menu{#content}} \def\resetinteractionmenu[#tag]% {\def\currentinteractionmenu{#tag}% \resetinteractionmenuparameter\c!menu} %D Placement of menus: %D %D The offset mechanism is not the same as in in \MKII. There we %D adapted automatically to offsets in the text backgrounds. Here we %D have a bit more (but manual) control. %D %D \starttyping %D \setupbackgrounds %D [text][text] %D [background=color,backgroundcolor=gray,backgroundoffset=2mm] %D %D \setupbackgrounds %D [text] %D [rightedge,leftedge] %D [background=color,backgroundcolor=gray] %D %D \setupbackgrounds %D [top,bottom] %D [text] %D [background=color,backgroundcolor=gray] %D %D \setupinteractionmenu %D [right] %D [topoffset=0mm,bottomoffset=0mm] %D %D \setupinteractionmenu %D [top] %D [topoffset=2mm,bottomoffset=2mm,rightoffset=2mm,leftoffset=2mm] %D \stoptyping %D %D The no longer hard coded text areas offset compensation makes tuning %D easier. After all, menus need some setup anyway. \newbox \b_scrn_menu \newdimen\d_scrn_menu_next_distance \newdimen\d_scrn_menu_final_width \newdimen\d_scrn_menu_final_height \newdimen\d_scrn_menu_used_width \newdimen\d_scrn_menu_used_height \newdimen\d_scrn_menu_asked_width \newdimen\d_scrn_menu_asked_height \newdimen\d_scrn_menu_offset_top \newdimen\d_scrn_menu_offset_bottom \newdimen\d_scrn_menu_offset_left \newdimen\d_scrn_menu_offset_right \newconditional\c_scrn_menu_zerodimensions \def\scrn_menu_set_used {\doassigncheckedframeoffset\d_scrn_menu_offset_left {\interactionmenuparameter\c!leftoffset }% \doassigncheckedframeoffset\d_scrn_menu_offset_right {\interactionmenuparameter\c!rightoffset }% \doassigncheckedframeoffset\d_scrn_menu_offset_top {\interactionmenuparameter\c!topoffset }% \doassigncheckedframeoffset\d_scrn_menu_offset_bottom{\interactionmenuparameter\c!bottomoffset}% \d_scrn_menu_asked_width \interactionmenuparameter\c!maxwidth \d_scrn_menu_asked_height \interactionmenuparameter\c!maxheight \d_scrn_menu_used_width\dimexpr \d_scrn_menu_asked_width + \d_scrn_menu_offset_left + \d_scrn_menu_offset_right \relax \d_scrn_menu_used_height\dimexpr \d_scrn_menu_asked_height + \d_scrn_menu_offset_top + \d_scrn_menu_offset_bottom \relax} \def\scrn_menu_set_final {\d_scrn_menu_final_width \namedinteractionmenuparameter\askedinteractionmenulocation\c!maxwidth \d_scrn_menu_final_height\namedinteractionmenuparameter\askedinteractionmenulocation\c!maxheight} \def\scrn_menu_apply_final {\ifconditional\c_scrn_menu_zerodimensions \wd\b_scrn_menu\zeropoint \ht\b_scrn_menu\zeropoint \else \wd\b_scrn_menu\d_scrn_menu_final_width \ht\b_scrn_menu\d_scrn_menu_final_height \fi \dp\b_scrn_menu\zeropoint} \def\scrn_menu_apply_used {\ifdim\d_scrn_menu_offset_left=\zeropoint \else \setbox\b_scrn_menu\hbox{\hskip-\d_scrn_menu_offset_left \box\b_scrn_menu}% \fi \ifdim\d_scrn_menu_offset_bottom=\zeropoint \else \setbox\b_scrn_menu\hbox{\lower \d_scrn_menu_offset_bottom \box\b_scrn_menu}% \fi \wd\b_scrn_menu\d_scrn_menu_asked_width \ht\b_scrn_menu\d_scrn_menu_asked_height \dp\b_scrn_menu\zeropoint} \setvalue{\??menualign\v!right }{\let\scrn_menu_left_align\raggedright} \setvalue{\??menualign\v!left }{\let\scrn_menu_left_align\raggedleft} \setvalue{\??menualign\v!flushright}{\let\scrn_menu_left_align\raggedleft} \setvalue{\??menualign\v!flushleft }{\let\scrn_menu_left_align\raggedright} \setvalue{\??menualign\v!middle }{\let\scrn_menu_left_align\raggedcenter} \setvalue{\??menualign\v!low }{\let\scrn_menu_top_align\vss\let\scrn_menu_bottom_align\relax} \setvalue{\??menualign\v!high }{\let\scrn_menu_top_align\relax\let\scrn_menu_bottom_align\vss} \setvalue{\??menualign\v!lohi }{\let\scrn_menu_top_align\vss\let\scrn_menu_bottom_align\vss} \let\scrn_menu_left_align \relax \let\scrn_menu_right_align \relax \let\scrn_menu_top_align \relax \let\scrn_menu_bottom_align\relax \def\scrn_menu_set_align {\csname\??menualign\interactionmenuparameter\c!itemalign\endcsname} %D Hook into the pagebuilder (as less testing as possible): \def\scrn_menu_insert {\iflocation \expandafter\scrn_menu_insert_checked \else \expandafter\gobbleoneargument \fi} \def\scrn_menu_insert_checked#location% {\ifconditional\csname\??menustate#location\endcsname \scrn_menu_insert_indeed{#location}% \fi} \def\scrn_menu_insert_indeed#location% {\begingroup \xdef\askedinteractionmenulocation{#location}% \scrn_menu_set_final \ifcase\d_scrn_menu_final_width \else \ifcase\d_scrn_menu_final_height \else \forgetall \global\d_scrn_menu_next_distance\zeropoint \let\scrn_menu_action\scrn_menu_package_indeed \the\everysetmenucommands \csname\??menupacker\namedinteractionmenuparameter\askedinteractionmenulocation\c!alternative\endcsname \fi \fi \endgroup} %D This calls: % can be \c!command for vertical/horizontal \setvalue{\??menupacker\v!vertical}% all menus {\let\scrn_menu_packager\scrn_menu_packager_vertical \setbox\b_scrn_menu\hbox{\scrn_menu_actions\askedinteractionmenulocation}% \scrn_menu_apply_final \box\b_scrn_menu} \setvalue{\??menupacker\v!horizontal}% all menus {\let\scrn_menu_packager\scrn_menu_packager_horizontal \setbox\b_scrn_menu\vbox{\scrn_menu_actions\askedinteractionmenulocation}% \scrn_menu_apply_final \box\b_scrn_menu} % stop : skipped % start: processed % local: skipped but can be included % empty: processed but invisible \unexpanded\def\scrn_menu_package_indeed#tag% one menu {\begingroup \edef\currentinteractionmenu{#tag}% \edef\currentinteractionmenustate{\interactionmenuparameter\c!state}% \ifx\currentinteractionmenustate\v!start \scrn_menu_packager \else\ifx\currentinteractionmenustate\v!empty \scrn_menu_packager \fi\fi \endgroup} %D With the packager being one of: \let\currentinteractionmenudistance\!!zeropoint \def\scrn_menu_packager_vertical {\scrn_menu_set_used \hskip\d_scrn_menu_next_distance \setbox\b_scrn_menu\hbox to \d_scrn_menu_used_width {\ifx\currentinteractionmenustate\v!empty \else \interactionmenuparameter\c!left \scrn_menu_package_vertical{\strictinteractionmenuparameter\c!menu}% \interactionmenuparameter\c!right \fi}% \edef\currentinteractionmenudistance{\interactionmenuparameter\c!distance}% \ifx\currentinteractionmenudistance\v!overlay \global\d_scrn_menu_next_distance\zeropoint \wd\b_scrn_menu\zeropoint \else \global\d_scrn_menu_next_distance\currentinteractionmenudistance \scrn_menu_apply_used \fi \box\b_scrn_menu} \def\scrn_menu_packager_horizontal {\scrn_menu_set_used \vskip\d_scrn_menu_next_distance \scrn_menu_set_align \setbox\b_scrn_menu\vbox to \d_scrn_menu_used_height {\ifx\currentinteractionmenustate\v!none \else \scrn_menu_top_align \interactionmenuparameter\c!before \scrn_menu_package_horizontal{\strictinteractionmenuparameter\c!menu}% \interactionmenuparameter\c!after \scrn_menu_bottom_align \fi}% \edef\currentinteractionmenudistance{\interactionmenuparameter\c!distance}% \ifx\currentinteractionmenudistance\v!overlay \global\d_scrn_menu_next_distance\zeropoint \offinterlineskip \dp\b_scrn_menu\zeropoint \ht\b_scrn_menu\zeropoint \else \global\d_scrn_menu_next_distance\currentinteractionmenudistance \scrn_menu_apply_used \fi \box\b_scrn_menu} %D For a right menu, a sequence of calls to \type %D {right_menu_button} is generated. %D %D \starttyping %D right_menu_button (n, p, s=0/1/2, x, y, w, h, d) ; %D \stoptyping %D %D Here, n is the number of the button, s a status variable, %D while the rest is positional info. The status variable is %D 0, 1 or~2: not found, found and found but current page. \newcount \c_scrn_menu_position \newconstant \c_scrn_menu_page_mode % 0=notfound 1=found 2=currentpage \newconditional\c_scrn_menu_positioning \newtoks \t_scrn_menu_meta_data \def\scrn_menu_button_meta_template {\askedinteractionmenulocation _menu_button(% \number\c_scrn_menu_position,% \number\c_scrn_menu_page_mode,% \MPpos{\askedinteractionmenulocation:\number\c_scrn_menu_position}% );} \def\MPmenubuttons#1{\the\t_scrn_menu_meta_data} \appendtoks \global\t_scrn_menu_meta_data\emptytoks \to \everyshipout \def\scrn_menu_whole_position % cannot happen in previous due to align {\setbox\b_scrn_menu\hbox \bgroup \hpos{menu:\askedinteractionmenulocation:\the\realpageno}{\box\b_scrn_menu}% \egroup} % removed: \restorestandardblank (vspacing) ... should happen elsewhere \def\scrn_menu_package_vertical#content% {\begingroup \global\c_scrn_menu_position\zerocount \def\scrn_menu_between_action_indeed{\interactionmenuparameter\c!inbetween}% \doifelse{\interactionmenuparameter\c!position}\v!yes\settrue\setfalse\c_scrn_menu_positioning \scrn_menu_set_align \setbox\b_scrn_menu\vbox to \d_scrn_menu_used_height \bgroup \hsize\d_scrn_menu_used_width \scrn_menu_left_align \interactionmenuparameter\c!before\relax \ignorespaces#content\unskip \interactionmenuparameter\c!after \scrn_menu_right_align \egroup \ifconditional\c_scrn_menu_positioning \scrn_menu_whole_position \fi \box\b_scrn_menu \endgroup} \def\scrn_menu_package_horizontal#content% {\begingroup \global\c_scrn_menu_position\zerocount \def\scrn_menu_between_action_indeed{\interactionmenuparameter\c!middle}% \doifelse{\interactionmenuparameter\c!position}\v!yes\settrue\setfalse\c_scrn_menu_positioning \setbox\b_scrn_menu\hbox to \d_scrn_menu_used_width \bgroup \interactionmenuparameter\c!left\relax \ignorespaces#content\unskip \interactionmenuparameter\c!right \egroup \ifconditional\c_scrn_menu_positioning \scrn_menu_whole_position \fi \box\b_scrn_menu \endgroup} \def\scrn_menu_action_start {\dontleavehmode \begingroup} \def\scrn_menu_action_stop {\ifconditional\c_scrn_button_skipped \else \scrn_menu_between_action_indeed \fi \endgroup \ignorespaces} \unexpanded\def\scrn_menu_raw_start[#action]#text\stopraw {\scrn_menu_action_start \gotobox{\ignorespaces#text\unskip}[#action]% \scrn_menu_action_stop} \unexpanded\def\scrn_menu_but_start[#action]#text\stopbut {\scrn_menu_action_start \ifconditional\c_scrn_menu_positioning \expandafter\scrn_button_make_position \else \expandafter\scrn_button_make \fi \interactionmenuparameter \inheritedinteractionmenuframed \letinteractionmenuparameter \setinteractionmenuparameter {#text}% {#action}% \scrn_menu_action_stop} \def\scrn_button_make_position#currentparameter#inheritedframed#letparameter#setparameter#text#action% {\global\advance\c_scrn_menu_position\plusone \doifreferencefoundelse{#action}% 0=not found, 1=same page, >1=elsewhere {\c_scrn_menu_page_mode\ifnum\currentreferencerealpage=\realpageno\plusone\else\plustwo\fi}% {\c_scrn_menu_page_mode\plustwo}% \doglobal\appendetoks \scrn_menu_button_meta_template \to \t_scrn_menu_meta_data \hpos {\askedinteractionmenulocation:\number\c_scrn_menu_position}% {\scrn_button_make #currentparameter% #inheritedframed% #letparameter% #setparameter% {#text}% {#action}}} \unexpanded\def\scrn_menu_got_start[#action]#text\stopgot {\scrn_menu_action_start \setupcurrentinteractionmenu[\c!frame=\v!off,\c!background=]% needs checking, was buttons \scrn_button_make \interactionmenuparameter \inheritedinteractionmenuframed \letinteractionmenuparameter \setinteractionmenuparameter {#text}% {#action}% \scrn_menu_action_stop} \unexpanded\def\scrn_menu_nop_start#text\stopnop {\scrn_menu_action_start \letinteractionmenuparameter\c!frame\v!off \letinteractionmenuparameter\c!background\empty \letinteractionmenuparameter\v!yes \inheritedinteractionmenuframed{\ignorespaces#text\removeunwantedspaces}% \scrn_menu_action_stop} \unexpanded\def\scrn_menu_txt_start#text\stoptxt {\scrn_menu_action_start \letinteractionmenuparameter\c!frame\v!off \letinteractionmenuparameter\c!background\empty \inheritedinteractionmenuframed{\ignorespaces#text\removeunwantedspaces}% \scrn_menu_action_stop} \unexpanded\def\scrn_menu_rul_start#text\stoprul {\scrn_menu_action_start \inheritedinteractionmenuframed{\ignorespaces#text\removeunwantedspaces}% \scrn_menu_action_stop} \unexpanded\def\scrn_menu_com_start#text\stopcom {\ignorespaces#text\removeunwantedspaces \ignorespaces} \unexpanded\def\scrn_menu_raw#content\\{\scrn_menu_raw_start#content\stopraw} \let\stopraw\relax \unexpanded\def\scrn_menu_but#content\\{\scrn_menu_but_start#content\stopbut} \let\stopbut\relax \unexpanded\def\scrn_menu_got#content\\{\scrn_menu_got_start#content\stopgot} \let\stopgot\relax \unexpanded\def\scrn_menu_nop#content\\{\scrn_menu_nop_start#content\stopnop} \let\stopnop\relax \unexpanded\def\scrn_menu_txt#content\\{\scrn_menu_txt_start#content\stoptxt} \let\stoptxt\relax \unexpanded\def\scrn_menu_rul#content\\{\scrn_menu_rul_start#content\stoprul} \let\stoprul\relax \unexpanded\def\scrn_menu_com#content\\{\scrn_menu_com_start#content\stopcom} \let\stopcom\relax \newtoks\everysetmenucommands % public \appendtoks \let\raw\scrn_menu_raw \let\startraw\scrn_menu_raw_start \let\stopraw\relax \let\but\scrn_menu_but \let\startbut\scrn_menu_but_start \let\stopbut\relax \let\got\scrn_menu_got \let\startgot\scrn_menu_got_start \let\stopgot\relax \let\nop\scrn_menu_nop \let\startnop\scrn_menu_nop_start \let\stopnop\relax \let\txt\scrn_menu_txt \let\starttxt\scrn_menu_txt_start \let\stoptxt\relax \let\rul\scrn_menu_rul \let\startrul\scrn_menu_rul_start \let\stoprul\relax \let\com\scrn_menu_com \let\startcom\scrn_menu_com_start \let\stopcom\relax \to \everysetmenucommands %D Sometimes handy: %D %D \starttyping %D \setupinteractionmenu %D [left] %D [state=local] %D %D \startinteractionmenu[right] %D ... %D \includemenu[left] %D ... %D \stopinteractionmenu %D \stoptyping \unexpanded\def\includemenu[#tag]% {\begingroup \edef\currentinteractionmenu{#tag}% \doif{\interactionmenuparameter\c!state}\v!local {\letinteractionmenuparameter\c!state\v!start \strictinteractionmenuparameter\c!menu}% \endgroup} %D Direct call (todo): \unexpanded\def\interactionmenu {\dodoubleempty\scrn_menu_interaction_menu} \def\scrn_menu_interaction_menu[#tag][#settings]% {\begingroup \edef\currentinteractionmenu{#tag}% \setupcurrentinteractionmenu[#settings]% \scrn_menu_insert{#tag}% \endgroup} %D Plugin handler: \unexpanded\def\scrn_menu_insert_content_indeed {\iflocation % here as we can have a fast turn-off \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \let\scrn_menu_insert_content_ignore\gobbleoneargument \appendtoks \doifelse{\interactionparameter\c!menu}\v!on {\let\scrn_menu_insert_content\scrn_menu_insert_content_indeed}% {\let\scrn_menu_insert_content\scrn_menu_insert_content_ignore}% \to \everysetupinteraction %D Plugs into the page builder: \unexpanded\def\scrn_menu_leftedge {\hbox to \leftedgewidth \bgroup \hsize\leftedgewidth \settrue\c_scrn_menu_zerodimensions \scrn_menu_insert\v!left \egroup \hskip-\leftedgewidth} \unexpanded\def\scrn_menu_rightedge {\hbox to \rightedgewidth \bgroup \hsize\rightedgewidth \settrue\c_scrn_menu_zerodimensions \scrn_menu_insert\v!right \egroup \hskip-\rightedgewidth} \unexpanded\def\scrn_menu_top {\vbox to \topheight \bgroup \vsize\topheight \settrue\c_scrn_menu_zerodimensions \scrn_menu_insert\v!top \kern\zeropoint \egroup \vskip-\topheight} \unexpanded\def\scrn_menu_bottom {\vbox to \bottomheight \bgroup \vsize\bottomheight \settrue\c_scrn_menu_zerodimensions \scrn_menu_insert\v!bottom \kern\zeropoint \egroup \vskip-\bottomheight} \appendtoks \scrn_menu_insert_content\scrn_menu_leftedge \to \leftedgetextcontent \appendtoks \scrn_menu_insert_content\scrn_menu_rightedge \to \rightedgetextcontent \appendtoks \scrn_menu_insert_content\scrn_menu_top \to \toptextcontent \appendtoks \scrn_menu_insert_content\scrn_menu_bottom \to \bottomtextcontent %D Initialization (root definitions, main builders): \defineinteractionmenu [\v!vertical] [\c!alternative=\v!vertical] \defineinteractionmenu [\v!horizontal] [\c!alternative=\v!horizontal] %D Initialization (parent definitions, 4 area builders): \defineinteractionmenu [\v!right ] [\v!right ] [\v!vertical ] \defineinteractionmenu [\v!left ] [\v!left ] [\v!vertical ] \defineinteractionmenu [\v!top ] [\v!top ] [\v!horizontal] \defineinteractionmenu [\v!bottom] [\v!bottom] [\v!horizontal] \setupinteraction [\c!menu=\v!off] \setupinteractionmenu [\c!offset=.25em, \c!position=\v!no, \c!frame=\v!on, \c!maxwidth=\hsize, \c!maxheight=\vsize, \c!background=, \c!backgroundcolor=, \c!foregroundstyle=\interactionmenuparameter\c!style, \c!foregroundcolor=\interactionmenuparameter\c!color, \c!style=\interactionparameter\c!style, \c!color=\interactionparameter\c!color, \c!contrastcolor=\interactionparameter\c!contrastcolor, \c!state=\v!start, \c!samepage=\v!yes, \c!unknownreference=\v!empty, \c!distance=\bodyfontsize, \c!topoffset=\zeropoint, \c!bottomoffset=\zeropoint, \c!leftoffset=\zeropoint, \c!rightoffset=\zeropoint] \setupinteractionmenu [\v!vertical] % not really a menu [\c!inbetween=\blank, \c!before=, \c!after=\vfil, %\c!width=\v!fit, \c!height=\v!broad] \setupinteractionmenu [\v!horizontal] % not really a menu [\c!middle=\hfil, %\c!left=\hss, %\c!right=\hss, \c!width=\v!fit, \c!height=\v!broad] \setupinteractionmenu [\v!left] [\c!itemalign=\v!flushright, \c!maxwidth=\leftedgewidth, \c!maxheight=\makeupheight] \setupinteractionmenu [\v!right] [\c!itemalign=\v!flushleft, \c!maxwidth=\rightedgewidth, \c!maxheight=\makeupheight] \setupinteractionmenu [\v!top] [\c!itemalign=\v!high, \c!maxwidth=\makeupwidth, \c!maxheight=\topheight] \setupinteractionmenu [\v!bottom] [\c!itemalign=\v!low, \c!maxwidth=\makeupwidth, \c!maxheight=\bottomheight] %D Lists: \definelistalternative [\v!left ] [\c!renderingsetup=strc:lists:rendering:menu] \definelistalternative [\v!right ] [\c!renderingsetup=strc:lists:rendering:menu] \definelistalternative [\v!top ] [\c!renderingsetup=strc:lists:rendering:menu] \definelistalternative [\v!bottom] [\c!renderingsetup=strc:lists:rendering:menu] \startsetups[strc:lists:rendering:menu] \startbut[internal(\currentlistentrylocation)] \limitatetext\currentlistentrytitle{\listparameter\c!maxwidth}\unknown \stopbut \stopsetups %D Sometimes handy: \unexpanded\def\menubutton % tag settings text action {\dodoubleempty\scrn_menu_menu_button} \def\scrn_button_direct_status {\doifelse{\buttonparameter\c!state}\v!start {\dosingleempty\scrn_button_direct_indeed}% {\dosingleempty\scrn_button_direct_ignore}} \def\scrn_menu_menu_button {\iflocation \expandafter\scrn_menu_menu_button_indeed \else \expandafter\scrn_menu_menu_button_ignore \fi} \def\scrn_menu_menu_button_indeed[#menutag][#settings]#text[#action]% {\ifsecondargument \scrn_menu_menu_button_a {#menutag}{#settings}{#text}{#action}% \else \doifassignmentelse{#menutag}\scrn_menu_menu_button_b\scrn_menu_menu_button_c {#menutag}{#text}{#action}% \fi} \def\scrn_menu_menu_button_ignore[#menutag][#settings]#text[#action]% {} \def\scrn_menu_menu_button_a#tag#settings#text#action% {\doif{\interactionmenuparameter\c!state}\v!start {\dontleavehmode \begingroup \edef\currentinteractionmenu{#tag}% \setupcurrentinteractionmenu[#settings]% \scrn_button_make \interactionmenuparameter \inheritedinteractionmenuframed \letinteractionmenuparameter \setinteractionmenuparameter {#text}% {#action}% \endgroup}} \def\scrn_menu_menu_button_b#settings#text#action% {\doif{\buttonparameter\c!state}\v!start {\dontleavehmode \begingroup \let\currentbutton\empty \setupcurrentbutton[#settings]% \scrn_button_make \buttonparameter \inheritedbuttonframed \letbuttonparameter \setbuttonparameter {#text}% {#action}% \endgroup}} \def\scrn_menu_menu_button_c#tag#text#action% {\doif{\interactionmenuparameter\c!state}\v!start {\dontleavehmode \begingroup \edef\currentinteractionmenu{#tag}% \scrn_button_make \interactionmenuparameter \inheritedinteractionmenuframed \letinteractionmenuparameter \setinteractionmenuparameter {#text}% {#action}% \endgroup}} %D Untested: \unexpanded\def\registermenubuttons {\dodoubleempty\scrn_menu_register_menu_buttons} \def\scrn_menu_register_menu_buttons[#menu][#register]% {\ifsecondargument \ctxcommand{registerbuttons("menu","#register","\currentlanguage")} \else \ctxcommand{registerbuttons("","#menu","\currentlanguage")} \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-env.lua0000644000175000017500000001006512130411274024107 0ustar norbertnorbertif not modules then modules = { } end modules ['core-env'] = { version = 1.001, comment = "companion to core-env.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- maybe this will move to the context name space although the -- plurals are unlikely to clash with future tex primitives -- -- if tex.modes['xxxx'] then .... else .... end local P, C, S, Cc, lpegmatch, patterns = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc, lpeg.match, lpeg.patterns local csname_id = token.csname_id local create = token.create local texcount = tex.count local texsetcount = tex.setcount local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local undefined = csname_id("*undefined*crap*") local iftrue = create("iftrue")[2] -- inefficient hack tex.modes = allocate { } tex.systemmodes = allocate { } tex.constants = allocate { } tex.conditionals = allocate { } tex.ifs = allocate { } local modes = { } local systemmodes = { } setmetatableindex(tex.modes, function(t,k) local m = modes[k] if m then return m() else local n = "mode>" .. k if csname_id(n) == undefined then return false else modes[k] = function() return texcount[n] >= 1 end return texcount[n] >= 1 end end end) setmetatableindex(tex.systemmodes, function(t,k) local m = systemmodes[k] if m then return m() else local n = "mode>*" .. k if csname_id(n) == undefined then return false else systemmodes[k] = function() return texcount[n] >= 1 end return texcount[n] >= 1 end end end) setmetatableindex(tex.constants, function(t,k) return csname_id(k) ~= undefined and texcount[k] or 0 end) setmetatableindex(tex.conditionals, function(t,k) -- 0 == true return csname_id(k) ~= undefined and texcount[k] == 0 end) setmetatableindex(tex.ifs, function(t,k) -- k = "if" .. k -- better not return csname_id(k) ~= undefined and create(k)[2] == iftrue -- inefficient, this create, we need a helper end) -- todo : global -- not possible as we let at the tex end to zerocount and plusone -- -- function tex.settrue(name,glob) -- if glob then -- texsetcount("global",name,0) -- else -- texcount[name] = 0 -- end -- end -- -- function tex.setfalse(name,glob) -- if glob then -- texsetcount("global",name,1) -- else -- texcount[name] = 1 -- end -- end ---- arg = P("{") * C(patterns.nested) * P("}") + Cc("") local sep = S("), ") local str = C((1-sep)^1) local tag = P("(") * C((1-S(")" ))^1) * P(")") local arg = P("(") * C((1-S("){"))^1) * P("{") * C((1-P("}"))^0) * P("}") * P(")") local pattern = ( P("lua") * tag / context.luasetup + P("xml") * arg / context.setupwithargument -- or xmlw as xmlsetup has swapped arguments + (P("tex") * tag + str) / context.texsetup + sep^1 )^1 function commands.autosetups(str) lpegmatch(pattern,str) end -- new (inefficient) local lookuptoken = token.lookup local dimencode = lookuptoken("scratchdimen" )[1] local countcode = lookuptoken("scratchcounter")[1] local tokencode = lookuptoken("scratchtoken" )[1] local skipcode = lookuptoken("scratchskip" )[1] local types = { [dimencode] = "dimen", [countcode] = "count", [tokencode] = "token", [skipcode ] = "skip", } function tex.isdimen(name) return lookuptoken(name)[1] == dimencode end function tex.iscount(name) return lookuptoken(name)[1] == countcode end function tex.istoken(name) return lookuptoken(name)[1] == tokencode end function tex.isskip(name) return lookuptoken(name)[1] == skipcode end function tex.type(name) return types[lookuptoken(name)[1]] or "macro" end -- inspect(tex.isdimen("xxxxxxxxxxxxxxx")) -- inspect(tex.isdimen("textwidth")) context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-con.lua0000644000175000017500000000046211754241457024140 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-con'] = { version = 1.001, comment = "companion to strc-con.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- empty context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mxa.mkii0000644000175000017500000001151211571377075024307 0ustar norbertnorbert\defineMMLsynonym bkarow rbarr \defineMMLsynonym circlearrowleft olarr \defineMMLsynonym circlearrowright orarr \defineMMLsynonym curvearrowleft cularr \defineMMLsynonym curvearrowright curarr \defineMMLsynonym dbkarow rBarr \defineMMLsynonym DoubleDownArrow dArr \defineMMLsynonym DoubleLeftRightArrow hArr \defineMMLsynonym DoubleLongLeftArrow xlArr \defineMMLsynonym DoubleLongLeftRightArrow xhArr \defineMMLsynonym DoubleLongRightArrow xrArr \defineMMLsynonym DoubleUpArrow uArr \defineMMLsynonym DoubleUpDownArrow vArr \defineMMLsynonym Downarrow dArr \defineMMLsynonym DownArrowUpArrow duarr \defineMMLsynonym downdownarrows ddarr \defineMMLsynonym downharpoonleft dharl \defineMMLsynonym downharpoonright dharr \defineMMLsynonym DownLeftVector lhard \defineMMLsynonym DownRightVector rhard \defineMMLsynonym drbkarow RBarr \defineMMLsynonym Equilibrium rlhar \defineMMLsynonym hksearow searhk \defineMMLsynonym hkswarow swarhk \defineMMLsynonym hookleftarrow larrhk \defineMMLsynonym hookrightarrow rarrhk \defineMMLsynonym LeftArrowRightArrow lrarr \defineMMLsynonym leftarrowtail larrtl \defineMMLsynonym LeftDownVector dharl \defineMMLsynonym leftharpoondown lhard \defineMMLsynonym leftharpoonup lharu \defineMMLsynonym leftleftarrows llarr \defineMMLsynonym LeftRightArrow harr \defineMMLsynonym Leftrightarrow hArr \defineMMLsynonym leftrightarrow harr \defineMMLsynonym leftrightarrows lrarr \defineMMLsynonym leftrightharpoons lrhar \defineMMLsynonym leftrightsquigarrow harrw \defineMMLsynonym LeftUpVector uharl \defineMMLsynonym LeftVector lharu \defineMMLsynonym Lleftarrow lAarr \defineMMLsynonym LongLeftArrow xlarr \defineMMLsynonym Longleftarrow xlArr \defineMMLsynonym longleftarrow xlarr \defineMMLsynonym LongLeftRightArrow xharr \defineMMLsynonym Longleftrightarrow xhArr \defineMMLsynonym longleftrightarrow xharr \defineMMLsynonym longmapsto xmap \defineMMLsynonym LongRightArrow xrarr \defineMMLsynonym Longrightarrow xrArr \defineMMLsynonym longrightarrow xrarr \defineMMLsynonym looparrowleft larrlp \defineMMLsynonym looparrowright rarrlp \defineMMLsynonym LowerLeftArrow swarr \defineMMLsynonym LowerRightArrow searr \defineMMLsynonym Lsh lsh \defineMMLsynonym mapsto map \defineMMLsynonym multimap mumap \defineMMLsynonym nearrow nearr \defineMMLsynonym nLeftarrow nlArr \defineMMLsynonym nleftarrow nlarr \defineMMLsynonym nLeftrightarrow nhArr \defineMMLsynonym nleftrightarrow nharr \defineMMLsynonym nRightarrow nrArr \defineMMLsynonym nrightarrow nrarr \defineMMLsynonym nwarrow nwarr \defineMMLsynonym ReverseEquilibrium lrhar \defineMMLsynonym ReverseUpEquilibrium duhar \defineMMLsynonym RightArrowLeftArrow rlarr \defineMMLsynonym rightarrowtail rarrtl \defineMMLsynonym RightDownVector dharr \defineMMLsynonym rightharpoondown rhard \defineMMLsynonym rightharpoonup rharu \defineMMLsynonym rightleftarrows rlarr \defineMMLsynonym rightleftharpoons rlhar \defineMMLsynonym rightrightarrows rrarr \defineMMLsynonym rightsquigarrow rarrw \defineMMLsynonym RightTeeArrow map \defineMMLsynonym RightUpVector uharr \defineMMLsynonym RightVector rharu \defineMMLsynonym Rrightarrow rAarr \defineMMLsynonym Rsh rsh \defineMMLsynonym searrow searr \defineMMLsynonym ShortLeftArrow slarr \defineMMLsynonym ShortRightArrow srarr \defineMMLsynonym swarrow swarr \defineMMLsynonym toea nesear \defineMMLsynonym tosa seswar \defineMMLsynonym twoheadleftarrow Larr \defineMMLsynonym twoheadrightarrow Rarr \defineMMLsynonym Uparrow uArr \defineMMLsynonym UpArrowDownArrow udarr \defineMMLsynonym UpDownArrow varr \defineMMLsynonym Updownarrow vArr \defineMMLsynonym updownarrow varr \defineMMLsynonym UpEquilibrium udhar \defineMMLsynonym upharpoonleft uharl \defineMMLsynonym upharpoonright uharr \defineMMLsynonym UpperLeftArrow nwarr \defineMMLsynonym UpperRightArrow nearr \defineMMLsynonym upuparrows uuarr context-2013.05.28.20130704/texmf-dist/tex/context/base/m-ntb-to-xtb.mkiv0000644000175000017500000000006611754241457025025 0ustar norbertnorbert\loadmkvifile{tabl-xnt} \mapTABLEtoxtable \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-new.mkiv0000644000175000017500000000401712161703335024316 0ustar norbertnorbert%D \module %D [ file=cont-new, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=New Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \newcontextversion{2013.05.28 00:36} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. \unprotect % \writestatus\m!system{beware: some patches loaded from cont-new.mkiv} % \attribute152\zerocount : marks ... lots of sweeps so best early in list %D Maybe: \unexpanded\def\tightvbox{\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\vbox} \unexpanded\def\tightvtop{\dowithnextbox{\ht\nextbox\zeropoint\box\nextbox}\vtop} %D Maybe: % \startluacode % function context.loadfile(filename) % context(string.strip(io.loaddata(resolvers.findfile(filename)))) % end % \stopluacode % % \edef\tufte{\cldcommand{loadfile("tufte.tex")}} %D Needs some work: \unexpanded\def\startgridcorrection {\dosingleempty\spac_grid_correction_start} \def\spac_grid_correction_start[#1]% {\ifgridsnapping \snaptogrid[#1]\vbox\bgroup \else \startbaselinecorrection \fi} \unexpanded\def\stopgridcorrection {\ifgridsnapping \egroup \else \stopbaselinecorrection \fi} \unexpanded\def\checkgridsnapping {\lineskip\ifgridsnapping\zeropoint\else\normallineskip\fi} %D Probably obsolete: \unexpanded\def\startcolumnmakeup % don't change {\bgroup \getrawnoflines\textheight % raw as we cna have topskip \setbox\scratchbox\vbox to \dimexpr\noflines\lineheight-\lineheight+\topskip\relax \bgroup \forgetall} \unexpanded\def\stopcolumnmakeup {\egroup \dp\scratchbox\zeropoint \wd\scratchbox\textwidth \box\scratchbox \egroup \page_otr_command_synchronize_hsize} %D Till we fixed all styles: \let\\=\crlf \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-format.tex0000644000175000017500000002771111754241457024157 0ustar norbertnorbert%D \module %D [ file=m-formay, %D version=ancient, %D title=\CONTEXT\ Modules, %D subtitle=Ancient Formatting Code, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Here is some code that I had laying around and had forgotten %D about. Let's make it a module and see if there is interest in %D such things. % \defineformatblock [poem] % \defineformatsegment [verse] % [poem] % \defineformatline [line] % [verse] % % \startpoem [title] [author] % \startverse [ref] % \startline [ref] % % block : voor na tussen *tekstletter *tekstkleur % % segment : voor na tussen *tekstletter *tekstkleur % : links rechts linkeroffset rechteroffset % : ?marge *evenmarge *onevenmarge breedte % : nummer *nummercommando *conversie % : nummerletter nummerkleur *label % % line : voor na tussen *tekstletter *tekstkleur % : nummer *nummercommando *conversie % : nummerletter nummerkleur *label % % * = todo \unprotect \definesystemvariable {fx} % format block \definesystemvariable {fy} % format segment \definesystemvariable {fz} % format line \def\defineformatblock {\dodoubleempty\dodefineformatblock} \def\dodefineformatblock[#1][#2]% {\setupformatblock [#1] [\c!before=\blank,\c!after=\blank,\c!inbetween=\blank, \c!textstyle=,\c!textcolor=,#2]% \setvalue{\e!start#1}{\startformatblock[#1]}% \setvalue{\e!stop #1}{\stopformatblock}} \def\setupformatblock {\dodoubleempty\dosetupformatblock} \def\setupformatblock[#1]% {\getparameters[\??fx#1]} \def\startformatblock[#1]% {\dotriplegroupempty\dostartformatblock{#1}} \def\dostartformatblock#1#2#3 {\bgroup \getvalue{\??fx#1\c!before} \doglobal\newcounter\formatsegmentcounter \doglobal\newcounter\formatlinecounter \doglobal\newcounter\formatlinesubcounter \doglobal\newcounter\formatlinemaxcounter \doifsomething{#2}{\leftaligned{#2}\getvalue{\??fx#1\c!inbetween}} \def\stopformatblock% {\doifsomething{#3}{\getvalue{\??fx#1\c!inbetween}\leftaligned{#3}} \getvalue{\??fx#1\c!after} \egroup}} \def\defineformatsegment {\dodoubleempty\dodefineformatsegment} \def\dodefineformatsegment[#1][#2]% {\setupformatsegment [#1] [\c!before=\blank,\c!after=\blank,\c!inbetween=\blank, \c!textstyle=,\c!textcolor=,\c!left=,\c!right=, \c!leftoffset=\!!zeropoint,\c!rightoffset=\!!zeropoint, %\c!margin=\!!zeropoint,\c!evenmargin=\!!zeropoint,\c!oddmargin=\hsize, \c!width=\hsize,\c!numberstyle=,\c!numbercolor=,\c!number=\v!no, \c!numbercommand=,\c!conversion=,\c!label=, #2]% \setvalue{\e!start#1}{\startformatsegment[#1]}% \setvalue{\e!stop #1}{\stopformatsegment}} \def\setupformatsegment {\dodoubleempty\dosetupformatsegment} \def\setupformatsegment[#1]% {\getparameters[\??fy#1]} \def\placeformatsegmentcounter {\formatsegmentcounter\quad\hphantom{\placeformatlinecounter}} \def\placeformatlinecounter {\formatlinecounter} \def\startformatsegment[#1]% {\bgroup \doifelsevalue{\??fy#1\c!number}\v!yes {\def\doplaceformatsegmentcounter {\inleftmargin {\doattributes{\??fy#1}\c!numberstyle\c!numbercolor {\placeformatsegmentcounter}}}} {\let\doplaceformatsegmentcounter\relax}% \getvalue{\??fy#1\c!before} \doglobal\increment\formatsegmentcounter \def\formatrightoffset{\getvalue{\??fy#1\c!rightoffset}} \def\formatleftoffset {\getvalue{\??fy#1\c!leftoffset}} \def\formatminwidth {\getvalue{\??fy#1\c!minwidth}} \def\formatwidth {\getvalue{\??fy#1\c!width}} %\def\formatmargin {\getvalue{\??fy#1\c!margin}} \def\formatbefore {\getvalue{\??fy#1\c!before}} \def\formatinbetween {\getvalue{\??fy#1\c!inbetween}} \def\formatafter {\getvalue{\??fy#1\c!after}} \def\formatleft {\getvalue{\??fy#1\c!left}} \def\formatright {\getvalue{\??fy#1\c!right}} \@@segmentvarianta \getvalue{@@segmentvariant\getvalue{\??fy#1\c!alternative}} \def\stopformatsegment {\getvalue{\??fy#1\c!after} \egroup}} \newif\iftraceformatblock \def\@@segmentvarianta % ragged right, symbols {\let\formatraggedness\raggedright \let\dostartformatline\dostartformatlineab \let\formatleftfirst\relax \let\formatrightfirst\hfill \let\formatleftnext \hfill \let\formatrightnext \relax} \def\@@segmentvariantb % ragged right, equal parts, symbols {\let\formatraggedness\raggedcenter \let\dostartformatline\dostartformatlineab \let\formatleftfirst\relax \let\formatrightfirst\hfill \let\formatleftnext \hfill \let\formatrightnext \relax} \def\@@segmentvariantc % ragged right {\let\formatraggedness\veryraggedright \let\dostartformatline\dostartformatlinecde \let\formatleftnext\relax \let\formatrightnext\hfill} \def\@@segmentvariantd % ragged center {\let\formatraggedness\veryraggedcenter \let\dostartformatline\dostartformatlinecde \let\formatleftnext\hfill \let\formatrightnext\hfill} \def\@@segmentvariante % ragged left {\let\formatraggedness\veryraggedleft \let\dostartformatline\dostartformatlinecde \let\formatleftnext\hfill \let\formatrightnext\relax} \def\defineformatline {\dodoubleempty\dodefineformatline} \def\dodefineformatline[#1][#2]% {\setupformatline [#1] [\c!before=\blank,\c!after=\blank,\c!inbetween=\blank, \c!textstyle=,\c!textcolor=, \c!number=\v!no,\c!numbercommand=,\c!conversion=, \c!numberstyle=,\c!numbercolor=,\c!label=, #2]% \setvalue{\e!start#1}{\startformatline[#1]}% \setvalue{\e!stop #1}{\stopformatline}} \def\setupformatline {\dodoubleempty\dosetupformatline} \def\setupformatline[#1]% {\getparameters[\??fz#1]} \newconditional\formatforcedbreak \def\startformatline[#1]% {\bgroup \doifelsevalue{\??fz#1\c!number}\v!yes {\def\doplaceformatlinecounter {\inleftmargin {\doattributes{\??fz#1}\c!numberstyle\c!numbercolor {\placeformatlinecounter}}}} {\let\doplaceformatlinecounter\relax}% \global\setfalse\formatforcedbreak \def\\{\break\global\settrue\formatforcedbreak}% \hsize\formatwidth \doglobal\increment\formatlinecounter \par \nobreak \def\stopformatline {\unskip\unskip\unskip\unskip\unskip\egroup \let\doplaceformatsegmentcounter\relax} \postponenotes \dowithnextbox{\dostartformatline}\hbox\bgroup\ignorespaces} \def\dostartformatlineab {%\dosetleftskipadaption\formatmargin %\advance\hsize-\leftskipadaption\relax \ifdim\nextboxwd>\hsize \beginofshapebox \forgetall \hangafter\plusone \hangindent\formatleftoffset \formatraggedness \hskip\formatrightoffset \unhbox\nextbox\par \endofshapebox %\advance\hsize \leftskipadaption \doglobal\newcounter\formatlinesubcounter \reshapebox {\doglobal\increment\formatlinesubcounter} \global\let\formatlinemaxcounter\formatlinesubcounter \reshapebox {\doglobal\decrement\formatlinesubcounter \ifnum\formatlinesubcounter=\zerocount \doplaceformatsegmentcounter \doplaceformatlinecounter \hskip-\formatrightoffset %\hskip\leftskipadaption \formatleftfirst \unhbox\shapebox \ifnum\formatlinemaxcounter>\plusone \ifx\formatright\empty\else \shapedhbox to \zeropoint{\formatright\hss}% \fi \fi \formatrightfirst \iftraceformatblock \ruledhskip\formatrightoffset\hskip-\formatrightoffset \fi \else %\hskip\leftskipadaption \iftraceformatblock \ruledhskip\formatleftoffset\hskip-\formatleftoffset \fi \formatleftnext \ifx\formatleft\empty\else \shapedhbox to \zeropoint{\hss\formatleft}% \fi \unhbox\shapebox \formatrightnext \fi} \flushshapebox \else \dontleavehmode\hbox {\doplaceformatsegmentcounter \doplaceformatlinecounter %\hskip\leftskipadaption \formatleftfirst \unhbox\nextbox \formatrightfirst} \fi \par \egroup} \def\dostartformatlinecde {%\dosetleftskipadaption\formatmargin %\advance\hsize -\leftskipadaption\relax \dimen0=\hsize \ifconditional\formatforcedbreak\else \ifdim\formatminwidth>\zeropoint\relax \ifdim\nextboxwd>\hsize \doloop {\global\dimen1=\dimen0 \beginofshapebox \hsize\dimen0 \forgetall \formatraggedness \unhcopy\nextbox\par \endofshapebox \reshapebox {\setbox\scratchbox=\hbox{\unhbox\shapebox}% \ifdim\wd\scratchbox<\dimen1 \global\dimen1=\wd\scratchbox \fi} \ifdim\dimen1<\formatminwidth\relax \advance\dimen0 by -.25em \else \exitloop \fi \ifdim\dimen0<10em \dimen0=\hsize \exitloop \fi} \fi \fi \fi \beginofshapebox \hsize\dimen0 \forgetall \formatraggedness \unhcopy\nextbox\par \endofshapebox %\advance\hsize \leftskipadaption \doglobal\newcounter\formatlinesubcounter \reshapebox {\doglobal\increment\formatlinesubcounter}% \global\let\formatlinemaxcounter\formatlinesubcounter \reshapebox {\doglobal\decrement\formatlinesubcounter \ifnum\formatlinesubcounter=\zerocount \doplaceformatsegmentcounter \doplaceformatlinecounter \fi %\hskip\leftskipadaption \formatleftnext \unhbox\shapebox \formatrightnext\strut}% strut prevents unskip \flushshapebox \par \egroup} \defineformatblock[poem] [\c!before=\blank, \c!inbetween={\blank[\v!medium]}, \c!after=\blank] \defineformatsegment[verse] [\c!alternative=\v!left, \c!width=\hsize, %\c!margin=\!!zeropoint, \c!before={\blank[\v!medium]}, \c!after={\blank[\v!medium]}, \c!inbetween={\blank[\v!medium]}, \c!leftoffset=3em, \c!rightoffset=2em, \c!minwidth=5em, \c!left={$[$\enspace}, \c!right={\enspace$]$}] \defineformatline[line] [] \protect \doifnotmode{demo} {\endinput} % evt defineblank[formatbefore,formatinbetween,formatafter] %\showframe \traceformatblocktrue \usemodule[visual] \setuplayout[height=middle,topspace=1cm,header=0pt,footer=0pt] \setupbodyfont[10pt] % All interfaces supported, but testing with english; todo: % more options, more alternatives, inheritance and mixed % definitions, and so. \starttext \startbuffer \startbuffer[poem] \startpoem{A Random Poem}{Hans Hagen} \startverse \startline \fakewords{4}{8} \stopline \startline \fakewords{4}{8} \stopline \startline \fakewords{4}{8} \stopline \startline \fakewords{4}{8} \stopline \stopverse \startverse \startline \fakewords{4}{8} \stopline \startline \fakewords{4}{8} \stopline \startline \fakewords{4}{8} \stopline \startline \fakewords{4}{8} \stopline \stopverse \stoppoem \stopbuffer \setupformatsegment[verse][width=.4\hsize,number=yes,numberstyle=slanted] \setupformatline [line] [number=yes,numberstyle=smallslanted] \startbuffer[x] \setupformatsegment[verse][leftoffset=0pt,rightoffset=0pt,left=,right=] \stopbuffer \section{Alternative A} \setupformatsegment[verse][alternative=a] {\getbuffer[poem]} \setupformatsegment[verse][alternative=a] {\getbuffer[x,poem]} \section{Alternative B} \setupformatsegment[verse][alternative=b] {\getbuffer[poem]} \setupformatsegment[verse][alternative=b] {\getbuffer[x,poem]} \section{Alternative C} \setupformatsegment[verse][alternative=c] {\getbuffer[poem]} \section{Alternative D} \setupformatsegment[verse][alternative=d] {\getbuffer[poem]} \section{Alternative E} \setupformatsegment[verse][alternative=e] {\getbuffer[poem]} \stopbuffer \typebuffer \getbuffer \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/math-dis.mkiv0000644000175000017500000000105411754241457024301 0ustar norbertnorbert%D \module %D [ file=math-ali, %D version=2008.10.20, %D title=\CONTEXT\ Math Macros, %D subtitle=Display, %D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Display} \unprotect % display spacing code will move here \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-ini.mkii0000644000175000017500000002434512130411274024246 0ustar norbertnorbert%D \module %D [ file=buff-ini, % was core-buf % blocks are moved to core-blk %D version=2000.01.05, %D title=\CONTEXT\ Buffer Macros, %D subtitle=Buffers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Buffer Macros / Buffers} \unprotect % Helpers: \chardef\buffernestmode\plusone % 0: not nested, 1: startbuffer nested, 2: all buffers nested \edefconvertedargument\emptybufferline{ } \ifx\tmpblocks\undefined \newwrite\tmpblocks \fi \newif\iftmpblockstarted \long\def\flushbufferline#1% {\iftmpblockstarted \ifsegmentatebuffer \ifemptybufferline \immediate\write\tmpblocks{\string\stopbufferparagraph }% \immediate\write\tmpblocks{\string\startbufferparagraph}% \else \immediate\write\tmpblocks{#1}% \fi \else \immediate\write\tmpblocks{#1}% \fi \else \doifsomething{#1} {\tmpblockstartedtrue \immediate\write\tmpblocks{\string#1}}% \fi} \long\def\processnextbufferlineA#1% {\relax % checken waarom eerdere macro dit nodig heeft / supp-mps run \defconvertedargument\next{#1 }% \doifinstringelse{\delcharacter\letterpercent}{\delcharacter\next} {\secondoftwoarguments} {\doifincsnameelse\endofblock\next {\ifnum\nestedbufferlevel=\zerocount \expandafter\firstoftwoarguments \else \decrement\nestedbufferlevel\relax \expandafter\secondoftwoarguments \fi} {\doifincsnameelse\beginofblock\next {\increment\nestedbufferlevel\relax \secondoftwoarguments} {\secondoftwoarguments}}}} \long\def\processnextbufferlineB#1% #2#3% {\defconvertedargument\next{#1 }% \ifx\next\emptybufferline \ifsegmentatebuffer \emptybufferlinetrue \fi \expandafter\secondoftwoarguments% #3% \else \emptybufferlinefalse \doifinstringelse\endofblock\next {\expandafter\firstoftwoarguments }% #2} {\expandafter\secondoftwoarguments}% #3}% \fi} \bgroup \obeylines \long\gdef\copybufferline#1 {\processnextbufferline{#1}\closebufferfile{\flushbufferline{#1}\copybufferline}} \egroup \newif\ifsegmentatebuffer \newif\ifemptybufferline \def\currentbuffer{\jobname} \def\setcurrentbuffer#1% {\doifelsenothing{#1}{\edef\currentbuffer{\jobname}}{\edef\currentbuffer{#1}}} \def\resetbuffer {\dosingleempty\doresetbuffer} \def\doresetbuffer[#1]% {\begingroup \setcurrentbuffer{#1}% \unlinkfile{\TEXbufferfile\currentbuffer}% \endgroup} \def\dostartbuffer {\bgroup \obeylines % nodig, anders gaat 't fout als direct \starttable (bv) \doquadrupleempty\dodostartbuffer} \def\dodostartbuffer[#1][#2][#3][#4]% upward compatible {\iffourthargument \def\next{\dododostartbuffer{#1}{#2}{#3}{#4}}% \else \def\next{\dododostartbuffer {}{#1}{#2}{#3}}% \fi \next} \def\dododostartbuffer#1#2#3#4% {%\showmessage\m!systems{15}{#2}% \doifelsevalue{\??bu#1\c!paragraph}\v!yes {\segmentatebuffertrue} % todo in mkiv {\doifnumberelse{\getvalue{\??bu#1\c!paragraph}}\segmentatebuffertrue\segmentatebufferfalse}% \doifvalue{\??bu#1\c!local}\v!yes {\chardef\buffernestmode\plustwo}% permit nesting \setcurrentbuffer{#2}% \doifelsenothing{#4} {\letbeundefined{\e!stop\v!buffer}% % \let\stopbuffer=\relax % \undefined \edefconvertedargument\beginofblock{\e!start\v!buffer}% \edefconvertedargument\endofblock {\e!stop \v!buffer}% \ifcase\buffernestmode \let\processnextbufferline\processnextbufferlineB \else \let\processnextbufferline\processnextbufferlineA \fi} {\letbeundefined{#4}% \letvalue{#4}=\relax % \undefined \expandafter\defconvertedargument\expandafter\beginofblock\expandafter{\csname#3\endcsname}% we could use defconvertedcommand here (no \expandafter) \expandafter\defconvertedargument\expandafter\endofblock \expandafter{\csname#4\endcsname}% we could use defconvertedcommand here (no \expandafter) \ifcase\buffernestmode \let\processnextbufferline\processnextbufferlineB \or \let\processnextbufferline\processnextbufferlineB \else \let\processnextbufferline\processnextbufferlineA \fi}% \def\closebufferfile {\ifsegmentatebuffer \immediate\write\tmpblocks{\string\stopbufferparagraph}% \fi \immediate\closeout\tmpblocks \egroup \getvalue{#4}}% \doifelsenothing{#2} {\edef\bufferfilename{\TEXbufferfile\jobname}}% {\edef\bufferfilename{\TEXbufferfile{#2}}}% \immediate\openout\tmpblocks\bufferfilename \ifsegmentatebuffer \immediate\write\tmpblocks{\string\startbufferparagraph}% \fi \newcounter\nestedbufferlevel \recatcodeuppercharacterstrue \setcatcodetable\vrbcatcodes \obeylines \copybufferline} \letvalue{\e!start\v!buffer}\dostartbuffer \let\endbuffer\undefined % to please the dep parser \def\setbuffer {\dosingleempty\dosetbuffer} \long\def\dosetbuffer[#1]#2\endbuffer % seldom used so we just pass #2 {\begingroup \setcurrentbuffer{#1}% \edef\bufferfilename{\TEXbufferfile{\currentbuffer}}% \immediate\openout\tmpblocks\bufferfilename \defconvertedargument\ascii{#2}% \immediate\write\tmpblocks{\ascii}% \immediate\closeout\tmpblocks \endgroup} \def\setupbuffer {\dodoubleempty\dosetupbuffer} \def\dosetupbuffer[#1][#2]% {\ifsecondargument \getparameters[\??bu#1][#2]% \else \getparameters[\??bu][#1]% \fi} \def\dodefinebuffer[#1][#2]% {\iffirstargument % else problems \doglobal\increment\nofdefinedbuffers \letvalue{\??bu#1\c!number }\nofdefinedbuffers \letvalue{\??bu#1\c!paragraph}\v!no \setevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}% \unexpanded\setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}% \unexpanded\setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}% \getparameters[\??bu#1][#2]% \fi} \def\definebuffer {\dodoubleempty\dodefinebuffer} \unexpanded\def\getbuffer {\dodoubleempty\dogetbuffer} \def\dogetbuffer[#1][#2]% {\ifsecondargument \dodogetbuffer[#1][#2]% \else \dodogetbuffer[][#1]% \fi} \def\dogetbufferasis{\readjobfile{\TEXbufferfile{\currentbuffer}}\donothing\donothing}% \def\dodogetbuffer[#1][#2]% {\getvalue{\??bu#1\c!before}% \dobuffer{16}{#2}\dogetbufferasis \getvalue{\??bu#1\c!after}} \unexpanded\def\typebuffer {\dodoubleempty\dotypebuffer} \def\dogetfilebuffer{\typefile{\TEXbufferfile{\currentbuffer}}} \def\dotypebuffer[#1][#2]% {\iffirstargument \dobuffer{17}{#1}\dogetfilebuffer \else \dobuffer{17}{#2}\dogetfilebuffer \fi} \def\dobuffer#1#2#3% {\doifelsenothing{#2} {\dodobuffer#3\jobname} {\processcommalist[#2]{\dodobuffer#3}}} \def\dodobuffer#1#2% command name {\pushmacro\currentbuffer \edef\currentbuffer{\ifcsname\??bu#2\c!number\endcsname def-\csname\??bu#2\c!number\endcsname\else#2\fi}% \beginrestorecatcodes #1% \endrestorecatcodes \popmacro\currentbuffer} \def\processTEXbuffer{\getbuffer} % handy % seldom used, only in a few projects that demanded more speed \def\dostartmemorybuffer {\dosingleempty\dostartmemorybuffer} \long\def\dostartmemorybuffer[#1]#2\stopbuffer {\setbuffer[#1]#2\endbuffer} \let\dostartfilebuffer\startbuffer \def\usememorybuffers{\let\startbuffer\dostartmemorybuffer} \def\usefilebuffers {\let\startbuffer\dostartfilebuffer} % this features is soldom used (complex examns where we need to fetch % special parts of a text % % this is not yet supported in mkiv (relatively easy to do but there % we don't have the par tags but need to grab 'm \def\skippedbufferparagraphs{0} \let\startbufferparagraph\relax \let\stopbufferparagraph \par % \relax \newcount\currentbufferparagraph \def\getbufferparagraphs {\dodoubleempty\dogetbufferparagraphs} \def\dosetbufferoffset#1% {\doifnumberelse{\getvalue{\??bu#1\c!paragraph}} {\currentbufferparagraph-\getvalue{\??bu#1\c!paragraph}} {\currentbufferparagraph \zerocount}% \relax} \def\dogetbufferparagraphs[#1][#2]% {\iffirstargument \ifsecondargument \dosetbufferoffset{#1}% \doifelse{#2}\v!all {\def\startbufferparagraph{\normalbufferparagraph{#1}}} {\def\startbufferparagraph{\filterbufferparagraph{#1}{#2}}}% \def\stopbufferparagraph{\dostopbufferparagraph{#1}}% \def\next{\getparagraphedbuffer[#1]}% \else \dosetbufferoffset\empty \def\startbufferparagraph{\filterbufferparagraph{}{#1}}% \def\stopbufferparagraph{\dostopbufferparagraph{}}% \def\next{\getparagraphedbuffer[]}% \fi \else \dosetbufferoffset\empty \def\startbufferparagraph{\normalbufferparagraph{}}% \def\stopbufferparagraph{\dostopbufferparagraph{}}% \def\next{\getparagraphedbuffer[]}% \fi \next} \def\dogetparagraphbuffer{\readjobfile{\TEXbufferfile{\currentbuffer}}\donothing\donothing} \def\getparagraphedbuffer[#1]% {\dobuffer{16}{#1}\dogetparagraphbuffer} \def\dostopbufferparagraph#1% {\getvalue{\??bu#1\c!after}\par} \def\dostartbufferparagraph#1% {\par\getvalue{\??bu#1\c!before}} \def\normalbufferparagraph {\advance\currentbufferparagraph \plusone \ifnum\currentbufferparagraph>\zerocount \expandafter\dostartbufferparagraph \else \expandafter\gobblebufferparagraph \fi} \def\filterbufferparagraph#1#2% {\advance\currentbufferparagraph \plusone \ifcase\currentbufferparagraph \expandafter\gobblebufferparagraph \else \doifinsetelse{\the\currentbufferparagraph}{#2} {\expandafter\dostartbufferparagraph} {\expandafter\fakebufferparagraph}% \fi {#1}} \long\def\gobblebufferparagraph#1#2\stopbufferparagraph {} \def\fakebufferparagraph#1% {\bgroup \def\stopbufferparagraph{\dostopbufferparagraph{#1}\egroup\egroup}% \setbox\scratchbox\vbox\bgroup\dostartbufferparagraph{#1}} % definitions \definebuffer[\v!hiding] \setupbuffer[\v!hiding][\c!local=\v!yes] \setupbuffer [\c!paragraph=\v!no, \c!before=, \c!after=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-exp.mkii0000644000175000017500000000540411754241457024311 0ustar norbertnorbert%D \module %D [ file=unic-exp, %D version=2002.12.05, %D title=\CONTEXT\ \UNICODE\ Support, %D subtitle=Expansion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Unicode Support / Expansion)} %D \macros %D {expandunivector} %D %D The \type {\expandunivector} macro can be used to expand %D vectors, which leads to a faster run in case of documents %D with lots of \UTF-8 code. \unprotect \def\expandunivector[#1]% {\processcommalist[#1]\doexpandunivector} \def\doexpandunivector#1% {\ifcsname\@@univector#1\endcsname \ifcsname\@@univector\@@univector#1\endcsname\else \writestatus{unicode}{expanding vector #1}% \setvalue{\@@univector\@@univector#1}{\expandedunivector{#1}}% \dorecurse{255} {\@EA\ifx\csname\csname\@@univector#1\endcsname\recurselevel\endcsname\unknownchar % skip \else \@EA\let\csname\@@univector\@@univector#1:\recurselevel\@EA\endcsname \csname\csname\@@univector#1\endcsname\recurselevel\endcsname \fi}% \letbeundefined{\@@univector#1}% \fi \fi} \def\expandedunivector#1#2% {\ifcsname\@@univector\@@univector#1:\number#2\endcsname \@@univector\@@univector#1:\number#2% \else \@@unknownchar \fi} %D For this purpose, we need to redefine the resolver. \def\doutfunihash#1#2% {\csname \@@univector \ifcsname\@@univector\@@univector#1\endcsname \@@univector#1\else \ifcsname\@@univector #1\endcsname #1\else \s!unknown\fi\fi \endcsname{\utfmod{#2}}} \setvalue{\@@univector\s!unknown}#1% {\@@unknownchar} \def\doutfunihashglyph#1#2#3% div mod raw {\csname utf!\ifnum#3<\utf@i1\else \ifcsname\@@unicommand#1\endcsname2\else \ifcsname\@@univector\@@univector#1\endcsname3\else \ifcsname\@@univector #1\endcsname4\else 5\fi\fi\fi\fi !\endcsname{#1}{#2}} \setvalue{utf!1!}#1{\unicodeasciicharacter} % {#2} \setvalue{utf!2!}#1{\csname\@@unicommand#1\endcsname} % {#2} \setvalue{utf!3!}#1#2{\csname\csname\@@univector\@@univector#1\endcsname{#2}\endcsname} % watch the nested csname; it's a speed up \setvalue{utf!4!}#1#2{\csname\csname\@@univector#1\endcsname{#2}\endcsname} % watch the nested csname; it's a speed up \setvalue{utf!5!}#1#2{\unicodeunknowncharacter} % \let\utfunihash\utfunihashglyph %D Let's use it: \expandunivector[0,1,2,3,4,5,30,31,32,33,34,37,39] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-xml.mkii0000644000175000017500000002423011244221744024302 0ustar norbertnorbert%D \module %D [ file=verb-xml, %D version=2000.05.09, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty XML verbatim, %D author=Berend de Boer, %D date=2000.05.08, %D copyright={Berend de Boer \& Hans Hagen}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This module will be cleaned up a bit in the process of more % flexible verbatim options. \writestatus{loading}{ConTeXt Verbatim Macros / Pretty XML Verbatim} \unprotect %D Formats XML more or less like XMLWriter (http://XMLwriter.net) %D does. %D %D Known bugs: %D - CDATA not handled yet. %D %D Expects well-formed XML. Else parsing errors may occur, because %D this XML state machine is not robust. %D %D Examples: %D %D \startXML %D %D %D %D %D %D 1 %D 100 %D %D %D %D \stopXML %D %D Another format: %D %D \startXML %D %D
%D \stopXML %D %D A typical setup: %D %D \setuptyping[XML] %D [margin=1cm, %D before={\switchtobodyfont[9pt]\blank[medium]}, %D after={\switchtobodyfont[11pt]\blank[medium]}, %D style=\ss] %D \ifx\XMLlinebreak\undefined \gdef\XMLlinebreak{\ifhmode\allowbreak\fi} % new, often long lines \fi \doglobal\newif\ifXMLmarkkeys \global\XMLmarkkeystrue \gdef\setupprettyXMLtype% {\def\prettyidentifier{XML}% \XMLsetvariables \XMLsetcontrols \XMLsetspecials \XMLsethandlers} \gdef\XMLsetvariables {\global\inXMLpifalse \global\inXMLtagfalse \global\inXMLvaluefalse \global\inXMLspecialfalse \global\inXMLcommentfalse \global\inXMLtagnamefalse \global\inXMLattributefalse \global\inXMLentityfalse} \gdef\XMLsetcontrols% {\saveprettycontrols \def\obeyedspace% {\ifinXMLvalue \else % more tests ? \XMLstartattribute \fi \oldobeyedspace \XMLlinebreak}% \def\flushrestofverbatimline% {\endXMLtagname}% \let\obeytabs=\ignoretabs} \gdef\XMLsetspecials% {\setpretty`\<=10 \setpretty`\>=11 \setpretty`\?=12 \setpretty`\/=13 \setpretty`\!=14 \setpretty`\-=15 \setpretty`\\=17 \setpretty`\0=17 \setpretty`\1=17 \setpretty`\2=17 \setpretty`\3=17 \setpretty`\4=17 \setpretty`\5=17 \setpretty`\6=17 \setpretty`\7=17 \setpretty`\8=17 \setpretty`\9=17 \setpretty`\==16 \setpretty`\"=20 \setpretty`\(=31 \setpretty`\)=31 \setpretty`\,=31 \setpretty`\*=31 \setpretty`\+=31 \setpretty`\#=31 \setpretty`\:=32 \setpretty`\&=41 \setpretty`\;=42 } \gdef\XMLsethandlers% {\installprettyhandler 17 \XMLnormal \installprettyhandler 10 \XMLwhattag \installprettyhandler 11 \XMLstoptag \installprettyhandler 12 \XMLtypeonetwo \installprettyhandler 13 \XMLtypeonethree \installprettyhandler 14 \XMLtypeonefour \installprettyhandler 15 \XMLtypeonefive \installprettyhandler 16 \XMLtypeonesix \installprettyhandler 20 \XMLdoublequote \installprettyhandler 31 \XMLtypethreeone \installprettyhandler 32 \XMLtypethreetwo \installprettyhandler 41 \XMLbampersand \installprettyhandler 42 \XMLeampersand } \doglobal\newif\ifinXMLpi \doglobal\newif\ifinXMLtag \doglobal\newif\ifinXMLvalue \doglobal\newif\ifinXMLspecial \doglobal\newif\ifinXMLcomment \doglobal\newif\ifinXMLtagname \doglobal\newif\ifinXMLattribute \doglobal\newif\ifinXMLentity % the list of actions to be executed per state % test if we have a normal tag, processing instruction or a special, % i.e. <, \gdef\XMLstoptag#1% {\ifinXMLcomment \getpretty{#1}% \else \ifinXMLvalue \getpretty{#1}% \else \endXMLtagname \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \doXMLstoptag \XMLlinebreak \fi \fi} \gdef\doXMLstoptag% {\global\inXMLpifalse % either end process instruction \global\inXMLspecialfalse % or special \global\inXMLtagfalse % tag ends always \global\inXMLtagnamefalse} % just to be sure % end typeset name of tag % because called often, we also use it to end the default % attribute color. \gdef\endXMLtagname% {\ifinXMLtagname \endofpretty \inXMLtagnamefalse \else \XMLstopattribute \fi} % start attribute formatting inside a tag if applicable \gdef\XMLstartattribute% {\ifinXMLcomment \else \ifinXMLpi \ifXMLmarkkeys\else\endXMLtagname\fi % option \else \endXMLtagname \ifinXMLtag \doXMLstartattribute \fi \fi \fi} \gdef\XMLstopattribute% {\ifinXMLattribute \endofpretty \inXMLattributefalse \fi} \gdef\doXMLstartattribute {\inXMLattributetrue \beginofpretty[\!!prettythree]} % `?' character, needed to recognize ?> \gdef\XMLtypeonetwo% {\endXMLtagname \handlenextnextpretty\doXMLtypeonetwo\doXMLout} \gdef\doXMLtypeonetwo#1#2% {\getprettydata{#2}% \ifnum\prettytype=11 % > \expandafter\dododoXMLtypeonetwo \else % treat as `green' character \expandafter\XMLtypethreeone \fi {#1}#2} \gdef\dododoXMLtypeonetwo#1#2% {\ifinXMLcomment \getpretties{#1}{#2}% \else \ifinXMLtag \ifinXMLvalue \getpretties{#1}{#2}% \else \ifinXMLpi \beginofpretty[\!!prettythree]\getpretties{#1}{#2}\endofpretty \else % treat as green character \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \beginofpretty[\!!prettythree]#2\endofpretty \fi \doXMLstoptag \fi \else \getpretties{#1}{#2}% \fi \fi} % '/' character, catch /> and % when is ahead % so the comment can stop. \gdef\XMLtypeonefive% {\handlenextnextpretty\doXMLtypeonefive\doXMLout} \gdef\doXMLtypeonefive#1#2% {\getprettydata{#2}% \ifnum\prettytype=15 \ifinXMLcomment \let\next=\dodoXMLtypeonefive \else \ifinXMLspecial \let\next=\startXMLcomment \else \let\next=\doXMLouttwo \fi \fi \else \let\next=\doXMLouttwo \fi \next{#1}#2} \gdef\startXMLcomment#1#2% {\beginofpretty[\!!prettythree]\getpretties{#1}{#2}\endofpretty \beginofpretty[\!!prettyfour]% \global\inXMLcommenttrue} \gdef\dodoXMLtypeonefive#1% encountered - {\def\prev{#1}\handlenextnextpretty\dododoXMLtypeonefive\doXMLout} \gdef\nodoXMLtypeonefive% encountered - {\getpretty{\prev}\doXMLout} \gdef\dododoXMLtypeonefive#1#2% {\getprettydata{#2}% \ifnum\prettytype=11 \endofpretty\getpretty{\prev}#1\empty\global\inXMLcommentfalse#2% \else \getpretty{\prev}#1#2% \fi} \global\let\doXMLout \getpretty \global\let\doXMLouttwo\getpretties % '=' inside tags needs to be blue \gdef\XMLtypeonesix#1% {\ifinXMLtag \endofpretty \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \beginofpretty[\!!prettyone]% \else \getpretty{#1}% \fi} % catch attribute value parts \gdef\XMLdoublequote#1% {\ifinXMLcomment \getpretty{#1}% \else \ifinXMLtag \ifinXMLvalue \global\inXMLvaluefalse \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \ifXMLmarkkeys\beginofpretty[\!!prettyone]\fi \else \endofpretty \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \global\inXMLvaluetrue \fi \else \getpretty{#1}% \fi \fi} % symbols like `(', `)' and `,' should be green \gdef\XMLtypethreeone#1% {\ifinXMLcomment \getpretty{#1}% \else \ifinXMLtag \endXMLtagname \ifinXMLvalue \getpretty{#1}% \else \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \XMLstartattribute% again \fi \else \getpretty{#1}% \fi \fi} % \gdef\XMLtypethreetwo#1% % {\ifinXMLcomment % \getpretty{#1}% % \else % \ifinXMLtagname % \endofpretty % \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty % \beginofpretty[\!!prettyone]% % \else % \getpretty{#1}% % \fi % \fi} \gdef\XMLtypethreetwo#1% {\getpretty{#1}} % special characters with `&' \gdef\XMLbampersand#1% {\ifinXMLcomment \getpretty{#1}% \else \endXMLtagname \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \global\inXMLentitytrue \fi} \gdef\XMLeampersand#1% {\ifinXMLcomment \getpretty{#1}% \else \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \global\inXMLentityfalse \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-cow.mkii0000644000175000017500000001241611754241457024322 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/font-xtx.mkii0000644000175000017500000003541311754241457024353 0ustar norbertnorbert%D \module %D [ file=font-xtx, %D version=2004.09.11, %D title=\CONTEXT\ Font Macros, %D subtitle=\XETEX\ Hacks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifnum\texengine=\xetexengine \writestatus{loading}{ConTeXt Font Macros / XeTeX Hacks} \else \endinput \fi \unprotect %D Features: % \definefontfeature[default] [liga=yes,texligatures=yes,texquotes=yes] % \definefontfeature[default-caps][liga=yes,texligatures=yes,texquotes=yes,smcp=yes,script=latn] % % \starttypescript [serif] [palatino-nova-regular] [name] % \definefontsynonym[Serif] [palatinonova-regular][features=default] % \definefontsynonym[SerifCaps][palatinonova-regular][features=default-caps] % also sets Serif % \stoptypescript % % \starttypescript [serif] [palatino-nova-regular] [name] % \definefontsynonym[Serif] [palatinonova-regular*default] % \definefontsynonym[SerifCaps] [palatinonova-regular*default-caps] % \stoptypescript % \definetypeface[mainface][rm][serif][palatino-nova-regular][default] \setupbodyfont[mainface] % % \starttext % ``Test'' -- --- ff fi fl \sc ``Test'' -- --- ff fi fl % \stoptext % \starttext % \definefont % [blabla] % [name:Latin Modern Something] % \definefont % [blabla] % [file:texnansi-lmr10] % \blabla test % \definefont % [blabla] % [texnansi-lmtt10] % \blabla test % \stoptext \def\definefontfeature {\dotripleargument\dodefinefontfeature} \def\dododefinefontfeature#1% {\edef\!!stringa{\ifx\!!stringa\empty\else\!!stringa,\fi\executeifdefined{\??fa#1}\empty}} \def\dodefinefontfeature[#1][#2][#3]% {\doifassignmentelse{#2} {\setevalue{\??fa#1}{#2}} {\let\!!stringa\empty \processcommalist[#2]\dododefinefontfeature \setevalue{\??fa#1}{\ifx\!!stringa\empty\else\!!stringa,\fi#3}}} \definefontfeature [default] [liga=yes,kern=yes,tlig=yes,trep=yes] % texligatures=yes,texquotes=yes \definefontfeature [smallcaps] [liga=yes,kern=yes,tlig=yes,trep=yes,smcp=yes] % texligatures=yes,texquotes=yes \definefontfeature [oldstyle] [liga=yes,kern=yes,tlig=yes,trep=yes,onum=yes] % texligatures=yes,texquotes=yes \definefontfeature % no calt [arabic] [language=dflt,script=arab, init=yes,medi=yes,fina=yes,isol=yes, liga=yes,dlig=yes,rlig=yes,clig=yes, mark=yes,mkmk=yes,kern=yes,curs=yes] \definefontfeature [none] [features=no] %D Overloaded: \def\getfontfileparameters#1% can be simpler for mkii (no features) {\edef\@@truefontname{\truefontname{#1}}% \edef\currentfontfileencoding{\truefontdata\@@truefontname\s!encoding}% \edef\currentfontfilemapping {\truefontdata\@@truefontname\s!mapping }% \edef\currentfontfilehandling{\truefontdata\@@truefontname\s!handling}% \edef\currentfontfilefeatures{\truefontdata\@@truefontname\s!features}} \def\updatefontparameters {\edef\@@fontencoding{\truefontdata\fontfile \s!encoding}% \edef\@@fontmapping {\truefontdata\fontfile \s!mapping }% \edef\@@fonthandling{\truefontdata\somefontname\s!handling}% \edef\@@fontfeatures{\truefontdata\fontfile \s!features}% \edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}} %D Loading: %D %D for some reason xetex does not support [filename] for tfm files and %D quotes also behave kind of strange " vs ' vs [ vs ... %D %D \starttyping %D \font\myfont = msam7 % ok %D \font\myfont = "msam7" % also ok %D \font\myfont = "msam7" at 8pt % error %D \stoptyping \newconditional\tracexetexfonts %D Because \XETEX\ is not that fast on locating fonts we cache lookups so %D that we minimize the test. It saves a little bit of runtime, depending %D on the number of fonts loaded (which is normally not that much). \def\doiffoundXTXfontelse#1#2% {\ifcsname xtx@fnt@#2\somefontspec\endcsname \ifconditional\tracexetexfonts \writestatus\m!fonts{already checked #1: #2\somefontspec\space (state: \number\csname xtx@fnt@#2\somefontspec\endcsname)}% \fi \else \suppressfontnotfounderror\plusone \font\xetextempfont=#2\somefontspec\relax \suppressfontnotfounderror\zerocount \edef\xetextempfont{\fontname\xetextempfont}% \global\expandafter\chardef\csname xtx@fnt@#2\somefontspec\endcsname \ifx\xetextempfont\nullfontname \zerocount \ifconditional\tracexetexfonts \writestatus\m!fonts{not found #1: #2\somefontspec}% \fi \else \plusone \ifconditional\tracexetexfonts \writestatus\m!fonts{found #1: #2\somefontspec}% \fi \fi \fi \ifcase\csname xtx@fnt@#2\somefontspec\endcsname \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\docheckfontfilenameprefix#1:#2:#3#4\relax {\edef\!!stringa{#1}% \edef\!!stringb{#2}% \ifx\!!stringb\empty % no prefix \let\checkedfontfile\!!stringa \doiffoundXTXfontelse{1a}{\checkedfontfile\checkedfontfeatures} {\edef\checkedfontfile{\checkedfontfile\checkedfontfeatures}} {\doiffoundXTXfontelse{1b}{"\checkedfontfile\checkedfontfeatures"} {\edef\checkedfontfile{"\checkedfontfile\checkedfontfeatures"}} {\doiffoundXTXfontelse{1c}{"[\checkedfontfile]\checkedfontfeatures"} {\edef\checkedfontfile{"[\checkedfontfile]\checkedfontfeatures"}} {}}}% \else\ifx\!!stringa\v!file % force file, only file check when no spaces \let\checkedfontfile\!!stringb \doiffoundXTXfontelse{2a}{"[\checkedfontfile]\checkedfontfeatures"} {\edef\checkedfontfile{"[\checkedfontfile]\checkedfontfeatures"}} {\doiffoundXTXfontelse{2b}{"\checkedfontfile\checkedfontfeatures"} {\edef\checkedfontfile{"\checkedfontfile\checkedfontfeatures"}} {}}% \else\ifx\!!stringa\v!name % force name, always lookup by xetex itself, "" forces otf/ttf/type1 \edef\checkedfontfile{"\!!stringb\checkedfontfeatures"}% \ifconditional\tracexetexfonts \writestatus\m!fonts{no checking 3a: \checkedfontfile}% \fi \else % whatever, maybe even xetex spec, forget about features \edef\checkedfontfile{"\!!stringa\!!stringb"}% \ifconditional\tracexetexfonts \writestatus\m!fonts{no checking 3b: \checkedfontfile}% \fi \fi\fi\fi} \newconditional\enabledfontfeatures \def\checkfontfilename% -- todo: integrate so that we call do.. directly {\expandafter\docheckfontfilename\fontfile*\empty*\relax} \def\docheckfontfilename#1*#2#3*#4\relax % class overrules file {\settrue\enabledfontfeatures \edef\checkedfontfeatures {\expandafter\ifx\csname\fontclass\s!features\endcsname\empty \ifx\@@fontfeatures\empty\ifx#2\empty\else#2#3\fi\else\@@fontfeatures\fi \else\expandafter\ifx\csname\fontclass\s!features\endcsname\relax % redundant, will go away \ifx\@@fontfeatures\empty\ifx#2\empty\else#2#3\fi\else\@@fontfeatures\fi \else \csname\fontclass\s!features\endcsname \fi\fi}% \ifx\checkedfontfeatures\empty % done \else \edef\checkedfontfeatures{\executeifdefined{\??fa\checkedfontfeatures}\empty}% \ifx\checkedfontfeatures\empty % done \else \let\convertedfontfeatures\empty \processcommacommand[\checkedfontfeatures]\doconvertfontfeatures % raw \ifx\convertedfontfeatures\empty \let\checkedfontfeatures\empty \else\ifconditional\enabledfontfeatures \edef\checkedfontfeatures{:\convertedfontfeatures}% \else \let\checkedfontfeatures\empty \fi\fi \fi \fi \docheckfontfilenameprefix#1:\empty:\empty\relax \doshowcheckedfontfeatures} \edef\@@fontfeaturesareno {features\v!no} \edef\@@fontfeaturesareoff{features\v!off} \def\dodoconvertfontfeatures#1=#2#3=#4\relax {\ifx#2\empty % invalid feature \else\ifcsname @xtx@#1@#2#3\endcsname \expandafter\ifx\csname @xtx@#1@#2#3\endcsname\empty\else \edef\convertedfontfeatures{\convertedfontfeatures\csname @xtx@#1@#2#3\endcsname;}% \fi \else \edef\!!stringa{#1}% \edef\!!stringb{#2#3}% \edef\!!stringc{#1#2#3}% \ifx\!!stringc\@@fontfeaturesareoff \setfalse\enabledfontfeatures \else\ifx\!!stringc\@@fontfeaturesareno \setfalse\enabledfontfeatures \else \edef\convertedfontfeatures {\convertedfontfeatures \ifx\!!stringb\v!yes +\!!stringa \else\ifx\!!stringb\v!on +\!!stringa \else\ifx\!!stringb\v!no -\!!stringa \else\ifx\!!stringb\v!off -\!!stringa \else \!!stringa=\!!stringb \fi\fi\fi\fi;}% \fi\fi \fi\fi} \def\doconvertfontfeatures#1% {\dodoconvertfontfeatures#1=\empty=\relax} \def\remapfontfeature #1 #2 #3 {\setevalue{@xtx@#1@#2}{#3}} % this may move to another file, maybe font-xtx \remapfontfeature tlig yes mapping=tlig %remapfontfeature tlig no mapping= \remapfontfeature trep yes {} \remapfontfeature trep no {} \remapfontfeature texligatures yes mapping=tlig %remapfontfeature texligatures no mapping= %remapfontfeature texquotes yes mapping=tex-text %remapfontfeature texquotes no mapping= %D Variants: \unexpanded\def\variant[#1]% {\dosetscaledfont \font\variantfont\truefontname{\fontstringA\fontstylesuffix\fontvariant\fontstringA{#1}} at \scaledfont \variantfont} %D Possible optimizations: % \def\updatefontparameters % {\edef\@@fontfeatures{\truefontdata\fontfile\s!features}% % \edef\@@fontskewchar{\truefontdata\fontfile\s!skewchar}} % \def\setfontcharacteristics % {\updatefontparameters % redundant, will go away, faster too % \the\everyfont} % \let\synchronizepatternswithfont\relax %D Names: % We need to move the feature into the filename else it may be % overloaded by another reference. For instance the definition of % a regular and caps variant can use the same font. % We could use an indirect method ... store in 'array' and refer to % slot. \def\definefontsynonym[#1]#2[#3]% {\edef\@@fontname{#1}% \edef\@@fontfile{#3}% \doifnextoptionalelse\dodefinefontsynonym\nodefinefontsynonym} \def\nodefinefontsynonym {\@EA\let\csname\??ff\fontclass\@@fontname\endcsname\@@fontfile % \@EA\let\csname\??ff\@@fontfile\s!features\endcsname\undefined } \def\dodefinefontsynonym[#1]% {\edef\@@fontdata{#1}% \ifx\@@fontdata\empty \nodefinefontsynonym \else \ifx\fontclass\empty \getfontparameters \else \getglobalfontparameters \fi \ifcsname\??ff\@@fontfile\s!features\endcsname \@EA\edef\csname\??ff\fontclass\@@fontname\endcsname{\@@fontfile*\csname\??ff\@@fontfile\s!features\endcsname}% \@EA\let\csname\??ff\@@fontfile\s!features\endcsname\undefined \else \nodefinefontsynonym \fi \fi} \let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater % simple version % % \def\truefontname#1% % {\@EA\dotruefontname#1*\relax} % % \def\dotruefontname#1*#2\relax % {\ifcsname\??ff\fontclass#1\endcsname % \@EA\truefontname\csname\??ff\fontclass#1\endcsname % \else\ifcsname\??ff#1\endcsname % \@EA\truefontname\csname\??ff#1\endcsname % \else % #1% % \fi\fi} % % last counts % % \def\truefontname#1% % {\@EA\dotruefontname#1*\empty*\relax} % % \def\dotruefontname#1*#2#3*#4\relax % {\ifcsname\??ff\fontclass#1\endcsname % \ifx#2\empty % \@EA\truefontname\csname\??ff\fontclass#1\endcsname % \else % \@EA\truefontname\csname\??ff\fontclass#1\endcsname*#2#3% % \fi % \else\ifcsname\??ff#1\endcsname % \ifx#2\empty % \@EA\truefontname\csname\??ff#1\endcsname % \else % \@EA\truefontname\csname\??ff#1\endcsname*#2#3% % \fi % \else % \ifx#2\empty % #1% % \else % #1*#2#3% % \fi % \fi\fi} % % first counts \def\truefontname#1% {\@EA\dotruefontname#1*\empty*\relax} \def\dotruefontname#1*#2#3*#4\relax {\ifcsname\??ff\fontclass#1\endcsname \ifx#2\empty \@EA\truefontname\csname\??ff\fontclass#1\endcsname \else \@EA\redotruefontname\csname\??ff\fontclass#1\endcsname*#2#3% \fi \else\ifcsname\??ff#1\endcsname \ifx#2\empty \@EA\truefontname\csname\??ff#1\endcsname \else \@EA\redotruefontname\csname\??ff#1\endcsname*#2#3% \fi \else #1\ifx#2\empty\else*#2#3\fi \fi\fi} \def\redotruefontname#1% {\@EA\dodotruefontname#1*\relax} \def\dodotruefontname#1*#2\relax {\ifcsname\??ff\fontclass#1\endcsname \@EA\redotruefontname\csname\??ff\fontclass#1\endcsname \else\ifcsname\??ff#1\endcsname \@EA\redotruefontname\csname\??ff#1\endcsname \else #1% \fi\fi} %D Default: \def\defaultfontfile{file:lmmono10-regular} %D Maybe: % \def\updatefontparameters % {\edef\@@fontfeatures{\truefontdata\fontfile \s!features}% % \edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}} % \def\setfontcharacteristics % {%\updatefontparameters % redundant, will go away, faster too % \the\everyfont % \synchronizepatternswithfont} \protect \endinput % \starttypescript[serif] [myzhfont] % \definefontsynonym [Serif] [file:SimSun] % \definefontsynonym [SerifBold] [file:SimSun] % \definefontsynonym [SerifItalic] [file:SimSun] % \definefontsynonym [SerifBoldItalic] [file:SimSun] % \stoptypescript % \starttypescript[sans] [myzhfont] % \definefontsynonym [Sans] [file:SimSun] % \definefontsynonym [SansBold] [file:SimSun] % \definefontsynonym [SansItalic] [file:SimSun] % \definefontsynonym [SansBoldItalic] [file:SimSun] % \stoptypescript % \starttypescript[mono] [myzhfont] % \definefontsynonym [Mono] [file:SimSun] % \definefontsynonym [MonoBold] [file:SimSun] % \definefontsynonym [MonoItalic] [file:SimSun] % \definefontsynonym [MonoBoldItalic] [file:SimSun] % \stoptypescript % \definetypeface [myzhfont] [rm] [serif][myzhfont] [default] % \definetypeface [myzhfont] [ss] [sans] [myzhfont] [default] % \definetypeface [myzhfont] [tt] [mono] [myzhfont] [default] % \starttext % % on windows: make sure fonts.conf has no cache mentioned % % % % 64 sec xetex, 11 sec luatex (56 sec xetex when \nobigmath) % % % \setupbodyfont[myzhfont] \dorecurse{10000}{{hello {\switchtobodyfont[myzhfont] 你好}}\par} % % % % 67 sec xetex, 11.5 sec luatex % % % % \dorecurse{10000}{{hello {\switchtobodyfont[myzhfont] 你好}}\par} % % % % 5 sec xetex, 7 sec luatex % % % % \setupbodyfont[myzhfont] \dorecurse{10000}{{hello {你好}}\par} % % % % 5 sec xetex, 7 sec luatex % % % % \setupbodyfont[myzhfont] \dorecurse{10000}{{\bf hello {你好}}\par} % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-par.mkiv0000644000175000017500000001616512134352503024276 0ustar norbertnorbert%D \module %D [ file=spac-par, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Paragraphs, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Paragraphs} \unprotect %D The dreadful sequence \type {\bgroup} \unknown\ %D \type {\carryoverpar} \unknown\ \type {\egroup} is needed %D when for instance sidefloats are used in combination with %D something that starts with a group. This is because %D otherwise the indentation as set (by the output routine) %D inside the group are forgotten afterwards. (I must %D not forget its existence). \def\carryoverpar#1% #1 can be \endgroup or \egroup or ... expandable ! {\normalexpanded {\noexpand#1% \hangindent\the\hangindent \hangafter \the\hangafter \parskip \the\parskip \leftskip \the\leftskip \rightskip \the\rightskip}} \unexpanded\def\pushparagraphproperties {\edef\currentparagraphproperties{\carryoverpar\relax}% \pushmacro\currentparagraphproperties} \unexpanded\def\popparagraphproperties {\popmacro\currentparagraphproperties \currentparagraphproperties} \unexpanded\def\flushparagraphproperties {\popmacro\currentparagraphproperties} % Beware, changing this will break some code (like pos/backgrounds) but % it has been changed anyway so let's see where things go wrong. \installcorenamespace{paragraphintro} \let\insertparagraphintro\relax % hook into everypar \newtoks\t_spac_paragraphs_intro_first \newtoks\t_spac_paragraphs_intro_next \newtoks\t_spac_paragraphs_intro_each \newconditional\c_spac_paragraphs_intro_first \newconditional\c_spac_paragraphs_intro_next \newconditional\c_spac_paragraphs_intro_each \unexpanded\def\setupparagraphintro {\dodoubleempty\spac_paragraphs_intro} \unexpanded\def\spac_paragraphs_intro[#1][#2]% {\def\spac_paragraphs_intro_step##1% {\csname\??paragraphintro\ifcsname\??paragraphintro##1\endcsname##1\fi\endcsname{#2}}% \processcommacommand[#1]\spac_paragraphs_intro_step} \letvalue{\??paragraphintro\empty}\gobbleoneargument \setvalue{\??paragraphintro\v!reset}#1% {\global\setfalse\c_spac_paragraphs_intro_first \global\setfalse\c_spac_paragraphs_intro_next \global\setfalse\c_spac_paragraphs_intro_each \global\t_spac_paragraphs_intro_first\emptytoks \global\t_spac_paragraphs_intro_next \emptytoks \global\t_spac_paragraphs_intro_each \emptytoks \glet\insertparagraphintro\relax} \setvalue{\??paragraphintro\v!first}#1% {\global\settrue\c_spac_paragraphs_intro_first \global\t_spac_paragraphs_intro_first\expandafter{\the\t_spac_paragraphs_intro_first#1}% \glet\insertparagraphintro\spac_paragraphs_flush_intro} \setvalue{\??paragraphintro\v!next}#1% {\global\settrue\c_spac_paragraphs_intro_next \global\t_spac_paragraphs_intro_next\expandafter{\the\t_spac_paragraphs_intro_next#1}% \glet\insertparagraphintro\spac_paragraphs_flush_intro} \setvalue{\??paragraphintro\v!each}#1% {\global\settrue\c_spac_paragraphs_intro_each \global\t_spac_paragraphs_intro_each\expandafter{\the\t_spac_paragraphs_intro_each#1}% \glet\insertparagraphintro\spac_paragraphs_flush_intro} %D We can say: %D %D \starttyping %D \setupparagraphintro[first][\index{Knuth}] %D \stoptyping %D %D Maybe more convenient is: %D %D \starttyping %D \flushatparagraph{\index{Zapf}} %D \stoptyping %D %D \starttyping %D \setupparagraphintro[first][\hbox to 3.5em{\tt FIRST \hss}] %D \setupparagraphintro[first][\hbox to 3.5em{\tt TSRIF \hss}] %D \setupparagraphintro[next] [\hbox to 3.5em{\tt NEXT \hss}] %D \setupparagraphintro[next] [\hbox to 3.5em{\tt TXEN \hss}] %D \setupparagraphintro[each] [\hbox to 3.0em{\tt EACH \hss}] %D \setupparagraphintro[each] [\hbox to 3.0em{\tt HCEA \hss}] %D %D some paragraph \par %D some paragraph \par %D some paragraph \par %D some paragraph \par %D %D \setupparagraphintro[first][\hbox to 3.5em{\tt FIRST \hss}] %D \setupparagraphintro[first][\hbox to 3.5em{\tt TSRIF \hss}] %D %D some paragraph \par %D some paragraph \par %D %D \setupparagraphintro[reset] %D %D some paragraph \par %D \stoptyping \unexpanded\def\flushatparagraph#1% {\global\c_spac_paragraphs_intro_first\plusone \global\t_spac_paragraphs_intro_first\expandafter{\the\t_spac_paragraphs_intro_first#1}% \glet\insertparagraphintro\spac_paragraphs_flush_intro} %D Here comes the flusher (we misuse the one level expansion of token %D registers to feed a nice stream into the paragraph.) \unexpanded\def\spac_paragraphs_flush_intro % we make sure that the token lists expand directly after another {\normalexpanded{% % so the first code is there twice \ifconditional\c_spac_paragraphs_intro_each \ifconditional\c_spac_paragraphs_intro_next \glet\insertparagraphintro\spac_paragraphs_flush_intro_next \else \glet\insertparagraphintro\spac_paragraphs_flush_intro_each \fi \ifconditional\c_spac_paragraphs_intro_first \global\setfalse\c_spac_paragraphs_intro_first \global\t_spac_paragraphs_intro_first\emptytoks \the\t_spac_paragraphs_intro_first \fi \the\t_spac_paragraphs_intro_each \else \ifconditional\c_spac_paragraphs_intro_next \glet\insertparagraphintro\spac_paragraphs_flush_intro_next \fi \ifconditional\c_spac_paragraphs_intro_first \global\setfalse\c_spac_paragraphs_intro_first \global\t_spac_paragraphs_intro_first\emptytoks \the\t_spac_paragraphs_intro_first \fi \fi}} \unexpanded\def\spac_paragraphs_flush_intro_next {\normalexpanded{% \global\setfalse\c_spac_paragraphs_intro_next \global\t_spac_paragraphs_intro_next\emptytoks \ifconditional\c_spac_paragraphs_intro_each \glet\insertparagraphintro\spac_paragraphs_flush_intro_each \the\t_spac_paragraphs_intro_next \the\t_spac_paragraphs_intro_each \else \glet\insertparagraphintro\relax \the\t_spac_paragraphs_intro_next \fi}} \unexpanded\def\spac_paragraphs_flush_intro_each {\the\t_spac_paragraphs_intro_each} %D \macros %D {flushatnextpar} %D %D This macro collects data that will be flushed at the next paragraph. %D By using this macro you can avoid interfering nodes (writes, etc). \let\flushpostponednodedata\relax % hook into everypar \newbox\b_spac_postponed_data \unexpanded\def\flushatnextpar {\begingroup \glet\flushpostponednodedata\spac_postponed_flush \dowithnextboxcs\spac_postponed_finish\hbox} \def\spac_postponed_finish {\global\setbox\b_spac_postponed_data\hbox % to\zeropoint {\box\b_spac_postponed_data\box\nextbox}% \endgroup} \def\spac_postponed_flush {\ifvoid\b_spac_postponed_data\else \hbox{\smashedbox\b_spac_postponed_data}% \box\b_spac_postponed_data \fi \glet\flushpostponednodedata\relax} \unexpanded\def\doflushatpar {\ifvmode \expandafter\flushatnextpar \else \expandafter\firstofoneargument \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-ibm.mkii0000644000175000017500000000015611244221744024240 0ustar norbertnorbert% temporary module, needed for downward compatibility %\input regi-ibm.tex \enableregime[ibm] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mde.mkii0000644000175000017500000003124711571377075024314 0ustar norbertnorbert\setinterfacemessage{references}{1}{unbekannte Referenz --} \setinterfacemessage{references}{30}{unbekanntes Object --} \setinterfacemessage{references}{3}{unbekannte Referenz Typ --} \setinterfacemessage{references}{2}{doppelte Referenz -- auf Seite --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{illegale Referenz --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{referenzen} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{doppeltes Object --} \setinterfacemessage{references}{21}{Dokument -- geladen} \setinterfacemessage{references}{22}{Dokument -- ist nicht aktiv} \setinterfacemessage{references}{23}{Obskure Referenz -- (Prefix=--)} \setinterfacemessage{documents}{1}{Blatt --} \setinterfacemessage{documents}{title}{Blaetter} \setinterfacemessage{documents}{2}{Nummer --} \setinterfacemessage{handlings}{1}{Font Verarbeitung --} \setinterfacemessage{handlings}{3}{unknown font handling --} \setinterfacemessage{handlings}{2}{Font Verarbeitung -- ist geladen} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{system} \setinterfacemessage{systems}{41}{Externe Datei -- in Gruppe -- existiert nicht} \setinterfacemessage{systems}{9}{-- nicht gefunden/verarbeitet} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{Neue Version der Hilfsdatei, zweiter Durchlauf benoetigt} \setinterfacemessage{systems}{21}{Die Hilfsdatei ist nicht geladen} \setinterfacemessage{systems}{20}{Bedeutung (sortieren) von -- geladen} \setinterfacemessage{systems}{5}{Modul -- geladen} \setinterfacemessage{systems}{4}{Befehl -- ist bereits definiert} \setinterfacemessage{systems}{27}{Version} \setinterfacemessage{systems}{26}{Register} \setinterfacemessage{systems}{25}{Referenzen} \setinterfacemessage{systems}{24}{Fliessbloecke} \setinterfacemessage{systems}{1}{Laden der Hilfsdatei aufgeschoben (Eingabe-Modus)} \setinterfacemessage{systems}{23}{-- angeordnet auf --} \setinterfacemessage{systems}{22}{Benoetige gueltige Hilfsdateie} \setinterfacemessage{systems}{2}{-- geladen} \setinterfacemessage{systems}{19}{Bedeutung (synonyme) von -- geladen} \setinterfacemessage{systems}{18}{Synonym -- -- existiert nicht} \setinterfacemessage{systems}{7}{Modul -- bereits geladen} \setinterfacemessage{systems}{6}{Modul -- gefunden} \setinterfacemessage{systems}{14}{Erzwungendes Seitenumbruch in Liste bei --} \setinterfacemessage{systems}{15}{Speichere Buffer --} \setinterfacemessage{systems}{16}{Setzte Buffer --} \setinterfacemessage{systems}{17}{Setzte tippen-Buffer --} \setinterfacemessage{systems}{13}{Beschriftung -- definiert --} \setinterfacemessage{systems}{12}{Die Hilfdatei ist nicht sortiert, verwende texutil} \setinterfacemessage{systems}{11}{Erstelle einfache Hilfdatei} \setinterfacemessage{systems}{10}{Benutzte kein em in --} \setinterfacemessage{floatblocks}{1}{-- neu nummeriert / -- => --} \setinterfacemessage{floatblocks}{3}{-- verschoben} \setinterfacemessage{floatblocks}{2}{-- gespeichert} \setinterfacemessage{floatblocks}{5}{Reihenfolge angepasst} \setinterfacemessage{floatblocks}{4}{-- plaziert} \setinterfacemessage{floatblocks}{7}{Anz. der unteren Gleitobjekte beschraengt auf --} \setinterfacemessage{floatblocks}{6}{Anz. der oberen Gleitobjekte beschraengt auf --} \setinterfacemessage{floatblocks}{9}{Reigenfolge gestoert} \setinterfacemessage{floatblocks}{8}{weniger als -- zeilen} \setinterfacemessage{floatblocks}{title}{Gleitobjektbloecke} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{undefiniert} \setinterfacemessage{floatblocks}{11}{kein Block gegeben} \setinterfacemessage{floatblocks}{10}{-- begrenzt} \setinterfacemessage{interactions}{1}{Seitenverhaeltnis -- x -- (B x H)} \setinterfacemessage{interactions}{3}{inaktiv} \setinterfacemessage{interactions}{2}{aktiv} \setinterfacemessage{interactions}{5}{unknown attachment --} \setinterfacemessage{interactions}{4}{keine Seitensynchronisation (--) im hmode} \setinterfacemessage{interactions}{6}{attachment file -- does not exist} \setinterfacemessage{interactions}{title}{Interaktion} \setinterfacemessage{interactions}{21}{-- Code eingefuegt} \setinterfacemessage{regimes}{1}{Kodierung --} \setinterfacemessage{regimes}{3}{Unbekannte Kodierung --} \setinterfacemessage{regimes}{2}{Kodierung -- ist geladen} \setinterfacemessage{regimes}{title}{Kodierung} \setinterfacemessage{structures}{1}{Begin des Abschnittsblocks --} \setinterfacemessage{structures}{title}{struktur} \setinterfacemessage{structures}{2}{Ende des Abschnittsblocks --} \setinterfacemessage{linguals}{1}{Trennmuster -- fuer -- geladen (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{Trenndefinitionen -- fuer -- geladen (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{Keine Trennmuster -- fuer -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{Trennmuster fuer -- nicht geladen} \setinterfacemessage{linguals}{4}{Keine Trenndefinitionen -- fuer -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{Sprachenspezifische Option [--] fuegt eine Luecke von -- ein} \setinterfacemessage{linguals}{6}{Sprache -- ist undefiniert} \setinterfacemessage{linguals}{9}{Sprache -- ist aktiv} \setinterfacemessage{linguals}{8}{Sprachenspezifische Option [--] nahtlos hinzugefuegt} \setinterfacemessage{linguals}{title}{Sprache} \setinterfacemessage{linguals}{10}{Trennmuster -- geladen} \setinterfacemessage{verbatims}{1}{Datei -- existiert nicht} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{filter -- ist geladen} \setinterfacemessage{filters}{title}{filter} \setinterfacemessage{filters}{2}{unknown filter --} \setinterfacemessage{textblocks}{1}{neue Version, zweiter Durchlauf benoetigt} \setinterfacemessage{textblocks}{3}{lese Bloecke von --} \setinterfacemessage{textblocks}{2}{schreibe Bloecke zu --} \setinterfacemessage{textblocks}{5}{-- nicht verborgen} \setinterfacemessage{textblocks}{4}{zweiter Durchlauf benoetigt} \setinterfacemessage{textblocks}{7}{-- verborgen} \setinterfacemessage{textblocks}{6}{-- verborgen und verarbeitet} \setinterfacemessage{textblocks}{9}{-- nicht gesetzt} \setinterfacemessage{textblocks}{8}{-- gesetzt} \setinterfacemessage{textblocks}{title}{textblock} \setinterfacemessage{textblocks}{12}{-- ausgelassen} \setinterfacemessage{textblocks}{11}{-- geladen und gesetzt} \setinterfacemessage{textblocks}{10}{-- geladen und verarbeitet} \setinterfacemessage{encodings}{1}{Kodierung --} \setinterfacemessage{encodings}{3}{Unbekannte Kodierung --} \setinterfacemessage{encodings}{2}{Kodierung -- ist geladen} \setinterfacemessage{encodings}{title}{Kodierung} \setinterfacemessage{columns}{1}{nur -- Spalten moeglich} \setinterfacemessage{columns}{3}{Problem, verwende [ausgleich=nein]} \setinterfacemessage{columns}{2}{benutzte \string\filbreak\space als Alternative} \setinterfacemessage{columns}{5}{Gleitobjekt unten ncoh nicht unterstuetzt} \setinterfacemessage{columns}{4}{Gleitobjekt oben ncoh nicht unterstuetzt} \setinterfacemessage{columns}{7}{ausgleich nach 100 Schritten abgebrocheb} \setinterfacemessage{columns}{6}{-- Gleitobjekt(e) verschoben} \setinterfacemessage{columns}{9}{Ausrichtung ueberpruefen} \setinterfacemessage{columns}{8}{ausgeglichen nach -- Schritt(en)} \setinterfacemessage{columns}{title}{Spalten} \setinterfacemessage{columns}{13}{breites Gleitobjekt an den Anfang der Spalten verschoben} \setinterfacemessage{columns}{12}{Gleitobjekt in naechste Zeile verschoben / --} \setinterfacemessage{columns}{11}{Gleitobjekt zu breit fuer Spalte} \setinterfacemessage{columns}{10}{(weniger als) 1 Zeile uebrig} \setinterfacemessage{symbols}{1}{Lade Symboldatei --} \setinterfacemessage{symbols}{title}{Symbole} \setinterfacemessage{files}{1}{Dateisynonym -- wird bereits fuer -- benutzt} \setinterfacemessage{files}{title}{files} \setinterfacemessage{versions}{1}{fehlendes @+} \setinterfacemessage{versions}{3}{Ausgewaehlte Seiten: --} \setinterfacemessage{versions}{2}{Erstelle Seiten} \setinterfacemessage{versions}{title}{Version} \setinterfacemessage{specials}{1}{-- geladen} \setinterfacemessage{specials}{3}{-- ist zurueckgesetzt} \setinterfacemessage{specials}{2}{keine tiefere Verschachtelung erlaubt --} \setinterfacemessage{specials}{5}{lade Definitionsdatei --} \setinterfacemessage{specials}{4}{Befehl -- existiert nicht} \setinterfacemessage{specials}{7}{unbekante Driver --} \setinterfacemessage{specials}{6}{Verschachtelung nicht erlaubt} \setinterfacemessage{specials}{title}{spezielles} \setinterfacemessage{layouts}{1}{Texthoehe angepasst mit -- auf Seite --} \setinterfacemessage{layouts}{3}{-- mal Text verschoben} \setinterfacemessage{layouts}{2}{-- mal verschobener Text plaziert} \setinterfacemessage{layouts}{5}{marginalbloecke inaktiv} \setinterfacemessage{layouts}{4}{marginalbloecke aktiv} \setinterfacemessage{layouts}{7}{berechne Platzbedarf des Logos} \setinterfacemessage{layouts}{6}{Unterseitenfolge -- verarbeitet (Groesse --)} \setinterfacemessage{layouts}{9}{z.Z. nicht mehr als -- Ebenen in Aufzaehlungen} \setinterfacemessage{layouts}{8}{berechne Hintergrund} \setinterfacemessage{layouts}{title}{Layout} \setinterfacemessage{layouts}{11}{Zwischenraum -- nicht im Grittermoduserlau} \setinterfacemessage{layouts}{10}{-- und -- ergeben zusammen nicht 1.0} \setinterfacemessage{fonts}{1}{Kodierung --} \setinterfacemessage{fonts}{3}{Unbekannte Variante --} \setinterfacemessage{fonts}{2}{Variante -- ist geladen} \setinterfacemessage{fonts}{5}{Stil -- ist nicht definiert} \setinterfacemessage{fonts}{4}{Fliesstext -- ist nicht definiert} \setinterfacemessage{fonts}{7}{unbekanntes Format --} \setinterfacemessage{fonts}{6}{-- ist geladen} \setinterfacemessage{fonts}{14}{Fliesstext -- wurde definiert (besser waere globale Definition)} \setinterfacemessage{fonts}{8}{Stil -- definiert} \setinterfacemessage{fonts}{title}{Fliesstext} \setinterfacemessage{fonts}{10}{unbekanntes Font --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{globale Datei --} \setinterfacemessage{databases}{2}{lokale Datei --} \setinterfacemessage{databases}{4}{unbekannte Datei --} \setinterfacemessage{databases}{title}{Datenbank} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{Lade Scriptdatei --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{unbekannte Preamble --} \setinterfacemessage{check}{1}{Fehlendes '=' nach '--' in Zeile --} \setinterfacemessage{check}{3}{-- -- ersetzt ein Makro, verwende VERSALIEN!} \setinterfacemessage{check}{2}{-- Argument(e) in Zeile -- erwartet} \setinterfacemessage{check}{title}{check} \setinterfacemessage{metapost}{1}{Lade metapost Bibliothek --} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{Abbildung -- kann nicht gefunden werden} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{Abbildung -- wird nicht erstellt} \setinterfacemessage{figures}{5}{Dimensions of -- are unknown} \setinterfacemessage{figures}{4}{Dimensionen von -- geladen aus der Abbildungsdatei selbst} \setinterfacemessage{figures}{6}{Dimensionen von -- ausgerechnet durch rlxtools} \setinterfacemessage{figures}{8}{Abbildungobjekt -- wurde wiederverwandt} \setinterfacemessage{figures}{title}{Abbildungen} \setinterfacemessage{colors}{1}{system -- ist global aktiviert} \setinterfacemessage{colors}{3}{-- ist undefiniert --} \setinterfacemessage{colors}{2}{system -- ist lokal aktiviert} \setinterfacemessage{colors}{5}{unbekanntes System --} \setinterfacemessage{colors}{4}{system -- ist geladen} \setinterfacemessage{colors}{7}{palette -- ist nicht verfuegbar} \setinterfacemessage{colors}{6}{palette -- ist verfuegbar} \setinterfacemessage{colors}{9}{-- Farbraum wird nicht unterstuetzt} \setinterfacemessage{colors}{8}{Spezifikation -- bei Farbe -- wird schwarz} \setinterfacemessage{colors}{title}{farbe} \setinterfacemessage{colors}{12}{-- is registered} \setinterfacemessage{colors}{11}{Farbe wird in Grau umgewandelt} \setinterfacemessage{colors}{10}{-- Farbraum wird unterstuetzt} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/type-exp.mkii0000644000175000017500000001164611754241457024341 0ustar norbertnorbert%D \module %D [ file=type-exp, %D version=2007.01.28, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Experimental Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \usetypescript[palatino-light] [texnansi] \setupbodyfont[palatino-light] \input zapf \par % \usetypescript[palatino-normal][texnansi] \setupbodyfont[palatino-normal] \input zapf \par % \usetypescript[palatino-medium][texnansi] \setupbodyfont[palatino-medium] \input zapf \par %D This file is used for \LUATEX\ experiments. \starttypescriptcollection[experiment] \starttypescript [sans] [palatino-sans-light] [name] \definefontsynonym [Sans] [PalatinoSans-Light] \definefontsynonym [SansItalic] [PalatinoSans-LightItalic] \definefontsynonym [SansBold] [PalatinoSans-Regular] \definefontsynonym [SansBoldItalic] [PalatinoSans-Italic] \definefontsynonym [SansSlanted] [PalatinoSans-Regular] \definefontsynonym [SansBoldSlanted] [PalatinoSans-Italic] \definefontsynonym [SansCaps] [PalatinoSans-Light] \stoptypescript \starttypescript [sans] [palatino-sans-normal] [name] \definefontsynonym [Sans] [PalatinoSans-Regular] \definefontsynonym [SansItalic] [PalatinoSans-Italic] \definefontsynonym [SansBold] [PalatinoSans-Bold] \definefontsynonym [SansBoldItalic] [PalatinoSans-BoldItalic] \definefontsynonym [SansSlanted] [PalatinoSans-Italic] \definefontsynonym [SansBoldSlanted] [PalatinoSans-BoldItalic] \definefontsynonym [SansCaps] [PalatinoSans-Regular] \stoptypescript \starttypescript [sans] [palatino-sans-medium] [name] \definefontsynonym [Sans] [PalatinoSans-Medium] \definefontsynonym [SansItalic] [PalatinoSans-MediumItalic] \definefontsynonym [SansBold] [PalatinoSans-Bold] \definefontsynonym [SansBoldItalic] [PalatinoSans-BoldItalic] \definefontsynonym [SansSlanted] [PalatinoSans-Bold] \definefontsynonym [SansBoldSlanted] [PalatinoSans-BoldItalic] \definefontsynonym [SansCaps] [PalatinoSans-MediumSC] \stoptypescript \starttypescript [sans] [palatino-sans-light,palatino-sans-normal,palatino-sans-medium] [texnansi,ec,8r] \definefontsynonym[PalatinoSans-Light] [\typescriptthree-palatinosanscom-light] [encoding=\typescriptthree] \definefontsynonym[PalatinoSans-LightItalic] [\typescriptthree-palatinosanscom-lightitalic] [encoding=\typescriptthree] \definefontsynonym[PalatinoSans-Regular] [\typescriptthree-palatinosanscom-regular] [encoding=\typescriptthree] \definefontsynonym[PalatinoSans-Italic] [\typescriptthree-palatinosanscom-italic] [encoding=\typescriptthree] \definefontsynonym[PalatinoSans-Medium] [\typescriptthree-palatinosanscom-medium] [encoding=\typescriptthree] \definefontsynonym[PalatinoSans-MediumItalic][\typescriptthree-palatinosanscom-mediumitalic][encoding=\typescriptthree] \definefontsynonym[PalatinoSans-Bold] [\typescriptthree-palatinosanscom-bold] [encoding=\typescriptthree] \definefontsynonym[PalatinoSans-BoldItalic] [\typescriptthree-palatinosanscom-bolditalic] [encoding=\typescriptthree] \stoptypescript \starttypescript[palatino-normal][texnansi,ec] \definetypeface[palatino-normal][ss][sans] [palatino-sans-normal] [default][encoding=\typescripttwo] \definetypeface[palatino-normal][rm][serif][palatino-nova] [default][encoding=\typescripttwo] \definetypeface[palatino-normal][tt][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \definetypeface[palatino-normal][mm][math] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript[palatino-medium][texnansi,ec] \definetypeface[palatino-medium][ss][sans] [palatino-sans-medium] [default][encoding=\typescripttwo] \definetypeface[palatino-medium][rm][serif][palatino-nova] [default][encoding=\typescripttwo] \definetypeface[palatino-medium][tt][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \definetypeface[palatino-medium][mm][math] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript[palatino-light][texnansi,ec] \definetypeface[palatino-light][ss][sans] [palatino-sans-light] [default][encoding=\typescripttwo] \definetypeface[palatino-light][rm][serif][palatino-nova] [default][encoding=\typescripttwo] \definetypeface[palatino-light][tt][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \definetypeface[palatino-light][mm][math] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1] \quittypescriptscanning \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-int.lua0000644000175000017500000001550612130411274024076 0ustar norbertnorbertif not modules then modules = { } end modules ['cldf-int'] = { version = 1.001, comment = "companion to mult-clm.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- another experiment -- needs upgrading -- needs checking -- todo: multilingual local format, insert, remove, concat = string.format, table.insert, table.remove, table.concat local unpack = unpack or table.unpack local catcodenumbers = catcodes.numbers local ctxcatcodes = catcodenumbers.ctxcatcodes local vrbcatcodes = catcodenumbers.vrbcatcodes local contextsprint = context.sprint local trace_define = false trackers.register("context.define", function(v) trace_define = v end) interfaces = interfaces or { } _clmh_ = utilities.parsers.settings_to_array _clma_ = utilities.parsers.settings_to_array local starters, stoppers, macros, stack = { }, { }, { }, { } local checkers = { [0] = "", "\\dosingleempty", "\\dodoubleempty", "\\dotripleempty", "\\doquadrupleempty", "\\doquintupleempty", "\\dosixtupleempty", } function _clmm_(name,...) macros[name](...) end function _clmb_(name,...) local sn = stack[name] insert(sn,{...}) starters[name](...) end function _clme_(name) local sn = stack[name] local sv = remove(sn) if sv then stoppers[name](unpack(sv)) else -- nesting error end end _clmn_ = tonumber local estart = interfaces.elements.start local estop = interfaces.elements.stop function interfaces.definecommand(name,specification) -- name is optional if type(name) == "table" then specification = name name = specification.name end if name and specification then local arguments = specification.arguments local na = (arguments and #arguments) or 0 local environment = specification.environment if na == 0 then if environment then contextsprint(ctxcatcodes,"\\setuvalue{",estart,name,"}{\\ctxlua{_clmb_('",name,"')}}") contextsprint(ctxcatcodes,"\\setuvalue{",estop, name,"}{\\ctxlua{_clme_('",name,"')}}") end if not environment or environment == "both" then contextsprint(ctxcatcodes,"\\setuvalue{", name,"}{\\ctxlua{_clmm_('",name,"')}}") end else -- we could flush immediate but tracing is bad then stack[name] = { } local opt, done = 0, false local snippets = { } -- we can reuse it local mkivdo = "\\mkivdo" .. name -- maybe clddo snippets[#snippets+1] = "\\def" snippets[#snippets+1] = mkivdo for i=1,na do local a = arguments[i] local variant = a[1] if variant == "option" then snippets[#snippets+1] = "[#" snippets[#snippets+1] = i snippets[#snippets+1] = "]" if not done then opt = opt + 1 end else done = true -- no more optional checking after this snippets[#snippets+1] = "#" snippets[#snippets+1] = i end end if environment then snippets[#snippets+1] = "{\\ctxlua{_clmb_('" snippets[#snippets+1] = name snippets[#snippets+1] = "'" else snippets[#snippets+1] = "{\\ctxlua{_clmm_('" snippets[#snippets+1] = name snippets[#snippets+1] = "'" end for i=1,na do local a = arguments[i] local variant = a[2] if variant == "list" then snippets[#snippets+1] = ",_clma_([[#" snippets[#snippets+1] = i snippets[#snippets+1] = "]])" elseif variant == "hash" then snippets[#snippets+1] = ",_clmh_([[#" snippets[#snippets+1] = i snippets[#snippets+1] = "]])" elseif variant == "number" then snippets[#snippets+1] = ",_clmn_([[#" snippets[#snippets+1] = i snippets[#snippets+1] = "]])" else snippets[#snippets+1] = ",[[#" snippets[#snippets+1] = i snippets[#snippets+1] = "]]" end end snippets[#snippets+1] = ")}}" contextsprint(ctxcatcodes,unpack(snippets)) if environment then -- needs checking contextsprint(ctxcatcodes,"\\setuvalue{",estart,name,"}{",checkers[opt],mkivdo,"}") contextsprint(ctxcatcodes,"\\setuvalue{",estop, name,"}{\\ctxlua{_clme_('",name,"')}}") end if not environment or environment == "both" then contextsprint(ctxcatcodes,"\\setuvalue{", name,"}{",checkers[opt],mkivdo,"}") end end if environment then starters[name] = specification.starter stoppers[name] = specification.stopper else macros[name] = specification.macro end end end function interfaces.tolist(t) local r = { } for i=1,#t do r[i] = t[i] end local n = #r for k,v in table.sortedhash(t) do if type(k) ~= "number" then n = n + 1 r[n] = k .. "=" .. v end end return concat(r,", ") end --~ \startluacode --~ function test(opt_1, opt_2, arg_1) --~ context.startnarrower() --~ context("options 1: %s",interfaces.tolist(opt_1)) --~ context.par() --~ context("options 2: %s",interfaces.tolist(opt_2)) --~ context.par() --~ context("argument 1: %s",arg_1) --~ context.stopnarrower() --~ end --~ interfaces.definecommand { --~ name = "test", --~ arguments = { --~ { "option", "list" }, --~ { "option", "hash" }, --~ { "content", "string" }, --~ }, --~ macro = test, --~ } --~ \stopluacode --~ test: \test[1][a=3]{whatever} --~ \startluacode --~ local function startmore(opt_1) --~ context.startnarrower() --~ context("start more, options: %s",interfaces.tolist(opt_1)) --~ context.startnarrower() --~ end --~ local function stopmore(opt_1) --~ context.stopnarrower() --~ context("stop more, options: %s",interfaces.tolist(opt_1)) --~ context.stopnarrower() --~ end --~ interfaces.definecommand ( "more", { --~ environment = true, --~ arguments = { --~ { "option", "list" }, --~ }, --~ starter = startmore, --~ stopper = stopmore, --~ } ) --~ \stopluacode --~ more: \startmore[1] one \startmore[2] two \stopmore one \stopmore context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-09.tex0000644000175000017500000002366711754241457023717 0ustar norbertnorbert%D \module %D [ file=s-pre-09, %D version=unknown, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 9, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I made this style when I had to give a presentation on %D the \MAPS\ bibliography production for several user group %D meetings. This style is rather tuned for combinations of %D examples and explanations. The colors match the \MAPS\ %D bibliography colors. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] %D A couple of years later, in 2001 this style was documented %D and made public. While documenting, I also changed box %D building on top of overlays into the now available layer %D positioning. So, this styles demonstrates quite some %D tricks. \setuppapersize [S6][S6] \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] %D Local environments can be set by using the setups commands. %D For downward compatibility, we keep supporting the \type %D {\...Settings} hooks. Using local environments is seldom %D needed. \let\TextSettings \empty \let\SampleSettings\empty \startsetups [text] \TextSettings \stopsetups \startsetups [sample] \SampleSettings \stopsetups %D The dimensions are kind of fixed. \def\FrameWidth {448pt} \def\FrameHeight {348pt} \def\FrameOffset {24pt} \def\FrameSkip {12pt} %D But they {\em can} and {\em will} be changed. \def\FrameWidth {408pt} \def\FrameHeight {318pt} %D The funny values come from the $3:4$ display aspect %D ratio. \setupcolors [state=start] \definecolor[PageColor] [s=.40] \definecolor[TextColor] [s=.90] \definecolor[InteractionColor][r=.40] \definecolor[LineColor] [r=.60,g=.60] %D Of course we go interactive and since we will probably %D open other documents, we make sure that the viewer opens a %D new window. \setupinteraction [color=InteractionColor, contrastcolor=LineColor, display=new, state=start] \setupinteractionscreen [option=max] %D Before we come to the real macros, we do a little bit of %D tuning. \setupitemize [1][packed] \setuptyping [blank=medium] %D Apart from the titlepage, the page gets a simple colored %D background. Later we will activate the background. \setupbackgrounds [page] [backgroundcolor=PageColor] %D Everything gets frames by a nice \METAPOST\ frame. \defineoverlay [background] [\uniqueMPgraphic{background}] \startuniqueMPgraphic{background} path p ; color c, w, d ; c := \MPcolor{PageColor} ; w := \MPcolor{TextColor} ; d := \MPcolor{LineColor} ; p := unitsquare xscaled OverlayWidth yscaled OverlayHeight ; pickup pencircle scaled (1.5*\FrameSkip) ; draw p withcolor c ; pickup pencircle scaled \FrameSkip ; fill p withcolor w ; draw p withcolor d ; \stopuniqueMPgraphic %D We will present samples and explanation pair||wise, so %D we need a hyperlink that skips a page. \defineoverlay [nextpage] [\overlaybutton{nextpage}] \defineoverlay [previouspage] [\overlaybutton{previouspage}] \defineoverlay [skippage] [\overlaybutton{page(+2)}] %D Layers are normally used to position multiple content on %D a specific overlay. Here we will use them to position %D only and since the samples and text will swap place, we %D will use quite a few layers. \defineoverlay [text] [\composedlayer{text}] \defineoverlay [sample] [\composedlayer{sample}] \defineoverlay [common] [\composedlayer{common}] %D There are three positions. When combined, the sample and %D text windows overlap, otherwise the lone window is %D centered. We could have used one layer and reversed the %D order by setting the \type {direction} parameter, but %D this approach is more readable. \definelayer [text] [x=\makeupwidth,y=\makeupheight,location=lt, hoffset=-\FrameSkip,voffset=-\FrameSkip] \definelayer [sample] [hoffset=\FrameSkip,voffset=\FrameSkip] \definelayer [common] [x=.5\makeupwidth,y=.5\makeupheight,location=c] %D The topic is put in the lower right corner of the text %D window. \defineoverlay [topic] [\composedlayer{topic}] \definelayer [topic] [x=\FrameWidth,y=\FrameHeight,location=lt, hoffset=-\FrameOffset,voffset=-\FrameSkip] %D The topic is put in a framed box. That way we can make %D sure that it gets a background, which looks better when %D it covers something else. Otherwise we could have stuct %D to: %D %D \starttyping %D \def\Topic#1% %D {\setlayer[topic]{\color[PageColor]{\bfb\setstrut#1}}} %D \stoptyping %D %D But, we go for the nice alternative: \def\Topic#1% {\doifsomething{#1} {\setlayer [topic] {\bfb\setstrut \inframed [frame=off,foregroundcolor=PageColor,offset=0pt, background=color,backgroundcolor=TextColor] {#1}}}} %D The sample as well as the explanation will be collected in %D a buffer. That way we can reuse the content. We could %D have used a box instead, but can we be sure that the content %D is not adapting itself? So, buffers we use. \resetbuffer[sample] \resetbuffer[text] %D Both the sample and explanation are kind of windowed. \defineframedtext [SampleText] [width=\FrameWidth,height=\FrameHeight,offset=\FrameOffset, frame=off,align=normal,strut=no,before=,after=, background={background,nextpage}] %D We safe some keying in by combining things in one macro. \def\DoSampleText#1#2#3% kind layer overlays {\setupframedtexts[SampleText][background={background,#3}] \setlayer[#2] {\startSampleText[none] \setups[#1] \getbuffer[#1] \stopSampleText}} \def\StartSample{\dostartbuffer[sample][StartSample][StopSample]} \def\StartText {\dostartbuffer[text] [StartText] [StopText]} %D The following definitions apply at the outer level. \def\StopSample {\startstandardmakeup \DoSampleText{sample}{common}{nextpage} \stopstandardmakeup \resetbuffer[sample]} \def\StopText {\startstandardmakeup \DoSampleText{text}{common}{topic,nextpage} \stopstandardmakeup \resetbuffer[text]} \setupbackgrounds[page][background={color,nextpage}] \setupbackgrounds[text][background=common] %D When we combine sample and text, we get slightly %D different definitions. As you can see we generate two %D pages. Watch how we manipulate the order of the %D overlays and teh nature of the buttons. Here data %D abstraction really pays off. \def\StartIdea {\bgroup \let\StopSample\relax \let\StopText \relax} \def\StopIdea% {\setupbackgrounds[page][background={color,skippage}] \setupbackgrounds[text][background={text,sample}] \startstandardmakeup \DoSampleText{sample}{sample}{previouspage} \DoSampleText{text} {text} {topic,nextpage} \stopstandardmakeup \setupbackgrounds[page][background={color,nextpage}] \setupbackgrounds[text][background={sample,text}] \startstandardmakeup \DoSampleText{sample}{sample}{previouspage} \DoSampleText{text} {text} {topic,nextpage} \stopstandardmakeup \egroup} %D The rest of the definitions takes care of the title page. %D Please don't steal this one for your own documents. \defineoverlay[joke] [\useMPgraphic{joke}{n=0}] % not to be changed! \startuseMPgraphic{joke}{n} StartPage ; path p, q ; numeric w ; pair xy ; set_grid(OverlayWidth,OverlayHeight,OverlayWidth/8,OverlayHeight/8) ; if \MPvar{n}=1 : p := fulldiamond ; fill Page withcolor \MPcolor{TextColor} ; else : p := fullsquare ; fill Page withcolor \MPcolor{PageColor} ; fi ; forever : xy := center Page randomized (OverlayWidth,OverlayHeight) ; if new_on_grid(xpart xy, ypart xy) : q := (p xyscaled (OverlayWidth/5,OverlayHeight/5)) randomized (\FrameSkip,\FrameSkip) shifted xy ; w := (\FrameSkip) randomized (\FrameSkip/2) ; draw q withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ; fill q withcolor \MPcolor{TextColor} ; draw q withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ; fi ; exitif grid_full ; endfor ; StopPage ; \stopuseMPgraphic \defineoverlay[fuzzy][\useMPgraphic{fuzzy}] \startuseMPgraphic{fuzzy} path p ; numeric w ; p := (fullsquare xyscaled (OverlayWidth,OverlayHeight)) randomized (\FrameSkip,\FrameSkip) ; w := (\FrameSkip) randomized (\FrameSkip/2) ; draw p withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ; \stopuseMPgraphic %D This time we use a fit window, but with a slightly randomized %D frame, our trademark so to say. \def\StartTitlePage {\bgroup \setupbackgrounds[page][background={joke,nextpage}] \startstandardmakeup \switchtobodyfont[big] \setupframedtexts [SampleText] [background=fuzzy, foregroundcolor=PageColor, width=fit, height=fit, align=middle] \startSampleText[middle] \bfd\setupinterlinespace \def\\{\bfb\setupinterlinespace\vfil\def\\{\vfil}}} \def\StopTitlePage {\stopSampleText \stopstandardmakeup \egroup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D Let's nill some error prone presentation macros. \let\Subject \Topic \let\Topics \gobbleoneargument \let\Subjects \relax %D We will avoid \quote {overfull} messages. \dontcomplain \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \setupbodyfont[12pt] \TitlePage{Quotes, Quotes\\and more quotes} \StartIdea \StartSample \input knuth \par \StopSample \StartText \Topic{Tufte} \input tufte \par \StopText \StopIdea \StartIdea \StartSample \input materie \par \StopSample \StartText \input reich \par \StopText \StopIdea \StartText \input tufte \par \StopText \StartIdea \StartSample \input knuth \par \StopSample \StartText \input tufte \par \StopText \StopIdea \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-fnt.mkiv0000644000175000017500000000336512130411274024352 0ustar norbertnorbert%D \module %D [ file=syst-fnt, %D version=2006.08.11, %D title=\CONTEXT\ System Macros, %D subtitle=Font Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % formal names cf the tb \& tbt \unprotect \def\fontslantperpoint {\fontdimen\plusone } \def\fontinterwordspace {\fontdimen\plustwo } \def\fontinterwordstretch{\fontdimen\plusthree} \def\fontinterwordshrink {\fontdimen\plusfour } \def\fontexheight {\fontdimen\plusfive } \def\fontemwidth {\fontdimen\plussix } \def\fontextraspace {\fontdimen\plusseven} \def\slantperpoint {\fontdimen\plusone \font} \def\interwordspace {\fontdimen\plustwo \font} \def\interwordstretch {\fontdimen\plusthree\font} \def\interwordshrink {\fontdimen\plusfour \font} \def\exheight {\fontdimen\plusfive \font} \def\emwidth {\fontdimen\plussix \font} \def\extraspace {\fontdimen\plusseven\font} \def\mathsupdisplay {\fontdimen13 } % to be remapped \def\mathsupnormal {\fontdimen14 } % to be remapped \def\mathsupcramped {\fontdimen15 } % to be remapped \def\mathsubnormal {\fontdimen16 } % to be remapped \def\mathsubcombined {\fontdimen17 } % to be remapped \def\mathaxisheight {\fontdimen22 } % to be remapped \def\currentspaceskip {\interwordspace\s!plus\interwordstretch\s!minus\interwordshrink\relax} \def\mathstacktotal {\dimexpr\Umathstacknumup\scriptstyle+\Umathstackdenomdown\scriptstyle\relax} \def\mathstackvgap {\Umathstackvgap\scriptstyle} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-mis.lua0000644000175000017500000003163611754241457024132 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-mis'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Although we moved most pdf handling to the lua end, we didn't change -- the overall approach. For instance we share all resources i.e. we -- don't make subsets for each xform or page. The current approach is -- quite efficient. A big difference between MkII and MkIV is that we -- now use forward references. In this respect the MkII code shows that -- it evolved over a long period, when backends didn't provide forward -- referencing and references had to be tracked in multiple passes. Of -- course there are a couple of more changes. local next, tostring = next, tostring local format, gsub = string.format, string.gsub local texset = tex.set local backends, lpdf, nodes = backends, lpdf, nodes local nodeinjections = backends.pdf.nodeinjections local codeinjections = backends.pdf.codeinjections local registrations = backends.pdf.registrations local copy_node = node.copy local nodepool = nodes.pool local pdfliteral = nodepool.pdfliteral local register = nodepool.register local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfboolean = lpdf.boolean local pdfconstant = lpdf.constant local pdfreference = lpdf.reference local pdfunicode = lpdf.unicode local pdfverbose = lpdf.verbose local pdfstring = lpdf.string local pdfflushobject = lpdf.flushobject local pdfflushstreamobject = lpdf.flushstreamobject local variables = interfaces.variables local positive = register(pdfliteral("/GSpositive gs")) local negative = register(pdfliteral("/GSnegative gs")) local overprint = register(pdfliteral("/GSoverprint gs")) local knockout = register(pdfliteral("/GSknockout gs")) local function initializenegative() local a = pdfarray { 0, 1 } local g = pdfconstant("ExtGState") local d = pdfdictionary { FunctionType = 4, Range = a, Domain = a, } local negative = pdfdictionary { Type = g, TR = pdfreference(pdfflushstreamobject("{ 1 exch sub }",d)) } local positive = pdfdictionary { Type = g, TR = pdfconstant("Identity") } lpdf.adddocumentextgstate("GSnegative", pdfreference(pdfflushobject(negative))) lpdf.adddocumentextgstate("GSpositive", pdfreference(pdfflushobject(positive))) initializenegative = nil end local function initializeoverprint() local g = pdfconstant("ExtGState") local knockout = pdfdictionary { Type = g, OP = false, OPM = 0 } local overprint = pdfdictionary { Type = g, OP = true, OPM = 1 } lpdf.adddocumentextgstate("GSknockout", pdfreference(pdfflushobject(knockout))) lpdf.adddocumentextgstate("GSoverprint", pdfreference(pdfflushobject(overprint))) initializeoverprint = nil end function nodeinjections.overprint() if initializeoverprint then initializeoverprint() end return copy_node(overprint) end function nodeinjections.knockout () if initializeoverprint then initializeoverprint() end return copy_node(knockout) end function nodeinjections.positive() if initializenegative then initializenegative() end return copy_node(positive) end function nodeinjections.negative() if initializenegative then initializenegative() end return copy_node(negative) end -- -- function codeinjections.addtransparencygroup() -- -- png: /CS /DeviceRGB /I true -- local d = pdfdictionary { -- S = pdfconstant("Transparency"), -- I = true, -- K = true, -- } -- lpdf.registerpagefinalizer(function() lpdf.addtopageattributes("Group",d) end) -- hm -- end -- actions (todo: store and update when changed) local openpage, closepage, opendocument, closedocument function codeinjections.registerdocumentopenaction(open) opendocument = open end function codeinjections.registerdocumentcloseaction(close) closedocument = close end function codeinjections.registerpageopenaction(open) openpage = open end function codeinjections.registerpagecloseaction(close) closepage = close end local function flushdocumentactions() if opendocument then lpdf.addtocatalog("OpenAction",lpdf.action(opendocument)) end if closedocument then lpdf.addtocatalog("CloseAction",lpdf.action(closedocument)) end end local function flushpageactions() if openpage or closepage then local d = pdfdictionary() if openpage then d.O = lpdf.action(openpage) end if closepage then d.C = lpdf.action(closepage) end lpdf.addtopageattributes("AA",d) end end lpdf.registerpagefinalizer (flushpageactions, "page actions") lpdf.registerdocumentfinalizer(flushdocumentactions,"document actions") --- info : this can change and move elsewhere local identity = { } function codeinjections.setupidentity(specification) for k, v in next, specification do if v ~= "" then identity[k] = v end end end local done = false -- using "setupidentity = function() end" fails as the meaning is frozen in register local function setupidentity() if not done then local title = identity.title if not title or title == "" then title = tex.jobname end lpdf.addtoinfo("Title", pdfunicode(title), title) local subtitle = identity.subtitle or "" if subtitle ~= "" then lpdf.addtoinfo("Subject", pdfunicode(subtitle), subtitle) end local author = identity.author or "" if author ~= "" then lpdf.addtoinfo("Author", pdfunicode(author), author) -- '/Author' in /Info, 'Creator' in XMP end local creator = identity.creator or "" if creator ~= "" then lpdf.addtoinfo("Creator", pdfunicode(creator), creator) -- '/Creator' in /Info, 'CreatorTool' in XMP end lpdf.addtoinfo("CreationDate", pdfstring(lpdf.pdftimestamp(lpdf.timestamp()))) local date = identity.date or "" local pdfdate = lpdf.pdftimestamp(date) if pdfdate then lpdf.addtoinfo("ModDate", pdfstring(pdfdate), date) else -- users should enter the date in 2010-01-19T23:27:50+01:00 format -- and if not provided that way we use the creation time instead date = lpdf.timestamp() lpdf.addtoinfo("ModDate", pdfstring(lpdf.pdftimestamp(date)), date) end local keywords = identity.keywords or "" if keywords ~= "" then keywords = gsub(keywords, "[%s,]+", " ") lpdf.addtoinfo("Keywords",pdfunicode(keywords), keywords) end local id = lpdf.id() lpdf.addtoinfo("ID", pdfstring(id), id) -- needed for pdf/x done = true else -- no need for a message end end lpdf.registerpagefinalizer(setupidentity,"identity") -- or when we want to be able to set things after pag e1: -- -- lpdf.registerdocumentfinalizer(setupidentity,1,"identity") local function flushjavascripts() local t = interactions.javascripts.flushpreambles() if #t > 0 then local a = pdfarray() local pdf_javascript = pdfconstant("JavaScript") for i=1,#t do local name, script = t[i][1], t[i][2] local j = pdfdictionary { S = pdf_javascript, JS = pdfreference(pdfflushstreamobject(script)), } a[#a+1] = pdfstring(name) a[#a+1] = pdfreference(pdfflushobject(j)) end lpdf.addtonames("JavaScript",pdfreference(pdfflushobject(pdfdictionary{ Names = a }))) end end lpdf.registerdocumentfinalizer(flushjavascripts,"javascripts") -- -- -- local pagespecs = { [variables.max] = { "FullScreen", false, false }, [variables.bookmark] = { "UseOutlines", false, false }, [variables.fit] = { "UseNone", false, true }, [variables.doublesided] = { "UseNone", "TwoColumnRight", true }, [variables.singlesided] = { "UseNone", false, false }, [variables.default] = { "UseNone", "auto", false }, [variables.auto] = { "UseNone", "auto", false }, [variables.none] = { false, false, false }, } local pagespec, topoffset, leftoffset, height, width, doublesided = "default", 0, 0, 0, 0, false function codeinjections.setupcanvas(specification) local paperheight = specification.paperheight local paperwidth = specification.paperwidth local paperdouble = specification.doublesided if paperheight then texset('global','pdfpageheight',paperheight) end if paperwidth then texset('global','pdfpagewidth',paperwidth) end pagespec = specification.mode or pagespec topoffset = specification.topoffset or 0 leftoffset = specification.leftoffset or 0 height = specification.height or tex.pdfpageheight width = specification.width or tex.pdfpagewidth if paperdouble ~= nil then doublesided = paperdouble end end local function documentspecification() local spec = pagespecs[pagespec] or pagespecs[variables.default] if spec then local mode, layout, fit = spec[1], spec[2], spec[3] if layout == variables.auto then if doublesided then spec = pagespecs[variables.doublesided] -- to be checked voor interfaces if spec then mode, layout, fit = spec[1], spec[2], spec[3] end else layout = false end end mode = mode and pdfconstant(mode) layout = layout and pdfconstant(layout) fit = fit and pdfdictionary { FitWindow = true } if layout then lpdf.addtocatalog("PageLayout",layout) end if mode then lpdf.addtocatalog("PageMode",mode) end if fit then lpdf.addtocatalog("ViewerPreferences",fit) end lpdf.addtoinfo ("Trapped", pdfconstant("False")) -- '/Trapped' in /Info, 'Trapped' in XMP lpdf.addtocatalog("Version", pdfconstant(format("1.%s",tex.pdfminorversion))) end end -- temp hack: the mediabox is not under our control and has a precision of 4 digits local factor = number.dimenfactors.bp local function boxvalue(n) -- we could share them return pdfverbose(format("%0.4f",factor * n)) end local function pagespecification() local pageheight = tex.pdfpageheight local box = pdfarray { -- can be cached boxvalue(leftoffset), boxvalue(pageheight+topoffset-height), boxvalue(width-leftoffset), boxvalue(pageheight-topoffset), } lpdf.addtopageattributes("CropBox",box) -- mandate for rendering lpdf.addtopageattributes("TrimBox",box) -- mandate for pdf/x -- lpdf.addtopageattributes("BleedBox",box) -- lpdf.addtopageattributes("ArtBox",box) end lpdf.registerpagefinalizer(pagespecification,"page specification") lpdf.registerdocumentfinalizer(documentspecification,"document specification") -- Page Label support ... -- -- In principle we can also support /P (prefix) as we can just use the verbose form -- and we can then forget about the /St (start) as we don't care about those few -- extra bytes due to lack of collapsing. Anyhow, for that we need a stupid prefix -- variant and that's not on the agenda now. local map = { numbers = "D", Romannumerals = "R", romannumerals = "r", Characters = "A", characters = "a", } local function featurecreep() local pages, lastconversion, list = structures.pages.tobesaved, nil, pdfarray() local getstructureset = structures.sets.get for i=1,#pages do local p = pages[i] if not p then return -- fatal error else local numberdata = p.numberdata if numberdata then local conversionset = numberdata.conversionset if conversionset then local conversion = getstructureset("structure:conversions",p.block,conversionset,1,"numbers") if conversion ~= lastconversion then lastconversion = conversion list[#list+1] = i - 1 -- pdf starts numbering at 0 list[#list+1] = pdfdictionary { S = pdfconstant(map[conversion] or map.numbers) } end end end if not lastconversion then lastconversion = "numbers" list[#list+1] = i - 1 -- pdf starts numbering at 0 list[#list+1] = pdfdictionary { S = pdfconstant(map.numbers) } end end end lpdf.addtocatalog("PageLabels", pdfdictionary { Nums = list }) end lpdf.registerdocumentfinalizer(featurecreep,"featurecreep") context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-20.mkii0000644000175000017500000001636411754241457024045 0ustar norbertnorbert%D \module %D [ file=x-res-20, %D version=2006.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Figure Lists, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For the beginning we have used \TEXUTIL\ to hels us deal with %D graphics whose dimensions could not be determines and|/|or to %D provide placeholder info for graphics that were not available. %D Much of this functionality is now moved to \RLXTOOLS\ and %D therefore it makes sense to reimplement the code that deals with %D producing an overview of grapghics as well. At the same time we %D move some \TEX\ code from \TEXEXEC\ to here. %D %D Because the show commands are not used in real documents, but %D only for special purposed, it does not harm that this %D functionality is now part of a module. We no longer use the %D parsing code in \TEXUTIL, but rely on \IMAGEMAGICK's %D identify functionility. %D %D At the end of the file we kept the old code from \type {core-fig}. \unprotect \startXMLmapping[rlx:list] \defineXMLprocess [rl:identification] \defineXMLenvironment [rl:identify] [name=] {\bgroup\ignorespaces} {\removeunwantedspaces\doRLhandlegraphic\egroup} \defineXMLsave[rl:size] \defineXMLsave[rl:path] \defineXMLsave[rl:width] \defineXMLsave[rl:height] \stopXMLmapping \def\showexternalfigures {\dosingleempty\doshowexternalfigures} \let\doRLhandlegraphic\relax \let\doRLstartgraphics\relax \let\doRLstopgraphics \relax \let\RLfigurewidth \empty \let\RLfigureheight\empty \let\RLfiguresize \empty \let\RLfigurefile \empty \def\doRLpresetgraphic {\edef\RLfigurewidth {\the\dimexpr \XMLflush{rl:width}\relax}% \edef\RLfigureheight{\the\dimexpr \XMLflush{rl:height}\relax}% \edef\RLfiguresize {\the\numexpr0\XMLflush{rl:size}\relax}% \edef\RLfigurefile {\XMLpar{rl:identify}{name}{unknown}}} \def\doshowexternalfigures[#1]% {\bgroup \dontcomplain \setupcolors[\c!state=\v!start]% to prevent mps color conversion \getparameters[\??ex][\c!file=rlxtools.rli,\c!alternative=a,\c!offset=\!!zeropoint,\c!size=,#1]% \getvalue{\strippedcsname\doRLhandlegraphic\@@exalternative}% \startXMLmapping[rlx:list]% \startXMLignore \doRLstartgraphics \processXMLfilegrouped{\@@exfile}% \readjobfile\@@exfile\donothing\donothing \doRLstopgraphics \stopXMLignore \stopXMLmapping \egroup} \def\doRLhandlegraphica {\def\doRLhandlegraphic {\doRLpresetgraphic \getvalue{\e!start\v!figure\e!text}[\v!left,\v!none][] {} {\hbox {\externalfigure[\RLfigurefile][\c!frame=\v!on,\c!width=6cm,\c!size=\@@exsize]% \quad \framed[\c!width=\figurewidth,\c!height=\figureheight]{}% \quad}}% {\hbox{\tt\tfa\setstrut\strut\expanded{\asciistr{\RLfigurefile}}}}% \blank \tfx \starttabulate[|l|l|] \NC width \EQ \RLfigurewidth \NC \NR \NC height \EQ \RLfigureheight \NC \NR \NC size \EQ \RLfiguresize \NC \NR \stoptabulate \getvalue{\e!stop\v!figure\e!text}}} \def\doRLhandlegraphicb {\def\doRLhandlegraphic {\dontleavehmode \vbox {\doRLpresetgraphic \hsize\dimexpr.2\hsize-.8em\relax \cbox{\externalfigure[\RLfigurefile][\c!frame=\v!on,\c!factor=\v!max,\c!width=\hsize,\c!size=\@@exsize]}% \vskip.5\lineheight \midaligned{\tttf\RLfigurefile}}% \vadjust{\vskip.2\lineheight}% \quad\allowbreak}} \def\doRLhandlegraphicc {\def\doRLhandlegraphic {\doRLpresetgraphic \pagefigure[\RLfigurefile]}} \def\doRLhandlegraphicd % this one builds a dimension file for metapost/metafun {\def\doRLstartgraphics {\immediate\openout\scratchwrite=mpfigs.mp\relax \immediate\write\scratchwrite{\letterpercent\space graphic dimension file for metapost/metafun}}% \def\doRLstopgraphics {\immediate\closeout\scratchwrite}% \def\doRLhandlegraphic {\doRLpresetgraphic \immediate\write\scratchwrite{registerfigure("\RLfigurefile",\RLfigurewidth,\RLfigureheight);}}} % \showexternalfigures[alternative=b] \protect \endinput %D Old code: \def\doshowexternalfigures[#1]% {\bgroup \setupcolors[\c!state=\v!start]% to prevent mps color conversion \getparameters[\??ex][\c!alternative=a,\c!offset=\!!zeropoint,\c!size=,#1]% \getvalue{\strippedcsname\showexternalfigure\@@exalternative}% \egroup} \def\showexternalfigures {\dosingleempty\doshowexternalfigures} \def\showexternalfigurea {\bgroup \dontcomplain \def\presetfigure[##1][##2]% {\getvalue{\e!start\v!figure\e!text}[\v!left,\v!none][] {} {\hbox {\externalfigure[##1][\c!frame=\v!on,\c!width=6cm,\c!size=\@@exsize][##2]% \tfskip \framed[\c!width=\figurewidth,\c!height=\figureheight]{}}}% {\tt\tfa\expanded{\asciistr{##1}}}% \blank \tfx \def\docommand####1% {\beforesplitstring####1\at=\to\asciia \aftersplitstring ####1\at=\to\asciib \defconvertedcommand\asciib\asciib \doifsomething\asciib {\hsmash{\hbox to .75em{\asciia\hss}: \asciib}\endgraf}}% \processcommalist[##2]\docommand \strut \endgraf \getvalue{\e!stop\v!figure\e!text}}% \pushendofline \readjobfile\@@exfile\donothing\donothing \popendofline \egroup} \def\showexternalfigureb % instelbaar maken {\bgroup \def\total{5}% \globalletempty\allfigures \doglobal\newcounter\figurecounter \dontcomplain \def\docommand##1{##1&}% \def\figurecaptions% {\crcr \noalign{\nobreak\vskip.5em}% \@EA\globalprocesscommalist\@EA[\allfigures]\docommand \globalletempty\allfigures \crcr \noalign{\vskip1em\goodbreak}}% \def\presetfigure[##1][##2]% {\vbox {\divide\hsize \total \advance\hsize -1em \externalfigure [##1] [\c!frame=\v!on,\c!factor=\v!max,\c!width=\hsize,\c!size=\@@exsize][##2]}% \doglobal\addtocommalist{##1}\allfigures %\getvalue{\s!figurepreset}% \doglobal\increment\figurecounter \ifnum\figurecounter=\total \doglobal\newcounter\figurecounter \def\next{\figurecaptions}% \else \def\next{&}% \fi \next}% \pushendofline \tabskip\zeropoint \!!plus 1fill \halign to \hsize {&\hss##\hss\cr\readjobfile\@@exfile\donothing\donothing\crcr \figurecaptions} \popendofline \egroup} \def\showexternalfigurec {\bgroup \def\presetfigure[##1][##2]{\expanded{\pagefigure[##1][\c!size=\@@exsize]}}% else loop \pushendofline \readjobfile\@@exfile\donothing\donothing \popendofline \egroup} \def\showexternalfigured % to be documented; this one builds a dimension file for {\bgroup % metapost/metafun \immediate\openout\scratchwrite=mpfigs.mp \def\presetfigure[##1][##2]% {\getfiguredimensionsonly[##1]% \pagefigure[##1]% \immediate\write\scratchwrite {registerfigure("##1",\figurewidth,\figureheight);}} \pushendofline \readjobfile\@@exfile\donothing\donothing \popendofline \immediate\closeout\scratchwrite \egroup} context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-en.mkii0000644000175000017500000023260612130411274024131 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language en % \setinterfacevariable{Addition}{Addition} \setinterfacevariable{Balloon}{Balloon} \setinterfacevariable{Cap}{Cap} \setinterfacevariable{Capital}{Capital} \setinterfacevariable{Character}{Character} \setinterfacevariable{Characters}{Characters} \setinterfacevariable{CloseDocument}{CloseDocument} \setinterfacevariable{ExitViewer}{ExitViewer} \setinterfacevariable{FirstPage}{FirstPage} \setinterfacevariable{FitHeight}{FitHeight} \setinterfacevariable{FitWidth}{FitWidth} \setinterfacevariable{GotoPage}{GotoPage} \setinterfacevariable{Greek}{Greek} \setinterfacevariable{Help}{Help} \setinterfacevariable{HideField}{HideField} \setinterfacevariable{HideLayer}{HideLayer} \setinterfacevariable{Key}{Key} \setinterfacevariable{LastPage}{LastPage} \setinterfacevariable{LoadForm}{LoadForm} \setinterfacevariable{MONTH}{MONTH} \setinterfacevariable{New}{New} \setinterfacevariable{NextJump}{NextJump} \setinterfacevariable{NextPage}{NextPage} \setinterfacevariable{Numbers}{Numbers} \setinterfacevariable{OpenNamedDocument}{OpenNamedDocument} \setinterfacevariable{Paragraph}{Paragraph} \setinterfacevariable{PauseMovie}{PauseMovie} \setinterfacevariable{PauseRendering}{PauseRendering} \setinterfacevariable{PauseSound}{PauseSound} \setinterfacevariable{PreviousJump}{PreviousJump} \setinterfacevariable{PreviousPage}{PreviousPage} \setinterfacevariable{PrintDocument}{PrintDocument} \setinterfacevariable{Query}{Query} \setinterfacevariable{QueryAgain}{QueryAgain} \setinterfacevariable{ResetForm}{ResetForm} \setinterfacevariable{ResumeMovie}{ResumeMovie} \setinterfacevariable{ResumeRendering}{ResumeRendering} \setinterfacevariable{ResumeSound}{ResumeSound} \setinterfacevariable{Romannumerals}{Romannumerals} \setinterfacevariable{SaveDocument}{SaveDocument} \setinterfacevariable{SaveForm}{SaveForm} \setinterfacevariable{SaveNamedDocument}{SaveNamedDocument} \setinterfacevariable{SearchAgain}{SearchAgain} \setinterfacevariable{SearchDocument}{SearchDocument} \setinterfacevariable{ShowBookmarks}{ShowBookmarks} \setinterfacevariable{ShowField}{ShowField} \setinterfacevariable{ShowThumbs}{ShowThumbs} \setinterfacevariable{StartMovie}{StartMovie} \setinterfacevariable{StartRendering}{StartRendering} \setinterfacevariable{StartSound}{StartSound} \setinterfacevariable{StopMovie}{StopMovie} \setinterfacevariable{StopRendering}{StopRendering} \setinterfacevariable{StopSound}{StopSound} \setinterfacevariable{SubmitForm}{SubmitForm} \setinterfacevariable{ToggleLayer}{ToggleLayer} \setinterfacevariable{ToggleViewer}{ToggleViewer} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{VideLayer} \setinterfacevariable{ViewerHelp}{ViewerHelp} \setinterfacevariable{WEEKDAY}{WEEKDAY} \setinterfacevariable{WORD}{WORD} \setinterfacevariable{WORDS}{WORDS} \setinterfacevariable{Word}{Word} \setinterfacevariable{Words}{Words} \setinterfacevariable{abbreviation}{abbreviation} \setinterfacevariable{abbreviations}{abbreviations} \setinterfacevariable{absolute}{absolute} \setinterfacevariable{action}{action} \setinterfacevariable{after}{after} \setinterfacevariable{all}{all} \setinterfacevariable{always}{always} \setinterfacevariable{and}{and} \setinterfacevariable{answerarea}{answerarea} \setinterfacevariable{appendices}{appendices} \setinterfacevariable{appendix}{appendix} \setinterfacevariable{april}{april} \setinterfacevariable{atmargin}{atmargin} \setinterfacevariable{atpage}{atpage} \setinterfacevariable{attachment}{attachment} \setinterfacevariable{august}{august} \setinterfacevariable{author}{author} \setinterfacevariable{auto}{auto} \setinterfacevariable{autointro}{autointro} \setinterfacevariable{back}{back} \setinterfacevariable{background}{background} \setinterfacevariable{backmatter}{backmatter} \setinterfacevariable{backpart}{backpart} \setinterfacevariable{backspace}{backspace} \setinterfacevariable{backward}{backward} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{before} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{big} \setinterfacevariable{bigbodyfont}{bigbodyfont} \setinterfacevariable{bigger}{bigger} \setinterfacevariable{bigpreference}{bigpreference} \setinterfacevariable{blank}{blank} \setinterfacevariable{blockquote}{blockquote} \setinterfacevariable{bodymatter}{bodymatter} \setinterfacevariable{bodypart}{bodypart} \setinterfacevariable{bold}{bold} \setinterfacevariable{bolditalic}{bolditalic} \setinterfacevariable{boldslanted}{boldslanted} \setinterfacevariable{bookmark}{bookmark} \setinterfacevariable{both}{both} \setinterfacevariable{bottom}{bottom} \setinterfacevariable{brief}{brief} \setinterfacevariable{broad}{broad} \setinterfacevariable{buffer}{buffer} \setinterfacevariable{by}{by} \setinterfacevariable{calligraphic}{calligraphic} \setinterfacevariable{cap}{cap} \setinterfacevariable{capital}{capital} \setinterfacevariable{center}{center} \setinterfacevariable{chapter}{chapter} \setinterfacevariable{character}{character} \setinterfacevariable{characters}{characters} \setinterfacevariable{chemistry}{chemistry} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{color} \setinterfacevariable{column}{column} \setinterfacevariable{columns}{columns} \setinterfacevariable{command}{command} \setinterfacevariable{commands}{commands} \setinterfacevariable{comment}{comment} \setinterfacevariable{component}{component} \setinterfacevariable{concept}{concept} \setinterfacevariable{content}{content} \setinterfacevariable{contents}{contents} \setinterfacevariable{continue}{continue} \setinterfacevariable{continued}{continued} \setinterfacevariable{controls}{controls} \setinterfacevariable{conversion}{conversion} \setinterfacevariable{current}{current} \setinterfacevariable{cutspace}{cutspace} \setinterfacevariable{date}{date} \setinterfacevariable{day}{day} \setinterfacevariable{december}{december} \setinterfacevariable{default}{default} \setinterfacevariable{depth}{depth} \setinterfacevariable{description}{description} \setinterfacevariable{disable}{disable} \setinterfacevariable{display}{display} \setinterfacevariable{dot}{dot} \setinterfacevariable{doublesided}{doublesided} \setinterfacevariable{down}{down} \setinterfacevariable{each}{each} \setinterfacevariable{edge}{edge} \setinterfacevariable{embed}{embed} \setinterfacevariable{empty}{empty} \setinterfacevariable{end}{end} \setinterfacevariable{endnote}{endnote} \setinterfacevariable{enumeration}{enumeration} \setinterfacevariable{environment}{environment} \setinterfacevariable{even}{even} \setinterfacevariable{export}{export} \setinterfacevariable{external}{external} \setinterfacevariable{fact}{fact} \setinterfacevariable{february}{february} \setinterfacevariable{figure}{figure} \setinterfacevariable{figures}{figures} \setinterfacevariable{file}{file} \setinterfacevariable{final}{final} \setinterfacevariable{first}{first} \setinterfacevariable{firstcolumn}{firstcolumn} \setinterfacevariable{firstpage}{firstpage} \setinterfacevariable{firstsubpage}{firstsubpage} \setinterfacevariable{fit}{fit} \setinterfacevariable{five}{five} \setinterfacevariable{fix}{fix} \setinterfacevariable{fixed}{fixed} \setinterfacevariable{flexible}{flexible} \setinterfacevariable{float}{float} \setinterfacevariable{flushinner}{flushinner} \setinterfacevariable{flushleft}{flushleft} \setinterfacevariable{flushouter}{flushouter} \setinterfacevariable{flushright}{flushright} \setinterfacevariable{footer}{footer} \setinterfacevariable{footnote}{footnote} \setinterfacevariable{force}{force} \setinterfacevariable{foreground}{foreground} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{formula} \setinterfacevariable{formulae}{formulae} \setinterfacevariable{forward}{forward} \setinterfacevariable{four}{four} \setinterfacevariable{frame}{frame} \setinterfacevariable{framedtext}{framedtext} \setinterfacevariable{friday}{friday} \setinterfacevariable{frontmatter}{frontmatter} \setinterfacevariable{frontpart}{frontpart} \setinterfacevariable{global}{global} \setinterfacevariable{graphic}{graphic} \setinterfacevariable{graphics}{graphics} \setinterfacevariable{gray}{gray} \setinterfacevariable{greek}{greek} \setinterfacevariable{grid}{grid} \setinterfacevariable{halfline}{halfline} \setinterfacevariable{handwritten}{handwritten} \setinterfacevariable{hang}{hang} \setinterfacevariable{hanging}{hanging} \setinterfacevariable{head}{head} \setinterfacevariable{header}{header} \setinterfacevariable{height}{height} \setinterfacevariable{helptext}{helptext} \setinterfacevariable{hencefore}{hencefore} \setinterfacevariable{here}{here} \setinterfacevariable{hereafter}{hereafter} \setinterfacevariable{hidden}{hidden} \setinterfacevariable{hiding}{hiding} \setinterfacevariable{high}{high} \setinterfacevariable{horizontal}{horizontal} \setinterfacevariable{hyphenated}{hyphenated} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{inbetween} \setinterfacevariable{index}{index} \setinterfacevariable{indices}{indices} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{inherit} \setinterfacevariable{inleft}{inleft} \setinterfacevariable{inmargin}{inmargin} \setinterfacevariable{inner}{inner} \setinterfacevariable{inneredge}{inneredge} \setinterfacevariable{innermargin}{innermargin} \setinterfacevariable{inright}{inright} \setinterfacevariable{interaction}{interaction} \setinterfacevariable{interactionmenu}{interactionmenu} \setinterfacevariable{intermezzi}{intermezzi} \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{intext} \setinterfacevariable{intro}{intro} \setinterfacevariable{italic}{italic} \setinterfacevariable{italicbold}{italicbold} \setinterfacevariable{item}{item} \setinterfacevariable{itemize}{itemize} \setinterfacevariable{its}{its} \setinterfacevariable{january}{january} \setinterfacevariable{joinedup}{joinedup} \setinterfacevariable{july}{july} \setinterfacevariable{june}{june} \setinterfacevariable{keep}{keep} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{label} \setinterfacevariable{landscape}{landscape} \setinterfacevariable{last}{last} \setinterfacevariable{lastcolumn}{lastcolumn} \setinterfacevariable{lastpage}{lastpage} \setinterfacevariable{lastpagenumber}{lastpagenumber} \setinterfacevariable{lastsubpage}{lastsubpage} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{left} \setinterfacevariable{leftedge}{leftedge} \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{leftmargin} \setinterfacevariable{leftpage}{leftpage} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legend} \setinterfacevariable{less}{less} \setinterfacevariable{lesshyphenation}{lesshyphenation} \setinterfacevariable{line}{line} \setinterfacevariable{linenote}{linenote} \setinterfacevariable{lines}{lines} \setinterfacevariable{list}{list} \setinterfacevariable{local}{local} \setinterfacevariable{localenvironment}{localenvironment} \setinterfacevariable{logo}{logo} \setinterfacevariable{logos}{logos} \setinterfacevariable{lohi}{lohi} \setinterfacevariable{loose}{loose} \setinterfacevariable{low}{low} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{makeup} \setinterfacevariable{mar}{mar} \setinterfacevariable{march}{march} \setinterfacevariable{margin}{margin} \setinterfacevariable{marginedge}{marginedge} \setinterfacevariable{margintitle}{margintitle} \setinterfacevariable{marking}{marking} \setinterfacevariable{mathalignment}{mathalignment} \setinterfacevariable{mathcases}{mathcases} \setinterfacevariable{mathematics}{mathematics} \setinterfacevariable{mathmatrix}{mathmatrix} \setinterfacevariable{max}{max} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{may} \setinterfacevariable{mediaeval}{mediaeval} \setinterfacevariable{medium}{medium} \setinterfacevariable{middle}{middle} \setinterfacevariable{min}{min} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{minheight} \setinterfacevariable{minwidth}{minwidth} \setinterfacevariable{mirrored}{mirrored} \setinterfacevariable{monday}{monday} \setinterfacevariable{mono}{mono} \setinterfacevariable{month}{month} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} \setinterfacevariable{name}{name} \setinterfacevariable{narrow}{narrow} \setinterfacevariable{negative}{negative} \setinterfacevariable{never}{never} \setinterfacevariable{new}{new} \setinterfacevariable{next}{next} \setinterfacevariable{nextevenpage}{nextevenpage} \setinterfacevariable{nextoddpage}{nextoddpage} \setinterfacevariable{nextpage}{nextpage} \setinterfacevariable{nextsubpage}{nextsubpage} \setinterfacevariable{no}{no} \setinterfacevariable{nocheck}{nocheck} \setinterfacevariable{nofit}{nofit} \setinterfacevariable{nogrid}{nogrid} \setinterfacevariable{nohz}{nohz} \setinterfacevariable{nomarking}{nomarking} \setinterfacevariable{none}{none} \setinterfacevariable{nonumber}{nonumber} \setinterfacevariable{normal}{normal} \setinterfacevariable{nospacing}{nospacing} \setinterfacevariable{not}{not} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{nothanging} \setinterfacevariable{nothyphenated}{nothyphenated} \setinterfacevariable{november}{november} \setinterfacevariable{nowhere}{nowhere} \setinterfacevariable{nowhite}{nowhite} \setinterfacevariable{number}{number} \setinterfacevariable{numbers}{numbers} \setinterfacevariable{october}{october} \setinterfacevariable{odd}{odd} \setinterfacevariable{off}{off} \setinterfacevariable{offset}{offset} \setinterfacevariable{old}{old} \setinterfacevariable{on}{on} \setinterfacevariable{one}{one} \setinterfacevariable{opposite}{opposite} \setinterfacevariable{outer}{outer} \setinterfacevariable{outeredge}{outeredge} \setinterfacevariable{outermargin}{outermargin} \setinterfacevariable{overbar}{overbar} \setinterfacevariable{overbars}{overbars} \setinterfacevariable{overlay}{overlay} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{overstrike} \setinterfacevariable{overstrikes}{overstrikes} \setinterfacevariable{packed}{packed} \setinterfacevariable{page}{page} \setinterfacevariable{pagecomment}{pagecomment} \setinterfacevariable{pagenumber}{pagenumber} \setinterfacevariable{paper}{paper} \setinterfacevariable{paragraph}{paragraph} \setinterfacevariable{part}{part} \setinterfacevariable{positive}{positive} \setinterfacevariable{postponing}{postponing} \setinterfacevariable{postscript}{postscript} \setinterfacevariable{preference}{preference} \setinterfacevariable{preview}{preview} \setinterfacevariable{previous}{previous} \setinterfacevariable{previousevenpage}{previousevenpage} \setinterfacevariable{previousoddpage}{previousoddpage} \setinterfacevariable{previouspage}{previouspage} \setinterfacevariable{previoussubpage}{previoussubpage} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{printable} \setinterfacevariable{process}{process} \setinterfacevariable{product}{product} \setinterfacevariable{program}{program} \setinterfacevariable{project}{project} \setinterfacevariable{protected}{protected} \setinterfacevariable{quadruple}{quadruple} \setinterfacevariable{quarterline}{quarterline} \setinterfacevariable{quotation}{quotation} \setinterfacevariable{quote}{quote} \setinterfacevariable{ran}{ran} \setinterfacevariable{random}{random} \setinterfacevariable{readonly}{readonly} \setinterfacevariable{rectangular}{rectangular} \setinterfacevariable{reference}{reference} \setinterfacevariable{referral}{referral} \setinterfacevariable{register}{register} \setinterfacevariable{regular}{regular} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{relative} \setinterfacevariable{repeat}{repeat} \setinterfacevariable{required}{required} \setinterfacevariable{reset}{reset} \setinterfacevariable{reverse}{reverse} \setinterfacevariable{right}{right} \setinterfacevariable{rightedge}{rightedge} \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{rightmargin} \setinterfacevariable{rightpage}{rightpage} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{roman} \setinterfacevariable{romannumerals}{romannumerals} \setinterfacevariable{rotate}{rotate} \setinterfacevariable{rotated}{rotated} \setinterfacevariable{round}{round} \setinterfacevariable{row}{row} \setinterfacevariable{rule}{rule} \setinterfacevariable{samepage}{samepage} \setinterfacevariable{sans}{sans} \setinterfacevariable{sansbold}{sansbold} \setinterfacevariable{sansserif}{sansserif} \setinterfacevariable{saturday}{saturday} \setinterfacevariable{screen}{screen} \setinterfacevariable{section}{section} \setinterfacevariable{sectionblockenvironment}{sectionblockenvironment} \setinterfacevariable{sectionnumber}{sectionnumber} \setinterfacevariable{see}{see} \setinterfacevariable{september}{september} \setinterfacevariable{serif}{serif} \setinterfacevariable{serried}{serried} \setinterfacevariable{setups}{setups} \setinterfacevariable{sheet}{sheet} \setinterfacevariable{short}{short} \setinterfacevariable{singlesided}{singlesided} \setinterfacevariable{slanted}{slanted} \setinterfacevariable{slantedbold}{slantedbold} \setinterfacevariable{small}{small} \setinterfacevariable{smallbodyfont}{smallbodyfont} \setinterfacevariable{smallbold}{smallbold} \setinterfacevariable{smallbolditalic}{smallbolditalic} \setinterfacevariable{smallboldslanted}{smallboldslanted} \setinterfacevariable{smallcaps}{smallcaps} \setinterfacevariable{smaller}{smaller} \setinterfacevariable{smallitalic}{smallitalic} \setinterfacevariable{smallitalicbold}{smallitalicbold} \setinterfacevariable{smallnormal}{smallnormal} \setinterfacevariable{smallslanted}{smallslanted} \setinterfacevariable{smallslantedbold}{smallslantedbold} \setinterfacevariable{smalltype}{smalltype} \setinterfacevariable{somewhere}{somewhere} \setinterfacevariable{sorted}{sorted} \setinterfacevariable{space}{space} \setinterfacevariable{spacing}{spacing} \setinterfacevariable{speech}{speech} \setinterfacevariable{split}{split} \setinterfacevariable{spot}{spot} \setinterfacevariable{standard}{standard} \setinterfacevariable{start}{start} \setinterfacevariable{starter}{starter} \setinterfacevariable{sticker}{sticker} \setinterfacevariable{stop}{stop} \setinterfacevariable{stopper}{stopper} \setinterfacevariable{stretch}{stretch} \setinterfacevariable{strict}{strict} \setinterfacevariable{strong}{strong} \setinterfacevariable{strut}{strut} \setinterfacevariable{sub}{sub} \setinterfacevariable{subbackward}{subbackward} \setinterfacevariable{subformula}{subformula} \setinterfacevariable{subforward}{subforward} \setinterfacevariable{subject}{subject} \setinterfacevariable{subpage}{subpage} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{subsection} \setinterfacevariable{subsubject}{subsubject} \setinterfacevariable{subsubsection}{subsubsection} \setinterfacevariable{subsubsubject}{subsubsubject} \setinterfacevariable{subsubsubsection}{subsubsubsection} \setinterfacevariable{subsubsubsubject}{subsubsubsubject} \setinterfacevariable{subsubsubsubsection}{subsubsubsubsection} \setinterfacevariable{subsubsubsubsubject}{subsubsubsubsubject} \setinterfacevariable{subsubsubsubsubsection}{subsubsubsubsubsection} \setinterfacevariable{subsubsubsubsubsubject}{subsubsubsubsubsubject} \setinterfacevariable{subsubsubsubsubsubsection}{subsubsubsubsubsubsection} \setinterfacevariable{subsubsubsubsubsubsubject}{subsubsubsubsubsubsubject} \setinterfacevariable{subsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsection} \setinterfacevariable{subsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubject} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsubsection} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubsubject} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsubsubsection} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubsubsubject} \setinterfacevariable{sunday}{sunday} \setinterfacevariable{support}{support} \setinterfacevariable{sym}{sym} \setinterfacevariable{symbol}{symbol} \setinterfacevariable{synchronize}{synchronize} \setinterfacevariable{system}{system} \setinterfacevariable{table}{table} \setinterfacevariable{tablehead}{tablehead} \setinterfacevariable{tables}{tables} \setinterfacevariable{tabletail}{tabletail} \setinterfacevariable{tabulate}{tabulate} \setinterfacevariable{tabulatehead}{tabulatehead} \setinterfacevariable{tabulatetail}{tabulatetail} \setinterfacevariable{tall}{tall} \setinterfacevariable{teletype}{teletype} \setinterfacevariable{temporary}{temporary} \setinterfacevariable{test}{test} \setinterfacevariable{text}{text} \setinterfacevariable{three}{three} \setinterfacevariable{thursday}{thursday} \setinterfacevariable{tight}{tight} \setinterfacevariable{title}{title} \setinterfacevariable{toggle}{wissel} \setinterfacevariable{tolerant}{tolerant} \setinterfacevariable{top}{top} \setinterfacevariable{tuesday}{tuesday} \setinterfacevariable{two}{two} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{type} \setinterfacevariable{typing}{typing} \setinterfacevariable{unavailable}{unavailable} \setinterfacevariable{underbar}{underbar} \setinterfacevariable{underbars}{underbars} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{unit} \setinterfacevariable{units}{units} \setinterfacevariable{unknown}{unknown} \setinterfacevariable{unpacked}{unpacked} \setinterfacevariable{up}{up} \setinterfacevariable{url}{url} \setinterfacevariable{used}{used} \setinterfacevariable{value}{value} \setinterfacevariable{vertical}{vertical} \setinterfacevariable{very}{very} \setinterfacevariable{verystrict}{verystrict} \setinterfacevariable{verytolerant}{verytolerant} \setinterfacevariable{weak}{weak} \setinterfacevariable{wednesday}{wednesday} \setinterfacevariable{week}{week} \setinterfacevariable{weekday}{weekday} \setinterfacevariable{white}{white} \setinterfacevariable{wide}{wide} \setinterfacevariable{width}{width} \setinterfacevariable{word}{word} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{year} \setinterfacevariable{yes}{yes} % definitions for interface constants for language en % \setinterfaceconstant{action}{action} \setinterfaceconstant{address}{address} \setinterfaceconstant{after}{after} \setinterfaceconstant{afterhead}{afterhead} \setinterfaceconstant{afterkey}{afterkey} \setinterfaceconstant{aftersection}{aftersection} \setinterfaceconstant{align}{align} \setinterfaceconstant{aligncharacter}{aligncharacter} \setinterfaceconstant{alignmentcharacter}{alignmentcharacter} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{aligntitle} \setinterfaceconstant{alternative}{alternative} \setinterfaceconstant{anchor}{anchor} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{arrow} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{at} \setinterfaceconstant{author}{author} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{auto} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{autofile} \setinterfaceconstant{autofocus}{autofocus} \setinterfaceconstant{autohang}{autohang} \setinterfaceconstant{autostrut}{autostrut} \setinterfaceconstant{autowidth}{autowidth} \setinterfaceconstant{availableheight}{availableheight} \setinterfaceconstant{availablewidth}{availablewidth} \setinterfaceconstant{axis}{axis} \setinterfaceconstant{background}{background} \setinterfaceconstant{backgroundcolor}{backgroundcolor} \setinterfaceconstant{backgroundcorner}{backgroundcorner} \setinterfaceconstant{backgrounddepth}{backgrounddepth} \setinterfaceconstant{backgroundoffset}{backgroundoffset} \setinterfaceconstant{backgroundradius}{backgroundradius} \setinterfaceconstant{backgroundscreen}{backgroundscreen} \setinterfaceconstant{backreference}{backreference} \setinterfaceconstant{backspace}{backspace} \setinterfaceconstant{balance}{balance} \setinterfaceconstant{before}{before} \setinterfaceconstant{beforehead}{beforehead} \setinterfaceconstant{beforesection}{beforesection} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{big} \setinterfaceconstant{blank}{blank} \setinterfaceconstant{blockway}{blockway} \setinterfaceconstant{bodyfont}{bodyfont} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{bookmark} \setinterfaceconstant{bottom}{bottom} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{bottomdistance} \setinterfaceconstant{bottomframe}{bottomframe} \setinterfaceconstant{bottomoffset}{bottomoffset} \setinterfaceconstant{bottomspace}{bottomspace} \setinterfaceconstant{bottomstate}{bottomstate} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{cache} \setinterfaceconstant{calculate}{calculate} \setinterfaceconstant{category}{category} \setinterfaceconstant{ccommand}{ccommand} \setinterfaceconstant{click}{click} \setinterfaceconstant{clickin}{clickin} \setinterfaceconstant{clickout}{clickout} \setinterfaceconstant{clipoffset}{clipoffset} \setinterfaceconstant{closeaction}{closeaction} \setinterfaceconstant{closecommand}{closecommand} \setinterfaceconstant{closepage}{closepage} \setinterfaceconstant{closepageaction}{closepageaction} \setinterfaceconstant{closesymbol}{closesymbol} \setinterfaceconstant{color}{color} \setinterfaceconstant{column}{column} \setinterfaceconstant{columndistance}{columndistance} \setinterfaceconstant{columns}{columns} \setinterfaceconstant{command}{command} \setinterfaceconstant{commandafter}{commandafter} \setinterfaceconstant{commandbefore}{commandbefore} \setinterfaceconstant{commands}{commands} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{component} \setinterfaceconstant{compoundhyphen}{compoundhyphen} \setinterfaceconstant{compress}{compress} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{continue} \setinterfaceconstant{contrastcolor}{contrastcolor} \setinterfaceconstant{controls}{controls} \setinterfaceconstant{conversion}{conversion} \setinterfaceconstant{convertfile}{convertfile} \setinterfaceconstant{corner}{corner} \setinterfaceconstant{coupling}{coupling} \setinterfaceconstant{couplingway}{couplingway} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{current} \setinterfaceconstant{cutspace}{cutspace} \setinterfaceconstant{dash}{dash} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{date} \setinterfaceconstant{deepnumbercommand}{deepnumbercommand} \setinterfaceconstant{deeptextcommand}{deeptextcommand} \setinterfaceconstant{default}{default} \setinterfaceconstant{delay}{delay} \setinterfaceconstant{depth}{depth} \setinterfaceconstant{depthcorrection}{depthcorrection} \setinterfaceconstant{direction}{direction} \setinterfaceconstant{directory}{directory} \setinterfaceconstant{display}{display} \setinterfaceconstant{distance}{distance} \setinterfaceconstant{dot}{dot} \setinterfaceconstant{doublesided}{doublesided} \setinterfaceconstant{dummy}{dummy} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{edge} \setinterfaceconstant{edgedistance}{edgedistance} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{empty} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{entries} \setinterfaceconstant{equalheight}{equalheight} \setinterfaceconstant{equalwidth}{equalwidth} \setinterfaceconstant{escape}{escape} \setinterfaceconstant{evenmargin}{evenmargin} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{expansion} \setinterfaceconstant{export}{export} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{factor} \setinterfaceconstant{fallback}{fallback} \setinterfaceconstant{family}{family} \setinterfaceconstant{fieldbackgroundcolor}{fieldbackgroundcolor} \setinterfaceconstant{fieldframecolor}{fieldframecolor} \setinterfaceconstant{fieldlayer}{fieldlayer} \setinterfaceconstant{fieldoffset}{fieldoffset} \setinterfaceconstant{file}{file} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{firstpage} \setinterfaceconstant{focus}{focus} \setinterfaceconstant{focusin}{focusin} \setinterfaceconstant{focusout}{focusout} \setinterfaceconstant{footer}{footer} \setinterfaceconstant{footerdistance}{footerdistance} \setinterfaceconstant{footerstate}{footerstate} \setinterfaceconstant{force}{force} \setinterfaceconstant{foregroundcolor}{foregroundcolor} \setinterfaceconstant{foregroundstyle}{foregroundstyle} \setinterfaceconstant{format}{format} \setinterfaceconstant{frame}{frame} \setinterfaceconstant{framecolor}{framecolor} \setinterfaceconstant{framecorner}{framecorner} \setinterfaceconstant{framedepth}{framedepth} \setinterfaceconstant{frameoffset}{frameoffset} \setinterfaceconstant{frameradius}{frameradius} \setinterfaceconstant{frames}{frames} \setinterfaceconstant{from}{from} \setinterfaceconstant{get}{get} \setinterfaceconstant{global}{global} \setinterfaceconstant{grid}{grid} \setinterfaceconstant{hang}{hang} \setinterfaceconstant{hcompact}{hcompact} \setinterfaceconstant{headalign}{headalign} \setinterfaceconstant{headcolor}{headcolor} \setinterfaceconstant{headcommand}{headcommand} \setinterfaceconstant{headconversion}{headconversion} \setinterfaceconstant{header}{header} \setinterfaceconstant{headerdistance}{headerdistance} \setinterfaceconstant{headerstate}{headerstate} \setinterfaceconstant{headlabel}{headlabel} \setinterfaceconstant{headnumber}{headnumber} \setinterfaceconstant{headstyle}{headstyle} \setinterfaceconstant{height}{height} \setinterfaceconstant{hfactor}{hfactor} \setinterfaceconstant{hfil}{hfil} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{hoffset} \setinterfaceconstant{horoffset}{horoffset} \setinterfaceconstant{hyphen}{hyphen} \setinterfaceconstant{icommand}{icommand} \setinterfaceconstant{in}{in} \setinterfaceconstant{inbetween}{inbetween} \setinterfaceconstant{increment}{increment} \setinterfaceconstant{incrementnumber}{incrementnumber} \setinterfaceconstant{indenting}{indenting} \setinterfaceconstant{indentnext}{indentnext} \setinterfaceconstant{indicator}{indicator} \setinterfaceconstant{inner}{inner} \setinterfaceconstant{innermargin}{innermargin} \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interaction} \setinterfaceconstant{interlinespace}{interlinespace} \setinterfaceconstant{internalgrid}{internalgrid} \setinterfaceconstant{itemalign}{itemalign} \setinterfaceconstant{items}{items} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{keyexpansion} \setinterfaceconstant{keys}{keys} \setinterfaceconstant{keyword}{keyword} \setinterfaceconstant{label}{label} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{lastpage} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{left} \setinterfaceconstant{leftcolor}{leftcolor} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{leftedge} \setinterfaceconstant{leftedgedistance}{leftedgedistance} \setinterfaceconstant{leftframe}{leftframe} \setinterfaceconstant{lefthyphen}{lefthyphen} \setinterfaceconstant{leftmargin}{leftmargin} \setinterfaceconstant{leftmargindistance}{leftmargindistance} \setinterfaceconstant{leftoffset}{leftoffset} \setinterfaceconstant{leftquotation}{leftquotation} \setinterfaceconstant{leftquote}{leftquote} \setinterfaceconstant{leftsentence}{leftsentence} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{leftstyle} \setinterfaceconstant{leftsubsentence}{leftsubsentence} \setinterfaceconstant{lefttext}{lefttext} \setinterfaceconstant{leftwidth}{leftwidth} \setinterfaceconstant{less}{less} \setinterfaceconstant{level}{level} \setinterfaceconstant{levels}{levels} \setinterfaceconstant{limittext}{limittext} \setinterfaceconstant{line}{line} \setinterfaceconstant{linecorrection}{linecorrection} \setinterfaceconstant{lines}{lines} \setinterfaceconstant{list}{list} \setinterfaceconstant{listtext}{listtext} \setinterfaceconstant{local}{local} \setinterfaceconstant{location}{location} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{logo} \setinterfaceconstant{logos}{logos} \setinterfaceconstant{marcolor}{marcolor} \setinterfaceconstant{margin}{margin} \setinterfaceconstant{margindistance}{margindistance} \setinterfaceconstant{marginedge}{marginedge} \setinterfaceconstant{marginedgetext}{marginedgetext} \setinterfaceconstant{margintext}{margintext} \setinterfaceconstant{marking}{marking} \setinterfaceconstant{marstyle}{marstyle} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{maxheight} \setinterfaceconstant{maxwidth}{maxwidth} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{menu} \setinterfaceconstant{method}{method} \setinterfaceconstant{middle}{middle} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middletext}{middletext} \setinterfaceconstant{midsentence}{midsentence} \setinterfaceconstant{min}{min} \setinterfaceconstant{mindepth}{mindepth} \setinterfaceconstant{minheight}{minheight} \setinterfaceconstant{minwidth}{minwidth} \setinterfaceconstant{monthconversion}{monthconversion} \setinterfaceconstant{more}{more} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{name} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{nbottom} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{next} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{nleft} \setinterfaceconstant{nlines}{nlines} \setinterfaceconstant{norm}{norm} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{nright} \setinterfaceconstant{ntop}{ntop} \setinterfaceconstant{number}{number} \setinterfaceconstant{numbercolor}{numbercolor} \setinterfaceconstant{numbercommand}{numbercommand} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{numbering} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{numberseparator} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{numberstyle} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{object} \setinterfaceconstant{obstruction}{obstruction} \setinterfaceconstant{oddmargin}{oddmargin} \setinterfaceconstant{offset}{offset} \setinterfaceconstant{openaction}{openaction} \setinterfaceconstant{openpage}{openpage} \setinterfaceconstant{openpageaction}{openpageaction} \setinterfaceconstant{option}{option} \setinterfaceconstant{order}{order} \setinterfaceconstant{orientation}{orientation} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{outermargin} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{ownnumber} \setinterfaceconstant{page}{page} \setinterfaceconstant{pageboundaries}{pageboundaries} \setinterfaceconstant{pagecolor}{pagecolor} \setinterfaceconstant{pagecolormodel}{pagecolormodel} \setinterfaceconstant{pagecommand}{pagecommand} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{pagenumber} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{pagestate} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{pagestyle} \setinterfaceconstant{palet}{palet} \setinterfaceconstant{paper}{paper} \setinterfaceconstant{paragraph}{paragraph} \setinterfaceconstant{place}{place} \setinterfaceconstant{placehead}{placehead} \setinterfaceconstant{placestopper}{placestopper} \setinterfaceconstant{position}{position} \setinterfaceconstant{prefix}{prefix} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{preset} \setinterfaceconstant{preview}{preview} \setinterfaceconstant{previous}{previous} \setinterfaceconstant{previousnumber}{previousnumber} \setinterfaceconstant{printable}{printable} \setinterfaceconstant{process}{process} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{radius} \setinterfaceconstant{random}{random} \setinterfaceconstant{range}{range} \setinterfaceconstant{reduction}{reduction} \setinterfaceconstant{ref}{ref} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{reference} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{referencing} \setinterfaceconstant{region}{region} \setinterfaceconstant{regionin}{regionin} \setinterfaceconstant{regionout}{regionout} \setinterfaceconstant{repeat}{repeat} \setinterfaceconstant{reset}{reset} \setinterfaceconstant{resetnumber}{resetnumber} \setinterfaceconstant{resolution}{resolution} \setinterfaceconstant{right}{right} \setinterfaceconstant{rightcolor}{rightcolor} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{rightedge} \setinterfaceconstant{rightedgedistance}{rightedgedistance} \setinterfaceconstant{rightframe}{rightframe} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{rightmargin} \setinterfaceconstant{rightmargindistance}{rightmargindistance} \setinterfaceconstant{rightoffset}{rightoffset} \setinterfaceconstant{rightquotation}{rightquotation} \setinterfaceconstant{rightquote}{rightquote} \setinterfaceconstant{rightsentence}{rightsentence} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{rightstyle} \setinterfaceconstant{rightsubsentence}{rightsubsentence} \setinterfaceconstant{righttext}{righttext} \setinterfaceconstant{rightwidth}{rightwidth} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{rotation} \setinterfaceconstant{rule}{rule} \setinterfaceconstant{rulecolor}{rulecolor} \setinterfaceconstant{rulecommand}{rulecommand} \setinterfaceconstant{rulethickness}{rulethickness} \setinterfaceconstant{samepage}{samepage} \setinterfaceconstant{sample}{sample} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{scale} \setinterfaceconstant{scope}{scope} \setinterfaceconstant{screen}{screen} \setinterfaceconstant{section}{section} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{sectionnumber} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{separator} \setinterfaceconstant{set}{set} \setinterfaceconstant{setups}{setups} \setinterfaceconstant{shrink}{shrink} \setinterfaceconstant{side}{side} \setinterfaceconstant{sidealign}{sidealign} \setinterfaceconstant{sidemethod}{sidemethod} \setinterfaceconstant{sidespaceafter}{sidespaceafter} \setinterfaceconstant{sidespacebefore}{sidespacebefore} \setinterfaceconstant{sign}{sign} \setinterfaceconstant{size}{size} \setinterfaceconstant{small}{small} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} \setinterfaceconstant{source}{source} \setinterfaceconstant{space}{space} \setinterfaceconstant{spaceafter}{spaceafter} \setinterfaceconstant{spacebefore}{spacebefore} \setinterfaceconstant{spaceinbetween}{spaceinbetween} \setinterfaceconstant{spacing}{spacing} \setinterfaceconstant{split}{split} \setinterfaceconstant{splitcolor}{splitcolor} \setinterfaceconstant{splitmethod}{splitmethod} \setinterfaceconstant{splitoffset}{splitoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stack} \setinterfaceconstant{start}{start} \setinterfaceconstant{starter}{starter} \setinterfaceconstant{state}{state} \setinterfaceconstant{step}{step} \setinterfaceconstant{stop}{stop} \setinterfaceconstant{stopper}{stopper} \setinterfaceconstant{stretch}{stretch} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{strut} \setinterfaceconstant{style}{style} \setinterfaceconstant{sub}{sub} \setinterfaceconstant{subtitle}{subtitle} \setinterfaceconstant{suffix}{suffix} \setinterfaceconstant{suffixseparator}{suffixseparator} \setinterfaceconstant{suffixstopper}{suffixstopper} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{symalign} \setinterfaceconstant{symbol}{symbol} \setinterfaceconstant{symbolset}{symbolset} \setinterfaceconstant{symcolor}{symcolor} \setinterfaceconstant{symstyle}{symstyle} \setinterfaceconstant{synonym}{synonym} \setinterfaceconstant{synonymcolor}{synonymcolor} \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{synonymstyle} \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{text} \setinterfaceconstant{textcolor}{textcolor} \setinterfaceconstant{textcommand}{textcommand} \setinterfaceconstant{textdistance}{textdistance} \setinterfaceconstant{textheight}{textheight} \setinterfaceconstant{textlayer}{textlayer} \setinterfaceconstant{textmargin}{textmargin} \setinterfaceconstant{textmethod}{textmethod} \setinterfaceconstant{textseparator}{textseparator} \setinterfaceconstant{textsize}{textsize} \setinterfaceconstant{textstate}{textstate} \setinterfaceconstant{textstyle}{textstyle} \setinterfaceconstant{textwidth}{textwidth} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{title} \setinterfaceconstant{titlecolor}{titlecolor} \setinterfaceconstant{titlecommand}{titlecommand} \setinterfaceconstant{titledistance}{titledistance} \setinterfaceconstant{titleleft}{titleleft} \setinterfaceconstant{titleright}{titleright} \setinterfaceconstant{titlestyle}{titlestyle} \setinterfaceconstant{to}{to} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolerance} \setinterfaceconstant{top}{top} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{topdistance} \setinterfaceconstant{topframe}{topframe} \setinterfaceconstant{topoffset}{topoffset} \setinterfaceconstant{topspace}{topspace} \setinterfaceconstant{topstate}{topstate} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{type} \setinterfaceconstant{unit}{unit} \setinterfaceconstant{unknownreference}{unknownreference} \setinterfaceconstant{urlalternative}{urlalternative} \setinterfaceconstant{urlspace}{urlspace} \setinterfaceconstant{validate}{validate} \setinterfaceconstant{values}{values} \setinterfaceconstant{vcommand}{vcommand} \setinterfaceconstant{vcompact}{vcompact} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{veroffset} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{voffset} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{way} \setinterfaceconstant{wfactor}{wfactor} \setinterfaceconstant{white}{white} \setinterfaceconstant{width}{width} \setinterfaceconstant{xfactor}{xfactor} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{xoffset} \setinterfaceconstant{xscale}{xscale} \setinterfaceconstant{xstep}{xstep} \setinterfaceconstant{yfactor}{yfactor} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{yoffset} \setinterfaceconstant{yscale}{yscale} \setinterfaceconstant{ystep}{ystep} % definitions for interface elements for language en % \setinterfaceelement{answerlines}{answerlines} \setinterfaceelement{answerspace}{answerspace} \setinterfaceelement{begin}{begin} \setinterfaceelement{complete}{complete} \setinterfaceelement{coupled}{coupled} \setinterfaceelement{currentlocal}{currentlocal} \setinterfaceelement{end}{end} \setinterfaceelement{endsetup}{} \setinterfaceelement{get}{get} \setinterfaceelement{increment}{increment} \setinterfaceelement{list}{list} \setinterfaceelement{listof}{listof} \setinterfaceelement{load}{load} \setinterfaceelement{local}{local} \setinterfaceelement{makeup}{makeup} \setinterfaceelement{next}{next} \setinterfaceelement{place}{place} \setinterfaceelement{previous}{previous} \setinterfaceelement{previouslocal}{previouslocal} \setinterfaceelement{reserve}{reserve} \setinterfaceelement{see}{see} \setinterfaceelement{setup}{setup} \setinterfaceelement{start}{start} \setinterfaceelement{stop}{stop} \setinterfaceelement{text}{text} \setinterfaceelement{type}{type} % definitions for interface commands for language en % \setinterfacecommand{CAPPED}{CAP} \setinterfacecommand{Character}{Character} \setinterfacecommand{Characters}{Characters} \setinterfacecommand{MONTH}{MONTH} \setinterfacecommand{Numbers}{Numbers} \setinterfacecommand{Romannumerals}{Romannumerals} \setinterfacecommand{SmallCapped}{Cap} \setinterfacecommand{SmallCaps}{Caps} \setinterfacecommand{WEEKDAY}{WEEKDAY} \setinterfacecommand{WORD}{WORD} \setinterfacecommand{WORDS}{WORDS} \setinterfacecommand{Word}{Word} \setinterfacecommand{Words}{Words} \setinterfacecommand{about}{about} \setinterfacecommand{adaptlayout}{adaptlayout} \setinterfacecommand{arg}{arg} \setinterfacecommand{at}{at} \setinterfacecommand{atleftmargin}{atleftmargin} \setinterfacecommand{atpage}{atpage} \setinterfacecommand{atrightmargin}{atrightmargin} \setinterfacecommand{background}{background} \setinterfacecommand{backspace}{backspace} \setinterfacecommand{blackrule}{blackrule} \setinterfacecommand{blackrules}{blackrules} \setinterfacecommand{blank}{blank} \setinterfacecommand{bookmark}{bookmark} \setinterfacecommand{bottomdistance}{bottomdistance} \setinterfacecommand{bottomheight}{bottomheight} \setinterfacecommand{bottomspace}{bottomspace} \setinterfacecommand{but}{but} \setinterfacecommand{button}{button} \setinterfacecommand{bypassblocks}{bypassblocks} \setinterfacecommand{character}{character} \setinterfacecommand{characters}{characters} \setinterfacecommand{chem}{chem} \setinterfacecommand{clip}{clip} \setinterfacecommand{clonefield}{clonefield} \setinterfacecommand{color}{color} \setinterfacecommand{colorbar}{colorbar} \setinterfacecommand{colorvalue}{colorvalue} \setinterfacecommand{column}{column} \setinterfacecommand{comparecolorgroup}{comparecolorgroup} \setinterfacecommand{comparepalet}{comparepalet} \setinterfacecommand{completepagenumber}{completepagenumber} \setinterfacecommand{completeregister}{completeregister} \setinterfacecommand{component}{component} \setinterfacecommand{convertnumber}{convertnumber} \setinterfacecommand{copyfield}{copyfield} \setinterfacecommand{correctwhitespace}{correctwhitespace} \setinterfacecommand{coupledocument}{coupledocument} \setinterfacecommand{couplemarking}{couplemarking} \setinterfacecommand{couplepage}{couplepage} \setinterfacecommand{couplepaper}{couplepaper} \setinterfacecommand{coupleregister}{coupleregister} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{currentdate} \setinterfacecommand{currentheadnumber}{currentheadnumber} \setinterfacecommand{cutspace}{cutspace} \setinterfacecommand{date}{date} \setinterfacecommand{decouplemarking}{decouplemarking} \setinterfacecommand{decrementnumber}{decrementnumber} \setinterfacecommand{define}{define} \setinterfacecommand{defineaccent}{defineaccent} \setinterfacecommand{defineblank}{defineblank} \setinterfacecommand{defineblock}{defineblock} \setinterfacecommand{definebodyfont}{definebodyfont} \setinterfacecommand{definebodyfontenvironment}{definebodyfontenvironment} \setinterfacecommand{definebuffer}{definebuffer} \setinterfacecommand{definecharacter}{definecharacter} \setinterfacecommand{definecolor}{definecolor} \setinterfacecommand{definecolorgroup}{definecolorgroup} \setinterfacecommand{definecolumnbreak}{definecolumnbreak} \setinterfacecommand{definecolumnset}{definecolumnset} \setinterfacecommand{definecombination}{definecombination} \setinterfacecommand{definecombinedlist}{definecombinedlist} \setinterfacecommand{definecommand}{definecommand} \setinterfacecommand{defineconversion}{defineconversion} \setinterfacecommand{definedescription}{definedescription} \setinterfacecommand{defineenumeration}{defineenumeration} \setinterfacecommand{definefield}{definefield} \setinterfacecommand{definefieldstack}{definefieldstack} \setinterfacecommand{definefiguresymbol}{definefiguresymbol} \setinterfacecommand{definefloat}{definefloat} \setinterfacecommand{definefont}{definefont} \setinterfacecommand{definefontstyle}{definefontstyle} \setinterfacecommand{definefontsynonym}{definefontsynonym} \setinterfacecommand{defineframed}{defineframed} \setinterfacecommand{defineframedtext}{defineframedtext} \setinterfacecommand{definehbox}{definehbox} \setinterfacecommand{definehead}{definehead} \setinterfacecommand{defineindentedtext}{defineindentedtext} \setinterfacecommand{defineinmargin}{defineinmargin} \setinterfacecommand{defineinteractionmenu}{defineinteractionmenu} \setinterfacecommand{defineitemgroup}{defineitemgroup} \setinterfacecommand{definelabel}{definelabel} \setinterfacecommand{definelayer}{definelayer} \setinterfacecommand{definelayout}{definelayout} \setinterfacecommand{definelist}{definelist} \setinterfacecommand{definelogo}{definelogo} \setinterfacecommand{definemainfield}{definemainfield} \setinterfacecommand{definemakeup}{definemakeup} \setinterfacecommand{definemarking}{definemarking} \setinterfacecommand{definemathalignment}{definemathalignment} \setinterfacecommand{defineoutput}{defineoutput} \setinterfacecommand{defineoverlay}{defineoverlay} \setinterfacecommand{definepagebreak}{definepagebreak} \setinterfacecommand{definepalet}{definepalet} \setinterfacecommand{definepapersize}{definepapersize} \setinterfacecommand{defineparagraphs}{defineparagraphs} \setinterfacecommand{defineplacement}{defineplacement} \setinterfacecommand{defineprofile}{defineprofile} \setinterfacecommand{defineprogram}{defineprogram} \setinterfacecommand{definerawfont}{definerawfont} \setinterfacecommand{definereference}{definereference} \setinterfacecommand{definereferenceformat}{definereferenceformat} \setinterfacecommand{definereferencelist}{definereferencelist} \setinterfacecommand{defineregister}{defineregister} \setinterfacecommand{definerule}{definerule} \setinterfacecommand{definesection}{definesection} \setinterfacecommand{definesectionblock}{definesectionblock} \setinterfacecommand{definesorting}{definesorting} \setinterfacecommand{definestartstop}{definestartstop} \setinterfacecommand{definestyle}{definestyle} \setinterfacecommand{definesubfield}{definesubfield} \setinterfacecommand{definesymbol}{definesymbol} \setinterfacecommand{definesynonyms}{definesynonyms} \setinterfacecommand{definetabletemplate}{definetabletemplate} \setinterfacecommand{definetabulate}{definetabulate} \setinterfacecommand{definetext}{definetext} \setinterfacecommand{definetextposition}{definetextposition} \setinterfacecommand{definetextvariable}{definetextvariable} \setinterfacecommand{definetype}{definetype} \setinterfacecommand{definetyping}{definetyping} \setinterfacecommand{defineversion}{defineversion} \setinterfacecommand{determineheadnumber}{determineheadnumber} \setinterfacecommand{determinelistcharacteristics}{determinelistcharacteristics} \setinterfacecommand{determineregistercharacteristics}{determineregistercharacteristics} \setinterfacecommand{dimension}{dimension} \setinterfacecommand{disableinteractionmenu}{disableinteractionmenu} \setinterfacecommand{domicile}{domicile} \setinterfacecommand{donttest}{donttest} \setinterfacecommand{edgedistance}{edgedistance} \setinterfacecommand{edgewidth}{edgewidth} \setinterfacecommand{emptylines}{emptylines} \setinterfacecommand{environment}{environment} \setinterfacecommand{externalfigure}{externalfigure} \setinterfacecommand{fact}{fact} \setinterfacecommand{field}{field} \setinterfacecommand{fieldstack}{fieldstack} \setinterfacecommand{fillinfield}{fillinfield} \setinterfacecommand{fillinline}{fillinline} \setinterfacecommand{fillinrules}{fillinrules} \setinterfacecommand{fillintext}{fillintext} \setinterfacecommand{fitfield}{fitfield} \setinterfacecommand{fixedspace}{fixedspace} \setinterfacecommand{fixedspaces}{fixedspaces} \setinterfacecommand{followprofile}{followprofile} \setinterfacecommand{followprofileversion}{followprofileversion} \setinterfacecommand{followversion}{followversion} \setinterfacecommand{footerdistance}{footerdistance} \setinterfacecommand{footerheight}{footerheight} \setinterfacecommand{footnote}{footnote} \setinterfacecommand{footnotetext}{footnotetext} \setinterfacecommand{forceblocks}{forceblocks} \setinterfacecommand{formulanumber}{formulanumber} \setinterfacecommand{fraction}{fraction} \setinterfacecommand{framed}{framed} \setinterfacecommand{from}{from} \setinterfacecommand{getbuffer}{getbuffer} \setinterfacecommand{getmarking}{getmarking} \setinterfacecommand{getnumber}{getnumber} \setinterfacecommand{godown}{godown} \setinterfacecommand{goto}{goto} \setinterfacecommand{gotobox}{gotobox} \setinterfacecommand{gotopage}{gotopage} \setinterfacecommand{graycolor}{graycolor} \setinterfacecommand{greyvalue}{greyvalue} \setinterfacecommand{grid}{grid} \setinterfacecommand{hairline}{hairline} \setinterfacecommand{head}{head} \setinterfacecommand{headerdistance}{headerdistance} \setinterfacecommand{headerheight}{headerheight} \setinterfacecommand{headlevel}{headlevel} \setinterfacecommand{headnumber}{headnumber} \setinterfacecommand{headsym}{headsym} \setinterfacecommand{headtext}{headtext} \setinterfacecommand{hideblocks}{hideblocks} \setinterfacecommand{high}{high} \setinterfacecommand{hl}{hl} \setinterfacecommand{immediatebetweenlist}{immediatebetweenlist} \setinterfacecommand{immediatetolist}{immediatetolist} \setinterfacecommand{in}{in} \setinterfacecommand{incrementnumber}{incrementnumber} \setinterfacecommand{indenting}{indenting} \setinterfacecommand{inframed}{inframed} \setinterfacecommand{infull}{infull} \setinterfacecommand{ininner}{ininner} \setinterfacecommand{inleft}{inleft} \setinterfacecommand{inleftedge}{inleftedge} \setinterfacecommand{inleftmargin}{inleftmargin} \setinterfacecommand{inline}{inline} \setinterfacecommand{inmargin}{inmargin} \setinterfacecommand{inmframed}{inmaframed} \setinterfacecommand{inneredgedistance}{inneredgedistance} \setinterfacecommand{inneredgewidth}{inneredgewidth} \setinterfacecommand{innermargindistance}{innermargindistance} \setinterfacecommand{innermarginwidth}{innermarginwidth} \setinterfacecommand{inothermargin}{inothermargin} \setinterfacecommand{inouter}{inouter} \setinterfacecommand{inright}{inright} \setinterfacecommand{inrightedge}{inrightedge} \setinterfacecommand{inrightmargin}{inrightmargin} \setinterfacecommand{installlanguage}{installlanguage} \setinterfacecommand{interactionbar}{interactionbar} \setinterfacecommand{interactionbuttons}{interactionbuttons} \setinterfacecommand{interactionmenu}{interactionmenu} \setinterfacecommand{item}{item} \setinterfacecommand{items}{items} \setinterfacecommand{its}{its} \setinterfacecommand{keepblocks}{keepblocks} \setinterfacecommand{label}{label} \setinterfacecommand{labels}{labels} \setinterfacecommand{labeltext}{labeltext} \setinterfacecommand{language}{language} \setinterfacecommand{leftaligned}{leftaligned} \setinterfacecommand{leftedgedistance}{leftedgedistance} \setinterfacecommand{leftedgewidth}{leftedgewidth} \setinterfacecommand{leftmargindistance}{leftmargindistance} \setinterfacecommand{leftmarginwidth}{leftmarginwidth} \setinterfacecommand{leg}{leg} \setinterfacecommand{linewidth}{linethickness} \setinterfacecommand{listheight}{listheight} \setinterfacecommand{listlength}{listlength} \setinterfacecommand{listsymbol}{listsymbol} \setinterfacecommand{listwidth}{listwidth} \setinterfacecommand{logfields}{logfields} \setinterfacecommand{lohi}{lohi} \setinterfacecommand{low}{low} \setinterfacecommand{macroname}{name} \setinterfacecommand{mainlanguage}{mainlanguage} \setinterfacecommand{makeupheight}{makeupheight} \setinterfacecommand{makeupwidth}{makeupwidth} \setinterfacecommand{mar}{mar} \setinterfacecommand{margindistance}{margindistance} \setinterfacecommand{marginrule}{marginrule} \setinterfacecommand{margintext}{margintext} \setinterfacecommand{margintitle}{margintitle} \setinterfacecommand{marginwidth}{marginwidth} \setinterfacecommand{marginword}{marginword} \setinterfacecommand{marking}{marking} \setinterfacecommand{markversion}{markversion} \setinterfacecommand{mathematics}{mathematics} \setinterfacecommand{menubutton}{menubutton} \setinterfacecommand{mframed}{maframed} \setinterfacecommand{midaligned}{midaligned} \setinterfacecommand{mirror}{mirror} \setinterfacecommand{month}{month} \setinterfacecommand{moveformula}{moveformula} \setinterfacecommand{moveongrid}{moveongrid} \setinterfacecommand{movesidefloat}{movesidefloat} \setinterfacecommand{navigating}{navigating} \setinterfacecommand{nodimension}{nodimension} \setinterfacecommand{noheaderandfooterlines}{noheaderandfooterlines} \setinterfacecommand{noindenting}{noindenting} \setinterfacecommand{nolist}{nolist} \setinterfacecommand{nomarking}{nomarking} \setinterfacecommand{nomoreblocks}{nomoreblocks} \setinterfacecommand{nomorefiles}{nomorefiles} \setinterfacecommand{nop}{nop} \setinterfacecommand{nospace}{nospace} \setinterfacecommand{note}{note} \setinterfacecommand{notopandbottomlines}{notopandbottomlines} \setinterfacecommand{notsmallcapped}{nocap} \setinterfacecommand{nowhitespace}{nowhitespace} \setinterfacecommand{numberofsubpages}{numberofsubpages} \setinterfacecommand{numbers}{numbers} \setinterfacecommand{outeredgedistance}{outeredgedistance} \setinterfacecommand{outeredgewidth}{outeredgewidth} \setinterfacecommand{outermargindistance}{outermargindistance} \setinterfacecommand{outermarginwidth}{outermarginwidth} \setinterfacecommand{packed}{packed} \setinterfacecommand{page}{page} \setinterfacecommand{pagedepth}{pagedepth} \setinterfacecommand{pagenumber}{pagenumber} \setinterfacecommand{pageoffset}{pageoffset} \setinterfacecommand{pagereference}{pagereference} \setinterfacecommand{paperheight}{paperheight} \setinterfacecommand{paperwidth}{paperwidth} \setinterfacecommand{periods}{periods} \setinterfacecommand{plaatsruwelijst}{placerawlist} \setinterfacecommand{placebookmarks}{placebookmarks} \setinterfacecommand{placecombinedlist}{placecombinedlist} \setinterfacecommand{placefloat}{placefloat} \setinterfacecommand{placefootnotes}{placefootnotes} \setinterfacecommand{placeformula}{placeformula} \setinterfacecommand{placeheadnumber}{placeheadnumber} \setinterfacecommand{placeheadtext}{placeheadtext} \setinterfacecommand{placelegend}{placelegend} \setinterfacecommand{placelist}{placelist} \setinterfacecommand{placelocalfootnotes}{placelocalfootnotes} \setinterfacecommand{placelogos}{placelogos} \setinterfacecommand{placeongrid}{placeongrid} \setinterfacecommand{placeontopofeachother}{placeontopofeachother} \setinterfacecommand{placepagenumber}{placepagenumber} \setinterfacecommand{placereferencelist}{placereferencelist} \setinterfacecommand{placeregister}{placeregister} \setinterfacecommand{placerule}{placerule} \setinterfacecommand{placesidebyside}{placesidebyside} \setinterfacecommand{placesubformula}{placesubformula} \setinterfacecommand{placetextvariable}{placetextvariable} \setinterfacecommand{position}{position} \setinterfacecommand{positiontext}{positiontext} \setinterfacecommand{printpaperheight}{printpaperheight} \setinterfacecommand{printpaperwidth}{printpaperwidth} \setinterfacecommand{processblocks}{processblocks} \setinterfacecommand{processpage}{processpage} \setinterfacecommand{product}{product} \setinterfacecommand{program}{program} \setinterfacecommand{project}{project} \setinterfacecommand{publication}{publication} \setinterfacecommand{quotation}{quotation} \setinterfacecommand{quote}{quote} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{redo} \setinterfacecommand{ref}{ref} \setinterfacecommand{reference}{reference} \setinterfacecommand{referral}{referral} \setinterfacecommand{referraldate}{referraldate} \setinterfacecommand{referring}{referring} \setinterfacecommand{remark}{remark} \setinterfacecommand{reset}{reset} \setinterfacecommand{resetmarking}{resetmarking} \setinterfacecommand{resetnumber}{resetnumber} \setinterfacecommand{resettext}{resettextcontent} \setinterfacecommand{rightaligned}{rightaligned} \setinterfacecommand{rightedgedistance}{rightedgedistance} \setinterfacecommand{rightedgewidth}{rightedgewidth} \setinterfacecommand{rightmargindistance}{rightmargindistance} \setinterfacecommand{rightmarginwidth}{rightmarginwidth} \setinterfacecommand{romannumerals}{romannumerals} \setinterfacecommand{rotate}{rotate} \setinterfacecommand{scale}{scale} \setinterfacecommand{screen}{screen} \setinterfacecommand{selectblocks}{selectblocks} \setinterfacecommand{selectpaper}{selectpaper} \setinterfacecommand{selectversion}{selectversion} \setinterfacecommand{setnumber}{setnumber} \setinterfacecommand{settextcontent}{settextcontent} \setinterfacecommand{settextvariable}{settextvariable} \setinterfacecommand{setupalign}{setupalign} \setinterfacecommand{setupanswerarea}{setupanswerarea} \setinterfacecommand{setuparranging}{setuparranging} \setinterfacecommand{setupbackground}{setupbackground} \setinterfacecommand{setupbackgrounds}{setupbackgrounds} \setinterfacecommand{setupblackrules}{setupblackrules} \setinterfacecommand{setupblank}{setupblank} \setinterfacecommand{setupblock}{setupblock} \setinterfacecommand{setupbodyfont}{setupbodyfont} \setinterfacecommand{setupbodyfontenvironment}{setupbodyfontenvironment} \setinterfacecommand{setupbottom}{setupbottom} \setinterfacecommand{setupbottomtexts}{setupbottomtexts} \setinterfacecommand{setupbuffer}{setupbuffer} \setinterfacecommand{setupbuttons}{setupbuttons} \setinterfacecommand{setupcapitals}{setupcapitals} \setinterfacecommand{setupcaption}{setupcaption} \setinterfacecommand{setupcaptions}{setupcaptions} \setinterfacecommand{setupclipping}{setupclipping} \setinterfacecommand{setupcolor}{setupcolor} \setinterfacecommand{setupcolors}{setupcolors} \setinterfacecommand{setupcolumns}{setupcolumns} \setinterfacecommand{setupcolumnset}{setupcolumnset} \setinterfacecommand{setupcolumnsetlines}{setupcolumnsetlines} \setinterfacecommand{setupcolumnsetstart}{setupcolumnsetstart} \setinterfacecommand{setupcombinations}{setupcombinations} \setinterfacecommand{setupcombinedlist}{setupcombinedlist} \setinterfacecommand{setupcomment}{setupcomment} \setinterfacecommand{setupdescriptions}{setupdescriptions} \setinterfacecommand{setupenumerations}{setupenumerations} \setinterfacecommand{setupexternalfigures}{setupexternalfigures} \setinterfacecommand{setupfield}{setupfield} \setinterfacecommand{setupfields}{setupfields} \setinterfacecommand{setupfillinlines}{setupfillinlines} \setinterfacecommand{setupfillinrules}{setupfillinrules} \setinterfacecommand{setupfloat}{setupfloat} \setinterfacecommand{setupfloats}{setupfloats} \setinterfacecommand{setupfloatsplitting}{setupfloatsplitting} \setinterfacecommand{setupfooter}{setupfooter} \setinterfacecommand{setupfootertexts}{setupfootertexts} \setinterfacecommand{setupfootnotedefinition}{setupfootnotedefinition} \setinterfacecommand{setupfootnotes}{setupfootnotes} \setinterfacecommand{setupforms}{setupforms} \setinterfacecommand{setupformulas}{setupformulae} \setinterfacecommand{setupframed}{setupframed} \setinterfacecommand{setupframedtexts}{setupframedtexts} \setinterfacecommand{setuphead}{setuphead} \setinterfacecommand{setupheader}{setupheader} \setinterfacecommand{setupheadertexts}{setupheadertexts} \setinterfacecommand{setupheadnumber}{setupheadnumber} \setinterfacecommand{setupheads}{setupheads} \setinterfacecommand{setupheadtext}{setupheadtext} \setinterfacecommand{setuphyphenmark}{setuphyphenmark} \setinterfacecommand{setupindentedtext}{setupindentedtext} \setinterfacecommand{setupindenting}{setupindenting} \setinterfacecommand{setupinmargin}{setupinmargin} \setinterfacecommand{setupinteraction}{setupinteraction} \setinterfacecommand{setupinteractionbar}{setupinteractionbar} \setinterfacecommand{setupinteractionmenu}{setupinteractionmenu} \setinterfacecommand{setupinteractionscreen}{setupinteractionscreen} \setinterfacecommand{setupinterlinespace}{setupinterlinespace} \setinterfacecommand{setupitemgroup}{setupitemgroup} \setinterfacecommand{setupitemgroups}{setupitemizations} \setinterfacecommand{setupitems}{setupitems} \setinterfacecommand{setuplabeltext}{setuplabeltext} \setinterfacecommand{setuplanguage}{setuplanguage} \setinterfacecommand{setuplayout}{setuplayout} \setinterfacecommand{setuplegend}{setuplegend} \setinterfacecommand{setuplinenumbering}{setuplinenumbering} \setinterfacecommand{setuplines}{setuplines} \setinterfacecommand{setuplinewidth}{setuplinewidth} \setinterfacecommand{setuplist}{setuplist} \setinterfacecommand{setupmakeup}{setupmakeup} \setinterfacecommand{setupmarginblocks}{setupmarginblocks} \setinterfacecommand{setupmarginrules}{setupmarginrules} \setinterfacecommand{setupmarking}{setupmarking} \setinterfacecommand{setupmathalignment}{setupmathalignment} \setinterfacecommand{setupnarrower}{setupnarrower} \setinterfacecommand{setupnumber}{setupnumber} \setinterfacecommand{setupnumbering}{setupnumbering} \setinterfacecommand{setupoppositeplacing}{setupoppositeplacing} \setinterfacecommand{setupoutput}{setupoutput} \setinterfacecommand{setuppagecomment}{setuppagecomment} \setinterfacecommand{setuppagenumber}{setuppagenumber} \setinterfacecommand{setuppagenumbering}{setuppagenumbering} \setinterfacecommand{setuppagetransitions}{setuppagetransitions} \setinterfacecommand{setuppalet}{setuppalet} \setinterfacecommand{setuppaper}{setuppaper} \setinterfacecommand{setuppapersize}{setuppapersize} \setinterfacecommand{setupparagraphnumbering}{setupparagraphnumbering} \setinterfacecommand{setupparagraphs}{setupparagraphs} \setinterfacecommand{setupplacement}{setupplacement} \setinterfacecommand{setuppositioning}{setuppositioning} \setinterfacecommand{setupprofiles}{setupprofiles} \setinterfacecommand{setupprograms}{setupprograms} \setinterfacecommand{setuppublications}{setuppublications} \setinterfacecommand{setupquote}{setupquote} \setinterfacecommand{setupreferencelist}{setupreferencelist} \setinterfacecommand{setupreferencing}{setupreferencing} \setinterfacecommand{setupregister}{setupregister} \setinterfacecommand{setuprotate}{setuprotate} \setinterfacecommand{setuprule}{setuprule} \setinterfacecommand{setups}{setups} \setinterfacecommand{setupscreens}{setupscreens} \setinterfacecommand{setupsection}{setupsection} \setinterfacecommand{setupsectionblock}{setupsectionblock} \setinterfacecommand{setupsorting}{setupsorting} \setinterfacecommand{setupspacing}{setupspacing} \setinterfacecommand{setupstartstop}{setupstartstop} \setinterfacecommand{setupstrut}{setupstrut} \setinterfacecommand{setupsubpagenumber}{setupsubpagenumber} \setinterfacecommand{setupsymbolset}{setupsymbolset} \setinterfacecommand{setupsynchronization}{setupsynchronization} \setinterfacecommand{setupsynchronizationbar}{setupsynchronizationbar} \setinterfacecommand{setupsynonyms}{setupsynonyms} \setinterfacecommand{setupsystem}{setupsystem} \setinterfacecommand{setuptab}{setuptab} \setinterfacecommand{setuptables}{setuptables} \setinterfacecommand{setuptabulate}{setuptabulate} \setinterfacecommand{setuptext}{setuptext} \setinterfacecommand{setuptextposition}{setuptextposition} \setinterfacecommand{setuptextrules}{setuptextrules} \setinterfacecommand{setuptexttexts}{setuptexttexts} \setinterfacecommand{setuptextvariable}{setuptextvariable} \setinterfacecommand{setupthinrules}{setupthinrules} \setinterfacecommand{setuptolerance}{setuptolerance} \setinterfacecommand{setuptop}{setuptop} \setinterfacecommand{setuptoptexts}{setuptoptexts} \setinterfacecommand{setuptype}{setuptype} \setinterfacecommand{setuptyping}{setuptyping} \setinterfacecommand{setupunderbar}{setupunderbar} \setinterfacecommand{setupurl}{setupurl} \setinterfacecommand{setupversions}{setupversions} \setinterfacecommand{setupwhitespace}{setupwhitespace} \setinterfacecommand{showbodyfont}{showbodyfont} \setinterfacecommand{showbodyfontenvironment}{showbodyfontenvironment} \setinterfacecommand{showcolor}{showcolor} \setinterfacecommand{showcolorgroup}{showcolorgroup} \setinterfacecommand{showexternalfigures}{showexternalfigures} \setinterfacecommand{showfields}{showfields} \setinterfacecommand{showframe}{showframe} \setinterfacecommand{showgrid}{showgrid} \setinterfacecommand{showlayout}{showlayout} \setinterfacecommand{showmakeup}{showmakeup} \setinterfacecommand{showpalet}{showpalet} \setinterfacecommand{showprint}{showprint} \setinterfacecommand{showsetups}{showsetups} \setinterfacecommand{showstruts}{showstruts} \setinterfacecommand{showsymbolset}{showsymbolset} \setinterfacecommand{smallcapped}{cap} \setinterfacecommand{someline}{someline} \setinterfacecommand{somewhere}{somewhere} \setinterfacecommand{space}{space} \setinterfacecommand{splitfloat}{splitfloat} \setinterfacecommand{startalignment}{startalignment} \setinterfacecommand{startbackground}{startbackground} \setinterfacecommand{startcoding}{startcoding} \setinterfacecommand{startcolor}{startcolor} \setinterfacecommand{startcolumnmakeup}{startcolumnmakeup} \setinterfacecommand{startcolumns}{startcolumns} \setinterfacecommand{startcolumnset}{startcolumnset} \setinterfacecommand{startcombination}{startcombination} \setinterfacecommand{startcomponent}{startcomponent} \setinterfacecommand{startdocument}{startdocument} \setinterfacecommand{startenvironment}{startenvironment} \setinterfacecommand{startfigure}{startfigure} \setinterfacecommand{startglobal}{startglobal} \setinterfacecommand{startline}{startline} \setinterfacecommand{startlinecorrection}{startlinecorrection} \setinterfacecommand{startlinenumbering}{startlinenumbering} \setinterfacecommand{startlines}{startlines} \setinterfacecommand{startlocal}{startlocal} \setinterfacecommand{startlocalfootnotes}{startlocalfootnotes} \setinterfacecommand{startmakeup}{startmakeup} \setinterfacecommand{startmarginblock}{startmarginblock} \setinterfacecommand{startmarginrule}{startmarginrule} \setinterfacecommand{startnarrower}{startnarrower} \setinterfacecommand{startopposite}{startopposite} \setinterfacecommand{startoverlay}{startoverlay} \setinterfacecommand{startoverzicht}{startoverview} \setinterfacecommand{startpacked}{startpacked} \setinterfacecommand{startpositioning}{startpositioning} \setinterfacecommand{startproduct}{startproduct} \setinterfacecommand{startprofile}{startprofile} \setinterfacecommand{startproject}{startproject} \setinterfacecommand{startquotation}{startquotation} \setinterfacecommand{startraster}{startraster} \setinterfacecommand{startsymbolset}{startsymbolset} \setinterfacecommand{startsynchronization}{startsynchronization} \setinterfacecommand{starttable}{starttable} \setinterfacecommand{starttables}{starttables} \setinterfacecommand{starttext}{starttext} \setinterfacecommand{starttextrule}{starttextrule} \setinterfacecommand{startunpacked}{startunpacked} \setinterfacecommand{startversion}{startversion} \setinterfacecommand{stopalignment}{stopalignment} \setinterfacecommand{stopbackground}{stopbackground} \setinterfacecommand{stopcoding}{stopcoding} \setinterfacecommand{stopcolor}{stopcolor} \setinterfacecommand{stopcolumnmakeup}{stopcolumnmakeup} \setinterfacecommand{stopcolumns}{stopcolumns} \setinterfacecommand{stopcolumnset}{stopcolumnset} \setinterfacecommand{stopcombination}{stopcombination} \setinterfacecommand{stopcomponent}{stopcomponent} \setinterfacecommand{stopdocument}{stopdocument} \setinterfacecommand{stopenvironment}{stopenvironment} \setinterfacecommand{stopglobal}{stopglobal} \setinterfacecommand{stopline}{stopline} \setinterfacecommand{stoplinecorrection}{stoplinecorrection} \setinterfacecommand{stoplinenumbering}{stoplinenumbering} \setinterfacecommand{stoplines}{stoplines} \setinterfacecommand{stoplocal}{stoplocal} \setinterfacecommand{stoplocalfootnotes}{stoplocalfootnotes} \setinterfacecommand{stopmakeup}{stopmakeup} \setinterfacecommand{stopmarginblock}{stopmarginblock} \setinterfacecommand{stopmarginrule}{stopmarginrule} \setinterfacecommand{stopnarrower}{stopnarrower} \setinterfacecommand{stopopposite}{stopopposite} \setinterfacecommand{stopoverlay}{stopoverlay} \setinterfacecommand{stopoverzicht}{stopoverview} \setinterfacecommand{stoppacked}{stoppacked} \setinterfacecommand{stoppositioning}{stoppositioning} \setinterfacecommand{stopproduct}{stopproduct} \setinterfacecommand{stopprofile}{stopprofile} \setinterfacecommand{stopproject}{stopproject} \setinterfacecommand{stopquotation}{stopquotation} \setinterfacecommand{stopraster}{stopraster} \setinterfacecommand{stopsynchronization}{stopsynchronization} \setinterfacecommand{stoptable}{stoptable} \setinterfacecommand{stoptables}{stoptables} \setinterfacecommand{stoptext}{stoptext} \setinterfacecommand{stoptextrule}{stoptextrule} \setinterfacecommand{stopunpacked}{stopunpacked} \setinterfacecommand{stopversion}{stopversion} \setinterfacecommand{stretched}{stretched} \setinterfacecommand{subformulanumber}{subformulanumber} \setinterfacecommand{subpagenumber}{subpagenumber} \setinterfacecommand{switchtobodyfont}{switchtobodyfont} \setinterfacecommand{switchtorawfont}{switchtorawfont} \setinterfacecommand{sym}{sym} \setinterfacecommand{symbol}{symbol} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{synchronizationbar} \setinterfacecommand{synchronize}{synchronize} \setinterfacecommand{tab}{tab} \setinterfacecommand{testcolumn}{testcolumn} \setinterfacecommand{testpage}{testpage} \setinterfacecommand{tex}{tex} \setinterfacecommand{textheight}{textheight} \setinterfacecommand{textreference}{textreference} \setinterfacecommand{textrule}{textrule} \setinterfacecommand{textvariable}{textvariable} \setinterfacecommand{textwidth}{textwidth} \setinterfacecommand{thinrule}{thinrule} \setinterfacecommand{thinrules}{thinrules} \setinterfacecommand{tooltip}{tooltip} \setinterfacecommand{topdistance}{topdistance} \setinterfacecommand{topheight}{topheight} \setinterfacecommand{topspace}{topspace} \setinterfacecommand{totalnumberofpages}{totalnumberofpages} \setinterfacecommand{translate}{translate} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{typ} \setinterfacecommand{type}{type} \setinterfacecommand{typebuffer}{typebuffer} \setinterfacecommand{typefile}{typefile} \setinterfacecommand{unitmeaning}{unitmeaning} \setinterfacecommand{unknown}{unknown} \setinterfacecommand{useJSscripts}{useJSscripts} \setinterfacecommand{useURL}{useURL} \setinterfacecommand{useXMLfilter}{useXMLfilter} \setinterfacecommand{useblocks}{useblocks} \setinterfacecommand{usecommands}{usecommands} \setinterfacecommand{useencoding}{useencoding} \setinterfacecommand{useexternaldocument}{useexternaldocument} \setinterfacecommand{useexternalfigure}{useexternalfigure} \setinterfacecommand{useexternalfile}{useexternalfile} \setinterfacecommand{useexternalfiles}{useexternalfiles} \setinterfacecommand{useexternalsoundtrack}{useexternalsoundtrack} \setinterfacecommand{usemodule}{usemodule} \setinterfacecommand{usemodules}{usemodules} \setinterfacecommand{usepath}{usedirectory} \setinterfacecommand{usereferences}{usereferences} \setinterfacecommand{usespecials}{usespecials} \setinterfacecommand{usesymbols}{usesymbols} \setinterfacecommand{usetypescript}{usetypescript} \setinterfacecommand{usetypescriptfile}{usetypescriptfile} \setinterfacecommand{useurl}{useurl} \setinterfacecommand{version}{version} \setinterfacecommand{vl}{vl} \setinterfacecommand{weekday}{weekday} \setinterfacecommand{whitespace}{whitespace} \setinterfacecommand{wordright}{wordright} \setinterfacecommand{writebetweenlist}{writebetweenlist} \setinterfacecommand{writetolist}{writetolist} \setinterfacecommand{writetoreferencelist}{writetoreferencelist} \setinterfacecommand{writetoregister}{writetoregister} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/typo-lan.lua0000644000175000017500000000426212130411274024136 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-lan'] = { version = 1.001, comment = "companion to typo-lan.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, next = type, next local currentfont = font.current local setmetatableindex = table.setmetatableindex local utfbyte = utf.byte local hashes = fonts.hashes local fontdata = hashes.characters local emwidths = hashes.emwidths local frequencies = languages.frequencies or { } languages.frequencies = frequencies local frequencydata = { } local frequencyfile = string.formatters["lang-frq-%s.lua"] local frequencycache = { } setmetatableindex(frequencydata, function(t,language) local fullname = resolvers.findfile(frequencyfile(language)) local v = fullname ~= "" and dofile(fullname) if not v or not v.frequencies then v = t.en end t[language] = v return v end) setmetatableindex(frequencycache, function(t,language) local dataset = frequencydata[language] local frequencies = dataset.frequencies if not frequencies then return t.en end local v = { } setmetatableindex(v, function(t,font) local average = emwidths[font] / 2 if frequencies then local characters = fontdata[font] local sum, tot = 0, 0 for k, v in next, frequencies do local character = characters[k] -- characters[type(k) == "number" and k or utfbyte(k)] tot = tot + v sum = sum + v * (character and character.width or average) end average = sum / tot -- widths end t[font] = average return average end) t[language] = v return v end) function frequencies.getdata(language) return frequencydata[language] end function frequencies.averagecharwidth(language,font) return frequencycache[language or "en"][font or currentfont()] end function commands.averagecharwidth(language,font) context(frequencycache[language or "en"][font or currentfont()]) end context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-sessions.lua0000644000175000017500000001624612130411274026016 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-sessions'] = { version = 1.001, comment = "companion to lmx-*", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is experimental code and currently part of the base installation simply -- because it's easier to dirtribute this way. Eventually it will be documented -- and the related scripts will show up as well. -- maybe store threshold in session (in seconds) local tonumber = tonumber local format = string.format local ostime, uuid, osfulltime = os.time, os.uuid, os.fulltime local random = math.random -- In older frameworks we kept a session table in memory. This time we -- follow a route where we store session data in a sql table. Each session -- has a token (similar to what we do on q2p and pod services), a data -- blob which is just a serialized lua table (we could consider a dump instead) -- and two times: the creation and last accessed time. The first one is handy -- for statistics and the second one for cleanup. Both are just numbers so that -- we don't have to waste code on conversions. Anyhow, we provide variants so that -- we can always choose what is best. local sql = utilities.sql local sessions = { } sql.sessions = sessions local trace_sql = false trackers.register("sql.sessions.trace", function(v) trace_sql = v end) local report = logs.reporter("sql","sessions") sessions.newtoken = sql.tokens.new local function checkeddb(presets,datatable) return sql.usedatabase(presets,datatable or presets.datatable or "sessions") end sessions.usedb = checkeddb local template =[[ CREATE TABLE IF NOT EXISTS %basename% ( `token` varchar(50) NOT NULL, `data` longtext NOT NULL, `created` int(11) NOT NULL, `accessed` int(11) NOT NULL, UNIQUE KEY `token_unique_key` (`token`) ) DEFAULT CHARSET = utf8 ; ]] function sessions.createdb(presets,datatable) local db = checkeddb(presets,datatable) db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a created in %a",db.name,db.base) return db end local template =[[ DROP TABLE IF EXISTS %basename% ; ]] function sessions.deletedb(presets,datatable) local db = checkeddb(presets,datatable) db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a removed in %a",db.name,db.base) end local template =[[ INSERT INTO %basename% ( `token`, `created`, `accessed`, `data` ) VALUES ( '%token%', %time%, %time%, '%[data]%' ) ; ]] function sessions.create(db,data) local token = sessions.newtoken() local time = ostime() db.execute { template = template, variables = { basename = db.basename, token = token, time = time, data = db.serialize(data or { },"return") }, } if trace_sql then report("created: %s at %s",token,osfulltime(time)) end return { token = token, created = time, accessed = time, data = data, } end local template =[[ UPDATE %basename% SET `data` = '%[data]%', `accessed` = %time% WHERE `token` = '%token%' ; ]] function sessions.save(db,session) local time = ostime() local data = db.serialize(session.data or { },"return") local token = session.token session.accessed = time db.execute { template = template, variables = { basename = db.basename, token = token, time = ostime(), data = data, }, } if trace_sql then report("saved: %s at %s",token,osfulltime(time)) end return session end local template = [[ UPDATE %basename% SET `accessed` = %time% WHERE `token` = '%token%' ; ]] function sessions.touch(db,token) db.execute { template = template, variables = { basename = db.basename, token = token, time = ostime(), }, } end local template = [[ UPDATE %basename% SET `accessed` = %time% WHERE `token` = '%token%' ; SELECT * FROM %basename% WHERE `token` = '%token%' ; ]] function sessions.restore(db,token) local records, keys = db.execute { template = template, variables = { basename = db.basename, token = token, time = ostime(), }, } local record = records and records[1] if record then if trace_sql then report("restored: %s",token) end record.data = db.deserialize(record.data or "") return record, keys elseif trace_sql then report("unknown: %s",token) end end local template =[[ DELETE FROM %basename% WHERE `token` = '%token%' ; ]] function sessions.remove(db,token) db.execute { template = template, variables = { basename = db.basename, token = token, }, } if trace_sql then report("removed: %s",token) end end local template_collect_yes =[[ SELECT * FROM %basename% ORDER BY `created` ; ]] local template_collect_nop =[[ SELECT `accessed`, `created`, `accessed`, `token` FROM %basename% ORDER BY `created` ; ]] function sessions.collect(db,nodata) local records, keys = db.execute { template = nodata and template_collect_nop or template_collect_yes, variables = { basename = db.basename, }, } if not nodata then db.unpackdata(records) end if trace_sql then report("collected: %s sessions",#records) end return records, keys end local template_cleanup_yes =[[ SELECT * FROM %basename% WHERE `accessed` < %time% ORDER BY `created` ; DELETE FROM %basename% WHERE `accessed` < %time% ; ]] local template_cleanup_nop =[[ SELECT `accessed`, `created`, `accessed`, `token` FROM %basename% WHERE `accessed` < %time% ORDER BY `created` ; DELETE FROM %basename% WHERE `accessed` < %time% ; ]] function sessions.cleanupdb(db,delta,nodata) local time = ostime() local records, keys = db.execute { template = nodata and template_cleanup_nop or template_cleanup_yes, variables = { basename = db.basename, time = time - delta }, } if not nodata then db.unpackdata(records) end if trace_sql then report("cleaned: %s seconds before %s",delta,osfulltime(time)) end return records, keys end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-enh.lua0000644000175000017500000001474012134352503024116 0ustar norbertnorbertif not modules then modules = { } end modules ['font-enh'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next = next local trace_unicoding = false trackers.register("fonts.defining", function(v) trace_unicoding = v end) trackers.register("fonts.unicoding", function(v) trace_unicoding = v end) local report_unicoding = logs.reporter("fonts","unicoding") local fonts = fonts local constructors = fonts.constructors local tfmfeatures = constructors.newfeatures("tfm") local registertfmfeature = tfmfeatures.register local afmfeatures = fonts.constructors.newfeatures("afm") local registerafmfeature = afmfeatures.register local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register -- -- these will become goodies (when needed at all) -- -- local fontencodings = fonts.encodings -- fontencodings.remappings = fontencodings.remappings or { } -- -- local function reencode(tfmdata,encoding) -- if encoding and fontencodings.known[encoding] then -- local data = fontencodings.load(encoding) -- if data then -- tfmdata.properties.encoding = encoding -- local characters = tfmdata.characters -- local original = { } -- local vector = data.vector -- for unicode, character in next, characters do -- character.name = vector[unicode] -- character.index = unicode, character -- original[unicode] = character -- end -- for newcode, oldcode in next, data.unicodes do -- if newcode ~= oldcode then -- if trace_unicoding then -- report_unicoding("reencoding %U to %U",oldcode,newcode) -- end -- characters[newcode] = original[oldcode] -- end -- end -- end -- end -- end -- -- registertfmfeature { -- name = "reencode", -- description = "reencode", -- manipulators = { -- base = reencode, -- node = reencode, -- } -- } -- -- local function remap(tfmdata,remapping) -- local vector = remapping and fontencodings.remappings[remapping] -- if vector then -- local characters, original = tfmdata.characters, { } -- for k, v in next, characters do -- original[k], characters[k] = v, nil -- end -- for k,v in next, vector do -- if k ~= v then -- if trace_unicoding then -- report_unicoding("remapping %U to %U",k,v) -- end -- local c = original[k] -- characters[v] = c -- c.index = k -- end -- end -- local properties = tfmdata.properties -- if not properties then -- properties = { } -- tfmdata.properties = properties -- else -- properties.encodingbytes = 2 -- properties.format = properties.format or 'type1' -- end -- end -- end -- -- registertfmfeature { -- name = "remap", -- description = "remap", -- manipulators = { -- base = remap, -- node = remap, -- } -- } -- \definefontfeature[dingbats][goodies=dingbats,unicoding=yes] -- we only add and don't replace -- we could also add kerns but we asssume symbols -- todo: complain if not basemode -- remapping = { -- tounicode = true, -- unicodes = { -- a1 = 0x2701, local tosixteen = fonts.mappings.tounicode16 local function initializeunicoding(tfmdata) local goodies = tfmdata.goodies local newcoding = nil local tounicode = false for i=1,#goodies do local remapping = goodies[i].remapping if remapping and remapping.unicodes then newcoding = remapping.unicodes -- names to unicodes tounicode = remapping.tounicode end end if newcoding then local characters = tfmdata.characters local descriptions = tfmdata.descriptions local oldcoding = tfmdata.resources.unicodes local tounicodes = tfmdata.resources.tounicode -- index to unicode local originals = { } for name, newcode in next, newcoding do local oldcode = oldcoding[name] if characters[newcode] and not originals[newcode] then originals[newcode] = { character = characters [newcode], description = descriptions[newcode], } end if oldcode then local original = originals[oldcode] if original then characters [newcode] = original.character descriptions[newcode] = original.description else characters [newcode] = characters [oldcode] descriptions[newcode] = descriptions[oldcode] end else oldcoding[name] = newcode end if tounicode then local description = descriptions[newcode] if description then local index = description.index if not tounicodes[index] then tounicodes[index] = tosixteen(newcode) -- shared (we could have a metatable) end end end if trace_unicoding then if oldcode then report_unicoding("aliasing glyph %a from %U to %U",name,oldcode,newcode) else report_unicoding("aliasing glyph %a to %U",name,newcode) end end end end end registerafmfeature { name = "unicoding", description = "adapt unicode table", initializers = { base = initializeunicoding, node = initializeunicoding, }, -- manipulators = { -- base = finalizeunicoding, -- node = finalizeunicoding, -- } } registerotffeature { name = "unicoding", description = "adapt unicode table", initializers = { base = initializeunicoding, node = initializeunicoding, }, -- manipulators = { -- base = finalizeunicoding, -- node = finalizeunicoding, -- } } context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1252.mkii0000644000175000017500000002716111754241457024425 0ustar norbertnorbert%D \module %D [ file=regi-cp1252, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=cp1252 (West European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for cp1252 input encoding (regime) for West European languages, %D see also iso-8859-1 and iso-8859-15. %D %D (Contributors to the original file: Tobias Burnus, Hans Hagen \& Victor Figurnov.) %D %D Usage: %D \type{\enableregime[cp1252]} or \type{\enablereregime[windows-1252]} %D % and \enableregime[win] for backward-compatibility \startregime[cp1252] \defineactivetoken 128 {\texteuro} % 20AC EURO SIGN \defineactivetoken 129 {\unknownchar} % \defineactivetoken 130 {\quotesinglebase} % 201A SINGLE LOW-9 QUOTATION MARK \defineactivetoken 131 {\fhook} % 0192 LATIN SMALL LETTER F WITH HOOK \defineactivetoken 132 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 133 {\textellipsis} % 2026 HORIZONTAL ELLIPSIS \defineactivetoken 134 {\textdag} % 2020 DAGGER \defineactivetoken 135 {\textddag} % 2021 DOUBLE DAGGER \defineactivetoken 136 {\textcircumflex} % 02C6 MODIFIER LETTER CIRCUMFLEX ACCENT \defineactivetoken 137 {\perthousand} % 2030 PER MILLE SIGN \defineactivetoken 138 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 139 {\guilsingleleft} % 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \defineactivetoken 140 {\OEligature} % 0152 LATIN CAPITAL LIGATURE OE \defineactivetoken 141 {\unknownchar} % \defineactivetoken 142 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 143 {\unknownchar} % \defineactivetoken 144 {\unknownchar} % \defineactivetoken 145 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 146 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 147 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 148 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 149 {\textbullet} % 2022 BULLET \defineactivetoken 150 {\endash} % 2013 EN DASH \defineactivetoken 151 {\emdash} % 2014 EM DASH \defineactivetoken 152 {\texttilde} % 02DC SMALL TILDE \defineactivetoken 153 {\trademark} % 2122 TRADE MARK SIGN \defineactivetoken 154 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 155 {\guilsingleright} % 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \defineactivetoken 156 {\oeligature} % 0153 LATIN SMALL LIGATURE OE \defineactivetoken 157 {\unknownchar} % \defineactivetoken 158 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 159 {\Ydiaeresis} % 0178 LATIN CAPITAL LETTER Y WITH DIAERESIS \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\exclamdown} % 00A1 INVERTED EXCLAMATION MARK \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\textyen} % 00A5 YEN SIGN \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\ordfeminine} % 00AA FEMININE ORDINAL INDICATOR \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\textmacron} % 00AF MACRON \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\ordmasculine} % 00BA MASCULINE ORDINAL INDICATOR \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\onequarter} % 00BC VULGAR FRACTION ONE QUARTER \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\threequarter} % 00BE VULGAR FRACTION THREE QUARTERS \defineactivetoken 191 {\questiondown} % 00BF INVERTED QUESTION MARK \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Eth} % 00D0 LATIN CAPITAL LETTER ETH \defineactivetoken 209 {\Ntilde} % 00D1 LATIN CAPITAL LETTER N WITH TILDE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\Thorn} % 00DE LATIN CAPITAL LETTER THORN \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\eth} % 00F0 LATIN SMALL LETTER ETH \defineactivetoken 241 {\ntilde} % 00F1 LATIN SMALL LETTER N WITH TILDE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\thorn} % 00FE LATIN SMALL LETTER THORN \defineactivetoken 255 {\ydiaeresis} % 00FF LATIN SMALL LETTER Y WITH DIAERESIS \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-pps.lua0000644000175000017500000012171512130411274024121 0ustar norbertnorbertif not modules then modules = { } end modules ['mlib-pps'] = { version = 1.001, comment = "companion to mlib-ctx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- todo: make a hashed textext variant where we only process the text once (normally -- we cannot assume that no macros are involved which influence a next textext local format, gmatch, match, split = string.format, string.gmatch, string.match, string.split local tonumber, type = tonumber, type local round = math.round local insert, concat = table.insert, table.concat local Cs, Cf, C, Cg, Ct, P, S, V, Carg = lpeg.Cs, lpeg.Cf, lpeg.C, lpeg.Cg, lpeg.Ct, lpeg.P, lpeg.S, lpeg.V, lpeg.Carg local lpegmatch = lpeg.match local formatters = string.formatters local mplib, metapost, lpdf, context = mplib, metapost, lpdf, context local texbox = tex.box local copy_list = node.copy_list local free_list = node.flush_list local setmetatableindex = table.setmetatableindex local sortedhash = table.sortedhash local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming local trace_runs = false trackers.register("metapost.runs", function(v) trace_runs = v end) local trace_textexts = false trackers.register("metapost.textexts", function(v) trace_textexts = v end) local trace_scripts = false trackers.register("metapost.scripts", function(v) trace_scripts = v end) local report_metapost = logs.reporter("metapost") local report_textexts = logs.reporter("metapost","textexts") local report_scripts = logs.reporter("metapost","scripts") local colors = attributes.colors local rgbtocmyk = colors.rgbtocmyk or function() return 0,0,0,1 end local cmyktorgb = colors.cmyktorgb or function() return 0,0,0 end local rgbtogray = colors.rgbtogray or function() return 0 end local cmyktogray = colors.cmyktogray or function() return 0 end metapost.makempy = metapost.makempy or { nofconverted = 0 } local makempy = metapost.makempy local nooutercolor = "0 g 0 G" local nooutertransparency = "/Tr0 gs" -- only when set local outercolormode = 0 local outercolor = nooutercolor local outertransparency = nooutertransparency local innercolor = nooutercolor local innertransparency = nooutertransparency local pdfcolor = lpdf.color local pdftransparency = lpdf.transparency local registercolor = colors.register local registerspotcolor = colors.registerspotcolor local transparencies = attributes.transparencies local registertransparency = transparencies.register function metapost.setoutercolor(mode,colormodel,colorattribute,transparencyattribute) -- has always to be called before conversion -- todo: transparency (not in the mood now) outercolormode = mode if mode == 1 or mode == 3 then -- inherit from outer (registered color) outercolor = pdfcolor(colormodel,colorattribute) or nooutercolor outertransparency = pdftransparency(transparencyattribute) or nooutertransparency elseif mode == 2 then -- stand alone (see m-punk.tex) outercolor = "" outertransparency = "" else -- 0 outercolor = nooutercolor outertransparency = nooutertransparency end innercolor = outercolor innertransparency = outertransparency -- not yet used end local f_gray = formatters["%.3f g %.3f G"] local f_rgb = formatters["%.3f %.3f %.3f rg %.3f %.3f %.3f RG"] local f_cmyk = formatters["%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K"] local f_cm = formatters["q %f %f %f %f %f %f cm"] local f_shade = formatters["MpSh%s"] local function checked_color_pair(color,...) if not color then return innercolor, outercolor end if outercolormode == 3 then innercolor = color(...) return innercolor, innercolor else return color(...), outercolor end end function metapost.colorinitializer() innercolor = outercolor innertransparency = outertransparency return outercolor, outertransparency end --~ local specificationsplitter = lpeg.tsplitat(" ") local colorsplitter = lpeg.tsplitter(":",tonumber) -- no need for : local domainsplitter = lpeg.tsplitter(" ",tonumber) local centersplitter = domainsplitter local coordinatesplitter = domainsplitter -- thanks to taco's reading of the postscript manual: -- -- x' = sx * x + ry * y + tx -- y' = rx * x + sy * y + ty local nofshades = 0 -- todo: hash resources, start at 1000 in order not to clash with older local function normalize(ca,cb) if #cb == 1 then if #ca == 4 then cb[1], cb[2], cb[3], cb[4] = 0, 0, 0, 1-cb[1] else cb[1], cb[2], cb[3] = cb[1], cb[1], cb[1] end elseif #cb == 3 then if #ca == 4 then cb[1], cb[2], cb[3], cb[4] = rgbtocmyk(cb[1],cb[2],cb[3]) else cb[1], cb[2], cb[3] = cmyktorgb(cb[1],cb[2],cb[3],cb[4]) end end end -- todo: check for the same colorspace (actually a backend issue), now we can -- have several similar resources -- -- normalize(ca,cb) fails for spotcolors local function spotcolorconverter(parent, n, d, p) registerspotcolor(parent) return pdfcolor(colors.model,registercolor(nil,'spot',parent,n,d,p)), outercolor end local commasplitter = lpeg.tsplitat(",") local function checkandconvertspot(n_a,f_a,c_a,v_a,n_b,f_b,c_b,v_b) -- must be the same but we don't check local name = f_shade(nofshades) local ca = lpegmatch(commasplitter,v_a) local cb = lpegmatch(commasplitter,v_b) if #ca == 0 or #cb == 0 then return { 0 }, { 1 }, "DeviceGray", name else for i=1,#ca do ca[i] = tonumber(ca[i]) or 0 end for i=1,#cb do cb[i] = tonumber(cb[i]) or 1 end --~ spotcolorconverter(n_a,f_a,c_a,v_a) -- not really needed return ca, cb, n_a or n_b, name end end local function checkandconvert(ca,cb) local name = f_shade(nofshades) if not ca or not cb or type(ca) == "string" then return { 0 }, { 1 }, "DeviceGray", name else if #ca > #cb then normalize(ca,cb) elseif #ca < #cb then normalize(cb,ca) end local model = colors.model if model == "all" then model= (#ca == 4 and "cmyk") or (#ca == 3 and "rgb") or "gray" end if model == "rgb" then if #ca == 4 then ca = { cmyktorgb(ca[1],ca[2],ca[3],ca[4]) } cb = { cmyktorgb(cb[1],cb[2],cb[3],cb[4]) } elseif #ca == 1 then local a, b = 1-ca[1], 1-cb[1] ca = { a, a, a } cb = { b, b, b } end return ca, cb, "DeviceRGB", name elseif model == "cmyk" then if #ca == 3 then ca = { rgbtocmyk(ca[1],ca[2],ca[3]) } cb = { rgbtocmyk(cb[1],cb[2],cb[3]) } elseif #ca == 1 then ca = { 0, 0, 0, ca[1] } cb = { 0, 0, 0, ca[1] } end return ca, cb, "DeviceCMYK", name else if #ca == 4 then ca = { cmyktogray(ca[1],ca[2],ca[3],ca[4]) } cb = { cmyktogray(cb[1],cb[2],cb[3],cb[4]) } elseif #ca == 3 then ca = { rgbtogray(ca[1],ca[2],ca[3]) } cb = { rgbtogray(cb[1],cb[2],cb[3]) } end -- backend specific (will be renamed) return ca, cb, "DeviceGray", name end end end local current_format, current_graphic, current_initializations metapost.multipass = false local textexts = { } -- all boxes, optionally with a different color local texslots = { } -- references to textexts in order or usage local texorder = { } -- references to textexts by mp index local textrial = 0 local texfinal = 0 local scratchbox = 0 local function freeboxes() for n, box in next, textexts do local tn = textexts[n] if tn then free_list(tn) -- texbox[scratchbox] = tn -- texbox[scratchbox] = nil -- this frees too if trace_textexts then report_textexts("freeing box %s",n) end end end textexts = { } texslots = { } texorder = { } textrial = 0 texfinal = 0 end metapost.resettextexts = freeboxes function metapost.settext(box,slot) textexts[slot] = copy_list(texbox[box]) texbox[box] = nil -- this will become -- textexts[slot] = texbox[box] -- unsetbox(box) end function metapost.gettext(box,slot) texbox[box] = copy_list(textexts[slot]) if trace_textexts then report_textexts("putting text %s in box %s",slot,box) end -- textexts[slot] = nil -- no, pictures can be placed several times end -- rather generic pdf, so use this elsewhere too it no longer pays -- off to distinguish between outline and fill (we now have both -- too, e.g. in arrows) metapost.reducetogray = true local models = { } function models.all(cr) local n = #cr if n == 0 then return checked_color_pair() elseif metapost.reducetogray then if n == 1 then local s = cr[1] return checked_color_pair(f_gray,s,s) elseif n == 3 then local r, g, b = cr[1], cr[2], cr[3] if r == g and g == b then return checked_color_pair(f_gray,r,r) else return checked_color_pair(f_rgb,r,g,b,r,g,b) end else local c, m, y, k = cr[1], cr[2], cr[3], cr[4] if c == m and m == y and y == 0 then k = 1 - k return checked_color_pair(f_gray,k,k) else return checked_color_pair(f_cmyk,c,m,y,k,c,m,y,k) end end elseif n == 1 then local s = cr[1] return checked_color_pair(f_gray,s,s) elseif n == 3 then local r, g, b = cr[1], cr[2], cr[3] return checked_color_pair(f_rgb,r,g,b,r,g,b) else local c, m, y, k = cr[1], cr[2], cr[3], cr[4] return checked_color_pair(f_cmyk,c,m,y,k,c,m,y,k) end end function models.rgb(cr) local n = #cr if n == 0 then return checked_color_pair() elseif metapost.reducetogray then if n == 1 then local s = cr[1] checked_color_pair(f_gray,s,s) elseif n == 3 then local r, g, b = cr[1], cr[2], cr[3] if r == g and g == b then return checked_color_pair(f_gray,r,r) else return checked_color_pair(f_rgb,r,g,b,r,g,b) end else local c, m, y, k = cr[1], cr[2], cr[3], cr[4] if c == m and m == y and y == 0 then k = 1 - k return checked_color_pair(f_gray,k,k) else local r, g, b = cmyktorgb(c,m,y,k) return checked_color_pair(f_rgb,r,g,b,r,g,b) end end elseif n == 1 then local s = cr[1] return checked_color_pair(f_gray,s,s) else local r, g, b if n == 3 then r, g, b = cmyktorgb(cr[1],cr[2],cr[3],cr[4]) else r, g, b = cr[1], cr[2], cr[3] end return checked_color_pair(f_rgb,r,g,b,r,g,b) end end function models.cmyk(cr) local n = #cr if n == 0 then return checked_color_pair() elseif metapost.reducetogray then if n == 1 then local s = cr[1] return checked_color_pair(f_gray,s,s) elseif n == 3 then local r, g, b = cr[1], cr[2], cr[3] if r == g and g == b then return checked_color_pair(f_gray,r,r) else local c, m, y, k = rgbtocmyk(r,g,b) return checked_color_pair(f_cmyk,c,m,y,k,c,m,y,k) end else local c, m, y, k = cr[1], cr[2], cr[3], cr[4] if c == m and m == y and y == 0 then k = k - 1 return checked_color_pair(f_gray,k,k) else return checked_color_pair(f_cmyk,c,m,y,k,c,m,y,k) end end elseif n == 1 then local s = cr[1] return checked_color_pair(f_gray,s,s) else local c, m, y, k if n == 3 then c, m, y, k = rgbtocmyk(cr[1],cr[2],cr[3]) else c, m, y, k = cr[1], cr[2], cr[3], cr[4] end return checked_color_pair(f_cmyk,c,m,y,k,c,m,y,k) end end function models.gray(cr) local n, s = #cr, 0 if n == 0 then return checked_color_pair() elseif n == 4 then s = cmyktogray(cr[1],cr[2],cr[3],cr[4]) elseif n == 3 then s = rgbtogray(cr[1],cr[2],cr[3]) else s = cr[1] end return checked_color_pair(f_gray,s,s) end setmetatableindex(models, function(t,k) local v = models.gray t[k] = v return v end) local function colorconverter(cs) return models[colors.model](cs) end local btex = P("btex") local etex = P(" etex") local vtex = P("verbatimtex") local ttex = P("textext") local gtex = P("graphictext") local multipass = P("forcemultipass") local spacing = S(" \n\r\t\v")^0 local dquote = P('"') local found, forced = false, false local function convert(str) found = true return "rawtextext(\"" .. str .. "\")" -- centered end local function ditto(str) return "\" & ditto & \"" end local function register() found = true end local function force() forced = true end local texmess = (dquote/ditto + (1 - etex))^0 local function ignore(s) report_metapost("ignoring verbatim tex: %s",s) return "" end -- local parser = P { -- [1] = Cs((V(2)/register + V(4)/ignore + V(3)/convert + V(5)/force + 1)^0), -- [2] = ttex + gtex, -- [3] = btex * spacing * Cs(texmess) * etex, -- [4] = vtex * spacing * Cs(texmess) * etex, -- [5] = multipass, -- experimental, only for testing -- } -- currently a a one-liner produces less code -- textext.*(".*") can have "'s but tricky parsing as we can have concatenated strings -- so this is something for a boring plain or train trip and we might assume proper mp -- input anyway local parser = Cs(( (ttex + gtex)/register + (btex * spacing * Cs(texmess) * etex)/convert + (vtex * spacing * Cs(texmess) * etex)/ignore + 1 )^0) local function checktexts(str) found, forced = false, false return lpegmatch(parser,str), found, forced end metapost.checktexts = checktexts local factor = 65536*(7227/7200) function metapost.edefsxsy(wd,ht,dp) -- helper for figure local hd = ht + dp context.setvalue("sx",wd ~= 0 and factor/wd or 0) context.setvalue("sy",hd ~= 0 and factor/hd or 0) end local function sxsy(wd,ht,dp) -- helper for text local hd = ht + dp return (wd ~= 0 and factor/wd) or 0, (hd ~= 0 and factor/hd) or 0 end local no_first_run = "mfun_first_run := false ;" local do_first_run = "mfun_first_run := true ;" local no_trial_run = "mfun_trial_run := false ;" local do_trial_run = "mfun_trial_run := true ;" local do_begin_fig = "; beginfig(1) ; " local do_end_fig = "; endfig ;" local do_safeguard = ";" local f_text_data = formatters["mfun_tt_w[%i] := %f ; mfun_tt_h[%i] := %f ; mfun_tt_d[%i] := %f ;"] function metapost.textextsdata() local t, nt, n = { }, 0, 0 for n=1,#texorder do local box = textexts[texorder[n]] if box then local wd, ht, dp = box.width/factor, box.height/factor, box.depth/factor if trace_textexts then report_textexts("passed data item %s: (%p,%p,%p)",n,wd,ht,dp) end nt = nt + 1 t[nt] = f_text_data(n,wd,n,ht,n,dp) else break end end -- inspect(t) return t end metapost.intermediate = metapost.intermediate or {} metapost.intermediate.actions = metapost.intermediate.actions or {} metapost.intermediate.needed = false metapost.method = 1 -- 1:dumb 2:clever -- maybe we can latelua the texts some day local nofruns = 0 -- askedfig: "all", "first", number local function checkaskedfig(askedfig) -- return askedfig, wrappit if not askedfig then return "direct", true elseif askedfig == "all" then return "all", false elseif askedfig == "direct" then return "all", true else askedfig = tonumber(askedfig) if askedfig then return askedfig, false else return "direct", true end end end function metapost.graphic_base_pass(specification) local mpx = specification.mpx -- mandate local data = specification.data or "" local definitions = specification.definitions or "" -- local extensions = metapost.getextensions(specification.instance,specification.useextensions) local extensions = specification.extensions or "" local inclusions = specification.inclusions or "" local initializations = specification.initializations or "" local askedfig = specification.figure -- no default else no wrapper -- nofruns = nofruns + 1 local askedfig, wrappit = checkaskedfig(askedfig) local done_1, done_2, done_3, forced_1, forced_2, forced_3 data, done_1, forced_1 = checktexts(data) -- we had preamble = extensions + inclusions if extensions == "" then extensions, done_2, forced_2 = "", false, false else extensions, done_2, forced_2 = checktexts(extensions) end if inclusions == "" then inclusions, done_3, forced_3 = "", false, false else inclusions, done_3, forced_3 = checktexts(inclusions) end metapost.intermediate.needed = false metapost.multipass = false -- no needed here current_format = mpx current_graphic = data current_initializations = initializations local method = metapost.method if trace_runs then if method == 1 then report_metapost("forcing two runs due to library configuration") elseif method ~= 2 then report_metapost("ignoring run due to library configuration") elseif not (done_1 or done_2 or done_3) then report_metapost("forcing one run only due to analysis") elseif done_1 then report_metapost("forcing at max two runs due to main code") elseif done_2 then report_metapost("forcing at max two runs due to extensions") else report_metapost("forcing at max two runs due to inclusions") end end if method == 1 or (method == 2 and (done_1 or done_2 or done_3)) then if trace_runs then report_metapost("first run of job %s, asked figure %a",nofruns,askedfig) end -- first true means: trialrun, second true means: avoid extra run if no multipass local flushed = metapost.process(mpx, { definitions, extensions, inclusions, wrappit and do_begin_fig or "", do_first_run, do_trial_run, current_initializations, do_safeguard, current_graphic, wrappit and do_end_fig or "", }, true, nil, not (forced_1 or forced_2 or forced_3), false, askedfig) if metapost.intermediate.needed then for _, action in next, metapost.intermediate.actions do action() end end if not flushed or not metapost.optimize then -- tricky, we can only ask once for objects and therefore -- we really need a second run when not optimized context.MPLIBextrapass(askedfig) end else if trace_runs then report_metapost("running job %s, asked figure %a",nofruns,askedfig) end metapost.process(mpx, { preamble, wrappit and do_begin_fig or "", do_first_run, no_trial_run, current_initializations, do_safeguard, current_graphic, wrappit and do_end_fig or "", }, false, nil, false, false, askedfig) end end function metapost.graphic_extra_pass(askedfig) if trace_runs then report_metapost("second run of job %s, asked figure %a",nofruns,askedfig) end local askedfig, wrappit = checkaskedfig(askedfig) metapost.process(current_format, { wrappit and do_begin_fig or "", no_trial_run, concat(metapost.textextsdata()," ;\n"), current_initializations, do_safeguard, current_graphic, wrappit and do_end_fig or "", }, false, nil, false, true, askedfig) context.MPLIBresettexts() -- must happen afterwards end local start = [[\starttext]] local preamble = [[\long\def\MPLIBgraphictext#1{\startTEXpage[scale=10000]#1\stopTEXpage}]] local stop = [[\stoptext]] function makempy.processgraphics(graphics) if #graphics > 0 then makempy.nofconverted = makempy.nofconverted + 1 starttiming(makempy) local mpofile = tex.jobname .. "-mpgraph" local mpyfile = file.replacesuffix(mpofile,"mpy") local pdffile = file.replacesuffix(mpofile,"pdf") local texfile = file.replacesuffix(mpofile,"tex") io.savedata(texfile, { start, preamble, metapost.tex.get(), concat(graphics,"\n"), stop }, "\n") local command = format("context --once %s %s", (tex.interactionmode == 0 and "--batchmode") or "", texfile) os.execute(command) if io.exists(pdffile) then command = format("pstoedit -ssp -dt -f mpost %s %s", pdffile, mpyfile) os.execute(command) local result, r = { }, 0 if io.exists(mpyfile) then local data = io.loaddata(mpyfile) for figure in gmatch(data,"beginfig(.-)endfig") do r = r + 1 result[r] = formatters["begingraphictextfig%sendgraphictextfig ;\n"](figure) end io.savedata(mpyfile,concat(result,"")) end end stoptiming(makempy) end end -- -- the new plugin handler -- -- local sequencers = utilities.sequencers local appendgroup = sequencers.appendgroup local appendaction = sequencers.appendaction local resetter = nil local analyzer = nil local processor = nil local resetteractions = sequencers.new { arguments = "t" } local analyzeractions = sequencers.new { arguments = "object,prescript" } local processoractions = sequencers.new { arguments = "object,prescript,before,after" } appendgroup(resetteractions, "system") appendgroup(analyzeractions, "system") appendgroup(processoractions, "system") -- later entries come first --~ local scriptsplitter = Cf(Ct("") * ( --~ Cg(C((1-S("= "))^1) * S("= ")^1 * C((1-S("\n\r"))^0) * S("\n\r")^0) --~ )^0, rawset) local scriptsplitter = Ct ( Ct ( C((1-S("= "))^1) * S("= ")^1 * C((1-S("\n\r"))^0) * S("\n\r")^0 )^0 ) local function splitprescript(script) local hash = lpegmatch(scriptsplitter,script) for i=#hash,1,-1 do local h = hash[i] hash[h[1]] = h[2] end if trace_scripts then report_scripts(table.serialize(hash,"prescript")) end return hash end -- -- not used: -- -- local function splitpostscript(script) -- local hash = lpegmatch(scriptsplitter,script) -- for i=1,#hash do -- local h = hash[i] -- hash[h[1]] = h[2] -- end -- if trace_scripts then -- report_scripts(table.serialize(hash,"postscript")) -- end -- return hash -- end function metapost.pluginactions(what,t,flushfigure) -- before/after object, depending on what for i=1,#what do local wi = what[i] if type(wi) == "function" then -- assume injection flushfigure(t) -- to be checked: too many 0 g 0 G t = { } wi() else t[#t+1] = wi end end return t end function metapost.resetplugins(t) -- intialize plugins, before figure -- plugins can have been added resetter = resetteractions .runner analyzer = analyzeractions .runner processor = processoractions .runner -- let's apply one runner resetter(t) end function metapost.analyzeplugins(object) -- each object (first pass) local prescript = object.prescript -- specifications if prescript and #prescript > 0 then return analyzer(object,splitprescript(prescript)) end end function metapost.processplugins(object) -- each object (second pass) local prescript = object.prescript -- specifications if prescript and #prescript > 0 then local before = { } local after = { } processor(object,splitprescript(prescript),before,after) return #before > 0 and before, #after > 0 and after else local c = object.color if c and #c > 0 then local b, a = colorconverter(c) return { b }, { a } end end end -- helpers local basepoints = number.dimenfactors["bp"] local function cm(object) local op = object.path if op then local first, second, fourth = op[1], op[2], op[4] local tx, ty = first.x_coord , first.y_coord local sx, sy = second.x_coord - tx, fourth.y_coord - ty local rx, ry = second.y_coord - ty, fourth.x_coord - tx if sx == 0 then sx = 0.00001 end if sy == 0 then sy = 0.00001 end return sx, rx, ry, sy, tx, ty else return 1, 0, 0, 1, 0, 0 -- weird case end end -- color local function cl_reset(t) t[#t+1] = metapost.colorinitializer() -- only color end local tx_hash = { } local tx_last = 0 local function tx_reset() tx_hash = { } tx_last = 0 end local fmt = formatters["%s %s %s % t"] local function tx_analyze(object,prescript) -- todo: hash content and reuse them local tx_stage = prescript.tx_stage if tx_stage == "trial" then textrial = textrial + 1 local tx_number = tonumber(prescript.tx_number) local s = object.postscript or "" local c = object.color -- only simple ones, no transparency local a = prescript.tr_alternative local t = prescript.tr_transparency local h = fmt(tx_number,a or "?",t or "?",c) local n = tx_hash[h] -- todo: hashed variant with s (nicer for similar labels) if not n then tx_last = tx_last + 1 if not c then -- no color elseif #c == 1 then if a and t then s = formatters["\\directcolored[s=%f,a=%f,t=%f]%s"](c[1],a,t,s) else s = formatters["\\directcolored[s=%f]%s"](c[1],s) end elseif #c == 3 then if a and t then s = formatters["\\directcolored[r=%f,g=%f,b=%f,a=%f,t=%f]%s"](c[1],c[2],c[3],a,t,s) else s = formatters["\\directcolored[r=%f,g=%f,b=%f]%s"](c[1],c[2],c[3],s) end elseif #c == 4 then if a and t then s = formatters["\\directcolored[c=%f,m=%f,y=%f,k=%f,a=%f,t=%f]%s"](c[1],c[2],c[3],c[4],a,t,s) else s = formatters["\\directcolored[c=%f,m=%f,y=%f,k=%f]%s"](c[1],c[2],c[3],c[4],s) end end context.MPLIBsettext(tx_last,s) metapost.multipass = true tx_hash[h] = tx_last texslots[textrial] = tx_last texorder[tx_number] = tx_last if trace_textexts then report_textexts("stage %a, usage %a, number %a, new %a, hash %a",tx_stage,textrial,tx_number,tx_last,h) end else texslots[textrial] = n if trace_textexts then report_textexts("stage %a, usage %a, number %a, new %a, hash %a",tx_stage,textrial,tx_number,n,h) end end elseif tx_stage == "extra" then textrial = textrial + 1 local tx_number = tonumber(prescript.tx_number) if not texorder[tx_number] then local s = object.postscript or "" tx_last = tx_last + 1 context.MPLIBsettext(tx_last,s) metapost.multipass = true texslots[textrial] = tx_last texorder[tx_number] = tx_last if trace_textexts then report_textexts("stage %a, usage %a, number %a, extra %a",tx_stage,textrial,tx_number,tx_last) end end end end local function tx_process(object,prescript,before,after) local tx_number = prescript.tx_number if tx_number then tx_number = tonumber(tx_number) local tx_stage = prescript.tx_stage if tx_stage == "final" then texfinal = texfinal + 1 local n = texslots[texfinal] if trace_textexts then report_textexts("stage %a, usage %a, number %a, use %a",tx_stage,texfinal,tx_number,n) end local sx, rx, ry, sy, tx, ty = cm(object) -- needs to be frozen outside the function local box = textexts[n] if box then before[#before+1] = function() -- flush always happens, we can have a special flush function injected before context.MPLIBgettextscaledcm(n, format("%f",sx), -- bah ... %s no longer checks format("%f",rx), -- bah ... %s no longer checks format("%f",ry), -- bah ... %s no longer checks format("%f",sy), -- bah ... %s no longer checks format("%f",tx), -- bah ... %s no longer checks format("%f",ty), -- bah ... %s no longer checks sxsy(box.width,box.height,box.depth)) end else before[#before+1] = function() report_textexts("unknown %s",tx_number) end end if not trace_textexts then object.path = false -- else: keep it end object.color = false object.grouped = true end end end -- graphics local graphics = { } function metapost.intermediate.actions.makempy() if #graphics > 0 then makempy.processgraphics(graphics) graphics = { } -- ? end end local function gt_analyze(object,prescript) local gt_stage = prescript.gt_stage if gt_stage == "trial" then graphics[#graphics+1] = formatters["\\MPLIBgraphictext{%s}"](object.postscript or "") metapost.intermediate.needed = true metapost.multipass = true end end -- local function gt_process(object,prescript,before,after) -- local gt_stage = prescript.gt_stage -- if gt_stage == "final" then -- end -- end -- shades local function sh_process(object,prescript,before,after) local sh_type = prescript.sh_type if sh_type then nofshades = nofshades + 1 local domain = lpegmatch(domainsplitter,prescript.sh_domain) local centera = lpegmatch(centersplitter,prescript.sh_center_a) local centerb = lpegmatch(centersplitter,prescript.sh_center_b) -- local sh_color_a = prescript.sh_color_a or "1" local sh_color_b = prescript.sh_color_b or "1" local ca, cb, colorspace, name, separation if prescript.sh_color == "into" and prescript.sp_name then -- some spotcolor local value_a, components_a, fractions_a, name_a local value_b, components_b, fractions_b, name_b for i=1,#prescript do -- { "sh_color_a", "1" }, -- { "sh_color", "into" }, -- { "sh_radius_b", "0" }, -- { "sh_radius_a", "141.73225" }, -- { "sh_center_b", "425.19676 141.73225" }, -- { "sh_center_a", "425.19676 0" }, -- { "sh_factor", "1" }, local tag = prescript[i][1] if not name_a and tag == "sh_color_a" then value_a = prescript[i-5][2] components_a = prescript[i-4][2] fractions_a = prescript[i-3][2] name_a = prescript[i-2][2] elseif not name_b and tag == "sh_color_b" then value_b = prescript[i-5][2] components_b = prescript[i-4][2] fractions_b = prescript[i-3][2] name_b = prescript[i-2][2] end if name_a and name_b then break end end ca, cb, separation, name = checkandconvertspot( name_a,fractions_a,components_a,value_a, name_b,fractions_b,components_b,value_b ) else local colora = lpegmatch(colorsplitter,sh_color_a) local colorb = lpegmatch(colorsplitter,sh_color_b) ca, cb, colorspace, name = checkandconvert(colora,colorb) end if not ca or not cb then ca, cb, colorspace, name = checkandconvert() end if sh_type == "linear" then local coordinates = { centera[1], centera[2], centerb[1], centerb[2] } lpdf.linearshade(name,domain,ca,cb,1,colorspace,coordinates,separation) -- backend specific (will be renamed) elseif sh_type == "circular" then local radiusa = tonumber(prescript.sh_radius_a) local radiusb = tonumber(prescript.sh_radius_b) local coordinates = { centera[1], centera[2], radiusa, centerb[1], centerb[2], radiusb } lpdf.circularshade(name,domain,ca,cb,1,colorspace,coordinates,separation) -- backend specific (will be renamed) else -- fatal error end before[#before+1], after[#after+1] = "q /Pattern cs", formatters["W n /%s sh Q"](name) -- false, not nil, else mt triggered object.colored = false -- hm, not object.color ? object.type = false object.grouped = true end end -- bitmaps local function bm_process(object,prescript,before,after) local bm_xresolution = prescript.bm_xresolution if bm_xresolution then before[#before+1] = f_cm(cm(object)) before[#before+1] = function() figures.bitmapimage { xresolution = tonumber(bm_xresolution), yresolution = tonumber(prescript.bm_yresolution), width = 1/basepoints, height = 1/basepoints, data = object.postscript } end before[#before+1] = "Q" object.path = false object.color = false object.grouped = true end end -- positions local function ps_process(object,prescript,before,after) local ps_label = prescript.ps_label if ps_label then local op = object.path local first, third = op[1], op[3] local x, y = first.x_coord, first.y_coord local w, h = third.x_coord - x, third.y_coord - y x = x - metapost.llx y = metapost.ury - y before[#before+1] = function() context.MPLIBpositionwhd(ps_label,x,y,w,h) end object.path = false end end -- figures local function fg_process(object,prescript,before,after) local fg_name = prescript.fg_name if fg_name then before[#before+1] = f_cm(cm(object)) -- beware: does not use the cm stack before[#before+1] = function() context.MPLIBfigure(fg_name,prescript.fg_mask or "") end before[#before+1] = "Q" object.path = false object.grouped = true end end -- color and transparency local value = Cs ( ( (Carg(1) * C((1-P(","))^1)) / function(a,b) return format("%0.3f",a * tonumber(b)) end + P(","))^1 ) -- should be codeinjections local t_list = attributes.list[attributes.private('transparency')] local c_list = attributes.list[attributes.private('color')] local function tr_process(object,prescript,before,after) -- before can be shortcut to t local tr_alternative = prescript.tr_alternative if tr_alternative then tr_alternative = tonumber(tr_alternative) local tr_transparency = tonumber(prescript.tr_transparency) before[#before+1] = formatters["/Tr%s gs"](registertransparency(nil,tr_alternative,tr_transparency,true)) after[#after+1] = "/Tr0 gs" -- outertransparency end local cs = object.color if cs and #cs > 0 then local c_b, c_a local sp_type = prescript.sp_type if not sp_type then c_b, c_a = colorconverter(cs) elseif sp_type == "spot" or sp_type == "multitone" then local sp_name = prescript.sp_name or "black" local sp_fractions = prescript.sp_fractions or 1 local sp_components = prescript.sp_components or "" local sp_value = prescript.sp_value or "1" local cf = cs[1] if cf ~= 1 then -- beware, we do scale the spotcolors but not the alternative representation sp_value = lpegmatch(value,sp_value,1,cf) or sp_value end c_b, c_a = spotcolorconverter(sp_name,sp_fractions,sp_components,sp_value) elseif sp_type == "named" then -- we might move this to another namespace .. also, named can be a spotcolor -- so we need to check for that too ... also we need to resolve indirect -- colors so we might need the second pass for this (draw dots with \MPcolor) local sp_name = prescript.sp_name or "black" if not tr_alternative then -- todo: sp_name is not yet registered at this time local t = t_list[sp_name] -- string or attribute local v = t and attributes.transparencies.value(t) if v then before[#before+1] = formatters["/Tr%s gs"](registertransparency(nil,v[1],v[2],true)) after[#after+1] = "/Tr0 gs" -- outertransparency end end local c = c_list[sp_name] -- string or attribute local v = c and attributes.colors.value(c) if v then -- all=1 gray=2 rgb=3 cmyk=4 local colorspace = v[1] local f = cs[1] if colorspace == 2 then local s = f*v[2] c_b, c_a = checked_color_pair(f_gray,s,s) elseif colorspace == 3 then local r, g, b = f*v[3], f*v[4], f*v[5] c_b, c_a = checked_color_pair(f_rgb,r,g,b,r,g,b) elseif colorspace == 4 or colorspace == 1 then local c, m, y, k = f*v[6], f*v[7], f*v[8], f*v[9] c_b, c_a = checked_color_pair(f_cmyk,c,m,y,k,c,m,y,k) else local s = f*v[2] c_b, c_a = checked_color_pair(f_gray,s,s) end end -- end if c_a and c_b then before[#before+1] = c_b after[#after+1] = c_a end end end -- layers (nasty: we need to keep the 'grouping' right local function la_process(object,prescript,before,after) local la_name = prescript.la_name if la_name then before[#before+1] = backends.codeinjections.startlayer(la_name) insert(after,1,backends.codeinjections.stoplayer()) end end -- groups local types = { isolated } local function gr_process(object,prescript,before,after) local gr_state = prescript.gr_state if gr_state then if gr_state == "start" then local gr_type = utilities.parsers.settings_to_hash(prescript.gr_type) before[#before+1] = function() context.MPLIBstartgroup( gr_type.isolated and 1 or 0, gr_type.knockout and 1 or 0, prescript.gr_llx, prescript.gr_lly, prescript.gr_urx, prescript.gr_ury ) end elseif gr_state == "stop" then after[#after+1] = function() context.MPLIBstopgroup() end end object.path = false object.color = false object.grouped = true end end -- definitions appendaction(resetteractions, "system",cl_reset) appendaction(resetteractions, "system",tx_reset) appendaction(processoractions,"system",gr_process) appendaction(analyzeractions, "system",tx_analyze) appendaction(analyzeractions, "system",gt_analyze) appendaction(processoractions,"system",sh_process) -- (processoractions,"system",gt_process) appendaction(processoractions,"system",bm_process) appendaction(processoractions,"system",tx_process) appendaction(processoractions,"system",ps_process) appendaction(processoractions,"system",fg_process) appendaction(processoractions,"system",tr_process) -- last, as color can be reset appendaction(processoractions,"system",la_process) -- we're nice and set them already resetter = resetteractions .runner analyzer = analyzeractions .runner processor = processoractions.runner context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-037.mkii0000644000175000017500000007534011754241457024022 0ustar norbertnorbert%D \module %D [ file=enco-037, %D version=2006.02.13, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Encoding for vector 37, %D author=Luigi Scarso, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startencoding[default] \definecharacter UnicodeLightHorizontal {\uchar{37}{000}} %%BOX DRAWINGS LIGHT HORIZONTAL \definecharacter UnicodeHeavyHorizontal {\uchar{37}{001}} %%BOX DRAWINGS HEAVY HORIZONTAL \definecharacter UnicodeLightVertical {\uchar{37}{002}} %%BOX DRAWINGS LIGHT VERTICAL \definecharacter UnicodeHeavyVertical {\uchar{37}{003}} %%BOX DRAWINGS HEAVY VERTICAL \definecharacter UnicodeLightTripleDashHorizontal {\uchar{37}{004}} %%BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL \definecharacter UnicodeHeavyTripleDashHorizontal {\uchar{37}{005}} %%BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL \definecharacter UnicodeLightTripleDashVertical {\uchar{37}{006}} %%BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL \definecharacter UnicodeHeavyTripleDashVertical {\uchar{37}{007}} %%BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL \definecharacter UnicodeLightQuadrupleDashHorizontal {\uchar{37}{008}} %%BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL \definecharacter UnicodeHeavyQuadrupleDashHorizontal {\uchar{37}{009}} %%BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL \definecharacter UnicodeLightQuadrupleDashVertical {\uchar{37}{010}} %%BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL \definecharacter UnicodeHeavyQuadrupleDashVertical {\uchar{37}{011}} %%BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL \definecharacter UnicodeLightDownAndRight {\uchar{37}{012}} %%BOX DRAWINGS LIGHT DOWN AND RIGHT \definecharacter UnicodeDownLightAndRightHeavy {\uchar{37}{013}} %%BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY \definecharacter UnicodeDownHeavyAndRightLight {\uchar{37}{014}} %%BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT \definecharacter UnicodeHeavyDownAndRight {\uchar{37}{015}} %%BOX DRAWINGS HEAVY DOWN AND RIGHT \definecharacter UnicodeLightDownAndLeft {\uchar{37}{016}} %%BOX DRAWINGS LIGHT DOWN AND LEFT \definecharacter UnicodeDownLightAndLeftHeavy {\uchar{37}{017}} %%BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY \definecharacter UnicodeDownHeavyAndLeftLight {\uchar{37}{018}} %%BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT \definecharacter UnicodeHeavyDownAndLeft {\uchar{37}{019}} %%BOX DRAWINGS HEAVY DOWN AND LEFT \definecharacter UnicodeLightUpAndRight {\uchar{37}{020}} %%BOX DRAWINGS LIGHT UP AND RIGHT \definecharacter UnicodeUpLightAndRightHeavy {\uchar{37}{021}} %%BOX DRAWINGS UP LIGHT AND RIGHT HEAVY \definecharacter UnicodeUpHeavyAndRightLight {\uchar{37}{022}} %%BOX DRAWINGS UP HEAVY AND RIGHT LIGHT \definecharacter UnicodeHeavyUpAndRight {\uchar{37}{023}} %%BOX DRAWINGS HEAVY UP AND RIGHT \definecharacter UnicodeLightUpAndLeft {\uchar{37}{024}} %%BOX DRAWINGS LIGHT UP AND LEFT \definecharacter UnicodeUpLightAndLeftHeavy {\uchar{37}{025}} %%BOX DRAWINGS UP LIGHT AND LEFT HEAVY \definecharacter UnicodeUpHeavyAndLeftLight {\uchar{37}{026}} %%BOX DRAWINGS UP HEAVY AND LEFT LIGHT \definecharacter UnicodeHeavyUpAndLeft {\uchar{37}{027}} %%BOX DRAWINGS HEAVY UP AND LEFT \definecharacter UnicodeLightVerticalAndRight {\uchar{37}{028}} %%BOX DRAWINGS LIGHT VERTICAL AND RIGHT \definecharacter UnicodeVerticalLightAndRightHeavy {\uchar{37}{029}} %%BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY \definecharacter UnicodeUpHeavyAndRightDownLight {\uchar{37}{030}} %%BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT \definecharacter UnicodeDownHeavyAndRightUpLight {\uchar{37}{031}} %%BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT \definecharacter UnicodeVerticalHeavyAndRightLight {\uchar{37}{032}} %%BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT \definecharacter UnicodeDownLightAndRightUpHeavy {\uchar{37}{033}} %%BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY \definecharacter UnicodeUpLightAndRightDownHeavy {\uchar{37}{034}} %%BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY \definecharacter UnicodeHeavyVerticalAndRight {\uchar{37}{035}} %%BOX DRAWINGS HEAVY VERTICAL AND RIGHT \definecharacter UnicodeLightVerticalAndLeft {\uchar{37}{036}} %%BOX DRAWINGS LIGHT VERTICAL AND LEFT \definecharacter UnicodeVerticalLightAndLeftHeavy {\uchar{37}{037}} %%BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY \definecharacter UnicodeUpHeavyAndLeftDownLight {\uchar{37}{038}} %%BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT \definecharacter UnicodeDownHeavyAndLeftUpLight {\uchar{37}{039}} %%BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT \definecharacter UnicodeVerticalHeavyAndLeftLight {\uchar{37}{040}} %%BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT \definecharacter UnicodeDownLightAndLeftUpHeavy {\uchar{37}{041}} %%BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY \definecharacter UnicodeUpLightAndLeftDownHeavy {\uchar{37}{042}} %%BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY \definecharacter UnicodeHeavyVerticalAndLeft {\uchar{37}{043}} %%BOX DRAWINGS HEAVY VERTICAL AND LEFT \definecharacter UnicodeLightDownAndHorizontal {\uchar{37}{044}} %%BOX DRAWINGS LIGHT DOWN AND HORIZONTAL \definecharacter UnicodeLeftHeavyAndRightDownLight {\uchar{37}{045}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT \definecharacter UnicodeRightHeavyAndLeftDownLight {\uchar{37}{046}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT \definecharacter UnicodeDownLightAndHorizontalHeavy {\uchar{37}{047}} %%BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY \definecharacter UnicodeDownHeavyAndHorizontalLight {\uchar{37}{048}} %%BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT \definecharacter UnicodeRightLightAndLeftDownHeavy {\uchar{37}{049}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY \definecharacter UnicodeLeftLightAndRightDownHeavy {\uchar{37}{050}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY \definecharacter UnicodeHeavyDownAndHorizontal {\uchar{37}{051}} %%BOX DRAWINGS HEAVY DOWN AND HORIZONTAL \definecharacter UnicodeLightUpAndHorizontal {\uchar{37}{052}} %%BOX DRAWINGS LIGHT UP AND HORIZONTAL \definecharacter UnicodeLeftHeavyAndRightUpLight {\uchar{37}{053}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT \definecharacter UnicodeRightHeavyAndLeftUpLight {\uchar{37}{054}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT \definecharacter UnicodeUpLightAndHorizontalHeavy {\uchar{37}{055}} %%BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY \definecharacter UnicodeUpHeavyAndHorizontalLight {\uchar{37}{056}} %%BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT \definecharacter UnicodeRightLightAndLeftUpHeavy {\uchar{37}{057}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY \definecharacter UnicodeLeftLightAndRightUpHeavy {\uchar{37}{058}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY \definecharacter UnicodeHeavyUpAndHorizontal {\uchar{37}{059}} %%BOX DRAWINGS HEAVY UP AND HORIZONTAL \definecharacter UnicodeLightVerticalAndHorizontal {\uchar{37}{060}} %%BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL \definecharacter UnicodeLeftHeavyAndRightVerticalLight {\uchar{37}{061}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT \definecharacter UnicodeRightHeavyAndLeftVerticalLight {\uchar{37}{062}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT \definecharacter UnicodeVerticalLightAndHorizontalHeavy {\uchar{37}{063}} %%BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY \definecharacter UnicodeUpHeavyAndDownHorizontalLight {\uchar{37}{064}} %%BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT \definecharacter UnicodeDownHeavyAndUpHorizontalLight {\uchar{37}{065}} %%BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT \definecharacter UnicodeVerticalHeavyAndHorizontalLight {\uchar{37}{066}} %%BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT \definecharacter UnicodeLeftUpHeavyAndRightDownLight {\uchar{37}{067}} %%BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT \definecharacter UnicodeRightUpHeavyAndLeftDownLight {\uchar{37}{068}} %%BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT \definecharacter UnicodeLeftDownHeavyAndRightUpLight {\uchar{37}{069}} %%BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT \definecharacter UnicodeRightDownHeavyAndLeftUpLight {\uchar{37}{070}} %%BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT \definecharacter UnicodeDownLightAndUpHorizontalHeavy {\uchar{37}{071}} %%BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY \definecharacter UnicodeUpLightAndDownHorizontalHeavy {\uchar{37}{072}} %%BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY \definecharacter UnicodeRightLightAndLeftVerticalHeavy {\uchar{37}{073}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY \definecharacter UnicodeLeftLightAndRightVerticalHeavy {\uchar{37}{074}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY \definecharacter UnicodeHeavyVerticalAndHorizontal {\uchar{37}{075}} %%BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL \definecharacter UnicodeLightDoubleDashHorizontal {\uchar{37}{076}} %%BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL \definecharacter UnicodeHeavyDoubleDashHorizontal {\uchar{37}{077}} %%BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL \definecharacter UnicodeLightDoubleDashVertical {\uchar{37}{078}} %%BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL \definecharacter UnicodeHeavyDoubleDashVertical {\uchar{37}{079}} %%BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL \definecharacter UnicodeDoubleHorizontal {\uchar{37}{080}} %%BOX DRAWINGS DOUBLE HORIZONTAL \definecharacter UnicodeDoubleVertical {\uchar{37}{081}} %%BOX DRAWINGS DOUBLE VERTICAL \definecharacter UnicodeDownSingleAndRightDouble {\uchar{37}{082}} %%BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE \definecharacter UnicodeDownDoubleAndRightSingle {\uchar{37}{083}} %%BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE \definecharacter UnicodeDoubleDownAndRight {\uchar{37}{084}} %%BOX DRAWINGS DOUBLE DOWN AND RIGHT \definecharacter UnicodeDownSingleAndLeftDouble {\uchar{37}{085}} %%BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE \definecharacter UnicodeDownDoubleAndLeftSingle {\uchar{37}{086}} %%BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE \definecharacter UnicodeDoubleDownAndLeft {\uchar{37}{087}} %%BOX DRAWINGS DOUBLE DOWN AND LEFT \definecharacter UnicodeUpSingleAndRightDouble {\uchar{37}{088}} %%BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE \definecharacter UnicodeUpDoubleAndRightSingle {\uchar{37}{089}} %%BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE \definecharacter UnicodeDoubleUpAndRight {\uchar{37}{090}} %%BOX DRAWINGS DOUBLE UP AND RIGHT \definecharacter UnicodeUpSingleAndLeftDouble {\uchar{37}{091}} %%BOX DRAWINGS UP SINGLE AND LEFT DOUBLE \definecharacter UnicodeUpDoubleAndLeftSingle {\uchar{37}{092}} %%BOX DRAWINGS UP DOUBLE AND LEFT SINGLE \definecharacter UnicodeDoubleUpAndLeft {\uchar{37}{093}} %%BOX DRAWINGS DOUBLE UP AND LEFT \definecharacter UnicodeVerticalSingleAndRightDouble {\uchar{37}{094}} %%BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE \definecharacter UnicodeVerticalDoubleAndRightSingle {\uchar{37}{095}} %%BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE \definecharacter UnicodeDoubleVerticalAndRight {\uchar{37}{096}} %%BOX DRAWINGS DOUBLE VERTICAL AND RIGHT \definecharacter UnicodeVerticalSingleAndLeftDouble {\uchar{37}{097}} %%BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE \definecharacter UnicodeVerticalDoubleAndLeftSingle {\uchar{37}{098}} %%BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE \definecharacter UnicodeDoubleVerticalAndLeft {\uchar{37}{099}} %%BOX DRAWINGS DOUBLE VERTICAL AND LEFT \definecharacter UnicodeDownSingleAndHorizontalDouble {\uchar{37}{100}} %%BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE \definecharacter UnicodeDownDoubleAndHorizontalSingle {\uchar{37}{101}} %%BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE \definecharacter UnicodeDoubleDownAndHorizontal {\uchar{37}{102}} %%BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL \definecharacter UnicodeUpSingleAndHorizontalDouble {\uchar{37}{103}} %%BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE \definecharacter UnicodeUpDoubleAndHorizontalSingle {\uchar{37}{104}} %%BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE \definecharacter UnicodeDoubleUpAndHorizontal {\uchar{37}{105}} %%BOX DRAWINGS DOUBLE UP AND HORIZONTAL \definecharacter UnicodeVerticalSingleAndHorizontalDouble {\uchar{37}{106}} %%BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE \definecharacter UnicodeVerticalDoubleAndHorizontalSingle {\uchar{37}{107}} %%BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE \definecharacter UnicodeDoubleVerticalAndHorizontal {\uchar{37}{108}} %%BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL \definecharacter UnicodeLightArcDownAndRight {\uchar{37}{109}} %%BOX DRAWINGS LIGHT ARC DOWN AND RIGHT \definecharacter UnicodeLightArcDownAndLeft {\uchar{37}{110}} %%BOX DRAWINGS LIGHT ARC DOWN AND LEFT \definecharacter UnicodeLightArcUpAndLeft {\uchar{37}{111}} %%BOX DRAWINGS LIGHT ARC UP AND LEFT \definecharacter UnicodeLightArcUpAndRight {\uchar{37}{112}} %%BOX DRAWINGS LIGHT ARC UP AND RIGHT \definecharacter UnicodeLightDiagonalUpperRightToLowerLeft {\uchar{37}{113}} %%BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT \definecharacter UnicodeLightDiagonalUpperLeftToLowerRight {\uchar{37}{114}} %%BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT \definecharacter UnicodeLightDiagonalCross {\uchar{37}{115}} %%BOX DRAWINGS LIGHT DIAGONAL CROSS \definecharacter UnicodeLightLeft {\uchar{37}{116}} %%BOX DRAWINGS LIGHT LEFT \definecharacter UnicodeLightUp {\uchar{37}{117}} %%BOX DRAWINGS LIGHT UP \definecharacter UnicodeLightRight {\uchar{37}{118}} %%BOX DRAWINGS LIGHT RIGHT \definecharacter UnicodeLightDown {\uchar{37}{119}} %%BOX DRAWINGS LIGHT DOWN \definecharacter UnicodeHeavyLeft {\uchar{37}{120}} %%BOX DRAWINGS HEAVY LEFT \definecharacter UnicodeHeavyUp {\uchar{37}{121}} %%BOX DRAWINGS HEAVY UP \definecharacter UnicodeHeavyRight {\uchar{37}{122}} %%BOX DRAWINGS HEAVY RIGHT \definecharacter UnicodeHeavyDown {\uchar{37}{123}} %%BOX DRAWINGS HEAVY DOWN \definecharacter UnicodeLightLeftAndHeavyRight {\uchar{37}{124}} %%BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT \definecharacter UnicodeLightUpAndHeavyDown {\uchar{37}{125}} %%BOX DRAWINGS LIGHT UP AND HEAVY DOWN \definecharacter UnicodeHeavyLeftAndLightRight {\uchar{37}{126}} %%BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT \definecharacter UnicodeHeavyUpAndLightDown {\uchar{37}{127}} %%BOX DRAWINGS HEAVY UP AND LIGHT DOWN \definecharacter UnicodeUpperHalfBlock {\uchar{37}{128}} %%UPPER HALF BLOCK \definecharacter UnicodeLowerOneEighthBlock {\uchar{37}{129}} %%LOWER ONE EIGHTH BLOCK \definecharacter UnicodeLowerOneQuarterBlock {\uchar{37}{130}} %%LOWER ONE QUARTER BLOCK \definecharacter UnicodeLowerThreeEighthsBlock {\uchar{37}{131}} %%LOWER THREE EIGHTHS BLOCK \definecharacter UnicodeLowerHalfBlock {\uchar{37}{132}} %%LOWER HALF BLOCK \definecharacter UnicodeLowerFiveEighthsBlock {\uchar{37}{133}} %%LOWER FIVE EIGHTHS BLOCK \definecharacter UnicodeLowerThreeQuartersBlock {\uchar{37}{134}} %%LOWER THREE QUARTERS BLOCK \definecharacter UnicodeLowerSevenEighthsBlock {\uchar{37}{135}} %%LOWER SEVEN EIGHTHS BLOCK \definecharacter UnicodeFullBlock {\uchar{37}{136}} %%FULL BLOCK \definecharacter UnicodeLeftSevenEighthsBlock {\uchar{37}{137}} %%LEFT SEVEN EIGHTHS BLOCK \definecharacter UnicodeLeftThreeQuartersBlock {\uchar{37}{138}} %%LEFT THREE QUARTERS BLOCK \definecharacter UnicodeLeftFiveEighthsBlock {\uchar{37}{139}} %%LEFT FIVE EIGHTHS BLOCK \definecharacter UnicodeLeftHalfBlock {\uchar{37}{140}} %%LEFT HALF BLOCK \definecharacter UnicodeLeftThreeEighthsBlock {\uchar{37}{141}} %%LEFT THREE EIGHTHS BLOCK \definecharacter UnicodeLeftOneQuarterBlock {\uchar{37}{142}} %%LEFT ONE QUARTER BLOCK \definecharacter UnicodeLeftOneEighthBlock {\uchar{37}{143}} %%LEFT ONE EIGHTH BLOCK \definecharacter UnicodeRightHalfBlock {\uchar{37}{144}} %%RIGHT HALF BLOCK \definecharacter UnicodeLightShade {\uchar{37}{145}} %%LIGHT SHADE \definecharacter UnicodeMediumShade {\uchar{37}{146}} %%MEDIUM SHADE \definecharacter UnicodeDarkShade {\uchar{37}{147}} %%DARK SHADE \definecharacter UnicodeUpperOneEighthBlock {\uchar{37}{148}} %%UPPER ONE EIGHTH BLOCK \definecharacter UnicodeRightOneEighthBlock {\uchar{37}{149}} %%RIGHT ONE EIGHTH BLOCK \definecharacter UnicodeQuadrantLowerLeft {\uchar{37}{150}} %%[Unassigned U+2596] \definecharacter UnicodeQuadrantLowerRight {\uchar{37}{151}} %%[Unassigned U+2597] \definecharacter UnicodeQuadrantUpperLeft {\uchar{37}{152}} %%[Unassigned U+2598] \definecharacter UnicodeQuadrantUpperLeftAndLowerLeftAndLowerRight {\uchar{37}{153}} %%[Unassigned U+2599] \definecharacter UnicodeQuadrantUpperLeftAndLowerRight {\uchar{37}{154}} %%[Unassigned U+259A] \definecharacter UnicodeQuadrantUpperLeftAndUpperRightandLowerLeft {\uchar{37}{155}} %%[Unassigned U+259B] \definecharacter UnicodeQuadrantUpperLeftAndUpperRightAndLowerRight {\uchar{37}{156}} %%[Unassigned U+259C] \definecharacter UnicodeQuadrantUpperRight {\uchar{37}{157}} %%[Unassigned U+259D] \definecharacter UnicodeQuadrantUpperRightAndLowerLeft {\uchar{37}{158}} %%[Unassigned U+259E] \definecharacter UnicodeQuadrantUpperRightAndLowerLeftAndLowerRight {\uchar{37}{159}} %%[Unassigned U+259F] \definecharacter UnicodeBlackSquare {\uchar{37}{160}} %%BLACK SQUARE \definecharacter UnicodeWhiteSquare {\uchar{37}{161}} %%WHITE SQUARE \definecharacter UnicodeWhiteSquareWithRoundedCorners {\uchar{37}{162}} %%WHITE SQUARE WITH ROUNDED CORNERS \definecharacter UnicodeWhiteSquareContainingBlackSmallSquare {\uchar{37}{163}} %%WHITE SQUARE CONTAINING BLACK SMALL SQUARE \definecharacter UnicodeSquareWithHorizontalFill {\uchar{37}{164}} %%SQUARE WITH HORIZONTAL FILL \definecharacter UnicodeSquareWithVerticalFill {\uchar{37}{165}} %%SQUARE WITH VERTICAL FILL \definecharacter UnicodeSquareWithOrthogonalCrosshatchFill {\uchar{37}{166}} %%SQUARE WITH ORTHOGONAL CROSSHATCH FILL \definecharacter UnicodeSquareWithUpperLeftToLowerRightFill {\uchar{37}{167}} %%SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL \definecharacter UnicodeSquareWithUpperRightToLowerLeftFill {\uchar{37}{168}} %%SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL \definecharacter UnicodeSquareWithDiagonalCrosshatchFill {\uchar{37}{169}} %%SQUARE WITH DIAGONAL CROSSHATCH FILL \definecharacter UnicodeBlackSmallSquare {\uchar{37}{170}} %%BLACK SMALL SQUARE \definecharacter UnicodeWhiteSmallSquare {\uchar{37}{171}} %%WHITE SMALL SQUARE \definecharacter UnicodeBlackRectangle {\uchar{37}{172}} %%BLACK RECTANGLE \definecharacter UnicodeWhiteRectangle {\uchar{37}{173}} %%WHITE RECTANGLE \definecharacter UnicodeBlackVerticalRectangle {\uchar{37}{174}} %%BLACK VERTICAL RECTANGLE \definecharacter UnicodeWhiteVerticalRectangle {\uchar{37}{175}} %%WHITE VERTICAL RECTANGLE \definecharacter UnicodeBlackParallelogram {\uchar{37}{176}} %%BLACK PARALLELOGRAM \definecharacter UnicodeWhiteParallelogram {\uchar{37}{177}} %%WHITE PARALLELOGRAM \definecharacter UnicodeBlackUpPointingTriangle {\uchar{37}{178}} %%BLACK UP-POINTING TRIANGLE \definecharacter UnicodeWhiteUpPointingTriangle {\uchar{37}{179}} %%WHITE UP-POINTING TRIANGLE \definecharacter UnicodeBlackUpPointingSmallTriangle {\uchar{37}{180}} %%BLACK UP-POINTING SMALL TRIANGLE \definecharacter UnicodeWhiteUpPointingSmallTriangle {\uchar{37}{181}} %%WHITE UP-POINTING SMALL TRIANGLE \definecharacter UnicodeBlackRightPointingTriangle {\uchar{37}{182}} %%BLACK RIGHT-POINTING TRIANGLE \definecharacter UnicodeWhiteRightPointingTriangle {\uchar{37}{183}} %%WHITE RIGHT-POINTING TRIANGLE \definecharacter UnicodeBlackRightPointingSmallTriangle {\uchar{37}{184}} %%BLACK RIGHT-POINTING SMALL TRIANGLE \definecharacter UnicodeWhiteRightPointingSmallTriangle {\uchar{37}{185}} %%WHITE RIGHT-POINTING SMALL TRIANGLE \definecharacter UnicodeBlackRightPointingPointer {\uchar{37}{186}} %%BLACK RIGHT-POINTING POINTER \definecharacter UnicodeWhiteRightPointingPointer {\uchar{37}{187}} %%WHITE RIGHT-POINTING POINTER \definecharacter UnicodeBlackDownPointingTriangle {\uchar{37}{188}} %%BLACK DOWN-POINTING TRIANGLE \definecharacter UnicodeWhiteDownPointingTriangle {\uchar{37}{189}} %%WHITE DOWN-POINTING TRIANGLE \definecharacter UnicodeBlackDownPointingSmallTriangle {\uchar{37}{190}} %%BLACK DOWN-POINTING SMALL TRIANGLE \definecharacter UnicodeWhiteDownPointingSmallTriangle {\uchar{37}{191}} %%WHITE DOWN-POINTING SMALL TRIANGLE \definecharacter UnicodeBlackLeftPointingTriangle {\uchar{37}{192}} %%BLACK LEFT-POINTING TRIANGLE \definecharacter UnicodeWhiteLeftPointingTriangle {\uchar{37}{193}} %%WHITE LEFT-POINTING TRIANGLE \definecharacter UnicodeBlackLeftPointingSmallTriangle {\uchar{37}{194}} %%BLACK LEFT-POINTING SMALL TRIANGLE \definecharacter UnicodeWhiteLeftPointingSmallTriangle {\uchar{37}{195}} %%WHITE LEFT-POINTING SMALL TRIANGLE \definecharacter UnicodeBlackLeftPointingPointer {\uchar{37}{196}} %%BLACK LEFT-POINTING POINTER \definecharacter UnicodeWhiteLeftPointingPointer {\uchar{37}{197}} %%WHITE LEFT-POINTING POINTER \definecharacter UnicodeBlackDiamond {\uchar{37}{198}} %%BLACK DIAMOND \definecharacter UnicodeWhiteDiamond {\uchar{37}{199}} %%WHITE DIAMOND \definecharacter UnicodeWhiteDiamondContainingBlackSmallDiamond {\uchar{37}{200}} %%WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND \definecharacter UnicodeFisheye {\uchar{37}{201}} %%FISHEYE \definecharacter UnicodeLozenge {\uchar{37}{202}} %%LOZENGE \definecharacter UnicodeWhiteCircle {\uchar{37}{203}} %%WHITE CIRCLE \definecharacter UnicodeDottedCircle {\uchar{37}{204}} %%DOTTED CIRCLE \definecharacter UnicodeCircleWithVerticalFill {\uchar{37}{205}} %%CIRCLE WITH VERTICAL FILL \definecharacter UnicodeBullseye {\uchar{37}{206}} %%BULLSEYE \definecharacter UnicodeBlackCircle {\uchar{37}{207}} %%BLACK CIRCLE \definecharacter UnicodeCircleWithLeftHalfBlack {\uchar{37}{208}} %%CIRCLE WITH LEFT HALF BLACK \definecharacter UnicodeCircleWithRightHalfBlack {\uchar{37}{209}} %%CIRCLE WITH RIGHT HALF BLACK \definecharacter UnicodeCircleWithLowerHalfBlack {\uchar{37}{210}} %%CIRCLE WITH LOWER HALF BLACK \definecharacter UnicodeCircleWithUpperHalfBlack {\uchar{37}{211}} %%CIRCLE WITH UPPER HALF BLACK \definecharacter UnicodeCircleWithUpperRightQuadrantBlack {\uchar{37}{212}} %%CIRCLE WITH UPPER RIGHT QUADRANT BLACK \definecharacter UnicodeCircleWithAllButUpperLeftQuadrantBlack {\uchar{37}{213}} %%CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK \definecharacter UnicodeLeftHalfBlackCircle {\uchar{37}{214}} %%LEFT HALF BLACK CIRCLE \definecharacter UnicodeRightHalfBlackCircle {\uchar{37}{215}} %%RIGHT HALF BLACK CIRCLE \definecharacter UnicodeInverseBullet {\uchar{37}{216}} %%INVERSE BULLET \definecharacter UnicodeInverseWhiteCircle {\uchar{37}{217}} %%INVERSE WHITE CIRCLE \definecharacter UnicodeUpperHalfInverseWhiteCircle {\uchar{37}{218}} %%UPPER HALF INVERSE WHITE CIRCLE \definecharacter UnicodeLowerHalfInverseWhiteCircle {\uchar{37}{219}} %%LOWER HALF INVERSE WHITE CIRCLE \definecharacter UnicodeUpperLeftQuadrantCircularArc {\uchar{37}{220}} %%UPPER LEFT QUADRANT CIRCULAR ARC \definecharacter UnicodeUpperRightQuadrantCircularArc {\uchar{37}{221}} %%UPPER RIGHT QUADRANT CIRCULAR ARC \definecharacter UnicodeLowerRightQuadrantCircularArc {\uchar{37}{222}} %%LOWER RIGHT QUADRANT CIRCULAR ARC \definecharacter UnicodeLowerLeftQuadrantCircularArc {\uchar{37}{223}} %%LOWER LEFT QUADRANT CIRCULAR ARC \definecharacter UnicodeUpperHalfCircle {\uchar{37}{224}} %%UPPER HALF CIRCLE \definecharacter UnicodeLowerHalfCircle {\uchar{37}{225}} %%LOWER HALF CIRCLE \definecharacter UnicodeBlackLowerRightTriangle {\uchar{37}{226}} %%BLACK LOWER RIGHT TRIANGLE \definecharacter UnicodeBlackLowerLeftTriangle {\uchar{37}{227}} %%BLACK LOWER LEFT TRIANGLE \definecharacter UnicodeBlackUpperLeftTriangle {\uchar{37}{228}} %%BLACK UPPER LEFT TRIANGLE \definecharacter UnicodeBlackUpperRightTriangle {\uchar{37}{229}} %%BLACK UPPER RIGHT TRIANGLE \definecharacter UnicodeWhiteBullet {\uchar{37}{230}} %%WHITE BULLET \definecharacter UnicodeSquareWithLeftHalfBlack {\uchar{37}{231}} %%SQUARE WITH LEFT HALF BLACK \definecharacter UnicodeSquareWithRightHalfBlack {\uchar{37}{232}} %%SQUARE WITH RIGHT HALF BLACK \definecharacter UnicodeSquareWithUpperLeftDiagonalHalfBlack {\uchar{37}{233}} %%SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK \definecharacter UnicodeSquareWithLowerRightDiagonalHalfBlack {\uchar{37}{234}} %%SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK \definecharacter UnicodeWhiteSquareWithVerticalBisectingLine {\uchar{37}{235}} %%WHITE SQUARE WITH VERTICAL BISECTING LINE \definecharacter UnicodeWhiteUpPointingTriangleWithDot {\uchar{37}{236}} %%WHITE UP-POINTING TRIANGLE WITH DOT \definecharacter UnicodeUpPointingTriangleWithLeftHalfBlack {\uchar{37}{237}} %%UP-POINTING TRIANGLE WITH LEFT HALF BLACK \definecharacter UnicodeUpPointingTriangleWithRightHalfBlack {\uchar{37}{238}} %%UP-POINTING TRIANGLE WITH RIGHT HALF BLACK \definecharacter UnicodeLargeCircle {\uchar{37}{239}} %%LARGE CIRCLE \definecharacter UnicodeWhiteSquareWithUpperLeftQuadrant {\uchar{37}{240}} %%WHITE SQUARE WITH UPPER LEFT QUADRANT \definecharacter UnicodeWhiteSquareWithLowerLeftQuadrant {\uchar{37}{241}} %%WHITE SQUARE WITH LOWER LEFT QUADRANT \definecharacter UnicodeWhiteSquareWithLowerRightQuadrant {\uchar{37}{242}} %%WHITE SQUARE WITH LOWER RIGHT QUADRANT \definecharacter UnicodeWhiteSquareWithUpperRightQuadrant {\uchar{37}{243}} %%WHITE SQUARE WITH UPPER RIGHT QUADRANT \definecharacter UnicodeWhiteCircleWithUpperLeftQuadrant {\uchar{37}{244}} %%WHITE CIRCLE WITH UPPER LEFT QUADRANT \definecharacter UnicodeWhiteCircleWithLowerLeftQuadrant {\uchar{37}{245}} %%WHITE CIRCLE WITH LOWER LEFT QUADRANT \definecharacter UnicodeWhiteCircleWithLowerRightQuadrant {\uchar{37}{246}} %%WHITE CIRCLE WITH LOWER RIGHT QUADRANT \definecharacter UnicodeWhiteCircleWithUpperRightQuadrant {\uchar{37}{247}} %%WHITE CIRCLE WITH UPPER RIGHT QUADRANT \definecharacter UnicodeUpperLeftTriangle {\uchar{37}{248}} %%[Unassigned U+25F8] \definecharacter UnicodeUpperRightTriangle {\uchar{37}{249}} %%[Unassigned U+25F9] \definecharacter UnicodeLowerLeftTriangle {\uchar{37}{250}} %%[Unassigned U+25FA] \definecharacter UnicodeWhiteMediumSquare {\uchar{37}{251}} %%[Unassigned U+25FB] \definecharacter UnicodeBlackMediumSquare {\uchar{37}{252}} %%[Unassigned U+25FC] \definecharacter UnicodeWhiteMediumSmallSquare {\uchar{37}{253}} %%[Unassigned U+25FD] \definecharacter UnicodeBlackMediumSmallSquare {\uchar{37}{254}} %%[Unassigned U+25FE] \definecharacter UnicodeLowerRightTriangle {\uchar{37}{255}} %%[Unassigned U+25FF] \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-tex.lua0000644000175000017500000000256411571377075024143 0ustar norbertnorbertif not modules then modules = { } end modules ['node-tex'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format builders = builders or { } builders.kernel = builders.kernel or { } local kernel = builders.kernel local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming local hyphenate, ligaturing, kerning = lang.hyphenate, node.ligaturing, node.kerning function kernel.hyphenation(head) -- starttiming(kernel) local done = hyphenate(head) -- stoptiming(kernel) return head, done end function kernel.ligaturing(head) -- starttiming(kernel) local head, tail, done = ligaturing(head) -- todo: check what is returned -- stoptiming(kernel) return head, done end function kernel.kerning(head) -- starttiming(kernel) local head, tail, done = kerning(head) -- todo: check what is returned -- stoptiming(kernel) return head, done end callbacks.register('hyphenate' , false, "normal hyphenation routine, called elsewhere") callbacks.register('ligaturing', false, "normal ligaturing routine, called elsewhere") callbacks.register('kerning' , false, "normal kerning routine, called elsewhere") context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fig-01.mkii0000644000175000017500000003030311754241457024005 0ustar norbertnorbert%D \module %D [ file=x-fig-01, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \readfile {x-res-01} \donothing \donothing \endinput %D See \type {x-fig-00.tex} for more information on how to use %D and generate figure databases. This file loads the file %D named \type {\jobfilename} (\TEXEXEC\ will set this %D variable). You can apply this style to a database by %D saying: %D %D \starttyping %D texexec --pdf --use=fig-make yourfile.xml %D \stoptyping %D %D The following modes are supported: %D %D \starttabulate[|lT|l|] %D \NC letter \NC map the preview on letter size \NC \NR %D \NC compact \NC use an alternative presentation \NC \NR %D \stoptabulate %D %D The resulting file has the following characteristics: %D %D \startitemize[packed] %D \item the document is split into three sections: first each %D figure is shown at its own page, then an overview of %D figures is shown with some data alongside, and %D finally an index and table of contents shows up %D \item there is no title page, which means that one can %D access a figure by page number without offset %D \item the document is opened at the first overview page, %D that is, when the viewer supports it %D \item the graphic is shown 3~times: on a page of its own, %D scaled to a fixed dimension, and relative to a4 or %D letter paper size %D \item the labels can be accessed in an index and list at %D the end of the document %D \stopitemize %D %D We use named destinations, which means that one can %D access a figure by name from an external application. \usemodule[fig-00] \setupoutput[pdftex] \overcomePDFspacefalse \doifnothing {\jobfilename} {\end} \doiffileelse {\jobfilename.xml} {} {\end} \definesymbol [attachment] [{\bf\color[darkred]{\jobname.xml}}] \setupattachments [symbol=attachment] \useattachment [datafile] [\jobname.xml] \def\StartDescription {\bgroup \defineXMLpush[organization] \defineXMLpush[project] \defineXMLpush[product] \defineXMLpush[comment]} \def\StopDescription {\subject {Figure collection} \starttabulate[|lBe|p|] \doifXMLdataelse{organization} {\NC organization \NC \XMLpop{organization} \NC \NR}{} \doifXMLdataelse{project} {\NC project \NC \XMLpop{project} \NC \NR}{} \doifXMLdataelse{product} {\NC product \NC \XMLpop{product} \NC \NR}{} \doifXMLdataelse{comment} {\NC comment \NC \XMLpop{comment} \NC \NR}{} \NC specification \NC \attachment[datafile] \NC \NR \stoptabulate \blank[2*big] \egroup} \def\StartFigureA {\bgroup \defineXMLpush[file] \XMLassign{file}{buffer} \defineXMLpush[dummy] \defineXMLpush[label] \defineXMLpush[copyright] \defineXMLpush[comment] \defineXMLpush[status]} \defineoverlay[page][\overlaybutton{Description}] \startbuffer \framed [width=\XMLpar{dummy}{width}{12cm}, height=\XMLpar{dummy}{height}{8cm}, background=color, backgroundcolor=gray, foregroundcolor=darkred, frame=off] {\bf \XMLpop{dummy}} \stopbuffer \def\StopFigureA {\doglobal\increment\CurrentPage \setupbackgrounds[page][background=page] \doifelsenothing{\XMLpop{label}} {\expanded{\definereference[Description][about: \XMLpop{file}]}% \pagereference[\XMLpop{file}]} {\expanded{\definereference[Description][about: \XMLpop{label}]}% \pagereference[\XMLpop{label}]} \pagefigure[\XMLpop{file}] \setupbackgrounds[page][background=] \egroup} \def\StartFigureB {\StartFigureA} \defineregister [figureindex] [figureindices] \setupregister [figureindex] [ownnumber=yes, criterium=text, interaction=text, indicator=no] \definelist [figurelist] \setuplist [figurelist] [criterium=text, pagenumber=no, width=2em, interaction=all] \setupcolors [state=start] \setuptolerance [verytolerant] % Ugly: \startnotmode[previewpage-letter,previewpage-S6] \enablemode[previewpage-A4] \stopnotmode \startmode[letter] % downward compatible \enablemode[previewpage-letter] \stopmode %startbuffer[paper] \startsetups[paper] \startmode[previewpage-A4] \framed [width=210mm,height=297mm,offset=overlay,frame=off, background=color,backgroundcolor=white] {\externalfigure[\XMLpop{file}][reset=yes]} \stopmode \startmode[previewpage-letter] \framed [width=8.5in,height=11in,offset=overlay,frame=off, background=color,backgroundcolor=white] {\externalfigure[\XMLpop{file}][reset=yes]} \stopmode \startmode[previewpage-S6] \framed [width=600pt,height=450pt,offset=overlay,frame=off, background=color,backgroundcolor=white] {\externalfigure[\XMLpop{file}][reset=yes]} \stopmode \stopsetups %stopbuffer \setupbuttons [offset=10pt, width=broad, strut=no, rulethickness=1pt, framecolor=darkred] \def\StopFigureB {\par \doglobal\increment\CurrentPage \doifelsenothing{\XMLpop{label}} {\expanded{\definereference[Figure][\XMLpop{file}]}% \expanded{\definereference[GridPg][grid:\XMLpop{file}]}} {\expanded{\definereference[Figure][\XMLpop{label}]}% \expanded{\definereference[GridPg][grid:\XMLpop{label}]}}% \button % content in setup {\hbox to \hsize {\forgetall \dontcomplain \doifelsenothing{\XMLpop{label}} {\pagereference[about: \XMLpop{file}]} {\pagereference[about: \XMLpop{label}]}% % moved here, because descriptions may be absent \ifnum\CurrentPage=1 \pagereference[begin]\fi % \expanded{\writetolist[figurelist]{\CurrentPage}{\XMLpop{label}}}% \expanded{\figureindex{\CurrentPage}{\XMLpop{label}}}% \startnotmode[compact]% \vbox to 100pt {\hsize30pt \vskip5pt \hbox to \hsize{\hss\strut\bf\CurrentPage\hss}% \vfill}% \advance\hsize by -30pt \stopnotmode \startmode[compact]% \advance\hsize by -10pt \hskip10pt \stopmode \button % \framed [width=150pt,height=100pt,offset=10pt,frame=off, background=color,backgroundcolor=white,color=] {\externalfigure [\XMLpop{file}] [maxheight=80pt,frame=off,maxwidth=130pt,factor=max]}% [GridPg]% \let\FigWid\figurenaturalwidth \let\FigHei\figurenaturalheight \advance\hsize by -150pt \hskip10pt \advance\hsize by -10pt \vbox to 100pt {\hsize40pt %\externalfigure % [paper] % [type=buffer,frame=on, % framecolor=darkred,rulethickness=.5pt, % width=40pt,object=no] \framed [offset=overlay, framecolor=darkred, rulethickness=.5pt] {\scale[width=40pt]{\setups[paper]}}% {\disableXML\getbuffer[paper]}}% \startmode[compact]% \vfill \hbox to \hsize{\hss\strut\bf\CurrentPage\hss}% \stopmode \vfill}% \advance\hsize by -40pt \hskip10pt \advance\hsize by -10pt \vbox to 100pt {\blank[disable] \starttabulate[|Bel|p|] \NC file \NC \XMLpop{file} \NC \NR \doifXMLdata{label} {\NC label \NC \XMLpop{label} \NC \NR} \NC w$\times$h \NC \FigWid$\times$\FigHei \NC \NR \doifXMLdata{copyright} {\NC copyright \NC \XMLpop{copyright} \NC \NR} \doifXMLdata{status} {\doifelse{\XMLpop{status}}{obsolete} {\NC status \NC \bf\darkred\XMLpop{status} \NC \NR} {\NC status \NC \XMLpop{status} \NC \NR}} \doifXMLdata{comment} {\NC comment \NC \XMLpop{comment} \NC \NR} \stoptabulate \vfill}}}% [Figure] \vskip10pt \egroup} \def\StartFigureC {\StartFigureA} \def\StopFigureC {\doglobal\increment\NumberOfFigures \egroup} \setuplayout [topspace=15pt,backspace=15pt, header=0pt,footer=0pt,bottom=20pt,bottomdistance=10pt, width=middle,height=fit] \setupbackgrounds [page] [background=, backgroundcolor=gray] \setupinteractionscreen [width=max, height=max] \setupcolors [state=start] \setupinteraction [style=, color=, contrastcolor=, state=start] \setuphead [section] [style=bfb] \setupbodyfont [pos] \setupinteractionmenu [bottom] [left=\hfill, middle=\hskip10pt, frame=off, style=bold, background=color, backgroundcolor=darkred, foregroundcolor=white] \startinteractionmenu[bottom] \but [begin] begin \\ \but [index] index \\ \but [list] list \\ \but [CloseDocument] close \\ \but [PreviousJump] go back \\ \stopinteractionmenu \setupinteraction [openaction=begin] \defineXMLenvironment [figurelibrary] \StartLibrary \StopLibrary \starttext \def\StartLibrary{\mainlanguage[\XMLpar{figurelibrary}{language}{en}]} \def\StopLibrary {} \defineXMLignore [description] \defineXMLenvironment [figure] \StartFigureC \StopFigureC \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfilename.xml} \increment\NumberOfFigures \defineXMLignore [description] \defineXMLenvironment [figure] \StartFigureA \StopFigureA \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfilename.xml} \setuppapersize [S6][S6] \setupbackgrounds [page] [background=color] \setupinteraction [menu=on] \defineXMLenvironment [description] \StartDescription \StopDescription \defineXMLenvironment [figure] \StartFigureB \StopFigureB \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfilename.xml} \page \subject [list] {List of figures} \placelist[figurelist] \page \subject [index] {Index of figures} \startcolumns \placeregister[figureindex] \stopcolumns \doifmodeelse{clipgrid-distance,clipgrid-steps}{\page}{\stoptext} \startuniqueMPgraphic{clipgrid}{dx,dy,nx,ny,type} numeric gdx, gdy, lbx, lby ; if \MPvar{type}=1 : gdx := \MPvar{dy} ; gdy := \MPvar{dx} ; else : gdx := OverlayWidth /\MPvar{nx} ; gdy := OverlayHeight/\MPvar{ny} ; fi ; lbx := gdx ; lby := gdy ; defaultfont := "\truefontname{Mono}" ; defaultscale := .5 ; numeric pen ; pen := .25pt ; def MyGrid text t = draw vlingrid (0,OverlayWidth ,gdy,OverlayWidth ,OverlayHeight) t ; draw hlingrid (0,OverlayHeight,gdx,OverlayHeight,OverlayWidth ) t ; enddef ; pickup pencircle scaled pen ; MyGrid withcolor white ; MyGrid dashed evenly scaled pen ; draw OverlayBox withcolor white ; draw OverlayBox dashed evenly scaled pen ; draw vlinlabel.bot(0,eps+OverlayWidth /lby,2,OverlayWidth ) ; draw hlinlabel.lft(0,eps+OverlayHeight/lbx,2,OverlayHeight) ; setbounds currentpicture to OverlayBox enlarged (2*EmWidth) ; \stopuniqueMPgraphic \presetMPvariable[clipgrid][dx=10pt] \presetMPvariable[clipgrid][dy=10pt] \presetMPvariable[clipgrid][nx=10] \presetMPvariable[clipgrid][ny=10] \startmode[clipgrid-distance] \defineoverlay[grid][\uniqueMPgraphic{clipgrid}{type=1}] \stopmode \startmode[clipgrid-steps] \defineoverlay[grid][\uniqueMPgraphic{clipgrid}{type=2}] \stopmode \setupexternalfigures [background={color,foreground,grid}, backgroundcolor=white] \def\StartFigureD {\StartFigureA} \def\StopFigureD {\doglobal\increment\CurrentPage \setupbackgrounds[page][background=page] \startpagefigure[\XMLpop{file}][offset=20pt]% \doifelsenothing{\XMLpop{label}} {\expanded{\definereference[Description][about: \XMLpop{file}]}% \pagereference[grid:\XMLpop{file}]} {\expanded{\definereference[Description][about: \XMLpop{label}]}% \pagereference[grid:\XMLpop{label}]} \stoppagefigure %\pagefigure[\XMLpop{file}][offset=20pt] \setupbackgrounds[page][background=] \egroup} \defineXMLignore [description] \defineXMLenvironment [figure] \StartFigureD \StopFigureD \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfilename.xml} \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-aux.lua0000644000175000017500000000434312130411274024170 0ustar norbertnorbertif not modules then modules = { } end modules ['syst-aux'] = { version = 1.001, comment = "companion to syst-aux.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- slower than lpeg: -- -- utfmatch(str,"(.?)(.*)$") -- utf.sub(str,1,1) local commands, context = commands, context local settings_to_array = utilities.parsers.settings_to_array local format = string.format local utfsub = utf.sub local P, C, Carg, lpegmatch, utf8char = lpeg.P, lpeg.C, lpeg.Carg, lpeg.match, lpeg.patterns.utf8char local setvalue = context.setvalue local pattern = C(utf8char^-1) * C(P(1)^0) function commands.getfirstcharacter(str) local first, rest = lpegmatch(pattern,str) setvalue("firstcharacter",first) setvalue("remainingcharacters",rest) end local pattern = C(utf8char^-1) function commands.doiffirstcharelse(chr,str) commands.doifelse(lpegmatch(pattern,str) == chr) end function commands.getsubstring(str,first,last) context(utfsub(str,tonumber(first),tonumber(last))) end -- function commands.addtocommalist(list,item) -- if list == "" then -- context(item) -- else -- context("%s,%s",list,item) -- using tex.print is some 10% faster -- end -- end -- -- function commands.removefromcommalist(list,item) -- if list == "" then -- context(item) -- else -- -- okay, using a proper lpeg is probably faster -- -- we could also check for #l = 1 -- local l = settings_to_array(list) -- local t, n = { } -- for i=1,#l do -- if l[i] ~= item then -- n = n + 1 -- t[n] = item -- end -- end -- if n == 0 then -- context(item) -- else -- context(concat(list,",")) -- end -- end -- end local pattern = (C((1-P("%"))^1) * Carg(1)) /function(n,d) return format("%.0fsp",d * tonumber(n)/100) end * P("%") * P(-1) -- commands.percentageof("10%",65536*10) function commands.percentageof(str,dim) context(lpegmatch(pattern,str,1,dim) or str) end -- \gdef\setpercentdimen#1#2% -- {#1=\ctxcommand{percentageof("#2",\number#1)}\relax} context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ctx.mkii0000644000175000017500000000433311754241457024276 0ustar norbertnorbert%D \module %D [ file=lang-ctx, %D version=2005.02.12, %D title=\CONTEXT\ Language Macros, %D subtitle=Generic Patterns, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Generic Patterns} \unprotect %D The \CONTEXT\ specific patterns are more generic and %D are more or less encoding independent. They are generated %D from the ones shipped with distributions using: %D %D \starttyping %D ctxtools --pattern --all %D \stoptyping %D In order to get 8 bit characters hyphenated, we need to load %D patterns under the right circumstances. In some countries, more %D than one font encoding is in use. I can add more defaults here %D if users let me know what encoding they use. % \installlanguage [\s!nl] [\s!mapping={texnansi,ec},\s!encoding={texnansi,ec}] % \installlanguage [\s!fr] [\s!mapping={texnansi,ec},\s!encoding={texnansi,ec}] % \installlanguage [\s!de] [\s!mapping={texnansi,ec},\s!encoding={texnansi,ec}] % \installlanguage [\s!it] [\s!mapping={texnansi,ec},\s!encoding={texnansi,ec}] % \installlanguage [\s!pt] [\s!mapping={texnansi,ec},\s!encoding={texnansi,ec}] % \installlanguage [\s!hr] [\s!mapping=ec,\s!encoding=ec] % no il2, misses cacute characters % \installlanguage [\s!pl] [\s!mapping={pl0,ec,qx},\s!encoding={pl0,ec,qx}] % pl0 may go % \installlanguage [\s!cs] [\s!mapping={il2,ec},\s!encoding={il2,ec}] % il2 may go % \installlanguage [\s!sk] [\s!mapping={il2,ec},\s!encoding={il2,ec}] % il2 may go % \installlanguage [\s!sl] [\s!mapping=ec,\s!encoding=ec] % il2 has gone % \installlanguage [\s!vi] [\s!mapping=t5,\s!encoding=t5] % \installlanguage [\s!ru] [\s!mapping=t2a,\s!encoding=t2a] % beware, don't use \setuplanguage here % \installlanguage[\s!gb][\s!lefthyphenmin=3,\s!righthyphenmin=3] % patterns can only handle this % \installlanguage[\s!us][\s!lefthyphenmin=2,\s!righthyphenmin=3] % patterns can only handle this % greek % \installlanguage[\s!agr][\s!mapping=\s!agr,\s!encoding=\s!agr] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-imp-exa.mkiv0000644000175000017500000002774611754241457025072 0ustar norbertnorbert%D \module %D [ file=java-exa, %D version=2002.??.??, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Example Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % XFDF versus HTML % localhost versus remote versus set % filename | filename-nr => name % fakename | fakename-nr => file upload, unless localhost % % we erase the list because otherwise we end up in browser remembering % problems; also, it is not possible to set upload fields 'manually' \startJSpreamble request_1 used now var example_method = "HTML" ; var example_host = "" ; var example_port = "" ; var example_url = "" ; var example_file = "" ; var example_log = true ; % false function stripped_exa_value( name ) { f = this.getField(name) ; if (f) { str = f.value ; if (str.indexOf(name+'-')==0) { str = str.substr(name.length+1) ; } return str ; } else { return "" ; } } function identify_example_url ( ) { if (example_log) { console.clear ; console.println("base url: "+this.baseURL) ; console.println("this url: "+this.URL) ; } if (this.baseURL != "") { example_url = this.baseURL ; } else { if (this.URL != "") { example_url = this.URL } } if (example_url.indexOf("file://")>=0) { example_url = "" ; } str = stripped_exa_value("examplehost") ; if (str != "auto") { example_host = str ; if (str == "localhost") { example_port = "8061" } } str = stripped_exa_value("exampleport") ; if (str != "auto") { example_port = str ; } if (example_log) { console.println("example_url: "+example_url) ; console.println("example_host: "+example_host) ; console.println("example_port: "+example_port) ; } } function check_example_url ( url ) { if (url.indexOf("file://")>=0) { url = "http://localhost:8061" ; console.println("file url replaced by: "+url) ; } else { if (url.indexOf("://")<0) { url = "http://" + url ; } if (example_log) { console.println("url before check: "+url) ; } % url = url.replace(/(http:\\\/\\\/.+)(\\\/.*$)/, "$1") ; url = url.replace(/(https*:\\\/\\\/.+?)(\\\/.*$)/, "$1/exarequest") ; if (example_log) { console.println("url after check: "+url) ; } } return url ; } function set_example_xfdf ( method ) { example_method = method ; } function set_example_file ( file ) { example_method = file ; } function set_example_host ( host ) { example_host = host ; } function set_example_port ( port ) { example_host = host ; } function do_erase_example_file(tag) { f = this.getField(tag) ; if (f) { f.value = "" ; } } function do_erase_example_list(tag) { for (i=1;i<=100;i++) { f = this.getField(tag+"-"+i) ; if (f) { f.value = "" ; } else { return } } } function do_submit_example_url ( url ) { if ((example_method == "XFDF" ) || (url.indexOf("localhost")>=0)) { do_erase_example_file("fakename") ; do_erase_example_list("fakename") ; } url = check_example_url(url) ; if (example_log) { console.println("submitting form to "+url+" using method "+example_method) ; } if (example_file != "") { url = url + "/" + example_file ; } % we need the bFDF for acrobat 5 this.submitForm({cURL : url, bFDF : false, cSubmitAs : example_method}) ; } function submit_example_form ( ) { identify_example_url() ; if (example_host != "") { if (example_port != "") { do_submit_example_url(example_host+":"+example_port) ; } else { do_submit_example_url(example_host) ; } } else { if (example_url != "") { do_submit_example_url(example_url) ; } else { if (example_port != "") { do_submit_example_url("localhost"+":"+example_port) ; } else { do_submit_example_url("localhost:8061") ; % local exampler } } } resetfilename () ; } function submit_form ( host, port) { set_example_host(host) ; set_example_post(post) ; submit_example_form ; } \stopJSpreamble \startJSpreamble request_2 used now var exa_command = "" ; var exa_option = "" ; var exa_filename = "" ; var exa_filelist = "" ; var exa_registered = "" ; function set_request (command,option) { exa_command = command ; if (exa_command == "") { exa_option = option ; } else { if (option == "") { exa_option = "" ; } else { if (option.indexOf("--")<0) { exa_option = "--action=" + option ; } else { exa_option = option ; } } } } function assemble_request ( ) { v = this.getField('filename') ; if (v) { exa_filename = v.value ; } v = this.getField('filelist') ; if (v) { exa_filelist = v.value ; } % exa_filename = exa_filename.replace(/\\\\/g,'/') ; % exa_filelist = exa_filelist.replace(/\\\\/g,'/') ; str = "\\n" ; str = str+"" ; if (exa_filelist == "") { exa_filelist = exa_registered ; } else { if (exa_registered != "") { exa_filelist = exa_filelist + "\\n" + exa_registered ; } } if (exa_command != "") { str = str+""+exa_command+"" ; } if (exa_option != "") { str = str+""+exa_option+"" ; } if (exa_filename != "") { str = str+""+exa_filename+"" ; } var fls = "" ; if (exa_filelist != "") { % old method, soon obsolete lst = exa_filelist.split(/\\s/) ; for (i=0;i"+lst[i]+"" ; } } else { if (exa_multiple) { for (i=1;i<=100;i++) { % console.println("file field "+i) ; f = this.getField("filename-"+ i) ; % if (f) { if (f.value != "") { % if (g) { if (g.value == "") { % fls = fls+""+f.value+"" ; % } else { % fls = fls+""+f.value+"" ; % } } else { % fls = fls+""+f.value+"" ; % } % } } if (f) { if (f.value != "") { fls = fls + "" ; } else { % console.println("b") ; fls = fls + " label='" + g.value + "'>" ; } } else { % console.println("c") ; fls = fls + ">" ; } fls = fls + f.value + "" ; } } } } } if (fls != "") { str = str + "" + fls + "" ; } str = str + "" ; v = this.getField('exa:request') ; if (v) { v.value = str ; } } \stopJSpreamble \startJSpreamble request_3 used now var exa_multiple = false ; function setfilename ( suffixes ) { if (event.targetName) { var name = event.targetName ; var fake = name.replace(/filename/,"fakename") ; } else { var name = 'filename' ; var fake = 'fakename' ; } f = this.getField(fake) ; if (f) { f.browseForFileToSubmit() ; if ((suffixes != "") && (f.value != "")) { % s = suffixes.replace(/,/g,"|") ; r = new RegExp() ; s = "\\\\.(" + s + ")$" ; r.compile(s, "i") ; if (f.value.search(r)<=0) { f.value = "" ; app.alert('This filetype is not permitted.') ; % % lst = suffixes.split(/,/) ; % ok = false ; % for (i=0;i=0) { % f.value = "" ; % } % } } this.dirty = false ; } function addfilename () { if (exa_multiple) { h = this.getField("filelist") ; g = this.getField("filename") ; if ((g) && (h)) { str = g.value ; if (h.value == "") { h.value = str ; } else { h.value = h.value + "\\n" + str ; } g.value = "" ; this.value = "" ; } } this.dirty = false ; } % this only works with client that assembles request function registerfilename (str) { if (str!="") { h = this.getField("filelist") ; if (h) { if (h.value != "") { h.value = h.value + "\\n" ; } h.value = h.value + str ; } else { if (exa_registered != "") { exa_registered = exa_registered + "\\n" ; } exa_registered = exa_registered + str ; } } console.show ; console.println('registered files') ; console.println("file: "+str) ; console.println("list: "+exa_registered) ; this.dirty = false ; } function checkfilename () { } function getfilename ( suffixes ) { setfilename(suffixes) ; checkfilename() ; addfilename() ; } function resetfilename () { do_erase_example_file("fakename") ; do_erase_example_file("filename") ; do_erase_example_file("filelist") ; do_erase_example_list("filename") ; do_erase_example_list("fakename") ; } \stopJSpreamble \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-par.lua0000644000175000017500000001440712130411274024150 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-par'] = { version = 1.001, comment = "companion to typo-par.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- A playground for experiments. local utfbyte = utf.byte local utfchar = utf.char local trace_paragraphs = false trackers.register("typesetters.paragraphs", function(v) trace_paragraphs = v end) local trace_dropper = false trackers.register("typesetters.paragraphs.dropper",function(v) trace_dropper = v end) local report_paragraphs = logs.reporter("nodes","paragraphs") local report_dropper = logs.reporter("nodes","dropped") typesetters.paragraphs = typesetters.paragraphs or { } local paragraphs = typesetters.paragraphs local nodecodes = nodes.nodecodes local whatsitcodes = nodes.whatsitcodes local tasks = nodes.tasks local variables = interfaces.variables local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local kern_node = nodecodes.kern local whatsit_code = nodecodes.whatsit local localpar_code = whatsitcodes.localpar local a_paragraph = attributes.private("paragraphspecial") local a_color = attributes.private('color') local a_transparency = attributes.private('transparency') local a_colorspace = attributes.private('colormodel') local dropper = { enabled = false, -- font = 0, -- n = 0, -- distance = 0, -- hoffset = 0, -- voffset = 0, } local droppers = { } typesetters.paragraphs.droppers = droppers function droppers.set(specification) dropper = specification or { } end function droppers.freeze() if dropper.enabled then dropper.font = font.current() end end -- dropped caps experiment (will be done properly when luatex -- stores the state in the local par node) .. btw, search still -- works with dropped caps, as does an export -- we need a 'par' attribute and in fact for dropped caps we don't need -- need an attribute ... dropit will become s state counter (or end up -- in the localpar user data -- for the moment, each paragraph gets a number as id (attribute) ..problem -- with nesting .. or anyhow, needed for tagging anyway -- todo: prevent linebreak .. but normally a dropper ends up atthe top of -- a page so this has a low priority local function process(namespace,attribute,head) local done = false if head.id == whatsit_code and head.subtype == localpar_code then -- begin of par local a = head[attribute] if a and a > 0 then if dropper.enabled then dropper.enabled = false -- dangerous for e.g. nested || in tufte local first = head.next if first and first.id == hlist_code then -- parbox .. needs to be set at 0 first = first.next end if first and first.id == glyph_code then -- if texattribute[a_paragraph] >= 0 then -- texattribute[a_paragraph] = unsetvalue -- end local char = first.char local prev = first.prev local next = first.next -- if prev.id == hlist_code then -- -- set the width to 0 -- end if next and next.id == kern_node then next.kern = 0 end first.font = dropper.font or first.font -- can be a helper local ma = dropper.ma or 0 local ca = dropper.ca local ta = dropper.ta if ca and ca > 0 then first[a_colorspace] = ma == 0 and 1 or ma first[a_color] = ca end if ta and ta > 0 then first[a_transparency] = ta end -- local width = first.width local height = first.height local depth = first.depth local distance = dropper.distance or 0 local voffset = dropper.voffset or 0 local hoffset = dropper.hoffset or 0 first.xoffset = - width - hoffset - distance first.yoffset = - height - voffset if true then -- needed till we can store parindent with localpar first.prev = nil first.next = nil local h = node.hpack(first) h.width = 0 h.height = 0 h.depth = 0 prev.next = h next.prev = h h.next = next h.prev = prev end if dropper.location == variables.margin then -- okay else local lines = tonumber(dropper.n) or 0 if lines == 0 then -- safeguard, not too precise lines = math.ceil((height+voffset) / tex.baselineskip.width) end tex.hangafter = - lines tex.hangindent = width + distance end done = true end end end end return head, done end local enabled = false function paragraphs.set(n) if n == variables.reset or not tonumber(n) or n == 0 then texattribute[a_paragraph] = unsetvalue else if not enabled then tasks.enableaction("processors","typesetters.paragraphs.handler") if trace_paragraphs then report_paragraphs("enabling paragraphs") end enabled = true end texattribute[a_paragraph] = n end end paragraphs.attribute = a_paragraph paragraphs.handler = nodes.installattributehandler { name = "paragraphs", namespace = paragraphs, processor = process, } context-2013.05.28.20130704/texmf-dist/tex/context/base/node-tsk.lua0000644000175000017500000002745012130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['node-tsk'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This might move to task-* and become less code as in sequencers -- we already have dirty flags as well. On the other hand, nodes are -- rather specialized and here we focus on node related tasks. local format = string.format local trace_tasks = false trackers.register("tasks.creation", function(v) trace_tasks = v end) local report_tasks = logs.reporter("tasks") local allocate = utilities.storage.allocate local nodes = nodes nodes.tasks = nodes.tasks or { } local tasks = nodes.tasks local tasksdata = { } -- no longer public local sequencers = utilities.sequencers local compile = sequencers.compile local nodeprocessor = sequencers.nodeprocessor local frozengroups = "no" function tasks.freeze(kind) frozengroups = kind or "tolerant" -- todo: hook into jobname end function tasks.new(specification) -- was: name,arguments,list local name = specification.name local arguments = specification.arguments or 0 local sequence = specification.sequence if name and sequence then local tasklist = sequencers.new { -- we can move more to the sequencer now .. todo } tasksdata[name] = { list = tasklist, runner = false, arguments = arguments, -- sequence = sequence, frozen = { }, processor = specification.processor or nodeprocessor } for l=1,#sequence do sequencers.appendgroup(tasklist,sequence[l]) end end end local function valid(name) local data = tasksdata[name] if not data then report_tasks("unknown task %a",name) else return data end end local function validgroup(name,group,what) local data = tasksdata[name] if not data then report_tasks("unknown task %a",name) else local frozen = data.frozen[group] if frozen then if frozengroup == "no" then -- default elseif frozengroup == "strict" then report_tasks("warning: group %a of task %a is frozen, %a applied but not supported",group,name,what) return else -- if frozengroup == "tolerant" then report_tasks("warning: group %a of task %a is frozen, %a ignored",group,name,what) end end return data end end function tasks.freezegroup(name,group) local data = valid(name) if data then data.frozen[group] = true end end function tasks.restart(name) local data = valid(name) if data then data.runner = false end end function tasks.enableaction(name,action) local data = valid(name) if data then sequencers.enableaction(data.list,action) data.runner = false end end function tasks.disableaction(name,action) local data = valid(name) if data then sequencers.disableaction(data.list,action) data.runner = false end end function tasks.enablegroup(name,group) local data = validgroup(name,"enable group") if data then sequencers.enablegroup(data.list,group) data.runner = false end end function tasks.disablegroup(name,group) local data = validgroup(name,"disable group") if data then sequencers.disablegroup(data.list,group) data.runner = false end end function tasks.appendaction(name,group,action,where,kind) local data = validgroup(name,"append action") if data then sequencers.appendaction(data.list,group,action,where,kind) data.runner = false end end function tasks.prependaction(name,group,action,where,kind) local data = validgroup(name,"prepend action") if data then sequencers.prependaction(data.list,group,action,where,kind) data.runner = false end end function tasks.removeaction(name,group,action) local data = validgroup(name,"remove action") if data then sequencers.removeaction(data.list,group,action) data.runner = false end end function tasks.showactions(name,group,action,where,kind) local data = valid(name) if data then report_tasks("task %a, list:\n%s",name,nodeprocessor(data.list)) end end -- Optimizing for the number of arguments makes sense, but getting rid of -- the nested call (no problem but then we also need to register the -- callback with this mechanism so that it gets updated) does not save -- much time (24K calls on mk.tex). local created, total = 0, 0 statistics.register("node list callback tasks", function() if total > 0 then return format("%s unique task lists, %s instances (re)created, %s calls",table.count(tasksdata),created,total) else return nil end end) function tasks.actions(name) -- we optimize for the number or arguments (no ...) local data = tasksdata[name] if data then local n = data.arguments or 0 if n == 0 then return function(head) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a",name) end runner = compile(data.list,data.processor,0) data.runner = runner end return runner(head) end elseif n == 1 then return function(head,one) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a with %s extra arguments",name,1) end runner = compile(data.list,data.processor,1) data.runner = runner end return runner(head,one) end elseif n == 2 then return function(head,one,two) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a with %s extra arguments",name,2) end runner = compile(data.list,data.processor,2) data.runner = runner end return runner(head,one,two) end elseif n == 3 then return function(head,one,two,three) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a with %s extra arguments",name,3) end runner = compile(data.list,data.processor,3) data.runner = runner end return runner(head,one,two,three) end elseif n == 4 then return function(head,one,two,three,four) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a with %s extra arguments",name,4) end runner = compile(data.list,data.processor,4) data.runner = runner end return runner(head,one,two,three,four) end elseif n == 5 then return function(head,one,two,three,four,five) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a with %s extra arguments",name,5) end runner = compile(data.list,data.processor,5) data.runner = runner end return runner(head,one,two,three,four,five) end else return function(head,...) total = total + 1 -- will go away local runner = data.runner if not runner then created = created + 1 if trace_tasks then report_tasks("creating runner %a with %s extra arguments",name,n) end runner = compile(data.list,data.processor,"n") data.runner = runner end return runner(head,...) end end else return nil end end function tasks.table(name) --maybe move this to task-deb.lua local tsk = tasksdata[name] local lst = tsk and tsk.list local HL, NC, NR, bold, type = context.HL, context.NC, context.NR, context.bold, context.type if lst then local list, order = lst.list, lst.order if list and order then context.starttabulate { "|l|l|" } NC() bold("category") NC() bold("function") NC() NR() for i=1,#order do HL() local o = order[i] local l = list[o] if #l == 0 then NC() type(o) NC() context("unset") NC() NR() else local done = false for k, v in table.sortedhash(l) do NC() if not done then type(o) done = true end NC() type(v) NC() NR() end end end context.stoptabulate() end end end -- this will move tasks.new { name = "processors", arguments = 4, processor = nodeprocessor, sequence = { "before", -- for users "normalizers", "characters", "words", "fonts", "lists", "after", -- for users } } tasks.new { name = "finalizers", arguments = 1, processor = nodeprocessor, sequence = { "before", -- for users "normalizers", -- "characters", -- "finishers", "fonts", "lists", "after", -- for users } } tasks.new { name = "shipouts", arguments = 0, processor = nodeprocessor, sequence = { "before", -- for users "normalizers", "finishers", "after", -- for users } } tasks.new { name = "mvlbuilders", arguments = 1, processor = nodeprocessor, sequence = { "before", -- for users "normalizers", "after", -- for users } } tasks.new { name = "vboxbuilders", arguments = 5, processor = nodeprocessor, sequence = { "before", -- for users "normalizers", "after", -- for users } } -- tasks.new { -- name = "parbuilders", -- arguments = 1, -- processor = nodeprocessor, -- sequence = { -- "before", -- for users -- "lists", -- "after", -- for users -- } -- } -- tasks.new { -- name = "pagebuilders", -- arguments = 5, -- processor = nodeprocessor, -- sequence = { -- "before", -- for users -- "lists", -- "after", -- for users -- } -- } context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-ext.mkii0000644000175000017500000003020211754241457024314 0ustar norbertnorbert%D \module %D [ file=xtag-ext, %D version=2001.03.21, %D title=\CONTEXT\ XML Macros, %D subtitle=Extra Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Extras} \unprotect %D \macros %D {startXMLmapping} %D %D You can define macros within a namespace, so that they %D will not conflict (don't confuse this with \XML\ %D namespaces.) %D %D \starttyping %D \startXMLmapping [tag] | [-] [tag] | [+] [tag] %D definitions %D \stopXMLmapping %D \stoptyping %D %D When a \type {[+]} is specified, the mappings will %D nest. \def\resetXMLmapping {\let\@@XMLelement\normal@@XMLelement \let\@@XMLmapping\empty} \resetXMLmapping \def\startXMLmapping {\dodoubleempty\dostartXMLmapping} % \def\dostartXMLmapping[#1][#2]% sneller maken % {\pushmacro\@@XMLelement % \pushmacro\@@XMLmapping % \ifsecondargument % \doifelse{#1}{-} % {\donostartXMLmapping{#2}} % {\doifelse{#1}{+} % {\dodostartXMLmapping{#2}} % {\donostartXMLmapping{#2}}}% % \else % \donostartXMLmapping{#1}% % \fi % \unprotect} \def\dostartXMLmapping[#1#2][#3]% {\pushmacro\@@XMLelement \pushmacro\@@XMLmapping \ifsecondargument \if\noexpand#1-% \@EA\donostartXMLmapping \else\if\noexpand#1+% \@EAEAEA\dodostartXMLmapping \else \@EAEAEA\donostartXMLmapping \fi\fi{#3}% \else \donostartXMLmapping{#1#2}% \fi \unprotect} \def\donostartXMLmapping#1% {\let\@@XMLprevelement\@@XMLelement \edef\@@XMLmapping{#1}% \edef\@@XMLelement{\normal@@XMLelement+#1}} \def\dodostartXMLmapping#1% {\let\@@XMLprevelement\@@XMLelement \edef\@@XMLmapping{\@@XMLmapping+#1}% \edef\@@XMLelement{\@@XMLelement+#1}} \def\stopXMLmapping {\protect \popmacro\@@XMLmapping \popmacro\@@XMLelement} %D \macros %D {startXMLmappinggroup} %D %D Imagine something: %D %D \starttyping %D \defineXMLenvironment [something] %D {\startXMLmapping[whatever]} %D {\stopXMLmapping} %D \stoptyping %D %D Here the \type {\stopXMLmapping} will never be reached %D because we are in a mapping. Therefore we need: \def\startXMLmappinggroup {\dodoubleempty\dostartXMLmappinggroup} \def\dostartXMLmappinggroup[#1][#2]% {\bgroup \letcscsname\savedXMLmeaning\csname\@@XMLelement:/\currentXMLelement\endcsname \dostartXMLmapping[#1][#2]% do ! else wrong ! \letcsnamecs\csname\@@XMLelement:/\currentXMLelement\endcsname\savedXMLmeaning} \def\stopXMLmappinggroup {\stopXMLmapping \egroup} %D Context Directives: \def\@@CTXML{@@CTXML} \def\defineXMLdirective {\dodoubleempty\dodefineXMLdirective} \long\def\dodefineXMLdirective[#1][#2]#3% {\defineXMLprocessor[context-#1-directive]{\dohandleXMLdirective{#1}{#3}}% \ifsecondargument \long\setvalue{\@@CTXML-#1-#2}{#3}% \fi} \def\dohandleXMLdirective#1#2#3% {\dodohandleXMLdirective#3 @ @ @\end{#1}{#2}} %\def\dodohandleXMLdirective#1 #2 #3 #4\end#5#6% % {\doifdefinedelse{\@@CTXML-#5-#1} % {\getvalue{\@@CTXML-#5-#1}[#2=#3]} % {#6[#1][#2=#3]}} \def\dodohandleXMLdirective#1 #2 #3 #4\end#5#6% {\executeifdefined{\@@CTXML-#5-#1}{#6[#1]}[#2=#3]} % \defineXMLdirective [mathml] \setupMMLappearance % [#1][#2=#3] % \defineXMLdirective [flowchart] [shapes] \setupFLOWshapes % [#2=#3] % \defineXMLdirective [flowchart] [lines] \setupFLOWlines % [#2=#3] \defineXMLprocessor [context-begin-group] {\bgroup\gobbleoneargument} \defineXMLprocessor [context-end-group] {\egroup\gobbleoneargument} % \def\XMLnspart#1:#2\empty{#1} % call ...:\empty\empty % \def\XMLidpart#1:#2#3\empty{\ifx#2\empty#1\else\XMLidpart#2#3\empty\empty\fi} % trial macros (used in setupx), to be sped up ! \bgroup \catcode`\<=\activecatcode \gdef\saveXMLasdata#1#2% name raw data {\dodoglobal\setevalue{\@@XMLsave:#1}{#2}} % \edef! \gdef\saveXMLdata#1#2% name data-name ; definitely no \edef {\dodoglobal\copycsname\@@XMLsave:#1\endcsname\csname\@@XMLdata:#2\endcsname} % \gdef\saveXMLdatainelement#1#2#3% name element data % {\dodoglobal\setevalue{\@@XMLsave:#1}% todo: one level expansion % {<#2 \currentXMLarguments>\XMLflush{#3}}} % % \gdef\saveXMLdatastructure#1#2#3#4#5#6% name element args before data after % {\dodoglobal\setevalue{\@@XMLsave:#1}% todo: one level expansion % {<#2 #3 \currentXMLarguments>#4\XMLflush{#5}#6}} % % better (no expansion): \newtoks\XMLdatatoks \gdef\saveXMLdatainelement#1#2#3% name element data {\XMLdatatoks\@EAEAEA{\csname\@@XMLdata:#3\endcsname}% no check \dodoglobal\setevalue{\@@XMLsave:#1}{<#2 \currentXMLarguments>\the\XMLdatatoks}} \gdef\saveXMLdatastructure#1#2#3#4#5#6% name element args before data after {\XMLdatatoks\@EAEAEA{\csname\@@XMLdata:#5\endcsname}% no check \dodoglobal\setevalue{\@@XMLsave:#1}{<#2 #3 \currentXMLarguments>#4\the\XMLdatatoks#6}} \gdef\gsaveXMLasdata {\doglobal\saveXMLasdata} \gdef\gsaveXMLdata {\doglobal\saveXMLdata} \gdef\gsaveXMLdatainelement{\doglobal\saveXMLdatainelement} \gdef\gsaveXMLdatastructure{\doglobal\saveXMLdatastructure} \gdef\doifelseXMLelement#1% {\doifdefinedelse{\@@XMLsave:#1}} \gdef\doifelseXMLelementcontent#1% {\ifcsname\@@XMLsave:#1\endcsname \bgroup \@EA\defconvertedcommand\@EA\ascii\csname\@@XMLsave:#1\endcsname \setbox\scratchbox\hbox{\ignorespaces\ascii\unskip\unskip\unskip}% \ifdim\wd\scratchbox>\zeropoint \egroup\@EAEAEA\firstoftwoarguments \else \egroup\@EAEAEA\secondoftwoarguments \fi \else \@EA\secondoftwoarguments \fi} \gdef\doifelseXMLelementequals#1#2% {\ifcsname\@@XMLsave:#1\endcsname \bgroup \@EA\defconvertedcommand\@EA\asciia\csname\@@XMLsave:#1\endcsname \defconvertedargument\asciib{#2}% \ifx\asciia\asciib \egroup\@EAEAEA\firstoftwoarguments \else \egroup\@EAEAEA\secondoftwoarguments \fi \else \@EA\secondoftwoarguments \fi} \gdef\doifXMLtextelse#1% new {\doiftextelse{\simplifyXMLelements#1}} \gdef\doifXMLtext#1#2% new {\doiftextelse{\simplifyXMLelements#1}{#2}\donothing} \gdef\convertXMLelement#1\to#2% {\ifcsname\@@XMLsave:#1\endcsname \@EA\defconvertedcommand\@EA#2\csname\@@XMLsave:#1\endcsname \else \let#2\ascii \fi} \gdef\flushXMLelement#1% {\csname \@@XMLsave:\ifcsname\@@XMLsave:#1\endcsname#1\else\@@XMLsave\fi \endcsname} \gdef\defXMLelement#1#2% {\@EA\let\@EA#1\csname \@@XMLsave:\ifcsname\@@XMLsave:#2\endcsname#2\else\@@XMLsave\fi \endcsname} \letgvalueempty{\@@XMLsave:\@@XMLsave} \gdef\showXMLelement#1% {\showvalue{\@@XMLsave:#1}} \gdef\eraseXMLelement#1% {\dodoglobal\letbeundefined{\@@XMLsave:#1}} \gdef\geraseXMLelement {\doglobal\eraseXMLelement} \gdef\processXMLelement#1% {\bgroup \enableXMLelements \getvalue{\@@XMLsave:#1}% \egroup} \gdef\texXMLelement#1% {\begingroup % \setnormalcatcodes \disableXML \scantokens\@EA\@EA\@EA{\csname\@@XMLsave:#1\endcsname}% \endgroup} \gdef\reduceXMLescapeentities {\setXMLentity{amp}{\string&}% \setXMLentity{lt}{\string<}% \setXMLentity{gt}{\string>}% \setXMLentity{quot}{\string'}% \setXMLentity{dquot}{\string"}} \gdef\reduceXMLelement#1\to#2% {\ifcsname\@@XMLsave:#1\endcsname \bgroup \reduceXMLescapetokens \reduceXMLescapeentities \expanded{\egroup\noexpand\def\noexpand#2{\csname\@@XMLsave:#1\endcsname}}% \else \let#2\empty \fi} \egroup % \defineXMLcommand % [whatever] % [test=unknown] % {\XMLop{test}} % % \startXMLdata % % \stopXMLdata % % \defineXMLcommand % [whatever] % [test=unknown] % {\defXMLtex\SomethingTex{\XMLop{test}}% % \SomethingTex} % % \startXMLdata % % \stopXMLdata \def\defXMLtex#1#2% the appended space will go away when {\begingroup % \scantokens is fixed \disableXML \everyeof{\noexpand}% br's hack \edef\ascii{#2}% \edef\ascii{\scantokens\expandafter{\ascii}}% space appended \expandafter\endgroup\expandafter\def\expandafter#1\expandafter{\ascii}} \def\potentialXMLentity#1% {\doifXMLentityelse{#1}{\getXMLentity{#1}}{#1}} % \def\XMLnoschema{standalone='yes'} \def\writtenXMLelement #1#2{<#1>#2} \def\writtenXMLstart #1{<#1>} \def\writtenXMLend #1{} \def\writtenXMLempty #1{<#1/>} \def\writtenXMLelementcs#1#2{\ifx#2\empty\else<#1>#2\fi} \def\writtenXMLemptycs #1#2{\ifx#2\empty<#1/>\else<#1>#2\fi} %D This one can be used to get sound tuo files. %D %D \starttyping %D \setuphead[chapter][expansion=xml] %D % \setuplist[chapter][textcommand=\enableXML] %D %D \enableregime[utf] \autoXMLentitiestrue %D \stoptyping %D %D with: %D %D \starttyping %D test ë test &ediaeresis; test ediaeresis %D \stoptyping %D %D This gives: %D %D \starttyping %D test ë test ediaeresis test ediaeresis %D \stoptyping \def\XMLprocessingparameter#1% {\csname\??xp#1\endcsname} \appendtoks \defineXMLargument[\XMLprocessingparameter\c!escape]\getXMLentity \to \aftersetupXMLprocessing \setupXMLprocessing [\c!escape=e] \bgroup \catcode`\<=\activecatcode \long\gdef\defexpandedxmlargument#1#2#3% {\begingroup \let\uppercase\firstofoneargument \def\getXMLhexcharacter##1{\numbertoutp{"##1}}% maps to private if needed \def\getXMLdeccharacter##1{\numbertoutp {##1}}% maps to private if needed \def\getXMLentity##1{##1}% \def<{\noexpand<}% \ifcase\xmlexpandmode \or % 1 = default \or % 2 = keep utf \keeputfcharacters % new, needed for chinese and such \fi \let\uchar\relax \let\unicodechar\relax \xdef\@@globalexpanded{#3}% \endgroup #1#2\@@globalexpanded} \egroup % test.xml: test % test % % \starttext % \enableregime[utf] \chardef\XMLtokensreduction=0 % \setuphead[chapter][expansion=xml] % \defineXMLargument[test]{\chapter} % \placelist[chapter][criterium=text] % \processXMLfilegrouped{test.xml} % \stoptext % obsolete in mkiv \chardef\xmlexpandmode\plusone \def\defexpandedxmlargumentcmd {\chardef\xmlexpandmode\plusone\defexpandedxmlargument\defconvertedcommand} \def\defexpandedxmlargumentutf {\chardef\xmlexpandmode\plustwo\defexpandedxmlargument\defconvertedcommand} \def\gdefexpandedxmlargumentcmd{\chardef\xmlexpandmode\plusone\defexpandedxmlargument\gdefconvertedcommand} \def\gdefexpandedxmlargumentutf{\chardef\xmlexpandmode\plustwo\defexpandedxmlargument\gdefconvertedcommand} \installexpander {xml} \defexpandedxmlargumentcmd \gdefexpandedxmlargumentcmd \installexpander {xml:cmd} \defexpandedxmlargumentcmd \gdefexpandedxmlargumentcmd \installexpander {xml:utf} \defexpandedxmlargumentutf \gdefexpandedxmlargumentutf \def\XMLtexmath#1{\begingroup\setnormalcatcodes\scantokens{\mathematics{#1}\ignorespaces}\endgroup} % \defineXMLargument[tm]{\XMLtexmath} % % \startbuffer[test] % Sometimes it makes sense to use simple math, as in: e=mc^2. % \stopbuffer % % \processXMLbuffer[test] %D Undocumented ... \def\defineXMLstore {\doquadrupleargument\dodefineXMLstore[\saveXMLasdata]} \def\defineXMLgstore{\doquadrupleargument\dodefineXMLstore[\gsaveXMLasdata]} \def\dodefineXMLstore[#1][#2][#3][#4]% element attribute prefix % will become faster {\defineXMLargument[#2][#3=\s!dummy]{#1{#4:\XMLop{#3}}}} \def\countXMLchildren[#1]#2% {\startnointerference \doglobal\newcounter\nofXMLchildren \defineXMLargument[#1]{\doglobal\increment\nofXMLchildren}% \startXMLignore #2% \stopXMLignore \stopnointerference} % Typical \MKII. We will not explore this route any further as in \MKIV\ we % have better ways. \prependtoks \setnormalcatcodes \to \everyTEXinputmode \appendtoks \processingXMLfalse \to \everyTEXinputmode \let\normalenableXML\enableXML % some day we move the normal \enableXML into the toks \prependtoks \normalenableXML \to \everyXMLinputmode \appendtoks \processingXMLtrue \to \everyXMLinputmode \unexpanded\def\enableXML {\setinputmode[XML]} % \enableXML is used in edef's and marks \unexpanded\def\disableXML{\setinputmode[TEX]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-pdf.lua0000644000175000017500000005102312130411274024062 0ustar norbertnorbertif not modules then modules = { } end modules ['mlib-pdf'] = { version = 1.001, comment = "companion to mlib-ctx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- maybe %s is better than %f local format, concat, gsub = string.format, table.concat, string.gsub local abs, sqrt, round = math.abs, math.sqrt, math.round local setmetatable = setmetatable local Cf, C, Cg, Ct, P, S, lpegmatch = lpeg.Cf, lpeg.C, lpeg.Cg, lpeg.Ct, lpeg.P, lpeg.S, lpeg.match local formatters = string.formatters local report_metapost = logs.reporter("metapost") local mplib, context = mplib, context local allocate = utilities.storage.allocate local copy_node = node.copy local write_node = node.write metapost = metapost or { } local metapost = metapost metapost.flushers = metapost.flushers or { } local pdfflusher = { } metapost.flushers.pdf = pdfflusher metapost.multipass = false metapost.n = 0 metapost.optimize = true -- false local experiment = true -- uses context(node) that already does delayed nodes local savedliterals = nil -- needs checking local mpsliteral = nodes.pool.register(node.new("whatsit",nodes.whatsitcodes.pdfliteral)) -- pdfliteral.mode = 1 local pdfliteral = function(s) local literal = copy_node(mpsliteral) literal.data = s return literal end -- Because in MKiV we always have two passes, we save the objects. When an extra -- mp run is done (due to for instance texts identifier in the parse pass), we -- get a new result table and the stored objects are forgotten. Otherwise they -- are reused. local function getobjects(result,figure,f) if metapost.optimize then local objects = result.objects if not objects then result.objects = { } end objects = result.objects[f] if not objects then objects = figure:objects() result.objects[f] = objects end return objects else return figure:objects() end end function metapost.convert(result, trialrun, flusher, multipass, askedfig) if trialrun then metapost.multipass = false metapost.parse(result, askedfig) if multipass and not metapost.multipass and metapost.optimize then metapost.flush(result, flusher, askedfig) -- saves a run else return false end else metapost.flush(result, flusher, askedfig) end return true -- done end function metapost.flushliteral(d) if savedliterals then local literal = copy_node(mpsliteral) literal.data = savedliterals[d] write_node(literal) else report_metapost("problem flushing literal %a",d) end end function metapost.flushreset() -- will become obsolete and internal savedliterals = nil end function pdfflusher.comment(message) if message then message = formatters["%% mps graphic %s: %s"](metapost.n,message) if experiment then context(pdfliteral(message)) else if savedliterals then local last = #savedliterals + 1 savedliterals[last] = message context.MPLIBtoPDF(last) else savedliterals = { message } context.MPLIBtoPDF(1) end end end end function pdfflusher.startfigure(n,llx,lly,urx,ury,message) savedliterals = nil metapost.n = metapost.n + 1 context.startMPLIBtoPDF(llx,lly,urx,ury) if message then pdfflusher.comment(message) end end function pdfflusher.stopfigure(message) if message then pdfflusher.comment(message) end context.stopMPLIBtoPDF() context.MPLIBflushreset() -- maybe just at the beginning end function pdfflusher.flushfigure(pdfliterals) -- table if #pdfliterals > 0 then pdfliterals = concat(pdfliterals,"\n") if experiment then context(pdfliteral(pdfliterals)) else if savedliterals then local last = #savedliterals + 1 savedliterals[last] = pdfliterals context.MPLIBtoPDF(last) else savedliterals = { pdfliterals } context.MPLIBtoPDF(1) end end end end function pdfflusher.textfigure(font,size,text,width,height,depth) -- we could save the factor text = gsub(text,".","\\hbox{%1}") -- kerning happens in metapost (i have to check if this is true for mplib) context.MPtextext(font,size,text,0,-number.dimenfactors.bp*depth) end local bend_tolerance = 131/65536 local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 local pen_info = mplib.pen_info local function pen_characteristics(object) local t = pen_info(object) rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty divider = sx*sy - rx*ry return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width end local function mpconcat(px, py) -- no tx, ty here / we can move this one inline if needed return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider end local function curved(ith,pth) local d = pth.left_x - ith.right_x if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then d = pth.left_y - ith.right_y if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then return false end end return true end local function flushnormalpath(path, t, open) local pth, ith, nt if t then nt = #t else t = { } nt = 0 end for i=1,#path do nt = nt + 1 pth = path[i] if not ith then t[nt] = formatters["%f %f m"](pth.x_coord,pth.y_coord) elseif curved(ith,pth) then t[nt] = formatters["%f %f %f %f %f %f c"](ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord) else t[nt] = formatters["%f %f l"](pth.x_coord,pth.y_coord) end ith = pth end if not open then nt = nt + 1 local one = path[1] if curved(pth,one) then t[nt] = formatters["%f %f %f %f %f %f c"](pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord ) else t[nt] = formatters["%f %f l"](one.x_coord,one.y_coord) end elseif #path == 1 then -- special case .. draw point local one = path[1] nt = nt + 1 t[nt] = formatters["%f %f l"](one.x_coord,one.y_coord) end return t end local function flushconcatpath(path, t, open) local pth, ith, nt if t then nt = #t else t = { } nt = 0 end nt = nt + 1 t[nt] = formatters["%f %f %f %f %f %f cm"](sx,rx,ry,sy,tx,ty) for i=1,#path do nt = nt + 1 pth = path[i] if not ith then t[nt] = formatters["%f %f m"](mpconcat(pth.x_coord,pth.y_coord)) elseif curved(ith,pth) then local a, b = mpconcat(ith.right_x,ith.right_y) local c, d = mpconcat(pth.left_x,pth.left_y) t[nt] = formatters["%f %f %f %f %f %f c"](a,b,c,d,mpconcat(pth.x_coord,pth.y_coord)) else t[nt] = formatters["%f %f l"](mpconcat(pth.x_coord, pth.y_coord)) end ith = pth end if not open then nt = nt + 1 local one = path[1] if curved(pth,one) then local a, b = mpconcat(pth.right_x,pth.right_y) local c, d = mpconcat(one.left_x,one.left_y) t[nt] = formatters["%f %f %f %f %f %f c"](a,b,c,d,mpconcat(one.x_coord, one.y_coord)) else t[nt] = formatters["%f %f l"](mpconcat(one.x_coord,one.y_coord)) end elseif #path == 1 then -- special case .. draw point nt = nt + 1 local one = path[1] t[nt] = formatters["%f %f l"](mpconcat(one.x_coord,one.y_coord)) end return t end metapost.flushnormalpath = flushnormalpath -- The flusher is pdf based, if another backend is used, we need to overload the -- flusher; this is beta code, the organization will change (already upgraded in -- sync with mplib) -- -- We can avoid the before table but I like symmetry. There is of course a small -- performance penalty, but so is passing extra arguments (result, flusher, after) -- and returning stuff. local function ignore() end function metapost.flush(result,flusher,askedfig) if result then local figures = result.fig if figures then flusher = flusher or pdfflusher local resetplugins = metapost.resetplugins or ignore -- before figure local processplugins = metapost.processplugins or ignore -- each object local synchronizeplugins = metapost.synchronizeplugins or ignore local pluginactions = metapost.pluginactions or ignore -- before / after local startfigure = flusher.startfigure local stopfigure = flusher.stopfigure local flushfigure = flusher.flushfigure local textfigure = flusher.textfigure for f=1, #figures do local figure = figures[f] local objects = getobjects(result,figure,f) local fignum = figure:charcode() or 0 if askedfig == "direct" or askedfig == "all" or askedfig == fignum then local t = { } local miterlimit, linecap, linejoin, dashed = -1, -1, -1, false local bbox = figure:boundingbox() local llx, lly, urx, ury = bbox[1], bbox[2], bbox[3], bbox[4] metapost.llx = llx metapost.lly = lly metapost.urx = urx metapost.ury = ury if urx < llx then -- invalid startfigure(fignum,0,0,0,0,"invalid",figure) stopfigure() else startfigure(fignum,llx,lly,urx,ury,"begin",figure) t[#t+1] = "q" if objects then resetplugins(t) -- we should move the colorinitializer here for o=1,#objects do local object = objects[o] local objecttype = object.type if objecttype == "start_bounds" or objecttype == "stop_bounds" or objecttype == "special" then -- skip elseif objecttype == "start_clip" then t[#t+1] = "q" flushnormalpath(object.path,t,false) t[#t+1] = "W n" elseif objecttype == "stop_clip" then t[#t+1] = "Q" miterlimit, linecap, linejoin, dashed = -1, -1, -1, false elseif objecttype == "text" then t[#t+1] = "q" local ot = object.transform -- 3,4,5,6,1,2 t[#t+1] = formatters["%f %f %f %f %f %f cm"](ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) -- TH: formatters["%f %f m %f %f %f %f 0 0 cm"](unpack(ot)) flushfigure(t) -- flush accumulated literals t = { } textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth) t[#t+1] = "Q" else -- we use an indirect table as we want to overload -- entries but this is not possible in userdata -- -- can be optimized if no path -- local original = object local object = { } setmetatable(object, { __index = original }) -- first we analyze local before, after = processplugins(object) local objecttype = object.type -- can have changed if before then t = pluginactions(before,t,flushfigure) end local ml = object.miterlimit if ml and ml ~= miterlimit then miterlimit = ml t[#t+1] = formatters["%f M"](ml) end local lj = object.linejoin if lj and lj ~= linejoin then linejoin = lj t[#t+1] = formatters["%i j"](lj) end local lc = object.linecap if lc and lc ~= linecap then linecap = lc t[#t+1] = formatters["%i J"](lc) end local dl = object.dash if dl then local d = formatters["[%s] %f d"](concat(dl.dashes or {}," "),dl.offset) if d ~= dashed then dashed = d t[#t+1] = dashed end elseif dashed then t[#t+1] = "[] 0 d" dashed = false end local path = object.path -- newpath local transformed, penwidth = false, 1 local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point" local pen = object.pen if pen then if pen.type == 'elliptical' then transformed, penwidth = pen_characteristics(original) -- boolean, value t[#t+1] = formatters["%f w"](penwidth) -- todo: only if changed if objecttype == 'fill' then objecttype = 'both' end else -- calculated by mplib itself objecttype = 'fill' end end if transformed then t[#t+1] = "q" end if path then if transformed then flushconcatpath(path,t,open) else flushnormalpath(path,t,open) end if objecttype == "fill" then t[#t+1] = "h f" elseif objecttype == "outline" then t[#t+1] = (open and "S") or "h S" elseif objecttype == "both" then t[#t+1] = "h B" end end if transformed then t[#t+1] = "Q" end local path = object.htap if path then if transformed then t[#t+1] = "q" end if transformed then flushconcatpath(path,t,open) else flushnormalpath(path,t,open) end if objecttype == "fill" then t[#t+1] = "h f" elseif objecttype == "outline" then t[#t+1] = (open and "S") or "h S" elseif objecttype == "both" then t[#t+1] = "h B" end if transformed then t[#t+1] = "Q" end end if after then t = pluginactions(after,t,flushfigure) end if object.grouped then -- can be qQ'd so changes can end up in groups miterlimit, linecap, linejoin, dashed = -1, -1, -1, false end end end end t[#t+1] = "Q" flushfigure(t) stopfigure("end") end if askedfig ~= "all" then break end end end end end end function metapost.parse(result,askedfig) if result then local figures = result.fig if figures then local analyzeplugins = metapost.analyzeplugins -- each object for f=1,#figures do local figure = figures[f] local fignum = figure:charcode() or 0 if askedfig == "direct" or askedfig == "all" or askedfig == fignum then local bbox = figure:boundingbox() metapost.llx = bbox[1] metapost.lly = bbox[2] metapost.urx = bbox[3] metapost.ury = bbox[4] local objects = getobjects(result,figure,f) if objects then for o=1,#objects do analyzeplugins(objects[o]) end end if askedfig ~= "all" then break end end end end end end -- tracing: local t = { } local flusher = { startfigure = function() t = { } context.startnointerference() end, flushfigure = function(literals) local n = #t for i=1, #literals do n = n + 1 t[n] = literals[i] end end, stopfigure = function() context.stopnointerference() end } function metapost.pdfliterals(result) metapost.flush(result,flusher) return t end -- so far function metapost.totable(result) local figure = result and result.fig and result.fig[1] if figure then local t = { } local objects = figure:objects() for o=1,#objects do local object = objects[o] local tt = { } local fields = mplib.fields(object) for f=1,#fields do local field = fields[f] tt[field] = object[field] end t[o] = tt end local b = figure:boundingbox() return { boundingbox = { llx = b[1], lly = b[2], urx = b[3], ury = b[4] }, objects = t } else return nil end end context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-ini.mkii0000644000175000017500000001511711754241457024266 0ustar norbertnorbert%D \module %D [ file=regi-ini, %D version=2000.12.27, % 1998.12.03, %D title=\CONTEXT\ Regime Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Remark: regimes accumulate, so there is no explicit reset in %D mkii mode. %D Variables. \def\@reg@{@r@eg@} % regime prefix %D \macros %D {currentregime} \let\currentregime\empty \let\defaultregime\s!default %D Some low level inheritance stuff (mkii). \def\doautosetregime#1#2% {\ifnum#2>127 \expanded{\defineactivetoken #2 \@EA\noexpand\csname#1\endcsname}% \fi} %D \macros %D {startregime} %D %D Sometimes it makes sense to activate the characters in the %D upper half of the character table. Such a bundle of %D characters can be packages in a regime. Later we will see %D encodings (that links characters slots to glyphs) and %D mappings (that take care of hyphenation and case changes). %D %D When character~231 is of category code letter, it %D directly maps to glyph~231 (unless of course some virtual %D font is used). By making character~231 active, we can map %D it onto for instance the glyph in slot 233. This mapping %D can in itself be indirect, in the sense that it is for %D instance handled by an accent command. %D %D Regimes are implemented roughly the same as mappings, but %D enabled under different circumstances. In the future, the %D low level implementation may change. \def\startregime[#1]% {\pushmacro\currentregime \edef\currentregime{#1}% \checkregimetoks} \def\checkregimetoks {\doifundefined{\@reg@\currentregime} {\@EA\newtoks\csname\@reg@\currentregime\endcsname}} \def\stopregime {\popmacro\currentregime} \def\setregimetoks {\checkregimetoks \@EA\let\@EA\regimetoks\csname\@reg@\currentregime\endcsname} %D \macros %D {defineactivedecimal, defineactivedecimals, defineactivetoken} %D %D The following commands are rather ugly ones. It makes a %D character active and assigns it a value. When expanded, %D the decimal number of the character is passed as first %D argument. %D %D \starttyping %D \def\decimalcharacter#1{\message{#1 is now active}} %D %D \defineactivedecimal 122 {\decimalcharacter} %D %D \defineactivedecimals 128 to 255 as {\decimalcharacter} %D \stoptyping %D %D This command is typically used in coding definitions, %D like the \UNICODE\ one. \def\dodefineactivedecimal#1#2% \unexpanded ? pdfdoc encoding {\catcode#1\active \scratchcounter\uccode\activehackcode \uccode\activehackcode#1\relax \uppercase{\unexpanded\edef~{\noexpand#2{\number#1}}}% \uccode\activehackcode\scratchcounter} \long\def\defineactivedecimal#1 #2 % {\setregimetoks \regimetoks\expandafter{\the\regimetoks\dodefineactivedecimal{#1}{#2}}} \long\def\defineactivedecimals#1 to #2 as #3 % {\setregimetoks \dostepwiserecurse{#1}{#2}\plusone {\regimetoks\@EA\@EA\@EA{\@EA\the\@EA\regimetoks\@EA\dodefineactivedecimal\@EA{\recurselevel}{#3}}}} \def\doexpandactivedecimal#1% {\ifnum#1>\scratchcounter \expandafter\gobbletwoarguments \else \noexpand\dodefineactivedecimal{#1}{\the\scratchtoks}% \expandafter\expandafter\expandafter\doexpandactivedecimal\expandafter \fi\expandafter{\the\numexpr#1+\plusone\relax}} \long\def\defineactivedecimals#1 to #2 as #3 % {\setregimetoks \scratchcounter#2\relax \scratchtoks{#3}% \expanded{\regimetoks{\the\regimetoks\doexpandactivedecimal{#1}}}% \ignorespaces} \long\def\defineactivetoken #1 #2% no {} after #2, else no kern {\setregimetoks \regimetoks\expandafter{\the\regimetoks\defineactivecharacter#1 {#2}}} \long\def\defineactiveinspector #1 #2% watch the missing {} {\setregimetoks \regimetoks\expandafter{\the\regimetoks\defineactivecharacter#1 {#2}}} %D \macros %D {defineregimesynonym,trueregimename} \def\defineregimesynonym {\dodoubleargument\dodefineregimesynonym} \def\dodefineregimesynonym[#1][#2]% {\setevalue{\@reg@:s:#1}{#2}} \def\trueregimename#1% {\executeifdefined{\@reg@:s:#1}{#1}} %D \macros %D {useregime} \def\useregime[#1]% {\processcommalist[#1]\douseregime} \def\douseregime#1% {\doifundefined{\c!file\f!regimeprefix#1}% {\letgvalue{\c!file\f!regimeprefix#1}\empty \makeshortfilename[\truefilename{\f!regimeprefix#1}]% \startreadingfile \readsysfile{\shortfilename.mkii} {\showmessage\m!regimes2{#1}} {\showmessage\m!regimes3{#1}}% \stopreadingfile}} %D \macros %D {enableregime,disableregime} \let\enabledregime\empty \def\enableregime[#1]% {\edef\currentregime{\trueregimename{#1}}% \doifelsenothing\currentregime {\disableregime} {\douseregime\currentregime \the\executeifdefined{\@reg@\currentregime}\emptytoks}} \def\disableregime {\let\currentregime\empty} %D \macros %D {protectregime, settoletterunlessactive, settocodeunlessactive} %D %D The next boolean is used later on to prevent unwanted %D catcode changes. Use it with care. \newif\ifprotectregime \protectregimetrue \def\settoletterunlessactive#1% {\ifprotectregime\ifnum\catcode#1=\active\else \catcode#1\@@letter \fi\else \catcode#1\@@letter \fi} \def\settootherunlessactive#1% {\ifprotectregime\ifnum\catcode#1=\active\else \catcode#1=\@@other \fi\else \catcode#1=\@@other \fi} \def\settocodeunlessactive#1#2% {\ifprotectregime\ifnum\catcode#1=\active\else \catcode#1=#2\relax \fi\else \catcode#1=#2\relax \fi} %D Goodie: \def\showregime[#1]% {\doifnot{#1}{utf} {\bgroup \enableregime[#1]% \starttabulate[|l|l|l|] \dostepwiserecurse{128}{255}{1} {\expanded {\scantokens {\NC \recurselevel \NC \rawcharacter\recurselevel \NC \noexpand\tttf \noexpand\meaning\rawcharacter\recurselevel \NC \NR}}}% \stoptabulate \unskip \egroup}} %D Sort related: \def\dowalkregime#1% {\the\executeifdefined{\@reg@#1}\emptytoks} %D Simplify matters for \XETEX. \ifnum\texengine=\xetexengine \def\enableregime[#1]% {\doifelse{#1}{utf}% {\writestatus\m!regimes{mapping utf to utf-8}% \XeTeXinputencoding{utf-8}} {\XeTeXinputencoding{#1}}} \def\disableregime {\XeTeXinputencoding{utf-8}} \def\loadregime[#1]{} \let\walkregime \gobbleoneargument \let\doautosetregime \gobbletwoarguments \else \useregime[def,uni,utf] % we load the rest runtime \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-cut.mkiv0000644000175000017500000001326712130411274024274 0ustar norbertnorbert%D \module %D [ file=pack-cut, % comes from core-vis/trac-vis %D version=1996.06.01, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Cut boxes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \macros %D {makecutbox, cuthbox, cutvbox, cutvtop} %D %D Although mainly used for marking the page, these macros can %D also serve local use. %D %D \startbuffer %D \setbox0=\vbox{a real \crlf vertical box} \makecutbox0 %D \stopbuffer %D %D \typebuffer %D %D This marked \type{\vbox} shows up as: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D The alternative macros are used as: %D %D \startbuffer %D \cuthbox{a made cut box} %D \stopbuffer %D %D \typebuffer %D %D This is typeset as: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D By setting the next macros one can influence the length of %D the marks as well as the horizontal and vertical divisions. \newdimen\d_pack_cutmarks_width \newdimen\d_pack_cutmarks_height \newdimen\d_pack_cutmarks_depth \newcount\horizontalcutmarks \horizontalcutmarks \plustwo \newcount\verticalcutmarks \verticalcutmarks \plustwo \newcount\cutmarkoffset \cutmarkoffset \plusone \let\cutmarksymbol \relax \let\cutmarktoptext \empty \let\cutmarkbottomtext \empty \let\cutmarkhoffset \empty \let\cutmarkvoffset \empty \def\cutmarklength {2\bodyfontsize} \def\cutmarkrulethickness{\onepoint} \unexpanded\def\horizontalcuts {\normalhbox to \d_pack_cutmarks_width {\dorecurse\horizontalcutmarks{\vrule\s!width\cutmarkrulethickness\s!height\cutmarklength\normalhfill}% \unskip}} \unexpanded\def\verticalcuts {\normalvbox to \dimexpr\d_pack_cutmarks_height+\d_pack_cutmarks_depth\relax {\hsize\cutmarklength \dorecurse\verticalcutmarks{\vrule\s!height\cutmarkrulethickness\s!width\hsize\normalvfill}% \unskip}} \unexpanded\def\baselinecuts {\ifdim\d_pack_cutmarks_depth>\zeropoint \normalvbox to \dimexpr\d_pack_cutmarks_height+\d_pack_cutmarks_depth\relax {\hsize\dimexpr\cutmarklength/2\relax \normalvskip\zeropoint\s!plus\d_pack_cutmarks_height \vrule\s!height\cutmarkrulethickness\s!width\hsize \normalvskip\zeropoint\s!plus\d_pack_cutmarks_depth}% \fi} \unexpanded\def\cutmarksymbols#1% {\normalhbox to \d_pack_cutmarks_width {\setbox\scratchbox\normalhbox to \cutmarklength {\normalhss\infofont\cutmarksymbol\normalhss}% \normalhss \normalvbox to \cutmarklength {\scratchdimen\dimexpr\cutmarklength/2\relax \scratchskip \ifx\cutmarkhoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkhoffset\fi \normalvss \hbox to \d_pack_cutmarks_width {\llap{\copy\scratchbox\normalhskip\scratchskip}% \normalhskip\scratchdimen\hss\infofont#1\hss\normalhskip\scratchdimen \rlap{\normalhskip\scratchskip\copy\scratchbox}}% \normalvss}% \normalhss}} \unexpanded\def\makecutbox#1% {\bgroup \d_pack_cutmarks_height\ht#1% \d_pack_cutmarks_depth \dp#1% \d_pack_cutmarks_width \wd#1% \setbox#1\normalhbox {\dontcomplain \forgetall \boxmaxdepth\maxdimen \offinterlineskip \scratchdimen\dimexpr\cutmarklength/2\relax \hsize\d_pack_cutmarks_width \setbox\scratchbox\normalvbox {\setbox\scratchbox\normalhbox{\horizontalcuts}% \scratchskip\ifx\cutmarkvoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkvoffset\fi \tlap{\copy\scratchbox\normalvskip\scratchskip}% \hbox to \d_pack_cutmarks_width {\scratchskip\ifx\cutmarkhoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkhoffset\fi \setbox\scratchbox\normalhbox{\verticalcuts}% \llap{\copy\scratchbox\normalhskip\scratchskip}% \ifdim\d_pack_cutmarks_depth=\zeropoint \normalhfill \else \bgroup \setbox\scratchbox\normalhbox{\baselinecuts}% \llap{\copy\scratchbox\normalhskip\scratchskip}% \normalhfill \rlap{\normalhskip\scratchskip\copy\scratchbox}% \egroup \fi \rlap{\normalhskip\scratchskip\copy\scratchbox}}% \blap{\normalvskip\scratchskip\copy\scratchbox}}% \ht\scratchbox\d_pack_cutmarks_height \dp\scratchbox\d_pack_cutmarks_depth \wd\scratchbox\zeropoint \startcolor[\defaulttextcolor]% \box\scratchbox \ifx\cutmarksymbol\relax \else \setbox\scratchbox\normalvbox {\scratchskip\ifx\cutmarkvoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkvoffset\fi \vskip-\dimexpr\scratchskip+\cutmarklength\relax \normalhbox{\cutmarksymbols\cutmarktoptext}% \vskip\dimexpr\scratchskip+\d_pack_cutmarks_height+\d_pack_cutmarks_depth+\scratchskip\relax \normalhbox{\cutmarksymbols\cutmarkbottomtext}}% \ht\scratchbox\d_pack_cutmarks_height \dp\scratchbox\d_pack_cutmarks_depth \wd\scratchbox\zeropoint \box\scratchbox \fi \stopcolor \box#1}% \wd#1\d_pack_cutmarks_width \ht#1\d_pack_cutmarks_height \dp#1\d_pack_cutmarks_depth \egroup} \unexpanded\def\cuthbox{\normalhbox\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\normalhbox} \unexpanded\def\cutvbox{\normalvbox\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\normalvbox} \unexpanded\def\cutvtop{\normalvtop\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\normalvtop} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-com.mkii0000644000175000017500000000101011754241457024244 0ustar norbertnorbert%D \module %D [ file=tabl-com, %D version=2009.08.22, %D title=\CONTEXT\ Table Macros, %D subtitle=Common Code, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Common Code} \unprotect \let\NC\relax \let\NR\relax \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-en.mkii0000644000175000017500000000102411754241457024116 0ustar norbertnorbert%D \module %D [ file=cont-en, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ English Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {english} \def\defaultlanguagetag{en} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/filt-bas.mkii0000644000175000017500000000346511754241457024267 0ustar norbertnorbert%D \module %D [ file=filt-bas, %D version=2000.09.19, %D title=\CONTEXT\ Filter Macros, %D subtitle=A Base Collection, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % BEWARE: THIS IS A TEST MODULE, NAMES MAY CHANGE! \definefiltersynonym [utf8 to unicode16] [inutf8] \definefiltersynonym [persian fix] [FarsiToArabic] \definefiltersynonym [arabic analysis] [uni2cuni] \definefiltersynonym [arabic glyphs] [cuni2oar] \definefiltersequence [farsi] [utf8 to unicode16, persian fix, arabic analysis, arabic glyphs] \definefiltersynonym [basic context analysis step1] [bcaa-1] \definefiltersynonym [basic context analysis step2] [bcaa-2] \definefiltersynonym [basic context analysis step3] [bcaa-3] \definefiltersynonym [farsi processing for uomarab] [uomarab-farsi] \definefiltersynonym [basic presentation forms to sf] [bpftosf] \definefiltersynonym [omega persian fix] [FarsiToArabic] \definefiltersynonym [omega arabic analysis] [uni2cuni] \definefiltersynonym [omega arabic glyphs] [cuni2oar] \definefiltersequence [farsi-1] [utf8 to unicode16, omega persian fix, omega arabic analysis, omega arabic glyphs] \definefiltersequence [farsi-2] [utf8 to unicode16, basic context analysis step1, basic context analysis step2, basic context analysis step3, farsi processing for uomarab] \definefiltersequence [farsi-3] [utf8 to unicode16, basic context analysis step1, basic context analysis step2, basic context analysis step3, basic presentation forms to sf] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-cjk.mkii0000644000175000017500000000147611754241457024271 0ustar norbertnorbert%D \module %D [ file=unic-cjk, %D version=2005.12.14, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=CJK Vectors, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \dostepwiserecurse {40}{159}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}} \dostepwiserecurse{172}{215}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}} \dostepwiserecurse{249}{250}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}} % special chars \dostepwiserecurse{255}{255}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-vis.mkii0000644000175000017500000005445311754241457024321 0ustar norbertnorbert%D \module %D [ file=trac-vis, % was core-vis, %D version=1996.06.01, %D title=\CONTEXT\ Tracking Macros, %D subtitle=Visualization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 adds some more visualization cues to the ones %D supplied in the support module. %D %D %\everypar dual character, \the\everypar and \everypar= %D %\hrule cannot be grabbed in advance, switches mode %D %\vrule cannot be grabbed in advance, switches mode %D % %D %\indent only explicit ones %D %\noindent only explicit ones %D %\par only explicit ones %D %D %\leftskip only if explicit one %D %\rightskip only if explicit one \writestatus{loading}{ConTeXt Tracking Macros / Visualization} \unprotect %D \macros %D {indent, noindent, par} %D %D \TeX\ acts upon paragraphs. In mosts documents paragraphs %D are separated by empty lines, which internally are handled as %D \type{\par}. Paragraphs can be indented or not, depending on %D the setting of \type{\parindent}, the first token of a %D paragraph and/or user suppressed or forced indentation. %D %D Because the actual typesetting is based on both explicit %D user and implicit system actions, visualization is only %D possible for the user supplied \type{\indent}, %D \type{\noindent}, and \type{\par}. Other %D 'clever' tricks will quite certainly lead to more failures %D than successes, so we only support these three explicit %D primitives and one macro: \def\showparagraphcue#1#2#3#4#5% {\bgroup \scratchdimen#1\relax \dontinterfere \dontcomplain \boxrulewidth5\testrulewidth #3#4\relax \setbox\scratchbox\normalhbox to \scratchdimen {#2{\ruledhbox to \scratchdimen {\vrule #5 20\testrulewidth \!!width \zeropoint \normalhss}}}% \smashbox\scratchbox \normalpenalty\!!tenthousand \box\scratchbox \egroup} \def\ruledhanging {\ifdim\hangindent>\zeropoint \ifnum\hangafter<\zerocount \normalhbox {\boxrulewidth5\testrulewidth \setbox\scratchbox\ruledhbox to \hangindent {\scratchdimen\strutht \advance\scratchdimen \strutdp \vrule \!!width \zeropoint \!!height \zeropoint \!!depth -\hangafter\scratchdimen}% \normalhskip-\hangindent \smashbox\scratchbox \raise\strutht\box\scratchbox}% \fi \fi} \def\ruledparagraphcues {\bgroup \dontcomplain \normalhbox to \zeropoint {\ifdim\leftskip>\zeropoint\relax \showparagraphcue\leftskip\llap\relax\relax\!!depth \normalhskip-\leftskip \fi \ruledhanging \normalhskip\hsize \ifdim\rightskip>\zeropoint\relax \normalhskip-\rightskip \showparagraphcue\rightskip\relax\relax\relax\!!depth \fi}% \egroup} \def\ruledpar {\relax \ifhmode \showparagraphcue{40\testrulewidth}\relax\rightrulefalse\relax\!!height \fi \normalpar} \def\rulednoindent {\relax \normalnoindent \ruledparagraphcues \showparagraphcue{40\testrulewidth}\llap\leftrulefalse\relax\!!height} \def\ruledindent {\relax \normalnoindent \ruledparagraphcues \ifdim\parindent>\zeropoint \showparagraphcue\parindent\relax\relax\relax\!!height \else \showparagraphcue{40\testrulewidth}\llap\relax\relax\!!height \fi \normalhskip\parindent} \def\dontshowimplicits {\let\noindent \normalnoindent \let\indent \normalindent \let\par \normalpar} \def\showimplicits {\testrulewidth \defaulttestrulewidth \let\noindent \rulednoindent \let\indent \ruledindent \let\par \ruledpar} %D The next few||line examples show the four cues. Keep in %D mind that we only see them when we explicitly open or close %D a paragraph. %D %D \bgroup %D \def\voorbeeld#1% %D {#1Visualizing some \TeX\ primitives and Plain \TeX\ %D macros can be very instructive, at least it is to me. %D Here we see {\tt\string#1} and {\tt\string\ruledpar} in %D action, while {\tt\string\parindent} equals %D {\tt\the\parindent}.\ruledpar} %D %D \showimplicits %D %D \voorbeeld \indent %D \voorbeeld \noindent %D %D \parindent=60pt %D %D \voorbeeld \indent %D \voorbeeld \noindent %D %D \startnarrower %D \voorbeeld \indent %D \voorbeeld \noindent %D \stopnarrower %D \egroup %D %D These examples also demonstrate the visualization of %D \type {\leftskip} and \type {\rightskip}. The macro %D \type {\nofruledbaselines} determines the number of lines %D shown. \newcounter\ruledbaselines \def\nofruledbaselines{3} \def\debuggertext#1% {\ifx\ttxx\undefined $\scriptscriptstyle#1$% \else {\ttxx#1}% \fi} \def\ruledbaseline {\vrule \!!width \zeropoint \bgroup \dontinterfere \doglobal\increment\ruledbaselines \scratchdimen\nofruledbaselines\baselineskip \setbox\scratchbox\normalvbox to 2\scratchdimen {\leaders \normalhbox {\strut \vrule \!!height \testrulewidth \!!depth \testrulewidth \!!width 120\points} \normalvfill}% \smashbox\scratchbox \advance\scratchdimen \strutheightfactor\baselineskip \setbox\scratchbox\normalhbox {\normalhskip -48\points \normalhbox to 24\points {\normalhss\debuggertext\ruledbaselines\normalhskip6\points}% \raise\scratchdimen\box\scratchbox}% \smashbox\scratchbox \box\scratchbox \egroup} \def\showbaselines {\testrulewidth\defaulttestrulewidth \EveryPar{\ruledbaseline}} %D \macros %D {showpagebuilder} %D %D The next tracing option probaly is only of use to me and a %D few \CONTEXT\ hackers. \def\showpagebuilder {\EveryPar{\doshowpagebuilder}} \def\doshowpagebuilder {\strut\llap {\startcolor[blue]\vl \high{\infofont v:\the\vsize }\vl \high{\infofont g:\the\pagegoal }\vl \high{\infofont t:\the\pagetotal}\vl \stopcolor}} %D \macros %D {makecutbox, cuthbox, cutvbox, cutvtop} %D %D Although mainly used for marking the page, these macros can %D also serve local use. %D %D \startbuffer %D \setbox0=\vbox{a real \crlf vertical box} \makecutbox0 %D \stopbuffer %D %D \typebuffer %D %D This marked \type{\vbox} shows up as: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D The alternative macros are used as: %D %D \startbuffer %D \cuthbox{a made cut box} %D \stopbuffer %D %D \typebuffer %D %D This is typeset as: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D By setting the next macros one can influence the length of %D the marks as well as the horizontal and vertical divisions. \def\cutmarklength {2\bodyfontsize} \chardef\horizontalcutmarks = 2 \chardef\verticalcutmarks = 2 \chardef\cutmarkoffset = 1 \let\cutmarksymbol = \relax \let\cutmarktoptext = \empty \let\cutmarkbottomtext = \empty \def\horizontalcuts {\normalhbox to \ruledwidth {\dorecurse\horizontalcutmarks {\vrule\!!width\boxrulewidth\!!height\cutmarklength\normalhfill}% \unskip}} \def\verticalcuts {\scratchdimen\ruledheight \advance\scratchdimen \ruleddepth \normalvbox to \scratchdimen {\hsize\cutmarklength \dorecurse\verticalcutmarks {\vrule\!!height\boxrulewidth\!!width\hsize\normalvfill}% \unskip}} \def\baselinecuts {\ifdim\ruleddepth>\zeropoint \scratchdimen\ruledheight \advance\scratchdimen \ruleddepth \normalvbox to \scratchdimen {\scratchdimen\cutmarklength \divide\scratchdimen 2 \hsize\scratchdimen \normalvskip\zeropoint\!!plus\ruledheight \vrule\!!height\boxrulewidth\!!width\hsize \normalvskip\zeropoint\!!plus\ruleddepth}% \fi} \def\cutmarksymbols#1% {\normalhbox to \ruledwidth {\setbox\scratchbox\normalhbox to \cutmarklength {\normalhss\infofont\cutmarksymbol\normalhss}% \normalhss \normalvbox to \cutmarklength {\scratchdimen\cutmarklength \divide\scratchdimen \plustwo \normalvss \hbox to \ruledwidth {\llap{\copy\scratchbox\normalhskip\cutmarkoffset\scratchdimen}% \normalhskip\scratchdimen\hss\infofont#1\hss\normalhskip\scratchdimen \rlap{\normalhskip\cutmarkoffset\scratchdimen\copy\scratchbox}}% \normalvss}% \normalhss}} \def\makecutbox#1% simplier with layers, todo {\edef\ruledheight{\the\ht#1}% \edef\ruleddepth {\the\dp#1}% \edef\ruledwidth {\the\wd#1}% \setbox#1\normalhbox {\dontcomplain \forgetall \boxmaxdepth\maxdimen \offinterlineskip \scratchdimen\cutmarklength \divide\scratchdimen \plustwo \hsize\ruledwidth \setbox\scratchbox\normalvbox {\setbox\scratchbox\normalhbox{\horizontalcuts}% \normalvskip-\cutmarkoffset\scratchdimen \normalvskip-2\scratchdimen \copy\scratchbox \normalvskip\cutmarkoffset\scratchdimen \hbox to \ruledwidth {\setbox\scratchbox\normalhbox{\verticalcuts}% \llap{\copy\scratchbox\normalhskip\cutmarkoffset\scratchdimen}% \bgroup \setbox\scratchbox\normalhbox{\baselinecuts}% \llap{\copy\scratchbox\normalhskip\cutmarkoffset\scratchdimen}% \normalhfill \rlap{\normalhskip\cutmarkoffset\scratchdimen\copy\scratchbox}% \egroup \rlap{\normalhskip\cutmarkoffset\scratchdimen\copy\scratchbox}}% \normalvskip\cutmarkoffset\scratchdimen \copy\scratchbox}% \ht\scratchbox\ruledheight \dp\scratchbox\ruleddepth \wd\scratchbox\zeropoint \resetcolorseparation \localstartcolor[\defaulttextcolor]% \box\scratchbox \ifx\cutmarksymbol\relax \else \setbox\scratchbox\normalvbox {\vskip-\cutmarkoffset\scratchdimen \vskip-\cutmarklength \normalhbox{\cutmarksymbols\cutmarktoptext}% \vskip\cutmarkoffset\scratchdimen \vskip\ruledheight \vskip\ruleddepth \vskip\cutmarkoffset\scratchdimen \normalhbox{\cutmarksymbols\cutmarkbottomtext}}% \ht\scratchbox\ruledheight \dp\scratchbox\ruleddepth \wd\scratchbox\zeropoint \box\scratchbox \fi \localstopcolor \box#1}% \wd#1=\ruledwidth \ht#1=\ruledheight \dp#1=\ruleddepth} \def\cuthbox {\normalhbox\bgroup \dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\normalhbox} \def\cutvbox {\normalvbox\bgroup \dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\normalvbox} \def\cutvtop {\normalvtop\bgroup \dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\normalvtop} %D \macros %D {colormarkbox,rastermarkbox} %D %D This macro is used in the pagebody routine. No other use %D is advocated here. %D %D \starttyping %D \colormarkbox0 %D \stoptyping \def\colormarkoffset{\cutmarkoffset} \def\colormarklength{\cutmarklength} \def\colorrangeA#1#2#3#4% {\vbox {\scratchdimen-\colormarklength \multiply\scratchdimen 4 \advance\scratchdimen \ruledheight \advance\scratchdimen \ruleddepth \divide\scratchdimen 21 \def\docommand##1% {\vbox {\hsize3em % \scratchdimen \definecolor [\s!dummy] [\c!c=#2##1\else0\fi, \c!m=#3##1\else0\fi, \c!y=#4##1\else0\fi, \c!k=0]% \localstartcolor[\s!dummy]% \hrule \!!width 3em \!!height \scratchdimen \!!depth \zeropoint \localstopcolor \ifdim\scratchdimen>1ex \vskip-\scratchdimen \vbox to \scratchdimen {\vss \hbox to 3em {\hss \localstartcolor[\s!white]% \ifdim##1\points=\zeropoint#1\else##1\fi \localstopcolor \hss}% \vss}% \fi}}% \offinterlineskip \processcommalist[1.00,0.95,0.75,0.50,0.25,0.05,0.00]\docommand}} \def\colorrangeB {\hbox {\scratchdimen-\colormarklength \multiply\scratchdimen \plustwo \advance\scratchdimen \ruledwidth \divide\scratchdimen 11 \def\docommand ##1 ##2 ##3##4##5##6% {\definecolor [\s!dummy] [\c!c=##3##2\else0\fi, \c!m=##4##2\else0\fi, \c!y=##5##2\else0\fi, \c!k=##6##2\else0\fi]% \localstartcolor[\s!dummy]% \vrule \!!width \scratchdimen \!!height \colormarklength \!!depth \zeropoint \localstopcolor \ifdim\scratchdimen>2em \hskip-\scratchdimen \vbox to \colormarklength {\vss \hbox to \scratchdimen {\hss \localstartcolor[\s!white]% \ifdim##2\points=.5\points##2~\fi##1% \localstopcolor \hss} \vss}% \fi}% \docommand C .5 \iftrue \iffalse\iffalse\iffalse \docommand M .5 \iffalse\iftrue \iffalse\iffalse \docommand Y .5 \iffalse\iffalse\iftrue \iffalse \docommand K .5 \iffalse\iffalse\iffalse\iftrue \docommand C 1 \iftrue \iffalse\iffalse\iffalse \docommand G 1 \iftrue \iffalse\iftrue \iffalse \docommand Y 1 \iffalse\iffalse\iftrue \iffalse \docommand R 1 \iffalse\iftrue \iftrue \iffalse \docommand M 1 \iffalse\iftrue \iffalse\iffalse \docommand B 1 \iftrue \iftrue \iffalse\iffalse \docommand K 1 \iffalse\iffalse\iffalse\iftrue}} \def\colorrangeC {\hbox {\resetcolorseparation \scratchdimen-\colormarklength \multiply\scratchdimen 2 \advance\scratchdimen \ruledwidth \divide\scratchdimen 14 \def\docommand##1% {\definecolor[\s!dummy][\c!s=##1]% \localstartcolor[\s!dummy]% \vrule \!!width \scratchdimen \!!height \colormarklength \!!depth \zeropoint \localstopcolor \ifdim\scratchdimen>2em \hskip-\scratchdimen \vbox to \colormarklength {\vss \localstartcolor[\s!white]% \hbox to \scratchdimen{\hss##1\hss} \localstopcolor \vss}% \fi}% \processcommalist[1,.95,.9,.85,.8,.75,.7,.6,.5,.4,.3,.2,.1,0]\docommand}} \def\docolormarkbox#1#2% {\edef\ruledheight{\the\ht#2}% \edef\ruleddepth {\the\dp#2}% \edef\ruledwidth {\the\wd#2}% \setbox#2\hbox {\scratchdimen\colormarklength \divide\scratchdimen \plustwo \forgetall \ssxx \setbox\scratchbox\vbox {\offinterlineskip \vskip-\colormarkoffset\scratchdimen \vskip-2\scratchdimen\relax % relax needed % beware: no \ifcase, due to nested \iftrue/\iffalse % and lacking \fi's \doifelse{#1}{0}% {\vskip\colormarklength \vskip\colormarkoffset\scratchdimen \vskip\ruledheight} {\hbox to \ruledwidth{\hss\hbox{\colorrangeB}\hss}% \vskip\colormarkoffset\scratchdimen \vbox to \ruledheight {\vss \hbox to \ruledwidth {\llap{\colorrangeA C\iftrue\iffalse\iffalse\hskip\colormarkoffset\scratchdimen}% \hfill \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA R\iffalse\iftrue\iftrue}}% \vss \hbox to \ruledwidth {\llap{\colorrangeA M\iffalse\iftrue\iffalse\hskip\colormarkoffset\scratchdimen}% \hfill \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA G\iftrue\iffalse\iftrue}}% \vss \hbox to \ruledwidth {\llap{\colorrangeA Y\iffalse\iffalse\iftrue\hskip\colormarkoffset\scratchdimen}% \hfill \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA B\iftrue\iftrue\iffalse}}% \vss}}% \vskip\colormarkoffset\scratchdimen \hbox to \ruledwidth {\hss\lower\ruleddepth\hbox{\colorrangeC}\hss}}% \ht\scratchbox\ruledheight \dp\scratchbox\ruleddepth \wd\scratchbox\zeropoint \box\scratchbox \box#2}% \wd#2=\ruledwidth \ht#2=\ruledheight \dp#2=\ruleddepth} \def\colormarkbox % #1 {\ifincolor\@EA\docolormarkbox\else\@EA\gobbletwoarguments\fi1} \def\rastermarkbox % #1 {\ifincolor\@EA\docolormarkbox\else\@EA\gobbletwoarguments\fi0} %D \macros %D {showwhatsits, dontshowwhatsits} %D %D \TEX\ has three so called whatsits: \type {\mark}, \type %D {\write} and \type {\special}. The first one keeps track of %D the current state at page boundaries, the last two are used %D to communicate to the outside world. Due to fact that %D especially \type {\write} is often used in conjunction with %D \type {\edef}, we can only savely support that one in \ETEX. %D %D \bgroup \showwhatsits \setupcolors[state=start] %D %D Whatsits show up \color[blue]{in color} and are %D characterized bij their first character.\footnote [some note] %D {So we may encounter \type {w}, \type {m} and \type{s}.} %D They are \writestatus{dummy}{demo}\color[yellow]{stacked}. %D %D \egroup \newif\ifimmediatewrite \ifx\eTeXversion\undefined \let\showwhatsits \relax \let\dontshowwhatsits\relax \else \let\supernormalmark \normalmark % mark may already been superseded \let\supernormalmarks \normalmarks % mark may already been superseded \def\showwhatsits {\protected\def\normalmark {\visualwhatsit100+m\supernormalmark }% \protected\def\normalmarks{\visualwhatsit100+m\supernormalmarks}% \protected\def\special {\visualwhatsit0100s\normalspecial }% \protected\def\write {\visualwhatsit001-w\normalwrite }% \let\immediate\immediatewhatsit \appendtoks\dontshowwhatsits\to\everystoptext} \def\immediatewhatsit {\bgroup\futurelet\next\doimmediatewhatsit} \def\doimmediatewhatsit {\ifx\next\write \egroup\immediatewritetrue \else \egroup\expandafter\normalimmediate \fi} \def\dontshowwhatsits {\let\immediate \normalimmediate \let\normalmark\supernormalmark \let\special \normalspecial \let\write \normalwrite} \def\visualwhatsit#1#2#3#4#5% {\bgroup \pushwhatsit \dontinterfere \dontcomplain \dontshowcomposition \dontshowwhatsits \ttx \ifvmode\donetrue\else\donefalse\fi \setbox\scratchbox\hbox {\ifdone\dostartgraycolormode0\else\dostartrgbcolormode#1#2#3\fi #5\dostopcolormode}% \setbox\scratchbox\hbox {\ifdone\dostartrgbcolormode#1#2#3\else\dostartgraycolormode0\fi \vrule\!!width\wd\scratchbox\dostopcolormode \hskip-\wd\scratchbox\box\scratchbox}% \scratchdimen1ex \setbox\scratchbox\hbox {\ifdone\hskip\else\raise#4\fi\scratchdimen\box\scratchbox}% \smashbox\scratchbox \ifdone\nointerlineskip\fi \box\scratchbox \ifvmode\nointerlineskip\fi \popwhatsit \egroup \ifimmediatewrite \immediatewritefalse \expandafter\normalimmediate \fi} \def\pushwhatsit {\ifzeropt\lastskip \ifcase\lastpenalty \ifzeropt\lastkern \ifhmode \let\popwhatsit\relax \else \edef\popwhatsit{\prevdepth\the\prevdepth}% \fi \else \ifhmode \edef\popwhatsit{\kern\the\lastkern}\unkern \else \edef\popwhatsit{\kern\the\lastkern\prevdepth\the\prevdepth}% \kern-\lastkern \fi \fi \else \ifhmode \edef\popwhatsit{\the\lastpenalty}% \unpenalty \else \edef\popwhatsit{\penalty\the\lastpenalty\prevdepth\the\prevdepth}% %\nobreak \fi \fi \else \ifhmode \edef\popwhatsit{\hskip\the\lastskip}\unskip \else \edef\popwhatsit{\vskip\the\lastskip\prevdepth\the\prevdepth}% \vskip-\lastskip \fi \fi} \fi %D The next macro can be used to keep track of classes of %D boxes (handy for development cq.\ tracing). \def\dodotagbox#1#2#3% can be reimplemented {\def\next##1##2##3##4% {\vbox to \ht#2{##3\hbox to \wd#2{##1#3##2}##4}}% \processaction [#1] [ l=>\next\relax\hfill\vfill\vfill, r=>\next\hfill\relax\vfill\vfill, t=>\next\hfill\hfill\relax\vfill, b=>\next\hfill\hfill\vfill\relax, lt=>\next\relax\hfill\relax\vfill, lb=>\next\relax\hfill\vfill\relax, rt=>\next\hfill\relax\relax\vfill, rb=>\next\hfill\relax\vfill\relax, tl=>\next\relax\hfill\relax\vfill, bl=>\next\relax\hfill\vfill\relax, tr=>\next\hfill\relax\relax\vfill, br=>\next\hfill\relax\vfill\relax, \s!default=>\next\hfill\hfill\vfill\vfill, \s!unknown=>\next\hfill\hfill\vfill\vfill]} \def\dotagbox[#1]#2% {\bgroup \dowithnextbox {\setbox\scratchbox\flushnextbox \setbox\nextbox\ifhbox\nextbox\hbox\else\vbox\fi \bgroup \startoverlay {\copy\scratchbox} {\dodotagbox{#1}\scratchbox{\framed [\c!background=\v!screen,\c!backgroundscreen=1]{#2}}} \stopoverlay \egroup \nextboxwd\the\wd\scratchbox \nextboxht\the\ht\scratchbox \nextboxdp\the\dp\scratchbox \flushnextbox \egroup}} \def\tagbox {\dosingleempty\dotagbox} %D \macros %D {coloredhbox,coloredvbox,coloredvtop, %D coloredstrut} %D %D The following visualizations are used in some of the manuals: \definecolor[boxcolor:ht][r=.5,g=.75,b=.5] \definecolor[boxcolor:dp][r=.5,g=.5,b=.75] \definecolor[boxcolor:wd][r=.75,g=.5,b=.5] \definecolor[strutcolor] [r=.5,g=.25,b=.25] \def\coloredbox#1% {\dowithnextbox{#1{\hbox {\blackrule[\c!width=\nextboxwd,\c!height=\nextboxht,\c!depth=\zeropoint,\c!color=boxcolor:ht]% \hskip-\nextboxwd \blackrule[\c!width=\nextboxwd,\c!height=\zeropoint,\c!depth=\nextboxdp,\c!color=boxcolor:dp]% \hskip-\nextboxwd \box\nextbox}}}#1} \def\coloredhbox{\coloredbox\hbox} \def\coloredvbox{\coloredbox\vbox} \def\coloredvtop{\coloredbox\vtop} \def\coloredstrut {\color[strutcolor]{\def\strutwidth{2\points}\setstrut\strut}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pdf.mkii0000644000175000017500000026166111754241457024267 0ustar norbertnorbert%D \module %D [ file=meta-pdf, %D version=2006.06.07, %D title=\METAPOST\ Graphics, %D subtitle=Conversion to \PDF, %D author=Hans Hagen \& others (see text), %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Formerly known as supp-pdf.tex and supp-mpe.tex. %D We will clean up the color mess later. %D These macros are written as generic as possible. Some %D general support macro's are loaded from a small module %D especially made for non \CONTEXT\ use. In this module I %D use a matrix transformation macro written by Tanmoy %D Bhattacharya. Thanks to extensive testing by Sebastian %D Ratz I was able to complete this module within reasonable %D time. This module has support for \METAPOST\ extensions %D built in. %D %D Daniel H. Luecking came up with a better (more precise) %D transformation method. You can recognize his comment by %D his initials. (We keep the old code around because it's a %D nice illustration on how a module like this evolves.) % Beware, we cannot use 0pt here by defaukt since it may be % defined in the range \dimen 0 - 20 which we happen to use % as scratch registers; for this reason we start allocating % scratch registers > 20 %D This module handles some \PDF\ conversion and insertions %D topics. By default, the macros use the \PDFTEX\ primitive %D \type{\pdfliteral} when available. Since \PDFTEX\ is now the %D default engine for \TEX\ distributions, we need a more complex %D test. \writestatus{loading}{MetaPost Graphics / MPS to PDF} \unprotect \ifx\PDFcode \undefined \let\PDFcode \gobbleoneargument \fi \ifx\PDFcomment\undefined \def\PDFcomment#1{\PDFcode{\letterpercent\space#1}} \fi %D First we define a handy constant: \bgroup \catcode`\%=\@@other \xdef\letterpercent{\string%} \egroup %D \macros %D {pdfimage,pdfimages,pdfclippedimage} %D %D Starting with pdftex version 14, images are included more %D natural to the form embedding. This enables alternative %D images to be embedded. %D %D \starttyping %D \pdfimage {file} %D \pdfimages {high res file} {low res file} %D \stoptyping %D %D The first one replaces the pre||version||14 original, %D while the latter provides alternative images. %D %D The next macro is dedicated to Maarten Gelderman, who %D needed to paste prepared \PDF\ pages into conference %D proceedings. %D %D \starttyping %D \pdfclippedimage {file} {l} {r} {t} {b} %D \stoptyping \ifx\pdftexversion\undefined \else \ifnum\pdftexversion>13 % still relevant? \def\pdfimage#1#% {\dopdfimage{#1}} \def\dopdfimage#1#2% {\immediate\pdfximage#1{#2}% \pdfrefximage\pdflastximage} \def\pdfimages#1#% {\dopdfimages{#1}} \def\dopdfimages#1#2#3% {\immediate\pdfximage#1{#2}% \immediate\pdfobj{[ << /Image \the\pdflastximage\space0 R /DefaultForPrinting true >> ]}% \immediate\pdfximage#1 attr {/Alternates \the\pdflastobj\space0 R}{#3}% \pdfrefximage\pdflastximage} \def\pdfclippedimage#1#% specs {file}{left}{right}{top}{bottom} {\dopdfclippedimage{#1}} \def\dopdfclippedimage#1#2#3#4#5#6% {\bgroup \pdfximage#1{#2}% \setbox\scratchbox\hbox{\pdfrefximage\pdflastximage}% \hsize\dimexpr\wd\scratchbox-#3-#4\relax \vsize\dimexpr\ht\scratchbox-#5-#6\relax \setbox\scratchbox\vbox to \vsize {\vskip-#5\hbox to \hsize{\hskip-#3\box\scratchbox\hss}}% \pdfxform\scratchbox \pdfrefxform\pdflastxform \egroup} \fi \fi %D \macros %D {convertMPtoPDF} %D %D The next set of macros implements \METAPOST\ to \PDF\ %D conversion. The traditional method is in the MkII file. %D The main conversion command is: %D %D \starttyping %D \convertMPtoPDF {filename} {x scale} {y scale} %D \stoptyping %D %D The dimensions are derived from the bounding box. So we %D only have to say: %D %D \starttyping %D \convertMPtoPDF{mp-pra-1.eps}{1}{1} %D \convertMPtoPDF{mp-pra-1.eps}{.5}{.5} %D \stoptyping %D \macros %D {makeMPintoPDFobject,lastPDFMPobject} %D %D For experts there are a few more options. When attributes %D are to be added, the code must be embedded in an object %D accompanied with the appropriate directives. One can %D influence this process with \type {\makeMPintoPDFobject}. %D %D This option defaults to~0, because \CONTEXT\ takes care %D of objects at another level, which saves some bytes. %D %D \starttabulate[|l|l|p|] %D \NC 0 \NC never \NC don't use an object \NC\NR %D \NC 1 \NC always \NC always use an object \NC\NR %D \NC 2 \NC optional \NC use object when needed \NC\NR %D \stoptabulate %D %D The last object number used is avaliable in the macro %D \type {\lastPDFMPobject}. \ifx\makeMPintoPDFobject \undefined \newcount\makeMPintoPDFobject \fi \ifx\blackoutMPgraphic \undefined \chardef\blackoutMPgraphic\plusone \fi \ifx\everyMPtoPDFconversion\undefined \newtoks\everyMPtoPDFconversion \fi \let\lastPDFMPobject \!!zerocount \let\currentPDFresources\empty \let\setMPextensions \relax \def\PDFMPformoffset {\ifx\objectoffset\undefined\zeropoint\else\objectoffset\fi} \def\resetMPvariables#1#2#3% {\global\let\MPwidth \!!zeropoint \global\let\MPheight\!!zeropoint \global\let\MPllx \!!zerocount \global\let\MPlly \!!zerocount \global\let\MPurx \!!zerocount \global\let\MPury \!!zerocount \xdef\MPxscale {#2}\ifx\MPxscale\empty\let\MPxscale\!!plusone\fi \xdef\MPyscale {#3}\ifx\MPyscale\empty\let\MPyscale\!!plusone\fi \xdef\MPfilename {#1}} %D The main macro: \def\convertMPtoPDF#1#2#3% {\resetMPvariables{#1}{#2}{#3}% \vbox\bgroup \forgetall \offinterlineskip \ifx\pdfdecimaldigits\undefined\else \pdfdecimaldigits=5 \fi % new \global\let\MPheight\!!zeropoint \global\let\MPwidth \!!zeropoint \setbox\scratchbox\vbox\bgroup \message{[MP to PDF]}% \startMPresources \PDFcomment{mps begin}% \PDFcode{q}% \PDFcode{1 0 0 1 0 0 cm}% \ifcase\blackoutMPgraphic\or\PDFcode{0 g 0 G}\fi \doprocessMPtoPDFfile} \def\processMPtoPDFfile#1#2#3% obsolete {\resetMPvariables{#1}{#2}{#3}% \bgroup \let\finishMPgraphic\egroup \doprocessMPtoPDFfile} \def\doprocessMPtoPDFfile {\setMPspecials \setMPextensions \the\everyMPtoPDFconversion \catcode`\^^M=\@@endofline \startMPscanning \let\do\empty \donefalse \let\handleMPsequence\dohandleMPsequence \input\MPfilename\relax} \def\finishMPgraphic {\PDFcode{Q}% \PDFcomment{mps end}% \stopMPresources \egroup \setbox\scratchbox\hbox\bgroup \hskip-\MPllx\onebasepoint \raise-\MPlly\onebasepoint \box\scratchbox \egroup \setbox\scratchbox\vbox to \MPheight\bgroup \vfill \hsize\MPwidth \smashbox\scratchbox \box\scratchbox \egroup \wd\scratchbox\MPwidth \ht\scratchbox\MPheight \dopackageMPgraphic\scratchbox \egroup \endinput} %D A common hook. \let\MPfshowcommand\empty %D Objects. \def\dopackageMPgraphic#1% #1 = boxregister {\ifcase\makeMPintoPDFobject\or\or\ifx\currentPDFresources\empty\else % an existing value of 2 signals object support (set elsewhere) \makeMPintoPDFobject\plusone \fi\fi \ifcase\makeMPintoPDFobject \box#1% \or \scratchdimen\PDFMPformoffset\relax \ifdim\scratchdimen>\zeropoint % compensate for error \setbox#1\vbox spread 2\scratchdimen {\forgetall\vss\hbox spread 2\scratchdimen{\hss\box#1\hss}\vss}% \fi \setMPPDFobject{\currentPDFresources}{#1}% \ifdim\scratchdimen>\zeropoint % compensate for error \vbox to \MPheight {\forgetall\vss\hbox to \MPwidth{\hss\getMPPDFobject\hss}\vss}% \else \getMPPDFobject \fi \global\let\currentPDFresources\empty \else \box#1% \fi} \def\setMPPDFobject#1#2% resources boxnumber {\ifx\pdfxform\undefined \def\getMPPDFobject{\box#2}% \else\ifx\pdftexversion\undefined \def\getMPPDFobject{\box#2}% \else\ifnum\pdftexversion<14 \def\getMPPDFobject{\box#2}% \else \ifx\everyPDFxform\undefined\else\the\everyPDFxform\fi \immediate\pdfxform resources{#1}#2% \edef\getMPPDFobject{\noexpand\pdfrefxform\the\pdflastxform}% \fi\fi\fi} \let\getMPPDFobject\relax %D \macros %D {deleteMPgraphic, %D startMPresources, %D stopMPresources} \ifx\deleteMPgraphic\undefined \def\deleteMPgraphic#1{} \fi \ifx\startMPresources\undefined \let\startMPresources\relax \let\stopMPresources\relax \fi %D We implement extensions by using the \METAPOST\ special %D mechanism. Opposite to \TEX's specials, the \METAPOST\ ones %D are flushed before or after the graphic data, but thereby %D are no longer connected to a position. %D %D We implement specials by overloading the \type {fill} %D operator. By counting the fills, we can let the converter %D treat the appropriate fill in a special way. The %D specification of the speciality can have two forms, %D determined by the setting of a boolean variable: %D %D \starttyping %D _inline_specials_ := false ; % comment like code (default) %D _inline_specials_ := true ; % command like code %D \stoptyping %D %D When the specification is embedded as comment, it looks %D like: %D %D \starttyping %D %%MetaPostSpecial %D \stoptyping %D %D The in||line alternative is more tuned for \POSTSCRIPT, %D since it permits us to define a macro \type {special}. %D %D \starttyping %D inline : special %D \stoptyping %D %D The \type {identifier} determines what to do, and the data %D can be used to accomplish this. A type~2 shading function %D has identifier~2. Alltogether, the number of parameters is %D specified in \type {size}. The \type {number} is the number %D of the fill that needs the special treatment. For a type~2 %D and~3 shaded fill, the datablock contains the following %D data: %D %D \starttyping %D from to n inner_r g b x y outer_r g b x y %D from to n inner_r g b x y radius outer_r g b x y radius %D \stoptyping \newconditional\manyMPspecials \settrue\manyMPspecials %D In case of \PDF, we need to prepare resourcs. \newtoks\MPstartresources \newtoks\MPstopresources \def\startMPresources {\the\MPstartresources} \def\stopMPresources {\the\MPstopresources} %D Some day we may consider collecting local resources. \appendtoks \global\let\currentPDFresources\empty % kind of redundant \to \MPstartresources % \appendtoks % \collectPDFresources % \global\let\currentPDFresources\collectedPDFresources % \to \MPstopresources \appendtoksonce \the\everyPDFxform \to \MPstopresources %D Since colors are not subjected to transformations, we can %D only use colors as signal. In our case, we use a dummy colored %D path with a red color component of \type {0.n}, so \type %D {0.001} is the first path and \type {0.010} the tenth. Since %D \METAPOST strips trailing zeros, we have to padd the string. \newif\ifMPcmykcolors \newif\ifMPspotcolors \def\dohandleMPrgb #1#2#3{\revokeMPtransparencyspecial\execcolorR #1:#2:#3:0:0\od} \def\dohandleMPcmyk#1#2#3#4{\revokeMPtransparencyspecial\execcolorC#1:#2:#3:#4:0:0\od} \def\dohandleMPgray #1{\revokeMPtransparencyspecial\execcolorS #1:0:0\od} \def\dohandleMPspot#1#2#3#4{\revokeMPtransparencyspecial\execcolorP#1:#2:#3:#4:0:0\od} %D Specials: \settrue \manyMPspecials \newcount\nofMParguments \let\extraMPpathcode\empty \def\@@MP {@@MP} \def\@@MPSK{@MPSK@} \def\MPspecial{\@@MPSK\@@MPSK\gMPs\nofMParguments} \def\defineMPspecial#1#2% {\setvalue{\@@MPSK\@@MPSK#1}{#2}} %D Special number~1 is dedicated to \CMYK\ support. If you %D want to know why: look at this: %D %D \startbuffer[mp] %D fill fullcircle xyscaled (3cm,1cm) withcolor \MPcolor{test} ; %D \stopbuffer %D %D \startbuffer[cmyk] %D \startcombination[4*1] %D {\definecolor[test][c=1,y=.3,k=.3] \processMPbuffer[mp]} {c=1 y=.3 k=.3} %D {\definecolor[test][c=.9,y=.15] \processMPbuffer[mp]} {c=.9 y=.15} %D {\definecolor[test][c=.25,y=.8] \processMPbuffer[mp]} {c=.25 y=.8} %D {\definecolor[test][c=.45,y=.1] \processMPbuffer[mp]} {c=.45 y=.1} %D \stopcombination %D \stopbuffer %D %D \placefigure %D {\CMYK\ support disabled, %D conversion to \RGB.} %D {\setupcolors[cmyk=nee,state=start]\getbuffer[cmyk]} %D %D \placefigure %D {\CMYK\ support enabled, %D no support in \METAPOST.} %D {\setupcolors[cmyk=ja,mpcmyk=nee,state=start]\getbuffer[cmyk]} %D %D \placefigure %D {\CMYK\ support enabled, %D no conversion to \RGB, %D support in \METAPOST} %D {\setupcolors[cmyk=ja,state=start]\getbuffer[cmyk]} \defineMPspecial{1} {\ifMPcmykcolors \setxvalue{\@@MPSK\gMPs6}{\noexpand\dohandleMPcmykcolor{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}}% \fi} \defineMPspecial{2} {\ifMPspotcolors \setxvalue{\@@MPSK\gMPs6}{\noexpand\dohandleMPspotcolor{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}}% % \checkMPspot{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}% \fi} % \def\checkMPspot#1#2#3#4% % {\expanded{\resolveMPspotcolor#1 #2 #3 #4}\end % \ifx\MPspotspace\MPresolvedspace % \edef\MPspotspacespec{/\MPspotspace\space}% % \doifinstringelse\MPspotspacespec\currentMPcolorspaces % \donothing\registerMPcolorspace % \fi} \let\revokeMPtransparencyspecial\relax \def\dohandleMPrgbcolor #1#2#3{\revokeMPtransparencyspecial\execcolorR #1:#2:#3:0:0\od} \def\dohandleMPcmykcolor#1#2#3#4{\revokeMPtransparencyspecial\execcolorC#1:#2:#3:#4:0:0\od} \def\dohandleMPgraycolor #1{\revokeMPtransparencyspecial\execcolorS #1:0:0\od} \def\dohandleMPspotcolor#1#2#3#4{\revokeMPtransparencyspecial\execcolorP#1:#2:#3:#4:0:0\od} %D Transparency support used specials 60 (rgb) and 61 %D (cmyk). %D %D \startbufferFshade %D u := 2cm ; path p ; p := fullcircle scaled u shifted (u/4,0); %D %D fill p rotated 90 withcolor transparent(1,.5,yellow) ; %D fill p rotated 210 withcolor transparent(1,.5,green) ; %D fill p rotated 330 withcolor transparent(1,.5,blue) ; %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection \processMPbuffer \stoplinecorrection %D %D One can also communicate colors between \CONTEXT\ and %D \METAPOST: %D %D \startbuffer %D \definecolor[tcyan] [c=1,k=.2,t=.5] %D \definecolor[tmagenta][m=1,k=.2,t=.5] %D \definecolor[tyellow] [y=1,k=.2,t=.5] %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D u := 2cm ; path p ; p := fullcircle scaled u shifted (u/4,0); %D %D fill p rotated 90 withcolor \MPcolor{tcyan} ; %D fill p rotated 210 withcolor \MPcolor{tmagenta} ; %D fill p rotated 330 withcolor \MPcolor{tyellow} ; %D \stopbuffer %D %D \startlinecorrection \processMPbuffer \stoplinecorrection %D %D We save all the three components needed in one macro, %D just to save hash space. \def\dohandleMPrgbtransparency #1#2#3#4#5{\execcolorR #1:#2:#3:#4:#5\od\let\revokeMPtransparencyspecial\dorevokeMPtransparencyspecial} \def\dohandleMPcmyktransparency#1#2#3#4#5#6{\execcolorC#1:#2:#3:#4:#5:#6\od\let\revokeMPtransparencyspecial\dorevokeMPtransparencyspecial} \def\dohandleMPgraytransparency #1#2#3{\execcolorS #1:#2:#3\od\let\revokeMPtransparencyspecial\dorevokeMPtransparencyspecial} \def\dohandleMPspottransparency#1#2#3#4#5#6{\execcolorP#1:#2:#3:#4:#5:#6\od\let\revokeMPtransparencyspecial\dorevokeMPtransparencyspecial} \def\dorevokeMPtransparencyspecial {\PDFcode{\PDFtransparencyresetidentifier\space gs}% \let\revokeMPtransparencyspecial\relax} \defineMPspecial{3} % rgb {\setxvalue{\@@MPSK\gMPs6}{\noexpand\dohandleMPrgbtransparency{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs1}{\gMPs2}}} \defineMPspecial{4} % cmyk {\setxvalue{\@@MPSK\gMPs7}{\noexpand\dohandleMPcmyktransparency{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs1}{\gMPs2}}} \defineMPspecial{5} % spot {\setxvalue{\@@MPSK\gMPs7}{\noexpand\dohandleMPspottransparency{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs1}{\gMPs2}}% }%\checkMPspot{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}} %D Shading is an example of a more advanced graphic feature, %D but users will seldom encounter those complications. Here %D we only show a few simple examples, but many other %D alternatives are possible by setting up the functions built %D in \PDF\ in the appropriate way. %D %D Shading has to do with interpolation between two or more %D points or user supplied ranges. In \PDF, the specifications %D of a shade has to be encapsulated in objects and passed on %D as resources. This is a \PDF\ level 1.3. feature. One can %D simulate three dimensional shades as well and define simple %D functions using a limited set of \POSTSCRIPT\ primitives. %D Given the power of \METAPOST\ and these \PDF\ features, we %D can achieve superb graphic effects. %D %D Since everything is hidden in \TEX\ and \METAPOST\ graphics, %D we can stick to high level \CONTEXT\ command, as shown in %D the following exmples. %D %D \startbuffer %D \startuniqueMPgraphic{CircularShade} %D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ; %D circular_shade(p,0,.2red,.9red) ; %D \stopuniqueMPgraphic %D %D \startuniqueMPgraphic{LinearShade} %D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ; %D linear_shade(p,0,.2blue,.9blue) ; %D \stopuniqueMPgraphic %D %D \startuniqueMPgraphic{DuotoneShade} %D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ; %D linear_shade(p,2,.5green,.5red) ; %D \stopuniqueMPgraphic %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D These graphics can be hooked into the overlay mechanism, %D which is available in many commands. %D %D \startbuffer %D \defineoverlay[demo 1][\uniqueMPgraphic{CircularShade}] %D \defineoverlay[demo 2][\uniqueMPgraphic {LinearShade}] %D \defineoverlay[demo 3][\uniqueMPgraphic {DuotoneShade}] %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D These backgrounds can for instance be applied to \type %D {\framed}: %D %D \startbuffer %D \setupframed[width=3cm,height=2cm,frame=off] %D \startcombination[3*1] %D {\framed[backgroundachtergrond=demo 1]{\bfd \white Demo 1}} {} %D {\framed[backgroundachtergrond=demo 2]{\bfd \white Demo 2}} {} %D {\framed[backgroundachtergrond=demo 3]{\bfd \white Demo 3}} {} %D \stopcombination %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D There are a few more alternatives, determined by the second %D parameter passed to \type {circular_shade} and alike. %D %D \def\SomeShade#1#2#3#4#5% %D {\startuniqueMPgraphic{Shade-#1} %D width := \overlaywidth ; %D height := \overlayheight ; %D path p ; p := unitsquare xscaled width yscaled height ; %D #2_shade(p,#3,#4,#5) ; %D \stopuniqueMPgraphic %D \defineoverlay[Shade-#1][\uniqueMPgraphic{Shade-#1}]% %D \framed[backgroundachtergrond=Shade-#1,width=2cm,height=2cm,frame=off]{}} %D %D \startlinecorrection %D \startcombination[5*1] %D {\SomeShade{10}{circular}{0}{.3blue}{.9blue}} {circular 0} %D {\SomeShade{11}{circular}{1}{.3blue}{.9blue}} {circular 1} %D {\SomeShade{12}{circular}{2}{.3blue}{.9blue}} {circular 2} %D {\SomeShade{13}{circular}{3}{.3blue}{.9blue}} {circular 3} %D {\SomeShade{14}{circular}{4}{.3blue}{.9blue}} {circular 4} %D \stopcombination %D \stoplinecorrection %D %D \blank %D %D \startlinecorrection %D \startcombination[5*1] %D {\SomeShade{20}{circular}{0}{.9green}{.3green}} {circular 0} %D {\SomeShade{21}{circular}{1}{.9green}{.3green}} {circular 1} %D {\SomeShade{22}{circular}{2}{.9green}{.3green}} {circular 2} %D {\SomeShade{23}{circular}{3}{.9green}{.3green}} {circular 3} %D {\SomeShade{24}{circular}{4}{.9green}{.3green}} {circular 4} %D \stopcombination %D \stoplinecorrection %D %D \blank %D %D \startlinecorrection %D \startcombination[4*1] %D {\SomeShade{30}{linear}{0}{.3red}{.9red}} {linear 0} %D {\SomeShade{31}{linear}{1}{.3red}{.9red}} {linear 1} %D {\SomeShade{32}{linear}{2}{.3red}{.9red}} {linear 2} %D {\SomeShade{33}{linear}{3}{.3red}{.9red}} {linear 3} %D \stopcombination %D \stoplinecorrection %D %D These macros closely cooperate with the \METAPOST\ module %D \type {mp-spec.mp}, which is part of the \CONTEXT\ %D distribution. %D %D The low level (\PDF) implementation is based on the \TEX\ %D based \METAPOST\ to \PDF\ converter. Shading is supported %D by overloading the \type {fill} operator as implemented %D earlier. In \PDF\ type~2 and~3 shading functions are %D specified in terms of: %D %D \starttabulate[|Tl|l|] %D \NC /Domain \NC sort of meeting range \NC \NR %D \NC /C0 \NC inner shade \NC \NR %D \NC /C1 \NC outer shade \NC \NR %D \NC /N \NC smaller values, bigger inner circles \NC \NR %D \stoptabulate \newcount\currentPDFshade % 0 % global (document wide) counter % \def\dosetMPsomePDFshade#1#2% generic but needs refs % {\global\advance\currentPDFshade \plusone % \doPDFdictionaryobject{FDF}{ftn:Sh:\the\currentPDFshade} % {/FunctionType 2 % /Domain [\gMPs1 \gMPs2] % /C0 [\MPshadeA] % /C1 [\MPshadeB] % /N \gMPs3}% % \doPDFgetobjectreference{FDF}{ftn:Sh:\the\currentPDFshade}\PDFobjectreference % \doPDFdictionaryobject{FDF}{obj:Sh:\the\currentPDFshade} % {/ShadingType #1 % /ColorSpace /\MPresolvedspace % /Function \PDFobjectreference\space % /Coords [\MPshadeC] % /Extend [true true]}% % \doPDFgetobjectreference{FDF}{obj:Sh:\the\currentPDFshade}\PDFobjectreference % \appendtoPDFdocumentshades{/Sh\the\currentPDFshade\space\PDFobjectreference}% % \setxvalue{\@@MPSK#2}{\noexpand\dohandleMPshade{\the\currentPDFshade}}} \def\dosetMPsomePDFshade#1#2% {\immediate\pdfobj {<>}% \immediate\pdfobj {<>}% \global\advance\currentPDFshade \plusone \appendtoPDFdocumentshades{/Sh\the\currentPDFshade\space\the\pdflastobj\space0 R }% \setxvalue{\@@MPSK#2}{\noexpand\dohandleMPshade{\the\currentPDFshade}}} \def\dosetMPlinearshade {\dosetMPsomePDFshade2}% #1 \def\dosetMPcircularshade{\dosetMPsomePDFshade3}% #1 \defineMPspecial{30} {\expanded{\resolveMPrgbcolor{\gMPs4}{\gMPs5}{\gMPs6}}\to\MPshadeA \expanded{\resolveMPrgbcolor{\gMPs{9}}{\gMPs{10}}{\gMPs{11}}}\to\MPshadeB \edef\MPshadeC{\gMPs7 \gMPs8 \gMPs{12} \gMPs{13}}% \dosetMPlinearshade{\gMPs{14}}} \defineMPspecial{31} {\expanded{\resolveMPrgbcolor{\gMPs4}{\gMPs5}{\gMPs6}}\to\MPshadeA \expanded{\resolveMPrgbcolor{\gMPs{10}}{\gMPs{11}}{\gMPs{12}}}\to\MPshadeB \edef\MPshadeC{\gMPs7 \gMPs8 \gMPs9 \gMPs{13} \gMPs{14} \gMPs{15}}% \dosetMPcircularshade{\gMPs{16}}} \defineMPspecial{32} {\expanded{\resolveMPcmykcolor{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}}\to\MPshadeA \expanded{\resolveMPcmykcolor{\gMPs{10}}{\gMPs{11}}{\gMPs{12}}{\gMPs{13}}}\to\MPshadeB \edef\MPshadeC{\gMPs8 \gMPs9 \gMPs{14} \gMPs{15}}% \dosetMPlinearshade{\gMPs{16}}} \defineMPspecial{33} {\expanded{\resolveMPcmykcolor{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}}\to\MPshadeA \expanded{\resolveMPcmykcolor{\gMPs{11}}{\gMPs{12}}{\gMPs{13}}{\gMPs{14}}}\to\MPshadeB \edef\MPshadeC{\gMPs8 \gMPs9 \gMPs{10} \gMPs{15} \gMPs{16} \gMPs{17}}% \dosetMPcircularshade{\gMPs{18}}} \defineMPspecial{34} {\expanded{\resolveMPspotcolor{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}}\to\MPshadeA \expanded{\resolveMPspotcolor{\gMPs{10}}{\gMPs{11}}{\gMPs{12}}{\gMPs{13}}}\to\MPshadeB \edef\MPshadeC{\gMPs8 \gMPs9 \gMPs{14} \gMPs{15}}% \dosetMPlinearshade{\gMPs{16}}} \defineMPspecial{35} {\expanded{\resolveMPcmykcolor{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}}\to\MPshadeA \expanded{\resolveMPcmykcolor{\gMPs{11}}{\gMPs{12}}{\gMPs{13}}{\gMPs{14}}}\to\MPshadeB \edef\MPshadeC{\gMPs8 \gMPs9 \gMPs{10} \gMPs{15} \gMPs{16} \gMPs{17}}% \dosetMPcircularshade{\gMPs{18}}} \newconditional\ignoreMPpath \def\dohandleMPshade#1% {\revokeMPtransparencyspecial \settrue\ignoreMPpath \def\extraMPpathcode{/Sh#1 sh Q}% \chardef\finiMPpath\zerocount \PDFcode{q /Pattern cs}} %D Figure inclusion is kind of strange to \METAPOST, but when %D Santiago Muelas started discussing this with me, I was able %D to cook up a solution using specials. \defineMPspecial{10} {\setxvalue{\@@MPSK\gMPs8}% {\noexpand\handleMPfigurespecial{\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}{\gMPs8}}} \def\handleMPfigurespecial#1#2#3#4#5#6#7#8% todo : combine with ext fig {\global\letvalue{\@@MPSK#8}\empty \vbox to \zeropoint {\vss \hbox to \zeropoint {\ifcase\pdfoutput\or % will be hooked into the special driver \doiffileelse{#7} {\doifundefinedelse{mps:x:#7} {\immediate\pdfximage\!!width\onebasepoint\!!height\onebasepoint{#7}% \setxvalue{mps:x:#7}{\pdfrefximage\the\pdflastximage}}% {\message{[reusing figure #7]}}% \PDFcode{q #1 #2 #3 #4 #5 #6 cm}% \rlap{\getvalue{mps:x:#7}}% \PDFcode{Q}} {\message{[unknown figure #7]}}% \fi \hss}}} %D An example of using both special features is the %D following. %D %D \starttyping %D \startMPpage %D externalfigure "hakker1b.png" scaled 22cm rotated 10 shifted (-2cm,0cm); %D externalfigure "hakker1b.png" scaled 10cm rotated -10 ; %D externalfigure "hakker1b.png" scaled 7cm rotated 45 shifted (8cm,12cm) ; %D path p ; p := unitcircle xscaled 15cm yscaled 20cm; %D path q ; q := p rotatedaround(center p,90) ; %D path r ; r := buildcycle(p,q) ; clip currentpicture to r ; %D path s ; s := boundingbox currentpicture enlarged 5mm ; %D picture c ; c := currentpicture ; currentpicture := nullpicture ; %D circular_shade(s,0,.2red,.9red) ; %D addto currentpicture also c ; %D \stopMPpage %D \stoptyping %D This is some experimental hyperlink driver that I wrote %D for Mark Wicks. \defineMPspecial{20} {\setxvalue{\@@MPSK\gMPs6}% {\noexpand\handleMPhyperlink{\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}}} \def\handleMPhyperlink#1#2#3#4#5#6% {\global\letvalue{\@@MPSK#6}\empty \setbox\scratchbox\hbox {\setbox\scratchbox\null \wd\scratchbox\dimexpr-#1\onebasepoint+#3\onebasepoint\relax \ht\scratchbox\dimexpr-#2\onebasepoint+#4\onebasepoint\relax \incolorfalse \gotobox{\box\scratchbox}[#5]}% \setbox\scratchbox\hbox {\hskip\dimexpr\MPxoffset\onebasepoint+#1\onebasepoint\relax \raise\dimexpr\MPyoffset\onebasepoint+#2\onebasepoint\relax \box\scratchbox}% \smashbox\scratchbox \box\scratchbox} %D This special (number 50) passes positions to a tex file. %D This method uses a two||pass approach an (mis|)|used the %D context positioning macros. In \type {core-pos} we will %D implement the low level submacro needed. %D %D \startbuffer %D \definelayer[test] %D %D \setlayer %D [test] %D [x=\MPx{somepos-1},y=\MPy{somepos-1}] %D {Whatever we want here!} %D %D \setlayer %D [test] %D [x=\MPx{somepos-2},y=\MPy{somepos-2}] %D {Whatever we need there!} %D %D \startuseMPgraphic{oeps} %D draw fullcircle scaled 6cm withcolor red ; %D register ("somepos-1",1cm,2cm,center currentpicture) ; %D register ("somepos-2",4cm,3cm,(-1cm,-2cm)) ; %D \stopuseMPgraphic %D %D \framed[background=test,offset=overlay]{\useMPgraphic{oeps}} %D \stopbuffer %D %D \typebuffer %D %D Here the width and height are not realy used, but one can %D imagine situations where tex has to work with values %D calculated by \METAPOST. %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D Later we will implement a more convenient macro: %D %D \starttyping %D \setMPlayer [test] [somepos-1] {Whatever we want here!} %D \setMPlayer [test] [somepos-2] {Whatever we need there!} %D \stoptyping \defineMPspecial{50} % x y width height label {\dosavepositionwhd {\gMPs5}% {0}% {\the\dimexpr-\MPllx\onebasepoint+\gMPs1\onebasepoint\relax} {\the\dimexpr\gMPs2\onebasepoint-\scratchdimen+\MPury\onebasepoint\relax}% {\the\dimexpr\gMPs3\onebasepoint\relax}% {\the\dimexpr\gMPs4\onebasepoint\relax}% {0pt}} %D A few auxiliary macros. This will move to colo-ini. \def\MPgrayspace{DeviceGray} \def\MPrgbspace {DeviceRGB} \def\MPcmykspace{DeviceCMYK} \let\MPspotspace\MPgrayspace \def\MPcmykBlack{0 0 0 0} \def\MPcmykWhite{0 0 0 1} \def\startMPcolorresolve {\bgroup \def\dostartgraycolormode##1% {\global\let\MPresolvedspace\MPgrayspace \xdef\MPresolvedcolor{##1}}% \def\dostartrgbcolormode ##1##2##3% {\global\let\MPresolvedspace\MPrgbspace \xdef\MPresolvedcolor{##1 ##2 ##3}}% \def\dostartcmykcolormode##1##2##3##4% {\global\let\MPresolvedspace\MPcmykspace \xdef\MPresolvedcolor{##1 ##2 ##3 ##4}}% \def\dostartspotcolormode##1##2% {\global\let\MPspotspace\empty % left over ? \xdef\MPresolvedspace{##1}% \xdef\MPresolvedcolor{##2}% \global\let\MPspotspace\MPresolvedspace}% signal \dostartgraycolormode\!!zerocount} % kind of hackery initialization \let\stopMPcolorresolve\egroup \def\resolveMPrgbcolor#1#2#3\to#4% {\startMPcolorresolve \execcolorR#1:#2:#3:0:0\od \stopMPcolorresolve \let#4\MPresolvedcolor} \def\resolveMPcmykcolor#1#2#3#4\to#5% {\startMPcolorresolve \execcolorC#1:#2:#3:#4:0:0\od \stopMPcolorresolve \let#5\MPresolvedcolor} \def\resolveMPgraycolor#1\end\to#2% {\startMPcolorresolve \execcolorS#1:0:0\od \stopMPcolorresolve \let#2\MPresolvedcolor} \def\resolveMPspotcolor#1#2#3#4\end\to#5% {\startMPcolorresolve \ifnum#2>\plusone \checkmultitonecolor{#1}% \fi \execcolorP#1:#2:#3:#4:0:0\od \stopMPcolorresolve \let#5\MPresolvedcolor} %D \macros %D {dogetPDFmediabox} %D %D The next macro can be used to find the mediabox of a \PDF\ %D illustration. %D %D \starttyping %D \dogetPDFmediabox %D {filename} %D {new dimen}{new dimen}{new dimen}{new dimen} %D \stoptyping %D %D Beware of dimen clashes: this macro uses the 5~default %D scratch registers! When no file or mediabox is found, the %D dimensions are zeroed. \def\dogetPDFmediabox#1#2#3#4#5% {\bgroup \def\PDFxscale{1}% \def\PDFyscale{1}% \uncatcodespecials \endlinechar\minusone \def\checkPDFtypepage##1/Type /Page##2##3\done% {\ifx##2\relax \else\if##2s% accept /Page and /Pages \let\doprocessPDFline\findPDFmediabox \else \let\doprocessPDFline\findPDFmediabox \fi\fi}% \def\findPDFtypepage {\expandafter\checkPDFtypepage\fileline/Type /Page\relax\done}% \def\checkPDFmediabox##1/MediaBox##2##3\done% {\ifx##2\relax \else \setPDFmediabox##2##3\done \fileprocessedtrue \fi}% \def\findPDFmediabox {\expandafter\checkPDFmediabox\fileline/MediaBox\relax\done}% \let\doprocessPDFline\findPDFtypepage \doprocessfile\scratchread{#1}\doprocessPDFline \egroup \ifx\PDFxoffset\undefined #2=\zeropoint #3=\zeropoint #4=\zeropoint #5=\zeropoint \else #2=\PDFxoffset\onebasepoint #3=\PDFyoffset\onebasepoint #4=\PDFwidth #5=\PDFheight \fi} \def\setPDFboundingbox#1#2#3#4#5#6% {\dimen0=#1\dimen0=#5\dimen0 \ScaledPointsToBigPoints{\number\dimen0}\PDFxoffset \dimen0=#3\dimen0=#5\dimen0 \xdef\PDFwidth{\the\dimen0}% \dimen0=#2\dimen0=#6\dimen0 \ScaledPointsToBigPoints{\number\dimen0}\PDFyoffset \dimen0=#4\dimen0=#6\dimen0 \xdef\PDFheight{\the\dimen0}% \global\let\PDFxoffset\PDFxoffset \global\let\PDFyoffset\PDFyoffset} \def\setPDFmediabox#1[#2 #3 #4 #5]#6\done {\dimen2=#2\onebasepoint\dimen2=-\dimen2 % \dimen2=-#2\onebasepoint also works since tex handles -- \dimen4=#3\onebasepoint\dimen4=-\dimen4 % \dimen4=-#3\onebasepoint also works since tex handles -- \dimen6=#4\onebasepoint\advance\dimen6 \dimen2 \dimen8=#5\onebasepoint\advance\dimen8 \dimen4 \setPDFboundingbox{\dimen2}{\dimen4}{\dimen6}{\dimen8}\PDFxscale\PDFyscale} %D End of soon obsolete code. \startMPinitializations mp_shade_version := 2 ; \stopMPinitializations %D Here comes the traditional \MKII\ converter. %D %D Because we want to test as fast as possible, we first %D define the \POSTSCRIPT\ operators that \METAPOST\ uses. %D We don't define irrelevant ones, because these are %D skipped anyway. %D %D The converter can be made a bit faster by replacing the %D two test macros (the ones with the many \type {\if's}) by %D a call to named branch macros (something \typ {\getvalue %D {xPSmoveto}}. For everyday documents with relatively %D small graphics the gain in speed can be neglected. \def \PScurveto {curveto} \def \PSlineto {lineto} \def \PSmoveto {moveto} \def \PSshowpage {showpage} \def \PSnewpath {newpath} \def \PSfshow {fshow} \def \PSclosepath {closepath} \def \PSfill {fill} \def \PSstroke {stroke} \def \PSclip {clip} \def \PSrlineto {rlineto} \def \PSsetlinejoin {setlinejoin} \def \PSsetlinecap {setlinecap} \def \PSsetmiterlimit {setmiterlimit} \def \PSsetgray {setgray} \def \PSsetrgbcolor {setrgbcolor} \def \PSsetcmykcolor {setcmykcolor} \def \PSsetdash {setdash} \def \PSgsave {gsave} \def \PSgrestore {grestore} \def \PStranslate {translate} \def \PSscale {scale} \def \PSconcat {concat} \def \PSdtransform {dtransform} \def \PSsetlinewidth {setlinewidth} \def \PSpop {pop} \def \PSnfont {nfont} % was needed for TUG98 proceedings \def \PSspecial {special} % extensions to MetaPost %D A previous version set \type {%} to ignore, which %D simplified the following definitions. At the start of %D conversion the percent character was made active again. %D Because the whole graphic is one paragraph (there are no %D empty lines) this does not give the desired effect. This %D went unnoticed untill Scott Pakin sent me a test file %D percent characters in a string. So, from now on we have %D to prefix the following strings with percentages. %D Some day I'll figure out a better solution (line by line reading %D using \ETEX). \edef \PSBoundingBox {\letterpercent\letterpercent BoundingBox:} \edef \PSHiResBoundingBox {\letterpercent\letterpercent HiResBoundingBox:} \edef \PSExactBoundingBox {\letterpercent\letterpercent ExactBoundingBox:} \edef \PSMetaPostSpecial {\letterpercent\letterpercent MetaPostSpecial:} \edef \PSMetaPostSpecials {\letterpercent\letterpercent MetaPostSpecials:} \edef \PSPage {\letterpercent\letterpercent Page:} \edef \PSBeginProlog {\letterpercent\letterpercent BeginProlog} \edef \PSEndProlog {\letterpercent\letterpercent EndProlog} \edef \PSEof {\letterpercent\letterpercent EOF} %D By the way, the \type {setcmykcolor} operator is not %D output by \METAPOST\ but can result from converting the %D \cap{RGB} color specifications, as implemented in %D \type{supp-mps}. %D In \POSTSCRIPT\ arguments precede the operators. Due to the %D fact that in some translations we need access to those %D arguments, and also because sometimes we have to skip them, %D we stack them up. The stack is one||dimensional for non path %D operators and two||dimensional for operators inside a path. %D This is because we have to save the whole path for %D (optional) postprocessing. Values are pushed onto the stack %D by: %D %D \starttyping %D \setMPargument {value} %D \stoptyping %D %D They can be retrieved by the short named macros: %D %D \starttyping %D \gMPa {number} %D \gMPs {number} %D \stoptyping %D %D When scanning a path specification, we also save the %D operator, using %D %D \starttyping %D \setMPkeyword {n} %D \stoptyping %D %D The path drawing operators are coded for speed: \type{clip}, %D \type{stroke}, \type{fill} and \type{fillstroke} become %D 1, 2, 3 and~4. %D %D When processing the path this code can be retrieved %D using %D %D \starttyping %D \getMPkeyword % {n} %D \stoptyping %D %D When setting an argument, the exact position on the stack %D depends on the current value of the \COUNTERS\ %D \type{\nofMPsegments} and \type{\nofMParguments}. \newcount\nofMPsegments \newcount\nofMParguments %D These variables hold the coordinates. The argument part of %D the stack is reset by: %D %D \starttyping %D \resetMPstack %D \stoptyping %D %D We use the prefix \type{@@MP} to keep the stack from %D conflicting with existing macros. To speed up things a bit %D more, we use the constant \type{\@@MP}. \def\@@MP{@@MP} \def\setMPargument% #1% {\advance\nofMParguments \plusone \expandafter\def\csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname} % {#1} \def\letMPargument {\advance\nofMParguments \plusone \expandafter\let\csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname} \def\setMPsequence#1 % {\advance\nofMParguments \plusone \expandafter\def\csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname{#1}% \handleMPsequence} \def\gMPa#1% {\csname\@@MP0\number#1\endcsname} \def\gMPs#1% {\csname\@@MP\the\nofMPsegments\number#1\endcsname} \def\dogMPa#1% {\@EAEAEA\do\csname\@@MP0\number#1\endcsname} \def\setMPkeyword#1 % {\expandafter\def\csname\@@MP\the\nofMPsegments0\endcsname{#1}% \advance\nofMPsegments \plusone \nofMParguments\zerocount} \def\getMPkeyword% #1% {\csname\@@MP\the\nofMPsegments0\endcsname} % {\csname\@@MP#10\endcsname} \def\docleanupMPargument#1% we need this because args can have [ or ] pre/appended {\expandafter\edef\csname\@@MP\the\nofMPsegments\number#1\endcsname {\csname\@@MP\the\nofMPsegments\number#1\endcsname}} %D When we reset the stack, we can assume that all further %D comment is to be ignored and handled in strings. %D By redefining the reset macro after the first call, we %D save some run time. Only use this macro after all %D comments are processed and use the simple alternative %D when dealing with comments. \def\doresetMPstack {\nofMParguments\zerocount} \def\resetMPstack {\let\handleMPgraphic\handleMPendgraphic \let\resetMPstack\doresetMPstack \resetMPstack} %D The arguments are saved with the preceding command %D \type{\do}. By default this command expands to nothing, but %D when we deal with strings it's used to strip off the %D \type{(} and \type{)}. %D %D Strings are kind of tricky, because characters can be %D passed verbatim \type{(hello)}, by octal number %D \type{(\005)} or as command \type{(\()}. We therefore %D cannot simply ignore \type{(} and \type{)}, the way we do %D with \type{[} and \type{]}. Another complication is that %D strings may contain characters that normally have a %D special meaning in \TEX, like \type{$} and \type{{}}. %D %D A previous solution made \type{\} an active character and %D let it look ahead for a number or characters. We had to %D abandon this scheme because of the need for verbatim %D support. The next solution involved some \CATCODE\ %D trickery but works well. \def\octalMPcharacter#1#2#3% {\char'#1#2#3\relax} %D curly braces and squarly brackets are stored in the argument stack %D as part of strings, for instance in: %D %D \starttyping %D /fshow {exch findfont exch scalefont setfont show}bind def %D [3 3 ] 0 setdash %D \stoptyping %D %D but we need to keep them in situation like %D %D \starttyping %D ([bla bla] bla bla) ec-lmr10 9.96265 fshow %D ({bla bla} bla bla) ec-lmr10 9.96265 fshow %D \stoptyping %D %D So, when we store the snippets, we keep the special tokens, and %D when needed we either ignore or obey them %D We could use a catcodetable here. \bgroup \catcode`\|=\@@comment \catcode`\%=\@@active \catcode`\[=\@@active \catcode`\]=\@@active \catcode`\{=\@@active \catcode`\}=\@@active \catcode`B=\@@begingroup \catcode`E=\@@endgroup \gdef\keepMPspecials| B\let%\letterpercent| \def[B\noexpand[E| \def]B\noexpand]E| \def{B\noexpand{E| \def}B\noexpand}EE \gdef\ignoreMPspecials| B\let%\letterpercent| \def[BE| \def]BE| \def{BE| \def}BEE \gdef\obeyMPspecials| B\def%B\char 37\relax E| \def[B\char 91\relax E| \def]B\char 93\relax E| \def{B\char123\relax E| \def}B\char125\relax EE \gdef\setMPspecials| B\setnaturalcatcodes \catcode`\\=\@@escape \catcode`\%=\@@active \catcode`\[=\@@active \catcode`\]=\@@active \catcode`\{=\@@active \catcode`\}=\@@active \lccode`\-=0 | latex sets this to `\- \lccode`\%=`\%| otherwise it's seen as a number \def\(B\char40\relax E| \def\)B\char41\relax E| \def\\B\char92\relax E| \def\0B\octalMPcharacter0E| \def\1B\octalMPcharacter1E| \def\2B\octalMPcharacter2E| \def\3B\octalMPcharacter3E| \def\4B\octalMPcharacter4E| \def\5B\octalMPcharacter5E| \def\6B\octalMPcharacter6E| \def\7B\octalMPcharacter7E| \def\8B\octalMPcharacter8E| \def\9B\octalMPcharacter9EE \egroup %D We use the comment symbol as a sort of trigger. Beware! %D The whole graphic is seen as on eparagraph, which means %D that we cannot change the catcodes in between. \bgroup \catcode`\%=\@@active \gdef\startMPscanning{\let%=\startMPconversion} \egroup %D In earlier versions we used the sequence %D %D \starttyping %D \expandafter\handleMPsequence\input filename\relax %D \stoptyping %D %D Persistent problems in \LATEX\ however forced us to use a %D different scheme. Every \POSTSCRIPT\ file starts with a %D \type{%}, so we temporary make this an active character %D that starts the scanning and redefines itself. (The problem %D originates in the redefinition by \LATEX\ of the %D \type{\input} primitive.) \def\startMPconversion {\keepMPspecials \handleMPsequence} %D Here comes the main loop. Most arguments are numbers. This %D means that they can be recognized by their \type{\lccode}. %D This method saves a lot of processing time. We could %D speed up the conversion by handling the \type{path} %D seperately. \def\dohandleMPsequence#1% {\ifdone \ifcase\lccode`#1\relax \@EAEAEA\dohandleMPsequenceA \else \@EAEAEA\dohandleMPsequenceB \fi \else \@EA\dohandleMPsequenceC \fi#1} \let\dohandleMPsequenceA\setMPsequence \def\installMPSkeywordN#1#2% {\expandafter\def\csname\@@MP:N:#1\endcsname{#2}} \def\installMPSshortcutN#1#2% todo: \let {\expandafter\let\csname\@@MP:N:#1\expandafter\endcsname\csname\@@MP:N:#2\endcsname} \def\dohandleMPsequenceB#1 % {\edef\somestring{#1}% \executeifdefined{\@@MP:N:\somestring}\handleMPgraphic \handleMPsequence} \installMPSkeywordN \PSmoveto {\edef\lastMPmoveX{\gMPa1}% \edef\lastMPmoveY{\gMPa2}% \resetMPstack} \installMPSkeywordN \PSnewpath {\let\handleMPsequence\handleMPpath} \installMPSkeywordN \PSgsave {\PDFcode{q}% \resetMPstack} \installMPSkeywordN \PSgrestore {\PDFcode{Q}% \resetMPstack} \installMPSkeywordN \PSdtransform % == setlinewidth {\let\handleMPsequence\handleMPdtransform} % after that we will encounter more tokens until setlinewidth+pop % or pop+setlinewidth which we catch next; we explicitly need to % reset the stack since [] n setdash may follow; a more clever % approach would be to read on till the condition is met, but it's % the only pop / setlinewidth we will encounter so ... \installMPSkeywordN \PSsetlinewidth {% already handled in dtransform \resetMPstack} \installMPSkeywordN \PSpop {% already handled in dtransform \resetMPstack} \installMPSkeywordN \PSconcat {\cleanupMPconcat \PDFcode{\gMPa1 \gMPa2 \gMPa3 \gMPa4 \gMPa5 \gMPa6 cm}% \resetMPstack} \installMPSkeywordN \PSsetrgbcolor {\handleMPrgbcolor \resetMPstack} \installMPSkeywordN \PSsetcmykcolor {\handleMPcmykcolor \resetMPstack} \installMPSkeywordN \PSsetgray {\handleMPgraycolor \resetMPstack} \installMPSkeywordN \PStranslate {\PDFcode{1 0 0 1 \gMPa1 \gMPa2 cm}% \resetMPstack} \installMPSkeywordN \PSsetdash {\handleMPsetdash \resetMPstack} \installMPSkeywordN \PSsetlinejoin {\PDFcode{\gMPa1 j}% \resetMPstack} \installMPSkeywordN \PSsetmiterlimit {\PDFcode{\gMPa1 M}% \resetMPstack} \installMPSkeywordN \PSfshow {%\PDFcode{n}% removed ! \handleMPfshow \resetMPstack} \installMPSkeywordN \PSsetlinecap {\PDFcode{\gMPa1 J}% \resetMPstack} \installMPSkeywordN \PSrlineto {\flushMPmoveto \PDFcode{\!MP\lastMPmoveX\space\!MP\lastMPmoveY\space l S}% \resetMPmoveto \resetMPstack} \installMPSkeywordN \PSscale {\PDFcode{\gMPa1 0 0 \gMPa2 0 0 cm}% \resetMPstack} \installMPSkeywordN \PSspecial {\handleMPspecialcommand \resetMPstack} \installMPSshortcutN {n} \PSnewpath \installMPSshortcutN {p} \PSclosepath \installMPSshortcutN {l} \PSlineto \installMPSshortcutN {r} \PSrlineto \installMPSshortcutN {m} \PSmoveto \installMPSshortcutN {c} \PScurveto \installMPSshortcutN {C} \PSsetcmykcolor \installMPSshortcutN {G} \PSsetgray \installMPSshortcutN {R} \PSsetrgbcolor \installMPSshortcutN {lj} \PSsetlinejoin \installMPSshortcutN {ml} \PSsetmiterlimit \installMPSshortcutN {lc} \PSsetlinecap \installMPSshortcutN {sd} \PSsetdash \installMPSshortcutN {S} \PSstroke \installMPSshortcutN {F} \PSfill \installMPSshortcutN {W} \PSclip \installMPSshortcutN {q} \PSgsave \installMPSshortcutN {Q} \PSgrestore \installMPSshortcutN {s} \PSscale \installMPSshortcutN {t} \PSconcat \installMPSshortcutN {P} \PSshowpage \installMPSkeywordN {hlw} {\PDFcode{\gMPa1 w}\resetMPstack} \installMPSkeywordN {vlw} {\PDFcode{\gMPa1 w}\resetMPstack} \installMPSkeywordN {rd} {\PDFcode{[] 0 d}\resetMPstack} \def\dohandleMPsequenceC#1 % {\edef\somestring{#1}% \handleMPgraphic \handleMPsequence} %D Since colors are not sensitive to transformations, they %D are sometimes used for signaling. Therefore, we handle them %D separately. The next macro can be redefined if needed. \def\handleMPrgbcolor {\PDFcode{\!MPgMPa1 \!MPgMPa2 \!MPgMPa3 rg \!MPgMPa1 \!MPgMPa2 \!MPgMPa3 RG}} \def\handleMPcmykcolor {\PDFcode{\!MPgMPa1 \!MPgMPa2 \!MPgMPa3 \!MPgMPa4 k \!MPgMPa1 \!MPgMPa2 \!MPgMPa3 \!MPgMPa4 K}} \def\handleMPgraycolor {\PDFcode{\!MPgMPa1 g \!MPgMPa1 G}} \def\handleMPspotcolor {\PDFcode{0 g 0 G}} %D Beginning and ending the graphics is taken care of by the %D macro \type{\handleMPgraphic}, which is redefined when %D the first graphics operator is met. \def\handleMPendgraphic % #1% {\ifx\somestring\PSshowpage \let\handleMPsequence\finishMPgraphic \else\ifx\somestring\PSEof \let\handleMPsequence\finishMPgraphic \else \letMPargument\somestring % {#1}% \fi\fi} \def\handleMPbegingraphic % #1% {\ifx\somestring\PSBoundingBox \def\handleMPsequence{\handleMPboundingbox1}% \else\ifx\somestring\PSHiResBoundingBox \def\handleMPsequence{\handleMPboundingbox2}% \else\ifx\somestring\PSExactBoundingBox \def\handleMPsequence{\handleMPboundingbox3}% \else\ifx\somestring\PSshowpage \let\handleMPsequence\finishMPgraphic \else\ifx\somestring\PSEof \let\handleMPsequence\finishMPgraphic \else\ifx\somestring\PSPage \let\handleMPsequence\handleMPpage \else\ifx\somestring\PSMetaPostSpecials \let\handleMPsequence\handleMPspecialscomment \else\ifx\somestring\PSMetaPostSpecial \let\handleMPsequence\handleMPspecialcomment \else\ifx\somestring\PSBeginProlog \let\handleMPsequence\handleMPprolog \else \letMPargument\somestring % {#1}% \fi\fi\fi\fi\fi\fi\fi\fi\fi} \let\handleMPgraphic=\handleMPbegingraphic %D New: we can best filter the prolog because nowdays it can contain %D quite some code. % hm, catcode mess, so we need to tweak %'s catcode here % \long\expandafter\def\expandafter\handleMPprolog\expandafter#\expandafter1\PSEndProlog% % but today i'm not in the mood for ugly stuff \long\def\handleMPprolog#1EndProlog % {\doresetMPstack \let\handleMPsequence\dohandleMPsequence \handleMPsequence} %D We check for three kind of bounding boxes: the normal one %D and two high precision ones: %D %D \starttyping %D BoundingBox: llx lly ucx ucy %D HiResBoundingBox: llx lly ucx ucy %D ExactBoundingBox: llx lly ucx ucy %D \stoptyping %D %D The original as well as the recalculated dimensions are %D saved for later use. \newif\ifskipemptyMPgraphic \skipemptyMPgraphicfalse \chardef\currentMPboundingbox=0 \def\handleMPboundingbox#1#2 #3 #4 #5 {\ifnum#1>\currentMPboundingbox \chardef\currentMPboundingbox#1\relax \xdef\MPllx {#2}% \xdef\MPlly {#3}% \xdef\MPurx {#4}% \xdef\MPury {#5}% \xdef\MPwidth {\the\dimexpr\MPurx\onebasepoint-\MPllx\onebasepoint\relax}% \xdef\MPheight{\the\dimexpr\MPury\onebasepoint-\MPlly\onebasepoint\relax}% \fi \doresetMPstack \let\handleMPsequence\dohandleMPsequence \let\next\handleMPsequence \ifskipemptyMPgraphic \ifdim\MPheight=\zeropoint\ifdim\MPwidth=\zeropoint \def\next{\endinput\finishMPgraphic}% \fi\fi \fi \next} %D Unless defined otherwise, we simply ignore specialcomments. \def\handleMPspecialcomment {\doresetMPstack \let\handleMPsequence\dohandleMPsequence \handleMPsequence} \let\handleMPspecialscomment\handleMPspecialcomment %D We use the \type{page} comment as a signal that %D stackbuilding can be started. \def\handleMPpage #1 #2 {\doresetMPstack \donetrue \let\handleMPsequence\dohandleMPsequence \handleMPsequence} %D The same applies to the special extensions. \def\handleMPspecialcommand {\doresetMPstack \let\handleMPsequence\dohandleMPsequence \handleMPsequence} %D \METAPOST\ draws its dots by moving to a location and %D invoking \type{0 0 rlineto}. This operator is not %D available in \PDF. Our solution is straightforward: we draw %D a line from $(current\_x, current\_y)$ to itself. This %D means that the arguments of the preceding \type{moveto} have %D to be saved. %D These saved coordinates are also used when we handle the %D texts. Text handling proved to be a bit of a nuisance, but %D finally I saw the light. It proved that we also had to %D take care of \type{(split arguments)}. % \startMPcode % draw btex Ga toch effe f\kern0ptietsen?{}` etex ; % \stopMPcode \newtoks \everyMPshowfont \def\setMPfshowfont#1#2% {\font\temp=#1\space at #2\relax\temp \the\everyMPshowfont} \let\MPfshowcommand\empty \def\dohandleMPfshow {\setbox\scratchbox\hbox {\obeyMPspecials \edef\MPtextsize{\gMPa\nofMParguments}% \def\do(##1){##1}% only works in latest mp \edef\MPtextdata{\dogMPa1}% beware, stack can have more \handleMPtext}% \setbox\scratchbox\hbox {\hskip\lastMPmoveX\onebasepoint \raise\lastMPmoveY\onebasepoint \box\scratchbox}% \smashbox\scratchbox \box\scratchbox} \def\handleMPtext {\handleMPtextnormal} % so we can overload this one later \def\handleMPfshow{\dohandleMPfshow } % so we can overload this one later \def\handleMPtext {\ifnum\nofMParguments>\plusthree \handleMPtextnormal \else \defconvertedcommand\MPtextdata\MPtextdata \expanded{\splitstring\MPtextdata}\at::::\to\MPtexttag\and\MPtextnumber \executeifdefined{handleMPtext\MPtexttag}\handleMPtextnormal \fi} % elsewhere we will implement \handleMPtextmptxt \def\doflushMPtext#1% {\edef\!!stringa{#1}% \@EA\dodoflushMPtext\!!stringa\relax} \def\dodoflushMPtext {\afterassignment\dododoflushMPtext\let\nexttoken=} \def\dododoflushMPtext {\ifx\nexttoken\relax % done \else\ifx\nexttoken\char \@EA\@EA\@EA\dodododoflushMPtext \else {\nexttoken}% \@EA\@EA\@EA\dodoflushMPtext \fi\fi} \def\dodododoflushMPtext {\afterassignment\dododododoflushMPtext\scratchcounter} \def\dododododoflushMPtext {{\char\scratchcounter}\let\next\dodoflushMPtext} \def\handleMPtextnormal {\let\ \relax % mp breaks long lines and appends a \ \ifx\MPtextsize\PSnfont % round font size (to pt) \advance\nofMParguments \minusone \expandafter\scratchdimen\gMPa\nofMParguments\onepoint\relax \ifdim\scratchdimen<\onepoint \def\MPtextsize{1pt}% \else \advance\scratchdimen .5\onepoint \def\MPtextsize##1.##2\relax{\def\MPtextsize{##1pt}}% \expandafter\MPtextsize\the\scratchdimen\relax \fi \else \edef\MPtextsize{\MPtextsize bp}% \fi \advance\nofMParguments \minusone \setMPfshowfont{\gMPa\nofMParguments}\MPtextsize \advance\nofMParguments \minusone \temp \MPfshowcommand {\ifnum\nofMParguments=\plusone \def\do(##1){##1}% \doflushMPtext{\dogMPa1}% \else % can't happen anymore in mp version 1+ % we need to catch ( a ) (a a a) (\123 \123 \123) etc \scratchcounter\plusone \def\dodo##1% Andreas Fieger's bug: (\304...) {\edef\!!stringa{##1\empty\empty}% and another one: ( 11) -> \ifx 11 \ifx\!!stringa\MPspacechar\MPspacechar\else\expandafter##1\fi}% \def\do(##1{\dodo{##1}}% \dogMPa\scratchcounter\MPspacechar \let\do\relax \loop \advance\scratchcounter \plusone \ifnum\scratchcounter<\nofMParguments\relax \gMPa\scratchcounter\MPspacechar \repeat \def\do##1){\dodo{##1}}% \dogMPa\scratchcounter \fi \unskip}} %D You could consider the following definition to be the most %D natural one. % \def\MPspacechar{\space} % normal case \def\MPspacechar{\char32\relax} % old solution does not work with math %D However, the following implementation is more robust, since %D some fonts have funny visible spaces in the space slot. This %D gives a mismatch between the space that \METAPOST\ took into %D account and the \quote {natural} space. This only happens in %D labels, since \type {btex}||\type {etex} thingies don't have %D spaces. This phenomena showed up when preparing the %D \METAFUN\ manual, where Palatino fonts are used. We can %D safely assume that \METAPOST\ considers \type {\char32} to %D be the space. \def\MPspacechar{\setbox\scratchbox\hbox{\char32}\kern\wd\scratchbox} %D Well, this does not work with math fonts, so: \def\MPspacechar{\char32\relax} %D Most operators are just converted and keep their %D arguments. Dashes however need a bit different treatment, %D otherwise \PDF\ viewers complain loudly. Another %D complication is that one argument comes after the \type{]}. %D When reading the data, we simply ignore the array boundary %D characters. We save ourselves some redundant newlines and %D at the same time keep the output readable by packing the %D literals. \def\handleMPsetdash {\bgroup \ignoreMPspecials \let\somestring\empty \scratchcounter\plusone \loop \ifnum\scratchcounter<\nofMParguments \edef\somestring{\somestring\space\gMPa\scratchcounter}% \advance\scratchcounter \plusone \repeat \edef\somestring{[\somestring]\space\gMPa\scratchcounter\space d}% \PDFcode{\somestring}% \egroup} %D The \type{setlinewidth} commands looks a bit complicated. There are %D two alternatives, that result in a similar look in both %D $x$- and $y$-dorection. As John Hobby says: %D %D \startnarrower \switchtobodyfont[ss] %D \starttyping %D x 0 dtransform exch truncate exch idtransform pop setlinewidth %D 0 y dtransform truncate idtransform setlinewidth pop %D \stoptyping %D %D These are just fancy versions of \type{x setlinewidth} and %D \type{y setlinewidth}. The \type{x 0 ...} form is used if %D the path is {\em primarily vertical}. It rounds the width %D so that vertical lines come out an integer number of pixels %D wide in device space. The \type{0 y ...} form does the same %D for paths that are {\em primarily horizontal}. The reason %D why I did this is Knuth insists on getting exactly the %D widths \TEX\ intends for the horizontal and vertical rules %D in \type{btex...etex} output. (Note that PostScript scan %D conversion rules cause a horizontal or vertical line of %D integer width $n$ in device space to come out $n+1$ pixels %D wide, regardless of the phase relative to the pixel grid.) %D \stopnarrower %D %D The common operator in these sequences is \type{dtransform}, %D so we can use this one to trigger setting the linewidth. \def\handleMPdtransform {\ifdim\gMPa1\onepoint>\zeropoint \PDFcode{\gMPa1 w}% \def\next##1 ##2 ##3 ##4 ##5 ##6 {\handleMPsequence}% \else \PDFcode{\gMPa2 w}% \def\next##1 ##2 ##3 ##4 {\handleMPsequence}% \fi \let\handleMPsequence\dohandleMPsequence \resetMPstack \next} %D The most complicated command is \type{concat}. \METAPOST\ %D applies this operator to \type{stroke}. At that moment the %D points set by \type{curveto} and \type{moveto}, are already %D fixed. In \PDF\ however the \type{cm} operator affects the %D points as well as the pen (stroke). Like more \PDF\ %D operators, \type{cm} is defined in a bit ambiguous way. %D The only save route for non||circular penshapes, is saving %D the path, recalculating the points and applying the %D transformation matrix in such a way that we can be sure %D that its behavior is well defined. This comes down to %D inverting the path and applying \type{cm} to that path as %D well as the pen. This all means that we have to save the %D path. %D In \METAPOST\ there are three ways to handle a path $p$: %D %D \starttyping %D draw p; fill p; filldraw p; %D \stoptyping %D %D The last case outputs a \type{gsave fill grestore} before %D \type{stroke}. Handling the path outside the main loops %D saves about 40\% run time.\footnote{We can save some more by %D following the \METAPOST\ output routine, but for the moment %D we keep things simple.} Switching between the main loop and %D the path loop is done by means of the recursely called %D macro \type{\handleMPsequence}. \def\handleMPpath {\chardef\finiMPpath\zerocount \let\closeMPpath\relax \let\flushMPpath\flushnormalMPpath \resetMPstack \nofMPsegments\plusone \let\handleMPsequence\dohandleMPpath \dohandleMPpath} %D Most paths are drawn with simple round pens. Therefore we've %D split up the routine in two. \def\resetMPmoveto {\let\lastMPmoveX\empty \let\lastMPmoveY\empty} \resetMPmoveto \def\flushMPmoveto {\ifx\lastMPmoveX\empty \else \PDFcode{\!MP\lastMPmoveX\space \!MP\lastMPmoveY\space m}% \fi} \def\flushnormalMPsegment {\ifcase\getMPkeyword\relax \flushMPmoveto \resetMPmoveto \PDFcode{\!MPgMPs1 \!MPgMPs2 l}% \or \flushMPmoveto \resetMPmoveto \PDFcode{\!MPgMPs1 \!MPgMPs2 \!MPgMPs3 \!MPgMPs4 \!MPgMPs5 \!MPgMPs6 c}% \or \ifx\lastMPmoveX\empty \else % we assume 0,0 rlineto \flushMPmoveto \PDFcode{\!MP\lastMPmoveX\space \!MP\lastMPmoveY\space l}% \resetMPmoveto \fi \or % \flushMPmoveto % \resetMPmoveto \fi} \def\flushMPconcatmoveto {\ifx\lastMPmoveX\empty\else \doMPconcat\lastMPmoveX\lastMPmoveX\lastMPmoveY\lastMPmoveY \flushMPmoveto \fi} \def\flushconcatMPsegment {\ifcase\getMPkeyword\relax \flushMPconcatmoveto \resetMPmoveto \doMPconcat{\gMPs1}\a{\gMPs2}\b% \PDFcode{\!MP\a\space\!MP\b\space l}% \or \flushMPconcatmoveto \resetMPmoveto \doMPconcat{\gMPs1}\a{\gMPs2}\b% \doMPconcat{\gMPs3}\c{\gMPs4}\d% \doMPconcat{\gMPs5}\e{\gMPs6}\f% \PDFcode{\!MP\a\space\!MP\b\space \!MP\c\space\!MP\d\space \!MP\e\space\!MP\f\space c}% \or % rather mp specific ... rline always has 0,0 \bgroup \noMPtranslate \flushMPconcatmoveto % next should be \lastMPmoveX+\a,\lastMPmoveY+\b but we know it's 0,0 \PDFcode{\!MP\lastMPmoveX\space\!MP\lastMPmoveY\space l S}% \resetMPmoveto \egroup \or % \flushMPconcatmoveto % \resetMPmoveto \fi} \def\doflushsomeMPpath {\dodoflushsomeMPpath \advance\nofMPsegments \plusone \ifnum\nofMPsegments<\scratchcounter \expandafter\doflushsomeMPpath \fi} \def\flushsomeMPpath {\scratchcounter\nofMPsegments \nofMPsegments\plusone \doflushsomeMPpath} \def\flushnormalMPpath{\let\dodoflushsomeMPpath\flushnormalMPsegment\flushsomeMPpath} %OLD \def\flushconcatMPpath{\let\dodoflushsomeMPpath\flushconcatMPsegment\flushsomeMPpath} %NEW pre-calculate 1/D so it needn't be repeated for each control point. \def\flushconcatMPpath {\MPreciprocaldeterminant \let\dodoflushsomeMPpath\flushconcatMPsegment\flushsomeMPpath} %D The transformation of the coordinates is handled by one of %D the macros Tanmoy posted to the \PDFTEX\ mailing list. %D I rewrote and optimized the original macro to suit the other %D macros in this module. %D %D \starttyping %D \doMPconcat {x position} \xresult {y position} \yresult %D \stoptyping %D %D By setting the auxiliary \DIMENSIONS\ \type{\dimen0} upto %D \type{\dimen10} only once per path, we save over 20\% run %D time. Some more speed was gained by removing some parameter %D passing. These macros can be optimized a bit more by using %D more constants. There is however not much need for further %D optimization because penshapes usually are round and %D therefore need no transformation. Nevertheless we move the %D factor to the outer level and use a bit different \type{pt} %D removal macro. Although the values represent base points, %D we converted them to pure points, simply because those can %D be converted back. %OLD \mathchardef\MPconcatfactor=256 % beware don't remove spaces before it %OLD \def\doMPreducedimen#1 %OLD {\count0\MPconcatfactor %OLD \advance\dimen#1 \ifdim\dimen#1>\zeropoint .5\else -.5\fi\count0 %OLD \divide\dimen#1 \count0\relax} %OLD % too inaccurate (see old pragma logo) %OLD %OLD \def\doMPreducedimen#1 %OLD {\count0=\MPconcatfactor %OLD \divide\dimen#1 \count0\relax} %OLD \def\doMPreducedimen#1 %OLD {\advance\dimen#1 \ifdim\dimen#1>\zeropoint .5\else -.5\fi\MPconcatfactor %OLD \divide\dimen#1 \MPconcatfactor} %D The transformation code is rewritten by Daniel H. Luecking who %D describes his patch as follows: %D %D We would like to divide 1 by $X$, but all divisions are integer so %D for accuracy we want to convert to large integers and make sure the %D integer quotient has as many significant digits as possible. Thus we %D need to replace $1/X$ with $M/N$ where $N$ is as large as possible %D and $M/N$ is as large as possible. Also for simplicity $M$ should be %D a power of 2. So we make $M = 2^{30}$ \footnote{$2^{31} - 1$ is the %D largest legal integer. Using it (and simply ignoring the inaccuracy %D caused by $-1$) turns out to be at least as accurate in all cases, %D and more accurate in some.} (largest legal power of 2) and adjust %D $X$ downward (if necessary) to the the range $1-2^{16}$. This gives %D at least 15 significant binary digits, (almost as accurate as %D \METAPOST\ for numbers near 1) or almost 5 significant figures %D (decimal). \newcount\MPscratchCnt \newdimen\MPscratchDim % will be assigned global \def\MPadjustdimen % sets \MPscratchDim and \MPscratchCnt {\MPscratchCnt\zerocount \doMPadjustdimen} \def\doMPadjustdimen {\ifdim\MPscratchDim>\onepoint \divide \MPscratchDim\plustwo \advance\MPscratchCnt\plusone \expandafter\doMPadjustdimen \fi} %OLD \def\doMPexpanddimen#1 %OLD {\multiply\dimen#1 \MPconcatfactor\relax} %D DHL: When viewed as an integer, $1 \hbox{pt}=2^{16}$ so $2^{32}/X$ %D is the right way to do $(1 \hbox{pt})/(X \hbox{pt})$ and get the %D answer in points. But we are limited to $2^{30}/X$. However, we %D actually do $[ 2^{30} / (X/2^K) ]*2^{2-K}$ where $K$ is the number %D of halvings it takes to bring $X$ below $1 \hbox{pt}$. If $K$ is 0 %D or 1 we readjust by multiplying by 4 or 2, otherwise by halving %D $(K-2)$ times \type {\MPscratchCnt} holds the value of $K$ from %D \type {\MPadjustdimen}. \def\MPreadjustdimen % acts on \MPscratchDim and MPscratchCnt {\ifcase\MPscratchCnt \multiply\scratchdimen \plusfour \or \multiply\scratchdimen \plustwo \else \expandafter\doMPreadjustdimen \fi} \def\doMPreadjustdimen {\ifnum\MPscratchCnt>\plustwo \divide \scratchdimen\plustwo \advance\MPscratchCnt\minusone \expandafter\doMPreadjustdimen \fi} \def\MPreciprocaldeterminant {\scratchdimen\withoutpt\the\dimen0 \dimen6 % s_x*s_y \advance\scratchdimen -\withoutpt\the\dimen2 \dimen4 % s_x*s_y - r_x*r_y \ifdim\scratchdimen<\zeropoint % we need a positive dimension \scratchdimen-\scratchdimen % for \MPadjustdimen (?) \doMPreciprocal \scratchdimen-\scratchdimen \else \doMPreciprocal \fi \edef\MPreciprocal{\withoutpt\the\scratchdimen}} \newcount\MPnumerator \MPnumerator = 1073741824 % 2^{30} % todo: dimexpr \def\doMPreciprocal % replace \scratchdimen with its reciprocal {\ifdim\scratchdimen=\onepoint \else \MPadjustdimen \scratchcounter\MPnumerator \divide\scratchcounter\scratchdimen \scratchdimen1\scratchcounter % 1 needed \MPreadjustdimen \fi} %OLD \def\presetMPconcat %OLD {\dimen 0=\gMPs1\onepoint \doMPreducedimen 0 % r_x %OLD \dimen 2=\gMPs2\onepoint \doMPreducedimen 2 % s_x %OLD \dimen 4=\gMPs3\onepoint \doMPreducedimen 4 % s_y %OLD \dimen 6=\gMPs4\onepoint \doMPreducedimen 6 % r_y %OLD \dimen 8=\gMPs5\onepoint \doMPreducedimen 8 % t_x %OLD \dimen10=\gMPs6\onepoint \doMPreducedimen10 } % t_y %OLD %OLD \def\presetMPscale %OLD {\dimen 0=\gMPs1\onepoint \doMPreducedimen 0 %OLD \dimen 2 \zeropoint %OLD \dimen 4 \zeropoint %OLD \dimen 6=\gMPs2\onepoint \doMPreducedimen 6 %OLD \dimen 8 \zeropoint %OLD \dimen10 \zeropoint} \def\cleanupMPconcat {\ignoreMPspecials \docleanupMPargument1% \docleanupMPargument6% \keepMPspecials} \def\presetMPconcat {\dimen 0=\gMPs1\onepoint % s_x \dimen 2=\gMPs2\onepoint % r_x \dimen 4=\gMPs3\onepoint % r_y \dimen 6=\gMPs4\onepoint % s_y \dimen 8=\gMPs5\onepoint % t_x \dimen10=\gMPs6\onepoint} % t_y \def\presetMPscale {\dimen 0=\gMPs1\onepoint \dimen 2 \zeropoint \dimen 4 \zeropoint \dimen 6=\gMPs2\onepoint \dimen 8 \zeropoint \dimen10 \zeropoint} \def\noMPtranslate % use this one grouped {\dimen 8 \zeropoint % t_x \dimen10 \zeropoint} % t_y %D \starttyping %D \def\doMPconcat#1#2#3#4% %D {\dimen12=#1 pt \doMPreducedimen12 % p_x %D \dimen14=#3 pt \doMPreducedimen14 % p_y %D % %D \dimen16 \dimen 0 %D \multiply \dimen16 \dimen 6 %D \dimen20 \dimen 2 %D \multiply \dimen20 \dimen 4 %D \advance \dimen16 -\dimen20 %D % %D \dimen18 \dimen12 %D \multiply \dimen18 \dimen 6 %D \dimen20 \dimen14 %D \multiply \dimen20 \dimen 4 %D \advance \dimen18 -\dimen20 %D \dimen20 \dimen 4 %D \multiply \dimen20 \dimen10 %D \advance \dimen18 \dimen20 %D \dimen20 \dimen 6 %D \multiply \dimen20 \dimen 8 %D \advance \dimen18 -\dimen20 %D % %D \multiply \dimen12 -\dimen 2 %D \multiply \dimen14 \dimen 0 %D \advance \dimen12 \dimen14 %D \dimen20 \dimen 2 %D \multiply \dimen20 \dimen 8 %D \advance \dimen12 \dimen20 %D \dimen20 \dimen 0 %D \multiply \dimen20 \dimen10 %D \advance \dimen12 -\dimen20 %D % %D \doMPreducedimen16 %D \divide \dimen18 \dimen16 \doMPexpanddimen18 %D \divide \dimen12 \dimen16 \doMPexpanddimen12 %D % %D \edef#2{\withoutpt\the\dimen18}% % p_x^\prime %D \edef#4{\withoutpt\the\dimen12}} % p_y^\prime %D \stoptyping %D The following optimization resulted from some tests by %D and email exchanges with Sanjoy Mahajan. %D %D \starttyping %D \def\doMPconcat#1#2#3#4% %D {\dimen12=#1 pt \doMPreducedimen12 % p_x %D \dimen14=#3 pt \doMPreducedimen14 % p_y %D % %D \dimen16 \dimen 0 %D \multiply \dimen16 \dimen 6 %D \dimen20 \dimen 2 %D \multiply \dimen20 \dimen 4 %D \advance \dimen16 -\dimen20 %D % %D \dimen18 \dimen12 %D \multiply \dimen18 \dimen 6 %D \dimen20 \dimen14 %D \multiply \dimen20 \dimen 4 %D \advance \dimen18 -\dimen20 %D \dimen20 \dimen 4 %D \multiply \dimen20 \dimen10 %D \advance \dimen18 \dimen20 %D \dimen20 \dimen 6 %D \multiply \dimen20 \dimen 8 %D \advance \dimen18 -\dimen20 %D % %D \multiply \dimen12 -\dimen 2 %D \multiply \dimen14 \dimen 0 %D \advance \dimen12 \dimen14 %D \dimen20 \dimen 2 %D \multiply \dimen20 \dimen 8 %D \advance \dimen12 \dimen20 %D \dimen20 \dimen 0 %D \multiply \dimen20 \dimen10 %D \advance \dimen12 -\dimen20 %D % %D %\ifdim\dimen16>\onepoint % oeps, can be < 1pt too %D \ifdim\dimen16=\onepoint \else %D \ifdim\dimen16>\MPconcatfactor pt %D \doMPreducedimen16 %D \divide \dimen18 \dimen16 \doMPexpanddimen18 %D \divide \dimen12 \dimen16 \doMPexpanddimen12 %D \else %D \divide \dimen18 \dimen16 \doMPexpanddimen18 \doMPexpanddimen18 %D \divide \dimen12 \dimen16 \doMPexpanddimen12 \doMPexpanddimen12 %D \fi %D \fi %D % %D \edef#2{\withoutpt\the\dimen18}% % p_x^\prime %D \edef#4{\withoutpt\the\dimen12}} % p_y^\prime %D \stoptyping %D %D But, this one is still too inaccurate, so we now have: %D DHL: Ideally, $r_x$, $r_y$, $s_x$, $s_y$ should be in macros, not %D dimensions (they are scalar quantities after all, not lengths). I %D suppose the authors decided to do calculations with integer %D arithmetic instead of using real factors because it's faster. %D However, the actual macros test slower, possibly because I've %D omitted three nested loops. In my test files, my approach is more %D accurate. It is also far simpler and overflow does not seem to be a %D significant concern. The scale factors written by Metapost are (?) %D always $<=1$ (it scales coordinates internally) and coordinates are %D always likely to be less than \type {\maxdimen}. %D %D If this should ever cause problems, the scale factors can be reduced. % the original: % % \def\doMPconcat#1#2#3#4% % {\dimen12=#1\onepoint% p_x % #1\onepoint % \dimen14=#3\onepoint% p_y % #3\onepoint % \advance\dimen12 -\dimen8 % p_x - t_x % \advance\dimen14 -\dimen10 % p_y - t_y % \dimen18=\withoutpt\the\dimen6 \dimen12 % s_y(p_x - t_x) % \advance\dimen18 -\withoutpt\the\dimen4 \dimen14 % - r_y(p_y-t_y) % \dimen14=\withoutpt\the\dimen0 \dimen14 % s_x(p_y-t_y) % \advance\dimen14 -\withoutpt\the\dimen2 \dimen12 % - r_x(p_x-t_x) % % \MPreciprocal contains precomputed 1/D: % \dimen18=\MPreciprocal\dimen18 % \dimen14=\MPreciprocal\dimen14 % \edef#2{\withoutpt\the\dimen18}% % p_x^\prime % \edef#4{\withoutpt\the\dimen14}} % p_y^\prime % % faster but not that often used \def\doMPconcat#1#2#3#4% {\dimen12\dimexpr#1\points-\dimen 8\relax % p_x-t_x \dimen14\dimexpr#3\points-\dimen10\relax % p_y-t_y \dimen18\dimexpr\withoutpt\the\dimen6\dimen12-\withoutpt\the\dimen4\dimen14\relax % s_y(p_x-t_x)-r_y(p_y-t_y) \dimen14\dimexpr\withoutpt\the\dimen0\dimen14-\withoutpt\the\dimen2\dimen12\relax % s_x(p_y-t_y)-r_x(p_x-t_x) \edef#2{\withoutpt\the\dimexpr\MPreciprocal\dimen18\relax}% % p_x^\prime \edef#4{\withoutpt\the\dimexpr\MPreciprocal\dimen14\relax}} % p_y^\prime %D One reason for Daniel to write this patch was that at small sizes %D the accuracy was less than optimal. Here is a test that demonstrates %D that his alternative is pretty good: %D %D \startlinecorrection %D \startMPcode %D for i = 5cm,1cm,5mm,1mm,.5mm,.1mm,.01mm : %D draw fullcircle scaled i withpen pencircle xscaled (i/10) yscaled (i/20) rotated 45 ; %D endfor ; %D \stopMPcode %D \stoplinecorrection %D The following explanation of the conversion process was %D posted to the \PDFTEX\ mailing list by Tanmoy. The original %D macro was part of a set of macro's that included sinus and %D cosinus calculations as well as scaling and translating. The %D \METAPOST\ to \PDF\ conversion however only needs %D transformation. %M \start \switchtobodyfont [ss] %D Given a point $(U_x, U_y)$ in user coordinates, the business %D of \POSTSCRIPT\ is to convert it to device space. Let us say %D that the device space coordinates are $(D_x, D_y)$. Then, in %D \POSTSCRIPT\ $(D_x, D_y)$ can be written in terms of %D $(U_x, U_y)$ in matrix notation, either as %D %D \placeformula %D \startformula %D \pmatrix{D_x&D_y&1\cr} = \pmatrix{U_x&U_y&1\cr} %D \pmatrix{s_x&r_x&0\cr %D r_y&s_y&0\cr %D t_x&t_y&1\cr} %D \stopformula %D %D or %D %D \placeformula %D \startformula %D \pmatrix{D_x\cr D_y\cr 1} = \pmatrix{s_x&r_y&t_x\cr %D r_x&s_y&t_y\cr %D 0 &0 &1 \cr} %D \pmatrix{U_x\cr %D U_y\cr %D 1 \cr} %D \stopformula %D %D both of which is a shorthand for the same set of equations: %D %D \placeformula %D \startformula %D D_x = s_x U_x + r_y U_y + t_x %D \stopformula %D %D \placeformula %D \startformula %D D_y = r_x U_x + s_y U_y + t_y %D \stopformula %D %D which define what is called an `affine transformation'. %D %D \POSTSCRIPT\ represents the `transformation matrix' as a %D six element matrix instead of a $3\times 3$ array because %D three of the elements are always~0, 0 and~1. Thus the above %D transformation is written in postscript as $[s_x\, r_x\, %D r_y\, s_y\, t_x\, t_y]$. However, when doing any %D calculations, it is useful to go back to the original %D matrix notation (whichever: I will use the second) and %D continue from there. %D %D As an example, if the current transformation matrix is %D $[s_x\, r_x\, r_y\, s_y\, t_x\, t_y]$ and you say \typ{[a b %D c d e f] concat}, this means: %D %D \startnarrower %D Take the user space coordinates and transform them to an %D intermediate set of coordinates using array $[a\, b\, c\, d\, %D e\, f]$ as the transformation matrix. %D %D Take the intermediate set of coordinates and change them to %D device coordinates using array $[s_x\, r_x\, r_y\, s_y\, t_x\, t_y]$ %D as the transformation matrix. %D \stopnarrower %D %D Well, what is the net effect? In matrix notation, it is %D %D \placeformula %D \startformula %D \pmatrix{I_x\cr I_y\cr 1\cr} = \pmatrix{a&c&e\cr %D b&d&f\cr %D 0&0&1\cr} %D \pmatrix{U_x\cr %D U_y\cr %D 1 \cr} %D \stopformula %D %D \placeformula %D \startformula %D \pmatrix{D_y\cr D_y\cr 1\cr} = \pmatrix{s_x&r_y&t_x\cr %D r_x&s_y&t_y\cr %D 0 &0 &1 \cr} %D \pmatrix{I_x\cr %D I_y\cr %D 1 \cr} %D \stopformula %D %D where $(I_x, I_y)$ is the intermediate coordinate. %D %D Now, the beauty of the matrix notation is that when there is %D a chain of such matrix equations, one can always compose %D them into one matrix equation using the standard matrix %D composition law. The composite matrix from two matrices can %D be derived very easily: the element in the $i$\high{th} %D horizontal row and $j$\high{th} vertical column is %D calculated by`multiplying' the $i$\high{th} row of the first %D matrix and the $j$\high{th} column of the second matrix (and %D summing over the elements). Thus, in the above: %D %D \placeformula %D \startformula %D \pmatrix{D_x\cr D_y\cr 1} = \pmatrix{s_x^\prime&r_y^\prime&t_x^\prime\cr %D r_x^\prime&s_y^\prime&t_y^\prime\cr %D 0 &0 &0 \cr} %D \pmatrix{U_x\cr %D U_y\cr %D 1 \cr} %D \stopformula %D %D with %D %D \placeformula %D \startformula %D \eqalign %D {s_x^\prime & = s_x a + r_y b \cr %D r_x^\prime & = r_x a + s_y b \cr %D r_y^\prime & = s_x c + r_y d \cr %D s_y^\prime & = r_x c + s_y d \cr %D t_x^\prime & = s_x e + r_y f + t_x \cr %D t_y^\prime & = r_x e + s_y f + t_y \cr} %D \stopformula %D In fact, the same rule is true not only when one is going %D from user coordinates to device coordinates, but whenever %D one is composing two `transformations' together %D (transformations are `associative'). Note that the formula %D is not symmetric: you have to keep track of which %D transformation existed before (i.e.\ the equivalent of %D $[s_x\, r_x\, r_y\, s_y\, t_x\, t_y]$) and which was %D specified later (i.e.\ the equivalent of $[a\, b\, c\, d\, %D e\, f]$). Note also that the language can be rather %D confusing: the one specified later `acts earlier', %D converting the user space coordinates to intermediate %D coordinates, which are then acted upon by the pre||existing %D transformation. The important point is that order of %D transformation matrices cannot be flipped (transformations %D are not `commutative'). %D %D Now what does it mean to move a transformation matrix %D before a drawing? What it means is that given a point %D $(P_x, P_y)$ we need a different set of coordinates %D $(P_x^\prime, P_y^\prime)$ such that if the transformation %D acts on $(P_x^\prime, P_y^\prime)$, they produce $(P_x, %D P_y)$. That is we need to solve the set of equations: %D %D \placeformula %D \startformula %D \pmatrix{P_x\cr P_y\cr 1\cr} = \pmatrix{s_x&r_y&t_x\cr %D r_x&s_y&t_y\cr %D 0 &0 &1 \cr} %D \pmatrix{P_x^\prime\cr %D P_y^\prime\cr %D 1 \cr} %D \stopformula %D %D Again matrix notation comes in handy (i.e. someone has %D already solved the problem for us): we need the inverse %D transformation matrix. The inverse transformation matrix can %D be calculated very easily: %D %D \placeformula %D \startformula %D \pmatrix{P_x^\prime\cr P_y^\prime\cr 1\cr} = %D \pmatrix{s_x^\prime&r_y^\prime&t_x^\prime\cr %D r_x^\prime&s_y^\prime&t_y^\prime\cr %D 0 &0 &1 \cr} %D \pmatrix{P_x\cr %D P_y\cr %D 1 \cr} %D \stopformula %D %D where, the inverse transformation matrix is given by %D %D \placeformula %D \startformula %D \eqalign %D {D & = s_x s_y - r_x r_y \cr %D s_x^\prime & = s_y / D \cr %D s_y^\prime & = s_x / D \cr %D r_x^\prime & = - r_x / D \cr %D r_y^\prime & = - r_y / D \cr %D t_x^\prime & = ( - s_y t_x + r_y t_y ) / D \cr %D t_y^\prime & = ( r_x t_x - s_x t_y ) / D \cr} %D \stopformula %D %D And you can see that when expanded out, this does %D give the formulas: %D %D \placeformula %D \startformula %D P_x^\prime = { { s_y(p_x-t_x) + r_y(t_y-p_y) } \over %D { s_x s_y-r_x r_y } } %D \stopformula %D %D \placeformula %D \startformula %D P_y^\prime = { { s_x(p_y-t_y) + r_x(t_x-p_x) } \over %D { s_x*s_y-r_x*r_y } } %D \stopformula %D %D The code works by representing a real number by converting %D it to a dimension to be put into a \DIMENSION\ register: 2.3 would %D be represented as 2.3pt for example. In this scheme, %D multiplying two numbers involves multiplying the \DIMENSION\ %D registers and dividing by 65536. Accuracy demands that the %D division be done as late as possible, but overflow %D considerations need early division. %D %D Division involves dividing the two \DIMENSION\ registers and %D multiplying the result by 65536. Again, accuracy would %D demand that the numerator be multiplied (and|/|or the %D denominator divided) early: but that can lead to overflow %D which needs to be avoided. %D %D If nothing is known about the numbers to start with (in %D concat), I have chosen to divide the 65536 as a 256 in each %D operand. However, in the series calculating the sine and %D cosine, I know that the terms are small (because I never %D have an angle greater than 45 degrees), so I chose to %D apportion the factor in a different way. %M \stop %D The path is output using the values saved on the stack. If %D needed, all coordinates are recalculated. \def\finishMPpath {\PDFcode{\ifcase\finiMPpath W n\or S\or f\or B\fi}} \def\processMPpath {\checkMPpath \ifcase\nofMPsegments\else \flushMPpath \closeMPpath \finishMPpath \fi \let\handleMPsequence\dohandleMPsequence \resetMPstack \nofMPsegments\zerocount \handleMPsequence} %D The following \METAPOST\ code is quite valid but, when %D processed and converted to \PDF, will make a file %D unprintable on a Hewlett Packard printer (from Acrobat %D $v<=5$). Who is to blame, the driver of the OS layer in %D between, is hard to determine, so we add an additional %D check. %D %D \starttyping %D clip currentpicture to origin -- cycle ; %D setbounds currentpicture to fullsquare scaled 5cm ; %D \stoptyping \def\checkMPpath {\ifcase\finiMPpath \ifnum\nofMPsegments<\plusthree % n is one ahead \message{omitting zero clip path}% \nofMPsegments\zerocount \fi \fi} %D In \PDF\ the \type{cm} operator must precede the path %D specification. We therefore can output the \type{cm} at %D the moment we encounter it. \def\handleMPpathconcat {\presetMPconcat \PDFcode{\gMPs1 \gMPs2 \gMPs3 \gMPs4 \gMPs5 \gMPs6 cm}% \resetMPstack} \def\handleMPpathscale {\presetMPscale \PDFcode{\gMPs1 0 0 \gMPs2 0 0 cm}% \resetMPstack} %D This macro interprets the path and saves it as compact as %D possible. \def\dohandleMPpath#1% {\ifcase\lccode`#1\relax \@EA\dohandleMPpathA \else \@EA\dohandleMPpathB \fi#1} \let\dohandleMPpathA\setMPsequence \def\installMPSkeywordP#1#2% {\expandafter\def\csname\@@MP:P:#1\endcsname{#2}} \def\installMPSshortcutP#1#2% todo: \let {\expandafter\let\csname\@@MP:P:#1\expandafter\endcsname\csname\@@MP:P:#2\endcsname} \def\dohandleMPpathB#1 % {\def\somestring{#1}% \executeifdefined{\@@MP:P:\somestring}\relax \handleMPsequence} \installMPSkeywordP \PSlineto {\setMPkeyword0 } \installMPSkeywordP \PScurveto {\setMPkeyword1 } \installMPSkeywordP \PSrlineto {\setMPkeyword2 } \installMPSkeywordP \PSmoveto {\edef\lastMPmoveX{\gMPs1}% \edef\lastMPmoveY{\gMPs2}% \resetMPstack \setMPkeyword3 } \installMPSkeywordP \PSclip {% \chardef\finiMPpath\zerocount % already \let\handleMPsequence\processMPpath} \installMPSkeywordP \PSgsave {\chardef\finiMPpath\plusthree} \installMPSkeywordP \PSgrestore {} \installMPSkeywordP \PSfill {\ifcase\finiMPpath \chardef\finiMPpath\plustwo \let\handleMPsequence\processMPpath \fi} \installMPSkeywordP \PSstroke {\ifcase\finiMPpath \chardef\finiMPpath\plusone \fi \let\handleMPsequence\processMPpath} \installMPSkeywordP \PSclosepath {\def\closeMPpath{\PDFcode{h}}} \installMPSkeywordP \PSconcat {\cleanupMPconcat \let\flushMPpath\flushconcatMPpath \handleMPpathconcat} \installMPSkeywordP \PSscale {\let\flushMPpath\flushconcatMPpath \handleMPpathscale} \installMPSshortcutP {l} \PSlineto \installMPSshortcutP {r} \PSrlineto \installMPSshortcutP {m} \PSmoveto \installMPSshortcutP {c} \PScurveto \installMPSshortcutP {q} \PSgsave \installMPSshortcutP {Q} \PSgrestore \installMPSshortcutP {S} \PSstroke \installMPSshortcutP {F} \PSfill \installMPSshortcutP {B} \PSgsave \installMPSshortcutP {W} \PSclip \installMPSshortcutP {p} \PSclosepath \installMPSshortcutP {s} \PSscale \installMPSshortcutP {t} \PSconcat %D \macros %D {twodigitMPoutput} %D %D We can limit the precision to two digits after the comma %D by saying: %D %D \starttyping %D \twodigitMPoutput %D \stoptyping %D %D This option only works in \CONTEXT\ combined with \ETEX. \def\twodigitMPoutput {\let\!MP \twodigitrounding \def\!MPgMPs##1{\twodigitrounding{\gMPs##1}}% \def\!MPgMPa##1{\twodigitrounding{\gMPa##1}}} \let\!MP \empty \let\!MPgMPa\gMPa \let\!MPgMPs\gMPs %D Here comes the special-specific code: \def\setMPextensions {\ifconditional\manyMPspecials \def\MPrgbnumber##1{\expandafter\doMPrgbnumber##10000.00000\relax}% \def\doMPrgbnumber##1.##2##3##4##5##6\relax{##2##3##4##5}% \else \def\MPrgbnumber##1{\expandafter\doMPrgbnumber##1000.0000\relax}% \def\doMPrgbnumber##1.##2##3##4##5\relax{##2##3##4}% \fi} % \settrue\manyMPspecials \setMPextensions %D This macro handles the special definitions that are %D passed as comment. %D The implementation below saves the data on the stack in %D a way similar to the macros in \type {supp-pdf.tex}, and %D just overload a few already defined handlers. That way, %D the existing macros are still generic. \footnote {Actually, %D the macros here are just as generic.} %D %D Currently the only extension concerns shading, which is %D accomplished by handling yet another value of \type %D {\finiMPpath}. The recource disctionary is stored and %D later picked up by the general \CONTEXT\ figure inclusion %D macros. %D The \type {%%MetaPostSpecials: version.revision signal} line %D triggers this module into handling color specifications kind %D of special. We need this safeguard for non||special %D usage. %D When defined inline, we use another macro to handle the %D definitions. Actually, this macro is called by the %D previous ones. \chardef\MPspecialversion = 0 % specials when >1 \chardef\MPspecialrevision = 0 % specials when >1 \chardef\MPspecialsignal = 0 % passed on by graphic \chardef\inlineMPspecials = 1 % only needed for stack resetting \def\dohandleMPspecialcomment#1 {\setMPargument{#1}% \advance\scratchcounter \minusone \ifcase\scratchcounter \handleMPspecialcommand \donetrue \doresetMPstack \let\handleMPsequence\dohandleMPsequence \expandafter\handleMPsequence \else \expandafter\dohandleMPspecialcomment \fi} \def\handleMPspecialcomment #1 % number of arguments {\doresetMPstack \scratchcounter#1\relax \ifcase\scratchcounter % when zero, inline shading is used \chardef\inlineMPspecials\plusone \let\handleMPsequence\dohandleMPsequence \expandafter\handleMPsequence \else \chardef\inlineMPspecials\zerocount \expandafter\dohandleMPspecialcomment \fi} %D When defined inline, we use another macro to handle the %D definitions. Actually, this macro is called by the %D previous ones. \def\handleMPspecialcommand {\ifcase\inlineMPspecials\or \advance\nofMParguments \minusone % pop the size \fi \ifundefined\MPspecial % beware, no real \if \message{[unknown \MPspecial]}% \else \csname\MPspecial\endcsname \fi \ifcase\inlineMPspecials \doresetMPstack % 0 \else \resetMPstack % 1 \fi} \def\handleMPspecialscomment #1.#2 #3 % version.revision signal #4=div=1000|10000 {\doresetMPstack \chardef\MPspecialversion #1% \chardef\MPspecialrevision#2% \chardef\MPspecialsignal #3% \let\handleMPsequence\dohandleMPsequence \ifnum#1=\plusone \expandafter\handleMPsequence \else \expandafter\handleMPspecialscommentx \fi} \def\handleMPspecialscommentx #1 % version 2 {\ifnum10000=0#1\relax \settrue \manyMPspecials \else \setfalse\manyMPspecials \fi \setMPextensions \handleMPsequence} \def\handleMPrgbcolor {\edef\lastMPrvalue{\csname\@@MP01\endcsname}%{\gMPs1}% \edef\lastMPgvalue{\csname\@@MP02\endcsname}%{\gMPs2}% \edef\lastMPbvalue{\csname\@@MP03\endcsname}%{\gMPs3}% \ifnum\MPrgbnumber\lastMPrvalue=123\relax \csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname \else \dohandleMPrgb\lastMPrvalue\lastMPgvalue\lastMPbvalue \fi} \def\handleMPgraycolor{\dohandleMPgray{\gMPs1}} \def\handleMPcmykcolor{\dohandleMPcmyk{\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}} \def\handleMPspotcolor{\dohandleMPspot{\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}} % \newcontitional\ignoreMPpath \def\finishMPpath {\ifconditional\ignoreMPpath \PDFcode{W n\space}% \else \PDFcode{\ifcase\finiMPpath W n\or S\or f\or B\else W n\fi}% \fi \ifx\extraMPpathcode\empty\else \PDFcode{\extraMPpathcode}% \let\extraMPpathcode\empty \fi \setfalse\ignoreMPpath} \def\processMPpath {\checkMPpath % ! \flushMPpath \closeMPpath \finishMPpath \let\handleMPsequence\dohandleMPsequence \resetMPstack \nofMPsegments\zerocount \handleMPsequence} \protect \endinput % When i'm bored ... % \newcatcodetable\mpscatcodes % \startcatcodetable \mpscatcodes % \catcode`\| \@@comment % \catcode`\% \@@active % \catcode`\[ \@@active % \catcode`\] \@@active % \catcode`\{ \@@active % \catcode`\} \@@active % \stopcatcodetable % \def\keepMPspecials % {\setcatcodecommand \mpscatcodes `\% \letterpercent % \setcatcodecommand \mpscatcodes `\[ \letterleftbracket % \setcatcodecommand \mpscatcodes `\] \letterrightbracket % \setcatcodecommand \mpscatcodes `\{ \letterleftbrace % \setcatcodecommand \mpscatcodes `\} \letterrightbrace} % \def\ignoreMPspecials % {\setcatcodecommand \mpscatcodes `\% \letterpercent % \setcatcodecommand \mpscatcodes `\[ \empty % \setcatcodecommand \mpscatcodes `\] \empty % \setcatcodecommand \mpscatcodes `\{ \empty % \setcatcodecommand \mpscatcodes `\} \empty} % \def\obeyMPspecials % {\setcatcodecommand \mpscatcodes `\% \letterpercent % \setcatcodecommand \mpscatcodes `\[ \letterleftbracket % \setcatcodecommand \mpscatcodes `\] \letterrightbracket % \setcatcodecommand \mpscatcodes `\{ \letterleftbrace % \setcatcodecommand \mpscatcodes `\} \letterrightbrace} % \gdef\setMPspecials| % {\setcatcodetable\mpscatcodes % \lccode`\-=\zerocount % to be sure, it could be a letter % \lccode`\%=`\%% % otherwise it's seen as a number % \def\({\char40\relax }% % \def\){\char41\relax }% % \def\\{\char92\relax }% % \def\0{\octalMPcharacter0}% % \def\1{\octalMPcharacter1}% % \def\2{\octalMPcharacter2}% % \def\3{\octalMPcharacter3}% % \def\4{\octalMPcharacter4}% % \def\5{\octalMPcharacter5}% % \def\6{\octalMPcharacter6}% % \def\7{\octalMPcharacter7}% % \def\8{\octalMPcharacter8}% % \def\9{\octalMPcharacter9}} context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-con.mkvi0000644000175000017500000010726612134352503024323 0ustar norbertnorbert%D \module %D [ file=strc-con, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Constructions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Constructions} \registerctxluafile{strc-con}{1.001} % todo: check why \copy .. probably mkii leftover % % todo: check if commands similar to lists % todo: \strc_constructions_setup_counter\strc_constructions_setup_counter{#1} in setup ... synchronization % % ? : \def\showdnlisttext{\constructionparameter\c!listtext} % space in default % % maybe: pickup text and store in buffer ... % % \@@notemakeconstruction[##1]{}{##2}% % \expandafter\endgroup\noteparameter\c!next}} % % todo: \currentconstructionattribute : can be a counter instead %D Constructions are just descriptions but a bit more abstract so that we can %D conveniently build upon them. They are not really meant for users but module %D writers might find them useful. We mention a couple of parameters but these are %D only mentioned because in the shared code we map all resolvers to constructions. %D %D On top of constructions we build descriptions, enumerations, notes, labels and %D maybe some day more. \unprotect %D Todo: \installcorenamespace{construction} \installcommandhandler \??construction {construction} \??construction \let\setupconstructions\setupconstruction \setupconstructions[% %c!title=, %c!text=, % %c!style=, %c!color=, %c!command=, %c!align=, % %c!headstyle=, %c!headcolor=, %c!headalign=, % %c!titlestyle=, %c!titlecolor=, %c!titlecommand=, %c!titleleft=, %c!titleright=, % %c!closesymbol=, %c!closecommand=, % \c!alternative=\v!left, \c!display=\v!yes, \c!width=7\emwidth, \c!distance=\emwidth, \c!titledistance=.5\emwidth, %c!hang=, %c!sample=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, %c!indentnext=, %c!indenting=, % \c!expansion=\v!no, %c!xmlsetup=, %s!catcodes=, ] %D Constructions and alike uses similar structures. In order to prevent issues %D we freeze some states. There is some overhead in the intermediate define %D step (as we could set them directly) but this is more flexible (and looks %D nicer). Keep in mind that descriptions, enumeration and notations are all %D independent and that we just remap the resolvers. % \defineconstruction[test][handler=description,level=1] % \defineconstruction[test][parent][handler=description,level=3] \installcorenamespace{constructionmain} % frozen after definition \installcorenamespace{constructionlevel} % frozen after definition \installcorenamespace{constructionclass} % frozen after definition \let\currentconstructionmain \empty \let\currentconstructionlevel \empty \let\currentconstructionhandler\empty \settrue\c_strc_constructions_define_commands % use with care, might become a proper key \appendtoks \ifx\currentconstructionparent\empty \letvalue{\??constructionmain\currentconstruction}\currentconstruction \definelist[\currentconstruction]% goodie \else \letvalue{\??constructionmain\currentconstruction}\currentconstructionparent \definelist[\currentconstruction][\currentconstructionparent]% goodie \fi \setevalue{\??constructionlevel\currentconstruction}{\number\constructionparameter\c!level}% \setevalue{\??constructionclass\currentconstruction}{\constructionparameter\s!handler}% \to \everydefineconstruction \appendtoks \ifconditional\c_strc_constructions_define_commands \setuevalue{\e!start\currentconstruction}{\strc_constructions_start{\currentconstruction}}% \setuevalue{\e!stop \currentconstruction}{\strc_constructions_stop}% \fi \to \everydefineconstruction %D Just a basic environment (mostly for testing). We will provide a 'setup' based %D plugin once the rest is sorted out. \unexpanded\def\strc_constructions_start#1% {\begingroup \strc_constructions_initialize{#1}% \dodoubleempty\strc_constructions_start_regular} \unexpanded\def\strc_constructions_start_regular[#1][#2]% {\strc_constructions_register[\c!label={\constructionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1][#2]% \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_constructions_stop {\csname\??constructionstophandler\currentconstructionhandler\endcsname \endgroup} %D As we will build on top of the generic construction mechanism we have handlers %D as a sort of plug in mechanism. In order to have some consistency we share %D some namespaces. \installcorenamespace{constructioninitializer} \installcorenamespace{constructionfinalizer} \installcorenamespace{constructionmainhandler} \installcorenamespace{constructioncommandhandler} \installcorenamespace{constructionstarthandler} \installcorenamespace{constructionstophandler} \installcorenamespace{constructiontexthandler} \installcorenamespace{constructionnotehandler} \unexpanded\def\strc_constructions_initialize#1% class instance {\edef\currentconstruction{#1}% \let\currentconstructionlistentry\!!zerocount \expandafter\let\expandafter\currentconstructionmain \csname\??constructionmain \currentconstruction\endcsname \expandafter\let\expandafter\currentconstructionlevel \csname\??constructionlevel\currentconstruction\endcsname \expandafter\let\expandafter\currentconstructionhandler\csname\??constructionclass\currentconstruction\endcsname \csname\??constructioninitializer\currentconstructionhandler\endcsname} \unexpanded\def\strc_constructions_finalize {\csname\??constructionfinalizer\currentconstructionhandler\endcsname \strc_constructions_discard} \newconditional\c_strc_constructions_number_state \newconditional\c_strc_constructions_title_state \unexpanded\setvalue{\??constructioninitializer\v!construction}% {\setfalse\c_strc_constructions_number_state \setfalse\c_strc_constructions_title_state} \unexpanded\setvalue{\??constructionfinalizer\v!construction}% {} %D We keep the command variant around but rather would move to the start-stop one. %D Also, passing the title as argument has some history so we need to keep that as %D well. \ifdefined\dotagsetconstruction \else \let\dotagsetconstruction\relax \fi \newtoks\everyconstruction \unexpanded\def\currentconstructiontext {\begstrut \csname\??constructiontexthandler\currentconstructionhandler\endcsname \endstrut} \unexpanded\def\currentconstructionsample {\begstrut \constructionparameter\c!text \p_strc_constructions_sample \endstrut} \unexpanded\setvalue{\??constructionmainhandler\v!construction}#1% {\iftrialtypesetting \else \begingroup \currentconstructionsynchronize % reinstated \attribute\destinationattribute\currentconstructionattribute\relax % todo, whole text \signalcharacter \endgroup \fi#1} \unexpanded\setvalue{\??constructiontexthandler\v!construction}% {\begingroup \useconstructionstyleandcolor\c!headstyle\c!headcolor % move to \currentconstructiontext \the\everyconstruction \constructionparameter\c!headcommand {\strut \constructionparameter\c!text \ctxcommand{savedlisttitle("\currentconstructionmain",\currentconstructionlistentry)}}% \endgroup} \unexpanded\def\strc_constructions_stored_start {\begingroup % brrr \endgroup elsewhere ... will be sorted out \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_constructions_stored_stop {\csname\??constructionstophandler\currentconstructionhandler\endcsname} \newconstant\c_strc_constructions_nested_state % to be redone \def\resetconstructions % to be used in e.g. footnotes {\c_strc_constructions_nested_state\zerocount} \unexpanded\setvalue{\??constructioncommandhandler\v!construction}% {\endgroup} \let\p_strc_constructions_sample \empty \let\p_strc_constructions_align \empty \let\p_strc_constructions_indenting \empty \let\p_strc_constructions_width \empty \let\p_strc_constructions_aligntitle \empty \let\p_strc_constructions_renderingsetup\empty \let\p_strc_constructions_headalign \empty \let\p_strc_constructions_hang \empty \let\p_strc_constructions_inbetween \empty \let\p_strc_constructions_closesymbol \empty \let\p_strc_constructions_distance \empty \newconditional\c_strc_constructions_distance_none \unexpanded\setvalue{\??constructionstarthandler\v!construction}% this will be redone (reorganized) .. too much boxing {\dostarttagged\t!construction\currentconstruction \dotagsetconstruction \constructionparameter\c!before \begingroup \edef\currentconstructionalternative{\constructionparameter\c!alternative}% \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}% % catch fuzzyness \ifx\p_strc_constructions_renderingsetup\empty \letconstructionparameter\c!alternative\v!left \let\currentconstructionalternative\v!left \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}% \else \doifnotsetups\p_strc_constructions_renderingsetup {\letconstructionparameter\c!alternative\v!left \let\currentconstructionalternative\v!left \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}}% \fi % \doadaptleftskip{\constructionparameter\c!margin}% \setlocalhsize % so we can use \localhsize in width assignments \edef\p_strc_constructions_distance{\constructionalternativeparameter\c!distance}% \edef\p_strc_constructions_width{\constructionalternativeparameter\c!width}% \ifx\p_strc_constructions_distance\v!none \settrue\c_strc_constructions_distance_none \constructionsheaddistance\zeropoint \else \setfalse\c_strc_constructions_distance_none \constructionsheaddistance\p_strc_constructions_distance\relax \ifdim\constructionsheaddistance=\zeropoint \ifx\p_strc_constructions_width\v!broad \constructionsheaddistance\emwidth \fi \fi \fi % inefficient and not always needed, for instance not with margins so we will make checkers % per alternative some day (especially in labels this is unwanted overhead) \setbox\constructionheadbox\hbox {\forgetall \dontcomplain \settrialtypesetting \edef\p_strc_constructions_sample{\constructionparameter\c!sample}% \ifx\p_strc_constructions_sample\empty \csname\??constructionmainhandler\currentconstructionhandler\endcsname\currentconstructiontext \else \csname\??constructionmainhandler\currentconstructionhandler\endcsname\currentconstructionsample \fi}% \assignwidth \p_strc_constructions_width \constructionsheadwidth {\unhcopy\constructionheadbox} \constructionsheaddistance \dostarttagged\t!constructiontag\empty % todo \setbox\constructionheadbox\hbox {\forgetall \dontcomplain \ifx\currentconstructionalternative\v!serried % brrr, hack, will change \csname\??constructionmainhandler\currentconstructionhandler\endcsname\currentconstructiontext \else \csname\??constructionmainhandler\currentconstructionhandler\endcsname{\boxedconstructionhead\currentconstructiontext}% \fi}% \edef\p_strc_constructions_aligntitle{\constructionparameter\c!aligntitle}% \ifx\p_strc_constructions_aligntitle\v!no \leftconstructionskip \leftskip \rightconstructionskip\rightskip \else \ifcase\c_strc_constructions_nested_state \leftconstructionskip \leftskip \rightconstructionskip\rightskip \fi \fi \edef\p_strc_constructions_align{\constructionparameter\c!align}% \ifx\p_strc_constructions_align\empty \else \setupalign[\p_strc_constructions_align]% \use... \fi \edef\p_strc_constructions_indenting{\constructionparameter\c!indenting}% \ifx\p_strc_constructions_indenting\empty \else \indenting[\p_strc_constructions_indenting]% \use... \fi \ifcase\c_strc_constructions_nested_state \c_strc_constructions_nested_state\plusone \or \c_strc_constructions_nested_state\plustwo \fi \strc_constructions_close_symbol_reset % \edef\p_strc_constructions_headalign{\constructionparameter\c!headalign}% % \directsetup\p_strc_constructions_renderingsetup\relax % \dostoptagged % tag \dostarttagged\t!constructioncontent\empty \ignorespaces} % args not needed \unexpanded\setvalue{\??constructionstophandler\v!construction}% {\strc_constructions_close_symbol_place \doifnot{\constructionparameter\c!display}\v!no\par \dostoptagged % content \dostoptagged % construction \endgroup \constructionparameter\c!after \useindentnextparameter\constructionparameter \strc_constructions_finalize % \endgroup \dorechecknextindentation} \unexpanded\def\boxedconstructionhead#1% {\vtop {\hsize\constructionsheadwidth \edef\p_strc_constructions_headalign{\constructionparameter\c!headalign}% \ifx\p_strc_constructions_headalign\empty \else \setupalign[\p_strc_constructions_headalign]% \use... \fi #1}} \installcorenamespace{constructionalternative} \installcorenamespace{constructionrenderings} % see lists: alternativemethods ... todo % % there will be a proper interface to variables \installcommandhandler \??constructionalternative {constructionalternative} \??constructionalternative \setupconstructionalternative [\c!width=\constructionparameter\c!width, \c!distance=\constructionparameter\c!distance] \defineconstructionalternative [\v!left] [%\c!width=7em, %\c!distance=1em, \c!renderingsetup=\??constructionrenderings:\v!left] \defineconstructionalternative [\v!right] [%\c!width=7em, %\c!distance=1em, \c!renderingsetup=\??constructionrenderings:\v!right] \defineconstructionalternative [\v!inmargin] [\c!renderingsetup=\??constructionrenderings:\v!inmargin] \defineconstructionalternative [\v!inleft] [\c!renderingsetup=\??constructionrenderings:\v!inleft] \defineconstructionalternative [\v!inright] [\c!renderingsetup=\??constructionrenderings:\v!inright] \defineconstructionalternative [\v!margin] [\c!renderingsetup=\??constructionrenderings:\v!margin] \defineconstructionalternative [\v!leftmargin] [\c!renderingsetup=\??constructionrenderings:\v!leftmargin] \defineconstructionalternative [\v!rightmargin] [\c!renderingsetup=\??constructionrenderings:\v!rightmargin] \defineconstructionalternative [\v!innermargin] [\c!renderingsetup=\??constructionrenderings:\v!innermargin] \defineconstructionalternative [\v!outermargin] [\c!renderingsetup=\??constructionrenderings:\v!outermargin] \defineconstructionalternative [\v!serried] [\c!renderingsetup=\??constructionrenderings:\v!serried] \defineconstructionalternative [\v!hanging] [%\c!width=\v!fit, \c!renderingsetup=\??constructionrenderings:\v!hanging] \defineconstructionalternative [\v!top] [\c!renderingsetup=\??constructionrenderings:\v!top, \c!width=\localhsize] \defineconstructionalternative [\v!command] [\c!renderingsetup=\??constructionrenderings:\v!command] \newbox \constructionheadbox \newskip \leftconstructionskip \newskip \rightconstructionskip \newdimen \constructionsheadwidth % replaces \!!widtha % TODO: proper namespace dimens \newdimen \constructionsheaddistance % replaces \!!widthb % TODO: proper namespace dimens \def\strc_constructions_set_hang_box#1% messy left/rightskip {\setbox\constructionheadbox\vtop % \vbox gaat fout in hang {\forgetall \dontcomplain \hsize\constructionsheadwidth\relax \ifx\p_strc_constructions_headalign\empty \setupalign[#1]% use fast one \else \setupalign[\p_strc_constructions_headalign]% use fast one \fi \ifconditional\c_strc_constructions_distance_none \else \advance\ifx#1\v!flushleft\rightskip\else\leftskip\fi\constructionsheaddistance % only difference and wrong anyway \fi \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \setbox\constructionheadbox\hbox{\box\constructionheadbox}% needed in case of e.g. a real big head font, see descriptions-006.tex \ht\constructionheadbox\strutht \dp\constructionheadbox\strutdp} \def\strc_constructions_set_pure_box#1% default ... better set up differently {\setbox\constructionheadbox\vtop {\forgetall \dontcomplain \hsize\constructionsheadwidth\relax \ifx\p_strc_constructions_headalign\empty \setupalign[#1]% use fast one \else \setupalign[\p_strc_constructions_headalign]% use fast one \fi \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \setbox\constructionheadbox\hbox{\box\constructionheadbox}% needed in case of e.g. a real big head font, see descriptions-006.tex \ht\constructionheadbox\strutht \dp\constructionheadbox\strutdp} \def\strc_constructions_set_hang#1% {\ifx\p_strc_constructions_hang\empty % nothing \else\ifx\p_strc_constructions_hang\v!fit \scratchdimen\htdp\constructionheadbox \getnoflines\scratchdimen \hangafter-\noflines \else\ifx\p_strc_constructions_hang\v!broad \scratchdimen\dimexpr\htdp\constructionheadbox+.5\strutht\relax \getnoflines\scratchdimen \hangafter-\noflines \else \hangafter-\p_strc_constructions_hang \fi\fi\fi \relax \hangindent\ifx#1\v!right-\fi\constructionsheadwidth} % The setups. These only deal with placement of the descriptor and initializing the % environment. The wrapping happens elsewhere. \startsetups[\??constructionrenderings:\v!left] \edef\p_strc_constructions_hang{\constructionparameter\c!hang}% \doifsetupselse{\??constructionrenderings:\v!left:\p_strc_constructions_hang} { \directsetup{\??constructionrenderings:\v!left:\p_strc_constructions_hang} } { \directsetup{\??constructionrenderings:\v!left:\v!hanging} } \stopsetups \startsetups[\??constructionrenderings:\v!right] \edef\p_strc_constructions_hang{\constructionparameter\c!hang} \doifsetupselse{\??constructionrenderings:\v!right:\p_strc_constructions_hang} { \directsetup{\??constructionrenderings:\v!right:\p_strc_constructions_hang} } { \directsetup{\??constructionrenderings:\v!right:\v!hanging} } \stopsetups \startsetups[\??constructionrenderings:\v!left:\v!none] \let\\=\crlf \noindent \strc_constructions_set_pure_box\v!flushleft \leftskip\dimexpr\leftconstructionskip+\constructionsheadwidth+\constructionsheaddistance\relax \rightskip\rightconstructionskip\relax \llap { \hbox to \leftskip { \hskip\leftconstructionskip \copy\constructionheadbox\hss } } \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!left:0] \directsetup{\??constructionrenderings:\v!left:\v!none} \stopsetups \startsetups[\??constructionrenderings:\v!left:] \directsetup{\??constructionrenderings:\v!left:\v!none} \stopsetups \startsetups[\??constructionrenderings:\v!right:\v!none] \let\\=\crlf \noindent \leftskip\leftconstructionskip \rightskip\dimexpr\rightconstructionskip+\constructionsheadwidth\relax %\strc_constructions_pure_hang_box\raggedleft \strc_constructions_set_pure_box\v!flushright \rlap { \hskip\dimexpr\hsize-\leftskip-\rightskip\relax \copy\constructionheadbox \hskip\rightconstructionskip } \advance\rightskip \constructionsheaddistance \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!right:0] \directsetup{\??constructionrenderings:\v!right:\v!none} \stopsetups \startsetups[\??constructionrenderings:\v!right:] \directsetup{\??constructionrenderings:\v!right:\v!none} \stopsetups \startsetups[\??constructionrenderings:\v!left:\v!margin]% \let\\=\crlf \noindent \strc_constructions_set_pure_box\v!flushleft \llap { \hbox to \constructionsheadwidth { \copy\constructionheadbox \hss } \hskip\constructionsheaddistance } \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!right:\v!margin]% \let\\=\crlf \noindent \strc_constructions_set_pure_box\v!flushright \rlap { \hskip\constructionsheaddistance \hbox to \constructionsheadwidth { \copy\constructionheadbox\hss } } \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!left:\v!hanging]% \let\\=\crlf \dontcomplain \advance\constructionsheadwidth \constructionsheaddistance \strc_constructions_set_hang_box\v!flushleft \strc_constructions_set_hang\v!left \noindent \llap { \vtop to \zeropoint { \box\constructionheadbox } } \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!right:\v!hanging]% \let\\=\crlf \dontcomplain \advance\constructionsheadwidth \constructionsheaddistance \strc_constructions_set_hang_box\v!flushright \strc_constructions_set_hang\v!right \noindent \rlap { \hbox to \dimexpr\hsize-\leftskip-\rightskip\relax { \hss \vtop to \zeropoint { \box\constructionheadbox } } } \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!top] \strc_sectioning_prevent_page_break\plusone \let\\=\space \noindent \copy\constructionheadbox % why copy ? \par \nobreak \edef\p_strc_constructions_inbetween{\constructionparameter\c!inbetween}% \ifx\p_strc_constructions_inbetween\empty \else \p_strc_constructions_inbetween \par \nobreak \fi \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups % why copy? historic reason? \startsetups[\??constructionrenderings:\v!margin] \let\\=\crlf \noindent \inmargin[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!leftmargin] \let\\=\crlf \noindent \inleft[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!rightmargin] \let\\=\crlf \noindent \inright[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!innermargin] \let\\=\crlf \noindent \ininner[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!outermargin] \let\\=\crlf \noindent \inouter[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}% \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!inmargin] \directsetup{\??constructionrenderings:\v!margin} \stopsetups \startsetups[\??constructionrenderings:\v!inleft] \directsetup{\??constructionrenderings:\v!leftmargin} \stopsetups \startsetups[\??constructionrenderings:\v!inright] \directsetup{\??constructionrenderings:\v!rightmargin} \stopsetups \startsetups[\??constructionrenderings:\v!serried] \edef\p_strc_constructions_width{\constructionparameter\c!width}% CHECK ! ! ! wrong parameter namespace \doifsetupselse{\??constructionrenderings:\v!serried:\p_strc_constructions_width} { \directsetup{\??constructionrenderings:\v!serried:\p_strc_constructions_width} } { \directsetup{\??constructionrenderings:\v!serried:\v!wide} } \stopsetups \startsetups[\??constructionrenderings:\v!serried:\v!fit] \let\\=\crlf \noindent \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox \hskip\constructionsheaddistance\relax \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!serried:\v!broad] \let\\=\crlf \noindent \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox \ifconditional\c_strc_constructions_distance_none \else \hskip\constructionsheaddistance \!!plus .5\constructionsheaddistance \!!minus .25\constructionsheaddistance\relax \fi \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!serried:] \directsetup{\??constructionrenderings:\v!serried:\v!broad} \stopsetups \startsetups[\??constructionrenderings:\v!serried:\v!wide] \let\\=\crlf \noindent \hbox to \constructionsheadwidth { \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox \hss } \hskip\constructionsheaddistance\relax \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups \startsetups[\??constructionrenderings:\v!hanging] % tricky: leftskipadaption is somewhat unpredictable \let\\=\crlf \noindent \advance\leftskip-\leftskipadaption\relax \ifdim\leftskipadaption=\zeropoint \leftskipadaption1.5\emwidth\relax % just some default \ifnum\c_strc_constructions_nested_state=\plusone \ifdim\leftskip>\zeropoint \relax \leftskipadaption\leftskip \fi \fi \fi \ifnum\c_strc_constructions_nested_state>\zerocount % was \ifnum\c_strc_constructions_nested_state=\plusone \advance\leftskip\leftskipadaption % but we're already further on \fi \hskip-\leftskipadaption\relax \ifhbox\constructionheadbox \unhbox\else\box\fi\constructionheadbox \ifconditional\c_strc_constructions_distance_none \else % we used to have just a kern, but long lines look bad then \scratchdistance\ifdim\constructionsheaddistance=\zeropoint .75\emwidth\else\constructionsheaddistance\fi \hskip \scratchdistance \s!plus .25\scratchdistance \s!minus.25\scratchdistance \fi \allowbreak % new \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups %D \starttyping %D \setupfootnotation[location=command,headcommand=\llap] %D \stoptyping \startsetups[\??constructionrenderings:\v!command] \noindent \constructionparameter\c!headcommand{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox} \useconstructionstyleandcolor\c!style\c!color \ignorespaces \stopsetups % you can use \placeclosesymbol or \qed to place a symbol at the end of a % construction \installcorenamespace{constructionclosesymbol} \let\placeclosesymbol\donothing \let\qed \donothing \def\strc_constructions_close_symbol_reset % no need for global {\global\expandafter\settrue\csname\??constructionclosesymbol\currentconstruction\endcsname \let\placeclosesymbol\strc_constructions_close_symbol_place \let\qed \strc_constructions_close_symbol_place} \unexpanded\def\strc_constructions_close_symbol_place {\ifconditional\csname\??constructionclosesymbol\currentconstruction\endcsname \global\expandafter\setfalse\csname\??constructionclosesymbol\currentconstruction\endcsname \edef\p_strc_constructions_closesymbol{\constructionparameter\c!closesymbol}% \ifx\p_strc_constructions_closesymbol\empty \else \constructionparameter\c!closecommand{\p_strc_constructions_closesymbol}% hm why {} maybe because box expected \fi \fi} \newif\ifnoconstructioncaption %D The storage macros: \let\currentconstructionlistentry\!!zerocount \def\strc_constructions_register {\ctxcommand{doiflisthasentry(\currentconstructionlistentry)}% \strc_constructions_register_nop \strc_constructions_register_yes} % \def\strc_constructions_register{\strc_constructions_register_yes} \def\strc_constructions_register_nop[#1][#2]% #1=interfaced-settings, #2=optional user data %{\writestatus{constructions}{reusing \currentconstruction: \number\currentconstructionlistentry}} {} \def\strc_constructions_discard {\iftrialtypesetting % \writestatus{constructions}{discarding \currentconstruction: \number\currentconstructionlistentry}% \ctxcommand{discardfromlist(\currentconstructionlistentry)}% \fi} \let\currentconstructionlistnumber \!!zerocount \let\currentconstructionsynchronize\relax \let\currentconstructionattribute \attributeunsetvalue \def\strc_constructions_register_yes[#1][#2]% #1=interfaced-settings, #2=optional user data {\begingroup % similar to structure so we might generalize this \setupcurrentconstruction[#1]% % xdef's will become edef's \xdef\currentconstructionexpansion {\constructionparameter\c!expansion}% \xdef\currentconstructionxmlsetup {\constructionparameter\c!xmlsetup}% \xdef\currentconstructioncatcodes {\constructionparameter\s!catcodes}% \xdef\currentconstructionlabel {\constructionparameter\c!label}% \xdef\currentconstructionreference {\constructionparameter\c!reference}% \xdef\currentconstructionreferenceprefix{\constructionparameter\c!referenceprefix}% %xdef\currentconstructionshownumber {\constructionparameter\c!number}% \xdef\currentconstructionincrementnumber{\constructionparameter\c!incrementnumber}% % \ifx\currentconstructionexpansion\empty \global\let\currentconstructionexpansion\v!no \fi % \ifx\currentconstructionexpansion\s!xml \xmlstartraw \xdef\currentconstructiontitle {\constructionparameter\c!title}% \xdef\currentconstructionbookmark{\constructionparameter\c!bookmark}% \xdef\currentconstructionmarking {\constructionparameter\c!marking}% \xdef\currentconstructionlist {\constructionparameter\c!list}% \xmlstopraw \ifx\currentconstructionlist\empty \global\let\currentconstructionlist\currentconstructiontitle \fi \global\let\currentconstructioncoding\s!xml \else \ifx\currentconstructionexpansion\v!yes \xdef\currentconstructiontitle {\constructionparameter\c!title}% \xdef\currentconstructionbookmark{\constructionparameter\c!bookmark}% \xdef\currentconstructionmarking {\constructionparameter\c!marking}% \xdef\currentconstructionlist {\constructionparameter\c!list}% \else \xdef\currentconstructiontitle {\detokenizedconstructionparameter\c!title}% \xdef\currentconstructionbookmark{\detokenizedconstructionparameter\c!bookmark}% \xdef\currentconstructionmarking {\detokenizedconstructionparameter\c!marking}% \xdef\currentconstructionlist {\detokenizedconstructionparameter\c!list}% \iflocation \ifx\currentconstructionbookmark\empty \begingroup \simplifycommands \xdef\currentconstructionbookmark{\detokenize\expandafter{\normalexpanded{\constructionparameter\c!title}}}% \endgroup \fi \fi \fi \ifx\currentconstructionlist\empty \globallet\currentconstructionlist\currentconstructiontitle \fi \globallet\currentconstructioncoding\s!tex \fi % \ifx\currentconstructiontitle\v!none % will become obsolete \global\noconstructioncaptiontrue\global\noconstructionnumbertrue \fi % \ifnoconstructioncaption % then why analyze anyway? \endgroup \let\currentconstructionlistnumber \relax \let\currentconstructionsynchronize\relax \let\currentconstructionattribute \relax \else \setnextinternalreferences{construction}\currentconstructionmain % plural \relax \scratchcounter\ctxcommand{addtolist{ % we can set a counter at the lua end metadata = { kind = "construction", name = "\currentconstructionmain", level = structures.sections.currentlevel(), catcodes = \the\catcodetable, % \currentdirectionparameters }, references = { internal = \nextinternalreference, order = \nextinternalorderreference, reference = "\currentconstructionreference", referenceprefix = "\referenceprefix", block = "\currentsectionblock", section = structures.sections.currentid(), }, titledata = { label = \!!bs\detokenize\expandafter{\currentconstructionlabel }\!!es, title = \!!bs\detokenize\expandafter{\currentconstructiontitle }\!!es, \ifx\currentconstructionbookmark\currentconstructiontitle \else bookmark = \!!bs\detokenize\expandafter{\currentconstructionbookmark}\!!es, \fi \ifx\currentconstructionlist\currentconstructiontitle \else list = \!!bs\detokenize\expandafter{\currentconstructionlist }\!!es, \fi }, \ifconditional\c_strc_constructions_number_state prefixdata = { prefix = "\constructionparameter\c!prefix", separatorset = "\constructionparameter\c!prefixseparatorset", conversion = \!!bs\constructionparameter\c!prefixconversion\!!es, conversionset = "\constructionparameter\c!prefixconversionset", set = "\constructionparameter\c!prefixset", segments = "\constructionparameter\c!prefixsegments", connector = \!!bs\constructionparameter\c!prefixconnector\!!es, }, numberdata = { numbers = structures.counters.compact("\currentconstructionnumber",nil,true), % ! number can be cloned separatorset = "\constructionparameter\c!numberseparatorset", conversion = "\constructionparameter\c!numberconversion", conversionset = "\constructionparameter\c!numberconversionset", starter = \!!bs\constructionparameter\c!numberstarter\!!es, stopper = \!!bs\constructionparameter\c!numberstopper\!!es, segments = "\constructionparameter\c!numbersegments", }, \or % symbol \fi userdata = \!!bs\detokenize{#2}\!!es % will be converted to table at the lua end } }\relax % \writestatus{constructions}{registering \currentconstruction: \number\scratchcounter}% \normalexpanded{% \endgroup \edef\noexpand\currentconstructionlistentry {\the\scratchcounter}% \edef\noexpand\currentconstructionattribute {\ctxcommand {setinternalreference("\referenceprefix","\currentconstructionreference",\nextinternalreference,"\interactionparameter\c!focus")}}% \edef\noexpand\currentconstructionsynchronize{\ctxlatecommand{enhancelist(\the\scratchcounter)}}% }% \fi} % This is not so nice, some day I'll just store the number with the entry % and deal with all at the Lua end, but first we need to be able to set % macros. \def\reinstateconstructionnumberentry#1% was xdef {\edef\currentconstructionattribute {\ctxcommand {getinternalreference(#1)}}% \edef\currentconstructionsynchronize{\ctxlatecommand{enhancelist(#1)}}} \installstructurelistprocessor{construction}{\usestructurelistprocessor{number+title}} % Helpers: \def\currentconstructionnumber{\constructionparameter\s!counter} \unexpanded\def\strc_constructions_next_indeed #get#tag#level{\strc_counters_increment_sub{#get{#tag}\s!counter}{#level}} \unexpanded\def\strc_constructions_reset_indeed#get#tag#level{\strc_counters_reset_sub {#get{#tag}\s!counter}{#level}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/file-mod.mkvi0000644000175000017500000002456212161703335024267 0ustar norbertnorbert%D \module %D [ file=file-mod, % was core-fil, %D version=20110701, % 1997.11.15, %D title=\CONTEXT\ File Macros, %D subtitle=Module Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 File Macros / Modules} \unprotect \registerctxluafile{file-mod}{1.001} %D \macros %D {usemodule} %D %D Most of \CONTEXT is preloaded in the format file. Some very %D domain specific typesetting topics are however dealt with in %D separate modules, e.g. typesetting of chemical structure %D formulas. These modules are loaded by: %D %D \showsetup{usemodule} %D %D More information on the specific modules can be found in %D their dedicated manuals. We use \type {\next} so that we %D can \type {\end} in modules. \unexpanded\def\usemodules {\dotripleempty\strc_modules_use} \let\usemodule \usemodules \let\usetexmodule\usemodules % \def\strc_modules_use[#category][#name][#parameters]% % {\pushmacro\currentmodule % \pushmacro\currentmoduleparameters % \let\currentmoduleparameters\empty % \ifthirdargument % \singleexpandafter\strc_modules_use_a % \else\ifsecondargument % \doubleexpandafter\strc_modules_use_b % \else % \doubleexpandafter\strc_modules_use_c % \fi\fi % % here we load % \popmacro\currentmoduleparameters % \popmacro\currentmodule} % % \def\strc_modules_use_a[#category][#name][#parameters]% % {\doifsomething{#name} % {\def\currentmoduleparameters{#parameters}% % \processcommalist[#name]{\strc_modules_use_indeed{#category}}}} % % \def\strc_modules_use_b[#category][#name][#parameters]% % {\doifsomething{#name} % {\doifassignmentelse{#name} % {\def\currentmoduleparameters{#name}% % \processcommalist[#category]{\strc_modules_use_indeed\empty}} % {\processcommalist[#name]{\strc_modules_use_indeed{#category}}}}} % % \def\strc_modules_use_c[#category][#name][#parameters]% % {\processcommalist[#category]{\strc_modules_use_indeed\empty}} % % \def\strc_modules_use_indeed#category#name% % {\ctxcommand{usemodules("#category","#name","\truefilename{#name}")}} \def\strc_modules_use[#category][#name][#parameters]% category=t|m|x|p|... {\pushmacro\currentmodule \pushmacro\currentmodulecategory \pushmacro\currentmoduleparameters \ifthirdargument \edef\currentmodulecategory {#category}% \edef\currentmodule {#name}% \def \currentmoduleparameters{#parameters}% \else\ifsecondargument \doifassignmentelse{#name} {\let\currentmodulecategory \empty \edef\currentmodule {#category}% \edef\currentmoduleparameters{#name}} {\edef\currentmodulecategory {#category}% \edef\currentmodule {#name}% \let \currentmoduleparameters\empty}% \else \let \currentmodulecategory \empty \edef\currentmodule {#category}% \let \currentmoduleparameters\empty \fi\fi \processcommacommand[\currentmodule]{\strc_modules_use_indeed\currentmodulecategory}% \popmacro\currentmoduleparameters \popmacro\currentmodulecategory \popmacro\currentmodule} \def\strc_modules_use_indeed#category#name% truefilename moved to lua end {\ctxcommand{usemodules("#category","#name")}} % ,"\truefilename{#name}")}} \installcorenamespace{module} \let\currentmoduleparameters\empty \let\currentmodule \s!unknown \unexpanded\def\startmodule {\doifnextoptionalelse\syst_modules_start_yes\syst_modules_start_nop} \def\syst_modules_start_yes[#name]% {\pushmacro\currentmodule \pushmacro\currentmoduleparameters \def\currentmodule{#name}} \def\syst_modules_start_nop#name % {\syst_modules_start_yes[#name]} \unexpanded\def\stopmodule {\popmacro\currentmoduleparameters \popmacro\currentmodule} \unexpanded\def\setupmodule {\dodoubleempty\syst_modules_setup} \def\syst_modules_setup[#name][#parameters]% {\scratchtoks\expandafter{\currentmoduleparameters}% \ifsecondargument \getparameters[\??module#name:][#parameters]% internal (defaults) \normalexpanded{\getparameters[\??module#name:][\the\scratchtoks]}% loadtime (user) \else \getparameters[\??module\currentmodule:][#name]% internal (defaults) \normalexpanded{\getparameters[\??module\currentmodule:][\the\scratchtoks]}% loadtime (user) \fi \let\currentmoduleparameters\empty} % to be tested: % % \def\syst_modules_setup[#name][#parameters]% % {\ifsecondargument % \getparameters[\??module#name:][#parameters]% internal (defaults) % \normalexpanded{\getparameters[\??module#name:][\normalunexpanded\expandafter{\currentmoduleparameters}]}% loadtime (user) % \else % \getparameters[\??module\currentmodule:][#name]% internal (defaults) % \normalexpanded{\getparameters[\??module\currentmodule:][\normalunexpanded\expandafter{\currentmoduleparameters}]}% loadtime (user) % \fi % \let\currentmoduleparameters\empty} \def\moduleparameter#name#parameter% {\csname\??module \ifcsname\??module#name:#parameter\endcsname#name:#parameter\fi \endcsname} \letvalue\??module\empty % so we default to empty as with all parameters \def\currentmoduleparameter{\moduleparameter\currentmodule} % no need for inlining \unexpanded\def\useluamodule [#name]{\ctxlua{dofile(resolvers.findctxfile("#name"))}} \unexpanded\def\luaenvironment #name {\ctxlua{dofile(resolvers.findctxfile("#name"))}} % \usemodule[newmml] % \usemodule[newmml][a=b] % \usemodule[x][newmml] % \usemodule[x][newmml][a=b] % % \startmodule [mathml] % \setupmodule[a=c] \relax [\currentmoduleparameter{a}] % user vars will be set afterwards % \setupmodule[a=c] \relax [\currentmoduleparameter{a}] % user vars are now forgotten % \stopmodule % one can introduce test sections with: % % \enablemode[newmml:test:\currentmoduleparameter{test}] % \startmode[newmml:test:yes} ... \stopmode % % these will be ignored unless test=yes % % however, a better way is: \unexpanded\def\startmoduletestsection {\begingroup \setupmodule % we need to make sure that the vars are set \doifelse{\currentmoduleparameter\v!test}\v!yes {\endgroup \writestatus\currentmodule{loading experimental code}} {\endgroup \writestatus\currentmodule{skipping experimental code}% \gobbleuntil\stopmoduletestsection}} \let\stopmoduletestsection\donothing % will become file-run %D To save memory, we implement some seldomly used commands in a lazy way. Nota %D bene: such runtime definitions are to be defined global. %D %D \starttyping %D \fetchruntimecommand\showaccents{\f!colorprefix ...} %D \stoptyping \installcorenamespace{runtimeloaded} \unexpanded\def\fetchruntimecommand#1#2% {\unexpanded\def#1{\dofetchruntimecommand#1{#2}}} \def\dofetchruntimecommand#1#2% actually a test on #1 being define would be ok as well {\ifcsname\??runtimeloaded#2\endcsname % already loaded \else \global\let#1\undefined \startreadingfile \startnointerference % \bgroup \cleanupfeatures % better \setnormalcatcodes / test first \readfile{#2.\mksuffix}\donothing\donothing \stopnointerference % \egroup \stopreadingfile \letgvalue{\??runtimeloaded#2}\empty \fi \ifx#1\undefined \writestatus\m!system{command \string#1 not found in file #2}% \unexpanded\gdef#1{{\infofont[unknown command \string#1]}}% \fi #1} %D \macros %D {doifolderversionelse} %D %D We start with a macro specially for Aditya who wants to be able %D to use development versions of \MKIV\ for real documents. %D %D \starttyping %D \doifolderversionelse\contextversion{1010.10.10} {OLDER} {OKAY} => OLDER %D \doifolderversionelse\contextversion{2020.20.20} {OLDER} {OKAY} => OKAY %D \doifolderversionelse\contextversion{2020} {OLDER} {OKAY} => OKAY %D \stoptyping %D %D The version pattern is \type {yyyy.mm.dd} (with mm and dd being optional). \unexpanded\def\doifolderversionelse#parent#child{\ctxcommand{doifolderversionelse("#parent","#child")}} \unexpanded\def\doifoldercontextelse #child{\ctxcommand{doifolderversionelse("#child")}} %D Relatively new: \unexpanded\def\syst_modules_direct_lua#1#2% {\edef\m_module_command_command {#1}% \edef\m_module_command_function{#2}% \directsetup{module:\m_module_command_command:start}% \ctxlua{\m_module_command_function()}% \directsetup{module:\m_module_command_command:stop}} \unexpanded\def\syst_modules_single_lua#1#2% {\edef\m_module_command_command {#1}% \edef\m_module_command_function{#2}% \dosingleempty\syst_modules_single_lua_indeed} \unexpanded\def\syst_modules_single_lua_indeed[#1]% {\directsetup{module:\m_module_command_command:start}% \ctxlua{\m_module_command_function(\!!bs#1\!!es)}% \directsetup{module:\m_module_command_command:stop}} \unexpanded\def\syst_modules_double_lua#1#2% {\edef\m_module_command_command {#1}% \edef\m_module_command_function{#2}% \dodoubleempty\syst_modules_double_lua_indeed} \unexpanded\def\syst_modules_double_lua_indeed[#1][#2]% {\directsetup{module:\m_module_command_command:start}% \ctxlua{\m_module_command_function(\!!bs#1\!!es,\!!bs#2\!!es)}% \directsetup{module:\m_module_command_command:stop}} \def\installmodulecommandlua #1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_direct_lua{\strippedcsname#1}{#2}}}} \def\installmodulecommandluasingle#1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_single_lua{\strippedcsname#1}{#2}}}} \def\installmodulecommandluadouble#1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_double_lua{\strippedcsname#1}{#2}}}} \unexpanded\def\syst_modules_one_lua#1#2#3% {\directsetup{module:#1:start}% \ctxlua{#2(\!!bs#3\!!es)}% \directsetup{module:#1:stop}} \unexpanded\def\syst_modules_two_lua#1#2#3#4% {\directsetup{module:#1:start}% \ctxlua{#2(\!!bs#3\!!es,\!!bs#4\!!es)}% \directsetup{module:#1:stop}} \def\installmodulecommandluaone #1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_one_lua {\strippedcsname#1}{#2}}}} \def\installmodulecommandluatwo #1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_two_lua {\strippedcsname#1}{#2}}}} % obsolete % % \def\documentresources{\@@erurl} % % \unexpanded\def\setupexternalresources % {\dodoubleargument\getparameters[\??er]} % % \setupexternalresources % [url=] % new: \unexpanded\def\useluamodule[#1]{\ctxcommand{useluamodule("#1")}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-sty.mkvi0000644000175000017500000003274312130411274024350 0ustar norbertnorbert%D \module %D [ file=font-sty, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Styles, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Styles} \unprotect %D \macros %D {definealternativestyle} %D %D In the main modules we are going to implement lots of %D parameterized commands and one of these parameters will %D concern the font to use. To suit consistent use of fonts we %D here implement a mechanism for defining the keywords that %D present a particular style or alternative. %D %D \starttyping %D \definealternativestyle [keywords] [\style] [\nostyle] %D \stoptyping %D %D The first command is used in the normal textflow, while the %D second command takes care of headings and alike. Consider %D the next two definitions: %D %D \starttyping %D \definealternativestyle [bold] [\bf] [] %D \definealternativestyle [cap] [\cap] [\cap] %D \stoptyping %D %D A change \type{\bf} in a heading which is to be set in %D \type{\tfd} does not look that well, so therefore we leave %D the second argument of \type{\definealternativestyle} empty. %D When we capatalize characters using the pseudo small cap %D command \type{\cap}, we want this to take effect in both %D text and headings, which is accomplished by assigning both %D arguments. \installcorenamespace{alternativestyles} \setnewconstant \c_font_current_alternative_style_index \plusone \unexpanded\def\definealternativestyle {\dotripleempty\font_basics_define_alternative_style} \def\font_basics_define_alternative_style[#commands][#variantone][#varianttwo]% {\processcommalist[#commands]{\font_basics_define_alternative_style_indeed{#variantone}{#varianttwo}}} \let\definestyle\definealternativestyle % later redefined \def\font_basics_define_alternative_style_indeed#variantone#varianttwo#command% {\ifcsname#command\endcsname % no redefinition \else \setuvalue{#command}{\groupedcommand{#variantone}{}}% \fi \setvalue{\??alternativestyles#command}{\font_helpers_apply_alternative_style{#variantone}{#varianttwo}}}% \def\font_helpers_apply_alternative_style {\ifcase\c_font_current_alternative_style_index \expandafter\gobbletwoarguments \or \expandafter\firstoftwoarguments \or \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\applyalternativestyle#name% public {\ifcsname\??alternativestyles#name\endcsname\csname\??alternativestyles#name\expandafter\endcsname\fi} %D Maybe too geneneric, but probably ok is the following. (Maybe one %D day we will use a dedicated grouped command for styles.) % \appendtoks % \let\groupedcommand\thirdofthreearguments % \to \everysimplifycommands %D This command also defines the keyword as command. This means %D that the example definition of \type{bold} we gave before, %D results in a command \type{\bold} which can be used as: %D %D \startbuffer %D He's a \bold{bold} man with a {\bold head}. %D \stopbuffer %D %D \typebuffer %D %D or %D %D \startexample %D \definealternativestyle[bold][\bf][]\getbuffer %D \stopexample %D %D Such definitions are of course unwanted for \type{\cap} %D because this would result in an endless recursive call. %D Therefore we check on the existance of both the command and %D the substitution. The latter is needed because for instance %D \type{\type} is an entirely diferent command. That command %D handles verbatim, while the style command would just switch %D to teletype font. This is just an example of a tricky %D naming coincidence. %D \macros %D {doconvertfont,noconvertfont, %D dontconvertfont,redoconvertfont} %D %D After having defined such keywords, we can call for them by %D using %D %D \starttyping %D \doconvertfont{keyword}{text} %D \stoptyping %D %D We deliberately pass an argument. This enables us to %D assign converters that handle one argument, like %D \type{\cap}. %D %D By default the first specification is used to set the style, %D exept when we say \type{\dontconvertfont}, after which the %D second specification is used. We can also directly call for %D \type{\noconvertfont}. In nested calls, we can restore the %D conversion by saying \type{\redoconvertfont}. %D These commands are not grouped! Grouping is most probably %D done by the calling macro's and would lead to unnecessary %D overhead. \let\m_current_convert_font \empty \let\m_current_convert_font_dt\empty \unexpanded\def\doconvertfont#specification% takes second argument / this command is obsolete {\edef\m_current_convert_font{#specification}% \ifx\m_current_convert_font\empty %\expandafter\firstofoneargument \else \expandafter\font_helpers_do_convert_font \fi} \def\font_helpers_do_convert_font {\edef\m_current_convert_font_dt{\detokenize\expandafter{\m_current_convert_font}}% \ifcsname\??alternativestyles\m_current_convert_font_dt\endcsname \csname\??alternativestyles\m_current_convert_font_dt\expandafter\endcsname \else\ifcsname\m_current_convert_font_dt\endcsname \csname\m_current_convert_font_dt\expandafter\endcsname \else \doubleexpandafter\m_current_convert_font \fi\fi} %D Low level switches (downward compatible, but we keep them as one can use %D them in styles): %D %D \starttyping %D \usemodule[abr-02] %D \setuphead[chapter][style=\bfb] %D \setupfooter[style=\dontconvertfont\bf] %D \chapter{This is \TEX} %D \stoptyping \unexpanded\def\dontconvertfont{\c_font_current_alternative_style_index\plustwo} % needs checking in usage \unexpanded\def\redoconvertfont{\c_font_current_alternative_style_index\plusone} % needs checking in usage %D The new one: \unexpanded\def\dousestyleparameter#value% {\edef\currentstyleparameter{#value}% \ifx\currentstyleparameter\empty\else \expandafter\dousecurrentstyleparameter \fi} \unexpanded\def\dousestylehashparameter#hash#parameter% {\ifcsname#hash#parameter\endcsname \expandafter\dousestyleparameter\csname#hash#parameter\endcsname \fi} \unexpanded\def\dousecurrentstyleparameter % empty check outside here {\edef\detokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}% \settrue\fontattributeisset % reset is done elsewhere \ifcsname\??alternativestyles\detokenizedstyleparameter\endcsname \csname\??alternativestyles\detokenizedstyleparameter\endcsname \else\ifcsname\detokenizedstyleparameter\endcsname \csname\detokenizedstyleparameter\endcsname \else \currentstyleparameter \fi\fi} \let\dosetfontattribute\dousestylehashparameter % for a while %D New commands (not yet interfaced): %D %D \startbuffer %D \definestyle[one][style=bold,color=darkblue] %D %D test \one{test} test %D test \style[one]{test} test %D test \style[color=red]{test} test %D test \style[Serif at 20pt]{test} test %D \stopbuffer %D %D \typebuffer \startlines \getbuffer \stoplines % definitions .. no tagging here \installcorenamespace{style} \installcorenamespace{stylecheck} \installcommandhandler \??style {style} \??style \setupstyle [%\c!style=, %\c!color=, \c!method=\v!command] \appendtoks \letvalue{\??stylecheck\currentstyle}\relax \edef\p_method{\styleparameter\c!method}% \ifx\p_method\v!command \setuevalue{\e!start\currentstyle}{\font_styles_apply_start{\currentstyle}}% \setuevalue{\e!stop \currentstyle}{\font_styles_apply_stop}% \setuevalue {\currentstyle}{\font_styles_apply_grouped{\currentstyle}}% no longer groupedcommand here \fi \to \everydefinestyle \unexpanded\def\font_styles_apply_start#name% {\begingroup \font_styles_use_defined{#name}} \unexpanded\def\font_styles_apply_stop {\endgroup} \unexpanded\def\font_styles_apply_grouped#name% assumes that the next is { or \bgroup {\bgroup \def\g_style{\font_styles_use_defined{#name}}% \afterassignment\g_style \let\nexttoken} \unexpanded\def\font_styles_use_defined#name% {\edef\currentstyle{#name}% \usestylestyleandcolor\c!style\c!color} \unexpanded\def\font_styles_use_generic#specification% {\let\currentstyle\s!unknown % reasonable generic tag \letstyleparameter\c!style\empty \letstyleparameter\c!color\empty \setupcurrentstyle[#specification]% \usestylestyleandcolor\c!style\c!color} % commands \installcorenamespace{styleargument} \unexpanded\def\style[#name]% as this is can be a switch we use groupedcommand {\csname\??styleargument \ifcsname\??stylecheck#name\endcsname 2% defined as style \else\ifcsname#name\endcsname 1% defined as command \else 3% specification \fi\fi \endcsname{#name}} \setvalue{\??styleargument1}#name% {\groupedcommand{\csname#name\endcsname}{}} \setvalue{\??styleargument2}#name% {\groupedcommand{\font_styles_use_defined{#name}}{}} % or {\font_styles_apply_grouped{#name}} \setvalue{\??styleargument3}#specification% {\doifassignmentelse{#specification}\font_styles_assignment\font_styles_direct{#specification}} \def\font_styles_assignment#specification{\groupedcommand{\font_styles_use_generic{#specification}}{}} \def\font_styles_direct #specification{\groupedcommand{\definedfont[#specification]}{}} % environments \installcorenamespace{styleenvironment} \unexpanded\def\startstyle[#name]% {\begingroup \csname\??styleenvironment \ifcsname\??stylecheck#name\endcsname 2% defined as style \else\ifcsname#name\endcsname 1% defined as command \else 3% specification \fi\fi \endcsname{#name}} \unexpanded\def\stopstyle {\endgroup \autoinsertnextspace} % will be configurable, maybe also in \definestartstop \setvalue{\??styleenvironment1}#name% {\csname#name\endcsname} \setvalue{\??styleenvironment2}#name% {\font_styles_use_defined{#name}} \setvalue{\??styleenvironment3}#specification% {\doifassignmentelse{#specification}\font_styles_start_assignment\font_styles_start_direct{#specification}} \def\font_styles_start_assignment#specification{\font_styles_use_generic{#specification}} \def\font_styles_start_direct #specification{\definedfont[#specification]\relax} %D Still experimental (might even go away). % \definestylecollection[mine] % \definestyleinstance[mine][default][sorry] % \definestyleinstance[mine][tt][bs][ttbs:\rm\sl] % \definestyleinstance[mine][tt][bf][ttbf:\rm\sl] % \definestyleinstance[mine][bf][\sl] % \definestyleinstance[mine][sl][\tt] % {\bf test \mine test \sl test \mine test \bs oeps \mine oeps {\tt test \mine \bf test}} \installcorenamespace{stylecollection} \unexpanded\def\definestylecollection {\dosingleargument\font_styles_define_style_collection} \def\font_styles_define_style_collection[#name]% {\iffirstargument \setuvalue{#name}{\styleinstance[#name]}% \def\font_styles_define_style_collection_a#style% {\def\font_styles_define_style_collection_b#alternative{\letbeundefined{\??stylecollection#name:#style:#alternative}}% \font_helpers_process_alternative_list\font_styles_define_style_collection_b \font_styles_define_style_collection_b\s!default}% \font_helpers_process_style_list\font_styles_define_style_collection_a \font_styles_define_style_collection_a\s!default \fi} \unexpanded\def\definestyleinstance {\doquadrupleargument\font_styles_define_style_instance} \def\font_styles_define_style_instance[#instance][#2][#3][#4]% [name] [rm|ss|tt|..] [sl|bf|...] [whatever] {\iffirstargument \ifcsname#1\endcsname\else\font_styles_define_style_collection[#instance]\fi \fi \iffourthargument \setvalue{\??stylecollection#instance:#2:#3}{#4}% \else\ifthirdargument \setvalue{\??stylecollection#instance::#2}{#3}% \else\ifsecondargument \letvalueempty{\??stylecollection#instance::#2}% \fi\fi\fi} % \unexpanded\def\styleinstance[#instance]% will be made faster % {%\begingroup\normalexpanded{\noexpand\infofont[#1:\fontstyle:\fontalternative]}\endgroup % \executeifdefined{\??stylecollection#instance:\fontstyle:\fontalternative}% % {\executeifdefined{\??stylecollection#instance:\fontstyle:\s!default}% % {\executeifdefined{\??stylecollection#instance::\fontalternative} % {\getvalue {\??stylecollection#instance::\s!default}}}}} \unexpanded\def\styleinstance[#instance]% {\csname\??stylecollection#instance:% \ifcsname\??stylecollection#instance:\fontstyle:\fontalternative\endcsname \fontstyle:\fontalternative \else\ifcsname\??stylecollection#instance:\fontstyle:\s!default\endcsname \fontstyle:\s!default \else\ifcsname\??stylecollection#instance::\fontalternative\endcsname :\fontalternative \else :\s!default \fi\fi\fi \endcsname} %D Variant selectors %D %D \starttyping %D \mathematics {\vsone{\utfchar{0x2229}}} %D \mathematics {\utfchar{0x2229}\vsone{}} %D \stoptyping \unexpanded\edef\vsone#character{#character\normalUchar"FE00 } % used \unexpanded\edef\vstwo#character{#character\normalUchar"FE01 } % not used but handy for testing %D For historic reasons we keep the following around but they are no longer %D that relevant for \MKIV. \unexpanded\def\doattributes#1#2#3#4% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \dousestylehashparameter{#1}{#2}% \dousecolorhashparameter{#1}{#3}% #4% \endgroup} \unexpanded\def\dostartattributes#1#2#3% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \dousestylehashparameter{#1}{#2}% \dousecolorhashparameter{#1}{#3}} \let\dostopattributes\endgroup \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-dig.mkiv0000644000175000017500000000267012161703335024323 0ustar norbertnorbert%D \module %D [ file=typo-dig, %D version=2010.01.18, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Digits, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Digits} \unprotect \registerctxluafile{typo-dig}{1.001} \definesystemattribute[digits][public] %D This could as well be a dynamic font feature but why bother. %D %D \macros %D {\equaldigits} %D %D \startbuffer %D test test \ruledhbox{123} test test\par %D test test \ruledhbox{\equaldigits{123}} test test\par %D test test \equaldigits{123} test test\par %D \stopbuffer %D %D \typebuffer %D %D This calls result in: %D %D \startlines %D \getbuffer %D \stoplines \unexpanded\def\setdigitsmanipulation[#1]% {\ctxcommand{setdigitsmanipulation("#1")}} \unexpanded\def\resetdigitsmanipulation {\attribute\digitsattribute\attributeunsetvalue} \appendtoks \resetdigitsmanipulation \to \everyresettypesetting \unexpanded\def\equaldigits{\groupedcommand{\setdigitsmanipulation[\number\plusone]}{}} \unexpanded\def\dummydigit {\hphantom {\setdigitsmanipulation[\number\plusone]0}} \appendtoks \resetdigitsmanipulation \to \everyinitializeverbatim \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/export-example.tex0000644000175000017500000000461611754241457025406 0ustar norbertnorbert% language=uk \usemodule[abr-01] \setupexport [%bodyfont=16pt, width=650pt, %align=flushleft, hyphen=yes] \setupbackend [export=export-example.xml, xhtml=export-example.xhtml, css=export-example.css] % \setupalign % [flushleft] \settaggedmetadata [title=Export Example, author=Hans Hagen, version=0.1] \setupbodyfont [dejavu] \setupinteraction [state=start] \setuplayout [width=middle] \setupwhitespace [big] \definedescription [description] \enabledirectives[export.css.hyphens=yes] \enabledirectives[export.css.textwidth=100em] \definehighlight[interesting][style=bold,color=red] \starttext \startchapter[title=Example] \startparagraph \input zapf (Zapf) \stopparagraph \startparagraph Watching a \interesting {movie} after reading a review on \goto{my favourite movie reviews site}[url(http://outlawvern.com/)] is much more fun. \footnote {Just a note.} \stopparagraph \placefigure {} {\startcombination[3*1] {\externalfigure[hacker.jpg][width=3cm]} {first} {\externalfigure[hacker.jpg][width=4cm]} {second} {\externalfigure[hacker.jpg][width=2cm]} {third} \stopcombination} \startparagraph \input zapf (Zapf) \stopparagraph \placefigure {} {\externalfigure[mill.png]} \startparagraph \input tufte (Tufte) \stopparagraph \placefigure {} {\externalfigure[cow.pdf]} \startparagraph \input tufte (Tufte) \stopparagraph \startitemize[1] \startitem \input ward (Ward) \stopitem \startitem \input knuth (Knuth) \stopitem \stopitemize \startitemize[2,packed] \startitem \input zapf (Zapf) \stopitem \startitem \input tufte (Tufte) \stopitem \stopitemize \startparagraph \input zapf (Zapf) \stopparagraph \startdescription {Ward} \input ward \stopdescription \startdescription {Tufte} \input tufte \stopdescription \startparagraph \input knuth (Knuth) \stopparagraph \startformula e = mc^2 \stopformula \startparagraph Okay, it's somewhat boring to always use the same formula, so how about $\sqrt{4} = 2$ or travelling at \unit{120 km/h} instead of $\unit{110 km/h}$. \stopparagraph \bTABLE \bTR \bTD test \eTD \bTD test \eTD \eTR \bTR \bTD[nx=2] test \eTD \eTR \eTABLE \starttabulate[|l|r|p|] \NC left \NC right \NC \input ward \NC \NR \NC l \NC r \NC \input ward \NC \NR \stoptabulate It looks like we're using \CONTEXT\ to produce some kind of \XML\ output. \typefile{export-example.tex} \stopchapter \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-sbe.mkiv0000644000175000017500000001065112130411274024301 0ustar norbertnorbert%D \module %D [ file=strc-sbe, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Section Block Environments, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Section Block Environments} \unprotect % \def\ChapterEntry#1#2#3% % {chapter : \hbox to \hsize{\strut\bf#2\hss#3}\endgraf\placelist[section]} % % \startfrontmatter % optional % \placelist[chapter][alternative=command,command=\ChapterEntry,criterium=text] \page % \stopfrontmatter % optional % % \startbodymatter % optional % \chapter{first} \section{one} test \section{two} test \page % \chapter{second} \section{alpha} test \section{beta} test \page % \stopbodymatter % optional \installcorenamespace{sectionblock} \installcommandhandler \??sectionblock {sectionblock} \??sectionblock \setupsectionblock [\c!number=\v!yes, \c!page=\v!right] % otherwise marks are reset too soon \newtoks\everybeforesectionblock \newtoks\everyaftersectionblock \let\strc_sectionblock_define_normal\definesectionblock \unexpanded\def\definesectionblock {\dotripleargument\strc_sectionblock_define} \def\strc_sectionblock_define[#1][#2][#3]% singular plural settings {\strc_sectionblock_define_normal[#1][#3]% \expandafter\newif\csname if#2\endcsname % obsolete \strc_sectionblock_set_environment{#1}\empty \setuvalue{\e!start#2}{\startsectionblock[#1]}% \setuvalue{\e!stop #2}{\stopsectionblock}} \ifdefined \resetallstructuremarks \else \let\resetallstructuremarks\relax \fi \def\strc_sectionblock_handle_page {\edef\p_strc_sectionblock_page{\sectionblockparameter\c!page}% \ifx\p_strc_sectionblock_page\empty \else \page[\p_strc_sectionblock_page]% \fi} \appendtoks \strc_sectionblock_handle_page \resetallstructuremarks \strc_sectionblock_get_environment\currentsectionblock \sectionblockparameter\c!before % don't move \dostarttagged\t!division\currentsectionblock \to \everybeforesectionblock \appendtoks \sectionblockparameter\c!after % don't move \strc_sectionblock_handle_page \dostoptagged \resetallstructuremarks \to \everyaftersectionblock \unexpanded\def\setsectionblock {\dosingleargument\strc_sectionblock_set} \def\strc_sectionblock_set[#1]% used to set the default {\edef\currentsectionblock{\ctxcommand{setsectionblock("#1")}}} \let\currentsectionblock\empty % was \s!unknown \unexpanded\def\startsectionblock[#1]% {%\ctxlua{structures.counters.check(0)}% we assume sane usage of \page, as this is the only workable place (in push) \begingroup \edef\currentsectionblock{\ctxcommand{pushsectionblock("#1")}}% \csname #1true\endcsname % obsolete \setsystemmode\currentsectionblock \the\everybeforesectionblock\relax \showmessage\m!structures1\currentsectionblock} \unexpanded\def\stopsectionblock {\showmessage\m!structures2\currentsectionblock \the\everyaftersectionblock\relax \edef\currentsectionblock{\ctxcommand{popsectionblock()}}% \endgroup} %D \starttyping %D \startsectionblockenvironment[frontpart] %D \setupnumber[userpage][numberconversion=romannumerals,start=1] %D \stopsectionblockenvironment %D %D \startsectionblockenvironment[bodypart] %D \setupnumber[userpage][numberconversion=numbers,start=1] %D \stopsectionblockenvironment %D %D \startsectionblockenvironment[backpart] %D \setupnumber[userpage][numberconversion=numbers,start=1] %D \stopsectionblockenvironment %D %D \starttext %D \startfrontmatter \chapter{test} \stopfrontmatter %D \startbodymatter \chapter{test} \stopbodymatter %D \startappendices \chapter{test} \stopappendices %D \stoptext %D \stoptyping \installcorenamespace{sectionblockenvironment} \unexpanded\def\strc_sectionblock_set_environment#1#2% {\setvalue{\??sectionblockenvironment#1}{#2}} \unexpanded\def\strc_sectionblock_get_environment#1% {\csname\??sectionblockenvironment#1\endcsname} \unexpanded\setvalue{\e!start\v!sectionblockenvironment}% {\dosingleargument\strc_sectionblock_environment_start} \letvalue{\e!stop\v!sectionblockenvironment}\relax \def\strc_sectionblock_environment_start[#1]% evt \pushendofline \popendofline {\grabuntil{\e!stop\v!sectionblockenvironment}{\strc_sectionblock_set_environment{#1}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-newmml.mkiv0000644000175000017500000000066411754241457024345 0ustar norbertnorbert%D \module %D [ file=x-newmml, %D version=2008.05.28, %D title=\CONTEXT\ XML Modules, %D subtitle=MathML Renderer, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \input x-mathml.mkiv \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-odv.lua0000644000175000017500000022727512130411274024142 0ustar norbertnorbertif not modules then modules = { } end modules ['font-odv'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Kai Eigner, TAT Zetwerk / Hans Hagen, PRAGMA ADE", copyright = "TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- A few remarks: -- -- This code is a partial rewrite of the code that deals with devanagari. The data and logic -- is by Kai Eigner and based based on Microsoft's OpenType specifications for specific -- scripts, but with a few improvements. More information can be found at: -- -- deva: http://www.microsoft.com/typography/OpenType%20Dev/devanagari/introO.mspx -- dev2: http://www.microsoft.com/typography/OpenType%20Dev/devanagari/intro.mspx -- -- As I touched nearly all code, reshuffled it, optimized a lot, etc. etc. (imagine how -- much can get messed up in over a week work) it could be that I introduced bugs. There -- is more to gain (esp in the functions applied to a range) but I'll do that when -- everything works as expected. Kai's original code is kept in font-odk.lua as a reference -- so blame me (HH) for bugs. -- -- Interesting is that Kai managed to write this on top of the existing otf handler. Only a -- few extensions were needed, like a few more analyzing states and dealing with changed -- head nodes in the core scanner as that only happens here. There's a lot going on here -- and it's only because I touched nearly all code that I got a bit of a picture of what -- happens. For in-depth knowledge one needs to consult Kai. -- -- The rewrite mostly deals with efficiency, both in terms of speed and code. We also made -- sure that it suits generic use as well as use in ConTeXt. I removed some buglets but can -- as well have messed up the logic by doing this. For this we keep the original around -- as that serves as reference. Due to the lots of reshuffling glyphs quite some leaks -- occur(red) but once I'm satisfied with the rewrite I'll weed them. I also integrated -- initialization etc into the regular mechanisms. -- -- In the meantime, we're down from 25.5-3.5=22 seconds to 17.7-3.5=14.2 seconds for a 100 -- page sample (mid 2012) with both variants so it's worth the effort. Some more speedup is -- to be expected. Due to the method chosen it will never be real fast. If I ever become a -- power user I'll have a go at some further speed up. I will rename some functions (and -- features) once we don't need to check the original code. We now use a special subset -- sequence for use inside the analyzer (after all we could can store this in the dataset -- and save redundant analysis). -- -- I might go for an array approach with respect to attributes (and reshuffling). Easier. -- -- Some data will move to char-def.lua (some day). -- -- Hans Hagen, PRAGMA-ADE, Hasselt NL -- Matras: according to Microsoft typography specifications "up to one of each type: -- pre-, above-, below- or post- base", but that does not seem to be right. It could -- become an option. -- -- The next code looks weird anyway: the "and boolean" should move inside the if -- or we should check differently (case vs successive). -- -- local function ms_matra(c) -- local prebase, abovebase, belowbase, postbase = true, true, true, true -- local n = c.next -- while n and n.id == glyph_code and n.subtype<256 and n.font == font do -- local char = n.char -- if not dependent_vowel[char] then -- break -- elseif pre_mark[char] and prebase then -- prebase = false -- elseif above_mark[char] and abovebase then -- abovebase = false -- elseif below_mark[char] and belowbase then -- belowbase = false -- elseif post_mark[char] and postbase then -- postbase = false -- else -- return c -- end -- c = c.next -- end -- return c -- end -- todo: first test for font then for subtype local insert, imerge = table.insert, table.imerge local next = next local trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end) local report_devanagari = logs.reporter("otf","devanagari") fonts = fonts or { } fonts.analyzers = fonts.analyzers or { } fonts.analyzers.methods = fonts.analyzers.methods or { node = { otf = { } } } local otf = fonts.handlers.otf local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local handlers = otf.handlers local methods = fonts.analyzers.methods local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local processcharacters = nodes.handlers.characters local insert_node_after = node.insert_after local copy_node = node.copy local free_node = node.free local remove_node = node.remove local flush_list = node.flush_list local unsetvalue = attributes.unsetvalue local fontdata = fonts.hashes.identifiers local a_state = attributes.private('state') local a_syllabe = attributes.private('syllabe') local dotted_circle = 0x25CC local states = fonts.analyzers.states -- not features local s_rphf = states.rphf local s_half = states.half local s_pref = states.pref local s_blwf = states.blwf local s_pstf = states.pstf -- In due time there will be entries here for scripts like Bengali, Gujarati, -- Gurmukhi, Kannada, Malayalam, Oriya, Tamil, Telugu. Feel free to provide the -- code points. local consonant = { [0x0915] = true, [0x0916] = true, [0x0917] = true, [0x0918] = true, [0x0919] = true, [0x091A] = true, [0x091B] = true, [0x091C] = true, [0x091D] = true, [0x091E] = true, [0x091F] = true, [0x0920] = true, [0x0921] = true, [0x0922] = true, [0x0923] = true, [0x0924] = true, [0x0925] = true, [0x0926] = true, [0x0927] = true, [0x0928] = true, [0x0929] = true, [0x092A] = true, [0x092B] = true, [0x092C] = true, [0x092D] = true, [0x092E] = true, [0x092F] = true, [0x0930] = true, [0x0931] = true, [0x0932] = true, [0x0933] = true, [0x0934] = true, [0x0935] = true, [0x0936] = true, [0x0937] = true, [0x0938] = true, [0x0939] = true, [0x0958] = true, [0x0959] = true, [0x095A] = true, [0x095B] = true, [0x095C] = true, [0x095D] = true, [0x095E] = true, [0x095F] = true, [0x0979] = true, [0x097A] = true, } local independent_vowel = { [0x0904] = true, [0x0905] = true, [0x0906] = true, [0x0907] = true, [0x0908] = true, [0x0909] = true, [0x090A] = true, [0x090B] = true, [0x090C] = true, [0x090D] = true, [0x090E] = true, [0x090F] = true, [0x0910] = true, [0x0911] = true, [0x0912] = true, [0x0913] = true, [0x0914] = true, [0x0960] = true, [0x0961] = true, [0x0972] = true, [0x0973] = true, [0x0974] = true, [0x0975] = true, [0x0976] = true, [0x0977] = true, } local dependent_vowel = { -- matra [0x093A] = true, [0x093B] = true, [0x093E] = true, [0x093F] = true, [0x0940] = true, [0x0941] = true, [0x0942] = true, [0x0943] = true, [0x0944] = true, [0x0945] = true, [0x0946] = true, [0x0947] = true, [0x0948] = true, [0x0949] = true, [0x094A] = true, [0x094B] = true, [0x094C] = true, [0x094E] = true, [0x094F] = true, [0x0955] = true, [0x0956] = true, [0x0957] = true, [0x0962] = true, [0x0963] = true, } local vowel_modifier = { [0x0900] = true, [0x0901] = true, [0x0902] = true, [0x0903] = true, -- A8E0 - A8F1 are cantillation marks for the Samaveda and may not belong here. [0xA8E0] = true, [0xA8E1] = true, [0xA8E2] = true, [0xA8E3] = true, [0xA8E4] = true, [0xA8E5] = true, [0xA8E6] = true, [0xA8E7] = true, [0xA8E8] = true, [0xA8E9] = true, [0xA8EA] = true, [0xA8EB] = true, [0xA8EC] = true, [0xA8ED] = true, [0xA8EE] = true, [0xA8EF] = true, [0xA8F0] = true, [0xA8F1] = true, } local stress_tone_mark = { [0x0951] = true, [0x0952] = true, [0x0953] = true, [0x0954] = true, } local c_nukta = 0x093C -- used to be tables local c_halant = 0x094D -- used to be tables local c_ra = 0x0930 -- used to be tables local c_anudatta = 0x0952 -- used to be tables local c_nbsp = 0x00A0 -- used to be tables local c_zwnj = 0x200C -- used to be tables local c_zwj = 0x200D -- used to be tables local zw_char = { -- could also be inlined [0x200C] = true, [0x200D] = true, } local pre_mark = { [0x093F] = true, [0x094E] = true, } local above_mark = { [0x0900] = true, [0x0901] = true, [0x0902] = true, [0x093A] = true, [0x0945] = true, [0x0946] = true, [0x0947] = true, [0x0948] = true, [0x0951] = true, [0x0953] = true, [0x0954] = true, [0x0955] = true, [0xA8E0] = true, [0xA8E1] = true, [0xA8E2] = true, [0xA8E3] = true, [0xA8E4] = true, [0xA8E5] = true, [0xA8E6] = true, [0xA8E7] = true, [0xA8E8] = true, [0xA8E9] = true, [0xA8EA] = true, [0xA8EB] = true, [0xA8EC] = true, [0xA8ED] = true, [0xA8EE] = true, [0xA8EF] = true, [0xA8F0] = true, [0xA8F1] = true, } local below_mark = { [0x093C] = true, [0x0941] = true, [0x0942] = true, [0x0943] = true, [0x0944] = true, [0x094D] = true, [0x0952] = true, [0x0956] = true, [0x0957] = true, [0x0962] = true, [0x0963] = true, } local post_mark = { [0x0903] = true, [0x093B] = true, [0x093E] = true, [0x0940] = true, [0x0949] = true, [0x094A] = true, [0x094B] = true, [0x094C] = true, [0x094F] = true, } local mark_four = { } -- As we access these frequently an extra hash is used. for k, v in next, pre_mark do mark_four[k] = pre_mark end for k, v in next, above_mark do mark_four[k] = above_mark end for k, v in next, below_mark do mark_four[k] = below_mark end for k, v in next, post_mark do mark_four[k] = post_mark end local mark_above_below_post = { } for k, v in next, above_mark do mark_above_below_post[k] = above_mark end for k, v in next, below_mark do mark_above_below_post[k] = below_mark end for k, v in next, post_mark do mark_above_below_post[k] = post_mark end -- Again, this table can be extended for other scripts than devanagari. Actually, -- for ConTeXt this kind of dat is kept elsewhere so eventually we might move -- tables to someplace else. local reorder_class = { [0x0930] = "before postscript", [0x093F] = "before half", [0x0940] = "after subscript", [0x0941] = "after subscript", [0x0942] = "after subscript", [0x0943] = "after subscript", [0x0944] = "after subscript", [0x0945] = "after subscript", [0x0946] = "after subscript", [0x0947] = "after subscript", [0x0948] = "after subscript", [0x0949] = "after subscript", [0x094A] = "after subscript", [0x094B] = "after subscript", [0x094C] = "after subscript", [0x0962] = "after subscript", [0x0963] = "after subscript", [0x093E] = "after subscript", } -- We use some pseudo features as we need to manipulate the nodelist based -- on information in the font as well as already applied features. local dflt_true = { dflt = true } local dev2_defaults = { dev2 = dflt_true, } local deva_defaults = { dev2 = dflt_true, deva = dflt_true, } local false_flags = { false, false, false, false } local both_joiners_true = { [0x200C] = true, [0x200D] = true, } local sequence_reorder_matras = { chain = 0, features = { dv01 = dev2_defaults }, flags = false_flags, name = "dv01_reorder_matras", subtables = { "dv01_reorder_matras" }, type = "devanagari_reorder_matras", } local sequence_reorder_reph = { chain = 0, features = { dv02 = dev2_defaults }, flags = false_flags, name = "dv02_reorder_reph", subtables = { "dv02_reorder_reph" }, type = "devanagari_reorder_reph", } local sequence_reorder_pre_base_reordering_consonants = { chain = 0, features = { dv03 = dev2_defaults }, flags = false_flags, name = "dv03_reorder_pre_base_reordering_consonants", subtables = { "dv03_reorder_pre_base_reordering_consonants" }, type = "devanagari_reorder_pre_base_reordering_consonants", } local sequence_remove_joiners = { chain = 0, features = { dv04 = deva_defaults }, flags = false_flags, name = "dv04_remove_joiners", subtables = { "dv04_remove_joiners" }, type = "devanagari_remove_joiners", } -- Looping over feature twice as efficient as looping over basic forms (some -- 350 checks instead of 750 for one font). This is something to keep an eye on -- as it might depends on the font. Not that it's a bottleneck. local basic_shaping_forms = { nukt = true, akhn = true, rphf = true, pref = true, rkrf = true, blwf = true, half = true, pstf = true, vatu = true, cjct = true, } local function initializedevanagi(tfmdata) local script, language = otf.scriptandlanguage(tfmdata,attr) -- todo: take fast variant if script == "deva" or script == "dev2" then local resources = tfmdata.resources local lookuphash = resources.lookuphash if not lookuphash["dv01"] then report_devanagari("adding devanagari features to font") -- local features = resources.features local gsubfeatures = features.gsub local sequences = resources.sequences local sharedfeatures = tfmdata.shared.features -- local lastmatch = 0 for s=1,#sequences do -- classify chars local features = sequences[s].features if features then for k, v in next, features do if basic_shaping_forms[k] then lastmatch = s end end end end local insertindex = lastmatch + 1 -- lookuphash["dv04_remove_joiners"] = both_joiners_true -- gsubfeatures["dv01"] = dev2_defaults -- reorder matras gsubfeatures["dv02"] = dev2_defaults -- reorder reph gsubfeatures["dv03"] = dev2_defaults -- reorder pre base reordering consonants gsubfeatures["dv04"] = deva_defaults -- remove joiners -- insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants) insert(sequences,insertindex,sequence_reorder_reph) insert(sequences,insertindex,sequence_reorder_matras) insert(sequences,insertindex,sequence_remove_joiners) -- if script == "deva" then sharedfeatures["dv04"] = true -- dv04_remove_joiners end -- if script == "dev2" then sharedfeatures["dv01"] = true -- dv01_reorder_matras sharedfeatures["dv02"] = true -- dv02_reorder_reph sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants sharedfeatures["dv04"] = true -- dv04_remove_joiners end -- end end end registerotffeature { name = "devanagari", description = "inject additional features", default = true, initializers = { node = initializedevanagi, }, } -- hm, this is applied to one character: local function deva_initialize(font,attr) local tfmdata = fontdata[font] local resources = tfmdata.resources local lookuphash = resources.lookuphash local datasets = otf.dataset(tfmdata,font,attr) local devanagaridata = datasets.devanagari if devanagaridata then -- maybe also check for e.g. reph return lookuphash, devanagaridata.reph, devanagaridata.vattu, devanagaridata.blwfcache else devanagaridata = { } datasets.devanagari = devanagaridata local reph = false local vattu = false local blwfcache = { } local sequences = resources.sequences for s=1,#sequences do -- triggers creation of dataset -- local sequence = sequences[s] local dataset = datasets[s] if dataset and dataset[1] then -- value local kind = dataset[4] if kind == "rphf" then -- deva reph = true elseif kind == "blwf" then -- deva vattu = true -- dev2 -- local subtables = sequence.subtables -- dataset[5].subtables local subtables = dataset[5].subtables for i=1,#subtables do local lookupname = subtables[i] local lookupcache = lookuphash[lookupname] if lookupcache then for k, v in next, lookupcache do blwfcache[k] = blwfcache[k] or v end end end end end end devanagaridata.reph = reph devanagaridata.vattu = vattu devanagaridata.blwfcache = blwfcache return lookuphash, reph, vattu, blwfcache end end local function deva_reorder(head,start,stop,font,attr) local lookuphash, reph, vattu, blwfcache = deva_initialize(font,attr) -- could be inlines but ugly local current = start local n = start.next local base = nil local firstcons = nil local lastcons = nil local basefound = false if start.char == c_ra and n.char == c_halant and reph then -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph -- from candidates for base consonants if n == stop then return head, stop end if n.next.char == c_zwj then current = start else current = n.next start[a_state] = s_rphf end end if current.char == c_nbsp then -- Stand Alone cluster if current == stop then stop = stop.prev head = remove_node(head,current) free_node(current) return head, stop else base, firstcons, lastcons = current, current, current current = current.next if current ~= stop then if current.char == c_nukta then current = current.next end if current.char == c_zwj then if current ~= stop then local next = current.next if next ~= stop and next.char == c_halant then current = next next = current.next local tmp = next.next local changestop = next == stop local tempcurrent = copy_node(next) local nextcurrent = copy_node(current) tempcurrent.next = nextcurrent nextcurrent.prev = tempcurrent tempcurrent[a_state] = s_blwf tempcurrent = processcharacters(tempcurrent) tempcurrent[a_state] = unsetvalue if next.char == tempcurrent.char then flush_list(tempcurrent) local n = copy_node(current) current.char = dotted_circle head = insert_node_after(head, current, n) else current.char = tempcurrent.char -- (assumes that result of blwf consists of one node) local freenode = current.next current.next = tmp tmp.prev = current free_node(freenode) flush_list(tempcurrent) if changestop then stop = current end end end end end end end end while not basefound do -- find base consonant if consonant[current.char] then current[a_state] = s_half if not firstcons then firstcons = current end lastcons = current if not base then base = current elseif blwfcache[current.char] then -- consonant has below-base (or post-base) form current[a_state] = s_blwf else base = current end end basefound = current == stop current = current.next end if base ~= lastcons then -- if base consonant is not last one then move halant from base consonant to last one local np = base local n = base.next if n.char == c_nukta then np = n n = n.next end if n.char == c_halant then if lastcons ~= stop then local ln = lastcons.next if ln.char == c_nukta then lastcons = ln end end -- local np = n.prev local nn = n.next local ln = lastcons.next -- what if lastcons is nn ? np.next = nn nn.prev = np lastcons.next = n if ln then ln.prev = n end n.next = ln n.prev = lastcons if lastcons == stop then stop = n end end end n = start.next if start.char == c_ra and n.char == c_halant and not (n ~= stop and zw_char[n.next.char]) then -- if syllable starts with Ra + H then move this combination so that it follows either: -- the post-base 'matra' (if any) or the base consonant local matra = base if base ~= stop then local next = base.next if dependent_vowel[next.char] then matra = next end end -- [sp][start][n][nn] [matra|base][?] -- [matra|base][start] [n][?] [sp][nn] local sp = start.prev local nn = n.next local mn = matra.next if sp then sp.next = nn end nn.prev = sp matra.next = start start.prev = matra n.next = mn if mn then mn.prev = n end if head == start then head = nn end start = nn if matra == stop then stop = n end end local current = start while current ~= stop do local next = current.next if next ~= stop and next.char == c_halant and next.next.char == c_zwnj then current[a_state] = unsetvalue end current = next end if base ~= stop and base[a_state] then local next = base.next if next.char == c_halant and not (next ~= stop and next.next.char == c_zwj) then base[a_state] = unsetvalue end end -- ToDo: split two- or three-part matras into their parts. Then, move the left 'matra' part to the beginning of the syllable. -- Not necessary for Devanagari. However it is necessay for other scripts, such as Tamil (e.g. TAMIL VOWEL SIGN O - 0BCA) -- classify consonants and 'matra' parts as pre-base, above-base (Reph), below-base or post-base, and group elements of the syllable (consonants and 'matras') according to this classification local current, allreordered, moved = start, false, { [base] = true } local a, b, p, bn = base, base, base, base.next if base ~= stop and bn.char == c_nukta then a, b, p = bn, bn, bn end while not allreordered do -- current is always consonant local c = current local n = current.next local l = nil -- used ? if c ~= stop then if n.char == c_nukta then c = n n = n.next end if c ~= stop then if n.char == c_halant then c = n n = n.next end while c ~= stop and dependent_vowel[n.char] do c = n n = n.next end if c ~= stop then if vowel_modifier[n.char] then c = n n = n.next end if c ~= stop and stress_tone_mark[n.char] then c = n n = n.next end end end end local bp = firstcons.prev local cn = current.next local last = c.next while cn ~= last do -- move pre-base matras... if pre_mark[cn.char] then if bp then bp.next = cn end local next = cn.next local prev = cn.prev if next then next.prev = prev end prev.next = next if cn == stop then stop = prev end cn.prev = bp cn.next = firstcons firstcons.prev = cn if firstcons == start then if head == start then head = cn end start = cn end break end cn = cn.next end allreordered = c == stop current = c.next end if reph or vattu then local current, cns = start, nil while current ~= stop do local c = current local n = current.next if current.char == c_ra and n.char == c_halant then c = n n = n.next local b, bn = base, base while bn ~= stop do local next = bn.next if dependent_vowel[next.char] then b = next end bn = next end if current[a_state] == s_rphf then -- position Reph (Ra + H) after post-base 'matra' (if any) since these -- become marks on the 'matra', not on the base glyph if b ~= current then if current == start then if head == start then head = n end start = n end if b == stop then stop = c end local prev = current.prev if prev then prev.next = n end if n then n.prev = prev end local next = b.next c.next = next if next then next.prev = c end c.next = next b.next = current current.prev = b end elseif cns and cns.next ~= current then -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants) local cp, cnsn = current.prev, cns.next if cp then cp.next = n end if n then n.prev = cp end cns.next = current current.prev = cns c.next = cnsn if cnsn then cnsn.prev = c end if c == stop then stop = cp break end current = n.prev end else local char = current.char if consonant[char] or char == c_nbsp then -- maybe combined hash cns = current local next = cns.next if next.char == c_halant then cns = next end end end current = current.next end end if base.char == c_nbsp then head = remove_node(head,base) free_node(base) end return head, stop end -- If a pre-base matra character had been reordered before applying basic features, -- the glyph can be moved closer to the main consonant based on whether half-forms had been formed. -- Actual position for the matra is defined as “after last standalone halant glyph, -- after initial matra position and before the main consonant”. -- If ZWJ or ZWNJ follow this halant, position is moved after it. -- so we break out ... this is only done for the first 'word' (if we feed words we can as -- well test for non glyph. function handlers.devanagari_reorder_matras(head,start,kind,lookupname,replacement) -- no leak local current = start -- we could cache attributes here local startfont = start.font local startattr = start[a_syllabe] -- can be fast loop while current and current.id == glyph_code and current.subtype<256 and current.font == font and current[a_syllabe] == startattr do local next = current.next if current.char == c_halant and not current[a_state] then if next and next.id == glyph_code and next.subtype<256 and next.font == font and next[a_syllabe] == startattr and zw_char[next.char] then current = next end local startnext = start.next head = remove_node(head,start) local next = current.next if next then next.prev = start end start.next = next current.next = start start.prev = current start = startnext break end current = next end return head, start, true end -- todo: way more caching of attributes and font -- Reph’s original position is always at the beginning of the syllable, (i.e. it is not reordered at the character reordering stage). -- However, it will be reordered according to the basic-forms shaping results. -- Possible positions for reph, depending on the script, are; after main, before post-base consonant forms, -- and after post-base consonant forms. -- 1 If reph should be positioned after post-base consonant forms, proceed to step 5. -- 2 If the reph repositioning class is not after post-base: target position is after the first explicit halant glyph between -- the first post-reph consonant and last main consonant. If ZWJ or ZWNJ are following this halant, position is moved after it. -- If such position is found, this is the target position. Otherwise, proceed to the next step. -- Note: in old-implementation fonts, where classifications were fixed in shaping engine, -- there was no case where reph position will be found on this step. -- 3 If reph should be repositioned after the main consonant: from the first consonant not ligated with main, -- or find the first consonant that is not a potential pre-base reordering Ra. -- 4 If reph should be positioned before post-base consonant, find first post-base classified consonant not ligated with main. -- If no consonant is found, the target position should be before the first matra, syllable modifier sign or vedic sign. -- 5 If no consonant is found in steps 3 or 4, move reph to a position immediately before the first post-base matra, -- syllable modifier sign or vedic sign that has a reordering class after the intended reph position. -- For example, if the reordering position for reph is post-main, it will skip above-base matras that also have a post-main position. -- 6 Otherwise, reorder reph to the end of the syllable. -- hm, this only looks at the start of a nodelist ... is this supposed to be line based? function handlers.devanagari_reorder_reph(head,start,kind,lookupname,replacement) -- since in Devanagari reph has reordering position 'before postscript' dev2 only follows step 2, 4, and 6, -- the other steps are still ToDo (required for scripts other than dev2) local current = start.next local startnext = nil local startprev = nil local startfont = start.font local startattr = start[a_syllabe] while current and current.id == glyph_code and current.subtype<256 and current.font == startfont and current[a_syllabe] == startattr do --step 2 if current.char == c_halant and not current[a_state] then local next = current.next if next and next.id == glyph_code and next.subtype<256 and next.font == startfont and next[a_syllabe] == startattr and zw_char[next.char] then current = next end startnext = start.next head = remove_node(head,start) local next = current.next if next then next.prev = start end start.next = next current.next = start start.prev = current start = startnext startattr = start[a_syllabe] break end current = current.next end if not startnext then current = start.next while current and current.id == glyph_code and current.subtype<256 and current.font == startfont and current[a_syllabe] == startattr do --step 4 if current[a_state] == s_pstf then --post-base startnext = start.next head = remove_node(head,start) local prev = current.prev start.prev = prev prev.next = start start.next = current current.prev = start start = startnext startattr = start[a_syllabe] break end current = current.next end end -- ToDo: determine position for reph with reordering position other than 'before postscript' -- (required for scripts other than dev2) -- leaks if not startnext then current = start.next local c = nil while current and current.id == glyph_code and current.subtype<256 and current.font == startfont and current[a_syllabe] == startattr do --step 5 if not c then local char = current.char -- todo: combine in one if mark_above_below_post[char] and reorder_class[char] ~= "after subscript" then c = current end end current = current.next end -- here we can loose the old start node: maybe best split cases if c then startnext = start.next head = remove_node(head,start) local prev = c.prev start.prev = prev prev.next = start start.next = c c.prev = start -- end start = startnext startattr = start[a_syllabe] end end -- leaks if not startnext then current = start local next = current.next while next and next.id == glyph_code and next.subtype<256 and next.font == startfont and next[a_syllabe] == startattr do --step 6 current = next next = current.next end if start ~= current then startnext = start.next head = remove_node(head,start) local next = current.next if next then next.prev = start end start.next = next current.next = start start.prev = current start = startnext end end -- return head, start, true end -- we can cache some checking (v) -- If a pre-base reordering consonant is found, reorder it according to the following rules: -- -- 1 Only reorder a glyph produced by substitution during application of the feature. -- (Note that a font may shape a Ra consonant with the feature generally but block it in certain contexts.) -- 2 Try to find a target position the same way as for pre-base matra. If it is found, reorder pre-base consonant glyph. -- 3 If position is not found, reorder immediately before main consonant. -- UNTESTED: NOT CALLED IN EXAMPLE function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start,kind,lookupname,replacement) local current = start local startnext = nil local startprev = nil local startfont = start.font local startattr = start[a_syllabe] -- can be fast for loop + caching state while current and current.id == glyph_code and current.subtype<256 and current.font == startfont and current[a_syllabe] == startattr do local next = current.next if current.char == c_halant and not current[a_state] then if next and next.id == glyph_code and next.subtype<256 and next.font == font and next[a_syllabe] == startattr then local char = next.char if char == c_zwnj or char == c_zwj then current = next end end startnext = start.next removenode(start,start) local next = current.next if next then next.prev = start end start.next = next current.next = start start.prev = current start = startnext break end current = next end if not startnext then current = start.next startattr = start[a_syllabe] while current and current.id == glyph_code and current.subtype<256 and current.font == startfont and current[a_syllabe] == startattr do if not consonant[current.char] and current[a_state] then --main startnext = start.next removenode(start,start) local prev = current.prev start.prev = prev prev.next = start start.next = current current.prev = start start = startnext break end current = current.next end end return head, start, true end function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement) local stop = start.next local startfont = start.font while stop and stop.id == glyph_code and stop.subtype<256 and stop.font == startfont do local char = stop.char if char == c_zwnj or char == c_zwj then stop = stop.next else break end end if stop then stop.prev.next = nil stop.prev = start.prev end local prev = start.prev if prev then prev.next = stop end flush_list(start) return head, stop, true end local valid = { rphf = true, pref = true, half = true, blwf = true, pstf = true, } local function dev2_initialize(font,attr) local tfmdata = fontdata[font] local resources = tfmdata.resources local lookuphash = resources.lookuphash local datasets = otf.dataset(tfmdata,font,attr) local devanagaridata = datasets.devanagari if devanagaridata then -- maybe also check for e.g. seqsubset return lookuphash, devanagaridata.seqsubset else devanagaridata = { } datasets.devanagari = devanagaridata local seqsubset = { } devanagaridata.seqsubset = seqsubset local sequences = resources.sequences for s=1,#sequences do -- local sequence = sequences[s] local dataset = datasets[s] if dataset and dataset[1] then -- featurevalue local kind = dataset[4] if kind and valid[kind] then -- could become a function call -- local subtables = sequence.subtables local subtables = dataset[5].subtables for i=1,#subtables do local lookupname = subtables[i] local lookupcache = lookuphash[lookupname] if lookupcache then local reph = false local chain = dataset[3] if chain ~= 0 then --rphf is result of of chain --ToDo: rphf might be result of other handler/chainproc else reph = lookupcache[0x0930] if reph then reph = reph[0x094D] if reph then reph = reph["ligature"] end end --ToDo: rphf actualy acts on consonant + halant. This consonant might not necesseraly be 0x0930 ... (but fot dev2 it is) end seqsubset[#seqsubset+1] = { kind, lookupcache, reph } end end end end end lookuphash["dv01_reorder_matras"] = pre_mark -- move to initializer ? return lookuphash, seqsubset end end -- this one will be merged into the caller: it saves a call, but we will then make function -- of the actions local function dev2_reorder(head,start,stop,font,attr) -- maybe do a pass over (determine stop in sweep) local lookuphash, seqsubset = dev2_initialize(font,attr) local reph, pre_base_reordering_consonants = false, { } -- was nil ... probably went unnoticed because never assigned local halfpos, basepos, subpos, postpos = nil, nil, nil, nil local locl = { } for i=1,#seqsubset do -- maybe quit if start == stop local subset = seqsubset[i] local kind = subset[1] local lookupcache = subset[2] if kind == "rphf" then if subset[3] then reph = true end local current = start local last = stop.next while current ~= last do if current ~= stop then local c = locl[current] or current.char local found = lookupcache[c] if found then local next = current.next local n = locl[next] or next.char if found[n] then --above-base: rphf Consonant + Halant local afternext = next ~= stop and next.next if afternext and zw_char[afternext.char] then -- ZWJ and ZWNJ prevent creation of reph current = next current = current.next elseif current == start then current[a_state] = s_rphf current = next else current = next end end end end current = current.next end elseif kind == "pref" then -- why not global? pretty ineffient this way -- this will move to the initializer and we will store the hash in dataset for k, v in lookupcache[0x094D], next do pre_base_reordering_consonants[k] = v and v["ligature"] --ToDo: reph might also be result of chain end -- local current = start local last = stop.next while current ~= last do if current ~= stop then local c = locl[current] or current.char local found = lookupcache[c] if found then local next = current.next local n = locl[next] or next.char if found[n] then current[a_state] = s_pref next[a_state] = s_pref current = next end end end current = current.next end elseif kind == "half" then -- half forms: half / Consonant + Halant local current = start local last = stop.next while current ~= last do if current ~= stop then local c = locl[current] or current.char local found = lookupcache[c] if found then local next = current.next local n = locl[next] or next.char if found[n] then if next ~= stop and next.next.char == c_zwnj then --ZWNJ prevent creation of half current = current.next else current[a_state] = s_half if not halfpos then halfpos = current end end current = next end end end current = current.next end elseif kind == "blwf" then -- below-base: blwf / Halant + Consonant local current = start local last = stop.next while current ~= last do if current ~= stop then local c = locl[current] or current.char local found = lookupcache[c] if found then local next = current.next local n = locl[next] or next.char if found[n] then current[a_state] = s_blwf next[a_state] = s_blwf current = next subpos = current end end end current = current.next end elseif kind == "pstf" then -- post-base: pstf / Halant + Consonant local current = start local last = stop.next while current ~= last do if current ~= stop then local c = locl[current] or current.char local found = lookupcache[c] if found then local next = current.next local n = locl[next] or next.char if found[n] then current[a_state] = s_pstf next[a_state] = s_pstf current = next postpos = current end end end current = current.next end end end -- this one changes per word lookuphash["dv02_reorder_reph"] = { [reph] = true } lookuphash["dv03_reorder_pre_base_reordering_consonants"] = pre_base_reordering_consonants local current, base, firstcons = start, nil, nil if start[a_state] == s_rphf then -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants current = start.next.next end if current ~= stop.next and current.char == c_nbsp then -- Stand Alone cluster if current == stop then stop = stop.prev head = remove_node(head,current) free_node(current) return head, stop else base = current current = current.next if current ~= stop then local char = current.char if char == c_nukta then current = current.next char = current.char end if char == c_zwj then local next = current.next if current ~= stop and next ~= stop and next.char == c_halant then current = next next = current.next local tmp = next.next local changestop = next == stop next.next = nil current[a_state] = s_pref current = processcharacters(current) current[a_state] = s_blwf current = processcharacters(current) current[a_state] = s_pstf current = processcharacters(current) current[a_state] = unsetvalue if current.char == c_halant then current.next.next = tmp local nc = copy_node(current) current.char = dotted_circle head = insert_node_after(head,current,nc) else current.next = tmp -- assumes that result of pref, blwf, or pstf consists of one node if changestop then stop = current end end end end end end else -- not Stand Alone cluster local last = stop.next while current ~= last do -- find base consonant local next = current.next if consonant[current.char] then if not (current ~= stop and next ~= stop and next.char == c_halant and next.next.char == c_zwj) then if not firstcons then firstcons = current end -- check whether consonant has below-base or post-base form or is pre-base reordering Ra local a = current[a_state] if not (a == s_pref or a == s_blwf or a == pstf) then base = current end end end current = next end if not base then base = firstcons end end if not base then if start[a_state] == s_rphf then start[a_state] = unsetvalue end return head, stop else if base[a_state] then base[a_state] = unsetvalue end basepos = base end if not halfpos then halfpos = base end if not subpos then subpos = base end if not postpos then postpos = subpos or base end -- Matra characters are classified and reordered by which consonant in a conjunct they have affinity for local moved = { } local current = start local last = stop.next while current ~= last do local char, target, cn = locl[current] or current.char, nil, current.next if not moved[current] and dependent_vowel[char] then if pre_mark[char] then -- Before first half form in the syllable moved[current] = true local prev = current.prev local next = current.next if prev then prev.next = next end if next then next.prev = prev end if current == stop then stop = current.prev end if halfpos == start then if head == start then head = current end start = current end local prev = halfpos.prev if prev then prev.next = current end current.prev = prev halfpos.prev = current current.next = halfpos halfpos = current elseif above_mark[char] then -- After main consonant target = basepos if subpos == basepos then subpos = current end if postpos == basepos then postpos = current end basepos = current elseif below_mark[char] then -- After subjoined consonants target = subpos if postpos == subpos then postpos = current end subpos = current elseif post_mark[char] then -- After post-form consonant target = postpos postpos = current end if mark_above_below_post[char] then local prev = current.prev if prev ~= target then local next = current.next if prev then -- not needed, already tested with target prev.next = next end if next then next.prev = prev end if current == stop then stop = prev end local next = target.next if next then next.prev = current end current.next = next target.next = current current.prev = target end end end current = cn end -- Reorder marks to canonical order: Adjacent nukta and halant or nukta and vedic sign are always repositioned if necessary, so that the nukta is first. local current, c = start, nil while current ~= stop do local char = current.char if char == c_halant or stress_tone_mark[char] then if not c then c = current end else c = nil end local next = current.next if c and next.char == c_nukta then if head == c then head = next end if stop == next then stop = current end local prev = c.prev if prev then prev.next = next end next.prev = prev local nextnext = next.next current.next = nextnext local nextnextnext = nextnext.next if nextnextnext then nextnextnext.prev = current end c.prev = nextnext nextnext.next = c end if stop == current then break end current = current.next end if base.char == c_nbsp then head = remove_node(head, base) free_node(base) end return head, stop end -- cleaned up and optimized ... needs checking (local, check order, fixes, extra hash, etc) local separator = { } imerge(separator,consonant) imerge(separator,independent_vowel) imerge(separator,dependent_vowel) imerge(separator,vowel_modifier) imerge(separator,stress_tone_mark) separator[0x093C] = true -- nukta separator[0x094D] = true -- halant local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowel -- why two variants ... the comment suggests that it's the same ruleset local n = c.next if not n then return c end if variant == 1 then local v = n.id == glyph_code and n.subtype<256 and n.font == font if v and n.char == c_nukta then n = n.next if n then v = n.id == glyph_code and n.subtype<256 and n.font == font end end if n and v then local nn = n.next if nn and nn.id == glyph_code and nn.subtype<256 and nn.font == font then local nnn = nn.next if nnn and nnn.id == glyph_code and nnn.subtype<256 and nnn.font == font then local nnc = nn.char local nnnc = nnn.char if nnc == c_zwj and consonant[nnnc] then c = nnn elseif (nnc == c_zwnj or nnc == c_zwj) and nnnc == c_halant then local nnnn = nnn.next if nnnn and nnnn.id == glyph_code and consonant[nnnn.char] and nnnn.subtype<256 and nnnn.font == font then c = nnnn end end end end end elseif variant == 2 then if n.id == glyph_code and n.char == c_nukta and n.subtype<256 and n.font == font then c = n end n = c.next if n and n.id == glyph_code and n.subtype<256 and n.font == font then local nn = n.next if nn then local nv = nn.id == glyph_code and nn.subtype<256 and nn.font == font if nv and zw_char[n.char] then n = nn nn = nn.next nv = nn.id == glyph_code and nn.subtype<256 and nn.font == font end if nn and nv and n.char == c_halant and consonant[nn.char] then c = nn end end end end -- c = ms_matra(c) local n = c.next if not n then return c end local v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end local char = n.char if dependent_vowel[char] then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if char == c_nukta then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if char == c_halant then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if vowel_modifier[char] then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if stress_tone_mark[char] then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if stress_tone_mark[char] then return n else return c end end local function analyze_next_chars_two(c,font) local n = c.next if not n then return c end if n.id == glyph_code and n.char == c_nukta and n.subtype<256 and n.font == font then c = n end n = c while true do local nn = n.next if nn and nn.id == glyph_code and nn.subtype<256 and nn.font == font then local char = nn.char if char == c_halant then n = nn local nnn = nn.next if nnn and nnn.id == glyph_code and zw_char[nnn.char] and nnn.subtype<256 and nnn.font == font then n = nnn end elseif char == c_zwnj or char == c_zwj then -- n = nn -- not here (?) local nnn = nn.next if nnn and nnn.id == glyph_code and nnn.char == c_halant and nnn.subtype<256 and nnn.font == font then n = nnn end else break end local nn = n.next if nn and nn.id == glyph_code and consonant[nn.char] and nn.subtype<256 and nn.font == font then n = nn local nnn = nn.next if nnn and nnn.id == glyph_code and nnn.char == c_nukta and nnn.subtype<256 and nnn.font == font then n = nnn end c = n else break end else break end end -- if not c then -- This shouldn't happen I guess. return end local n = c.next if not n then return c end local v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end local char = n.char if char == c_anudatta then c = n n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if char == c_halant then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char if char == c_zwnj or char == c_zwj then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end else -- c = ms_matra(c) -- same as one if dependent_vowel[char] then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if char == c_nukta then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if char == c_halant then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end end -- same as one if vowel_modifier[char] then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if stress_tone_mark[char] then c = c.next n = c.next if not n then return c end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then return c end char = n.char end if stress_tone_mark[char] then return n else return c end end local function inject_syntax_error(head,current,mark) local signal = copy_node(current) if mark == pre_mark then signal.char = dotted_circle else current.char = dotted_circle end return insert_node_after(head,current,signal) end -- It looks like these two analyzers were written independently but they share -- a lot. Common code has been synced. function methods.deva(head,font,attr) local current, start, done = head, true, false while current do if current.id == glyph_code and current.subtype<256 and current.font == font then done = true local syllablestart = current local syllableend = nil local c = current local n = c.next if n and c.char == c_ra and n.id == glyph_code and n.char == c_halant and n.subtype<256 and n.font == font then local n = n.next if n and n.id == glyph_code and n.subtype<256 and n.font == font then c = n end end local standalone = c.char == c_nbsp if standalone then local prev = current.prev if not prev then -- begin of paragraph or box elseif prev.id ~= glyph_code or prev.subtype>=256 or prev.font ~= font then -- different font or language so quite certainly a different word elseif not separator[prev.char] then -- something that separates words else standalone = false end end if standalone then -- stand alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] local syllabeend, current = analyze_next_chars_one(c,font,2) -- watch out, here we set current to next if syllablestart ~= syllableend then head, current = deva_reorder(head,syllablestart,syllableend,font,attr) current = current.next end else -- we can delay the n.subtype and n.font and test for say halant first -- as an table access is faster than two function calls (subtype and font are -- pseudo fields) but the code becomes messy (unless we make it a function) local char = current.char if consonant[char] then -- syllable containing consonant local prevc = true while prevc do prevc = false local n = current.next if not n then break end local v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then break end local c = n.char if c == c_nukta then n = n.next if not n then break end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then break end c = n.char end if c == c_halant then n = n.next if not n then break end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then break end c = n.char if c == c_zwnj or c == c_zwj then n = n.next if not n then break end v = n.id == glyph_code and n.subtype<256 and n.font == font if not v then break end c = n.char end if consonant[c] then prevc = true current = n end end end local n = current.next if n and n.id == glyph_code and n.char == c_nukta and n.subtype<256 and n.font == font then -- nukta (not specified in Microsft Devanagari OpenType specification) current = n n = current.next end syllableend = current current = n if current then local v = current.id == glyph_code and current.subtype<256 and current.font == font if v then if current.char == c_halant then -- syllable containing consonant without vowels: {C + [Nukta] + H} + C + H local n = current.next if n and n.id == glyph_code and zw_char[n.char] and n.subtype<256 and n.font == font then -- code collapsed, probably needs checking with intention syllableend = n current = n.next else syllableend = current current = n end else -- syllable containing consonant with vowels: {C + [Nukta] + H} + C + [M] + [VM] + [SM] local c = current.char if dependent_vowel[c] then syllableend = current current = current.next v = current and current.id == glyph_code and current.subtype<256 and current.font == font if v then c = current.char end end if v and vowel_modifier[c] then syllableend = current current = current.next v = current and current.id == glyph_code and current.subtype<256 and current.font == font if v then c = current.char end end if v and stress_tone_mark[c] then syllableend = current current = current.next end end end end if syllablestart ~= syllableend then head, current = deva_reorder(head,syllablestart,syllableend,font,attr) current = current.next end elseif independent_vowel[char] then -- syllable without consonants: VO + [VM] + [SM] syllableend = current current = current.next if current then local v = current.id == glyph_code and current.subtype<256 and current.font == font if v then local c = current.char if vowel_modifier[c] then syllableend = current current = current.next v = current and current.id == glyph_code and current.subtype<256 and current.font == font if v then c = current.char end end if v and stress_tone_mark[c] then syllableend = current current = current.next end end end else local mark = mark_four[char] if mark then head, current = inject_syntax_error(head,current,mark) end current = current.next end end else current = current.next end start = false end return head, done end -- there is a good change that when we run into one with subtype < 256 that the rest is also done -- so maybe we can omit this check (it's pretty hard to get glyphs in the stream out of the blue) -- handler(head,start,kind,lookupname,lookupmatch,sequence,lookuphash,1) function methods.dev2(head,font,attr) local current = head local start = true local done = false local syllabe = 0 while current do local syllablestart, syllableend = nil, nil if current.id == glyph_code and current.subtype<256 and current.font == font then done = true syllablestart = current local c = current local n = current.next if n and c.char == c_ra and n.id == glyph_code and n.char == c_halant and n.subtype<256 and n.font == font then local n = n.next if n and n.id == glyph_code and n.subtype<256 and n.font == font then c = n end end local char = c.char if independent_vowel[char] then -- vowel-based syllable: [Ra+H]+V+[N]+[<[]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] current = analyze_next_chars_one(c,font,1) syllableend = current else local standalone = char == c_nbsp if standalone then local p = current.prev if not p then -- begin of paragraph or box elseif p.id ~= glyph_code or p.subtype>=256 or p.font ~= font then -- different font or language so quite certainly a different word elseif not separator[p.char] then -- something that separates words else standalone = false end end if standalone then -- Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] current = analyze_next_chars_one(c,font,2) syllableend = current elseif consonant[current.char] then -- WHY current INSTEAD OF c ? -- Consonant syllable: {C+[N]+]|+H>} + C+[N]+[A] + [< H+[] | {M}+[N]+[H]>]+[SM]+[(VD)] current = analyze_next_chars_two(current,font) -- not c ! syllableend = current end end end if syllableend then syllabe = syllabe + 1 local c = syllablestart local n = syllableend.next while c ~= n do c[a_syllabe] = syllabe c = c.next end end if syllableend and syllablestart ~= syllableend then head, current = dev2_reorder(head,syllablestart,syllableend,font,attr) end if not syllableend and current.id == glyph_code and current.subtype<256 and current.font == font and not current[a_state] then local mark = mark_four[current.char] if mark then head, current = inject_syntax_error(head,current,mark) end end start = false current = current.next end return head, done end context-2013.05.28.20130704/texmf-dist/tex/context/base/data-lst.lua0000644000175000017500000000513612130411274024105 0ustar norbertnorbertif not modules then modules = { } end modules ['data-lst'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- used in mtxrun, can be loaded later .. todo local find, concat, upper, format = string.find, table.concat, string.upper, string.format local fastcopy, sortedpairs = table.fastcopy, table.sortedpairs resolvers.listers = resolvers.listers or { } local resolvers = resolvers local report_lists = logs.reporter("resolvers","lists") local function tabstr(str) if type(str) == 'table' then return concat(str," | ") else return str end end function resolvers.listers.variables(pattern) local instance = resolvers.instance local environment = instance.environment local variables = instance.variables local expansions = instance.expansions local pattern = upper(pattern or "") local configured = { } local order = instance.order for i=1,#order do for k, v in next, order[i] do if v ~= nil and configured[k] == nil then configured[k] = v end end end local env = fastcopy(environment) local var = fastcopy(variables) local exp = fastcopy(expansions) for key, value in sortedpairs(configured) do if key ~= "" and (pattern == "" or find(upper(key),pattern)) then report_lists(key) report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") report_lists(" var: %s",tabstr(configured[key]) or "unset") report_lists(" exp: %s",tabstr(expansions[key]) or "unset") report_lists(" res: %s",tabstr(resolvers.resolve(expansions[key])) or "unset") end end instance.environment = fastcopy(env) instance.variables = fastcopy(var) instance.expansions = fastcopy(exp) end local report_resolved = logs.reporter("system","resolved") function resolvers.listers.configurations() local configurations = resolvers.instance.specification for i=1,#configurations do report_resolved("file : %s",resolvers.resolve(configurations[i])) end report_resolved("") local list = resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.luacnfspec)) for i=1,#list do local li = resolvers.resolve(list[i]) if lfs.isdir(li) then report_resolved("path - %s",li) else report_resolved("path + %s",li) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-it.mkii0000644000175000017500000024023412130411274024137 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language it % \setinterfacevariable{Addition}{Aggiunta} \setinterfacevariable{Balloon}{Pallone} \setinterfacevariable{Cap}{Cap} \setinterfacevariable{Capital}{Maiuscolo} \setinterfacevariable{Character}{Lettera} \setinterfacevariable{Characters}{Lettere} \setinterfacevariable{CloseDocument}{ChiudiDocumento} \setinterfacevariable{ExitViewer}{EsciVisualizzatore} \setinterfacevariable{FirstPage}{PrimaPagina} \setinterfacevariable{FitHeight}{FitHeight} \setinterfacevariable{FitWidth}{FitWidth} \setinterfacevariable{GotoPage}{VaiAPagina} \setinterfacevariable{Greek}{Greco} \setinterfacevariable{Help}{Aiuto} \setinterfacevariable{HideField}{NascondiCampo} \setinterfacevariable{HideLayer}{HideLayer} \setinterfacevariable{Key}{Tasto} \setinterfacevariable{LastPage}{UltimaPagina} \setinterfacevariable{LoadForm}{CaricaForm} \setinterfacevariable{MONTH}{MESE} \setinterfacevariable{New}{Nuovo} \setinterfacevariable{NextJump}{SaltoSuccessivo} \setinterfacevariable{NextPage}{PaginaSuccessiva} \setinterfacevariable{Numbers}{Numeri} \setinterfacevariable{OpenNamedDocument}{OpenNamedDocument} \setinterfacevariable{Paragraph}{Capoverso} \setinterfacevariable{PauseMovie}{PausaFilm} \setinterfacevariable{PauseRendering}{PauseRendering} \setinterfacevariable{PauseSound}{PausaSuono} \setinterfacevariable{PreviousJump}{SaltoPrecedente} \setinterfacevariable{PreviousPage}{PaginaPrecedente} \setinterfacevariable{PrintDocument}{StampaDocumento} \setinterfacevariable{Query}{Richiesta} \setinterfacevariable{QueryAgain}{RinnovaRichiesta} \setinterfacevariable{ResetForm}{ReimpostaForm} \setinterfacevariable{ResumeMovie}{RiprendiFilm} \setinterfacevariable{ResumeRendering}{ResumeRendering} \setinterfacevariable{ResumeSound}{RiprendiSuono} \setinterfacevariable{Romannumerals}{Numeriromani} \setinterfacevariable{SaveDocument}{SalvaDocumento} \setinterfacevariable{SaveForm}{SalvaForm} \setinterfacevariable{SaveNamedDocument}{SaveNamedDocument} \setinterfacevariable{SearchAgain}{CercaAncora} \setinterfacevariable{SearchDocument}{CercaDocumento} \setinterfacevariable{ShowBookmarks}{MostraSegnalibro} \setinterfacevariable{ShowField}{MostraCampo} \setinterfacevariable{ShowThumbs}{MostraThumbs} \setinterfacevariable{StartMovie}{IniziaFilm} \setinterfacevariable{StartRendering}{StartRendering} \setinterfacevariable{StartSound}{IniziaSuono} \setinterfacevariable{StopMovie}{FermaFilm} \setinterfacevariable{StopRendering}{StopRendering} \setinterfacevariable{StopSound}{FermaSuono} \setinterfacevariable{SubmitForm}{MandaForm} \setinterfacevariable{ToggleLayer}{ToggleLayer} \setinterfacevariable{ToggleViewer}{ScambiaVisualizzatore} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{VideLayer} \setinterfacevariable{ViewerHelp}{AiutoVisualizzatore} \setinterfacevariable{WEEKDAY}{GIORNOSETTIMANA} \setinterfacevariable{WORD}{PAROLA} \setinterfacevariable{WORDS}{PAROLE} \setinterfacevariable{Word}{Parola} \setinterfacevariable{Words}{Parole} \setinterfacevariable{abbreviation}{abbreviazione} \setinterfacevariable{abbreviations}{abbreviazioni} \setinterfacevariable{absolute}{assoluto} \setinterfacevariable{action}{azione} \setinterfacevariable{after}{dopo} \setinterfacevariable{all}{tutti} \setinterfacevariable{always}{sempre} \setinterfacevariable{and}{and} \setinterfacevariable{answerarea}{answerarea} \setinterfacevariable{appendices}{appendici} \setinterfacevariable{appendix}{appendice} \setinterfacevariable{april}{aprile} \setinterfacevariable{atmargin}{almargine} \setinterfacevariable{atpage}{apagina} \setinterfacevariable{attachment}{attachment} \setinterfacevariable{august}{agosto} \setinterfacevariable{author}{autore} \setinterfacevariable{auto}{auto} \setinterfacevariable{autointro}{autointro} \setinterfacevariable{back}{dietro} \setinterfacevariable{background}{sfondo} \setinterfacevariable{backmatter}{postambolo} \setinterfacevariable{backpart}{postfazione} \setinterfacevariable{backspace}{backspace} \setinterfacevariable{backward}{indietro} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{prima} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{grande} \setinterfacevariable{bigbodyfont}{grossofontdeltesto} \setinterfacevariable{bigger}{bigger} \setinterfacevariable{bigpreference}{grandepreferenza} \setinterfacevariable{blank}{rigovuoto} \setinterfacevariable{blockquote}{blockquote} \setinterfacevariable{bodymatter}{testiprincipali} \setinterfacevariable{bodypart}{testoprincipale} \setinterfacevariable{bold}{grassetto} \setinterfacevariable{bolditalic}{grassettocorsivo} \setinterfacevariable{boldslanted}{grassettoinclinato} \setinterfacevariable{bookmark}{segnalibro} \setinterfacevariable{both}{entrambi} \setinterfacevariable{bottom}{fondo} \setinterfacevariable{brief}{brief} \setinterfacevariable{broad}{ampio} \setinterfacevariable{buffer}{buffer} \setinterfacevariable{by}{da} \setinterfacevariable{calligraphic}{calligrafico} \setinterfacevariable{cap}{cap} \setinterfacevariable{capital}{maiuscolo} \setinterfacevariable{center}{center} \setinterfacevariable{chapter}{capitolo} \setinterfacevariable{character}{lettera} \setinterfacevariable{characters}{lettere} \setinterfacevariable{chemistry}{chemistry} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{colore} \setinterfacevariable{column}{colonna} \setinterfacevariable{columns}{colonne} \setinterfacevariable{command}{comando} \setinterfacevariable{commands}{comandi} \setinterfacevariable{comment}{commento} \setinterfacevariable{component}{componente} \setinterfacevariable{concept}{concetto} \setinterfacevariable{content}{indice} \setinterfacevariable{contents}{indici} \setinterfacevariable{continue}{continua} \setinterfacevariable{continued}{continued} \setinterfacevariable{controls}{controlli} \setinterfacevariable{conversion}{coversione} \setinterfacevariable{current}{corrente} \setinterfacevariable{cutspace}{cutspace} \setinterfacevariable{date}{data} \setinterfacevariable{day}{giorno} \setinterfacevariable{december}{dicembre} \setinterfacevariable{default}{implicito} \setinterfacevariable{depth}{profondita} \setinterfacevariable{description}{descrizione} \setinterfacevariable{disable}{disattiva} \setinterfacevariable{display}{schermo} \setinterfacevariable{dot}{punto} \setinterfacevariable{doublesided}{doppiafaccia} \setinterfacevariable{down}{down} \setinterfacevariable{each}{ogni} \setinterfacevariable{edge}{bordo} \setinterfacevariable{embed}{embed} \setinterfacevariable{empty}{vuoto} \setinterfacevariable{end}{end} \setinterfacevariable{endnote}{endnote} \setinterfacevariable{enumeration}{enumerazione} \setinterfacevariable{environment}{ambiente} \setinterfacevariable{even}{pari} \setinterfacevariable{export}{export} \setinterfacevariable{external}{esterno} \setinterfacevariable{fact}{fatto} \setinterfacevariable{february}{febbraio} \setinterfacevariable{figure}{figura} \setinterfacevariable{figures}{figure} \setinterfacevariable{file}{file} \setinterfacevariable{final}{finale} \setinterfacevariable{first}{primo} \setinterfacevariable{firstcolumn}{firstcolumn} \setinterfacevariable{firstpage}{primapagina} \setinterfacevariable{firstsubpage}{primasottopagina} \setinterfacevariable{fit}{adatta} \setinterfacevariable{five}{cinque} \setinterfacevariable{fix}{fisso} \setinterfacevariable{fixed}{fisso} \setinterfacevariable{flexible}{flessibile} \setinterfacevariable{float}{oggettomobile} \setinterfacevariable{flushinner}{flushinner} \setinterfacevariable{flushleft}{flushleft} \setinterfacevariable{flushouter}{flushouter} \setinterfacevariable{flushright}{flushright} \setinterfacevariable{footer}{piedipagina} \setinterfacevariable{footnote}{notapdp} \setinterfacevariable{force}{forza} \setinterfacevariable{foreground}{foreground} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{formula} \setinterfacevariable{formulae}{formule} \setinterfacevariable{forward}{avanti} \setinterfacevariable{four}{quattro} \setinterfacevariable{frame}{cornice} \setinterfacevariable{framedtext}{testoincorniciato} \setinterfacevariable{friday}{venerdi} \setinterfacevariable{frontmatter}{preambolo} \setinterfacevariable{frontpart}{prefazione} \setinterfacevariable{global}{globale} \setinterfacevariable{graphic}{grafico} \setinterfacevariable{graphics}{grafici} \setinterfacevariable{gray}{grigio} \setinterfacevariable{greek}{greco} \setinterfacevariable{grid}{griglia} \setinterfacevariable{halfline}{mezzariga} \setinterfacevariable{handwritten}{grafiamanuale} \setinterfacevariable{hang}{sospendi} \setinterfacevariable{hanging}{sospeso} \setinterfacevariable{head}{testa} \setinterfacevariable{header}{intestazione} \setinterfacevariable{height}{altezza} \setinterfacevariable{helptext}{testoaiuto} \setinterfacevariable{hencefore}{precedente} \setinterfacevariable{here}{qui} \setinterfacevariable{hereafter}{seguente} \setinterfacevariable{hidden}{nascosto} \setinterfacevariable{hiding}{nascondere} \setinterfacevariable{high}{alto} \setinterfacevariable{horizontal}{orizzontale} \setinterfacevariable{hyphenated}{sillabato} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{tra} \setinterfacevariable{index}{indiceanalitico} \setinterfacevariable{indices}{indicianalitici} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{inherit} \setinterfacevariable{inleft}{insinistra} \setinterfacevariable{inmargin}{inmargine} \setinterfacevariable{inner}{interno} \setinterfacevariable{inneredge}{bordointerno} \setinterfacevariable{innermargin}{margineinterno} \setinterfacevariable{inright}{indestra} \setinterfacevariable{interaction}{interazione} \setinterfacevariable{interactionmenu}{menuinterattivo} \setinterfacevariable{intermezzi}{intermezzi} \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{intesto} \setinterfacevariable{intro}{intro} \setinterfacevariable{italic}{corsivo} \setinterfacevariable{italicbold}{corsivograssetto} \setinterfacevariable{item}{elemento} \setinterfacevariable{itemize}{elenco} \setinterfacevariable{its}{its} \setinterfacevariable{january}{gennaio} \setinterfacevariable{joinedup}{unito} \setinterfacevariable{july}{luglio} \setinterfacevariable{june}{giugno} \setinterfacevariable{keep}{mantieni} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{etichetta} \setinterfacevariable{landscape}{orizzontale} \setinterfacevariable{last}{ultimo} \setinterfacevariable{lastcolumn}{lastcolumn} \setinterfacevariable{lastpage}{ultimapagina} \setinterfacevariable{lastpagenumber}{lastpagenumber} \setinterfacevariable{lastsubpage}{ultimasottopagina} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{sinistra} \setinterfacevariable{leftedge}{bordosinistro} \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{marginesinistro} \setinterfacevariable{leftpage}{paginasinistra} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legenda} \setinterfacevariable{less}{less} \setinterfacevariable{lesshyphenation}{lesshyphenation} \setinterfacevariable{line}{riga} \setinterfacevariable{linenote}{linenote} \setinterfacevariable{lines}{righe} \setinterfacevariable{list}{elenco} \setinterfacevariable{local}{locale} \setinterfacevariable{localenvironment}{ambientelocale} \setinterfacevariable{logo}{logo} \setinterfacevariable{logos}{loghi} \setinterfacevariable{lohi}{pedap} \setinterfacevariable{loose}{lento} \setinterfacevariable{low}{basso} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{makeup} \setinterfacevariable{mar}{mar} \setinterfacevariable{march}{marzo} \setinterfacevariable{margin}{margine} \setinterfacevariable{marginedge}{bordomargine} \setinterfacevariable{margintitle}{titoloinmargine} \setinterfacevariable{marking}{marcatura} \setinterfacevariable{mathalignment}{mathalignment} \setinterfacevariable{mathcases}{mathcases} \setinterfacevariable{mathematics}{matematica} \setinterfacevariable{mathmatrix}{mathmatrix} \setinterfacevariable{max}{max} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{maggio} \setinterfacevariable{mediaeval}{medievale} \setinterfacevariable{medium}{medio} \setinterfacevariable{middle}{centro} \setinterfacevariable{min}{min} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{altezzamin} \setinterfacevariable{minwidth}{ampiezzamin} \setinterfacevariable{mirrored}{riflesso} \setinterfacevariable{monday}{lunedi} \setinterfacevariable{mono}{mono} \setinterfacevariable{month}{mese} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} \setinterfacevariable{name}{nome} \setinterfacevariable{narrow}{stretto} \setinterfacevariable{negative}{negativo} \setinterfacevariable{never}{mai} \setinterfacevariable{new}{nuovo} \setinterfacevariable{next}{successivo} \setinterfacevariable{nextevenpage}{paginaparisuccessiva} \setinterfacevariable{nextoddpage}{paginadisparisuccessiva} \setinterfacevariable{nextpage}{paginasuccessiva} \setinterfacevariable{nextsubpage}{sottopaginasuccessiva} \setinterfacevariable{no}{no} \setinterfacevariable{nocheck}{nocheck} \setinterfacevariable{nofit}{nofit} \setinterfacevariable{nogrid}{nogrid} \setinterfacevariable{nohz}{nohz} \setinterfacevariable{nomarking}{nomarcature} \setinterfacevariable{none}{nessuno} \setinterfacevariable{nonumber}{nonumber} \setinterfacevariable{normal}{normale} \setinterfacevariable{nospacing}{nospacing} \setinterfacevariable{not}{non} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{nonsospeso} \setinterfacevariable{nothyphenated}{nonsillabato} \setinterfacevariable{november}{novembre} \setinterfacevariable{nowhere}{danessunaparte} \setinterfacevariable{nowhite}{nobianco} \setinterfacevariable{number}{numero} \setinterfacevariable{numbers}{numeri} \setinterfacevariable{october}{ottobre} \setinterfacevariable{odd}{dispari} \setinterfacevariable{off}{disattivo} \setinterfacevariable{offset}{offset} \setinterfacevariable{old}{old} \setinterfacevariable{on}{attivo} \setinterfacevariable{one}{uno} \setinterfacevariable{opposite}{opposto} \setinterfacevariable{outer}{esterno} \setinterfacevariable{outeredge}{bordoesterno} \setinterfacevariable{outermargin}{margineesterno} \setinterfacevariable{overbar}{sopralinea} \setinterfacevariable{overbars}{sopralinee} \setinterfacevariable{overlay}{sovrapponi} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{sbarrato} \setinterfacevariable{overstrikes}{sbarrati} \setinterfacevariable{packed}{impaccato} \setinterfacevariable{page}{pagina} \setinterfacevariable{pagecomment}{commentopagina} \setinterfacevariable{pagenumber}{numeropagina} \setinterfacevariable{paper}{carta} \setinterfacevariable{paragraph}{capoverso} \setinterfacevariable{part}{parte} \setinterfacevariable{positive}{positivo} \setinterfacevariable{postponing}{posporre} \setinterfacevariable{postscript}{postscript} \setinterfacevariable{preference}{preferenza} \setinterfacevariable{preview}{anteprima} \setinterfacevariable{previous}{precedente} \setinterfacevariable{previousevenpage}{paginapariprecedente} \setinterfacevariable{previousoddpage}{paginadispariprecedente} \setinterfacevariable{previouspage}{paginaprecedente} \setinterfacevariable{previoussubpage}{sottopaginaprecedente} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{stampabile} \setinterfacevariable{process}{process} \setinterfacevariable{product}{prodotto} \setinterfacevariable{program}{programma} \setinterfacevariable{project}{progetto} \setinterfacevariable{protected}{protetto} \setinterfacevariable{quadruple}{quadruplo} \setinterfacevariable{quarterline}{quarterline} \setinterfacevariable{quotation}{citazione} \setinterfacevariable{quote}{menzione} \setinterfacevariable{ran}{corse} \setinterfacevariable{random}{casuale} \setinterfacevariable{readonly}{solalettura} \setinterfacevariable{rectangular}{rettangolare} \setinterfacevariable{reference}{riferimento} \setinterfacevariable{referral}{referral} \setinterfacevariable{register}{registro} \setinterfacevariable{regular}{regolare} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{relativo} \setinterfacevariable{repeat}{ripeti} \setinterfacevariable{required}{richiestp} \setinterfacevariable{reset}{reimposta} \setinterfacevariable{reverse}{invertito} \setinterfacevariable{right}{destra} \setinterfacevariable{rightedge}{bordodestro} \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{marginedestro} \setinterfacevariable{rightpage}{paginadestra} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{roman} \setinterfacevariable{romannumerals}{numeriromani} \setinterfacevariable{rotate}{ruota} \setinterfacevariable{rotated}{ruotato} \setinterfacevariable{round}{rotondo} \setinterfacevariable{row}{row} \setinterfacevariable{rule}{linea} \setinterfacevariable{samepage}{stessapagina} \setinterfacevariable{sans}{sans} \setinterfacevariable{sansbold}{sansgrassetto} \setinterfacevariable{sansserif}{sansserif} \setinterfacevariable{saturday}{sabato} \setinterfacevariable{screen}{schermo} \setinterfacevariable{section}{capoverso} \setinterfacevariable{sectionblockenvironment}{ambientebloccosezione} \setinterfacevariable{sectionnumber}{numerosezione} \setinterfacevariable{see}{vedi} \setinterfacevariable{september}{settembre} \setinterfacevariable{serif}{serif} \setinterfacevariable{serried}{vicino} \setinterfacevariable{setups}{nastaveni} \setinterfacevariable{sheet}{sheet} \setinterfacevariable{short}{short} \setinterfacevariable{singlesided}{facciasingola} \setinterfacevariable{slanted}{inclinato} \setinterfacevariable{slantedbold}{inclinatograssetto} \setinterfacevariable{small}{piccolo} \setinterfacevariable{smallbodyfont}{piccolofontdelcorpo} \setinterfacevariable{smallbold}{piccolograssetto} \setinterfacevariable{smallbolditalic}{piccolograssettocorsivo} \setinterfacevariable{smallboldslanted}{piccolograssettoinclinato} \setinterfacevariable{smallcaps}{maiuscoletto} \setinterfacevariable{smaller}{smaller} \setinterfacevariable{smallitalic}{piccolocorsivo} \setinterfacevariable{smallitalicbold}{piccolocorsivograssetto} \setinterfacevariable{smallnormal}{piccolonormale} \setinterfacevariable{smallslanted}{piccoloinclinato} \setinterfacevariable{smallslantedbold}{piccoloinclinatograssetto} \setinterfacevariable{smalltype}{piccolotype} \setinterfacevariable{somewhere}{daqualcheparte} \setinterfacevariable{sorted}{ordinato} \setinterfacevariable{space}{spazio} \setinterfacevariable{spacing}{spaziatura} \setinterfacevariable{speech}{speech} \setinterfacevariable{split}{separa} \setinterfacevariable{spot}{spot} \setinterfacevariable{standard}{standard} \setinterfacevariable{start}{inizia} \setinterfacevariable{starter}{starter} \setinterfacevariable{sticker}{sticker} \setinterfacevariable{stop}{termina} \setinterfacevariable{stopper}{stopper} \setinterfacevariable{stretch}{dilata} \setinterfacevariable{strict}{rigido} \setinterfacevariable{strong}{strong} \setinterfacevariable{strut}{strut} \setinterfacevariable{sub}{sotto} \setinterfacevariable{subbackward}{sottoindietro} \setinterfacevariable{subformula}{subformula} \setinterfacevariable{subforward}{sottoavanti} \setinterfacevariable{subject}{argomento} \setinterfacevariable{subpage}{sottopagina} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{sottocapoverso} \setinterfacevariable{subsubject}{sottoargomento} \setinterfacevariable{subsubsection}{sottosottocapoverso} \setinterfacevariable{subsubsubject}{sottosottoargomento} \setinterfacevariable{subsubsubsection}{sottosottosottocapoverso} \setinterfacevariable{subsubsubsubject}{sottosottosottoargomento} \setinterfacevariable{subsubsubsubsection}{sottosottosottosottocapoverso} \setinterfacevariable{subsubsubsubsubject}{sottosottosottosottoargomento} \setinterfacevariable{subsubsubsubsubsection}{sottosottosottosottosottocapoverso} \setinterfacevariable{subsubsubsubsubsubject}{sottosottosottosottosottoargomento} \setinterfacevariable{subsubsubsubsubsubsection}{sottosottosottosottosottosottocapoverso} \setinterfacevariable{subsubsubsubsubsubsubject}{sottosottosottosottosottosottoargomento} \setinterfacevariable{subsubsubsubsubsubsubsection}{sottosottosottosottosottosottosottocapoverso} \setinterfacevariable{subsubsubsubsubsubsubsubject}{sottosottosottosottosottosottosottoargomento} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{sottosottosottosottosottosottosottosottocapoverso} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{sottosottosottosottosottosottosottosottoargomento} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{sottosottosottosottosottosottosottosottosottocapoverso} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{sottosottosottosottosottosottosottosottosottoargomento} \setinterfacevariable{sunday}{domenica} \setinterfacevariable{support}{supporto} \setinterfacevariable{sym}{sim} \setinterfacevariable{symbol}{simbolo} \setinterfacevariable{synchronize}{synchronize} \setinterfacevariable{system}{sistema} \setinterfacevariable{table}{tabella} \setinterfacevariable{tablehead}{testatabella} \setinterfacevariable{tables}{tabelle} \setinterfacevariable{tabletail}{codatabella} \setinterfacevariable{tabulate}{tabulato} \setinterfacevariable{tabulatehead}{testatabulato} \setinterfacevariable{tabulatetail}{codatabulato} \setinterfacevariable{tall}{alto} \setinterfacevariable{teletype}{teletype} \setinterfacevariable{temporary}{temporaneo} \setinterfacevariable{test}{test} \setinterfacevariable{text}{testo} \setinterfacevariable{three}{tre} \setinterfacevariable{thursday}{giovedi} \setinterfacevariable{tight}{tight} \setinterfacevariable{title}{titolo} \setinterfacevariable{toggle}{toggle} \setinterfacevariable{tolerant}{tollerante} \setinterfacevariable{top}{cima} \setinterfacevariable{tuesday}{martedi} \setinterfacevariable{two}{due} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{type} \setinterfacevariable{typing}{typing} \setinterfacevariable{unavailable}{nondisponibile} \setinterfacevariable{underbar}{sottolinea} \setinterfacevariable{underbars}{sottolinee} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{unita} \setinterfacevariable{units}{unita} \setinterfacevariable{unknown}{ignoto} \setinterfacevariable{unpacked}{unpacked} \setinterfacevariable{up}{up} \setinterfacevariable{url}{url} \setinterfacevariable{used}{usato} \setinterfacevariable{value}{valore} \setinterfacevariable{vertical}{verticale} \setinterfacevariable{very}{molto} \setinterfacevariable{verystrict}{moltorigido} \setinterfacevariable{verytolerant}{moltotollerante} \setinterfacevariable{weak}{weak} \setinterfacevariable{wednesday}{mercoledi} \setinterfacevariable{week}{settimana} \setinterfacevariable{weekday}{giornosettimana} \setinterfacevariable{white}{bianco} \setinterfacevariable{wide}{ampio} \setinterfacevariable{width}{ampiezza} \setinterfacevariable{word}{parola} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{anno} \setinterfacevariable{yes}{si} % definitions for interface constants for language it % \setinterfaceconstant{action}{azione} \setinterfaceconstant{address}{indirizzo} \setinterfaceconstant{after}{dopo} \setinterfaceconstant{afterhead}{dopotesta} \setinterfaceconstant{afterkey}{dopotasto} \setinterfaceconstant{aftersection}{aftersection} \setinterfaceconstant{align}{allinea} \setinterfaceconstant{aligncharacter}{allineacarattere} \setinterfaceconstant{alignmentcharacter}{carattereallineamento} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{allineatitolo} \setinterfaceconstant{alternative}{alternativa} \setinterfaceconstant{anchor}{anchor} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{freccia} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{ad} \setinterfaceconstant{author}{autore} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{auto} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{autofile} \setinterfaceconstant{autofocus}{autofocus} \setinterfaceconstant{autohang}{autohang} \setinterfaceconstant{autostrut}{autostrut} \setinterfaceconstant{autowidth}{autoampiezza} \setinterfaceconstant{availableheight}{availableheight} \setinterfaceconstant{availablewidth}{availablewidth} \setinterfaceconstant{axis}{asse} \setinterfaceconstant{background}{sfondo} \setinterfaceconstant{backgroundcolor}{coloresfondo} \setinterfaceconstant{backgroundcorner}{angolosfondo} \setinterfaceconstant{backgrounddepth}{profonditasfondo} \setinterfaceconstant{backgroundoffset}{offsetsfondo} \setinterfaceconstant{backgroundradius}{raggiosfondo} \setinterfaceconstant{backgroundscreen}{schermosfondo} \setinterfaceconstant{backreference}{backreference} \setinterfaceconstant{backspace}{backspace} \setinterfaceconstant{balance}{bilanciamento} \setinterfaceconstant{before}{prima} \setinterfaceconstant{beforehead}{primaditesta} \setinterfaceconstant{beforesection}{beforesection} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{grande} \setinterfaceconstant{blank}{rigovuoto} \setinterfaceconstant{blockway}{blockway} \setinterfaceconstant{bodyfont}{fonttesto} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{segnalibro} \setinterfaceconstant{bottom}{fondo} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{distanzafondo} \setinterfaceconstant{bottomframe}{cornicefondo} \setinterfaceconstant{bottomoffset}{offsetfondo} \setinterfaceconstant{bottomspace}{spaziofondo} \setinterfaceconstant{bottomstate}{statofondo} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{cache} \setinterfaceconstant{calculate}{calcola} \setinterfaceconstant{category}{category} \setinterfaceconstant{ccommand}{ccomando} \setinterfaceconstant{click}{click} \setinterfaceconstant{clickin}{clickdentro} \setinterfaceconstant{clickout}{clickfuori} \setinterfaceconstant{clipoffset}{clipoffset} \setinterfaceconstant{closeaction}{azionechiudi} \setinterfaceconstant{closecommand}{closecommand} \setinterfaceconstant{closepage}{closepage} \setinterfaceconstant{closepageaction}{azionechiudipagina} \setinterfaceconstant{closesymbol}{closesymbol} \setinterfaceconstant{color}{colore} \setinterfaceconstant{column}{colonna} \setinterfaceconstant{columndistance}{distanzacolonne} \setinterfaceconstant{columns}{colonne} \setinterfaceconstant{command}{comando} \setinterfaceconstant{commandafter}{comdandodopo} \setinterfaceconstant{commandbefore}{comandoprima} \setinterfaceconstant{commands}{comandi} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{component} \setinterfaceconstant{compoundhyphen}{compoundhyphen} \setinterfaceconstant{compress}{compress} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{continua} \setinterfaceconstant{contrastcolor}{colorecontrasto} \setinterfaceconstant{controls}{controlli} \setinterfaceconstant{conversion}{conversione} \setinterfaceconstant{convertfile}{convertifile} \setinterfaceconstant{corner}{angolo} \setinterfaceconstant{coupling}{accoppiamento} \setinterfaceconstant{couplingway}{modoaccoppiamento} \setinterfaceconstant{criterium}{criterio} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{corrente} \setinterfaceconstant{cutspace}{cutspace} \setinterfaceconstant{dash}{dash} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{data} \setinterfaceconstant{deepnumbercommand}{deepnumbercommand} \setinterfaceconstant{deeptextcommand}{deeptextcommand} \setinterfaceconstant{default}{implicito} \setinterfaceconstant{delay}{attesa} \setinterfaceconstant{depth}{profondita} \setinterfaceconstant{depthcorrection}{correzioneprofondita} \setinterfaceconstant{direction}{direzione} \setinterfaceconstant{directory}{directory} \setinterfaceconstant{display}{display} \setinterfaceconstant{distance}{distanza} \setinterfaceconstant{dot}{punto} \setinterfaceconstant{doublesided}{doppiafaccia} \setinterfaceconstant{dummy}{dummy} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{bordo} \setinterfaceconstant{edgedistance}{distanzabordo} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{vuoto} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{entries} \setinterfaceconstant{equalheight}{equalheight} \setinterfaceconstant{equalwidth}{equalwidth} \setinterfaceconstant{escape}{escape} \setinterfaceconstant{evenmargin}{marginepari} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{espansione} \setinterfaceconstant{export}{export} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{fattore} \setinterfaceconstant{fallback}{fallback} \setinterfaceconstant{family}{famiglia} \setinterfaceconstant{fieldbackgroundcolor}{coloresfondocampo} \setinterfaceconstant{fieldframecolor}{colorecornicecampo} \setinterfaceconstant{fieldlayer}{fieldlayer} \setinterfaceconstant{fieldoffset}{offsetcampo} \setinterfaceconstant{file}{file} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{primapagina} \setinterfaceconstant{focus}{focus} \setinterfaceconstant{focusin}{focusin} \setinterfaceconstant{focusout}{focusout} \setinterfaceconstant{footer}{piedipagina} \setinterfaceconstant{footerdistance}{distanzapdp} \setinterfaceconstant{footerstate}{statopdp} \setinterfaceconstant{force}{forza} \setinterfaceconstant{foregroundcolor}{coloreprimopiano} \setinterfaceconstant{foregroundstyle}{foregroundstyle} \setinterfaceconstant{format}{format} \setinterfaceconstant{frame}{cornice} \setinterfaceconstant{framecolor}{colorecornice} \setinterfaceconstant{framecorner}{angolocornice} \setinterfaceconstant{framedepth}{profonditacornice} \setinterfaceconstant{frameoffset}{offsetcornice} \setinterfaceconstant{frameradius}{raggiocornice} \setinterfaceconstant{frames}{cornici} \setinterfaceconstant{from}{da} \setinterfaceconstant{get}{prendi} \setinterfaceconstant{global}{globale} \setinterfaceconstant{grid}{griglia} \setinterfaceconstant{hang}{sospendi} \setinterfaceconstant{hcompact}{hcompact} \setinterfaceconstant{headalign}{headalign} \setinterfaceconstant{headcolor}{coloretesta} \setinterfaceconstant{headcommand}{headcommand} \setinterfaceconstant{headconversion}{conversionetesta} \setinterfaceconstant{header}{intestazione} \setinterfaceconstant{headerdistance}{distanzaintestazione} \setinterfaceconstant{headerstate}{statointestazione} \setinterfaceconstant{headlabel}{etichettatesta} \setinterfaceconstant{headnumber}{numerotesta} \setinterfaceconstant{headstyle}{stiletesta} \setinterfaceconstant{height}{altezza} \setinterfaceconstant{hfactor}{hfactor} \setinterfaceconstant{hfil}{hfil} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{hoffset} \setinterfaceconstant{horoffset}{horoffset} \setinterfaceconstant{hyphen}{hyphen} \setinterfaceconstant{icommand}{icomando} \setinterfaceconstant{in}{in} \setinterfaceconstant{inbetween}{tra} \setinterfaceconstant{increment}{incremento} \setinterfaceconstant{incrementnumber}{incrementanumero} \setinterfaceconstant{indenting}{rientro} \setinterfaceconstant{indentnext}{rientrasuccessivo} \setinterfaceconstant{indicator}{indicatore} \setinterfaceconstant{inner}{interno} \setinterfaceconstant{innermargin}{margineinterno} \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interazione} \setinterfaceconstant{interlinespace}{interlinea} \setinterfaceconstant{internalgrid}{internalgrid} \setinterfaceconstant{itemalign}{itemalign} \setinterfaceconstant{items}{elementi} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{keyexpansion} \setinterfaceconstant{keys}{keys} \setinterfaceconstant{keyword}{parolachiave} \setinterfaceconstant{label}{etichetta} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{ultimapagina} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{sinistra} \setinterfaceconstant{leftcolor}{coloresinistra} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{bordosinistro} \setinterfaceconstant{leftedgedistance}{distanzabordosinistro} \setinterfaceconstant{leftframe}{cornicesinistra} \setinterfaceconstant{lefthyphen}{lefthyphen} \setinterfaceconstant{leftmargin}{marginesinistro} \setinterfaceconstant{leftmargindistance}{distanzamarginesinistro} \setinterfaceconstant{leftoffset}{offsetsinistro} \setinterfaceconstant{leftquotation}{citazionesinistra} \setinterfaceconstant{leftquote}{menzionesinistra} \setinterfaceconstant{leftsentence}{frasesinistra} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{stilesinistra} \setinterfaceconstant{leftsubsentence}{sottofrasesinistra} \setinterfaceconstant{lefttext}{testosinistro} \setinterfaceconstant{leftwidth}{ampiezzasinistra} \setinterfaceconstant{less}{less} \setinterfaceconstant{level}{livello} \setinterfaceconstant{levels}{livelli} \setinterfaceconstant{limittext}{limittext} \setinterfaceconstant{line}{riga} \setinterfaceconstant{linecorrection}{correzioneriga} \setinterfaceconstant{lines}{righe} \setinterfaceconstant{list}{elenco} \setinterfaceconstant{listtext}{listtext} \setinterfaceconstant{local}{locale} \setinterfaceconstant{location}{luogo} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{logo} \setinterfaceconstant{logos}{loghi} \setinterfaceconstant{marcolor}{coloremarcatura} \setinterfaceconstant{margin}{margine} \setinterfaceconstant{margindistance}{distanzamargine} \setinterfaceconstant{marginedge}{bordomargine} \setinterfaceconstant{marginedgetext}{testobordomargine} \setinterfaceconstant{margintext}{testomargine} \setinterfaceconstant{marking}{marcatura} \setinterfaceconstant{marstyle}{stilemarcatura} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{altezzamax} \setinterfaceconstant{maxwidth}{ampiezzamax} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{menu} \setinterfaceconstant{method}{metodo} \setinterfaceconstant{middle}{centro} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middletext}{testocentro} \setinterfaceconstant{midsentence}{midsentence} \setinterfaceconstant{min}{min} \setinterfaceconstant{mindepth}{mindeoth} \setinterfaceconstant{minheight}{altezzamin} \setinterfaceconstant{minwidth}{ampiezzamin} \setinterfaceconstant{monthconversion}{monthconversion} \setinterfaceconstant{more}{more} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{nome} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{nfondo} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{successivo} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{nsinistra} \setinterfaceconstant{nlines}{nrighe} \setinterfaceconstant{norm}{norma} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{ndestra} \setinterfaceconstant{ntop}{ncima} \setinterfaceconstant{number}{numero} \setinterfaceconstant{numbercolor}{colorenumero} \setinterfaceconstant{numbercommand}{comandonumero} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{numerazione} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{separatorenumero} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{stilenumero} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{oggetto} \setinterfaceconstant{obstruction}{ostruzione} \setinterfaceconstant{oddmargin}{marginedispari} \setinterfaceconstant{offset}{offset} \setinterfaceconstant{openaction}{azioneapri} \setinterfaceconstant{openpage}{openpage} \setinterfaceconstant{openpageaction}{azioneapripagina} \setinterfaceconstant{option}{opzione} \setinterfaceconstant{order}{order} \setinterfaceconstant{orientation}{orientation} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{margineesterno} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{numeroproprio} \setinterfaceconstant{page}{pagina} \setinterfaceconstant{pageboundaries}{limitipagina} \setinterfaceconstant{pagecolor}{colorepagina} \setinterfaceconstant{pagecolormodel}{pagecolormodel} \setinterfaceconstant{pagecommand}{comandopagina} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{numeropagina} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{statopagina} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{stilepagina} \setinterfaceconstant{palet}{tavolozza} \setinterfaceconstant{paper}{carta} \setinterfaceconstant{paragraph}{capoverso} \setinterfaceconstant{place}{metti} \setinterfaceconstant{placehead}{mettitesta} \setinterfaceconstant{placestopper}{mettistopper} \setinterfaceconstant{position}{posizione} \setinterfaceconstant{prefix}{prefisso} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{preimpostato} \setinterfaceconstant{preview}{anteprima} \setinterfaceconstant{previous}{precedente} \setinterfaceconstant{previousnumber}{numeroprecedente} \setinterfaceconstant{printable}{stampabile} \setinterfaceconstant{process}{process} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{raggio} \setinterfaceconstant{random}{casuale} \setinterfaceconstant{range}{range} \setinterfaceconstant{reduction}{riduzione} \setinterfaceconstant{ref}{ref} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{riferimento} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{referencing} \setinterfaceconstant{region}{region} \setinterfaceconstant{regionin}{entraregione} \setinterfaceconstant{regionout}{esciregione} \setinterfaceconstant{repeat}{ripeti} \setinterfaceconstant{reset}{reset} \setinterfaceconstant{resetnumber}{resetnumber} \setinterfaceconstant{resolution}{risoluzione} \setinterfaceconstant{right}{destra} \setinterfaceconstant{rightcolor}{coloredestra} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{bordodestro} \setinterfaceconstant{rightedgedistance}{distanzabordodestro} \setinterfaceconstant{rightframe}{cornicedestra} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{marginedestro} \setinterfaceconstant{rightmargindistance}{distanzamarginedestro} \setinterfaceconstant{rightoffset}{offsetdestro} \setinterfaceconstant{rightquotation}{citazionedestra} \setinterfaceconstant{rightquote}{menzionedestra} \setinterfaceconstant{rightsentence}{frasedestra} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{stiledestra} \setinterfaceconstant{rightsubsentence}{sottofrasedestra} \setinterfaceconstant{righttext}{testodestro} \setinterfaceconstant{rightwidth}{ampiezzadestra} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{rotazione} \setinterfaceconstant{rule}{linea} \setinterfaceconstant{rulecolor}{colorelinea} \setinterfaceconstant{rulecommand}{rulecommand} \setinterfaceconstant{rulethickness}{spessorelinea} \setinterfaceconstant{samepage}{stessapagina} \setinterfaceconstant{sample}{campione} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{scala} \setinterfaceconstant{scope}{scope} \setinterfaceconstant{screen}{schermo} \setinterfaceconstant{section}{sezione} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{numerosezione} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{separatore} \setinterfaceconstant{set}{set} \setinterfaceconstant{setups}{setups} \setinterfaceconstant{shrink}{shrink} \setinterfaceconstant{side}{lato} \setinterfaceconstant{sidealign}{sidealign} \setinterfaceconstant{sidemethod}{sidemethod} \setinterfaceconstant{sidespaceafter}{spaziolateraledopo} \setinterfaceconstant{sidespacebefore}{spaziolateraleprima} \setinterfaceconstant{sign}{segno} \setinterfaceconstant{size}{dimensione} \setinterfaceconstant{small}{piccolo} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} \setinterfaceconstant{source}{origine} \setinterfaceconstant{space}{spazio} \setinterfaceconstant{spaceafter}{spaziodopo} \setinterfaceconstant{spacebefore}{spazioprima} \setinterfaceconstant{spaceinbetween}{spaceinbetween} \setinterfaceconstant{spacing}{spaziatura} \setinterfaceconstant{split}{separa} \setinterfaceconstant{splitcolor}{splitcolor} \setinterfaceconstant{splitmethod}{splitmethod} \setinterfaceconstant{splitoffset}{splitoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stack} \setinterfaceconstant{start}{inizia} \setinterfaceconstant{starter}{starter} \setinterfaceconstant{state}{stato} \setinterfaceconstant{step}{passo} \setinterfaceconstant{stop}{termina} \setinterfaceconstant{stopper}{stopper} \setinterfaceconstant{stretch}{dilata} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{strut} \setinterfaceconstant{style}{stile} \setinterfaceconstant{sub}{sotto} \setinterfaceconstant{subtitle}{sottotitolo} \setinterfaceconstant{suffix}{suffix} \setinterfaceconstant{suffixseparator}{suffixseparator} \setinterfaceconstant{suffixstopper}{suffixstopper} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{symallinea} \setinterfaceconstant{symbol}{simbolo} \setinterfaceconstant{symbolset}{setsimboli} \setinterfaceconstant{symcolor}{coloresimbolo} \setinterfaceconstant{symstyle}{stilesimbolo} \setinterfaceconstant{synonym}{sinonimo} \setinterfaceconstant{synonymcolor}{coloresinonimi} \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{stilesinonimi} \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{testo} \setinterfaceconstant{textcolor}{coloretesto} \setinterfaceconstant{textcommand}{comandotesto} \setinterfaceconstant{textdistance}{distanzatesto} \setinterfaceconstant{textheight}{altezzatesto} \setinterfaceconstant{textlayer}{textlayer} \setinterfaceconstant{textmargin}{textmargin} \setinterfaceconstant{textmethod}{textmethod} \setinterfaceconstant{textseparator}{separatoretesto} \setinterfaceconstant{textsize}{dimensionetesto} \setinterfaceconstant{textstate}{statotesto} \setinterfaceconstant{textstyle}{stiletesto} \setinterfaceconstant{textwidth}{ampiezzatesto} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{titolo} \setinterfaceconstant{titlecolor}{coloretitolo} \setinterfaceconstant{titlecommand}{titlecommand} \setinterfaceconstant{titledistance}{distanzatitolo} \setinterfaceconstant{titleleft}{titleleft} \setinterfaceconstant{titleright}{titleright} \setinterfaceconstant{titlestyle}{stiletitolo} \setinterfaceconstant{to}{verso} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolleranza} \setinterfaceconstant{top}{cima} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{distanzacima} \setinterfaceconstant{topframe}{cornicecima} \setinterfaceconstant{topoffset}{offsetcima} \setinterfaceconstant{topspace}{spaziocima} \setinterfaceconstant{topstate}{statocima} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{type} \setinterfaceconstant{unit}{unita} \setinterfaceconstant{unknownreference}{riferimentoingoto} \setinterfaceconstant{urlalternative}{alternativaurl} \setinterfaceconstant{urlspace}{spaziourl} \setinterfaceconstant{validate}{verifica} \setinterfaceconstant{values}{values} \setinterfaceconstant{vcommand}{vcomando} \setinterfaceconstant{vcompact}{vcompact} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{veroffset} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{voffset} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{modo} \setinterfaceconstant{wfactor}{wfactor} \setinterfaceconstant{white}{bianco} \setinterfaceconstant{width}{ampiezza} \setinterfaceconstant{xfactor}{xfactor} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{xoffset} \setinterfaceconstant{xscale}{xscale} \setinterfaceconstant{xstep}{xstep} \setinterfaceconstant{yfactor}{yfactor} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{yoffset} \setinterfaceconstant{yscale}{yscale} \setinterfaceconstant{ystep}{ystep} % definitions for interface elements for language it % \setinterfaceelement{answerlines}{answerlines} \setinterfaceelement{answerspace}{answerspace} \setinterfaceelement{begin}{inizio} \setinterfaceelement{complete}{completo} \setinterfaceelement{coupled}{accoppiato} \setinterfaceelement{currentlocal}{correntelocale} \setinterfaceelement{end}{fine} \setinterfaceelement{endsetup}{} \setinterfaceelement{get}{prendi} \setinterfaceelement{increment}{incrementa} \setinterfaceelement{list}{elenco} \setinterfaceelement{listof}{elencodi} \setinterfaceelement{load}{carica} \setinterfaceelement{local}{locale} \setinterfaceelement{makeup}{makeup} \setinterfaceelement{next}{successivo} \setinterfaceelement{place}{metti} \setinterfaceelement{previous}{precedente} \setinterfaceelement{previouslocal}{precedentelocale} \setinterfaceelement{reserve}{riserva} \setinterfaceelement{see}{vedi} \setinterfaceelement{setup}{imposta} \setinterfaceelement{start}{inizia} \setinterfaceelement{stop}{termina} \setinterfaceelement{text}{testo} \setinterfaceelement{type}{type} % definitions for interface commands for language it % \setinterfacecommand{CAPPED}{CAP} \setinterfacecommand{Character}{Lettera} \setinterfacecommand{Characters}{Lettere} \setinterfacecommand{MONTH}{MESE} \setinterfacecommand{Numbers}{Numeri} \setinterfacecommand{Romannumerals}{Numeriromani} \setinterfacecommand{SmallCapped}{Cap} \setinterfacecommand{SmallCaps}{Caps} \setinterfacecommand{WEEKDAY}{GIORNOSETTIMANA} \setinterfacecommand{WORD}{PAROLA} \setinterfacecommand{WORDS}{PAROLE} \setinterfacecommand{Word}{Parola} \setinterfacecommand{Words}{Parole} \setinterfacecommand{about}{intorno} \setinterfacecommand{adaptlayout}{adattalayout} \setinterfacecommand{arg}{arg} \setinterfacecommand{at}{al} \setinterfacecommand{atleftmargin}{atleftmargin} \setinterfacecommand{atpage}{apagina} \setinterfacecommand{atrightmargin}{atrightmargin} \setinterfacecommand{background}{sfondo} \setinterfacecommand{backspace}{spaziodietro} \setinterfacecommand{blackrule}{lineanera} \setinterfacecommand{blackrules}{lineenere} \setinterfacecommand{blank}{rigovuoto} \setinterfacecommand{bookmark}{segnalibro} \setinterfacecommand{bottomdistance}{distanzafondo} \setinterfacecommand{bottomheight}{altezzafondo} \setinterfacecommand{bottomspace}{spaziofondo} \setinterfacecommand{but}{fondo} \setinterfacecommand{button}{pulsante} \setinterfacecommand{bypassblocks}{saltablocchi} \setinterfacecommand{character}{lettera} \setinterfacecommand{characters}{lettere} \setinterfacecommand{chem}{chim} \setinterfacecommand{clip}{clip} \setinterfacecommand{clonefield}{clonacampo} \setinterfacecommand{color}{colore} \setinterfacecommand{colorbar}{barracolori} \setinterfacecommand{colorvalue}{valorecolore} \setinterfacecommand{column}{colonna} \setinterfacecommand{comparecolorgroup}{confrontagruppocolori} \setinterfacecommand{comparepalet}{confrontatavolozza} \setinterfacecommand{completepagenumber}{numeropaginacompleto} \setinterfacecommand{completeregister}{completeregister} \setinterfacecommand{component}{componenet} \setinterfacecommand{convertnumber}{convertinumero} \setinterfacecommand{copyfield}{copiacampo} \setinterfacecommand{correctwhitespace}{correggispaziobianco} \setinterfacecommand{coupledocument}{accoppiadocumento} \setinterfacecommand{couplemarking}{accoppiamarcatura} \setinterfacecommand{couplepage}{accoppiapagina} \setinterfacecommand{couplepaper}{accoppiacarta} \setinterfacecommand{coupleregister}{accoppiaregistro} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{datadioggi} \setinterfacecommand{currentheadnumber}{numerotestacorrente} \setinterfacecommand{cutspace}{cutspace} \setinterfacecommand{date}{data} \setinterfacecommand{decouplemarking}{separamarcatura} \setinterfacecommand{decrementnumber}{decrementnumber} \setinterfacecommand{define}{definisci} \setinterfacecommand{defineaccent}{definisciaccento} \setinterfacecommand{defineblank}{definiscirigovuoto} \setinterfacecommand{defineblock}{definisciblocco} \setinterfacecommand{definebodyfont}{definiscifontdeltesto} \setinterfacecommand{definebodyfontenvironment}{definisciambientefontdeltesto} \setinterfacecommand{definebuffer}{definiscibuffer} \setinterfacecommand{definecharacter}{definiscicarattere} \setinterfacecommand{definecolor}{definiscicolore} \setinterfacecommand{definecolorgroup}{definiscigruppocolori} \setinterfacecommand{definecolumnbreak}{definecolumnbreak} \setinterfacecommand{definecolumnset}{definiscigruppocolonne} \setinterfacecommand{definecombination}{definecombination} \setinterfacecommand{definecombinedlist}{definiscielencocombinato} \setinterfacecommand{definecommand}{definiscicomando} \setinterfacecommand{defineconversion}{definisciconversione} \setinterfacecommand{definedescription}{definiscidescrizione} \setinterfacecommand{defineenumeration}{definiscienumerazione} \setinterfacecommand{definefield}{definiscicampo} \setinterfacecommand{definefieldstack}{definiscistackcampi} \setinterfacecommand{definefiguresymbol}{definiscifigurasimbolo} \setinterfacecommand{definefloat}{definiscioggettomobile} \setinterfacecommand{definefont}{definiscifont} \setinterfacecommand{definefontstyle}{definiscistilefont} \setinterfacecommand{definefontsynonym}{definiscisinonimofont} \setinterfacecommand{defineframed}{definisciincorniciato} \setinterfacecommand{defineframedtext}{definiscitestoincorniciato} \setinterfacecommand{definehbox}{definiscihbox} \setinterfacecommand{definehead}{definiscitesta} \setinterfacecommand{defineindentedtext}{defineindentedtext} \setinterfacecommand{defineinmargin}{defineinmargin} \setinterfacecommand{defineinteractionmenu}{definiscimenuinterazione} \setinterfacecommand{defineitemgroup}{defineitemgroup} \setinterfacecommand{definelabel}{definiscietichetta} \setinterfacecommand{definelayer}{definelayer} \setinterfacecommand{definelayout}{definiscilayout} \setinterfacecommand{definelist}{definiscielenco} \setinterfacecommand{definelogo}{definiscilogo} \setinterfacecommand{definemainfield}{definiscicampoprincipale} \setinterfacecommand{definemakeup}{definiscimakeup} \setinterfacecommand{definemarking}{definiscimarcatura} \setinterfacecommand{definemathalignment}{definemathalignment} \setinterfacecommand{defineoutput}{definiscioutput} \setinterfacecommand{defineoverlay}{definiscisovrapposizione} \setinterfacecommand{definepagebreak}{definepagebreak} \setinterfacecommand{definepalet}{definiscitavolozza} \setinterfacecommand{definepapersize}{definiscidimensionicarta} \setinterfacecommand{defineparagraphs}{definiscicapoversi} \setinterfacecommand{defineplacement}{defineplacement} \setinterfacecommand{defineprofile}{definisciprofilo} \setinterfacecommand{defineprogram}{definisciprogramma} \setinterfacecommand{definerawfont}{definiscifontgrezzo} \setinterfacecommand{definereference}{definisciriferimento} \setinterfacecommand{definereferenceformat}{definisciformatoriferimento} \setinterfacecommand{definereferencelist}{definiscilistariferimenti} \setinterfacecommand{defineregister}{definisciregistro} \setinterfacecommand{definerule}{definiscilinea} \setinterfacecommand{definesection}{definiscisezione} \setinterfacecommand{definesectionblock}{definiscibloccosezione} \setinterfacecommand{definesorting}{definisciordinamento} \setinterfacecommand{definestartstop}{definisciiniziatermina} \setinterfacecommand{definestyle}{definiscistile} \setinterfacecommand{definesubfield}{definiscisottocampo} \setinterfacecommand{definesymbol}{definiscisimbolo} \setinterfacecommand{definesynonyms}{definiscisinonimi} \setinterfacecommand{definetabletemplate}{definiscimodellotabella} \setinterfacecommand{definetabulate}{definiscitabulato} \setinterfacecommand{definetext}{definiscitesto} \setinterfacecommand{definetextposition}{definisciposizionetesto} \setinterfacecommand{definetextvariable}{definiscivariabiletesto} \setinterfacecommand{definetype}{definiscitype} \setinterfacecommand{definetyping}{definiscityping} \setinterfacecommand{defineversion}{definisciversion} \setinterfacecommand{determineheadnumber}{determinanumerotesta} \setinterfacecommand{determinelistcharacteristics}{determinacarattersticheelenco} \setinterfacecommand{determineregistercharacteristics}{determinacaratteristicheregistro} \setinterfacecommand{dimension}{dimensione} \setinterfacecommand{disableinteractionmenu}{disabilitamenuinterazione} \setinterfacecommand{domicile}{domicilio} \setinterfacecommand{donttest}{notest} \setinterfacecommand{edgedistance}{distanzabordo} \setinterfacecommand{edgewidth}{ampiezzabordo} \setinterfacecommand{emptylines}{emptylines} \setinterfacecommand{environment}{ambiente} \setinterfacecommand{externalfigure}{figuraesterna} \setinterfacecommand{fact}{fatto} \setinterfacecommand{field}{campi} \setinterfacecommand{fieldstack}{stackcampi} \setinterfacecommand{fillinfield}{camporiempimento} \setinterfacecommand{fillinline}{rigariempimento} \setinterfacecommand{fillinrules}{lineeriempimento} \setinterfacecommand{fillintext}{testoriempimento} \setinterfacecommand{fitfield}{adattacampo} \setinterfacecommand{fixedspace}{spaziofisso} \setinterfacecommand{fixedspaces}{spazifissi} \setinterfacecommand{followprofile}{seguiprofilo} \setinterfacecommand{followprofileversion}{seguiversioneprofilo} \setinterfacecommand{followversion}{seguiversione} \setinterfacecommand{footerdistance}{distanzapdp} \setinterfacecommand{footerheight}{altezzapdp} \setinterfacecommand{footnote}{notapdp} \setinterfacecommand{footnotetext}{testonotapdp} \setinterfacecommand{forceblocks}{forzablocchi} \setinterfacecommand{formulanumber}{numeroformula} \setinterfacecommand{fraction}{frazione} \setinterfacecommand{framed}{incorniciato} \setinterfacecommand{from}{da} \setinterfacecommand{getbuffer}{prendibuffer} \setinterfacecommand{getmarking}{prendimarcatura} \setinterfacecommand{getnumber}{getnumber} \setinterfacecommand{godown}{vaigiu} \setinterfacecommand{goto}{vaia} \setinterfacecommand{gotobox}{vaiabox} \setinterfacecommand{gotopage}{vaiapagina} \setinterfacecommand{graycolor}{coloregrigio} \setinterfacecommand{greyvalue}{valoregrigio} \setinterfacecommand{grid}{griglia} \setinterfacecommand{hairline}{capello} \setinterfacecommand{head}{testa} \setinterfacecommand{headerdistance}{distanzaintestazione} \setinterfacecommand{headerheight}{altezzaintestazione} \setinterfacecommand{headlevel}{livellotesta} \setinterfacecommand{headnumber}{numerotesta} \setinterfacecommand{headsym}{headsym} \setinterfacecommand{headtext}{testoinstestazioni} \setinterfacecommand{hideblocks}{nascondiblocchi} \setinterfacecommand{high}{ap} \setinterfacecommand{hl}{hl} \setinterfacecommand{immediatebetweenlist}{immediatebetweenlist} \setinterfacecommand{immediatetolist}{immediatetolist} \setinterfacecommand{in}{in} \setinterfacecommand{incrementnumber}{incrementanumero} \setinterfacecommand{indenting}{rientro} \setinterfacecommand{inframed}{circondato} \setinterfacecommand{infull}{perlungo} \setinterfacecommand{ininner}{ininner} \setinterfacecommand{inleft}{insinistra} \setinterfacecommand{inleftedge}{inlatosinistro} \setinterfacecommand{inleftmargin}{inmarginesinistro} \setinterfacecommand{inline}{inriga} \setinterfacecommand{inmargin}{inmargine} \setinterfacecommand{inmframed}{inmaframed} \setinterfacecommand{inneredgedistance}{inneredgedistance} \setinterfacecommand{inneredgewidth}{inneredgewidth} \setinterfacecommand{innermargindistance}{innermargindistance} \setinterfacecommand{innermarginwidth}{innermarginwidth} \setinterfacecommand{inothermargin}{inaltromargine} \setinterfacecommand{inouter}{inouter} \setinterfacecommand{inright}{indestra} \setinterfacecommand{inrightedge}{inlatodestro} \setinterfacecommand{inrightmargin}{inmarginedestro} \setinterfacecommand{installlanguage}{installalingua} \setinterfacecommand{interactionbar}{barrainterazione} \setinterfacecommand{interactionbuttons}{pulsantinterazione} \setinterfacecommand{interactionmenu}{menuinterattivo} \setinterfacecommand{item}{elemento} \setinterfacecommand{items}{elementi} \setinterfacecommand{its}{el} \setinterfacecommand{keepblocks}{tieniblocchi} \setinterfacecommand{label}{etichetta} \setinterfacecommand{labels}{etichette} \setinterfacecommand{labeltext}{testoetichetta} \setinterfacecommand{language}{lingua} \setinterfacecommand{leftaligned}{allineasinistra} \setinterfacecommand{leftedgedistance}{distanzabordosinistro} \setinterfacecommand{leftedgewidth}{ampiezzabordosinistro} \setinterfacecommand{leftmargindistance}{distanzamarginesinistro} \setinterfacecommand{leftmarginwidth}{ampiezzamarginesinistro} \setinterfacecommand{leg}{leg} \setinterfacecommand{linewidth}{spessoreriga} \setinterfacecommand{listheight}{altezzaelenco} \setinterfacecommand{listlength}{lunghezzaelenco} \setinterfacecommand{listsymbol}{listsymbol} \setinterfacecommand{listwidth}{ampiezzaelenco} \setinterfacecommand{logfields}{logcampi} \setinterfacecommand{lohi}{pedap} \setinterfacecommand{low}{ped} \setinterfacecommand{macroname}{nome} \setinterfacecommand{mainlanguage}{linguaprincipale} \setinterfacecommand{makeupheight}{altezzamakeup} \setinterfacecommand{makeupwidth}{ampiezzamakeup} \setinterfacecommand{mar}{mar} \setinterfacecommand{margindistance}{distanzamargine} \setinterfacecommand{marginrule}{lineamargine} \setinterfacecommand{margintext}{testoinmargine} \setinterfacecommand{margintitle}{titoloinmargine} \setinterfacecommand{marginwidth}{ampiezzamargine} \setinterfacecommand{marginword}{parolainmargine} \setinterfacecommand{marking}{marcatura} \setinterfacecommand{markversion}{marcaversione} \setinterfacecommand{mathematics}{matematica} \setinterfacecommand{menubutton}{pulsantemenu} \setinterfacecommand{mframed}{maframed} \setinterfacecommand{midaligned}{allineacentro} \setinterfacecommand{mirror}{riflessione} \setinterfacecommand{month}{mese} \setinterfacecommand{moveformula}{spostaformula} \setinterfacecommand{moveongrid}{spostaagriglia} \setinterfacecommand{movesidefloat}{movesidefloat} \setinterfacecommand{navigating}{navigating} \setinterfacecommand{nodimension}{nientedimensioni} \setinterfacecommand{noheaderandfooterlines}{nientelineintestazionepdp} \setinterfacecommand{noindenting}{nienterientro} \setinterfacecommand{nolist}{nienteelenco} \setinterfacecommand{nomarking}{nientemarcatura} \setinterfacecommand{nomoreblocks}{bastablocchi} \setinterfacecommand{nomorefiles}{bastafile} \setinterfacecommand{nop}{nop} \setinterfacecommand{nospace}{nientespazio} \setinterfacecommand{note}{nota} \setinterfacecommand{notopandbottomlines}{nientelineecimafondo} \setinterfacecommand{notsmallcapped}{nocap} \setinterfacecommand{nowhitespace}{nientespaziobianco} \setinterfacecommand{numberofsubpages}{numberofsubpages} \setinterfacecommand{numbers}{numeri} \setinterfacecommand{outeredgedistance}{outeredgedistance} \setinterfacecommand{outeredgewidth}{outeredgewidth} \setinterfacecommand{outermargindistance}{outermargindistance} \setinterfacecommand{outermarginwidth}{outermarginwidth} \setinterfacecommand{packed}{impaccato} \setinterfacecommand{page}{pagina} \setinterfacecommand{pagedepth}{pagedepth} \setinterfacecommand{pagenumber}{numeropagina} \setinterfacecommand{pageoffset}{pageoffset} \setinterfacecommand{pagereference}{riferimentopagina} \setinterfacecommand{paperheight}{altezzacarta} \setinterfacecommand{paperwidth}{ampiezzacarta} \setinterfacecommand{periods}{punti} \setinterfacecommand{plaatsruwelijst}{placerawlist} \setinterfacecommand{placebookmarks}{mettisegnalibro} \setinterfacecommand{placecombinedlist}{mettielencocombinato} \setinterfacecommand{placefloat}{placefloat} \setinterfacecommand{placefootnotes}{mettinotepdp} \setinterfacecommand{placeformula}{mettiformula} \setinterfacecommand{placeheadnumber}{posizionanumerotesta} \setinterfacecommand{placeheadtext}{posizionatestotesta} \setinterfacecommand{placelegend}{mettilegenda} \setinterfacecommand{placelist}{mettielenco} \setinterfacecommand{placelocalfootnotes}{mettinotepdplocali} \setinterfacecommand{placelogos}{mettiloghi} \setinterfacecommand{placeongrid}{mettiingriglia} \setinterfacecommand{placeontopofeachother}{mettiunosullaltro} \setinterfacecommand{placepagenumber}{mettinumeropagina} \setinterfacecommand{placereferencelist}{placereferencelist} \setinterfacecommand{placeregister}{mettiregistro} \setinterfacecommand{placerule}{mettilinea} \setinterfacecommand{placesidebyside}{mettifiancoafianco} \setinterfacecommand{placesubformula}{mettisottoformula} \setinterfacecommand{placetextvariable}{mettivariabiletesto} \setinterfacecommand{position}{posizione} \setinterfacecommand{positiontext}{posizionatesto} \setinterfacecommand{printpaperheight}{altezzacartastampa} \setinterfacecommand{printpaperwidth}{ampiezzacartastampa} \setinterfacecommand{processblocks}{elaborablocchi} \setinterfacecommand{processpage}{elaborapagina} \setinterfacecommand{product}{prodotto} \setinterfacecommand{program}{programma} \setinterfacecommand{project}{progetto} \setinterfacecommand{publication}{pubblicazione} \setinterfacecommand{quotation}{citazione} \setinterfacecommand{quote}{menzione} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{rifai} \setinterfacecommand{ref}{rif} \setinterfacecommand{reference}{riferimento} \setinterfacecommand{referral}{referral} \setinterfacecommand{referraldate}{datareferral} \setinterfacecommand{referring}{referring} \setinterfacecommand{remark}{commento} \setinterfacecommand{reset}{reimposta} \setinterfacecommand{resetmarking}{reimpostamarcatura} \setinterfacecommand{resetnumber}{resetnumber} \setinterfacecommand{resettext}{resettextcontent} \setinterfacecommand{rightaligned}{allineadestra} \setinterfacecommand{rightedgedistance}{distanzabordodestro} \setinterfacecommand{rightedgewidth}{ampiezzabordodestro} \setinterfacecommand{rightmargindistance}{distanzamarginedestro} \setinterfacecommand{rightmarginwidth}{ampiezzamarginedestro} \setinterfacecommand{romannumerals}{numeriromani} \setinterfacecommand{rotate}{ruota} \setinterfacecommand{scale}{scala} \setinterfacecommand{screen}{schermo} \setinterfacecommand{selectblocks}{selezionablocchi} \setinterfacecommand{selectpaper}{selezionacarta} \setinterfacecommand{selectversion}{selezionaversione} \setinterfacecommand{setnumber}{setnumber} \setinterfacecommand{settextcontent}{settext} \setinterfacecommand{settextvariable}{setvariabiletesto} \setinterfacecommand{setupalign}{impostaallineamento} \setinterfacecommand{setupanswerarea}{setupanswerarea} \setinterfacecommand{setuparranging}{impostaparranging} \setinterfacecommand{setupbackground}{impostasfondo} \setinterfacecommand{setupbackgrounds}{impostasfondi} \setinterfacecommand{setupblackrules}{impostalineenere} \setinterfacecommand{setupblank}{impostarigovuoto} \setinterfacecommand{setupblock}{impostablocco} \setinterfacecommand{setupbodyfont}{impostafontdeltesto} \setinterfacecommand{setupbodyfontenvironment}{impostaambientefontdeltesto} \setinterfacecommand{setupbottom}{impostafondo} \setinterfacecommand{setupbottomtexts}{impostatestifondo} \setinterfacecommand{setupbuffer}{impostabuffer} \setinterfacecommand{setupbuttons}{impostapulsanti} \setinterfacecommand{setupcapitals}{impostamaiuscole} \setinterfacecommand{setupcaption}{impostacaption} \setinterfacecommand{setupcaptions}{impostacaptions} \setinterfacecommand{setupclipping}{impostaclippling} \setinterfacecommand{setupcolor}{impostacolore} \setinterfacecommand{setupcolors}{impostacolori} \setinterfacecommand{setupcolumns}{impostacolonne} \setinterfacecommand{setupcolumnset}{impostagruppocolonne} \setinterfacecommand{setupcolumnsetlines}{setupcolumnsetlines} \setinterfacecommand{setupcolumnsetstart}{setupcolumnsetstart} \setinterfacecommand{setupcombinations}{impostacombinazioni} \setinterfacecommand{setupcombinedlist}{impostaelencocombinato} \setinterfacecommand{setupcomment}{impostacommento} \setinterfacecommand{setupdescriptions}{impostadescrizioni} \setinterfacecommand{setupenumerations}{impostaenumerazioni} \setinterfacecommand{setupexternalfigures}{impostafigureesterne} \setinterfacecommand{setupfield}{impostacampo} \setinterfacecommand{setupfields}{impostacampi} \setinterfacecommand{setupfillinlines}{impostarigheriempimento} \setinterfacecommand{setupfillinrules}{impostalineeriempimento} \setinterfacecommand{setupfloat}{impostaoggettomobile} \setinterfacecommand{setupfloats}{impostaoggettimobili} \setinterfacecommand{setupfloatsplitting}{impostaspezzamentooggettomobile} \setinterfacecommand{setupfooter}{impostapdp} \setinterfacecommand{setupfootertexts}{impostatestipdp} \setinterfacecommand{setupfootnotedefinition}{impostadefinizionenotepdp} \setinterfacecommand{setupfootnotes}{impostanotepdp} \setinterfacecommand{setupforms}{impostaforms} \setinterfacecommand{setupformulas}{impostaformule} \setinterfacecommand{setupframed}{impostaincorniciato} \setinterfacecommand{setupframedtexts}{impostatestiincorniciati} \setinterfacecommand{setuphead}{impostatesta} \setinterfacecommand{setupheader}{impostainstestazione} \setinterfacecommand{setupheadertexts}{impostatestiintestazioni} \setinterfacecommand{setupheadnumber}{impostanumerotesta} \setinterfacecommand{setupheads}{impostateste} \setinterfacecommand{setupheadtext}{impostatestointestazioni} \setinterfacecommand{setuphyphenmark}{impostasegnosillabazione} \setinterfacecommand{setupindentedtext}{setupindentedtext} \setinterfacecommand{setupindenting}{impostarientro} \setinterfacecommand{setupinmargin}{impostainmargine} \setinterfacecommand{setupinteraction}{impostainterazione} \setinterfacecommand{setupinteractionbar}{impostabarrainterazione} \setinterfacecommand{setupinteractionmenu}{impostamenuinterazione} \setinterfacecommand{setupinteractionscreen}{impostaschermointerazione} \setinterfacecommand{setupinterlinespace}{impostainterlinea} \setinterfacecommand{setupitemgroup}{setupitemgroup} \setinterfacecommand{setupitemgroups}{impostaelencazioni} \setinterfacecommand{setupitems}{impostaelementi} \setinterfacecommand{setuplabeltext}{impostatestoetichette} \setinterfacecommand{setuplanguage}{impostalingua} \setinterfacecommand{setuplayout}{impostalayout} \setinterfacecommand{setuplegend}{impostalegenda} \setinterfacecommand{setuplinenumbering}{impostanumerazionerighe} \setinterfacecommand{setuplines}{impostarighe} \setinterfacecommand{setuplinewidth}{impostaampiezzariga} \setinterfacecommand{setuplist}{impostaelenco} \setinterfacecommand{setupmakeup}{impostamakeup} \setinterfacecommand{setupmarginblocks}{impostablocchimargine} \setinterfacecommand{setupmarginrules}{impostalineemargine} \setinterfacecommand{setupmarking}{impostamarcatura} \setinterfacecommand{setupmathalignment}{setupmathalignment} \setinterfacecommand{setupnarrower}{impostapiustretto} \setinterfacecommand{setupnumber}{impostanumerazione} \setinterfacecommand{setupnumbering}{impostanumerazione} \setinterfacecommand{setupoppositeplacing}{impostaposizionamentoopposti} \setinterfacecommand{setupoutput}{impostaoutput} \setinterfacecommand{setuppagecomment}{impostacommentopagina} \setinterfacecommand{setuppagenumber}{impostanumeropagina} \setinterfacecommand{setuppagenumbering}{impostanumerazionepagina} \setinterfacecommand{setuppagetransitions}{impostatransizionepagina} \setinterfacecommand{setuppalet}{impostatavolozza} \setinterfacecommand{setuppaper}{setuppaper} \setinterfacecommand{setuppapersize}{impostadimensionicarta} \setinterfacecommand{setupparagraphnumbering}{impostanumerazionecapoversi} \setinterfacecommand{setupparagraphs}{impostacapoversi} \setinterfacecommand{setupplacement}{setupplacement} \setinterfacecommand{setuppositioning}{impostaposizionamento} \setinterfacecommand{setupprofiles}{impostaprofili} \setinterfacecommand{setupprograms}{impostaprogrammi} \setinterfacecommand{setuppublications}{impostapubblicazioni} \setinterfacecommand{setupquote}{impostamenzione} \setinterfacecommand{setupreferencelist}{impostalistariferimenti} \setinterfacecommand{setupreferencing}{impostariferimento} \setinterfacecommand{setupregister}{impostaregistro} \setinterfacecommand{setuprotate}{impostarotazione} \setinterfacecommand{setuprule}{impostalinea} \setinterfacecommand{setups}{impostazioni} \setinterfacecommand{setupscreens}{impostaschermi} \setinterfacecommand{setupsection}{impostasezione} \setinterfacecommand{setupsectionblock}{impostabloccosezione} \setinterfacecommand{setupsorting}{impostaordinamento} \setinterfacecommand{setupspacing}{impostaspaziatura} \setinterfacecommand{setupstartstop}{impostainiziatermina} \setinterfacecommand{setupstrut}{impostastrut} \setinterfacecommand{setupsubpagenumber}{impostanumerosottopagina} \setinterfacecommand{setupsymbolset}{impostasetsimboli} \setinterfacecommand{setupsynchronization}{impostasincronizzazione} \setinterfacecommand{setupsynchronizationbar}{impostabarrasincronizzazione} \setinterfacecommand{setupsynonyms}{impostasinonimi} \setinterfacecommand{setupsystem}{impostasistema} \setinterfacecommand{setuptab}{impostatab} \setinterfacecommand{setuptables}{impostatabelle} \setinterfacecommand{setuptabulate}{impostatabulato} \setinterfacecommand{setuptext}{impostatesto} \setinterfacecommand{setuptextposition}{impostaposizionetesto} \setinterfacecommand{setuptextrules}{impostalineetesto} \setinterfacecommand{setuptexttexts}{impostatestotesti} \setinterfacecommand{setuptextvariable}{impostavariabiletesto} \setinterfacecommand{setupthinrules}{impostalineesottili} \setinterfacecommand{setuptolerance}{impostatolleranza} \setinterfacecommand{setuptop}{impostacima} \setinterfacecommand{setuptoptexts}{impostatesticima} \setinterfacecommand{setuptype}{impostatype} \setinterfacecommand{setuptyping}{impostatyping} \setinterfacecommand{setupunderbar}{impostasottolinea} \setinterfacecommand{setupurl}{impostaurl} \setinterfacecommand{setupversions}{impostaversioni} \setinterfacecommand{setupwhitespace}{impostaspaziobianco} \setinterfacecommand{showbodyfont}{mostrafontdeltesto} \setinterfacecommand{showbodyfontenvironment}{mostraambientefontdeltesto} \setinterfacecommand{showcolor}{mostracolore} \setinterfacecommand{showcolorgroup}{mostragruppocolori} \setinterfacecommand{showexternalfigures}{mostrafiguresterne} \setinterfacecommand{showfields}{mostracampi} \setinterfacecommand{showframe}{mostracornice} \setinterfacecommand{showgrid}{mostragriglia} \setinterfacecommand{showlayout}{mostralyout} \setinterfacecommand{showmakeup}{mostramakeup} \setinterfacecommand{showpalet}{mostratavolozza} \setinterfacecommand{showprint}{mostrastampa} \setinterfacecommand{showsetups}{mostraimpostazioni} \setinterfacecommand{showstruts}{mostrastruts} \setinterfacecommand{showsymbolset}{mostrasetsimboli} \setinterfacecommand{smallcapped}{cap} \setinterfacecommand{someline}{qualcheriga} \setinterfacecommand{somewhere}{daqualcheparte} \setinterfacecommand{space}{spazio} \setinterfacecommand{splitfloat}{spezzaoggettomobile} \setinterfacecommand{startalignment}{iniziaallineamento} \setinterfacecommand{startbackground}{iniziasfondo} \setinterfacecommand{startcoding}{iniziacodifica} \setinterfacecommand{startcolor}{iniziacolore} \setinterfacecommand{startcolumnmakeup}{startcolumnmakeup} \setinterfacecommand{startcolumns}{iniziacolonne} \setinterfacecommand{startcolumnset}{iniziagruppocolonne} \setinterfacecommand{startcombination}{iniziacombinazione} \setinterfacecommand{startcomponent}{iniziacomponente} \setinterfacecommand{startdocument}{iniziadocumento} \setinterfacecommand{startenvironment}{iniziaambiente} \setinterfacecommand{startfigure}{iniziafigura} \setinterfacecommand{startglobal}{iniziaglobale} \setinterfacecommand{startline}{iniziariga} \setinterfacecommand{startlinecorrection}{iniziacorrezioneriga} \setinterfacecommand{startlinenumbering}{inizianumerazionerighe} \setinterfacecommand{startlines}{iniziarighe} \setinterfacecommand{startlocal}{inizialocale} \setinterfacecommand{startlocalfootnotes}{inizianotepdplocali} \setinterfacecommand{startmakeup}{iniziamakeup} \setinterfacecommand{startmarginblock}{iniziabloccomargine} \setinterfacecommand{startmarginrule}{inizialineamargine} \setinterfacecommand{startnarrower}{iniziapiustretto} \setinterfacecommand{startopposite}{iniziaopposto} \setinterfacecommand{startoverlay}{iniziasovrapposizione} \setinterfacecommand{startoverzicht}{iniziaoverview} \setinterfacecommand{startpacked}{iniziaimpaccato} \setinterfacecommand{startpositioning}{iniziaposizionamento} \setinterfacecommand{startproduct}{iniziaprodotto} \setinterfacecommand{startprofile}{iniziaprofilo} \setinterfacecommand{startproject}{iniziaprogetto} \setinterfacecommand{startquotation}{iniziacitazione} \setinterfacecommand{startraster}{iniziaraster} \setinterfacecommand{startsymbolset}{iniziasetsimboli} \setinterfacecommand{startsynchronization}{iniziasincronizzazione} \setinterfacecommand{starttable}{iniziatabella} \setinterfacecommand{starttables}{iniziatabelle} \setinterfacecommand{starttext}{iniziatesto} \setinterfacecommand{starttextrule}{inizialineatesto} \setinterfacecommand{startunpacked}{iniziaunpacked} \setinterfacecommand{startversion}{iniziaversione} \setinterfacecommand{stopalignment}{terminaallineamento} \setinterfacecommand{stopbackground}{terminasfondo} \setinterfacecommand{stopcoding}{terminacodifica} \setinterfacecommand{stopcolor}{terminacolore} \setinterfacecommand{stopcolumnmakeup}{stopcolumnmakeup} \setinterfacecommand{stopcolumns}{terminacolonne} \setinterfacecommand{stopcolumnset}{terminagruppocolonne} \setinterfacecommand{stopcombination}{terminacombinazione} \setinterfacecommand{stopcomponent}{terminacomponente} \setinterfacecommand{stopdocument}{terminadocumento} \setinterfacecommand{stopenvironment}{terminaambiente} \setinterfacecommand{stopglobal}{terminaglobale} \setinterfacecommand{stopline}{terminariga} \setinterfacecommand{stoplinecorrection}{terminacorrezioneriga} \setinterfacecommand{stoplinenumbering}{terminanumerazionerighe} \setinterfacecommand{stoplines}{terminarighe} \setinterfacecommand{stoplocal}{terminalocale} \setinterfacecommand{stoplocalfootnotes}{terminanotepdplocali} \setinterfacecommand{stopmakeup}{terminamakeup} \setinterfacecommand{stopmarginblock}{terminabloccomargine} \setinterfacecommand{stopmarginrule}{terminalineamargine} \setinterfacecommand{stopnarrower}{terminapiustretto} \setinterfacecommand{stopopposite}{terminaopposto} \setinterfacecommand{stopoverlay}{terminasovrapposizione} \setinterfacecommand{stopoverzicht}{terminaoverview} \setinterfacecommand{stoppacked}{terminaimpaccato} \setinterfacecommand{stoppositioning}{terminaposizionamento} \setinterfacecommand{stopproduct}{terminaprodotto} \setinterfacecommand{stopprofile}{terminaprofili} \setinterfacecommand{stopproject}{terminaprogetto} \setinterfacecommand{stopquotation}{terminacitazione} \setinterfacecommand{stopraster}{terminaraster} \setinterfacecommand{stopsynchronization}{terminasincronizzazione} \setinterfacecommand{stoptable}{terminatabella} \setinterfacecommand{stoptables}{terminatabelle} \setinterfacecommand{stoptext}{terminatesto} \setinterfacecommand{stoptextrule}{terminalineatesto} \setinterfacecommand{stopunpacked}{terminaunpacked} \setinterfacecommand{stopversion}{terminaversioni} \setinterfacecommand{stretched}{stirato} \setinterfacecommand{subformulanumber}{numerosottoformula} \setinterfacecommand{subpagenumber}{subpagenumber} \setinterfacecommand{switchtobodyfont}{cambiaafontdeltesto} \setinterfacecommand{switchtorawfont}{passaafontgrezzo} \setinterfacecommand{sym}{sim} \setinterfacecommand{symbol}{simbolo} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{barrasincronizzazione} \setinterfacecommand{synchronize}{sincronizza} \setinterfacecommand{tab}{tab} \setinterfacecommand{testcolumn}{testcolumn} \setinterfacecommand{testpage}{testpage} \setinterfacecommand{tex}{tex} \setinterfacecommand{textheight}{altezzatesto} \setinterfacecommand{textreference}{riferimentotesto} \setinterfacecommand{textrule}{lineatesto} \setinterfacecommand{textvariable}{variabiletesto} \setinterfacecommand{textwidth}{ampiezzatesto} \setinterfacecommand{thinrule}{lineasottile} \setinterfacecommand{thinrules}{lineesottili} \setinterfacecommand{tooltip}{tooltip} \setinterfacecommand{topdistance}{distanzacima} \setinterfacecommand{topheight}{altezzacima} \setinterfacecommand{topspace}{spaziocima} \setinterfacecommand{totalnumberofpages}{numerototaledipagine} \setinterfacecommand{translate}{traduci} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{typ} \setinterfacecommand{type}{type} \setinterfacecommand{typebuffer}{typebuffer} \setinterfacecommand{typefile}{typefile} \setinterfacecommand{unitmeaning}{nomeunita} \setinterfacecommand{unknown}{ignoto} \setinterfacecommand{useJSscripts}{usaJSscripts} \setinterfacecommand{useURL}{usaURL} \setinterfacecommand{useXMLfilter}{useXMLfilter} \setinterfacecommand{useblocks}{usablocco} \setinterfacecommand{usecommands}{usacomandi} \setinterfacecommand{useencoding}{usacodifica} \setinterfacecommand{useexternaldocument}{usadocumentoesterno} \setinterfacecommand{useexternalfigure}{usafiguraesterna} \setinterfacecommand{useexternalfile}{usafileesterno} \setinterfacecommand{useexternalfiles}{usafileesterni} \setinterfacecommand{useexternalsoundtrack}{usacolonnasonoraesterna} \setinterfacecommand{usemodule}{usamodulo} \setinterfacecommand{usemodules}{usamoduli} \setinterfacecommand{usepath}{usacartella} \setinterfacecommand{usereferences}{usariferimenti} \setinterfacecommand{usespecials}{usaspecialita} \setinterfacecommand{usesymbols}{usasimboli} \setinterfacecommand{usetypescript}{usetypescript} \setinterfacecommand{usetypescriptfile}{usetypescriptfile} \setinterfacecommand{useurl}{usaurl} \setinterfacecommand{version}{versione} \setinterfacecommand{vl}{vl} \setinterfacecommand{weekday}{giornosettimana} \setinterfacecommand{whitespace}{spaziobianco} \setinterfacecommand{wordright}{paroladestra} \setinterfacecommand{writebetweenlist}{scrividentroelenco} \setinterfacecommand{writetolist}{scriviinelenco} \setinterfacecommand{writetoreferencelist}{scriviinlistariferimenti} \setinterfacecommand{writetoregister}{scriviinregistro} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-tex.lua0000644000175000017500000014130212130411274024142 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-tex'] = { version = 1.001, comment = "companion to lxml-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Because we split and resolve entities we use the direct printing -- interface and not the context one. If we ever do that there will -- be an cldf-xml helper library. local utfchar = utf.char local concat, insert, remove = table.concat, table.insert, table.remove local format, sub, gsub, find, gmatch, match = string.format, string.sub, string.gsub, string.find, string.gmatch, string.match local type, next, tonumber, tostring, select = type, next, tonumber, tostring, select local lpegmatch = lpeg.match local P, S, C, Cc = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc local tex, xml = tex, xml local lowerchars, upperchars, lettered = characters.lower, characters.upper, characters.lettered lxml = lxml or { } local lxml = lxml local catcodenumbers = catcodes.numbers local ctxcatcodes = catcodenumbers.ctxcatcodes -- todo: use different method local notcatcodes = catcodenumbers.notcatcodes -- todo: use different method local context = context local contextsprint = context.sprint -- with catcodes (here we use fast variants, but with option for tracing) local xmlelements, xmlcollected, xmlsetproperty = xml.elements, xml.collected, xml.setproperty local xmlwithelements = xml.withelements local xmlserialize, xmlcollect, xmltext, xmltostring = xml.serialize, xml.collect, xml.text, xml.tostring local xmlapplylpath = xml.applylpath local xmlunprivatized, xmlprivatetoken, xmlprivatecodes = xml.unprivatized, xml.privatetoken, xml.privatecodes local variables = (interfaces and interfaces.variables) or { } local insertbeforevalue, insertaftervalue = utilities.tables.insertbeforevalue, utilities.tables.insertaftervalue local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming local trace_setups = false trackers.register("lxml.setups", function(v) trace_setups = v end) local trace_loading = false trackers.register("lxml.loading", function(v) trace_loading = v end) local trace_access = false trackers.register("lxml.access", function(v) trace_access = v end) local trace_comments = false trackers.register("lxml.comments", function(v) trace_comments = v end) local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end) local report_lxml = logs.reporter("xml","tex") local report_xml = logs.reporter("xml","tex") local forceraw, rawroot = false, nil -- tex entities -- -- todo: unprivatize attributes lxml.entities = lxml.entities or { } storage.register("lxml/entities",lxml.entities,"lxml.entities") --~ xml.placeholders.unknown_any_entity = nil -- has to be per xml local xmlentities = xml.entities local texentities = lxml.entities local parsedentity = xml.parsedentitylpeg function lxml.registerentity(key,value) texentities[key] = value if trace_entities then report_xml("registering tex entity %a as %a",key,value) end end function lxml.resolvedentity(str) if forceraw then if trace_entities then report_xml("passing entity %a as &%s;",str,str) end context("&%s;",str) else local e = texentities[str] if e then local te = type(e) if te == "function" then if trace_entities then report_xml("passing entity %a using function",str) end e(str) elseif e then if trace_entities then report_xml("passing entity %a as %a using %a",str,e,"ctxcatcodes") end context(e) end return end local e = xmlentities[str] if e then local te = type(e) if te == "function" then e = e(str) end if e then if trace_entities then report_xml("passing entity %a as %a using %a",str,e,"notcatcodes") end contextsprint(notcatcodes,e) return end end -- resolve hex and dec, todo: escape # & etc for ctxcatcodes -- normally this is already solved while loading the file local chr, err = lpegmatch(parsedentity,str) if chr then if trace_entities then report_xml("passing entity %a as %a using %a",str,chr,"ctxcatcodes") end context(chr) elseif err then if trace_entities then report_xml("passing faulty entity %a as %a",str,err) end context(err) else local tag = upperchars(str) if trace_entities then report_xml("passing entity %a to \\xmle using tag %a",str,tag) end context.xmle(str,tag) -- we need to use our own upper end end end -- tex interface lxml.loaded = lxml.loaded or { } local loaded = lxml.loaded -- print(contextdirective("context-mathml-directive function reduction yes ")) -- print(contextdirective("context-mathml-directive function ")) xml.defaultprotocol = "tex" local finalizers = xml.finalizers finalizers.xml = finalizers.xml or { } finalizers.tex = finalizers.tex or { } local xmlfinalizers = finalizers.xml local texfinalizers = finalizers.tex -- serialization with entity handling local ampersand = P("&") local semicolon = P(";") local entity = ampersand * C((1-semicolon)^1) * semicolon / lxml.resolvedentity -- context.bold local _, xmltextcapture = context.newtexthandler { exception = entity, catcodes = notcatcodes, } local _, xmlspacecapture = context.newtexthandler { endofline = context.xmlcdataobeyedline, emptyline = context.xmlcdataobeyedline, simpleline = context.xmlcdataobeyedline, space = context.xmlcdataobeyedspace, exception = entity, catcodes = notcatcodes, } local _, xmllinecapture = context.newtexthandler { endofline = context.xmlcdataobeyedline, emptyline = context.xmlcdataobeyedline, simpleline = context.xmlcdataobeyedline, exception = entity, catcodes = notcatcodes, } local _, ctxtextcapture = context.newtexthandler { exception = entity, catcodes = ctxcatcodes, } -- cdata local toverbatim = context.newverbosehandler { line = context.xmlcdataobeyedline, space = context.xmlcdataobeyedspace, before = context.xmlcdatabefore, after = context.xmlcdataafter, } lxml.toverbatim = context.newverbosehandler { line = context.xmlcdataobeyedline, space = context.xmlcdataobeyedspace, before = context.xmlcdatabefore, after = context.xmlcdataafter, strip = true, } -- raw flushing function lxml.startraw() forceraw = true end function lxml.stopraw() forceraw = false end function lxml.rawroot() return rawroot end -- storage function lxml.store(id,root,filename) loaded[id] = root xmlsetproperty(root,"name",id) if filename then xmlsetproperty(root,"filename",filename) end end local splitter = lpeg.splitat("::") lxml.idsplitter = splitter function lxml.splitid(id) local d, i = lpegmatch(splitter,id) if d then return d, i else return "", id end end local function getid(id, qualified) if id then local lid = loaded[id] if lid then return lid elseif type(id) == "table" then return id else local d, i = lpegmatch(splitter,id) if d then local ld = loaded[d] if ld then local ldi = ld.index if ldi then local root = ldi[tonumber(i)] if root then if qualified then -- we need this else two args that confuse others return root, d else return root end elseif trace_access then report_lxml("%a has no index entry %a",d,i) end elseif trace_access then report_lxml("%a has no index",d) end elseif trace_access then report_lxml("%a is not loaded",d) end elseif trace_access then report_lxml("%a is not loaded",i) end end elseif trace_access then report_lxml("invalid id (nil)") end end lxml.id = getid -- we provide two names as locals can already use such lxml.getid = getid -- names and we don't want clashes function lxml.root(id) return loaded[id] end -- index local nofindices = 0 local function addindex(name,check_sum,force) local root = getid(name) if root and (not root.index or force) then -- weird, only called once local n, index, maxindex, check = 0, root.index or { }, root.maxindex or 0, root.check or { } local function nest(root) local dt = root.dt if not root.ix then maxindex = maxindex + 1 root.ix = maxindex check[maxindex] = root.tg -- still needed ? index[maxindex] = root n = n + 1 end if dt then for k=1,#dt do local dk = dt[k] if type(dk) == "table" then nest(dk) end end end end nest(root) nofindices = nofindices + n -- if type(name) ~= "string" then name = "unknown" end root.index = index root.maxindex = maxindex if trace_access then report_lxml("indexed entries %a, found nodes %a",tostring(name),maxindex) end end end lxml.addindex = addindex -- another cache local function lxmlapplylpath(id,pattern) -- better inline, saves call return xmlapplylpath(getid(id),pattern) end lxml.filter = lxmlapplylpath function lxml.filterlist(list,pattern) for s in gmatch(list,"[^, ]+") do -- we could cache a table xmlapplylpath(getid(s),pattern) end end function lxml.applyfunction(id,name) local f = xml.functions[name] return f and f(getid(id)) end -- rather new, indexed storage (backward refs), maybe i will merge this function lxml.checkindex(name) local root = getid(name) return (root and root.index) or 0 end function lxml.withindex(name,n,command) -- will change as name is always there now local i, p = lpegmatch(splitter,n) if p then contextsprint(ctxcatcodes,"\\xmlw{",command,"}{",n,"}") else contextsprint(ctxcatcodes,"\\xmlw{",command,"}{",name,"::",n,"}") end end function lxml.getindex(name,n) -- will change as name is always there now local i, p = lpegmatch(splitter,n) if p then contextsprint(ctxcatcodes,n) else contextsprint(ctxcatcodes,name,"::",n) end end -- loading (to be redone, no overload) .. best use different methods and -- keep raw xml (at least as option) xml.originalload = xml.originalload or xml.load local noffiles, nofconverted = 0, 0 function xml.load(filename,settings) noffiles, nofconverted = noffiles + 1, nofconverted + 1 starttiming(xml) local ok, data = resolvers.loadbinfile(filename) settings = settings or { } settings.currentresource = filename local xmltable = xml.convert((ok and data) or "",settings) settings.currentresource = nil stoptiming(xml) return xmltable end local function entityconverter(id,str) return xmlentities[str] or xmlprivatetoken(str) or "" -- roundtrip handler end function lxml.convert(id,data,entities,compress,currentresource) local settings = { -- we're now roundtrip anyway unify_predefined_entities = true, utfize_entities = true, resolve_predefined_entities = true, resolve_entities = function(str) return entityconverter(id,str) end, -- needed for mathml currentresource = tostring(currentresource or id), } if compress and compress == variables.yes then settings.strip_cm_and_dt = true end -- if entities and entities == variables.yes then -- settings.utfize_entities = true -- -- settings.resolve_entities = function (str) return entityconverter(id,str) end -- end return xml.convert(data,settings) end function lxml.load(id,filename,compress,entities) filename = commands.preparedfile(filename) -- not commands! if trace_loading then report_lxml("loading file %a as %a",filename,id) end noffiles, nofconverted = noffiles + 1, nofconverted + 1 -- local xmltable = xml.load(filename) starttiming(xml) local ok, data = resolvers.loadbinfile(filename) local xmltable = lxml.convert(id,(ok and data) or "",compress,entities,format("id: %s, file: %s",id,filename)) stoptiming(xml) lxml.store(id,xmltable,filename) return xmltable, filename end function lxml.register(id,xmltable,filename) lxml.store(id,xmltable,filename) return xmltable end function lxml.include(id,pattern,attribute,recurse) starttiming(xml) local root = getid(id) xml.include(root,pattern,attribute,recurse,function(filename) if filename then filename = commands.preparedfile(filename) if file.dirname(filename) == "" and root.filename then local dn = file.dirname(root.filename) if dn ~= "" then filename = file.join(dn,filename) end end if trace_loading then report_lxml("including file %a",filename) end noffiles, nofconverted = noffiles + 1, nofconverted + 1 return resolvers.loadtexfile(filename) or "" else return "" end end) stoptiming(xml) end function xml.getbuffer(name,compress,entities) -- we need to make sure that commands are processed if not name or name == "" then name = tex.jobname end nofconverted = nofconverted + 1 local data = buffers.getcontent(name) xmltostring(lxml.convert(name,data,compress,entities,format("buffer: %s",tostring(name or "?")))) -- one buffer end function lxml.loadbuffer(id,name,compress,entities) starttiming(xml) nofconverted = nofconverted + 1 local data = buffers.collectcontent(name or id) -- name can be list local xmltable = lxml.convert(id,data,compress,entities,format("buffer: %s",tostring(name or id or "?"))) lxml.store(id,xmltable) stoptiming(xml) return xmltable, name or id end function lxml.loaddata(id,str,compress,entities) starttiming(xml) nofconverted = nofconverted + 1 local xmltable = lxml.convert(id,str or "",compress,entities,format("id: %s",id)) lxml.store(id,xmltable) stoptiming(xml) return xmltable, id end function lxml.loadregistered(id) return loaded[id], id end -- e.command: -- -- string : setup -- true : text (no ) -- false : ignore -- function : call local function tex_doctype(e,handlers) -- ignore end local function tex_comment(e,handlers) if trace_comments then report_lxml("comment %a",e.dt[1]) end end local default_element_handler = xml.gethandlers("verbose").functions["@el@"] local function tex_element(e,handlers) local command = e.command if command == nil then default_element_handler(e,handlers) elseif command == true then -- text (no ) / so, no mkii fallback then handlers.serialize(e.dt,handlers) elseif command == false then -- ignore else local tc = type(command) if tc == "string" then local rootname, ix = e.name, e.ix if rootname then if not ix then addindex(rootname,false,true) ix = e.ix end -- faster than context.xmlw contextsprint(ctxcatcodes,"\\xmlw{",command,"}{",rootname,"::",ix,"}") else report_lxml("fatal error: no index for %a",command) contextsprint(ctxcatcodes,"\\xmlw{",command,"}{",ix or 0,"}") end elseif tc == "function" then command(e) end end end local pihandlers = { } xml.pihandlers = pihandlers local category = P("context-") * C((1-P("-"))^1) * P("-directive") local space = S(" \n\r") local spaces = space^0 local class = C((1-space)^0) local key = class local value = C(P(1-(space * -1))^0) local parser = category * spaces * class * spaces * key * spaces * value pihandlers[#pihandlers+1] = function(str) if str then local a, b, c, d = lpegmatch(parser,str) if d then contextsprint(ctxcatcodes,"\\xmlcontextdirective{",a,"}{",b,"}{",c,"}{",d,"}") end end end local function tex_pi(e,handlers) local str = e.dt[1] for i=1,#pihandlers do pihandlers[i](str) end end local obeycdata = true function lxml.setcdata() obeycdata = true end function lxml.resetcdata() obeycdata = false end local function tex_cdata(e,handlers) if obeycdata then toverbatim(e.dt[1]) end end local function tex_text(e) e = xmlunprivatized(e) lpegmatch(xmltextcapture,e) end local function ctx_text(e) -- can be just context(e) as we split there lpegmatch(ctxtextcapture,e) end local function tex_handle(...) contextsprint(ctxcatcodes,...) -- notcatcodes is active anyway end local xmltexhandler = xml.newhandlers { name = "tex", handle = tex_handle, functions = { -- ["@dc@"] = tex_document, ["@dt@"] = tex_doctype, -- ["@rt@"] = tex_root, ["@el@"] = tex_element, ["@pi@"] = tex_pi, ["@cm@"] = tex_comment, ["@cd@"] = tex_cdata, ["@tx@"] = tex_text, } } lxml.xmltexhandler = xmltexhandler -- begin of test local function tex_space(e) e = xmlunprivatized(e) lpegmatch(xmlspacecapture,e) end local xmltexspacehandler = xml.newhandlers { name = "texspace", handle = tex_handle, functions = { ["@dt@"] = tex_doctype, ["@el@"] = tex_element, ["@pi@"] = tex_pi, ["@cm@"] = tex_comment, ["@cd@"] = tex_cdata, ["@tx@"] = tex_space, } } local function tex_line(e) e = xmlunprivatized(e) lpegmatch(xmllinecapture,e) end local xmltexlinehandler = xml.newhandlers { name = "texline", handle = tex_handle, functions = { ["@dt@"] = tex_doctype, ["@el@"] = tex_element, ["@pi@"] = tex_pi, ["@cm@"] = tex_comment, ["@cd@"] = tex_cdata, ["@tx@"] = tex_line, } } function lxml.flushspacewise(id) -- keeps spaces and lines id = getid(id) local dt = id and id.dt if dt then xmlserialize(dt,xmltexspacehandler) end end function lxml.flushlinewise(id) -- keeps lines id = getid(id) local dt = id and id.dt if dt then xmlserialize(dt,xmltexlinehandler) end end -- end of test function lxml.serialize(root) xmlserialize(root,xmltexhandler) end function lxml.setaction(id,pattern,action) local collected = xmlapplylpath(getid(id),pattern) if collected then local nc = #collected if nc > 0 then for c=1,nc do collected[c].command = action end end end end local function sprint(root) -- check rawroot usage if root then local tr = type(root) if tr == "string" then -- can also be result of lpath -- rawroot = false -- ? root = xmlunprivatized(root) lpegmatch(xmltextcapture,root) elseif tr == "table" then if forceraw then rawroot = root -- contextsprint(ctxcatcodes,xmltostring(root)) -- goes wrong with % etc root = xmlunprivatized(xmltostring(root)) lpegmatch(xmltextcapture,root) -- goes to toc else xmlserialize(root,xmltexhandler) end end end end local function tprint(root) -- we can move sprint inline local tr = type(root) if tr == "table" then local n = #root if n == 0 then -- skip else for i=1,n do sprint(root[i]) end end elseif tr == "string" then root = xmlunprivatized(root) lpegmatch(xmltextcapture,root) end end local function cprint(root) -- content if not root then -- rawroot = false -- quit elseif type(root) == 'string' then -- rawroot = false root = xmlunprivatized(root) lpegmatch(xmltextcapture,root) else local rootdt = root.dt if forceraw then rawroot = root -- contextsprint(ctxcatcodes,xmltostring(rootdt or root)) root = xmlunprivatized(xmltostring(root)) lpegmatch(xmltextcapture,root) -- goes to toc else xmlserialize(rootdt or root,xmltexhandler) end end end xml.sprint = sprint local xmlsprint = sprint -- calls ct mathml -> will be replaced xml.tprint = tprint local xmltprint = tprint -- only used here xml.cprint = cprint local xmlcprint = cprint -- calls ct mathml -> will be replaced -- now we can flush function lxml.main(id) xmlserialize(getid(id),xmltexhandler) -- the real root (@rt@) end -- -- lines (untested) -- -- local buffer = { } -- -- local xmllinescapture = ( -- newline^2 / function() buffer[#buffer+1] = "" end + -- newline / function() buffer[#buffer] = buffer[#buffer] .. " " end + -- content / function(s) buffer[#buffer] = buffer[#buffer] .. s end -- )^0 -- -- local xmllineshandler = table.copy(xmltexhandler) -- -- xmllineshandler.handle = function(...) lpegmatch(xmllinescapture,concat{ ... }) end -- -- function lines(root) -- if not root then -- -- rawroot = false -- -- quit -- elseif type(root) == 'string' then -- -- rawroot = false -- lpegmatch(xmllinescapture,root) -- elseif next(root) then -- tr == 'table' -- xmlserialize(root,xmllineshandler) -- end -- end -- -- function xml.lines(root) -- used at all? -- buffer = { "" } -- lines(root) -- return result -- end local function to_text(e) if e.command == nil then local etg = e.tg if etg and e.special and etg ~= "@rt@" then e.command = false -- i.e. skip else e.command = true -- i.e. no end end end local function to_none(e) if e.command == nil then e.command = false -- i.e. skip end end -- setups local setups = { } function lxml.setcommandtotext(id) xmlwithelements(getid(id),to_text) end function lxml.setcommandtonone(id) xmlwithelements(getid(id),to_none) end function lxml.installsetup(what,document,setup,where) document = document or "*" local sd = setups[document] if not sd then sd = { } setups[document] = sd end for k=1,#sd do if sd[k] == setup then sd[k] = nil break end end if what == 1 then if trace_loading then report_lxml("prepending setup %a for %a",setup,document) end insert(sd,1,setup) elseif what == 2 then if trace_loading then report_lxml("appending setup %a for %a",setup,document) end insert(sd,setup) elseif what == 3 then if trace_loading then report_lxml("inserting setup %a for %a before %a",setup,document,where) end insertbeforevalue(sd,setup,where) elseif what == 4 then if trace_loading then report_lxml("inserting setup %a for %a after %a",setup,document,where) end insertaftervalue(sd,setup,where) end end function lxml.flushsetups(id,...) local done = { } for i=1,select("#",...) do local document = select(i,...) local sd = setups[document] if sd then for k=1,#sd do local v= sd[k] if not done[v] then if trace_loading then report_lxml("applying setup %02i : %a to %a",k,v,document) end contextsprint(ctxcatcodes,"\\xmlsetup{",id,"}{",v,"}") done[v] = true end end elseif trace_loading then report_lxml("no setups for %a",document) end end end function lxml.resetsetups(document) if trace_loading then report_lxml("resetting all setups for %a",document) end setups[document] = { } end function lxml.removesetup(document,setup) local s = setups[document] if s then for i=1,#s do if s[i] == setup then if trace_loading then report_lxml("removing setup %a for %a",setup,document) end remove(t,i) break end end end end function lxml.setsetup(id,pattern,setup) if not setup or setup == "" or setup == "*" or setup == "-" or setup == "+" then local collected = xmlapplylpath(getid(id),pattern) if collected then local nc = #collected if nc > 0 then if trace_setups then for c=1,nc do local e = collected[c] local ix = e.ix or 0 if setup == "-" then e.command = false report_lxml("lpath matched (a) %5i: %s = %s -> skipped",c,ix,setup) elseif setup == "+" then e.command = true report_lxml("lpath matched (b) %5i: %s = %s -> text",c,ix,setup) else local tg = e.tg if tg then -- to be sure e.command = tg local ns = e.rn or e.ns if ns == "" then report_lxml("lpath matched (c) %5i: %s = %s -> %s",c,ix,tg,tg) else report_lxml("lpath matched (d) %5i: %s = %s:%s -> %s",c,ix,ns,tg,tg) end end end end else for c=1,nc do local e = collected[c] if setup == "-" then e.command = false elseif setup == "+" then e.command = true else e.command = e.tg end end end elseif trace_setups then report_lxml("%s lpath matches for pattern: %s","zero",pattern) end elseif trace_setups then report_lxml("%s lpath matches for pattern: %s","no",pattern) end else local a, b = match(setup,"^(.+:)([%*%-])$") if a and b then local collected = xmlapplylpath(getid(id),pattern) if collected then local nc = #collected if nc > 0 then if trace_setups then for c=1,nc do local e = collected[c] local ns, tg, ix = e.rn or e.ns, e.tg, e.ix or 0 if b == "-" then e.command = false if ns == "" then report_lxml("lpath matched (e) %5i: %s = %s -> skipped",c,ix,tg) else report_lxml("lpath matched (f) %5i: %s = %s:%s -> skipped",c,ix,ns,tg) end elseif b == "+" then e.command = true if ns == "" then report_lxml("lpath matched (g) %5i: %s = %s -> text",c,ix,tg) else report_lxml("lpath matched (h) %5i: %s = %s:%s -> text",c,ix,ns,tg) end else e.command = a .. tg if ns == "" then report_lxml("lpath matched (i) %5i: %s = %s -> %s",c,ix,tg,e.command) else report_lxml("lpath matched (j) %5i: %s = %s:%s -> %s",c,ix,ns,tg,e.command) end end end else for c=1,nc do local e = collected[c] if b == "-" then e.command = false elseif b == "+" then e.command = true else e.command = a .. e.tg end end end elseif trace_setups then report_lxml("%s lpath matches for pattern: %s","zero",pattern) end elseif trace_setups then report_lxml("%s lpath matches for pattern: %s","no",pattern) end else local collected = xmlapplylpath(getid(id),pattern) if collected then local nc = #collected if nc > 0 then if trace_setups then for c=1,nc do local e = collected[c] e.command = setup local ns, tg, ix = e.rn or e.ns, e.tg, e.ix or 0 if ns == "" then report_lxml("lpath matched (k) %5i: %s = %s -> %s",c,ix,tg,setup) else report_lxml("lpath matched (l) %5i: %s = %s:%s -> %s",c,ix,ns,tg,setup) end end else for c=1,nc do collected[c].command = setup end end elseif trace_setups then report_lxml("%s lpath matches for pattern: %s","zero",pattern) end elseif trace_setups then report_lxml("%s lpath matches for pattern: %s","no",pattern) end end end end -- finalizers local function first(collected) if collected and #collected > 0 then xmlsprint(collected[1]) end end local function last(collected) if collected then local nc = #collected if nc > 0 then xmlsprint(collected[nc]) end end end local function all(collected) if collected then local nc = #collected if nc > 0 then for c=1,nc do xmlsprint(collected[c]) end end end end local function reverse(collected) if collected then local nc = #collected if nc >0 then for c=nc,1,-1 do xmlsprint(collected[c]) end end end end local function count(collected) contextsprint(ctxcatcodes,(collected and #collected) or 0) -- why ctxcatcodes end local function position(collected,n) -- todo: if not n then == match if collected then local nc = #collected if nc > 0 then n = tonumber(n) or 0 if n < 0 then n = nc + n + 1 end if n > 0 then local cn = collected[n] if cn then xmlsprint(cn) return end end end end end local function match(collected) -- is match in preceding collected, never change, see bibxml local m = collected and collected[1] contextsprint(ctxcatcodes,m and m.mi or 0) -- why ctxcatcodes end local function index(collected,n) if collected then local nc = #collected if nc > 0 then n = tonumber(n) or 0 if n < 0 then n = nc + n + 1 -- brrr end if n > 0 then local cn = collected[n] if cn then contextsprint(ctxcatcodes,cn.ni or 0) -- why ctxcatcodes return end end end end contextsprint(ctxcatcodes,0) -- why ctxcatcodes end local function command(collected,cmd,otherwise) local n = collected and #collected if n and n > 0 then local wildcard = find(cmd,"%*") for c=1,n do -- maybe optimize for n=1 local e = collected[c] local ix = e.ix local name = e.name if not ix then lxml.addindex(name,false,true) ix = e.ix end if wildcard then contextsprint(ctxcatcodes,"\\xmlw{",(gsub(cmd,"%*",e.tg)),"}{",name,"::",ix,"}") else contextsprint(ctxcatcodes,"\\xmlw{",cmd,"}{",name,"::",ix,"}") end end elseif otherwise then contextsprint(ctxcatcodes,"\\xmlw{",otherwise,"}{#1}") end end local function attribute(collected,a,default) if collected and #collected > 0 then local at = collected[1].at local str = (at and at[a]) or default if str and str ~= "" then contextsprint(notcatcodes,str) end elseif default then contextsprint(notcatcodes,default) end end local function chainattribute(collected,arguments) -- todo: optional levels if collected and #collected > 0 then local e = collected[1] while e do local at = e.at if at then local a = at[arguments] if a then contextsprint(notcatcodes,a) end else break -- error end e = e.__p__ end end end local function text(collected) if collected then local nc = #collected if nc == 0 then -- nothing elseif nc == 1 then -- hardly any gain so this will go cprint(collected[1]) else for c=1,nc do cprint(collected[c]) end end end end local function ctxtext(collected) if collected then local nc = #collected if nc > 0 then for c=1,nc do contextsprint(ctxcatcodes,collected[c].dt) end end end end local function stripped(collected) -- tricky as we strip in place if collected then local nc = #collected if nc > 0 then for c=1,nc do cprint(xml.stripelement(collected[c])) end end end end local function lower(collected) if not collected then local nc = #collected if nc > 0 then for c=1,nc do contextsprint(ctxcatcodes,lowerchars(collected[c].dt[1])) end end end end local function upper(collected) if collected then local nc = #collected if nc > 0 then for c=1,nc do contextsprint(ctxcatcodes,upperchars(collected[c].dt[1])) end end end end local function number(collected) local nc = collected and #collected or 0 local n = 0 if nc > 0 then for c=1,nc do n = n + tonumber(collected[c].dt[1] or 0) end end contextsprint(ctxcatcodes,n) end local function concatrange(collected,start,stop,separator,lastseparator,textonly) -- test this on mml if collected then local nofcollected = #collected if nofcollected > 0 then local separator = separator or "" local lastseparator = lastseparator or separator or "" start, stop = (start == "" and 1) or tonumber(start) or 1, (stop == "" and nofcollected) or tonumber(stop) or nofcollected if stop < 0 then stop = nofcollected + stop end -- -1 == last-1 for i=start,stop do if textonly then xmlcprint(collected[i]) else xmlsprint(collected[i]) end if i == nofcollected then -- nothing elseif i == nofcollected-1 and lastseparator ~= "" then contextsprint(ctxcatcodes,lastseparator) elseif separator ~= "" then contextsprint(ctxcatcodes,separator) end end end end end local function concat(collected,separator,lastseparator,textonly) -- test this on mml concatrange(collected,false,false,separator,lastseparator,textonly) end texfinalizers.first = first texfinalizers.last = last texfinalizers.all = all texfinalizers.reverse = reverse texfinalizers.count = count texfinalizers.command = command texfinalizers.attribute = attribute texfinalizers.text = text texfinalizers.stripped = stripped texfinalizers.lower = lower texfinalizers.upper = upper texfinalizers.ctxtext = ctxtext texfinalizers.context = ctxtext texfinalizers.position = position texfinalizers.match = match texfinalizers.index = index texfinalizers.concat = concat texfinalizers.concatrange = concatrange texfinalizers.chainattribute = chainattribute texfinalizers.default = all -- !! local concat = table.concat function texfinalizers.tag(collected,n) if collected then local nc = #collected if nc > 0 then n = tonumber(n) or 0 local c if n == 0 then c = collected[1] elseif n > 1 then c = collected[n] else c = collected[nc-n+1] end if c then contextsprint(ctxcatcodes,c.tg) end end end end function texfinalizers.name(collected,n) if collected then local nc = #collected if nc > 0 then local c if n == 0 or not n then c = collected[1] elseif n > 1 then c = collected[n] else c = collected[nc-n+1] end if c then if c.ns == "" then contextsprint(ctxcatcodes,c.tg) else contextsprint(ctxcatcodes,c.ns,":",c.tg) end end end end end function texfinalizers.tags(collected,nonamespace) if collected then local nc = #collected if nc > 0 then for c=1,nc do local e = collected[c] local ns, tg = e.ns, e.tg if nonamespace or ns == "" then contextsprint(ctxcatcodes,tg) else contextsprint(ctxcatcodes,ns,":",tg) end end end end end -- local function verbatim(id,before,after) local root = getid(id) if root then if before then contextsprint(ctxcatcodes,before,"[",root.tg or "?","]") end lxml.toverbatim(xmltostring(root.dt)) --~ lxml.toverbatim(xml.totext(root.dt)) if after then contextsprint(ctxcatcodes,after) end end end function lxml.inlineverbatim(id) verbatim(id,"\\startxmlinlineverbatim","\\stopxmlinlineverbatim") end function lxml.displayverbatim(id) verbatim(id,"\\startxmldisplayverbatim","\\stopxmldisplayverbatim") end lxml.verbatim = verbatim -- helpers function lxml.first(id,pattern) local collected = xmlapplylpath(getid(id),pattern) if collected then first(collected) end end function lxml.last(id,pattern) local collected = xmlapplylpath(getid(id),pattern) if collected then last(collected) end end function lxml.all(id,pattern) local collected = xmlapplylpath(getid(id),pattern) if collected then all(collected) end end function lxml.count(id,pattern) -- always needs to produce a result so no test here count(xmlapplylpath(getid(id),pattern)) end function lxml.attribute(id,pattern,a,default) local collected = xmlapplylpath(getid(id),pattern) if collected then attribute(collected,a,default) end end function lxml.raw(id,pattern) -- the content, untouched by commands local collected = (pattern and xmlapplylpath(getid(id),pattern)) or getid(id) if collected and #collected > 0 then contextsprint(notcatcodes,xmltostring(collected[1].dt)) end end function lxml.context(id,pattern) -- the content, untouched by commands if pattern then local collected = xmlapplylpath(getid(id),pattern) or getid(id) if collected and #collected > 0 then contextsprint(ctxcatcodes,collected[1].dt) end else local collected = getid(id) if collected then local dt = collected.dt if #dt > 0 then ctx_text(dt[1]) end end end end function lxml.text(id,pattern) local collected = (pattern and xmlapplylpath(getid(id),pattern)) or getid(id) if collected and #collected > 0 then text(collected) end end lxml.content = text function lxml.position(id,pattern,n) position(xmlapplylpath(getid(id),pattern),n) end function lxml.chainattribute(id,pattern,a,default) chainattribute(xmlapplylpath(getid(id),pattern),a,default) end function lxml.concatrange(id,pattern,start,stop,separator,lastseparator,textonly) -- test this on mml concatrange(xmlapplylpath(getid(id),pattern),start,stop,separator,lastseparator,textonly) end function lxml.concat(id,pattern,separator,lastseparator,textonly) concatrange(xmlapplylpath(getid(id),pattern),false,false,separator,lastseparator,textonly) end function lxml.element(id,n) position(xmlapplylpath(getid(id),"/*"),n) end lxml.index = lxml.position function lxml.pos(id) local root = getid(id) contextsprint(ctxcatcodes,(root and root.ni) or 0) end function lxml.att(id,a,default) local root = getid(id) if root then local at = root.at local str = (at and at[a]) or default if str and str ~= "" then contextsprint(notcatcodes,str) end elseif default then contextsprint(notcatcodes,default) end end function lxml.name(id) -- or remapped name? -> lxml.info, combine local r = getid(id) local ns = r.rn or r.ns or "" if ns ~= "" then contextsprint(ctxcatcodes,ns,":",r.tg) else contextsprint(ctxcatcodes,r.tg) end end function lxml.match(id) -- or remapped name? -> lxml.info, combine contextsprint(ctxcatcodes,getid(id).mi or 0) end function lxml.tag(id) -- tag vs name -> also in l-xml tag->name contextsprint(ctxcatcodes,getid(id).tg or "") end function lxml.namespace(id) -- or remapped name? local root = getid(id) contextsprint(ctxcatcodes,root.rn or root.ns or "") end function lxml.flush(id) id = getid(id) local dt = id and id.dt if dt then xmlsprint(dt) end end function lxml.snippet(id,i) local e = getid(id) if e then local edt = e.dt if edt then xmlsprint(edt[i]) end end end function lxml.direct(id) xmlsprint(getid(id)) end function lxml.command(id,pattern,cmd) local i, p = getid(id,true) local collected = xmlapplylpath(getid(i),pattern) if collected then local nc = #collected if nc > 0 then local rootname = p or i.name for c=1,nc do local e = collected[c] local ix = e.ix if not ix then addindex(rootname,false,true) ix = e.ix end contextsprint(ctxcatcodes,"\\xmlw{",cmd,"}{",rootname,"::",ix,"}") end end end end -- loops function lxml.collected(id,pattern,reverse) return xmlcollected(getid(id),pattern,reverse) end function lxml.elements(id,pattern,reverse) return xmlelements(getid(id),pattern,reverse) end -- obscure ones lxml.info = lxml.name -- testers local found, empty = xml.found, xml.empty local doif, doifnot, doifelse = commands.doif, commands.doifnot, commands.doifelse function lxml.doif (id,pattern) doif (found(getid(id),pattern)) end function lxml.doifnot (id,pattern) doifnot (found(getid(id),pattern)) end function lxml.doifelse (id,pattern) doifelse(found(getid(id),pattern)) end function lxml.doiftext (id,pattern) doif (not empty(getid(id),pattern)) end function lxml.doifnottext (id,pattern) doifnot (not empty(getid(id),pattern)) end function lxml.doifelsetext (id,pattern) doifelse(not empty(getid(id),pattern)) end -- special case: "*" and "" -> self else lpath lookup --~ function lxml.doifelseempty(id,pattern) doifelse(isempty(getid(id),pattern ~= "" and pattern ~= nil)) end -- not yet done, pattern -- status info statistics.register("xml load time", function() if noffiles > 0 or nofconverted > 0 then return format("%s seconds, %s files, %s converted", statistics.elapsedtime(xml), noffiles, nofconverted) else return nil end end) statistics.register("lxml preparation time", function() local calls, cached = xml.lpathcalls(), xml.lpathcached() if calls > 0 or cached > 0 then return format("%s seconds, %s nodes, %s lpath calls, %s cached calls", statistics.elapsedtime(lxml), nofindices, calls, cached) else return nil end end) statistics.register("lxml lpath profile", function() local p = xml.profiled if p and next(p) then local s = table.sortedkeys(p) local tested, matched, finalized = 0, 0, 0 logs.pushtarget("logfile") logs.writer("\nbegin of lxml profile\n") logs.writer("\n tested matched finalized pattern\n\n") for i=1,#s do local pattern = s[i] local pp = p[pattern] local t, m, f = pp.tested, pp.matched, pp.finalized tested, matched, finalized = tested + t, matched + m, finalized + f logs.writer(format("%9i %9i %9i %s",t,m,f,pattern)) end logs.writer("\nend of lxml profile\n") logs.poptarget() return format("%s patterns, %s tested, %s matched, %s finalized (see log for details)",#s,tested,matched,finalized) else return nil end end) -- misc function lxml.nonspace(id,pattern) -- slow, todo loop xmltprint(xmlcollect(getid(id),pattern,true)) end function lxml.strip(id,pattern,nolines,anywhere) xml.strip(getid(id),pattern,nolines,anywhere) end function lxml.stripped(id,pattern,nolines) local str = xmltext(getid(id),pattern) or "" str = gsub(str,"^%s*(.-)%s*$","%1") if nolines then str = gsub(str,"%s+"," ") end xmlsprint(str) end function lxml.delete(id,pattern) xml.delete(getid(id),pattern) end lxml.obsolete = { } lxml.get_id = getid lxml.obsolete.get_id = getid -- goodies: function texfinalizers.lettered(collected) if collected then local nc = #collected if nc > 0 then for c=1,nc do contextsprint(ctxcatcodes,lettered(collected[c].dt[1])) end end end end --~ function texfinalizers.apply(collected,what) -- to be tested --~ if collected then --~ for c=1,#collected do --~ contextsprint(ctxcatcodes,what(collected[c].dt[1])) --~ end --~ end --~ end function lxml.toparameters(id) local e = getid(id) if e then local a = e.at if a and next(a) then local setups, s = { }, 0 for k, v in next, a do s = s + 1 setups[s] = k .. "=" .. v end setups = concat(setups,",") -- tracing context(setups) end end end local template = '\n\n\n\n%s' function lxml.tofile(id,pattern,filename,comment) local collected = xmlapplylpath(getid(id),pattern) if collected then io.savedata(filename,format(template,comment or "exported fragment",tostring(collected[1]))) else os.remove(filename) -- get rid of old content end end texfinalizers.upperall = xmlfinalizers.upperall texfinalizers.lowerall = xmlfinalizers.lowerall context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-husayni.mkiv0000644000175000017500000001447612161703335026020 0ustar norbertnorbert%D \module %D [ file=type-imp-husayni, %D version=2008.08.08, % or whatever ... onwards %D title=\CONTEXT\ Typescript Macros, %D subtitle=Husayni, %D author=Idris Samawi Hamid \& Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For a detailed list of features and names, see husayni.lfg. In fact, the following %D sets will go there. \definefontfeature [husayni-default] [analyze=yes, mode=node, language=dflt, script=arab, ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement init=yes, % contextual analysis medi=yes, % contextual analysis fina=yes, % contextual analysis rlig=yes, % indispensable calt=yes, % ayah+numerals salt=yes, % includes manual justification with Tatwiil anum=yes, % replace latin numerals with arabic-script ones ss01=yes, % Allah, Muhammad, ss03=yes, % level-1 stack over Jiim, initial entry only ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim, ss15=yes, % full stacked Laam-on-Miim ss16=yes, % initial entry, stacked Ayn-on-Miim ss19=yes, % LM_im ss24=yes, % BR_i_mf, BN_i_mf ss25=yes, % basic LH_im % might merge with ss24 ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf ss27=yes, % basic thin Miim.final ss31=yes, % basic Raa.final strings: JR and SR ss34=yes, % AyR style % also available in jsnn ss35=yes, % full Kaaf contexts ss36=yes, % full Laam contexts ss37=yes, % Miim-Miim contexts ss38=yes, % basic dipped Haa, B_SH_mm ss41=yes, % high and low Baa strings ss42=yes, % diagonal entry ss43=yes, % initial alternates ss60=yes, % js16=yes, % aesthetic medial Faa/Qaaf kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings curs=yes, % we don't curs final pairs, padj for that mark=yes, % vowels mkmk=yes, % stacked vowels tlig=yes, goodies=husayni, colorscheme=default] \definefontfeature [husayni-alternative] % was husayni-default2 [analyze=yes, mode=node, language=dflt, script=arab, ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement init=yes, % contextual analysis medi=yes, % contextual analysis fina=yes, % contextual analysis rlig=yes, % indispensable calt=yes, % ayah+numerals salt=yes, % includes manual justification with Tatwiil anum=yes, % replace latin numerals with arabic-script ones ss01=yes, % Allah, Muhammad, ss03=yes, % level-1 stack over Jiim, initial entry only ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim, ss15=yes, % full stacked Laam-on-Miim ss16=yes, % initial entry, stacked Ayn-on-Miim ss19=yes, % LM_im ss24=yes, % BR_i_mf, BN_i_mf ss25=yes, % basic LH_im % might merge with ss24 ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf ss27=yes, % basic thin Miim.final ss31=yes, % basic Raa.final strings: JR and SR ss34=yes, % AyR style % also available in jsnn ss35=yes, % full Kaaf contexts ss36=yes, % full Laam contexts ss37=yes, % Miim-Miim contexts ss38=yes, % basic dipped Haa, B_SH_mm ss41=yes, % high and low Baa strings ss42=yes, % diagonal entry ss43=yes, % initial alternates ss60=yes, % js16=yes, % aesthetic medial Faa/Qaaf kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings curs=yes, % we don't curs final pairs, padj for that mark=yes, % vowels mkmk=yes, % stacked vowels tlig=yes] \definefontfeature [husayni-tt] [analyze=yes, mode=node, language=dflt, script=arab, ccmp=yes, init=yes, medi=yes, fina=yes, rlig=yes, fchr=yes, kern=yes, curs=yes, mark=yes, mkmk=yes] \definefontfeature [husayni-mono] [analyze=yes, mode=node, language=dflt, script=arab, ccmp=no, init=yes, medi=yes, fina=yes, isol=yes, mset=yes] \definedelimitedtext [ornatequote] [left={‏\char"FD3F\penalty10000}, right={‏\char"FD3E\penalty10000}] \definedelimitedtext [arparenthesis] [left={‏\char"0028}, right={‏\char"0029}] \definedelimitedtext [arquotation] [left={‏\symbol[rightquotation]}, right={‏\symbol[leftquotation]}, leftmargin=standard] \definedelimitedtext [arquote] [left={‏\symbol[rightquote]}, right={‏\symbol[leftquote]}, leftmargin=standard] \definebodyfontenvironment [husayni-default] [default] [interlinespace=4.4ex] \definefontfallback [husayni-latin] [file:lmroman12-regular*default] [basiclatin,latin-1supplement,latinextended-A,latinextendedadditional] [force=no, rscale=.7] \definefontfallback [husayni-mono] [file:cour*husayni-mono] [arabic,arabicpresentationformsa,arabicpresentationformsb,arabicsupplement,0x200C,0x200D,0x200E,0x200F] % [force=no] \definebodyfontenvironment[20.7pt] \definebodyfontenvironment[24.8pt] \definebodyfontenvironment[29.8pt] \definebodyfontenvironment[35.8pt] \starttypescriptcollection[husayni] \starttypescript [naskh] [husayni] [name] \definefontsynonym [Arabic-Light] [name:husayni] [goodies=husayni,features=husayni-default] \definefontsynonym [Arabic-Bold] [name:husayni] [goodies=husayni,features=husayni-default] \definefontsynonym [Arabic-Italic] [name:husayni] [goodies=husayni,features=husayni-default] \definefontsynonym [Arabic-Bold-Italic] [name:husayni] [goodies=husayni,features=husayni-default] \definefontsynonym [Serif] [Arabic-Light] \definefontsynonym [SerifItalic] [Arabic-Italic] \definefontsynonym [SerifBold] [Arabic-Bold] \definefontsynonym [SerifBoldItalic] [Arabic-Bold-Italic] \stoptypescript \starttypescript [husayni-default] \definetypeface [husayni-default] [rm] [naskh] [husayni] [default] [fallbacks=husayni-latin] \definetypeface [husayni-default] [tt] [mono] [modern] [default] [fallbacks=husayni-latin] \definetypeface [husayni-default] [mm] [math] [xitsbidi] [default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/x-pfsense.ctx0000644000175000017500000000062611754241457024337 0ustar norbertnorbert pfsense configuration listing purge x-pfs-01.mkiv context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-01.tex0000644000175000017500000002152511754241457023676 0ustar norbertnorbert%D \module %D [ file=s-pre-01, %D version=1997.07.22, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 environment can be used to typeset interactive %D presentations. This module was first used at the 1997 \TUG\ %D meeting. \usemodule[pre-general] %D \macros %D {language} %D %D Because this module is defined in english, we default to the %D english hyphenation patterns and labels too. \language [en] %D \macros %D {setupbodyfont,setuplayout} %D %D For screen reading, a Lucida Bright font looks nice. We use %D a 14.4 point bodyfont for the main text, but switch back to %D 12 points for ornaments. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] \setuplayout [style=smallbodyfont] %D \macros %D {setupcolors,definecolor} %D %D Screen presentations without color just look dull, so we %D enable color support. We define ourselves a yellowish %D backgroundcolor and a not too dark blue interactioncolor. \setupcolors [state=start] \definecolor [BackgroundColor] [r=1, g=1, b=.7] \definecolor [InteractionColor] [r=.1, g=.5, b=.8] \definecolor [ContrastColor] [r=.9, g=.5, b=.2] %D \macros %D {setuppapersize,setuplayout,setupinteractionscreen} %D %D %D We use a nice large screen, and dedicate the right edge and %D bottom part to navigational tools. We automatically set %D the width and height of the page and start up full screen. \setuppapersize [S6][S6] \setuplayout [topspace=12pt, header=0pt, footer=0pt, height=402pt, % 450 - 12 - 15 - 12 - 12 + 3 bottomdistance=15pt, bottom=12pt, backspace=12pt, margin=0pt, width=fit, edgedistance=12pt, rightedge=96pt] \setupinteractionscreen [option=max] %D \macros %D {setupbackgrounds} %D %D We set the pagecolor to yellow except the part of the screen %D that is used to display the running text. By seting the %D offset to 3pt the text will not touch the yellow parts. We %D do not set the depth. \setupbackgrounds [page] [background=color, backgroundcolor=BackgroundColor, offset=3pt] \setupbackgrounds [text][text] [background=color, backgroundcolor=white] %D I considered the next setup too, but finaly decided to %D comment it out. %D %D \starttyping %D \setupbackgrounds %D [bottom][text] %D [frame=on, %D framecolor=white] %D \stoptyping %D \macros %D {setupinteraction} %D %D We did not enable interactive text support yet, so let's do %D that now. We force page reference to circumvent problems %D with named destinations in buggy viewers. \setupinteraction [page=yes, color=InteractionColor, contrastcolor=ContrastColor, menu=on, state=start] %D \macros %D {setupinteractionmenu,startinteractionmenu} %D %D At the bottom of the screen we show two navigational bars. %D At the left we show the subpage bar, at the right we use a %D non default backward|/|forward bar. \setupinteractionmenu [bottom] [leftoffset=-3pt, rightoffset=-3pt] \startinteractionmenu[bottom] \txt \InteractionBar \\ \txt \InteractionButtons \\ \stopinteractionmenu %D \macros %D {interactionbar} %D %D The left bar gets a white border (on the yellow background). %D Because we don't want to typeset an empty frame when no %D subpage bar is shown, we check for the number of subpages. \def\InteractionBar% {\ifnum\nofsubpages>1 \framed [framecolor=white,rulethickness=1pt, height=\bottomheight,strut=no] {\interactionbar[alternative=f,width=.5\makeupwidth,height=1ex]} \fi} %D \macros %D {setupinteractionbar, interactionbuttons} %D %D The right hand buttons enable us to jump backward and forward, %D as well as to the previous and next jump. We also enable to %D close the presentation. \setupinteractionbar [framecolor=white,rulethickness=1pt, height=\bottomheight,strut=no] \def\InteractionButtons% {\interactionbuttons [width=15em] [PreviousJump,NextJump, firstpage, firstsubpage,previouspage,nextpage,lastsubpage, lastpage, CloseDocument]} %D \macros %D {StartTitlePage, TitlePage} %D %D The titlepage is rather simple and can be typeset in two %D ways: %D %D \starttyping %D \StartTitlePage %D text \\ text \\ text %D \StopTitlepage %D \stoptyping %D %D or more straightforward: %D %D \starttyping %D \TitlePage{text\\text\\text} %D \stoptyping %D %D The first alternative can be used for more complicated %D title pages. \def\StartTitlePage% {\startstandardmakeup \bfd\setupinterlinespace \setupalign[middle] \vfil \let\\=\vfil} \def\StopTitlePage% {\vfil\vfil\vfil \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D \macros %D {TitlePage, Topics, Topic, Subject} %D %D A presentation after loading this module looks like: %D %D \starttyping %D \TitlePage {About Whatever\\Topics} %D %D \Topics {Todays Talk} %D %D \Topic {Some topic} %D %D \Subject {Alfa} %D %D ..... %D %D \Subject {Beta} %D %D ..... %D \stoptyping %D \macros %D {definehead} %D %D The commands \type{\Topic} and \type{\Subject} are defined %D as copies of head. We use \type{\Nopic} for internal %D purposes. \definehead [Topic] [chapter] \definehead [Subject] [section] \definehead [Nopic] [title] %D \macros %D {setuphead} %D %D Because chapters and sections do not make sense in %D presentations, we use our own command for typesetting the %D titles. Sectionnumbers are of course hidden from viewing. %D Each topic is followed by a list of subjects that belong %D to the topic. \setuphead [Topic, Nopic, Subject] [command=\HeadLine, page=yes, style=\tfb, after=\blank, sectionnumber=no] \setuphead [Topic] [after=\PlaceSubjectList] \setuphead [Subject] [continue=no] %D \macros %D {framed, midalined} %D %D The command used to typeset the head lines is rather simple. %D We just center the framed title. The frame macro optimizes %D the alignment and at the same time enables us to typeset a %D nice colored rule. \def\HeadLine#1#2% {\midaligned {\framed [framecolor=BackgroundColor,rulethickness=1pt, width=.8\hsize,align=middle,strut=no] {#2}}} %D \macros %D {setuplist} %D %D The subject list is automatically placed. We center each %D subject line by using one of the default alternatives (g). We %D could have said: %D %D \starttyping %D \setuplist %D [Subject] %D [alternative=none, %D command=\SubjectListLine, %D interaction=all] %D %D \def\SubjectListLine#1#2#3% %D {\midaligned{#2}} %D \stoptyping %D %D But why should we complicate things when we can use %D alternative~\type{g}. The test is only needed if one %D does not automatically goes a new page with each subject. \def\PlaceSubjectList% {\blank \determinelistcharacteristics[Subject] % \ifnum\utilitylistlength>0 \placelist[Subject] \fi} \doifmode{*list}{\placelist[Subject]}} \setuplist [Subject, Topic] [alternative=g, interaction=all, before=, after=] % %D \macros % %D {setuptexttexts} % %D % %D The topics will be listed in the right edge, using: % % \setuptexttexts % [edge] % [][\TopicList] %D \macros %D {setuplist, placelist,startinteractionmenu} %D %D The actual topic list is typeset using a \type{\vbox}. We %D have to specify \type{criteriumcriterium=all} because otherwise no %D list will be typeset. (By default lists are typeset %D locally.) \startinteractionmenu[right] \placelist [Topic] [alternative=f, % command, % none, maxwidth=\hsize, width=\hsize, offset=0pt, criterium=all, align=left, style=\setsmallbodyfont\bfx] \stopinteractionmenu \def\Topics#1% temporary hack {\Nopic{#1} \placelist[Topic][criterium=all]} \def\Subjects% {} %D \macros %D {setuptexttexts, button} %D %D During a presentation, we want to use the cursor to point to %D parts of the text. Furthermore we want to be able to jump to %D the next page, without the need to move the cursor on buttons. %D Therefore we make the text part of the screen into an %D invisible button. \setuptexttexts [\GotoNextPage][] \def\GotoNextPage {\button[width=\hsize,height=\vsize,frame=off]{}[nextpage]} %D \macros %D {setupsubpagenumber} %D %D The left bottom navigation bar shows the subpages, which will %D be counted by text. One can change this in the preentation %D itself by saying \type {[way=byTopic]}. \setupsubpagenumber [way=bytext, % Topic, state=start] \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \TitlePage{Title Page\\pre-original} \Topics{Some Nice Quotes} \Topic{A Few} \Subject{Knuth} \input knuth \Subject{Tufte} \input tufte \Topic{Some More} \Subject{Zapf} \input zapf \Subject{Bryson} \input bryson \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-mps.mkii0000644000175000017500000016506611754241457024360 0ustar norbertnorbert%D \module %D [ file=supp-mps, %D version=1997.07.05, %D title=\CONTEXT\ Support Macros, %D subtitle=\METAPOST\ Inclusion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Forget about generic modules \unknown\ ... \ifx \undefined \contextversion \endinput \fi %D \METAPOST\ is John Hobbys alternative for \METAFONT\ and %D produces superior \POSTSCRIPT\ code. In this module we %D integrate \METAPOST\ support int \CONTEXT. We offer two %D tracks: %D %D \startitemize %D \item generating \METAPOST\ code, running this program from %D within \TEX\ using \type{\write18}, and importing the %D result %D \item generating \METAPOST\ code, processing the code %D afterward, and importing the result in a second pass %D \stopitemize %D %D The first approach uses a non standard \TEX\ feature, %D implemented in Web2c. I'm not going to discuss the pros and %D cons of running programs from within others, but all %D arguments against this can be overcome by implementing a %D \TEX\ worthy primitive: %D %D \starttyping %D \excuteMetaPost filename %D \stoptyping %D %D Ok then, let's start: \writestatus{loading}{ConTeXt Support Macros / MetaPost Inclusion} \unprotect \def\@@MPG{@MPG@} %D First we define a handy constant: \bgroup \catcode`\%=\@@other \xdef\letterpercent{\string%} \egroup % todo : sort out ^^M, \par and ; mess %D \macros %D {everyMPgraphic} %D %D Because some graphics interact with \TEX\ (i.e.\ \CONTEXT), we %D provide a hook for additional actions: \type {\everyMPgraphic}. \newtoks\everyMPgraphic \everyMPgraphic{\everyMPgraphic\emptytoks} %D \macros %D {startMPgraphic} %D %D From within \TEX\ one can execute \METAPOST\ code by putting %D it between the two commands %D %D \starttyping %D \startMPgraphic %D \stopMPgraphic %D \stoptyping %D %D This is implemented as: \let\stopMPgraphic\relax \long\def\startMPgraphic#1\stopMPgraphic {\startwritingMPgraphic \writecheckedMPgraphic{#1}% % potential speedup: pass #1 as macro \stopwritingMPgraphic} %D \macros %D {startMPrun} %D %D If we just want to run \METAPOST\ code, that is, not to %D explictly generate a figure in terms of \type{beginfig} and %D \type{endfig}, we can use: %D %D \starttyping %D \startMPgraphic %D \stopMPgraphic %D \stoptyping %D %D \starttyping %D \startMPrun %D \stopMPrun %D \stoptyping %D %D The next booleans are for internal purposes only. % some day a bit more more clear: % % run directly/run afterwards/run external defined % insert directly/insert whenever % use object/don't use objects \newif\ifMPgraphics \MPgraphicstrue \newif\ifMPrun \MPrunfalse \newif\ifMPwrapper \MPwrappertrue \let\stopMPrun\relax \ifCONTEXT \long\def\dostartMPrun#1#2\stopMPrun {\bgroup \MPruntrue \doifsomething{#1}{\def\MPgraphicfile{#1}}% \startwritingMPgraphic \writecheckedMPgraphic{#2}% \stopwritingMPgraphic \egroup} \def\startMPrun {\dosinglegroupempty\dostartMPrun} \else \long\def\startMPrun#1\stopMPrun {\MPruntrue \startwritingMPgraphic \writecheckedMPgraphic{#1}% \stopwritingMPgraphic \MPrunfalse} \fi %D \macros %D {startwritingMPgraphic, %D writeMPgraphic, %D stopwritingMPgraphic} %D %D If the writing process is divided into more steps, one can %D use the components of this macro directly. %D %D \starttyping %D \startwritingMPgraphic %D ... %D \writeMPgraphic{...} %D ... %D \writeMPgraphic{...} %D ... %D \stopwritingMPgraphic %D \stoptyping %D \macros %D {ifrunMPgraphics,ifrunMPTEXgraphics,ifinsertMPgraphics} %D %D These macros look a bit more complicated that one would %D expect at first sight. This is due to the two ways of %D processing these graphics, mentioned in a previous %D paragraph. Which method is used, the direct or indirect %D one, depends on a boolean. \newif\ifrunMPgraphics \runMPgraphicsfalse \newif\ifrunMPTEXgraphics \runMPTEXgraphicsfalse \newif\ifinsertMPgraphics \insertMPgraphicstrue %D If set to true, one can do with a single pass, else one must %D process the \METAPOST\ file \type{mpgraph} between two %D succesive \TEX\ runs. \ifx\MPgraphicfile\undefined \def\MPgraphicfile{mp\ifMPrun run\else graph\fi} \def\MPruntimefile{mprun} \fi %D \macros %D {MPgraphic} %D %D When we run \METAPOST\ from within \TEX, each graphic is %D processed at once, which means that we reuse this file many %D times. When however the execution is delayed, all graphics %D are saved in a separate figure. The current graphic is %D characterized bij a \COUNTER. This counter is available %D in \type{\MPgraphic}. \newcount\nofMPgraphics \newcount\currentMPgraphic \def\MPgraphic{0} % %D \macros % %D {ifreuseMPgraphics} % %D % %D If one want to reuse grapics, one can save much redundant % %D run time by setting the next switch to true. % % \newif\ifreuseMPgraphics \reuseMPgraphicstrue %D The three macros responsible for writing the graphic %D implement both schemes. %D \macros %D {MPinclusions, startMPinclusions, MPinitializations} %D %D One can include for instance common input commands by %D passing them to \type{\MPinclusions}: %D %D \starttyping %D \startMPinclusions %D input mp-mine ; %D \stopMPinclusions %D \stoptyping %D %D \starttyping %D \MPinclusions{input mp-mine} %D \stoptyping %D %D These commands reset their content each time. You can append %D code as follows: %D %D \starttyping %D \startMPinclusions[+] %D input mp-mine ; %D \stopMPinclusions %D \stoptyping %D %D The token register \type {\MPinitializations} is expanded %D before all other inclusions, the extensions are expanded %D only once per run. %D The next hack prevents too long lines: \long\def\runtimeobeyMPlines {\catcode35=11\relax % goodie \ifx\rawcharacter\undefined \let\obeyedline\space \else \obeylines \ifx\outputnewlinechar\undefined \edef\obeyedline{\rawcharacter{\endlinechar}}% \else \let\obeyedline\outputnewlinechar \fi \fi} \long\def\obeyMPlines % anyhow, we end up with ^^M's in the input {\obeylines \let\obeyedline\relax} % delay expansion \ifx\everydump\undefined % maybe we're not using context \else \appendtoks \let\obeyMPlines\runtimeobeyMPlines \to \everydump \fi %D We use two distinguished token registers: \newtoks \MPextensions % once per run (can be multiple graphics) \newtoks \MPinitializations % each graphic \let\stopMPextensions \relax % so that we can use it in \expanded \let\stopMPinitializations\relax % so that we can use it in \expanded \let\stopMPinclusions \relax % so that we can use it in \expanded \def\startMPextensions % no text checking done here ! {\begingroup \obeyMPlines \dostartMPextensions} \def\dostartMPextensions#1\stopMPextensions {\endgroup \MPextensions\expandafter{\the\MPextensions#1}} \def\startMPinitializations % no text checking done here ! {\begingroup \obeyMPlines \dostartMPinitializations} \def\dostartMPinitializations#1\stopMPinitializations {\endgroup \MPinitializations\expandafter{\the\MPinitializations#1}} \def\startMPinclusions {\begingroup \dosingleempty\dostartMPinclusions} \long\def\dostartMPinclusions {\obeyMPlines \dodostartMPinclusions} \long\def\dodostartMPinclusions[#1]#2\stopMPinclusions % document wide {\endgroup \doifelse{#1}{+} {\@EA\long\@EA\def\@EA\theMPinclusions\@EA {\theMPinclusions \writeMPgraphic{#2}}} {\long\def\theMPinclusions {% \expanded ! % \@EA\expanded\@EA{\@EA\writeMPgraphic\@EA{\the\MPextensions;}}% new \writeMPgraphic{#2}}}} \def\MPinclusions {\dosingleempty\doMPinclusions} \long\def\doMPinclusions[#1]#2% {\startMPinclusions[#1]#2\stopMPinclusions} \def\theMPextensions {\@EA\expanded\@EA{\@EA\writeMPgraphic\@EA{\the\MPextensions;}}} \def\theMPinitializations {\@EA\expanded\@EA{\@EA\writeMPgraphic\@EA{\the\MPinitializations;}}} \startMPinclusions \stopMPinclusions %D \macros %D {iflongMPlines} %D %D When grabbing a graphic deifnition, newlines are turned %D into spaces. By default we split the graphic definition %D at the colon, but long lines are still possible by %D setting the next boolean to true. \newwrite\MPwrite \newwrite\MPstaticwrite \newif\iflongMPlines \longMPlinestrue % we now have \obeyMPlines \ifx \overlaywidth \undefined \def \overlaywidth {4cm} \fi \ifx \overlayheight \undefined \def \overlayheight {3cm} \fi \ifx \overlaylinewidth \undefined \def \overlaylinewidth {0pt} \fi \def\presetMPdefinitions {\edef\overlaywidth {\overlaywidth \space}% \edef\overlayheight {\overlayheight \space}% \edef\overlaylinewidth {\overlaylinewidth\space}% \edef\currentwidth {\the\hsize \space}% \edef\currentheight {\the\vsize \space}} %D The \type {;} aware method (the \type {\else} branch) also %D takes care of \type {btex}||\type {etex}, \type %D {verbatimtex}||\type {etex}. The space after \type {tex} %D is essential, since it protects \type {text}. \newif\ifMPTEXgraphic \let\bufferedMPgraphicsline\empty \appendtoks \globallet\bufferedMPgraphicsline\empty \to \everyMPgraphic \chardef\MPgraphicsscanmode\plustwo % 0=no scanning, 1=simple scanning, 2=less simple, 3=even less % the next fails with \chardef\MPgraphicsscanmode\plusone % % \startMPextensions % gp_num_points_with_tex := 3 ; % \stopMPextensions \def\writeMPgraphic % no big #1 passing here {\iflongMPlines \ifMPTEXgraphic \ifcase\MPgraphicsscanmode \let\next\writeMPgraphiclongR \else \let\next\writeMPgraphiclongT \fi \else \let\next\writeMPgraphiclongN \fi \else \ifMPTEXgraphic \ifcase\MPgraphicsscanmode \let\next\writeMPgraphicshortN % we could \let \writeMPgraphicshortR\writeMPgraphicshortN \else \let\next\writeMPgraphicshortT \fi \else \let\next\writeMPgraphicshortN \fi \fi \next} \appendtoks \obeyMPlines \to \everyMPgraphic % more efficient than in each following grouped write \long\def\writeMPgraphiclongR#1% fast, no scanning {\bgroup \let\par\space \immediate\write\MPwrite{#1}% \egroup} \long\def\writeMPgraphiclongT#1% {\bgroup \let\par\space \longMPflushT#1\empty\par\relax\par \egroup} \long\def\writeMPgraphicshortT#1% {\bgroup \let\par\space \shortMPflushT#1\empty;\relax;% \egroup} \long\def\longMPflushT#1#2\par {\ifx#1\relax \else \dowriteMPgraphicline#1#2tex \relax etex\MPend \expandafter\longMPflushT \fi} \long\def\shortMPflushT#1#2;% {\ifx#1\relax \else \dowriteMPgraphicline#1#2tex \relax etex\MPend \expandafter\shortMPflushT \fi} \long\def\writeMPgraphiclongN#1% {\bgroup \let\par\space \longMPflushN#1\empty\par\relax\par \egroup} \long\def\writeMPgraphicshortN#1% {\bgroup \let\par\space \shortMPflushN#1\empty;\relax;% \egroup} \long\def\longMPflushN#1#2\par {\ifx#1\relax \else \nowriteMPgraphicline#1#2\MPend \expandafter\longMPflushN \fi} \long\def\shortMPflushN#1#2;% {\ifx#1\relax \else \nowriteMPgraphicline#1#2\MPend \expandafter\shortMPflushN \fi} \def\dowriteMPgraphicline{\futurelet\next\dodowriteMPgraphicline} \def\nowriteMPgraphicline{\futurelet\next\nonowriteMPgraphicline} %D Will move (check if next is needed): \long\def\nonowriteMPgraphicline#1\MPend {\ifx\next\empty\else\ifx\next\relax\else \bgroup \let\par\space \iflongMPlines %\immediate\write\MPwrite{#1;}% oeps, ; invalid \immediate\write\MPwrite{#1}% \else \long\edef\ascii{#1}% \expandafter\flushMPgraphicline\ascii\empty;\relax;% \fi \egroup \fi\fi} %D A first version: %D %D \starttyping %D \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend% %D {\ifx\next\empty\else\ifx\next\relax\else %D \bgroup %D \let\par=\space %D \ifx#2\relax %D \immediate\write\MPwrite{#1;}% %D \egroup %D \else %D \global\MPTEXgraphictrue %D \convertargument#2#3\to\ascii %D \immediate\write\MPwrite{#1tex \ascii etex}% %D \egroup %D \dowriteMPgraphicline#4tex \relax etex\MPend %D \fi %D \fi\fi} %D \stoptyping %D The next alternative also handles inclusions well. \newtoks \everyMPTEXgraphic \newif\ifforceMPTEXgraphic %D Before we supported the graph module, we had: %D %D \starttyping %D \convertargument etex\to\MPasciiB %D \convertargument textext\to\MPasciiC % geen "text" %D \convertargument graphictext\to\MPasciiD % geen "text" %D %D \long\def\checkMPTEXgraphic#1% %D {\ifforceMPTEXgraphic %D \global\MPTEXgraphictrue %D \else %D \expandafter\convertargument#1\to\MPasciia %D \doifstringinstringelse\MPasciiB\MPasciia{\global\MPTEXgraphictrue} %D {\doifstringinstringelse\MPasciiC\MPasciia{\global\MPTEXgraphictrue} %D {\doifstringinstringelse\MPasciiD\MPasciia{\global\MPTEXgraphictrue} %D {\global\MPTEXgraphicfalse}}}% %D \fi} %D \stoptyping %D %D The next alternative permits extensions in other modules %D without the need to know the details of testing. \newtoks\MPTEXgraphicchecks \long\def\writecheckedMPgraphic#1% {\ifforceMPTEXgraphic \global\MPTEXgraphictrue \else \global\MPTEXgraphicfalse \edef\ascii{#1}\convertcommand\ascii\to\MPascii \the\MPTEXgraphicchecks\relax % \relax is end condition! \fi \flushMPTEXgraphic % verbatimtex etc \writeMPgraphic{#1}} % potential optimization: pass \ascii %D We could have used a kind of array approach using a %D counter appended to \type {MPascii}, but this is an %D as efficient alternative. (The uglyness comes from %D expanding after the string \type {#1}). \let\MPTEXchecklist\empty \def\forceMPTEXcheck#1% {\addtocommalist{#1}\MPTEXchecklist \expanded{\convertargument#1\noexpand\to \@EA\noexpand\csname MPascii#1\endcsname}% \@EA\appendtoks \@EA\doifincsnameelse\csname MPascii#1\endcsname\MPascii {\global\MPTEXgraphictrue\gobbleuntil\relax}\donothing \to \MPTEXgraphicchecks} \forceMPTEXcheck{etex} \forceMPTEXcheck{textext} \forceMPTEXcheck{graphictext} %D \starttyping %D \forceMPTEXgraphictrue %D %D \forceMPTEXcheck{lintext} %D \forceMPTEXcheck{logtext} %D %D \startMPcode %D draw hlintext.lft(0, 20, 5, 20cm, "@3e") ; %D draw vlogtext.bot(0, 10, 9, 10cm, "@3e") ; %D \stopMPcode %D \stoptyping %D A goodie for Mojca (the gnuplot wizzard): %D %D \starttyping %D \startMPcode %D draw fullcircle scaled 4cm ; %D draw \textext{$\sqrt{\frac{3}{2}^3}$} ; %D \stopMPcode %D \stoptyping \long\def\textext#1{\normalunexpanded{textext("#1")}} % or \detokenize \def\flushMPTEXgraphic {\ifMPTEXgraphic \immediate\write\MPwrite{verbatimtex \the\everyMPTEXgraphic\space etex;}% \fi} \long\def\flushMPgraphicline#1#2;% {\ifx#1\relax \else \immediate\write\MPwrite{#1#2;}% \expandafter\flushMPgraphicline \fi} % the next one fails on btex \vbox {\hbox .. leading to \vbox \hbox % % \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend % {\ifx\next\empty\else\ifx\next\relax\else % \bgroup % \let\par\space % \ifx#2\relax % \iflongMPlines % \immediate\write\MPwrite{#1;}% % \else % \edef\ascii{#1}% % \expandafter\flushMPgraphicline\ascii\empty;\relax;% % \fi % \egroup % \else % \convertargument#2#3\to\ascii % \immediate\write\MPwrite{#1tex \ascii etex}% % \egroup % \dowriteMPgraphicline#4tex \relax etex\MPend % \fi % \fi\fi} % % so we need a two step approach % \long\def\dodowriteMPgraphicline#1tex % % {\doifnextcharelse\relax % {\nododowriteMPgraphicline{#1}} % {\redodowriteMPgraphicline{#1}}} % % better and faster % \long\def\dodowriteMPgraphicline#1tex #2% % {\ifx#2\relax % \expandafter\nododowriteMPgraphicline % \else % \expandafter\redodowriteMPgraphicline % \fi{#1} #2} % % \long\def\redodowriteMPgraphicline#1#2etex#3\MPend % {\ifx\next\empty\else\ifx\next\relax\else % \bgroup % \let\par\space % \convertargument#2\to\ascii % \immediate\write\MPwrite{#1tex \ascii etex}% % \egroup % \dowriteMPgraphicline#3tex \relax etex\MPend % \fi\fi} % % \long\def\nododowriteMPgraphicline#1#2\MPend % {\ifx\next\empty\else\ifx\next\relax\else % \bgroup % \let\par\space % \iflongMPlines % \immediate\write\MPwrite{#1;}% % \else % \long\edef\ascii{#1}% % \expandafter\flushMPgraphicline\ascii\empty;\relax;% % \fi % \egroup % \fi\fi} % extra scanning \long\def\dodowriteMPgraphicline#1tex #2% kind of ok {\ifx#2\relax \expandafter\nododowriteMPgraphicline \else \ifcase\MPgraphicsscanmode % can't happen \or \@EAEAEA\redodowriteMPgraphicline \or \doifinstringelse{b$} {#1$}{\@EAEAEA\redodowriteMPgraphicline}% {\doifinstringelse{verbatim$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}% {\@EAEAEA\dododowriteMPgraphicline}}% \else \doifinstringelse { b$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}% {\doifinstringelse {(b$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}% {\doifinstringelse {=b$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}% {\doifinstringelse{verbatim$}{#1$}{\@EAEAEA\redodowriteMPgraphicline}% {\@EAEAEA\dododowriteMPgraphicline}}}}% \fi \fi{#1} #2} \def\dododowriteMPgraphicline#1#2\MPend {\doifsomething{#1}{\xdef\bufferedMPgraphicsline{\bufferedMPgraphicsline#1tex }}% \dowriteMPgraphicline#2tex \relax etex\MPend} \long\def\redodowriteMPgraphicline#1#2etex#3\MPend {\ifx\next\empty \else\ifx\next\relax \else \bgroup \let\par\space \convertargument#2\to\ascii \immediate\write\MPwrite{\bufferedMPgraphicsline#1tex \ascii etex}% \globallet\bufferedMPgraphicsline\empty \egroup \dowriteMPgraphicline#3tex \relax etex\MPend \fi\fi} \long\def\nododowriteMPgraphicline#1#2\MPend {\ifx\next\empty \else\ifx\next\relax \else \bgroup \let\par\space \iflongMPlines \immediate\write\MPwrite{\bufferedMPgraphicsline#1;}% \globallet\bufferedMPgraphicsline\empty \else \long\edef\ascii{\bufferedMPgraphicsline#1}% \expandafter\flushMPgraphicline\ascii\empty;\relax;% \fi \egroup \fi\fi} %D This stripper is suboptimal in the sense that more %D \type{;}'s are output than feasible. Anyhow, \METAPOST\ %D can handle this and users may consider it being a sort %D of error prevention bonus. \ifx\blabelgroup\undefined \let\blabelgroup\bgroup \let\elabelgroup\egroup \fi \newconditional\firstMPgraphic \settrue\firstMPgraphic \appendtoks \let \# \letterhash \let \_ \letterunderscore \let \& \letterampersand \let \{ \letteropenbrace \let \} \letterclosebrace \to \everyMPgraphic %D Not the best place but we need to make sure that no funny %D active characters creep in. Some day we will move this code. \ifx\disablediscretionaries\undefined \let\disablediscretionaries\relax \fi \appendtoks \disablediscretionaries \to \everyMPgraphic \def\writeMPgraph {\immediate\write\MPwrite{mpgraph:=\the\currentMPgraphic;}} \def\startwritingMPgraphic {\blabelgroup \global\advance\nofMPgraphics \plusone \ifMPrun \else \allocateMPslot\currentMPgraphic \fi \enableincludeMPgraphics \xdef\MPgraphic{\the\currentMPgraphic}% \the\everyMPgraphic \presetMPdefinitions % moved to here from \writeMPgraphic \ifrunMPgraphics \openMPgraphicfile1{runtime}% % no reset here ! \theMPextensions \theMPinclusions \else \openMPgraphicfile0{collected}% % reset here ! global added (due to adding \blabelgroup) \theMPextensions \theMPinclusions \global\let\theMPextensions\relax \global\let\theMPinclusions\relax \fi \theMPinitializations % always \ifMPrun \else \ifMPwrapper \immediate\write\MPwrite{let mprunend = end ;}% \immediate\write\MPwrite{beginfig(\the\currentMPgraphic);}% \fi \fi \globallet\flushMPgraphics\closeMPgraphicfiles % \dodostopwritingMPgraphic \globallet\stopwritingMPgraphic\dostopwritingMPgraphic} \let\MPgraphicfiles\empty \let\MPinputtranslation\empty \def\openMPgraphicfile#1#2% #1=alwaysopen #2=message {\@EA\ifx\csname\@@MPG\@@MPG\MPgraphicfile\endcsname\relax \donetrue % \@EA\newwrite\csname\@@MPG\@@MPG\MPgraphicfile\endcsname % for the sake of plain usage \@EA\@EA\csname newwrite\endcsname\csname\@@MPG\@@MPG\MPgraphicfile\endcsname \doglobal\addtocommalist\MPgraphicfile\MPgraphicfiles \else \ifcase#1\relax\donefalse\else\donetrue\fi \fi \@EA\let\@EA\MPwrite\csname\@@MPG\@@MPG\MPgraphicfile\endcsname \ifdone \immediate\openout\MPwrite\MPgraphicfile.mp\relax \ifx\MPinputtranslation\empty\else \immediate\write\MPwrite{\MPinputtranslation}% \immediate\write\MPwrite{verbatimtex \MPinputtranslation etex ;}% \fi \immediate\write\MPwrite{\letterpercent\space #2 graphics of job "\jobname"}% \writeMPgraph \setMPrandomseed \fi} \def\dostopwritingMPgraphic {\ifMPrun \else \ifMPwrapper \immediate\write\MPwrite{endfig;}% \immediate\write\MPwrite{let end=mprunend;}% \fi \fi \ifrunMPgraphics \dodostopwritingMPgraphic \fi \elabelgroup} \def\dodostopwritingMPgraphic {\ifnum\currentMPgraphic>\zerocount \donetrue \else\ifMPrun \donetrue \else \donefalse \fi\fi \ifdone \finishwritingMPgraphics \runMPgraphic\MPgraphicfile \fi \globallet\flushMPgraphics\relax} \def\finishwritingMPgraphics {\ifMPwrapper\immediate\write\MPwrite{end.}\fi \immediate\closeout\MPwrite} \def\closeMPgraphicfiles {\ifrunMPgraphics \else \ifx\MPgraphicsfiles\empty\else \def\docommand##1% {\message{[flush and process ##1.mp afterwards]}% \@EA\let\@EA\MPwrite\csname\@@MPG\@@MPG##1\endcsname \finishwritingMPgraphics}% \processcommacommand[\MPgraphicfiles]\docommand \fi \fi} \let\stopwritingMPgraphic\relax \let\flushMPgraphics \relax %D By default each graphic gets its own slot (number). Later %D on we will define a recycle bin. \def \allocateMPslot#1{\global\advance#1\plusone} \def\deallocateMPslot#1{} %D \macros %D {translateMPinput} %D %D For my polish friends: %D %D \starttyping %D % translate=il2-pl %D %D \translateMPinput{il2-pl} %D %D \startMPenvironment[global] %D \setupbodyfont[plr] %D \stopMPenvironment %D %D \TeX: ± ¶ %D %D \startMPcode %D draw btex MetaPost: ± ¶ etex scaled 5 ; %D \stopMPcode %D \stoptyping \def\translateMPinput#1% % {\xdef\MPinputtranslation{\letterpercent -translate-file=#1\space}} % at some point % {\xdef\MPinputtranslation{\letterpercent --8bit}} % some time later {\globallet\MPinputtranslation\empty} % the new mpost is 8 bit clean %D \macros %D {setMPrandomseed} %D %D Did you notice the random seed initialization? This is %D needed because \METAPOST\ has a rather poor initialization, %D which in some implementations depends on the time in %D minutes. So, in quick successive runs, random is not that %D random. \newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default \def\setMPrandomseed {\ifsetMPrandomseed \ifx\getrandomnumber\undefined \else \getrandomnumber\localMPseed\zerocount{4095}% \writeMPgraphic{randomseed:=\localMPseed;}% \fi\fi} %D This feature has become optional. Thanks to Fabrice Popineau, %D \METAPOST\ can now do a far better job! %D \macros %D {flushMPgraphics} %D %D When we use the indirect method, all graphics are saved in %D one file. This means that we cannot close this file after %D every \type{\stopMPgraphic}. Therefore we need to say: %D %D \starttyping %D \flushMPgraphics %D \stoptyping %D %D else the file is closed without writing the \METAPOST\ end %D command. One will notice this fast enough when in indirect %D mode. When using the direct mode this command is not %D implicitly needed, but ommiting it makes files less %D portable. %D \macros %D {loadcurrentMPgraphic, %D placeMPgraphic} %D %D Once defined, we can call for this graphic by saying: %D %D \starttyping %D \loadcurrentMPgraphic{setups} %D \placeMPgraphic %D \stoptyping %D %D This two stage insert permits some intermediate manipulations %D of the graphic, which temporary saved in: \newbox\MPgraphicbox \def\doloadcurrentMPgraphic#1% {\loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{#1}% \deallocateMPslot\currentMPgraphic} % added \ifCONTEXT \def\loadcurrentMPgraphic{\dosinglegroupempty\doloadcurrentMPgraphic} \else \let\loadcurrentMPgraphic\doloadcurrentMPgraphic \fi \def\loadMPgraphic#1#2% {\setbox\MPgraphicbox\hbox{\ifinsertMPgraphics\insertMPfile{#1}{#2}\fi}} \def\MPllx{0} \def\MPlly{0} % \def\placeMPgraphic% % {\ifMPshiftdrawing % \hbox{\hskip\MPllx\onebasepoint\raise\MPlly\onebasepoint\box\MPgraphicbox}% % \else % \box\MPgraphicbox % \fi} % % experimental: \def\placeMPgraphic {\ifMPshiftdrawing \edef\next {\wd\MPgraphicbox\the\wd\MPgraphicbox \ht\MPgraphicbox\the\ht\MPgraphicbox \dp\MPgraphicbox\the\dp\MPgraphicbox}% \setbox\MPgraphicbox\hbox {\hskip\MPllx\onebasepoint\raise\MPlly\onebasepoint\box\MPgraphicbox}% \next \fi \box\MPgraphicbox} %D \macros %D {startreusableMPgraphic, reuseMPgraphic, useMPbox} %D %D One can use the next macro for defining graphics that are %D to be reused. When the next switch is set, graphics are %D cached. \newif\ifuseMPbox \useMPboxtrue %D We assume that one can set objects: %D %D \starttyping %D \def\douseMPbox#1% %D {\setobject{MP}{#1}\vbox %D {\forgetall %D \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}% %D \deallocateMPslot\currentMPgraphic %D \placeMPgraphic}% %D \setgvalue{#1}{\getobject{MP}{#1}}} %D \stoptyping %D %D More safe is to use a number for \type {{MP}{#1}} which permits %D redefinition. We also saves the boundingbox. This helps positioning %D reused graphics in layers. \newcount\MPobjectcounter \ifx\getobject\undefined \def\setobject#1#2{\setbox\scratchbox} \fi % makes dep check happy \ifx\getobject\undefined \def\getobject#1#2{\box \scratchbox} \fi % makes dep check happy \def\douseMPbox#1% {\global\advance\MPobjectcounter\plusone \setobject{MP}{\number\MPobjectcounter}\vbox {\forgetall \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}% \deallocateMPslot\currentMPgraphic \placeMPgraphic}% \setxvalue{#1}% {\noexpand\dodouseMPbox{\number\MPobjectcounter}{\MPllx}{\MPlly}{\MPurx}{\MPury}}} \def\dodouseMPbox#1#2#3#4#5% space delimiting would save some tokens {\xdef\MPllx{#2}% but it's not worth the effort and looks \xdef\MPlly{#3}% ugly as well \xdef\MPurx{#4}% \xdef\MPury{#5}% \getobject{MP}{#1}} \def\nouseMPbox#1% {\setxvalue{#1}% {\noexpand\forgetall \noexpand\loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}% \noexpand\deallocateMPslot{\currentMPgraphic}% \noexpand\placeMPgraphic}} \ifCONTEXT \else \let\douseMPbox\nouseMPbox \fi \ifCONTEXT \else \let\doifobjectssupportedelse\relax \fi \long\def\handlereusableMPgraphic#1#2% {\blabelgroup \enableincludeMPgraphics \startMPgraphic#2\stopMPgraphic \doifobjectssupportedelse\donothing\useMPboxfalse \ifuseMPbox \expandafter \douseMPbox \else \expandafter \nouseMPbox \fi {\@@MPG#1}% \getvalue{\@@MPG#1}% \elabelgroup} % \long\def\startreusableMPgraphic#1#2\stopreusableMPgraphic % {\ifundefined{\@@MPG#1}% % \long\setgvalue{\@@MPG#1}{\handlereusableMPgraphic{#1}{#2}}% % \fi} \long\def\dostartreusableMPgraphic#1#2\stopreusableMPgraphic {\blabelgroup \long\setgvalue{\@@MPG#1}{\handlereusableMPgraphic{#1}{#2}}% \elabelgroup} \def\reuseMPgraphic#1% {\blabelgroup \getvalue{\@@MPG#1}% \elabelgroup} \let\stopreusableMPgraphic \relax % so that we can use it in \expanded %D \macros %D {startuseMPgraphic,useMPgraphic} %D %D The every||time||it's||used original one is defined below. %D This one makes sense when the graphic uses random numbers. %D %D We can run (process graphic) without including them at that %D particular place. Therefore we explicitly disable %D inclusions (resulting in an dummy figure) when we are in MP %D run mode (see mfun-004 for an example, we process an %D example buffer which produced graphics). \long\def\handleuseMPgraphic#1#2% {\bgroup \enableincludeMPgraphics \startMPgraphic#2\stopMPgraphic \ifMPrun \else \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}% \placeMPgraphic \fi \deallocateMPslot\currentMPgraphic \egroup} \long\def\startuseMPgraphic {\blabelgroup \obeyMPlines \dostartuseMPgraphic} \long\def\dostartuseMPgraphic#1#2\stopuseMPgraphic {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}}% \elabelgroup} \long\def\startusableMPgraphic {\blabelgroup \obeyMPlines \dostartusableMPgraphic} \long\def\dostartusableMPgraphic#1#2\stopusableMPgraphic {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}}% \elabelgroup} \let\useMPgraphic\reuseMPgraphic \let\stopuseMPgraphic \relax % so that we can use it in \expanded \let\stopusableMPgraphic \relax % so that we can use it in \expanded %D \macros %D {doifMPgraphicelse} %D %D For (mainly internal) purposes we provide a test macro. % \def\doifMPgraphicelse#1% % {\doifdefinedelse{\@@MPG#1}} \def\doifMPgraphicelse#1% {\blabelgroup \doifdefinedelse{\@@MPG#1}% {\elabelgroup\firstoftwoarguments} {\elabelgroup\secondoftwoarguments}} %D \macros %D {includeMPgraphic} %D %D In a graphic one can call up another (predefined one) %D like: %D %D \starttyping %D \startuseMPgraphic{a} %D fill fullcircle scaled 100 ; %D \stopuseMPgraphic %D %D \startuseMPgraphic{b} %D \includeMPgraphic{a} %D fill fullsquare rotated 45 scaled 50 withcolor red ; %D \stopuseMPgraphic %D %D \useMPgraphic{b} %D \stoptyping \def\includeMPgraphic#1% {\executeifdefined{\@@MPG#1};} % ; if not found \def\enableincludeMPgraphics {\let\handleuseMPgraphic \secondoftwoarguments \let\handlereusableMPgraphic\secondoftwoarguments} %D We didn't yet define the macro responsible for processing %D the graphic from within \TEX. \def\runMPgraphic#1% {\ifrunMPgraphics \executeMETAPOST{#1}% \else % \message{[flush and process \MPgraphicfile.mp afterwards]}% \fi} %D \macros %D {useMETAFUNformat} %D %D For faster running, one can generate a format, saying %D %D \starttyping %D mpost -ini context %D \stoptyping %D %D (The resulting \type {mem} file should be moved to the %D right location. Watch out for misatching \type {progname} %D directives, since they can clutter memory. \newif\ifuseMETAFUNformat %D \macros %D {executeMetaPost, executeMETAPOST, executesystemcommand} %D %D With \type{\executeMETAPOST} being defined as: \ifx\undefined\executeMETAPOST \def\executeMETAPOST#1{\executesystemcommand{\executeMetaPost{#1}}} \fi %D There are two system dependant definitions: \ifx\undefined\executesystemcommand \def\executesystemcommand#1{\immediate\write18{#1}} \fi \ifx\TEXEXECcommand \undefined \def\TEXEXECcommand{texmfstart texexec} \fi \ifx\undefined\executeMetaPost \ifx\undefined\interactionmode \chardef\interactionmode=255 \fi \def\MPOSTbatchswitch {-interaction=batchmode} % was -int, but newer mpost does not support partial flags \def\MPOSTnonstopswitch {-interaction=nonstopmode} % was -int, but newer mpost does not support partial flags \def\MPOSTformatswitch {-progname=metafun -mem=} \def\MPOSTdriver {dvips} \def\executeMPOST#1% direct call {mpost \ifcase\interactionmode\MPOSTbatchswitch\or\MPOSTnonstopswitch\fi \space\ifuseMETAFUNformat \MPOSTformatswitch metafun \fi #1} \def\executeMPTEX#1% slower, due to nested texexec call {\TEXEXECcommand\space --batch \ifcase\interactionmode --logfile='mptex.log' \fi --output=\MPOSTdriver\space \ifuseMETAFUNformat --mpformat=metafun \fi --mptex --nomp --once #1} \def\executeMetaPost {\ifrunMPTEXgraphics \ifMPTEXgraphic \@EAEAEA\executeMPTEX \else \@EAEAEA\executeMPOST \fi \else \@EA\executeMPOST \fi} \fi %D The batchmode and nonstopmode (introduced in 2003 for %D Patrick Gundlach) switches may differ per binary and are %D supported by \TEXEXEC. %D \macros %D {insertMPfile} %D %D One can define this command in advance or redefine it after %D loading this module. The same goes for the forward %D reference to the figure loading macro: \ifx\undefined\insertMPfile \def\insertMPfile#1#2% {\ifx\undefined\externalfigure \message{[insert file #1 here]}% \else \externalfigure [#1] [\c!type=\c!mps,\c!object=\v!no, \c!symbol=\v!yes,\c!reset=\v!yes, \c!maxwidth=,\c!maxheight=, \c!frame=\v!off,\c!background=, #2]% \fi} \fi %D This macro takes {\em two} arguments, the second one can be %D used to pass info to the inclusion macro. Some examples %D of its use can be found in the modules \type{supp-tpi} and %D \type{prag-log}. %D This module can be used in \PLAIN\ \TEX too. When using %D \DVIPS, just try to process: %D %D \starttyping %D \input supp-mps %D %D \runMPgraphicstrue %D %D \def\insertMPfile#1#2% %D {\special{psfile=#1}} %D %D \startuseMPgraphic{1} %D prologues := 1; %D draw (0,0) withpen pencircle scaled 100; %D \stopuseMPgraphic %D %D \useMPgraphic{1} %D \stoptyping %D %D Don't forget to enable \type{\write18}. When does not say %D \type{\runMPgraphicstrue}, the \METAPOST\ scratch file %D must be closed by saying %D %D \starttyping %D \flushMPgraphics %D \stoptyping %D %D When using the indirect method, one has to process the file %D \type{mpgraph.mp} between two successive \TEX\ runs. %D %D \METAPOST\ needs the public domain \DVI\ to \POSTSCRIPT\ %D converter \DVIPS. This symbiosis originates in the need to %D include the fonts (glyphs) that \METAPOST\ uses in the %D \POSTSCRIPT\ file. Driver independancy was one of my %D prerequisites for using \METAPOST, so I decided to build %D this kind of support myself. Personally I consider driver %D dependancy a drawback for the dissemination of such a %D package. The second part of this module more or less %D decouples \METAPOST\ and \DVIPS. %D %D The macros hereafter are copied from the module %D \type{m-metapost}. After writing module \type{supp-pdf} I %D added this method to the module named and after a while %D decided to hook it into module \type{spec-yy}. Therefore %D they made it into a support module, but in a slightly %D different way. %D \macros %D {includeMPfonts, ifincludeMPfonts} %D %D The method we use is both robust and simple: one can do %D with calling the next macro with the filename as argument: %D %D \starttyping %D \includeMPfonts{filename} %D \stoptyping %D %D We can turn of this mechanism with: %D %D \starttyping %D \includeMPfontsfalse %D \stoptyping %D %D {\em Currently this method fails for situations where the %D font definition is not on one line, which is he case when %D unkerned fonts are used along with long lines. One solution %D for this is to increase the value of \type {max_print_line} %D in \type {texmf.cnf}.}} \newif\ifincludeMPfonts \includeMPfontstrue \def\includeMPfonts#1% {\ifincludeMPfonts \bgroup \message{[MP fonts #1]}% %\uncatcodespecials \endlinechar\minusone \setMPspecials \obeyMPspecials \setbox\scratchbox\hbox {\hskip-\maxdimen \doprocessfile\scratchread{#1}\handleMPfont}% \smashbox\scratchbox \box\scratchbox \egroup \fi} \def\UseMetaPostGraphic {\includeMPfonts} % upward compatible \def\DontUseMetaPostGraphics {\includeMPfontsfalse} % upward compatible %D The characters are collected in a box and moved as far as %D possible into the left margin. The resulting box has no %D dimensions and can be prepended (appended) to the special %D that handles the inclusion. The characters are in the file %D but made invisible. %D %D In \CONTEXT\ font handling is intergrated in the figure %D inclusion macros. A decent plain \TEX\ alternative is: %D %D \starttyping %D \def\includeMPgraphic#1% %D {\hbox\bgroup %D \includeMPfonts{#1}% %D \dogetEPSboundingbox{#1}{\dimen2}{\dimen4}{\dimen6}{\dimen8}% %D \advance\dimen6 by -\dimen2 %D \advance\dimen8 by -\dimen4 %D \vbox to \dimen8 %D {\forgetall %D \vfill %D \hsize\dimen6 %D \special %D {PSfile="#1"\space %D llx=\EPSllx\space %D lly=\EPSlly\space %D urx=\EPSurx\space %D ury=\EPSury\space}}% %D \egroup} %D \stoptyping %D %D This macro needs \type {supp-eps.tex} and provided no %D scaling. For \LATEX\ users the next one will do: %D %D \starttyping %D \def\includeMPgraphic#1#% %D {\hbox\bgroup %D \def\includeMPgraphics##1% %D {\includeMPfonts{##1}% %D \includegraphics[typetype=mps,#1]{##1}% or whatever type they use %D \egroup}% %D \includeMPgraphics} %D \stoptyping %D We scan the graphics file for the \type{fshow} operator, %D that is, lines that start with \type{(}. If found it %D interprets the line, which looks like: %D %D \starttyping %D (string ... string) font size fshow %D \stoptyping %D %D Font definitions specified in the preamble are simply %D ignored. Only lines starting with \type{(} are interpreted. \def\dohandleMPfont#1#2\relax {\if#1(\expandafter\includeMPcharacters\fileline\relax\fi} \def\handleMPfont {\expandafter\dohandleMPfont\fileline\relax} %D Before we start scanning for data, we first change some %D \CATCODES. The first set of macro's is copied from module %D \type{supp-pdf}. This scheme is a bit overdone for this %D module, but using the same macros saves us some memory. \def\octalMPcharacter#1#2#3% {\char'#1#2#3\relax} \bgroup \catcode`\|=\@@comment \catcode`\%=\@@active \catcode`\[=\@@active \catcode`\]=\@@active \catcode`\{=\@@active \catcode`\}=\@@active \catcode`B=\@@begingroup \catcode`E=\@@endgroup \gdef\keepMPspecials| B\let%\letterpercent| \def[B\noexpand[E| \def]B\noexpand]E| \def{B\noexpand{E| \def}B\noexpand}EE \gdef\ignoreMPspecials| B\let%\letterpercent| \def[BE| \def]BE| \def{BE| \def}BEE \gdef\obeyMPspecials| B\def%B\char 37\relax E| \def[B\char 91\relax E| \def]B\char 93\relax E| \def{B\char123\relax E| \def}B\char125\relax EE \gdef\setMPspecials| B\setnaturalcatcodes \catcode`\\=\@@escape \catcode`\%=\@@active \catcode`\[=\@@active \catcode`\]=\@@active \catcode`\{=\@@active \catcode`\}=\@@active \lccode`\-=0 | latex sets this to `\- \lccode`\%=`\% | otherwise it's seen as a number \def\(B\char40\relax E| \def\)B\char41\relax E| \def\\B\char92\relax E| \def\0B\octalMPcharacter0E| \def\1B\octalMPcharacter1E| \def\2B\octalMPcharacter2E| \def\3B\octalMPcharacter3E| \def\4B\octalMPcharacter4E| \def\5B\octalMPcharacter5E| \def\6B\octalMPcharacter6E| \def\7B\octalMPcharacter7E| \def\8B\octalMPcharacter8E| \def\9B\octalMPcharacter9EE \egroup %D The lines starting with \type{(} are interpreted and %D handled by %D %D \starttyping %D \def\includeMPcharacters(#1) #2 #3 #4\relax% %D {\font\temp=#2 at #3bp\temp#1} %D \stoptyping %D %D While processing some \TUG~98 proceedings, I also had to %D deal with: %D %D \starttyping %D /nfont {10 div dup scale 10} def %D (T) ANTTB 7.13086 nfont fshow %D \stoptyping %D %D which comes to rounding sizes. This is something %D experimental. (The macro in supp-pdf.tex is more %D advanced.) \def\PSnfont{nfont} \def\includeMPcharacters(#1) #2 #3 #4#5#6#7#8#9\relax {\edef\temp{#4#5#6#7#8}% \ifx\temp\PSnfont % round font size (to pt) \scratchdimen#3\onepoint \ifdim\scratchdimen<\onepoint \def\size{1pt}% \else \advance\scratchdimen .5\onepoint \def\size##1.##2\relax{\def\size{##1pt}}% \expandafter\size\the\scratchdimen\relax \fi \else \edef\size{#3bp}% \fi \font\temp=#2 at \size \temp\if#1 \char32\else#1\fi} %D This method is both robust and reasonable fast. The only %D disadvantage is that when not embedded properly in the %D graphics inclusion macros, one has to load all graphics by %D hand. %D Now let's see if things work all right and show the example %D files that are part of the \METAPOST\ distribution: %D %D \setupexternalfigures[directory={../sample}] %D \startlinecorrection %D \setupalign[middle] %D \leavevmode %D \startcombination[3*3] %D {\externalfigure[mp-exa-1][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-2][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-3][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-4][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-5][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-6][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-7][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-8][frame=on,width=.2\hsize]} {} %D {\externalfigure[mp-exa-9][frame=on,width=.2\hsize]} {} %D \stopcombination %D \stoplinecorrection %D %D Here we used calls like: %D %D \starttyping %D \externalfigure[mp-exa-1][methode-mps,frame=on,width=.2\hsize] %D \stoptyping %D \macros %D {convertMPcolors, %D ifconvertMPcolors,ifreduceMPcolors,ifforceMPcolors} %D %D When I told the editors that I wanted to use colored %D \METAPOST\ graphics in the color issue of the \MAPS, I was %D asked to use the \cap{CMYK} colorspace instead of \cap{RGB} %D one. However, \METAPOST\ only supports \cap{RGB} colors. I %D decided to write a utility to convert the \type %D {setrgbcolor} operators into \type {setcmykcolor} ones, and %D some experiments showed me that I could best let \TEX\ do it %D itself. Here it is: %D %D There are two booleans that control the conversion process. %D These are false by default. \newif\ifconvertMPcolors \newif\ifreduceMPcolors \newif\ifforcegrayMPcolors %D The main macro is called as: %D %D \starttyping %D \convertMPcolors{filename} %D \stoptyping %D %D When active, this macro returns a message saying if indeed %D conversion took place. The old file is overwritten! This %D saves time in a succesive passes and can't harm, simply %D because MP can generate them anew. \def\convertMPcolorpath{} \def\convertMPcolorfile{metacmyk.tmp} \def\convertMPcolors#1% todo: open on local path, no copy {\bgroup \ifforcegrayMPcolors \donetrue \else\ifconvertMPcolors \donetrue \else \donefalse \fi\fi \ifdone \message{[MP color conversion #1}% \endlinechar\minusone \uncatcodespecials \donefalse \immediate\openout\scratchwrite\convertMPcolorpath\convertMPcolorfile\relax \doprocessfile\scratchread{#1}\handleMPcolor \immediate\closeout\scratchwrite \ifdone \immediate\openout\scratchwrite\convertMPcolorpath#1\relax \doprocessfile\scratchread{\convertMPcolorpath \convertMPcolorfile}\handleMPcopy \immediate\closeout\scratchwrite \message{done]}% \else \message{not needed]}% \fi \immediate\openout\scratchwrite\convertMPcolorpath\convertMPcolorfile \immediate\closeout\scratchwrite \fi \egroup} %D The process is rather simple: read a line, look for the %D \type {setrgbcolor} operator, recalculate the components and %D check for gray reduction or black removal, write the result %D to a temporary file, and go on. Afterwards, the file is %D copied back. We don't have to reduce to gray scales; %D \METAPOST\ already takes care of that. %D The next macro is needed for forced conversion. This macro %D is copied from \type{colo-ini}, just in case one uses this %D module outside \CONTEXT. \ifx\@@cl@@s \undefined \def\@@cl@@s{0} \fi \ifx\convertRGBtoGRAY\undefined \def\convertRGBtoGRAY#1#2#3% {\scratchdimen#1\onepoint \scratchdimen300\scratchdimen \scratchcounter\scratchdimen \scratchdimen#2\onepoint \scratchdimen590\scratchdimen \advance\scratchcounter \scratchdimen \scratchdimen#3\onepoint \scratchdimen110\scratchdimen \advance\scratchcounter \scratchdimen \advance\scratchcounter \!!medcard \divide\scratchcounter \!!maxcard \edef\@@cl@@s{\realcolorvalue\scratchcounter}} \fi %D BTW, this code is quite old, and not as complete as the %D \PDF\ converter, which also handles spot colors and so. \def\handleMPcolor {\expandafter\dohandleMPcolor\fileline setrgbcolor*\\} \def\dohandleMPcolor#1setrgbcolor#2#3\\% {\if#2*% \immediate\write\scratchwrite{#1}% \else \dodohandleMPcolor#1setrgbcolor#2#3\\% \fi} \def\dodohandleMPcolor#1 #2 #3setrgbcolor#4setrgbcolor*\\% old and maybe broke {\bgroup \ifdim#1pt=.123pt \immediate\write\scratchwrite{#1 #2 #3 setrgbcolor}% \else \ifforcegrayMPcolors \convertRGBtoGRAY{#1}{#2}{#3}% \immediate\write\scratchwrite {\@@cl@@s \space setgray #4}% \else \dimen0=\onepoint \advance\dimen0 -#1\points \dimen2=\onepoint \advance\dimen2 -#2\points \dimen4=\onepoint \advance\dimen4 -#3\points \ifreduceMPcolors \dimen6\dimen0 \ifdim\dimen2<\dimen6 \dimen6\dimen2 \fi \ifdim\dimen4<\dimen6 \dimen6\dimen4 \fi \advance\dimen0 -\dimen6 \advance\dimen2 -\dimen6 \advance\dimen4 -\dimen6 \else \dimen6\zeropoint \fi \immediate\write\scratchwrite {\withoutpt\the\dimen0 \space \withoutpt\the\dimen2 \space \withoutpt\the\dimen4 \space \withoutpt\the\dimen6 \space setcmykcolor #4}% \fi \fi \egroup \donetrue} % needed for message \def\handleMPcopy {\immediate\write\scratchwrite{\fileline}} %D The next examples show the color conversion macros in %D action. These examples also demonstrate in||text \METAPOST\ %D handling. As we will see, the conversion is hooked into the %D \CONTEXT\ color mechanism. %D %D By setting both \type{rgb} and \type{cmyk} to off, we force %D conversion to gray scales using: %D %D \placeformula[-] %D \startformula %D G = .30r + .59g + .11b %D \stopformula %D %D By using buffers, we keep the \ASCII\ layout clean: %D %D \startbuffer %D \startbuffer[rgb] %D \setupcolors[rgb=ja,cmyk=nee,reduction=no,conversion=no] %D \useMPgraphic{hans} %D \stopbuffer %D %D \startbuffer[cmyk] %D \setupcolors[rgb=nee,cmyk=ja,reduction=no,conversion=no] %D \useMPgraphic{hans} %D \stopbuffer %D %D \startbuffer[cmy] %D \setupcolors[rgb=nee,cmyk=ja,reduction=yes,conversion=no] %D \useMPgraphic{hans} %D \stopbuffer %D %D \startbuffer[gray] %D \setupcolors[rgb=nee,cmyk=nee,reduction=no,conversion=no] %D \useMPgraphic{hans} %D \stopbuffer %D \stopbuffer %D %D \typebuffer %D \getbuffer %D %D The graphic is rather simple and is generated each time %D it's called: %D %D \global\runMPgraphicstrue %D %D \startbuffer %D \startbuffer[graphic] %D \startuseMPgraphic{hans} %D width :=\the\textwidth/5; %D height := width/4; %D fill fullcircle %D xscaled width %D yscaled height %D withcolor (\RedGreenBlue); %D \stopuseMPgraphic %D \stopbuffer %D \stopbuffer %D %D \typebuffer %D \getbuffer %D %D Next we combine the four alternative interpretations in a %D combination: %D %D \startbuffer %D \startbuffer[result] %D \startcombination[4] %D {\getbuffer[rgb]} {\tfxx original} %D {\getbuffer[cmyk]} {\ttxx\string\convertMPcolorstrue} %D {\getbuffer[cmy]} {\ttxx\string\reduceMPcolorstrue} %D {\getbuffer[gray]} {\ttxx\string\forcegrayMPcolorstrue} %D \stopcombination %D \stopbuffer %D \stopbuffer %D %D \typebuffer %D \getbuffer %D %D Finally we call the buffers, using different setting: %D %D \startbuffer %D \placefigure %D {\METAPOST\ color conversions} %D {\def\RedGreenBlue{.1,.4,.6}\getbuffer[graphic]\getbuffer[result]\vskip6pt %D \def\RedGreenBlue{.1,.6,.4}\getbuffer[graphic]\getbuffer[result]\vskip6pt %D \def\RedGreenBlue{.4,.1,.6}\getbuffer[graphic]\getbuffer[result]\vskip6pt %D \def\RedGreenBlue{.4,.6,.1}\getbuffer[graphic]\getbuffer[result]\vskip6pt %D \def\RedGreenBlue{.6,.1,.4}\getbuffer[graphic]\getbuffer[result]\vskip6pt %D \def\RedGreenBlue{.6,.4,.1}\getbuffer[graphic]\getbuffer[result]} %D \stopbuffer %D %D \typebuffer %D \getbuffer %D %D By the way, when the \POSTSCRIPT\ file resulting from %D this input is converted into \PDF\ and viewed in Acrobat %D Reader, one can quite different colors from those %D displayed in \GHOSTSCRIPT, which view equals the %D \POSTSCRIPT\ originals. %D \macros %D {experimental} %D %D Some experimental macros: %D %D \starttyping %D \startMPdrawing %D \stopMPdrawing %D \pushMPdrawing %D \popMPdrawing %D \resetMPdrawing %D \ifMPdrawingdone %D \getMPdrawing %D \MPdivten[number] %D \stoptyping %D %D These macros are used in \PPCHTEX. \let\MPdrawingdata\empty \newif\ifMPdrawingdone \MPdrawingdonefalse \newif\ifMPshiftdrawing \MPshiftdrawingfalse \def\resetMPdrawing {\globallet\MPdrawingdata\empty \global\MPdrawingdonefalse} % why global push/pop here? \def\pushMPdrawing {\globalpushmacro\MPdrawingdata \globallet\MPdrawingdata\empty} \def\popMPdrawing {\globalpopmacro\MPdrawingdata} \def\getMPdrawing {\ifMPdrawingdone \expandafter\startMPgraphic\MPdrawingdata\stopMPgraphic \loadcurrentMPgraphic{}% \deallocateMPslot\currentMPgraphic \placeMPgraphic \fi} \def\startMPdrawing {\dosingleempty\dostartMPdrawing} \long\def\dostartMPdrawing[#1]#2\stopMPdrawing {\relax \bgroup \enableincludeMPgraphics \presetMPdefinitions % in case #2 has measures \doifelse{#1}{-}{\convertargument#2\to\asciia}{\long\def\asciia{#2}}% \long\xdef\MPdrawingdata{\MPdrawingdata\asciia}% \egroup} \let\stopMPdrawing\relax \def\MPdivten[#1]% {\@EA\@EA\@EA\doMPdivten\@EA\@EA\@EA[\@EA#1]} \def\doMPdivten[#1]% {\ifnum#1> 9999 \dodoMPdivtenB#1\else \ifnum#1> 999 \dodoMPdivtenC#1\else \ifnum#1> 99 \dodoMPdivtenD#1\else \ifnum#1> 9 \dodoMPdivtenE#1\else \ifnum#1> 0 \dodoMPdivtenF#1\else \ifnum#1<-9999 \dodoMPdivtenA#1\else \ifnum#1< -999 \dodoMPdivtenB#1\else \ifnum#1< -99 \dodoMPdivtenC#1\else \ifnum#1< -9 \dodoMPdivtenD#1\else \ifnum#1< 0 \dodoMPdivtenE#1\else 0 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} \def\dodoMPdivtenA#1#2#3#4#5#6{#1#2#3#4#5.#6} \def\dodoMPdivtenB #1#2#3#4#5{#1#2#3#4.#5} \def\dodoMPdivtenC #1#2#3#4{#1#2#3.#4} \def\dodoMPdivtenD #1#2#3{#1#2.#3} \def\dodoMPdivtenE #1#2{#1.#2} \def\dodoMPdivtenF #1{.#1} % if we assume etex ... \def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax} %D \macros %D {startMPclip,grabMPclippath} %D %D We can use \METAPOST\ to calculate arbitrary clipping %D paths. Such a path is defined by (for instance): %D %D \starttyping %D \startMPclip{window} %D clip currentpicture to fullcircle xscaled \width yscaled \height ; %D \stopMPclip %D \stoptyping %D %D Such a path can be extracted (processed) by: %D %D \starttyping %D \grabMPclippath{window}{method}{width}{height}{default path} %D \stoptyping %D %D Currently only method 1 makes sense; it produces \PDF\ %D code. This macro only makes sense when hooked into a %D special routine. \let\MPclippath\empty \long\def\startMPclip#1#2\stopMPclip {\blabelgroup \long\setgvalue{MPC:#1}{\startMPgraphic#2\stopMPgraphic\dograbMPclippath}% \elabelgroup} \let\stopMPclip\relax \def\grabMPclippath#1#2#3#4#5% {\blabelgroup \edef\width {#3\space}\let\overlaywidth \width \edef\height{#4\space}\let\overlayheight\height \doifdefinedelse{MPC:#1} {\getvalue{MPC:#1}% \setxvalue{MPC:#1}{\noexpand\xdef\noexpand\MPclippath{\MPclippath}}}% {\xdef\MPclippath{#5}}% \ifcase#2\else % method 1 : \doglobal\stripcharacter urveto\from\MPclippath\to\MPclippath \doglobal\stripcharacter oveto\from\MPclippath\to\MPclippath \doglobal\stripcharacter ineto\from\MPclippath\to\MPclippath \fi \elabelgroup} %D We pose some restrictions to the \METAPOST\ code and pickup %D the clip path from the file. %D %D We turn the slash into a comment. The \type {\hbox} grabs spaces %D and the \type {%} triggers the grabber. Next we filter the %D clipping path, or actually, the first path. % \bgroup % \catcode`\%=\@@active % \catcode`\/=\@@comment % \gdef\dograbMPclippath/ % {\setbox\scratchbox=\hbox\bgroup/ % \catcode`\%=\@@active % \obeylines\let\obeyedline\space % \def\do##1newpath##2closepath##3\od/ % {\xdef\MPclippath{##2}\endinput}/ % \def%##1%%EOF/ % {\do##1newpathclosepath\od\endinput}/ % \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/ % \deallocateMPslot\currentMPgraphic / new % \egroup} % \egroup \bgroup \catcode`\%=\@@active \catcode`\/=\@@comment \gdef\dograbMPclippath/ {\setbox\scratchbox=\hbox\bgroup/ \catcode`\%=\@@active \obeylines\let\obeyedline\space \def\do##1q n##2p W##3\od/ {\xdef\MPclippath{##2}\endinput}/ \def%##1%%EOF/ {\do##1q np W\od\endinput}/ \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/ \ifx\MPclippath\empty \def\do##1newpath##2closepath##3\od/ {\xdef\MPclippath{##2}\endinput}/ \def%##1%%EOF/ {\do##1newpathclosepath\od\endinput}/ \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/ \fi \deallocateMPslot\currentMPgraphic / new \egroup} \egroup %D \macros %D {recycleMPslots} %D %D When coding and embedding many \METAPOST\ figures in a %D document, one can save quite some disk space by using %D \PDFTEX\ and setting the next switch: \newif\ifrecycleMPslots \recycleMPslotstrue %D When a graphic takes space in the text flow, we can run %D into deadlock typesetting. In the first pass, the graphic %D is not available, but in the second pass it is. The %D placeholder that was put there in the first pass in now %D replace by the real graphic and as a result the document %D shrinks or grows and pages are removed or added. This in %D turn can trigger generation of other graphics, like those %D in the background. Graphics start swapping place and again %D page breaks change. You can imagine the mess we en dup %D with. %D %D This is why we provide was to use a dedicate range if %D numbers for fixed graphcs. Such graphics will not en dup %D in the text flow (at least their dimensions don't %D contribute to the main vertical list, and thereby they %D cannot interfere. We use a rather safe maximum of 4000 %D graphics here and 8000 in \type {meta-ini}. \newcount \maxnofMPgraphics \maxnofMPgraphics = 4000 % 8000 \newcount \minnofMPgraphics \minnofMPgraphics = 1 \newif \ifMPstaticgraphic \MPstaticgraphicfalse % determines slot allocation \def\locateMPslot#1% slightly faster on one slot, much faster on multiple slots {\ifundefined{\number#1MP}% no \ifcsname \letgvalueempty{\number#1MP}% \expandafter\gobbletwoarguments \else \global\advance#1\plusone \fi \locateMPslot#1} \def\allocateMPslot#1% {\ifrunMPgraphics \ifx\pdfliteral\undefined \recycleMPslotsfalse % quite certainly not pdftex \else\ifcase\pdfoutput \recycleMPslotsfalse % dvi mode or not pdftex (we need to handle dvipdfmx) \fi\fi \else \recycleMPslotsfalse \fi \ifrecycleMPslots % \doloop % slow but used seldom % {\doifundefined{\recurselevel MP} % {\letgvalueempty{\recurselevel MP}% % \global#1\recurselevel % \exitloop}}% \global#1\plusone \locateMPslot#1% % \message{[MP slot + \number#1]% \else\ifMPstaticgraphic % beware not the same as static graphics \global#1\maxnofMPgraphics \global\advance\maxnofMPgraphics \minusone \else \global#1\minnofMPgraphics \global\advance\minnofMPgraphics \plusone \fi\fi \ifnum\minnofMPgraphics<\maxnofMPgraphics \else \writestatus\m!systems{increase \string\maxnofMPgraphics}% \fi} \def\deallocateMPslot#1% {\ifrunMPgraphics \ifcase\pdfoutput \recycleMPslotsfalse \fi \else \recycleMPslotsfalse \fi \ifrecycleMPslots \global\letbeundefined{\number#1MP}% %\message{[MP slot - \number#1]}% \fi} %D Experimental and overloaded later, since we need to be %D more clever due to \METAPOST's limit of 4~open files. \def\MPdatafile {mp-\the\currentMPgraphic.mpd} \def\getMPdata {\input \MPdatafile\relax} %D \macros %D {MPtoks, MPbox} %D %D For convenience, we provide some scratch registers: \ifx\undefined\MPtoks \newtoks\MPtoks \fi \ifx\undefined\MPbox \newbox \MPbox \fi %D \macros %D {startMPcode} %D %D We can save some typing with: %D %D \starttyping %D \startMPcode whatever \stopMPcode %D \stoptyping %D %D this automatically places the graphic \long\def\startMPcode {\begingroup \obeyMPlines \dostartMPcode} \long\def\dostartMPcode#1\stopMPcode {\startuseMPgraphic{@@}#1\stopuseMPgraphic \useMPgraphic{@@}% \endgroup} \let\stopMPcode\relax %D \macros %D {startstaticMPgraphic} %D %D Dedicated to Aditya Mahajan. See meta-ini for usage. % \long\def\startstaticMPgraphic#1#2\stopstaticMPgraphic % {\bgroup % \MPstaticgraphictrue % \setMPrandomseedfalse % \def\MPgraphicfile{#1}% no \jobname here % \let\allocateMPslot \gobbleoneargument % \let\deallocateMPslot\gobbleoneargument % \let\runMPgraphic \gobbleoneargument % \MPextensions\emptytoks % \MPinitializations\emptytoks % \runMPgraphicstrue % \MPwrapperfalse % \enableincludeMPgraphics % \def\sometxt##1{\string\sometxt{##1}}% % \currentMPgraphic\plusone % hack, else no close % \startMPgraphic#2\stopMPgraphic % \executeMPgraphicfile % \egroup} % different version, less messy hooked into the rest \long\def\startstaticMPgraphic#1#2\stopstaticMPgraphic {\blabelgroup \def\MPgraphicfile{#1}% no \jobname here \let\MPwrite\MPstaticwrite \immediate\openout\MPwrite=\MPgraphicfile.mp \setMPrandomseedfalse \enableincludeMPgraphics \def\sometxt##1{\string\sometxt{##1}}% \the\everyMPgraphic \presetMPdefinitions \theMPinclusions % brrr \writeMPgraphic{\letterpercent mpenvironment: \the\everyMPTEXgraphic}% \writeMPgraphic{beginfig(1);}% \writeMPgraphic{#2}% \writeMPgraphic{endfig; end.}% \immediate\closeout\MPwrite \executeMPgraphicfile \elabelgroup} % this will go to meta-ini \def\delaysystemcommand {\ifx\installprogram\undefined \expandafter\executesystemcommand \else \expandafter\installprogram \fi} \def\MPgraphicfilerunner {texmfstart --ifchanged=\MPgraphicfile.mp texexec --mpstatic \MPgraphicfile.mp} \ifx\doifmode\undefined \def\executeMPgraphicfile {\ifrunMPgraphics\@EA\executesystemcommand\else\@EA\delaysystemcommand\fi{\MPgraphicfilerunner}} \else \def\executeMPgraphicfile{\doifmode{*\v!first} {\ifrunMPgraphics\@EA\executesystemcommand\else\@EA\delaysystemcommand\fi{\MPgraphicfilerunner}}} \fi %D Special for \XETEX\ (problem with newlines). This will go %D away once the version supporting \type {--8bit} is %D widespread. \ifnum\texengine=\xetexengine \let\obeyMPlines\relax \longMPlinesfalse % alas \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-combine.tex0000644000175000017500000000604011754241457026331 0ustar norbertnorbert%D \module %D [ file=mtx-context-combine, %D version=2009.03.21, %D title=\CONTEXT\ Extra Trickry, %D subtitle=Combine Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a \TEXEXEC\ features that has been moved to \MKIV. % begin help % % usage: context --extra=combine [options] list-of-files % % --sort : sort filenames first % --paperoffset=dimension : left-top-offset % --nobanner : no footer etc % --combination : h*v or hxv % --paperformat=spec : paper*print or paperxprint % --nobanner : no footerlines % --bannerheight=dimension : height of banner % --bannerstring=dimension : height of bannerstring % % end help \input mtx-context-common.tex \doifdocumentargumentelse {paperoffset} { \setuplayout [topspace=\getdocumentargument{paperoffset}, backspace=\getdocumentargument{paperoffset}] } { \setuplayout [topspace=0pt, backspace=0pt] } \setuppapersize [\getdocumentargument{paperformat_paper}] [\getdocumentargument{paperformat_print}] \setuplayout [header=0pt, footer=0pt, width=middle, height=middle] \doifnotdocumentargument {bannerheight} { \setuplayout [footer=1cm] } \doifelse {\getdocumentargument{nobanner}} {yes} { \setuplayout [footer=0cm] \setupbackgrounds [page] [background=] } { \definelayer [page] [width=\paperwidth, height=\paperheight] \setupbackgrounds [page] [background=page] } \setupexternalfigures [directory=] \starttext \startluacode local format = string.format if #document.files > 0 then if document.arguments["sort"] then table.sort(document.files) end local dobanner = not document.arguments["nobanner"] local bannerheight = document.arguments["bannerheight"] local nx = document.arguments.combination_nx or 2 local ny = document.arguments.combination_ny or 2 for _, filename in ipairs(document.files) do if not string.find(filename,"^mtx%-context%-") then -- could be a macro local bannerstring = format("\\tttf\\detokenize{%s}\\quad\\quad\\currentdate\\quad\\quad\\pagenumber",file.basename(filename)) if dobanner then if bannerheight then context("\\setuptexttexts[{\\setlayerframed[page][preset=middlebottom][frame=off,height=%s]{%s}}]",bannerheight,bannerstring) else context("\\setupfootertexts[{%s}]",bannerstring) end end context("\\combinepages[%s][nx=%s,ny=%s]",filename,nx,ny) context("\\page") end end else context("no files given") end \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mxr.mkii0000644000175000017500000001150711571377075024334 0ustar norbertnorbert\defineMMLsynonym approxeq ape \defineMMLsynonym backcong bcong \defineMMLsynonym backepsilon bepsi \defineMMLsynonym backsim bsim \defineMMLsynonym backsimeq bsime \defineMMLsynonym between twixt \defineMMLsynonym Bumpeq bump \defineMMLsynonym bumpeq bumpe \defineMMLsynonym circeq cire \defineMMLsynonym coloneq colone \defineMMLsynonym Cup smile \defineMMLsynonym CupCap asymp \defineMMLsynonym curlyeqprec cuepr \defineMMLsynonym curlyeqsucc cuesc \defineMMLsynonym ddotseq eDDot \defineMMLsynonym doteq esdot \defineMMLsynonym doteqdot eDot \defineMMLsynonym DotEqual esdot \defineMMLsynonym DoubleRightTee vDash \defineMMLsynonym eqcirc ecir \defineMMLsynonym eqcolon ecolon \defineMMLsynonym eqsim esim \defineMMLsynonym eqslantgtr egs \defineMMLsynonym eqslantless els \defineMMLsynonym EqualTilde esim \defineMMLsynonym fallingdotseq efDot \defineMMLsynonym geqq gE \defineMMLsynonym geqslant ges \defineMMLsynonym gg Gt \defineMMLsynonym ggg Gg \defineMMLsynonym GreaterEqualLess gel \defineMMLsynonym GreaterFullEqual gE \defineMMLsynonym GreaterLess gl \defineMMLsynonym GreaterSlantEqual ges \defineMMLsynonym GreaterTilde gsim \defineMMLsynonym gtrapprox gap \defineMMLsynonym gtrdot gtdot \defineMMLsynonym gtreqless gel \defineMMLsynonym gtreqqless gEl \defineMMLsynonym gtrless gl \defineMMLsynonym gtrsim gsim \defineMMLsynonym HumpDownHump bump \defineMMLsynonym HumpEqual bumpe \defineMMLsynonym LeftTee dashv \defineMMLsynonym LeftTriangle vltri \defineMMLsynonym LeftTriangleEqual ltrie \defineMMLsynonym leqq lE \defineMMLsynonym leqslant les \defineMMLsynonym lessapprox lap \defineMMLsynonym lessdot ltdot \defineMMLsynonym lesseqgtr leg \defineMMLsynonym lesseqqgtr lEg \defineMMLsynonym LessEqualGreater leg \defineMMLsynonym LessFullEqual lE \defineMMLsynonym LessGreater lg \defineMMLsynonym lessgtr lg \defineMMLsynonym lesssim lsim \defineMMLsynonym LessSlantEqual les \defineMMLsynonym LessTilde lsim \defineMMLsynonym ll Lt \defineMMLsynonym NestedGreaterGreater Gt \defineMMLsynonym NestedLessLess Lt \defineMMLsynonym pitchfork fork \defineMMLsynonym prec pr \defineMMLsynonym precapprox prap \defineMMLsynonym preccurlyeq prcue \defineMMLsynonym Precedes pr \defineMMLsynonym PrecedesEqual pre \defineMMLsynonym PrecedesSlantEqual prcue \defineMMLsynonym PrecedesTilde prsim \defineMMLsynonym preceq pre \defineMMLsynonym precsim prsim \defineMMLsynonym Proportion Colon \defineMMLsynonym questeq equest \defineMMLsynonym RightTee vdash \defineMMLsynonym RightTriangle vrtri \defineMMLsynonym RightTriangleEqual rtrie \defineMMLsynonym risingdotseq erDot \defineMMLsynonym shortmid smid \defineMMLsynonym shortparallel spar \defineMMLsynonym smallfrown sfrown \defineMMLsynonym smallsmile ssmile \defineMMLsynonym sqsubset sqsub \defineMMLsynonym sqsubseteq sqsube \defineMMLsynonym sqsupset sqsup \defineMMLsynonym sqsupseteq sqsupe \defineMMLsynonym SquareSubset sqsub \defineMMLsynonym SquareSubsetEqual sqsube \defineMMLsynonym SquareSuperset sqsup \defineMMLsynonym SquareSupersetEqual sqsupe \defineMMLsynonym Subset Sub \defineMMLsynonym subseteqq subE \defineMMLsynonym succ sc \defineMMLsynonym succapprox scap \defineMMLsynonym succcurlyeq sccue \defineMMLsynonym Succeeds sc \defineMMLsynonym SucceedsEqual sce \defineMMLsynonym SucceedsSlantEqual sccue \defineMMLsynonym SucceedsTilde scsim \defineMMLsynonym succeq sce \defineMMLsynonym succsim scsim \defineMMLsynonym Supset Sup \defineMMLsynonym supseteqq supE \defineMMLsynonym thickapprox thkap \defineMMLsynonym thicksim thksim \defineMMLsynonym trianglelefteq ltrie \defineMMLsynonym triangleq trie \defineMMLsynonym trianglerighteq rtrie \defineMMLsynonym varpropto vprop \defineMMLsynonym vartriangleleft vltri \defineMMLsynonym vartriangleright vrtri \defineMMLsynonym VerticalBar mid context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-mac.mkii0000644000175000017500000001216111754241457024243 0ustar norbertnorbert%D \module %D [ file=regi-mac, %D version=2001.03.18, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Mac Encoding, %D author={Michel Bovani \& Adam Lindsay \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startregime [mac] \defineactivetoken 128 {\Adiaeresis} \defineactivetoken 129 {\Aring} \defineactivetoken 130 {\Ccedilla} \defineactivetoken 131 {\Eacute} \defineactivetoken 132 {\Ntilde} \defineactivetoken 133 {\Odiaeresis} \defineactivetoken 134 {\Udiaeresis} \defineactivetoken 135 {\aacute} \defineactivetoken 136 {\agrave} \defineactivetoken 137 {\acircumflex} \defineactivetoken 138 {\adiaeresis} \defineactivetoken 139 {\atilde} \defineactivetoken 140 {\aring} \defineactivetoken 141 {\ccedilla} \defineactivetoken 142 {\eacute} \defineactivetoken 143 {\egrave} \defineactivetoken 144 {\ecircumflex} \defineactivetoken 145 {\ediaeresis} \defineactivetoken 146 {\iacute} \defineactivetoken 147 {\igrave} \defineactivetoken 148 {\icircumflex} \defineactivetoken 149 {\idiaeresis} \defineactivetoken 150 {\ntilde} \defineactivetoken 151 {\oacute} \defineactivetoken 152 {\ograve} \defineactivetoken 153 {\ocircumflex} \defineactivetoken 154 {\odiaeresis} \defineactivetoken 155 {\otilde} \defineactivetoken 156 {\uacute} \defineactivetoken 157 {\ugrave} \defineactivetoken 158 {\ucircumflex} \defineactivetoken 159 {\udiaeresis} \defineactivetoken 160 {\textdag} \defineactivetoken 161 {\textdegree} \defineactivetoken 162 {\textcent} \defineactivetoken 163 {\textsterling} \defineactivetoken 164 {\sectionmark} \defineactivetoken 165 {\textbullet} \defineactivetoken 166 {\paragraphmark} \defineactivetoken 167 {\ssharp} \defineactivetoken 168 {\registered} \defineactivetoken 169 {\copyright} \defineactivetoken 170 {\trademark} \defineactivetoken 171 {\textacute} \defineactivetoken 172 {\textdiaeresis} \defineactivetoken 173 {\mathematics\neq} \defineactivetoken 174 {\AEligature} \defineactivetoken 175 {\Ostroke} \defineactivetoken 176 {\mathematics\infty} \defineactivetoken 177 {\textpm} \defineactivetoken 178 {\mathematics\leq} \defineactivetoken 179 {\mathematics\geq} \defineactivetoken 180 {\textyen} \defineactivetoken 181 {\textmu} \defineactivetoken 182 {\mathematics\partial} \defineactivetoken 183 {\mathematics\Sigma} \defineactivetoken 184 {\mathematics\Pi} \defineactivetoken 185 {\mathematics\pi} \defineactivetoken 186 {\mathematics\smallint} \defineactivetoken 187 {\ordfeminine} \defineactivetoken 188 {\ordmasculine} \defineactivetoken 189 {\mathematics\Omega} \defineactivetoken 190 {\aeligature} \defineactivetoken 191 {\ostroke} \defineactivetoken 192 {\questiondown} \defineactivetoken 193 {\exclamdown} \defineactivetoken 194 {\textlognot} \defineactivetoken 195 {\mathematics{\sqrt{}}} \defineactivetoken 196 {\textflorin} \defineactivetoken 197 {\mathematics\approx} \defineactivetoken 198 {\mathematics\Delta} \defineactivetoken 199 {\leftguillemot} \defineactivetoken 200 {\rightguillemot} \defineactivetoken 201 {\dots} \defineactivetoken 202 {\nonbreakablespace} \defineactivetoken 203 {\Agrave} \defineactivetoken 204 {\Atilde} \defineactivetoken 205 {\Otilde} \defineactivetoken 206 {\OEligature} \defineactivetoken 207 {\oeligature} \defineactivetoken 208 {\endash} \defineactivetoken 209 {\emdash} \defineactivetoken 210 {\quotedblleft} \defineactivetoken 211 {\quotedblright} \defineactivetoken 212 {\quoteleft} \defineactivetoken 213 {\quoteright} \defineactivetoken 214 {\textdiv} \defineactivetoken 215 {\mathematics\diamond} \defineactivetoken 216 {\ydiaeresis} \defineactivetoken 217 {\Ydiaeresis} \defineactivetoken 218 {\textfraction} \defineactivetoken 219 {\texteuro} \defineactivetoken 220 {\guilsingleleft} \defineactivetoken 221 {\guilsingleright} \defineactivetoken 222 {fi} \defineactivetoken 223 {fl} \defineactivetoken 224 {\textddag} \defineactivetoken 225 {\periodcentered} \defineactivetoken 226 {\quotesinglebase} \defineactivetoken 227 {\quotedblbase } \defineactivetoken 228 {\perthousand} \defineactivetoken 229 {\Acircumflex} \defineactivetoken 230 {\Ecircumflex} \defineactivetoken 231 {\Aacute} \defineactivetoken 232 {\Ediaeresis} \defineactivetoken 233 {\Egrave} \defineactivetoken 234 {\Iacute} \defineactivetoken 235 {\Icircumflex} \defineactivetoken 236 {\Idiaeresis} \defineactivetoken 237 {\Igrave} \defineactivetoken 238 {\Oacute} \defineactivetoken 239 {\Ocircumflex} %defineactivetoken 240 % No definition for Apple logo glyph yet. \defineactivetoken 241 {\Ograve} \defineactivetoken 242 {\Uacute} \defineactivetoken 243 {\Ucircumflex} \defineactivetoken 244 {\Ugrave} \defineactivetoken 245 {\dotlessi} \defineactivetoken 246 {\textcircumflex} \defineactivetoken 247 {\texttilde} \defineactivetoken 248 {\textmacron} \defineactivetoken 249 {\textbreve} \defineactivetoken 250 {\textdotaccent} \defineactivetoken 251 {\textring} \defineactivetoken 252 {\textcedilla} \defineactivetoken 253 {\texthungarumlaut} \defineactivetoken 254 {\textogonek} \defineactivetoken 255 {\textcaron} \stopregime \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-ffr.mkii0000644000175000017500000000357211754241457024264 0ustar norbertnorbert%D \module %D [ file=enco-ffr, %D version=2002.05.07, %D title=\CONTEXT\ Encoding Macros, %D subtitle=French Input Filter, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \definehspace[fr][:][.25em] % \definehspace[fr][;][.25em] % \definehspace[fr][!][.25em] % \definehspace[fr][?][.25em] \enablemode[activecolon] \usemodule[tryout] % for the moment \installactivecharacter : \installactivecharacter ; \installactivecharacter ? \installactivecharacter ! \unprotect \startlanguagespecifics[\s!fr] \definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{:}:} \definetextmodediscretionary ; {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{;};} \definetextmodediscretionary ? {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{?}?} \definetextmodediscretionary ! {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{!}!} \stoplanguagespecifics \startlanguagespecifics[\s!fr] \defineactivecharacter : {\mathortext{:}{\directdiscretionary{:}}} \defineactivecharacter ; {\mathortext{;}{\directdiscretionary{;}}} \defineactivecharacter ! {\mathortext{!}{\directdiscretionary{!}}} \defineactivecharacter ? {\mathortext{?}{\directdiscretionary{?}}} \stoplanguagespecifics \appendtoks % maybe everywhere \chardef\activecharactermode\zerocount \to\everyMPgraphic % maybe tricky due to possible name clashes: % % \def\ieme {\highordinalstr{e}} % \def\iemes{\highordinalstr{es}} % \def\ier {\highordinalstr{er}} % \def\iers {\highordinalstr{ers}} % \def\iere {\highordinalstr{re}} % \def\ieres{\highordinalstr{res}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-mig.lua0000644000175000017500000001101412130411274024063 0ustar norbertnorbertif not modules then modules = { } end modules ['node-mig'] = { version = 1.001, comment = "companion to node-mig.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local attributes, nodes, node = attributes, nodes, node local remove_nodes = nodes.remove local nodecodes = nodes.nodecodes local tasks = nodes.tasks local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local insert_code = nodecodes.ins local mark_code = nodecodes.mark local a_migrated = attributes.private("migrated") local trace_migrations = false trackers.register("nodes.migrations", function(v) trace_migrations = v end) local report_nodes = logs.reporter("nodes","migrations") local migrate_inserts, migrate_marks, inserts_too local t_inserts, t_marks, t_sweeps = 0, 0, 0 local function locate(head,first,last,ni,nm) local current = head while current do local id = current.id if id == vlist_code or id == hlist_code then current.list, first, last, ni, nm = locate(current.list,first,last,ni,nm) current = current.next elseif migrate_inserts and id == insert_code then local insert head, current, insert = remove_nodes(head,current) insert.next = nil if first then insert.prev, last.next = last, insert else insert.prev, first = nil, insert end last, ni = insert, ni + 1 elseif migrate_marks and id == mark_code then local mark head, current, mark = remove_nodes(head,current) mark.next = nil if first then mark.prev, last.next = last, mark else mark.prev, first = nil, mark end last, nm = mark, nm + 1 else current= current.next end end return head, first, last, ni, nm end function nodes.handlers.migrate(head,where) local done = false if head then if trace_migrations then report_nodes("migration sweep %a",where) end local current = head while current do local id = current.id -- inserts_too is a temp hack, we should only do them when it concerns -- newly placed (flushed) inserts if id == vlist_code or id == hlist_code or (inserts_too and id == insert_code) and not current[a_migrated] then current[a_migrated] = 1 t_sweeps = t_sweeps + 1 local h = current.list local first, last, ni, nm while h do local id = h.id if id == vlist_code or id == hlist_code then h, first, last, ni, nm = locate(h,first,last,0,0) end h = h.next end if first then t_inserts, t_marks = t_inserts + ni, t_marks + nm if trace_migrations and (ni > 0 or nm > 0) then report_nodes("sweep %a, container %a, %s inserts and %s marks migrated outwards during %a", t_sweeps,nodecodes[id],ni,nm,where) end -- inserts after head local n = current.next if n then last.next, n.prev = n, last end current.next, first.prev = first, current done, current = true, last end end current = current.next end return head, done end end -- for the moment this way, this will disappear experiments.register("marks.migrate", function(v) if v then tasks.enableaction("mvlbuilders", "nodes.handlers.migrate") end migrate_marks = v end) experiments.register("inserts.migrate", function(v) if v then tasks.enableaction("mvlbuilders", "nodes.handlers.migrate") end migrate_inserts = v end) experiments.register("inserts.migrate.nested", function(v) if v then tasks.enableaction("mvlbuilders", "nodes.handlers.migrate") end inserts_too = v end) statistics.register("node migrations", function() if trace_migrations and t_sweeps > 0 then return format("%s sweeps, %s inserts moved, %s marks moved",t_sweeps,t_inserts,t_marks) end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-bar.mkii0000644000175000017500000001212011754241457024225 0ustar norbertnorbert%D \module %D [ file=anch-bar, %D version=2003.03.16, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Margin Bars and alike, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Margin Bars} \unprotect %D We will implement a sidebar mechanism using the %D functionality from \type {core-pos}. %D %D \starttyping %D \definesidebar[whow][rulecolor=green,distance=] %D %D \input tufte \par %D \startsidebar %D \input tufte \par %D \input tufte \par %D \startsidebar[whow] %D \input tufte \par %D \input tufte \par %D \input tufte %D \stopsidebar \par %D \input tufte \par %D \input tufte %D \stopsidebar \par %D \input tufte \par %D \input tufte \par %D \startsidebar %D \input tufte \par %D \input tufte \par %D \input tufte \par %D \input tufte \par %D \input tufte %D \stopsidebar \par %D \input tufte \par %D \input tufte \par %D \startsidebar %D \input tufte %D \input tufte %D \input tufte %D \input tufte %D \input tufte %D \stopsidebar %D \stoptyping \newcount\currentsidebar \newdimen\sidebardistance \def\setupsidebars {\dodoubleargument\dosetupsidebars} \def\dosetupsidebars[#1][#2]% {\ifsecondargument \getparameters[\??br#1][#2]% \else \getparameters[\??br][#1]% \fi} % \setupMPvariables % [mpos:bar] % [linecolor=red, % linewidth=2pt, % distance=5pt] \setupsidebars [\c!rulethickness=2pt, \c!rulecolor=red, \c!distance=.5\bodyfontsize] \def\definesidebar {\dodoubleempty\dodefinesidebar} \def\dodefinesidebar[#1][#2]% {\copyparameters [\??br#1][\??br] [\c!rulethickness,\c!rulecolor,\c!distance]% \getparameters [\??br#1][#2]} \def\startsidebar {\dosingleempty\dostartsidebar} \def\dostartsidebar[#1]% {\bgroup \dontleavehmode \checktextbackgrounds \global\advance\currentsidebar\plusone \doifelsenothing{#1} {\advance\sidebardistance\@@brdistance} {\doifelsevaluenothing{\??br#1\c!distance} {\advance\sidebardistance\@@brdistance} {\sidebardistance\getvalue{\??br#1\c!distance}}}% \startpositionoverlay{text-1}% \expanded{\setMPpositiongraphicrange {b:side:\the\currentsidebar}% {e:side:\the\currentsidebar}% {mpos:bar}% {self=side:\the\currentsidebar, linewidth=\getvalue{\??br#1\c!rulethickness}, linecolor=\getvalue{\??br#1\c!rulecolor}, distance=\the\sidebardistance}}% \stoppositionoverlay \bpos{side:\the\currentsidebar}\ignorespaces} % \def\dostopsidebar#1% % {\removelastspace\tpos{side:#1}\carryoverpar\egroup} \def\stopsidebar {\removelastspace\tpos{side:\the\currentsidebar}\carryoverpar\egroup} \startMPpositionmethod{mpos:bar} \startMPpositiongraphic{mpos:bar}{linecolor,linewidth,distance}% StartPage ; path p ; p := if \MPp\MPbself=\MPp\MPeself : (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) -- (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ; elseif RealPageNumber=\MPp\MPbself : (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) -- (llcorner Field[Text][Text]) ; elseif RealPageNumber=\MPp\MPeself : (ulcorner Field[Text][Text]) -- (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ; else : (ulcorner Field[Text][Text]) -- (llcorner Field[Text][Text]) ; fi ; p := p shifted (-llcorner Field[Text][Text]-(\MPvar{distance},0)) ; interim linecap := butt ; draw p withpen pencircle scaled \MPvar{linewidth} withcolor \MPvar{linecolor} ; StopPage ; \stopMPpositiongraphic \MPpositiongraphic{mpos:bar}{}% \stopMPpositionmethod %D We now reimplement the margin rules handler defined in %D \type {core-rul}: %D %D \setupmarginrules[level=5] %D %D \startmarginrule[1] %D First we set the level at~5. Next we typeset this first %D paragraph as a level~1 one. As expected no rule show up. %D \stopmarginrule %D %D \startmarginrule[5] %D The second paragraph is a level~5 one. As we can see here, %D the marginal rule gets a width according to its level. %D \stopmarginrule %D %D \startmarginrule[8] %D It will of course be no surprise that this third paragraph %D has a even thicker margin rule. This behavior can be %D overruled by specifying the width explictly. %D \stopmarginrule \definesidebar [\v!margin] [\c!rulecolor=\s!black, \c!rulethickness=\@@karulethickness, \c!distance=\dimexpr\leftmargindistance-\@@karulethickness/2\relax] \definecomplexorsimple\startmarginrule \def\simplestartmarginrule {\complexstartmarginrule[1]} \def\complexstartmarginrule[#1]% {\bgroup \ifnum#1<\@@kalevel\relax \let\stopmarginrule\egroup \else \def\@@kadefaultwidth{#1}% \let\stopmarginrule\dostopmarginrule \@EA\startsidebar\@EA[\@EA\v!margin\@EA]% \fi} \def\dostopmarginrule {\stopsidebar \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-map.lua0000644000175000017500000004114712130411274024066 0ustar norbertnorbertif not modules then modules = { } end modules ['char-map'] = { version = 1.001, comment = "companion to char-ini.mkiv", author = "Hans Hagen & Arthur Reutenauer", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } -- not yet used characters = characters or { } characters.casemap={ [0x0049]={ ["az"]={ ["not_before_dot"]={ ["lower"]={ 0x0131 }, ["title"]={ 0x0049 }, ["upper"]={ 0x0049 }, }, }, ["lt"]={ ["more_above"]={ ["lower"]={ 0x0069, 0x0307 }, ["title"]={ 0x0049 }, ["upper"]={ 0x0049 }, }, }, ["tr"]={ ["not_before_dot"]={ ["lower"]={ 0x0131 }, ["title"]={ 0x0049 }, ["upper"]={ 0x0049 }, }, }, }, [0x004A]={ ["lt"]={ ["more_above"]={ ["lower"]={ 0x006A, 0x0307 }, ["title"]={ 0x004A }, ["upper"]={ 0x004A }, }, }, }, [0x0069]={ ["az"]={ ["all"]={ ["lower"]={ 0x0069 }, ["title"]={ 0x0130 }, ["upper"]={ 0x0130 }, }, }, ["tr"]={ ["all"]={ ["lower"]={ 0x0069 }, ["title"]={ 0x0130 }, ["upper"]={ 0x0130 }, }, }, }, [0x00CC]={ ["lt"]={ ["all"]={ ["lower"]={ 0x0069, 0x0307, 0x0300 }, ["title"]={ 0x00CC }, ["upper"]={ 0x00CC }, }, }, }, [0x00CD]={ ["lt"]={ ["all"]={ ["lower"]={ 0x0069, 0x0307, 0x0301 }, ["title"]={ 0x00CD }, ["upper"]={ 0x00CD }, }, }, }, [0x00DF]={ [""]={ ["all"]={ ["lower"]={ 0x00DF }, ["title"]={ 0x0053, 0x0073 }, ["upper"]={ 0x0053, 0x0053 }, }, }, }, [0x0128]={ ["lt"]={ ["all"]={ ["lower"]={ 0x0069, 0x0307, 0x0303 }, ["title"]={ 0x0128 }, ["upper"]={ 0x0128 }, }, }, }, [0x012E]={ ["lt"]={ ["more_above"]={ ["lower"]={ 0x012F, 0x0307 }, ["title"]={ 0x012E }, ["upper"]={ 0x012E }, }, }, }, [0x0130]={ [""]={ ["all"]={ ["lower"]={ 0x0069, 0x0307 }, ["title"]={ 0x0130 }, ["upper"]={ 0x0130 }, }, }, ["az"]={ ["all"]={ ["lower"]={ 0x0069 }, ["title"]={ 0x0130 }, ["upper"]={ 0x0130 }, }, }, ["tr"]={ ["all"]={ ["lower"]={ 0x0069 }, ["title"]={ 0x0130 }, ["upper"]={ 0x0130 }, }, }, }, [0x0149]={ [""]={ ["all"]={ ["lower"]={ 0x0149 }, ["title"]={ 0x02BC, 0x004E }, ["upper"]={ 0x02BC, 0x004E }, }, }, }, [0x01F0]={ [""]={ ["all"]={ ["lower"]={ 0x01F0 }, ["title"]={ 0x004A, 0x030C }, ["upper"]={ 0x004A, 0x030C }, }, }, }, [0x0307]={ ["az"]={ ["after_i"]={ ["lower"]={}, ["title"]={ 0x0307 }, ["upper"]={ 0x0307 }, }, }, ["lt"]={ ["after_soft_dotted"]={ ["lower"]={ 0x0307 }, ["title"]={}, ["upper"]={}, }, }, ["tr"]={ ["after_i"]={ ["lower"]={}, ["title"]={ 0x0307 }, ["upper"]={ 0x0307 }, }, }, }, [0x0390]={ [""]={ ["all"]={ ["lower"]={ 0x0390 }, ["title"]={ 0x0399, 0x0308, 0x0301 }, ["upper"]={ 0x0399, 0x0308, 0x0301 }, }, }, }, [0x03A3]={ ["final_sigma"]={ ["all"]={ ["lower"]={ 0x03C2 }, ["title"]={ 0x03A3 }, ["upper"]={ 0x03A3 }, }, }, }, [0x03B0]={ [""]={ ["all"]={ ["lower"]={ 0x03B0 }, ["title"]={ 0x03A5, 0x0308, 0x0301 }, ["upper"]={ 0x03A5, 0x0308, 0x0301 }, }, }, }, [0x0587]={ [""]={ ["all"]={ ["lower"]={ 0x0587 }, ["title"]={ 0x0535, 0x0582 }, ["upper"]={ 0x0535, 0x0552 }, }, }, }, [0x1E96]={ [""]={ ["all"]={ ["lower"]={ 0x1E96 }, ["title"]={ 0x0048, 0x0331 }, ["upper"]={ 0x0048, 0x0331 }, }, }, }, [0x1E97]={ [""]={ ["all"]={ ["lower"]={ 0x1E97 }, ["title"]={ 0x0054, 0x0308 }, ["upper"]={ 0x0054, 0x0308 }, }, }, }, [0x1E98]={ [""]={ ["all"]={ ["lower"]={ 0x1E98 }, ["title"]={ 0x0057, 0x030A }, ["upper"]={ 0x0057, 0x030A }, }, }, }, [0x1E99]={ [""]={ ["all"]={ ["lower"]={ 0x1E99 }, ["title"]={ 0x0059, 0x030A }, ["upper"]={ 0x0059, 0x030A }, }, }, }, [0x1E9A]={ [""]={ ["all"]={ ["lower"]={ 0x1E9A }, ["title"]={ 0x0041, 0x02BE }, ["upper"]={ 0x0041, 0x02BE }, }, }, }, [0x1F50]={ [""]={ ["all"]={ ["lower"]={ 0x1F50 }, ["title"]={ 0x03A5, 0x0313 }, ["upper"]={ 0x03A5, 0x0313 }, }, }, }, [0x1F52]={ [""]={ ["all"]={ ["lower"]={ 0x1F52 }, ["title"]={ 0x03A5, 0x0313, 0x0300 }, ["upper"]={ 0x03A5, 0x0313, 0x0300 }, }, }, }, [0x1F54]={ [""]={ ["all"]={ ["lower"]={ 0x1F54 }, ["title"]={ 0x03A5, 0x0313, 0x0301 }, ["upper"]={ 0x03A5, 0x0313, 0x0301 }, }, }, }, [0x1F56]={ [""]={ ["all"]={ ["lower"]={ 0x1F56 }, ["title"]={ 0x03A5, 0x0313, 0x0342 }, ["upper"]={ 0x03A5, 0x0313, 0x0342 }, }, }, }, [0x1F80]={ [""]={ ["all"]={ ["lower"]={ 0x1F80 }, ["title"]={ 0x1F88 }, ["upper"]={ 0x1F08, 0x0399 }, }, }, }, [0x1F81]={ [""]={ ["all"]={ ["lower"]={ 0x1F81 }, ["title"]={ 0x1F89 }, ["upper"]={ 0x1F09, 0x0399 }, }, }, }, [0x1F82]={ [""]={ ["all"]={ ["lower"]={ 0x1F82 }, ["title"]={ 0x1F8A }, ["upper"]={ 0x1F0A, 0x0399 }, }, }, }, [0x1F83]={ [""]={ ["all"]={ ["lower"]={ 0x1F83 }, ["title"]={ 0x1F8B }, ["upper"]={ 0x1F0B, 0x0399 }, }, }, }, [0x1F84]={ [""]={ ["all"]={ ["lower"]={ 0x1F84 }, ["title"]={ 0x1F8C }, ["upper"]={ 0x1F0C, 0x0399 }, }, }, }, [0x1F85]={ [""]={ ["all"]={ ["lower"]={ 0x1F85 }, ["title"]={ 0x1F8D }, ["upper"]={ 0x1F0D, 0x0399 }, }, }, }, [0x1F86]={ [""]={ ["all"]={ ["lower"]={ 0x1F86 }, ["title"]={ 0x1F8E }, ["upper"]={ 0x1F0E, 0x0399 }, }, }, }, [0x1F87]={ [""]={ ["all"]={ ["lower"]={ 0x1F87 }, ["title"]={ 0x1F8F }, ["upper"]={ 0x1F0F, 0x0399 }, }, }, }, [0x1F88]={ [""]={ ["all"]={ ["lower"]={ 0x1F80 }, ["title"]={ 0x1F88 }, ["upper"]={ 0x1F08, 0x0399 }, }, }, }, [0x1F89]={ [""]={ ["all"]={ ["lower"]={ 0x1F81 }, ["title"]={ 0x1F89 }, ["upper"]={ 0x1F09, 0x0399 }, }, }, }, [0x1F8A]={ [""]={ ["all"]={ ["lower"]={ 0x1F82 }, ["title"]={ 0x1F8A }, ["upper"]={ 0x1F0A, 0x0399 }, }, }, }, [0x1F8B]={ [""]={ ["all"]={ ["lower"]={ 0x1F83 }, ["title"]={ 0x1F8B }, ["upper"]={ 0x1F0B, 0x0399 }, }, }, }, [0x1F8C]={ [""]={ ["all"]={ ["lower"]={ 0x1F84 }, ["title"]={ 0x1F8C }, ["upper"]={ 0x1F0C, 0x0399 }, }, }, }, [0x1F8D]={ [""]={ ["all"]={ ["lower"]={ 0x1F85 }, ["title"]={ 0x1F8D }, ["upper"]={ 0x1F0D, 0x0399 }, }, }, }, [0x1F8E]={ [""]={ ["all"]={ ["lower"]={ 0x1F86 }, ["title"]={ 0x1F8E }, ["upper"]={ 0x1F0E, 0x0399 }, }, }, }, [0x1F8F]={ [""]={ ["all"]={ ["lower"]={ 0x1F87 }, ["title"]={ 0x1F8F }, ["upper"]={ 0x1F0F, 0x0399 }, }, }, }, [0x1F90]={ [""]={ ["all"]={ ["lower"]={ 0x1F90 }, ["title"]={ 0x1F98 }, ["upper"]={ 0x1F28, 0x0399 }, }, }, }, [0x1F91]={ [""]={ ["all"]={ ["lower"]={ 0x1F91 }, ["title"]={ 0x1F99 }, ["upper"]={ 0x1F29, 0x0399 }, }, }, }, [0x1F92]={ [""]={ ["all"]={ ["lower"]={ 0x1F92 }, ["title"]={ 0x1F9A }, ["upper"]={ 0x1F2A, 0x0399 }, }, }, }, [0x1F93]={ [""]={ ["all"]={ ["lower"]={ 0x1F93 }, ["title"]={ 0x1F9B }, ["upper"]={ 0x1F2B, 0x0399 }, }, }, }, [0x1F94]={ [""]={ ["all"]={ ["lower"]={ 0x1F94 }, ["title"]={ 0x1F9C }, ["upper"]={ 0x1F2C, 0x0399 }, }, }, }, [0x1F95]={ [""]={ ["all"]={ ["lower"]={ 0x1F95 }, ["title"]={ 0x1F9D }, ["upper"]={ 0x1F2D, 0x0399 }, }, }, }, [0x1F96]={ [""]={ ["all"]={ ["lower"]={ 0x1F96 }, ["title"]={ 0x1F9E }, ["upper"]={ 0x1F2E, 0x0399 }, }, }, }, [0x1F97]={ [""]={ ["all"]={ ["lower"]={ 0x1F97 }, ["title"]={ 0x1F9F }, ["upper"]={ 0x1F2F, 0x0399 }, }, }, }, [0x1F98]={ [""]={ ["all"]={ ["lower"]={ 0x1F90 }, ["title"]={ 0x1F98 }, ["upper"]={ 0x1F28, 0x0399 }, }, }, }, [0x1F99]={ [""]={ ["all"]={ ["lower"]={ 0x1F91 }, ["title"]={ 0x1F99 }, ["upper"]={ 0x1F29, 0x0399 }, }, }, }, [0x1F9A]={ [""]={ ["all"]={ ["lower"]={ 0x1F92 }, ["title"]={ 0x1F9A }, ["upper"]={ 0x1F2A, 0x0399 }, }, }, }, [0x1F9B]={ [""]={ ["all"]={ ["lower"]={ 0x1F93 }, ["title"]={ 0x1F9B }, ["upper"]={ 0x1F2B, 0x0399 }, }, }, }, [0x1F9C]={ [""]={ ["all"]={ ["lower"]={ 0x1F94 }, ["title"]={ 0x1F9C }, ["upper"]={ 0x1F2C, 0x0399 }, }, }, }, [0x1F9D]={ [""]={ ["all"]={ ["lower"]={ 0x1F95 }, ["title"]={ 0x1F9D }, ["upper"]={ 0x1F2D, 0x0399 }, }, }, }, [0x1F9E]={ [""]={ ["all"]={ ["lower"]={ 0x1F96 }, ["title"]={ 0x1F9E }, ["upper"]={ 0x1F2E, 0x0399 }, }, }, }, [0x1F9F]={ [""]={ ["all"]={ ["lower"]={ 0x1F97 }, ["title"]={ 0x1F9F }, ["upper"]={ 0x1F2F, 0x0399 }, }, }, }, [0x1FA0]={ [""]={ ["all"]={ ["lower"]={ 0x1FA0 }, ["title"]={ 0x1FA8 }, ["upper"]={ 0x1F68, 0x0399 }, }, }, }, [0x1FA1]={ [""]={ ["all"]={ ["lower"]={ 0x1FA1 }, ["title"]={ 0x1FA9 }, ["upper"]={ 0x1F69, 0x0399 }, }, }, }, [0x1FA2]={ [""]={ ["all"]={ ["lower"]={ 0x1FA2 }, ["title"]={ 0x1FAA }, ["upper"]={ 0x1F6A, 0x0399 }, }, }, }, [0x1FA3]={ [""]={ ["all"]={ ["lower"]={ 0x1FA3 }, ["title"]={ 0x1FAB }, ["upper"]={ 0x1F6B, 0x0399 }, }, }, }, [0x1FA4]={ [""]={ ["all"]={ ["lower"]={ 0x1FA4 }, ["title"]={ 0x1FAC }, ["upper"]={ 0x1F6C, 0x0399 }, }, }, }, [0x1FA5]={ [""]={ ["all"]={ ["lower"]={ 0x1FA5 }, ["title"]={ 0x1FAD }, ["upper"]={ 0x1F6D, 0x0399 }, }, }, }, [0x1FA6]={ [""]={ ["all"]={ ["lower"]={ 0x1FA6 }, ["title"]={ 0x1FAE }, ["upper"]={ 0x1F6E, 0x0399 }, }, }, }, [0x1FA7]={ [""]={ ["all"]={ ["lower"]={ 0x1FA7 }, ["title"]={ 0x1FAF }, ["upper"]={ 0x1F6F, 0x0399 }, }, }, }, [0x1FA8]={ [""]={ ["all"]={ ["lower"]={ 0x1FA0 }, ["title"]={ 0x1FA8 }, ["upper"]={ 0x1F68, 0x0399 }, }, }, }, [0x1FA9]={ [""]={ ["all"]={ ["lower"]={ 0x1FA1 }, ["title"]={ 0x1FA9 }, ["upper"]={ 0x1F69, 0x0399 }, }, }, }, [0x1FAA]={ [""]={ ["all"]={ ["lower"]={ 0x1FA2 }, ["title"]={ 0x1FAA }, ["upper"]={ 0x1F6A, 0x0399 }, }, }, }, [0x1FAB]={ [""]={ ["all"]={ ["lower"]={ 0x1FA3 }, ["title"]={ 0x1FAB }, ["upper"]={ 0x1F6B, 0x0399 }, }, }, }, [0x1FAC]={ [""]={ ["all"]={ ["lower"]={ 0x1FA4 }, ["title"]={ 0x1FAC }, ["upper"]={ 0x1F6C, 0x0399 }, }, }, }, [0x1FAD]={ [""]={ ["all"]={ ["lower"]={ 0x1FA5 }, ["title"]={ 0x1FAD }, ["upper"]={ 0x1F6D, 0x0399 }, }, }, }, [0x1FAE]={ [""]={ ["all"]={ ["lower"]={ 0x1FA6 }, ["title"]={ 0x1FAE }, ["upper"]={ 0x1F6E, 0x0399 }, }, }, }, [0x1FAF]={ [""]={ ["all"]={ ["lower"]={ 0x1FA7 }, ["title"]={ 0x1FAF }, ["upper"]={ 0x1F6F, 0x0399 }, }, }, }, [0x1FB2]={ [""]={ ["all"]={ ["lower"]={ 0x1FB2 }, ["title"]={ 0x1FBA, 0x0345 }, ["upper"]={ 0x1FBA, 0x0399 }, }, }, }, [0x1FB3]={ [""]={ ["all"]={ ["lower"]={ 0x1FB3 }, ["title"]={ 0x1FBC }, ["upper"]={ 0x0391, 0x0399 }, }, }, }, [0x1FB4]={ [""]={ ["all"]={ ["lower"]={ 0x1FB4 }, ["title"]={ 0x0386, 0x0345 }, ["upper"]={ 0x0386, 0x0399 }, }, }, }, [0x1FB6]={ [""]={ ["all"]={ ["lower"]={ 0x1FB6 }, ["title"]={ 0x0391, 0x0342 }, ["upper"]={ 0x0391, 0x0342 }, }, }, }, [0x1FB7]={ [""]={ ["all"]={ ["lower"]={ 0x1FB7 }, ["title"]={ 0x0391, 0x0342, 0x0345 }, ["upper"]={ 0x0391, 0x0342, 0x0399 }, }, }, }, [0x1FBC]={ [""]={ ["all"]={ ["lower"]={ 0x1FB3 }, ["title"]={ 0x1FBC }, ["upper"]={ 0x0391, 0x0399 }, }, }, }, [0x1FC2]={ [""]={ ["all"]={ ["lower"]={ 0x1FC2 }, ["title"]={ 0x1FCA, 0x0345 }, ["upper"]={ 0x1FCA, 0x0399 }, }, }, }, [0x1FC3]={ [""]={ ["all"]={ ["lower"]={ 0x1FC3 }, ["title"]={ 0x1FCC }, ["upper"]={ 0x0397, 0x0399 }, }, }, }, [0x1FC4]={ [""]={ ["all"]={ ["lower"]={ 0x1FC4 }, ["title"]={ 0x0389, 0x0345 }, ["upper"]={ 0x0389, 0x0399 }, }, }, }, [0x1FC6]={ [""]={ ["all"]={ ["lower"]={ 0x1FC6 }, ["title"]={ 0x0397, 0x0342 }, ["upper"]={ 0x0397, 0x0342 }, }, }, }, [0x1FC7]={ [""]={ ["all"]={ ["lower"]={ 0x1FC7 }, ["title"]={ 0x0397, 0x0342, 0x0345 }, ["upper"]={ 0x0397, 0x0342, 0x0399 }, }, }, }, [0x1FCC]={ [""]={ ["all"]={ ["lower"]={ 0x1FC3 }, ["title"]={ 0x1FCC }, ["upper"]={ 0x0397, 0x0399 }, }, }, }, [0x1FD2]={ [""]={ ["all"]={ ["lower"]={ 0x1FD2 }, ["title"]={ 0x0399, 0x0308, 0x0300 }, ["upper"]={ 0x0399, 0x0308, 0x0300 }, }, }, }, [0x1FD3]={ [""]={ ["all"]={ ["lower"]={ 0x1FD3 }, ["title"]={ 0x0399, 0x0308, 0x0301 }, ["upper"]={ 0x0399, 0x0308, 0x0301 }, }, }, }, [0x1FD6]={ [""]={ ["all"]={ ["lower"]={ 0x1FD6 }, ["title"]={ 0x0399, 0x0342 }, ["upper"]={ 0x0399, 0x0342 }, }, }, }, [0x1FD7]={ [""]={ ["all"]={ ["lower"]={ 0x1FD7 }, ["title"]={ 0x0399, 0x0308, 0x0342 }, ["upper"]={ 0x0399, 0x0308, 0x0342 }, }, }, }, [0x1FE2]={ [""]={ ["all"]={ ["lower"]={ 0x1FE2 }, ["title"]={ 0x03A5, 0x0308, 0x0300 }, ["upper"]={ 0x03A5, 0x0308, 0x0300 }, }, }, }, [0x1FE3]={ [""]={ ["all"]={ ["lower"]={ 0x1FE3 }, ["title"]={ 0x03A5, 0x0308, 0x0301 }, ["upper"]={ 0x03A5, 0x0308, 0x0301 }, }, }, }, [0x1FE4]={ [""]={ ["all"]={ ["lower"]={ 0x1FE4 }, ["title"]={ 0x03A1, 0x0313 }, ["upper"]={ 0x03A1, 0x0313 }, }, }, }, [0x1FE6]={ [""]={ ["all"]={ ["lower"]={ 0x1FE6 }, ["title"]={ 0x03A5, 0x0342 }, ["upper"]={ 0x03A5, 0x0342 }, }, }, }, [0x1FE7]={ [""]={ ["all"]={ ["lower"]={ 0x1FE7 }, ["title"]={ 0x03A5, 0x0308, 0x0342 }, ["upper"]={ 0x03A5, 0x0308, 0x0342 }, }, }, }, [0x1FF2]={ [""]={ ["all"]={ ["lower"]={ 0x1FF2 }, ["title"]={ 0x1FFA, 0x0345 }, ["upper"]={ 0x1FFA, 0x0399 }, }, }, }, [0x1FF3]={ [""]={ ["all"]={ ["lower"]={ 0x1FF3 }, ["title"]={ 0x1FFC }, ["upper"]={ 0x03A9, 0x0399 }, }, }, }, [0x1FF4]={ [""]={ ["all"]={ ["lower"]={ 0x1FF4 }, ["title"]={ 0x038F, 0x0345 }, ["upper"]={ 0x038F, 0x0399 }, }, }, }, [0x1FF6]={ [""]={ ["all"]={ ["lower"]={ 0x1FF6 }, ["title"]={ 0x03A9, 0x0342 }, ["upper"]={ 0x03A9, 0x0342 }, }, }, }, [0x1FF7]={ [""]={ ["all"]={ ["lower"]={ 0x1FF7 }, ["title"]={ 0x03A9, 0x0342, 0x0345 }, ["upper"]={ 0x03A9, 0x0342, 0x0399 }, }, }, }, [0x1FFC]={ [""]={ ["all"]={ ["lower"]={ 0x1FF3 }, ["title"]={ 0x1FFC }, ["upper"]={ 0x03A9, 0x0399 }, }, }, }, [0xFB00]={ [""]={ ["all"]={ ["lower"]={ 0xFB00 }, ["title"]={ 0x0046, 0x0066 }, ["upper"]={ 0x0046, 0x0046 }, }, }, }, [0xFB01]={ [""]={ ["all"]={ ["lower"]={ 0xFB01 }, ["title"]={ 0x0046, 0x0069 }, ["upper"]={ 0x0046, 0x0049 }, }, }, }, [0xFB02]={ [""]={ ["all"]={ ["lower"]={ 0xFB02 }, ["title"]={ 0x0046, 0x006C }, ["upper"]={ 0x0046, 0x004C }, }, }, }, [0xFB03]={ [""]={ ["all"]={ ["lower"]={ 0xFB03 }, ["title"]={ 0x0046, 0x0066, 0x0069 }, ["upper"]={ 0x0046, 0x0046, 0x0049 }, }, }, }, [0xFB04]={ [""]={ ["all"]={ ["lower"]={ 0xFB04 }, ["title"]={ 0x0046, 0x0066, 0x006C }, ["upper"]={ 0x0046, 0x0046, 0x004C }, }, }, }, [0xFB05]={ [""]={ ["all"]={ ["lower"]={ 0xFB05 }, ["title"]={ 0x0053, 0x0074 }, ["upper"]={ 0x0053, 0x0054 }, }, }, }, [0xFB06]={ [""]={ ["all"]={ ["lower"]={ 0xFB06 }, ["title"]={ 0x0053, 0x0074 }, ["upper"]={ 0x0053, 0x0054 }, }, }, }, [0xFB13]={ [""]={ ["all"]={ ["lower"]={ 0xFB13 }, ["title"]={ 0x0544, 0x0576 }, ["upper"]={ 0x0544, 0x0546 }, }, }, }, [0xFB14]={ [""]={ ["all"]={ ["lower"]={ 0xFB14 }, ["title"]={ 0x0544, 0x0565 }, ["upper"]={ 0x0544, 0x0535 }, }, }, }, [0xFB15]={ [""]={ ["all"]={ ["lower"]={ 0xFB15 }, ["title"]={ 0x0544, 0x056B }, ["upper"]={ 0x0544, 0x053B }, }, }, }, [0xFB16]={ [""]={ ["all"]={ ["lower"]={ 0xFB16 }, ["title"]={ 0x054E, 0x0576 }, ["upper"]={ 0x054E, 0x0546 }, }, }, }, [0xFB17]={ [""]={ ["all"]={ ["lower"]={ 0xFB17 }, ["title"]={ 0x0544, 0x056D }, ["upper"]={ 0x0544, 0x053D }, }, }, }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-cyr.mkii0000644000175000017500000012640711754241457024307 0ustar norbertnorbert%D \module %D [ file=enco-cyr, %D version=2003.01.24, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Cyrillic, %D author=..., %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The following kerning test is inspired by a test file %D provided by Victor Figurnov. I hope he still recognizes %D some bit and pieces. %D %D \starttyping %D \setupoutput[pdftex] %D %D \startMPenvironment[global] %D \useregime[cyr] %D \useencoding[cyr] %D \mainlanguage[ru] %D \enableregime[cp1251] %D \setupbodyfont[cyr] %D \stopMPenvironment %D %D \startbuffer %D \starttabulate[|l|l|l|] %D \NC \ruledhbox{} \NC \ruledhbox{AV} \NC with kerning \NC \NR %D \NC \ruledhbox{{}{}} \NC \ruledhbox{A{}V} \NC without kerning \NC \NR %D \NC \ruledhbox{\tfd } \NC \ruledhbox{\tfd AV} \NC with kerning \NC \NR %D \NC \ruledhbox{\tfd {}{}} \NC \ruledhbox{\tfd A{}V} \NC without kerning \NC \NR %D \stoptabulate %D %D \showkerning{ } %D \stopbuffer %D %D \starttext %D %D \title{Kerning test} %D %D \typebuffer %D %D \rm \subject{Serif font} \getbuffer %D \ss \subject{SansSerif font} \getbuffer %D \tt \subject{MonoSpacec font} \getbuffer %D %D \stoptext %D \stoptyping %D We start with a fallback, define by HH, who assumes that %D this is phonetic. \startmapping[t2a] \resetcaserange 128 to 255 \definecasemaps 192 to 223 lc +32 uc 0 % base letters (russian) \definecasemaps 224 to 255 lc 0 uc -32 \definecasemaps 128 to 156 lc +32 uc 0 % extra letters (cyrillic and old-slav) \definecasemaps 160 to 188 lc 0 uc -32 \definecasemap 73 105 73 \definecasemap 105 105 73 % cyrillicII \definecasemap 74 106 74 \definecasemap 106 106 74 % cyrillicJE \definecasemap 81 113 81 \definecasemap 113 113 81 % cyrillicQ \definecasemap 87 119 87 \definecasemap 119 119 87 % cyrillicW \stopmapping \startencoding[t2a] \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter textcyrillicflex 18 \definecharacter textdblgrave 19 \definecharacter textcyrillicbreve 20 \definecharacter endash 21 \definecharacter emdash 22 \definecharacter textcompwordmark 23 \definecharacter textbackslash 92 \definecharacter textasciicircum 94 \definecharacter textunderscore 95 \definecharacter textbraceleft 123 \definecharacter textbraceright 125 \definecharacter textasciitilde 126 \definecharacter textnumero 157 \definecharacter textcurrency 158 \definecharacter sectionmark 159 \definecharacter quotedbl 34 \definecharacter quoteleft 96 \definecharacter upperleftsingleninequote 39 \definecharacter quotedblleft 16 \definecharacter quotedblright 17 \definecharacter lowerleftdoubleninequote 189 \definecharacter upperrightdoublesixquote 16 \definecharacter upperrightdoubleninequote 17 \definecharacter quotedblbase 189 \definecharacter cyrillicpalochka 13 \definecharacter cyrilliclangle 14 \definecharacter cyrillicrangle 15 \definecharacter leftguillemot 190 \definecharacter rightguillemot 191 \definecharacter dotlessi 25 \definecharacter cyrillicA 192 \definecharacter cyrillica 224 \definecharacter cyrillicB 193 \definecharacter cyrillicb 225 \definecharacter cyrillicV 194 \definecharacter cyrillicv 226 \definecharacter cyrillicG 195 \definecharacter cyrillicg 227 \definecharacter cyrillicD 196 \definecharacter cyrillicd 228 \definecharacter cyrillicE 197 \definecharacter cyrillice 229 \definecharacter cyrillicZH 198 \definecharacter cyrilliczh 230 \definecharacter cyrillicZ 199 \definecharacter cyrillicz 231 \definecharacter cyrillicI 200 \definecharacter cyrillici 232 \definecharacter cyrillicISHRT 201 \definecharacter cyrillicishrt 233 \definecharacter cyrillicK 202 \definecharacter cyrillick 234 \definecharacter cyrillicL 203 \definecharacter cyrillicl 235 \definecharacter cyrillicM 204 \definecharacter cyrillicm 236 \definecharacter cyrillicN 205 \definecharacter cyrillicn 237 \definecharacter cyrillicO 206 \definecharacter cyrillico 238 \definecharacter cyrillicP 207 \definecharacter cyrillicp 239 \definecharacter cyrillicR 208 \definecharacter cyrillicr 240 \definecharacter cyrillicS 209 \definecharacter cyrillics 241 \definecharacter cyrillicT 210 \definecharacter cyrillict 242 \definecharacter cyrillicU 211 \definecharacter cyrillicu 243 \definecharacter cyrillicF 212 \definecharacter cyrillicf 244 \definecharacter cyrillicH 213 \definecharacter cyrillich 245 \definecharacter cyrillicC 214 \definecharacter cyrillicc 246 \definecharacter cyrillicCH 215 \definecharacter cyrillicch 247 \definecharacter cyrillicSH 216 \definecharacter cyrillicsh 248 \definecharacter cyrillicSHCH 217 \definecharacter cyrillicshch 249 \definecharacter cyrillicHRDSN 218 \definecharacter cyrillichrdsn 250 \definecharacter cyrillicERY 219 \definecharacter cyrillicery 251 \definecharacter cyrillicSFTSN 220 \definecharacter cyrillicsftsn 252 \definecharacter cyrillicEREV 221 \definecharacter cyrillicerev 253 \definecharacter cyrillicYU 222 \definecharacter cyrillicyu 254 \definecharacter cyrillicYA 223 \definecharacter cyrillicya 255 \definecharacter cyrillicGUP 128 \definecharacter cyrillicgup 160 \definecharacter cyrillicGHCRS 129 \definecharacter cyrillicghcrs 161 \definecharacter cyrillicDJE 130 \definecharacter cyrillicdje 162 \definecharacter cyrillicTSHE 131 \definecharacter cyrillictshe 163 \definecharacter cyrillicSHHA 132 \definecharacter cyrillicshha 164 \definecharacter cyrillicZHDSC 133 \definecharacter cyrilliczhdsc 165 \definecharacter cyrillicZDSC 134 \definecharacter cyrilliczdsc 166 \definecharacter cyrillicLJE 135 \definecharacter cyrilliclje 167 \definecharacter cyrillicYI 136 \definecharacter cyrillicyi 168 \definecharacter cyrillicKDSC 137 \definecharacter cyrillickdsc 169 \definecharacter cyrillicKBEAK 138 \definecharacter cyrillickbeak 170 \definecharacter cyrillicKVCRS 139 \definecharacter cyrillickvcrs 171 \definecharacter cyrillicAE 140 \definecharacter cyrillicae 172 \definecharacter cyrillicNDSC 141 \definecharacter cyrillicndsc 173 \definecharacter cyrillicNG 142 \definecharacter cyrillicng 174 \definecharacter cyrillicDZE 143 \definecharacter cyrillicdze 175 \definecharacter cyrillicOTLD 144 \definecharacter cyrillicotld 176 \definecharacter cyrillicSDSC 145 \definecharacter cyrillicsdsc 177 \definecharacter cyrillicUSHRT 146 \definecharacter cyrillicushrt 178 \definecharacter cyrillicY 147 \definecharacter cyrillicy 179 \definecharacter cyrillicYHCRS 148 \definecharacter cyrillicyhcrs 180 \definecharacter cyrillicHDSC 149 \definecharacter cyrillichdsc 181 \definecharacter cyrillicDZHE 150 \definecharacter cyrillicdzhe 182 \definecharacter cyrillicCHVCRS 151 \definecharacter cyrillicchvcrs 183 \definecharacter cyrillicCHRDSC 152 \definecharacter cyrillicchrdsc 184 \definecharacter cyrillicIE 153 \definecharacter cyrillicie 185 \definecharacter cyrillicSCHWA 154 \definecharacter cyrillicschwa 186 \definecharacter cyrillicNJE 155 \definecharacter cyrillicnje 187 \definecharacter cyrillicYO 156 \definecharacter cyrillicyo 188 \definecharacter cyrillicII 73 \definecharacter cyrillicii 105 \definecharacter cyrillicJE 74 \definecharacter cyrillicje 106 \definecharacter cyrillicQ 81 \definecharacter cyrillicq 113 \definecharacter cyrillicW 87 \definecharacter cyrillicw 119 % \definecharacter textperthousand {\%\char 24 } % \definecharacter textpertenthousand {\%\char 24\char 24 } \definecharacter cyrillicgheupturn 160 % to satisfy the patterns \stopencoding \startmapping[t2b] \resetcaserange 128 to 255 \definecasemaps 192 to 223 lc +32 uc 0 % base letters (russian) \definecasemaps 224 to 255 lc 0 uc -32 \definecasemaps 128 to 156 lc +32 uc 0 % extra letters (cyrillic and old-slav) \definecasemaps 160 to 188 lc 0 uc -32 \definecasemap 73 105 73 \definecasemap 105 105 73 % cyrillicII \definecasemap 74 106 74 \definecasemap 106 106 74 % cyrillicJE \definecasemap 81 113 81 \definecasemap 113 113 81 % cyrillicQ \definecasemap 83 115 83 \definecasemap 115 115 83 % cyrillicDZE \definecasemap 87 119 87 \definecasemap 119 119 87 % cyrillicW \stopmapping \startencoding[t2b] \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter textcyrillicflex 18 \definecharacter textdblgrave 19 \definecharacter textcyrillicbreve 20 \definecharacter endash 21 \definecharacter emdash 22 \definecharacter textcompwordmark 23 \definecharacter textbackslash 92 \definecharacter textasciicircum 94 \definecharacter textunderscore 95 \definecharacter textbraceleft 123 \definecharacter textbraceright 125 \definecharacter textasciitilde 126 \definecharacter textnumero 157 \definecharacter textcurrency 158 \definecharacter sectionmark 159 \definecharacter quotedbl 34 \definecharacter quoteleft 96 \definecharacter upperleftsingleninequote 39 \definecharacter quotedblleft 16 \definecharacter quotedblright 17 \definecharacter lowerleftdoubleninequote 189 \definecharacter upperrightdoublesixquote 16 \definecharacter upperrightdoubleninequote 17 \definecharacter quotedblbase 189 \definecharacter cyrillicpalochka 13 \definecharacter cyrilliclangle 14 \definecharacter cyrillicrangle 15 \definecharacter leftguillemot 190 \definecharacter rightguillemot 191 \definecharacter dotlessi 25 \definecharacter cyrillicA 192 \definecharacter cyrillica 224 \definecharacter cyrillicB 193 \definecharacter cyrillicb 225 \definecharacter cyrillicV 194 \definecharacter cyrillicv 226 \definecharacter cyrillicG 195 \definecharacter cyrillicg 227 \definecharacter cyrillicD 196 \definecharacter cyrillicd 228 \definecharacter cyrillicE 197 \definecharacter cyrillice 229 \definecharacter cyrillicZH 198 \definecharacter cyrilliczh 230 \definecharacter cyrillicZ 199 \definecharacter cyrillicz 231 \definecharacter cyrillicI 200 \definecharacter cyrillici 232 \definecharacter cyrillicISHRT 201 \definecharacter cyrillicishrt 233 \definecharacter cyrillicK 202 \definecharacter cyrillick 234 \definecharacter cyrillicL 203 \definecharacter cyrillicl 235 \definecharacter cyrillicM 204 \definecharacter cyrillicm 236 \definecharacter cyrillicN 205 \definecharacter cyrillicn 237 \definecharacter cyrillicO 206 \definecharacter cyrillico 238 \definecharacter cyrillicP 207 \definecharacter cyrillicp 239 \definecharacter cyrillicR 208 \definecharacter cyrillicr 240 \definecharacter cyrillicS 209 \definecharacter cyrillics 241 \definecharacter cyrillicT 210 \definecharacter cyrillict 242 \definecharacter cyrillicU 211 \definecharacter cyrillicu 243 \definecharacter cyrillicF 212 \definecharacter cyrillicf 244 \definecharacter cyrillicH 213 \definecharacter cyrillich 245 \definecharacter cyrillicC 214 \definecharacter cyrillicc 246 \definecharacter cyrillicCH 215 \definecharacter cyrillicch 247 \definecharacter cyrillicSH 216 \definecharacter cyrillicsh 248 \definecharacter cyrillicSHCH 217 \definecharacter cyrillicshch 249 \definecharacter cyrillicHRDSN 218 \definecharacter cyrillichrdsn 250 \definecharacter cyrillicERY 219 \definecharacter cyrillicery 251 \definecharacter cyrillicSFTSN 220 \definecharacter cyrillicsftsn 252 \definecharacter cyrillicEREV 221 \definecharacter cyrillicerev 253 \definecharacter cyrillicYU 222 \definecharacter cyrillicyu 254 \definecharacter cyrillicYA 223 \definecharacter cyrillicya 255 \definecharacter cyrillicGDSCHCRS 128 \definecharacter cyrillicgdschcrs 160 \definecharacter cyrillicGHCRS 129 \definecharacter cyrillicghcrs 161 \definecharacter cyrillicGDSC 130 \definecharacter cyrillicgdsc 162 \definecharacter cyrillicGHK 131 \definecharacter cyrillicghk 163 \definecharacter cyrillicSHHA 132 \definecharacter cyrillicshha 164 \definecharacter cyrillicZHDSC 133 \definecharacter cyrilliczhdsc 165 \definecharacter cyrillicDELTA 134 \definecharacter cyrillicdelta 166 \definecharacter cyrillicABHDZE 135 \definecharacter cyrillicabhdze 167 \definecharacter cyrillicLJE 136 \definecharacter cyrilliclje 168 \definecharacter cyrillicKDSC 137 \definecharacter cyrillickdsc 169 \definecharacter cyrillicLDSC 138 \definecharacter cyrillicldsc 170 \definecharacter cyrillicKHK 139 \definecharacter cyrillickhk 171 \definecharacter cyrillicLHK 140 \definecharacter cyrilliclhk 172 \definecharacter cyrillicNDSC 141 \definecharacter cyrillicndsc 173 \definecharacter cyrillicNG 142 \definecharacter cyrillicng 174 \definecharacter cyrillicNHK 143 \definecharacter cyrillicnhk 175 \definecharacter cyrillicOTLD 144 \definecharacter cyrillicotld 176 \definecharacter cyrillicSACRS 145 \definecharacter cyrillicsacrs 177 \definecharacter cyrillicUSHRT 146 \definecharacter cyrillicushrt 178 \definecharacter cyrillicY 147 \definecharacter cyrillicy 179 \definecharacter cyrillicHHCRS 148 \definecharacter cyrillichhcrs 180 \definecharacter cyrillicHDSC 149 \definecharacter cyrillichdsc 181 \definecharacter cyrillicHHK 150 \definecharacter cyrillichhk 182 \definecharacter cyrillicCHLDSC 151 \definecharacter cyrillicchldsc 183 \definecharacter cyrillicCHRDSC 152 \definecharacter cyrillicchrdsc 184 \definecharacter cyrillicNJE 153 \definecharacter cyrillicnje 185 \definecharacter cyrillicSCHWA 154 \definecharacter cyrillicschwa 186 \definecharacter cyrillicEPS 155 \definecharacter cyrilliceps 187 \definecharacter cyrillicYO 156 \definecharacter cyrillicyo 188 \definecharacter cyrillicII 73 \definecharacter cyrillicii 105 \definecharacter cyrillicJE 74 \definecharacter cyrillicje 106 \definecharacter cyrillicQ 81 \definecharacter cyrillicq 113 \definecharacter cyrillicDZE 83 \definecharacter cyrillicdze 115 \definecharacter cyrillicW 87 \definecharacter cyrillicw 119 \stopencoding \startmapping[t2c] \resetcaserange 128 to 255 \definecasemaps 192 to 223 lc +32 uc 0 % base letters (russian) \definecasemaps 224 to 255 lc 0 uc -32 \definecasemaps 128 to 156 lc +32 uc 0 % extra letters (cyrillic and old-slav) \definecasemaps 160 to 188 lc 0 uc -32 \definecasemap 73 105 73 \definecasemap 105 105 73 % cyrillicII \definecasemap 74 106 74 \definecasemap 106 106 74 % cyrillicJE \definecasemap 81 113 81 \definecasemap 113 113 81 % cyrillicQ \definecasemap 83 115 83 \definecasemap 115 115 83 % cyrillicDZE \definecasemap 87 119 87 \definecasemap 119 119 87 % cyrillicW \stopmapping \startencoding[t2c] \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter textcyrillicflex 18 \definecharacter textdblgrave 19 \definecharacter textcyrillicbreve 20 \definecharacter endash 21 \definecharacter emdash 22 \definecharacter textcompwordmark 23 \definecharacter textbackslash 92 \definecharacter textasciicircum 94 \definecharacter textunderscore 95 \definecharacter textbraceleft 123 \definecharacter textbraceright 125 \definecharacter textasciitilde 126 \definecharacter textnumero 157 \definecharacter textcurrency 158 \definecharacter sectionmark 159 \definecharacter quotedbl 34 \definecharacter quoteleft 96 \definecharacter upperleftsingleninequote 39 \definecharacter quotedblleft 16 \definecharacter quotedblright 17 \definecharacter lowerleftdoubleninequote 189 \definecharacter upperrightdoublesixquote 16 \definecharacter upperrightdoubleninequote 17 \definecharacter quotedblbase 189 \definecharacter cyrillicpalochka 13 \definecharacter cyrilliclangle 14 \definecharacter cyrillicrangle 15 \definecharacter leftguillemot 190 \definecharacter rightguillemot 191 \definecharacter dotlessi 25 \definecharacter cyrillicA 192 \definecharacter cyrillica 224 \definecharacter cyrillicB 193 \definecharacter cyrillicb 225 \definecharacter cyrillicV 194 \definecharacter cyrillicv 226 \definecharacter cyrillicG 195 \definecharacter cyrillicg 227 \definecharacter cyrillicD 196 \definecharacter cyrillicd 228 \definecharacter cyrillicE 197 \definecharacter cyrillice 229 \definecharacter cyrillicZH 198 \definecharacter cyrilliczh 230 \definecharacter cyrillicZ 199 \definecharacter cyrillicz 231 \definecharacter cyrillicI 200 \definecharacter cyrillici 232 \definecharacter cyrillicISHRT 201 \definecharacter cyrillicishrt 233 \definecharacter cyrillicK 202 \definecharacter cyrillick 234 \definecharacter cyrillicL 203 \definecharacter cyrillicl 235 \definecharacter cyrillicM 204 \definecharacter cyrillicm 236 \definecharacter cyrillicN 205 \definecharacter cyrillicn 237 \definecharacter cyrillicO 206 \definecharacter cyrillico 238 \definecharacter cyrillicP 207 \definecharacter cyrillicp 239 \definecharacter cyrillicR 208 \definecharacter cyrillicr 240 \definecharacter cyrillicS 209 \definecharacter cyrillics 241 \definecharacter cyrillicT 210 \definecharacter cyrillict 242 \definecharacter cyrillicU 211 \definecharacter cyrillicu 243 \definecharacter cyrillicF 212 \definecharacter cyrillicf 244 \definecharacter cyrillicH 213 \definecharacter cyrillich 245 \definecharacter cyrillicC 214 \definecharacter cyrillicc 246 \definecharacter cyrillicCH 215 \definecharacter cyrillicch 247 \definecharacter cyrillicSH 216 \definecharacter cyrillicsh 248 \definecharacter cyrillicSHCH 217 \definecharacter cyrillicshch 249 \definecharacter cyrillicHRDSN 218 \definecharacter cyrillichrdsn 250 \definecharacter cyrillicERY 219 \definecharacter cyrillicery 251 \definecharacter cyrillicSFTSN 220 \definecharacter cyrillicsftsn 252 \definecharacter cyrillicEREV 221 \definecharacter cyrillicerev 253 \definecharacter cyrillicYU 222 \definecharacter cyrillicyu 254 \definecharacter cyrillicYA 223 \definecharacter cyrillicya 255 \definecharacter cyrillicPHK 128 \definecharacter cyrillicphk 160 \definecharacter cyrillicTETSE 129 \definecharacter cyrillictetse 161 \definecharacter cyrillicTDSC 130 \definecharacter cyrillictdsc 162 \definecharacter cyrillicGHK 131 \definecharacter cyrillicghk 163 \definecharacter cyrillicSHHA 132 \definecharacter cyrillicshha 164 \definecharacter cyrillicRDSC 133 \definecharacter cyrillicrdsc 165 \definecharacter cyrillicRTICK 134 \definecharacter cyrillicrtick 166 \definecharacter cyrillicABHDZE 135 \definecharacter cyrillicabhdze 167 \definecharacter cyrillicMDSC 136 \definecharacter cyrillicmdsc 168 \definecharacter cyrillicKDSC 137 \definecharacter cyrillickdsc 169 \definecharacter cyrillicLDSC 138 \definecharacter cyrillicldsc 170 \definecharacter cyrillicKHCRS 139 \definecharacter cyrillickhcrs 171 \definecharacter cyrillicLHK 140 \definecharacter cyrilliclhk 172 \definecharacter cyrillicNDSC 141 \definecharacter cyrillicndsc 173 \definecharacter cyrillicMHK 142 \definecharacter cyrillicmhk 174 \definecharacter cyrillicNHK 143 \definecharacter cyrillicnhk 175 \definecharacter cyrillicOTLD 144 \definecharacter cyrillicotld 176 \definecharacter cyrillicABHCH 145 \definecharacter cyrillicabhch 177 \definecharacter cyrillicABHCHDSC 146 \definecharacter cyrillicabhchdsc 178 \definecharacter cyrillicSEMISFTSN 147 \definecharacter cyrillicsemisftsn 179 \definecharacter cyrillicISHRTDSC 148 \definecharacter cyrillicishrtdsc 180 \definecharacter cyrillicHDSC 149 \definecharacter cyrillichdsc 181 \definecharacter cyrillicDZHE 150 \definecharacter cyrillicdzhe 182 \definecharacter cyrillicABHHA 151 \definecharacter cyrillicabhha 183 \definecharacter cyrillicCHRDSC 152 \definecharacter cyrillicchrdsc 184 \definecharacter cyrillicNLHK 153 \definecharacter cyrillicnlhk 185 \definecharacter cyrillicSCHWA 154 \definecharacter cyrillicschwa 186 \definecharacter cyrillicRHK 155 \definecharacter cyrillicrhk 187 \definecharacter cyrillicYO 156 \definecharacter cyrillicyo 188 \definecharacter cyrillicII 73 \definecharacter cyrillicii 105 \definecharacter cyrillicJE 74 \definecharacter cyrillicje 106 \definecharacter cyrillicQ 81 \definecharacter cyrillicq 113 \definecharacter cyrillicDZE 83 \definecharacter cyrillicdze 115 \definecharacter cyrillicW 87 \definecharacter cyrillicw 119 \stopencoding \startmapping[x2] \resetcaserange 128 to 255 \definecasemaps 192 to 223 lc +32 uc 0 % base letters (russian) \definecasemaps 224 to 255 lc 0 uc -32 \definecasemaps 128 to 156 lc +32 uc 0 % extra letters (cyrillic and old-slav) \definecasemaps 160 to 188 lc 0 uc -32 \definecasemaps 65 to 90 lc +32 uc 0 % more extra letters (cyrillic and old-slav) \definecasemaps 97 to 122 lc 0 uc -32 \definecasemap 28 29 28 \definecasemap 29 29 28 % cyrillicNLHK \definecasemap 30 31 30 \definecasemap 31 31 30 % cyrillicDELTA \stopmapping \startencoding[x2] \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter endash 21 \definecharacter emdash 22 \definecharacter textcompwordmark 23 \definecharacter textvisiblespace 32 \definecharacter textdollar 36 \definecharacter textless 60 \definecharacter textgreater 62 \definecharacter textbackslash 92 \definecharacter textasciicircum 94 \definecharacter textunderscore 95 \definecharacter textbraceleft 123 \definecharacter textbar 124 \definecharacter textbraceright 125 \definecharacter textasciitilde 126 \definecharacter textnumero 157 \definecharacter textcurrency 158 \definecharacter textsection 159 \definecharacter sectionmark 159 \definecharacter textquotedbl 34 \definecharacter cyrillicpalochka 13 \definecharacter cyrilliclangle 14 \definecharacter cyrillicrangle 15 \definecharacter leftguillemot 190 \definecharacter rightguillemot 191 \definecharacter upperleftsinglesixquote 96 \definecharacter upperleftsingleninequote 39 \definecharacter upperleftdoublesixquote 16 \definecharacter upperleftdoubleninequote 17 \definecharacter lowerleftdoubleninequote 189 \definecharacter upperrightsinglesixquote 96 \definecharacter upperrightsingleninequote 39 \definecharacter upperrightdoublesixquote 16 \definecharacter upperrightdoubleninequote 17 \definecharacter lowerrightdoubleninequote 189 \definecharacter cyrillicA 192 \definecharacter cyrillica 224 \definecharacter cyrillicB 193 \definecharacter cyrillicb 225 \definecharacter cyrillicV 194 \definecharacter cyrillicv 226 \definecharacter cyrillicG 195 \definecharacter cyrillicg 227 \definecharacter cyrillicD 196 \definecharacter cyrillicd 228 \definecharacter cyrillicE 197 \definecharacter cyrillice 229 \definecharacter cyrillicZH 198 \definecharacter cyrilliczh 230 \definecharacter cyrillicZ 199 \definecharacter cyrillicz 231 \definecharacter cyrillicI 200 \definecharacter cyrillici 232 \definecharacter cyrillicISHRT 201 \definecharacter cyrillicishrt 233 \definecharacter cyrillicK 202 \definecharacter cyrillick 234 \definecharacter cyrillicL 203 \definecharacter cyrillicl 235 \definecharacter cyrillicM 204 \definecharacter cyrillicm 236 \definecharacter cyrillicN 205 \definecharacter cyrillicn 237 \definecharacter cyrillicO 206 \definecharacter cyrillico 238 \definecharacter cyrillicP 207 \definecharacter cyrillicp 239 \definecharacter cyrillicR 208 \definecharacter cyrillicr 240 \definecharacter cyrillicS 209 \definecharacter cyrillics 241 \definecharacter cyrillicT 210 \definecharacter cyrillict 242 \definecharacter cyrillicU 211 \definecharacter cyrillicu 243 \definecharacter cyrillicF 212 \definecharacter cyrillicf 244 \definecharacter cyrillicH 213 \definecharacter cyrillich 245 \definecharacter cyrillicC 214 \definecharacter cyrillicc 246 \definecharacter cyrillicCH 215 \definecharacter cyrillicch 247 \definecharacter cyrillicSH 216 \definecharacter cyrillicsh 248 \definecharacter cyrillicSHCH 217 \definecharacter cyrillicshch 249 \definecharacter cyrillicHRDSN 218 \definecharacter cyrillichrdsn 250 \definecharacter cyrillicERY 219 \definecharacter cyrillicery 251 \definecharacter cyrillicSFTSN 220 \definecharacter cyrillicsftsn 252 \definecharacter cyrillicEREV 221 \definecharacter cyrillicerev 253 \definecharacter cyrillicYU 222 \definecharacter cyrillicyu 254 \definecharacter cyrillicYA 223 \definecharacter cyrillicya 255 \definecharacter cyrillicGUP 128 \definecharacter cyrillicgup 160 \definecharacter cyrillicGHCRS 129 \definecharacter cyrillicghcrs 161 \definecharacter cyrillicGDSC 130 \definecharacter cyrillicgdsc 162 \definecharacter cyrillicGHK 131 \definecharacter cyrillicghk 163 \definecharacter cyrillicSHHA 132 \definecharacter cyrillicshha 164 \definecharacter cyrillicZHDSC 133 \definecharacter cyrilliczhdsc 165 \definecharacter cyrillicZDSC 134 \definecharacter cyrilliczdsc 166 \definecharacter cyrillicABHDZE 135 \definecharacter cyrillicabhdze 167 \definecharacter cyrillicYI 136 \definecharacter cyrillicyi 168 \definecharacter cyrillicKDSC 137 \definecharacter cyrillickdsc 169 \definecharacter cyrillicKBEAK 138 \definecharacter cyrillickbeak 170 \definecharacter cyrillicKHK 139 \definecharacter cyrillickhk 171 \definecharacter cyrillicLHK 140 \definecharacter cyrilliclhk 172 \definecharacter cyrillicNDSC 141 \definecharacter cyrillicndsc 173 \definecharacter cyrillicNG 142 \definecharacter cyrillicng 174 \definecharacter cyrillicNHK 143 \definecharacter cyrillicnhk 175 \definecharacter cyrillicOTLD 144 \definecharacter cyrillicotld 176 \definecharacter cyrillicSDSC 145 \definecharacter cyrillicsdsc 177 \definecharacter cyrillicUSHRT 146 \definecharacter cyrillicushrt 178 \definecharacter cyrillicY 147 \definecharacter cyrillicy 179 \definecharacter cyrillicYHCRS 148 \definecharacter cyrillicyhcrs 180 \definecharacter cyrillicHDSC 149 \definecharacter cyrillichdsc 181 \definecharacter cyrillicHHK 150 \definecharacter cyrillichhk 182 \definecharacter cyrillicCHLDSC 151 \definecharacter cyrillicchldsc 183 \definecharacter cyrillicCHRDSC 152 \definecharacter cyrillicchrdsc 184 \definecharacter cyrillicIE 153 \definecharacter cyrillicie 185 \definecharacter cyrillicSCHWA 154 \definecharacter cyrillicschwa 186 \definecharacter cyrillicEPS 155 \definecharacter cyrilliceps 187 \definecharacter cyrillicYO 156 \definecharacter cyrillicyo 188 \definecharacter cyrillicAE 65 \definecharacter cyrillicae 97 \definecharacter cyrillicDJE 66 \definecharacter cyrillicdje 98 \definecharacter cyrillicTSHE 67 \definecharacter cyrillictshe 99 \definecharacter cyrillicABHCH 68 \definecharacter cyrillicabhch 100 \definecharacter cyrillicABHCHDSC 69 \definecharacter cyrillicabhchdsc 101 \definecharacter cyrillicKVCRS 70 \definecharacter cyrillickvcrs 102 \definecharacter cyrillicKHCRS 71 \definecharacter cyrillickhcrs 103 \definecharacter cyrillicLDSC 72 \definecharacter cyrillicldsc 104 \definecharacter cyrillicII 73 \definecharacter cyrillicii 105 \definecharacter cyrillicJE 74 \definecharacter cyrillicje 106 \definecharacter cyrillicLJE 75 \definecharacter cyrilliclje 107 \definecharacter cyrillicMDSC 76 \definecharacter cyrillicmdsc 108 \definecharacter cyrillicNJE 77 \definecharacter cyrillicnje 109 \definecharacter cyrillicABHHA 78 \definecharacter cyrillicabhha 110 \definecharacter cyrillicPHK 79 \definecharacter cyrillicphk 111 \definecharacter cyrillicRDSC 80 \definecharacter cyrillicrdsc 112 \definecharacter cyrillicQ 81 \definecharacter cyrillicq 113 \definecharacter cyrillicTDSC 82 \definecharacter cyrillictdsc 114 \definecharacter cyrillicDZE 83 \definecharacter cyrillicdze 115 \definecharacter cyrillicTETSE 84 \definecharacter cyrillictetse 116 \definecharacter cyrillicDZHE 85 \definecharacter cyrillicdzhe 117 \definecharacter cyrillicCHVCRS 86 \definecharacter cyrillicchvcrs 118 \definecharacter cyrillicW 87 \definecharacter cyrillicw 119 \definecharacter cyrillicYAT 88 \definecharacter cyrillicyat 120 \definecharacter cyrillicBYUS 89 \definecharacter cyrillicbyus 121 \definecharacter cyrillicIZH 90 \definecharacter cyrillicizh 122 \definecharacter cyrillicNLHK 28 \definecharacter cyrillicnlhk 29 \definecharacter cyrillicDELTA 30 \definecharacter cyrillicdelta 31 \stopencoding \startmapping[lcy] \resetcaserange 128 to 255 \definecasemaps 128 to 143 lc +32 uc 0 \definecasemaps 160 to 175 lc 0 uc -32 \definecasemaps 144 to 159 lc +80 uc 0 \definecasemaps 224 to 239 lc 0 uc -80 \definecasemap 240 241 240 \definecasemap 241 241 240 % cyrillicYO \definecasemap 242 243 242 \definecasemap 243 243 242 % cyrillicGUP \definecasemap 244 245 244 \definecasemap 245 245 244 % cyrillicIE \definecasemap 244 247 244 \definecasemap 247 247 244 % cyrillicII \definecasemap 248 249 248 \definecasemap 249 249 248 % cyrillicYI \definecasemap 250 251 240 \definecasemap 241 241 240 % cyrillicUSHRT \stopmapping \startencoding[lcy] %D Characters 0 to 127 are as in normal cmr slots \definecharacter cyrillicA 128 \definecharacter cyrillicB 129 \definecharacter cyrillicV 130 \definecharacter cyrillicG 131 \definecharacter cyrillicD 132 \definecharacter cyrillicE 133 \definecharacter cyrillicZH 134 \definecharacter cyrillicZ 135 \definecharacter cyrillicI 136 \definecharacter cyrillicISHRT 137 \definecharacter cyrillicK 138 \definecharacter cyrillicL 139 \definecharacter cyrillicM 140 \definecharacter cyrillicN 141 \definecharacter cyrillicO 142 \definecharacter cyrillicP 143 \definecharacter cyrillicR 144 \definecharacter cyrillicS 145 \definecharacter cyrillicT 146 \definecharacter cyrillicU 147 \definecharacter cyrillicF 148 \definecharacter cyrillicH 149 \definecharacter cyrillicC 150 \definecharacter cyrillicCH 151 \definecharacter cyrillicSH 152 \definecharacter cyrillicSHCH 153 \definecharacter cyrillicHRDSN 154 \definecharacter cyrillicERY 155 \definecharacter cyrillicSFTSN 156 \definecharacter cyrillicEREV 157 \definecharacter cyrillicYU 158 \definecharacter cyrillicYA 159 \definecharacter cyrillica 160 \definecharacter cyrillicb 161 \definecharacter cyrillicv 162 \definecharacter cyrillicg 163 \definecharacter cyrillicd 164 \definecharacter cyrillice 165 \definecharacter cyrilliczh 166 \definecharacter cyrillicz 167 \definecharacter cyrillici 168 \definecharacter cyrillicishrt 169 \definecharacter cyrillick 170 \definecharacter cyrillicl 171 \definecharacter cyrillicm 172 \definecharacter cyrillicn 173 \definecharacter cyrillico 174 \definecharacter cyrillicp 175 \definecharacter cyrillicr 224 \definecharacter cyrillics 225 \definecharacter cyrillict 226 \definecharacter cyrillicu 227 \definecharacter cyrillicf 228 \definecharacter cyrillich 229 \definecharacter cyrillicc 230 \definecharacter cyrillicch 231 \definecharacter cyrillicsh 232 \definecharacter cyrillicshch 233 \definecharacter cyrillichrdsn 234 \definecharacter cyrillicery 235 \definecharacter cyrillicsftsn 236 \definecharacter cyrillicerev 237 \definecharacter cyrillicyu 238 \definecharacter cyrillicya 239 \definecharacter cyrillicYO 240 \definecharacter cyrillicyo 241 \definecharacter cyrillicGUP 242 \definecharacter cyrillicgup 243 \definecharacter cyrillicIE 244 \definecharacter cyrillicie 245 \definecharacter cyrillicII 246 \definecharacter cyrillicii 247 \definecharacter cyrillicYI 248 \definecharacter cyrillicyi 249 \definecharacter cyrillicUSHRT 250 \definecharacter cyrillicushrt 251 \definecharacter emdash 196 \definecharacter textcurrency 197 \definecharacter textnumero 252 \definecharacter leftguillemot 253 \definecharacter rightguillemot 254 \definecharacter quotedblbase 255 \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-13.lua0000644000175000017500000000457511571377075024206 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-13'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019 } context-2013.05.28.20130704/texmf-dist/tex/context/base/metatex.lus0000644000175000017500000000047411571377075024107 0ustar norbertnorbertif not modules then modules = { } end modules ['metatex'] = { version = 1.001, comment = "companion to metatex.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return "luat-cod.lua" context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-71.lua0000644000175000017500000000245011571377075023665 0ustar norbertnorbertif not modules then modules = { } end modules ['steps'] = { version = 1.001, comment = "companion to steps.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.steps = moduledata.steps or { } local steps = moduledata.steps local locations = { 'lefttop', 'middletop', 'righttop', 'middleleft', 'middle', 'middleright', 'leftbottom', 'middlebottom', 'rightbottom', } local done, current, previous, n function steps.reset_locations() done, current, previous, n = table.tohash(locations,false), 0, 0, 0 end function steps.next_location(loc) previous = current n = n + 1 loc = loc and loc ~= "" and tonumber(loc) while true do current = loc or math.random(1,#locations) if not done[current] then done[current] = true break end end end function steps.current_location() context(locations[current] or "") end function steps.previous_location() context(locations[previous] or "") end function steps.current_n() context(current) end function steps.previous_n() context(previous) end function steps.step() context(n) end steps.reset_locations() context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-vis.mkiv0000644000175000017500000001443312130411274024311 0ustar norbertnorbert%D \module %D [ file=trac-vis, % replaces supp-vis plus some s-* modules %D version=2112.06.23, % 1996.10.21, %D title=\CONTEXT\ Tracing Macros, %D subtitle=Visualization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The old visual debugger dates from 1996 and started out as joke. In practice %D it's not used that often although the \type {\ruledhbox} cum suis macros come %D in handy when writing code. In the process of luafication some additional %D tracing options were tested, for instance showing font kerns. As part of the %D \MKIV\ cleanup the decision was made to reimplement, reintegrate and reconsider %D all these features. The old code is gone and the new code will get extended %D when needed. We still provide placeholders for some old visualization commands %D but they might go away. %D %D Control over what gets visualized happens with the tracker command: %D %D \enabletrackers[visualizer.*] %D %D Possible values are: \type {fontkern}, \type {kern}, \type {glue}, \type %D {penalty}, \type {hbox}, \type {vbox}, \type {all}, \type {reset}, \type %D {makeup}, \type {whatsit}, \type{glyph}. %D %D In due time some special visualzation of math will move here as well. \writestatus{loading}{ConTeXt Tracing Macros / Visualization} \registerctxluafile{trac-vis}{1.001} \unprotect \newconstant\c_syst_visualizers_state \newtoks \t_syst_visualizers_optimize \definesystemattribute[visual][public,global] % global ? % no, but can become an option: % % \appendtoks % \attribute\visualattribute\attributeunsetvalue % \to \everybeforepagebody %D We only provide box visualizers as they can come in handy for testing %D macros. In due time we will move some of the m-visual code here too. \let\syst_visualizers_hbox\hbox \let\syst_visualizers_vbox\vbox \let\syst_visualizers_vtop\vtop \unexpanded\def\ruledhbox{\syst_visualizers_hbox attr \visualattribute \ctxcommand{visual("simplehbox")} } \unexpanded\def\ruledvbox{\syst_visualizers_vbox attr \visualattribute \ctxcommand{visual("simplevbox")} } \unexpanded\def\ruledvtop{\syst_visualizers_vtop attr \visualattribute \ctxcommand{visual("simplevtop")} } % special case \unexpanded\def\ruledtopv{\syst_visualizers_vtop attr \visualattribute \ctxcommand{visual("vtop")} } \appendtoks \ifcase\c_syst_visualizers_state\else \syst_visualizers_speedup \fi \to \everyshipout \appendtoks \global\let\syst_visualizers_speedup\relax \to \t_syst_visualizers_optimize \def\syst_visualizers_speedup{\the\t_syst_visualizers_optimize} \appendtoks \normalexpanded {% \unexpanded\xdef\ruledhbox\expandafter{\ruledhbox}% \unexpanded\xdef\ruledvbox\expandafter{\ruledvbox}% \unexpanded\xdef\ruledvtop\expandafter{\ruledvtop}% \unexpanded\xdef\ruledtopv\expandafter{\ruledtopv}% }% \to \t_syst_visualizers_optimize \unexpanded\def\showmakeup {\ctxcommand{setvisual("makeup")}% \let\normalvtop\ruledtopv \let\vtop \ruledtopv} \unexpanded\def\showallmakeup {\ctxcommand{setvisual("all")}% \let\normalvtop\ruledtopv \let\vtop \ruledtopv \showstruts} \unexpanded\def\showboxes {\ctxcommand{setvisual("boxes")}% \let\normalvtop\ruledtopv \let\vtop \ruledtopv} \unexpanded\def\showglyphs {\ctxcommand{setvisual("glyph")}} \unexpanded\def\showfontkerns {\ctxcommand{setvisual("fontkern")}} \unexpanded\def\setvisualizerfont {\dosingleempty\syst_visualizers_setfont} \def\syst_visualizers_setfont[#1]% somename at 4pt {\begingroup \doifelsenothing{#1}{\definedfont[Mono at 4pt]}{\definedfont[#1]}% \ctxlua{nodes.visualizers.setfont()}% \endgroup} %D New (these might also be a visualizers): \definecolor[f:r:t][a=1,t=.25,r=1] \definecolor[f:g:t][a=1,t=.25,g=1] \definecolor[f:b:t][a=1,t=.25,b=1] \definecolor[f:c:t][a=1,t=.25,c=1] \definecolor[f:m:t][a=1,t=.25,m=1] \definecolor[f:y:t][a=1,t=.25,y=1] \definecolor[f:k:t][a=1,t=.25,s=0] % \def\node_backgrounds_boxes_add#1[#2]% % {\node_backgrounds_boxes_initialize % #1\backgroundcolorattr{#2}} \def\syst_visualizers_filled_hbox#1% {\node_backgrounds_boxes_initialize\hbox\backgroundcolorattr{#1}} \unexpanded\def\filledhboxr{\syst_visualizers_filled_hbox{f:r:t}} \unexpanded\def\filledhboxg{\syst_visualizers_filled_hbox{f:g:t}} \unexpanded\def\filledhboxb{\syst_visualizers_filled_hbox{f:b:t}} \unexpanded\def\filledhboxc{\syst_visualizers_filled_hbox{f:c:t}} \unexpanded\def\filledhboxm{\syst_visualizers_filled_hbox{f:m:t}} \unexpanded\def\filledhboxy{\syst_visualizers_filled_hbox{f:y:t}} \unexpanded\def\filledhboxk{\syst_visualizers_filled_hbox{f:k:t}} %D Overload: % \def\spac_struts_vide_hbox % {\hbox attr \visualattribute \ctxcommand{visual("strut")} } % % \def\spac_struts_vide_hbox % {\xdef\spac_struts_vide_hbox{\hbox attr \visualattribute \ctxcommand{visual("strut")} }% % \spac_struts_vide_hbox} \unexpanded\def\spac_struts_vide_hbox {\hbox attr \visualattribute \ctxcommand{visual("strut")} } \appendtoks \normalexpanded{\unexpanded\xdef\spac_struts_vide_hbox\expandafter{\spac_struts_vide_hbox}}% \to \t_syst_visualizers_optimize %D For manuals: \unexpanded\def\markfonts#1% {\dontleavehmode \begingroup \setbox\scratchbox\hbox{\getbuffer}% \ctxcommand{markfonts(\number\scratchbox)}% \unhbox\scratchbox \endgroup} %D We keep this one: \unexpanded\def\dontinterfere {\reseteverypar \parindent\zeropoint \parskip \zeropoint \leftskip \zeropoint \rightskip\zeropoint \relax} %D We keep these for a while: \let\ruledvcenter \vcenter \let\ruledhss \hss \let\ruledhfil \hfil \let\ruledhfill \hfill \let\ruledhfilll \hfilll \let\ruledhfilneg \hfilneg \let\ruledhfillneg \hfillneg \let\ruledhfilllneg \hfilllneg \let\ruledvss \vss \let\ruledvfil \vfil \let\ruledvfill \vfill \let\ruledvfilll \vfilll \let\ruledvfilneg \vfilneg \let\ruledvfillneg \vfillneg \let\ruledvfilllneg \vfilllneg \let\ruledhskip \hskip \let\ruledvskip \vskip \let\ruledkern \kern \let\ruledhglue \hglue \let\ruledvglue \vglue \let\ruledmkern \mkern \let\ruledmskip \mskip \let\ruledpenalty \penalty \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-ini.lua0000644000175000017500000001733212130411274024063 0ustar norbertnorbertif not modules then modules = { } end modules ['data-ini'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } local gsub, find, gmatch, char = string.gsub, string.find, string.gmatch, string.char local next, type = next, type local filedirname, filebasename, filejoin = file.dirname, file.basename, file.join local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local trace_detail = false trackers.register("resolvers.details", function(v) trace_detail = v end) local trace_expansions = false trackers.register("resolvers.expansions", function(v) trace_expansions = v end) local report_initialization = logs.reporter("resolvers","initialization") local ostype, osname, ossetenv, osgetenv = os.type, os.name, os.setenv, os.getenv -- The code here used to be part of a data-res but for convenience -- we now split it over multiple files. As this file is now the -- starting point we introduce resolvers here. resolvers = resolvers or { } local resolvers = resolvers -- We don't want the kpse library to kick in. Also, we want to be able to -- execute programs. Control over execution is implemented later. texconfig.kpse_init = false texconfig.shell_escape = 't' if not (environment and environment.default_texmfcnf) and kpse and kpse.default_texmfcnf then local default_texmfcnf = kpse.default_texmfcnf() -- looks more like context: default_texmfcnf = gsub(default_texmfcnf,"$SELFAUTOLOC","selfautoloc:") default_texmfcnf = gsub(default_texmfcnf,"$SELFAUTODIR","selfautodir:") default_texmfcnf = gsub(default_texmfcnf,"$SELFAUTOPARENT","selfautoparent:") default_texmfcnf = gsub(default_texmfcnf,"$HOME","home:") -- environment.default_texmfcnf = default_texmfcnf end kpse = { original = kpse } setmetatable(kpse, { __index = function(kp,name) report_initialization("fatal error: kpse library is accessed (key: %s)",name) os.exit() end } ) -- First we check a couple of environment variables. Some might be -- set already but we need then later on. We start with the system -- font path. do local osfontdir = osgetenv("OSFONTDIR") if osfontdir and osfontdir ~= "" then -- ok elseif osname == "windows" then ossetenv("OSFONTDIR","c:/windows/fonts//") elseif osname == "macosx" then ossetenv("OSFONTDIR","$HOME/Library/Fonts//;/Library/Fonts//;/System/Library/Fonts//") end end -- Next comes the user's home path. We need this as later on we have -- to replace ~ with its value. do local homedir = osgetenv(ostype == "windows" and 'USERPROFILE' or 'HOME') or '' if not homedir or homedir == "" then homedir = char(127) -- we need a value, later we wil trigger on it end homedir = file.collapsepath(homedir) ossetenv("HOME", homedir) -- can be used in unix cnf files ossetenv("USERPROFILE",homedir) -- can be used in windows cnf files environment.homedir = homedir end -- The following code sets the name of the own binary and its -- path. This is fallback code as we have os.selfdir now. do local args = environment.originalarguments or arg -- this needs a cleanup if not environment.ownmain then environment.ownmain = status and string.match(string.lower(status.banner),"this is ([%a]+)") or "luatex" end local ownbin = environment.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex" local ownpath = environment.ownpath or os.selfdir ownbin = file.collapsepath(ownbin) ownpath = file.collapsepath(ownpath) if not ownpath or ownpath == "" or ownpath == "unset" then ownpath = args[-1] or arg[-1] ownpath = ownpath and filedirname(gsub(ownpath,"\\","/")) if not ownpath or ownpath == "" then ownpath = args[-0] or arg[-0] ownpath = ownpath and filedirname(gsub(ownpath,"\\","/")) end local binary = ownbin if not ownpath or ownpath == "" then ownpath = ownpath and filedirname(binary) end if not ownpath or ownpath == "" then if os.binsuffix ~= "" then binary = file.replacesuffix(binary,os.binsuffix) end local path = osgetenv("PATH") if path then for p in gmatch(path,"[^"..io.pathseparator.."]+") do local b = filejoin(p,binary) if lfs.isfile(b) then -- we assume that after changing to the path the currentdir function -- resolves to the real location and use this side effect here; this -- trick is needed because on the mac installations use symlinks in the -- path instead of real locations local olddir = lfs.currentdir() if lfs.chdir(p) then local pp = lfs.currentdir() if trace_locating and p ~= pp then report_initialization("following symlink %a to %a",p,pp) end ownpath = pp lfs.chdir(olddir) else if trace_locating then report_initialization("unable to check path %a",p) end ownpath = p end break end end end end if not ownpath or ownpath == "" then ownpath = "." report_initialization("forcing fallback to ownpath %a",ownpath) elseif trace_locating then report_initialization("using ownpath %a",ownpath) end end environment.ownbin = ownbin environment.ownpath = ownpath end resolvers.ownpath = environment.ownpath function resolvers.getownpath() return environment.ownpath end -- The self variables permit us to use only a few (or even no) -- environment variables. do local ownpath = environment.ownpath or dir.current() if ownpath then ossetenv('SELFAUTOLOC', file.collapsepath(ownpath)) ossetenv('SELFAUTODIR', file.collapsepath(ownpath .. "/..")) ossetenv('SELFAUTOPARENT', file.collapsepath(ownpath .. "/../..")) else report_initialization("error: unable to locate ownpath") os.exit() end end -- The running os: -- todo: check is context sits here os.platform is more trustworthy -- that the bin check as mtx-update runs from another path local texos = environment.texos or osgetenv("TEXOS") local texmfos = environment.texmfos or osgetenv('SELFAUTODIR') if not texos or texos == "" then texos = file.basename(texmfos) end ossetenv('TEXMFOS', texmfos) -- full bin path ossetenv('TEXOS', texos) -- partial bin parent ossetenv('SELFAUTOSYSTEM',os.platform) -- bonus environment.texos = texos environment.texmfos = texmfos -- The current root: local texroot = environment.texroot or osgetenv("TEXROOT") if not texroot or texroot == "" then texroot = osgetenv('SELFAUTOPARENT') ossetenv('TEXROOT',texroot) end environment.texroot = file.collapsepath(texroot) if profiler then directives.register("system.profile",function() profiler.start("luatex-profile.log") end) end -- a forward definition if not resolvers.resolve then function resolvers.resolve (s) return s end function resolvers.unresolve(s) return s end function resolvers.repath (s) return s end end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lnt.mkii0000644000175000017500000001171411754241457024330 0ustar norbertnorbert%D \module %D [ file=strc-lnt, %D version=2002.05.10, %D title=\CONTEXT\ Structure Macros, %D subtitle=Line Notes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Line Notes} %D This module loads on top of the footnote and line numbering macros. \unprotect \newcounter\linenotecounter \newtoks \collectedlinenotes \newif \iftracelinenotes \appendtoks \the\collectedlinenotes \to \everylinenumber \appendtoks \global\collectedlinenotes\emptytoks \to \beforeeverylinenumbering \def\dohandlelinenote#1#2#3% {\bgroup \expanded{\beforesplitstring#2}\at--\to\linenotelinenumber \ifnum\linenotelinenumber=\linenumber\relax % todo: \onlyfootnote{#2}{#3}% == configurable % \setupnote[#1][\c!numbercommand=\gobbleoneargument]% % \setnotetext[#1]{\rawreference\s!fnt{\s!fnt:f:\number\internalnotereference}{}#2: #3}% \def\linenotelinenumber##1{#2}% \setupnote[#1][\c!numbercommand=\linenotelinenumber,\c!textcommand=\gobbleoneargument]% \setnote[#1]{#3}% \fi \egroup} \def\dotracedlinenote#1% {\iftracelinenotes \hbox to \zeropoint {\forgetall \localcolortrue \hsize\zeropoint \hss \vbox to \strutheight{\llap{\red\infofont\setstrut\linenotecounter}\vss}% {\color[blue]{\vl}}% \vbox to \strutheight{\rlap{\red\infofont\setstrut#1}\vss}% \hss}% \prewordbreak \fi} \def\dolinenote#1#2% {\doglobal\increment\linenotecounter \doifreferencefoundelse{\??rr:\linenotecounter}% {\expanded{\doglobal\noexpand\appendtoks\noexpand\dohandlelinenote {#1}{\currenttextreference}}{#2}\to\collectedlinenotes} \donothing \dotracedlinenote\empty \expanded{\someline[\??rr:\linenotecounter]}} \def\dostartlinenote#1[#2]#3% {\doifreferencefoundelse{\??rr:#2}% {\expanded{\doglobal\noexpand\appendtoks\noexpand\dohandlelinenote {#1}{\currenttextreference}}{#3}\to\collectedlinenotes} \donothing \dotracedlinenote{#2}% \startline[\??rr:#2]} \def\dostoplinenote#1[#2]% {\stopline[\??rr:#2]} % defining them \def\definelinenote {\dodoubleempty\dodefinelinenote} \def\dodefinelinenote[#1][#2]% {\definenote[#1][#2]% \setvalue {#1}{\dolinenote {#1}}% \setvalue{\e!start#1}{\dostartlinenote{#1}}% \setvalue{\e!stop #1}{\dostoplinenote {#1}}} \def\setuplinenote % convenient {\setupnote} % We predefine one, namely \type {\linenote} cum suis. \definelinenote[\v!linenote] % \startbuffer[test] % \startlinenumbering[100] % test \linenote {oeps} test test test test test test % test \startlinenote [well] {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \stoplinenote [well] test test test test test test % \stoplinenumbering % \stopbuffer % % \setupnotedefinition[linenote] [location=serried,distance=.5em] % % {\typebuffer[test] \getbuffer[test]} \page % % \startbuffer[setup] % \setuplinenumbering % [align=left] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [width=1em, % align=left] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [width=2em, % distance=.5em, % align=left] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [width=2em, % align=middle] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [conversion=romannumerals, % start=1, % step=1, % location=text, % style=slanted, % color=blue, % width=1.5em] % \stopbuffer % % {\typebuffer[setup] \startnarrower\getbuffer[setup,test]\stopnarrower} \page % % \startbuffer[setup] % \setuplinenumbering % [width=4em, % left=--, % right=--, % align=middle] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup-1] % \setuplinenumbering % [style=\bfxx, % command=\WatchThis] % \stopbuffer % % \startbuffer[setup-2] % \def\WatchThis#1% % {\ifodd\linenumber % \definecolor[linecolor][red]% % \else % \definecolor[linecolor][green]% % \fi % \inframed % [offset=1pt,frame=off,background=color,backgroundcolor=linecolor] % {#1}} % \stopbuffer % % {\typebuffer[setup-1,setup-2] \getbuffer[setup-1,setup-2,test]} \page % % \startbuffer[setup-1] % \setuplinenumbering % [location=inright, % style=\bfxx, % command=\WatchThis] % \stopbuffer % % {\typebuffer[setup-1] \getbuffer[setup-1,setup-2,test]} \page \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-pro.lua0000644000175000017500000001321512130411274024120 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-pro'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local getmetatable, setmetatable, rawset, type = getmetatable, setmetatable, rawset, type -- The protection implemented here is probably not that tight but good enough to catch -- problems due to naive usage. -- -- There's a more extensive version (trac-xxx.lua) that supports nesting. -- -- This will change when we have _ENV in lua 5.2+ local trace_namespaces = false trackers.register("system.namespaces", function(v) trace_namespaces = v end) local report_system = logs.reporter("system","protection") namespaces = namespaces or { } local namespaces = namespaces local registered = { } local function report_index(k,name) if trace_namespaces then report_system("reference to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("reference to %a in protected namespace %a",k,name) end end local function report_newindex(k,name) if trace_namespaces then report_system("assignment to %a in protected namespace %a: %s",k,name,debug.traceback()) else report_system("assignment to %a in protected namespace %a",k,name) end end local function register(name) local data = name == "global" and _G or _G[name] if not data then return -- error end registered[name] = data local m = getmetatable(data) if not m then m = { } setmetatable(data,m) end local index, newindex = { }, { } m.__saved__index = m.__index m.__no__index = function(t,k) if not index[k] then index[k] = true report_index(k,name) end return nil end m.__saved__newindex = m.__newindex m.__no__newindex = function(t,k,v) if not newindex[k] then newindex[k] = true report_newindex(k,name) end rawset(t,k,v) end m.__protection__depth = 0 end local function private(name) -- maybe save name local data = registered[name] if not data then data = _G[name] if not data then data = { } _G[name] = data end register(name) end return data end local function protect(name) local data = registered[name] if not data then return end local m = getmetatable(data) local pd = m.__protection__depth if pd > 0 then m.__protection__depth = pd + 1 else m.__save_d_index, m.__saved__newindex = m.__index, m.__newindex m.__index, m.__newindex = m.__no__index, m.__no__newindex m.__protection__depth = 1 end end local function unprotect(name) local data = registered[name] if not data then return end local m = getmetatable(data) local pd = m.__protection__depth if pd > 1 then m.__protection__depth = pd - 1 else m.__index, m.__newindex = m.__saved__index, m.__saved__newindex m.__protection__depth = 0 end end local function protectall() for name, _ in next, registered do if name ~= "global" then protect(name) end end end local function unprotectall() for name, _ in next, registered do if name ~= "global" then unprotect(name) end end end namespaces.register = register -- register when defined namespaces.private = private -- allocate and register if needed namespaces.protect = protect namespaces.unprotect = unprotect namespaces.protectall = protectall namespaces.unprotectall = unprotectall namespaces.private("namespaces") registered = { } register("global") -- unreachable directives.register("system.protect", function(v) if v then protectall() else unprotectall() end end) directives.register("system.checkglobals", function(v) if v then report_system("enabling global namespace guard") protect("global") else report_system("disabling global namespace guard") unprotect("global") end end) -- dummy section (will go to luat-dum.lua) --~ if not namespaces.private then --~ -- somewhat protected --~ local registered = { } --~ function namespaces.private(name) --~ local data = registered[name] --~ if data then --~ return data --~ end --~ local data = _G[name] --~ if not data then --~ data = { } --~ _G[name] = data --~ end --~ registered[name] = data --~ return data --~ end --~ function namespaces.protectall(list) --~ for name, data in next, list or registered do --~ setmetatable(data, { __newindex = function() print(string.format("table %s is protected",name)) end }) --~ end --~ end --~ namespaces.protectall { namespaces = namespaces } --~ end --~ directives.enable("system.checkglobals") --~ namespaces.register("resolvers","trackers") --~ namespaces.protect("resolvers") --~ namespaces.protect("resolvers") --~ namespaces.protect("resolvers") --~ namespaces.unprotect("resolvers") --~ namespaces.unprotect("resolvers") --~ namespaces.unprotect("resolvers") --~ namespaces.protect("trackers") --~ resolvers.x = true --~ resolvers.y = true --~ trackers.a = "" --~ resolvers.z = true --~ oeps = { } --~ resolvers = namespaces.private("resolvers") --~ fonts = namespaces.private("fonts") --~ directives.enable("system.protect") --~ namespaces.protectall() --~ resolvers.xx = { } context-2013.05.28.20130704/texmf-dist/tex/context/base/thrd-ran.mkii0000644000175000017500000001401011244221744024260 0ustar norbertnorbert% Since we cannot be sure that this file is available at any % system, we have copied the original in this file. These % macros are encapsulates and extended in supp-ran.tex. % % This module is slightly recoded to bring it more in tune % with \CONTEXT's scratch registers and protection mechanisms. % RANDOM.TEX v.1 (Donald Arseneau) % Generating "random" numbers in TeX. % % Random integers are generated in the range 1 to 2147483646 by the % macro \nextrandom. The result is returned in the counter \randomi. % Do not change \randomi except, perhaps, to initialize it at some % random value. If you do not initialize it, it will be initialized % using the time and date. (This is a sparse initialization, giving % fewer than a million different starting values, but you should use % other sources of numbers if they are available--just remember that % most of the numbers available to TeX are not at all random.) % % The \nextrandom command is not very useful by itself, unless you % have exactly 2147483646 things to choose from. Much more useful % is the \setrannum command which sets a given counter to a random % value within a specified range. There are three parameters: % \setrannum {} {} {}. For example, to % simulate a die-roll: \setrannum{\die}{1}{6} \ifcase\die... . % % If you need random numbers that are not integers, you will have to % use dimen registers and \setrandimen. For example, to set a random % page width: \setrandimen \hsize{3in}{6.5in}. The "\pointless" macro % will remove the "pt" that TeX gives so you can use the dimensions % as pure `real' numbers. In that case, specify the range in pt units. % For example, % % \setrandimen\answer{2.71828pt}{3.14159pt} % The answer is \pointless\answer. % % The random number generator is the one by Lewis, Goodman, and Miller % (1969) and used as "ran0" in "Numerical Recipies" using Schrage's % method for avoiding overflows. The multiplier is 16807 (7^5), the % added constant is 0, and the modulus is 2147483647 (2^{31}-1). The % range of integers generated is 1 - 2147483646. A smaller range would % reduce the complexity of the macros a bit, but not much--most of the % code deals with initialization and type-conversion. On the other hand, % the large range may be wasted due to the sparse seed initialization. % original code % % \newcount\randomi % the random number seed (while executing) % \global\randomi\catcode`\@ % scratch variable during definitions % \catcode`\@=11 % % \def\nextrandom{\begingroup % \ifnum\randomi<\plusone % then initialize with time % \global\randomi\time % \global\multiply\randomi388 \global\advance\randomi\year % \global\multiply\randomi31 \global\advance\randomi\day % \global\multiply\randomi97 \global\advance\randomi\month % \message{Randomizer initialized to \the\randomi.}% % \nextrandom \nextrandom \nextrandom % \fi % \count@ii\randomi % \divide\count@ii 127773 % modulus = multiplier * 127773 + 2836 % \count@\count@ii % \multiply\count@ii 127773 % \global\advance\randomi-\count@ii % random mod 127773 % \global\multiply\randomi 16807 % \multiply\count@ 2836 % \global\advance\randomi-\count@ % \ifnum\randomi<\z@ \global\advance\randomi 2147483647\relax\fi % \endgroup % } % % \countdef\count@ii=2 % use only in boxes! % \ifx\@tempcnta\undefined \csname newcount\endcsname \@tempcnta \fi % \ifx\@tempcntb\undefined \csname newcount\endcsname \@tempcntb \fi % % \def\setrannum#1#2#3{% count register, minimum, maximum % \@tempcnta#3\advance\@tempcnta-#2\advance\@tempcnta\@ne % \@tempcntb 2147483645 % = m - 2 = 2^{31} - 3 % \divide\@tempcntb\@tempcnta % \getr@nval % \advance\ranval#2\relax % #1\ranval % } % % \def\setrandim#1#2#3{% dimen register, minimum length, maximum length % \dimen@#2\dimen@ii#3\relax % \setrannum\ranval\dimen@\dimen@ii % #1\ranval sp\relax % } % % \def\getr@nval{% The values in \@tempcnta and \@tempcntb are parameters % \nextrandom % \ranval\randomi \advance\ranval\m@ne \divide\ranval\@tempcntb % \ifnum\ranval<\@tempcnta\else \expandafter\getr@nval \fi % } % % %D The next macro is not needed in \CONTEXT, which provides % %D the \type {\withoutpt} macro. % %D % %D \starttyping % %D \def\pointless{\expandafter\PoinTless\the} % %D {\catcode`p=12 \catcode`t=12 \gdef\PoinTless#1pt{#1}} % %D \stoptyping % % \catcode`\@=\randomi % \global\randomi=0 % \newcount\ranval % the recoded version, using \CONTEXT\ methods and variables; % the magic is kept untouched \unprotect \newcount\randomi % the random number seed (while executing) \newcount\ranval \ifx\m!systems\undefined \def\m!systems{systems} \fi \def\nextrandom {\begingroup \ifnum\randomi<\plusone % then initialize with time \global\randomi\time \global\multiply\randomi388 \global\advance\randomi\year \global\multiply\randomi 31 \global\advance\randomi\day \global\multiply\randomi 97 \global\advance\randomi\month \writestatus\m!systems{randomizer starts with \the\randomi}% \nextrandom \nextrandom \nextrandom \fi \!!countd\randomi \divide\!!countd 127773 % modulus = multiplier * 127773 + 2836 \!!countc\!!countd \multiply\!!countd 127773 \global\advance\randomi-\!!countd % random mod 127773 \global\multiply\randomi 16807 \multiply\!!countc 2836 \global\advance\randomi-\!!countc\relax \ifnum\randomi<\zerocount \global\advance\randomi 2147483647 \fi \endgroup} \def\setrannum#1#2#3% count register, minimum, maximum {\!!counta#3% \advance\!!counta-#2% \advance\!!counta\plusone \!!countb 2147483645 % = m - 2 = 2^{31} - 3 \divide\!!countb\!!counta \getr@nval \advance\ranval#2% #1\ranval} \def\setrandim#1#2#3% dimen register, minimum length, maximum length {\!!dimenc#2% \!!dimend#3% \setrannum\ranval\!!dimenc\!!dimend #1\ranval\s!sp\relax} % \s!sp not needed \def\getr@nval % The values in \!!counta and \!!countb are parameters {\nextrandom \ranval\randomi \advance\ranval\minusone \divide\ranval\!!countb \ifnum\ranval<\!!counta \else \expandafter\getr@nval \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-des.mkvi0000644000175000017500000002274512130411274024312 0ustar norbertnorbert%D \module %D [ file=strc-des, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Descriptions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Descriptions} \unprotect \installcorenamespace{description} \installcommandhandler \??description {description} \??description \let\setupdescriptions\setupdescription % \setupdescriptions % check with old % [\c!alternative=\descriptionparameter\c!location, % \c!location=\v!left] \setupdescriptions % check with old [\c!alternative=\v!left, \c!headstyle=\v!bold, \c!titlestyle=\v!bold, %\c!style=, %\c!color=, %\c!headcolor=, %\c!titlecolor=, \c!width=7\emwidth, \c!distance=\emwidth, \c!titledistance=.5\emwidth, %\c!hang=, %\c!sample=, %\c!align=, %\c!headalign=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!titleleft=(, \c!titleright=), %\c!closesymbol=, \c!closecommand=\wordright, \c!display=\v!yes, %\c!command=, \c!titlecommand=, \c!expansion=\v!no, %\c!xmlsetup=, %\s!catcodes=, \c!title=\v!yes, %\c!text=, ] \appendtoks \ifx\currentdescriptionparent\empty \defineconstruction[\currentdescription][\currentdescriptionparent][\s!handler=\v!description,\c!level=1]% \else \defineconstruction[\currentdescription][\s!handler=\v!description,\c!level=1]% \fi \setuevalue {\currentdescription}{\strc_descriptions_command{\currentdescription}}% \setuevalue{\e!start\currentdescription}{\strc_descriptions_start {\currentdescription}}% \setuevalue{\e!stop \currentdescription}{\strc_descriptions_stop}% \to \everydefinedescription \let\p_strc_constructions_title \empty \unexpanded\setvalue{\??constructioninitializer\v!description}% {\let\currentdescription \currentconstruction \let\constructionparameter \descriptionparameter \let\detokenizedconstructionparameter\detokenizeddescriptionparameter \let\letconstructionparameter \letdescriptionparameter \let\useconstructionstyleandcolor \usedescriptionstyleandcolor \let\setupcurrentconstruction \setupcurrentdescription \edef\p_strc_constructions_title{\constructionparameter\c!title}% \ifx\p_strc_constructions_title\v!yes \settrue\c_strc_constructions_title_state \else \setfalse\c_strc_constructions_title_state \fi} % We keep the command variant around but rather would move to the % start-stop one. Also, passing the title as argument has some % history so we need to keep that as well. \ifdefined\dotagsetdescription \else \let\dotagsetdescription\relax \fi % \startdescription [reference] text \stopdescription % \startdescription [reference]{title} text \stopdescription % \startdescription [title=,title=,reference=] text \stopdescription % A bit over the top, the optional title but mkii has it too. \unexpanded\def\strc_descriptions_start#1% {\begingroup \strc_constructions_initialize{#1}% \doifnextoptionalelse\strc_descriptions_start_yes\strc_descriptions_start_nop} \unexpanded\def\strc_descriptions_start_yes[#1]% {\doifassignmentelse{#1}\strc_descriptions_start_yes_assignment\strc_descriptions_start_yes_reference[#1]} \unexpanded\def\strc_descriptions_start_yes_assignment[#1]% todo userdata {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1][]% \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_start_yes_reference {\ifconditional\c_strc_constructions_title_state \expandafter\strc_descriptions_start_yes_titled \else \expandafter\strc_descriptions_start_yes_normal \fi} \unexpanded\def\strc_descriptions_start_yes_titled[#1]% {\doifnextbgroupelse {\strc_descriptions_start_yes_titled_indeed[#1]}% {\setfalse\c_strc_constructions_title_state \strc_descriptions_start_yes_normal[#1]}} \unexpanded\def\strc_descriptions_start_yes_titled_indeed[#1]#2% todo userdata {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=][]% \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_start_yes_normal[#1]% todo userdata {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=][]% \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_start_nop {\ifconditional\c_strc_constructions_title_state \expandafter\strc_descriptions_start_nop_titled \else \expandafter\strc_descriptions_start_nop_normal \fi} \unexpanded\def\strc_descriptions_start_nop_titled {\doifnextbgroupelse {\strc_descriptions_start_nop_titled_indeed}% {\setfalse\c_strc_constructions_title_state \strc_descriptions_start_nop_normal}}% \unexpanded\def\strc_descriptions_start_nop_titled_indeed#1% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#1},\c!bookmark=,\c!list=][]% \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_start_nop_normal {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=][]% \csname\??constructionstarthandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_stop {\csname\??constructionstophandler\currentconstructionhandler\endcsname} % \description [reference] text \par % \description [reference] {title} text \par \unexpanded\def\strc_descriptions_command#1% {\begingroup \strc_constructions_initialize{#1}% \doifnextoptionalelse\strc_descriptions_yes\strc_descriptions_nop} \unexpanded\def\strc_descriptions_yes {\ifconditional\c_strc_constructions_title_state \expandafter\strc_descriptions_yes_titled \else \expandafter\strc_descriptions_yes_normal \fi} \unexpanded\def\strc_descriptions_yes_titled[#1]#2% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=][]% \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_yes_titled[#1]% {\doifnextbgroupelse {\strc_descriptions_yes_titled_indeed[#1]}% {\setfalse\c_strc_constructions_title_state \strc_descriptions_yes_normal[#1]}} \unexpanded\def\strc_descriptions_yes_titled_indeed[#1]#2% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=][]% \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_yes_normal[#1]% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=][]% \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_nop {\ifconditional\c_strc_constructions_title_state \expandafter\strc_descriptions_nop_titled \else \expandafter\strc_descriptions_nop_normal \fi} \unexpanded\def\strc_descriptions_nop_titled {\doifnextbgroupelse {\strc_descriptions_nop_titled_indeed}% {\setfalse\c_strc_constructions_title_state \strc_descriptions_nop_normal}} \unexpanded\def\strc_descriptions_nop_titled_indeed#1% {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#1},\c!bookmark=,\c!list=][]% \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} \unexpanded\def\strc_descriptions_nop_normal {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=][]% \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} %D Handlers: \expandafter\let\csname\??constructionmainhandler \v!description\expandafter\endcsname\csname\??constructionmainhandler \v!construction\endcsname \expandafter\let\csname\??constructioncommandhandler\v!description\expandafter\endcsname\csname\??constructioncommandhandler\v!construction\endcsname \expandafter\let\csname\??constructiontexthandler \v!description\expandafter\endcsname\csname\??constructiontexthandler \v!construction\endcsname \unexpanded\setvalue{\??constructioncommandhandler\v!description}% {\dowithpar {\csname\??constructionstarthandler\v!construction\endcsname}% {\csname\??constructionstophandler \v!construction\endcsname\endgroup}} \unexpanded\setvalue{\??constructionstarthandler\v!description}% {\BeforePar{\csname\??constructionstarthandler\v!construction\endcsname}% \GotoPar} \unexpanded\setvalue{\??constructionstophandler\v!description}% {\csname\??constructionstophandler\v!construction\endcsname \endgroup} %D For historic reasons we have (from now on undocumented): \definedescription [tab] [\c!alternative=\v!left, \c!headstyle=\v!normal, \c!headcolor=, \c!style=\v!normal, \c!color=, \c!width=\v!broad, \c!sample=\hskip4\emwidth, \c!before=, \c!after=] \unexpanded\def\setuptab {\setupdescription[tab]} %D Maybe we should remove this definition. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-hgz.mkii0000644000175000017500000000006511376503616024324 0ustar norbertnorbert\input type-ghz.mkii \endinput % can be file synonym context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mpe.mkii0000644000175000017500000003002311571377075024317 0ustar norbertnorbert\setinterfacemessage{references}{1}{unknown reference --} \setinterfacemessage{references}{30}{unknown object --} \setinterfacemessage{references}{3}{unknown reference type --} \setinterfacemessage{references}{2}{duplicate reference -- on page --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{illegal reference --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{references} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{duplicate object --} \setinterfacemessage{references}{21}{document -- loaded} \setinterfacemessage{references}{22}{document -- is not interactive} \setinterfacemessage{references}{23}{obscure reference -- (prefix=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{number --} \setinterfacemessage{handlings}{1}{font handling --} \setinterfacemessage{handlings}{3}{unknown font handling --} \setinterfacemessage{handlings}{2}{font handling -- is loaded} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{system} \setinterfacemessage{systems}{41}{external file -- in group -- does not exist} \setinterfacemessage{systems}{9}{-- not found/processed} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{new version of utility file, second pass needed} \setinterfacemessage{systems}{21}{no utility data is loaded} \setinterfacemessage{systems}{20}{meaning (sorts) of -- loaded} \setinterfacemessage{systems}{5}{module -- loaded} \setinterfacemessage{systems}{4}{command -- is already defined} \setinterfacemessage{systems}{27}{Version} \setinterfacemessage{systems}{26}{Registers} \setinterfacemessage{systems}{25}{References} \setinterfacemessage{systems}{24}{Floatblocks} \setinterfacemessage{systems}{1}{loading utility-file postponed (typemode)} \setinterfacemessage{systems}{23}{-- arranged at --} \setinterfacemessage{systems}{22}{use a valid utilityfile} \setinterfacemessage{systems}{2}{-- loaded} \setinterfacemessage{systems}{19}{meaning (synonyms) of -- loaded} \setinterfacemessage{systems}{18}{synonym -- -- does not exist} \setinterfacemessage{systems}{7}{module -- already loaded} \setinterfacemessage{systems}{6}{module -- not found} \setinterfacemessage{systems}{14}{forced newpage in list at --} \setinterfacemessage{systems}{15}{saving buffer --} \setinterfacemessage{systems}{16}{typesetting buffer --} \setinterfacemessage{systems}{17}{typesetting verbatim buffer --} \setinterfacemessage{systems}{13}{mark -- defined --} \setinterfacemessage{systems}{12}{the utility-file is not sorted, use texutil} \setinterfacemessage{systems}{11}{building simple util} \setinterfacemessage{systems}{10}{don't use em in --} \setinterfacemessage{floatblocks}{1}{-- renumbered / -- => --} \setinterfacemessage{floatblocks}{3}{-- moved} \setinterfacemessage{floatblocks}{2}{-- saved} \setinterfacemessage{floatblocks}{5}{order adapted} \setinterfacemessage{floatblocks}{4}{-- placed} \setinterfacemessage{floatblocks}{7}{n of bottom floats limited to --} \setinterfacemessage{floatblocks}{6}{n of top floats limited to --} \setinterfacemessage{floatblocks}{9}{order disturbed} \setinterfacemessage{floatblocks}{8}{less than -- lines} \setinterfacemessage{floatblocks}{title}{floatblocks} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{undefined} \setinterfacemessage{floatblocks}{11}{no block given} \setinterfacemessage{floatblocks}{10}{-- limited} \setinterfacemessage{interactions}{1}{aspect ratio -- x -- (b x h)} \setinterfacemessage{interactions}{3}{inactive} \setinterfacemessage{interactions}{2}{active} \setinterfacemessage{interactions}{5}{unknown attachment --} \setinterfacemessage{interactions}{4}{no pagesynchronisation (--) in hmode} \setinterfacemessage{interactions}{6}{attachment file -- does not exist} \setinterfacemessage{interactions}{title}{interaction} \setinterfacemessage{interactions}{21}{-- code inserted} \setinterfacemessage{regimes}{1}{regime --} \setinterfacemessage{regimes}{3}{unknown regime --} \setinterfacemessage{regimes}{2}{regime -- is loaded} \setinterfacemessage{regimes}{title}{regime} \setinterfacemessage{structures}{1}{begin of sectionblock --} \setinterfacemessage{structures}{title}{structure} \setinterfacemessage{structures}{2}{end of sectionblock --} \setinterfacemessage{linguals}{1}{patterns -- for -- loaded (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{hyphenations -- for -- loaded (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{no patterns -- for -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{patterns for -- not loaded} \setinterfacemessage{linguals}{4}{no hyphenations -- for -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{language specific options [--] introduce a -- skip} \setinterfacemessage{linguals}{6}{language -- is undefined} \setinterfacemessage{linguals}{9}{language -- is active} \setinterfacemessage{linguals}{8}{language specific options [--] seamless appended} \setinterfacemessage{linguals}{title}{language} \setinterfacemessage{linguals}{10}{patterns -- loaded} \setinterfacemessage{verbatims}{1}{file -- does not exist} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{filter -- is loaded} \setinterfacemessage{filters}{title}{filter} \setinterfacemessage{filters}{2}{unknown filter --} \setinterfacemessage{textblocks}{1}{new version, second pass needed} \setinterfacemessage{textblocks}{3}{reading blocks from --} \setinterfacemessage{textblocks}{2}{writing blocks to --} \setinterfacemessage{textblocks}{5}{-- not hidden} \setinterfacemessage{textblocks}{4}{second pass needed} \setinterfacemessage{textblocks}{7}{-- hidden} \setinterfacemessage{textblocks}{6}{-- hidden and processed} \setinterfacemessage{textblocks}{9}{-- not typeset} \setinterfacemessage{textblocks}{8}{-- typeset} \setinterfacemessage{textblocks}{title}{textblocks} \setinterfacemessage{textblocks}{12}{-- skipped} \setinterfacemessage{textblocks}{11}{-- loaded and typeset} \setinterfacemessage{textblocks}{10}{-- loaded and processed} \setinterfacemessage{encodings}{1}{coding --} \setinterfacemessage{encodings}{3}{unknown coding --} \setinterfacemessage{encodings}{2}{coding -- is loaded} \setinterfacemessage{encodings}{title}{encoding} \setinterfacemessage{columns}{1}{only -- columns possible} \setinterfacemessage{columns}{3}{problems, disable balancing} \setinterfacemessage{columns}{2}{use \string\filbreak\space as alternative} \setinterfacemessage{columns}{5}{bottom float not yet supported} \setinterfacemessage{columns}{4}{top float not yet supported} \setinterfacemessage{columns}{7}{balancing aborted after 100 steps} \setinterfacemessage{columns}{6}{-- float(s) postponed} \setinterfacemessage{columns}{9}{check raggedness} \setinterfacemessage{columns}{8}{balanced in -- step(s)} \setinterfacemessage{columns}{title}{columns} \setinterfacemessage{columns}{13}{wide float moved to top of columns} \setinterfacemessage{columns}{12}{float moved to next column / --} \setinterfacemessage{columns}{11}{float too wide for column} \setinterfacemessage{columns}{10}{(less than) 1 line left} \setinterfacemessage{symbols}{1}{loading symbolset --} \setinterfacemessage{symbols}{title}{symbols} \setinterfacemessage{files}{1}{file synonym -- is already used for --} \setinterfacemessage{files}{title}{files} \setinterfacemessage{versions}{1}{missing @+} \setinterfacemessage{versions}{3}{selected pages: --} \setinterfacemessage{versions}{2}{marking pages} \setinterfacemessage{versions}{title}{version} \setinterfacemessage{specials}{1}{-- loaded} \setinterfacemessage{specials}{3}{-- is reset} \setinterfacemessage{specials}{2}{no deeper nesting is permitted --} \setinterfacemessage{specials}{5}{loading definition file --} \setinterfacemessage{specials}{4}{command -- does not exist} \setinterfacemessage{specials}{7}{unknown driver --} \setinterfacemessage{specials}{6}{nesting is not permitted} \setinterfacemessage{specials}{title}{specials} \setinterfacemessage{layouts}{1}{textheight adapted with -- at page --} \setinterfacemessage{layouts}{3}{-- times text postponed} \setinterfacemessage{layouts}{2}{-- times postponed text placed} \setinterfacemessage{layouts}{5}{marginblocks inactive} \setinterfacemessage{layouts}{4}{marginblocks active} \setinterfacemessage{layouts}{7}{calculating logospace} \setinterfacemessage{layouts}{6}{subpage set -- processed (size --)} \setinterfacemessage{layouts}{9}{currently no more than -- levels in itemizations} \setinterfacemessage{layouts}{8}{calculating backgrounds} \setinterfacemessage{layouts}{title}{layout} \setinterfacemessage{layouts}{11}{spacing -- not permitted in gridmode} \setinterfacemessage{layouts}{10}{-- and -- don't add up to 1.0} \setinterfacemessage{fonts}{1}{coding --} \setinterfacemessage{fonts}{3}{unknown variant --} \setinterfacemessage{fonts}{2}{variant -- is loaded} \setinterfacemessage{fonts}{5}{style -- is not defined} \setinterfacemessage{fonts}{4}{bodyfont -- is not defined} \setinterfacemessage{fonts}{7}{unknown format --} \setinterfacemessage{fonts}{6}{-- is loaded} \setinterfacemessage{fonts}{14}{bodyfont -- is defined (can better be done global)} \setinterfacemessage{fonts}{8}{style -- defined} \setinterfacemessage{fonts}{title}{bodyfont} \setinterfacemessage{fonts}{10}{unknown font file --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{global file --} \setinterfacemessage{databases}{2}{local file --} \setinterfacemessage{databases}{4}{unknown file --} \setinterfacemessage{databases}{title}{databases} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{loading script set --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{unknown preamble --} \setinterfacemessage{check}{1}{missing or ungrouped '=' after '--' in line --} \setinterfacemessage{check}{3}{-- -- replaces a macro, use CAPITALS!} \setinterfacemessage{check}{2}{-- argument(s) expected in line --} \setinterfacemessage{check}{title}{check} \setinterfacemessage{metapost}{1}{loading metapost library --} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{figure -- can not be found} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{figure -- is not preset} \setinterfacemessage{figures}{5}{dimensions of -- are unknown} \setinterfacemessage{figures}{4}{dimensions of -- loaded from figurefile itself} \setinterfacemessage{figures}{6}{dimensions of -- calculated by rlxtools} \setinterfacemessage{figures}{8}{figureobject -- is reused} \setinterfacemessage{figures}{title}{figures} \setinterfacemessage{colors}{1}{system -- is global activated} \setinterfacemessage{colors}{3}{-- is not defined --} \setinterfacemessage{colors}{2}{system -- is local activated} \setinterfacemessage{colors}{5}{unknown system --} \setinterfacemessage{colors}{4}{system -- is loaded} \setinterfacemessage{colors}{7}{palette -- is not available} \setinterfacemessage{colors}{6}{palette -- is available} \setinterfacemessage{colors}{9}{-- color space is not supported} \setinterfacemessage{colors}{8}{specification -- at color -- becomes black} \setinterfacemessage{colors}{title}{color} \setinterfacemessage{colors}{12}{-- is registered} \setinterfacemessage{colors}{11}{color is converted to gray} \setinterfacemessage{colors}{10}{-- color space is supported} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-xml.lua0000644000175000017500000001124011764366753024717 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-imp-xml'] = { version = 1.001, comment = "companion to v-xml.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local P, S, V, patterns = lpeg.P, lpeg.S, lpeg.V, lpeg.patterns local context = context local verbatim = context.verbatim local makepattern = visualizers.makepattern local XmlSnippet = context.XmlSnippet local startXmlSnippet = context.startXmlSnippet local stopXmlSnippet = context.stopXmlSnippet local XmlSnippetName = verbatim.XmlSnippetName local XmlSnippetKey = verbatim.XmlSnippetKey local XmlSnippetBoundary = verbatim.XmlSnippetBoundary local XmlSnippetString = verbatim.XmlSnippetString local XmlSnippetEqual = verbatim.XmlSnippetEqual local XmlSnippetEntity = verbatim.XmlSnippetEntity local XmlSnippetComment = verbatim.XmlSnippetComment local XmlSnippetCdata = verbatim.XmlSnippetCdata local handler = visualizers.newhandler { startinline = function() XmlSnippet(false,"{") end, stopinline = function() context("}") end, startdisplay = function() startXmlSnippet() end, stopdisplay = function() stopXmlSnippet () end, name = function(s) XmlSnippetName(s) end, key = function(s) XmlSnippetKey(s) end, boundary = function(s) XmlSnippetBoundary(s) end, string = function(s) XmlSnippetString(s) end, equal = function(s) XmlSnippetEqual(s) end, entity = function(s) XmlSnippetEntity(s) end, comment = function(s) XmlSnippetComment(s) end, cdata = function(s) XmlSnippetCdata(s) end, } local comment = P("--") local name = (patterns.letter + patterns.digit + S('_-.'))^1 local entity = P("&") * (1-P(";"))^1 * P(";") local openbegin = P("<") local openend = P("") + P(">") local closeend = P(">") local opencomment = P("") local openinstruction = P("") local opencdata = P("") local grammar = visualizers.newgrammar("default", { "visualizer", sstring = makepattern(handler,"string",patterns.dquote) * (V("whitespace") + makepattern(handler,"default",1-patterns.dquote))^0 * makepattern(handler,"string",patterns.dquote), dstring = makepattern(handler,"string",patterns.squote) * (V("whitespace") + makepattern(handler,"default",1-patterns.squote))^0 * makepattern(handler,"string",patterns.squote), entity = makepattern(handler,"entity",entity), name = makepattern(handler,"name",name) * ( makepattern(handler,"default",patterns.colon) * makepattern(handler,"name",name) )^0, key = makepattern(handler,"key",name) * ( makepattern(handler,"default",patterns.colon) * makepattern(handler,"key",name) )^0, attributes = ( V("optionalwhitespace") * V("key") * V("optionalwhitespace") * makepattern(handler,"equal",patterns.equal) * V("optionalwhitespace") * (V("dstring") + V("sstring")) * V("optionalwhitespace") )^0, open = makepattern(handler,"boundary",openbegin) * V("name") * V("optionalwhitespace") * V("attributes") * makepattern(handler,"boundary",closebegin), close = makepattern(handler,"boundary",openend) * V("name") * V("optionalwhitespace") * makepattern(handler,"boundary",closeend), comment = makepattern(handler,"boundary",opencomment) * (V("whitespace") + makepattern(handler,"comment",(1-closecomment)^1))^0 -- slow * makepattern(handler,"boundary",closecomment), cdata = makepattern(handler,"boundary",opencdata) * (V("whitespace") + makepattern(handler,"comment",(1-closecdata)^1))^0 -- slow * makepattern(handler,"boundary",closecdata), instruction = makepattern(handler,"boundary",openinstruction) * V("name") * V("optionalwhitespace") * V("attributes") * V("optionalwhitespace") * makepattern(handler,"boundary",closeinstruction), pattern = V("comment") + V("instruction") + V("cdata") + V("close") + V("open") + V("entity") + V("space") + V("line") + V("default"), visualizer = V("pattern")^1 } ) local parser = P(grammar) visualizers.register("xml", { parser = parser, handler = handler, grammar = grammar } ) context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-inc.lua0000644000175000017500000015436612130411274024115 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-inc'] = { version = 1.001, comment = "companion to grph-inc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: empty filename or only suffix always false (not found) -- lowercase types -- mps tex tmp svg -- partly qualified -- dimensions -- use metatables -- figures.boxnumber can go as we now can use names -- avoid push -- move some to command namespace --[[ The ConTeXt figure inclusion mechanisms are among the oldest code in ConTeXt and evolved into a complex whole. One reason is that we deal with backend in an abstract way. What complicates matters is that we deal with internal graphics as well: TeX code, MetaPost code, etc. Later on figure databases were introduced, which resulted in a plug in model for locating images. On top of that runs a conversion mechanism (with caching) and resource logging. Porting that to Lua is not that trivial because quite some status information is kept between al these stages. Of course, image reuse also has some price, and so I decided to implement the graphics inclusion in several layers: detection, loading, inclusion, etc. Object sharing and scaling can happen at each stage, depending on the way the resource is dealt with. The TeX-Lua mix is suboptimal. This has to do with the fact that we cannot run TeX code from within Lua. Some more functionality will move to Lua. ]]-- local format, lower, find, match, gsub, gmatch = string.format, string.lower, string.find, string.match, string.gsub, string.gmatch local texbox = tex.box local contains = table.contains local concat, insert, remove = table.concat, table.insert, table.remove local todimen = string.todimen local collapsepath = file.collapsepath local formatters = string.formatters local longtostring = string.longtostring local expandfilename = dir.expandname local P, lpegmatch = lpeg.P, lpeg.match local settings_to_array = utilities.parsers.settings_to_array local settings_to_hash = utilities.parsers.settings_to_hash local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local replacetemplate = utilities.templates.replace local variables = interfaces.variables local codeinjections = backends.codeinjections local nodeinjections = backends.nodeinjections local trace_figures = false trackers.register("graphics.locating", function(v) trace_figures = v end) local trace_bases = false trackers.register("graphics.bases", function(v) trace_bases = v end) local trace_programs = false trackers.register("graphics.programs", function(v) trace_programs = v end) local trace_conversion = false trackers.register("graphics.conversion", function(v) trace_conversion = v end) local trace_inclusion = false trackers.register("graphics.inclusion", function(v) trace_inclusion = v end) local report_inclusion = logs.reporter("graphics","inclusion") local context, img = context, img local f_hash_part = formatters["%s->%s->%s"] local f_hash_full = formatters["%s->%s->%s->%s->%s->%s->%s"] local v_yes = variables.yes local v_low = variables.low local v_medium = variables.medium local v_high = variables.high local v_global = variables["global"] local v_local = variables["local"] local v_default = variables.default local maxdimen = 2^30-1 function img.check(figure) if figure then local width = figure.width local height = figure.height if height > width then if height > maxdimen then figure.height = maxdimen figure.width = width * maxdimen/height report_inclusion("limiting natural dimensions of %a (%s)",figure.filename,"height") end elseif width > maxdimen then figure.width = maxdimen figure.height = height * maxdimen/width report_inclusion("limiting natural dimensions of %a (%s)",figure.filename,"width") end return figure end end --- some extra img functions --- can become luat-img.lua local imgkeys = img.keys() function img.totable(imgtable) local result = { } for k=1,#imgkeys do local key = imgkeys[k] result[key] = imgtable[key] end return result end function img.serialize(i,...) return table.serialize(img.totable(i),...) end function img.print(i,...) return table.print(img.totable(i),...) end function img.clone(i,data) i.width = data.width or i.width i.height = data.height or i.height -- attr etc return i end local validsizes = table.tohash(img.boxes()) local validtypes = table.tohash(img.types()) function img.checksize(size) if size then size = gsub(size,"box","") return validsizes[size] and size or "crop" else return "crop" end end local indexed = { } function img.ofindex(n) return indexed[n] end --- we can consider an grph-ini file figures = figures or { } local figures = figures figures.boxnumber = figures.boxnumber or 0 figures.defaultsearch = true figures.defaultwidth = 0 figures.defaultheight = 0 figures.defaultdepth = 0 figures.nofprocessed = 0 figures.preferquality = true -- quality over location local figures_loaded = allocate() figures.loaded = figures_loaded local figures_used = allocate() figures.used = figures_used local figures_found = allocate() figures.found = figures_found local figures_suffixes = allocate() figures.suffixes = figures_suffixes local figures_patterns = allocate() figures.patterns = figures_patterns local figures_resources = allocate() figures.resources = figures_resources local existers = allocate() figures.existers = existers local checkers = allocate() figures.checkers = checkers local includers = allocate() figures.includers = includers local converters = allocate() figures.converters = converters local identifiers = allocate() figures.identifiers = identifiers local programs = allocate() figures.programs = programs local defaultformat = "pdf" local defaultprefix = "m_k_i_v_" figures.localpaths = allocate { ".", "..", "../.." } figures.cachepaths = allocate { prefix = "", path = ".", subpath = ".", } local figure_paths = allocate(table.copy(figures.localpaths)) figures.paths = figure_paths local figures_order = allocate { "pdf", "mps", "jpg", "png", "jp2", "jbig", "svg", "eps", "tif", "gif", "mov", "buffer", "tex", "cld", "auto", } local figures_formats = allocate { -- magic and order will move here ["pdf"] = { list = { "pdf" } }, ["mps"] = { patterns = { "mps", "%d+" } }, ["jpg"] = { list = { "jpg", "jpeg" } }, ["png"] = { list = { "png" } }, ["jp2"] = { list = { "jp2" } }, ["jbig"] = { list = { "jbig", "jbig2", "jb2" } }, ["svg"] = { list = { "svg", "svgz" } }, ["eps"] = { list = { "eps", "ai" } }, ["gif"] = { list = { "gif" } }, ["tif"] = { list = { "tif", "tiff" } }, ["mov"] = { list = { "mov", "flv", "mp4" } }, -- "avi" is not supported ["buffer"] = { list = { "tmp", "buffer", "buf" } }, ["tex"] = { list = { "tex" } }, ["cld"] = { list = { "cld" } }, ["auto"] = { list = { "auto" } }, } local figures_magics = allocate { { format = "png", pattern = P("\137PNG\013\010\026\010") }, -- 89 50 4E 47 0D 0A 1A 0A, { format = "jpg", pattern = P("\255\216\255") }, -- FF D8 FF { format = "jp2", pattern = P("\000\000\000\012\106\080\032\032\013\010"), }, -- 00 00 00 0C 6A 50 20 20 0D 0A }, { format = "gif", pattern = P("GIF") }, { format = "pdf", pattern = (1 - P("%PDF"))^0 * P("%PDF") }, } figures.formats = figures_formats -- frozen figures.magics = figures_magics -- frozen figures.order = figures_order -- frozen -- We can set the order but only indirectly so that we can check for support. function figures.setorder(list) -- can be table or string if type(list) == "string" then list = settings_to_array(list) end if list and #list > 0 then figures_order = allocate() figures.order = figures_order local done = { } -- just to be sure in case the list is generated for i=1,#list do local l = lower(list[i]) if figures_formats[l] and not done[l] then figures_order[#figures_order+1] = l done[l] = true end end report_inclusion("lookup order % a",figures_order) else -- invalid list end end function figures.guess(filename) local f = io.open(filename,'rb') if f then local str = f:read(100) f:close() if str then for i=1,#figures_magics do local pattern = figures_magics[i] if lpegmatch(pattern.pattern,str) then local format = pattern.format if trace_figures then report_inclusion("file %a has format %a",filename,format) end return format end end end end end local function setlookups() -- tobe redone .. just set locals figures_suffixes = allocate() figures_patterns = allocate() for _, format in next, figures_order do local data = figures_formats[format] local list = data.list if list then for i=1,#list do figures_suffixes[list[i]] = format -- hash end else figures_suffixes[format] = format end local patterns = data.patterns if patterns then for i=1,#patterns do figures_patterns[#figures_patterns+1] = { patterns[i], format } -- array end end end figures.suffixes = figures_suffixes figures.patterns = figures_patterns end setlookups() figures.setlookups = setlookups function figures.registerresource(t) local n = #figures_resources + 1 figures_resources[n] = t return n end local function register(tag,target,what) local data = figures_formats[target] -- resolver etc if not data then data = { } figures_formats[target] = data end local d = data[tag] -- list or pattern if d and not contains(d,what) then d[#d+1] = what -- suffix or patternspec else data[tag] = { what } end if not contains(figures_order,target) then figures_order[#figures_order+1] = target end setlookups() end function figures.registersuffix (suffix, target) register('list', target,suffix ) end function figures.registerpattern(pattern,target) register('pattern',target,pattern) end local last_locationset = last_locationset or nil local last_pathlist = last_pathlist or nil function figures.setpaths(locationset,pathlist) if last_locationset == locationset and last_pathlist == pathlist then -- this function can be called each graphic so we provide this optimization return end local t, h = figure_paths, settings_to_hash(locationset) if last_locationset ~= locationset then -- change == reset (actually, a 'reset' would indeed reset if h[v_local] then t = table.fastcopy(figures.localpaths or { }) else t = { } end figures.defaultsearch = h[v_default] last_locationset = locationset end if h[v_global] then local list = settings_to_array(pathlist) for i=1,#list do local s = list[i] if not contains(t,s) then t[#t+1] = s end end end figure_paths = t last_pathlist = pathlist figures.paths = figure_paths if trace_figures then report_inclusion("using locations %a",last_locationset) report_inclusion("using paths % a",figure_paths) end end -- check conversions and handle it here function figures.hash(data) local status = data and data.status return (status and status.hash or tostring(status.private)) or "nohash" -- the end -- interfacing to tex local function new() -- we could use metatables status -> used -> request but it needs testing local request = { name = false, label = false, format = false, page = false, width = false, height = false, preview = false, ["repeat"] = false, controls = false, display = false, mask = false, conversion = false, resolution = false, cache = false, prefix = false, size = false, } local used = { fullname = false, format = false, name = false, path = false, suffix = false, width = false, height = false, } local status = { status = 0, converted = false, cached = false, fullname = false, format = false, } -- this needs checking because we might check for nil, the test case -- is getfiguredimensions which then should return ~= 0 -- setmetatableindex(status, used) -- setmetatableindex(used, request) return { request = request, used = used, status = status, } end -- use table.insert|remove local lastfiguredata = nil -- will be topofstack or last so no { } (else problems with getfiguredimensions) local callstack = { } function figures.initialize(request) local figuredata = new() if request then -- request.width/height are strings and are only used when no natural dimensions -- can be determined; at some point the handlers might set them to numbers instead local w = tonumber(request.width) or 0 local h = tonumber(request.height) or 0 request.width = w > 0 and w or nil request.height = h > 0 and h or nil -- request.page = math.max(tonumber(request.page) or 1,1) request.size = img.checksize(request.size) request.object = request.object == v_yes request["repeat"] = request["repeat"] == v_yes request.preview = request.preview == v_yes request.cache = request.cache ~= "" and request.cache request.prefix = request.prefix ~= "" and request.prefix request.format = request.format ~= "" and request.format table.merge(figuredata.request,request) end return figuredata end function figures.push(request) statistics.starttiming(figures) local figuredata = figures.initialize(request) insert(callstack,figuredata) lastfiguredata = figuredata return figuredata end function figures.pop() lastfiguredata = remove(callstack) or lastfiguredata statistics.stoptiming(figures) end function figures.current() return callstack[#callstack] or lastfiguredata end local function get(category,tag,default) local value = lastfiguredata and lastfiguredata[category] value = value and value[tag] if not value or value == "" or value == true then return default or "" else return value end end figures.get = get function commands.figurevariable(category,tag,default) context(get(category,tag,default)) end function commands.figurestatus (tag,default) context(get("status", tag,default)) end function commands.figurerequest(tag,default) context(get("request",tag,default)) end function commands.figureused (tag,default) context(get("used", tag,default)) end function commands.figurefilepath() context(file.dirname (get("used","fullname"))) end function commands.figurefilename() context(file.nameonly(get("used","fullname"))) end function commands.figurefiletype() context(file.extname (get("used","fullname"))) end -- todo: local path or cache path local function forbiddenname(filename) if not filename or filename == "" then return false end local expandedfullname = collapsepath(filename,true) local expandedinputname = collapsepath(file.addsuffix(environment.jobfilename,environment.jobfilesuffix),true) if expandedfullname == expandedinputname then report_inclusion("skipping graphic with same name as input filename %a, enforce suffix",expandedinputname) return true end local expandedoutputname = collapsepath(codeinjections.getoutputfilename(),true) if expandedfullname == expandedoutputname then report_inclusion("skipping graphic with same name as output filename %a, enforce suffix",expandedoutputname) return true end end local function register(askedname,specification) if not specification then specification = { } elseif forbiddenname(specification.fullname) then specification = { } else local format = specification.format if format then local conversion = specification.conversion local resolution = specification.resolution if conversion == "" then conversion = nil end if resolution == "" then resolution = nil end local newformat = conversion if not newformat or newformat == "" then newformat = defaultformat end if trace_conversion then report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a", askedname,specification.fullname,format,newformat,conversion or "default",resolution or "default") end -- quick hack local converter = (newformat ~= format or resolution) and converters[format] if converter then if converter[newformat] then converter = converter[newformat] else newformat = defaultformat if converter[newformat] then converter = converter[newformat] else converter = nil newformat = defaultformat end end elseif trace_conversion then report_inclusion("no converter for %a to %a",format,newformat) end if converter then local oldname = specification.fullname local newpath = file.dirname(oldname) local oldbase = file.basename(oldname) -- -- problem: we can have weird filenames, like a.b.c (no suffix) and a.b.c.gif -- so we cannot safely remove a suffix (unless we do that for known suffixes) -- -- local newbase = file.removesuffix(oldbase) -- assumes a known suffix -- -- so we now have (also see *): -- local newbase = oldbase -- local fc = specification.cache or figures.cachepaths.path if fc and fc ~= "" and fc ~= "." then newpath = fc else newbase = defaultprefix .. newbase end if not file.is_writable(newpath) then if trace_conversion then report_inclusion("path %a is not writable, forcing conversion path %a",newpath,".") end newpath = "." end local subpath = specification.subpath or figures.cachepaths.subpath if subpath and subpath ~= "" and subpath ~= "." then newpath = newpath .. "/" .. subpath end local prefix = specification.prefix or figures.cachepaths.prefix if prefix and prefix ~= "" then newbase = prefix .. newbase end if resolution and resolution ~= "" then -- the order might change newbase = newbase .. "_" .. resolution end -- -- see *, we had: -- -- local newbase = file.addsuffix(newbase,newformat) -- -- but now have (result of Aditya's web image testing): -- -- as a side effect we can now have multiple fetches with different -- original figures_formats, not that it matters much (apart from older conversions -- sticking around) -- local newbase = newbase .. "." .. newformat -- local newname = file.join(newpath,newbase) dir.makedirs(newpath) oldname = collapsepath(oldname) newname = collapsepath(newname) local oldtime = lfs.attributes(oldname,'modification') or 0 local newtime = lfs.attributes(newname,'modification') or 0 if newtime == 0 or oldtime > newtime then if trace_conversion then report_inclusion("converting %a (%a) from %a to %a",askedname,oldname,format,newformat) end converter(oldname,newname,resolution or "") else if trace_conversion then report_inclusion("no need to convert %a (%a) from %a to %a",askedname,oldname,format,newformat) end end if io.exists(newname) and io.size(newname) > 0 then specification.foundname = oldname specification.fullname = newname specification.prefix = prefix specification.subpath = subpath specification.converted = true format = newformat if not figures_suffixes[format] then -- maybe the new format is lowres.png (saves entry in suffixes) -- so let's do thsi extra check local suffix = file.suffix(newformat) if figures_suffixes[suffix] then if trace_figures then report_inclusion("using suffix %a as format for %a",suffix,format) end format = suffix end end elseif io.exists(oldname) then specification.fullname = oldname -- was newname specification.converted = false end end end local found = figures_suffixes[format] -- validtypes[format] if not found then specification.found = false if trace_figures then report_inclusion("format %a is not supported",format) end else specification.found = true if trace_figures then if validtypes[format] then -- format? report_inclusion("format %a natively supported by backend",format) else report_inclusion("format %a supported by output file format",format) end end end end specification.foundname = specification.foundname or specification.fullname local askedhash = f_hash_part(askedname,specification.conversion or "default",specification.resolution or "default") figures_found[askedhash] = specification return specification end local resolve_too = false -- true local internalschemes = { file = true, } local function locate(request) -- name, format, cache -- not resolvers.cleanpath(request.name) as it fails on a!b.pdf and b~c.pdf -- todo: more restricted cleanpath local askedname = request.name local askedhash = f_hash_part(askedname,request.conversion or "default",request.resolution or "default") local foundname = figures_found[askedhash] if foundname then return foundname end -- local askedcache = request.cache local askedconversion = request.conversion local askedresolution = request.resolution -- if request.format == "" or request.format == "unknown" then request.format = nil end -- protocol check local hashed = url.hashed(askedname) if not hashed then -- go on elseif internalschemes[hashed.scheme] then local path = hashed.path if path and path ~= "" then askedname = path end else local foundname = resolvers.findbinfile(askedname) if not foundname or not lfs.isfile(foundname) then -- foundname can be dummy if trace_figures then report_inclusion("unknown url %a",askedname) end -- url not found return register(askedname) end local askedformat = request.format or file.suffix(askedname) or "" local guessedformat = figures.guess(foundname) if askedformat ~= guessedformat then if trace_figures then report_inclusion("url %a has unknown format",askedname) end -- url found, but wrong format return register(askedname) else if trace_figures then report_inclusion("url %a is resolved to %a",askedname,foundname) end return register(askedname, { askedname = askedname, fullname = foundname, format = askedformat, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end -- we could use the hashed data instead local askedpath= file.is_rootbased_path(askedname) local askedbase = file.basename(askedname) local askedformat = request.format or file.suffix(askedname) or "" if askedformat ~= "" then askedformat = lower(askedformat) if trace_figures then report_inclusion("forcing format %a",askedformat) end local format = figures_suffixes[askedformat] if not format then for i=1,#figures_patterns do local pattern = figures_patterns[i] if find(askedformat,pattern[1]) then format = pattern[2] break end end end if format then local foundname, quitscanning, forcedformat = figures.exists(askedname,format,resolve_too) -- not askedformat if foundname then return register(askedname, { askedname = askedname, fullname = foundname, -- askedname, format = forcedformat or format, cache = askedcache, -- foundname = foundname, -- no conversion = askedconversion, resolution = askedresolution, }) elseif quitscanning then return register(askedname) end elseif trace_figures then report_inclusion("unknown format %a",askedformat) end if askedpath then -- path and type given, todo: strip pieces of path local foundname, quitscanning, forcedformat = figures.exists(askedname,askedformat,resolve_too) if foundname then return register(askedname, { askedname = askedname, fullname = foundname, -- askedname, format = forcedformat or askedformat, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end else -- type given for i=1,#figure_paths do local path = figure_paths[i] local check = path .. "/" .. askedname -- we pass 'true' as it can be an url as well, as the type -- is given we don't waste much time local foundname, quitscanning, forcedformat = figures.exists(check,askedformat,resolve_too) if foundname then return register(check, { askedname = askedname, fullname = check, format = askedformat, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end if figures.defaultsearch then local check = resolvers.findfile(askedname) if check and check ~= "" then return register(askedname, { askedname = askedname, fullname = check, format = askedformat, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end end elseif askedpath then if trace_figures then report_inclusion("using rootbased path") end for i=1,#figures_order do local format = figures_order[i] local list = figures_formats[format].list or { format } for j=1,#list do local suffix = list[j] local check = file.addsuffix(askedname,suffix) local foundname, quitscanning, forcedformat = figures.exists(check,format,resolve_too) if foundname then return register(askedname, { askedname = askedname, fullname = foundname, -- check, format = forcedformat or format, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end end else if figures.preferquality then if trace_figures then report_inclusion("unknown format, quality preferred") end for j=1,#figures_order do local format = figures_order[j] local list = figures_formats[format].list or { format } for k=1,#list do local suffix = list[k] -- local name = file.replacesuffix(askedbase,suffix) local name = file.replacesuffix(askedname,suffix) for i=1,#figure_paths do local path = figure_paths[i] local check = path .. "/" .. name local isfile = url.hashed(check).scheme == "file" if not isfile then if trace_figures then report_inclusion("warning: skipping path %a",path) end else local foundname, quitscanning, forcedformat = figures.exists(check,format,resolve_too) -- true) if foundname then return register(askedname, { askedname = askedname, fullname = foundname, -- check format = forcedformat or format, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end end end end else -- 'location' if trace_figures then report_inclusion("unknown format, using path strategy") end for i=1,#figure_paths do local path = figure_paths[i] for j=1,#figures_order do local format = figures_order[j] local list = figures_formats[format].list or { format } for k=1,#list do local suffix = list[k] local check = path .. "/" .. file.replacesuffix(askedbase,suffix) local foundname, quitscanning, forcedformat = figures.exists(check,format,resolve_too) if foundname then return register(askedname, { askedname = askedname, fullname = foudname, -- check, format = forcedformat or format, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end end end end if figures.defaultsearch then if trace_figures then report_inclusion("using default tex path") end for j=1,#figures_order do local format = figures_order[j] local list = figures_formats[format].list or { format } for k=1,#list do local suffix = list[k] local check = resolvers.findfile(file.replacesuffix(askedname,suffix)) if check and check ~= "" then return register(askedname, { askedname = askedname, fullname = check, format = format, cache = askedcache, conversion = askedconversion, resolution = askedresolution, }) end end end end end return register(askedname, { -- these two are needed for hashing 'found' conversion = askedconversion, resolution = askedresolution, }) end -- -- -- plugins -- -- -- function identifiers.default(data) local dr, du, ds = data.request, data.used, data.status local l = locate(dr) local foundname = l.foundname local fullname = l.fullname or foundname if fullname then du.format = l.format or false du.fullname = fullname -- can be cached ds.fullname = foundname -- original ds.format = l.format ds.status = (l.found and 10) or 0 end return data end function figures.identify(data) data = data or callstack[#callstack] or lastfiguredata local list = identifiers.list -- defined at the end for i=1,#list do local identifier = list[i] data = identifier(data) if data.status.status > 0 then break end end return data end function figures.exists(askedname,format,resolve) return (existers[format] or existers.generic)(askedname,resolve) end function figures.check(data) data = data or callstack[#callstack] or lastfiguredata return (checkers[data.status.format] or checkers.generic)(data) end function figures.include(data) data = data or callstack[#callstack] or lastfiguredata return (includers[data.status.format] or includers.generic)(data) end function figures.scale(data) -- will become lua code context.doscalefigure() return data end function figures.done(data) figures.nofprocessed = figures.nofprocessed + 1 data = data or callstack[#callstack] or lastfiguredata local dr, du, ds, nr = data.request, data.used, data.status, figures.boxnumber local box = texbox[nr] ds.width = box.width ds.height = box.height ds.xscale = ds.width /(du.width or 1) ds.yscale = ds.height/(du.height or 1) ds.page = ds.page or du.page or dr.page -- sort of redundant but can be limited return data end function figures.dummy(data) data = data or callstack[#callstack] or lastfiguredata local dr, du, nr = data.request, data.used, figures.boxnumber local box = node.hpack(node.new("hlist")) -- we need to set the dir (luatex 0.60 buglet) du.width = du.width or figures.defaultwidth du.height = du.height or figures.defaultheight du.depth = du.depth or figures.defaultdepth -- box.dir = "TLT" box.width = du.width box.height = du.height box.depth = du.depth texbox[nr] = box -- hm, should be global (to be checked for consistency) end -- -- -- generic -- -- -- function existers.generic(askedname,resolve) -- not findbinfile local result if lfs.isfile(askedname) then result = askedname elseif resolve then result = resolvers.findbinfile(askedname) or "" if result == "" then result = false end end if trace_figures then if result then report_inclusion("%a resolved to %a",askedname,result) else report_inclusion("%a cannot be resolved",askedname) end end return result end function checkers.generic(data) local dr, du, ds = data.request, data.used, data.status local name = du.fullname or "unknown generic" local page = du.page or dr.page local size = dr.size or "crop" local color = dr.color or "natural" local mask = dr.mask or "none" local conversion = dr.conversion local resolution = dr.resolution if not conversion or conversion == "" then conversion = "unknown" end if not resolution or resolution == "" then resolution = "unknown" end local hash = f_hash_full(name,page,size,color,conversion,resolution,mask) local figure = figures_loaded[hash] if figure == nil then figure = img.new { filename = name, page = page, pagebox = dr.size, -- visiblefilename = "", -- this prohibits the full filename ending up in the file } codeinjections.setfigurecolorspace(data,figure) codeinjections.setfiguremask(data,figure) figure = figure and img.check(img.scan(figure)) or false local f, d = codeinjections.setfigurealternative(data,figure) figure, data = f or figure, d or data figures_loaded[hash] = figure if trace_conversion then report_inclusion("new graphic, using hash %a",hash) end else if trace_conversion then report_inclusion("existing graphic, using hash %a",hash) end end if figure then du.width = figure.width du.height = figure.height du.pages = figure.pages du.depth = figure.depth or 0 du.colordepth = figure.colordepth or 0 du.xresolution = figure.xres or 0 du.yresolution = figure.yres or 0 du.xsize = figure.xsize or 0 du.ysize = figure.ysize or 0 ds.private = figure ds.hash = hash end return data end function includers.generic(data) local dr, du, ds = data.request, data.used, data.status -- here we set the 'natural dimensions' dr.width = du.width dr.height = du.height local hash = figures.hash(data) local figure = figures_used[hash] -- figures.registerresource { -- filename = du.fullname, -- width = dr.width, -- height = dr.height, -- } if figure == nil then figure = ds.private if figure then figure = img.copy(figure) figure = figure and img.clone(figure,data.request) or false end figures_used[hash] = figure end if figure then local nr = figures.boxnumber -- it looks like we have a leak in attributes here .. todo local box = node.hpack(img.node(figure)) -- img.node(figure) not longer valid indexed[figure.index] = figure box.width, box.height, box.depth = figure.width, figure.height, 0 -- new, hm, tricky, we need to do that in tex (yet) texbox[nr] = box ds.objectnumber = figure.objnum context.relocateexternalfigure() end return data end -- -- -- nongeneric -- -- -- local function checkers_nongeneric(data,command) -- todo: macros and context.* local dr, du, ds = data.request, data.used, data.status local name = du.fullname or "unknown nongeneric" local hash = name if dr.object then -- hm, bugged ... waiting for an xform interface if not job.objects.get("FIG::"..hash) then if type(command) == "function" then command() end context.dosetfigureobject(hash) end context.doboxfigureobject(hash) elseif type(command) == "function" then command() end return data end local function includers_nongeneric(data) return data end checkers.nongeneric = checkers_nongeneric includers.nongeneric = includers_nongeneric -- -- -- mov -- -- -- function checkers.mov(data) local dr, du, ds = data.request, data.used, data.status local width = todimen(dr.width or figures.defaultwidth) local height = todimen(dr.height or figures.defaultheight) local foundname = du.fullname dr.width, dr.height = width, height du.width, du.height, du.foundname = width, height, foundname if trace_inclusion then report_inclusion("including movie %a, width %p, height %p",foundname,width,height) end -- we need to push the node.write in between ... we could make a shared helper for this context.startfoundexternalfigure(width .. "sp",height .. "sp") context(function() nodeinjections.insertmovie { width = width, height = height, factor = number.dimenfactors.bp, ["repeat"] = dr["repeat"], controls = dr.controls, preview = dr.preview, label = dr.label, foundname = foundname, } end) context.stopfoundexternalfigure() return data end includers.mov = includers.nongeneric -- -- -- mps -- -- -- internalschemes.mprun = true local function internal(askedname) local spec, mprun, mpnum = match(lower(askedname),"mprun([:%.]?)(.-)%.(%d+)") if spec ~= "" then return mprun, mpnum else return "", mpnum end end function existers.mps(askedname) local mprun, mpnum = internal(askedname) if mpnum then return askedname else return existers.generic(askedname) end end function checkers.mps(data) local mprun, mpnum = internal(data.used.fullname) if mpnum then return checkers_nongeneric(data,function() context.docheckfiguremprun(mprun,mpnum) end) else return checkers_nongeneric(data,function() context.docheckfiguremps(data.used.fullname) end) end end includers.mps = includers.nongeneric -- -- -- tex -- -- -- function existers.tex(askedname) askedname = resolvers.findfile(askedname) return askedname ~= "" and askedname or false end function checkers.tex(data) return checkers_nongeneric(data,function() context.docheckfiguretex(data.used.fullname) end) end includers.tex = includers.nongeneric -- -- -- buffer -- -- -- function existers.buffer(askedname) local name = file.nameonly(askedname) local okay = buffers.exists(name) return okay and name, true -- always quit scanning end function checkers.buffer(data) return checkers_nongeneric(data,function() context.docheckfigurebuffer(file.nameonly(data.used.fullname)) end) end includers.buffers = includers.nongeneric -- -- -- auto -- -- -- function existers.auto(askedname) local name = gsub(askedname, ".auto$", "") local format = figures.guess(name) if format then report_inclusion("format guess %a for %a",format,name) else report_inclusion("format guess for %a is not possible",name) end return format and name, true, format end checkers.auto = checkers.generic includers.auto = includers.generic -- -- -- cld -- -- -- existers.cld = existers.tex function checkers.cld(data) return checkers_nongeneric(data,function() context.docheckfigurecld(data.used.fullname) end) end includers.cld = includers.nongeneric -- -- -- converters -- -- -- local function makeoptions(options) local to = type(options) return (to == "table" and concat(options," ")) or (to == "string" and options) or "" end -- programs.makeoptions = makeoptions local function runprogram(binary,argument,variables) local binary = match(binary,"[%S]+") -- to be sure if type(argument) == "table" then argument = concat(argument," ") -- for old times sake end if not os.which(binary) then report_inclusion("program %a is not installed, not running command: %s",binary,command) elseif not argument or argument == "" then report_inclusion("nothing to run, unknown program %a",binary) else local command = format([["%s" %s]],binary,replacetemplate(longtostring(argument),variables)) if trace_conversion or trace_programs then report_inclusion("running command: %s",command) end os.spawn(command) end end programs.run = runprogram -- -- -- eps & pdf -- -- -- -- -- \externalfigure[cow.eps] -- \externalfigure[cow.pdf][conversion=stripped] local epsconverter = converters.eps or { } converters.eps = epsconverter converters.ps = epsconverter local epstopdf = { resolutions = { [v_low] = "screen", [v_medium] = "ebook", [v_high] = "prepress", }, command = os.type == "windows" and "gswin32c" or "gs", -- -dProcessDSCComments=false argument = [[ -q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH -dAutoRotatePages=/None -dPDFSETTINGS=/%presets% -dEPSCrop -sOutputFile=%newname% %oldname% -c quit ]], } programs.epstopdf = epstopdf programs.gs = epstopdf function epsconverter.pdf(oldname,newname,resolution) -- the resolution interface might change local epstopdf = programs.epstopdf -- can be changed local presets = epstopdf.resolutions[resolution or ""] or epstopdf.resolutions.high runprogram(epstopdf.command, epstopdf.argument, { newname = newname, oldname = oldname, presets = presets, } ) end epsconverter.default = epsconverter.pdf local pdfconverter = converters.pdf or { } converters.pdf = pdfconverter programs.pdftoeps = { command = "pdftops", argument = [[-eps "%oldname%" "%newname%]], } pdfconverter.stripped = function(oldname,newname) local pdftoeps = programs.pdftoeps -- can be changed local epstopdf = programs.epstopdf -- can be changed local presets = epstopdf.resolutions[resolution or ""] or epstopdf.resolutions.high local tmpname = newname .. ".tmp" runprogram(pdftoeps.command, pdftoeps.argument, { oldname = oldname, newname = tmpname, presets = presets }) runprogram(epstopdf.command, epstopdf.argument, { oldname = tmpname, newname = newname, presets = presets }) os.remove(tmpname) end figures.registersuffix("stripped","pdf") -- -- -- svg -- -- -- local svgconverter = { } converters.svg = svgconverter converters.svgz = svgconverter -- inkscape on windows only works with complete paths programs.inkscape = { command = "inkscape", pdfargument = [[ "%oldname%" --export-dpi=600 -A "%newname%" ]], pngargument = [[ "%oldname%" --export-dpi=600 --export-png="%newname%" ]], } function svgconverter.pdf(oldname,newname) local inkscape = programs.inkscape -- can be changed runprogram(inkscape.command, inkscape.pdfargument, { newname = expandfilename(newname), oldname = expandfilename(oldname), } ) end function svgconverter.png(oldname,newname) local inkscape = programs.inkscape runprogram(inkscape.command, inkscape.pngargument, { newname = expandfilename(newname), oldname = expandfilename(oldname), } ) end svgconverter.default = svgconverter.pdf -- -- -- gif -- -- -- -- -- -- tif -- -- -- local gifconverter = converters.gif or { } local tifconverter = converters.tif or { } local bmpconverter = converters.bmp or { } converters.gif = gifconverter converters.tif = tifconverter converters.bmp = bmpconverter programs.convert = { command = "gm", -- graphicmagick argument = [[convert "%oldname%" "%newname%"]], } local function converter(oldname,newname) local convert = programs.convert runprogram(convert.command, convert.argument, { newname = newname, oldname = oldname, } ) end tifconverter.pdf = converter gifconverter.pdf = converter bmpconverter.pdf = converter gifconverter.default = converter tifconverter.default = converter bmpconverter.default = converter -- todo: lowres -- -- -- bases -- -- -- local bases = allocate() figures.bases = bases local bases_list = nil -- index => { basename, fullname, xmlroot } local bases_used = nil -- [basename] => { basename, fullname, xmlroot } -- pointer to list local bases_found = nil local bases_enabled = false local function reset() bases_list = allocate() bases_used = allocate() bases_found = allocate() bases_enabled = false bases.list = bases_list bases.used = bases_used bases.found = bases_found end reset() function bases.use(basename) if basename == "reset" then reset() else basename = file.addsuffix(basename,"xml") if not bases_used[basename] then local t = { basename, nil, nil } bases_used[basename] = t bases_list[#bases_list+1] = t if not bases_enabled then bases_enabled = true xml.registerns("rlx","http://www.pragma-ade.com/schemas/rlx") -- we should be able to do this per xml file end if trace_bases then report_inclusion("registering base %a",basename) end end end end local function bases_find(basename,askedlabel) if trace_bases then report_inclusion("checking for %a in base %a",askedlabel,basename) end basename = file.addsuffix(basename,"xml") local t = bases_found[askedlabel] if t == nil then local base = bases_used[basename] local page = 0 if base[2] == nil then -- no yet located for i=1,#figure_paths do local path = figure_paths[i] local xmlfile = path .. "/" .. basename if io.exists(xmlfile) then base[2] = xmlfile base[3] = xml.load(xmlfile) if trace_bases then report_inclusion("base %a loaded",xmlfile) end break end end end t = false if base[2] and base[3] then -- rlx:library for e in xml.collected(base[3],"/(*:library|figurelibrary)/*:figure/*:label") do page = page + 1 if xml.text(e) == askedlabel then t = { base = file.replacesuffix(base[2],"pdf"), format = "pdf", name = xml.text(e,"../*:file"), -- to be checked page = page, } bases_found[askedlabel] = t if trace_bases then report_inclusion("figure %a found in base %a",askedlabel,base[2]) end return t end end if trace_bases and not t then report_inclusion("figure %a not found in base %a",askedlabel,base[2]) end end end return t end -- we can access sequential or by name local function bases_locate(askedlabel) for i=1,#bases_list do local entry = bases_list[i] local t = bases_find(entry[1],askedlabel) if t then return t end end return false end function identifiers.base(data) if bases_enabled then local dr, du, ds = data.request, data.used, data.status local fbl = bases_locate(dr.name or dr.label) if fbl then du.page = fbl.page du.format = fbl.format du.fullname = fbl.base ds.fullname = fbl.name ds.format = fbl.format ds.page = fbl.page ds.status = 10 end end return data end bases.locate = bases_locate bases.find = bases_find identifiers.list = { identifiers.base, identifiers.default } -- tracing statistics.register("graphics processing time", function() local nofprocessed = figures.nofprocessed if nofprocessed > 0 then return format("%s seconds including tex, %s processed images", statistics.elapsedtime(figures),nofprocessed) else return nil end end) -- helper function figures.applyratio(width,height,w,h) -- width and height are strings and w and h are numbers if not width or width == "" then if not height or height == "" then return figures.defaultwidth, figures.defaultheight else height = todimen(height) if w and h then return height * w/h, height else return figures.defaultwidth, height end end else width = todimen(width) if not height or height == "" then if w and h then return width, width * h/w else return width, figures.defaultheight end else return width, todimen(height) end end end -- example of simple plugins: -- -- figures.converters.png = { -- png = function(oldname,newname,resolution) -- local command = string.format('gm convert -depth 1 "%s" "%s"',oldname,newname) -- logs.report(string.format("running command %s",command)) -- os.execute(command) -- end, -- } -- local fig = figures.push { name = pdffile } -- figures.identify() -- figures.check() -- local nofpages = fig.used.pages -- figures.pop() -- interfacing commands.setfigurelookuporder = figures.setorder context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-pag.mkvi0000644000175000017500000001357312130411274024277 0ustar norbertnorbert%D \module %D [ file=scrn-pag, %D version=1998.01.15, %D title=\CONTEXT\ Screen Macros, %D subtitle=Pages, % moved code %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % pagecomments will be done differently \writestatus{loading}{ConTeXt Screen Macros / Pages} \registerctxluafile{scrn-pag}{1.001} \unprotect \installcorenamespace{interactionscreen} \installparameterhandler \??interactionscreen {interactionscreen} \installsetuphandler \??interactionscreen {interactionscreen} \newdimen\canvaswidth \newdimen\canvasheight \newdimen\canvasbackoffset \newdimen\canvastopoffset \newdimen\canvasmaxwidth \newdimen\canvasmaxheight \newconditional\c_scrn_canvas_tight_page \def\scrn_canvas_calculate {\begingroup \edef\currentinteractionscreenwidth {\interactionscreenparameter\c!width }% \edef\currentinteractionscreenheight{\interactionscreenparameter\c!height}% \canvasbackoffset\backspace \canvastopoffset\topspace \ifx\currentinteractionscreenwidth\v!max \global\canvaswidth\printpaperwidth \else\ifx\currentinteractionscreenwidth\v!fit \global\canvaswidth\dimexpr \leftcombitotal + \makeupwidth + \rightcombitotal + 2\dimexpr \interactionscreenparameter\c!backspace + \interactionscreenparameter\c!horoffset \relax \relax \else\ifx\currentinteractionscreenwidth\v!tight \ifdim\backspace>\canvaswidth \ifdim\backspace>\zeropoint\relax \global\advance\canvasbackoffset -\canvaswidth \fi \fi \global\advance\canvaswidth\dimexpr \makeupwidth + \rightcombitotal + 2\dimexpr \interactionscreenparameter\c!backspace + \interactionscreenparameter\c!horoffset \relax \relax \else \global\canvaswidth\currentinteractionscreenwidth \fi\fi\fi \ifx\currentinteractionscreenheight\v!max \global\canvasheight\printpaperheight \else\ifx\currentinteractionscreenheight\v!fit \global\canvasheight\dimexpr \topheight + \topdistance + \makeupheight + \bottomdistance + \bottomheight + 2\dimexpr \interactionscreenparameter\c!topspace + \interactionscreenparameter\c!veroffset \relax \relax \else\ifx\currentinteractionscreenheight\v!tight \global\canvasheight\dimexpr\topheight+\topdistance\relax \ifdim\topspace>\canvasheight \ifdim\topspace>\zeropoint\relax \global\advance\canvastopoffset -\canvasheight \fi \fi \global\advance\canvasheight\dimexpr \makeupheight + \bottomdistance + \bottomheight + 2\dimexpr \interactionscreenparameter\c!topspace + \interactionscreenparameter\c!veroffset \relax \relax \else \global\canvasheight\currentinteractionscreenheight \fi\fi\fi \ifconditional\c_page_layouts_location_is_set \global\setfalse\c_scrn_canvas_tight_page \fi \ifconditional\c_scrn_canvas_tight_page \global\canvasmaxwidth \paperwidth \global\canvasmaxheight\paperheight \else \global\canvasmaxwidth \printpaperwidth \global\canvasmaxheight\printpaperheight \fi \endgroup} % test the next when something is changed here: % % \setuppapersize[A5][A3] \showframe % % % \setuplayout[location=middle] \setupinteractionscreen[option=fit] % % \setuplayout[location=middle] \setupinteractionscreen[option=auto] % % \setupinteractionscreen[option=fit] % % \setupinteractionscreen[option=auto] % % \starttext \input ward \stoptext \def\scrn_canvas_synchronize_simple {\ctxcommand{setupcanvas{ paperwidth = \number\printpaperwidth, paperheight = \number\printpaperheight }}} \def\scrn_canvas_synchronize_complex {\scrn_canvas_calculate % otherwise we need to hook it into setuppage etc \ctxcommand{setupcanvas{ mode = "\interactionscreenparameter\c!option", singlesided = \ifsinglesided true\else false\fi, doublesided = \ifdoublesided true\else false\fi, leftoffset = \number\canvasbackoffset, topoffset = \number\canvastopoffset, width = \number\canvaswidth, height = \number\canvasheight, paperwidth = \number\canvasmaxwidth, paperheight = \number\canvasmaxheight }}} \appendtoks \doifcommonelse{\interactionscreenparameter\c!option}{\v!max,\v!fit}% {\global\settrue \c_scrn_canvas_tight_page}% {\global\setfalse\c_scrn_canvas_tight_page}% \to \everysetupinteractionscreen \setupinteractionscreen [\c!width=\printpaperwidth, \c!height=\printpaperheight, \c!horoffset=\zeropoint, \c!veroffset=\zeropoint, \c!backspace=\backspace, \c!topspace=\topspace, \c!option=\v!auto] %D Conditional page breaks: \unexpanded\def\screen {\dosingleempty\scrn_screen} \def\scrn_screen[#list]% {\iflocation \page[#list]% \fi} %D Page transitions: \let\scrn_transitions_list\empty \unexpanded\def\setuppagetransitions {\dosingleempty\scrn_transitions_setup} \def\scrn_transitions_setup[#list]% {\edef\scrn_transitions_list{#list}} \def\scrn_transitions_set {\iflocation \ifx\scrn_transitions_list\empty \else \scrn_transitions_set_indeed \fi \fi} \def\scrn_transitions_set_indeed {\begingroup \edef\currentinteractionscreendelay{\interactionscreenparameter\c!delay}% \ctxcommand{setpagetransition{ n = "\scrn_transitions_list", delay = "\ifx\currentinteractionscreendelay\v!none 0\else\currentinteractionscreendelay\fi" }}% \endgroup} \prependtoks \scrn_transitions_set \to \everyshipout \setupinteractionscreen [\c!delay=\v!none] \setuppagetransitions [\v!reset] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-timing.tex0000644000175000017500000000212112130411274026161 0ustar norbertnorbert%D \module %D [ file=mtx-context-timing, %D version=2009.03.21, %D title=\CONTEXT\ Extra Trickry, %D subtitle=Timing Runs, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % begin help % % usage: context --extra=timing filename % % end help \enablemode[no-timing] \usemodule[timing] \setuplayout [topspace=1cm, bottomspace=.5cm, header=0pt, width=middle, height=middle, style=\tt] \setupfootertexts [\getdocumentfilename{1}-luatex-progress.lut \emdash\ \pagenumber] \setupcolors [state=start] \starttext \doifsomethingelse {\getdocumentfilename{1}} { \writestatus{system}{processing timings of \getdocumentfilename{1}} \LoadUsage{\getdocumentfilename{1}-luatex-progress} \ShowUsage{\getdocumentfilename{1}-luatex-progress} } { \writestatus{system}{no filename given for timings} } \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-syn.mkii0000644000175000017500000000513511754241457024317 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-inf.lua0000644000175000017500000000264512130411274024124 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-inf'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This file will be loaded runtime by x-pending.tex. local concat = table.concat local xmlwithelements = xml.withelements local getid = lxml.getid local status, stack local function get(e,d) local ns, tg = e.ns, e.tg local name = tg if ns ~= "" then name = ns .. ":" .. tg end stack[d] = name local ec = e.command if ec == true then ec = "system: text" elseif ec == false then ec = "system: skip" elseif ec == nil then ec = "system: not set" elseif type(ec) == "string" then ec = "setup: " .. ec else -- function ec = tostring(ec) end local tag = concat(stack," => ",1,d) local s = status[tag] if not s then s = { } status[tag] = s end s[ec] = (s[ec] or 0) + 1 end local function get_command_status(id) status, stack = {}, {} if id then xmlwithelements(getid(id),get) return status else local t = { } for id, _ in next, loaded do t[id] = get_command_status(id) end return t end end lxml.get_command_status = get_command_status context-2013.05.28.20130704/texmf-dist/tex/context/base/type-set.mkii0000644000175000017500000000564611754241457024343 0ustar norbertnorbert%D \module %D [ file=type-set, %D version=2005.02.04, % moved from ini/def %D title=\CONTEXT\ Typescript Macros, %D subtitle=Default Settings, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \definetypescriptprefix [serif] [Serif] \definetypescriptprefix [sans] [Sans] \definetypescriptprefix [mono] [Mono] \definefontsynonym [DefaultFont] [cmvtt10] \startsetups [font:fallback:serif] \definefontsynonym [Serif] [DefaultFont] \definefontsynonym [SerifBold] [Serif] \definefontsynonym [SerifItalic] [Serif] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldItalic] [Serif] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [Serif] \stopsetups \startsetups [font:fallback:sans] \definefontsynonym [Sans] [DefaultFont] \definefontsynonym [SansBold] [Sans] \definefontsynonym [SansItalic] [Sans] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldItalic] [Sans] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \definefontsynonym [SansCaps] [Sans] \stopsetups \startsetups [font:fallback:mono] \definefontsynonym [Mono] [DefaultFont] \definefontsynonym [MonoBold] [Mono] \definefontsynonym [MonoItalic] [Mono] \definefontsynonym [MonoSlanted] [MonoItalic] \definefontsynonym [MonoBoldItalic] [Mono] \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic] \definefontsynonym [MonoCaps] [Mono] \stopsetups \startsetups [font:allbold:serif] \definefontsynonym [Serif] [SerifBold] \definefontsynonym [SerifItalic] [SerifBoldItalic] \definefontsynonym [SerifSlanted] [SerifBoldSlanted] %definefontsynonym [SerifCaps] [SerifBold] \stopsetups \startsetups [font:allbold:sans] \definefontsynonym [Sans] [SansBold] \definefontsynonym [SansItalic] [SansBoldItalic] \definefontsynonym [SansSlanted] [SansBoldSlanted] %definefontsynonym [SansCaps] [SansBold] \stopsetups \ifnum\texengine=\xetexengine %usetypescriptfile[\f!typeprefix def] % preloaded in context.mkii %usetypescriptfile[\f!typeprefix tmf] % replaced \usetypescriptfile[\f!typeprefix siz] \usetypescriptfile[\f!typeprefix otf] \usetypescriptfile[\f!typeprefix xtx] \usetypescriptfile[\f!typeprefix loc] \else %usetypescriptfile[\f!typeprefix def] % preloaded in context.mkii %usetypescriptfile[\f!typeprefix tmf] % replaced \usetypescriptfile[\f!typeprefix siz] \usetypescriptfile[\f!typeprefix one] \usetypescriptfile[\f!typeprefix loc] \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-coverage.mkiv0000644000175000017500000000710112161703335025743 0ustar norbertnorbert%D \module %D [ file=s-fonts-coverage, % s-fnt-31 %D version=2011.01.02, %D title=\CONTEXT\ Style File, %D subtitle=Show Fonts Coverage, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % begin info % % title : compare glyphs in fonts % % comment : show glyphs in several fonts alongside in order to to compare coverage % status : experimental, used for luatex testing % % end info \startmodule[fonts-coverage] \registerctxluafile{s-fonts-coverage}{} \installmodulecommandluasingle \showfontcomparison {moduledata.fonts.coverage.showcomparison} \stopmodule \continueifinputfile{s-fonts-coverage.mkiv} \usemodule[art-01] \starttext \showfontcomparison [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf}, pattern=ogonek] \page % $e=mc²$ ${}²$ $²$ $x²ᶞ$ $x⁽²⁺²⁼²⁺²⁾$ $x²⁺²⁼²⁺²$ $x₅²$ $x²₅²$ % \startluacode % moduledata.fonts.coverage.showcomparison { % list = { % "texgyrepagella-math.otf", % "texgyretermes-math.otf", % "texgyrebonum-math.otf", % } % } % \stopluacode % \startluacode % moduledata.fonts.coverage.showcomparison { % list = "pirat.ttf", % } % \stopluacode % \startluacode % moduledata.fonts.coverage.showcomparison { % list = { % "lucidabrightot.otf", % "cambria.ttf", % "iwona-regular.otf", % "texgyrepagella-regular.otf", % "texgyretermes-regular.otf", % "texgyrebonum-regular.otf", % "antpolt-regular.otf", % }, % pattern = "OGONEK" % } % \stopluacode % \loadfontgoodies[lucida-math] % \loadfontgoodies[lm-math] % % \startluacode % moduledata.fonts.coverage.showcomparison { % list = { % "LucidaBrightRegular.ttf", % "LucidaBrightOne@lucida-math", % "cambria.ttc(Cambria Math)", % "xits-math.otf", % "LMMath10-Regular@lmroman10-math", % }, % } % \stopluacode % \loadfontgoodies[px-math] % \loadfontgoodies[lm-math] % % \startluacode % moduledata.fonts.coverage.showcomparison { % list = { % "cambria.ttc(Cambria Math)", % "xits-math.otf", % -- "stixmath-regular.otf", % "latinmodern-math.otf", % -- "lucidabrightmathot.otf", % -- "lucidabrightmathot-demi.otf", % "texgyrepagella-math.otf", % "texgyretermes-math.otf", % "texgyrebonum-math.otf", % -- "LMMath10-Regular@lmroman10-math", % -- "pxmath@px-math", % -- "txmath@tx-math", % }, % } % \stopluacode % \startluacode % moduledata.fonts.coverage.showcomparison { % list = { % "dejavuserif.ttf", % "dejavusans.ttf", % "dejavusansmono.ttf", % "lucidabrightot.otf", % "cambria.ttf", % "iwona-regular.otf", % "texgyrepagella-regular.otf", % "texgyretermes-regular.otf", % "texgyrebonum-regular.otf", % "antpolt-regular.otf", % }, % pattern = "CELSIUS,FAHRENHEIT" % } % \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-def.mkii0000644000175000017500000000760111754241457024277 0ustar norbertnorbert%D \module %D [ file=type-def, %D version=2005.02.04, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Default Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[simplification] \starttypescript [serif] [simple] [name] \definefontsynonym [Serif] [Simple] \definefontsynonym [SerifBold] [Serif] \definefontsynonym [SerifItalic] [Serif] \definefontsynonym [SerifSlanted] [Serif] \definefontsynonym [SerifBoldItalic] [Serif] \definefontsynonym [SerifBoldSlanted] [Serif] \definefontsynonym [SerifCaps] [Serif] \stoptypescript \starttypescript [sans] [simple] [name] \definefontsynonym [Sans] [Simple] \definefontsynonym [SansBold] [Sans] \definefontsynonym [SansItalic] [Sans] \definefontsynonym [SansSlanted] [Sans] \definefontsynonym [SansBoldItalic] [Sans] \definefontsynonym [SansBoldSlanted] [Sans] \definefontsynonym [SansCaps] [Sans] \stoptypescript \starttypescript [mono] [simple] [name] \definefontsynonym [Mono] [Simple] \definefontsynonym [MonoBold] [Mono] \definefontsynonym [MonoItalic] [Mono] \definefontsynonym [MonoSlanted] [Mono] \definefontsynonym [MonoBoldItalic] [Mono] \definefontsynonym [MonoBoldSlanted] [Mono] \definefontsynonym [MonoCaps] [Mono] \stoptypescript \stoptypescriptcollection % handy % \starttypescript [serif] [simple] [name] % \definefontsynonym [Simple] [cmvtt10] % \setupfontsynonym [Simple] [handling=pure] % \stoptypescript \starttypescriptcollection[handling-and-hz] \starttypescript [serif,sans,mono] [handling,hanging] [pure,normal] \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree bold] \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree slanted] \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree italic] \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree boldslanted] \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree bolditalic] \stoptypescript \starttypescript [serif,sans,mono] [handling,hz] [hz,quality,highquality] \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree] \stoptypescript \starttypescript [serif,sans,mono] [handling] [noligs,prespacing,flexspacing] \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree] \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-imp-stp.mkiv0000644000175000017500000000624511754241457025112 0ustar norbertnorbert%D \module %D [ file=java-stp, %D version=2004.03.15, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Stepping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % we define ocglist global, otherwise we quickly run into a memory hog (even % out of memory in a 512 Meg machine) % we cannot use doc_visited[this.pageNum] instead of doc_currentstep because % of some funny side effect (i.e. dup or so) % todo: test with later as we do autoinsert now \startJSpreamble Steps used now var doc_ocglist = this.getOCGs() ; var doc_stepname = "step" ; var doc_currentstep = 0 ; var doc_maxstep = 50 ; var doc_visited = new Array() ; var doc_busy = new Array() ; function SetupStepper(layername,laststep) { doc_stepname = layername ; doc_maxstep = laststep ; for (var i=0; i<=this.numPages; i++) { doc_visited[i] = 0 ; doc_busy[i] = 0 ; } } for (var i=0; i<=this.numPages; i++) { doc_visited[i] = 0 ; doc_busy[i] = 0 ; } function GetOCG(name) { for (var i=0; i < doc_ocglist.length; i++) { if (doc_ocglist[i].name == name) { return doc_ocglist[i] ; } } return null ; } function CheckBusy() { var ocg = GetOCG("step:busy") ; if (ocg != null) { if (doc_visited[this.pageNum]==0) { ocg.state = true ; } else { if (doc_visited[this.pageNum]0 \obeyedspace \advance\PLverboseskipped -1 \@EA\PLverbosecorrection \fi} \gdef\PLsetcontrols% {\saveprettycontrols \def\obeyedspace% {\endPLtypesix \ifPLverbose \advance\PLverboseskipped 1 \else \oldobeyedspace \fi}% \def\flushrestofverbatimline% {\endPLtypesix \global\inPLcommentfalse}% \def\obeyedline% {\PLverbosefalse \PLverboseskipped=0 \PLdocdonefalse \oldobeyedline}% \let\obeytabs=\ignoretabs} \gdef\JVsetcontrols% {\PLsetcontrols {\endPLtypesix \ifcase\JVcommentlevel \inPLcommentfalse \fi \PLverbosefalse \PLverboseskipped=0}} \gdef\setupprettyPLtype% {\def\prettyidentifier{PL}% \PLsetvariables \PLsetcontrols \PLsethandlers \PLsetspecials \PLsetdiagnostics} \gdef\PLsetvariables% {\global\inPLsinglefalse \global\inPLdoublefalse \global\inPLcommentfalse \global\let\PLsequence=\empty \global\let\PLprefix=\empty} \gdef\PLsetspecials% {\setpretty`\{=10 \setpretty`\}=10 \setpretty`\$=21 \setpretty`\@=21 \setpretty`\%=22 \setpretty`\[=31 \setpretty`\]=31 \setpretty`\(=32 \setpretty`\)=32 \setpretty`\==32 \setpretty`\~=32 \setpretty`\<=32 \setpretty`\>=32 \setpretty`\-=41 \setpretty`\+=41 \setpretty`\/=41 \setpretty`\*=41 \setpretty`\|=41 \setpretty`\`=41 \setpretty`\!=41 \setpretty`\?=41 \setpretty`\^=41 \setpretty`\&=42 \setpretty`\\=50 \setpretty`\1=61 \setpretty`\2=61 \setpretty`\3=61 \setpretty`\4=61 \setpretty`\5=61 \setpretty`\6=61 \setpretty`\7=61 \setpretty`\8=61 \setpretty`\9=61 \setpretty`\0=61 \setpretty`\_=61 \setpretty`\A=62 \setpretty`\B=62 \setpretty`\C=62 \setpretty`\D=62 \setpretty`\E=62 \setpretty`\F=62 \setpretty`\G=62 \setpretty`\H=62 \setpretty`\I=62 \setpretty`\J=62 \setpretty`\K=62 \setpretty`\L=62 \setpretty`\M=62 \setpretty`\N=62 \setpretty`\O=62 \setpretty`\P=62 \setpretty`\Q=62 \setpretty`\R=62 \setpretty`\S=62 \setpretty`\T=62 \setpretty`\U=62 \setpretty`\V=62 \setpretty`\W=62 \setpretty`\X=62 \setpretty`\Y=62 \setpretty`\Z=62 \setpretty`\a=62 \setpretty`\b=62 \setpretty`\c=62 \setpretty`\d=62 \setpretty`\e=62 \setpretty`\f=62 \setpretty`\g=62 \setpretty`\h=62 \setpretty`\i=62 \setpretty`\j=62 \setpretty`\k=62 \setpretty`\l=62 \setpretty`\m=62 \setpretty`\n=62 \setpretty`\o=62 \setpretty`\p=62 \setpretty`\q=62 \setpretty`\r=62 \setpretty`\s=62 \setpretty`\t=62 \setpretty`\u=62 \setpretty`\v=62 \setpretty`\w=62 \setpretty`\x=62 \setpretty`\y=62 \setpretty`\z=62 \setpretty`\;=71 \setpretty`\:=72 \setpretty`\,=71 \setpretty`\.=71 \setpretty`\'=80 \setpretty`\"=90 \setpretty`\#= 0 } \gdef\PLsethandlers% {\installprettyhandler 10 \PLtypeone \installprettyhandler 21 \PLtypetwo \installprettyhandler 22 \PLtypetwo \installprettyhandler 31 \PLtypethree \installprettyhandler 32 \PLtypethree \installprettyhandler 41 \PLtypefourone \installprettyhandler 42 \PLtypefourtwo \installprettyhandler 50 \PLtypefive \installprettyhandler 61 \PLtypesixone \installprettyhandler 62 \PLtypesixtwo \installprettyhandler 71 \PLtypesevenone \installprettyhandler 72 \PLtypeseventwo \installprettyhandler 80 \PLtypeeight \installprettyhandler 90 \PLtypenine \installprettyhandler 0 \PLtypezero} \gdef\PLtypeone#1% {\ifinPLdouble \PLverbosefalse \ifinPLcomment \endPLtypesix \getpretty{#1}% \else\ifx\PLprefix\empty \endPLtypesix \getpretty{#1}% \else \endPLtypesix \xdef\PLprefix{\getpretty{#1}}% \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi\fi \else \endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi\fi \fi} % \gdef\PLtypetwo#1% % {\endPLtypesix % \xdef\PLprefix{\getpretty{#1}}% % \ifinPLcomment % \getpretty{#1}% % \else\ifinPLsingle % \getpretty{#1}% % \else\ifinPLdouble % \getprettydata{#1}% % \ifnum\prettytype=21 % \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty % \else % \getpretty{#1}% % \fi % \else % \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty % \fi\fi\fi} \gdef\PLtypetwo#1% {\endPLtypesix \ifinPLdoc \xdef\PLsequence{\PLsequence\getpretty{#1}}% \else\ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else\ifinPLdouble \getprettydata{#1}% \ifnum\prettytype=21 \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \else \getpretty{#1}% \fi \else \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \fi\fi\fi\fi} \gdef\PLtypethree#1% {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else\ifinPLdouble \getprettydata{#1}% \ifnum\prettytype=31 \ifx\PLprefix\empty \getpretty{#1}% \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi \else \getpretty{#1}% \fi \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\PLtypefourone#1% {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else\ifinPLdouble \getpretty{#1}% \else \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\doPLtypefourtwo#1#2% {\PLverbosefalse \getprettydata{#2}% \ifnum\prettytype=62 \expandafter\PLtypetwo \else \expandafter\PLtypefourone \fi {#1}#2} \gdef\PLtypefourtwo% {\handlenextnextpretty\doPLtypefourtwo\PLtypefourone} \gdef\doPLtypefiveA#1#2% {\endPLtypesix \ifinPLcomment \getpretties{#1}{#2}% \else\ifinPLsingle \getprettydata{#2}% \ifnum\prettytype=50 \beginofpretty[\!!prettytwo]\getpretties{#1}{#2}\endofpretty \else\ifnum\prettytype=80 \beginofpretty[\!!prettytwo]\getpretties{#1}{#2}\endofpretty \else \getpretties{#1}{#2}% \fi\fi \else \beginofpretty[\!!prettytwo]\getpretties{#1}{#2}\endofpretty \fi\fi} \gdef\doPLtypefiveB#1% {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \fi\fi} \gdef\PLtypefive% {\ifPLverbose \expandafter\PLtypesixtwo \else \expandafter\handlenextnextpretty\expandafter\doPLtypefiveA\expandafter\doPLtypefiveB \fi} % \gdef\endPLtypesix% % {\ifx\PLsequence\empty\else % \ifinPLcomment % \PLsequence % \else\ifinPLsingle % \PLsequence % \else\ifinPLdouble % \PLsequence % \else\ifPLverbose % \beginofpretty[\!!prettytwo]\PLsequence\endofpretty % \PLverbosefalse % \else\ifx\PLprefix\empty % \doifprettyidentifierelse{\PLsequence}{\PLverboses} % {\PLverbosetrue\PLverboseskipped=3 } % {\doifprettyidentifierelse{\PLsequence}{\PLidentifiers} % {\beginofpretty[\!!prettytwo]% % {\prettyidentifierfont\PLsequence}% % \endofpretty} % {\ifprettyPLvariables % \doifprettyidentifierelse{\PLsequence}{\PLvariables} % {\beginofpretty[\!!prettytwo]% % {\prettyvariablefont\PLsequence}% % \endofpretty} % {\PLsequence}% % \else % \PLsequence % \fi}}% % \else\ifprettyPLvariables % \doifprettyidentifierelse{\PLprefix\PLsequence}{\PLvariables} % {\beginofpretty[\!!prettytwo]% % {\prettyvariablefont\PLsequence}% % \endofpretty} % {\PLsequence}% % \else % \PLsequence % \fi\fi\fi\fi\fi\fi % \global\let\PLsequence=\empty % \global\let\PLprefix=\empty % \fi} \gdef\endPLtypesix {\ifx\PLsequence\empty\else \ifinPLdoc \doendPLtypesixvar\!!prettythree \else\ifinPLcomment \PLsequence \else\ifinPLsingle \PLsequence \else\ifinPLdouble \PLsequence \else\ifPLverbose \beginofpretty[\!!prettytwo]\PLsequence\endofpretty \PLverbosefalse \else\ifx\PLprefix\empty \doendPLtypesix\!!prettytwo \else\ifprettyPLvariables \doendPLtypesixvar\!!prettytwo \else \PLsequence \fi\fi\fi\fi\fi\fi\fi \global\let\PLsequence\empty \global\let\PLprefix\empty \fi} \gdef\doendPLtypesix#1% {\doifprettyidentifierelse{\PLsequence}{\PLverboses} {\PLverbosetrue\PLverboseskipped=3 } {\doifprettyidentifierelse{\PLsequence}{\PLidentifiers} {\beginofpretty[#1]% {\prettyidentifierfont\PLsequence}% \endofpretty} {\ifprettyPLvariables \doifprettyidentifierelse{\PLsequence}{\PLvariables} {\beginofpretty[#1]% {\prettyvariablefont\PLsequence}% \endofpretty} {\PLsequence}% \else \PLsequence \fi}}} \gdef\doendPLtypesixvar#1% {\doifprettyidentifierelse{\PLprefix\PLsequence}{\PLvariables} {\beginofpretty[#1]% {\prettyvariablefont\PLsequence}% \endofpretty} {\PLsequence}} \gdef\PLtypesixone {\ifx\PLsequence\empty \expandafter\getpretty \else \expandafter\PLtypesixtwo \fi} % \gdef\PLtypesixtwo#1% % {\ifinPLcomment % \getpretty{#1}% % \else\ifinPLsingle % \getpretty{#1}% % \else\ifinPLdouble % \ifx\PLprefix\empty % \getpretty{#1}% % \else % \xdef\PLsequence{\PLsequence\getpretty{#1}}% % \fi % \else % \xdef\PLsequence{\PLsequence\getpretty{#1}}% % \fi\fi\fi} \gdef\PLtypesixtwo#1% {\ifinPLdoc \xdef\PLsequence{\PLsequence\getpretty{#1}}% \else\ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else\ifinPLdouble \ifx\PLprefix\empty \getpretty{#1}% \else \xdef\PLsequence{\PLsequence\getpretty{#1}}% \fi \else \xdef\PLsequence{\PLsequence\getpretty{#1}}% \fi\fi\fi\fi} \gdef\PLtypesevenone#1% {\endPLtypesix \getpretty{#1}} \gdef\PLtypeseventwo% {\handlenextnextpretty\doPLtypeseventwo\PLtypesevenone} \gdef\doPLtypeseventwo#1#2% {\getprettydata{#2}% \ifnum\prettytype=72 \PLtypesixtwo{#1}\PLtypesixtwo{#1}% \else \PLtypesevenone{#1}\expandafter#2% \fi} \gdef\PLtypeeight#1% single quote {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLdouble \getpretty{#1}% \else\ifinPLsingle \global\inPLsinglefalse \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \else \global\inPLsingletrue \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\PLtypenine#1% double quote {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else\ifinPLdouble \global\inPLdoublefalse \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \else \global\inPLdoubletrue \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\PLtypezero% {\endPLtypesix \ifnewpretty\expandafter\handlenewpretty\fi\doPLtypezero} \gdef\doPLtypezero#1% {\ifinPLcomment \getpretty{#1}% \else \global\inPLcommenttrue \PLverbosecorrection \ifnaturaltextext % non tested yet \let\next\naturaltextext \else \def\next{\beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty}% \fi \expandafter\next \fi} \gdef\doreportprettyPLtype#1#2#3#4% {#1% [PERL \string#2 typing conflict, use \string#3 instead] \writestatus {PERL typing} {use \string#3 instead of \string#2 to enable propper visualization}% \global#4% \expandafter\doemptyverbatimline \fi} \gdef\reportprettyPLtype% {\doreportprettyPLtype\ifinPLsingle'\'\inPLsinglefalse \doreportprettyPLtype\ifinPLdouble"\"\inPLdoublefalse} \gdef\PLsetdiagnostics% {\let\normaldoemptyverbatimline=\doemptyverbatimline \def\doemptyverbatimline% {\normaldoemptyverbatimline \reportprettyPLtype}} %D The official \PERL\ version 5 keywords: \useprettyidentifiers \PLidentifiers \PLsetspecials abs accept alarm and atan atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir cmp connect continue cos crypt dbmclose dbmopen defined delete die do dump each echo else elsif endgrent endhostent endnetent endprotoend endpwent endservent eof eq eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime goto grep gt hex if import index int integer ioctl join keys kill last lc lcfirst le length lib link listen local localtime log lstat lt map method mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord pack package pipe pop pos print printf process prompt push quotemeta rand read readdir readlink recv redo ref rename require reset return reverse rewinddir rindex rmdir scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat strict study sub subs substr symlink syscall sysopen sysread system syswrite tell telldir tie tied time times times truncate uc ucfirst ucmask umask unary undef unless unlink unpack unshift untie until use utime values vars vec wait waitpid wantarray warn warn while write xor %D Additional module keywords (still incomplete): \useprettyidentifiers \PLvariables \PLsetspecials Getopt::Long $Getopt::Long::passthrough $Getopt::Long::autoabbrev &GetOptions %D A funny hack. When prefixes by \type{TEX}, a \type{\csname} %D is typeset as \TEX\ sequence. \useprettyidentifiers \PLverboses \PLsetspecials TEX \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-var.mkii0000644000175000017500000000411311754241457024275 0ustar norbertnorbert%D \module %D [ file=spec-var, %D version=2003.10.10, %D title=\CONTEXT\ Special Macros, %D subtitle=Variables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 used to be integrated in \type {spec-ini}, %D but testing optimization is more convenient this way. \writestatus{loading}{ConTeXt Special Macros / Variables} % new approach, 'global' variables, since we run out of % arguments \unprotect % This variable holds a comma separated list of (supported) figure % types. It may be changes by other modules. \let\figuretypes\empty \ifx\undefined\@@DriverFieldName \letempty \@@DriverFieldName \letempty \@@DriverFieldWidth \letempty \@@DriverFieldHeight \letempty \@@DriverFieldDefault \letempty \@@DriverFieldNumber \letempty \@@DriverFieldNumber \letempty \@@DriverFieldStyle \letempty \@@DriverFieldColor \letempty \@@DriverFieldBackgroundColor \letempty \@@DriverFieldFrameColor \letempty \@@DriverFieldLayer \letempty \@@DriverFieldOption \letempty \@@DriverFieldAlign \letempty \@@DriverFieldClickIn \letempty \@@DriverFieldClickOut \letempty \@@DriverFieldRegionIn \letempty \@@DriverFieldRegionOut \letempty \@@DriverFieldAfterKey \letempty \@@DriverFieldFormat \letempty \@@DriverFieldValidate \letempty \@@DriverFieldCalculate \letempty \@@DriverFieldFocusIn \letempty \@@DriverFieldFocusOut \fi \ifx\undefined\@@DriverCommentLayer \letempty \@@DriverCommentLayer \fi \ifx\undefined\@@DriverAttachmentLayer \letempty \@@DriverAttachmentLayer \fi \ifx\undefined\@@DriverImageBox \letempty \@@DriverImageBox \letempty \@@DriverImageOptions \letempty \@@DriverImageWidth \letempty \@@DriverImageHeight \letempty \@@DriverImageFile \letempty \@@DriverImageLabel \letempty \@@DriverImageType \letempty \@@DriverImageMethod \letempty \@@DriverImagePage \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-pst.mkiv0000644000175000017500000000610412130411274024275 0ustar norbertnorbert%D \module %D [ file=page-mis, %D version=2008.11.17, % was part of page-flt.tex / 2000.10.20 %D title=\CONTEXT\ Page Macros, %D subtitle=Postponing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Postponing} \registerctxluafile{page-pst}{1.001} \unprotect % postponing \newevery\everytopofpage\relax \appendtoks \the\everytopofpage \to \everystarttext \appendtoks \global\everytopofpage\emptytoks \to \everystoptext % \startpostponing [pagenumber] [+pageoffset] % % \startpostponing[2] % PAGE 2 \blank % \stoppostponing % % \startpostponing[+1] % PAGE +1 \blank % \stoppostponing % % \startpostponing[+2] % PAGE +2 \blank % \stoppostponing % % \starttext \dorecurse{4}{\input tufte \page} \stoptext %D There is no real need to use \LUA\ here but the bookkeeping %D is somewhat easier and we also can erase buffers easier when %D we keep a local cache, especially as we can flush per page. %newif \ifinpostponing % prevents nesting \newcount \c_page_postponed_blocks_next_page % set at the lua end \newconditional\c_page_postponed_busy \unexpanded\setvalue{\e!start\v!postponing}% {\bgroup \obeylines \doifnextoptionalelse{\egroup\page_postponed_blocks_start}{\egroup\page_postponed_blocks_start[0]}} \unexpanded\setvalue{\e!stop\v!postponing}% {\ctxcommand{registerpostponedblock("\currentpostponedpage")}\relax} \def\page_postponed_blocks_start[#1]% {\edef\currentpostponedpage{#1}% \grabbufferdatadirect{postponedblock}{\e!start\v!postponing}{\e!stop\v!postponing}} % officially we should flush again after a flush as there can be new future pages % but that will be looked into when we run into it \unexpanded\def\page_postponed_blocks_flush_indeed {\begingroup \setsystemmode\v!postponing \settrue\c_page_postponed_busy \pagetotal\zeropoint % here? still needed? (was after flush pagefloats) \the\everytopofpage\relax %\flushrestfloats \page_floats_flush_page_floats \setnormalcatcodes % postponing in verbatim \restoreglobalbodyfont % otherwise problems inside split verbatim \ctxcommand{flushpostponedblocks()}% \relax \page_otr_command_flush_floats % new but potential dangerous, maybe we need a classification \endgroup} % of blocks: with and without flush \unexpanded\def\page_postponed_blocks_flush {\ifconditional\c_page_postponed_busy % probably a nested flush \else\ifnum\c_page_postponed_blocks_next_page=\zerocount % nothing in cache \else\ifnum\c_page_postponed_blocks_next_page<\zerocount % generic cache \page_postponed_blocks_flush_indeed \else\ifnum\c_page_postponed_blocks_next_page>\realpageno % future content \else % pending content \page_postponed_blocks_flush_indeed \fi\fi\fi\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-cln.lua0000644000175000017500000000615612130411274024144 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-cln'] = { version = 1.001, comment = "companion to typo-cln.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This quick and dirty hack took less time than listening to a CD (In -- this case Dream Theaters' Octavium. Of course extensions will take -- more time. local utfbyte = utf.byte local trace_cleaners = false trackers.register("typesetters.cleaners", function(v) trace_cleaners = v end) local trace_autocase = false trackers.register("typesetters.cleaners.autocase",function(v) trace_autocase = v end) local report_cleaners = logs.reporter("nodes","cleaners") local report_autocase = logs.reporter("nodes","autocase") typesetters.cleaners = typesetters.cleaners or { } local cleaners = typesetters.cleaners local variables = interfaces.variables local nodecodes = nodes.nodecodes local tasks = nodes.tasks local texattribute = tex.attribute local traverse_id = node.traverse_id local unsetvalue = attributes.unsetvalue local glyph_code = nodecodes.glyph local uccodes = characters.uccodes local a_cleaner = attributes.private("cleaner") local resetter = { -- this will become an entry in char-def [utfbyte(".")] = true } -- Contrary to the casing code we need to keep track of a state. -- We could extend the casing code with a status tracker but on -- the other hand we might want to apply casing afterwards. So, -- cleaning comes first. local function process(namespace,attribute,head) local inline, done = false, false for n in traverse_id(glyph_code,head) do local char = n.char if resetter[char] then inline = false elseif not inline then local a = n[attribute] if a == 1 then -- currently only one cleaner so no need to be fancy local upper = uccodes[char] if type(upper) == "table" then -- some day, not much change that \SS ends up here else n.char = upper done = true if trace_autocase then report_autocase("") end end end inline = true end end return head, done end -- see typo-cap for a more advanced settings handler .. not needed now local enabled = false function cleaners.set(n) if n == variables.reset or not tonumber(n) or n == 0 then texattribute[a_cleaner] = unsetvalue else if not enabled then tasks.enableaction("processors","typesetters.cleaners.handler") if trace_cleaners then report_cleaners("enabling cleaners") end enabled = true end texattribute[a_cleaner] = n end end cleaners.handler = nodes.installattributehandler { name = "cleaner", namespace = cleaners, processor = process, } -- interface commands.setcharactercleaning = cleaners.set context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-itc.lua0000644000175000017500000002035312130411274024142 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-itc'] = { version = 1.001, comment = "companion to typo-itc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfchar = utf.char local trace_italics = false trackers.register("typesetters.italics", function(v) trace_italics = v end) local report_italics = logs.reporter("nodes","italics") typesetters.italics = typesetters.italics or { } local italics = typesetters.italics local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local kern_code = nodecodes.kern local glue_code = nodecodes.glue local disc_code = nodecodes.disc local math_code = nodecodes.math local tasks = nodes.tasks local insert_node_after = node.insert_after local delete_node = nodes.delete local end_of_math = node.end_of_math local texattribute = tex.attribute local a_italics = attributes.private("italics") local unsetvalue = attributes.unsetvalue local new_correction_kern = nodes.pool.fontkern local new_correction_glue = nodes.pool.glue local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local italicsdata = fonthashes.italics local forcedvariant = false function typesetters.italics.forcevariant(variant) forcedvariant = variant end local function setitalicinfont(font,char) local tfmdata = fontdata[font] local character = tfmdata.characters[char] if character then local italic = character.italic_correction if not italic then local autoitalicamount = tfmdata.properties.autoitalicamount or 0 if autoitalicamount ~= 0 then local description = tfmdata.descriptions[char] if description then italic = description.italic if not italic then local boundingbox = description.boundingbox italic = boundingbox[3] - description.width + autoitalicamount if italic < 0 then -- < 0 indicates no overshoot or a very small auto italic italic = 0 end end if italic ~= 0 then italic = italic * tfmdata.parameters.hfactor end end end if trace_italics then report_italics("setting italic correction of %C of font %a to %p",char,font,italic) end character.italic_correction = italic or 0 end return italic else return 0 end end -- todo: clear attribute local function process(namespace,attribute,head) local done = false local italic = 0 local lastfont = nil local lastattr = nil local previous = nil local prevchar = nil local current = head local inserted = nil while current do local id = current.id if id == glyph_code then local font = current.font local char = current.char local data = italicsdata[font] if font ~= lastfont then if italic ~= 0 then if data then if trace_italics then report_italics("ignoring %p between italic %C and italic %C",italic,prevchar,char) end else if trace_italics then report_italics("inserting %p between italic %C and regular %C",italic,prevchar,char) end insert_node_after(head,previous,new_correction_kern(italic)) done = true end elseif inserted and data then if trace_italics then report_italics("deleting last correction before %C",char) end delete_node(head,inserted) else -- nothing end lastfont = font end if data then local attr = forcedvariant or current[attribute] if attr and attr > 0 then local cd = data[char] if not cd then -- this really can happen italic = 0 else italic = cd.italic or cd.italic_correction if not italic then italic = setitalicinfont(font,char) -- calculated once -- italic = 0 end if italic ~= 0 then lastfont = font lastattr = attr previous = current prevchar = char end end else italic = 0 end else italic = 0 end inserted = nil elseif id == disc_code then -- skip elseif id == kern_code then inserted = nil italic = 0 elseif id == glue_code then if italic ~= 0 then if trace_italics then report_italics("inserting %p between italic %C and glue",italic,prevchar) end inserted = new_correction_glue(italic) -- maybe just add ? else problem with penalties insert_node_after(head,previous,inserted) italic = 0 done = true end elseif id == math_code then current = end_of_math(current) elseif italic ~= 0 then if trace_italics then report_italics("inserting %p between italic %C and whatever",italic,prevchar) end inserted = nil insert_node_after(head,previous,new_correction_kern(italic)) italic = 0 done = true end current = current.next end if italic ~= 0 and lastattr > 1 then -- more control is needed here if trace_italics then report_italics("inserting %p between italic %C and end of list",italic,prevchar) end insert_node_after(head,previous,new_correction_kern(italic)) done = true end return head, done end local enable enable = function() tasks.enableaction("processors","typesetters.italics.handler") if trace_italics then report_italics("enabling text italics") end enable = false end function italics.set(n) if enable then enable() end if n == variables.reset then texattribute[a_italics] = unsetvalue else texattribute[a_italics] = tonumber(n) or unsetvalue end end function italics.reset() texattribute[a_italics] = unsetvalue end italics.handler = nodes.installattributehandler { name = "italics", namespace = italics, processor = process, } local variables = interfaces.variables local settings_to_hash = utilities.parsers.settings_to_hash function commands.setupitaliccorrection(option) -- no grouping ! if enable then enable() end local options = settings_to_hash(option) local variant = unsetvalue if options[variables.text] then variant = 1 elseif options[variables.always] then variant = 2 end if options[variables.global] then forcedvariant = variant texattribute[a_italics] = unsetvalue else forcedvariant = false texattribute[a_italics] = variant end if trace_italics then report_italics("forcing %a, variant %a",forcedvariant,variant ~= unsetvalue and variant) end end -- for manuals: local stack = { } function commands.pushitaliccorrection() table.insert(stack,{forcedvariant, texattribute[a_italics] }) end function commands.popitaliccorrection() local top = table.remove(stack) forcedvariant = top[1] texattribute[a_italics] = top[2] end context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-was.mkii0000644000175000017500000002235711754241457024331 0ustar norbertnorbert%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] \unprotect % 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] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-vis.mkii0000644000175000017500000003324111754241457024306 0ustar norbertnorbert%D \module %D [ file=regi-vis, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=viscii, %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for VISCII input encoding (regime) for Vietnamese. %D %D Usage: %D \type{\enableregime[vis]} \startregime[viscii] \defineactivetoken 2 {\Abrevehook} % 1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE \defineactivetoken 5 {\Abrevetilde} % 1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE \defineactivetoken 6 {\Acircumflextilde} % 1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE \defineactivetoken 20 {\Yhook} % 1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE \defineactivetoken 25 {\Ytilde} % 1EF8 LATIN CAPITAL LETTER Y WITH TILDE \defineactivetoken 30 {\Ydotbelow} % 1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW \defineactivetoken 128 {\Adotbelow} % 1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW \defineactivetoken 129 {\Abreveacute} % 1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE \defineactivetoken 130 {\Abrevegrave} % 1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE \defineactivetoken 131 {\Abrevedotbelow} % 1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW \defineactivetoken 132 {\Acircumflexacute} % 1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE \defineactivetoken 133 {\Acircumflexgrave} % 1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE \defineactivetoken 134 {\Acircumflexhook} % 1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE \defineactivetoken 135 {\Acircumflexdotbelow} % 1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW \defineactivetoken 136 {\Etilde} % 1EBC LATIN CAPITAL LETTER E WITH TILDE \defineactivetoken 137 {\Edotbelow} % 1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW \defineactivetoken 138 {\Ecircumflexacute} % 1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE \defineactivetoken 139 {\Ecircumflexgrave} % 1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE \defineactivetoken 140 {\Ecircumflexhook} % 1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE \defineactivetoken 141 {\Ecircumflextilde} % 1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE \defineactivetoken 142 {\Ecircumflexdotbelow} % 1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW \defineactivetoken 143 {\Ocircumflexacute} % 1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE \defineactivetoken 144 {\Ocircumflexgrave} % 1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE \defineactivetoken 145 {\Ocircumflexhook} % 1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE \defineactivetoken 146 {\Ocircumflextilde} % 1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE \defineactivetoken 147 {\Ocircumflexdotbelow} % 1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW \defineactivetoken 148 {\Ohorndotbelow} % 1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW \defineactivetoken 149 {\Ohornacute} % 1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE \defineactivetoken 150 {\Ohorngrave} % 1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE \defineactivetoken 151 {\Ohornhook} % 1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE \defineactivetoken 152 {\Idotbelow} % 1ECA LATIN CAPITAL LETTER I WITH DOT BELOW \defineactivetoken 153 {\Ohook} % 1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE \defineactivetoken 154 {\Odotbelow} % 1ECC LATIN CAPITAL LETTER O WITH DOT BELOW \defineactivetoken 155 {\Ihook} % 1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE \defineactivetoken 156 {\Uhook} % 1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE \defineactivetoken 157 {\Utilde} % 0168 LATIN CAPITAL LETTER U WITH TILDE \defineactivetoken 158 {\Udotbelow} % 1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW \defineactivetoken 159 {\Ygrave} % 1EF2 LATIN CAPITAL LETTER Y WITH GRAVE \defineactivetoken 160 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 161 {\abreveacute} % 1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE \defineactivetoken 162 {\abrevegrave} % 1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE \defineactivetoken 163 {\abrevedotbelow} % 1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW \defineactivetoken 164 {\acircumflexacute} % 1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE \defineactivetoken 165 {\acircumflexgrave} % 1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE \defineactivetoken 166 {\Acircumflexhook} % 1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE \defineactivetoken 167 {\acircumflexdotbelow} % 1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW \defineactivetoken 168 {\etilde} % 1EBD LATIN SMALL LETTER E WITH TILDE \defineactivetoken 169 {\edotbelow} % 1EB9 LATIN SMALL LETTER E WITH DOT BELOW \defineactivetoken 170 {\ecircumflexacute} % 1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE \defineactivetoken 171 {\ecircumflexgrave} % 1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE \defineactivetoken 172 {\ecircumflexhook} % 1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE \defineactivetoken 173 {\ecircumflextilde} % 1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE \defineactivetoken 174 {\ecircumflexdotbelow} % 1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW \defineactivetoken 175 {\ocircumflexacute} % 1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE \defineactivetoken 176 {\ocircumflexgrave} % 1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE \defineactivetoken 177 {\ocircumflexhook} % 1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE \defineactivetoken 178 {\ocircumflextilde} % 1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE \defineactivetoken 179 {\Ohorntilde} % 1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE \defineactivetoken 180 {\Ohorn} % 01A0 LATIN CAPITAL LETTER O WITH HORN \defineactivetoken 181 {\ocircumflexdotbelow} % 1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW \defineactivetoken 182 {\ohorngrave} % 1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE \defineactivetoken 183 {\ohornhook} % 1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE \defineactivetoken 184 {\idotbelow} % 1ECB LATIN SMALL LETTER I WITH DOT BELOW \defineactivetoken 185 {\Uhorndotbelow} % 1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW \defineactivetoken 186 {\Uhornacute} % 1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE \defineactivetoken 187 {\Uhorngrave} % 1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE \defineactivetoken 188 {\Uhornhook} % 1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE \defineactivetoken 189 {\ohorn} % 01A1 LATIN SMALL LETTER O WITH HORN \defineactivetoken 190 {\ohornacute} % 1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE \defineactivetoken 191 {\Uhorn} % 01AF LATIN CAPITAL LETTER U WITH HORN \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Ahook} % 1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE \defineactivetoken 197 {\Abreve} % 0102 LATIN CAPITAL LETTER A WITH BREVE \defineactivetoken 198 {\abrevehook} % 1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE \defineactivetoken 199 {\abrevetilde} % 1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ehook} % 1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Itilde} % 0128 LATIN CAPITAL LETTER I WITH TILDE \defineactivetoken 207 {\ygrave} % 1EF3 LATIN SMALL LETTER Y WITH GRAVE \defineactivetoken 208 {\Dstroke} % 0110 LATIN CAPITAL LETTER D WITH STROKE \defineactivetoken 209 {\uhornacute} % 1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\adotbelow} % 1EA1 LATIN SMALL LETTER A WITH DOT BELOW \defineactivetoken 214 {\yhook} % 1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE \defineactivetoken 215 {\uhorngrave} % 1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE \defineactivetoken 216 {\uhornhook} % 1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\ytilde} % 1EF9 LATIN SMALL LETTER Y WITH TILDE \defineactivetoken 220 {\ydotbelow} % 1EF5 LATIN SMALL LETTER Y WITH DOT BELOW \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\ohorntilde} % 1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE \defineactivetoken 223 {\uhorn} % 01B0 LATIN SMALL LETTER U WITH HORN \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\ahook} % 1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE \defineactivetoken 229 {\abreve} % 0103 LATIN SMALL LETTER A WITH BREVE \defineactivetoken 230 {\uhorntilde} % 1EEF LATIN SMALL LETTER U WITH HORN AND TILDE \defineactivetoken 231 {\acircumflextilde} % 1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ehook} % 1EBB LATIN SMALL LETTER E WITH HOOK ABOVE \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\itilde} % 0129 LATIN SMALL LETTER I WITH TILDE \defineactivetoken 239 {\ihook} % 1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE \defineactivetoken 240 {\dstroke} % 0111 LATIN SMALL LETTER D WITH STROKE \defineactivetoken 241 {\uhorndotbelow} % 1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\ohook} % 1ECF LATIN SMALL LETTER O WITH HOOK ABOVE \defineactivetoken 247 {\odotbelow} % 1ECD LATIN SMALL LETTER O WITH DOT BELOW \defineactivetoken 248 {\udotbelow} % 1EE5 LATIN SMALL LETTER U WITH DOT BELOW \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\utilde} % 0169 LATIN SMALL LETTER U WITH TILDE \defineactivetoken 252 {\uhook} % 1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\ohorndotbelow} % 1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW \defineactivetoken 255 {\Uhorntilde} % 1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-23.tex0000644000175000017500000000610311754241457023675 0ustar norbertnorbert%D \module %D [ file=s-pre-20, %D version=2000.08.07, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 20, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 style looks a lot like number 22. This time we don't %D cycle but build up the page. One can click on the text go %D to the page wanted. Clicking on the titl ebrings you to the %D previous page. \startmode [demo] \disablemode[demo] \usemodule[pre-22] \enablemode[demo] \stopmode \startnotmode [demo] \usemodule[pre-22] \stopnotmode %D We use a simple two||color scheme. \definecolor[DotColor][r=.5,g=.6,b=.7] \definecolor[TopColor][r=.7,g=.6,b=.5] \definecolor[BotColor][TopColor] %D We will not delay page building. \let\BuildPage\relax %D Instead, we will flush a page for each summary. The main %D layer is build up anyway, but we need to overlay the %D current summary. \let\normalStartSummary\StartSummary \let\normalStopSummary \StopSummary \def\StartSummary {\startstandardmakeup \normalStartSummary} \def\StopSummary {\normalStopSummary \setlayer[temp]{\foundbox{Summary}\CurrentSummary} \setlayer[temp]{\foundbox{Subtext}\CurrentSummary} \stopstandardmakeup} %D The title page is not added to the main layer (or %D actually, it is, but we erase the layer before it's %D used). \long\def\MakeTitlePage#1#2% {\startstandardmakeup \definereference[thispage][] \switchtobodyfont[32pt] \StartSummary{#1}{}#2\StopSummary \resetlayer[main] \setlayer[temp]{\foundbox{Summary}\CurrentSummary} \setlayer[temp]{\foundbox{Subtext}\CurrentSummary} \definereference[thispage][page(\CurrentSummary)] \stopstandardmakeup} \doifnotmode{demo}{\endinput} \starttext \TitlePage{August 2000}{Something Very Important} \StartSummary{Alpha} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopSummary \StartSummary{Beta and Gamma} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopSummary \StartSummary{Delta} A simple and not too long text just to show the idea. \StopSummary \StartSummary{Epsilon} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopSummary \StartSummary{Zeta, Eta and Theta} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopSummary \StartSummary{Omega} A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. A simple and not too long text just to show the idea. \StopSummary \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/core-ini.mkiv0000644000175000017500000001147012130411274024264 0ustar norbertnorbert%D \module %D [ file=core-ini, %D version=2003.12.01, %D title=\CONTEXT\ Core Macros, %D subtitle=Additional Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Additional Initialization} \unprotect %D We introduce a couple of variables that are used all over \CONTEXT. Alternatively %D we could define them in each module but as they are part of the bigger picture we %D prefer to do it here. Ideally we should hav ea proper dependency tree but it might %D be that we want to make versions with a smaller footprints in which case one would %D still need to define the token list registers (unless we could do that runtime). %D \macros %D {every...} %D %D A few every's. %D Output routine: \newtoks \everybeforeoutput \newtoks \everyafteroutput %D Shipout: \newtoks \everyshipout \newtoks \everybeforeshipout \newtoks \everyaftershipout \newtoks \everyfirstshipout \newtoks \everylastshipout %D End of run: \newtoks \everybye \newtoks \everygoodbye \newtoks \everynotabene %D Document: \newtoks \everysetupdocument \newtoks \everyendoftextbody \newtoks \everystarttext \newtoks \everystoptext %D Purity: \newtoks \everyforgetall \newtoks \everycleanupfeatures \newtoks \everysimplifycommands \let\simplifiedcommands\everysimplifycommands % backward compatible, will stay as it's used in styles \unexpanded\def\forgetall {\the\everyforgetall} \unexpanded\def\cleanupfeatures {\the\everycleanupfeatures} \unexpanded\def\simplifycommands{\the\everysimplifycommands} \appendtoks \everypar\emptytoks % pretty important \to \everyforgetall %D Page building: \newtoks \everybeforepagebody \newtoks \everyafterpagebody \let\everypagebody\everybeforepagebody % backward compatible, will become obsolete %D Floats: \newtoks \everyinsidefloat %D Sectioning: %newtoks \everyheadstart %D Par building (experimental, used in xml

..

) \newtoks \everybeginofpar \newtoks \everyendofpar %newtoks \everyparflush \unexpanded\def\bpar{\the\everybeginofpar\ignorespaces} % may interfere with \everypar \unexpanded\def\epar{\ifhmode\removeunwantedspaces\the\everyendofpar\fi} % test prevents problems with \bpar\epar %D Lists: \newtoks \everylistentry \newtoks \everysavesortkeys %D Marks: %newtoks \everymarking %D Fonts: \newtoks \everyfont \newtoks \everyglobalbodyfont \newtoks \everydefinedfont \newevery \everybodyfont \EveryBodyFont \newevery \everyfontswitch \EveryFontSwitch \newtoks \everysetupbodyfont \newtoks \everyswitchtobodyfont %D Math: \newtoks \everybeforedisplayformula \newtoks \everymathematics \prependtoks \the\everymathematics \to \everymath \prependtoks \the\everymathematics \to \everydisplay %D Tables: %newtoks \everytable % we need to disstinguish kinds %D State mess: \newtoks \everypushsomestate \newtoks \everypopsomestate \unexpanded\def\pushsomestates{\the\everypushsomestate} \unexpanded\def\popsomestates {\the\everypopsomestate } %D More generic (used to be pushcolor etc) \newtoks\everystarttextproperties \newtoks\everystoptextproperties \unexpanded\def\starttextproperties{\the\everystarttextproperties} \unexpanded\def\stoptextproperties {\the\everystoptextproperties} %D \macros %D {trialtypesetting} %D %D We disable trial typesetting in the output routine, %D just to be sure. \prependtoks \resettrialtypesetting \to \everybeforepagebody %D \macros %D {ifinpagebody,ifinsidecolumns,ifdoublesided,ifsinglesided} %D %D These will become system modes and conditionals \newif \ifinpagebody \newif \ifinsidecolumns \newif \ifdoublesided \doublesidedfalse \newif \ifsinglesided \singlesidedtrue \newif \ifinsidefloat \newif \ifdoingblocks \newif \ifgridsnapping %D \macros %D {ifproductionrun} %D %D This boolean can be used to bypass certain initializations. \newif\ifproductionrun \appendtoks \productionruntrue \to \everydump %D \macros %D {everyboxedcontent, ifboxedcontent, %D startboxedcontent, stopboxedcontent} %D %D This one is relatively new and will be used as a more robust test for inner %D situations. \newif \ifboxedcontent \newtoks\everyboxedcontent \appendtoks \boxedcontenttrue \to \everyboxedcontent \unexpanded\def\startboxedcontent{\bgroup\the\everyboxedcontent} \let\stopboxedcontent\egroup %D We store some original meanings, maybe in \type {math-ini}. \let\normalat \at \let\normalin \in \let\normalfrom \from %let\normalover \over \let\normalabout\about %D This will be implemented way later: \let\setlayoutcomponentattribute \gobbleoneargument \let\resetlayoutcomponentattribute\relax \let\layoutcomponentboxattribute \empty \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-def.mkiv0000644000175000017500000003606012161703335024254 0ustar norbertnorbert%D \module %D [ file=math-tex, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, %D subtitle=Definitions, %D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Definitions} \unprotect % this will be done at the lua end \startluacode mathematics.define(\number\defaultmathfamily) -- mathematics.xml.registerentities() \stopluacode \activatemathcharacters % will go to math-ext (if used at all) \Umathchardef\braceld=0 \defaultmathfamily "FF07A \Umathchardef\bracerd=0 \defaultmathfamily "FF07B \Umathchardef\bracelu=0 \defaultmathfamily "FF07C \Umathchardef\braceru=0 \defaultmathfamily "FF07D % ctx specific % \bgroup % \catcode`|=\othercatcode % \global\let\|=| % \egroup % The \mfunction macro is an alternative for \hbox with a % controlable font switch. \definemathcommand [arccos] [nolop] {\mfunctionlabeltext{arccos}} \definemathcommand [arcsin] [nolop] {\mfunctionlabeltext{arcsin}} \definemathcommand [arctan] [nolop] {\mfunctionlabeltext{arctan}} \definemathcommand [arg] [nolop] {\mfunctionlabeltext{arg}} \definemathcommand [cosh] [nolop] {\mfunctionlabeltext{cosh}} \definemathcommand [cos] [nolop] {\mfunctionlabeltext{cos}} \definemathcommand [coth] [nolop] {\mfunctionlabeltext{coth}} \definemathcommand [cot] [nolop] {\mfunctionlabeltext{cot}} \definemathcommand [csc] [nolop] {\mfunctionlabeltext{csc}} \definemathcommand [deg] [nolop] {\mfunctionlabeltext{deg}} \definemathcommand [det] [limop] {\mfunctionlabeltext{det}} \definemathcommand [dim] [nolop] {\mfunctionlabeltext{dim}} \definemathcommand [exp] [nolop] {\mfunctionlabeltext{exp}} \definemathcommand [gcd] [limop] {\mfunctionlabeltext{gcd}} \definemathcommand [hom] [nolop] {\mfunctionlabeltext{hom}} \definemathcommand [inf] [limop] {\mfunctionlabeltext{inf}} \definemathcommand [injlim] [limop] {\mfunctionlabeltext{injlim}} \definemathcommand [ker] [nolop] {\mfunctionlabeltext{ker}} \definemathcommand [lg] [nolop] {\mfunctionlabeltext{lg}} \definemathcommand [liminf] [limop] {\mfunctionlabeltext{liminf}} \definemathcommand [limsup] [limop] {\mfunctionlabeltext{limsup}} \definemathcommand [lim] [limop] {\mfunctionlabeltext{lim}} \definemathcommand [ln] [nolop] {\mfunctionlabeltext{ln}} \definemathcommand [log] [nolop] {\mfunctionlabeltext{log}} \definemathcommand [median] [limop] {\mfunctionlabeltext{median}} \definemathcommand [max] [limop] {\mfunctionlabeltext{max}} \definemathcommand [min] [limop] {\mfunctionlabeltext{min}} \definemathcommand [mod] [limop] {\mfunctionlabeltext{mod}} %definemathcommand [div] [limop] {\mfunctionlabeltext{div}} % overloads \div symbol \definemathcommand [projlim] [limop] {\mfunctionlabeltext{projlim}} \definemathcommand [Pr] [limop] {\mfunctionlabeltext{Pr}} \definemathcommand [sec] [nolop] {\mfunctionlabeltext{sec}} \definemathcommand [sinh] [nolop] {\mfunctionlabeltext{sinh}} \definemathcommand [sin] [nolop] {\mfunctionlabeltext{sin}} \definemathcommand [sup] [limop] {\mfunctionlabeltext{sup}} \definemathcommand [tanh] [nolop] {\mfunctionlabeltext{tanh}} \definemathcommand [tan] [nolop] {\mfunctionlabeltext{tan}} % \definemathcommand [integers] {{\mathblackboard Z}} % \definemathcommand [reals] {{\mathblackboard R}} % \definemathcommand [rationals] {{\mathblackboard Q}} % \definemathcommand [naturalnumbers]{{\mathblackboard N}} % \definemathcommand [complexes] {{\mathblackboard C}} % \definemathcommand [primes] {{\mathblackboard P}} \let\normalmatharg\arg % todo: maybe automatically % using attributes \setnewconstant\bigmathdelimitermethod\plusone \def\plainbigdelimiters % traditional method {\bigmathdelimitermethod\plustwo} \plainbigdelimiters % is default for the moment but not so nice \def\doplainbigmath#1#2% {{\hbox{$% \nulldelimiterspace\zeropoint\relax \mathsurround\zeropoint $}}} \def\doleftbigmath #1{\ifx#1\relax\else\left#1\expandafter\doleftbigmath \fi} \def\dorightbigmath#1{\ifx#1\relax\else\right.\expandafter\dorightbigmath\fi} \installcorenamespace{mathbig} \unexpanded\def\choosemathbig#1#2% so we accent \big{||} as well {{\hbox{$% \ifcase\bigmathdelimitermethod \doleftbigmath#2\relax \dorightbigmath#2\relax \or \attribute\mathsizeattribute#1\relax \doleftbigmath#2\relax \dorightbigmath#2\relax \else \doleftbigmath#2\relax \vbox to\getvalue{\??mathbig\number#1}\bodyfontsize{}% \dorightbigmath#2\relax \fi \nulldelimiterspace\zeropoint\relax \mathsurround\zeropoint $}}} \definemathcommand [big] {\choosemathbig\plusone } \setvalue{\??mathbig1}{0.85} \definemathcommand [Big] {\choosemathbig\plustwo } \setvalue{\??mathbig2}{1.15} \definemathcommand [bigg] {\choosemathbig\plusthree} \setvalue{\??mathbig3}{1.45} \definemathcommand [Bigg] {\choosemathbig\plusfour } \setvalue{\??mathbig4}{1.75} \definemathcommand [bigl] [open] [one] {\big} \definemathcommand [bigm] [rel] [one] {\big} \definemathcommand [bigr] [close] [one] {\big} \definemathcommand [Bigl] [open] [one] {\Big} \definemathcommand [Bigm] [rel] [one] {\Big} \definemathcommand [Bigr] [close] [one] {\Big} \definemathcommand [biggl] [open] [one] {\bigg} \definemathcommand [biggm] [rel] [one] {\bigg} \definemathcommand [biggr] [close] [one] {\bigg} \definemathcommand [Biggl] [open] [one] {\Bigg} \definemathcommand [Biggm] [rel] [one] {\Bigg} \definemathcommand [Biggr] [close] [one] {\Bigg} %D This needs checking: \def\setoperatorlimits#1#2% operator limits {\savenormalmeaning{#1}% \def#1{\csname normal\strippedcsname#1\endcsname#2}} \setoperatorlimits\int \intlimits \setoperatorlimits\iint \intlimits \setoperatorlimits\iiint \intlimits \setoperatorlimits\oint \intlimits \setoperatorlimits\oiint \intlimits \setoperatorlimits\oiiint \intlimits \setoperatorlimits\intclockwise \intlimits \setoperatorlimits\ointclockwise \intlimits \setoperatorlimits\ointctrclockwise \intlimits %D This is a temporary hack until we figure out how to do this correctly, %D preferably using math parameters but we can also consider doing some %D node juggling here. \unexpanded\def\implies {\mathrel{\;\Longrightarrow\;}} \unexpanded\def\impliedby{\mathrel{\;\Longleftarrow\;}} \unexpanded\def\And {\mathrel{\;\internalAnd\;}} %unexpanded\def\iff {\;\Longleftrightarrow\;} \setuvalue {iff}{\;\Longleftrightarrow\;} % nicer for if checker % todo: virtual in math-vfu % \definemathcommand [mapsto] {\mapstochar\rightarrow} % \definemathcommand [hookrightarrow] {\lhook\joinrel\rightarrow} % \definemathcommand [hookleftarrow] {\leftarrow\joinrel\rhook} % \definemathcommand [bowtie] {\mathrel\triangleright\joinrel\mathrel\triangleleft} % \definemathcommand [models] {\mathrel|\joinrel=} % \definemathcommand [iff] {\;\Longleftrightarrow\;} % hm % ldots = 2026 % vdots = 22EE % cdots = 22EF % ddots = 22F1 % udots = 22F0 % \def\PLAINldots{\ldotp\ldotp\ldotp} % \def\PLAINcdots{\cdotp\cdotp\cdotp} % \def\PLAINvdots % {\vbox{\baselineskip.4\bodyfontsize\lineskiplimit\zeropoint\kern.6\bodyfontsize\hbox{.}\hbox{.}\hbox{.}}} % \def\PLAINddots % {\mkern1mu% % \raise.7\bodyfontsize\vbox{\kern.7\bodyfontsize\hbox{.}}% % \mkern2mu% % \raise.4\bodyfontsize\relax\hbox{.}% % \mkern2mu% % \raise.1\bodyfontsize\hbox{.}% % \mkern1mu} % \definemathcommand [ldots] [inner] {\PLAINldots} % \definemathcommand [cdots] [inner] {\PLAINcdots} % \definemathcommand [vdots] [nothing] {\PLAINvdots} % \definemathcommand [ddots] [inner] {\PLAINddots} %D \starttyping %D $\sqrt[3]{10}$ %D \stoptyping \def\rootradical{\Uroot \defaultmathfamily "221A } % can be done in char-def \def\root#1\of{\rootradical{#1}} % #2 \unexpanded\def\sqrt{\doifnextoptionalelse\rootwithdegree\rootwithoutdegree} \def\rootwithdegree [#1]{\rootradical{#1}} \def\rootwithoutdegree {\rootradical {}} \definemathcommand [mathstrut] {\vphantom{(}} \definemathcommand [joinrel] {\mathrel{\mkern-3mu}} \unexpanded\def\{{\mathortext\lbrace\letterleftbrace } % or maybe a chardef \unexpanded\def\}{\mathortext\rbrace\letterrightbrace} % or maybe a chardef \unexpanded\def\|{\mathortext\vert \letterbar } % or maybe a chardef %D The following colon related definitions are provided by Aditya %D Mahajan who derived them from \type {mathtools.sty} and \type %D {colonequals.sty}. %D \macros %D {centercolon, colonminus, minuscolon, colonequals, equalscolon, %D colonapprox, approxcolon, colonsim, simcolon, coloncolon, %D coloncolonminus, minuscoloncolon, coloncolonequals, %D equalscoloncolon, coloncolonapprox, approxcoloncolon, %D colonsim, simcoloncolon} %D %D In $a := b$ the colon is not vertically centered with the equal %D to. Also the distance between colon and equal to is a bit large. %D So, we define a vertically centered colon \tex {centercolon} and %D a few macros for colon and double colon relation symbols. %D %D \startlines %D \formula {A \centercolon B} %D \formula {A \colonminus B} %D \formula {A \minuscolon B} %D \formula {A \colonequals B} %D \formula {A \equalscolon B} %D \formula {A \colonapprox B} %D \formula {A \approxcolon B} %D \formula {A \colonsim B} %D \formula {A \simcolon B} %D \formula {A \coloncolon B} %D \formula {A \coloncolonminus B} %D \formula {A \minuscoloncolon B} %D \formula {A \coloncolonequals B} %D \formula {A \equalscoloncolon B} %D \formula {A \coloncolonapprox B} %D \formula {A \approxcoloncolon B} %D \formula {A \colonsim B} %D \formula {A \simcoloncolon B} %D \stoplines %D The next macros take care of the space between the colon and the %D relation symbol. \definemathcommand [colonsep] {\mkern-1.2mu} \definemathcommand [doublecolonsep] {\mkern-0.9mu} %D Now we define all the colon relations .. needs checking with char-def.lua ... %d will move to a separate module. \definemathcommand [centercolon] [rel] {\mathstylevcenteredhbox\colon} \definemathcommand [colonminus] [rel] {\centercolon\colonsep\mathrel{-}} \definemathcommand [minuscolon] [rel] {\mathrel{-}\colonsep\centercolon} % native char \definemathcommand [colonequals] [rel] {\centercolon\colonsep=} % native char \definemathcommand [equalscolon] [rel] {=\centercolon\colonsep} % native char \definemathcommand [colonapprox] [rel] {\centercolon\colonsep\approx} \definemathcommand [approxcolon] [rel] {\approx\centercolon\colonsep} \definemathcommand [colonsim] [rel] {\centercolon\colonsep\sim} \definemathcommand [simcolon] [rel] {\sim\centercolon\colonsep} \definemathcommand [coloncolon] [rel] {\centercolon\doublecolonsep\centercolon} \definemathcommand [coloncolonminus] [rel] {\coloncolon\colonsep\mathrel{-}} \definemathcommand [minuscoloncolon] [rel] {\mathrel{-}\colonsep\coloncolon} \definemathcommand [coloncolonequals] [rel] {\coloncolon\colonsep=} % native char \definemathcommand [equalscoloncolon] [rel] {=\coloncolon\colonsep} \definemathcommand [coloncolonapprox] [rel] {\coloncolon\colonsep\approx} \definemathcommand [approxcoloncolon] [rel] {\approx\coloncolon\colonsep} \definemathcommand [colonsim] [rel] {\coloncolon\colonsep\sim} \definemathcommand [simcoloncolon] [rel] {\sim\coloncolon\colonsep} %D Goodies. We might move this elsewhere. % Be careful in choosing what accents you take (the code below uses a % combining one): % % \startbuffer % % $\Umathaccent top 0 0 "20D7 {example}$ % % $\Umathaccent top fixed 0 0 "20D7 {example}$ % $\Umathaccent 0 0 "20D7 {example}$ % $\Umathaccent fixed 0 0 "20D7 {example}$ % $\Umathaccent bottom 0 0 "20D7 {example}$ % $\Umathaccent bottom fixed 0 0 "20D7 {example}$ % $\Umathaccent both 0 0 "20D7 % 0 0 "20D7 {example}$ % $\Umathaccent both fixed 0 0 "20D7 % fixed 0 0 "20D7 {example}$ % $\Umathaccent both 0 0 "20D7 % fixed 0 0 "20D7 {example}$ % $\Umathaccent both fixed 0 0 "20D7 % 0 0 "20D7 {example}$ % \stopbuffer % % \setupbodyfont[modern] \getbuffer % \setupbodyfont[xits] \getbuffer % \setupbodyfont[cambria] \getbuffer \unexpanded\def\underleftarrow #1{\mathop{\Uunderdelimiter \defaultmathfamily "2190 {#1}}} \unexpanded\def\overleftarrow #1{\mathop{\Uoverdelimiter \defaultmathfamily "2190 {#1}}} \unexpanded\def\underrightarrow#1{\mathop{\Uunderdelimiter \defaultmathfamily "2192 {#1}}} \unexpanded\def\overrightarrow #1{\mathop{\Uoverdelimiter \defaultmathfamily "2192 {#1}}} % watch out: here we have a class (zero): \unexpanded\def\normaldoublebrace {\Umathaccents 0 \defaultmathfamily "23DE 0 \defaultmathfamily "23DF } \unexpanded\def\normaldoubleparent{\Umathaccents 0 \defaultmathfamily "23DC 0 \defaultmathfamily "23DD } % let's keep this \def\Umathbotaccent{\Umathaccent \s!bottom } \def\Umathaccents {\Umathaccent \s!both } \let\normaloverbrace \overbrace \let\normalunderbrace \underbrace \let\normaloverparent \overparent \let\normalunderparent \underparent \let\normaloverbracket \overbracket \let\normalunderbracket \underbracket \let\normalunderleftarrow \underleftarrow \let\normaloverleftarrow \overleftarrow \let\normalunderrightarrow\underrightarrow \let\normaloverrightarrow \overrightarrow \unexpanded\def\mathopwithlimits#1#2{\mathop{#1{#2}}\limits} \unexpanded\def\stackrel #1#2{\mathrel{\mathop{#2}\limits^{#1}}} \unexpanded\def\overbrace {\mathopwithlimits\normaloverbrace } \unexpanded\def\underbrace {\mathopwithlimits\normalunderbrace } \unexpanded\def\doublebrace {\mathopwithlimits\normaldoublebrace } \unexpanded\def\overparent {\mathopwithlimits\normaloverparent } \unexpanded\def\underparent {\mathopwithlimits\normalunderparent } \unexpanded\def\overbracket {\mathopwithlimits\normaloverbracket } \unexpanded\def\underbracket {\mathopwithlimits\normalunderbracket } \unexpanded\def\doubleparent {\mathopwithlimits\normaldoubleparent } \unexpanded\def\underleftarrow {\mathopwithlimits\normalunderleftarrow } \unexpanded\def\overleftarrow {\mathopwithlimits\normaloverleftarrow } \unexpanded\def\underrightarrow{\mathopwithlimits\normalunderrightarrow} \unexpanded\def\overrightarrow {\mathopwithlimits\normaloverrightarrow } \let\lceil \lceiling \let\rceil \rceiling \let\normalsurd\surd \unexpanded\def\surd{\normalsurd{}} % Some special characters: \unexpanded\def\nabla{∇} % this one adapts % % todo mathclass=punctuation ord % \Umathcode"02C="6 \defaultmathfamily "02C % \Umathcode"02E="0 \defaultmathfamily "02E % tricky .. todo % \appendtoks % \def\over{\primitive\over}% % \to \everymathematics \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-ini.mkiv0000644000175000017500000000214212130411274024266 0ustar norbertnorbert%D \module %D [ file=unic-ini, %D version=2002.12.03, %D title=\CONTEXT\ \UNICODE\ Support, %D subtitle=\UNICODE\ \& UTF-8 support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Unicode Support / Initialization} \registerctxluafile{unic-ini}{1.001} \unprotect \def\unicodenumber #1{\the \numexpr#1\relax} % no lookahead \def\unicodehexnumber#1{\cldcontext{number.toevenhex(\number#1))}} %D \startbuffer %D \unicodechar{left square bracket}okay\unicodechar{right square bracket} %D \stopbuffer %D %D \typebuffer \getbuffer %def\unicodechar#1{\char\numexpr#1\relax} % no lookahead \def\unicodechar#1{\ctxcommand{unicodechar("#1")}} \unexpanded\def\unknownchar {\dontleavehmode\hbox{\vrule\s!width.5\emwidth\s!height\exheight\s!depth\zeropoint}} \ifdefined\zwnbsp\else \let\zwnbsp\relax \fi % zerowidthnonbreakablespace \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-edtsnc.mkii0000644000175000017500000001414211754241457024272 0ustar norbertnorbert%D \module %D [ file=m-editsnc, %D version=2003.12.23, %D title=\CONTEXT\ Modules, %D subtitle=Editor Synchronization, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.edit for %C details. % \enablemode[demo] % This file is a variation of the file m-pdfsync. This time we do it % in a more abstract way and prepare ourselves for support in dvi % output. % \enableeditsync % \disableeditsync % \editsync % \editsynctext {string} % \editsyncnode {char} % \editsynctracemode [chardef: 0-4] \writestatus{editsync}{loading and enabling editor synchronization support} \unprotect % not really needed \ifx\pdfoutput\undefined \donefalse \else\ifcase\pdfoutput \donefalse \else\ifx\pdfsavepos\undefined \donefalse \else \donetrue \fi\fi\fi \chardef \editsyncstate \zerocount \chardef \editsynctracemode \zerocount \newcount \editsynccounter \newwrite \editsyncwrite \def\enableeditsync {\chardef\editsyncstate\plusone} \def\disableeditsync{\chardef\editsyncstate\zerocount} % The following definitions can go into the special drivers, but % for the moment we do it this way. \ifdone \def\dostarteditsync {\immediate\openout\editsyncwrite\jobname.pdfsync \immediate\write\editsyncwrite{\jobname}% \immediate\write\editsyncwrite{version 0}} \def\dostopeditsync {\closeout\editsyncwrite} \def\doeditsyncregisterpage#1{\immediate\write\editsyncwrite{s\space\number#1}} \def\doeditsyncopenfile #1{\immediate\write\editsyncwrite{(\space#1}} \def\doeditsyncclosefile #1{\immediate\write\editsyncwrite{)}} \def\doregistereditsyncnode#1#2#3% tag counter linenumber {\pdfsavepos \immediate\write\editsyncwrite{l\space\number#2\space\number#3}% \expanded{\write\editsyncwrite{p\ifnum#1=\plusone*\fi\space\number#2\space\noexpand\the\pdflastxpos\space\noexpand\the\pdflastypos}}} \else \let\dostarteditsync \relax \let\dostopeditsync \relax \let\doeditsyncregisterpage\gobbleoneargument \let\doeditsyncopenfile \gobbleoneargument \let\doeditsyncclosefile \gobbleoneargument \let\doregistereditsyncnode\gobblethreearguments % These specials could be filtered by a dvitopdf backend and % written to a jobname.pdfsync file. In that case, the x and % y coordinates have to be to be resolved by driver. % \def\doeditsyncregisterpage#1{\special{pdfsync: s\space\number#1}} % \def\doeditsyncopenfile #1{\special{pdfsync: ( #1}} % \def\doeditsyncclosefile #1{\special{pdfsync: )}} % \def\doregistereditsyncnode#1#2#3% % {\special{pdfsync: l the\editsynccounter\space\number#3}% % \special{pdfsync: p\ifnum#1=\plusone*\fi\space\number#2}} \fi \let\editsynctracer\gobbleoneargument \editsynccounter\minusone % counting starts at zero and we increment beforehand \def\registereditsyncnode#1% we assume #1 is one token {\ifcase\editsyncstate \expandafter\gobbleoneargument \else \global\advance\editsynccounter\plusone \doregistereditsyncnode#1\editsynccounter\inputlineno \expandafter\editsynctracer \fi} \def\editsync {\registereditsyncnode\plusone *} \def\editsyncnode{\registereditsyncnode\zerocount} \def\editsynctext{\registereditsyncnode\plusone } \appendtoks \dostarteditsync \to \everystarttext %appendtoks \dostopeditsync \to \everystoptext \appendtoks \doeditsyncregisterpage\realfolio \to \everyshipout \appendtoks \doeditsyncopenfile\readfilename \to \everybeforereadfile \appendtoks \doeditsyncclosefile\readfilename \to \everyafterreadfile \appendtoks \enableeditsync \to \everystarttext \appendtoks \disableeditsync \to \everypagebody \def\editsynctracer#1% {\ifcase\editsynctracemode\else \begingroup \forgetall \disableeditsync \ifcase\editsynctracemode\or % could be done more efficient, box around ifcase \setbox\scratchbox\hbox to \zeropoint{\hss\infofont#1\hss}% 1 \else \setbox\scratchbox\hbox to \zeropoint{\hss\traceboxplacementtrue\boxcursor\hss}% 2/3/4 \fi \smashbox\scratchbox\box\scratchbox \ifcase\editsynctracemode\or\or\or \setbox\scratchbox\hbox to \zeropoint{\hss\raise1.25ex\hbox{\infofont#1}\hss}% 3 \smashbox\scratchbox\box\scratchbox \or \setbox\scratchbox\hbox to \zeropoint{\hss\lower1.25ex\hbox{\infofont#1}\hss}% 4 \smashbox\scratchbox\box\scratchbox \fi \endgroup \fi} % \def\editsynctracer#1% more efficient but unreadable % {\ifcase\editsynctracemode\else % \ifcase\editsyncstate\else % \begingroup % \forgetall % \disableeditsync % \setbox\scratchbox\hbox to \zeropoint % {\hss % \ifcase\editsynctracemode\or % \infofont#1% 1 % \else % \traceboxplacementtrue\boxcursor% 2/3/4 % \fi % \hss}% % \smashbox\scratchbox\box\scratchbox % \setbox\scratchbox\hbox to \zeropoint % {\hss % \ifcase\editsynctracemode\or\or\or % \raise1.25ex\hbox{\infofont#1}% 3 % \or % \lower1.25ex\hbox{\infofont#1}% 4 % \fi % \hss}% % \smashbox\scratchbox\box\scratchbox % \endgroup % \fi % \fi} % beware, adding nodes this way will interfere with the typesetting \appendtoks \editsyncnode p\to \everypar \appendtoks \editsyncnode m\to \everymath \appendtoks \editsyncnode d\to \everydisplay \appendtoks \editsyncnode h\to \everyhbox % For compatibility with 'pdfsync4context' we provide: \let\pdfsyncstart\enableeditsync \let\pdfsyncstop \disablepdfsync \let\pdfsync \editsync \protect \doifnotmode{demo}{\endinput} \chardef\editsynctracemode=3 \starttext \chapter{Test} \processfile{tufte} \startitemize \item first \item second \stopitemize \processfile{tufte} \startlines some local \editsync sync and \editsynctext{here}a marked point some local \editsync sync and \editsyncnode{here}a marked point \stoplines \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-ver.lua0000644000175000017500000014677612130411274024134 0ustar norbertnorbertif not modules then modules = { } end modules ['spac-ver'] = { version = 1.001, comment = "companion to spac-ver.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- we also need to call the spacer for inserts! -- todo: directly set skips -- this code dates from the beginning and is kind of experimental; it -- will be optimized and improved soon -- -- the collapser will be redone with user nodes; also, we might get make -- parskip into an attribute and appy it explicitly thereby getting rid -- of automated injections; eventually i want to get rid of the currently -- still needed tex -> lua -> tex > lua chain (needed because we can have -- expandable settings at the tex end -- todo: strip baselineskip around display math local next, type, tonumber = next, type, tonumber local gmatch, concat = string.gmatch, table.concat local ceil, floor, max, min, round, abs = math.ceil, math.floor, math.max, math.min, math.round, math.abs local texlists, texdimen, texbox = tex.lists, tex.dimen, tex.box local lpegmatch = lpeg.match local unpack = unpack or table.unpack local allocate = utilities.storage.allocate local todimen = string.todimen local formatters = string.formatters local P, C, R, S, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc local nodes, node, trackers, attributes, context = nodes, node, trackers, attributes, context local variables = interfaces.variables local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming -- vertical space handler local trace_vbox_vspacing = false trackers.register("vspacing.vbox", function(v) trace_vbox_vspacing = v end) local trace_page_vspacing = false trackers.register("vspacing.page", function(v) trace_page_vspacing = v end) local trace_page_builder = false trackers.register("builders.page", function(v) trace_page_builder = v end) local trace_collect_vspacing = false trackers.register("vspacing.collect", function(v) trace_collect_vspacing = v end) local trace_vspacing = false trackers.register("vspacing.spacing", function(v) trace_vspacing = v end) local trace_vsnapping = false trackers.register("vspacing.snapping", function(v) trace_vsnapping = v end) local trace_vpacking = false trackers.register("vspacing.packing", function(v) trace_vpacking = v end) local report_vspacing = logs.reporter("vspacing","spacing") local report_collapser = logs.reporter("vspacing","collapsing") local report_snapper = logs.reporter("vspacing","snapping") local report_page_builder = logs.reporter("builders","page") local a_skipcategory = attributes.private('skipcategory') local a_skippenalty = attributes.private('skippenalty') local a_skiporder = attributes.private('skiporder') ----- snap_category = attributes.private('snapcategory') local a_snapmethod = attributes.private('snapmethod') local a_snapvbox = attributes.private('snapvbox') local find_node_tail = node.tail local free_node = node.free local free_node_list = node.flush_list local copy_node = node.copy local traverse_nodes = node.traverse local traverse_nodes_id = node.traverse_id local insert_node_before = node.insert_before local insert_node_after = node.insert_after local remove_node = nodes.remove local count_nodes = nodes.count local nodeidstostring = nodes.idstostring local hpack_node = node.hpack local vpack_node = node.vpack local writable_spec = nodes.writable_spec local listtoutf = nodes.listtoutf local nodepool = nodes.pool local new_penalty = nodepool.penalty local new_kern = nodepool.kern local new_rule = nodepool.rule local new_gluespec = nodepool.gluespec local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local fillcodes = nodes.fillcodes local penalty_code = nodecodes.penalty local kern_code = nodecodes.kern local glue_code = nodecodes.glue local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local whatsit_code = nodecodes.whatsit local userskip_code = skipcodes.userskip local vspacing = builders.vspacing or { } builders.vspacing = vspacing local vspacingdata = vspacing.data or { } vspacing.data = vspacingdata vspacingdata.snapmethods = vspacingdata.snapmethods or { } local snapmethods = vspacingdata.snapmethods --maybe some older code can go storage.register("builders/vspacing/data/snapmethods", snapmethods, "builders.vspacing.data.snapmethods") local default = { maxheight = true, maxdepth = true, strut = true, hfraction = 1, dfraction = 1, } local fractions = { minheight = "hfraction", maxheight = "hfraction", mindepth = "dfraction", maxdepth = "dfraction", top = "tlines", bottom = "blines", } local values = { offset = "offset" } local colonsplitter = lpeg.splitat(":") local function listtohash(str) local t = { } for s in gmatch(str,"[^, ]+") do local key, detail = lpegmatch(colonsplitter,s) local v = variables[key] if v then t[v] = true if detail then local k = fractions[key] if k then detail = tonumber("0" .. detail) if detail then t[k] = detail end else k = values[key] if k then detail = todimen(detail) if detail then t[k] = detail end end end end else detail = tonumber("0" .. key) if detail then t.hfraction, t.dfraction = detail, detail end end end if next(t) then t.hfraction = t.hfraction or 1 t.dfraction = t.dfraction or 1 return t else return default end end function vspacing.definesnapmethod(name,method) local n = #snapmethods + 1 local t = listtohash(method) snapmethods[n] = t t.name, t.specification = name, method context(n) end -- local rule_id = nodecodes.rule -- local vlist_id = nodecodes.vlist -- function nodes.makevtop(n) -- if n.id == vlist_id then -- local list = n.list -- local height = (list and list.id <= rule_id and list.height) or 0 -- n.depth = n.depth - height + n.height -- n.height = height -- end -- end local reference = nodes.reference local function validvbox(parentid,list) if parentid == hlist_code then local id = list.id if id == whatsit_code then -- check for initial par subtype list = list.next if not next then return nil end end local done = nil for n in traverse_nodes(list) do local id = n.id if id == vlist_code or id == hlist_code then if done then return nil else done = n end elseif id == glue_code or id == penalty_code then -- go on else return nil -- whatever end end if done then local id = done.id if id == hlist_code then return validvbox(id,done.list) end end return done -- only one vbox end end local function already_done(parentid,list,a_snapmethod) -- todo: done when only boxes and all snapped -- problem: any snapped vbox ends up in a line if list and parentid == hlist_code then local id = list.id if id == whatsit_code then -- check for initial par subtype list = list.next if not next then return false end end --~ local i = 0 for n in traverse_nodes(list) do local id = n.id --~ i = i + 1 print(i,nodecodes[id],n[a_snapmethod]) if id == hlist_code or id == vlist_code then local a = n[a_snapmethod] if not a then -- return true -- not snapped at all elseif a == 0 then return true -- already snapped end elseif id == glue_code or id == penalty_code then -- whatsit is weak spot -- go on else return false -- whatever end end end return false end -- quite tricky: ceil(-something) => -0 local function ceiled(n) if n < 0 or n < 0.01 then return 0 else return ceil(n) end end local function floored(n) if n < 0 or n < 0.01 then return 0 else return floor(n) end end -- check variables.none etc local function snap_hlist(where,current,method,height,depth) -- method.strut is default local list = current.list local t = trace_vsnapping and { } if t then t[#t+1] = formatters["list content: %s"](nodes.toutf(list)) t[#t+1] = formatters["parent id: %s"](reference(current)) t[#t+1] = formatters["snap method: %s"](method.name) t[#t+1] = formatters["specification: %s"](method.specification) end local snapht, snapdp if method["local"] then -- snapping is done immediately here snapht, snapdp = texdimen.bodyfontstrutheight, texdimen.bodyfontstrutdepth if t then t[#t+1] = formatters["local: snapht %p snapdp %p"](snapht,snapdp) end elseif method["global"] then snapht, snapdp = texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth if t then t[#t+1] = formatters["global: snapht %p snapdp %p"](snapht,snapdp) end else -- maybe autolocal -- snapping might happen later in the otr snapht, snapdp = texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth local lsnapht, lsnapdp = texdimen.bodyfontstrutheight, texdimen.bodyfontstrutdepth if snapht ~= lsnapht and snapdp ~= lsnapdp then snapht, snapdp = lsnapht, lsnapdp end if t then t[#t+1] = formatters["auto: snapht %p snapdp %p"](snapht,snapdp) end end local h, d = height or current.height, depth or current.depth local hr, dr, ch, cd = method.hfraction or 1, method.dfraction or 1, h, d local tlines, blines = method.tlines or 1, method.blines or 1 local done, plusht, plusdp = false, snapht, snapdp local snaphtdp = snapht + snapdp if method.none then plusht, plusdp = 0, 0 if t then t[#t+1] = "none: plusht 0pt plusdp 0pt" end end if method.halfline then -- extra halfline plusht, plusdp = plusht + snaphtdp/2, plusdp + snaphtdp/2 if t then t[#t+1] = formatters["halfline: plusht %p plusdp %p"](plusht,plusdp) end end if method.line then -- extra line plusht, plusdp = plusht + snaphtdp, plusdp + snaphtdp if t then t[#t+1] = formatters["line: plusht %p plusdp %p"](plusht,plusdp) end end if method.first then local thebox = current local id = thebox.id if id == hlist_code then thebox = validvbox(id,thebox.list) id = thebox and thebox.id end if thebox and id == vlist_code then local list, lh, ld = thebox.list for n in traverse_nodes_id(hlist_code,list) do lh, ld = n.height, n.depth break end if lh then local ht, dp = thebox.height, thebox.depth if t then t[#t+1] = formatters["first line: height %p depth %p"](lh,ld) t[#t+1] = formatters["dimensions: height %p depth %p"](ht,dp) end local delta = h - lh ch, cd = lh, delta + d h, d = ch, cd local shifted = hpack_node(current.list) shifted.shift = delta current.list = shifted done = true if t then t[#t+1] = formatters["first: height %p depth %p shift %p"](ch,cd,delta) end elseif t then t[#t+1] = "first: not done, no content" end elseif t then t[#t+1] = "first: not done, no vbox" end elseif method.last then local thebox = current local id = thebox.id if id == hlist_code then thebox = validvbox(id,thebox.list) id = thebox and thebox.id end if thebox and id == vlist_code then local list, lh, ld = thebox.list for n in traverse_nodes_id(hlist_code,list) do lh, ld = n.height, n.depth end if lh then local ht, dp = thebox.height, thebox.depth if t then t[#t+1] = formatters["last line: height %p depth %p" ](lh,ld) t[#t+1] = formatters["dimensions: height %p depth %p"](ht,dp) end local delta = d - ld cd, ch = ld, delta + h h, d = ch, cd local shifted = hpack_node(current.list) shifted.shift = delta current.list = shifted done = true if t then t[#t+1] = formatters["last: height %p depth %p shift %p"](ch,cd,delta) end elseif t then t[#t+1] = "last: not done, no content" end elseif t then t[#t+1] = "last: not done, no vbox" end end if method.minheight then ch = floored((h-hr*snapht)/snaphtdp)*snaphtdp + plusht if t then t[#t+1] = formatters["minheight: %p"](ch) end elseif method.maxheight then ch = ceiled((h-hr*snapht)/snaphtdp)*snaphtdp + plusht if t then t[#t+1] = formatters["maxheight: %p"](ch) end else ch = plusht if t then t[#t+1] = formatters["set height: %p"](ch) end end if method.mindepth then cd = floored((d-dr*snapdp)/snaphtdp)*snaphtdp + plusdp if t then t[#t+1] = formatters["mindepth: %p"](cd) end elseif method.maxdepth then cd = ceiled((d-dr*snapdp)/snaphtdp)*snaphtdp + plusdp if t then t[#t+1] = formatters["maxdepth: %p"](cd) end else cd = plusdp if t then t[#t+1] = formatters["set depth: %p"](cd) end end if method.top then ch = ch + tlines * snaphtdp if t then t[#t+1] = formatters["top height: %p"](ch) end end if method.bottom then cd = cd + blines * snaphtdp if t then t[#t+1] = formatters["bottom depth: %p"](cd) end end local offset = method.offset if offset then -- we need to set the attr if t then t[#t+1] = formatters["before offset: %p (width %p height %p depth %p)"](offset,current.width,current.height,current.depth) end local shifted = hpack_node(current.list) shifted.shift = offset current.list = shifted if t then t[#t+1] = formatters["after offset: %p (width %p height %p depth %p)"](offset,current.width,current.height,current.depth) end shifted[a_snapmethod] = 0 current[a_snapmethod] = 0 end if not height then current.height = ch if t then t[#t+1] = formatters["forced height: %p"](ch) end end if not depth then current.depth = cd if t then t[#t+1] = formatters["forced depth: %p"](cd) end end local lines = (ch+cd)/snaphtdp if t then local original = (h+d)/snaphtdp local whatever = (ch+cd)/(texdimen.globalbodyfontstrutheight + texdimen.globalbodyfontstrutdepth) t[#t+1] = formatters["final lines: %s -> %s (%s)"](original,lines,whatever) t[#t+1] = formatters["final height: %p -> %p"](h,ch) t[#t+1] = formatters["final depth: %p -> %p"](d,cd) end if t then report_snapper("trace: %s type %s\n\t%\n\tt",where,nodecodes[current.id],t) end return h, d, ch, cd, lines end local function snap_topskip(current,method) local spec = current.spec local w = spec.width local wd = w if spec.writable then spec.width, wd = 0, 0 end return w, wd end local categories = allocate { [0] = 'discard', [1] = 'largest', [2] = 'force' , [3] = 'penalty', [4] = 'add' , [5] = 'disable', [6] = 'nowhite', [7] = 'goback', [8] = 'together' } vspacing.categories = categories function vspacing.tocategories(str) local t = { } for s in gmatch(str,"[^, ]") do local n = tonumber(s) if n then t[categories[n]] = true else t[b] = true end end return t end function vspacing.tocategory(str) if type(str) == "string" then return set.tonumber(vspacing.tocategories(str)) else return set.tonumber({ [categories[str]] = true }) end end vspacingdata.map = vspacingdata.map or { } -- allocate ? vspacingdata.skip = vspacingdata.skip or { } -- allocate ? storage.register("builders/vspacing/data/map", vspacingdata.map, "builders.vspacing.data.map") storage.register("builders/vspacing/data/skip", vspacingdata.skip, "builders.vspacing.data.skip") do -- todo: interface.variables vspacing.fixed = false local map = vspacingdata.map local skip = vspacingdata.skip local multiplier = C(S("+-")^0 * R("09")^1) * P("*") local category = P(":") * C(P(1)^1) local keyword = C((1-category)^1) local splitter = (multiplier + Cc(1)) * keyword * (category + Cc(false)) local k_fixed, k_flexible, k_category, k_penalty, k_order = variables.fixed, variables.flexible, "category", "penalty", "order" -- This will change: just node.write and we can store the values in skips which -- then obeys grouping local fixedblankskip = context.fixedblankskip local flexibleblankskip = context.flexibleblankskip local setblankcategory = context.setblankcategory local setblankorder = context.setblankorder local setblankpenalty = context.setblankpenalty local setblankhandling = context.setblankhandling local flushblankhandling = context.flushblankhandling local addpredefinedblankskip = context.addpredefinedblankskip local addaskedblankskip = context.addaskedblankskip local function analyze(str,oldcategory) -- we could use shorter names for s in gmatch(str,"([^ ,]+)") do local amount, keyword, detail = lpegmatch(splitter,s) -- the comma splitter can be merged if not keyword then report_vspacing("unknown directive %a",s) else local mk = map[keyword] if mk then category = analyze(mk,category) elseif keyword == k_fixed then fixedblankskip() elseif keyword == k_flexible then flexibleblankskip() elseif keyword == k_category then local category = tonumber(detail) if category then setblankcategory(category) if category ~= oldcategory then flushblankhandling() oldcategory = category end end elseif keyword == k_order and detail then local order = tonumber(detail) if order then setblankorder(order) end elseif keyword == k_penalty and detail then local penalty = tonumber(detail) if penalty then setblankpenalty(penalty) end else amount = tonumber(amount) or 1 local sk = skip[keyword] if sk then addpredefinedblankskip(amount,keyword) else -- no check addaskedblankskip(amount,keyword) end end end end return category end local pushlogger = context.pushlogger local startblankhandling = context.startblankhandling local stopblankhandling = context.stopblankhandling local poplogger = context.poplogger function vspacing.analyze(str) if trace_vspacing then pushlogger(report_vspacing) startblankhandling() analyze(str,1) stopblankhandling() poplogger() else startblankhandling() analyze(str,1) stopblankhandling() end end -- function vspacing.setmap(from,to) map[from] = to end function vspacing.setskip(key,value,grid) if value ~= "" then if grid == "" then grid = value end skip[key] = { value, grid } end end end -- implementation local trace_list, tracing_info, before, after = { }, false, "", "" local function nodes_to_string(head) local current, t = head, { } while current do local id = current.id local ty = nodecodes[id] if id == penalty_code then t[#t+1] = formatters["%s:%s"](ty,current.penalty) elseif id == glue_code then -- or id == kern_code then -- to be tested t[#t+1] = formatters["%s:%p"](ty,current) elseif id == kern_code then t[#t+1] = formatters["%s:%p"](ty,current.kern) else t[#t+1] = ty end current = current.next end return concat(t," + ") end local function reset_tracing(head) trace_list, tracing_info, before, after = { }, false, nodes_to_string(head), "" end local function trace_skip(str,sc,so,sp,data) trace_list[#trace_list+1] = { "skip", formatters["%s | %p | category %s | order %s | penalty %s"](str, data, sc or "-", so or "-", sp or "-") } tracing_info = true end local function trace_natural(str,data) trace_list[#trace_list+1] = { "skip", formatters["%s | %p"](str, data) } tracing_info = true end local function trace_info(message, where, what) trace_list[#trace_list+1] = { "info", formatters["%s: %s/%s"](message,where,what) } end local function trace_node(what) local nt = nodecodes[what.id] local tl = trace_list[#trace_list] if tl and tl[1] == "node" then trace_list[#trace_list] = { "node", formatters["%s + %s"](tl[2],nt) } else trace_list[#trace_list+1] = { "node", nt } end end local function trace_done(str,data) if data.id == penalty_code then trace_list[#trace_list+1] = { "penalty", formatters["%s | %s"](str,data.penalty) } else trace_list[#trace_list+1] = { "glue", formatters["%s | %p"](str,data) } end tracing_info = true end local function show_tracing(head) if tracing_info then after = nodes_to_string(head) for i=1,#trace_list do local tag, text = unpack(trace_list[i]) if tag == "info" then report_collapser(text) else report_collapser(" %s: %s",tag,text) end end report_collapser("before: %s",before) report_collapser("after : %s",after) end end -- alignment box begin_of_par vmode_par hmode_par insert penalty before_display after_display local skipcodes = nodes.skipcodes local userskip_code = skipcodes.userskip local lineskip_code = skipcodes.lineskip local baselineskip_code = skipcodes.baselineskip local parskip_code = skipcodes.parskip local abovedisplayskip_code = skipcodes.abovedisplayskip local belowdisplayskip_code = skipcodes.belowdisplayskip local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip local topskip_code = skipcodes.topskip local splittopskip_code = skipcodes.splittopskip local free_glue_node = free_node local discard, largest, force, penalty, add, disable, nowhite, goback, together = 0, 1, 2, 3, 4, 5, 6, 7, 8 -- local function free_glue_node(n) -- -- free_node(n.spec) -- print("before",n) -- logs.flush() -- free_node(n) -- print("after") -- logs.flush() -- end function vspacing.snapbox(n,how) local sv = snapmethods[how] if sv then local box = texbox[n] local list = box.list if list then local s = list[a_snapmethod] if s == 0 then if trace_vsnapping then -- report_snapper("box list not snapped, already done") end else local ht, dp = box.height, box.depth if false then -- todo: already_done -- assume that the box is already snapped if trace_vsnapping then report_snapper("box list already snapped at (%p,%p): %s", ht,dp,listtoutf(list)) end else local h, d, ch, cd, lines = snap_hlist("box",box,sv,ht,dp) box.height, box.depth = ch, cd if trace_vsnapping then report_snapper("box list snapped from (%p,%p) to (%p,%p) using method %a (%s) for %a (%s lines): %s", h,d,ch,cd,sv.name,sv.specification,"direct",lines,listtoutf(list)) end box[a_snapmethod] = 0 -- list[a_snapmethod] = 0 -- yes or no end end end end end local function forced_skip(head,current,width,where,trace) if where == "after" then head, current = insert_node_after(head,current,new_rule(0,0,0)) head, current = insert_node_after(head,current,new_kern(width)) head, current = insert_node_after(head,current,new_rule(0,0,0)) else local c = current head, current = insert_node_before(head,current,new_rule(0,0,0)) head, current = insert_node_before(head,current,new_kern(width)) head, current = insert_node_before(head,current,new_rule(0,0,0)) current = c end if trace then report_vspacing("inserting forced skip of %p",width) end return head, current end -- penalty only works well when before skip local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also pass tail if trace then reset_tracing(head) end local current, oldhead = head, head local glue_order, glue_data, force_glue = 0, nil, false local penalty_order, penalty_data, natural_penalty = 0, nil, nil local parskip, ignore_parskip, ignore_following, ignore_whitespace, keep_together = nil, false, false, false, false -- -- todo: keep_together: between headers -- local function flush(why) if penalty_data then local p = new_penalty(penalty_data) if trace then trace_done("flushed due to " .. why,p) end head = insert_node_before(head,current,p) end if glue_data then if force_glue then if trace then trace_done("flushed due to " .. why,glue_data) end head = forced_skip(head,current,glue_data.spec.width,"before",trace) free_glue_node(glue_data) elseif glue_data.spec.writable then if trace then trace_done("flushed due to " .. why,glue_data) end head = insert_node_before(head,current,glue_data) else free_glue_node(glue_data) end end if trace then trace_node(current) end glue_order, glue_data, force_glue = 0, nil, false penalty_order, penalty_data, natural_penalty = 0, nil, nil parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false end if trace_vsnapping then report_snapper("global ht/dp = %p/%p, local ht/dp = %p/%p", texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth, texdimen.bodyfontstrutheight, texdimen.bodyfontstrutdepth) end if trace then trace_info("start analyzing",where,what) end while current do local id = current.id if id == hlist_code or id == vlist_code then -- needs checking, why so many calls if snap then local list = current.list local s = current[a_snapmethod] if not s then -- if trace_vsnapping then -- report_snapper("mvl list not snapped") -- end elseif s == 0 then if trace_vsnapping then report_snapper("mvl %a not snapped, already done: %s",nodecodes[id],listtoutf(list)) end else local sv = snapmethods[s] if sv then -- check if already snapped if list and already_done(id,list,a_snapmethod) then local ht, dp = current.height, current.depth -- assume that the box is already snapped if trace_vsnapping then report_snapper("mvl list already snapped at (%p,%p): %s",ht,dp,listtoutf(list)) end else local h, d, ch, cd, lines = snap_hlist("mvl",current,sv) if trace_vsnapping then report_snapper("mvl %a snapped from (%p,%p) to (%p,%p) using method %a (%s) for %a (%s lines): %s", nodecodes[id],h,d,ch,cd,sv.name,sv.specification,where,lines,listtoutf(list)) end end elseif trace_vsnapping then report_snapper("mvl %a not snapped due to unknown snap specification: %s",nodecodes[id],listtoutf(list)) end current[a_snapmethod] = 0 end else -- end -- tex.prevdepth = 0 flush("list") current = current.next elseif id == penalty_code then -- natural_penalty = current.penalty -- if trace then trace_done("removed penalty",current) end -- head, current = remove_node(head, current, true) current = current.next elseif id == kern_code then if snap and trace_vsnapping and current.kern ~= 0 then report_snapper("kern of %p kept",current.kern) end flush("kern") current = current.next elseif id == glue_code then local subtype = current.subtype if subtype == userskip_code then local sc = current[a_skipcategory] -- has no default, no unset (yet) local so = current[a_skiporder] or 1 -- has 1 default, no unset (yet) local sp = current[a_skippenalty] -- has no default, no unset (yet) if sp and sc == penalty then if not penalty_data then penalty_data = sp elseif penalty_order < so then penalty_order, penalty_data = so, sp elseif penalty_order == so and sp > penalty_data then penalty_data = sp end if trace then trace_skip("penalty in skip",sc,so,sp,current) end head, current = remove_node(head, current, true) elseif not sc then -- if not sc then if glue_data then if trace then trace_done("flush",glue_data) end head = insert_node_before(head,current,glue_data) if trace then trace_natural("natural",current) end current = current.next else -- not look back across head local previous = current.prev if previous and previous.id == glue_code and previous.subtype == userskip_code then local ps = previous.spec if ps.writable then local cs = current.spec if cs.writable and ps.stretch_order == 0 and ps.shrink_order == 0 and cs.stretch_order == 0 and cs.shrink_order == 0 then local pw, pp, pm = ps.width, ps.stretch, ps.shrink local cw, cp, cm = cs.width, cs.stretch, cs.shrink -- ps = writable_spec(previous) -- no writable needed here -- ps.width, ps.stretch, ps.shrink = pw + cw, pp + cp, pm + cm previous.spec = new_gluespec(pw + cw, pp + cp, pm + cm) -- else topskip can disappear if trace then trace_natural("removed",current) end head, current = remove_node(head, current, true) -- current = previous if trace then trace_natural("collapsed",previous) end -- current = current.next else if trace then trace_natural("filler",current) end current = current.next end else if trace then trace_natural("natural (no prev spec)",current) end current = current.next end else if trace then trace_natural("natural (no prev)",current) end current = current.next end end glue_order, glue_data = 0, nil elseif sc == disable then ignore_following = true if trace then trace_skip("disable",sc,so,sp,current) end head, current = remove_node(head, current, true) elseif sc == together then keep_together = true if trace then trace_skip("together",sc,so,sp,current) end head, current = remove_node(head, current, true) elseif sc == nowhite then ignore_whitespace = true head, current = remove_node(head, current, true) elseif sc == discard then if trace then trace_skip("discard",sc,so,sp,current) end head, current = remove_node(head, current, true) elseif ignore_following then if trace then trace_skip("disabled",sc,so,sp,current) end head, current = remove_node(head, current, true) elseif not glue_data then if trace then trace_skip("assign",sc,so,sp,current) end glue_order = so head, current, glue_data = remove_node(head, current) elseif glue_order < so then if trace then trace_skip("force",sc,so,sp,current) end glue_order = so free_glue_node(glue_data) head, current, glue_data = remove_node(head, current) elseif glue_order == so then -- is now exclusive, maybe support goback as combi, else why a set if sc == largest then local cs, gs = current.spec, glue_data.spec local cw, gw = cs.width, gs.width if cw > gw then if trace then trace_skip("largest",sc,so,sp,current) end free_glue_node(glue_data) -- also free spec head, current, glue_data = remove_node(head, current) else if trace then trace_skip("remove smallest",sc,so,sp,current) end head, current = remove_node(head, current, true) end elseif sc == goback then if trace then trace_skip("goback",sc,so,sp,current) end free_glue_node(glue_data) -- also free spec head, current, glue_data = remove_node(head, current) elseif sc == force then -- last one counts, some day we can provide an accumulator and largest etc -- but not now if trace then trace_skip("force",sc,so,sp,current) end free_glue_node(glue_data) -- also free spec head, current, glue_data = remove_node(head, current) elseif sc == penalty then if trace then trace_skip("penalty",sc,so,sp,current) end free_glue_node(glue_data) -- also free spec glue_data = nil head, current = remove_node(head, current, true) elseif sc == add then if trace then trace_skip("add",sc,so,sp,current) end -- local old, new = glue_data.spec, current.spec local old, new = writable_spec(glue_data), current.spec old.width = old.width + new.width old.stretch = old.stretch + new.stretch old.shrink = old.shrink + new.shrink -- toto: order head, current = remove_node(head, current, true) else if trace then trace_skip("unknown",sc,so,sp,current) end head, current = remove_node(head, current, true) end else if trace then trace_skip("unknown",sc,so,sp,current) end head, current = remove_node(head, current, true) end if sc == force then force_glue = true end elseif subtype == lineskip_code then if snap then local s = current[a_snapmethod] if s and s ~= 0 then current[a_snapmethod] = 0 if current.spec.writable then local spec = writable_spec(current) spec.width = 0 if trace_vsnapping then report_snapper("lineskip set to zero") end end else if trace then trace_skip("lineskip",sc,so,sp,current) end flush("lineskip") end else if trace then trace_skip("lineskip",sc,so,sp,current) end flush("lineskip") end current = current.next elseif subtype == baselineskip_code then if snap then local s = current[a_snapmethod] if s and s ~= 0 then current[a_snapmethod] = 0 if current.spec.writable then local spec = writable_spec(current) spec.width = 0 if trace_vsnapping then report_snapper("baselineskip set to zero") end end else if trace then trace_skip("baselineskip",sc,so,sp,current) end flush("baselineskip") end else if trace then trace_skip("baselineskip",sc,so,sp,current) end flush("baselineskip") end current = current.next elseif subtype == parskip_code then -- parskip always comes later if ignore_whitespace then if trace then trace_natural("ignored parskip",current) end head, current = remove_node(head, current, true) elseif glue_data then local ps, gs = current.spec, glue_data.spec if ps.writable and gs.writable and ps.width > gs.width then glue_data.spec = copy_node(ps) if trace then trace_natural("taking parskip",current) end else if trace then trace_natural("removed parskip",current) end end head, current = remove_node(head, current, true) else if trace then trace_natural("honored parskip",current) end head, current, glue_data = remove_node(head, current) end elseif subtype == topskip_code or subtype == splittopskip_code then if snap then local s = current[a_snapmethod] if s and s ~= 0 then current[a_snapmethod] = 0 local sv = snapmethods[s] local w, cw = snap_topskip(current,sv) if trace_vsnapping then report_snapper("topskip snapped from %p to %p for %a",w,cw,where) end else if trace then trace_skip("topskip",sc,so,sp,current) end flush("topskip") end else if trace then trace_skip("topskip",sc,so,sp,current) end flush("topskip") end current = current.next elseif subtype == abovedisplayskip_code then -- if trace then trace_skip("above display skip (normal)",sc,so,sp,current) end flush("above display skip (normal)") current = current.next -- elseif subtype == belowdisplayskip_code then -- if trace then trace_skip("below display skip (normal)",sc,so,sp,current) end flush("below display skip (normal)") current = current.next -- elseif subtype == abovedisplayshortskip_code then -- if trace then trace_skip("above display skip (short)",sc,so,sp,current) end flush("above display skip (short)") current = current.next -- elseif subtype == belowdisplayshortskip_code then -- if trace then trace_skip("below display skip (short)",sc,so,sp,current) end flush("below display skip (short)") current = current.next -- else -- other glue if snap and trace_vsnapping and current.spec.writable and current.spec.width ~= 0 then report_snapper("glue %p of type %a kept",current.spec.width,skipcodes[subtype]) --~ current.spec.width = 0 end if trace then trace_skip(formatted["glue of type %a"](subtype),sc,so,sp,current) end flush("some glue") current = current.next end else flush("something else") current = current.next end end if trace then trace_info("stop analyzing",where,what) end -- if natural_penalty and (not penalty_data or natural_penalty > penalty_data) then -- penalty_data = natural_penalty -- end if trace and (glue_data or penalty_data) then trace_info("start flushing",where,what) end local tail if penalty_data then tail = find_node_tail(head) local p = new_penalty(penalty_data) if trace then trace_done("result",p) end head, tail = insert_node_after(head,tail,p) end if glue_data then if not tail then tail = find_node_tail(head) end if trace then trace_done("result",glue_data) end if force_glue then head, tail = forced_skip(head,tail,glue_data.spec.width,"after",trace) free_glue_node(glue_data) else head, tail = insert_node_after(head,tail,glue_data) end end if trace then if glue_data or penalty_data then trace_info("stop flushing",where,what) end show_tracing(head) if oldhead ~= head then trace_info("head has been changed from %a to %a",nodecodes[oldhead.id],nodecodes[head.id]) end end return head, true end -- alignment after_output end box new_graf vmode_par hmode_par insert penalty before_display after_display -- \par -> vmode_par -- -- status.best_page_break -- tex.lists.best_page_break -- tex.lists.best_size (natural size to best_page_break) -- tex.lists.least_page_cost (badness of best_page_break) -- tex.lists.page_head -- tex.lists.contrib_head local stackhead, stacktail, stackhack = nil, nil, false local function report(message,lst) report_vspacing(message,count_nodes(lst,true),nodeidstostring(lst)) end function vspacing.pagehandler(newhead,where) -- local newhead = texlists.contrib_head if newhead then local newtail = find_node_tail(newhead) -- best pass that tail, known anyway local flush = false stackhack = true -- todo: only when grid snapping once enabled for n in traverse_nodes(newhead) do -- we could just look for glue nodes local id = n.id if id ~= glue_code then flush = true elseif n.subtype == userskip_code then if n[a_skipcategory] then stackhack = true else flush = true end else -- tricky end end if flush then if stackhead then if trace_collect_vspacing then report("appending %s nodes to stack (final): %s",newhead) end stacktail.next = newhead newhead.prev = stacktail newhead = stackhead stackhead, stacktail = nil, nil end if stackhack then stackhack = false if trace_collect_vspacing then report("processing %s nodes: %s",newhead) end --~ texlists.contrib_head = collapser(newhead,"page",where,trace_page_vspacing,true,a_snapmethod) newhead = collapser(newhead,"page",where,trace_page_vspacing,true,a_snapmethod) else if trace_collect_vspacing then report("flushing %s nodes: %s",newhead) end --~ texlists.contrib_head = newhead end else if stackhead then if trace_collect_vspacing then report("appending %s nodes to stack (intermediate): %s",newhead) end stacktail.next = newhead newhead.prev = stacktail else if trace_collect_vspacing then report("storing %s nodes in stack (initial): %s",newhead) end stackhead = newhead end stacktail = newtail -- texlists.contrib_head = nil newhead = nil end end return newhead end local ignore = table.tohash { "split_keep", "split_off", -- "vbox", } function vspacing.vboxhandler(head,where) if head and not ignore[where] and head.next then -- starttiming(vspacing) head = collapser(head,"vbox",where,trace_vbox_vspacing,true,a_snapvbox) -- todo: local snapper -- stoptiming(vspacing) end return head end function vspacing.collapsevbox(n) -- for boxes but using global a_snapmethod local list = texbox[n].list if list then -- starttiming(vspacing) texbox[n].list = vpack_node(collapser(list,"snapper","vbox",trace_vbox_vspacing,true,a_snapmethod)) -- stoptiming(vspacing) end end -- We will split this module so a few locals are repeated. Also this will be -- rewritten. nodes.builders = nodes.builder or { } local builders = nodes.builders local actions = nodes.tasks.actions("vboxbuilders") function builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction) local done = false if head then starttiming(builders) if trace_vpacking then local before = nodes.count(head) head, done = actions(head,groupcode,size,packtype,maxdepth,direction) local after = nodes.count(head) if done then nodes.processors.tracer("vpack","changed",head,groupcode,before,after,true) else nodes.processors.tracer("vpack","unchanged",head,groupcode,before,after,true) end else head, done = actions(head,groupcode) end stoptiming(builders) end return head, done end -- This one is special in the sense that it has no head and we operate on the mlv. Also, -- we need to do the vspacing last as it removes items from the mvl. local actions = nodes.tasks.actions("mvlbuilders") local function report(groupcode,head) report_page_builder("trigger: %s",groupcode) report_page_builder(" vsize : %p",tex.vsize) report_page_builder(" pagegoal : %p",tex.pagegoal) report_page_builder(" pagetotal: %p",tex.pagetotal) report_page_builder(" list : %s",head and nodeidstostring(head) or "") end function builders.buildpage_filter(groupcode) local head, done = texlists.contrib_head, false -- if head and head.next and head.next.id == hlist_code and head.next.width == 1 then -- report_page_builder("trigger otr calculations") -- free_node_list(head) -- head = nil -- end if head then starttiming(builders) if trace_page_builder then report(groupcode,head) end head, done = actions(head,groupcode) stoptiming(builders) -- -- doesn't work here (not passed on?) -- tex.pagegoal = tex.vsize - tex.dimen.d_page_floats_inserted_top - tex.dimen.d_page_floats_inserted_bottom texlists.contrib_head = head return done and head or true else if trace_page_builder then report(groupcode) end return nil, false end end callbacks.register('vpack_filter', builders.vpack_filter, "vertical spacing etc") callbacks.register('buildpage_filter', builders.buildpage_filter, "vertical spacing etc (mvl)") statistics.register("v-node processing time", function() return statistics.elapsedseconds(builders) end) -- interface commands.vspacing = vspacing.analyze commands.vspacingsetamount = vspacing.setskip commands.vspacingdefine = vspacing.setmap commands.vspacingcollapse = vspacing.collapsevbox commands.vspacingsnap = vspacing.snapbox context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-syn.lua0000644000175000017500000001263312130411274024156 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-syn'] = { version = 1.001, comment = "companion to str-syn.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, type = next, type local format = string.format local allocate = utilities.storage.allocate -- interface to tex end local structures = structures local synonyms = structures.synonyms local tags = structures.tags local collected = allocate() local tobesaved = allocate() synonyms.collected = collected synonyms.tobesaved = tobesaved local function initializer() collected = synonyms.collected tobesaved = synonyms.tobesaved end local function finalizer() for entry, data in next, tobesaved do data.hash = nil end end job.register('structures.synonyms.collected', tobesaved, initializer, finalizer) -- todo: allocate becomes metatable local function allocate(class) local d = tobesaved[class] if not d then d = { metadata = { language = 'en', sorted = false, class = class }, entries = { }, hash = { } } tobesaved[class] = d end return d end function synonyms.define(class,kind) local data = allocate(class) data.metadata.kind = kind end function synonyms.register(class,kind,spec) local data = allocate(class) data.metadata.kind = kind -- runtime, not saved in format (yet) if not data.hash[spec.definition.tag or ""] then data.entries[#data.entries+1] = spec data.hash[spec.definition.tag or ""] = spec end end function synonyms.registerused(class,tag) local data = allocate(class) local dht = data.hash[tag] if dht then dht.definition.used = true end end function synonyms.synonym(class,tag) local data = allocate(class).hash local d = data[tag] if d then local de = d.definition de.used = true context(de.synonym) end end function synonyms.meaning(class,tag) local data = allocate(class).hash local d = data[tag] if d then local de = d.definition de.used = true context(de.meaning) end end synonyms.compare = sorters.comparers.basic -- (a,b) function synonyms.filter(data,options) local result = { } local entries = data.entries local all = options and options.criterium == interfaces.variables.all for i=1,#entries do local entry = entries[i] if all or entry.definition.used then result[#result+1] = entry end end data.result = result end function synonyms.prepare(data) local strip = sorters.strip local splitter = sorters.splitters.utf local result = data.result if result then for i=1, #result do local r = result[i] local rd = r.definition if rd then local rt = rd.tag local sortkey = (rt and rt ~= "" and rt) or rd.synonym r.split = splitter(strip(sortkey)) end end end end function synonyms.sort(data,options) sorters.sort(data.result,synonyms.compare) end function synonyms.finalize(data,options) local result = data.result data.metadata.nofsorted = #result local split = { } for k=1,#result do local v = result[k] local entry, tag = sorters.firstofsplit(v) local s = split[entry] -- keeps track of change if not s then s = { tag = tag, data = { } } split[entry] = s end s.data[#s.data+1] = v end data.result = split end -- for now, maybe at some point we will do a multipass or so -- maybe pass the settings differently function synonyms.flush(data,options) local kind = data.metadata.kind -- hack, will be done better -- context[format("\\start%soutput",kind)]() local result = data.result local sorted = table.sortedkeys(result) for k=1,#sorted do local letter = sorted[k] local sublist = result[letter] local data = sublist.data -- context[format("\\start%ssection",kind)](sublist.tag) for d=1,#data do local entry = data[d].definition -- context[format("\\%sentry",kind)](d,entry.tag,entry.synonym,entry.meaning or "") context("\\%sentry{%s}{%s}{%s}{%s}",kind,d,entry.tag,entry.synonym,entry.meaning or "") end -- context[format("\\stop%ssection",kind)]() end -- context[format("\\stop%soutput",kind)]() data.result = nil data.metadata.sorted = false end function synonyms.analyzed(class,options) local data = synonyms.collected[class] if data and data.entries then options = options or { } sorters.setlanguage(options.language) synonyms.filter(data,options) -- filters entries to result synonyms.prepare(data,options) -- adds split table parallel to list table synonyms.sort(data,options) -- sorts entries in result synonyms.finalize(data,options) -- do things with data.entries data.metadata.sorted = true end return data and data.metadata.sorted and data.result and next(data.result) end function synonyms.process(class,options) if synonyms.analyzed(class,options) then synonyms.flush(synonyms.collected[class],options) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frd.mkii0000644000175000017500000000565011754241457024256 0ustar norbertnorbert%D \module %D [ file=lang-frd, %D version=2004.01.15, %D title=\CONTEXT\ Language Macros, %D subtitle=Language Frequency Table Data, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is expewrimental work! % http://www.onzetaal.nl/advies/letterfreq.html \startcharactertable[nl] \charfreq a 7.47 \charfreq b 1.58 \charfreq c 1.24 \charfreq d 5.93 \charfreq e 18.91 \charfreq f .81 \charfreq g 3.4 \charfreq h 2.38 \charfreq i 6.5 \charfreq j 1.46 \charfreq k 2.25 \charfreq l 3.57 \charfreq m 2.21 \charfreq n 10.03 \charfreq o 6.06 \charfreq p 1.57 \charfreq q .009 \charfreq r 6.41 \charfreq s 3.73 \charfreq t 6.79 \charfreq u 1.99 \charfreq v 2.85 \charfreq w 1.52 \charfreq x .04 \charfreq y .035 \charfreq z 1.39 \stopcharactertable % http://caislab.icu.ac.kr/course/2001/spring/ice605/down/010306.pdf % \startcharactertable[en] % \charfreq a 8.2 % \charfreq b 1.5 % \charfreq c 2.8 % \charfreq d 4.3 % \charfreq e 12.7 % \charfreq f 2.2 % \charfreq g 2 % \charfreq h 6.1 % \charfreq i 7 % \charfreq j .2 % \charfreq k .8 % \charfreq l 4 % \charfreq m 2.4 % \charfreq n 6.7 % \charfreq o 7.5 % \charfreq p 1.9 % \charfreq q .1 % \charfreq r 6 % \charfreq s 6.3 % \charfreq t 9.1 % \charfreq u 2.8 % \charfreq v 1 % \charfreq w 2.3 % \charfreq x .1 % \charfreq y 2 % \charfreq z .1 % \stopcharactertable % http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm \startcharactertable[en] \charfreq a 8.04 \charfreq b 1.54 \charfreq c 3.06 \charfreq d 3.99 \charfreq e 12.51 \charfreq f 2.3 \charfreq g 1.96 \charfreq h 5.49 \charfreq i 7.26 \charfreq j .16 \charfreq k .67 \charfreq l 4.14 \charfreq m 2.53 \charfreq n 7.09 \charfreq o 7.6 \charfreq p 2 \charfreq q .11 \charfreq r 6.12 \charfreq s 6.54 \charfreq t 9.25 \charfreq u 2.71 \charfreq v .99 \charfreq w 1.92 \charfreq x .19 \charfreq y 1.73 \charfreq z .09 \stopcharactertable % http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm \startcharactertable[de] \charfreq a 6.47 \charfreq b 1.93 \charfreq c 2.68 \charfreq d 4.83 \charfreq e 17.48 \charfreq f 1.65 \charfreq g 3.06 \charfreq h 4.23 \charfreq i 7.73 \charfreq j .27 \charfreq k 1.46 \charfreq l 3.49 \charfreq m 2.58 \charfreq n 9.84 \charfreq o 2.98 \charfreq p .96 \charfreq q .02 \charfreq r 7.54 \charfreq s 6.83 \charfreq t 6.13 \charfreq u 4.17 \charfreq v .94 \charfreq w 1.48 \charfreq x .04 \charfreq y .08 \charfreq z 1.14 \stopcharactertable \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-02.mkii0000644000175000017500000000352711754241457024042 0ustar norbertnorbert%D \module %D [ file=x-res-02, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Inclusion (I), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 enables non||\ConTeXt\ users to access the %D database. For this, you need to run %D %D \starttyping %D texexec --pdf --use=fig-fake yourfile.xml %D \stoptyping %D %D The resulting file, \type {yourfile.fig}, can be loaded %D in the normal way. The figures can be accessed with: %D %D \starttyping %D \getfigurefile{label} %D \getfigurepage{label} %D \stoptyping %D %D A a bonus, the following macro is defined: %D %D \starttyping %D \includefigurefile width 10cm {label} %D \stoptyping \usemodule[res-00] \doifnothing {\jobfullname} {\end} \doiffileelse {\jobfullname} {} {\end} \defineXMLenvironment [rl:figurelibrary] \StartLibrary \StopLibrary \defineXMLenvironment [rl:library] \StartLibrary \StopLibrary \defineXMLenvironment [rl:figure] \StartFigure \StopFigure \def\StartLibrary {\immediate\openout \scratchwrite=\jobfilename.fig \immediate\write\scratchwrite{\string\input\space x-fig-03.tex \string\relax} \immediate\write\scratchwrite{}} \def\StopLibrary {\immediate\write\scratchwrite{} \immediate\write\scratchwrite{\string\endinput} \immediate\closeout\scratchwrite} \def\StartFigure {\bgroup} \def\StopFigure {\doglobal\increment\CurrentPage \immediate\write\scratchwrite {\string\setfiguredata\space {\XMLpop{rl:label}} {\jobfilename} {\CurrentPage}} \egroup} \doglobal\newcounter\CurrentPage \starttext \processXMLfilegrouped{\jobfullname} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/data-crl.lua0000644000175000017500000000327111571377075024103 0ustar norbertnorbertif not modules then modules = { } end modules ['data-crl'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this one is replaced by data-sch.lua -- local gsub = string.gsub local resolvers = resolvers local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders resolvers.curl = resolvers.curl or { } local curl = resolvers.curl local cached = { } local function runcurl(specification) local original = specification.original -- local scheme = specification.scheme local cleanname = gsub(original,"[^%a%d%.]+","-") local cachename = caches.setfirstwritablefile(cleanname,"curl") if not cached[original] then if not io.exists(cachename) then cached[original] = cachename local command = "curl --silent --create-dirs --output " .. cachename .. " " .. original os.spawn(command) end if io.exists(cachename) then cached[original] = cachename else cached[original] = "" end end return cached[original] end -- old code: we could be cleaner using specification (see schemes) local function finder(specification,filetype) return resolvers.methodhandler("finders",runcurl(specification),filetype) end local opener = openers.file local loader = loaders.file local function install(scheme) finders[scheme] = finder openers[scheme] = opener loaders[scheme] = loader end resolvers.curl.install = install install('http') install('https') install('ftp') context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ini.lua0000644000175000017500000000200512130411274024107 0ustar norbertnorbertif not modules then modules = { } end modules ['font-ini'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

Not much is happening here.

--ldx]]-- local allocate = utilities.storage.allocate local report_defining = logs.reporter("fonts","defining") fonts = fonts or { } local fonts = fonts fonts.hashes = { identifiers = allocate() } fonts.tables = fonts.tables or { } fonts.helpers = fonts.helpers or { } fonts.tracers = fonts.tracers or { } -- for the moment till we have move to moduledata fonts.specifiers = fonts.specifiers or { } -- in format ! fonts.analyzers = { } -- not needed here fonts.readers = { } fonts.definers = { methods = { } } fonts.loggers = { register = function() end } fontloader.totable = fontloader.to_table context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mod-02.mkiv0000644000175000017500000000106712130411274024016 0ustar norbertnorbert%D \module %D [ file=s-mod-02, %D version=very-old, %D title=\CONTEXT\ Style File, %D subtitle=Documentation Screen Environment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startmode[nocode] % \definieerbuffer[definition] % ignore \def\startdefinition#1\stopdefinition{} \stopmode \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-ro.mkii0000644000175000017500000000102711754241457024137 0ustar norbertnorbert%D \module %D [ file=cont-ro, %D version=2000.01.09, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Romanian Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {romanian} \def\defaultlanguagetag{ro} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-pag.mkiv0000644000175000017500000001223711754241457024273 0ustar norbertnorbert%D \module %D [ file=spac-pag, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Pages, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Pages} \unprotect %D The code here has evolved over time and might not be the best %D around. Maybe much will be gone a some point. \installcorenamespace {alignswitch} \letvalue{\??alignswitch\v!left }\zerocount \letvalue{\??alignswitch\v!middle}\plusone \letvalue{\??alignswitch\v!right }\plustwo \def\setalignmentswitch#1% {\chardef\alignmentswitch\csname\??alignswitch\ifcsname\??alignswitch#1\endcsname#1\else\v!left\fi\endcsname} \newif \ifpagestatemismatch \newcount \realpagestateno \newconstant\frozenpagestate \def\dotrackpagestate#1#2% {\ifdoublesided \ifinpagebody \else \doforcedtrackpagestate{#1}{#2}% \fi \fi} \def\doforcedtrackpagestate#1#2% {\ifcase\frozenpagestate \global\advance#2\plusone \setpagestate[#1][\number#2]% \fi} \let\m_spac_pagestates_realpage\empty \newconditional\c_spac_pagestates_found \unexpanded\def\docheckpagestate#1#2% {\ifcase\frozenpagestate \setpagestaterealpageno{#1}{\number#2}% \fi} \unexpanded\def\doifrightpagestateelse#1#2% not expandable ! {\ifcase\frozenpagestate \pagestatemismatchfalse \realpagestateno\realfolio \ifinpagebody \ifdoublesided \ifodd\realpageno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \else \settrue\c_spac_pagestates_found \fi \else\ifdoublesided \edef\m_spac_pagestates_realpage{\pagestaterealpage{#1}{\number#2}}% \ifx\m_spac_pagestates_realpage\empty \ifodd\realpageno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \else \realpagestateno\m_spac_pagestates_realpage\relax \ifnum\realpagestateno=\realpageno \else \pagestatemismatchtrue \fi \ifodd\realpagestateno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \fi \else \settrue\c_spac_pagestates_found \fi\fi \else \ifodd\realpagestateno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \fi \ifconditional\c_spac_pagestates_found \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifforcedrightpagestateelse#1#2% {\ifcase\frozenpagestate \pagestatemismatchfalse \realpagestateno\realfolio \edef\m_spac_pagestates_realpage{\pagestaterealpage{#1}{\number#2}}% \ifx\m_spac_pagestates_realpage\empty \ifodd\realpageno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \else \realpagestateno\m_spac_pagestates_realpage\relax \ifnum\realpagestateno=\realpageno \else \pagestatemismatchtrue \fi \ifodd\realpagestateno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \fi \else \ifodd\realpagestateno\relax \settrue\c_spac_pagestates_found \else \setfalse\c_spac_pagestates_found \fi \fi \ifconditional\c_spac_pagestates_found \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\freezepagestate {\frozenpagestate\plusone } \unexpanded\def\defrostpagestate{\frozenpagestate\zerocount} % we can make more of these on top, but how to deal with mixed frozen states % \dorecurse{500}{\dontleavehmode\signalrightpage\doifrightpageelse{right}{left}\par} % given doublesided \newcount\nofraggedparagraphs \definepagestate[\s!paragraph] \unexpanded\def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs} % use \dontleavehmode if needed \unexpanded\def\doifrightpageelse{\doifrightpagestateelse\s!paragraph\nofraggedparagraphs} \installcorenamespace{pagechanges} \newif\ifpagechanged \let\lastchangedpage\empty \def\spac_pagechanges_check#1#2#3% {\pagechangedfalse \doforcedtrackpagestate{#2}{#3}% \edef\m_spac_pagestates_realpage{\pagestaterealpage{#2}{\number#3}}% \ifx\m_spac_pagestates_realpage\empty \else \ifnum\m_spac_pagestates_realpage>0\getvalue{\??pagechanges#2:#1}\relax \pagechangedtrue \fi \fi \ifpagechanged \letgvalue{\??pagechanges#2:#1}\m_spac_pagestates_realpage \globallet\lastchangedpage\m_spac_pagestates_realpage \else \globallet\lastchangedpage\realfolio \fi} \def\changedpagestate#1#2% {\executeifdefined{\??pagechanges#2:#1}0} \def\checkpagechange#1{\spac_pagechanges_check{#1}\s!paragraph\nofraggedparagraphs} \def\changedpage #1{\changedpagestate{#1}\s!paragraph} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-ctx.mkiv0000644000175000017500000000441012130411274024300 0ustar norbertnorbert %D \module %D [ file=trac-ctx, %D version=2012.07.13, %D title=\CONTEXT\ Tracing Macros, %D subtitle=TeX Trackers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Tracing Macros / TeX Trackers} \registerctxluafile{trac-ctx}{1.001} \unprotect \unexpanded\def\installtextracker#1#2#3% {\ctxcommand{installtextracker("#1",\!!bs\detokenize{#2}\!!es,\!!bs\detokenize{#3}\!!es)}} \unexpanded\def\installtexdirective#1#2#3% {\ctxcommand{installtexdirective("#1",\!!bs\detokenize{#2}\!!es,\!!bs\detokenize{#3}\!!es)}} \appendtoks \ctxcommand{initializetextrackers ()}% \ctxcommand{initializetexdirectives()}% \to \everyjob \protect \endinput % this is one option: % % \newconditional\c_math_virtual_tx % \newconditional\c_math_virtual_px % \newconditional\c_math_virtual_lm % % \installtexdirective {fonts.math.virtual.tx} {\settrue \c_math_virtual_tx} {\setfalse\c_math_virtual_tx} % \installtexdirective {fonts.math.virtual.px} {\settrue \c_math_virtual_px} {\setfalse\c_math_virtual_px} % \installtexdirective {fonts.math.virtual.lm} {\settrue \c_math_virtual_lm} {\setfalse\c_math_virtual_lm} % % but as it makes the typescript look ugly we wil use: % % \installtexdirective {fonts.math.virtual.tx} {\enablemode[fonts.math.virtual.tx]} {\disablemode[fonts.math.virtual.tx]} % \installtexdirective {fonts.math.virtual.px} {\enablemode[fonts.math.virtual.px]} {\disablemode[fonts.math.virtual.px]} % \installtexdirective {fonts.math.virtual.lm} {\enablemode[fonts.math.virtual.lm]} {\disablemode[fonts.math.virtual.lm]} % % which could be: % % \def\mode_f_m_v_tx{fonts.math.virtual.tx} % \def\mode_f_m_v_px{fonts.math.virtual.px} % \def\mode_f_m_v_lm{fonts.math.virtual.lm} % % \installtexdirective \mode_f_m_v_tx {\enablemode[\mode_f_m_v_tx]} {\disablemode[\mode_f_m_v_tx]} % \installtexdirective \mode_f_m_v_px {\enablemode[\mode_f_m_v_px]} {\disablemode[\mode_f_m_v_px]} % \installtexdirective \mode_f_m_v_lm {\enablemode[\mode_f_m_v_lm]} {\disablemode[\mode_f_m_v_lm]} % % alas .. we don't want to define this in the core context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-arrange.tex0000644000175000017500000000650211754241457026337 0ustar norbertnorbert%D \module %D [ file=mtx-context-arrange, %D version=2009.03.21, %D title=\CONTEXT\ Extra Trickry, %D subtitle=Arrange Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a \TEXEXEC\ features that has been moved to \MKIV. % begin help % % usage: context --extra=arrange [options] list-of-files % % --sort : sort filenames first % --paperoffset=dimension : left-top-offset % --noduplex : singlesided (doublesided is default) % --backspace=dimension : extra left offset % --topspace=dimension : extra top offset % --marking : add cutmarks % --addempty=list : add empty pages at/after (comma separated list) % --printformat : 2UP, etc % --paperformat=spec : paper*print or paperxprint % % example: context --extra=arrange --printformat=2UP --paperformat=A4,A3,landscape myfile % % end help \input mtx-context-common.tex \doifdocumentargument {paperoffset} { \definepapersize [offset=\getdocumentargument{paperoffset}] } \doifdocumentargumentelse {noduplex} { \setuppagenumbering [alternative=doublesided] \setdocumentargument{sided}{doublesided} } { \setdocumentargument{sided}{singlesided} } \setuppapersize [\getdocumentargument{paperformat_paper}] [\getdocumentargument{paperformat_print}] % todo: autopapersize % % \setuppapersize % [A4] % [A3,landscape] \setdocumentargumentdefault {textwidth} {0cm} \setdocumentargumentdefault {backspace} {0cm} \setdocumentargumentdefault {topspace} {0cm} \setuplayout [backspace=\getdocumentargument{backspace}, topspace=\getdocumentargument{topspace}, width=middle, height=middle, location=middle, header=0pt, footer=0pt] \doifdocumentargument {marking} {yes} { \setuplayout [marking=on] } \startluacode local printformat = document.arguments.printformat or "" if printformat == "" then printformat = "normal" elseif string.find(printformat,".*up") then printformat = "2UP,\\v!rotated" elseif string.find(printformat,".*down") then printformat = "2DOWN,\\v!rotated" elseif string.find(printformat,".*side") then printformat = "2SIDE,\\v!rotated" end document.setargument("printformat",printformat) \stopluacode \setuparranging [\getdocumentargument{sided}, \getdocumentargument{printformat}] \starttext \startluacode local format = string.format local fprint = function(...) tex.sprint(tex.ctxcatcodes,format(...)) end if #document.files > 0 then if document.arguments.sort then table.sort(document.files) end local emptypages = document.arguments.addempty or "" local textwidth = document.arguments.textwidth or "0cm" for _, filename in ipairs(document.files) do if not string.find(filename,"^mtx%-context%-") then context.insertpages ( { filename }, { emptypages }, { width = textwidth } ) end end else fprint("no files given") end \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/s-inf-02.mkiv0000644000175000017500000000174011754241457024030 0ustar norbertnorbert%D \module %D [ file=s-inf-02, %D version=2009.11.25, %D title=\CONTEXT\ Style File, %D subtitle=Information 2 (filenames), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttext \starttabulate [|T|T|] \NC \type{\jobname} \NC \jobname \NC \NR \NC \type{\jobfilename} \NC \jobfilename \NC \NR \NC \type{\jobfilesuffix} \NC \jobfilesuffix \NC \NR \NC \type{\inputfilename} \NC \inputfilename \NC \NR \NC \type{\inputfilebarename} \NC \inputfilebarename \NC \NR \NC \type{\inputfilesuffix} \NC \inputfilesuffix \NC \NR \NC \type{\outputfilename} \NC \outputfilename \NC \NR \NC \type{\operatingsystem} \NC \operatingsystem \NC \NR \stoptabulate \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-nod.lua0000644000175000017500000003005312130411274024114 0ustar norbertnorbertif not modules then modules = { } end modules ['font-nod'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

This is rather experimental. We need more control and some of this might become a runtime module instead. This module will be cleaned up!

--ldx]]-- local tonumber, tostring = tonumber, tostring local utfchar = utf.char local concat = table.concat local match, gmatch, concat, rep = string.match, string.gmatch, table.concat, string.rep local report_nodes = logs.reporter("fonts","tracing") fonts = fonts or { } nodes = nodes or { } local fonts, nodes, node, context = fonts, nodes, node, context local tracers = nodes.tracers or { } nodes.tracers = tracers local tasks = nodes.tasks or { } nodes.tasks = tasks local handlers = nodes.handlers or { } nodes.handlers = handlers local injections = nodes.injections or { } nodes.injections = injections local char_tracers = tracers.characters or { } tracers.characters = char_tracers local step_tracers = tracers.steppers or { } tracers.steppers = step_tracers local copy_node_list = node.copy_list local hpack_node_list = node.hpack local free_node_list = node.flush_list local traverse_nodes = node.traverse local nodecodes = nodes.nodecodes local whatcodes = nodes.whatcodes local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local disc_code = nodecodes.disc local glue_code = nodecodes.glue local kern_code = nodecodes.kern local rule_code = nodecodes.rule local whatsit_code = nodecodes.whatsit local spec_code = nodecodes.glue_spec local localpar_code = whatcodes.localpar local dir_code = whatcodes.dir local nodepool = nodes.pool local new_glyph = nodepool.glyph local formatters = string.formatters local formatter = string.formatter local hashes = fonts.hashes local fontidentifiers = hashes.identifiers local fontdescriptions = hashes.descriptions local fontcharacters = hashes.characters local fontproperties = hashes.properties local fontparameters = hashes.parameters function char_tracers.collect(head,list,tag,n) n = n or 0 local ok, fn = false, nil while head do local id = head.id if id == glyph_code then local f = head.font if f ~= fn then ok, fn = false, f end local c = head.char local i = fontidentifiers[f].indices[c] or 0 if not ok then ok = true n = n + 1 list[n] = list[n] or { } list[n][tag] = { } end local l = list[n][tag] l[#l+1] = { c, f, i } elseif id == disc_code then -- skip else ok = false end head = head.next end end function char_tracers.equal(ta, tb) if #ta ~= #tb then return false else for i=1,#ta do local a, b = ta[i], tb[i] if a[1] ~= b[1] or a[2] ~= b[2] or a[3] ~= b[3] then return false end end end return true end function char_tracers.string(t) local tt = { } for i=1,#t do tt[i] = utfchar(t[i][1]) end return concat(tt,"") end local f_unicode = formatters["%U"] function char_tracers.unicodes(t,decimal) local tt = { } for i=1,#t do local n = t[i][1] if n == 0 then tt[i] = "-" elseif decimal then tt[i] = n else tt[i] = f_unicode(n) end end return concat(tt," ") end function char_tracers.indices(t,decimal) local tt = { } for i=1,#t do local n = t[i][3] if n == 0 then tt[i] = "-" elseif decimal then tt[i] = n else tt[i] = f_unicode(n) end end return concat(tt," ") end function char_tracers.start() local npc = handlers.characters local list = { } function handlers.characters(head) local n = #list char_tracers.collect(head,list,'before',n) local h, d = npc(head) char_tracers.collect(head,list,'after',n) if #list > n then list[#list+1] = { } end return h, d end function char_tracers.stop() tracers.list['characters'] = list local variables = { ['title'] = 'ConTeXt Character Processing Information', ['color-background-one'] = lmx.get('color-background-yellow'), ['color-background-two'] = lmx.get('color-background-purple'), } lmx.show('context-characters.lmx',variables) handlers.characters = npc tasks.restart("processors", "characters") end tasks.restart("processors", "characters") end local stack = { } function tracers.start(tag) stack[#stack+1] = tag local tracer = tracers[tag] if tracer and tracer.start then tracer.start() end end function tracers.stop() local tracer = stack[#stack] if tracer and tracer.stop then tracer.stop() end stack[#stack] = nil end -- experimental local collection, collecting, messages = { }, false, { } function step_tracers.start() collecting = true end function step_tracers.stop() collecting = false end function step_tracers.reset() for i=1,#collection do local c = collection[i] if c then free_node_list(c) end end collection, messages = { }, { } end function step_tracers.nofsteps() return context(#collection) end function step_tracers.glyphs(n,i) local c = collection[i] if c then tex.box[n] = hpack_node_list(copy_node_list(c)) end end function step_tracers.features() -- we cannot use first_glyph here as it only finds characters with subtype < 256 local f = collection[1] while f do if f.id == glyph_code then local tfmdata, t = fontidentifiers[f.font], { } for feature, value in table.sortedhash(tfmdata.shared.features) do if feature == "number" or feature == "features" then -- private elseif type(value) == "boolean" then if value then t[#t+1] = formatters["%s=yes"](feature) else -- skip end else t[#t+1] = formatters["%s=%s"](feature,value) end end if #t > 0 then context(concat(t,", ")) else context("no features") end return end f = f.next end end function tracers.fontchar(font,char) local n = new_glyph() n.font, n.char, n.subtype = font, char, 256 context(n) end function step_tracers.font(command) local c = collection[1] while c do local id = c.id if id == glyph_code then local font = c.font local name = file.basename(fontproperties[font].filename or "unknown") local size = fontparameters[font].size or 0 if command then context[command](font,name,size) -- size in sp else context("[%s: %s @ %p]",font,name,size) end return else c = c.next end end end function step_tracers.codes(i,command) local c = collection[i] while c do local id = c.id if id == glyph_code then if command then local f, c = c.font,c.char local d = fontdescriptions[f] local d = d and d[c] context[command](f,c,d and d.class or "") else context("[%s:U+%04X]",c.font,c.char) end elseif id == whatsit_code and (c.subtype == localpar_code or c.subtype == dir_code) then context("[%s]",c.dir) else context("[%s]",nodecodes[id]) end c = c.next end end function step_tracers.messages(i,command,split) local list = messages[i] -- or { "no messages" } if list then for i=1,#list do local l = list[i] if not command then context("(%s)",l) elseif split then local a, b = match(l,"^(.-)%s*:%s*(.*)$") context[command](a or l or "",b or "") else context[command](l) end end end end -- hooks into the node list processor (see otf) function step_tracers.check(head) if collecting then step_tracers.reset() local n = copy_node_list(head) injections.handler(n,nil,"trace",true) handlers.protectglyphs(n) -- can be option collection[1] = n end end function step_tracers.register(head) if collecting then local nc = #collection+1 if messages[nc] then local n = copy_node_list(head) injections.handler(n,nil,"trace",true) handlers.protectglyphs(n) -- can be option collection[nc] = n end end end function step_tracers.message(str,...) str = formatter(str,...) if collecting then local n = #collection + 1 local m = messages[n] if not m then m = { } messages[n] = m end m[#m+1] = str end return str -- saves an intermediate var in the caller end -- local threshold = 65536 local function toutf(list,result,nofresult,stopcriterium) if list then for n in traverse_nodes(list) do local id = n.id if id == glyph_code then local components = n.components if components then result, nofresult = toutf(components,result,nofresult) else local c = n.char local fc = fontcharacters[n.font] if fc then local u = fc[c].tounicode if u then for s in gmatch(u,"....") do nofresult = nofresult + 1 result[nofresult] = utfchar(tonumber(s,16)) end else nofresult = nofresult + 1 result[nofresult] = utfchar(c) end else nofresult = nofresult + 1 result[nofresult] = utfchar(c) end end elseif id == disc_code then result, nofresult = toutf(n.replace,result,nofresult) -- needed? elseif id == hlist_code or id == vlist_code then -- if nofresult > 0 and result[nofresult] ~= " " then -- nofresult = nofresult + 1 -- result[nofresult] = " " -- end result, nofresult = toutf(n.list,result,nofresult) elseif id == glue_code then if nofresult > 0 and result[nofresult] ~= " " then nofresult = nofresult + 1 result[nofresult] = " " end elseif id == kern_code and n.kern > threshold then if nofresult > 0 and result[nofresult] ~= " " then nofresult = nofresult + 1 result[nofresult] = " " end end if n == stopcriterium then break end end end if nofresult > 0 and result[nofresult] == " " then result[nofresult] = nil nofresult = nofresult - 1 end return result, nofresult end function nodes.toutf(list,stopcriterium) local result, nofresult = toutf(list,{},0,stopcriterium) return concat(result) end context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-dpx.mkii0000644000175000017500000006204011571377075024306 0ustar norbertnorbert%D \module %D [ file=spec-dpx, %D version=2005.08.12, %D title=\CONTEXT\ Special Macros, %D subtitle=DVIPDFMx support, %D author=Jin-Hwan Cho, %D date=\currentdate, %D copyright={Jin-Hwan Cho \& Hans Hagen}] %C %C DVIPDFMx is an eXtended version of the DVIPDFM, a DVI to PDF %C translator, still under construction by Jin-Hwan Cho and %C Shunsaku Hirata. %C %C It supports multi-byte character encodings and large character %C sets for East Asian languages by CID-keyed font technology, %C and many features including PDF encryption, PDF bookmarks and %C annotations with Chinese, Japanese, Korean characters, etc. %C %C DVIPDFMx (and information) can be downloaded from: %C %C http://project.ktug.or.kr/dvipdfmx/ %D This driver is built on top of the general \PDF\ macros, %D as defined in \type{spec-fdf}, so we inherit that one. \startspecials[dpx][reset,fdf] %D 1. Modified codes from \type{spec-dpm} %D \macros %D {jobsuffix} %D %D Because no intermediate output format is used, we set the %D jobsuffix to \PDF. \setjobsuffix{pdf} %D Map files (experimental) \definespecial\doloadmapfile#1#2% {\flushatshipout{\special{pdf:mapfile +#2}}} %D DVIPDFMx supports the special command \type{pdf: literal ...} %D since the version \type{dvipdfmx-20021028}. %D %D 1. \type{pdf: literal #1} puts the given PDF commands \#1 %D after changing the text matrix with \type{"1 0 0 1 x y cm"} %D to set the current DVI position $(x,y)$ to the origin. %D %D 2. \type{pdf: literal reverse #1} puts the given PDF commands \#1 %D after changing the text matrix with \type{"1 0 0 1 -x -y cm"}. %D %D 3. \type{pdf: literal direct #1} puts directly the given PDF %D commands \#1 without changing the text matrix. %D %D Since the version \type{dvipdfmx-20050812}, the role of the special %D command \type{pdf:literal} is changed so that %D %D 1. \type{pdf:literal #1} puts the given PDF commands \#1 %D after changing the text matrix with \type{"1 0 0 1 x y cm"} %D to set the current DVI position $(x,y)$ to the origin. After that %D it restores the previous setting by changing the text matrix with %D \type{"1 0 0 1 -x -y cm"}. %D %D 2. \type{pdf:literal direct #1} puts directly the given PDF commands %D \type {#1} without changing the text matrix. %D %D Literal \PDF\ inclusion is implemented as: \def\PDFcode #1{\special{pdf:literal #1}} \def\PDFcontentcode#1{\special{pdf:content #1}} \def\PDFdirectcode #1{\special{pdf:literal direct #1}} %D \type{\dosetuppaper} in \type{spec-dpm} did not work properly %D because DVIPDFM did not permit changing the page size. %D %D However, DVIPDFMx permits different page size in each page %D since the version \type{dvipdfmx-20021028}. %D %D \macros %D {dosetuppaper} %D %D A simple one. \let\PDFpagexyzspec\relax \def\PDFpagexyzspec{@xpos @ypos 0} % untested \definespecial\dosetuppaper#1#2#3% {\bgroup \scratchdimen#2\edef\width {\the\scratchdimen\space}% \scratchdimen#3\edef\height{\the\scratchdimen\space}% \special{pdf:pagesize width \width height \height}% \egroup} %D \macros %D {doinsertfile} %D %D Only \METAPOST, \BMP\ \JPG\ \PNG\ and \PDF\ inclusion are supported. \definespecial\doinsertfile {\dofileinsertion{dpx}\@@DriverImageType} %D Even though DVIPDFM supports \METAPOST directly, the funtionality %D is not good. It conflicts much with \CONTEXT. %D %D So, \METAPOST will be treated as the same way as PDFTeX using %D MPtoPDF in DVIPDFMx since the version \type{dvipdfmx-20021028}. %D DVIPDFM (and DVIPDFMx too) supports the image files with %D the extension, \PDF, \JPG, \PNG, \BMP, and \EPS. % \def\handleepsimage % {\PointsToWholeBigPoints\@@DriverImageWidth \width % \PointsToWholeBigPoints\@@DriverImageHeight\height % \special % {PSfile="\@@DriverImageFile"\space % llx=\EPSllx\space lly=\EPSlly\space % urx=\EPSurx\space ury=\EPSury\space % rwi=\width0\space rhi=\height0}} % \definefileinsertion{dpx}{mps}{\handleepsimage} \definefileinsertion{dpx}{mps} {\hbox {\convertMPtoPDF\@@DriverImageFile{1}{1}% \global\let\PDFimagereference\empty}} \def\handlebmpimage {\special{pdf: image width \@@DriverImageWidth \space height \@@DriverImageHeight\space (\@@DriverImageFile)}} \definefileinsertion{dpx}{pdf}{\handlebmpimage} \definefileinsertion{dpx}{jpg}{\handlebmpimage} \definefileinsertion{dpx}{png}{\handlebmpimage} \definefileinsertion{dpx}{bmp}{\handlebmpimage} \definefileinsertion{dpx}{mov}{\doPDFinsertmov} \definefileinsertion{dpx}{avi}{\doPDFinsertmov} %D \macros %D {doinsertsoundtrack} %D %D Sounds are supported too. \definespecial\doinsertsoundtrack{\doPDFinsertsoundtrack} %D \macros %D {doovalbox} \definespecial\doovalbox{\doPDFovalbox} %D \macros %D {dostartgraymode,dostopgraymode, %D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode, %D dostopcolormode, %D dostartrotation,dostoprotation, %D dostartscaling,dostopscaling, %D dostartmirroring,dostopmirroring, %D dostartnegative,dostopnegative} %D %D Unfortunately the direct \PDF\ inclusion is not suited %D for the next macros, which means that we cannot use the %D \type {\doPDF..} alternatives. Since \CONTEXT\ maintains %D its own colorstack, we use the \DVIPS\ alternatives. \definespecial\dostartgraymode {\doPDFstartgraymode} \definespecial\dostopgraymode {\doPDFstopgraymode} \definespecial\dostartrgbcolormode {\doPDFstartrgbcolormode} \definespecial\dostartcmykcolormode{\doPDFstartcmykcolormode} \definespecial\dostartgraycolormode{\doPDFstartgraycolormode} \definespecial\dostartspotcolormode{\doPDFstartspotcolormode} \definespecial\dostopcolormode {\doPDFstopcolormode} \definespecial\doregistercmykspotcolor{\doPDFregistercmykspotcolor} \definespecial\doregisterrgbspotcolor {\doPDFregisterrgbspotcolor} \definespecial\doregistergrayspotcolor{\doPDFregistergrayspotcolor} \definespecial\doregistercmykindexcolor{\doPDFregistercmykindexcolor} \definespecial\doregisterrgbindexcolor {\doPDFregisterrgbindexcolor} \definespecial\doregistergrayindexcolor{\doPDFregistergrayindexcolor} \definespecial\doregisterfigurecolor{\doPDFregisterfigurecolor} \definespecial\dostartnonecolormode{\doPDFstartnonecolormode} \definespecial\doregisternonecolor {\doPDFregisternonecolor} \definespecial\dostartrotation #1{\special{pdf:btrans rotate #1}} \definespecial\dostoprotation {\special{pdf:etrans}} \definespecial\dostartscaling#1#2{\special{pdf:btrans xscale #1 yscale #2}} \definespecial\dostopscaling {\special{pdf:etrans}} \definespecial\dostartmirroring {\special{pdf:btrans xscale -1}} \definespecial\dostopmirroring {\special{pdf:etrans}} %D Negation is not (yet) supported: \definespecial\dostartnegative {\doPDFstartnegative} \definespecial\dostopnegative {\doPDFstopnegative} \definespecial\dostartoverprint {\doPDFstartoverprint} \definespecial\dostopoverprint {\doPDFstopoverprint} \definespecial\dostarttransparency{\doPDFstarttransparency} \definespecial\dostoptransparency {\doPDFstoptransparency} \PDFtransparencysupportedtrue \def\@@PDT{@PDT@} \ifx\PDFcurrenttransparency\undefined \newcount\PDFcurrenttransparency \PDFcurrenttransparency=0 % -1 \fi \def\assignPDFtransparency#1#2% {\def\PDFtransparencyidentifier{/Tr#1}% \def\PDFtransparencyreference{@TR:#2}} % todo: \PDFobjref{TR:#2} \def\presetPDFtransparency#1#2% {\initializePDFtransparency \executeifdefined{\@@PDT#1:#2}{\dopresetPDFtransparency{#1}{#2}}} \def\dopresetPDFtransparency#1#2% {\global\advance\PDFcurrenttransparency \plusone \doPDFreserveDPXobject{TR:\the\PDFcurrenttransparency}{<< >>}% hack \special{pdf:\doPDFcheckedDPXobject{TR:\the\PDFcurrenttransparency}\PDFtransparancydictionary{#1}{#2}{}}% \edef\PDFtransparencyidentifier{/Tr\the\PDFcurrenttransparency}% \edef\PDFtransparencyreference {@TR:\the\PDFcurrenttransparency}% \setxvalue{\@@PDT#1:#2}% {\noexpand\assignPDFtransparency{\the\PDFcurrenttransparency}{\the\PDFcurrenttransparency}}% \appendtoPDFdocumentextgstates {\PDFtransparencyidentifier\space \PDFtransparencyreference\space}} \def\initializePDFtransparency {\doPDFreserveDPXobject{TR:0}{<< >>}% hack \special{pdf:\doPDFcheckedDPXobject{TR:0}\PDFtransparancydictionary{1}{1}{/AIS false}}% \xdef\PDFtransparencyresetidentifier{/Tr0}% \xdef\PDFtransparencyresetreference{@TR:0}% \setxvalue{\@@PDT0:0}% {\noexpand\assignPDFtransparency{0}{0}}% \appendtoPDFdocumentextgstates {\PDFtransparencyresetidentifier\space \PDFtransparencyresetreference\space}% \global\let\initializePDFtransparency\relax} %D \macros %D {dosetupinteraction, %D dosetupopenaction,dosetupcloseaction} \definespecial\dosetupinteraction {\showmessage\m!interactions{21}{DVIPDFMx}} \definespecial\dosetupopenaction {\doPDFsetupopenaction} \definespecial\dosetupcloseaction{\doPDFsetupcloseaction} %D \macros %D {doresetgotowhereever, %D dostartthisisrealpage,dostartthisislocation, %D dostartgotorealpage,dostartgotolocation,dostartgotoJS} \definespecial\doresetgotowhereever {\doPDFresetgotowhereever} \definespecial\dostartthisislocation{\doPDFstartthisislocation} \definespecial\dostartgotolocation{\doPDFstartgotolocation} \definespecial\dostartgotorealpage{\doPDFstartgotorealpage} \definespecial\dostartgotoJS {\doPDFstartgotoJS} %D \macros %D {doflushJSpreamble} \definespecial\doflushJSpreamble#1% {\bgroup \let\compositeJScode\empty \def\docommand##1% {\edef\sanitizedJScode{\getJSpreamble{##1}}% \@EA\doPSsanitizeJScode\sanitizedJScode\to\sanitizedJScode \special{pdf:object @JS:##1 <>}% \edef\compositeJScode{\compositeJScode\space (##1) @JS:##1}}% \processcommalist[#1]\docommand \special{pdf:names /JavaScript [\compositeJScode]}% \egroup} %D \macros %D {dostarthide,dostophide} \definespecial\dostarthide{} \definespecial\dostophide {} %D \macros %D {dosetupscreen} \definespecial\dosetupscreen {\doPDFsetupscreen \printpaperheight} \definespecial\dosetupartbox {\doPDFsetupartbox \printpaperheight} \definespecial\dosetupcropbox {\doPDFsetupcropbox \printpaperheight} \definespecial\dosetupbleedbox{\doPDFsetupbleedbox\printpaperheight} \definespecial\dosetuptrimbox {\doPDFsetuptrimbox \printpaperheight} %D \macros %D {dostartexecutecommand} \definespecial\dostartexecutecommand{\doPDFstartexecutecommand} %D \macros %D {dosetupidentity} \definespecial\dosetupidentity{\doPDFsetupidentity} %D \macros %D {dostartrunprogam} \definespecial\dostartrunprogram{\doPDFstartrunprogram} %D \macros %D {dostartgotoprofile, dostopgotoprofile, %D dobeginofprofile, doendofprofile} \definespecial\dostartgotoprofile{\doPDFstartgotoprofile} \definespecial\dobeginofprofile#1#2#3#4% {\bgroup \setPDFdestination{#1}% \scratchdimen#2\edef\width {\the\scratchdimen\space}% \scratchdimen#3\edef\height{\the\scratchdimen\space}% \doifsomething{\PDFdestination} {\special {pdf:thread @ART::\PDFdestination\space width \width height \height <>}}% \egroup} \definespecial\doendofprofile {} %D \macros %D {doinsertbookmark} \definespecial\doinsertbookmark{\doPDFinsertbookmark} %D \macros %D {dostartobject,dostopobject,doinsertobject} %D %D Modified to support the color shading feature since version %D \type{dvipdfmx-20021128}. % wd nextbox > #3 ivm offset % \definespecial\dostartobject#1#2#3#4#5% % {\bgroup % \dowithnextbox % {\dosetobjectreference{#1}{#2}{@#1::#2}% % \scratchdimen#3\edef\width {\the\scratchdimen\space}% % \scratchdimen#4\edef\height{\the\scratchdimen\space}% % \setbox\nextbox\vbox % {\special{pdf:bxobj @#1::#2 width \width height \height}% % % we need to compensate for the box offset (ugly, sigh) % \scratchdimen\nextboxht % \advance\scratchdimen\nextboxdp % \advance\scratchdimen-#4\relax % \nextboxdp\zeropoint % \nextboxht\zeropoint % \hbox to #3{\hss\lower.5\scratchdimen\box\nextbox\hss}% % \ifx\currentPDFresources\empty % \else % \special{pdf:put @resources <<\currentPDFresources>>}% % \global\let\currentPDFresources\empty % \fi % \special{pdf:exobj}}% % \smashbox\nextbox % \flushatshipout{\box\nextbox}% % \egroup}% % \hbox\bgroup} % \definespecial\dostopobject % {\egroup} \def\doDVIPDFMXstartobject#1#2#3#4#5#6% {\bgroup \dowithnextbox {\ifcase#1\or\dosetobjectreference{#2}{#3}{@#2::#3}\fi \scratchdimen#4\edef\width {\the\scratchdimen\space}% \scratchdimen#5\edef\height{\the\scratchdimen\space}% \setbox\nextbox\vbox {\special{pdf:bxobj @#2::#3 width \width height \height}% % we need to compensate for the box offset (ugly, sigh) \scratchdimen\nextboxht \advance\scratchdimen\nextboxdp \advance\scratchdimen-#5\relax \nextboxdp\zeropoint \nextboxht\zeropoint \hbox to #4{\hss\lower.5\scratchdimen\box\nextbox\hss}% \ifx\currentPDFresources\empty \else \special{pdf:put @resources <<\currentPDFresources>>}% \global\let\currentPDFresources\empty \fi \special{pdf:exobj}}% \finalizeobjectbox\nextbox \smashbox\nextbox \flushatshipout{\box\nextbox}% \egroup}% \hbox\bgroup} \def\doDVIPDFMXstopobject {\egroup} \definespecial\dostartobject#1#2#3#4#5% {\doDVIPDFMXstartobject\plusone{#1}{#2}{#3}{#4}{#5}} \definespecial\dostopobject {\doDVIPDFMXstopobject} \definespecial\doinsertobject#1#2% {\hbox {\doPDFgetobjectreference{#1}{#2}\PDFobjectreference \ifx\PDFobjectreference\empty \else \special{pdf:uxobj @#1::#2}% \fi}} %D \macros %D {dosetpagetransition} \definespecial\dosetpagetransition{\doPDFsetpagetransition} %D \macros %D {doinsertcomment, doflushcomments} \definespecial\doinsertcomment{\doPDFinsertcomment} \definespecial\doflushcomments{\doPDFflushcomments} %D \macros %D {dopresetlinefield,dopresettextfield, %D dopresetchoicefield,dopresetpopupfield,dopresetcombofield, %D dopresetpushfield,dopresetcheckfield, %D dopresetradiofield,dopresetradiorecord} \definespecial\dopresetlinefield {\doFDFpresetlinefield} \definespecial\dopresettextfield {\doFDFpresettextfield} \definespecial\dopresetchoicefield{\doFDFpresetchoicefield} \definespecial\dopresetpopupfield {\doFDFpresetpopupfield} \definespecial\dopresetcombofield {\doFDFpresetcombofield} \definespecial\dopresetpushfield {\doFDFpresetpushfield} \definespecial\dopresetcheckfield {\doFDFpresetcheckfield} \definespecial\dopresetradiofield {\doFDFpresetradiofield} \definespecial\dopresetradiorecord{\doFDFpresetradiorecord} %D \macros %D {dodefinefieldset,dogetfieldset,doiffieldset} \definespecial\dodefinefieldset{\doFDFdefinefieldset} \definespecial\dogetfieldset {\doFDFgetfieldset} \definespecial\doiffieldset {\doFDFiffieldset} %D \macros %D {doregistercalculationset} \definespecial\doregistercalculationset{\doFDFregistercalculationset} %D \type{\doPDFdestination} in \type{spec-dpm} had a bug. %D %D \macros %D {doPDFdestination} \def\doPDFdestination#1% {\special{pdf:names /Dests (#1) [@thispage \PDFpageviewwrd]}} %D \macros %D {doPDFaction,doPDFannotation,ifsharePDFactions} %D %D Sharing is not yet supported. \newif\ifsharePDFactions \sharePDFactionsfalse \def\dodoPDFaction#1#2#3#4% {\ifcollectreferenceactions \xdef\lastPDFaction{#4}% \else \bgroup % this is yet untested %\ifsharePDFactions % \ifcase\similarreference\relax % \xdef\lastPDFaction{<<#4>>}% % \or % \global\advance\nofPDFsimilar by 1 % \special{pdf: object @PDF::sim:\the\nofPDFsimilar\space<<#4>>}% % \xdef\lastPDFaction{@PDF::sim:\the\nofPDFsimilar}% % \else % % leave \lastPDFaction untouched % \fi %\else \xdef\lastPDFaction{<<#4>>}% %\fi \scratchdimen#2\edef\width {\the\scratchdimen\space}% \scratchdimen#3\edef\height{\the\scratchdimen\space}% \special{pdf:ann #1 width \width height \height <>}% \egroup \fi} \def\doPDFaction#1#2#3% {\dodoPDFaction\empty{#1}{#2}{#3}} %D \type{\doPDFannotation} in \type{spec-dpm} had a bug. %D %D \type{\doPDFannotation} conflicts with \type{\doPDFinsertmov}, %D since width and height also defined in \type{\doPDFinsertmov}. \def\doPDFannotation#1#2#3% {\bgroup \edef\data{#3}% \scratchdimen#1\edef\width {\the\scratchdimen\space}% \scratchdimen#2\edef\height{\the\scratchdimen\space}% \special{pdf:ann width \width height \height <<\data>>}% \egroup} %D \macros %D {doPDFannotationobject,doPDFactionobject} \def\doPDFannotationobject#1#2#3#4#5% {\bgroup \scratchdimen#3\edef\width {\the\scratchdimen\space}% \scratchdimen#4\edef\height{\the\scratchdimen\space}% \special{pdf:ann @#1::#2 width \width height \height <<#5>>}% \dosetobjectreference{#1}{#2}{@#1::#2}% \egroup} \def\doPDFactionobject#1#2#3#4#5% {\dodoPDFaction{@#1::#2}{#3}{#4}{#5}% \dosetobjectreference{#1}{#2}{@#1::#2}} %D \macros %D {doPDFaddtocatalog,doPDFaddtoinfo, %D doPDFpageattribute,doPDFpagesattribute} % we could move much more to spec-fdf % \ifx\pdfcatalog \undefined \newtoks\pdfcatalog \fi % \ifx\pdfinfo \undefined \newtoks\pdfinfo \fi % \ifx\pdfpageattr \undefined \newtoks\pdfpageattr \fi % \ifx\pdfpageresources\undefined \newtoks\pdfpageresources \fi % \ifx\pdfpagesattr \undefined \newtoks\pdfpagesattr \fi % \def\doPDFaddtocatalog #1{\expanded{\global\pdfcatalog {#1\the\pdfcatalog }}} % \def\doPDFaddtoinfo #1{\expanded{\global\pdfinfo {#1\the\pdfinfo }}} % \def\doPDFpageattribute #1{\expanded{\global\pdfpageattr {#1\the\pdfpageattr }}} % \def\doPDFpageresource #1{\expanded{\global\pdfpageresources{#1\the\pdfpageresources}}} % \def\doPDFpagesattribute#1{\expanded{\global\pdfpagesattr {#1\the\pdfpagesattr }}} % \def\doPDFresetpageattributes{\global\pdfpageattr\emptytoks} % \def\doPDFresetpageresources {\global\pdfpageresources\emptytoks} % \appendtoks % \special{pdf: put @catalog <<#1>>}% % \special{pdf: docinfo <<#1>>}% % \special{pdf: put @pages <<#1>>}% % \to \everylastshipout % \appendtoks % \special{pdf: put @thispage <<#1>>}% % \to\everyshipout \def\doPDFaddtocatalog#1% {\special{pdf:put @catalog <<#1>>}} \def\doPDFaddtoinfo#1% {\special{pdf:put @docinfo <<#1>>}} \def\doPDFpageattribute#1% {\special{pdf:put @thispage <<#1>>}} \def\doPDFpagesattribute#1% {\special{pdf:put @pages <<#1>>}} \def\doPDFpageresource#1% {\special{pdf:put @resources <<#1>>}} \let\doPDFresetpageresources \relax \let\doPDFresetpageattributes\relax %D \type{\doPDFbookmark} in \type{spec-dpm} had a bug. %D The openbookmark option \#5 is not supported yet. %D %D \macros %D {doPDFbookmark} \def\doPDFbookmark#1#2#3#4#5% {\ifcase#1\else %\scratchcounter#4\advance\scratchcounter\minusone \special{pdf:outline #1 %\ifcase#5 opened\fi % <>>>}% % <> >>}% <\else(#3)\fi\space /A <> >>}% \fi} %D \macros %D {doPDFdictionaryobject,doPDFarrayobject} % Dvipdfmx can't handle % % \special{pdf:put @foo << /Bar @bar >>} % \special{pdf:put @bar << /Foo @foo >>} % % Objects must be defined before they are used. % % \special{pdf:obj @foo << >>} % \special{pdf:obj @bar << >>} % \special{pdf:put @foo << /Bar @bar >>} % \special{pdf:put @bar << /Foo @foo >>} % % However, this only works for dictionary and array. \def\doPDFreserveDPXobject#1#2% {\ifundefined{r:pdx:d:#1}% % we need a \flushatshipoutprep (prepended, normally appended) \flushatshipout{\special{pdf:object @#1 #2}}% \global\letvalue{r:pdx:d:#1}\empty \fi} \def\doPDFreserveDPXobjectfirst#1#2% {\ifundefined{r:pdx:d:#1}% \doglobal\prependtoks\special{pdf:object @#1 #2}\to\everyfirstshipout \global\letvalue{r:pdx:d:#1}\empty \fi} \def\doPDFcheckedDPXobject#1{\ifundefined{r:pdx:d:#1}object\else put\fi\space @#1\space} % new, experimental, can save a run, bugged, too many xforms now % % \def\doreservePDFobject#1#2% % {\dosetobjectreference{#1}{#2}{@#1::#2}} % % \def\doPDFreserveddictionaryobject#1#2#3% % {\flushatshipout{\special{pdf:object @#1::#2 << #3 >>}}} % % \def\doPDFreservedarrayobject#1#2#3% % {\flushatshipout{\special{pdf:object @#1::#2 [ #3 ]}}} % % \doreservePDFobject{FDF}{docuextgstates} % \doreservePDFobject{FDF}{colorspaces} % \doreservePDFobject{FDF}{docushades} % so this is to be checked \def\doPDFdictionaryobject#1#2#3% {\flushatshipout {\special{pdf:\doPDFcheckedDPXobject{#1::#2}<<#3>>}% \dosetobjectreference{#1}{#2}{@#1::#2}}} \def\doPDFarrayobject#1#2#3% {\flushatshipout {\special{pdf:\doPDFcheckedDPXobject{#1::#2}[#3]}% \dosetobjectreference{#1}{#2}{@#1::#2}}} %D \macros %D {defaultobjectreference,doPDFgetobjectreference} \def\defaultobjectreference#1#2{@#1::#2} %D \type{\doPDFgetobjectreference} in \type{spec-dpm} had a bug. \def\doPDFgetobjectreference#1#2#3% {\dogetobjectreference{#1}{#2}#3% \ifx#3\empty\else\edef#3{#3}\fi} \def\doPDFgetpagereference#1#2% {\edef#2{@page#1}} %D Done. % %D 2. Modified codes from \type{spec-fdf} % % \definespecial\dostartgraphicgroup{\special{pdf: literal direct q}} % \definespecial\dostopgraphicgroup {\special{pdf: literal direct Q}} %D 3. Copied codes from \type{spec-tpd} %D \macros %D {dostartclipping,dostopclipping} %D %D Clipping in \PDFTEX\ is rather trivial. We can even hook %D in \METAPOST\ without problems. \definespecial\dostartclipping#1#2#3% {\PointsToBigPoints{#2}\width \PointsToBigPoints{#3}\height \grabMPclippath{#1}{1}\width\height {0 0 m \width\space 0 l \width \height l 0 \height l}% \PDFcode {q 0 w \MPclippath\space W n}} \definespecial\dostopclipping {\PDFcode{Q n}} %D 4. Modified codes from \type{supp-pdf} \def\dosetMPsomePDFshade#1#2% {\global\advance\currentPDFshade \plusone \special{pdf:object @ftn:Sh:\currentPDFshade\space <>}% \special{pdf:object @obj:Sh:\currentPDFshade\space <>}% \appendtoPDFdocumentshades{/Sh\the\currentPDFshade\space @obj:Sh:\currentPDFshade}% \setxvalue{\@@MPSK#2}{\noexpand\dohandleMPshade{\the\currentPDFshade}}} \def\handleMPfigurespecial#1#2#3#4#5#6#7% toto : combine with ext fig {\doiffileelse{#7} {\vbox to \zeropoint {\vss \hbox to \zeropoint {\special{pdf:btrans matrix #1 #2 #3 #4 #5 #6}% \rlap{\special{pdf:image width 1bp height 1bp (#7)}} \special{pdf:etrans}\hss}}} {\message{[unknown figure #7]}}} %D 5. Modified codes from \type{supp-pdf} \let\handleMPfshow\dohandleMPfshow \newcounter\MPPDFcounter \newcounter\MPPDFobjectcounter \def\setMPPDFobject#1#2% resources boxnumber {\doglobal\increment\MPPDFobjectcounter \xdef\getMPPDFobject {\vbox to \the\ht#2% {\vss \hbox to \the\wd#2% {%\scratchdimen\wd#2\scratchdimen.5\scratchdimen\hskip-\the\scratchdimen \special{pdf:uxobj @MPPDF::\MPPDFobjectcounter}}}}% \expanded{\doDVIPDFMXstartobject\zerocount{MPPDF}\MPPDFobjectcounter{\the\wd#2}{\the\ht#2}{\the\dp#2}}% \finalizeobjectbox#2% \box#2% \doDVIPDFMXstopobject} \let\getMPPDFobject\gobbletwoarguments \definespecial\doinsertMPfile#1% {\doiffileelse{./#1}{\includeMPasPDF{./#1}}{\message{[MP #1]}}} %D Experimental (untested): \definespecial\dostartfonteffect#1#2#3% {\ifdim#2>\zeropoint \PointsToBigPoints{#2}\ascii \PDFdirectcode{\ascii\space w}% \fi \ifdim#3\points=\onepoint\else \scratchdimen#3\points \PDFdirectcode{\withoutpt{\the\scratchdimen}\space Tc}% \fi \PDFdirectcode{\purenumber#1 Tr}} \definespecial\dostopfonteffect {\PDFdirectcode{1 w 0 Tc 0 Tr}} %D 6. Modified codes from \type{core-obj} %D %D In the viewpoint of TeX, the special command \type{pdf:uxobj @obj} %D generates a box with zero point width and zero point height so that %D it must be careful to place the box at the reference point. \def\dogetobject#1#2#3#4#5#6#7% don't change this, should work for dvi & pdf {\initializepaper \forgetall \dontshowcomposition \setbox\scratchbox\vbox {\doinsertobject{#1}{#2}}% \setbox\scratchbox#3% {\vbox to #5\scaledpoint {\ifdim\ht\scratchbox>#5\scaledpoint \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else\ifdim\wd\scratchbox>#4\scaledpoint \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else %\vss\box\scratchbox \vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% \fi\fi}}% \box\scratchbox \elabelgroup} \stopspecials \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-mis.lua0000644000175000017500000000714411571377075024161 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-mis'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local xml, lpeg, string = xml, lpeg, string local concat = table.concat local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring local format, gsub, match = string.format, string.gsub, string.match local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local P, S, R, C, V, Cc, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Cs lpegpatterns.xml = lpegpatterns.xml or { } local xmlpatterns = lpegpatterns.xml --[[ldx--

The following helper functions best belong to the lxml-ini module. Some are here because we need then in the mk document and other manuals, others came up when playing with this module. Since this module is also used in we've put them here instead of loading mode modules there then needed.

--ldx]]-- local function xmlgsub(t,old,new) -- will be replaced local dt = t.dt if dt then for k=1,#dt do local v = dt[k] if type(v) == "string" then dt[k] = gsub(v,old,new) else xmlgsub(v,old,new) end end end end --~ xml.gsub = xmlgsub function xml.stripleadingspaces(dk,d,k) -- cosmetic, for manual if d and k then local dkm = d[k-1] if dkm and type(dkm) == "string" then local s = match(dkm,"\n(%s+)") xmlgsub(dk,"\n"..rep(" ",#s),"\n") end end end --~ xml.escapes = { ['&'] = '&', ['<'] = '<', ['>'] = '>', ['"'] = '"' } --~ xml.unescapes = { } for k,v in next, xml.escapes do xml.unescapes[v] = k end --~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end --~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end --~ function xml.cleansed (str) return (gsub(str,"<.->" , '' )) end -- "%b<>" -- 100 * 2500 * "oeps< oeps> oeps&" : gsub:lpeg|lpeg|lpeg -- -- 1021:0335:0287:0247 -- 10 * 1000 * "oeps< oeps> oeps& asfjhalskfjh alskfjh alskfjh alskfjh ;al J;LSFDJ" -- -- 1559:0257:0288:0190 (last one suggested by roberto) -- escaped = Cs((S("<&>") / xml.escapes + 1)^0) -- escaped = Cs((S("<")/"<" + S(">")/">" + S("&")/"&" + 1)^0) local normal = (1 - S("<&>"))^0 local special = P("<")/"<" + P(">")/">" + P("&")/"&" local escaped = Cs(normal * (special * normal)^0) -- 100 * 1000 * "oeps< oeps> oeps&" : gsub:lpeg == 0153:0280:0151:0080 (last one by roberto) local normal = (1 - S"&")^0 local special = P("<")/"<" + P(">")/">" + P("&")/"&" local unescaped = Cs(normal * (special * normal)^0) -- 100 * 5000 * "oeps oeps oeps " : gsub:lpeg == 623:501 msec (short tags, less difference) local cleansed = Cs(((P("<") * (1-P(">"))^0 * P(">"))/"" + 1)^0) xmlpatterns.escaped = escaped xmlpatterns.unescaped = unescaped xmlpatterns.cleansed = cleansed function xml.escaped (str) return lpegmatch(escaped,str) end function xml.unescaped(str) return lpegmatch(unescaped,str) end function xml.cleansed (str) return lpegmatch(cleansed,str) end -- this might move function xml.fillin(root,pattern,str,check) local e = xml.first(root,pattern) if e then local n = #e.dt if not check or n == 0 or (n == 1 and e.dt[1] == "") then e.dt = { str } end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-sym.mkiv0000644000175000017500000001536611754241457024326 0ustar norbertnorbert%D \module %D [ file=catc-sym, %D version=1997.01.03, % moved code %D title=\CONTEXT\ Catcode Macros, %D subtitle=Some Handy Constants, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % we now have loaded syst-* so we have all @@catcode constants %D We want to have access to the raw alternatives of the %D special characters. We use a \type {\xdef} instead of %D \type {\let} because we need an expandable token in a %D \type {\write}. \bgroup \catcode`B=\begingroupcatcode \catcode`E=\endgroupcatcode \catcode`.=\escapecatcode .catcode `.{ 12 .xdef .letteropenbrace B.string{E .catcode `.} 12 .xdef .letterclosebrace B.string}E .catcode `.& 12 .xdef .letterampersand B.string&E .catcode `.< 12 .xdef .letterless B.string 12 .xdef .lettermore B.string>E .catcode `.# 12 .xdef .letterhash B.string#E .catcode `." 12 .xdef .letterdoublequote B.string"E .catcode `.' 12 .xdef .lettersinglequote B.string'E .catcode `.$ 12 .xdef .letterdollar B.string$E .catcode `.% 12 .xdef .letterpercent B.string%E .catcode `.^ 12 .xdef .letterhat B.string^E .catcode `._ 12 .xdef .letterunderscore B.string_E .catcode `.| 12 .xdef .letterbar B.string|E .catcode `.~ 12 .xdef .lettertilde B.string~E .catcode `.\ 12 .xdef .letterbackslash B.string\E .catcode `./ 12 .xdef .letterslash B.string/E .catcode `.? 12 .xdef .letterquestionmark B.string?E .catcode `.! 12 .xdef .letterexclamationmark B.string!E .catcode `.@ 12 .xdef .letterat B.string@E .catcode `.: 12 .xdef .lettercolon B.string:E .global .let .letterescape .letterbackslash .global .let .letterbgroup .letteropenbrace .global .let .letteregroup .letterclosebrace .global .let .letterleftbrace .letteropenbrace .global .let .letterrightbrace .letterclosebrace .egroup %D \macros %D {uncatcodespecials,setnaturalcatcodes,setnormalcatcodes, %D uncatcodecharacters,uncatcodeallcharacters, %D uncatcodespacetokens} %D %D The following macros are more or less replaced by switching %D to a catcode table (which we simulate in \MKII) but we keep %D them for convenience and compatibility. Some old engine code %D has been removed. \normalprotected\def\uncatcodespecials {\setcatcodetable\nilcatcodes \uncatcodespacetokens} \normalprotected\def\setnaturalcatcodes {\setcatcodetable\nilcatcodes} \normalprotected\def\setnormalcatcodes {\setcatcodetable\ctxcatcodes} % maybe \texcatcodes \normalprotected\def\uncatcodecharacters {\setcatcodetable\nilcatcodes} % was fast version, gone now \normalprotected\def\uncatcodeallcharacters{\setcatcodetable\nilcatcodes} % was slow one, with restore \normalprotected\def\uncatcodespacetokens {\catcode\spaceasciicode \spacecatcode \catcode\formfeedasciicode \ignorecatcode \catcode\endoflineasciicode\endoflinecatcode \catcode\delasciicode \ignorecatcode} %D \macros %D {setverbosecharacter,setverbosecscharacters} %D %D Next follows a definition that lets some shortcuts expand to %D themselves. This macro is meant for \POSTSCRIPT\ and \PDF\ %D code passed on to the backend. \newtoks\everyverbosechacters \normalprotected\def\setverbosecscharacter#1% {\edef#1{\string#1}} \normalprotected\def\setverbosecscharacters {\the\everyverbosechacters} \bgroup % if used often we can move the code inline \catcode\barasciicode \activecatcode \catcode\tildeasciicode\activecatcode \global \everyverbosechacters = {\setverbosecscharacter |\setverbosecscharacter ~% context specific \setverbosecscharacter\|\setverbosecscharacter\~% \setverbosecscharacter\:\setverbosecscharacter\;% \setverbosecscharacter\+\setverbosecscharacter\-% \setverbosecscharacter\[\setverbosecscharacter\]% \setverbosecscharacter\.\setverbosecscharacter\\% \setverbosecscharacter\)\setverbosecscharacter\(% \setverbosecscharacter\0\setverbosecscharacter\1% \setverbosecscharacter\2\setverbosecscharacter\3% \setverbosecscharacter\4\setverbosecscharacter\5% \setverbosecscharacter\6\setverbosecscharacter\7% \setverbosecscharacter\8\setverbosecscharacter\9% \setverbosecscharacter\n\setverbosecscharacter\s% \setverbosecscharacter\/} \egroup %D (Inspired by a discussion on the \CONTEXT\ mailing list) %D %D In \TEX\ each character can have one of 16 catcodes. This way the %D backslash, dollar, ampersand, hash and some more characters get %D their special meaning. If you want to process tokens under a %D certain catcode regime, passing arguments can interfere badly. %D %D \startbuffer[a] %D \def\whatever#1{[#1]} %D \whatever{whatever \type {\whatever{you want}} $or$ not!} %D \stopbuffer %D %D \typebuffer[a] %D %D Here we pass an argument to \type {\whatever} but part of that %D argument is to be processed under a different catcode regime, i.e.\ %D all characters that need to be typeset verbatim need to get %D the catcode that makes it a letter. This is what we get when we typeset %D the text verbatim: %D %D \starttyping %D whatever \type {\whatever{you want}} $or$ not! %D \stoptyping %D %D However, when passed to \type {\whatever} we get: %D %D \getbuffer[a] %D %D In \ETEX\ one can use \type {\scantokens} to circumvent this problem. %D %D \startbuffer[b] %D \def\rescan#1{\scantokens{#1}} %D \def\whatever#1{[\rescan{#1}]} %D \whatever{whatever \type {\whatever{you want}} $or$ not!} %D \stopbuffer %D %D \getbuffer[b] \typebuffer[b] %D %D This time the \type {\whatever} call gives: %D %D \getbuffer[b] %D %D In this example, two spaces have crept in. The first one, after the %D macro name, is inserted by \TEX\ and cannot be avoided. The last space %D is inserted by \type {\scantokens}, and is the consequence of the fact %D that this macro mimics reading from a file. You can avoid the last %D space by a slightly different definition: %D %D \startbuffer[c] %D \def\rescan#1{\scantokens{#1\ignorespaces}} %D \def\whatever#1{[\rescan{#1}]} %D \whatever{whatever \type {\whatever{you want}} $or$ not!} %D \stopbuffer %D %D \typebuffer[c] %D %D Unfortunately we still keep the first space, but at least it's better than %D a failure: %D %D \getbuffer[c] \long\def\rescan#1{\scantokens{#1\ignorespaces}} \long\def\rescanwithsetup#1#2{\begingroup\directsetup{#1}\scantokens{#2\ignorespaces}\endgroup} \ifx\scantextokens\undefined \else \long\def\rescan#1{\scantextokens{#1}} \long\def\rescanwithsetup#1#2{\begingroup\directsetup{#1}\scantextokens{#2}\endgroup} \fi \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-lua.mkiv0000644000175000017500000000247011754241457025062 0ustar norbertnorbert%D \module %D [ file=buff-imp-lua, %D version=2010.10.19, %D title=\CONTEXT\ Visualizer Macros, %D subtitle=\LUA, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{buff-imp-lua.lua}{1.001} \unprotect \definestartstop [LuaSnippet] [DefaultSnippet] \definestartstop [LuaSnippetName] [\c!color=, \c!style=boldface] \definestartstop [LuaSnippetNameCore] [\c!color=darkgreen, \c!style=boldface] \definestartstop [LuaSnippetNameBase] [\c!color=darkgreen, \c!style=boldface] \definestartstop [LuaSnippetNameLibraries] [\c!color=darkgreen, \c!style=boldface] \definestartstop [LuaSnippetBoundary] [\c!color=darkblue, \c!style=boldface] \definestartstop [LuaSnippetString] [LuaSnippet] \definestartstop [LuaSnippetQuote] [LuaSnippetBoundary] \definestartstop [LuaSnippetSpecial] [\c!color=darkred, \c!style=boldface] \definestartstop [LuaSnippetComment] [\c!color=darkyellow, \c!style=boldface] \definetyping [LUA] [\c!option=lua] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-11.lua0000644000175000017500000000457511571377075024204 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-11'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, 0x0E38, 0x0E39, 0x0E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E3F, 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0000, 0x0000, 0x0000, 0x0000 } context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-cod.lua0000644000175000017500000001125312130411274024101 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-cod'] = { version = 1.001, comment = "companion to luat-cod.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, loadfile = type, loadfile local match, gsub, find, format = string.match, string.gsub, string.find, string.format local texconfig, lua = texconfig, lua -- some basic housekeeping texconfig.kpse_init = false texconfig.shell_escape = 't' texconfig.max_print_line = 100000 texconfig.max_in_open = 127 -- registering bytecode chunks local bytecode = lua.bytecode or { } local bytedata = lua.bytedata or { } local bytedone = lua.bytedone or { } lua.bytecode = bytecode -- built in anyway lua.bytedata = bytedata lua.bytedone = bytedone lua.firstbytecode = 501 lua.lastbytecode = lua.lastbytecode or (lua.firstbytecode - 1) -- as we load ourselves again ... maybe return earlier function lua.registeredcodes() return lua.lastbytecode - lua.firstbytecode + 1 end -- no file.* functions yet function lua.registercode(filename,version) local barename = gsub(filename,"%.[%a%d]+$","") if barename == filename then filename = filename .. ".lua" end local basename = match(barename,"^.+[/\\](.-)$") or barename if not bytedone[basename] then local code = environment.luafilechunk(filename) if code then bytedone[basename] = true if environment.initex then local n = lua.lastbytecode + 1 bytedata[n] = { barename, version or "0.000" } bytecode[n] = code lua.lastbytecode = n end end end end local finalizers = { } function lua.registerfinalizer(f,comment) comment = comment or "unknown" if type(f) == "function" then finalizers[#finalizers+1] = { action = f, comment = comment } else print(format("\nfatal error: invalid finalizer, action: %s\n",comment)) os.exit() end end function lua.finalize(logger) for i=1,#finalizers do local finalizer = finalizers[i] finalizer.action() if logger then logger("finalize action: %s",finalizer.comment) end end end -- A first start with environments. This will be overloaded later. environment = environment or { } local environment = environment -- no string.unquoted yet local sourcefile = gsub(arg and arg[1] or "","^\"(.*)\"$","%1") local sourcepath = find(sourcefile,"/") and gsub(sourcefile,"/[^/]+$","") or "" local targetpath = "." -- delayed (via metatable): -- -- environment.jobname = tex.jobname -- environment.version = tostring(tex.toks.contextversiontoks) environment.initex = tex.formatname == "" if not environment.luafilechunk then function environment.luafilechunk(filename) if sourcepath ~= "" then filename = sourcepath .. "/" .. filename end local data = loadfile(filename) texio.write("<",data and "+ " or "- ",filename,">") if data then data() end return data end end if not environment.engineflags then -- raw flags local engineflags = { } for i=-10,#arg do local a = arg[i] if a then local flag, content = match(a,"^%-%-([^=]+)=?(.-)$") if flag then engineflags[flag] = content or "" end end end environment.engineflags = engineflags end -- We need a few premature callbacks in the format generator. We -- also do this when the format is loaded as otherwise we get -- a kpse error when disabled. This is an engine issue that will -- be sorted out in due time. local isfile = lfs.isfile local function source_file(name) local fullname = sourcepath .. "/" .. name if isfile(fullname) then return fullname end fullname = fullname .. ".tex" if isfile(fullname) then return fullname end if isfile(name) then return name end name = name .. ".tex" if isfile(name) then return name end return nil end local function target_file(name) return targetpath .. "/" .. name end local function find_read_file (id,name) return source_file(name) end local function find_write_file(id,name) return target_file(name) end local function open_read_file(name) local f = io.open(name,'rb') return { reader = function() return f:read("*line") end } end callback.register('find_read_file' , find_read_file ) callback.register('open_read_file' , open_read_file ) callback.register('find_write_file', find_write_file) context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-mis.mkvi0000644000175000017500000000541511754241457024304 0ustar norbertnorbert%D \module %D [ file=pack-mis, % moved from e.g. core-mis %D version=1998.01.29, %D title=\CONTEXT\ Core Macros, %D subtitle=Miscelaneous, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packing Macros / Misc Commands} \unprotect % a quite old mechanism already (but inheritance added) % % \defineplacement[name][settings] % \setupplacement [name][settings] % \placement [name][settings] % \place [settings] \installcorenamespace{placement} \installcommandhandler \??placement {placement} \??placement \appendtoks \setuevalue{\e!place\currentplacement}{\pack_placement{\currentplacement}}% \to \everydefineplacement \setupplacement [\c!left=\hss, \c!right=\hss, \c!linecorrection=\v!off, \c!depthcorrection=\v!off, \c!grid=\v!middle, %\c!before=, %\c!after=, \c!margin=\v!standard] \unexpanded\def\placement[#tag]% {\pack_placement{#tag}} \unexpanded\def\pack_placement#tag% {\bgroup \edef\currentplacement{#tag}% \doifnextoptionalelse\pack_placement_yes\pack_placement_nop} \def\pack_placement_yes[#settings]% {\setupcurrentplacement[#settings]% \pack_placement_nop} \def\pack_placement_nop {\dowithnextboxcontentcs\forgetall\pack_placement_flush\vbox} \def\pack_placement_flush {\setlocalhsize \placementparameter\c!before \begingroup \disableparpositions \setbox\nextbox\hbox to \localhsize {\placementparameter\c!left \flushnextbox \placementparameter\c!right}% %\ifinsidefloat \else % \page_backgrounds_add_local_to_box\nextbox %\fi \ifgridsnapping \pack_placement_flush_grid_yes \else \pack_placement_flush_grid_nop \fi \endgroup \placementparameter\c!after \egroup} \def\pack_placement_flush_grid_yes {\edef\p_grid{\placementparameter\c!grid}% \ifx\p_grid\empty \let\p_grid\v!middle \fi \pack_placement_flush_grid_noindent \snaptogrid[\p_grid]\hbox{\box\nextbox}} \def\pack_placement_flush_grid_nop {\edef\p_linecorrection {\placementparameter\c!linecorrection}% \edef\p_depthcorrection{\placementparameter\c!depthcorrection}% \ifx\p_linecorrection\v!on \startbaselinecorrection \fi \pack_placement_flush_grid_noindent \box\nextbox \ifx\p_depthcorrection\v!on \baselinecorrection \fi \ifx\p_linecorrection\v!on \stopbaselinecorrection \fi} \def\pack_placement_flush_grid_noindent {\edef\p_margin{\placementparameter\c!margin}% \ifx\p_margin\v!standard \noindent \else\ifx\p_margin\v!yes \noindent \fi\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-rul.mkiv0000644000175000017500000002464412161703335024321 0ustar norbertnorbert%D \module %D [ file=node-rul, %D version=2009.11.03, % 1995.10.10, %D title=\CONTEXT\ Core Macros, %D subtitle=Bars, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: ex and and em traveling with attribute % todo: this will move to typo-rul + ctxcommands \writestatus{loading}{ConTeXt Core Macros / Bars} %D \macros %D {underbar,underbars, %D overbar,overbars, %D overstrike,overstrikes, %D setupbar} %D %D In the rare case that we need undelined words, for instance because all font %D alternatives are already in use, one can use \type {\underbar} and \type %D {\overstrike} and their plural forms. %D %D \startbuffer %D \underbars {drawing \underbar{bars} under words is a typewriter leftover} %D \overstrikes {striking words makes them \overstrike {unreadable} but %D sometimes even \overbar {top lines} come into view.} %D \stopbuffer %D %D \typebuffer %D %D \startlines %D \getbuffer %D \stoplines %D %D The next macros are derived from the \PLAIN\ \TEX\ one, but also supports %D nesting. The \type{$} keeps us in horizontal mode and at the same time %D applies grouping. %D %D \showsetup{underbar} %D \showsetup{underbars} %D \showsetup{overbar} %D \showsetup{overbars} %D \showsetup{overstrike} %D \showsetup{overstrikes} %D %D \showsetup{setupunderbar} %D %D Nested bars can be configured by appending \type {:} to the category. %D Normally units in combination with a unitless thickness specification but %D there units can be used too. %D %D \startbuffer %D \setupbars[unit=mm,rulethickness=1] bar\startbar[underbar]foo\stopbar bar\blank %D \setupbars[unit=ex,rulethickness=1] bar\startbar[underbar]foo\stopbar bar\blank %D \setupbars[unit=pt,rulethickness=1] bar\startbar[underbar]foo\stopbar bar\blank %D \setupbars[unit=pt,rulethickness=10pt] bar\startbar[underbar]foo\stopbar bar %D \stopbuffer %D %D \typebuffer \blank \getbuffer \blank %D %D As with many early usage of \LUA\ in \MKIV\ this mechanism explores a way %D to deal with local settings at the \TEX\ end and remembering parameters %D at the \LUA\ end. We might do things differently now, but as settings normally %D don't change that often, we're not in a hurry to do that now. The problem at %D the \LUA\ end is that we don't know when to clean up. \unprotect %definesystemattribute[ruled] %definesystemattribute[shifted] \registerctxluafile{node-rul}{1.001} \installcorenamespace{bar} \installcorenamespace{barindex} \installcorenamespace{barattribute} \installcorenamespace{barstack} \installcommandhandler \??bar {bar} \??bar \newtoks\t_node_rules_checklist \let\c_node_rules_index\relax % temporary synonym \let\p_node_rules_color\empty \let\setupbars\setupbar \appendtoks \ifsecondargument \node_rules_define \else \the\t_node_rules_checklist \fi \to \everysetupbar \appendtoks \ifcsname\??barindex\currentbar\endcsname \csname\??barindex\currentbar\endcsname\zerocount \else \expandafter\newcount\csname\??barindex\currentbar\endcsname \fi \normalexpanded{\t_node_rules_checklist{\node_rules_redefine{\currentbar}\the\t_node_rules_checklist}}% \node_rules_define \setuevalue\currentbar{\node_rules_direct{\currentbar}}% \to \everydefinebar \unexpanded\def\node_rules_define {\edef\p_node_rules_color{\barparameter\c!color}% \setevalue{\??barattribute\currentbar}{\number\ctxlua{nodes.rules.define { method = \barparameter\c!method, offset = \barparameter\c!offset, continue = "\barparameter\c!continue", dy = \barparameter\c!dy, rulethickness = "\barparameter\c!rulethickness", unit = "\barparameter\c!unit", order = "\barparameter\c!order", max = \barparameter\c!max, ma = \thecolormodelattribute, ca = \thecolorattribute\p_node_rules_color, ta = \thetransparencyattribute\p_node_rules_color }}}} \unexpanded\def\node_rules_redefine#1% {\def\currentbar{#1}\node_rules_define} \unexpanded\def\node_rules_direct#1% {\groupedcommand{\node_rules_set{#1}}\relax} \def\node_rules_set {\ctxlua{nodes.rules.enable()}% will be moved to lua \glet\node_rules_set\node_rules_set_indeed \node_rules_set} \def\node_rules_set_indeed#1% maybe reverse the 1000 (also maybe use more attributes instead of settings) {\edef\currentbar{#1}% \expandafter\let\expandafter\c_node_rules_index\csname\??barindex#1\endcsname \advance\c_node_rules_index\plusone \usebarstyleandcolor\c!foregroundstyle\c!foregroundcolor \attribute\ruledattribute\numexpr \plusthousand*\c_node_rules_index +\csname\??barattribute#1\ifcsname\??bar#1:\number\c_node_rules_index\s!parent\endcsname:\number\c_node_rules_index\fi\endcsname \relax} \unexpanded\def\startbar[#1]% {\begingroup \node_rules_set{#1}} \unexpanded\def\stopbar {\endgroup} \unexpanded\def\setbar[#1]% {\node_rules_set{#1}} % ungrouped \newcount\c_node_rules_nesting % todo: same as colors \unexpanded\def\pushbar[#1]% {\global\advance\c_node_rules_nesting\plusone \expandafter\edef\csname\??barstack\number\c_node_rules_nesting\endcsname{\attribute\ruledattribute\the\attribute\ruledattribute}% \node_rules_set{#1}} \unexpanded\def\popbar {\csname\??barstack\number\c_node_rules_nesting\endcsname \global\advance\c_node_rules_nesting\minusone} \setupbars [\c!method=0, % new: 0=center nested, 1=stack nested \c!continue=\v!no, \c!offset=0, % upwards, replaces: topoffset bottomoffset \c!dy=0, \c!max=3, \c!style=, \c!rulethickness=.1, \c!order=\v!foreground, \c!unit=ex, % so now we are relative \c!color=] % replaces: rulecolor % \definebar[touchbar] [\c!method=0,\c!dy=-0.4,\c!offset=-0.0] % \definebar[touchbars] [touchbar] [\c!continue=\v!yes] \definebar[\v!overstrike][\c!method=0,\c!dy=0.4,\c!offset=0.5,\c!continue=\v!yes] \definebar[\v!underbar] [\c!method=1,\c!dy=-0.4,\c!offset=-0.3,\c!continue=\v!yes] \definebar[\v!overbar] [\c!method=1,\c!dy=0.4,\c!offset=1.8,\c!continue=\v!yes] \definebar [\v!understrike] [\c!method=0, \c!offset=1.375, \c!rulethickness=2.5, \c!continue=\v!yes, \c!order=\v!background, \c!color=lightgray] \definebar[\v!overstrikes] [\v!overstrike] [\c!continue=\v!no] \definebar[\v!underbars] [\v!underbar] [\c!continue=\v!no] \definebar[\v!overbars] [\v!overbar] [\c!continue=\v!no] \definebar[\v!understrikes][\v!understrike][\c!continue=\v!no] % we want these always so ... \expandafter\let\expandafter\overstrike \csname\v!overstrike \endcsname \expandafter\let\expandafter\underbar \csname\v!underbar \endcsname \expandafter\let\expandafter\overbar \csname\v!overbar \endcsname \expandafter\let\expandafter\overstrikes\csname\v!overstrikes\endcsname \expandafter\let\expandafter\underbars \csname\v!underbars \endcsname \expandafter\let\expandafter\overbars \csname\v!overbars \endcsname \unexpanded\def\setupunderbar[#1]% too incompatible for the moment {} %D This will move: (a bit duplicated) \installcorenamespace{shift} \installcorenamespace{shiftindex} \installcorenamespace{shiftattribute} \installcommandhandler \??shift {shift} \??shift \newtoks\t_node_shifts_checklist \let\c_node_shifts_index\relax % temporary synonym \let\setupshifts\setupshift \appendtoks \ifsecondargument \node_shifts_define \else \the\t_node_shifts_checklist \fi \to \everysetupshift \appendtoks \ifcsname\??shiftindex\currentshift\endcsname \csname\??shiftindex\currentshift\endcsname\zerocount \else \expandafter\newcount\csname\??shiftindex\currentshift\endcsname \fi \normalexpanded{\t_node_shifts_checklist{\node_shifts_redefine{\currentshift}\the\t_node_shifts_checklist}}% \node_shifts_define \setuevalue\currentshift{\node_shifts_direct{\currentshift}}% \to \everydefineshift \unexpanded\def\node_shifts_define {\setevalue{\??shiftattribute\currentshift}{\number\ctxlua{nodes.shifts.define { method = \shiftparameter\c!method, continue = "\shiftparameter\c!continue", dy = \shiftparameter\c!dy, unit = "\shiftparameter\c!unit", }}}} \unexpanded\def\node_shifts_redefine#1% {\def\currentshift{#1}\node_shifts_define} \unexpanded\def\node_shifts_set {\ctxlua{nodes.shifts.enable()}% \glet\node_shifts_set\node_shifts_set_indeed \node_shifts_set} % \unexpanded\def\node_shifts_direct#1% % {\doisolatedgroupedalign{\node_shifts_set{#1}}\donothing} \unexpanded\def\node_shifts_direct#1% {\groupedcommand {\begingroup\dostartisolation\begingroup\node_shifts_set{#1}} {\endgroup\dostopisolation\endgroup}} \def\node_shifts_set_indeed#1% todo: check parent ! {\def\currentshift{#1}% \expandafter\let\expandafter\c_node_shifts_index\csname\??shiftindex#1\endcsname \advance\c_node_shifts_index\plusone \attribute\shiftedattribute\numexpr \plusthousand*\c_node_shifts_index +\csname\??shiftattribute#1\ifcsname\??shift#1:\number\c_node_shifts_index\s!parent\endcsname:\number\c_node_shifts_index\fi\endcsname \relax \useshiftstyleandcolor\c!style\c!color \dosetupisolatedalign{\shiftparameter\c!align}} \unexpanded\def\startshift[#1]% {\begingroup \node_shifts_set{#1}} \unexpanded\def\stopshift {\endgroup} \setupshifts [\c!method=0, \c!continue=\v!no, \c!dy=0, \c!unit=ex, \c!align=, \c!style=, \c!color=] \defineshift [\v!shiftup] [\c!method=0,\c!dy=-1,\c!unit=ex,\c!continue=\v!yes,\c!style=\txx,\c!color=] \defineshift [\v!shiftdown] [\c!method=1,\c!dy=.3,\c!unit=ex,\c!continue=\v!yes,\c!style=\txx,\c!color=] % we want these always so ... \expandafter\let\expandafter\shiftup \csname\v!shiftup \endcsname \expandafter\let\expandafter\shiftdown \csname\v!shiftdown \endcsname % This is a weird helper: \unexpanded\def\dostartisolation{\signalcharacter} \unexpanded\def\dostopisolation {\signalcharacter} \unexpanded\def\doisolator {\signalcharacter} \unexpanded\def\dosetupisolatedalign#1% {\doisolator \setupalign[#1]\relax} \unexpanded\def\doisolatedgroupedalign#1#2% {\groupedcommand {\begingroup\dostartisolation\begingroup#1} {#2\endgroup\dostopisolation\endgroup}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mec.mkii0000644000175000017500000000307611571377075024274 0ustar norbertnorbert% filtered from html files by Patrick Ion % % ISOAMSC Characters Extended % % Added Math Symbols: Delimiters \defineMMLentity dlcorn 231E {unknown} lower left corner \defineMMLentity drcorn 231F {unknown} lower right corner \defineMMLentity gtlPar E296 {unknown} double left parenthesis, greater \defineMMLentity langd E297 {unknown} left angle, dot \defineMMLentity lbrke E299 {unknown} left bracket, equal \defineMMLentity lbrksld E29D {unknown} left bracket, solidus bottom corner \defineMMLentity lbrkslu E29B {unknown} left bracket, solidus top corner \defineMMLentity lceil 2308 {\lceil} left ceiling \defineMMLentity lfloor 230A {\lfloor} left floor \defineMMLentity lmoust E294 {\lmoustache} left moustache \defineMMLentity lparlt E292 {unknown} left parenthesis, lt \defineMMLentity ltrPar E295 {unknown} double right parenthesis, less \defineMMLentity rangd E298 {unknown} right angle, dot \defineMMLentity rbrke E29A {unknown} right bracket, equal \defineMMLentity rbrksld E29C {unknown} right bracket, solidus bottom corner \defineMMLentity rbrkslu E29E {unknown} right bracket, solidus top corner \defineMMLentity rceil 2309 {\rceil} right ceiling \defineMMLentity rfloor 230B {\rfloor} right floor \defineMMLentity rmoust E293 {\rmoustache} right moustache \defineMMLentity rpargt E291 {unknown} right paren, gt \defineMMLentity ulcorn 231C {unknown} upper left corner \defineMMLentity urcorn 231D {unknown} upper right corner context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-eff.mkiv0000644000175000017500000000350312130411274024265 0ustar norbertnorbert%D \module %D [ file=attr-eff, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Effects, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Attribute Macros / Effects} \registerctxluafile{attr-eff}{1.001} \unprotect \installcorenamespace{effect} \installcommandhandler \??effect {effect} \??effect \setupeffect [\c!method=\v!none, \c!stretch=\zerocount, \c!rulethickness=\zeropoint, \c!alternative=\v!normal] \appendtoks \edef\p_method{\effectparameter\c!method}% \ifx\p_method\v!method \setuxvalue{\e!start\currenteffect}{\starteffect[#1]}% \setuxvalue{\e!stop \currenteffect}{\stopeffect}% \fi \to \everydefineeffect \unexpanded\def\starteffect[#1]% {\ctxcommand{triggereffect{ alternative = "\namedeffectparameter{#1}\c!alternative", stretch = \number\namedeffectparameter{#1}\c!stretch, rulethickness = \number\dimexpr\namedeffectparameter{#1}\c!rulethickness\relax }}} \unexpanded\def\stopeffect % can be special {\ctxcommand{triggereffect()}} % v!normal 0 0 \unexpanded\def\effect[#1]% {\groupedcommand{\starteffect[#1]}{\stopeffect}} % yes or no grouped \defineeffect [\v!inner] [\c!alternative=\v!inner,\c!rulethickness=.25pt] \defineeffect [\v!outer] [\c!alternative=\v!outer,\c!rulethickness=.25pt] \defineeffect [\v!both] [\c!alternative=\v!both, \c!rulethickness=.25pt] \defineeffect [\v!normal] [\c!alternative=\v!normal] \defineeffect [\v!hidden] [\c!alternative=\v!hidden] \defineeffect [\v!stretch] [\c!alternative=\v!stretch,\c!stretch=1] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-50.tex0000644000175000017500000000422611754241457023701 0ustar norbertnorbert%D \module %D [ file=s-pre-50, %D version=2003.01.26, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 50, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 When my mailbox started to overflow with messages about %D problems with the presentation step mechanism, I looked up %D old presentaton, hacked a bit and cooked up an alternative %D that is less dependent on \PDF\ trickery. %D %D Consider it a cheap trick and prelude to a couple of new %D presentation styles. (At the time of writing this, I %D still have some 10 of those styles to clean up and %D document.) You can give it a try: %D %D \starttyping %D texexec --pdf --mode=demo s-pre-50 %D \stoptyping % Basic definitions. \defineframedtext [horizontal] [width=\textwidth, frame=off, strut=no, height=fit, align={right,lohi}, before=, after=] \definecollector [contribution] [state=repeat, corner={left,bottom}, location={right,bottom}] %D An example of tuning: \startmode[demo] \setupcollector [contribution] [voffset=-.25\bodyfontsize] \setupframedtexts [horizontal] [background=color, backgroundcolor=darkgray, foregroundcolor=white] \stopmode %D Structure and trick. \def\StartSteps {\doifnotmode{mkiv}{\checkutilities}} \def\StopSteps {\resetcollector[contribution]} \long\def\StartStep#1\StopStep {\setcollector [contribution] {\starthorizontal[none]#1\stophorizontal} \flushcollector[contribution] \page} %D Trick. Nowadays we can use streams. \installoutputroutine\FlushStep {\StartStep\unvbox\normalpagebox\StopStep} %D Demo. \doifnotmode{demo}{\endinput} \setupcolors[state=start] \setuppapersize[S6][S6] \setuplayout[middle] \starttext \StartSteps \title[whow]{How Much?} \FlushStep \item More \FlushStep \item And More \FlushStep \item And Even More \FlushStep \StartStep And So On \StopStep \StopSteps \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sto.lua0000644000175000017500000001052012130411274024145 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sto'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local setmetatable, getmetatable, type = setmetatable, getmetatable, type utilities = utilities or { } utilities.storage = utilities.storage or { } local storage = utilities.storage function storage.mark(t) if not t then print("\nfatal error: storage cannot be marked\n") os.exit() return end local m = getmetatable(t) if not m then m = { } setmetatable(t,m) end m.__storage__ = true return t end function storage.allocate(t) t = t or { } local m = getmetatable(t) if not m then m = { } setmetatable(t,m) end m.__storage__ = true return t end function storage.marked(t) local m = getmetatable(t) return m and m.__storage__ end function storage.checked(t) if not t then report("\nfatal error: storage has not been allocated\n") os.exit() return end return t end -- function utilities.storage.delay(parent,name,filename) -- local m = getmetatable(parent) -- m.__list[name] = filename -- end -- -- function utilities.storage.predefine(parent) -- local list = { } -- local m = getmetatable(parent) or { -- __list = list, -- __index = function(t,k) -- local l = require(list[k]) -- t[k] = l -- return l -- end -- } -- setmetatable(parent,m) -- end -- -- bla = { } -- utilities.storage.predefine(bla) -- utilities.storage.delay(bla,"test","oepsoeps") -- local t = bla.test -- table.print(t) -- print(t.a) function storage.setinitializer(data,initialize) local m = getmetatable(data) or { } m.__index = function(data,k) m.__index = nil -- so that we can access the entries during initializing initialize() return data[k] end setmetatable(data, m) end local keyisvalue = { __index = function(t,k) t[k] = k return k end } function storage.sparse(t) t = t or { } setmetatable(t,keyisvalue) return t end -- table namespace ? local function f_empty () return "" end -- t,k local function f_self (t,k) t[k] = k return k end local function f_table (t,k) local v = { } t[k] = v return v end local function f_ignore() end -- t,k,v local t_empty = { __index = f_empty } local t_self = { __index = f_self } local t_table = { __index = f_table } local t_ignore = { __newindex = f_ignore } function table.setmetatableindex(t,f) if type(t) ~= "table" then f, t = t, { } end local m = getmetatable(t) if m then if f == "empty" then m.__index = f_empty elseif f == "key" then m.__index = f_self elseif f == "table" then m.__index = f_table else m.__index = f end else if f == "empty" then setmetatable(t, t_empty) elseif f == "key" then setmetatable(t, t_self) elseif f == "table" then setmetatable(t, t_table) else setmetatable(t,{ __index = f }) end end return t end function table.setmetatablenewindex(t,f) if type(t) ~= "table" then f, t = t, { } end local m = getmetatable(t) if m then if f == "ignore" then m.__newindex = f_ignore else m.__newindex = f end else if f == "ignore" then setmetatable(t, t_ignore) else setmetatable(t,{ __newindex = f }) end end return t end function table.setmetatablecall(t,f) if type(t) ~= "table" then f, t = t, { } end local m = getmetatable(t) if m then m.__call = f else setmetatable(t,{ __call = f }) end return t end function table.setmetatablekey(t,key,value) local m = getmetatable(t) if not m then m = { } setmetatable(t,m) end m[key] = value return t end function table.getmetatablekey(t,key,value) local m = getmetatable(t) return m and m[key] end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mis.mkii0000644000175000017500000001667411754241457024276 0ustar norbertnorbert%D \module %D [ file=page-mis, %D version=2008.11.17, % was part of page-flt.tex / 2000.10.20 %D title=\CONTEXT\ Page Macros, %D subtitle=Misc Float Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Misc Float Things} \unprotect \newif\ifmargeblokken \def\dosetupmarginblocks[#1]% {\getparameters[\??mb][#1]% \doifelse\@@mbstate\v!start {\showmessage\m!layouts4\empty \margeblokkentrue \let\somenextfloat\dosomenextfloat \let\startmarginblock\dostartmarginblock \let\stopmarginblock\dostopmarginblock}% {\showmessage\m!layouts5\empty \margeblokkenfalse \def\somenextfloat[##1]% {\someelsefloat[##1,\v!here]}% \let\startmarginblock\dontstartmargeblok \let\stopmarginblock\dontstopmargeblok}} \def\setupmarginblocks {\dosingleargument\dosetupmarginblocks} \newbox\marginbox \def\dosomenextfloat[#1]% {\global\setbox\marginbox\vbox {\hsize\@@mbwidth \unvcopy\marginbox \ifvoid\marginbox\else\expandafter\@@mbinbetween\fi \box\floatbox\filbreak}% \ifdim\ht\marginbox>\textheight \dosavefloatinfo \else \doinsertfloatinfo \fi} \newbox\preparedmarginbox \def\reshapemargin {\ifdim\ht\preparedmarginbox>\zeropoint \beginofshapebox \unvbox\preparedmarginbox \endofshapebox \reshapebox {\box\shapebox}% \setbox\preparedmarginbox\vbox to \textheight {\@@mbtop \flushshapebox \@@mbbottom}% \fi} \def\plaatsrechtermargeblok {\hskip\rightmarginwidth} \def\plaatslinkermargeblok {\hskip\leftmarginwidth} \def\checkmargeblokken {\ifvoid\marginbox\else\docheckmargeblokken\fi} \def\docheckmargeblokken % erg inefficient {\setbox\preparedmarginbox\vbox {\forgetall \splittopskip\topskip \ifvoid\marginbox\else \ifdim\ht\marginbox>\textheight \vsplit\marginbox to \textheight \else \unvbox\marginbox \fi \fi}% \reshapemargin \setbox\preparedmarginbox\vbox {\@@mbbefore\box\preparedmarginbox\@@mbafter}% \def\rightmarginbox {\def\plaatsrechtermargeblok {\setbox\preparedmarginbox\hbox to \rightmarginwidth {\@@mbleft\box\preparedmarginbox\@@mbright}% \vsmashbox\preparedmarginbox \box\preparedmarginbox}}% \def\leftmarginbox {\def\plaatslinkermargeblok {\setbox\preparedmarginbox\hbox to \leftmarginwidth {\@@mbright\box\preparedmarginbox\@@mbleft}% \vsmashbox\preparedmarginbox \box\preparedmarginbox}}% \processaction % traag [\@@mblocation] [ \v!inmargin=>\doifbothsidesoverruled\rightmarginbox\rightmarginbox\leftmarginbox, \v!middle=>\doifbothsidesoverruled\rightmarginbox\leftmarginbox\rightmarginbox, \v!left=>\leftmarginbox, \v!right=>\rightmarginbox, \s!unknown=>\setbox\preparedmarginbox\hbox{}]} \def\dostartmarginblock % 2 maal \vbox ivm \unvbox elders {\global\setbox\marginbox\vtop\bgroup\vbox\bgroup \hsize\@@mbwidth \ifvoid\marginbox\else \unvbox\marginbox \@@mbinbetween \fi \setupalign[\@@mbalign]% \dostartattributes\??mb\c!style\c!color{}% \begstrut\ignorespaces} \def\dostopmarginblock {\unskip\endstrut \dostopattributes \egroup \egroup} \def\dontstartmargeblok {\@@mbbefore \bgroup \dostartattributes\??mb\c!style\c!color\empty} \def\dontstopmargeblok {\dostopattributes \egroup \@@mbafter} \newcounter\nofpostponedblocks \newif\ifinpostponing \newevery\everytopofpage\relax \appendtoks \the\everytopofpage \to\everystarttext \appendtoks\global\everytopofpage\emptytoks\to\everystoptext % \startpostponing [pagenumber] [+pageoffset] % % \startpostponing[2] % PAGE 2 \blank % \stoppostponing % % \startpostponing[+1] % PAGE +1 \blank % \stoppostponing % % \startpostponing[+2] % PAGE +2 \blank % \stoppostponing % % \starttext \dorecurse{4}{\input tufte \page} \stoptext \newtoks \postponedpageblocks \newcounter\nofpostponedpageblocks % \ifinpostponing: handhaven, want gebruikt in stijlen ! ! ! ! ! \def\flushpagefloats {\doifoddpageelse {\ifvoid\collectedleftpagefloats \ifvoid\collectedrightpagefloats\else \unvbox\collectedrightpagefloats \page %\the\everytopofpage \fi \fi} {\ifvoid\collectedleftpagefloats\else \unvbox\collectedleftpagefloats \page %\the\everytopofpage \fi \ifvoid\collectedrightpagefloats\else \unvbox\collectedrightpagefloats \page %\the\everytopofpage \fi}% \ifvoid\collectedpagefloats\else % message \unvbox\collectedpagefloats \fi} % \def\flushrestfloats % {\doif{\floatsharedparameter\c!cache}\v!no\doflushfloats} % \let\flushrestfloats\relax \def\dopostponeblock {\bgroup % new may 2004 \setsystemmode\v!postponing % new may 2004 \the\everytopofpage %\flushrestfloats \flushpagefloats \donefalse \ifinpostponing \else \ifcase\nofpostponedblocks \else \donetrue \fi \ifcase\nofpostponedpageblocks \else \donetrue \fi \fi \ifdone \bgroup % we need the color/font switch, else problems inside split verbatim \setnormalcatcodes % postponing in verbatim \pushpostponedpagecolor \restoreglobalbodyfont % The \nof-test is \global\pagetotal\zeropoint % recently added and \global\inpostponingtrue % definitely needed else \the\postponedpageblocks % we can loose or disorder \dorecurse\nofpostponedblocks % floats; anyhow, this {\getbuffer[pbuf-\recurselevel]}% % mechanism is still \doflushfloats % new but potential dangerous % suboptimal and needs a \doglobal\newcounter\nofpostponedblocks % proper analysis \global\inpostponingfalse \poppostponedpagecolor \egroup \fi \egroup} % new may 2004 \def\getpostponedblock#1#2% {\doif{#1}\realfolio{\getbuffer[rbuf-#2]}} % no \ifnum, avoid \fi % beware, \dosingleempty conflicts with buffers (feeds back the \par) \setvalue{\e!start\v!postponing}% {\bgroup \obeylines \doifnextoptionalelse{\egroup\nodostartpostponing}{\egroup\dodostartpostponing}} \def\nodostartpostponing[#1]% {\doglobal\increment\nofpostponedpageblocks \bgroup % a little bit of misusing grouping \doifinstring{+}{#1}\advance \realpageno#1\relax % ugly but efficient \doglobal\appendetoks\noexpand\getpostponedblock {\realfolio}{\nofpostponedpageblocks}\to\postponedpageblocks \egroup \showmessage\m!layouts3\nofpostponedpageblocks \dostartbuffer[rbuf-\nofpostponedpageblocks]% [\e!start\v!postponing][\e!stop\v!postponing]} \def\dodostartpostponing {\doglobal\increment\nofpostponedblocks \showmessage\m!layouts3\nofpostponedblocks \expanded{\dostartbuffer[pbuf-\nofpostponedblocks][\e!start\v!postponing][\e!stop\v!postponing]}} % Setups: \setupmarginblocks [\c!state=\v!start, \c!location=\v!inmargin, \c!width=\rightmarginwidth, \c!style=, \c!color=, \c!align=, \c!left=, \c!right=, \c!top=, \c!inbetween=\blank, \c!bottom=\vfill, \c!before=, \c!after=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-exa.mkii0000644000175000017500000002774611754241457024272 0ustar norbertnorbert%D \module %D [ file=java-exa, %D version=2002.??.??, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Example Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % XFDF versus HTML % localhost versus remote versus set % filename | filename-nr => name % fakename | fakename-nr => file upload, unless localhost % % we erase the list because otherwise we end up in browser remembering % problems; also, it is not possible to set upload fields 'manually' \startJSpreamble request_1 used now var example_method = "HTML" ; var example_host = "" ; var example_port = "" ; var example_url = "" ; var example_file = "" ; var example_log = true ; % false function stripped_exa_value( name ) { f = this.getField(name) ; if (f) { str = f.value ; if (str.indexOf(name+'-')==0) { str = str.substr(name.length+1) ; } return str ; } else { return "" ; } } function identify_example_url ( ) { if (example_log) { console.clear ; console.println("base url: "+this.baseURL) ; console.println("this url: "+this.URL) ; } if (this.baseURL != "") { example_url = this.baseURL ; } else { if (this.URL != "") { example_url = this.URL } } if (example_url.indexOf("file://")>=0) { example_url = "" ; } str = stripped_exa_value("examplehost") ; if (str != "auto") { example_host = str ; if (str == "localhost") { example_port = "8061" } } str = stripped_exa_value("exampleport") ; if (str != "auto") { example_port = str ; } if (example_log) { console.println("example_url: "+example_url) ; console.println("example_host: "+example_host) ; console.println("example_port: "+example_port) ; } } function check_example_url ( url ) { if (url.indexOf("file://")>=0) { url = "http://localhost:8061" ; console.println("file url replaced by: "+url) ; } else { if (url.indexOf("://")<0) { url = "http://" + url ; } if (example_log) { console.println("url before check: "+url) ; } % url = url.replace(/(http:\\\/\\\/.+)(\\\/.*$)/, "$1") ; url = url.replace(/(https*:\\\/\\\/.+?)(\\\/.*$)/, "$1/exarequest") ; if (example_log) { console.println("url after check: "+url) ; } } return url ; } function set_example_xfdf ( method ) { example_method = method ; } function set_example_file ( file ) { example_method = file ; } function set_example_host ( host ) { example_host = host ; } function set_example_port ( port ) { example_host = host ; } function do_erase_example_file(tag) { f = this.getField(tag) ; if (f) { f.value = "" ; } } function do_erase_example_list(tag) { for (i=1;i<=100;i++) { f = this.getField(tag+"-"+i) ; if (f) { f.value = "" ; } else { return } } } function do_submit_example_url ( url ) { if ((example_method == "XFDF" ) || (url.indexOf("localhost")>=0)) { do_erase_example_file("fakename") ; do_erase_example_list("fakename") ; } url = check_example_url(url) ; if (example_log) { console.println("submitting form to "+url+" using method "+example_method) ; } if (example_file != "") { url = url + "/" + example_file ; } % we need the bFDF for acrobat 5 this.submitForm({cURL : url, bFDF : false, cSubmitAs : example_method}) ; } function submit_example_form ( ) { identify_example_url() ; if (example_host != "") { if (example_port != "") { do_submit_example_url(example_host+":"+example_port) ; } else { do_submit_example_url(example_host) ; } } else { if (example_url != "") { do_submit_example_url(example_url) ; } else { if (example_port != "") { do_submit_example_url("localhost"+":"+example_port) ; } else { do_submit_example_url("localhost:8061") ; % local exampler } } } resetfilename () ; } function submit_form ( host, port) { set_example_host(host) ; set_example_post(post) ; submit_example_form ; } \stopJSpreamble \startJSpreamble request_2 used now var exa_command = "" ; var exa_option = "" ; var exa_filename = "" ; var exa_filelist = "" ; var exa_registered = "" ; function set_request (command,option) { exa_command = command ; if (exa_command == "") { exa_option = option ; } else { if (option == "") { exa_option = "" ; } else { if (option.indexOf("--")<0) { exa_option = "--action=" + option ; } else { exa_option = option ; } } } } function assemble_request ( ) { v = this.getField('filename') ; if (v) { exa_filename = v.value ; } v = this.getField('filelist') ; if (v) { exa_filelist = v.value ; } % exa_filename = exa_filename.replace(/\\\\/g,'/') ; % exa_filelist = exa_filelist.replace(/\\\\/g,'/') ; str = "\\n" ; str = str+"" ; if (exa_filelist == "") { exa_filelist = exa_registered ; } else { if (exa_registered != "") { exa_filelist = exa_filelist + "\\n" + exa_registered ; } } if (exa_command != "") { str = str+""+exa_command+"" ; } if (exa_option != "") { str = str+""+exa_option+"" ; } if (exa_filename != "") { str = str+""+exa_filename+"" ; } var fls = "" ; if (exa_filelist != "") { % old method, soon obsolete lst = exa_filelist.split(/\\s/) ; for (i=0;i"+lst[i]+"" ; } } else { if (exa_multiple) { for (i=1;i<=100;i++) { % console.println("file field "+i) ; f = this.getField("filename-"+ i) ; % if (f) { if (f.value != "") { % if (g) { if (g.value == "") { % fls = fls+""+f.value+"" ; % } else { % fls = fls+""+f.value+"" ; % } } else { % fls = fls+""+f.value+"" ; % } % } } if (f) { if (f.value != "") { fls = fls + "" ; } else { % console.println("b") ; fls = fls + " label='" + g.value + "'>" ; } } else { % console.println("c") ; fls = fls + ">" ; } fls = fls + f.value + "" ; } } } } } if (fls != "") { str = str + "" + fls + "" ; } str = str + "" ; v = this.getField('exa:request') ; if (v) { v.value = str ; } } \stopJSpreamble \startJSpreamble request_3 used now var exa_multiple = false ; function setfilename ( suffixes ) { if (event.targetName) { var name = event.targetName ; var fake = name.replace(/filename/,"fakename") ; } else { var name = 'filename' ; var fake = 'fakename' ; } f = this.getField(fake) ; if (f) { f.browseForFileToSubmit() ; if ((suffixes != "") && (f.value != "")) { % s = suffixes.replace(/,/g,"|") ; r = new RegExp() ; s = "\\\\.(" + s + ")$" ; r.compile(s, "i") ; if (f.value.search(r)<=0) { f.value = "" ; app.alert('This filetype is not permitted.') ; % % lst = suffixes.split(/,/) ; % ok = false ; % for (i=0;i=0) { % f.value = "" ; % } % } } this.dirty = false ; } function addfilename () { if (exa_multiple) { h = this.getField("filelist") ; g = this.getField("filename") ; if ((g) && (h)) { str = g.value ; if (h.value == "") { h.value = str ; } else { h.value = h.value + "\\n" + str ; } g.value = "" ; this.value = "" ; } } this.dirty = false ; } % this only works with client that assembles request function registerfilename (str) { if (str!="") { h = this.getField("filelist") ; if (h) { if (h.value != "") { h.value = h.value + "\\n" ; } h.value = h.value + str ; } else { if (exa_registered != "") { exa_registered = exa_registered + "\\n" ; } exa_registered = exa_registered + str ; } } console.show ; console.println('registered files') ; console.println("file: "+str) ; console.println("list: "+exa_registered) ; this.dirty = false ; } function checkfilename () { } function getfilename ( suffixes ) { setfilename(suffixes) ; checkfilename() ; addfilename() ; } function resetfilename () { do_erase_example_file("fakename") ; do_erase_example_file("filename") ; do_erase_example_file("filelist") ; do_erase_example_list("filename") ; do_erase_example_list("fakename") ; } \stopJSpreamble \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mcs.mkii0000644000175000017500000003052711571377075024331 0ustar norbertnorbert\setinterfacemessage{references}{1}{neznama reference --} \setinterfacemessage{references}{30}{neznamy objekt --} \setinterfacemessage{references}{3}{neznamy typ reference --} \setinterfacemessage{references}{2}{duplicitni reference -- na strane --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{nedovolena reference --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{reference} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{duplicitni object --} \setinterfacemessage{references}{21}{dokument -- nacten} \setinterfacemessage{references}{22}{dokument -- neni interaktivni} \setinterfacemessage{references}{23}{obskurni (nejasna) reference -- (prefix=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{number --} \setinterfacemessage{handlings}{1}{font handling --} \setinterfacemessage{handlings}{3}{unknown font handling --} \setinterfacemessage{handlings}{2}{font handling -- is loaded} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{system} \setinterfacemessage{systems}{41}{externi soubor -- ve skupine -- neexistuje} \setinterfacemessage{systems}{9}{-- nenalezeno/nezpracovano} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{nova verze pomocneho souboru, je treba druheho behu} \setinterfacemessage{systems}{21}{pomocny soubor necten} \setinterfacemessage{systems}{20}{vyznam (trideni) -- nacten} \setinterfacemessage{systems}{5}{makra z -- nactena} \setinterfacemessage{systems}{4}{prikaz -- je jiz definovan} \setinterfacemessage{systems}{27}{verze} \setinterfacemessage{systems}{26}{registry} \setinterfacemessage{systems}{25}{reference} \setinterfacemessage{systems}{24}{plovouci bloky} \setinterfacemessage{systems}{1}{nacteni pomocneho souboru odlozeno (typemode)} \setinterfacemessage{systems}{23}{-- upraveno na --} \setinterfacemessage{systems}{22}{pouzijte platny pomocny soubor} \setinterfacemessage{systems}{2}{-- nacteno} \setinterfacemessage{systems}{19}{vyznam (synonyma) -- nacten} \setinterfacemessage{systems}{18}{synonymum -- -- neexistuje} \setinterfacemessage{systems}{7}{makra z -- jsou jiz nactena} \setinterfacemessage{systems}{6}{zadna makra v -- nenalezena} \setinterfacemessage{systems}{14}{vynucena nova stranka v seznamu na --} \setinterfacemessage{systems}{15}{uklada se buffer --} \setinterfacemessage{systems}{16}{sazi se buffer --} \setinterfacemessage{systems}{17}{sazi se doslovny (verbatim) buffer --} \setinterfacemessage{systems}{13}{znacka -- definovana --} \setinterfacemessage{systems}{12}{pomosny soubor neni setriden, pouzijte texutil} \setinterfacemessage{systems}{11}{vytvarim jednoduchy pomocny soubor} \setinterfacemessage{systems}{10}{nepouzivejte em v --} \setinterfacemessage{floatblocks}{1}{-- precislovano / -- => --} \setinterfacemessage{floatblocks}{3}{-- presunuto} \setinterfacemessage{floatblocks}{2}{-- ulozeno} \setinterfacemessage{floatblocks}{5}{poradi prizpusobeno} \setinterfacemessage{floatblocks}{4}{-- umisteno} \setinterfacemessage{floatblocks}{7}{pocet spodnich plovoucich objektu je omezen na --} \setinterfacemessage{floatblocks}{6}{pocet hornich plovoucich objektu je omezen na --} \setinterfacemessage{floatblocks}{9}{poradi naruseno} \setinterfacemessage{floatblocks}{8}{radku je mene nez --} \setinterfacemessage{floatblocks}{title}{plovouciobjekty} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{nedefinovano} \setinterfacemessage{floatblocks}{11}{nedan zadny blok} \setinterfacemessage{floatblocks}{10}{-- omezeno} \setinterfacemessage{interactions}{1}{pomer -- x -- (s x v)} \setinterfacemessage{interactions}{3}{neaktivni} \setinterfacemessage{interactions}{2}{aktivni} \setinterfacemessage{interactions}{5}{unknown attachment --} \setinterfacemessage{interactions}{4}{zadna strankova synchronizace (--) v hmode} \setinterfacemessage{interactions}{6}{attachment file -- does not exist} \setinterfacemessage{interactions}{title}{interakce} \setinterfacemessage{interactions}{21}{-- kod vlozen} \setinterfacemessage{regimes}{1}{kodovani --} \setinterfacemessage{regimes}{3}{nezname kodovani --} \setinterfacemessage{regimes}{2}{je nacteno kodovani --} \setinterfacemessage{regimes}{title}{kodovani} \setinterfacemessage{structures}{1}{zacatek oddilu (sekce) --} \setinterfacemessage{structures}{title}{struktury} \setinterfacemessage{structures}{2}{konec oddilu (sekce) --} \setinterfacemessage{linguals}{1}{vzory -- pro -- nacteny (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{deleni slov -- pro -- nacteno (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{zadne vzory -- pro -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{vzory pro -- nenacteny} \setinterfacemessage{linguals}{4}{zadne deleni slov -- pro -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{specificke volby jazyka [--] zavadeji -- (zavlecenou) mezeru} \setinterfacemessage{linguals}{6}{jazyk -- neni definovan} \setinterfacemessage{linguals}{9}{language -- is active} \setinterfacemessage{linguals}{8}{specificke volby jazyka [--] bez mezer pripojeny} \setinterfacemessage{linguals}{title}{jazyky} \setinterfacemessage{linguals}{10}{vzory -- nacteny} \setinterfacemessage{verbatims}{1}{soubor -- neexistuje} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{filter -- is loaded} \setinterfacemessage{filters}{title}{filter} \setinterfacemessage{filters}{2}{unknown filter --} \setinterfacemessage{textblocks}{1}{nova verze, je treba druhy beh} \setinterfacemessage{textblocks}{3}{ctu bloky z --} \setinterfacemessage{textblocks}{2}{zapisuji bloky do --} \setinterfacemessage{textblocks}{5}{-- neni skryto} \setinterfacemessage{textblocks}{4}{je treba druhy beh} \setinterfacemessage{textblocks}{7}{-- skryto} \setinterfacemessage{textblocks}{6}{-- skryto a zpracovano} \setinterfacemessage{textblocks}{9}{-- nevysazeno} \setinterfacemessage{textblocks}{8}{-- vysazeno} \setinterfacemessage{textblocks}{title}{textovyblok} \setinterfacemessage{textblocks}{12}{-- preskoceno} \setinterfacemessage{textblocks}{11}{-- nacteno a vysazeno} \setinterfacemessage{textblocks}{10}{-- nacteno a zpracovano} \setinterfacemessage{encodings}{1}{kodovani --} \setinterfacemessage{encodings}{3}{nezname kodovani --} \setinterfacemessage{encodings}{2}{je nacteno kodovani --} \setinterfacemessage{encodings}{title}{kodovani} \setinterfacemessage{columns}{1}{je mozno pouze -- sloupcu} \setinterfacemessage{columns}{3}{problem, vypina se vyvazovani} \setinterfacemessage{columns}{2}{pouzijte \string\filbreak\space jako alternativu} \setinterfacemessage{columns}{5}{spodni plovouci objekt jeste neni podporovan} \setinterfacemessage{columns}{4}{horni plovouci objekt jeste neni podporovan} \setinterfacemessage{columns}{7}{vyvazovani ukonceno po 100 krocich} \setinterfacemessage{columns}{6}{-- plovouci objekt(y) odlozeny} \setinterfacemessage{columns}{9}{kontrola nerovnost} \setinterfacemessage{columns}{8}{vyvazeno v -- krocich} \setinterfacemessage{columns}{title}{sloupce} \setinterfacemessage{columns}{13}{siroky plovouci objekt je presunut nad sloupce} \setinterfacemessage{columns}{12}{plovouci objekt je presunut do nasledujiciho sloupce / --} \setinterfacemessage{columns}{11}{plovouci objekt je pro sloupec prilis siroky} \setinterfacemessage{columns}{10}{zbyl (mene nez) 1 radek} \setinterfacemessage{symbols}{1}{nacita se soubor symbolu --} \setinterfacemessage{symbols}{title}{symboly} \setinterfacemessage{files}{1}{synonymum souboru -- je jiz pouzito pro --} \setinterfacemessage{files}{title}{soubory} \setinterfacemessage{versions}{1}{postradam @+} \setinterfacemessage{versions}{3}{oznacene strany: --} \setinterfacemessage{versions}{2}{oznacuji se strany} \setinterfacemessage{versions}{title}{verze} \setinterfacemessage{specials}{1}{-- nacteno} \setinterfacemessage{specials}{3}{-- je resetovano} \setinterfacemessage{specials}{2}{neni dovoleno hlubsi zanoreni --} \setinterfacemessage{specials}{5}{nacita se definicni soubor --} \setinterfacemessage{specials}{4}{prikaz -- neexistuje} \setinterfacemessage{specials}{7}{neznamy ovladac (driver) --} \setinterfacemessage{specials}{6}{zanoreni neni dovoleno} \setinterfacemessage{specials}{title}{speciality} \setinterfacemessage{layouts}{1}{vyska textu prizpusobena s -- na strane --} \setinterfacemessage{layouts}{3}{-- krat text odlozen} \setinterfacemessage{layouts}{2}{-- krat odlozeny text umisten} \setinterfacemessage{layouts}{5}{okrajove bloky neaktivni} \setinterfacemessage{layouts}{4}{okrajove bloky aktivni} \setinterfacemessage{layouts}{7}{pocita se misto pro logo} \setinterfacemessage{layouts}{6}{sada stran -- zpracovana (velikost --)} \setinterfacemessage{layouts}{9}{aktualne ne vice nez -- urovne/urovni vyctu} \setinterfacemessage{layouts}{8}{pocita se pozadi} \setinterfacemessage{layouts}{title}{layout} \setinterfacemessage{layouts}{11}{svisla mezera -- neni povolena v pevnem radkovem rejstriku} \setinterfacemessage{layouts}{10}{-- a -- nedava dohromady 1.0} \setinterfacemessage{fonts}{1}{kodovani --} \setinterfacemessage{fonts}{3}{neznama varianta --} \setinterfacemessage{fonts}{2}{varianta -- je nactena} \setinterfacemessage{fonts}{5}{styl -- neni definovan} \setinterfacemessage{fonts}{4}{zakladni font -- neni definovan} \setinterfacemessage{fonts}{7}{neznamy format --} \setinterfacemessage{fonts}{6}{-- je nacten} \setinterfacemessage{fonts}{14}{bodyfont -- is defined (can better be done global)} \setinterfacemessage{fonts}{8}{styl -- definovan} \setinterfacemessage{fonts}{title}{zakladnifont} \setinterfacemessage{fonts}{10}{neznamy font --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{global file --} \setinterfacemessage{databases}{2}{local file --} \setinterfacemessage{databases}{4}{unknown file --} \setinterfacemessage{databases}{title}{databases} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{nacita se soubor skriptu --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{neznama preambule --} \setinterfacemessage{check}{1}{postradam '=' po '--' na radku --} \setinterfacemessage{check}{3}{-- -- nahrazuje makro, uzijte VERZALKY!} \setinterfacemessage{check}{2}{ocekavam -- argument(y) na radku --} \setinterfacemessage{check}{title}{kontrola} \setinterfacemessage{metapost}{1}{loading metapost library --} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{obraz -- nelze nalezt} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{obraz -- nepritomen} \setinterfacemessage{figures}{5}{dimensions of -- are unknown} \setinterfacemessage{figures}{4}{dimenze obrazu -- nacteny primo z jeho souboru} \setinterfacemessage{figures}{6}{dimenze obrazu -- spocteny programem rlxtools} \setinterfacemessage{figures}{8}{obrazovy objekt -- je znovu pouzit} \setinterfacemessage{figures}{title}{obrazy} \setinterfacemessage{colors}{1}{system -- je globalne aktivovana} \setinterfacemessage{colors}{3}{-- neni definovana --} \setinterfacemessage{colors}{2}{system -- je lokalne activovana} \setinterfacemessage{colors}{5}{neznamy system --} \setinterfacemessage{colors}{4}{system -- je nacten} \setinterfacemessage{colors}{7}{palette -- neni k dispozici} \setinterfacemessage{colors}{6}{palette -- je k dispozici} \setinterfacemessage{colors}{9}{-- prostor barev neni podporovan} \setinterfacemessage{colors}{8}{specifikace -- v barve -- bude cerna} \setinterfacemessage{colors}{title}{barva} \setinterfacemessage{colors}{12}{-- is registered} \setinterfacemessage{colors}{11}{barva je prevedena na sed} \setinterfacemessage{colors}{10}{-- prostor barev je podporovan} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/colo-icc.lua0000644000175000017500000001033612130411274024062 0ustar norbertnorbertif not modules then modules = { } end modules ['colo-icc'] = { version = 1.000, comment = "companion to colo-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local char, byte, gsub, match, format, strip = string.char, string.byte, string.gsub, string.match, string.format, string.strip local readstring, readnumber = io.readstring, io.readnumber local formatters = string.formatters local colors = attributes and attributes.colors or { } -- when used in mtxrun local report_colors = logs.reporter("colors","icc") local R, Cs, lpegmatch = lpeg.R, lpeg.Cs, lpeg.match local invalid = R(char(0)..char(31)) local cleaned = invalid^0 * Cs((1-invalid)^0) function colors.iccprofile(filename,verbose) local fullname = resolvers.findfile(filename,"icc") or "" if fullname == "" then local locate = resolvers.finders.byscheme -- not in mtxrun if locate then fullname = locate("loc",filename) end end if fullname == "" then report_colors("profile %a cannot be found",filename) return nil, false end local f = io.open(fullname,"rb") if not f then report_colors("profile %a cannot be loaded",fullname) return nil, false end local header = { size = readnumber(f,4), cmmtype = readnumber(f,4), version = readnumber(f,4), deviceclass = strip(readstring(f,4)), colorspace = strip(readstring(f,4)), connectionspace = strip(readstring(f,4)), datetime = { year = readnumber(f,2), month = readnumber(f,2), day = readnumber(f,2), hour = readnumber(f,2), minutes = readnumber(f,2), seconds = readnumber(f,2), }, filesignature = strip(readstring(f,4)), platformsignature = strip(readstring(f,4)), options = readnumber(f,4), devicemanufacturer = strip(readstring(f,4)), devicemodel = strip(readstring(f,4)), deviceattributes = readnumber(f,4), renderingintent = readnumber(f,4), illuminantxyz = { x = readnumber(f,4), y = readnumber(f,4), z = readnumber(f,4), }, profilecreator = readnumber(f,4), id = strip(readstring(f,16)), } local tags = { } for i=1,readnumber(f,128,4) do tags[readstring(f,4)] = { offset = readnumber(f,4), length = readnumber(f,4), } end local o = header.options header.options = o == 0 and "embedded" or o == 1 and "dependent" or "unknown" local d = header.deviceattributes header.deviceattributes = { [number.hasbit(d,1) and "transparency" or "reflective"] = true, [number.hasbit(d,2) and "mate" or "glossy" ] = true, [number.hasbit(d,3) and "negative" or "positive" ] = true, [number.hasbit(d,4) and "bw" or "color" ] = true, } local r = header.renderingintent header.renderingintent = r == 0 and "perceptual" or r == 1 and "relative" or r == 2 and "saturation" or r == 3 and "absolute" or "unknown" for tag, spec in next, tags do if tag then local offset, length = spec.offset, spec.length local variant = readstring(f,offset,4) if variant == "text" or variant == "desc" then local str = readstring(f,length-4) tags[tag] = { data = str, cleaned = lpegmatch(cleaned,str), } else if verbose then report_colors("ignoring tag %a or type %a in profile %a",tag,variant,fullname) end tags[tag] = nil end end end f:close() local profile = { filename = filename, fullname = fullname, header = header, tags = tags, } report_colors("profile %a loaded",fullname) return profile, true end context-2013.05.28.20130704/texmf-dist/tex/context/base/sort-ini.mkii0000644000175000017500000001257311754241457024332 0ustar norbertnorbert%D \module %D [ file=sort-ini, %D version=2005.08.08, %D title=\CONTEXT\ Sorting Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: autokeyexpansion => igv utf: \setupregister[index][keyexpansion=yes] %D This module replaces existing sort key handling and is meant to be %D used with the new texutil functionality. This module defines a few %D auxiliary macros. \writestatus{loading}{ConTeXt Sorting Macros / Initialization} %D This module replaces existing sort key handling and is meant to be %D used with the new texutil functionality. This module defines a few %D auxiliary macros. \ifx\exportsortaction\undefined \else \endinput \fi %D The sorting method is largely bases on the one used in the old version %D of texutil but i've changed the interface a bit. It all boils down to %D a bunch of substitutions. The reimplementation makes it easier to extend %D the rules. Currently we have multipass substitution and onepass sorting, %D but we may change this some day. Since there is a plugin mechanism, using %D an external sorter is also possible. % test file: % % \mainlanguage[sl] \readfile{sort-ini}{}{} % % \starttext % test \index {aa1} test \index {ab1} test \index {aa2} % test \index {ab2} test \index {aa10} test \index {aa8} % test \index {aa9} test \index {aa11} test \index {aa10} % test \index {cccc} test \index {\ccaron ccc} test \index {\cacute ccc} % test \index {caaa} test \index {\ccaron aaa} test \index {\cacute aaa} % \placeindex % \stoptext % definitions: % % \exportsortshortcut{\\\'\\i}{iacute} % \exportsortshortcut{\\\'i} {iacute} % \exportsortshortcut{\\\"e} {ediaeresis} % \exportsortshortcut{\\\'o} {oacute} % % \exportsortexpansion{aeligature}{ae} % \exportsortexpansion{ijligature}{y} % \exportsortexpansion{oacute} {oz} % \exportsortexpansion{eacute} {ezzz} % or e3 % \exportsortexpansion{egrave} {ezz} % or e2 % \exportsortexpansion{ediaeresis}{ez} % or e1 % \exportsortexpansion{adiaeresis}{az} % \exportsortreduction{ch} {c} % \exportsortreduction{ij} {y} % % \exportsortexpansion{ccaron} {cz} % \exportsortexpansion{cacute} {czz} % \exportsortexpansion{dstroke} {dz} % \exportsortexpansion{scaron} {sz} % \exportsortexpansion{zcaron} {zz} % % \exportsortreduction{ch}{c} % \exportsortreduction{ij}{y} % % \exportsortexpansion {ccaron} {c+1} % \exportsortdivision {c+1} {ccaron} % == % \exportsortrule {ccaron} {c+1} \unprotect \def\savesortkeys {\ifproductionrun \the\everysavesortkeys \global\everysavesortkeys\emptytoks \fi} \appendtoks \savesortkeys \to \everyshipout \let\currentexportclass\empty \def\exportsortaction#1#2#3% {\defconvertedargument\asciia{#2}% \defconvertedargument\asciib{#3}% \immediatewriteutility{x #1 {\currentexportclass} {\asciia} {\asciib}}} \def\exportsortshortcut {\exportsortaction s} \def\exportsortexpansion{\exportsortaction e} \def\exportsortreduction{\exportsortaction r} \def\exportsortdivision {\exportsortaction d} \def\exportsortrule#1#2% {\exportsortexpansion{#1}{#2}% \exportsortdivision {#2}{#1}} \def\exportutfsortexpansion#1#2#3% {\bgroup \edef\utfsorta{\string\unknownchar}% \dostepwiserecurse{#2}{#3}\plusone {\edef\utfsortb{\@EA\string\csname\doutfunihash{#1}{\recurselevel}\endcsname}% \ifx\utfsortb\utfsorta \else \edef\utfsortc{\numbertoutf{\numexpr#1*256+\recurselevel\relax}}% \expanded{\exportsortshortcut{\utfsortc}{\utfsortb\space}}% space is really needed \fi}% \egroup} \def\savesortdefinitions {\bgroup \doifelse \currentregime {utf} {\exportutfsortexpansion{0}{128}{255}% \exportutfsortexpansion{1}{0}{255}} {\def\defineactivecharacter##1 ##2% mkii code ! {\doifnumberelse{##1} {\expanded{\exportsortshortcut{\rawcharacter{##1}}}{##2}}% {\expanded{\exportsortshortcut{\rawcharacter{\number`##1}}}{##2}}}% \doifelsenothing\currentregime {\doifnot\characterencoding\nocharacterencoding % to be sure, autoregime {\dowalkregime\characterencoding}}% {\dowalkregime\characterencoding}}% \egroup \startnointerference \setcatcodetable\ctxcatcodes \readsysfile{\f!sortprefix def.mkii}\donothing\donothing % default \stopnointerference \global\let\savesortdefinitions\relax} \def\savesortlanguage#1% language specifics {\doifsomething{#1} {\doifundefined{\f!sortprefix::#1}% {\startnointerference \global\letvalue{\f!sortprefix::#1}\empty \def\currentexportclass{#1}% \enablemode[sortorder-#1]% \setcatcodetable\ctxcatcodes \readsysfile{\f!sortprefix lan.mkii}\donothing\donothing \stopnointerference}}} \prependtoks \savesortdefinitions \to \everysavesortkeys % \defineregister[one] % \defineregister[two] \setupregister[two][language=cz] % % \starttext % test \one{one} test \one{two} test \one {\aacute} test \one{alpha} test \one{chow} % test \two{one} test \two{two} test \two {\aacute} test \two{alpha} test \two{chow} % \blank[3*big] \placeregister[one] % \blank[3*big] \placeregister[two] % \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-rep.lua0000644000175000017500000000761712130411274024161 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-rep'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This was rather boring to program (more of the same) but I could -- endure it by listening to a couple cd's by The Scene and The Lau -- on the squeezebox on my desk. local trace_stripping = false trackers.register("nodes.stripping", function(v) trace_stripping = v end) trackers.register("fonts.stripping", function(v) trace_stripping = v end) local report_stripping = logs.reporter("fonts","stripping") local nodes, node = nodes, node local delete_node = nodes.delete local replace_node = nodes.replace local copy_node = node.copy local chardata = characters.data local collected = false local a_stripping = attributes.private("stripping") local fontdata = fonts.hashes.identifiers local tasks = nodes.tasks local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local v_reset = interfaces.variables.reset local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph -- todo: other namespace -> typesetters nodes.stripping = nodes.stripping or { } local stripping = nodes.stripping stripping.glyphs = stripping.glyphs or { } local glyphs = stripping.glyphs local function initialize() for k,v in next, chardata do if v.category == "cf" and v.visible ~= "yes" then if not glyphs[k] then glyphs[k] = true end end end initialize = nil end local function process(what,head,current,char) if what == true then if trace_stripping then report_stripping("deleting %C from text",char) end head, current = delete_node(head,current) elseif type(what) == "function" then head, current = what(head,current) current = current.next if trace_stripping then report_stripping("processing %C in text",char) end elseif what then -- assume node head, current = replace_node(head,current,copy_node(what)) current = current.next if trace_stripping then report_stripping("replacing %C in text",char) end end return head, current end function nodes.handlers.stripping(head) local current, done = head, false while current do if current.id == glyph_code then -- it's more efficient to keep track of what needs to be kept local todo = current[a_stripping] if todo == 1 then local char = current.char local what = glyphs[char] if what then head, current = process(what,head,current,char) done = true else -- handling of spacing etc has to be done elsewhere current = current.next end else current = current.next end else current = current.next end end return head, done end local enabled = false function stripping.set(n) -- number or 'reset' if n == v_reset then n = unsetvalue else n = tonumber(n) if n then if not enabled then if initialize then initialize() end tasks.enableaction("processors","nodes.handlers.stripping") enabled = true end else n = unsetvalue end end texattribute[a_stripping] = n end -- why not in task-ini? tasks.appendaction("processors","fonts","nodes.handlers.stripping",nil,"nodes.handlers.characters") tasks.disableaction("processors","nodes.handlers.stripping") -- interface commands.setcharacterstripping = stripping.set context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-xtx.mkii0000644000175000017500000000436311571377075024342 0ustar norbertnorbert%D \module %D [ file=spec-xtx, %D version=2004.11.08, %D title=\CONTEXT\ Special Macros, %D subtitle=\XETEX\ support, %D author={Adam Lindsay \& Hans Hagen \& \unknown}, %D date=\currentdate, %D copyright={Adam Lindsay \& Hans Hagen}] \startspecials[xetex][reset,dpx] %D Actually, there's an intermediate ``\type{xdv}'' %D output format, but by default, it's tranparently %D converted to \PDF\ by \XETEX. \setjobsuffix{pdf} %D Rotation looks fine. \definespecial\dostartrotation#1% {\special{x:gsave}\special{x:rotate #1}} \definespecial\dostoprotation {\special{x:grestore}} %D Scaling and mirroring are also fine. \definespecial\dostartscaling#1#2% {\special{x:gsave}\special{x:scale #1 #2}} \definespecial\dostopscaling {\special{x:grestore}} \definespecial\dostartmirroring {\special{x:gsave}\special{x:scale -1 1}} \definespecial\dostopmirroring {\special{x:grestore}} %D Colors are done with the \DVIPDFMX\ color model, which are %D inherited. %D Although hex colors were accommodated by Hans, we'll try the %D more familiar \DVIPDFMX\ ones. One good side-effect of the %D previous approach was that it kept track of the color state %D (transparency in XeTeX is accomplished setting the color to %D an RGBA quadruple, rather than an RGB triple). So transparency %D will need another plan. % \macros % {dostarttransparency,dostoptransparency} % % \starttypen % \dostarttransparency{fraction}{type} % \dostoptransparency % \stoptypen % % Although in \CONTEXT\ transparency is closely integrated % in the color drivers, in the end it is an independent % feature. %\installspecial [\dostarttransparency] [or] [2] %\installspecial [\dostoptransparency] [or] [0] %D \macros %D {doloadmapfile,doloadmapline,doresetmapfilelist} %D %D \XETEX\ 0.91 allows map file additions, via a special. \definespecial\doresetmapfilelist{\special{x:fontmapfile original-empty.map}} \definespecial\doloadmapfile #1#2{\special{x:fontmapfile #1#2}} \definespecial\doloadmapline #1#2{\special{x:fontmapline #1#2}} %D \macros %D {dosetuppaper} \ifx\pdfpagewidth\undefined \else \definespecial\dosetuppaper#1#2#3% {\global\pdfpagewidth #2\relax \global\pdfpageheight#3\relax} \fi \stopspecials \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-ini.mkiv0000644000175000017500000011510512132111075024266 0ustar norbertnorbert%D \module %D [ file=colo-ini, %D version=2007.08.08, %D title=\CONTEXT\ Color Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We need to clean this up further but first we have to make sure that mkiv %D code works ok. \writestatus{loading}{ConTeXt Color Macros / Initialization} %D This module implements color. Since \MKII\ and \MKIV\ use a completely %D different approach, this module only implements a few generic mechanisms. \registerctxluafile{colo-ini}{1.000} \registerctxluafile{colo-icc}{1.000} \unprotect %D In \MKIV\ we have independent color, colorspace and transparency %D but I'm still not sure if I keep it that way as it's probably more %D efficient to combine them (less attributes and finalizing). If %D it becomes a bottleneck we can set up a more complex system %D with one shared attribute for colorspace, color and transparency. %D %D When typesetting for paper, we prefer using the \CMYK\ color space, %D but for on||screen viewing we prefer \RGB\ (the previous %D implementation supported only this scheme). Independant of such %D specifications, we support some automatic conversions: %D %D \startitemize[packed] %D \item convert all colors to \RGB %D \item convert all colors to \CMYK %D \item convert all colors to gray scales %D \stopitemize %D %D These options are communicated by means of: \newconditional\c_colo_rgb_supported \newconditional\c_colo_cmyk_supported \newconditional\c_colo_spot_supported % backend driven \newconditional\c_colo_weight_gray \settrue\c_colo_weight_gray \newconditional\c_colo_convert_gray \settrue\c_colo_convert_gray \newconditional\c_colo_enabled \newconditional\c_colo_expanded \let\currentcolormodel \empty \let\currentcolorname \empty \let\currentcolorpalet \empty \let\currentcolorprefix\empty % \currentcolorpalet: \installcorenamespace{color} \installcorenamespace{colorattribute} \installcorenamespace{transparencyattribute} \installcorenamespace{colorsetter} \installcorenamespace{transparencysetter} \installcorenamespace{colorpaletspecification} \installcorenamespace{colorpalet} \installcorenamespace{colorstack} \installcorenamespace{colorconversions} %D \macros %D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor, %D definetransparency} %D %D \startbuffer %D \definecolor [blue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m %D \definecolor [yellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m %D %D \definespotcolor [blue-100] [blue] [p=1] %D \definespotcolor [yellow-100] [yellow] [p=1] %D %D \definemultitonecolor [pdftoolscolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1] %D %D \useexternalfigure[demofig][mill.png][object=no] %D %D \startcombination[4*1] %D {\externalfigure[demofig]} {no color} %D {\externalfigure[demofig][color=pdftoolscolor]} {indexed duotone} %D {\externalfigure[demofig][color=blue-100]} {spot color} %D {\externalfigure[demofig][color=yellow-100]} {spot color} %D \stopcombination %D \stopbuffer %D %D \getbuffer \typebuffer \unexpanded\def\definecolor {\dodoubleargument\colo_basics_define} \unexpanded\def\defineglobalcolor {\dodoubleargument\colo_basics_define_global} \unexpanded\def\definenamedcolor {\dodoubleargument\colo_basics_define_named} \unexpanded\def\definespotcolor {\dotripleargument\colo_basics_define_spot} \unexpanded\def\definemultitonecolor{\doquadrupleempty\colo_basics_define_multitone} \unexpanded\def\definetransparency {\dodoubleargument\colo_basics_define_transpancy} %D \macros %D {startcolor,stopcolor,color,graycolor} %D %D The local and global commands are here just for compatibility %D with \MKII. %D %D \showsetup{startcolor} %D %D The simple color commands are: %D %D \showsetup{color} %D \showsetup{graycolor} %D We expect sane behaviour in \MKIV\ so we don't used grouped command any %D longer. % \testfeatureonce{100000}{\color[red]{}} % 1.046 => 0.541 \unexpanded\def\switchtocolor[#1]{\csname#1\endcsname} \unexpanded\def\color [#1]{\bgroup \def\g_color{\colo_helpers_activate{#1}}% \afterassignment\g_color \let\nexttoken} \unexpanded\def\graycolor [#1]{\bgroup \def\g_color{\colo_helpers_set_model\s!gray\colo_helpers_activate{#1}}% \afterassignment\g_color \let\nexttoken} \unexpanded\def\startcolor [#1]{\begingroup \colo_helpers_activate{#1}} \unexpanded\def\stopcolor {\endgroup} \unexpanded\def\colored [#1]{\bgroup \def\g_color{\colo_basics_defined_and_activated{#1}}% \afterassignment\g_color \let\nexttoken} \unexpanded\def\fastcolored[#1]#2{\begingroup % is this command still needed? \colo_basics_defined_and_activated{#1}% #2% \endgroup} \unexpanded\def\directcolored[#1]{\colo_basics_defined_and_activated{#1}} \unexpanded\def\fastcolor [#1]#2{\begingroup % is this command still needed? \colo_helpers_activate{#1}% #2% \endgroup} \unexpanded\def\directcolor [#1]{\colo_helpers_activate{#1}} %D The following command is obsolete: \unexpanded\def\startcolorpage {\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]} \unexpanded\def\stopcolorpage {\stopcolor} \def\getcolorattributevalue#1#2% obsolete, use \thecolorattribute instead ... {\begingroup \colo_helpers_activate{#1}% \normalexpanded{\endgroup\edef\noexpand#2% {\ifnum\attribute\colorattribute=\attributeunsetvalue\else\number\attribute\colorattribute\fi}}} \let\grey\graycolor % these macros are only used in tracing %D \macros %D {startcurrentcolor,stopcurrentcolor} \unexpanded\def\startcurrentcolor{\startcolor[\outercolorname]} \unexpanded\def\stopcurrentcolor {\stopcolor} %D \macros %D {setupcolor} %D %D Color definitions can be grouped in files with the name: %D %D \starttyping %D colo-imp-tag.tex %D \stoptyping %D %D Loading such a file is done by: %D %D \showsetup{usecolors} %D %D Some default colors are specified in \type {colo-imp-rgb}, %D which is loaded into the format by default. %D %D Some demo palets and groups are defined in \type {colo-imp-dem} %D which can be loaded with: %D %D \starttyping %D \usecolors[dem] %D \stoptyping \unexpanded\def\startcolorset[#1]{\ctxcommand{startcolorset("#1")}} \unexpanded\def\stopcolorset {\ctxcommand{stopcolorset()}} \unexpanded\def\usecolors [#1]{\ctxcommand{usecolors("#1")}} \let\setupcolor\usecolors \installsetuponlycommandhandler \??color {colors} \let\colo_helpers_show_message\gobblethreearguments % \newtoks\everysetupcolors \let\v_colo_freeze_state\s!false \let\v_colo_weight_state\s!false \setvalue{\??colorconversions\v!yes}% {\settrue \c_colo_convert_gray} \setvalue{\??colorconversions\v!always}% {\settrue \c_colo_convert_gray \setfalse\c_colo_rgb_supported \setfalse\c_colo_cmyk_supported} \appendtoks % \doifelse{\directcolorsparameter\c!spot }\v!yes \settrue \setfalse\c_colo_spot_supported \doifelse{\directcolorsparameter\c!expansion}\v!yes \settrue \setfalse\c_colo_expanded \doifelse{\directcolorsparameter\c!factor }\v!no \setfalse\settrue \c_colo_weight_gray \doifelse{\directcolorsparameter\c!rgb }\v!yes \settrue \setfalse\c_colo_rgb_supported \doifelse{\directcolorsparameter\c!cmyk }\v!yes \settrue \setfalse\c_colo_cmyk_supported \doifelse{\directcolorsparameter\c!state }\v!start\settrue \setfalse\c_colo_enabled % \ifconditional\c_colo_weight_gray \let\v_colo_weight_state\s!true \else \let\v_colo_weight_state\s!false \fi % \ifconditional\c_colo_expanded \let\v_colo_freeze_state\s!true \else \let\v_colo_freeze_state\s!false \fi % \setfalse\c_colo_convert_gray \getvalue{\??colorconversions\directcolorsparameter\c!conversion}% could be a nice \ifcsname % too often: \ifconditional\c_colo_rgb_supported \colo_helpers_show_message\m!colors{10}\v!rgb \fi \ifconditional\c_colo_cmyk_supported\colo_helpers_show_message\m!colors{10}\v!cmyk\fi \colo_helpers_set_current_model \ifproductionrun \edef\p_pagecolormodel{\directcolorsparameter\c!pagecolormodel}% \ctxcommand{synchronizecolormodel("\ifx\p_pagecolormodel\v!auto \currentcolormodel \else \p_pagecolormodel \fi")}% \fi \to \everysetupcolors \appendtoks \setupcolors[\c!state=\v!start]% \ctxcommand{enablecolor()}% % this can as well happen when \ctxcommand{enabletransparency()}% % the handler is defined in lua \let\colo_helpers_show_message\showmessage \to \everyjob %D We provide stacking independent of grouping. \newcount\c_colo_nesting \unexpanded\def\pushcolor[#1]% {\global\advance\c_colo_nesting\plusone \expandafter\edef\csname\??colorstack\number\c_colo_nesting\endcsname {\attribute\colormodelattribute \the\attribute\colormodelattribute \attribute\colorattribute \the\attribute\colorattribute \attribute\transparencyattribute\the\attribute\transparencyattribute \relax}% stack \colo_helpers_activate{#1}} \unexpanded\def\popcolor {\csname\??colorstack\number\c_colo_nesting\endcsname \global\advance\c_colo_nesting\minusone} % a simple one: assumes grouping \newcount\c_colo_saved_attribute_color \newcount\c_colo_saved_attribute_transparency \unexpanded\def\savecolor {\c_colo_saved_attribute_color \attribute\colorattribute \c_colo_saved_attribute_transparency\attribute\transparencyattribute} \unexpanded\def\restorecolor {\attribute\colorattribute \c_colo_saved_attribute_color \attribute\transparencyattribute\c_colo_saved_attribute_transparency} %D In this documentation we will not go into too much details %D on palets. Curious users can find more information on this %D topic in \from[use of color]. %D %D At the moment we implemented color in \CONTEXT\ color %D printing was not yet on the desktop. In spite of this lack our %D graphics designer made colorfull illustrations. When printed %D on a black and white printer, distinctive colors can come %D out equally gray. We therefore decided to use only colors %D that were distinctive in colors as well as in black and %D white print. %D %D Although none of the graphic packages we used supported %D logical colors and global color redefition, we build this %D support into \CONTEXT. This enabled us to experiment and %D also prepared us for the future. %D \macros %D {definepalet} %D %D Colors are grouped in palets. The colors in such a palet can %D have colorful names, but best is to use names that specify %D their use, like {\em important} or {\em danger}. As a sort %D of example \CONTEXT\ has some palets predefined, %D like:\footnote{At the time I wrote the palet support, I was %D reading 'A hort history of time' of S.~Hawkins, so that's %D why we stuck to quarks.} %D %D \starttyping %D \definepalet %D [alfa] %D [ top=rood:7, %D bottom=groen:6, %D up=blauw:5, %D down=cyaan:4, %D strange=magenta:3, %D charm=geel:2] %D \stoptyping %D %D It's formal definition is: %D %D \showsetup{definepalet} %D %D Visualized, such a palet looks like: %D %D \startbuffer[palet] %D \showpalet [alfa] [horizontal,name,number,value] %D \stopbuffer %D %D \startlinecorrection %D \getbuffer[palet] %D \stoplinecorrection %D %D This bar shows both the color and gray alternatives of the %D palet components (not visible in black and white print). %D %D When needed, one can copy a palet by saying: %D %D \starttyping %D \definepalet [TEXcolorpretty] [colorpretty] %D \stoptyping %D %D This saves us some typing in for instance the modules that %D deal with pretty verbatim typesetting. \let\m_colo_palets_tmp\empty \unexpanded\def\definepalet {\dodoubleargument\colo_palets_define} \unexpanded\def\colo_palets_define[#1][#2]% todo {\doifassignmentelse{#2} {%\colo_helpers_show_message\m!colors6{#1}% \let\m_colo_palets_tmp\empty \setevalue{\??colorpaletspecification#1}{#2}% \processcommalist[#2]{\colo_palets_define_one{#1}}% \letvalue{\??colorpalet#1}\m_colo_palets_tmp \let\m_colo_palets_tmp\empty} {\ifcsname\??colorpaletspecification#2\endcsname \normalexpanded{\colo_palets_define[#1][\csname\??colorpaletspecification#2\endcsname]}% \fi}} % \def\colo_palets_define_one#1#2% get rid of { } in #2 % {\colo_palets_define_two{#1}[#2]}% \def\colo_palets_define_one#1#2% get rid of { } {\doifassignmentelse{#2} % catch empty entries {\colo_palets_define_two{#1}[#2]} {\colo_palets_define_three{#1}{#2}}} \def\colo_palets_define_two#1[#2=#3]% {\edef\m_colo_palets_tmp{\ifx\m_colo_palets_tmp\empty\else\m_colo_palets_tmp,\fi#2}% \colo_palets_define_set{#1}{#2}{#3}}% \def\colo_palets_define_three#1#2% {\ifcsname\??colorpaletspecification#2\endcsname \processcommacommand[\csname\??colorpaletspecification#2\endcsname]{\colo_palets_define_one{#1}}% \fi} \let\paletsize\!!zerocount \unexpanded\def\getpaletsize[#1]% only works for valid k=v definitions {\getcommacommandsize[\csname\??colorpaletspecification#1\endcsname]% \edef\paletsize{\number\commalistsize}} %D Instead of refering to colors, one can also directly specify %D a color: %D %D \starttyping %D \definepalet[test][xx=green] %D \definepalet[test][xx={y=.4}] %D \stoptyping %D \macros %D {setuppalet} %D %D Colors are taken from the current palet, if defined. %D Setting the current palet is done by: %D %D \showsetup{setuppalet} \newtoks\everysetuppalet \unexpanded\def\setuppalet {\dosingleempty\colo_palets_setup} \def\colo_palets_setup[#1]% {\edef\currentcolorpalet{#1}% \ifx\currentcolorpalet\empty % seems to be a reset \let\currentcolorprefix\empty \else\ifcsname\??colorpalet\currentcolorpalet\endcsname \edef\currentcolorprefix{#1:}% \else \colo_helpers_show_message\m!colors7\currentcolorpalet \let\currentcolorpalet\empty \let\currentcolorprefix\empty \fi\fi \the\everysetuppalet \colo_helpers_initialize_maintextcolor} %D \macros %D {showpalet} %D %D The previous visualization was typeset with: %D %D \typebuffer[palet] %D %D This commands is defined as: %D %D \showsetup{showpalet} \fetchruntimecommand \showpalet {\f!colorprefix\s!run} %D \macros %D {showcolorcomponents} %D %D \starttyping %D \showcolorcomponents[color-1,color-2] %D \stoptyping \fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run} %D \macros %D {comparepalet} %D %D There are some more testing macros available: %D %D \startbuffer %D \comparepalet [alfa] %D \stopbuffer %D %D \typebuffer %D %D shows the palet colors against a background: %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D %D The formal definition is: %D %D \showsetup{comparepalet} \fetchruntimecommand \comparepalet {\f!colorprefix\s!run} %D \macros %D {showcolor} %D %D But let's not forget that we also have the more traditional %D non||related colors. These show up after: %D %D \starttyping %D \showcolor [name] %D \stoptyping %D %D Where \type{name} for instance can be \type{rgb}. %D %D \showsetup{showcolor} \fetchruntimecommand \showcolor {\f!colorprefix\s!run} %D It would make sense to put the following code in \type %D {colo-mps}, but it it rather low level. %D \macros %D {negatecolorcomponent,negatedcolorcomponent} %D %D These speak for themselves. See \type {colo-ext} for usage. \def\negatecolorcomponent#1% #1 = \macro {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi \edef#1{\withoutpt\the\scratchdimen}} \let\negatedcolorcomponent\firstofoneargument \def\negatedcolorcomponent#1% {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint \!!zerocount \else \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax \fi} \def\negatecolorcomponent#1% #1 = \macro {\edef#1{\negatedcolorcomponent{#1}}} %D \macros %D {MPcolor} %D %D A very special macro is \type{\MPcolor}. This one can be %D used to pass a \CONTEXT\ color to \METAPOST. %D %D \starttyping %D \MPcolor{my own red} %D \stoptyping %D %D This macro returns \METAPOST\ code that represents the %D color. %D %D For the moment we keep the next downward compatibility %D switch, i.e.\ expanded colors. However, predefined colors %D and palets are no longer expanded (which is what I wanted %D in the first place). %D %D In \MKIV\ we don't support color separation as we might now %D assume that printing houses have the right programs to do %D it themselves. If it's ever needed in \MKIV\ It is relatively %D easy to support it in the backend code. % todo: palets in definecolor % todo: {\red xx} vs \red{xx} % \def\mptexcolor#1{"\dogetattributeid\s!color \somecolorattribute{#1} A"} % % \startMPpage % fill fullcircle scaled 10cm ; % fill fullcircle scaled 5cm withprescript \mptexcolor{red} withpostscript \mptexcolor{black} ; % fill fullcircle scaled 3cm ; % draw btex test etex withprescript \mptexcolor{blue} ; % \stopMPpage \unexpanded\def\setcolormodel[#1]% % beware, \setupcolors will overload this, so this one is {\colo_helpers_set_model{#1}} % only for local usage \def\colo_helpers_set_model#1% direct {\edef\currentcolormodel{#1}% \ctxcommand{setcolormodel('\currentcolormodel',\v_colo_weight_state)}} % sets attribute at lua end \colo_helpers_set_model\s!all \def\colo_helpers_set_current_model {\ifconditional\c_colo_enabled \ifconditional\c_colo_rgb_supported \ifconditional\c_colo_cmyk_supported \colo_helpers_set_model\s!all \else \colo_helpers_set_model\s!rgb \fi \else \ifconditional\c_colo_cmyk_supported \colo_helpers_set_model\s!cmyk \else \ifconditional\c_colo_convert_gray \colo_helpers_set_model\s!gray \else \colo_helpers_set_model\s!none \fi \fi \fi \else \ifconditional\c_colo_convert_gray \colo_helpers_set_model\s!gray \else \colo_helpers_set_model\s!none \fi \fi} % Currently in mkiv transparency is implemented independent of color. This costs % a bit more processing time but gives the possibility to apply transparency % independently in the future. Is this useful? If not we may as well combine them % again in the future. By coupling we are downward compatible. When we decouple we % need to do more tricky housekeeping (e.g. persist color independent transparencies % when color bound ones are nil. % Since we couple definitions, we could stick to one test. Todo. Same for mpcolor. \def\v_colo_dummy_name{d_u_m_m_y} \letvalue{\??colorsetter-}\empty % used? \letvalue{\??transparencysetter-}\empty % used? % new: expandable (see tbl) \def\colo_helpers_fast_activate {\ifx\currentcolorprefix\empty \expandafter\colo_helpers_fast_activate_nop \else \expandafter\colo_helpers_fast_activate_yes \fi} \def\colo_helpers_fast_activate_yes#1% {\ifcsname\??colorsetter\currentcolorprefix#1\endcsname \csname\??colorsetter\currentcolorprefix#1\endcsname \csname\??transparencysetter\currentcolorprefix#1\endcsname \else\ifcsname\??colorsetter#1\endcsname \csname\??colorsetter#1\endcsname \csname\??transparencysetter#1\endcsname \fi\fi} \def\colo_helpers_fast_activate_nop#1% {\ifcsname\??colorsetter#1\endcsname \csname\??colorsetter#1\endcsname \csname\??transparencysetter#1\endcsname \fi} \let\dofastcoloractivation\colo_helpers_fast_activate % so far \def\colo_helpers_activate % two-step is not that much faster but less tracing {\ifx\currentcolorprefix\empty \expandafter\colo_helpers_activate_nop \else \expandafter\colo_helpers_activate_yes \fi} \def\colo_helpers_activate_yes#1% {\edef\currentcolorname{#1}% \ifcsname\??colorsetter\currentcolorprefix\currentcolorname\endcsname \csname\??colorsetter\currentcolorprefix\currentcolorname\endcsname \csname\??transparencysetter\currentcolorprefix\currentcolorname\endcsname \else\ifcsname\??colorsetter\currentcolorname\endcsname \csname\??colorsetter\currentcolorname\endcsname \csname\??transparencysetter\currentcolorname\endcsname \fi\fi} \def\colo_helpers_activate_nop#1% {\edef\currentcolorname{#1}% \ifcsname\??colorsetter\currentcolorname\endcsname \csname\??colorsetter\currentcolorname\endcsname \csname\??transparencysetter\currentcolorname\endcsname \fi} \def\colo_helpers_activate_dummy {\csname\??colorsetter \v_colo_dummy_name\endcsname \csname\??transparencysetter\v_colo_dummy_name\endcsname} \let\dousecolorparameter\colo_helpers_activate \unexpanded\def\dousecolorhashparameter#1#2% {\ifcsname#1#2\endcsname \expandafter\dousecolorparameter\csname#1#2\endcsname \fi} \unexpanded\def\dousecurrentcolorparameter {\let\currentcolorname\currentcolorparameter % maybe only when success \ifcsname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname \csname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname \csname\??transparencysetter\currentcolorprefix\currentcolorparameter\endcsname \else\ifcsname\??colorsetter\currentcolorparameter\endcsname \csname\??colorsetter\currentcolorparameter\endcsname \csname\??transparencysetter\currentcolorparameter\endcsname \fi\fi} \let\dosetcolorattribute\dousecolorhashparameter % for a while \unexpanded\def\deactivatecolor % sort of public but a bad name {\let\currentcolorname\s!black \attribute\colorattribute\attributeunsetvalue \attribute\transparencyattribute\attributeunsetvalue} \def\colo_basics_define[#1][#2]% {\ctxcommand{defineprocesscolor("#1","#2",false,\v_colo_freeze_state)}% \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}} \def\colo_basics_define_global[#1][#2]% {\ctxcommand{defineprocesscolor("#1","#2",true,\v_colo_freeze_state)}% \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}} \def\colo_basics_define_named[#1][#2]% {\ctxcommand{defineprocesscolor("#1","#2",false,\v_colo_freeze_state)}% \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}} \def\dodefinefastcolor[#1][#2]% still not fast but ok (might change) {\ctxcommand{defineprocesscolor("#1","#2",false,\v_colo_freeze_state)}% \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}} \def\colo_basics_defined_and_activated#1% {\ctxcommand{defineprocesscolor("\v_colo_dummy_name","#1",false,false)}% \colo_helpers_activate_dummy} % Spotcolors used setxvalue but that messes up currentcolor % and probably no global is needed either but they are global % at the lua end (true argument) so we keep that if only because % spot colors often are a document wide property \def\colo_basics_define_spot[#1][#2][#3]% {\ctxcommand{definespotcolor("#1","#2","#3",true)}% \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}} \def\colo_basics_define_multitone[#1][#2][#3][#4]% {\ctxcommand{definemultitonecolor("#1","#2","#3","#4",true)}% \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}} %D Transparencies (only): \def\colo_basics_define_transpancy[#1][#2]% {\ctxcommand{definetransparency("#1",#2)}} % A goodie that replaces the startMPcolor hackery % \definecolor[red-t] [r=1,t=0.5,a=1] % \definecolor[green-t][g=1,t=0.5,a=1] % % \defineintermediatecolor[mycolora][0.5,red,green] % \defineintermediatecolor[mycolorb][0.5,red-t,green-t] % % \definecolor[mycolorc][.5(blue,red)] % \definecolor[mycolord][.5(blue)] % % \enabledirectives[colors.pgf] % \definecolor[mycolorx][magenta!50!yellow] % % \starttext % test {\mycolora OEPS} test % test {\mycolorb OEPS} test % test {\mycolorc OEPS} test % test {\mycolord OEPS} test % test {\mycolorx OEPS} test % \stoptext % % Beware: if we say: % % \definecolor[one][two] % % only color one is actually defined and two is not seen at the % \LUA\ end. This means that this doesn't work: % % \definecolor[ColorA][red] % \definecolor[ColorB][.5(ColorA)] % \definecolor[ColorC][.5(ColorB,white)] % % But this does work: % % \definecolor[ColorA][1.0(red)] % \definecolor[ColorB][0.5(ColorA)] % \definecolor[ColorC][0.5(ColorB,white)] % % because the fractional definition results in a new definition. \unexpanded\def\defineintermediatecolor {\dotripleempty\colo_basics_define_intermediate} \def\colo_basics_define_intermediate[#1][#2][#3]% \dotripleempty adds {} inside [] {\colo_basics_define_intermediate_indeed[#1][#2][#3]} \def\colo_basics_define_intermediate_indeed[#1][#2,#3,#4][#5]% {\ctxcommand{defineintermediatecolor("#1","#2", \thecolorattribute{#3},\thecolorattribute{#4}, \thetransparencyattribute{#3},\thetransparencyattribute{#4}, "#5",false,\v_colo_freeze_state)}% not global \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}} %D Here is a more efficient helper for pgf: %D %D \starttying %D \startluacode %D function commands.pgfxcolorspec(ca) -- {}{}{colorspace}{list} %D local cv = attributes.colors.values[ca] %D if cv then %D local model = cv[1] %D if model == 2 then %D context("{}{}{gray}{%1.3f}",cv[2]) %D elseif model == 3 then %D context("{}{}{rgb}{%1.3f,%1.3f,%1.3f}",cv[3],cv[4],cv[5]) %D elseif model == 4 then %D context("{}{}{cmyk}{%1.3f,%1.3f,%1.3f,%1.3f}",cv[6],cv[7],cv[8],cv[9]) %D else %D context("{}{}{gray}{%1.3f}",cv[2]) %D end %D else %D context("{}{}{gray}{0}") %D end %D end %D \stopluacode %D %D \def\pgfutil@registercolor#1% %D {\setevalue{\string\color@#1}{\noexpand\xcolor@\ctxcommand{pgfxcolorspec(\thecolorattribute{#1})}}} %D %D \definecolor [darkblue] [r=0,g=0,b=0.5] %D %D \starttikzpicture %D \fill [blue] (0,0) circle(1); %D \fill [darkblue] (0,0) circle(1); %D \stoptikzpicture %D \stoptyping %D %D \stopmode \def\pgf@context@registercolor#1% bonus macro {\setevalue{\string\color@#1}{\noexpand\xcolor@{}{}\ctxcommand{pgfxcolorspec(\thecolorattribute{#1})}}} %D \starttyping %D \ifdefined\pgf@context@registercolor %D \let\pgfutil@registercolor\pgf@context@registercolor %D \fi %D \stoptyping %D \macros %D {doifcolorelse, doifcolor} %D %D Switching to a color is done by means of the following %D command. Later on we will explain the use of palets. We %D define ourselves a color conditional first. \def\doifcolorelse#1% {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname \expandafter\firstoftwoarguments \else\ifcsname\??colorattribute#1\endcsname \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} \def\doifcolor#1% {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname \expandafter\firstofoneargument \else\ifcsname\??colorattribute#1\endcsname \doubleexpandafter\firstofoneargument \else \doubleexpandafter\gobbleoneargument \fi\fi} %D \macros %D {startregistercolor,stopregistercolor,permitcolormode} %D %D If you only want to register a color, the switch \type %D {\ifpermitcolormode} can be used. That way the nested %D colors know where to go back to. %D %D We use these macros for implementing text colors %D (actually, the first application was in foreground %D colors). %D %D \starttyping %D \starttextcolor[red] %D \dorecurse{10}{\input tufte \color[green]{oeps} \par} %D \stoptextcolor %D \stoptyping %D %D This is more efficient than the alternative: %D %D \starttyping %D \setupbackgrounds[text][foregroundcolor=red] %D \startregistercolor[red] %D \dorecurse{10}{\input tufte \color[green]{oeps} \par} %D \stopregistercolor %D \stoptyping \let\maintextcolor \empty \def\defaulttextcolor {black} \def\s!themaintextcolor{themaintextcolor} \unexpanded\def\inheritmaintextcolor {\ifx\maintextcolor\empty\else\colo_helpers_activate\maintextcolor\fi} \unexpanded\def\onlyinheritmaintextcolor {\ifx\maintextcolor\empty \deactivatecolor \else \colo_helpers_activate\maintextcolor \fi} \appendtoks \deactivatecolor % public? \inheritmaintextcolor \to \everybeforeoutput \def\colo_helpers_switch_to_maintextcolor#1% {\let\maintextcolor\s!themaintextcolor \definecolor[\maintextcolor][#1]% can be fast one \colo_helpers_activate\maintextcolor \ctxcommand{registermaintextcolor(\thecolorattribute\maintextcolor)}} \unexpanded\def\starttextcolor[#1]% {\doifsomething{#1} {\colo_helpers_switch_to_maintextcolor{#1}}} \let\stoptextcolor\relax \let\p_colo_textcolor\empty \def\colo_helpers_initialize_maintextcolor {\edef\p_colo_textcolor{\directcolorsparameter\c!textcolor}% \ifx\p_colo_textcolor\empty \colo_helpers_switch_to_maintextcolor\defaulttextcolor \else \colo_helpers_switch_to_maintextcolor\p_colo_textcolor \fi} \appendtoks \colo_helpers_initialize_maintextcolor \to \everyjob \appendtoks \colo_helpers_initialize_maintextcolor \to \everysetupcolors \def\colo_helpers_inherited_direct_cs#1{\csname\??colorsetter \ifcsname\??colorsetter #1\endcsname#1\fi\endcsname} \def\colo_helpers_inherited_direct_ca#1{\csname\??colorattribute \ifcsname\??colorattribute #1\endcsname#1\fi\endcsname} \def\colo_helpers_inherited_direct_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter #1\endcsname#1\fi\endcsname} \def\colo_helpers_inherited_direct_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute#1\endcsname#1\fi\endcsname} \def\colo_helpers_inherited_palet_ca#1#2{\csname\??colorattribute \ifcsname\??colorattribute \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} \def\colo_helpers_inherited_palet_cs#1#2{\csname\??colorsetter \ifcsname\??colorsetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} \def\colo_helpers_inherited_palet_ta#1#2{\csname\??transparencyattribute\ifcsname\??transparencyattribute\??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} \def\colo_helpers_inherited_palet_ts#1#2{\csname\??transparencysetter \ifcsname\??transparencysetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} \let\colo_helpers_set_value\setvalue \appendtoks \ifconditional\c_colo_expanded \let\colo_helpers_set_value\setevalue \else \let\colo_helpers_set_value\setvalue \fi \to \everysetupcolors \def\colo_palets_define_set#1#2#3% {\doifassignmentelse{#3}% \definepalet[test][xx={y=.4}] {\definecolor[\??colorpalet#1:#2][#3]% \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_palet_ca{#1}{#2}}% \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_palet_cs{#1}{#2}}% \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_palet_ta{#1}{#2}}% \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_palet_ts{#1}{#2}}} {\ifcsname\??colorsetter#3\endcsname % \definepalet[test][xx=green] \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_direct_cs{#3}}% \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_direct_ca{#3}}% \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_direct_ts{#3}}% \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_direct_ta{#3}}% \else % not entered when making format \localundefine{\??colorsetter #1:#2}% \localundefine{\??colorattribute #1:#2}% \localundefine{\??transparencysetter #1:#2}% \localundefine{\??transparencyattribute#1:#2}% \fi}} \letvalue{\??colorsetter }\empty \letvalue{\??colorattribute }\!!zerocount \letvalue{\??transparencysetter}\empty \letvalue{\??transparencyattribute}\!!zerocount \setvalue{\??colorattribute currentcolor}{\the\attribute\colorattribute} % for mpcolor \setvalue{\??transparencyattribute currentcolor}{\the\attribute\transparencyattribute} % for mpcolor \def\colo_helpers_inherited_current_ca#1{\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname} \def\colo_helpers_inherited_current_cs#1{\csname\??colorsetter \ifcsname\??colorsetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorsetter #1\endcsname#1\fi\fi\endcsname} \def\colo_helpers_inherited_current_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname} \def\colo_helpers_inherited_current_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencysetter #1\endcsname#1\fi\fi\endcsname} %D Low level defs: \unexpanded\def\colordefalc#1#2{\setevalue{\??colorattribute #1}{#2}\setvalue {\??colorsetter #1}{\attribute\colorattribute #2 }} \unexpanded\def\colordefagc#1#2{\setxvalue{\??colorattribute #1}{#2}\setgvalue{\??colorsetter #1}{\attribute\colorattribute #2 }} % was not g \unexpanded\def\colordefalt#1#2{\setevalue{\??transparencyattribute#1}{#2}\setvalue {\??transparencysetter#1}{\attribute\transparencyattribute#2 }} \unexpanded\def\colordefagt#1#2{\setxvalue{\??transparencyattribute#1}{#2}\setgvalue{\??transparencysetter#1}{\attribute\transparencyattribute#2 }} \unexpanded\def\colordefflc#1#2{\setvalue {\??colorattribute #1}{\colo_helpers_inherited_current_ca{#2}}\setvalue {\??colorsetter #1}{\colo_helpers_inherited_current_cs{#2}}} \unexpanded\def\colordeffgc#1#2{\setgvalue{\??colorattribute #1}{\colo_helpers_inherited_current_ca{#2}}\setvalue {\??colorsetter #1}{\colo_helpers_inherited_current_cs{#2}}} \unexpanded\def\colordefflt#1#2{\setvalue {\??transparencyattribute#1}{\colo_helpers_inherited_current_ta{#2}}\setvalue {\??transparencysetter#1}{\colo_helpers_inherited_current_ts{#2}}} \unexpanded\def\colordeffgt#1#2{\setgvalue{\??transparencyattribute#1}{\colo_helpers_inherited_current_ta{#2}}\setgvalue{\??transparencysetter#1}{\colo_helpers_inherited_current_ts{#2}}} \unexpanded\def\colordefrlc #1{\localundefine {\??colorattribute #1}\localundefine {\??colorsetter #1}} \unexpanded\def\colordefrgc #1{\globalundefine{\??colorattribute #1}\globalundefine{\??colorsetter #1}} \unexpanded\def\colordefrlt #1{\localundefine {\??transparencyattribute#1}\localundefine {\??transparencysetter#1}} \unexpanded\def\colordefrgt #1{\globalundefine{\??transparencyattribute#1}\globalundefine{\??transparencysetter#1}} %D \macros %D {colorvalue, grayvalue} %D %D We can typeset the color components using \type{\colorvalue} and %D \type{\grayvalue}. The commands: %D %D \startbuffer %D color value of SomeKindOfRed: \colorvalue{SomeKindOfRed} \crlf %D gray value of SomeKindOfRed: \grayvalue{SomeKindOfRed} %D \stopbuffer %D %D \typebuffer %D %D show us: %D %D \startexample %D \getbuffer %D \stopexample \let\currentcolorname\s!black % todo \let\outercolorname \s!black % todo \let\colorformatseparator\space \def\MPcolor #1{\ctxcommand{mpcolor(\number\attribute\colormodelattribute,\number\colo_helpers_inherited_current_ca{#1},\number\colo_helpers_inherited_current_ta{#1})}} \def\MPoptions #1{\ctxcommand{mpoptions(\number\attribute\colormodelattribute,\number\colo_helpers_inherited_current_ca{#1},\number\colo_helpers_inherited_current_ta{#1})}} \def\thecolorattribute #1{\number\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname} \def\thetransparencyattribute#1{\number\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname} \def\thecolormodelattribute {\the\attribute\colormodelattribute} \def\internalspotcolorname #1{\ctxcommand{spotcolorname(\thecolorattribute{#1})}} \def\internalspotcolorparent #1{\ctxcommand{spotcolorparent(\thecolorattribute{#1})}} \def\internalspotcolorsize #1{\ctxcommand{spotcolorvalue(\thecolorattribute{#1})}} \def\colorcomponents #1{\ctxcommand{colorcomponents(\thecolorattribute{#1})}} \def\transparencycomponents #1{\ctxcommand{transparencycomponents(\thetransparencyattribute{#1})}} \def\colorvalue #1{\ctxcommand{formatcolor(\thecolorattribute{#1},"\colorformatseparator")}} \def\grayvalue #1{\ctxcommand{formatgray (\thecolorattribute{#1},"\colorformatseparator")}} \def\doifblackelse #1{\ctxcommand{doifblackelse(\thecolorattribute{#1})}} \def\doifdrawingblackelse {\ctxcommand{doifdrawingblackelse()}} %D \macros %D {forcecolorhack} %D %D We can out this in front of (for instance) a special and so force color %D to be applied (only glyphs, rules and leaders are handled). %D %D \startbuffer %D \framed %D [background=color,backgroundcolor=yellow,framecolor=red,corner=round] %D {test} %D \stopbuffer %D %D \typebuffer \getbuffer % ignores in attribute handler % % \def\forcecolorhack{\vrule\s!width\zeropoint\s!height\zeropoint\s!depth\zeropoint} % \normal added else fails in metafun manual (leaders do a hard scan) \unexpanded\def\forcecolorhack{\leaders\hrule\hskip\zeropoint} %D We default to the colors defined in \type {colo-imp-rgb} and %D support both \RGB\ and \CMYK\ output. Transparencies are defined %D here: \definecolor[black][s=0] \definecolor[white][s=1] \definetransparency [none] [0] \definetransparency [normal] [1] \definetransparency [multiply] [2] \definetransparency [screen] [3] \definetransparency [overlay] [4] \definetransparency [softlight] [5] \definetransparency [hardlight] [6] \definetransparency [colordodge] [7] \definetransparency [colorburn] [8] \definetransparency [darken] [9] \definetransparency [lighten] [10] \definetransparency [difference] [11] \definetransparency [exclusion] [12] \definetransparency [hue] [13] \definetransparency [saturation] [14] \definetransparency [color] [15] \definetransparency [luminosity] [16] \setupcolors [\c!state=\v!stop, % color will be enabled later on \c!conversion=\v!yes, \c!rgb=\v!yes, \c!cmyk=\v!yes, \c!spot=\v!yes, \c!pagecolormodel=\v!none, \c!expansion=\v!no, \c!textcolor=, \c!factor=\v!yes] \setupcolor [\v!rgb] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-utf.mkiv0000644000175000017500000000336211754241457024310 0ustar norbertnorbert%D \module %D [ file=char-utf, %D version=2006.12.05, %D title=\CONTEXT\ Character Support, %D subtitle=Unicode UTF, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Character Support / Unicode UTF} %D After a bit of experimenting we reached a clean state where \UTF\ %D 8, 16 and 32 were supported as well as collapsing (combining %D sequences). Writing the code was a relaxed experience, not in the %D last place because it was accompanied by listening to those nice %D Vienna Teng cd's (who decided that making music was more fun than %D programming, but then, she may not know \TEX\ and \LUA). \unprotect \registerctxluafile{char-utf}{1.001} %D We enable collapsing (combining characters) by default, but %D since the source files are rather simple, we postpone the %D initialization till runtime. % resolvers.filters.install('utf',characters.filters.utf.collapse) % \appendtoks % \ctxlua{ % local textfileactions = resolvers.openers.helpers.textfileactions % utilities.sequencers.enableaction(textfileactions,"characters.filters.utf.collapse") % utilities.sequencers.enableaction(textfileactions,"characters.filters.utf.decompose") % }% % \to \everyjob \appendtoks \ctxlua{characters.filters.utf.enable()}% \to \everyjob %D The next one influences input parsing. %D %D \starttyping %D \definecomposedutf 318 108 126 % lcaron %D \stoptyping \unexpanded\def\definecomposedutf#1 #2 #3 % {\ctxlua{characters.filters.utf.addgrapheme("#1","#2","#3")}} \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frq-en.lua0000644000175000017500000000241412130411274024477 0ustar norbertnorbert-- return { -- language = "en", -- source = "http://caislab.icu.ac.kr/course/2001/spring/ice605/down/010306.pdf", -- frequencies = { -- [0x0061] = 8.2, [0x0062] = 1.5, [0x0063] = 2.8, [0x0064] = 4.3, [0x0065] = 12.7, -- [0x0066] = 2.2, [0x0067] = 2.0, [0x0068] = 6.1, [0x0069] = 7.0, [0x006A] = 0.2, -- [0x006B] = 0.8, [0x006C] = 4.0, [0x006D] = 2.4, [0x006E] = 6.7, [0x006F] = 7.5, -- [0x0070] = 1.9, [0x0071] = 0.1, [0x0072] = 6.0, [0x0073] = 6.3, [0x0074] = 9.1, -- [0x0075] = 2.8, [0x0076] = 1.0, [0x0077] = 2.3, [0x0078] = 0.1, [0x0079] = 2.0, -- [0x007A] = 0.1, -- } -- } return { language = "en", source = "http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm", frequencies = { [0x0061] = 8.04, [0x0062] = 1.54, [0x0063] = 3.06, [0x0064] = 3.99, [0x0065] = 12.51, [0x0066] = 2.30, [0x0067] = 1.96, [0x0068] = 5.49, [0x0069] = 7.26, [0x006A] = 0.16, [0x006B] = 0.67, [0x006C] = 4.14, [0x006D] = 2.53, [0x006E] = 7.09, [0x006F] = 7.60, [0x0070] = 2.00, [0x0071] = 0.11, [0x0072] = 6.12, [0x0073] = 6.54, [0x0074] = 9.25, [0x0075] = 2.71, [0x0076] = 0.99, [0x0077] = 1.92, [0x0078] = 0.19, [0x0079] = 1.73, [0x007A] = 0.09, } } context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-ref.mkii0000644000175000017500000027121311754241457024311 0ustar norbertnorbert%D \module %D [ file=strc-ref, %D version=1998.01.15, %D title=\CONTEXT\ Structure Macros, %D subtitle=Cross Referencing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % we will merge mkii code back in here \writestatus{loading}{ConTeXt Structure Macros / Cross Referencing} % todo : unknown/illegal reference no arg % todo : +n pages check on 'samepage' (contrastcolor) % Makes more sense to build action data first, especially now % openaction etc are supported. % % \definespecial\doexecuteactionchain w h % \definespecial\dosetgotolocation % \definespecial\dosetexecuteJScode % ... % % complication: what when direct? Two calls! % I considered to change / simplify % % rt!page -> \definereference % rt!list -> \definereference % rt!exec -> \definereference % % but for the moment will not do so, if only because % the current implementation permits us to determine % the page state and is also more efficient % the code is rather fuzzy (and will be redone some day); this is % due to the chaining (collect secondary and then hook that into % the primary etc \unprotect %D This module deals with referencing. In \CONTEXT\ referencing %D is one of the core features, although at a first glance %D probably nobody will notice. This is good, because %D referencing should be as hidden as possible. %D %D In paper documents, referencing comes down to cross %D referencing, but in their interactive counterparts, is also %D involves navigation. Many features implemented here are %D therefore closely related to navigation. %D %D Many \CONTEXT\ commands can optionally be fed with a %D reference. Such a reference, when called upon, returns the %D number of a figure, table, chapter etc, a piece of text, or %D a pagenumber. %D %D There are three ways of defining a reference: %D %D \starttyping %D \pagereference[here] %D \textreference[here]{some text} %D \stoptyping %D %D the third alternative combines them in: %D %D \starttyping %D \reference[here]{some text} %D \stoptyping \def\textreference {\dosingleargument\dotextreference} \def\pagereference {\dosingleargument\dopagereference} \def\reference {\dosingleargument\doreference } %D These are implemented in a low level form as: %D %D \starttyping %D \def\dotextreference[#1]{\rawtextreference\s!txt{#1}} % #2 %D \def\dopagereference[#1]{\rawpagereference\s!pag{#1}} %D \def\doreference [#1]{\rawreference \s!ref{#1}} % #2 %D \stoptyping %D %D or without expansion problems: \def\dotextreference[#1]#2% {\bgroup \def\asciia{#1}% \defconvertexpanded\asciib\@@rfexpansion{#2}% \@EA\rawtextreference\@EA\s!txt\@EA\asciia\@EA{\asciib}% \egroup} \def\dopagereference[#1]% {\rawpagereference\s!pag{#1}} \def\doreference[#1]#2% {\bgroup \def\asciia{#1}% \defconvertexpanded\asciib\@@rfexpansion{#2}% \@EA\rawreference\@EA\s!ref\@EA\asciia\@EA{\asciib}% \egroup} %D Actually there is not much difference between a text and a %D full reference, but it's the concept that counts. The low %D level implementation is: \def\rawreference#1#2#3% {\bgroup \the\everyreference \makesectionformat \writereference{#2} {\sectionformat\sectionseparator\sectionseparator\noexpand\pagenumber}% {\noexpand\realfolio}% {#3}% \egroup} \def\rawpagereference#1#2% {\bgroup \the\everyreference \makesectionformat \writereference{#2} {\sectionformat\sectionseparator\sectionseparator\noexpand\pagenumber}% {\noexpand\realfolio}% {}% \egroup} \def\rawtextreference#1#2#3% {\bgroup \the\everyreference \writereference{#2} {}% {\noexpand\realfolio}% {#3}% \egroup} %D The last reference is saved in a macro named \type %D {\lastreference} (indeed). To keep track of the order of %D references, later we will see for what purpose, we maintain %D a counter. \newcount\crossreferencenumber \crossreferencenumber\plusone \let\lastreference\empty \def\writereference#1#2#3#4% {\ifreferencing \edef\!!stringa{#1}% \ifx\!!stringa\empty \else \def\dowritereference##1% {\xdef\lastreference{##1}% \@EA\dodowritereference\lastreference\empty\empty\end{#2}{#3}{#4}}% \rawprocesscommalist[\!!stringa]\dowritereference \fi \fi} %D Beware: \type {#2} gobbles space in references so that %D \typ {a nice ref} becomes \typ {anice ref}. \def\dodowritereference#1#2#3\end#4#5#6% {\bgroup \global\advance\crossreferencenumber \plusone\relax \if#1-\if#2:% \let\referenceprefix\empty \xdef\lastreference{#3}% \else % \xdef\lastreference{#1#2#3}% here we loose the space \fi\else % \xdef\lastreference{#1#2#3}% here we loose the space \fi \ifx\lastreference\empty \else \doiffirstreferenceoccurance\lastreference {\thisisdestination{\referenceprefix\lastreference}}% \referenceinfo>\lastreference \expanded{\writeutilitycommand{\noexpand\mainreference{\referenceprefix}{\lastreference}{#4}{#5}{#6}}}% \fi \egroup} %D We will implement \type {\doiffirstreferenceoccurance} %D later on. %D These macros depend on three other ones, %D \type {\makesectionformat}, that generated \type %D {\sectionformat}, \type {\pagenumber}. The not yet used %D argument \type{#1} is a tag that specifies the type of %D reference. %D \macros %D {everyreference} %D %D For rather tricky purposes, one can assign sanitizing %D macros to \type{\everyreference}. \newevery \everyreference \relax %D This is really needed, since for instance Polish has a %D different alphabet and needs accented entries in registers. \appendtoks \cleanupfeatures \to \everyreference %D Why do we have to write down references? \TEX, and therefore %D \CONTEXT\ is a batch processing system. During the %D typesetting process, pages are shipped out, which means that %D especially forward references are not yet known when the %D page is typeset. That's why we always need a second (and %D sometimes even a third) pass to get the cross references %D right. The same goes for lists and other pagenumber %D dependant data. %D %D Therefore, during a pass, \CONTEXT\ writes the references to %D a the utility file. The next macro does the job and %D generates entries like: (for mkii) %D %D \starttyping %D \mainreference{prefix}{reference}{page}{realpage}{text} %D \stoptyping %D %D We did not yet discuss prefixing. Especially in interactive %D documents, it's not always easy to keep track of duplicate %D references. The prefix mechanism, which we will describe %D later on, solves this problem. By (automatically) adding a %D prefix one keeps references local, but the global ones in %D view. To enable this feature, we explictly split the prefix %D from the reference. %D %D A former implementation used \type{\removesubstring} to get %D rid of the don't||use||a||prefix signal (\type{-:}), but the %D next one proved to be more than twice as fast. \let\referenceprefix=\empty \let\lastreference =\empty %D When (during a second pass over the document) references are %D loaded, they are saved in a macro, one for each reference. %D In practice this comes to giving \type {\mainreference} a %D appropriate meaning and loading the utility file. %D For a long time the only way to access an external file was %D to use the file prefix (\type {somefile::}. However, when %D you split up a document, redefining the references may be %D such a pain, that another approach is feasible. By setting %D the \type {autofile} variable to \type {yes} or \type %D {page}, you can access the reference directly. The latter %D case nills the prefix method, thereby saving some memory. %D %D \starttabulate[||||] %D \NC filename::tag \NC page(filename::pnum) \NC tag \NC\NR %D \NC $\star$ \NC \NC \NC\NR %D \NC $\star$ \NC $\star$ \NC $\star$ \NC\NR %D \NC \NC $\star$ \NC \NC\NR %D \stoptabulate \chardef\autocrossfilereferences=0 \def\setreferences% some day, filename will be stored in ref record {\the\everyreference % we're grouped anyway \def\mainreference##1##2##3##4##5% can be made faster by indirect calls {\ifcsname\r!cross\fileprefix##1##2\endcsname \ifcase0##4\else \showmessage\m!references2{[##1][##2],##4 (\currentutilityfilename)}% \fi \else \ifcase\autocrossfilereferences \setglobalcrossreference{##1##2}{##3}{##4}{##5}% \or \setglobalcrossreference{##1##2}{##3}{##4}{##5}% \ifcsname\r!cross##1##2\endcsname \showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}% \else \expanded{\definereference[##1##2][\fileprefix##1##2]}% \fi \or \ifcsname\r!cross##1##2\endcsname \showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}% \else \expanded{\definereference[##1##2][\noexpand\v!page(\fileprefix##4)]}% \fi \fi \fi}} \def\resetreferences {\let\mainreference\gobblefivearguments} \resetreferences %D Here we see another kind of prefix surface: \type %D {\fileprefix}. This prefix enables us to use references from %D different files in one document. This is no really useful in %D paper documents, but many interactive ones cannot do %D without. \let\fileprefix=\empty %D Loading references is done using the normal utility file %D handling macros. The \type{\hbox} trick prevents spaces %D creeping in (references are set globally anyway). \newtoks\everycheckreferences %D When we load references, the file name is stored in a %D list. \let\loadedreferences\empty %D We only load references ones. \newconditional\jobreferencesloaded %D This token list is expanded after the references are loaded. %D This hook can be used to initialize mechanisms that depend %D on the reference mechsnism. An example can be found in the %D field module. \def\checkreferences {\bgroup \let\fileprefix\empty \global\let\checkreferences\relax \usereferences[\jobname]% \checkrealpage \egroup \the\everycheckreferences} \def\usereferences[#1]% {\startnointerference \checkreferences \doifparentfileelse{#1} {\ifconditional\jobreferencesloaded\else \doutilities{references}{#1}\empty\relax\relax \global\settrue\jobreferencesloaded \fi} {\ExpandBothAfter\doifnotinset{#1}{\loadedreferences} {\doutilities{references}{#1}\empty\relax\relax \ifx\fileprefix\empty\else \doglobal\addtocommalist{#1}\loadedreferences \fi}} \stopnointerference} %D As mentioned we will also use the cross reference mechanism %D for navigational purposes. The main reason for this is that %D we want to treat both categories alike: %D %D \starttyping %D \goto{go back}[PreviousJump] %D \goto{colofon}[colofon page] %D \stoptyping %D %D Here \type{PreviousJump} is handled by the viewer, while the %D \type{colofon page} reference is, apart from hyperlinking, a %D rather normal reference. %D %D We already saw that cross refences are written to and read %D from a file. The pure navigational ones don't need to be %D written to file, but both for fast processing and %D transparant integration, they are saved internally as a sort %D of reference. We can easily distinguish such system %D references from real cross reference ones by their tag: \chardef\rt!cross=0 % even means possible page reference \chardef\rt!done =1 \chardef\rt!page =2 % and is used in \checkrealreferencepage \chardef\rt!exec =3 \chardef\rt!list =4 % to determine the page state %D We also use the odd/even characteristic to determine the %D page state. %D Here the \type{\rt!exec} tags a viewer specific navigational %D reference, while for instance \type{\rt!page} gives fast %D access to for instance the previous or next page. The %D counter serves a purpose to be explained later. We use a %D token register to prevent expansion of the text component, %D which can contain all kind of \TEX\ commands. \newcount\crossreferenceorder % these are used often so we sped them up \def\setlocalcrossreference#1#2#3#4% {\scratchtoks{#4}% \@EA\edef\csname\r!cross\fileprefix#1\endcsname {\rt!cross{#2}{#3}{\the\scratchtoks}{0}}} \def\setglobalcrossreference#1#2#3#4% {\scratchtoks{#4}% \global\advance\crossreferenceorder \plusone \@EA\xdef\csname\r!cross\fileprefix#1\endcsname {\rt!cross{#2}{#3}{\the\scratchtoks}{\the\crossreferenceorder}}} \def\setlocalsystemreference#1#2#3% {\@EA\edef\csname\r!cross\fileprefix#2\endcsname{#1{#3}}} \def\setglobalsystemreference#1#2#3% {\@EA\xdef\csname\r!cross\fileprefix#2\endcsname{#1{#3}}} \def\copycrossreference#1#2#3% file from to / slow {\bgroup \doifelse{#1}{} {\let\fileprefix\empty} {\def\fileprefix{#1::}}% \def\rt!cross##1##2##3##4% {\setxvalue{\r!cross\fileprefix#3}% {\noexpand\rt!cross{##1}{##2}{##3}{##4}}}% \getvalue{\r!cross\fileprefix#2}% \egroup} %D References from other files are defined globally without %D ordering data. The first definition, the one without %D \type{#1}, is used as a signal that references are defined. \def\setoutercrossreference#1#2#3#4% {\toks0={#4}% \@EA\xdef\csname\r!cross\fileprefix \endcsname{\rt!cross{}{}{1}{0}}% \@EA\xdef\csname\r!cross\fileprefix#1\endcsname{\rt!cross{#2}{#3}{\the\toks0}{0}}} %D In practice accessing a reference comes down to: %D %D \startitemize[packed] %D \item checking the validity %D \item determining the type %D \item filtering the content %D \stopitemize %D %D We'll deal with the last two steps first. References are %D saved in the general format: %D %D \starttyping %D {\referenceclass{realpage}{page}{text}} %D {\referenceclass{type}{data}} %D \stoptyping %D %D When we filter the content, next macros are set when we %D meet a normal cross reference: \let\currentrealreference =\empty \let\currentpagereference =\empty \let\currenttextreference =\empty \let\currentsubtextreference =\empty \let\currentsubsubtextreference=\empty %D System references only have one component: \let\currentdatareference=\empty %D Because internally a reference comes in two disguises, one %D with four arguments and one with only two, we need a two %D step filter. \def\getreferenceelements#1% only one level expansion permitted! {\@EA\@EA\@EA\dogetreferenceelements\csname\r!cross\referenceprefix#1\endcsname\empty\empty\empty\empty} %D In the following step, the \type{\ifx#1} test is needed %D because we can access this macro directly, and therefore %D \type{#1} can be an undefined reference (in fact, this hack %D was needed for the line numbering mechanism). %D %D We already introduced a few counters. Here we see why we %D need those. The discrepancy between the cross reference %D definition order (determined by the utility file) and the %D moment the reference is defined in the text, is a measure %D for it's forward character. This enables references like %D {\em as we will see later on}. \chardef\currentreferencetype=0 \newif\ifforwardreference \newif\ifrealreferencepage \def\docheckrealreferencepage#1% {\doifnumberelse{#1} {\ifnum#1=\realpageno \realreferencepagetrue \else \realreferencepagefalse \fi} {\realreferencepagefalse}} \def\currentfolioreference{0} \let\currentlocationreference\empty \def\dogetreferenceelements#1#2#3#4#5% {\chardef\currentreferencetype=\ifx#1\relax0\else#1\fi\relax \ifnum\currentreferencetype<\plustwo \edef\currentpagereference{#2}% \let \currentdatareference\empty \edef\currentlocationreference{#2}% \ifx\currentpagereference \empty \let\currentfolioreference\folio \else \def \currentpagereference {\referencepagenumber[#2]}% \edef\currentfolioreference{\dosplitofffoliopart[#2]}% \fi \edef\currentrealreference{#3}% \settextreferences#4\end \ifnum0#5<\crossreferencenumber \forwardreferencetrue \else \forwardreferencefalse \fi \else \let \currentlocationreference\empty \edef\currentrealreference {#3}% \def \currentdatareference {#2}% \let \currentfolioreference\folio \settextreferences#4\end \forwardreferencefalse \fi \ifodd\currentreferencetype \realreferencepagefalse \else \docheckrealreferencepage\currentrealreference \ifrealreferencepage \else \docheckrealreferencepage\currentdatareference \fi \fi} \ifx\referencepagenumber\undefined \def\referencepagenumber[#1]{?} \fi %D Text references can contain more than one entry and %D therefore we check for %D %D \starttyping %D {entry} %D \stoptyping %D %D or %D %D \starttyping %D {{entry}{entry}{entry}} %D \stoptyping %D %D and split accordingly. \def\settextreferences {\futurelet\next\dosettextreferences} \def\dosettextreferences {\ifx\next\bgroup \expandafter\dotriplegroupempty\expandafter\dodosettextreferences \else \expandafter\donosettextreferences \fi} \def\donosettextreferences#1\end {\def\currenttextreference{#1}% \let\currentsubtextreference\empty \let\currentsubsubtextreference\empty} \def\dodosettextreferences#1#2#3#4\end {\def\currenttextreference{#1}% \def\currentsubtextreference{#2}% \def\currentsubsubtextreference{#3}} %D When inside this testing macro we can savely use: \def\doifforwardreferenceelse#1#2% {\ifforwardreference#1\else#2\fi} %D Duplicate references are reported while loading the utility %D file. To prevent problems with document viewers cq. %D preprocessors, one can enable a (bit time consuming) check. \newif\ifcheckduplicatereferences %D The next rather dirty trick is needed to preserve the %D meaning of the original cross reference. In fact, %D \type{\rt!cross} is toggled to \type{\rt!done}. \def\rt!crossdone#1#2#3#4{\rt!done{#1}{#2}{#3}{#4}} \def\dohandleduplicatereference#1% {\bgroup \let\rt!cross\rt!crossdone \@EA\xdef\csname\r!cross\referenceprefix#1\endcsname % no let ! {\csname\r!cross\referenceprefix#1\endcsname}% \egroup} \def\checkfirstreferenceoccurance#1#2% etex {\@EA\ifx\csname\r!cross\referenceprefix#1\endcsname\relax % no ifcsname needed here \predefinereference{#1}% #2% \else \getreferenceelements{#1}% \ifnum\currentreferencetype=\rt!cross \dohandleduplicatereference{#1}% #2% \fi \fi} \def\doiffirstreferenceoccurance {\ifcheckduplicatereferences \@EA\checkfirstreferenceoccurance \else \@EA\secondoftwoarguments \fi} %D We still have to test for the existence of a reference, but %D before we come to that, we first look into the way a %D reference can be accessed. It will be no surprise that %D references can come in several forms. %D %D Cross references appear as numbers (figure~1.1, chapter~2) %D or pagenumbers (page~2, page 3--2), and are called with %D \type{\in} and \type{\at}. In interactive documents we also %D have \type{\goto}, \type{\button} and alike. These are more %D versatile and look like: %D %D \starttyping %D \goto[reference] %D \goto[outer reference::] %D \goto[outer reference::inner reference] %D \goto[operation(argument)] %D \goto[operation(action{argument,argument})] %D \goto[action] %D \goto[action{argument}] %D \stoptyping %D %D The first one is a normal reference, the second and third %D are references to a file or \URL. The brace delimited %D references for instance refer to a \JAVASCRIPT. The last %D example shows that we can pass arguments to the actions. %D %D When we split off the components of such a reference, the %D results are available in: %D %D \starttyping %D \currentreferencespecial %D \currentreferenceoperation %D \currentreferencearguments %D \currentinnerreference %D \currentouterreference %D \currentfullreference %D \stoptyping %D %D Splitting a reference is done by: %D %D \starttyping %D \splitofffullreference {reference} %D \splitoffreference {reference} %D \stoptyping %D %D The second alternative can be used in a second stage %D splitoff and only handles \type{::}. \newif\ifreferencefound \let\currentfullreference \empty \let\currentreferencespecial \empty \let\currentreferenceoperation\empty \let\currentreferencearguments\empty \let\currentouterreference \empty \let\currentinnerreference \empty \def\setreferencevariables#1#2#3#4#5% {\def\currentreferencespecial {#1}% \def\currentreferenceoperation{#2}% \def\currentreferencearguments{#3}% \def\currentouterreference {#4}% \def\currentinnerreference {#5}} \def\splitofffullreference#1% {\edef\currentfullreference{#1}% \@EA\dosplitofffullreference\currentfullreference\empty(\relax)\empty\end} \def\dosplitofffullreference#1(#2#3)#4#5\end {\ifx#2)% \let\currentreferenceoperation\empty \let\currentreferencearguments\empty \let\currentinnerreference \empty \dodosplitofffullreferenceA#1::::\empty\end \currentouterreference\currentreferencespecial \else\ifx#2\relax \let\currentreferencespecial \empty \let\currentreferenceoperation\empty \let\currentreferencearguments\empty \dodosplitofffullreferenceA#1::::\empty\end \currentouterreference\currentinnerreference \else \dosplitoffreferenceoperation#2#3{}\end \let\currentinnerreference\empty \dodosplitofffullreferenceB#1::::\empty\end \currentouterreference\currentreferencespecial \fi\fi} \def\dosplitoffreferenceoperation#1#% {\def\currentreferenceoperation{#1}% \dodosplitoffreferenceoperation} \def\dodosplitoffreferenceoperation#1#2\end {\def\currentreferencearguments{#1}} \def\dodosplitofffullreferenceA#1::#2::#3#4\end#5#6% {\if#3:% \dosetfullreferenceA#5#1{}\edef#6{#2}% \else \dosetfullreferenceA#6#1{}\let#5\empty \fi} \def\dosetfullreferenceA#1#2#% {\edef#1{#2}% \def\currentreferencearguments} \def\dodosplitofffullreferenceB#1::#2::#3#4\end#5#6% {\if#3:% \edef#5{#1}\edef#6{#2}% \else \let#5\empty\edef#6{#1}% \fi} \def\splitoffreference#1% {\expandafter\dodosplitofffullreferenceB#1::::\empty\end \currentouterreference\currentinnerreference} %D Although the previous split macros have a multistep %D character, there performance is quite reasonable. %D %D For debugging purposes we provide a showcase macro: \long\def\dodoshowcurrentreference#1\from#2\with#3% {\defconvertedcommand\ascii{#2}% \edef\currentreferenceshow{\currentreferenceshow/#1/\ascii/#3/}} \long\def\doshowcurrentreference#1% {\edef\currentreferenceshow{/\ifreferencefound+\else-\fi/#1}% \dodoshowcurrentreference ful\from\currentfullreference \with#1% \dodoshowcurrentreference spe\from\currentreferencespecial \with#1% \dodoshowcurrentreference ope\from\currentreferenceoperation\with#1% \dodoshowcurrentreference arg\from\currentreferencearguments\with#1% \dodoshowcurrentreference out\from\currentouterreference \with#1% \dodoshowcurrentreference inn\from\currentinnerreference \with#1} \def\showcurrentreference% {\bgroup\tttf\doshowcurrentreference\par\currentreferenceshow\egroup} %D We use this visualizer to demonstrate the way references are %D split. %D %D \hbox{\splitofffullreference{rr}\showcurrentreference} %D \hbox{\splitofffullreference{pp{rr}}\showcurrentreference} %D \hbox{\splitofffullreference{pp(qq)}\showcurrentreference} %D \hbox{\splitofffullreference{pp(qq{aa,bb})}\showcurrentreference} %D \hbox{\splitofffullreference{ff::}\showcurrentreference} %D \hbox{\splitofffullreference{ff::rr}\showcurrentreference} %D \hbox{\splitofffullreference{ff::pp()}\showcurrentreference} %D \hbox{\splitofffullreference{ff::pp(qq)}\showcurrentreference} %D \hbox{\splitofffullreference{ff::pp(qq{aa})}\showcurrentreference} %D Now we've come to the promissed testing step. As we can %D see, this macro does bit more than testing: it also resolves %D the reference. This means that whenever we test for the %D existance of a reference at an outer level, we have all the %D relevant properties of that reference avaliable inside the %D true branche~(\type{#2}). %D %D The prefix has to do with localizing references. When a %D prefix is set, looking for a reference comes to looking for %D the prefixed one, and when not found, looking for the non %D prefixed one. Consider for instance the prefix set to %D \type{sidetrack}. %D %D \starttyping %D \pagereference[important] %D \pagereference[unimportant] %D \setupreferencing[prefix=sidetrack] %D \pagereference[important] %D \stoptyping %D %D results in saving (writing) the references %D %D \starttyping %D ...{}{important} %D ...{}{unimportant} %D ...{sidetrack}{important}... %D \stoptyping %D %D Now when we call for \type{unimportant}, we will indeed get %D the pagenumber associated to this reference. But when we %D call for \type{important}, while the prefix is still set, we %D will get the pagenumber bound to the prefixed one. %D %D {\em Some day, when processing time and memory are no longer %D performance factors, we will introduce multi||level %D prefixes.} %D %D Before we start analyzing, I introduce a general %D definition macro. Consider: %D %D \starttyping %D \goto{do}[JS(My_Script{"test",123}),titlepage] %D \stoptyping %D %D This can also be achieved by: %D %D \starttyping %D \definereference[startup][JS(My_Script{"test",123}),titlepage] %D \goto{do}[REF(startup)] %D \stoptyping %D %D Now is this is a handy feature or not? %D %D \showsetup{definereference} %D %D We can trace references by setting the next switch to %D true. \newif\iftracereferences \let\tracereferences\tracereferencestrue \def\specialREFidentifier{REF} \def\dodefinereference[#1][#2]% {\ifsecondargument \doifelsenothing{#2} {\resetreference[#1]}% {\@EA\gdef\csname\specialREFidentifier#1\endcsname{#2}}% \else\iffirstargument \resetreference[#1]% \fi\fi} \def\definereference% {\dodoubleempty\dodefinereference} \def\resetreference[#1]% {\global\letbeundefined{\specialREFidentifier#1}} \newcount\nofexpandedreferences \def\dodoexpandreferences#1REF(#2#3)#4\relax {\ifx#2\relax \ifcsname\specialREFidentifier#1\endcsname \edef\expandedreference{\csname\specialREFidentifier#1\endcsname,}% \else \global\advance\nofexpandedreferences \plusone \@EA\xdef\csname REF::\number\nofexpandedreferences\endcsname{#1}% \fi \else \ifcsname\specialREFidentifier#2#3\endcsname \edef\expandedreference{\csname\specialREFidentifier#2#3\endcsname,}% \else % not set \fi \fi} \def\doexpandreferences#1,% {\if]#1\else \let\expandedreference\empty \dodoexpandreferences#1REF(\relax)\relax \@EAEAEA\doexpandreferences\@EA\expandedreference \fi} \def\expandreferences#1% {\global\nofexpandedreferences\zerocount \doexpandreferences#1,],} \def\dodoifreferencefoundelse#1% {\@EA\splitofffullreference\@EA{#1}% \ifx\currentreferencespecial\empty \ifx\currentouterreference\empty \docheckinnerreference \ifreferencefound \else \checkglobalfilereferences \fi \else \docheckouterreference \fi \ifreferencefound \ifx\currentreferencearguments\empty \getreferenceelements\currentfullreference \else \getreferenceelements\currentinnerreference \fi \fi \else \docheckspecialreference \fi \iftracereferences \doshowcurrentreference\space \writestatus\m!references\currentreferenceshow \fi} %D Although this can be considered a hack, we provide the %D option to locate unknown references in other (loaded) files. %D This can be dangerous, since there can be conflicting %D definitions. \newconditional\autoglobalfilereferences \def\checkglobalfilereferences% sloooow {\ifconditional\autoglobalfilereferences % \processcommacommand[\loadedreferences]\docheckglobalfilereference \rawprocesscommalist[\loadedreferences]\docheckglobalfilereference \fi} \def\docheckglobalfilereference#1% {\ifcsname\r!cross#1::\currentinnerreference\endcsname \def\currentouterreference{#1}% \edef\currentfullreference% {\currentouterreference::\currentinnerreference}% \global\referencefoundtrue \quitcommalist \fi} %D For most situations, we could use: %D %D \starttyping %D \let\doifreferencefoundelse=\dodoifreferencefoundelse %D \stoptyping %D %D But when we also want to support chained references, we need %D some more. Such a chained reference is defined as: %D %D \starttyping %D \goto{somewhere}[JS(somescript),nextpage,JS(anotherscript)] %D \stoptyping %D %D Actually supporting chains is up to the special driver. Here %D we only provide the hooks. %D \macros %D {ifenablereferencechains} %D %D First we provide a switch to turn this mechanism off: \newif\ifenablereferencechains \enablereferencechainstrue %D We don't use the general commalist processing macros, %D because we don't want to pay a speed penalty. \newif\ifsecondaryreference \newcount\nofsecondaryreferences % Aanpassen: eerst alle refs scannen en componenten opslaan in % lijst, dan de chain doorlopen. Momenteel mag alleen laatste % laatste undefined zijn, eigenlijk moet dat overal kunnen met % 'geen' zonder melding. Is wel trager. Dus niet. \def\doifreferencefoundelse#1#2#3% REF \cs / never more than one group (else \aftergroup usage problems) {\checkreferences % first we collect the secondary ones \bgroup \the\everyreference \let\referenceprefix\empty \expandreferences{#1}% \egroup \doresetgotowhereever \global\nofsecondaryreferences \zerocount \ifcase\nofexpandedreferences\relax % #1 can be number -) % no ref \or % one ref \or % two refs \ifenablereferencechains \iflocation \global\secondaryreferencetrue \xdef\secondaryreference{\csname REF::2\endcsname}% % test: \global\letcscsname\secondaryreference\csname REF::2\endcsname \bgroup %%\let\doifreferencefoundelse\localdoifreferencefoundelse \let\unharmedreferenceprefix\referenceprefix \dodoifreferencefoundelse\secondaryreference \ifreferencefound \global\nofsecondaryreferences \plusone #2% \else \dohandlenoto{#3}% \fi \egroup \fi \fi \else % more than two refs \ifenablereferencechains \iflocation \global\secondaryreferencetrue \scratchcounter\plustwo \loop \xdef\secondaryreference{\csname REF::\number\scratchcounter\endcsname}% % test: \global\letcscsname\secondaryreference\csname REF::\number\scratchcounter\endcsname \bgroup %%\let\doifreferencefoundelse\localdoifreferencefoundelse \let\unharmedreferenceprefix\referenceprefix \dodoifreferencefoundelse\secondaryreference \ifreferencefound \global\advance\nofsecondaryreferences \plusone #2% \else \dohandlenoto{#3}% \fi \egroup \ifnum\scratchcounter<\nofexpandedreferences\relax \advance\scratchcounter \plusone \repeat \fi \fi \fi \global\secondaryreferencefalse \xdef\primaryreference{\csname REF::1\endcsname}% % test: \global\letcscsname\secondaryreference\csname REF::1\endcsname \bgroup % now we handle the primary one %%\let\doifreferencefoundelse\localdoifreferencefoundelse \let\unharmedreferenceprefix\referenceprefix \dodoifreferencefoundelse\primaryreference \ifreferencefound#2\else#3\fi \egroup \doresetgotowhereever} % to prevent problems with direct goto's %D The following local redefinition permits the usage of %D nested \type {\doifreferencefoundelse}; see for an %D example the local test for file|/|url references. This is %D a fuzzy part of this mechanism and a result of the choice %D to let speed prevail over beauty in resolving chained %D references with symbolic (defined) references. \def\localdoifreferencefoundelse#1% {\dodoifreferencefoundelse{#1}% \ifreferencefound\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi} %D Somewhere else we will properly define \type {\dohandlegoto}; %D the noto alternative takes care of undefined references in %D a sequence \ifx\dohandlenoto\undefined \def\dohandlenoto#1% {\ifsecondaryreference\else{#1}\fi} \fi \ifx\dohandlegoto\undefined \def\dohandlegoto#1#2#3% {\ifsecondaryreference\else{#1}\fi} \fi %D As one can see, while processing the references, the first %D one is handled last. While scanning the second and following %D ones, we increment a counter and set a boolean to true. %D The next fast one permits rather raw references with %D \type{()}'s and is used in the object reference mechanism. \def\doifrawreferencefoundelse#1#2#3% {\checkreferences \bgroup \edef\currentfullreference{#1}% \ifcsname\r!cross\currentfullreference\endcsname \getreferenceelements\currentfullreference \global\referencefoundtrue#2% \else \global\referencefoundfalse#3% \fi \egroup} %D The inner case is simple. Only two cases have to be taken %D care of: %D %D \starttyping %D \goto{some text}[reference] %D \goto{some text}[prefix:reference] %D \stoptyping \def\docheckinnerreference {\global\let\predefinedreference\currentinnerreference \ifx\currentreferencearguments\empty \ifcsname\r!cross\referenceprefix\currentfullreference\endcsname \global\referencefoundtrue \else \let\referenceprefix\empty \ifcsname\r!cross\currentfullreference\endcsname \global\referencefoundtrue \else \global\referencefoundfalse \fi \fi \else % [SomeThing{with,me}] \let\referenceprefix\empty \ifcsname\r!cross\currentinnerreference\endcsname \global\referencefoundtrue \else \global\referencefoundfalse \fi \fi \doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing} %D References to other files however are treated strict or %D tolerant, depending on their loading and availability: %D %D \starttyping %D \useexternaldocument[somefile][filename][a nice description] %D %D \goto{checked reference}[somefile::reference] %D \goto{unchecked reference}[somefile::] %D \goto{unchecked reference}[anotherfile::reference] %D \stoptyping %D %D Here we use the dummy reference \type{somefile::} set in %D \type{\setouterreference} as a signal that indeed references %D are defined for the outer file. \newif\ifstrictouterreferences \strictouterreferencesfalse \def\dodocheckouterreference {\ifcsname\specialREFidentifier\currentfullreference\endcsname \@EA\@EA\@EA\splitofffullreference\@EA\@EA\@EA % 1 level {\csname\specialREFidentifier\currentfullreference\endcsname}% \docheckouterreference \else\ifstrictouterreferences \global\referencefoundfalse \else % already \global\referencefoundtrue % no checking done \fi\fi} \def\docheckouterreference {\let\referenceprefix\empty \let\unharmedreferenceprefix\empty \xdef\predefinedreference {\currentouterreference::\currentinnerreference}% \ifx\innerreference\empty \global\referencefoundtrue % no checking done \else \ifcsname\r!cross\currentouterreference::\endcsname \ifcsname\r!cross\currentfullreference\endcsname \global\referencefoundtrue \else \dodocheckouterreference \fi \else \ifstrictouterreferences \global\referencefoundfalse \else \global\referencefoundtrue % no checking done \fi \fi \fi \doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing} %D Special references are only tested when some test routine is %D defined. \def\docheckspecialreference {\let\referenceprefix\empty \let\unharmedreferenceprefix\empty \xdef\predefinedreference {\currentreferencespecial::\currentreferenceoperation}% \executeifdefined{\s!do:\v!test:\currentreferencespecial}% {\global\referencefoundtrue\gobbletwoarguments}% {\global\referencefoundtrue}{\global\referencefoundfalse}% \doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing} %D An unknown reference is reported on the screen, in the log %D file and, when enabled, in the left margin of the text. \def\reportreferenceerror#1#2% {\bgroup \the\everyreference % cleanup : etc in french \ifinpagebody\else \doifconcepttracing {\doifsomething{#2} {\inleft {\infofont \scratchdimen\leftmarginwidth \advance\scratchdimen -2em \doboundtext{#2}\scratchdimen{..}->}}}% \fi \doifpredefinedreferenceelse \donothing {\predefinereference\predefinedreference \showmessage\m!references{#1}{[\unharmedreferenceprefix][#2]}}% \egroup} \def\unknownreference{\reportreferenceerror1} \def\illegalreference{\reportreferenceerror4} %D Although not actually needed, we default the unharmed %D reference prefix to the normal one. \def\unharmedreferenceprefix{\referenceprefix} %D When a reference is not found, we typeset a placeholder %D (two glyphs are often enough to represent the reference %D text). \def\dummyreference{{\tttf ??}} %D To prevent repetitive messages concerning a reference %D being defined, we set such an unknown reference to an empty %D one after the first encounter. \let\predefinedreference\s!unknown % we need to predefine in order to make dup checking possible (when no ref % is defined yet) \def\predefinereference#1% takes now an argument {\global\@EA\let\csname\r!cross #1\endcsname\dummypredefinedreference \global\@EA\let\csname\r!cross\unharmedreferenceprefix#1\endcsname\dummypredefinedreference} \def\dummypredefinedreference{\rt!done{}{}{}{}} %D Testing on existance then becomes: \def\doifpredefinedreferenceelse % \referenceprefix added {\@EA\ifx\csname\r!cross\referenceprefix\predefinedreference\endcsname\dummypredefinedreference \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D Sometimes we want to temporary put a reference out of %D order. An example can be found in the menu macros. %D %D \starttyping %D \doifreferencepermittedelse{reference}{set}{true}{false} %D \stoptyping %D %D The second argument can be a comma seperated list. \let\permittedreferences\empty \def\doifreferencepermittedelse#1#2#3% ref found notfound {\doifreferencefoundelse{#1} {\donetrue \ifx\permittedreferences\empty \else \docheckifreferencepermitted{#1}% \fi \ifdone#2\else#3\fi} {#3\unknownreference{#1}}} \def\docheckifreferencepermitted#1% {\ifx\currentinnerreference\empty \ifx\currentouterreference\empty \else \doifinstring{\currentouterreference::}\permittedreferences\donefalse \fi \else\ifx\currentouterreference\empty \doifinstring{\currentinnerreference}\permittedreferences\donefalse \else \doifinstring{\currentouterreference::\currentinnerreference}\permittedreferences\donefalse \fi\fi} %D Apart from cross references supplied by the user, \CONTEXT\ %D generates cross references itself. Most of them are not %D saved as a reference, but stored with their source, for %D instance a list or an index entry. Such automatically %D generated, for the user invisible, references are called %D {\em internal references}. The user supplied ones are %D labeled as {\em external references}. %D %D A second important characteristic is that when we want to %D support different backends (viewers), we need to support %D named destinations as well as page numbers. I invite readers %D to take a glance at the special driver modules to understand %D the fine points of this. As a result we will deal with {\em %D locations} as well as {\em real page numbers}. We explictly %D call this pagenumber a real one, because it is independant %D of the page numbering scheme used in the document. %D %D One of the reasons for \CONTEXT\ being the first \TEX\ base %D macropackage to support sophisticated interactive \PDF\ %D files, lays in the mere fact that real page numbers are %D available in most two pass data, like references, list data %D and index entries. %D %D We will speak of \type{thisis...} when we are marking a %D location, and \type{goto...} when we point to such a %D location. The latter one can be seen as a hyperlink to the %D former one. In the next macros one we use constructs like: %D %D \starttyping %D \dostart... %D \dostop... %D \stoptyping %D %D Such macros are used to invoke the relevant specials from %D the special driver modules (see \type{spec-ini}). The flag %D \type{\iflocation} signals if we're in interactive mode. \def\thisisdestination#1% destination {\iflocation \ifusepagedestinations \else \dostartthisislocation{#1}\dostopthisislocation \fi \fi} \def\thisisrealpage#1% pagenumber {\iflocation \dostartthisisrealpage{#1}\dostopthisisrealpage \fi} %D The previous tho macros were easy ones, opposite to their %D counterparts. A common component in these is: %D %D \starttyping %D \dohandlegoto{..}{..}{..} %D \stoptyping %D %D Here data can be whatever needs highlighting, e.g. {\em %D figure 2.4}, and the start and stop entries handle the %D specials. The two \DIMENSIONS\ \type{\buttonwidth} and %D \type{\buttonheight} have to be set when handling the %D data~(\type{#2}). \ifx\buttonheight\undefined \newdimen\buttonheight \fi \ifx\buttonwidth \undefined \newdimen\buttonwidth \fi \def\gotodestination#1#2#3#4#5% url file destination page data {\iflocation \ifusepagedestinations \gotorealpage{#1}{#2}{\number#4}{#5}% \else \dohandlegoto {#5}% {\the\everyreference\dostartgotolocation\buttonwidth\buttonheight{#1}{#2}{#3}{\number#4}}% {\dostopgotolocation}% \fi \else {#5}% \fi} \def\gotorealpage#1#2#3#4% url file page data {\iflocation \dohandlegoto {#4}% {\dostartgotorealpage\buttonwidth\buttonheight{#1}{#2}{\number#3}}% {\dostopgotorealpage}% \else {#4}% \fi} %D \macros %D {setreferencefilename} %D %D This command can be used in the special drivers to %D uppercase filenames. This is needed when one wants to %D produce \CDROM's conforming to ISO9660. We consider is the %D savest to enable this feature by default. We cannot handle %D uppercase here, since the suffix is handled in the special %D driver. Conversion is taken care of by: %D %D \starttyping %D \setreferencefilename somefilename\to\SomeFileName %D \stoptyping % \def\setreferencefilename#1\to#2% % {\doifelse{\@@converteerfile}{\v!ja} % boolean is sneller % {\uppercasestring#1\to#2} % {\edef#2{#1}}} \chardef\referencefilecase=0 \def\setreferencefilename#1\to#2% {\ifcase\referencefilecase \edef#2{#1}% \or \uppercasestring#1\to#2% \or \lowercasestring#1\to#2% \else \edef#2{#1}% \fi} %D Internal references can best be set using the next few %D macros. Setting such references to unique values is %D completely up to the macros that call them. %D %D \starttyping %D \thisissomeinternal{tag}{identifier} %D \gotosomeinternal {tag}{identifier}{pagenumber}{text} %D \stoptyping \def\thisissomeinternal#1#2% tag reference {\doifsomething{#2}{\thisisdestination{#1:#2}}} \def\gotosomeinternal#1#2% #3#4 {\gotodestination\empty\empty{#1:#2}} %D An automatic mechanism is provided too: %D %D \starttyping %D \thisisnextinternal{tag} %D \gotonextinternal {tag}{number}{pagenumber}{text} %D \stoptyping %D %D The first macro increments a counter. The value of this %D counter is available in the macro \type{\nextinternalreference} %D and should be saved somewhere (for instance in a file) for %D future reference. The second argument of %D \type {\gotonextinternal} takes such a saved number. One can %D turn on tracing these references, in which case the %D references are a bit more verbose. \newcount\locationcount \newif\iftraceinternalreferences \newif\ifinternalnamedreferences \internalnamedreferencestrue \def\nextinternalreference {\the\locationcount} \def\thisisnextinternal#1% {\global\advance\locationcount \plusone \ifinternalnamedreferences \thisisdestination{\s!aut\iftraceinternalreferences:#1\fi:\nextinternalreference}% \fi} % beter: % % \def\thisisnextinternal#1% % {\iftrialtypesetting\else % \global\advance\locationcount \plusone % \ifinternalnamedreferences % \thisisdestination{\s!aut\iftraceinternalreferences:#1\fi:\nextinternalreference}% % \fi % \fi} \def\gotonextinternal#1#2#3#4% {\ifinternalnamedreferences \gotodestination\empty\empty{\s!aut\iftraceinternalreferences:#1\fi:#2}{#3}{#4}% \else \gotorealpage\empty\empty{#3}{#4}% \fi} %D We already went through a lot of problems to sort out what %D kind of reference we're dealing with. Sorting out the user %D supplied cross references (show/goto this or that) as well %D as user supplied system references (invoke this or that) is %D already taken care of in the test routine, but we still have %D to direct the request to the right (first) routine. \def\gotolocation% #1#2% {\ifx\currentreferencespecial\empty \ifx\currentouterreference\empty \ifnum\currentreferencetype<2 \@EA\@EAEAEA\@EA\gotoinnerlocation \else \@EA\@EAEAEA\@EA\gotosystemlocation \fi \else \@EAEAEA\gotoouterlocation \fi \else \@EA\gotospeciallocation \fi} % {#1}{#2} %D An inner reference refers to some place in the document %D itself. \def\gotoinnerlocation#1% #2% {\gotodestination\empty\empty {\referenceprefix\currentinnerreference}\currentrealreference} % {#2} %D The outer location refers to another document, specified as %D file or \URL. \def\gotoouterlocation#1#2% % page checken! {\bgroup \let\referenceprefix\empty \setouterlocation\currentouterreference \ifx\currentinnerreference\empty \gotorealpage \otherURL\otherfile1{#2}% \else \gotodestination \otherURL\otherfile\currentinnerreference\currentrealreference{#2}% \fi \egroup} %D Special locations are those that are accessed by saying %D things like: %D %D \starttyping %D \goto{calculate total}[JS(summarize{10,23,56}] %D \stoptyping %D %D After several intermediate steps this finally arrives at %D the next macro and expands into (simplified): %D %D \starttyping %D \gotoJSlocation{total{summarize{10,23,56}}}{calculate total} %D \stoptyping %D %D The first argument is the full reference, the second one %D is the text, in some kind of manipulated form. In practice %D we split references, so we get: %D %D \starttyping %D \gotoJSlocation{summarize{10,23,56}}{calculate} %D \gotoJSlocation{summarize{10,23,56}}{total} %D \stoptyping %D %D where \type{calculate} and \type{total} are colored, boxed %D or whatever \type{\goto} is told to do. %D %D The macro \type{\gotoJSlocation} can use \type %D {\currentreferenceoperation} (in our example %D \type{summarize}) and \type{\currentreference} (here %D being \type {10,23,56}) to perform its task. \def\gotospeciallocation {\executeifdefined{goto\currentreferencespecial location}\gobbleoneargument} %D Such special macros can be defined by: \def\definespeciallocation#1% {\setvalue{goto#1location}} %D The associated test is to be defined by: \def\definespecialtest#1% {\setvalue{\s!do:\v!test:#1}} %D This \type{\def} alike macro is to be used as: %D %D \starttyping %D \definespeciallocation{JS}#1#2{... #1 ... #2 ...} %D \stoptyping %D %D In module \type {java-ini} one can see that \type %D {\gotoJSlocation} looks much like the previous goto %D definitions. %D A system location is not always a location, but for the %D consistency we also consider actions as such. \def\gotosystemlocation {\csname\r!syst\the\currentreferencetype\endcsname} \def\definesystemreferencehandler#1#2% {\setgvalue{\r!syst\the#1}{#2}} %D In this module we define three system references: one for %D handling navigational, viewer specific, commands, another %D for jumping to special pages, like the first or last one, %D and a third reference for linking tree like lists, like %D tables of contents. The latter two adapt themselves to the %D current state. \definesystemreferencehandler \rt!exec \handleexecreference \definesystemreferencehandler \rt!page \handlepagereference \definesystemreferencehandler \rt!list \handlelistreference \def\handleexecreference#1% {\checkexecutecommand\currentdatareference\currentreferencearguments \executecommand\currentdatareference\currentreferencearguments} \def\handlepagereference#1% {\gotorealpage\empty\empty\currentdatareference} \def\handlelistreference#1% is deze nog echt nodig? {\gotodestination\empty\empty\currentdatareference{\getvalue{\currentdatareference}}} %D \macros %D {setexecutecommandcheck} %D %D In case a command action needs to do some checking in %D advance, one can assign an check function by: %D %D \starttyping %D \setexecutecommandcheck{startsound}\checksoundtrack %D \stoptyping \def\setexecutecommandcheck#1#2% #2 permits \first \second {\setvalue{\s!do:\s!do:#1}{#2}} \def\checkexecutecommand#1#2% evt geen #1 en #2 {\ifx#2\empty \else \ifcsname\s!do:\s!do:#1\endcsname \@EA\let\@EA\docheckexecutecommand\csname\s!do:\s!do:#1\endcsname \rawprocesscommalist[#2]\docheckexecutecommand \fi \fi } %D Command references (in dutch, english, german of %D whatever interface language) are translated into a bit %D shorter reference (\type{close}) and passed to the %D special driver (using \type{\executecommand}). % better: [action(name)] and \definereference[name][action(name)] \setglobalsystemreference \rt!exec \v!CloseDocument {close} \setglobalsystemreference \rt!exec \v!ExitViewer {exit} \setglobalsystemreference \rt!exec \v!FirstPage {first} \setglobalsystemreference \rt!exec \v!LastPage {last} \setglobalsystemreference \rt!exec \v!NextJump {forward} \setglobalsystemreference \rt!exec \v!NextPage {next} \setglobalsystemreference \rt!exec \v!PauseMovie {pausemovie} \setglobalsystemreference \rt!exec \v!PauseSound {pausesound} \setglobalsystemreference \rt!exec \v!PauseRendering {pauserendering} \setglobalsystemreference \rt!exec \v!PreviousJump {backward} \setglobalsystemreference \rt!exec \v!PreviousPage {previous} \setglobalsystemreference \rt!exec \v!PrintDocument {print} \setglobalsystemreference \rt!exec \v!SaveForm {exportform} \setglobalsystemreference \rt!exec \v!LoadForm {importform} \setglobalsystemreference \rt!exec \v!ResetForm {resetform} \setglobalsystemreference \rt!exec \v!ResumeMovie {resumemovie} \setglobalsystemreference \rt!exec \v!ResumeSound {resumesound} \setglobalsystemreference \rt!exec \v!ResumeRendering {resumerendering} \setglobalsystemreference \rt!exec \v!SaveDocument {save} \setglobalsystemreference \rt!exec \v!SaveNamedDocument{savenamed} \setglobalsystemreference \rt!exec \v!OpenNamedDocument{opennamed} \setglobalsystemreference \rt!exec \v!SearchDocument {search} \setglobalsystemreference \rt!exec \v!SearchAgain {searchagain} \setglobalsystemreference \rt!exec \v!StartMovie {startmovie} \setglobalsystemreference \rt!exec \v!StartSound {startsound} \setglobalsystemreference \rt!exec \v!StartRendering {startrendering} \setglobalsystemreference \rt!exec \v!StopMovie {stopmovie} \setglobalsystemreference \rt!exec \v!StopSound {stopsound} \setglobalsystemreference \rt!exec \v!StopRendering {stoprendering} \setglobalsystemreference \rt!exec \v!SubmitForm {submitform} \setglobalsystemreference \rt!exec \v!ToggleViewer {toggle} \setglobalsystemreference \rt!exec \v!ViewerHelp {help} \setglobalsystemreference \rt!exec \v!HideField {hide} \setglobalsystemreference \rt!exec \v!ShowField {show} \setglobalsystemreference \rt!exec \v!GotoPage {gotopage} \setglobalsystemreference \rt!exec \v!GotoPage {gotopage} \setglobalsystemreference \rt!exec \v!Query {query} \setglobalsystemreference \rt!exec \v!QueryAgain {queryagain} \setglobalsystemreference \rt!exec \v!FitWidth {fitwidth} \setglobalsystemreference \rt!exec \v!FitHeight {fitheight} \setglobalsystemreference \rt!exec \v!ShowThumbs {thumbnails} \setglobalsystemreference \rt!exec \v!ShowBookmarks {bookmarks} %D Executing the command looks alike the previous goto macros. \def\executecommand#1#2#3% {\iflocation \dohandlegoto {#3}% {\dostartexecutecommand\buttonwidth\buttonheight{#1}{#2}}% {\dostopexecutecommand}% \else {#3}% \fi} %D We could have done without the short tags and thereby saving %D some tokens, but the current approach leaves room for future %D extensions. %D It is possible to disable the writing of references to the %D utility file by setting: \newif\ifreferencing \referencingtrue %D One can also activate an automatic prefix mechanism. By %D setting the \type{\prefix} variable to \type{+}, the prefix %D is incremented, when set to \type{-} or empty, the prefix is %D reset. Other values become the prefix. \newcount\prefixcounter %D These settings are accomplished by: %D %D \showsetup{setupreferencing} %D %D In interactive documents verbose references don't always %D make sense (what is a page number in an unnumbered %D document). By setting the \type{interaction} variable, one %D can influences the way interactive references are set. % \newif\ifreferencestrut % some day an option \def\setupreferencing {\dosingleargument\dosetupreferencing} \def\dosetupreferencing[#1]% {\getparameters [\??rf] [\c!prefix=\s!unknown,#1]% \processaction [\@@rfstate] [ \v!stop=>\referencingfalse, \v!start=>\referencingtrue]% \processaction [\@@rfinteraction] [ \v!all=>\let\dowantedreference\docompletereference, \v!label=>\let\dowantedreference\dolabelonlyreference, \v!text=>\let\dowantedreference\dotextonlyreference, \v!symbol=>\let\dowantedreference\dosymbolreference]% \chardef\autocrossfilereferences\zerocount \processaction [\@@rfautofile] [ \v!yes=>\chardef\autocrossfilereferences\plusone, \v!page=>\chardef\autocrossfilereferences\plustwo]% \chardef\referencefilecase\zerocount \processaction[\@@rfconvertfile] [ \v!yes=>\chardef\referencefilecase\plusone, \v!big=>\chardef\referencefilecase\plusone, \v!small=>\chardef\referencefilecase\plustwo]% %\doifelse\@@rfstrut\v!yes % some day an option % \referencetruttrue\referencestrutfalse \setupreferenceprefix[\@@rfprefix]% \doifelse\@@rfglobal\v!yes {\settrue \autoglobalfilereferences} {\setfalse\autoglobalfilereferences}} \def\incrementreferenceprefix{+} \def\decrementreferenceprefix{-} \def\setupreferenceprefix[#1]% {\edef\@@rfprefix{#1}% \ifx\@@rfprefix\empty \let\referenceprefix\empty \else\ifx\@@rfprefix\incrementreferenceprefix \advance\prefixcounter \plusone % should be global \edef\referenceprefix{\the\prefixcounter:}% \let\@@rfprefix\s!unknown \else\ifx\@@rfprefix\decrementreferenceprefix \let\referenceprefix\empty \let\@@rfprefix\s!unknown \else\ifx\@@rfprefix\s!unknown % forget about it \else \edef\referenceprefix{\@@rfprefix:}% \fi\fi\fi\fi} %D \macros %D {handlereferenceactions, %D collectreferenceactions} %D %D Sometimes we need to pass the actions connected to %D references to variables instead of rectangular areas on %D which one can click. The next macro collects the actions %D and passes them to a handle. This is a rather dreadfull %D hack! %D %D \starttyping %D \handlereferenceactions{references}\handle %D \stoptyping %D %D So, \type {\handle} does the final job, which in for %D instance the \PDF\ drivers comes down to doing something %D with \type {\lastPDFaction}. \newif\ifcollectreferenceactions \def\handlereferenceactions#1#2% {\doifsomething{#1} {\bgroup \collectreferenceactionstrue \@EA\doifreferencefoundelse\@EA{#1} {\gotolocation{#1}{}\ifsecondaryreference\else#2\fi} {\unknownreference{#1}}% \egroup}} %D The most straightforward way of retrieving references is %D using \type{\ref}. Consider the reference: %D %D \startbuffer %D \reference[my ref]{{Look}{Here}{I am}} %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D We can ask for upto five reference components: %D %D \startbuffer %D user page reference: \ref[p][my ref] %D text reference: \ref[t][my ref] %D real page reference: \ref[r][my ref] %D sub text reference: \ref[s][my ref] %D extra text reference: \ref[e][my ref] %D \stopbuffer %D %D \typebuffer %D %D And get back: %D %D \startlines %D \getbuffer %D \stoplines \def\ref{\dodoubleargument\doref} \def\reftypep{\currentpagereference} \def\reftypet{\currenttextreference} \def\reftyper{\currentrealreference} \def\reftypes{\currentsubtextreference} \def\reftypee{\currentsubsubtextreference} \def\doref[#1][#2]% {\ifsecondargument \doifreferencefoundelse{#2} {\executeifdefined{reftype#1}\reftypep} {\unknownreference{#2}\dummyreference}% \else \dummyreference \fi} %D We can typeset a reference using \type{\in}, \type{\at} and %D \type{\about} and goto specific locations using %D \type{\goto}. The last one does not make that much sense in %D a paper document. To complicate things, \PLAIN\ \TEX\ also %D implements an \type {\in} but fortunately that one only %D makes sense in math mode. %D --- VANAF HIER NOG VERENGELSEN --- %\let\donormalin =\in %\let\donormalover=\over % about/oppassen beter nederlands dan engels! % %\def\in% % {\ifmmode % \expandafter\donormalin % \else % \expandafter\doinatreference\expandafter\currenttextreference % \fi} % we need to bypass math tokens % \let\normalover \over \definecommand in {\dospecialin} \definecommand at {\dospecialat} \definecommand about {\dospecialabout} \definecommand from {\dospecialfrom} \definecommand over {\dospecialabout} % needed here, else math problems \unexpanded\def\dospecialin{\doinatreference\currenttextreference} \unexpanded\def\dospecialat{\doinatreference\currentpagereference} \unexpanded\def\dospecialabout[#1]% {\dontleavehmode \bgroup \def\thecurrentsubtextreference {\limitatetext\currentsubtextreference\@@rfwidth\unknown}% %\leaveoutervmode % no \@@rfleft \doifreferencefoundelse{#1} {\let\crlf\space \let\\\space \let\dogotofixed\dogotospace \dogotospace{\thecurrentsubtextreference}[#1]} {\unknownreference{#1}\dummyreference}% \@@rfright \referenceinfo{<}{#1}% \egroup} %D Typesetting the reference is a bit more complicated than one %D would at first sight expect. This is due to the fact that we %D distinguish three (five) alternative calls: %D %D \placefigure %D [here][three calls] %D {Three alternatives reference calls.} %D {\startcombination[1*3] %D {\framed{\type{ \in }}} {a} %D {\framed{\type{ \at }}} {b} %D {\framed{\type{\goto}}} {c} %D \stopcombination} %D %D \startbuffer %D \in figure[fig:three calls] %D \in{figure}[fig:three calls] %D \in figure a[fig:three calls] %D \in{figure}{a}[fig:three calls] %D figure~\in[fig:three calls] %D \stopbuffer %D %D \typebuffer %D %D This turns up as: %D %D \startlines %D \getbuffer %D \stoplines %D %D The dual \type{{}} results in a split reference. In a %D document meant for paper, one is tempted to use the last %D (most straightforward) alternative. When a document is also %D meant voor electronic distribution, the former alternatives %D have preference, because everything between the \type{\in} %D and~\type{[} becomes active (and when asked for, typeset %D in a different color and typeface). \def\doinatreference#1% {\doifnextoptionalelse{\dodoinatreference{#1}{}}{\dodoinatreference{#1}}} \def\dodoinatreference#1% {\def\dododoinatreference{\dodododoinatreference{#1}}% \futurelet\next\dododoinatreference} % overloaded % % \def\dodododoinatreference#1#2#3[#4]% % {\ifx\next\bgroup % \dododododoinatreference{#1\ignorespaces#3}{#2}[#4]% % \else % \dododododoinatreference{#1}{#2#3}[#4]% % \fi} %D We arrived at the last step. Before we do the typesetting, %D we forget all previous (paragraph bound) settings and make %D sure that we remain in horizontal mode. Next we choose %D among the several representations. % overloaded % % \def\dododododoinatreference#1#2[#3]% % {\dontleavehmode % \bgroup % \forgetall % %\leaveoutervmode % \doifreferencefoundelse{#3} % {\bgroup % \let\ignorespaces\empty % rather dirty but ok % \doifelsenothing{#1} % {\egroup\dosymbolreference{#1}{#2}[#3]} % {\egroup\dowantedreference{#1}{#2}[#3]}} % {\dounknownreference{#1}{#2}[#3]}% % \referenceinfo{<}{#3}% % \egroup} %D The previously discussed setup macro lets us specify the %D representation of references. A symbol reference does not %D show the specific data, like the number of a figure, but %D shows one of: \hbox {$^\goforwardcharacter$ %D $^\gobackwardcharacter$ $^\gonowherecharacter$}, depending %D on the direction to go. \def\dosymbolreference#1#2[#3]% {\bgroup \setupsymbolset[\@@iasymbolset]% \removelastskip \ifx\currentreferencespecial\empty \ifx\currentouterreference\empty \ifnum0\currentrealreference=\zerocount \ifhmode\strut\high{\symbol[\v!nowhere]}\fi \else\ifnum0\currentrealreference>\realpageno \dodosymbolreference{#2}{\high{\symbol[\v!next]}}% \else\ifnum0\currentrealreference<\realpageno \dodosymbolreference{#2}{\high{\symbol[\v!previous]}}% \else \ifhmode\strut\high{\symbol[\v!nowhere]}\fi \fi\fi\fi \else \gotoouterlocation{#3}{\showlocation{\high{\symbol[\v!somewhere]}}}% \fi \else \gotospeciallocation{#3}{\showlocation{\high{\symbol[\v!somewhere]}}}% \fi \egroup} \def\dodosymbolreference#1#2% {#1\hbox{\gotorealpage\empty\empty\currentrealreference {\dolocationattributes\??ia\c!style\c!color{#2}}}} %D The other alternatives just conform their names: only the %D label, only the text, or the label and the text. \def\dounknownreference#1#2[#3]% {\unknownreference{#3}\dotextprefix{#2}\dummyreference}% \def\docompletereference#1#2[#3]% {\iflocationsplit \doifsomespaceelse{#2}\dogotospace\dogotofixed{\dotextprefix{#2}#1}[#3]% \else \dogotofixed{\dotextprefix{#2}#1}[#3]% \fi} \def\dolabelonlyreference#1#2[#3]% {\doifsomespaceelse{#2} {\doifsomething{#2}{\dogotospace{#2}[#3]}} {\dogotofixed{\dotextprefix{#2}}[#3]}} \def\dotextonlyreference#1#2[#3]% {\dotextprefix{#2}\dogotofixed{#1}[#3]} \let\dowantedreference=\docompletereference %D \macros %D {definereferenceformat} %D %D The next few macros were made for for David Arnold and Taco %D Hoekwater. They can be used for predefining reference %D texts, and thereby stimulate efficiency. %D %D [more documentation will be added] %D %D \starttyping %D \definereferenceformat[informula] [left=(,right=),text=formula] %D \definereferenceformat[informulas] [left=(,right=),text=formulas] %D \definereferenceformat[andformula] [left=(,right=),text=and] %D \definereferenceformat[andformulas][left=(,right=),text=and] %D %D \informula [b] and \informula [for:c] %D the \informula {formulas}[b] \informula {and} [for:c] %D the \informulas {formulas}[b] \informula {and} [for:c] %D the \informulas [b] \informula {en} [for:c] %D the \informulas [b] \andformula [for:c] %D \stoptyping %D %D Instead of a text, one can specify a label, which should %D be defined with \type {\setuplabeltext}. \def\definereferenceformat% {\dodoubleargument\dodefinereferenceformat} \def\dodefinereferenceformat[#1][#2]% {\iffirstargument \getparameters[\??rf#1] [\c!left=, % of the number \c!right=, % of the number \c!text=, % before the number \c!label=, % can be {left}{right} \c!command=\in, #2]% \unexpanded\setvalue{#1}% {\dontleavehmode\doexecutereferenceformat{#1}}% \fi} \def\noexecutelabelreferenceformat#1% {\doifvaluesomething{\??rf#1\c!text} {\gdef\textofreference{\csname\??rf#1\c!text\endcsname}}% \csname\??rf#1\c!command\endcsname} \def\doexecutelabelreferenceformat#1% {\csname\??rf#1\c!command\endcsname {\leftlabeltext {\csname\??rf#1\c!label\endcsname}}% {\rightlabeltext{\csname\??rf#1\c!label\endcsname}}} \def\doexecutereferenceformat#1% {\gdef\leftofreference {\csname\??rf#1\c!left \endcsname}% \gdef\rightofreference{\csname\??rf#1\c!right\endcsname}% \global\let\textofreference\empty % otherwise ~ added \doifelsevaluenothing{\??rf#1\c!label} \noexecutelabelreferenceformat\doexecutelabelreferenceformat{#1}} \let\leftofreference \relax \let\rightofreference\relax \let\textofreference \relax \def\dodododoinatreference#1#2#3[#4]% \removeunwantedspaces added june 2004 {\ifx\next\bgroup % but removed later, fails on metafun \dododododoinatreference % fails on metafun {\leftofreference#1\ignorespaces#3\removeunwantedspaces\rightofreference}{#2}[#4]% {\leftofreference#1\ignorespaces#3\rightofreference}{#2}[#4]% \else \dododododoinatreference {\leftofreference#1\rightofreference}{#2#3}[#4]% \fi} \def\dododododoinatreference#1#2[#3]% {\dontleavehmode % replaces \leaveoutervmode \bgroup \forgetall \postponenotes %\leaveoutervmode % replaced by \dontleavehmode \doifreferencefoundelse{#3} {\bgroup \let\ignorespaces \empty % rather dirty trick, but ok \let\leftofreference \empty % the same, again ok \let\rightofreference\empty % and once more \def\textofreference {#2}% % temporary value \ifx\textofreference\empty % simple expansion %\doifelsenothing{#1} % {\egroup\dosymbolreference{#1}{\textofreference}[#3]} % {\egroup\dowantedreference{#1}{\textofreference}[#3]}% \doifelsenothing{#1}% {\egroup\dosymbolreference}% {\egroup\dowantedreference}% {#1}{\textofreference}[#3]% \else %\doifelsenothing{#1} % {\egroup\dosymbolreference{#1}{#2}[#3]} % {\egroup\dowantedreference{#1}{#2}[#3]}% \doifelsenothing{#1}% {\egroup\dosymbolreference}% {\egroup\dowantedreference}% {#1}{#2}[#3]% \fi} {\dounknownreference{#1}{#2}[#3]}% \referenceinfo<{#3}% \global\let\leftofreference \empty \global\let\rightofreference\empty \global\let\textofreference \empty \egroup} %D In interactive documents going to a specific location is not %D bound to cross references. The \type{\goto} commands can be %D used to let users access another part of the document. In %D this respect, interactive tables of contents and registers %D can be considered goto's. Because in fact a \type{\goto} is %D just a reference without reference specific data, the %D previous macros are implemented using the goto %D functionality. %D %D \showsetup{goto} %D %D One important chaacteristic is that the first argument of %D \type{\goto} (and therefore \type{\at} and \type{\in} is %D split at spaces. This means that, although hyphenation is %D prevented, long references can cross line endings. \def\dogoto#1[#2]% {\dontleavehmode \bgroup \postponenotes \doifreferencefoundelse{#2} {\doifelsenothing{#1} {\dosymbolreference{}{}[#2]} {\dogotospace{#1}[#2]}} {\unknownreference{#2}#1\relax}% \relax catches lookahead \egroup \referenceinfo{<}{#2}} \unexpanded\def\goto#1#2% {\dogoto{#1}#2} \newif\ifsharesimilarreferences \sharesimilarreferencestrue \newcount\similarreference % 0=noppes 1=create/refer 2,3,..=refer \def\dogotospace#1[#2]% {\iflocationsplit \ifsecondaryreference\setbox0\hbox\fi % due to space insertion {\let\dogotospace\dogotofixed \iflocation \def\processisolatedword##1% {\ifisolatedwords\ifsharesimilarreferences \global\advance\similarreference \plusone \fi\fi \hbox{\gotolocation{#2}{##1\presetgoto}}}% \doattributes\??ia\c!style\c!color {\processisolatedwords{#1}\processisolatedword}% \else #1\relax % \relax prevents #1's next macros from gobbling \fi \fi}% \else \iflocation \doattributes\??ia\c!style\c!color {\gotolocation{#2}{#1\presetgoto}}% \else #1\relax % \relax prevents #1's next macros from gobbling \fi \fi \fi \global\similarreference\zerocount} \def\dogotofixed#1[#2]% {{\iflocation \hbox{\gotolocation{#2}{\doattributes\??ia\c!style\c!color {#1\presetgoto}}}% \else #1% \fi}} %D In case the auto split feature is not needed or even not %D even wanted, \type{\gotobox} can be used. %D --- NOG IN HANDLEIDING --- \unexpanded\def\gotobox#1[#2]% {\dontleavehmode \bgroup \locationstrutfalse %\leaveoutervmode \doifreferencefoundelse{#2} {\dogotofixed{#1}[#2]} {\hbox{\unknownreference{#2}#1}}% \referenceinfo{<}{#2}% \egroup} %D An reference to another document can be specified as a file %D or as an \URL. Both are handled by the same mechanism and %D can be issued by saying something like: %D %D \starttyping %D \goto[dictionary::the letter a] %D \stoptyping %D %D The macros that are responsible for handling these %D references, use the next six variables: \let\otherlabel = \empty \let\fileprefix = \empty \def\otherfile {\jobname} \let\otherURL = \empty \let\otherprefix = \empty \let\dowithdocdes = \empty %D One can imagine that many references to such a dictionary %D are made, so in most cases such a document reference in an %D indirect one. %D %D \showsetup{useexternaldocument} %D %D For example: %D %D \starttyping %D \useexternaldocument %D [dictionary][engldict] %D [The Famous English Dictionary] %D \stoptyping %D %D The next macro implements these relations, and also take %D care of loading the document specific references. \def\useexternaldocument% {\dotripleargument\douseexternaldocument} \def\douseexternaldocument[#1][#2][#3]% {\bgroup \ifsecondargument \doifelsenothing{#1} {\douseexternaldocument[#2][#2][#3]} {\doifelsenothing{#3} {\douseexternaldocument[#1][#2][#2]} {\doifsomething{#2} {\setgvalue{\v!file:::#1}{\doexternaldocument{}{#2}{#3}}% just \do \doif\@@rfstate\v!start {\doifparentfileelse{#2} {\showmessage\m!references{21}{#2}} {\dodouseexternaldocument{#1}{#2}}}}}}% \else \dodouseexternaldocument{#1}{#1}% \fi \egroup} \def\dodouseexternaldocument#1#2% {\bgroup % prevents wrong loading of \jobname \def\fileprefix{#1::}% \let\setglobalcrossreference\setoutercrossreference \usereferences[#2]% \egroup % when called nested \showmessage\m!references{21}{#2}} %D The \URL\ alternative takes four arguments: %D %D \showsetup{useURL} %D %D like: %D %D \starttyping %D \useURL %D [dictionary][http://www.publisher.com/public][engldict] %D [The Famous English Dictionary] %D \stoptyping %D %D Several specifications are possible: %D %D \starttyping %D \useURL [id] [url] [file] [description] %D \useURL [id] [url] [file] %D \useURL [id] [url] %D \stoptyping %D %D This time we don't load the references when no file is %D specified. This is logical when one keeps in mind that a %D valid \URL\ can also be a mail address. \def\useURL {\bgroup \protectlabels \catcode`\#=\@@other\catcode`\%=\@@other\catcode`\/=\@@other \catcode`\_=\@@other\catcode`\~=\@@other\catcode`\:=\@@other \dodoubleempty\douseURL} \def\douseURL[#1][#2]% {\egroup\doquadrupleempty\dodouseURL[#1][#2]} \let\useurl\useURL \def\dodouseURL[#1][#2][#3][#4]% to be redone: not too tricky redefs ad reuse {\iffirstargument \iffourthargument\setgvalue{\v!file:::#1}{\doexternaldocument{#2}{#3}{#4}}\else \ifthirdargument \setgvalue{\v!file:::#1}{\doexternalurl {#2}{#3}{#1}}\else \ifsecondargument\setgvalue{\v!file:::#1}{\doexternalurl {#2}{} {#1}}\fi\fi\fi \fi} \def\doexternalurl#1#2#3% {\bgroup \doifsomething\@@urstyle{\let\@@iastyle\@@urstyle\let\@@urstyle\empty}% \doifsomething\@@urcolor{\let\@@iacolor\@@urcolor\let\@@urcolor\empty}% \doexternaldocument{#1}{#2}{\url[#3]}% \egroup} \def\doifurldefinedelse #1{\doifdefinedelse{\v!file:::#1}} \def\doiffiledefinedelse#1{\doifdefinedelse{\v!file:::#1}} %D \macros %D {url,setupurl} %D %D We also have: \type{\url} for directly calling the %D description. So we can say: %D %D \starttyping %D \useURL [one] [http://www.test.nl] %D \useURL [two] [http://www.test.nl] [] [Some Site] %D %D \url[one] or \from[two] or \goto{Whatever Site}[URL(two)] %D \stoptyping %D %D An \URL\ can be set up with %D %D \showsetup{setupurl} \def\setupurl {\dodoubleargument\getparameters[\??ur]} \unexpanded\def\url[#1]% slow {\bgroup \processaction [\@@uralternative] [ \v!none=>\chardef\urlsplitmode\zerocount, \v!both=>\chardef\urlsplitmode\plusone, \v!after=>\chardef\urlsplitmode\plustwo, \v!before=>\chardef\urlsplitmode\plusthree]% \doifelse\@@urspace\v!yes {\setbetweenisolatedwords{\scratchskip\currentspaceskip\hskip\zeropoint\!!plus.2\scratchskip}} {\setbetweenisolatedwords\allowbreak}% \def\doexternaldocument##1##2##3{\hyphenatedurl{##1}}% awful hack \dostartattributes\??ur\c!style\c!color{}% \getvalue{\v!file:::#1}% \dostopattributes \egroup} %D This macro is hooked into a support macro, and thereby %D \URL's break ok, according to the setting of a switch, %D %D \startbuffer %D \useURL %D [test] %D [sentence_sentence%sentence#sentence~sentence/sentence//sentence:sentence.sentence] %D \stopbuffer %D %D \typebuffer %D %D Such an \URL\ is, depending on the settings, hyphenated as: %D %D \getbuffer %D %D \startlinecorrection %D \hbox to \hsize %D {\hss\en %D \setupreferencing[urlalternative=both]% %D \vbox{\hsize.25cm\hbox{\bf both}\prewordbreak\url[test]}% %D \hss %D \setupreferencing[urlalternative=before]% %D \vbox{\hsize.25cm\hbox{\bf before}\prewordbreak\url[test]}% %D \hss %D \setupreferencing[urlalternative=after]% %D \vbox{\hsize.25cm\hbox{\bf after}\prewordbreak\url[test]}% %D \hss} %D \stoplinecorrection %D %D By setting \type{urlspace=yes} one can get slightly better %D spacing when using very long \URL's. %D Many macro definitions ago we called for the auxiliary macro %D \type {\setouterlocation} and now is the time to define this %D one. \newconditional\forceURLlocation \def\setouterfilelocation#1#2#3% {\edef\otherURL{#1}% \edef\otherfile{#2}}% \def\setouterlocation#1% {\ifcsname\v!file:::#1\endcsname \let\doexternaldocument\setouterfilelocation % will change \let\doexternalurl \setouterfilelocation % will change \csname\v!file:::#1\endcsname \else \ifconditional\forceURLlocation \edef\otherURL{#1}% \let\otherfile\empty \else \let\otherURL\empty \edef\otherfile{#1}% \fi \fi \setfalse\forceURLlocation \doifparentfileelse\otherfile {\let\otherURL\empty \let\otherfile\empty \global\let\otherlabel\empty \let\otherprefix\empty} {\xdef\otherlabel{#1}% \edef\otherprefix{#1::}}} %D When defining the external source of information, one can %D also specify a suitable name (the last argument). This name %D can be called upon with: %D %D \showsetup{from} %D %D As can be expected, this macro used \type{\goto} to %D perform its task. \def\dospecialfrom % retest this one ! {\dosingleempty\dodospecialfrom} \def\dodospecialfrom[#1]% {\dontleavehmode % added, but probably not needed \bgroup \protectlabels % needed for active french :'s \iffirstargument \edef\!!stringa{#1}% \doifincsnameelse{::}\!!stringa\donothing{\edef\!!stringa{#1::}}% \expanded{\redospecialfrom[\!!stringa]}% \else \expanded{\nodospecialfrom[\otherlabel]}% \fi \egroup} \def\redospecialfrom[#1::#2]% {\ifcsname\v!file:::#1\endcsname \def\doexternaldocument##1##2##3{\goto{##3}[#1::#2]}% \csname\v!file:::#1\endcsname \else \tttf[#1]% \fi} \def\nodospecialfrom[#1]% {\ifcsname\v!file:::#1\endcsname \def\doexternaldocument##1##2##3{##3}% different than ^ \csname\v!file:::#1\endcsname \else \tttf[#1]% \fi} %D We also support: %D %D \starttyping %D \goto{some text}[file(identifier{location}] %D \stoptyping %D %D which is completely equivalent with %D %D \starttyping %D \goto{some text}[identifier::location] %D \stoptyping %D %D The fastest implementation would be: \definespecialtest\v!file {\setfalse\forceURLlocation\handlespecialFILEandURL} \definespecialtest\v!URL {\settrue \forceURLlocation\handlespecialFILEandURL} \definespecialtest\v!url {\settrue \forceURLlocation\handlespecialFILEandURL} \definespeciallocation\v!file{\setfalse\forceURLlocation\handlespecialallocationFILEandURL} \definespeciallocation\v!URL {\settrue \forceURLlocation\handlespecialallocationFILEandURL} \definespeciallocation\v!url {\settrue \forceURLlocation\handlespecialallocationFILEandURL} \def\handlespecialFILEandURL {\localdoifreferencefoundelse {\currentreferenceoperation::\currentreferencearguments}} \def\handlespecialallocationFILEandURL {\let\currentouterreference\currentreferenceoperation \let\currentinnerreference\currentreferencearguments \let\currentreferenceoperation\empty \let\currentreferencearguments\empty \gotoouterlocation} %D Now we have file references as special ones, it's rather %D logical to have the viewer specific ones available in a dual %D way too. At first glance we could do with: %D %D \starttyping %D \definespeciallocation\v!action %D {\getreferenceelements\currentreferenceoperation %D \handleexecreference} %D \stoptyping %D %D An better alternative, slower but error aware, is % \definespecialtest\v!actie % {\localdoifreferencefoundelse\currentreferenceoperation} \definespecialtest\v!action % rather ugly action(whatever{argument}) {\expanded{\localdoifreferencefoundelse{\currentreferenceoperation \ifx\currentreferencearguments\empty\else{\currentreferencearguments}\fi}}} \definespeciallocation\v!action {\handleexecreference} %D So now we can say: %D %D \starttyping %D \goto{some action}[PreviousJump] %D \stoptyping %D %D as well as: %D %D \starttyping %D \goto{some text}[action(PreviousJump] %D \stoptyping %D A special case of references are those to programs. These, %D very system dependant references are implemented by abusing %D some of the previous macros. %D %D \showsetup{setupprograms} %D \showsetup{defineprogram} %D \showsetup{program} %D %D The latter gives access to the description of the program, %D being the last argument to the definition command. \def\setupprograms {\dodoubleargument\getparameters[\??pr]} \def\dodefineprogram[#1][#2][#3]% {\setgvalue{\v!program:::#1}{\doprogram{#2}{#3}}} \def\defineprogram {\dotripleargument\dodefineprogram} \def\program#1[#2]% {\bgroup \ifcsname\v!program:::#2\endcsname \def\doprogram##1##2{\goto{\doifelsenothing{#1}{##2}{#1}}[\v!program(#2)]}% \csname\v!program:::#2\endcsname \else {\tttf[#2]}% \fi \egroup} % needs an update: program(abc{arg}) \definespeciallocation\v!program#1#2% {\bgroup \iflocation \ifcsname\v!program:::\currentreferenceoperation\endcsname \def\doprogram##1##2{\def\@@programfile{##1}}% \getvalue{\v!program:::\currentreferenceoperation}% \else \let\@@programfile\currentreferenceoperation \fi \defconvertedcommand\ascii\@@programfile \dohandlegoto {#2}% {\dostartrunprogram\buttonwidth\buttonheight{\@@prdirectory\ascii}\currentreferencearguments}% {\dostoprunprogram}% \else {#2}% \fi \egroup} %D As we can see, we directly use the special reference %D mechanism, which means that %D %D \starttyping %D \goto{some text}[program(name{args})] %D \stoptyping %D %D is valid. %D The next macro provides access to the actual pagenumbers. %D When documenting and sanitizing the original reference %D macros, I decided to keep the present meaning as well as to %D make this meaning available as a special reference method. %D So now one can use: %D %D \starttyping %D \gotopage{some text}[location] %D \gotopage{some text}[number] %D \gotopage{some text}[file::number] %D \stoptyping %D %D as well as: %D %D \starttyping %D \goto{some text}[page(location)] %D \goto{some text}[page(number)] %D \goto{some text}[file::page(number)] %D \stoptyping %D %D Here location is a keyword like \type{nextpage}. %D %D \showsetup{gotopage} \def\dodefinepage[#1][#2]% {\setvalue{\v!page:::#1}{#2}} \def\definepage {\dodoubleargument\dodefinepage} \definepage [\v!firstpage] [\firstpage] \definepage [\v!previouspage] [\prevpage] \definepage [\v!nextpage] [\nextpage] \definepage [\v!lastpage] [\lastpage] \definepage [\v!firstsubpage] [\firstsubpage] \definepage [\v!previoussubpage] [\prevsubpage] \definepage [\v!nextsubpage] [\nextsubpage] \definepage [\v!lastsubpage] [\lastsubpage] \definepage [\v!first] [\firstpage] \definepage [\v!previous] [\prevpage] \definepage [\v!next] [\nextpage] \definepage [\v!last] [\lastpage] \definepage [\v!first\v!sub] [\firstsubpage] \definepage [\v!previous\v!sub] [\prevsubpage] \definepage [\v!next\v!sub] [\nextsubpage] \definepage [\v!last\v!sub] [\lastsubpage] %D Because we combine both methods, we have to take care of %D the \type{file::page(n)} as well as \type{page(file::n)}. \definespeciallocation\v!page#1#2% page(n) page(+n) page(-n) {\iflocation \ifx\currentouterreference\empty \splitoffreference\currentreferenceoperation \else \let\currentinnerreference\currentreferenceoperation \fi \ifx\currentouterreference\empty \doifinstringelse+\currentinnerreference{\edef\currentinnerreference{\the\numexpr\realpageno\currentinnerreference}} {\doifinstring -\currentinnerreference{\edef\currentinnerreference{\the\numexpr\realpageno\currentinnerreference}}}% \doifnonzeropositiveelse\currentinnerreference\donothing{\edef\currentinnerreference{1}}% \docheckrealreferencepage\currentinnerreference % new \let\currentrealreference\currentinnerreference % handy to have this available \gotorealpage\empty\empty\currentinnerreference{#2}% \else \setouterlocation\currentouterreference \doifnonzeropositiveelse\currentinnerreference\donothing{\edef\currentinnerreference{\executeifdefined{\v!page:::\currentinnerreference}1}}% \gotorealpage\otherURL\otherfile\currentinnerreference{#2}% \fi \else {#2}% \fi} \def\gotopage#1[#2]% {\goto{#1}[\v!page(#2)]} %D A still very rudimentary|/|experimental forward|/|backward %D reference mechanism is provided by the macro \type{\atpage}: %D %D \starttyping %D ... \somewhere{backward text}{forward text}[someref] ... %D ... \atpage[someref] ... %D \stoptyping %D %D In future versions there will be more sophisticated %D support, also suitable for references to floating bodies. \unexpanded\def\somewhere#1#2#3[#4]% #3 gobbles space around #2 {\dontleavehmode %\leaveoutervmode \doifreferencefoundelse{#4} {\ifforwardreference \doifelsenothing{#1} {\dosymbolreference{}{}[#4]} {\dogotospace{#1}[#4]}% \else \doifelsenothing{#2} {\dosymbolreference{}{}[#4]} {\dogotospace{#2}[#4]}% \fi} {\unknownreference{#4}#1/#2}% \referenceinfo{<}{#4}} \unexpanded\def\atpage[#1]% {\dontleavehmode %\leaveoutervmode \doifreferencefoundelse{#1} {\ifrealreferencepage \ifforwardreference \dogotofixed{\labeltext\v!hencefore}[#1]% \else \dogotofixed{\labeltext\v!hereafter}[#1]% \fi \else \dogotofixed{\labeltexts\v!atpage\currentpagereference}[#1]% \fi} {\unknownreference{#1}% \labeltexts\v!page\dummyreference}% \referenceinfo{<}{#1}} %D We can cross link documents by using: %D %D \showsetup{coupledocument} %D %D like: %D %D \starttyping %D \coupledocument[print][somefile][chapter,section] %D \stoptyping %D %D After which when applicable, we have available the %D references: %D %D \starttyping %D \goto{print version}[print::chapter] %D \stoptyping %D %D and alike. The title placement definition macros have a %D key \type{file}, which is interpreted as the file to jump %D to, that is, when one clicks on the title. \let\crossdocumentreferences\empty \let\crossdocumentelements\empty \newif\ifautocrossdocument \def\docoupledocument[#1][#2][#3][#4]% is this :/- safe ? {\ifthirdargument \begingroup \def\dolistelement##1##2##3##4##5##6% 2=aut 6=pag / 2 goes into text ref slot {\global\utilitydonetrue %{Watch the braces here below!} \setglobalcrossreference{{##1::\@@filterblocknumberpart[##5]}}{}{##6}{##2}}% \def\usereferences[##1]% %{\setbox0\vbox{\doutilities{#3}{##1}{#3}\relax\relax}}% {\startnointerference \doutilities{#3}{##1}{#3}\relax\relax \stopnointerference}% \douseexternaldocument[#1][#2][#4]% \doglobal\addtocommalist{#1}\crossdocumentreferences \def\docommand##1% {\letgvalue{\??rf##1\c!state}\v!start % for fast checking \doglobal\addtocommalist{##1}\crossdocumentelements}% \processcommalist[#3]\docommand \ifutilitydone \global\autocrossdocumenttrue \fi \endgroup \fi} \def\coupledocument {\doquadrupleempty\docoupledocument} %D --- STRANGE HERE, BETTER IN CORE-NAV --- \def\checkcontrastreference#1% {\ifnum\currentreferencetype=\rt!page\ifnum\currentdatareference=\realpageno \doifdefined{#1\c!contrastcolor}{\setevalue{#1\c!color}{\getvalue{#1\c!contrastcolor}}}% \fi\fi} \def\checkcontrastreference#1% {\ifnum\currentreferencetype=\rt!page\relax\ifnum\currentdatareference=\realpageno \copycsname#1\c!color\endcsname\csname#1\c!contrastcolor\endcsname \fi\fi} %D Buttons are just what their names says: things that can be %D clicked (pushed) on. They are similar to \type{\goto}, %D except that the text argument is not interpreted. %D Furthermore one can apply anything to them that can be done %D with \type{\framed}. %D %D \startbuffer %D \button[width=3cm,height=1.5cm]{Exit}[ExitViewer] %D \stopbuffer %D %D \typebuffer %D %D gives %D %D \getbuffer %D %D This command is formally specified as: %D %D \showsetup{button} %D %D The characteristics can be set with: %D %D \showsetup{setupbuttons} \def\setupbuttons {\dodoubleargument\getparameters[\??bt]} \definecomplexorsimpleempty\button \def\complexbutton {\docomplexbutton\??bt} \presetlocalframed[\??bt] \long\def\docomplexbutton#1[#2]#3#4% get rid of possible space before [#4] {\dodocomplexbutton#1[#2]{#3}#4} % #4 == [ \def\buttonframed{\dodoubleempty\localframed[\??bt]} % goodie \long\def\dodocomplexbutton#1[#2]#3[#4]% #3 can contain [] -> {#3} later {\bgroup \doifvalue{#1\c!state}\v!stop\locationfalse \iflocation \resetgoto \ConvertConstantAfter\doifelse{#3}\v!none\hphantom\hbox {\doifelsenothing{#4} {\setlocationboxnop#1[#2]{#3}[#4]} {\doifreferencefoundelse{#4} {\setlocationboxyes#1[#2]{#3}[#4]} {\unknownreference{#4}% \setlocationboxnop#1[#2]{#3}[#4]}}}% \fi \egroup} %D Interaction buttons, in fact a row of tiny buttons, are %D typically only used for navigational purposed. The next %D macro builds such a row based on a specification list. %D %D \startbuffer %D \interactionbuttons %D [width=\hsize][page,PreviousJump,ExitViewer] %D \stopbuffer %D %D \typebuffer %D %D gives %D %D \getbuffer %D %D Apart from individual entries, one can use \type{page} and %D \type {subpage} as shortcuts to their four associated buttons. %D The symbols are derived from the symbols linked to the %D entries. % does not work well with for instance SomeRef{whatever} \def\interactionbuttons {\dodoubleempty\dointeractionbuttons} \def\dointeractionbuttons[#1][#2]% er is een verdeel macro \horizontalfractions {\iflocation % BUG: fails when frame=off; best is to rewrite this macro \bgroup \doif\@@ibstate\v!stop\locationfalse \iflocation \ifsecondargument \setupinteractionbar[#1]% \checkinteractionbar{1.5em}\v!broad\!!zeropoint % brrrrr \setbox2\hbox {\localframed[\??ib][\c!background=]{\symbol[\@@iasymbolset][\v!previouspage]}}% \!!heighta\ht2 % needed because we default to nothing \setupinteractionbar[\c!strut=\v!no]% \setinteractionparameter\c!width\!!zeropoint \!!counta\zerocount % new, was 1 \processallactionsinset [#2] [ \v!page=>\advance\!!counta 4, \v!subpage=>\advance\!!counta 4, \s!unknown=>\advance\!!counta 1]% \ifdim\@@ibwidth=\zeropoint \!!widtha2em \advance\!!widtha \@@ibdistance % new \!!widthb\!!counta\!!widtha \advance\!!widthb -\@@ibdistance % new \else \!!widtha\@@ibwidth \!!widthb\@@ibdistance % new \multiply\!!widthb \!!counta % new \advance\!!widthb -\@@ibdistance % new \advance\!!widtha -\!!widthb % new \divide\!!widtha \!!counta \!!widthb\@@ibwidth \fi \def\goto##1% clash ? {\setnostrut \edef\localreference{##1}% \expanded{\dodocomplexbutton\??ib[\c!height=\the\!!heighta,\c!width=\the\!!widtha]}% {\dontleavehmode\symbol[\@@iasymbolset][\localreference]}% [\localreference]% \hss}% \hbox to \!!widthb {\processallactionsinset [#2] [ \v!page=>\goto\v!firstpage \goto\v!nextpage \goto\v!previouspage \goto\v!lastpage, \v!subpage=>\goto\v!firstsubpage \goto\v!nextsubpage \goto\v!previoussubpage \goto\v!lastsubpage, \s!unknown=>\goto\commalistelement]% \unskip}% \else \interactionbuttons[][#1]% \fi \fi \egroup \fi} %D \macros %D {overlaybutton} %D %D For converience we provide: %D %D \starttyping %D \overlaybutton[reference] %D \stoptyping %D %D This command can be used to define overlays an/or can be %D used in the whatevertext areas, like: %D %D \starttyping %D \defineoverlay[PrevPage][\overlaybutton{PrevPage}] %D \setupbackgrounds[page][background=PrevPage] %D \setuptexttexts[\overlaybutton{NextPage}] %D \stoptyping %D %D For practical reasons, this macro accepts square brackets %D as well as braces. \definecomplexorsimple\overlaybutton \def\simpleoverlaybutton#1% {\complexoverlaybutton[#1]} \def\complexoverlaybutton[#1]% {\iflocation \doifreferencefoundelse{#1} {\overlayfakebox {#1}} {\unknownreference{#1}}% \fi} \def\overlayfakebox#1% {\hbox {\setbox\scratchbox\null \wd\scratchbox\overlaywidth \ht\scratchbox\overlayheight \locationstrutfalse \gotolocation{#1}{\box\scratchbox\presetgoto}}} %D \macros %D {dotextprefix} %D %D In previous macros we used \type {\dotextprefix} to %D generate a space between a label and a number. %D %D \starttyping %D \dotextprefix{text} %D \stoptyping %D %D Only when \type {text} is not empty, a space is inserted. \def\dotextprefix#1% {\bgroup \global\labeltextdonefalse % this is an ugly dependancy, \setbox\scratchbox\hbox{#1}% to be solved some day \ifdim\wd\scratchbox>\zeropoint \unhbox\scratchbox \iflabeltextdone\else\@@rfseparator\fi \else \unhbox\scratchbox \fi \egroup} %D Plugin code: %D In the next settings we see some variables that were not %D used here and that concern the way the pagenumbers refered %D to are typeset. \setupreferencing [\c!state=\v!start, \c!autofile=\v!no, \v!part\c!number=\v!yes, \v!chapter\c!number=\v!no, \c!interaction=\v!all, %\c!urlalternative=\v!both, %\c!urlspace=\v!no, %\c!urlletter=, %\c!urlkleur=, \c!convertfile=\v!no, %\c!strut=\v!no, % some day an option \c!prefix=, \c!width=.75\makeupwidth, \c!left=\quotation\bgroup, \c!right=\egroup, \c!global=\v!no, \c!expansion=\v!no, \c!separator=\nonbreakablespace] \setupurl [\c!alternative=\v!both, \c!space=\v!no, \c!style=\v!type, \c!color=] \setupprograms [\c!directory=] %D We cannot set up buttons (not yet, this one calls a menu macro): % under consideration: % % \setupinteraction[state=start] % % \unprotect % % \chardef\rt!extern=5 % % \definesystemreferencehandler \rt!extern \handleexecreference % % \definespecialtest\v!extern % {\expanded{\localdoifreferencefoundelse{\currentreferenceoperation % \ifx\currentreferencearguments\empty\else{\currentreferencearguments}\fi}}} % % \definespeciallocation\v!extern % {\handleexecreference} % % \def\defineexternalreference[#1]% % {\setglobalsystemreference\rt!extern{#1}{#1}} % % \protect % % \defineexternalreference[NewOne] % % \def\PDFexecuteNewOne{/SomeNewAction /SomeParameter (\argumentA)} % % \starttext % % \goto{test}[AVDP{../../nach-dateipfad.pdf}] % \blank % \goto{test}[external(AVDP{../../nach-dateipfad.pdf})] % \blank % \goto{test}[AVDP{../../nach-dateipfad.pdf}] % \blank % \goto{test}[external(AVDP{../../nach-dateipfad.pdf})] % \blank % \goto{test}[CloseDocument] % \blank % \goto{test}[action(CloseDocument)] % % \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-2.lua0000644000175000017500000000457411571377075024123 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-2'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 } context-2013.05.28.20130704/texmf-dist/tex/context/base/java-imp-fld.mkiv0000644000175000017500000003710612130411274025032 0ustar norbertnorbert%D \module %D [ file=java-fld, %D version=1998.05.20, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Field Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In \LUATEX\ the following does not work out well: %D %D \starttyping %D v = v.replace(/\\\\"e/g,"\\353") ; %D \stoptyping %D %D But this does: %D %D \starttyping %D v = String(v).replace(/\\\\"e/g,"\\353") ; %D \stoptyping %D %D Probably a \UNICODE\ issue. Beware, in \MKIV\ we have a %D different escaping of \type {\\}. %D %D Watch out: cf. the latest pdf specification we've changed %D On into Yes. Also, we've changed the test for the on value %D into !Off as we dón't know what value it gets in the reader. \startluasetups javascript:pdfencoding local verbatim = context.verbatim verbatim("{\n") for accent, group in table.sortedhash(characters.tex.accentmapping) do for character, mapping in table.sortedhash(group) do if character == "" then character = " " end if accent == '"' then verbatim(" '\\\\%s%s' : '\\u%04X',\n",accent,character,utf.byte(mapping)) else verbatim(' "\\\\%s%s" : "\\u%04X",\n',accent,character,utf.byte(mapping)) end end end verbatim(" '\\\\OE' : '\\u0152',\n") verbatim(" '\\\\oe' : '\\u0153',\n") verbatim(" '\\\\AE' : '\\u00C6',\n") verbatim(" '\\\\ae' : '\\u00E6',\n") verbatim(" '\\\\<<' : '\\u00AB',\n") verbatim(" '\\\\>>' : '\\u00BB',\n") verbatim(" '\\\\ss' : '\\u00DF' \n") verbatim("}\n") \stopluasetups % maybe make { } tex braces in javascript code so that we can call lua \def\JavaScriptTeXAccentMapping{\luasetup{javascript:pdfencoding}} \startJSpreamble SanitizeTeXInput used later var TeXAccentMapping = \JavaScriptTeXAccentMapping function TeX_Replacer(original,str) { return (TeXAccentMapping[str] || str) ; } function Sanitized_TeX_String(value) { return (value.replace(/(\\..)/g, TeX_Replacer)) ; } var TeX_Key_Mode = 0 ; var TeX_Key_Char = "" ; function Initialize_TeX_Keystroke() { TeX_Key_Char = "" ; TeX_Key_Mode = 0 ; } function Sanitized_TeX_Keystroke(change) { if (!event.willCommit) { if (change=="\\") { TeX_Key_Mode = 1 ; return ("") } else if (TeX_Key_Mode == 1) { TeX_Key_Mode = 2 ; TeX_Key_Char = change ; return ("") } else if (TeX_Key_Mode == 2) { TeX_Key_Mode = 0 ; TeX_Key_Char = "\\"+TeX_Key_Char+change ; return (Sanitized_TeX_String(TeX_Key_Char)) } else { TeX_Key_Mode = 0 ; return (change) } } } function Initialize_TeX_Key() { Initialize_TeX_Keystroke() ; } function Convert_TeX_Key() { if (!event.willCommit) { event.change = Sanitized_TeX_Keystroke(event.change) ; } } function Convert_TeX_String() { event.value = Sanitized_TeX_String(event.value) ; } \stopJSpreamble % \startJScode {Initialize_TeX_Key} uses {SanitizeTeXInput} % Initialize_TeX_Keystroke() ; % \stopJScode % % \startJScode {Convert_TeX_Key} uses {SanitizeTeXInput} % if (!event.willCommit) { % event.change = Sanitized_TeX_Keystroke(event.change) ; % } % \stopJScode % % \startJScode{Convert_TeX_String} uses {SanitizeTeXInput} % event.value = Sanitized_TeX_String(event.value) ; % \stopJScode % was used now but we autocheck anyway so lets test this for a while \startJSpreamble FieldsStates used later var visible_field = new Array() ; var visible_fields = 0 ; function PresetFields() { this.syncAnnotScan() ; } function Preset_Fields() { this.syncAnnotScan() ; } function Hide_When_Down() { event.target.hidden = true ; } function Hide_Field(Name) { var v = this.getField(Name) ; if (v) { v.hidden = true ; v.readonly = true ; this.dirty = false ; } } function Do_Vide_Field(Name, Closable) { var v = this.getField(Name) ; if (v) { ++visible_fields ; visible_field[visible_fields] = Name ; v.hidden = false ; if (Closable) { v.readonly = false ; v.value = "Yes" ; } this.dirty = false ; } } function Vide_Field(Name) { Do_Vide_Field(Name,false) ; } function Vide_Hide_Field(Name) { Do_Vide_Field(Name,true) ; } function Hide_Fields() { while (visible_fields>0) { Hide_Field(visible_field[visible_fields]) ; --visible_fields ; } } function Vide_Fields(Name) { Hide_Fields() ; Vide_Field(Name) ; } function Vide_Hide_Fields(Name) { Hide_Fields() ; Vide_Hide_Field(Name) ; } function Toggle_Hide(Name) { var v = this.getField(Name) ; if (v) { v.hidden = !v.hidden ; this.dirty = false ; } } function Field_On(Name) { v = this.getField(Name) ; if (v) { v.value = "Yes" ; this.dirty = false ; } } function Field_Off(Name) { var v = this.getField(Name) ; if (v) { v.value = "Off" ; this.dirty = false ; } } function Toggle_Value(Name) { var v = this.getField(Name) ; if (v) { if (v.value != "Off") { v.value = "Off" ; } else { v.value = "Yes" ; } } this.dirty = false ; } function Toggle_Read(Name) { var v = this.getField(Name); if (v) { v.readonly = !v.readonly ; } } function Flip_Fields(Name) { var Names = Name.split(",") ; for (var i=0; i < Names.length; i++) { v = this.getField(Names[i]) ; if (v) { v.hidden = !v.hidden ; v.value = "Yes" ; } } } function Forget_Changes() { this.dirty = false ; } function ForgetChanges() { this.dirty = false ; } \stopJSpreamble \definereference[ForgetChanges][JS(Forget_Changes)] % This can be done more efficient, by keeping track of the % current top of the stack. \startJSpreamble FieldStack used later function Field_Name(FieldSet,i) { return this.getField(FieldSet + ":" + i) } function Reset_Fields(FieldSet) { var i = 1 ; while (true) { v = Field_Name(FieldSet,i) ; if (!v) { break ; } else { v.value = "Off" ; } i++ ; } this.dirty = false ; } function Set_Fields(FieldSet) { var i = 1 ; while (true) { v = Field_Name(FieldSet,i) ; if (!v) { break ; } else { v.value = "Yes" ; } i++ ; } this.dirty = false ; } function Set_Field(FieldSet, FieldName) { Reset_Fields(FieldSet) ; v = Field_Name(FieldSet,FieldName) ; if (v) { v.value = "Yes" ; this.dirty = false ; } } function Reset_Field(FieldSet, FieldName) { Set_Fields(FieldSet) ; v = Field_Name(FieldSet,FieldName) ; if (v) { v.value = "Off" ; this.dirty = false ; } } function Walk_Field(FieldSet) { var i = 1 ; while (true) { v = Field_Name(FieldSet,i) ; if (v) { if (v.value != "Off") { v.value = "Off" ; var ii = i ; ii++ ; v = Field_Name(FieldSet,ii) ; if (! v) { v = Field_Name(FieldSet,1) ; } if (v) { v.value = "Yes" ; } break ; } i++ ; } else { break ; } } this.dirty = false ; } var FieldSets = new Array() ; function Do_Get_Check_Walk_Field(FieldSet) { var f = FieldSets[FieldSet] if (! f) { f = new Array() ; f.number = 0 ; f.delay = 500 ; f.paused = false ; f.running = false ; f.name = FieldSet ; f.timeout = null ; f.repeat = true ; f.total = 0 ; f.pauseset = new Array() ; FieldSets[FieldSet] = f ; for (var i=1; i>0; i++) { var v = Field_Name(FieldSet,i) ; if (! v) { f.total = i - 1 ; break ; } } f.start = 0 ; f.stop = f.total ; f.pause = 0 ; } this.dirty = false ; return f } function Do_Next_Auto_Walk_Field_Step(FieldSet,fieldset,n) { var v = Field_Name(FieldSet,fieldset.number) ; if (v) { if (v.value != "Off") { v.value = "Off" ; } } v = Field_Name(FieldSet,n) ; if (v) { fieldset.number = n ; v.value = "Yes" ; if (fieldset.pauseset[n]) { // fieldset.pause = n ; // Do_Stop_Auto_Walk_Field(Fieldset) ; Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.paused = true ; } } this.dirty = false ; } function Do_Next_Auto_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { if (fieldset.number >= fieldset.stop) { if (fieldset.repeat == false) { fieldset.running = false ; Do_Stop_Auto_Walk_Field(fieldset) ; } else { Do_Next_Auto_Walk_Field_Step(FieldSet,fieldset,fieldset.start) ; } } else { Do_Next_Auto_Walk_Field_Step(FieldSet,fieldset,fieldset.number+1) ; } this.dirty = false ; } } function Do_Stop_Auto_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { try { app.clearInterval(fieldset.timeout) ; app.clearTimeOut(fieldset.timeout) ; } catch (e) { } this.dirty = false ; } } function Do_Start_Auto_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { Do_Stop_Auto_Walk_Field(FieldSet) ; Do_Next_Auto_Walk_Field(FieldSet) ; fieldset.timeout = app.setInterval("Do_Next_Auto_Walk_Field('"+FieldSet+"')", fieldset.delay) ; this.dirty = false ; } } function Start_Walk_Field(FieldSet, Delay) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { fieldset.number = 0 ; if (Delay) { fieldset.delay = Delay ; } Reset_Fields(FieldSet) ; Do_Start_Auto_Walk_Field(FieldSet) ; fieldset.running = true ; fieldset.paused = false ; } } function Pause_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { if (fieldset.running) { if (fieldset.paused) { Do_Start_Auto_Walk_Field(FieldSet) ; fieldset.paused = false ; } else { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.paused = true ; } } } } function Start_Pause_Walk_Field(FieldSet, Delay, Option) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { if (Option == "once") { fieldset.repeat = false ; } else if (Option == "pause") { fieldset.repeat = false ; } else { fieldset.repeat = true ; } if (Option == "pause") { for (i=3; i 1) { fieldset.start = fieldset.pause - 1 ; } else { fieldset.start = 1 ; } fieldset.stop = fieldset.total ; } else { var Start = arguments[3] ; var Stop = arguments[4] ; if (typeof Start == "string") { fieldset.start = parseInt(Start) ; } else if (typeof Start == "number") { fieldset.start = Start ; } else { fieldset.start = 1 ; } if (typeof Stop == "string") { fieldset.stop = parseInt(Stop) ; } else if (typeof Stop == "number") { fieldset.stop = Stop ; } else { fieldset.stop = fieldset.total ; } fieldset.pause = 0 ; } if (fieldset.running) { if (fieldset.paused) { Do_Start_Auto_Walk_Field(FieldSet) ; fieldset.paused = false ; } else { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.paused = true ; } } else { fieldset.number = fieldset.start - 1 ; if (Delay) { fieldset.delay = Delay ; } Reset_Fields(FieldSet) ; Do_Start_Auto_Walk_Field(FieldSet) ; fieldset.running = true ; fieldset.paused = false ; } } } function Stop_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.running = false ; fieldset.paused = false ; } } function Reset_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.number = 0 ; fieldset.running = false ; fieldset.paused = false ; Reset_Fields(FieldSet) ; } } function Previous_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.running = false ; fieldset.paused = false ; if (fieldset.number>0) { var v = Field_Name(FieldSet,fieldset.number) ; if (v) { if (v.value != "Off") { v.value = "Off" ; } } fieldset.number-- ; v = Field_Name(FieldSet,fieldset.number) ; if (v) { v.value = "Yes" ; } this.dirty = false ; } } } function Next_Walk_Field(FieldSet) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { Do_Stop_Auto_Walk_Field(FieldSet) ; fieldset.running = false ; fieldset.paused = false ; var f = fieldset.number + 1 ; var v = Field_Name(FieldSet,f) ; if (v) { var v = Field_Name(FieldSet,fieldset.number) ; if (v) { if (v.value != "Off") { v.value = "Off" ; } } fieldset.number++ ; v = Field_Name(FieldSet,fieldset.number) ; if (v) { v.value = "Yes" ; } this.dirty = false ; } } } function Set_Walk_Field_Delay(FieldSet, Delay) { var fieldset = Do_Get_Check_Walk_Field(FieldSet) ; if (fieldset) { if (Delay) { fieldset.delay = Delay ; if (fieldset.running) { Do_Stop_Auto_Walk_Field(FieldSet) ; Do_Start_Auto_Walk_Field(FieldSet) ; } } } } \stopJSpreamble \definereference[Walk] [JS(Walk_Field)] \definereference[StartWalk] [JS(Start_Walk_Field)] \definereference[StopWalk] [JS(Stop_Walk_Field)] \definereference[PauseWalk] [JS(Pause_Walk_Field)] \definereference[ResetWalk] [JS(Reset_Walk_Field)] \definereference[PreviousWalk][JS(Previous_Walk_Field)] \definereference[NextWalk] [JS(Next_Walk_Field)] \definereference[SetWalkDelay][JS(Set_Walk_Field_Delay)] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-def.mkii0000644000175000017500000001055311754241457024246 0ustar norbertnorbert%D \module %D [ file=core-def, %D version=2002.05.07, %D title=\CONTEXT\ Core Macros, %D subtitle=Defaults, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Defaults} %D Here we collect settings that cannot be done earlier due to %D depedencies. More code will moved to this module later. \unprotect \usesymbols[mis,mvs] % 'glm' no longer needed due to lm \usesymbols[nav] \setupsymbolset[navigation 1] \setupinteraction[\c!symbolset=navigation 1] % initialization order: %appendtoks \initializeluainstances \to \everyjob \appendtoks \showcontextbanner \to \everyjob \appendtoks \initializenewlinechar \to \everyjob \appendtoks \checksystemcommandmode \to \everyjob \appendtoks \calculatecurrenttime \to \everyjob \appendtoks \loadsystemfiles \to \everyjob \appendtoks \loadoptionfile \to \everyjob % can load files ! \appendtoks \preloadfonts \to \everyjob \appendtoks \settopskip \to \everyjob \appendtoks \preloadlanguages \to \everyjob \appendtoks \preloadspecials \to \everyjob \appendtoks \openspecialfile \to \everyjob \appendtoks \openutilities \to \everyjob \appendtoks \splitjobfilename \to \everyjob \appendtoks \checknotes \to \everyjob % depends on bodyfont \appendtoks \initializeMPgraphics \to \everyjob % after loading system files \appendtoks \reportsystemcommandmode \to \everyjob \appendtoks \initializemainlanguage \to \everyjob \appendtoks \settrue\trackfilenames \to \everyjob \appendtoks \newbackgroundfalse \to \everyjob % global \ifdefined\initializepagecounters \appendtoks \initializepagecounters \to \everyjob \fi \appendtoks \directsetup{*runtime:options} \to \everyjob % we could erase them afterwards % order can change \appendtoks \directsetup{*runtime:modules} \to \everyjob % we could erase them afterwards % order can change \appendtoks \checkpreprocessor \to \everyjob %appendtoks \page[\v!last] \page \to \everybye % moved to core-job, we need to do this cleaner \appendtoks \ifarrangingpages\poparrangedpages\fi \to \everybye \appendtoks \registerfileinfo[end]\jobname \to \everybye \appendtoks \savenofpages \to \everybye \appendtoks \savenofsubpages \to \everybye \appendtoks \closeutilities \to \everygoodbye \appendtoks \stopcopyingblocks \to \everygoodbye \appendtoks \closespecialfile \to \everygoodbye \prependtoks \resetutilities \to \everystarttext % moved 28-02-2002 \prependtoks \loadtwopassdata \to \everystarttext % moved 28-02-2002 \appendtoks \checkreferences \to \everystarttext % new 04-12-1999 % \appendtoks\everyjob\expandafter{\the\everyjob\checkpreprocessor}\to\everydump % temporary here: % \in \at \about \from \over \unexpanded\def\arg{\mathortext\normalmatharg\normaltextarg} % brrr % normally one does not want this to happen nested, maybe there % is more; non public vars btw, will become conditionals \ifx\writetoregisterfalse\undefined \else \appendtoks \writetoregisterfalse \to \everybeforeutilityread \fi \ifx\writetolistfalse \undefined \else \appendtoks \writetolistfalse \to \everybeforeutilityread \fi \ifx\notesenabledfalse \undefined \else \appendtoks \notesenabledfalse \to \everybeforeutilityread \fi \def\synctexwarning {\ifdefined\synctex \ifnum\synctex=\zerocount \else \writeline \writestatus\m!systems{BEWARE: synctex functionality is enabled!}% \writeline \globallet\synctexwarning\relax \fi \fi} \prependtoks \synctexwarning \to \everyjob \prependtoks \synctexwarning \to \everystarttext \appendtoks \synctexwarning \to \everystoptext % last minute hacks \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-11.tex0000644000175000017500000001231411754241457023673 0ustar norbertnorbert%D \module %D [ file=s-pre-11, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 11, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setuppapersize [S6][S6] \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] \setupbodyfont [14.4pt,lbr] \setupcolors [state=start] \setupinteraction [click=no, display=new, state=start] \setupinteractionscreen [option=max] \def\SomeShape% {\resetMPdrawing \startMPdrawing path p[], q[] ; pair a, b ; StartPage ; \stopMPdrawing \dorecurse{\CurrentTopic} {\startMPdrawing initialize_box(\MPpos{topic-\realfolio-\recurselevel}) ; p[\recurselevel] := tensecircle (wxy,hxy,.25cm) shifted cxy ; fill p[\recurselevel] withcolor .9white ; pickup pencircle scaled .25cm ; \ifnum\recurselevel=\CurrentTopic\space draw p[\recurselevel] withcolor \MPcolor{ShowColor} ; \else draw p[\recurselevel] withcolor \MPcolor{DoneColor} ; \fi \stopMPdrawing}% \dorecurse{\CurrentMaxItem} {\startMPdrawing initialize_box(\MPpos{item-\realfolio-\recurselevel}) ; linewidth := .25cm ; q[\recurselevel] := tensecircle (wxy,hxy,linewidth) shifted cxy ; fill q[\recurselevel] withcolor .9white ; pickup pencircle scaled linewidth ; \ifnum\recurselevel=\CurrentMaxItem\space draw q[\recurselevel] withcolor \MPcolor{ShowColor} ; \else draw q[\recurselevel] withcolor \MPcolor{DoneColor} ; \fi \stopMPdrawing}% \dostepwiserecurse{2}{\CurrentTopic}{1} {\startMPdrawing draw rt point 3 of p[\recurselevel-1] -- lft point 7 of p[\recurselevel] withcolor \MPcolor{ArrowColor} ; \stopMPdrawing}% \dostepwiserecurse{2}{\CurrentMaxItem}{1} {\startMPdrawing draw bot point 9 of q[\recurselevel-1] -- top point 5 of q[\recurselevel] withcolor \MPcolor{ArrowColor} ; \stopMPdrawing}% \startMPdrawing draw Page withpen pencircle scaled .5cm withcolor \MPcolor{EdgeColor} ; StopPage ; \stopMPdrawing \MPdrawingdonetrue \getMPdrawing} \def\TitlePage#1% {\startstandardmakeup \setupalign[middle] \def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil#1\vfil\vfil \stopstandardmakeup} \definecolor[PageColor][r=.5,g=.4,b=.3] \definecolor[LineColor][r=.7,g=.6,b=.5] \definecolor[PageColor] [s=.60] \definecolor[ShowColor] [r=.40] \definecolor[EdgeColor] [g=.40] \definecolor[DoneColor] [r=.40,g=.40] \definecolor[ArrowColor] [b=.40] \definecolor[LineColor] [r=.60,g=.60] \definecolor[GotoColor] [ArrowColor] \setupinteraction[color=GotoColor,contrastcolor=GotoColor] \defineoverlay [shape] [\SomeShape] \defineoverlay [next] [\overlaybutton{forward}] % [{nextpage}] \setupbackgrounds [page] [background={color,next,shape}, backgroundcolor=PageColor] \doglobal\newcounter\CurrentMaxItem \doglobal\newcounter\CurrentItem \doglobal\newcounter\CurrentTopic \def\StartIdea% {\doglobal\newcounter\CurrentItem} \def\StartTopic% {\doglobal\increment\CurrentTopic \dostartbuffer[topic-\CurrentTopic][StartTopic][StopTopic]} \def\StopIdea% {\dorecurse{\CurrentItem} {\let\CurrentMaxItem\recurselevel \doStopIdea}} \def\doStopIdea% {\startstandardmakeup \dontcomplain \vskip.875cm \hbox to \makeupwidth {\hfill \dorecurse{\CurrentTopic} {\edef\Topic{topic-\realfolio-\recurselevel}% \hpos {\Topic} {\framed [frame=off,align=middle,offset=.25cm] {\getbuffer[topic-\recurselevel]}}% \ifnum\recurselevel<\CurrentTopic \hskip.875cm \fi}% \hfill} \vskip.875cm \vfilll \dorecurse{\CurrentMaxItem} {\edef\Item{item-\realfolio-\recurselevel} \hbox to \makeupwidth {\hfill \hpos {\Item} {\framed [width=.75\makeupwidth, frame=off, align=middle,offset=.125cm] {\getbuffer[item-\recurselevel]}}% \hfill} \vskip.875cm} \vfilll \stopstandardmakeup} \def\StartItem% {\doglobal\increment\CurrentItem \dostartbuffer[item-\CurrentItem][StartItem][StopItem]} \lefthyphenmin =\maxdimen \righthyphenmin=\maxdimen \doifnotmode{demo}{\endinput} \starttext \StartIdea \StartTopic A Nice Idea \StopTopic \StartItem \input reich \relax \StopItem \StartItem \input reich \relax \StopItem \StartItem \input reich \relax \StopItem \StopIdea \StartIdea \StartTopic One More Nice Idea \StopTopic \StartItem \input reich \relax \StopItem \StartItem \input reich \relax \StopItem \StopIdea \StartIdea \StartTopic The Last Idea \StopTopic \StartItem \input tufte \relax \StopItem \StopIdea \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-xml.mkiv0000644000175000017500000001274411754241457024313 0ustar norbertnorbert%D \module %D [ file=catc-xml, %D version=2006.09.18, %D title=\CONTEXT\ Catcode Macros, %D subtitle=\XML\ Catcode Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Catcode Regimes / XML} \ifdefined \xmlcatcodesn \else \newcatcodetable \xmlcatcodesn \fi % normal \ifdefined \xmlcatcodese \else \newcatcodetable \xmlcatcodese \fi % entitle \ifdefined \xmlcatcodesr \else \newcatcodetable \xmlcatcodesr \fi % reduce \startcatcodetable \xmlcatcodesn \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\ampersandasciicode \activecatcode \catcode`\< \activecatcode \catcode`\> \othercatcode \catcode`\" \othercatcode % probably not needed any more \catcode`\/ \othercatcode % probably not needed any more \catcode`\' \othercatcode % probably not needed any more \catcode\tildeasciicode \othercatcode % probably not needed any more \catcode\hashasciicode \othercatcode % probably not needed any more \catcode\backslashasciicode \othercatcode % probably not needed any more \stopcatcodetable \startcatcodetable \xmlcatcodese \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\ampersandasciicode \activecatcode \catcode`\< \activecatcode \catcode`\> \activecatcode \catcode\hashasciicode \activecatcode \catcode\dollarasciicode \activecatcode \catcode\commentasciicode \activecatcode \catcode\backslashasciicode \activecatcode \catcode\circumflexasciicode\activecatcode \catcode\underscoreasciicode\activecatcode \catcode\leftbraceasciicode \activecatcode \catcode\rightbraceasciicode\activecatcode \catcode\barasciicode \activecatcode \catcode\tildeasciicode \activecatcode \stopcatcodetable \startcatcodetable \xmlcatcodesr \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\ampersandasciicode \activecatcode \catcode`\< \activecatcode \catcode`\> \activecatcode \catcode\hashasciicode \activecatcode \catcode\dollarasciicode \activecatcode \catcode\commentasciicode \activecatcode \catcode\backslashasciicode \activecatcode \catcode\circumflexasciicode\activecatcode \catcode\underscoreasciicode\activecatcode \catcode\leftbraceasciicode \activecatcode \catcode\rightbraceasciicode\activecatcode \catcode\barasciicode \activecatcode \catcode\tildeasciicode \activecatcode \stopcatcodetable %D Next we hook in some active character definitions. \letcatcodecommand \xmlcatcodesn \ampersandasciicode \relax \letcatcodecommand \xmlcatcodesn `\< \relax \letcatcodecommand \xmlcatcodese \ampersandasciicode \relax \letcatcodecommand \xmlcatcodese `\< \relax \letcatcodecommand \xmlcatcodesr \ampersandasciicode \relax \letcatcodecommand \xmlcatcodesr `\< \relax \letcatcodecommand \xmlcatcodese \hashasciicode \relax \letcatcodecommand \xmlcatcodese \dollarasciicode \relax \letcatcodecommand \xmlcatcodese \commentasciicode \relax \letcatcodecommand \xmlcatcodese \backslashasciicode \relax \letcatcodecommand \xmlcatcodese \circumflexasciicode \relax \letcatcodecommand \xmlcatcodese \underscoreasciicode \relax \letcatcodecommand \xmlcatcodese \leftbraceasciicode \relax \letcatcodecommand \xmlcatcodese \rightbraceasciicode \relax \letcatcodecommand \xmlcatcodese \barasciicode \relax \letcatcodecommand \xmlcatcodese \tildeasciicode \relax \letcatcodecommand \xmlcatcodesr \hashasciicode \relax \letcatcodecommand \xmlcatcodesr \dollarasciicode \relax \letcatcodecommand \xmlcatcodesr \commentasciicode \relax \letcatcodecommand \xmlcatcodesr \backslashasciicode \relax \letcatcodecommand \xmlcatcodesr \circumflexasciicode \relax \letcatcodecommand \xmlcatcodesr \underscoreasciicode \relax \letcatcodecommand \xmlcatcodesr \leftbraceasciicode \relax \letcatcodecommand \xmlcatcodesr \rightbraceasciicode \relax \letcatcodecommand \xmlcatcodesr \barasciicode \relax \letcatcodecommand \xmlcatcodesr \tildeasciicode \relax \let\xmlcatcodes \xmlcatcodesn % beware, in mkiv we use \notcatcodes %D We register the catcodetables at the \LUA\ end where some further %D initializations take place. \ctxlua { characters.define( { % letter catcodes \number\xmlcatcodesn, \number\xmlcatcodese, \number\xmlcatcodesr, }, { % activate catcodes \number\xmlcatcodesn, \number\xmlcatcodese, \number\xmlcatcodesr, } ) catcodes.register("xmlcatcodes",\number\xmlcatcodes) } \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-11.mkii0000644000175000017500000000513011754241457024032 0ustar norbertnorbert%D \module %D [ file=x-fig-11, %D version=2003.02.08, %D title=\CONTEXT\ Style File, %D subtitle=Resource Reporting (3), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[res-00] \defineXMLenvironment [rl:library] {\starttext \doiffileelse{\outputfilename.zip}{\setups[rl:attach]}{} \disablemode[rl:used]} {\doifnotmode{rl:used}{No images processed.} \page \stoptext} \defineXMLenvironment [rl:usage] {\bgroup} {\doifnot{\XMLflush{rl:file}}{dummy} {\setups[rl:usage] \enablemode[rl:used]} \egroup} \defineXMLsave [rl:base] % base \defineXMLsave [rl:type] % figure \defineXMLsave [rl:state] % found|missing \defineXMLsave [rl:label] % label \defineXMLsave [rl:file] % filename \defineXMLsave [rl:suffix] % filesuffix \defineXMLsave [rl:comment] % text \defineXMLsave [rl:width] % width in pt \defineXMLsave [rl:height] % height in pt \defineXMLsave [rl:page] % page from file \def\XMLbpentry#1% {\PointsToWholeBigPoints{\XMLflush{#1}}\temp\temp bp} \def\XMLrlentry#1#2#3% {\tableiftextelse{\XMLflush{#2}} {\NC\bf#1\NC\XMLflush{#2}\doif{#3}{1}{ (\XMLbpentry{#2})}\NC\NR}{}} \unprotect \setuplayout[\v!middle] \startsetups[rl:figure] \externalfigure[\XMLflush{rl:file}][\c!width=4cm] \stopsetups \startsetups[rl:table] % by using a dedicated tabulation, we permit usage in dutch interface \definetabulate[XMLRLG][|lw(4.5em)|p|] \startXMLRLG \XMLrlentry {base} {rl:base} {0} \XMLrlentry {type} {rl:type} {0} \XMLrlentry {state} {rl:state} {0} \XMLrlentry {file} {rl:file} {0} \XMLrlentry {label} {rl:label} {0} \XMLrlentry {suffix} {rl:suffix} {0} \XMLrlentry {page} {rl:page} {0} \XMLrlentry {width} {rl:width} {1} \XMLrlentry {height} {rl:height} {1} \XMLrlentry {comment}{rl:comment}{0} \stopXMLRLG \stopsetups \startsetups[rl:usage] \startfiguretext {\v!none} {\setups[rl:figure]} \setups[rl:table] \stopfiguretext \stopsetups \startsetups[rl:attach] \useMPlibrary[nav] \setupcolors[\c!state=\v!start] \setupinteraction[\c!state=\v!start] \useattachment[whatever][\outputfilename.zip] \startlocalsetups[rl:attach:button] \inframed [\c!offset=\v!overlay,\c!frame=\v!off] {\attachment[whatever]} \stoplocalsetups \setupfootertexts[archive with dummies: \setups{rl:attach:button}] \stopsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/rlxcache.rlx0000644000175000017500000000627711024176655024234 0ustar norbertnorbert /.eps /.pdf texmfstart pstopdf --convert --inputpath="" --outputpath="" ".eps" /.svg /.pdf texmfstart pstopdf --convert --inputpath="" --outputpath="" ".svg" /.svgz /.pdf texmfstart pstopdf --convert --inputpath="" --outputpath="" ".svgz" /.gif /.pdf texmfstart pstopdf --convert --inputpath="" --outputpath="" ".gif" /.tif /.pdf texmfstart pstopdf --convert --inputpath="" --outputpath="" ".tif" /.tiff /.pdf texmfstart pstopdf --convert --inputpath="" --outputpath="" ".tiff" context-2013.05.28.20130704/texmf-dist/tex/context/base/file-syn.mkvi0000644000175000017500000000351111754241457024321 0ustar norbertnorbert%D \module %D [ file=file-syn, % was core-fil, %D version=20110701, % 1997.11.15, %D title=\CONTEXT\ File Macros, %D subtitle=Module Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 File Macros / Synonyms} \unprotect \registerctxluafile{file-syn}{1.001} %D \macros %D {definefilesynonym,definefilefallback} %D %D One of the problems with loading files is that their names %D can depend on the interface language. We therefore need a %D method to define filesynonyms. The actual synonyms are %D defined elsewhere, but look like: %D %D \starttyping %D \definefilesynonym [chemic] [chemie] %D \definefilesynonym [einheit] [unit] %D \definefilesynonym [unit] [unit] %D \stoptyping %D %D So we can say in english: %D %D \starttyping %D \usemodules[pictex,chemic,unit] %D \stoptyping %D %D and in dutch: %D %D \starttyping %D \usemodules[pictex,chemie,unit] %D \stoptyping \unexpanded\def\definefilesynonym {\dodoubleempty \syst_files_define_synonym } \unexpanded\def\definefilefallback{\dodoubleargument\syst_files_define_fallback} % still used? \def\syst_files_define_synonym [#name][#realname]{\ctxcommand{definefilesynonym ("#name","#realname")}} \def\syst_files_define_fallback[#name][#alternatives]{\ctxcommand{definefilefallback("#name","#alternatives")}} %D \macros %D {truefilename} %D %D At the system level such a filename can be called upon by %D saying: %D %D \starttyping %D \truefilename{filename/filesynonym} %D \stoptyping %D %D The implementation shows that nesting is supported. \def\truefilename#1{\ctxcommand{truefilename("#1")}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-snp.lua0000644000175000017500000000302012130411274024105 0ustar norbertnorbertif not modules then modules = { } end modules ['node-snp'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if not nodes then nodes = { } -- also loaded in mtx-timing end local snapshots = { } nodes.snapshots = snapshots local nodeusage = nodes.pool and nodes.pool.usage local clock = os.gettimeofday or os.clock -- should go in environment local lasttime = clock() local samples = { } local parameters = { "cs_count", "dyn_used", "elapsed_time", "luabytecode_bytes", "luastate_bytes", "max_buf_stack", "obj_ptr", "pdf_mem_ptr", "pdf_mem_size", "pdf_os_cntr", -- "pool_ptr", -- obsolete "str_ptr", } function snapshots.takesample(comment) if nodeusage then local c = clock() local t = { elapsed_time = c - lasttime, node_memory = nodeusage(), comment = comment, } for i=1,#parameters do local parameter = parameters[i] local ps = status[parameter] if ps then t[parameter] = ps end end samples[#samples+1] = t lasttime = c end end function snapshots.getsamples() return samples -- one return value ! end function snapshots.resetsamples() samples = { } end function snapshots.getparameters() return parameters end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-r.tex0000644000175000017500000000717311754241457023130 0ustar norbertnorbert%D \module %D [ file=m-r, %D version=2006.06.06, %D title=\CONTEXT\ Modules, %D subtitle=R Support, %D author={Johan Sandblom \& Hans Hagen}, %D date=\currentdate, %D copyright={Johan Sandblom \& Hans Hagen}] %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 The following R-processor is a variation on Johan Sandblom's %D prototype. %D %D We can combine both variants in one macro definition. Also, we %D can minimize the number of runs by checking for a change. %D JS: The call to R has \type {-q} in order to prevent banner, %D \type {--save} to make sure it saves the workspace after the run, %D \type {--restore} to make sure it reads any workspace from a %D previous session. %D An easier and better solution is to use the buffering mechanisms: \def\Rbufferprefix{r-} \newcounter\nofRfiles \def\Rfile{\TEXbufferfile{\Rbufferprefix\nofRfiles}}% \def\startR {\doglobal\increment\nofRfiles \dostartbuffer[\Rbufferprefix\nofRfiles][startR][stopR]} \def\stopR {\doifmode{*\v!first}\runR \typefile{\Rfile.out}} \def\startRhidden {\doglobal\increment\nofRfiles \dostartbuffer[\Rbufferprefix\nofRfiles][startRhidden][stopRhidden]} \def\stopRhidden {\doifmode{*\v!first}\runR} \def\runR {\executesystemcommand{texmfstart --ifchanged=\Rfile\space --direct R CMD BATCH -q --save --restore \Rfile\space \Rfile.out}} \protect \doifnotmode{demo}{\endinput} % Johan's test file: \usemodule[r] \def\R{R} \setupcolors[state=start] \setuptyping [Rtype] [color=darkgreen] \starttext First a test of whether the workspace is persistent: bla \startR a <- "bla" b <- "blabla" ls() \stopR One \R run ends, another begins. \startR ls() \stopR Now follows a hidden \R run which cleans the R workspace \startRhidden rm(list=ls()) save.image() \stopRhidden What is in the workspace now? \startR ls() \stopR Then a small test of generating a graphic, in this case a pdf \startR ushape <- c(rexp(500000), 12-rexp(500000)) pdf("ushape.pdf") par(mfrow=c(1,2)) hist(ushape) plot(density(ushape), main="Density") dev.off() \stopR The graphic \type{ushape.pdf} can be included in the standard \CONTEXT\ way \startbuffer \placefigure{An ugly distribution}{\externalfigure[ushape]} \stopbuffer \typebuffer \getbuffer \startR x <- rnorm(900) y <- rexp(900) # test comment f <- gl(9,9,900) summary(aov(y~x+Error(f))) library(lattice) pdf("lattice.pdf") xyplot(y~x|f) dev.off() \stopR With \type{Sweave} lattice graphics calls must be enclosed in \type{print()} statements but that is not necessary here. \startbuffer \placefigure[here]{Lattice graphics}{\externalfigure[lattice]} \stopbuffer \typebuffer \getbuffer A test string with nasty characters. In \R, the result of a statement is not printed by default. Enclosing the statement in parentheses, however causes the parser to see only the value of the statement and applying the \type{print()} method. \startR (test <- ".*\\\\ [[{[{]{[{[{}\]\}=?!+%#|<|>@$") cat(test) \stopR A combination \startbuffer \placefigure{A combination of two previously used graphics}{ \startcombination[2*1] {\externalfigure[ushape][width=.4\textwidth]}{The first graphic, rescaled} {\externalfigure[lattice][width=.4\textwidth]}{The second graphic, rescaled}} \stopcombination \stopbuffer \typebuffer \getbuffer Testing a function definition. \startR a.df <- data.frame(a=1:2, b=rnorm(2)) a.df$a testfunction <- function(a=NULL, ...) { for(i in 1:length(a)) { gsub(a[[i]], "([a-r]|[A-R])", "bla")} print(a)} \stopR What is in the workspace now? \startR ls() \stopR \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-uc.mkii0000644000175000017500000015632411754241457024122 0ustar norbertnorbert%D \module %D [ file=enco-uc, %D version=2000.xx.xx, % and later %D title=\CONTEXT\ Encoding Macros, %D subtitle=Unicode (backwards mapping), %D author={Adam Lindsay \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 An alternative approach would be to misuse the utf vectors, but they %D don't carry enough info around. % todo : \defineucharacter hebrewAlef 5 "D0 \startencoding[uc] \definecharacter Agrave {\uchar0{192}} \definecharacter Aacute {\uchar0{193}} \definecharacter Acircumflex {\uchar0{194}} \definecharacter Atilde {\uchar0{195}} \definecharacter Adiaeresis {\uchar0{196}} \definecharacter Aring {\uchar0{197}} \definecharacter AEligature {\uchar0{198}} \definecharacter Ccedilla {\uchar0{199}} \definecharacter Egrave {\uchar0{200}} \definecharacter Eacute {\uchar0{201}} \definecharacter Ediaeresis {\uchar0{203}} \definecharacter Igrave {\uchar0{204}} \definecharacter Iacute {\uchar0{205}} \definecharacter Icircumflex {\uchar0{206}} \definecharacter Idiaeresis {\uchar0{207}} \definecharacter Eth {\uchar0{208}} \definecharacter Ntilde {\uchar0{209}} \definecharacter Ograve {\uchar0{210}} \definecharacter Oacute {\uchar0{211}} \definecharacter Ocircumflex {\uchar0{212}} \definecharacter Otilde {\uchar0{213}} \definecharacter Odiaeresis {\uchar0{214}} \definecharacter Ostroke {\uchar0{216}} \definecharacter Ugrave {\uchar0{217}} \definecharacter Uacute {\uchar0{218}} \definecharacter Uhungarumlaut {\uchar0{219}} \definecharacter Udiaeresis {\uchar0{220}} \definecharacter Yacute {\uchar0{221}} \definecharacter Thorn {\uchar0{222}} \definecharacter ssharp {\uchar0{223}} \definecharacter agrave {\uchar0{224}} \definecharacter aacute {\uchar0{225}} \definecharacter acircumflex {\uchar0{226}} \definecharacter atilde {\uchar0{227}} \definecharacter adiaeresis {\uchar0{228}} \definecharacter aring {\uchar0{229}} \definecharacter aeligature {\uchar0{230}} \definecharacter ccedilla {\uchar0{231}} \definecharacter egrave {\uchar0{232}} \definecharacter eacute {\uchar0{233}} \definecharacter ecircumflex {\uchar0{234}} \definecharacter ediaeresis {\uchar0{235}} \definecharacter igrave {\uchar0{236}} \definecharacter iacute {\uchar0{237}} \definecharacter icircumflex {\uchar0{238}} \definecharacter idiaeresis {\uchar0{239}} \definecharacter eth {\uchar0{240}} \definecharacter ntilde {\uchar0{241}} \definecharacter ograve {\uchar0{242}} \definecharacter oacute {\uchar0{243}} \definecharacter ocircumflex {\uchar0{244}} \definecharacter otilde {\uchar0{245}} \definecharacter odiaeresis {\uchar0{246}} \definecharacter ostroke {\uchar0{248}} \definecharacter ugrave {\uchar0{249}} \definecharacter uacute {\uchar0{250}} \definecharacter ucircumflex {\uchar0{251}} \definecharacter udiaeresis {\uchar0{252}} \definecharacter yacute {\uchar0{253}} \definecharacter thorn {\uchar0{254}} \definecharacter ydiaeresis {\uchar0{255}} \definecharacter Amacron {\uchar1{0}} \definecharacter amacron {\uchar1{1}} \definecharacter Abreve {\uchar1{2}} \definecharacter abreve {\uchar1{3}} \definecharacter Aogonek {\uchar1{4}} \definecharacter aogonek {\uchar1{5}} \definecharacter Cacute {\uchar1{6}} \definecharacter cacute {\uchar1{7}} \definecharacter Ccircumflex {\uchar1{8}} \definecharacter ccircumflex {\uchar1{9}} \definecharacter Cdotaccent {\uchar1{10}} \definecharacter cdotaccent {\uchar1{11}} \definecharacter Ccaron {\uchar1{12}} \definecharacter ccaron {\uchar1{13}} \definecharacter Dcaron {\uchar1{14}} \definecharacter dcaron {\uchar1{15}} \definecharacter Dstroke {\uchar1{16}} \definecharacter dstroke {\uchar1{17}} \definecharacter Emacron {\uchar1{18}} \definecharacter emacron {\uchar1{19}} \definecharacter Ebreve {\uchar1{20}} \definecharacter ebreve {\uchar1{21}} \definecharacter Edotaccent {\uchar1{22}} \definecharacter edotaccent {\uchar1{23}} \definecharacter Eogonek {\uchar1{24}} \definecharacter eogonek {\uchar1{25}} \definecharacter Ecaron {\uchar1{26}} \definecharacter ecaron {\uchar1{27}} \definecharacter Gcircumflex {\uchar1{28}} \definecharacter gcircumflex {\uchar1{29}} \definecharacter Gbreve {\uchar1{30}} \definecharacter gbreve {\uchar1{31}} \definecharacter Gdotaccent {\uchar1{32}} \definecharacter gdotaccent {\uchar1{33}} \definecharacter Gcommaaccent {\uchar1{34}} \definecharacter gcommaaccent {\uchar1{35}} \definecharacter Hcircumflex {\uchar1{36}} \definecharacter hcircumflex {\uchar1{37}} \definecharacter Hstroke {\uchar1{38}} \definecharacter hstroke {\uchar1{39}} \definecharacter Itilde {\uchar1{40}} \definecharacter itilde {\uchar1{41}} \definecharacter Imacron {\uchar1{42}} \definecharacter imacron {\uchar1{43}} \definecharacter Ibreve {\uchar1{44}} \definecharacter ibreve {\uchar1{45}} \definecharacter Iogonek {\uchar1{46}} \definecharacter iogonek {\uchar1{47}} \definecharacter Idotaccent {\uchar1{48}} \definecharacter dotlessi {\uchar1{49}} \definecharacter IJligature {\uchar1{50}} \definecharacter ijligature {\uchar1{51}} \definecharacter Jcircumflex {\uchar1{52}} \definecharacter jcircumflex {\uchar1{53}} \definecharacter Kcommaaccent {\uchar1{54}} \definecharacter kcommaaccent {\uchar1{55}} \definecharacter kkra {\uchar1{56}} \definecharacter Lacute {\uchar1{57}} \definecharacter lacute {\uchar1{58}} \definecharacter Lcommaaccent {\uchar1{59}} \definecharacter lcommaaccent {\uchar1{60}} \definecharacter Lcaron {\uchar1{61}} \definecharacter lcaron {\uchar1{62}} \definecharacter Ldotmiddle {\uchar1{63}} \definecharacter ldotmiddle {\uchar1{64}} \definecharacter Lstroke {\uchar1{65}} \definecharacter lstroke {\uchar1{66}} \definecharacter Nacute {\uchar1{67}} \definecharacter nacute {\uchar1{68}} \definecharacter Ncommaaccent {\uchar1{69}} \definecharacter ncommaaccent {\uchar1{70}} \definecharacter Ncaron {\uchar1{71}} \definecharacter ncaron {\uchar1{72}} \definecharacter napostrophe {\uchar1{73}} \definecharacter Neng {\uchar1{74}} \definecharacter neng {\uchar1{75}} \definecharacter Omacron {\uchar1{76}} \definecharacter omacron {\uchar1{77}} \definecharacter Obreve {\uchar1{78}} \definecharacter obreve {\uchar1{79}} \definecharacter Ohungarumlaut {\uchar1{80}} \definecharacter ohungarumlaut {\uchar1{81}} \definecharacter OEligature {\uchar1{82}} \definecharacter oeligature {\uchar1{83}} \definecharacter Racute {\uchar1{84}} \definecharacter racute {\uchar1{85}} \definecharacter Rcommaaccent {\uchar1{86}} \definecharacter rcommaaccent {\uchar1{87}} \definecharacter Rcaron {\uchar1{88}} \definecharacter rcaron {\uchar1{89}} \definecharacter Sacute {\uchar1{90}} \definecharacter sacute {\uchar1{91}} \definecharacter Scircumflex {\uchar1{92}} \definecharacter scircumflex {\uchar1{93}} \definecharacter Scedilla {\uchar1{94}} \definecharacter scedilla {\uchar1{95}} \definecharacter Scaron {\uchar1{96}} \definecharacter scaron {\uchar1{97}} \definecharacter Tcedilla {\uchar1{98}} \definecharacter tcedilla {\uchar1{99}} \definecharacter Tcaron {\uchar1{100}} \definecharacter tcaron {\uchar1{101}} \definecharacter Tstroke {\uchar1{102}} \definecharacter tstroke {\uchar1{103}} \definecharacter Utilde {\uchar1{104}} \definecharacter utilde {\uchar1{105}} \definecharacter Umacron {\uchar1{106}} \definecharacter umacron {\uchar1{107}} \definecharacter Ubreve {\uchar1{108}} \definecharacter ubreve {\uchar1{109}} \definecharacter Uring {\uchar1{110}} \definecharacter uring {\uchar1{111}} \definecharacter Uhungarumlaut {\uchar1{112}} \definecharacter uhungarumlaut {\uchar1{113}} \definecharacter Uogonek {\uchar1{114}} \definecharacter uogonek {\uchar1{115}} \definecharacter Wcircumflex {\uchar1{116}} \definecharacter wcircumflex {\uchar1{117}} \definecharacter Ycircumflex {\uchar1{118}} \definecharacter ycircumflex {\uchar1{119}} \definecharacter Ydiaeresis {\uchar1{120}} \definecharacter Zacute {\uchar1{121}} \definecharacter zacute {\uchar1{122}} \definecharacter Zdotaccent {\uchar1{123}} \definecharacter zdotaccent {\uchar1{124}} \definecharacter Zcaron {\uchar1{125}} \definecharacter zcaron {\uchar1{126}} \definecharacter slong {\uchar1{127}} \stopencoding \startencoding[uc] \definecharacter endash {\uchar{32}{19}} \definecharacter emdash {\uchar{32}{20}} \definecharacter quoteleft {\uchar{32}{24}} \definecharacter quoteright {\uchar{32}{25}} \definecharacter quotesinglebase {\uchar{32}{26}} \definecharacter quotedblleft {\uchar{32}{28}} \definecharacter quotedblright {\uchar{32}{29}} \definecharacter quotedblbase {\uchar{32}{30}} \definecharacter leftguillemot {\uchar0{171}} \definecharacter rightguillemot {\uchar0{187}} \definecharacter guilsingleleft {\uchar{32}{57}} \definecharacter guilsingleright {\uchar{32}{58}} \stopencoding %D Adam Lindsay's additions \startencoding[uc] \definecharacter exclamdown {\uchar0{161}} \definecharacter textcent {\uchar0{162}} \definecharacter textsterling {\uchar0{163}} \definecharacter textcurrency {\uchar0{164}} \definecharacter textyen {\uchar0{165}} \definecharacter textbrokenbar {\uchar0{166}} \definecharacter sectionmark {\uchar0{167}} \definecharacter textdiaresis {\uchar0{168}} \definecharacter copyright {\uchar0{169}} \definecharacter textlognot {\uchar0{172}} \definecharacter softhyphen {\uchar0{173}} \definecharacter registered {\uchar0{174}} \definecharacter textmacron {\uchar0{175}} \definecharacter textdegree {\uchar0{176}} \definecharacter textpm {\uchar0{177}} \definecharacter twosuperior {\uchar0{178}} \definecharacter threesuperior {\uchar0{179}} \definecharacter textacute {\uchar0{180}} \definecharacter textmu {\uchar0{181}} \definecharacter paragraphmark {\uchar0{182}} \definecharacter periodcentered {\uchar0{183}} \definecharacter textcedilla {\uchar0{184}} \definecharacter onesuperior {\uchar0{185}} \definecharacter textgrave {\uchar3{0}} \definecharacter textacute {\uchar3{1}} \definecharacter textcircumflex {\uchar3{2}} \definecharacter texttilde {\uchar3{3}} \definecharacter textmacron {\uchar3{4}} \definecharacter textbreve {\uchar3{6}} \definecharacter textdotaccent {\uchar3{7}} \definecharacter textdiaeresis {\uchar3{8}} \definecharacter textring {\uchar3{10}} \definecharacter texthungarumlaut {\uchar3{11}} \definecharacter textcaron {\uchar3{12}} \definecharacter textogonek {\uchar3{40}} \definecharacter percent {\uchar0{37}} \definecharacter textunderscore {\uchar0{95}} \definecharacter ordfeminine {\uchar0{170}} \definecharacter ordmasculine {\uchar0{186}} \definecharacter onequarter {\uchar0{188}} \definecharacter onehalf {\uchar0{189}} \definecharacter threequarter {\uchar0{190}} \definecharacter questiondown {\uchar0{191}} \definecharacter textmultiply {\uchar0{215}} \definecharacter textdiv {\uchar0{247}} \definecharacter textminus {\uchar{32}{18}} \definecharacter textdag {\uchar{32}{32}} \definecharacter textddag {\uchar{32}{33}} \definecharacter textbullet {\uchar{32}{34}} \definecharacter textellipsis {\uchar{32}{38}} \definecharacter perthousand {\uchar{32}{48}} %new: \definecharacter Scommaaccent {\uchar2{24}} \definecharacter scommaaccent {\uchar2{25}} \definecharacter Tcommaaccent {\uchar2{26}} \definecharacter tcommaaccent {\uchar2{27}} \stopencoding %D Mojca's and Taco's additions: \startencoding[uc] \definecharacter textasciicircum {\uchar{0}{94}} % 5e \definecharacter textgrave {\uchar{0}{96}} % 60 \definecharacter textdiaeresis {\uchar{0}{168}} % a8 %definecharacter textmacron {\uchar{0}{175}} % af %definecharacter textacute {\uchar{0}{180}} % b4 %definecharacter textcedilla {\uchar{0}{184}} % b8 \definecharacter textcircumflex {\uchar{2}{198}} % c6 \definecharacter textcaron {\uchar{2}{199}} % c7 \definecharacter textbreve {\uchar{2}{216}} % d8 \definecharacter textdotaccent {\uchar{2}{217}} % d9 \definecharacter textring {\uchar{2}{218}} % da \definecharacter textogonek {\uchar{2}{219}} % db \definecharacter texttilde {\uchar{2}{220}} % dc \definecharacter texthungarumlaut {\uchar{2}{221}} % dd \stopencoding %D Vietnamese: \startencoding[uc] \definecharacter Ohorn {\uchar1{160}} \definecharacter ohorn {\uchar1{161}} \definecharacter Uhorn {\uchar1{175}} \definecharacter uhorn {\uchar1{176}} \definecharacter Yhook {\uchar{30}{246}} \definecharacter yhook {\uchar{30}{247}} \definecharacter Ydotbelow {\uchar{30}{244}} \definecharacter ydotbelow {\uchar{30}{245}} \definecharacter Ahook {\uchar{30}{162}} \definecharacter Adotbelow {\uchar{30}{160}} \definecharacter Acircumflexgrave {\uchar{30}{166}} \definecharacter Acircumflexacute {\uchar{30}{164}} \definecharacter Acircumflextilde {\uchar{30}{170}} \definecharacter Acircumflexhook {\uchar{30}{168}} \definecharacter Acircumflexdotbelow {\uchar{30}{172}} \definecharacter Abrevegrave {\uchar{30}{176}} \definecharacter Abreveacute {\uchar{30}{174}} \definecharacter Abrevetilde {\uchar{30}{180}} \definecharacter Abrevehook {\uchar{30}{178}} \definecharacter Abrevedotbelow {\uchar{30}{182}} \definecharacter Ehook {\uchar{30}{186}} \definecharacter Edotbelow {\uchar{30}{184}} \definecharacter Ecircumflexgrave {\uchar{30}{192}} \definecharacter Ecircumflexacute {\uchar{30}{190}} \definecharacter Ecircumflextilde {\uchar{30}{196}} \definecharacter Ecircumflexhook {\uchar{30}{194}} \definecharacter Ecircumflexdotbelow {\uchar{30}{198}} \definecharacter Ihook {\uchar{30}{200}} \definecharacter ahook {\uchar{30}{163}} \definecharacter adotbelow {\uchar{30}{161}} \definecharacter acircumflexgrave {\uchar{30}{167}} \definecharacter acircumflexacute {\uchar{30}{165}} \definecharacter acircumflextilde {\uchar{30}{171}} \definecharacter acircumflexhook {\uchar{30}{169}} \definecharacter acircumflexdotbelow {\uchar{30}{173}} \definecharacter abrevegrave {\uchar{30}{177}} \definecharacter abreveacute {\uchar{30}{175}} \definecharacter abrevetilde {\uchar{30}{181}} \definecharacter abrevehook {\uchar{30}{179}} \definecharacter abrevedotbelow {\uchar{30}{183}} \definecharacter ehook {\uchar{30}{187}} \definecharacter edotbelow {\uchar{30}{185}} \definecharacter ecircumflexgrave {\uchar{30}{193}} \definecharacter ecircumflexacute {\uchar{30}{191}} \definecharacter ecircumflextilde {\uchar{30}{197}} \definecharacter ecircumflexhook {\uchar{30}{195}} \definecharacter ecircumflexdotbelow {\uchar{30}{199}} \definecharacter ihook {\uchar{30}{201}} \definecharacter Idotbelow {\uchar{30}{202}} \definecharacter Ohook {\uchar{30}{206}} \definecharacter Odotbelow {\uchar{30}{204}} \definecharacter Ocircumflexgrave {\uchar{30}{210}} \definecharacter Ocircumflexacute {\uchar{30}{208}} \definecharacter Ocircumflextilde {\uchar{30}{214}} \definecharacter Ocircumflexhook {\uchar{30}{212}} \definecharacter Ocircumflexdotbelow {\uchar{30}{216}} \definecharacter Ohorngrave {\uchar{30}{220}} \definecharacter Ohornacute {\uchar{30}{218}} \definecharacter Ohorntilde {\uchar{30}{224}} \definecharacter Ohornhook {\uchar{30}{222}} \definecharacter Ohorndotbelow {\uchar{30}{226}} \definecharacter Uhook {\uchar{30}{230}} \definecharacter Udotbelow {\uchar{30}{228}} \definecharacter Uhorngrave {\uchar{30}{234}} \definecharacter Uhornacute {\uchar{30}{232}} \definecharacter Uhorntilde {\uchar{30}{238}} \definecharacter Uhornhook {\uchar{30}{236}} \definecharacter Uhorndotbelow {\uchar{30}{240}} \definecharacter Ytilde {\uchar{30}{248}} \definecharacter idotbelow {\uchar{30}{203}} \definecharacter ohook {\uchar{30}{207}} \definecharacter odotbelow {\uchar{30}{205}} \definecharacter ocircumflexgrave {\uchar{30}{211}} \definecharacter ocircumflexacute {\uchar{30}{209}} \definecharacter ocircumflextilde {\uchar{30}{215}} \definecharacter ocircumflexhook {\uchar{30}{213}} \definecharacter ocircumflexdotbelow {\uchar{30}{217}} \definecharacter ohorngrave {\uchar{30}{221}} \definecharacter ohornacute {\uchar{30}{219}} \definecharacter ohorntilde {\uchar{30}{225}} \definecharacter ohornhook {\uchar{30}{223}} \definecharacter ohorndotbelow {\uchar{30}{227}} \definecharacter uhook {\uchar{30}{231}} \definecharacter udotbelow {\uchar{30}{229}} \definecharacter uhorngrave {\uchar{30}{235}} \definecharacter uhornacute {\uchar{30}{233}} \definecharacter uhorntilde {\uchar{30}{239}} \definecharacter uhornhook {\uchar{30}{237}} \definecharacter uhorndotbelow {\uchar{30}{241}} \definecharacter ytilde {\uchar{30}{249}} \definecharacter Etilde {\uchar{30}{188}} \definecharacter etilde {\uchar{30}{189}} \definecharacter Ygrave {\uchar{30}{242}} \definecharacter ygrave {\uchar{30}{243}} \stopencoding % Greek: \startencoding[uc] \definecharacter greekAlphatonos {\uchar3{134}} \definecharacter greekEpsilontonos {\uchar3{136}} \definecharacter greekEtatonos {\uchar3{137}} \definecharacter greekIotatonos {\uchar3{138}} \definecharacter greekOmicrontonos {\uchar3{140}} \definecharacter greekUpsilontonos {\uchar3{142}} \definecharacter greekOmegatonos {\uchar3{143}} \definecharacter greekiotadialytikatonos {\uchar3{144}} \definecharacter greekAlpha {\uchar3{145}} \definecharacter greekBeta {\uchar3{146}} \definecharacter greekGamma {\uchar3{147}} \definecharacter greekDelta {\uchar3{148}} \definecharacter greekEpsilon {\uchar3{149}} \definecharacter greekZeta {\uchar3{150}} \definecharacter greekEta {\uchar3{151}} \definecharacter greekTheta {\uchar3{152}} \definecharacter greekIota {\uchar3{153}} \definecharacter greekKappa {\uchar3{154}} \definecharacter greekLambda {\uchar3{155}} \definecharacter greekMu {\uchar3{156}} \definecharacter greekNu {\uchar3{157}} \definecharacter greekXi {\uchar3{158}} \definecharacter greekOmicron {\uchar3{159}} \definecharacter greekPi {\uchar3{160}} \definecharacter greekRho {\uchar3{161}} \definecharacter greekSigma {\uchar3{163}} \definecharacter greekTau {\uchar3{164}} \definecharacter greekUpsilon {\uchar3{165}} \definecharacter greekPhi {\uchar3{166}} \definecharacter greekChi {\uchar3{167}} \definecharacter greekPsi {\uchar3{168}} \definecharacter greekOmega {\uchar3{169}} \definecharacter greekalpha {\uchar3{177}} \definecharacter greekbeta {\uchar3{178}} \definecharacter greekgamma {\uchar3{179}} \definecharacter greekdelta {\uchar3{180}} \definecharacter greekepsilon {\uchar3{181}} \definecharacter greekzeta {\uchar3{182}} \definecharacter greeketa {\uchar3{183}} \definecharacter greektheta {\uchar3{184}} \definecharacter greekiota {\uchar3{185}} \definecharacter greekkappa {\uchar3{186}} \definecharacter greeklambda {\uchar3{187}} \definecharacter greekmu {\uchar3{188}} \definecharacter greeknu {\uchar3{189}} \definecharacter greekxi {\uchar3{190}} \definecharacter greekomicron {\uchar3{191}} \definecharacter greekpi {\uchar3{192}} \definecharacter greekrho {\uchar3{193}} \definecharacter greekfinalsigma {\uchar3{194}} \definecharacter greeksigma {\uchar3{195}} \definecharacter greektau {\uchar3{196}} \definecharacter greekupsilon {\uchar3{197}} \definecharacter greekphi {\uchar3{198}} \definecharacter greekchi {\uchar3{199}} \definecharacter greekpsi {\uchar3{200}} \definecharacter greekomega {\uchar3{201}} \definecharacter greekiotadialytika {\uchar3{202}} \definecharacter greekupsilondialytika {\uchar3{203}} \definecharacter greekomicrontonos {\uchar3{204}} \definecharacter greekupsilontonos {\uchar3{205}} \definecharacter greekomegatonos {\uchar3{206}} \definecharacter greekIotadialytika {\uchar3{170}} \definecharacter greekUpsilondialytika {\uchar3{171}} \definecharacter greekalphatonos {\uchar3{172}} \definecharacter greekepsilontonos {\uchar3{173}} \definecharacter greeketatonos {\uchar3{174}} \definecharacter greekiotatonos {\uchar3{175}} \definecharacter greekupsilondialytikatonos {\uchar3{176}} % new: \definecharacter greekthetaalt {\uchar3{209}} \definecharacter greekphialt {\uchar3{213}} \definecharacter greekpialt {\uchar3{214}} \definecharacter greekrhoalt {\uchar3{241}} \definecharacter greekepsilonalt {\uchar3{245}} \stopencoding % Cyrillic: \startencoding[uc] \definecharacter cyrillicA {\uchar4{16}} \definecharacter cyrillicB {\uchar4{17}} \definecharacter cyrillicV {\uchar4{18}} \definecharacter cyrillicG {\uchar4{19}} \definecharacter cyrillicD {\uchar4{20}} \definecharacter cyrillicE {\uchar4{21}} \definecharacter cyrillicZH {\uchar4{22}} \definecharacter cyrillicZ {\uchar4{23}} \definecharacter cyrillicI {\uchar4{24}} \definecharacter cyrillicISHRT {\uchar4{25}} \definecharacter cyrillicK {\uchar4{26}} \definecharacter cyrillicL {\uchar4{27}} \definecharacter cyrillicM {\uchar4{28}} \definecharacter cyrillicN {\uchar4{29}} \definecharacter cyrillicO {\uchar4{30}} \definecharacter cyrillicP {\uchar4{31}} \definecharacter cyrillicR {\uchar4{32}} \definecharacter cyrillicS {\uchar4{33}} \definecharacter cyrillicT {\uchar4{34}} \definecharacter cyrillicU {\uchar4{35}} \definecharacter cyrillicF {\uchar4{36}} \definecharacter cyrillicH {\uchar4{37}} \definecharacter cyrillicC {\uchar4{38}} \definecharacter cyrillicCH {\uchar4{39}} \definecharacter cyrillicSH {\uchar4{40}} \definecharacter cyrillicSHCH {\uchar4{41}} \definecharacter cyrillicHRDSN {\uchar4{42}} \definecharacter cyrillicERY {\uchar4{43}} \definecharacter cyrillicSFTSN {\uchar4{44}} \definecharacter cyrillicEREV {\uchar4{45}} \definecharacter cyrillicYU {\uchar4{46}} \definecharacter cyrillicYA {\uchar4{47}} \definecharacter cyrillica {\uchar4{48}} \definecharacter cyrillicb {\uchar4{49}} \definecharacter cyrillicv {\uchar4{50}} \definecharacter cyrillicg {\uchar4{51}} \definecharacter cyrillicd {\uchar4{52}} \definecharacter cyrillice {\uchar4{53}} \definecharacter cyrilliczh {\uchar4{54}} \definecharacter cyrillicz {\uchar4{55}} \definecharacter cyrillici {\uchar4{56}} \definecharacter cyrillicishrt {\uchar4{57}} \definecharacter cyrillick {\uchar4{58}} \definecharacter cyrillicl {\uchar4{59}} \definecharacter cyrillicm {\uchar4{60}} \definecharacter cyrillicn {\uchar4{61}} \definecharacter cyrillico {\uchar4{62}} \definecharacter cyrillicp {\uchar4{63}} \definecharacter cyrillicr {\uchar4{64}} \definecharacter cyrillics {\uchar4{65}} \definecharacter cyrillict {\uchar4{66}} \definecharacter cyrillicu {\uchar4{67}} \definecharacter cyrillicf {\uchar4{68}} \definecharacter cyrillich {\uchar4{69}} \definecharacter cyrillicc {\uchar4{70}} \definecharacter cyrillicch {\uchar4{71}} \definecharacter cyrillicsh {\uchar4{72}} \definecharacter cyrillicshch {\uchar4{73}} \definecharacter cyrillichrdsn {\uchar4{74}} \definecharacter cyrillicery {\uchar4{75}} \definecharacter cyrillicsftsn {\uchar4{76}} \definecharacter cyrillicerev {\uchar4{77}} \definecharacter cyrillicyu {\uchar4{78}} \definecharacter cyrillicya {\uchar4{79}} %D I tried to figure out what these were, but the unicode %D tables suggested they were the same as cyrillici, which was %D already defined! So, a temporary definition: % \def\cyrillicII{\cyrillicI} % \def\cyrillicii{\cyrillici} %D a guess derived from looking at enco-cyr suggests that this is %D identical to the Roman I/i pair. To me, that sounds like %D CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I in the UC tables! \definecharacter cyrillicII {\uchar4{6}} \definecharacter cyrillicii {\uchar4{86}} %D Guessing that tlir6a corresponds with t2a encoding as advertised, %D here are some more, cos I had some spare time: (AL) \definecharacter cyrillicDJE {\uchar4{2}} \definecharacter cyrillicTSHE {\uchar4{11}} %definecharacter cyrillicSHHA 132 %definecharacter cyrillicZHDSC 133 \definecharacter cyrillicZDSC {\uchar4{152}} \definecharacter cyrillicLJE {\uchar4{9}} \definecharacter cyrillicYI {\uchar4{7}} \definecharacter cyrillicAE {\uchar4{212}} %definecharacter cyrillicNDSC 141 %definecharacter cyrillicNG 142 \definecharacter cyrillicDZE {\uchar4{5}} %definecharacter cyrillicOTLD 144 \definecharacter cyrillicSDSC {\uchar4{170}} \definecharacter cyrillicUSHRT {\uchar4{14}} %definecharacter cyrillicY 147 %definecharacter cyrillicYHCRS 148 %definecharacter cyrillicHDSC 149 \definecharacter cyrillicDZHE {\uchar4{15}} \definecharacter cyrillicIE {\uchar4{4}} \definecharacter cyrillicNJE {\uchar4{10}} \definecharacter cyrillicYO {\uchar4{1}} \definecharacter cyrillicdje {\uchar4{82}} \definecharacter cyrillictshe {\uchar4{91}} %definecharacter cyrillicshha 164 %definecharacter cyrilliczhdsc 165 \definecharacter cyrilliczdsc {\uchar4{153}} \definecharacter cyrilliclje {\uchar4{89}} \definecharacter cyrillicyi {\uchar4{87}} \definecharacter cyrillicae {\uchar4{213}} %definecharacter cyrillicndsc 173 %definecharacter cyrillicng 174 \definecharacter cyrillicdze {\uchar4{85}} %definecharacter cyrillicotld 176 \definecharacter cyrillicsdsc {\uchar4{171}} \definecharacter cyrillicushrt {\uchar4{94}} %definecharacter cyrillicy 179 %definecharacter cyrillicyhcrs 180 %definecharacter cyrillichdsc 181 \definecharacter cyrillicdzhe {\uchar4{95}} \definecharacter cyrillicie {\uchar4{84}} \definecharacter cyrillicnje {\uchar4{90}} \definecharacter cyrillicyo {\uchar4{81}} % is there overlap with the above definitions \definecharacter cyrillicEgrave {\uchar4{0}} \definecharacter cyrillicGJE {\uchar4{3}} \definecharacter cyrillicJE {\uchar4{8}} \definecharacter cyrillicKJE {\uchar4{12}} \definecharacter cyrillicIgrave {\uchar4{13}} \definecharacter cyrillicegrave {\uchar4{80}} \definecharacter cyrillicgje {\uchar4{83}} \definecharacter cyrillicje {\uchar4{88}} \definecharacter cyrillickje {\uchar4{92}} \definecharacter cyrillicigrave {\uchar4{93}} \definecharacter cyrillicOMEGA {\uchar4{96}} \definecharacter cyrillicomega {\uchar4{97}} \definecharacter cyrillicYAT {\uchar4{98}} \definecharacter cyrillicyat {\uchar4{99}} \definecharacter cyrillicEiotified {\uchar4{100}} \definecharacter cyrilliceiotified {\uchar4{101}} \definecharacter cyrillicLITTLEYUS {\uchar4{102}} \definecharacter cyrilliclittleyus {\uchar4{103}} \definecharacter cyrillicLITTLEYUSiotified {\uchar4{104}} \definecharacter cyrilliclittleyusiotified {\uchar4{105}} \definecharacter cyrillicBIGYUS {\uchar4{106}} \definecharacter cyrillicbigyus {\uchar4{107}} \definecharacter cyrillicBIGYUSiotified {\uchar4{108}} \definecharacter cyrillicbigyusiotified {\uchar4{109}} \definecharacter cyrillicKSI {\uchar4{110}} \definecharacter cyrillicksi {\uchar4{111}} \definecharacter cyrillicPSI {\uchar4{112}} \definecharacter cyrillicpsi {\uchar4{113}} \definecharacter cyrillicFITA {\uchar4{114}} \definecharacter cyrillicfita {\uchar4{115}} \definecharacter cyrillicIZHITSA {\uchar4{116}} \definecharacter cyrillicizhitsa {\uchar4{117}} \definecharacter cyrillicIZHITSAdoublegrave {\uchar4{118}} \definecharacter cyrillicizhitsadoublegrave {\uchar4{119}} \definecharacter cyrillicUK {\uchar4{120}} \definecharacter cyrillicuk {\uchar4{121}} \definecharacter cyrillicOMEGAround {\uchar4{122}} \definecharacter cyrillicomegaround {\uchar4{123}} \definecharacter cyrillicOMEGAtitlo {\uchar4{124}} \definecharacter cyrillicomegatitlo {\uchar4{125}} \definecharacter cyrillicOT {\uchar4{126}} \definecharacter cyrillicot {\uchar4{127}} \definecharacter cyrillicKOPPA {\uchar4{128}} \definecharacter cyrillickoppa {\uchar4{129}} \definecharacter cyrillicTITLO {\uchar4{131}} \definecharacter cyrillicPALATALIZATION {\uchar4{132}} \definecharacter cyrillicDASIAPNEUMATA {\uchar4{133}} \definecharacter cyrillicPSILIPNEUMATA {\uchar4{134}} \definecharacter cyrillicISHRTtail {\uchar4{138}} \definecharacter cyrillicishrttail {\uchar4{139}} \definecharacter cyrillicSEMISOFT {\uchar4{140}} \definecharacter cyrillicsemisoft {\uchar4{141}} \definecharacter cyrillicERtick {\uchar4{142}} \definecharacter cyrillicertick {\uchar4{143}} \definecharacter cyrillicGHEupturn {\uchar4{144}} \definecharacter cyrillicgheupturn {\uchar4{145}} \definecharacter cyrillicGHEstroke {\uchar4{146}} \definecharacter cyrillicghestroke {\uchar4{147}} \definecharacter cyrillicGHEmidhook {\uchar4{148}} \definecharacter cyrillicghemidhook {\uchar4{149}} \definecharacter cyrillicZHEdescender {\uchar4{150}} \definecharacter cyrilliczhedescender {\uchar4{151}} \definecharacter cyrillicZDSC {\uchar4{152}} \definecharacter cyrilliczdsc {\uchar4{153}} \definecharacter cyrillicKADC {\uchar4{154}} \definecharacter cyrillickadc {\uchar4{155}} \definecharacter cyrillicKAvertstroke {\uchar4{156}} \definecharacter cyrillickavertstroke {\uchar4{157}} \definecharacter cyrillicKAstroke {\uchar4{158}} \definecharacter cyrillickastroke {\uchar4{159}} \definecharacter cyrillicKAbashkir {\uchar4{160}} \definecharacter cyrillickabashkir {\uchar4{161}} \definecharacter cyrillicENDC {\uchar4{162}} \definecharacter cyrillicendc {\uchar4{163}} \definecharacter cyrillicENGHE {\uchar4{164}} \definecharacter cyrillicenghe {\uchar4{165}} \definecharacter cyrillicPEmidhook {\uchar4{166}} \definecharacter cyrillicpemidhook {\uchar4{167}} \definecharacter cyrillicHA {\uchar4{168}} \definecharacter cyrillicha {\uchar4{169}} %definecharacter cyrillicSDSC {\uchar4{170}} % already defined %definecharacter cyrilliccdsc {\uchar4{171}} % already defined \definecharacter cyrillicTEDC {\uchar4{172}} \definecharacter cyrillictedc {\uchar4{173}} \definecharacter cyrillicYstr {\uchar4{174}} \definecharacter cyrillicystr {\uchar4{175}} \definecharacter cyrillicYstrstroke {\uchar4{176}} \definecharacter cyrillicystrstroke {\uchar4{177}} \definecharacter cyrillicHADC {\uchar4{178}} \definecharacter cyrillichadc {\uchar4{179}} \definecharacter cyrillicTETSE {\uchar4{180}} \definecharacter cyrillictetse {\uchar4{181}} \definecharacter cyrillicCHEDC {\uchar4{182}} \definecharacter cyrillicchedc {\uchar4{183}} \definecharacter cyrillicCHEvertstroke {\uchar4{184}} \definecharacter cyrillicchevertstroke {\uchar4{185}} \definecharacter cyrillicSHHA {\uchar4{186}} \definecharacter cyrillicshha {\uchar4{187}} \definecharacter cyrillicCHEabkhasian {\uchar4{188}} \definecharacter cyrilliccheabkhasian {\uchar4{189}} \definecharacter cyrillicCHEDCabkhasian {\uchar4{190}} \definecharacter cyrillicchedcabkhasian {\uchar4{191}} \definecharacter cyrillicPALOCHKA {\uchar4{192}} \definecharacter cyrillicZHEbreve {\uchar4{193}} \definecharacter cyrilliczhebreve {\uchar4{194}} \definecharacter cyrillicKAhook {\uchar4{195}} \definecharacter cyrillickahook {\uchar4{196}} \definecharacter cyrillicELtail {\uchar4{197}} \definecharacter cyrilliceltail {\uchar4{198}} \definecharacter cyrillicENhook {\uchar4{199}} \definecharacter cyrillicenhook {\uchar4{200}} \definecharacter cyrillicENtail {\uchar4{201}} \definecharacter cyrillicentail {\uchar4{202}} \definecharacter cyrillicCHEkhakassian {\uchar4{203}} \definecharacter cyrillicchekhakassian {\uchar4{204}} \definecharacter cyrillicEMtail {\uchar4{205}} \definecharacter cyrillicemtail {\uchar4{206}} \definecharacter cyrillicAbreve {\uchar4{208}} \definecharacter cyrillicabreve {\uchar4{209}} \definecharacter cyrillicAdiaeresis {\uchar4{210}} \definecharacter cyrillicadiaeresis {\uchar4{211}} %definecharacter cyrillicAE {\uchar4{212}} % already defined %definecharacter cyrillicae {\uchar4{213}} % already defined \definecharacter cyrillicEbreve {\uchar4{214}} \definecharacter cyrillicebreve {\uchar4{215}} \definecharacter cyrillicSCHWA {\uchar4{216}} \definecharacter cyrillicschwa {\uchar4{217}} \definecharacter cyrillicSCHWAdiaeresis {\uchar4{218}} \definecharacter cyrillicschwadiaeresis {\uchar4{219}} \definecharacter cyrillicZHEdiaeresis {\uchar4{220}} \definecharacter cyrilliczhediaeresis {\uchar4{221}} \definecharacter cyrillicZEdiaeresis {\uchar4{222}} \definecharacter cyrilliczediaeresis {\uchar4{223}} \definecharacter cyrillicDZEabkhasian {\uchar4{224}} \definecharacter cyrillicdzeabkhasian {\uchar4{225}} \definecharacter cyrillicImacron {\uchar4{226}} \definecharacter cyrillicimacron {\uchar4{227}} \definecharacter cyrillicIdiaeresis {\uchar4{228}} \definecharacter cyrillicidiaeresis {\uchar4{229}} \definecharacter cyrillicOdiaeresis {\uchar4{230}} \definecharacter cyrillicodiaeresis {\uchar4{231}} \definecharacter cyrillicObarred {\uchar4{232}} \definecharacter cyrillicobarred {\uchar4{233}} \definecharacter cyrillicObarreddiaeresis {\uchar4{234}} \definecharacter cyrillicobarreddiaeresis {\uchar4{235}} \definecharacter cyrillicEdiaeresis {\uchar4{236}} \definecharacter cyrillicediaeresis {\uchar4{237}} \definecharacter cyrillicUmacron {\uchar4{238}} \definecharacter cyrillicumacron {\uchar4{239}} \definecharacter cyrillicUdiaeresis {\uchar4{240}} \definecharacter cyrillicudiaeresis {\uchar4{241}} \definecharacter cyrillicUdoubleacute {\uchar4{242}} \definecharacter cyrillicudoubleacute {\uchar4{243}} \definecharacter cyrillicCHEdiaeresis {\uchar4{244}} \definecharacter cyrillicchediaeresis {\uchar4{245}} \definecharacter cyrillicYERUdiaeresis {\uchar4{248}} \definecharacter cyrillicyerudiaeresis {\uchar4{249}} \stopencoding % Greek Extended \startencoding[uc] \definecharacter greekalphapsili {\uchar{31}{0}} \definecharacter greekalphadasia {\uchar{31}{1}} \definecharacter greekalphapsilivaria {\uchar{31}{2}} \definecharacter greekalphadasiavaria {\uchar{31}{3}} \definecharacter greekalphapsilitonos {\uchar{31}{4}} \definecharacter greekalphadasiatonos {\uchar{31}{5}} \definecharacter greekalphapsiliperispomeni {\uchar{31}{6}} \definecharacter greekalphadasiaperispomeni {\uchar{31}{7}} \definecharacter greekAlphapsili {\uchar{31}{8}} \definecharacter greekAlphadasia {\uchar{31}{9}} \definecharacter greekAlphapsilivaria {\uchar{31}{10}} \definecharacter greekAlphadasiavaria {\uchar{31}{11}} \definecharacter greekAlphapsilitonos {\uchar{31}{12}} \definecharacter greekAlphadasiatonos {\uchar{31}{13}} \definecharacter greekAlphapsiliperispomeni {\uchar{31}{14}} \definecharacter greekAlphadasiaperispomeni {\uchar{31}{15}} \definecharacter greekepsilonpsili {\uchar{31}{16}} % 1f10 \definecharacter greekepsilondasia {\uchar{31}{17}} \definecharacter greekepsilonpsilivaria {\uchar{31}{18}} \definecharacter greekepsilondasiavaria {\uchar{31}{19}} \definecharacter greekepsilonpsilitonos {\uchar{31}{20}} \definecharacter greekepsilondasiatonos {\uchar{31}{21}} \definecharacter greekEpsilonpsili {\uchar{31}{24}} \definecharacter greekEpsilondasia {\uchar{31}{25}} \definecharacter greekEpsilonpsilivaria {\uchar{31}{26}} \definecharacter greekEpsilondasiavaria {\uchar{31}{27}} \definecharacter greekEpsilonpsilitonos {\uchar{31}{28}} \definecharacter greekEpsilondasiatonos {\uchar{31}{29}} \definecharacter greeketapsili {\uchar{31}{32}} % 1f20 \definecharacter greeketadasia {\uchar{31}{33}} \definecharacter greeketapsilivaria {\uchar{31}{34}} \definecharacter greeketadasiavaria {\uchar{31}{35}} \definecharacter greeketapsilitonos {\uchar{31}{36}} \definecharacter greeketadasiatonos {\uchar{31}{37}} \definecharacter greeketapsiliperispomeni {\uchar{31}{38}} \definecharacter greeketadasiaperispomeni {\uchar{31}{39}} \definecharacter greekEtapsili {\uchar{31}{40}} \definecharacter greekEtadasia {\uchar{31}{41}} \definecharacter greekEtapsilivaria {\uchar{31}{42}} \definecharacter greekEtadasiavaria {\uchar{31}{43}} \definecharacter greekEtapsilitonos {\uchar{31}{44}} \definecharacter greekEtadasiatonos {\uchar{31}{45}} \definecharacter greekEtapsiliperispomeni {\uchar{31}{46}} \definecharacter greekEtadasiaperispomeni {\uchar{31}{47}} \definecharacter greekiotapsili {\uchar{31}{48}} % 1f30 \definecharacter greekiotadasia {\uchar{31}{49}} \definecharacter greekiotapsilivaria {\uchar{31}{50}} \definecharacter greekiotadasiavaria {\uchar{31}{51}} \definecharacter greekiotapsilitonos {\uchar{31}{52}} \definecharacter greekiotadasiatonos {\uchar{31}{53}} \definecharacter greekiotapsiliperispomeni {\uchar{31}{54}} \definecharacter greekiotadasiaperispomeni {\uchar{31}{55}} \definecharacter greekIotapsili {\uchar{31}{56}} \definecharacter greekIotadasia {\uchar{31}{57}} \definecharacter greekIotapsilivaria {\uchar{31}{58}} \definecharacter greekIotadasiavaria {\uchar{31}{59}} \definecharacter greekIotapsilitonos {\uchar{31}{60}} \definecharacter greekIotadasiatonos {\uchar{31}{61}} \definecharacter greekIotapsiliperispomeni {\uchar{31}{62}} \definecharacter greekIotadasiaperispomeni {\uchar{31}{63}} \definecharacter greekomicronpsili {\uchar{31}{64}} % 1f40 \definecharacter greekomicrondasia {\uchar{31}{65}} \definecharacter greekomicronpsilivaria {\uchar{31}{66}} \definecharacter greekomicrondasiavaria {\uchar{31}{67}} \definecharacter greekomicronpsilitonos {\uchar{31}{68}} \definecharacter greekomicrondasiatonos {\uchar{31}{69}} \definecharacter greekOmicronpsili {\uchar{31}{72}} \definecharacter greekOmicrondasia {\uchar{31}{73}} \definecharacter greekOmicronpsilivaria {\uchar{31}{74}} \definecharacter greekOmicrondasiavaria {\uchar{31}{75}} \definecharacter greekOmicronpsilitonos {\uchar{31}{76}} \definecharacter greekOmicrondasiatonos {\uchar{31}{77}} \definecharacter greekupsilonpsili {\uchar{31}{80}} % 1f50 \definecharacter greekupsilondasia {\uchar{31}{81}} \definecharacter greekupsilonpsilivaria {\uchar{31}{82}} \definecharacter greekupsilondasiavaria {\uchar{31}{83}} \definecharacter greekupsilonpsilitonos {\uchar{31}{84}} \definecharacter greekupsilondasiatonos {\uchar{31}{85}} \definecharacter greekupsilonpsiliperispomeni {\uchar{31}{86}} \definecharacter greekupsilondasiaperispomeni {\uchar{31}{87}} \definecharacter greekUpsilondasia {\uchar{31}{89}} \definecharacter greekUpsilondasiavaria {\uchar{31}{91}} \definecharacter greekUpsilondasiatonos {\uchar{31}{93}} \definecharacter greekUpsilondasiaperispomeni {\uchar{31}{95}} \definecharacter greekomegapsili {\uchar{31}{96}} % 1f60 \definecharacter greekomegadasia {\uchar{31}{97}} \definecharacter greekomegapsilivaria {\uchar{31}{98}} \definecharacter greekomegadasiavaria {\uchar{31}{99}} \definecharacter greekomegapsilitonos {\uchar{31}{100}} \definecharacter greekomegadasiatonos {\uchar{31}{101}} \definecharacter greekomegapsiliperispomeni {\uchar{31}{102}} \definecharacter greekomegadasiaperispomeni {\uchar{31}{103}} \definecharacter greekOmegapsili {\uchar{31}{104}} \definecharacter greekOmegadasia {\uchar{31}{105}} \definecharacter greekOmegapsilivaria {\uchar{31}{106}} \definecharacter greekOmegadasiavaria {\uchar{31}{107}} \definecharacter greekOmegapsilitonos {\uchar{31}{108}} \definecharacter greekOmegadasiatonos {\uchar{31}{109}} \definecharacter greekOmegapsiliperispomeni {\uchar{31}{110}} \definecharacter greekOmegadasiaperispomeni {\uchar{31}{111}} \definecharacter greekalphavaria {\uchar{31}{112}} % 1f70 \definecharacter greekalphaoxia {\uchar{31}{113}} \definecharacter greekepsilonvaria {\uchar{31}{114}} \definecharacter greekepsilonoxia {\uchar{31}{115}} \definecharacter greeketavaria {\uchar{31}{116}} \definecharacter greeketaoxia {\uchar{31}{117}} \definecharacter greekiotavaria {\uchar{31}{118}} \definecharacter greekiotaoxia {\uchar{31}{119}} \definecharacter greekomicronvaria {\uchar{31}{120}} \definecharacter greekomicronoxia {\uchar{31}{121}} \definecharacter greekupsilonvaria {\uchar{31}{122}} \definecharacter greekupsilonoxia {\uchar{31}{123}} \definecharacter greekomegavaria {\uchar{31}{124}} \definecharacter greekomegaoxia {\uchar{31}{125}} \definecharacter greekalphaiotasubpsili {\uchar{31}{128}} % 1f80 \definecharacter greekalphaiotasubdasia {\uchar{31}{129}} \definecharacter greekalphaiotasubpsilivaria {\uchar{31}{130}} \definecharacter greekalphaiotasubdasiavaria {\uchar{31}{131}} \definecharacter greekalphaiotasubpsilitonos {\uchar{31}{132}} \definecharacter greekalphaiotasubdasiatonos {\uchar{31}{133}} \definecharacter greekalphaiotasubpsiliperispomeni {\uchar{31}{134}} \definecharacter greekalphaiotasubdasiaperispomeni {\uchar{31}{135}} \definecharacter greekAlphaiotasubpsili {\uchar{31}{136}} \definecharacter greekAlphaiotasubdasia {\uchar{31}{137}} \definecharacter greekAlphaiotasubpsilivaria {\uchar{31}{138}} \definecharacter greekAlphaiotasubdasiavaria {\uchar{31}{139}} \definecharacter greekAlphaiotasubpsilitonos {\uchar{31}{140}} \definecharacter greekAlphaiotasubdasiatonos {\uchar{31}{141}} \definecharacter greekAlphaiotasubpsiliperispomeni {\uchar{31}{142}} \definecharacter greekAlphaiotasubdasiaperispomeni {\uchar{31}{143}} \definecharacter greeketaiotasubpsili {\uchar{31}{144}} % 1f90 \definecharacter greeketaiotasubdasia {\uchar{31}{145}} \definecharacter greeketaiotasubpsilivaria {\uchar{31}{146}} \definecharacter greeketaiotasubdasiavaria {\uchar{31}{147}} \definecharacter greeketaiotasubpsilitonos {\uchar{31}{148}} \definecharacter greeketaiotasubdasiatonos {\uchar{31}{149}} \definecharacter greeketaiotasubpsiliperispomeni {\uchar{31}{150}} \definecharacter greeketaiotasubdasiaperispomeni {\uchar{31}{151}} \definecharacter greekEtaiotasubpsili {\uchar{31}{152}} \definecharacter greekEtaiotasubdasia {\uchar{31}{153}} \definecharacter greekEtaiotasubpsilivaria {\uchar{31}{154}} \definecharacter greekEtaiotasubdasiavaria {\uchar{31}{155}} \definecharacter greekEtaiotasubpsilitonos {\uchar{31}{156}} \definecharacter greekEtaiotasubdasiatonos {\uchar{31}{157}} \definecharacter greekEtaiotasubpsiliperispomeni {\uchar{31}{158}} \definecharacter greekEtaiotasubdasiaperispomeni {\uchar{31}{159}} \definecharacter greekomegaiotasubpsili {\uchar{31}{160}} % 1fa0 \definecharacter greekomegaiotasubdasia {\uchar{31}{161}} \definecharacter greekomegaiotasubpsilivaria {\uchar{31}{162}} \definecharacter greekomegaiotasubdasiavaria {\uchar{31}{163}} \definecharacter greekomegaiotasubpsilitonos {\uchar{31}{164}} \definecharacter greekomegaiotasubdasiatonos {\uchar{31}{165}} \definecharacter greekomegaiotasubpsiliperispomeni {\uchar{31}{166}} \definecharacter greekomegaiotasubdasiaperispomeni {\uchar{31}{167}} \definecharacter greekOmegaiotasubpsili {\uchar{31}{168}} \definecharacter greekOmegaiotasubdasia {\uchar{31}{169}} \definecharacter greekOmegaiotasubpsilivaria {\uchar{31}{170}} \definecharacter greekOmegaiotasubdasiavaria {\uchar{31}{171}} \definecharacter greekOmegaiotasubpsilitonos {\uchar{31}{172}} \definecharacter greekOmegaiotasubdasiatonos {\uchar{31}{173}} \definecharacter greekOmegaiotasubpsiliperispomeni {\uchar{31}{174}} \definecharacter greekOmegaiotasubdasiaperispomeni {\uchar{31}{175}} \definecharacter greekalphavrachy {\uchar{31}{176}} % 1fb0 \definecharacter greekalphamacron {\uchar{31}{177}} \definecharacter greekalphaiotasubvaria {\uchar{31}{178}} \definecharacter greekalphaiotasub {\uchar{31}{179}} \definecharacter greekalphaiotasubtonos {\uchar{31}{180}} \definecharacter greekalphaperispomeni {\uchar{31}{182}} \definecharacter greekalphaiotasubperispomeni {\uchar{31}{183}} \definecharacter greekAlphavrachy {\uchar{31}{184}} \definecharacter greekAlphamacron {\uchar{31}{185}} \definecharacter greekAlphavaria {\uchar{31}{186}} \definecharacter greekAlphatonos {\uchar{31}{187}} \definecharacter greekAlphaiotasub {\uchar{31}{188}} \definecharacter greekCoronis {\uchar{31}{189}} \definecharacter greekprosgegrammeni {\uchar{31}{190}} \definecharacter greekpsili {\uchar{31}{191}} \definecharacter greekperispomeni {\uchar{31}{192}} % 1fc0 \definecharacter greekdialytikaperispomeni {\uchar{31}{193}} \definecharacter greeketaiotasubvaria {\uchar{31}{194}} \definecharacter greeketaiotasub {\uchar{31}{195}} \definecharacter greeketaiotasubtonos {\uchar{31}{196}} \definecharacter greeketaperispomeni {\uchar{31}{198}} \definecharacter greeketaiotasubperispomeni {\uchar{31}{199}} \definecharacter greekEpsilonvaria {\uchar{31}{200}} \definecharacter greekEpsilontonos {\uchar{31}{201}} \definecharacter greekEtavaria {\uchar{31}{202}} \definecharacter greekEtatonos {\uchar{31}{203}} \definecharacter greekEtaiotasub {\uchar{31}{204}} \definecharacter greekpsilivaria {\uchar{31}{205}} \definecharacter greekpsilitonos {\uchar{31}{206}} \definecharacter greekpsiliperispomeni {\uchar{31}{207}} \definecharacter greekiotavrachy {\uchar{31}{208}} % 1fd0 \definecharacter greekiotamacron {\uchar{31}{209}} \definecharacter greekiotadialytikavaria {\uchar{31}{210}} \definecharacter greekiotadialytikatonos {\uchar{31}{211}} \definecharacter greekiotaperispomeni {\uchar{31}{214}} \definecharacter greekiotadialytikaperispomeni {\uchar{31}{215}} \definecharacter greekIotavrachy {\uchar{31}{216}} \definecharacter greekIotamacron {\uchar{31}{217}} \definecharacter greekIotavaria {\uchar{31}{218}} \definecharacter greekIotatonos {\uchar{31}{219}} \definecharacter greekdasiavaria {\uchar{31}{221}} \definecharacter greekdasiatonos {\uchar{31}{222}} \definecharacter greekdasiaperispomeni {\uchar{31}{223}} \definecharacter greekupsilonvrachy {\uchar{31}{224}} % 1fe0 \definecharacter greekupsilonmacron {\uchar{31}{225}} \definecharacter greekupsilondialytikavaria {\uchar{31}{226}} \definecharacter greekupsilondialytikatonos {\uchar{31}{227}} \definecharacter greekrhopsili {\uchar{31}{228}} \definecharacter greekrhodasia {\uchar{31}{229}} \definecharacter greekupsilonperispomeni {\uchar{31}{230}} \definecharacter greekupsilondialytikaperispomeni {\uchar{31}{231}} \definecharacter greekUpsilonvrachy {\uchar{31}{232}} \definecharacter greekUpsilonmacron {\uchar{31}{233}} \definecharacter greekUpsilonvaria {\uchar{31}{234}} \definecharacter greekUpsilontonos {\uchar{31}{235}} \definecharacter greekRhodasia {\uchar{31}{236}} \definecharacter greekdialytikavaria {\uchar{31}{237}} \definecharacter greekdialytikatonos {\uchar{31}{238}} \definecharacter greekvaria {\uchar{31}{239}} \definecharacter greekomegaiotasubvaria {\uchar{31}{242}} \definecharacter greekomegaiotasub {\uchar{31}{243}} \definecharacter greekomegaiotasubtonos {\uchar{31}{244}} \definecharacter greekomegaperispomeni {\uchar{31}{246}} \definecharacter greekomegaiotasubperispomeni {\uchar{31}{247}} \definecharacter greekOmicronvaria {\uchar{31}{248}} \definecharacter greekOmicrontonos {\uchar{31}{249}} \definecharacter greekOmegavaria {\uchar{31}{250}} \definecharacter greekOmegatonos {\uchar{31}{251}} \definecharacter greekOmegaiotasub {\uchar{31}{252}} \definecharacter greekoxia {\uchar{31}{253}} \definecharacter greekdasia {\uchar{31}{254}} \definecharacter greeksigmalunate {\uchar3{242}} \definecharacter greekSigmalunate {\uchar3{249}} \definecharacter greeksampi {\uchar3{225}} \definecharacter greekdigamma {\uchar3{221}} \definecharacter greekstigma {\uchar3{219}} \definecharacter greeknumkoppa {\uchar3{223}} \definecharacter greekkoppa {\uchar3{217}} \definecharacter greekupsilondiaeresis {\uchar3{203}} \stopencoding % Hebrew: \startencoding[uc] \definecharacter hebrewAlef {\uchar5{208}} % 05D0 \definecharacter hebrewBet {\uchar5{209}} \definecharacter hebrewGimel {\uchar5{210}} \definecharacter hebrewDalet {\uchar5{211}} \definecharacter hebrewHe {\uchar5{212}} \definecharacter hebrewVav {\uchar5{213}} \definecharacter hebrewZayin {\uchar5{214}} \definecharacter hebrewHet {\uchar5{215}} \definecharacter hebrewTet {\uchar5{216}} \definecharacter hebrewYod {\uchar5{217}} \definecharacter hebrewKaffinal {\uchar5{218}} \definecharacter hebrewKaf {\uchar5{219}} \definecharacter hebrewLamed {\uchar5{220}} \definecharacter hebrewMemfinal {\uchar5{221}} \definecharacter hebrewMem {\uchar5{222}} \definecharacter hebrewNunfinal {\uchar5{223}} \definecharacter hebrewNun {\uchar5{224}} \definecharacter hebrewSamekh {\uchar5{225}} \definecharacter hebrewAyin {\uchar5{226}} \definecharacter hebrewPefinal {\uchar5{227}} \definecharacter hebrewPe {\uchar5{228}} \definecharacter hebrewTsadifinal {\uchar5{229}} \definecharacter hebrewTsadi {\uchar5{230}} \definecharacter hebrewQof {\uchar5{231}} \definecharacter hebrewResh {\uchar5{232}} \definecharacter hebrewShin {\uchar5{233}} \definecharacter hebrewTav {\uchar5{234}} % 05EA \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-fig.mkiv0000644000175000017500000003140512130411274024262 0ustar norbertnorbert%D \module %D [ file=grph-fig, %D version=2006.08.26, % overhaul of 1997.03.31 %D title=\CONTEXT\ Graphic Macros, %D subtitle=Figure Inclusion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Used in the styledesign manual: % % beware in mkiv we don't have the typeset- prefix % % \setbuffer[typeset-b]\endbuffer % \setbuffer[typeset-a]\endbuffer % % todo: % % \appendtoks \setbuffer[typeset-b]\endbuffer\to \everystarttext % \appendtoks \setbuffer[typeset-a]\endbuffer\to \everystarttext \newcount\c_grph_buffers_n \let\m_grph_buffers_filename\empty \unexpanded\def\typesetbuffer {\dodoubleempty\grph_buffers_typeset} \def\grph_buffers_typeset[#1][#2]% beware: this will mix up the mp graphics {\ifsecondargument \grph_buffers_typeset_indeed[#1][#2]% \else\iffirstargument \doifassignmentelse{#1} {\grph_buffers_typeset_indeed[\jobname][#1]}% {\grph_buffers_typeset_indeed[#1][]}% \else \grph_buffers_typeset_indeed[\jobname][] \fi\fi} \def\grph_buffers_typeset_indeed[#1][#2]% we could use the via files {\bgroup \global\advance\c_grph_buffers_n\plusone \edef\m_grph_buffers_filename{\jobname-buffer-\the\c_grph_buffers_n}% \ctxcommand{runbuffer("\m_grph_buffers_filename.tmp","#1",true)}% \externalfigure[\m_grph_buffers_filename.pdf][#2]% \egroup} % For manuals and such: % % \definetypesetting [name] [options] [settings-a] % % \typesetfile [name] [file] [settings-b] % \typesetfile [file] [options] [settings-b] % \typesetfile [file] [settings-b] % \typesetfile [file] % % \enabletrackers[files.run] % \starttext % \typesetfile[oepsoeps.tex][width=10cm,frame=on] % \stoptext \installcorenamespace{typesettingfile} \unexpanded\def\definetypesetting{\dotripleempty\grph_typesetting_define} \unexpanded\def\typesetfile {\dotripleempty\grph_typesetting_process} \def\grph_typesetting_define[#1][#2][#3]% options settings-a {\doifsomething{#1}{\setuvalue{\??typesettingfile#1}{\grph_typesetting_process_indeed{#2}{#3}}}} \def\grph_typesetting_process[#1][#2][#3]% filename settings-b | filename options settings {\ifcsname\??typesettingfile#1\endcsname \csname\??typesettingfile#1\endcsname{#2}{#3}% \else\ifthirdargument % filename options settings \grph_typesetting_process_indeed{#2}{#3}{#1}{}% \else\ifsecondargument % filename settings \grph_typesetting_process_indeed{}{#2}{#1}{}% \fi\fi\fi} \def\grph_typesetting_process_indeed#1#2#3#4% options settings-a filename settings-b {\begingroup \edef\m_typesetting_name{\cldcontext{job.files.context("#3","#1")}}% \ifx\m_typesetting_name\empty \else \expanded{\externalfigure[\m_typesetting_name]}[#2,#4]% \fi \endgroup} %D Whatever ... hardly used ... but historic ... needs checking ... %D will probably become m-fig-nn.mkiv .. or I will extend it cq. clean %D it up when I needed it. After all, it's documented in old manuals. \newcount\c_grph_steps_reference \newdimen\d_grph_steps_x \newdimen\d_grph_steps_y \newbox \b_grph_steps_colorbar \let\placestopfigure\relax \unexpanded\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]% {\hbox {\setbox\scratchbox\hbox {\useexternalfigure[\s!dummy][#2][#3,#5]% \externalfigure[\s!dummy]}% \grph_steps_calculate \startpositioning \let\referring\grph_steps_one_referring \let\marking \grph_steps_one_marking \let\remark \grph_steps_one_remark \let\colorbar \grph_steps_one_colorbar \position(0,0){\box\scratchbox}% \linewidth\onepoint \setuppositioning [\c!unit=pt, \c!xscale=\withoutpt\the\d_grph_steps_x, \c!yscale=\withoutpt\the\d_grph_steps_y, \c!factor=1]% \ignorespaces#4% \let\referring\grph_steps_two_referring \let\marking \grph_steps_two_marking \let\remark \grph_steps_two_remark \let\colorbar \grph_steps_two_colorbar \ignorespaces#4% \stoppositioning \ifvoid\b_grph_steps_colorbar\else\box\b_grph_steps_colorbar\fi}} % not really needed \unexpanded\def\grph_steps_one_referring(#1,#2)#3(#4,#5)#6[#7]% {\position(#1,#2){\grph_steps_goto(#4,#5){\externalfigureparameter\c!frames}[#7]}} \unexpanded\def\grph_steps_one_marking(#1,#2)#3(#4,#5)#6[#7]% {\position(#1,#2){\grph_steps_this_is(#4,#5){\externalfigureparameter\c!frames}[#7]}} \unexpanded\def\grph_steps_one_remark(#1,#2)#3(#4,#5)% (x,y)(h,b)[...]{tekst} {\def\grph_steps_no_comment_indeed[##1]##2{}% \dosingleempty\grph_steps_no_comment_indeed} \unexpanded\def\grph_steps_one_colorbar#1[#2]% {} \unexpanded\def\grph_steps_two_referring(#1,#2)#3(#4,#5)#6[#7]% {} \let\grph_steps_two_marking\grph_steps_two_referring \unexpanded\def\grph_steps_two_remark {\grph_steps_comment\v!no} \unexpanded\def\grph_steps_two_colorbar#1[#2] {\begingroup \global\setbox\b_grph_steps_colorbar\vbox {\forgetall \processcommalist[#2]\grph_colorbar_make_step}% \global\setbox\b_grph_steps_colorbar\vbox {\hskip2\emwidth\box\b_grph_steps_colorbar}% \global\wd\b_grph_steps_colorbar\zeropoint \endgroup} \unexpanded\def\grph_colorbar_make_step#1% {\blackrule[\c!color=#1,\c!width=2\emwidth,\c!height=\exheight,\c!depth=\zeropoint]% \endgraf} \unexpanded\def\startfigure % could be done nicer {\grabuntil{\e!stop\v!figure}\grph_steps_figure_process} \let\stopfigure\relax \def\grph_steps_figure_process#1% {\dotripleargument\grph_steps_figure_process_indeed#1\stopfigure} \def\grph_steps_figure_process_indeed[#1][#2][#3]#4\stopfigure {\doifelse{\externalfigureparameter\c!option}\v!test {\teststartfigure[#1][#2][#3]#4\teststopfigure \letexternalfigureparameter\c!frames\v!on} {\letexternalfigureparameter\c!frames\v!off}% \setvalue{\??externalfigureinstance#1}% {\dosingleempty{\placestartfigure[#1][#2][#3]#4\placestopfigure}}} \let\teststopfigure\relax \unexpanded\def\teststartfigure[#1][#2][#3]#4\teststopfigure {\begingroup \setbox\scratchbox\hbox {\useexternalfigure[\s!dummy][#2][\c!wfactor=\v!max]% \externalfigure[\s!dummy]}% \let\referring\grph_steps_three_referring \let\marking \grph_steps_three_marking \let\remark \grph_steps_three_remark \let\colorbar \grph_steps_three_colorbar \c_grph_steps_reference\zerocount \setbox0\vbox {\hsize240\points \startpositioning \grph_steps_calculate \position(0,0) {\box\scratchbox}% \position(0,0) {\basegrid [\c!nx=\externalfigureparameter\c!xmax, \c!dx=\withoutpt\the\d_grph_steps_x, \c!ny=\externalfigureparameter\c!ymax, \c!dy=\withoutpt\the\d_grph_steps_y, \c!xstep=1, \c!ystep=1, \c!scale=1, \c!offset=\v!no, \c!unit=pt]}% \setuppositioning [\c!unit=pt, \c!xscale=\withoutpt\the\d_grph_steps_x, \c!yscale=\withoutpt\the\d_grph_steps_y, \c!factor=1]% \linewidth\onepoint \ignorespaces#4\relax \stoppositioning \vfill}% \c_grph_steps_reference\zerocount \let\referring\grph_steps_four_referring \let\marking \grph_steps_four_marking \let\remark \grph_steps_four_remark \let\colorbar \grph_steps_four_colorbar \setbox2\vbox {{\tfa\doifelsenothing{#1}{#2}{#1}} \blank \tfxx#4 \vfilll}% \ifdim\ht0>\ht2 \ht2\ht0 \else \ht0\ht2 \fi \hbox {\hskip3\emwidth \vtop{\vskip12\points\box0\vskip6\points}% \vtop{\vskip12\points\box2\vskip6\points}}% \endgroup} \unexpanded\def\grph_steps_three_referring(#1,#2)#3(#4,#5)#6[#7]% {\advance\c_grph_steps_reference\plusone \position(#1,#2) {\hbox{\the\c_grph_steps_reference}}% \position(#1,#2) {\gotosomeinternal\s!vwb{#7}\realfolio {\grph_steps_marker(#4,#5)\v!on{\thisissomeinternal\s!vwa{#7}}}}} \unexpanded\def\grph_steps_three_remark {\grph_steps_comment\v!yes} \let\grph_steps_three_marking \grph_steps_three_referring \let\grph_steps_three_colorbar\grph_steps_one_colorbar \unexpanded\def\grph_steps_four_referring {\grph_steps_text{$\rightarrow$}} \unexpanded\def\grph_steps_four_marking {\grph_steps_text{$\leftarrow$}} \let\grph_steps_four_remark \grph_steps_one_remark \let\grph_steps_four_colorbar\grph_steps_one_colorbar % Helpers: \def\grph_steps_calculate {\ifnum0\externalfigureparameter\c!xmax=\zerocount \ifnum0\externalfigureparameter\c!ymax=\zerocount \setexternalfigureparameter\c!ymax{24}% \fi \d_grph_steps_y\figureheight \divide\d_grph_steps_y \externalfigureparameter\c!ymax \d_grph_steps_x\d_grph_steps_y \scratchdimen\figurewidth \advance\scratchdimen\d_grph_steps_y \divide \scratchdimen\d_grph_steps_y \setexternalfigureparameter\c!xmax{\number\scratchdimen}% \else \d_grph_steps_x\figurewidth \divide\d_grph_steps_x \externalfigureparameter\c!xmax\relax \d_grph_steps_y\figureheight \divide\d_grph_steps_y \externalfigureparameter\c!ymax\relax \fi} \def\grph_steps_comment#1(#2,#3)#4(#5,#6)% {kader}(x,y)(h,b)[...]{tekst} {\def\grph_steps_comment_indeed[##1]##2% {\position(#2,#3)% {\setnostrut \framed [\c!width=#5\d_grph_steps_x, \c!height=#6\d_grph_steps_y, \c!offset=\v!none, \c!frame=#1, ##1]% {##2}}}% \dosingleempty\grph_steps_comment_indeed} % \def\grph_steps_figure#1% % {\position(0,0){\getvalue{#1}}} \def\grph_steps_goto(#1,#2)#3[#4]% (h,b)kader[ref] {\gotobox{\vbox{\grph_steps_area(#1,#2)#3{}}}[#4]} \def\grph_steps_text#1(#2,#3)#4(#5,#6)#7[#8]% {\advance\c_grph_steps_reference\plusone \hbox {\quad \thisissomeinternal\s!vwb {#8}% \gotosomeinternal\s!vwa{#8}\realfolio {\hbox to 1.5em{\the\c_grph_steps_reference\presetgoto\hfill}}% \quad#1 (#2,#3) (#5,#6) [#8]\hfill}% \endgraf} \def\grph_steps_this_is(#1,#2)#3[#4]% {\grph_steps_area(#1,#2){#3}{\dosetdirectpagereference{#4}}} \def\grph_steps_area(#1,#2)#3#4% (h,b){kader}{tekst} {\bgroup \setnostrut \framed [\c!width=#1\d_grph_steps_x, \c!height=#2\d_grph_steps_y, \c!offset=\zeropoint, \c!frame=#3] {#4}% \egroup} \def\grph_steps_marker(#1,#2)#3#4% (h,b){kader}{tekst} {\framed [\c!width=#1\d_grph_steps_x, \c!height=#2\d_grph_steps_y, \c!offset=\v!none, \c!frame=#3]% {#4}} \protect \endinput % \startbuffer % \definecolor [blue] [c=1,m=.38,y=0,k=.64] % \definecolor [yellow] [c=0,m=.28,y=1,k=.06] % % \definespotcolor [blue-100] [blue] [p=1] % \definespotcolor [yellow-100] [yellow] [p=1] % % \definemultitonecolor [combicolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1] % % \definemultitonecolor [combicolor-b] [blue=1] [c=1,m=.38,y=0,k=.64] % force multitone % \definemultitonecolor [combicolor-y] [yellow=1] [c=0,m=.28,y=1,k=.06] % force multitone % % \useexternalfigure[demo-a][mill.png] [object=no,width=.2\textwidth] % \useexternalfigure[demo-b][hacker-bw.jpg][object=no,width=.2\textwidth] % % \startbaselinecorrection \startcombination[4*1] % {\externalfigure[demo-a]} {no color} % {\externalfigure[demo-a][color=combicolor]} {indexed duotone} % {\externalfigure[demo-a][color=combicolor-b]} {spot color} % {\externalfigure[demo-a][color=combicolor-y]} {spot color} % \stopcombination \stopbaselinecorrection % % \startbaselinecorrection \startcombination[4*1] % {\externalfigure[demo-b]} {no color} % {\externalfigure[demo-b][color=combicolor]} {indexed duotone} % {\externalfigure[demo-b][color=combicolor-b]} {spot color} % {\externalfigure[demo-b][color=combicolor-y]} {spot color} % \stopcombination \stopbaselinecorrection % % \startbaselinecorrection \startcombination[4*1] % {\externalfigure[demo-a]} {no color} % {\externalfigure[demo-a][color=combicolor]} {indexed duotone} % {\externalfigure[demo-a][color=blue-100]} {spot color} % {\externalfigure[demo-a][color=yellow-100]} {spot color} % \stopcombination \stopbaselinecorrection % % \startbaselinecorrection \startcombination[4*1] % {\externalfigure[demo-b]} {no color} % {\externalfigure[demo-b][color=combicolor]} {indexed duotone} % {\externalfigure[demo-b][color=blue-100]} {spot color} % {\externalfigure[demo-b][color=yellow-100]} {spot color} % \stopcombination \stopbaselinecorrection % \stopbuffer % % \getbuffer \typebuffer context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-syn.mkii0000644000175000017500000003170211754241457024343 0ustar norbertnorbert%D \module %D [ file=strc-syn, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Synonyms and Sorts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Synonyms and Sorts} \unprotect % \checkdefined kan hierheen % Formaat tex-utility-input-file : % % synonym entry {tag} {pure} {text} {synonym} % % Deze file wordt met het programma TeXUtil omgezet in een % in te lezen TeXFile met de commando's: % % \synonymentry {tag} {pure} {text} {synonym} \newif\ifsynonymmeaning % todo: \def\synonymparameter#1{\csname\??sm\currentsynonym#1\endcsname} \def\dosetupsynonyms[#1][#2]% {\getparameters[\??sm#1][#2]} \def\setupsynonyms {\dodoubleargument\dosetupsynonyms} \def\doresetsynonym#1% {\letvalue{#1\s!entry}\gobblethreearguments} \def\dohandlesynonymentry#1#2#3#4% {\bgroup \global\utilitydonetrue \syndef {\doattributes{\??sm#1}\c!textstyle\c!textcolor{#3}} \ConvertToConstant\doifelse{#4}{}{\unknown}{#4}\par \egroup} \def\synonymentry#1% {\executeifdefined{#1\s!entry}\gobblethreearguments} \def\dosetsynonym#1% {\doifdefinedelse{\??sm#1\c!command} {\setvalue{#1\s!entry}{\getvalue{\??sm#1\c!command}}} % 3 argumenten {\setvalue{#1\s!entry}{\dohandlesynonymentry{#1}}}} \def\synonymparameter#1{\csname\??sm\currentsynonym#1\endcsname} \def\doplacelistofsynonyms#1#2% {\whitespace \begingroup \def\currentsynonym{#1}% \definedescription % nog eens een class van maken, net als framed [syndef] [\c!location=\synonymparameter\c!location, \c!width=\synonymparameter\c!width, \c!distance=\synonymparameter\c!distance, \c!sample=\synonymparameter\c!sample, \c!hang=\synonymparameter\c!hang, \c!align=\synonymparameter\c!align, \c!before=\synonymparameter\c!before, \c!inbetween=\synonymparameter\c!inbetween, \c!after=\synonymparameter\c!after, \c!indentnext=\synonymparameter\c!indentnext, \c!headstyle=\synonymparameter\c!headstyle, \c!headcolor=\synonymparameter\c!headcolor, \c!style=, \c!color=]% \setupwhitespace[\v!none]% %doutilities{#1}\jobname{#2}\relax\par % no longer \par \doutilities{#1}\jobname{#1}\relax\relax \endgroup \ifutilitydone\else\nowhitespace\fi} \def\docompletelistofsynonyms#1#2% expansion needed to avoid v! (due to french active !) {\expanded{\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}% \doplacelistofsynonyms{#1}{#2}% \page[\v!yes]} \def\processsynonym#1#2#3% {\begingroup % anders in mathmode lege \hbox, zie eenheden \ifsynonymmeaning \synonymmeaningfalse \doattributes{\??sm#1}\c!synonymstyle\c!synonymcolor{#3}% \else \dontleavehmode \doattributes{\??sm#1}\c!textstyle\c!textcolor{#2}% \fi \endgroup} \def\getsynonymmeaning#1#2#3% {\bgroup \doifundefined{#2#3} {\setgvalue{#2#3}{{\tt[#3]}}% \showmessage\m!systems{18}{#1,#3}}% \synonymmeaningtrue \getvalue{#2#3}% \egroup} \def\dowritesynonym#1#2#3#4% {\begingroup % anders in mathmode lege \hbox \defconvertexpanded\asciisynonym{\getvalue{\??sm#1\c!expansion}}{#3}% \defconvertexpanded\asciimeaning{\getvalue{\??sm#1\c!expansion}}{#4}% \immediatewriteutility{s e {#1} {#2} {\asciisynonym} {\asciimeaning}}% \endgroup} \def\reprocesssynonym#1#2#3% {\processsynonym{#1}{#2}{#3}% \getvalue{\??sm#1\c!next}} % not formally documented \def\preexecutesynonym#1#2#3#4% {\ifdoinpututilities \else \dowritesynonym{#1}{#2}{#3}{#4}% \unexpanded\setgvalue{#2}{\reprocesssynonym{#1}{#3}{#4}}% \fi} \def\executesynonym#1#2#3#4% {\preexecutesynonym{#1}{#2}{#3}{#4}% \processsynonym{#1}{#3}{#4}% \getvalue{\??sm#1\c!next}} % not formally documented \def\expandsynonym#1#2#3#4% {{\synonymmeaningtrue \processsynonym{#1}{#3}{#4}}} \def\dodoloadsynonym#1#2#3#4% {\setgvalue{#2}{\executesynonym{#1}{#2}{#3}{#4}}} \def\doloadsynonym#1% {\setvalue{#1\s!entry}##1##2##3% {\doifelsenothing{##1} {\dodoloadsynonym{#1}{##2}{##2}{##3}} {\dodoloadsynonym{#1}{##1}{##2}{##3}}% \global\utilitydonetrue}} \def\doloadsynonyms#1#2% {\bgroup \let\dosetsynonym\doloadsynonym \showmessage\m!systems{19}{#2}% \doutilities{#1}\jobname{#1}\relax\relax \egroup \setvalue{\s!check#1}##1{}} \def\dodocomplexsynonym[#1][#2]#3#4% {\doifsomething{#2} {\getvalue{\s!check#1}{#2}% \doglobal\appendtoks\setvalue{#2}{#2}\to\simplifiedcommands \doifelsevalue{\??sm#1\c!conversion}\v!yes {\unexpanded\setgvalue{#2}{\expandsynonym{#1}{#2}{#3}{#4}}} {\doifelsevalue{\??sm#1\c!state}\v!start {\doifelsevalue{\??sm#1\c!criterium}\v!all {\preexecutesynonym{#1}{#2}{#3}{#4}} {\unexpanded\setgvalue{#2}{\executesynonym{#1}{#2}{#3}{#4}}}} {\unexpanded\setgvalue{#2}{\processsynonym{#1}{#3}{#4}}}}}} \def\docomplexsynonym[#1][#2][#3]#4#5% {\ifthirdargument \dodocomplexsynonym[#2][#1#3]{#4}{#5}% \else \dodocomplexsynonym[#2][#1#4]{#4}{#5}% \fi} \def\doregistersynonymlanguage#1% {\savesortlanguage{\getvalue{\??sm#1\s!language}}% \immediatewriteutility{s l {#1} {\getvalue{\??sm#1\s!language}}}} \def\dodefinesynonyms[#1][#2][#3][#4]% {\iffourthargument \unexpanded\def#4##1{\getsynonymmeaning{#1}{\??sm:#1:}{##1}}% \ifthirdargument \unexpanded\def#3##1{\getvalue{\??sm:#1:##1}}% \fi \setvalue{#1}{\dotripleempty\docomplexsynonym[\??sm:#1:][#1]}% \else \ifthirdargument \unexpanded\def#3##1{\getsynonymmeaning{#1}{}{##1}}% \fi \setvalue{#1}{\dotripleempty\docomplexsynonym[][#1]}% \fi \dosetupsynonyms [#1]% [\c!synonymstyle=,\c!textstyle=, \c!headstyle=,\c!headcolor=, \c!state=\v!start,\c!criterium=, \c!location=\v!left,\c!width=5em,\c!distance=0pt, \c!sample=,\c!hang=,\c!align=, \c!before=,\c!inbetween=,\c!after=, \c!indentnext=\v!no, \c!expansion=, \s!language=\currentmainlanguage]% \doglobal\appendtoksonce \doregistersynonymlanguage{#1}% \to \everysavesortkeys \presetheadtext[#2=\Word{#2}]% changes the \if...argument \addutilityreset{#1}% \setvalue{\e!setup #2\e!endsetup}{\dodoubleargument\getparameters[\??sm#1]}% to be obsolete \setvalue{\s!set #1}{\dosetsynonym{#1}}% \setvalue{\s!reset #1}{\doresetsynonym{#1}}% \setvalue{\s!check #1}##1{\checkdefined{synonym}{#1}{##1}}% \setvalue{\e!load #2}{\doloadsynonyms{#1}{#2}}% \setvalue{\e!place\e!listof #2}{\doplacelistofsynonyms{#1}{#2}}% \setvalue{\e!complete\e!listof#2}{\docompletelistofsynonyms{#1}{#2}}} \def\definesynonyms {\doquadrupleempty\dodefinesynonyms} % Formaat tex-utility-input-file : % % synonym entry {tag} {pure} {text} {} % % Deze file wordt met het programma TeXUtil omgezet in een % in te lezen TeXFile met de commando's: % % \synonymentry {tag} {pure} {text} {} \def\dosetupsorting[#1][#2]% {\getparameters[\??so#1][#2]} \def\setupsorting {\dodoubleargument\dosetupsorting} \def\doresetsort#1% {\letvalue{#1\s!entry}\gobblethreearguments} \def\dosetsort#1% {\setvalue{#1\s!entry}##1##2##3% {\let\dowritesort\gobblethreearguments \global\utilitydonetrue \bgroup \doifdefinedelse{\??so#1\c!command} {\getvalue{\??so#1\c!command}{##2}} % 1 argument {\getvalue{\??so#1\c!before}% \doattributes{\??so#1}\c!style\c!color{##2}% \getvalue{\??so#1\c!after}}% \egroup}} \def\doplacelistofsorts#1% NOG EEN RUWE VERSIE MAKEN {\whitespace % ZONDER WITRUIMTE ETC ETC \begingroup \setupwhitespace[\v!none]% \doutilities{#1}\jobname{#1}\relax\relax \endgroup \ifutilitydone\else\nowhitespace\fi} % to be tested % % \def\doplacelistofsorts#1% NOG EEN RUWE VERSIE MAKEN % {\startpacked % %doutilities{#1}\jobname{#1}\relax\par % \doutilities{#1}\jobname{#1}\relax\relax % \stoppacked} \def\docompletelistofsorts#1#2% {\expanded{\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}% \doplacelistofsorts{#1}% \page[\v!yes]} % todo: % % \def\placelistofsorts[#1]% % {\doplacelistofsorts{#1}} \def\processsort#1#2#3% {\dontleavehmode \begingroup % was \bgroup \doattributes{\??so#1}\c!style\c!color{#2}% \endgroup} % was \egroup \def\dowritesort#1#2#3% {\bgroup \defconvertexpanded\asciisynonym{\getvalue{\??so#1\c!expansion}}{#3}% \immediatewriteutility{s e {#1} {#2} {\asciisynonym} {}}% \egroup} \def\synonymentry#1% {\executeifdefined{#1\s!entry}\gobblethreearguments} \def\reprocesssort#1#2#3% {\processsort{#1}{#2}{#3}% \getvalue{\??so#1\c!next}} \def\preexecutesort#1#2#3% {\ifdoinpututilities \else \dowritesort{#1}{#2}{#3}% \unexpanded\setgvalue{#2}{\reprocesssort{#1}{#3}{#2}}% \fi} \def\executesort#1#2#3% {\begingroup \let\executesort\thirdofthreearguments % Trick needed for nested logo's. \preexecutesort{#1}{#2}{#3}% \processsort{#1}{#3}{#2}% \endgroup \getvalue{\??so#1\c!next}} % not formally documented \def\doloadsort#1% {\setvalue{#1\s!entry}##1##2##3% {\setgvalue{##1}{##2}% \global\utilitydonetrue}} \def\doloadsort#1#2% {\bgroup \let\dosetsort\doloadsort \showmessage\m!systems{20}{#2}% \doutilities{#1}\jobname{#1}\relax\relax \egroup \setvalue{\s!check#1}##1{}} \def\dodocomplexsort[#1][#2]#3% {\doifsomething{#2} {\getvalue{\s!check#1}{#2}% \doglobal\appendtoks\setvalue{#2}{#2}\to\simplifiedcommands \doifelsevalue{\??so#1\c!state}\v!start {\doifelsevalue{\??so#1\c!criterium}\v!all {\preexecutesort{#1}{#2}{#3}} {\unexpanded\setgvalue{#2}{\executesort{#1}{#2}{#3}}}} {\unexpanded\setgvalue{#2}{\processsort{#1}{#3}{#2}}}}} \def\docomplexsort[#1][#2][#3]#4% {\ifthirdargument \dodocomplexsort[#2][#1#3]{#4}% \else \dowritesort{#2}{#4}{#4}% \fi} % if #3=\relax or \v!none, then no command but still protected \def\doregistersortinglanguage#1% {\savesortlanguage{\getvalue{\??so#1\s!language}}% \immediatewriteutility{s l {#1} {\getvalue{\??so#1\s!language}}}} \def\dodefinesorting[#1][#2][#3]% {\getparameters[\??so#1] [%\c!command=, % we test for defined ! \c!state=\v!start, \c!criterium=, \c!style=, \c!before=, \c!after=\endgraf, \c!expansion=, \s!language=\currentmainlanguage]% \doglobal\appendtoksonce \doregistersortinglanguage{#1}% \to \everysavesortkeys \ifthirdargument \ConvertConstantAfter\doifnot{#3}\v!none {\ifx#3\relax \else \def#3##1{\getvalue{\??so:#1:##1}} \fi}% \setvalue{#1}{\dotripleempty\docomplexsort[\??so:#1:][#1]}% \else \setvalue{#1}{\dotripleempty\docomplexsort[][#1]}% \fi \addutilityreset{#1}% \presetheadtext[#2=\Word{#2}]% after \ifthirdargument -) \setvalue{\e!setup#2\e!endsetup}[##1]{\getparameters[\??so#1][##1]}% to be obsolete \setvalue{\s!set#1}{\dosetsort{#1}}% \setvalue{\s!reset#1}{\doresetsort{#1}}% \setvalue{\e!load#2}{\doloadsort{#1}{#2}}% \setvalue{\s!check#1}##1{\checkdefined{sort}{#1}{##1}}% \setvalue{\e!place\e!listof#2}{\doplacelistofsorts{#1}}% \setvalue{\e!complete\e!listof#2}{\docompletelistofsorts{#1}{#2}}} \def\definesorting {\dotripleempty\dodefinesorting} %D Here we define a support macro that can sort simple comma %D separated lists. It's a multi-list variant of a prototype %D written by Taco. \def\processlistofsorts[#1]% {\doutilities{#1}\jobname{#1}\relax\relax} \newcounter\nofsortedalphalists \def\sortalphacommacommand#1% {\begingroup \doglobal\increment\nofsortedalphalists \edef\currentsortedalphalist{alpha:\nofsortedalphalists}% \definesorting[\currentsortedalphalist][\currentsortedalphalist]% \processcommacommand[#1]{\getvalue\currentsortedalphalist}% \global\let\sortedcommalist\empty \def\makesortedlist##1{\doglobal\appendtocommalist{##1}\sortedcommalist}% \setupsorting[\currentsortedalphalist][\c!criterium=\v!all,\c!command=\makesortedlist]% \processlistofsorts[\currentsortedalphalist]% \endgroup \dodoglobal\let#1\sortedcommalist} % \starttext % \def\whatever{a,b,q,d,r,f} \sortalphacommacommand\whatever \whatever \endgraf % \def\whatever{ax,bx,qx,dx,rx,fx} \sortalphacommacommand\whatever \whatever \endgraf % \stoptext %D Presets. \definesynonyms [\v!abbreviation] [\v!abbreviations] [\infull] \setupsynonyms [\v!abbreviation] [\c!textstyle=\v!capital, \c!textcolor=, \c!synonymstyle=, \c!synonymcolor=, \c!headstyle=, \c!headcolor=, \c!location=\v!left, \c!width=5em, \c!state=\v!start] \definesorting [\v!logo] [\v!logos] % no [\logogram] \definesynonyms [\v!unit] [\v!units] [\unitmeaning] \setupsynonyms [\v!unit] [\c!textstyle=\dimension] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mnl.mkii0000644000175000017500000003071411571377075024333 0ustar norbertnorbert\setinterfacemessage{references}{1}{onbekende verwijzing --} \setinterfacemessage{references}{30}{onbekend object --} \setinterfacemessage{references}{3}{type verwijzing -- onbekend} \setinterfacemessage{references}{2}{dubbele verwijzing -- op pagina --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{verboden verwijzing --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{verwijzingen} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{dubbel object --} \setinterfacemessage{references}{21}{document -- geladen} \setinterfacemessage{references}{22}{document -- is niet interactief} \setinterfacemessage{references}{23}{onduidelijke verwijzing -- (prefix=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{nummer --} \setinterfacemessage{handlings}{1}{font afhandeling --} \setinterfacemessage{handlings}{3}{onbekende font afhandeling --} \setinterfacemessage{handlings}{2}{font afhandeling -- wordt geladen} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{systeem} \setinterfacemessage{systems}{41}{externe file -- in groep -- bestaat niet} \setinterfacemessage{systems}{9}{-- niet gevonden/geplaatst} \setinterfacemessage{systems}{91}{papierlade --} \setinterfacemessage{systems}{8}{nieuwe versie hulpfile, tweede run nodig} \setinterfacemessage{systems}{21}{de hulpfile is niet geladen} \setinterfacemessage{systems}{20}{betekenissen (sorteren) van -- geladen} \setinterfacemessage{systems}{5}{module -- geladen} \setinterfacemessage{systems}{4}{commando -- is al gedefinieerd} \setinterfacemessage{systems}{27}{Versie} \setinterfacemessage{systems}{26}{Registers} \setinterfacemessage{systems}{25}{Verwijzingen} \setinterfacemessage{systems}{24}{Plaatsblokken} \setinterfacemessage{systems}{1}{laden hulpfile uitgesteld (typemode)} \setinterfacemessage{systems}{23}{-- gearrangeerd op --} \setinterfacemessage{systems}{22}{gebruik een goede hulpfile} \setinterfacemessage{systems}{2}{-- geladen} \setinterfacemessage{systems}{19}{betekenissen (synoniemen) van -- geladen} \setinterfacemessage{systems}{18}{synoniem -- -- bestaat niet} \setinterfacemessage{systems}{7}{module -- reeds geladen} \setinterfacemessage{systems}{6}{geen module -- gevonden} \setinterfacemessage{systems}{14}{geforceerde paginaovergang in lijst voor --} \setinterfacemessage{systems}{15}{wegschrijven buffer --} \setinterfacemessage{systems}{16}{inlezen buffer --} \setinterfacemessage{systems}{17}{verbatim inlezen buffer --} \setinterfacemessage{systems}{13}{markering -- gedefinieerd --} \setinterfacemessage{systems}{12}{de hulpfile is niet gesorteerd, gebruik texutil} \setinterfacemessage{systems}{11}{aanmaken basale hulpfile} \setinterfacemessage{systems}{10}{gebruik geen em in --} \setinterfacemessage{floatblocks}{1}{-- hernummerd / -- => --} \setinterfacemessage{floatblocks}{3}{-- verplaatst} \setinterfacemessage{floatblocks}{2}{-- bewaard} \setinterfacemessage{floatblocks}{5}{volgorde aangepast} \setinterfacemessage{floatblocks}{4}{-- geplaatst} \setinterfacemessage{floatblocks}{7}{maximaal -- onder} \setinterfacemessage{floatblocks}{6}{maximaal -- boven} \setinterfacemessage{floatblocks}{9}{volgorde verstoord} \setinterfacemessage{floatblocks}{8}{minder dan -- regels} \setinterfacemessage{floatblocks}{title}{plaatsblokken} \setinterfacemessage{floatblocks}{13}{er is niets te splitsen} \setinterfacemessage{floatblocks}{12}{niet gedefinieerd} \setinterfacemessage{floatblocks}{11}{geen blok opgegeven} \setinterfacemessage{floatblocks}{10}{-- begrensd} \setinterfacemessage{interactions}{1}{aspect ratio -- x -- (b x h)} \setinterfacemessage{interactions}{3}{niet actief} \setinterfacemessage{interactions}{2}{actief} \setinterfacemessage{interactions}{5}{onbekend attachment --} \setinterfacemessage{interactions}{4}{geen paginasynchronisatie (--) in hmode} \setinterfacemessage{interactions}{6}{attachment file -- bestaat niet} \setinterfacemessage{interactions}{title}{interactie} \setinterfacemessage{interactions}{21}{-- code tussengevoegd} \setinterfacemessage{regimes}{1}{regime --} \setinterfacemessage{regimes}{3}{onbekend regime --} \setinterfacemessage{regimes}{2}{regime -- wordt geladen} \setinterfacemessage{regimes}{title}{regime} \setinterfacemessage{structures}{1}{begin van sectieblok --} \setinterfacemessage{structures}{title}{structuur} \setinterfacemessage{structures}{2}{eind van sectieblok --} \setinterfacemessage{linguals}{1}{afbreekpatronen -- voor -- geladen (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{afbreekdefinities -- voor -- geladen (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{geen afbreekpatronen -- voor -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{afbreekpatronen voor -- niet geladen} \setinterfacemessage{linguals}{4}{geen afbreekdefinities -- voor -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{taal specifieke opties [--] introduceren een skip van --} \setinterfacemessage{linguals}{6}{taal -- is niet gedefinieerd} \setinterfacemessage{linguals}{9}{taal -- is actief} \setinterfacemessage{linguals}{8}{taal specifieke opties [--] naadloos toegevoegd} \setinterfacemessage{linguals}{title}{taal} \setinterfacemessage{linguals}{10}{patronen --geladen} \setinterfacemessage{verbatims}{1}{file -- bestaat niet} \setinterfacemessage{verbatims}{title}{typen} \setinterfacemessage{filters}{1}{filter -- wordt geladen} \setinterfacemessage{filters}{title}{filter} \setinterfacemessage{filters}{2}{onbekend filter --} \setinterfacemessage{textblocks}{1}{nieuwe versie, tweede run nodig} \setinterfacemessage{textblocks}{3}{inlezen blokken uit --} \setinterfacemessage{textblocks}{2}{wegschrijven blokken naar --} \setinterfacemessage{textblocks}{5}{-- niet verborgen} \setinterfacemessage{textblocks}{4}{er is een tweede run nodig} \setinterfacemessage{textblocks}{7}{-- verborgen} \setinterfacemessage{textblocks}{6}{-- verborgen en verwerkt} \setinterfacemessage{textblocks}{9}{-- niet gehandhaafd} \setinterfacemessage{textblocks}{8}{-- gehandhaafd} \setinterfacemessage{textblocks}{title}{tekstblokken} \setinterfacemessage{textblocks}{12}{-- overgeslagen} \setinterfacemessage{textblocks}{11}{-- geladen en geplaatst} \setinterfacemessage{textblocks}{10}{-- geladen en verwerkt} \setinterfacemessage{encodings}{1}{codering --} \setinterfacemessage{encodings}{3}{onbekende codering --} \setinterfacemessage{encodings}{2}{codering -- wordt geladen} \setinterfacemessage{encodings}{title}{encoding} \setinterfacemessage{columns}{1}{maximaal -- kolommen} \setinterfacemessage{columns}{3}{probleempje, probeer [balanceren=nee]} \setinterfacemessage{columns}{2}{gebruik eventueel \string\filbreak} \setinterfacemessage{columns}{5}{plaatsblok onder nog niet mogelijk} \setinterfacemessage{columns}{4}{plaatsblok boven nog niet mogelijk} \setinterfacemessage{columns}{7}{balanceren afgebroken na 100 stappen} \setinterfacemessage{columns}{6}{-- plaatsblok(en) opgeschort} \setinterfacemessage{columns}{9}{uitlijnen controleren!} \setinterfacemessage{columns}{8}{gebalanceerd in -- stap(pen)} \setinterfacemessage{columns}{title}{kolommen} \setinterfacemessage{columns}{13}{breed figuur geplaatst boven kolommen} \setinterfacemessage{columns}{12}{plaatsblok verplaatst naar volgende kolom / --} \setinterfacemessage{columns}{11}{plaatsblok te breed voor kolom} \setinterfacemessage{columns}{10}{(minder dan) 1 regel over} \setinterfacemessage{symbols}{1}{symboolset -- wordt geladen} \setinterfacemessage{symbols}{title}{symbolen} \setinterfacemessage{files}{1}{file synoniem -- is al in gebruik voor --} \setinterfacemessage{files}{title}{files} \setinterfacemessage{versions}{1}{er mankeert een @+} \setinterfacemessage{versions}{3}{geselecteerde pagina's: --} \setinterfacemessage{versions}{2}{markeren pagina's} \setinterfacemessage{versions}{title}{versie} \setinterfacemessage{specials}{1}{-- geladen} \setinterfacemessage{specials}{3}{-- gereset} \setinterfacemessage{specials}{2}{verdere nesting is niet toegestaan --} \setinterfacemessage{specials}{5}{definitiefile -- wordt geladen} \setinterfacemessage{specials}{4}{commando -- bestaat niet} \setinterfacemessage{specials}{7}{onbekende driver --} \setinterfacemessage{specials}{6}{nesting is niet toegestaan} \setinterfacemessage{specials}{title}{specials} \setinterfacemessage{layouts}{1}{teksthoogte aangepast met -- op pagina --} \setinterfacemessage{layouts}{3}{-- maal tekst plaatsen uitstellen} \setinterfacemessage{layouts}{2}{-- maal uitgestelde tekst tussengevoegd} \setinterfacemessage{layouts}{5}{margeblokken inactief} \setinterfacemessage{layouts}{4}{margeblokken actief} \setinterfacemessage{layouts}{7}{beeldmerken berekenen} \setinterfacemessage{layouts}{6}{subpagina reeks -- verwerkt (aantal --)} \setinterfacemessage{layouts}{9}{momenteel maximaal -- niveaus in opsommingen} \setinterfacemessage{layouts}{8}{achtergronden berekenen} \setinterfacemessage{layouts}{title}{layout} \setinterfacemessage{layouts}{11}{interlinie -- niet toegestaan in gridmode} \setinterfacemessage{layouts}{10}{-- en -- tellen niet op tot 1.0} \setinterfacemessage{fonts}{1}{codering --} \setinterfacemessage{fonts}{3}{onbekende variant --} \setinterfacemessage{fonts}{2}{variant -- wordt geladen} \setinterfacemessage{fonts}{5}{stijl -- is niet gedefinieerd} \setinterfacemessage{fonts}{4}{korps -- is niet gedefinieerd} \setinterfacemessage{fonts}{7}{onbekend formaat --} \setinterfacemessage{fonts}{6}{-- wordt geladen} \setinterfacemessage{fonts}{14}{korps -- is gedefinieerd (kan beter globaal plaatsvinden)} \setinterfacemessage{fonts}{8}{stijl -- gedefinieerd} \setinterfacemessage{fonts}{title}{korps} \setinterfacemessage{fonts}{10}{onbekende font file --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{globaal bestand --} \setinterfacemessage{databases}{2}{lokaal bestand --} \setinterfacemessage{databases}{4}{onbekend bestand --} \setinterfacemessage{databases}{title}{database} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{script set -- wordt geladen} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{onbekende preamble --} \setinterfacemessage{check}{1}{'=' ontbreekt of zonder {} na '--' in regel --} \setinterfacemessage{check}{3}{-- -- vervangt een macro, gebruik HOOFDLETTERS!} \setinterfacemessage{check}{2}{-- argument(en) verwacht in regel --} \setinterfacemessage{check}{title}{controle} \setinterfacemessage{metapost}{1}{metapost bibliotheek -- wordt geladen} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{figuur -- is niet te vinden} \setinterfacemessage{figures}{3}{maten van -- worden extern vastgesteld} \setinterfacemessage{figures}{2}{figuur -- wordt niet preset} \setinterfacemessage{figures}{5}{maten van -- zijn onbekend} \setinterfacemessage{figures}{4}{maten van -- geladen uit figuurfile zelf} \setinterfacemessage{figures}{6}{maten van -- berekend door rlxtools} \setinterfacemessage{figures}{8}{figuurobject -- wordt opnieuw gebruikt} \setinterfacemessage{figures}{title}{figuren} \setinterfacemessage{colors}{1}{systeem -- is globaal actief} \setinterfacemessage{colors}{3}{-- is niet gedefinieerd --} \setinterfacemessage{colors}{2}{systeem -- is lokaal actief} \setinterfacemessage{colors}{5}{onbekend systeem --} \setinterfacemessage{colors}{4}{systeem -- wordt geladen} \setinterfacemessage{colors}{7}{palet -- is niet beschikbaar} \setinterfacemessage{colors}{6}{palet -- is beschikbaar} \setinterfacemessage{colors}{9}{-- kleurruimte wordt niet ondersteund} \setinterfacemessage{colors}{8}{specificatie -- bij -- wordt zwart} \setinterfacemessage{colors}{title}{kleur} \setinterfacemessage{colors}{12}{-- is geregistreerd} \setinterfacemessage{colors}{11}{kleur wordt vertaald in grijs} \setinterfacemessage{colors}{10}{-- kleurruimte wordt ondersteund} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/font-ldr.lua0000644000175000017500000000337312130411274024122 0ustar norbertnorbertif not modules then modules = { } end modules ['font-ldr'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This module provides an experimental replacement for fontloader.to_table -- but is not used that much. local fields = fontloader.fields if fields then local glyphfields local function get_glyphs(r) local t = { } local g = r.glyphs for i=1,r.glyphmax-1 do local gi = g[i] if gi then if not glyphfields then glyphfields = fields(gi) end local h = { } for i=1,#glyphfields do local s = glyphfields[i] h[s] = gi[s] end t[i] = h end end return t end local function to_table(r) local f = fields(r) if f then local t = { } for i=1,#f do local fi = f[i] local ri = r[fi] if not ri then -- skip elseif fi == "glyphs" then t.glyphs = get_glyphs(r) elseif fi == "subfonts" then t[fi] = ri ri.glyphs = get_glyphs(ri) else t[fi] = r[fi] end end return t end end -- currently glyphs, subfont-glyphs and the main table are userdata function fonts.to_table(raw) return to_table(raw) end else fonts.to_table = fontloader.to_table end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-not.mkiv0000644000175000017500000000332712130411274024273 0ustar norbertnorbert%D \module %D [ file=page-nnt, %D version=2002.04.16, %D title=\CONTEXT\ Page Macros, %D subtitle=Footnotes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Footnotes} %D This is an old mechanism that will be replaced as soon as the multicolumn %D code is redone. %D We've moved some footnote handling to a separate page module. The macros below %D are used in the single and multi column page handlers and permit mixed usage of %D column and page notes. \unprotect \def\checkbegincolumnfootnotes % should happen inside otr {\ifcase\c_strc_notes_page_location \erasenotebackup \else \flushnotes \savenotecontent \fi \savenotedata} \def\checkendcolumnfootnotes {\restorenotedata \ifcase\c_strc_notes_page_location\else \restorenotecontent \fi} \let\checksinglecolumnfootnotes\relax \newdimen\totalinsertionheight \unexpanded\def\settotalinsertionheight {\calculatetotalnoteheight \totalinsertionheight\dimexpr \totalnoteheight +\page_insert_insertion_height\s!topfloat +\page_insert_insertion_height\s!bottomfloat \relax} % hm \def\checkbegincolumnfootnotes % should happen inside otr {\ifcase\c_strc_notes_page_location \erasenotebackup \else \flushnotes \savenotecontent \fi \savenotedata} \def\checkendcolumnfootnotes {\restorenotedata \ifinsidecolumns \ifcase\c_strc_notes_page_location\else \restorenotecontent \fi \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-syn.mkiv0000644000175000017500000002454012130411274024343 0ustar norbertnorbert%D \module %D [ file=strc-syn, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Synonyms and Sorting, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Synonyms and Sorting} \registerctxluafile{strc-syn}{1.001} % todo: add 'define only' option to descriptions, then add sorting (also based on key) % and call to definition -> replaces this module \unprotect \ifdefined\dotagsynonym \else \let\dotagsynonym\relax \fi \ifdefined\dotagsorting \else \let\dotagsorting\relax \fi % general help, can be shared % simplifiedcommands -> flag in lua % % expansion % criterium -> when start, then flag in list % command-> wanneer? % state -> flagging enabled % conversion ? % todo: register xml mode etc % split but common in lua \def\preprocessexpansion#1#2#3#4% {\ifx#1\s!xml \xmlstartraw \xdef#2{#4}% \xmlstopraw \globallet#3\s!xml \else \ifx#1\v!yes \xdef#2{#4}% \else \xdef#2{\detokenize{#4}}% \fi \globallet#3\s!tex \fi} \installcorenamespace{synonym} \installsimplecommandhandler \??synonym {synonym} \??synonym \let\setupsynonyms\setupsynonym \setupsynonyms [\c!state=\v!start, %\c!synonymstyle=, %\c!textstyle=, %\c!headstyle=, %\c!headcolor=, %\c!criterium=, \c!location=\v!left, \c!width=5\emwidth, \c!distance=\zeropoint, %\c!sample=, %\c!hang=, %\c!align=, %\c!before=, %\c!inbetween=, %\c!after=, \c!indentnext=\v!no, %\c!expansion=, \c!method=, \s!language=\currentmainlanguage] \unexpanded\def\definesynonyms {\doquadrupleempty\dodefinesynonyms} \def\dodefinesynonyms[#1][#2][#3][#4]% name plural \meaning \use {\edef\currentsynonym{#1}% \iffourthargument \unexpanded\def#4##1{\doinsertsynonym{#1}{##1}}% name tag \ifthirdargument \unexpanded\def#3##1{\doinsertsynonymmeaning{#1}{##1}}% \meaning \fi \setuvalue{#1}{\definesynonym[\v!no][#1]}% \name \else \ifthirdargument \unexpanded\def#3##1{\doinsertsynonymmeaning{#1}{##1}}% \meaning \fi \setuvalue{#1}{\definesynonym[\v!yes][#1]}% \name \fi \checksynonymparent \setupcurrentsynonym[\s!single={#1},\s!multi={#2}]% \presetheadtext[#2=\Word{#2}]% changes the \if...argument \setvalue{\e!setup #2\e!endsetup}{\setupsynonym[#1]}% obsolete definition \setvalue{\e!place \e!listof#2}{\placelistofsynonyms[#1]}% accepts extra argument \setvalue{\e!complete\e!listof#2}{\completelistofsynonyms[#1]}} \unexpanded\def\definesynonym {\dotripleempty\dodefinesynonym} \def\dodefinesynonym[#1][#2][#3]#4#5% {\begingroup \edef\currentsynonym{#2}% \edef\currentsynonymtag{#3}% \ifx\currentsynonymtag\empty \edef\currentsynonymtag{#4}% \fi \ifx\currentsynonymtag\empty % todo: error message \else \edef\currentsynonymexpansion{\synonymparameter\c!expansion}% \preprocessexpansion\currentsynonymexpansion\currentsynonymtext \currentsynonymcoding{#4}% \preprocessexpansion\currentsynonymexpansion\currentsynonymmeaning\currentsynonymcoding{#5}% \ctxlua{structures.synonyms.register("\currentsynonym", "synonym", { metadata = { catcodes = \the\catcodetable, coding = "\currentsynonymcoding", xmlroot = \ifx\currentsynonymcoding\s!xml "\xmldocument" \else nil \fi, }, definition = { tag = "\currentsynonymtag", synonym = \!!bs\currentsynonymtext\!!es, meaning = \!!bs\currentsynonymmeaning\!!es, used = false, } })}% \doif{#1}\v!yes{\setuxvalue\currentsynonymtag{\noexpand\doinsertsynonym{\currentsynonym}{\currentsynonymtag}}}% \fi \endgroup} \unexpanded\def\registersynonym {\dodoubleargument\doregistersynonym} \def\doregistersynonym[#1][#2]% {\ctxlua{structures.synonyms.registerused("#1","#2")}} \unexpanded\def\doinsertsynonymmeaning#1#2% name tag {\begingroup \def\currentsynonym{#1}% \usesynonymstyleandcolor\c!textstyle\c!textcolor \synonymparameter\c!textcommand{\ctxlua{structures.synonyms.meaning("#1","#2")}}% \endgroup} \unexpanded\def\doinsertsynonym#1#2% name tag {\begingroup \def\currentsynonym{#1}% \def\currentsynonymtag{#2}% \dostarttagged\t!synonym\currentsynonym \dotagsynonym \usesynonymstyleandcolor\c!synonymstyle\c!synonymcolor \synonymparameter\c!synonymcommand{\ctxlua{structures.synonyms.synonym("#1","#2")}}% \dostoptagged \normalexpanded{\endgroup\synonymparameter\c!next}} \unexpanded\def\placelistofsynonyms {\dodoubleempty\doplacelistofsynonyms} \def\doplacelistofsynonyms[#1][#2]% {\begingroup \def\currentsynonym{#1}% \definedescription % todo, per class [syndef] [\c!location=\synonymparameter\c!location, \c!width=\synonymparameter\c!width, \c!distance=\synonymparameter\c!distance, \c!sample=\synonymparameter\c!sample, \c!hang=\synonymparameter\c!hang, \c!align=\synonymparameter\c!align, \c!before=\synonymparameter\c!before, \c!inbetween=\synonymparameter\c!inbetween, \c!after=\synonymparameter\c!after, \c!indentnext=\synonymparameter\c!indentnext, \c!headstyle=\synonymparameter\c!textstyle, \c!headcolor=\synonymparameter\c!textcolor, \c!style=, \c!color=. #2]% \startpacked \ctxlua{structures.synonyms.process('#1',{ criterium = "\synonymparameter\c!criterium", language = "\synonymparameter\s!language", method = "\synonymparameter\c!method", })}% \stoppacked \endgroup} \def\completelistofsynonyms {\dodoubleempty\docompletelistofsynonyms} \def\docompletelistofsynonyms[#1][#2]% {\edef\currentsynonym{#1}% \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\synonymparameter\s!multi}},\c!reference=#1]}% \doplacelistofsynonyms[#1][#2]% \page \stopnamedsection} \let\startsynonymoutput \relax \let\stopsynonymoutput \relax \let\startsynonymsection\gobbleoneargument \let\stopsynonymsection \relax \unexpanded\def\synonymentry#1#2#3#4% {\syndef{#3}#4\par} %D Sorting (a simplified version of synonym). \installcorenamespace{sorting} \installsimplecommandhandler \??sorting {sorting} \??sorting \setupsorting [\c!state=\v!start, %\c!command=, % we test for defined ! %\c!criterium=, %\c!style=, %\c!before=, \c!after=\endgraf, %\c!expansion=, \c!method=, \s!language=\currentmainlanguage] \unexpanded\def\definesorting {\dotripleempty\dodefinesorting} % if #3=\relax or \v!none, then no command but still protected \def\dodefinesorting[#1][#2][#3]% {\edef\currentsorting{#1}% \ifthirdargument \doifnot{#3}\v!none {\ifx#3\relax \else \unexpanded\def#3##1{\doinsertsort{#1}{##1}}% \fi}% \setuvalue{#1}{\definesort[\v!no][#1]}% \else \setuvalue{#1}{\definesort[\v!yes][#1]}% \fi \checksortingparent \setupcurrentsorting[\s!multi={#2}]% \presetheadtext[#2=\Word{#2}]% after \ifthirdargument -) \setvalue{\e!setup #2\e!endsetup}{\setupsorting[#1]}% obsolete definition \setvalue{\e!place \e!listof#2}{\placelistofsorts[#1]}% \setvalue{\e!complete\e!listof#2}{\completelistofsorts[#1]}} \unexpanded\def\definesort {\dotripleempty\dodefinesort} \def\dodefinesort[#1][#2][#3]#4% {\begingroup \edef\currentsorting{#2}% \edef\currentsortingtag{#3}% \ifx\currentsortingtag\empty \edef\currentsortingtag{#4}% \fi \ifx\currentsortingtag\empty % todo: error message \else \edef\currentsortingexpansion{\sortingparameter\c!expansion}% \preprocessexpansion\currentsortingexpansion\currentsortingtext\currentsortingcoding{#4}% \ctxlua{structures.synonyms.register("\currentsorting", "sorting", { metadata = { catcodes = \the\catcodetable, coding = "\currentsortingcoding", xmlroot = \ifx\currentsortingcoding\s!xml "\xmldocument" \else nil \fi, }, definition = { tag = "\currentsortingtag", synonym = \!!bs\currentsortingtext\!!es, % used = false, } })}% \doif{#1}\v!yes{\setuxvalue\currentsortingtag{\noexpand\doinsertsort{\currentsorting}{\currentsortingtag}}}% \fi \endgroup} \unexpanded\def\doinsertsort#1#2% name tag {\begingroup % no kap currently, of .. we need to map cap onto WORD \edef\currentsorting{#1}% \def\currentsortingtag{#2}% \dostarttagged\t!sorting\currentsorting \dotagsorting \usesortingstyleandcolor\c!style\c!color \ctxlua{structures.synonyms.synonym("#1","#2")}% \dostoptagged \normalexpanded{\endgroup\sortingparameter\c!next}} \unexpanded\def\registersort {\dodoubleargument\doregistersort} \def\doregistersort[#1][#2]% {\ctxlua{structures.synonyms.registerused("#1","#2")}} % before after % % maybe just 'commandset' and then combine \unexpanded\def\placelistofsorts {\dodoubleempty\doplacelistofsorts} \def\doplacelistofsorts[#1][#2]% NOG EEN RUWE VERSIE MAKEN ZONDER WITRUIMTE ETC ETC {\begingroup \def\currentsorting{#1}% \setupcurrentsorting[#2]% \startpacked \ctxlua{structures.synonyms.process('#1',{ criterium = "\sortingparameter\c!criterium", language = "\sortingparameter\s!language", method = "\sortingparameter\c!method", })}% \stoppacked \endgroup} \unexpanded\def\completelistofsorts {\dodoubleempty\docompletelistofsorts} \def\docompletelistofsorts[#1][#2]% {\edef\currentsorting{#1}% \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\sortingparameter\s!multi}},\c!reference=#1]}% \doplacelistofsorts[#1][#2]% \page \stopnamedsection} \let\startsortingoutput \relax \let\stopsortingoutput \relax \let\startsortingsection\gobbleoneargument \let\stopsortingsection \relax \def\sortingentry#1#2#3#4% #4 is meaning but empty here {\doifelsenothing{\sortingparameter\c!command} {\begingroup\usesortingstyleandcolor\c!style\c!color#3\endgroup\par} % todo {\sortingparameter\c!command{#1}{#2}{#3}}} %D Presets. \definesynonyms [\v!abbreviation] [\v!abbreviations] [\infull] \setupsynonyms [\v!abbreviation] [\c!textstyle=\v!capital] \definesorting [\v!logo] [\v!logos] % [\logogram] % no \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-acc.lua0000644000175000017500000001045512130411274024045 0ustar norbertnorbertif not modules then modules = { } end modules ['node-acc'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local nodes, node = nodes, node local nodecodes = nodes.nodecodes local tasks = nodes.tasks local traverse_nodes = node.traverse local traverse_id = node.traverse_id local copy_node = node.copy local free_nodelist = node.flush_list local glue_code = nodecodes.glue local kern_code = nodecodes.kern local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local a_characters = attributes.private("characters") local threshold = 65536 -- todo: nbsp etc -- todo: collapse kerns local function injectspaces(head) local p local n = head while n do local id = n.id if id == glue_code then -- todo: check for subtype related to spacing (13/14 but most seems to be 0) --~ if n.spec.width > 0 then -- threshold if p and p.id == glyph_code then local g = copy_node(p) local c = g.components if c then -- it happens that we copied a ligature free_nodelist(c) g.components = nil g.subtype = 256 end local a = n[a_characters] local s = copy_node(n.spec) g.char, n.spec = 32, s p.next, g.prev = g, p g.next, n.prev = n, g s.width = s.width - g.width if a then g[a_characters] = a end s[a_characters] = 0 n[a_characters] = 0 end --~ end elseif id == hlist_code or id == vlist_code then injectspaces(n.list,attribute) -- elseif id == kern_code then -- the backend already collapses -- local first = n -- while true do -- local nn = n.next -- if nn and nn.id == kern_code then -- -- maybe we should delete kerns but who cares at this stage -- first.kern = first.kern + nn.kern -- nn.kern = 0 -- n = nn -- else -- break -- end -- end end p = n n = n.next end return head, true end nodes.handlers.accessibility = injectspaces -- todo: --~ local a_hyphenated = attributes.private('hyphenated') --~ --~ local hyphenated, codes = { }, { } --~ --~ local function compact(n) --~ local t = { } --~ for n in traverse_id(glyph_code,n) do --~ t[#t+1] = utfchar(n.char) -- check for unicode --~ end --~ return concat(t,"") --~ end --~ --~ local function injectspans(head) --~ for n in traverse_nodes(head) do --~ local id = n.id --~ if id == disc then --~ local r, p = n.replace, n.pre --~ if r and p then --~ local str = compact(r) --~ local hsh = hyphenated[str] --~ if not hsh then --~ hsh = #codes + 1 --~ hyphenated[str] = hsh --~ codes[hsh] = str --~ end --~ n[a_hyphenated] = hsh --~ end --~ elseif id == hlist_code or id == vlist_code then --~ injectspans(n.list) --~ end --~ end --~ return head, true --~ end --~ --~ nodes.injectspans = injectspans --~ --~ tasks.appendaction("processors", "words", "nodes.injectspans") --~ --~ local function injectspans(head) --~ for n in traverse_nodes(head) do --~ local id = n.id --~ if id == disc then --~ local a = n[a_hyphenated] --~ if a then --~ local str = codes[a] --~ local b = new_pdfliteral(format("/Span << /ActualText %s >> BDC", lpdf.tosixteen(str))) --~ local e = new_pdfliteral("EMC") --~ node.insert_before(head,n,b) --~ node.insert_after(head,n,e) --~ end --~ elseif id == hlist_code or id == vlist_code then --~ injectspans(n.list) --~ end --~ end --~ end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-09.mkii0000644000175000017500000000362711754241457024052 0ustar norbertnorbert%D \module %D [ file=x-fig-09, %D version=2002.06.27, %D title=\CONTEXT\ Style File, %D subtitle=Resource Reporting (2), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[res-00] \defineXMLenvironment [rl:library] {\starttext} {\stoptext} \defineXMLenvironment [rl:usage] {\bgroup} {\doifnot{\XMLflush{rl:file}}{dummy}{\setups[rl:usage]}% \egroup} \defineXMLsave [rl:base] % base \defineXMLsave [rl:type] % figure \defineXMLsave [rl:state] % found|missing \defineXMLsave [rl:label] % label \defineXMLsave [rl:file] % filename \defineXMLsave [rl:suffix] % filesuffix \defineXMLsave [rl:comment] % text \defineXMLsave [rl:width] % width in pt \defineXMLsave [rl:height] % height in pt \defineXMLsave [rl:page] % page from file \def\XMLbpentry#1% {\PointsToWholeBigPoints{\XMLflush{#1}}\temp\temp bp} % \def\XMLrlentry#1#2#3% % {\doiftextelse{\XMLflush{#2}} % {\NC\bf#1\NC\XMLflush{#2}\doif{#3}{1}{ (\XMLbpentry{#2})}\NC\NR} % {}} \def\XMLrlentry#1#2#3% {\tableiftextelse{\XMLflush{#2}} {\NC\bf#1\NC\XMLflush{#2}\doif{#3}{1}{ (\XMLbpentry{#2})}\NC\NR}{}} \startsetups[rl:usage] % by using a dedicated tabulation, we permit usage in dutch interface \definetabulate[XMLRLG][|lw(4.5em)|p|] \startXMLRLG \XMLrlentry {base} {rl:base} {0} \XMLrlentry {type} {rl:type} {0} \XMLrlentry {state} {rl:state} {0} \XMLrlentry {file} {rl:file} {0} \XMLrlentry {label} {rl:label} {0} \XMLrlentry {suffix} {rl:suffix} {0} \XMLrlentry {page} {rl:page} {0} \XMLrlentry {width} {rl:width} {1} \XMLrlentry {height} {rl:height} {1} \XMLrlentry {comment}{rl:comment}{0} \stopXMLRLG \stopsetups \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mix.lua0000644000175000017500000005253412161703335024115 0ustar norbertnorbertif not modules then modules = { } end modules ["page-mix"] = { version = 1.001, comment = "companion to page-mix.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- inserts.getname(name) -- local node, tex = node, tex -- local nodes, interfaces, utilities = nodes, interfaces, utilities -- local trackers, logs, storage = trackers, logs, storage -- local number, table = number, table local concat = table.concat local nodecodes = nodes.nodecodes local gluecodes = nodes.gluecodes local nodepool = nodes.pool local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local kern_code = nodecodes.kern local glue_code = nodecodes.glue local penalty_code = nodecodes.penalty local insert_code = nodecodes.ins local mark_code = nodecodes.mark local new_hlist = nodepool.hlist local new_vlist = nodepool.vlist local new_glue = nodepool.glue local hpack = node.hpack local vpack = node.vpack local freenode = node.free local texbox = tex.box local texskip = tex.skip local texdimen = tex.dimen local points = number.points local settings_to_hash = utilities.parsers.settings_to_hash local variables = interfaces.variables local v_yes = variables.yes local v_global = variables["global"] local v_local = variables["local"] local v_columns = variables.columns local trace_state = false trackers.register("mixedcolumns.trace", function(v) trace_state = v end) local trace_detail = false trackers.register("mixedcolumns.detail", function(v) trace_detail = v end) local report_state = logs.reporter("mixed columns") pagebuilders = pagebuilders or { } pagebuilders.mixedcolumns = pagebuilders.mixedcolumns or { } local mixedcolumns = pagebuilders.mixedcolumns local forcedbreak = -123 -- initializesplitter(specification) -- cleanupsplitter() -- Inserts complicate matters a lot. In order to deal with them well, we need to -- distinguish several cases. -- -- (1) full page columns: firstcolumn, columns, lastcolumn, page -- (2) mid page columns : firstcolumn, columns, lastcolumn, page -- -- We need to collect them accordingly. local function collectinserts(result,nxt,nxtid) local inserts, currentskips, nextskips, inserttotal = { }, 0, 0, 0 while nxt do if nxtid == insert_code then inserttotal = inserttotal + nxt.height + nxt.depth local s = nxt.subtype local c = inserts[s] if not c then c = { } inserts[s] = c local width = texskip[s].width if not result.inserts[s] then currentskips = currentskips + width end nextskips = nextskips + width end c[#c+1] = nxt if trace_detail then report_state("insert of class %s found",s) end elseif nxtid == mark_code then if trace_detail then report_state("mark found") end else break end nxt = nxt.next if nxt then nxtid = nxt.id else break end end return nxt, inserts, currentskips, nextskips, inserttotal end local function appendinserts(ri,inserts) for class, collected in next, inserts do local ric = ri[class] if not ric then -- assign to collected ri[class] = collected else -- append to collected for j=1,#collected do ric[#ric+1] = collected[j] end end end end local function discardtopglue(current,discarded) local size = 0 while current do local id = current.id if id == glue_code then size = size + current.spec.width discarded[#discarded+1] = current current = current.next elseif id == penalty_code then if current.penalty == forcedbreak then discarded[#discarded+1] = current current = current.next while current do local id = current.id if id == glue_code then size = size + current.spec.width discarded[#discarded+1] = current current = current.next else break end end else discarded[#discarded+1] = current current = current.next end else break end end return current, size end local function stripbottomglue(results,discarded) local height = 0 for i=1,#results do local r = results[i] local t = r.tail while t and t ~= r.head do local prev = t.prev if not prev then break end local id = t.id if id == penalty_code then if t.penalty == forcedbreak then break else discarded[#discarded+1] = t r.tail = prev t = prev end elseif id == glue_code then discarded[#discarded+1] = t local width = t.spec.width if trace_state then report_state("columns %s, discarded bottom glue %p",i,width) end r.height = r.height - width r.tail = prev t = prev else break end end if r.height > height then height = r.height end end return height end local function setsplit(specification) -- a rather large function local box = specification.box if not box then report_state("fatal error, no box") return end local list = texbox[box] if not list then report_state("fatal error, no list") return end local head = list.head or specification.originalhead if not head then report_state("fatal error, no head") return end local discarded = { } local originalhead = head local originalwidth = specification.originalwidth or list.width local originalheight = specification.originalheight or list.height local current = head local skipped = 0 local height = 0 local depth = 0 local skip = 0 local options = settings_to_hash(specification.option or "") local stripbottom = specification.alternative == v_local local cycle = specification.cycle or 1 local nofcolumns = specification.nofcolumns or 1 if nofcolumns == 0 then nofcolumns = 1 end local preheight = specification.preheight or 0 local extra = specification.extra or 0 local maxheight = specification.maxheight local optimal = originalheight/nofcolumns if specification.balance ~= v_yes then optimal = maxheight end local target = optimal + extra local overflow = target > maxheight - preheight local threshold = specification.threshold or 0 if overflow then target = maxheight - preheight end if trace_state then report_state("cycle %s, maxheight %p, preheight %p, target %p, overflow %a, extra %p", cycle, maxheight, preheight , target, overflow, extra) end local results = { } for i=1,nofcolumns do results[i] = { head = false, tail = false, height = 0, depth = 0, inserts = { }, delta = 0, } end local column = 1 local line = 0 local result = results[column] local lasthead = nil local rest = nil local function gotonext() if head == lasthead then if trace_state then report_state("empty column %s, needs more work",column) end rest = current return false, 0 else lasthead = head result.head = head if current == head then result.tail = head else result.tail = current.prev end result.height = height result.depth = depth end head = current height = 0 depth = 0 if column == nofcolumns then column = 0 -- nicer in trace rest = head -- lasthead = head return false, 0 else local skipped column = column + 1 result = results[column] current, skipped = discardtopglue(current,discarded) head = current -- lasthead = head return true, skipped end end local function checked(advance,where) local total = skip + height + depth + advance local delta = total - target local state = "same" local okay = false local skipped = 0 local curcol = column if delta > threshold then result.delta = delta okay, skipped = gotonext() if okay then state = "next" else state = "quit" end end if trace_detail then report_state("%-7s > column %s, delta %p, threshold %p, advance %p, total %p, target %p, discarded %p => %a (height %p, depth %p, skip %p)", where,curcol,delta,threshold,advance,total,target,state,skipped,height,depth,skip) end return state, skipped end current, skipped = discardtopglue(current,discarded) if trace_detail and skipped ~= 0 then report_state("check > column 1, discarded %p",skipped) end head = current while current do local id = current.id local nxt = current.next local lastcolumn = column if id == hlist_code or id == vlist_code then line = line + 1 local nxtid = nxt and nxt.id local inserts, currentskips, nextskips, inserttotal = nil, 0, 0, 0 local advance = current.height -- + current.depth if nxt and (nxtid == insert_code or nxtid == mark_code) then nxt, inserts, localskips, insertskips, inserttotal = collectinserts(result,nxt,nxtid) end local state, skipped = checked(advance+inserttotal+currentskips,"line") if trace_state then report_state("%-7s > column %s, state %a, line %s, advance %p, insert %p, height %p","line",column,state,line,advance,inserttotal,height) if skipped ~= 0 then report_state("%-7s > column %s, discarded %p","line",column,skipped) end end if state == "quit" then break else height = height + depth + skip + advance + inserttotal if state == "next" then height = height + nextskips else height = height + currentskips end end depth = current.depth skip = 0 if inserts then appendinserts(result.inserts,inserts) end elseif id == glue_code then local advance = current.spec.width if advance ~= 0 then local state, skipped = checked(advance,"glue") if trace_state then report_state("%-7s > column %s, state %a, advance %p, height %p","glue",column,state,advance,height) if skipped ~= 0 then report_state("%-7s > column %s, discarded %p","glue",column,skipped) end end if state == "quit" then break end height = height + depth + skip depth = 0 skip = height > 0 and advance or 0 end elseif id == kern_code then local advance = current.kern if advance ~= 0 then local state, skipped = checked(advance,"kern") if trace_state then report_state("%-7s > column %s, state %a, advance %p, height %p, state %a","kern",column,state,advance,height) if skipped ~= 0 then report_state("%-7s > column %s, discarded %p","kern",column,skipped) end end if state == "quit" then break end height = height + depth + skip + advance depth = 0 skip = 0 end elseif id == penalty_code then local penalty = current.penalty if penalty == 0 then -- don't bother elseif penalty == forcedbreak then local okay, skipped = gotonext() if okay then if trace_state then report_state("cycle: %s, forced column break (same page)",cycle) if skipped ~= 0 then report_state("%-7s > column %s, discarded %p","penalty",column,skipped) end end else if trace_state then report_state("cycle: %s, forced column break (next page)",cycle) if skipped ~= 0 then report_state("%-7s > column %s, discarded %p","penalty",column,skipped) end end break end else -- todo: nobreak etc ... we might need to backtrack so we need to remember -- the last acceptable break -- club and widow and such i.e. resulting penalties (if we care) end end if lastcolumn == column then nxt = current.next -- can have changed end if nxt then current = nxt elseif head == lasthead then -- to be checked but break needed as otherwise we have a loop if trace_state then report_state("quit as head is lasthead") end break else local r = results[column] r.head = head r.tail = current r.height = height r.depth = depth break end end if not current then if trace_state then report_state("nilling rest") end rest = nil elseif rest == lasthead then if trace_state then report_state("nilling rest as rest is lasthead") end rest = nil end if stripbottom then local height = stripbottomglue(results,discarded) if height > 0 then target = height end end specification.results = results specification.height = target specification.originalheight = originalheight specification.originalwidth = originalwidth specification.originalhead = originalhead specification.targetheight = target or 0 specification.rest = rest specification.overflow = overflow specification.discarded = discarded texbox[specification.box].head = nil return specification end function mixedcolumns.finalize(result) if result then local results = result.results for i=1,result.nofcolumns do local r = results[i] local h = r.head if h then h.prev = nil local t = r.tail if t then t.next = nil else h.next = nil r.tail = h end for c, list in next, r.inserts do local t = { } for i=1,#list do local l = list[i] local h = new_hlist() t[i] = h h.head = l.head h.height = l.height h.depth = l.depth l.head = nil end t[1].prev = nil -- needs checking t[#t].next = nil -- needs checking r.inserts[c] = t end end end end end local splitruns = 0 local function report_deltas(result,str) local t = { } for i=1,result.nofcolumns do t[#t+1] = points(result.results[i].delta or 0) end report_state("%s, cycles %s, deltas % | t",str,result.cycle or 1,t) end function mixedcolumns.setsplit(specification) splitruns = splitruns + 1 if trace_state then report_state("split run %s",splitruns) end local result = setsplit(specification) if result then if result.overflow then if trace_state then report_deltas(result,"overflow") end -- we might have some rest elseif result.rest and specification.balance == v_yes then local step = specification.step or 65536*2 local cycle = 1 local cycles = specification.cycles or 100 while result.rest and cycle <= cycles do specification.extra = cycle * step result = setsplit(specification) or result if trace_state then report_state("cycle: %s.%s, original height %p, total height %p", splitruns,cycle,result.originalheight,result.nofcolumns*result.targetheight) end cycle = cycle + 1 specification.cycle = cycle end if cycle > cycles then report_deltas(result,"too many balancing cycles") elseif trace_state then report_deltas(result,"balanced") end elseif trace_state then report_deltas(result,"done") end return result elseif trace_state then report_state("no result") end end local topskip_code = gluecodes.topskip local baselineskip_code = gluecodes.baselineskip function mixedcolumns.getsplit(result,n) if not result then report_state("flush, column %s, no result",n) return end local r = result.results[n] if not r then report_state("flush, column %s, empty",n) end local h = r.head if not h then return new_glue(result.originalwidth) end h.prev = nil -- move up local strutht = result.strutht local strutdp = result.strutdp local lineheight = strutht + strutdp local v = new_vlist() v.head = h -- local v = vpack(h,"exactly",height) if result.alternative == v_global then -- option result.height = result.maxheight end local ht = 0 local dp = 0 local wd = result.originalwidth local grid = result.grid if grid then ht = lineheight * math.ceil(result.height/lineheight) - strutdp dp = strutdp else ht = result.height dp = result.depth end v.width = wd v.height = ht v.depth = dp if trace_state then local id = h.id if id == hlist_code then report_state("flush, column %s, grid %a, width %p, height %p, depth %p, %s: %s",n,grid,wd,ht,dp,"top line",nodes.toutf(h.list)) else report_state("flush, column %s, grid %a, width %p, height %p, depth %p, %s: %s",n,grid,wd,ht,dp,"head node",nodecodes[id]) end end for c, list in next, r.inserts do -- tex.setbox("global",c,vpack(nodes.concat(list))) -- tex.setbox(c,vpack(nodes.concat(list))) texbox[c] = vpack(nodes.concat(list)) r.inserts[c] = nil end return v end function mixedcolumns.getrest(result) local rest = result and result.rest result.rest = nil -- to be sure return rest end function mixedcolumns.getlist(result) local originalhead = result and result.originalhead result.originalhead = nil -- to be sure return originalhead end function mixedcolumns.cleanup(result) local discarded = result.discarded for i=1,#discarded do freenode(discarded[i]) end result.discarded = { } end -- interface -- local result function commands.mixsetsplit(specification) if result then for k, v in next, specification do result[k] = v end result = mixedcolumns.setsplit(result) else result = mixedcolumns.setsplit(specification) end end function commands.mixgetsplit(n) if result then context(mixedcolumns.getsplit(result,n)) end end function commands.mixfinalize() if result then mixedcolumns.finalize(result) end end function commands.mixflushrest() if result then context(mixedcolumns.getrest(result)) end end function commands.mixflushlist() if result then context(mixedcolumns.getlist(result)) end end function commands.mixstate() context(result and result.rest and 1 or 0) end function commands.mixcleanup() if result then mixedcolumns.cleanup(result) result = nil end end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-set.mkiv0000644000175000017500000001021712161703335024335 0ustar norbertnorbert%D \module %D [ file=type-set, %D version=2005.02.04, % moved from ini/def %D title=\CONTEXT\ Typescript Macros, %D subtitle=Default Settings, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \ifnum\typescriptstate=\plustwo % we store some typescripts in the format % \loadmarkfile{type-def} % \loadmarkfile{type-lua} % \loadmarkfile{type-siz} % \loadmarkfile{type-fbk} % \loadmarkfile{type-imp-latinmodern} % but ... let's make sure that newlines are gone \loadfoundtypescriptfile{type-def.mkiv} \loadfoundtypescriptfile{type-lua.mkiv} \loadfoundtypescriptfile{type-siz.mkiv} \loadfoundtypescriptfile{type-fbk.mkiv} \loadfoundtypescriptfile{type-imp-latinmodern.mkiv} % and not: % \loadtypescriptfile[def] % meant for local usage only % \loadtypescriptfile[fbk] % meant for local usage only % \loadtypescriptfile[lua] % meant for local usage only % \loadtypescriptfile[siz] % meant for local usage only % \usetypescriptfile[latinmodern] \usetypescriptfile[loc] % We want these names preset but they conflict with later loads so from now on % one has to define a proper typeface if they are needed. % % \usetypescript[serif,sans,mono,math] [latin-modern] \else \usetypescriptfile[def] \usetypescriptfile[fbk] \usetypescriptfile[lua] \usetypescriptfile[siz] \usetypescriptfile[latinmodern] \usetypescriptfile[loc] \fi \definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv] \definefilesynonym [type-imp-lucidanova.mkiv] [type-imp-lucida-opentype.mkiv] \definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv] \definefilesynonym [type-imp-palatino.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-courier.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-avantgarde.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-helvetica.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-chancery.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-bookman.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-schoolbook.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-times.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-cursor.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-adventor.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-heros.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-chorus.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-bonum.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-schola.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-pagella.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-termes.mkiv] [type-imp-texgyre.mkiv] \definefilesynonym [type-imp-mscoretimes.mkiv] [type-imp-mscore.mkiv] \definefilesynonym [type-imp-mscorearial.mkiv] [type-imp-mscore.mkiv] \definefilesynonym [type-imp-mscorecourier.mkiv] [type-imp-mscore.mkiv] \definefilesynonym [type-imp-mscoreverdana.mkiv] [type-imp-mscore.mkiv] \definefilesynonym [type-imp-candara.mkiv] [type-imp-cleartype.mkiv] \definefilesynonym [type-imp-consolas.mkiv] [type-imp-cleartype.mkiv] \definefilesynonym [type-imp-constantia.mkiv] [type-imp-cleartype.mkiv] \definefilesynonym [type-imp-corbel.mkiv] [type-imp-cleartype.mkiv] \definefilesynonym [type-imp-calibri.mkiv] [type-imp-cleartype.mkiv] \definefilesynonym [type-imp-antykwa-poltawskiego.mkiv] [type-imp-antykwapoltawskiego.mkiv] %definefilesynonym [type-imp-mac.mkiv] [type-imp-osx.mkiv] %definefilesynonym [type-imp-win.mkiv] [type-imp-mscore.mkiv] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-col.lua0000644000175000017500000005413312130411274024075 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-col'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, next, tostring, tonumber = type, next, tostring, tonumber local char, byte, format, gsub, rep, gmatch = string.char, string.byte, string.format, string.gsub, string.rep, string.gmatch local concat = table.concat local round = math.round local formatters = string.formatters local backends, lpdf, nodes = backends, lpdf, nodes local allocate = utilities.storage.allocate local formatters = string.formatters local nodeinjections = backends.pdf.nodeinjections local codeinjections = backends.pdf.codeinjections local registrations = backends.pdf.registrations local nodepool = nodes.pool local register = nodepool.register local pdfliteral = nodepool.pdfliteral local pdfconstant = lpdf.constant local pdfstring = lpdf.string local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfreference = lpdf.reference local pdfverbose = lpdf.verbose local pdfflushobject = lpdf.flushobject local pdfflushstreamobject = lpdf.flushstreamobject local colors = attributes.colors local transparencies = attributes.transparencies local registertransparancy = transparencies.register local registercolor = colors.register local colorsvalue = colors.value local transparenciesvalue = transparencies.value local forcedmodel = colors.forcedmodel local c_transparency = pdfconstant("Transparency") local f_gray = formatters["%.3f g %.3f G"] local f_rgb = formatters["%.3f %.3f %.3f rg %.3f %.3f %.3f RG"] local f_cmyk = formatters["%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K"] local f_spot = formatters["/%s cs /%s CS %s SCN %s scn"] local f_tr = formatters["Tr%s"] local f_cm = formatters["q %f %f %f %f %f %f cm"] local f_effect = formatters["%s Tc %s w %s Tr"] local f_tr_gs = formatters["/Tr%s gs"] local f_num_1 = tostring local f_num_2 = formatters["%s %s"] local f_num_3 = formatters["%s %s %s"] local f_num_4 = formatters["%s %s %s %s"] local report_color = logs.reporter("colors","backend") -- page groups (might move to lpdf-ini.lua) local colorspaceconstants = allocate { -- v_none is ignored gray = pdfconstant("DeviceGray"), rgb = pdfconstant("DeviceRGB"), cmyk = pdfconstant("DeviceCMYK"), all = pdfconstant("DeviceRGB"), -- brr } local transparencygroups = { } lpdf.colorspaceconstants = colorspaceconstants lpdf.transparencygroups = transparencygroups table.setmetatableindex(transparencygroups, function(transparencygroups,colormodel) local cs = colorspaceconstants[colormodel] if cs then local g = pdfreference(pdfflushobject(pdfdictionary { S = c_transparency, CS = cs, I = true, })) transparencygroups[colormodel] = g return g else transparencygroups[colormodel] = false return false end end) local currentgroupcolormodel local function addpagegroup() if currentgroupcolormodel then local g = transparencygroups[currentgroupcolormodel] if g then lpdf.addtopageattributes("Group",g) end end end lpdf.registerpagefinalizer(addpagegroup,3,"pagegroup") local function synchronizecolormodel(model) currentgroupcolormodel = model end backends.codeinjections.synchronizecolormodel = synchronizecolormodel commands.synchronizecolormodel = synchronizecolormodel -- injection code (needs a bit reordering) -- color injection function nodeinjections.rgbcolor(r,g,b) return register(pdfliteral(f_rgb(r,g,b,r,g,b))) end function nodeinjections.cmykcolor(c,m,y,k) return register(pdfliteral(f_cmyk(c,m,y,k,c,m,y,k))) end function nodeinjections.graycolor(s) -- caching 0/1 does not pay off return register(pdfliteral(f_gray(s,s))) end function nodeinjections.spotcolor(n,f,d,p) if type(p) == "string" then p = gsub(p,","," ") -- brr misuse of spot end return register(pdfliteral(f_spot(n,n,p,p))) end function nodeinjections.transparency(n) return register(pdfliteral(f_tr_gs(n))) end -- a bit weird but let's keep it here for a while local effects = { normal = 0, inner = 0, outer = 1, both = 2, hidden = 3, } local bp = number.dimenfactors.bp function nodeinjections.effect(effect,stretch,rulethickness) -- always, no zero test (removed) rulethickness = bp * rulethickness effect = effects[effect] or effects['normal'] return register(pdfliteral(f_effect(stretch,rulethickness,effect))) -- watch order end -- spot- and indexcolors local pdf_separation = pdfconstant("Separation") local pdf_indexed = pdfconstant("Indexed") local pdf_device_n = pdfconstant("DeviceN") local pdf_device_rgb = pdfconstant("DeviceRGB") local pdf_device_cmyk = pdfconstant("DeviceCMYK") local pdf_device_gray = pdfconstant("DeviceGray") local pdf_extgstate = pdfconstant("ExtGState") local pdf_rbg_range = pdfarray { 0, 1, 0, 1, 0, 1 } local pdf_cmyk_range = pdfarray { 0, 1, 0, 1, 0, 1, 0, 1 } local pdf_gray_range = pdfarray { 0, 1 } local f_rgb_function = formatters["dup %s mul exch dup %s mul exch %s mul"] local f_cmyk_function = formatters["dup %s mul exch dup %s mul exch dup %s mul exch %s mul"] local f_gray_function = formatters["%s mul"] local documentcolorspaces = pdfdictionary() local spotcolorhash = { } -- not needed local spotcolornames = { } local indexcolorhash = { } local delayedindexcolors = { } function registrations.spotcolorname(name,e) spotcolornames[name] = e or name end function registrations.getspotcolorreference(name) return spotcolorhash[name] end -- beware: xpdf/okular/evince cannot handle the spot->process shade -- This should become delayed i.e. only flush when used; in that case we need -- need to store the specification and then flush them when accesssomespotcolor -- is called. At this moment we assume that splotcolors that get defined are -- also used which keeps the overhad small anyway. local processcolors local function registersomespotcolor(name,noffractions,names,p,colorspace,range,funct) noffractions = tonumber(noffractions) or 1 -- to be checked if noffractions == 0 then -- can't happen elseif noffractions == 1 then local dictionary = pdfdictionary { FunctionType = 4, Domain = { 0, 1 }, Range = range, } local calculations = pdfflushstreamobject(format("{ %s }",funct),dictionary) -- local calculations = pdfobject { -- type = "stream", -- immediate = true, -- string = format("{ %s }",funct), -- attr = dictionary(), -- } local array = pdfarray { pdf_separation, pdfconstant(spotcolornames[name] or name), colorspace, pdfreference(calculations), } local m = pdfflushobject(array) local mr = pdfreference(m) spotcolorhash[name] = m documentcolorspaces[name] = mr lpdf.adddocumentcolorspace(name,mr) else local cnames = pdfarray() local domain = pdfarray() local colorants = pdfdictionary() for n in gmatch(names,"[^,]+") do local name = spotcolornames[n] or n if n == "cyan" then name = "Cyan" elseif n == "magenta" then name = "Magenta" elseif n == "yellow" then name = "Yellow" elseif n == "black" then name = "Black" else local sn = spotcolorhash[name] or spotcolorhash[n] if sn then colorants[name] = pdfreference(sn) else report_color("unknown colorant %a, using black instead",name or n) name = "Black" end end cnames[#cnames+1] = pdfconstant(name) domain[#domain+1] = 0 domain[#domain+1] = 1 end if not processcolors then local specification = pdfdictionary { ColorSpace = pdfconstant("DeviceCMYK"), Components = pdfarray { pdfconstant("Cyan"), pdfconstant("Magenta"), pdfconstant("Yellow"), pdfconstant("Black") } } processcolors = pdfreference(pdfflushobject(specification)) end local dictionary = pdfdictionary { FunctionType = 4, Domain = domain, Range = range, } local calculation = pdfflushstreamobject(format("{ %s %s }",rep("pop ",noffractions),funct),dictionary) local channels = pdfdictionary { Subtype = pdfconstant("NChannel"), Colorants = colorants, Process = processcolors, } local array = pdfarray { pdf_device_n, cnames, colorspace, pdfreference(calculation), lpdf.shareobjectreference(tostring(channels)), -- optional but needed for shades } local m = pdfflushobject(array) local mr = pdfreference(m) spotcolorhash[name] = m documentcolorspaces[name] = mr lpdf.adddocumentcolorspace(name,mr) end end -- wrong name local function registersomeindexcolor(name,noffractions,names,p,colorspace,range,funct) noffractions = tonumber(noffractions) or 1 -- to be checked local cnames = pdfarray() local domain = pdfarray() if names == "" then names = name .. ",None" else names = names .. ",None" end for n in gmatch(names,"[^,]+") do cnames[#cnames+1] = pdfconstant(spotcolornames[n] or n) domain[#domain+1] = 0 domain[#domain+1] = 1 end local dictionary = pdfdictionary { FunctionType = 4, Domain = domain, Range = range, } local n = pdfflushstreamobject(format("{ %s %s }",rep("exch pop ",noffractions),funct),dictionary) -- exch pop local a = pdfarray { pdf_device_n, cnames, colorspace, pdfreference(n), } if p == "" then p = "1" else p = p .. ",1" end local pi = { } for pp in gmatch(p,"[^,]+") do pi[#pi+1] = tonumber(pp) end local vector, set, n = { }, { }, #pi for i=255,0,-1 do for j=1,n do set[j] = format("%02X",round(pi[j]*i)) end vector[#vector+1] = concat(set) end vector = pdfverbose { "<", concat(vector, " "), ">" } local n = pdfflushobject(pdfarray{ pdf_indexed, a, 255, vector }) lpdf.adddocumentcolorspace(format("%s_indexed",name),pdfreference(n)) return n end -- actually, names (parent) is the hash local function delayindexcolor(name,names,func) local hash = (names ~= "" and names) or name delayedindexcolors[hash] = func end local function indexcolorref(name) -- actually, names (parent) is the hash if not indexcolorhash[name] then local delayedindexcolor = delayedindexcolors[name] if type(delayedindexcolor) == "function" then indexcolorhash[name] = delayedindexcolor() delayedindexcolors[name] = true end end return indexcolorhash[name] end function registrations.rgbspotcolor(name,noffractions,names,p,r,g,b) if noffractions == 1 then registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,f_rgb_function(r,g,b)) else registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,f_num_3(r,g,b)) end delayindexcolor(name,names,function() return registersomeindexcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_rgb_function(r,g,b)) end) end function registrations.cmykspotcolor(name,noffractions,names,p,c,m,y,k) if noffractions == 1 then registersomespotcolor(name,noffractions,names,p,pdf_device_cmyk,pdf_cmyk_range,f_cmyk_function(c,m,y,k)) else registersomespotcolor(name,noffractions,names,p,pdf_device_cmyk,pdf_cmyk_range,f_num_4(c,m,y,k)) end delayindexcolor(name,names,function() return registersomeindexcolor(name,noffractions,names,p,pdf_device_cmyk,pdf_cmyk_range,f_cmyk_function(c,m,y,k)) end) end function registrations.grayspotcolor(name,noffractions,names,p,s) if noffractions == 1 then registersomespotcolor(name,noffractions,names,p,pdf_device_gray,pdf_gray_range,f_gray_function(s)) else registersomespotcolor(name,noffractions,names,p,pdf_device_gray,pdf_gray_range,f_num_1(s)) end delayindexcolor(name,names,function() return registersomeindexcolor(name,noffractions,names,p,pdf_device_gray,pdf_gray_range,f_gray_function(s)) end) end function registrations.rgbindexcolor(name,noffractions,names,p,r,g,b) registersomeindexcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_rgb_function(r,g,b)) end function registrations.cmykindexcolor(name,noffractions,names,p,c,m,y,k) registersomeindexcolor(name,noffractions,names,p,pdf_device_cmyk,pdf_cmyk_range,f_cmyk_function(c,m,y,k)) end function registrations.grayindexcolor(name,noffractions,names,p,s) registersomeindexcolor(name,noffractions,names,p,pdf_device_gray,pdf_gray_range,f_gray_function(s)) end function codeinjections.setfigurecolorspace(data,figure) local color = data.request.color if color then local ref = indexcolorref(color) if ref then figure.colorspace = ref data.used.color = color end end end -- transparency local transparencies = { [0] = pdfconstant("Normal"), pdfconstant("Normal"), pdfconstant("Multiply"), pdfconstant("Screen"), pdfconstant("Overlay"), pdfconstant("SoftLight"), pdfconstant("HardLight"), pdfconstant("ColorDodge"), pdfconstant("ColorBurn"), pdfconstant("Darken"), pdfconstant("Lighten"), pdfconstant("Difference"), pdfconstant("Exclusion"), pdfconstant("Hue"), pdfconstant("Saturation"), pdfconstant("Color"), pdfconstant("Luminosity"), pdfconstant("Compatible"), -- obsolete; 'Normal' is used in this case } local documenttransparencies = { } local transparencyhash = { } -- share objects local done, signaled = false, false function registrations.transparency(n,a,t) if not done then local d = pdfdictionary { Type = pdf_extgstate, ca = 1, CA = 1, BM = transparencies[1], AIS = false, } local m = pdfflushobject(d) local mr = pdfreference(m) transparencyhash[0] = m documenttransparencies[0] = mr lpdf.adddocumentextgstate("Tr0",mr) done = true end if n > 0 and not transparencyhash[n] then local d = pdfdictionary { Type = pdf_extgstate, ca = tonumber(t), CA = tonumber(t), BM = transparencies[tonumber(a)] or transparencies[0], AIS = false, } local m = pdfflushobject(d) local mr = pdfreference(m) transparencyhash[n] = m documenttransparencies[n] = mr lpdf.adddocumentextgstate(f_tr(n),mr) end end statistics.register("page group warning", function() if done and not transparencygroups[currentgroupcolormodel] then return "transparencies are used but no pagecolormodel is set" end end) -- Literals needed to inject code in the mp stream, we cannot use attributes there -- since literals may have qQ's, much may go away once we have mplib code in place. -- -- This module assumes that some functions are defined in the colors namespace -- which most likely will be loaded later. local function lpdfcolor(model,ca,default) -- todo: use gray when no color if colors.supported then local cv = colorsvalue(ca) if cv then if model == 1 then model = cv[1] end model = forcedmodel(model) if model == 2 then local s = cv[2] return f_gray(s,s) elseif model == 3 then local r, g, b = cv[3], cv[4], cv[5] return f_rgb(r,g,b,r,g,b) elseif model == 4 then local c, m, y, k = cv[6],cv[7],cv[8],cv[9] return f_cmyk(c,m,y,k,c,m,y,k) else local n,f,d,p = cv[10],cv[11],cv[12],cv[13] if type(p) == "string" then p = gsub(p,","," ") -- brr misuse of spot end return f_spot(n,n,p,p) end else return f_gray(default or 0,default or 0) end else return "" end end lpdf.color = lpdfcolor function lpdf.colorspec(model,ca,default) if ca and ca > 0 then local cv = colors.value(ca) if cv then if model == 1 then model = cv[1] end if model == 2 then return pdfarray { cv[2] } elseif model == 3 then return pdfarray { cv[3],cv[4],cv[5] } elseif model == 4 then return pdfarray { cv[6],cv[7],cv[8],cv[9] } elseif model == 5 then return pdfarray { cv[13] } end end end if default then return default end end function lpdf.pdfcolor(attribute) -- bonus, for pgf and friends context(lpdfcolor(1,attribute)) end function lpdf.transparency(ct,default) -- kind of overlaps with transparencycode -- beware, we need this hack because normally transparencies are not -- yet registered and therefore the number is not not known ... we -- might use the attribute number itself in the future if transparencies.supported then local ct = transparenciesvalue(ct) if ct then return f_tr_gs(registertransparancy(nil,ct[1],ct[2],true)) else return f_tr_gs(0) end else return "" end end function lpdf.colorvalue(model,ca,default) local cv = colorsvalue(ca) if cv then if model == 1 then model = cv[1] end model = forcedmodel(model) if model == 2 then return f_num_1(cv[2]) elseif model == 3 then return f_num_3(cv[3],cv[4],cv[5]) elseif model == 4 then return f_num_4(cv[6],cv[7],cv[8],cv[9]) else return f_num_1(cv[13]) end else return f_num_1(default or 0) end end function lpdf.colorvalues(model,ca,default) local cv = colorsvalue(ca) if cv then if model == 1 then model = cv[1] end model = forcedmodel(model) if model == 2 then return cv[2] elseif model == 3 then return cv[3], cv[4], cv[5] elseif model == 4 then return cv[6], cv[7], cv[8], cv[9] elseif model == 4 then return cv[13] end else return default or 0 end end function lpdf.transparencyvalue(ta,default) local tv = transparenciesvalue(ta) if tv then return tv[2] else return default or 1 end end function lpdf.colorspace(model,ca) local cv = colorsvalue(ca) if cv then if model == 1 then model = cv[1] end model = forcedmodel(model) if model == 2 then return "DeviceGray" elseif model == 3 then return "DeviceRGB" elseif model == 4 then return "DeviceCMYK" end end return "DeviceGRAY" end -- by registering we getconversion for free (ok, at the cost of overhead) local intransparency = false local pdfcolor = lpdf.color function lpdf.rgbcode(model,r,g,b) if colors.supported then return pdfcolor(model,registercolor(nil,'rgb',r,g,b)) else return "" end end function lpdf.cmykcode(model,c,m,y,k) if colors.supported then return pdfcolor(model,registercolor(nil,'cmyk',c,m,y,k)) else return "" end end function lpdf.graycode(model,s) if colors.supported then return pdfcolor(model,registercolor(nil,'gray',s)) else return "" end end function lpdf.spotcode(model,n,f,d,p) if colors.supported then return pdfcolor(model,registercolor(nil,'spot',n,f,d,p)) -- incorrect else return "" end end function lpdf.transparencycode(a,t) if transparencies.supported then intransparency = true return f_tr_gs(registertransparancy(nil,a,t,true)) -- true forces resource else return "" end end function lpdf.finishtransparencycode() if transparencies.supported and intransparency then intransparency = false return f_tr_gs(0) -- we happen to know this -) else return "" end end -- this will move to lpdf-spe.lua local f_slant = formatters["pdf: q 1 0 %f 1 0 0 cm"] backends.pdf.tables.vfspecials = allocate { -- todo: distinguish between glyph and rule color red = { "special", 'pdf: 1 0 0 rg 1 0 0 RG' }, green = { "special", 'pdf: 0 1 0 rg 0 1 0 RG' }, blue = { "special", 'pdf: 0 0 1 rg 0 0 1 RG' }, gray = { "special", 'pdf: .75 g .75 G' }, black = { "special", 'pdf: 0 g 0 G' }, rulecolors = { red = { "special", 'pdf: 1 0 0 rg' }, green = { "special", 'pdf: 0 1 0 rg' }, blue = { "special", 'pdf: 0 0 1 rg' }, gray = { "special", 'pdf: .5 g' }, black = { "special", 'pdf: 0 g' }, palered = { "special", 'pdf: 1 .75 .75 rg' }, palegreen = { "special", 'pdf: .75 1 .75 rg' }, paleblue = { "special", 'pdf: .75 .75 1 rg' }, palegray = { "special", 'pdf: .75 g' }, }, startslant = function(a) return { "special", f_slant(a) } end, stopslant = { "special", "pdf: Q" }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/m-level.mkii0000644000175000017500000000435411754241457024125 0ustar norbertnorbert%D \module %D [ file=level, %D version=2002.10.20, %D title=\CONTEXT\ Extra Modules, %D subtitle=Catching Nesting Errors, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \newcount\currentnesting \def\startnesting#1% {\global\advance\currentnesting\plusone \setxvalue{level::\number\currentnesting}{#1}} \def\stopnesting#1% {\edef\nestingstring{#1}% \relax\ifnum\currentnesting>\zerocount \doifelsevalue{level::\number\currentnesting}\nestingstring {\global\advance\currentnesting\minusone} {\@EA\reportnestingerror\@EA\stoptext} \else \@EA\reportnestingerror\@EA\stoptext \fi} \def\checknesting {\relax\ifnum\currentnesting>\zerocount \def\nestingstring{end of document}% \@EA\reportnestingerror \fi} \def\reportnestingerror {\endgraf \global\let\checknesting\relax \bgroup \definedfont[Mono at 18pt]\incolortrue \setupinterlinespace \raggedright \bgroup \red \ifnum\currentnesting>\plusone wrong end level \else too many end levels \fi at \nestingstring\space in line \number\inputlineno \ifnum\currentnesting>\zerocount, stack:\fi\endgraf \egroup \dostepwiserecurse\currentnesting\plusone\minusone {\space\getvalue{level::\recurselevel}} \endgraf \egroup \writestatus\m!systems{quitting due to level error}\wait \batchmode} \prependtoks \checknesting \to \everystoptext \protect \doifnotmode{demo}{\endinput} \starttext % \startnesting{eerste} % \startnesting{tweede} % \startnesting{derde} % \startnesting{vierde} % test % \stopnesting{vierde} % \stopnesting{eerste} % \startnesting{eerste} % \startnesting{tweede} % test % \stopnesting{vierde} % \stopnesting{derde} % \stopnesting{tweede} % \stopnesting{eerste} \startnesting{eerste} \startnesting{tweede} \startnesting{derde} \startnesting{vierde} test \stopnesting{vierde} \stopnesting{derde} \stopnesting{tweede} \stopnesting{eerste} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-new.tmp0000644000175000017500000000401712161703335024150 0ustar norbertnorbert%D \module %D [ file=cont-new, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=New Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \newcontextversion{2013.05.28 00:34} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. \unprotect % \writestatus\m!system{beware: some patches loaded from cont-new.mkiv} % \attribute152\zerocount : marks ... lots of sweeps so best early in list %D Maybe: \unexpanded\def\tightvbox{\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\vbox} \unexpanded\def\tightvtop{\dowithnextbox{\ht\nextbox\zeropoint\box\nextbox}\vtop} %D Maybe: % \startluacode % function context.loadfile(filename) % context(string.strip(io.loaddata(resolvers.findfile(filename)))) % end % \stopluacode % % \edef\tufte{\cldcommand{loadfile("tufte.tex")}} %D Needs some work: \unexpanded\def\startgridcorrection {\dosingleempty\spac_grid_correction_start} \def\spac_grid_correction_start[#1]% {\ifgridsnapping \snaptogrid[#1]\vbox\bgroup \else \startbaselinecorrection \fi} \unexpanded\def\stopgridcorrection {\ifgridsnapping \egroup \else \stopbaselinecorrection \fi} \unexpanded\def\checkgridsnapping {\lineskip\ifgridsnapping\zeropoint\else\normallineskip\fi} %D Probably obsolete: \unexpanded\def\startcolumnmakeup % don't change {\bgroup \getrawnoflines\textheight % raw as we cna have topskip \setbox\scratchbox\vbox to \dimexpr\noflines\lineheight-\lineheight+\topskip\relax \bgroup \forgetall} \unexpanded\def\stopcolumnmakeup {\egroup \dp\scratchbox\zeropoint \wd\scratchbox\textwidth \box\scratchbox \egroup \page_otr_command_synchronize_hsize} %D Till we fixed all styles: \let\\=\crlf \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-jv.mkii0000644000175000017500000001355111754241457024136 0ustar norbertnorbert%D \module %D [ file=verb-jv, %D version=2002.02.27, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty \JAVA\ Verbatim, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Verbatim Macros / Pretty Java Verbatim} %D This module differs from the \JAVASCRIPT\ driver in its %D handling of comments. We also need a few more handlers: one %D for \type {//} and \type {/*} and one for \type {*/} as %D well as the \JAVA doc trigger \type {/**}. %D We build this driver on top of the \PERL\ one. Since this %D driver looks much like the \JAVASCRIPT\ one, we don't %D comment it extensively. \ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi \unprotect \newcount\JVcommentlevel \gdef\JVsetspecials {\PLsetspecials \setpretty`\#=32 \setpretty`\%=41 \setpretty`\-=45 \setpretty`\/=43 \setpretty`\*=44 } \gdef\JVsethandlers {\PLsethandlers \installprettyhandler 43 \JVtypefourthree \installprettyhandler 44 \JVtypefourfour \installprettyhandler 45 \JVtypefourfive } \gdef\JVsetcontrols {\PLsetcontrols \def\flushrestofverbatimline {\endPLtypesix \ifcase\JVcommentlevel \inPLcommentfalse \fi \PLverbosefalse \PLverboseskipped=0}} \gdef\JVsetvariables {\PLsetvariables \global\JVcommentlevel=0 } \gdef\setupprettyJVtype {\def\prettyidentifier{JV}% \let\PLidentifiers\JVidentifiers \let\PLvariables\JVvariables \JVsetvariables \JVsetcontrols \JVsethandlers \JVsetspecials \PLsetdiagnostics} \gdef\JVtypefourthree {\handlenextnextpretty\doJVtypefourthree\PLtypefourtwo} \gdef\doJVtypefourthree#1#2#3% {\getprettydata{#2}% \ifnum\prettytype=43 \let\next\dodoJVtypefourthree \else\ifnum\prettytype=44 \global\advance\JVcommentlevel 1 \global\inPLcommenttrue \PLverbosecorrection \getprettydata{#3}% \ifnum\prettytype=44 \inPLdoctrue \fi \let\next\JVtogglecomment \else \let\next\PLtypefourtwo \fi\fi \next{#1}#2#3} \gdef\JVtogglecomment#1#2% {\ifnum\JVcommentlevel=1 \beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty \else \getpretties{#1}{#2}% \fi} \gdef\dodoJVtypefourthree {\endPLtypesix \handlenextnextpretty\dododoJVtypefourthree\dodododoPLtypefourthree} \gdef\dododoJVtypefourthree {\ifnewpretty\expandafter\handlenewpretty\fi\dodododoJVtypefourthree} \gdef\dodododoJVtypefourthree#1#2% {\ifinPLcomment \getpretties{#1}{#2}% \else \global\inPLcommenttrue \PLverbosecorrection \ifnaturaltextext \let\next\naturaltextext \else \def\next{\beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty}% \fi \expandafter\next \fi} \gdef\JVtypefourfour {\ifinPLdoc \@EA\noJVtypefourfour \else \@EA\handlenextnextpretty\@EA\doJVtypefourfour\@EA\PLtypefourtwo \fi} \gdef\noJVtypefourfour#1#2% {\getprettydata{#2}% \ifnum\prettytype=43 \JVtogglecomment{#1}#2% \inPLdocfalse \global\advance\JVcommentlevel -1 \ifcase\JVcommentlevel \global\inPLcommentfalse \fi \else \ifPLdocdone \getpretty{#1}% \else \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \PLdocdonetrue \fi \expandafter#2% \fi} \gdef\doJVtypefourfour#1#2% {\getprettydata{#2}% \ifnum\prettytype=43 \JVtogglecomment{#1}#2% \inPLdocfalse \global\advance\JVcommentlevel -1 \ifcase\JVcommentlevel \global\inPLcommentfalse \fi \else \endPLtypesix \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \expandafter#2% \fi} \gdef\JVtypefourfive % permit - in javadoc @tags {\ifinPLdoc \@EA\PLtypesixtwo \else \@EA\PLtypefourone \fi} \useprettyidentifiers \JVidentifiers \JVsetspecials abstract assert boolean break byte case catch char class const continue default do double else extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while \useprettyidentifiers \JVvariables \JVsetspecials @author @docRoot @deprecated @exception @inheritDoc @link @linkplain @param @return @see @serial @serialData @serialField @since @throws @value @version %D The \JAVA doc feature was requested by Robert F.~Beeger, %D who also provided this test class: %D %D \startJV %D package de.jwamalpha.handling.web.rbdipl; %D %D import java.io.IOException; %D import java.io.PrintWriter; %D import javax.servlet.http.HttpServlet; %D import javax.servlet.http.HttpServletRequest; %D import javax.servlet.http.HttpServletResponse; %D import javax.servlet.ServletException; %D %D /** %D * The simple login servlet %D * %D * @author Robert F. Beeger %D * @version 1.0 %D */ %D %D public class LoginServlet extends HttpServlet %D { %D // %D // public interface %D // %D /** %D * Process the get-request. %D * %D * @param request the request %D * @param response the response. %D */ %D protected void doGet (HttpServletRequest request, HttpServletResponse response) %D throws ServletException, IOException %D { %D response.setContentType("text/html"); %D PrintWriter writer = response.getWriter(); %D writer.println(""); %D writer.println(" "); %D writer.println(" Login"); %D writer.println(" "); %D writer.println(" "); %D writer.println(" Hallo, Benutzer " + request.getParameter("username") + "!"); %D writer.println(" "); %D writer.println(""); %D writer.flush(); %D } %D } %D \stopJV \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mit.mkii0000644000175000017500000003130611571377075024334 0ustar norbertnorbert\setinterfacemessage{references}{1}{riferimento sconosciuto --} \setinterfacemessage{references}{30}{oggetto sconosciuto --} \setinterfacemessage{references}{3}{riferimento di tipo sconosciuto --} \setinterfacemessage{references}{2}{riferimento duplicato -- a pagina --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{riferimento illecito --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{riferimenti} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{oggetto duplicato --} \setinterfacemessage{references}{21}{documento -- caricato} \setinterfacemessage{references}{22}{il documento -- non ø interattivo} \setinterfacemessage{references}{23}{riferimento ambiguo -- (prefisso=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{number --} \setinterfacemessage{handlings}{1}{font handling --} \setinterfacemessage{handlings}{3}{unknown font handling --} \setinterfacemessage{handlings}{2}{font handling -- is loaded} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{sistema} \setinterfacemessage{systems}{41}{il file esterno -- del gruppo -- non esiste} \setinterfacemessage{systems}{9}{-- non trovato/elaborato} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{nuova versione del file supplementare, seconda passata necessaria} \setinterfacemessage{systems}{21}{nessuna informazione supplementare caricata} \setinterfacemessage{systems}{20}{significato (specie) di -- caricato} \setinterfacemessage{systems}{5}{macro del modulo -- caricate} \setinterfacemessage{systems}{4}{comando -- già definito} \setinterfacemessage{systems}{27}{Versione} \setinterfacemessage{systems}{26}{Registri} \setinterfacemessage{systems}{25}{Riferimenti} \setinterfacemessage{systems}{24}{Oggetti mobili} \setinterfacemessage{systems}{1}{caricamento dei file supplementari posticipato (typemode)} \setinterfacemessage{systems}{23}{-- sistemato a --} \setinterfacemessage{systems}{22}{usare un file supplementare valido} \setinterfacemessage{systems}{2}{-- caricato} \setinterfacemessage{systems}{19}{significato (sinonimi) di -- caricato} \setinterfacemessage{systems}{18}{sinonimo -- -- non esistente} \setinterfacemessage{systems}{7}{macro del modulo -- già caricate} \setinterfacemessage{systems}{6}{nessuna macro trovata nel modulo --} \setinterfacemessage{systems}{14}{nuova pagina obbligata in lista a --} \setinterfacemessage{systems}{15}{salvataggio del buffer --} \setinterfacemessage{systems}{16}{composizione del buffer --} \setinterfacemessage{systems}{17}{composizione verbatim del buffer --} \setinterfacemessage{systems}{13}{marcatura -- definita --} \setinterfacemessage{systems}{12}{file di supplemento non ordinato, usare texutil} \setinterfacemessage{systems}{11}{costruzione di un semplice supplemento} \setinterfacemessage{systems}{10}{non usare em in --} \setinterfacemessage{floatblocks}{1}{-- rinumerato / -- => --} \setinterfacemessage{floatblocks}{3}{-- mosso} \setinterfacemessage{floatblocks}{2}{-- salvato} \setinterfacemessage{floatblocks}{5}{ordine aggiustato} \setinterfacemessage{floatblocks}{4}{-- sistemato} \setinterfacemessage{floatblocks}{7}{n di bottom floats limitato a --} \setinterfacemessage{floatblocks}{6}{n di top floats limitato a --} \setinterfacemessage{floatblocks}{9}{ordine disturbato} \setinterfacemessage{floatblocks}{8}{meno di -- righe} \setinterfacemessage{floatblocks}{title}{oggetti mobili} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{non definito} \setinterfacemessage{floatblocks}{11}{nessun oggetto specificato} \setinterfacemessage{floatblocks}{10}{-- limitato} \setinterfacemessage{interactions}{1}{rapporto -- x -- (b x a)} \setinterfacemessage{interactions}{3}{inattiva} \setinterfacemessage{interactions}{2}{attiva} \setinterfacemessage{interactions}{5}{unknown attachment --} \setinterfacemessage{interactions}{4}{sincronizzazione di pagina (--) non disponibile in hmode} \setinterfacemessage{interactions}{6}{attachment file -- does not exist} \setinterfacemessage{interactions}{title}{interazione} \setinterfacemessage{interactions}{21}{codice -- inserito} \setinterfacemessage{regimes}{1}{codifica --} \setinterfacemessage{regimes}{3}{codifica sconosciuta --} \setinterfacemessage{regimes}{2}{codifica -- caricata} \setinterfacemessage{regimes}{title}{codifica} \setinterfacemessage{structures}{1}{inizio del blocco (sezione) --} \setinterfacemessage{structures}{title}{struttura} \setinterfacemessage{structures}{2}{fine del blocco (sezione) --} \setinterfacemessage{linguals}{1}{schemi -- per -- caricati (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{sillabazione -- per -- caricata (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{niente schemi -- per -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{schemi per -- non caricati} \setinterfacemessage{linguals}{4}{niente sillabazione -- per -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{opzioni specifiche per la lingua [--] introducono un salto --} \setinterfacemessage{linguals}{6}{lingua -- non definita} \setinterfacemessage{linguals}{9}{lingua -- attiva} \setinterfacemessage{linguals}{8}{opzioni specifiche per la lingua [--] aggiunte trasparentemente} \setinterfacemessage{linguals}{title}{lingua} \setinterfacemessage{linguals}{10}{schemi -- caricati} \setinterfacemessage{verbatims}{1}{il file -- non esiste} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{filtro -- caricato} \setinterfacemessage{filters}{title}{filtri} \setinterfacemessage{filters}{2}{filtro sconosciuto --} \setinterfacemessage{textblocks}{1}{nuova versione, seconda passata necessaria} \setinterfacemessage{textblocks}{3}{lettura dei blocchi da --} \setinterfacemessage{textblocks}{2}{scrittura dei blocchi su --} \setinterfacemessage{textblocks}{5}{-- non nascosto} \setinterfacemessage{textblocks}{4}{seconda passata necessaria} \setinterfacemessage{textblocks}{7}{-- nascosto} \setinterfacemessage{textblocks}{6}{-- nascosto ed elaborato} \setinterfacemessage{textblocks}{9}{-- non composto} \setinterfacemessage{textblocks}{8}{-- composto} \setinterfacemessage{textblocks}{title}{blocchi di testo} \setinterfacemessage{textblocks}{12}{-- saltato} \setinterfacemessage{textblocks}{11}{-- caricato e composto} \setinterfacemessage{textblocks}{10}{-- caricato ed elaborato} \setinterfacemessage{encodings}{1}{codifica --} \setinterfacemessage{encodings}{3}{codifica sconosciuta --} \setinterfacemessage{encodings}{2}{codifica -- caricata} \setinterfacemessage{encodings}{title}{codifica} \setinterfacemessage{columns}{1}{solo -- colonne possibili} \setinterfacemessage{columns}{3}{problemi, disabilitare il bilanciamento} \setinterfacemessage{columns}{2}{in alternativa, usare \string\filbreak} \setinterfacemessage{columns}{5}{float in fondo non ancora supportato} \setinterfacemessage{columns}{4}{float in cima non ancora supportato} \setinterfacemessage{columns}{7}{bilanciamento annullato dopo 100 passi} \setinterfacemessage{columns}{6}{-- float(s) posticipate} \setinterfacemessage{columns}{9}{controllare seghettamento} \setinterfacemessage{columns}{8}{bilanciamento in -- passo/i} \setinterfacemessage{columns}{title}{colonne} \setinterfacemessage{columns}{13}{oggetto mobile ampio spostato sopra le colonne} \setinterfacemessage{columns}{12}{oggetto mobile spostata alla colonna successiva / --} \setinterfacemessage{columns}{11}{oggetto mobile troppo ampio per la colonna} \setinterfacemessage{columns}{10}{(meno di) una riga rimasta} \setinterfacemessage{symbols}{1}{caricamento gruppo di simboli --} \setinterfacemessage{symbols}{title}{simboli} \setinterfacemessage{files}{1}{sinonimo file -- già in uso per --} \setinterfacemessage{files}{title}{file} \setinterfacemessage{versions}{1}{@+ mancante} \setinterfacemessage{versions}{3}{pagine selezionate: --} \setinterfacemessage{versions}{2}{marcatura pagine} \setinterfacemessage{versions}{title}{version} \setinterfacemessage{specials}{1}{-- caricato} \setinterfacemessage{specials}{3}{-- reimpostato} \setinterfacemessage{specials}{2}{non ø permesso un annidamento maggiore --} \setinterfacemessage{specials}{5}{caricamento del file di definizione --} \setinterfacemessage{specials}{4}{il comando -- non esiste} \setinterfacemessage{specials}{7}{driver sconosciuto --} \setinterfacemessage{specials}{6}{annidamento non permesso} \setinterfacemessage{specials}{title}{specialitø} \setinterfacemessage{layouts}{1}{altezza del testo adattata con -- a pagina --} \setinterfacemessage{layouts}{3}{testo posticipato -- volte} \setinterfacemessage{layouts}{2}{posizionato testo posticipato -- volte} \setinterfacemessage{layouts}{5}{blocchi in margine inattivi} \setinterfacemessage{layouts}{4}{blocchi in margine attivi} \setinterfacemessage{layouts}{7}{calcolo dello spazio per logo} \setinterfacemessage{layouts}{6}{gruppo di sottopagine -- elaborato (dimensione --)} \setinterfacemessage{layouts}{9}{attualmente non più di -- livelli di elencazione} \setinterfacemessage{layouts}{8}{calcolo dello sfondo} \setinterfacemessage{layouts}{title}{layout} \setinterfacemessage{layouts}{11}{spaziatura -- non permessa in modo griglia} \setinterfacemessage{layouts}{10}{-- e -- non sommano a 1.0} \setinterfacemessage{fonts}{1}{codifica --} \setinterfacemessage{fonts}{3}{variante sconosciuta --} \setinterfacemessage{fonts}{2}{variante -- caricata} \setinterfacemessage{fonts}{5}{stile -- non definito} \setinterfacemessage{fonts}{4}{corpo del testo -- non definito} \setinterfacemessage{fonts}{7}{formato sconosciuto --} \setinterfacemessage{fonts}{6}{-- caricato} \setinterfacemessage{fonts}{14}{corpo del testo -- definito (sarebbe meglio globale)} \setinterfacemessage{fonts}{8}{stile -- definito} \setinterfacemessage{fonts}{title}{font del corpo} \setinterfacemessage{fonts}{10}{file di font sconosciuto --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{file globale --} \setinterfacemessage{databases}{2}{file locale --} \setinterfacemessage{databases}{4}{file sconosciuto --} \setinterfacemessage{databases}{title}{database} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{caricamento dello script set --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{preambolo sconosciuto --} \setinterfacemessage{check}{1}{'=' mancante o non raggruppato dopo '--' alla riga --} \setinterfacemessage{check}{3}{-- -- sostituisce una macro, usare le MAIUSCOLE!} \setinterfacemessage{check}{2}{-- argomento/i attesi alla riga --} \setinterfacemessage{check}{title}{controllo} \setinterfacemessage{metapost}{1}{caricamento della libreria metapost --} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{figura -- non trovata} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{la figura -- non è preimpostata} \setinterfacemessage{figures}{5}{dimensions of -- are unknown} \setinterfacemessage{figures}{4}{dimensioni di -- caricate dal file di immagini stesso} \setinterfacemessage{figures}{6}{dimensioni di -- calcolate da rlxtools} \setinterfacemessage{figures}{8}{oggetto-figura -- riutilizzato} \setinterfacemessage{figures}{title}{figure} \setinterfacemessage{colors}{1}{sistema -- attivato globalmente} \setinterfacemessage{colors}{3}{-- non definito --} \setinterfacemessage{colors}{2}{sistema -- attivato localmente} \setinterfacemessage{colors}{5}{sistema -- sconosciuto} \setinterfacemessage{colors}{4}{sistema -- caricato} \setinterfacemessage{colors}{7}{tavolozza -- non disponibile} \setinterfacemessage{colors}{6}{tavolozza -- resa disponibile} \setinterfacemessage{colors}{9}{spazio dei colori -- non supportato} \setinterfacemessage{colors}{8}{specifica -- del colore -- convertita in nero} \setinterfacemessage{colors}{title}{colore} \setinterfacemessage{colors}{12}{-- is registered} \setinterfacemessage{colors}{11}{il colore ø convertito in grigio} \setinterfacemessage{colors}{10}{spazio dei colori -- supportato} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/anch-pos.mkiv0000644000175000017500000003405612130411274024274 0ustar norbertnorbert%D \module %D [ file=anch-pos, % was core-pos %D version=1999.08.01, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Positioning Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Positioning} %D In \MKIV\ there was already a different housekeeping model for positions quite %D early, but starting in 2012 more dramatic changes started to happen, especially %D in relation to background graphics. It will probably take some time to settle. \registerctxluafile{anch-pos}{1.001} \unprotect %D The first application of positional information was embedded graphics. Since we %D are interacting with text, it made sense to take the current line height and %D depth into account too. This is why we have position macros for simple positions %D and one boxes. %D %D \starttyping %D \dosetposition {identifier} %D \dosetpositionwhd {identifier} {width} {height} {depth} %D \dosetpositionplus {identifier} {width} {height} {depth} {list} %D \stoptyping \def\dosaveposition #1#2#3#4{\ctxcommand{setpos("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4)}} \def\dosavepositionwhd #1#2#3#4#5#6#7{\ctxcommand{setpos("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7)}} \def\dosavepositionplus#1#2#3#4#5#6#7#8{\ctxcommand{setpos("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7,"#8")}} \def\dosetposition #1{\ctxcommand{posxy("#1")}} \def\dosetpositionwhd #1#2#3#4{\ctxcommand{poswhd("#1",\number\dimexpr#2,\number\dimexpr#3,\number\dimexpr#4)}} \def\dosetpositionplus#1#2#3#4#5{\ctxcommand{posplus("#1",\number\dimexpr#2,\number\dimexpr#3,\number\dimexpr#4,"#5")}} \def\dosetpositionbox #1#2{\ctxcommand{poswhd("#1",\number\wd#2,\number\ht#2,\number\dp#2)}} \def\dosetpositionstrut #1{\ctxcommand{posstrut("#1")}} \newbox\b_anch_position \newif \ifpositioning % sort of public %D Sometimes we want to trick the position handler a bit: \def\replacepospxywhd#1#2#3#4#5#6#7% when used we can better make a helper {\ctxcommand{replacepospxywhd('#1',\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7)}} %D \macros %D {MPp, MPx, MPy, MPw, MPh, MPd, MPxy, MPll, MPlr, MPur, MPul, MPpos, MPanchor} %D %D Access to the positional information is provided by macros with short names %S that are clearly meant for \METAPOST\ but nowadays also used for other purposes. \def\MPp #1{\ctxcommand{MPp("#1")}} \let\MPpage \MPp \def\MPr #1{\ctxcommand{MPr("#1")}} \let\MPregion \MPr \def\MPc #1{\ctxcommand{MPc("#1")}} \let\MPcolumn \MPc \def\MPn #1{\ctxcommand{MPn("#1")}} \let\MPparagraph\MPn \def\MPx #1{\ctxcommand{MPx("#1")}} \def\MPy #1{\ctxcommand{MPy("#1")}} \def\MPw #1{\ctxcommand{MPw("#1")}} % first we need to replace \MPwidth etc \def\MPh #1{\ctxcommand{MPh("#1")}} \def\MPd #1{\ctxcommand{MPd("#1")}} \def\MPxy #1{\ctxcommand{MPxy("#1")}} \def\MPll #1{\ctxcommand{MPll("#1")}} \def\MPlr #1{\ctxcommand{MPlr("#1")}} \def\MPur #1{\ctxcommand{MPur("#1")}} \def\MPul #1{\ctxcommand{MPul("#1")}} \def\MPpos #1{\ctxcommand{MPpos("#1")}} \let\MPanchor\MPpos % overloaded locally when needed \def\MPe #1{\ctxcommand{MPe("#1")}} \def\MPls #1{\ctxcommand{MPls("#1")}} \let\MPleftskip\MPls % compatible feature \def\MPrs #1{\ctxcommand{MPrs("#1")}} \let\MPrightkip\MPrs % compatible feature \def\MPpardata#1{\ctxcommand{MPpardata("#1")}} \def\MPxywhd #1{\ctxcommand{MPxywhd("#1")}} %D \macros %D {MPplus, MPrest, MPv, MPvv} %D %D Since we will probably keep on extending, we provide a general extension %D macro. The plus alternative takes an extra argument, denoting what additional %D parameter to pick up. So, the third extra is fetched with, %D %D \starttyping %D \MPplus{identifier}{3}{default} %D \stoptyping %D %D All extras (comma separated) are fetched with: %D %D \starttyping %D \MPrest{identifier} %D \stoptyping %D %D The extra parameters are not treated. \def\MPplus#1#2#3{\ctxcommand{MPplus("#1",#2,"#3")}} \let\MPv \MPplus \def\MPrest #1#2{\ctxcommand{MPrest("#1","#2")}} \let\MPvv\MPrest %D There are two low level positioning macros. Both store the position as well %D as execute an action associated with that position. \let\dopositionaction\gobbleoneargument % implemented later \def\anch_positions_initialize {\ifpositioning \else \global\positioningtrue \fi} \unexpanded\def\setpositiononly {\iftrialtypesetting \expandafter\gobbleoneargument \else \expandafter\anch_positions_set_only_indeed \fi} \def\anch_positions_set_only_indeed#1% {\anch_positions_initialize \edef\currentposition{#1}% \dosetposition\currentposition} \unexpanded\def\setposition {\iftrialtypesetting \expandafter\gobbleoneargument \else \expandafter\anch_positions_set_indeed \fi} \def\anch_positions_set_indeed#1% {\anch_positions_initialize \edef\currentposition{#1}% \dosetposition\currentposition \anch_positions_trace_left \dopositionaction\currentposition} \unexpanded\def\setpositiondata {\iftrialtypesetting \expandafter\gobblefourarguments \else \expandafter\anch_positions_set_data_indeed \fi} \def\anch_positions_set_data_indeed#1#2#3#4% {\anch_positions_initialize \hbox {\edef\currentposition{#1}% \dosetpositionwhd\currentposition{#2}{#3}{#4}% already \the\dimexpr \anch_positions_trace_left \dopositionaction\currentposition \hss}} \unexpanded\def\setpositionbox {\iftrialtypesetting \expandafter\anch_positions_set_box_nop \else \expandafter\anch_positions_set_box_yes \fi} \def\anch_positions_set_box_nop#1% {\dowithnextboxcs\flushnextbox} \def\anch_positions_set_box_yes#1% {\dowithnextbox{\anch_positions_set_box_finish{#1}}} \def\anch_positions_set_box_finish#1% {\anch_positions_initialize \hbox to \wd\nextbox {\edef\currentposition{#1}% \dosetpositionbox\currentposition\nextbox \anch_positions_trace_left \setbox\b_anch_position\box\nextbox \dopositionaction\currentposition \box\b_anch_position \hss}} \unexpanded\def\setpositionstrut {\iftrialtypesetting \expandafter\anch_positions_set_strut_nop \else \expandafter\anch_positions_set_strut_yes \fi} \def\anch_positions_set_strut_nop#1% {\strut} \def\anch_positions_set_strut_yes#1% {\anch_positions_initialize \hbox to \zeropoint {\edef\currentposition{#1}% \dosetpositionstrut\currentposition \anch_positions_trace_left \dopositionaction\currentposition \strut \hss}} \unexpanded\def\setpositiondataplus {\iftrialtypesetting \expandafter\gobblefivearguments \else \expandafter\anch_positions_set_plus_indeed \fi} \def\anch_positions_set_plus_indeed#1#2#3#4#5% {\anch_positions_initialize \hbox % just package {\edef\currentposition{#1}% \dosetpositionplus\currentposition{#2}{#3}{#4}{#5}% already \the\dimexpr \anch_positions_trace_right \dopositionaction\currentposition \hss}} \unexpanded\def\setpositionplus {\iftrialtypesetting \expandafter\anch_positions_set_plus_nop \else \expandafter\anch_positions_set_plus_yes \fi} \def\anch_positions_set_plus_nop#1#2% {\dowithnextboxcs\flushnextbox} \def\anch_positions_set_plus_yes#1#2% {\dowithnextbox{\anch_positions_set_plus_yes_finish{#1}{#2}}} \def\anch_positions_set_plus_yes_finish#1#2% {\anch_positions_initialize \hbox to \nextboxwd {\edef\currentposition{#1}% \dosetpositionplus\currentposition{\wd\nextbox}{\ht\nextbox}{\dp\nextbox}{#2}% \anch_positions_trace_right \setbox\b_anch_position\flushnextbox \dopositionaction\currentposition \box\b_anch_position \hss}} \let\currentposition\s!unknown %D A few special ones .. will be cleaned up \def\pageanchor {page:\the\realpageno} % for the moment only one pagesize \def\textanchor {text:\the\realpageno} \def\regionanchor{region:0} \newcount\c_anch_column % will be delegated to lua \newcount\c_anch_text % will be delegated to lua \unexpanded\def\anch_mark_column_box#1% {\global\advance\c_anch_column\plusone \ctxcommand{markregionbox(\number#1,"columnarea:\the\c_anch_column")}} % extra height \unexpanded\def\anch_mark_region_box {\iftrialtypesetting \singleexpandafter\gobbleoneargument \else\ifpositioning \doubleexpandafter\anch_mark_region_box_indeed \else \doubleexpandafter\gobbleoneargument \fi\fi} \unexpanded\def\anch_mark_region_box_indeed#1% {\ctxcommand{markregionbox(\number#1)}} \unexpanded\def\anch_mark_flow_box#1% will be extended / renamed {\hbox\bgroup \global\advance\c_anch_text\plusone \ctxcommand{markregionbox(\number#1,"textarea:\the\c_anch_text")}% \box#1% \egroup} \unexpanded\def\anch_mark_flow_only#1% will be extended / renamed {\global\advance\c_anch_text\plusone \ctxcommand{markregionbox(\number#1,"textarea:\the\c_anch_text",true)}} \unexpanded\def\anch_make_page_box#1% maybe like text {\ctxcommand{markregionbox(\number#1,"\pageanchor")}} % needs an hbox \unexpanded\def\anch_mark_text_box#1% {\ctxcommand{markregionbox(\number#1,"\textanchor")}} % needs an hbox %D We can copy a position with: %D %D \starttyping %D \copyposition {to} {from} %D \stoptyping %D %D Again, this is a global operation. \def\copyposition#1#2{\ctxcommand{copyposition('#1','#2')}} %D The fact that handling positions is a two pass operation, is one of the %D reasons why we need to be able to test for existence, using: %D %D \starttyping %D \doifpositionelse {identifier} {found action} {not found action} %D \stoptyping \def\doifpositionelse#1{\ctxcommand{doifpositionelse('#1')}} \def\doifposition #1{\ctxcommand{doifposition('#1')}} %D \macros %D {xypos} %D %D We have several macros available to save positions. Later we will see %D applications. %D %D \starttabulate[|l|l||] %D \NC \type {\xypos} \NC \NC simple position with no dimensions \NC \NR %D \NC \type {\hpos} \NC \NC position and characteristics of a \type {\hbox} \NC \NR %D \NC \type {\vpos} \NC \NC position and characteristics of a \type {\vbox} \NC \NR %D \NC \type {\bpos} \NC b: \NC begin point in a line \NC \NR %D \NC \type {\epos} \NC e: \NC end point in a line \NC \NR %D \stoptabulate %D %D Each macro takes an identifier as argument, and the \type %D {\hpos} and \type {\vpos} also expect box content. \let\xypos\setpositiononly \unexpanded\def\hpos#1{\dontleavehmode\setpositionbox{#1}\hbox} \unexpanded\def\vpos#1{\setpositionbox{#1}\vbox} \unexpanded\def\bpos#1{\dontleavehmode \setpositionstrut{b:#1}\ignorespaces} \unexpanded\def\epos#1{\removeunwantedspaces\setpositionstrut{e:#1}} %D When we want to calculate more complex backgrounds, we need to know what the %D current indentation scheme is. At the cost of many positions and memory, we %D can keep track of them. This mechanism is activated automatically based on %D information collected in the previous pass. \newtoks \t_anch_positions_tracers \newcount\c_anch_positions_paragraph \unexpanded\def\tracepositions {\the\t_anch_positions_tracers} \unexpanded\def\enableparpositions % global {\global\let\registerparoptions\doregisterparoptions \global\positioningtrue} \let\disableparpositions\relax \let\registerparoptions\relax \unexpanded\def\doregisterparoptions {\iftrialtypesetting \else \ifinpagebody \else \ifmmode \else \ifinformula \else \anch_positions_register_par_options \fi \fi \fi \fi} \def\anch_positions_register_par_options_normal {\dontleavehmode\ctxcommand{parpos()}} \def\anch_positions_register_par_options_traced {\anch_positions_register_par_options_normal \smashedhbox to \zeropoint {\hss \startcolor[blue]% \llap{\infofont\number\c_anch_positions_paragraph}% \vrule \s!width 4\onepoint \s!height2\onepoint \s!depth 2\onepoint \stopcolor \hss}} \let\anch_positions_register_par_options\anch_positions_register_par_options_normal \appendtoks \let\anch_positions_register_par_options\anch_positions_register_par_options_traced \to \t_anch_positions_tracers \unexpanded\def\anch_positions_trace#1#2#3% {\smashedhbox {#1{\infofont#2#3}% \kern-\onepoint \vrule\s!width2\onepoint\s!height\halfapoint\s!depth\halfapoint}} \unexpanded\def\anch_positions_trace_left_indeed {\anch_positions_trace\llap\darkmagenta{\currentposition>}} \unexpanded\def\anch_positions_trace_right_indeed {\anch_positions_trace\rlap\darkcyan{<\currentposition}} \let\anch_positions_trace_left \relax \let\anch_positions_trace_right\relax \appendtoks \let\anch_positions_trace_left \anch_positions_trace_left_indeed \let\anch_positions_trace_right \anch_positions_trace_right_indeed \to \t_anch_positions_tracers % \appendtoks \registerparoptions \to \everypar %D \macros %D {doifoverlappingelse} %D %D A first application of positional information, is to determine if two %D boxes do overlap: %D %D \starttyping %D \doifoverlappingelse{point a}{point b} %D {action when overlapping} %D {action when not overlapping} %D \stoptyping \def\doifoverlappingelse#1#2{\ctxcommand{doifoverlappingelse("#1","#2")}} %D \macros %D {doifpositionsonsamepageelse, %D doifpositionsonthispageelse} %D %D Instead of letting the user handle fuzzy expansion, we provide a simple test on %D positions being on the same page. %D %D \starttyping %D \doifpositionsonsamepageelse{point a}{point b} %D {action when on same page} %D {action when not on same page} %D \doifpositionsonthispageelse{point a}{point b} %D {action when on this page} %D {action when not on this page} %D \stoptyping \def\doifpositionsonsamepageelse#1{\ctxcommand{doifpositionsonsamepageelse("#1")}} \def\doifpositionsonthispageelse#1{\ctxcommand{doifpositionsonthispageelse("#1")}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-lua.lua0000644000175000017500000000606312134352503023411 0ustar norbertnorbertif not modules then modules = { } end modules ['l-lua'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- compatibility hacksand helpers local major, minor = string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$") _MAJORVERSION = tonumber(major) or 5 _MINORVERSION = tonumber(minor) or 1 _LUAVERSION = _MAJORVERSION + _MINORVERSION/10 -- lpeg if not lpeg then lpeg = require("lpeg") end -- basics: if loadstring then local loadnormal = load function load(first,...) if type(first) == "string" then return loadstring(first,...) else return loadnormal(first,...) end end else loadstring = load end -- table: -- At some point it was announced that i[pairs would be dropped, which makes -- sense. As we already used the for loop and # in most places the impact on -- ConTeXt was not that large; the remaining ipairs already have been replaced. -- Hm, actually ipairs was retained, but we no longer use it anyway (nor -- pairs). -- -- Just in case, we provide the fallbacks as discussed in Programming -- in Lua (http://www.lua.org/pil/7.3.html): if not ipairs then -- for k, v in ipairs(t) do ... end -- for k=1,#t do local v = t[k] ... end local function iterate(a,i) i = i + 1 local v = a[i] if v ~= nil then return i, v --, nil end end function ipairs(a) return iterate, a, 0 end end if not pairs then -- for k, v in pairs(t) do ... end -- for k, v in next, t do ... end function pairs(t) return next, t -- , nil end end -- The unpack function has been moved to the table table, and for compatiility -- reasons we provide both now. if not table.unpack then table.unpack = _G.unpack elseif not unpack then _G.unpack = table.unpack end -- package: -- if not package.seachers then -- -- package.searchers = package.loaders -- 5.2 -- -- elseif not package.loaders then -- -- package.loaders = package.searchers -- -- end if not package.loaders then -- brr, searchers is a special "loadlib function" userdata type package.loaders = package.searchers end -- moved from util-deb to here: local print, select, tostring = print, select, tostring local inspectors = { } function setinspector(inspector) -- global function inspectors[#inspectors+1] = inspector end function inspect(...) -- global function for s=1,select("#",...) do local value = select(s,...) local done = false for i=1,#inspectors do done = inspectors[i](value) if done then break end end if not done then print(tostring(value)) end end end -- local dummy = function() end function optionalrequire(...) local ok, result = xpcall(require,dummy,...) if ok then return result end end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-newmml.mkii0000644000175000017500000024225011754241457024327 0ustar norbertnorbert%D \module %D [ file=x-newmml, %D version=2005.06.10, % 1999.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=MathML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Remark: from now on this is a module and no longer an xtag %D filter. In due time it will replace the older renderer (which %D we will keep around for sentimental reasons). This variant has %D no namespace support yet, but eventually we will use a \MKIV\ %D version. \useXMLfilter[stk] \ifx\inlinemathematics\undefined \def\inlinemathematics {\dontleavehmode\mathematics} % already in kernel \long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi} \fi % \defineXMLentity[x000AF]{\normalorfiller{x}\hrulefill} % CHECK FOR: \xmlrent % \enablemathpunctuation %D Then we start defining the rendering macros: \writestatus{loading}{ConTeXt XML Macros / MathML} \startmodule [mathml] %D First we load the entities: \usemodule[newmme] % \setupmodule[a=c] % \setupmodule[a=c] \unprotect \def\MMLrm{\mr} \def\MMLseparator#1{{#1}} % nils space after separator %D First we define some general formula elements. \defineXMLenvironment [formula] [label=,sublabel=] {\dostartXMLformula\placeformula} {\dostopXMLformula} \defineXMLenvironment [subformula] [label=,sublabel=] {\dostartXMLformula\placesubformula} {\dostopXMLformula} \def\dostartXMLformula#1% {\doifelsenothingXMLop{label} {\startformula} {\expanded{#1[\XMLop{label}]{\XMLop{sublabel}}}\startformula}} \def\dostopXMLformula {\stopformula} %D Since I only had the draft of MathML 2 as example of %D rendering, there are probably a lot of omissions and %D misinterpretations. At least I learned some bits and %D pieces of math rendering. %D %D The main complications were not so much the math, but to %D find the most efficient way to handle elements without %D spacing beging messed up. The first implementation was %D aimed at getting reasonable output, this second %D implementation is already better in terms of handling %D nesting, and I will definitely need a third one that has %D more efficient and less ugly code. %D %D The \TEX\ part is not that complicated and once the %D preprocessor was okay, the rest way just a lot of keying %D and testing. It all comes down to gobbling, redefining, %D and not so much to parsing. %D %D The second implementation expanded the whole math sequence %D into an internal \TEX\ representation. This is a rather clean %D and fast process. Filtering and testing takes place by %D redefining the internal representation macros. %D %D The third implementation may look a bit more messy in some %D respects. This is because in \TEX\ it's not that trivial to %D implement a tree handler. We use a stack for the \type {apply} %D element and other sequential content. Occasionally we need to %D peek into child elements which involves messy code. This %D implementation is closer to the normal \XML\ handling in %D \CONTEXT. %D We start with the parent elements and the option handler. \defineXMLdirective [mathml] \setupMMLappearance \defineXMLargument [math] \automathematics \defineXMLargument [imath] \inlinemathematics \defineXMLargument [dmath] \displaymathematics \defineXMLargument [m] \inlinemathematics %D In the styles, options can be set with: \def\setupMMLappearance[#1]{\dodoubleargument\getparameters[@@MML#1]} \def\startusingMMLarguments % optional maken {\begingroup %\expandXMLta % expand entities first \getXMLta} \def\stopusingMMLarguments % optional maken {\endgroup} \def\MMLargumentprefix{@@MML\currentXMLelement} %D We will apply inner math to all bits and pieces made up by an %D \type {apply}. \def\MMLmathinner {\ifinner \expandafter \firstofoneargument \else \expandafter \mathinner \fi} %D A few math related macros: \let\MMLctempresetlist\empty \def\setMMLcreset{\edef\MMLctempresetlist} \newcount\MMLapplydepth \def\MMLcreset{\MMLapplydepth\zerocount} % Stack handler \startXMLmapping[xmlstack:test] \defineXMLnested [apply] {\startsavingXMLelements} {\stopsavingXMLelements} \stopXMLmapping %D Auxiliary MathML macros: (to be generalized) \def\doifelseMMCfunction {\begingroup \XMLdoifonstackelse{fn} {\donetrue} {\XMLdoifonstackelse{apply} {\defXMLfirstnamedtext\ascii{apply}% \startsavingXMLelements % best use a substack so that we do not need to \edef \ascii \stopsavingXMLelements} {}% \XMLdoifonstackelse{fn} {\donetrue} {\defineXMLsave[ci][type=]% \XMLfirstnamed{ci}% \doifelse{\XMLpar{ci}{type}{}}{fn} {\donetrue} {\donefalse}}}% \ifdone \endgroup\expandafter\firstoftwoarguments \else \endgroup\expandafter\secondoftwoarguments \fi} \def\doifelseMMCfunctioninapply#1#2% grouped {\begingroup \startXMLmapping[xmlstack:test]% take fast alternative \getXMLstackdata{#1}% \expanded{\doifinsetelse{\getXMLstackname\plusone}{#2}} {\stopXMLmapping \endgroup\firstoftwoarguments } {\stopXMLmapping \endgroup\secondoftwoarguments}} \def\dodoifelseMMCfunctioninapply#1#2% {\startXMLmapping[xmlstack:test]% take fast alternative \getXMLstackdata{#1}% \expanded{\doifinsetelse{\getXMLstackname\plusone}{#2}} {\stopXMLmapping \firstoftwoarguments } {\stopXMLmapping \secondoftwoarguments}} %D Special features: \newtoks \@@postponedMMLactions \setfalse \somepostponedMMLactions \def\postponeMMLactions#1% {\global\settrue\somepostponedMMLactions \global\@@postponedMMLactions\expandafter{\the\@@postponedMMLactions#1}} \def\postponedMMLactions {\global\setfalse\somepostponedMMLactions \@EA\global\@EA\@@postponedMMLactions\@EA\emptytoks \the\@@postponedMMLactions} %D A couple of lists: \def\MMLcmainresetlist {times,divide,power,% lt,gt,eq,leq,geq,% in,inverse,% fn,% floor,ceiling,% mean,% selector,% abs,int,limit,sum,product,% outerproduct,innerproduct,scalarproduct} \def\MMLcfunctionlist {sin,arcsin,sinh,arcsinh,% cos,arccos,cosh,arccosh,% tan,arctan,tanh,arctanh,% cot,arccot,coth,arccoth,% csc,arccsc,csch,arccsch,% sec,arcsec,sech,arcsech,% ln,exp,log,% abs,int,limit,sum,product,% fn} % ? \def\MMLcconstructlist {diff,partialdiff,root} % apply goes wrong on 1/2 * (a_2 + b_3) % apply % %D We use inner and grouping (begin/end and no b/e) else we %D get problems with 1/2(1+2) and alike (todo: ask taco). %D %D The problem with apply is that we need to take care of %D several situations, like: %D %D \starttyping %D <.../> ... %D ... %D ... %D ... %D \stoptyping %D %D Because we translated version 2 of this renderer into %D version 3 the following definitions may be sub optimal or %D more complex than actually needed. \defineXMLnested % why nested? could be just an environment [apply] [open=,close=] {\setups{mmc:apply:start}} {\setups{mmc:apply:stop}} \startsetups mmc:apply:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:apply:stop \stopsavingXMLelements \MMLmathinner { \expanded{\doifinsetelse{\getXMLstackname\plusone}{\MMLcmainresetlist,\MMLctempresetlist}} \MMLcreset \donothing \ifcase\MMLapplydepth \else \doifXMLparelse{apply}{open} \donothing{\getXMLarguments{apply}{open="("}}% slow \doifXMLparelse{apply}{close}\donothing{\getXMLarguments{apply}{close=")"}}% slow \fi \doifXMLparelse{apply}{open}{\left\XMLpar{apply}{open}{}}\donothing \advance\MMLapplydepth\plusone \begingroup \let\MMLctempresetlist\empty \doifelse {\getXMLstackname\plusone} {apply} { % ... .. \doifelseMMCfunctioninapply \plusone {plus,minus} { % yet incomplete and rather untested % x } { \MMLcreset } \getXMLstackdata\plusone \ifconditional\somepostponedMMLactions \postponedMMLactions \else \left(\MMLcreset\getXMLstackdata\plustwo\right) \fi } { \doifelse {\getXMLstackname\plusone} {fn} { % also postpone \directsetup{mmc:fn:apply} } { \doifelse {\getXMLstackname\plusone} {csymbol} { % also postpone \directsetup{mmc:csymbol:apply} } { \doifelse {\getXMLstackname\plusone} {ci} { \getXMLstackdata\plusone \ifnum\XMLstacklevel>\plusone \left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right) \fi } { \getXMLstackdata\plusone } } } } \endgroup \advance\MMLapplydepth\minusone \directsetup{apply:flush} \doifXMLparelse{apply}{close}{\right\XMLpar{apply}{close}{}}\donothing } \endgroup \stopsetups \startsetups apply:flush \relax \ifcase\MMLapplydepth \ifconditional\somepostponedMMLactions \postponedMMLactions \ifx\MMLpowerelement\empty\else ^{\MMLcreset\MMLpowerelement\empty} \global\let\MMLpowerelement\empty \fi \fi \fi \stopsetups % reln \defineXMLnestedenvironmentsave [reln] {\writestatus{XML}{MathML element "reln" is obsolete}} {} % fn \startsetups mmc:fn:plusminus \ifnum\XMLstacklevel>\plustwo \MMLcreset \left(\expandafter\flushXMLstackwith\expandafter\plustwo\expandafter{\XMLfnoperator}\right) \else \getXMLstackdata\plustwo \fi \stopsetups \startsetups mmc:fn:minusplus \directsetup{mmc:fn:plusminus} \stopsetups \defineXMLnested [fn] {\directsetup{mmc:fn:start}} {\directsetup{mmc:fn:stop}} \startsetups mmc:fn:apply \begingroup \startsavingXMLelements \rawXMLstacktext\plusone % still on stack, no check, just fn content \stopsavingXMLelements \doifelse {\getXMLstackname\plusone} {ci} { \flattenXMLcontent{\getXMLstackdata\plusone} \doifsetupselse{mmc:fn:\flattenedXMLcontent} { \global\defXMLstackdata\XMLfnoperator\plusone \expanded{\endgroup\noexpand\directsetup{mmc:fn:\flattenedXMLcontent}} } { \endgroup \MMLcreset \getXMLstackdata\plusone \ifnum\XMLstacklevel>\plusone \getXMLentity{NegThinSpace} \left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right) \fi } } { \endgroup \MMLcreset \getXMLstackdata\plusone } \stopsetups \startsetups mmc:fn:start \ifnum\XMLstacklevel>\plustwo \def\MMCfnleft {\left(} \def\MMCfnright{\right)} \else \let\MMCfnleft \relax \let\MMCfnright\relax \fi \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:fn:stop \stopsavingXMLelements \doifelse {\getXMLstackname\plusone} {ci} { \flattenXMLcontent{\getXMLstackdata\plusone} \doifsetupselse{mmc:fn:\flattenedXMLcontent} { \global\defXMLstackdata\XMLfnoperator\plusone \directsetup{mmc:fn:\flattenedXMLcontent} } { \MMLcreset \getXMLstackdata\plusone } \endgroup } { \doifelse {\getXMLstackname\plusone} {apply} { \doifelseMMCfunctioninapply \plusone {plus,minus} { \left( \getXMLstackdata\plusone \right) } { \getXMLstackdata\plusone } \endgroup \ifnum\XMLstacklevel>\plusone \left( \getXMLstackdata\plustwo \right) \fi } { \MMLcreset \getXMLentity{NegThinSpace} \MMCfnleft \ifnum\XMLstacklevel=\plustwo\MMLccomma\fi \flushXMLstackwith\plustwo\MMLccomma \MMCfnright \endgroup } } \stopsetups % c* \defineXMLargument [ci] [type=] {\XMLval{mmc:ci}{\XMLop{type}} {\firstofoneargument}} \defineXMLargument [cn] [type=,base=] {\XMLval{mmc:cn}{\XMLop{type}} {\firstofoneargument}} \defineXMLargument [csymbol] [encoding=text] {\XMLval{mmc:cs}{\XMLop{encoding}}{\firstofoneargument}} %D The next definition provide a kind of plug-in mechanism (see %D the open math extension module). \defineXMLsingular [csymbol] [encoding=text, definitionURL=] {\doifsomething{\XMLop{definitionURL}}{\directsetup{mmc:csymbol:apply}}} \startsetups mmc:csymbol:apply \begingroup \startsavingXMLelements \rawXMLstacktext\plusone % still on stack, no check, just attr test \stopsavingXMLelements % http://www.publishers.com/SomeName \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL \doifsetupselse{mmc:csymbol:} {\mmcSymbolURL} { \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\mmcSymbolURL}} } { % SomeName (fallback) \splitfilename{\XMLpar{csymbol}{definitionURL}{}} \doifsetupselse{mmc:csymbol:\splitoffbase} { \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\splitoffbase}} } { \endgroup \XMLval{mmc:cs}{\XMLop{encoding}}{\firstofoneargument} } } \stopsetups %D Alternative b will convert periods into comma's: %D %D \startbuffer %D \startXMLdata %D 1.23 %D 1.23 %D \stopXMLdata %D %D \type{\setupMMLappearance[cn] [alternative=b]} %D %D \startXMLdata %D 1.23 %D 1.23 %D \stopXMLdata %D \stopbuffer %D %D \start \typebuffer \getbuffer \stop \setupMMLappearance[cn] [\c!alternative=\v!a] \defineXMLargument[cn][type=,base=]{\MMLdocn} \def\MMLdocn#1% {\begingroup \doif\@@MMLcnalternative\v!b{\redefinemathcharacter [.][ord][mi]["3B]\relax}% \XMLval{mmc:cn}{\XMLop{type}}{\firstofoneargument}{#1}% \endgroup} \defineXMLsingular [sep] {\MMLcsep} \def\MMLcsep{\,} \setupMMLappearance[polar] [\c!alternative=\v!a] % a|b|c \setupMMLappearance[float] [\c!symbol=\v!no] % \v!yes|dot \setupMMLappearance[enotation][\c!symbol=\v!no] % \v!yes|dot \setupMMLappearance[base] [\c!symbol=\v!numbers] % digits|characters|text|no \mapXMLvalue {mmc:ci} {set} {\MMLcCIset} \mapXMLvalue {mmc:ci} {vector} {\MMLcCIvector} \mapXMLvalue {mmc:ci} {matrix} {\MMLcCImatrix} \mapXMLvalue {mmc:ci} {function} {\MMLcCIfunction} \mapXMLvalue {mmc:ci} {complex-cartesian} {\MMLccartesian} \mapXMLvalue {mmc:ci} {complex} {\MMLccartesian} \mapXMLvalue {mmc:ci} {complex-polar} {\MMLcpolar} \mapXMLvalue {mmc:ci} {polar} {\MMLcpolar} \mapXMLvalue {mmc:ci} {fn} {\MMLcCIfunction} \mapXMLvalue {mmc:cn} {integer} {\MMLcCNinteger} \mapXMLvalue {mmc:cn} {logical} {\MMLcCNlogical} \mapXMLvalue {mmc:cn} {rational} {\MMLcCNrational} \mapXMLvalue {mmc:cn} {complex-cartesian} {\MMLccartesian} \mapXMLvalue {mmc:cn} {complex} {\MMLccartesian} \mapXMLvalue {mmc:cn} {complex-polar} {\MMLcpolar} \mapXMLvalue {mmc:cn} {polar} {\MMLcpolar} \mapXMLvalue {mmc:cn} {e-notation} {\MMLcenotation} % new \mapXMLvalue {mmc:cn} {float} {\MMLcfloat} % obsolete \mapXMLvalue {mmc:cn} {real} {\MMLcfloat} \mapXMLvalue {mmc:cs} {text} {\MMLcCStext} \def\MMLcpolar#1% {\doifdefinedelse{MMLcdopolar\@@MMLpolaralternative} {\getvalue{MMLcdopolar\@@MMLpolaralternative}{#1}} {#1}} \def\MMLcdopolara#1% {\def\MMLcsep{\MMLseparator,}\getXMLentity{polar}\left(#1\right)} \def\MMLcdopolarb#1% {\def\MMLcsep##1\empty {\getXMLentity{exponentiale}^{##1\mskip2mu\getXMLentity{imaginaryi}}} #1\empty} \def\MMLcdopolarc#1% {\def\MMLcsep##1\empty {\getXMLentity{exp}\left(##1\mskip2mu\getXMLentity{imaginaryi}\right)}% #1\empty} \def\MMLccartesian#1% {\def\MMLcsep{+}#1\getXMLentity{imaginaryi}} % float will be obsolete, and is replace by e-notation \def\MMLcfloat#1% {\doifelse\@@MMLfloatsymbol\v!no % {{\MMLrm#1}}% make sure that e shows up ok {\mfunction{#1}}% make sure that e shows up ok {% we should ignore \entities ! \beforesplitstring#1\at e\to\first \aftersplitstring #1\at e\to\last \ifx\first\empty #1\else \ifx\last \empty #1\else \first \doifelse\@@MMLfloatsymbol{dot}\cdot\times 10^{\last}% \fi\fi}} % we now have: \def\MMLcenotation#1% {\doifelse\@@MMLenotationsymbol\v!no % {\def\MMLcsep {\unskip{\MMLrm e}\ignorespaces}} {\def\MMLcsep {\unskip\mfunction{e}\ignorespaces}} {\def\MMLcsep##1\empty{\doifelse\@@MMLenotationsymbol{dot}\cdot\times10^{##1}}}% #1\empty} \def\MMLcCIset#1% {{\bbd#1}} \def\widevec#1% {\vbox{\mathsurround\zeropoint\ialign{##\crcr \rightarrowfill\crcr\noalign{\nointerlineskip}% $\hfil\displaystyle{#1}\hfil$\crcr}}} \def\MMLcCIvector#1% {\widevec{#1}} \def\MMLcCImatrix#1% {{\bi#1}} \def\MMLcCIfunction#1% {#1\getXMLentity{NegThinSpace}} \def\MMLcCNinteger#1% {\doifXMLparelse{cn}{base} {\def\MMLcCNbase{\XMLpar{cn}{base}{}}% \doifelse\@@MMLbasesymbol\v!no {\MMLcCNbasedata{#1}} % {\MMLcCNbasedata{#1}_{\hbox{$\MMLrm\scriptscriptstyle {\MMLcCNbasedata{#1}_{\mfunction{% \processaction [\@@MMLbasesymbol] [\v!characters=>\MMLcCNbasestring BODH, \v!text=>\MMLcCNbasestring{BIN}{OCT}{DEC}{HEX}, % \s!unknown=>\MMLcCNbase]$}}}} \s!unknown=>\MMLcCNbase]}}}} {#1}} \def\MMLcCNbasedata#1% % {\ifnum\MMLcCNbase>10{\MMLrm#1}\else#1\fi} {\ifnum\MMLcCNbase>10\mfunction{#1}\else#1\fi} \def\MMLcCNbasestring#1#2#3#4% {\ifnum\MMLcCNbase= 2 #1\else \ifnum\MMLcCNbase= 8 #2\else \ifnum\MMLcCNbase=10 #3\else \ifnum\MMLcCNbase=16 #4\else \MMLcCNbase \fi\fi\fi\fi} \def\MMLcCNlogical#1% % {{\MMLrm#1}} {\mfunction{#1}} \bgroup \catcode`\<=\active % quick and dirty, best track the stack (todo) \gdef\MMLcCNrational#1% {\ConvertConstantAfter\doifinstringelse{sep}{#1} {\doMMLcCNrational#1\empty} {#1}} \gdef\doMMLcCNrational#1#3\empty {\hbox{$\frac{#1}{#3}$}} \egroup \def\MMLcCStext#1% % {{\MMLrm#1}} {\mfunction{#1}} % interval \defineXMLnested [interval] [closure=closed] {\directsetup{mmc:interval:start}} {\directsetup{mmc:interval:stop}} \startsetups mmc:interval:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:interval:stop \stopsavingXMLelements \XMLval{mmc:int}{\XMLpar{interval}{closure}{closed}}{error} \endgroup \stopsetups \startsetups mmc:interval:fetch \defineXMLnested [interval] [closure=closed] {\directsetup{mmc:interval:fetch:start}} {\directsetup{mmc:interval:fetch:stop}} \stopsetups \startsetups mmc:interval:fetch:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:interval:fetch:stop \stopsavingXMLelements \globallet\MMCintervalfrom\empty \globallet\MMCintervalto \empty \ifcase\XMLstacklevel \or \xdef\MMCintervalfrom{\getXMLstackdata\plusone} \or \xdef\MMCintervalfrom{\getXMLstackdata\plusone} \xdef\MMCintervalto {\getXMLstackdata\plustwo} \fi \endgroup \stopsetups \setupMMLappearance[interval][\c!alternative=\v!a,\c!separator={,}] \mapXMLvalue {mmc:int} {closed} {\left[\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right]} \mapXMLvalue {mmc:int} {open-closed} {\doifelse\@@MMLintervalalternative\v!b {\left<\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right]} {\left(\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right]}} \mapXMLvalue {mmc:int} {closed-open} {\doifelse\@@MMLintervalalternative\v!b {\left[\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right>} {\left[\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right)}} \mapXMLvalue {mmc:int} {open} {\doifelse\@@MMLintervalalternative\v!b {\left<\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right>} {\left(\getXMLstackdata\plusone\MMLseparator\@@MMLintervalseparator\getXMLstackdata\plustwo\right)}} % inverse \defineXMLcommand [inverse] {\directsetup{mmc:inverse}} \startsetups mmc:inverse \ifnum\XMLstacklevel>\plustwo \getXMLentity{\getXMLstackname\plustwo}^{-1} \left[\getXMLstackdata\plusthree\right] \else \xdef\MMLpowerelement{-1} \expanded{\postponeMMLactions{\rawXMLstackdata\plustwo}} \eraseXMLdataonstack\plustwo \fi \stopsetups % condition \defineXMLnested [condition] {\directsetup{mmc:condition:start}} {\directsetup{mmc:condition:stop}} \startsetups mmc:condition:start % \XMLdoifonstackelse{bvar} { % \XMLfirstnamed{bvar}\mid % } { } \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:condition:stop \stopsavingXMLelements \flushXMLstackfrom\plusone \endgroup \stopsetups % declare \setupMMLappearance[declare][\c!state=\v!start] \defineXMLnested [declare] {\directsetup{mmc:declare:start}} {\directsetup{mmc:declare:stop}} \startsetups mmc:declare:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:declare:stop \stopsavingXMLelements \doif\@@MMLdeclarestate\v!start { \getXMLentity{declare}\getXMLstackdata\plusone \ifnum\XMLstacklevel>\plusone \getXMLentity{ThickSpace} \getXMLentity{as} \getXMLentity{ThickSpace} \fi \getXMLstackdata\plustwo } \endgroup \stopsetups % lambda \setupMMLappearance[lambda][\c!alternative=b] \defineXMLnested [lambda] {\directsetup{mmc:lambda:start}} {\directsetup{mmc:lambda:stop}} \startsetups mmc:lambda:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:lambda:stop \stopsavingXMLelements \doifelse\@@MMLlambdaalternative\v!a { \getXMLentity{lambda}(\flushXMLstackwith\plusone{\MMLseparator,}) } { \countXMLnamedstack{bvar} \ifnum\scratchcounter>\plusone \left(\flushXMLnamedstackwith\plusone{bvar}{\MMLseparator,}\right) \else \XMLfirstnamed{bvar} \fi \getXMLentity{mapsto} \MMLcreset \XMLfirstnamed{apply,reln,ci,cn} } \endgroup \stopsetups \startsetups mmc:lambda:simple \defineXMLnested [lambda] {\directsetup{mmc:lambda:simple:start}} {\directsetup{mmc:lambda:simple:stop}} \stopsetups \startsetups mmc:lambda:simple:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:lambda:simple:stop \stopsavingXMLelements \MMLcreset % new \XMLfirstnamed{apply} \endgroup \stopsetups % compose \defineXMLcommand [compose] {\directsetup{mmc:compose}} \startsetups mmc:compose \begingroup \MMLcreset \let\MMLcCIfunction\firstofoneargument % brrr \doifelseMMCfunction { \left(\flushXMLstackwith\plustwo\circ\right) } { \flushXMLstackwith\plustwo\circ } \endgroup \stopsetups \defineXMLcommand [image] {\directsetup{mmc:image}} \startsetups mmc:image \getXMLentity{image} \left( \begingroup \startlocalsetups [mmc:function] \getXMLentity\currentXMLelement \stoplocalsetups \getXMLstackdata\plustwo \endgroup \right) \stopsetups \setupMMLappearance[piece][\c!separator=] \def\setMMLcPIECEseparator {\processaction [\@@MMLpieceseparator] [ \v!yes=>\def\theMMLpieceseparator{,\@col@amp@}, \v!no=>\let\theMMLpieceseparator\@col@amp@, \s!default=>\let\theMMLpieceseparator\@col@amp@, \s!unknown=>\def\theMMLpieceseparator{\,\,\hbox{\@@MMLpieceseparator}\,\,}]} \defineXMLargument[piecewise] {\cases} \defineXMLnested [piece] {\directsetup{mmc:piece:start}} {\directsetup{mmc:piece:stop}} \defineXMLenvironmentsave [otherwise] {} {\directsetup{mmc:otherwise}} \startsetups mmc:piece:start \startsavingXMLelements \setMMLcPIECEseparator \stopsetups \startsetups mmc:piece:stop \stopsavingXMLelements \edef\ascii{\getXMLstackdata\plusone} \@EA\XMLRtoks\@EA{\ascii\theMMLpieceseparator} \edef\ascii{\getXMLstackdata\plustwo} \@EA\appendtoks\@EA\mathematics\@EA{\ascii}\to\XMLRtoks \the\XMLRtoks\crcr \stopsetups \startsetups mmc:otherwise \XMLflush{otherwise}\MMLcPIECEseparator\@col@amp@\mathematics{\getXMLentity{otherwise}}\crcr \stopsetups \defineXMLcommand [quotient] {\directsetup{mmc:quotient}} \startsetups mmc:quotient \lfloor\getXMLstackdata\plustwo/\getXMLstackdata\plusthree\rfloor \stopsetups \defineXMLcommand [factorial] {\getXMLstackdata\plustwo !} \defineXMLcommand [divide] [\MMLargumentprefix] [] {\directsetup{mmc:divide}} % brr not nested \setupMMLappearance [divide] [\c!level=\!!maxcard,\c!alternative=\v!a] \startsetups mmc:divide \startusingMMLarguments \increment\MMLcDIVIDElevel \doifelse \@@MMLdividealternative\v!b { \getXMLstackdata\plustwo/\getXMLstackdata\plusthree } { \ifnum\MMLcDIVIDElevel>\@@MMLdividelevel\space \getXMLstackdata\plustwo/\getXMLstackdata\plusthree \else \MMLcreset \frac{\MMLcreset\getXMLstackdata\plustwo}{\MMLcreset\getXMLstackdata\plusthree}% \fi } \decrement\MMLcDIVIDElevel \stopusingMMLarguments \stopsetups % min max \defineXMLcommand [min] {\min\directsetup{mmc:minmax}} \defineXMLcommand [max] {\max\directsetup{mmc:minmax}} \startsetups mmc:minmax \doifelse{\getXMLstackdata\plustwo}{bvar} { {}_{\getXMLstackdata\plustwo} \left\{\flushXMLstackwith\plusthree{\MMLseparator,}\right\} } { \left\{\flushXMLstackwith\plustwo {\MMLseparator,}\right\} } \stopsetups % minus plus \defineXMLcommand [minus] {\directsetup{mmc:minus}} \defineXMLcommand [plus] [\MMLargumentprefix] [] {\directsetup{mmc:plus}} \setupMMLappearance [plus] [\c!alternative=\v!a] % b = no sign -> 3 1/4 \setupMMLappearance [sign] [\c!reduction=\v!yes] \startsetups mmc:minus \doif \@@MMLsignreduction \v!yes { \setMMLcreset{fn,\MMLcfunctionlist} } \ifcase\XMLstacklevel \or % self \or -\getXMLstackdata\plustwo \else \flushXMLstackwith\plustwo- \fi \stopsetups \startsetups mmc:plus \startusingMMLarguments \doifelse \@@MMLsignreduction \v!yes { \setMMLcreset{fn,plus,minus,\MMLcfunctionlist,\MMLcconstructlist}% was plus/, minus/ \doifelse{\getXMLstackname\plustwo} {apply} { % branch needed, else (a-b) + (c-d) goes wrong % reset check in case of (-x) + 37 \begingroup \dodoifelseMMCfunctioninapply \plustwo {minus} { \ifnum\XMLstacklevel>\plustwo \endgroup \else \endgroup \MMLcreset \fi } { \endgroup } \doifelse \@@MMLplusalternative \v!b { \getXMLstackdata\plustwo \, } { \flushXMLstackwith\plustwo + } } { \flushXMLstackwith\plustwo { \doifelse {\getXMLstackname\recurselevel} {apply} { \begingroup \dodoifelseMMCfunctioninapply \recurselevel {minus} { \ifnum\XMLstacklevel>\plustwo +\fi } { \doifelse \@@MMLplusalternative \v!b { \, % maybe 2 1/3 } { + } } \endgroup \MMLcreset } { + } } } } { \ifcase\XMLstacklevel \or % self \or +\getXMLstackdata\plustwo \else \flushXMLstackwith\plustwo+ \fi } \stopusingMMLarguments \stopsetups % power \defineXMLcommand [power] {\directsetup{mmc:power}} \setupMMLappearance[power][\c!reduction=\v!yes] \let\MMLpowerelement\empty \startsetups mmc:power \doifelse {\getXMLstackname\plustwo} {apply} { \doifelse\@@MMLpowerreduction\v!yes { \doifelseMMCfunctioninapply \plustwo \MMLcfunctionlist { \xdef\MMLpowerelement{\getXMLstackdata\plusthree}% postpone \MMLcreset\getXMLstackdata\plustwo } { \left(\MMLcreset\getXMLstackdata\plustwo\right)^{\MMLcreset\getXMLstackdata\plusthree} } } { \left(\MMLcreset\getXMLstackdata\plustwo\right)^{\MMLcreset\getXMLstackdata\plusthree} } } { \getXMLstackdata\plustwo^{\MMLcreset\getXMLstackdata\plusthree} } \stopsetups % rem \defineXMLcommand [rem] {\flushXMLstackwith\plustwo{\getXMLentity{mod}}} \setupMMLappearance [times] [\c!symbol=\v!no,\c!auto=\v!yes] % new, auto catches cn cn cn \defineXMLcommand [times] [\MMLargumentprefix] [] {\directsetup{mmc:times}} \startsetups mmc:times \startusingMMLarguments \setMMLcreset{\MMLcfunctionlist,\MMLcconstructlist}% \doifelse\@@MMLtimesauto\v!no { \let\@@MMLtimes@@symbol\@@MMLtimessymbol } { \countXMLnamedstack {cn} \ifnum\scratchcounter>\plusone \doifinsetelse\@@MMLtimessymbol{\v!yes,\v!no} { \let\@@MMLtimes@@symbol\v!yes } { \let\@@MMLtimes@@symbol\@@MMLtimessymbol } \else \let\@@MMLtimes@@symbol\@@MMLtimessymbol \fi } \doifelse\@@MMLtimes@@symbol\v!yes { \flushXMLstackwith\plustwo\times } { \doifelse\@@MMLtimes@@symbol{dot} { \flushXMLstackwith\plustwo\cdot } { \doifelse\@@MMLtimes@@symbol{times} { \flushXMLstackwith\plustwo\times } { \flushXMLstackwith\plustwo\empty } } } \stopusingMMLarguments \stopsetups \defineXMLcommand [root] {\directsetup{mmc:root}} \setupMMLappearance[root][\c!symbol=\v!yes] \startsetups mmc:root \XMLdoifonstackelse {degree} { \root \doifnot\@@MMLrootsymbol\v!no{\MMLcreset\XMLfirstnamed{degree}} \of } { \sqrt } {\MMLcreset\XMLfirstnamed{apply,reln,ci,cn}} \stopsetups % gcd \defineXMLcommand [gcd] {\gcd\left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right)} % and or xor implies \defineXMLcommand [and] {\flushXMLstackwith\plustwo{\getXMLentity{and}}} \defineXMLcommand [or] {\flushXMLstackwith\plustwo{\getXMLentity{or}}} \defineXMLcommand [xor] {\flushXMLstackwith\plustwo{\getXMLentity{xor}}} \defineXMLcommand [implies] {\flushXMLstackwith\plustwo{\getXMLentity{implies}}} % not \defineXMLcommand [not] {\getXMLentity{not}\getXMLstackdata\plustwo} % forall exists \defineXMLcommand [forall] {\directsetup{mmc:forall}} \defineXMLcommand [exists] {\directsetup{mmc:exists}} %D We need to shift left below rotated A. \startsetups mmc:forall \getXMLentity{forall} \getXMLentity{NegThinSpace} \directsetup{mmc:forall-exists} \stopsetups \startsetups mmc:exists \getXMLentity{exists} \directsetup{mmc:forall-exists} \stopsetups \startsetups mmc:forall-exists _{\flushXMLnamedstackwith\plustwo{bvar}{\MMLseparator,}} \XMLdoifonstackelse {condition} { \getXMLentity{ThickSpace} \begingroup \XMLfirstnamed{condition} \endgroup \countXMLnamedstack {apply,reln,ci,cn} \ifcase\scratchcounter \or % == snelle volgende \left\vert \MMLcreset \getXMLentity{MediumSpace} \flushXMLnamedstackwith\plustwo{apply,reln,ci,cn}\empty \right. \else % special case % \defineXMLignore[condition] \collectXMLnamedstack{apply,reln,ci,cn}{\hfill\crcr} \left\vert \matrix{\the\XMLRtoks} \right. \fi } { :\XMLfirstnamed{apply,reln,ci,cn} } \stopsetups \defineXMLcommand [abs] {\left\vert \MMLcreset \flushXMLstackfrom\plustwo \right\vert} \defineXMLcommand [conjugate] {{\overline{\MMLcreset \flushXMLstackfrom\plustwo}}} % watch extra {} \defineXMLcommand [arg] {\getXMLentity{arg} \left(\MMLcreset\flushXMLstackfrom\plustwo\right)} \defineXMLcommand [real] {\getXMLentity{real} \left(\MMLcreset\flushXMLstackfrom\plustwo\right)} \defineXMLcommand [imaginary] {\getXMLentity{imaginary}\left(\MMLcreset\flushXMLstackfrom\plustwo\right)} \defineXMLcommand [lcm] {\getXMLentity{lcm} \left(\flushXMLstackwith\plustwo{\MMLseparator,}\right)} \defineXMLcommand [floor] {\getXMLentity{lfloor} \flushXMLstackfrom\plustwo \getXMLentity{rfloor}} \defineXMLcommand [ceiling] {\getXMLentity{lceiling} \flushXMLstackfrom\plustwo \getXMLentity{rceiling}} % relations \defineXMLcommand [eq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation=} \defineXMLcommand [neq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\neq} \defineXMLcommand [gt] [\MMLargumentprefix] [\c!align=] {\MMLcrelation>} \defineXMLcommand [lt] [\MMLargumentprefix] [\c!align=] {\MMLcrelation<} \defineXMLcommand [geq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\geq} \defineXMLcommand [leq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\leq} \defineXMLcommand [equivalent] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\equiv} \defineXMLcommand [approx] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\approx} \defineXMLcommand [factorof] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\mid} \setupMMLappearance[relation][\c!align=\v!no] \def\MMLcrelation {\startusingMMLarguments \MMLcreset \edef\@@MMLrelationalign{\executeifdefined{\MMLargumentprefix\c!align}\@@MMLrelationalign}% \processaction [\@@MMLrelationalign] [\v!last=>\let\next\lastMMLcrelation , \v!first=>\let\next\firstMMLcrelation, \v!yes=>\let\next\leftMMLcrelation , \v!left=>\let\next\leftMMLcrelation , \v!right=>\let\next\rightMMLcrelation, \s!default=>\let\next\noMMLcrelation , \s!unknown=>\let\next\noMMLcrelation ] \next} \def\noMMLcrelation#1% {\flushXMLstackwith\plustwo{#1} \stopusingMMLarguments} \def\lastMMLcrelation#1% weird, probably bugged {\XMLRtoks\emptytoks \dostepwiserecurse\plustwo\XMLstacklevel\plusone {\appendetoks\noexpand\getXMLstackdata{\recurselevel}\to\XMLRtoks \ifnum\recurselevel<\numexpr\XMLstacklevel-1\relax \appendtoks\@col@amp@#1\crcr\to\XMLRtoks \else\ifnum\recurselevel=\numexpr\XMLstacklevel-1\relax \appendtoks\@col@amp@#1\to\XMLRtoks \fi\fi}% \eqalign{\the\XMLRtoks\crcr}% \stopusingMMLarguments} \def\firstMMLcrelation#1% {\collectXMLstackrows\plusthree{\crcr\@col@amp@#1}% \eqalign{\getXMLstackdata\plustwo\@col@amp@#1\the\XMLRtoks}% \stopusingMMLarguments} \def\leftMMLcrelation#1% {\collectXMLstackrows\plustwo{\@col@amp@#1\crcr}% \eqalign{\the\XMLRtoks}% \stopusingMMLarguments} \def\rightMMLcrelation#1% {\collectXMLstackrows\plustwo{\crcr#1{}\@col@amp@}% \eqalign{\@col@amp@\the\XMLRtoks\crcr}% \stopusingMMLarguments} \defineXMLcommand [becomes] {\MMLcrelation{:=}} \addtocommalist{becomes/}\MMLcmainresetlist % calculus and vector calculus \setupMMLappearance[int][\c!location=\v!top] \def\doMMLlimits#1% {\doifelsevalue{@@MML#1\c!location}\v!top\limits\nolimits} \defineXMLnested [domainofapplication] {\directsetup{mmc:domainofapplication:start}} {\directsetup{mmc:domainofapplication:stop}} \startsetups mmc:domainofapplication:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:domainofapplication:stop \stopsavingXMLelements % \MMLcreset \flushXMLstackfrom\plusone \endgroup \stopsetups \defineXMLcommand [int] {\directsetup{mmc:int}} \startsetups mmc:int \MMLcreset \XMLdoifonstackelse{domainofapplication} { \int\doMMLlimits{int}_{\XMLfirstnamed{domainofapplication}}\relax } { \XMLdoifonstackelse{condition} { \int\doMMLlimits{int}_{\XMLfirstnamed{condition}}\relax } { \XMLdoifonstackelse{lowlimit} { \int\doMMLlimits{int} _{\XMLfirstnamed{lowlimit}} ^{\XMLfirstnamed{uplimit}} } { % funny, why do we have lowlimit/uplimit then \XMLdoifonstackelse{interval} { \begingroup \startlocalsetups mmc:interval:start % \begingroup \startsavingXMLelements \stoplocalsetups \startlocalsetups mmc:interval:stop % \stopsavingXMLelements \xdef\MMLfirstelement {\getXMLstackdata\plusone} \xdef\MMLsecondelement{\getXMLstackdata\plustwo} \endgroup \stoplocalsetups \globallet\MMLfirstelement \empty \globallet\MMLsecondelement\empty \XMLfirstnamed{interval} \endgroup \int\doMMLlimits{int} _{\MMLfirstelement} ^{\MMLsecondelement} } { \int } } } } \MMLcreset \XMLdoifonstackelse{apply} { \doifelseMMCfunction { \XMLfirstnamed{apply} } { % if there are too many () now, we need to be more clever \left(\XMLfirstnamed{apply}\right) } } { \XMLfirstnamed{ci} } \XMLdoifonstackelse{bvar} { \,% \getXMLentity{ThinSpace}% % {\MMLrm\getXMLentity{mathematicald}} \mfunction{\getXMLentity{mathematicald}} \XMLfirstnamed{bvar} } { % nothing } \stopsetups \setupMMLappearance[diff][\c!location=\v!top,\c!alternative=\v!a] \defineXMLcommand [diff] {\directsetup{mmc:diff}} \defineXMLcommand [partialdiff] {\directsetup{mmc:partialdiff}} % \setupMMLappearance[diff][alternative=b] % % \startXMLdata % xfa % x2fa % \stopXMLdata % d^y/dx^2 % % \startXMLdata % % x2 % xy % % \stopXMLdata \startsetups mmc:diff \MMLcreset \doifelse\@@MMLdiffalternative\v!a { \XMLdoifonstackelse{lambda} { % a special case (mathadore/openmath) \begingroup \defineXMLsave[ci] \defineXMLsave[cn] \defineXMLprocess[lambda] \defineXMLprocess[bvar] \frac { d^{\XMLfirstnamed{bvar}\XMLflush{cn}}{\XMLfirstnamed{lambda}\XMLflush{ci}} } { d{\XMLfirstnamed{bvar}\XMLflush{ci}}^{\XMLfirstnamed{bvar}\XMLflush{cn}} } \endgroup } { \XMLdoifonstackelse{bvar} { \frac { \XMLdoifonstackelse{degree} { \collectXMLnamedstack{degree}\empty } { \collectXMLnamedstacknamed{bvar}{degree}+ } \mfunction{\getXMLentity{mathematicald}} ^{\the\XMLRtoks} \doif\@@MMLdifflocation\v!top { \XMLdoifonstackelse{ci} { \XMLfirstnamed{ci} } { \MMLcreset\XMLfirstnamed{apply} } } } { \mfunction{\getXMLentity{mathematicald}} \begingroup \defineXMLsave[degree] \XMLfirstnamed{bvar} \doifXMLdata{degree} { ^{\XMLflush{degree}} } \endgroup } \doifnot\@@MMLdifflocation\v!top { \left(\MMLcreset\XMLfirstnamed{apply,ci}\right) } } { \flushXMLstackfrom\plustwo^\prime } } } { \MMLcreset \XMLfirstnamed{apply,ci} % there can be problems with nested diff's: ^^{} error % so we add an empty group here {}^ { \XMLdoifonstackelse{degree} { \defXMLfirstnamedtext\ascii{degree} \dorecurse\ascii\prime } { \prime } } } \stopsetups \startsetups mmc:partialdiff \XMLdoifonstackelse{list} { \getXMLentity{capitaldifferentiald}_{ \begingroup \setfalse\MMLlistdelimiters \XMLallnamed{list} \endgroup } \XMLfirstnamed{apply,reln,ci,cn} } { \XMLdoifonstackelse{bvar} { \frac { \XMLdoifonstackelse{degree} { \collectXMLnamedstack{degree}\empty } { \collectXMLnamedstacknamed{bvar}{degree}+ } \getXMLentity{differentiald}^{\the\XMLRtoks} % \let\MMLcDEGREE\gobbletwoarguments % \doifelseMMCfunction\MMLcreset\donothing \MMLcreset \XMLfirstnamed{apply,reln,ci,cn} } { \defineXMLnested[bvar] {\directsetup{mmc:bvar:diff:start}} {\directsetup{mmc:bvar:diff:stop}} \XMLfirstnamed{bvar} } } { \XMLfirstnamed{apply,reln,ci,cn} } } \stopsetups \startsetups mmc:bvar:diff:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:bvar:diff:stop \stopsavingXMLelements \getXMLentity{differentiald}\XMLfirstnamed{apply,reln,ci,cn} \XMLdoifonstackelse{degree} { ^{\XMLfirstnamed{degree}} } { % nothing } \endgroup \stopsetups \def\subMMLcelement #1#2{_{#2}} \def\superMMLcelement#1#2{^{#2}} \defineXMLprocess [lowlimit] \defineXMLprocess [uplimit] \defineXMLprocess [bvar] \defineXMLprocess [degree] % option: % % \defineXMLentity [div] {\mathematics{\triangledown\times}} % \defineXMLentity [curl] {\mathematics{\triangledown .}} % \defineXMLentity [grad] {\mathematics{\triangledown }} \defineXMLcommand [divergence] {\getXMLentity{divergence}\directsetup{mmc:donamedfunction}} \defineXMLcommand [grad] {\getXMLentity {grad}\directsetup{mmc:donamedfunction}} \defineXMLcommand [curl] {\getXMLentity {curl}\directsetup{mmc:donamedfunction}} \defineXMLcommand [laplacian] {\getXMLentity {laplacian}\directsetup{mmc:donamedfunction}} \defineXMLcommand [ident] {\getXMLentity {identity}\directsetup{mmc:donamedfunction}} % \defineXMLcommand [domain] {\getXMLentity {domain}\directsetup{mmc:donamedfunction}} % \defineXMLcommand [codomain] {\getXMLentity {codomain}\directsetup{mmc:donamedfunction}} \defineXMLcommand[domain] {\directsetup{mmc:domain:action}} \defineXMLcommand[codomain]{\directsetup{mmc:codomain:action}} \setupMMLappearance[domain] [symbol=] \setupMMLappearance[codomain][symbol=] \startsetups mmc:domain:action \doifelsenothing\@@MMLdomainsymbol { \getXMLentity{domain}\directsetup{mmc:donamedfunction} } { \@@MMLdomainsymbol_{\flushXMLstackfrom\plustwo} } \stopsetups \startsetups mmc:codomain:action \doifelsenothing\@@MMLcodomainsymbol { \getXMLentity{codomain}\directsetup{mmc:donamedfunction} } { \@@MMLcodomainsymbol_{\flushXMLstackfrom\plustwo} } \stopsetups \startsetups mmc:donamedfunction % \left( % \begingroup \MMLcreset\flushXMLstackfrom\plustwo % \endgroup % \right) \stopsetups % theory of sets \defineXMLnested [set] {\setups{mmc:set:start}} {\setups{mmc:set:stop}} \startsetups mmc:set:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:set:stop \stopsavingXMLelements \XMLdoifonstackelse{condition} { \left\{\XMLfirstnamed{bvar}\,\middle\vert\,\XMLfirstnamed{condition}\right\} } { \left\{\flushXMLstackwith\plusone{\MMLseparator,}\right\} } \endgroup \stopsetups \defineXMLnested [list] {\setups{mmc:list:start}} {\setups{mmc:list:stop}} \settrue\MMLlistdelimiters \startsetups mmc:list:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:list:stop \stopsavingXMLelements \ifconditional\MMLlistdelimiters\left [\fi \begingroup \settrue\MMLlistdelimiters \flushXMLstackwith\plusone{\MMLseparator,} \endgroup \ifconditional\MMLlistdelimiters\right]\fi \endgroup \stopsetups \defineXMLcommand [union] {\MMLcset\cup} \defineXMLcommand [intersect] {\MMLcset\cap} \defineXMLcommand [in] {\MMLcset\in} \defineXMLcommand [notin] {\MMLcset{\not\in}} \defineXMLcommand [subset] {\MMLcset\subset} \defineXMLcommand [prsubset] {\MMLcset\subseteq} \defineXMLcommand [notsubset] {\MMLcset{\not\subset}} \defineXMLcommand [notprsubset] {\MMLcset{\not\subseteq}} \defineXMLcommand [setdiff] {\MMLcset\setminus} \def\MMLcset#1{\getXMLstackdata\plustwo#1\getXMLstackdata\plusthree} \defineXMLcommand [card] {\left\vert\flushXMLstackfrom\plustwo\right\vert} \defineXMLcommand [cartesianproduct] {\flushXMLstackwith\plustwo\times} % sequences and series \defineXMLcommand [sum] {\MMLcSUMandPRODUCT{sum}\sum} \defineXMLcommand [product]{\MMLcSUMandPRODUCT{product}\prod} \setupMMLappearance[sum] [\c!location=\v!top] \setupMMLappearance[product][\c!location=\v!top] \def\stackMMLsubscripts#1% {\vbox {\baselineskip\zeropoint % hack, taco vragen \halign{$\scriptstyle\hss##\hss$\cr#1\crcr}}} \def\MMLcSUMandPRODUCT#1#2% {\begingroup \XMLdoifonstackelse{condition,bvar,lowlimit} {\def\MMLcSUMlow {_{\XMLdoifonstackelse{condition} {\collectXMLnamedstack{condition}{\crcr}% \stackMMLsubscripts{\the\XMLRtoks}} {\XMLdoifonstackelse{bvar} {\XMLfirstnamed{bvar}% \XMLdoifonstackelse{lowlimit}{=}{}}% {}% \XMLfirstnamed{lowlimit}}}}} {\let\MMLcSUMlow\empty}% \XMLdoifonstackelse{uplimit} {\def\MMLcSUMup{^{\XMLfirstnamed{uplimit}}}} {\let\MMLcSUMup\empty}% \XMLdoifonstackelse{interval} % open math converter gives this {\begingroup \directsetup{mmc:interval:fetch}% \XMLfirstnamed{interval}% \endgroup \ifx\MMCintervalfrom\empty\else \def\MMLcSUMlow{_{\XMLdoifonstackelse{bvar}{\XMLfirstnamed{bvar}{=}}{}\MMCintervalfrom}}% \fi \ifx\MMCintervalto\empty \else \def\MMLcSUMup{^{\MMCintervalto}}% \fi} {}% \MMLcreset#2\doMMLlimits{#1}\MMLcSUMup\MMLcSUMlow \directsetup{mmc:lambda:simple}% a bit of open math conversion mess \MMLcreset\XMLfirstnamed{apply,lambda,ci}% \endgroup} \defineXMLcommand [limit] {\directsetup{mmc:limit}} \setupMMLappearance[limit][\c!location=\v!top] \startsetups mmc:limit \MMLcreset \lim \doMMLlimits{limit}_{ \MMLcreset \XMLdoifonstackelse {condition} { \XMLfirstnamed{condition} } { \XMLdoifonstackelse {bvar} { \XMLfirstnamed{bvar}\rightarrow } { } \XMLfirstnamed{lowlimit} } } \begingroup \MMLcreset \directsetup{mmc:lambda:simple}% a bit of open math conversion mess \XMLfirstnamed{apply,lambda}% lambda needed for openmath \endgroup \stopsetups \defineXMLcommand [tendsto] [type=default] {\directsetup{mmc:tendsto}} \startsetups mmc:tendsto \MMLcreset \getXMLstackdata\plustwo \processaction [\XMLpar{tendsto}{type}{default}] [ above=>\downarrow, below=>\uparrow, unknown=>\rightarrow] \MMLcreset \getXMLstackdata\plusthree \stopsetups % elementary classical functions \defineXMLcommand [exp] {\directsetup{mmc:exp}} \defineXMLcommand [ln] {\directsetup{mmc:function}} \defineXMLcommand [log] {\directsetup{mmc:log}} \defineXMLignore [logbase] \setupMMLappearance[log][\c!location=\v!right] \startsetups mmc:exp \getXMLentity{exponentiale}^{\XMLfirstnamed{apply,reln,ci,cn}} \stopsetups \startsetups mmc:log \XMLdoifonstackelse {logbase} { \doifelse\@@MMLloglocation\v!left { \mathop{{}^{{\defineXMLprocess[logbase]\XMLfirstnamed{logbase}}} \getXMLentity{NegThinSpace} \getXMLentity{log}} } { \getXMLentity{log}_{{\defineXMLprocess[logbase]\XMLfirstnamed{logbase}}} } } { \getXMLentity{log} } \MMLcreset % mmc:function:argument assumes that the apply is second in the row (*1*) % \removeXMLdatafromstack{logbase} \directsetup{mmc:function:argument} \stopsetups % statistics \defineXMLcommand [mean] {\overline{\getXMLstackdata\plustwo}} \defineXMLcommand [sdev] {\sigma(\MMLcreset\getXMLstackdata\plustwo)} \defineXMLcommand [variance] {\sigma(\MMLcreset\getXMLstackdata\plustwo)^2} \defineXMLcommand [median] {\getXMLentity{median}(\MMLcreset\getXMLstackdata\plustwo)} \defineXMLcommand [mode] {\getXMLentity{mode}(\MMLcreset\getXMLstackdata\plustwo)} % moments \defineXMLcommand [moment] {\directsetup{mmc:moment}} \defineXMLprocess [momentabout] \startsetups mmc:moment \left\langle\XMLfirstnamed{apply,reln,ci,cn}^{\XMLfirstnamed{degree}}\right\rangle \XMLdoifonstackelse{momentabout} { _{\XMLfirstnamed{momentabout}} } { } \stopsetups % linear algebra \defineXMLcommand [vector] {\directsetup{mmc:vector}} % sequence \setupMMLappearance [vector] [\c!direction=\v!horizontal,\c!separator={,}] \defineXMLnested [vector] {\directsetup{mmc:vector:start}} {\directsetup{mmc:vector:stop}} \startsetups mmc:vector:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:vector:stop \stopsavingXMLelements \ifnum\XMLstacklevel>\plusone \doifelse\@@MMLvectordirection\v!horizontal { \left(\flushXMLstackwith\plusone{\MMLseparator\@@MMLvectorseparator}\right) } { \collectXMLstack\crcr \MMLcreset\left(\matrix{\the\XMLRtoks}\right) } \else \overrightarrow{\charhtstrut\getXMLstackdata\plusone} \fi \endgroup \stopsetups \defineXMLnestedenvironmentsave [matrix] {} {\directsetup{mmc:matrix}} \defineXMLnestedenvironmentsave [matrixrow] {} {\directsetup{mmc:matrixrow}} \unexpanded\def\@col@amp@{&} \settrue\MMCdelmatrix %( ) when true \startsetups mmc:matrix \begingroup \MMLcreset \defineXMLnestedenvironmentsave [matrixrow] {} {\directsetup{mmc:matrixrow:do}} \ifconditional\MMCdelmatrix \left(\matrix{\XMLflush{matrix}}\right) \else \settrue\MMCdelmatrix \matrix{\XMLflush{matrix}} \fi \endgroup \stopsetups \startsetups mmc:matrixrow \begingroup \MMLcreset \left(\matrix{\directsetup{mmc:matrixrow:do}}\right) \endgroup \stopsetups \startsetups mmc:matrixrow:do \begingroup \startsavingXMLelements \XMLflush{matrixrow} \stopsavingXMLelements \collectXMLstackrows\plusone\@col@amp@ \edef\ascii{\the\XMLRtoks} \edef\ascii{\ascii} \expandafter\endgroup\ascii\crcr \stopsetups \defineXMLcommand [determinant] {\directsetup{mmc:determinant}} \defineXMLcommand [transpose] {\directsetup{mmc:transpose}} \defineXMLcommand [selector] {\directsetup{mmc:selector}} \startsetups mmc:determinant \begingroup \left| \setfalse\MMCdelmatrix \getXMLstackdata\plustwo \right| \endgroup \stopsetups \startsetups mmc:transpose % \getXMLstackdata\plustwo^{\MMLrm T} \getXMLstackdata\plustwo^{\mfunction{T}} \stopsetups \startsetups mmc:selector \MMLmathinner{\getXMLstackdata\plustwo}_{\MMLcreset\flushXMLstackwith\plusthree{\MMLseparator,}} \stopsetups \defineXMLcommand [vectorproduct] {\getXMLstackdata\plustwo\getXMLentity{vectorproduct}\getXMLstackdata\plusthree} \defineXMLcommand [scalarproduct] {\getXMLstackdata\plustwo\getXMLentity{scalarproduct}\getXMLstackdata\plusthree} \defineXMLcommand [outerproduct] {\getXMLstackdata\plustwo\getXMLentity {outerproduct}\getXMLstackdata\plusthree} % semantic mapping elements \defineXMLnested [semantics] {\directsetup{mmc:semantics:start}} {\directsetup{mmc:semantics:stop}} \startsetups mmc:semantics:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:semantics:stop \stopsavingXMLelements \XMLdoifonstackelse {annotation} { \flushXMLnamedstackwith\plusone{annotation}\empty } { \flushXMLnamedstackwith\plusone{apply}\empty } \endgroup \stopsetups \defineXMLenvironmentsave [annotation] [encoding=] {} {\directsetup{mmc:annotation}} \startsetups mmc:annotation \expanded{\doifinset{\XMLpar{annotation}{encoding}{}}{TeX,tex,TEX,ConTeXt,context,CONTEXT}} { \XMLtexdata{annotation} } \stopsetups \defineXMLignore [annotation-xml] % misc \defineXMLcommand [integers] {\getXMLentity{integers}} \defineXMLcommand [reals] {\getXMLentity{reals}} \defineXMLcommand [rationals] {\getXMLentity{rationals}} \defineXMLcommand [naturalnumbers] {\getXMLentity{naturalnumbers}} \defineXMLcommand [complexes] {\getXMLentity{complexes}} \defineXMLcommand [primes] {\getXMLentity{primes}} \defineXMLcommand [exponentiale] {\getXMLentity{ExponentialE}} \defineXMLcommand [imaginaryi] {\getXMLentity{ImaginaryI}} \defineXMLcommand [notanumber] {\mathop{\mfunction{NaN}}} \defineXMLcommand [true] {\mathop{\mfunction{true}}} \defineXMLcommand [false] {\mathop{\mfunction{false}}} \defineXMLcommand [emptyset] {\mathop{\O}} \defineXMLcommand [pi] {\pi} \defineXMLcommand [eulergamma] {\gamma} \defineXMLcommand [infinity] {\infty} % gonio functions \defineXMLcommand[sin] {\directsetup{mmc:function}} \defineXMLcommand[arcsin] {\directsetup{mmc:function}} \defineXMLcommand[sinh]{\directsetup{mmc:function}} \defineXMLcommand[arcsinh]{\directsetup{mmc:function}} \defineXMLcommand[cos] {\directsetup{mmc:function}} \defineXMLcommand[arccos] {\directsetup{mmc:function}} \defineXMLcommand[cosh]{\directsetup{mmc:function}} \defineXMLcommand[arccosh]{\directsetup{mmc:function}} \defineXMLcommand[tan] {\directsetup{mmc:function}} \defineXMLcommand[arctan] {\directsetup{mmc:function}} \defineXMLcommand[tanh]{\directsetup{mmc:function}} \defineXMLcommand[arctanh]{\directsetup{mmc:function}} \defineXMLcommand[cot] {\directsetup{mmc:function}} \defineXMLcommand[arccot] {\directsetup{mmc:function}} \defineXMLcommand[coth]{\directsetup{mmc:function}} \defineXMLcommand[arccoth]{\directsetup{mmc:function}} \defineXMLcommand[csc] {\directsetup{mmc:function}} \defineXMLcommand[arccsc] {\directsetup{mmc:function}} \defineXMLcommand[csch]{\directsetup{mmc:function}} \defineXMLcommand[arccsch]{\directsetup{mmc:function}} \defineXMLcommand[sec] {\directsetup{mmc:function}} \defineXMLcommand[arcsec] {\directsetup{mmc:function}} \defineXMLcommand[sech]{\directsetup{mmc:function}} \defineXMLcommand[arcsech]{\directsetup{mmc:function}} \setupMMLappearance[function][\c!reduction=\v!yes] \startsetups mmc:function \getXMLentity\currentXMLelement \ifx\MMLpowerelement\empty\else ^{\MMLcreset\MMLpowerelement\empty} \getXMLentity{NegThinSpace} \global\let\MMLpowerelement\empty \fi \doif {\getXMLstackname\plusone} {\currentXMLelement} { % rather fuzzy test; looks like an apply case \directsetup{mmc:function:argument} } \stopsetups \startsetups mmc:function:argument \doifelse\@@MMLfunctionreduction\v!yes { % \doifelse {\getXMLstackname\plustwo} {apply} { % \doifelseMMCfunctioninapply \plustwo \MMLcfunctionlist \donefalse \donetrue % % best is to grab the apply (independent of order), (*1*), so: % \XMLdoifonstackelse {apply} { \doifelseMMCfunctioninapply \XMLstackposition {\MMLcfunctionlist,divide} \donefalse \donetrue } { \donefalse } } { \donetrue } % beware, we still flush from 2 up \ifdone \left(\MMLcreset\flushXMLstackfrom\plustwo\right) \else \MMLcreset\flushXMLstackfrom\plustwo \fi \stopsetups % presentation mml \def\resetMMLseparator {\newcounter\MMLxxcounter \let\lastMMLseparator\empty} \def\grabMMLseparator#1% {\increment\MMLxxcounter \newcounter\MMLyycounter \expanded{\dograbMMLseparator#1\noexpand\relax}} \def\dograbMMLseparator {\increment\MMLyycounter \doifnextcharelse\relax {\lastMMLseparator\gobbleoneargument} {\doifnextcharelse\xmlrent\grabMMLseparatora\grabMMLseparatorb}} \def\grabMMLseparatora#1\xmlrent#2% {\ifnum\MMLxxcounter=\MMLyycounter\space \def\lastMMLseparator{\xmlrent{#2}}% \fi \dograbMMLseparator} \def\grabMMLseparatorb#1% {\ifnum\MMLxxcounter=\MMLyycounter\space \doifXMLentityelse{#1} {\def\lastMMLseparator{\xmlrent{#1}}} {\def\lastMMLseparator{#1}}% \fi \dograbMMLseparator} % \defineXMLargument [mi] \MMLpMI \defineXMLargument [mn] \MMLpMN \defineXMLargument [mo] \MMLpMO \def\MMLpMI#1% {\begingroup \setMMLpmathstyle{mstyle}% #1% \endgroup} % \def\MMLpMN#1% % {\begingroup % \MMLrm % \setMMLpmathstyle{mstyle}% % #1% % \endgroup} \def\MMLpMN#1% {\mfunction{\setMMLpmathstyle{mstyle}#1}} \def\MMLpMO#1% yes or no {\flattenXMLcontent{#1}% \doifXMLentityelse\flattenedXMLcontent {\getXMLentity\flattenedXMLcontent} {\ConvertConstantAfter\doifinstringelse{\xmlrent}{#1} % TODO ! ! ! ! ! ! ! ! {#1} {\hbox {\setMMLpmathstyle{mstyle}% \ignorespaces#1\unskip}}}} % we need to get rid of spaces: \def\MMLpMO#1% yes or no {\flattenXMLcontent{#1}% \doifXMLentityelse\flattenedXMLcontent {\getXMLentity\flattenedXMLcontent} {\ignorespaces#1\removeunwantedspaces}} \def\doMMLleft #1{\pushmacro\left \let\left \empty\normalleft #1\popmacro\left} \def\doMMLright#1{\pushmacro\right\let\right\empty\normalright#1\popmacro\right} \let\MMLpopen \empty \let\MMLpclose\empty \defineXMLnested [mfenced] [open=(,close=),separators=] {\directsetup{mmp:mfenced:start}} {\directsetup{mmp:mfenced:stop}} \startsetups mmp:mfenced:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:mfenced:stop \stopsavingXMLelements \edef\MMLpopen {\XMLpar{mfenced}{open} {}} \edef\MMLpclose{\XMLpar{mfenced}{close}{}} \ifx\MMLpopen \space\let\MMLpopen \empty\fi \ifx\MMLpclose\space\let\MMLpclose\empty\fi \ifx\MMLpopen\empty \ifx\MMLpclose\empty \else \doMMLleft. \fi \else \doMMLleft\MMLpopen \fi \pushmacro\MMLpopen \pushmacro\MMLpclose \doifelsenothing{\XMLpar{mfenced}{separators}{}} { \flushXMLstackfrom\plusone } { \resetMMLseparator \flushXMLstackwith\plusone { \begingroup \let\myspecialnormalvert\myspecialstretchvert \grabMMLseparator{\XMLpar{mfenced}{separators}{}} \endgroup } } \popmacro\MMLpclose \popmacro\MMLpopen \ifx\MMLpclose\empty \ifx\MMLpopen\empty \else \doMMLright. \fi \else \doMMLright\MMLpclose \fi \endgroup \stopsetups % \startbuffer % x % x % x % x % x % \stopbuffer % % \processXMLbuffer \defineXMLnestedenvironmentsave [menclose] [notation=] {\directsetup{mmp:menclose:start}} {\directsetup{mmp:menclose:stop}} \startsetups mmp:menclose:start \begingroup \stopsetups \startsetups mmp:menclose:stop \doifelse{\XMLpar{menclose}{notation}{}}{longdiv} { \overline{)\XMLflush{menclose}} } { \XMLflush{menclose} } \endgroup \stopsetups \defineXMLnested [mfrac] [linethickness=] {\directsetup{mmp:mfrac:start}} {\directsetup{mmp:mfrac:stop}} \startsetups mmp:mfrac:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:mfrac:stop \stopsavingXMLelements \doifXMLparelse{mfrac}{linethickness} { \edef\theXMLpar{\XMLpar{mfrac}{linethickness}{1}} \processaction [\theXMLpar] [ thin=>\scratchdimen=.2pt, medium=>\scratchdimen=.4pt, thick=>\scratchdimen=.8pt, unknown=>\setdimensionwithunit\scratchdimen{\theXMLpar}{}] {{\getXMLstackdata\plusone}\above\scratchdimen{\getXMLstackdata\plustwo}} } { \frac{\getXMLstackdata\plusone}{\getXMLstackdata\plustwo} } \endgroup \stopsetups \defineXMLargument [ms] [lquote=\xmlrent{quot}, rquote=\xmlrent{quot}, fontweight=, fontstyle=, mathstyle=, mathvariant=, background=, color=] {\MMLpSTRING} \def\MMLpSTRING#1% {\hbox {\tf % else encoding problems \MMLpTEXT{\XMLpar{ms}{lquote}{}% \doMMPpbackground{ms}{\doMMPpcolor{ms}{\setMMLptextstyle{ms}\ignorespaces#1\removeunwantedspaces}}% \XMLpar{ms}{rquote}{}}}} \defineXMLenvironment [mstyle] [fontweight=, fontstyle=, mathstyle=, mathvariant=, background=, color=] {\begingroup} {\endgroup} \defineXMLargument [mtext] [CPA] \MMLpTEXT \defineXMLargument [merror] [CPA] \MMLpERROR \defineXMLargument [mphantom] [CPA] \MMLpPHANTOM \defineXMLargument [mpadded] [CPA] \MMLpPADDED \mapXMLvalue{mmp}{normal} {\tf} \mapXMLvalue{mmp}{double-stuck} {\bf} \mapXMLvalue{mmp}{bolditalic} {\bi} \mapXMLvalue{mmp}{bold-italic} {\bi} \mapXMLvalue{mmp}{boldslanted}{\bs} \mapXMLvalue{mmp}{bold-slanted} {\bs} \mapXMLvalue{mmp}{boldnormal} {\bf} \mapXMLvalue{mmp}{bold} {\bf} \mapXMLvalue{mmp}{slanted} {\sl} \mapXMLvalue{mmp}{normalslanted}{\sl} \mapXMLvalue{mmp}{italic} {\it} \mapXMLvalue{mmp}{normalitalic} {\it} \mapXMLvalue{mmp}{fraktur} {\bf} \mapXMLvalue{mmp}{bold-fraktur} {\bf} \mapXMLvalue{mmp}{script} {\tf} \mapXMLvalue{mmp}{bold-script} {\bf} % and all kind of other crappy names \def\setMMLptextstyle#1% {\XMLval{mmp}{\XMLpar{#1}{fontweight}{}\XMLpar{#1}{fontstyle}{}}{}} \def\setMMLpmathstyle#1% {\XMLval{mmp}{\XMLpar{#1}{mathvariant}{}}{}} \def\doMMPpcolor#1#2% {\doifXMLparelse{#1}{color}{\color[\XMLpar{#1}{color}{}]{#2}}{#2}} \def\doMMPpbackground#1#2% {\doifXMLparelse{#1}{background} {\inframed [\c!frame=\v!off, \c!background=\v!color, \c!backgroundcolor=\XMLpar{#1}{background}{}] {#2}} {#2}} \def\MMLpTEXT#1% {\hbox {\tf % else encoding problems \doMMPpbackground{ms}{\doMMPpcolor{ms}{\setMMLptextstyle{ms}\ignorespaces#1\removeunwantedspaces}}}} \def\MMLpERROR#1% {\hbox{$\displaystyle#1$}} \def\MMLpPHANTOM#1% {\phantom{\ignorespaces{}#1\unskip}} % watch spacing {} hack \def\MMLpPADDED#1% {#1} % mrow \defineXMLenvironment [mrow] {\resetMMLbounds} {\finishMMLbounds} % \def\MMLleft #1{\increment\MMLboundslevel\left #1} % \def\MMLright#1{\right#1\decrement\MMLboundslevel} % \def\resetMMLbounds % {\let\MMLboundslevel\!!plusone\left.} % \def\finishMMLbounds % {\dorecurse\MMLboundslevel{\right.}} \def\resetMMLbounds {\pushmacro\MMLboundslevel \newcounter\MMLboundslevel} \def\MMLleft #1% {\increment\MMLboundslevel \normalleft#1} \def\MMLright#1% {\ifnum\MMLboundslevel=0 \normalleft.\!\fi \normalright#1% \decrement\MMLboundslevel} \def\finishMMLbounds {\ifnum\MMLboundslevel>0 \normalright.\!% \decrement\MMLboundslevel \expandafter\finishMMLbounds \else \popmacro\MMLboundslevel \fi} \defineXMLnested [msqrt] {\directsetup{mmp:msqrt:start}} {\directsetup{mmp:msqrt:stop}} \defineXMLnested [mroot] {\directsetup{mmp:mroot:start}} {\directsetup{mmp:mroot:stop}} \startsetups mmp:msqrt:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:msqrt:stop \stopsavingXMLelements \sqrt{\flushXMLstackfrom\plusone} \endgroup \stopsetups \startsetups mmp:mroot:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:mroot:stop \stopsavingXMLelements \root{\getXMLstackdata\plustwo}\of{\getXMLstackdata\plusone} \endgroup \stopsetups \setupMMLappearance[scripts][\c!alternative=\v!a] \defineXMLnested [msub] {\directsetup{mmp:msub:start}} {\directsetup{mmp:msub:stop}} \defineXMLnested [msup] {\directsetup{mmp:msup:start}} {\directsetup{mmp:msup:stop}} \defineXMLnested [msubsup] {\directsetup{mmp:msbp:start}} {\directsetup{mmp:msbp:stop}} \startsetups mmp:msub:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:msub:stop \stopsavingXMLelements \doifelse\@@MMLscriptsalternative\v!a { {\getXMLstackdata\plusone}_{\getXMLstackdata\plustwo} } { \getXMLstackdata\plusone_{\getXMLstackdata\plustwo} } \endgroup \stopsetups \startsetups mmp:msup:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:msup:stop \stopsavingXMLelements \doifelse\@@MMLscriptsalternative\v!a { {\getXMLstackdata\plusone}^{\getXMLstackdata\plustwo} } { \getXMLstackdata\plusone^{\getXMLstackdata\plustwo} } \endgroup \stopsetups \startsetups mmp:msbp:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:msbp:stop \stopsavingXMLelements \getXMLstackdata\plusone_{\getXMLstackdata\plustwo}^{\getXMLstackdata\plusthree} \endgroup \stopsetups \defineXMLnested [mover] {\directsetup{mmp:mover:start}} {\directsetup{mmp:mover:stop}} \defineXMLnested [munder] {\directsetup{mmp:munder:start}} {\directsetup{mmp:munder:stop}} \defineXMLnested [munderover] {\directsetup{mmp:munderover:start}} {\directsetup{mmp:munderover:stop}} \startsetups mmp:mover:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:mover:stop \stopsavingXMLelements \mathop{\vbox{\mathsurround\zeropoint\ialign{\hss##\hss\crcr\noalign{\kern3\points}% \disabledelimiter\doMMLfiller{\getXMLstackdata\plustwo} \crcr\noalign{\kern3\points\nointerlineskip}% \disabledelimiter\doMMLfiller{\getXMLstackdata\plusone} \crcr}}} \limits \endgroup \stopsetups \startsetups mmp:munder:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:munder:stop \stopsavingXMLelements \mathop{\vtop{\mathsurround\zeropoint\ialign{\hss##\hss\crcr \disabledelimiter\doMMLfiller{\getXMLstackdata\plusone} \crcr\noalign{\kern3\points\nointerlineskip}% \disabledelimiter\doMMLfiller{\getXMLstackdata\plustwo} \crcr\noalign{\kern3\points}}}} \limits \endgroup \stopsetups \startsetups mmp:munderover:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:munderover:stop \stopsavingXMLelements \getXMLstackdata\plusone _{\disablefiller\disabledelimiter\getXMLstackdata\plustwo} ^{\disablefiller\disabledelimiter\getXMLstackdata\plusthree} \endgroup \stopsetups \def\doMMLfiller#1% bugged {\pushmacro\doMMLfiller \let\doMMLfiller\gobbleoneargument \gdef\dodoMMLfiller{\disablefiller\mathematics{#1}}% \hbox {\def\normalorfiller##1##2% {\gdef\dodoMMLfiller{\enablefiller#1}% \let\normalorfiller\gobbletwoarguments}% $#1$}% \popmacro\doMMLfiller \dodoMMLfiller} % tables % obsolete: \setupMMLappearance[mtable][\c!alternative=\v!a] \mapXMLvalue {mmp:mtable} {align:left} {right} \mapXMLvalue {mmp:mtable} {align:right} {left} \mapXMLvalue {mmp:mtable} {align:center} {middle} \mapXMLvalue {mmp:mtable} {frame:none} {off} \mapXMLvalue {mmp:mtable} {frame:solid} {on} \mapXMLvalue {mmp:mtable} {frame:on} {on} \defineXMLnested [mtable] [columnalign=, columnspacing=.25ex, rowspacing=.25ex, frame=, color=, background=] {\directsetup{mmp:mtable:start}} {\directsetup{mmp:mtable:stop}} \defineXMLnestedargument [mtr] {\MMPmtableHANDLEtr} \defineXMLnestedargument [mlabeledtr] {\MMPmtableHANDLEtr} \defineXMLnestedargument [mtd] [columnalign=, columnspacing=.25ex, rowspacing=.25ex, frame=, color=, background=] {\MMPmtableHANDLEtd} \startsetups mmp:mtable:start \vcenter \bgroup \MMLpTABLEsplitter{background} \c!backgroundcolor \MMLpTABLEsplitter{color} \c!color \MMLpTABLEmapper {frame} \c!frame \MMLpTABLEmapper {columnalign}\c!align \setMMLpunit{\XMLpar{mtable}{rowspacing}\empty}{.25ex} \let\MMLpTABLEoffset\MMLpunit \bTABLE[\c!frame=\v!off,\c!background=\v!color,\c!offset=\MMLpTABLEoffset] \stopsetups \startsetups mmp:mtable:stop \eTABLE \egroup \stopsetups \long\def\MMPmtableHANDLEtr#1{% \bTR\ignorespaces#1\removeunwantedspaces\eTR } \long\def\MMPmtableHANDLEtd#1{% \let\theMMLpTABLEmap\empty \MMLpTABLEmap{background} \c!backgroundcolor \MMLpTABLEmap{color} \c!color \MMLpTABLEmap{frame} \c!frame \MMLpTABLEmap{columnalign}\c!align \expanded{\bTD[\theMMLpTABLEmap]}% $\ignorespaces#1\removeunwantedspaces$\eTD } \def\MMLpTABLEmapper#1#2% {\doifXMLparelse{mtable}{#1} {\newcounter\MMLcounter \def\docommand##1% {\increment\MMLcounter \expanded{\setupTABLE[column][\MMLcounter][#2=\XMLval{mmp:mtable}{#2:##1}\empty]}}% \expanded{\processseparatedlist[\XMLpar{mtable}{#1}\empty]}[ ]\docommand} {}} \def\MMLpTABLEsplitter#1#2% {\doifXMLparelse{mtable}{#1} {\newcounter\MMLcounter \def\docommand##1% {\increment\MMLcounter \expanded{\setupTABLE[column][\MMLcounter][#2=##1]}}% \expanded{\processseparatedlist[\XMLpar{mtable}{#1}\empty]}[ ]\docommand} {}} \def\MMLpTABLEmap#1#2% {\doifXMLparelse{mtd}{#1} {\edef\theMMLpTABLEmap{#2=\XMLval{mmp:mtable}{#2:\XMLpar{mtd}{#1}\empty}\empty,\theMMLpTABLEmap}} {}} \defineXMLsingular [mspace] [width=.5em] {\directsetup{mmp:mspace}} \startsetups mmp:mspace \setMMLpunit{\XMLpar{mspace}{width}{}}{.5em} \hskip\MMLpunit\relax \stopsetups \def\setMMLpunit#1#2% i've forgotten what this means {\setbox\scratchbox=\hbox {\edef\ascii{#1}% \@EA\aftersplitstring\ascii\at.\to\ascii \scratchcounter=\ifx\ascii\empty#1\else\ascii\fi \unskip\unskip}% \ifdim\wd\scratchbox=\zeropoint \edef\MMLpunit{#1em}% \else \edefconvertedargument\ascii{#1}% \convertasciiafter\doifinstringelse{em}{\ascii}{\edef\MMLpunit{#1}}{% \convertasciiafter\doifinstringelse{ex}{\ascii}{\edef\MMLpunit{#1}}{% \convertasciiafter\doifinstringelse{pt}{\ascii}{\edef\MMLpunit{#1}}{% \edef\MMLpunit{#2}}}}% \fi} % end of tables \def\setMMLpunit#1#2% {\setbox\scratchbox=\hbox {\edef\ascii{#1}% \@EA\aftersplitstring\ascii\at.\to\ascii \scratchcounter=\ifx\ascii\empty#1\else\ascii\fi \unskip\unskip}% \ifdim\wd\scratchbox=\zeropoint \edef\MMLpunit{#1em}% \else \edefconvertedargument\ascii{#1}% \convertasciiafter\doifinstringelse{em}{\ascii}{\edef\MMLpunit{#1}}{% \convertasciiafter\doifinstringelse{ex}{\ascii}{\edef\MMLpunit{#1}}{% \convertasciiafter\doifinstringelse{pt}{\ascii}{\edef\MMLpunit{#1}}{% \edef\MMLpunit{#2}}}}% \fi} \defineXMLsingular [mspace] [width=.5em] {\directsetup{mmp:mspace}} \startsetups mmp:mspace \setMMLpunit{\XMLpar{mspace}{width}{}}{.5em} \hskip\MMLpunit \stopsetups \defineXMLsingular [mglyph] [fontfamily=,index=1,alt=] {\directsetup{mmp:mglyph}} \startsetups mmp:mglyph \def\MMLpglyph{\XMLpar{mglyph}{fontfamily}{}}% \doifelsenothing{\MMLpglyph} { \hbox{\tttf[fontfamily unspecified]} } { \doifdefinedelse{\MMLpglyph} { \hbox{\getvalue{\MMLpglyph}\char0\XMLpar{mglyph}{index}{1}} } { \doifelsenothing{\XMLpar{mglyph}{alt}{}} { \hbox{\tttf[unknown fontfamily \XMLpar{mglyph}{fontfamily}{}]} } { \hbox{\tttf\XMLpar{mglyph}{alt}{}} } } } \stopsetups \defineXMLsingular [malignmark] {} \defineXMLsingular [none] {} \defineXMLsingular [mprescripts] {} \defineXMLnested [mmultiscripts] {\setups{mmp:mmultiscripts:start}} {\setups{mmp:mmultiscripts:stop}} \startsetups mmp:mmultiscripts:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmp:mmultiscripts:stop \stopsavingXMLelements \donefalse \scratchcounter\zerocount \dorecurse\XMLstacklevel { % watch the extra {}'s \ifdone \ifodd\scratchcounter _{\getXMLstackdata\recurselevel} \else ^{\getXMLstackdata\recurselevel}{} \fi \else \doif{\getXMLstackname\recurselevel}{mprescripts}{\donetrue{}} \fi \ifdone \advance\scratchcounter\plusone \fi } \donetrue \scratchcounter\zerocount \dorecurse\XMLstacklevel { \ifdone % watch the extra {}'s \ifcase\scratchcounter \getXMLstackdata\recurselevel \else\ifodd\scratchcounter _{\getXMLstackdata\recurselevel} \else ^{\getXMLstackdata\recurselevel}{} \fi\fi \fi \doif{\getXMLstackname\recurselevel}{mprescripts}{\donefalse} \ifdone \advance\scratchcounter\plusone \fi } \endgroup \stopsetups % experimental patches \startmoduletestsection \let\MMLdoL\donothing \let\MMLdoR\donothing \startsetups mmc:apply:start \begingroup \startsavingXMLelements \stopsetups \startsetups mmc:apply:stop \stopsavingXMLelements \MMLmathinner { \expanded{\doifinsetelse{\getXMLstackname\plusone}{\MMLcmainresetlist,\MMLctempresetlist}} \MMLcreset \donothing \ifcase\MMLapplydepth \else \doifXMLparelse{apply}{open} \donothing{\getXMLarguments{apply}{open="("}}% slow \doifXMLparelse{apply}{close}\donothing{\getXMLarguments{apply}{close=")"}}% slow \fi \advance\MMLapplydepth\plusone \begingroup \doifXMLparelse{apply}{open} % now inside the group {\edef\MMLdoL{\noexpand\left \XMLpar{apply}{open} {(}} \edef\MMLdoR{\noexpand\right\XMLpar{apply}{close}{)}}} {\let\MMLdoL\donothing \let\MMLdoR\donothing} \let\MMLctempresetlist\empty \doifelse {\getXMLstackname\plusone} {apply} { % ... .. \doifelseMMCfunctioninapply \plusone {plus,minus} { % [a] % yet incomplete and rather untested % x } { % [b] \MMLcreset } \MMLdoL \getXMLstackdata\plusone \ifconditional\somepostponedMMLactions \postponedMMLactions \else \left(\MMLcreset\getXMLstackdata\plustwo\right) \fi \MMLdoR } { \doifelse {\getXMLstackname\plusone} {fn} { % [c] % \MMLdoL/R are to be taken care of in the next setup \directsetup{mmc:fn:apply} } { \doifelse {\getXMLstackname\plusone} {csymbol} { % \MMLdoL/R are to be taken care of in the next setup % [d] \directsetup{mmc:csymbol:apply} } { \doifelse {\getXMLstackname\plusone} {ci} { % [e] % \MMLdoL/R are to be taken care of in the next setup \directsetup{mmc:ci:apply} } { % [f] \MMLdoL \getXMLstackdata\plusone \MMLdoR } } } } \endgroup \advance\MMLapplydepth\minusone \directsetup{apply:flush} } \endgroup \stopsetups \startsetups mmc:fn:apply \begingroup \startsavingXMLelements \rawXMLstacktext\plusone % still on stack, no check, just fn content \stopsavingXMLelements \doifelse {\getXMLstackname\plusone} {ci} { \flattenXMLcontent{\getXMLstackdata\plusone} \doifsetupselse{mmc:fn:\flattenedXMLcontent} { % \MMLdoL/MMLdoR to be handled in plugin \global\defXMLstackdata\XMLfnoperator\plusone \expanded{\endgroup\noexpand\directsetup{mmc:fn:\flattenedXMLcontent}} } { \endgroup \MMLcreset \MMLdoL \getXMLstackdata\plusone \ifnum\XMLstacklevel>\plusone \getXMLentity{NegThinSpace} \left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right) \fi \MMLdoR } } { \endgroup \MMLcreset \MMLdoL \getXMLstackdata\plusone \MMLdoR } \stopsetups \startsetups mmc:csymbol:apply \begingroup \defineXMLsave[csymbol][definitionURL=,encoding=] \rawXMLstackdata\plusone % was text % still on stack, no check, just attr test % \MMLdoL/MMLdoR to be handled in plugin \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL \doifsetupselse{mmc:csymbol:\mmcSymbolURL} { \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\mmcSymbolURL}} } { \endgroup %\XMLval{mmc:cs}{\XMLop{encoding}}{\firstofoneargument}% fails when no content \XMLval{mmc:cs}{\XMLop{encoding}}{} } \stopsetups \defineXMLsingular [csymbol] [encoding=text, definitionURL=] {\directsetup{mmc:csymbol:apply:singular}} \startsetups mmc:csymbol:apply:singular \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL \directsetup{mmc:csymbol:\mmcSymbolURL} \stopsetups \startsetups mmc:ci:apply \getXMLstackdata\plusone \ifnum\XMLstacklevel>\plusone \left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right) \fi \stopsetups \def\xflushXMLstackwith#1#2#3#4% num bgroup egroup whatever {\dostepwiserecurse{#1}\XMLstacklevel\plusone {#2\relax \ifnum\recurselevel>#1\relax#4\fi \getXMLstackdata\recurselevel #3}} \def\xflushXMLstackfrom#1#2#3% {\dostepwiserecurse{#1}\XMLstacklevel\plusone {#2\getXMLstackdata\recurselevel#3}} % % % b % b % a % % % bb % b % a % % \startsetups mmc:minus \doif \@@MMLsignreduction \v!yes { \setMMLcreset{fn,\MMLcfunctionlist} } \ifcase\XMLstacklevel \or % self \or -\getXMLstackdata\plustwo \else \dostepwiserecurse\plustwo\XMLstacklevel\plusone { \begingroup \doifelse {\getXMLstackname\recurselevel} {apply} { \ifnum\recurselevel=\plustwo \begingroup \dodoifelseMMCfunctioninapply \recurselevel {minus} { \ifnum\XMLstacklevel>\plustwo \endgroup \else \endgroup \MMLcreset \fi } { \endgroup } \else \doifelseMMCfunctioninapply \recurselevel {\MMLcfunctionlist,\MMLcconstructlist} { \MMLcreset } { } \fi } { } \getXMLstackdata\recurselevel \ifnum\recurselevel<\XMLstacklevel\relax - \fi \endgroup } \fi \stopsetups \stopmoduletestsection \stopmodule \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-obsolete.mkii0000644000175000017500000000012111571377075024621 0ustar norbertnorbert\unprotect \writestatus\m!systems{skipping obsolete module} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-10.mkii0000644000175000017500000002673311754241457024350 0ustar norbertnorbert%D \module %D [ file=regi-8859-10, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-10 (Nordic), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-10/Latin6 input encoding (regime) for Nordic languages. %D %D Usage: \type{\enableregime[8859-10]} (see \type {regi-syn} for %D alternatives calls). \startregime[iso-8859-10] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 162 {\Emacron} % 0112 LATIN CAPITAL LETTER E WITH MACRON \defineactivetoken 163 {\Gcommaaccent} % 0122 LATIN CAPITAL LETTER G WITH CEDILLA \defineactivetoken 164 {\Imacron} % 012A LATIN CAPITAL LETTER I WITH MACRON \defineactivetoken 165 {\Itilde} % 0128 LATIN CAPITAL LETTER I WITH TILDE \defineactivetoken 166 {\Kcommaaccent} % 0136 LATIN CAPITAL LETTER K WITH CEDILLA \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\Lcommaaccent} % 013B LATIN CAPITAL LETTER L WITH CEDILLA \defineactivetoken 169 {\Dstroke} % 0110 LATIN CAPITAL LETTER D WITH STROKE \defineactivetoken 170 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 171 {\Tstroke} % 0166 LATIN CAPITAL LETTER T WITH STROKE \defineactivetoken 172 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\Umacron} % 016A LATIN CAPITAL LETTER U WITH MACRON \defineactivetoken 175 {\Neng} % 014A LATIN CAPITAL LETTER ENG \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 178 {\emacron} % 0113 LATIN SMALL LETTER E WITH MACRON \defineactivetoken 179 {\gcommaaccent} % 0123 LATIN SMALL LETTER G WITH CEDILLA \defineactivetoken 180 {\imacron} % 012B LATIN SMALL LETTER I WITH MACRON \defineactivetoken 181 {\itilde} % 0129 LATIN SMALL LETTER I WITH TILDE \defineactivetoken 182 {\kcommaaccent} % 0137 LATIN SMALL LETTER K WITH CEDILLA \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\lcommaaccent} % 013C LATIN SMALL LETTER L WITH CEDILLA \defineactivetoken 185 {\dstroke} % 0111 LATIN SMALL LETTER D WITH STROKE \defineactivetoken 186 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 187 {\tstroke} % 0167 LATIN SMALL LETTER T WITH STROKE \defineactivetoken 188 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 189 {\texthorizontalbar} % 2015 HORIZONTAL BAR \defineactivetoken 190 {\umacron} % 016B LATIN SMALL LETTER U WITH MACRON \defineactivetoken 191 {\neng} % 014B LATIN SMALL LETTER ENG \defineactivetoken 192 {\Amacron} % 0100 LATIN CAPITAL LETTER A WITH MACRON \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Iogonek} % 012E LATIN CAPITAL LETTER I WITH OGONEK \defineactivetoken 200 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Edotaccent} % 0116 LATIN CAPITAL LETTER E WITH DOT ABOVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Eth} % 00D0 LATIN CAPITAL LETTER ETH \defineactivetoken 209 {\Ncommaaccent} % 0145 LATIN CAPITAL LETTER N WITH CEDILLA \defineactivetoken 210 {\Omacron} % 014C LATIN CAPITAL LETTER O WITH MACRON \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\Utilde} % 0168 LATIN CAPITAL LETTER U WITH TILDE \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Uogonek} % 0172 LATIN CAPITAL LETTER U WITH OGONEK \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\Thorn} % 00DE LATIN CAPITAL LETTER THORN \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\amacron} % 0101 LATIN SMALL LETTER A WITH MACRON \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\iogonek} % 012F LATIN SMALL LETTER I WITH OGONEK \defineactivetoken 232 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\edotaccent} % 0117 LATIN SMALL LETTER E WITH DOT ABOVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\eth} % 00F0 LATIN SMALL LETTER ETH \defineactivetoken 241 {\ncommaaccent} % 0146 LATIN SMALL LETTER N WITH CEDILLA \defineactivetoken 242 {\omacron} % 014D LATIN SMALL LETTER O WITH MACRON \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\utilde} % 0169 LATIN SMALL LETTER U WITH TILDE \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\uogonek} % 0173 LATIN SMALL LETTER U WITH OGONEK \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\thorn} % 00FE LATIN SMALL LETTER THORN \defineactivetoken 255 {\kkra} % 0138 LATIN SMALL LETTER KRA \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/bibl-tra.lua0000644000175000017500000001762612130411274024077 0ustar norbertnorbertif not modules then modules = { } end modules ['bibl-tra'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } bibtex = bibtex or { } local bibtex = bibtex bibtex.hacks = bibtex.hacks or { } local hacks = bibtex.hacks local match, gmatch, format, concat, sort = string.match, string.gmatch, string.format, table.concat, table.sort local variables, constants = interfaces.variables, interfaces.constants local trace_bibtex = false trackers.register("publications.bibtex", function(v) trace_bibtex = v end) local report_tex = logs.reporter("publications","tex") local context, structures = context, structures local references = structures.references local sections = structures.sections local list, done, alldone, used, registered, ordered = { }, { }, { }, { }, { }, { } local mode = 0 local template = utilities.strings.striplong([[ \citation{*} \bibstyle{cont-%s} \bibdata{%s} ]]) local bibtexbin = environment.arguments.mlbibtex and "mlbibcontext" or "bibtex" directives.register("publications.usemlbibtex", function(v) bibtexbin = v and "mlbibcontext" or "bibtex" end) function hacks.process(settings) local style = settings.style or "" local database = settings.database or "" local jobname = tex.jobname if database ~= "" then interfaces.showmessage("publications",3) io.savedata(file.addsuffix(jobname,"aux"),format(template,style,database)) if trace_bibtex then report_tex("processing bibtex file %a using %a",jobname,bibtexbin) end os.execute(format("%s %q",bibtexbin,jobname)) -- purge 'm end end function hacks.register(str) if trace_bibtex then report_tex("registering bibtex entry %a",str) end registered[#registered+1] = str ordered[str] = #registered end function hacks.nofregistered() return #registered end function hacks.reset(m) mode, list, done = m, { }, { } end function hacks.add(str,listindex) if not str or mode == 0 then -- skip elseif mode == 1 then -- all locals but no duplicates local sc = sections.currentid() if done[str] ~= sc then done[str], alldone[str] = sc, true list[#list+1] = { str, listindex } end elseif mode == 2 then -- all locals but no preceding local sc = sections.currentid() if not alldone[str] and done[str] ~= sc then done[str], alldone[str] = sc, true list[#list+1] = { str, listindex } end end end local function compare(a,b) -- quite some checking for non-nil local aa, bb = a and a[1], b and b[1] if aa and bb then local oa, ob = ordered[aa], ordered[bb] return oa and ob and oa < ob end return false end function hacks.flush(sortvariant) if sortvariant == "" or sortvariant == variables.cite or sortvariant == "default" then -- order is cite order i.e. same as list else sort(list,compare) end for i=1,#list do context.doprocessbibtexentry(list[i][1]) end end function hacks.filterall() for i=1,#registered do list[i] = { registered[i], i } end end function hacks.registerplaced(str) used[str] = true end function hacks.doifalreadyplaced(str) commands.doifelse(used[str]) end -- we ask for :tag but when we can't find it we go back -- to look for previous definitions, and when not found again -- we look forward local function compare(a,b) local aa, bb = a and a[3], b and b[3] return aa and bb and aa < bb end function hacks.resolve(prefix,block,reference) -- maybe already feed it split -- needs checking (the prefix in relation to components) local subsets local collected = references.collected if prefix and prefix ~= "" then subsets = { collected[prefix] or collected[""] } else local components = references.productdata.components local subset = collected[""] if subset then subsets = { subset } else subsets = { } end for i=1,#components do local subset = collected[components[i]] if subset then subsets[#subsets+1] = subset end end end if #subsets > 0 then local result, nofresult, done = { }, 0, { } block = tonumber(block) for i=1,#subsets do local subset = subsets[i] for rest in gmatch(reference,"[^, ]+") do local blk, tag, found = block, nil, nil if block then tag = blk .. ":" .. rest found = subset[tag] if not found then for i=block-1,1,-1 do tag = i .. ":" .. rest found = subset[tag] if found then blk = i break end end end end if not found then blk = "*" tag = blk .. ":" .. rest found = subset[tag] end if found then local current = tonumber(found.entries and found.entries.text) -- tonumber needed if current and not done[current] then nofresult = nofresult + 1 result[nofresult] = { blk, rest, current } done[current] = true end end end end -- todo: ranges so the interface will change sort(result,compare) local first, last, firsti, lasti, firstr, lastr local collected, nofcollected = { }, 0 for i=1,nofresult do local r = result[i] local current = r[3] if not first then first, last, firsti, lasti, firstr, lastr = current, current, i, i, r, r elseif current == last + 1 then last, lasti, lastr = current, i, r else if last > first + 1 then nofcollected = nofcollected + 1 collected[nofcollected] = { firstr[1], firstr[2], lastr[1], lastr[2] } else nofcollected = nofcollected + 1 collected[nofcollected] = { firstr[1], firstr[2] } if last > first then nofcollected = nofcollected + 1 collected[nofcollected] = { lastr[1], lastr[2] } end end first, last, firsti, lasti, firstr, lastr = current, current, i, i, r, r end end if first and last then if last > first + 1 then nofcollected = nofcollected + 1 collected[nofcollected] = { firstr[1], firstr[2], lastr[1], lastr[2] } else nofcollected = nofcollected + 1 collected[nofcollected] = { firstr[1], firstr[2] } if last > first then nofcollected = nofcollected + 1 collected[nofcollected] = { lastr[1], lastr[2] } end end end if nofcollected > 0 then for i=1,nofcollected do local c = collected[i] if c[3] then context.dowithbibtexnumrefrange(#collected,i,prefix,c[1],c[2],c[3],c[4]) else context.dowithbibtexnumref(#collected,i,prefix,c[1],c[2]) end end else context.nobibtexnumref("error 1") end else context.nobibtexnumref("error 2") end end context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-raw.mkii0000644000175000017500000000233411754241457024312 0ustar norbertnorbert%D \module %D [ file=xtag-raw, %D version=2002.03.21, %D title=\CONTEXT\ XML Macros, %D subtitle=Raw Specials, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Raw Specials} %D Some day this module will be obsolete. \defineXMLentity [tex-hash] {\letterhash} \defineXMLentity [tex-dollar] {\letterdollar} \defineXMLentity [tex-percent] {\letterpercent} \defineXMLentity [tex-backslash] {\letterbackslash} \defineXMLentity [tex-hat] {\letterhat} \defineXMLentity [tex-underscore] {\letterunderscore} \defineXMLentity [tex-leftbrace] {\letterbgroup} \defineXMLentity [tex-rightbrace] {\letteregroup} \defineXMLentity [tex-bar] {\letterbar} \defineXMLentity [tex-tilde] {\lettertilde} \endinput \defineXMLsingular[test][oeps=,whow=,hm=] % {\tttf \input \XMLop{oeps} [\XMLop{whow}] [\XMLop{hm}]} {\tttf \XMLop{oeps} [\XMLop{whow}] [\XMLop{hm}]} \startXMLdata \stopXMLdata context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-chi.mkii0000644000175000017500000002255411754241457024253 0ustar norbertnorbert%D \module %D [ file=enco-chi, %D version=1999.12.02, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Traditional and Simplified Chinese, %D author={Wang Lei \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % actually this is also a filter -> enco-fcn.tex %D This is an experimental definition. Since we are dealing %D with unicode's, the registered values are not saved, so %D actually we're dealing with an pseudo encoding. The digits %D on the other hand are encoding specific. % chinese classes: left=1|right=2|center=3 % untested, probably wrong \startencoding[cjk-uni] \defineuclass 1 32 24 \defineuclass 1 32 28 \defineuclass 1 48 20 \defineuclass 1 48 8 \defineuclass 1 48 10 \defineuclass 1 48 12 \defineuclass 1 48 14 \defineuclass 1 48 22 \defineuclass 1 48 16 \defineuclass 1 255 8 \defineuclass 1 255 59 \defineuclass 1 255 64 \defineuclass 1 255 91 \defineuclass 3 0 183 \defineuclass 3 0 168 \defineuclass 3 32 38 \defineuclass 3 255 30 \defineuclass 2 48 1 \defineuclass 2 48 2 \defineuclass 2 32 20 \defineuclass 2 255 94 \defineuclass 2 32 25 \defineuclass 2 32 29 \defineuclass 2 48 21 \defineuclass 2 48 9 \defineuclass 2 48 11 \defineuclass 2 48 13 \defineuclass 2 48 15 \defineuclass 2 48 23 \defineuclass 2 48 17 \defineuclass 2 34 55 \defineuclass 2 0 176 \defineuclass 2 32 50 \defineuclass 2 32 51 \defineuclass 2 255 1 \defineuclass 2 255 2 \defineuclass 2 255 7 \defineuclass 2 255 9 \defineuclass 2 255 12 \defineuclass 2 255 14 \defineuclass 2 255 26 \defineuclass 2 255 27 \defineuclass 2 255 31 \defineuclass 2 255 61 \defineuclass 2 255 93 \defineudigit 0 37 203 \defineudigit 1 78 0 \defineudigit 2 78 140 \defineudigit 3 78 9 \defineudigit 4 86 219 \defineudigit 5 78 148 \defineudigit 6 81 109 \defineudigit 7 78 3 \defineudigit 8 81 107 \defineudigit 9 78 93 \defineudigit 10 83 65 \defineudigit 100 118 126 \defineudigit 1000 83 67 \defineudigit 10000 78 7 \defineudigit 100000000 78 191 \defineudigit 0* 150 246 \defineudigit 1* 88 249 \defineudigit 2* 141 48 \defineudigit 3* 83 193 \defineudigit 4* 128 134 \defineudigit 5* 79 13 \defineudigit 6* 150 70 \defineudigit 7* 103 210 \defineudigit 8* 99 76 \defineudigit 9* 115 150 \defineudigit 10* 98 254 \defineudigit 100* 79 112 \defineudigit 1000* 78 223 \defineudigit 10000* 132 44 \defineudigit 100000000* 78 191 \defineudigit 20 94 255 \defineudigit 21 78 0 \defineudigit 22 78 140 \defineudigit 23 78 9 \defineudigit 24 86 219 \defineudigit 25 78 148 \defineudigit 26 81 109 \defineudigit 27 78 3 \defineudigit 28 81 107 \defineudigit 29 78 93 \defineudigit 30 83 69 \defineudigit 31 78 0 \defineudigit 32 78 140 \defineudigit 33 78 9 \defineudigit 34 86 219 \defineudigit 35 78 148 \defineudigit 36 81 109 \defineudigit 37 78 3 \defineudigit 38 81 107 \defineudigit 39 78 93 \stopencoding % \doif \currentregime {utf} \endinput \startencoding[big5] \defineuclass 1 161 93 \defineuclass 1 161 95 \defineuclass 1 161 97 \defineuclass 1 161 99 \defineuclass 1 161 101 \defineuclass 1 161 103 \defineuclass 1 161 105 \defineuclass 1 161 107 \defineuclass 1 161 111 \defineuclass 1 161 111 \defineuclass 1 161 113 \defineuclass 1 161 115 \defineuclass 1 161 117 \defineuclass 1 161 119 \defineuclass 1 161 121 \defineuclass 1 161 123 \defineuclass 1 161 125 \defineuclass 1 161 161 \defineuclass 1 161 163 \defineuclass 1 161 165 \defineuclass 1 161 167 \defineuclass 1 161 169 \defineuclass 1 161 171 \defineuclass 3 161 69 \defineuclass 3 161 75 \defineuclass 3 161 76 \defineuclass 2 161 65 \defineuclass 2 161 66 \defineuclass 2 161 67 \defineuclass 2 161 68 \defineuclass 2 161 70 \defineuclass 2 161 71 \defineuclass 2 161 72 \defineuclass 2 161 73 \defineuclass 2 161 74 \defineuclass 2 161 77 \defineuclass 2 161 78 \defineuclass 2 161 79 \defineuclass 2 161 80 \defineuclass 2 161 81 \defineuclass 2 161 82 \defineuclass 2 161 83 \defineuclass 2 161 84 \defineuclass 2 161 88 \defineuclass 2 161 94 \defineuclass 2 161 96 \defineuclass 2 161 98 \defineuclass 2 161 100 \defineuclass 2 161 102 \defineuclass 2 161 104 \defineuclass 2 161 106 \defineuclass 2 161 108 \defineuclass 2 161 110 \defineuclass 2 161 112 \defineuclass 2 161 114 \defineuclass 2 161 116 \defineuclass 2 161 118 \defineuclass 2 161 120 \defineuclass 2 161 122 \defineuclass 2 161 124 \defineuclass 2 161 126 \defineuclass 2 161 162 \defineuclass 2 161 164 \defineuclass 2 161 166 \defineuclass 2 161 168 \defineuclass 2 161 170 \defineuclass 2 161 172 \defineuclass 2 161 196 \defineuclass 2 161 227 \defineuclass 2 162 88 \defineuclass 2 163 223 \defineudigit 0 162 179 \defineudigit 1 164 64 \defineudigit 2 164 71 \defineudigit 3 164 84 \defineudigit 4 165 124 \defineudigit 5 164 173 \defineudigit 6 164 187 \defineudigit 7 164 67 \defineudigit 8 164 75 \defineudigit 9 164 69 \defineudigit 10 164 81 \defineudigit 100 166 202 \defineudigit 1000 164 100 \defineudigit 10000 201 69 \defineudigit 100000000 187 245 \defineudigit 0* 185 115 \defineudigit 1* 179 252 \defineudigit 2* 182 76 \defineudigit 3* 176 209 \defineudigit 4* 184 118 \defineudigit 5* 165 238 \defineudigit 6* 179 176 \defineudigit 7* 172 110 \defineudigit 8* 174 195 \defineudigit 9* 168 104 \defineudigit 10* 172 66 \defineudigit 100* 168 213 \defineudigit 1000* 165 97 \defineudigit 10000* 184 85 \defineudigit 100000000* 187 245 \defineudigit 20 164 220 \defineudigit 21 164 64 \defineudigit 22 164 71 \defineudigit 23 164 84 \defineudigit 24 165 124 \defineudigit 25 164 173 \defineudigit 26 164 187 \defineudigit 27 164 67 \defineudigit 28 164 75 \defineudigit 29 164 69 \defineudigit 30 164 202 \defineudigit 31 164 64 \defineudigit 32 164 71 \defineudigit 33 164 84 \defineudigit 34 165 124 \defineudigit 35 164 173 \defineudigit 36 164 187 \defineudigit 37 164 67 \defineudigit 38 164 75 \defineudigit 39 164 69 \stopencoding \startencoding[gbk] \defineuclass 1 161 174 \defineuclass 1 161 176 \defineuclass 1 161 178 \defineuclass 1 161 180 \defineuclass 1 161 182 \defineuclass 1 161 184 \defineuclass 1 161 186 \defineuclass 1 161 188 \defineuclass 1 161 190 \defineuclass 1 163 168 \defineuclass 1 163 219 \defineuclass 1 163 224 \defineuclass 1 163 251 \defineuclass 3 161 164 \defineuclass 3 161 167 \defineuclass 3 161 173 \defineuclass 3 163 190 \defineuclass 2 161 162 \defineuclass 2 161 163 \defineuclass 2 161 170 \defineuclass 2 161 171 \defineuclass 2 161 175 \defineuclass 2 161 177 \defineuclass 2 161 179 \defineuclass 2 161 181 \defineuclass 2 161 183 \defineuclass 2 161 185 \defineuclass 2 161 187 \defineuclass 2 161 189 \defineuclass 2 161 191 \defineuclass 2 161 203 \defineuclass 2 161 227 \defineuclass 2 161 228 \defineuclass 2 161 229 \defineuclass 2 163 161 \defineuclass 2 163 162 \defineuclass 2 163 167 \defineuclass 2 163 169 \defineuclass 2 163 172 \defineuclass 2 163 174 \defineuclass 2 163 186 \defineuclass 2 163 187 \defineuclass 2 163 191 \defineuclass 2 163 221 \defineuclass 2 163 253 \defineudigit 0 161 240 \defineudigit 1 210 187 \defineudigit 2 182 254 \defineudigit 3 200 253 \defineudigit 4 203 196 \defineudigit 5 206 229 \defineudigit 6 193 249 \defineudigit 7 198 223 \defineudigit 8 176 203 \defineudigit 9 190 197 \defineudigit 10 202 174 \defineudigit 100 176 217 \defineudigit 1000 199 167 \defineudigit 10000 205 242 \defineudigit 100000000 210 218 \defineudigit 0* 193 227 \defineudigit 1* 210 188 \defineudigit 2* 183 161 \defineudigit 3* 200 254 \defineudigit 4* 203 193 \defineudigit 5* 206 233 \defineudigit 6* 194 189 \defineudigit 7* 198 226 \defineudigit 8* 176 198 \defineudigit 9* 190 193 \defineudigit 10* 202 176 \defineudigit 100* 176 219 \defineudigit 1000* 199 170 \defineudigit 10000* 200 102 \defineudigit 100000000* 210 218 \defineudigit 20 216 165 \defineudigit 21 210 187 \defineudigit 22 182 254 \defineudigit 23 200 253 \defineudigit 24 203 196 \defineudigit 25 206 229 \defineudigit 26 193 249 \defineudigit 27 198 223 \defineudigit 28 176 203 \defineudigit 29 190 197 \defineudigit 30 216 166 \defineudigit 31 210 187 \defineudigit 32 182 254 \defineudigit 33 200 253 \defineudigit 34 203 196 \defineudigit 35 206 229 \defineudigit 36 193 249 \defineudigit 37 198 223 \defineudigit 38 176 203 \defineudigit 39 190 197 \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-itm.mkii0000644000175000017500000013117011754241457024323 0ustar norbertnorbert%D \module %D [ file=strc-itm, % updated %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=itemgroups, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % new: text + lefttext=(,righttext=) % start= \writestatus{loading}{ConTeXt Structure Macros / Itemgroups} \unprotect % - instellingen in macro % - [0] voor start op 0 % - start=2 \newconditional\sublistitem \setfalse\sublistitem \newconditional\symbollistitem \setfalse\symbollistitem \newconditional\headlistitem \setfalse\headlistitem \newconditional\introlistitem \setfalse\introlistitem \newconditional\randomizeitems \setfalse\randomizeitems \newconditional\autointrolistitem \setfalse\autointrolistitem \newconditional\optimizelistitem \settrue \optimizelistitem \newconditional\packlistitem \setfalse\packlistitem \newconditional\paragraphlistitem \setfalse\paragraphlistitem \newconditional\textlistitem \setfalse\textlistitem \newconditional\firstlistitem \setfalse\firstlistitem \newconditional\beforelistitem \setfalse\beforelistitem \newconditional\afterlistitem \setfalse\afterlistitem \newconditional\nowhitelistitem \setfalse\nowhitelistitem \newconditional\joinedlistitem \setfalse\joinedwhitelistitem \newconditional\reverselistitem \setfalse\reverselistitem \newconditional\continuelistitems \setfalse\continuelistitems \newconditional\fittinglistitems \setfalse\fittinglistitems \newcount\noflists \newcount\currentnoflists \newcount\itemcolumndepth \newcount\itemdepth \newcount\maxitemdepth \definetwopasslist\s!list \let\currentitemlevel \!!zerocount \let\currentitemgroup \empty \let\currentnofitems \!!zerocount \let\currentmaxnofitems\!!zerocount \let\currentminnofitems\!!zerocount \let\currentitemoffset \!!zerocount \def\currentitemnumber{\countervalue{\@@itemcounter\currentitemlevel}} % tricky ... we cannot use trialtypesetting here because there can be % multiple itemizes in e.g. a table, so we need something more advanced % where counters etc are reset to pre-outertrial values \def\dolistreference {\ifconditional\continuelistitems \savetaggedtwopassdata\s!list{\number\currentnoflists}{\number\currentnoflists}% {\currentitemlevel:\noflistelements:c:\getitemparameter\currentitemlevel\c!maxwidth}% \else \savetaggedtwopassdata\s!list{\number\currentnoflists}{\number\currentnoflists}% {\currentitemlevel:\noflistelements:n:\getitemparameter\currentitemlevel\c!maxwidth}% \fi} \def\splititemtwopassdata#1% {\expanded{\findtwopassdata{\s!list}{\number#1}}% \expandafter\dosplititemtwopassdata\twopassdata:0:0:0:0:0\relax} \def\dosplititemtwopassdata#1:#2:#3:#4:#5\relax {\edef\itemdatal{#1}\edef\itemdatan{#2}\edef\itemdatat{#3}\edef\itemdataw{#4}} \def\checkcurrentnofitems {\splititemtwopassdata\currentnoflists \iftwopassdatafound \ifcase\itemdatan\relax % \scratchcounter \let\currentnofitems \!!zerocount \let\currentminnofitems\!!plusone \let\currentmaxnofitems\!!zerocount \else \scratchcounter\itemdatan\relax \edef\currentnofitems{\the\scratchcounter}% \let\currentitemtag\itemdatat \doloop {\splititemtwopassdata{\numexpr\currentnoflists+\recurselevel\relax}% \iftwopassdatafound \ifnum\itemdatal=\currentitemlevel\relax \doifelse{c}\itemdatat {\advance\scratchcounter\itemdatan\relax} {\exitloop}% \fi \else \exitloop \fi}% \edef\currentmaxnofitems{\the\scratchcounter}% \scratchcounter\zerocount \doif{c}\currentitemtag {\doloop {\splititemtwopassdata{\numexpr\currentnoflists-\recurselevel\relax}% \iftwopassdatafound \ifnum\itemdatal=\currentitemlevel\relax \doifelse{c}\itemdatat {\advance\scratchcounter\itemdatan\relax} {\advance\scratchcounter\itemdatan\exitloop}% \fi \else \exitloop \fi}}% \advance\scratchcounter\plusone \edef\currentminnofitems{\the\scratchcounter}% % [[\currentnofitems,\currentminnofitems,\currentmaxnofitems]] \fi \else % new, when no tuo yet \let\currentnofitems \!!zerocount \let\currentminnofitems\!!plusone \let\currentmaxnofitems\!!zerocount \fi} % [[\currentnofitems,\currentminnofitems,\currentmaxnofitems]] % \startitemize[n,packed] % \item test \item test \item test % \stopitemize % % \startitemize[n,packed,reverse] % \item test \item test \item test % \stopitemize % % \startitemize[n,packed,reverse] \item test \item test \stopitemize % \startitemize[continue] % \item test \startitemize[n,packed] \item test \item test \stopitemize % \item test % \item test % \stopitemize % \startitemize[continue] \item test \stopitemize % % \startitemize[n,packed] \item test \item test \stopitemize % \startitemize[continue] \item test \stopitemize % \startitemize[continue] \item test \stopitemize \def\unknownitemreference{0} \let\itemreferences\unknownitemreference % #1=level #2=parameter \def\getitemparameter #1#2{\csname\??op\currentitemgroup#1#2\endcsname} \def\setitemparameter #1#2{\@EA\def\csname\??op\currentitemgroup#1#2\endcsname} % #3 -> {#3} \def\letitemparameter #1#2{\@EA\let\csname\??op\currentitemgroup#1#2\endcsname} % works ok but not needed (also possible compatibility problem) % % \def\getitemparameter#1#2% % {\executeifdefined{\??op\currentitemgroup#1#2}% % {\executeifdefined{\??op\currentitemgroup #2}% % {\executeifdefined{\??oo #2}% % {}}}} % test this: saves hash entries and is also faster % % \let\doinitializeitemgrouplevel\gobbleoneargument % todo ! ! ! \def\getitemparameter#1#2% {\executeifdefined{\??op\currentitemgroup#1#2}% {\executeifdefined{\??op\currentitemgroup #2}% {\executeifdefined{\??oo #2}% {}}}} \def\doitemattributes #1{\doattributes{\??op\currentitemgroup#1}} \def\@@globalitemsymbol #1{\??op\currentitemgroup\c!symbol\s!global#1} \def\@@localitemsymbol #1{\??op\currentitemgroup\c!symbol\s!local #1} \def\@@currentitemsymbol#1{\??op\currentitemgroup\c!symbol #1} \def\@@itemcounter{\s!itemcount\currentitemgroup} % \def\doitembreak#1{\ifconditional\textlistitem\else\dosomebreak#1\fi} % % s-pre-61 / pre-dis, test extensively, 2004/5 \def\doitembreak#1{\ifconditional\optimizelistitem\ifconditional\textlistitem\else\dosomebreak#1\fi\fi} \def\initializeitemgroupslevel#1% {\ifundefined{\@@globalitemsymbol{#1}}% \edef\itemreferences{\itemreferences,#1}% \makecounter{\@@itemcounter#1}% \setevalue{\@@globalitemsymbol{#1}}{#1}% \fi} \def\initializeitemgrouplevel#1% safeguard {\ifundefined{\??op\currentitemgroup#1\c!width}% \doinitializeitemgrouplevel{#1}% \fi} \def\doinitializeitemgrouplevel#1% {\copyparameters [\??op\currentitemgroup#1][\??oo] [\c!width,\c!factor,\c!distance,\c!align,\c!symalign,\c!option,% \c!style,\c!marstyle,\c!symstyle,\c!headstyle,% \c!color,\c!marcolor,\c!symcolor,\c!headcolor,% \c!beforehead,\c!afterhead,\c!before,\c!inbetween,\c!after,% \c!stopper,\c!placestopper,\c!indenting,% \c!n,\c!inner,\c!symbol,\c!margin,\c!items,% \c!leftmargin,\c!rightmargin,\c!indentnext,% \c!command,% \c!start,\c!lefttext,\c!righttext]} \def\setupitemgroups {\dosingleargument\dosetupitemgroups} \def\dosetupitemgroups[#1]% still undocumented {\getparameters[\??oo][\c!levels=4,#1]% % will change (remove) \ifnum\@@oolevels>\maxitemdepth \maxitemdepth\@@oolevels\relax \dorecurse\maxitemdepth{\initializeitemgroupslevel\recurselevel}% \fi} \def\doitemreference#1,#2,#3\\% {\ifnum\currentitemlevel>#1\relax \ifnum#1>\zerocount \tempsymbol \fi \getvalue{\@@currentitemsymbol{#2}}% \doitemreference#2,#3\\% \fi} \def\itemreference {\expandafter\doitemreference\itemreferences,,\\} \def\packitems {\ifcase\currentitemlevel \else \settrue\packlistitem \fi} \def\dosetupitemgroupvariable[#1]% [#2]% niveau instellingen {\doifelsenothing{#1} {\getparameters[\??op\currentitemgroup\currentitemlevel]}% [#2]}% {\getparameters[\??op\currentitemgroup#1]}}% [#2]}} \newconditional\inlinelistitem \setfalse\inlinelistitem \def\dododosetupitemgroupconstant[#1][#2#3#4]% * permits [2] {\global\setitemparameter\currentitemlevel\c!maxwidth{0}% \processaction [#2#3#4] [ \v!packed*=>\packitems, \v!intro*=>\settrue\introlistitem, % here? not set to false % no: \v!random*=>\settrue\randomizeitems,% here? not set to false \v!autointro*=>\settrue\autointrolistitem, \v!broad*=>\setitemparameter{#1}\c!factor{1}, #2#3*\v!broad*=>\setitemparameter{#1}\c!factor{#2#3}, #2*\v!broad*=>\setitemparameter{#1}\c!factor{#2}, \v!text*=>\settrue\textlistitem \settrue\inlinelistitem \settrue\joinedlistitem % \dosetuppackeditemgroup{#1}% \packitems, \v!columns*=>\packitems, \v!before*=>\settrue\beforelistitem, \v!after*=>\settrue\afterlistitem, \v!nowhite*=>\settrue\nowhitelistitem, % \def\packeditemspacing{\nowhitespace}, \v!margin*=>\setitemparameter{#1}\c!width{-2em}, % signal \v!inmargin*=>\setitemparameter{#1}\c!width{-2em}, % signal \v!atmargin*=>\doifnot{#1}{1}{\setitemparameter{#1}\c!width{0em}}, % signal \v!intext*=>\settrue\inlinelistitem, % new \v!loose*=>\setfalse\optimizelistitem, \v!fit*=>\settrue\fittinglistitems, \v!nofit*=>\setfalse\fittinglistitems, \v!paragraph*=>\settrue\paragraphlistitem \packitems, \v!joinedup*=>\settrue\joinedlistitem % \dosetuppackeditemgroup{#1}% \packitems, \v!serried*=>\setitemparameter{#1}\c!factor{-1}, #2#3*\v!serried*=>\setitemparameter{#1}\c!factor{-#2#3}, #2*\v!serried*=>\setitemparameter{#1}\c!factor{-#2}, \v!stopper*=>\setitemparameter{#1}\c!placestopper{\v!yes}, % keep {} \v!unpacked*=>\setfalse\packlistitem, \v!repeat*=>\settrue\repeatlistitem, % new \v!reverse*=>\settrue\reverselistitem, \v!standard*=>\dosetupstandarditemgroup{#1}]} \def\dosetupstandarditemgroup#1% {\getparameters [\??op\currentitemgroup#1] [\c!width=1.5em, \c!factor=0, \c!distance=.5em, \c!beforehead=, \c!afterhead=\blank, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!inner=]} % \def\packeditemspacing{\empty} % \setupwhitespace[big] % \starttext % test \startitemize[joinedup] \item test \item test \stopitemize test \par % test \startitemize[joinedup,nowhite] \item test \item test \stopitemize test \par % test \startitemize[joinedup,nowhite,before] \item test \item test \stopitemize test \par % test \startitemize[joinedup,nowhite,after] \item test \item test \stopitemize test \par % \stoptext \def\itembeforecommand {\ifconditional\nowhitelistitem \ifconditional\beforelistitem \ifcase\currentitemlevel\or\getitemparameter\currentitemlevel\c!before\fi \else \nowhitespace \fi \else\ifconditional\joinedlistitem % \empty \else \getitemparameter\currentitemlevel\c!before \fi\fi} \def\itemaftercommand {\ifconditional\nowhitelistitem \ifconditional\afterlistitem \ifcase\currentitemlevel\or\getitemparameter\currentitemlevel\c!after\fi \else \nowhitespace \fi \else\ifconditional\joinedlistitem % \empty \else \getitemparameter\currentitemlevel\c!after \fi\fi} \def\iteminbetweencommand {\ifconditional\nowhitelistitem \nowhitespace \else\ifconditional\joinedlistitem % \empty \else \getitemparameter\currentitemlevel\c!inbetween \fi\fi} \def\itembeforeheadcommand {\ifconditional\nowhitelistitem \nowhitespace \else\ifconditional\joinedlistitem % \empty \else \getitemparameter\currentitemlevel\c!beforehead \fi\fi} \def\itemafterheadcommand {\ifconditional\nowhitelistitem \nowhitespace \else\ifconditional\joinedlistitem % \empty \else \getitemparameter\currentitemlevel\c!afterhead \fi\fi} % \def\dosetuppackeditemgroup#1% % {\setitemparameter{#1}\c!beforehead{\packeditemspacing}% % \setitemparameter{#1}\c!afterhead {\packeditemspacing}% % \setitemparameter{#1}\c!before {\packeditemspacing}% % \setitemparameter{#1}\c!after {\packeditemspacing}% % \setitemparameter{#1}\c!inbetween {\packeditemspacing}} \def\dosetupitemgroupconstant[#1][#2]% {\def\dodosetupitemgroupconstant##1% catches empty in [a,b,] handy for xml {\doifsomething{##1}{\dododosetupitemgroupconstant[#1][##1*]}}% \processcommacommand[#2]\dodosetupitemgroupconstant} % expansion of #2 is handy for xml \def\dododododosetupitemgroup[#1][#2]% {\doifassignmentelse{#2}% {\dosetupitemgroupvariable[#1][#2]}% {\setitemparameter{#1}\c!option{#2}}}% \def\dodododosetupitemgroup[#1][#2]% {\ConvertToConstant\doifnot{#2}{} {\doifelse{#1}\v!each {\dorecurse\maxitemdepth{\ExpandFirstAfter\dododododosetupitemgroup[\recurselevel][#2]}} {\ExpandFirstAfter\dododododosetupitemgroup[#1][#2]}}} \def\dododosetupitemgroup[#1][#2]% {\ConvertToConstant\doifelse{#2}{} {\ifcase\currentitemlevel\relax \dodododosetupitemgroup[\v!each][#1]% \else \dodododosetupitemgroup[\currentitemlevel][#1]% \fi} {\doifelsenothing{#1} {\dodododosetupitemgroup[\currentitemlevel][#2]} {\dodododosetupitemgroup[#1][#2]}}} \def\dodosetupitemgroup[#1][#2][#3][#4]% {\pushmacro\currentitemgroup \def\currentitemgroup{#1}% \dododosetupitemgroup[#2][#3]% \ConvertToConstant\doifnot{#4}{} % anders wordt #2 overruled {\dododosetupitemgroup[#2][#4]}% \popmacro\currentitemgroup} \def\dosetupitemgroup[#1][#2][#3][#4]% {\def\docommand##1{\dodosetupitemgroup[##1][#2][#3][#4]}% \processcommalist[#1]\docommand} \def\setupitemgroup {\doquadrupleempty\dosetupitemgroup} \def\doadvanceitem {\ifconditional\sublistitem\else\ifconditional\symbollistitem\else \pluscounter{\@@itemcounter\currentitemlevel}% \fi\fi} \def\setitemlevel#1% {\ifnum\currentitemlevel>\zerocount \settrue\firstlistitem % \expanded{\setitemparameter{\currentitemlevel}{\c!start}{1}}% *** \doifinset{0}{#1}{\setitemparameter\currentitemlevel\c!start{0}}% *** \setcounter{\@@itemcounter\currentitemlevel}{\the\numexpr\getitemparameter\currentitemlevel\c!start-1\relax}% *** \doifelsenothing{\getitemparameter\currentitemlevel\c!start} {\def\currentitemoffset{1}} {\def\currentitemoffset{\getitemparameter\currentitemlevel\c!start}% \letitemparameter\currentitemlevel\c!start\empty}% \def\tempnumber {\countervalue{\@@itemcounter\currentitemlevel}}% \doifelse{\getitemparameter\currentitemlevel\c!placestopper}\v!yes {\def\tempsymbol{\getitemparameter\currentitemlevel\c!stopper}} {\let\tempsymbol\empty}% \fi} \def\actualitemnumber {\ifconditional\reverselistitem \convertnumber\currentitemsymbol{\numexpr\currentmaxnofitems+\currentitemoffset-\currentitemnumber+1\relax}% \else \convertnumber\currentitemsymbol{\numexpr\currentminnofitems+\currentitemoffset+\currentitemnumber-1\relax}% \fi} % PAS OP: ook 'opelkaar' en zo worden getest, nog eens afvangen! \def\unknownitemsymbol{?} \def\setitemmark#1% % en pas op: resets \docommand {\doifsymboldefinedelse{#1} {\edef\currentitemsymbol{#1}% \setxvalue{\@@globalitemsymbol\currentitemlevel}{\currentitemsymbol}% \setgvalue{\@@localitemsymbol \currentitemlevel}{\unknownitemsymbol}% \def\listitem{\symbol[\currentitemsymbol]}% \let\@@opsymbol\empty}% \let\docommand\gobbleoneargument} {\doifconversiondefinedelse{#1} {\edef\currentitemsymbol{#1}% \setxvalue{\@@globalitemsymbol\currentitemlevel}{\currentitemsymbol}% \setgvalue{\@@localitemsymbol\currentitemlevel }{\actualitemnumber }% \ifconditional\textlistitem \doifsomething{\getitemparameter\currentitemlevel\c!lefttext} {\let\tempsymbol\empty}% \fi \def\listitem {\getitemparameter\currentitemlevel {\ifconditional\textlistitem\c!lefttext\else\c!left\fi}% \getvalue{\@@localitemsymbol\currentitemlevel}\tempsymbol \getitemparameter\currentitemlevel {\ifconditional\textlistitem\c!righttext\else\c!right\fi}}% \let\@@opsymbol\empty}%\let\docommand\gobbleoneargument} {}}} \def\calculatelistwidth#1#2% distance deals with 'broad' {#2=\getitemparameter{#1}\c!distance\relax \ifnum\getitemparameter{#1}\c!factor>\zerocount \ifdim#2=\zeropoint #2=.5em\fi \fi \multiply#2 \getitemparameter{#1}\c!factor \advance #2 \getitemparameter{#1}\c!width\relax} % The next conditionals deal with \item \startitemgroup. It % looks like a hack to skip back, but that way we preserve % the indentation and bullet placement. It's a rather % untested feature. \newconditional\concatnextitem \setfalse\concatnextitem \newconditional\autoconcatnextitem \settrue \autoconcatnextitem \newsignal \itemsignal \def\startitemgroup {\dotripleempty\dostartitemgroup} % \def\dostartitemgroup[#1][#2][#3]% % {\bgroup % \def\currentitemgroup{#1}% % \ifthirdargument % \dodostartitemgroup[#2][#3]% % \else % \doifassignmentelse{#2} % {\dodostartitemgroup[][#2]} % {\dodostartitemgroup[#2][]}% % \fi} \def\dostartitemgroup[#1][#2][#3]% {\bgroup \ifnum\currentitemlevel=\zerocount \def\currentitemgroup{#1}% no nested mixing of itemgroups \fi \ifthirdargument \dodostartitemgroup[#2][#3]% \else \doifassignmentelse{#2} {\dodostartitemgroup[][#2]} {\dodostartitemgroup[#2][]}% \fi} \def\dodostartitemgroup[#1]% [#2]% {\relax % prevents lookahead \ifnum\currentitemlevel=\maxitemdepth\relax \showmessage\m!layouts9{\number\maxitemdepth}% \let\itemincrement\zerocount \else \let\itemincrement\plusone \fi \global\advance\itemdepth\itemincrement \xdef\currentitemlevel{\number\itemdepth}% \initializeitemgrouplevel\currentitemlevel % safeguard \edef\itemgroupoptions{\getitemparameter\currentitemlevel\c!option}% \ifx\itemgroupoptions\empty \edef\itemgroupoptions{#1}% \else \doifsomething{#1}{\edef\itemgroupoptions{\itemgroupoptions,#1}}% \fi \expanded{\redostartitemgroup[\itemgroupoptions]}}% [#2] \let\startcollectitems\relax \let\stopcollectitems \relax %D A nice example of a plugin: %D %D \startbuffer %D \startitemize[a,random,packed] %D \startitem first \stopitem \startitem second \stopitem %D \startitem third \stopitem \startitem fourth \stopitem %D \stopitemize %D %D \startitemize[a,random,packed] %D \startitem first \stopitem \startitem second \stopitem %D \startitem third \stopitem \startitem fourth \stopitem %D \stopitemize %D %D \startitemize[a,packed] %D \startitem first \stopitem \startitem second \stopitem %D \startitem third \stopitem \startitem fourth \stopitem %D \stopitemize %D \stopbuffer %D %D \typebuffer \getbuffer % better collectitems als conditional and a real plugin mechanism (some day) \@EA\long\@EA\def\@EA\collectitemgroupitem\@EA#\@EA1\csname\e!stop\v!item\endcsname {\increment\itemcollectcounter \long\setvalue{\v!item*\itemcollectcounter}{\item#1\par}} \def\flushcollecteditems {\ifconditional\randomizeitems \getrandomnumber\itemcollectcounternow\plusone\itemcollectcounter \else \increment\itemcollectcounternow \fi \doifdefined{\v!item*\itemcollectcounternow} {\getvalue{\v!item*\itemcollectcounternow}% \letbeundefined{\v!item*\itemcollectcounternow}% \increment\itemcollectcounterdone}% \ifnum\itemcollectcounterdone<\itemcollectcounter\relax \expandafter\flushcollecteditems \fi} \def\stopcollectitems {\ifconditional\randomizeitems \newcounter\itemcollectcounterdone \ifnum\itemcollectcounter>\zerocount \@EAEAEA\flushcollecteditems \fi \fi} \def\startcollectitems {\ifconditional\randomizeitems \newcounter\itemcollectcounter \letvalue{\e!start\v!item}\collectitemgroupitem \fi} %D End of plugin. \ifx\startcolumns\undefined \def\startcolumns[#1]{} \fi \ifx\stopcolumns \undefined \let\stopcolumns\relax \fi \def\dosetsymalign#1% hm, we should use one of the core-spa macros or make a helper {\processaction [#1] [ \v!flushleft=>\let\symalignleft\relax, \v!right=>\let\symalignleft\relax, \v!flushright=>\let\symalignleft\hfill, \v!left=>\let\symalignleft\hfill, \v!middle=>\let\symalignleft\hfil, \v!center=>\let\symalignleft\hfil]} \def\redostartitemgroup[#1][#2]% {\setfalse\inlinelistitem % new, no indent (leftskip) \setfalse\concatnextitem % new, concat \setfalse\txtlistitem \ifhmode \ifconditional\autoconcatnextitem % new, concat \ifdim\lastskip=\itemsignal % new, concat \settrue\concatnextitem % new, concat \fi % new, concat \fi % new, concat \ifconditional\textlistitem\else\doifnotinset\v!text{#1}\par\fi % suboptimal \fi \begingroup % new where, ok or not / we should integrate random, intro, continue here % beware, the following no longer inherit from the previous level, is this ok? \setfalse\reverselistitem \setfalse\introlistitem \setfalse\autointrolistitem \setfalse\beforelistitem \setfalse\afterlistitem \setfalse\nowhitelistitem \setfalse\randomizeitems % \doifinsetelse\v!intro {#1}{\settrue\introlistitem }{\setfalse\introlistitem }% \doifinsetelse\v!random {#1}{\settrue\randomizeitems }{\setfalse\randomizeitems }% \doifinsetelse\v!continue{#1}{\settrue\continuelistitems}{\setfalse\continuelistitems}% % == \doifinsetelse\v!intro{#1}\settrue\setfalse\introlistitem \global\advance\noflists\plusone \currentnoflists=\noflists \newcounter\noflistelements \setfalse\headlistitem \setfalse\sublistitem \setfalse\symbollistitem \let\marsymbol\relax \globallet\doitemdestination\empty \let\symsymbol\empty \let\symalignleft\relax \the\itemgroupcommands \checkcurrentnofitems % \getitemparameter\currentitemlevel\empty \let\listitem\empty % ** start value \doifelsenothing{#1} % iffirstargument {\edef\@@opsymbol{\getitemparameter\currentitemlevel\c!symbol}% \letgvalueempty{\@@globalitemsymbol\currentitemlevel}% \global\letitemparameter\currentitemlevel\v!continue\empty % \setitemmark\@@opsymbol % ** default value \dosetupitemgroupvariable[\currentitemlevel][#2]} {\dosetupitemgroupconstant[\currentitemlevel][#1]% \dosetupitemgroupvariable[\currentitemlevel][#2]% \doifinsetelse\v!continue{#1}% \noexpand, else problems in non-etex with chinese {\edef\@@opsymbol{\noexpand\getvalue{\@@globalitemsymbol\currentitemlevel}}% \getitemparameter\currentitemlevel\v!continue} {\edef\@@opsymbol{\noexpand\getitemparameter{\currentitemlevel}{\c!symbol}}% \global\setitemparameter\currentitemlevel\v!continue {\dosetupitemgroupconstant[\currentitemlevel][#1]% \dosetupitemgroupvariable[\currentitemlevel][#2]}}% \def\docommand##1% \setitemmark resets \docommand {\doifnot{##1}{0}{\setitemmark{##1}}}% % \processcommalist[#1,\@@opsymbol]\docommand \processcommalist[#1]\docommand}% ** preset sequence or provided sequence % moved to here, after settings \ifnum\currentitemlevel=\plusone % NIEUW \doadaptleftskip {\getitemparameter1\c!margin}% \doadaptleftskip {\getitemparameter1\c!leftmargin}% \doadaptrightskip{\getitemparameter1\c!rightmargin}% \fi \dosetraggedcommand{\getitemparameter\currentitemlevel\c!align}\raggedcommand \dosetsymalign{\getitemparameter\currentitemlevel\c!symalign}% \doifsomething{\getitemparameter\currentitemlevel\c!indenting} {% is \expanded needed? \expanded{\setupindenting[\getitemparameter\currentitemlevel\c!indenting]}}% % \setitemlevel{#1}% moved to here \ifx\listitem\empty \setitemmark\@@opsymbol % ** default value \ifx\listitem\empty \edef\currentitemsymbol{\currentitemlevel}% ** fall back \fi \fi \ifconditional\autointrolistitem\ifnum\prevgraf<3 \settrue\introlistitem \fi\fi \ifconditional\paragraphlistitem \ifnum\currentitemlevel>\plusone \letitemparameter\currentitemlevel\c!inbetween\empty \fi \fi \ifconditional\packlistitem \letitemparameter\currentitemlevel\c!inbetween\empty \fi \doifinset\v!columns{#1}% {\ifinsidecolumns\else\ifcase\itemcolumndepth \global\itemcolumndepth\currentitemlevel\relax \itembeforecommand \processfirstactioninset [#1] [ \v!one=>\!!counta1\relax, \v!two=>\!!counta2\relax, \v!three=>\!!counta3\relax, \v!four=>\!!counta4\relax, \v!five=>\!!counta5\relax, \s!unknown=>\@EA\!!counta\getitemparameter\currentitemlevel\c!n]% \startcolumns [\c!n=\!!counta, % netter \??op\currentitemlevel\c!n \c!height=, \c!rule=\v!off, \c!balance=\v!yes, \c!align=\v!no]% \fi\fi}% \ifconditional\fittinglistitems \splititemtwopassdata\currentnoflists \ifdim\itemdataw sp>\zeropoint \expanded{\setitemparameter{\currentitemlevel}{\c!width}{\itemdataw sp}}% \fi \fi \calculatelistwidth\currentitemlevel{\dimen0}% \ifdim\dimen0>\zeropoint\relax \ifconditional\inlinelistitem\else \advance\leftskip \dimen0\relax \fi \fi \startcollectitems} % test / example % % \startnarrower[left] \startcolumns[n=3] \startitemize % \item \input ward \item \input ward \item \input ward % \stopitemize \stopcolumns\stopnarrower \blank % % \startnarrower[left] \startitemize[columns,three] % \item \input ward \item \input ward \item \input ward % \stopitemize \stopnarrower \blank % % \setupitemize[leftmargin=1.5em] \startitemize[columns,three] % \item \input ward \item \input ward \item \input ward % \stopitemize \blank \def\stopitemgroup {\stopcollectitems \ifconditional\textlistitem \removeunwantedspaces\space\ignorespaces \else \par \fi \dolistreference \ifconditional\firstlistitem \else \endgroup \fi % toegevoegd, eerste \som opent groep \ifnum\itemcolumndepth=\currentitemlevel\relax \stopcolumns \global\itemcolumndepth\zerocount \itemaftercommand \dontrechecknextindentation \else \ifnum\currentitemlevel=\plusone \doitembreak\allowbreak % toegevoegd \itemaftercommand % \getitemparameter\currentitemlevel\c!after % was: \dochecknextindentation\??oo, is now: \dochecknextindentation{\??op\currentitemgroup\currentitemlevel}% \else % nieuw, not yet nobreak handling \ifcase\autoitemgroupspacing \itemaftercommand \or \itemaftercommand \fi \dontrechecknextindentation \fi \fi % new test, needed in sidefloats (surfaced in volker's proceedings) \ifconditional\textlistitem % else forgotten \endgroup \global\advance\itemdepth-\itemincrement \xdef\currentitemlevel{\number\itemdepth}% \egroup \else \endgroup \global\advance\itemdepth-\itemincrement \xdef\currentitemlevel{\number\itemdepth}% \egroup \par \fi \dorechecknextindentation} \newtoks\itemgroupcommands \def\itemgroupitem {\doitemgroupitem} \def\itemgroupnoitem {\doitemgroupnoitem} \def\itemgroupbutton[#1]% {\gdef\doitemdestination{#1}% \itemgroupitem} \def\itemgroupdummy {\itemgroupsymbol{\strut}\strut} \def\itemgroupsubitem {\settrue\sublistitem \itemgroupitem} \def\itemgroupsymbol#1% {\def\symsymbol{\doitemattributes\currentitemlevel\c!symstyle\c!symcolor{#1}}% \settrue\symbollistitem \itemgroupitem} \def\itemgroupedge#1% {\itemgroupsymbol {\calculatelistwidth\currentitemlevel{\dimen0}% \hbox to \dimen0 {#1\hskip\getitemparameter\currentitemlevel\c!distance}}} \def\itemgrouphead {\settrue\headlistitem\doitemgrouphead} \def\itemgroupitems {\dosingleempty\doitemgroupitems} \def\doitemgroupitems[#1]% {\itemgroupedge {\dorecurse{0\getitemparameter\currentitemlevel\c!items}{\listitem\hss}% \unskip}} \def\itemgroupmargin#1% {\def\marsymbol {\llap {\doitemattributes\currentitemlevel\c!marstyle\c!marcolor{#1}% \hskip\leftskip\hskip\leftmargindistance}}% \itemgroupitem} \appendtoks \let\item \itemgroupitem \to \itemgroupcommands \appendtoks \let\noitem \itemgroupnoitem \to \itemgroupcommands \appendtoks \letvalue\v!item \itemgroupitem \to \itemgroupcommands \appendtoks \let\itm \itemgroupitem \to \itemgroupcommands \appendtoks \let\but \itemgroupbutton \to \itemgroupcommands \appendtoks \let\nop \itemgroupdummy \to \itemgroupcommands \appendtoks \letvalue\v!sub \itemgroupsubitem \to \itemgroupcommands \appendtoks \letvalue\v!sym \itemgroupsymbol \to \itemgroupcommands \appendtoks \letvalue\v!ran \itemgroupedge \to \itemgroupcommands \appendtoks \letvalue\v!head \itemgrouphead \to \itemgroupcommands \appendtoks \letvalue\v!its \itemgroupitems \to \itemgroupcommands \appendtoks \letvalue\v!mar \itemgroupmargin \to \itemgroupcommands % todo : \startitem .. \stopitem \appendtoks \letvalue{\e!start\v!item}\itemgroupitem \letvalue{\e!stop \v!item}\endgraf \to \itemgroupcommands \appendtoks \setvalue{\e!start\v!head}#1{\itemgrouphead#1\par}% \letvalue{\e!stop \v!head}\endgraf \to \itemgroupcommands % \startitemize % \starthead {xx} test \stophead % \startitem test \stopitem % \startitem test \stopitem % \stopitemize % Sometimes the user demands get pretty weird: % % \startitemize % \item test % \item test % \headsym{xx} test \par test % \stopitemize % aligned items % % \startitemize[n,fit,broad][itemalign=flushright] % \dorecurse{100}{\item The first item.} % \stopitemize % % \setupitemgroup[itemize][each][fit] % \setupitemgroup[itemize][each][distance=.5em,factor=1,itemalign=flushright] % % \startitemize[n] % \dorecurse{100}{\item The first item.} % \stopitemize \appendtoks \let\headsym \itemgroupheadsym \to \itemgroupcommands \def\itemgroupheadsym#1% {\def\symsymbol{\doitemattributes\currentitemlevel\c!symstyle\c!symcolor{#1}}% \settrue\symbollistitem \settrue\headlistitem \doitemgrouphead} % \defineitemgroup[gbitemize] % \setupitemgroup[gbitemize][each][headstyle=bold] % \startgbitemize % \txt{italian} some italians like this kind of cross||breed between % an itemize and a description % \txt{sicilians} i wonder how many sicilian mathematicians do a thesis % on the math involved in predicting the next big bang of the vulcano % \stopgbitemize \appendtoks \letvalue\v!txt \itemgrouptext \to \itemgroupcommands \newconditional\txtlistitem \setfalse\txtlistitem \def\itemgrouptext#1% {\def\symsymbol{\doitemattributes\currentitemlevel\c!headstyle\c!headcolor{#1}}% \settrue\symbollistitem \settrue\txtlistitem \itemgroupitem} \def\itembreak % -10 {\flushnotes\penalty-5\relax} \def\itemnobreak % +5 {\flushnotes\penalty+5\ifinsidecolumns\else00\fi\relax} \def\dodotxtitem {\scratchdimen\wd8 \advance \scratchdimen \getitemparameter\currentitemlevel\c!distance\relax \ifdim\scratchdimen>\dimen0 \advance\scratchdimen -\dimen0 \else \scratchdimen\zeropoint \fi \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hss}}% was: \hfill \hskip\scratchdimen} \def\optimizelistitemsbreak {\ifcase\itemcolumndepth \ifconditional\optimizelistitem \ifcase \currentnofitems \else \ifnum\currentnofitems=\plusthree \ifnum\noflistelements>\plusone \doitembreak\itemnobreak \fi \else\ifnum\currentnofitems>\plusthree \ifnum\noflistelements=\plustwo \ifconditional\introlistitem \doitembreak\nobreak \else \doitembreak\itemnobreak \fi \else\ifnum\currentnofitems=\noflistelements\relax \doitembreak\itemnobreak \else\ifnum\noflistelements>\plustwo \doitembreak\itembreak \else \ifconditional\introlistitem\else\doitembreak\itembreak\fi \fi\fi\fi \fi\fi \fi \fi\fi} \def\dolistitem % evt aantal items opslaan per niveau, scheelt zoeken {\ifconditional\textlistitem % begin of item \else \par \fi % \ignorespaces \increment\noflistelements \optimizelistitemsbreak \noindent \setbox8\hbox {\ifconditional\headlistitem \ifconditional\symbollistitem \symsymbol \else \doitemattributes\currentitemlevel\c!headstyle\c!headcolor{\listitem}% \fi \else \ifconditional\symbollistitem \symsymbol % no attributes, why? \else \doitemattributes\currentitemlevel\c!style\c!color{\listitem}% \fi \fi}% \ifconditional\fittinglistitems \ifdim\wd8>\getitemparameter\currentitemlevel\c!maxwidth sp\relax \expanded{\global\noexpand\setitemparameter{\currentitemlevel}{\c!maxwidth}{\number\wd8}}% \fi \splititemtwopassdata\currentnoflists \ifdim\itemdataw sp>\zeropoint \setbox8\simplealignedbox{\getitemparameter\currentitemlevel\c!itemalign}{\itemdataw sp}{\box8}% \fi \fi \doifsomething\doitemdestination {\setbox8\hbox{\goto{\box8}[\doitemdestination]}}% \globallet\doitemdestination\empty \dimen2=\getitemparameter\currentitemlevel\c!width\relax % new, prevents loops when symbol is (not yet found) graphic \ht8=\strutheight \dp8=\strutdepth % so that content differs per run (esp mp graphics afterwards) \checkforrepeatedlistitem \ifdim\dimen2<\zeropoint\relax \llap{\ifconditional\sublistitem\llap{+}\fi\box8\hskip\leftmargindistance}% \else \ifdim\dimen2=\zeropoint\relax \calculatelistwidth1{\dimen0}% \else \calculatelistwidth\currentitemlevel{\dimen0}% \fi \ifconditional\textlistitem \hbox{\ifconditional\sublistitem+\fi\box8\hskip\interwordspace}\nobreak \else\ifconditional\inlinelistitem \hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hss}% was: \hfill \else\ifconditional\txtlistitem \dodotxtitem \else % todo: align+marge binnen de hbox % \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hfill}}% \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi \symalignleft \box8\hfil \hskip\getitemparameter\currentitemlevel\c!distance% T h }}% \fi\fi\fi \fi \forceunexpanded % needed for m conversion (\os) / i need to look into this \setevalue{\@@currentitemsymbol\currentitemlevel}% {\getvalue{\@@localitemsymbol\currentitemlevel}}% still problems with \uchar ? %{\noexpand\getvalue{\@@localitemsymbol\currentitemlevel}}% no, spoils subrefs \resetunexpanded \setfalse\headlistitem \setfalse\sublistitem \setfalse\symbollistitem \EveryPar{\ignorespaces}% needed ? \ignorespaces} % For Wolfgang Schuster % \startitemize[n,repeat] % \noitem \startitemize[a] \item Item 1.a. \item Item 1.b. \stopitemize % \noitem \startitemize[a] \item Item 2.a. \item Item 2.b. \stopitemize % \stopitemize \def\donolistitem % reduced \dolistitem {\increment\noflistelements \setbox8\hbox {\doitemattributes\currentitemlevel\c!style\c!color{\listitem}}% \checkforrepeatedlistitem \ignorespaces} \def\doitemgroupnoitem {\doadvanceitem\donolistitem} % For Frank Grieshaber and Mojca Miklavec: \newconditional\repeatlistitem \def\checkforrepeatedlistitem {\ifnum\currentitemlevel=\plusone \initializeboxstack{item}% \fi \ifconditional\repeatlistitem \savebox{item}{\currentitemlevel}{\hbox{\copy8}}% \setbox8\hbox to \wd8 {\setbox\scratchbox\hbox {\scratchcounter\currentitemlevel \advance\scratchcounter\minusone \dorecurse\scratchcounter{\foundbox{item}{\recurselevel}}}% \ifnum\currentitemlevel>\plusone \ifdim\wd\scratchbox>\zeropoint \hskip-\dimen2 \box\scratchbox \fi \fi \box8 }% \fi} % \startbuffer % \item % \startitemize[n] % \item item 1.1 % \item item 1.2 % \startitemize[n] \item item 1.2.1 \item item 1.2.2 \stopitemize % \item item 1.3 % \stopitemize % \item % \startitemize[n] \item item 2.1 \item item 2.2 \stopitemize % \item item 3 % \startitemize[n] \item item 3.1 \item item 3.2 \stopitemize % \item % \startitemize[n] \item item 4.1 \item item 4.2 \stopitemize % \stopbuffer % % \startitemize[n,repeat,6*broad,packed] \getbuffer \stopitemize \blank[3*big] % \startitemize[n,repeat,packed] \getbuffer \stopitemize \blank[3*big] % \setupitemize[each][atmargin][width=3em] % \startitemize[n,repeat,packed] \getbuffer \stopitemize \chardef\autoitemgroupspacing=2 % 0 = voor/na, 1=tussen als geen voor 2=(prev)tussen=old/normal \def\complexdoitemgroupitem[#1]% {\ifconditional\textlistitem % begin of item \else \par \fi % \ignorespaces \ifconditional\concatnextitem % new, concat \doitembreak\nobreak % new, concat \fi % new, concat \doadvanceitem \ifcase\itemcolumndepth \ifnum\noflistelements>0\relax % wrong, but why was this here in the first place, probably some % mistaken change when cleaning up: \doitembreak\nobreak \fi\fi \ifconditional\firstlistitem \setfalse\firstlistitem \begingroup \ifcase\currentitemlevel \or % 1 \ifcase\itemcolumndepth \ifconditional\introlistitem\doitembreak\nobreak\fi \itembeforecommand % \getitemparameter\currentitemlevel\c!before \ifconditional\introlistitem\doitembreak\nobreak\fi \fi \else % 2 en hoger \ifconditional\paragraphlistitem \else \let\previtemlevel\currentitemlevel \decrement\previtemlevel \ifcase\autoitemgroupspacing\relax % nieuw \itembeforecommand \or \doifelsenothing{\itembeforecommand} {\itembeforecommand} {\getitemparameter\previtemlevel\c!inbetween}% \else \getitemparameter\previtemlevel\c!inbetween % == itemlevel-1 \fi \fi \fi \else \ifconditional\textlistitem % was bugged: \inlinelistitem % \removeunwantedspaces\hskip\interwordspace\!!plus\emwidth\relax % new per 2006/10/20 \removeunwantedspaces\hskip\emwidth\!!plus\interwordstretch\!!minus\interwordshrink\relax % new per 2006/10/20 \else \iteminbetweencommand \fi \fi \ifconditional\concatnextitem % new, concat \vskip-\lastskip % new, concat \vskip-\lineheight % new, concat \nobreak % new, concat \fi % new, concat % \ignorespaces \dolistitem \relax \ifconditional\packlistitem \setupwhitespace[\v!none]% \fi \getitemparameter\currentitemlevel\c!inner \marsymbol \let\marsymbol\relax \doifsomething{#1} {\doifnot\itemreference\unknownitemreference {\bgroup \protectconversion \rawreference\s!lst{#1}\itemreference \egroup}}% \strut % added 11-08-99 \setfalse\concatnextitem % new, concat \nobreak % else problems with intext items \hskip\itemsignal % new, concat \getitemparameter\currentitemlevel\c!command} % \defaultitemcommand \def\defaultitemcommand {\EveryPar{\ignorespaces}% needed ? \ignorespaces} % For Giuseppe "Oblomov" Bilotta, inspired on a suggestion by Taco % Hoekwater. % % \def\MyItemCommand#1{{\bf#1}\quad} % \setupitemgroup[itemize][command=\MyItemCommand] % % \startitemize % \item {test} is this okay? % \item {test} is this okay? % \item {test} is this okay? % \stopitemize \def\complexitem[#1]#2\par % todo: no two pass data {\startitemgroup[#1]% \complexdoitemgroupitem[]\begstrut#2\endstrut\par \stopitemgroup} \definecomplexorsimpleempty\item \definecomplexorsimpleempty\doitemgroupitem \def\complexhead[#1]#2\par#3\par {\startitemgroup[#1]% \complexdoitemgrouphead[]\begstrut#2\endstrut\par\begstrut#3\endstrut\par \stopitemgroup} % \def\complexdoitemgrouphead[#1]#2\par% % beter in \complexdosom hangen met een if % {\ifconditional\firstlistitem\else\doitembreak\allowbreak\fi % \ifconditional\packlistitem\else\itembeforeheadcommand\fi % \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\currentitemlevel % incr in \complexdosom % \doitembreak\allowbreak % \fi\fi\fi % \complexdoitemgroupitem[#1]{\doitemattributes\currentitemlevel\c!headstyle\c!headcolor % {\ignorespaces#2}}% % \ifconditional\textlistitem % \removeunwantedspaces\space\ignorespaces % \else % \par % \fi % \doitembreak\nobreak % \ifconditional\packlistitem\else\itemafterheadcommand\fi % \doitembreak\nobreak % \noindentation} % % the next solution accepts \head test \type{x{x}x} test ... \def\dostartitemattributes#1{\dostartattributes{\??op\currentitemgroup#1}} \def\dostopitemattributes {\dostopattributes} \def\complexdoitemgrouphead[#1]% beter in \complexdosom hangen met een if {\ifconditional\firstlistitem\else\doitembreak\allowbreak\fi \ifconditional\packlistitem\else\itembeforeheadcommand\fi \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\currentitemlevel % incr in \complexdosom \doitembreak\allowbreak \fi\fi\fi \complexdoitemgroupitem[#1]% \bgroup \dostartitemattributes\currentitemlevel\c!headstyle\c!headcolor\empty \ignorespaces \let\par\enditemhead} % brrrr but simple anyway \def\enditemhead {\removeunwantedspaces \dostopitemattributes \egroup \ifconditional\textlistitem \space\ignorespaces \else \par \fi \doitembreak\nobreak \ifconditional\packlistitem\else\itemafterheadcommand\fi \doitembreak\nobreak \noindentation} \definecomplexorsimpleempty\head \definecomplexorsimpleempty\doitemgrouphead % \def\sym#1% % {\noindent % \begingroup % \setbox\scratchbox\hbox{\trialtypesettingtrue#1}% % \setbox\scratchbox\hbox % \ifdim\wd\scratchbox<1em to 1.5\else spread 1\fi em{#1\hfil}% % \hangindent\wd\scratchbox % \box\scratchbox % \endgroup % \ignorespaces} \def\sym#1% {\noindent \begingroup \setbox\scratchbox\hbox{\trialtypesettingtrue#1}% \setbox\scratchbox\hbox \ifdim\wd\scratchbox<1em to 1.5\else spread 1\fi em{#1\hfil}% \expanded{\box\scratchbox\endgroup\hangindent\the\wd\scratchbox}% \ignorespaces} \setupitemgroups % undocumented [\c!levels=6, \c!margin=\zeropoint, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!indentnext=\v!yes, \c!width=1.5em, \c!factor=0, \c!distance=.5em, %\c!align=\v!normal, % definitely not \v!normal, see mails and \c!align=, % debug reports of David A & Patrick G on context list \c!symalign=, \c!color=, \c!indenting=, % untouched if empty \c!color=, \c!style=, % kan tzt weg \c!marstyle=\c!type, % \c! ??? \c!symstyle=, \c!headstyle=, \c!marcolor=, \c!symcolor=, \c!headcolor=, \c!beforehead=, \c!afterhead=\blank, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!stopper=., \c!placestopper=\v!yes, \c!inner=, \c!n=2, \c!items=4, \c!lefttext=(, \c!righttext=), \c!start=1, \c!option=, \c!command=\defaultitemcommand, \c!symbol=\currentitemlevel] % \v!niveau \def\defineitemgroup {\dodoubleempty\dodefineitemgroup} \def\dodefineitemgroup[#1][#2]% {\doifsomething{#1} {\pushmacro\currentitemgroup \def\currentitemgroup{#1}% \setvalue{\e!start#1}{\startitemgroup[#1]}% \setvalue{\e!stop#1}{\stopitemgroup}% \setvalue{\e!setup#1\e!endsetup}{\setupitemgroup[#1]}% \getparameters[\??ig#1][\c!levels=3,#2]% \ifnum\getvalue{\??ig#1\c!levels}<\maxitemdepth\relax \setevalue{\??ig#1\c!levels}{\number\maxitemdepth}% \fi \dorecurse{\getvalue{\??ig#1\c!levels}}{\initializeitemgrouplevel\recurselevel}% \popmacro\currentitemgroup}} % efficient default itemize as well as upward compatible % definition: \defineitemgroup [\v!itemize] [\c!levels=6] % keep these, needed for styles: % \def\startitemize {\startitemgroup[\v!itemize]} % \def\stopitemize {\stopitemgroup} % \def\setupitemize {\setupitemgroup[\v!itemize]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-rul.mkii0000644000175000017500000033133511754241457024304 0ustar norbertnorbert%D \module %D [ file=pack-rul, % was core-rul, %D version=1998.10.16, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Ruled Content, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Ruled Content} \unprotect %D We have removed the rather old and out dated raster methods. They %D have not been used for ages. %D \macros %D {linewidth, setuplinewidth} %D %D This module deals with rules (lines) in several ways. First %D we introduce two macros that can be used to set some common %D characteristics. %D %D \showsetup{setuplinewidth} %D %D The linewidth is available in \type{\linewidth}. The %D preset value of .4pt equals the default hard coded \TEX\ %D rule width. \newdimen\linewidth \def\dosetuplinewidth[#1]% {\assigndimension{#1}\linewidth{.2\points}{.4\points}{.6\points}} \def\setuplinewidth {\dosingleargument\dosetuplinewidth} %D \macros %D {ruledlinewidth, inheritruledlinewidth} %D %D Inside framed boxed we will use a private dimensions. As %D an option one can let the linewidth inherit its value from %D this one. \newdimen\ruledlinewidth \newif\ifinheritruledlinewidth % %D \TEX\ lacks support for color and even gray scales. The next % %D macros can provide a sort of poor mans gray scales as well % %D as give access to more suitable methods of rendering. Such a % %D method looks like: % %D % %D \starttyping % %D \def\methodegraybox#1#2#3#4#5#6% % %D { ... } % %D \stoptyping % %D % %D The string \type{graybox} is a common element in the name, % %D so we can have for instance \type {\postscriptgraybox} or % %D \type {\texgraybox}. The first three arguments take a % %D dimension, the fourth one takes a number between~0 and~1, % %D and the last argument specifies a radius of the box when % %D rounded corners are used, so: % %D % %D \startbuffer % %D \dotgraybox{.5\hsize}{1cm}{0cm}{.85}{\v!no}{0pt} % %D \stopbuffer % %D % %D \typebuffer % %D % %D becomes: % %D % %D %\startlinecorrection % %D % \vbox to 1cm{\getbuffer} % %D %\stoplinecorrection % %D % %D \startlinecorrection % %D \unprotect % %D \vbox to 1cm{\dotgraybox{.5\hsize}{1cm}{0cm}{.85}{\v!no}{0pt}} % %D \protect % %D \stoplinecorrection % %D % %D There are two predefined methodes, one uses periods and the % %D other uses small rules. The second method is less % %D efficient, but sometimes give better results. The dimensions % %D of the resullting box are set to zero. % % \setvalue{\v!dot graybox}{\processraster\symbol\rasterdot} % \setvalue{\v!rule graybox}{\processraster\symbol\rasterbox} % % \def\rasterdot{\rasterfont.} % \def\rasterbox{\hss\vrule\!!width.4pt\!!height.4pt\!!depth\zeropoint} % % %D Now of course we need: % % \ifx\rasterfont\undefined \def\rasterfont{\fivepoint} \fi % % %D We implement two pure \TEX\ based generators, that use % %D \type{\leaders} to quickly gerenate the gray pattern. One % %D should beware of \DIMENSION\ conflicts, so we use some % %D registers above~8. These macros are memory hungry and byte % %D spoiling. % % \def\processraster#1#2#3#4#5#6#7% % {\bgroup % \forgetall % \dontcomplain % \dimen10=\onepoint % \dimen10=\@@rsfactor\dimen10 % \dimen10=#5\dimen10 % \setbox2\hbox to #2 % {\cleaders\hbox to 2\dimen10{#1\hss}\hss}% % \dimen12=#3% % \advance\dimen12 #4% % % \setbox0\vbox to \dimen12 % {\cleaders\vbox to 2\dimen10{\box2\vss}\vss}% % \setbox0\hbox % {\hskip-.5\dimen10\lower0.5\dimen10\copy0 % \hskip-\wd0\hskip\dimen10\lower1.5\dimen10\box0}% % \box0 % \egroup} %D \macros %D {setupscreens} %D %D The previous macro uses a predefined constant %D \type{\@@rsfactor}. This factor can be set by: %D %D \showsetup{setupscreens} \def\setupscreens {\dodoubleargument\getparameters[\??rs]} % %D The most appropriate way to call for this feature is % %D using \type{\graybox}, which is defined as: % % \def\graybox{\getvalue{\@@rsmethod graybox}} % % %D We just introduced two pure \TEX\ methods for generating % %D rasters. However, it's far more efficient and comfortable in % %D terms of speed, memory usage and file size, to use a driver % %D supported method. % % \setvalue{\v!external graybox}{\setgraybox} % % %D For compatibility reasons we also define the original one: % % \setvalue{\v!postscript graybox}{\getvalue{\v!external graybox}} % % %D A quite valid way of letting drivers do the job, is giving % %D a solid rule a gray texture. %D We will communicate through module specific variables, current %D framed parameters and some reserved dimension registers. \newdimen \frameddimenwd \newdimen \frameddimenht \newdimen \frameddimendp %D We don't have to stick to a \TEX\ drawn rule, but %D also can use rounded or even fancier shapes, as we will %D see later on. \def\dofilledbox {\bgroup \doifelse{\framedparameter\c!backgroundcorner}\v!rectangular {\dofilledlinedbox} {\ifzeropt\dimexpr\framedparameter\c!backgroundradius\relax % just in case of .x\bodyfontsize \dofilledlinedbox \else \dofilledroundbox \fi}% \egroup} \def\dophantombox {\hphantom{\dofilledbox}} \def\dofilledlinedbox {\vrule\!!width\frameddimenwd\!!height\frameddimenht\!!depth\frameddimendp\relax}% \def\dostrokedroundbox {\doif{\framedparameter\c!frame}\v!on\dodostrokedroundbox} \def\dodostrokedroundbox {\bgroup \edef\ovalmod{\framedparameter\c!framecorner}% \doifelse\ovalmod\v!round{\let\ovalmod\!!zerocount}{\edef\ovalmod{\number\ovalmod}}% \edef\ovalwid{\the\frameddimenwd}% \edef\ovalhei{\the\frameddimenht}% \edef\ovaldep{\the\frameddimendp}% \edef\ovallin{\the\dimexpr\ruledlinewidth}% \edef\ovalrad{\the\dimexpr\framedparameter\c!frameradius}% \let\ovalstr\!!plusone \let\ovalfil\!!zerocount \forcecolorhack \doovalbox\ovalwid\ovalhei\ovaldep\ovallin\ovalrad\ovalstr\ovalfil\ovalmod \egroup} \def\dofilledroundbox {\bgroup \edef\ovalmod{\framedparameter\c!backgroundcorner}% \doifelse\ovalmod\v!round{\let\ovalmod\!!zerocount}{\edef\ovalmod{\number\ovalmod}}% \edef\ovalwid{\the\frameddimenwd}% \edef\ovalhei{\the\frameddimenht}% \edef\ovaldep{\the\frameddimendp}% \edef\ovallin{\the\dimexpr\ruledlinewidth\relax}% \edef\ovalrad{\the\dimexpr\framedparameter\c!backgroundradius\relax}% \let\ovalstr\!!zerocount \let\ovalfil\!!plusone \forcecolorhack \doovalbox\ovalwid\ovalhei\ovaldep\ovallin\ovalrad\ovalstr\ovalfil\ovalmod \egroup} % a lot of weird corners % % \startTEXpage % \dontleavehmode\framed % [corner=0,frame=on,framecolor=green, % background=color,backgroundcolor=yellow]{\tttf TEST \twodigits\recurselevel}% % \vskip1em % \dontleavehmode\dostepwiserecurse {1} {4}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green, % background=color,backgroundcolor=yellow]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse {5} {8}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green, % background=color,backgroundcolor=yellow]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse {1} {4}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse {5} {8}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse {9}{12}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse{13}{16}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse{17}{20}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse{21}{24}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \vskip1em % \dontleavehmode\dostepwiserecurse{25}{28}{1}{\framed % [corner=\recurselevel,frame=on,framecolor=green]{\tttf TEST \twodigits\recurselevel}% % \quad} % \stopTEXpage %D The oval box is drawn using a special macro, depending on %D the driver in use. \def\dograybox % avoid black rules when no gray {\doifelsenothing{\framedparameter\c!backgroundscreen} {\dophantombox} {\raster[\framedparameter\c!backgroundscreen]{\dofilledbox}}} %D It won't be a surprise that we not only provide gray boxes, %D but also colored ones. Here it is: \def\docolorbox {\hbox{\ifincolor \doifcolorelse{\framedparameter\c!backgroundcolor} {\localcolortrue\color[\framedparameter\c!backgroundcolor]{\dofilledbox}} {\dophantombox}% \else \dophantombox \fi}} %D \macros %D {defineoverlay, doifoverlayelse, overlayoffset, %D overlaywidth, overlayheight, overlaydepth, %D overlaycolor, overlaylinecolor, overlaylinewidth} %D %D Before we define the macro that actually takes card of the %D backgrounds, we introduce overlays. An overlay is something %D that contrary to its name lays {\em under} the text. An %D example of an overlay definition is: %D %D \startbuffer[tmp-1] %D \defineoverlay %D [fancy] %D [{\externalfigure %D [mp-cont.502] %D [width=\overlaywidth, %D height=\overlayheight]}] %D \stopbuffer %D %D \typebuffer[tmp-1] %D %D That for instance can be uses in: %D %D \startbuffer[tmp-2] %D \framed[backgroundachtergrond=fancy]{How Fancy!} %D \framed[backgroundachtergrond=fancy,frame=off]{Even More Fancy!} %D \stopbuffer %D %D and looks like: %D %D \startlinecorrection %D \vbox{\baselineskip24pt\getbuffer[tmp-1]\getbuffer[tmp-2]} %D \stoplinecorrection %D %D The formal definition is: %D %D \showsetup{defineoverlay} %D %D This macro's definition is a bit obscure, due the many %D non||used arguments and the two step call that enable the %D setting of the width, height and depth variables. %D Multiple backgrounds are possible and are specified as: %D %D \starttyping %D \framed[background={one,two,three}]{Three backgrounds!} %D \stoptyping %D %D Most drawing packages only know width and height. Therefore %D the dimensions have a slightly different meaning here: %D %D \startitemize[packed] %D \item \type{\overlaywidth }: width of the overlay %D \item \type{\overlayheight}: height plus depth of the overlay %D \item \type{\overlaydepth }: depth of the overlay %D \stopitemize %D %D The resulting box is lowered to the right depth. \def\overlaywidth {\the\hsize\space} % We preset the variables \def\overlayheight {\the\vsize\space} % to some reasonable default \let\overlaydepth \!!zeropoint % values. The attributes \let\overlayoffset \!!zeropoint % of the frame can be (are) \let\overlaycolor \empty % set somewhere else. \let\overlaylinewidth \!!zeropoint % \let\overlaylinecolor \empty % %D The next register is used to initialize overlays. \newtoks\everyoverlay %D An example of an initialization is the following (overlays %D can contain text and be executed under an regime where %D interlineskip is off). \appendtoks \oninterlineskip \to \everyoverlay \def\defineoverlay {\dodoubleargument\dodefineoverlay} \def\dodefineoverlay[#1][#2]% {\def\docommand##1{\setvalue{\??ov##1}{\executedefinedoverlay{##1}{#2}}}% \processcommalist[#1]\docommand} \prependtoks \hsize\overlaywidth \vsize\overlayheight \to\everyoverlay \long\def\executedefinedoverlay#1#2% {\bgroup \edef\overlaywidth {\the\frameddimenwd\space}% \edef\overlayheight{\the\dimexpr\frameddimenht+\frameddimendp\relax\space}% \edef\overlaydepth {\the\frameddimendp\space}% \edef\overlaycolor {\framedparameter\c!backgroundcolor}% %\edef\overlaycorner{\framedparameter\c!backgroundcorner}% %\edef\overlayradius{\framedparameter\c!backgroundradius}% \let\overlayoffset\backgroundoffset % we steal this one \setbox\scratchbox\hbox{\lower\overlaydepth\hbox{\the\everyoverlay#2}}% \setbox\scratchbox\hbox {\hskip-.5\dimexpr\wd\scratchbox-\overlaywidth \relax \raise-.5\dimexpr\ht\scratchbox-\frameddimenht\relax % not overlayheight ! \box\scratchbox}% \wd\scratchbox\overlaywidth \ht\scratchbox\overlayheight \dp\scratchbox\overlaydepth \startlayoutcomponent{o:#1}{overlay #1}% \box\scratchbox \stoplayoutcomponent \egroup} %D The empty case is: \let\executeoverlay\gobblesevenarguments %D For testing we provide: \def\doifoverlayelse#1% {\doifdefinedelse{\??ov#1}} %D We predefine two already familiar backgrounds: \setvalue{\??ov\v!screen}{\dograybox } \setvalue{\??ov\v!color }{\docolorbox} % %D After all these preparations, the background macro does no % %D bring to many surprises. One has to keep in mind that this % %D macro starts up a call chain, depending on the background % %D one needs: % %D % %D \startitemize[packed] % %D \item a raster, color or user defined shape % %D \item square or round corners % %D \item a \TEX\ or driver based method % %D \stopitemize % %D % %D The macro can be extended by adding commands to the token % %D list register \type {\everybackgroundbox}. For this % %D purpose, the name of the current background is available in % %D \type {\currentbackgound}. %D The content of the box will be (temporary) saved in a box. We %D also have an extra box for backgrounds. \newbox\framebox \newbox\extraframebox \newtoks\everybackgroundbox \let\currentbackground\empty % \def\dodobackgroundbox#1% also less passing, we can get rid of the old method % {\bgroup % \def\currentbackground{#1}% % \the\everybackgroundbox % \setbox\extraframebox\hbox % {\vbox{\moveleft\backgroundoffset\hbox{\executeifdefined{\??ov\currentbackground}\donothing}}}% % \wd\extraframebox\zeropoint % \backgroundwidth % \ht\extraframebox\backgroundheight % \dp\extraframebox\backgrounddepth % \box\extraframebox % \hskip-\backgroundwidth % \egroup} % \def\dodobackgroundbox#1% also less passing, we can get rid of the old method % {\bgroup % \def\currentbackground{#1}% % \ifcsname\??ov\currentbackground\endcsname % \the\everybackgroundbox % \setbox\extraframebox\hbox{\vbox{\moveleft\backgroundoffset\hbox{\csname\??ov\currentbackground\endcsname}}}% % \wd\extraframebox\zeropoint % \backgroundwidth % \ht\extraframebox\backgroundheight % \dp\extraframebox\backgrounddepth % \box\extraframebox % \hskip-\backgroundwidth % \fi % \egroup} \def\dodobackgroundbox {\bgroup \ifcsname\??ov\currentbackground\endcsname \the\everybackgroundbox \setbox\extraframebox\hbox{\vbox{\moveleft\backgroundoffset\hbox{\csname\??ov\currentbackground\endcsname}}}% \wd\extraframebox\zeropoint % \backgroundwidth \ht\extraframebox\backgroundheight \dp\extraframebox\backgrounddepth \box\extraframebox % \hskip-\backgroundwidth \fi \egroup} \def\dododobackgroundbox#1,#2% #2 gobbles spaces {\edef\currentbackground{#1}% \ifx\currentbackground\s!unknown\else \dodobackgroundbox\expandafter\dododobackgroundbox \fi#2} \let\backgroundoffset\!!zeropoint \let\backgrounddepth \!!zeropoint \def\backgroundwidth {\the\hsize} \def\backgroundheight{\the\vsize} % todo: also \def\theforegroundbox{#1} % \def\dobackgroundbox#1% % {\setbox\framebox\vbox % {\forgetall % \boxmaxdepth\maxdimen % \scratchdimen \framedparameter{#1}\relax % \frameddimenwd\dimexpr\wd\framebox+2\scratchdimen\relax % \frameddimenht\dimexpr\ht\framebox+ \scratchdimen\relax % \frameddimendp\dimexpr\dp\framebox+ \scratchdimen+\framedparameter\c!backgrounddepth\relax % \edef\backgroundoffset{\the\scratchdimen}% % \edef\backgroundwidth {\the\wd\framebox}% % \edef\backgroundheight{\the\ht\framebox}% % \edef\backgrounddepth {\the\dp\framebox}% % %\edef\foregroundbox{\box#1}% % \def\foregroundbox% fuzzy but needed hack, this \vss, otherwise % {\vbox to \backgroundheight{\vss\box\framebox\vss}}% vertical shift % \edef\component{\framedparameter\c!component}% % \hbox to \backgroundwidth % in case 'foreground' is used as overlay % {\ifx\component\empty % \rawprocesscommalist[\framedbackground]\dodobackgroundbox % \else % \startlayoutcomponent{b:\component}{\s!background\space\component}% % \rawprocesscommalist[\framedbackground]\dodobackgroundbox % \stoplayoutcomponent % \fi % \box\framebox\hss}}} \def\normalforegroundbox% fuzzy but needed hack, this \vss, otherwise {\vbox to \backgroundheight{\vss\box\framebox\vss}}% vertical shift \def\dobackgroundbox#1% {\setbox\framebox\vbox {\forgetall \boxmaxdepth\maxdimen \scratchdimen \framedparameter{#1}\relax \frameddimenwd\dimexpr\wd\framebox+2\scratchdimen\relax \frameddimenht\dimexpr\ht\framebox+ \scratchdimen\relax \frameddimendp\dimexpr\dp\framebox+ \scratchdimen+\framedparameter\c!backgrounddepth\relax \edef\backgroundoffset{\the\scratchdimen}% \edef\backgroundwidth {\the\wd\framebox}% \edef\backgroundheight{\the\ht\framebox}% \edef\backgrounddepth {\the\dp\framebox}% %\edef\foregroundbox{\box#1}% \edef\component{\framedparameter\c!component}% \let\foregroundbox\normalforegroundbox \hbox to \backgroundwidth % in case 'foreground' is used as overlay {\ifx\component\empty \expanded{\dododobackgroundbox\framedparameter\c!background},\s!unknown,\relax \else \startlayoutcomponent{b:\component}{background \component}% \expanded{\dododobackgroundbox\framedparameter\c!background},\s!unknown,\relax \stoplayoutcomponent \fi \box\framebox\hss}}} %D One can explictly insert the foreground box. For that %D purpose we introduce the overlay \type {foreground}. \defineoverlay[\v!foreground][\foregroundbox] %D We can specify overlays as a comma separated list of %D overlays, a sometimes handy feature. %D Besides backgrounds (overlays) we also need some macros to %D draw outlines (ruled borders). Again we have to deal with %D square and round corners. The first category can be handled %D by \TEX\ itself, the latter one depends on the driver. This %D macro also support a negative offset. \ifx\scratchoffset\undefined \newdimen\scratchoffset \fi \def\dooutlinebox % we needed to move the color command in order to apply attributes properly {\setbox\framebox\vbox % rules on top of box {\scratchoffset \framedparameter\c!frameoffset\relax \frameddimenwd\dimexpr\wd\framebox+2\scratchoffset\relax \frameddimenht\dimexpr\ht\framebox+ \scratchoffset\relax \frameddimendp\dimexpr\dp\framebox+ \scratchoffset+\framedparameter\c!framedepth\relax \ifdim\frameddimendp<\zeropoint \advance\frameddimenht \frameddimendp \scratchdimen-\frameddimendp \frameddimendp\zeropoint \else \scratchdimen\zeropoint \fi \setbox\extraframebox\hbox {\doifsomething{\framedparameter\c!framecolor}{\color[\framedparameter\c!framecolor]}{\dostrokedbox}}% \setbox\extraframebox\hbox {\raise\scratchdimen\vbox {\moveleft\scratchoffset \box\extraframebox}}% \wd\extraframebox\wd\framebox \ht\extraframebox\ht\framebox \dp\extraframebox\dp\framebox \hbox{\box\framebox\hskip-\wd\extraframebox\box\extraframebox}}} \def\dostrokedbox {\doifelse{\framedparameter\c!framecorner}\v!rectangular {\dostrokedlinedbox} {\ifzeropt\dimexpr\framedparameter\c!frameradius\relax % just in case of .x\bodyfontsize \dostrokedlinedbox \else \dostrokedroundbox \fi}} \def\dostrokedlinedbox {\setbox\scratchbox\null \wd\scratchbox\frameddimenwd \ht\scratchbox\frameddimenht \dp\scratchbox\frameddimendp \setbox\scratchbox\vbox \bgroup \csname t\@@frame@@\framedparameter\c!frame\framedparameter\c!topframe \endcsname \hbox \bgroup \csname l\@@frame@@\framedparameter\c!frame\framedparameter\c!leftframe \endcsname \box\scratchbox \csname r\@@frame@@\framedparameter\c!frame\framedparameter\c!rightframe \endcsname \egroup \csname b\@@frame@@\framedparameter\c!frame\framedparameter\c!bottomframe\endcsname \egroup \wd\scratchbox\frameddimenwd \ht\scratchbox\frameddimenht \dp\scratchbox\frameddimendp \box\scratchbox} \def\@@frame@@{@@frame@@} % \setvalue{t\@@frame@@\v!on \v!on}{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth} % \setvalue{t\@@frame@@\v!off\v!on}{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth} % \setvalue{t\@@frame@@\v!on }{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth} % \setvalue{b\@@frame@@\v!on \v!on}{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth} % \setvalue{b\@@frame@@\v!off\v!on}{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth} % \setvalue{b\@@frame@@\v!on }{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth} % \setvalue{l\@@frame@@\v!on \v!on}{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth} % \setvalue{l\@@frame@@\v!off\v!on}{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth} % \setvalue{l\@@frame@@\v!on }{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth} % \setvalue{r\@@frame@@\v!on \v!on}{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth} % \setvalue{r\@@frame@@\v!off\v!on}{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth} % \setvalue{r\@@frame@@\v!on }{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth} \def\@@frame@@trule{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth} \def\@@frame@@brule{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth} \def\@@frame@@rrule{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth} \def\@@frame@@lrule{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth} \letvalue{t\@@frame@@\v!on \v!on}\@@frame@@trule \letvalue{t\@@frame@@\v!off\v!on}\@@frame@@trule \letvalue{t\@@frame@@\v!on }\@@frame@@trule \letvalue{b\@@frame@@\v!on \v!on}\@@frame@@brule \letvalue{b\@@frame@@\v!off\v!on}\@@frame@@brule \letvalue{b\@@frame@@\v!on }\@@frame@@brule \letvalue{l\@@frame@@\v!on \v!on}\@@frame@@lrule \letvalue{l\@@frame@@\v!off\v!on}\@@frame@@lrule \letvalue{l\@@frame@@\v!on }\@@frame@@lrule \letvalue{r\@@frame@@\v!on \v!on}\@@frame@@rrule \letvalue{r\@@frame@@\v!off\v!on}\@@frame@@rrule \letvalue{r\@@frame@@\v!on }\@@frame@@rrule % no overlapping rules \def\@@frame@@trules{\hbox{\kern\ruledlinewidth\vrule\!!width\dimexpr\frameddimenwd-2\ruledlinewidth\relax\!!height\ruledlinewidth}\nointerlineskip\kern-\ruledlinewidth} \def\@@frame@@brules{\kern-\ruledlinewidth\nointerlineskip\hbox{\kern\ruledlinewidth\vrule\!!width\dimexpr\frameddimenwd-2\ruledlinewidth\relax\!!height\ruledlinewidth}} \def\@@frame@@rrules{\kern-\ruledlinewidth\vrule\!!height\dimexpr\frameddimenht-\ruledlinewidth\relax\!!depth-\ruledlinewidth\!!width\ruledlinewidth} \def\@@frame@@lrules{\vrule\!!height\dimexpr\frameddimenht-\ruledlinewidth\relax\!!depth-\ruledlinewidth\!!width\ruledlinewidth\kern-\ruledlinewidth} % small is relatively new \letvalue{t\@@frame@@\v!small\v!small}\@@frame@@trules \letvalue{t\@@frame@@\v!off \v!small}\@@frame@@trules \letvalue{t\@@frame@@\v!small }\@@frame@@trules \letvalue{b\@@frame@@\v!small\v!small}\@@frame@@brules \letvalue{b\@@frame@@\v!off \v!small}\@@frame@@brules \letvalue{b\@@frame@@\v!small }\@@frame@@brules \letvalue{l\@@frame@@\v!small\v!small}\@@frame@@lrules \letvalue{l\@@frame@@\v!off \v!small}\@@frame@@lrules \letvalue{l\@@frame@@\v!small }\@@frame@@lrules \letvalue{r\@@frame@@\v!small\v!small}\@@frame@@rrules \letvalue{r\@@frame@@\v!off \v!small}\@@frame@@rrules \letvalue{r\@@frame@@\v!small }\@@frame@@rrules %D I condidered using the low level support command %D \type{\ruledhbox}, but this would slow down processing by a %D factor~3. % \framed % [width=4cm,height=3cm,rulethickness=3mm, % frame=off,rightframe=on,leftframe=on,topframe=on,bottomframe=on] % {} % \framed % [width=4cm,height=3cm,rulethickness=3mm, % frame=off,rightframe=small,leftframe=small,topframe=small,bottomframe=small] % {} % \framed % [width=4cm,height=3cm,rulethickness=3mm, % frame=off,rightframe=small,leftframe=small,topframe=small,bottomframe=on] % {} %D The next few macros are probably the most misused ones in %D \CONTEXT. They deal with putting rules around boxes, provide %D backgrounds, offer alignment features, and some more. We %D start with defining some booleans. These give an impression %D of what we are going to take into account. % todo: chardefs \newif\ifboxhasoffset \newif\ifboxhaswidth \newif\ifboxhasheight \newif\ifboxhasformat \newif\ifboxhasstrut \newif\ifboxisoverlaid \newif\ifboxhasframe \newif\ifdelayedstrut %D We also need a few \DIMENSIONS: \newdimen\@@localoffset \newdimen\@@globalwidth %D \macros %D {framed, setupframed} %D %D Ruled boxes are typeset using \type{\framed}. This command %D is quite versatile and, although some users will probably %D seldom use it, one cannot overlook its features. %D %D \showsetup{setupframed} %D \showsetup{framed} %D %D This general macro is a special version of an even more %D general case, that can easily be linked into other macros %D that need some kind of framing. The local version is called %D with an extra parameter: the variable identifier. The reason %D for passing this identifier between brackets lays in the %D mere fact that this way we can use the optional argument %D grabbers. \def\defaultframeoffset{.25ex} \unexpanded\def\framed {\bgroup \copylocalframed[\??ol][\??oi]% == \presetlocalframed[\??ol]% \dodoubleempty\startlocalframed[\??ol]} \def\presetlocalframed[#1]% {\copylocalframed[#1][\??oi]} % \def\copylocalframed[#1]#2[#3]% % {\copyparameters[#1][#3]% % [\c!width,\c!height,\c!radius,\c!corner,\c!depth,\c!offset,% % \c!autowidth,\c!empty,\c!component,\c!orientation,\c!lines,% % \c!align,\c!bottom,\c!top,\c!strut,\c!autostrut,\c!location,\c!setups,\c!extras,% % \c!foregroundstyle,\c!foregroundcolor,% % \c!background,\c!backgroundoffset,\c!backgroundcorner,\c!backgroundradius,\c!backgrounddepth,\c!backgroundcolor,\c!backgroundscreen,% % \c!frame,\c!frameoffset,\c!framecorner,\c!frameradius,\c!framedepth,\c!framecolor,\c!rulethickness,% % \c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe]} % since framed is used all over the place, we have a (small) speedup) \def\copylocalframed[#1]#2[#3]% {\edef\copiedfrom{#1}\edef\copiedto{#3}% \docopyvalue\copiedfrom\copiedto\c!width \docopyvalue\copiedfrom\copiedto\c!height \docopyvalue\copiedfrom\copiedto\c!autowidth \docopyvalue\copiedfrom\copiedto\c!offset \docopyvalue\copiedfrom\copiedto\c!empty \docopyvalue\copiedfrom\copiedto\c!rulethickness \docopyvalue\copiedfrom\copiedto\c!radius \docopyvalue\copiedfrom\copiedto\c!corner \docopyvalue\copiedfrom\copiedto\c!depth \docopyvalue\copiedfrom\copiedto\c!frame \docopyvalue\copiedfrom\copiedto\c!framecolor \docopyvalue\copiedfrom\copiedto\c!foregroundstyle \docopyvalue\copiedfrom\copiedto\c!foregroundcolor \docopyvalue\copiedfrom\copiedto\c!lines \docopyvalue\copiedfrom\copiedto\c!orientation \docopyvalue\copiedfrom\copiedto\c!topframe \docopyvalue\copiedfrom\copiedto\c!bottomframe \docopyvalue\copiedfrom\copiedto\c!leftframe \docopyvalue\copiedfrom\copiedto\c!rightframe \docopyvalue\copiedfrom\copiedto\c!rulethickness \docopyvalue\copiedfrom\copiedto\c!frameoffset \docopyvalue\copiedfrom\copiedto\c!background \docopyvalue\copiedfrom\copiedto\c!component \docopyvalue\copiedfrom\copiedto\c!backgroundoffset \docopyvalue\copiedfrom\copiedto\c!backgroundscreen \docopyvalue\copiedfrom\copiedto\c!backgroundcolor \docopyvalue\copiedfrom\copiedto\c!align \docopyvalue\copiedfrom\copiedto\c!bottom \docopyvalue\copiedfrom\copiedto\c!top \docopyvalue\copiedfrom\copiedto\c!strut \docopyvalue\copiedfrom\copiedto\c!autostrut \docopyvalue\copiedfrom\copiedto\c!location \docopyvalue\copiedfrom\copiedto\c!component \docopyvalue\copiedfrom\copiedto\c!extras \docopyvalue\copiedfrom\copiedto\c!setups \docopyvalue\copiedfrom\copiedto\c!backgroundradius \docopyvalue\copiedfrom\copiedto\c!backgroundcorner \docopyvalue\copiedfrom\copiedto\c!backgrounddepth \docopyvalue\copiedfrom\copiedto\c!frameradius \docopyvalue\copiedfrom\copiedto\c!framecorner \docopyvalue\copiedfrom\copiedto\c!framedepth} \def\setupframed {\dodoubleempty\dosetupframed} \def\dosetupframed {\ifsecondargument \@EA\dodoublesetupframed \else \@EA\dosinglesetupframed \fi} \def\dosinglesetupframed[#1][#2]% {\getparameters[\??oi][#1]} \def\dodoublesetupframed[#1][#2]% {\bgroup \let\dodoubleempty\empty \def\doframed[##1]{\gdef\globalredefinedframed{\dodoubleempty\doframed[##1,#2]}}% \getvalue{#1}% \egroup \letvalue{#1}\globalredefinedframed} %D \startbuffer %D \setupframed [framecolor=yellow] \framed{A} %D \defineframed[myframed] [framecolor=blue] \myframed{B} %D \setupframed [myframed] [framecolor=red] \myframed{C} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \presetlocalframed[myframed] %D \setuplocalframed[myframed][width=4cm,height=2cm] %D \localframed[myframed][framecolor=green]{oeps} %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {ifinframed} %D %D The normal case first presets all parameters and next starts %D looking for the user supplied ones. The first step is %D omitted in the local case, because these are preset at %D declaration time and keep their values unless explictly %D changed. By presetting the variables everytime the normal %D command is called, we can use this command nested, without %D the unwanted side effect of inheritance. The boolean is %D used to speed up the color stack. \newif\ifinframed \def\localframed {\bgroup \dodoubleempty\startlocalframed} %D The next one is faster on multiple backgrounds per page. No %D dimensions can be set, only frames and backgrounds. \def\fastlocalframed[#1]#2[#3]#4% 3-4 {\bgroup \inframedtrue \edef\@@framed{#1}% % more bytes % \scratchdimen\framedparameter\c!frameoffset % \setevalue{\@@framed\c!frameoffset}{\the\scratchdimen}% % \doifnotvalue{\@@framed\c!backgroundoffset}\v!frame % {\scratchdimen\framedparameter\c!backgroundoffset % \setevalue{\@@framed\c!backgroundoffset}{\the\scratchdimen}}% % less bytes \@EA\freezedimenmacro\csname\@@framed\c!frameoffset\endcsname \doifnotvalue{\@@framed\c!backgroundoffset}\v!frame {\@EA\freezedimenmacro\csname\@@framed\c!backgroundoffset\endcsname}% % so far \setbox\framebox\hbox{#4}% \getparameters[\@@framed][#3]% no \expanded ! % no, better in calling macro % % \edef\doframedsetups{\framedparameter\c!setups}% % \ifx\doframedsetups\empty\else % \edef\doframedsetups{\noexpand\setups[\doframedsetups]}% % \fi \removeframedboxdepth \edef\framedforegroundcolor{\framedparameter\c!foregroundcolor}% \ifx\framedforegroundcolor\empty\else\docolorframebox\fi \edef\overlaylinecolor{\framedparameter\c!framecolor}% \def \overlaylinewidth{\the\ruledlinewidth}% no edef \edef\@@localframing {\framedparameter\c!frame}% \ifx\@@localframing\v!overlay \else \ifx\@@localframing\v!none \else \edef\framedrulethickness{\framedparameter\c!rulethickness}% \ifx\framedrulethickness\empty\else \ruledlinewidth\framedrulethickness\relax \ifinheritruledlinewidth\linewidth\ruledlinewidth\fi \fi \dooutlinebox % real or invisible frame \fi \fi \edef\framedbackground{\framedparameter\c!background}% \ifx\framedbackground\empty\else\dobackedbox\fi \restoreframedboxdepth \box\framebox \egroup} %D Before we go into details, we present (and implement) the %D main framing routine. I saw no real reason for splitting the %D next two macros into smaller pieces. The content will be %D collected in a horizontal or vertical box with fixed or free %D dimensions and specific settings concerning aligment and %D offsets. %D %D In the first few lines, we pre||expand the frame and %D background offsets. We do so, because the can be defined in %D terms of the main offset. However, see for instance page %D backgrounds, when \type {#2} sets the offset to \type %D {overlay}, both offsets become invalid. %D %D Because it is used so often the he next macro is (and %D looks) rather optimized. \let\postprocessframebox\relax \let\@@framed\s!unknown \def\framedparameter#1% {\csname\@@framed#1\endcsname} \newdimen\!!framedwidth \newdimen\!!framedheight \def\startlocalframed[#1][#2]% {\bgroup \inframedtrue \edef\@@framed{#1}% % this piece of pre expansion is needed (sometimes used in frameoffset) % \doifvaluesomething{\@@framed\c!rulethickness} % obsolete % {\ruledlinewidth\getvalue{\@@framed\c!rulethickness}}% obsolete % this piece of pre expansion is needed (sometimes used circular) \setevalue{\@@framed\c!frameoffset}{\the\dimexpr\framedparameter\c!frameoffset\relax}% \doifnotvalue{\@@framed\c!backgroundoffset}\v!frame {\setevalue{\@@framed\c!backgroundoffset}{\the\dimexpr\framedparameter\c!backgroundoffset\relax}}% % to prevent deadlock in case of self refering \ifsecondargument % faster \getparameters[\@@framed][#2]% here ! \fi % new, experimental dirty hook \framedparameter\c!extras % to get the right spacing \doifvaluesomething{\@@framed\c!foregroundstyle} {\@EA\doconvertfont\csname\@@framed\c!foregroundstyle\endcsname\empty}% % beware, both the frame and background offset can be overruled % \edef\doframedsetups{\framedparameter\c!setups}% \ifx\doframedsetups\empty\else \edef\doframedsetups{\noexpand\setups[\doframedsetups]}% \fi % the next macros are visible \edef\localoffset{\framedparameter\c!offset}% \edef\localwidth {\framedparameter\c!width}% \edef\localheight{\framedparameter\c!height}% \edef\localformat{\framedparameter\c!align}% \edef\localstrut {\framedparameter\c!strut}% % these are not \edef\@@localautostrut {\framedparameter\c!autostrut}% \edef\@@localframing {\framedparameter\c!frame}% \edef\@@locallocation {\framedparameter\c!location}% \edef\@@localorientation{\framedparameter\c!orientation}% % \edef\@@localautowidth {\framedparameter\c!autowidth}% % \ifx\@@localframing\v!overlay % no frame, no offset, no framewidth \boxhasframefalse \let\localoffset\v!overlay \else\ifx\@@localframing\v!none % no frame, no framewidth \boxhasframefalse \else \boxhasframetrue \fi\fi \ifboxhasframe \edef\framedrulethickness{\framedparameter\c!rulethickness}% \ifx\framedrulethickness\empty\else \ruledlinewidth\framedrulethickness\relax \ifinheritruledlinewidth\linewidth\ruledlinewidth\fi \fi \else \ruledlinewidth\zeropoint \fi \ifx\localformat\empty \boxhasformatfalse \else \boxhasformattrue \dosetraggedcommand\localformat \edef\dobeforeframedbox{\raggedtopcommand\framedparameter\c!top}% \edef\doafterframedbox {\framedparameter\c!bottom\raggedbottomcommand}% \fi \ifx\localoffset\v!none \boxhasoffsetfalse \boxhasstrutfalse \boxisoverlaidfalse \@@localoffset\ruledlinewidth \else\ifx\localoffset\v!overlay % \ifx\@@localframing\v!no \boxhasframefalse \fi % test first \boxhasoffsetfalse \boxhasstrutfalse \boxisoverlaidtrue \@@localoffset\zeropoint \else \boxhasoffsettrue \boxhasstruttrue \boxisoverlaidfalse \ifx\localoffset\v!default % new per 2-6-2000 \let\localoffset\defaultframeoffset \letvalue{\@@framed\c!offset}\defaultframeoffset \else \let\defaultframeoffset\localoffset \fi \@@localoffset\dimexpr\localoffset+\ruledlinewidth\relax \fi\fi \!!framedheight\zeropoint \!!framedwidth \zeropoint \ifx\localwidth\v!fit \ifboxhasformat \boxhaswidthtrue \!!framedwidth\hsize \else \boxhaswidthfalse \fi \else\ifx\localwidth\v!fixed % equals \v!fit but no shapebox \ifboxhasformat \boxhaswidthtrue \!!framedwidth\hsize \else \boxhaswidthfalse \fi \else\ifx\localwidth\v!broad \boxhaswidthtrue \!!framedwidth\hsize \else\ifx\localwidth\v!local \boxhaswidthtrue \setlocalhsize \!!framedwidth\localhsize \else \boxhaswidthtrue \!!framedwidth\localwidth \fi\fi\fi\fi \ifx\localheight\v!fit \boxhasheightfalse % no longer: \boxhasstrutfalse \else\ifx\localheight\v!broad \boxhasheightfalse \else \boxhasheighttrue \!!framedheight\localheight \fi\fi \ifboxhasheight % obey user set height, also downward compatible \else \doifvaluesomething{\@@framed\c!lines} {\ifcase\framedparameter\c!lines\else \!!framedheight\framedparameter\c!lines\lineheight \edef\localheight{\the\!!framedheight}% \boxhasheighttrue \fi}% \fi % this is now an option: width=local % % \ifdim\!!framedwidth=\hsize % \parindent\zeropoint % \setlocalhsize % \!!framedwidth\localhsize % \fi % i.e. disable (colsetbackgroundproblemintechniek) \advance\!!framedwidth -2\@@localoffset \advance\!!framedheight -2\@@localoffset \ifx\localstrut\v!no \boxhasstrutfalse \else\ifx\localstrut\v!global \setstrut \else\ifx\localstrut\v!local \setfontstrut \else \setstrut \fi\fi\fi \ifboxhasstrut \let\localbegstrut\begstrut \let\localendstrut\endstrut \let\localstrut \strut \else \let\localbegstrut\pseudobegstrut % was: \relax \let\localendstrut\pseudoendstrut % was: \relax \let\localstrut \pseudostrut % was: \relax %\ifboxhasheight\ifdim\!!framedheight<\strutht % saveguard % \let\localbegstrut\relax % but not that % \let\localstrut \relax % save after all %\fi\fi \fi \ifx\@@localautostrut\v!yes \let\delayedbegstrut\relax \let\delayedendstrut\relax \let\delayedstrut \relax \else \let\delayedbegstrut\localbegstrut \let\delayedendstrut\localendstrut \let\delayedstrut \localstrut \let\localbegstrut \relax \let\localendstrut \relax \let\localstrut \relax \fi \ifboxhasheight \let\\\vboxednewline \ifboxhaswidth \let\hairline\vboxedhairline \ifboxhasformat \let\next\doformatboxSomeFormat \else \let\next\doformatboxNoFormat \fi \else \let\hairline\hboxedhairline \ifboxhasformat \let\next\doformatboxHeight \else \let\next\doformatboxVSize \fi \fi \else \ifboxhaswidth \ifboxhasformat \let\hairline\vboxedhairline \let\\\vboxednewline \let\next\doformatboxWidth \else \let\hairline\hboxedhairline \let\\\hboxednewline \let\next\doformatboxHSize \fi \else \let\hairline\hboxedhairline \let\\\hboxednewline \let\next\doformatboxNoSize \fi \fi \edef\framedwidth % a new feature, visible for user {\ifdim\!!framedwidth >\zeropoint\the\!!framedwidth \else\zeropoint\fi}% \edef\framedheight% a new feature, visible for user {\ifdim\!!framedheight>\zeropoint\the\!!framedheight\else\zeropoint\fi}% % we need to register the (outer) color \startregistercolor[\framedparameter\c!foregroundcolor]% % first alternative %\def\dowithframedbox% % {\let\postprocessframebox\relax %new % \aftergroup\stoplocalframed}% % \afterassignment\dowithframedbox % \setbox\framebox=\next} % second alternative %\dowithnextbox % {\setbox\framebox\flushnextbox % \let\postprocessframebox\relax %new % \stoplocalframed} % \next} \@@startframedorientation \afterassignment\dodowithframebox \setbox\framebox\next} \def\dowithframebox {% moved : \let\postprocessframebox\relax \stoplocalframed} \def\dodowithframebox {\aftergroup\dowithframebox} \let\doafterframedbox \relax \let\dobeforeframedbox\relax %D Carefull analysis of this macro will learn us that not all %D branches in the last conditionals can be encountered, that %D is, some assignments to \type{\next} will never occur. %D Nevertheless we implement the whole scheme, if not for %D future extensions. %D \macros %D {ifreshapeframebox} %D %D The last few lines tell what to do after the content of the %D box is collected and passed to the next macro. In the case %D of a fixed width and centered alignment, the content is %D evaluated and used to determine the most natural width. The %D rest of the code deals with backgrounds and frames. \newif\ifreshapeframebox \reshapeframeboxtrue %D Beware: setting \type {top} and \type {bottom} to nothing, may %D result in a frame that is larger that the given height! try: %D %D \starttyping %D \framed %D [height=3cm,top=,bottom=,offset=overlay] %D {\strut test \shapefill \strut test} %D \stoptyping %D %D This is intended behaviour and not a bug! One can always set %D %D \starttyping %D ...,bottom=\kern0pt,... %D \stoptyping \def\stoplocalframed {\dontshowcomposition \@@stopframedorientation % hm, wrong place ! should rotate the result (after reshape) \stopregistercolor \handleframedlocator\c!before\@@locallocation \ifboxhasformat \ifx\@@localautowidth\v!force \ifreshapeframebox\doreshapeframedbox\fi \boxhaswidthfalse \else \ifx\localwidth\v!fit \ifx\@@localautowidth\v!yes \ifreshapeframebox\doreshapeframedbox\fi \fi \boxhaswidthfalse \else\ifx\localwidth\v!fixed \boxhaswidthfalse \else \resetshapeframebox \fi\fi \fi \else \resetshapeframebox \fi \ifboxhaswidth \wd\framebox\!!framedwidth \fi \ifboxhasheight \ht\framebox\!!framedheight \fi \doifvalue{\@@framed\c!empty}\v!yes {\setbox\scratchbox\null \wd\scratchbox\wd\framebox \ht\scratchbox\ht\framebox \dp\scratchbox\dp\framebox \setbox\framebox\box\scratchbox}% \edef\framedforegroundcolor{\framedparameter\c!foregroundcolor}% \ifx\framedforegroundcolor\empty\else\docolorframebox\fi \ifboxhasoffset \dooffsetframebox \fi \ifboxisoverlaid \else \dolocateframebox \fi \ifx\postprocessframebox\relax \else \let\next\postprocessframebox \let\postprocessframebox\relax % prevent nesting \next\framebox \fi \edef\overlaylinecolor{\framedparameter\c!framecolor}% \edef\overlaylinewidth{\the\ruledlinewidth}% \@@... \ifboxhasframe % real or invisible frame \dooutlinebox \fi \edef\framedbackground{\framedparameter\c!background}% \ifx\framedbackground\empty\else\dobackedbox\fi \handleframedlocator\c!after\@@locallocation \box\framebox \egroup \egroup} \def\installframedlocator#1#2#3% {\setvalue{\??ol:\c!location:\c!before:#1}{#2}% \setvalue{\??ol:\c!location:\c!after :#1}{#3}} \def\handleframedlocator#1#2% {\getvalue{\??ol:\c!location:#1:#2}} \def\doprelocframedbox#1% {\scratchdimen\dimexpr#1+\ruledlinewidth\relax \ifboxhasoffset \advance\scratchdimen \framedparameter\c!offset \fi \scratchskip\dimexpr\ht\framebox-\scratchdimen\relax} % \ruledhbox % {A % \framed[width=2cm,align=middle,location=hanging]{location\\equals\\hanging} % \framed[width=2cm,align=middle,location=depth] {location\\equals\\depth} % \framed[width=2cm,align=middle,location=height] {location\\equals\\height} % B} % \vskip2cm % \ruledhbox % {A % \framed[width=2cm,align=middle,location=low] {location\\equals\\low} % \framed[width=2cm,align=middle,location=line] {location\\equals\\line} % \framed[width=2cm,align=middle,location=high] {location\\equals\\high} % B} % \vskip2cm % \ruledhbox % {A % \framed[width=2cm,align=middle,location=top] {location\\equals\\top} % \framed[width=2cm,align=middle,location=bottom] {location\\equals\\bottom} % \framed[width=2cm,align=middle,location=lohi] {location\\equals\\lohi} % \framed[width=2cm,align=middle,location=middle] {location\\equals\\middle} % B} \installframedlocator \v!hanging % best with strut=no {} {\dp\framebox\ht\framebox \ht\framebox\zeropoint} \installframedlocator \v!depth {} {\ht\framebox\dimexpr\ht\framebox-\strutdp\relax \dp\framebox\strutdp \box\framebox} \installframedlocator \v!height {} {\dp\framebox\dimexpr\ht\framebox-\strutht\relax \ht\framebox\strutht \box\framebox} \installframedlocator \v!high {} {\doprelocframedbox\strutht \setbox\framebox\hbox{\lower\scratchskip\box\framebox}% \ht\framebox\strutht \dp\framebox\strutdp \hbox{\box\framebox}} \installframedlocator \v!line {} {\setbox\framebox\hbox{\lower.5\ht\framebox\box\framebox}% \ht\framebox.5\lineheight \dp\framebox.5\lineheight \hbox{\box\framebox}} \installframedlocator \v!low {} {\doprelocframedbox\strutdp \setbox\framebox\hbox{\lower\scratchdimen\box\framebox}% \ht\framebox\strutht \dp\framebox\strutdp \box\framebox} \installframedlocator \v!top {} {\doprelocframedbox\strutht \setbox\framebox\hbox{\lower\scratchskip\box\framebox}% \ht\framebox\scratchdimen \dp\framebox\scratchskip \hbox{\box\framebox}} \installframedlocator \v!middle {} {\scratchdimen.5\ht\framebox \setbox\framebox\hbox{\lower\scratchdimen\box\framebox}% \ht\framebox\scratchdimen \dp\framebox\scratchdimen \hbox{\box\framebox}} \installframedlocator \v!lohi {\handleframedlocator\c!before\v!middle} {\handleframedlocator\c!after \v!middle} \installframedlocator \v!bottom {} {\doprelocframedbox\strutdp \setbox\framebox\hbox{\lower\scratchdimen\box\framebox}% \ht\framebox\scratchskip \dp\framebox\scratchdimen \hbox{\box\framebox}} \installframedlocator \v!keep % retains height/depth {\removeframedboxdepth} {\restoreframedboxdepth} % also used in fastlocalframed \newdimen\originalframedwd \newdimen\originalframedht \newdimen\originalframeddp \def\removeframedboxdepth {\originalframedwd\wd\framebox \originalframedht\ht\framebox \originalframeddp\dp\framebox \ifzeropt\originalframeddp\else\setbox\framebox\hbox{\raise\originalframeddp\box\framebox}\fi \wd\framebox\originalframedwd \ht\framebox\dimexpr\originalframedht+\originalframeddp\relax \dp\framebox\zeropoint} \def\restoreframedboxdepth {\ifzeropt\originalframeddp\else\setbox\framebox\hbox{\lower\originalframeddp\box\framebox}\fi \wd\framebox\originalframedwd \ht\framebox\originalframedht \dp\framebox\originalframeddp} % \let\@@startframedorientation\relax % \let\@@stopframedorientation \relax % \framed[width=12cm,height=3cm,orientation=0]{\input ward\relax} % \framed[width=12cm,height=3cm,orientation=90]{\input ward\relax} % \framed[width=12cm,height=3cm,orientation=180]{\input ward\relax} % \framed[width=12cm,height=3cm,orientation=270]{\input ward\relax} % \framed[width=12cm,height=3cm,orientation=-90]{\input ward\relax} % \framed[width=12cm,height=3cm,orientation=-180]{\input ward\relax} % \framed[width=12cm,height=3cm,orientation=-270]{\input ward\relax} \def\@@startframedorientation {\let\@@stopframedorientation \relax \ifx\@@localorientation\empty\else \ifcase\@@localorientation\else \scratchcounter\@@localorientation \divide\scratchcounter\plustwo \ifodd\scratchcounter \swapmacros\framedwidth \framedheight \swapmacros\localwidth \localheight \swapdimens\!!framedheight\!!framedwidth \def\@@stopframedorientation{\@@dostopframedorientation\plusone}% \else \def\@@stopframedorientation{\@@dostopframedorientation\zerocount}% \fi \fi \fi} \def\@@dostopframedorientation#1% {\ifcase#1\else \swapmacros\framedwidth \framedheight \swapmacros\localwidth \localheight \swapdimens\!!framedheight\!!framedwidth \fi \setbox\framebox\hbox{\dorotatebox\@@localorientation\hbox{\box\framebox}}} %D The last conditional takes care of the special situation of %D in||line \inframed[height=3cm]{framed} boxes. Such boxes have %D to be \inframed{aligned} with the running text. \def\doinframed[#1]% we could omit #1] but readibility ... {\framed[\c!location=\v!low,#1]} \unexpanded\def\inframed {\dosingleempty\doinframed} %D When we set \type{empty} to \type{yes}, we get %D ourselves a frame and/or background, but no content, so %D actually we have a sort of phantom framed box. %D Because color marks and specials can interfere with %D spacing, we provide a way to specify a foregroundcolor. \def\docolorframebox {\doifvaluesomething{\@@framed\c!foregroundcolor} {\doifcolorelse{\framedparameter\c!foregroundcolor} {\setbox\framebox\hbox {\localcolortrue \color[\framedparameter\c!foregroundcolor]{\box\framebox}}} {}}} %D \macros %D {mframed, minframed} %D %D When Tobias asked how to frame mathematical elements in %D formulas, Taco's posted the next macro: %D %D \starttyping %D \def\mframed#1% %D {\relax %D \ifmmode %D \vcenter{\hbox{\framed{$\ifinner\else\displaystyle\fi#1$}}}% %D \else %D \framed{$#1$}% %D \fi} %D \stoptyping %D %D Because \type {\ifinner} does not (always) reports what %D one would expect, we move the test to the outer level. We %D also want to pass arguments, %D %D \starttyping %D \def\mframed% %D {\dosingleempty\domframed} %D %D \def\domframed[#1]#2% % tzt \dowithnextmathbox ? %D {\relax %D \ifmmode %D \ifinner %D \inframed[#1]{$#2$}% %D \else %D \vcenter{\hbox{\framed[#1]{$\displaystyle#2$}}}% %D \fi %D \else %D \inframed[#1]{$#2$}% %D \fi} %D \stoptyping %D %D Still better is the next alternative, if only because it %D takes care of setting the super- and subscripts styles \ifx\restoremathstyle\undefined \let\restoremathstyle\relax \fi \def\domframed[#1][#2]#3% {\begingroup \ifmmode \ifinner \let\mframedstyle\restoremathstyle \else \let\mframedstyle\displaystyle \fi \else \let\mframedstyle\restoremathstyle \fi #1\ifdone \def\normalstrut{$\mframedstyle\vphantom($}% \framed [\c!frameoffset=\@@oioffset,\c!offset=\v!overlay,#2] {$\mframedstyle#3$}% \else \inframed [#2] {$\mframedstyle#3$}% \fi \endgroup} \def\mframed {\dodoubleempty\domframed[\donetrue]} \def\inmframed {\dodoubleempty\domframed[\donefalse]} %D So instead of the rather versatile \type {\framed}, we ue %D the \type {\mframed}. %D %D \startbuffer %D \startformula %D x \times \mframed{y} \times y^{z_z} %D x \times \inmframed{y} \times y^{z_z} %D \stopformula %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D However, we got into troubles when we want to nest sub- and %D superscripts, like in %D %D \startbuffer %D \startformula %D x \times \mframed{y} \times y^{\mframed{z}_{\mframed{z}}} %D \stopformula %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D Therefore, we can best use \type {\super} and \type {\suber} %D instead of \type {^} and \type {_}. Both commands take care %D of proper font switching. %D %D \startbuffer %D \startformula %D x \times \mframed{y} \times y\super{\mframed{z}\suber{\mframed{z}}} %D \stopformula %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D As usual, one can specify in what way the text should be %D framed. One should be aware of the fact that, inorder to %D preserve the proper spacing, the \type {offset} is set to %D \type {overlay} and \type {frameoffset} is used used %D instead. %D %D \startbuffer %D \startformula %D x \times y\super{\mframed[framecolor=red]{z}\suber{z}} %D \stopformula %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D For inline use, we also provide the \type {\inmframed} %D alternative: we want $x \times \inmframed{y}$ in inline %D math, right? %D This previous framing macros needs a lot of alternatives for %D putting rules around boxes, inserting offsets and aligning %D text. Each step is handled by separate macros. \def\dowidenframebox#1% {\setbox\framebox\vbox {\kern#1\hbox{\kern#1\box\framebox\kern#1}\kern#1}} \def\dooffsetframebox{\dowidenframebox\localoffset} \def\dolocateframebox{\dowidenframebox\ruledlinewidth} %D Let's hope that the next few examples show us enough of %D what needs to be done by the auxiliary macros. %D %D \startbuffer %D \framed[height=1cm,offset=.5cm] {rule based learning} %D \framed[height=1cm,offset=0cm] {rule based learning} %D \framed[height=1cm,offset=none] {rule based learning} %D \framed[height=1cm,offset=overlay]{rule based learning} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \hbox{\getbuffer} %D \stoplinecorrection %D %D \startbuffer %D \framed[offset=.5cm] {rule based learning} %D \framed[offset=0cm] {rule based learning} %D \framed[offset=none] {rule based learning} %D \framed[offset=overlay]{rule based learning} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \hbox{\getbuffer} %D \stoplinecorrection %D %D \startbuffer %D \framed[strut=nee,offset=.5cm] {rule based learning} %D \framed[strut=nee,offset=0cm] {rule based learning} %D \framed[strut=nee,offset=none] {rule based learning} %D \framed[strut=nee,offset=overlay]{rule based learning} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \hbox{\getbuffer} %D \stoplinecorrection %D %D \startbuffer %D \framed[width=3cm,align=left] {rule\\based\\learning} %D \framed[width=3cm,align=middle] {rule\\based\\learning} %D \framed[width=3cm,align=right] {rule\\based\\learning} %D \framed[width=fit,align=middle] {rule\\based\\learning} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \hbox{\dontcomplain\getbuffer} %D \stoplinecorrection %D %D So now we're ready for the complicated stuff. We distinguish %D between borders with straight lines and those with round %D corners. When using the first alternative it is possible to %D turn off one or more lines. More fancy shapes are also %D possible by specifying dedicated backgrounds. Turning lines %D on and off is implemented as efficient as possible and as a %D result is interface language dependant. This next %D implementation evolved from simpler ones. It puts for %D instance the rules on top of the content and provides %D additional offset capabilities. The lot of calls to other %D macros makes this mechanism not that easy to comprehend. %D Getting the backgrounds right takes less code. Again we %D have to take care of additional offsets. \def\dobackedbox {\doifelsevalue{\@@framed\c!backgroundoffset}\v!frame % new {\dobackgroundbox\c!frameoffset} {\dobackgroundbox\c!backgroundoffset}} %D We handle left, right or middle alignment as well as fixed %D or free widths and heights. Each combination gets its own %D macro. %D The following code handles one-liners: \type{align={line,flushright}}. %D Beware, since we entered a group and either or not grab the next %D bgroup token, we need to finish the group in the oneliner mode. \ifx\raggedoneliner\undefined \chardef\raggedoneliner\zerocount \fi \def\doformatonelinerbox % beware: assumes explicit preceding bgroup {\ifcase\raggedoneliner \expandafter\nodoformatonelinerbox \else \expandafter\dodoformatonelinerbox \fi} \def\dodoformatonelinerbox {\dowithnextboxcontent {\ignorespaces} {\hbox to \hsize {\ifcase\raggedstatus\or\hss\or\hss\fi \unhbox\nextbox \removeunwantedspaces \ifcase\raggedstatus\or \or\hss\or\hss\fi}% \egroup} \hbox} \def\nodoformatonelinerbox % grabs { {\let\next=} %D The handlers: \def\doformatboxSomeFormat {\vbox to \!!framedheight \bgroup \let\postprocessframebox\relax \forgetall \oninterlineskip \hsize\!!framedwidth \vsize\!!framedheight \doframedsetups \raggedcommand \dobeforeframedbox \bgroup \localbegstrut \aftergroup\localendstrut \aftergroup\doafterframedbox \aftergroup\egroup \doformatonelinerbox} \def\doformatboxNoFormat {\vbox to \!!framedheight \bgroup \let\postprocessframebox\relax \forgetall \oninterlineskip \hsize\!!framedwidth \vsize\!!framedheight \doframedsetups \raggedcenter \vss \bgroup \localbegstrut \aftergroup\localendstrut \aftergroup\vss \aftergroup\egroup \doformatonelinerbox} \def\doformatboxHeight {\vbox to \!!framedheight \bgroup \let\postprocessframebox\relax \forgetall \oninterlineskip \doframedsetups \raggedcommand \vss \bgroup \aftergroup\localendstrut \aftergroup\vss \aftergroup\egroup \localbegstrut \doformatonelinerbox} \def\doformatboxWidth {\vbox \bgroup \let\postprocessframebox\relax \forgetall \oninterlineskip \hsize\!!framedwidth \doframedsetups \raggedcommand \dobeforeframedbox \bgroup \localbegstrut \aftergroup\localendstrut \aftergroup\doafterframedbox \aftergroup\egroup \doformatonelinerbox} \def\doformatboxVSize {\vbox to \!!framedheight \bgroup \let\postprocessframebox\relax \forgetall \vsize\!!framedheight \doframedsetups \vss \bgroup \aftergroup\vss \aftergroup\egroup \hbox \bgroup \aftergroup\egroup \localstrut \doformatonelinerbox} \def\doformatboxHSize {\hbox to \!!framedwidth \bgroup \let\postprocessframebox\relax \forgetall \doframedsetups \hss \localstrut \bgroup \aftergroup\hss \aftergroup\egroup \doformatonelinerbox} \def\doformatboxNoSize {\hbox \bgroup \let\postprocessframebox\relax \doframedsetups \localstrut \doformatonelinerbox} \let\doframedsetups\relax %D On the next page we show some examples of how these macros %D come into action. The examples show us how %D \type {fit}, \type {broad} dimensions influence the %D formatting. Watch the visualized struts. \footnote {Here we %D used \type {\showstruts}.} %D %D \startpostponing %D \bgroup %D \showstruts %D \dontcomplain %D \startlinecorrection %D \halign{#\enskip&#\enskip&#\enskip&#\enskip&#\enskip&#\cr %D \framed[width=.2\hsize, height=.2\hsize, align=] {a\par b\par c}& %D \framed[width=.2\hsize, height=broad, align=] {a\par b\par c}& %D \framed[width=.2\hsize, height=fit, align=] {a\par b\par c}& %D \framed[width=fit, height=.2\hsize, align=] {a\par b\par c}& %D \framed[width=fit, height=broad, align=] {a\par b\par c}& %D \framed[width=fit, height=fit, align=] {a\par b\par c}\cr %D \noalign{\vskip1em} %D \framed[width=.2\hsize, height=.2\hsize, align=yes] {a\par b\par c}& %D \framed[width=.2\hsize, height=broad, align=yes] {a\par b\par c}& %D \framed[width=.2\hsize, height=fit, align=yes] {a\par b\par c}& %D \framed[width=fit, height=.2\hsize, align=yes] {a\par b\par c}& %D \framed[width=fit, height=broad, align=yes] {a\par b\par c}& %D \framed[width=fit, height=fit, align=yes] {a\par b\par c}\cr %D \noalign{\vskip1em} %D \framed[width=.2\hsize, height=.2\hsize, align=right] {a\par b\par c}& %D \framed[width=.2\hsize, height=broad, align=right] {a\par b\par c}& %D \framed[width=.2\hsize, height=fit, align=right] {a\par b\par c}& %D \framed[width=fit, height=.2\hsize, align=right] {a\par b\par c}& %D \framed[width=fit, height=broad, align=right] {a\par b\par c}& %D \framed[width=fit, height=fit, align=right] {a\par b\par c}\cr %D \noalign{\vskip1em} %D \framed[width=.2\hsize, height=.2\hsize, align=left] {a\par b\par c}& %D \framed[width=.2\hsize, height=broad, align=left] {a\par b\par c}& %D \framed[width=.2\hsize, height=fit, align=left] {a\par b\par c}& %D \framed[width=fit, height=.2\hsize, align=left] {a\par b\par c}& %D \framed[width=fit, height=broad, align=left] {a\par b\par c}& %D \framed[width=fit, height=fit, align=left] {a\par b\par c}\cr %D \noalign{\vskip1em} %D \framed[width=.2\hsize, height=.2\hsize, align=middle] {a\par b\par c}& %D \framed[width=.2\hsize, height=broad, align=middle] {a\par b\par c}& %D \framed[width=.2\hsize, height=fit, align=middle] {a\par b\par c}& %D \framed[width=fit, height=.2\hsize, align=middle] {a\par b\par c}& %D \framed[width=fit, height=broad, align=middle] {a\par b\par c}& %D \framed[width=fit, height=fit, align=middle] {a\par b\par c}\cr} %D \stoplinecorrection %D \blank[2*big] %D \egroup %D \stoppostponing %D \macros %D {framednoflines, framedlastlength} %D %D It is possible to let the frame macro calculate the width %D of a centered box automatically (\type {fit}). When %D doing so, we need to reshape the box: % The next implementation is frozen! It preserves the depth, % otherwise we get problems with framed display math and auto % width. \newcount\framednoflines \newdimen\framedlastlength \def\resetshapeframebox {\framednoflines \zerocount \framedlastlength\zeropoint} \chardef\reshapeframeboxmethod\plusone % 0=no flush, 1=old method 2=no depth messing \def\shapeboxstrut % put this in front if needed ! {\vrule\!!width\zeropoint\!!height\ht\shapebox\!!depth\dp\shapebox} \let\framedboxwidth \!!zeropoint \let\framedboxheight\!!zeropoint \let\framedboxdepth \!!zeropoint \def\doreshapeframedbox % frozen, that is ... \shapeboxstrut added {\ifvbox\framebox \beginofshapebox \unvcopy\framebox \endofshapebox \global\@@globalwidth\zeropoint \edef\framedboxwidth {\the\wd\framebox}% \edef\framedboxheight{\the\ht\framebox}% \edef\framedboxdepth {\the\dp\framebox}% \resetshapeframebox \reshapebox {\setbox0\hbox {\strut\ifhbox\shapebox\shapeboxstrut\unhbox\else\box\fi\shapebox}% \global\advance\framednoflines \plusone \ifdim\framedlastlength>\zeropoint\else \global\framedlastlength\wd0 \fi \ifdim\wd0>\@@globalwidth \global\@@globalwidth\wd0 \fi}% \ifreshapingfailed % no need for anothr pass or finalizer \else \dosetraggedcommand\localformat \raggedcommand \ifboxhasheight \setbox\framebox\vbox to \localheight {\hsize\@@globalwidth \reshapebox{\hbox to \hsize{\ifhbox\shapebox\shapeboxstrut\unhbox\else\box\fi\shapebox}}% \dobeforeframedbox \innerflushshapebox \doafterframedbox}% \else \setbox\framebox\vbox to \framedboxheight % \ht\framebox {\hsize\@@globalwidth \reshapebox{\hbox to \hsize{\ifhbox\shapebox\shapeboxstrut\unhbox\else\box\fi\shapebox}}% \ifcase\reshapeframeboxmethod \or \innerflushshapebox \or \innerflushshapebox \fi}% \ifcase\reshapeframeboxmethod \or \dp\framebox\framedboxdepth % \strutdp otherwise problem with math \fi \fi \ifdim\framedlastlength=\zeropoint\global\framedlastlength\wd\framebox\fi \ifcase\framednoflines\global\framednoflines\plusone\fi \fi \fi} %D The two variables \type {\framednoflines} and \type %D {\framedlastlength} can be used in a second pass to %D optimized framed material. % torture test / strange case (much depth) / method 2 needed % % \startTEXpage[frame=on] % \startformula \startalign \NC A \NC B \NR \intertext{test} \NC C \NC D \NR \stopalign \stopformula % test outside formula % \startformula \startalign \NC A \NC B \NR \intertext{test} \NC C \NC D \NR \stopalign \stopformula % \blank[big] % \startformula \startalign \NC \int_01 \NC B \NR \intertext{test} \NC \int_01 \NC D \NR \stopalign \stopformula % test outside formula % \startformula \startalign \NC \int_01 \NC B \NR \intertext{test} \NC \int_01 \NC D \NR \stopalign \stopformula % \stopTEXpage %D The examples on the next page show how one can give the %D frame as well as the background an additional offset and %D even a bit more depth. The blue outline is the frame, the %D red box is the background and the small black outline is the %D visualization of the resulting box, that is, we applied %D \type{\ruledhbox} to the result. %D \startpostponing %D \bgroup %D \unprotect %D \dontcomplain %D %D \startbuffer %D \vbox to \vsize %D \bgroup %D \startalignment[middle] %D \vss %D \dontleavehmode\vbox to .8\vsize %D \bgroup %D \hsize=300pt %D \setupframed %D [background=color, %D backgroundcolorachtergrondkleur=darkred, %D width=300pt, %D height=60pt, %D framecolorkaderkleur=DemoBlue, %D rulethickness=2pt] %D \def\status% %D {backgroundoffset=\framedparameter\c!backgroundoffset\\ %D frameoffset=\framedparameter\c!frameoffset\\ %D depth=\framedparameter\c!depth} %D \dontleavehmode \ruledhbox{\framed[backgroundoffset=0pt,frameoffset=0pt]{\status}} %D \vss %D \dontleavehmode \ruledhbox{\framed[backgroundoffset=5pt,frameoffset=0pt]{\status}} %D \vss %D \dontleavehmode \ruledhbox{\framed[backgroundoffset=0pt,frameoffset=5pt]{\status}} %D \vss %D \dontleavehmode \ruledhbox{\framed[backgroundoffset=2pt,frameoffset=5pt]{\status}} %D \vss %D \dontleavehmode \ruledhbox{\framed[backgroundoffset=5pt,frameoffset=2pt]{\status}} %D \vss %D \dontleavehmode \ruledhbox{\framed[backgroundoffset=5pt,frameoffset=5pt]{\status}} %D \egroup %D \vss %D \stopalignment %D \egroup %D \stopbuffer %D %D \getbuffer \page %D %D {\setupframed[depth=4pt]\getbuffer} \page %D %D \protect %D \egroup %D \stoppostponing %D When typesetting the framed box inline, we have to keep the %D baseline intact outside as well as inside the framed box. \def\doinlineframedbox {\scratchdimen\dimexpr\strutdp+\ruledlinewidth\relax \ifboxhasoffset \advance\scratchdimen \framedparameter\c!offset \fi \setbox\framebox\hbox{\lower\scratchdimen\box\framebox}% \ht\framebox\strutht \dp\framebox\strutdp \box\framebox} %D We can also lower the box over the natural depth of the %D line. \def\doloweredframedbox {\ht\framebox\dimexpr\ht\framebox+\dp\framebox-\strutdp\relax \dp\framebox\strutdp \box\framebox} %D Hanging the content is mainly meant for cases like the %D following: %D %D \starttyping %D \framed[strut=no] %D {\framed[height=2cm,location=hanging]{test}% %D \framed[height=1cm,location=hanging]{test}} %D \stoptyping \def\dohangingframedbox % best with strut=no {\scratchdimen\dimexpr\ht\framebox+\dp\framebox\relax \ht\framebox\zeropoint \dp\framebox\scratchdimen} %D We can draw lines from left to right and top to bottom by %D using the normal \type{\hairline} command. Both directions %D need a different treatment. %D %D \startbuffer %D \framed[width=4cm] {alfa\hairline beta\hairline gamma} %D \framed[height=2cm] {alfa\hairline beta\hairline gamma} %D \framed[width=4cm,height=2cm]{alfa\hairline beta\hairline gamma} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \hbox{\getbuffer} %D \stoplinecorrection %D %D These macros try to adapt their behaviour as good as %D possible to the circumstances and act as natural as %D possible. \def\vboxedhairline {\bgroup \dimen2=\ifboxhasoffset \localoffset \else \zeropoint \fi \dimen4=\dimexpr\dimen2+\ruledlinewidth\relax \setbox0\vbox {\advance\hsize 2\dimen4 \vskip\dimen2 \hrule \!!height\ruledlinewidth \!!depth\zeropoint \!!width\hsize \vskip\dimen2}% %\endgraf\nointerlineskip\endgraf %\moveleft\dimen4\box0 %\endgraf\nointerlineskip\localbegstrut \endgraf\obeydepth\nointerlineskip \moveleft\dimen4\box0 \endgraf\nointerlineskip\localbegstrut % beware, we might kill it in a style using \vskip\lineheight \egroup} % so this must not be changed \def\hboxedhairline % use framed dimen {\bgroup \dimen2=\ifboxhasoffset \localoffset \else \zeropoint \fi \ifboxhasheight \dimen4\dimexpr\localheight/2+\strutdp-2\ruledlinewidth\relax \dimen6\dimexpr\localheight/2-\strutdp+2\ruledlinewidth\relax \else \dimen4\dimexpr\strutht+\dimen2\relax \dimen6\dimexpr\strutdp+\dimen2\relax \fi \unskip \setbox\scratchbox\hbox {\hskip\dimen2 \vrule\!!height\dimen4\!!depth\dimen6\!!width\ruledlinewidth \hskip\dimen2}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \box\scratchbox \ignorespaces \egroup} %D The argument of the frame command accepts \type{\\} as a %D sort of newline signal. In horizontal boxes it expands to a %D space. \def\vboxednewline {\endgraf\ignorespaces} \def\hboxednewline {\unskip\normalspace\ignorespaces} %D We can set each rule on or off. The default setting is %D inherited from \type{frame}. An earlier implementation %D use a bit different approach, but the new one seems more %D natural: %D %D \bgroup %D \setuptyping[margin=0pt] %D \startlinecorrection %D \startbuffer %D \framed[offset=overlay,frame=on]{\darkred\blackrule} %D \stopbuffer %D \hbox{\getbuffer\vbox{\typebuffer}} %D %D \startbuffer %D \framed[offset=overlay,frame=on,bottomframe=off]{\darkred\blackrule} %D \stopbuffer %D \hbox{\getbuffer\vbox{\typebuffer}} %D %D \startbuffer %D \framed[offset=overlay,frame=on,bottomframe=on]{\darkred\blackrule} %D \stopbuffer %D \hbox{\getbuffer\vbox{\typebuffer}} %D %D \startbuffer %D \framed[offset=overlay,frame=off]{\darkred\blackrule} %D \stopbuffer %D \hbox{\getbuffer\vbox{\typebuffer}} %D %D \startbuffer %D \framed[offset=overlay,frame=off,bottomframe=off]{\darkred\blackrule} %D \stopbuffer %D \hbox{\getbuffer\vbox{\typebuffer}} %D %D \startbuffer %D \framed[offset=overlay,frame=off,bottomframe=on]{\darkred\blackrule} %D \stopbuffer %D \hbox{\getbuffer\vbox{\typebuffer}} %D \stoplinecorrection %D \egroup %D \macros %D {setupblackrules} %D %D The graphic capabilities of \TEX\ do not go beyond simple %D filled rules, except of course when using specials. Let's %D start with a warning: using this commands is far more slower %D than using the \TEX\ primitives \type{\hrule} and %D \type{\vrule}, but they save us some tokens. The %D characteristics of these rule drawing command can be set by: %D %D \showsetup{setupblackrules} \def\setupblackrules {\dodoubleargument\getparameters[\??bj]} %D \macros %D {blackrule} %D %D The simple command draws only one rule. Its optional %D argument can be used to specify the dimensions. By setting %D the width, height or depth to \type {max}, one gets the %D natural dimensions. %D %D \showsetup{blackrule} \def\doblackrule[#1]% {\hbox\bgroup \getparameters[\??bj][#1]% \setstrut \doif\@@bjwidth \v!max{\def\@@bjwidth {1em}}% \doif\@@bjheight\v!max{\def\@@bjheight{\strutht}}% \doif\@@bjdepth \v!max{\def\@@bjdepth {\strutdp}}% \localstartcolor[\@@bjcolor]% \vrule \!!width \@@bjwidth \!!height\@@bjheight \!!depth \@@bjdepth \localstopcolor \egroup} \unexpanded\def\blackrule {\dosingleempty\doblackrule} %D \macros %D {blackrules} %D %D One can call for a sequence of black rules, if needed %D equally spaced over the given width. %D %D \showsetup{blackrules} %D %D The two alternative calls are therefore: %D %D \startbuffer %D Tell me, is this according to the \blackrules[n=6]? %D These \blackrules[alternativevariant=b,n=10,distance=.2em,width=4cm] are quite clear. %D \stopbuffer %D %D \typebuffer %D %D or: %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D We could of course have implemented this macro using %D \type{\leaders}, but this would probably have taken more %D tokens. \def\doblackrules[#1]% {\hbox\bgroup \getparameters[\??bj][#1]% \!!widtha\@@bjwidth \!!widthb\@@bjdistance \doif\@@bjalternative\c!b {\scratchcounter\@@bjn \ifnum\scratchcounter=\plusone \!!widthb\zeropoint \else \advance\scratchcounter \minusone \advance\!!widtha -\scratchcounter\!!widthb \divide \!!widtha \@@bjn \fi}% \localstartcolor[\@@bjcolor]% \dorecurse\@@bjn {\vrule \!!width \!!widtha \!!height\@@bjheight \!!depth \@@bjdepth \hskip\!!widthb}% \unskip \localstopcolor \egroup} \unexpanded\def\blackrules {\dosingleempty\doblackrules} %D The next commands can be used to draw margin rules. We %D support two methods: \marginrule{one for in||line use} and %D one that acts on a paragraph. Drawing a margin rule is %D rather straightforward because we can use the commands that %D put text in the margin. \def\dodrawmarginrule {\setbox\scratchbox\hbox {\vrule\!!depth\strutdepth\!!height\strutheight\!!width\@@karulethickness}% \smashbox\scratchbox % no \vsmash !!! \box\scratchbox} \def\drawmarginrule {\strut\inleft{\dodrawmarginrule}} %D \macros %D {marginrule} %D %D The first method gobbles words and simply puts a bar in the %D margin. This method is not entirely robust. %D %D \showsetup{marginrule} \definecomplexorsimple\marginrule \def\simplemarginrule {\let\processword\drawmarginrule \processwords} \def\complexmarginrule[#1]% {\ifnum#1<\@@kalevel\relax \else \def\@@kadefaultwidth{#1}% \expandafter\simplemarginrule \fi} %D We need an auxiliary variable \def\@@kadefaultwidth{1} %D \macros %D {setupmarginrules} %D %D This macro definitions show us that we can pass an optional %D level, which is matched against the previous set one. The %D level can be set up with %D %D \showsetup{setupmarginrules} \def\setupmarginrules {\dodoubleargument\getparameters[\??ka]} %D \macros %D {startmarginrule} %D %D The second method collects text and reformats it afterwards, %D using the shapebox macros. We prevent local margin rules. %D %D \showsetup{startmarginrule} \definecomplexorsimple\startmarginrule \def\simplestartmarginrule {\bgroup \let\drawmarginrule\relax \let\stopmarginrule\dostopmarginrule \beginofshapebox} \def\complexstartmarginrule[#1]% {\bgroup \let\drawmarginrule\relax \ifnum#1<\@@kalevel\relax \let\stopmarginrule\egroup \else \def\@@kadefaultwidth{#1}% \let\stopmarginrule\dostopmarginrule \expandafter\beginofshapebox \fi} \def\dostopmarginrule {\endofshapebox \reshapebox {\hbox{\inleftmargin{\dodrawmarginrule}\box\shapebox}}% \flushshapebox \egroup} %D \startbuffer %D \setupmarginrules[level=5] %D %D \startmarginrule[1] %D First we set the level at~5. Next we typeset this first %D paragraph as a level~1 one. As expected no rule show up. %D \stopmarginrule %D %D \startmarginrule[5] %D The second paragraph is a level~5 one. As we can see here, %D the marginal rule gets a width according to its level. %D \stopmarginrule %D %D \startmarginrule[8] %D It will of course be no surprise that this third paragraph %D has a even thicker margin rule. This behavior can be %D overruled by specifying the width explictly. %D \stopmarginrule %D \stopbuffer %D %D In next example we show most features. Watch the rule %D thickness adapting itself to the level. %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D We just said: %D %D \typebuffer %D \macros %D {vl, hl} %D %D The command \type{\vl} draws a vertical rule \vl\ with strut %D dimensions, multiplied with the factor specified in the %D optional argument. The height and depth are clipped \vl[3] %D to the baselinedistance. Its horizontal counterpart %D \type{\hl} draws a horizontal rule \hl\ with a width of 1em, %D multiplied with the optional factor. The horizontal rule is %D drawn on top of the baseline. %D %D \showsetup{vl} %D \showsetup{hl} \def\complexvl[#1]% {\bgroup \!!dimena#1\strutht \!!dimenb#1\strutdp \setbox\scratchbox\hbox {\vrule \!!width \linewidth \!!height\!!dimena \!!depth \!!dimenb}% \dp\scratchbox\strutdp \ht\scratchbox\strutht \box\scratchbox \egroup} \def\complexhl[#1]% {\hbox {\vrule \!!width #1\s!em \!!height\linewidth \!!depth \zeropoint}} \definecomplexorsimple\vl \def\simplevl{\complexvl[1]} \definecomplexorsimple\hl \def\simplehl{\complexhl[1]} %D \macros %D {hairline, thinrule, thinrules, setupthinrules} %D %D Drawing thin lines can of course easily be accomplished by %D the \TEX\ primitives \type{\hrule} and \type{\vrule}. The %D next few macros however free us from some specifications. %D %D \startbuffer %D some text %D %D \hairline %D %D some more text %D %D \thinrule %D %D more and more text %D %D hi \thinrule\ there %D %D and then the final text %D \stopbuffer %D %D \typebuffer %D %D becomes %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D So we've got %D %D \showsetup{hairline} %D \showsetup{thinrule} %D %D Both can be set up with: %D %D \showsetup{setupthinrules} %D %D We also have %D %D \showsetup{thinrules} %D %D which looks like: \thinrules[n=2] \def\thinrule {\strut \bgroup \chardef\ruletype\plusone \processaction [\@@dlalternative] [ \v!a=>\chardef\ruletype0,% no line %\v!b=>\chardef\ruletype1,% height/depth \v!c=>\chardef\ruletype2,% topheight/botdepth % 11=>\chardef\ruletype1,% fallback for backgrounds 0=>\chardef\ruletype0,% compatible with backgrounds % 1=>\chardef\ruletype1,% compatible with backgrounds 2=>\chardef\ruletype2]% compatible with backgrounds \doifsomething\@@dlrulethickness {\linewidth\@@dlrulethickness}% \ifdim\linewidth=\zeropoint \chardef\ruletype\zerocount \else \doifnot\@@dlframe\v!on{\chardef\ruletype\zerocount}% \fi \ifnum\ruletype=\plusone \doif\@@dlheight\v!max{\let\@@dlheight\!!plusone}% \doif\@@dldepth \v!max{\let\@@dldepth \!!plusone}% \else \let\@@dlheight\!!plusone \let\@@dldepth\!!plusone \fi \freezedimensionwithunit\@@dlheight\strutht \freezedimensionwithunit\@@dldepth\strutdp \divide\linewidth \plustwo \doifelse\@@dlbackground\v!color {\startcolor[\@@dlbackgroundcolor]% \ifnum\ruletype=\plustwo % prevent overshoot due to rounding \leaders \hrule \!!height\dimexpr\@@dlheight-.5\linewidth\relax \!!depth \dimexpr\@@dldepth -.5\linewidth\relax \hfill \else \leaders \hrule \!!height\@@dlheight \!!depth \@@dldepth \hfill \fi \stopcolor \ifcase\ruletype % no rule \or \startcolor[\@@dlcolor]% \hfillneg \leaders\hrule\!!height\linewidth\!!depth\linewidth\hfill \stopcolor \or \startcolor[\@@dlcolor]% \hfillneg\leaders\hrule\!!height\dimexpr-\@@dldepth+\linewidth\relax\!!depth\@@dldepth\hfill \hfillneg\leaders\hrule\!!height\@@dlheight\!!depth\dimexpr-\@@dlheight+\linewidth\relax\hfill \stopcolor \fi} {\ifcase\ruletype \else \startcolor[\@@dlcolor]% \leaders\hrule\!!height\@@dlheight\!!depth\@@dldepth\hfill \stopcolor \fi}% \strut \carryoverpar\egroup} \def\hairline {\endgraf \thinrule \endgraf} \def\dosetupthinrules[#1]% {\getparameters[\??dl][#1]} \def\setupthinrules {\dosingleargument\dosetupthinrules} \def\dothinrules[#1]% {\bgroup \dosetupthinrules[#1]% \@@dlbefore \assignvalue\@@dlinterlinespace\@@dlinterlinespace{1.0}{1.5}{2.0}% \spacing\@@dlinterlinespace \dorecurse\@@dln {\ifnum\recurselevel=\@@dln \dothinrulesnobreak \else \ifnum\recurselevel=2 \dothinrulesnobreak \fi\fi \thinrule \ifnum\recurselevel<\@@dln\relax % test needed, else messed up whitespace \ifx\@@dlinbetween\empty \softbreak \else \endgraf \nowhitespace \@@dlinbetween \fi \fi}% \doifelsenothing\@@dlafter {\carryoverpar\egroup} {\@@dlafter\egroup}} \def\thinrules {\dosingleempty\dothinrules} %D A couple of examples are given below. %D %D \startbuffer %D \setupthinrules[n=3,inbetween=,color=gray] %D %D test test \thinrules\ test test \par %D test test \thinrules [color=green] test test \par %D test test \thinrules [height=max, depth=max] test test \par %D %D \setupthinrules[height=.9,depth=.9] %D %D test test \thinrules\ test test \par %D test test \thinrules [alternativevariant=b] test test \par %D test test \thinrules [alternativevariant=c] test test \par %D test test \thinrules [alternativevariant=c,inbetween=\vskip2ex] test test \par %D \stopbuffer %D %D \typebuffer {\getbuffer} %D %D There are a couple of alternative ways to visualize rules %D using backgrounds. At first sight these may look strange, %D but they make sense in educational settings. The %D alternatives are more or less compatible with the more %D advanced \METAPOST\ based implementation. %D %D \startbuffer[a] %D \setupthinrules %D [n=2, %D backgroundcolor=gray , %D rulethickness=1pt, %D colorkleur=donkerblauw, %D after=\blank, %D before=\blank] %D \stopbuffer %D %D \typebuffer[a] %D %D \startbuffer[b] %D \thinrules[alternativevariant=a] %D \thinrules[alternativevariant=b] %D \thinrules[alternativevariant=c] %D \stopbuffer %D %D \typebuffer[b] \getbuffer[a,b] %D %D \startbuffer[b] %D \thinrules[alternativevariant=a,background=color] %D \thinrules[alternativevariant=b,background=color] %D \thinrules[alternativevariant=c,background=color] %D \stopbuffer %D %D \typebuffer[b] \getbuffer[a,b] %D %D \startbuffer[b] %D \thinrules[alternativevariant=a,height=.8,depth=.8,background=color] %D \thinrules[alternativevariant=b,height=.8,depth=.8,background=color] %D \thinrules[alternativevariant=c,height=.8,depth=.8,background=color] %D \stopbuffer %D %D \typebuffer[b] \getbuffer[a,b] %D \macros %D {optimizethinrules} %D %D By saying \type {\thinrulestrue} or \type {-false}, we %D can influence the way dangling lines are handled. \newif\ifoptimizethinrules \optimizethinrulestrue \def\dothinrulesnobreak {\ifoptimizethinrules\penalty500\fi} %D \macros %D {startframedtext, setupframedtexts, defineframedtext} %D %D The general framing command we discussed previously, is not %D entirely suited for what we call framed texts, as for %D instance used in intermezzo's. The next examples show what %D we have in mind. %D %D \startbuffer[framed-0] %D \setupframedtexts %D [frame=off, %D width=\hsize, %D background=screen] %D %D \startframedtext %D By default the framed text is centered \dots %D \stopframedtext %D %D \startframedtext[right] %D \dots\ but we can also align left, middle and right. %D \stopframedtext %D \stopbuffer %D %D \startbuffer[framed-1] %D \defineframedtext %D [Example] %D [width=6cm, %D height=5cm] %D %D \startExample %D \typebuffer[framed-1] %D \stopExample %D \stopbuffer %D %D \startbuffer[framed-2] %D \defineframedtext %D [Example] %D [width=6cm] %D %D \startExample %D \typebuffer[framed-2] %D \stopExample %D \stopbuffer %D %D \startbuffer[framed-3] %D \defineframedtext %D [Example] %D [height=5cm] %D %D \startExample %D \typebuffer[framed-3] %D \stopExample %D \stopbuffer %D %D \startbuffer[framed-4] %D \defineframedtext %D [Example] %D [width=fit,height=broad] %D %D \Example{a very exciting example} %D \stopbuffer %D %D \bgroup \setuptyping[margin=0pt] \getbuffer[framed-0] \egroup %D \bgroup \setuptyping[margin=0pt] \getbuffer[framed-1] \egroup %D \bgroup \setuptyping[margin=0pt] \getbuffer[framed-2] \egroup %D \bgroup \setuptyping[margin=0pt] \getbuffer[framed-3] \egroup %D \bgroup \setuptyping[margin=0pt] \getbuffer[framed-4] \egroup %D %D Here we can see that we have a predefined framed text class %D as well as the tools for defining our own. So we have: %D %D \showsetup{setupframedtexts} %D %D as well as the definition command: %D %D \showsetup{defineframedtext} %D %D that generates two commands: %D %D \showsetup{start<>} %D \showsetup{<>} %D %D The next definition shows the defaults. \def\dodefineframedtext[#1][#2]% {\presetlocalframed[\??kd#1]% \getparameters[\??kd#1] [\c!width=0.75\hsize, \c!height=\v!fit, \c!align=\v!yes, \c!top=, \c!bottom=\vfill, \c!offset=1em, \c!bodyfont=, \c!style=, \c!color=, \c!left=, \c!right=\hfill, \c!before=\blank, \c!after=\blank, \c!inner=, \c!frame=\v!on, \c!topframe=, \c!bottomframe=, \c!leftframe=, \c!rightframe=, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!foregroundcolor=, \c!foregroundstyle=, \c!background=, \c!backgroundcolor=, \c!backgroundscreen=\@@rsscreen, \c!linecorrection=\v!on, \c!depthcorrection=\v!on, \c!margin=\v!standard, \c!orientation=, \c!indenting=, #2]% \setvalue{\e!start#1}{\dostartframedtext[#1]}% \setvalue{\e!stop #1}{\dostopframedtext }% \setvalue {#1}{\doframedtext [#1]}} \def\defineframedtext {\dodoubleempty\dodefineframedtext} %D We define the general (and original) case by just saying: \defineframedtext[\v!framedtext] %D We need several steps before the actual job is done, %D because we have to handle an optional identifier (and %D because these commands evolved out of a single case). \def\framedtextparameter#1#2% {\csname\??kd#1#2\endcsname} \def\dosetupframedtexts[#1][#2]% {\ifsecondargument \def\docommand##1{\getparameters[\??kd##1][#2]}% \processcommacommand[#1]\docommand % new, #1 may be macro \else \getparameters[\??kd\v!framedtext][#1]% \fi} \def\setupframedtexts {\dodoubleempty\dosetupframedtexts} \def\dostartframedtext {\bgroup\dotripleempty\dodostartframedtext} \def\dodostartframedtext[#1][#2][#3]% {\doifassignmentelse{#2} {\dododostartframedtext[#1][][#2]} {\dododostartframedtext[#1][#2][#3]}} \setfalse\framedtextlocationnone \def\checkframedtext % messy dependency {\ifinsidefloat \localhsize\hsize \else\ifdim\sidefloatvsize>\zeropoint % will be proper handle % \strut % rather clean way to invoke the sidefloat OTR % \setbox0=\lastbox % and get the widths set, so from now on we % \setlocalhsize % can have framed texts alongside sidefloats \checksidefloat \setlocalhsize \else \localhsize\hsize \fi\fi} \def\dododostartframedtext[#1][#2][#3]% #3 only passed to framed, not to framedtext {\doifsomething{#2}{\setvalue{\??kd#1\c!location}{#2}}% does not listen to #3 \setfalse\framedtextlocationnone \processaction % \v!low en \v!depth are already taken ! [\framedtextparameter{#1}\c!location] [ \v!left=>\letvalue{\??kd#1\c!left }\relax \letvalue{\??kd#1\c!right}\hfill, \v!right=>\letvalue{\??kd#1\c!left }\hfill \letvalue{\??kd#1\c!right}\relax, \v!middle=>\letvalue{\??kd#1\c!left }\hfill \letvalue{\??kd#1\c!right}\hfill, \v!none=>\letvalue{\??kd#1\c!left }\relax % new \letvalue{\??kd#1\c!right}\relax % new \settrue\framedtextlocationnone]% \letvalue{\??kd#1\c!location}\empty % removed 06/2001 % \forgetparindent % added 06/2001 [see demo-bbv] \localhsize\hsize \checkframedtext % so far \setbox\framebox\vbox \startboxedcontent \hsize\localhsize % \insidefloattrue % ? better \expanded{\switchtobodyfont[\framedtextparameter{#1}\c!bodyfont]}% \startcolor[\framedtextparameter{#1}\c!color]% \localframed[\??kd#1][\c!strut=\v!no,#3]% todo: use delayedstrut \bgroup \let\\=\endgraf \framedtextparameter{#1}\c!inner % oud spul \doifvalue{\??kd#1\c!depthcorrection}\v!on % new, inside box {\bgroup \verticalstrut % we need \nowhitespace in case of setups setting whitespace % nb, not safe, text vs \vbox as next \vskip-\struttotal \nowhitespace % na vskip ! new 20/05/2004, fails with next content being box (\scale{..}) }% \doinhibitblank % \blank[\v!disable]% plaatst signal \setupindenting[\framedtextparameter{#1}\c!indenting]% \doconvertfont{\framedtextparameter{#1}\c!style}\empty \def\dostopframedtext{\dodostopframedtext{#1}{#2}}} %D The \type {none} option is handy for nested usage, as %D in the presentation styles, where we don't want %D interference. \def\dodostopframedtext#1#2% % no \baselinecorrection, see faq docs {\endgraf \removelastskip \doifvalue{\??kd#1\c!depthcorrection}\v!on % local and global {\forgetall \vskip-\struttotal \verticalstrut \egroup \forgetall \vskip-\lineheight % will be an option, not default % \setbaselinecorrections % \donegbotbaselinecorrection \verticalstrut} \stopboxedcontent \stopcolor \ifconditional\framedtextlocationnone \egroup \box\framebox \else\ifinsidefloat \egroup \box\framebox \else \egroup \doplacement[\??kd#1][\c!depthcorrection=\v!off]{\box\framebox}% \fi\fi \egroup} %D Placement can be ignored: %D %D \starttyping %D \hbox to \hsize \bgroup %D \startframedtext[none][width=.5\textwidth] \input tufte \stopframedtext %D \startframedtext[none][width=.5\textwidth] \input zapf \stopframedtext %D \egroup %D %D \hbox to \hsize \bgroup %D \setupframedtexts[location=none]% %D \startframedtext[width=.5\textwidth] \input zapf \stopframedtext %D \startframedtext[width=.5\textwidth] \input tufte \stopframedtext %D \egroup %D \stoptyping %D The simple brace (or group) delimited case is typeset %D slightly different and is not aligned. \def\doframedtext {\bgroup\dodoubleempty\dodoframedtext} \def\dodoframedtext[#1][#2]% beware! {\expanded{\switchtobodyfont[\getvalue{\??kd#1\c!bodyfont}]}% \localframed[\??kd#1][\c!strut=\v!no,#2]% \bgroup \blank[\v!disable]% \let\\=\endgraf \getvalue{\??kd#1\c!inner}% % kleur naar outer level \dostartattributes{\??kd#1}\c!style\c!color\empty \bgroup \aftergroup\docloseframedtext \let\next=} \def\docloseframedtext {\removelastskip \dostopattributes \egroup \egroup} %D \macros %D {defineframed} %D %D One can also define simple framed texts, using: %D %D \showsetup{defineframed} \def\defineframed {\dodoubleempty\dodefineframed} \def\dodefineframed[#1][#2]% {\iffirstargument \setvalue{#1}{\dodoubleempty\doframed[#2]}% \fi} \def\doframed[#1][#2]% {\framed[#1,#2]} %D \macros %D {textrule, starttextrule, setuptextrules} %D %D Putting rules before and after a paragraph is very space %D sensitive, but the next command handles that quite well. It %D comes in two disguises: %D %D \startbuffer %D \textrule[top]{fragments} %D \input reich %D \textrule %D \stopbuffer %D %D \bgroup \typebuffer \getbuffer \egroup %D %D \startbuffer %D \setuptextrules %D [width=90pt,distance=12pt,rulecolor=blue, %D bodyfont=small,style=\sc,color=red] %D %D \starttextrule{Ship Building Tools} %D \nl \setuptolerance[tolerant] \input materie %D \stoptextrule %D \stopbuffer %D %D \bgroup \typebuffer \getbuffer \egroup %D %D \startbuffer %D \setuptextrules %D [location=inmargin, %D bodyfont=small,style=slantedbold] %D %D \starttextrule{wonderful} %D \input tufte %D \stoptextrule %D \stopbuffer %D %D \bgroup \typebuffer \getbuffer \egroup %D %D The formal definition of these commands is: %D %D \showsetup{textrule} %D \showsetup{starttextrule} %D \showsetup{setuptextrules} %D %D The implementation looks a bit complicated due to the %D optional arguments. \def\setuptextrules {\dodoubleargument\getparameters[\??tl]} \def\complextextrule[#1]% if needed we can make it installable {\let\next\dobottomtextrule \processaction [#1] [ \v!top=>\let\next\dotoptextrule, \v!middle=>\let\next\domiddletextrule, \v!bottom=>\let\next\dobottomtextrule]% \dosinglegroupempty\next} \definecomplexorsimple\textrule \def\simpletextrule {\dosinglegroupempty\dounknowntextrule} \def\docomplextextrule#1% {\bgroup \advance\hsize\dimexpr-\rightskip-\leftskip\relax \setbox\scratchbox\hbox to \hsize {\dimen4\dimexpr .5ex+.5\linewidth\relax \dimen6\dimexpr-.5ex+.5\linewidth\relax \doifnothing{#1}\firstargumentfalse \iffirstargument \doifelse\@@tllocation\v!inmargin {\llap{\doattributes\??tl\c!style\c!color{#1}\hskip\leftmargindistance}} {\color[\@@tlrulecolor] {\vrule\!!height\dimen4\!!depth\dimen6\!!width\@@tlwidth}% \hbox spread 2\dimexpr\@@tldistance\relax {\hss\doattributes\??tl\c!style\c!color{\strut#1}\hss}}% \fi \color[\@@tlrulecolor] {\leaders\hrule\!!height\dimen4\!!depth\dimen6\hfill}}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \noindent\box\scratchbox %\nobreak\verticalstrut\kern-\struttotal % evt \witruimte \egroup} \def\dotoptextrule#1% {\page[\v!preference] % interferes %\whitespace % no \@@tlbefore \docomplextextrule{#1}% % todo, option: \doifnothing{#1}{\ruledvskip-.5ex} \nowhitespace \@@tlinbetween \endgraf} \def\dodobottomtextrule#1#2% {\ifhmode \endgraf \fi \dimen0\strutdp \ifdim\prevdepth>\strutdp\else % was <\strutdp \ifdim\prevdepth>\zeropoint \advance\dimen0 -\prevdepth \fi \fi \advance\dimen0 .5ex \vskip\dimen0 % == % \vskip\dimexpr \strutdp + .5ex % \ifdim\prevdepth>\strutdp\else\ifdim\prevdepth>\zeropoint-\prevdepth\fi\fi\relax % \@@tlinbetween \doifelsenothing{#2} {\bgroup \advance\hsize\dimexpr-\rightskip-\leftskip\relax \nointerlineskip \moveleft-\leftskip\vbox {\color[\@@tlrulecolor] {\hrule\!!depth\linewidth\!!height\zeropoint\!!width\hsize}}% \egroup} {\docomplextextrule{#2}}% \ifvmode\prevdepth\zeropoint\fi #1% \page[\v!preference]} \def\dobottomtextrule {\dodobottomtextrule\@@tlafter} \def\domiddletextrule {\dodobottomtextrule\@@tlinbetween} \def\dounknowntextrule {\iffirstargument \@EA\dotoptextrule \else \@EA\dobottomtextrule\@EA\empty \fi} %D The grouped commands also supports bodyfont switching: \def\starttextrule#1% {\bgroup \def\dounknowntextrule{\domiddletextrule} \dotoptextrule{#1} \bgroup \doifsomething\@@tlbodyfont{\switchtobodyfont[\@@tlbodyfont]}} \def\stoptextrule {\par \egroup \dobottomtextrule\empty \egroup} %D \macros %D {fillinrules, setupfillinrules} %D %D The next few commands do not really deserve a place in a %D core module, because they deal with specific typography. %D Nevertheless I decided to make them part of the core, %D because they permit us to make questionaires. Let's start %D with some examples. %D %D \fillinrules[n=2,width=fit]{first} %D \fillinrules[n=2,width=broad]{first} %D \fillinrules[n=2,width=3cm]{first} %D \fillinrules[n=2,width=3cm,distance=.5em,separator=:]{first} %D \fillinrules[n=2]{first}{last} %D \fillintext{first}{last} \input reich \par %D %D The main command is \type{\fillinrules}. This command takes %D one and an optional second argument and sets a paragraph with %D empty visualized lines. %D %D \showsetup{fillinrules} %D \showsetup{setupfillinrules} \def\setupfillinrules {\dodoubleargument\getparameters[\??il]} \definecomplexorsimpleempty\fillinrules \def\complexfillinrules[#1]% {\def\docomplexfillinrules##1##2% {\dodocomplexfillinrules[#1]{##1}{##2}{\thinrules [\c!n=\@@iln,\c!interlinespace=\@@ilinterlinespace,\c!before=,\c!after=]}}% \dodoublegroupempty\docomplexfillinrules} \def\dodocomplexfillinrules[#1]#2#3#4% {\endgraf \@@ilbefore \begingroup \setupfillinrules[#1]% \noindent \doifsomething{#2} {\doifelse\@@ilwidth\v!fit {\let\@@ildistance\!!zeropoint \hbox} {\doifelse\@@ilwidth\v!broad {\hbox} {\hbox to \@@ilwidth}}% \bgroup \doattributes\??il\c!style\c!color{\strut#2\hfill\@@ilseparator}% \hskip\@@ildistance \egroup}% %\hangindent=\wd0\relax % tzt hang=yes,n %\parindent=\hangindent %\box0\relax \setupwhitespace[\v!big]% \ignorespaces #4% \doifsomething{#3} {\kern\@@ildistance \doattributes\??il\c!style\c!color{#3\strut}}% \endgroup \endgraf \@@ilafter} %D \macros %D {fillintext} %D %D To provide compatible layouts when texts and lines are %D mixed, one can typeset a paragraph by using the command %D \type{\fillintext}. %D %D \showsetup{fillintext} \definecomplexorsimpleempty\fillintext \def\complexfillintext[#1]% rather rough, using an \unhbox is suboptimal {\def\docomplexfillintext##1##2% {\dowithnextbox {\dodocomplexfillinrules[#1]{##1}{\hfill##2}{\unhbox\nextbox\unskip}}% \hbox\bgroup\let\par\egroup\ignorespaces}% \dodoublegroupempty\docomplexfillintext} %D \macros %D {fillinline, setupfillinlines} %D %D Another member of the family takes care of putting a (often %D small) rule after a piece of text, like %D %D \startbuffer %D \fillinline \input reich \par %D \fillinline[margin=0cm] \input reich \par %D \stopbuffer %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D which was typeset by saying: %D %D \typebuffer %D %D The two commands that take care of this are: %D %D \showsetup{fillinline} %D \showsetup{setupfillinlines} \def\setupfillinlines {\dodoubleargument\getparameters[\??iv]} \definecomplexorsimpleempty\fillinline \def\complexfillinline[#1]% {%\endgraf % interferes with \definedescription cum suis \@@ivbefore \begingroup \setupfillinlines[#1]% \advance\rightskip \@@ivmargin \parfillskip\zeropoint \def\par % very dangerous {\let\par\endgraf % -) \ifhmode\unskip\hfill\fi \scratchdimen\dimexpr\@@ivwidth-\@@ivdistance\relax \ifdim\scratchdimen>\@@ivmargin\else\expandafter\rlap\fi {\kern\@@ivdistance \vrule \!!width \scratchdimen \!!height.5\linewidth \!!depth .5\linewidth}% \endgraf % ! \endgroup \endgraf % ! \@@ilafter}} %D \stopdocumentation %D \bgroup %D %D \setupframedtexts %D [setuptext] %D [background=color,backgroundcolor=white] %D %D \startbuffer %D \setupbackground %D [backgroundoffset=4pt, %D background=screen, %D frame=on, %D framecolor=red, %D leftoffset=2pt] %D \stopbuffer %D %D \getbuffer %D %D \startbackground %D %D \macros %D {setupbackground,startbackground,background} %D %D The section deals with backgrounds in the running text. This %D means that texts is to be collected and split over pages. To %D show what can be done, we provide this part of the %D documentation with some gray background and a red frame. %D Both the background and frame can have all characteristics %D of \type{\framed}. This time we used the setting: %D %D \typebuffer %D %D The implementation is not that sophisticated, but suffices. %D The main problem with this kind of functionality is to get %D the spacing all right. %D Specifying the background is more or less the same as %D specifying a framed box. %D %D \showsetup{setupbackground} \presetlocalframed[\??ag] \def\dosetupbackground[#1]% {\getparameters[\??ag][#1]% \doifelse\@@agstate\v!start {\let\startbackground\dostartbackground \let\stopbackground \dostopbackground \let\background \dobackground} {\let\startbackground\relax \let\stopbackground \relax \let\background \relax}} \def\setupbackground {\dosingleargument\dosetupbackground} %D Actually typesetting the background is implemented rather %D straightforward. We need to handle some spacing as well as %D the (often) a bit smaller horizontal size. %D %D \showsetup{startbackground} %D %D Although we could have used a scratch one, we first %D declare a boolean. % 0=no-split, 1=no-split+indent, 2=split, 3=split+indent \chardef\backgroundsplitmode\plusthree %D The \type{\vbox to \lineheight{}\vskip\zeropoint} %D construction gives the first real line a decent height by %D adding a dummy line. \def\dostartbackground {\endgraf \bgroup \setbox0\vbox\bgroup \vbox to \lineheight{}\vskip\zeropoint \blank[\v!disable] % \advance\hsize -\@@agleftoffset % \advance\hsize -\@@agrightoffset \leftskip \@@agleftoffset % new ** \rightskip\@@agrightoffset} % new ** %D This dummy line is removed by \type{\setbox2=\vsplit0 to %D \lineheight}. That way \type{\topskip} takes care of the %D lineheight. I'll probably forget to apply this trick %D elsewhere. \def\dostopbackground % improved version (i hope) {\endgraf \removelastskip \egroup \dimen2\leftskip % new ** \forgetall \ifinsidefloat \chardef\backgroundsplitmode\zerocount \fi \ifcase\backgroundsplitmode \localframed[\??ag][\c!offset=\v!overlay]{\box0}% \or \hskip\dimen2 \localframed[\??ag][\c!offset=\v!overlay]{\box0}% \else \splitmaxdepth\boxmaxdepth \splittopskip\topskip \setbox2\vsplit0 to \lineheight % get rid of fake line \loop \ifdim\pagetotal=\zeropoint % empty page \scratchdimen\textheight \chardef\backgroundsplit\plusone % split to max height \else \setbox\scratchbox\vbox{\@@agbefore}% \scratchdimen\dimexpr\pagegoal-\ht\scratchbox-\pagetotal\relax \chardef\backgroundsplit\plustwo % split to partial height \fi \advance\scratchdimen\dimexpr-\@@agtopoffset-\@@agbottomoffset\relax \ifdim\scratchdimen>2\lineheight\relax % reasonable, will be configurable \ifdim\ht0>\scratchdimen % larger than page \setbox2\vsplit0 to \scratchdimen \else \setbox2\box0 \chardef\backgroundsplit\zerocount % no split \fi \setbox2\vbox \ifcase\backgroundsplit\or to \textheight \fi % max split {\vskip\@@agtopoffset \popsplitproperties \unvcopy2 \prevdepth\dp2 \obeydepth \vskip\@@agbottomoffset \vfill} \@@agbefore \ifcase\backgroundsplit\or\or % partial split \ifdim\pagegoal<\maxdimen \pagegoal=1.2\pagegoal % be a bit more tolerant \fi \fi \startlinecorrection %\localframed[\??ag][\c!offset=\v!overlay]{\hskip\@@agleftoffset\box2\hskip\@@agrightoffset}% \ifnum\backgroundsplitmode=\plusthree \hskip\dimen2 \fi % \localframed[\??ag][\c!offset=\v!overlay]{\box2}% new ** \stoplinecorrection \ifcase\backgroundsplit % no split \@@agafter \else % some split \vfill\eject % geen \page ! \fi \else \page \fi \ifdim\ht0>\zeropoint \repeat \fi \egroup \endgraf} %D As a bonus we also have a short command, that is of not %D much use, but kept there for historic reasons. %D %D \showsetup{background} \def\dobackground {\bgroup \dowithnextbox {\localframed[\??ag][\c!offset=\v!overlay]{\flushnextbox}\egroup} \vbox} %D \stopdocumentation %D \stopbackground %D \egroup %D New, for the moment private; let's see when GB finds out %D about this one and its obscure usage. It's used in: %D %D \startbuffer %D \defineframedtext %D [tabulateframe] %D [offset=overlay, %D backgroundoffset=3pt, %D background=color, %D backgroundcolor=green] %D %D \setuptabulate %D [tabulate] %D [frame=tabulateframe] %D %D \setuptables %D [frame=tabulateframe] %D %D \input tufte %D %D \starttabulate[|l|l|] %D \NC test \NC test \NC \NR \NC test \NC test \NC \NR %D \NC test \NC test \NC \NR \NC test \NC test \NC \NR %D \stoptabulate %D %D \input tufte %D %D \starttable[|l|l|] %D \NC test \NC test \NC \AR \NC test \NC test \NC \AR %D \NC test \NC test \NC \AR \NC test \NC test \NC \AR %D \stoptable %D \stopbuffer %D %D \typebuffer \def\defineframedcontent {\dodoubleempty\dodefineframedcontent} \def\dodefineframedcontent[#1][#2]% {\presetlocalframed[\??fc#1]% \getparameters[\??fc#1] [\c!leftoffset=\zeropoint, \c!rightoffset=\getvalue{\??fc#1\c!leftoffset}, \c!topoffset=\zeropoint, \c!bottomoffset=\getvalue{\??fc#1\c!topoffset}, \c!strut=\v!no, \c!offset=\v!overlay, \c!linecorrection=\v!no, \c!left=, \c!right=, #2]} \let\setuplocalframed\getparameters \def\setupframedcontent {\dodoubleempty\dosetupframedcontent} \def\dosetupframedcontent[#1][#2]% {\def\docommand##1{\getparameters[\??fc##1][#2]}% \processcommacommand[#1]\docommand} \def\startframedcontent[#1]% {\bgroup \let\stopframedcontent\egroup \doifnot{#1}\v!off {\doifdefined{\??fc#1\c!frame} {\def\stopframedcontent{\dostopframedcontent{#1}}% \dostartframedcontent{#1}}}} \def\dostartframedcontent#1% {\setbox\framebox\hbox\bgroup \setlocalhsize \hsize\localhsize \advance\hsize\dimexpr-\getvalue{\??fc#1\c!leftoffset}-\getvalue{\??fc#1\c!rightoffset} \relax \advance\vsize\dimexpr-\getvalue{\??fc#1\c!topoffset} -\getvalue{\??fc#1\c!bottomoffset}\relax \hskip\getvalue{\??fc#1\c!leftoffset}% \vbox\bgroup \vskip\getvalue{\??fc#1\c!topoffset}% \vbox\bgroup \forgetall \blank[\v!disable]} \def\dostopframedcontent#1% {\removelastskip \egroup \vskip\getvalue{\??fc#1\c!bottomoffset}% \egroup \hskip\getvalue{\??fc#1\c!rightoffset}% \egroup \doifvalue{\??fc#1\c!width}\v!fit {\letvalue{\??fc#1\c!width}\v!fixed}% no shapebox \ifinsidefloat \donefalse \else \doifelsevalue{\??fc#1\c!linecorrection}\v!yes\donetrue\donefalse \fi % plaats ? \ifdone\startlinecorrection\fi \getvalue{\??fc#1\c!left}% new \localframed[\??fc#1]{\box\framebox}% \getvalue{\??fc#1\c!right}% new \ifdone\stoplinecorrection\fi \egroup} %D \macros %D {backgroundline} %D %D For the moment an undocumented feature, but a cancidate %D for going public. \def\backgroundline[#1]% %{\doifsomething{#1}{\dobackgroundline{#1}}\hbox} {\doifcolorelse{#1}{\dobackgroundline{#1}\hbox}\hbox} % \def\backgroundline[#1]% % {\doifcolor{#1}{\dobackgroundline{#1}}\hbox} \def\dobackgroundline#1% {\dowithnextbox {\hbox {\localcolortrue \startcolor[#1]% \vrule \!!width \nextboxwd \!!height\nextboxht \!!depth \nextboxdp \stopcolor \hskip-\nextboxwd \flushnextbox}}} %D \macros %D {encircled} %D %D Some not so robust left||overs (borrowed from Knuth, %D \TEX Book\ page 356): \def\encircled#1% {{\ooalign{\hfil\raise0.07ex\hbox{{\tx#1}}\hfil\crcr\mathhexbox20D}}} \let\omcirkeld\encircled \setuplinewidth [\v!medium] \setupframed [\c!width=\v!fit, \c!height=\v!broad, \c!lines=, \c!offset=0.25ex, % \defaultframeoffset \c!empty=\v!no, \c!frame=\v!on, \c!topframe=, \c!bottomframe=, \c!leftframe=, \c!rightframe=, \c!radius=.5\bodyfontsize, \c!rulethickness=\linewidth, \c!corner=\v!rectangular, \c!depth=\!!zeropoint, \c!foregroundcolor=, \c!foregroundstyle=, \c!background=, \c!backgroundscreen=\@@rsscreen, \c!backgroundcolor=, \c!backgroundoffset=\!!zeropoint, \c!framecolor=, \c!frameoffset=\!!zeropoint, \c!backgroundcorner=\framedparameter\c!corner, \c!backgroundradius=\framedparameter\c!radius, \c!backgrounddepth=\framedparameter\c!depth, \c!framecorner=\framedparameter\c!corner, \c!frameradius=\framedparameter\c!radius, \c!framedepth=\framedparameter\c!depth, \c!component=, \c!align=, \c!bottom=\vss, \c!top=, \c!strut=\v!yes, \c!autostrut=\v!yes, \c!location=\v!normal, \c!orientation=, \c!autowidth=\v!yes, \c!setups=] \setupscreens [%\c!factor=1.0, % obsolete %\c!method=\v!external, % obsolete \c!screen=0.95] \setupblackrules [\c!n=3, \c!width=1em, \c!height=1ex, \c!depth=\!!zeropoint, \c!alternative=\c!a, \c!distance=.25ex, \c!color=] \setupmarginrules [\c!level=0, \c!rulethickness=\@@kadefaultwidth\linewidth] \setupthinrules [\c!interlinespace=\v!small, \c!n=3, \c!before=, \c!inbetween={\blank[\v!white]}, \c!after=, \c!color=, \c!height=.5\linewidth, \c!depth=.5\linewidth, \c!frame=\v!on, % compatible with textbackgrounds \c!alternative=\v!b, \c!backgroundcolor=, \c!background=, \c!rulethickness=] \setuptextrules [\c!location=\v!left, \c!before=\blank, \c!after=\blank, \c!inbetween=, \c!width=2em, \c!style=\v!bold, \c!color=, \c!rulecolor=, \c!bodyfont=, \c!distance=.5em] \setupfillinrules [\c!width=\v!broad, \c!distance=1em, \c!before=\blank, \c!after=\blank, \c!n=1, \c!interlinespace=\v!small, \c!separator=, \c!style=\v!normal, \c!color=] \setupfillinlines [\c!width=3cm, \c!margin=\@@ivwidth, \c!distance=1em, \c!before=\blank, \c!after=\blank] \setupbackground [\c!leftoffset=.5\bodyfontsize, \c!rightoffset=\@@agleftoffset, \c!topoffset=\!!zeropoint, \c!bottomoffset=\@@agtopoffset, \c!state=\v!start, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!frame=\v!off, \c!color=, \c!depth=\!!zeropoint, \c!background=\v!screen, \c!backgroundcolor=\@@agcolor, \c!screen=\@@rsscreen, \c!before=, \c!after=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context.css0000644000175000017500000001056111754241457024104 0ustar norbertnorbertbody { color: #FFFFFF ; background-color: ; font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans ; font-size: 12px ; line-height: 18px ; } a:link, a:active, a:visited { color: #FFFFFF ; } a.dir-view:link, a.dir-view:active, a.dir-view:visited { color: #FFFFFF ; text-decoration: underline ; } .valid { color: #00FF00 ; } .invalid { color: #FF0000 ; } button, .commonlink, .smallbutton { font-weight: bold ; font-size: 12px ; text-decoration: none ; color: #000000 ; border-color: #7F7F7F ; border-style: solid ; border-width: .125ex ; background-color: #FFFFFF ; padding: .5ex ; } .smallbutton { width: 1em ; } a.commonlink:link, a.commonlink:active, a.commonlink:visited, a.smalllink:link, a.smalllink:active, a.smalllink:visited { font-weight: bold ; font-size: 12px ; text-decoration: none ; color: #000000 ; } h1, .title { font-style: normal ; font-weight: normal ; font-size: 18px ; line-height: 18px ; margin-bottom: 20px ; } h2, .subtitle { font-style: normal ; font-weight: normal ; font-size: 12px ; margin-top: 18px ; margin-bottom: 18px ; } table { line-height: 18px ; font-size: 12px ; margin: 0 ; } th { font-weight: bold ; text-align: left ; padding-bottom: 6px ; } .tc { font-weight: bold ; text-align: left ; } p, li { max-width: 60em ; } .empty-line { margin-top: 4px ; } .more-room { margin-right: 1.5em ; } .much-more-room { margin-right: 3em ; } #main { position: absolute; left: 10% ; top: 10% ; right: 10% ; bottom: 10% ; z-index: 2 ; width: 80% ; height: 80% ; padding: 0% ; margin: 0% ; overflow: auto ; border-style: none ; border-width: 0 ; background-color: ; } #main-settings { margin: 12px ; x_max-width: 60em ; line-height: 18px ; font-size: 12px ; } #left { position: absolute; top : 10% ; left: 0% ; bottom: 0%; right: 90% ; z-index: 1 ; width: 10% ; height: 90% ; padding: 0% ; margin: 0% ; font-size: 16px ; border-style: none ; border-width: 0 ; background-color: ; } #right { position: absolute; top : 0% ; left: 90% ; bottom: 10% ; right: 0% ; z-index: 1 ; width: 10% ; height: 90% ; padding: 0% ; margin: 0% ; font-size: 16px ; border-style: none ; border-width: 0 ; background-color: ; _margin-left: -15px ; } #bottom { position: absolute ; left: 10% ; right: 0% ; top: 90% ; bottom: 0% ; z-index: 1 ; width: 90% ; height: 10% ; padding: 0% ; margin: 0% ; font-size: 16px ; border-style: none ; border-width: 0 ; background-color: ; } #top { position: absolute ; left: 0% ; right: 10% ; top: 0% ; bottom: 90% ; z-index: 1 ; width: 90% ; height: 10% ; padding: 0% ; margin: 0% ; font-size: 16px ; border-style: none ; border-width: 0 ; background-color: ; } #top-one { position: absolute ; bottom: 50% ; width: 100% ; buggedheight: 100% ; } #top-two { position: relative ; margin-bottom: -9px ; margin-left: 12px ; margin-right: 12px ; line-height: 18px ; text-align: right ; vertical-align: middle ; } #bottom-one { position: absolute ; bottom: 50% ; width: 100% ; buggedheight: 100% ; } #bottom-two { position: relative ; margin-bottom: -9px ; margin-left: 12px ; margin-right: 12px ; line-height: 18px ; text-align: left ; vertical-align: middle ; } #left-one { position: absolute ; width: 100% ; buggedheight: 100% ; } #left-two { position: relative ; margin-top: 12px ; line-height: 18px ; text-align: center ; vertical-align: top ; } #right-one { display: table ; height: 100% ; width: 100% ; } #right-two { display: table-row ; height: 100% ; width: 100% ; } #right-three { display: table-cell ; width: 100% ; vertical-align: bottom ; _position: absolute ; _top: 100% ; } #right-four { text-align: center ; margin-bottom: 2ex ; _position: relative ; _top: -100% ; } #more-top { position: absolute; top: 0% ; left: 90% ; bottom: 90%; right: 0% ; z-index: 3 ; width: 10% ; height: 10% ; padding: 0% ; margin: 0% ; border-style: none ; border-width: 0 ; } #more-top-settings { text-align: center ; } #more-right-settings { margin-right: 12px ; margin-left: 12px ; line-height: 18px ; font-size: 10px ; text-align: center ; } #right-safari { _display: table ; width: 100% ; height: 100% ; } context-2013.05.28.20130704/texmf-dist/tex/context/base/m-educat.tex0000644000175000017500000001472211754241457024132 0ustar norbertnorbert%D \module %D [ file=m-educat, %D version=2003.03.05, %D title=\CONTEXT\ Extra Modules, %D subtitle=Educational Extras, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 will collect a few macros cq.\ definitions %D meant for educational use. Most of the code has been laying %D around for some time and has been (or is still) used in %D \PRAGMA\ projects. \unprotect \definesystemvariable{iv} \definecolor [answerareacolor] [s=.90] \definecolor [answerlinecolor] [white] \definetextbackground [\v!answerarea] [\c!location=\v!text, \c!n=0, \c!frame=\v!off, \c!framecolor=answerlinecolor, \c!rulethickness=2pt, \c!background=\v!color, \c!backgroundcolor=answerareacolor, \c!alternative=2] % betweenline % n=gedwongen % m=extra auto \def\setupanswerarea {\setuptextbackground[\v!answerarea]} \setvalue\e!answerspace {\dosingleempty\doanswerspace} \def\doanswerspace[#1]% {\begingroup \dontcomplain \setupanswerarea [\c!n=0,\c!m=,#1,\c!location=\v!text]% \doifelsenothing{\textbackgroundparameter\c!m} {\expandafter\donoanswerspace} {\expandafter\dodoanswerspace}% [#1]} \def\donoanswerspace[#1]#2% {\setupthinrules [\c!alternative=\textbackgroundparameter\c!alternative, \c!color=\textbackgroundparameter\c!framecolor, \c!background=\textbackgroundparameter\c!background, \c!backgroundcolor=\textbackgroundparameter\c!backgroundcolor, \c!rulethickness=\textbackgroundparameter\c!rulethickness]% \doifelse{\textbackgroundparameter\c!n}{*} {\thinrule \par} {\scratchcounter0\textbackgroundparameter\c!n\relax % tricky, guess \def\processisolatedword##1% {\setbox\scratchbox=\hbox{##1}% \vbox{\hsize\wd\scratchbox\thinrule \ifcase\scratchcounter\else \setbox\scratchbox=\hbox{\space}% \nobreak\hskip\zeropoint \!!minus \wd\scratchbox \vbox{\hsize\wd\scratchbox\thinrule}% \fi}}% \processisolatedwords{#2}\processisolatedword % so far \ifcase\scratchcounter \else \ifnum\scratchcounter<3 \nobreak \vbox{\hsize\scratchcounter em\thinrule}% \else % more \advance \scratchcounter -2 \dorecurse\scratchcounter{\allowbreak\vbox{\hsize1em\thinrule}}% \nobreak \vbox{\hsize2em\thinrule}% \fi \fi}% \endgroup} \def\dodoanswerspace[#1]#2% m case {\getvalue{\e!start\v!answerarea}% #2% \doifelse{\textbackgroundparameter\c!m}{*} {\hfill\strut \getvalue{\e!stop\v!answerarea}% \par} {\scratchcounter0\textbackgroundparameter\c!m\relax \ifcase\scratchcounter \else \ifnum\scratchcounter<3 \nobreak \hbox to \scratchcounter em{\strut\hss}% \else % more \advance \scratchcounter -2 \dorecurse\scratchcounter{\allowbreak\hbox to 1em{\strut\hss}}% \nobreak \hbox to 2em{\strut\hss}% \fi \fi \getvalue{\e!stop\v!answerarea}}% \endgroup} \setvalue{\e!start\e!answerlines}% {\dosingleempty\dostartanswerlines} \def\dostartanswerlines[#1]% {\begingroup \dontcomplain \setupanswerarea [\c!n=0,\c!m=,#1,\c!location=\v!text]% \doifnot{\textbackgroundparameter\c!option}\v!joinedup\softbreak \doifelsenothing{\textbackgroundparameter\c!m} {\expandafter\donostartanswerlines} {\expandafter\dodostartanswerlines}% [#1]} \def\donostartanswerlines[#1]% {\setupthinrules [\c!alternative=\textbackgroundparameter\c!alternative, \c!color=\textbackgroundparameter\c!framecolor, \c!background=\textbackgroundparameter\c!background, \c!backgroundcolor=\textbackgroundparameter\c!backgroundcolor, \c!rulethickness=\textbackgroundparameter\c!rulethickness]% \thinrules[\c!n=\textbackgroundparameter\c!n]\par \endgroup \grabuntil{\e!stop\e!answerlines}} \def\dodostartanswerlines[#1]% {\begingroup \getvalue{\e!start\v!answerarea}% \ignorespaces} \setvalue{\e!stop\e!answerlines}% {\scratchcounter0\textbackgroundparameter\c!m\relax % a \softbreak is more efficient in pos dan \par \ifcase\scratchcounter % nothing \or \softbreak \else \softbreak \advance \scratchcounter \minusone \dorecurse\scratchcounter{\strut\hfill\strut\softbreak}% \fi \strut\hfill\strut \getvalue{\e!stop\v!answerarea}% \par\endgroup\endgroup} \setvalue\e!answerlines {\dosingleempty\doanswerlines} \def\doanswerlines[#1]#2% {\getvalue{\e!start\e!answerlines}[#1]% #2% \getvalue{\e!stop\e!answerlines}} \protect \doifnotmode{demo}{\endinput} %D Test materiaal. \starttext \startnotmode[answers] \setupanswerarea[level=+1] \stopnotmode \setupcolors[state=start] test test test \answerspace [n=10] {Whow}. test test test test tets test test \answerspace [n=10] {Whow}. test test test test tets test test \answerspace [n=10] {Whow}. test test test test tets test test \answerspace [n=10] {Whow}. test test test test test test \answerspace [n=*] {Whow.} test test test test test test test \startanswerlines [n=3] What A Junk Answer \stopanswerlines test test test test test test test \startanswerlines [n=3,alternative=0] What A Junk Answer \stopanswerlines test test test test test test test \startanswerlines [n=3,alternative=1] What A Junk Answer \stopanswerlines test test test test test test test \startanswerlines [n=3,alternative=2] What A Junk Answer \stopanswerlines \startitemize[paragraph] \item \startanswerlines [option=seried,n=2] xxx \stopanswerlines \stopitemize test test test \answerspace [m=10] {Whow}. test test test test tets test test \answerspace [m=10] {Whow}. test test test test tets test test \answerspace [m=10] {Whow}. test test test test tets test test \answerspace [m=10] {Whow}. test test test test test test \answerspace [m=*] {Whow.} test test test test test test test \startanswerlines [m=2] What A Junk Answer \stopanswerlines test test test test test test test \startanswerlines [m=2,alternative=0] What A Junk Answer \stopanswerlines test test test test test test test \startanswerlines [m=2,alternative=1] What A Junk Answer \stopanswerlines test test test test test test test \startanswerlines [m=2,alternative=2] What A Junk Answer \stopanswerlines \startitemize[paragraph] \item \startanswerlines [option=seried,m=2] xxx \stopanswerlines \stopitemize \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-gen.mkii0000644000175000017500000037634412130411274024331 0ustar norbertnorbert%D \module %D [ file=syst-gen, %D version=1996.03.20, %D title=\CONTEXT\ System Macros, %D subtitle=General, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % nagaan : \ifinstringelse in syst-ext.tex % do => p! dodo pp! dododo ppp! % todo: \donetrue etc local maken %D The following macros are responsible for the interaction %D with \CONTEXT. These macros have proven their use. These %D macros are optimized as far as possible within of course, %D the know how of the author. %D %D In this module we also show some of the optimizations, %D mainly because we don't want to forget them and start doing %D things over and over again. If showing them has a learing %D effect for others too, we've surved another purpose too. %D \macros %D {abortinputifdefined} %D %D Because this module can be used in a different context, we %D want to prevent it being loaded more than once. This can be %D done using: %D %D \starttyping %D \abortinputifdefined\command %D \stoptyping %D %D where \type{\command} is a command defined in the module %D to be loaded only once. %D %D \starttyping %D \def\abortinputifdefined#1% %D {\ifx#1\undefined %D \let\next=\relax %D \else %D \let\next=\endinput %D \fi %D \next} %D \stoptyping %D %D This macro can be speed up in terms of speed as well as %D memory. Because this is a nice example of a bit strange %D command (\type{\endinput}), we spend some more lines on this. %D %D If we perform such actions directly, we can say: %D %D \starttyping %D \ifx\somecommand\undefined %D \let\next=\relax %D \else %D \let\next=\endinput %D \fi %D \next %D \stoptyping %D %D We need the \type{\next} because we need to end the %D \type{\fi}. The efficient one is: %D %D \starttyping %D \ifx\somecommand\undefined %D \else %D \expandafter\endinput %D \fi %D \stoptyping %D %D Because \type{\endinput} comes into action after the current %D line, we can also say: %D %D \starttyping %D \ifx\somecommand\undefined \else \endinput \fi %D \stoptyping %D %D When we define a macro, we tend to use a format which %D shows as besat as can how things are done. \TEX\ however %D stores the definitions as a sequence of tokens, so in fact %D we can use a formatted definition: \def\abortinputifdefined#1% {\ifx#1\undefined \else \endinput \fi} %D which also works. Keep in mind that this is entirely due to %D the fact that \type{\endinput} after the line, i.e. at the %D end of the macro. We therefore can burry this primitive quite %D deep in code. %D And because this module implements \type{\writestatus}, we %D just say: % \abortinputifdefined\writestatus %D \macros %D {overloaded, superseded, forwarded, predefined} %D %D This prefix is used as signal for the \CONTEXT\ dependency %D checking features. The first four prefixes don't do anything %D useful, apart from signaling parsers. \def\overloaded{} % local change at the macro level \def\superseded{} % global change at the module level, replaces previous definitions \def\predefined{} % defined (first) here, but may be redefined anytime (no need for \overloaded) \def\forwarded {} % definition at the module level, only done when undefined \def\forwarded#1#2{\ifx#2\undefined\else\expandafter\gobbleforwarded\fi#1#2} \def\gobbleforwarded#1 {} %D Normally we tell the users what module is being loaded. %D However, the command that is needed for this is not yet %D defined. %D %D \starttyping %D \writestatus{laden}{Context Systeem Macros (a)} %D \stoptyping %D The next few macros are needed in case this module is %D used outside \CONTEXT. \ifx\beginTEX\undefined \let\beginTEX\relax\let\endTEX\relax \long\def\beginETEX #1\endETEX {} \fi %D \macros %D [protecting] %D {protect,unprotect} %D %D We can shield macros from users by using some special %D characters in their names. Some characters that are normally %D no letters and therefore often used are: \type{@}, \type{!} %D and \type{?}. Before and after the definition of protected %D macros, we have to change the \CATCODE\ of these characters. %D This is done by \type{\unprotect} and \type{\protect}, for %D instance: %D %D \starttyping %D \unprotect %D \def\!test{test} %D \protect %D \stoptyping %D %D The defined command \type{\!test} can of course only be %D called upon when we are in the \type{\unprotect}'ed state, %D otherwise \TEX\ reads \type{\!} and probably complains %D loudly about not being in math mode. %D %D Both commands can be used nested, but only the \CATCODE\ %D of the outermost level is saved. We make use of %D an auxilary macro \type{\doprotect} to prevent us from %D conflicts with existing macro's \type{\protect}. When %D nesting deeper than one level, the system shows the %D protection level. \ifx\protectionlevel\undefined \newcount\protectionlevel \fi \ifx\protect\undefined \def\protect{\writestatus{protection}{too much protection}} \else % a simple version is already defined \fi \let\normalprotect\protect % only for latex %D Although we don't need the \type{%} after commands that %D don't take arguments, unless lines are obeyed, I decided %D to put it there as a reminder. I only mention this once. \ifx\unprotect\undefined \chardef\protectionthreshold=10 \def\saveprotectedcharacters {\edef\doprotectcharacters {\catcode`\noexpand @\the\catcode`@ \catcode`\noexpand !\the\catcode`! \catcode`\noexpand ?\the\catcode`? }} \def\setprotectedcharacters {\catcode`@=11 \catcode`!=11 \catcode`?=11 } \def\unprotect {\ifcase\protectionlevel \saveprotectedcharacters \let\protect\doprotect \fi \setprotectedcharacters \advance\protectionlevel 1 \ifnum\protectionlevel>\protectionthreshold \reportunprotection \fi} \def\doprotect {\ifcase\protectionlevel\or \doprotectcharacters \let\doprotectcharacters\relax \let\protect\normalprotect \fi \ifnum\protectionlevel>\protectionthreshold \reportprotection \fi \advance\protectionlevel -1 } \def\reportunprotection {\writestatus{protection}{unprotect \protectionstate}} \def\reportprotection {\writestatus{protection}{protect \protectionstate}} \def\reportprotectionstate{\writestatus{protection}{state \protectionstate}} \def\protectionstate {\the\protectionlevel \ifcase\protectionthreshold :\space @=\the\catcode`@\space\space !=\the\catcode`!\space\space ?=\the\catcode`?% \fi} \ifx\everyeof\undefined \let\checkprotection\relax \else \def\checkprotection{\everyeof{\writestatus{protection}{state: \protectionstate}}} \fi \else \let\reportprotectionstate\relax \fi %D Now it is defined, we can make use of this very useful %D macro. \unprotect %D \macros %D {@@escape,@@begingroup,@@endgroup,@@mathshift,@@alignment, %D @@endofline,@@parameter,@@superscript,@@subscript, %D @@ignore,@@space,@@letter,@@other,@@active,@@comment} %D %D In \CONTEXT\ we sometimes manipulate the \CATCODES\ of %D certain characters. Because we are not that good at numbers, %D we introduce some symbolic names. \chardef\@@escape = 0 \chardef\@@begingroup = 1 \chardef\@@endgroup = 2 \chardef\@@mathshift = 3 \chardef\@@alignment = 4 \chardef\@@endofline = 5 \chardef\@@parameter = 6 \chardef\@@superscript = 7 \chardef\@@subscript = 8 \chardef\@@ignore = 9 \chardef\@@space = 10 \chardef\@@letter = 11 \chardef\@@other = 12 \chardef\other = 12 \chardef\@@active = 13 \chardef\active = 13 \chardef\@@comment = 14 %D \macros %D {normalspace} %D %D We often need a space as defined in \PLAIN\ \TEX. Because %D we cannot be sure of \type{\space} is redefined, we define: \def\normalspace{ } %D \macros %D {scratchcounter, %D scratchdimen,scratchskip,scratchmuskip, %D scratchbox, %D scratchtoks} %D %D Because we often need counters on a temporary basis, we %D define the \COUNTER\ \type{\scratchcounter}. This is a %D real \COUNTER, and not a pseudo one, as we will meet %D further on. We also define some other scratch registers. \chardef\newabovelimit=20 \def\stripnewabove#1% {\ifnum10<9#1 #1\else\expandafter\stripnewabove\fi}% \def\newabove#1#2% \dimen \name {#1#2% \ifnum\expandafter\stripnewabove\meaning#2>\newabovelimit\else \expandafter\newabove\expandafter#1\expandafter#2% \fi} \newabove \newcount \scratchcounter \newabove \newcount \globalscratchcounter \newabove \newdimen \scratchdimen \newabove \newdimen \globalscratchdimen \newabove \newskip \scratchskip \newabove \newskip \globalscratchskip \newabove \newmuskip \scratchmuskip \newabove \newmuskip \globalscratchmuskip \newabove \newtoks \scratchtoks \newabove \newtoks \globalscratchtoks \newbox \scratchbox \newbox \globalscratchbox \newdimen\scratchdimenone \newbox\scratchboxone \newcount\scratchcounterone \newdimen\scratchdimentwo \newbox\scratchboxtwo \newcount\scratchcountertwo %D \macros %D {ifdone} \newif\ifdone %D \macros %D {ifCONTEXT} %D %D In the system and support modules we sometimes show examples %D that make use of core commands. We can skip those parts of %D the documentation when we use another macropackage. Of %D course we default to false. \newif \ifCONTEXT %D \macros %D {!!count, !!toks, !!dimen, !!box, %D !!width, !!height, !!depth, !!string, !!done} %D %D We define some more \COUNTERS\ and \DIMENSIONS. We also %D define some shortcuts to the local scatchregisters~0, 2, 4, %D 6 and~8. \newcount\!!counta \toksdef\!!toksa=0 \dimendef\!!dimena= 0 \chardef\!!boxa =0 \newcount\!!countb \toksdef\!!toksb=2 \dimendef\!!dimenb= 2 \chardef\!!boxb =2 \newcount\!!countc \toksdef\!!toksc=4 \dimendef\!!dimenc= 4 \chardef\!!boxc =4 \newcount\!!countd \toksdef\!!toksd=6 \dimendef\!!dimend= 6 \chardef\!!boxd =6 \newcount\!!counte \toksdef\!!tokse=8 \dimendef\!!dimene= 8 \chardef\!!boxe =8 \newcount\!!countf \dimendef\!!dimenf=10 %skipdef\!!skipa=0 \dimendef\!!dimeng=12 %skipdef\!!skipb=2 \dimendef\!!dimenh=14 %skipdef\!!skipc=4 \dimendef\!!dimeni=16 %skipdef\!!skipd=6 \dimendef\!!dimenj=18 %skipdef\!!skipe=8 \dimendef\!!dimenk=20 %skipdef\!!skipf=10 \let\!!stringa\empty \let\!!stringb\empty \let\!!stringc\empty \let\!!stringd\empty \let\!!stringe\empty \let\!!stringf\empty \newdimen\!!widtha \newdimen\!!heighta \newdimen\!!deptha \newdimen\!!widthb \newdimen\!!heightb \newdimen\!!depthb \newdimen\!!widthc \newdimen\!!heightc \newdimen\!!depthc \newif\if!!donea \newif\if!!doneb \newif\if!!donec \newif\if!!doned \newif\if!!donee \newif\if!!donef \ifx\data\undefined \else \let\data \relax \fi % dep checker %D Beware: we don't reuse plain counters, too dangerous %D when <= 20 (e.g. in supp-pdf this messed up things). \ifx\undefined\zeroskip \newskip \zeroskip \fi \ifx\undefined\zeropoint \newdimen \zeropoint \fi \ifx\undefined\zerocount \newcount \zerocount \fi \ifx\undefined\minusone \newcount \minusone \fi \minusone = -1 \ifx\undefined\minustwo \newcount \minustwo \fi \minustwo = -2 \ifx\undefined\plusone \chardef \plusone = 1 \fi \ifx\undefined\plustwo \chardef \plustwo = 2 \fi \ifx\undefined\plusthree \chardef \plusthree = 3 \fi \ifx\undefined\plusfour \chardef \plusfour = 4 \fi \ifx\undefined\plusfive \chardef \plusfive = 5 \fi \ifx\undefined\plusten \mathchardef \plusten = 10 \fi \ifx\undefined\plushundred \mathchardef \plushundred = 100 \fi \ifx\undefined\plusthousand \mathchardef \plusthousand = 1000 \fi \ifx\undefined\plustenthousand \mathchardef \plustenthousand = 10000 \fi \ifx\undefined\plustwentythousand \mathchardef \plustwentythousand = 20000 \fi %D \macros %D {s!,c!,e!,p!,v!,@@,??} %D %D To save memory, we use constants (sometimes called %D variables). Redefining these constants can have desastrous %D results. \def\v!prefix! {v!} \def\c!prefix! {c!} \def\s!prefix! {s!} \def\p!prefix! {p!} \def\s!next {next} \def\s!default {default} \def\s!dummy {dummy} \def\s!unknown {unknown} \def\s!do {do} \def\s!dodo {dodo} \def\s!complex {complex} \def\s!start {start} \def\s!simple {simple} \def\s!stop {stop} \def\s!empty {empty} %D \macros %D {@EA,@EAEA,@EAEAEA,@EAEAEAEAEAEA,expanded,startexpanded} %D %D When in unprotected mode, to be entered with %D \type{\unprotect}, one can use \type{\@EA} as equivalent %D of \type{\expandafter}. \let\@NX\noexpand \let\@EA\expandafter \def\@EAEA {\expandafter\expandafter} \def\@EAEAEA{\expandafter\expandafter\expandafter} \def\@EAEAEAEAEAEA{\expandafter\@EAEAEA\expandafter} %D Sometimes we pass macros as arguments to commands that %D don't expand them before interpretation. Such commands can %D be enclosed with \type{\expanded}, like: %D %D \starttyping %D \expanded{\setupsomething[\alfa]} %D \stoptyping %D %D Such situations occur for instance when \type{\alfa} is a %D commalist or when data stored in macros is fed to index of %D list commands. If needed, one should use \type{\noexpand} %D inside the argument. Later on we will meet some more clever %D alternatives to this command. \long\def\@@expanded{} % always long; global (less restores) \long\def\expanded#1% {\long\xdef\@@expanded{\noexpand#1}\@@expanded} %D Beware, the next one has no \type {\noexpand} before its %D argument. \long\def\startexpanded#1\stopexpanded % see x-fo for example {\long\xdef\@@expanded{#1}\@@expanded} %D \macros %D {safeexpanded,everysafeexpanded} %D %D In addition we provide: \newtoks\everysafeexpanded \long\def\safeexpanded#1% why the \noexpand {\begingroup \the\everysafeexpanded\long\xdef\@@expanded{\noexpand#1}% \endgroup \@@expanded} \def\safeedef#1#2% {\begingroup \the\everysafeexpanded\long\xdef\@@expanded{\noexpand#2}% \endgroup \let#1\@@expanded} \def\safexdef#1#2% {\begingroup \the\everysafeexpanded\long\xdef\@@expanded{\noexpand#2}% \endgroup \global\let#1\@@expanded} %D You can append protective measures to the token register if %D needed, as we will do later. %D \macros %D {expandoneargafter,expandtwoargsafter} %D %D These two commands make macros more readable by hiding a %D lot of \type {\expandafter}'s. They expand the arguments %D after the first command. %D %D \starttyping %D \expandoneargafter \command{\abc} %D \expandtwoargsafter\command{\abc}{\def} %D \stoptyping %D %D These commands expect the arguments to be macros. \def\expandoneargafter #1{\@EA#1\@EA} \def\expandtwoargsafter#1#2{\@EA\@EA\@EA#1\@EA\@EA\@EA{\@EA#2\@EA}\@EA} %D These two do a full expansion: \def\fullexpandoneargafter #1#2{\long\xdef\@@expanded{\noexpand#1{#2}}\@@expanded} \def\fullexpandtwoargsafter#1#2#3{\long\xdef\@@expanded{\noexpand#1{#2}{#3}}\@@expanded} %D \macros %D {gobbleoneargument,gobble...arguments} %D %D The next set of macros just do nothing, except that they %D get rid of a number of arguments. \long\def\gobbleoneargument #1{} \long\def\gobbletwoarguments #1#2{} \long\def\gobblethreearguments #1#2#3{} \long\def\gobblefourarguments #1#2#3#4{} \long\def\gobblefivearguments #1#2#3#4#5{} \long\def\gobblesixarguments #1#2#3#4#5#6{} \long\def\gobblesevenarguments #1#2#3#4#5#6#7{} \long\def\gobbleeightarguments #1#2#3#4#5#6#7#8{} \long\def\gobbleninearguments #1#2#3#4#5#6#7#8#9{} \long\def\gobbletenarguments #1{\gobbleninearguments} %D \macros %D {doifnextcharelse} %D %D When we started using \TEX\ in the late eighties, our %D first experiences with programming concerned a simple shell %D around \LATEX. The commands probably use most at \PRAGMA, %D are the itemizing ones. One of those few shell commands took %D care of an optional argument, that enabled us to specify %D what kind of item symbol we wanted. Without understanding %D anything we were able to locate a \LATEX\ macro that could %D be used to inspect the next character. %D %D It's this macro that the ancester of the next one presented %D here. It executes one of two actions, dependant of the next %D character. Disturbing spaces and line endings, which are %D normally interpreted as spaces too, are skipped. %D %D \starttyping %D \doifnextcharelse {karakter} {then ...} {else ...} %D \stoptyping %D %D This macro differs from the original in the use of \type %D {\localnext} because we don't want clashes with \type %D {\next}. \long\def\doifnextcharelse#1#2#3% #1 should not be {} ! {\let\charactertoken=#1% = needed here \def\!!stringa{#2}% \def\!!stringb{#3}% \futurelet\nexttoken\inspectnextcharacter} \def\inspectnextcharacter {\ifx\nexttoken\blankspace \@EA\reinspectnextcharacter \else\ifx\nexttoken\charactertoken \@EAEAEA\!!stringa \else \@EAEAEA\!!stringb \fi\fi} %D Because we will mostly use this macro for testing if the next %D character is \type {[}, we also make a slightly faster variant %D as it is not uncommon to have tens of thousands of calls to this %D test in a run. Of course it also is more convenient to read a %D trace then. \let\nextoptionalcharactertoken=[ \long\def\doifnextoptionalelse#1#2% {\def\nextoptionalcommandyes{#1}% \def\nextoptionalcommandnop{#2}% \futurelet\nexttoken\inspectnextoptionalcharacter} \def\inspectnextoptionalcharacter {\ifx\nexttoken\blankspace \@EA\reinspectnextoptionalcharacter \else\ifx\nexttoken\nextoptionalcharactertoken \@EAEAEA\nextoptionalcommandyes \else \@EAEAEA\nextoptionalcommandnop \fi\fi} \let\nextbgroupcharactertoken\bgroup \long\def\doifnextbgroupelse#1#2% {\def\nextbgroupcommandyes{#1}% \def\nextbgroupcommandnop{#2}% \futurelet\nexttoken\inspectnextbgroupcharacter} \def\inspectnextbgroupcharacter {\ifx\nexttoken\blankspace \@EA\reinspectnextbgroupcharacter \else\ifx\nexttoken\nextbgroupcharactertoken \@EAEAEA\nextbgroupcommandyes \else \@EAEAEA\nextbgroupcommandnop \fi\fi} %D This macro uses some auxiliary macros. Although we were able %D to program quite complicated things, I only understood these %D after rereading the \TEX book. The trick is in using a %D command with a one character name. Such commands differ from %D the longer ones in the fact that trailing spaces are {\em %D not} skipped. This enables us to indirectly define a long %D named macro that gobbles a space. %D %D In the first line we define \type{\blankspace}. Next we %D make \type{\:} equivalent to \type{\reinspect...}. This %D one||character command is expanded before the next %D \type{\def} comes into action. This way the space after %D \type{\:} becomes a delimiter of the longer named %D \type{\reinspectnextcharacter}. The chain reaction is %D visually compatible with the next sequence: %D %D \starttyping %D \expandafter\def\reinspectnextcharacter % %D {\futurelet\nexttoken\inspectnextcharacter} %D \stoptyping %D %D However complicated it may look, I'm still glad I stumbled %D into this construction. Saving and restoring \type {\:} is %D needed when we use \PPCHTEX\ in \LATEX. \let\next\: \def\:{\let\blankspace= } \: \def\:{\reinspectnextcharacter} \expandafter\def\: {\futurelet\nexttoken\inspectnextcharacter} \def\:{\reinspectnextoptionalcharacter} \expandafter\def\: {\futurelet\nexttoken\inspectnextoptionalcharacter} \def\:{\reinspectnextbgroupcharacter} \expandafter\def\: {\futurelet\nexttoken\inspectnextbgroupcharacter} \let\:\next %D \macros %D {setvalue,setgvalue,setevalue,setxvalue, %D letvalue, %D getvalue, %D resetvalue} %D %D \TEX's primitive \type{\csname} can be used to construct %D all kind of commands that cannot be defined with %D \type{\def} and \type{\let}. Every macro programmer sooner %D or later wants macros like these. %D %D \starttyping %D \setvalue {name}{...} = \def\name{...} %D \setgvalue {name}{...} = \gdef\name{...} %D \setevalue {name}{...} = \edef\name{...} %D \setxvalue {name}{...} = \xdef\name{...} %D \letvalue {name}=\... = \let\name=\... %D \letgvalue {name}=\... = \global\let\name=\... %D \getvalue {name} = \name %D \resetvalue {name} = \def\name{} %D \stoptyping %D %D As we will see, \CONTEXT\ uses these commands many times, %D which is mainly due to its object oriented and parameter %D driven character. \def\setvalue #1{\expandafter \def\csname#1\endcsname} \def\setgvalue #1{\expandafter\gdef\csname#1\endcsname} \def\setevalue #1{\expandafter\edef\csname#1\endcsname} \def\setxvalue #1{\expandafter\xdef\csname#1\endcsname} \def\getvalue #1{\csname#1\endcsname} \def\letvalue #1{\expandafter\let\csname#1\endcsname} \def\letgvalue #1{\global\expandafter\let\csname#1\endcsname} \def\resetvalue #1{\expandafter\let\csname#1\endcsname\empty} \def\ignorevalue#1#2{\expandafter\let\csname#1\endcsname\empty} \def\setuvalue #1{\normalprotected\expandafter \def\csname#1\endcsname} \def\setuevalue #1{\normalprotected\expandafter\edef\csname#1\endcsname} \def\setugvalue #1{\normalprotected\expandafter\gdef\csname#1\endcsname} \def\setuxvalue #1{\normalprotected\expandafter\xdef\csname#1\endcsname} %D \macros %D {globallet,glet} %D %D In \CONTEXT\ of May 2000 using \type {\globallet} %D instead of the two tokens will save us some %D $300\times4=1200$ bytes of format file on a 32~bit %D system. So: \def\globallet{\global\let} \let\glet\globallet %D \macros %D {donottest,unexpanded} %D %D When expansion of a macro gives problems, we can precede it %D by \type{\donottest}. It seems that protection is one of the %D burdens of developers of packages, so maybe that's why in %D \ETEX\ protection is solved in a more robust way. %D %D Sometimes prefixing the macro with \type{\donottest} leads %D to defining an auxiliary macro, like %D %D \starttyping %D \def\dosomecommand {... ... ...} %D \def\somecommand {\donottest\dosomecommand} %D \stoptyping %D %D This double definition can be made transparant by using %D \type{\unexpanded}, as in: %D %D \starttyping %D \unexpanded\def\somecommand{... ... ...} %D \stoptyping %D %D The protection mechanism uses: \beginTEX \def\dontprocesstest#1{==} \def\doprocesstest #1{#1} \let\donottest=\doprocesstest \endTEX \beginETEX \detokenize \def\donottest#1{#1} % {\detokenize{#1}} \endETEX %D By the way, we use a placeholder because we don't want %D interference when testing on empty strings. Using a %D placeholder of 8~characters increases the processing time %D of simple \type{\doifelse} tests by about 10 \%. When we %D process the test, we have to remove the braces and %D therefore explictly gobble \type{#1}. %D \macros %D {honorunexpanded,forceunexpanded} %D %D The fact that many macros have the same prefix, could have %D a negative impact on searching in the hash table. Because %D some simple testing does not show differences, we just use: %D %D \starttyping %D \def\unexpanded#1#2% %D {\@EA#1\@EA#2\@EA{\@EA\donottest\csname\s!do\string#2\endcsname}% %D \@EA#1\csname\s!do\string#2\endcsname} %D \stoptyping %D %D Well, in fact we use the bit more versatile alternative. The %D \type {\honorunexpanded} can be used to \type {\string} %D the protected command, which by the way is seldom needed %D in \CONTEXT. \beginTEX \def\dosetunexpanded#1#2% {\@EA#1\@EA{\@EA#2\@EA}% \@EA{\@EA\donottest\csname\s!do\@EA\string\csname#2\endcsname\endcsname}% \@EA#1\@EA{\@EA\s!do\@EA\string\csname#2\endcsname}} \def\docomunexpanded#1#2% {\@EA#1\@EA#2\@EA{\@EA\donottest\csname\s!do\string#2\endcsname}% \@EA#1\csname\s!do\string#2\endcsname} \def\unexpanded#1% {\def\dounexpanded {\ifx\next\bgroup \@EA\dosetunexpanded \else \@EA\docomunexpanded \fi#1}% \futurelet\next\dounexpanded} \def\honorunexpanded% for writing to a file or message {\def\donottest##1{\expandafter\gobblethreearguments\string##1}} \def\forceunexpanded% for preventing expansion in \xdef {\def\donottest##1% {\expandafter\noexpand\csname\expandafter\gobblefourarguments\string##1\endcsname}} \def\resetunexpanded% {\let\donottest\doprocesstest} \endTEX \beginETEX \protected \let \unexpanded \normalprotected \let \honorunexpanded \empty % \relax \let \forceunexpanded \empty % \relax \let \resetunexpanded \empty % \relax \endETEX %D This one accepts the more direct \type{\def} and cousins %D as well as the \CONTEXT\ specific \type{\setvalue} ones. %D %D And so the definition in our example turns out to be: %D %D \starttyping %D \def\csname do\somecommand\endcsname{... ... ...} %D \def\somecommand{\donottest\csname do\somecommand\endcsname} %D \stoptyping %D %D In which \type{do\somecommand} is hidden from the user and %D cannot lead to confusion. It's still permitted to define %D auxiliary macros like \type{\dosomecommand}. %D %D When we are going to use e-\TEX, we'll probably end up %D redefining some commands, but we can probably keep the %D \type{\unexpanded} ones unchanged. %D \macros %D {doifundefined,doifdefined, %D doifundefinedelse,doifdefinedelse, %D doifalldefinedelse} %D %D The standard way of testing if a macro is defined is %D comparing its meaning with another undefined one, usually %D \type{\undefined}. To garantee correct working of the next %D set of macros, \type{\undefined} may never be defined! %D %D \starttyping %D \doifundefined {string} {...} %D \doifdefined {string} {...} %D \doifundefinedelse {string} {then ...} {else ...} %D \doifdefinedelse {string} {then ...} {else ...} %D \doifalldefinedelse {commalist} {then ...} {else ...} %D \stoptyping %D %D Every macroname that \TEX\ builds gets an entry in the hash %D table, which is of limited size. It is expected that e-\TeX\ %D will offer a less memory||consuming alternative. %D Although it will probably never be a big problem, it is good %D to be aware of the difference between testing on a macro %D name to be build by using \type{\csname} and %D \type{\endcsname} and testing the \type{\name} directly. %D %D \starttyping %D \expandafter\ifx\csname NameA\endcsname\relax ... \else ... \fi %D %D \ifx\NameB\undefined ... \else ... \fi %D \stoptyping %D %D I became aware of this when I mistakenly testen the first %D one against \type{\undefined}. When \TEX\ build a name using %D \type{\csname} it automatically sets it to \type{\relax}, %D which is definitely not the same as \type{\undefined}. The %D quickest way to check these things is asking \TEX\ to show %D the meaning of the names: %D %D \starttyping %D \expandafter\show\csname NameA\endcsname %D %D \show\NameB %D \stoptyping %D %D The main reason why this never will be a big problem is that %D when one uses the \type{\csname} way, one probably has to do %D with some macroname that always is dealt with that way. %D Confusion can however arise when one applies both testing %D methods to the same macroname. By the way, the assignment %D of \type{\relax} obeys grouping. %D The first one gets rid of \type{#1}, but still expands to %D something and the second one expands to \type{#1}. Because %D we accept arguments between \type{{}}, we have to get rid %D of one level of braces. %D %D Our first implementation of \type{\ifundefined} was %D straightforward and readable: %D %D \starttyping %D \def\ifundefined#1% %D {\expandafter\ifx\csname#1\endcsname\relax}% %D %D \def\doifundefinedelse#1#2#3% %D {\let\donottest=\dontprocesstest %D \ifundefined{#1}% %D \let\donottest=\doprocesstest#2% %D \else %D \let\donottest=\doprocesstest#3% %D \fi} %D %D \def\doifdefinedelse#1#2#3% %D {\doifundefinedelse{#1}{#3}{#2}} %D %D \def\doifundefined#1#2% %D {\doifundefinedelse{#1}{#2}{}} %D %D \def\doifdefined#1#2% %D {\doifundefinedelse{#1}{}{#2}} %D %D \def\doifalldefinedelse#1#2#3% %D {\begingroup %D \donetrue %D \def\checkcommand##1% %D {\doifundefined{##1}{\donefalse}}% %D \processcommalist[#1]\checkcommand %D \ifdone %D \endgroup#2% %D \else %D \endgroup#3% %D \fi} %D \stoptyping %D %D When this module was optimized, timing showed that the %D next alternative can be upto twice as fast, especially when %D longer arguments are used. Watch how we reach over the %D \type {\else} and \type {\fi}: this way they cannot get %D into the way (and we can avoid those \type {\next} %D hacks); I started using this method after I did some %D speed optimization tests in the xtag modules; the %D efficiency of such hacks depends on the length of the %D argument etc. etc.) \beginTEX \def\ifundefined#1% {\expandafter\ifx\csname#1\endcsname\relax} \def\p!doifundefined#1% {\let\donottest\dontprocesstest \expandafter\ifx\csname#1\endcsname\relax} \def\doifundefinedelse#1% {\p!doifundefined{#1}% \let\donottest\doprocesstest\@EA\firstoftwoarguments \else \let\donottest\doprocesstest\@EA\secondoftwoarguments \fi} \def\doifdefinedelse#1% {\p!doifundefined{#1}% \let\donottest\doprocesstest\@EA\secondoftwoarguments \else \let\donottest\doprocesstest\@EA\firstoftwoarguments \fi} \def\doifundefined#1% {\p!doifundefined{#1}% \let\donottest\doprocesstest\@EA\firstofoneargument \else \let\donottest\doprocesstest\@EA\gobbleoneargument \fi} \def\doifdefined#1% {\p!doifundefined{#1}% \let\donottest\doprocesstest\@EA\gobbleoneargument \else \let\donottest\doprocesstest\@EA\firstofoneargument \fi} \endTEX \beginETEX \ifcsname \def\ifundefined#1% ongelukkige naam {\unless\ifcsname#1\endcsname} \def\p!doifundefined#1% {\edef\p!defined{#1}% \unless\ifcsname\detokenize\@EA{\p!defined}\endcsname} \def\doifundefinedelse#1% {\edef\p!defined{#1}% \ifcsname\detokenize\@EA{\p!defined}\endcsname \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\doifdefinedelse#1% {\edef\p!defined{#1}% \ifcsname\detokenize\@EA{\p!defined}\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifundefined#1% {\edef\p!defined{#1}% \ifcsname\detokenize\@EA{\p!defined}\endcsname \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \def\doifdefined#1% {\edef\p!defined{#1}% \ifcsname\detokenize\@EA{\p!defined}\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \endETEX %D \macros %D {letbeundefined} %D %D Testing for being undefined comes down to testing on \type %D {\relax} when we use \type {\csname}, but when using \type %D {\ifx}, we test on being \type {\undefined}! In \ETEX\ we %D have \type {\ifcsname} and that way of testing on existance %D is not the same as the one described here. Therefore we %D introduce: \beginTEX \def\letbeundefined#1% {\expandafter\let\csname#1\endcsname\relax} \endTEX \beginETEX \undefined \def\letbeundefined#1% potential stack buildup when used \global {\expandafter\let\csname#1\endcsname\undefined} \def\localundefine#1% conditional {\ifcsname#1\endcsname\expandafter\let\csname#1\endcsname\undefined\fi} \def\globalundefine#1% conditional {\ifcsname#1\endcsname\expandafter\global\let\csname#1\endcsname\undefined\fi} \endETEX %D Beware, being \type {\undefined} in \ETEX\ means that the macro %D {\em is} defined! %D Before we start using this variant, we used another one, %D which is even a bit faster. This one looked like: %D %D \starttyping %D \def\p!doifundefined% %D {\begingroup %D \let\donottest=\dontprocesstest %D \ifundefined} %D %D \def\doifundefinedelse#1#2#3% %D {\p!doifundefined{#1}% %D \endgroup#2% %D \else %D \endgroup#3% %D \fi} %D \stoptyping %D %D A even more previous version used \type{\bgroup} and %D \type {\egroup}. In math mode however, \type{$1{x}2$} differs %D from \type{$1x2$}. This can been seen when one compares the %D output of: %D %D \starttyping %D $\kern10pt\showthe\lastkern$ %D $\kern10pt{\showthe\lastkern}$ %D $\kern10pt\begingroup\showthe\lastkern\endgroup$ %D \stoptyping %D %D Also in math mode, one can better use \type {\begingroup} %D and companion instead of \type {\bgroup}. %D %D When we were developing the scientific units module, we %D encountered different behavior in text and math mode, which %D was due to this grouping subtilities. We therefore decided %D to use \type{\begingroup} instead of \type{\bgroup}. %D Later, when we had optimized some macro's the grouped %D solution turned out to be unsafe when typesetting this %D documentation, especially when using \type{\globaldefs}. %D %D We still have to define \type{\doifalldefinedelse}. Watch %D the use of grouping, which garantees local use of the %D boolean \type{\ifdone}. \beginTEX \def\docheckonedefined#1% {\ifundefined{#1}% \donefalse \fi} \def\doifalldefinedelse#1% {\begingroup \let\donottest\dontprocesstest \donetrue \processcommalist[#1]\docheckonedefined \ifdone \endgroup\let\donottest\doprocesstest \expandafter\firstoftwoarguments \else \endgroup\let\donottest\doprocesstest \expandafter\secondoftwoarguments \fi} \endTEX \beginETEX \ifcsname \def\docheckonedefined#1% {\unless\ifcsname#1\endcsname \donefalse \fi} \def\doifalldefinedelse#1% {\begingroup \donetrue \processcommalist[#1]\docheckonedefined \ifdone \endgroup\expandafter\firstoftwoarguments \else \endgroup\expandafter\secondoftwoarguments \fi} \endETEX %D \macros %D {doif,doifelse,doifnot, %D donottest} %D %D Programming in \TEX\ differs from programming in procedural %D languages like \MODULA. This means that one --- well, let me %D speek for myself --- tries to do the things in the well %D known way. Therefore the next set of \type{\ifthenelse} %D commands were between the first ones we needed. A few years %D later, the opposite became true: when programming in %D \MODULA, I sometimes miss handy things like grouping, %D runtime redefinition, expansion etc. While \MODULA\ taught %D me to structure, \TEX\ taught me to think recursive. %D %D \starttyping %D \doif {string1} {string2} {...} %D \doifnot {string1} {string2} {...} %D \doifelse {string1} {string2} {then ...}{else ...} %D \stoptyping %D %D When expansion gives problems, we can precede the %D troublemaker with \type{\donottest}. %D %D This implementatie does not use the construction which is %D more robust for nested conditionals. %D %D \starttyping %D \ifx\!!stringa\!!stringb %D \def\next{#3}% %D \else %D \def\next{#4}% %D \fi %D \next %D \stoptyping %D %D In practice, this alternative is at least 20\% slower than %D the alternative used here. The few cases in which we %D really need the \type{\next} construction, often need some %D other precautions and or adaptions too. \beginTEX % \long\def\doif#1#2#3% % {\let\donottest\dontprocesstest % \edef\!!stringa{#1}% % \edef\!!stringb{#2}% % \let\donottest\doprocesstest % \ifx\!!stringa\!!stringb % #3% % \fi} % % \long\def\doifnot#1#2#3% % {\let\donottest\dontprocesstest % \edef\!!stringa{#1}% % \edef\!!stringb{#2}% % \let\donottest\doprocesstest % \ifx\!!stringa\!!stringb % \else % #3% % \fi} % % \long\def\doifelse#1#2#3#4% % {\let\donottest\dontprocesstest % \edef\!!stringa{#1}% % \edef\!!stringb{#2}% % \let\donottest\doprocesstest % \ifx\!!stringa\!!stringb % #3% % \else % #4% % \fi} %D Slightly faster on big arguments, as well as \type %D {\next} avoiding: \long\def\doif#1#2% {\let\donottest\dontprocesstest \edef\!!stringa{#1}% \edef\!!stringb{#2}% \let\donottest\doprocesstest \ifx\!!stringa\!!stringb \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\doifnot#1#2% {\let\donottest\dontprocesstest \edef\!!stringa{#1}% \edef\!!stringb{#2}% \let\donottest\doprocesstest \ifx\!!stringa\!!stringb \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \long\def\doifelse#1#2% {\let\donottest\dontprocesstest \edef\!!stringa{#1}% \edef\!!stringb{#2}% \let\donottest\doprocesstest \ifx\!!stringa\!!stringb \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \endTEX \beginETEX \protected % \long\def\doif#1#2#3% % {\edef\!!stringa{#1}\edef\!!stringb{#2}% % \ifx\!!stringa\!!stringb#3\fi} % % \long\def\doifnot#1#2#3% % {\edef\!!stringa{#1}\edef\!!stringb{#2}% % \unless\ifx\!!stringa\!!stringb#3\fi} % % \long\def\doifelse#1#2#3#4% % {\edef\!!stringa{#1}\edef\!!stringb{#2}% % \ifx\!!stringa\!!stringb#3\else#4\fi} %D Slightly faster on big arguments, as well as \type %D {\next} avoiding: \long\def\doif#1#2% {\edef\!!stringa{#1}\edef\!!stringb{#2}% \ifx\!!stringa\!!stringb \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\doifnot#1#2% {\edef\!!stringa{#1}\edef\!!stringb{#2}% \ifx\!!stringa\!!stringb \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \long\def\doifelse#1#2% {\edef\!!stringa{#1}\edef\!!stringb{#2}% \ifx\!!stringa\!!stringb \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \endETEX %D One could wonder why we don't follow the the same approach %D as in \type{\doifdefined} c.s.\ and use \type{\begingroup} %D and \type{\endgroup}. In this case, this alternative is %D slower, which is probably due to the fact that more meanings %D need to be restored. %D %D The in terms of memory more efficient alternative using a %D auxiliary macro also proved to be slower, so we definitely %D did not choose for: %D %D \starttyping %D \def\p!doifelse#1#2% %D {\let\donottest=\dontprocesstest %D \edef\!!stringa{#1}% %D \edef\!!stringb{#2}% %D \let\donottest=\doprocesstest %D \ifx\!!stringa\!!stringb} %D %D \long\def\doif#1#2#3% %D {\p!doifelse{#1}{#2}#3\fi} %D %D \long\def\doifnot#1#2#3% %D {\p!doifelse{#1}{#2}\else#3\fi} %D %D \long\def\doifelse#1#2#3#4% %D {\p!doifelse{#1}{#2}#3\else#4\fi} %D \stoptyping %D %D Optimizations like this are related of course to the %D bottlenecks in \TEX. It seems that restoring saved meanings %D and passing arguments takes some time. %D \macros %D {doifempty,doifemptyelse,doifnotempty} %D %D We complete our set of conditionals with: %D %D \starttyping %D \doifempty {string} {...} %D \doifnotempty {string} {...} %D \doifemptyelse {string} {then ...} {else ...} %D \stoptyping %D %D This time, the string is not expanded. \long\def\doifemptyelse#1% {\def\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \long\def\doifempty#1% {\def\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\doifnotempty#1% {\def\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D \macros %D {doifinset,doifnotinset,doifinsetelse} %D %D We can check if a string is present in a comma separated %D set of strings. Depending on the result, some action is %D taken. %D %D \starttyping %D \doifinset {string} {string,...} {...} %D \doifnotinset {string} {string,...} {...} %D \doifinsetelse {string} {string,...} {then ...} {else ...} %D \stoptyping %D %D The second argument is the comma separated set of strings. %D %D \starttyping %D \long\def\doifinsetelse#1#2#3#4% %D {\doifelse{#1}{} %D {#4} %D {\donefalse %D \def\p!checkiteminset##1% %D {\doif{#1}{##1} %D {\donetrue %D \let\p!checkiteminset=\gobbleoneargument}}% %D \processcommalist[#2]\p!checkiteminset %D \ifdone %D #3% %D \else %D #4% %D \fi}} %D %D \long\def\doifinset#1#2#3% %D {\doifinsetelse{#1}{#2}{#3}{}} %D %D \long\def\doifnotinset#1#2#3% %D {\doifinsetelse{#1}{#2}{}{#3}} %D \stoptyping %D %D Because this macro is called quite often we've spent some %D time optimizing it. This time, the gain in speed is due to %D (1)~defining an external auxiliary macro, (2)~not calling %D any other macros and (3)~minimizing the passing of %D arguments. The gain in speed is impressive. % \def\p!dodocheckiteminset#1% % {\edef\!!stringb{#1}% % \ifx\!!stringa\!!stringb % \donetrue % \let\p!docheckiteminset\gobbleoneargument % \fi} % % \beginTEX % % \def\p!doifinsetelse#1#2% % {\let\donottest\dontprocesstest % \donefalse % \edef\!!stringa{#1}% % \ifx\!!stringa\empty % \else % \let\p!docheckiteminset\p!dodocheckiteminset % \processcommalist[#2]\p!docheckiteminset % \fi % \let\donottest\doprocesstest % \ifdone} % % \endTEX % % \beginETEX \protected % % \def\p!doifinsetelse#1#2% % {\donefalse % \edef\!!stringa{#1}% % \ifx\!!stringa\empty % \else % \let\p!docheckiteminset\p!dodocheckiteminset % \processcommalist[#2]\p!docheckiteminset % \fi % \ifdone} % % \endETEX % then we had: % % \def\p!docheckiteminset#1% % {\edef\!!stringb{#1}% % \ifx\!!stringa\!!stringb % \donetrue % \expandafter\quitcommalist % \fi} % % \beginTEX % % \def\p!doifinsetelse#1#2% % {\let\donottest\dontprocesstest % \donefalse % \edef\!!stringa{#1}% % \ifx\!!stringa\empty % \else % \processcommalist[#2]\p!docheckiteminset % \fi % \let\donottest\doprocesstest % \ifdone} % % \endTEX % % % can be sped up with processnext... % % \beginETEX \protected % % \def\p!doifinsetelse#1#2% % {\donefalse % \edef\!!stringa{#1}% % \ifx\!!stringa\empty % \else % \processcommalist[#2]\p!docheckiteminset % \fi % \ifdone} % % \endETEX % % \long\def\doifinsetelse#1#2% % {\p!doifinsetelse{#1}{#2}% % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % \long\def\doifinset#1#2% % {\p!doifinsetelse{#1}{#2}% % \expandafter\firstofoneargument % \else % \expandafter\gobbleoneargument % \fi} % % \long\def\doifnotinset#1#2% % {\p!doifinsetelse{#1}{#2}% % \expandafter\gobbleoneargument % \else % \expandafter\firstofoneargument % \fi} % % now we have \def\p!docheckiteminset#1% {\edef\!!stringb{#1}% \ifx\!!stringa\!!stringb \donetrue \expandafter\quitcommalist \fi} \beginTEX \def\p!doifinsetelse#1#2#3#4% {\let\donottest\dontprocesstest \donefalse \edef\!!stringa{#3}% \ifx\!!stringa\empty \else \processcommalist[#4]\p!docheckiteminset \fi \let\donottest\doprocesstest \ifdone\expandafter#1\else\expandafter#2\fi} \endTEX \beginETEX \protected \def\p!doifinsetelse#1#2#3#4% {\donefalse \edef\!!stringa{#3}% \ifx\!!stringa\empty \else \processcommalist[#4]\p!docheckiteminset \fi \ifdone\expandafter#1\else\expandafter#2\fi} \endETEX \long\def\doifinsetelse {\p!doifinsetelse\firstoftwoarguments\secondoftwoarguments} \long\def\doifinset {\p!doifinsetelse\firstofoneargument\gobbleoneargument} \long\def\doifnotinset {\p!doifinsetelse\gobbleoneargument\firstofoneargument} %D \macros %D {doifcommon,doifnotcommon,doifcommonelse} %D %D Probably the most time consuming tests are those that test %D for overlap in sets of strings. %D %D \starttyping %D \doifcommon {string,...} {string,...} {...} %D \doifnotcommon {string,...} {string,...} {...} %D \doifcommonelse {string,...} {string,...} {then ...} {else ...} %D \stoptyping %D %D We show the slower alternative first, because it shows us %D how things are done. %D %D \starttyping %D \long\def\doifcommonelse#1#2#3#4% %D {\donefalse %D \def\p!docommoncheck##1% %D {\def\p!dodocommoncheck####1% %D {\doif{####1}{##1} %D {\donetrue %D \def\commalistelement{##1}% %D \let\p!docommoncheck=\gobbleoneargument %D \let\p!dodocommoncheck=\gobbleoneargument}}% %D \processcommalist[#2]\p!dodocommoncheck}% %D \processcommalist[#1]\p!docommoncheck %D \ifdone %D #3% %D \else %D #4% %D \fi} %D %D \long\def\doifcommon#1#2#3% %D {\doifcommonelse{#1}{#2}{#3}{}} %D %D \long\def\doifnotcommon#1#2#3% %D {\doifcommonelse{#1}{#2}{}{#3}} %D \stoptyping %D %D The processing time is shortened by getting the auxiliary %D macro to the outermost level and using less \type{\edef}'s. %D Sometimes it makes more sence to define local macro's not %D only because this way we can be sure that they are not %D redefined, but also because it shows the dependance. In %D compiled languages, this is no problem at all. It can even %D save us bytes and processing time. In interpreted languages %D like \TEX\ it nearly always slows down processing. % \def\p!dododocommoncheck#1% % {\edef\!!stringb{#1}% % \ifx\!!stringa\!!stringb % \donetrue % \let\p!docommoncheck\gobbleoneargument % \let\p!dodocommoncheck\gobbleoneargument % \fi} % % \beginTEX % % \def\p!doifcommonelse#1#2% % {\donefalse % \let\donottest\dontprocesstest % \let\p!dodocommoncheck\p!dododocommoncheck % \def\p!docommoncheck##1% % {\edef\!!stringa{##1}% % \def\commalistelement{##1}% % \processcommalist[#2]\p!dodocommoncheck}% % \processcommalist[#1]\p!docommoncheck % \let\donottest\doprocesstest % \ifdone} % % \endTEX % % \beginETEX \protected % % \def\p!doifcommonelse#1#2% % {\donefalse % \let\p!dodocommoncheck\p!dododocommoncheck % \def\p!docommoncheck##1% % {\edef\!!stringa{##1}% % \def\commalistelement{##1}% % \processcommalist[#2]\p!dodocommoncheck}% % \processcommalist[#1]\p!docommoncheck % \ifdone} % % \endETEX % \def\p!dodocommoncheck#1% % {\edef\!!stringb{#1}% % \ifx\!!stringa\!!stringb % \donetrue % \expandafter\quitprevcommalist % \fi} % % \beginTEX % % \def\p!doifcommonelse#1#2% % {\donefalse % \let\donottest\dontprocesstest % \def\p!docommoncheck##1% % {\edef\!!stringa{##1}% % \def\commalistelement{##1}% no let to stringa % \processcommalist[#2]\p!dodocommoncheck}% % \processcommalist[#1]\p!docommoncheck % \let\donottest\doprocesstest % \ifdone} % % \endTEX % % \beginETEX \protected % % \def\p!doifcommonelse#1#2% % {\donefalse % \def\p!docommoncheck##1% % {\edef\!!stringa{##1}% % \def\commalistelement{##1}% % \processcommalist[#2]\p!dodocommoncheck}% % \processcommalist[#1]\p!docommoncheck % \ifdone} % % \endETEX % % \long\def\doifcommonelse#1#2% % #3#4% % {\p!doifcommonelse{#1}{#2}% % #3\else#4\fi} % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} % % \long\def\doifcommon#1#2% % {\p!doifcommonelse{#1}{#2}% % \expandafter\firstofoneargument % \else % \expandafter\gobbleoneargument % \fi} % % \long\def\doifnotcommon#1#2% % {\p!doifcommonelse{#1}{#2}% % \expandafter\gobbleoneargument % \else % \expandafter\firstofoneargument % \fi} % todo: use dedicated done \def\p!dodocommoncheck#1% {\edef\!!stringb{#1}% \ifx\!!stringa\!!stringb \donetrue \expandafter\quitprevcommalist \fi} \beginTEX \def\p!doifcommonelse#1#2#3#4% {\donefalse \let\donottest\dontprocesstest \def\p!docommoncheck##1% {\edef\!!stringa{##1}% \def\commalistelement{##1}% no let to stringa \processcommalist[#4]\p!dodocommoncheck}% \processcommalist[#3]\p!docommoncheck \let\donottest\doprocesstest \ifdone\expandafter#1\else\expandafter#2\fi} \endTEX \beginETEX \protected \def\p!doifcommonelse#1#2#3#4% {\donefalse \def\p!docommoncheck##1% {\edef\!!stringa{##1}% \def\commalistelement{##1}% \processcommalist[#4]\p!dodocommoncheck}% \processcommalist[#3]\p!docommoncheck \ifdone\expandafter#1\else\expandafter#2\fi} \endETEX \def\doifcommonelse {\p!doifcommonelse\firstoftwoarguments\secondoftwoarguments} \def\doifcommon {\p!doifcommonelse\firstofoneargument \gobbleoneargument} \def\doifnotcommon {\p!doifcommonelse\gobbleoneargument \firstofoneargument} %D \macros %D {processcommalist,processcommacommand,quitcommalist, %D processcommalistwithparameters} %D %D We've already seen some macros that take care of comma %D separated lists. Such list can be processed with %D %D \starttyping %D \processcommalist[string,string,...]\commando %D \stoptyping %D %D The user supplied command \type{\commando} receives one %D argument: the string. This command permits nesting and %D spaces after commas are skipped. Empty sets are no problem. %D %D \startbuffer %D \def\dosomething#1{(#1)} %D %D 1: \processcommalist [\hbox{$a,b,c,d,e,f$}] \dosomething \par %D 2: \processcommalist [{a,b,c,d,e,f}] \dosomething \par %D 3: \processcommalist [{a,b,c},d,e,f] \dosomething \par %D 4: \processcommalist [a,b,{c,d,e},f] \dosomething \par %D 5: \processcommalist [a{b,c},d,e,f] \dosomething \par %D 6: \processcommalist [{a,b}c,d,e,f] \dosomething \par %D 7: \processcommalist [] \dosomething \par %D 8: \processcommalist [{[}] \dosomething \par %D \stopbuffer %D %D \typebuffer %D %D Before we show the result, we present the macro's: \newcount\commalevel \def\dododoprocesscommaitem {\csname\s!next\the\commalevel\endcsname} %\def\dodoprocesscommaitem% % {\ifx\nexttoken\blankspace % \let\nextcommaitem\redoprocesscommaitem % \else\ifx\nexttoken]% % \let\nextcommaitem\gobbleoneargument % \else % \let\nextcommaitem\dododoprocesscommaitem % \fi\fi % \nextcommaitem} % % faster ? \def\dodoprocesscommaitem {\ifx\nexttoken\blankspace \@EA\redoprocesscommaitem \else\ifx\nexttoken]% \@EAEAEA\gobbleoneargument \else \@EAEAEA\dododoprocesscommaitem \fi\fi} \def\doprocesscommaitem {\futurelet\nexttoken\dodoprocesscommaitem} %D Empty arguments are not processed. Empty items (\type{,,}) %D however are treated. We have to check for the special case %D \type{[{a,b,c}]}. %D %D \starttyping %D \def\processcommalist[% %D {\futurelet\nexttoken\docheckcommaitem} %D %D \def\docheckcommaitem% %D {\ifx\nexttoken]% %D \let\nextcommaitem\gobbletwoarguments %D \else\ifx\nexttoken\bgroup %D \let\nextcommaitem\doprocesscommalistA %D \else %D \let\nextcommaitem\doprocesscommalistB %D \fi\fi %D \nextcommaitem} %D %D \def\doprocesscommalistA#1#2]#3% %D {\global\advance\commalevel 1 %D \long\expandafter\def\csname\s!next\the\commalevel\endcsname##1,% %D {#3{##1}\doprocesscommaitem}% %D \doprocesscommaitem{#1}#2,]\relax %D \global\advance\commalevel -1 } %D %D \def\doprocesscommalistB#1]#2% %D {\global\advance\commalevel 1 %D \long\expandafter\def\csname\s!next\the\commalevel\endcsname##1,% %D {#2{##1}\doprocesscommaitem}% %D \doprocesscommaitem#1,]\relax %D \global\advance\commalevel -1 } %D \stoptyping %D %D However, this is not a the most straightforward solution! %D We can misuse one of \TEX's hidden features, and prepend %D and remove a \type {\relax}. By the way, although it %D involves less testing, this cleaner alternative is not %D faster. \def\processcommalist[% {\futurelet\nexttoken\docheckcommaitem} \def\docheckcommaitem {\ifx\nexttoken]% \expandafter\gobblethreearguments \else \expandafter\doprocesscommalist \fi \relax} % this one preserved the next {} \def\doprocesscommalist#1]#2% {\global\advance\commalevel \plusone \long\expandafter\def\csname\s!next\the\commalevel\endcsname##1,% {#2{##1}\doprocesscommaitem}% \@EA\dodoprocesscommaitem\gobbleoneargument#1,]\relax \global\advance\commalevel \minusone } %D One way of quitting a commalist halfway is: \def\quitcommalist {\begingroup\let\doprocesscommaitem\doquitcommalist} \def\doquitcommalist#1]% {\endgroup} \def\quitprevcommalist {\begingroup\let\doprocesscommaitem\doquitprevcommalist} \def\doquitprevcommalist#1]% {\let\doprocesscommaitem\doquitcommalist} %D The hack we used for checking the next character %D \type {\doifnextcharelse} is also used here. \def\:{\redoprocesscommaitem} \expandafter\def\: {\futurelet\nexttoken\dodoprocesscommaitem} %D The previous examples lead to: %D %D \getbuffer %D When a list is saved in a macro, we can use a construction %D like: %D %D \starttyping %D \expandafter\processcommalist\expandafter[\list]\command %D \stoptyping %D %D Such solutions suit most situations, but we wanted a bit %D more. %D %D \starttyping %D \processcommacommand[string,\stringset,string]\commando %D \stoptyping %D %D where \type{\stringset} is a predefined set, like: %D %D \starttyping %D \def\first{aap,noot,mies} %D \def\second{laatste} %D %D \processcommacommand[\first]\message %D \processcommacommand[\first,second,third]\message %D \processcommacommand[\first,between,\second]\message %D \stoptyping %D %D Commands that are part of the list are expanded, so the %D use of this macro has its limits. \def\processcommacommand[#1]% {\expanded{\processcommalist[#1]}} %D The argument to \type{\command} is not delimited. Because %D we often use \type{[]} as delimiters, we also have: %D %D \starttyping %D \processcommalistwithparameters[string,string,...]\command %D \stoptyping %D %D where \type{\command} looks like: %D %D \starttyping %D \def\command[#1]{... #1 ...} %D \stoptyping \def\processcommalistwithparameters[#1]#2% {\def\docommand##1{#2[##1]}% \processcommalist[#1]\docommand} %D \macros %D {processaction, %D processfirstactioninset, %D processallactionsinset} %D %D \CONTEXT\ makes extensive use of a sort of case or switch %D command. Depending of the presence of one or more provided %D items, some actions is taken. These macros can be nested %D without problems. %D %D \starttyping %D \processaction [x] [a=>\a,b=>\b,c=>\c] %D \processfirstactioninset [x,y,z] [a=>\a,b=>\b,c=>\c] %D \processallactionsinset [x,y,z] [a=>\a,b=>\b,c=>\c] %D \stoptyping %D %D We can supply both a \type{default} action and an action %D to be undertaken when an \type{unknown} value is met: %D %D \starttyping %D \processallactionsinset %D [x,y,z] %D [ a=>\a, %D b=>\b, %D c=>\c, %D default=>\default, %D unknown=>\unknown{... \commalistelement ...}] %D \stoptyping %D %D When \type{#1} is empty, this macro scans list \type{#2} for %D the keyword \type{default} and executed the related action %D if present. When \type{#1} is non empty and not in the list, %D the action related to \type{unknown} is executed. Both %D keywords must be at the end of list \type{#2}. Afterwards, %D the actually found keyword is available in %D \type{\commalistelement}. An advanced example of the use of %D this macro can be found in \PPCHTEX, where we completely %D rely on \TEX\ for interpreting user supplied keywords like %D \type{SB}, \type{SB1..6}, \type{SB125} etc. %D %D Even a quick glance at the macros below show some overlap, %D which means that more efficient alternatives are possible. %D Because these macro's are very sensitive to subtle changes, %D we've decided to present the readable originals first %D Maybe these these macros look complicated, but this is a %D direct result of the support of nesting. Protection is only %D applied in \type{\processaction}. %D %D \starttyping %D \newcount\processlevel %D %D \def\processaction[#1]#2[#3]% %D {\doifelse{#1}{} %D {\def\p!compareprocessaction[##1=>##2]% %D {\edef\!!stringa{##1}% %D \ifx\!!stringa\s!default %D \def\commalistelement{#1}% %D ##2% %D \fi}} %D {\let\donottest=\dontprocesstest %D \edef\!!stringb{#1}% %D \let\donottest=\doprocesstest %D \def\p!compareprocessaction[##1=>##2]% %D {\edef\!!stringa{##1}% %D \ifx\!!stringa\!!stringb %D \def\commalistelement{#1}% %D ##2% %D \let\p!doprocessaction=\gobbleoneargument %D \else\ifx\!!stringa\s!unknown %D \def\commalistelement{#1}% %D ##2% %D \fi\fi}}% %D \def\p!doprocessaction##1% %D {\p!compareprocessaction[##1]}% %D \processcommalist[#3]\p!doprocessaction} %D %D \def\processfirstactioninset[#1]#2[#3]% %D {\doifelse{#1}{} %D {\processaction[][#3]} %D {\def\p!compareprocessaction[##1=>##2][##3]% %D {\edef\!!stringa{##1}% %D \edef\!!stringb{##3}% %D \ifx\!!stringa\!!stringb %D \def\commalistelement{##3}% %D ##2% %D \let\p!doprocessaction=\gobbleoneargument %D \let\p!dodoprocessaction=\gobbleoneargument %D \else\ifx\!!stringa\s!unknown %D \def\commalistelement{##3}% %D ##2% %D \fi\fi}% %D \def\p!doprocessaction##1% %D {\def\p!dodoprocessaction####1% %D {\p!compareprocessaction[####1][##1]}% %D \processcommalist[#3]\p!dodoprocessaction}% %D \processcommalist[#1]\p!doprocessaction}} %D %D \def\processallactionsinset[#1]#2[#3]% %D {\doifelse{#1}{} %D {\processaction[][#3]} %D {\advance\processlevel by 1 %D \def\p!compareprocessaction[##1=>##2][##3]% %D {\edef\!!stringa{##1}% %D \edef\!!stringb{##3}% %D \ifx\!!stringa\!!stringb %D \def\commalistelement{##3}% %D ##2% %D \let\p!dodoprocessaction=\gobbleoneargument %D \else\ifx\!!stringa\s!unknown %D \def\commalistelement{##3}% %D ##2% %D \fi\fi}% %D \setvalue{\s!do\the\processlevel}##1% %D {\def\p!dodoprocessaction####1% %D {\p!compareprocessaction[####1][##1]}% %D \processcommalist[#3]\p!dodoprocessaction}% %D \processcommalist[#1]{\getvalue{\s!do\the\processlevel}}% %D \advance\processlevel by -1 }} %D \stoptyping %D %D The gain of speed in the (again) next implementation is %D around 20\%, depending on the application. \newcount\processlevel \def\p!compareprocessactionA[#1=>#2][#3]% {\edef\!!stringb{#1}% \ifx\!!stringb\s!default \let\commalistelement\empty #2% \fi} % \def\p!compareprocessactionB[#1=>#2][#3]% % {\expandedaction\!!stringb{#1}% % \ifx\!!stringa\!!stringb % \def\commalistelement{#3}% % #2% % \let\p!doprocessaction\gobbleoneargument % \else % \edef\!!stringb{#1}% % \ifx\!!stringb\s!unknown % \def\commalistelement{#3}% beware of loops % #2% % \fi % \fi} % met \quitcommalist tot meer dan 25\% sneller \def\p!compareprocessactionB[#1=>#2][#3]% {\expandedaction\!!stringb{#1}% \ifx\!!stringa\!!stringb \def\commalistelement{#3}% #2% \expandafter\quitcommalist \else \edef\!!stringb{#1}% \ifx\!!stringb\s!unknown \def\commalistelement{#3}% beware of loops #2% \fi \fi} \beginTEX \def\processaction[#1]#2[#3]% {\let\donottest\dontprocesstest \expandedaction\!!stringa{#1}% \let\donottest\doprocesstest \ifx\!!stringa\empty \let\p!compareprocessaction\p!compareprocessactionA \else \let\p!compareprocessaction\p!compareprocessactionB \fi \def\p!doprocessaction##1% {\p!compareprocessaction[##1][#1]}% \processcommalist[#3]\p!doprocessaction \expandactions} \endTEX \beginETEX \protected \def\processaction[#1]#2[#3]% faster version follows {\expandedaction\!!stringa{#1}% \ifx\!!stringa\empty \let\p!compareprocessaction\p!compareprocessactionA \else \let\p!compareprocessaction\p!compareprocessactionB \fi \def\p!doprocessaction##1% {\p!compareprocessaction[##1][#1]}% \processcommalist[#3]\p!doprocessaction \expandactions} \endETEX % \def\p!compareprocessactionC[#1=>#2][#3]% % {\expandedaction\!!stringa{#1}% % \expandedaction\!!stringb{#3}% % \ifx\!!stringa\!!stringb % \def\commalistelement{#3}% % #2% % \let\p!doprocessaction\gobbleoneargument % \let\p!dodoprocessaction\gobbleoneargument % \else % \edef\!!stringa{#1}% % \ifx\!!stringa\s!unknown % \def\commalistelement{#3}% % #2% % \fi % \fi} \def\p!compareprocessactionC[#1=>#2][#3]% {\expandedaction\!!stringa{#1}% \expandedaction\!!stringb{#3}% \ifx\!!stringa\!!stringb \def\commalistelement{#3}% #2% \expandafter\quitprevcommalist \else \edef\!!stringa{#1}% \ifx\!!stringa\s!unknown \def\commalistelement{#3}% #2% \fi \fi} \def\processfirstactioninset[#1]#2[#3]% faster version follows {\expandedaction\!!stringa{#1}% \ifx\!!stringa\empty \processaction[][#3]% \else \def\p!doprocessaction##1% {\def\p!dodoprocessaction####1% {\p!compareprocessactionC[####1][##1]}% \processcommalist[#3]\p!dodoprocessaction}% \processcommalist[#1]\p!doprocessaction \fi \expandactions} % \def\p!compareprocessactionD[#1=>#2][#3]% % {\expandedaction\!!stringa{#1}% % \expandedaction\!!stringb{#3}% % \ifx\!!stringa\!!stringb % \def\commalistelement{#3}% % #2% % \let\p!dodoprocessaction\gobbleoneargument % \else % \edef\!!stringa{#1}% % \ifx\!!stringa\s!unknown % \def\commalistelement{#3}% % #2% % \fi % \fi} \def\p!compareprocessactionD[#1=>#2][#3]% {\expandedaction\!!stringa{#1}% \expandedaction\!!stringb{#3}% \ifx\!!stringa\!!stringb \def\commalistelement{#3}% #2% \expandafter\quitcommalist \else \edef\!!stringa{#1}% \ifx\!!stringa\s!unknown \def\commalistelement{#3}% #2% \fi \fi} \def\doprocessallactionsinset {\csname\s!do\the\processlevel\endcsname} \def\processallactionsinset[#1]#2[#3]% faster version follows {\expandedaction\!!stringa{#1}% \ifx\!!stringa\empty \processaction[][#3]% \else \advance\processlevel \plusone \expandafter\def\csname\s!do\the\processlevel\endcsname##1% {\def\p!dodoprocessaction####1% {\p!compareprocessactionD[####1][##1]}% \processcommalist[#3]\p!dodoprocessaction}% \processcommalist[#1]\doprocessallactionsinset \advance\processlevel \minusone \fi \expandactions} %D We can speed up these macros a bit when we use a dedicated %D commalist processor, one that avoids passing the (often) %D big action list. \beginTEX \def\processaction[#1]#2[% {\let\donottest\dontprocesstest \expandedaction\!!stringa{#1}% \let\donottest\doprocesstest \ifx\!!stringa\empty \let\p!compareprocessaction\p!compareprocessactionA \else \let\p!compareprocessaction\p!compareprocessactionB \fi \def\p!doprocessaction##1% {\p!compareprocessaction[##1][#1]}% \processnextcommalist\relax\expandactions\p!doprocessaction[} \endTEX \beginETEX \def\processaction[#1]#2[% {\expandedaction\!!stringa{#1}% \ifx\!!stringa\empty \let\p!compareprocessaction\p!compareprocessactionA \else \let\p!compareprocessaction\p!compareprocessactionB \fi \def\p!doprocessaction##1% {\p!compareprocessaction[##1][#1]}% \processnextcommalist\relax\expandactions\p!doprocessaction[} \endETEX \def\processfirstactionsinset[#1]% {\expandedaction\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\processaction \else \expandafter\processfirstactionsinsetindeed \fi [#1]} \def\processfirstactioninsetindeed[#1]#2[#3]% {\def\p!doprocessaction##1% {\def\p!dodoprocessaction####1% {\p!compareprocessactionC[####1][##1]}% \processcommalist[#3]\p!dodoprocessaction}% \processcommalist[#1]\p!doprocessaction \expandactions} \def\processallactionsinset[#1]% {\expandedaction\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\processaction \else \expandafter\processallactionsinsetindeed \fi [#1]} \def\processallactionsinsetindeed[#1]#2[#3]% {\advance\processlevel \plusone \expandafter\def\csname\s!do\the\processlevel\endcsname##1% {\def\p!dodoprocessaction####1% {\p!compareprocessactionD[####1][##1]}% \processcommalist[#3]\p!dodoprocessaction}% \processcommalist[#1]\doprocessallactionsinset \advance\processlevel \minusone \expandactions} \def\processnextcommalist#1#2#3[#4#5]% {#1% \let\nexttoken#4% \global\advance\commalevel \plusone \long\expandafter\def\csname\s!next\the\commalevel\endcsname##1,% {#3{##1}\doprocesscommaitem}% \dodoprocesscommaitem#4#5,]\relax \global\advance\commalevel \minusone #2} %D I do have an even faster version (saving 3 sec on a 13 %D sec run for 50K invocations, but normally we don't have %D that many calls and that alternative uses more macros and is %D even less readable. What we did add, was \type {\@EA}, so %D that we can pass a command. %D \macros %D {unexpandedprocessaction, %D unexpandedprocessfirstactioninset, %D unexpandedprocessallactionsinset} %D %D Now what are those expansion commands doing there. Well, %D sometimes we want to compare actions that may consist off %D commands (i.e. are no constants). In such occasions we can %D use the a bit slower alternatives: \def\unexpandedprocessfirstactioninset{\dontexpandactions\processfirstactioninset} \def\unexpandedprocessaction {\dontexpandactions\processaction} \def\unexpandedprocessallactionsinset {\dontexpandactions\processallactionsinset} %D By default we expand actions: \def\expandactions{\let\expandedaction\edef} \expandactions %D But when needed we convert the strings to meaningful %D sequences of characters. \def\unexpandedaction#1>{} \def\noexpandedaction#1#2% {\def\@@convertedargument{#2}% \@EA\edef\@EA#1\@EA{\@EA\unexpandedaction\meaning\@@convertedargument}} \def\dontexpandactions% {\let\expandedaction\noexpandedaction} %D \macros %D {getfirstcharacter, firstcharacter, remainingcharacters, doiffirstcharacter} %D %D Sometimes the action to be undertaken depends on the %D next character. This macro get this character and puts it in %D \type{\firstcharacter}. %D %D \starttyping %D \getfirstcharacter {string} %D \stoptyping %D %D A two step expansion is used to prevent problems with %D complicated arguments, for instance arguments that %D consist of two or more expandable tokens. \def\dogetfirstcharacter#1#2\relax {\def\firstcharacter{#1}% \def\remainingcharacters{#2}} \def\getfirstcharacter#1% {\edef\!!stringa{#1}% \expandafter\dogetfirstcharacter\!!stringa\relax} \def\doiffirstcharelse#1#2% char string % kort (maar onleesbaar) % {\expanded{\dogetfirstcharacter#2}\\\doifelse{#1}\firstcharacter} % korter (en begrijpelijk)) {\getfirstcharacter{#2}\doifelse{#1}\firstcharacter} % snel (maar zelden gebruikt, dus niet zo belangrijk) % {\getfirstcharacter{#2}% % \edef\!!stringa{#1}% % \ifx\!!stringa\firstcharacter % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi} %D \macros %D {doifinstringelse, doifincsnameelse} %D %D We can check for the presence of a substring in a given %D sequence of characters. %D %D \starttyping %D \doifinsetelse {substring} {string} {then ...} {else ...} %D \stoptyping %D %D An application of this command can be found further on. %D Like before, we first show some alternatives, like the one %D we started with: %D %D \starttyping %D \long\def\p!doifinstringelse#1#2#3#4% %D {\def\pp!doifinstringelse##1#1##2##3\war% %D {\if##2@% %D #4% %D \else %D #3% %D \fi}% %D \pp!doifinstringelse#2#1@@\war} %D %D \def\doifinstringelse% %D {\ExpandBothAfter\p!doifinstringelse} %D \stoptyping %D %D After this we came to: %D %D \starttyping %D \def\p!doifinstringelse#1#2% %D {\def\pp!doifinstringelse##1#1##2##3\war% %D {\if##2@}% %D \pp!doifinstringelse#2#1@@\war} %D %D \def\doifinstringelse#1#2#3#4% %D {\ExpandBothAfter\p!doifinstringelse{#1}{#2}% %D #4% %D \else %D #3% %D \fi} %D \stoptyping %D %D Sometimes the second argument is passed as a macro. By %D postponing the expansion of this macro, we gain quite some %D run time, simply because the less tokens we pass, the faster %D \TEX\ runs. So finally the definition became: % \long\def\rawdoifinstringelse#1#2% ##2 can be {abc} % {\long\def\pp!doifinstringelse##1#1##2##3\war{\if##2@}% % \pp!doifinstringelse#2#1@@\war % \expandafter\secondoftwoarguments % \else % \expandafter\firstoftwoarguments % \fi} \long\def\doifinstringelse#1% {\edef\@@@instring{#1}% expand #1 here \ifx\@@@instring\empty \@EA\thirdofthreearguments \else \@EA\dodoifinstringelse \fi} \long\def\dodoifinstringelse#1% {\p!doifinstringelse\@@@instring{#1}% \@EA\firstoftwoarguments \else \@EA\secondoftwoarguments \fi} \long\def\doifinstring#1%% {\edef\@@@instring{#1}% expand #1 here \ifx\@@@instring\empty \@EA\gobbletwoarguments \else \@EA\dodoifinstring \fi} \long\def\dodoifinstring#1% {\p!doifinstringelse\@@@instring{#1}% \@EA\firstofoneargument \else \@EA\gobbleoneargument \fi} \long\def\doifnotinstring#1%% {\edef\@@@instring{#1}% expand #1 here \ifx\@@@instring\empty \@EA\gobbletwoarguments \else \@EA\dodoifnotinstring \fi} \long\def\dodoifnotinstring#1% {\p!doifinstringelse\@@@instring{#1}% \@EA\gobbleoneargument \else \@EA\firstofoneargument \fi} %D \starttyping %D \beginTEX %D %D \long\def\p!doifinstringelse#1#2% %D {\long\def\pp!doifinstringelse##1#1##2##3\war% %D {\csname if\if##2@fals\else tru\fi e\endcsname}% %D \expanded{\pp!doifinstringelse#2#1@@\noexpand\war}} % expand #2 here %D %D \endTEX %D %D \beginETEX \unless %D %D \long\def\p!doifinstringelse#1#2% %D {\long\def\pp!doifinstringelse##1#1##2##3\war% %D {\unless\if##2@}% %D \expanded{\pp!doifinstringelse#2#1@@\noexpand\war}} % expand #2 here %D %D \endETEX %D \stoptyping %D %D And then \unknown\ after a couple of years, we ran into a %D situation where \type {##2} was something \type {{bla}}. So %D finally we need to use an auxiliary macro, otherwise we get %D funny strings in the output. % \long\def\p!doifinstringelse#1#2% ##2 can be {abc} % {\long\@EA\def\@EA\pp!doifinstringelse\@EA##\@EA1#1##2##3\war % expand #1 here % {\ppp!doifinstringelse##2\war}% % \expanded{\pp!doifinstringelse#2#1@@\noexpand\war}} % expand #2 here % % \beginTEX % % \def\ppp!doifinstringelse#1#2\war% % {\csname if\ifx#1@fals\else tru\fi e\endcsname}% % % \endTEX % % \beginETEX \unless % % \def\ppp!doifinstringelse#1#2\war% % {\unless\ifx#1@} % % \endETEX \beginETEX \long\def\p!doifinstringelse#1#2% ##2 can be {abc} {\long\@EA\def\@EA\pp!doifinstringelse\@EA##\@EA1#1##2##3\war % expand #1 here {\unless\if##2@}% % \expanded{\pp!doifinstringelse#2#1@@\noexpand\war}} % expand #2 here \expanded{\pp!doifinstringelse#2#1}@@\war} % expand #2 here \endETEX \beginTEX \long\def\p!doifinstringelse#1#2% ##2 can be {abc} {\long\@EA\def\@EA\pp!doifinstringelse\@EA##\@EA1#1##2##3\war % expand #1 here {\csname if\if##2@fals\else tru\fi e\endcsname}% %\expanded{\pp!doifinstringelse#2#1@@\noexpand\war}} % expand #2 here \expanded{\pp!doifinstringelse#2#1}@@\war} % expand #2 here \endTEX %D The next alternative proved to be upto twice as fast on %D tasks like checking reserved words in pretty verbatim %D typesetting! This is mainly due to the fact that passing %D (expanded) strings is much slower that passing a macro. %D %D \starttyping %D \doifincsnameelse {substring} {\string} {then ...} {else ...} %D \stoptyping %D %D Where \type{\doifinstringelse} does as much expansion as %D possible, the latter alternative does minimal (one level) %D expansion. \beginTEX \long\def\p!doifincsnameelse#1#2% {\long\def\pp!doifincsnameelse##1#1##2##3\war {\csname if\if##2@fals\else tru\fi e\endcsname}% \@EA\pp!doifincsnameelse#2#1@@\war} \endTEX \beginETEX \unless \long\def\p!doifincsnameelse#1#2% {\long\def\pp!doifincsnameelse##1#1##2##3\war {\unless\if##2@}% \@EA\pp!doifincsnameelse#2#1@@\war} \endETEX \long\def\doifincsnameelse#1#2% % #3#4% {\edef\@@@instring{#1}% \@EA\p!doifincsnameelse\@EA{\@@@instring}{#2}% % #3\else#4\fi} \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifnumberelse} %D %D The next macro executes a command depending of the outcome %D of a test on numerals. This is probably one of the fastest %D test possible, exept from a less robust 10||step %D \type{\if}||ladder or some tricky \type{\lcode} checking. %D %D \starttyping %D \doifnumberelse {string} {then ...} {else ...} %D \stoptyping %D %D The macro accepts \type{123}, \type{abc}, \type{{}}, %D \type{\getal} and \type{\the\count...}. This macro is a %D rather dirty one. %D %D \starttyping %D \long\def\doifnumberelse#1#2#3% %D {\begingroup\donefalse %D \ifcase1#1\or\or\or\or\or\or\or\or\or\else\donetrue\fi %D \ifdone\endgroup#2\else\endgroup#3\fi} %D \stoptyping %D %D Or better: %D %D \starttyping %D \long\def\doifnumberelse#1% %D {\begingroup\donefalse %D \ifcase1#1\or\or\or\or\or\or\or\or\or\else\donetrue\fi %D \ifdone %D \endgroup\expandafter\firstoftwoarguments %D \else %D \endgroup\expandafter\secondoftwoarguments %D \fi} %D \stoptyping %D %D A previous implementation was: %D %D \starttyping %D \long\def\doifnumberelse#1#2#3% %D {\getfirstcharacter{#1}% %D \@EA\p!doifinstringelse\@EA{\firstcharacter}{1234567890}% %D #2% %D \else %D #3% %D \fi} %D \stoptyping %D %D And before we had \type{\p!doifinstringelse} available, we %D used: %D %D \starttyping %D \def\doifnumberelse#1% %D {\getfirstcharacter{#1}% %D \rawdoifinsetelse{\firstcharacter}{1,2,3,4,5,6,7,8,9,0}} %D \stoptyping %D %D The implementation using \type {\ifcase} is much faster, but %D the next one is not, not even when testing milion calls. %D %D \starttyping %D \newif\ifitsanumber %D %D \long\def\isitanumber#1% %D {\itsanumberfalse %D \ifcase1#1\or\or\or\or\or\or\or\or\or\else\itsanumbertrue\fi} %D %D \long\def\doifnumberelse#1#2#3% %D {\isitanumber{#1}\ifitsanumber#2\else#3\fi} %D \stoptyping %D %D After a while the next evolved and this one is the one we %D will use. This one is some 5\% faster than the group/done %D one (partly because it does not have to pass arguments). %D Even more important is that this alternative is fully %D expandable! \long\def\doifnumberelse#1% does not accept counters {\ifcase0\ifcase1#1\or\or\or\or\or\or\or\or\or\else1\fi\space \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} %D \macros %D {makerawcommalist, %D rawdoinsetelse, %D rawprocesscommalist, %D rawprocessaction} %D %D Some of the commands mentioned earlier are effective but %D slow. When one is desperately in need of faster alternatives %D and when the conditions are predictable safe, the \type{\raw} %D alternatives come into focus. A major drawback is that %D they do not take \type{\c!constants} into account, simply %D because no expansion is done. This is no problem with %D \type{\rawprocesscommalist}, because this macro does not %D compare anything. Expandable macros are permitted as search %D string. %D %D \starttyping %D \makerawcommalist[string,string,...]\stringlist %D \rawdoifinsetelse{string}{string,...}{...}{...} %D \rawprocesscommalist[string,string,...]\commando %D \rawprocessaction[x][a=>\a,b=>\b,c=>\c] %D \stoptyping %D %D Spaces embedded in the list, for instance after commas, %D spoil the search process. The gain in speed depends on the %D length of the argument (the longer the argument, the less %D we gain). %D %D The slow alternative looks like: %D %D \starttyping %D \def\makerawcommalist[#1]#2% %D {\def\appendtocommalist##1% %D {\doifelse{#2}{} %D {\edef#2{##1}} %D {\edef#2{#2,##1}}}% %D \def#2{}% %D \processcommalist[#1]\appendtocommalist} %D \stoptyping %D %D But we prefer: % \appendtocommalist is defined in syst-ext \def\makerawcommalist[#1]#2% use \processnext ... here {\def\domakerawcommalist##1% we don't expand ##1 {\ifx#2\empty \def#2{##1}% \else \@EA\def\@EA#2\@EA{#2,##1}% \fi}% \let#2\empty \processcommalist[#1]\domakerawcommalist} \def\rawprocesscommaitem#1,#2% #2 eats up preceding space {\if]#1\else \csname\s!next\the\commalevel\endcsname{#1}% \expandafter\rawprocesscommaitem \fi#2} \def\rawprocesscommalist[#1]#2% accepteert ook [\cs] {\global\advance\commalevel \plusone \expandafter\let\csname\s!next\the\commalevel\endcsname#2% \expandafter\rawprocesscommaitem#1,],% \relax \global\advance\commalevel \minusone } \def\rawprocesscommacommand[#1]% not really needed {\expanded{\rawprocesscommalist[#1]}} % \def\rawdoifinsetelse#1#2{\doifinstringelse{,#1,}{,#2,}} % \def\rawdoifinset #1#2{\doifinstring {,#1,}{,#2,}} \def\@@rawempty{,,} \long\def\rawdoifinsetelse#1% {\edef\@@@instring{,#1,}% expand #1 here \ifx\@@@instring\@@rawempty \@EA\thirdofthreearguments \else \@EA\rawdodoifinsetelse \fi} \long\def\rawdodoifinsetelse#1% {\p!doifinstringelse\@@@instring{,#1,}% \@EA\firstoftwoarguments \else \@EA\secondoftwoarguments \fi} \long\def\rawdoifinset#1% {\edef\@@@instring{,#1,}% expand #1 here \ifx\@@@instring\@@rawempty \@EA\gobbletwoarguments \else \@EA\rawdodoifinset \fi} \long\def\rawdodoifinset#1%% {\p!doifinstringelse\@@@instring{,#1,}% \@EA\firstofoneargument \else \@EA\gobbleoneargument \fi} %D Some more raw material: \def\p!rawprocessaction[#1][#2]% {\def\pp!rawprocessaction##1,#1=>##2,##3\war% {\if##3@\else \def\!!processaction{##2}% \fi}% \pp!rawprocessaction,#2,#1=>,@\war} \def\rawprocessaction[#1]#2[#3]% {\edef\!!stringa{#1}% \edef\!!stringb{undefined}% better \!!undefined \let\!!processaction\!!stringb \ifx\!!stringa\empty \@EA\p!rawprocessaction\@EA[\s!default][#3]% \else \expandafter\p!rawprocessaction\expandafter[\!!stringa][#3]% \ifx\!!processaction\!!stringb \@EA\p!rawprocessaction\@EA[\s!unknown][#3]% \fi \fi \ifx\!!processaction\!!stringb \else \!!processaction \fi} % not needed % % \def\rawprocessallactionsinset[#1]#2[#3]% % {\def\docommand##1% % {\rawprocessaction[##1][#3]}% % \processcommalist[#1]\docommand} %D When we process the list \type{a,b,c,d,e}, the raw routine %D takes over 30\% less time, when we feed $20+$ character %D strings we gain about 20\%. Alternatives which use %D \type{\futurelet} perform worse. Part of the speedup is %D due to the \type{\let} and \type{\expandafter} in the test. % %D \macros % %D {processunexpandedcommalist} % %D % %D When processing commalists, the arguments are expanded. The % %D main reason for doing so lays in the fact that these % %D macros are used for interfacing. The next alternative can be used % %D for % %D % %D \starttyping % %D \processunexpandedcommalist % %D [\alfa\beta,\gamma,\delta\epsilon] % %D \handleitem % %D \stoptyping % %D % %D This time nesting is not supported. % % %\def\processunexpandedcommaitem#1,% % % {\if]\noexpand#1% % % \let\nextcommaitem\relax % % \else % % \handleunexpandedcommaitem{#1}% % % \let\nextcommaitem\processunexpandedcommaitem % \fi % \nextcommaitem} % % faster: % % \def\processunexpandedcommaitem#1,% % {\if]\noexpand#1\else % \handleunexpandedcommaitem{#1}% % \expandafter\processunexpandedcommaitem % \fi} % % \def\processunexpandedcommalist[#1]#2% % {\def\handleunexpandedcommaitem{#2}% % \processunexpandedcommaitem#1,],}% \relax} % % %D Or faster: % % \def\processunexpandedcommaitem#1,% % {\if]\noexpand#1\else % \handleunexpandedcommaitem{#1}% % \expandafter\processunexpandedcommaitem % \fi} %D \macros %D {dosetvalue,dosetevalue,dosetgvalue,docopyvalue,doresetvalue, %D dogetvalue} %D %D When we are going to do assignments, we have to take %D multi||linguality into account. For the moment we keep %D things simple and single||lingual. %D %D \starttyping %D \dosetvalue {label} {variable} {value} %D \dosetevalue {label} {variable} {value} %D \dosetgvalue {label} {variable} {value} %D \docopyvalue {to label} {from label} {variable} %D \doresetvalue {label} {variable} %D \stoptyping %D %D These macros are in fact auxiliary ones and are not meant %D for use outside the assignment macros. \def\dosetvalue#1#2% #3 {\@EA\def\csname#1#2\endcsname} % {#3}} \def\dosetevalue#1#2% #3 {\@EA\edef\csname#1#2\endcsname} % {#3}} \def\dosetgvalue#1#2% #3 {\@EA\gdef\csname#1#2\endcsname} % {#3}} \def\doresetvalue#1#2% {\@EA\let\csname#1#2\endcsname\empty} \def\doignorevalue#1#2#3% {\@EA\let\csname#1#2\endcsname\empty} \def\docopyvalue#1#2#3% {\@EA\def\csname#1#3\endcsname{\csname#2#3\endcsname}} %D \macros %D {doassign,undoassign,doassignempty} %D %D Assignments are the backbone of \CONTEXT. Abhorred by the %D concept of style file hacking, we took a considerable effort %D in building a parameterized system. Unfortunately there is a %D price to pay in terms of speed. Compared to other packages %D and taking the functionality of \CONTEXT\ into account, the %D total size of the format file is still very acceptable. Now %D how are these assignments done. %D %D Assignments can be realized with: %D %D \starttyping %D \doassign[label][variable=value] %D \undoassign[label][variable=value] %D \stoptyping %D %D and: %D %D \starttyping %D \doassignempty[label][variable=value] %D \stoptyping %D %D Assignments like \type{\doassign} are compatible with: %D %D \starttyping %D \def\labelvariable{value} %D \stoptyping %D %D We do check for the presence of an \type{=} and loudly %D complain of it's missed. We will redefine this macro later %D on, when a more advanced message mechanism is implemented. \newif\iferrorisfatal \def\waitonfatalerror {\iferrorisfatal\wait\fi} \def\showassignerror#1#2% {\writestatus{setup}{missing or ungrouped '=' after '#1' in line #2}% \waitonfatalerror} %\def\p!doassign#1[#2][#3=#4=#5]% % {\let\donottest\dontprocesstest % \edef\!!stringa{#5}% % \let\!!stringb\relax % \let\donottest\doprocesstest % \ifx\!!stringa\!!stringb % \showassignerror{#3}% % \else % #1{#2}{#3}{#4}% % \fi} \def\p!doassign#1[#2][#3=#4=#5]% {\ifx\empty#3\else % and definitely not \ifx#3\empty \ifx\relax#5% \showassignerror{#3}{\the\inputlineno\space(#2)}% \else #1{#2}{#3}{#4}% \fi \fi} \def\doassign [#1][#2]{\p!doassign\dosetvalue [#1][#2==\relax]} \def\doeassign [#1][#2]{\p!doassign\dosetevalue [#1][#2==\relax]} \def\undoassign[#1][#2]{\p!doassign\doresetvalue[#1][#2==\relax]} \def\doassignempty[#1][#2=#3]% {\ifundefined{#1#2}\dosetvalue{#1}{#2}{#3}\fi} %D \macros %D {processassignmentlist,processassignmentcommand, %D startprocessassignmentlist,startprocessassignmentcommand} %D %D For Wolfgang: %D %D \starttyping %D \def\showpair#1#2{key:#1, value:#2\par} %D \processassignmentlist[a=1,b=2]\showpair %D \stoptyping \def\processassignmentlist[#1]#2% #2 == \command{key}{value] {\def\doprocessassignmententry##1{#2}% {##2}{##3} % namespace is ignored \dogetparameters\doprocessassignmententry[][#1]} \def\processassignmentcommand[#1]% {\normalexpanded{\noexpand\processassignmentlist[#1]}} \long\def\startprocessassignmentlist[#1]#2\stopprocessassignmentlist {\long\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}% \processassignmentlist[#1]\currentassignmentlistcommand} \long\def\startprocessassignmentcommand[#1]#2\stopprocessassignmentcommand {\long\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}% \normalexpanded{\noexpand\processassignmentlist[#1]}\currentassignmentlistcommand} %D \macros %D {getparameters,geteparameters,getgparameters, %D forgetparameters} %D %D Using the assignment commands directly is not our %D ideal of user friendly interfacing, so we take some further %D steps. %D %D \starttyping %D \getparameters [label] [...=...,...=...] % %D \forgetparameters [label] [...=...,...=...] %D \stoptyping %D %D Again, the label identifies the category a variable %D belongs to. The second argument can be a comma separated %D list of assignments. %D %D \starttyping %D \getparameters %D [demo] %D [alfa=1, %D beta=2] %D \stoptyping %D %D is equivalent to %D %D \starttyping %D \def\demoalfa{1} %D \def\demobeta{2} %D \stoptyping %D %D %D In the pre||multi||lingual stadium \CONTEXT\ took the next %D approach. With %D %D \starttyping %D \def\??demo {@@demo} %D \def\!!alfa {alfa} %D \def\!!beta {beta} %D \stoptyping %D %D calling %D %D \starttyping %D \getparameters %D [\??demo] %D [\!!alfa=1, %D \!!beta=2] %D \stoptyping %D %D lead to: %D %D \starttyping %D \def\@@demoalfa{1} %D \def\@@demobeta{2} %D \stoptyping %D %D Because we want to be able to distinguish the \type{!!} %D pre||tagged user supplied variables from internal %D counterparts, we will introduce a slightly different tag in %D the multi||lingual modules. There we will use \type{c!} or %D \type{v!}, depending on the context. %D %D By calling \type{\p!doassign} directly, we save ourselves %D some argument passing and gain some speed. Whatever %D optimizations we do, this command will always be one of the %D bigger bottlenecks. %D %D The alternative \type{\geteparameters} --- it's funny to %D see that this alternative saw the light so lately --- can be %D used to do expanded assigments. \def\dogetparameters#1[#2]#3[#4]% {\def\p!dogetparameter##1% {\p!doassign#1[#2][##1==\relax]}% \processcommalist[#4]\p!dogetparameter} \def\getparameters {\dogetparameters\dosetvalue} \def\geteparameters {\dogetparameters\dosetevalue} \def\getgparameters {\dogetparameters\dosetgvalue} \def\forgetparameters{\dogetparameters\doignorevalue} \let\getexpandedparameters=\geteparameters %D This one is slightly faster: \def\dogetparameters#1[#2]#3[#4% {\if\noexpand#4]% \expandafter\gobbleoneargument \else \def\p!dogetparameter##1{\p!doassign#1[#2][##1==\relax]}% \expandafter\xdogetparameters \fi#4} \def\xdogetparameters#1]% {\processcommalist[#1]\p!dogetparameter} %D The next alternative is much faster but also uglier. Because %D in \XML\ processing we will probably set much more parameters %D than normally we need this faster one. \def\dogetparameters#1[#2]#3[#4% {\if\noexpand#4]% \expandafter\gobbleoneargument \else \def\p!dogetparameter{\p!doassign#1#2}% \expandafter\xdogetparameters \fi#4} \def\xdogetparameters#1]% {\xprocesscommaitem#1,],\@relax@} % \long\def\xprocesscommaitem#1,#2% #2 takes space before , % {\if]#1% % \expandafter\gobbleoneargument % \else % \p!dogetparameter\@relax@#1==\@relax@ % \expandafter\xprocesscommaitem % \fi#2} \long\def\xprocesscommaitem#1,#2% #2 takes space before , {\if,#1,% dirty trick for testing #1=empty \@EA\xprocesscommaitem \else\if]#1% \@EAEAEA\gobbleoneargument \else \p!dogetparameter\@relax@#1==\empty\@relax@ \@EAEAEA\xprocesscommaitem \fi\fi#2} %D Here we use a slightly different assignment macro: % \def\p!doassign#1#2\@relax@#3=#4=#5\@relax@ % {\ifx\@relax@#5\@EA\xshowassignerror\else\@EA#1\fi{#2}{#3}{#4}} % \def\p!doassign#1#2\@relax@#3=#4=#5\@relax@ % {\ifx#5\empty\@EA\xshowassignerror\else\@EA#1\fi{#2}{#3}{#4}} \def\p!doassign#1#2\@relax@#3=#4=#5#6\@relax@ {\ifx#5\empty \@EA\xshowassignerror \else\ifx#5=% \@EAEAEA#1% \else \@EAEAEA\xshowassignerror \fi\fi {#2}{#3}{#4}} \def\xshowassignerror#1#2#3% {\showassignerror{#2}{\the\inputlineno\space(#1)}} %D Now we also have to change the other macros that depend %D on this low level one. % \def\doassign [#1][#2]{\p!doassign\dosetvalue #1\@relax@#2==\@relax@} % \def\doeassign [#1][#2]{\p!doassign\dosetevalue #1\@relax@#2==\@relax@} % \def\undoassign[#1][#2]{\p!doassign\doresetvalue#1\@relax@#2==\@relax@} \def\doassign [#1][#2]{\p!doassign\dosetvalue #1\@relax@#2==\empty\@relax@} \def\doeassign [#1][#2]{\p!doassign\dosetevalue #1\@relax@#2==\empty\@relax@} \def\undoassign[#1][#2]{\p!doassign\doresetvalue#1\@relax@#2==\empty\@relax@} %D When someone asked on the mailing list if it's possible to %D use the current value of a parameter, Taco posted a small module. His %D method had the disadvantage of making all assignments expanded and thereby %D fragile. The following alternative uses a prefix. %D \macros{currentvalue} %D %D Just in case a \type{\getparameter} argument itself ends up %D inside a \type{\write} or other expandable location, our %D new macro needs a default value. \let\currentvalue\empty % \def\p!n!doassign#1#2\@relax@#3=#4=#5#6\@relax@% normal % {\ifx#5\empty % \@EA\xshowassignerror % \else\ifx#5=% % \@EAEAEA#1% % \else % \@EAEAEA\xshowassignerror % \fi\fi % {#2}{#3}{#4}} \def\p!n!doassign#1#2\@relax@#3=#4=#5#6\@relax@ {\ifx\empty#3\empty \@EA\xshowassignerror \else\ifx#5\empty \@EAEAEA\xshowassignerror \else \@EAEAEA#1% \fi\fi {#2}{#3}{#4}} \beginTEX % \def\p!e!doassign#1#2\@relax@#3=#4=#5#6\@relax@ % {\ifx#5\empty % \@EA\xshowassignerror % \else\ifx#5=% % \@EA\ifx\csname#2#3\endcsname\relax % \let\currentvalue\empty % \else % \@EA\let\@EA\currentvalue\csname#2#3\endcsname % \fi % \@EAEAEA#1% % \else % \@EAEAEA\xshowassignerror % \fi\fi % {#2}{#3}{#4}} \def\p!e!doassign#1#2\@relax@#3=#4=#5#6\@relax@ {\ifx\empty#3\empty \@EA\xshowassignerror \else\ifx#5\empty \@EAEAEA\xshowassignerror \else \@EA\ifx\csname#2#3\endcsname\relax \let\currentvalue\empty \else \@EA\let\@EA\currentvalue\csname#2#3\endcsname \fi \@EAEAEA#1% \fi\fi {#2}{#3}{#4}} \endTEX \beginETEX % \def\p!e!doassign#1#2\@relax@#3=#4=#5#6\@relax@ % {\ifx#5\empty % \@EA\xshowassignerror % \else\ifx#5=% % \ifcsname#2#3\endcsname % \@EA\let\@EA\currentvalue\csname#2#3\endcsname % \else % \let\currentvalue\empty % \fi % \@EAEAEA#1% % \else % \@EAEAEA\xshowassignerror % \fi\fi % {#2}{#3}{#4}} \def\p!e!doassign#1#2\@relax@#3=#4=#5#6\@relax@ {\ifx\empty#3\empty \@EA\xshowassignerror \else\ifx#5\empty \@EAEAEA\xshowassignerror \else \ifcsname#2#3\endcsname \@EA\let\@EA\currentvalue\csname#2#3\endcsname \else \let\currentvalue\empty \fi \@EAEAEA#1% \fi\fi {#2}{#3}{#4}} \endETEX %D We default to: \let\p!doassign\p!n!doassign %D And set: \let\currentvalue\empty %D \macros {expandparameters} %D %D Example usage: %D %D \startbuffer %D \getparameters[taco][name=taco] %D \convertcommand\taconame\to\ascii \ascii %D \expandparameters \getparameters[taco][name=\currentvalue\space hoekwater] %D \convertcommand\taconame\to\ascii \ascii %D \getparameters[taco][name=\currentvalue\space hoekwater] %D \convertcommand\taconame\to\ascii \ascii %D \stopbuffer %D %D \typebuffer %D \startlines %D \getbuffer %D \stoplines %D Here we hook in the code (beware, this is the optimized get **): \def\xdoget@n@parameters#1]% {\xprocesscommaitem#1,],\@relax@} \def\xdoget@e@parameters#1]% {\let\dosetnvalue\dosetvalue \let\dosetvalue\dosetevalue \let\p!doassign\p!e!doassign \xprocesscommaitem#1,],\@relax@ \let\p!doassign\p!n!doassign \let\dosetvalue\dosetnvalue \let\xdogetparameters\xdoget@n@parameters \let\currentvalue\empty} \let\xdogetparameters\xdoget@n@parameters % ** \def\expandparameters{\let\xdogetparameters\xdoget@e@parameters} %D \macros %D {getemptyparameters} %D %D Sometimes we explicitly want variables to default to an %D empty string, so we welcome: %D %D \starttyping %D \getemptyparameters [label] [...=...,...=...] %D \stoptyping \def\getemptyparameters[#1]#2[#3]% {\def\p!dogetemptyparameter##1% {\doassignempty[#1][##1]}% \processcommalist[#3]\p!dogetemptyparameter} %D \macros %D {copyparameters} %D %D Some \CONTEXT\ commands take their default setups from %D others. All commands that are able to provide backgounds %D or rules around some content, for instance default to the %D standard command for ruled boxes. Is situations like this %D we can use: %D %D \starttyping %D \copyparameters [to-label] [from-label] [name1,name2,...] %D \stoptyping %D %D For instance %D %D \starttyping %D \copyparameters %D [internal][external] %D [alfa,beta] %D \stoptyping %D %D Leads to: %D %D \starttyping %D \def\internalalfa {\externalalfa} %D \def\internalbeta {\externalbeta} %D \stoptyping %D %D By using \type{\docopyvalue} we've prepared this command %D for use in a multi||lingual environment. \def\copyparameters[#1]#2[#3]#4[#5]% {\doifnot{#1}{#3} {\def\docopyparameter{\docopyvalue{#1}{#3}}% %\def\docopyparameter##1{\docopyvalue{#1}{#3}{##1}}% \processcommalist[#5]\docopyparameter}} %D \macros %D {ifparameters,checkparameters} %D %D A slightly different one is \type{\checkparameters}, which %D also checks on the presence of a~\type{=}. %D %D The boolean \type{\ifparameters} can be used afterwards. %D Combining both in one \type{\if}||macro would lead to %D problems with nested \type{\if}'s. %D %D \starttyping %D \checkparameters[argument] %D \stoptyping \newif\ifparameters \def\p!checkparameters#1=#2#3\war% {\if#2@\parametersfalse\else\parameterstrue\fi} \def\checkparameters[#1]% {\p!checkparameters#1=@@\war} %D \macros %D {getfromcommalist,getfromcommacommand, %D commalistelement, %D getcommalistsize,getcommacommandsize} %D %D It's possible to get an element from a commalist or a %D command representing a commalist. %D %D \starttyping %D \getfromcommalist [string] [n] %D \getfromcommacommand [string,\strings,string,...] [n] %D \stoptyping %D %D The difference betwee the two of them is the same as the %D difference between \type{\processcomma...}. The found string %D is stored in \type{\commalistelement}. %D %D We can calculate the size of a comma separated list by %D using: %D %D \starttyping %D \getcommalistsize [string,string,...] %D \getcommacommandsize [string,\strings,string,...] %D \stoptyping %D %D Afterwards, the length is available in the macro %D \type{\commalistsize} (not a \COUNTER). \newcount\commalistcounter \def\commalistsize{0} \def\p!dogetcommalistsize#1% {\advance\commalistcounter\plusone} \def\getcommalistsize#1]% don't loose [{#1}] {\commalistcounter\zerocount \processcommalist#1]\p!dogetcommalistsize % was [{#1}] \edef\commalistsize{\the\commalistcounter}} \def\getcommacommandsize[#1]% {\edef\commacommand{#1}% \scratchtoks\expandafter{\expandafter[\commacommand]}% \expandafter\getcommalistsize\the\scratchtoks } % to be tested first % % \def\getcommacommandsize[#1]% % {\expanded{\getcommalistsize[#1]}} % \def\p!dogetfromcommalist#1% % {\advance\commalistcounter \minusone % \ifcase\commalistcounter % \def\commalistelement{#1}% % \begingroup\def\doprocesscommaitem##1]{\endgroup}% % \fi} \def\p!dogetfromcommalist#1% {\advance\commalistcounter \minusone \ifcase\commalistcounter \def\commalistelement{#1}% \expandafter\quitcommalist \fi} \def\getfromcommalist[#1]#2[#3]% {\let\commalistelement\empty \commalistcounter#3\relax \processcommalist[#1]\p!dogetfromcommalist} % \def\getfromcommacommand[#1]% why so complicated, still needed? % {\edef\commacommand{#1}% % \toks0=\expandafter{\expandafter[\commacommand]}% % \expandafter\getfromcommalist\the\toks0 } \def\getfromcommacommand[#1]% {\expanded{\getfromcommalist[#1]}} %D Because 0, 1 and~2 are often asked for, we optimize this %D macro for those cases. The indirect call however slows %D down the other cases. %D %D \starttyping %D \def\p!dogetfirstfromcommalist [#1,#2]{\def\commalistelement{#1}} %D \def\p!dogetsecondfromcommalist[#1,#2,#3]{\def\commalistelement{#2}} %D \let\p!dogetotherfromcommalist=\getfromcommalist %D %D \def\getfromcommalist[#1]#2[#3]% optimized for 0,1,2 %D {\ifcase#3\relax %D \let\commalistelement\empty %D \or %D \p!dogetfirstfromcommalist[#1,]% %D \or %D \p!dogetsecondfromcommalist[#1,,]% %D \else %D \p!dogetotherfromcommalist[#1][#3]% %D \fi} %D \stoptyping %D %D Even worse, this alternative does not strip preceding %D spaces, which is what we want. So, we stick to the slow %D alternative. %D Watertight (and efficient) solutions are hard to find, due %D to the handling of braces during parameters passing and %D scanning. Nevertheless: %D %D \startbuffer %D \def\dosomething#1{(#1=\commalistsize) } %D %D \getcommalistsize [\hbox{$a,b,c,d,e,f$}] \dosomething 1 %D \getcommalistsize [{a,b,c,d,e,f}] \dosomething 1 %D \getcommalistsize [{a,b,c},d,e,f] \dosomething 4 %D \getcommalistsize [a,b,{c,d,e},f] \dosomething 4 %D \getcommalistsize [a{b,c},d,e,f] \dosomething 4 %D \getcommalistsize [{a,b}c,d,e,f] \dosomething 4 %D \getcommalistsize [] \dosomething 0 %D \getcommalistsize [{[}] \dosomething 1 %D \stopbuffer %D %D \typebuffer %D %D reports: %D %D \getbuffer %D \macros %D {dogetcommalistelement,dogetcommacommandelement} %D %D For low level (fast) purposes, we can also use the next %D alternative, which can handle 8~elements at most. %D %D \starttyping %D \dogetcommalistelement1\from a,b,c\to\commalistelement %D \stoptyping \def\dodogetcommalistelement#1\from#2,#3,#4,#5,#6,#7,#8\to#9% {\edef#9{\ifcase#1\relax\or#2\or#3\or#4\or#5\or#6\or#7\or#8\fi}} % maybe better: % % {\@EA\edef\@EA#9\@EA{\ifcase#1\relax\or#2\or#3\or#4\or#5\or#6\or#7\or#8\fi}} \def\dogetcommalistelement#1\from#2\to% {\dodogetcommalistelement#1\from#2,,,,,,\to} % check sources \def\dogetcommacommandelement#1\from#2\to% {\@EA\dodogetcommalistelement\@EA#1\@EA\from#2,,,,,,\to} %D \macros %D {dosingleargument,dodoubleargument,dotripleargument, %D doquadrupleargument,doquintupleargument,dosixtupleargument, %D doseventupleargument} %D %D When working with delimited arguments, spaces and %D lineendings can interfere. The next set of macros uses %D \TEX' internal scanner for grabbing everything between %D arguments. Forgive me the funny names. %D %D \starttyping %D \dosingleargument\commando = \commando[#1] %D \dodoubleargument\commando = \commando[#1][#2] %D \dotripleargument\commando = \commando[#1][#2][#3] %D \doquadrupleargument\commando = \commando[#1][#2][#3][#4] %D \doquintupleargument\commando = \commando[#1][#2][#3][#4][#5] %D \dosixtupleargument\commando = \commando[#1][#2][#3][#4][#5][#6] %D \doseventupleargument\command= \commando[#1][#2][#3][#4][#5][#6][#7] %D \stoptyping %D %D These macros are used in the following way: %D %D \starttyping %D \def\dosetupsomething[#1][#2]% %D {... #1 ... #2 ...} %D %D \def\setupsomething% %D {\dodoubleargument\dosetupsomething} %D \stoptyping %D %D The implementation can be surprisingly simple and needs no %D further explanation, like: %D %D \starttyping %D \def\dosingleargument#1[#2]% %D {#1[#2]} %D \def\dotripleargument#1[#2]#3[#4]#5[#6]% %D {#1[#2][#4][#6]} %D \def\doquintupleargument#1% %D {\def\dodoquintupleargument[##1]##2[##3]##4[##5]##6[##7]##8[##9]% %D {#1[##1][##3][##5][##7][##9]}% %D \dodoquintupleargument} %D \stoptyping %D %D Because \TEX\ accepts 9~arguments at most, we have to use %D two||step solution when getting five or more arguments. %D %D When developing more and more of the real \CONTEXT, we %D started using some alternatives that provided empty %D arguments (in fact optional ones) whenever the user failed %D to supply them. Because this more complicated macros enable %D us to do some checking, we reimplemented the non||empty %D ones. \def\dosingleargument {\chardef\expectedarguments 1 \dosingleempty } \def\dodoubleargument {\chardef\expectedarguments 2 \dodoubleempty } \def\dotripleargument {\chardef\expectedarguments 3 \dotripleempty } \def\doquadrupleargument {\chardef\expectedarguments 4 \doquadrupleempty } \def\doquintupleargument {\chardef\expectedarguments 5 \doquintupleempty } \def\dosixtupleargument {\chardef\expectedarguments 6 \dosixtupleempty } \def\doseventupleargument{\chardef\expectedarguments 7 \doseventupleempty} %D \macros %D {iffirstagument,ifsecondargument,ifthirdargument, %D iffourthargument,iffifthargument,ifsixthargument, %D ifseventhargument} %D %D We use some signals for telling the calling macros if all %D wanted arguments are indeed supplied by the user. \newif\iffirstargument \newif\ifsecondargument \newif\ifthirdargument \newif\iffourthargument \newif\iffifthargument \newif\ifsixthargument \newif\ifseventhargument %D \macros %D {dosingleempty,dodoubleempty,dotripleempty, %D doquadrupleempty,doquintupleempty,dosixtupeempty, %D doseventupleempty} %D %D The empty argument supplying macros mentioned before, look %D like: %D %D \starttyping %D \dosingleempty \command %D \dodoubleempty \command %D \dotripleempty \command %D \doquadrupleempty \command %D \doquintupleempty \command %D \dosixtupleempty \command %D \doseventupleempty\command %D \stoptyping %D %D So \type{\dodoubleempty} leades to: %D %D \starttyping %D \command[#1][#2] %D \command[#1][] %D \command[][] %D \stoptyping %D %D Depending of the generousity of the user. Afterwards one can %D use the \type{\if...argument} boolean. For novice: watch %D the stepwise doubling of \type{#}'s % idea: \ignorespaces afterwards \chardef\noexpectedarguments=0 \chardef\expectedarguments =0 \def\showargumenterror#1#2% {\writestatus{systems}{#1 argument(s) expected in line #2}} % \long\def\dogetargument#1#2#3#4% redefined in mult-ini % {\doifnextcharelse{#1} % {\let\expectedarguments\noexpectedarguments % #3\dodogetargument} % {\ifnum\expectedarguments>\noexpectedarguments % \showargumenterror{\expectedarguments} % \fi % \let\expectedarguments\noexpectedarguments % #4\dodogetargument#1#2}} % % less to pass \def\doshowargumenterror {\ifnum\expectedarguments>\noexpectedarguments \showargumenterror{\number\expectedarguments}{\number\inputlineno}% \fi \noshowargumenterror} \def\noshowargumenterror {\let\expectedarguments\noexpectedarguments} % \long\def\dogetargument#1#2#3#4% % {\doifnextcharelse#1% % {\noshowargumenterror#3\dodogetargument} % {\doshowargumenterror#4\dodogetargument#1#2}} % % faster ? \long\def\dogetargument#1#2#3#4% {\let\charactertoken=#1% \def\!!stringa{\noshowargumenterror#3\dodogetargument}% \def\!!stringb{\doshowargumenterror#4\dodogetargument#1#2}% \futurelet\nexttoken\inspectnextcharacter} \def\getsingleempty#1#2#3% {\def\dodogetargument% {#3}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\getdoubleempty#1#2#3% {\def\dodogetargument#1##1#2% {\def\dodogetargument% {#3#1{##1}#2}% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\gettripleempty#1#2#3% {\def\dodogetargument#1##1#2% {\def\dodogetargument#1####1#2% {\def\dodogetargument% {#3#1{##1}#2% #1{####1}#2}% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\getquadrupleempty#1#2#3% {\def\dodogetargument#1##1#2% {\def\dodogetargument#1####1#2% {\def\dodogetargument#1########1#2% {\def\dodogetargument% {#3#1{##1}#2% #1{####1}#2% #1{########1}#2}% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\getquintupleempty#1#2#3% {\def\dodogetargument#1##1#2% {\def\dodogetargument#1####1#2% {\def\dodogetargument#1########1#2% {\def\dodogetargument#1################1#2% {\def\dodogetargument% {#3#1{##1}#2% #1{####1}#2% #1{########1}#2% #1{################1}#2}% \dogetargument#1#2\fifthargumenttrue\fifthargumentfalse}% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\getsixtupleempty#1#2#3% {\def\dodogetargument#1##1#2% {\def\dodogetargument#1####1#2% {\def\dodogetargument#1########1#2% {\def\dodogetargument#1################1#2% {\def\dodogetargument#1################################1#2% {\def\dodogetargument% {#3#1{##1}#2% #1{####1}#2% #1{########1}#2% #1{################1}#2% #1{################################1}#2}% \dogetargument#1#2\sixthargumenttrue\sixthargumentfalse}% \dogetargument#1#2\fifthargumenttrue\fifthargumentfalse}% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\getseventupleempty#1#2#3% {\def\dodogetargument#1##1#2% {\def\dodogetargument#1####1#2% {\def\dodogetargument#1########1#2% {\def\dodogetargument#1################1#2% {\def\dodogetargument#1################################1#2% {\def\dodogetargument#1################################% ################################1#2% {\def\dodogetargument% {#3#1{##1}#2% #1{####1}#2% #1{########1}#2% #1{################1}#2% #1{################################1}#2% #1{################################% ################################1}#2}% \dogetargument#1#2\seventhargumenttrue\seventhargumentfalse}% \dogetargument#1#2\sixthargumenttrue\sixthargumentfalse}% \dogetargument#1#2\fifthargumenttrue\fifthargumentfalse}% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}% \dogetargument#1#2\firstargumenttrue\firstargumentfalse} \def\dosingleempty {\getsingleempty []} \def\dodoubleempty {\getdoubleempty []} \def\dotripleempty {\gettripleempty []} \def\doquadrupleempty {\getquadrupleempty []} \def\doquintupleempty {\getquintupleempty []} \def\dosixtupleempty {\getsixtupleempty []} \def\doseventupleempty{\getseventupleempty[]} %D Because some of these are called quite often, we will now %D replace the more general version by alternatives tuned for %D speed. \def\dosingleempty#1% {\noshowargumenterror % \relax % prevents lookahead, brr \doifnextoptionalelse {\firstargumenttrue#1} {\dosinglefakeempty#1}} \def\dodoubleempty#1% {\noshowargumenterror % \relax % prevents lookahead, brr \doifnextoptionalelse {\dodoubletestempty#1} {\dodoublefakeempty#1}} \def\dotripleempty#1% {\noshowargumenterror % \relax % prevents lookahead, brr \doifnextoptionalelse {\dotripletestempty#1} {\dotriplefakeempty#1}} \def\dosinglefakeempty#1% {\firstargumentfalse#1[]} \def\dodoublefakeempty#1% {\firstargumentfalse\secondargumentfalse#1[][]} \def\dotriplefakeempty#1% {\firstargumentfalse\secondargumentfalse\thirdargumentfalse#1[][][]} \long\def\dodoubletestempty#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\secondargumenttrue #1[{#2}]} {\secondargumentfalse#1[{#2}][]}} \long\def\dotripletestempty#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\dotripletestemptyx #1[{#2}]} {\secondargumentfalse \thirdargumentfalse #1[{#2}][][]}} \long\def\dotripletestemptyx#1[#2][#3]% {\secondargumenttrue \doifnextoptionalelse {\thirdargumenttrue #1[{#2}][{#3}]} {\thirdargumentfalse#1[{#2}][{#3}][]}} %D \macros %D {strippedcsname} %D %D The next macro can be very useful when using \type{\csname} %D like in: %D %D \starttyping %D \csname if\strippedcsname\something\endcsname %D \stoptyping %D %D This expands to \type{\ifsomething}. \def\strippedcsname% {\expandafter\gobbleoneargument\string} %D \macros %D {complexorsimple,complexorsimpleempty} %D %D Setups can be optional. A command expecting a setup is %D prefixed by \type{\complex}, a command without one gets the %D prefix \type{\simple}. Commands like this can be defined by: %D %D \starttyping %D \complexorsimple\command %D \stoptyping %D %D When \type{\command} is followed by a \type{[setup]}, then %D %D \starttyping %D \complexcommand [setup] %D \stoptyping %D %D executes, else we get %D %D \starttyping %D \simplecommand %D \stoptyping %D %D An alternative for \type{\complexorsimple} is: %D %D \starttyping %D \complexorsimpleempty {command} %D \stoptyping %D %D Depending on the presence of \type{[setup]}, this one %D leads to one of: %D %D \starttyping %D \complexcommando [setup] %D \complexcommando [] %D \stoptyping %D %D Many \CONTEXT\ commands started as complex or simple ones, %D but changed into more versatile (more object oriented) ones %D using the \type{\get..argument} commands. % This method is needed when traditional tex is used with % the efficient definition (marked **) below. % an old one: % % \def\setnameofcommand#1% handles {abc} as well as \abc % {\begingroup % \escapechar=-1 % \globaldefs=0 % pretty important! % \xdef\nameofcommand{\string#1}% % \endgroup} % % \def\complexorsimple#1% % {\setnameofcommand{#1}% % \doifnextcharelse{[} % {\firstargumenttrue \getvalue{\s!complex\nameofcommand}} % {\firstargumentfalse\getvalue{\s!simple \nameofcommand}}} % % \def\complexorsimpleempty#1% % {\setnameofcommand{#1}% % \doifnextcharelse{[} % {\firstargumenttrue \getvalue{\s!complex\nameofcommand}} % {\firstargumentfalse\getvalue{\s!complex\nameofcommand}[]}} % % a newer one: \def\complexorsimple#1% {% \relax % prevents lookahead, brrr \doifnextoptionalelse {\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname} {\firstargumentfalse\csname\s!simple \strippedcsname#1\endcsname}} \def\complexorsimpleempty#1% {% \relax % prevents lookahead, brrr \doifnextoptionalelse {\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname} {\firstargumentfalse\csname\s!complex\strippedcsname#1\endcsname[]}} %D \macros %D {definecomplexorsimple,definecomplexorsimpleempty} %D %D The previous commands are used that often that we found it %D worthwile to offer two more alternatives. Watch the build %D in protection. % See earlier. Because we don't want \type {\simple..} and % \type {\complex..} commands to show up in expansions, we need % to pass them as \type {simple..} and \type {complex..}. % \beginTEX % % \def\definewithnameofcommand#1#2% % {\setnameofcommand{#2}% % \@EA\def\@EA#2\@EA{\@EA\donottest\@EA#1\@EA{\nameofcommand}}} % % \def\definecomplexorsimple% % {\definewithnameofcommand\complexorsimple} % % \def\definecomplexorsimpleempty% % {\definewithnameofcommand\complexorsimpleempty} % % \endTEX % % \beginETEX \protected % % \def\definecomplexorsimple#1% % {\normalprotected\def#1{\complexorsimple#1}} % % \def\definecomplexorsimpleempty#1% % {\normalprotected\def#1{\complexorsimpleempty#1}} % % \endETEX % However, since this one uses an idirect method, things go % okay (at the cost of extra macros). % \def\definecomplexorsimple#1% % {\unexpanded\def#1{\complexorsimple#1}} % % \def\definecomplexorsimpleempty#1% % {\unexpanded\def#1{\complexorsimpleempty#1}} % % faster, since no \strippedcsname needed in call, but more spacy \def\docomplexorsimple#1#2% {\doifnextoptionalelse{\firstargumenttrue#1}{\firstargumentfalse#2}} \def\docomplexorsimpleempty#1% {\doifnextoptionalelse{\firstargumenttrue#1}{\firstargumentfalse#1[]}} \def\definecomplexorsimple#1% {\unexpanded\edef#1% {\noexpand\docomplexorsimple \@EA\noexpand\csname\s!complex\strippedcsname#1\endcsname \@EA\noexpand\csname\s!simple \strippedcsname#1\endcsname}} \def\definecomplexorsimpleempty#1% {\unexpanded\edef#1% {\noexpand\docomplexorsimpleempty \@EA\noexpand\csname\s!complex\strippedcsname#1\endcsname}} %D These commands are called as: %D %D \starttyping %D \definecomplexorsimple\command %D \stoptyping %D %D Of course, we must have available %D %D \starttyping %D \def\complexcommand[#1]{...} %D \def\simplecommand {...} %D \stoptyping %D %D Using this construction saves a few string now and then. %D \macros %D {definestartstopcommand} %D %D Those who get the creeps of expansion may skip the next %D one. It's one of the most recent additions and concerns %D \type{\start}||\type{\stop} pairs with complicated %D arguments. %D %D We won't go into details here, but the general form of %D this using this command is: %D %D \starttyping %D \definestartstopcommand\somecommand\e!specifier{arg}{arg}% %D {do something with arg} %D \stoptyping %D %D This expands to something like: %D %D \starttyping %D \def\somecommand arg \startspecifier arg \stopspecifier% %D {do something with arg} %D \stoptyping %D %D The arguments can be anything reasonable, but double %D \type{#}'s are needed in the specification part, like: %D %D \starttyping %D \definestartstopcommand\somecommand\e!specifier{[##1][##2]}{##3}% %D {do #1 something #2 with #3 arg} %D \stoptyping %D %D which becomes: %D %D \starttyping %D \def\somecommand[#1][#2]\startspecifier#3\stopspecifier% %D {do #1 something #2 with #3 arg} %D \stoptyping %D %D We will see some real applications of this command in the %D core modules. \def\definestartstopcommand#1#2#3#4% can be done with \expanded ot better, toks {\def\!stringa{#3}% % but let's keep this unused one crappy \def\!stringb{\e!start#2}% \def\!stringc{#4}% \def\!stringd{\e!stop#2}% \@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA \def\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA\@EA #1\@EA\@EA\@EA\@EA\@EA\@EA\@EA \!stringa\@EA\@EA\@EA \csname\@EA\@EA\@EA\!stringb\@EA\@EA\@EA\endcsname\@EA \!stringc \csname\!stringd\endcsname} %D \macros %D {dosinglegroupempty,dodoublegroupempty,dotriplegroupempty, %D doquadruplegroupempty, doquintuplegroupempty} %D %D We've already seen some commands that take care of %D optional arguments between \type{[]}. The next two commands %D handle the ones with \type{{}}. They are called as: %D %D \starttyping %D \dosinglegroupempty \ineedONEargument %D \dodoublegroupempty \ineedTWOarguments %D \dotriplegroupempty \ineedTHREEarguments %D \doquadruplegroupempty \ineedFOURarguments %D \doquintuplegroupempty \ineedFIVEarguments %D \stoptyping %D %D where \type{\ineedONEargument} takes one and the others %D two and three arguments. These macro's were first needed in %D \PPCHTEX. %D %D \starttyping %D \def\dogetgroupargument#1#2% redefined in mult-ini %D {\def\nextnextargument% %D {\ifx\nextargument\bgroup %D \let\expectedarguments\noexpectedarguments %D \def\nextargument{#1\dodogetargument}% %D %\else\ifx\nextargument\lineending % this can be an option %D % \def\nextargument{\begingroup\def\\ {\endgroup\dogetgroupargument#1#2}\\}% %D %\else\ifx\nextargument\blankspace % but it may never be default %D % \def\nextargument{\begingroup\def\\ {\endgroup\dogetgroupargument#1#2}\\}% %D \else %D \ifnum\expectedarguments>\noexpectedarguments %D \writestatus %D {setup} %D {\the\expectedarguments\space argument(s) expected %D in line \the\inputlineno\space}% %D \fi %D \let\expectedarguments\noexpectedarguments %D \def\nextargument{#2\dodogetargument{}}% %D \fi%\fi\fi % so let's get rid of it %D \nextargument}% %D \futurelet\nextargument\nextnextargument} %D \stoptyping %D %D In order to catch \type {\nextargument}'s that expand to %D \type {\if} and friends, in practice we will use a %D slightly more complicated macro. \newtoks \everyrobusttest \everyrobusttest {\let\if \relax \let\ifcat \relax \let\ifnum \relax \let\ifdim \relax \let\ifodd \relax \let\ifvmode \relax \let\ifhmode \relax \let\ifmmode \relax \let\ifinner \relax \let\ifvoid \relax \let\ifhbox \relax \let\ifvbox \relax \let\ifx \relax \let\ifeof \relax \let\iftrue \relax \let\iffalse \relax \let\ifcase \relax \let\ifdefined \relax \let\ifcsname \relax \let\iffontchar \relax \let\ifincsname \relax \let\ifprimitive\relax \let\ifabsnum \relax \let\ifabsdim \relax \let\else \relax \let\or \relax \let\fi \relax} \def\beginrobusttest {\begingroup \the\everyrobusttest} \let\endrobusttest\endgroup %D We can add additional definitions later when we have defined %D \type {\appendtoks}. \def \permitspacesbetweengroups{\chardef\@@permitspacesbetweengroups=0 } \def\dontpermitspacesbetweengroups{\chardef\@@permitspacesbetweengroups=1 } \dontpermitspacesbetweengroups % \def\dogetgroupargument#1#2% % {\def\nextnextargument% % {\normalifx\nextargument\bgroup % \endrobusttest % \noshowargumenterror % \def\nextargument{#1\dodogetargument}% % \normalelse % \normalifcase\@@permitspacesbetweengroups % \normalifx\nextargument\lineending % \endrobusttest % \def\nextargument{\begingroup\def\\ {\endgroup\dogetgroupargument#1#2}\\}% % \normalelse\normalifx\nextargument\blankspace % \endrobusttest % \def\nextargument{\begingroup\def\\ {\endgroup\dogetgroupargument#1#2}\\}% % \normalelse % \endrobusttest % \doshowargumenterror % \def\nextargument{#2\dodogetargument{}}% % \normalfi\normalfi % \normalelse % \endrobusttest % \doshowargumenterror % \def\nextargument{#2\dodogetargument{}}% % \normalfi % \normalfi % \nextargument}% % \beginrobusttest % \futurelet\nextargument\nextnextargument} \def\dodogetgroupargument {\normalifx\nextargument\bgroup \endrobusttest \noshowargumenterror \def\nextargument{\dogroupargumentyes\dodogetargument}% \normalelse \normalifcase\@@permitspacesbetweengroups \normalifx\nextargument\lineending \endrobusttest \def\nextargument{\begingroup\def\\ {\endgroup\dogetgroupargument\dogroupargumentyes\dogroupargumentnop}\\}% \normalelse\normalifx\nextargument\blankspace \endrobusttest \def\nextargument{\begingroup\def\\ {\endgroup\dogetgroupargument\dogroupargumentyes\dogroupargumentnop}\\}% \normalelse \endrobusttest \doshowargumenterror \def\nextargument{\dogroupargumentnop\dodogetargument{}}% \normalfi\normalfi \normalelse \endrobusttest \doshowargumenterror \def\nextargument{\dogroupargumentnop\dodogetargument{}}% \normalfi \normalfi \nextargument}% \def\dogetgroupargument#1#2% {\let\dogroupargumentyes#1% \let\dogroupargumentnop#2% \beginrobusttest\futurelet\nextargument\dodogetgroupargument} \def\dosinglegroupempty#1% {\def\dodogetargument% {\dontpermitspacesbetweengroups #1}% \dogetgroupargument\firstargumenttrue\firstargumentfalse} \def\dodoublegroupempty#1% {\def\dodogetargument##1% {\def\dodogetargument% {\dontpermitspacesbetweengroups #1{##1}}% \dogetgroupargument\secondargumenttrue\secondargumentfalse}% \dogetgroupargument\firstargumenttrue\firstargumentfalse} \def\dotriplegroupempty#1% {\def\dodogetargument##1% {\def\dodogetargument####1% {\def\dodogetargument% {\dontpermitspacesbetweengroups #1{##1}{####1}}% \dogetgroupargument\thirdargumenttrue\thirdargumentfalse}% \dogetgroupargument\secondargumenttrue\secondargumentfalse}% \dogetgroupargument\firstargumenttrue\firstargumentfalse} \def\doquadruplegroupempty#1% {\def\dodogetargument##1% {\def\dodogetargument####1% {\def\dodogetargument########1% {\def\dodogetargument% {\dontpermitspacesbetweengroups #1{##1}{####1}{########1}}% \dogetgroupargument\fourthargumenttrue\fourthargumentfalse}% \dogetgroupargument\thirdargumenttrue\thirdargumentfalse}% \dogetgroupargument\secondargumenttrue\secondargumentfalse}% \dogetgroupargument\firstargumenttrue\firstargumentfalse} \def\doquintuplegroupempty#1% {\def\dodogetargument##1% {\def\dodogetargument####1% {\def\dodogetargument########1% {\def\dodogetargument################1% {\def\dodogetargument% {\dontpermitspacesbetweengroups #1{##1}{####1}{########1}{################1}}% \dogetgroupargument\fifthargumenttrue\fifthargumentfalse}% \dogetgroupargument\fourthargumenttrue\fourthargumentfalse}% \dogetgroupargument\thirdargumenttrue\thirdargumentfalse}% \dogetgroupargument\secondargumenttrue\secondargumentfalse}% \dogetgroupargument\firstargumenttrue\firstargumentfalse} %D These macros can explictly take care of spaces, which means %D that the next definition and calls are valid: %D %D \starttyping %D \def\test#1#2#3{[#1#2#3]} %D %D \dotriplegroupempty\test {a}{b}{c} %D \dotriplegroupempty\test {a}{b} %D \dotriplegroupempty\test {a} %D \dotriplegroupempty\test %D \dotriplegroupempty\test {a} {b} {c} %D \dotriplegroupempty\test {a} {b} %D \dotriplegroupempty\test %D {a} %D {b} %D \stoptyping %D %D And alike. %D \macros %D {firstofoneargument, firstoftwoarguments, firstofthreearguments %D secondoftwoarguments, secondofthreearguments, %D thirdofthreearguments} %D %D The next six macros (dedicated to Taco) can conveniently %D used to select arguments. Their names explain their %D functionality. \long\def\firstofoneargument#1{#1} \long\def\firstoftwoarguments #1#2{#1} \long\def\secondoftwoarguments#1#2{#2} \long\def\firstofthreearguments #1#2#3{#1} \long\def\secondofthreearguments#1#2#3{#2} \long\def\thirdofthreearguments #1#2#3{#3} \long\def\firstoffourarguments #1#2#3#4{#1} \long\def\secondoffourarguments#1#2#3#4{#2} \long\def\thirdoffourarguments #1#2#3#4{#3} \long\def\fourthoffourarguments#1#2#3#4{#4} \long\def\firstoffivearguments #1#2#3#4#5{#1} \long\def\secondoffivearguments#1#2#3#4#5{#2} \long\def\thirdoffivearguments #1#2#3#4#5{#3} \long\def\fourthoffivearguments#1#2#3#4#5{#4} \long\def\fifthoffivearguments #1#2#3#4#5{#5} \long\def\firstofsixarguments #1#2#3#4#5#6{#1} \long\def\secondofsixarguments#1#2#3#4#5#6{#2} \long\def\thirdofsixarguments #1#2#3#4#5#6{#3} \long\def\fourthofsixarguments#1#2#3#4#5#6{#4} \long\def\fifthofsixarguments #1#2#3#4#5#6{#5} \long\def\sixthofsixarguments #1#2#3#4#5#6{#6} %D \macros %D {globalletempty,letempty,letvalueempty,letgvalueempty} %D %D Trivial: \def\letempty #1{\let#1\empty} \def\globalletempty#1{\global\let#1\empty} \def\letvalueempty #1{\expandafter\let\csname#1\endcsname\empty} \def\letgvalueempty#1{\global\expandafter\let\csname#1\endcsname\empty} %D \macros %D {wait} %D %D The next macro hardly needs explanation. Because no %D nesting is to be expected, we can reuse \type{\wait} within %D \type{\wait} itself. \def\wait {\begingroup \read16 to \wait \endgroup} %D \macros %D {writestring,writeline,writebanner, %D writestatus,statuswidth,normalwritestatus} %D %D Maybe one didn't notice, but we've already introduced a %D macro for showing messages. In the multi||lingual modules, %D we will also introduce a mechanism for message passing. For %D the moment we stick to the core macros: %D %D \starttyping %D \writestring {string} %D \writeline %D \writestatus {category} {message} %D \stoptyping %D %D Messages are formatted. One can provide the maximum with %D of the identification string with the macro \type %D {\statuswidth}. \chardef\statuswidth=15 \chardef\statuswrite=16 \ifx\writestring\undefined \newtoks\everywritestring \def\writedirect {\immediate\write\statuswrite} \def\writeline {\writedirect{}} \def\writestring#1{\begingroup\the\everywritestring\writedirect{#1}\endgroup} \fi %D First we present the normal \TEX\ variant, later we will %D show the \ETEX-way. \beginTEX \newcount\statuscounter \def\dosplitstatus#1% {\advance\statuscounter \minusone \ifcase\statuscounter \expandafter\nosplitstatus \else \scratchtoks\@EA{\the\scratchtoks#1}% \expandafter\dosplitstatus \fi} \def\nosplitstatus#1\end {} \def\writestatus#1#2% {\begingroup \scratchtoks\emptytoks \statuscounter\statuswidth \expandafter\dosplitstatus#1% \space\space\space\space\space\space\space \space\space\space\space\space\space\space \space\space\space\space\space\space\end \@EA\writestring\@EA{\the\scratchtoks\space:\space#2}% \endgroup} \endTEX %D Because we're grouped, we could have initialized at forehand: %D %D \starttyping %D \statuscounter\statuswidth %D \stoptyping %D %D The next implementation saves only some 10 words of format %D memory, but we hardly gain any speed. %D %D \starttyping %D \def\dosplitstatus#1#2#3#4#5#6#7#8#9% %D {#1#2#3#4#5#6#7#8#9\dodosplitstatus} %D %D \def\dodosplitstatus#1#2#3#4#5#6\end %D {#1#2#3#4#5} %D %D \def\writestatus#1#2% %D {\writestring %D {\expandafter\dosplitstatus#1% %D \space\space\space\space\space %D \space\space\space\space\space %D \space\space\space\space\space\end %D \space:\space#2}} %D \stoptyping %D Okay then, more obscure but slightly faster: no split grabs %D the do split part and skipping the else branch has to happen %D anyway, so: \beginTEX \def\dosplitstatus#1% {\advance\statuscounter \minusone \ifcase\statuscounter \expandafter\nosplitstatus \fi \scratchtoks\@EA{\the\scratchtoks#1}% \dosplitstatus} \endTEX %D The next (\ETEX\ specific) variant is twice as fast in 5/40 %D situations, only gains some speed when multiple runs of large docs %D are done; fully expandable, no statuscounter needed, no restore (due %D to grouping) needed etc. \beginETEX \numexpr \def\normalwritestatus#1#2% {\writestring{\expandafter\dosplitstatus\expandafter\statuswidth#1% \space\space\space\space\space\space\space \space\space\space\space\space\space\space \space\space\space\space\space\space\end \space:\space#2}} \def\dosplitstatus#1#2% {\ifcase#1 \expandafter\nosplitstatus\fi#2% \expandafter\dosplitstatus\expandafter{\the\numexpr#1+\minusone\relax}} \def\nosplitstatus#1\end {} \endETEX %D \macros %D {emptytoks} %D %D For this we need an empty token register, analogous %D to \type {\empty}. \newtoks\emptytoks %D \macros %D {debuggerinfo} %D %D For debugging purposes we can enhance macros with the %D next alternative. Here \type{debuggerinfo} stands for both %D a macro accepting two arguments and a boolean (in fact a %D few macro's too). \newif\ifdebuggerinfo \def\debuggerinfo#1#2% {\ifdebuggerinfo \writestatus{debugger}{#1:: #2}% \fi} %D Finally we do what from now on will be done at the top of %D the files: we tell the user what we are loading. % \ifx\writestatus\undefined \let\writestatus\normalwritestatus \fi % \ifx\writebanner\undefined \def\writebanner{\writestring} \fi \ifx\normalwritestatus\undefined % for use within latex \ifx\writestatus\undefined \def\writestatus#1#2{\immediate\write16{#1 : #2}} \fi \else \let\writestatus\normalwritestatus \fi \def\writebanner{\writestring} \writestatus{loading}{ConTeXt System Macros / General} %D Well, the real final command is the one that resets the %D unprotected characters \type{@}, \type{?} and \type{!}. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-flw.mkiv0000644000175000017500000001041212130411274024254 0ustar norbertnorbert%D \module %D [ file=page-flw, %D version=2003.04.19, % from test-002 (1997) profile experiment %D title=\CONTEXT\ Page Macros, %D subtitle=Text Flows, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Text Flows} %D This is high experimental and especially flushing may change (proper %D spacing is the driving force here). It's an old mechanism used for %D playing with stepping through document threads. As it's a simple and %D effective mechanism we keep it around. It's not to be confused with %D upcoming stream support. %D %D \starttyping %D \setuppapersize [S6] %D \setuptolerance [verytolerant,stretch] %D \setupfooter [strut=no] %D \setupwhitespace[big] %D %D \setuplayout %D [rightedge=5cm,width=fit,margin=0pt,edgedistance=1cm, %D footer=4cm,footerdistance=1cm,header=0cm] %D %D \setuptexttexts [edge][][\vbox{\flushtextflow{alpha}}] %D \setupfootertexts[edge][][\vbox{\flushtextflow{beta}}] %D \setupfootertexts [\vbox{\flushtextflow{gamma}}][] %D %D \definetextflow [alfa] [width=\rightedgewidth] %D \definetextflow [beta] [width=\rightedgewidth] %D \definetextflow [gamma] [width=\footerheight] %D %D \starttext %D %D \dorecurse{50} %D {\getrandomnumber{\funny}{0}{8} %D \ifcase\funny \starttextflow[alfa] \input tufte.tex \stoptextflow %D \or \starttextflow[beta] \input knuth.tex \stoptextflow %D \or \starttextflow[gamma] \input materie.tex \stoptextflow %D \or {\bf TUFTE}\quad \input tufte \par %D \or {\bf TUFTE}\quad \input tufte \par %D \or {\bf KNUTH}\quad \input knuth \par %D \or {\bf KNUTH}\quad \input knuth \par %D \or {\bf MATERIE}\quad \input materie \par %D \else {\bf MATERIE}\quad \input materie \par %D \fi} %D %D \stoptext %D \stoptyping \unprotect \installcorenamespace{textflow} \installcorenamespace{textflowbox} \installcommandhandler \??textflow {textflow} \??textflow \setuptextflow [%c!style=, %c!color=, \c!width=\availablehsize] \appendtoks \ifcsname\??textflowbox\currenttextflow\endcsname \setbox\csname\??textflowbox\currenttextflow\endcsname\emptybox \else \expandafter\newbox\csname\??textflowbox\currenttextflow\endcsname \fi \to \everydefinetextflow \let\b_page_textflow_box\zerocount \def\textflowcollector#1% {\csname\??textflowbox#1\endcsname} \unexpanded\def\doiftextflowcollectorelse#1% {\ifcsname\??textflowbox#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doiftextflowelse#1% {\ifcsname\??textflowbox#1\endcsname \ifvoid\csname\??textflowbox#1\endcsname \doubleexpandafter\secondoftwoarguments \else \doubleexpandafter\firstoftwoarguments \fi \else \expandafter\secondoftwoarguments \fi} % \unexpanded\def\doiftextflow#1% % {\doiftextflowelse{#1}\firstofoneargument\gobbleoneargument} \unexpanded\def\starttextflow[#1]% {\begingroup \edef\currenttextflow{#1}% \ifcsname\??textflowbox\currenttextflow\endcsname \b_page_textflow_box\csname\??textflowbox\currenttextflow\endcsname \global\setbox\b_page_textflow_box\vbox \bgroup \dontcomplain \ifvoid\b_page_textflow_box\else \unvbox\b_page_textflow_box \fi \hsize\textflowparameter\c!width\relax \usetextflowstyleandcolor\c!style\c!color \unexpanded\def\stoptextflow{\endgraf\egroup\endgroup}% \else \let\stoptextflow\endgroup \fi} \unexpanded\def\flushtextflow#1% {\begingroup \edef\currenttextflow{#1}% \ifcsname\??textflowbox\currenttextflow\endcsname \b_page_textflow_box\csname\??textflowbox\currenttextflow\endcsname \ifvoid\b_page_textflow_box % sorry \else\ifdim\ht\b_page_textflow_box>\vsize \setbox\scratchbox\vsplit\b_page_textflow_box to \vsize \ifvoid\scratchbox\else \unvbox\scratchbox \fi \else \unvbox\b_page_textflow_box \fi\fi \fi \endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-pre.mkii0000644000175000017500000003234712130411274024277 0ustar norbertnorbert%D \module %D [ file=xtag-pre, %D version=2000.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=Predefined Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Predefined} %D Here we predefine some escapes, processing instructions, %D entities and other handy things. \unprotect %D For \MKIV: \setvalue{@u@s@"}#1#2"{#2} \setvalue{@g@s@"}#1#2"{\scratchtoks{#2}} \setvalue{@u@s@'}#1#2'{#2} \setvalue{@g@s@'}#1#2'{\scratchtoks{#2}} \setvalue{@u@s@ }#1#2 {#2} \setvalue{@g@s@ }#1#2 {\scratchtoks{#2}} \def\unstringed#1{\csname\ifcsname @u@s@#1\endcsname @u@s@#1\else\s!empty\fi\endcsname#1} \def\grabstring#1{\csname\ifcsname @g@s@#1\endcsname @g@s@#1\else\s!empty\fi\endcsname#1} \def\dowithgrabbedstring#1% {\def\@@dowithgrabbedstring{#1}% \afterassignment\@@dowithgrabbedstring\grabstring} %D Let's get rid of ligatures: % \definefonthandling [default] [noligs] %D First we define the default error handler. When tracing is %D activated, the unknown element is showed verbatim. \defineXMLenvironment [\s!default] \defaultXMLelement \defaultXMLelement \defineXMLsingular [\s!default] \defaultXMLelement % \def\defaultXMLelement % {\iftraceXMLelements[\currentXMLfullidentifier]\fi} \def\defaultXMLelement {\iftraceXMLelements{\infofont<\currentXMLfullidentifier>}\fi} %D We can use the default handler to implement automatic %D element hiding. Beware: this overloads the tracer. % \def\startXMLignore{\dododefineXMLignore \s!default} % \def\stopXMLignore {\dododefineXMLprocess\s!default} \newcount\xmlignoredepth \def\startXMLignore{\ifcase\xmlignoredepth\dododefineXMLignore\s!default\fi\advance\xmlignoredepth\plusone} \def\stopXMLignore {\advance\xmlignoredepth\minusone\ifcase\xmlignoredepth\dododefineXMLprocess\s!default\fi} %D The following entities need to be defined anyway. They %D may be overloaded later. % rest also \letter \defineXMLentities [amp] {\letterampersand} {\&} \defineXMLentities [gt] {\string>} {\mathematics{>}} \defineXMLentities [lt] {\string<} {\mathematics{<}} \defineXMLentities [quot] {\string"} {\mathematics{"}} \defineXMLentities [apos] {\string`} {\mathematics{'}} %D Of course we define: \defineXMLentities [tex] {tex} {\TeX} \defineXMLentities [context] {context} {\ConTeXt} \defineXMLentities [xml] {xml} {XML} \defineXMLentities [xsd] {xsd} {XSD} \defineXMLentities [html] {html} {HTML} %D The following entities are used for internal purposes and %D concern characters that are kind of problematic in \TEX\ %D input. \defineXMLentities [tex-hash] {\letterhash} {\#} \defineXMLentities [tex-dollar] {\letterdollar} {\$} \defineXMLentities [tex-percent] {\letterpercent} {\%} \defineXMLentities [tex-backslash] {\letterbackslash} {\texescape} \defineXMLentities [tex-hat] {\letterhat} {\^{}} \defineXMLentities [tex-underscore] {\letterunderscore} {\_} \defineXMLentities [tex-leftbrace] {\letterleftbrace} {\leftargument} \defineXMLentities [tex-rightbrace] {\letterrightbrace} {\rightargument} \defineXMLentities [tex-bar] {\letterbar} {\vl} \defineXMLentities [tex-tilde] {\lettertilde} {\~{}} %D Some pretty printing macros will use color, for which we %D define a dedicated palet here. \definepalet [xtag] [0=darkgray, 1=darkred, 2=darkgreen, 3=darkblue, 4=darkcyan, 5=darkmagenta, 6=darkyellow, 7=black, 8=black] %D An example of its usage can be found in the pretty %D printing macros in the run time module. \newif\ifautoXMLshow \autoXMLshowtrue \newif\ifshowXMLarguments \showXMLargumentstrue \def\setupXMLfile{\dodoubleargument\getparameters[\??xf]} \setupXMLfile [\c!inbetween=\blank, \c!level=1] \fetchruntimecommand\showXMLfile {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLbuffer{\f!xtagprefix\s!run} \fetchruntimecommand\showXMLtext {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLign {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLnop {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLtxt {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLpar {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLlin {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLwrd {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLemp {\f!xtagprefix\s!run} \fetchruntimecommand\showXMLbreak {\f!xtagprefix\s!run} %D By default, we will ignore escape commands, preceded by %D \type {}. \defineXMLescape [\s!default] {\gobbleuntil{>}} %D The comment escape has the form: %D %D \starttyping %D %D \stoptyping \defineXMLescape [--] {\gobbleuntil{-->}} %D The \type {CDATA} escape is kind of unique in its %D strange syntax. %D %D \starttyping %D %D \stoptyping %D %D Watch this rather obscure definition (we need to pass an %D \type {[} to the macro. \chardef\XMLcdatamethod=1 \newtoks \everyXMLcdata % \appendtoks \tt \to \everyXMLcdata \setvalue{XMLcdatamethod1}% {\skipfirstverbatimlinefalse \processtaggeddisplayverbatim{]]>}} \setvalue{XMLcdatamethod2}% {\begingroup \obeylines \obeyspaces \the\everyXMLcdata \processXMLcdata} \long\def\processXMLcdata#1]]>% {#1\endgroup} \defineXMLescape [CDATA] {\executeifdefined{XMLcdatamethod\number\XMLcdatamethod}{\begingroup\processXMLcdata}} %D \starttyping %D %D %D \stoptyping \defineXMLescape [ATTLIST]{\gobbleuntil>} \defineXMLescape [ELEMENT]{\gobbleuntil>} %D \starttyping %D %D %D %D \stoptyping \defineXMLescape [ENTITY] \handleXMLentityescape \def\handleXMLentityescape#1>% {\dohandleXMLentityescape#1 @ @ @ @ @ @>} \def\dohandleXMLentityescape#1 #2 #3 #4> {\doifnot{#1}\letterpercent {\doifelse{#2}{SYSTEM} {\dohandleXMLentitySYSTEM#1 #2 #3 #4>} {\dohandleXMLentityDEFINE#1 #2 #3 #4>}}} \def\dohandleXMLentitySYSTEM#1 #2 #3 #4 #5 #6>% name SYSTEM .... {\doifelse{#4}{@} {\expanded{\defineXMLentity[#1]{\noexpand\readXMLsystem{\unstringed#3}}}} {\doif{#4}{NDATA} % maybe we should also store the NDATA {\expanded{\defineXMLentity[#1]{\noexpand\readXMLndata{\unstringed#3}}}}}} \def\readXMLsystem#1% {\readfile{#1} {\writestatus{xml-system}{reading #1}} {\writestatus{xml-system}{unable to locate #1}}} \def\readXMLndata#1% {#1} % {\externalfigure[#1]} \def\dohandleXMLentityDEFINE#1 %#2 #3 #4 #5 #6>% name replacement {\def\docommand##1>{\expanded{\defineXMLentity[#1]{\the\scratchtoks}}}% \afterassignment\docommand\grabstring} %D Such entities can be encapsulated in a \type {DOCTYPE} %D element. Therefore we remove the outer level of document %D type definitions. %D %D \starttyping %D %D %D %D %D %D %D %D %D %D \stoptyping \defineXMLescape [DOCTYPE] \handleXMLdoctype \def\handleXMLdoctype {\let\XMLdoctype\empty \dohandleXMLdoctype} \def\dohandleXMLdoctype {\futurelet\nexttoken\dohandleXMLdoctok} \def\dohandleXMLdoctok {\ifx\nexttoken>% % [doctype: \XMLdoctype] \@EA\gobbleuntil\@EA>% \else\ifx\nexttoken\blankspace % [doctype: \XMLdoctype] \@EAEAEA\dodohandleXMLdoctype \else \@EAEAEA\redoXMLdoctype \fi\fi} \def\redoXMLdoctype#1% {\edef\XMLdoctype{\XMLdoctype#1}\dohandleXMLdoctype} \def\dodohandleXMLdoctype#1% {\executeifdefined{XMLdoctype#1}{\gobbleuntil>}} \setvalue{XMLdoctype>}{} \setvalue{XMLdoctype[}{\processuntil{]>}} % or \gobbleuntil{]>}} \def\XMLdoctypeS YSTEM % {\dowithgrabbedstring\dodohandleXMLdoctype} \def\XMLdoctypeP UBLIC % {\dowithgrabbedstring{\dowithgrabbedstring\dodohandleXMLdoctype}} % wrong % % \def\XMLdoctypeS YSTEM {\XMLgrabstring} % \def\XMLdoctypeP UBLIC {\XMLgrabstring} % % \def\XMLgrabstring % {\doifnextcharelse>{\gobbleuntil>}{\dowithgrabbedstring\XMLgrabstring}} %D Some day we may need to support entities within a %D document type namespace. %D As an example of processing instructions, we implement a %D \CONTEXT\ code handler: \defineXMLprocessor [context] \contextXMLcommand \defineXMLprocessor [context-command] \contextXMLcommand % we need to get rid of the endlinechar inserted by \scantokens % % \def\saveendlinechar% % {\ifx\restoreendlinechar\undefined % \edef\restoreendlinechar{\endlinechar\the\endlinechar\space}% % \fi % \endlinechar=-1 } % % \def\scanXMLtokens#1% % {\saveendlinechar\scantokens{#1}\restoreendlinechar} %D For security reasons, we provide a switch to turn this %D mechanism on and off. When turned off, there is no way to %D turn it on from within an \XML\ encoded document, simply %D because the possibility to process \CONTEXT\ commands is %D gone. \setupXMLprocessing[\c!command=\v!yes] %\def\contextXMLcommand#1% % {\doif\@@xpcommando\v!ja % {\pushmacro\disableXML % \def\disableXML{\global\let\afterXMLprocessor\empty}% % \global\let\afterXMLprocessor\enableXML % \setnormalcatcodes\scantokens{#1}\afterXMLprocessor % \popmacro\disableXML}} \def\contextXMLcommand#1% we don't use #1 here {\doif\@@xpcommand\v!yes {\disableXML\scantokens\@EA{\currentXMLprocess}\enableXML}} %D The indirect method (using the macro \type %D {\currentXMLprocess} instead of \type {#}) is needed %D because of the \type {\scantokens}. Given the previous %D definition, and given that \ETEX\ is used, we can now %D say: %D %D \starttyping %D %D \stoptyping %D %D A non||\ETEX\ solution is also possible, using buffers, %D but for the moment we assume that \ETEX\ is used. %D Next we implement a general purpose directive. This one %D can be used to set variables that can be accessed with %D \type {\XMLvar}. \defineXMLprocessor [context-directive] \contextXMLdirective \def\contextXMLdirective#1% {\docontextXMLdirective#1 @ @ @\end} \def\docontextXMLdirective#1 #2 #3 #4\end % class variable value {\expandafter\def\csname\@@XMLvariable:#1:#2\endcsname{#3}} %D A simple processing instruction is the following. It just %D writes a message to the screen. \defineXMLprocessor [context-message] {\writestatus{xml-message}} %D The following processing instruction permits you to tag %D parts of the file in such a way that you can filter data. %D We use this method when documenting schemas. \defineXMLprocessor [context-block] \handleXMLcontextblock \def\handleXMLcontextblock#1% {\dohandleXMLcontextblock#1 \relax} \def\dohandleXMLcontextblock#1 #2 #3\relax {\dodohandleXMLcontextblock{#1}{#2}} \let\dodohandleXMLcontextblock\gobbletwoarguments \def\hideXMLcontextblock[#1]% {\def\dodohandleXMLcontextblock {\dododohandleXMLcontextblock\doifinset{#1}}} \def\videXMLcontextblock[#1]% {\def\dodohandleXMLcontextblock {\dododohandleXMLcontextblock\doifnotinset{#1}}} \protect \def\dododohandleXMLcontextblock#1#2#3#4% {\let\next\relax \doifelse{#3}{begin} {#1{#4}{#2} {%\writestatus{xml-block}{skipping begin #4}% \long\def\next##1?context-block end #4 ##2?>{}}} {\doif{#3}{name} {#1{#4}{#2} {%\writestatus{xml-block}{skipping name #4}% \long\def\next##1?context-block ##2?>{}}}}% \next} \unprotect %D Say that a file contains blocks like the following: %D %D \starttyping %D %D %D maybe so much %D %D %D \stoptyping %D %D The following commands will show only this block: %D %D \starttyping %D \videXMLcontextblock[whatevername] \showXMLfile{yourfile} %D \stoptyping %D %D You can also mark blocks in the following way, thereby %D saving yourself some work: %D %D \starttyping %D %D %D What do you want? %D %D %D %D How do you want? %D %D %D \stoptyping % yet undocumented and experimental % \defineXMLprocessor [context-eof] {\endinput} % already defined in xtag-ini % \defineXMLsingular [begingroup] {\begingroup} % \defineXMLsingular [endgroup] {\endgroup} % % \defineXMLsingular [gobblespacetokens] {\gobblespacetokens} %D We automatically switch regimes (beware of nested files!): %D %D \starttyping %D \startXMLdata %D %D ÀÁÂÃÄÅàáâãäåÆÇæç %D ÈÉÊËèéêëÌÍÎÏÞìíîïþ %D ÐðÑñÒÓÔÕÖòóôõöØø %D ÙÚÛÜùúûÝýÿß %D \stopXMLdata %D \stoptyping \defineXMLprocessor [xml] {\handleXMLbanner} \def\handleXMLbanner#1% {\getXMLarguments{xml}{\s!encoding='' #1}% \doifsomething{\XMLpar{xml}\s!encoding\empty} {\doif\currentregime\s!default % style regimes will take precedence {\enableregime[\XMLpar{xml}\s!encoding\empty]}\donothing}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-obj.mkii0000644000175000017500000002633211754241457024252 0ustar norbertnorbert%D \module %D [ file=pack-obj, %D version=1998.01.15, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Objects, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo, move more to mkiv, get rid of blabelgroup \writestatus{loading}{ConTeXt Packaging Macros / Objects} \unprotect %D \macros %D {setobject,getobject,ifinobject} %D %D Boxes can be considered reuable objects. Unfortunaltely once %D passed to the \DVI\ file, such objects cannot be reused. In %D \PDF\ however, reusing is possible and sometimes even a %D necessity. Therefore, \CONTEXT\ supports reusable objects. %D %D During the \TEX\ processing run, boxes can serve the purpose %D of objects, and the \DVI\ driver module implements objects %D using packed boxes. %D %D The \PDF\ and \PDFTEX\ driver modules implement objects %D using \PDF\ forms. There is no (real) restriction on the %D number of objects there. %D %D The first application of objects in \CONTEXT\ concerned %D \METAPOST\ graphics and fill||in form fields. The first %D application can save lots of bytes, while the latter use is %D more a necessity than byte saving. %D %D \starttyping %D \setobject{class}{name}\somebox{} %D \getobject{class}{name} %D \stoptyping %D %D Here \type{\somebox} can be whatever box specification suits %D \TEX. We save the dimensions of an object, although some %D drivers will do so themselves. This means that when for %D instance using \PDFTEX\ we could save a hash entry plus some %D 20+ memory locations per object by delegating this %D housekeeping to the driver. The current approach permits %D us to keep the box characteristic too. \newif\ifinobject \def\checkobjectreferences {\startnointerference \protectlabels \ifx\usedoutputdriver\currentoutput \doutilities{objectreferences}\jobname\empty\relax\relax \else % different format (will fails on \purenumber) \fi \global\let\checkobjectreferences\relax \stopnointerference} \def\objectplaceholder{NOT YET FLUSHED}% \def\presetobject#1#2% \global added {\blabelgroup \ifcsname\r!object#1::#2\endcsname\else \global\@EA\let\csname\r!object#1::#2\endcsname\objectplaceholder \fi \elabelgroup} \def\dosetobject#1#2#3% \initializepaper this will move to \everyshipout {\initializepaper \blabelgroup \ifcsname\r!object#2::#3\endcsname \elabelgroup \expandafter\gobblefivearguments \else % tzt, overload internal referenced objects to save entries \elabelgroup \expandafter\dodosetobject \fi {#1}{#2}{#3}} \def\resetobject#1#2% {\checkobjectreferences \letbeundefined{\r!object#1::#2}} %D \macros %D {finalizeobjectbox} %D %D This one provides a hook for last minute object box processing %D we need this in \MKIV. \ifx\finalizeobjectbox\undefined \let\finalizeobjectbox\gobbleoneargument \fi %D Somehow there is a rounding error problem in either \PDFTEX\ %D or in viewers, or maybe it is conforming the specs. The next %D variable compensate for it by removing the rather tight %D clip. \def\objectoffset{1cm} % \def\dodosetobject#1#2#3% % {\bgroup % \inobjecttrue % \dowithnextbox{\dododosetobject{#1}{#2}{#3}\egroup}} \def\dodosetobject#1#2#3% {\bgroup \globalpushmacro\crossreferenceobject \objectreferenced \inobjecttrue \dowithnextbox {\globalpopmacro\crossreferenceobject \dododosetobject{#1}{#2}{#3}\egroup}} \def\dododosetobject#1#2#3% {\blabelgroup \dontshowcomposition % rather fuzzy in \setxvalue ... \hbox \scratchdimen\objectoffset \@EA\xdef\csname\r!object#2::#3\endcsname {\noexpand\dohandleobject{#2}{#3}% {\ifhbox\nextbox\hbox\else\vbox\fi}% %{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% {\number\nextboxwd}{\number\nextboxht}{\number\nextboxdp}% {\number\scratchdimen}}% \expanded % freeze the dimensions since \dostartobject may use \nextbox {\dostartobject {#2}{#3}{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% \ifcase#1\relax\else \ifdim\objectoffset>\zeropoint \setbox\nextbox\vbox spread 2\scratchdimen {\forgetall \offinterlineskip \vss\hbox spread 2\scratchdimen{\hss\flushnextbox\hss}\vss}% \fi \fi \flushnextbox \dostopobject \elabelgroup} \def\getobject#1#2% {\blabelgroup \let\dohandleobject\dogetobject \csname\r!object#1::#2\endcsname} % \def\dogetobject#1#2#3#4#5#6% % {\initializepaper % \forgetall % \dontshowcomposition % \setbox\scratchbox\vbox % {\doinsertobject{#1}{#2}}% % \setbox\scratchbox#3% % {\vbox to #5\scaledpoint % {\ifdim\ht\scratchbox>#5\scaledpoint % % or \ifdim\wd\scratchbox>#4\scaledpoint % \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss % \else % \vss\box\scratchbox % \fi}}% % \wd\scratchbox#4\scaledpoint % \ht\scratchbox#5\scaledpoint % \dp\scratchbox#6\scaledpoint % \box\scratchbox % \elabelgroup} % \def\dogetobject#1#2#3#4#5#6#7% % {\initializepaper % \forgetall % \dontshowcomposition % \setbox\scratchbox\vbox % {\doinsertobject{#1}{#2}}% % \setbox\scratchbox#3% % {\vbox to #5\scaledpoint % {\ifdim\ht\scratchbox>#5\scaledpoint % % or \ifdim\wd\scratchbox>#4\scaledpoint % \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss % \else % \vss\box\scratchbox % \fi}}% % \scratchdimen#7\scaledpoint % \setbox\nextbox\hbox % {\hskip-\scratchdimen\lower\scratchdimen\flushnextbox}% % \wd\scratchbox#4\scaledpoint % \ht\scratchbox#5\scaledpoint % \dp\scratchbox#6\scaledpoint % \box\scratchbox % \elabelgroup} \def\dogetobject#1#2#3#4#5#6#7% don't change this, should work for dvi & pdf {\initializepaper \forgetall \dontshowcomposition \setbox\scratchbox\vbox {\doinsertobject{#1}{#2}}% \setbox\scratchbox#3% {\vbox to #5\scaledpoint {\ifdim\ht\scratchbox>#5\scaledpoint \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else\ifdim\wd\scratchbox>#4\scaledpoint \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss \else %\vss\box\scratchbox \vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% fix Chof \fi\fi}}% \box\scratchbox \elabelgroup} %D If needed one can ask for the dimensions of an object with: %D %D \starttyping %D \getobjectdimensions{class}{name} %D \stoptyping %D %D The results are reported in \type {\objectwidth}, \type %D {\objectheight} and \type {\objectdepth}. % \def\dogetobjectdimensions#1#2#3#4#5#6% % {\def\objectwidth {#4\s!sp}% % \def\objectheight{#5\s!sp}% % \def\objectdepth {#6\s!sp}} \def\dogetobjectdimensions#1#2#3#4#5#6#7% {\def\objectwidth {#4\s!sp}% \def\objectheight{#5\s!sp}% \def\objectdepth {#6\s!sp}% \def\objectmargin{#7\s!sp}} \def\getobjectdimensions#1#2% {\let\dohandleobject\dogetobjectdimensions \let\objectwidth \!!zeropoint \let\objectheight\!!zeropoint \let\objectdepth \!!zeropoint \labelcsname\r!object#1::#2\endcsname} %D Apart from this kind of objects, that have typeset content, %D we can have low level driver specific objects. Both types %D can have references to internal representations, hidden for %D the user. We keep track of such references by means of a %D dedicated cross reference mechanism. Normally, objects are %D defined before they are used, but forward referencing %D sometimes occurs. %D %D \starttyping %D \dosetobjectreference {class} {identifier} {reference value} {page} %D \dogetobjectreference {class} {identifier} \csname %D \stoptyping %D %D These commands are to be called by the \type{\startobject}, %D \type{\stopobject} and \type{\insertobject} specials. \def\objectreferenced{\global\chardef\crossreferenceobject\plusone} \def\driverreferenced{\global\chardef\crossreferenceobject\zerocount} \objectreferenced % no undefined test ! ! ! ! (pdftex fails on undefined objects) \def\setobjectreferences {\def\objectreference##1##2##3##4% {\ifundefined{\r!driver##1::##2}% \setxvalue{\r!driver##1::##2}{{##3}{##4}}% \else \showmessage\m!references{31}{[##1 ##2=>##3/##4]}% \fi}} \def\resetobjectreferences {\let\objectreference\gobblefourarguments} \resetobjectreferences \def\doregisterobjectreference#1#2#3% {\checkobjectreferences \blabelgroup \expanded{\writeutilitycommand{\noexpand\objectreference{#1}{#2}{#3}{\noexpand\realfolio}}}% \setxvalue{\r!driver#1::#2}{{#3}{\noexpand\realfolio}}% \elabelgroup} \def\dooverloadobjectreference#1#2#3% {\checkobjectreferences \blabelgroup \setxvalue{\r!driver#1::#2}{{#3}{\noexpand\realfolio}}% \elabelgroup} \def\dosetobjectreference {\ifcase\crossreferenceobject \objectreferenced \expandafter\dooverloadobjectreference \else \expandafter\doregisterobjectreference \fi} \def\dosetdriverreference {\driverreferenced\dosetobjectreference} \def\defaultobjectreference#1#2{0} % driver dependent \def\defaultobjectpage #1#2{\realfolio} \def\dogetobjectreference {\dodogetobjectreference\firstoftwoarguments\defaultobjectreference} \def\dogetobjectreferencepage{\dodogetobjectreference\secondoftwoarguments\defaultobjectpage} \def\dodogetobjectreference#1#2#3#4#5% {\checkobjectreferences \blabelgroup \ifundefined{\r!driver#3::#4}% \showmessage\m!references{30}{[#3 #4=>#3/#4]}% \xdef#5{#2{#3}{#4}}% \else \xdef#5{\@EAEAEA#1\csname\r!driver#3::#4\endcsname}% \fi \elabelgroup} \def\setobject {\driverreferenced\dosetobject1} \def\settightobject{\driverreferenced\dosetobject0} %D \macros %D {doifobjectfoundelse,doifobjectreferencefoundelse} %D %D To prevent redundant definition of objects, one can use %D the next tests: %D %D \starttyping %D \doifobjectfoundelse{class}{object}{do then}{do else} %D \doifobjectreferencefoundelse{class}{object}{do then}{do else} %D \stoptyping \def\doifobjectfoundelse#1#2% {\blabelgroup \ifcsname\r!object#1::#2\endcsname \elabelgroup \expandafter\firstoftwoarguments \else \elabelgroup \expandafter\secondoftwoarguments \fi} \def\doifobjectreferencefoundelse#1#2% {\checkobjectreferences \blabelgroup \ifcsname\r!driver#1::#2\endcsname \elabelgroup \expandafter\firstoftwoarguments \else \elabelgroup \expandafter\secondoftwoarguments \fi} %D \macros %D {doifobjectssupportedelse} %D %D Starting with reuse of graphics, we will implement object %D reuse when possible. To enable mechanisms to determine %D what method to use, we provide: %D %D \starttyping %D \doifobjectssupportedelse{true action}{false action} %D \stoptyping %D %D As we can see, currently objects depend on the special %D driver. \newif\ifobjectssupported \objectssupportedtrue \def\doifobjectssupportedelse {\ifobjectssupported \@EA\doifspecialavailableelse\@EA\doinsertobject \else \@EA\secondoftwoarguments \fi} %D There is a conceptual problem here. Objects are not possible %D in \DVI, unless faked like in \type {spec-dvi}. This means %D that we must be careful in loading special drivers that do %D support objects while we still want to be able to use the %D \DVI\ output. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-exe.lua0000644000175000017500000000724412130411274024122 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-exe'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this module needs checking (very old and never really used, not even enabled) local match, find, gmatch = string.match, string.find, string.gmatch local concat = table.concat local select = select local report_executers = logs.reporter("system","executers") resolvers.executers = resolvers.executers or { } local executers = resolvers.executers local permitted = { } local osexecute = os.execute local osexec = os.exec local osspawn = os.spawn local iopopen = io.popen local execute = osexecute local exec = osexec local spawn = osspawn local popen = iopopen local function register(...) for k=1,select("#",...) do local v = select(k,...) permitted[#permitted+1] = v == "*" and ".*" or v end end local function prepare(...) -- todo: make more clever first split local t = { ... } local n = #n local one = t[1] if n == 1 then if type(one) == 'table' then return one, concat(t," ",2,n) else local name, arguments = match(one,"^(.-)%s+(.+)$") if name and arguments then return name, arguments else return one, "" end end else return one, concat(t," ",2,n) end end local function executer(action) return function(...) local name, arguments = prepare(...) for k=1,#permitted do local v = permitted[k] if find(name,v) then return action(name .. " " .. arguments) else report_executers("not permitted: %s %s",name,arguments) end end return action("") end end local function finalize() -- todo: os.exec, todo: report ipv print execute = executer(osexecute) exec = executer(osexec) spawn = executer(osspawn) popen = executer(iopopen) finalize = function() report_executers("already finalized") end register = function() report_executers("already finalized, no registration permitted") end os.execute = execute os.exec = exec os.spawn = spawn io.popen = popen end executers.finalize = function(...) return finalize(...) end executers.register = function(...) return register(...) end executers.execute = function(...) return execute (...) end executers.exec = function(...) return exec (...) end executers.spawn = function(...) return spawn (...) end executers.popen = function(...) return popen (...) end local execution_mode directives.register("system.executionmode", function(v) execution_mode = v end) local execution_list directives.register("system.executionlist", function(v) execution_list = v end) function executers.check() if execution_mode == "none" then finalize() elseif execution_mode == "list" and execution_list ~= "" then for s in gmatch("[^%s,]",execution_list) do register(s) end finalize() else -- all end end --~ resolvers.executers.register('.*') --~ resolvers.executers.register('*') --~ resolvers.executers.register('dir','ls') --~ resolvers.executers.register('dir') --~ resolvers.executers.finalize() --~ resolvers.executers.execute('dir',"*.tex") --~ resolvers.executers.execute("dir *.tex") --~ resolvers.executers.execute("ls *.tex") --~ os.execute('ls') --~ resolvers.executers.check() context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-unfonts.mkiv0000644000175000017500000001760211754241457026037 0ustar norbertnorbert%D \module %D [ file=type-imp-unfonts, %D version=2012.03.11, %D title=\CONTEXT\ Typescript Macros, %D subtitle=UnFonts, %D author=Dalyoung \& Hans, %D date=\currentdate, %D copyright=Dalyoung \& Hans] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % usage: \setupbodyfont[unfonts] \loadtypescriptfile[texgyre] \loadtypescriptfile[xits] \definefontfeature [kr-default] [mode=node,script=hang,lang=kor] \definefontfeature [kr-slanted] [mode=node,script=hang,lang=kor,slant=.2] \definefontfeature [kr-latin-default] [default] \definefontfeature [kr-latin-slanted] [krlatindefault] [slant=.2] \definefontfeature [kr-latin-slanted-mono] [slant=.2] \definefontfeature [kr-latin-smallcaps] [krlatindefault] [smcp=yes] \definefontfeature [kr-latin-smallcaps-mono] [cmcp=yes] \definefontfallback[kr-serif] [texgyrepagella-regular*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-serifbold] [texgyrepagella-bold*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-serifitalic] [texgyrepagella-italic*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-serifbolditalic] [texgyrepagella-bolditalic*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-serifslanted] [texgyrepagella-regular*kr-latin-slanted] [0x0000-0x0400][force=yes] \definefontfallback[kr-serifboldslanted][texgyrepagella-bold*kr-latin-slanted] [0x0000-0x0400][force=yes] \definefontfallback[kr-serifcaps] [texgyrepagella-regular*kr-latin-smallcaps] [0x0000-0x0400][force=yes] \definefontfallback[kr-sans] [texgyreheros-regular*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-sansbold] [texgyreheros-bold*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-sansitalic] [texgyreheros-italic*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-sansbolditalic] [texgyreheros-bolditalic*kr-latin-default] [0x0000-0x0400][force=yes] \definefontfallback[kr-sansslanted] [texgyreheros-regular*kr-latin-slanted] [0x0000-0x0400][force=yes] \definefontfallback[kr-sansboldslanted] [texgyreheros-bold*kr-latin-slanted] [0x0000-0x0400][force=yes] \definefontfallback[kr-sanscaps] [texgyreheros-regular*kr-latin-smallcaps] [0x0000-0x0400][force=yes] \definefontfallback[kr-mono] [texgyrecursor-regular] [0x0000-0x0400][force=yes] \definefontfallback[kr-monobold] [texgyrecursor-bold] [0x0000-0x0400][force=yes] \definefontfallback[kr-monoitalic] [texgyrecursor-italic] [0x0000-0x0400][force=yes] \definefontfallback[kr-monobolditalic] [texgyrecursor-bolditalic] [0x0000-0x0400][force=yes] \definefontfallback[kr-monoslanted] [texgyrecursor-regular*kr-latin-slanted-mono] [0x0000-0x0400][force=yes] \definefontfallback[kr-monoboldslanted] [texgyrecursor-bold*kr-latin-slanted-mono] [0x0000-0x0400][force=yes] \definefontfallback[kr-monocaps] [texgyrecursor-regular*kr-latin-smallcaps-mono][0x0000-0x0400][force=yes] \starttypescriptcollection[unfonts] \starttypescript [\s!serif] [unbatang] \definefontsynonym [unbatang] [\s!file:unbatang] [\s!features=kr-default,\s!fallbacks=kr-serif] \definefontsynonym [unbatangbold] [\s!file:unbatangbold][\s!features=kr-default,\s!fallbacks=kr-serifbold] \definefontsynonym [unbatangitalic] [\s!file:unbatang] [\s!features=kr-slanted,\s!fallbacks=kr-serifitalic] \definefontsynonym [unbatangbolditalic] [\s!file:unbatangbold][\s!features=kr-slanted,\s!fallbacks=kr-serifbolditalic] \definefontsynonym [unbatangslanted] [\s!file:unbatang] [\s!features=kr-slanted,\s!fallbacks=kr-serifslanted] \definefontsynonym [unbatangboldslanted][\s!file:unbatangbold][\s!features=kr-slanted,\s!fallbacks=kr-serifboldslanted] \definefontsynonym [unbatangcaps] [\s!file:unbatang] [\s!features=kr-default,\s!fallbacks=kr-serifcaps] \stoptypescript \starttypescript [\s!sans] [undotum] \definefontsynonym[undotum] [\s!file:undotum] [\s!features=kr-default,\s!fallbacks=kr-sans] \definefontsynonym[undotumbold] [\s!file:undotumbold] [\s!features=kr-default,\s!fallbacks=kr-sansbold] \definefontsynonym[undotumitalic] [\s!file:undotum] [\s!features=kr-slanted,\s!fallbacks=kr-sansitalic] \definefontsynonym[undotumbolditalic] [\s!file:undotumbold] [\s!features=kr-slanted,\s!fallbacks=kr-sansbolditalic] \definefontsynonym[undotumslanted] [\s!file:undotum] [\s!features=kr-slanted,\s!fallbacks=kr-sansslanted] \definefontsynonym[undotumboldslanted] [\s!file:undotumbold] [\s!features=kr-slanted,\s!fallbacks=kr-sansboldslanted] \definefontsynonym[undotumcaps] [\s!file:undotum] [\s!features=kr-default,\s!fallbacks=kr-sanscaps] \stoptypescript \starttypescript [\s!mono] [untype] \definefontsynonym[untype] [\s!file:untaza] [\s!features=kr-default,\s!fallbacks=kr-mono] \definefontsynonym[untypebold] [\s!file:untaza] [\s!features=kr-default,\s!fallbacks=kr-monobold] \definefontsynonym[untypeitalic] [\s!file:untaza] [\s!features=kr-slanted,\s!fallbacks=kr-monoitalic] \definefontsynonym[untypebolditalic] [\s!file:untaza] [\s!features=kr-slanted,\s!fallbacks=kr-monobolditalic] \definefontsynonym[untypeslanted] [\s!file:untaza] [\s!features=kr-slanted,\s!fallbacks=kr-monoslanted] \definefontsynonym[untypeboldslanted] [\s!file:untaza] [\s!features=kr-slanted,\s!fallbacks=kr-monoboldslanted] \definefontsynonym[untypecaps] [\s!file:untaza] [\s!features=kr-default,\s!fallbacks=kr-monocaps] \stoptypescript \starttypescript [\s!serif] [unbatang] [\s!name] \definefontsynonym[\s!Serif] [unbatang] \definefontsynonym[\s!SerifBold] [unbatangbold] \definefontsynonym[\s!SerifItalic] [unbatangitalic] \definefontsynonym[\s!SerifBoldItalic] [unbatangbolditalic] \definefontsynonym[\s!SerifSlanted] [unbatangslanted] \definefontsynonym[\s!SerifBoldSlanted][unbatangboldslanted] \definefontsynonym[\s!SerifCaps] [unbatangcaps] \stoptypescript \starttypescript [\s!sans] [undotum] [\s!name] \definefontsynonym[\s!Sans] [undotum] \definefontsynonym[\s!SansBold] [undotumbold] \definefontsynonym[\s!SansItalic] [undotumitalic] \definefontsynonym[\s!SansBoldItalic] [undotumbolditalic] \definefontsynonym[\s!SansSlanted] [undotumslanted] \definefontsynonym[\s!SansBoldSlanted] [undotumboldslanted] \definefontsynonym[\s!SansCaps] [undotumcaps] \stoptypescript \starttypescript [\s!mono] [untype] [\s!name] \definefontsynonym[\s!Mono] [untype] \definefontsynonym[\s!MonoBold] [untypebold] \definefontsynonym[\s!MonoItalic] [untypeitalic] \definefontsynonym[\s!MonoBoldItalic] [untypebolditalic] \definefontsynonym[\s!MonoSlanted] [untypeslanted] \definefontsynonym[\s!MonoBoldSlanted] [untypeboldslanted] \definefontsynonym[\s!MonoCaps] [untypecaps] \stoptypescript % xits might get replaced with a pagella once we have it \starttypescript[unfonts] \definetypeface [unfonts] [\s!rm] [\s!serif] [unbatang] \definetypeface [unfonts] [\s!ss] [\s!sans] [undotum] \definetypeface [unfonts] [\s!tt] [\s!mono] [untype] \definetypeface [unfonts] [\s!mm] [\s!math] [xits] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/x-ldx.ctx0000644000175000017500000000130312130411274023435 0ustar norbertnorbert Lua Documentation Generator mtxrun --script x-ldx.lua purge forcexml x-ldx.mkiv context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-men.mkii0000644000175000017500000003002311571377075024315 0ustar norbertnorbert\setinterfacemessage{references}{1}{unknown reference --} \setinterfacemessage{references}{30}{unknown object --} \setinterfacemessage{references}{3}{unknown reference type --} \setinterfacemessage{references}{2}{duplicate reference -- on page --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{illegal reference --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{references} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{duplicate object --} \setinterfacemessage{references}{21}{document -- loaded} \setinterfacemessage{references}{22}{document -- is not interactive} \setinterfacemessage{references}{23}{obscure reference -- (prefix=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{number --} \setinterfacemessage{handlings}{1}{font handling --} \setinterfacemessage{handlings}{3}{unknown font handling --} \setinterfacemessage{handlings}{2}{font handling -- is loaded} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{system} \setinterfacemessage{systems}{41}{external file -- in group -- does not exist} \setinterfacemessage{systems}{9}{-- not found/processed} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{new version of utility file, second pass needed} \setinterfacemessage{systems}{21}{no utility data is loaded} \setinterfacemessage{systems}{20}{meaning (sorts) of -- loaded} \setinterfacemessage{systems}{5}{module -- loaded} \setinterfacemessage{systems}{4}{command -- is already defined} \setinterfacemessage{systems}{27}{Version} \setinterfacemessage{systems}{26}{Registers} \setinterfacemessage{systems}{25}{References} \setinterfacemessage{systems}{24}{Floatblocks} \setinterfacemessage{systems}{1}{loading utility-file postponed (typemode)} \setinterfacemessage{systems}{23}{-- arranged at --} \setinterfacemessage{systems}{22}{use a valid utilityfile} \setinterfacemessage{systems}{2}{-- loaded} \setinterfacemessage{systems}{19}{meaning (synonyms) of -- loaded} \setinterfacemessage{systems}{18}{synonym -- -- does not exist} \setinterfacemessage{systems}{7}{module -- already loaded} \setinterfacemessage{systems}{6}{module -- not found} \setinterfacemessage{systems}{14}{forced newpage in list at --} \setinterfacemessage{systems}{15}{saving buffer --} \setinterfacemessage{systems}{16}{typesetting buffer --} \setinterfacemessage{systems}{17}{typesetting verbatim buffer --} \setinterfacemessage{systems}{13}{mark -- defined --} \setinterfacemessage{systems}{12}{the utility-file is not sorted, use texutil} \setinterfacemessage{systems}{11}{building simple util} \setinterfacemessage{systems}{10}{don't use em in --} \setinterfacemessage{floatblocks}{1}{-- renumbered / -- => --} \setinterfacemessage{floatblocks}{3}{-- moved} \setinterfacemessage{floatblocks}{2}{-- saved} \setinterfacemessage{floatblocks}{5}{order adapted} \setinterfacemessage{floatblocks}{4}{-- placed} \setinterfacemessage{floatblocks}{7}{n of bottom floats limited to --} \setinterfacemessage{floatblocks}{6}{n of top floats limited to --} \setinterfacemessage{floatblocks}{9}{order disturbed} \setinterfacemessage{floatblocks}{8}{less than -- lines} \setinterfacemessage{floatblocks}{title}{floatblocks} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{undefined} \setinterfacemessage{floatblocks}{11}{no block given} \setinterfacemessage{floatblocks}{10}{-- limited} \setinterfacemessage{interactions}{1}{aspect ratio -- x -- (b x h)} \setinterfacemessage{interactions}{3}{inactive} \setinterfacemessage{interactions}{2}{active} \setinterfacemessage{interactions}{5}{unknown attachment --} \setinterfacemessage{interactions}{4}{no pagesynchronisation (--) in hmode} \setinterfacemessage{interactions}{6}{attachment file -- does not exist} \setinterfacemessage{interactions}{title}{interaction} \setinterfacemessage{interactions}{21}{-- code inserted} \setinterfacemessage{regimes}{1}{regime --} \setinterfacemessage{regimes}{3}{unknown regime --} \setinterfacemessage{regimes}{2}{regime -- is loaded} \setinterfacemessage{regimes}{title}{regime} \setinterfacemessage{structures}{1}{begin of sectionblock --} \setinterfacemessage{structures}{title}{structure} \setinterfacemessage{structures}{2}{end of sectionblock --} \setinterfacemessage{linguals}{1}{patterns -- for -- loaded (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{hyphenations -- for -- loaded (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{no patterns -- for -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{patterns for -- not loaded} \setinterfacemessage{linguals}{4}{no hyphenations -- for -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{language specific options [--] introduce a -- skip} \setinterfacemessage{linguals}{6}{language -- is undefined} \setinterfacemessage{linguals}{9}{language -- is active} \setinterfacemessage{linguals}{8}{language specific options [--] seamless appended} \setinterfacemessage{linguals}{title}{language} \setinterfacemessage{linguals}{10}{patterns -- loaded} \setinterfacemessage{verbatims}{1}{file -- does not exist} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{filter -- is loaded} \setinterfacemessage{filters}{title}{filter} \setinterfacemessage{filters}{2}{unknown filter --} \setinterfacemessage{textblocks}{1}{new version, second pass needed} \setinterfacemessage{textblocks}{3}{reading blocks from --} \setinterfacemessage{textblocks}{2}{writing blocks to --} \setinterfacemessage{textblocks}{5}{-- not hidden} \setinterfacemessage{textblocks}{4}{second pass needed} \setinterfacemessage{textblocks}{7}{-- hidden} \setinterfacemessage{textblocks}{6}{-- hidden and processed} \setinterfacemessage{textblocks}{9}{-- not typeset} \setinterfacemessage{textblocks}{8}{-- typeset} \setinterfacemessage{textblocks}{title}{textblocks} \setinterfacemessage{textblocks}{12}{-- skipped} \setinterfacemessage{textblocks}{11}{-- loaded and typeset} \setinterfacemessage{textblocks}{10}{-- loaded and processed} \setinterfacemessage{encodings}{1}{coding --} \setinterfacemessage{encodings}{3}{unknown coding --} \setinterfacemessage{encodings}{2}{coding -- is loaded} \setinterfacemessage{encodings}{title}{encoding} \setinterfacemessage{columns}{1}{only -- columns possible} \setinterfacemessage{columns}{3}{problems, disable balancing} \setinterfacemessage{columns}{2}{use \string\filbreak\space as alternative} \setinterfacemessage{columns}{5}{bottom float not yet supported} \setinterfacemessage{columns}{4}{top float not yet supported} \setinterfacemessage{columns}{7}{balancing aborted after 100 steps} \setinterfacemessage{columns}{6}{-- float(s) postponed} \setinterfacemessage{columns}{9}{check raggedness} \setinterfacemessage{columns}{8}{balanced in -- step(s)} \setinterfacemessage{columns}{title}{columns} \setinterfacemessage{columns}{13}{wide float moved to top of columns} \setinterfacemessage{columns}{12}{float moved to next column / --} \setinterfacemessage{columns}{11}{float too wide for column} \setinterfacemessage{columns}{10}{(less than) 1 line left} \setinterfacemessage{symbols}{1}{loading symbolset --} \setinterfacemessage{symbols}{title}{symbols} \setinterfacemessage{files}{1}{file synonym -- is already used for --} \setinterfacemessage{files}{title}{files} \setinterfacemessage{versions}{1}{missing @+} \setinterfacemessage{versions}{3}{selected pages: --} \setinterfacemessage{versions}{2}{marking pages} \setinterfacemessage{versions}{title}{version} \setinterfacemessage{specials}{1}{-- loaded} \setinterfacemessage{specials}{3}{-- is reset} \setinterfacemessage{specials}{2}{no deeper nesting is permitted --} \setinterfacemessage{specials}{5}{loading definition file --} \setinterfacemessage{specials}{4}{command -- does not exist} \setinterfacemessage{specials}{7}{unknown driver --} \setinterfacemessage{specials}{6}{nesting is not permitted} \setinterfacemessage{specials}{title}{specials} \setinterfacemessage{layouts}{1}{textheight adapted with -- at page --} \setinterfacemessage{layouts}{3}{-- times text postponed} \setinterfacemessage{layouts}{2}{-- times postponed text placed} \setinterfacemessage{layouts}{5}{marginblocks inactive} \setinterfacemessage{layouts}{4}{marginblocks active} \setinterfacemessage{layouts}{7}{calculating logospace} \setinterfacemessage{layouts}{6}{subpage set -- processed (size --)} \setinterfacemessage{layouts}{9}{currently no more than -- levels in itemizations} \setinterfacemessage{layouts}{8}{calculating backgrounds} \setinterfacemessage{layouts}{title}{layout} \setinterfacemessage{layouts}{11}{spacing -- not permitted in gridmode} \setinterfacemessage{layouts}{10}{-- and -- don't add up to 1.0} \setinterfacemessage{fonts}{1}{coding --} \setinterfacemessage{fonts}{3}{unknown variant --} \setinterfacemessage{fonts}{2}{variant -- is loaded} \setinterfacemessage{fonts}{5}{style -- is not defined} \setinterfacemessage{fonts}{4}{bodyfont -- is not defined} \setinterfacemessage{fonts}{7}{unknown format --} \setinterfacemessage{fonts}{6}{-- is loaded} \setinterfacemessage{fonts}{14}{bodyfont -- is defined (can better be done global)} \setinterfacemessage{fonts}{8}{style -- defined} \setinterfacemessage{fonts}{title}{bodyfont} \setinterfacemessage{fonts}{10}{unknown font file --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{global file --} \setinterfacemessage{databases}{2}{local file --} \setinterfacemessage{databases}{4}{unknown file --} \setinterfacemessage{databases}{title}{databases} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{loading script set --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{unknown preamble --} \setinterfacemessage{check}{1}{missing or ungrouped '=' after '--' in line --} \setinterfacemessage{check}{3}{-- -- replaces a macro, use CAPITALS!} \setinterfacemessage{check}{2}{-- argument(s) expected in line --} \setinterfacemessage{check}{title}{check} \setinterfacemessage{metapost}{1}{loading metapost library --} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{figure -- can not be found} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{figure -- is not preset} \setinterfacemessage{figures}{5}{dimensions of -- are unknown} \setinterfacemessage{figures}{4}{dimensions of -- loaded from figurefile itself} \setinterfacemessage{figures}{6}{dimensions of -- calculated by rlxtools} \setinterfacemessage{figures}{8}{figureobject -- is reused} \setinterfacemessage{figures}{title}{figures} \setinterfacemessage{colors}{1}{system -- is global activated} \setinterfacemessage{colors}{3}{-- is not defined --} \setinterfacemessage{colors}{2}{system -- is local activated} \setinterfacemessage{colors}{5}{unknown system --} \setinterfacemessage{colors}{4}{system -- is loaded} \setinterfacemessage{colors}{7}{palette -- is not available} \setinterfacemessage{colors}{6}{palette -- is available} \setinterfacemessage{colors}{9}{-- color space is not supported} \setinterfacemessage{colors}{8}{specification -- at color -- becomes black} \setinterfacemessage{colors}{title}{color} \setinterfacemessage{colors}{12}{-- is registered} \setinterfacemessage{colors}{11}{color is converted to gray} \setinterfacemessage{colors}{10}{-- color space is supported} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/l-math.lua0000644000175000017500000000162311754241457023572 0ustar norbertnorbertif not modules then modules = { } end modules ['l-math'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local floor, sin, cos, tan = math.floor, math.sin, math.cos, math.tan if not math.round then function math.round(x) return floor(x + 0.5) end end if not math.div then function math.div(n,m) return floor(n/m) end end if not math.mod then function math.mod(n,m) return n % m end end local pipi = 2*math.pi/360 if not math.sind then function math.sind(d) return sin(d*pipi) end function math.cosd(d) return cos(d*pipi) end function math.tand(d) return tan(d*pipi) end end if not math.odd then function math.odd (n) return n % 2 ~= 0 end function math.even(n) return n % 2 == 0 end end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-bkm.mkiv0000644000175000017500000001031212130411274024273 0ustar norbertnorbert%D \module %D [ file=strc-bkm, %D version=2009.04.01, %D title=\CONTEXT\ Structure Macros, %D subtitle=Bookmarks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Bookmarks} \registerctxluafile{strc-bkm}{1.001} \unprotect %D Bookmarks are a very viewer dependent feature. They are mostly used %D as additional table of contents and therefore relate directly to lists. %D %D A bookmark list is added to the document only when interaction is %D enabled. The given lists are bookmarked and a second argument specifies %D the opened bookmark trees. %D %D \starttyping %D \placebookmarks %D [chapter,section,subsection,mylist] %D [chapter] %D \stoptyping %D %D You can overloads the last set bookmark in a sectioning command: %D %D \starttyping %D \chapter {the first chapter} %D \bookmark {the first bookmark} %D \stoptyping %D %D However, in practice you can better use \type {\startchapter} and set the %D \type {bookmark} parameter. %D %D You can add entries to the bookmarklist: %D %D \starttyping %D \bookmark[mylist]{whatever} %D \stoptyping %D %D Use force to get titles in the bookmarklist. This is somewhat tricky as %D one does not want "Contents" in a table of contents but it has to be in %D the bookmark list. \installcorenamespace{bookmark} \installsetuponlycommandhandler \??bookmark {bookmark} % installdirectparametersethandler \setupbookmark [\c!force=\v!no, % it's easier to force that to inhibit \c!number=\v!yes] % might become v!no \let\setupbookmarks\setupbookmark \unexpanded\def\bookmark {\dosingleempty\strc_bookmarks_bookmark} \def\strc_bookmarks_bookmark {\iflocation \expandafter\strc_bookmarks_bookmark_yes \else \expandafter\strc_bookmarks_bookmark_nop \fi} \def\strc_bookmarks_bookmark_yes[#1]#2% {\begingroup \simplifycommands \ctxcommand{overloadbookmark("#1",\!!bs\detokenize\expandafter{\normalexpanded{#2}}\!!es)}% \endgroup} \def\strc_bookmarks_bookmark_nop[#1]#2% {} \unexpanded\def\placebookmarks {\dotripleempty\strc_bookmarks_place} \def\strc_bookmarks_place {\iflocation \expandafter\strc_bookmarks_place_yes \else \expandafter\gobblethreeoptionals \fi} \let\m_bookmarks_names \empty \let\m_bookmarks_opened\empty \def\strc_bookmarks_place_yes[#1][#2][#3]% {\begingroup \edef\m_bookmarks_names{#1}% \edef\m_bookmarks_opened{#2}% \ifx\m_bookmarks_names\empty \edef\m_bookmarks_names{\namedlistparameter\v!content\c!list}% \fi \ifx\m_bookmarks_names\empty \let\m_bookmarks_names\v!all \fi \ifthirdargument \setupcurrentbookmark[#3]% no every so not all possible \else\ifsecondargument \doifassignmentelse{#2}{\let\m_bookmarks_opened\empty\setupcurrentbookmark[#2]}\donothing \fi\fi \ctxcommand{registerbookmark { names = "\m_bookmarks_names", opened = "\m_bookmarks_opened", force = "\bookmarkparameter\c!force", number = "\bookmarkparameter\c!number", }}% \endgroup} \appendtoks \ctxcommand{setupbookmarks { separatorset = "\bookmarkparameter\c!numberseparatorset", conversionset = "\bookmarkparameter\c!numberconversionset", starter = \!!bs\bookmarkparameter\c!numberstarter\!!es, stopper = \!!bs\bookmarkparameter\c!numberstopper\!!es, segments = "\bookmarkparameter\c!numbersegments", }}% \to \everysetupbookmark \protect \endinput % \starttext % \setupinteraction[state=start]\setupinteractionscreen[option=bookmark] % \placebookmarks[chapter,section,subsection][chapter] % \chapter{First} % \bookmark{The First Indeed} % \section{alpha} % \bookmark[chapter]{The First Indeed Again} % \section{beta} % \chapter{Second} % \bookmark{The Second Indeed} % \section{gamma \tex{radiation}} % \subsection{a} % \subsection{b} % \section{delta} % \section{epsilon} % \chapter{Third \relax} % \chapter{我〈能吞下玻璃而不傷身〉體。} % whatever that means % \chapter{Idris Samawi Hamid ادريس سماوي حامد} % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-com.mkiv0000644000175000017500000000157211754241457024276 0ustar norbertnorbert%D \module %D [ file=tabl-com, %D version=2009.08.22, %D title=\CONTEXT\ Table Macros, %D subtitle=Common Code, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Common Code} \unprotect \let\VL\relax \let\NC\relax \let\RC\relax \let\HC\relax \let\EQ\relax \let\RQ\relax \let\HQ\relax \let\NG\relax \let\NN\relax \let\ND\relax \let\NR\relax \let\NB\relax \let\CC\relax \let\CL\relax \let\CM\relax \let\CR\relax \let\SR\relax \let\FR\relax \let\MR\relax \let\LR\relax \let\AR\relax \let\FL\relax \let\ML\relax \let\LL\relax \let\TL\relax \let\BL\relax \let\HL\relax \let\HR\relax \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/file-lib.mkvi0000644000175000017500000000105411754241457024256 0ustar norbertnorbert%D \module %D [ file=file-lib, % was core-fil, %D version=20110701, % 1997.11.15, %D title=\CONTEXT\ File Macros, %D subtitle=Module Support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 File Macros / Libraries} \unprotect \registerctxluafile{file-lib}{1.001} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frq-nl.lua0000644000175000017500000000117212130411274024506 0ustar norbertnorbertreturn { language = "nl", source = "http://www.onzetaal.nl/advies/letterfreq.html", frequencies = { [0x0061] = 7.47, [0x0062] = 1.58, [0x0063] = 1.24, [0x0064] = 5.93, [0x0065] = 18.91, [0x0066] = 0.81, [0x0067] = 3.40, [0x0068] = 2.38, [0x0069] = 6.50, [0x006A] = 1.46, [0x006B] = 2.25, [0x006C] = 3.57, [0x006D] = 2.21, [0x006E] = 10.03, [0x006F] = 6.06, [0x0070] = 1.57, [0x0071] = 0.009, [0x0072] = 6.41, [0x0073] = 3.73, [0x0074] = 6.79, [0x0075] = 1.99, [0x0076] = 2.85, [0x0077] = 1.52, [0x0078] = 0.04, [0x0079] = 0.035, [0x007A] = 1.39, } } context-2013.05.28.20130704/texmf-dist/tex/context/base/l-unicode.lua0000644000175000017500000006427212130411274024261 0ustar norbertnorbertif not modules then modules = { } end modules ['l-unicode'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this module will be reorganized -- todo: utf.sub replacement (used in syst-aux) -- we put these in the utf namespace: utf = utf or (unicode and unicode.utf8) or { } utf.characters = utf.characters or string.utfcharacters utf.values = utf.values or string.utfvalues -- string.utfvalues -- string.utfcharacters -- string.characters -- string.characterpairs -- string.bytes -- string.bytepairs local type = type local char, byte, format, sub = string.char, string.byte, string.format, string.sub local concat = table.concat local P, C, R, Cs, Ct, Cmt, Cc, Carg, Cp = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cmt, lpeg.Cc, lpeg.Carg, lpeg.Cp local lpegmatch, patterns = lpeg.match, lpeg.patterns local bytepairs = string.bytepairs local finder = lpeg.finder local replacer = lpeg.replacer local utfvalues = utf.values local utfgmatch = utf.gmatch -- not always present local p_utftype = patterns.utftype local p_utfoffset = patterns.utfoffset local p_utf8char = patterns.utf8char local p_utf8byte = patterns.utf8byte local p_utfbom = patterns.utfbom local p_newline = patterns.newline local p_whitespace = patterns.whitespace if not unicode then unicode = { utf = utf } -- for a while end if not utf.char then local floor, char = math.floor, string.char function utf.char(n) if n < 0x80 then -- 0aaaaaaa : 0x80 return char(n) elseif n < 0x800 then -- 110bbbaa : 0xC0 : n >> 6 -- 10aaaaaa : 0x80 : n & 0x3F return char( 0xC0 + floor(n/0x40), 0x80 + (n % 0x40) ) elseif n < 0x10000 then -- 1110bbbb : 0xE0 : n >> 12 -- 10bbbbaa : 0x80 : (n >> 6) & 0x3F -- 10aaaaaa : 0x80 : n & 0x3F return char( 0xE0 + floor(n/0x1000), 0x80 + (floor(n/0x40) % 0x40), 0x80 + (n % 0x40) ) elseif n < 0x200000 then -- 11110ccc : 0xF0 : n >> 18 -- 10ccbbbb : 0x80 : (n >> 12) & 0x3F -- 10bbbbaa : 0x80 : (n >> 6) & 0x3F -- 10aaaaaa : 0x80 : n & 0x3F -- dddd : ccccc - 1 return char( 0xF0 + floor(n/0x40000), 0x80 + (floor(n/0x1000) % 0x40), 0x80 + (floor(n/0x40) % 0x40), 0x80 + (n % 0x40) ) else return "" end end end if not utf.byte then local utf8byte = patterns.utf8byte function utf.byte(c) return lpegmatch(utf8byte,c) end end local utfchar, utfbyte = utf.char, utf.byte -- As we want to get rid of the (unmaintained) utf library we implement our own -- variants (in due time an independent module): function utf.filetype(data) return data and lpegmatch(p_utftype,data) or "unknown" end local toentities = Cs ( ( patterns.utf8one + ( patterns.utf8two + patterns.utf8three + patterns.utf8four ) / function(s) local b = utfbyte(s) if b < 127 then return s else return format("&#%X;",b) end end )^0 ) patterns.toentities = toentities function utf.toentities(str) return lpegmatch(toentities,str) end -- local utfchr = { } -- 60K -> 2.638 M extra mem but currently not called that often (on latin) -- -- setmetatable(utfchr, { __index = function(t,k) local v = utfchar(k) t[k] = v return v end } ) -- -- collectgarbage("collect") -- local u = collectgarbage("count")*1024 -- local t = os.clock() -- for i=1,1000 do -- for i=1,600 do -- local a = utfchr[i] -- end -- end -- print(os.clock()-t,collectgarbage("count")*1024-u) -- collectgarbage("collect") -- local t = os.clock() -- for i=1,1000 do -- for i=1,600 do -- local a = utfchar(i) -- end -- end -- print(os.clock()-t,collectgarbage("count")*1024-u) -- local byte = string.byte -- local utfchar = utf.char local one = P(1) local two = C(1) * C(1) local four = C(R(utfchar(0xD8),utfchar(0xFF))) * C(1) * C(1) * C(1) -- actually one of them is already utf ... sort of useless this one -- function utf.char(n) -- if n < 0x80 then -- return char(n) -- elseif n < 0x800 then -- return char( -- 0xC0 + floor(n/0x40), -- 0x80 + (n % 0x40) -- ) -- elseif n < 0x10000 then -- return char( -- 0xE0 + floor(n/0x1000), -- 0x80 + (floor(n/0x40) % 0x40), -- 0x80 + (n % 0x40) -- ) -- elseif n < 0x40000 then -- return char( -- 0xF0 + floor(n/0x40000), -- 0x80 + floor(n/0x1000), -- 0x80 + (floor(n/0x40) % 0x40), -- 0x80 + (n % 0x40) -- ) -- else -- -- return char( -- -- 0xF1 + floor(n/0x1000000), -- -- 0x80 + floor(n/0x40000), -- -- 0x80 + floor(n/0x1000), -- -- 0x80 + (floor(n/0x40) % 0x40), -- -- 0x80 + (n % 0x40) -- -- ) -- return "?" -- end -- end -- -- merge into: local pattern = P("\254\255") * Cs( ( four / function(a,b,c,d) local ab = 0xFF * byte(a) + byte(b) local cd = 0xFF * byte(c) + byte(d) return utfchar((ab-0xD800)*0x400 + (cd-0xDC00) + 0x10000) end + two / function(a,b) return utfchar(byte(a)*256 + byte(b)) end + one )^1 ) + P("\255\254") * Cs( ( four / function(b,a,d,c) local ab = 0xFF * byte(a) + byte(b) local cd = 0xFF * byte(c) + byte(d) return utfchar((ab-0xD800)*0x400 + (cd-0xDC00) + 0x10000) end + two / function(b,a) return utfchar(byte(a)*256 + byte(b)) end + one )^1 ) function string.toutf(s) -- in string namespace return lpegmatch(pattern,s) or s -- todo: utf32 end local validatedutf = Cs ( ( patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four + P(1) / "�" )^0 ) patterns.validatedutf = validatedutf function utf.is_valid(str) return type(str) == "string" and lpegmatch(validatedutf,str) or false end if not utf.len then -- -- alternative 1: 0.77 -- -- local utfcharcounter = utfbom^-1 * Cs((p_utf8char/'!')^0) -- -- function utf.len(str) -- return #lpegmatch(utfcharcounter,str or "") -- end -- -- -- alternative 2: 1.70 -- -- local n = 0 -- -- local utfcharcounter = utfbom^-1 * (p_utf8char/function() n = n + 1 end)^0 -- slow -- -- function utf.length(str) -- n = 0 -- lpegmatch(utfcharcounter,str or "") -- return n -- end -- -- -- alternative 3: 0.24 (native unicode.utf8.len: 0.047) -- local n = 0 -- -- -- local utfcharcounter = lpeg.patterns.utfbom^-1 * P ( ( Cp() * ( -- -- patterns.utf8one ^1 * Cc(1) -- -- + patterns.utf8two ^1 * Cc(2) -- -- + patterns.utf8three^1 * Cc(3) -- -- + patterns.utf8four ^1 * Cc(4) ) * Cp() / function(f,d,t) n = n + (t - f)/d end -- -- )^0 ) -- just as many captures as below -- -- -- local utfcharcounter = lpeg.patterns.utfbom^-1 * P ( ( -- -- (Cmt(patterns.utf8one ^1,function(_,_,s) n = n + #s return true end)) -- -- + (Cmt(patterns.utf8two ^1,function(_,_,s) n = n + #s/2 return true end)) -- -- + (Cmt(patterns.utf8three^1,function(_,_,s) n = n + #s/3 return true end)) -- -- + (Cmt(patterns.utf8four ^1,function(_,_,s) n = n + #s/4 return true end)) -- -- )^0 ) -- not interesting as it creates strings but sometimes faster -- -- -- The best so far: -- -- local utfcharcounter = utfbom^-1 * P ( ( -- Cp() * (patterns.utf8one )^1 * Cp() / function(f,t) n = n + t - f end -- + Cp() * (patterns.utf8two )^1 * Cp() / function(f,t) n = n + (t - f)/2 end -- + Cp() * (patterns.utf8three)^1 * Cp() / function(f,t) n = n + (t - f)/3 end -- + Cp() * (patterns.utf8four )^1 * Cp() / function(f,t) n = n + (t - f)/4 end -- )^0 ) -- function utf.len(str) -- n = 0 -- lpegmatch(utfcharcounter,str or "") -- return n -- end local n, f = 0, 1 local utfcharcounter = patterns.utfbom^-1 * Cmt ( Cc(1) * patterns.utf8one ^1 + Cc(2) * patterns.utf8two ^1 + Cc(3) * patterns.utf8three^1 + Cc(4) * patterns.utf8four ^1, function(_,t,d) -- due to Cc no string captures, so faster n = n + (t - f)/d f = t return true end )^0 function utf.len(str) n, f = 0, 1 lpegmatch(utfcharcounter,str or "") return n end -- -- these are quite a bit slower: -- utfcharcounter = utfbom^-1 * (Cmt(P(1) * R("\128\191")^0, function() n = n + 1 return true end))^0 -- 50+ times slower -- utfcharcounter = utfbom^-1 * (Cmt(P(1), function() n = n + 1 return true end) * R("\128\191")^0)^0 -- 50- times slower end utf.length = utf.len if not utf.sub then -- inefficient as lpeg just copies ^n -- local function sub(str,start,stop) -- local pattern = p_utf8char^-(start-1) * C(p_utf8char^-(stop-start+1)) -- inspect(pattern) -- return lpegmatch(pattern,str) or "" -- end -- local b, e, n, first, last = 0, 0, 0, 0, 0 -- -- local function slide(s,p) -- n = n + 1 -- if n == first then -- b = p -- if not last then -- return nil -- end -- end -- if n == last then -- e = p -- return nil -- else -- return p -- end -- end -- -- local pattern = Cmt(p_utf8char,slide)^0 -- -- function utf.sub(str,start,stop) -- todo: from the end -- if not start then -- return str -- end -- b, e, n, first, last = 0, 0, 0, start, stop -- lpegmatch(pattern,str) -- if not stop then -- return sub(str,b) -- else -- return sub(str,b,e-1) -- end -- end -- print(utf.sub("Hans Hagen is my name")) -- print(utf.sub("Hans Hagen is my name",5)) -- print(utf.sub("Hans Hagen is my name",5,10)) local utflength = utf.length -- also negative indices, upto 10 times slower than a c variant local b, e, n, first, last = 0, 0, 0, 0, 0 local function slide_zero(s,p) n = n + 1 if n >= last then e = p - 1 else return p end end local function slide_one(s,p) n = n + 1 if n == first then b = p end if n >= last then e = p - 1 else return p end end local function slide_two(s,p) n = n + 1 if n == first then b = p else return true end end local pattern_zero = Cmt(p_utf8char,slide_zero)^0 local pattern_one = Cmt(p_utf8char,slide_one )^0 local pattern_two = Cmt(p_utf8char,slide_two )^0 function utf.sub(str,start,stop) if not start then return str end if start == 0 then start = 1 end if not stop then if start < 0 then local l = utflength(str) -- we can inline this function if needed start = l + start else start = start - 1 end b, n, first = 0, 0, start lpegmatch(pattern_two,str) if n >= first then return sub(str,b) else return "" end end if start < 0 or stop < 0 then local l = utf.length(str) if start < 0 then start = l + start if start <= 0 then start = 1 else start = start + 1 end end if stop < 0 then stop = l + stop if stop == 0 then stop = 1 else stop = stop + 1 end end end if start > stop then return "" elseif start > 1 then b, e, n, first, last = 0, 0, 0, start - 1, stop lpegmatch(pattern_one,str) if n >= first and e == 0 then e = #str end return sub(str,b,e) else b, e, n, last = 1, 0, 0, stop lpegmatch(pattern_zero,str) if e == 0 then e = #str end return sub(str,b,e) end end -- local n = 100000 -- local str = string.rep("123456àáâãäå",100) -- -- for i=-15,15,1 do -- for j=-15,15,1 do -- if utf.xsub(str,i,j) ~= utf.sub(str,i,j) then -- print("error",i,j,"l>"..utf.xsub(str,i,j),"s>"..utf.sub(str,i,j)) -- end -- end -- if utf.xsub(str,i) ~= utf.sub(str,i) then -- print("error",i,"l>"..utf.xsub(str,i),"s>"..utf.sub(str,i)) -- end -- end -- print(" 1, 7",utf.xsub(str, 1, 7),utf.sub(str, 1, 7)) -- print(" 0, 7",utf.xsub(str, 0, 7),utf.sub(str, 0, 7)) -- print(" 0, 9",utf.xsub(str, 0, 9),utf.sub(str, 0, 9)) -- print(" 4 ",utf.xsub(str, 4 ),utf.sub(str, 4 )) -- print(" 0 ",utf.xsub(str, 0 ),utf.sub(str, 0 )) -- print(" 0, 0",utf.xsub(str, 0, 0),utf.sub(str, 0, 0)) -- print(" 4, 4",utf.xsub(str, 4, 4),utf.sub(str, 4, 4)) -- print(" 4, 0",utf.xsub(str, 4, 0),utf.sub(str, 4, 0)) -- print("-3, 0",utf.xsub(str,-3, 0),utf.sub(str,-3, 0)) -- print(" 0,-3",utf.xsub(str, 0,-3),utf.sub(str, 0,-3)) -- print(" 5,-3",utf.xsub(str,-5,-3),utf.sub(str,-5,-3)) -- print("-3 ",utf.xsub(str,-3 ),utf.sub(str,-3 )) end -- a replacement for simple gsubs: function utf.remapper(mapping) local pattern = Cs((p_utf8char/mapping)^0) return function(str) if not str or str == "" then return "" else return lpegmatch(pattern,str) end end, pattern end -- local remap = utf.remapper { a = 'd', b = "c", c = "b", d = "a" } -- print(remap("abcd 1234 abcd")) -- function utf.replacer(t) -- no precheck, always string builder local r = replacer(t,false,false,true) return function(str) return lpegmatch(r,str) end end function utf.subtituter(t) -- with precheck and no building if no match local f = finder (t) local r = replacer(t,false,false,true) return function(str) local i = lpegmatch(f,str) if not i then return str elseif i > #str then return str else -- return sub(str,1,i-2) .. lpegmatch(r,str,i-1) -- slower return lpegmatch(r,str) end end end -- inspect(utf.split("a b c d")) -- inspect(utf.split("a b c d",true)) local utflinesplitter = p_utfbom^-1 * lpeg.tsplitat(p_newline) local utfcharsplitter_ows = p_utfbom^-1 * Ct(C(p_utf8char)^0) local utfcharsplitter_iws = p_utfbom^-1 * Ct((p_whitespace^1 + C(p_utf8char))^0) local utfcharsplitter_raw = Ct(C(p_utf8char)^0) patterns.utflinesplitter = utflinesplitter function utf.splitlines(str) return lpegmatch(utflinesplitter,str or "") end function utf.split(str,ignorewhitespace) -- new if ignorewhitespace then return lpegmatch(utfcharsplitter_iws,str or "") else return lpegmatch(utfcharsplitter_ows,str or "") end end function utf.totable(str) -- keeps bom return lpegmatch(utfcharsplitter_raw,str) end -- 0 EF BB BF UTF-8 -- 1 FF FE UTF-16-little-endian -- 2 FE FF UTF-16-big-endian -- 3 FF FE 00 00 UTF-32-little-endian -- 4 00 00 FE FF UTF-32-big-endian -- -- \000 fails in <= 5.0 but is valid in >=5.1 where %z is depricated -- utf.name = { -- [0] = 'utf-8', -- [1] = 'utf-16-le', -- [2] = 'utf-16-be', -- [3] = 'utf-32-le', -- [4] = 'utf-32-be' -- } -- -- function utf.magic(f) -- local str = f:read(4) -- if not str then -- f:seek('set') -- return 0 -- -- elseif find(str,"^%z%z\254\255") then -- depricated -- -- elseif find(str,"^\000\000\254\255") then -- not permitted and bugged -- elseif find(str,"\000\000\254\255",1,true) then -- seems to work okay (TH) -- return 4 -- -- elseif find(str,"^\255\254%z%z") then -- depricated -- -- elseif find(str,"^\255\254\000\000") then -- not permitted and bugged -- elseif find(str,"\255\254\000\000",1,true) then -- seems to work okay (TH) -- return 3 -- elseif find(str,"^\254\255") then -- f:seek('set',2) -- return 2 -- elseif find(str,"^\255\254") then -- f:seek('set',2) -- return 1 -- elseif find(str,"^\239\187\191") then -- f:seek('set',3) -- return 0 -- else -- f:seek('set') -- return 0 -- end -- end function utf.magic(f) -- not used local str = f:read(4) or "" local off = lpegmatch(p_utfoffset,str) if off < 4 then f:seek('set',off) end return lpegmatch(p_utftype,str) end local function utf16_to_utf8_be(t) if type(t) == "string" then t = lpegmatch(utflinesplitter,t) end local result = { } -- we reuse result for i=1,#t do local r, more = 0, 0 for left, right in bytepairs(t[i]) do if right then local now = 256*left + right if more > 0 then now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong more = 0 r = r + 1 result[r] = utfchar(now) elseif now >= 0xD800 and now <= 0xDBFF then more = now else r = r + 1 result[r] = utfchar(now) end end end t[i] = concat(result,"",1,r) -- we reused tmp, hence t end return t end local function utf16_to_utf8_le(t) if type(t) == "string" then t = lpegmatch(utflinesplitter,t) end local result = { } -- we reuse result for i=1,#t do local r, more = 0, 0 for left, right in bytepairs(t[i]) do if right then local now = 256*right + left if more > 0 then now = (more-0xD800)*0x400 + (now-0xDC00) + 0x10000 -- the 0x10000 smells wrong more = 0 r = r + 1 result[r] = utfchar(now) elseif now >= 0xD800 and now <= 0xDBFF then more = now else r = r + 1 result[r] = utfchar(now) end end end t[i] = concat(result,"",1,r) -- we reused tmp, hence t end return t end local function utf32_to_utf8_be(t) if type(t) == "string" then t = lpegmatch(utflinesplitter,t) end local result = { } -- we reuse result for i=1,#t do local r, more = 0, -1 for a,b in bytepairs(t[i]) do if a and b then if more < 0 then more = 256*256*256*a + 256*256*b else r = r + 1 result[t] = utfchar(more + 256*a + b) more = -1 end else break end end t[i] = concat(result,"",1,r) end return t end local function utf32_to_utf8_le(t) if type(t) == "string" then t = lpegmatch(utflinesplitter,t) end local result = { } -- we reuse result for i=1,#t do local r, more = 0, -1 for a,b in bytepairs(t[i]) do if a and b then if more < 0 then more = 256*b + a else r = r + 1 result[t] = utfchar(more + 256*256*256*b + 256*256*a) more = -1 end else break end end t[i] = concat(result,"",1,r) end return t end utf.utf32_to_utf8_be = utf32_to_utf8_be utf.utf32_to_utf8_le = utf32_to_utf8_le utf.utf16_to_utf8_be = utf16_to_utf8_be utf.utf16_to_utf8_le = utf16_to_utf8_le function utf.utf8_to_utf8(t) return type(t) == "string" and lpegmatch(utflinesplitter,t) or t end function utf.utf16_to_utf8(t,endian) return endian and utf16_to_utf8_be(t) or utf16_to_utf8_le(t) or t end function utf.utf32_to_utf8(t,endian) return endian and utf32_to_utf8_be(t) or utf32_to_utf8_le(t) or t end local function little(c) local b = byte(c) if b < 0x10000 then return char(b%256,b/256) else b = b - 0x10000 local b1, b2 = b/1024 + 0xD800, b%1024 + 0xDC00 return char(b1%256,b1/256,b2%256,b2/256) end end local function big(c) local b = byte(c) if b < 0x10000 then return char(b/256,b%256) else b = b - 0x10000 local b1, b2 = b/1024 + 0xD800, b%1024 + 0xDC00 return char(b1/256,b1%256,b2/256,b2%256) end end -- function utf.utf8_to_utf16(str,littleendian) -- if littleendian then -- return char(255,254) .. utfgsub(str,".",little) -- else -- return char(254,255) .. utfgsub(str,".",big) -- end -- end local _, l_remap = utf.remapper(little) local _, b_remap = utf.remapper(big) function utf.utf8_to_utf16(str,littleendian) if littleendian then return char(255,254) .. lpegmatch(l_remap,str) else return char(254,255) .. lpegmatch(b_remap,str) end end -- function utf.tocodes(str,separator) -- can be sped up with an lpeg -- local t, n = { }, 0 -- for u in utfvalues(str) do -- n = n + 1 -- t[n] = format("0x%04X",u) -- end -- return concat(t,separator or " ") -- end local pattern = Cs ( (p_utf8byte / function(unicode ) return format( "0x%04X", unicode) end) * (p_utf8byte * Carg(1) / function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0 ) function utf.tocodes(str,separator) return lpegmatch(pattern,str,1,separator or " ") end function utf.ustring(s) return format("U+%05X",type(s) == "number" and s or utfbyte(s)) end function utf.xstring(s) return format("0x%05X",type(s) == "number" and s or utfbyte(s)) end -- local p_nany = p_utf8char / "" if utfgmatch then function utf.count(str,what) if type(what) == "string" then local n = 0 for _ in utfgmatch(str,what) do n = n + 1 end return n else -- 4 times slower but still faster than / function return #lpegmatch(Cs((P(what)/" " + p_nany)^0),str) end end else local cache = { } function utf.count(str,what) if type(what) == "string" then local p = cache[what] if not p then p = Cs((P(what)/" " + p_nany)^0) cache[p] = p end return #lpegmatch(p,str) else -- 4 times slower but still faster than / function return #lpegmatch(Cs((P(what)/" " + p_nany)^0),str) end end end -- maybe also register as string.utf* if not utf.characters then -- New: this gmatch hack is taken from the Lua 5.2 book. It's about two times slower -- than the built-in string.utfcharacters. function utf.characters(str) return gmatch(str,".[\128-\191]*") end string.utfcharacters = utf.characters end if not utf.values then -- So, a logical next step is to check for the values variant. It over five times -- slower than the built-in string.utfvalues. I optimized it a bit for n=0,1. ----- wrap, yield, gmatch = coroutine.wrap, coroutine.yield, string.gmatch local find = string.find local dummy = function() -- we share this one end -- function utf.values(str) -- local n = #str -- if n == 0 then -- return wrap(dummy) -- elseif n == 1 then -- return wrap(function() yield(utfbyte(str)) end) -- else -- return wrap(function() for s in gmatch(str,".[\128-\191]*") do -- yield(utfbyte(s)) -- end end) -- end -- end -- -- faster: function utf.values(str) local n = #str if n == 0 then return dummy elseif n == 1 then return function() return utfbyte(str) end else local p = 1 -- local n = #str return function() -- if p <= n then -- slower than the last find local b, e = find(str,".[\128-\191]*",p) if b then p = e + 1 return utfbyte(sub(str,b,e)) end -- end end end end -- slower: -- -- local pattern = C(patterns.utf8character) * Cp() -- ----- pattern = patterns.utf8character/utfbyte * Cp() -- ----- pattern = patterns.utf8byte * Cp() -- -- function utf.values(str) -- one of the cases where a find is faster than an lpeg -- local n = #str -- if n == 0 then -- return dummy -- elseif n == 1 then -- return function() return utfbyte(str) end -- else -- local p = 1 -- return function() -- local s, e = lpegmatch(pattern,str,p) -- if e then -- p = e -- return utfbyte(s) -- -- return s -- end -- end -- end -- end string.utfvalues = utf.values end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-18.tex0000644000175000017500000000752011754241457023705 0ustar norbertnorbert%D \module %D [ file=s-pre-18, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 18, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: met pos en dan iedere titel \setuppapersize [S6][S6] \setupbodyfont [loc,ppl] \setupcolors [state=start] \definecolor [shade-1] [s=.7] \definecolor [shade-2] [s=.1] \definecolor [shade-3] [s=.8] \definecolor [shade-4] [b=.8] \definecolor [shade-5] [g=.6] \setuplayout [topspace=1cm, height=fit, backspace=1cm, width=middle, header=0pt, footer=0pt, bottomdistance=1cm] \setupbackgrounds [state=repeat] \setupbackgrounds [page] [background=page] \defineoverlay [page] [\useMPgraphic{page}] \defineoverlay [text] [\useMPgraphic{text}] \startuseMPgraphic{page} StartPage ; path p ; numeric s ; pair cp ; cp := center Page ; s := define_circular_shade(cp,cp,0,TextWidth, \MPcolor{shade-1},\MPcolor{shade-2}) ; fill Page withshade s ; p := fullcircle xyscaled (TextWidth+1cm, TextHeight+1cm) shifted cp ; s := define_circular_shade(cp,cp,0,TextWidth,\MPcolor{shade-3}, \MPcolor{shade-4}) ; fill p withshade s ; StopPage \stopuseMPgraphic \startuseMPgraphic{text} StartPage ; path p ; numeric s, t ; pair cp ; cp := center Page ; s := define_circular_shade(cp,cp,0,TextWidth, \MPcolor{shade-1},\MPcolor{shade-2}) ; fill Page withshade s ; p := llcorner Field[Text][Bottom] -- lrcorner Field[Text][Bottom] -- urcorner Field[Text][Text] -- ulcorner Field[Text][Text] -- cycle ; p := p enlarged .5cm randomized .5cm ; t := define_circular_shade(cp,cp,0,TextWidth,\MPcolor{shade-3}, \MPcolor{shade-4}) ; fill p withshade t ; def bottom_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) = if (pp>0) and (rr>0) : if nn = 1 : p := (0,0)--(ww,hh/2)--(0,hh)--cycle ; elseif nn = 2 : p := (0,hh/2)--(ww,hh)--(ww,0)--cycle ; else : p := origin--cycle ; fi ; fill p randomized 2.5mm shifted (xx,yy) withshade s ; fi ; enddef ; \MPmenubuttons{bottom} if length \MPstring{topic} > 0 : graphictext \MPstring{topic} scaled 3 shifted ulcorner Field[Text][Text] shifted (0,-1.5cm) withshade s ; fi ; StopPage ; \stopuseMPgraphic \setupinteractionmenu [bottom] [state=start, frame=off, left=\hfill, middle=\hskip.5cm, width=2\bottomheight, position=yes] \startinteractionmenu[bottom] \but [previouspage] \\ \but [nextpage] \\ \stopinteractionmenu \setupinteraction [state=start, click=no, color=shade-5, contrastcolor=shade-5, menu=on] \setupwhitespace [big] \def\Topic#1% {\page \setMPtext{topic}{#1} \vbox to 2cm{}} \setMPtext{topic}{} \def\StartTitlePage% {\startstandardmakeup[bottomstate=none] \setupalign[middle] \vfill} \def\StopTitlePage% {\stopstandardmakeup \setuplayout[bottom=1.5cm] \setupbackgrounds[page][background=text]} \def\TitleString#1#2% {\indent \startMPcode graphictext "#2" scaled #1 withdrawcolor .4white withfillcolor .7white withpen pencircle scaled 2pt ; \stopMPcode \vfill} \doifnotmode{demo}{\endinput} \starttext \StartTitlePage \TitleString{8}{Welcome} \TitleString{4}{to my favourite} \TitleString{8}{Quotes} \StopTitlePage \Topic {Douglas R. Hofstadter} \input douglas \page \Topic {Donald E. Knuth} \input knuth \page \Topic {Edward R. Tufte} \input tufte \page \Topic {Hermann Zapf} \input zapf \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-ini.mkvi0000644000175000017500000005426412161703335024333 0ustar norbertnorbert%D \module %D [ file=type-ini, %D version=2001.03.05, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typescript Macros / Initialization} \registerctxluafile{type-ini}{1.001} %D The default fontclass is empty. We could demand always using fontclasses, %D and then make the calling macros simplier (always assume fontclass) but %D apart from downward compatibility issues, it would make global, class %D spanning definitions a pain. Some day we will introduce a default class. %D %D The \type {type-ini} and \type {font-ini} modules come as a pair and have %D mutual dependencies. %D %D At some point we will only store in memory so some code can go away. \unprotect \definesystemvariable {ts} % TypeScript / for the moment we keep this one \newcount \c_font_typescripts_n_of_preloaded \newconditional\c_font_typescripts_quit \newtoks \c_font_typescripts_document \newconditional\c_font_typescripts_preload \newconditional\c_font_typescripts_first_pass \settrue\c_font_typescripts_first_pass \newif \iftypescriptfound % will become a mode \newif \iftracetypescripts \newtoks \everybeforedefinetypeface \newtoks \everyafterdefinetypeface \let\typescriptfiles \empty \let\currenttypescripts\empty \let\currenttypefile \empty \let\typescriptone \empty % public, used in typescripts \let\typescripttwo \empty % public, used in typescripts \let\typescriptthree\empty % public, used in typescripts \let\fontclassstyle \empty \let\m_font_typescripts_one \empty \let\m_font_typescripts_two \empty \let\m_font_typescripts_three\empty \let\m_font_typescripts_check\empty \let\m_font_typescripts_match\empty \let\t_font_typescripts\relax % uses as synonym \installcorenamespace{typescriptcache} \installcorenamespace{typescriptfiles} \installcorenamespace{typescriptonce} \installcorenamespace{typescriptsynonyms} \installcorenamespace{typescriptprefix} \installcorenamespace{typescriptinheritances} \installcorenamespace{typescriptdefaultstyles} \installcorenamespace{typescriptrelatives} \definesystemvariable{ts} % TypeScript % tricky ... here we push/pop ... so \let \let\typescriptmethod\plusone % 1: empty==all==true 2: empty==false \let\typescriptstate \plustwo % 1: process 2: store \unexpanded\def\starttypescriptcollection {\dosingleempty\font_typescripts_collection_start} \def\font_typescripts_collection_start[#tag]% {} \let\stoptypescriptcollection\relax \unexpanded\def\usetypescriptfile[#filename]% {\doifelse{#filename}\v!reset {\let\typescriptfiles\empty} {\splitfilename{#filename}% \addtocommalist\splitoffbase\typescriptfiles}} \unexpanded\def\usetypescript {\dotripleempty\font_typescripts_use_one} \unexpanded\def\usetypescriptexact{\dotripleempty\font_typescripts_use_two} \def\font_typescripts_use_one{\let\typescriptmethod\plusone\font_typescripts_use} \def\font_typescripts_use_two{\let\typescriptmethod\plustwo\font_typescripts_use} \unexpanded\def\font_typescripts_use[#one][#two][#three]% {\pushmacro\m_font_typescripts_one \pushmacro\m_font_typescripts_two \pushmacro\m_font_typescripts_three \edef\m_font_typescripts_one {\truetypescript{#one}}% \edef\m_font_typescripts_two {\truetypescript{#two}}% \edef\m_font_typescripts_three{\truetypescript{#three}}% \pushmacro\typescriptone \pushmacro\typescripttwo \pushmacro\typescriptthree \pushmacro\typescriptmethod \pushmacro\typescriptstate \pushmacro\stoptypescript \typescriptfoundfalse \let\typescriptstate\plusone % why \iftracetypescripts \writestatus\m!fonts{request: [\m_font_typescripts_one] [\m_font_typescripts_two] [\m_font_typescripts_three]}% \fi \ifhmode \font_typescripts_use_inline \else \font_typescripts_use_display \fi \setfalse\c_font_typescripts_first_pass \popmacro\stoptypescript \popmacro\typescriptstate \popmacro\typescriptmethod \popmacro\typescriptthree \popmacro\typescripttwo \popmacro\typescriptone \popmacro\m_font_typescripts_three \popmacro\m_font_typescripts_two \popmacro\m_font_typescripts_one} \def\font_typescripts_use_display {\processcommacommand[\typescriptfiles]\font_typescripts_load_file \the\c_font_typescripts_document} \let\font_typescripts_use_inline\font_typescripts_use_display % % not yet: % % \newsignal\d_font_typescripts_signal % % \def\font_typescripts_use_inline % {\ifhmode % \kern\d_font_typescripts_signal % \fi % \font_typescripts_use_display % \ifhmode % \ifdim\lastkern=\d_font_typescripts_signal % \unkern % \else % \removeunwantedspaces % \ifdim\lastkern=\d_font_typescripts_signal % \unkern % \else % % messy typescript 2 % \fi % \fi % \else % % messy typescript 1 % \fi} \unexpanded\def\preloadtypescripts {\ifproductionrun\settrue\c_font_typescripts_preload\fi} \prependtoks \preloadtypescripts \to \everyjob % The next will change .. we can load a file inside a typescript but as the state is % 1 then, it doesn't get stored without doing that explicitly \unexpanded\def\loadtypescriptfile[#1]% {\pushmacro\typescriptstate \let\typescriptstate\plustwo % assumes 2 at the outer level \ctxcommand{loadtypescriptfile("#1")}% \popmacro\typescriptstate} \unexpanded\def\loadfoundtypescriptfile#1% {\startreadingfile \unprotect \pushendofline \input{#1}% \popendofline \protect \stopreadingfile} \unexpanded\def\quittypescriptscanning {\settrue\c_font_typescripts_quit} % public \def\font_typescripts_start_store#definitions\stoptypescript {\global\advance\c_font_typescripts_n_of_preloaded\plusone \expandafter\normalgdef\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname {\starttypescript#definitions\stoptypescript}% %\normalexpanded{\global\t_font_typescripts{\the\expandafter\t_font_typescripts\noexpand\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}}} \global\t_font_typescripts\expandafter\expandafter\expandafter {\expandafter\the\expandafter\t_font_typescripts \csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}} \def\font_typescripts_collection_start_store#definitions\stoptypescriptcollection {\global\advance\c_font_typescripts_n_of_preloaded\plusone \expandafter\normalgdef\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname {\starttypescriptcollection#definitions\stoptypescriptcollection}% %\normalexpanded{\global\t_font_typescripts{\the\expandafter\t_font_typescripts\noexpand\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}}} \global\t_font_typescripts\expandafter\expandafter\expandafter {\expandafter\the\expandafter\t_font_typescripts \csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}} \def\font_typescripts_load_file#filename% {\setfalse\c_font_typescripts_quit \pushmacro\currenttypefile \def\currenttypefile{#filename}% \ifconditional\c_font_typescripts_preload \font_typescript_process_typescript_file_and_store \else \font_typescript_process_typescript_file \fi \popmacro\currenttypefile \ifconditional\c_font_typescripts_quit \quitcommalist \setfalse\c_font_typescripts_quit \fi} \def\font_typescript_process_typescript_file_and_store {\expandafter\let\expandafter\t_font_typescripts\csname\??typescriptfiles\currenttypefile\endcsname \ifx\t_font_typescripts\relax \font_typescript_process_typescript_store_indeed \fi \the\t_font_typescripts} \def\font_typescript_process_typescript_store_indeed {\newtoks\t_font_typescripts % is \relaxed elsewhere \begingroup \let\starttypescript \font_typescripts_start_store \let\starttypescriptcollection\font_typescripts_collection_start_store \font_typescript_process_typescript_file \endgroup \expandafter\let\csname\??typescriptfiles\currenttypefile\endcsname\t_font_typescripts} \def\font_typescript_process_typescript_file {\ctxcommand{doprocesstypescriptfile("\currenttypefile")}} \unexpanded\def\usetypescriptonce {\dotripleempty\font_typescripts_use_once} \def\font_typescripts_use_once[#one][#two][#three]% {\ifcsname\??typescriptonce#one:#two:#three\endcsname \writestatus\m!fonts{once (#one) (#two) (#three)}% \else \expandafter\let\csname\??typescriptonce#one:#two:#three\endcsname\relax \font_typescripts_use[#one][#two][#three]% \fi} % \definetypescriptsynonym[lbr][cmr] \unexpanded\def\definetypescriptsynonym {\dodoubleempty\font_typescripts_synonym_define} \def\font_typescripts_synonym_define[#name][#synonym]% {\ifsecondargument\setevalue{\??typescriptsynonyms#name}{#synonym}\fi} \def\truetypescript#name% {\ifcsname\??typescriptsynonyms#name\endcsname \expandafter\truetypescript\csname\??typescriptsynonyms#name\endcsname\else#name% \fi} % script [serif] [default] [size] % script [serif] [computer-modern] [size] % script [serif] [computer-modern] [ec] % script [serif] [computer-modern] [name] % script [serif] [computer-modern] [special] \prependtoks \settrue\c_font_typescripts_first_pass \to \everyjob \unexpanded\def\starttypescript {\ifcase\typescriptstate % 0 = skip \expandafter\font_typescripts_start_gobble \or % 1 = process \expandafter\font_typescripts_start_process \or % 2 = store \expandafter\font_typescripts_start_document \else % ? = skip \expandafter\font_typescripts_start_gobble \fi} \def\font_typescripts_start_gobble#definitions\stoptypescript{} \def\font_typescripts_start_document#definitions\stoptypescript %{\appendtoks\starttypescript#definitions\stoptypescript\to\c_font_typescripts_document} {\c_font_typescripts_document\expandafter{\the\c_font_typescripts_document\starttypescript#definitions\stoptypescript}} \def\font_typescripts_start_process % could be a faster \doifnextoptionalelse if needed {\let\typescriptone \m_font_typescripts_one \let\typescripttwo \m_font_typescripts_two \let\typescriptthree\m_font_typescripts_three \let\m_font_typescripts_match\empty \doifnextoptionalelse\font_typescripts_start_process_one\font_typescripts_start_process_all} \def\font_typescripts_start_process_all % could be a \let {\ifconditional\c_font_typescripts_first_pass \expandafter\font_typescripts_start_process_indeed \else % skip this since it may do unwanted resets, like % setting symbolic font names to unknown, especially % in run time user type scripts \expandafter\font_typescripts_start_gobble \fi} \def\font_typescripts_show_match {\writestatus\m!fonts{match:\ifx\currenttypefile\relax\space *\fi \m_font_typescripts_match}} \def\font_typescripts_start_process_yes {\ifdone \typescriptfoundtrue \iftracetypescripts\font_typescripts_show_match\fi \expandafter\font_typescripts_start_process_indeed \else \expandafter\font_typescripts_start_gobble \fi} \def\font_typescripts_start_process_one {\font_typescripts_check\m_font_typescripts_one\typescriptone\font_typescripts_start_process_again_one} \def\font_typescripts_start_process_two {\font_typescripts_check\m_font_typescripts_two\typescripttwo\font_typescripts_start_process_again_two} \def\font_typescripts_start_process_three {\font_typescripts_check\m_font_typescripts_three\typescriptthree\font_typescripts_start_process_again_three} \def\font_typescripts_start_process_again_one {\doifnextoptionalelse\font_typescripts_start_process_two\font_typescripts_start_process_yes} \def\font_typescripts_start_process_again_two {\doifnextoptionalelse\font_typescripts_start_process_three\font_typescripts_start_process_yes} \let\font_typescripts_start_process_again_three\font_typescripts_start_process_yes \def\font_typescripts_start_process_indeed {\pushmacro\fontclass} \unexpanded\def\stoptypescript {\popmacro\fontclass} \def\font_typescripts_check#asked#target#followup[#value]% script use value next {\donefalse \edef\m_font_typescripts_check{#value}% \ifx\m_font_typescripts_check\empty % no longer needed / met \ifcase\typescriptmethod\or\donetrue\fi \else\ifx#asked\s!all \donetrue \else\ifx\m_font_typescripts_check\s!all \donetrue \else\ifx#asked\m_font_typescripts_check % saves 10% trace so probably faster too \donetrue \let#target\m_font_typescripts_check \else \doifcommonelse\m_font_typescripts_check#asked\donetrue\donefalse \ifdone \let#target\commalistelement \fi \fi\fi\fi\fi \ifdone \iftracetypescripts\extendtypescriptmatch\fi \expandafter#followup% \else \expandafter\font_typescripts_start_gobble \fi} \def\extendtypescriptmatch {\edef\m_font_typescripts_match{\m_font_typescripts_match\space[\m_font_typescripts_check]}} %D Map files will go away in \LUATEX, but till that happens we %D use stripped down support for loading them. \unexpanded\def\loadmapfile{\dosingleempty\font_map_load_file} \unexpanded\def\loadmapline{\dodoubleempty\font_map_load_line} \def\font_map_load_file[#filename]% {\ctxlua{fonts.mappings.loadfile("#filename")}} \def\font_map_load_line[#kind][#data]% {\ctxlua{fonts.mappings.loadline("#kind","#data")}} \unexpanded\def\forgetmapfiles {\ctxlua{fonts.mappings.reset()}} \prependtoks \loadmapfile[mkiv-base.map]% can't we preload this one? \to \everystarttext %D A handy shortcut: % \definetypescriptprefix[serif][Serif] % \definetypescriptprefix[sans] [Sans] % \definetypescriptprefix[mono] [Mono] % %\starttypescript [serif,sans,mono] [handling,hanging,hz] [pure,normal,hz,quality] % \setupfontsynonym [\typescriptprefix\typescriptone] [handling=\typescriptthree] % \stoptypescript \unexpanded\def\definetypescriptprefix {\dodoubleargument\font_typescripts_define_prefix} \def\font_typescripts_define_prefix[#name][#prefix]% {\setgvalue{\??typescriptprefix#name}{#prefix}} % made global % without testing: % % \def\typescriptprefix#name% % {\csname\??typescriptprefix#name\endcsname} % % with testing: \def\typescriptprefix#name% {\ifcsname\??typescriptprefix#name\endcsname\csname\??typescriptprefix#name\endcsname\else#name\fi} % defining typefaces: % % \definetypeface [joke] [rm] % \definetypeface [joke] [rm] [settings] % \definetypeface [joke] [rm] [serif] [lucida] % \definetypeface [joke] [rm] [serif] [lucida] [size] % \definetypeface [joke] [rm] [serif] [lucida] [size] [settings] % \definetypeface [joke] [specification] \unexpanded\def\definetypeface {\dosixtupleargument\font_typefaces_define} \appendtoks \font_helpers_reset_fontclass_math_families\fontclass \to \everybeforedefinetypeface %D This hooks into the font switcher: \settrue\autotypescripts \unexpanded\def\trycurrentfontclass#typeface% {\ifconditional\autotypescripts \usetypescript[#typeface]% \ifcsname\??fontclassyes#typeface\endcsname \edef\fontclass{#typeface}% \else \iftracetypescripts\writestatus\m!fonts{auto load typescript file 1: [#typeface]}\fi \usetypescriptfile[#typeface]% \usetypescript[#typeface]% \ifcsname\??fontclassyes#typeface\endcsname \edef\fontclass{#typeface}% \else % todo: message \letvalueempty{\??fontclassnop#typeface}% \fi \fi \else % todo: message \letvalueempty{\??fontclassnop#typeface}% \fi} %D Now we define: \def\font_typefaces_define {\iffifthargument \singleexpandafter\font_typefaces_define_a \else\iffourthargument \doubleexpandafter\font_typefaces_define_b \else\ifthirdargument \tripleexpandafter\font_typefaces_define_c \else \tripleexpandafter\font_typefaces_define_d \fi\fi\fi} \def\font_typefaces_define_a[#name][#style][#fontshape][#fontname][#fontsize][#settings]% {\iftracetypescripts\writestatus\m!fonts{define: [#name] [#style] [#fontshape] [#fontname]}\fi \font_typefaces_define_indeed[#name][#style]% \font_typefaces_defining_start{#name}{#style}{#settings}% \font_typescripts_use_one[#fontshape][#fontname][\s!name]% [\s!name,\s!default]% \iftypescriptfound % we're okay \else \ifconditional\autotypescripts \iftracetypescripts\writestatus\m!fonts{auto load typescript file 2: [#fontname]}\fi \usetypescriptfile[#fontname]% \font_typescripts_use_one[#fontshape][#fontname][\s!name]% [\s!name,\s!default]% \fi \fi \font_typescripts_use_one[#fontshape][#fontsize][\s!size]% \font_typefaces_defining_stop} \def\font_typefaces_define_b[#name][#style][#fontshape][#fontname][#dummya][#dummyb]% {\font_typefaces_define_a[#name][#style][#fontshape][#fontname][\s!default][#dummyb]} \def\font_typefaces_define_c[#name][#style][#dummya][#dummyb][#dummyc][#dummyd]% {\font_typefaces_define_indeed[#name][#style]} \def\font_typefaces_define_d[#name][#specification][#dummya][#dummyb][#dummyc][#dummyd]% use definitions in lfg file {\ctxlua{fonts.definetypeface("#name",\!!bs#specification\!!es)}} \def\font_typefaces_define_indeed[#name][#style]% saveguard against redefinition {\doifsomething{#name} {\ifcsname\??typescriptdefaultstyles#name\endcsname \else \registerfontclass{#name}% \setxvalue{\??typescriptdefaultstyles#name}{#style}% \fi \ifcsname#name\endcsname \else \setugvalue{#name}{\switchtotypeface[#name][#style]}% \fi}} \def\font_typefaces_defining_start#name#style#settings% {\let\@@tsrscale \!!plusone % as we push/pop \let\@@tsfeatures \empty \let\@@tsfallbacks \empty \let\@@tsgoodies \empty \let\@@tsdirection \empty \let\@@tsdesignsize\empty \geteparameters[\??ts][#settings]% todo raw \pushmacro\fontclass \pushmacro\fontclassstyle \setcurrentfontclass{#name}% \savefontclassparameters{#style}\@@tsrscale\@@tsfeatures\@@tsfallbacks\@@tsgoodies\@@tsdesignsize\@@tsdirection \the\everybeforedefinetypeface} \def\tsvar#key#default% undocumented and unofficial {\expandafter\ifx\csname\??ts#key\endcsname\empty #default% \else \csname\??ts#key\endcsname \fi} \def\font_typefaces_defining_stop {\the\everyafterdefinetypeface \popmacro\fontclassstyle \popmacro\fontclass} \def\dofastdefinetypeface#name#style#fontshape#fontsize#settings% called from the lua end (via case d) {\font_typefaces_define_indeed[#name][#style]% \font_typefaces_defining_start{#name}{#style}{#settings}% \font_typescripts_use_one[#fontshape][#fontsize][\s!size]% \font_typefaces_defining_stop} \unexpanded\def\setuptypeface% [class] [settings] {\dodoubleempty\font_typefaces_setup} \unexpanded\def\switchtotypeface% [class] [settings] {\dodoubleempty\font_typefaces_switch} \def\font_typefaces_setup[#class][#settings]% {\setcurrentfontclass{#class}% \let\globalfontclass\fontclass \iffourthargument \setupbodyfont[#settings]% \else\ifx\fontclass\empty \setupbodyfont[\s!rm]% \else\ifcsname\??typescriptdefaultstyles\fontclass\endcsname \setupbodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]% \else \setupbodyfont[\s!rm]% \fi \fi \fi \ifmmode\mr\else\tf\fi} % needed ? \def\font_typefaces_switch[#class][#settings]% {\setcurrentfontclass{#class}% \let\globalfontclass\globalfontclass \iffourthargument \switchtobodyfont[#settings]% \else\ifx\fontclass\empty \switchtobodyfont[\s!rm]% \else\ifcsname\??typescriptdefaultstyles\fontclass\endcsname \switchtobodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]% \else \switchtobodyfont[\s!rm]% \fi \fi \fi \ifmmode\mr\else\tf\fi} % needed ? % obsolete % % \unexpanded\def\usetypefile[#type]% recurses on path ! % no storage % {\edef\currenttypefile{#type}% % \ctxcommand{doprocesstypescriptfile("\currenttypefile")}} %D For Taco: %D %D \starttyping %D \inherittypeface[palatino][rm][postscript] %D \inherittypeface[palatino][rm][\fontclass] %D \inherittypeface[palatino][rm] % == \fontclass %D \inherittypeface[palatino] % == [rm,ss,tt,mm] %D \stoptyping \unexpanded\def\inherittypeface {\dotripleempty\font_typescripts_inherit_indeed} \def\font_typescripts_inherit_indeed[#name][#styles][#parentclass]% {\doifelsenothing{#styles} {\font_typescripts_inherit_indeed[#name][\s!rm,\s!ss,\s!tt,\s!mm][\fontclass]} {\doifnot{#name}{#parentclass} {\global\let\font_typescripts_inherit_check\font_typescripts_inherit_check_indeed \def\font_typescripts_inherit_check_step#style{\setevalue{\??typescriptinheritances#name:#style}{#parentclass}}% \processcommalist[#styles]\font_typescripts_inherit_check_step}}} %D This hooks into the font mechanism with: \def\font_typescripts_inherit_check_indeed#name% called often {\ifcsname\??typescriptinheritances\fontclass:#name\endcsname \expandafter\let\expandafter\fontclass\csname\??typescriptinheritances\fontclass:#name\endcsname \fi} \let\font_typescripts_inherit_check\gobbleoneargument % not yet: % % \def\font_helpers_check_relative_font_id % {\ifcsname\??typescriptrelatives\fontclass\endcsname % \expandafter\let\expandafter\relativefontid\csname\??typescriptrelatives\fontclass\endcsname % \else % \expandafter\normalxdef\csname\??typescriptrelatives\fontclass\endcsname{\the\lastfontid}% % \let\relativefontid\minusone % \fi} \def\v_font_string_d % default fontstyle (expands to \s!Serif in font-ini) {\expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!rm \s!Serif \else \expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!ss \s!Sans \else \expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!tt \s!Mono \else \s!Serif \fi\fi\fi} \unexpanded\def\font_helpers_set_fontstyle_of_fontclass {\ifx\fontclass\empty \let\fontstyle\s!rm \else\ifcsname\??typescriptdefaultstyles\fontclass\endcsname \edef\fontstyle{\csname\??typescriptdefaultstyles\fontclass\endcsname}% \else \let\fontstyle\s!rm \fi\fi} %D This might become a module: \fetchruntimecommand \typetypescript {\f!typeprefix\s!run} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otf.lua0000644000175000017500000024256712161703335024151 0ustar norbertnorbertif not modules then modules = { } end modules ['font-otf'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- langs -> languages enz -- anchor_classes vs kernclasses -- modification/creationtime in subfont is runtime dus zinloos -- to_table -> totable -- ascent descent -- more checking against low level calls of functions local utfbyte = utf.byte local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip local type, next, tonumber, tostring = type, next, tonumber, tostring local abs = math.abs local getn = table.getn local lpegmatch = lpeg.match local reversed, concat, remove = table.reversed, table.concat, table.remove local ioflush = io.flush local fastcopy, tohash, derivetable = table.fastcopy, table.tohash, table.derive local formatters = string.formatters local allocate = utilities.storage.allocate local registertracker = trackers.register local registerdirective = directives.register local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming local elapsedtime = statistics.elapsedtime local findbinfile = resolvers.findbinfile local trace_private = false registertracker("otf.private", function(v) trace_private = v end) local trace_loading = false registertracker("otf.loading", function(v) trace_loading = v end) local trace_features = false registertracker("otf.features", function(v) trace_features = v end) local trace_dynamics = false registertracker("otf.dynamics", function(v) trace_dynamics = v end) local trace_sequences = false registertracker("otf.sequences", function(v) trace_sequences = v end) local trace_markwidth = false registertracker("otf.markwidth", function(v) trace_markwidth = v end) local trace_defining = false registertracker("fonts.defining", function(v) trace_defining = v end) local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf otf.glists = { "gsub", "gpos" } otf.version = 2.743 -- beware: also sync font-mis.lua otf.cache = containers.define("fonts", "otf", otf.version, true) local fontdata = fonts.hashes.identifiers local chardata = characters and characters.data -- not used local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local enhancers = allocate() otf.enhancers = enhancers local patches = { } enhancers.patches = patches local definers = fonts.definers local readers = fonts.readers local constructors = fonts.constructors local forceload = false local cleanup = 0 -- mk: 0=885M 1=765M 2=735M (regular run 730M) local usemetatables = false -- .4 slower on mk but 30 M less mem so we might change the default -- will be directive local packdata = true local syncspace = true local forcenotdef = false local includesubfonts = false local wildcard = "*" local default = "dflt" local fontloaderfields = fontloader.fields local mainfields = nil local glyphfields = nil -- not used yet registerdirective("fonts.otf.loader.cleanup", function(v) cleanup = tonumber(v) or (v and 1) or 0 end) registerdirective("fonts.otf.loader.force", function(v) forceload = v end) registerdirective("fonts.otf.loader.usemetatables", function(v) usemetatables = v end) registerdirective("fonts.otf.loader.pack", function(v) packdata = v end) registerdirective("fonts.otf.loader.syncspace", function(v) syncspace = v end) registerdirective("fonts.otf.loader.forcenotdef", function(v) forcenotdef = v end) local function load_featurefile(raw,featurefile) if featurefile and featurefile ~= "" then if trace_loading then report_otf("using featurefile %a", featurefile) end fontloader.apply_featurefile(raw, featurefile) end end local function showfeatureorder(rawdata,filename) local sequences = rawdata.resources.sequences if sequences and #sequences > 0 then if trace_loading then report_otf("font %a has %s sequences",filename,#sequences) report_otf(" ") end for nos=1,#sequences do local sequence = sequences[nos] local typ = sequence.type or "no-type" local name = sequence.name or "no-name" local subtables = sequence.subtables or { "no-subtables" } local features = sequence.features if trace_loading then report_otf("%3i %-15s %-20s [% t]",nos,name,typ,subtables) end if features then for feature, scripts in next, features do local tt = { } if type(scripts) == "table" then for script, languages in next, scripts do local ttt = { } for language, _ in next, languages do ttt[#ttt+1] = language end tt[#tt+1] = formatters["[%s: % t]"](script,ttt) end if trace_loading then report_otf(" %s: % t",feature,tt) end else if trace_loading then report_otf(" %s: %S",feature,scripts) end end end end end if trace_loading then report_otf("\n") end elseif trace_loading then report_otf("font %a has no sequences",filename) end end --[[ldx--

We start with a lot of tables and related functions.

--ldx]]-- local valid_fields = table.tohash { -- "anchor_classes", "ascent", -- "cache_version", "cidinfo", "copyright", -- "creationtime", "descent", "design_range_bottom", "design_range_top", "design_size", "encodingchanged", "extrema_bound", "familyname", "fontname", "fontname", "fontstyle_id", "fontstyle_name", "fullname", -- "glyphs", "hasvmetrics", -- "head_optimized_for_cleartype", "horiz_base", "issans", "isserif", "italicangle", -- "kerns", -- "lookups", "macstyle", -- "modificationtime", "onlybitmaps", "origname", "os2_version", "pfminfo", -- "private", "serifcheck", "sfd_version", -- "size", "strokedfont", "strokewidth", -- "subfonts", "table_version", -- "tables", -- "ttf_tab_saved", "ttf_tables", "uni_interp", "uniqueid", "units_per_em", "upos", "use_typo_metrics", "uwidth", -- "validation_state", "version", "vert_base", "weight", "weight_width_slope_only", -- "xuid", } local ordered_enhancers = { "prepare tables", "prepare glyphs", "prepare lookups", "analyze glyphs", "analyze math", "prepare tounicode", -- maybe merge with prepare "reorganize lookups", "reorganize mark classes", "reorganize anchor classes", "reorganize glyph kerns", "reorganize glyph lookups", "reorganize glyph anchors", "merge kern classes", "reorganize features", "reorganize subtables", "check glyphs", "check metadata", "check extra features", -- after metadata "check encoding", -- moved "add duplicates", "cleanup tables", } --[[ldx--

Here we go.

--ldx]]-- local actions = allocate() local before = allocate() local after = allocate() patches.before = before patches.after = after local function enhance(name,data,filename,raw) local enhancer = actions[name] if enhancer then if trace_loading then report_otf("apply enhancement %a to file %a",name,filename) ioflush() end enhancer(data,filename,raw) else -- no message as we can have private ones end end function enhancers.apply(data,filename,raw) local basename = file.basename(lower(filename)) if trace_loading then report_otf("%s enhancing file %a","start",filename) end ioflush() -- we want instant messages for e=1,#ordered_enhancers do local enhancer = ordered_enhancers[e] local b = before[enhancer] if b then for pattern, action in next, b do if find(basename,pattern) then action(data,filename,raw) end end end enhance(enhancer,data,filename,raw) local a = after[enhancer] if a then for pattern, action in next, a do if find(basename,pattern) then action(data,filename,raw) end end end ioflush() -- we want instant messages end if trace_loading then report_otf("%s enhancing file %a","stop",filename) end ioflush() -- we want instant messages end -- patches.register("before","migrate metadata","cambria",function() end) function patches.register(what,where,pattern,action) local pw = patches[what] if pw then local ww = pw[where] if ww then ww[pattern] = action else pw[where] = { [pattern] = action} end end end function patches.report(fmt,...) if trace_loading then report_otf("patching: %s",formatters[fmt](...)) end end function enhancers.register(what,action) -- only already registered can be overloaded actions[what] = action end function otf.load(filename,format,sub,featurefile) local base = file.basename(file.removesuffix(filename)) local name = file.removesuffix(base) local attr = lfs.attributes(filename) local size = attr and attr.size or 0 local time = attr and attr.modification or 0 if featurefile then name = name .. "@" .. file.removesuffix(file.basename(featurefile)) end if sub == "" then sub = false end local hash = name if sub then hash = hash .. "-" .. sub end hash = containers.cleanname(hash) local featurefiles if featurefile then featurefiles = { } for s in gmatch(featurefile,"[^,]+") do local name = resolvers.findfile(file.addsuffix(s,'fea'),'fea') or "" if name == "" then report_otf("loading error, no featurefile %a",s) else local attr = lfs.attributes(name) featurefiles[#featurefiles+1] = { name = name, size = attr and attr.size or 0, time = attr and attr.modification or 0, } end end if #featurefiles == 0 then featurefiles = nil end end local data = containers.read(otf.cache,hash) local reload = not data or data.size ~= size or data.time ~= time if forceload then report_otf("forced reload of %a due to hard coded flag",filename) reload = true end if not reload then local featuredata = data.featuredata if featurefiles then if not featuredata or #featuredata ~= #featurefiles then reload = true else for i=1,#featurefiles do local fi, fd = featurefiles[i], featuredata[i] if fi.name ~= fd.name or fi.size ~= fd.size or fi.time ~= fd.time then reload = true break end end end elseif featuredata then reload = true end if reload then report_otf("loading: forced reload due to changed featurefile specification %a",featurefile) end end if reload then report_otf("loading %a, hash %a",filename,hash) local fontdata, messages if sub then fontdata, messages = fontloader.open(filename,sub) else fontdata, messages = fontloader.open(filename) end if fontdata then mainfields = mainfields or (fontloaderfields and fontloaderfields(fontdata)) end if trace_loading and messages and #messages > 0 then if type(messages) == "string" then report_otf("warning: %s",messages) else for m=1,#messages do report_otf("warning: %S",messages[m]) end end else report_otf("loading done") end if fontdata then if featurefiles then for i=1,#featurefiles do load_featurefile(fontdata,featurefiles[i].name) end end local unicodes = { -- names to unicodes } local splitter = lpeg.splitter(" ",unicodes) data = { size = size, time = time, format = format, featuredata = featurefiles, resources = { filename = resolvers.unresolve(filename), -- no shortcut version = otf.version, creator = "context mkiv", unicodes = unicodes, indices = { -- index to unicodes }, duplicates = { -- alternative unicodes }, variants = { -- alternative unicodes (variants) }, lookuptypes = { }, }, metadata = { -- raw metadata, not to be used }, properties = { -- normalized metadata }, descriptions = { }, goodies = { }, helpers = { tounicodelist = splitter, tounicodetable = lpeg.Ct(splitter), }, } starttiming(data) report_otf("file size: %s", size) enhancers.apply(data,filename,fontdata) local packtime = { } if packdata then if cleanup > 0 then collectgarbage("collect") end starttiming(packtime) enhance("pack",data,filename,nil) stoptiming(packtime) end report_otf("saving %a in cache",filename) data = containers.write(otf.cache, hash, data) if cleanup > 1 then collectgarbage("collect") end stoptiming(data) if elapsedtime then -- not in generic report_otf("preprocessing and caching time %s, packtime %s", elapsedtime(data),packdata and elapsedtime(packtime) or 0) end fontloader.close(fontdata) -- free memory if cleanup > 3 then collectgarbage("collect") end data = containers.read(otf.cache, hash) -- this frees the old table and load the sparse one if cleanup > 2 then collectgarbage("collect") end else data = nil report_otf("loading failed due to read error") end end if data then if trace_defining then report_otf("loading from cache using hash %a",hash) end enhance("unpack",data,filename,nil,false) enhance("add dimensions",data,filename,nil,false) if trace_sequences then showfeatureorder(data,filename) end end return data end local mt = { __index = function(t,k) -- maybe set it if k == "height" then local ht = t.boundingbox[4] return ht < 0 and 0 or ht elseif k == "depth" then local dp = -t.boundingbox[2] return dp < 0 and 0 or dp elseif k == "width" then return 0 elseif k == "name" then -- or maybe uni* return forcenotdef and ".notdef" end end } actions["prepare tables"] = function(data,filename,raw) data.properties.hasitalics = false end actions["add dimensions"] = function(data,filename) -- todo: forget about the width if it's the defaultwidth (saves mem) -- we could also build the marks hash here (instead of storing it) if data then local descriptions = data.descriptions local resources = data.resources local defaultwidth = resources.defaultwidth or 0 local defaultheight = resources.defaultheight or 0 local defaultdepth = resources.defaultdepth or 0 local basename = trace_markwidth and file.basename(filename) if usemetatables then for _, d in next, descriptions do local wd = d.width if not wd then d.width = defaultwidth elseif trace_markwidth and wd ~= 0 and d.class == "mark" then report_otf("mark %a with width %b found in %a",d.name or "",wd,basename) -- d.width = -wd end setmetatable(d,mt) end else for _, d in next, descriptions do local bb, wd = d.boundingbox, d.width if not wd then d.width = defaultwidth elseif trace_markwidth and wd ~= 0 and d.class == "mark" then report_otf("mark %a with width %b found in %a",d.name or "",wd,basename) -- d.width = -wd end -- if forcenotdef and not d.name then -- d.name = ".notdef" -- end if bb then local ht, dp = bb[4], -bb[2] if ht == 0 or ht < 0 then -- not set else d.height = ht end if dp == 0 or dp < 0 then -- not set else d.depth = dp end end end end end end local function somecopy(old) -- fast one if old then local new = { } if type(old) == "table" then for k, v in next, old do if k == "glyphs" then -- skip elseif type(v) == "table" then new[k] = somecopy(v) else new[k] = v end end else for i=1,#mainfields do local k = mainfields[i] local v = old[k] if k == "glyphs" then -- skip elseif type(v) == "table" then new[k] = somecopy(v) else new[k] = v end end end return new else return { } end end -- not setting hasitalics and class (when nil) during table cronstruction can save some mem actions["prepare glyphs"] = function(data,filename,raw) local rawglyphs = raw.glyphs local rawsubfonts = raw.subfonts local rawcidinfo = raw.cidinfo local criterium = constructors.privateoffset local private = criterium local resources = data.resources local metadata = data.metadata local properties = data.properties local descriptions = data.descriptions local unicodes = resources.unicodes -- name to unicode local indices = resources.indices -- index to unicode local duplicates = resources.duplicates local variants = resources.variants if rawsubfonts then metadata.subfonts = includesubfonts and { } properties.cidinfo = rawcidinfo if rawcidinfo.registry then local cidmap = fonts.cid.getmap(rawcidinfo) if cidmap then rawcidinfo.usedname = cidmap.usedname local nofnames, nofunicodes = 0, 0 local cidunicodes, cidnames = cidmap.unicodes, cidmap.names for cidindex=1,#rawsubfonts do local subfont = rawsubfonts[cidindex] local cidglyphs = subfont.glyphs if includesubfonts then metadata.subfonts[cidindex] = somecopy(subfont) end for index=0,subfont.glyphcnt-1 do -- we could take the previous glyphcnt instead of 0 local glyph = cidglyphs[index] if glyph then local unicode = glyph.unicode local name = glyph.name or cidnames[index] if not unicode or unicode == -1 or unicode >= criterium then unicode = cidunicodes[index] end if unicode and descriptions[unicode] then report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode) unicode = -1 end if not unicode or unicode == -1 or unicode >= criterium then if not name then name = format("u%06X",private) end unicode = private unicodes[name] = private if trace_private then report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private) end private = private + 1 nofnames = nofnames + 1 else if not name then name = format("u%06X",unicode) end unicodes[name] = unicode nofunicodes = nofunicodes + 1 end indices[index] = unicode -- each index is unique (at least now) local description = { -- width = glyph.width, boundingbox = glyph.boundingbox, name = glyph.name or name or "unknown", -- uniXXXX cidindex = cidindex, index = index, glyph = glyph, } descriptions[unicode] = description else -- report_otf("potential problem: glyph %U is used but empty",index) end end end if trace_loading then report_otf("cid font remapped, %s unicode points, %s symbolic names, %s glyphs",nofunicodes, nofnames, nofunicodes+nofnames) end elseif trace_loading then report_otf("unable to remap cid font, missing cid file for %a",filename) end elseif trace_loading then report_otf("font %a has no glyphs",filename) end else for index=0,raw.glyphcnt-1 do -- not raw.glyphmax-1 (as that will crash) local glyph = rawglyphs[index] if glyph then local unicode = glyph.unicode local name = glyph.name if not unicode or unicode == -1 or unicode >= criterium then unicode = private unicodes[name] = private if trace_private then report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private) end private = private + 1 else unicodes[name] = unicode end indices[index] = unicode if not name then name = format("u%06X",unicode) end descriptions[unicode] = { -- width = glyph.width, boundingbox = glyph.boundingbox, name = name, index = index, glyph = glyph, } local altuni = glyph.altuni if altuni then local d for i=1,#altuni do local a = altuni[i] local u = a.unicode local v = a.variant if v then -- tricky: no addition to d? needs checking but in practice such dups are either very simple -- shapes or e.g cjk with not that many features local vv = variants[v] if vv then vv[u] = unicode else -- xits-math has some: vv = { [u] = unicode } variants[v] = vv end elseif d then d[#d+1] = u else d = { u } end end if d then duplicates[unicode] = d end end else report_otf("potential problem: glyph %U is used but empty",index) end end end resources.private = private end -- the next one is still messy but will get better when we have -- flattened map/enc tables in the font loader actions["check encoding"] = function(data,filename,raw) local descriptions = data.descriptions local resources = data.resources local properties = data.properties local unicodes = resources.unicodes -- name to unicode local indices = resources.indices -- index to unicodes local duplicates = resources.duplicates -- begin of messy (not needed when cidmap) local mapdata = raw.map or { } local unicodetoindex = mapdata and mapdata.map or { } -- local encname = lower(data.enc_name or raw.enc_name or mapdata.enc_name or "") local encname = lower(data.enc_name or mapdata.enc_name or "") local criterium = 0xFFFF -- for instance cambria has a lot of mess up there -- end of messy if find(encname,"unicode") then -- unicodebmp, unicodefull, ... if trace_loading then report_otf("checking embedded unicode map %a",encname) end for unicode, index in next, unicodetoindex do -- altuni already covers this if unicode <= criterium and not descriptions[unicode] then local parent = indices[index] -- why nil? if not parent then report_otf("weird, unicode %U points to nowhere with index %H",unicode,index) else local parentdescription = descriptions[parent] if parentdescription then local altuni = parentdescription.altuni if not altuni then altuni = { { unicode = parent } } parentdescription.altuni = altuni duplicates[parent] = { unicode } else local done = false for i=1,#altuni do if altuni[i].unicode == parent then done = true break end end if not done then -- let's assume simple cjk reuse altuni[#altuni+1] = { unicode = parent } table.insert(duplicates[parent],unicode) end end if trace_loading then report_otf("weird, unicode %U points to nowhere with index %H",unicode,index) end else report_otf("weird, unicode %U points to %U with index %H",unicode,index) end end end end elseif properties.cidinfo then report_otf("warning: no unicode map, used cidmap %a",properties.cidinfo.usedname) else report_otf("warning: non unicode map %a, only using glyph unicode data",encname or "whatever") end if mapdata then mapdata.map = { } -- clear some memory end end -- for the moment we assume that a font with lookups will not use -- altuni so we stick to kerns only actions["add duplicates"] = function(data,filename,raw) local descriptions = data.descriptions local resources = data.resources local properties = data.properties local unicodes = resources.unicodes -- name to unicode local indices = resources.indices -- index to unicodes local duplicates = resources.duplicates for unicode, d in next, duplicates do for i=1,#d do local u = d[i] if not descriptions[u] then local description = descriptions[unicode] local duplicate = table.copy(description) -- else packing problem duplicate.comment = format("copy of U+%05X", unicode) descriptions[u] = duplicate local n = 0 for _, description in next, descriptions do if kerns then local kerns = description.kerns for _, k in next, kerns do local ku = k[unicode] if ku then k[u] = ku n = n + 1 end end end -- todo: lookups etc end if trace_loading then report_otf("duplicating %U to %U with index %H (%s kerns)",unicode,u,description.index,n) end end end end end -- class : nil base mark ligature component (maybe we don't need it in description) -- boundingbox: split into ht/dp takes more memory (larger tables and less sharing) actions["analyze glyphs"] = function(data,filename,raw) -- maybe integrate this in the previous local descriptions = data.descriptions local resources = data.resources local metadata = data.metadata local properties = data.properties local hasitalics = false local widths = { } local marks = { } -- always present (saves checking) for unicode, description in next, descriptions do local glyph = description.glyph local italic = glyph.italic_correction if not italic then -- skip elseif italic == 0 then -- skip else description.italic = italic hasitalics = true end local width = glyph.width widths[width] = (widths[width] or 0) + 1 local class = glyph.class if class then if class == "mark" then marks[unicode] = true end description.class = class end end -- flag italic properties.hasitalics = hasitalics -- flag marks resources.marks = marks -- share most common width for cjk fonts local wd, most = 0, 1 for k,v in next, widths do if v > most then wd, most = k, v end end if most > 1000 then -- maybe 500 if trace_loading then report_otf("most common width: %s (%s times), sharing (cjk font)",wd,most) end for unicode, description in next, descriptions do if description.width == wd then -- description.width = nil else description.width = description.glyph.width end end resources.defaultwidth = wd else for unicode, description in next, descriptions do description.width = description.glyph.width end end end actions["reorganize mark classes"] = function(data,filename,raw) local mark_classes = raw.mark_classes if mark_classes then local resources = data.resources local unicodes = resources.unicodes local markclasses = { } resources.markclasses = markclasses -- reversed for name, class in next, mark_classes do local t = { } for s in gmatch(class,"[^ ]+") do t[unicodes[s]] = true end markclasses[name] = t end end end actions["reorganize features"] = function(data,filename,raw) -- combine with other local features = { } data.resources.features = features for k, what in next, otf.glists do local dw = raw[what] if dw then local f = { } features[what] = f for i=1,#dw do local d= dw[i] local dfeatures = d.features if dfeatures then for i=1,#dfeatures do local df = dfeatures[i] local tag = strip(lower(df.tag)) local ft = f[tag] if not ft then ft = { } f[tag] = ft end local dscripts = df.scripts for i=1,#dscripts do local d = dscripts[i] local languages = d.langs local script = strip(lower(d.script)) local fts = ft[script] if not fts then fts = {} ft[script] = fts end for i=1,#languages do fts[strip(lower(languages[i]))] = true end end end end end end end end actions["reorganize anchor classes"] = function(data,filename,raw) local resources = data.resources local anchor_to_lookup = { } local lookup_to_anchor = { } resources.anchor_to_lookup = anchor_to_lookup resources.lookup_to_anchor = lookup_to_anchor local classes = raw.anchor_classes -- anchor classes not in final table if classes then for c=1,#classes do local class = classes[c] local anchor = class.name local lookups = class.lookup if type(lookups) ~= "table" then lookups = { lookups } end local a = anchor_to_lookup[anchor] if not a then a = { } anchor_to_lookup[anchor] = a end for l=1,#lookups do local lookup = lookups[l] local l = lookup_to_anchor[lookup] if l then l[anchor] = true else l = { [anchor] = true } lookup_to_anchor[lookup] = l end a[lookup] = true end end end end actions["prepare tounicode"] = function(data,filename,raw) fonts.mappings.addtounicode(data,filename) end local g_directions = { gsub_contextchain = 1, gpos_contextchain = 1, -- gsub_context = 1, -- gpos_context = 1, gsub_reversecontextchain = -1, gpos_reversecontextchain = -1, } -- Research by Khaled Hosny has demonstrated that the font loader merges -- regular and AAT features and that these can interfere (especially because -- we dropped checking for valid features elsewhere. So, we just check for -- the special flag and drop the feature if such a tag is found. local function supported(features) for i=1,#features do if features[i].ismac then return false end end return true end actions["reorganize subtables"] = function(data,filename,raw) local resources = data.resources local sequences = { } local lookups = { } local chainedfeatures = { } resources.sequences = sequences resources.lookups = lookups for _, what in next, otf.glists do local dw = raw[what] if dw then for k=1,#dw do local gk = dw[k] local features = gk.features -- if features and supported(features) then if not features or supported(features) then -- not always features ! local typ = gk.type local chain = g_directions[typ] or 0 local subtables = gk.subtables if subtables then local t = { } for s=1,#subtables do t[s] = subtables[s].name end subtables = t end local flags, markclass = gk.flags, nil if flags then local t = { -- forcing false packs nicer (flags.ignorecombiningmarks and "mark") or false, (flags.ignoreligatures and "ligature") or false, (flags.ignorebaseglyphs and "base") or false, flags.r2l or false, } markclass = flags.mark_class if markclass then markclass = resources.markclasses[markclass] end flags = t end -- local name = gk.name -- if not name then -- in fact an error report_otf("skipping weird lookup number %s",k) elseif features then -- scripts, tag, ismac local f = { } for i=1,#features do local df = features[i] local tag = strip(lower(df.tag)) local ft = f[tag] if not ft then ft = {} f[tag] = ft end local dscripts = df.scripts for i=1,#dscripts do local d = dscripts[i] local languages = d.langs local script = strip(lower(d.script)) local fts = ft[script] if not fts then fts = {} ft[script] = fts end for i=1,#languages do fts[strip(lower(languages[i]))] = true end end end sequences[#sequences+1] = { type = typ, chain = chain, flags = flags, name = name, subtables = subtables, markclass = markclass, features = f, } else lookups[name] = { type = typ, chain = chain, flags = flags, subtables = subtables, markclass = markclass, } end end end end end end -- test this: -- -- for _, what in next, otf.glists do -- raw[what] = nil -- end actions["prepare lookups"] = function(data,filename,raw) local lookups = raw.lookups if lookups then data.lookups = lookups end end -- The reverse handler does a bit redundant splitting but it's seldom -- seen so we don't bother too much. We could store the replacement -- in the current list (value instead of true) but it makes other code -- uglier. Maybe some day. local function t_uncover(splitter,cache,covers) local result = { } for n=1,#covers do local cover = covers[n] local uncovered = cache[cover] if not uncovered then uncovered = lpegmatch(splitter,cover) cache[cover] = uncovered end result[n] = uncovered end return result end local function s_uncover(splitter,cache,cover) if cover == "" then return nil else local uncovered = cache[cover] if not uncovered then uncovered = lpegmatch(splitter,cover) -- for i=1,#uncovered do -- uncovered[i] = { [uncovered[i]] = true } -- end cache[cover] = uncovered end return { uncovered } end end local function t_hashed(t,cache) if t then local ht = { } for i=1,#t do local ti = t[i] local tih = cache[ti] if not tih then tih = { } for i=1,#ti do tih[ti[i]] = true end cache[ti] = tih end ht[i] = tih end return ht else return nil end end -- local s_hashed = t_hashed local function s_hashed(t,cache) if t then local ht = { } local tf = t[1] for i=1,#tf do ht[i] = { [tf[i]] = true } end return ht else return nil end end local function r_uncover(splitter,cache,cover,replacements) if cover == "" then return nil else -- we always have current as { } even in the case of one local uncovered = cover[1] local replaced = cache[replacements] if not replaced then replaced = lpegmatch(splitter,replacements) cache[replacements] = replaced end local nu, nr = #uncovered, #replaced local r = { } if nu == nr then for i=1,nu do r[uncovered[i]] = replaced[i] end end return r end end actions["reorganize lookups"] = function(data,filename,raw) -- we could check for "" and n == 0 -- we prefer the before lookups in a normal order if data.lookups then local splitter = data.helpers.tounicodetable local t_u_cache = { } local s_u_cache = t_u_cache -- string keys local t_h_cache = { } local s_h_cache = t_h_cache -- table keys (so we could use one cache) local r_u_cache = { } -- maybe shared for _, lookup in next, data.lookups do local rules = lookup.rules if rules then local format = lookup.format if format == "class" then local before_class = lookup.before_class if before_class then before_class = t_uncover(splitter,t_u_cache,reversed(before_class)) end local current_class = lookup.current_class if current_class then current_class = t_uncover(splitter,t_u_cache,current_class) end local after_class = lookup.after_class if after_class then after_class = t_uncover(splitter,t_u_cache,after_class) end for i=1,#rules do local rule = rules[i] local class = rule.class local before = class.before if before then for i=1,#before do before[i] = before_class[before[i]] or { } end rule.before = t_hashed(before,t_h_cache) end local current = class.current local lookups = rule.lookups if current then for i=1,#current do current[i] = current_class[current[i]] or { } -- let's not be sparse if lookups and not lookups[i] then lookups[i] = "" -- (was: false) e.g. we can have two lookups and one replacement end -- end of fix end rule.current = t_hashed(current,t_h_cache) end local after = class.after if after then for i=1,#after do after[i] = after_class[after[i]] or { } end rule.after = t_hashed(after,t_h_cache) end rule.class = nil end lookup.before_class = nil lookup.current_class = nil lookup.after_class = nil lookup.format = "coverage" elseif format == "coverage" then for i=1,#rules do local rule = rules[i] local coverage = rule.coverage if coverage then local before = coverage.before if before then before = t_uncover(splitter,t_u_cache,reversed(before)) rule.before = t_hashed(before,t_h_cache) end local current = coverage.current if current then current = t_uncover(splitter,t_u_cache,current) -- let's not be sparse local lookups = rule.lookups if lookups then for i=1,#current do if not lookups[i] then lookups[i] = "" -- fix sparse array end end end -- rule.current = t_hashed(current,t_h_cache) end local after = coverage.after if after then after = t_uncover(splitter,t_u_cache,after) rule.after = t_hashed(after,t_h_cache) end rule.coverage = nil end end elseif format == "reversecoverage" then -- special case, single substitution only for i=1,#rules do local rule = rules[i] local reversecoverage = rule.reversecoverage if reversecoverage then local before = reversecoverage.before if before then before = t_uncover(splitter,t_u_cache,reversed(before)) rule.before = t_hashed(before,t_h_cache) end local current = reversecoverage.current if current then current = t_uncover(splitter,t_u_cache,current) rule.current = t_hashed(current,t_h_cache) end local after = reversecoverage.after if after then after = t_uncover(splitter,t_u_cache,after) rule.after = t_hashed(after,t_h_cache) end local replacements = reversecoverage.replacements if replacements then rule.replacements = r_uncover(splitter,r_u_cache,current,replacements) end rule.reversecoverage = nil end end elseif format == "glyphs" then -- I could store these more efficient (as not we use a nested tables for before, -- after and current but this features happens so seldom that I don't bother -- about it right now. for i=1,#rules do local rule = rules[i] local glyphs = rule.glyphs if glyphs then local fore = glyphs.fore if fore and fore ~= "" then fore = s_uncover(splitter,s_u_cache,fore) rule.before = s_hashed(fore,s_h_cache) end local back = glyphs.back if back then back = s_uncover(splitter,s_u_cache,back) rule.after = s_hashed(back,s_h_cache) end local names = glyphs.names if names then names = s_uncover(splitter,s_u_cache,names) rule.current = s_hashed(names,s_h_cache) end rule.glyphs = nil end end end end end end end local function check_variants(unicode,the_variants,splitter,unicodes) local variants = the_variants.variants if variants then -- use splitter local glyphs = lpegmatch(splitter,variants) local done = { [unicode] = true } local n = 0 for i=1,#glyphs do local g = glyphs[i] if done[g] then report_otf("skipping cyclic reference %U in math variant %U",g,unicode) else if n == 0 then n = 1 variants = { g } else n = n + 1 variants[n] = g end done[g] = true end end if n == 0 then variants = nil end end local parts = the_variants.parts if parts then local p = #parts if p > 0 then for i=1,p do local pi = parts[i] pi.glyph = unicodes[pi.component] or 0 pi.component = nil end else parts = nil end end local italic_correction = the_variants.italic_correction if italic_correction and italic_correction == 0 then italic_correction = nil end return variants, parts, italic_correction end actions["analyze math"] = function(data,filename,raw) if raw.math then data.metadata.math = raw.math local unicodes = data.resources.unicodes local splitter = data.helpers.tounicodetable for unicode, description in next, data.descriptions do local glyph = description.glyph local mathkerns = glyph.mathkern -- singular local horiz_variants = glyph.horiz_variants local vert_variants = glyph.vert_variants local top_accent = glyph.top_accent if mathkerns or horiz_variants or vert_variants or top_accent then local math = { } if top_accent then math.top_accent = top_accent end if mathkerns then for k, v in next, mathkerns do if not next(v) then mathkerns[k] = nil else for k, v in next, v do if v == 0 then k[v] = nil -- height / kern can be zero end end end end math.kerns = mathkerns end if horiz_variants then math.horiz_variants, math.horiz_parts, math.horiz_italic_correction = check_variants(unicode,horiz_variants,splitter,unicodes) end if vert_variants then math.vert_variants, math.vert_parts, math.vert_italic_correction = check_variants(unicode,vert_variants,splitter,unicodes) end local italic_correction = description.italic if italic_correction and italic_correction ~= 0 then math.italic_correction = italic_correction end description.math = math end end end end actions["reorganize glyph kerns"] = function(data,filename,raw) local descriptions = data.descriptions local resources = data.resources local unicodes = resources.unicodes for unicode, description in next, descriptions do local kerns = description.glyph.kerns if kerns then local newkerns = { } for k, kern in next, kerns do local name = kern.char local offset = kern.off local lookup = kern.lookup if name and offset and lookup then local unicode = unicodes[name] if unicode then if type(lookup) == "table" then for l=1,#lookup do local lookup = lookup[l] local lookupkerns = newkerns[lookup] if lookupkerns then lookupkerns[unicode] = offset else newkerns[lookup] = { [unicode] = offset } end end else local lookupkerns = newkerns[lookup] if lookupkerns then lookupkerns[unicode] = offset else newkerns[lookup] = { [unicode] = offset } end end elseif trace_loading then report_otf("problems with unicode %a of kern %a of glyph %U",name,k,unicode) end end end description.kerns = newkerns end end end actions["merge kern classes"] = function(data,filename,raw) local gposlist = raw.gpos if gposlist then local descriptions = data.descriptions local resources = data.resources local unicodes = resources.unicodes local splitter = data.helpers.tounicodetable for gp=1,#gposlist do local gpos = gposlist[gp] local subtables = gpos.subtables if subtables then for s=1,#subtables do local subtable = subtables[s] local kernclass = subtable.kernclass -- name is inconsistent with anchor_classes if kernclass then -- the next one is quite slow local split = { } -- saves time for k=1,#kernclass do local kcl = kernclass[k] local firsts = kcl.firsts local seconds = kcl.seconds local offsets = kcl.offsets local lookups = kcl.lookup -- singular if type(lookups) ~= "table" then lookups = { lookups } end -- if offsets[1] == nil then -- offsets[1] = "" -- end -- we can check the max in the loop -- local maxseconds = getn(seconds) for n, s in next, firsts do split[s] = split[s] or lpegmatch(splitter,s) end local maxseconds = 0 for n, s in next, seconds do if n > maxseconds then maxseconds = n end split[s] = split[s] or lpegmatch(splitter,s) end for l=1,#lookups do local lookup = lookups[l] for fk=1,#firsts do -- maxfirsts ? local fv = firsts[fk] local splt = split[fv] if splt then local extrakerns = { } local baseoffset = (fk-1) * maxseconds for sk=2,maxseconds do -- will become 1 based in future luatex local sv = seconds[sk] -- for sk, sv in next, seconds do local splt = split[sv] if splt then -- redundant test local offset = offsets[baseoffset + sk] if offset then for i=1,#splt do extrakerns[splt[i]] = offset end end end end for i=1,#splt do local first_unicode = splt[i] local description = descriptions[first_unicode] if description then local kerns = description.kerns if not kerns then kerns = { } -- unicode indexed ! description.kerns = kerns end local lookupkerns = kerns[lookup] if not lookupkerns then lookupkerns = { } kerns[lookup] = lookupkerns end for second_unicode, kern in next, extrakerns do lookupkerns[second_unicode] = kern end elseif trace_loading then report_otf("no glyph data for %U", first_unicode) end end end end end end subtable.kernclass = { } end end end end end end actions["check glyphs"] = function(data,filename,raw) for unicode, description in next, data.descriptions do description.glyph = nil end end -- future versions will remove _ actions["check metadata"] = function(data,filename,raw) local metadata = data.metadata for _, k in next, mainfields do if valid_fields[k] then local v = raw[k] if not metadata[k] then metadata[k] = v end end end -- metadata.pfminfo = raw.pfminfo -- not already done? local ttftables = metadata.ttf_tables if ttftables then for i=1,#ttftables do ttftables[i].data = "deleted" end end end actions["cleanup tables"] = function(data,filename,raw) data.resources.indices = nil -- not needed data.helpers = nil end -- kern: ttf has a table with kerns -- -- Weird, as maxfirst and maxseconds can have holes, first seems to be indexed, but -- seconds can start at 2 .. this need to be fixed as getn as well as # are sort of -- unpredictable alternatively we could force an [1] if not set (maybe I will do that -- anyway). -- we can share { } as it is never set --- ligatures have an extra specification.char entry that we don't use actions["reorganize glyph lookups"] = function(data,filename,raw) local resources = data.resources local unicodes = resources.unicodes local descriptions = data.descriptions local splitter = data.helpers.tounicodelist local lookuptypes = resources.lookuptypes for unicode, description in next, descriptions do local lookups = description.glyph.lookups if lookups then for tag, lookuplist in next, lookups do for l=1,#lookuplist do local lookup = lookuplist[l] local specification = lookup.specification local lookuptype = lookup.type local lt = lookuptypes[tag] if not lt then lookuptypes[tag] = lookuptype elseif lt ~= lookuptype then report_otf("conflicting lookuptypes, %a points to %a and %a",tag,lt,lookuptype) end if lookuptype == "ligature" then lookuplist[l] = { lpegmatch(splitter,specification.components) } elseif lookuptype == "alternate" then lookuplist[l] = { lpegmatch(splitter,specification.components) } elseif lookuptype == "substitution" then lookuplist[l] = unicodes[specification.variant] elseif lookuptype == "multiple" then lookuplist[l] = { lpegmatch(splitter,specification.components) } elseif lookuptype == "position" then lookuplist[l] = { specification.x or 0, specification.y or 0, specification.h or 0, specification.v or 0 } elseif lookuptype == "pair" then local one = specification.offsets[1] local two = specification.offsets[2] local paired = unicodes[specification.paired] if one then if two then lookuplist[l] = { paired, { one.x or 0, one.y or 0, one.h or 0, one.v or 0 }, { two.x or 0, two.y or 0, two.h or 0, two.v or 0 } } else lookuplist[l] = { paired, { one.x or 0, one.y or 0, one.h or 0, one.v or 0 } } end else if two then lookuplist[l] = { paired, { }, { two.x or 0, two.y or 0, two.h or 0, two.v or 0} } -- maybe nil instead of { } else lookuplist[l] = { paired } end end end end end local slookups, mlookups for tag, lookuplist in next, lookups do if #lookuplist == 1 then if slookups then slookups[tag] = lookuplist[1] else slookups = { [tag] = lookuplist[1] } end else if mlookups then mlookups[tag] = lookuplist else mlookups = { [tag] = lookuplist } end end end if slookups then description.slookups = slookups end if mlookups then description.mlookups = mlookups end end end end actions["reorganize glyph anchors"] = function(data,filename,raw) -- when we replace inplace we safe entries local descriptions = data.descriptions for unicode, description in next, descriptions do local anchors = description.glyph.anchors if anchors then for class, data in next, anchors do if class == "baselig" then for tag, specification in next, data do for i=1,#specification do local si = specification[i] specification[i] = { si.x or 0, si.y or 0 } end end else for tag, specification in next, data do data[tag] = { specification.x or 0, specification.y or 0 } end end end description.anchors = anchors end end end -- modes: node, base, none function otf.setfeatures(tfmdata,features) local okay = constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf) if okay then return constructors.collectprocessors("otf",tfmdata,features,trace_features,report_otf) else return { } -- will become false end end -- the first version made a top/mid/not extensible table, now we just -- pass on the variants data and deal with it in the tfm scaler (there -- is no longer an extensible table anyway) -- -- we cannot share descriptions as virtual fonts might extend them (ok, -- we could use a cache with a hash -- -- we already assing an empty tabel to characters as we can add for -- instance protruding info and loop over characters; one is not supposed -- to change descriptions and if one does so one should make a copy! local function copytotfm(data,cache_id) if data then local metadata = data.metadata local resources = data.resources local properties = derivetable(data.properties) local descriptions = derivetable(data.descriptions) local goodies = derivetable(data.goodies) local characters = { } local parameters = { } local mathparameters = { } -- local pfminfo = metadata.pfminfo or { } local resources = data.resources local unicodes = resources.unicodes -- local mode = data.mode or "base" local spaceunits = 500 local spacer = "space" local designsize = metadata.designsize or metadata.design_size or 100 local mathspecs = metadata.math -- if designsize == 0 then designsize = 100 end if mathspecs then for name, value in next, mathspecs do mathparameters[name] = value end end for unicode, _ in next, data.descriptions do -- use parent table characters[unicode] = { } end if mathspecs then -- we could move this to the scaler but not that much is saved -- and this is cleaner for unicode, character in next, characters do local d = descriptions[unicode] local m = d.math if m then -- watch out: luatex uses horiz_variants for the parts local variants = m.horiz_variants local parts = m.horiz_parts -- local done = { [unicode] = true } if variants then local c = character for i=1,#variants do local un = variants[i] -- if done[un] then -- -- report_otf("skipping cyclic reference %U in math variant %U",un,unicode) -- else c.next = un c = characters[un] -- done[un] = true -- end end -- c is now last in chain c.horiz_variants = parts elseif parts then character.horiz_variants = parts end local variants = m.vert_variants local parts = m.vert_parts -- local done = { [unicode] = true } if variants then local c = character for i=1,#variants do local un = variants[i] -- if done[un] then -- -- report_otf("skipping cyclic reference %U in math variant %U",un,unicode) -- else c.next = un c = characters[un] -- done[un] = true -- end end -- c is now last in chain c.vert_variants = parts elseif parts then character.vert_variants = parts end local italic_correction = m.vert_italic_correction if italic_correction then character.vert_italic_correction = italic_correction -- was c. end local top_accent = m.top_accent if top_accent then character.top_accent = top_accent end local kerns = m.kerns if kerns then character.mathkerns = kerns end end end end -- end math local monospaced = metadata.isfixedpitch or (pfminfo.panose and pfminfo.panose.proportion == "Monospaced") local charwidth = pfminfo.avgwidth -- or unset local italicangle = metadata.italicangle local charxheight = pfminfo.os2_xheight and pfminfo.os2_xheight > 0 and pfminfo.os2_xheight properties.monospaced = monospaced parameters.italicangle = italicangle parameters.charwidth = charwidth parameters.charxheight = charxheight -- local space = 0x0020 -- unicodes['space'], unicodes['emdash'] local emdash = 0x2014 -- unicodes['space'], unicodes['emdash'] if monospaced then if descriptions[space] then spaceunits, spacer = descriptions[space].width, "space" end if not spaceunits and descriptions[emdash] then spaceunits, spacer = descriptions[emdash].width, "emdash" end if not spaceunits and charwidth then spaceunits, spacer = charwidth, "charwidth" end else if descriptions[space] then spaceunits, spacer = descriptions[space].width, "space" end if not spaceunits and descriptions[emdash] then spaceunits, spacer = descriptions[emdash].width/2, "emdash/2" end if not spaceunits and charwidth then spaceunits, spacer = charwidth, "charwidth" end end spaceunits = tonumber(spaceunits) or 500 -- brrr -- we need a runtime lookup because of running from cdrom or zip, brrr (shouldn't we use the basename then?) local filename = constructors.checkedfilename(resources) local fontname = metadata.fontname local fullname = metadata.fullname or fontname local units = metadata.units_per_em or 1000 -- if units == 0 then -- catch bugs in fonts units = 1000 metadata.units_per_em = 1000 end -- parameters.slant = 0 parameters.space = spaceunits -- 3.333 (cmr10) parameters.space_stretch = units/2 -- 500 -- 1.666 (cmr10) parameters.space_shrink = 1*units/3 -- 333 -- 1.111 (cmr10) parameters.x_height = 2*units/5 -- 400 parameters.quad = units -- 1000 if spaceunits < 2*units/5 then -- todo: warning end if italicangle then parameters.italicangle = italicangle parameters.italicfactor = math.cos(math.rad(90+italicangle)) parameters.slant = - math.round(math.tan(italicangle*math.pi/180)) end if monospaced then parameters.space_stretch = 0 parameters.space_shrink = 0 elseif syncspace then -- parameters.space_stretch = spaceunits/2 parameters.space_shrink = spaceunits/3 end parameters.extra_space = parameters.space_shrink -- 1.111 (cmr10) if charxheight then parameters.x_height = charxheight else local x = 0x78 -- unicodes['x'] if x then local x = descriptions[x] if x then parameters.x_height = x.height end end end -- parameters.designsize = (designsize/10)*65536 parameters.ascender = abs(metadata.ascent or 0) parameters.descender = abs(metadata.descent or 0) parameters.units = units -- properties.space = spacer properties.encodingbytes = 2 properties.format = data.format or fonts.formats[filename] or "opentype" properties.noglyphnames = true properties.filename = filename properties.fontname = fontname properties.fullname = fullname properties.psname = fontname or fullname properties.name = filename or fullname -- -- properties.name = specification.name -- properties.sub = specification.sub return { characters = characters, descriptions = descriptions, parameters = parameters, mathparameters = mathparameters, resources = resources, properties = properties, goodies = goodies, } end end local function otftotfm(specification) local cache_id = specification.hash local tfmdata = containers.read(constructors.cache,cache_id) if not tfmdata then local name = specification.name local sub = specification.sub local filename = specification.filename local format = specification.format local features = specification.features.normal local rawdata = otf.load(filename,format,sub,features and features.featurefile) if rawdata and next(rawdata) then rawdata.lookuphash = { } tfmdata = copytotfm(rawdata,cache_id) if tfmdata and next(tfmdata) then -- at this moment no characters are assigned yet, only empty slots local features = constructors.checkedfeatures("otf",features) local shared = tfmdata.shared if not shared then shared = { } tfmdata.shared = shared end shared.rawdata = rawdata -- shared.features = features -- default shared.dynamics = { } -- shared.processes = { } tfmdata.changed = { } shared.features = features shared.processes = otf.setfeatures(tfmdata,features) end end containers.write(constructors.cache,cache_id,tfmdata) end return tfmdata end local function read_from_otf(specification) local tfmdata = otftotfm(specification) if tfmdata then -- this late ? .. needs checking tfmdata.properties.name = specification.name tfmdata.properties.sub = specification.sub -- tfmdata = constructors.scale(tfmdata,specification) local allfeatures = tfmdata.shared.features or specification.features.normal constructors.applymanipulators("otf",tfmdata,allfeatures,trace_features,report_otf) constructors.setname(tfmdata,specification) -- only otf? fonts.loggers.register(tfmdata,file.suffix(specification.filename),specification) end return tfmdata end local function checkmathsize(tfmdata,mathsize) local mathdata = tfmdata.shared.rawdata.metadata.math local mathsize = tonumber(mathsize) if mathdata then -- we cannot use mathparameters as luatex will complain local parameters = tfmdata.parameters parameters.scriptpercentage = mathdata.ScriptPercentScaleDown parameters.scriptscriptpercentage = mathdata.ScriptScriptPercentScaleDown parameters.mathsize = mathsize end end registerotffeature { name = "mathsize", description = "apply mathsize specified in the font", initializers = { base = checkmathsize, node = checkmathsize, } } -- helpers function otf.collectlookups(rawdata,kind,script,language) local sequences = rawdata.resources.sequences if sequences then local featuremap, featurelist = { }, { } for s=1,#sequences do local sequence = sequences[s] local features = sequence.features features = features and features[kind] features = features and (features[script] or features[default] or features[wildcard]) features = features and (features[language] or features[default] or features[wildcard]) if features then local subtables = sequence.subtables if subtables then for s=1,#subtables do local ss = subtables[s] if not featuremap[s] then featuremap[ss] = true featurelist[#featurelist+1] = ss end end end end end if #featurelist > 0 then return featuremap, featurelist end end return nil, nil end -- readers local function check_otf(forced,specification,suffix,what) local name = specification.name if forced then name = file.addsuffix(name,suffix,true) end local fullname = findbinfile(name,suffix) or "" if fullname == "" then fullname = fonts.names.getfilename(name,suffix) or "" end if fullname ~= "" then specification.filename = fullname specification.format = what return read_from_otf(specification) end end local function opentypereader(specification,suffix,what) local forced = specification.forced or "" if forced == "otf" then return check_otf(true,specification,forced,"opentype") elseif forced == "ttf" or forced == "ttc" or forced == "dfont" then return check_otf(true,specification,forced,"truetype") else return check_otf(false,specification,suffix,what) end end readers.opentype = opentypereader local formats = fonts.formats formats.otf = "opentype" formats.ttf = "truetype" formats.ttc = "truetype" formats.dfont = "truetype" function readers.otf (specification) return opentypereader(specification,"otf",formats.otf ) end function readers.ttf (specification) return opentypereader(specification,"ttf",formats.ttf ) end function readers.ttc (specification) return opentypereader(specification,"ttf",formats.ttc ) end function readers.dfont(specification) return opentypereader(specification,"ttf",formats.dfont) end -- this will be overloaded function otf.scriptandlanguage(tfmdata,attr) local properties = tfmdata.properties return properties.script or "dflt", properties.language or "dflt" end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-database.mkiv0000644000175000017500000001135212130411274024554 0ustar norbertnorbert%D \module %D [ file=m-database, %D version=2010.08.04, %D title=\CONTEXT\ Modules, %D subtitle=Database Thingies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. %D For Mojca. \registerctxluafile{m-database}{1.001} \unprotect \definenamespace [db] [type=module, comment=database module, version=1, name=database, parent=db, setup=yes, command=yes] \setupdatabase [\c!separator={,}, \c!quotechar=, \c!commentchar=, \c!strip=\v!no, \c!before=, \c!after=, \c!first=, \c!last=, \c!left=, \c!right=] % \let\currentdatabase\empty \the\everypresetdatabase % or just: \setupdatabase [\c!separator={,}] \def\module_database_process#1#2#3% {\edef\currentdatabasetype{#1}% \edef\currentdatabase {#2}% \edef\currentdatabasename{#3}% \ifx\currentdatabasename\empty \let\currentdatabasename\currentdatabase \let\currentdatabase\empty \fi \ctxlua{buffers.database.process { name = "\currentdatabase", type = "\currentdatabasetype", database = "\currentdatabasename", strip = "\databaseparameter\c!strip", separator = \!!bs\databaseparameter\c!separator \!!es, quotechar = \!!bs\databaseparameter\c!quotechar \!!es, commentchar = \!!bs\databaseparameter\c!commentchar\!!es, setups = \!!bs\databaseparameter\c!setups \!!es, before = \!!bs\databaseparameter\c!before \!!es, after = \!!bs\databaseparameter\c!after \!!es, first = \!!bs\databaseparameter\c!first \!!es, last = \!!bs\databaseparameter\c!last \!!es, left = \!!bs\databaseparameter\c!left \!!es, right = \!!bs\databaseparameter\c!right \!!es, command = \!!bs\databaseparameter\c!command \!!es, }}} \unexpanded\def\processdatabasebuffer{\dodoubleempty\module_database_process_buffer} \unexpanded\def\processdatabasefile {\dodoubleempty\module_database_process_file} \def\module_database_process_buffer[#1][#2]{\module_database_process{buffer}{#1}{#2}} \def\module_database_process_file [#1][#2]{\module_database_process{file} {#1}{#2}} % for old times sake: \unexpanded\def\defineseparatedlist {\dodoubleempty\module_database_separated_list_define} \unexpanded\def\processseparatedfile{\dodoubleempty\module_database_separated_list_process} \def\module_database_separated_list_define[#1][#2]% {\definedatabase[#1][#2]% \setuvalue{\e!start#1}{\grabbufferdatadirect{#1}{\e!start#1}{\e!stop#1}}% \setuvalue{\e!stop#1}{\processdatabasebuffer[#1][#1]}} \def\module_database_separated_list_process[#1][#2]% {\processdatabasefile[#1][#2]} \unexpanded\def\startseparatedlist[#1]% to be interfaced {\unexpanded\def\stopseparatedlist{\processdatabasebuffer[#1][#1]}% \grabbufferdatadirect{#1}{startseparatedlist}{stopseparatedlist}} \let\setupseparatedlist\setupdatabase \protect \continueifinputfile{m-database.mkiv} \starttext % m-database.txt % % 1,2,3,4,5 % 6,7,8,"9,x",0 % A,B,C,D % E,,F % G \definedatabase[test] \setupdatabase [test] [separator={,}, quotechar={"}, before={<}, after={>}, first={\endgraf[}, last={]\endgraf}, left={ (}, right={) }, command=\ruledhbox] \startbuffer[testbuffer] 1,2,3,4,5 6,7,8,"9,x",0 A,B,C,D E,,F G \stopbuffer \processdatabasebuffer[test][testbuffer] \processdatabasefile[test][m-database.txt] \defineseparatedlist [CSV] [separator={,}, before=\bTABLE,after=\eTABLE, first=\bTR,last=\eTR, left=\bTD,right=\eTD] % \startseparatedlist[CSV] % a,b,c % d,e,f % \stopseparatedlist \startCSV a,b,c d,e,f \stopCSV \defineseparatedlist [CSV] [separator={,+},quotechar={"'},commentchar=\letterhash, before={\starttabulate[|l|l|l|]},after=\stoptabulate, first=\NC,last=\NR, left=,right=\NC] \startCSV #a,b,"c,d" a,b,"c,d" a,'b,c',d "a,b"+c+d \stopCSV \defineseparatedlist [CSV] [separator=space, first=\NC,last=\NR, left=,right=\NC, before={\starttabulate[|l|l|l|]},after=\stoptabulate] \startCSV a b c d e f \stopCSV \startsetups csv:unix \catcode\hashasciicode\commentcatcode \stopsetups \defineseparatedlist [CSV] [setups=csv:unix, separator={,}, first=\NC,last=\NR, left=,right=\NC, before={\starttabulate[|l|l|l|]},after=\stoptabulate] \processseparatedfile[CSV][m-database.txt] \defineseparatedlist[CSV] [separator=comma, before=\bTABLE, after=\eTABLE, first=\bTR, last=\eTR, left=\bTD, right=\eTD] \startCSV a,b,c,č d,e,f,š \stopCSV \startseparatedlist[CSV] a,b,c,č d,e,f,š \stopseparatedlist \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-imp-pre.mkiv0000644000175000017500000000431311754241457025071 0ustar norbertnorbert%D \module %D [ file=meta-pre, %D version=2001.03.21, %D title=\METAPOST\ Graphics, %D subtitle=Predefined Goodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this library, we define a couple of handy graphics. % todo: use the predefine grid macros, mp code will move to % mp-* file \startuseMPgraphic{pagegrid} StartPage ; drawoptions(withcolor .8white) ; fill Field[Text][Text] ; drawoptions(withcolor .65white) ; fill Field[Footer][Text] ; fill Field[Header][Text] ; fill Field[LeftMargin][Text] ; fill Field[RightMargin][Text] ; drawoptions(withcolor .65yellow) ; fill Field[LeftEdge][Text] ; fill Field[RightEdge][Text] ; fill Field[Bottom][Text] ; fill Field[Top][Text] ; drawoptions(withpen pencircle scaled .3pt withcolor .65white) ; for i=-3cm step 1cm until PaperWidth+3cm : draw (i,-3cm)--(i,PaperHeight+3cm) ; endfor ; for i=PaperHeight+3cm step -1cm until -3cm : draw (-3cm,i)--(PaperWidth+3cm,i) ; endfor ; drawoptions(withpen pencircle scaled .15pt) ; for i=.5cm-3cm step 1cm until PaperWidth+3cm : draw (i,-3cm)--(i,PaperHeight+3cm) ; endfor ; for i=PaperHeight-.5cm+3cm step -1cm until -3cm : draw (-3cm,i)--(PaperWidth+3cm,i) ; endfor ; drawoptions(withpen pencircle scaled .3pt withcolor .65red) ; for i=0 step 1cm until PaperWidth : draw (i,0)--(i,PaperHeight) ; endfor ; for i=PaperHeight step -1cm until 0 : draw (0,i)--(PaperWidth,i) ; endfor ; drawoptions(withpen pencircle scaled .15pt withcolor .65red) ; for i=.5cm step 1cm until PaperWidth : draw (i,0)--(i,PaperHeight) ; endfor ; for i=PaperHeight-.5cm step -1cm until 0 : draw (0,i)--(PaperWidth,i) ; endfor ; drawoptions(withpen pencircle scaled 5pt withcolor .65red) ; draw ulcorner Page ; StopPage ; \stopuseMPgraphic \defineoverlay[pagegrid][\useMPgraphic{pagegrid}] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-faq-02.tex0000644000175000017500000000235211754241457023655 0ustar norbertnorbert%D \module %D [ file=s-faq-02, %D version=1997.21.08, %D title=\CONTEXT\ Style File, %D subtitle=FAQ Paper Version, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[faq-00] \setuplayout [header=0pt] \setuppagenumbering [location=] \setupfootertexts [\labeltext{FAQ}: \NameOfFAQ\IndexOfFAQ][pagenumber] \def\EndAnswer% {\blank[2*big] \page[no] (\AuthorOfFAQ)} \def\TitlePage% {\startstandardmakeup \midaligned{\bfd \labeltext{FAQ}} \blank[3*big] \midaligned{\bfd \labeltext{about} \NameOfFAQ} \blank[3*big] \midaligned{\bfb \labeltext{version}: \currentdate} \blank[3*big] \midaligned{\tta \ListOfFAQ} \vfill \midaligned{\tta pragma@wxs.nl} \blank[3*big] \stopstandardmakeup} \def\StartReadingFAQ {\page} \def\StopReadingFAQ {\page} \def\FileWithFAQs {\StartReadingFAQ \input \FileNameOfFAQ \relax \StopReadingFAQ} \def\IndexPage {\page \setupfootertexts[\labeltext{index}][] \placeregister[index]} \def\AllFAQs {} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-gb.mkii0000644000175000017500000000102411754241457024104 0ustar norbertnorbert%D \module %D [ file=cont-uk, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ English Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {english} \def\defaultlanguagetag{gb} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-math-characters.mkiv0000644000175000017500000001431312161703335026072 0ustar norbertnorbert%D \module %D [ file=s-math-characters.mkiv, % was: s-fnt-25 and later s-mat-10 %D version=2009.01.25, %D title=\CONTEXT\ Style File, %D subtitle=Math Glyph Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[math-characters] \registerctxluafile{s-math-characters}{} % context --jit --global --bodyfont=cambria --result=math-characters-cambria s-math-characters.mkiv % context --jit --global --bodyfont=modern --result=math-characters-modern s-math-characters.mkiv \startsetups s-math-characters:reset \let\showmathcharactersstart \relax \let\showmathcharactersstop \relax \let\showmathcharactersreference \gobbleoneargument \let\showmathcharactersstartentry \relax \let\showmathcharactersstopentry \relax \let\showmathcharactersentryhexdectit \gobblethreearguments \let\showmathcharactersentrywdhtdpic \gobblefourarguments \let\showmathcharactersentryresource \gobbleoneargument \let\showmathcharactersstartnext \relax \let\showmathcharactersnextentry \gobblethreearguments \let\showmathcharactersnextcycle \gobbleonearguments \let\showmathcharactersstopnext \relax \let\showmathcharactersstarthvariants \relax \let\showmathcharactershvariantsentry \gobblethreearguments \let\showmathcharactersstophvariants \relax \let\showmathcharactersstartvvariants \showmathcharactersstarthvariants \let\showmathcharactersvvariantsentry \showmathcharactershvariantsentry \let\showmathcharactersstopvvariants \showmathcharactersstophvariants \let\showmathcharactersbetweennextandvariants\relax \let\showmathcharactersstartentryclassspec \relax \let\showmathcharactersstopentryclassspec \relax \let\showmathcharactersentryclassname \gobbletwoarguments \let\showmathcharactersentrysymbol \gobbletwoarguments \let\showmathcharactersstartlookupvariants \relax \let\showmathcharacterslookupvariant \gobblefourarguments \let\showmathcharactersstoplookupvariants \relax \stopsetups \directsetup{s-math-characters:reset} \startsetups s-math-characters:default \directsetup{s-math-characters:reset} \unexpanded\def\showmathcharactersstartentry {\blank\begingroup\raggedright} \unexpanded\def\showmathcharactersstopentry {\endgroup\blank} \def\showmathcharactersentryhexdectit##1##2##3% {##1:\space{\char##2}\space\ruledhbox{\char##2}\space##3\par \advance\leftskip\emwidth\relax} \def\showmathcharactersentrywdhtdpic##1##2##3##4% {width:\space##1,\space height:\space##2,\space depth:\space##3,\space italic:\space##4\par} \def\showmathcharactersentryresource##1% {virtual:\space##1\par} \def\showmathcharactersstartnext {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth next:\space} \def\showmathcharactersnextentry##1##2##3% {\ifnum##1>\plusone \space=>\space\fi##2~\ruledhbox{\char##3}} \def\showmathcharactersnextcycle##1% {\ifnum##1>\plusone \space=>\space\fi cycle} \def\showmathcharactersstopnext {\par\endgroup} \def\showmathcharactersstarthvariants {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth variants:\space} \def\showmathcharactershvariantsentry##1##2##3% {\ifnum##1>\plusone \space=>\space\fi##2~\ruledhbox{\char##3}} \def\showmathcharactersstophvariants {\par\endgroup} \let\showmathcharactersstartvvariants\showmathcharactersstarthvariants \let\showmathcharactersvvariantsentry\showmathcharactershvariantsentry \let\showmathcharactersstopvvariants \showmathcharactersstophvariants \def\showmathcharactersbetweennextandvariants {}% \space=>\space} \def\showmathcharactersentryclassname##1##2% {mathclass:\space##1,\space mathname:\space##2\par} \def\showmathcharactersentrysymbol##1##2% {mathsymbol:\space##1~\ruledhbox{\char##2}\par} \def\showmathcharactersstartlookupvariants {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth lookupvariants:\space} \def\showmathcharacterslookupvariant##1##2##3##4% {\ifnum##1>\plusone,\space\fi##2:~{\char##3}\space(##4)} \def\showmathcharactersstoplookupvariants {\par\endgroup} \stopsetups \unprotect \unexpanded\def\enableshowmathfontvirtual {\ctxlua{fonts.constructors.autocleanup=false}} \unexpanded\def\showmathfontcharacters {\dosingleempty\module_math_characters_show} \def\module_math_characters_show[#1]% {\begingroup \getdummyparameters[\c!bodyfont=,\c!list=,\c!alternative=default,#1]% \directsetup{s-math-characters:\dummyparameter\c!alternative}% \doifelsenothing{\dummyparameter\c!bodyfont} {\definedfont[MathRoman*math-text]} {\definedfont[\dummyparameter\c!bodyfont]}% \dontcomplain \ctxlua{moduledata.math.characters.showlist { number = false, list = "\dummyparameter\c!list", }}% \endgroup} \protect \stopmodule \continueifinputfile{s-math-characters.mkiv} \setuplayout [width=middle, height=middle, topspace=15mm, backspace=15mm, bottomspace=15mm, header=1cm, headerdistance=0.5cm, footer=0pt] \starttext \doifelse {\getdocumentargument{bodyfont}} {} { \setupbodyfont[cambria, 12pt] % \setupbodyfont[modern, 12pt] % \setupbodyfont[lmvirtual, 12pt] % \setupbodyfont[pxvirtual, 12pt] % \setupbodyfont[txvirtual, 12pt] % \setupbodyfont[palatino, 10pt] % \setupbodyfont[mathtimes, 12pt] % \setupbodyfont[stix, 12pt] % \setupbodyfont[xits, 12pt] % \setupbodyfont[lucida, 12pt] % \setupbodyfont[lucidanova,12pt] % \setupbodyfont[pagella, 12pt] % \setupbodyfont[bonum, 12pt] } { \normalexpanded{\setupbodyfont[\getdocumentargument{bodyfont},12pt]} } \showmathfontcharacters \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/page-set.mkiv0000644000175000017500000025503212134352503024273 0ustar norbertnorbert%D \module %D [ file=page-set, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Column Sets, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % not yet mkiv! probably namespace issues with localframed (only one left) % % getnoflines vs getrawnoflines % This is a rather old mechanism and we can best keep it as it is. If it gets % replaced by a more modern solution, it will be an extra mechanism. So, we % only do some basic cleanup. \writestatus{loading}{ConTeXt Page Macros / Column Sets} % todo : last longer than previous % todo : block span over last column if footnotes % todo : diagnosis balancing run % todo : separate footnote placement % todo : go on on same page with colset % todo : test page areas per page % todo : leftmargin/rightmargin (better than afstand(1)) % use the OTRSET layer for more purposes, like the footnotes ! \unprotect \newcount\tofcolumns % total \newcount\lofcolumns % left \newcount\rofcolumns % right \newcount\columnfirstcell \columnfirstcell=1 \newcount\columnlastcell \newcount\columnfreecells \newcount\currenthcell \newcount\currentvcell \newcount\columnhcells \newcount\columnvcells \newif\ifenoughcolumncells \newif\ifsomefreecolumncells \newif\ifcolumnspread \newif\iftracecolumnset \newif\ifforcecolumnsetgrid \forcecolumnsetgridtrue \newif\ifcollectingsetcontent % never set \newif\ifcarryoverfootnotes %\carryoverfootnotestrue \newif\iflastcolumnfootnotes % never set \lastcolumnfootnotestrue \newif\ifintermediatefootnotes \newbox \b_page_set_preceding \newbox \b_page_set_trailing \newdimen \d_page_set_local_hsize \newconditional\c_page_set_width_set \installcorenamespace{columnsetgrid} \def\columnmaxcells {75} % runtime \def\columnmaxfreecells {0} % runtime \def\columngaplimit {0} % {5} \def\page_set_cell #1#2{\csname \??columnsetgrid:\number#1:\number#2\endcsname} \def\page_set_cell_get#1#2{\box\csname \??columnsetgrid:\number#1:\number#2\endcsname} \def\page_set_cell_set#1#2{\global\setbox\csname\??columnsetgrid:\number#1:\number#2\endcsname} \def\page_set_cell_doifelse#1#2% {\relax \ifvoid\csname\??columnsetgrid:\number#1:\number#2\endcsname \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\page_set_cell_erase_grid % maybe dedicated loops ... make another loop when max's have changed {\bgroup \increment\columnmaxcells\relax \ifodd\realpageno \else \columnspreadfalse \fi \ifcolumnspread \page_set_cell_erase_grid_spread \else \page_set_cell_erase_grid_page \fi \page_set_cell_erase_grid_top \global\columnfirstcell\zerocount \global\columnlastcell \columnfirstcell \global\columnfreecells\columnfirstcell \egroup} \let\m_page_column_l\relax \let\m_page_column_r\relax \def\page_set_cell_erase_grid_spread {\dorecurse\nofcolumns {\let \m_page_column_l\recurselevel \edef\m_page_column_r{\the\numexpr\recurselevel+\lofcolumns}% \dostepwiserecurse \zerocount \columnmaxcells \plusone {\ifcsname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname \global\setbox\csname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname \ifcsname\??columnsetgrid:\m_page_column_r:\recurselevel\endcsname \box\csname\??columnsetgrid:\m_page_column_r:\recurselevel\endcsname \else \emptyhbox \expandafter\newbox\csname\??columnsetgrid:\m_page_column_r:\recurselevel\endcsname \fi \else \expandafter\newbox\csname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname \ifcsname\??columnsetgrid:\m_page_column_r:\recurselevel\endcsname \global\setbox\csname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname\box\csname\??columnsetgrid:\m_page_column_r:\recurselevel\endcsname \else \expandafter\newbox\csname\??columnsetgrid:\m_page_column_r:\recurselevel\endcsname \fi \fi}}} \def\page_set_cell_erase_grid_page {\dorecurse \tofcolumns {\let\m_page_column_l\recurselevel \dostepwiserecurse \zerocount \columnmaxcells \plusone {\ifcsname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname \global\setbox\csname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname\emptybox \else \expandafter\newbox\csname\??columnsetgrid:\m_page_column_l:\recurselevel\endcsname \fi}}} \def\page_set_cell_erase_grid_top {\dorecurse\tofcolumns {\global\setbox\csname\??columnsetgrid:\recurselevel:\columnmaxcells\endcsname\copy\placeholderboxa}} % % % % \def\OTRSETmakeupwidth{\innermakeupwidth} \unexpanded\def\page_set_command_flush_side_floats {\page_sides_forget_floats} \unexpanded\def\page_set_command_synchronize_side_floats {\page_sides_forget_floats} % The following two macros are used to compensate for a switch in body fonts % as in: % % \definecolumnset [two] [n=2,balancing=yes] % \definecolumnset [three] [n=3,balancing=yes] % % \setupcolumnsetlines[two][1][1][7] % \setupcolumnsetlines[two][1][2][10] % % \setupcolumnsetlines[three][1][1][40] % \setupcolumnsetlines[three][1][2][40] % \setupcolumnsetlines[three][1][3][40] % % \setupcolumnsetstart[three][1][1][15] % \setupcolumnsetstart[three][1][2][20] % \setupcolumnsetstart[three][1][3][20] % % \starttext % \startcolumnset [two] \dorecurse {1}{\input tufte \par} \stopcolumnset % \switchtobodyfont[small] % \startcolumnset [three] \dorecurse {1}{\input tufte \par} \stopcolumnset % \stoptext %D Marks in columnsets: %D %D \starttyping %D \definemarking[M] %D \setupheadertexts[\setups{show-M-marks}] %D \definecolumnset[test][n=3] %D %D \startsetups show-M-marks %D \getmarking[M][1][previous]/\getmarking[M][1][first]/\getmarking[M][1][last]\quad %D \getmarking[M][2][previous]/\getmarking[M][2][first]/\getmarking[M][2][last]\quad %D \getmarking[M][3][previous]/\getmarking[M][3][first]/\getmarking[M][3][last]\quad %D \getmarking[M][1][previous]/\getmarking[M][1][first]/\getmarking[M][last]\quad %D \getsavedmarking[M][previous]/\getsavedmarking[M][first]/\getsavedmarking[M][last] %D \stopsetups %D %D \startbuffer %D \section{Knuth} [K1]\marking[M]{k1} [K2]\marking[M]{k2} \input knuth %D \section{Zapf} [Z]\marking[M]{z} \input zapf %D \stopbuffer %D %D \startbuffer %D \section{Ward} [W]\marking[M]{w} \input ward %D \placefigure[here]{none}{\externalfigure[a][height=2cm]} %D \section{Davis} [D]\marking[M]{d} \input davis %D \section{Zapf} [Z]\marking[M]{z} \input zapf %D \stopbuffer %D %D \startbuffer %D \section{Ward} [W]\marking[M]{w} \input ward %D \placefigure[here]{none}{\externalfigure[a][height=2cm]} %D \section{Davis} [D]\marking[M]{d} \input davis %D \section{Zapf} [Z]\marking[M]{z} \input zapf %D \section{Douglas} [O]\marking[M]{o} \input douglas %D \stopbuffer %D %D \starttext %D \startcolumnset[test] %D \dorecurse{5}{\getbuffer} %D \placefigure[here]{none}{\externalfigure[a][height=2cm]} %D % \column % sometimes needed %D \stopcolumnset %D \stoptext %D \stoptyping %D test case of Vit Zika (context list): %D %D \starttyping %D \setuplayout[height=middle,width=middle,grid=yes] %D %D \starttext %D \startcolumnset %D \dorecurse{10} %D {\input thuan \endgraf %D \bgroup %D \ss\restoreinterlinespace %D \dorecurse{3}{\input hawking \endgraf} %D \egroup %D \input bryson \endgraf} %D \stopcolumnset %D \stoptext %D \stoptyping \def\OTRSETsetcorrectnofcells#1% {\bgroup \!!counta#1\relax \ifdim\globalbodyfontsize=\localbodyfontsize \restoreinterlinespace \else \!!dimena-\!!counta\lineheight \restoreglobalbodyfont % slow, we need a fast one \advance\!!dimena\!!counta\lineheight \getnoflines\!!dimena \advance\!!counta\noflines \ifnum\!!counta<#1\else \!!counta#1\relax \fi \fi \relax % needed ! ! ! ! else lookahead over \fi and \@EA \@EA\egroup\@EA\scratchcounter\the\!!counta\relax} \def\OTRSETsetcorrectcellht {\bgroup \!!dimena-\strutht\relax \ifdim\globalbodyfontsize=\localbodyfontsize \restoreinterlinespace \else \restoreglobalbodyfont \fi \advance\!!dimena\strutht \relax % needed ! ! ! ! else lookahead over \fi and \@EA \@EA\egroup\@EA\scratchdimen\the\!!dimena\relax} \def\doOTRSETsetgridcells#1#2#3#4#5#6% placeholder col row wid hei {data} {\!!countd#2\advance\!!countd#4\advance\!!countd\minusone \!!counte#3\advance\!!counte#5\advance\!!counte\minusone \dostepwiserecurse{#2}\!!countd\plusone {\!!countf\recurselevel \dostepwiserecurse{#3}\!!counte\plusone {\page_set_cell_set\!!countf\recurselevel#1}}% \dostepwiserecurse{#3}\!!counte\plusone {\wd\page_set_cell{#2}\recurselevel\hsize}% \page_set_cell_set{#2}\!!counte#6} \def\OTRSETsetgridcells {\doOTRSETsetgridcells{\copy\placeholderboxb}} \def\OTRSETerasegridcells#1#2#3#4% {\doOTRSETsetgridcells{\emptybox}{#1}{#2}{#3}{#4}{\emptybox}} \unexpanded\def\setupcolumnsetlines{\doquintupleempty\dosetupcolumnsettrick[l]} \unexpanded\def\setupcolumnsetstart{\doquintupleempty\dosetupcolumnsettrick[s]} \installcorenamespace{columnsettag} % temp hack \def\dosetupcolumnsettrick[#1][#2][#3][#4][#5]% tag id page col value {\iffifthargument \setevalue{\??columnsettag:#1:#2:\number#3:\number#4}{\number#5}% \else \setevalue{\??columnsettag:#1:#2:\number#3:0}{\number#4}% \fi} \def\currentcolumnmaxcellstag #1{\??columnsettag:l:\OTRSETidentifier:\columnsetpage:\number#1} \def\currentcolumnstartcelltag#1{\??columnsettag:s:\OTRSETidentifier:\columnsetpage:\number#1} \def\doresetcolumnsetlines#1% {\ifcsname\currentcolumnmaxcellstag{#1}\endcsname \letgvalue{\currentcolumnmaxcellstag{#1}}\zerocount \fi \ifcsname\currentcolumnmaxcellstag{#1}\endcsname \letgvalue{\currentcolumnmaxcellstag{#1}}\zerocount \fi} \def\currentcolumnsomecells#1#2% {\ifcsname#1\mofcolumns\endcsname \ifnum\csname#1\mofcolumns\endcsname=\zerocount #2% \else \number\numexpr\ifnum\csname#1\mofcolumns\endcsname<\zerocount \columnmaxcells+\fi\csname#1\mofcolumns\endcsname\relax \fi \else\ifcsname#10\endcsname \ifnum\csname#10\endcsname=\zerocount #2% \else \number\numexpr\ifnum\csname#10\endcsname<\zerocount \columnmaxcells+\fi\csname#10\endcsname\relax \fi \else #2% \fi\fi} \def\currentcolumnmaxcells {\currentcolumnsomecells\currentcolumnmaxcellstag \columnmaxcells} \def\currentcolumnstartcell{\currentcolumnsomecells\currentcolumnstartcelltag\plusone} \def\OTRSETsetfreecells#1#2% col start {\bgroup \global\columnfirstcell\ifnum#2=0 1\else#2\fi\relax \OTRSETsetcorrectnofcells\currentcolumnmaxcells % sets \scratchcounter \ifnum\scratchcounter<\columnmaxcells\relax \edef\columnmaxcells{\the\scratchcounter}% added 2013.04.19 \fi \ifnum\columnfirstcell>\columnmaxcells \global\columnfreecells\zerocount \global\columnfirstcell\plusone \global\columnlastcell \zerocount \global\somefreecolumncellsfalse %\message{no cells a}% \else \doloop {\ifnum\columnfirstcell>\columnmaxcells\relax \exitloop \else \page_set_cell_doifelse{#1}\columnfirstcell {\global\advance\columnfirstcell\plusone}\exitloop \fi}% \global\columnlastcell\columnfirstcell \doloop {\ifnum\columnlastcell>\columnmaxcells\relax \exitloop \else \page_set_cell_doifelse{#1}\columnlastcell {\global\advance\columnlastcell \minusone \exitloop} {\global\advance\columnlastcell \plusone }% \fi}% \ifnum\columnfirstcell>\columnmaxcells \global\columnfreecells\zerocount \global\columnfirstcell\plusone \global\columnlastcell \zerocount \global\somefreecolumncellsfalse %\message{no cells b}% \else \ifnum\columnlastcell>\columnmaxcells \global\columnlastcell\columnmaxcells \fi \global\columnfreecells\numexpr\columnlastcell-\columnfirstcell+\plusone\relax \global\somefreecolumncellstrue %\message{\number\columnfirstcell-\number\columnlastcell=\number\columnfreecells}% \fi \fi \egroup} \def\OTRSETgetmaxfreecells#1#2% col start {\let\columnmaxfreecells\!!zerocount \let\columnfrmfreecells\!!zerocount \pushmacro \columnmaxcells \OTRSETsetcorrectnofcells\currentcolumnmaxcells % sets \scratchcounter \edef\columnmaxcells{\the\scratchcounter}% \scratchcounter\zerocount \dostepwiserecurse{#2}\columnmaxcells\plusone {\page_set_cell_doifelse{#1}\recurselevel {\ifnum\columnmaxfreecells<\scratchcounter \edef\columnmaxfreecells{\the\scratchcounter}% \let\columnfrmfreecells\recurselevel \fi \scratchcounter\zerocount} {\advance\scratchcounter\plusone}}% \popmacro\columnmaxcells} \long\def\OTRSETrecurseRL#1% {\dostepwiserecurse\nofcolumns\plusone\minusone {#1\hskip\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance}} \def\OTRSETmakegridbox {\ifcase\columndirection \OTRSETdomakegridbox\plusone\nofcolumns\plusone \else \OTRSETdomakegridbox\nofcolumns\plusone\minusone \fi} \def\OTRSETmakeupwidth{\makeupwidth} % temporary indirectness \def\page_set_make_background_box {\begingroup \mofcolumns\recurselevel % used to signal mp \d_page_set_local_hsize\OTRSETlocalwidth\recurselevel \scratchdistance\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance\relax \edef\currentcolumnset{\currentcolumnset:\recurselevel}% \letcolumnsetparameter\c!width \d_page_set_local_hsize \letcolumnsetparameter\c!height\!!heighta \letcolumnsetparameter\c!lines \empty \letcolumnsetparameter\c!region\currentcolumnset \setbox\scratchbox\hbox\inheritedcolumnsetframed{}% maybe \fastlocalframed \wd\scratchbox\d_page_set_local_hsize \ht\scratchbox\!!heighta \ifcase\columndirection \hskip\scratchdistance \box\scratchbox \else \box\scratchbox \hskip\scratchdistance \fi \endgroup} \def\OTRSETdomakegridbox#1#2#3% {\hbox\bgroup \dontcomplain \forgetall % can go once in \flush \!!heighta \textheight % test first ! \hbox to \OTRSETmakeupwidth {\dostepwiserecurse{#1}{#2}{#3}\page_set_make_background_box}% \hskip-\OTRSETmakeupwidth % main text \hbox to \OTRSETmakeupwidth {\dostepwiserecurse{#1}{#2}{#3} {\mofcolumns\recurselevel \d_page_set_local_hsize\OTRSETlocalwidth\mofcolumns \offinterlineskip \setbox\scratchbox\vbox to \!!heighta {%\topskipcorrection % not needed \ifcase\OTRSETbalancemethod % no \or % yes \doifelselayerdata{OTRTEXT}\vfill\relax % temp hack \or % top \or % bottom \vfill \fi \dorecurse\columnmaxcells {\setbox\scratchbox\hbox{\page_set_cell_get\mofcolumns\recurselevel}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \ifcase\columndirection \box\scratchbox \else \hbox to \d_page_set_local_hsize {\hskip\d_page_set_local_hsize\llap{\box\scratchbox}}% \fi \par}% \ifcase\OTRSETbalancemethod % no \else % yes, top, bottom \ifdim\globalbodyfontsize=\localbodyfontsize \removedepth \restoreglobalbodyfont \vskip\strutdepth \fi \kern\zeropoint \vss \fi}% \wd\scratchbox\d_page_set_local_hsize % \textwidth \page_marks_synchronize_column{#1}{#2}\recurselevel\scratchbox \ifcase\columndirection \hskip\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance\box\scratchbox \else \box\scratchbox\hskip\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance \fi}}% \egroup} \let\OTRSETbalht\zeropoint \def\OTRSETreducegridbox % for the moment no difference between methods {\globallet\OTRSETbalht\zeropoint \ifcase\OTRSETbalancemethod % no balancing \else \bgroup \!!counta\columnmaxcells \donetrue \doloop {\dorecurse\nofcolumns{\page_set_cell_doifelse\recurselevel\!!counta\donefalse\donothing}% \ifdone \ifnum\!!counta>\plusone\advance\!!counta\minusone\else\exitloop\fi \else \exitloop \fi}% \ifnum\!!counta>\plusone \!!heighta\lineheight \multiply\!!heighta \!!counta \advance\!!heighta \topskip \advance\!!heighta -\lineheight \else \!!heighta\zeropoint \fi \xdef\OTRSETbalht{\the\!!heighta}% \egroup \fi} \def\OTRSETflushfinalfootnotes {\ifcase\lastcolumnlastcell \else \setbox\scratchbox\hbox {\placebottomnotes}% \ifdim\ht\scratchbox>\zeropoint \setbox\scratchbox\hbox {\hbox to \zeropoint{\page_set_cell_get\nofcolumns\lastcolumnlastcell}% \box\scratchbox}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \page_set_cell_set\nofcolumns\lastcolumnlastcell\box\scratchbox \fi \global\lastcolumnlastcell\zerocount \fi} \def\OTRSETdoflush {\ifcollectingsetcontent \global\mofcolumns\plusone \else \OTRSETdofinalflush \OTRSETdofinaloutput \ifnum\columnsetpage>\zerocount \dorecurse\nofcolumns{\doresetcolumnsetlines\recurselevel}% \fi \doglobal\increment\columnsetpage \OTRSETinitializecolumns \OTRSETstartnextpage \initializecolumntextareas \fi} \newbox\OTRfinalpagebox \def\OTRSETdofinalflush % see \OTRSETdoflush {\OTRSETflushfinalfootnotes \placecolumntextareas \OTRSETcentergridcells \bgroup % we want to keep the reduction local \OTRSETreducegridbox \global\setbox\OTRfinalpagebox\OTRSETmakegridbox \egroup % otherwise we get the wrong number of free cells %\gdef\localcolumnmaxcells{0}% here ? \global\mofcolumns\nofcolumns} % otherwise problems in finaloutput \def\OTRSETdofinaloutput {\ifdim\ht\OTRfinalpagebox=\textheight \bgroup \ifcase\OTRSETbalancemethod \page_otr_construct_and_shipout\box\OTRfinalpagebox \else\ifdim\OTRSETbalht>\zeropoint % catch a bordercase \scratchdimen\OTRSETbalht \advance\scratchdimen\lineheight\relax \ifdim\scratchdimen>\textheight % full page \page_otr_construct_and_shipout\box\OTRfinalpagebox \else % same page \global\setbox\OTRfinalpagebox \iftracecolumnset\ruledvbox\else\vbox\fi to \OTRSETbalht {\box\OTRfinalpagebox\vss}% \setlayer[OTRTEXT]{\box\OTRfinalpagebox}% \snaptogrid\vbox{\vskip\OTRSETbalht}% hack \fi \else \page_otr_construct_and_shipout\box\OTRfinalpagebox \fi \fi \globallet\OTRSETbalht\zeropoint \egroup \fi} \definesystemconstant {colset} \definetwopasslist\s!colset \newdimen \OTRSETtextswidth \newdimen \OTRSETtextsheight \let \OTRSETidentifier=\empty \def\OTRSETskipstart {\doifelsenothing{\columnsetparameter\c!start} {\scratchcounter\zerocount}% {\scratchcounter\columnsetparameter\c!start}% \relax % needed ! \ifcase\scratchcounter\else \advance\scratchcounter\plusone \doOTRSETsetgridcells {\copy\placeholderboxe} \plusone\plusone\nofcolumns\scratchcounter \emptybox \fi} \unexpanded\def\page_set_command_set_vsize % snap per sectie (gap here?) {\ifcollectingsetcontent \else % can be assigndimen \OTRSETsetcolumnmaxcells % layout can be changed \OTRSETskipstart % not that well tested \OTRSETcheckinsert % added \OTRSETsetfreecells\mofcolumns\columnfirstcell \ifsomefreecolumncells \global\vsize\columnfreecells\lineheight \ifinotr % else problems with floats, see extreme \pagegoal\vsize % niet nodig, tenzij binnen otr \fi \synchronizeoutput % fails on example % \allowbreak % hm \fi \synchronizenotes \fi} \def\page_set_command_set_hsize % of course this does not migrate outside the otr {\d_page_set_local_hsize\OTRSETlocalwidth\mofcolumns \textwidth\d_page_set_local_hsize \hsize\d_page_set_local_hsize} \unexpanded\def\page_set_command_synchronize_hsize {\ifconditional\c_page_set_width_set \bgroup \scratchdimen\OTRSETlocalwidth\mofcolumns \ifdim\scratchdimen=\textwidth \egroup \else % only if change in width and \column/\break \egroup \page_set_command_set_hsize \fi \fi} \def\OTRSETcheckfreelines {\page_set_command_set_vsize} \def\doOTRSETcolumnseparator {\hbox to \zeropoint{\hss\red\vl\hss}} \let\OTRSETcolumnseparator\relax \def\showbreaks {\let\OTRSETcolumnseparator\doOTRSETcolumnseparator} \def\OTRSETcolumnhbreak {\ifhmode \bgroup \removeunwantedspaces \parfillskip\zeropoint \OTRSETcolumnseparator \par \egroup \fi} \installcolumnbreakmethod \s!columnset \v!local {\OTRSETcolumnhbreak \page_otr_flush_all_floats \page_otr_eject_page % no \page_set_command_set_hsize, can be mid smaller (like tabulate) % also, this one should be executed at the outer level % (setting hsize inside otr does not work) \page_set_command_synchronize_hsize} % We need to make sure that we really leave the column; mid % column we may end up in an empty gap, and we don't want to % stay there (basically such a gap is a small empty page % then). \installcolumnbreakmethod \s!columnset \v!yes {\OTRSETcolumnhbreak \edef\savedmofcolumns{\the\mofcolumns}% \edef\savedrealpageno{\the\realpageno}% \page_otr_flush_all_floats \page_otr_eject_page \doloop {\ifnum\savedmofcolumns=\mofcolumns \ifnum\savedrealpageno=\realpageno \OTRSETdummycolumn \else \exitloop \fi \else \exitloop \fi}% \page_set_command_synchronize_hsize} \installcolumnbreakmethod \s!columnset \s!unknown {\expanded{\OTRSETgotocolumn[\@@columnspecification]}} \installcolumnbreakmethod \s!columnset \v!page {\page_otr_fill_and_eject_page} \newtoks\OTRSETeverystartofcolumn \newbox\OTRSETsavedfootnotes % \installoutputroutine\OTRSETflushtextsofar % spacing goes wrong %\def\OTRSETflushtextsofar % {\ifvoid\normalpagebox \else % \setbox\scratchbox\vbox{\unvbox\normalpagebox}% % \OTRSETsavenotes % \OTRSEThandleflushedtext0 % \fi} % The complication is in the fact that when the HERE float % is placed, the otr is not invoked when there is not yet % enough content; this can lead to a change in order (turning % on the tracer with option 0 is very instructive, watch the % small numbers in the margin) % % 0 = no flushing, so no interference but user should handle % border cases of placement % 1 = the normal otr, rather untested % 2 = a solution that works ok, is experimental and above % all messy \newconstant\OTRSETflushtextmode % will be replaced \def\OTRSETflushtextsofar % needs renaming {\ifcase\OTRSETflushtextmode % don't mess around \or % the normal one \ifvoid\normalpagebox\else \OTRSETnaturalflush \OTRSETcheckfreelines \fi \or % way to complicated, but kind of ok \doOTRSETflushtextsofar \fi} \newskip\lastskipinotr \installoutputroutine\doOTRSETflushtextsofar % experimental {\ifvoid\normalpagebox\else \scratchdimen\dp\normalpagebox \setbox\scratchbox\vbox {\forgetall \unvbox\normalpagebox \global\lastskipinotr\lastskip\relax \ifdim\lastskipinotr>\zeropoint\relax \removelastskip \else \kern-\scratchdimen % handle depth \fi}% \ifdim\lastskipinotr>\zeropoint \scratchskip\ht\scratchbox \setbox\scratchbox\hbox {\lower\strutdepth\box\scratchbox}% \dp\scratchbox\scratchdimen \ht\scratchbox\scratchskip \fi \OTRSETsavenotes \OTRSEThandleflushedtext\zerocount \ifdim\lastskipinotr>\zeropoint %\vskip \lastskipinotr % hm, gets lost anyway \else % we should not discard skips after here; tricky \fi \page_set_command_set_vsize \fi} \def\OTRSETplacebottomnotes {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \ifintermediatefootnotes \placebottomnotes \fi \fi \else \placebottomnotes \fi} \def\OTRSETflushsavednotes {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \flushsavednotes \fi \else \flushsavednotes \fi} \def\OTRSETsavenotes {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \else \savenotes \fi \fi} \appendtoks \OTRSETflushsavednotes \to \OTRSETeverystartofcolumn \def\OTRSETnaturalflush {\bgroup \forgetall % new, needed ! \setbox0\vbox to \columnfreecells\lineheight {\vskip-\topskip \vskip\lineheight \prevdepth\strutdp \unvbox\normalpagebox \vfill}% \setbox2\hbox {\OTRSETplacebottomnotes}% \setbox\scratchbox\hbox {\wd0\zeropoint\box0\box2}% \dp\scratchbox\strutdp \OTRSEThandleflushedtext\plusone \egroup} \newcount\lastcolumnlastcell \def\OTRSEThandleflushedtext#1% {\getnoflines{\ht\scratchbox}% %\wd\scratchbox\textwidth % geen \hsize kan < zijn in bv split tabulate \wd\scratchbox\OTRSETlocalwidth\mofcolumns \doOTRSETsetgridcells {\copy\placeholderboxf} \mofcolumns\columnfirstcell\plusone\noflines {\page_areas_registered_box1\columnfirstcell\scratchbox}% == \hbox / tricky htcorr == \columnfirstcell \global\columnlastcell\columnfirstcell \global\advance\columnlastcell \noflines \global\lastcolumnlastcell\columnlastcell \global\advance\lastcolumnlastcell \minusone % find next (acceptable) gap, todo: deadcycle \ifcase#1\else \OTRSETfillgapsbetweencells\mofcolumns\columnlastcell \fi \OTRSETfindnextgap % \message{\the\mofcolumns,\the\columnfirstcell,\the\columnfreecells}% % \wait % we cannot adapt the hsize since it may have changed (like % inside a tabulate) so we only change it when there is a % reason to do so \page_set_command_synchronize_hsize \page_set_command_set_vsize} \def\OTRSETfindnextgap {\OTRSETsetfreecells\mofcolumns\columnlastcell \ifsomefreecolumncells % okay \else \global\advance\mofcolumns \plusone \ifnum\mofcolumns>\nofcolumns \OTRSETdoflush \global\columnlastcell\plusone \global\columnfirstcell\zerocount \page_set_command_flush_floats \else \the\OTRSETeverystartofcolumn \global\columnlastcell\plusone \global\columnfirstcell\zerocount \fi \fi} \let\OTRSETcheckfreelines\donothing \def\OTRSETfillgapsbetweencells#1#2% col {\ifnum\columngaplimit>\zerocount \donefalse \dostepwiserecurse{#2}\columnmaxcells\plusone {\page_set_cell_doifelse{#1}\recurselevel {\ifdone \!!countb\recurselevel \advance\!!countb -\!!counta\relax \ifnum\!!countb>\plusone \advance\!!countb \minusone \ifnum\!!countb<\columngaplimit\relax \!!countb\recurselevel \advance\!!countb \minusone \dostepwiserecurse\!!counta\!!countb\plusone {\page_set_cell_set{#1}\recurselevel\copy\placeholderboxc}% %\message{[gap]}% \fi \fi \fi \donefalse} {\ifdone \else \donetrue \!!counta\recurselevel \fi}}% \fi} \appendtoks \OTRSETfillgapsbetweencells\mofcolumns\plusone \to \OTRSETeverystartofcolumn \newif\ifspancolumnslots \spancolumnslotstrue \newif\ifcheckcolumnspan \checkcolumnspantrue \def\OTRSETcheckwidthgap#1#2% box size {\ifcheckcolumnspan \bgroup \scratchdimen#2% \advance\scratchdimen-\wd#1\relax \ifdim-10\scaledpoint>\scratchdimen \egroup \else\ifdim10\scaledpoint<\scratchdimen \egroup \else \egroup \wd#1=#2% \fi\fi \fi} \def\OTRSETcheckcolumnslot#1% {\enoughcolumncellstrue \ifspancolumnslots\else \OTRSETcheckwidthgap#1\hsize \ifdim\wd#1>\hsize \enoughcolumncellsfalse \fi \fi \ifenoughcolumncells \getnoflines\pagetotal \scratchcounter\noflines \getnoflines{\ht#1}% \columnvcells\noflines \columnhcells\plusone \advance\scratchcounter \columnvcells \relax \ifnum\scratchcounter>\columnfreecells \enoughcolumncellsfalse \fi \fi} \def\OTRSETstoreincolumnslotPAGE#1% {\ifenoughcolumncells % to do \OTRSETsavebox{#1}% \else \OTRSETsavebox{#1}% \fi} \def\OTRSETstoreincolumnslotTOPS#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETcheckcolumnslot{#1}% \ifenoughcolumncells \OTRSETcheckcolumnspace\mofcolumns\columnfirstcell{#1}% \fi \ifenoughcolumncells \OTRSETsetgridcells\mofcolumns\columnfirstcell\columnhcells\columnvcells {\hbox{\copy#1}}% \page_set_command_set_vsize \else \OTRSETsavebox{#1}% \fi} \def\OTRSETstoreincolumnslotBOTS#1% {\OTRSETprepareforcolumnslot3{#1}% \edef\savedcolumnlastcell{\the\columnlastcell}% \OTRSETcheckcolumnslot{#1}% \ifenoughcolumncells \advance\columnlastcell -\columnvcells \advance\columnlastcell \plusone % \OTRSETcheckcolumnspace\mofcolumns\columnfirstcell{#1}% \OTRSETcheckcolumnspace\mofcolumns\columnlastcell{#1}% \fi \ifenoughcolumncells \OTRSETsetgridcells\mofcolumns\columnlastcell\columnhcells\columnvcells{\copy#1}% \OTRSETfillgapsbetweencells\mofcolumns\savedcolumnlastcell % -) \page_set_command_set_vsize \else \columnlastcell\savedcolumnlastcell \OTRSETsavebox{#1}% \fi} \newdimen\totalcolumnspace \def\columnspacetopoffset{0} \def\columnspacebotoffset{0} \def\OTRSETcheckcolumnspace#1#2#3% col row box {\columnhcells\plusone \totalcolumnspace\zeropoint \scratchcounter#1% \enoughcolumncellstrue \doloop {\advance\totalcolumnspace \OTRSETlocalwidth\scratchcounter\relax % needed \OTRSETcheckwidthgap#3\totalcolumnspace \ifnum\wd#3>\totalcolumnspace\relax \ifnum\scratchcounter=\nofcolumns \enoughcolumncellsfalse \exitloop \else \advance\columnhcells \plusone \advance\scratchcounter \plusone \advance\totalcolumnspace \namedcolumnsetparameter{\currentcolumnset:\number\scratchcounter}\c!distance \fi \else \exitloop \fi}% \ifenoughcolumncells \getnoflines{\ht#3}% \columnvcells\noflines \OTRSETcheckcolumncells{#1}{#2}\columnhcells\columnvcells \fi} \def\OTRSETcheckcolumncells#1#2#3#4% col row wid hei {\!!countd#1\advance\!!countd#3\advance\!!countd\minusone \!!counte#2\advance\!!counte#4\advance\!!counte\minusone \ifnum\!!counte>\columnmaxcells\relax \enoughcolumncellsfalse \else \enoughcolumncellstrue %\let\columnspacetopoffset\zerocount %\scratchcounter#2\advance\scratchcounter\minusone %\ifnum\scratchcounter>0 % \dostepwiserecurse{#1}\!!countd\plusone % {\ifdim\wd\page_set_cell\recurselevel\scratchcounter>\zeropoint % \let\columnspacetopoffset\plusone % \else\ifdim\dp\page_set_cell\recurselevel\scratchcounter>\zeropoint % \let\columnspacetopoffset\plusone % \fi\fi}% % \advance\!!counte \columnspacetopoffset \relax % \advance\columnvcells \columnspacetopoffset \relax %\fi %\let\columnspacebotoffset\zerocount %\scratchcounter\!!counte %\advance\scratchcounter \columnvcells \relax %\ifnum\scratchcounter>\columnmaxcells\else % \dostepwiserecurse{#1}\!!countd\plusone % {\ifdim\wd\page_set_cell\recurselevel\scratchcounter>\zeropoint % \let\columnspacebotoffset\plusone % \else\ifdim\dp\page_set_cell\recurselevel\scratchcounter>\zeropoint % \let\columnspacebotoffset\plusone % \fi\fi}% % \advance\!!counte \columnspacebotoffset \relax % \advance\columnvcells \columnspacebotoffset \relax %\fi \dostepwiserecurse{#1}\!!countd\plusone % cols {\ifenoughcolumncells \!!countf\recurselevel\relax \dostepwiserecurse{#2}\!!counte\plusone % rows {\ifenoughcolumncells \page_set_cell_doifelse\!!countf\recurselevel {\enoughcolumncellsfalse}{}% \fi}% \fi}% \fi} \let\preferedcolumn\empty \let\preferedrow \empty \def\OTRSETsetpreferedcolumnslot#1#2% {\doifsomething{#1}{\edef\preferedcolumn{#1}}% \doifsomething{#2}{\edef\preferedrow {#2}}} \OTRSETsetpreferedcolumnslot{\nofcolumns}{1} % default ? \let\pofcolumns\mofcolumns \let\qofcolumns\mofcolumns \newif\ifquitincurrentcolumn \def\OTRSETstoreincolumnslotLRTB#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \mofcolumns\nofcolumns+\currenthcell \plusone\columnmaxcells+\currentvcell{#1}} \def\OTRSETstoreincolumnslotLRBT#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \mofcolumns\nofcolumns+\currenthcell \columnmaxcells\plusone-\currentvcell{#1}} \def\OTRSETstoreincolumnslotRLTB#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \nofcolumns\qofcolumns-\currenthcell \plusone\columnmaxcells+\currentvcell{#1}} \def\OTRSETstoreincolumnslotRLBT#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \nofcolumns\qofcolumns-\currenthcell \columnmaxcells\plusone-\currentvcell{#1}} \def\OTRSETstoreincolumnslotTBLR#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \plusone\columnmaxcells+\currentvcell \mofcolumns\nofcolumns+\currenthcell{#1}} \def\OTRSETstoreincolumnslotTBRL#1% {\OTRSETprepareforcolumnslot1{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \plusone\columnmaxcells+\currentvcell \nofcolumns\qofcolumns-\currenthcell{#1}} \def\OTRSETstoreincolumnslotBTLR#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \columnmaxcells\plusone-\currentvcell \mofcolumns\nofcolumns+\currenthcell{#1}} \def\OTRSETstoreincolumnslotBTRL#1% {\OTRSETprepareforcolumnslot3{#1}% \OTRSETflushtextsofar \OTRSETcheckprefered \OTRSETstoreincolumnslotindeed \columnmaxcells\plusone-\currentvcell \nofcolumns\qofcolumns-\currenthcell{#1}} \def\OTRSETstoreincolumnslotFXTB#1% fixed column {\OTRSETcheckprefered \page_set_cell_doifelse\pofcolumns\plusone {\OTRSETprepareforcolumnslot2}{\OTRSETprepareforcolumnslot1}{#1}% % 1/2 dependent of place, todo \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \pofcolumns \pofcolumns +\currenthcell \preferedrow\columnmaxcells+\currentvcell{#1}} \def\OTRSETstoreincolumnslotFXBT#1% fixed column {\OTRSETcheckprefered \page_set_cell_doifelse\pofcolumns\columnmaxcells {\OTRSETprepareforcolumnslot2}{\OTRSETprepareforcolumnslot3}{#1}% % 3/2 dependent of place, todo \OTRSETflushtextsofar \OTRSETstoreincolumnslotindeed \pofcolumns \pofcolumns +\currenthcell \columnmaxcells\preferedrow-\currentvcell{#1}} \newconstant\OTRSETforcefixedfloats \def\OTRSETstoreincolumnslotHERE#1% fixed column {\ifcase\OTRSETforcefixedfloats \OTRSETstoreincolumnslotSOMEWHERE2{#1}% \else \OTRSETstoreincolumnslotFIXD{#1}% \fi} % this one looses too wide graphics % % \def\OTRSETstoreincolumnslotFIXD#1% fixed column % {\OTRSETprepareforcolumnslot2{#1}% % % no flush text sofar here, beware: no width test % \snaptogrid\vbox{\box#1}} % % still imperfect \def\OTRSETstoreincolumnslotFIXD#1% fixed column {\OTRSETflushtextsofar \ifdim\wd#1>\textwidth \OTRSETstoreincolumnslotSOMEWHERE2{#1}% \else % crappy test / needed for o-pbu-f / will be replaced \getnoflines{\ht#1}% \scratchdimen\noflines\lineheight \advance\scratchdimen\lineheight \advance\scratchdimen\pagetotal\relax \ifdim\scratchdimen<\pagegoal %OTRSETprepareforcolumnslot3{#1}% %ruledvskip\columnslotspacing\lineheight \blank[\number\columnslotspacing*\v!line]% \snaptogrid\hbox to \hsize{\hss\box#1\hss}% strange, why the centering \blank[\number\columnslotspacing*\v!line]% \else \OTRSETstoreincolumnslotSOMEWHERE2{#1}% \fi \fi} \def\OTRSETstoreincolumnslotSOMEWHERE#1#2% {\OTRSETprepareforcolumnslot{#1}{#2}% \OTRSETflushtextsofar \getnoflines\pagetotal \advance\noflines\columnfirstcell \OTRSETstoreincolumnslotindeed \mofcolumns\mofcolumns+\currenthcell \noflines\columnmaxcells+\currentvcell{#2}% \page_set_command_set_vsize} \def\OTRSETcheckprefered {\ifnum\preferedcolumn<\mofcolumns \let\pofcolumns\mofcolumns \else \let\pofcolumns\preferedcolumn \fi \ifquitincurrentcolumn \ifnum\mofcolumns=\nofcolumns \def\qofcolumns{\mofcolumns}% \else \scratchcounter\mofcolumns \advance\scratchcounter \plusone \edef\qofcolumns{\the\scratchcounter}% \fi \else \let\qofcolumns\mofcolumns \fi} \def\OTRSETstoreincolumnslotindeed#1#2#3#4#5#6#7#8#9% {\OTRSETcheckprefered \enoughcolumncellsfalse \donefalse \dostepwiserecurse{#1}{#2}{#31} {\ifdone \exitloop \else #4=\recurselevel \dostepwiserecurse{#5}{#6}{#71} {\ifdone \exitloop \else #8=\recurselevel \OTRSETcheckcolumnspace\currenthcell\currentvcell{#9}% \ifenoughcolumncells \donetrue \fi \fi}% \fi}% \ifdone \enoughcolumncellstrue \else \enoughcolumncellsfalse \fi \ifenoughcolumncells % \ifnum\columnspacetopoffset>0\message{[+++]}\fi % \ifnum\columnspacebotoffset>0\message{[---]}\fi % \OTRSETsetgridcells\currenthcell\currentvcell\columnhcells\columnvcells % {\vbox % {\ifcase\columnspacetopoffset\else\ruledvskip\columnspacetopoffset\lineheight\fi % \copy#9 % \ifcase\columnspacebotoffset\else\ruledvskip\columnspacebotoffset\lineheight\fi}}% \OTRSETsetgridcells\currenthcell\currentvcell\columnhcells\columnvcells {\copy#9}% \ifnum\currenthcell=\mofcolumns\relax \ifdim\ht\OTRSETsavedfootnotes>\zeropoint \OTRSETsetfreecells\mofcolumns\columnfirstcell \ifsomefreecolumncells \getnoflines{\ht\OTRSETsavedfootnotes}\relax \ifnum\columnfreecells<\noflines \global\somefreecolumncellsfalse \else %\message{[flt]}% float \fi \fi \ifsomefreecolumncells % ok, enough room for notes %\message{[flt]}% float \else % ? \OTRSETsavebox{#9}% \OTRSETerasegridcells\currenthcell\currentvcell\columnhcells\columnvcells %\message{[clr]}% save box \fi \else %\message{[flt]}% float \fi \else %\message{[flt]}% float \fi \page_set_command_set_vsize %\message{[fnt]}% float \else %\message{[rej]}% save box \OTRSETsavebox{#9}% \fi} \setnewconstant\columnslotspacing\plusone \def\OTRSETstoreincolumnslot#1% #2 % {method} {box} % alleen last {% no messing around here % \dp#2=\zeropoint % \ifcase\columnslotspacing\else % \setbox#2=\vbox spread \columnslotspacing\lineheight % {\vss\box#2\vss}% % \fi % and don't change this any more % \doifdefinedelse{\strippedcsname\OTRSETstoreincolumnslot#1} % {\getvalue{\strippedcsname\OTRSETstoreincolumnslot#1}{#2}} % {\OTRSETstoreincolumnslotUNKNOWN{#2}}} \executeifdefined{\strippedcsname\OTRSETstoreincolumnslot#1} \OTRSETstoreincolumnslotUNKNOWN} % {#2}} \def\OTRSETstoreincolumnslotUNKNOWN#1% {\OTRSETprepareforcolumnslot2{#1}\copy#1} % {} ? \def\OTRSETprepareforcolumnslot#1#2% 1=hoog 2=midden 3=laag {\dp#2\zeropoint \ifcase\columnslotspacing\else \scratchdimen\columnslotspacing\lineheight \ifnum#1=2 \scratchdimen2\scratchdimen \fi \begingroup \advance\scratchdimen\ht#2\relax \ifdim\scratchdimen<\columnmaxcells\lineheight \endgroup \setbox#2\vbox spread \scratchdimen \bgroup \else \endgroup \setbox#2\vbox to \columnmaxcells\lineheight \bgroup \vskip\strutdepth \fi \ifnum#1>1\vss\fi \box#2\relax \ifnum#1<3\vss\fi \egroup \fi} \unexpanded\def\page_set_command_check_if_float_fits {\global\ifconditional\c_page_floats_not_permitted\setfalse\c_page_floats_room\else\settrue\c_page_floats_room\fi} \def\OTRSETunpreparebox#1% {\ifhbox#1% spans and so \global\setbox\floatbox\vbox{\box#1}% \else \setbox\scratchbox\vbox {\unvbox#1\unskip\unskip\unskip \global\setbox\floatbox\lastbox}% \fi} % for the moment resave is still needed here \def\OTRSETsavebox#1% clean up the skips {\OTRSETunpreparebox{#1}% \page_floats_save\s!text} \def\OTRSETresavebox#1% clean up the skips {\OTRSETunpreparebox{#1}% \page_floats_resave\s!text} \unexpanded\def\page_set_command_flush_float_box {\box\floatbox} \unexpanded\def\page_set_command_flush_floats {\bgroup \def\OTRSETsavebox##1{\!!doneafalse}% \doloop {\ifconditional\c_page_floats_some_waiting \OTRSETskipstart \page_floats_get_info\s!text \ifdim\floatwidth>\zeropoint \!!doneatrue \page_floats_flush\s!text\plusone \dp\floatbox\zeropoint \OTRSETstoreincolumnslot{TBLR}\floatbox \if!!donea %\message{[flu]}% \else \OTRSETresavebox\floatbox \exitloop \fi \else %\message{[err]}% happens but why? \fi \else \exitloop \fi} \egroup} \newif\ifcentergridcells \centergridcellstrue \newif\ifcentergridcellonly \centergridcellonlyfalse \newif\ifautocentergridcellonly \autocentergridcellonlytrue \def\OTRSETcentergridcells {\ifcentergridcells \dorecurse\nofcolumns {\currenthcell\recurselevel \ifautocentergridcellonly % we prevent centering when the next column is empty % to be checked ! ! ! ! \advance\currenthcell \plusone \centergridcellonlytrue \ifnum\currenthcell>\nofcolumns % ok already \else % only span if there is a next column with content \dorecurse\columnmaxcells {\ifdim\ht\page_set_cell\currenthcell\currentvcell>\zeropoint \centergridcellonlyfalse \else\ifdim\dp\page_set_cell\currenthcell\currentvcell>\zeropoint \centergridcellonlyfalse \fi\fi}% \fi \fi \currenthcell\recurselevel \dorecurse\columnmaxcells {\currentvcell\recurselevel\relax \ifdim\ht\page_set_cell\currenthcell\currentvcell>\zeropoint \ifdim\dp\page_set_cell\currenthcell\currentvcell=\zeropoint \bgroup \setbox\scratchbox\page_set_cell_get\currenthcell\currentvcell \getnoflines{\ht\scratchbox}% \!!counta\currentvcell \advance\!!counta -\noflines \advance\!!counta \plusone % first col always ok \!!countb\currenthcell \!!countc\currenthcell \advance\!!countc \plusone \!!donebtrue \ifcentergridcellonly \!!countc\maxdimen \fi \dostepwiserecurse\!!countc\nofcolumns\plusone {\if!!doneb \let\xrecurselevel\recurselevel \dostepwiserecurse\!!counta\currentvcell\plusone {\ifdim\ht\page_set_cell\xrecurselevel\recurselevel>\zeropoint \!!donebfalse \else\ifdim\wd\page_set_cell\xrecurselevel\recurselevel>\zeropoint \!!donebfalse \fi\fi}% \if!!doneb \!!countb\xrecurselevel \fi \fi}% \totalcolumnspace\OTRSETlocalwidth\currenthcell \dostepwiserecurse\!!countc\!!countb\plusone {\advance\totalcolumnspace \OTRSETlocalwidth\recurselevel \advance\totalcolumnspace \namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance}% \ifdim\totalcolumnspace>\wd\scratchbox \setbox\scratchbox\hbox to \totalcolumnspace{\hss\box\scratchbox\hss}% \fi \page_set_cell_set\currenthcell\currentvcell\box\scratchbox \egroup \fi \fi}}% \fi} \def\OTRSETinitializecolumns% once per page {\columnspreadtrue % todo \ifcolumnspread \global\rofcolumns\columnsetparameter\c!nright \global\lofcolumns\columnsetparameter\c!nleft \global\tofcolumns\rofcolumns \relax \ifodd\realpageno\relax \global\nofcolumns\rofcolumns \else \global\advance\tofcolumns\lofcolumns \global\nofcolumns\lofcolumns \fi \else \global\nofcolumns\columnsetparameter\c!n \global\rofcolumns\nofcolumns \global\lofcolumns\nofcolumns \global\tofcolumns\nofcolumns \fi \OTRSETassignwidths \global\mofcolumns\plusone \page_set_cell_erase_grid} % this is a first step in upgrading \installcorenamespace{columnset} \installframedcommandhandler \??columnset {columnset} \??columnset \setupcolumnset % todo, use the rather basic backgroundframed [\c!direction=\v!right, \c!balance=\v!no, \c!distance=1.5\bodyfontsize, \c!n=2, \c!nleft=\columnsetparameter\c!n, \c!nright=\columnsetparameter\c!n, \c!width=\v!fit, \c!lines=0, \c!start=0, \c!frame=\v!off, \c!offset=\v!overlay, \c!frame=\v!off, \c!align=, \c!lines=0] \let\page_set_setup_saved\setupcolumnset \newconditional\c_page_set_defining \appendtoks \ifconditional\c_page_set_defining \else \settrue\c_page_set_defining \dorecurse{\columnsetparameter\c!nleft} {\normalexpanded{\definecolumnset[\currentcolumnset:\recurselevel][\currentcolumnset]}}% \dorecurse{\columnsetparameter\c!nright} {\normalexpanded{\definecolumnset[\currentcolumnset:\recurselevel][\currentcolumnset]}}% \normalexpanded{\page_set_setup_saved[\currentcolumnset:1][\c!distance=\zeropoint]}% \setfalse\c_page_set_defining \fi \to \everydefinecolumnset \unexpanded\def\setupcolumnset {\dotripleargument\page_set_setup} \def\page_set_setup[#1][#2][#3]% {\ifthirdargument \unexpanded\def\page_set_setup_step##1% {\doifelse{##1}\v!each {\dorecurse{\namedcolumnsetparameter{#1}\c!n}{\page_set_setup_step\recurselevel}} {\normalexpanded{\page_set_setup_saved[#1:\recurselevel]}[#3]}}% \processcommalist[#2]\page_set_setup_step \else \page_set_setup_saved[#1][#2]% \fi} \definecolumnset [\s!default] \unexpanded\def\page_set_command_next_page {\page_otr_fill_and_eject_page \relax\ifnum\mofcolumns>\plusone \OTRSETgotocolumn[\v!last]% \ifnum\mofcolumns>\plusone \OTRSETgotocolumn[\v!force]% \fi \fi} \let\page_set_command_next_page_and_inserts\page_set_command_next_page \def\OTRSETgotocolumn {\dosingleempty\doOTRSETgotocolumn} \def\doOTRSETgotoCOLROW#1% |* {\bgroup % really needed \splitstring#1\at*\to\column\and\row \bgroup \ifx\column\empty\else\expanded{\doOTRSETgotoCOLUMN{\column}}\fi \egroup \bgroup \ifx\row \empty\else\expanded{\doOTRSETgotoROW {\row }}\fi \egroup \egroup} \def\doOTRSETgotoCOLUMN#1% {\ifnum\mofcolumns=#1\else \page_otr_fill_and_eject_page \doloop {\ifnum\mofcolumns=#1\relax \exitloop \else \OTRSETdummycolumn \fi}% \fi} \def\doOTRSETgotoROW#1% {\ifnum#1>1 \scratchcounter\zerocount \currenthcell\mofcolumns \currentvcell#1\advance\currentvcell \minusone \dorecurse\currentvcell {\page_set_cell_doifelse\mofcolumns\recurselevel\donothing {\advance\scratchcounter\plusone}} \getnoflines\pagetotal \advance\scratchcounter-\noflines \ifnum\scratchcounter>\zerocount \dorecurse\scratchcounter{\line{\strut}}% \fi \fi \page_set_command_set_vsize} \def\doOTRSETgotocolumn[#1]% yes|force|first|last||* {\processallactionsinset [#1] [ \v!yes=>\OTRSETdummycolumn, \v!no=>,% not supported \v!force=>\OTRSETdummycolumn, \v!first=>\expanded{\doOTRSETgotoCOLUMN{1}}, \v!last=>\expanded{\doOTRSETgotoCOLUMN{\the\nofcolumns}}, \s!default=>\OTRSETdummycolumn, \s!unknown=>\expanded{\doOTRSETgotoCOLROW{\commalistelement}}]} % to be documented and tested, not yet that robust % \def\OTRSETgotocell#1#2% % {\endgraf % \gdef\gotocellcounter{0}% % \doloop % {\ifnum\mofcolumns<#1\relax % \doglobal\increment\gotocellcounter\relax % \ifnum\gotocellcounter>#1\relax % \line{\strut}\crlf % \line{\strut}\crlf % \column % \writestatus{columnset}{quitting goto cell}% % \exitloop % \else % \column % \fi % \else % \exitloop % \fi}% % \ifnum\mofcolumns=#1\relax % \ifnum#2>1 % \scratchcounter\zerocount % \currenthcell\mofcolumns % \currentvcell#2\advance\currentvcell \minusone % \dorecurse\currentvcell % {\page_set_cell_doifelse\mofcolumns\recurselevel\donothing % {\advance\scratchcounter\plusone}} % \getnoflines\pagetotal % \advance\scratchcounter-\noflines % \ifnum\scratchcounter>\zerocount % \dorecurse\scratchcounter{\line{\strut}}% % \fi % \fi % \fi % \page_set_command_set_vsize} \def\OTRSETgotocell#1#2% obsolete: now \column[#1*#2] {\endgraf \doOTRSETgotoCOLUMN{#1}% \doOTRSETgotoROW {#2}} \def\OTRSETdummycolumn {\verticalstrut \vskip-\struttotal \page_otr_fill_and_eject_page} \newcounter\columnsetlevel \let\currentcolumnset\empty \newconditional\OTRSETfinish % never checked \unexpanded\def\startcolumnset {\dodoubleempty\dostartcolumnset} \def\dostartcolumnset[#1][#2]% {\increment\columnsetlevel\relax \global\let\localcolumnmaxcells\!!zerocount \global\setfalse\OTRSETfinish \ifnum\columnsetlevel=\plusone \bgroup \saveinterlinespace \globallet\columnsetpage\!!plusone \def\currentcolumnset{#2}% \insidecolumnstrue % will be different flag in addition \setupoutputroutine[\s!columnset]% \doifelsenothing{#1} {\globallet\OTRSETlist\s!default} {\xdef\OTRSETlist{#1}}% \OTRSETstartnextpage \OTRSETassignwidths \page_set_command_set_hsize \else \bgroup \fi \begingroup} % extra grouping needed ... else weird issue with ungrouped font switch (e.g. \ss) % \setuplayout[grid=yes] \definecolumnset[example] \showgrid % \starttext % \startcolumnset[example] % \input knuth \endgraf \input knuth % \placetable{table}{\framed[width=\makeupwidth,height=4cm]{Hello}} % \input knuth \endgraf \input knuth % \stopcolumnset % \input knuth \endgraf \input knuth % \stoptext \def\OTRSETflushleftovers % new per 13/4/2006 {\page_set_cell_doifelse\plusone\plusone {\bgroup \OTRSETcentergridcells \OTRSETbalancemethod\plusone \OTRSETreducegridbox \global\setbox\OTRfinalpagebox\OTRSETmakegridbox \ht\OTRfinalpagebox\textheight % signals output that there is content \OTRSETdofinaloutput \globallet\OTRSETbalht\zeropoint \egroup} {}} \unexpanded\def\stopcolumnset {\endgraf \endgroup % ends extra grouping \ifnum\columnsetlevel=\plusone \endgraf % needed, else wrong vsize in one par case \global\settrue\OTRSETfinish % no, extra page \pagebreak % (test on pascal toc) \dostopcolumnset \egroup \global\notelimittrue % brrr, untested and fuzzy \page_otr_command_set_vsize \page_otr_command_set_hsize \ifvoid\OTRfinalpagebox\else % probably balanced \ifdim\ht\OTRfinalpagebox<\textheight \snaptogrid[\v!page]\hbox{\box\OTRfinalpagebox}% \else \box\OTRfinalpagebox \fi \fi \global\setfalse\OTRSETfinish \ifconditional\c_page_floats_some_waiting \page_otr_command_set_vsize \pagebreak \page_otr_command_set_vsize \fi \OTRSETflushleftovers \else \egroup \fi \decrement\columnsetlevel\relax} \newconstant\OTRSETbalancemethod \def\dostopcolumnset {%\OTRSETdofinalflushfloats % yes/no \ifcase\OTRSETbalancemethod \OTRSETnobalance \else \OTRSETdobalance \fi} \def\OTRSETdobalance {\OTRSETnobalance} \def\localcolumnmaxcells{0} % currently line represents real line, i.e. on the grid, and % not something noflines (also, watch out for switching from % 2-3 columns on one page with both sets balanced: the % second set does not see the first set % don't loose empty 1page/1column with area (example **) % % \definecolumntextarea[title][x=1,y=4,nx=2,ny=7,state=start] % \setupcolumntextareatext[title][\vtop to 5cm{a\\b\\b\\d}] % % \starttext % \startcolumnset \dorecurse{1}{\input tufte \par} \stopcolumnset % \stoptext % better: \unexpanded\def\definecolumnsetarea {\definecolumntextarea} \unexpanded\def\setupcolumnsetarea {\setupcolumntextarea} \unexpanded\def\setupcolumnsetareatext{\setupcolumntextareatext} % so this will be changed \def\OTRSETnobalance {\iflastcolumnfootnotes % testen ! optie % inhibit flush of floats ! % todo: nothing if no footnotes, else empty page \dostepwiserecurse\mofcolumns\nofcolumns\plusone {\vskip-\struttotal\verticalstrut\page_otr_fill_and_eject_page}% \else \ifnum\mofcolumns>\plusone \donetrue \else\ifdim\pagetotal>\zeropoint % too dangerous, we loose data \donetrue \else \donefalse \fi\fi \ifdone \ifnum\mofcolumns=\nofcolumns \OTRSETflushfinalfootnotes \else % probably todo \fi \page_otr_fill_and_eject_page % brr, may result in empty page after nicely fit text % or if left, then lost of first column only text \ifnum\mofcolumns>\plusone \OTRSETdofinalflush \OTRSETdofinaloutput \fi \fi \fi} \def\OTRSETstartnextpage {\doifsomething\OTRSETlist {\getfromcommacommand[\OTRSETlist][1]% \global\let\OTRSETidentifier\commalistelement \xdef\currentcolumnset{\commalistelement}% \checkcolumnsetparent \let\newcommalistelement\empty \doglobal\replaceincommalist\OTRSETlist1% \OTRSETrestart}} \def\OTRSETrestart % weed {\OTRSETinitializefeatures \OTRSETflushpreposttext \OTRSETinitializecolumns \OTRSETcheckinsert \OTRSETcheckgrid \page_set_command_set_vsize \page_set_command_set_hsize % or local ? \OTRSETsetplaceholders \OTRSEThandlepreposttext \initializecolumntextareas % name ! \OTRSETcheckstartcells \page_set_command_set_vsize} \def\OTRSETcheckstartcells {\dorecurse\nofcolumns {\bgroup \mofcolumns\recurselevel \OTRSETsetcorrectnofcells\currentcolumnstartcell \advance\scratchcounter \minusone \dorecurse\scratchcounter {\page_set_cell_doifelse\mofcolumns\recurselevel \donothing{\page_set_cell_set\mofcolumns\recurselevel\copy\placeholderboxe}}% \egroup}} \unexpanded\def\page_set_command_routine {\dontcomplain % new, get rid of overfull message (to be sorted out) \doloop {\OTRSETnaturalflush %\OTRSETstartnextpage % no \page_set_command_flush_floats \OTRSETcheckfreelines \ifsomefreecolumncells \exitloop \else % flush page and get rid of more floats if present \fi}% \OTRSETchecksidefloat} \def\OTRSETsetcolumnmaxcells {\getrawnoflines\textheight\xdef\columnmaxcells{\the\noflines}} \def\OTRSETinitializefeatures {% number of lines % new: raw \OTRSETsetcolumnmaxcells % direction \doifelse{\columnsetparameter\c!direction}\v!right {\columndirection\zerocount} {\columndirection\plusone}% % balancing \OTRSETbalancemethod\zerocount \processaction [\columnsetparameter\c!balance] [ \v!yes=>\OTRSETbalancemethod\plusone, \v!top=>\OTRSETbalancemethod\plustwo, \v!bottom=>\OTRSETbalancemethod\plusthree]} % test: % % \definecolumnset[test-1] %[balance=yes] % \definecolumnset[test-2] %[balance=yes] % % \setupcolumnsetlines[test-1][1][1] [4] % \setupcolumnsetlines[test-1][1][2][10] % % \startcolumnset [test-1] \dorecurse {1}{\input tufte \par} \stopcolumnset % \startcolumnset [test-2] \dorecurse {2}{\input ward \par} \stopcolumnset \ifx\lastskipinotr\undefined \newskip\lastskipinotr \fi \installoutputroutine\OTRSETflushpreposttext {\global\setbox\b_page_set_preceding\vbox {\unvbox\normalpagebox \global\lastskipinotr\lastskip}% \ifdim\lastskipinotr>\zeropoint \global\setbox\b_page_set_preceding\hbox {\lower\strutdepth\box\b_page_set_preceding}% \fi \dp\b_page_set_preceding\strutdepth \ifcarryoverfootnotes \else \global\setbox\b_page_set_trailing\vbox{\placebottomnotes}% \fi} \let\precolumnlines \!!zerocount \let\postcolumnlines\!!zerocount \def\OTRSEThandlepreposttext {\ifdim\ht\b_page_set_preceding>\zeropoint % new \getnoflines{\ht\b_page_set_preceding}% \edef\precolumnlines{\the\noflines}% \doOTRSETsetgridcells {\copy\placeholderboxe} \plusone\plusone\nofcolumns\noflines % normal version (single column set) % {\box\b_page_set_preceding}% % compensated for bodyfont change {\hbox {\OTRSETsetcorrectcellht \raise\scratchdimen\box\b_page_set_preceding}}% \else \let\precolumnlines\!!zerocount \fi \ifdim\ht\b_page_set_trailing>\zeropoint % new, otherwise empty bottom line \getnoflines{\ht\b_page_set_trailing}% \edef\postcolumnlines{\the\noflines}% \advance\columnfreecells -\noflines \advance\columnfreecells \plusone \doOTRSETsetgridcells {\copy\placeholderboxe} \plusone\columnfreecells\nofcolumns\noflines {\box\b_page_set_trailing}% \else \let\postcolumnlines\!!zerocount \fi} \def\OTRSETchecksidefloat {} % {\sidefloatoutput} \unexpanded\def\page_set_command_side_float_output {} % nothing, reset anyway \def\OTRSETcheckgrid {\topskip1\topskip \ifforcecolumnsetgrid \widowpenalty\zerocount \clubpenalty\zerocount \brokenpenalty\zerocount \fi} \def\OTRSETcheckinsert {\iflastcolumnfootnotes \ifnum\nofcolumns=\mofcolumns \OTRSETforceinserts \else \OTRSETinhibitinserts \fi \else \OTRSETforceinserts \fi} \def\OTRSETforceinserts {\enablenotes} \def\OTRSETinhibitinserts {\disablenotes} % undocumented goodie \def\definecolumnsethsize#1#2#3#4% will be improved/speed up {\bgroup \def\OTRSETidentifier{#1}% \ifcase\columnsetlevel\relax \mofcolumns\plusone \OTRSETinitializecolumns \OTRSETassignwidths % already done \page_set_command_set_hsize \fi \!!counta#2\!!countb#3\docalculatecolumnsetspan \expandafter\egroup\expandafter\edef\expandafter#4\expandafter{\the\!!widtha}} % interface to footnotes \installcorenamespace{columnsetwidth} \def\OTRSETassignwidths {%\scratchdimen\makeupwidth \freezetextwidth \scratchdimen\textwidth % \scratchcounter\zerocount \dorecurse\nofcolumns {\doifelse{\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!width}\v!fit {\advance\scratchcounter \plusone} {\advance\scratchdimen -\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!width}% \advance\scratchdimen -\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance}% \ifcase\scratchcounter\else \divide\scratchdimen \scratchcounter \fi \global\setfalse\c_page_set_width_set \dorecurse\nofcolumns {\doifelse{\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!width}\v!fit {\dimen0=\scratchdimen} {\global\settrue\c_page_set_width_set \dimen0=\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!width}% \setxvalue{\??columnsetwidth\recurselevel}{\the\dimen0}}} \def\OTRSETlocalwidth#1% {\getvalue{\??columnsetwidth\number#1}} \newbox\placeholderboxa \newbox\placeholderboxb \newbox\placeholderboxc \newbox\placeholderboxd \newbox\placeholderboxe \newbox\placeholderboxf \def\columnplaceholder#1#2% {\hbox {\setbox\scratchbox\hbox to \hsize {\iftracecolumnset \hskip-.5ex% \startcolor[columnset:#2]\vrule\s!width\exheight\s!height.5\exheight\s!depth.5\exheight\stopcolor \fi \hss}% \ifcase#1\relax \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \wd\scratchbox\zeropoint \else \wd\scratchbox\hsize \ht\scratchbox\strutht \dp\scratchbox\strutdp \fi \box\scratchbox}} \definepalet [columnset] [a=cyan,b=green,c=blue,d=red,e=magenta,f=darkgray] \def\OTRSETsetplaceholders {\global\setbox\placeholderboxa\columnplaceholder0a% \global\setbox\placeholderboxb\columnplaceholder0b% \global\setbox\placeholderboxc\columnplaceholder0c% \global\setbox\placeholderboxd\columnplaceholder0d% \global\setbox\placeholderboxe\columnplaceholder0e% \global\setbox\placeholderboxf\columnplaceholder1f} \def\doOTRSETshowstatus {\llap{\tt\tfxx \startcolor[blue](\the\vsize->\number\columnfirstcell\#\number\columnfreecells)\stopcolor \hskip\leftskip}} \installtextracer{OTRSET} % low level \def\enabletextracerOTRSET {\tracecolumnsettrue \let\OTRSETshowstatus\doOTRSETshowstatus} \def\disabletextracerOTRSET{\tracecolumnsetfalse\let\OTRSETshowstatus\relax} \disabletextracerOTRSET % \appendtoks \OTRSETshowstatus \to \everypar % page contents % \def\OTRSETdopagecontents#1#2% takes two args: \box \unvbox \unexpanded\def\page_set_command_package_contents#1#2% \box \unvbox % this one will be redone (checked) {\vbox to \textheight{\forgetall#1#2}} \def\page_set_place_float_page {\def\floatmethod{PAGE}\page_set_place_float_slot} % check \def\page_set_place_float_here {\def\floatmethod{HERE}\page_set_place_float_slot} % check \def\page_set_place_float_else {\def\floatmethod{HERE}\page_set_place_float_slot} % check / not used \def\page_set_place_float_force {\def\floatmethod{FIXD}\page_set_place_float_slot} % check \def\page_set_place_float_top {\def\floatmethod{TOPS}\page_set_place_float_slot} % check \def\page_set_place_float_bottom{\def\floatmethod{BOTS}\page_set_place_float_slot} % check \def\OTRSETflushfloatbox % nog verder doorvoeren en meer info in marge {\box\floatbox} \def\page_set_place_float_slot {\setbox\floatbox\vbox{\page_otr_command_flush_float_box}% \dp\floatbox\strutdp \@EA\uppercasestring\floatmethod\to\floatmethod \OTRSETstoreincolumnslot\floatmethod\floatbox \page_floats_report_total} % kind of new, looks much like OTRONE, but not entirely \newconditional\c_page_set_top_of_insert \unexpanded\def\page_set_command_set_top_insertions {\bgroup \ifconditional\c_page_floats_some_waiting \noffloatinserts\zerocount \let\totaltopinserted\!!zeropoint \OTRSETdodosettopinserts \ifnum\rootfloatparameter\c!nbottom=\zerocount \ifnum\rootfloatparameter\c!nlines>\zerocount \ifdim\totaltopinserted>\zeropoint\relax \dimen0\lineheight \dimen0=\rootfloatparameter\c!nlines\dimen0 \advance\dimen0 \totaltopinserted\relax \ifdim\dimen0>\textheight % \vsize %%%%%%%%% \textheight \showmessage\m!floatblocks8{\rootfloatparameter\c!nlines}% \page_otr_fill_and_eject_page % was triple: vfilll \fi \fi \fi \fi \fi \egroup} \def\OTRSETdodosettopinserts {\ifnum\noffloatinserts<\c_page_floats_n_of_top \page_floats_get \ifdim\d_page_floats_inserted_top=\zeropoint\relax \settrue\c_page_set_top_of_insert \else \setfalse\c_page_set_top_of_insert \fi \setbox\scratchbox\vbox % kan beter ! {\forgetall \ifconditional\c_page_set_top_of_insert %\ifdim\OTRSETtopoffset=\zeropoint % \moveongrid[\v!top] %\fi \else \betweenfloatblanko % inserts can't look back \fi \page_otr_command_flush_float_box \blank[\rootfloatparameter\c!spaceafter]}% \global\advance\d_page_floats_inserted_top \ht\scratchbox\relax \ifdim\d_page_floats_inserted_top>\vsize % was \textheight\relax \OTRSETresavebox\floatbox \noffloatinserts\c_page_floats_n_of_top\relax \global\advance\d_page_floats_inserted_top -\ht\scratchbox \let\OTRSETdodosettopinserts\relax % to be tested \else \xdef\totaltopinserted{\the\d_page_floats_inserted_top}% \insert\namedinsertionnumber\s!topfloat\bgroup \forgetall \box\scratchbox \egroup \ifconditional\c_page_floats_some_waiting \advance\noffloatinserts \plusone \else \noffloatinserts\c_page_floats_n_of_top\relax \fi \page_floats_report_flushed \fi \else \ifconditional\c_page_floats_some_waiting \showmessage\m!floatblocks6{\the\c_page_floats_n_of_top}% \fi \let\OTRSETdodosettopinserts\relax \fi \OTRSETdodosettopinserts} \unexpanded\def\page_set_command_set_bottom_insertions {\bgroup \ifconditional\c_page_floats_some_waiting \noffloatinserts\zerocount \OTRSETdodosetbotinserts \fi \egroup} \def\OTRSETdodosetbotinserts {\ifnum\noffloatinserts<\c_page_floats_n_of_bottom\relax \page_floats_get \global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax \ifdim\d_page_floats_inserted_bottom<\pagegoal\relax \insert\namedinsertionnumber\s!bottomfloat\bgroup \forgetall \blank[\rootfloatparameter\c!spacebefore]% \page_otr_command_flush_float_box \egroup \ifconditional\c_page_floats_some_waiting \advance\noffloatinserts \plusone \else \noffloatinserts\c_page_floats_n_of_bottom \fi \page_floats_report_flushed \else \OTRSETresavebox\floatbox \noffloatinserts\c_page_floats_n_of_bottom\relax \fi \global\settrue\c_page_floats_not_permitted % vgl topfloats s! \else \ifconditional\c_page_floats_some_waiting \showmessage\m!floatblocks7{\the\c_page_floats_n_of_bottom}% \fi \let\OTRSETdodosetbotinserts\relax \fi \OTRSETdodosetbotinserts} \unexpanded\def\page_set_command_flush_top_insertions {\ifvoid\namedinsertionnumber\s!topfloat\else \ifvoid\columntopbox\mofcolumns \columnsettopbox\mofcolumns\box\namedinsertionnumber\s!topfloat \else \columnsettopbox\mofcolumns\vbox % temp, must be better {\forgetall \offinterlineskip \box\columntopbox\mofcolumns \box\namedinsertionnumber\s!topfloat} \fi \fi \global\d_page_floats_inserted_top\zeropoint\relax} % goes away \unexpanded\def\page_set_command_flush_bottom_insertions {\ifvoid\namedinsertionnumber\s!bottomfloat \else \columnsetbotbox\mofcolumns\box\namedinsertionnumber\s!bottomfloat % \else % \columnsetbotbox\mofcolumns\vbox % temp, must be better % {\forgetall % \offinterlineskip % \box\namedinsertionnumber\s!bottomfloat % \box\columnbotbox\mofcolumns} \fi \global\d_page_floats_inserted_bottom\zeropoint\relax} % goes away % set ipv text % left right 1 2 3 +1 +2 +3 \let\columnleftareas \empty \let\columnrightareas\empty % links rechts => odd, even, n, named \definesystemvariable {mt} % MulTicolumn \unexpanded\def\definecolumntextarea {\dotripleempty\dodefinecolumntextarea} \def\dodefinecolumntextarea[#1][#2][#3]% y=0 is mogelijke en handig ! {\ifthirdargument \doifinsetelse{#2}{\v!both,\v!fixed} {\definecolumntextarea[#1][\v!left ][\c!type=#2,#3]% \definecolumntextarea[#1][\v!right][\c!type=#2,#3]} {\doifelse{#2}\v!next {\doifoddpageelse {\definecolumntextarea[#1][\v!right][\c!type=#2,#3]} {\definecolumntextarea[#1][\v!left ][\c!type=#2,#3]}} {\presetlocalframed [\??mt#1#2]% \processaction[#2] % \doglobal voorkomt stack build up [ \v!left=>\doglobal\addtocommalist{#1}\columnleftareas, \v!right=>\doglobal\addtocommalist{#1}\columnrightareas]% \getparameters[\??mt#1#2] [\c!x=1,\c!y=1,\c!nx=1,\c!ny=1,\c!clipoffset=2\lineheight, \c!leftoffset=\zeropoint,\c!rightoffset=\zeropoint, \c!offset=\v!overlay,\c!strut=\v!no,\c!frame=\v!off, \c!type=#2,\c!page=1,\c!state=\v!stop,#3]}}% \else \definecolumntextarea[#1][\v!next][#2]% \fi} \unexpanded\def\setupcolumntextarea {\dotripleempty\dosetupcolumntextarea} \def\dosetupcolumntextarea[#1][#2][#3]% {\ifthirdargument \doifelse{#2}\v!both {\setupcolumntextarea[#1][\v!left ][#3]% \setupcolumntextarea[#1][\v!right][#3]} {\doifelse{#2}\v!next {\doifoddpageelse {\setupcolumntextarea[#1][\v!right][#3]} {\setupcolumntextarea[#1][\v!left][#3]}} {\getparameters[\??mt#1#2][#3]}}% \else \setupcolumntextarea[#1][\v!next][#2]% \fi} \def\docheckcolumnsetareapage#1#2% {\ifnum\getvalue{\??mt#1\c!page}>\plusone \doifelsevalue{\??mt#1\c!type}\v!fixed {\ifnum\columnsetpage=\getvalue{\??mt#1\c!page}\relax \donetrue\else\donefalse \fi} {\ifnum\columnsetpage<\getvalue{\??mt#1\c!page}\relax \donefalse\else\donetrue \fi}% \else \donetrue \fi} \def\initializecolumntextareas {\ifodd\realpageno \doinitializecolumntextareas\columnrightareas\v!right \else \doinitializecolumntextareas\columnleftareas\v!left \fi} \def\doinitializecolumntextareas#1#2% {\def\docommand##1% {\docheckcolumnsetareapage{##1#2}\plusone \ifdone \donefalse \processaction [\getvalue{\??mt##1#2\c!state}] [ \v!start=>\donetrue, \v!repeat=>\donetrue, \s!unknown=>\doperformtest\commalistelement\donetrue\donefalse]% \ifdone\dodoinitializecolumntextareas{##1}{#2}\fi \fi}% \processcommacommand[#1]\docommand} \def\dodoinitializecolumntextareas#1#2% {\doOTRSETsetgridcells {\copy\placeholderboxd} {\getvalue{\??mt#1#2\c!x }}{\getvalue{\??mt#1#2\c!y }} {\getvalue{\??mt#1#2\c!nx}}{\getvalue{\??mt#1#2\c!ny}} {\copy\placeholderboxd}} \unexpanded\def\placecolumntextareas {\ifodd\realpageno \doplacecolumntextareas\columnrightareas\v!right \else \doplacecolumntextareas\columnleftareas\v!left \fi} \def\doplacecolumntextareas#1#2% global ? {\bgroup \forgetall \def\docommand##1% {\docheckcolumnsetareapage{##1#2}\zerocount \ifdone \donefalse \processaction [\getvalue{\??mt##1#2\c!state}] [ \v!start=>\donetrue\doglobal\removefromcommalist{##1}#1, \v!repeat=>\donetrue, \s!unknown=>\doperformtest\commalistelement\donetrue\donefalse]% \ifdone \dodoplacecolumntextareas{##1}{#2}% \else \doglobal\removefromcommalist{##1}#1% \fi \fi}% \processcommacommand[#1]\docommand \egroup} % \page[left] % \definecolumntextarea[intro][left][x=1,y=1,nx=4,ny=20,state=start,background=introlayer] % \setupcolumntextareatext[intro][left][\setups{intro}] % \flushcolumntextareas \def\flushcolumntextareas {\initializecolumntextareas \page_otr_command_set_vsize} % set ? \def\columntextlastbackspace{\backspace} % beware, we have clipping offsets of 2\lineheight by default \def\columntextareaparameter#1% {\csname\??mt\currentcolumntestarea#1\endcsname} \def\dodoplacecolumntextareas#1#2% {\def\currentcolumntestarea{#1#2}% \!!counta\columntextareaparameter\c!x \!!countb\columntextareaparameter\c!nx \docalculatecolumnsetspan \!!heighta\columntextareaparameter\c!ny\lineheight % wrong % \ifnum\columntextareaparameter\c!y=\zerocount % \advance\!!heighta -\lineheight % \advance\!!heighta \topskip % \fi % \advance\!!heighta -\lineheight % option \ifnum\columntextareaparameter\c!y=\plusone \advance\!!heighta -\lineheight \advance\!!heighta \topskip \fi % \setbox\scratchbox\vbox {\donetrue\localframed [\??mt\currentcolumntestarea] [\c!location=,% new (*) \c!width=\!!widtha,\c!height=\!!heighta,\c!lines=] {\columntextareaparameter\empty{}}}% messy \!!counta\columntextareaparameter\c!x \!!countb\columntextareaparameter\c!y \advance\!!countb \columntextareaparameter\c!ny \advance\!!countb \minusone % new (*) \doif{\columntextareaparameter\c!location}\v!depth {\setbox\scratchbox\hbox{\lower\strutdepth\box\scratchbox}% \dp\scratchbox\zeropoint \ht\scratchbox\!!heighta}% % \setbox0\hbox {\ifcase\!!countc \copy\scratchbox % \box \else \clip [ %\c!topoffset=\columntextareaparameter\c!clipoffset,% %\c!bottomoffset=\columntextareaparameter\c!clipoffset,% %\c!leftoffset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!rightoffset=\columntextareaparameter\c!rightoffset,% \c!width=\!!widthb,% \c!height=\!!heighta]% {\copy\scratchbox}% \fi}% \page_set_cell_set\!!counta\!!countb\box0 \ifcase\!!countc\else \advance\!!counta \columntextareaparameter\c!nx \advance\!!counta -\!!countc \advance\!!widtha -\!!widthb \setbox0\hbox % {\hskip-\namedlayoutparameter\v!odd\c!backspace {\hskip-\layoutparameter\c!backspace \clip [ %\c!topoffset=\columntextareaparameter\c!clipoffset,% %\c!bottomoffset=\columntextareaparameter\c!clipoffset,% %\c!rightoffset=\columntextareaparameter\c!clipoffset,% \c!offset=\columntextareaparameter\c!clipoffset,% \c!leftoffset=\columntextareaparameter\c!leftoffset,% \c!width=\!!widtha,% \c!height=\!!heighta,% \c!hoffset=\!!widthb]% {\copy\scratchbox}}% \page_set_cell_set\!!counta\!!countb\box0% \fi} \unexpanded\def\setupcolumntextareatext {\dotripleempty\dosetupcolumntextareatext} \long\def\dosetupcolumntextareatext[#1][#2][#3]% {\ifthirdargument \doifelse{#2}\v!both {\setvalue{\??mt#1\v!left }{#3}% \setvalue{\??mt#1\v!right}{#3}} {\doifelse{#2}\v!next {\doifoddpageelse {\setvalue{\??mt#1\v!right}{#3}}% {\setvalue{\??mt#1\v!left }{#3}}}% {\setvalue{\??mt#1#2}{#3}}}% \else \setupcolumntextareatext[#1][\v!next][{#2}]% \fi} \def\docalculatecolumnsetspan {% \!!counta <= x % \!!countb <= nx % \!!widtha => total width % \!!widthb => left width % \!!countc => left cols \!!widtha\!!countb\textwidth % we assume equal widths \advance\!!countb \!!counta \advance\!!countb \minusone \ifnum\!!countb>\nofcolumns \!!countc\!!countb \advance\!!countc -\nofcolumns \!!countb\nofcolumns \else \!!countc\zerocount \fi \advance\!!counta \plusone \dostepwiserecurse\!!counta\!!countb\plusone {\advance\!!widtha\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance}% \!!widthb\!!widtha \advance\!!widthb -\!!countc\textwidth \ifodd\realpageno \else % tricky, assumes that we keep there \ifcase\!!countc\else % nog niet ok voor enkel/doublesided % \advance\!!widtha \namedlayoutparameter\v!even\c!backspace % \advance\!!widtha \namedlayoutparameter\v!odd \c!backspace % \advance\!!widthb \namedlayoutparameter\v!even\c!backspace \advance\!!widtha \layoutparameter\c!backspace \advance\!!widtha \layoutparameter\c!backspace \advance\!!widthb \layoutparameter\c!backspace \dorecurse\!!countc {\advance\!!widtha\namedcolumnsetparameter{\currentcolumnset:\recurselevel}\c!distance}% \fi \fi} \def\columnsetspanhsize{\textwidth} \def\setcolumnsetspanhsize#1#2% x nx / uses counta/b {\!!counta#1\!!countb#2\docalculatecolumnsetspan \edef\columnsetspanhsize{\the\!!widtha}} \unexpanded\def\page_set_command_set_float_hsize % this helper has to be moved to strc-flt {\hsize % maybe checking optional \ifdim\d_strc_float_temp_width>\makeupwidth \makeupwidth \else \d_strc_float_temp_width \fi} \unexpanded\def\definecolumnsetspan {\dodoubleempty\dodefinecolumnsetspan} \def\dodefinecolumnsetspan[#1][#2]% {%\ifsecondargument \defineframedtext % we can have a parent [cs:#1] [\c!frame=\v!off, \c!before=, \c!after=, \c!offset=\v!overlay, \c!location=\v!left, \c!linecorrection=\v!off, \c!depthcorrection=\v!off, \c!n=2, \c!nlines=0, \c!indenting=, \c!indentnext=\v!yes, \c!default=HERE, \c!alternative=\v!a, #2]% %\else % \definecolumnspan[][#1]% }%\fi} \definecolumnsetspan[\s!default] \unexpanded\def\setupcolumnsetspan {\dodoubleempty\dosetupcolumnsetspan} \def\dosetupcolumnsetspan[#1][#2]% {\ifsecondargument \setupframedtexts[cs:#1][#2]% \else \setupcolumnsetspan[\s!default][#1]% \fi} \unexpanded\def\startcolumnsetspan {\dotripleempty\dostartcolumnsetspan} %%%%%%%%%%%%%%%% TODO \def\dostartcolumnsetspan[#1][#2][#3]% [#3] gobbles space {\endgraf % else rubish output if forgotten \vskip \zeropoint % make sure otr is done, otherwise last line problems \bgroup \forgetall \ifnum\columnsetlevel>\zerocount\else % of course we needed a one-column fall back for tm \columnsetspanhsize\hsize \nofcolumns\plusone \mofcolumns\plusone \fi \setupframedtexts[cs:#1] [\c!width=\columnsetspanhsize, \c!linecorrection=\v!off, \c!depthcorrection=\v!off, #2]% % determine widths \!!countc\namedframedtextparameter{cs:#1}\c!n % \!!countd\numexpr(\nofcolumns-\mofcolumns+\plusone)% \!!countd\nofcolumns % n <= n of columns \ifnum\!!countc>\!!countd \!!countc\!!countd \fi \advance\!!countd -\mofcolumns \advance\!!countd \plusone % n <= n of available columns (alternative a) \doif{\namedframedtextparameter{cs:#1}\c!alternative}\v!a {\ifnum\!!countc>\!!countd \!!countc\!!countd \fi}% % here it all starts \setcolumnsetspanhsize\mofcolumns\!!countc % a/b used \hsize\columnsetspanhsize \setbox\scratchbox\vbox\bgroup \pack_framed_text_start{cs:#1}[\v!none]% geen nils placement % spoils spacing : \vskip-\struttotal\par\verticalstrut\par \ifnum\columnsetlevel>\zerocount \namedframedtextparameter{cs:#1}\c!before \fi \unexpanded\def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}} \def\dostopcolumnsetspan#1% {\par \verticalstrut \kern-2\struttotal \verticalstrut \ifnum\columnsetlevel>\zerocount \doifsomething{\namedframedtextparameter{cs:#1}\c!after} {\namedframedtextparameter{cs:#1}\c!after \kern\zeropoint}% otherwise blanks disappear, better be a switch \else \endgraf \fi \pack_framed_text_stop \egroup \setbox\scratchbox\frozenhbox to \hsize {\dontcomplain \alignedline{\namedframedtextparameter{cs:#1}\c!location}\v!middle{\lower\strutdepth\box\scratchbox}}% \dp\scratchbox\zeropoint % else wrong snap insidefloat % % to be tested first (strange in grid mode) % % \setbox\scratchbox\frozenhbox to \hsize % {\dontcomplain % \alignstrutmode\zerocount % \alignedline{\namedframedtextparameter{cs:#1}\c!plaats}\v!midden % {\box\scratchbox}}% % \ifinsidefloat \box\scratchbox \else\ifnum\columnsetlevel>\zerocount % we only set \columnsetspacing when asked for, else bottom problems % don't change this any more (test naw) \columnslotspacing\namedframedtextparameter{cs:#1}\c!nlines\relax % todo: nboven/onder %\OTRSETstoreincolumnslotHERE\scratchbox \edef\floatmethod{\namedframedtextparameter{cs:#1}\c!default}% \@EA\uppercasestring\floatmethod\to\floatmethod % todo : \v!here -> here enzovoorts \OTRSETstoreincolumnslot\floatmethod\scratchbox \checknextindentation[\namedframedtextparameter{cs:#1}\c!indentnext]% \else % of course we needed a one-column fall back for tm; brrr, the box has now too % much height (try \ruledvbox); don't change this without testing techniek \scratchdimen\ht\scratchbox \advance\scratchdimen-\strutdp \ht\scratchbox\scratchdimen \namedframedtextparameter{cs:#1}\c!before \snaptogrid\vbox{\box\scratchbox}% \namedframedtextparameter{cs:#1}\c!after \fi\fi \egroup \endgraf} % \startcolumnset[two] % \input tufte % \startcolumnsetspan[two][width=20cm,location=middle] \input tufte \stopcolumnsetspan % \startcolumnsetspan[two][default=btlr] \input tufte \stopcolumnsetspan % \input tufte \par % \input tufte \par % \startcolumnsetspan[two] \emptylines[5] \stopcolumnsetspan % \startcolumnsetspan[two] \input tufte \stopcolumnsetspan % \stopcolumnset \unexpanded\def\page_set_command_flush_saved_floats % rather similar to _one_ ut this might change {\global\d_page_floats_inserted_top\zeropoint \global\d_page_floats_inserted_bottom\zeropoint \ifconditional\c_page_floats_flushing \else \page_set_command_set_top_insertions \page_set_command_set_bottom_insertions \ifconditional\c_page_floats_some_waiting \doif{\rootfloatparameter\c!cache}\v!no\page_set_command_flush_floats % could be _otr_ \fi \fi} \defineoutputroutine [\s!columnset] [\s!page_otr_command_routine =\page_set_command_routine, \s!page_otr_command_package_contents =\page_set_command_package_contents, \s!page_otr_command_set_vsize =\page_set_command_set_vsize, % \s!page_otr_command_set_hsize =\page_one_command_set_hsize, % tricky, goes wrong \s!page_otr_command_next_page =\page_set_command_next_page, \s!page_otr_command_next_page_and_inserts =\page_set_command_next_page_and_inserts, \s!page_otr_command_synchronize_hsize =\page_set_command_synchronize_hsize, \s!page_otr_command_set_top_insertions =\page_set_command_set_top_insertions, \s!page_otr_command_set_bottom_insertions =\page_set_command_set_bottom_insertions, \s!page_otr_command_flush_top_insertions =\page_set_command_flush_top_insertions, \s!page_otr_command_flush_bottom_insertions =\page_set_command_flush_bottom_insertions, \s!page_otr_command_set_float_hsize =\page_set_command_set_float_hsize, \s!page_otr_command_check_if_float_fits =\page_set_command_check_if_float_fits, \s!page_otr_command_flush_float_box =\page_set_command_flush_float_box, \s!page_otr_command_synchronize_side_floats =\page_set_command_synchronize_side_floats, \s!page_otr_command_side_float_output =\page_set_command_side_float_output, \s!page_otr_command_flush_floats =\page_set_command_flush_floats, \s!page_otr_command_flush_side_floats =\page_set_command_flush_side_floats, \s!page_otr_command_flush_saved_floats =\page_set_command_flush_saved_floats % \s!page_otr_command_flush_margin_blocks =\page_set_command_flush_margin_blocks, % not used ] \protect \endinput % extreme examples (1) % % \setupfloats[numbering=nocheck] % % \definecolumnset [first] [n=2,start=0] % \definecolumnset [next] [n=2,start=3] % % \setuptexttexts[\vbox to \textheight{\topskipcorrection \hsize\makeupwidth left \hfill right\vfill}] % % \setuphead[chapter][text=empty] % % \starttext % % \startcolumnset[first,next] % \placefigure[btrl]{}{} % \placefigure[tblr]{}{} % \chapter{thuan} \dorecurse{25}{\recurselevel: \input thuan \endgraf} % \stopcolumnset % % \startcolumnset[first,next] % \chapter{thuan} \dorecurse{25}{\input thuan \endgraf\placefigure{}{}} % \stopcolumnset \unprotect % only in columnsets % \def\cornerfigure % {\dotripleempty\docornerfigure} % % \def\docornerfigure[#1][#2][#3]% [layer] [location] [settings] % {\bgroup % \dowithnextbox % {\!!doneafalse % \!!donebfalse % \processallactionsinset % [\v!left,\v!bottom,#2] % [ \v!left=>\!!doneatrue , % \v!right=>\!!doneafalse, % \v!top=>\!!donebtrue , % \v!bottom=>\!!donebfalse]% % \!!widtha\nextboxwd % \if!!donea % % unchecked % \advance\!!widtha-\backspace % \else % % unchecked % \advance\!!widtha-\backspace % \fi % \!!widtha\textwidth % could be an option % \!!heighta\nextboxht % % zou een macro moeten zijn \getnoflayoutlines % \ifnum\layoutparameter\c!lines=\zerocount % \getnoflines\textheight % \else % \noflines\layoutparameter\c!lines % \fi % % % \advance\noflines \plusone % wordt default, instelbaar % \!!heightb\noflines\lineheight\relax % \if!!doneb % boven % % unchecked % \advance\!!heighta-\topspace % \advance\!!heighta-\headerheight % \advance\!!heighta-\headerdistance % \else % onder % % checked % \advance\!!heighta-\paperheight % \advance\!!heighta+\!!heightb % \advance\!!heighta+\topspace % \advance\!!heighta+\headerheight % \advance\!!heighta+\headerdistance % \advance\!!heighta-\footerdistance % \advance\!!heighta-\footerheight % \fi % \getnoflines\!!heighta % \!!heighta\noflines\lineheight\relax % \def\docornerfigure[####1]% % {\expanded{\plaatsfiguur[####1,\v!none]{} % {\noexpand\phantombox[\c!width=\the\!!widtha,\c!height=\the\!!heighta]}}}% % \if!!donea % \if!!doneb % links boven / rb % \setlayer[#1] % [\c!corner={\v!left,\v!top},\c!location=rb,#3] % {\flushnextbox}% % \docornerfigure[tblr]% % \else % links onder / rt % \setlayer[#1] % [\c!corner={\v!left,\v!bottom},\c!location=rt,#3] % {\flushnextbox}% % \docornerfigure[btlr]% % \fi % \else % \if!!doneb % rechts boven / lt % \setlayer[#1] % [\c!corner={\v!right,\v!top},\c!location=lb,#3] % {\flushnextbox}% % \docornerfigure[tbrl]% % \else % rechts onder / lb % \setlayer[#1] % [\c!corner={\v!right,\v!bottom},\c!location=lt,#3] % {\flushnextbox}% % \docornerfigure[btrl]% % \fi % \fi % \egroup} % \vbox} context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-xmp.lua0000644000175000017500000001657312130411274024132 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-xmp'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", comment = "with help from Peter Rolf", } local format, random, char, gsub, concat = string.format, math.random, string.char, string.gsub, table.concat local xmlfillin = xml.fillin local trace_xmp = false trackers.register("backend.xmp", function(v) trace_xmp = v end) local trace_info = false trackers.register("backend.info", function(v) trace_info = v end) local report_xmp = logs.reporter("backend","xmp") local report_info = logs.reporter("backend","info") local backends, lpdf = backends, lpdf local codeinjections = backends.pdf.codeinjections -- normally it is registered local pdfdictionary = lpdf.dictionary local pdfconstant = lpdf.constant local pdfreference = lpdf.reference local pdfflushstreamobject = lpdf.flushstreamobject -- I wonder why this begin end is empty / w (no time now to look into it) local xpacket = [[ %s ]] local mapping = { -- user defined keys (pdfx:) ["ConTeXt.Jobname"] = "rdf:Description/pdfx:ConTeXt.Jobname", ["ConTeXt.Time"] = "rdf:Description/pdfx:ConTeXt.Time", ["ConTeXt.Url"] = "rdf:Description/pdfx:ConTeXt.Url", ["ConTeXt.Version"] = "rdf:Description/pdfx:ConTeXt.Version", ["ID"] = "rdf:Description/pdfx:ID", ["PTEX.Fullbanner"] = "rdf:Description/pdfx:PTEX.Fullbanner", -- Adobe PDF schema ["Keywords"] = "rdf:Description/pdf:Keywords", ["Producer"] = "rdf:Description/pdf:Producer", -- ["Trapped"] = "rdf:Description/pdf:Trapped", -- '/False' in /Info, but 'False' in XMP -- Dublin Core schema ["Author"] = "rdf:Description/dc:creator/rdf:Seq/rdf:li", ["Format"] = "rdf:Description/dc:format", -- optional, but nice to have ["Subject"] = "rdf:Description/dc:description", ["Title"] = "rdf:Description/dc:title/rdf:Alt/rdf:li", -- XMP Basic schema ["CreateDate"] = "rdf:Description/xmp:CreateDate", ["Creator"] = "rdf:Description/xmp:CreatorTool", ["MetadataDate"] = "rdf:Description/xmp:MetadataDate", ["ModifyDate"] = "rdf:Description/xmp:ModifyDate", -- XMP Media Management schema ["DocumentID"] = "rdf:Description/xmpMM:DocumentID", ["InstanceID"] = "rdf:Description/xmpMM:InstanceID", ["RenditionClass"] = "rdf:Description/xmpMM:RenditionClass", -- PDF/X-4 ["VersionID"] = "rdf:Description/xmpMM:VersionID", -- PDF/X-4 -- additional entries -- PDF/X ["GTS_PDFXVersion"] = "rdf:Description/pdfxid:GTS_PDFXVersion", -- optional entries -- all what is visible in the 'document properties --> additional metadata' window -- XMP Rights Management schema (optional) ["Marked"] = "rdf:Description/xmpRights:Marked", -- ["Owner"] = "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li", -- maybe useful (not visible) -- ["UsageTerms"] = "rdf:Description/xmpRights:UsageTerms", -- maybe useful (not visible) ["WebStatement"] = "rdf:Description/xmpRights:WebStatement", -- Photoshop PDF schema (optional) ["AuthorsPosition"] = "rdf:Description/photoshop:AuthorsPosition", ["Copyright"] = "rdf:Description/photoshop:Copyright", ["CaptionWriter"] = "rdf:Description/photoshop:CaptionWriter", } -- maybe some day we will load the xmp file at runtime local xmp, xmpfile, xmpname = nil, nil, "lpdf-pdx.xml" local function setxmpfile(name) if xmp then report_xmp("discarding loaded file %a",xmpfile) xmp = nil end xmpfile = name ~= "" and name end codeinjections.setxmpfile = setxmpfile commands.setxmpfile = setxmpfile local function valid_xmp() if not xmp then -- local xmpfile = xmpfile or resolvers.findfile(xmpname) or "" if xmpfile and xmpfile ~= "" then xmpfile = resolvers.findfile(xmpfile) or "" end if not xmpfile or xmpfile == "" then xmpfile = resolvers.findfile(xmpname) or "" end if xmpfile ~= "" then report_xmp("using file %a",xmpfile) end local xmpdata = (xmpfile ~= "" and io.loaddata(xmpfile)) or "" xmp = xml.convert(xmpdata) end return xmp end function lpdf.addxmpinfo(tag,value,check) local pattern = mapping[tag] if pattern then xmlfillin(xmp or valid_xmp(),pattern,value,check) end end -- redefined local addtoinfo = lpdf.addtoinfo local addxmpinfo = lpdf.addxmpinfo function lpdf.addtoinfo(tag,pdfvalue,strvalue) addtoinfo(tag,pdfvalue) local value = strvalue or gsub(tostring(pdfvalue),"^%((.*)%)$","%1") -- hack if trace_info then report_info("set %a to %a",tag,value) end addxmpinfo(tag,value) end -- for the do-it-yourselvers function lpdf.insertxmpinfo(pattern,whatever,prepend) xml.insert(xmp or valid_xmp(),pattern,whatever,prepend) end function lpdf.injectxmpinfo(pattern,whatever,prepend) xml.inject(xmp or valid_xmp(),pattern,whatever,prepend) end -- flushing local t = { } for i=1,24 do t[i] = random() end local function flushxmpinfo() commands.freezerandomseed(os.clock()) -- hack local t = { } for i=1,24 do t[i] = char(96 + random(26)) end local packetid = concat(t) local documentid = format("uuid:%s",os.uuid()) local instanceid = format("uuid:%s",os.uuid()) local producer = format("LuaTeX-%0.2f.%s",tex.luatexversion/100,tex.luatexrevision) local creator = "LuaTeX + ConTeXt MkIV" local time = lpdf.timestamp() local fullbanner = tex.pdftexbanner -- local fullbanner = gsub(tex.pdftexbanner,"kpse.*","") addxmpinfo("DocumentID", documentid) addxmpinfo("InstanceID", instanceid) addxmpinfo("Producer", producer) addxmpinfo("CreatorTool", creator) addxmpinfo("CreateDate", time) addxmpinfo("ModifyDate", time) addxmpinfo("MetadataDate", time) addxmpinfo("PTEX.Fullbanner", fullbanner) addtoinfo("Producer", producer) addtoinfo("Creator", creator) addtoinfo("CreationDate", time) addtoinfo("ModDate", time) -- addtoinfo("PTEX.Fullbanner", fullbanner) -- no checking done on existence local blob = xml.tostring(xml.first(xmp or valid_xmp(),"/x:xmpmeta")) local md = pdfdictionary { Subtype = pdfconstant("XML"), Type = pdfconstant("Metadata"), } if trace_xmp then report_xmp("data flushed, see log file") logs.pushtarget("logfile") report_xmp("start xmp blob") logs.newline() logs.writer(blob) logs.newline() report_xmp("stop xmp blob") logs.poptarget() end blob = format(xpacket,packetid,blob) if not verbose and tex.pdfcompresslevel > 0 then blob = gsub(blob,">%s+<","><") end local r = pdfflushstreamobject(blob,md,false) -- uncompressed lpdf.addtocatalog("Metadata",pdfreference(r)) commands.defrostrandomseed() -- hack end -- his will be enabled when we can inhibit compression for a stream at the lua end lpdf.registerdocumentfinalizer(flushxmpinfo,1,"metadata") directives.register("backend.verbosexmp", function(v) verbose = v end) context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-grp.lua0000644000175000017500000001737512130411274024117 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-grp'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, gsub = string.format, string.gsub local concat = table.concat local round = math.round local backends, lpdf = backends, lpdf local nodeinjections = backends.pdf.nodeinjections local colors = attributes.colors local basepoints = number.dimenfactors["bp"] local inches = number.dimenfactors["in"] local nodeinjections = backends.pdf.nodeinjections local codeinjections = backends.pdf.codeinjections local registrations = backends.pdf.registrations local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfconstant = lpdf.constant local pdfboolean = lpdf.boolean local pdfreference = lpdf.reference local pdfflushobject = lpdf.flushobject -- can also be done indirectly: -- -- 12 : << /AntiAlias false /ColorSpace 8 0 R /Coords [ 0.0 0.0 1.0 0.0 ] /Domain [ 0.0 1.0 ] /Extend [ true true ] /Function 22 0 R /ShadingType 2 >> -- 22 : << /Bounds [ ] /Domain [ 0.0 1.0 ] /Encode [ 0.0 1.0 ] /FunctionType 3 /Functions [ 31 0 R ] >> -- 31 : << /C0 [ 1.0 0.0 ] /C1 [ 0.0 1.0 ] /Domain [ 0.0 1.0 ] /FunctionType 2 /N 1.0 >> local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,separation) local f = pdfdictionary { FunctionType = 2, Domain = pdfarray(domain), -- domain is actually a string C0 = pdfarray(color_a), C1 = pdfarray(color_b), N = tonumber(n), } separation = separation and registrations.getspotcolorreference(separation) local s = pdfdictionary { ShadingType = stype, ColorSpace = separation and pdfreference(separation) or pdfconstant(colorspace), Function = pdfreference(pdfflushobject(f)), Coords = pdfarray(coordinates), Extend = pdfarray { true, true }, AntiAlias = pdfboolean(true), } lpdf.adddocumentshade(name,pdfreference(pdfflushobject(s))) end function lpdf.circularshade(name,domain,color_a,color_b,n,colorspace,coordinates,separation) shade(3,name,domain,color_a,color_b,n,colorspace,coordinates,separation) end function lpdf.linearshade(name,domain,color_a,color_b,n,colorspace,coordinates,separation) shade(2,name,domain,color_a,color_b,n,colorspace,coordinates,separation) end -- inline bitmaps but xform'd -- -- we could derive the colorspace if we strip the data -- and divide by x*y local template = "q BI %s ID %s > EI Q" local factor = 72/300 function nodeinjections.injectbitmap(t) -- encoding is ascii hex, no checking here local xresolution, yresolution = t.xresolution or 0, t.yresolution or 0 if xresolution == 0 or yresolution == 0 then return -- fatal error end local colorspace = t.colorspace if colorspace ~= "rgb" and colorspace ~= "cmyk" and colorspace ~= "gray" then -- not that efficient but ok local d = gsub(t.data,"[^0-9a-f]","") local b = math.round(#d / (xresolution * yresolution)) if b == 2 then colorspace = "gray" elseif b == 6 then colorspace = "rgb" elseif b == 8 then colorspace = "cmyk" end end colorspace = lpdf.colorspaceconstants[colorspace] if not colorspace then return -- fatal error end local d = pdfdictionary { W = xresolution, H = yresolution, CS = colorspace, BPC = 8, F = pdfconstant("AHx"), --~ CS = nil, --~ BPC = 1, --~ IM = true, } -- for some reasons it only works well if we take a 1bp boundingbox local urx, ury = 1/basepoints, 1/basepoints -- urx = (xresolution/300)/basepoints -- ury = (yresolution/300)/basepoints local width, height = t.width or 0, t.height or 0 if width == 0 and height == 0 then width = factor * xresolution / basepoints height = factor * yresolution / basepoints elseif width == 0 then width = height * xresolution / yresolution elseif height == 0 then height = width * yresolution / xresolution end local image = img.new { stream = format(template,d(),t.data), width = width, height = height, bbox = { 0, 0, urx, ury }, } return img.node(image) end -- general graphic helpers function codeinjections.setfigurealternative(data,figure) local request = data.request local display = request.display if display and display ~= "" then local nested = figures.push { name = display, page = request.page, size = request.size, prefix = request.prefix, cache = request.cache, width = request.width, height = request.height, } figures.identify() local displayfigure = figures.check() if displayfigure then -- figure.aform = true img.immediatewrite(figure) local a = pdfarray { pdfdictionary { Image = pdfreference(figure.objnum), DefaultForPrinting = true, } } local d = pdfdictionary { Alternates = pdfreference(pdfflushobject(a)), } displayfigure.attr = d() figures.pop() return displayfigure, nested else figures.pop() end end end function codeinjections.getpreviewfigure(request) local figure = figures.initialize(request) if not figure then return end figure = figures.identify(figure) if not (figure and figure.status and figure.status.fullname) then return end figure = figures.check(figure) if not (figure and figure.status and figure.status.fullname) then return end local image = figure.status.private if image then img.immediatewrite(image) end return figure end function codeinjections.setfiguremask(data,figure) -- mark local request = data.request local mask = request.mask if mask and mask ~= "" then figures.push { name = mask, page = request.page, size = request.size, prefix = request.prefix, cache = request.cache, width = request.width, height = request.height, } figures.identify() local maskfigure = figures.check() if maskfigure then local image = maskfigure.status.private if image then img.immediatewrite(image) local d = pdfdictionary { Interpolate = false, SMask = pdfreference(image.objnum), } figure.attr = d() end end figures.pop() end end -- temp hack local factor = number.dimenfactors.bp function img.package(image) -- see lpdf-u3d ** local boundingbox = image.bbox local imagetag = "Im" .. image.index local resources = pdfdictionary { ProcSet = pdfarray { pdfconstant("PDF"), pdfconstant("ImageC") }, Resources = pdfdictionary { XObject = pdfdictionary { [imagetag] = pdfreference(image.objnum) } } } local width = boundingbox[3] local height = boundingbox[4] local xform = img.scan { attr = resources(), stream = format("%f 0 0 %f 0 0 cm /%s Do",width,height,imagetag), bbox = { 0, 0, width/factor, height/factor }, } img.immediatewrite(xform) return xform end context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-pfr.mkii0000644000175000017500000002334311754241457024274 0ustar norbertnorbert%D \module %D [ file=enco-pfr, %D version=2000.12.10, % adapted 2005.08.14 to more delayed loading %D title=\CONTEXT\ Encoding Macros, %D subtitle=PDF Resources, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifnum\texengine>\pdftexengine \expandafter \endinput \fi \ifdefined\pdffontresource \else \expandafter \endinput \fi \writestatus{loading}{ConTeXt Encoding Macros / PDF Resources} %D This is an experimental module in which we implement %D font resource inclusion in \PDF. One reason to include %D font resources is that it enables a search engine to %D perform a search (I'm told). This feature ws requested by %D Petr Ferdus from Czech. %D A simple test file may look like this (watch how we first %D load the encoding and then the font; previous font %D definitions are left untouched.) %D %D \starttyping %D % output=pdftex interface=en %D %D \useencoding[pfr] %D \setupbodyfont[csr] %D %D \starttext %D test \`z \'z \bf test \sl test \bs quite funny \`z \page %D test \`z \'z \bf test \sl test \bs quite funny \`z \page %D \stoptext %D \stoptyping %D %D We do our best to include a (often large) font resources %D only once. The current implementation is not that %D general which is also due to the fact that \type %D {\pdffontattr} is expanded instantly and persistent. A %D more versatile (but also slower) approach is to keep track %D of the fonts and either flush the information at shipout %D time, or at the end of the document. %D \macros %D {ifincludepdffontresources} %D %D You can turn of this feature using the following switch. \newif\ifincludepdffontresources \includepdffontresourcestrue \ifx\pdfglyphtounicode\undefined \else \appendtoks \doif\jobsuffix{pdf}{\readfile{pdfr-def.mkii}\donothing\donothing}% \to \everystarttext \fi % somehow we cannot preload this beast; also, it's mk dependent % % \appendtoks % \doifelse{\jobsuffix}{pdf}{\loadmkiifile{pdfr-def.mkii}}% % \to \everystarttext % ugly, this should go to the driver spec-tpd \ifx\pdfgentounicode\undefined \else \ifcase\pdfgentounicode \else \expandafter \expandafter \expandafter \endinput \fi \fi \unprotect % a problem is that there is always an ec vector added even when % we switch to texnansi early; this has to do with the fact that % we need to setup fonts at startup; this a pain when we have % textless documents, so we should have a way around, i.e. an % extension to pdftex where we can tag numbers inside user specs % and attributes. % % currently we need to use immediate so we end up with entries %D The name of the resource is stored in a macro, as is its %D object reference. A resource is only processed once. When %D done, the resource name is erased, and we use this fact to %D prevent redefinition as well as well as reloading. So, a %D macro defined with \type {\pdffontfileresource} can have %D three states: %D %D \startitemize[packed] %D \item undefined: not yet loaded, and not yet included %D \item some value: loaded, but not yet included %D \item empty: loaded, and already included %D \stopitemize \def\pdffontresource {pdfr:\currentencoding} \def\pdffontfileresource{pdff:\pdffontresource} %D A resource is defined in a file prefixed by \type {pdfr-}. %D The following \PDF\ code is composed by Ondrej Koala Vacha (I %D probably mispelled this name). %D %D \starttyping %D \startpdffontresource[il2] %D /CIDInit /ProcSet findresource begin %D 12 dict begin %D begincmap %D /CIDSystemInfo %D << /Registry (Adobe) %D /Ordering (T1UV) %D /Supplement 0 %D >> def %D /CMapName /Adobe-Identity-UCS def %D /CMapType 1 def %D 1 begincodespacerange %D <00> %D endcodespacerange %D %%FontSpecificEncoding %D 191 beginbfrange %D <20> <20> <0020> % space dec: 32 oct:040 hex:20 %D .... .... ...... . ........ .... .. ....... ...... %D <00ff> % dotaccent dec:255 oct:377 hex:ff %D endbfrange %D endcmap %D CMapName currentdict /CMap defineresource pop end %D end %D \stoppdffontresource %D \stoptyping %D %D We don't preload such huge definitions, and process them %D run||time to save memory. Therefore, in the encoding %D vector, we only add an entry like: %D %D \starttyping %D \startencoding [il2] %D \usepdffontresource il2 %D \stopencoding %D \stoptyping %D %D This macro is defined as follows. \def\usepdffontresource #1 % {\doifundefinedelse\pdffontfileresource % okay, undefined, so either {\setxvalue\pdffontfileresource{#1}} % brand new, or not yet loaded {\doifvaluesomething\pdffontfileresource % only if not loaded in which {\setxvalue\pdffontfileresource{#1}}}} % case it's made empty %D Watch how we check for duplicated loading. The resource %D itself, when asked for, is included immediately, after which %D we save its reference. Normally a document will have one %D such a resource. % \long\def\startpdffontresource[#1]#2\stoppdffontresource % {\doif{#1}\currentencoding % {\immediate\pdfobj useobjnum \getvalue{\pdffontresource} stream {#2}}} % alternatively we can use object references % fails when we switch back and forward between dvi/pdf mode % % \long\def\startpdffontresource[#1]#2\stoppdffontresource % {\doif{#1}\currentencoding{\doifdefined\pdffontresource % {\immediate\pdfobj useobjnum \getvalue{\pdffontresource} stream {#2}}}} \long\def\startpdffontresource[#1]#2\stoppdffontresource {\doif{#1}\currentencoding{\doifdefined\pdffontresource {\expanded{\doshipoutpdffontresource{\getvalue{\pdffontresource}}{#2}}}}} \def\doshipoutpdffontresource#1#2% {\ifnum\realpageno<\plustwo \doglobal\appendtoks \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi \to\everyfirstshipout \else \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi \fi} % cleaner but not better: % % \newtoks \collectedpdffontresources % % \def\doshipoutpdffontresource#1#2% % {\doglobal\appendtoks % \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi % \to \collectedpdffontresources} % % \def\dofluspdffontresources % {\the\collectedpdffontresources % \global\collectedpdffontresources\emptytoks} % % \appendtoks \dofluspdffontresources \to \everybeforeshipout %D The reference to such a vector is to be handled at font %D definition time, which is why we hook it into the font %D loading routine. A little bit of indirectness speeds up %D the process when this feature is disabled and keeps the %D macros readable. % \newevery \everyfont \relax \appendtoksonce \includepdffontresource \to \everyfont % \def\includepdffontresource % {\ifincludepdffontresources % \ifx\pdffontattr\undefined % % we're not using (a recent version of) pdftex % \else\ifcase\pdfoutput % % we're not in pdf mode % \else % \doincludepdffontresource % \fi\fi % \fi} \def\includepdffontresource {\ifx\pdfgentounicode\undefined \expandafter\ifx\the\font\nullfont \else \ifx\pdffontattr\undefined % we're not using (a recent version of) pdftex \else\ifcase\pdfoutput % we're not in pdf mode \else \doincludepdffontresource \fi\fi \fi \else\ifcase\pdfgentounicode \ifincludepdffontresources \expandafter\ifx\the\font\nullfont \else \ifx\pdffontattr\undefined % we're not using (a recent version of) pdftex \else\ifcase\pdfoutput % we're not in pdf mode \else \doincludepdffontresource \fi\fi \fi \fi \or \global\let\includepdffontresource\relax % automatic, built in \fi\fi} \def\dododoincludepdffontresource#1% encoding {\bgroup \edef\currentencoding{#1}% \doifvaluesomething\pdffontfileresource {\startreadingfile \ignorelines % just in case \par is redefined; this thing can get called anywhere \readsysfile{pdfr-\getvalue\pdffontfileresource.mkii}\donothing\donothing \stopreadingfile \letgvalue\pdffontfileresource\empty}% \egroup} \def\doincludepdffontresource {\ifcsname\s!ucmap\fontfile\endcsname\else \dodoincludepdffontresource \fi} \def\dodoincludepdffontresource {% does this font has an encoding specified vector \doifsomething\currentencoding % no \ifx {% is there a pdf font encoding resource file defined \ifcsname\pdffontresource\endcsname % (fake) object defined \else\ifcsname\pdffontfileresource\endcsname % is there a resource already included \doifsomething\pdffontfileresource {\pdfobj reserveobjnum {}% \setxvalue\pdffontresource{\the\pdflastobj}% \flushatshipout{\dododoincludepdffontresource{\currentencoding}}}% % \doglobal\appendetoks % \noexpand\dododoincludepdffontresource{\currentencoding}% % \to \everybeforeshipout}% prevent multiple loading \fi\fi \ifcsname\pdffontresource\endcsname \expanded{\pdffontattr\font{/ToUnicode \csname\pdffontresource\endcsname\space0 R}}% % do it only once for each font \letgvalue{\s!ucmap\fontfile}\empty \fi}} %D For the moment, we keep this definition here, if only %D because \type {\usepdffontencoding} is not defined in the %D core. In the end, this will go to \type {enco-*.tex}. %D %D Test: %D %D \starttyping %D \useencoding[pfr] \usetypescript[palatino][ec] \setupbodyfont[palatino] %D %D \starttext %D fi ff ffi %D \stoptext %D \stoptyping \startencoding [il2] \usepdffontresource il2 \stopencoding \startencoding [ec] \usepdffontresource ec \stopencoding \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-71.mkiv0000644000175000017500000001067011754241457024052 0ustar norbertnorbert% engine=luatex %D \module %D [ file=s-pre-71, %D version=2008.08.05, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 71, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I might improve this module so consider it experimental. % \enablemode[numbers] % \enablemode[paper] \usemodule[pre-60,abr-02] \registerctxluafile{s-pre-71}{} \setupinteraction[state=start,click=off] \definepapersize[wide][width=900pt,height=600pt] \setuppapersize[wide][wide] \setuplayout[page] % \setupbodyfont[15pt] \usetypescriptfile[type-hgz] \usetypescript[palatino-informal] \setupbodyfont[palatino-informal,15pt] \setupsorting[logo][style=] \startnotmode[paper] \setupbackgrounds[page][background=color,backgroundcolor=black] \stopnotmode \TransparencyHack \definelayer[page][width=\paperwidth,height=\paperheight] \definecolor[TopicColor-1][r=.3,g=.4,b=.5] \definecolor[TopicColor-2][r=.3,g=.5,b=.4] \definecolor[TopicColor-3][r=.4,g=.3,b=.5] \definecolor[TopicColor-4][r=.4,g=.5,b=.3] \definecolor[TopicColor-5][r=.5,g=.3,b=.4] \definecolor[TopicColor-6][r=.5,g=.4,b=.3] \definecolor[TopicColor-7][r=.35,g=.35,b=.6] \definecolor[TopicColor-8][r=.6,g=.35,b=.35] \definecolor[TopicColor-9][r=.35,g=.6,b=.35] \definecolor[TopicColor-0][t=.5,a=1,s=.5] \definecolor[TopicColor] [s=1] \setupcolors[state=start] \setupcolors[textcolor=TopicColor] \def\StartTopics {\startstandardmakeup \ctxlua{moduledata.steps.reset_locations()} \doifnotmode{paper}{\StartLocalSteps}} \def\StopTopics {\doifnotmode{paper}{\StopLocalSteps} \flushlayer[page] \stopstandardmakeup} \def\StartTopic {\dosingleempty\doStartTopic} \def\doStartTopic[#1]% {\doifnotmode{paper}{\NextStep} \ctxlua{moduledata.steps.next_location("#1")} \startnotmode[paper] \doifnothing{#1} {\ifcase\ctxlua{moduledata.steps.previous_n()}\else \setlayer [page] [preset=\ctxlua{moduledata.steps.previous_location()}] \bgroup \doifnotmode{paper}{\startviewerlayer[\StepLayer]}% \framed [offset=20pt, strut=no, align=normal, frame=off, height=\dimexpr\paperheight/3\relax, width=\dimexpr\paperwidth/3\relax, background=color, backgroundcolor=TopicColor-0] {}% \doifnotmode{paper}{\stopviewerlayer}% \egroup \fi} \stopnotmode \setlayer [page] [preset=\ctxlua{moduledata.steps.current_location()}] \bgroup \doifnotmode{paper}{\startviewerlayer[\StepLayer]}% \framed [offset=20pt, strut=no, align=\expdoifelse{#1}{}{normal}{middle,lohi}, align=\expdoifelse{#1}{}{flushleft,verytolerant}{middle,lohi}, frame=off, height=\dimexpr\paperheight/3\relax, width=\dimexpr\paperwidth/3\relax, background=color, backgroundcolor=TopicColor-\ctxlua{moduledata.steps.current_n()}] \bgroup \ignorespaces} \def\StopTopic {\removeunwantedspaces \egroup \doifnotmode{paper}{\stopviewerlayer}% \egroup \startmode[numbers] \setlayerframed [page] [preset=\ctxlua{moduledata.steps.current_location()}] [height=\dimexpr\paperheight/3\relax, width=\dimexpr\paperwidth/3\relax, frame=off, foregroundstyle=\bfa, align={flushright,low}] {\doifnotmode{paper}{\startviewerlayer[\StepLayer]}% \ctxlua{moduledata.steps.step()}\kern\strutdepth \doifnotmode{paper}{\stopviewerlayer}} \stopmode} \logo [METAPOST] {MetaPost} \definefont[TitleFont][SansBold at 60pt] \definefont[TempFont] [SansBold at 12pt] \let\StartText\starttext \let\StopText \stoptext \continueifinputfile{s-pre-71.mkiv} \starttext \StartTopics \StartTopic[1] A \StopTopic \StartTopic[5] B \StopTopic \StartTopic[9] C \StopTopic \StopTopics \StartTopics \StartTopic A \StopTopic \StartTopic B \StopTopic \StartTopic C \StopTopic \StartTopic D \StopTopic \StartTopic E \StopTopic \StartTopic F \StopTopic \StartTopic G \StopTopic \StartTopic H \StopTopic \StartTopic I \StopTopic \StopTopics \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fo.mkii0000644000175000017500000034472611754241457023447 0ustar norbertnorbert%D \module %D [ file=x-fo, %D version=2004.03.12, % based on earlier experiments %D title=\FOXET, %D subtitle=Formatting Objects, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \showframe % This is a first implementation, maybe I will write another one with mixed % element indifferent vars and something 'when set, act upon it, and forget', % for instance: in each element check if font set, if so, change font and % reset font attributes. I'm not sure if this is wise. % todo: global assignment in order to limit restore % todo: combine mp graphics (see end) saves 30% % todo: using contants and variables (for internal use) % todo: language at more levels % beware: aftergroup vs egroup/endgroup \useXMLfilter[prs,run] \unprotect % syst-new.tex \long\def\unstringed#1% " ' space {\csname\ifcsname @u@s@#1\endcsname @u@s@#1\else\s!empty\fi\endcsname#1} \long\setvalue{@u@s@"}#1#2"{#2} \long\setvalue{@u@s@'}#1#2'{#2} \long\setvalue{@u@s@ }#1#2 {#2} % xtag-ini \def\letXMLpar #1#2{\@EA \let\csname\@@XMLvariable:#1:#2\endcsname} \def\setXMLpar #1#2{\@EA \def\csname\@@XMLvariable:#1:#2\endcsname} \def\setXMLepar#1#2{\@EA\edef\csname\@@XMLvariable:#1:#2\endcsname} \protect %D Most time went into figuring out the specifications, especially %D because there are no examples included. Samples that circulate on the %D web are often border cases and torture test and don't have much to do %D with real live. Another complication lays in the inheritance model: %D some of the attributes are inherited. This also leaves some room for %D interpretation, for instance do values that are used at a certain %D point migrate downwards or not. %D %D The \CONTEXT\ \XML handler can deal with attributes in several ways %D and for this purpose I have played with a few experimental mechanisms %D just to end up with the existing begin/end mechanism combined with %D a recursive attribute resolver which means that one has to implicitly %D ask for an inherited attributes. This approach is probably one of the %D most efficient ways of dealing with formatting objects in \CONTEXT, %D unless of course I start adding rather specific support to the kernel. %D %D This module is rather experimental. More information about its usage %D can be found in the \FOXET\ manual. %D Since we're not dealing with the fine points of typesetting here, we %D can safely ignore \TEX's warnings about overful or underful boxes. \dontcomplain %D We will use fonts that have the characters in the normal (ascii) %D slots. We will also use the stupid verbatim handler. \chardef\XMLtokensreduction = 2 \chardef\XMLcdatamethod = 2 %D For the purpose of testing. \startmode[fo-verbose] \def\writeFOstatus{\writestatus{XML-FO}} \stopmode \startnotmode[fo-verbose] \let\writeFOstatus\gobbleoneargument \stopnotmode %D For the moment we stick to utf-8. \useXMLfilter[utf] %D This will be sorted out later (esp in relation to mathml). \setupbodyfont[pos,10pt] %D There are a couple of predefined colors. Don't ask me why, but %D formatting objects are not a fresh start but a mix of existing %D technologies. Color support is poluted by cascading stylesheets. %D %D Because hexadecimal color specifications are not enabled by %D default, this feature has to be enables by loading the appropriate %D color module. Here we define colors in \RGB\ values because we %D don't want to loose accuracy. \setupcolors[state=start] \setupcolor[hex] \definecolor [black] [s=0] % [h=000000] \definecolor [gray] [s=.5] % [h=808080] \definecolor [silver] [s=.75] % [h=C0C0C0] \definecolor [white] [s=1] % [h=FFFFFF] \definecolor [maroon] [r=.5] % [h=800000] \definecolor [red] [r=1] % [h=FF0000] \definecolor [purple] [r=.5,b=.5] % [h=800080] \definecolor [fuchsia] [r=1,b=1] % [h=FF00FF] \definecolor [green] [g=.5] % [h=008000] \definecolor [lime] [g=1] % [h=00FF00] \definecolor [olive] [r=.5,g=.5] % [h=808000] \definecolor [yellow] [r=1,g=1] % [h=FFFF00] \definecolor [navy] [r=1,g=1] % [h=000080] \definecolor [blue] [b=1] % [h=0000FF] \definecolor [teal] [g=.5,b=.5] % [h=008080] \definecolor [aqua] [g=1,b=1] % [h=00FFFF] %D The layout is rather basic. Of the 25 available areas we %D only use the text area. Maybe some day I will plug in a %D more dedicated page builder. \setuplayout [backspace=0pt, topspace=0pt, header=0pt, footer=0pt, width=middle, height=middle, % marking=on, location=middle] \setuppagenumbering [alternative={doublesided,singlesided}, % sic location=] \setuptolerance [verytolerant,stretch] %D We will position the regions using layers. \definelayer[regions][width=\paperwidth,height=\paperheight] \definelayer[xsl-region-before] \definelayer[xsl-region-after] \definelayer[xsl-region-start] \definelayer[xsl-region-end] \definelayer[xsl-region-body] \setupbackgrounds[page][background=regions] %D We now enter the part of this module where the action takes %D place. As usual we provide some tracing options. \newif\iftracingFO \readsysfile{page-run}\donothing\donothing %D We will organize the attribute definitions in a similar fashion as in %D the specification. Unfortunately there are more sets defined in there %D than are actually used, so the definitions later on will look a bit %D messy. %D %D Quite some attributes can be inherited, which means that they can %D end up in all elements and influence those way down the tree. \defineXMLattributeset [fo:inherited] %D The properties: % \defineXMLattributeset % [fe:tracing] % [tracing=] \defineXMLattributeset [fo:accessibility] [source-document=none, role=none] \defineXMLattributeset [fo:absolute-position] [absolute-position=auto, top=auto, right=auto, bottom=auto, left=auto] % \defineXMLattributeset % [fo:aural] % [azitmuth=, % cue-after=, % cue-before=, % elevation=, % pause-after=, % pause-before=, % pitch=, % pitch-range=, % play-during=, % richness=, % speak=, % speak-header=, % speak-numeral=, % speak-punctuation=, % speech-rate=, % stress=, % voice-family=, % volume=] \defineXMLattributeset [fo:border-padding-background] [background-attachment=scroll, background-color=transparent, background-image=none, background-repeat=repeat, background-position-horizontal=left, background-position-vertical=top, border-color=transparent, border-style=none, border-width=medium, background-position=, border-top=, border-bottom=, border-left=, border-right=, border-before-color=\XMLop{border-color}, border-before-style=\XMLop{border-style}, border-before-width=\XMLop{border-width}, border-after-color=\XMLop{border-color}, border-after-style=\XMLop{border-style}, border-after-width=\XMLop{border-width}, border-start-color=\XMLop{border-color}, border-start-style=\XMLop{border-style}, border-start-width=\XMLop{border-width}, border-end-color=\XMLop{border-color}, border-end-style=\XMLop{border-style}, border-end-width=\XMLop{border-width}, border-top-color=\XMLop{border-before-color}, border-top-style=\XMLop{border-before-style}, border-top-width=\XMLop{border-before-width}, border-bottom-color=\XMLop{border-after-color}, border-bottom-style=\XMLop{border-after-style}, border-bottom-width=\XMLop{border-after-width}, border-left-color=\XMLop{border-start-color}, border-left-style=\XMLop{border-start-style}, border-left-width=\XMLop{border-start-width}, border-right-color=\XMLop{border-end-color}, border-right-style=\XMLop{border-end-style}, border-right-width=\XMLop{border-end-width}, padding=,% 0pt, padding-before=0pt,%\XMLop{padding}, padding-after=0pt,%\XMLop{padding}, padding-start=0pt,%\XMLop{padding}, padding-end=0pt,%\XMLop{padding}, padding-top=\XMLop{padding-before}, padding-bottom=\XMLop{padding-after}, padding-left=\XMLop{padding-start}, padding-right=\XMLop{padding-end}] \extendXMLattributeset [fo:border-padding-background] [fe:background-height=, fe:background-width=] \defineXMLattributeset [fo:font] [] \extendXMLattributeset [fo:inherited] [font=, font-family=,% Times, font-selection-strategy=, font-size=,% 12pt, font-size-adjust=, % 1, font-style=, % normal, font-variant=, % normal, font-weight=] % normal] \defineXMLattributeset [fo:hyphenation] [] \extendXMLattributeset [fo:inherited] [country=, language=, script=, hyphenate=, hyphenation-character=, hyphenation-push-character-count=, hyphenation-remain-character-count=] \defineXMLattributeset [fo:margin-block] [margin=, % 0pt, margin-top=0pt,% \XMLop{margin}, margin-bottom=0pt,% \XMLop{margin}, margin-left=0pt,% \XMLop{margin}, margin-right=0pt,% \XMLop{margin}, space-before=0pt, space-after=0pt, space-before.precedence=, space-before.conditionality=, space-before.minimum=, space-before.optimum=, space-before.maximum=, space-after.precedence=, space-after.conditionality=, space-after.minimum=, space-after.optimum=, space-after.maximum=] \extendXMLattributeset [fo:inherited] [start-indent=, end-indent=] \defineXMLattributeset [fo:margin-inline] [space-start=, space-end=] \defineXMLattributeset [fo:relative-position] [relative-position=, top=auto, right=auto, bottom=auto, left=auto] \defineXMLattributeset [fo:area-alignment] [alignment-adjust=, alignment-baseline=, baseline-shift=, dominant-baseline=] \extendXMLattributeset [fo:inherited] [display-align=, relative-align=] \defineXMLattributeset [fo:area-dimension] [block-progression-dimension=, inline-progression-dimension=, content-height=, content-width=, height=, width=, max-height=, max-width=, min-height=, min-width=, scaling=, scaling-method=] \defineXMLattributeset [fo:block-and-line] [] \extendXMLattributeset [fo:inherited] [hyphenation-keep=, hyphenation-ladder-count=, last-line-end-indent=, line-height=, line-height-shift-adjustment=, line-stacking-strategy=, linefeed-treatment=, white-space-treatment=, text-align=, text-align-last=, text-indent=, white-space-collapse=, wrap-option=] \defineXMLattributeset [fo:character] [character=, suppress-at-line-break=, text-decoration=, text-shadow=, treat-as-word-space=] \extendXMLattributeset [fo:inherited] [letter-spacing=, text-transform=, word-spacing=] \defineXMLattributeset [fo:color] [color-profile-name=, rendering-intent=] \extendXMLattributeset [fo:inherited] [color=] \defineXMLattributeset [fo:float] [clear=, float=] \extendXMLattributeset [fo:inherited] [intrusion-displace=] \defineXMLattributeset [fo:keeps-and-breaks] [break-after=, break-before=, keep-with-next.within-line=, keep-with-next.within-column=, keep-with-next.within-page=, keep-with-previous.within-line=, keep-with-previous.within-column=, keep-with-previous.within-page=] \extendXMLattributeset [fo:inherited] [keep-together.within-line=, keep-together.within-column=, keep-together.within-page=, orphans=, widows=] \defineXMLattributeset [fo:layout] [clip=, overflow= span=] \extendXMLattributeset [fo:inherited] [reference-orientation=] \defineXMLattributeset [fo:leader-and-rule] [] \extendXMLattributeset [fo:inherited] [leader-alignment=, leader-pattern=, leader-pattern-width=, leader-pattern-width=, leader-length=, rule-style=, rule-thickness=] \defineXMLattributeset [fo:dynamic-effects] [active-state=, case-name=, case-title=, destination-placement-offset=, external-destination=, indicate-destination=, internal-destination=, show-destination=, starting-state=, switch-to=, target-presentation-context=, target-processing-context=, target-stylesheet=] \extendXMLattributeset [fo:inherited] [auto-restore=] \defineXMLattributeset [fo:markers] [marker-class-name=, retrieve-class-name=, retrieve-position=, retrieve-boundary=] \defineXMLattributeset [fo:number-to-string] [country=, language=, format=, grouping-separator=, grouping-size=, letter-value=] % \defineXMLattributeset % [fo:pagination-and-layout] % [black-or-not-blank=, % column-count=1, % column-gap=12pt, % extent=, % flow-name=, % force-page-count=, % initial-page-number=, % master-name=, % master-reference=, % maximum-repeats=, % media-usage=, % odd-or-even=, % page-height=, % page-position=, % page-width=, % precedence=, % region-name=] \defineXMLattributeset [fo:table] [border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, column-number=, column-width=, ends-row=, number-columns-repeated=, number-columns-spanned=, number-rows-spanned=, starts-row=, table-layout=, table-omit-footer-at-break=, table-omit-header-at-break=] \extendXMLattributeset [fo:inherited] [border-collapse=, border-separation=, caption-side=, empty-cells=] \defineXMLattributeset [fo:writing-mode] [%text-altitude=, %text-depth=, unicode-bidi=] \extendXMLattributeset % for practical reasons we inherit along the whole chain [fo:inherited] % unless we implement relax skipping [text-altitude=, text-depth=] \extendXMLattributeset [fo:inherited] [direction=, glyph-orientation-horizontal=, glyph-orientation-vertical=, writing-mode=] \defineXMLattributeset [fo:list-block] [] \extendXMLattributeset [fo:inherited] [provisional-label-separation=, provisional-distance-between-starts=] % \starttext % \setuplayout[topspace=1cm,height=middle,header=0pt,footer=0pt] % \setupbodyfont[small,tt] % \expanded{\processcommalist[\XMLattributeset{fo:inherited}]}\endgraf % \stoptext % content-type % id % ref-id % score-spaces % inherited % src % visibility % inherited % z-index % shorthands: % % background % background-position % border % border-bottom % border-left % border-top % border-right % border-style % border-color % border-spacing % inherited % border-width % cue % font % inherited % margin % padding % page-break-after % page-break-before % page-break-inside % inherited % pause % position % size % vertical-align % white-space % inherited %D We will speed up the process of setting up attributes by compiling the %D definitions. Sometimes we need to access attributes explicitly by %D element (for instance when handling regions). We also need to deal %D with nested elements (for instance blocks) or a sequence of similar %D ones, while we may not always want to use grouping. As a result, the %D next series of definitions and macros are quite ugly. The begin|/|end %D is needed in order to comfortably fetch attribute values from %D ancestors. \startXMLcompiling[inherit] %D Element: fo:root %D todo: set defaults here \defineXMLenvironment [fo:root] [\XMLattributeset{fo:inherited}, leader-pattern=spaces, leader-pattern-width=12pt, media-usage=] {\directsetup{fo:root:start}} {\directsetup{fo:root:stop}} \startsetups fo:root:start \starttext \beginXMLelement \startXMLignore \doifsomething{\XMLop{language}}{\mainlanguage[\XMLop{language}]}% todo, everywhere \stopsetups \startsetups fo:root:stop \stopXMLignore \endXMLelement \stoptext \stopsetups %D Element: fo:declarations \defineXMLprocess [fo:declarations] %D Element: fo:color-profile \defineXMLignore [fo:color-profile] [src=, color-profile-name=, rendering-intent=] %D Element: fo:page-sequence % master-name and master-reference are often mixed up in examples \defineXMLenvironment [fo:page-sequence] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:number-to-string}, initial-page-number=auto, master-reference=any, force-page-count=auto] {\beginXMLelement\directsetup{fo:page-sequence:start}} {\directsetup{fo:page-sequence:stop}\endXMLelement} \mapXMLvalue {fo:page-initial} {auto} {\relax} \mapXMLvalue {fo:page-initial} {auto-odd} {\ifodd\pageno \expanded{\setuppagenumber[number=\the\dimexpr(\pageno+1)]}\fi} \mapXMLvalue {fo:page-initial} {auto-even} {\ifodd\pageno\else\expanded{\setuppagenumber[number=\the\dimexpr(\pageno+1)]}\fi} % todo: blokkeer left/right/etc in geval van blank \mapXMLvalue {fo:page-start} {auto} {\page} \mapXMLvalue {fo:page-start} {even} {\page\setuplayout[blank]\page[even]} \mapXMLvalue {fo:page-start} {odd} {\page\setuplayout[blank]\page[odd]} \mapXMLvalue {fo:page-end} {end-on-even} {\page\setuplayout[blank]\page[even]} \mapXMLvalue {fo:page-end} {end-on-odd} {\page\setuplayout[blank]\page[odd]} \mapXMLvalue {fo:page-start} {no-force} {\page} \startsetups fo:page-sequence:start % we're still in the previous page-sequence \XMLval{fo:page-start}{\XMLop{force-page-count}}{\page} \begingroup \directsetup{fe:setup} \iftracingFO \showframe[text] \fi \xdef\SavedPageNumber{\the\realpageno} % now we enter the new page-sequence % todo: check on number \doifXMLvalelse{fo:page-initial}{\XMLop{initial-page-number}} {\XMLval{fo:page-initial}{\XMLop{initial-page-number}}{}} {\doifnot{\XMLop{initial-page-number}}{auto} {\expanded{\setuppagenumber[number=\XMLop{initial-page-number}]}}} \doifsomething{\XMLpar{fo:page-sequence}{master-reference}{}} {\doifelseXMLelement{fo:page-sequence-master:\XMLpar{fo:page-sequence}{master-reference}{}} {%[starting page sequence master: \XMLpar{fo:page-sequence}{master-reference}{}]\endgraf \flushXMLelement{fo:page-sequence-master:\XMLpar{fo:page-sequence}{master-reference}{}}} {%[starting simple page master: \XMLpar{fo:page-sequence}{master-reference}{any}]\endgraf \flushXMLelement{fo:simple-page-master:\XMLpar{fo:page-sequence}{master-reference}{any}}}} \doif{\XMLpar{fo:simple-page-master-do}{fe:option}{}}{fit} {\directsetup{fe:page:option:fit:start}} \doifnot{\XMLpar{fo:region-body}{column-count}{1}}{1} {\directsetup{fo:columns:start}} \stopsetups \startsetups fo:page-sequence:stop \doifnot{\XMLpar{fo:region-body}{column-count}{1}}{1} {\directsetup{fo:columns:stop}} \doif{\XMLpar{fo:simple-page-master-do}{fe:option}{}}{fit} {\directsetup{fe:page:option:fit:stop}} % \XMLval{fo:page-end}{\XMLop{force-page-count}}{\page} \endgroup \ifnum\SavedPageNumber=\realpageno \ifdim\pagetotal<.5\textheight \null \vfill \fi % force a page with only containers \fi \XMLval{fo:page-end}{\XMLpar{fo:page-sequence}{force-page-count}{}}{\page} \endgroup \stopsetups \newdimen\FOcolumngap \startsetups fo:columns:start \FOcolumngap\textwidth \setpercentdimen\FOcolumngap{\XMLpar{fo:region-body}{column-gap}{12pt}} % we need to freeze the lineheight here \expanded{\definecolumnset [fo:set] [n=\XMLpar{fo:region-body}{column-count}{1}, distance=\FOcolumngap]} \expanded{\definecolumnsetspan [fo:set] [n=\XMLpar{fo:region-body}{column-count}{1}]} \directsetup{fo:font:setup} % else problems \directsetup{fo:line-height:setup} % \parseXMLattributes{fo:flow}{line-height='normal'} \startcolumnset[fo:set] % \startcolumns[\XMLpar{fo:region-body}{column-count}{1}] \stopsetups \startsetups fo:columns:stop % \stopcolumns \stopcolumnset \stopsetups %D Element: fo:layout-master-set \defineXMLprocess [fo:layout-master-set] %D Element: fo:page-sequence-master \defineXMLenvironmentsave [fo:page-sequence-master] [\XMLattributeset{fo:inherited}, master-name=any] {} {%[saved page sequence master: \XMLop{master-name}]\endgraf \gsaveXMLdatainelement {fo:page-sequence-master:\XMLop{master-name}} {fo:page-sequence-master-do} {fo:page-sequence-master}} \defineXMLprocess [fo:page-sequence-master-do] [\XMLattributeset{fo:inherited}] %D Element: fo:single-page-master-reference % makeup - one page \defineXMLcommand [fo:single-page-master-reference] [master-reference=any] {\flushXMLelement{fo:simple-page-master:\XMLop{master-reference}}} %D Element: fo:repeatable-page-master-reference \defineXMLcommand [fo:repeatable-page-master-reference] [master-reference=any, maximum-repeats=] {\flushXMLelement{fo:simple-page-master:\XMLop{master-reference}}} %D Element: fo:repeatable-page-master-alternatives \defineXMLprocess [fo:repeatable-page-master-alternatives] [maximum-repeats=] %D Element: fo:conditional-page-master-reference % page-position : first last rest any % odd-or-even : odd even any % blank-or-not-blank : blank not-blank % The page-position default is needed (else possible loops) \defineXMLcommand [fo:conditional-page-master-reference] [master-reference=any, page-position=\XMLpar{fo:conditional-page-master-reference}{master-reference}{any}, blank-or-not-blank=, odd-or-even=] {\flushXMLelement{fo:simple-page-master:\XMLpar{fo:conditional-page-master-reference}{master-reference}{}}} %D Element: fo:simple-page-master % first-page left-page right-page blank-page % default dimensions \defineXMLenvironmentsave [fo:simple-page-master] [master-name=any] {} {%[saved simple page master: \XMLop{master-name}]\endgraf \gsaveXMLdatainelement {fo:simple-page-master:\XMLop{master-name}} {fo:simple-page-master-do} {fo:simple-page-master}} % reference-orientation=0deg, % writing-mode= \defineXMLenvironment [fo:simple-page-master-do] [\XMLattributeset{fo:inherited}, % added \XMLattributeset{fo:margin-block}, page-height=29.7cm, page-width=21cm] {\directsetup{fo:simple-page-master:start}} {\directsetup{fo:simple-page-master:stop}} % not needed any more: \mapXMLvalue {fo:reference-orientation} {0deg} {0} \mapXMLvalue {fo:reference-orientation} {90deg} {90} \mapXMLvalue {fo:reference-orientation} {180deg} {180} \mapXMLvalue {fo:reference-orientation} {270deg} {270} \mapXMLvalue {fo:reference-orientation} {-90deg} {270} \mapXMLvalue {fo:reference-orientation} {-180deg} {180} \mapXMLvalue {fo:reference-orientation} {-270deg} {90} \startsetups fo:simple-page-master:start % nothing \stopsetups % can be low level tex \startsetups fo:simple-page-master:stop \writeFOstatus{defining papersize '\directsetup{fo:layout:kind}'} \expanded {\definepapersize [\directsetup{fo:layout:kind}] [width=\XMLop{page-width}, height=\XMLop{page-height}]} \checkFOpadding {fo:region-body} \checkFOmargin {fo:region-body} \checkFOmargin {fo:simple-page-master-do} \writeFOstatus{defining layout '\directsetup{fo:layout:kind}'} \FOscratchMT\paperheight \setpercentdimen\FOscratchMT{\XMLpar{fo:simple-page-master-do}{margin-top} \zeropoint} \FOscratchMB\paperheight \setpercentdimen\FOscratchMB{\XMLpar{fo:simple-page-master-do}{margin-bottom}\zeropoint} \FOscratchML\paperwidth \setpercentdimen\FOscratchML{\XMLpar{fo:simple-page-master-do}{margin-left} \zeropoint} \FOscratchMR\paperwidth \setpercentdimen\FOscratchMR{\XMLpar{fo:simple-page-master-do}{margin-right} \zeropoint} \FOscratchRB\paperheight \setpercentdimen\FOscratchRB{\XMLpar{fo:region-body}{margin-top} \zeropoint} \FOscratchRA\paperheight \setpercentdimen\FOscratchRA{\XMLpar{fo:region-body}{margin-bottom}\zeropoint} \FOscratchRS\paperwidth \setpercentdimen\FOscratchRS{\XMLpar{fo:region-body}{margin-left} \zeropoint} \FOscratchRE\paperwidth \setpercentdimen\FOscratchRE{\XMLpar{fo:region-body}{margin-right} \zeropoint} \FOscratchPB\paperheight \setpercentdimen\FOscratchPB{\XMLpar{fo:region-body}{padding-top} \zeropoint} \FOscratchPA\paperheight \setpercentdimen\FOscratchPA{\XMLpar{fo:region-body}{padding-bottom}\zeropoint} \FOscratchPS\paperwidth \setpercentdimen\FOscratchPS{\XMLpar{fo:region-body}{padding-left} \zeropoint} \FOscratchPE\paperwidth \setpercentdimen\FOscratchPE{\XMLpar{fo:region-body}{padding-right} \zeropoint} \expanded {\definelayout [\directsetup{fo:layout:kind}] [ page={\directsetup{fo:layout:kind},\XMLval{fo:reference-orientation}{\XMLop{reference-orientation}}{}}, paper=\directsetup{fo:layout:kind}, backspace=\the\dimexpr(\FOscratchML+\FOscratchPS+\FOscratchRS), cutspace=\the\dimexpr(\FOscratchMR+\FOscratchPE+\FOscratchRE), topspace=\the\dimexpr(\FOscratchMT+\FOscratchPB+\FOscratchRB), bottomspace=\the\dimexpr(\FOscratchMB+\FOscratchPA+\FOscratchRA)]} \expanded{\setuplayout[\directsetup{fo:layout:kind}]} % this is a nasty bit of code: this local setup stores some data that % needs to be used later \startexpanded \noexpand \startlocalsetups[layout:\directsetup{fo:layout:kind}] \noexpand \writeFOstatus{processing simple page master '\XMLpar{fo:simple-page-master-do}{master-name}{any}'} \noexpand \resetsetups[fo:simple-page-master:start] \noexpand \resetsetups[fo:simple-page-master:stop] \noexpand \flushXMLelement{fo:simple-page-master:\XMLpar{fo:simple-page-master-do}{master-name}{any}} \noexpand \stoplocalsetups \stopexpanded \stopsetups % \defineXMLcommand[fo:simple-page-master-do-do] % {\writeFOstatus{setting up master \XMLop{master-name} in page body}} %D Element: fo:region-body % display-align=, % reference-orientation=, % writing-mode=, \defineXMLcommand % or process [fo:region-body] [\XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-block}, fe:z-order=above, clip=, column-count=1, column-gap=12pt, overflow=, region-name=] {\directsetup{fo:region-body:process}} \startsetups fo:region-body:process \writeFOstatus{refreshing region-body parameters} \stopsetups % todo: naar realfolio handelen ipv folio \mapXMLvalue {fo:odd-or-even} {odd} {odd} \mapXMLvalue {fo:odd-or-even} {even} {even} \mapXMLvalue {fo:page-position} {any} {rest} % todo \mapXMLvalue {fo:page-position} {first} {current} \mapXMLvalue {fo:page-position} {last} {last} % todo \mapXMLvalue {fo:page-position} {rest} {rest} % todo %mapXMLvalue {fo:blank-or-not-blank} {any} {} % todo %mapXMLvalue {fo:blank-or-not-blank} {not-blank} {} % todo %mapXMLvalue {fo:blank-or-not-blank} {blank} {} % todo % check this one esp default value \startsetups fo:layout:kind \XMLpav {fo:odd-or-even} {fo:conditional-page-master-reference} {odd-or-even} {\XMLpav {fo:page-position} {fo:conditional-page-master-reference} {page-position} {\XMLpar{fo:page-sequence-master}{master-reference}{any}}} \stopsetups % common border things % clip % display-align % extent % overflow % precedence % region-name % reference-orientation % writing-mode %D Element: fo:region-before fo:region-after fo:region-start fo:region-end % border-before-color : | inherit % border-before-style : | inherit % border-before-width.length|conditional : | | inherit % % style: none hidden dotted dashed solid double groove ridge inset outset % width: thin medium thick length \mapXMLvalue {fo:display-align} {auto} {before} % todo: related to relative-align \mapXMLvalue {fo:display-align} {before} {high} \mapXMLvalue {fo:display-align} {after} {low} \mapXMLvalue {fo:display-align} {center} {lohi} % display-align=, % reference-orientation=, % writing-mode=, \defineXMLcommand % will become process when stable [fo:region-before] [\XMLattributeset{fo:border-padding-background}, clip=, extent=, overflow=, precedence=, region-name=] {\directsetup{fo:region-before:process}} \startsetups fo:region-before:process \writeFOstatus{refreshing region-before parameters} \stopsetups \defineXMLprocess [fo:region-after] [\XMLattributeset{fo:border-padding-background}, clip=, extent=, overflow=, precedence=, region-name=] \defineXMLprocess [fo:region-start] [\XMLattributeset{fo:border-padding-background}, clip=, extent=, overflow=, region-name=] \defineXMLprocess [fo:region-end] [\XMLattributeset{fo:border-padding-background}, clip=, extent=, overflow=, region-name=] \mapXMLvalue {fo:border-style} {none} {0} \mapXMLvalue {fo:border-style} {hidden} {1} \mapXMLvalue {fo:border-style} {dotted} {2} \mapXMLvalue {fo:border-style} {dashed} {3} \mapXMLvalue {fo:border-style} {solid} {4} \mapXMLvalue {fo:border-style} {double} {5} \mapXMLvalue {fo:border-style} {groove} {6} \mapXMLvalue {fo:border-style} {ridge} {7} \mapXMLvalue {fo:border-style} {inset} {8} \mapXMLvalue {fo:border-style} {outset} {9} \mapXMLvalue {fo:border-width} {thin} {.25pt} \mapXMLvalue {fo:border-width} {medium} {.5pt} \mapXMLvalue {fo:border-width} {thick} {1pt} \startsetups fo:regions:check \startprocesscommalist[body,before,after,start,end] \checkFOborder{fo:region-\currentcommalistitem}{bottom} \checkFOborder{fo:region-\currentcommalistitem}{top} \checkFOborder{fo:region-\currentcommalistitem}{left} \checkFOborder{fo:region-\currentcommalistitem}{right} \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-bottom-color}{}] \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-top-color}{}] \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-left-color}{}] \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-right-color}{}] \checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{background-color}{}] \checkFOposition{fo:region-\currentcommalistitem}{background} \checkFOpadding {fo:region-\currentcommalistitem} \checkFOmargin {fo:region-\currentcommalistitem} \stopprocesscommalist \stopsetups %D Element: fo:flow \defineXMLenvironment [fo:flow] [\XMLattributeset{fo:inherited}, flow-name=unknown] {\beginXMLelement\directsetup{fo:flow:start}} {\directsetup{fo:flow:stop}\endXMLelement} \startsetups fo:flow:start \begingroup \stopsetups \startsetups fo:flow:stop \endgroup \stopsetups %D Element: fo:static-content % \beginXMLelement \endXMLelement - maybe save with attributes \defineXMLenvironmentsave [fo:static-content] [flow-name=unknown] {} {\directsetup{fo:static-content:process}} \startsetups fo:static-content:process \gsaveXMLdata{fo:static-content:\XMLop{flow-name}}{fo:static-content} \stopsetups \newdimen\FOscratchML \newdimen\FOscratchMR \newdimen\FOscratchMT \newdimen\FOscratchMB \newdimen\FOscratchPB \newdimen\FOscratchPA \newdimen\FOscratchPS \newdimen\FOscratchPE \newdimen\FOscratchRB \newdimen\FOscratchRA \newdimen\FOscratchRS \newdimen\FOscratchRE \mapXMLvalue {fo:background-repeat} {no-repeat} {0} \mapXMLvalue {fo:background-repeat} {repeat} {1} \mapXMLvalue {fo:background-repeat} {repeat-x} {2} \mapXMLvalue {fo:background-repeat} {repeat-y} {3} \expanded {\mapXMLvalue {fo:background-location} {left} {0\letterpercent}} \expanded {\mapXMLvalue {fo:background-location} {right} {100\letterpercent}} \expanded {\mapXMLvalue {fo:background-location} {top} {0\letterpercent}} \expanded {\mapXMLvalue {fo:background-location} {bottom} {100\letterpercent}} \expanded {\mapXMLvalue {fo:background-location} {center} {50\letterpercent}} \newdimen\FObgpositionH \newdimen\FObgpositionV \def\FObackgroundimage#1#2#3% {\doifnot{\XMLpar{fo:#1}{background-image}{none}}{none} {\setFOimagename{\XMLpar{fo:#1}{background-image}{dummy}}% \FObgpositionH#2% \setpercentdimen\FObgpositionH{\XMLpav {fo:background-location} {fo:#1} {background-position-horizontal} {\XMLpar{fo:#1}{background-position-horizontal}{}}}% \ifpercentdimendone \skip0\zeropoint plus \FObgpositionH \skip2\zeropoint plus \dimexpr(#2-\FObgpositionH)% \else \skip0\FObgpositionH \skip2\zeropoint plus 1fill\relax \fi \FObgpositionV#3% \setpercentdimen\FObgpositionV{\XMLpav {fo:background-location}{fo:#1}{background-position-vertical} {\XMLpar{fo:#1}{background-position-vertical}{}}}% \ifpercentdimendone \skip4\zeropoint plus \FObgpositionV \skip6\zeropoint plus \dimexpr(#3-\FObgpositionV)% \else \skip4\FObgpositionV \skip6\zeropoint plus 1fill\relax \fi \vbox to #3 \bgroup \vskip\skip4\relax \hbox to #2 \bgroup \hskip\skip0\relax \backgroundimage {\XMLpav{fo:background-repeat}{fo:#1}{background-repeat}{}}{#2}{#3}% {\externalfigure [\FOimagename] [width=\XMLpar{fo:#1}{fe:background-width}{}, height=\XMLpar{fo:#1}{fe:background-height}{}]}% \hskip\skip2\relax \egroup \vskip\skip6\relax \egroup}} \def\checkFOclipping#1% {\doifsomething{\XMLpar{#1}{clip}{}} {\analyzefunction{\XMLpar{#1}{clip}{}}% \doif\functionname{rect} {\def\postprocessframebox##1% {\edef\next{\dimen0=\the\wd##1\dimen2=\the\ht##1\dimen4=\the\dp##1}% \setbox##1\hbox {\clip % expanded? [topoffset=-\functionA, bottomoffset=-\functionC, leftoffset=-\functionD, rightoffset=-\functionB] {\box##1}}% \next}}}} \def\clipFOarea#1% {\doifsomething{\XMLpar{#1}{clip}{}}% {\analyzefunction{\XMLpar{#1}{clip}{}}% \doif\functionname{rect} {\setbox\scratchbox\hbox{\foregroundbox}% \edef\next{\dimen0=\the\wd\scratchbox\dimen2=\the\ht\scratchbox\dimen4=\the\dp\scratchbox}% \setbox\scratchbox\hbox {\clip % expanded? [topoffset=-\functionA, bottomoffset=-\functionC, leftoffset=-\functionD, rightoffset=-\functionB] {\box\scratchbox}}% \next \box\scratchbox}}} \defineoverlay [text] [\clipFOarea{fo:region-body}] \setupbackgrounds [text] [background=text] \def\FOregionbuilder#1#2#3#4#5#6% #1=location #2=preset #3=x #4=y #5=width #6=height {\writeFOstatus{building region #1}% \defineoverlay [image] [{\framed [frame=off, orientation=\XMLpav{fo:reference-orientation}{fo:#1}{reference-orientation}{0}, offset=overlay, height=\overlayheight, width=\overlaywidth] {\FObackgroundimage{#1}\hsize\vsize}}]% \setlayerframed [regions] [preset=#2,x=\dimexpr(#3),y=\dimexpr(#4)] [frame=off, offset=overlay,background={#1-graphic,image,xsl-#1}, width=\dimexpr(#5),height=\dimexpr(#6)] {\lrtbbox {\XMLpar{fo:#1}{padding-left}\zeropoint}% {\XMLpar{fo:#1}{padding-right}\zeropoint}% {\XMLpar{fo:#1}{padding-top}\zeropoint}% {\XMLpar{fo:#1}{padding-bottom}\zeropoint}% {\checkFOclipping{fo:#1}% \framed [frame=off, offset=overlay, orientation=\XMLpav{fo:reference-orientation}{fo:#1}{reference-orientation}{0}, align={\XMLpav{fo:display-align}{fo:#1}{display-align}{high},\XMLpav{fo:align-key}{fo:#1}{text-align}{normal}}, width=\hsize,height=\vsize] {\doFObeforeskip{fo:#1}% \flushXMLelement{fo:static-content:\XMLpar{fo:#1}{region-name}{xsl-#1}}}% \doFOafterskip{fo:#1}}}} \startsetups fo:regions:process \directsetup{fo:regions:check} \checkFOmargin{fo:simple-page-master-do} \FOscratchMT\paperheight \setpercentdimen\FOscratchMT{\XMLpar{fo:simple-page-master-do}{margin-top} \zeropoint} \FOscratchMB\paperheight \setpercentdimen\FOscratchMB{\XMLpar{fo:simple-page-master-do}{margin-bottom}\zeropoint} \FOscratchML\paperwidth \setpercentdimen\FOscratchML{\XMLpar{fo:simple-page-master-do}{margin-left} \zeropoint} \FOscratchMR\paperwidth \setpercentdimen\FOscratchMR{\XMLpar{fo:simple-page-master-do}{margin-right} \zeropoint} \doif{\XMLpar{fo:region-body}{fe:z-order}{above}}{below}{\directsetup{fo:regions:process:body}} \FOscratchRB\paperheight \setpercentdimen\FOscratchRB{\XMLpar{fo:region-before}{extent}\zeropoint} \FOscratchRA\paperheight \setpercentdimen\FOscratchRA{\XMLpar{fo:region-after} {extent}\zeropoint} \FOscratchRS\paperwidth \setpercentdimen\FOscratchRS{\XMLpar{fo:region-start} {extent}\zeropoint} \FOscratchRE\paperwidth \setpercentdimen\FOscratchRE{\XMLpar{fo:region-end} {extent}\zeropoint} \doifelse{\XMLpar{fo:region-before}{precedence}{false}}{true} {\doifelse{\XMLpar{fo:region-after}{precedence}{false}}{true} {\directsetup{fo:regions:process:true:true}} {\directsetup{fo:regions:process:true:false}}} {\doifelse{\XMLpar{fo:region-after}{precedence}{false}}{true} {\directsetup{fo:regions:process:false:true}} {\directsetup{fo:regions:process:false:false}}} \doif{\XMLpar{fo:region-body}{fe:z-order}{above}}{above}{\directsetup{fo:regions:process:body}} \stopsetups \newdimen\FOscratchEB \newdimen\FOscratchEA \chardef\FOregionmode\zerocount \startmode[fo-pt] \chardef\FOregionmode\plusone % fotex mode -) \stopmode \startsetups fo:regions:modes \ifcase\FOregionmode \FOscratchEB\zeropoint \FOscratchEA\zeropoint \or \FOscratchEB\paperheight \setpercentdimen\FOscratchEB{\XMLpar{fo:region-before}{extent}\zeropoint} \FOscratchEA\paperheight \setpercentdimen\FOscratchEA{\XMLpar{fo:region-after} {extent}\zeropoint} \else \FOscratchEB\zeropoint \FOscratchEA\zeropoint \fi \stopsetups \startsetups fo:regions:process:body \bgroup \FOscratchRB\paperheight \setpercentdimen\FOscratchRB{\XMLpar{fo:region-body}{margin-top} \zeropoint} \FOscratchRA\paperheight \setpercentdimen\FOscratchRA{\XMLpar{fo:region-body}{margin-bottom}\zeropoint} \FOscratchRS\paperwidth \setpercentdimen\FOscratchRS{\XMLpar{fo:region-body}{margin-left} \zeropoint} \FOscratchRE\paperwidth \setpercentdimen\FOscratchRE{\XMLpar{fo:region-body}{margin-right} \zeropoint} \FOregionbuilder {region-body} {lefttop} {\FOscratchML+\FOscratchRS} {\FOscratchMT+\FOscratchRA} {\paperwidth -\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE} {\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRB-\FOscratchRA} \egroup \stopsetups \startsetups fo:regions:process:true:true \directsetup{fo:regions:modes} \ifdim\FOscratchRB>\zeropoint \FOregionbuilder {region-before}{lefttop} {\FOscratchML}{\FOscratchMT-\FOscratchEB} {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRB} \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder {region-after}{leftbottom} {\FOscratchML}{\FOscratchMB-\FOscratchEA} {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRA} \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder {region-start}{lefttop} {\FOscratchML}{\FOscratchMT+\FOscratchRB} {\FOscratchRS}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRA-\FOscratchRB} \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder {region-end}{righttop} {\FOscratchMR}{\FOscratchMT+\FOscratchRA} {\FOscratchRE}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRA-\FOscratchRB} \fi \stopsetups \startsetups fo:regions:process:false:true \directsetup{fo:regions:modes} \ifdim\FOscratchRB>\zeropoint \FOregionbuilder {region-before}{lefttop} {\FOscratchML+\FOscratchRS}{\FOscratchMT-\FOscratchEB} {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRB} \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder {region-after}{leftbottom} {\FOscratchML}{\FOscratchMB-\FOscratchEA} {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRA} \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder {region-start}{lefttop} {\FOscratchML}{\FOscratchMT} {\FOscratchRS}{\paperheight-\FOscratchMB-\FOscratchRA-\FOscratchRB} \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder {region-end}{righttop} {\FOscratchMR}{\FOscratchMT} {\FOscratchRE}{\paperheight-\FOscratchMB-\FOscratchRA-\FOscratchRB} \fi \stopsetups \startsetups fo:regions:process:true:false \directsetup{fo:regions:modes} \ifdim\FOscratchRB>\zeropoint \FOregionbuilder {region-before}{lefttop} {\FOscratchML}{\FOscratchMT-\FOscratchEB} {\paperwidth-\FOscratchML-\FOscratchMR}{\FOscratchRB} \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder {region-after}{leftbottom} {\FOscratchML+\FOscratchRS}{\FOscratchMB-\FOscratchEA} {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRA} \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder {region-start}{lefttop} {\FOscratchML}{\FOscratchMT+\FOscratchRB} {\FOscratchRS}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRB} \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder {region-end}{righttop} {\FOscratchMR}{\FOscratchMT+\FOscratchRA} {\FOscratchRE}{\paperheight-\FOscratchMT-\FOscratchMB-\FOscratchRB} \fi \stopsetups \startsetups fo:regions:process:false:false \directsetup{fo:regions:modes} \ifdim\FOscratchRB>\zeropoint \FOregionbuilder {region-before}{lefttop} {\FOscratchML+\FOscratchRS}{\FOscratchMT-\FOscratchEB} {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRB} \fi \ifdim\FOscratchRA>\zeropoint \FOregionbuilder {region-after}{leftbottom} {\FOscratchML+\FOscratchRS}{\FOscratchMB-\FOscratchEA} {\paperwidth-\FOscratchML-\FOscratchMR-\FOscratchRS-\FOscratchRE}{\FOscratchRA} \fi \ifdim\FOscratchRS>\zeropoint \FOregionbuilder {region-start}{lefttop} {\FOscratchML}{\FOscratchMT} {\FOscratchRS}{\paperheight-\FOscratchMT-\FOscratchMB} \fi \ifdim\FOscratchRE>\zeropoint \FOregionbuilder {region-end}{righttop} {\FOscratchMR}{\FOscratchMT} {\FOscratchRE}{\paperheight-\FOscratchMT-\FOscratchMB} \fi \stopsetups \startsetups fo:before:each:page \writeFOstatus{setting up layout \currentlayout} \directsetup{layout:\currentlayout} \directsetup{fo:regions:process} \stopsetups \prependtoks \directsetup{fo:before:each:page}% \to \everybeforepagebody %D Element: fo:title % \XMLattributeset{fo:aural}, % color=, % line-height=, \defineXMLignore [fo:title] [\XMLattributeset{fo:inherited},\XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:margin-inline}, visibility=] %D Element: fo:block \defineXMLenvironment [fo:block] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:hyphenation}, \XMLattributeset{fo:margin-block}, \XMLattributeset{fo:relative-position}, \XMLattributeset{fo:keeps-and-breaks}, % text-depth=, % text-altitude=, span=, visibility=] {\beginXMLelement\directsetup{fo:block:start}} {\directsetup{fo:block:stop}\endXMLelement} \startsetups fo:block:start \endgraf \writeFOstatus{fo:block in line \the\inputlineno} \doif{\XMLpar{fo:block}{span}{}}{all}{\ifinsidecolumns \startcolumnsetspan[fo:set] \fi} \begingroup \directsetup{fe:setup} \directsetup{fo:break-and-space:before} \begingroup \setFOreference{fo:block} \increment\FOblocklevel \directsetup{fo:font:setup} % \setupinterlinespace % no, interferes with columnset and lineheight \directsetup{fo:line-height:setup} \directsetup{fo:indent:setup}% hier ? \doifsomething{\XMLop{background-color}} {\checkhexcolor[\XMLop{background-color}] \doifcolorelse{\XMLop{background-color}} \donothing {\setXMLpar{fo:block}{background-color}{}}} \doifsomething{\XMLop{color}} {\checkhexcolor[\XMLop{color}] \doifcolorelse{\XMLop{color}} \donothing {\setXMLpar{fo:block}{color}{}}} \doifsomething{\XMLop{background-color}} {\expanded {\definetextbackground [FOattribute-\FOblocklevel] [location=paragraph, color=\XMLop{color}, style=, before=, after=, background=color, backgroundcolor=\XMLop{background-color}]}} \endgraf \getvalue{startFOattribute-\FOblocklevel} \directsetup{fo:hyphenation:setup} \directsetup{fo:align:setup} \directsetup{fo:margin:setup} \doif{\XMLop{wrap-option}}{no-wrap} {\obeylines} \doif{\XMLop{white-space-collapse}}{false} {\obeyspaces} % todo : remember old one and do like fonts \directsetup{fo:textindent:setup} \stopsetups \startsetups fo:block:stop \endstrut \endgraf \getvalue{stopFOattribute-\FOblocklevel} \endgraf \endgroup \directsetup{fo:break-and-space:after} \endgroup \doif{\XMLpar{fo:block}{span}{}}{all}{\ifinsidecolumns \stopcolumnsetspan \fi} \stopsetups \startsetups fo:textindent:setup \edefXMLinh\xFOtextindent{text-indent} \doifsomething\xFOtextindent {\scratchdimen\hsize \setpercentdimen\scratchdimen\xFOtextindent \expanded{\setupindenting[\the\scratchdimen]}} \stopsetups \indenting[always] % can be zero points % todo: map \mapXMLvalue {fo:break} {column} {\column} \mapXMLvalue {fo:break} {page} {\page} \mapXMLvalue {fo:break} {even-page} {\page[even]} \mapXMLvalue {fo:break} {odd-page} {\page[odd]} % keep-together : either vbox or something \interlinepenalty\maxdimen ? % % nasty interference with accumulated skips \mapXMLvalue {fo:keep-next} {auto} {} \mapXMLvalue {fo:keep-next} {always} {\nobreak} \mapXMLvalue {fo:keep-prev} {auto} {} \mapXMLvalue {fo:keep-prev} {always} {\nobreak} \mapXMLvalue {fo:keep-start} {auto} {} \mapXMLvalue {fo:keep-start} {always} {\interlinepenalty\maxdimen} \mapXMLvalue {fo:keep-stop} {auto} {} \mapXMLvalue {fo:keep-stop} {always} {} \newskip\FOsavedlastskip \startsetups fo:break-and-space:before \XMLval{fo:break}{\XMLop{break-before}}{} \FOsavedlastskip \lastskip \ifdim\FOsavedlastskip>\zeropoint \vskip-\FOsavedlastskip \fi \XMLval{fo:keep-start}{\XMLop{keep-together}}\empty \XMLval{fo:keep-start}{\XMLop{keep-together.within-column}}\empty \XMLval{fo:keep-start}{\XMLop{keep-together.within-page}}\empty \XMLval{fo:keep-prev} {\XMLop{keep-with-previous}}\empty \XMLval{fo:keep-prev} {\XMLop{keep-with-previous.within-column}}\empty \XMLval{fo:keep-prev} {\XMLop{keep-with-previous.within-page}}\empty \ifdim\FOsavedlastskip>\zeropoint \vskip\FOsavedlastskip \fi \doFObeforeskip\currentXMLelement \stopsetups \startsetups fo:break-and-space:after % \doFOafterskip\currentXMLelement \FOsavedlastskip \lastskip \ifdim\FOsavedlastskip>\zeropoint \vskip-\FOsavedlastskip \fi \XMLval{fo:keep-stop}{\XMLop{keep-together}}\empty \XMLval{fo:keep-stop}{\XMLop{keep-together.within-column}}\empty \XMLval{fo:keep-stop}{\XMLop{keep-together.within-page}}\empty \XMLval{fo:keep-next}{\XMLop{keep-with-next}}\empty \XMLval{fo:keep-next}{\XMLop{keep-with-next.within-column}}\empty \XMLval{fo:keep-next}{\XMLop{keep-with-next.within-page}}\empty \ifdim\FOsavedlastskip>\zeropoint \vskip\FOsavedlastskip \fi \doFOafterskip\currentXMLelement \XMLval{fo:break}{\XMLop{break-after}}{} \stopsetups \startsetups fo:space:start \doFOstartspace\currentXMLelement \stopsetups \startsetups fo:space:end \doFOendspace\currentXMLelement \stopsetups \startsetups fo:indent:setup \doifsomething{\XMLop{start-indent}}{\advance\leftskip \XMLop{start-indent}\relax} \doifsomething{\XMLop{end-indent}} {\advance\rightskip\XMLop{end-indent} \relax} % \FOattributeT % \FOattributeR % \FOattributeB % \FOattributeL \stopsetups \mapXMLvalue {fo:align} {center} {\raggedcenter} \mapXMLvalue {fo:align} {left} {\raggedright} \mapXMLvalue {fo:align} {right} {\raggedleft} \mapXMLvalue {fo:align} {begin} {\raggedright} \mapXMLvalue {fo:align} {start} {\raggedright} \mapXMLvalue {fo:align} {end} {\raggedleft} \mapXMLvalue {fo:align-key} {center} {middle} \mapXMLvalue {fo:align-key} {left} {flushleft} \mapXMLvalue {fo:align-key} {right} {flushright} \mapXMLvalue {fo:align-key} {begin} {flushleft} \mapXMLvalue {fo:align-key} {start} {flushleft} \mapXMLvalue {fo:align-key} {end} {flushright} \startsetups fo:align:setup \XMLval{fo:align}{\XMLop{text-align}}{} \stopsetups \startsetups fo:margin:setup \checkFOmargin{fo:block} \FOscratchML \XMLpar{fo:block}{margin-left} \zeropoint \FOscratchMR \XMLpar{fo:block}{margin-right} \zeropoint \FOscratchMT \XMLpar{fo:block}{margin-top} \zeropoint \FOscratchMB \XMLpar{fo:block}{margin-bottom}\zeropoint \advance\leftskip \FOscratchML \advance\rightskip\FOscratchMR \stopsetups % todo: font-stretch % % ultra-condensed % extra-condensed % condensed % semi-condensed % expanded % extra-expanded % ultra-expanded % % wider narrower \mapXMLvalue {fo:font-size} {xx-small} {\dFOfontsize0.58\dFOfontsize} \mapXMLvalue {fo:font-size} {x-small} {\dFOfontsize0.69\dFOfontsize} \mapXMLvalue {fo:font-size} {small} {\dFOfontsize0.83\dFOfontsize} \mapXMLvalue {fo:font-size} {medium} {\relax} \mapXMLvalue {fo:font-size} {large} {\dFOfontsize1.20\dFOfontsize} \mapXMLvalue {fo:font-size} {x-large} {\dFOfontsize1.44\dFOfontsize} \mapXMLvalue {fo:font-size} {xx-large} {\dFOfontsize1.73\dFOfontsize} \mapXMLvalue {fo:font-size} {smaller} {\dFOfontsize0.83\dFOfontsize} \mapXMLvalue {fo:font-size} {larger} {\dFOfontsize1.20\dFOfontsize} \newdimen\dFOfontsize % evt class Times Helvetica \definefontsynonym [FO:Times] [Times-Roman] \definefontsynonym [FO:Times:bold] [Times-Bold] \definefontsynonym [FO:Times:italic] [Times-Italic] \definefontsynonym [FO:Times:bold:italic] [Times-BoldItalic] \definefontsynonym [FO:Times:small-caps] [Times-Roman] \definefontsynonym [FO:Times:bold:small-caps] [Times-Bold] \definefontsynonym [FO:Times:italic:small-caps] [Times-Italic] \definefontsynonym [FO:Times:bold:italic:small-caps] [Times-BoldItalic] \definefontsynonym [FO:Helvetica] [Helvetica] \definefontsynonym [FO:Helvetica:bold] [Helvetica-Bold] \definefontsynonym [FO:Helvetica:italic] [Helvetica-Italic] \definefontsynonym [FO:Helvetica:bold:italic] [Helvetica-BoldItalic] \definefontsynonym [FO:Helvetica:small-caps] [Helvetica] \definefontsynonym [FO:Helvetica:bold:small-caps] [Helvetica-Bold] \definefontsynonym [FO:Helvetica:italic:small-caps] [Helvetica-Italic] \definefontsynonym [FO:Helvetica:bold:italic:small-caps] [Helvetica-BoldItalic] \definefontsynonym [FO:Courier] [Courier] \definefontsynonym [FO:Courier:bold] [Courier-Bold] \definefontsynonym [FO:Courier:italic] [Courier-Oblique] \definefontsynonym [FO:Courier:bold:italic] [Courier-BoldOblique] \definefontsynonym [FO:Courier:small-caps] [Courier] \definefontsynonym [FO:Courier:bold:small-caps] [Courier-Bold] \definefontsynonym [FO:Courier:italic:small-caps] [Courier-Oblique] \definefontsynonym [FO:Courier:bold:italic:small-caps] [Courier-BoldOblique] \definefontsynonym [FO:Symbol] [ZapfDingbats] \definefontsynonym [FO:Computer-Modern-Typewriter] [ComputerModernMono] \definefontsynonym [FO:Computer-Modern-Typewriter:italic] [ComputerModernMono-Slanted] \definefontsynonym [*Times Roman*] [Times] % nasty: no FO prefix \definefontsynonym [*serif*] [Times] \definefontsynonym [*sans-serif*] [Helvetica] \definefontsynonym [*monospace*] [Courier] \definefontsynonym [*cursive*] [Times] \definefontsynonym [*fantasy*] [Helvetica] \definefontsynonym [*Arial*] [Helvetica] \definefontsynonym [*Times Roman*] [Times] \definefontsynonym [*Wingdings*] [ZapfDingbats] % \definefontsynonym [Computer-Modern-Typewriter] [ComputerModernMono] % \definefontsynonym [monospace] [ComputerModernMono] \startsetups fo:fonts:reset \dFOfontsize=\bodyfontsize \def\FOfontsize {10pt}% {12pt} \def\FOfontfamily {Times} \def\FOfontweight {normal} \def\FOfontstyle {normal} \def\FOfontvariant {normal} \def\FOfontsizeadjust{1} \def\FOtextdepth {} \def\FOtextaltitude {} \def\FOlineheight {} \def\FOfontdefinition{} \def\FOfontname {} \stopsetups \def\FOfontdefinition{} \def\FOfontname {} \directsetup{fo:fonts:reset} % test for \FOfontvariant: normal or else \def\setFOfontname {\edef\xFOfontname{FO:\FOfontfamily:\FOfontweight:\FOfontstyle:\FOfontvariant}% %\begingroup\infofont\xFOfontname]\endgroup \doifelsefontsynonym\xFOfontname {\let\FOfontname\xFOfontname} {\edef\xFOfontname{FO:\FOfontfamily:\FOfontweight:\FOfontstyle}% \doifelsefontsynonym\xFOfontname {\let\FOfontname\xFOfontname} {\edef\xFOfontname{FO:\FOfontfamily:\FOfontstyle}% \doifelsefontsynonym\xFOfontname {\let\FOfontname\xFOfontname} {\edef\xFOfontname{FO:\FOfontfamily:\FOfontweight}% \doifelsefontsynonym\xFOfontname {\let\FOfontname\xFOfontname} {\edef\xFOfontname{FO:\FOfontfamily}% \doifelsefontsynonym\xFOfontname {\let\FOfontname\xFOfontname} {}}}}}} % \unprotected \def\doifelseFOfontsynonym#1#2#3#4#5% family weight style variant default % {\edef\FOfontname % {\ifcsname \??ff\fontclass FO:#1:#2:#3:#4\endcsname FO:#1:#2:#3:#4% % \else\ifcsname\??ff\fontclass FO:#1:#2:#3\endcsname FO:#1:#2:#3% % \else\ifcsname\??ff\fontclass FO:#1:#3\endcsname FO:#1:#3% % \else\ifcsname\??ff\fontclass FO:#1:#2\endcsname FO:#1:#2% % \else\ifcsname\??ff\fontclass FO:#1\endcsname FO:#1% % \else #5% % \fi\fi\fi\fi\fi}} \startsetups fo:font:family:check \doifelsefontsynonym{*\FOfontfamily*} {\expandfontsynonym\FOfontfamily{*\FOfontfamily*}} {} \stopsetups \let\FOfont\empty \startsetups fo:font:setup % todo: optimize, define fonts first time and do that global \edefXMLinh\xFOfont {font} \edefXMLinh\xFOfontsize {font-size} \edefXMLinh\xFOfontsizeadjust{font-size-adjust} \edefXMLinh\xFOfontfamily {font-family} \edefXMLinh\xFOfontweight {font-weight} \edefXMLinh\xFOfontstyle {font-style} \edefXMLinh\xFOfontvariant {font-variant} % \edef\xFOfont {\XMLpar{fo}{font}{}} % \edef\xFOfontsize {\XMLpar{fo}{font-size}{}} % \edef\xFOfontsizeadjust{\XMLpar{fo}{font-size-adjust}{}} % \edef\xFOfontfamily {\XMLpar{fo}{font-family}{}} % \edef\xFOfontweight {\XMLpar{fo}{font-weight}{}} % \edef\xFOfontstyle {\XMLpar{fo}{font-style}{}} % \edef\xFOfontvariant {\XMLpar{fo}{font-variant}{}} \donefalse \ifx\xFOfont\empty \else \ifx\xFOfont\relax \else \let\FOfont\xFOfont \checkFOfont\FOfont \fi \fi \ifx\xFOfontsize\empty \else \ifx\xFOfontsize\FOfontsize \else \let\FOfontsize\xFOfontsize \doifXMLvalelse{fo:font-size}\FOfontsize {\XMLval{fo:font-size}\FOfontsize\empty} {\setpercentdimen\dFOfontsize\FOfontsize} \fi \fi \ifx\xFOfontsizeadjust\empty \else \doifelse\xFOfontsizeadjust{none} {\def\FOfontsizeadjust{1}} {\let\FOfontsizeadjust\xFOfontsizeadjust} \fi \ifx\xFOfontfamily\empty \else \ifx\xFOfontfamily\FOfontfamily \else \donetrue \let\FOfontfamily\xFOfontfamily \directsetup{fo:font:family:check} \fi \fi \ifx\xFOfontweight\empty \else \ifx\xFOfontweight\FOfontweight \else \donetrue \let\FOfontweight\xFOfontweight \fi \fi \ifx\xFOfontstyle\empty \else \ifx\xFOfontstyle\FOfontstyle \else \donetrue \let\FOfontstyle\xFOfontstyle \fi \fi \ifx\xFOfontvariant\empty \else \ifx\xFOfontvariant\FOfontvariant \else \donetrue \let\FOfontvariant\xFOfontvariant \fi \fi \ifdone \setFOfontname \ifx\FOfontname\empty % klopt dit \edef\xFOfontdefinition{\purefontname{\font} at \the\dimexpr(\FOfontsizeadjust\dFOfontsize)} % \let\xFOfontdefinition\empty \else \edef\xFOfontdefinition{\FOfontname\space at \the\dimexpr(\FOfontsizeadjust\dFOfontsize)} \fi \else \edef\xFOfontdefinition{\purefontname{\font} at \the\dimexpr(\FOfontsizeadjust\dFOfontsize)} \fi \ifx\xFOfontdefinition\empty \else \ifx\FOfontdefinition\xFOfontdefinition \else \let\FOfontdefinition\xFOfontdefinition \expanded{\definedfont[\FOfontdefinition]} \fi \fi \stopsetups \newdimen\dFOlineheight \newdimen\dFOdepth \newdimen\dFOaltitude \let\FOlineheight \empty \let\FOtextdepth \empty \let\FOtextaltitude\empty \startsetups fo:line-height:setup \edefXMLinh\xFOtextdepth {text-depth} \edefXMLinh\xFOtextaltitude{text-altitude} \edefXMLinh\xFOlineheight {line-height} % \edef\xFOtextdepth {\XMLpar{fo}{text-depth}{}} % \edef\xFOtextaltitude{\XMLpar{fo}{text-altitude}{}} % \edef\xFOlineheight {\XMLpar{fo}{line-height}{}} \ifx\xFOtextdepth\empty \else \ifx\xFOtextdepth\FOtextdepth \else \let\FOtextdepth\xFOtextdepth \doifnot\FOtextdepth{use-font-metrics} {\setstrut \dFOdepth\strutdepth \setpercentdimen\dFOdepth\FOtextdepth \setupinterlinespace[mindepth=\dFOdepth]} \fi \fi \ifx\xFOtextaltitude\empty \else \ifx\xFOtextaltitude\FOtextaltitude \else \let\FOtextaltitude\xFOtextaltitude \doifnot\FOtextaltitude{use-font-metrics} {\setstrut \dFOaltitude\strutheight \advance\dFOaltitude\strutdepth \setpercentdimen\dFOaltitude\FOtextaltitude \setupinterlinespace[minheight=\dFOaltitude]} \fi \fi \ifinsidecolumns \else \ifx\xFOlineheight\empty \else \ifx\xFOlineheight\FOlineheight \else \let\FOlineheight\xFOlineheight \doifelse\FOlineheight{normal} {\dFOlineheight2.8ex \setupinterlinespace[line=\dFOlineheight]} {\doifnot\FOlineheight{use-font-metrics} {\setstrut \dFOlineheight\strutheight \advance\dFOlineheight\strutdepth \setpercentdimen\dFOlineheight\FOlineheight \setupinterlinespace[line=\dFOlineheight]}} \fi \fi \fi \stopsetups \let\orphanpenalty \clubpenalty \let\orphanpenalties\clubpenalties \newcount\FOwidows \FOwidows =2 \newcount\FOorphans \FOorphans=2 \mapXMLvalue {fo:hyphens} {false} {\nohyphens} \mapXMLvalue {fo:hyphens} {true} {\dohyphens} \startsetups fo:hyphenation:setup \edefXMLinh\xFOhyphenate {hyphenate} \edefXMLinh\xFOwidows {widows} \edefXMLinh\xFOorphans {orphans} % \edef\xFOhyphenate {\XMLpar{fo}{hyphenate}{}} % \edef\xFOwidows {\XMLpar{fo}{widows}{}} % \edef\xFOorphans {\XMLpar{fo}{orphans}{}} \ifx\xFOhyphenate\empty \else \XMLval{fo:hyphens}{\xFOhyphenate}\empty \fi \ifx\xFOwidows\empty \else \ifnum\xFOwidows=\FOwidows \else \FOwidows\xFOwidows \setpenalties\widowpenalties\FOwidows\maxdimen \fi \fi \ifx\xFOorphans\empty \else \ifnum\xFOorphans=\FOorphans \else \FOorphans\xFOorphans \setpenalties\clubpenalties\FOorphans\maxdimen \fi \fi % hyphenation-character \stopsetups %D fo:block-container % todo: potential optimization: set fonts and spacing at container level % display-align=, % intrusion-displace=, % reference-orientation=, % writing-mode=, \defineXMLenvironment [fo:block-container] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:absolute-positioning}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-block}, \XMLattributeset{fo:keeps-and-breaks}, block-progression-dimension=, inline-progression-dimension=, clip=, height=, overflow=, span=, width=, z-index=] {\beginXMLelement\directsetup{fo:block-container:start}} {\directsetup{fo:block-container:stop}\endXMLelement} \mapXMLvalue {fo:block-container:start} {absolute} {\directsetup{fo:block-container:start:pos}} \mapXMLvalue {fo:block-container:start} {fixed} {\directsetup{fo:block-container:start:pos}} \mapXMLvalue {fo:block-container:stop} {absolute} {\directsetup{fo:block-container:stop:pos}} \mapXMLvalue {fo:block-container:stop} {fixed} {\directsetup{fo:block-container:stop:pos}} \startsetups fo:block-container:start \XMLval{fo:block-container:start}{\XMLpar{fo:block-container}{absolute-position}{}}{} \setFOreference{fo:block-container} \stopsetups \startsetups fo:block-container:stop \XMLval{fo:block-container:stop}{\XMLpar{fo:block-container}{absolute-position}{}}{} \stopsetups % i need to figure out the details (specs are a bit fuzzy) % replaced, see position \newdimen\FOcontainerW \newdimen\FOcontainerX \newdimen\FOcontainerL \newdimen\FOcontainerR \newdimen\FOcontainerWW \newdimen\FOcontainerH \newdimen\FOcontainerY \newdimen\FOcontainerT \newdimen\FOcontainerB \newdimen\FOcontainerHH \startsetups fo:block-container:start:pos % todo: textwidth -> region dimensions \begingroup % \forgetall \FOcontainerWW\textwidth \FOcontainerHH\textheight \def\FOlayername{\XMLpar{fo:flow}{flow-name}{xsl-region-body}} \iftracingFO \tracelayerstrue \fi \directsetup{fo:preset:layer} \setlayerframed [\XMLpar{fo:flow}{flow-name}{xsl-region-body}] [frame=off, width=\FOcontainerW, height=\FOcontainerH] \bgroup \stopsetups \startsetups fo:block-container:stop:pos \egroup \endgroup \stopsetups %D fo:bidi-override % \XMLattributeset{aural}, % color=, % direction=, % letter-spacing=, % line-height=, % word-spacing=, \defineXMLenvironment [fo:bidi-override] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:font}, \XMLattributeset{fo:relative-position}, score-spaces=, unicode-bidi=] {\beginXMLelement} {\endXMLelement} % todo %D fo:character % \XMLattributeset{fo:aural}, % color=, % glyph-orientation-horizontal=, % glyph-orientation-vertical=, % line-height=, \defineXMLsingular [fo:character] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:hyphenation}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, \XMLattributeset{fo:character}, alignment-adjust=, baseline-shift=, dominant-baseline=, % text-depth=, % text-altitude=, keep-with-next=, keep-with-previous=, score-spaces=, visibility=] {\directsetup{fo:character:process}} \mapXMLvalue {fo:vertical-align} {baseline} {\hbox} \mapXMLvalue {fo:vertical-align} {sub} {\low} \mapXMLvalue {fo:vertical-align} {super} {\high} \mapXMLvalue {fo:vertical-align} {inherit} {\firstofoneargument} \startsetups fo:character:process % border % font % margin % positioning % baseline % color % depth and altitude % keep-with % lineheight \dontleavehmode \begingroup \directsetup{fe:setup} \directsetup{fo:font:setup} \iftracingFO \ruledhbox \else \hbox \fi \bgroup \doifsomethingXMLop{vertical-align} {\doifXMLvalelse{fo:vertical-align}{\XMLop{vertical-align}} {\XMLval{fo:vertical-align}{\XMLop{vertical-align}}{}} {\wordshiftamount\lineheight \setpercentdimen\wordshiftamount{\XMLop{vertical-align}} \shiftedword}} {\directsetup{fo:character:orient}} \egroup \endgroup \stopsetups \startsetups fo:character:orient % \rotate[rotation=-\XMLop{glyph-orientation-horizontal}] \doifsomethingXMLop{glyph-orientation-horizontal} {\rotate[rotation=\XMLval{fo:reference-orientation}{\XMLop{glyph-orientation-horizontal}}{0}]} {\XMLop{character}} \stopsetups %D fo:initial-property-set % \XMLattributeset{fo:aural}, % color=, % letter-spacing=, % line-height=, % text-transform=, % word-spacing=, \defineXMLprocess [fo:initial-property-set] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:relative-position}, score-spaces=, text-decoration=, text-shadow=] %D fo:external-graphic \useMPlibrary[dum] % \XMLattributeset{fo:aural}, % display-align=, % height=, % text-align=, \defineXMLenvironmentsave [fo:external-graphic] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, block-progression-dimension=, clip=, content-height=, content-type=, content-width=, dominant-baseline=, height=, inline-progression-dimension=, keep-with-next=, keep-with-previous=, overflow=, scaling=, scaling-method=, src=dummy, width=] {} {\directsetup{fo:external-graphic:process}} \newdimen\FOgraphicwidth \newdimen\FOgraphicheight \mapXMLvalue {external-graphic:align} {top} {\tbox} \mapXMLvalue {external-graphic:align} {bottom} {\bbox} \mapXMLvalue {external-graphic:align} {center} {\cbox} \startsetups fo:external-graphic:process \doifelsenothing{\XMLop{content-height}} {\FOgraphicheight\zeropoint} {\doifelse{\XMLop{content-height}}{scale-to-fit}% is this official ? {\FOgraphicwidth\zeropoint} {\doifelse{\XMLop{content-height}}{auto} {\FOgraphicheight\zeropoint} {\FOgraphicheight\lineheight \setpercentdimen\FOgraphicheight{\XMLop{content-height}}}}} \doifelsenothing{\XMLop{content-width}} {\FOgraphicwidth\zeropoint} {\doifelse{\XMLop{content-width}}{scale-to-fit}% is this official ? {\FOgraphicwidth\zeropoint} {\doifelse{\XMLop{content-width}}{auto} {\FOgraphicwidth\zeropoint} {\FOgraphicwidth1em \setpercentdimen\FOgraphicwidth {\XMLop{content-width}}}}} % leeg maken vars gaat ook goed, dan een \externalfigure % todo : height/width scale-to-fit: factor=... \setbox\scratchbox\hbox {\setFOimagename{\XMLpar{fo:external-graphic}{src}{dummy}} \ifdim\FOgraphicheight>\zeropoint \ifdim\FOgraphicwidth>\zeropoint \externalfigure[\FOimagename][height=\FOgraphicheight,width=\FOgraphicwidth] \else \externalfigure[\FOimagename][height=\FOgraphicheight] \fi \else \ifdim\FOgraphicwidth>\zeropoint \externalfigure[\FOimagename][width=\FOgraphicwidth] \else \externalfigure[\FOimagename] \fi \fi} \dontleavehmode \XMLval{external-graphic:align}{\XMLop{vertical-align}}{}{\box\scratchbox} \stopsetups %D fo:instream-foreign-object % like external-graphic, only no src % \XMLattributeset{fo:aural}, % display-align=, % line-height=, % text-align=, \defineXMLprocess [fo:instream-foreign-object] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, block-progression-dimension=, clip=, content-height=, content-type=, content-width=, dominant-baseline=, height=, inline-progression-dimension=, keep-with-next=, keep-with-previous=, overflow=, scaling=, scaling-method=, width=] %D Element: fo:inline % \XMLattributeset{fo:aural}, % line-height=, % wrap-option=, % color=, % keep-together=, \defineXMLnestedenvironmentsave [fo:inline] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, block-progression-dimension=, dominant-baseline=, height=, inline-progression-dimension=, keep-with-next=, keep-with-previous=, text-decoration=, visibility=, width=] {\beginXMLelement} {\directsetup{fo:inline:process}\endXMLelement} \defineXMLsingular [fo:inline] {} % baseline-shift: baseline sub super % dimen inherit \chardef\isolatedwordsmode=1 \newdimen\wordshiftamount \def\shiftedword{\raise\wordshiftamount\hbox} \long\def\shiftedwords#1{\processisolatedwords{#1}\shiftedword} \long\def\normalwords #1{\processisolatedwords{#1}\hbox} \long\def\highwords #1{\processisolatedwords{#1}\high} \long\def\lowwords #1{\processisolatedwords{#1}\low} \mapXMLvalue {fo:baseline-shift} {baseline} {\normalwords} \mapXMLvalue {fo:baseline-shift} {sub} {\lowwords} \mapXMLvalue {fo:baseline-shift} {super} {\highwords} \mapXMLvalue {fo:baseline-shift} {inherit} {\firstofoneargument} \startsetups fo:inline:process \directsetup{fo:position:start} \dontleavehmode \doFOreference{fo:inline} \begingroup \directsetup{fe:setup} \directsetup{fo:space:start} \begingroup \directsetup{fo:hyphenation:setup} \directsetup{fo:font:setup} \doifelsenothing{\XMLop{baseline-shift}} {\XMLflushself} {\doifXMLvalelse{fo:baseline-shift}{\XMLop{baseline-shift}} {\XMLval{fo:baseline-shift}{\XMLop{baseline-shift}}{}{\XMLflushself}} {\wordshiftamount\lineheight \setpercentdimen\wordshiftamount{\XMLop{baseline-shift}} \shiftedwords{\XMLflushself}}} \endgroup \directsetup{fo:space:end} \endgroup \directsetup{fo:position:stop} \stopsetups \startsetups fo:position:start \begingroup \directsetup{fo:position:\XMLop{position}:start} \begingroup \stopsetups \startsetups fo:position:stop \endgroup \directsetup{fo:position:\XMLop{position}:stop} \endgroup \stopsetups \startsetups fo:position:static:start \stopsetups \startsetups fo:position:static:stop \stopsetups \startsetups fo:position:fixed:start \FOcontainerWW\paperwidth \FOcontainerHH\paperheight \def\FOlayername{regions} \directsetup{fo:preset:layer} \setlayer[regions]{\vbox \bgroup \setlocalhsize} \stopsetups \startsetups fo:position:fixed:stop \egroup \stopsetups \enableparpositions % slows down but who uses fo anyway ... \startsetups fo:position:absolute:start \setbox\FOpositionbox\hbox\bgroup \stopsetups \startsetups fo:position:absolute:stop \egroup % evt uitstellen tot otr, zodat text/realfolio is solved \edef\FOpartag{p:\number\parposcounter} \edef\FOtxttag{text:\realfolio} \FOcontainerWW\MPplus\FOpartag{1}{0pt} \FOcontainerHH\zeropoint % todo: add anchors to each 'object' \directsetup{fo:preset:position} \setlayer [xsl-region-body] [preset=lefttop, hoffset=\dimexpr(\MPx\FOtxttag-\MPx\FOpartag), voffset=\dimexpr(\MPy\FOtxttag+\MPh\FOtxttag-\MPy\FOpartag-\MPh\FOpartag)] {\iftracingFO \ruledhbox \bgroup \fi \offset [method=fixed, leftoffset=\FOcontainerL, rightoffset=\FOcontainerR, topoffset=\FOcontainerT, bottomoffset=\FOcontainerB] {\box\FOpositionbox} \iftracingFO \egroup \fi} \stopsetups \newbox\FOpositionbox \startsetups fo:position:relative:start \setbox\FOpositionbox\hbox\bgroup \stopsetups \startsetups fo:position:relative:stop \egroup \FOcontainerWW\wd\FOpositionbox \FOcontainerHH\dimexpr(\ht\FOpositionbox+\dp\FOpositionbox) \directsetup{fo:preset:position} \iftracingFO \ruledhbox \bgroup \fi \offset [method=fixed, leftoffset=\FOcontainerL, rightoffset=\FOcontainerR, topoffset=\FOcontainerT, bottomoffset=\FOcontainerB] {\box\FOpositionbox} \iftracingFO \egroup \fi \stopsetups % \startsetups fo:preset:position \FOcontainerW\zeropoint \FOcontainerL\zeropoint \FOcontainerR\zeropoint \FOcontainerH\zeropoint \FOcontainerT\zeropoint \FOcontainerB\zeropoint \doifnot{\XMLop{left}} {auto}{\FOcontainerL\FOcontainerWW\setpercentdimen\FOcontainerL{\XMLop{left}}} \doifnot{\XMLop{right}} {auto}{\FOcontainerR\FOcontainerWW\setpercentdimen\FOcontainerR{\XMLop{right}}} \doifnot{\XMLop{top}} {auto}{\FOcontainerT\FOcontainerHH\setpercentdimen\FOcontainerT{\XMLop{top}}} \doifnot{\XMLop{bottom}}{auto}{\FOcontainerB\FOcontainerHH\setpercentdimen\FOcontainerB{\XMLop{bottom}}} \doifnot{\XMLop{width}} {auto}{\FOcontainerW\FOcontainerWW\setpercentdimen\FOcontainerW{\XMLop{width}}} \doifnot{\XMLop{height}}{auto}{\FOcontainerH\FOcontainerHH\setpercentdimen\FOcontainerH{\XMLop{height}}} \stopsetups \startsetups fo:preset:layer \directsetup{fo:preset:position} \setuplayer [\FOlayername] [width=\FOcontainerWW, height=\FOcontainerHH] \ifzeropt\FOcontainerW \FOcontainerW\dimexpr(\FOcontainerWW-\FOcontainerL-\FOcontainerR) \fi \ifzeropt\FOcontainerH \FOcontainerH\dimexpr(\FOcontainerHH-\FOcontainerT-\FOcontainerB) \fi \ifzeropt\FOcontainerB \ifzeropt\FOcontainerL \setuplayer[\FOlayername][preset=righttop, x=\FOcontainerR,y=\FOcontainerT] \else \setuplayer[\FOlayername][preset=lefttop, x=\FOcontainerL,y=\FOcontainerT] \fi \else \ifzeropt\FOcontainerL \setuplayer[\FOlayername][preset=rightbottom,x=\FOcontainerR,y=\FOcontainerB] \else \setuplayer[\FOlayername][preset=leftbottom, x=\FOcontainerL,y=\FOcontainerB] \fi \fi \stopsetups %D Element: fo:inline-container % display-align=, % line-height=, % reference-orientation=, % writing-mode=, % keep-together=, \defineXMLenvironment [fo:inline-container] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, block-progression-dimension=, clip=, dominant-baseline=, height=, inline-progression-dimension=, keep-with-next=, keep-with-previous=, overflow=, width=] {\beginXMLelement\begingroup} {\endgroup\endXMLelement} %D Element: fo:leader % also a kind of fake fill % \XMLattributeset{fo:aural}, % color=, % line-height=, % word-spacing=, \defineXMLenvironmentsave [fo:leader] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, \XMLattributeset{fo:leader-and-rule}, alignment-adjust=, alignment-baseline=, baseline-shift=, dominant-baseline=, % text-depth=, % text-altitude=, keep-with-next=, keep-with-previous=, letter-spacing=, text-shadow=, visibility=] {\beginXMLelement} {\directsetup{fo:leader:process}\endXMLelement} \mapXMLvalue {fo:leader-pattern} {space} {\hfill} \mapXMLvalue {fo:leader-pattern} {dots} {.} \mapXMLvalue {fo:leader-pattern} {rule} {\hrulefill} \mapXMLvalue {fo:leader-pattern} {use-content} {\XMLflushself} % todo: speed up \startsetups fo:leader:process %tracebackXMLattribute{leader-pattern-width} \strut \leaders %edefXMLinh \FOlepatwd {leader-pattern-width} \hbox to \XMLinh{leader-pattern-width} {\hss\XMLval{fo:leader-pattern}{\XMLinh{leader-pattern}}{\hfill}\hss} \hfill \strut \stopsetups %D Element: fo:pagenumber % \XMLattributeset{fo:aural}, % line-height=, % wrap-option=, % letter-spacing=, % text-transform=, % word-spacing=, \defineXMLsingular [fo:page-number] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, dominant-baseline=, keep-with-next=, keep-with-previous=, score-spaces=, % text-altitude=, text-decoration=, % text-depth=, text-shadow=, visibility=] {\directsetup{fo:page-number:process}} \newcount\FOpnrefcounter \startsetups fo:page-number:process \doifelsenothing{\XMLpar{fo:page-sequence}{format}{}} {\pagenumber} {\ifinotr \globallet\FOpnrefnumber\folio \else \global\advance\FOpnrefcounter\plusone \pagereference[pnref:\the\FOpnrefcounter] \doifreferencefoundelse{pnref:\the\FOpnrefcounter} {\globallet\FOpnrefnumber\currentfolioreference} {\globallet\FOpnrefnumber\folio} \fi \expanded{\handletokens\XMLpar{fo:page-sequence}{format}{}}\with{\handleFOformat{\FOpnrefnumber}}} \stopsetups \defineconversion[1][\numbers] \long\def\handleFOformat#1#2% {\defconvertedargument\ascii{#2}% \doifconversiondefinedelse\ascii{\convertnumber\ascii{#1}}{#2}} %D Element: fo:pagenumber-citation % same as page-number % \XMLattributeset{fo:aural}, % line-height=, % wrap-option=, % letter-spacing=, % text-transform=, % word-spacing=, \defineXMLsingular [fo:page-number-citation] [\XMLattributeset{fo:inherited}, id=, ref-id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:font}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, dominant-baseline=, keep-with-next=, keep-with-previous=, score-spaces=, % text-altitude=, text-decoration=, % text-depth=, text-shadow=, visibility=] {\directsetup{fo:page-number-citation:process}} \startsetups fo:page-number-citation:process \doifreferencefoundelse{\XMLop{ref-id}} {\globallet\FOpnrefnumber\currentfolioreference \globallet\FOpnrefformat\currenttextreference} {\gdef\FOpnrefnumber{?} \gdef\FOpnrefformat{}} \doifelsenothing{\FOpnrefformat} {\FOpnrefnumber} {\expanded{\handletokens\FOpnrefformat}\with{\handleFOformat{\FOpnrefnumber}}} \stopsetups %D Element: fo:table-and-caption % \XMLattributeset{fo:aural}, % text-align=, % caption-side=, % intrusion-displace=, % keep-together=, \defineXMLenvironment [fo:table-and-caption] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-block}, \XMLattributeset{fo:relative-position}, break-after=, break-before=, keep-with-next=, keep-with-previous=] {\beginXMLelement} {\endXMLelement} %D Element: fo:table fo:table-caption fo:table-header fo:table-footer %D to:table-column fo:table-body fo:table-row fo:table-cell % \XMLattributeset{fo:aural}, % border-collapse=, % border-separation=, % intrusion-displace=, % keep-together=, % writing-mode=, \defineXMLenvironment [fo:table] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-block}, \XMLattributeset{fo:relative-position}, block-progression-dimension=, border-after-precedence=, border-before-precedence=, border-start-precedence=, border-end-precedence=, break-after=, break-before=, inline-progression-dimension=, height=, keep-with-next=, keep-with-previous=, table-layout=, table-omit-footer-at-break=, table-omit-header-at-break=, % text-indent=0pt, % yes or no? width=] {\beginXMLelement \bTABLE % [option=stretch] % \newcounter\FOtablecolumn} {\eTABLE \endXMLelement} \newdimen\FOtableW \newdimen\FOtableH \defineXMLsingular [fo:table-column] [\XMLattributeset{fo:inherited}, \XMLattributeset{fo:border-padding-background}, % only background, not the rest, make subset border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, column-width=, column-number=, number-columns-repeated=, number-columns-spanned=, visibility=] {\directsetup{fo:table-column:action}} % \XMLattributeset{fo:aural}, % intrusion-displace=, % keep-together=, \defineXMLprocess [fo:table-caption] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, block-progression-dimension=, height=, inline-progression-dimension=, width=] % \XMLattributeset{fo:aural}, \defineXMLnested [fo:table-header] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, visibility=] {\beginXMLelement\bTABLEhead} {\eTABLEhead\endXMLelement} % \XMLattributeset{fo:aural}, \defineXMLnested [fo:table-footer] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, visibility=] {\beginXMLelement\bTABLEfoot} {\eTABLEfoot\endXMLelement} % \XMLattributeset{fo:aural}, \defineXMLnested [fo:table-body] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, visibility=] {\beginXMLelement\bTABLEbody} {\eTABLEbody\endXMLelement} % TODO: when stretch and when not % \XMLattributeset{fo:aural}, % keep-together=, \defineXMLnested [fo:table-row] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, break-after=, break-before=, height=, keep-with-next=, keep-with-previous=, visibility=] {\beginXMLelement \directsetup{fo:table-row:start}% \expanded{\bTR[\the\scratchtoks]}% \beginXMLelement} {\endXMLelement \eTR \directsetup{fo:table-row:stop} \endXMLelement} \startsetups fo:table-row:start \inTABLErowtrue \scratchtoks\emptytoks \doifsomething{\XMLop{height}} {\FOtableH\textheight \setpercentdimen\FOtableH{\XMLop{height}} \appendetoks height=\the\FOtableH \to \scratchtoks} \appendetoks ,extras={\rescanXMLattributes{fo:table-row}} \to\scratchtoks \stopsetups \startsetups fo:table-row:stop \inTABLErowfalse \stopsetups % \XMLattributeset{fo:aural}, % display-align=, % relative-align=, % empty-cells=, \newif\ifinTABLErow \newdimen\FOtablecellwidth \newdimen\FOtablecellheight \defineXMLnested [fo:table-cell] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:relative-position}, border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, column-number=, ends-row=, height=, inline-progression-dimension=, number-columns-spanned=1, number-rows-spanned=1, starts-row=, width=] {\directsetup{fo:table-cell:start}% \expanded{\bTD[\the\scratchtoks]}% \beginXMLelement} {\endXMLelement \eTD \directsetup{fo:table-cell:stop}} \startsetups fo:table-column:action \doifelsenothing{\XMLop{column-number}} {\increment\FOtablecolumn} {\edef\FOtablecolumn{\XMLop{column-number}} \expanded{\setupTABLE[column][\FOtablecolumn][n=\FOtablecolumn]}} \doifsomething{\XMLop{column-width}} {%\setlocalhsize %\FOtableW\localhsize \analyzefunction{\XMLop{column-width}}% % hm, we need to set localhsize earlier \doifelse\functionname{proportional-column-width} {\FOtableW\functionA\textwidth} {\FOtableW\textwidth \setpercentdimen\FOtableW{\XMLop{column-width}}}% \expanded{\setupTABLE[column][\FOtablecolumn][width=\the\FOtableW]}} \doif{\XMLop{border-style}}{none} {\expanded{\setupTABLE[column][\FOtablecolumn][frame=off]}} \doifelsenothing{\XMLop{display-align}} {\doifsomething{\XMLop{text-align}} {\expanded{\setupTABLE[column][\FOtablecolumn] [align=\XMLpav{fo:align-key}{fo:table-column}{text-align}{normal}]}}} {\doifsomething{\XMLop{text-align}} {\expanded{\setupTABLE[column][\FOtablecolumn] [align={\XMLpav{fo:display-align}{fo:table-column}{display-align}{high},\XMLpav{fo:align-key}{fo:table-column}{text-align}{normal}}]}} {\expanded{\setupTABLE[column][\FOtablecolumn] [align=\XMLpav{fo:display-align}{fo:table-column}{display-align}{high}]}}} \expanded{\setupTABLE[column][\FOtablecolumn][extras={\rescanXMLattributes{fo:table-column}}]} \stopsetups \startsetups fo:table-cell:start \doif{\XMLop{starts-row}}{true}{\ifinTABLErow\eTR\inTABLErowfalse\fi} \ifinTABLErow\else\bTR\inTABLErowtrue\fi \doifelsenothing{\XMLop{background-color}} {\let\FoTableBG\empty} {\checkhexcolor[\XMLop{background-color}] \doifcolorelse{\XMLop{background-color}} {\def\FoTableBG{color}} {\setXMLpar{fo:table-cell}{background-color}{} \let\FoTableBG\empty}} % \doifelse{\XMLpar{fo:table-cell}{width}{}}{} % {\def\pFOtablewidth{fit}} % {\FOtablecellwidth\textwidth % probably must be localhsize or frozen at an outer level % \setpercentdimen\FOtablecellwidth{\XMLpar{fo:table-cell}{width}{0pt}}% % \edef\pFOtablewidth{\the\FOtablecellwidth}}% % \doifelse{\XMLpar{fo:table-cell}{height}{}}{} % {\def\pFOtableheight{fit}} % {\FOtablecellheight\textheight % probably must be localhsize or frozen at an outer level % \setpercentdimen\FOtablecellheight{\XMLpar{fo:table-cell}{height}{0pt}}% % \edef\pFOtableheight{\the\FOtablecellheight}}% \scratchtoks\emptytoks \appendetoks % style=\noexpand\directsetup{fo:font:setup}, % else not expanded nx=\XMLop{number-columns-spanned}, ny=\XMLop{number-rows-spanned}, n=\XMLop{column-number}, background=\FoTableBG \to \scratchtoks \doifnot{\XMLop{border-style}}{none} {\appendetoks ,frame=on \to\scratchtoks} \doifsomething{\XMLop{background-color}} {\appendetoks ,backgroundcolor=\XMLop{background-color} \to \scratchtoks} % todo : padding \doifsomething{\XMLop{padding}} {\appendetoks ,offset=\XMLop{padding} \to \scratchtoks} % todo: interference with presets in column (outer level) -> \setupcolumn[column] ...; % misschien meerdere align switches \doifelsenothing{\XMLop{display-align}} {\doifsomething{\XMLop{text-align}} {\appendetoks ,align=\XMLpav{fo:align-key}{fo:table-cell}{text-align}{normal} \to \scratchtoks}} {\doifsomething{\XMLop{text-align}} {\appendetoks ,align={\XMLpav{fo:display-align}{fo:table-cell}{display-align}{high},\XMLpav{fo:align-key}{fo:table-cell}{text-align}{normal}}, \to \scratchtoks} {\appendetoks ,align=\XMLpav{fo:display-align}{fo:table-cell}{display-align}{high} \to \scratchtoks}} \appendetoks ,extras={\rescanXMLattributes{fo:table-cell}} \to\scratchtoks \stopsetups % \startsetups fo:table-cell:setup % [\XMLpar{fo:table-cell}{text-indent}{}] % \edefXMLinhpar\xFOtextindent{fo:table-cell}{text-indent} % \doifsomething\xFOtextindent % {\scratchdimen\hsize % \setpercentdimen\scratchdimen\xFOtextindent % \expanded{\setupindenting[\the\scratchdimen]}} % \stopsetups \startsetups fo:table-cell:stop \doif{\XMLop{ends-row}}{true}{\eTR\inTABLErowfalse} \stopsetups %D Element: fo:list-block fo:list-item fo:list-body fo:list-item-label % \XMLattributeset{fo:aural}, % intrusion-displace=, % keep-together=, % provisional-distance-between-starts=24pt, % provisional-label-separation=6pt, \defineXMLenvironment [fo:list-block] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-block}, \XMLattributeset{fo:relative-position}, break-after=, break-before=, keep-with-next=, % space-between-list-rows=, % ? mentioned in bradley text-indent=0pt, % yes keep-with-previous=] {\beginXMLelement\directsetup{fo:list:start}} {\directsetup{fo:list:stop}\endXMLelement} \startsetups fo:list:start \endgraf \begingroup \directsetup{fe:setup} \disablemode[fo:in-list] % \forgetall, no! % \directsetup{fo:break-and-space:before} \directsetup{fo:indent:setup} \begingroup \stopsetups \startsetups fo:list:stop \endgraf \endgroup % \directsetup{fo:break-and-space:after} \endgroup \stopsetups % \XMLattributeset{fo:aural}, % relative-align=, % intrusion-displace=, % keep-together=, % The list model is plain stupid. Instead of just defining a few mechanism % or using some kind of type attribute, a strange mechanism of functions is % used. Why on the one hand introduce redundant attributes and on the other % hand safe a few elements. A proper segmentation of the problem would have % brought better solutions. \defineXMLenvironment [fo:list-item] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-block}, \XMLattributeset{fo:relative-position}, break-after=, break-before=, keep-with-next=, keep-with-previous=] {\beginXMLelement\directsetup{fo:list-item:start}} {\directsetup{fo:list-item:stop}\endXMLelement} % check what is needed \newdimen\FOlistitemlabelhsize \newdimen\FOlistitembodyhsize \newdimen\FOlistitemdistance \newdimen\FOlistitemlabelleftskip \newdimen\FOlistitembodyleftskip \newdimen\FOlistitemlabelrightskip \newdimen\FOlistitembodyrightskip \defineXMLnestedsave [fo:list-item-body] [\XMLattributeset{fo:inherited}, id=, % keep-together=, \XMLattributeset{fo:accessibility}] \defineXMLnestedsave [fo:list-item-label] [\XMLattributeset{fo:inherited}, id=, % keep-together=, \XMLattributeset{fo:accessibility}] \startsetups fo:list-item:start \bgroup % \startmode[fo:in-list] % \doifsomething{\XMLpar{fo:list-block}{space-between-list-rows}{}} % {\vskip\XMLpar{fo:list-block}{space-between-list-rows}{}} % todo ! ! ! ! % \stopmode \enablemode[fo:in-list] \stopsetups % todo : relative-align in list item \newif\ifFOlabelend \newif\ifFObodystart \startsetups fo:list-item:stop % 24pt en 6pt in fo:root instellen % \tracebackXMLattribute{provisional-distance-between-starts} \edefXMLinh \FOprodis {provisional-distance-between-starts} \edefXMLinh \FOprolab {provisional-label-separation} % \edef\FOprodis{\XMLpar{fo}{provisional-distance-between-starts}{}} % \edef\FOprolab{\XMLpar{fo}{provisional-label-separation}{}} \edef\FOprodis{\ifx\FOprodis\empty24pt\else\FOprodis\fi} \edef\FOprolab{\ifx\FOprolab\empty 6pt\else\FOprolab\fi} \setlocalhsize \FOlistitemlabelleftskip \zeropoint \FOlistitemlabelrightskip\zeropoint \FOlistitembodyleftskip \zeropoint \FOlistitembodyrightskip \zeropoint \doifelse{\XMLpar{fo:list-item-label}{end-indent} {}}{label-end()} \FOlabelendtrue \FOlabelendfalse \doifelse{\XMLpar{fo:list-item-body} {start-indent}{}}{body-start()}\FObodystarttrue\FObodystartfalse \setpercentdimen\FOlistitemlabelleftskip {\XMLpar{fo:list-item-label}{start-indent}{0pt}} \setpercentdimen\FOlistitembodyrightskip {\XMLpar{fo:list-item-body} {end-indent} {0pt}} % maybe i need to implement something configurable \ifFObodystart \ifFOlabelend \FOlistitemlabelrightskip\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOprodis+\FOprolab) \FOlistitembodyleftskip\dimexpr(\FOlistitemlabelleftskip+\FOprodis) \FOlistitemlabelhsize\dimexpr(\FOprodis-\FOprolab) \else \setpercentdimen\FOlistitemlabelrightskip{\XMLpar{fo:list-item-label}{end-indent}{0pt}} \FOlistitemlabelhsize\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOlistitemlabelrightskip) \FOlistitembodyleftskip\dimexpr(\FOlistitemlabelleftskip+\FOlistitemlabelhsize+\FOprolab) \fi \FOlistitemdistance \dimexpr(\FOprolab) \else \setpercentdimen\FOlistitembodyleftskip{\XMLpar{fo:list-item-body}{start-indent}{0pt}} \ifFOlabelend \FOlistitemlabelrightskip\dimexpr(\localhsize-\FOlistitembodyleftskip+\FOprolab) \FOlistitemlabelhsize\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOlistitemlabelrightskip) \FOlistitemdistance \dimexpr(\FOprolab) \else \setpercentdimen\FOlistitemlabelrightskip{\XMLpar{fo:list-item-label}{end-indent}{0pt}} \FOlistitemlabelhsize\dimexpr(\localhsize-\FOlistitemlabelleftskip-\FOlistitemlabelrightskip) \FOlistitemdistance \dimexpr(\FOlistitembodyleftskip-\FOlistitemlabelleftskip-\FOlistitemlabelhsize) \fi \fi % is this fall back permitted ? \ifzeropt\FOlistitemlabelleftskip \ifzeropt\FOlistitemlabelrightskip \FOlistitembodyleftskip\FOprodis \FOlistitemdistance\FOprolab \FOlistitemlabelhsize\dimexpr(\FOlistitembodyleftskip-\FOlistitemdistance) \fi \fi % \FOlistitembodyhsize\localhsize \advance\FOlistitembodyhsize-\FOlistitembodyleftskip \advance\FOlistitembodyhsize-\FOlistitembodyrightskip \doifelse{\XMLpar{fo:list-item}{display-align}{}}{center} {\directsetup{fo:list-item:display}} {\directsetup{fo:list-item:text}} \egroup \stopsetups % todo: textindent \startsetups fo:list-item:display \endgraf \advance\leftskip \FOlistitemlabelleftskip \advance\rightskip\FOlistitembodyrightskip \dontleavehmode \valign\bgroup\forgetall\vss##\vss\cr \iftracingFO\ruledvtop\else\vbox\fi{\hsize\FOlistitemlabelhsize\directsetup{fo:list-item-label:setup}\XMLflush{fo:list-item-label}}\cr \iftracingFO\ruledvtop\else\vbox\fi{\hsize\FOlistitembodyhsize \directsetup{fo:list-item-body:setup}\XMLflush{fo:list-item-body}}\cr \egroup % \dontleavehmode \placesidebyside % or maybe paired boxes (legends) % {\ruledvtop{\forgetall\hsize\FOlistitemlabelhsize\XMLflush{fo:list-item-label}}} % {\ruledvtop{\forgetall\hsize\FOlistitembodyhsize \XMLflush{fo:list-item-body}}} \endgraf \stopsetups \newtoks\savedeverypar \savedeverypar\everypar \startsetups fo:list-item:text \everypar\savedeverypar % \appendtoksonce\insertparagraphintro\to\everypar % hack, binnen footnote ... \advance\leftskip \FOlistitembodyleftskip \advance\rightskip\FOlistitembodyrightskip \setupparagraphintro[first][\directsetup{fo:list-item-label:process}] \setupparagraphintro[next] [\begstrut\resetpenalties\clubpenalties] \directsetup{fo:list-item-body:setup} \XMLflush{fo:list-item-body}\endstrut \stopsetups \startsetups fo:list-item-label:setups \edefXMLinhpar\xFOtextindent{fo:item-label}{text-indent} \doifsomething\xFOtextindent {\scratchdimen\hsize \setpercentdimen\scratchdimen\xFOtextindent \expanded{\setupindenting[\the\scratchdimen]}} \stopsetups \startsetups fo:list-item-body:setups \edefXMLinh\xFOtextindent{fo:item-body}{text-indent} \doifsomething\xFOtextindent {\scratchdimen\hsize \setpercentdimen\scratchdimen\xFOtextindent \expanded{\setupindenting[\the\scratchdimen]}} \stopsetups \newbox\FOitembox \startsetups fo:list-item-label:process \setbox \FOitembox \iftracingFO \ruledvtop \else \vtop \fi \bgroup \forgetall \postponenotes \hsize\FOlistitemlabelhsize \directsetup{fo:list-item-label:setup} \XMLflush{fo:list-item-label} \egroup \getnoflines{\dimexpr(\ht\FOitembox+\dp\FOitembox)} \setpenalties\clubpenalties\noflines\maxdimen \strut\llap{\box\FOitembox\hskip\FOlistitemdistance} \stopsetups % \setlocalhsize \hsize\localhsize %D Element: fo:basic-link % \XMLattributeset{fo:aural}, % keep-together=, % line-height=, \defineXMLenvironmentsave [fo:basic-link] [\XMLattributeset{fo:inherited}, id=, \XMLattributeset{fo:accessibility}, \XMLattributeset{fo:border-padding-background}, \XMLattributeset{fo:margin-inline}, \XMLattributeset{fo:relative-position}, alignment-adjust=, alignment-baseline=, baseline-shift=, destination-placement-offset=, dominant-baseline=, external-destination=, indicate-destination=, internal-destination=, keep-with-next=, keep-with-previous=, show-destination=, target-processing-context=, target-presentation-context=, target-stylesheet=] {} {\directsetup{fo:basic-link}} \startsetups fo:basic-link \goto{\XMLflushself}[unknown] \stopsetups %D Element: fo:multi-switch fo:multi-case fo:multi-toggle fo:multi-properties fo:multi-property-set \defineXMLprocess[fo:multi-switch] \defineXMLprocess[fo:multi-case] \defineXMLprocess[fo:multi-toggle] \defineXMLprocess[fo:multi-properties] \defineXMLprocess[fo:multi-property-set] %D Element: fo:float \defineXMLenvironmentsave [fo:float] [\XMLattributeset{fo:inherited}, float=before, clear=] {} {\directsetup{fo:float:process}} % clear: start end left right both none inherit % float: before start end left right none \mapXMLvalue {fo:float-position} {before} {here} % todo \mapXMLvalue {fo:float-position} {start} {here} % todo \mapXMLvalue {fo:float-position} {end} {here} % todo \mapXMLvalue {fo:float-position} {left} {left} \mapXMLvalue {fo:float-position} {right} {right} \mapXMLvalue {fo:float-position} {none} {here} % todo \startsetups fo:float:process \placefigure [\XMLval{fo:float-position}{\XMLop{float}},none] {} {\XMLflushself} \stopsetups %D Element: fo:footnote fo:footnote-body % Let's assume that 'whatever' contains the number or footnote marker. % % whatevernote % todo xsl-footnote area \defineXMLprocess [fo:footnote] [\XMLattributeset{fo:accessibility}] \defineXMLargument [fo:footnote-body] [\XMLattributeset{fo:accessibility}] {\footnote[-]} %D Element: fo:wrapper \defineXMLenvironment % todo: all inheritable [fo:wrapper] [\XMLattributeset{fo:inherited}, \XMLattributeset{fe:tracing}, \XMLattributeset{fo:fonts}, \XMLattributeset{fo:hyphenation}] {\beginXMLelement\begingroup\directsetup{fo:wrapper}} {\endgroup\endXMLelement} \startsetups fo:wrapper \directsetup{fe:setup} \directsetup{fo:hyphenation:setup} \directsetup{fo:font:setup} \stopsetups %D Element: fo:marker fo:retrieve-marker % In order to support 'retrieve-boundary' (page, page-sequence, % document) I need to extend the context mark handler. % This object will probably interfere with a too spacy layout since % it is unaware if its surrounding. \defineXMLenvironmentsave [fo:marker] [marker-class-name=unknown] {} {\directsetup{fo:marker:process}} \startsetups fo:marker:process \doifelsemarking{fo:\XMLop{marker-class-name}} {} {\definerawmarking[fo:\XMLop{marker-class-name}]} \expanded{\marking[fo:\XMLop{marker-class-name}]{\XMLflushself}} \stopsetups \defineXMLcommand [fo:retrieve-marker] [retrieve-class-name=unknown, retrieve-position=first-starting-within-page, retrieve-boundary=] {\directsetup{fo:retrieve-marker:process}} \mapXMLvalue {fo:marker-position} {first-starting-within-page} {first} % first mark \mapXMLvalue {fo:marker-position} {first-including-carryover} {previous} % top mark \mapXMLvalue {fo:marker-position} {last-starting-within-page} {first} % dunno \mapXMLvalue {fo:marker-position} {last-ending-within-page} {last} % bot mark \startsetups fo:retrieve-marker:process \expanded{\getmarking [fo:\XMLop{retrieve-class-name}] [\XMLval{fo:marker-position}{\XMLop{retrieve-position}}{first}]} \stopsetups %D Auxiliary macros \unprotect \long\def\noFOchecks#1\od{} \def\FOassignskip#1#2#3% {\edef\!!stringa{\XMLpar{#1}{#2}\empty}% \edef\!!stringb{\XMLpar{#1}{#2.optimum}\empty}% \edef\!!stringc{\XMLpar{#1}{#2.minimum}\empty}% \edef\!!stringd{\XMLpar{#1}{#2.maximum}\empty}% \dimen0=\ifx\!!stringa\empty\zeropoint\else\!!stringa\fi \dimen2=\ifx\!!stringb\empty\dimen0 \else\!!stringb\fi \dimen4=\dimexpr(\ifx\!!stringd\empty\dimen0 \else\!!stringd\fi-\dimen2)\relax \dimen6=\dimexpr(\ifx\!!stringc\empty\dimen0 \else\!!stringc\fi-\dimen2)\relax #3=\dimen2 \ifzeropt\dimen4 \else\!!plus\dimen4 \fi\ifzeropt\dimen6 \else\!!minus\dimen6 \fi\relax} \mapXMLvalue{fo:space:conditionality} {retain} {\let\next\retainedskip } \mapXMLvalue{fo:space:conditionality} {discard} {\let\next\discardedskip} \mapXMLvalue{fo:space:conditionality} {} {\let\next\discardedskip} \mapXMLvalue{fo:space:precedence} {force} {\let\next\forcedskip} \def\FOdoskip#1#2% {\begingroup \iftracingFO\showskips\fi \FOassignskip{#1}{#2}\scratchskip \XMLval{fo:space:conditionality}{\XMLpar{#1}{#2.conditionality}\empty}\empty \XMLval{fo:space:precedence}{\XMLpar{#1}{#2.precedence}\empty}\empty \ifdim\scratchskip=\zeropoint \ifdim\gluestretch\scratchskip=\zeropoint \ifdim\glueshrink\scratchskip=\zeropoint \let\next\gobbleoneargument \fi \fi \fi \next\scratchskip \endgroup} \def\doFObeforeskip#1{\FOdoskip{#1}{space-before}} \def\doFOafterskip #1{\FOdoskip{#1}{space-after}} \def\FOassignspace#1#2#3% {\edef\!!stringa{\XMLpar{#1}{#2}\empty}% \ifx\!!stringa\empty #3=\zeropoint \else #3=1em% ? \setpercentdimen#3\!!stringa \fi \relax} \def\FOdospace#1#2% {\begingroup \iftracingFO\showskips\fi \FOassignspace{#1}{#2}\scratchskip \ifdim\scratchskip=\zeropoint \else \hskip\scratchskip \fi \endgroup} \def\doFOstartspace#1{\FOdospace{#1}{space-start}} \def\doFOendspace #1{\FOdospace{#1}{space-end}} \def\checkFOborder#1#2% {\edef\FOattribute{\XMLpar{#1}{border-#2}\empty}% \ifx\FOattribute\empty\else \edef\FOtag{#1}% \edef\FOatt{border-#2}% \expanded{\docheckFOborder\FOattribute\space\relax\space\relax}\od \fi} \def\docheckFOborder#1#2 #3% {\ifx#1\relax \expandafter\noFOchecks \else \doifhexcolorelse{#1#2} {\setXMLpar\FOtag{\FOatt-color}{#1#2}} {\doifelsenothing{\XMLval{fo:border-style}{#1#2}\empty} {\doifcolorelse{#1#2} {\setXMLpar\FOtag{\FOatt-color}{#1#2}} {\setXMLpar\FOtag{\FOatt-width}{#1#2}}} {\setXMLpar\FOtag{\FOatt-style}{#1#2}}}% \expandafter\docheckFOborder \fi#3} \def\checkFOposition#1#2% {\edef\FOattribute{\XMLpar{#1}{#2-position}\empty}% \ifx\FOattribute\empty\else \edef\FOtag{#1}% \edef\FOatt{#2-position}% \scratchcounter\zerocount \expanded{\docheckFOposition\FOattribute\space\relax\space\relax}\od \fi} \def\docheckFOposition#1#2 #3% {\ifx#1\relax \expandafter\noFOchecks \else \advance\scratchcounter\plusone \ifcase\scratchcounter \or \setXMLpar\FOtag{\FOatt-vertical}{#1#2}% \or \setXMLpar\FOtag{\FOatt-horizontal}{#1#2}% \fi \expandafter\docheckFOposition \fi#3} \def\checkFOpadding{\def\FOatt{padding}\checkFOquadruple} \def\checkFOmargin {\def\FOatt{margin}\checkFOquadruple} \def\checkFOquadruple#1% {\edef\FOattribute{\XMLpar{#1}\FOatt\empty}% \ifx\FOattribute\empty\else \edef\FOtag{#1}% \scratchcounter\zerocount \expanded{\docheckFOquadruple\FOattribute\space\relax\space\relax}\od \ifcase\scratchcounter \let\FOattributeT\FOattribute \let\FOattributeR\FOattribute \let\FOattributeB\FOattribute \let\FOattributeL\FOattribute \or % (tblr) \let\FOattributeT\FOattribute \let\FOattributeR\FOattribute \let\FOattributeB\FOattribute \let\FOattributeL\FOattribute \or % (tb)(lr) \let\FOattributeB\FOattributeT \let\FOattributeL\FOattributeR \or % (t)(lr)(b) \let\FOattributeL\FOattributeR \or % (t)(r)(b)(l) % already ok \fi \letXMLpar\FOtag{\FOatt-top}\FOattributeT \letXMLpar\FOtag{\FOatt-right}\FOattributeR \letXMLpar\FOtag{\FOatt-bottom}\FOattributeB \letXMLpar\FOtag{\FOatt-left}\FOattributeL \fi} \def\docheckFOquadruple#1#2 #3% {\ifx#1\relax \expandafter\noFOchecks \else \advance\scratchcounter\plusone \ifcase\scratchcounter \or \edef\FOattributeT{#1#2}% \or \edef\FOattributeR{#1#2}% \or \edef\FOattributeB{#1#2}% \or \edef\FOattributeL{#1#2}% \fi \expandafter\docheckFOquadruple \fi#3} % \def\setFOimagename#1% % {\edef\FOimagename{#1}% % \aftersplitstring \FOimagename\at url('\to\xFOimagename % \ifx\xFOimagename\empty \else % \beforesplitstring\xFOimagename\at ')\to\FOimagename % \fi % \aftersplitstring \FOimagename\at url("\to\xFOimagename % \ifx\xFOimagename\empty \else % \beforesplitstring\xFOimagename\at ")\to\FOimagename % \fi} % % let's overkill: \def\setFOimagename#1% {\analyzefunction{#1}% \doifelse\functionname{url} {\edef\FOimagename{\@EA\unstringed\functionA}} {\ifx\functionname\empty \def\FOimagename{#1}% \else \def\FOimagename{dummy}% \fi}} % font \mapXMLvalue {fo:weight} {normal} {} \mapXMLvalue {fo:weight} {bold} {bold} \mapXMLvalue {fo:weight} {bolder} {bold} \mapXMLvalue {fo:weight} {lighter} {normal} \mapXMLvalue {fo:weight} {100} {normal} \mapXMLvalue {fo:weight} {200} {normal} \mapXMLvalue {fo:weight} {300} {normal} \mapXMLvalue {fo:weight} {400} {normal} \mapXMLvalue {fo:weight} {500} {normal} \mapXMLvalue {fo:weight} {600} {normal} \mapXMLvalue {fo:weight} {700} {normal} \mapXMLvalue {fo:weight} {800} {normal} \mapXMLvalue {fo:weight} {900} {normal} \mapXMLvalue {fo:variant} {normal} {} \mapXMLvalue {fo:variant} {small-caps} {small-caps} \mapXMLvalue {fo:style} {normal} {normal} \mapXMLvalue {fo:style} {italic} {italic} \mapXMLvalue {fo:style} {oblique} {oblique} \mapXMLvalue {fo:style} {backslant} {normal} % we can get crap like: 10pt/1.5 bold "Times Roman" ; i'm really puzzled why an % otherwise rather verbose coding occasionally packs attributes; a design flaw \newtoks\FOfonttoks \def\checkFOfontSS#1'{} \def\checkFOfontDD#1"{} \def\checkFOfontII#1 {} \bgroup \catcode`\'=\active \catcode`\"=\active \catcode`\/=\active \gdef\setcheckFOfontX {\catcode`\'=\active \catcode`\"=\active \catcode`\/=\active \def'##1'{\global\FOfonttoks\expandafter{\the\FOfonttoks\def\FOfontfamily{##1}}}% \def"##1"{\global\FOfonttoks\expandafter{\the\FOfonttoks\def\FOfontfamily{##1}}}% \def/##1 {}}% todo linespacing \gdef\setcheckFOfontXX {\catcode`\'=\active \catcode`\"=\active \catcode`\/=\active \def'##1'{}% \def"##1"{}% \def/##1 {}}% todo linespacing \egroup \globallet\xFOattribute\empty \def\checkFOfont#1% {\FOfonttoks\emptytoks \bgroup \catcode`\\=\@@escape \catcode`\{=\@@begingroup \catcode`\}=\@@endgroup % \catcode`\:=\@@letter % \catcode`\-=\@@letter \setcheckFOfontX \xdef\xFOattribute{#1 }% \setbox\scratchbox\hbox{\scantokens\@EA{\xFOattribute}}% \setcheckFOfontXX \scantokens\@EA{\@EA\xdef\@EA\xFOattribute\@EA{\xFOattribute}}% \egroup \the\FOfonttoks \ifx\xFOattribute\empty\else \expanded{\docheckFOfont\xFOattribute\space\relax\space\relax}\od \fi \directsetup{fo:font:family:check}} \def\docheckFOfont#1#2 #3% {\ifx#1\relax \expandafter\noFOchecks \else \directsetup{fo:fonts:reset}% \doifelsefontsynonym{#1#2} {\def\FOfontfamily{#1#2}} {\doifelsenothing{\XMLval{fo:weight}{#1#2}{}} {\doifelsenothing{\XMLval{fo:variant}{#1#2}{}} {\doifelsenothing{\XMLval{fo:style}{#1#2}{}} {\setpercentdimen\dFOfontsize{#1#2}} {\edef\FOfontstyle{\XMLval{fo:style}{#1#2}{}}}} {\edef\FOfontvariant{\XMLval{fo:variant}{#1#2}{}}}} {\edef\FOfontweight{\XMLval{fo:weight}{#1#2}{}}}}% \expandafter\docheckFOfont \fi#3} \protect \newtoks\FOreferences \def\setFOreference#1% {\doifsomething{\XMLpar{#1}{id}{}} {\expanded{\appendtoks \noexpand\reference[\XMLpar{#1}{id}{}]{\XMLpar{fo:page-sequence}{format}{}}}% \to\FOreferences}} \def\flushFOreferences {\the\FOreferences \global\FOreferences\emptytoks} \def\doFOreference#1% {\doifsomething{\XMLpar{#1}{id}{}} {\expanded{\reference[\XMLpar{#1}{id}{}]{\XMLpar{fo:page-sequence}{format}{}}}}} \appendtoks \flushFOreferences \to \everypar \appendtoks \flushFOreferences \to \neverypar % check ! %D Graphics: static frames \startMPinclusions input mp-fobg.mp ; \stopMPinclusions \def\unknownMPcolor{FoNoColor} % todo: combine into one en alleen tweede run, immers toch geen invloed; is % aangezien de referentiepunten vast liggen \def\FoRegionWidth#1% {\XMLpav {fo:border-width} {fo:region-\MPvar{location}} {border-#1-width} {FoMedium}} \def\FoRegionStyle#1% {\XMLpav {fo:border-style} {fo:region-\MPvar{location}} {border-#1-style} {FoNone}} \def\FoRegionColor#1% {\MPcolor{\XMLpar {fo:region-\MPvar{location}} {border-#1-color} {black}}} \def\FoRegionBackgroundColor {\MPcolor{\XMLpar {fo:region-\MPvar{location}} {background-color} {FoNoColor}}} % todo: when connected and same color : one draw \startuseMPgraphic{region-do} FoBackgroundColor := \FoRegionBackgroundColor ; FoLineColor[FoTop] := \FoRegionColor{top} ; FoLineColor[FoBottom] := \FoRegionColor{bottom} ; FoLineColor[FoLeft] := \FoRegionColor{left} ; FoLineColor[FoRight] := \FoRegionColor{right} ; FoLineStyle[FoTop] := \FoRegionStyle{top} ; FoLineStyle[FoBottom] := \FoRegionStyle{bottom} ; FoLineStyle[FoLeft] := \FoRegionStyle{left} ; FoLineStyle[FoRight] := \FoRegionStyle{right} ; FoLineWidth[FoTop] := \FoRegionWidth{top} ; FoLineWidth[FoBottom] := \FoRegionWidth{bottom} ; FoLineWidth[FoLeft] := \FoRegionWidth{left} ; FoLineWidth[FoRight] := \FoRegionWidth{right} ; if FoBackgroundColor <> FoNoColor : fill OverlayBox withcolor FoBackgroundColor ; fi ; path OverlayFrameBox ; interim linecap := butt ; OverlayFrameBox := OverlayBox topenlarged -.5FoLineWidth[FoTop] bottomenlarged -.5FoLineWidth[FoBottom] leftenlarged -.5FoLineWidth[FoLeft] rightenlarged -.5FoLineWidth[FoRight] ; DrawFoFrame(FoTop, topboundary OverlayFrameBox) ; DrawFoFrame(FoBottom, bottomboundary OverlayFrameBox) ; DrawFoFrame(FoLeft, leftboundary OverlayFrameBox) ; DrawFoFrame(FoRight, rightboundary OverlayFrameBox) ; \stopuseMPgraphic \startuseMPgraphic{region-body} \includeMPgraphic{region-do} \stopuseMPgraphic \startuseMPgraphic{region-before} \includeMPgraphic{region-do} \stopuseMPgraphic \startuseMPgraphic{region-after} \includeMPgraphic{region-do} \stopuseMPgraphic \startuseMPgraphic{region-start} \includeMPgraphic{region-do} \stopuseMPgraphic \startuseMPgraphic{region-end} \includeMPgraphic{region-do} \stopuseMPgraphic \startnotmode[fo-no-bg] \defineoverlay[region-body-graphic] [\useMPgraphic{region-body}{location=body}] \defineoverlay[region-before-graphic][\useMPgraphic{region-before}{location=before}] \defineoverlay[region-after-graphic] [\useMPgraphic{region-after}{location=after}] \defineoverlay[region-start-graphic] [\useMPgraphic{region-start}{location=start}] \defineoverlay[region-end-graphic] [\useMPgraphic{region-end}{location=end}] \stopnotmode % more efficient: todo: relocate and move to page background % \def\FoRegionWidth#1#2% % {\XMLpav % {fo:border-width} % {fo:region-#2} % {border-#1-width} % {FoMedium}} % \def\FoRegionStyle#1#2% % {\XMLpav % {fo:border-style} % {fo:region-#2} % {border-#1-style} % {FoNone}} % \def\FoRegionColor#1#2% % {\MPcolor{\XMLpar % {fo:region-#2} % {border-#1-color} % {black}}} % \def\FoRegionBackgroundColor#1% % {\MPcolor{\XMLpar % {fo:region-#1} % {background-color} % {FoNoColor}}} % \def\combinedFOgraphic#1% % {FoBackgroundColor := \FoRegionBackgroundColor{#1} ; % FoLineColor[FoTop] := \FoRegionColor{top}{#1} ; % FoLineColor[FoBottom] := \FoRegionColor{bottom}{#1} ; % FoLineColor[FoLeft] := \FoRegionColor{left}{#1} ; % FoLineColor[FoRight] := \FoRegionColor{right}{#1} ; % FoLineStyle[FoTop] := \FoRegionStyle{top}{#1} ; % FoLineStyle[FoBottom] := \FoRegionStyle{bottom}{#1} ; % FoLineStyle[FoLeft] := \FoRegionStyle{left}{#1} ; % FoLineStyle[FoRight] := \FoRegionStyle{right}{#1} ; % FoLineWidth[FoTop] := \FoRegionWidth{top}{#1} ; % FoLineWidth[FoBottom] := \FoRegionWidth{bottom}{#1} ; % FoLineWidth[FoLeft] := \FoRegionWidth{left}{#1} ; % FoLineWidth[FoRight] := \FoRegionWidth{right}{#1} ; % if FoBackgroundColor <> FoNoColor : % fill OverlayBox % withcolor FoBackgroundColor ; % fi ; % path OverlayFrameBox ; % interim linecap := butt ; % OverlayFrameBox := OverlayBox % topenlarged -.5FoLineWidth[FoTop] % bottomenlarged -.5FoLineWidth[FoBottom] % leftenlarged -.5FoLineWidth[FoLeft] % rightenlarged -.5FoLineWidth[FoRight] ; % DrawFoFrame(FoTop, topboundary OverlayFrameBox) ; % DrawFoFrame(FoBottom, bottomboundary OverlayFrameBox) ; % DrawFoFrame(FoLeft, leftboundary OverlayFrameBox) ; % DrawFoFrame(FoRight, rightboundary OverlayFrameBox) ;} % \startuseMPgraphic{region-body} % \combinedFOgraphic{before} % \combinedFOgraphic{body} % \combinedFOgraphic{after} % \combinedFOgraphic{start} % \combinedFOgraphic{end} % \stopuseMPgraphic % \defineoverlay[region-body-graphic] [\useMPgraphic{region-body}{location=body}] % \defineoverlay[region-before-graphic][] % \defineoverlay[region-after-graphic] [] % \defineoverlay[region-start-graphic] [] % \defineoverlay[region-end-graphic] [] \stopXMLcompiling \endinput % we can follow two approaches: set the attributes global, using % % \defineXML...[tag][prefix][empty] % % in that case we trust the fo-file to be correct, i.e. the xslt style % sheets should not put attributes in the wrong places; however, we need % to do that with care, since for instance the attributes of some objects % (regions) are used mixed % % \defineXMLprocess [fo:root] [XMLFO] [test=unset] % % \defineXMLenvironment [fo:block-container] [XMLFO] % {\begingroup} % {\endgroup} % % \defineXMLenvironment [fo:block] [XMLFO] % {\begingroup\getXMLparameters[XMLFO]\begingroup} % {\endgroup\XMLFOtest\endgraf\endgroup} % % \startXMLdata % % second: % unset: % nested:outer: % last: % % \stopXMLdata % % the other approach is to set the attributes explicitly for each % element, which is slower but more robust % % A mix is: % % \defineXMLenvironment % [fo:root] % [test=unset] % {\beginXMLelement} % {\endXMLelement} % % \defineXMLenvironment % [fo:block-container] % [test=\XMLpar\XMLpureparent{test}{}] % {\beginXMLelement} % {\endXMLelement} % % \defineXMLenvironment % [fo:block] % [test=\XMLpar\XMLpureparent{test}{}] % {\beginXMLelement % \begingroup} % {\endgroup % \XMLpar{fo:block}{test}{} % \endXMLelement} % % \startXMLdata % % second: % unset: % nested:outer: % last: % % \stopXMLdata context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv0000644000175000017500000000403012161703335027027 0ustar norbertnorbert%D \module %D [ file=type-imp-opendyslexic, %D version=2013.05.02, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Opendyslexic Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[opendyslexic] \starttypescript [\s!serif] [opendyslexic] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:opendyslexic-regular.otf] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:opendyslexic-bold.otf] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:opendyslexic-italic.otf] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:opendyslexic-bolditalic.otf] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [opendyslexic] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:opendyslexicalta-regular.otf] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:opendyslexicalta-bold.otf] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:opendyslexicalta-italic.otf] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:opendyslexicalta-bolditalic.otf] [\s!features=\s!default] \stoptypescript \starttypescript[opendyslexic] \definetypeface [opendyslexic] [\s!rm] [\s!serif] [opendyslexic] [\s!default] \definetypeface [opendyslexic] [\s!ss] [\s!sans] [opendyslexic] [\s!default] \definetypeface [opendyslexic] [\s!tt] [\s!mono] [dejavu] [\s!default]% [rscale=1.065] \definetypeface [opendyslexic] [\s!mm] [\s!math] [xits] [\s!default]% [rscale=1.020] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-snc.mkii0000644000175000017500000001312011754241457024245 0ustar norbertnorbert%D \module %D [ file=anch-snc, %D version=2003.12.01, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Synchronization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Synchronization} \unprotect \ifx\s!set \undefined \def\s!set {set} \fi \ifx\s!reset \undefined \def\s!reset {reset} \fi \ifx\s!preset \undefined \def\s!preset {preset} \fi \ifx\s!syncpos\undefined \def\s!syncpos{syncpos} \fi \def\definesyncpositions[#1]% {\setcounter{\s!num:\s!syncpos:#1}{0}% \doglobal\appendtoksonce\getvalue {\s!reset:\s!syncpos:#1}\to\resetsyncpositions \doglobal\appendtoksonce\getvalue{\s!preset:\s!syncpos:#1}\to\presetsyncpositions \setgvalue{\s!syncpos:#1}{sync_n[#1] := 0 ;}% \setgvalue{\s!set:\s!syncpos:#1}{\dosetsyncpositions{#1}}} \def\syncposition {\dodoubleempty\dosyncposition} \def\dosyncposition[#1][#2]% {\letgvalue{\s!reset:\s!syncpos:#1}\relax \letgvalue{\s!preset:\s!syncpos:#1}\relax \dontleavehmode \dodosyncposition{#1}{#2}\s!set \ignorespaces} \def\doifelselastsyncposition#1#2% {\doifelse{\lastsyncclass\lastsyncposition}{#1#2}} \def\dodosyncposition#1#2#3% {\letgvalue{\s!reset:\s!syncpos:#1}\relax \letgvalue{\s!preset:\s!syncpos:#1}\relax \ifundefined{\s!syncpos:#1}% \strut \else \pluscounter{\s!num:\s!syncpos:#1}% \setsyncpositions{#1}% % option: geen w/h, alleen p 0 0 0 data \setpositionplus {\s!syncpos:#1:\countervalue{\s!num:\s!syncpos:#1}}% {#2}% \hbox{\strut\traceposstring\llap\green{#3/\countervalue{\s!num:\s!syncpos:#1}/#1/#2>>}}% \fi} \def\setsyncpositions#1% {\enabletextarearegistration \getvalue {\s!set:\s!syncpos:#1}% \letgvalue{\s!set:\s!syncpos:#1}\relax} \def\dosetsyncpositions#1% {\startnointerference % removing out of sync can best be done in mp \!!dimena\maxdimen \!!counta\zerocount \!!countc\zerocount \doloop {\doifpositionelse{\s!syncpos:#1:\recurselevel} {\!!dimenb\MPy{\s!syncpos:#1:\recurselevel}\relax \!!countb\MPp{\s!syncpos:#1:\recurselevel}\relax \ifnum\!!countb=\!!counta % same page \ifdim\!!dimenb>\!!dimena \donefalse % out of order nodes \else \donetrue % nodes in order \fi \else \donetrue % different page \fi \ifdone \!!counta\!!countb \!!dimena\!!dimenb \advance\!!countc\plusone \edef\!!stringa{[#1][\the\!!countc]:=}% \edef\!!stringc{\s!syncpos:#1:\the\!!countc}% \edef\!!stringd{\MPplus\!!stringc{1}{0}}% \setxvalue{\s!syncpos:#1}% {\getsyncpositions{#1}% sync_p \!!stringa \MPp \!!stringc ; sync_xy\!!stringa \MPxy\!!stringc ; sync_w \!!stringa \MPw \!!stringc ; sync_h \!!stringa \MPh \!!stringc ; sync_d \!!stringa \MPd \!!stringc ; \ifx\!!stringd\empty \else sync_t \!!stringa \MPplus\!!stringc{1}{0} ; \fi}% \fi} {\setxvalue{\s!syncpos:#1}% {\getsyncpositions{#1}% sync_n[#1] := \the\!!countc ;} \exitloop}}% \stopnointerference} \def\getsyncpositions#1% {\getvalue{\s!syncpos:#1}} \newtoks\resetsyncpositions \newtoks\presetsyncpositions \def\resyncposition {\dodoubleargument\doresyncposition} \def\presyncposition{\dodoubleargument\dopresyncposition} \def\dodoresyncposition #1#2{\dodosyncposition{#1}{#2}\s!reset} \def\dodopresyncposition#1#2{\dodosyncposition{#1}{#2}\s!preset} \def\doresyncposition [#1][#2]{\setxvalue{\s!reset :\s!syncpos:#1}{\noexpand\dodoresyncposition{#1}{#2}}} \def\dopresyncposition[#1][#2]{\setxvalue{\s!preset:\s!syncpos:#1}{\noexpand\dodopresyncposition{#1}{#2}}} \def\flushsyncpositions % this order ! {\begingroup \the\presetsyncpositions \the\resetsyncpositions \endgroup} \def\flushsyncxxsets#1% {\setbox\scratchbox\hbox{\the#1}% \ifvoid\scratchbox\else \prewordbreak \let\prewordbreak\relax % only once \smashbox\scratchbox \box\scratchbox \fi} \def\flushsyncresets {\flushsyncxxsets\resetsyncpositions } \def\flushsyncpresets{\flushsyncxxsets\presetsyncpositions} % \appendtoks \flushsyncpositions \to \everypar % \appendtoks \flushsyncpositions \to \everyheadstart % \explicitneverypar -> in grid snapper, eerst testen % % \appendtoks \flushsyncpositions \to \neverypar \protect \endinput \starttext \definesyncpositions[1] \startuseMPgraphic{sync} StartPage ; \getsyncpositions{1} ; SyncThreshold := 2LineHeight ; SyncLeftOffset := -.5LeftMarginDistance ; % SetSyncThreshold(1,3,3LineHeight) ; SyncWidth := - (BackSpace + SyncLeftOffset) ; SetSyncColor(1,1,\MPcolor{red}) ; SetSyncColor(1,2,\MPcolor{green}) ; SetSyncColor(1,3,\MPcolor{blue}) ; SetSyncColor(1,4,\MPcolor{yellow}) ; PrepareSyncTasks(1,true,true,false) ; for i = 1 upto NOfSyncPaths : fill SyncPaths[i] withcolor TheSyncColor(CurrentSyncClass,sync_t[CurrentSyncClass][SyncTasks[i]]) ; endfor ; setbounds currentpicture to Page ; StopPage ; \stopuseMPgraphic \defineoverlay[tempoverlay][\useMPgraphic{sync}] \setupbackgrounds[page][background=tempoverlay] \syncposition[1][1] \input ward \endgraf \syncposition[1][2] \input ward \endgraf \syncposition[1][3] \input ward \endgraf \syncposition[1][4] \input ward \endgraf \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-lib.mkvi0000644000175000017500000000644012161703335024300 0ustar norbertnorbert%D \module %D [ file=font-lib, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Libraries, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Libraries} \unprotect \registerctxluafile{font-ini}{1.001} \registerctxluafile{font-log}{1.001} \registerctxluafile{font-con}{1.001} \registerctxluafile{font-enc}{1.001} %registerctxluafile{font-agl}{1.001} % loaded when needed, saves 100K in format \registerctxluafile{font-cid}{1.001} % cid maps \registerctxluafile{font-map}{1.001} \registerctxluafile{font-syn}{1.001} \registerctxluafile{font-tfm}{1.001} \registerctxluafile{font-afm}{1.001} \registerctxluafile{font-afk}{1.001} \registerctxluafile{font-hsh}{1.001} % hashes used by context \registerctxluafile{font-nod}{1.001} \registerctxluafile{font-oti}{1.001} % otf initialization \registerctxluafile{font-ott}{1.001} % otf tables (first) \registerctxluafile{font-otf}{1.001} % otf main \registerctxluafile{font-otb}{1.001} % otf main base \registerctxluafile{node-inj}{1.001} % we might split it off %registerctxluafile{font-ota}{1.001} % otf analyzers \registerctxluafile{font-otx}{1.001} % otf analyzers \registerctxluafile{font-otn}{1.001} % otf main node \registerctxluafile{font-otd}{1.001} % otf dynamics (does an overload) \registerctxluafile{font-otp}{1.001} % otf pack \registerctxluafile{font-otc}{1.001} % otf context \registerctxluafile{font-oth}{1.001} % otf helpers \registerctxluafile{font-odv}{1.001} % otf devanagari (experimental) \registerctxluafile{font-pat}{1.001} % patchers \registerctxluafile{node-fnt}{1.001} % here \registerctxluafile{font-lua}{1.001} \registerctxluafile{font-vf} {1.001} \registerctxluafile{font-enh}{1.001} \registerctxluafile{font-trt}{1.001} \registerctxluafile{font-gds}{1.001} \registerctxluafile{font-def}{1.001} \registerctxluafile{font-ctx}{1.001} % after def as it overloads \registerctxluafile{font-ext}{1.001} \registerctxluafile{font-fbk}{1.001} \registerctxluafile{font-aux}{1.001} %D Some low level helpers %D %D \starttyping %D \def\TestLookup#specification% %D {\dolookupfontbyspec{#specification} %D pattern: #specification, found: \dolookupnoffound %D \blank %D \dorecurse {\dolookupnoffound} {% %D \recurselevel:~\dolookupgetkeyofindex{fontname}{\recurselevel}\quad %D }% %D \blank} %D %D \TestLookup{familyname=helveticaneue} %D \TestLookup{familyname=helveticaneue,weight=bold} %D \TestLookup{familyname=helveticaneue,weight=bold,style=italic} %D \stoptyping % we can also move the lookups to the fonts.namespace (of commands) % these will be renamed but it needs synchronization with WS \def\dolookupfontbyspec #1{\ctxcommand{fontlookupinitialize("#1")}} \def\dolookupnoffound {\ctxcommand{fontlookupnoffound()}} \def\dolookupgetkeyofindex#1#2{\ctxcommand{fontlookupgetkeyofindex("#1",#2)}} \def\dolookupgetkey #1{\ctxcommand{fontlookupgetkey("#1")}} \def\cleanfontname #1{\ctxcommand{cleanfontname("#1")}} % new: \unexpanded\def\setfontofid#1{\ctxcommand{setfontofid(#1)}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-xml.lua0000644000175000017500000001431712130411274024124 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-xml'] = { version = 1.001, comment = "companion to trac-log.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Application helpinfo can be defined in several ways: -- -- helpinfo = "big blob of help" -- -- helpinfo = { basic = "blob of basic help", extra = "blob of extra help" } -- -- helpinfo = "..." -- -- helpinfo = "somefile.xml" -- -- In the case of an xml file, the file should be either present on the same path -- as the script, or we should be be able to locate it using the resolver. local formatters = string.formatters local reporters = logs.reporters local xmlserialize = xml.serialize local xmlcollected = xml.collected local xmltext = xml.text local xmlfirst = xml.first -- there is no need for a newhandlers { name = "help", parent = "string" } local function showhelp(specification,...) local root = xml.convert(specification.helpinfo or "") if not root then return end local xs = xml.gethandlers("string") xml.sethandlersfunction(xs,"short",function(e,handler) xmlserialize(e.dt,handler) end) xml.sethandlersfunction(xs,"ref", function(e,handler) handler.handle("--"..e.at.name) end) local wantedcategories = select("#",...) == 0 and true or table.tohash { ... } local nofcategories = xml.count(root,"/application/flags/category") local report = specification.report for category in xmlcollected(root,"/application/flags/category") do local categoryname = category.at.name or "" if wantedcategories == true or wantedcategories[categoryname] then if nofcategories > 1 then report("%s options:",categoryname) report() end for subcategory in xmlcollected(category,"/subcategory") do for flag in xmlcollected(subcategory,"/flag") do local name = flag.at.name local value = flag.at.value -- local short = xmlfirst(s,"/short") -- local short = xmlserialize(short,xs) local short = xmltext(xmlfirst(flag,"/short")) if value then report("--%-20s %s",formatters["%s=%s"](name,value),short) else report("--%-20s %s",name,short) end end report() end end end for category in xmlcollected(root,"/application/examples/category") do local title = xmltext(xmlfirst(category,"/title")) if title and title ~= "" then report() report(title) report() end for subcategory in xmlcollected(category,"/subcategory") do for example in xmlcollected(subcategory,"/example") do local command = xmltext(xmlfirst(example,"/command")) local comment = xmltext(xmlfirst(example,"/comment")) report(command) end report() end end for comment in xmlcollected(root,"/application/comments/comment") do local comment = xmltext(comment) report() report(comment) report() end end local reporthelp = reporters.help local exporthelp = reporters.export local function xmlfound(t) local helpinfo = t.helpinfo if type(helpinfo) == "table" then return false end if type(helpinfo) ~= "string" then helpinfo = "Warning: no helpinfo found." t.helpinfo = helpinfo return false end if string.find(helpinfo,".xml$") then local ownscript = environment.ownscript local helpdata = false if ownscript then local helpfile = file.join(file.pathpart(ownscript),helpinfo) helpdata = io.loaddata(helpfile) if helpdata == "" then helpdata = false end end if not helpdata then local helpfile = resolvers.findfile(helpinfo,"tex") helpdata = helpfile and io.loaddata(helpfile) end if helpdata and helpdata ~= "" then helpinfo = helpdata else helpinfo = formatters["Warning: help file %a is not found."](helpinfo) end end t.helpinfo = helpinfo return string.find(t.helpinfo,"^<%?xml") and true or false end function reporters.help(t,...) if xmlfound(t) then showhelp(t,...) else reporthelp(t,...) end end function reporters.export(t,methods,filename) if not xmlfound(t) then return exporthelp(t) end if not methods or methods == "" then methods = environment.arguments["exporthelp"] end if not filename or filename == "" then filename = environment.files[1] end dofile(resolvers.findfile("trac-exp.lua","tex")) local exporters = logs.exporters if not exporters or not methods then return exporthelp(t) end if methods == "all" then methods = table.keys(exporters) elseif type(methods) == "string" then methods = utilities.parsers.settings_to_array(methods) else return exporthelp(t) end if type(filename) ~= "string" or filename == "" then filename = false elseif file.pathpart(filename) == "" then t.report("export file %a will not be saved on the current path (safeguard)",filename) return end for i=1,#methods do local method = methods[i] local exporter = exporters[method] if exporter then local result = exporter(t,method) if result and result ~= "" then if filename then local fullname = file.replacesuffix(filename,method) t.report("saving export in %a",fullname) io.savedata(fullname,result) else reporters.lines(t,result) end else t.report("no output from exporter %a",method) end else t.report("unknown exporter %a",method) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-inj.mkvi0000644000175000017500000001660612130411274024257 0ustar norbertnorbert%D \module %D [ file=page-inj, %D version=2013.02.10, %D title=\CONTEXT\ Page Module, %D subtitle=Injections, %D author=Wolfgang Schuster \& Hans Hagen, %D date=\currentdate, %D copyright=Wolfgang Schuster \& Hans Hagen, %D license=see context related readme files (gpl)] %D This module is based on an idea and prototype by Wolfgang but instead of %D injectioning into a page constructor we injection it into the regular shipout %D handler because that way we get page numbering. It's a sort of variation %D on postponing but the content does not end up in the regular page flow, so %D it's closer to page figures but without the usual page builder. %D %D This module is following the mkvi way of rendering setups and configuration %D and is somewhat experimental. Probably more alternatives will be added. This %D could become a delayed loaded module at some point (no real consequences). \unprotect \registerctxluafile{page-inj}{1.001} \installcorenamespace {pageinjection} \installcorenamespace {pageinjectionalternative} \installcorenamespace {pageinjectionrenderings} \installframedcommandhandler \??pageinjection {pageinjection} \??pageinjection \installcommandhandler \??pageinjectionalternative {pageinjectionalternative} \??pageinjectionalternative \def\page_boxes_flush_before{\ctxcommand{page_injections_flush_before()}} \def\page_boxes_flush_after {\ctxcommand{page_injections_flush_after ()}} \def\page_injections_flush_saved#name#parameters% {\begingroup \edef\currentpageinjection{#name}% \getdummyparameters[#parameters]% \edef\currentpageinjectionalternative {\pageinjectionparameter \c!alternative }% \edef\p_page_injectionalternative_rederingsetup{\pageinjectionalternativeparameter\c!renderingsetup}% \page_injections_nextpage \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}% \endgroup} \unexpanded\def\pageinjection {\begingroup \dodoubleempty\page_injections_direct} \def\page_injections_direct[#1][#2]% name parameters | settings parameters | name | parameters {\doifassignmentelse{#1} {\doifassignmentelse{#2} {\page_injections_direct_settings_parameters{#1}{#2}} {\page_injections_direct_parameters {#1}}} {\doifassignmentelse{#2} {\page_injections_direct_name_parameters {#1}{#2}} {\page_injections_direct_name {#1}}}} \def\page_injections_direct_settings_parameters#settings% #parameters% {\let\currentpageinjection\empty \checkpageinjectionparent \setupcurrentpageinjection[#settings]% \page_injections_direct_indeed} \def\page_injections_direct_parameters% #parameters% {\let\currentpageinjection\empty \checkpageinjectionparent \page_injections_direct_indeed} \def\page_injections_direct_name_parameters#name% #parameters% {\edef\currentpageinjection{#name}% \checkpageinjectionparent \page_injections_direct_indeed} \def\page_injections_direct_name#name% {\edef\currentpageinjection{#name}% \checkpageinjectionparent \page_injections_direct_indeed{}} \def\page_injections_direct_indeed% #parameters% {\edef\p_page_injections_state{\pageinjectionparameter\c!state}% \edef\p_page_injections_delay{\pageinjectionparameter\c!delay}% \edef\p_page_injections_page {\pageinjectionparameter\c!page }% \ifx\p_page_injections_delay\v!yes \expandafter\page_injections_direct_indeed_yes \else \expandafter\page_injections_direct_indeed_nop \fi} \def\page_injections_direct_indeed_yes#parameters% {\ctxcommand{page_injections_save{ name = "\currentpageinjection", state = "\p_page_injections_state", userdata = \!!bs\normalunexpanded{#parameters}\!!es }}% \endgroup} \def\page_injections_direct_indeed_nop#parameters% {\ifx\p_page_injections_page\empty \page \else \page[\p_page_injections_page]% \fi \getdummyparameters[#parameters]% \page_injections_place \endgroup} \def\page_injections_place {\edef\currentpageinjectionalternative {\pageinjectionparameter \c!alternative }% \edef\p_page_injectionalternative_rederingsetup{\pageinjectionalternativeparameter\c!renderingsetup}% \page_injections_nextpage \ifx\currentpageinjectionalternative\v!none \else % increment counter but don’t generate output \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}% \fi} \def\page_injections_nextpage {\edef\p_page_injections_pagestate{\pageinjectionparameter\c!pagestate}% \ifx\p_page_injections_pagestate\v!stop \else \edef\p_page_injections_n{\pageinjectionparameter\c!n}% \ifx\p_page_injections_n\empty \let\p_page_injections_n\plusone \fi \dorecurse\p_page_injections_n {\incrementcounter[\s!realpage]% \incrementcounter[\s!userpage]}% \fi} \definepageinjectionalternative[\v!figure][\c!renderingsetup=\??pageinjectionrenderings:\v!figure] \definepageinjectionalternative[\v!buffer][\c!renderingsetup=\??pageinjectionrenderings:\v!buffer] \definepageinjectionalternative[\v!setups][\c!renderingsetup=\??pageinjectionrenderings:\s!setup ] \startsetups[\??pageinjectionrenderings:\v!figure] \dontleavehmode\externalfigure[\dummyparameter\c!name][\c!factor=\v!max] \stopsetups \startsetups[\??pageinjectionrenderings:\s!setup] \setups[\dummyparameter\c!setup]% kind of redundant but fits in \stopsetups \startsetups[\??pageinjectionrenderings:\v!buffer] \getbuffer[\dummyparameter\c!name]% \stopsetups % \setuppaper % [\c!method=\v!pageinjection] \setuppageinjection [ \c!width=\paperwidth, \c!height=\paperheight, \c!frame=\v!off, \c!offset=\v!overlay, \c!delay=\v!no, \c!state=\v!next, \c!alternative=\v!figure] \definepageinjection[\v!previouspage][\c!delay=\v!yes,\c!state=\v!previous] \definepageinjection[\v!nextpage] [\c!delay=\v!yes,\c!state=\v!next] \definepageinjection[\v!here] % direct \definepageinjection[\v!empty] [\c!alternative=\v!none] %definepageinjection[\v!chapter] [\v!previouspage][\c!pagestate=\v!stop] \protect \endinput % \enabletrackers[pagebuilder.injections] % % \setuppageinjection[offset=2em] % % \definepageinjection[chapter][previouspage][pagestate=stop] % \definepageinjection[later] [delay=yes,state=+2] % % \useMPlibrary[dum] % % \starttext % % \startchapter[title={Insert pages before/after the current page}] % % \dorecurse{10}{one: \input ward\par} % % \pageinjection[previouspage][name=dummy-1] % % \dorecurse{20}{two: \input ward\par} \page % % \pageinjection[nextpage][name=dummy-2] % \pageinjection[later] [name=dummy-4] % \pageinjection[delay=yes,state=+2][name=dummy-5] % % \dorecurse{100}{three: \input ward\par} % % \stopchapter % % \startbuffer[whatever] % \dorecurse{10}{whatever #1 } % \stopbuffer % % \startchapter[title={Insert pages at the current location}] % % \dorecurse{10}{\input ward\par} % % \pageinjection[direct][name=dummy-3] % \pageinjection[direct][alternative=buffer,name=whatever] % % \dorecurse{10}{\input ward\par} % % \stopchapter % % \setuphead % [chapter] % [beforesection={\pageinjection[empty]}, % insidesection={\pageinjection[chapter][name=\structureuservariable{image}]}] % % \startchapter[title={Combine both mechanism}][name=dummy-4] % % \dorecurse{10}{\input ward\par} % % \stopchapter % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-neg.lua0000644000175000017500000000514212130411274024112 0ustar norbertnorbertif not modules then modules = { } end modules ['attr-neg'] = { version = 1.001, comment = "companion to attr-neg.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this module is being reconstructed and code will move to other places -- we can also do the nsnone via a metatable and then also se index 0 local format = string.format local attributes, nodes, utilities, logs, backends = attributes, nodes, utilities, logs, backends local commands, context, interfaces = commands, context, interfaces local tex = tex local states = attributes.states local tasks = nodes.tasks local nodeinjections = backends.nodeinjections local settexattribute = tex.setattribute local variables = interfaces.variables local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex --- negative / positive attributes.negatives = attributes.negatives or { } local negatives = attributes.negatives local a_negative = attributes.private("negative") local v_none = interfaces.variables.none negatives.data = allocate() negatives.attribute = a_negative negatives.registered = allocate { [variables.positive] = 1, [variables.negative] = 2, } local data = negatives.data local registered = negatives.registered local function extender(negatives,key) if key == "none" then -- v_none then local d = data[1] negatives.none = d return d end end local function reviver(data,n) if n == 1 then local d = nodeinjections.positive() -- called once data[1] = d return d elseif n == 2 then local d = nodeinjections.negative() -- called once data[2] = d return d end end setmetatableindex(negatives, extender) setmetatableindex(negatives.data, reviver) negatives.handler = nodes.installattributehandler { name = "negative", namespace = negatives, initializer = states.initialize, finalizer = states.finalize, processor = states.process, } 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 context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-bck.mkvi0000644000175000017500000001735312130411274024240 0ustar norbertnorbert%D \module %D [ file=pack-bck, % moved from pack-rul, %D version=20111115, % 1998.10.16, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Simple Backgrounds, %D author=Hans Hagen \& Wolfgang Schuster, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Simple Backgrounds} %D The code here is already pretty old and is used for simple %D backgrounds. As it is still used WS adapted the code to the %D new command handler methods so that it gets a second life. So %D it made sense to mkvi ir as well. Some more code is moved here %D too. %D \macros %D {setupbackground,startbackground,background} %D %D The section deals with backgrounds in the running text. This %D means that texts is to be collected and split over pages. To %D show what can be done, we provide this part of the %D documentation with some gray background and a red frame. %D Both the background and frame can have all characteristics %D of \type{\framed}. %D %D \starttyping %D \setupbackground %D [backgroundoffset=4pt, %D background=screen, %D frame=on, %D framecolor=red, %D leftoffset=2pt] %D \stoptyping %D %D The implementation is not that sophisticated, but suffices. %D The main problem with this kind of functionality is to get %D the spacing all right. %D %D Specifying the background is more or less the same as %D specifying a framed box. %D %D \showsetup{setupbackground} %D %D {\em This mechanism is sort of obsolete and textbackgrounds should %D be used instead.} \unprotect \installcorenamespace {background} \installframedcommandhandler \??background {background} \??background % The mode is not that public an dmostlu an initial mode: % % 0 : no split % 1 : no split, honoring leftskip (messy) % 2 : split % 3 : split, honoring leftskip (messy) % % While processing the modes will change from 3->1 or 2->0. Don't % depend on the mode being public currently as it could become a % key. \setnewconstant\backgroundsplitmode\plusthree \appendtoks \setuevalue{\e!start\currentbackground}{\pack_backgrounds_start [\currentbackground]}% \setuevalue{\e!stop \currentbackground}{\pack_backgrounds_stop }% \setuevalue {\currentbackground}{\pack_backgrounds_direct[\currentbackground]}% \to \everydefinebackground \unexpanded\def\pack_backgrounds_start[#tag]% {\endgraf \begingroup \def\currentbackground{#tag}% \doifelse{\backgroundparameter\c!state}\v!start {\dosingleempty\pack_backgrounds_start_indeed} {\dosingleempty\pack_backgrounds_start_ignore}} \def\pack_backgrounds_start_indeed[#settings]% {\setupcurrentbackground[#settings,\c!state=\v!start,\c!offset=\v!overlay]% \let\pack_backgrounds_stop\pack_backgrounds_stop_indeed \setbox0\vbox\bgroup \vbox to \lineheight{}\vskip\zeropoint \blank[\v!disable] \leftskip \backgroundparameter\c!leftoffset \rightskip\backgroundparameter\c!rightoffset} \def\pack_backgrounds_start_ignore[#settings]% {\let\pack_backgrounds_stop\pack_backgrounds_stop_ignore} \let\pack_backgrounds_stop\relax \unexpanded\def\pack_backgrounds_stop_indeed % we shoul duse the fast background variant of framed {\endgraf \removelastskip \egroup \dimen2\leftskip % new ** \forgetall \ifinsidefloat \backgroundsplitmode\zerocount \fi \ifcase\backgroundsplitmode \inheritedbackgroundframed{\box0}% \or \hskip\dimen2 \inheritedbackgroundframed{\box0}% \else \splitmaxdepth\boxmaxdepth \splittopskip\topskip \setbox2\vsplit0 to \lineheight % get rid of fake line \doloop {\ifdim\pagetotal=\zeropoint % empty page \scratchdimen\textheight \backgroundsplitmode\plusone % split to max height \else \setbox2\vbox{\backgroundparameter\c!before}% \scratchdimen\dimexpr\pagegoal-\ht2-\pagetotal\relax \backgroundsplitmode\plustwo % split to partial height \fi \advance\scratchdimen\dimexpr-\backgroundparameter\c!topoffset-\backgroundparameter\c!bottomoffset\relax \ifdim\scratchdimen>2\lineheight\relax % reasonable, will be configurable \ifdim\ht0>\scratchdimen % larger than page \setbox2\vsplit0 to \scratchdimen \else \setbox2\box0 \backgroundsplitmode\zerocount % no split \fi \setbox2\vbox \ifcase\backgroundsplitmode\or to \textheight \fi % max split {\vskip\backgroundparameter\c!topoffset \unvcopy2 \prevdepth\dp2 \obeydepth \vskip\backgroundparameter\c!bottomoffset \vfill} \backgroundparameter\c!before \ifcase\backgroundsplitmode\or\or % partial split \ifdim\pagegoal<\maxdimen \pagegoal=1.2\pagegoal % be a bit more tolerant \fi \fi \startlinecorrection \ifnum\backgroundsplitmode=\plusthree \hskip\dimen2 % new ** \fi \inheritedbackgroundframed{\box2}% \stoplinecorrection \ifcase\backgroundsplitmode % no split \backgroundparameter\c!after \else % some split \page_otr_fill_and_eject_page % no \page ! \fi \else \page \fi \ifdim\ht0>\zeropoint \else \exitloop \fi}% \fi \endgroup \endgraf} \unexpanded\def\pack_backgrounds_stop_ignore {\endgroup \endgraf} \unexpanded\def\pack_backgrounds_direct[#tag]% {\begingroup \def\currentbackground{#tag}% \doifelse{\backgroundparameter\c!state}\c!start \pack_backgrounds_direct_indeed \pack_backgrounds_direct_ignore} \def\pack_backgrounds_direct_indeed {\dowithnextboxcs\pack_backgrounds_direct_finish\vbox} \def\pack_backgrounds_direct_finish {\setupcurrentbackground[\c!offset=\v!overlay]% \inheritedbackgroundframed{\flushnextbox}% \endgroup} \def\pack_backgrounds_direct_ignore {\endgroup} \definebackground[\v!background] \ifdefined\startbackground \else \expandafter\let\startbackground\csname\e!start\v!background\endcsname \expandafter\let\stopbackground \csname\e!stop \v!background\endcsname \expandafter\let\background \csname \v!background\endcsname \fi \setupbackground [\c!leftoffset=.5\bodyfontsize, \c!rightoffset=\backgroundparameter\c!leftoffset, \c!topoffset=\zeropoint, \c!bottomoffset=\backgroundparameter\c!topoffset, \c!state=\v!start, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!frame=\v!off, \c!depth=\zeropoint, % \c!color=, % \c!background=\v!screen, % \c!backgroundcolor=\backgroundparameter\c!color, % \c!screen=\defaultbackgroundscreen, % \c!background=\v!color, \c!backgroundcolor=lightgray, % \c!before=, \c!after=] %D \startbuffer %D \setupbackground[state=start,frame=on] %D %D \startbackground %D \input ward %D \stopbackground %D %D \background{\input ward\par} %D %D \setupbackground[state=stop] %D %D \startbackground %D \input ward %D \stopbackground %D %D \background{\input ward\par} %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {backgroundline} %D %D For the moment an undocumented feature, but a candidate for going public. \unexpanded\def\backgroundline[#color]% {\dontleavehmode \dowithnextbox{\pack_backgrounds_add_to_nextbox{#color}}\hbox} \unexpanded\def\pack_backgrounds_add_to_nextbox#color% handy helper {\hbox {\dousecolorparameter{#color}% \vrule \!!width \nextboxwd \!!height\nextboxht \!!depth \nextboxdp \hskip-\nextboxwd \flushnextbox}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/chem-ini.lua0000644000175000017500000000241612130411274024063 0ustar norbertnorbertif not modules then modules = { } end modules ['chem-ini'] = { version = 1.001, comment = "companion to chem-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local lpegmatch, patterns = lpeg.match, lpeg.patterns local trace_molecules = false trackers.register("chemistry.molecules", function(v) trace_molecules = v end) local report_chemistry = logs.reporter("chemistry") local context = context local cpatterns = patterns.context chemistry = chemistry or { } local chemistry = chemistry --[[

The next code started out as adaptation of code from Wolfgang Schuster as posted on the mailing list. The current version supports nested braces and unbraced integers as scripts.

]]-- local moleculeparser = cpatterns.scripted chemistry.moleculeparser = moleculeparser function chemistry.molecule(str) return lpegmatch(moleculeparser,str) end function commands.molecule(str) if trace_molecules then local rep = lpegmatch(moleculeparser,str) report_chemistry("molecule %a becomes %a",str,rep) context(rep) else context(lpegmatch(moleculeparser,str)) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-mis.mkii0000644000175000017500000005447211754241457024301 0ustar norbertnorbert%D \module %D [ file=lang-mis, %D version=1997.03.20, % used to be supp-lan.tex %D title=\CONTEXT\ Language Macros, %D subtitle=Compounds, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Compounds} %D \gdef\starttest %D {\blank %D \noindent %D \halign\bgroup\tt##\hskip2em&##\hskip2em&##\cr} %D %D \gdef\stoptest %D {\egroup %D \blank} %D %D \gdef\test#1% %D {\defconvertedargument\ascii{#1}\ascii&\hyphenatedword{#1}\cr} \unprotect %D One of \TEX's strong points in building paragraphs is the way %D hyphenations are handled. Although for real good hyphenation %D of non||english languages some extensions to the program are %D needed, fairly good results can be reached with the standard %D mechanisms and an additional macro, at least in Dutch. %D \CONTEXT\ originates in the wish to typeset educational %D materials, especially in a technical environment. In %D production oriented environments, a lot of compound words %D are used. Because the Dutch language poses no limits on %D combining words, we often favor putting dashes between those %D words, because it facilitates reading, at least for those %D who are not that accustomed to it. %D %D In \TEX\ compound words, separated by a hyphen, are not %D hyphenated at all. In spite of the multiple pass paragraph %D typesetting this can lead to parts of words sticking into %D the margin. The solution lays in saying \type %D {spoelwater||terugwinunit} instead of \type %D {spoelwater-terugwinunit}. By using a one character command %D like \type {|}, delimited by the same character \type {|}, %D we get ourselves both a decent visualization (in \TEXEDIT\ %D and colored verbatim we color these commands yellow) and an %D efficient way of combining words. %D %D The sequence \type{||} simply leads to two words connected by %D a hyphen. Because we want to distinguish such a hyphen from %D the one inserted when \TEX\ hyphenates a word, we use a bit %D longer one. %D %D \hyphenation {spoel-wa-ter te-rug-win-unit} %D %D \starttest %D \test {spoelwater||terugwinunit} %D \stoptest %D %D As we already said, the \type{|} is a command. This commands %D accepts an optional argument before it's delimiter, which is %D also a \type{|}. %D %D \hyphenation {po-ly-meer che-mie} %D %D \starttest %D \test {polymeer|*|chemie} %D \stoptest %D %D Arguments like \type{*} are not interpreted and inserted %D directly, in contrary to arguments like: %D %D \starttest %D \test {polymeer|~|chemie} %D \test {|(|polymeer|)|chemie} %D \test {polymeer|(|chemie|)| } %D \stoptest %D %D Although such situations seldom occur |<|we typeset thousands %D of pages before we encountered one that forced us to enhance %D this mechanism|>| we also have to take care of comma's. %D %D \hyphenation {uit-stel-len} %D %D \starttest %D \test {op||, in|| en uitstellen} %D \stoptest %D %D The next special case (concerning quotes) was brought to my %D attention by Piet Tutelaers, one of the driving forces %D behind rebuilding hyphenation patterns for the dutch %D language.\footnote{In 1996 the spelling of the dutch %D language has been slightly reformed which made this topic %D actual again.} We'll also take care of this case. %D %D \starttest %D \test {AOW|'|er} %D \test {cd|'|tje} %D \test {ex|-|PTT|'|er} %D \test {rock|-|'n|-|roller} %D \stoptest %D %D Tobias Burnus pointed out that I should also support %D something like %D %D \starttest %D \test {well|_|known} %D \stoptest %D %D to stress the compoundness of hyphenated words. %D %D Of course we also have to take care of the special case: %D %D \starttest %D \test {text||color and ||font} %D \stoptest %D \macros %D {installdiscretionaries} %D %D The mechanism described here is one of the older inner parts %D of \CONTEXT. The most recent extensions concerns some %D special cases as well as the possibility to install other %D characters as delimiters. The prefered way of specifying %D compound words is using \type{||}, which is installed by: %D %D \starttyping %D \installdiscretionaries || - %D \stoptyping %D %D Some alternative definitions are: %D %D \startbuffer %D \installdiscretionaries ** - %D \installdiscretionaries ++ - %D \installdiscretionaries // - %D \installdiscretionaries ~~ - %D \stopbuffer %D %D \typebuffer %D %D after which we can say: %D %D \bgroup %D \getbuffer %D \starttest %D \test {test**test**test} %D \test {test++test++test} %D \test {test//test//test} %D \test {test~~test~~test} %D \stoptest %D \egroup %D \macros %D {compoundhyphen, %D beginofsubsentence,endofsubsentence} %D %D Now let's go to the macros. First we define some variables. %D In the main \CONTEXT\ modules these can be tuned by a setup %D command. Watch the (maybe) better looking compound hyphen. \ifx\compoundhyphen \undefined \def\compoundhyphen{\hbox{-\kern-.25ex-}} \fi \ifx\beginofsubsentence \undefined \def\beginofsubsentence{\hbox{---}} \fi \ifx\endofsubsentence \undefined \def\endofsubsentence {\hbox{---}} \fi %D The last two variables are needed for subsentences %D |<|like this one|>| which we did not yet mention. %D %D We want to enable breaking but at the same time don't want %D compound characters like |-| or || to be separated from the %D words. \TEX\ hackers will recognise the next two macro's: \ifx\prewordbreak \undefined \def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax} \fi %ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount \prewordbreak } \fi \ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount \hskip\zeropoint\relax} \fi \ifx\hspaceamount \undefined \def\hspaceamount#1#2{.16667em} \fi % language specific %D \macros %D {beginofsubsentencespacing,endofsubsentencespacing} %D %D In the previous macros we provided two hooks which can be %D used to support nested sub||sentences. In \CONTEXT\ these %D hooks are used to insert a small space when needed. \ifx\beginofsubsentencespacing\undefined \let\beginofsubsentencespacing\relax \fi \ifx\endofsubsentencespacing \undefined \let\endofsubsentencespacing \relax \fi %D The following piece of code is a torture test compound %D hndling. The \type {\relax} before the \type {\ifmmode} is %D needed because of the alignment scanner (in \ETEX\ this %D problem is not present because there a protected macro is %D not expanded. Thanks to Tobias Burnus for providing this %D example. %D %D \startformula %D \left|f(x_n)-{1\over2}\right| = %D {\cases{|{1\over2}-x_n| &for $0\le x_n < {1\over2}$\cr %D |x_n-{1\over2}| &for ${1\over2}\zeropoint (\prewordbreak \else \prewordbreak\discretionary{}{(-}{(}\prewordbreak \fi} \definetextmodediscretionary ~ {\prewordbreak\discretionary{-}{}{\thinspace}\postwordbreak} \definetextmodediscretionary ' {\prewordbreak\discretionary{-}{}{'}\postwordbreak} \definetextmodediscretionary ^ {\prewordbreak\discretionary{\hbox{$|$}}{}{\hbox{$|$}}% \allowbreak\postwordbreak} % bugged \definetextmodediscretionary < {\beginofsubsentence\prewordbreak\beginofsubsentencespacing} \definetextmodediscretionary > {\endofsubsentencespacing\prewordbreak\endofsubsentence} \definetextmodediscretionary = {\prewordbreak\midsentence\prewordbreak} % {\prewordbreak\compoundhyphen} % french \definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\empty{:}:} \definetextmodediscretionary ; {\removeunwantedspaces\prewordbreak\kern\hspaceamount\empty{;};} \definetextmodediscretionary ? {\removeunwantedspaces\prewordbreak\kern\hspaceamount\empty{?}?} \definetextmodediscretionary ! {\removeunwantedspaces\prewordbreak\kern\hspaceamount\empty{!}!} \definetextmodediscretionary * {\prewordbreak\discretionary{-}{}{\kern.05em}\prewordbreak} % spanish \definetextmodediscretionary ?? {\prewordbreak\questiondown} \definetextmodediscretionary !! {\prewordbreak\exclamdown} % \ifx\normalcompound\undefined \let\normalcompound=| \fi %D \installdiscretionary | + %D \installdiscretionary + = \def\defaultdiscretionaryhyphen{\compoundhyphen} \installdiscretionary | \defaultdiscretionaryhyphen % installs in ctx and prt will fall back on it %D \macros %D {fakecompoundhyphen} %D %D In headers and footers as well as in active pieces of text %D we need a dirty hack. Try to imagine what is needed to %D savely break the next text across a line and at the same %D time make the words interactive. %D %D \starttyping %D \goto{Some||Long||Word} %D \stoptyping \def\fakecompoundhyphen {\def\|{\mathortext\vert\dofakecompoundhyphen}} \def\dofakecompoundhyphen {\def##1|% {\doifelsenothing{##1}\compoundhyphen{##1}% \kern\compoundbreakpoint\allowbreak}} %D \macros %D {midworddiscretionary} %D %D If needed, one can add a discretionary hyphen using \type %D {\midworddiscretionary}. This macro does the same as %D \PLAIN\ \TEX's \type {\-}, but, like the ones implemented %D earlier, this one also looks ahead for spaces and grouping %D tokens. \def\midworddiscretionary {\futurelet\next\domidworddiscretionary} \def\domidworddiscretionary {\ifx\next\blankspace\else \ifx\next\bgroup \else \ifx\next\egroup \else \discretionary{-}{}{}% \fi\fi\fi} %D \macros %D {installcompoundcharacter} %D %D When Tobias Burnus started translating the dutch manual of %D \PPCHTEX\ into german, he suggested to let \CONTEXT\ support %D the \type{german.sty} method of handling compound %D characters, especially the umlaut. This package is meant for %D use with \PLAIN\ \TEX\ as well as \LATEX. %D %D I decided to implement compound character support as %D versatile as possible. As a result one can define his own %D compound character support, like: %D %D \starttyping %D \installcompoundcharacter "a {\"a} %D \installcompoundcharacter "e {\"e} %D \installcompoundcharacter "i {\"i} %D \installcompoundcharacter "u {\"u} %D \installcompoundcharacter "o {\"o} %D \installcompoundcharacter "s {\SS} %D \stoptyping %D %D or even %D %D \starttyping %D \installcompoundcharacter "ck {\discretionary {k-}{k}{ck}} %D \installcompoundcharacter "ff {\discretionary{ff-}{f}{ff}} %D \stoptyping %D %D The support is not limited to alphabetic characters, so the %D next definition is also valid. %D %D \starttyping %D \installcompoundcharacter ". {.\doifnextcharelse{\spacetoken}{}{\kern.125em}} %D \stoptyping %D %D The implementation looks familiar and uses the same tricks as %D mentioned earlier in this module. We take care of two %D arguments, which complicates things a bit. \def\@nc@{@nc@} % normal character \def\@cc@{@cc@} % compound character \def\@cs@{@cs@} % compound characters \def\@cx@{@cx@} % compound definition %D When we started working on MK IV code, we needed a different %D approach for defining the active character itself. In MK II as %D well as in MK IV we now use the catcode vectors. \chardef\compoundcharactermode\plusone \def\installcompoundcharacter #1#2#3 #4% {#4} no grouping {\ifcase\compoundcharactermode % ignore mode \else \chardef\thecompoundcharacter`#1% \@EA\chardef\csname\@nc@\string#1\endcsname\thecompoundcharacter \def\!!stringa{#3}% \@EA\def\csname\ifx\!!stringa\empty\@cc@\else\@cs@\fi\detokenize{#1#2#3}\endcsname{#4}% \setevalue{\@cx@\detokenize{#1}}{\noexpand\handlecompoundcharacter{\detokenize{#1}}}% beter nr's % \@EA\letcatcodecommand\@EA\prtcatcodes\@EA\thecompoundcharacter\csname\@cx@\detokenize{#1}\endcsname % \@EA\letcatcodecommand\@EA\texcatcodes\@EA\thecompoundcharacter\csname\@cx@\detokenize{#1}\endcsname \@EA\letcatcodecommand\@EA\ctxcatcodes\@EA\thecompoundcharacter\csname\@cx@\detokenize{#1}\endcsname \fi} %D In order to serve the language specific well, we will introduce %D a namespace: % \ifx\currentlanguage\undefined \let\compoundcharacterclass\empty % \else % \def\compoundcharacterclass{\currentlanguage} % \fi \def\@cc@{@cc@\compoundcharacterclass} % compound character \def\@cs@{@cs@\compoundcharacterclass} % compound characters %D We can also ignore definitions (needed in for instance \XML). Beware, %D this macro is supposed to be used grouped! \def\ignorecompoundcharacter {\chardef\compoundcharactermode\zerocount} \let\restorecompoundcharacter \gobbleoneargument % obsolete \let\enableactivediscretionaries\relax % obsolete %D In handling the compound characters we have to take care of %D \type{\bgroup} and \type{\egroup} tokens, so we end up with %D a multi||step interpretation macro. We look ahead for a %D \type{\bgroup}, \type{\egroup} or \type{\blankspace}. Being %D no user of this mechanism, the credits for testing them goes %D to Tobias Burnus, the first german user of \CONTEXT. %D %D We define these macros as \type{\long} because we can %D expect \type{\par} tokens. We need to look into the future %D with \type{\futurelet} to prevent spaces from %D disappearing. \def\handlecompoundcharacter#1% {\def\xhandlecompoundcharacter{\dohandlecompoundcharacter{#1}}% \futurelet\next\xhandlecompoundcharacter} \def\dohandlecompoundcharacter {\ifx\next\bgroup %\@EA\dodohandlecompoundcharacter % handle "{ee} -> \"ee %\@EA\gobbleoneargument % forget "{ee} -> ee \@EA\handlecompoundcharacterone % ignore "{ee} -> "ee \else\ifx\next\egroup \@EAEAEA\donohandlecompoundcharacter \else\ifx\next\blankspace \@EA\@EAEAEA\@EA\donohandlecompoundcharacter \else \@EA\@EAEAEA\@EA\dodohandlecompoundcharacter \fi\fi\fi} \def\donohandlecompoundcharacter#1{\csname\@nc@\string#1\endcsname} \def\dododohandlecompoundcharacter {\ifx\next\bgroup \@EA\handlecompoundcharacterone \else\ifx\next\egroup \@EAEAEA\handlecompoundcharacterone \else\ifx\next\blankspace \@EA\@EAEAEA\@EA\handlecompoundcharacterone \else \@EA\@EAEAEA\@EA\handlecompoundcharactertwo \fi\fi\fi} \def\dodohandlecompoundcharacter#1#2% preserve space {\def\xdodohandlecompoundcharacter{\dododohandlecompoundcharacter#1#2}% \futurelet\next\xdodohandlecompoundcharacter} %D Besides taken care of the grouping and space tokens, we have %D to deal with three situations. First we look if the next %D character equals the first one, if so, then we just insert %D the original. Next we look if indeed a compound character is %D defined. We either execute the compound character or just %D insert the first. So we have %D %D \starttyping %D %D \stoptyping %D %D In later modules we will see how these commands are used. \long\def\handlecompoundcharacterone#1#2% {\if\string#1\string#2% was: \ifx#1#2% \def\next{\csname\@nc@\string#1\endcsname}% \else\ifcsname\@cc@\string#1\string#2\endcsname \def\next{\csname\@cc@\string#1\string#2\endcsname}% \else \def\next{\csname\@nc@\string#1\endcsname#2}% \fi\fi \next} \long\def\handlecompoundcharactertwo#1#2#3% {\if\string#1\string#2% \def\next{\csname\@nc@\string#1\endcsname#3}% \else\ifcsname\@cs@\string#1\string#2\string#3\endcsname \def\next{\csname\@cs@\string#1\string#2\string#3\endcsname}% \else\ifcsname\@cc@\string#1\string#2\endcsname \def\next{\csname\@cc@\string#1\string#2\endcsname#3}% \else \def\next{\csname\@nc@\string#1\endcsname#2#3}% \fi\fi\fi \next} %D For very obscure applications (see for an application \type %D {lang-sla.tex}) we provide: \def\simplifiedcompoundcharacter#1#2% {\ifcsname\@cc@\string#1\string#2\endcsname \@EA\@EA\@EA\firstofoneargument\csname\@cc@\string#1\string#2\endcsname \else #2% \fi} %D \macros %D {disablediscretionaries,disablecompoundcharacter} %D %D Occasionally we need to disable this mechanism. For the %D moment we assume that \type {|} is used. \let\disablediscretionaries \ignorediscretionaries \let\disablecompoundcharacters\ignorecompoundcharacter %D \macros %D {normalcompound} %D %D Handy in for instance XML. (Kind of obsolete) \ifx\normalcompound\undefined \let\normalcompound=| \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-typ.lua0000644000175000017500000000416512130411274024134 0ustar norbertnorbertif not modules then modules = { } end modules ['node-typ'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfvalues = utf.values local currentfont = font.current local fontparameters = fonts.hashes.parameters local hpack = node.hpack local vpack = node.vpack local fast_hpack = nodes.fasthpack local nodepool = nodes.pool local newglyph = nodepool.glyph local newglue = nodepool.glue typesetters = typesetters or { } local function tonodes(str,fontid,spacing) -- quick and dirty local head, prev = nil, nil if not fontid then fontid = currentfont() end local fp = fontparameters[fontid] local s, p, m if spacing then s, p, m = spacing, 0, 0 else s, p, m = fp.space, fp.space_stretch, fp,space_shrink end local spacedone = false for c in utfvalues(str) do local next if c == 32 then if not spacedone then next = newglue(s,p,m) spacedone = true end else next = newglyph(fontid or 1,c) spacedone = false end if not next then -- nothing elseif not head then head = next else prev.next = next next.prev = prev end prev = next end return head end typesetters.tonodes = tonodes function typesetters.hpack(str,fontid,spacing) return hpack(tonodes(str,fontid,spacing),"exactly") end function typesetters.fast_hpack(str,fontid,spacing) return fast_hpack(tonodes(str,fontid,spacing),"exactly") end function typesetters.vpack(str,fontid,spacing) -- vpack is just a hack, and a proper implentation is on the agenda -- as it needs more info etc than currently available return vpack(tonodes(str,fontid,spacing)) end --~ node.write(typesetters.hpack("Hello World!")) --~ node.write(typesetters.hpack("Hello World!",1,100*1024*10)) context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mmp.mkii0000644000175000017500000004025611754241457024317 0ustar norbertnorbert%D \module %D [ file=xtag-mmp, %D version=2000.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=Presentation MathML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \points should become \bodyfontsize % under reconstruction % % \starttext % \usemodule[mathml] \useXMLfilter[utf] % \unprotect % % \remapXMLsequence [mover] [CPA] \MMLpOVER % \remapXMLsequence [munder] [CPA] \MMLpUNDER % % \def\MMLpUNDER#1#2% % {\getXMLarguments{munder}{accent="false" #1}% % \withnexttwoXMLRelements\doMMLpUNDER#2} % % \def\MMLpOVER#1#2% % {\getXMLarguments{mover}{accent="false" #1}% % \withnexttwoXMLRelements\doMMLpOVER #2} % % \def\doMMLpUNDER % {\doifelse{\XMLpar{munder}{accent}{}}{true} % {\secondXMLRelement\firstXMLRelement} % {\mathop{\vtop{\mathsurround\zeropoint\ialign{\hss##\hss\crcr % \disabledelimiter\doMMLfiller\firstXMLRelement % \crcr\noalign{\kern3\points\nointerlineskip}% % \disabledelimiter\doMMLfiller\secondXMLRelement % \crcr\noalign{\kern3\points}}}}\limits}} % % \def\doMMLpOVER % {\doifelse{\XMLpar{mover}{accent}{}}{true} % {\secondXMLRelement\firstXMLRelement} % {\mathop{\vbox{\mathsurround\zeropoint\ialign{\hss##\hss\crcr\noalign{\kern3\points}% % \disabledelimiter\doMMLfiller\secondXMLRelement % \crcr\noalign{\kern3\points\nointerlineskip}% % \disabledelimiter\doMMLfiller\firstXMLRelement % \crcr}}}\limits}} % % \protect % % Normal: \startXMLdataa¯\stopXMLdata \par % Accent: \startXMLdatax¯\stopXMLdata \par % % \stoptext \writestatus{loading}{ConTeXt XML Macros / Presentational MathML} \unprotect \def\convertasciiafter#1#2% {\defconvertedargument\asciiafter{#2}% \@EA#1\@EA{\asciiafter}} \def\checkMMLoperator#1#2% temp hack {\unspaceargument#1\to\ascii \doifXMLentityelse\ascii{\getXMLentity\ascii}{#2}} \startXMLmapping [mml] \remapXMLsequence [mi] [CPA] \MMLpMI \remapXMLsequence [mn] [CPA] \MMLpMN \remapXMLsequence [mo] [CPA] \MMLpMO \def\MMLpmath#1#2% {\begingroup \getXMLarguments{mstyle}{#1}\setMMLpmathstyle{mstyle}#2% \endgroup} \def\MMLpMI#1#2% {\MMLpmath{#1}{\checkMMLoperator{#2}{#2}}} \def\MMLpMN#1#2% {\begingroup\rm\MMLpmath{#1}{#2}\endgroup} \def\MMLpMO#1#2% yes or no {\checkMMLoperator {#2} {\ConvertConstantAfter\doifinstringelse{\xmlrent}{#2} {#2}{\hbox{\MMLpmath{#1}{\ignorespaces#2\unskip}}}}} % \hbox ? \remapXMLsequence [mfenced] [CPA] \MMLpFENCED \def\doMMLleft #1{\pushmacro\left \let\left \empty\normalleft #1\popmacro\left} \def\doMMLright#1{\pushmacro\right\let\right\empty\normalright#1\popmacro\right} \let\MMLpopen \empty \let\MMLpclose\empty \def\MMLpFENCED#1#2% {\getXMLarguments{mfenced}{open="(" close=")" separators="" #1}% \edef\MMLpopen {\XMLpar{mfenced}{open}{}}% \edef\MMLpclose{\XMLpar{mfenced}{close}{}}% \ifx\MMLpopen\empty\else\doMMLleft\MMLpopen\fi \pushmacro\MMLpopen \pushmacro\MMLpclose \doifXMLparelse{mfenced}{separators} {\resetMMLseparator \encapsulateXMLR {}% {\pushmacro\myspecialnormalvert % hack \def\myspecialnormalvert{\;\vrule\;}% \grabMMLseparator{\XMLpar{mfenced}{separators}{}}% \popmacro\myspecialnormalvert} {}% {#2\empty}} {#2}% \popmacro\MMLpclose \popmacro\MMLpopen \ifx\MMLpclose\empty \ifx\MMLpopen\empty\else\right.\fi \else\doMMLright\MMLpclose\fi} \def\resetMMLseparator {\newcounter\MMLxxcounter \let\lastMMLseparator\empty} \def\grabMMLseparator#1% {\increment\MMLxxcounter \newcounter\MMLyycounter \expanded{\dograbMMLseparator#1\noexpand\relax}} \def\dograbMMLseparator {\increment\MMLyycounter \doifnextcharelse\relax {\lastMMLseparator\gobbleoneargument} {\doifnextcharelse\xmlrent\grabMMLseparatora\grabMMLseparatorb}} \def\grabMMLseparatora#1\xmlrent#2% {\ifnum\MMLxxcounter=\MMLyycounter\space \def\lastMMLseparator{\xmlrent{#2}}% \fi \dograbMMLseparator} \def\grabMMLseparatorb#1% better use \checkMMLoperator {\ifnum\MMLxxcounter=\MMLyycounter\space \doifXMLentityelse{#1} {\def\lastMMLseparator{\xmlrent{#1}}} {\def\lastMMLseparator{#1}}% \fi \dograbMMLseparator} \remapXMLsequence [menclose] [CPA] \MMLpENCLOSE \def\MMLpENCLOSE#1#2% {\getXMLarguments{menclose}{notation="" #1}% \doifelse{\XMLpar{menclose}{notation}{}}{longdiv} {\overline{)#2}} {#2}} \remapXMLsequence [mfrac] [CPA] \MMLpFRAC \def\MMLpFRAC#1#2% \above is suboptimal since the spacing changes {\withnexttwoXMLRelements {\getXMLarguments{mfrac}{linethickness="" #1}% \doifXMLparelse{mfrac}{linethickness} {\edef\theXMLpar{\XMLpar{mfrac}{linethickness}{1}}% \processaction [\theXMLpar] [ thin=>\scratchdimen=.2pt, medium=>\scratchdimen=.4pt, thick=>\scratchdimen=.8pt, unknown=>\setdimensionwithunit\scratchdimen{\theXMLpar}{}]% {{\firstXMLRelement}\above\scratchdimen{\secondXMLRelement}}} {\frac{\firstXMLRelement}{\secondXMLRelement}}}% #2} \remapXMLsequence [ms] [CPA] \MMLpSTRING \def\MMLpSTRING#1#2% {\MMLpTEXT{#1} {\getXMLarguments{mstyle}{#1}% \getXMLarguments{ms}{lquote="\xmlrent{quot}" rquote="\xmlrent{quot}" #1}% \XMLpar{ms}{lquote}{}\ignorespaces#2\unskip\unskip\XMLpar{ms}{rquote}{}}} \remapXMLsequence [mstyle] [CPA] \MMLpSTYLE \getXMLarguments {mstyle} {fontweight="" fontstyle="" mathstyle="" mathvariant="" background="" color=""} \def\MMLpSTYLE#1#2% {\getXMLarguments{mstyle}{#1}#2} \remapXMLsequence [mtext] [CPA] \MMLpTEXT \remapXMLsequence [merror] [CPA] \MMLpERROR \remapXMLsequence [mphantom] [CPA] \MMLpPHANTOM \remapXMLsequence [mpadded] [CPA] \MMLpPADDED \def\MMLpTEXT#1#2% {\hbox {\tf % else encoding problems \getXMLarguments{mstyle}{#1}% \doMMPpbackground{mstyle} {\doMMPpcolor{mstyle} {\setMMLptextstyle{mstyle}% \ignorespaces#2\unskip\unskip}}}} \def\setMMLpstyle#1% {\doifdefined{MMLpstyle:#1}{\getvalue{MMLpstyle:#1}}} \def\defineMMLstyle[#1]#2% {\setvalue{MMLpstyle:#1}{#2}} \defineMMLstyle[normal] {\tf} \defineMMLstyle[double-stuck] {\bf} \defineMMLstyle[bolditalic] {\bi} \defineMMLstyle[bold-italic] {\bi} \defineMMLstyle[boldslanted]{\bs} \defineMMLstyle[bold-slanted] {\bs} \defineMMLstyle[boldnormal] {\bf} \defineMMLstyle[bold] {\bf} \defineMMLstyle[slanted] {\sl} \defineMMLstyle[normalslanted]{\sl} \defineMMLstyle[italic] {\it} \defineMMLstyle[normalitalic] {\it} \defineMMLstyle[fraktur] {\bf} \defineMMLstyle[bold-fraktur] {\bf} \defineMMLstyle[script] {\tf} \defineMMLstyle[bold-script] {\bf} % and all kind of other crappy names \def\setMMLptextstyle#1% {\setMMLpstyle{\XMLpar{#1}{fontweight}{}\XMLpar{#1}{fontstyle}{}}} \def\setMMLpmathstyle#1% {\setMMLpstyle{\XMLpar{#1}{mathvariant}{}}} \def\doMMPpcolor#1#2% {\doifXMLparelse{#1}{color}{\color[\XMLpar{#1}{color}{}]{#2}}{#2}} \def\doMMPpbackground#1#2% {\doifXMLparelse{#1}{background} {\inframed [\c!frame=\v!off, \c!background=\v!color, \c!backgroundcolor=\XMLpar{#1}{background}{}] {#2}} {#2}} \def\MMLpERROR #1#2{\hbox{$\displaystyle#2$}} \def\MMLpPHANTOM#1#2{\phantom{\ignorespaces{}#2\unskip}} % watch spacing {} hack \def\MMLpPADDED #1#2{#2} \remapXMLsequence [mrow] [CPA] \MMLpROW \def\MMLpROW#1#2{#2} \remapXMLsequence [msqrt] [CPA] \MMLpSQRT \remapXMLsequence [mroot] [CPA] \MMLpROOT \def\MMLpSQRT#1#2% {\sqrt{#2}} \def\MMLpROOT#1#2% {\withnexttwoXMLRelements{\root{\secondXMLRelement}\of{\firstXMLRelement}}#2} \remapXMLsequence [msup] [CPA] \MMLpSUP \remapXMLsequence [msub] [CPA] \MMLpSUB \setupMMLappearance[scripts][\c!alternative=\v!a] \def\MMLpSUBP#1#2% {\withnexttwoXMLRelements {\doifelse\@@MMLscriptsalternative\v!a {{\firstXMLRelement}#1{\secondXMLRelement}} % both {} essential {\firstXMLRelement#1{\secondXMLRelement}}}% #2} \def\MMLpSUP#1{\MMLpSUBP ^} \def\MMLpSUB#1{\MMLpSUBP _} \remapXMLsequence [msubsup] [CPA] \MMLpSUBSUP \def\MMLpSUBSUP#1#2% {\withnextthreeXMLRelements {\firstXMLRelement _{\secondXMLRelement}^{\thirdXMLRelement}}% #2} \remapXMLsequence [mover] [CPA] \MMLpOVER \remapXMLsequence [munder] [CPA] \MMLpUNDER \remapXMLsequence [munderover] [CPA] \MMLpUNDEROVER % hack, cannot be nested \def\MMLpUNDER#1#2{\withnexttwoXMLRelements\doMMLpUNDER#2} \def\MMLpOVER #1#2{\withnexttwoXMLRelements\doMMLpOVER #2} \def\doMMLfiller#1% {\pushmacro\doMMLfiller \let\doMMLfiller\gobbleoneargument \gdef\dodoMMLfiller{\disablefiller\mathematics{#1}}% \setbox\scratchbox=\hbox {\def\normalorfiller##1##2% {\gdef\dodoMMLfiller{\enablefiller#1}% \let\normalorfiller\gobbletwoarguments}% $#1$}% \popmacro\doMMLfiller \dodoMMLfiller} \def\doMMLpUNDER {\mathop{\vtop{\mathsurround\zeropoint\ialign{\hss##\hss\crcr \disabledelimiter\doMMLfiller\firstXMLRelement \crcr\noalign{\kern3\points\nointerlineskip}% \disabledelimiter\doMMLfiller\secondXMLRelement \crcr\noalign{\kern3\points}}}}\limits} \def\doMMLpOVER {\mathop{\vbox{\mathsurround\zeropoint\ialign{\hss##\hss\crcr\noalign{\kern3\points}% \disabledelimiter\doMMLfiller\secondXMLRelement \crcr\noalign{\kern3\points\nointerlineskip}% \disabledelimiter\doMMLfiller\firstXMLRelement \crcr}}}\limits} \def\MMLpUNDEROVER#1#2% {\withnextthreeXMLRelements {\firstXMLRelement _{\disablefiller\disabledelimiter\secondXMLRelement}% ^{\disablefiller\disabledelimiter\thirdXMLRelement}}#2} \remapXMLsequence [mtable] [CPA] \MMLpTABLE \remapXMLsequence [mtr] [CPA] \MMLpTR \remapXMLsequence [mtd] [CPA] \MMLpTD \remapXMLsequence [mlabeledtr] [CPA] \MMLpLABELEDTR \unexpanded\def\@col@amp@{&} \def\MMLpTR#1#2{\collectbetweenXMLR{\@col@amp@}{#2}\the\XMLRtoks\crcr} \def\MMLpTD#1#2{#2} \def\MMLpLABELEDTR{\MMLpTR} \def\MMLpTABLEmapper#1#2#3% {\doifXMLparelse{mtable}{#1} {\newcounter\MMLcounter \def\docommand##1% {\increment\MMLcounter \let\MMLpREMAP\doMMLpREMAP \def\MMLsetting{##1}#3% remap list \expanded{\setupTABLE[column][\MMLcounter][#2=\MMLsetting]}}% \expanded{\processseparatedlist[\XMLpar{mtable}{#1}{}][ ]\noexpand\docommand}} {}} \def\MMLpTABLEmap#1#2#3% {\doifXMLparelse{mtbl}{#1} {\edef\MMLsetting{\XMLpar{mtbl}{#1}{}}#3% remap list \edef\theMMLpTABLEmap{#2=\MMLsetting,\theMMLpTABLEmap}} {}} \def\doMMLpREMAP#1#2% {\doif{\MMLsetting}{#1} {\def\MMLsetting{#2}% \let\MMLpREMAP\gobbletwoarguments}} \let\MMLpREMAP\doMMLpREMAP \def\doMMLpTABLE#1#2% {\begingroup \getXMLarguments{mtable} {columnalign="" columnspacing=".25ex" rowspacing=".25ex" frame="" color="" background="" #1}% \setupTABLE[\c!frame=\v!off]% \MMLpTABLEmapper{background}{\c!backgroundcolor}{}% \MMLpTABLEmapper{color}{\c!color}{}% \MMLpTABLEmapper{frame}{\c!frame} {\MMLpREMAP{none}{off}\MMLpREMAP{solid}{on}}% \MMLpTABLEmapper{columnalign}{\c!align} {\MMLpREMAP{left}{right}% \MMLpREMAP{right}{left}% \MMLpREMAP{center}{middle}}% \setMMLpunit{\XMLpar{mtable}{rowspacing}{}}{.25ex}% \let\MMLpTABLEoffset\MMLpunit \let\MMLpTR\doMMLpTR \let\MMLpTD\doMMLpTD \bTABLE[\c!background=\v!color,\c!offset=\MMLpTABLEoffset]#2\eTABLE \endgroup} \def\doMMLpTR#1#2% {\doifXMLRchildelse{mtd}{#2} {\bTR\ignorespaces#2\unskip\eTR} {\bTR\doMMLpTD{#1}{#2}\eTR}} \def\doMMLpTD#1#2% {\getXMLarguments{mtbl} {columnalign="" columnspacing="" rowspacing="" frame="" color="" background="" #1}% \let\theMMLpTABLEmap\empty \MMLpTABLEmap{background}{\c!backgroundcolor}{}% \MMLpTABLEmap{color}{\c!color}{}% \MMLpTABLEmap{frame}{\c!frame} {\MMLpREMAP{none}{off}\MMLpREMAP{solid}{on}}% \MMLpTABLEmap{columnalign}{\c!align} {\MMLpREMAP{left}{right}\MMLpREMAP{right}{left}}% \@EA\bTD\@EA[\theMMLpTABLEmap]$\ignorespaces#2\unskip$\eTD} \setupMMLappearance[mtable][\c!alternative=\v!a] \def\MMLpTABLE {\doifelse\@@MMLmtablealternative\v!a {\expandafter\MMLpTABLEa} {\expandafter\MMLpTABLEb}} \def\MMLpTABLEa#1#2% {\begingroup \doifelsenothing{#1} {\global\setfalse\mmlTABLEargs} {\global\settrue\mmlTABLEargs}% \ifconditional\mmlTABLEargs \else \setbox\scratchbox=\hbox {$\displaystyle \def\MMLpTABLE##1##2% {\ifconditional\mmlTABLEargs \else \doifelsenothing{##1}{##2}{\global\settrue\mmlTABLEargs}% \fi}% \let\MMLpTR\MMLpTABLE \let\MMLpTD\MMLpTABLE #2$}% \fi \ifconditional\mmlTABLEargs \let\MMLpTABLE\doMMLpTABLE \def\next{\MMLpTABLE{#1}}% \else \let\next\matrix \fi \next{#2}% \endgroup} \let\MMLpTABLEb\doMMLpTABLE \remapXMLsingular [mspace] [CPA] \MMLpSPACE \def\setMMLpunit#1#2% {\setbox\scratchbox=\hbox {\edef\ascii{#1}% \@EA\aftersplitstring\ascii\at.\to\ascii \scratchcounter=\ifx\ascii\empty#1\else\ascii\fi \unskip\unskip}% \ifdim\wd\scratchbox=\zeropoint \edef\MMLpunit{#1em}% \else \edefconvertedargument\ascii{#1}% \convertasciiafter\doifinstringelse{em}{\ascii}{\edef\MMLpunit{#1}}{% \convertasciiafter\doifinstringelse{ex}{\ascii}{\edef\MMLpunit{#1}}{% \convertasciiafter\doifinstringelse{pt}{\ascii}{\edef\MMLpunit{#1}}{% \edef\MMLpunit{#2}}}}% \fi} \def\MMLpSPACE#1#2% {\getXMLarguments{mspace}{width=".5em" #1}% \setMMLpunit{\XMLpar{mspace}{width}{}}{.5em}% \hskip\MMLpunit\relax} \remapXMLsingular [mglyph] [CPA] \MMLpGLYPH \def\MMLpGLYPH#1#2% we assume \definefont usage {\getXMLarguments{mglyph}{fontfamily="" index="1" alt="" #1}% \def\MMLpglyph{\XMLpar{mglyph}{fontfamily}{}}% \doifelsenothing{\MMLpglyph} {\hbox{\tttf[fontfamily unspecified]}} {\doifdefinedelse{\MMLpglyph} {\hbox{\getvalue{\MMLpglyph}\char0\XMLpar{mglyph}{index}{1}}} {\doifelsenothing{\XMLpar{mglyph}{alt}{}} {\hbox{\tttf[unknown fontfamily \XMLpar{mglyph}{fontfamily}{}]}} {\hbox{\tttf\XMLpar{mglyph}{alt}{}}}}}} \remapXMLsingular [malignmark] [CPA] \MMLpALIGNMARK \def\MMLpALIGNMARK#1#2% {} \remapXMLsingular [none] [CPA] \MMLpNONE \remapXMLsingular [mprescripts] [CPA] \MMLpMPRESCRIPTS \remapXMLsequence [mmultiscripts] [CPA] \MMLpMULTISCRIPTS \def\MMLpNONE #1#2{} \def\MMLpMPRESCRIPTS#1#2{} \def\MMLpMULTISCRIPTS#1#2% {\pushmacro\xmlr \let\xmlr\pMULTISCRIPTmmlPRE \donefalse \scratchcounter=0 #2\empty \let\xmlr\pMULTISCRIPTmmlPOST \donetrue \scratchcounter=0 #2\empty \popmacro\xmlr} \def\pMULTISCRIPTmmlPRE#1#2#3#4% {\ifdone \ifodd\scratchcounter _{\naturalxmlr{#1}{#2}{#3}{#4}}% \else ^{\naturalxmlr{#1}{#2}{#3}{#4}}{}% \fi \else \doif{mprescripts/}{#1}{\donetrue{}}% weak, the / here \fi \ifdone \advance\scratchcounter \plusone \fi} \let\pMULTISCRIPTmmlPOST\pMULTISCRIPTmmlPRE \stopXMLmapping \protect \endinput % extra samples \startXMLdata Q P R \stopXMLdata \startXMLdata R P R \stopXMLdata context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-vn.mkii0000644000175000017500000000750311754241457024125 0ustar norbertnorbert%D \module %D [ file=lang-vn, %D version=2004.11.22, % 1999.12.12, %D title=\CONTEXT\ Language Macros, %D subtitle=Vietnamese, %D author={Han The Thanh \& Adam Lindsay \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Vietnamese Language} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. %D %D \starttabulate[|lB|l|] %D \NC Vietnamese \NC \THANH\ \NC \NR %D \stoptabulate \unprotect \installlanguage [\s!vi] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\quoteleft, \c!rightquote=\quoteright, \c!leftquotation=\quotedblleft, \c!rightquotation=\quotedblright, \c!date={{ },dd,{/},mm,{/},yy}, \s!mapping=t5, \s!encoding=t5] \installlanguage [vietnamese] [\s!vi] \setupheadtext [\s!vi] [\v!content=M\udotbelow c l\udotbelow c] \setupheadtext [\s!vi] [\v!tables=Danh s\aacute ch b\ahook ng] \setupheadtext [\s!vi] [\v!figures=Danh s\aacute ch h\igrave nh v\etilde] \setupheadtext [\s!vi] [\v!graphics=\Dstroke\ocircumflexgrave\ th\idotbelow] \setupheadtext [\s!vi] [\v!intermezzi=Intermezzos] \setupheadtext [\s!vi] [\v!index=Ch\ihook\ s\ocircumflexacute] \setupheadtext [\s!vi] [\v!abbreviations=Ch\uhorntilde\ vi\ecircumflexacute t t\abreveacute t] \setupheadtext [\s!vi] [\v!logos=Bi\ecircumflexhook u t\uhorn \ohorndotbelow ng] \setupheadtext [\s!vi] [\v!units=\Dstroke\ohorn n v\idotbelow] \setuplabeltext [\s!vi] [\v!table=B\ahook ng ] \setuplabeltext [\s!vi] [\v!figure=H\igrave nh ] \setuplabeltext [\s!vi] [\v!intermezzo=intermezzo] \setuplabeltext [\s!vi] [\v!graphic=\Dstroke\ocircumflexgrave\ th\idotbelow] \setuplabeltext [\s!vi] [\v!chapter=Ch\uhorn \ohorn ng ] \setuplabeltext [\s!vi] [\v!section=] % not set \setuplabeltext [\s!vi] [\v!subsection=] % not set \setuplabeltext [\s!vi] [\v!subsubsection=] % not set \setuplabeltext [\s!vi] [\v!subsubsubsection=] % not set \setuplabeltext [\s!vi] [\v!appendix=] % not set \setuplabeltext [\s!vi] [\v!part=Ph\acircumflexgrave n ] \setuplabeltext [\s!vi] [\v!line=d\ograve ng ] \setuplabeltext [\s!vi] [\v!lines=d\ograve ng ] \setuplabeltext [\s!vi] [\v!sunday=ch\uhook\ nh\acircumflexdotbelow t] \setuplabeltext [\s!vi] [\v!monday=th\uhornacute\ hai] \setuplabeltext [\s!vi] [\v!tuesday=th\uhornacute\ ba] \setuplabeltext [\s!vi] [\v!wednesday=th\uhornacute\ t\uhorn] \setuplabeltext [\s!vi] [\v!thursday=th\uhornacute\ n\abreve m] \setuplabeltext [\s!vi] [\v!friday=th\uhornacute\ s\aacute u] \setuplabeltext [\s!vi] [\v!saturday=th\uhornacute\ b\ahook y] \setuplabeltext [\s!vi] [\v!january=th\aacute ng gi\ecircumflex ng] \setuplabeltext [\s!vi] [\v!february=th\aacute ng hai] \setuplabeltext [\s!vi] [\v!march=th\aacute ng ba] \setuplabeltext [\s!vi] [\v!april=th\aacute ng t\uhorn] \setuplabeltext [\s!vi] [\v!may=th\aacute ng n\abreve m] \setuplabeltext [\s!vi] [\v!june=th\aacute ng s\aacute u] \setuplabeltext [\s!vi] [\v!july=th\aacute ng b\ahook y] \setuplabeltext [\s!vi] [\v!august=th\aacute ng t\aacute m] \setuplabeltext [\s!vi] [\v!september=th\aacute ng ch\iacute n] \setuplabeltext [\s!vi] [\v!october=th\aacute ng m\uhorn\ohorngrave i] \setuplabeltext [\s!vi] [\v!november=th\aacute ng m\uhorn\ohorngrave i m\ocircumflexdotbelow t] \setuplabeltext [\s!vi] [\v!december=th\aacute ng m\uhorn\ohorngrave i hai] %D \ShowAllLanguageValues [\s!vi] [vietnamese] {Vietnamese} {water||puppets} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mml.mkii0000644000175000017500000004735411754241457024321 0ustar norbertnorbert%D \module %D [ file=xtag-mml, %D version=2000.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=MathML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / MathML} % I will reimplement this one without mapping since we now have more % tricks available \useXMLfilter[map] %\enablemathpunctuation % First some general formula element definitions. \defineXMLenvironment [formula] [label=,sublabel=] {\dostartXMLformula\placeformula} {\dostopXMLformula} \defineXMLenvironment [subformula] [label=,sublabel=] {\dostartXMLformula\placesubformula} {\dostopXMLformula} \def\dostartXMLformula#1% {\doifelsenothingXMLop{label} {\startformula} {\expanded{#1[\XMLop{label}]{\XMLop{sublabel}}}\startformula}} \def\dostopXMLformula {\stopformula} % Since I only had the draft of mml 2 as example of % rendering, there are probably a lot of omissions and % misinterpretations. At least I learned some bits and % pieces of math rendering. % % The main complications were not so much the math, but to % find the most efficient way to handle elements without % spacing beging messed up. The first implementation was % aimed at getting reasonable output, this second % implementation is already better in terms of handling % nesting, and I will definitely need a third one that has % more efficient and less ugly code. % % The TeX part is not that complicated and once the % preprocessor was okay, the rest way just a lot of keying % and testing. It all comes down to gobbling, redefining, % and not so much to parsing. \unprotect \def\setupMMLappearance[#1]{\dodoubleargument\getparameters[@@MML#1]} \defineXMLdirective [mathml] \setupMMLappearance \defineXMLargument [math] \doXMLmath \defineXMLargument [imath] \doXMLimath \defineXMLargument [dmath] \doXMLdmath \defineXMLargument [m] \doXMLimath \unexpanded\def\doXMLmath {\ifhmode\@EA\doXMLimath\else\@EA\doXMLdmath\fi} \unexpanded\def\doXMLimath{\XMLremapdata[mml]{$}{$}} \unexpanded\def\doXMLdmath{\XMLremapdata[mml]{\dostartformula{}}{\dostopformula}} \ifx\XMLRtoks\undefined \newtoks\XMLRtoks \fi \def\convertasciiafter#1#2% {\defconvertedargument\asciiafter{#2}% \@EA#1\@EA{\asciiafter}} \def\checkMMLoperator#1% #2 {\unspaceargument#1\to\ascii \doifXMLentityelse\ascii{\getXMLentity\ascii}} % {#2} % this will be done in a more safe way \def\MMLtodo#1{\enspace\hbox{\rm#1}\enspace} % this goes to core-mat \def\normalorfiller #1#2{#1} \def\normalordelimiter#1#2{#2} \def\enabledelimiter {\let\normalordelimiter\secondoftwoarguments} \def\disabledelimiter{\let\normalordelimiter\firstoftwoarguments} \def\enablefiller {\let\normalorfiller\secondoftwoarguments} \def\disablefiller {\let\normalorfiller\firstoftwoarguments} \def\mathopnolimits#1{\mathop{\rm#1}\nolimits} % Auxiliary macros \bgroup \obeylines \gdef\defineMMLentity% % needed ! {\bgroup\obeylines\xdefineMMLentity} \gdef\xdefineMMLentity #1 #2 #3 #4 {\egroup\dodefineMMLentity{#1}{#2}{#3}{#4}} \global\let\dodefineMMLentity\gobblefourarguments \gdef\defineMMLsynonym% % needed ! {\bgroup\obeylines\xdefineMMLsynonym} \gdef\xdefineMMLsynonym #1 #2 {\egroup\dodefineMMLsynonym{#1}{#2}} \global\let\dodefineMMLsynonym\gobbletwoarguments \egroup % some more \def\showMMLentity#1% {\bgroup \doifXMLentityelse{#1} {\let\left\empty\let\right\empty\mathematics{\getXMLentity{#1}{}}} {\getXMLentity{unknown}}% \egroup} \newbox\unknownXMLentity \setbox\unknownXMLentity\hbox{\inframed[\c!strut=\v!no,\c!offset=1pt]{\ttx ?}} \defineXMLentity [unknown] {\copy\unknownXMLentity} % the definitions \ifx\blackboard\undefined \def\blackboard{\ifx\Bbb\undefined\else\expandafter\Bbb\fi} \fi % basic entities, greek \defineXMLentity [alpha] {\mathematics \alpha} \defineXMLentity [beta] {\mathematics \beta} \defineXMLentity [gamma] {\mathematics \gamma} \defineXMLentity [delta] {\mathematics \delta} \defineXMLentity [epsilon] {\mathematics \epsilon} \defineXMLentity [zeta] {\mathematics \zeta} \defineXMLentity [eta] {\mathematics \eta} \defineXMLentity [theta] {\mathematics \theta} \defineXMLentity [iota] {\mathematics \iota} \defineXMLentity [kappa] {\mathematics \kappa} \defineXMLentity [lambda] {\mathematics \lambda} \defineXMLentity [theta] {\mathematics \theta} \defineXMLentity [mu] {\mathematics \mu} \defineXMLentity [nu] {\mathematics \nu} \defineXMLentity [xi] {\mathematics \xi} \defineXMLentity [pi] {\mathematics \pi} \defineXMLentity [rho] {\mathematics \rho} \defineXMLentity [sigma] {\mathematics \sigma} \defineXMLentity [tau] {\mathematics \tau} \defineXMLentity [upsilon] {\mathematics \upsilon} \defineXMLentity [phi] {\mathematics \phi} \defineXMLentity [chi] {\mathematics \chi} \defineXMLentity [psi] {\mathematics \psi} \defineXMLentity [omega] {\mathematics \omega} \defineXMLentity [varepsilon] {\mathematics \varepsilon} \defineXMLentity [vartheta] {\mathematics \vartheta} \defineXMLentity [varpi] {\mathematics \varpi} \defineXMLentity [varrho] {\mathematics \varrho} \defineXMLentity [varsigma] {\mathematics \varsigma} \defineXMLentity [varphi] {\mathematics \varphi} \defineXMLentity [epsilonv] {\mathematics \varepsilon} \defineXMLentity [thetav] {\mathematics \vartheta} \defineXMLentity [piv] {\mathematics \varpi} \defineXMLentity [rhov] {\mathematics \varrho} \defineXMLentity [sigmav] {\mathematics \varsigma} \defineXMLentity [phiv] {\mathematics \varphi} \defineXMLentity [epsi] {\mathematics \epsilon} \defineXMLentity [epsiv] {\mathematics \varepsilon} \defineXMLentity [Alpha] {A} \defineXMLentity [Beta] {B} \defineXMLentity [Gamma] {\mathematics \Gamma} \defineXMLentity [Delta] {\mathematics \Delta} \defineXMLentity [Epsilon] {E} \defineXMLentity [Zeta] {Z} \defineXMLentity [Eta] {N} \defineXMLentity [Theta] {\mathematics \Theta} \defineXMLentity [Iota] {I} \defineXMLentity [Kappa] {K} \defineXMLentity [Lambda] {\mathematics \Lambda} \defineXMLentity [Mu] {M} \defineXMLentity [Nu] {N} \defineXMLentity [Xi] {\mathematics \Xi} \defineXMLentity [Pi] {\mathematics \Pi} \defineXMLentity [Ro] {R} \defineXMLentity [Sigma] {\mathematics \Sigma} \defineXMLentity [Tau] {T} \defineXMLentity [Upsilon] {\mathematics \Upsilon} \defineXMLentity [Phi] {\mathematics \Phi} \defineXMLentity [Chi] {X} \defineXMLentity [Psi] {\mathematics \Psi} \defineXMLentity [Omega] {\mathematics \Omega} % basic entities, hebrew \defineXMLentity [aleph] {\mathematics \aleph} % basic entities, functions \defineXMLentity [abs] {\mathopnolimits{abs}} \defineXMLentity [arg] {\mathopnolimits{arg}} \defineXMLentity [codomain] {\mathopnolimits{codomain}} \defineXMLentity [curl] {\mathopnolimits{curl}} \defineXMLentity [determinant] {\mathopnolimits{det}} \defineXMLentity [divergence] {\mathopnolimits{div}} \defineXMLentity [domain] {\mathopnolimits{domain}} \defineXMLentity [false] {\mathopnolimits{false}} \defineXMLentity [gcd] {\mathopnolimits{gcd}} \defineXMLentity [grad] {\mathopnolimits{grad}} \defineXMLentity [identity] {\mathopnolimits{id}} \defineXMLentity [image] {\mathopnolimits{image}} \defineXMLentity [lcm] {\mathopnolimits{lcm}} \defineXMLentity [max] {\mathopnolimits{max}} \defineXMLentity [median] {\mathopnolimits{median}} \defineXMLentity [min] {\mathopnolimits{min}} \defineXMLentity [mode] {\mathopnolimits{mode}} \defineXMLentity [mod] {\mathopnolimits{mod}} \defineXMLentity [notanumber] {\mathopnolimits{NaN}} \defineXMLentity [otherwise] {\mathopnolimits{otherwise}} \defineXMLentity [true] {\mathopnolimits{true}} \defineXMLentity [declare] {\mathopnolimits{declare}} \defineXMLentity [as] {\mathopnolimits{as}} \defineXMLentity [polar] {\mathopnolimits{Polar}} \defineXMLentity [mathematicald] {d} \defineXMLentity [imaginaryi] {{\rm i}} \defineXMLentity [differentiald] {\partial} \defineXMLentity [exponentiale] {{\rm e}} \defineXMLentity [capitaldifferentiald] {D} \defineXMLentity [ii] {\getXMLentity{imaginaryi}} \defineXMLentity [dd] {\getXMLentity{differentiald}} \defineXMLentity [ee] {\getXMLentity{exponentiale}} \defineXMLentity [DD] {\getMMLentity{capitaldifferentiald}} \defineXMLentity [ImaginaryI] {\getXMLentity{imaginaryi}} \defineXMLentity [DifferentialD] {\getXMLentity{differentiald}} \defineXMLentity [ExponentialE] {\getXMLentity{exponentiale}} \defineXMLentity [CapitalDifferentialD] {\getXMLentity{differentiald}} \defineXMLentity [NaN] {\getXMLentity{notanumber}} \defineXMLentity [NotANumber] {\getXMLentity{notanumber}} \defineXMLentity [and] {\wedge} \defineXMLentity [exists] {\exists} \defineXMLentity [forall] {\forall} \defineXMLentity [implies] {\Rightarrow} \defineXMLentity [not] {\neg} \defineXMLentity [or] {\vee} \defineXMLentity [xor] {\mathopnolimits{xor}} \defineXMLentity [imaginary] {\Im} \defineXMLentity [real] {\Re} \defineXMLentity [lceiling] {\lceil} \defineXMLentity [rceiling] {\rceil} \defineXMLentity [lfloor] {\lfloor} \defineXMLentity [rfloor] {\rfloor} \defineXMLentity [ne] {\neq} \defineXMLentity [neq] {\neq} \defineXMLentity [gt] {>} \defineXMLentity [lt] {<} \defineXMLentity [ge] {\geq} \defineXMLentity [geq] {\geq} \defineXMLentity [le] {\leq} \defineXMLentity [leq] {\leq} \defineXMLentity [equivalent] {\equiv} \defineXMLentity [equiv] {\equiv} \defineXMLentity [approx] {\approx} \defineXMLentity [factorof] {\mid} \defineXMLentity [mapsto] {\mapsto} \defineXMLentity [int] {\int} \defineXMLentity [prime] {\prime} \defineXMLentity [laplacian] {\nabla^2} \defineXMLentity [partial] {\partial} \defineXMLentity [union] {\cup} \defineXMLentity [intersect] {\cap} \defineXMLentity [in] {\in} \defineXMLentity [notin] {\not\in} \defineXMLentity [subset] {\subset} \defineXMLentity [prsubset] {\subseteq} \defineXMLentity [notsubset] {\not\subset} \defineXMLentity [notprsubset] {\not\subseteq} \defineXMLentity [setdiff] {\setminus} \defineXMLentity [card] {\vert} \defineXMLentity [cartesianproduct] {\times} \defineXMLentity [sum] {\sum} \defineXMLentity [prod] {\prod} \defineXMLentity [product] {\prod} \defineXMLentity [lim] {\lim} \defineXMLentity [exp] {\mathopnolimits{exp}} % {\exp} \defineXMLentity [ln] {\mathopnolimits{ln}} % {\ln} \defineXMLentity [log] {\mathopnolimits{log}} % {\log} \defineXMLentity [sin] {\mathopnolimits{sin}} \defineXMLentity [arcsin] {\mathopnolimits{arcsin}} \defineXMLentity [sinh] {\mathopnolimits{sinh}} \defineXMLentity [arcsinh] {\mathopnolimits{arcsinh}} \defineXMLentity [cos] {\mathopnolimits{cos}} \defineXMLentity [arccos] {\mathopnolimits{arccos}} \defineXMLentity [cosh] {\mathopnolimits{cosh}} \defineXMLentity [arccosh] {\mathopnolimits{arccosh}} \defineXMLentity [tan] {\mathopnolimits{tan}} \defineXMLentity [arctan] {\mathopnolimits{arctan}} \defineXMLentity [tanh] {\mathopnolimits{tanh}} \defineXMLentity [arctanh] {\mathopnolimits{arctanh}} \defineXMLentity [cot] {\mathopnolimits{cot}} \defineXMLentity [arccot] {\mathopnolimits{arccot}} \defineXMLentity [coth] {\mathopnolimits{coth}} \defineXMLentity [arccoth] {\mathopnolimits{arccoth}} \defineXMLentity [csc] {\mathopnolimits{csc}} \defineXMLentity [arccsc] {\mathopnolimits{arccsc}} \defineXMLentity [csch] {\mathopnolimits{csch}} \defineXMLentity [arccsch] {\mathopnolimits{arccsch}} \defineXMLentity [sec] {\mathopnolimits{sec}} \defineXMLentity [arcsec] {\mathopnolimits{arcsec}} \defineXMLentity [sech] {\mathopnolimits{sech}} \defineXMLentity [arcsech] {\mathopnolimits{arcsech}} \defineXMLentity [transpose] {^{\rm T}} \defineXMLentity [plusminus] {\pm} \defineXMLentity [minusplus] {\mp} \defineXMLentity [vectorproduct] {\times} \defineXMLentity [scalarproduct] {\cdot} \defineXMLentity [outerproduct] {\otimes} \defineXMLentity [integers] {\integers} \defineXMLentity [reals] {\reals} \defineXMLentity [rationals] {\rationals} \defineXMLentity [naturalnumbers] {\naturalnumbers} \defineXMLentity [complexes] {\complexes} \defineXMLentity [primes] {\primes} \defineXMLentity [emptyset] {\emptyset} \defineXMLentity [pi] {\pi} \defineXMLentity [eulergamma] {\gamma} \defineXMLentity [infinity] {\mathematics{\infty}} \defineXMLentity [InvisibleTimes] {} \defineXMLentity [InvisibleComma] {} \defineXMLentity [ApplyFunction] {} \defineXMLentity [it] {\getXMLentity{InvisibleTines}} \defineXMLentity [ic] {\getXMLentity{InvisibleComma}} \defineXMLentity [af] {\getXMLentity{ApplyFunction}} \defineXMLentity [PlusMinus] {\getXMLentity{plusminus}} \defineXMLentity [infin] {\getXMLentity{infinity}} \defineXMLentity [infty] {\getXMLentity{infinity}} \defineXMLentity [part] {\getXMLentity{differentiald}} \defineXMLentity [RightArrow] {\normalorfiller\rightarrow\rightarrowfill} \defineXMLentity [LeftArrow] {\normalorfiller\leftarrow\leftarrowfill} \defineXMLentity [UnderBrace] {\normalorfiller\empty\upbracefill} \defineXMLentity [OverBrace] {\normalorfiller\empty\downbracefill} \defineXMLentity [UnderBar] {\normalorfiller\hrule\hrulefill} \defineXMLentity [OverBar] {\normalorfiller\hrule\hrulefill} \defineXMLentity [Hat] {\normalorfiller\empty\empty} % todo \defineXMLentity [downarrow] {\mathortext\downarrow\empty} \defineXMLentity [uparrow] {\mathortext\uparrow\empty} \defineXMLentity [Tab] {\hskip4em} \defineXMLentity [NewLine] {\mathortext\empty\crlf} \defineXMLentity [IndentingNewLine] {\mathortext\empty\crlf} \defineXMLentity [NoBreak] {\nobreak} \defineXMLentity [GoodBreak] {\goodbreak} \defineXMLentity [BadBreak] {\nobreak} \defineXMLentity [Space] {\getXMLentity{MediumSpace}} \defineXMLentity [NonBreakingSpace] {\getXMLentity{MediumSpace}} \defineXMLentity [ZeroWidthSpace] {} \def\somespaceentity#1#2% {\mathortext {\mskip#1mu} {\ifvmode\dontleavehmode\else\unskip\fi\hskip#2em\strut\hskip\zeropoint\ignorespaces}% \relax} \defineXMLentity [VeryThinSpace] {\somespaceentity {2}{.125}} \defineXMLentity [ThinSpace] {\somespaceentity {3}{.25}} \defineXMLentity [MediumSpace] {\somespaceentity {4}{.5}} \defineXMLentity [ThickSpace] {\somespaceentity {5}{1}} \defineXMLentity [NegativeVeryThinSpace] {\somespaceentity{-2}{-.125}} \defineXMLentity [NegativeThinSpace] {\somespaceentity{-3}{-.25}} \defineXMLentity [NegativeMediumSpace] {\somespaceentity{-4}{-.5}} \defineXMLentity [NegativeThickSpace] {\somespaceentity{-5}{-1}} \defineXMLentity [NegVeryThinSpace] {\getXMLentity{NegativeVeryThinSpace}} \defineXMLentity [NegThinSpace] {\getXMLentity{NegativeThinSpace}} \defineXMLentity [NegMediumSpace] {\getXMLentity{NegativeMediumSpace}} \defineXMLentity [NegThickSpace] {\getXMLentity{NegativeThickSpace}} \defineXMLentity [nbsp] {\getXMLentity{NonBreakingSpace}} \defineXMLentity [thinsp] {\getXMLentity{ThinSpace}} \defineXMLentity [medsp] {\getXMLentity{MediumSpace}} \defineXMLentity [thicksp] {\getXMLentity{ThickSpace}} \defineXMLentity [larr] {\getXMLentity{LeftArrow}} \defineXMLentity [rarr] {\getXMLentity{RightArrow}} \defineXMLentity [lbrace] {\normalordelimiter{\{}{\left \{}} \defineXMLentity [rbrace] {\normalordelimiter{\}}{\right\}}} \defineXMLentity [lbracket] {\normalordelimiter{[}{\left [}} \defineXMLentity [rbracket] {\normalordelimiter{]}{\right]}} \defineXMLentity [lparenthesis] {\normalordelimiter{(}{\left (}} \defineXMLentity [rparenthesis] {\normalordelimiter{)}{\right)}} \defineXMLentity [langle] {\normalordelimiter{\langle}{\left \langle}} \defineXMLentity [rangle] {\normalordelimiter{\rangle}{\right\rangle}} \defineXMLentity [lang] {\getXMLentity{langle}} \defineXMLentity [rang] {\getXMLentity{rangle}} \defineXMLentity [lbrack] {\getXMLentity{lbracket}} \defineXMLentity [rbrack] {\getXMLentity{rbracket}} \defineXMLentity [lparent] {\getXMLentity{lparenthesis}} \defineXMLentity [rparent] {\getXMLentity{rparenthesis}} \defineXMLentity [\letterleftbrace ] {\getXMLentity{lbrace}} \defineXMLentity [\letterrightbrace] {\getXMLentity{rbrace}} \defineXMLentity [{[}] {\getXMLentity{lbracket}} \defineXMLentity [{]}] {\getXMLentity{rbracket}} \defineXMLentity [{(}] {\getXMLentity{lparenthesis}} \defineXMLentity [{)}] {\getXMLentity{rparenthesis}} \defineXMLentity [times] {\times} \defineXMLentity [minus] {-} \defineXMLentity [plus] {+} \defineXMLentity [plusmn] {\pm} \defineXMLentity [nabla] {\nabla} \def\myspecialnormalvert{\mathematics{\vert}} % temp hack, should stretch \defineXMLentity [,] {{,}} \defineXMLentity [.] {{.}} \defineXMLentity [+] {+} \defineXMLentity [-] {-} \defineXMLentity [(] {(} \defineXMLentity [)] {)} \defineXMLentity [<] {\mathematics{<}} \defineXMLentity [>] {\mathematics{>}} \defineXMLentity [|] {\myspecialnormalvert} \defineXMLentity [/] {/} \defineXMLentity [*] {\times} \defineXMLentity [=] {=} \defineXMLentity [++] {++} \defineXMLentity [--] {--} \defineXMLentity [//] {//} \defineXMLentity [**] {\times\times} \defineXMLentity [==] {==} \defineXMLentity [quot] {"} \defineXMLentity [triangle] {\mathematics\triangle} \defineXMLentity [otimes] {\mathematics\otimes} \defineXMLentity [oplus] {\mathematics\oplus} \defineXMLentity [cup] {\mathematics\cup} \defineXMLentity [cap] {\mathematics\cap} \defineXMLentity [sdot] {\mathematics\cdot} \defineXMLentity [dot] {\mathematics\cdot} \defineXMLentity [sim] {\mathematics\sim} \defineXMLentity [circ] {\mathematics\circ} \defineXMLentity [dagger] {\mathematics\dagger} \defineXMLentity [cdots] {\mathematics\cdots} \defineXMLentity [...] {\getXMLentity{cdots}} \defineXMLentity [continued] {\getXMLentity{cdots}} \defineXMLentity [sub] {\getXMLentity{subset}} \defineXMLentity [sube] {\getXMLentity{prsubset}} \defineXMLentity [notprsubset] {\getXMLentity{notprsubset}} \defineXMLentity [ndash] {\endash} \defineXMLentity [mdash] {\emdash} \defineXMLentity [tex-bar] {\mathematics{\vert}} \defineXMLentity [tex-dollar] {\dollar} \defineXMLentity [tex-backslash] {\backslash} \defineXMLentity [tex-leftbrace] {\mathematics{\{}} \defineXMLentity [tex-rightbrace] {\mathematics{\}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-fun.mkiv0000644000175000017500000000117011754241457024306 0ustar norbertnorbert%D \module %D [ file=meta-fun, %D version=2009.06.02, %D title=\METAPOST\ Graphics, %D subtitle=Goodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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}{MetaPost Graphics / Goodies} \registerctxluafile{meta-fun}{1.001} \unprotect %D Just a few handy helpers: \ifdefined\MPtoks\else \newtoks\MPtoks \fi \ifdefined\MPbox \else \newbox \MPbox \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-pdf.tex0000644000175000017500000000002511376503616024156 0ustar norbertnorbert\input supp-pdf.mkii context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-def.lua0000644000175000017500000133043212130411274024112 0ustar norbertnorbertif not modules then modules = { } end modules ['mult-def'] = { version = 1.001, comment = "companion to mult-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } return { ["commands"]={ ["CAPPED"]={ ["cs"]="KAP", ["de"]="KAP", ["en"]="CAP", ["fr"]="CAP", ["it"]="CAP", ["nl"]="KAP", ["pe"]="CAP", ["ro"]="KAP", }, ["Character"]={ ["cs"]="Znak", ["de"]="Buchstabe", ["en"]="Character", ["fr"]="Caractere", ["it"]="Lettera", ["nl"]="Letter", ["pe"]="Character", ["ro"]="Litera", }, ["Characters"]={ ["cs"]="Znaky", ["de"]="Buchstaben", ["en"]="Characters", ["fr"]="Caracteres", ["it"]="Lettere", ["nl"]="Letters", ["pe"]="Characters", ["ro"]="Litere", }, --~ ["LABELTEXT"]={ --~ ["cs"]="TEXTPOPISKU", --~ ["de"]="LABELTEXT", --~ ["en"]="LABELTEXT", --~ ["fr"]="LABELTEXTE", --~ ["it"]="TESTOETICHETTA", --~ ["nl"]="LABELTEKST", --~ ["pe"]="LABELTEXT", --~ ["ro"]="TEXTETICHETA", --~ }, ["MONTH"]={ ["cs"]="MESIC", ["de"]="MONAT", ["en"]="MONTH", ["fr"]="MOIS", ["it"]="MESE", ["nl"]="MAAND", ["pe"]="MONTH", ["ro"]="LUNA", }, ["Numbers"]={ ["cs"]="Cisla", ["de"]="Ziffern", ["en"]="Numbers", ["fr"]="Numeros", ["it"]="Numeri", ["nl"]="Cijfers", ["pe"]="Numbers", ["ro"]="Numere", }, ["Romannumerals"]={ ["cs"]="Rimskecislice", ["de"]="Roemischezahlen", ["en"]="Romannumerals", ["fr"]="Chiffresromains", ["it"]="Numeriromani", ["nl"]="Romeins", ["pe"]="Romannumerals", ["ro"]="Numereromane", }, ["SmallCapped"]={ ["cs"]="Kap", ["de"]="Kap", ["en"]="Cap", ["fr"]="Cap", ["it"]="Cap", ["nl"]="Kap", ["pe"]="Cap", ["ro"]="Kap", }, ["SmallCaps"]={ ["cs"]="Kaps", ["de"]="Kaps", ["en"]="Caps", ["fr"]="Caps", ["it"]="Caps", ["nl"]="Kaps", ["pe"]="Caps", ["ro"]="Kaps", }, ["WEEKDAY"]={ ["cs"]="VSEDNIDEN", ["de"]="WOCHENTAG", ["en"]="WEEKDAY", ["fr"]="JOURSEMAINE", ["it"]="GIORNOSETTIMANA", ["nl"]="WEEKDAG", ["pe"]="WEEKDAY", ["ro"]="ZIDINSAPTAMANA", }, ["WORD"]={ ["cs"]="SLOVO", ["de"]="WORT", ["en"]="WORD", ["fr"]="MOT", ["it"]="PAROLA", ["nl"]="WOORD", ["pe"]="WORD", ["ro"]="CUVANT", }, ["WORDS"]={ ["cs"]="SLOVA", ["de"]="WOERTER", ["en"]="WORDS", ["fr"]="MOTS", ["it"]="PAROLE", ["nl"]="WOORDEN", ["pe"]="WORDS", ["ro"]="CUVINTE", }, ["Word"]={ ["cs"]="Slovo", ["de"]="Wort", ["en"]="Word", ["fr"]="Mot", ["it"]="Parola", ["nl"]="Woord", ["pe"]="Word", ["ro"]="Cuvant", }, ["Words"]={ ["cs"]="Slova", ["de"]="Woerter", ["en"]="Words", ["fr"]="Mots", ["it"]="Parole", ["nl"]="Woorden", ["pe"]="Words", ["ro"]="Cuvinte", }, ["about"]={ ["cs"]="oref", ["de"]="ueber", ["en"]="about", ["fr"]="concernant", ["it"]="intorno", ["nl"]="about", ["pe"]="درمورد", ["ro"]="despre", }, ["adaptlayout"]={ ["cs"]="prizpusobvzhled", ["de"]="passelayoutan", ["en"]="adaptlayout", ["fr"]="adaptedisposition", ["it"]="adattalayout", ["nl"]="paslayoutaan", ["pe"]="تنظیم‌طرح‌بندی", ["ro"]="adapteazaaspect", }, ["adding"]={ }, ["arg"]={ ["cs"]="arg", ["de"]="arg", ["en"]="arg", ["fr"]="arg", ["it"]="arg", ["nl"]="arg", ["pe"]="افزودن", ["ro"]="arg", }, ["at"]={ ["cs"]="pref", ["de"]="bei", ["en"]="at", ["fr"]="a", ["it"]="al", ["nl"]="op", ["pe"]="در", ["ro"]="la", }, ["atleftmargin"]={ ["cs"]="atleftmargin", ["de"]="atleftmargin", ["en"]="atleftmargin", ["fr"]="atleftmargin", ["it"]="atleftmargin", ["nl"]="oplinkermarge", ["pe"]="درحاشیه‌چپ", ["ro"]="atleftmargin", }, ["atpage"]={ ["cs"]="nastrane", ["de"]="aufseite", ["en"]="atpage", ["fr"]="alapage", ["it"]="apagina", ["nl"]="oppagina", ["pe"]="درصفحه", ["ro"]="lapagina", }, ["atrightmargin"]={ ["cs"]="atrightmargin", ["de"]="atrightmargin", ["en"]="atrightmargin", ["fr"]="atrightmargin", ["it"]="atrightmargin", ["nl"]="oprechtermarge", ["pe"]="درحاشیه‌راست", ["ro"]="atrightmargin", }, ["background"]={ ["cs"]="pozadi", ["de"]="hintergrund", ["en"]="background", ["fr"]="arriereplan", ["it"]="sfondo", ["nl"]="achtergrond", ["pe"]="پس‌زمینه", ["ro"]="fundal", }, ["backspace"]={ ["cs"]="odsazenizleva", ["de"]="rumpfweite", ["en"]="backspace", ["fr"]="retourarriere", ["it"]="spaziodietro", ["nl"]="rugwit", ["pe"]="فاصله‌پشت", ["ro"]="spatiuspate", }, ["blackrule"]={ ["cs"]="cernalinka", ["de"]="rechteck", ["en"]="blackrule", ["fr"]="lignenoire", ["it"]="lineanera", ["nl"]="blokje", ["pe"]="خط‌سیاه", ["ro"]="linieneagra", }, ["blackrules"]={ ["cs"]="cernelinky", ["de"]="rechtecke", ["en"]="blackrules", ["fr"]="lignesnoires", ["it"]="lineenere", ["nl"]="blokjes", ["pe"]="خطهای‌سیاه", ["ro"]="liniinegre", }, ["blank"]={ ["cs"]="preskoc", ["de"]="blanko", ["en"]="blank", ["fr"]="vide", ["it"]="rigovuoto", ["nl"]="blanko", ["pe"]="خالی", ["ro"]="blanc", }, ["bookmark"]={ ["cs"]="zalozka", ["de"]="bookmark", ["en"]="bookmark", ["fr"]="marquepage", ["it"]="segnalibro", ["nl"]="bookmark", ["pe"]="چوبخط", ["ro"]="semncarte", }, ["bottomdistance"]={ ["cs"]="vzdalenostspodku", ["de"]="abstandunten", ["en"]="bottomdistance", ["fr"]="distanceinf", ["it"]="distanzafondo", ["nl"]="onderafstand", ["pe"]="فاصله‌پایین", ["ro"]="distantajos", }, ["bottomheight"]={ ["cs"]="vyskaspodku", ["de"]="hoeheunten", ["en"]="bottomheight", ["fr"]="hauteurinf", ["it"]="altezzafondo", ["nl"]="onderhoogte", ["pe"]="ارتفاع‌پایین", ["ro"]="inaltimejos", }, ["bottomspace"]={ ["cs"]="bottomspace", ["de"]="bottomspace", ["en"]="bottomspace", ["fr"]="espaceinf", ["it"]="spaziofondo", ["nl"]="bodemwit", ["pe"]="فضای‌پایین", ["ro"]="spatiujos", }, ["but"]={ ["cs"]="spodek", ["de"]="but", ["en"]="but", ["fr"]="but", ["it"]="fondo", ["nl"]="but", ["pe"]="اما", ["ro"]="but", }, ["button"]={ ["cs"]="tlacitko", ["de"]="knopf", ["en"]="button", ["fr"]="bouton", ["it"]="pulsante", ["nl"]="button", ["pe"]="دکمه", ["ro"]="buton", }, ["bypassblocks"]={ ["cs"]="bypassblocks", ["de"]="bypassblocks", ["en"]="bypassblocks", ["fr"]="sauteblocs", ["it"]="saltablocchi", ["nl"]="passeerblokken", ["pe"]="عبوربلوکها", ["ro"]="saripesteblocuri", }, ["character"]={ ["cs"]="znak", ["de"]="buchstabe", ["en"]="character", ["fr"]="caractere", ["it"]="lettera", ["nl"]="letter", ["pe"]="حرف", ["ro"]="litera", }, ["characters"]={ ["cs"]="znaky", ["de"]="buchstaben", ["en"]="characters", ["fr"]="caracteres", ["it"]="lettere", ["nl"]="letters", ["pe"]="حرفها", ["ro"]="litere", }, ["chem"]={ ["cs"]="chem", ["de"]="chem", ["en"]="chem", ["fr"]="chem", ["it"]="chim", ["nl"]="chem", ["pe"]="chem", ["ro"]="chem", }, ["clip"]={ ["cs"]="orez", ["de"]="ausschnitt", ["en"]="clip", ["fr"]="clip", ["it"]="clip", ["nl"]="clip", ["pe"]="گیره", ["ro"]="clip", }, ["clonefield"]={ ["cs"]="klonujpole", ["de"]="klonierefeld", ["en"]="clonefield", ["fr"]="clonechamp", ["it"]="clonacampo", ["nl"]="kloonveld", ["pe"]="میدان‌شبیه‌سازی", ["ro"]="cloneazacamp", }, ["color"]={ ["cs"]="barva", ["de"]="farbe", ["en"]="color", ["fr"]="couleur", ["it"]="colore", ["nl"]="kleur", ["pe"]="رنگ", ["ro"]="culoare", }, ["colorbar"]={ ["cs"]="barevnalista", ["de"]="farbbalken", ["en"]="colorbar", ["fr"]="barrecouleur", ["it"]="barracolori", ["nl"]="kleurenbalk", ["pe"]="میله‌رنگ", ["ro"]="baraculoare", }, ["colorvalue"]={ ["cs"]="hodnotabarvy", ["de"]="farbewert", ["en"]="colorvalue", ["fr"]="valeurcouleur", ["it"]="valorecolore", ["nl"]="kleurwaarde", ["pe"]="مقداررنگ", ["ro"]="valoareculoare", }, ["column"]={ ["cs"]="sloupec", ["de"]="spalte", ["en"]="column", ["fr"]="colonne", ["it"]="colonna", ["nl"]="kolom", ["pe"]="ستون", ["ro"]="coloana", }, ["comparecolorgroup"]={ ["cs"]="porovnejskupinubarev", ["de"]="vergleichefarbengruppe", ["en"]="comparecolorgroup", ["fr"]="comparegroupecouleur", ["it"]="confrontagruppocolori", ["nl"]="vergelijkkleurgroep", ["pe"]="مقایسه‌گروه‌رنگ", ["ro"]="comparagrupculoare", }, ["comparepalet"]={ ["cs"]="porovnejpaletu", ["de"]="vergleichepalette", ["en"]="comparepalet", ["fr"]="comparepalette", ["it"]="confrontatavolozza", ["nl"]="vergelijkpalet", ["pe"]="لوح‌مقایسه", ["ro"]="comparapaleta", }, ["completepagenumber"]={ ["cs"]="completepagenumber", ["de"]="completepagenumber", ["en"]="completepagenumber", ["fr"]="completenumeropage", ["it"]="numeropaginacompleto", ["nl"]="volledigepaginanummer", ["pe"]="شماره‌صفحه‌کامل", ["ro"]="completeazanumarpagina", }, ["completeregister"]={ ["cs"]="completeregister", ["de"]="completeregister", ["en"]="completeregister", ["fr"]="completeregistre", ["it"]="completeregister", ["nl"]="volledigregister", ["pe"]="ثبت‌کامل", ["ro"]="completeregister", }, ["component"]={ ["cs"]="komponenta", ["de"]="komponente", ["en"]="component", ["fr"]="composant", ["it"]="componenet", ["nl"]="onderdeel", ["pe"]="مولفه", ["ro"]="componenta", }, ["convertnumber"]={ ["cs"]="konvertujcislo", ["de"]="konvertierezahl", ["en"]="convertnumber", ["fr"]="convertitnumero", ["it"]="convertinumero", ["nl"]="converteernummer", ["pe"]="شماره‌مبدل", ["ro"]="convertestenumar", }, ["copyfield"]={ ["cs"]="kopirujpole", ["de"]="kopierefeld", ["en"]="copyfield", ["fr"]="copitchamp", ["it"]="copiacampo", ["nl"]="copieerveld", ["pe"]="میدان‌کپی", ["ro"]="copiazacamp", }, ["correctwhitespace"]={ ["cs"]="korekcebilehomista", ["de"]="korrigierezwischenraum", ["en"]="correctwhitespace", ["fr"]="corrigeespaceblanc", ["it"]="correggispaziobianco", ["nl"]="corrigeerwitruimte", ["pe"]="فضای‌سفیدصحیح", ["ro"]="corecteazaspatiualb", }, ["coupledocument"]={ ["cs"]="propojenydokument", ["de"]="verknuepfedokument", ["en"]="coupledocument", ["fr"]="coupledocument", ["it"]="accoppiadocumento", ["nl"]="koppeldocument", ["pe"]="نوشتارزوج", ["ro"]="cupleazadocument", }, ["couplemarking"]={ ["cs"]="propojeneznaceni", ["de"]="verknuepfebeschriftung", ["en"]="couplemarking", ["fr"]="couplemarquage", ["it"]="accoppiamarcatura", ["nl"]="koppelmarkering", ["pe"]="نشانه‌گذاری‌زوج", ["ro"]="cupleazamarcaje", }, ["couplepage"]={ ["cs"]="parovastrana", ["de"]="doppelseite", ["en"]="couplepage", ["fr"]="pagedouble", ["it"]="accoppiapagina", ["nl"]="koppelpagina", ["pe"]="صفحه‌زوج", ["ro"]="paginadubla", }, ["couplepaper"]={ ["cs"]="dvoustrannypapir", ["de"]="doppelseitigespapier", ["en"]="couplepaper", ["fr"]="couplepapier", ["it"]="accoppiacarta", ["nl"]="koppelpapier", ["pe"]="کاغذزوج", ["ro"]="hartiedubla", }, ["coupleregister"]={ ["cs"]="propojenyrejstrik", ["de"]="verknuepfregister", ["en"]="coupleregister", ["fr"]="coupleregistre", ["it"]="accoppiaregistro", ["nl"]="koppelregister", ["pe"]="ثبت‌زوج", ["ro"]="cupleazaregistru", }, ["crlf"]={ ["cs"]="crlf", ["de"]="crlf", ["en"]="crlf", ["fr"]="crlf", ["it"]="crlf", ["nl"]="crlf", ["pe"]="crlf", ["ro"]="crlf", }, ["currentdate"]={ ["cs"]="aktualnidatum", ["de"]="heutigesdatum", ["en"]="currentdate", ["fr"]="datecourante", ["it"]="datadioggi", ["nl"]="huidigedatum", ["pe"]="تاریخ‌جاری", ["ro"]="datacurenta", }, ["currentheadnumber"]={ ["cs"]="aktualnicislonadpisu", ["de"]="heutigeskopfnummer", ["en"]="currentheadnumber", ["fr"]="numerotetecourant", ["it"]="numerotestacorrente", ["nl"]="huidigekopnummer", ["pe"]="شماره‌سرجاری", ["ro"]="numartitlucurent", }, ["cutspace"]={ ["cs"]="cutspace", ["de"]="cutspace", ["en"]="cutspace", ["fr"]="cutspace", ["it"]="cutspace", ["nl"]="snijwit", ["pe"]="فضای‌برش", ["ro"]="cutspace", }, ["date"]={ ["cs"]="datum", ["de"]="datum", ["en"]="date", ["fr"]="date", ["it"]="data", ["nl"]="datum", ["pe"]="تاریخ", ["ro"]="data", }, ["decouplemarking"]={ ["cs"]="rozpojeneznaceni", ["de"]="entknuepfebeschriftung", ["en"]="decouplemarking", ["fr"]="decouplemarquage", ["it"]="separamarcatura", ["nl"]="ontkoppelmarkering", ["pe"]="جداسازی‌نشانه‌گذاری", ["ro"]="decupleazamarcaje", }, ["decrementnumber"]={ ["cs"]="decrementnumber", ["de"]="decrementnumber", ["en"]="decrementnumber", ["fr"]="decrementenumero", ["it"]="decrementnumber", ["nl"]="verlaagnummer", ["pe"]="شماره‌کاهش", ["ro"]="decrementnumber", }, ["define"]={ ["cs"]="definuj", ["de"]="definieren", ["en"]="define", ["fr"]="definit", ["it"]="definisci", ["nl"]="definieer", ["pe"]="تعریف", ["ro"]="defineste", }, ["defineaccent"]={ ["cs"]="definujakcent", ["de"]="definiereakzent", ["en"]="defineaccent", ["fr"]="definitaccent", ["it"]="definisciaccento", ["nl"]="definieeraccent", ["pe"]="تعریف‌لهجه", ["ro"]="definesteaccent", }, ["defineblank"]={ ["cs"]="definujpreskok", ["de"]="definiereblanko", ["en"]="defineblank", ["fr"]="definitvide", ["it"]="definiscirigovuoto", ["nl"]="definieerblanko", ["pe"]="تعریف‌خالی", ["ro"]="definesteblanc", }, ["defineblock"]={ ["cs"]="definujblok", ["de"]="definiereblock", ["en"]="defineblock", ["fr"]="definitbloc", ["it"]="definisciblocco", ["nl"]="definieerblok", ["pe"]="تعریف‌بلوک", ["ro"]="definestebloc", }, ["definebodyfont"]={ ["cs"]="definujzakladnifont", ["de"]="definierefliesstext", ["en"]="definebodyfont", ["fr"]="definitpolicecorps", ["it"]="definiscifontdeltesto", ["nl"]="definieerkorps", ["pe"]="تعریف‌قلم‌متن", ["ro"]="definestefonttext", }, ["definebodyfontenvironment"]={ ["cs"]="definujprostredizakladnihofontu", ["de"]="definierefliesstextumgebung", ["en"]="definebodyfontenvironment", ["fr"]="definitenvironnementpolicecorps", ["it"]="definisciambientefontdeltesto", ["nl"]="definieerkorpsomgeving", ["pe"]="تعریف‌محیط‌قلم‌بدنه", ["ro"]="definestemediulfonttext", }, ["definebuffer"]={ ["cs"]="definujbuffer", ["de"]="definierepuffer", ["en"]="definebuffer", ["fr"]="definitbuffer", ["it"]="definiscibuffer", ["nl"]="definieerbuffer", ["pe"]="تعریف‌بافر", ["ro"]="definestebuffer", }, ["definecharacter"]={ ["cs"]="definujznak", ["de"]="definierezeichen", ["en"]="definecharacter", ["fr"]="definicaractere", ["it"]="definiscicarattere", ["nl"]="definieerkarakter", ["pe"]="تعریف‌حرف", ["ro"]="definestecaracter", }, ["definecolor"]={ ["cs"]="definujbarvu", ["de"]="definierefarbe", ["en"]="definecolor", ["fr"]="definitcouleur", ["it"]="definiscicolore", ["nl"]="definieerkleur", ["pe"]="تعریف‌رنگ", ["ro"]="definesteculoare", }, ["definecolorgroup"]={ ["cs"]="definujskupinubarev", ["de"]="definierefarbengruppe", ["en"]="definecolorgroup", ["fr"]="definitgroupecouleur", ["it"]="definiscigruppocolori", ["nl"]="definieerkleurgroep", ["pe"]="تعریف‌گروه‌رنگ", ["ro"]="definestegrupculori", }, ["definecolumnbreak"]={ ["cs"]="definecolumnbreak", ["de"]="definecolumnbreak", ["en"]="definecolumnbreak", ["fr"]="definitsautdecolonne", ["it"]="definecolumnbreak", ["nl"]="definieerkolomovergang", ["pe"]="تعریف‌شکستن‌ستون", ["ro"]="definecolumnbreak", }, ["definecolumnset"]={ ["cs"]="definecolumnset", ["de"]="definecolumnset", ["en"]="definecolumnset", ["fr"]="definitjeucolonne", ["it"]="definiscigruppocolonne", ["nl"]="definieerkolomgroep", ["pe"]="تعریف‌مجموعه‌ستون", ["ro"]="definecolumnset", }, ["definecombination"]={ ["cs"]="definecombination", ["de"]="definecombination", ["en"]="definecombination", ["fr"]="definecombination", ["it"]="definecombination", ["nl"]="definieercombinatie", ["pe"]="تعریف‌ترکیب", ["ro"]="definecombination", }, ["definecombinedlist"]={ ["cs"]="definujkombinovanyseznam", ["de"]="definierezusammengestellteliste", ["en"]="definecombinedlist", ["fr"]="definitlisteimbriquee", ["it"]="definiscielencocombinato", ["nl"]="definieersamengesteldelijst", ["pe"]="تعریف‌لیست‌ترکیبی", ["ro"]="definestelistacombinata", }, ["definecommand"]={ ["cs"]="definujprikaz", ["de"]="definierebefehl", ["en"]="definecommand", ["fr"]="definitcommande", ["it"]="definiscicomando", ["nl"]="definieercommando", ["pe"]="تعریف‌فرمان", ["ro"]="definestecomanda", }, ["defineconversion"]={ ["cs"]="definujkonverzi", ["de"]="definierekonversion", ["en"]="defineconversion", ["fr"]="definitconversion", ["it"]="definisciconversione", ["nl"]="definieerconversie", ["pe"]="تعریف‌تبدیل", ["ro"]="definesteconversie", }, ["definedescription"]={ ["cs"]="definujpopis", ["de"]="definierebeschreibung", ["en"]="definedescription", ["fr"]="definitdescription", ["it"]="definiscidescrizione", ["nl"]="doordefinieren", ["pe"]="تعریف‌شرح", ["ro"]="definestedescriere", }, ["defineenumeration"]={ ["cs"]="definujvycet", ["de"]="definierenummerierung", ["en"]="defineenumeration", ["fr"]="definitenumeration", ["it"]="definiscienumerazione", ["nl"]="doornummeren", ["pe"]="تعریف‌شماره‌بندی", ["ro"]="definesteenumerare", }, ["definefield"]={ ["cs"]="definujpole", ["de"]="definierefeld", ["en"]="definefield", ["fr"]="definitchamp", ["it"]="definiscicampo", ["nl"]="definieerveld", ["pe"]="تعریف‌میدان", ["ro"]="definestecamp", }, ["definefieldstack"]={ ["cs"]="definujzasobnikpoli", ["de"]="definierefeldstapel", ["en"]="definefieldstack", ["fr"]="definitpilechamp", ["it"]="definiscistackcampi", ["nl"]="definieerveldstapel", ["pe"]="تعریف‌توده‌میدان", ["ro"]="definestestivacampuri", }, ["definefiguresymbol"]={ ["cs"]="definujobrazeksymbol", ["de"]="definiereabbsymbol", ["en"]="definefiguresymbol", ["fr"]="definitsymbolefigure", ["it"]="definiscifigurasimbolo", ["nl"]="definieerfiguursymbool", ["pe"]="تعریف‌نمادشکل", ["ro"]="definestesimbolfigura", }, ["definefloat"]={ ["cs"]="definujplvouciobjekt", ["de"]="definieregleitobjekt", ["en"]="definefloat", ["fr"]="definitflottant", ["it"]="definiscioggettomobile", ["nl"]="definieerplaatsblok", ["pe"]="تعریف‌شناور", ["ro"]="definestefloat", }, ["definefont"]={ ["cs"]="definujfont", ["de"]="definiereschrift", ["en"]="definefont", ["fr"]="definitpolice", ["it"]="definiscifont", ["nl"]="definieerfont", ["pe"]="تعریف‌قلم", ["ro"]="definestefont", }, ["definefontstyle"]={ ["cs"]="definujstylfontu", ["de"]="definiereschriftstil", ["en"]="definefontstyle", ["fr"]="definitstylepolice", ["it"]="definiscistilefont", ["nl"]="definieerfontstijl", ["pe"]="تعریف‌سبک‌قلم", ["ro"]="definestestilfont", }, ["definefontsynonym"]={ ["cs"]="definujsynonumumfontu", ["de"]="defineschriftsynonym", ["en"]="definefontsynonym", ["fr"]="definitsynonymepolice", ["it"]="definiscisinonimofont", ["nl"]="definieerfontsynoniem", ["pe"]="تعریف‌مترادف‌قلم", ["ro"]="definestesinonimfont", }, ["defineframed"]={ ["cs"]="definujoramovani", ["de"]="definiereumrahmt", ["en"]="defineframed", ["fr"]="defineframed", ["it"]="definisciincorniciato", ["nl"]="definieeromlijnd", ["pe"]="تعریف‌قالبی", ["ro"]="definesteinconjurare", }, ["defineframedtext"]={ ["cs"]="definujoramovanytext", ["de"]="definiereumrahmtertext", ["en"]="defineframedtext", ["fr"]="defineframedtext", ["it"]="definiscitestoincorniciato", ["nl"]="definieerkadertekst", ["pe"]="تعریف‌متن‌قالبی", ["ro"]="definestetextinconjurat", }, ["definehbox"]={ ["cs"]="definujhbox", ["de"]="definierehbox", ["en"]="definehbox", ["fr"]="definithbox", ["it"]="definiscihbox", ["nl"]="definieerhbox", ["pe"]="تعریف‌جعبه‌‌افقی", ["ro"]="definestehbox", }, ["definehead"]={ ["cs"]="definujnadpis", ["de"]="definiereueberschrift", ["en"]="definehead", ["fr"]="definittete", ["it"]="definiscitesta", ["nl"]="definieerkop", ["pe"]="تعریف‌سر", ["ro"]="definesteantet", }, ["defineindentedtext"]={ ["en"]="defineindentedtext", ["nl"]="definieeringesprongentext", }, ["defineinmargin"]={ ["cs"]="defineinmargin", ["de"]="defineinmargin", ["en"]="defineinmargin", ["fr"]="definitdansmarge", ["it"]="defineinmargin", ["nl"]="definieerinmarge", ["pe"]="تعریف‌درون‌حاشیه", ["ro"]="defineinmargin", }, ["defineinteractionmenu"]={ ["cs"]="definujinterakcnimenu", ["de"]="definiereinteraktionsmenue", ["en"]="defineinteractionmenu", ["fr"]="definitmenuinteraction", ["it"]="definiscimenuinterazione", ["nl"]="definieerinteractiemenu", ["pe"]="تعریف‌منوی‌پانل", ["ro"]="definestemeniuinteractiune", }, ["defineitemgroup"]={ ["cs"]="defineitemgroup", ["de"]="defineitemgroup", ["en"]="defineitemgroup", ["fr"]="defineitemgroup", ["it"]="defineitemgroup", ["nl"]="definieeritemgroep", ["pe"]="تعریف‌گروه‌آیتم", ["ro"]="defineitemgroup", }, ["definelabel"]={ ["cs"]="definujpopisek", ["de"]="definierelabel", ["en"]="definelabel", ["fr"]="definitetiquette", ["it"]="definiscietichetta", ["nl"]="doorlabelen", ["pe"]="تعریف‌برچسب", ["ro"]="definesteeticheta", }, ["definelayer"]={ ["cs"]="definelayer", ["de"]="definelayer", ["en"]="definelayer", ["fr"]="definitcalque", ["it"]="definelayer", ["nl"]="definieerlayer", ["pe"]="تعریف‌لایه", ["ro"]="definelayer", }, ["definelayout"]={ ["cs"]="definelayout", ["de"]="definelayout", ["en"]="definelayout", ["fr"]="definitdisposition", ["it"]="definiscilayout", ["nl"]="definieerlayout", ["pe"]="تعریف‌طرح‌بندی", ["ro"]="definelayout", }, ["definelist"]={ ["cs"]="definujseznam", ["de"]="definiereliste", ["en"]="definelist", ["fr"]="definitliste", ["it"]="definiscielenco", ["nl"]="definieerlijst", ["pe"]="تعریف‌لیست", ["ro"]="definestelista", }, ["definelogo"]={ ["cs"]="definujlogo", ["de"]="definierelogo", ["en"]="definelogo", ["fr"]="definitlogo", ["it"]="definiscilogo", ["nl"]="definieerbeeldmerk", ["pe"]="تعریف‌آرم", ["ro"]="definestelogo", }, ["definemainfield"]={ ["cs"]="definujhlavnipole", ["de"]="definierehauptfeld", ["en"]="definemainfield", ["fr"]="definitchampprincipal", ["it"]="definiscicampoprincipale", ["nl"]="definieerhoofdveld", ["pe"]="تعریف‌میدان‌اصلی", ["ro"]="definestecampprincipal", }, ["definemakeup"]={ ["cs"]="definujupravu", ["de"]="definiereumbruch", ["en"]="definemakeup", ["fr"]="definitmakeup", ["it"]="definiscimakeup", ["nl"]="definieeropmaak", ["pe"]="تعریف‌آرایش", ["ro"]="definestemakeup", }, ["definemarking"]={ ["cs"]="definujznaceni", ["de"]="definierebeschriftung", ["en"]="definemarking", ["fr"]="definitmarquage", ["it"]="definiscimarcatura", ["nl"]="definieermarkering", ["pe"]="تعریف‌نشانه‌گذاری", ["ro"]="definestemarcaje", }, ["definemathalignment"]={ ["cs"]="definemathalignment", ["de"]="definemathalignment", ["en"]="definemathalignment", ["fr"]="definemathalignment", ["it"]="definemathalignment", ["nl"]="definieerwiskundeuitlijnen", ["pe"]="تعریف‌تنظیم‌ریاضی", ["ro"]="definemathalignment", }, ["defineoutput"]={ ["cs"]="definujvystup", ["de"]="defineoutput", ["en"]="defineoutput", ["fr"]="definitsortie", ["it"]="definiscioutput", ["nl"]="definieeruitvoer", ["pe"]="تعریف‌خروجی", ["ro"]="definesteoutput", }, ["defineoverlay"]={ ["cs"]="definujprekryv", ["de"]="definiereoverlay", ["en"]="defineoverlay", ["fr"]="definitrevetement", ["it"]="definiscisovrapposizione", ["nl"]="definieeroverlay", ["pe"]="تعریف‌پوشش", ["ro"]="definesteoverlay", }, ["definepagebreak"]={ ["cs"]="definepagebreak", ["de"]="definepagebreak", ["en"]="definepagebreak", ["fr"]="definitsautdepage", ["it"]="definepagebreak", ["nl"]="definieerpaginaovergang", ["pe"]="تعریف‌شکست‌صفحه", ["ro"]="definepagebreak", }, ["definepalet"]={ ["cs"]="definujpaletu", ["de"]="definierepalette", ["en"]="definepalet", ["fr"]="definitpalette", ["it"]="definiscitavolozza", ["nl"]="definieerpalet", ["pe"]="تعریف‌لوح", ["ro"]="definestepaleta", }, ["definepapersize"]={ ["cs"]="definujvelikostpapiru", ["de"]="definierepapierformat", ["en"]="definepapersize", ["fr"]="definittaillepapier", ["it"]="definiscidimensionicarta", ["nl"]="definieerpapierformaat", ["pe"]="تعریف‌اندازه‌برگ", ["ro"]="definestedimensiunehartie", }, ["defineparagraphs"]={ ["cs"]="definujodstavce", ["de"]="definiereabsaetze", ["en"]="defineparagraphs", ["fr"]="definitparagraphes", ["it"]="definiscicapoversi", ["nl"]="definieeralineas", ["pe"]="تعریف‌پاراگرافها", ["ro"]="definesteparagraf", }, ["defineplacement"]={ ["cs"]="defineplacement", ["de"]="defineplacement", ["en"]="defineplacement", ["fr"]="defineplacement", ["it"]="defineplacement", ["nl"]="definieerplaats", ["pe"]="تعریف‌جانشانی", ["ro"]="defineplacement", }, ["defineprofile"]={ ["cs"]="definujprofil", ["de"]="definiereprofil", ["en"]="defineprofile", ["fr"]="definitprofil", ["it"]="definisciprofilo", ["nl"]="definieerprofiel", ["pe"]="تعریف‌پروفایل", ["ro"]="definesteprofil", }, ["defineprogram"]={ ["cs"]="definujprogram", ["de"]="definiereprogramme", ["en"]="defineprogram", ["fr"]="definitprogramme", ["it"]="definisciprogramma", ["nl"]="definieerprogramma", ["pe"]="تعریف‌برنامه", ["ro"]="definesteprogram", }, ["definerawfont"]={ ["cs"]="definerawfont", ["de"]="definerawfont", ["en"]="definerawfont", ["fr"]="definitpolicebrute", ["it"]="definiscifontgrezzo", ["nl"]="definerawfont", ["pe"]="تعریف‌قلم‌خام", ["ro"]="definestefontraw", }, ["definereference"]={ ["cs"]="definujodkaz", ["de"]="definierereferenz", ["en"]="definereference", ["fr"]="definitreference", ["it"]="definisciriferimento", ["nl"]="definieerreferentie", ["pe"]="تعریف‌مرجع", ["ro"]="definestereferinte", }, ["definereferenceformat"]={ ["cs"]="definujformatodkazu", ["de"]="definierereferenzformat", ["en"]="definereferenceformat", ["fr"]="definitformatreference", ["it"]="definisciformatoriferimento", ["nl"]="definieerreferentieformaat", ["pe"]="تعریف‌شمایل‌مرجع", ["ro"]="definesteformatreferinte", }, ["definereferencelist"]={ ["cs"]="definujseznamodkazu", ["de"]="definierereferenzliste", ["en"]="definereferencelist", ["fr"]="definitlistereference", ["it"]="definiscilistariferimenti", ["nl"]="definieerreferentielijst", ["pe"]="تعریف‌لیست‌مرجع", ["ro"]="definestelistareferinte", }, ["defineregister"]={ ["cs"]="definujrejstrik", ["de"]="definiereregister", ["en"]="defineregister", ["fr"]="definitregistre", ["it"]="definisciregistro", ["nl"]="definieerregister", ["pe"]="تعریف‌ثبت", ["ro"]="definesteregistru", }, ["definerule"]={ ["cs"]="definerule", ["de"]="definerule", ["en"]="definerule", ["fr"]="definitregle", ["it"]="definiscilinea", ["nl"]="definieerlijn", ["pe"]="تعریف‌خط‌حائل", ["ro"]="definesterigla", }, ["definesection"]={ ["cs"]="definujsekci", ["de"]="definiereabschnitt", ["en"]="definesection", ["fr"]="definitsection", ["it"]="definiscisezione", ["nl"]="definieersectie", ["pe"]="تعریف‌بخش", ["ro"]="definestesectiune", }, ["definesectionblock"]={ ["cs"]="definujbloksekce", ["de"]="definiereabschnittsblock", ["en"]="definesectionblock", ["fr"]="definitblocsection", ["it"]="definiscibloccosezione", ["nl"]="definieersectieblok", ["pe"]="تعریف‌بلوک‌بخش", ["ro"]="definesteblocsectiune", }, ["definesorting"]={ ["cs"]="definujtrideni", ["de"]="definieresortieren", ["en"]="definesorting", ["fr"]="definittri", ["it"]="definisciordinamento", ["nl"]="definieersorteren", ["pe"]="تعریف‌ترتیب", ["ro"]="definestesortare", }, ["definestartstop"]={ ["cs"]="definujstartstop", ["de"]="definierestartstop", ["en"]="definestartstop", ["fr"]="definitdemarrestoppe", ["it"]="definisciiniziatermina", ["nl"]="definieerstartstop", ["pe"]="تعریف‌شروع‌پایان", ["ro"]="definestestartstop", }, ["definestyle"]={ ["cs"]="definujstyl", ["de"]="definierestil", ["en"]="definestyle", ["fr"]="definitstyle", ["it"]="definiscistile", ["nl"]="definieerletter", ["pe"]="تعریف‌سبک", ["ro"]="definestestil", }, ["definesubfield"]={ ["cs"]="definujpodpole", ["de"]="definieresubfeld", ["en"]="definesubfield", ["fr"]="definitsouschamp", ["it"]="definiscisottocampo", ["nl"]="definieersubveld", ["pe"]="تعریف‌زیرمیدان", ["ro"]="definestesubcamp", }, ["definesymbol"]={ ["cs"]="definujsymbol", ["de"]="definieresymbol", ["en"]="definesymbol", ["fr"]="definitsymbole", ["it"]="definiscisimbolo", ["nl"]="definieersymbool", ["pe"]="تعریف‌نماد", ["ro"]="definestesimbol", }, ["definesynonyms"]={ ["cs"]="definujsynonyma", ["de"]="definieresynonyme", ["en"]="definesynonyms", ["fr"]="definitsynonymes", ["it"]="definiscisinonimi", ["nl"]="definieersynoniemen", ["pe"]="تعریف‌مترادفها", ["ro"]="definestesinonim", }, ["definetabletemplate"]={ ["cs"]="definujsablonutabulky", ["de"]="definieretabellenvorlage", ["en"]="definetabletemplate", ["fr"]="definittrametableau", ["it"]="definiscimodellotabella", ["nl"]="definieertabelvorm", ["pe"]="تعریف‌الگوی‌جدول", ["ro"]="definestesablontabel", }, ["definetabulate"]={ ["cs"]="definujtabelaci", ["de"]="definieretabulator", ["en"]="definetabulate", ["fr"]="definittabulation", ["it"]="definiscitabulato", ["nl"]="definieertabulatie", ["pe"]="تعریف‌جدول‌بندی", ["ro"]="definestetabulatori", }, ["definetext"]={ ["cs"]="definujtext", ["de"]="definieretext", ["en"]="definetext", ["fr"]="definittexte", ["it"]="definiscitesto", ["nl"]="definieertekst", ["pe"]="تعریف‌متن", ["ro"]="definestetext", }, ["definetextposition"]={ ["cs"]="definetextposition", ["de"]="definetextposition", ["en"]="definetextposition", ["fr"]="definitpositiontexte", ["it"]="definisciposizionetesto", ["nl"]="definieertekstpositie", ["pe"]="تعریف‌مکان‌متن", ["ro"]="definestepozitietext", }, ["definetextvariable"]={ ["cs"]="definetextvariable", ["de"]="definetextvariable", ["en"]="definetextvariable", ["fr"]="definitvariabletexte", ["it"]="definiscivariabiletesto", ["nl"]="definieertekstvariabele", ["pe"]="تعریف‌متغیرمتن", ["ro"]="definestevariabilatext", }, ["definetype"]={ ["cs"]="definetype", ["de"]="definetype", ["en"]="definetype", ["fr"]="definittype", ["it"]="definiscitype", ["nl"]="definieertype", ["pe"]="تعریف‌تایپ", ["ro"]="definetype", }, ["definetyping"]={ ["cs"]="definujopis", ["de"]="definieretippen", ["en"]="definetyping", ["fr"]="definitdactylo", ["it"]="definiscityping", ["nl"]="definieertypen", ["pe"]="تعریف‌تایپ‌کردن", ["ro"]="definestetyping", }, ["defineversion"]={ ["cs"]="definujverzi", ["de"]="definiereversion", ["en"]="defineversion", ["fr"]="definitversion", ["it"]="definisciversion", ["nl"]="definieerversie", ["pe"]="تعریف‌نسخه", ["ro"]="definesteversiune", }, ["determineheadnumber"]={ ["cs"]="stanovcislonadpisu", ["de"]="bestimmekopfnummer", ["en"]="determineheadnumber", ["fr"]="determinenumerotete", ["it"]="determinanumerotesta", ["nl"]="bepaalkopnummer", ["pe"]="تعیین‌شماره‌سر", ["ro"]="determinanumartitlu", }, ["determinelistcharacteristics"]={ ["cs"]="stanovcharakteristickuseznamu", ["de"]="bestimmelistencharakeristika", ["en"]="determinelistcharacteristics", ["fr"]="determinecaracteristiqueliste", ["it"]="determinacarattersticheelenco", ["nl"]="bepaallijstkenmerken", ["pe"]="تعیین‌مشخصات‌لیست", ["ro"]="determinacaracteristicilelistei", }, ["determineregistercharacteristics"]={ ["cs"]="urcicharakteristikurejstriku", ["de"]="bestimmeregistercharakteristika", ["en"]="determineregistercharacteristics", ["fr"]="determinecaracteristiquesregistre", ["it"]="determinacaratteristicheregistro", ["nl"]="bepaalregisterkenmerken", ["pe"]="تعیین‌مشخصات‌ثبت", ["ro"]="determinacaracteristiciregistru", }, ["dimension"]={ ["cs"]="rozmer", ["de"]="dimension", ["en"]="dimension", ["fr"]="dimension", ["it"]="dimensione", ["nl"]="dimensie", ["pe"]="بعد", ["ro"]="dimensiune", }, ["disableinteractionmenu"]={ ["cs"]="zablokujinterakcnimenu", ["de"]="inaktiviereinteraktionsmenue", ["en"]="disableinteractionmenu", ["fr"]="inhibemenuinteraction", ["it"]="disabilitamenuinterazione", ["nl"]="blokkeerinteractiemenu", ["pe"]="ازکارانداختن‌منوی‌پانل", ["ro"]="dezactiveazameniuinteractiune", }, ["domicile"]={ ["cs"]="bydliste", ["de"]="wohnort", ["en"]="domicile", ["fr"]="domicile", ["it"]="domicilio", ["nl"]="woonplaats", ["pe"]="مسکن", ["ro"]="domiciliu", }, ["donttest"]={ ["cs"]="zadnytest", ["de"]="keintest", ["en"]="donttest", ["fr"]="sanstest", ["it"]="notest", ["nl"]="geentest", ["pe"]="امتحان‌نکن", ["ro"]="nutesta", }, ["edgedistance"]={ ["cs"]="vzdalenostokraje", ["de"]="randabstand", ["en"]="edgedistance", ["fr"]="distancebord", ["it"]="distanzabordo", ["nl"]="randafstand", ["pe"]="فاصله‌لبه", ["ro"]="distantacolt", }, ["edgewidth"]={ ["cs"]="sirkaokraje", ["de"]="randbreite", ["en"]="edgewidth", ["fr"]="largeurbord", ["it"]="ampiezzabordo", ["nl"]="randbreedte", ["pe"]="عرض‌لبه", ["ro"]="latimecolturi", }, ["emptylines"]={ ["cs"]="emptylines", ["de"]="emptylines", ["en"]="emptylines", ["fr"]="emptylines", ["it"]="emptylines", ["nl"]="legeregels", ["pe"]="خطها‌خالی", ["ro"]="emptylines", }, ["environment"]={ ["cs"]="prostredi", ["de"]="umgebung", ["en"]="environment", ["fr"]="environement", ["it"]="ambiente", ["nl"]="omgeving", ["pe"]="محیط", ["ro"]="mediu", }, ["externalfigure"]={ ["cs"]="externiobraz", ["de"]="externeabbildung", ["en"]="externalfigure", ["fr"]="figureexterne", ["it"]="figuraesterna", ["nl"]="externfiguur", ["pe"]="شکل‌خارجی", ["ro"]="figuraexterna", }, ["fact"]={ ["cs"]="fakt", ["de"]="geg", ["en"]="fact", ["fr"]="fait", ["it"]="fatto", ["nl"]="geg", ["pe"]="حقیقت", ["ro"]="fact", }, ["field"]={ ["cs"]="pole", ["de"]="feld", ["en"]="field", ["fr"]="champ", ["it"]="campi", ["nl"]="veld", ["pe"]="میدان", ["ro"]="camp", }, ["fieldstack"]={ ["cs"]="zasobnikpoli", ["de"]="feldstapel", ["en"]="fieldstack", ["fr"]="pilechamp", ["it"]="stackcampi", ["nl"]="veldstapel", ["pe"]="میدان‌پشته", ["ro"]="stivacampuri", }, ["fillinfield"]={ ["cs"]="vyplnovepole", ["de"]="ausfuellfeld", ["en"]="fillinfield", ["fr"]="remplitchamp", ["it"]="camporiempimento", ["nl"]="invulveld", ["pe"]="درج‌درمیدان", ["ro"]="campumplere", }, ["fillinline"]={ ["cs"]="vyplnovyradek", ["de"]="gefuelltezeile", ["en"]="fillinline", ["fr"]="remplitligne", ["it"]="rigariempimento", ["nl"]="invulregel", ["pe"]="درج‌درخط", ["ro"]="linieumplere", }, ["fillinrules"]={ ["cs"]="vyplnovelinky", ["de"]="gefuelltesrechteck", ["en"]="fillinrules", ["fr"]="remplitlignesreglees", ["it"]="lineeriempimento", ["nl"]="invullijnen", ["pe"]="درج‌درخطها", ["ro"]="rigleumplere", }, ["fillintext"]={ ["cs"]="vyplnenytext", ["de"]="ausfuelltext", ["en"]="fillintext", ["fr"]="remplittexte", ["it"]="testoriempimento", ["nl"]="invultekst", ["pe"]="درج‌درمتن", ["ro"]="textumplere", }, ["fitfield"]={ ["cs"]="prizpusobivepole", ["de"]="passendfeld", ["en"]="fitfield", ["fr"]="ajustechamp", ["it"]="adattacampo", ["nl"]="passendveld", ["pe"]="پرکردن‌میدان", ["ro"]="potrivestecamp", }, ["fixedspace"]={ ["cs"]="tvrdamezera", ["de"]="festesspatium", ["en"]="fixedspace", ["fr"]="espacefixe", ["it"]="spaziofisso", ["nl"]="vastespatie", ["pe"]="فضای‌ثابت", ["ro"]="spatiufixat", }, ["fixedspaces"]={ ["cs"]="tvrdemezery", ["de"]="festesspatium", ["en"]="fixedspaces", ["fr"]="espacesfixes", ["it"]="spazifissi", ["nl"]="vastespaties", ["pe"]="فضاهای‌ثابت", ["ro"]="spatiifixate", }, ["followprofile"]={ ["cs"]="dodrzujprofil", ["de"]="folgeprofil", ["en"]="followprofile", ["fr"]="suivantprofil", ["it"]="seguiprofilo", ["nl"]="volgprofiel", ["pe"]="پیروی‌پروفایل", ["ro"]="urmeazaprofil", }, ["followprofileversion"]={ ["cs"]="dodrzujverziprofilu", ["de"]="folgeprofilversion", ["en"]="followprofileversion", ["fr"]="suivantversionprofil", ["it"]="seguiversioneprofilo", ["nl"]="volgprofielversie", ["pe"]="پیروی‌نسخه‌پروفایل", ["ro"]="urmeazaversiuneprofil", }, ["followversion"]={ ["cs"]="dodrzujverzi", ["de"]="folgeversion", ["en"]="followversion", ["fr"]="suivantversion", ["it"]="seguiversione", ["nl"]="volgversie", ["pe"]="پیروی‌نسخه", ["ro"]="urmeazaversiune", }, ["footerdistance"]={ ["cs"]="vzdalenostupati", ["de"]="fusszeileabstand", ["en"]="footerdistance", ["fr"]="distancepdp", ["it"]="distanzapdp", ["nl"]="voetafstand", ["pe"]="فاصله‌ته‌برگ", ["ro"]="distantasubsol", }, ["footerheight"]={ ["cs"]="vyskaupati", ["de"]="fusszeilenhoehe", ["en"]="footerheight", ["fr"]="hauteurpdp", ["it"]="altezzapdp", ["nl"]="voethoogte", ["pe"]="ارتفاع‌ته‌برگ", ["ro"]="inaltimesubsol", }, ["footnote"]={ ["cs"]="poznamkapodcarou", ["de"]="fussnote", ["en"]="footnote", ["fr"]="notepdp", ["it"]="notapdp", ["nl"]="voetnoot", ["pe"]="پانوشت", ["ro"]="notasubsol", }, ["footnotetext"]={ ["cs"]="footnotetext", ["de"]="footnotetext", ["en"]="footnotetext", ["fr"]="textenotepdp", ["it"]="testonotapdp", ["nl"]="voetnoottekst", ["pe"]="متن‌پانوشت", ["ro"]="footnotetext", }, ["forceblocks"]={ ["cs"]="forceblocks", ["de"]="forceblocks", ["en"]="forceblocks", ["fr"]="forceblocs", ["it"]="forzablocchi", ["nl"]="forceerblokken", ["pe"]="اجباربلوکها", ["ro"]="forteazablocuri", }, ["formulanumber"]={ ["cs"]="cislorovnice", ["de"]="formelnummer", ["en"]="formulanumber", ["fr"]="numeroformule", ["it"]="numeroformula", ["nl"]="formulenummer", ["pe"]="شماره‌فرمول", ["ro"]="numarformula", }, ["fraction"]={ ["cs"]="zlomek", ["de"]="bruch", ["en"]="fraction", ["fr"]="fraction", ["it"]="frazione", ["nl"]="breuk", ["pe"]="کسر", ["ro"]="fractie", }, ["framed"]={ ["cs"]="oramovani", ["de"]="umrahmt", ["en"]="framed", ["fr"]="framed", ["it"]="incorniciato", ["nl"]="omlijnd", ["pe"]="قالبی", ["ro"]="framed", }, ["from"]={ ["cs"]="zref", ["de"]="von", ["en"]="from", ["fr"]="de", ["it"]="da", ["nl"]="uit", ["pe"]="از", ["ro"]="din", }, ["getbuffer"]={ ["cs"]="ziskejbuffer", ["de"]="holepuffer", ["en"]="getbuffer", ["fr"]="prendbuffer", ["it"]="prendibuffer", ["nl"]="haalbuffer", ["pe"]="دریافت‌بافر", ["ro"]="adubuffer", }, ["getmarking"]={ ["cs"]="ziskejznaceni", ["de"]="holebeschriftung", ["en"]="getmarking", ["fr"]="obtientmarquage", ["it"]="prendimarcatura", ["nl"]="haalmarkering", ["pe"]="دریافت‌نشانه", ["ro"]="adumarcaje", }, ["getnumber"]={ ["cs"]="getnumber", ["de"]="getnumber", ["en"]="getnumber", ["fr"]="getnumber", ["it"]="getnumber", ["nl"]="haalnummer", ["pe"]="دریافت‌شماره", ["ro"]="getnumber", }, ["godown"]={ ["cs"]="jdidolu", ["de"]="nachunten", ["en"]="godown", ["fr"]="vaenbas", ["it"]="vaigiu", ["nl"]="omlaag", ["pe"]="بروپایین", ["ro"]="injos", }, ["goto"]={ ["cs"]="jdina", ["de"]="zu", ["en"]="goto", ["fr"]="va", ["it"]="vaia", ["nl"]="naar", ["pe"]="بروبه", ["ro"]="dute", }, ["gotobox"]={ ["cs"]="jdinabox", ["de"]="zurbox", ["en"]="gotobox", ["fr"]="vaalaboite", ["it"]="vaiabox", ["nl"]="naarbox", ["pe"]="بروبه‌جعبه", ["ro"]="dutebox", }, ["gotopage"]={ ["cs"]="jdinastranu", ["de"]="zurseite", ["en"]="gotopage", ["fr"]="vaalapage", ["it"]="vaiapagina", ["nl"]="naarpagina", ["pe"]="بروبه‌صفحه", ["ro"]="dutepagina", }, ["graycolor"]={ ["cs"]="sedabarva", ["de"]="graufarbe", ["en"]="graycolor", ["fr"]="couleurgrise", ["it"]="coloregrigio", ["nl"]="grijskleur", ["pe"]="رنگ‌خاکستری", ["ro"]="culoaregri", }, ["greyvalue"]={ ["cs"]="hodnotasedi", ["de"]="grauwert", ["en"]="greyvalue", ["fr"]="valeurgris", ["it"]="valoregrigio", ["nl"]="grijswaarde", ["pe"]="مقدارخاکستری", ["ro"]="valoaregri", }, ["grid"]={ ["cs"]="mrizka", ["de"]="gitter", ["en"]="grid", ["fr"]="grille", ["it"]="griglia", ["nl"]="rooster", ["pe"]="توری", ["ro"]="grid", }, ["hairline"]={ ["cs"]="vlasovalinka", ["de"]="haarlinie", ["en"]="hairline", ["fr"]="ligneh", ["it"]="capello", ["nl"]="haarlijn", ["pe"]="خط‌مو", ["ro"]="firdepar", }, ["head"]={ ["cs"]="nadpis", ["de"]="kopf", ["en"]="head", ["fr"]="tete", ["it"]="testa", ["nl"]="kop", ["pe"]="سر", ["ro"]="titlu", }, ["headerdistance"]={ ["cs"]="vzdalenostzahlavi", ["de"]="kopfzeilenabstand", ["en"]="headerdistance", ["fr"]="distanceentete", ["it"]="distanzaintestazione", ["nl"]="hoofdafstand", ["pe"]="فاصله‌سربرگ", ["ro"]="distantaantet", }, ["headerheight"]={ ["cs"]="vyskazahlavi", ["de"]="kopfzeilenhoehe", ["en"]="headerheight", ["fr"]="hauteurentete", ["it"]="altezzaintestazione", ["nl"]="hoofdhoogte", ["pe"]="ارتفاع‌سربرگ", ["ro"]="inaltimeantet", }, ["headlevel"]={ ["cs"]="hlavniuroven", ["de"]="kopfniveau", ["en"]="headlevel", ["fr"]="niveautete", ["it"]="livellotesta", ["nl"]="kopniveau", ["pe"]="مرحله‌سر", ["ro"]="niveltitlu", }, ["headnumber"]={ ["cs"]="cislonadpisu", ["de"]="kopfnummer", ["en"]="headnumber", ["fr"]="numerotete", ["it"]="numerotesta", ["nl"]="kopnummer", ["pe"]="شماره‌سر", ["ro"]="numartitlu", }, ["headsym"]={ ["cs"]="headsym", ["de"]="headsym", ["en"]="headsym", ["fr"]="headsym", ["it"]="headsym", ["nl"]="kopsym", ["pe"]="نمادسر", ["ro"]="headsym", }, ["headtext"]={ ["cs"]="texthlavicky", ["de"]="ueberschrifttext", ["en"]="headtext", ["fr"]="textetete", ["it"]="testoinstestazioni", ["nl"]="koptekst", ["pe"]="متن‌سر", ["ro"]="texttitlu", }, ["hideblocks"]={ ["cs"]="schovejbloky", ["de"]="verbergebloecke", ["en"]="hideblocks", ["fr"]="cacheblocs", ["it"]="nascondiblocchi", ["nl"]="verbergblokken", ["pe"]="بلوکها‌پنهان", ["ro"]="ascundeblocuri", }, ["high"]={ ["cs"]="vysoky", ["de"]="hoch", ["en"]="high", ["fr"]="haut", ["it"]="ap", ["nl"]="hoog", ["pe"]="بلند", ["ro"]="inalt", }, ["hl"]={ ["cs"]="hl", ["de"]="hl", ["en"]="hl", ["fr"]="hl", ["it"]="hl", ["nl"]="hl", ["pe"]="خ‌ا", ["ro"]="hl", }, ["immediatebetweenlist"]={ ["cs"]="immediatebetweenlist", ["de"]="immediatebetweenlist", ["en"]="immediatebetweenlist", ["fr"]="immediatebetweenlist", ["it"]="immediatebetweenlist", ["nl"]="directtussenlijst", ["pe"]="فوری‌بین‌لیست", ["ro"]="immediatebetweenlist", }, ["immediatetolist"]={ ["cs"]="immediatetolist", ["de"]="immediatetolist", ["en"]="immediatetolist", ["fr"]="immediatetolist", ["it"]="immediatetolist", ["nl"]="directnaarlijst", ["pe"]="فوری‌به‌لیست", ["ro"]="immediatetolist", }, ["in"]={ ["cs"]="tref", ["de"]="in", ["en"]="in", ["fr"]="dans", ["it"]="in", ["nl"]="in", ["pe"]="درون", ["ro"]="in", }, ["incrementnumber"]={ ["cs"]="zvysujicicislo", ["de"]="nummererhoehen", ["en"]="incrementnumber", ["fr"]="incrementenumero", ["it"]="incrementanumero", ["nl"]="verhoognummer", ["pe"]="شماره‌افزایش", ["ro"]="numarincrement", }, ["indenting"]={ ["cs"]="odsazovani", ["de"]="einziehen", ["en"]="indenting", ["fr"]="composeenalinea", ["it"]="rientro", ["nl"]="inspringen", ["pe"]="تورفتگی", ["ro"]="aliniat", }, ["inframed"]={ ["cs"]="zaramovani", ["de"]="imumriss", ["en"]="inframed", ["fr"]="inframed", ["it"]="circondato", ["nl"]="inlijnd", ["pe"]="درقالبی", ["ro"]="inframed", }, ["infull"]={ ["cs"]="plnezneni", ["de"]="volleswort", ["en"]="infull", ["fr"]="infull", ["it"]="perlungo", ["nl"]="voluit", ["pe"]="درپر", ["ro"]="pelung", }, ["ininner"]={ ["cs"]="ininner", ["de"]="ininner", ["en"]="ininner", ["fr"]="ininner", ["it"]="ininner", ["nl"]="inbinnen", ["pe"]="درداخلی", ["ro"]="ininner", }, ["inleft"]={ ["cs"]="vlevo", ["de"]="imlinken", ["en"]="inleft", ["fr"]="dansgauche", ["it"]="insinistra", ["nl"]="inlinker", ["pe"]="درچپ", ["ro"]="instanga", }, ["inleftedge"]={ ["cs"]="nalevo", ["de"]="imlinkenrand", ["en"]="inleftedge", ["fr"]="dansbordgauche", ["it"]="inlatosinistro", ["nl"]="inlinkerrand", ["pe"]="درلبه‌چپ", ["ro"]="inparteastanga", }, ["inleftmargin"]={ ["cs"]="nalevyokraj", ["de"]="inlinkermarginale", ["en"]="inleftmargin", ["fr"]="dansmargegauche", ["it"]="inmarginesinistro", ["nl"]="inlinkermarge", ["pe"]="درحاشیه‌چپ", ["ro"]="inmargineastanga", }, ["inline"]={ ["cs"]="vradku", ["de"]="inzeile", ["en"]="inline", ["fr"]="alaligne", ["it"]="inriga", ["nl"]="inregel", ["pe"]="درخط", ["ro"]="inlinie", }, ["inmargin"]={ ["cs"]="naokraj", ["de"]="inmarginalie", ["en"]="inmargin", ["fr"]="dansmarge", ["it"]="inmargine", ["nl"]="inmarge", ["pe"]="درحاشیه", ["ro"]="marginal", }, ["inmframed"]={ ["cs"]="mazaramovani", ["de"]="immaumrise", ["en"]="inmaframed", ["fr"]="inmframed", ["it"]="inmaframed", ["nl"]="inwilijnd", ["pe"]="inmframed", ["ro"]="inmaframed", }, ["inneredgedistance"]={ ["cs"]="inneredgedistance", ["de"]="inneredgedistance", ["en"]="inneredgedistance", ["fr"]="inneredgedistance", ["it"]="inneredgedistance", ["nl"]="binnenrandafstand", ["pe"]="فاصله‌لبه‌داخلی", ["ro"]="inneredgedistance", }, ["inneredgewidth"]={ ["cs"]="inneredgewidth", ["de"]="inneredgewidth", ["en"]="inneredgewidth", ["fr"]="inneredgewidth", ["it"]="inneredgewidth", ["nl"]="binnenrandbreedte", ["pe"]="عرض‌لبه‌داخلی", ["ro"]="inneredgewidth", }, ["innermargindistance"]={ ["cs"]="innermargindistance", ["de"]="innermargindistance", ["en"]="innermargindistance", ["fr"]="innermargindistance", ["it"]="innermargindistance", ["nl"]="binnenmargeafstand", ["pe"]="فاصله‌حاشیه‌داخلی", ["ro"]="innermargindistance", }, ["innermarginwidth"]={ ["cs"]="innermarginwidth", ["de"]="innermarginwidth", ["en"]="innermarginwidth", ["fr"]="innermarginwidth", ["it"]="innermarginwidth", ["nl"]="binnenmargebreedte", ["pe"]="عرض‌حاشیه‌داخلی", ["ro"]="innermarginwidth", }, ["inothermargin"]={ ["cs"]="nadruhyokraj", ["de"]="inanderermarginale", ["en"]="inothermargin", ["fr"]="dansautremarge", ["it"]="inaltromargine", ["nl"]="inanderemarge", ["pe"]="درحاشیه‌دیگر", ["ro"]="inaltamargine", }, ["inouter"]={ ["cs"]="inouter", ["de"]="inouter", ["en"]="inouter", ["fr"]="inouter", ["it"]="inouter", ["nl"]="inbuiten", ["pe"]="درخارجی", ["ro"]="inouter", }, ["inright"]={ ["cs"]="vpravo", ["de"]="imrechten", ["en"]="inright", ["fr"]="dansdroite", ["it"]="indestra", ["nl"]="inrechter", ["pe"]="درراست", ["ro"]="indreapta", }, ["inrightedge"]={ ["cs"]="napravo", ["de"]="imrechtenrand", ["en"]="inrightedge", ["fr"]="dansborddroit", ["it"]="inlatodestro", ["nl"]="inrechterrand", ["pe"]="درلبه‌راست", ["ro"]="inparteadreapta", }, ["inrightmargin"]={ ["cs"]="napravyokraj", ["de"]="inrechtermarginale", ["en"]="inrightmargin", ["fr"]="dansmargedroite", ["it"]="inmarginedestro", ["nl"]="inrechtermarge", ["pe"]="درحاشیه‌راست", ["ro"]="inmargineadreapta", }, ["installlanguage"]={ ["cs"]="instalacejazyka", ["de"]="installieresprache", ["en"]="installlanguage", ["fr"]="installelangue", ["it"]="installalingua", ["nl"]="installeertaal", ["pe"]="نصب‌زبان", ["ro"]="instalarelimba", }, ["interactionbar"]={ ["cs"]="interakcnilista", ["de"]="interaktionsbalken", ["en"]="interactionbar", ["fr"]="barreinteraction", ["it"]="barrainterazione", ["nl"]="interactiebalk", ["pe"]="میله‌پانل", ["ro"]="barainteractiune", }, ["interactionbuttons"]={ ["cs"]="interakcnitlacitka", ["de"]="interaktionsknopfe", ["en"]="interactionbuttons", ["fr"]="boutonsinteraction", ["it"]="pulsantinterazione", ["nl"]="interactiebuttons", ["pe"]="دکمه‌پانل", ["ro"]="butoaneinteractiune", }, ["interactionmenu"]={ ["cs"]="interaktivnimenu", ["de"]="interaktionsmenue", ["en"]="interactionmenu", ["fr"]="menuinteraction", ["it"]="menuinterattivo", ["nl"]="interactiemenu", ["pe"]="منوی‌پانل", ["ro"]="meniuinteractiune", }, ["item"]={ ["cs"]="polozka", ["de"]="pos", ["en"]="item", ["fr"]="element", ["it"]="elemento", ["nl"]="som", ["pe"]="آیتم", ["ro"]="element", }, ["items"]={ ["cs"]="polozky", ["de"]="posten", ["en"]="items", ["fr"]="elements", ["it"]="elementi", ["nl"]="items", ["pe"]="آیتمها", ["ro"]="element", }, ["its"]={ ["cs"]="pol", ["de"]="its", ["en"]="its", ["fr"]="el", ["it"]="el", ["nl"]="its", ["pe"]="its", ["ro"]="el", }, ["keepblocks"]={ ["cs"]="zachovejbloky", ["de"]="behaltebloecke", ["en"]="keepblocks", ["fr"]="gardeblocs", ["it"]="tieniblocchi", ["nl"]="handhaafblokken", ["pe"]="حفظ‌بلوکها", ["ro"]="pastreazablocuri", }, ["label"]={ ["cs"]="poppisek", ["de"]="label", ["en"]="label", ["fr"]="etiquette", ["it"]="etichetta", ["nl"]="label", ["pe"]="برچسب", ["ro"]="eticheta", }, ["labels"]={ ["cs"]="popisky", ["de"]="labels", ["en"]="labels", ["fr"]="etiquettes", ["it"]="etichette", ["nl"]="labels", ["pe"]="برچسبها", ["ro"]="etichete", }, ["labeltext"]={ ["cs"]="textpopisku", ["de"]="labeltext", ["en"]="labeltext", ["fr"]="labeltexte", ["it"]="testoetichetta", ["nl"]="labeltekst", ["pe"]="متن‌برچسب", ["ro"]="texteticheta", }, ["language"]={ ["cs"]="jazyk", ["de"]="sprache", ["en"]="language", ["fr"]="langue", ["it"]="lingua", ["nl"]="taal", ["pe"]="زبان", ["ro"]="limba", }, ["leftaligned"]={ ["cs"]="zarovnanovlevo", ["de"]="linksbuendig", ["en"]="leftaligned", ["fr"]="aligneagauche", ["it"]="allineasinistra", ["nl"]="regellinks", ["pe"]="چپ‌چین", ["ro"]="aliniatstanga", }, ["leftedgedistance"]={ ["cs"]="vzdalenostlevehookraje", ["de"]="abstandlinkerrand", ["en"]="leftedgedistance", ["fr"]="distancebordgauche", ["it"]="distanzabordosinistro", ["nl"]="linkerrandafstand", ["pe"]="فاصله‌لبه‌چپ", ["ro"]="distantacoltstanga", }, ["leftedgewidth"]={ ["cs"]="sirkalevehookraje", ["de"]="breitelinkerrand", ["en"]="leftedgewidth", ["fr"]="largeurbordgauche", ["it"]="ampiezzabordosinistro", ["nl"]="linkerrandbreedte", ["pe"]="عرض‌لبه‌چپ", ["ro"]="latimecoltstanga", }, ["leftmargindistance"]={ ["cs"]="vzdalenostlevemarginalie", ["de"]="linkemarginalafstand", ["en"]="leftmargindistance", ["fr"]="distancemargegauche", ["it"]="distanzamarginesinistro", ["nl"]="linkermargeafstand", ["pe"]="فاصله‌حاشیه‌چپ", ["ro"]="distantamarginestanga", }, ["leftmarginwidth"]={ ["cs"]="sirkalevemarginalie", ["de"]="linkemarginalbreite", ["en"]="leftmarginwidth", ["fr"]="largeurmargegauche", ["it"]="ampiezzamarginesinistro", ["nl"]="linkermargebreedte", ["pe"]="عرض‌حاشیه‌چپ", ["ro"]="latimemarginestanga", }, ["leg"]={ ["cs"]="leg", ["de"]="leg", ["en"]="leg", ["fr"]="leg", ["it"]="leg", ["nl"]="leg", ["pe"]="پا", ["ro"]="leg", }, ["linewidth"]={ ["cs"]="tloustkacary", ["de"]="liniendicke", ["en"]="linethickness", ["fr"]="largeurligne", ["it"]="spessoreriga", ["nl"]="lijndikte", ["pe"]="عرض‌خط", ["ro"]="grosimelinie", }, ["listheight"]={ ["cs"]="vyskaseznamu", ["de"]="listenhoehe", ["en"]="listheight", ["fr"]="hauteurliste", ["it"]="altezzaelenco", ["nl"]="lijsthoogte", ["pe"]="ارتفاع‌خط", ["ro"]="inaltimelista", }, ["listlength"]={ ["cs"]="delkaseznamu", ["de"]="listenlaenge", ["en"]="listlength", ["fr"]="llongueurliste", ["it"]="lunghezzaelenco", ["nl"]="lijstlengte", ["pe"]="طول‌لیست", ["ro"]="lungimelista", }, ["listsymbol"]={ ["cs"]="listsymbol", ["de"]="listsymbol", ["en"]="listsymbol", ["fr"]="listesymbole", ["it"]="listsymbol", ["nl"]="lijstsymbool", ["pe"]="نمادلیست", ["ro"]="listsymbol", }, ["listwidth"]={ ["cs"]="sirkaseznamu", ["de"]="listenbreite", ["en"]="listwidth", ["fr"]="largeurliste", ["it"]="ampiezzaelenco", ["nl"]="lijstbreedte", ["pe"]="عرض‌لیست", ["ro"]="latimelista", }, ["logfields"]={ ["cs"]="zaznamovepole", ["de"]="registrierefelder", ["en"]="logfields", ["fr"]="logchamp", ["it"]="logcampi", ["nl"]="registreervelden", ["pe"]="میدانهای‌گزارش", ["ro"]="logcampuri", }, ["lohi"]={ ["cs"]="nivy", ["de"]="tiho", ["en"]="lohi", ["fr"]="baha", ["it"]="pedap", ["nl"]="laho", ["pe"]="پابا", ["ro"]="jossus", }, ["low"]={ ["cs"]="nizky", ["de"]="tief", ["en"]="low", ["fr"]="bas", ["it"]="ped", ["nl"]="laag", ["pe"]="پایین", ["ro"]="jos", }, ["macroname"]={ ["cs"]="jmeno", ["de"]="name", ["en"]="name", ["fr"]="nommacro", ["it"]="nome", ["nl"]="naam", ["pe"]="نام‌ماکرو", ["ro"]="nume", }, ["mainlanguage"]={ ["cs"]="hlavnijazyk", ["de"]="hauptsprache", ["en"]="mainlanguage", ["fr"]="langueprincipale", ["it"]="linguaprincipale", ["nl"]="hoofdtaal", ["pe"]="زبان‌اصلی", ["ro"]="limbaprincipala", }, ["makeupheight"]={ ["cs"]="vyskasazby", ["de"]="satzhoehe", ["en"]="makeupheight", ["fr"]="hauteurmakeup", ["it"]="altezzamakeup", ["nl"]="zethoogte", ["pe"]="ارتفاع‌آرایش", ["ro"]="inaltimemakeup", }, ["makeupwidth"]={ ["cs"]="sirkasazby", ["de"]="satzbreite", ["en"]="makeupwidth", ["fr"]="largeurmakeup", ["it"]="ampiezzamakeup", ["nl"]="zetbreedte", ["pe"]="عرض‌آرایش", ["ro"]="latimemakeup", }, ["mar"]={ ["cs"]="okr", ["de"]="mar", ["en"]="mar", ["fr"]="mar", ["it"]="mar", ["nl"]="mar", ["pe"]="حاش", ["ro"]="mar", }, ["margindistance"]={ ["cs"]="vzdalenostmarginalie", ["de"]="marginalafstand", ["en"]="margindistance", ["fr"]="distancemarge", ["it"]="distanzamargine", ["nl"]="margeafstand", ["pe"]="فاصله‌حاشیه", ["ro"]="distantamargine", }, ["marginrule"]={ ["cs"]="marginalnilinka", ["de"]="marginallinie", ["en"]="marginrule", ["fr"]="margereglee", ["it"]="lineamargine", ["nl"]="kantlijn", ["pe"]="خط‌حاشیه", ["ro"]="liniemargine", }, ["margintext"]={ ["cs"]="marginalnitext", ["de"]="marginaltext", ["en"]="margintext", ["fr"]="textemarge", ["it"]="testoinmargine", ["nl"]="margetekst", ["pe"]="متن‌حاشیه", ["ro"]="textmarginal", }, ["margintitle"]={ ["cs"]="marginalninadpis", ["de"]="marginaltitel", ["en"]="margintitle", ["fr"]="titremarge", ["it"]="titoloinmargine", ["nl"]="margetitel", ["pe"]="عنوان‌حاشیه", ["ro"]="titlumarginal", }, ["marginwidth"]={ ["cs"]="sirkamarginalie", ["de"]="marginalbreite", ["en"]="marginwidth", ["fr"]="largeurmarge", ["it"]="ampiezzamargine", ["nl"]="margebreedte", ["pe"]="عرض‌حاشیه", ["ro"]="latimemargine", }, ["marginword"]={ ["cs"]="marginalnislovo", ["de"]="marginalwort", ["en"]="marginword", ["fr"]="motmarge", ["it"]="parolainmargine", ["nl"]="margewoord", ["pe"]="کلمه‌حاشیه", ["ro"]="cuvantmarginal", }, ["marking"]={ ["cs"]="znaceni", ["de"]="beschriftung", ["en"]="marking", ["fr"]="marquage", ["it"]="marcatura", ["nl"]="markeer", ["pe"]="نشانه‌گذاری", ["ro"]="marcaje", }, ["markversion"]={ ["cs"]="oznacverzi", ["de"]="beschrifteversion", ["en"]="markversion", ["fr"]="marquageversion", ["it"]="marcaversione", ["nl"]="markeerversie", ["pe"]="نسخه‌نشانه", ["ro"]="marcheazaversiune", }, ["mathematics"]={ ["cs"]="matematika", ["de"]="mathematik", ["en"]="mathematics", ["fr"]="mathematique", ["it"]="matematica", ["nl"]="wiskunde", ["pe"]="ریاضی", ["ro"]="matematica", }, ["menubutton"]={ ["cs"]="tlacitkomenu", ["de"]="menueknopf", ["en"]="menubutton", ["fr"]="boutonmenu", ["it"]="pulsantemenu", ["nl"]="menubutton", ["pe"]="دکمه‌منو", ["ro"]="butonmeniu", }, ["mframed"]={ ["cs"]="maoramovani", ["de"]="maumrise", ["en"]="maframed", ["fr"]="mframed", ["it"]="maframed", ["nl"]="wilijnd", ["pe"]="mframed", ["ro"]="maframed", }, ["midaligned"]={ ["cs"]="zarovnanonastred", ["de"]="zentriert", ["en"]="midaligned", ["fr"]="aligneaumilieu", ["it"]="allineacentro", ["nl"]="regelmidden", ["pe"]="تنظیم‌وسط", ["ro"]="aliniatcentru", }, ["mirror"]={ ["cs"]="zrcadlit", ["de"]="spiegeln", ["en"]="mirror", ["fr"]="reflete", ["it"]="riflessione", ["nl"]="spiegel", ["pe"]="آینه", ["ro"]="reflexie", }, ["month"]={ ["cs"]="mesic", ["de"]="monat", ["en"]="month", ["fr"]="mois", ["it"]="mese", ["nl"]="maand", ["pe"]="ماه", ["ro"]="luna", }, ["moveformula"]={ ["cs"]="moveformula", ["de"]="moveformula", ["en"]="moveformula", ["fr"]="deplaceformule", ["it"]="spostaformula", ["nl"]="verplaatsformule", ["pe"]="انتقال‌فرمول", ["ro"]="moveformula", }, ["moveongrid"]={ ["cs"]="premistinamrizku", ["de"]="amgitterneuausrichten", ["en"]="moveongrid", ["fr"]="deplacesurgrille", ["it"]="spostaagriglia", ["nl"]="verplaatsopgrid", ["pe"]="انتقال‌به‌توری", ["ro"]="mutapegrid", }, ["movesidefloat"]={ ["cs"]="movesidefloat", ["de"]="movesidefloat", ["en"]="movesidefloat", ["fr"]="movesidefloat", ["it"]="movesidefloat", ["nl"]="verplaatszijblok", ["pe"]="انتقال‌کنار‌شناور", ["ro"]="movesidefloat", }, ["navigating"]={ ["cs"]="navigating", ["de"]="navigating", ["en"]="navigating", ["fr"]="navigating", ["it"]="navigating", ["nl"]="navigerend", ["pe"]="هدایت", ["ro"]="navigating", }, ["nodimension"]={ ["cs"]="zadnyrozmer", ["de"]="keindimension", ["en"]="nodimension", ["fr"]="sansdimension", ["it"]="nientedimensioni", ["nl"]="geendimensie", ["pe"]="بدون‌بعد", ["ro"]="faradimensiune", }, ["noheaderandfooterlines"]={ ["cs"]="zadnezahlaviaupati", ["de"]="keinekopfundfusszeilen", ["en"]="noheaderandfooterlines", ["fr"]="sanslignesenteteetpdp", ["it"]="nientelineintestazionepdp", ["nl"]="geenhoofdenvoetregels", ["pe"]="بدون‌خط‌سروته‌برگ", ["ro"]="faraliniiantetsisubsol", }, ["noindenting"]={ ["cs"]="zadneodsazovani", ["de"]="nichteinziehen", ["en"]="noindenting", ["fr"]="sansalinea", ["it"]="nienterientro", ["nl"]="nietinspringen", ["pe"]="بدون‌تورفتگی", ["ro"]="faraaliniat", }, ["nolist"]={ ["cs"]="zadnyseznam", ["de"]="keineliste", ["en"]="nolist", ["fr"]="sansliste", ["it"]="nienteelenco", ["nl"]="geenlijst", ["pe"]="بدون‌لیست", ["ro"]="faralista", }, ["nomarking"]={ ["cs"]="zadneznaceni", ["de"]="keinebeschriftung", ["en"]="nomarking", ["fr"]="sansmarquage", ["it"]="nientemarcatura", ["nl"]="geenmarkering", ["pe"]="بدون‌نشانه‌گذاری", ["ro"]="faramarcaje", }, ["nomoreblocks"]={ ["cs"]="zadnedalsibloky", ["de"]="keinebloeckemehr", ["en"]="nomoreblocks", ["fr"]="pasplusdeblocs", ["it"]="bastablocchi", ["nl"]="geenblokkenmeer", ["pe"]="بدون‌بلوکهای‌بیشتر", ["ro"]="gatablocuri", }, ["nomorefiles"]={ ["cs"]="zadnedalsisoubory", ["de"]="keinedateienmehr", ["en"]="nomorefiles", ["fr"]="pasplusdefichiers", ["it"]="bastafile", ["nl"]="geenfilesmeer", ["pe"]="بدون‌فایلهای‌بیشتر", ["ro"]="farafisiere", }, ["nop"]={ ["cs"]="nop", ["de"]="nop", ["en"]="nop", ["fr"]="nop", ["it"]="nop", ["nl"]="nop", ["pe"]="منفی", ["ro"]="nop", }, ["nospace"]={ ["cs"]="zadnamezera", ["de"]="keinspatium", ["en"]="nospace", ["fr"]="sansespace", ["it"]="nientespazio", ["nl"]="geenspatie", ["pe"]="بدون‌فضا", ["ro"]="faraspatiu", }, ["note"]={ ["cs"]="poznamka", ["de"]="notiz", ["en"]="note", ["fr"]="note", ["it"]="nota", ["nl"]="noot", ["pe"]="یادداشت", ["ro"]="nota", }, ["notopandbottomlines"]={ ["cs"]="zadnehorniadolniradky", ["de"]="keinzeilenobenundunten", ["en"]="notopandbottomlines", ["fr"]="sanslignessupetinf", ["it"]="nientelineecimafondo", ["nl"]="geenbovenenonderregels", ["pe"]="بدون‌خط‌بالاوپایین", ["ro"]="faraliniisussijos", }, ["notsmallcapped"]={ ["cs"]="nokap", ["de"]="nokap", ["en"]="nocap", ["fr"]="nocap", ["it"]="nocap", ["nl"]="nokap", ["pe"]="سرپوش‌کوچک‌نه", ["ro"]="nokap", }, ["nowhitespace"]={ ["cs"]="zadnebilemisto", ["de"]="keinzwischenraum", ["en"]="nowhitespace", ["fr"]="sansespaceblanc", ["it"]="nientespaziobianco", ["nl"]="geenwitruimte", ["pe"]="بدون‌فضای‌سفید", ["ro"]="faraspatiualb", }, ["numberofsubpages"]={ ["cs"]="numberofsubpages", ["de"]="numberofsubpages", ["en"]="numberofsubpages", ["fr"]="nombredesouspages", ["it"]="numberofsubpages", ["nl"]="aantalsubpaginas", ["pe"]="شماره‌زیرصفحه", ["ro"]="numberofsubpages", }, ["numbers"]={ ["cs"]="cisla", ["de"]="ziffern", ["en"]="numbers", ["fr"]="numeros", ["it"]="numeri", ["nl"]="cijfers", ["pe"]="شماره‌ها", ["ro"]="numere", }, ["outeredgedistance"]={ ["cs"]="outeredgedistance", ["de"]="outeredgedistance", ["en"]="outeredgedistance", ["fr"]="outeredgedistance", ["it"]="outeredgedistance", ["nl"]="buitenrandafstand", ["pe"]="فاصله‌لبه‌خارجی", ["ro"]="outeredgedistance", }, ["outeredgewidth"]={ ["cs"]="outeredgewidth", ["de"]="outeredgewidth", ["en"]="outeredgewidth", ["fr"]="outeredgewidth", ["it"]="outeredgewidth", ["nl"]="buitenrandbreedte", ["pe"]="عرض‌لبه‌خارجی", ["ro"]="outeredgewidth", }, ["outermargindistance"]={ ["cs"]="outermargindistance", ["de"]="outermargindistance", ["en"]="outermargindistance", ["fr"]="outermargindistance", ["it"]="outermargindistance", ["nl"]="buitenmargeafstand", ["pe"]="فاصله‌حاشیه‌خارجی", ["ro"]="outermargindistance", }, ["outermarginwidth"]={ ["cs"]="outermarginwidth", ["de"]="outermarginwidth", ["en"]="outermarginwidth", ["fr"]="outermarginwidth", ["it"]="outermarginwidth", ["nl"]="buitenmargebreedte", ["pe"]="عرض‌حاشیه‌خارجی", ["ro"]="outermarginwidth", }, ["packed"]={ ["cs"]="zhustene", ["de"]="kleinerdurchschuss", ["en"]="packed", ["fr"]="groupe", ["it"]="impaccato", ["nl"]="opelkaar", ["pe"]="فشرده", ["ro"]="impachetat", }, ["page"]={ ["cs"]="strana", ["de"]="seite", ["en"]="page", ["fr"]="page", ["it"]="pagina", ["nl"]="pagina", ["pe"]="صفحه", ["ro"]="pagina", }, ["pagedepth"]={ ["cs"]="pagedepth", ["de"]="pagedepth", ["en"]="pagedepth", ["fr"]="pagedepth", ["it"]="pagedepth", ["nl"]="paginadiepte", ["pe"]="عمق‌صفحه", ["ro"]="pagedepth", }, ["pagenumber"]={ ["cs"]="cislostrany", ["de"]="seitenummer", ["en"]="pagenumber", ["fr"]="numeropage", ["it"]="numeropagina", ["nl"]="paginanummer", ["pe"]="شماره‌صفحه", ["ro"]="numarpagina", }, ["pageoffset"]={ ["cs"]="pageoffset", ["de"]="pageoffset", ["en"]="pageoffset", ["fr"]="pageoffset", ["it"]="pageoffset", ["nl"]="paginaoffset", ["pe"]="آفست‌صفحه", ["ro"]="pageoffset", }, ["pagereference"]={ ["cs"]="odkaznastranu", ["de"]="seitenreferenz", ["en"]="pagereference", ["fr"]="referencepage", ["it"]="riferimentopagina", ["nl"]="paginareferentie", ["pe"]="مرجع‌صفحه", ["ro"]="referintapagina", }, ["paperheight"]={ ["cs"]="vyskapapiru", ["de"]="papierhoehe", ["en"]="paperheight", ["fr"]="hauteurpapier", ["it"]="altezzacarta", ["nl"]="papierhoogte", ["pe"]="ارتفاع‌برگ", ["ro"]="inaltimehartie", }, ["paperwidth"]={ ["cs"]="sirkapapiru", ["de"]="papierbreite", ["en"]="paperwidth", ["fr"]="largeurpapier", ["it"]="ampiezzacarta", ["nl"]="papierbreedte", ["pe"]="عرض‌برگ", ["ro"]="latimehartie", }, ["periods"]={ ["cs"]="tecky", ["de"]="punkt", ["en"]="periods", ["fr"]="periodes", ["it"]="punti", ["nl"]="punten", ["pe"]="نقطه‌ها", ["ro"]="puncte", }, ["plaatsruwelijst"]={ ["cs"]="placerawlist", ["de"]="placerawlist", ["en"]="placerawlist", ["fr"]="placerawlist", ["it"]="placerawlist", ["nl"]="plaatsruwelijst", ["pe"]="درج‌لیست‌خام", ["ro"]="placerawlist", }, ["placebookmarks"]={ ["cs"]="umistizalozky", ["de"]="platzierebookmarks", ["en"]="placebookmarks", ["fr"]="placemarquespages", ["it"]="mettisegnalibro", ["nl"]="plaatsbookmarks", ["pe"]="درج‌چوب‌خط", ["ro"]="plaseazasemnecarte", }, ["placecombinedlist"]={ ["cs"]="umistikombinovanyseznam", ["de"]="platzierezusammengestellteliste", ["en"]="placecombinedlist", ["fr"]="placelisteinmbriquee", ["it"]="mettielencocombinato", ["nl"]="plaatssamengesteldelijst", ["pe"]="درج‌لیست‌مختلط", ["ro"]="punelistacombinata", }, ["placefloat"]={ ["cs"]="placefloat", ["de"]="placefloat", ["en"]="placefloat", ["fr"]="placeflottant", ["it"]="placefloat", ["nl"]="plaatsplaatsblok", ["pe"]="درج‌شناور", ["ro"]="placefloat", }, ["placefootnotes"]={ ["cs"]="umistipoznamkypodcarou", ["de"]="platzierefussnoten", ["en"]="placefootnotes", ["fr"]="placenotespdp", ["it"]="mettinotepdp", ["nl"]="plaatsvoetnoten", ["pe"]="درج‌پانوشتها", ["ro"]="punenotesubsol", }, ["placeformula"]={ ["cs"]="umistirovnici", ["de"]="platziereformel", ["en"]="placeformula", ["fr"]="placeformule", ["it"]="mettiformula", ["nl"]="plaatsformule", ["pe"]="درج‌فرمول", ["ro"]="puneformula", }, ["placeheadnumber"]={ ["cs"]="placeheadnumber", ["de"]="placeheadnumber", ["en"]="placeheadnumber", ["fr"]="placenumerotete", ["it"]="posizionanumerotesta", ["nl"]="plaatskopnummer", ["pe"]="درج‌شماره‌سر", ["ro"]="placeheadnumber", }, ["placeheadtext"]={ ["cs"]="placeheadtext", ["de"]="placeheadtext", ["en"]="placeheadtext", ["fr"]="placetextetete", ["it"]="posizionatestotesta", ["nl"]="plaatskoptekst", ["pe"]="درج‌متن‌سر", ["ro"]="placeheadtext", }, ["placelegend"]={ ["cs"]="umistilegendu", ["de"]="platzierelegende", ["en"]="placelegend", ["fr"]="placelegende", ["it"]="mettilegenda", ["nl"]="plaatslegenda", ["pe"]="درج‌راهنما", ["ro"]="punelegenda", }, ["placelist"]={ ["cs"]="umistiseznam", ["de"]="platziereliste", ["en"]="placelist", ["fr"]="placeliste", ["it"]="mettielenco", ["nl"]="plaatslijst", ["pe"]="درج‌لیست", ["ro"]="punelista", }, ["placelocalfootnotes"]={ ["cs"]="umistilokalnipoznamkypodcarou", ["de"]="platzierelokalefussnoten", ["en"]="placelocalfootnotes", ["fr"]="placenotespdplocales", ["it"]="mettinotepdplocali", ["nl"]="plaatslokalevoetnoten", ["pe"]="درج‌پانوشتهای‌موضعی", ["ro"]="punenotesubsollocale", }, ["placelogos"]={ ["cs"]="umistiloga", ["de"]="platzierelogo", ["en"]="placelogos", ["fr"]="placelogos", ["it"]="mettiloghi", ["nl"]="plaatsbeeldmerken", ["pe"]="درج‌آرمها", ["ro"]="punelogouri", }, ["placeongrid"]={ ["cs"]="umistinamrizku", ["de"]="amgitterausrichten", ["en"]="placeongrid", ["fr"]="placesurgrille", ["it"]="mettiingriglia", ["nl"]="plaatsopgrid", ["pe"]="درج‌در‌توری", ["ro"]="plaseazapegrid", }, ["placeontopofeachother"]={ ["cs"]="umistinadsebe", ["de"]="platziereuntereinander", ["en"]="placeontopofeachother", ["fr"]="placelesunsaudessusdesautres", ["it"]="mettiunosullaltro", ["nl"]="plaatsonderelkaar", ["pe"]="درج‌در‌بالای‌یکدیگر", ["ro"]="punedeasuprafiecareia", }, ["placepagenumber"]={ ["cs"]="placepagenumber", ["de"]="placepagenumber", ["en"]="placepagenumber", ["fr"]="placenumeropage", ["it"]="mettinumeropagina", ["nl"]="plaatspaginanummer", ["pe"]="درج‌شماره‌صفحه", ["ro"]="punenumarpagina", }, ["placereferencelist"]={ ["cs"]="placereferencelist", ["de"]="placereferencelist", ["en"]="placereferencelist", ["fr"]="placelistereference", ["it"]="placereferencelist", ["nl"]="plaatsreferentielijst", ["pe"]="درج‌لیست‌مرجع", ["ro"]="placereferencelist", }, ["placeregister"]={ ["cs"]="umistirejstrik", ["de"]="platziereregister", ["en"]="placeregister", ["fr"]="placeregistre", ["it"]="mettiregistro", ["nl"]="plaatsregister", ["pe"]="درج‌ثبت", ["ro"]="puneregistru", }, ["placerule"]={ ["cs"]="placerule", ["de"]="placerule", ["en"]="placerule", ["fr"]="placeregle", ["it"]="mettilinea", ["nl"]="plaatslijn", ["pe"]="درج‌خط", ["ro"]="punerigla", }, ["placesidebyside"]={ ["cs"]="umistivedlesebe", ["de"]="platzierenebeneinander", ["en"]="placesidebyside", ["fr"]="placecoteacote", ["it"]="mettifiancoafianco", ["nl"]="plaatsnaastelkaar", ["pe"]="درج‌کنار‌به‌کنار", ["ro"]="punefatainfata", }, ["placesubformula"]={ ["cs"]="umistipodrovnici", ["de"]="platziereunterformel", ["en"]="placesubformula", ["fr"]="placesousformule", ["it"]="mettisottoformula", ["nl"]="plaatssubformule", ["pe"]="درج‌زیرفرمول", ["ro"]="punesubformula", }, ["placetextvariable"]={ ["cs"]="placetextvariable", ["de"]="placetextvariable", ["en"]="placetextvariable", ["fr"]="placevariabletexte", ["it"]="mettivariabiletesto", ["nl"]="plaatstekstvariabele", ["pe"]="درج‌متغیرمتن", ["ro"]="punevariabilatext", }, ["position"]={ ["cs"]="pozice", ["de"]="position", ["en"]="position", ["fr"]="position", ["it"]="posizione", ["nl"]="positioneer", ["pe"]="مکان", ["ro"]="pozitie", }, ["positiontext"]={ ["cs"]="positiontext", ["de"]="positiontext", ["en"]="positiontext", ["fr"]="positionnetexte", ["it"]="posizionatesto", ["nl"]="positioneertekst", ["pe"]="مکان‌متن", ["ro"]="pozitietext", }, ["printpaperheight"]={ ["cs"]="vyskatiskpapiru", ["de"]="printpapierhoehe", ["en"]="printpaperheight", ["fr"]="hauteureditionpapier", ["it"]="altezzacartastampa", ["nl"]="printpapierhoogte", ["pe"]="چاپ‌ارتفاع‌برگ", ["ro"]="inaltimehartieimprimanta", }, ["printpaperwidth"]={ ["cs"]="sirkatiskpapiru", ["de"]="printpapierbreite", ["en"]="printpaperwidth", ["fr"]="largeureditionpapier", ["it"]="ampiezzacartastampa", ["nl"]="printpapierbreedte", ["pe"]="چاپ‌عرض‌برگ", ["ro"]="latimehartieimprimanta", }, ["processblocks"]={ ["cs"]="zpracujbloky", ["de"]="bearbeitebloecke", ["en"]="processblocks", ["fr"]="traiteblocs", ["it"]="elaborablocchi", ["nl"]="verwerkblokken", ["pe"]="بلوکهای‌پردازش", ["ro"]="proceseazabloc", }, ["processpage"]={ ["cs"]="zpracujstranu", ["de"]="bearbeiteseite", ["en"]="processpage", ["fr"]="traitepage", ["it"]="elaborapagina", ["nl"]="verwerkpagina", ["pe"]="صفحه‌پردازش", ["ro"]="proceseazapagina", }, ["product"]={ ["cs"]="produkt", ["de"]="produkt", ["en"]="product", ["fr"]="produit", ["it"]="prodotto", ["nl"]="produkt", ["pe"]="تولید", ["ro"]="produs", }, ["program"]={ ["cs"]="program", ["de"]="programm", ["en"]="program", ["fr"]="programme", ["it"]="programma", ["nl"]="programma", ["pe"]="برنامه", ["ro"]="program", }, ["project"]={ ["cs"]="projekt", ["de"]="projekt", ["en"]="project", ["fr"]="projet", ["it"]="progetto", ["nl"]="projekt", ["pe"]="پروژه", ["ro"]="proiect", }, ["publication"]={ ["cs"]="publikace", ["de"]="publikation", ["en"]="publication", ["fr"]="publication", ["it"]="pubblicazione", ["nl"]="publicatie", ["pe"]="نشر", ["ro"]="publicatie", }, ["quotation"]={ ["cs"]="citace", ["de"]="zitat", ["en"]="quotation", ["fr"]="citation", ["it"]="citazione", ["nl"]="citaat", ["pe"]="نقل‌قول", ["ro"]="citat", }, ["quote"]={ ["cs"]="citovat", ["de"]="zitieren", ["en"]="quote", ["fr"]="citer", ["it"]="menzione", ["nl"]="citeer", ["pe"]="نقل", ["ro"]="minicitat", }, ["ran"]={ ["cs"]="ran", ["de"]="ran", ["en"]="ran", ["fr"]="ran", ["it"]="ran", ["nl"]="ran", ["pe"]="ran", ["ro"]="ran", }, ["redo"]={ ["cs"]="opakovat", ["de"]="wiederholen", ["en"]="redo", ["fr"]="refait", ["it"]="rifai", ["nl"]="herhaal", ["pe"]="انجام‌دوباره", ["ro"]="refa", }, ["ref"]={ ["cs"]="ref", ["de"]="ref", ["en"]="ref", ["fr"]="ref", ["it"]="rif", ["nl"]="ref", ["pe"]="رج", ["ro"]="ref", }, ["reference"]={ ["cs"]="odkaz", ["de"]="referenz", ["en"]="reference", ["fr"]="reference", ["it"]="riferimento", ["nl"]="referentie", ["pe"]="مرجع", ["ro"]="referinta", }, ["referral"]={ ["cs"]="odkaz", ["de"]="verweis", ["en"]="referral", ["fr"]="recommandation", ["it"]="referral", ["nl"]="kenmerk", ["pe"]="رجوع", ["ro"]="referit", }, ["referraldate"]={ ["cs"]="odkaznadatum", ["de"]="verweisdatum", ["en"]="referraldate", ["fr"]="daterecommandation", ["it"]="datareferral", ["nl"]="kenmerkdatum", ["pe"]="تاریخ‌رجوع", ["ro"]="datareferit", }, ["referring"]={ ["cs"]="odkazujici", ["de"]="referieren", ["en"]="referring", ["fr"]="faitreference", ["it"]="referring", ["nl"]="refereer", ["pe"]="مراجعه", ["ro"]="referring", }, ["remark"]={ ["cs"]="oznaceni", ["de"]="bemerkung", ["en"]="remark", ["fr"]="commentaire", ["it"]="commento", ["nl"]="toelichting", ["pe"]="توجه", ["ro"]="remarca", }, ["reset"]={ ["cs"]="reset", ["de"]="ruecksetzten", ["en"]="reset", ["fr"]="raz", ["it"]="reimposta", ["nl"]="reset", ["pe"]="بازنشانی", ["ro"]="reset", }, ["resetmarking"]={ ["cs"]="resetznaceni", ["de"]="ruecksetztenbeschriftung", ["en"]="resetmarking", ["fr"]="razmarquage", ["it"]="reimpostamarcatura", ["nl"]="resetmarkering", ["pe"]="بازنشانی‌نشانه‌گذاری", ["ro"]="reseteazamarcaje", }, ["resetnumber"]={ ["cs"]="resetnumber", ["de"]="resetnumber", ["en"]="resetnumber", ["fr"]="raznumero", ["it"]="resetnumber", ["nl"]="resetnummer", ["pe"]="بازنشانی‌شماره", ["ro"]="resetnumber", }, ["resettext"]={ ["cs"]="resettextcontent", ["de"]="resettextcontent", ["en"]="resettextcontent", ["fr"]="resettextcontent", ["it"]="resettextcontent", ["nl"]="resettekstinhoud", ["pe"]="بازنشانی‌متن", ["ro"]="resettextcontent", }, ["rightaligned"]={ ["cs"]="zarovnanovpravo", ["de"]="rechtsbuendig", ["en"]="rightaligned", ["fr"]="aligneadroite", ["it"]="allineadestra", ["nl"]="regelrechts", ["pe"]="تنظیم‌راست", ["ro"]="aliniatdreapta", }, ["rightedgedistance"]={ ["cs"]="vzdalenostpravehookraje", ["de"]="abstandrechterrand", ["en"]="rightedgedistance", ["fr"]="distanceborddroit", ["it"]="distanzabordodestro", ["nl"]="rechterrandafstand", ["pe"]="فاصله‌لبه‌راست", ["ro"]="distantacoltdreapta", }, ["rightedgewidth"]={ ["cs"]="sirkapravehookraje", ["de"]="breiterechterrand", ["en"]="rightedgewidth", ["fr"]="largeurborddroit", ["it"]="ampiezzabordodestro", ["nl"]="rechterrandbreedte", ["pe"]="عرض‌لبه‌راست", ["ro"]="latimecoltdreapta", }, ["rightmargindistance"]={ ["cs"]="vzdalenostpravemarginalie", ["de"]="rechtemarginalafstand", ["en"]="rightmargindistance", ["fr"]="distancemargedroite", ["it"]="distanzamarginedestro", ["nl"]="rechtermargeafstand", ["pe"]="فاصله‌حاشیه‌راست", ["ro"]="distantamarginedreapta", }, ["rightmarginwidth"]={ ["cs"]="sirkapravemarginalie", ["de"]="rechtemarginalbreite", ["en"]="rightmarginwidth", ["fr"]="largeurmargedroite", ["it"]="ampiezzamarginedestro", ["nl"]="rechtermargebreedte", ["pe"]="عرض‌حاشیه‌راست", ["ro"]="latimemarginedreapta", }, ["romannumerals"]={ ["cs"]="rimskecislice", ["de"]="roemischezahlen", ["en"]="romannumerals", ["fr"]="chiffresromains", ["it"]="numeriromani", ["nl"]="romeins", ["pe"]="اعدادلاتین", ["ro"]="numereromane", }, ["rotate"]={ ["cs"]="otocit", ["de"]="drehen", ["en"]="rotate", ["fr"]="oriente", ["it"]="ruota", ["nl"]="roteer", ["pe"]="دوران", ["ro"]="roteste", }, ["scale"]={ ["cs"]="meritko", ["de"]="format", ["en"]="scale", ["fr"]="echelle", ["it"]="scala", ["nl"]="schaal", ["pe"]="مقیاس", ["ro"]="scala", }, ["screen"]={ ["cs"]="obrazovka", ["de"]="bildschirm", ["en"]="screen", ["fr"]="ecran", ["it"]="schermo", ["nl"]="scherm", ["pe"]="پرده", ["ro"]="ecran", }, ["selectblocks"]={ ["cs"]="vyberbloky", ["de"]="waehlebloeckeaus", ["en"]="selectblocks", ["fr"]="selectionneblocs", ["it"]="selezionablocchi", ["nl"]="selecteerblokken", ["pe"]="انتخاب‌بلوکها", ["ro"]="selecteazablocuri", }, ["selectpaper"]={ ["cs"]="vyberpapir", ["de"]="waehlepapieraus", ["en"]="selectpaper", ["fr"]="selectionnepapier", ["it"]="selezionacarta", ["nl"]="selecteerpapier", ["pe"]="انتخاب‌برگ", ["ro"]="selecteazahartie", }, ["selectversion"]={ ["cs"]="vyberverzi", ["de"]="waehleversionaus", ["en"]="selectversion", ["fr"]="selectionneversion", ["it"]="selezionaversione", ["nl"]="selecteerversie", ["pe"]="انتخاب‌نسخه", ["ro"]="selecteazaversiune", }, ["setnumber"]={ ["cs"]="setnumber", ["de"]="setnumber", ["en"]="setnumber", ["fr"]="affectenumero", ["it"]="setnumber", ["nl"]="setnummer", ["pe"]="تعیین‌شماره", ["ro"]="setnumber", }, ["settextcontent"]={ ["cs"]="settextcontent", ["de"]="settext", ["en"]="settextcontent", ["fr"]="settext", ["it"]="settext", ["nl"]="steltekstinhoudin", ["pe"]="تعیین‌محتوای‌متن", ["ro"]="settextcontent", }, ["settextvariable"]={ ["cs"]="settextvariable", ["de"]="settextvariable", ["en"]="settextvariable", ["fr"]="affectevariabletexte", ["it"]="setvariabiletesto", ["nl"]="kentekstvariabeletoe", ["pe"]="تعیین‌متغیر‌متن", ["ro"]="setvariabilatext", }, ["setupalign"]={ ["cs"]="nastavzarovnani", ["de"]="stelleausrichtungein", ["en"]="setupalign", ["fr"]="reglealignement", ["it"]="impostaallineamento", ["nl"]="steluitlijnenin", ["pe"]="بارگذاری‌تنظیم", ["ro"]="seteazaalinierea", }, ["setupanswerarea"]={ ["cs"]="setupanswerarea", ["de"]="setupanswerarea", ["en"]="setupanswerarea", ["fr"]="setupanswerarea", ["it"]="setupanswerarea", ["nl"]="stelantwoordgebiedin", ["pe"]="setupanswerarea", ["ro"]="setupanswerarea", }, ["setuparranging"]={ ["cs"]="nastavusporadani", ["de"]="stelleanordnenein", ["en"]="setuparranging", ["fr"]="reglearrangement", ["it"]="impostaparranging", ["nl"]="stelarrangerenin", ["pe"]="بارگذاری‌ترتیب", ["ro"]="seteazaaranjareapag", }, ["setupbackground"]={ ["cs"]="nastavpozadi", ["de"]="stellehintergrundein", ["en"]="setupbackground", ["fr"]="reglearriereplan", ["it"]="impostasfondo", ["nl"]="stelachtergrondin", ["pe"]="بارگذاری‌پس‌زمینه", ["ro"]="seteazafundal", }, ["setupbackgrounds"]={ ["cs"]="nastavpozadi", ["de"]="stellehintergruendeein", ["en"]="setupbackgrounds", ["fr"]="reglearriereplans", ["it"]="impostasfondi", ["nl"]="stelachtergrondenin", ["pe"]="بارگذاری‌پس‌زمینه‌ها", ["ro"]="seteazafundaluri", }, ["setupblackrules"]={ ["cs"]="nastavcernelinky", ["de"]="stellerechteckein", ["en"]="setupblackrules", ["fr"]="reglelignesnoires", ["it"]="impostalineenere", ["nl"]="stelblokjesin", ["pe"]="بارگذاری‌خطهای‌سیاه", ["ro"]="seteazaliniinegre", }, ["setupblank"]={ ["cs"]="nastavpreskok", ["de"]="stelleblankoein", ["en"]="setupblank", ["fr"]="definitvide", ["it"]="impostarigovuoto", ["nl"]="stelblankoin", ["pe"]="بارگذاری‌خالی", ["ro"]="seteazablanc", }, ["setupblock"]={ ["cs"]="nastavblok", ["de"]="stelleblockein", ["en"]="setupblock", ["fr"]="reglebloc", ["it"]="impostablocco", ["nl"]="stelblokin", ["pe"]="بارگذاری‌بلوک", ["ro"]="seteazabloc", }, ["setupbodyfont"]={ ["cs"]="nastavzakladnifont", ["de"]="stellefliesstextein", ["en"]="setupbodyfont", ["fr"]="reglepolicecorps", ["it"]="impostafontdeltesto", ["nl"]="stelkorpsin", ["pe"]="بارگذاری‌قلم‌متن", ["ro"]="seteazafonttext", }, ["setupbodyfontenvironment"]={ ["cs"]="nastavprostredizakladnihofontu", ["de"]="stellefliesstextumgebungein", ["en"]="setupbodyfontenvironment", ["fr"]="regleenvironnementpolicecorps", ["it"]="impostaambientefontdeltesto", ["nl"]="stelkorpsomgevingin", ["pe"]="بارگذاری‌محیط‌قلم‌متن", ["ro"]="seteazamediulfonttext", }, ["setupbottom"]={ ["cs"]="nastavspodek", ["de"]="stelleuntenein", ["en"]="setupbottom", ["fr"]="regleinf", ["it"]="impostafondo", ["nl"]="stelonderin", ["pe"]="بارگذاری‌پایین", ["ro"]="seteazajos", }, ["setupbottomtexts"]={ ["cs"]="nastavdolnitexty", ["de"]="stelletextuntenein", ["en"]="setupbottomtexts", ["fr"]="regletextesinf", ["it"]="impostatestifondo", ["nl"]="stelondertekstenin", ["pe"]="بارگذاری‌متن‌پایین", ["ro"]="seteazatextejos", }, ["setupbuffer"]={ ["cs"]="nastavbuffer", ["de"]="stellepufferein", ["en"]="setupbuffer", ["fr"]="reglebuffer", ["it"]="impostabuffer", ["nl"]="stelbufferin", ["pe"]="بارگذاری‌بافر", ["ro"]="seteazabuffer", }, ["setupbuttons"]={ ["cs"]="nastavtlacitka", ["de"]="stelleknopfein", ["en"]="setupbuttons", ["fr"]="regleboutons", ["it"]="impostapulsanti", ["nl"]="stelbuttonsin", ["pe"]="بارگذاری‌دکمه‌ها", ["ro"]="seteazabutoane", }, ["setupcapitals"]={ ["cs"]="nastavkapitalky", ["de"]="stelleversalienein", ["en"]="setupcapitals", ["fr"]="reglecapitales", ["it"]="impostamaiuscole", ["nl"]="stelkapitalenin", ["pe"]="setupcapitals", ["ro"]="seteazamajuscule", }, ["setupcaption"]={ ["cs"]="nastavpopisek", ["de"]="stellebildunterschriftein", ["en"]="setupcaption", ["fr"]="regleintitule", ["it"]="impostacaption", ["nl"]="stelblokkopjein", ["pe"]="بارگذاری‌شرح", ["ro"]="seteazalegenda", }, ["setupcaptions"]={ ["cs"]="nastavpopisky", ["de"]="stellebilderunterschriftein", ["en"]="setupcaptions", ["fr"]="regleintitules", ["it"]="impostacaptions", ["nl"]="stelblokkopjesin", ["pe"]="بارگذاری‌شرحها", ["ro"]="seteazalegendele", }, ["setupclipping"]={ ["cs"]="nastavorez", ["de"]="stelleausschnittein", ["en"]="setupclipping", ["fr"]="regleclipping", ["it"]="impostaclippling", ["nl"]="stelclipin", ["pe"]="بارگذاری‌چیدن", ["ro"]="seteazaclipping", }, ["setupcolor"]={ ["cs"]="nastavbarvu", ["de"]="stellefarbeein", ["en"]="setupcolor", ["fr"]="reglecouleur", ["it"]="impostacolore", ["nl"]="stelkleurin", ["pe"]="بارگذاری‌رنگ", ["ro"]="seteazaculoare", }, ["setupcolors"]={ ["cs"]="nastavbarvy", ["de"]="stellefarbenein", ["en"]="setupcolors", ["fr"]="reglecouleurs", ["it"]="impostacolori", ["nl"]="stelkleurenin", ["pe"]="بارگذاری‌رنگها", ["ro"]="seteazaculori", }, ["setupcolumns"]={ ["cs"]="nastavsloupce", ["de"]="stellespaltenein", ["en"]="setupcolumns", ["fr"]="reglecolonnes", ["it"]="impostacolonne", ["nl"]="stelkolommenin", ["pe"]="بارگذاری‌ستونها", ["ro"]="seteazacoloane", }, ["setupcolumnset"]={ ["cs"]="setupcolumnset", ["de"]="setupcolumnset", ["en"]="setupcolumnset", ["fr"]="reglejeucolonne", ["it"]="impostagruppocolonne", ["nl"]="stelkolomgroepin", ["pe"]="بارگذاری‌مجموعه‌ستون", ["ro"]="setupcolumnset", }, ["setupcolumnsetlines"]={ ["cs"]="setupcolumnsetlines", ["de"]="setupcolumnsetlines", ["en"]="setupcolumnsetlines", ["fr"]="setupcolumnsetlines", ["it"]="setupcolumnsetlines", ["nl"]="stelkolomgroepregelsin", ["pe"]="بارگذاری‌خطهای‌مجموعه‌ستون", ["ro"]="setupcolumnsetlines", }, ["setupcolumnsetstart"]={ ["cs"]="setupcolumnsetstart", ["de"]="setupcolumnsetstart", ["en"]="setupcolumnsetstart", ["fr"]="setupcolumnsetstart", ["it"]="setupcolumnsetstart", ["nl"]="stelkolomgroepstartin", ["pe"]="بارگذاری‌شروع‌مجموعه‌ستون", ["ro"]="setupcolumnsetstart", }, ["setupcombinations"]={ ["cs"]="nastavspojeni", ["de"]="stellekombinationein", ["en"]="setupcombinations", ["fr"]="reglecombinaisons", ["it"]="impostacombinazioni", ["nl"]="stelcombinatiesin", ["pe"]="بارگذاری‌ترکیب‌ها", ["ro"]="seteazacombinari", }, ["setupcombinedlist"]={ ["cs"]="nastavkombinovanyseznam", ["de"]="stellezusammengestelltelisteein", ["en"]="setupcombinedlist", ["fr"]="reglelisteimbriquee", ["it"]="impostaelencocombinato", ["nl"]="stelsamengesteldelijstin", ["pe"]="بارگذاری‌لیست‌ترکیبی", ["ro"]="seteazalistacombinata", }, ["setupcomment"]={ ["cs"]="nastavkomentar", ["de"]="stellekommentarein", ["en"]="setupcomment", ["fr"]="reglecommentaire", ["it"]="impostacommento", ["nl"]="stelcommentaarin", ["pe"]="بارگذاری‌توضیح", ["ro"]="seteazacomentariu", }, ["setupdescriptions"]={ ["cs"]="nastavpopisy", ["de"]="definierebeschreibungen", ["en"]="setupdescriptions", ["fr"]="regledescriptions", ["it"]="impostadescrizioni", ["nl"]="steldoordefinierenin", ["pe"]="بارگذاری‌شرح", ["ro"]="seteazadescriere", }, ["setupenumerations"]={ ["cs"]="nastavvycty", ["de"]="stellebeschreibungein", ["en"]="setupenumerations", ["fr"]="regleenumerations", ["it"]="impostaenumerazioni", ["nl"]="steldoornummerenin", ["pe"]="بارگذاری‌شماره‌گذاریها", ["ro"]="seteazaenumerare", }, ["setupexternalfigures"]={ ["cs"]="nastavexterniobrazy", ["de"]="stelleexterneabbildungenein", ["en"]="setupexternalfigures", ["fr"]="reglefiguresexternes", ["it"]="impostafigureesterne", ["nl"]="stelexternefigurenin", ["pe"]="بارگذاری‌شکلهای‌خارجی", ["ro"]="seteazafiguriexterne", }, ["setupfield"]={ ["cs"]="nastavpole", ["de"]="stellefeldein", ["en"]="setupfield", ["fr"]="reglechamp", ["it"]="impostacampo", ["nl"]="stelveldin", ["pe"]="بارگذاری‌میدان", ["ro"]="seteazacamp", }, ["setupfields"]={ ["cs"]="nastavvsechnapole", ["de"]="stellefelderin", ["en"]="setupfields", ["fr"]="reglechamps", ["it"]="impostacampi", ["nl"]="stelveldenin", ["pe"]="بارگذاری‌میدانها", ["ro"]="seteazacampuri", }, ["setupfillinlines"]={ ["cs"]="nastavvyplnoveradky", ["de"]="stellegefuelltezeileein", ["en"]="setupfillinlines", ["fr"]="regleremplitligne", ["it"]="impostarigheriempimento", ["nl"]="stelinvulregelsin", ["pe"]="بارگذاری‌پرکردن‌خطها", ["ro"]="seteazaliniiumplere", }, ["setupfillinrules"]={ ["cs"]="nastavvyplnovelinky", ["de"]="stellegefuelltesrechteckein", ["en"]="setupfillinrules", ["fr"]="regleremplitlignesreglees", ["it"]="impostalineeriempimento", ["nl"]="stelinvullijnenin", ["pe"]="بارگذاری‌درج‌درخطها", ["ro"]="seteazarigleumplere", }, ["setupfloat"]={ ["cs"]="nastavplvouciobjekt", ["de"]="stellegleitobjektein", ["en"]="setupfloat", ["fr"]="regleflottant", ["it"]="impostaoggettomobile", ["nl"]="stelplaatsblokin", ["pe"]="بارگذاری‌شناور", ["ro"]="seteazafloat", }, ["setupfloats"]={ ["cs"]="nastavplvouciobjekty", ["de"]="stellegleitobjekteein", ["en"]="setupfloats", ["fr"]="regleflottants", ["it"]="impostaoggettimobili", ["nl"]="stelplaatsblokkenin", ["pe"]="بارگذاری‌شناورها", ["ro"]="seteazafloats", }, ["setupfloatsplitting"]={ ["cs"]="nastavdeleniplvoucichobjektu", ["de"]="stelleplatziegeteiltegleitobjekt", ["en"]="setupfloatsplitting", ["fr"]="regleseparationflottant", ["it"]="impostaspezzamentooggettomobile", ["nl"]="stelplaatsbloksplitsenin", ["pe"]="بارگذاری‌شکافتن‌شناورها", ["ro"]="seteazaimpartireafloat", }, ["setupfooter"]={ ["cs"]="nastavupati", ["de"]="stellefusszeileein", ["en"]="setupfooter", ["fr"]="reglepdp", ["it"]="impostapdp", ["nl"]="stelvoetin", ["pe"]="بارگذاری‌ته‌برگ", ["ro"]="seteazasubsol", }, ["setupfootertexts"]={ ["cs"]="nastavtextyupati", ["de"]="stellefusszeilentextein", ["en"]="setupfootertexts", ["fr"]="regletextespdp", ["it"]="impostatestipdp", ["nl"]="stelvoettekstenin", ["pe"]="بارگذاری‌متن‌پانوشت", ["ro"]="seteazatextesubsol", }, ["setupfootnotedefinition"]={ ["cs"]="nastavdefinicipoznamekpodcarou", ["de"]="stellefussnotendefinitionein", ["en"]="setupfootnotedefinition", ["fr"]="definitnotepdp", ["it"]="impostadefinizionenotepdp", ["nl"]="stelvoetnootdefinitiein", ["pe"]="بارگذاری‌تعریف‌پانوشت", ["ro"]="seteazadefinireanotasubsol", }, ["setupfootnotes"]={ ["cs"]="nastavpoznamkypodcarou", ["de"]="stellefussnotenein", ["en"]="setupfootnotes", ["fr"]="reglenotepdp", ["it"]="impostanotepdp", ["nl"]="stelvoetnotenin", ["pe"]="بارگذاری‌پانوشتها", ["ro"]="seteazanotasubsol", }, ["setupforms"]={ ["cs"]="setupforms", ["de"]="setupforms", ["en"]="setupforms", ["fr"]="regleformulaires", ["it"]="impostaforms", ["nl"]="stelformulierenin", ["pe"]="بارگذاری‌طرح", ["ro"]="seteazaformulare", }, ["setupformulas"]={ ["cs"]="nastavrovnice", ["de"]="stelleformelnein", ["en"]="setupformulae", ["fr"]="regleformules", ["it"]="impostaformule", ["nl"]="stelformulesin", ["pe"]="بارگذاری‌فرمولها", ["ro"]="seteazaformule", }, ["setupframed"]={ ["cs"]="nastavoramovani", ["de"]="stelleumrahmtein", ["en"]="setupframed", ["fr"]="regleencadre", ["it"]="impostaincorniciato", ["nl"]="stelomlijndin", ["pe"]="بارگذاری‌قالبی", ["ro"]="seteazainconjurat", }, ["setupframedtexts"]={ ["cs"]="nastavoramovanetexty", ["de"]="stelleumrahmtetexteein", ["en"]="setupframedtexts", ["fr"]="setupframedtexts", ["it"]="impostatestiincorniciati", ["nl"]="stelkadertekstenin", ["pe"]="بارگذاری‌متن‌قالبی", ["ro"]="definestetexteinconjurate", }, ["setuphead"]={ ["cs"]="nastavnadpis", ["de"]="stelleueberschriftein", ["en"]="setuphead", ["fr"]="regletete", ["it"]="impostatesta", ["nl"]="stelkopin", ["pe"]="بارگذاری‌سر", ["ro"]="seteazatitlu", }, ["setupheader"]={ ["cs"]="nastavzahlavi", ["de"]="stellekopfzeileein", ["en"]="setupheader", ["fr"]="regleentete", ["it"]="impostainstestazione", ["nl"]="stelhoofdin", ["pe"]="بارگذاری‌سربرگ", ["ro"]="seteazaantet", }, ["setupheadertexts"]={ ["cs"]="nastavtextyzahlavi", ["de"]="stellekopfzeilentextein", ["en"]="setupheadertexts", ["fr"]="regletextesentete", ["it"]="impostatestiintestazioni", ["nl"]="stelhoofdtekstenin", ["pe"]="بارگذاری‌متن‌سربرگ", ["ro"]="seteazatexteantet", }, ["setupheadnumber"]={ ["cs"]="nastavcislonadpisu", ["de"]="stellekopfzahlein", ["en"]="setupheadnumber", ["fr"]="reglenumerotete", ["it"]="impostanumerotesta", ["nl"]="stelkopnummerin", ["pe"]="بارگذاری‌شماره‌سر", ["ro"]="seteazanumartitlu", }, ["setupheads"]={ ["cs"]="nastavnadpisy", ["de"]="stelleueberschriftenein", ["en"]="setupheads", ["fr"]="regletetes", ["it"]="impostateste", ["nl"]="stelkoppenin", ["pe"]="بارگذاری‌سرها", ["ro"]="seteazatitluri", }, ["setupheadtext"]={ ["cs"]="nastavtexthlavicky", ["de"]="stelleueberschrifttextein", ["en"]="setupheadtext", ["fr"]="regletextetete", ["it"]="impostatestointestazioni", ["nl"]="stelkoptekstin", ["pe"]="بارگذاری‌متن‌سر", ["ro"]="seteazatexttitlu", }, ["setuphyphenmark"]={ ["cs"]="nastavdelitko", ["de"]="stellebindestrichein", ["en"]="setuphyphenmark", ["fr"]="reglemarquagehyphenation", ["it"]="impostasegnosillabazione", ["nl"]="stelkoppeltekenin", ["pe"]="بارگذاری‌نشانه‌شکستن", ["ro"]="seteazaliniesilabe", }, ["setupindentedtext"]={ ["en"]="setupindentedtext", ["nl"]="stelingesprongentextin", }, ["setupindenting"]={ ["cs"]="nastavodsazovani", ["de"]="stelleeinziehenein", ["en"]="setupindenting", ["fr"]="reglecomposeenalinea", ["it"]="impostarientro", ["nl"]="stelinspringenin", ["pe"]="بارگذاری‌تورفتگی", ["ro"]="seteazaaliniat", }, ["setupinmargin"]={ ["cs"]="nastavmarginalie", ["de"]="stelleinmarginalieein", ["en"]="setupinmargin", ["fr"]="regledansmarge", ["it"]="impostainmargine", ["nl"]="stelinmargein", ["pe"]="بارگذاری‌درون‌حاشیه", ["ro"]="seteazamarginal", }, ["setupinteraction"]={ ["cs"]="nastavinterakci", ["de"]="stelleinteraktionein", ["en"]="setupinteraction", ["fr"]="regleinteraction", ["it"]="impostainterazione", ["nl"]="stelinteractiein", ["pe"]="بارگذاری‌پانل", ["ro"]="seteazainteractiunea", }, ["setupinteractionbar"]={ ["cs"]="nastavinterakcnilistu", ["de"]="stelleinteraktionsbalkenein", ["en"]="setupinteractionbar", ["fr"]="reglebarreinteraction", ["it"]="impostabarrainterazione", ["nl"]="stelinteractiebalkin", ["pe"]="بارگذاری‌میله‌پانل", ["ro"]="seteazabarainteractiune", }, ["setupinteractionmenu"]={ ["cs"]="nastavinterakcnimenu", ["de"]="stelleinteraktionsmenueein", ["en"]="setupinteractionmenu", ["fr"]="reglemenuinteraction", ["it"]="impostamenuinterazione", ["nl"]="stelinteractiemenuin", ["pe"]="بارگذاری‌منوی‌پانل", ["ro"]="seteazameniuinteractiune", }, ["setupinteractionscreen"]={ ["cs"]="nastavinterakcniobrazovku", ["de"]="stelleinteraktionsbildschirmein", ["en"]="setupinteractionscreen", ["fr"]="regleecraninteraction", ["it"]="impostaschermointerazione", ["nl"]="stelinteractieschermin", ["pe"]="بارگذاری‌پرده‌پانل", ["ro"]="seteazaecraninteractiune", }, ["setupinterlinespace"]={ ["cs"]="nastavmeziradkovoumezeru", ["de"]="stellezeilenabstandein", ["en"]="setupinterlinespace", ["fr"]="regleespacementinterligne", ["it"]="impostainterlinea", ["nl"]="stelinterliniein", ["pe"]="بارگذاری‌فاصله‌بین‌خط", ["ro"]="seteazaspatiuinterliniar", }, ["setupitemgroup"]={ ["cs"]="setupitemgroup", ["de"]="setupitemgroup", ["en"]="setupitemgroup", ["fr"]="setupitemgroup", ["it"]="setupitemgroup", ["nl"]="stelitemgroepin", ["pe"]="بارگذاری‌گروه‌آیتم", ["ro"]="setupitemgroup", }, ["setupitemgroups"]={ ["cs"]="nastavvycty", ["de"]="stelleaufzaehlungenein", ["en"]="setupitemizations", ["fr"]="reglegroupeselements", ["it"]="impostaelencazioni", ["nl"]="stelopsommingenin", ["pe"]="بارگذاری‌گروههای‌آیتم", ["ro"]="setareitemization", }, ["setupitems"]={ ["cs"]="nastavpolozky", ["de"]="stellepostenein", ["en"]="setupitems", ["fr"]="regleelements", ["it"]="impostaelementi", ["nl"]="stelitemsin", ["pe"]="بارگذاری‌آیتمها", ["ro"]="seteazaelemente", }, ["setuplabeltext"]={ ["cs"]="nastavtextpopisku", ["de"]="stellelabeltextein", ["en"]="setuplabeltext", ["fr"]="reglelabeltexte", ["it"]="impostatestoetichette", ["nl"]="stellabeltekstin", ["pe"]="باگذاری‌متن‌برچسب", ["ro"]="seteazatexteticheta", }, ["setuplanguage"]={ ["cs"]="nastavjazyk", ["de"]="stellespracheein", ["en"]="setuplanguage", ["fr"]="reglelangue", ["it"]="impostalingua", ["nl"]="steltaalin", ["pe"]="بارگذاری‌زبان", ["ro"]="setarelimba", }, ["setuplayout"]={ ["cs"]="nastavvzhled", ["de"]="stellelayoutein", ["en"]="setuplayout", ["fr"]="regledisposition", ["it"]="impostalayout", ["nl"]="stellayoutin", ["pe"]="بارگذاری‌طرح‌بندی", ["ro"]="seteazaaspect", }, ["setuplegend"]={ ["cs"]="nastavlegendu", ["de"]="stellelegendeein", ["en"]="setuplegend", ["fr"]="reglelegende", ["it"]="impostalegenda", ["nl"]="stellegendain", ["pe"]="بارگذاری‌راهنما", ["ro"]="seteazalegenda", }, ["setuplinenumbering"]={ ["cs"]="nastavcislovaniradku", ["de"]="stellezeilennumerierungein", ["en"]="setuplinenumbering", ["fr"]="reglenumerotationligne", ["it"]="impostanumerazionerighe", ["nl"]="stelregelnummerenin", ["pe"]="بارگذاری‌شماره‌‌گذاری‌خط", ["ro"]="seteazanumerotarelinii", }, ["setuplines"]={ ["cs"]="nastavradky", ["de"]="stellezeilenein", ["en"]="setuplines", ["fr"]="reglelignes", ["it"]="impostarighe", ["nl"]="stelregelsin", ["pe"]="بارگذاری‌خطها", ["ro"]="seteazalinii", }, ["setuplinewidth"]={ ["cs"]="nastavsirkucary", ["de"]="stellelinienbreiteein", ["en"]="setuplinewidth", ["fr"]="regleepaisseurligne", ["it"]="impostaampiezzariga", ["nl"]="stellijndiktein", ["pe"]="بارگذاری‌عرض‌خط", ["ro"]="seteazagrosimelinie", }, ["setuplist"]={ ["cs"]="nastavseznam", ["de"]="stellelisteein", ["en"]="setuplist", ["fr"]="regleliste", ["it"]="impostaelenco", ["nl"]="stellijstin", ["pe"]="بارگذاری‌لیست", ["ro"]="seteazalista", }, ["setupmakeup"]={ ["cs"]="nastavupravu", ["de"]="stelleumbruchein", ["en"]="setupmakeup", ["fr"]="reglemakeup", ["it"]="impostamakeup", ["nl"]="stelopmaakin", ["pe"]="بارگذاری‌آرایش", ["ro"]="seteazamakeup", }, ["setupmarginblocks"]={ ["cs"]="nastavmarginalniblok", ["de"]="stellemarginalblockein", ["en"]="setupmarginblocks", ["fr"]="regleblocmarge", ["it"]="impostablocchimargine", ["nl"]="stelmargeblokkenin", ["pe"]="بارگذاری‌بلوکهای‌حاشیه", ["ro"]="seteazablocurimarginale", }, ["setupmarginrules"]={ ["cs"]="nastavmarginalnilinky", ["de"]="stellemarginallinieein", ["en"]="setupmarginrules", ["fr"]="reglemargereglee", ["it"]="impostalineemargine", ["nl"]="stelkantlijnin", ["pe"]="بارگذاری‌خطهای‌حاشیه", ["ro"]="seteazaliniimargine", }, ["setupmarking"]={ ["cs"]="nastavznaceni", ["de"]="stellebeschriftungein", ["en"]="setupmarking", ["fr"]="reglemarquage", ["it"]="impostamarcatura", ["nl"]="stelmarkeringin", ["pe"]="بارگذاری‌نشانه‌گذاری", ["ro"]="seteazamarcaje", }, ["setupmathalignment"]={ ["cs"]="setupmathalignment", ["de"]="setupmathalignment", ["en"]="setupmathalignment", ["fr"]="setupmathalignment", ["it"]="setupmathalignment", ["nl"]="stelwiskundeuitlijnenin", ["pe"]="بارگذاری‌تنظیم‌ریاضی", ["ro"]="setupmathalignment", }, ["setupnarrower"]={ ["cs"]="nastavzuzeni", ["de"]="stelleengerein", ["en"]="setupnarrower", ["fr"]="reglecompoetroite", ["it"]="impostapiustretto", ["nl"]="stelsmallerin", ["pe"]="بارگذاری‌باریکتر", ["ro"]="seteazaingust", }, ["setupnumber"]={ ["cs"]="setupnumber", ["de"]="setupnumber", ["en"]="setupnumber", ["fr"]="reglenumero", ["it"]="impostanumerazione", ["nl"]="stelnummerin", ["pe"]="بارگذاری‌شماره", ["ro"]="setupnumber", }, ["setupnumbering"]={ ["cs"]="nastavcislovani", ["de"]="stellenummerierungein", ["en"]="setupnumbering", ["fr"]="reglenumerotation", ["it"]="impostanumerazione", ["nl"]="stelnummerenin", ["pe"]="بارگذاری‌شماره‌گذاری", ["ro"]="seteazanumerotare", }, ["setupoppositeplacing"]={ ["cs"]="nastavumisteniprotejsku", ["de"]="stellegegenueberplatzierenein", ["en"]="setupoppositeplacing", ["fr"]="regleplacementopposition", ["it"]="impostaposizionamentoopposti", ["nl"]="stelnaastplaatsenin", ["pe"]="بارگذاری‌درج‌مخالف", ["ro"]="seteazaplasareaopozita", }, ["setupoutput"]={ ["cs"]="nastavvystup", ["de"]="stelleausgabeein", ["en"]="setupoutput", ["fr"]="reglesortie", ["it"]="impostaoutput", ["nl"]="steluitvoerin", ["pe"]="بارگذاری‌خروجی", ["ro"]="setareoutput", }, ["setuppagecomment"]={ ["cs"]="nastavkomentarstrany", ["de"]="stelleseitenkommentarein", ["en"]="setuppagecomment", ["fr"]="reglecommentairepage", ["it"]="impostacommentopagina", ["nl"]="stelpaginacommentaarin", ["pe"]="بارگذاری‌توضیح‌صفحه", ["ro"]="seteazacomentariupagina", }, ["setuppagenumber"]={ ["cs"]="nastavcislostrany", ["de"]="stelleseitennummerein", ["en"]="setuppagenumber", ["fr"]="reglenumeropage", ["it"]="impostanumeropagina", ["nl"]="stelpaginanummerin", ["pe"]="بارگذاری‌شماره‌صفحه", ["ro"]="seteazanumarpagina", }, ["setuppagenumbering"]={ ["cs"]="nastavcislovanistran", ["de"]="stelleseitennummeriernungein", ["en"]="setuppagenumbering", ["fr"]="reglenumerotationpage", ["it"]="impostanumerazionepagina", ["nl"]="stelpaginanummeringin", ["pe"]="بارگذاری‌شماره‌گذاری‌صفحه", ["ro"]="seteazanumerotarepagina", }, ["setuppagetransitions"]={ ["cs"]="nastavprechodstrany", ["de"]="stelleseitenuebergangein", ["en"]="setuppagetransitions", ["fr"]="regletransitionspage", ["it"]="impostatransizionepagina", ["nl"]="stelpaginaovergangenin", ["pe"]="بارگذاری‌گذارصفحه", ["ro"]="seteazatranzitiepagina", }, ["setuppalet"]={ ["cs"]="nastavpaletu", ["de"]="stellepaletteein", ["en"]="setuppalet", ["fr"]="reglepalette", ["it"]="impostatavolozza", ["nl"]="stelpaletin", ["pe"]="بارگذاری‌لوح", ["ro"]="seteazapaleta", }, ["setuppaper"]={ ["cs"]="setuppaper", ["de"]="setuppaper", ["en"]="setuppaper", ["fr"]="reglepapier", ["it"]="setuppaper", ["nl"]="stelpapierin", ["pe"]="بارگذاری‌برگ", ["ro"]="setuppaper", }, ["setuppapersize"]={ ["cs"]="nastavvelikostpapiru", ["de"]="stellepapierformatein", ["en"]="setuppapersize", ["fr"]="regletaillepapier", ["it"]="impostadimensionicarta", ["nl"]="stelpapierformaatin", ["pe"]="بارگذاری‌اندازه‌برگ", ["ro"]="seteazadimensiunihartie", }, ["setupparagraphnumbering"]={ ["cs"]="nastavcislovaniodstavcu", ["de"]="stelleabsatznummerierungein", ["en"]="setupparagraphnumbering", ["fr"]="reglenumerotationparagraphe", ["it"]="impostanumerazionecapoversi", ["nl"]="stelparagraafnummerenin", ["pe"]="بارگذاری‌شماره‌گذاری‌پاراگراف", ["ro"]="seteazanumerotareparagrafe", }, ["setupparagraphs"]={ ["cs"]="nastavodstavce", ["de"]="stelleabsaetzeein", ["en"]="setupparagraphs", ["fr"]="regleparagraphes", ["it"]="impostacapoversi", ["nl"]="stelalineasin", ["pe"]="بارگذاری‌پاراگرافها", ["ro"]="seteazaparagrafe", }, ["setupplacement"]={ ["cs"]="setupplacement", ["de"]="setupplacement", ["en"]="setupplacement", ["fr"]="setupplacement", ["it"]="setupplacement", ["nl"]="stelplaatsin", ["pe"]="بارگذاری‌جانشانی", ["ro"]="setupplacement", }, ["setuppositioning"]={ ["cs"]="nastavumistovani", ["de"]="stellepositionierenein", ["en"]="setuppositioning", ["fr"]="reglepositionnement", ["it"]="impostaposizionamento", ["nl"]="stelpositionerenin", ["pe"]="بارگذاری‌مکان‌گذاری", ["ro"]="setarepozitie", }, ["setupprofiles"]={ ["cs"]="nastavprofily", ["de"]="stelleprofilein", ["en"]="setupprofiles", ["fr"]="regleprofils", ["it"]="impostaprofili", ["nl"]="stelprofielenin", ["pe"]="بارگذاری‌پروفایلها", ["ro"]="seteazaprofile", }, ["setupprograms"]={ ["cs"]="nastavprogramy", ["de"]="stelleprogrammein", ["en"]="setupprograms", ["fr"]="regleprogrammes", ["it"]="impostaprogrammi", ["nl"]="stelprogrammasin", ["pe"]="بارگذاری‌برنامه‌ها", ["ro"]="seteazaprograme", }, ["setuppublications"]={ ["cs"]="nastavpublikace", ["de"]="stellepublikationein", ["en"]="setuppublications", ["fr"]="reglepublications", ["it"]="impostapubblicazioni", ["nl"]="stelpublicatiesin", ["pe"]="بارگذاری‌نشرها", ["ro"]="seteazapublicatii", }, ["setupquote"]={ ["cs"]="nastavcitaci", ["de"]="stellezitierenein", ["en"]="setupquote", ["fr"]="demarreciter", ["it"]="impostamenzione", ["nl"]="stelciterenin", ["pe"]="بارگذاری‌نقل", ["ro"]="seteazaminicitat", }, ["setupreferencelist"]={ ["cs"]="nastavseznamodkazu", ["de"]="stellereferenzlisteein", ["en"]="setupreferencelist", ["fr"]="reglelistereference", ["it"]="impostalistariferimenti", ["nl"]="stelreferentielijstin", ["pe"]="بارگذاری‌لیست‌مرجع", ["ro"]="seteazalistareferinte", }, ["setupreferencing"]={ ["cs"]="nastavodkazovani", ["de"]="stellereferenzierenein", ["en"]="setupreferencing", ["fr"]="reglereferencage", ["it"]="impostariferimento", ["nl"]="stelrefererenin", ["pe"]="بارگذاری‌ارجاع", ["ro"]="seteazareferinte", }, ["setupregister"]={ ["cs"]="nastavrejstrik", ["de"]="stelleregisterein", ["en"]="setupregister", ["fr"]="regleregistre", ["it"]="impostaregistro", ["nl"]="stelregisterin", ["pe"]="بارگذاری‌ثبت", ["ro"]="seteazaregistru", }, ["setuprotate"]={ ["cs"]="nastavotoceni", ["de"]="stelledrehenein", ["en"]="setuprotate", ["fr"]="regleoriente", ["it"]="impostarotazione", ["nl"]="stelroterenin", ["pe"]="بارگذاری‌دوران", ["ro"]="seteazarotare", }, ["setuprule"]={ ["cs"]="setuprule", ["de"]="setuprule", ["en"]="setuprule", ["fr"]="regleregle", ["it"]="impostalinea", ["nl"]="stellijnin", ["pe"]="بارگذاری‌خط", ["ro"]="seteazarigla", }, ["setups"]={ ["cs"]="nastaveni", ["de"]="einstellungen", ["en"]="setups", ["fr"]="reglages", ["it"]="impostazioni", ["nl"]="instellingen", ["pe"]="بارگذاریها", ["ro"]="setari", }, ["setupscreens"]={ ["cs"]="nastavrastr", ["de"]="stellerasterein", ["en"]="setupscreens", ["fr"]="regleecrans", ["it"]="impostaschermi", ["nl"]="stelrastersin", ["pe"]="بارگذاری‌پرده‌ها", ["ro"]="seteazaecrane", }, ["setupsection"]={ ["cs"]="nastavsekci", ["de"]="stelleabschnittein", ["en"]="setupsection", ["fr"]="reglesection", ["it"]="impostasezione", ["nl"]="stelsectiein", ["pe"]="بارگذاری‌بخش", ["ro"]="seteazasectiune", }, ["setupsectionblock"]={ ["cs"]="nastavbloksekce", ["de"]="stelleabschnittsblockein", ["en"]="setupsectionblock", ["fr"]="regleblocsection", ["it"]="impostabloccosezione", ["nl"]="stelsectieblokin", ["pe"]="بارگذاری‌بلوک‌بخش", ["ro"]="seteazablocsectiune", }, ["setupsorting"]={ ["cs"]="nastavtrideni", ["de"]="stellesortierenein", ["en"]="setupsorting", ["fr"]="regletri", ["it"]="impostaordinamento", ["nl"]="stelsorterenin", ["pe"]="بارگذاری‌ترتیب", ["ro"]="seteazasortare", }, ["setupspacing"]={ ["cs"]="nastavradkovani", ["de"]="stellespatiumein", ["en"]="setupspacing", ["fr"]="regleespacement", ["it"]="impostaspaziatura", ["nl"]="stelspatieringin", ["pe"]="بارگذاری‌فضا‌گذاری", ["ro"]="seteazaspatiu", }, ["setupstartstop"]={ ["cs"]="setupstartstop", ["de"]="setupstartstop", ["en"]="setupstartstop", ["fr"]="regledemarrestoppe", ["it"]="impostainiziatermina", ["nl"]="stelstartstopin", ["pe"]="بارگذاری‌شروع‌پایان", ["ro"]="setupstartstop", }, ["setupstrut"]={ ["cs"]="setupstrut", ["de"]="setupstrut", ["en"]="setupstrut", ["fr"]="reglestrut", ["it"]="impostastrut", ["nl"]="stelstrutin", ["pe"]="بارگذاری‌بست", ["ro"]="seteazastrut", }, ["setupsubpagenumber"]={ ["cs"]="nastavpodcislostrany", ["de"]="stelleunterseitennummerein", ["en"]="setupsubpagenumber", ["fr"]="reglesousnumeropage", ["it"]="impostanumerosottopagina", ["nl"]="stelsubpaginanummerin", ["pe"]="بارگذاری‌شماره‌زیرصفحه", ["ro"]="seteazanumarsubpagina", }, ["setupsymbolset"]={ ["cs"]="nastavsadusymbolu", ["de"]="stellesymbolsetein", ["en"]="setupsymbolset", ["fr"]="reglejeusymboles", ["it"]="impostasetsimboli", ["nl"]="stelsymboolsetin", ["pe"]="بارگذاری‌مجموعه‌نماد", ["ro"]="seteazasimbol", }, ["setupsynchronization"]={ ["cs"]="nastavsynchronizaci", ["de"]="stellesynchronisationein", ["en"]="setupsynchronization", ["fr"]="reglesynchronisation", ["it"]="impostasincronizzazione", ["nl"]="stelsynchronisatiein", ["pe"]="بارگذاری‌تطابق", ["ro"]="setaresincronizare", }, ["setupsynchronizationbar"]={ ["cs"]="nastavsynchronizacnilistu", ["de"]="stellesynchronisationsbalkenein", ["en"]="setupsynchronizationbar", ["fr"]="reglebarresynchronisation", ["it"]="impostabarrasincronizzazione", ["nl"]="stelsynchronisatiebalkin", ["pe"]="بارگذاری‌میله‌تطابق", ["ro"]="setarebarasincronizare", }, ["setupsynonyms"]={ ["cs"]="nastavsynonyma", ["de"]="stellesynonymein", ["en"]="setupsynonyms", ["fr"]="reglesynonymes", ["it"]="impostasinonimi", ["nl"]="stelsynoniemenin", ["pe"]="بارگذاری‌مترادفها", ["ro"]="seteazasinonime", }, ["setupsystem"]={ ["cs"]="nastavsystem", ["de"]="stellesystemein", ["en"]="setupsystem", ["fr"]="reglesysteme", ["it"]="impostasistema", ["nl"]="stelsysteemin", ["pe"]="بارگذاری‌سیستم", ["ro"]="seteazasistem", }, ["setuptab"]={ ["cs"]="nastavtab", ["de"]="stelletabein", ["en"]="setuptab", ["fr"]="regletab", ["it"]="impostatab", ["nl"]="steltabin", ["pe"]="بارگذاری‌تب", ["ro"]="seteazatab", }, ["setuptables"]={ ["cs"]="nastavtabulky", ["de"]="stelletabellenein", ["en"]="setuptables", ["fr"]="regletableaux", ["it"]="impostatabelle", ["nl"]="steltabellenin", ["pe"]="بارگذاری‌جدولها", ["ro"]="seteazatabele", }, ["setuptabulate"]={ ["cs"]="nastavtabelaci", ["de"]="stelletabulatorein", ["en"]="setuptabulate", ["fr"]="regletabulation", ["it"]="impostatabulato", ["nl"]="steltabulatiein", ["pe"]="بارگذاری‌جدول‌بندی", ["ro"]="seteazatabulatori", }, ["setuptext"]={ ["cs"]="nastavtext", ["de"]="stelletextein", ["en"]="setuptext", ["fr"]="regletexte", ["it"]="impostatesto", ["nl"]="steltekstin", ["pe"]="بارگذاری‌متن", ["ro"]="seteazatext", }, ["setuptextposition"]={ ["cs"]="setuptextposition", ["de"]="setuptextposition", ["en"]="setuptextposition", ["fr"]="reglepositiontexte", ["it"]="impostaposizionetesto", ["nl"]="steltekstpositiein", ["pe"]="بارگذاری‌مکان‌متن", ["ro"]="seteazapozitietext", }, ["setuptextrules"]={ ["cs"]="nastavtextovelinky", ["de"]="stelletextumrissein", ["en"]="setuptextrules", ["fr"]="reglelignesreglestexte", ["it"]="impostalineetesto", ["nl"]="steltekstlijnenin", ["pe"]="بارگذاری‌خطهای‌متن", ["ro"]="seteazarigletext", }, ["setuptexttexts"]={ ["cs"]="nastavtexttexty", ["de"]="stelletexttexteein", ["en"]="setuptexttexts", ["fr"]="regletextestexte", ["it"]="impostatestotesti", ["nl"]="stelteksttekstenin", ["pe"]="بارگذاری‌متن‌متنها", ["ro"]="seteazatextetext", }, ["setuptextvariable"]={ ["cs"]="setuptextvariable", ["de"]="setuptextvariable", ["en"]="setuptextvariable", ["fr"]="reglevariabletexte", ["it"]="impostavariabiletesto", ["nl"]="steltekstvariabelein", ["pe"]="بارگذاری‌متغیر‌متن", ["ro"]="seteazavariabilatext", }, ["setupthinrules"]={ ["cs"]="nastavtenkelinky", ["de"]="stelleduennerumrissein", ["en"]="setupthinrules", ["fr"]="regletraitsfins", ["it"]="impostalineesottili", ["nl"]="steldunnelijnenin", ["pe"]="بارگذاری‌خطها‌ی‌نازک", ["ro"]="seteazaliniesubtire", }, ["setuptolerance"]={ ["cs"]="nastavtoleranci", ["de"]="stelletoleranzein", ["en"]="setuptolerance", ["fr"]="regletolerance", ["it"]="impostatolleranza", ["nl"]="steltolerantiein", ["pe"]="بارگذاری‌بردباری", ["ro"]="seteazatoleranta", }, ["setuptop"]={ ["cs"]="nastavhorejsek", ["de"]="stellenobenein", ["en"]="setuptop", ["fr"]="reglesup", ["it"]="impostacima", ["nl"]="stelbovenin", ["pe"]="بارگذاری‌بالا", ["ro"]="seteazasus", }, ["setuptoptexts"]={ ["cs"]="nastavhornitexty", ["de"]="stelletextobenein", ["en"]="setuptoptexts", ["fr"]="regletextessup", ["it"]="impostatesticima", ["nl"]="stelboventekstenin", ["pe"]="بارگذاری‌متنهای‌بالا", ["ro"]="seteazatextesus", }, ["setuptype"]={ ["cs"]="nastavtype", ["de"]="stelletipein", ["en"]="setuptype", ["fr"]="regletype", ["it"]="impostatype", ["nl"]="steltypein", ["pe"]="بارگذاری‌تایپ", ["ro"]="seteazatype", }, ["setuptyping"]={ ["cs"]="nastavopis", ["de"]="stelletippenein", ["en"]="setuptyping", ["fr"]="regledactylo", ["it"]="impostatyping", ["nl"]="steltypenin", ["pe"]="بارگذاری‌تایپ‌کردن", ["ro"]="seteazatyping", }, ["setupunderbar"]={ ["cs"]="nastavpodtrzeni", ["de"]="stelleunterstreichenein", ["en"]="setupunderbar", ["fr"]="reglesouslignage", ["it"]="impostasottolinea", ["nl"]="stelonderstrepenin", ["pe"]="بارگذاری‌میله‌زیر", ["ro"]="seteazasublinie", }, ["setupurl"]={ ["cs"]="nastavurl", ["de"]="stelleurlein", ["en"]="setupurl", ["fr"]="regleurl", ["it"]="impostaurl", ["nl"]="stelurlin", ["pe"]="setupurl", ["ro"]="seteazaurl", }, ["setupversions"]={ ["cs"]="nastavverze", ["de"]="stelleversionein", ["en"]="setupversions", ["fr"]="regleversions", ["it"]="impostaversioni", ["nl"]="stelversiesin", ["pe"]="بارگذاری‌نسخه‌ها", ["ro"]="seteazaversiuni", }, ["setupwhitespace"]={ ["cs"]="nastavbilamista", ["de"]="stellezwischenraumein", ["en"]="setupwhitespace", ["fr"]="regleespaceblanc", ["it"]="impostaspaziobianco", ["nl"]="stelwitruimtein", ["pe"]="بارگذاری‌فضای‌سفید", ["ro"]="seteazaspatiualb", }, ["showbodyfont"]={ ["cs"]="ukazzakladnifont", ["de"]="zeigefliesstext", ["en"]="showbodyfont", ["fr"]="montrepolicecorps", ["it"]="mostrafontdeltesto", ["nl"]="toonkorps", ["pe"]="نمایش‌قلم‌بدنه", ["ro"]="afiseazafonttext", }, ["showbodyfontenvironment"]={ ["cs"]="ukazpostredizakladnihofontu", ["de"]="zeigefliesstextumgebung", ["en"]="showbodyfontenvironment", ["fr"]="montreenvironnementpolicecorps", ["it"]="mostraambientefontdeltesto", ["nl"]="toonkorpsomgeving", ["pe"]="نمایش‌محیط‌قلم‌بدنه", ["ro"]="afiseazamediufonttext", }, ["showcolor"]={ ["cs"]="ukazbarvu", ["de"]="zeigefarbe", ["en"]="showcolor", ["fr"]="montrecouleur", ["it"]="mostracolore", ["nl"]="toonkleur", ["pe"]="نمایش‌رنگ", ["ro"]="afiseazaculoare", }, ["showcolorgroup"]={ ["cs"]="ukazskupinubarev", ["de"]="zeigefarbengruppe", ["en"]="showcolorgroup", ["fr"]="montregroupecouleur", ["it"]="mostragruppocolori", ["nl"]="toonkleurgroep", ["pe"]="نمایش‌گروه‌رنگ", ["ro"]="afiseazagrupculoare", }, ["showexternalfigures"]={ ["cs"]="ukazexterniobrazy", ["de"]="zeigeexterneabbildungen", ["en"]="showexternalfigures", ["fr"]="montrefiguresexternes", ["it"]="mostrafiguresterne", ["nl"]="toonexternefiguren", ["pe"]="نمایش‌شکلهای‌خارجی", ["ro"]="afiseazafiguriexterne", }, ["showfields"]={ ["cs"]="ukazpole", ["de"]="zeigefelder", ["en"]="showfields", ["fr"]="montrechamps", ["it"]="mostracampi", ["nl"]="toonvelden", ["pe"]="نمایش‌میدانها", ["ro"]="afiseazacampuri", }, ["showframe"]={ ["cs"]="ukazramecek", ["de"]="zeigerahmen", ["en"]="showframe", ["fr"]="montrecadre", ["it"]="mostracornice", ["nl"]="toonkader", ["pe"]="نمایش‌قالب", ["ro"]="afiseazarama", }, ["showgrid"]={ ["cs"]="ukazmrizku", ["de"]="zeigegitter", ["en"]="showgrid", ["fr"]="montregrille", ["it"]="mostragriglia", ["nl"]="toongrid", ["pe"]="نمایش‌توری", ["ro"]="afiseazagrid", }, ["showlayout"]={ ["cs"]="ukazvzhled", ["de"]="zeigelayout", ["en"]="showlayout", ["fr"]="montredisposition", ["it"]="mostralyout", ["nl"]="toonlayout", ["pe"]="نمایش‌طرح‌بندی", ["ro"]="afiseazaaspect", }, ["showmakeup"]={ ["cs"]="ukazupravu", ["de"]="zeigeumbruch", ["en"]="showmakeup", ["fr"]="montremakeup", ["it"]="mostramakeup", ["nl"]="toonopmaak", ["pe"]="نمایش‌آرایش", ["ro"]="afiseazamakeup", }, ["showpalet"]={ ["cs"]="ukazpaletu", ["de"]="zeigepalette", ["en"]="showpalet", ["fr"]="montrepalette", ["it"]="mostratavolozza", ["nl"]="toonpalet", ["pe"]="نمایش‌لوح", ["ro"]="afiseazapaleta", }, ["showprint"]={ ["cs"]="ukazvytisk", ["de"]="zeigedruck", ["en"]="showprint", ["fr"]="montreedition", ["it"]="mostrastampa", ["nl"]="toonprint", ["pe"]="نمایش‌چاپ", ["ro"]="afiseazatiparire", }, ["showsetups"]={ ["cs"]="ukaznastaveni", ["de"]="zeigeeinstellungen", ["en"]="showsetups", ["fr"]="montrereglages", ["it"]="mostraimpostazioni", ["nl"]="tooninstellingen", ["pe"]="نمایش‌بارگذاریها", ["ro"]="afiseazasetari", }, ["showstruts"]={ ["cs"]="ukazpodpery", ["de"]="zeigestruts", ["en"]="showstruts", ["fr"]="montrestruts", ["it"]="mostrastruts", ["nl"]="toonstruts", ["pe"]="نمایش‌بستها", ["ro"]="afiseazastruts", }, ["showsymbolset"]={ ["cs"]="ukazsadusymbolu", ["de"]="showsymbolset", ["en"]="showsymbolset", ["fr"]="montrejeusymboles", ["it"]="mostrasetsimboli", ["nl"]="toonsymboolset", ["pe"]="نمایش‌مجموعه‌علامت", ["ro"]="afiseazasetsimboluri", }, ["smallcapped"]={ ["cs"]="kap", ["de"]="kap", ["en"]="cap", ["fr"]="cap", ["it"]="cap", ["nl"]="kap", ["pe"]="cap", ["ro"]="kap", }, ["someline"]={ ["cs"]="nejakyradek", ["de"]="einezeile", ["en"]="someline", ["fr"]="uneligne", ["it"]="qualcheriga", ["nl"]="eenregel", ["pe"]="یک‌خط", ["ro"]="olinie", }, ["somewhere"]={ ["cs"]="nekde", ["de"]="irgendwo", ["en"]="somewhere", ["fr"]="qqpart", ["it"]="daqualcheparte", ["nl"]="ergens", ["pe"]="یک‌جا", ["ro"]="undeva", }, ["space"]={ ["cs"]="mezera", ["de"]="spatium", ["en"]="space", ["fr"]="espace", ["it"]="spazio", ["nl"]="spatie", ["pe"]="فضا", ["ro"]="spatiu", }, ["splitfloat"]={ ["cs"]="rozdelplvouciobjekt", ["de"]="teilegleitobjekt", ["en"]="splitfloat", ["fr"]="separeflottant", ["it"]="spezzaoggettomobile", ["nl"]="splitsplaatsblok", ["pe"]="شکافتن‌شناور", ["ro"]="impartefloat", }, ["startalignment"]={ ["cs"]="startzarovnavani", ["de"]="startausrichtung", ["en"]="startalignment", ["fr"]="demarrealignement", ["it"]="iniziaallineamento", ["nl"]="startuitlijnen", ["pe"]="شروع‌تنظیم", ["ro"]="startaliniere", }, ["startbackground"]={ ["cs"]="startpozadi", ["de"]="starthintergrund", ["en"]="startbackground", ["fr"]="demarrearriereplan", ["it"]="iniziasfondo", ["nl"]="startachtergrond", ["pe"]="شروع‌پس‌زمینه", ["ro"]="startfundal", }, ["startcoding"]={ ["cs"]="startkodovani", ["de"]="startkodierung", ["en"]="startcoding", ["fr"]="demarrecodage", ["it"]="iniziacodifica", ["nl"]="startcodering", ["pe"]="شروع‌کد", ["ro"]="startcodificare", }, ["startcolor"]={ ["cs"]="startbarva", ["de"]="startfarbe", ["en"]="startcolor", ["fr"]="demarrecouleur", ["it"]="iniziacolore", ["nl"]="startkleur", ["pe"]="شروع‌رنگ", ["ro"]="startculoare", }, ["startcolumnmakeup"]={ ["cs"]="startcolumnmakeup", ["de"]="startcolumnmakeup", ["en"]="startcolumnmakeup", ["fr"]="startcolumnmakeup", ["it"]="startcolumnmakeup", ["nl"]="startkolomopmaak", ["pe"]="شروع‌آرایش‌ستون", ["ro"]="startcolumnmakeup", }, ["startcolumns"]={ ["cs"]="startsloupce", ["de"]="startspalten", ["en"]="startcolumns", ["fr"]="demarrecolonnes", ["it"]="iniziacolonne", ["nl"]="startkolommen", ["pe"]="شروع‌ستونها", ["ro"]="startcoloane", }, ["startcolumnset"]={ ["cs"]="startcolumnset", ["de"]="startcolumnset", ["en"]="startcolumnset", ["fr"]="demarrejeucolonne", ["it"]="iniziagruppocolonne", ["nl"]="startkolomgroep", ["pe"]="شروع‌مجموعه‌ستون", ["ro"]="startcolumnset", }, ["startcombination"]={ ["cs"]="startspojeni", ["de"]="startkombination", ["en"]="startcombination", ["fr"]="demarrecombinaison", ["it"]="iniziacombinazione", ["nl"]="startcombinatie", ["pe"]="شروع‌ترکیب", ["ro"]="startcombinare", }, ["startcomponent"]={ ["cs"]="startkomponenta", ["de"]="startkomponente", ["en"]="startcomponent", ["fr"]="demarrecomposant", ["it"]="iniziacomponente", ["nl"]="startonderdeel", ["pe"]="شروع‌مولفه", ["ro"]="startcomponenta", }, ["startdocument"]={ ["cs"]="startdokument", ["de"]="startdokument", ["en"]="startdocument", ["fr"]="demarredocument", ["it"]="iniziadocumento", ["nl"]="startdocument", ["pe"]="شروع‌نوشتار", ["ro"]="startdocument", }, ["startenvironment"]={ ["cs"]="startprostredi", ["de"]="startumgebung", ["en"]="startenvironment", ["fr"]="demarreenvironement", ["it"]="iniziaambiente", ["nl"]="startomgeving", ["pe"]="شروع‌محیط", ["ro"]="startmediu", }, ["startfigure"]={ ["cs"]="startobraz", ["de"]="startabbildung", ["en"]="startfigure", ["fr"]="demarrefigure", ["it"]="iniziafigura", ["nl"]="startfiguur", ["pe"]="شروع‌شکل", ["ro"]="startfigura", }, ["startglobal"]={ ["cs"]="startglobalni", ["de"]="startglobal", ["en"]="startglobal", ["fr"]="demarreglobal", ["it"]="iniziaglobale", ["nl"]="startglobaal", ["pe"]="شروع‌سراسری", ["ro"]="startglobal", }, ["startline"]={ ["cs"]="startradek", ["de"]="startzeile", ["en"]="startline", ["fr"]="demarreligne", ["it"]="iniziariga", ["nl"]="startregel", ["pe"]="شروع‌خط", ["ro"]="startlinie", }, ["startlinecorrection"]={ ["cs"]="startkorekceradku", ["de"]="startzeilenkorrektur", ["en"]="startlinecorrection", ["fr"]="demarrecorrectionligne", ["it"]="iniziacorrezioneriga", ["nl"]="startregelcorrectie", ["pe"]="شروع‌تصحیح‌خط", ["ro"]="startcorectielinie", }, ["startlinenumbering"]={ ["cs"]="startcislovaniradku", ["de"]="startzeilennumerierung", ["en"]="startlinenumbering", ["fr"]="demarrenumerotationligne", ["it"]="inizianumerazionerighe", ["nl"]="startregelnummeren", ["pe"]="شروع‌شماره‌گذاری‌خط", ["ro"]="startnumerotarelinii", }, ["startlines"]={ ["cs"]="startradky", ["de"]="startzeilen", ["en"]="startlines", ["fr"]="demarrelignes", ["it"]="iniziarighe", ["nl"]="startregels", ["pe"]="شروع‌خطها", ["ro"]="startlinii", }, ["startlocal"]={ ["cs"]="startlokalni", ["de"]="startlokal", ["en"]="startlocal", ["fr"]="demarrelocal", ["it"]="inizialocale", ["nl"]="startlokaal", ["pe"]="شروع‌موضعی", ["ro"]="startlocal", }, ["startlocalfootnotes"]={ ["cs"]="startlokalnipoznamkypodcarou", ["de"]="startlokalefussnoten", ["en"]="startlocalfootnotes", ["fr"]="demarrenotespdplocales", ["it"]="inizianotepdplocali", ["nl"]="startlokalevoetnoten", ["pe"]="شروع‌پانوشتهای‌موضعی", ["ro"]="startnotesubsollocale", }, ["startmakeup"]={ ["cs"]="startuprava", ["de"]="startumbruch", ["en"]="startmakeup", ["fr"]="demarremakeup", ["it"]="iniziamakeup", ["nl"]="startopmaak", ["pe"]="شروع‌آرایش", ["ro"]="startmakeup", }, ["startmarginblock"]={ ["cs"]="startmarginalniblok", ["de"]="startmarginalblock", ["en"]="startmarginblock", ["fr"]="demarreblocmarge", ["it"]="iniziabloccomargine", ["nl"]="startmargeblok", ["pe"]="شروع‌بلوک‌حاشیه", ["ro"]="startblocmarginal", }, ["startmarginrule"]={ ["cs"]="startmarginalnilinka", ["de"]="startmarginallinie", ["en"]="startmarginrule", ["fr"]="demarremargereglee", ["it"]="inizialineamargine", ["nl"]="startkantlijn", ["pe"]="شروع‌خط‌حاشیه", ["ro"]="startliniemargine", }, ["startnarrower"]={ ["cs"]="startzuzeni", ["de"]="startenger", ["en"]="startnarrower", ["fr"]="demarrecompoetroite", ["it"]="iniziapiustretto", ["nl"]="startsmaller", ["pe"]="شروع‌باریکتر", ["ro"]="startingust", }, ["startopposite"]={ ["cs"]="startprotejsek", ["de"]="startgegenueber", ["en"]="startopposite", ["fr"]="demarreopposition", ["it"]="iniziaopposto", ["nl"]="startnaast", ["pe"]="شروع‌مخالف", ["ro"]="startopozit", }, ["startoverlay"]={ ["cs"]="startprekryv", ["de"]="startoverlay", ["en"]="startoverlay", ["fr"]="demarrerevetement", ["it"]="iniziasovrapposizione", ["nl"]="startoverlay", ["pe"]="شروع‌پوشش", ["ro"]="startoverlay", }, ["startoverzicht"]={ ["cs"]="startprehled", ["de"]="startueberblick", ["en"]="startoverview", ["fr"]="demarrevuedensemble", ["it"]="iniziaoverview", ["nl"]="startoverzicht", ["pe"]="شروع‌بازبینی", ["ro"]="startoverview", }, ["startpacked"]={ ["cs"]="startzhustene", ["de"]="startkleinerdurchschuss", ["en"]="startpacked", ["fr"]="demarregroupe", ["it"]="iniziaimpaccato", ["nl"]="startopelkaar", ["pe"]="شروع‌فشرده", ["ro"]="startimpachetat", }, ["startpositioning"]={ ["cs"]="startumistovani", ["de"]="startpositionieren", ["en"]="startpositioning", ["fr"]="demarrepositionnement", ["it"]="iniziaposizionamento", ["nl"]="startpositioneren", ["pe"]="شروع‌مکان‌گذاری", ["ro"]="startpozitionare", }, ["startproduct"]={ ["cs"]="startprodukt", ["de"]="startprodukt", ["en"]="startproduct", ["fr"]="demarreproduit", ["it"]="iniziaprodotto", ["nl"]="startprodukt", ["pe"]="شروع‌تولید", ["ro"]="startprodus", }, ["startprofile"]={ ["cs"]="startprofil", ["de"]="startprofil", ["en"]="startprofile", ["fr"]="demarreprofil", ["it"]="iniziaprofilo", ["nl"]="startprofiel", ["pe"]="شروع‌پروفایل", ["ro"]="startprofil", }, ["startproject"]={ ["cs"]="startprojekt", ["de"]="startprojekt", ["en"]="startproject", ["fr"]="demarreprojet", ["it"]="iniziaprogetto", ["nl"]="startprojekt", ["pe"]="شروع‌پروژه", ["ro"]="startproiect", }, ["startquotation"]={ ["cs"]="startcitace", ["de"]="startzitat", ["en"]="startquotation", ["fr"]="demarrecitation", ["it"]="iniziacitazione", ["nl"]="startcitaat", ["pe"]="شروع‌نقل‌قول", ["ro"]="startcitat", }, ["startraster"]={ ["cs"]="startrastr", ["de"]="startraster", ["en"]="startraster", ["fr"]="demarreraster", ["it"]="iniziaraster", ["nl"]="startraster", ["pe"]="startraster", ["ro"]="startraster", }, ["startsymbolset"]={ ["cs"]="startsadasymbolu", ["de"]="startsymbolset", ["en"]="startsymbolset", ["fr"]="demarrejeusymboles", ["it"]="iniziasetsimboli", ["nl"]="startsymboolset", ["pe"]="شروع‌مجموعه‌نماد", ["ro"]="startsetsimboluri", }, ["startsynchronization"]={ ["cs"]="startsynchronizace", ["de"]="startsynchronisation", ["en"]="startsynchronization", ["fr"]="demarresynchronisation", ["it"]="iniziasincronizzazione", ["nl"]="startsynchronisatie", ["pe"]="شروع‌تطابق", ["ro"]="startsincronizare", }, ["starttable"]={ ["cs"]="starttabulka", ["de"]="starttabelle", ["en"]="starttable", ["fr"]="demarretableau", ["it"]="iniziatabella", ["nl"]="starttabel", ["pe"]="شروع‌جدول", ["ro"]="starttabel", }, ["starttables"]={ ["cs"]="starttabulky", ["de"]="starttabellen", ["en"]="starttables", ["fr"]="demarretableaux", ["it"]="iniziatabelle", ["nl"]="starttabellen", ["pe"]="شروع‌جدولها", ["ro"]="starttabele", }, ["starttext"]={ ["cs"]="starttext", ["de"]="starttext", ["en"]="starttext", ["fr"]="demarretexte", ["it"]="iniziatesto", ["nl"]="starttekst", ["pe"]="شروع‌متن", ["ro"]="starttext", }, ["starttextrule"]={ ["cs"]="starttextovalinka", ["de"]="starttextlinie", ["en"]="starttextrule", ["fr"]="demarreligneregleetexte", ["it"]="inizialineatesto", ["nl"]="starttekstlijn", ["pe"]="شروع‌خط‌متن", ["ro"]="startriglatext", }, ["startunpacked"]={ ["cs"]="startnezhustene", ["de"]="startgrosserdurchschuss", ["en"]="startunpacked", ["fr"]="demarredegroupe", ["it"]="iniziaunpacked", ["nl"]="startvanelkaar", ["pe"]="شروع‌غیر‌فشرده", ["ro"]="startneimpachetat", }, ["startversion"]={ ["cs"]="startverze", ["de"]="startversion", ["en"]="startversion", ["fr"]="demarreversion", ["it"]="iniziaversione", ["nl"]="startversie", ["pe"]="شروع‌نسخه", ["ro"]="startversiune", }, ["stopalignment"]={ ["cs"]="stopzarovnavani", ["de"]="stopausrichtung", ["en"]="stopalignment", ["fr"]="stoppealignement", ["it"]="terminaallineamento", ["nl"]="stopuitlijnen", ["pe"]="پایان‌تنظیم", ["ro"]="stopaliniere", }, ["stopbackground"]={ ["cs"]="stoppozadi", ["de"]="stophintergrund", ["en"]="stopbackground", ["fr"]="stoppearriereplan", ["it"]="terminasfondo", ["nl"]="stopachtergrond", ["pe"]="پایان‌پس‌زمینه", ["ro"]="stopfundal", }, ["stopcoding"]={ ["cs"]="stopkodovani", ["de"]="stopkodierung", ["en"]="stopcoding", ["fr"]="stoppecodage", ["it"]="terminacodifica", ["nl"]="stopcodering", ["pe"]="پایان‌کد", ["ro"]="stopcodificare", }, ["stopcolor"]={ ["cs"]="stopbarva", ["de"]="stopfarbe", ["en"]="stopcolor", ["fr"]="stoppecouleur", ["it"]="terminacolore", ["nl"]="stopkleur", ["pe"]="پایان‌رنگ", ["ro"]="stopculoare", }, ["stopcolumnmakeup"]={ ["cs"]="stopcolumnmakeup", ["de"]="stopcolumnmakeup", ["en"]="stopcolumnmakeup", ["fr"]="stopcolumnmakeup", ["it"]="stopcolumnmakeup", ["nl"]="stopkolomopmaak", ["pe"]="پایان‌آرایش‌ستون", ["ro"]="stopcolumnmakeup", }, ["stopcolumns"]={ ["cs"]="stopsloupce", ["de"]="stopspalten", ["en"]="stopcolumns", ["fr"]="stoppecolonnes", ["it"]="terminacolonne", ["nl"]="stopkolommen", ["pe"]="پایان‌ستونها", ["ro"]="stopcoloane", }, ["stopcolumnset"]={ ["cs"]="stopcolumnset", ["de"]="stopcolumnset", ["en"]="stopcolumnset", ["fr"]="stoppejeucolonne", ["it"]="terminagruppocolonne", ["nl"]="stopkolomgroep", ["pe"]="پایان‌مجموعه‌ستون", ["ro"]="stopcolumnset", }, ["stopcombination"]={ ["cs"]="stopspojeni", ["de"]="stopkombination", ["en"]="stopcombination", ["fr"]="stoppecombinaison", ["it"]="terminacombinazione", ["nl"]="stopcombinatie", ["pe"]="پایان‌ترکیب", ["ro"]="stopcombinare", }, ["stopcomponent"]={ ["cs"]="stopkomponenta", ["de"]="stopkomponente", ["en"]="stopcomponent", ["fr"]="stoppecomposant", ["it"]="terminacomponente", ["nl"]="stoponderdeel", ["pe"]="پایان‌مولفه", ["ro"]="stopcomponenta", }, ["stopdocument"]={ ["cs"]="stopdokument", ["de"]="stopdokument", ["en"]="stopdocument", ["fr"]="stoppedocument", ["it"]="terminadocumento", ["nl"]="stopdocument", ["pe"]="پایان‌نوشتار", ["ro"]="stopdocument", }, ["stopenvironment"]={ ["cs"]="stopprostredi", ["de"]="stopumgebung", ["en"]="stopenvironment", ["fr"]="stoppeenvironement", ["it"]="terminaambiente", ["nl"]="stopomgeving", ["pe"]="پایان‌محیط", ["ro"]="stopmediu", }, ["stopglobal"]={ ["cs"]="stopglobalni", ["de"]="stopglobal", ["en"]="stopglobal", ["fr"]="stoppeglobal", ["it"]="terminaglobale", ["nl"]="stopglobaal", ["pe"]="پایان‌سراسری", ["ro"]="stopblobal", }, ["stopline"]={ ["cs"]="stopradek", ["de"]="stopzeile", ["en"]="stopline", ["fr"]="stoppeligne", ["it"]="terminariga", ["nl"]="stopregel", ["pe"]="پایان‌خط", ["ro"]="stoplinie", }, ["stoplinecorrection"]={ ["cs"]="stopkorekceradku", ["de"]="stopzeilenkorrektur", ["en"]="stoplinecorrection", ["fr"]="stoppecorrectionligne", ["it"]="terminacorrezioneriga", ["nl"]="stopregelcorrectie", ["pe"]="پایان‌تصحیح‌خط", ["ro"]="stopcorectielinie", }, ["stoplinenumbering"]={ ["cs"]="stopcislovaniradku", ["de"]="stopzeilennumerierung", ["en"]="stoplinenumbering", ["fr"]="stoppenumerotationligne", ["it"]="terminanumerazionerighe", ["nl"]="stopregelnummeren", ["pe"]="پایان‌شماره‌گذاری‌خط", ["ro"]="stopnumerotarelinii", }, ["stoplines"]={ ["cs"]="stopradky", ["de"]="stopzeilen", ["en"]="stoplines", ["fr"]="stoppelignes", ["it"]="terminarighe", ["nl"]="stopregels", ["pe"]="پایان‌خطها", ["ro"]="stoplinii", }, ["stoplocal"]={ ["cs"]="stoplokalni", ["de"]="stoplokal", ["en"]="stoplocal", ["fr"]="stoppelocal", ["it"]="terminalocale", ["nl"]="stoplokaal", ["pe"]="پایان‌موضعی", ["ro"]="stoplocal", }, ["stoplocalfootnotes"]={ ["cs"]="stoplokalnipoznamkypodcarou", ["de"]="stoplokalefussnoten", ["en"]="stoplocalfootnotes", ["fr"]="stoppenotespdplocales", ["it"]="terminanotepdplocali", ["nl"]="stoplokalevoetnoten", ["pe"]="پایان‌پانوشتهای‌موضعی", ["ro"]="stopnotesubsollocale", }, ["stopmakeup"]={ ["cs"]="stopuprava", ["de"]="stopumbruch", ["en"]="stopmakeup", ["fr"]="stoppemakeup", ["it"]="terminamakeup", ["nl"]="stopopmaak", ["pe"]="پایان‌آرایش", ["ro"]="stopmakeup", }, ["stopmarginblock"]={ ["cs"]="stopmarginalniblok", ["de"]="stopmarginalblock", ["en"]="stopmarginblock", ["fr"]="stoppeblocmarge", ["it"]="terminabloccomargine", ["nl"]="stopmargeblok", ["pe"]="پایان‌بلوک‌حاشیه", ["ro"]="stopblocmarginal", }, ["stopmarginrule"]={ ["cs"]="stopmarginalnilinka", ["de"]="stopmarginallinie", ["en"]="stopmarginrule", ["fr"]="stoppemargereglee", ["it"]="terminalineamargine", ["nl"]="stopkantlijn", ["pe"]="پایان‌خط‌حاشیه", ["ro"]="stopliniemargine", }, ["stopnarrower"]={ ["cs"]="stopzuzeni", ["de"]="stopenger", ["en"]="stopnarrower", ["fr"]="stopcompoetroite", ["it"]="terminapiustretto", ["nl"]="stopsmaller", ["pe"]="پایان‌نازکتر", ["ro"]="stopingust", }, ["stopopposite"]={ ["cs"]="stopprotejsek", ["de"]="stopgegenueber", ["en"]="stopopposite", ["fr"]="stoppeopposition", ["it"]="terminaopposto", ["nl"]="stopnaast", ["pe"]="پایان‌مخالف", ["ro"]="stopopozit", }, ["stopoverlay"]={ ["cs"]="stopprekryv", ["de"]="stopoverlay", ["en"]="stopoverlay", ["fr"]="stopperevetement", ["it"]="terminasovrapposizione", ["nl"]="stopoverlay", ["pe"]="پایان‌پوشش", ["ro"]="stopoverlay", }, ["stopoverzicht"]={ ["cs"]="stopprehled", ["de"]="stopueberblick", ["en"]="stopoverview", ["fr"]="stoppevuedensemble", ["it"]="terminaoverview", ["nl"]="stopoverzicht", ["pe"]="پایان‌بازبینی", ["ro"]="stopoverview", }, ["stoppacked"]={ ["cs"]="stopzhustene", ["de"]="stopkleinerdurchschuss", ["en"]="stoppacked", ["fr"]="stoppegroupe", ["it"]="terminaimpaccato", ["nl"]="stopopelkaar", ["pe"]="پایان‌فشرده", ["ro"]="stopimpachetat", }, ["stoppositioning"]={ ["cs"]="stopumistovani", ["de"]="stoppositionieren", ["en"]="stoppositioning", ["fr"]="stoppepositionnement", ["it"]="terminaposizionamento", ["nl"]="stoppositioneren", ["pe"]="پایان‌مکان‌گذاری", ["ro"]="stoppozitionare", }, ["stopproduct"]={ ["cs"]="stopprodukt", ["de"]="stopprodukt", ["en"]="stopproduct", ["fr"]="stoppeproduit", ["it"]="terminaprodotto", ["nl"]="stopprodukt", ["pe"]="پایان‌تولید", ["ro"]="stopprodus", }, ["stopprofile"]={ ["cs"]="stopprofil", ["de"]="stopprofil", ["en"]="stopprofile", ["fr"]="stoppeprofil", ["it"]="terminaprofili", ["nl"]="stopprofiel", ["pe"]="پایان‌پروفایل", ["ro"]="stopprofil", }, ["stopproject"]={ ["cs"]="stopprojekt", ["de"]="stopprojekt", ["en"]="stopproject", ["fr"]="stoppeprojet", ["it"]="terminaprogetto", ["nl"]="stopprojekt", ["pe"]="پایان‌پروژه", ["ro"]="stopproiect", }, ["stopquotation"]={ ["cs"]="stopcitace", ["de"]="stopzitat", ["en"]="stopquotation", ["fr"]="stoppecitation", ["it"]="terminacitazione", ["nl"]="stopcitaat", ["pe"]="پایان‌نقل‌قول", ["ro"]="stopcitat", }, ["stopraster"]={ ["cs"]="stoprastr", ["de"]="stopraster", ["en"]="stopraster", ["fr"]="stopperaster", ["it"]="terminaraster", ["nl"]="stopraster", ["pe"]="stopraster", ["ro"]="stopraster", }, ["stopsynchronization"]={ ["cs"]="stopsynchronizace", ["de"]="stopsynchronisation", ["en"]="stopsynchronization", ["fr"]="stoppesynchronisation", ["it"]="terminasincronizzazione", ["nl"]="stopsynchronisatie", ["pe"]="پایان‌تطابق", ["ro"]="stopsincronizare", }, ["stoptable"]={ ["cs"]="stoptabulka", ["de"]="stoptabelle", ["en"]="stoptable", ["fr"]="stoppetableau", ["it"]="terminatabella", ["nl"]="stoptabel", ["pe"]="پایان‌جدول", ["ro"]="stoptabel", }, ["stoptables"]={ ["cs"]="stoptabulky", ["de"]="stoptabellen", ["en"]="stoptables", ["fr"]="stoppetableaux", ["it"]="terminatabelle", ["nl"]="stoptabellen", ["pe"]="پایان‌جدولها", ["ro"]="stoptabele", }, ["stoptext"]={ ["cs"]="stoptext", ["de"]="stoptext", ["en"]="stoptext", ["fr"]="stoppetexte", ["it"]="terminatesto", ["nl"]="stoptekst", ["pe"]="پایان‌متن", ["ro"]="stoptext", }, ["stoptextrule"]={ ["cs"]="stoptextovalinka", ["de"]="stoptextlinie", ["en"]="stoptextrule", ["fr"]="stoppeligneregleetexte", ["it"]="terminalineatesto", ["nl"]="stoptekstlijn", ["pe"]="پایان‌خط‌متن", ["ro"]="stopriglatext", }, ["stopunpacked"]={ ["cs"]="stopnezhustene", ["de"]="stopgrosserdurchschuss", ["en"]="stopunpacked", ["fr"]="stoppedegroupe", ["it"]="terminaunpacked", ["nl"]="stopvanelkaar", ["pe"]="پایان‌غیرفشرده", ["ro"]="stopneimpachetat", }, ["stopversion"]={ ["cs"]="stopverze", ["de"]="stopversion", ["en"]="stopversion", ["fr"]="stoppeversion", ["it"]="terminaversioni", ["nl"]="stopversie", ["pe"]="پایان‌نسخه", ["ro"]="stopversiune", }, ["stretched"]={ ["cs"]="roztazene", ["de"]="gestreckt", ["en"]="stretched", ["fr"]="etire", ["it"]="stirato", ["nl"]="uitgerekt", ["pe"]="کشیده", ["ro"]="intins", }, ["subformulanumber"]={ ["cs"]="cislopodrovnice", ["de"]="unterformelnummer", ["en"]="subformulanumber", ["fr"]="numerosousformule", ["it"]="numerosottoformula", ["nl"]="subformulenummer", ["pe"]="شماره‌زیرفرمول", ["ro"]="numarsubformula", }, ["subpagenumber"]={ ["cs"]="subpagenumber", ["de"]="subpagenumber", ["en"]="subpagenumber", ["fr"]="sousnumeropage", ["it"]="subpagenumber", ["nl"]="subpaginanummer", ["pe"]="شماره‌زیرصفحه", ["ro"]="subpagenumber", }, ["switchtobodyfont"]={ ["cs"]="prepninazakladnifont", ["de"]="wechselezumfliesstext", ["en"]="switchtobodyfont", ["fr"]="changepolicecorps", ["it"]="cambiaafontdeltesto", ["nl"]="switchnaarkorps", ["pe"]="تغییربه‌قلم‌بدنه", ["ro"]="trecilafonttext", }, ["switchtorawfont"]={ ["cs"]="switchtorawfont", ["de"]="switchtorawfont", ["en"]="switchtorawfont", ["fr"]="changepolicebrute", ["it"]="passaafontgrezzo", ["nl"]="switchtorawfont", ["pe"]="تغییربه‌قلم‌خام", ["ro"]="trecilafontraw", }, ["sym"]={ ["cs"]="sym", ["de"]="sym", ["en"]="sym", ["fr"]="sym", ["it"]="sim", ["nl"]="sym", ["pe"]="نم", ["ro"]="sim", }, ["symoffset"]={ ["en"]="symoffset", ["nl"]="symoffset", }, ["symbol"]={ ["cs"]="symbol", ["de"]="symbol", ["en"]="symbol", ["fr"]="symbole", ["it"]="simbolo", ["nl"]="symbool", ["pe"]="نماد", ["ro"]="simbol", }, ["synchronizationbar"]={ ["cs"]="synchronizacnilista", ["de"]="synchronisationsbalken", ["en"]="synchronizationbar", ["fr"]="barresynchronisation", ["it"]="barrasincronizzazione", ["nl"]="synchronisatiebalk", ["pe"]="میله‌تطابق", ["ro"]="barasincronizare", }, ["synchronize"]={ ["cs"]="synchronizovat", ["de"]="synchronisieren", ["en"]="synchronize", ["fr"]="synchronise", ["it"]="sincronizza", ["nl"]="synchroniseer", ["pe"]="تطابق", ["ro"]="sincronizeaza", }, ["tab"]={ ["cs"]="tab", ["de"]="tab", ["en"]="tab", ["fr"]="tab", ["it"]="tab", ["nl"]="tab", ["pe"]="تب", ["ro"]="tab", }, ["testcolumn"]={ ["cs"]="testcolumn", ["de"]="testcolumn", ["en"]="testcolumn", ["fr"]="testcolumn", ["it"]="testcolumn", ["nl"]="testkolom", ["pe"]="ستون‌امتحان", ["ro"]="testcolumn", }, ["testpage"]={ ["cs"]="testpage", ["de"]="testpage", ["en"]="testpage", ["fr"]="testpage", ["it"]="testpage", ["nl"]="testpagina", ["pe"]="صفحه‌تست", ["ro"]="testpage", }, ["tex"]={ ["cs"]="tex", ["de"]="tex", ["en"]="tex", ["fr"]="tex", ["it"]="tex", ["nl"]="tex", ["pe"]="تک", ["ro"]="tex", }, ["textheight"]={ ["cs"]="vyskatextu", ["de"]="texthoehe", ["en"]="textheight", ["fr"]="hauteurtexte", ["it"]="altezzatesto", ["nl"]="teksthoogte", ["pe"]="ارتفاع‌متن", ["ro"]="inaltimetext", }, ["textreference"]={ ["cs"]="odkaznatext", ["de"]="textreferenz", ["en"]="textreference", ["fr"]="referencetexte", ["it"]="riferimentotesto", ["nl"]="tekstreferentie", ["pe"]="مرجع‌متن", ["ro"]="referintatext", }, ["textrule"]={ ["cs"]="textovalinka", ["de"]="textlinie", ["en"]="textrule", ["fr"]="ligneregleetexte", ["it"]="lineatesto", ["nl"]="tekstlijn", ["pe"]="خط‌متن", ["ro"]="riglatext", }, ["textvariable"]={ ["cs"]="textvariable", ["de"]="textvariable", ["en"]="textvariable", ["fr"]="variabletexte", ["it"]="variabiletesto", ["nl"]="tekstvariabele", ["pe"]="متغیر متن", ["ro"]="variabilatext", }, ["textwidth"]={ ["cs"]="sirkatextu", ["de"]="textbreite", ["en"]="textwidth", ["fr"]="largeurtexte", ["it"]="ampiezzatesto", ["nl"]="tekstbreedte", ["pe"]="عرض‌متن", ["ro"]="latimetext", }, ["thinrule"]={ ["cs"]="tenkalinka", ["de"]="duennelinie", ["en"]="thinrule", ["fr"]="traitfin", ["it"]="lineasottile", ["nl"]="dunnelijn", ["pe"]="خط‌نازک", ["ro"]="liniesubtire", }, ["thinrules"]={ ["cs"]="tenkelinky", ["de"]="duennerumriss", ["en"]="thinrules", ["fr"]="traitsfins", ["it"]="lineesottili", ["nl"]="dunnelijnen", ["pe"]="خطهای‌نازک", ["ro"]="liniisubtiri", }, ["tooltip"]={ ["cs"]="bublinkovanapoveda", ["de"]="tooltip", ["en"]="tooltip", ["fr"]="suggestion", ["it"]="tooltip", ["nl"]="suggestie", ["pe"]="tooltip", ["ro"]="tooltip", }, ["topdistance"]={ ["cs"]="vzdalenosthorejsku", ["de"]="abstandoben", ["en"]="topdistance", ["fr"]="distancesup", ["it"]="distanzacima", ["nl"]="bovenafstand", ["pe"]="فاصله‌بالا", ["ro"]="distantasus", }, ["topheight"]={ ["cs"]="vyskahorejsku", ["de"]="hoeheoben", ["en"]="topheight", ["fr"]="hauteursup", ["it"]="altezzacima", ["nl"]="bovenhoogte", ["pe"]="ارتفاع‌بالا", ["ro"]="inaltimesus", }, ["topspace"]={ ["cs"]="odsazenishora", ["de"]="kopfweite", ["en"]="topspace", ["fr"]="espacesup", ["it"]="spaziocima", ["nl"]="kopwit", ["pe"]="فضای‌بالا", ["ro"]="spatiusus", }, ["totalnumberofpages"]={ ["cs"]="celkovypocetstran", ["de"]="gesamtseitenanzahl", ["en"]="totalnumberofpages", ["fr"]="nombretotaldepages", ["it"]="numerototaledipagine", ["nl"]="totaalaantalpaginas", ["pe"]="شماره‌کل‌صفحه‌ها", ["ro"]="numartotalpagini", }, ["translate"]={ ["cs"]="prelozit", ["de"]="uebersetzten", ["en"]="translate", ["fr"]="traduire", ["it"]="traduci", ["nl"]="vertaal", ["pe"]="ترجمه", ["ro"]="traduce", }, ["txt"]={ ["cs"]="txt", ["de"]="txt", ["en"]="txt", ["fr"]="txt", ["it"]="txt", ["nl"]="txt", ["pe"]="txt", ["ro"]="txt", }, ["typ"]={ ["cs"]="pis", ["de"]="tip", ["en"]="typ", ["fr"]="typ", ["it"]="typ", ["nl"]="typ", ["pe"]="typ", ["ro"]="typ", }, ["type"]={ ["cs"]="opis", ["de"]="tippen", ["en"]="type", ["fr"]="dactylographier", ["it"]="type", ["nl"]="type", ["pe"]="تایپ", ["ro"]="type", }, ["typebuffer"]={ ["cs"]="typebuffer", ["de"]="tippepuffer", ["en"]="typebuffer", ["fr"]="tapebuffer", ["it"]="typebuffer", ["nl"]="typebuffer", ["pe"]="تایپ‌بافر", ["ro"]="scriebuffer", }, ["typefile"]={ ["cs"]="opissoubor", ["de"]="tippedatei", ["en"]="typefile", ["fr"]="fichierdactylo", ["it"]="typefile", ["nl"]="typefile", ["pe"]="تایپ‌پرونده", ["ro"]="typefile", }, ["unitmeaning"]={ ["cs"]="vyznam", ["de"]="bedeutung", ["en"]="unitmeaning", ["fr"]="sensunite", ["it"]="nomeunita", ["nl"]="betekenis", ["pe"]="معنی‌واحد", ["ro"]="numeunitate", }, ["unknown"]={ ["cs"]="neznamo", ["de"]="unbekant", ["en"]="unknown", ["fr"]="inconnu", ["it"]="ignoto", ["nl"]="onbekend", ["pe"]="ناشناس", ["ro"]="necunoscut", }, ["useJSscripts"]={ ["cs"]="uzijJSscripts", ["de"]="verwendeJSscript", ["en"]="useJSscripts", ["fr"]="utiliseJSscripts", ["it"]="usaJSscripts", ["nl"]="gebruikJSscripts", ["pe"]="useJSscripts", ["ro"]="folosestescriptJS", }, ["useURL"]={ ["cs"]="uzijURL", ["de"]="verwendeURL", ["en"]="useURL", ["fr"]="utiliseURL", ["it"]="usaURL", ["nl"]="gebruikURL", ["pe"]="useURL", ["ro"]="folosesteURL", }, ["useXMLfilter"]={ ["cs"]="useXMLfilter", ["de"]="useXMLfilter", ["en"]="useXMLfilter", ["fr"]="useXMLfilter", ["it"]="useXMLfilter", ["nl"]="gebruikXMLfilter", ["pe"]="useXMLfilter", ["ro"]="useXMLfilter", }, ["useblocks"]={ ["cs"]="uzijbloky", ["de"]="verwendebloecke", ["en"]="useblocks", ["fr"]="utiliseblocs", ["it"]="usablocco", ["nl"]="gebruikblokken", ["pe"]="استفاده‌بلوکها", ["ro"]="folosestebloc", }, ["usecommands"]={ ["cs"]="uzijprikazy", ["de"]="verwendebefehl", ["en"]="usecommands", ["fr"]="utilisecommandes", ["it"]="usacomandi", ["nl"]="gebruikcommandos", ["pe"]="استفاده‌فرمانها", ["ro"]="folosestecomenzi", }, ["useencoding"]={ ["cs"]="uzijkodovani", ["de"]="benutzekodierung", ["en"]="useencoding", ["fr"]="utiliseencodage", ["it"]="usacodifica", ["nl"]="usecodering", ["pe"]="استفاده‌رمزینه", ["ro"]="folosestecodificarea", }, ["useexternaldocument"]={ ["cs"]="uzijexternidokument", ["de"]="verwendeexteresdokument", ["en"]="useexternaldocument", ["fr"]="utilisedocumentexterne", ["it"]="usadocumentoesterno", ["nl"]="gebruikexterndocument", ["pe"]="استفاده‌نوشتارخارجی", ["ro"]="folosestedocumentextern", }, ["useexternalfigure"]={ ["cs"]="uzijexterniobraz", ["de"]="verwendeexterneabbildung", ["en"]="useexternalfigure", ["fr"]="utilisefigureexterne", ["it"]="usafiguraesterna", ["nl"]="gebruikexternfiguur", ["pe"]="استفاده‌شکل‌خارجی", ["ro"]="folosestefiguraexterna", }, ["useexternalfile"]={ ["cs"]="uzijexternisoubor", ["de"]="verwendeexternedatei", ["en"]="useexternalfile", ["fr"]="utilisefichierexterne", ["it"]="usafileesterno", ["nl"]="gebruikexternefile", ["pe"]="استفاده‌پرونده‌خارجی", ["ro"]="folosestefisierextern", }, ["useexternalfiles"]={ ["cs"]="uzijexternisoubory", ["de"]="verwendeexternedateien", ["en"]="useexternalfiles", ["fr"]="utilisefichiersexternes", ["it"]="usafileesterni", ["nl"]="gebruikexternefiles", ["pe"]="استفاده‌پرونده‌های‌خارجی", ["ro"]="folosestefisiereexterne", }, ["useexternalsoundtrack"]={ ["cs"]="uzijexternizvuk", ["de"]="verwendeexternestonstueck", ["en"]="useexternalsoundtrack", ["fr"]="utilisepsiteaudioexterne", ["it"]="usacolonnasonoraesterna", ["nl"]="gebruikexterngeluidsfragment", ["pe"]="استفاده‌قطعه‌موزیک‌خارجی", ["ro"]="folosestemuzicaexterna", }, ["usemodule"]={ ["cs"]="uzijmodul", ["de"]="verwendemodul", ["en"]="usemodule", ["fr"]="utilisemodule", ["it"]="usamodulo", ["nl"]="gebruikmodule", ["pe"]="استفاده‌مدول", ["ro"]="folosestemodul", }, ["usemodules"]={ ["cs"]="uzijmoduly", ["de"]="verwendemodule", ["en"]="usemodules", ["fr"]="utilisemodules", ["it"]="usamoduli", ["nl"]="gebruikmodules", ["pe"]="استفاده‌مدولها", ["ro"]="folosestemodule", }, ["usepath"]={ ["cs"]="uzijadresar", ["de"]="benutzeverzeichnis", ["en"]="usedirectory", ["fr"]="utilisechemin", ["it"]="usacartella", ["nl"]="gebruikgebied", ["pe"]="استفاده‌مسیر", ["ro"]="folosestedirector", }, ["usereferences"]={ ["cs"]="uzijodkazy", ["de"]="verwendereferenzen", ["en"]="usereferences", ["fr"]="utilisereferences", ["it"]="usariferimenti", ["nl"]="gebruikreferenties", ["pe"]="استفاده‌مرجعها", ["ro"]="folosestereferinte", }, ["usespecials"]={ ["cs"]="uzijspeciality", ["de"]="benutzespezielles", ["en"]="usespecials", ["fr"]="utilisespecialites", ["it"]="usaspecialita", ["nl"]="gebruikspecials", ["pe"]="استفاده‌ویژگیها", ["ro"]="folosestespeciale", }, ["usesymbols"]={ ["cs"]="uzijsymbol", ["de"]="verwendesymbole", ["en"]="usesymbols", ["fr"]="utilisesymboles", ["it"]="usasimboli", ["nl"]="gebruiksymbolen", ["pe"]="استفاده‌نمادها", ["ro"]="folosestesimboluri", }, ["usetypescript"]={ ["cs"]="usetypescript", ["de"]="usetypescript", ["en"]="usetypescript", ["fr"]="usetypescript", ["it"]="usetypescript", ["nl"]="gebruiktypescript", ["pe"]="استفاده‌دستخط‌تایپ", ["ro"]="usetypescript", }, ["usetypescriptfile"]={ ["cs"]="usetypescriptfile", ["de"]="usetypescriptfile", ["en"]="usetypescriptfile", ["it"]="usetypescriptfile", ["nl"]="gebruiktypescriptfile", ["pe"]="استفاده‌پرونده‌دستخط‌تایپ", ["ro"]="usetypescriptfile", }, ["useurl"]={ ["cs"]="uzijurl", ["de"]="verwendeurl", ["en"]="useurl", ["fr"]="utiliseurl", ["it"]="usaurl", ["nl"]="gebruikurl", ["pe"]="useurl", ["ro"]="folosesteurl", }, ["version"]={ ["cs"]="verze", ["de"]="version", ["en"]="version", ["fr"]="version", ["it"]="versione", ["nl"]="versie", ["pe"]="نسخه", ["ro"]="versiune", }, ["vl"]={ ["cs"]="vl", ["de"]="vl", ["en"]="vl", ["fr"]="vl", ["it"]="vl", ["nl"]="vl", ["pe"]="خ‌ع", ["ro"]="vl", }, ["weekday"]={ ["cs"]="vsedniden", ["de"]="wochentag", ["en"]="weekday", ["fr"]="joursemaine", ["it"]="giornosettimana", ["nl"]="weekdag", ["pe"]="روزهفته", ["ro"]="zidinsaptamana", }, ["whitespace"]={ ["cs"]="bilemisto", ["de"]="zwischenraum", ["en"]="whitespace", ["fr"]="espaceblanc", ["it"]="spaziobianco", ["nl"]="witruimte", ["pe"]="فضای‌سفید", ["ro"]="spatiualb", }, ["wordright"]={ ["cs"]="slovovpravo", ["de"]="wortrechts", ["en"]="wordright", ["fr"]="motdroit", ["it"]="paroladestra", ["nl"]="woordrechts", ["pe"]="کلمه‌راست", ["ro"]="cuvantdreapta", }, ["writebetweenlist"]={ ["cs"]="zapismeziseznam", ["de"]="schreibezwischenliste", ["en"]="writebetweenlist", ["fr"]="ecritentreliste", ["it"]="scrividentroelenco", ["nl"]="schrijftussenlijst", ["pe"]="بنویس‌بین‌لیست", ["ro"]="scrieintreliste", }, ["writetolist"]={ ["cs"]="zapisdoseznamu", ["de"]="schreibezurliste", ["en"]="writetolist", ["fr"]="ecritdansliste", ["it"]="scriviinelenco", ["nl"]="schrijfnaarlijst", ["pe"]="بنویس‌در‌لیست", ["ro"]="scrieinlista", }, ["writetoreferencelist"]={ ["cs"]="zapisdoseznamuodkazu", ["de"]="schreibezurreferenzliste", ["en"]="writetoreferencelist", ["fr"]="ecritdanslistereference", ["it"]="scriviinlistariferimenti", ["nl"]="schrijfnaarreferentielijst", ["pe"]="بنویس‌درلیست‌مرجع", ["ro"]="scrieinlistareferinte", }, ["writetoregister"]={ ["cs"]="zapisdorejstriku", ["de"]="schreibezumregister", ["en"]="writetoregister", ["fr"]="ecritregistre", ["it"]="scriviinregistro", ["nl"]="schrijfnaarregister", ["pe"]="بنویس‌درثبت", ["ro"]="scrieinregistru", }, }, ["constants"]={ ["less"]={ ["en"]="less", ["nl"]="minder", }, ["more"]={ ["en"]="more", ["nl"]="meer", }, ["solution"]={ ["en"]="solution", ["nl"]="oplossing", }, ["anchor"]={ ["en"]="anchor", ["nl"]="anker", }, ["buffer"]={ ["en"]="buffer", }, ["dash"]={ ["en"]="dash", ["nl"]="streep", }, ["export"] = { ["en"]="export", }, ["css"] = { ["en"]="css", }, ["xhtml"] = { ["en"]="xhtml", }, ["entities"]={ ["en"]="entities", ["nl"]="entities", }, ["labeloffset"]={ ["en"]="labeloffset", }, ["exitoffset"]={ ["en"]="labeloffset", }, ["commentoffset"]={ ["en"]="commentoffset", }, ["hcompact"]={ ["en"]="hcompact", ["nl"]="hcomprimeer", }, ["vcompact"]={ ["en"]="vcompact", ["nl"]="vcomprimeer", }, ["keys"]={ ["en"]="keys", ["nl"]="sleutels", -- brrr }, ["entries"]={ ["en"]="entries", ["nl"]="ingangen", }, ["strip"]={ ["en"]="strip", }, ["order"]={ ["en"]="order", ["nl"]="volgorde", }, ["compact"]={ ["en"]="compact", ["nl"]="compact", }, ["headalign"]={ ["en"]="headalign", ["nl"]="kopuitlijnen", }, ["alignsymbol"]={ ["en"]="alignsymbol", }, ["export"]={ ["en"]="export", ["nl"]="exporteer", }, ["database"]={ ["en"]="database", }, ["artauthor"]={ ["en"]="artauthor", }, ["editor"]={ ["en"]="editor", }, ["authoretallimit"]={ ["en"]="authoretallimit", }, ["artauthoretallimit"]={ ["en"]="artauthoretallimit", }, ["editoretallimit"]={ ["en"]="editoretallimit", }, ["authoretaldisplay"]={ ["en"]="authoretaldisplay", }, ["artauthoretaldisplay"]={ ["en"]="artauthoretaldisplay", }, ["editoretaldisplay"]={ ["en"]="editoretaldisplay", }, ["authoretaltext"]={ ["en"]="authoretaltext", }, ["artauthoretaltext"]={ ["en"]="artauthoretaltext", }, ["editoretaltext"]={ ["en"]="editoretaltext", }, ["otherstext"]={ ["en"]="otherstext", }, ["andtext"]={ ["en"]="andtext", }, ["totalnumber"]={ ["en"]="totalnumber", }, ["firstnamesep"]={ ["en"]="firstnamesep", }, ["vonsep"]={ ["en"]="vonsep", }, ["juniorsep"]={ ["en"]="juniorsep", }, ["surnamesep"]={ ["en"]="surnamesep", }, ["lastnamesep"]={ ["en"]="lastnamesep", }, ["finalnamesep"]={ ["en"]="finalnamesep", }, ["namesep"]={ ["en"]="namesep", }, ["pubsep"]={ ["en"]="pubsep", }, ["lastpubsep"]={ ["en"]="lastpubsep", }, ["refcommand"]={ ["en"]="refcommand", }, ["samplesize"]={ ["en"]="samplesize", }, ["maybeyear"]={ ["en"]="maybeyear", }, --["group"]={ -- ["en"]="group", -- ["nl"]="groep", --}, ["values"]={ ["en"]="values", ["nl"]="waarden", }, ["layout"]={ ["en"]="layout", ["nl"]="layout", }, ["topcommand"]={ ["en"]="topcommand", ["nl"]="bovencommando", }, ["middlecommand"]={ ["en"]="middlecommand", ["nl"]="middencommando", }, ["bottomcommand"]={ ["en"]="bottomcommand", ["nl"]="ondercommando", }, ["action"]={ ["cs"]="akce", ["de"]="aktion", ["en"]="action", ["fr"]="action", ["it"]="azione", ["nl"]="actie", ["pe"]="کنش", ["ro"]="actiune", }, ["address"]={ ["cs"]="adresa", ["de"]="adresse", ["en"]="address", ["fr"]="adresse", ["it"]="indirizzo", ["nl"]="adres", ["pe"]="نشانی", ["ro"]="adresa", }, ["after"]={ ["cs"]="po", ["de"]="nach", ["en"]="after", ["fr"]="apres", ["it"]="dopo", ["nl"]="na", ["pe"]="بعداز", ["ro"]="dupa", }, ["afterhead"]={ ["cs"]="pohlavicce", ["de"]="nachkopf", ["en"]="afterhead", ["fr"]="aprestete", ["it"]="dopotesta", ["nl"]="kopna", ["pe"]="بعدازسر", ["ro"]="dupatitlu", }, ["aftersection"]={ ["en"]="aftersection", ["nl"]="nasectie", }, ["afterkey"]={ ["cs"]="klavesapo", ["de"]="nachtaste", ["en"]="afterkey", ["fr"]="aprescle", ["it"]="dopotasto", ["nl"]="natoets", ["pe"]="بعدازکلید", ["ro"]="dupatasta", }, ["align"]={ ["cs"]="zarovnani", ["de"]="ausrichtung", ["en"]="align", ["fr"]="alignement", ["it"]="allinea", ["nl"]="uitlijnen", ["pe"]="تنظیم", ["ro"]="aliniere", }, ["aligncharacter"]={ ["cs"]="aligncharacter", ["de"]="aligncharacter", ["en"]="aligncharacter", ["fr"]="caracterealigne", ["it"]="allineacarattere", ["nl"]="karakteruitlijnen", ["pe"]="حرف‌تنظیم", ["ro"]="aliniazacaracter", }, ["alignmentcharacter"]={ ["cs"]="alignmentcharacter", ["de"]="alignmentcharacter", ["en"]="alignmentcharacter", ["fr"]="alignementcaractere", ["it"]="carattereallineamento", ["nl"]="uitlijnkarakter", ["pe"]="حرف‌تنظیم‌کردن", ["ro"]="alierecaracter", }, ["aligntitle"]={ ["cs"]="zarovnejtitul", ["de"]="titelausrichten", ["en"]="aligntitle", ["fr"]="alignementtitre", ["it"]="allineatitolo", ["nl"]="titeluitlijnen", ["pe"]="عنوان‌تنظیم", ["ro"]="alinieretitlu", }, ["alternative"]={ ["cs"]="alternativa", ["de"]="alternative", ["en"]="alternative", ["fr"]="alternative", ["it"]="alternativa", ["nl"]="variant", ["pe"]="جایگزین", ["ro"]="alternativ", }, ["apa"]={ ["cs"]="apa", ["de"]="apa", ["en"]="apa", ["fr"]="apa", ["it"]="apa", ["nl"]="apa", ["pe"]="apa", ["ro"]="apa", }, ["arrow"]={ ["cs"]="sipka", ["de"]="pfeil", ["en"]="arrow", ["fr"]="fleche", ["it"]="freccia", ["nl"]="pijl", ["pe"]="پیکان", ["ro"]="sageata", }, ["at"]={ ["cs"]="u", ["de"]="bei", ["en"]="at", ["fr"]="a", ["it"]="ad", ["nl"]="op", ["pe"]="در", ["ro"]="la", }, ["author"]={ ["cs"]="autor", ["de"]="autor", ["en"]="author", ["fr"]="auteur", ["it"]="autore", ["nl"]="auteur", ["pe"]="نویسنده", ["ro"]="autor", }, ["auto"]={ ["cs"]="auto", ["de"]="auto", ["en"]="auto", ["fr"]="auto", ["it"]="auto", ["nl"]="auto", ["pe"]="خودکار", ["ro"]="auto", }, ["autocase"]={ ["en"]="autocase", ["nl"]="autocase", }, ["autofile"]={ ["cs"]="autofile", ["de"]="autofile", ["en"]="autofile", ["fr"]="autofile", ["it"]="autofile", ["nl"]="autofile", ["pe"]="پرونده‌خودکار", ["ro"]="autofile", }, ["autofocus"]={ ["cs"]="autoostreni", ["de"]="autofocus", ["en"]="autofocus", ["fr"]="autofocus", ["it"]="autofocus", ["nl"]="autofocus", ["pe"]="تمرکز‌خودکار", ["ro"]="autofocus", }, ["autohang"]={ ["cs"]="autohang", ["de"]="autohang", ["en"]="autohang", ["fr"]="autohang", ["it"]="autohang", ["nl"]="autohang", ["pe"]="آویزان‌خودکار", ["ro"]="autohang", }, ["autostrut"]={ ["cs"]="autostrut", ["de"]="autostrut", ["en"]="autostrut", ["fr"]="autostrut", ["it"]="autostrut", ["nl"]="autostrut", ["pe"]="بست‌خودکار", ["ro"]="autostrut", }, ["autowidth"]={ ["cs"]="autosirka", ["de"]="autobreite", ["en"]="autowidth", ["fr"]="autolargeur", ["it"]="autoampiezza", ["nl"]="autobreedte", ["pe"]="عرض‌خودکار", ["ro"]="autolatime", }, ["axis"]={ ["cs"]="osa", ["de"]="achsen", ["en"]="axis", ["fr"]="axe", ["it"]="asse", ["nl"]="assenstelsel", ["pe"]="محورها", ["ro"]="axa", }, ["background"]={ ["cs"]="pozadi", ["de"]="hintergrund", ["en"]="background", ["fr"]="arriereplan", ["it"]="sfondo", ["nl"]="achtergrond", ["pe"]="پس‌زمینه", ["ro"]="fundal", }, ["backgroundcolor"]={ ["cs"]="barvapozadi", ["de"]="hintergrundfarbe", ["en"]="backgroundcolor", ["fr"]="couleurarriereplan", ["it"]="coloresfondo", ["nl"]="achtergrondkleur", ["pe"]="رنگ‌پس‌زمینه", ["ro"]="culoarefundal", }, ["backgroundcorner"]={ ["cs"]="rohpozadi", ["de"]="hintergrundwinkel", ["en"]="backgroundcorner", ["fr"]="coinarriereplan", ["it"]="angolosfondo", ["nl"]="achtergrondhoek", ["pe"]="گوشه‌پس‌زمینه", ["ro"]="coltfundal", }, ["backgrounddepth"]={ ["cs"]="hloubkapozadi", ["de"]="hintergrundtiefe", ["en"]="backgrounddepth", ["fr"]="profondeurarriereplan", ["it"]="profonditasfondo", ["nl"]="achtergronddiepte", ["pe"]="عمق‌پس‌زمینه", ["ro"]="adancimefundal", }, ["backgroundoffset"]={ ["cs"]="offsetpozadi", ["de"]="hintergrundoffset", ["en"]="backgroundoffset", ["fr"]="decalagearriereplan", ["it"]="offsetsfondo", ["nl"]="achtergrondoffset", ["pe"]="آفست‌پس‌زمینه", ["ro"]="offsetfundal", }, ["backgroundradius"]={ ["cs"]="polomerpozadi", ["de"]="hintergrundradius", ["en"]="backgroundradius", ["fr"]="rayonarriereplan", ["it"]="raggiosfondo", ["nl"]="achtergrondstraal", ["pe"]="شعاع‌پس‌زمینه", ["ro"]="razafundal", }, ["backgroundscreen"]={ ["cs"]="rastrpozadi", ["de"]="hintergrundraster", ["en"]="backgroundscreen", ["fr"]="ecranarriereplan", ["it"]="schermosfondo", ["nl"]="achtergrondraster", ["pe"]="پرده‌پس‌زمینه", ["ro"]="ecranfundal", }, ["backspace"]={ ["cs"]="zpetnamezera", ["de"]="rumpfspatium", ["en"]="backspace", ["fr"]="retour", ["it"]="backspace", ["nl"]="rugwit", ["pe"]="فضای‌پس", ["ro"]="spatiuspate", }, ["backreference"]={ ["en"]="backreference", ["nl"]="terugreferentie", }, ["balance"]={ ["cs"]="rovnovaha", ["de"]="ausgleichen", ["en"]="balance", ["fr"]="equilibre", ["it"]="bilanciamento", ["nl"]="balanceren", ["pe"]="تعادل", ["ro"]="balanta", }, ["before"]={ ["cs"]="pred", ["de"]="vor", ["en"]="before", ["fr"]="avant", ["it"]="prima", ["nl"]="voor", ["pe"]="قبل‌از", ["ro"]="inainte", }, ["beforesection"]={ ["en"]="beforesection", ["nl"]="voorsectie", }, ["insidesection"]={ ["en"]="insidesection", ["nl"]="binnensectie", }, ["beforehead"]={ ["cs"]="predhlavickou", ["de"]="vorkopf", ["en"]="beforehead", ["fr"]="avanttete", ["it"]="primaditesta", ["nl"]="kopvoor", ["pe"]="قبل‌ازسر", ["ro"]="inaintetitlu", }, ["bet"]={ ["cs"]="bet", ["de"]="bet", ["en"]="bet", ["fr"]="bet", ["it"]="bet", ["nl"]="bet", ["pe"]="bet", ["ro"]="bet", }, ["bidi"]={ ["en"]="bidi", }, ["big"]={ ["cs"]="velky", ["de"]="gross", ["en"]="big", ["fr"]="grand", ["it"]="grande", ["nl"]="groot", ["pe"]="بزرگ", ["ro"]="mare", }, ["blank"]={ ["cs"]="prazdny", ["de"]="blanko", ["en"]="blank", ["fr"]="vide", ["it"]="rigovuoto", ["nl"]="blanko", ["pe"]="خالی", ["ro"]="blanc", }, ["blockway"]={ ["cs"]="dobloku", ["de"]="blockauf", ["en"]="blockway", ["fr"]="blockway", ["it"]="blockway", ["nl"]="blokwijze", ["pe"]="راه‌بلوک", ["ro"]="blockway", }, ["bodyfont"]={ ["cs"]="zakladnifont", ["de"]="fliesstext", ["en"]="bodyfont", ["fr"]="policecorps", ["it"]="fonttesto", ["nl"]="korps", ["pe"]="قلم‌بدنه", ["ro"]="fonttext", }, ["bookmark"]={ ["cs"]="zalozka", ["de"]="bookmark", ["en"]="bookmark", ["fr"]="marquepage", ["it"]="segnalibro", ["nl"]="bookmark", ["pe"]="چوبخط", ["ro"]="semncarte", }, ["bottom"]={ ["cs"]="spodek", ["de"]="unten", ["en"]="bottom", ["fr"]="inf", ["it"]="fondo", ["nl"]="onder", ["pe"]="پایین", ["ro"]="jos", }, ["bottomafter"]={ ["en"]="bottomafter", }, ["bottombefore"]={ ["en"]="bottombefore", }, ["bottomdistance"]={ ["cs"]="vzdalenostspodku", ["de"]="abstandunten", ["en"]="bottomdistance", ["fr"]="distanceinf", ["it"]="distanzafondo", ["nl"]="onderafstand", ["pe"]="فاصله‌پایین", ["ro"]="distantajos", }, ["bottomframe"]={ ["cs"]="ramecekdole", ["de"]="untenrahmen", ["en"]="bottomframe", ["fr"]="cadreinf", ["it"]="cornicefondo", ["nl"]="onderkader", ["pe"]="قالب‌پایین", ["ro"]="framejos", }, ["bottomoffset"]={ ["cs"]="offsetspodku", ["de"]="untenoffset", ["en"]="bottomoffset", ["fr"]="decalageinf", ["it"]="offsetfondo", ["nl"]="onderoffset", ["pe"]="آفست‌پایین", ["ro"]="offsetjos", }, ["bottomspace"]={ ["cs"]="bottomspace", ["de"]="bottomspace", ["en"]="bottomspace", ["fr"]="espaceinf", ["it"]="spaziofondo", ["nl"]="bodemwit", ["pe"]="فضای‌پایین", ["ro"]="spatiujos", }, ["bottomstate"]={ ["cs"]="statusspodku", ["de"]="untenstatus", ["en"]="bottomstate", ["fr"]="etatinf", ["it"]="statofondo", ["nl"]="onderstatus", ["pe"]="وضعیت‌پایین", ["ro"]="starejos", }, ["buffer"]={ ["en"]="buffer", ["nl"]="buffer", }, ["cache"]={ ["cs"]="cache", ["de"]="cache", ["en"]="cache", ["fr"]="cache", ["it"]="cache", ["nl"]="cache", ["pe"]="میانگیر", ["ro"]="cache", }, ["calculate"]={ ["cs"]="pocitat", ["de"]="berechnen", ["en"]="calculate", ["fr"]="calculer", ["it"]="calcola", ["nl"]="bereken", ["pe"]="محاسبه", ["ro"]="calculeaza", }, ["category"]={ ["en"]="category", ["nl"]="categorie", }, ["ccommand"]={ ["cs"]="cprikaz", ["de"]="cbefehl", ["en"]="ccommand", ["fr"]="ccommande", ["it"]="ccomando", ["nl"]="ccommando", ["pe"]="فرمان", ["ro"]="comandac", }, ["click"]={ ["cs"]="klik", ["de"]="klick", ["en"]="click", ["fr"]="clic", ["it"]="click", ["nl"]="klik", ["pe"]="فشردن", ["ro"]="click", }, ["clickin"]={ ["cs"]="klikuvnitr", ["de"]="klickin", ["en"]="clickin", ["fr"]="clicinterieur", ["it"]="clickdentro", ["nl"]="klikin", ["pe"]="فشردن‌داخل", ["ro"]="clickintru", }, ["clickout"]={ ["cs"]="klikvne", ["de"]="klickaus", ["en"]="clickout", ["fr"]="clicexterieur", ["it"]="clickfuori", ["nl"]="klikuit", ["pe"]="فشردن‌خارج", ["ro"]="clickies", }, ["clipoffset"]={ ["cs"]="clipoffset", ["de"]="clipoffset", ["en"]="clipoffset", ["fr"]="clipoffset", ["it"]="clipoffset", ["nl"]="clipoffset", ["pe"]="آفست‌کلیپ", ["ro"]="clipoffset", }, ["closeaction"]={ ["cs"]="zavriakci", ["de"]="schliessenaktion", ["en"]="closeaction", ["fr"]="actionfermeture", ["it"]="azionechiudi", ["nl"]="sluitactie", ["pe"]="بستن‌کنش", ["ro"]="actiuneinchidere", }, ["closecommand"]={ ["cs"]="closecommand", ["de"]="closecommand", ["en"]="closecommand", ["fr"]="closecommand", ["it"]="closecommand", ["nl"]="sluitcommando", ["pe"]="بستن‌فرمان", ["ro"]="closecommand", }, ["closepageaction"]={ ["cs"]="akcezavrenistranky", ["de"]="closepageaction", ["en"]="closepageaction", ["fr"]="actionfermeturepage", ["it"]="azionechiudipagina", ["nl"]="sluitpaginaactie", ["pe"]="بستن‌عمل‌صفحه", ["ro"]="actiuneinchiderepagina", }, ["closepage"]={ ["en"]="closepage", ["nl"]="sluitpagina", }, ["closesymbol"]={ ["cs"]="closesymbol", ["de"]="closesymbol", ["en"]="closesymbol", ["fr"]="closesymbol", ["it"]="closesymbol", ["nl"]="sluitsymbool", ["pe"]="بستن‌نماد", ["ro"]="closesymbol", }, ["color"]={ ["cs"]="barva", ["de"]="farbe", ["en"]="color", ["fr"]="couleur", ["it"]="colore", ["nl"]="kleur", ["pe"]="رنگ", ["ro"]="culoare", }, ["intent"]={ ["en"]="intent", }, ["column"]={ ["cs"]="sloupec", ["de"]="spalte", ["en"]="column", ["fr"]="colonne", ["it"]="colonna", ["nl"]="kolom", ["pe"]="ستون", ["ro"]="coloana", }, ["columndistance"]={ ["cs"]="vzdalenostsloupcu", ["de"]="spaltenabstand", ["en"]="columndistance", ["fr"]="distancecolonne", ["it"]="distanzacolonne", ["nl"]="kolomafstand", ["pe"]="فاصله‌ستون", ["ro"]="distantacoloane", }, ["columns"]={ ["cs"]="sloupce", ["de"]="spalten", ["en"]="columns", ["fr"]="colonnes", ["it"]="colonne", ["nl"]="kolommen", ["pe"]="ستونها", ["ro"]="coloane", }, ["command"]={ ["cs"]="prikaz", ["de"]="befehl", ["en"]="command", ["fr"]="commande", ["it"]="comando", ["nl"]="commando", ["pe"]="فرمان", ["ro"]="comanda", }, ["commandafter"]={ ["cs"]="prikazpo", ["de"]="zumbefehl", ["en"]="commandafter", ["fr"]="commandeapres", ["it"]="comdandodopo", ["nl"]="nacommando", ["pe"]="فرمان‌بعداز", ["ro"]="comandadupa", }, ["commandbefore"]={ ["cs"]="predchoziprikaz", ["de"]="vorbefehl", ["en"]="commandbefore", ["fr"]="commandeavant", ["it"]="comandoprima", ["nl"]="voorcommando", ["pe"]="فرمان‌قبل‌از", ["ro"]="comandainainte", }, ["commands"]={ ["cs"]="prikazy", ["de"]="befehle", ["en"]="commands", ["fr"]="commandes", ["it"]="comandi", ["nl"]="commandos", ["pe"]="فرمانها", ["ro"]="comenzi", }, ["component"]={ ["cs"]="component", ["de"]="component", ["en"]="component", ["fr"]="composant", ["it"]="component", ["nl"]="component", ["pe"]="مولفه", ["ro"]="component", }, ["compoundhyphen"]={ ["cs"]="compoundhyphen", ["de"]="compoundhyphen", ["en"]="compoundhyphen", ["fr"]="compoundhyphen", ["it"]="compoundhyphen", ["nl"]="koppelteken", ["pe"]="compoundhyphen", ["ro"]="compoundhyphen", }, ["compress"]={ ["cs"]="compress", ["de"]="compress", ["en"]="compress", ["fr"]="compress", ["it"]="compress", ["nl"]="comprimeren", ["pe"]="فشردن", ["ro"]="compress", }, ["connector"]={ ["en"]="connector", }, ["continue"]={ ["cs"]="pokracovat", ["de"]="fortsetzen", ["en"]="continue", ["fr"]="continue", ["it"]="continua", ["nl"]="doorgaan", ["pe"]="ادامه", ["ro"]="continua", }, ["contrastcolor"]={ ["cs"]="kontrastnibarva", ["de"]="kontrastfarbe", ["en"]="contrastcolor", ["fr"]="coleurcontraste", ["it"]="colorecontrasto", ["nl"]="contrastkleur", ["pe"]="contrastcolor", ["ro"]="culoarecontrast", }, ["controls"]={ ["cs"]="controls", ["de"]="controls", ["en"]="controls", ["fr"]="controles", ["it"]="controlli", ["nl"]="sturing", ["pe"]="کنترلها", ["ro"]="controale", }, ["conversion"]={ ["cs"]="konverze", ["de"]="konversion", ["en"]="conversion", ["fr"]="conversion", ["it"]="conversione", ["nl"]="conversie", ["pe"]="تبدیل", ["ro"]="conversie", }, ["convertfile"]={ ["cs"]="konverzesouboru", ["de"]="konvertieredatei", ["en"]="convertfile", ["fr"]="conversionfichier", ["it"]="convertifile", ["nl"]="converteerfile", ["pe"]="پرونده‌تبدیل", ["ro"]="convertestefisier", }, ["corner"]={ ["cs"]="roh", ["de"]="winkel", ["en"]="corner", ["fr"]="coin", ["it"]="angolo", ["nl"]="hoek", ["pe"]="گوشه", ["ro"]="colt", }, ["coupling"]={ ["cs"]="propojeni", ["de"]="verknuepfung", ["en"]="coupling", ["fr"]="couplage", ["it"]="accoppiamento", ["nl"]="koppeling", ["pe"]="تزویج", ["ro"]="cuplare", }, ["couplingway"]={ ["cs"]="zpusobpropojeni", ["de"]="verkopplungsart", ["en"]="couplingway", ["fr"]="modecouplage", ["it"]="modoaccoppiamento", ["nl"]="koppelwijze", ["pe"]="روش‌تزویج", ["ro"]="modcuplare", }, ["criterium"]={ ["cs"]="kriterium", ["de"]="kriterium", ["en"]="criterium", ["fr"]="critere", ["it"]="criterio", ["nl"]="criterium", ["pe"]="criterium", ["ro"]="criteriu", }, ["current"]={ ["cs"]="aktualni", ["de"]="aktuell", ["en"]="current", ["fr"]="courant", ["it"]="corrente", ["nl"]="huidige", ["pe"]="جاری", ["ro"]="curent", }, ["cutspace"]={ ["cs"]="cutspace", ["de"]="cutspace", ["en"]="cutspace", ["fr"]="cutspace", ["it"]="cutspace", ["nl"]="snijwit", ["pe"]="فضای‌برش", ["ro"]="cutspace", }, ["dash"]={ ["cs"]="pomlcka", ["de"]="strich", ["en"]="dash", ["fr"]="pointille", ["it"]="dash", ["nl"]="streep", ["pe"]="دش", ["ro"]="dash", }, ["dat"]={ ["cs"]="dat", ["de"]="dat", ["en"]="dat", ["fr"]="dat", ["it"]="dat", ["nl"]="dat", ["pe"]="dat", ["ro"]="dat", }, ["date"]={ ["cs"]="datum", ["de"]="datum", ["en"]="date", ["fr"]="date", ["it"]="data", ["nl"]="datum", ["pe"]="تاریخ", ["ro"]="data", }, ["deepnumbercommand"]={ ["cs"]="deepnumbercommand", ["de"]="deepnumbercommand", ["en"]="deepnumbercommand", ["fr"]="deepnumbercommand", ["it"]="deepnumbercommand", ["nl"]="diepnummercommando", ["pe"]="فرمان‌شماره‌عمیق", ["ro"]="deepnumbercommand", }, ["deeptextcommand"]={ ["cs"]="deeptextcommand", ["de"]="deeptextcommand", ["en"]="deeptextcommand", ["fr"]="deeptextcommand", ["it"]="deeptextcommand", ["nl"]="dieptekstcommando", ["pe"]="فرمان‌متن‌عمیق", ["ro"]="deeptextcommand", }, ["default"]={ ["cs"]="implicitni", ["de"]="default", ["en"]="default", ["fr"]="defaut", ["it"]="implicito", ["nl"]="default", ["pe"]="پیش‌فرض", ["ro"]="implicit", }, ["delay"]={ ["cs"]="prodleva", ["de"]="wartezeit", ["en"]="delay", ["fr"]="delai", ["it"]="attesa", ["nl"]="wachttijd", ["pe"]="تاخیر", ["ro"]="intarziere", }, ["depth"]={ ["cs"]="hloubka", ["de"]="tiefe", ["en"]="depth", ["fr"]="profondeur", ["it"]="profondita", ["nl"]="diepte", ["pe"]="عمق", ["ro"]="inaltime", }, ["depthcorrection"]={ ["cs"]="korekcehloubky", ["de"]="tiefekorrektur", ["en"]="depthcorrection", ["fr"]="correctionprofondeur", ["it"]="correzioneprofondita", ["nl"]="dieptecorrectie", ["pe"]="تصحیح‌عمق", ["ro"]="corectieadancime", }, ["direction"]={ ["cs"]="smer", ["de"]="richtung", ["en"]="direction", ["fr"]="direction", ["it"]="direzione", ["nl"]="richting", ["pe"]="جهت", ["ro"]="directie", }, ["directory"]={ ["cs"]="adresar", ["de"]="verzeichnis", ["en"]="directory", ["fr"]="repertoire", ["it"]="directory", ["nl"]="directory", ["pe"]="پوشه", ["ro"]="director", }, ["display"]={ ["cs"]="obrazovka", ["de"]="bildschirm", ["en"]="display", ["fr"]="affichage", ["it"]="display", ["nl"]="scherm", ["pe"]="نمایش", ["ro"]="display", }, ["mask"]={ ["en"]="mask", ["nl"]="masker", }, ["distance"]={ ["cs"]="vzdalenost", ["de"]="abstand", ["en"]="distance", ["fr"]="distance", ["it"]="distanza", ["nl"]="afstand", ["pe"]="فاصله", ["ro"]="distanta", }, ["dot"]={ ["cs"]="tecka", ["de"]="punkt", ["en"]="dot", ["fr"]="point", ["it"]="punto", ["nl"]="punt", ["pe"]="نقطه", ["ro"]="punct", }, ["doublesided"]={ ["cs"]="oboustranne", ["de"]="doppelseitig", ["en"]="doublesided", ["fr"]="rectoverso", ["it"]="doppiafaccia", ["nl"]="dubbelzijdig", ["pe"]="دورو", ["ro"]="douafete", }, ["dummy"]={ ["cs"]="dummy", ["de"]="dummy", ["en"]="dummy", ["fr"]="dummy", ["it"]="dummy", ["nl"]="dummy", ["pe"]="مصنوعی", ["ro"]="dummy", }, ["dx"]={ ["cs"]="dx", ["de"]="dx", ["en"]="dx", ["fr"]="dx", ["it"]="dx", ["nl"]="dx", ["pe"]="dx", ["ro"]="dx", }, ["dy"]={ ["cs"]="dy", ["de"]="dy", ["en"]="dy", ["fr"]="dy", ["it"]="dy", ["nl"]="dy", ["pe"]="dy", ["ro"]="dy", }, ["edge"]={ ["cs"]="hrana", ["de"]="kante", ["en"]="edge", ["fr"]="bord", ["it"]="bordo", ["nl"]="rand", ["pe"]="لبه", ["ro"]="bordura", }, ["edgedistance"]={ ["cs"]="vzdalenosthrany", ["de"]="kantenabstand", ["en"]="edgedistance", ["fr"]="distancebord", ["it"]="distanzabordo", ["nl"]="randafstand", ["pe"]="فاصله‌لبه", ["ro"]="distantabordura", }, ["empty"]={ ["cs"]="prazdne", ["de"]="leer", ["en"]="empty", ["fr"]="vide", ["it"]="vuoto", ["nl"]="leeg", ["pe"]="تهی", ["ro"]="gol", }, ["equalheight"]={ ["cs"]="equalheight", ["de"]="equalheight", ["en"]="equalheight", ["fr"]="equalheight", ["it"]="equalheight", ["nl"]="equalheight", ["pe"]="ارتفاع‌یکسان", ["ro"]="equalheight", }, ["equalwidth"]={ ["cs"]="equalwidth", ["de"]="equalwidth", ["en"]="equalwidth", ["fr"]="equalwidth", ["it"]="equalwidth", ["nl"]="equalwidth", ["pe"]="عرض‌یکسان", ["ro"]="equalwidth", }, ["escape"]={ ["cs"]="escape", ["de"]="escape", ["en"]="escape", ["fr"]="escape", ["it"]="escape", ["nl"]="escape", ["pe"]="فرار", ["ro"]="escape", }, ["evenmargin"]={ ["cs"]="sudamarginalie", ["de"]="geraderand", ["en"]="evenmargin", ["fr"]="margepaire", ["it"]="marginepari", ["nl"]="evenmarge", ["pe"]="حاشیه‌زوج", ["ro"]="marginepara", }, ["expansion"]={ ["cs"]="expanzen", ["de"]="expansion", ["en"]="expansion", ["fr"]="expansion", ["it"]="espansione", ["nl"]="expansie", ["pe"]="گسترش", ["ro"]="expansiune", }, ["extras"]={ ["cs"]="extras", ["de"]="extras", ["en"]="extras", ["fr"]="extras", ["it"]="extras", ["nl"]="extras", ["pe"]="extras", ["ro"]="extras", }, ["factor"]={ ["cs"]="faktor", ["de"]="faktor", ["en"]="factor", ["fr"]="facteur", ["it"]="fattore", ["nl"]="factor", ["pe"]="عامل", ["ro"]="factor", }, ["fallback"]={ ["cs"]="fallback", ["de"]="fallback", ["en"]="fallback", ["fr"]="fallback", ["it"]="fallback", ["nl"]="terugval", ["pe"]="عقب‌ریختن", ["ro"]="fallback", }, ["family"]={ ["cs"]="rodina", ["de"]="familie", ["en"]="family", ["fr"]="famille", ["it"]="famiglia", ["nl"]="soort", ["pe"]="خانواده", ["ro"]="familie", }, ["fieldbackgroundcolor"]={ ["cs"]="barvapozadipole", ["de"]="feldhintergrundfarbe", ["en"]="fieldbackgroundcolor", ["fr"]="couleurarrierreplanchamp", ["it"]="coloresfondocampo", ["nl"]="veldachtergrondkleur", ["pe"]="رنگ‌پس‌زمینه‌میدان", ["ro"]="culoarefundalcamp", }, ["fieldframecolor"]={ ["cs"]="barvarameckupole", ["de"]="feldrahmenfarbe", ["en"]="fieldframecolor", ["fr"]="couleurcadrechamp", ["it"]="colorecornicecampo", ["nl"]="veldkaderkleur", ["pe"]="رنگ‌قالب‌میدان", ["ro"]="culoareframecamp", }, ["fieldlayer"]={ ["cs"]="fieldlayer", ["de"]="fieldlayer", ["en"]="fieldlayer", ["fr"]="calquechamp", ["it"]="fieldlayer", ["nl"]="veldlaag", ["pe"]="لایه‌میدان", ["ro"]="fieldlayer", }, ["fieldoffset"]={ ["cs"]="offsetpole", ["de"]="feldoffset", ["en"]="fieldoffset", ["fr"]="offsetchamp", ["it"]="offsetcampo", ["nl"]="veldoffset", ["pe"]="آفست‌میدان", ["ro"]="offsetcamp", }, ["file"]={ ["cs"]="soubor", ["de"]="datei", ["en"]="file", ["fr"]="fichier", ["it"]="file", ["nl"]="file", ["pe"]="پرونده", ["ro"]="fisier", }, ["filtercommand"]={ ["en"]="filtercommand", }, ["availablewidth"]={ ["en"]="availablewidth", ["nl"]="beschikbarebreedte", }, ["availableheight"]={ ["en"]="availableheight", ["nl"]="beschikbarehoogte", }, ["focus"]={ ["cs"]="zaostreni", ["de"]="focus", ["en"]="focus", ["fr"]="focus", ["it"]="focus", ["nl"]="focus", ["pe"]="تمرکز", ["ro"]="focus", }, ["firstpage"]={ ["cs"]="prvnistranka", ["de"]="ersteseite", ["en"]="firstpage", ["fr"]="premierepage", ["it"]="primapagina", ["nl"]="eerstepagina", ["pe"]="صفحه‌اول", ["ro"]="primapagina", }, ["focusin"]={ ["cs"]="focusin", ["de"]="focusin", ["en"]="focusin", ["fr"]="focusin", ["it"]="focusin", ["nl"]="focusin", ["pe"]="تمرکزدرون", ["ro"]="focusin", }, ["focusout"]={ ["cs"]="focusout", ["de"]="focusout", ["en"]="focusout", ["fr"]="focusout", ["it"]="focusout", ["nl"]="focusuit", ["pe"]="تمرکزبیرون", ["ro"]="focusout", }, ["footer"]={ ["cs"]="upati", ["de"]="fusszeile", ["en"]="footer", ["fr"]="pdp", ["it"]="piedipagina", ["nl"]="voet", ["pe"]="ته‌برگ", ["ro"]="subsol", }, ["footerdistance"]={ ["cs"]="vzdalenostupati", ["de"]="fusszeilenabstand", ["en"]="footerdistance", ["fr"]="dsitancepdp", ["it"]="distanzapdp", ["nl"]="voetafstand", ["pe"]="فاصله‌ته‌برگ", ["ro"]="distantasubsol", }, ["footerstate"]={ ["cs"]="statusupati", ["de"]="fusszeilenstatus", ["en"]="footerstate", ["fr"]="etatpdp", ["it"]="statopdp", ["nl"]="voetstatus", ["pe"]="وضعیت‌ته‌برگ", ["ro"]="staresubsol", }, ["foregroundcolor"]={ ["cs"]="foregroundcolor", ["de"]="foregroundcolor", ["en"]="foregroundcolor", ["fr"]="couleurpremierplan", ["it"]="coloreprimopiano", ["nl"]="voorgrondkleur", ["pe"]="رنگ‌پیش‌زمینه", ["ro"]="foregroundcolor", }, ["force"]={ ["cs"]="sila", ["de"]="zwinge", ["en"]="force", ["fr"]="force", ["it"]="forza", ["nl"]="forceer", ["pe"]="اجبار", ["ro"]="fortat", }, ["foregroundstyle"]={ ["cs"]="foregroundstyle", ["de"]="foregroundstyle", ["en"]="foregroundstyle", ["fr"]="stylepremierplan", ["it"]="foregroundstyle", ["nl"]="voorgrondletter", ["pe"]="سبک‌پیش‌زمینه", ["ro"]="foregroundstyle", }, ["format"]={ ["cs"]="formatovat", ["de"]="formatieren", ["en"]="format", ["fr"]="formatter", ["it"]="format", ["nl"]="formatteer", ["pe"]="شمایل", ["ro"]="format", }, ["frame"]={ ["cs"]="ramecek", ["de"]="rahmen", ["en"]="frame", ["fr"]="cadre", ["it"]="cornice", ["nl"]="kader", ["pe"]="قالب", ["ro"]="frame", }, ["framecolor"]={ ["cs"]="barvaramecku", ["de"]="rahmenfarbe", ["en"]="framecolor", ["fr"]="couleurcadre", ["it"]="colorecornice", ["nl"]="kaderkleur", ["pe"]="رنگ‌قالب", ["ro"]="culoareframe", }, ["framecorner"]={ ["cs"]="rohramecku", ["de"]="rahmenwinkel", ["en"]="framecorner", ["fr"]="coincadre", ["it"]="angolocornice", ["nl"]="kaderhoek", ["pe"]="گوشه‌قالب", ["ro"]="coltframe", }, ["framedepth"]={ ["cs"]="hloubkaramecku", ["de"]="rahmentiefe", ["en"]="framedepth", ["fr"]="profondeurcadre", ["it"]="profonditacornice", ["nl"]="kaderdiepte", ["pe"]="عمق‌قالب", ["ro"]="adancimeframe", }, ["frameoffset"]={ ["cs"]="offsetramecku", ["de"]="rahmenoffset", ["en"]="frameoffset", ["fr"]="decalagecadre", ["it"]="offsetcornice", ["nl"]="kaderoffset", ["pe"]="آفست‌قالب", ["ro"]="offsetframe", }, ["frameradius"]={ ["cs"]="polomerramecku", ["de"]="rahmenradius", ["en"]="frameradius", ["fr"]="rayoncadre", ["it"]="raggiocornice", ["nl"]="kaderstraal", ["pe"]="شعاع‌قالب", ["ro"]="razaframe", }, ["frames"]={ ["cs"]="ramecky", ["de"]="umrahmen", ["en"]="frames", ["fr"]="cadres", ["it"]="cornici", ["nl"]="hokjes", ["pe"]="قالبها", ["ro"]="frames", }, ["from"]={ ["cs"]="z", ["de"]="von", ["en"]="from", ["fr"]="de", ["it"]="da", ["nl"]="van", ["pe"]="از", ["ro"]="dela", }, ["get"]={ ["cs"]="ziskat", ["de"]="hole", ["en"]="get", ["fr"]="obtient", ["it"]="prendi", ["nl"]="haal", ["pe"]="بگیر", ["ro"]="adu", }, ["global"]={ ["cs"]="globalne", ["de"]="global", ["en"]="global", ["fr"]="global", ["it"]="globale", ["nl"]="globaal", ["pe"]="سراسری", ["ro"]="global", }, ["grid"]={ ["cs"]="mrizka", ["de"]="gritter", ["en"]="grid", ["fr"]="grille", ["it"]="griglia", ["nl"]="grid", ["pe"]="توری", ["ro"]="grid", }, ["hang"]={ ["cs"]="zaveseni", ["de"]="haengend", ["en"]="hang", ["fr"]="suspend", ["it"]="sospendi", ["nl"]="hang", ["pe"]="بیاویز", ["ro"]="suspenda", }, ["headcolor"]={ ["cs"]="barvahlavicky", ["de"]="kopffarbe", ["en"]="headcolor", ["fr"]="couleurtete", ["it"]="coloretesta", ["nl"]="kopkleur", ["pe"]="رنگ‌سر", ["ro"]="culoaretitlu", }, ["headcommand"]={ ["cs"]="headcommand", ["de"]="headcommand", ["en"]="headcommand", ["fr"]="commandetete", ["it"]="headcommand", ["nl"]="kopcommando", ["pe"]="فرمان‌سر", ["ro"]="headcommand", }, ["headconversion"]={ ["cs"]="konverzehlavicky", ["de"]="headconversion", ["en"]="headconversion", ["fr"]="conversiontete", ["it"]="conversionetesta", ["nl"]="kopconversie", ["pe"]="تبدیل‌سر", ["ro"]="conversietitlu", }, ["header"]={ ["cs"]="zahlavi", ["de"]="kopfzeile", ["en"]="header", ["fr"]="entete", ["it"]="intestazione", ["nl"]="hoofd", ["pe"]="سربرگ", ["ro"]="antet", }, ["headerdistance"]={ ["cs"]="vzdalenostzahlavi", ["de"]="kopfzeilenabstand", ["en"]="headerdistance", ["fr"]="distanceentete", ["it"]="distanzaintestazione", ["nl"]="hoofdafstand", ["pe"]="فاصله‌سربرگ", ["ro"]="distantaantet", }, ["headerstate"]={ ["cs"]="statuszahlavi", ["de"]="kopfzeilenstatus", ["en"]="headerstate", ["fr"]="etatentete", ["it"]="statointestazione", ["nl"]="hoofdstatus", ["pe"]="وضعیت‌سربرگ", ["ro"]="stareantet", }, ["headlabel"]={ ["cs"]="popisekhlavicky", ["de"]="headlabel", ["en"]="headlabel", ["fr"]="etiquettetete", ["it"]="etichettatesta", ["nl"]="koplabel", ["pe"]="برچسب‌سر", ["ro"]="etichetatitlu", }, ["headnumber"]={ ["cs"]="cislonadpisu", ["de"]="kopfnummer", ["en"]="headnumber", ["fr"]="numerotete", ["it"]="numerotesta", ["nl"]="kopnummer", ["pe"]="شماره‌سر", ["ro"]="numartitlu", }, ["headstyle"]={ ["cs"]="stylhlavicky", ["de"]="kopfstil", ["en"]="headstyle", ["fr"]="styletete", ["it"]="stiletesta", ["nl"]="kopletter", ["pe"]="سبک‌سر", ["ro"]="stiltitlu", }, ["height"]={ ["cs"]="vyska", ["de"]="hoehe", ["en"]="height", ["fr"]="hauteur", ["it"]="altezza", ["nl"]="hoogte", ["pe"]="ارتفاع", ["ro"]="inaltime", }, ["hfactor"]={ ["cs"]="vfaktor", ["de"]="hfaktor", ["en"]="hfactor", ["fr"]="facteurhauteur", ["it"]="hfactor", ["nl"]="hfactor", ["pe"]="عامل‌ارتفاع", ["ro"]="hfactor", }, ["hfil"]={ ["cs"]="hfil", ["de"]="hfil", ["en"]="hfil", ["fr"]="hfil", ["it"]="hfil", ["nl"]="hfil", ["pe"]="پرکردن‌ارتفاع", ["ro"]="hfil", }, ["hidenumber"]={ ["en"]="hidenumber", }, ["hoffset"]={ ["cs"]="hoffset", ["de"]="hoffset", ["en"]="hoffset", ["fr"]="decalagehauteur", ["it"]="hoffset", ["nl"]="hoffset", ["pe"]="آفست‌ا", ["ro"]="hoffset", }, ["horoffset"]={ ["cs"]="horoffset", ["de"]="rumpfabstand", ["en"]="horoffset", ["fr"]="horoffset", ["it"]="horoffset", ["nl"]="rugoffset", ["pe"]="آفست‌افق", ["ro"]="offsetoriz", }, ["hyphen"]={ ["cs"]="hyphen", ["de"]="hyphen", ["en"]="hyphen", ["fr"]="hyphen", ["it"]="hyphen", ["nl"]="hyphen", ["pe"]="شکستن", ["ro"]="hyphen", }, ["icommand"]={ ["cs"]="iprikaz", ["de"]="ibefehl", ["en"]="icommand", ["fr"]="icommande", ["it"]="icomando", ["nl"]="icommando", ["pe"]="icommand", ["ro"]="comandai", }, ["in"]={ ["cs"]="v", ["de"]="in", ["en"]="in", ["fr"]="in", ["it"]="in", ["nl"]="in", ["pe"]="درون", ["ro"]="in", }, ["inbetween"]={ ["cs"]="mezi", ["de"]="zwischen", ["en"]="inbetween", ["fr"]="entre", ["it"]="tra", ["nl"]="tussen", ["pe"]="دربین", ["ro"]="intre", }, ["increment"]={ ["cs"]="zvysit", ["de"]="erhoehen", ["en"]="increment", ["fr"]="incremente", ["it"]="incremento", ["nl"]="verhoog", ["pe"]="افزایش", ["ro"]="increment", }, ["incrementnumber"]={ ["cs"]="zvysujicicislo", ["de"]="nummererhoehen", ["en"]="incrementnumber", ["fr"]="incrementenumero", ["it"]="incrementanumero", ["nl"]="verhoognummer", ["pe"]="شماره‌افزایش", ["ro"]="numarincrement", }, ["indenting"]={ ["cs"]="odsazovani", ["de"]="einziehen", ["en"]="indenting", ["fr"]="composeenalinea", ["it"]="rientro", ["nl"]="inspringen", ["pe"]="تورفتگی", ["ro"]="aliniat", }, ["indentnext"]={ ["cs"]="odsadpristi", ["de"]="ziehefolgendeein", ["en"]="indentnext", ["fr"]="indentesuivant", ["it"]="rientrasuccessivo", ["nl"]="springvolgendein", ["pe"]="متن‌تورفته", ["ro"]="aliniaturmator", }, ["indicator"]={ ["cs"]="indikator", ["de"]="indikator", ["en"]="indicator", ["fr"]="indicateur", ["it"]="indicatore", ["nl"]="aanduiding", ["pe"]="اندیکاتور", ["ro"]="indicator", }, ["inner"]={ ["cs"]="vnitrni", ["de"]="innen", ["en"]="inner", ["fr"]="interieur", ["it"]="interno", ["nl"]="binnen", ["pe"]="داخلی", ["ro"]="intern", }, ["innermargin"]={ ["cs"]="innermargin", ["de"]="innermargin", ["en"]="innermargin", ["fr"]="margeinterieure", ["it"]="margineinterno", ["nl"]="binnenmarge", ["pe"]="حاشیه‌داخلی", ["ro"]="innermargin", }, ["inputfile"]={ ["cs"]="inputfile", ["de"]="inputfile", ["en"]="inputfile", ["fr"]="fichierentree", ["it"]="inputfile", ["nl"]="inputfile", ["pe"]="پرونده‌ورودی", ["ro"]="inputfile", }, ["interaction"]={ ["cs"]="interakce", ["de"]="interaktion", ["en"]="interaction", ["fr"]="interaction", ["it"]="interazione", ["nl"]="interactie", ["pe"]="پانل", ["ro"]="interactiune", }, ["interlinespace"]={ ["cs"]="meziradkovamezera", ["de"]="zeilenabstande", ["en"]="interlinespace", ["fr"]="espaceinterligne", ["it"]="interlinea", ["nl"]="interlinie", ["pe"]="فضای‌بین‌خط", ["ro"]="spatiereinterliniara", }, ["internalgrid"]={ ["nl"]="interngrid", ["en"]="internalgrid", }, ["itemalign"]={ ["cs"]="itemalign", ["de"]="itemalign", ["en"]="itemalign", ["fr"]="itemalign", ["it"]="itemalign", ["nl"]="itemuitlijnen", ["pe"]="تنظیم‌آیتم", ["ro"]="itemalign", }, ["items"]={ ["cs"]="polozky", ["de"]="posten", ["en"]="items", ["fr"]="elements", ["it"]="elementi", ["nl"]="items", ["pe"]="آیتمها", ["ro"]="elemente", }, ["ken"]={ ["cs"]="ken", ["de"]="ken", ["en"]="ken", ["fr"]="ken", ["it"]="ken", ["nl"]="ken", ["pe"]="ken", ["ro"]="ken", }, ["keyexpansion"]={ ["cs"]="keyexpansion", ["de"]="keyexpansion", ["en"]="keyexpansion", ["fr"]="keyexpansion", ["it"]="keyexpansion", ["nl"]="sleutelexpansie", ["pe"]="گسترش‌کلید", ["ro"]="keyexpansion", }, ["keyword"]={ ["cs"]="keyword", ["de"]="keyword", ["en"]="keyword", ["fr"]="motcle", ["it"]="parolachiave", ["nl"]="trefwoord", ["pe"]="کلید‌واژه", ["ro"]="keyword", }, ["label"]={ ["cs"]="popisek", ["de"]="label", ["en"]="label", ["fr"]="etiquette", ["it"]="etichetta", ["nl"]="label", ["pe"]="برچسب", ["ro"]="eticheta", }, ["lastpage"]={ ["cs"]="poslednistrana", ["de"]="letzteseite", ["en"]="lastpage", ["fr"]="dernierepage", ["it"]="ultimapagina", ["nl"]="laatstepagina", ["pe"]="صفحه‌آخر", ["ro"]="ultimapagina", }, ["left"]={ ["cs"]="vlevo", ["de"]="links", ["en"]="left", ["fr"]="gauche", ["it"]="sinistra", ["nl"]="links", ["pe"]="چپ", ["ro"]="stanga", }, ["leftcolor"]={ ["cs"]="barvavlevo", ["de"]="linkerfarbe", ["en"]="leftcolor", ["fr"]="couleurgauche", ["it"]="coloresinistra", ["nl"]="linkerkleur", ["pe"]="رنگ‌چپ", ["ro"]="culoarestanga", }, ["leftcompoundhyphen"]={ ["cs"]="leftcompoundhyphen", ["de"]="leftcompoundhyphen", ["en"]="leftcompoundhyphen", ["fr"]="leftcompoundhyphen", ["it"]="leftcompoundhyphen", ["nl"]="linkerkoppelteken", ["pe"]="leftcompoundhyphen", ["ro"]="leftcompoundhyphen", }, ["leftedge"]={ ["cs"]="levahrana", ["de"]="linkekante", ["en"]="leftedge", ["fr"]="bordgauche", ["it"]="bordosinistro", ["nl"]="linkerrand", ["pe"]="لبه‌چپ", ["ro"]="bordurastanga", }, ["leftedgedistance"]={ ["cs"]="vzdalenostlevehrany", ["de"]="linkerkantenabstand", ["en"]="leftedgedistance", ["fr"]="distancebordgauche", ["it"]="distanzabordosinistro", ["nl"]="linkerrandafstand", ["pe"]="فاصله‌لبه‌چپ", ["ro"]="distantabordurastanga", }, ["leftframe"]={ ["cs"]="ramecekvlevo", ["de"]="linkerrahmen", ["en"]="leftframe", ["fr"]="cadregauche", ["it"]="cornicesinistra", ["nl"]="linkerkader", ["pe"]="قالب‌چپ", ["ro"]="framestanga", }, ["lefthyphen"]={ ["cs"]="lefthyphen", ["de"]="lefthyphen", ["en"]="lefthyphen", ["fr"]="lefthyphen", ["it"]="lefthyphen", ["nl"]="lefthyphen", ["pe"]="شکست‌چپ", ["ro"]="lefthyphen", }, ["leftmargin"]={ ["cs"]="levyokraj", ["de"]="linkerrand", ["en"]="leftmargin", ["fr"]="margegauche", ["it"]="marginesinistro", ["nl"]="linkermarge", ["pe"]="حاشیه‌چپ", ["ro"]="marginestanga", }, ["leftmargindistance"]={ ["cs"]="vzdalenostlevehookraje", ["de"]="linkerrandabstand", ["en"]="leftmargindistance", ["fr"]="distancemargegauche", ["it"]="distanzamarginesinistro", ["nl"]="linkermargeafstand", ["pe"]="فاصله‌حاشیه‌چپ", ["ro"]="distantamarginestanga", }, ["leftoffset"]={ ["cs"]="levyoffset", ["de"]="linkeroffset", ["en"]="leftoffset", ["fr"]="decalagegauche", ["it"]="offsetsinistro", ["nl"]="linkeroffset", ["pe"]="آفست‌چپ", ["ro"]="offsetstanga", }, ["leftquotation"]={ ["cs"]="citacevlevo", ["de"]="linkerzitat", ["en"]="leftquotation", ["fr"]="citationgauche", ["it"]="citazionesinistra", ["nl"]="linkercitaat", ["pe"]="نقل‌قول‌چپ", ["ro"]="citatstanga", }, ["leftquote"]={ ["cs"]="citovatvlevo", ["de"]="linkerzitieren", ["en"]="leftquote", ["fr"]="citergauche", ["it"]="menzionesinistra", ["nl"]="linkerciteer", ["pe"]="نقل‌چپ", ["ro"]="minicitatstanga", }, ["leftsentence"]={ ["cs"]="vetavlevo", ["de"]="linkersatz", ["en"]="leftsentence", ["fr"]="phrasegauche", ["it"]="frasesinistra", ["nl"]="linkerzin", ["pe"]="جمله‌چپ", ["ro"]="propozitiestanga", }, ["leftspeech"]={ ["cs"]="leftspeech", ["de"]="leftspeech", ["en"]="leftspeech", ["fr"]="leftspeech", ["it"]="leftspeech", ["nl"]="linkeruitspraak", ["pe"]="سخنرانی‌چپ", ["ro"]="leftspeech", }, ["leftstyle"]={ ["cs"]="stylvlevo", ["de"]="linkerstil", ["en"]="leftstyle", ["fr"]="leftstyle", ["it"]="stilesinistra", ["nl"]="linkerletter", ["pe"]="سبک‌چپ", ["ro"]="stilstanga", }, ["leftsubsentence"]={ ["cs"]="podvetavlevo", ["de"]="linkersubsatz", ["en"]="leftsubsentence", ["fr"]="sousphrasegauche", ["it"]="sottofrasesinistra", ["nl"]="linkersubzin", ["pe"]="زیرجمله‌چپ", ["ro"]="subpropozitiestanga", }, ["lefttext"]={ ["cs"]="textvlevo", ["de"]="linkertext", ["en"]="lefttext", ["fr"]="textegauche", ["it"]="testosinistro", ["nl"]="linkertekst", ["pe"]="متن‌چپ", ["ro"]="textstanga", }, ["leftwidth"]={ ["cs"]="sirkavlevo", ["de"]="linkerbreite", ["en"]="leftwidth", ["fr"]="largeurgauche", ["it"]="ampiezzasinistra", ["nl"]="linkerbreedte", ["pe"]="عرض‌خط", ["ro"]="latimestanga", }, ["level"]={ ["cs"]="uroven", ["de"]="niveau", ["en"]="level", ["fr"]="niveau", ["it"]="livello", ["nl"]="niveau", ["pe"]="مرحله", ["ro"]="nivel", }, ["levels"]={ ["cs"]="urovne", ["de"]="niveaus", ["en"]="levels", ["fr"]="niveaux", ["it"]="livelli", ["nl"]="niveaus", ["pe"]="مرحله‌ها", ["ro"]="nivele", }, ["limittext"]={ ["cs"]="limittext", ["de"]="limittext", ["en"]="limittext", ["fr"]="limittext", ["it"]="limittext", ["nl"]="limiettekst", ["pe"]="مرزمتن", ["ro"]="limittext", }, ["line"]={ ["cs"]="radek", ["de"]="zeile", ["en"]="line", ["fr"]="ligne", ["it"]="riga", ["nl"]="regel", ["pe"]="خط", ["ro"]="linie", }, ["linecorrection"]={ ["cs"]="korekceradku", ["de"]="zeilekorrektur", ["en"]="linecorrection", ["fr"]="correctionligne", ["it"]="correzioneriga", ["nl"]="regelcorrectie", ["pe"]="تصحیح‌خط", ["ro"]="corectielinie", }, ["lines"]={ ["cs"]="radky", ["de"]="zeilen", ["en"]="lines", ["fr"]="lignes", ["it"]="righe", ["nl"]="regels", ["pe"]="خطها", ["ro"]="linii", }, ["list"]={ ["cs"]="seznam", ["de"]="liste", ["en"]="list", ["fr"]="liste", ["it"]="elenco", ["nl"]="lijst", ["pe"]="لیست", ["ro"]="lista", }, ["listtext"]={ ["cs"]="listtext", ["de"]="listtext", ["en"]="listtext", ["fr"]="texteliste", ["it"]="listtext", ["nl"]="lijsttekst", ["pe"]="متن‌لیست", ["ro"]="listtext", }, ["local"]={ ["cs"]="lokalne", ["de"]="lokal", ["en"]="local", ["fr"]="local", ["it"]="locale", ["nl"]="lokaal", ["pe"]="موضعی", ["ro"]="local", }, ["location"]={ ["cs"]="misto", ["de"]="platz", ["en"]="location", ["fr"]="emplacement", ["it"]="luogo", ["nl"]="plaats", ["pe"]="مکان", ["ro"]="locatie", }, ["logo"]={ ["cs"]="logo", ["de"]="logo", ["en"]="logo", ["fr"]="logo", ["it"]="logo", ["nl"]="logo", ["pe"]="آرم", ["ro"]="logo", }, ["logos"]={ ["cs"]="loga", ["de"]="logos", ["en"]="logos", ["fr"]="logos", ["it"]="loghi", ["nl"]="logos", ["pe"]="آرمها", ["ro"]="logos", }, ["marcolor"]={ ["cs"]="barvaznacky", ["de"]="beschrfarbe", ["en"]="marcolor", ["fr"]="couleurmarquage", ["it"]="coloremarcatura", ["nl"]="markleur", ["pe"]="رنگ‌حاش", ["ro"]="culoaremarcaj", }, ["margin"]={ ["cs"]="marginalie", ["de"]="marginalie", ["en"]="margin", ["fr"]="marge", ["it"]="margine", ["nl"]="marge", ["pe"]="حاشیه", ["ro"]="margine", }, ["margindistance"]={ ["cs"]="vzdalenostokraje", ["de"]="marginalabstand", ["en"]="margindistance", ["fr"]="distancemarge", ["it"]="distanzamargine", ["nl"]="margeafstand", ["pe"]="فاصله‌حاشیه", ["ro"]="distantamargine", }, ["marginedge"]={ ["cs"]="textovahrana", ["de"]="marginalkante", ["en"]="marginedge", ["fr"]="bordmarge", ["it"]="bordomargine", ["nl"]="kantlijn", ["pe"]="لبه‌حاشیه", ["ro"]="coltbordura", }, ["marginedgetext"]={ ["cs"]="textmarginalnihookraje", ["de"]="marginalkantetext", ["en"]="marginedgetext", ["fr"]="textebordmarge", ["it"]="testobordomargine", ["nl"]="kantlijntekst", ["pe"]="متن‌لبه‌حاشیه", ["ro"]="textcoltbordura", }, ["margintext"]={ ["cs"]="textmarginalie", ["de"]="marginaltext", ["en"]="margintext", ["fr"]="textemarge", ["it"]="testomargine", ["nl"]="margetekst", ["pe"]="متن‌حاشیه", ["ro"]="textmargine", }, ["marking"]={ ["cs"]="znaceni", ["de"]="beschriftung", ["en"]="marking", ["fr"]="marquage", ["it"]="marcatura", ["nl"]="markering", ["pe"]="نشانه‌گذاری", ["ro"]="marcaje", }, ["marstyle"]={ ["cs"]="stylsnacky", ["de"]="beschrstil", ["en"]="marstyle", ["fr"]="stylemarquage", ["it"]="stilemarcatura", ["nl"]="marletter", ["pe"]="سبک‌حاش", ["ro"]="stilmarcaj", }, ["max"]={ ["cs"]="max", ["de"]="max", ["en"]="max", ["fr"]="max", ["it"]="max", ["nl"]="max", ["pe"]="بیشترین", ["ro"]="max", }, ["maxheight"]={ ["cs"]="maxvyska", ["de"]="maxhoehe", ["en"]="maxheight", ["fr"]="hauteurmax", ["it"]="altezzamax", ["nl"]="maxhoogte", ["pe"]="بیشترین‌ارتفاع", ["ro"]="inaltimemaxima", }, ["maxdepth"]={ ["en"]="maxdepth", }, ["maxwidth"]={ ["cs"]="maxsirka", ["de"]="maxbreite", ["en"]="maxwidth", ["fr"]="largeurmax", ["it"]="ampiezzamax", ["nl"]="maxbreedte", ["pe"]="بیشترین‌عرض", ["ro"]="latimemaxima", }, ["menu"]={ ["cs"]="menu", ["de"]="menue", ["en"]="menu", ["fr"]="menu", ["it"]="menu", ["nl"]="menu", ["pe"]="منو", ["ro"]="meniu", }, ["method"]={ ["cs"]="metoda", ["de"]="methode", ["en"]="method", ["fr"]="methode", ["it"]="metodo", ["nl"]="methode", ["pe"]="روش", ["ro"]="metoda", }, ["middle"]={ ["cs"]="stredni", ["de"]="mittig", ["en"]="middle", ["fr"]="milieu", ["it"]="centro", ["nl"]="midden", ["pe"]="میان", ["ro"]="mijloc", }, ["middlespeech"]={ ["cs"]="middlespeech", ["de"]="middlespeech", ["en"]="middlespeech", ["fr"]="middlespeech", ["it"]="middlespeech", ["nl"]="middenuitspraak", ["pe"]="سخنرانی‌میانی", ["ro"]="middlespeech", }, ["middletext"]={ ["cs"]="strednitext", ["de"]="mittigertext", ["en"]="middletext", ["fr"]="textecentre", ["it"]="testocentro", ["nl"]="middentekst", ["pe"]="متن‌میانی", ["ro"]="textmijloc", }, ["midsentence"]={ ["cs"]="midsentence", ["de"]="midsentence", ["en"]="midsentence", ["fr"]="midsentence", ["it"]="midsentence", ["nl"]="middenzin", ["pe"]="جمله‌میانی", ["ro"]="midsentence", }, ["min"]={ ["cs"]="min", ["de"]="min", ["en"]="min", ["fr"]="min", ["it"]="min", ["nl"]="min", ["pe"]="کمترین", ["ro"]="min", }, ["mindepth"]={ ["cs"]="mindepth", ["de"]="mindepth", ["en"]="mindepth", ["fr"]="profondeurmin", ["it"]="mindeoth", ["nl"]="mindiepte", ["pe"]="کمترین‌عمق", ["ro"]="mindepth", }, ["minheight"]={ ["cs"]="minvyska", ["de"]="minhoehe", ["en"]="minheight", ["fr"]="hauteurmin", ["it"]="altezzamin", ["nl"]="minhoogte", ["pe"]="کمترین‌ارتفاع", ["ro"]="inaltimeminima", }, ["minwidth"]={ ["cs"]="minsirka", ["de"]="minbreite", ["en"]="minwidth", ["fr"]="largeurmin", ["it"]="ampiezzamin", ["nl"]="minbreedte", ["pe"]="کمترین‌عرض", ["ro"]="latimeminima", }, ["monthconversion"]={ ["en"]="monthconversion", ["nl"]="maandconversie", }, ["n"]={ ["cs"]="n", ["de"]="n", ["en"]="n", ["fr"]="n", ["it"]="n", ["nl"]="n", ["pe"]="n", ["ro"]="n", }, ["name"]={ ["cs"]="jmeno", ["de"]="name", ["en"]="name", ["fr"]="nom", ["it"]="nome", ["nl"]="naam", ["pe"]="نام", ["ro"]="nume", }, ["nbottom"]={ ["cs"]="nspodek", ["de"]="nunten", ["en"]="nbottom", ["fr"]="ninf", ["it"]="nfondo", ["nl"]="nonder", ["pe"]="nbottom", ["ro"]="njos", }, ["nc"]={ ["cs"]="nc", ["de"]="nc", ["en"]="nc", ["fr"]="nc", ["it"]="nc", ["nl"]="nc", ["pe"]="nc", ["ro"]="nc", }, ["next"]={ ["cs"]="dalsi", ["de"]="folgende", ["en"]="next", ["fr"]="suivant", ["it"]="successivo", ["nl"]="volgende", ["pe"]="بعدی", ["ro"]="urmatorul", }, ["nl"]={ ["cs"]="nl", ["de"]="nl", ["en"]="nl", ["fr"]="nl", ["it"]="nl", ["nl"]="nl", ["pe"]="nl", ["ro"]="nl", }, ["nleft"]={ ["cs"]="nvlevo", ["de"]="nlinks", ["en"]="nleft", ["fr"]="ngauche", ["it"]="nsinistra", ["nl"]="nlinks", ["pe"]="nleft", ["ro"]="nstanga", }, ["nlines"]={ ["cs"]="nradky", ["de"]="zzeile", ["en"]="nlines", ["fr"]="nlignes", ["it"]="nrighe", ["nl"]="nregels", ["pe"]="nlines", ["ro"]="nlinii", }, ["norm"]={ ["cs"]="norm", ["de"]="norm", ["en"]="norm", ["fr"]="norme", ["it"]="norma", ["nl"]="norm", ["pe"]="norm", ["ro"]="norm", }, ["nr"]={ ["cs"]="nr", ["de"]="nr", ["en"]="nr", ["fr"]="nr", ["it"]="nr", ["nl"]="nr", ["pe"]="nr", ["ro"]="nr", }, ["nright"]={ ["cs"]="nvpravo", ["de"]="nrechts", ["en"]="nright", ["fr"]="ndroite", ["it"]="ndestra", ["nl"]="nrechts", ["pe"]="nright", ["ro"]="ndreapta", }, ["ntop"]={ ["cs"]="nvrsek", ["de"]="noben", ["en"]="ntop", ["fr"]="nsup", ["it"]="ncima", ["nl"]="nboven", ["pe"]="ntop", ["ro"]="nsus", }, ["number"]={ ["cs"]="cislo", ["de"]="nummer", ["en"]="number", ["fr"]="numero", ["it"]="numero", ["nl"]="nummer", ["pe"]="شماره", ["ro"]="numar", }, ["numbercolor"]={ ["cs"]="barvacisla", ["de"]="nummernfarbe", ["en"]="numbercolor", ["fr"]="couleurnumero", ["it"]="colorenumero", ["nl"]="nummerkleur", ["pe"]="رنگ‌شماره", ["ro"]="culoarenumar", }, ["numbercommand"]={ ["cs"]="ciselnyprikaz", ["de"]="nummerbefehl", ["en"]="numbercommand", ["fr"]="commandenumero", ["it"]="comandonumero", ["nl"]="nummercommando", ["pe"]="فرمان‌شماره", ["ro"]="comandanumar", }, ["numberconversion"]={ ["en"]="numberconversion", }, ["numberconversionset"]={ ["en"]="numberconversionset", }, ["numberdistance"]={ ["cs"]="numberdistance", ["de"]="numberdistance", ["en"]="numberdistance", ["fr"]="numberdistance", ["it"]="numberdistance", ["nl"]="nummerafstand", ["pe"]="فاصله‌شماره", ["ro"]="numberdistance", }, ["numbering"]={ ["cs"]="cislovani", ["de"]="nummerierung", ["en"]="numbering", ["fr"]="numerotation", ["it"]="numerazione", ["nl"]="nummeren", ["pe"]="شماره‌گذاری", ["ro"]="numerotare", }, ["numberorder"]={ ["en"]="numberorder", }, ["numberprefix"]={ ["en"]="numberprefix", }, ["numbersegments"]={ ["en"]="numbersegments", }, ["numberseparator"]={ ["cs"]="oddelovaccisla", ["de"]="nummernseperator", ["en"]="numberseparator", ["fr"]="separateurnumbero", ["it"]="separatorenumero", ["nl"]="nummerscheider", ["pe"]="جداکننده‌شماره", ["ro"]="separatornumar", }, ["numberseparatorset"]={ ["en"]="numberseparatorset", }, ["numberset"]={ ["en"]="numberset", }, ["numberstopper"]={ ["en"]="numberstopper", }, ["numberstarter"]={ ["en"]="numberstarter", }, ["numberstyle"]={ ["cs"]="stylcisla", ["de"]="nummernstil", ["en"]="numberstyle", ["fr"]="stylenumero", ["it"]="stilenumero", ["nl"]="nummerletter", ["pe"]="سبک‌شماره", ["ro"]="stilnumar", }, ["numberwidth"]={ ["cs"]="numberwidth", ["de"]="numberwidth", ["en"]="numberwidth", ["fr"]="numberwidth", ["it"]="numberwidth", ["nl"]="nummerbreedte", ["pe"]="عرض‌شماره", ["ro"]="numberwidth", }, ["nx"]={ ["cs"]="nx", ["de"]="nx", ["en"]="nx", ["fr"]="nx", ["it"]="nx", ["nl"]="nx", ["pe"]="nx", ["ro"]="nx", }, ["ny"]={ ["cs"]="ny", ["de"]="ny", ["en"]="ny", ["fr"]="ny", ["it"]="ny", ["nl"]="ny", ["pe"]="ny", ["ro"]="ny", }, ["object"]={ ["cs"]="objekt", ["de"]="objekt", ["en"]="object", ["fr"]="objet", ["it"]="oggetto", ["nl"]="object", ["pe"]="شیئ", ["ro"]="obiect", }, ["obstruction"]={ ["cs"]="prekazka", ["de"]="gesperrt", ["en"]="obstruction", ["fr"]="obstruction", ["it"]="ostruzione", ["nl"]="blokkade", ["pe"]="انسداد", ["ro"]="obstructie", }, ["oddmargin"]={ ["cs"]="lichyokraj", ["de"]="ungeraderand", ["en"]="oddmargin", ["fr"]="margepaire", ["it"]="marginedispari", ["nl"]="onevenmarge", ["pe"]="حاشیه‌فرد", ["ro"]="margineimpara", }, ["offset"]={ ["cs"]="offset", ["de"]="offset", ["en"]="offset", ["fr"]="offset", ["it"]="offset", ["nl"]="offset", ["pe"]="آفست", ["ro"]="offset", }, ["loffset"]={ ["en"]="loffset", }, ["roffset"]={ ["en"]="roffset", }, ["toffset"]={ ["en"]="toffset", }, ["boffset"]={ ["en"]="boffset", }, ["openaction"]={ ["cs"]="otevriakci", ["de"]="oeffenaktion", ["en"]="openaction", ["fr"]="actionouverture", ["it"]="azioneapri", ["nl"]="openactie", ["pe"]="عمل‌باز", ["ro"]="actiunedeschidere", }, ["openpageaction"]={ ["cs"]="akceotevrenistranky", ["de"]="openpageaction", ["en"]="openpageaction", ["fr"]="actionouverturepage", ["it"]="azioneapripagina", ["nl"]="openpaginaactie", ["pe"]="عمل‌صفحه‌باز", ["ro"]="actiunedeschiderepagina", }, ["openpage"]={ ["en"]="openpage", ["nl"]="openpagina", }, ["option"]={ ["cs"]="volba", ["de"]="option", ["en"]="option", ["fr"]="option", ["it"]="opzione", ["nl"]="optie", ["pe"]="گزینه", ["ro"]="optiune", }, ["orientation"]={ ["cs"]="orientation", ["de"]="orientation", ["en"]="orientation", ["fr"]="orientation", ["it"]="orientation", ["nl"]="orientatie", ["pe"]="جهت‌دهی", ["ro"]="orientation", }, ["outermargin"]={ ["cs"]="outermargin", ["de"]="outermargin", ["en"]="outermargin", ["fr"]="margeexterieure", ["it"]="margineesterno", ["nl"]="buitenmarge", ["pe"]="حاشیه‌خارجی", ["ro"]="outermargin", }, ["overprint"]={ ["cs"]="overprint", ["de"]="overprint", ["en"]="overprint", ["fr"]="overprint", ["it"]="overprint", ["nl"]="overprint", ["pe"]="overprint", ["ro"]="overprint", }, ["ownnumber"]={ ["cs"]="vlastnicislo", ["de"]="eigenenummer", ["en"]="ownnumber", ["fr"]="numeroproprio", ["it"]="numeroproprio", ["nl"]="eigennummer", ["pe"]="شماره‌خود", ["ro"]="numarpropriu", }, ["page"]={ ["cs"]="stranka", ["de"]="seite", ["en"]="page", ["fr"]="page", ["it"]="pagina", ["nl"]="pagina", ["pe"]="صفحه", ["ro"]="pagina", }, ["pageboundaries"]={ ["cs"]="hranicestranky", ["de"]="seitenbegrenzung", ["en"]="pageboundaries", ["fr"]="limitespage", ["it"]="limitipagina", ["nl"]="paginaovergangen", ["pe"]="مرزهای‌صفحه", ["ro"]="marginipagina", }, ["pagecolor"]={ ["cs"]="barvastranky", ["de"]="seitenfarbe", ["en"]="pagecolor", ["fr"]="couleurpage", ["it"]="colorepagina", ["nl"]="paginakleur", ["pe"]="رنگ‌صفحه", ["ro"]="culoarepagina", }, ["pagecolormodel"]={ ["en"]="pagecolormodel", ["nl"]="paginakleurmodel", }, ["pagecommand"]={ ["cs"]="strankovyprikaz", ["de"]="seitenbefehl", ["en"]="pagecommand", ["fr"]="commandepage", ["it"]="comandopagina", ["nl"]="paginacommando", ["pe"]="فرمان‌صفحه", ["ro"]="comandapagina", }, ["pageconversion"]={ ["en"]="pageconversion", }, ["pageconversionset"]={ ["en"]="pageconversionset", }, ["pagenumber"]={ ["cs"]="cislostranky", ["de"]="seitennummer", ["en"]="pagenumber", ["fr"]="numeropage", ["it"]="numeropagina", ["nl"]="paginanummer", ["pe"]="شماره‌صفحه", ["ro"]="numarpagina", }, ["pageprefix"]={ ["en"]="pageprefix", }, ["pageprefixconnector"]={ ["en"]="pageprefixconnector", }, ["pageprefixconversion"]={ ["en"]="pageprefixconversion", }, ["pageprefixconversionset"]={ ["en"]="pageprefixconversionset", }, ["pageprefixsegments"]={ ["en"]="pageprefixsegments", }, ["pageprefixseparatorset"]={ ["en"]="pageprefixseparatorset", }, ["pageprefixset"]={ ["en"]="pageprefixset", }, ["pageprefixstopper"]={ ["en"]="pageprefixstopper", }, ["pageprefixstarter"]={ ["en"]="pageprefixstarter", }, ["pagesegments"]={ ["en"]="pagesegments", }, ["pageseparatorset"]={ ["en"]="pageseparatorset", }, ["pageset"]={ ["en"]="pageset", }, ["pagestate"]={ ["cs"]="pagestate", ["de"]="pagestate", ["en"]="pagestate", ["fr"]="etatpage", ["it"]="statopagina", ["nl"]="paginastatus", ["pe"]="وضعیت‌صفحه", ["ro"]="pagestate", }, ["pagestopper"]={ ["en"]="pagestopper", }, ["pagestarter"]={ ["en"]="pagestarter", }, ["pagestyle"]={ ["cs"]="stylstranky", ["de"]="seitenstil", ["en"]="pagestyle", ["fr"]="stylepage", ["it"]="stilepagina", ["nl"]="paginaletter", ["pe"]="سبک‌صفحه", ["ro"]="stilpagina", }, ["palet"]={ ["cs"]="paleta", ["de"]="palette", ["en"]="palet", ["fr"]="palette", ["it"]="tavolozza", ["nl"]="palet", ["pe"]="لوح", ["ro"]="paleta", }, ["paper"]={ ["cs"]="papir", ["de"]="papier", ["en"]="paper", ["fr"]="papier", ["it"]="carta", ["nl"]="papier", ["pe"]="برگ", ["ro"]="hartie", }, ["paragraph"]={ ["cs"]="odstavec", ["de"]="absatz", ["en"]="paragraph", ["fr"]="paragraphe", ["it"]="capoverso", ["nl"]="alinea", ["pe"]="پاراگراف", ["ro"]="paragraf", }, ["place"]={ ["cs"]="umistit", ["de"]="platziere", ["en"]="place", ["fr"]="place", ["it"]="metti", ["nl"]="plaatsen", ["pe"]="بگذار", ["ro"]="pune", }, ["placehead"]={ ["cs"]="umistihlavicku", ["de"]="setzekopf", ["en"]="placehead", ["fr"]="placetete", ["it"]="mettitesta", ["nl"]="plaatskop", ["pe"]="بگذارسر", ["ro"]="punetitlu", }, ["placestopper"]={ ["cs"]="predelmista", ["de"]="setzetrenner", ["en"]="placestopper", ["fr"]="emplacementstopper", ["it"]="mettistopper", ["nl"]="plaatsafsluiter", ["pe"]="بگذارایست", ["ro"]="punestopper", }, ["position"]={ ["cs"]="position", ["de"]="position", ["en"]="position", ["fr"]="position", ["it"]="posizione", ["nl"]="positie", ["pe"]="موقعیت", ["ro"]="pozitie", }, ["prefix"]={ ["cs"]="prefix", ["de"]="prefix", ["en"]="prefix", ["fr"]="prefixe", ["it"]="prefisso", ["nl"]="prefix", ["pe"]="پیشوند", ["ro"]="prefix", }, ["prefixconnector"]={ ["en"]="prefixconnector", }, ["prefixconversion"]={ ["en"]="prefixconversion", }, ["prefixconversionset"]={ ["en"]="prefixconversionset", }, ["prefixsegments"]={ ["en"]="prefixsegments", }, ["prefixseparatorset"]={ ["en"]="prefixseparatorset", }, ["prefixset"]={ ["en"]="prefixset", }, ["prefixstopper"]={ ["en"]="prefixstopper", }, ["prefixstarter"]={ ["en"]="prefixstarter", }, ["preset"]={ ["cs"]="prednastaveni", ["de"]="voreinstellung", ["en"]="preset", ["fr"]="prereglage", ["it"]="preimpostato", ["nl"]="preset", ["pe"]="preset", ["ro"]="preset", }, ["preview"]={ ["cs"]="nahled", ["de"]="vorschau", ["en"]="preview", ["fr"]="previsualisation", ["it"]="anteprima", ["nl"]="preview", ["pe"]="پیش‌دید", ["ro"]="previzualizare", }, ["previous"]={ ["cs"]="predchozi", ["de"]="vorige", ["en"]="previous", ["fr"]="precedent", ["it"]="precedente", ["nl"]="vorige", ["pe"]="قبلی", ["ro"]="precendent", }, ["previousnumber"]={ ["cs"]="predchozicislo", ["de"]="vorigenummer", ["en"]="previousnumber", ["fr"]="numeroprecedent", ["it"]="numeroprecedente", ["nl"]="vorigenummer", ["pe"]="شماره‌قبلی", ["ro"]="numarprecedent", }, ["printable"]={ ["cs"]="tisknutelne", ["de"]="druckbar", ["en"]="printable", ["fr"]="editable", ["it"]="stampabile", ["nl"]="printbaar", -- afdrukbaar ["pe"]="قابل‌چاپ", ["ro"]="tiparibil", }, ["process"]={ ["cs"]="process", ["de"]="process", ["en"]="process", ["fr"]="process", ["it"]="process", ["nl"]="proces", ["pe"]="پردازش", ["ro"]="process", }, ["profile"]={ ["en"]="profile", }, ["radius"]={ ["cs"]="polomer", ["de"]="radius", ["en"]="radius", ["fr"]="rayon", ["it"]="raggio", ["nl"]="straal", ["pe"]="شعاع", ["ro"]="raza", }, ["random"]={ ["cs"]="nahodne", ["de"]="zufaellig", ["en"]="random", ["fr"]="aleatoire", ["it"]="casuale", ["nl"]="willekeur", ["pe"]="تصادفی", ["ro"]="aleator", }, ["range"]={ ["en"]="range", ["nl"]="bereik", }, ["reduction"]={ ["cs"]="redukce", ["de"]="reduktion", ["en"]="reduction", ["fr"]="reduction", ["it"]="riduzione", ["nl"]="reductie", ["pe"]="کاهش", ["ro"]="reducere", }, ["ref"]={ ["cs"]="ref", ["de"]="ref", ["en"]="ref", ["fr"]="ref", ["it"]="ref", ["nl"]="ref", ["pe"]="رج", ["ro"]="ref", }, ["reference"]={ ["cs"]="odkaz", ["de"]="referenz", ["en"]="reference", ["fr"]="reference", ["it"]="riferimento", ["nl"]="verwijzing", ["pe"]="مرجع", ["ro"]="referinta", }, ["referenceprefix"]={ ["en"]="referenceprefix", }, ["referencing"]={ ["cs"]="odkazujici", ["de"]="referieren", ["en"]="referencing", ["fr"]="referencing", ["it"]="referencing", ["nl"]="refereren", ["pe"]="مراجعه", ["ro"]="referinta", }, ["region"]={ ["en"]="region", ["nl"]="gebied", }, ["regionin"]={ ["cs"]="oblastuvnitr", ["de"]="regionin", ["en"]="regionin", ["fr"]="entreregion", ["it"]="entraregione", ["nl"]="gebiedin", ["pe"]="ناحیه‌درون", ["ro"]="regiuneintrare", }, ["regionout"]={ ["cs"]="oblastvne", ["de"]="regionaus", ["en"]="regionout", ["fr"]="regionexterieure", ["it"]="esciregione", ["nl"]="gebieduit", ["pe"]="ناحیه‌بیرون", ["ro"]="regiuneiesire", }, ["repeat"]={ ["cs"]="opakovat", ["de"]="wiederholen", ["en"]="repeat", ["fr"]="repete", ["it"]="ripeti", ["nl"]="herhaal", ["pe"]="تکرار", ["ro"]="repeta", }, ["reset"]={ ["cs"]="reset", ["de"]="reset", ["en"]="reset", ["fr"]="reset", ["it"]="reset", ["nl"]="reset", ["pe"]="بازنشانی", ["ro"]="reset", }, ["resetnumber"]={ ["cs"]="resetnumber", ["de"]="resetnumber", ["en"]="resetnumber", ["fr"]="raznumero", ["it"]="resetnumber", ["nl"]="resetnummer", ["pe"]="بازنشانی‌شماره", ["ro"]="resetnumber", }, ["resolution"]={ ["cs"]="rozliseni", ["de"]="aufloesung", ["en"]="resolution", ["fr"]="resolution", ["it"]="risoluzione", ["nl"]="resolutie", ["pe"]="کیفیت", ["ro"]="rezolutie", }, ["right"]={ ["cs"]="vpravo", ["de"]="rechts", ["en"]="right", ["fr"]="droite", ["it"]="destra", ["nl"]="rechts", ["pe"]="راست", ["ro"]="dreapta", }, ["rightcolor"]={ ["cs"]="barvavpravo", ["de"]="rechterfarbe", ["en"]="rightcolor", ["fr"]="couleurdroite", ["it"]="coloredestra", ["nl"]="rechterkleur", ["pe"]="رنگ‌راست", ["ro"]="culoaredreapta", }, ["rightcompoundhyphen"]={ ["cs"]="rightcompoundhyphen", ["de"]="rightcompoundhyphen", ["en"]="rightcompoundhyphen", ["fr"]="rightcompoundhyphen", ["it"]="rightcompoundhyphen", ["nl"]="rechterkoppelteken", ["pe"]="rightcompoundhyphen", ["ro"]="rightcompoundhyphen", }, ["rightedge"]={ ["cs"]="pravahrana", ["de"]="rechtekante", ["en"]="rightedge", ["fr"]="borddroit", ["it"]="bordodestro", ["nl"]="rechterrand", ["pe"]="لبه‌راست", ["ro"]="borduradreapta", }, ["rightedgedistance"]={ ["cs"]="vzdalenostpravehrany", ["de"]="rechterkantenabstand", ["en"]="rightedgedistance", ["fr"]="distanceborddroit", ["it"]="distanzabordodestro", ["nl"]="rechterrandafstand", ["pe"]="فاصله‌لبه‌راست", ["ro"]="distantacoltdreapta", }, ["rightframe"]={ ["cs"]="ramecekvpravo", ["de"]="rechterrahmen", ["en"]="rightframe", ["fr"]="cadredroit", ["it"]="cornicedestra", ["nl"]="rechterkader", ["pe"]="قالب‌راست", ["ro"]="framedreapta", }, ["righthyphen"]={ ["cs"]="righthyphen", ["de"]="righthyphen", ["en"]="righthyphen", ["fr"]="righthyphen", ["it"]="righthyphen", ["nl"]="righthyphen", ["pe"]="righthyphen", ["ro"]="righthyphen", }, ["rightmargin"]={ ["cs"]="pravyokraj", ["de"]="rechterrand", ["en"]="rightmargin", ["fr"]="margedroite", ["it"]="marginedestro", ["nl"]="rechtermarge", ["pe"]="حاشیه‌راست", ["ro"]="marginedreapta", }, ["rightmargindistance"]={ ["cs"]="vzdalenostpravehookraje", ["de"]="rechterrandabstand", ["en"]="rightmargindistance", ["fr"]="distancemargedroite", ["it"]="distanzamarginedestro", ["nl"]="rechtermargeafstand", ["pe"]="فاصله‌حاشیه‌راست", ["ro"]="distantamarginedreapta", }, ["rightoffset"]={ ["cs"]="pravyoffset", ["de"]="rechterabstand", ["en"]="rightoffset", ["fr"]="rightoffset", ["it"]="offsetdestro", ["nl"]="rechteroffset", ["pe"]="آفست‌راست", ["ro"]="offsetdreapta", }, ["rightquotation"]={ ["cs"]="citacevpravo", ["de"]="rechterzitat", ["en"]="rightquotation", ["fr"]="citationdroite", ["it"]="citazionedestra", ["nl"]="rechtercitaat", ["pe"]="نقل‌قول‌راست", ["ro"]="citatdreapta", }, ["rightquote"]={ ["cs"]="citovatvpravo", ["de"]="rechterzitieren", ["en"]="rightquote", ["fr"]="citerdroite", ["it"]="menzionedestra", ["nl"]="rechterciteer", ["pe"]="نقل‌راست", ["ro"]="minicitatdreapta", }, ["rightsentence"]={ ["cs"]="vetavpravo", ["de"]="rechtersatz", ["en"]="rightsentence", ["fr"]="phrasedroite", ["it"]="frasedestra", ["nl"]="rechterzin", ["pe"]="جمله‌راست", ["ro"]="propozitiedreapta", }, ["rightspeech"]={ ["cs"]="rightspeech", ["de"]="rightspeech", ["en"]="rightspeech", ["fr"]="rightspeech", ["it"]="rightspeech", ["nl"]="rechteruitspraak", ["pe"]="سخنرانی‌راست", ["ro"]="rightspeech", }, ["rightstyle"]={ ["cs"]="stylvpravo", ["de"]="rechterstil", ["en"]="rightstyle", ["fr"]="styledroit", ["it"]="stiledestra", ["nl"]="rechterletter", ["pe"]="سبک‌راست", ["ro"]="stildreapta", }, ["rightsubsentence"]={ ["cs"]="podvetavpravo", ["de"]="rechtersubsatz", ["en"]="rightsubsentence", ["fr"]="sousphrasedroite", ["it"]="sottofrasedestra", ["nl"]="rechtersubzin", ["pe"]="زیرجمله‌راست", ["ro"]="subpropozitiedreapta", }, ["righttext"]={ ["cs"]="textvpravo", ["de"]="rechtertext", ["en"]="righttext", ["fr"]="textedroit", ["it"]="testodestro", ["nl"]="rechtertekst", ["pe"]="متن‌راست", ["ro"]="textdreapta", }, ["rightwidth"]={ ["cs"]="sirkavpravo", ["de"]="rechterbreite", ["en"]="rightwidth", ["fr"]="largeurdroite", ["it"]="ampiezzadestra", ["nl"]="rechterbreedte", ["pe"]="عرض‌راست", ["ro"]="marginedreapta", }, ["rotation"]={ ["cs"]="rotace", ["de"]="rotation", ["en"]="rotation", ["fr"]="rotation", ["it"]="rotazione", ["nl"]="rotatie", ["pe"]="دوران", ["ro"]="rotatie", }, ["rule"]={ ["cs"]="linka", ["de"]="linie", ["en"]="rule", ["fr"]="ligne", ["it"]="linea", ["nl"]="lijn", ["pe"]="خط", ["ro"]="rigla", }, ["rulecommand"]={ ["en"]="rulecommand", ["nl"]="lijncommando", }, ["rulecolor"]={ ["cs"]="barvalinky", ["de"]="linienfarbe", ["en"]="rulecolor", ["fr"]="couleurligne", ["it"]="colorelinea", ["nl"]="lijnkleur", ["pe"]="رنگ‌خط", ["ro"]="culoarerigla", }, ["rulethickness"]={ ["cs"]="tloustkalinky", ["de"]="liniendicke", ["en"]="rulethickness", ["fr"]="epaisseurligne", ["it"]="spessorelinea", ["nl"]="lijndikte", ["pe"]="ضخامت‌خط", ["ro"]="grosimerigla", }, ["samepage"]={ ["cs"]="stejnastranka", ["de"]="selbeseite", ["en"]="samepage", ["fr"]="memepage", ["it"]="stessapagina", ["nl"]="zelfdepagina", ["pe"]="همان‌صفحه", ["ro"]="aceeasipagina", }, ["sample"]={ ["cs"]="vzor", ["de"]="muster", ["en"]="sample", ["fr"]="echantillon", ["it"]="campione", ["nl"]="monster", ["pe"]="نمونه", ["ro"]="exemplu", }, ["saveinlist"]={ ["en"]="saveinlist", }, ["scale"]={ ["cs"]="meritko", ["de"]="format", ["en"]="scale", ["fr"]="echelle", ["it"]="scala", ["nl"]="schaal", ["pe"]="مقیاس", ["ro"]="scala", }, ["scope"]={ ["cs"]="rozsah", ["de"]="bereich", ["en"]="scope", ["fr"]="scope", ["it"]="scope", ["nl"]="scope", ["pe"]="طرح", ["ro"]="scop", }, ["screen"]={ ["cs"]="rastr", ["de"]="raster", ["en"]="screen", ["fr"]="ecran", ["it"]="schermo", ["nl"]="raster", ["pe"]="پرده", ["ro"]="ecran", }, ["section"]={ ["cs"]="oddil", ["de"]="abschnitt", ["en"]="section", ["fr"]="section", ["it"]="sezione", ["nl"]="sectie", ["pe"]="بخش", ["ro"]="sectiune", }, ["sectionconversion"]={ ["en"]="sectionconversion", }, ["sectionconversionset"]={ ["en"]="sectionconversionset", }, ["sectionnumber"]={ ["cs"]="cislooddilu", ["de"]="abschnittsnummer", ["en"]="sectionnumber", ["fr"]="numerosection", ["it"]="numerosezione", ["nl"]="sectienummer", ["pe"]="شماره‌بخش", ["ro"]="numarsectiune", }, ["sectionresetset"]={ ["en"]="sectionresetset", }, ["sectionsegments"]={ ["en"]="sectionsegments", }, ["sectionseparatorset"]={ ["en"]="sectionseparatorset", }, ["sectionset"]={ ["en"]="sectionset", }, ["sectionstopper"]={ ["en"]="sectionstopper", }, ["sectionstarter"]={ ["en"]="sectionstarter", }, ["separator"]={ ["cs"]="oddelovac", ["de"]="seperator", ["en"]="separator", ["fr"]="separateur", ["it"]="separatore", ["nl"]="scheider", ["pe"]="جداکننده", ["ro"]="separator", }, ["set"]={ ["cs"]="set", ["de"]="set", ["en"]="set", ["fr"]="set", ["it"]="set", ["nl"]="set", ["pe"]="قراربده", ["ro"]="set", }, ["setups"]={ ["cs"]="setups", ["de"]="setups", ["en"]="setups", ["fr"]="reglages", ["it"]="setups", ["nl"]="setups", ["pe"]="بارگذاریها", ["ro"]="setups", }, ["shrink"]={ ["en"]="shrink", ["nl"]="krimp", }, ["side"]={ ["cs"]="pocitat", ["de"]="objektabstand", ["en"]="side", ["fr"]="cote", ["it"]="lato", ["nl"]="zij", ["pe"]="کنار", ["ro"]="parte", }, ["sidealign"]={ ["cs"]="sidealign", ["de"]="sidealign", ["en"]="sidealign", ["fr"]="sidealign", ["it"]="sidealign", ["nl"]="zijuitlijnen", ["pe"]="تنظیم‌کنار", ["ro"]="sidealign", }, ["sidemethod"]={ ["cs"]="sidemethod", ["de"]="sidemethod", ["en"]="sidemethod", ["fr"]="sidemethod", ["it"]="sidemethod", ["nl"]="zijmethode", ["pe"]="روش‌کنار", ["ro"]="sidemethod", }, ["sidespaceafter"]={ ["cs"]="bocnimezeraza", ["de"]="nebennachspatium", ["en"]="sidespaceafter", ["fr"]="espacelateralapres", ["it"]="spaziolateraledopo", ["nl"]="zijnawit", ["pe"]="فضای‌کناری‌بعد", ["ro"]="spatiulateraldupa", }, ["sidespacebefore"]={ ["cs"]="bocnimezerapred", ["de"]="nebenvorspatium", ["en"]="sidespacebefore", ["fr"]="espacelateralavant", ["it"]="spaziolateraleprima", ["nl"]="zijvoorwit", ["pe"]="فضای‌کناری‌قبل", ["ro"]="spatiulateralinainte", }, ["sign"]={ ["cs"]="znak", ["de"]="zeichen", ["en"]="sign", ["fr"]="signe", ["it"]="segno", ["nl"]="teken", ["pe"]="علامت", ["ro"]="semn", }, ["size"]={ ["cs"]="velikost", ["de"]="groesse", ["en"]="size", ["fr"]="dimension", ["it"]="dimensione", ["nl"]="formaat", ["pe"]="اندازه", ["ro"]="dimensiune", }, ["small"]={ ["cs"]="male", ["de"]="klein", ["en"]="small", ["fr"]="petit", ["it"]="piccolo", ["nl"]="klein", ["pe"]="کوچک", ["ro"]="mic", }, ["sort"]={ ["en"]="sort", }, ["sorttype"]={ ["cs"]="sorttype", ["de"]="sorttype", ["en"]="sorttype", ["fr"]="sorttype", ["it"]="sorttype", ["nl"]="sortering", ["pe"]="ترتیب‌تایپ", ["ro"]="sorttype", }, ["source"]={ ["cs"]="zdroj", ["de"]="quelle", ["en"]="source", ["fr"]="origine", ["it"]="origine", ["nl"]="bron", ["pe"]="منبع", ["ro"]="sursa", }, ["space"]={ ["cs"]="mezera", ["de"]="spatium", ["en"]="space", ["fr"]="espace", ["it"]="spazio", ["nl"]="spatie", ["pe"]="فضا", ["ro"]="spatiu", }, ["spaceafter"]={ ["cs"]="mezeraza", ["de"]="nachspatium", ["en"]="spaceafter", ["fr"]="espaceapres", ["it"]="spaziodopo", ["nl"]="nawit", ["pe"]="فضا‌بعداز", ["ro"]="spatiudupa", }, ["spacebefore"]={ ["cs"]="mezerapred", ["de"]="vorspatium", ["en"]="spacebefore", ["fr"]="espaceavant", ["it"]="spazioprima", ["nl"]="voorwit", ["pe"]="فضا‌قبل‌از", ["ro"]="spatiuinainte", }, ["spaceinbetween"]={ ["cs"]="spaceinbetween", ["de"]="spaceinbetween", ["en"]="spaceinbetween", ["fr"]="spaceinbetween", ["it"]="spaceinbetween", ["nl"]="tussenwit", ["pe"]="فضا‌دربین", ["ro"]="spaceinbetween", }, ["spacing"]={ ["cs"]="mezerovani", ["de"]="spatiumausgleich", ["en"]="spacing", ["fr"]="espacement", ["it"]="spaziatura", ["nl"]="spatiering", ["pe"]="فضاگذاری", ["ro"]="spatiere", }, ["split"]={ ["cs"]="split", ["de"]="split", ["en"]="split", ["fr"]="split", ["it"]="separa", ["nl"]="splitsen", ["pe"]="شکافتن", ["ro"]="split", }, ["splitcolor"]={ ["cs"]="splitcolor", ["de"]="splitcolor", ["en"]="splitcolor", ["fr"]="splitcolor", ["it"]="splitcolor", ["nl"]="splitskleur", ["pe"]="شکافتن‌رنگ", ["ro"]="splitcolor", }, ["splitmethod"]={ ["cs"]="splitmethod", ["de"]="splitmethod", ["en"]="splitmethod", ["fr"]="splitmethod", ["it"]="splitmethod", ["nl"]="splitsmethode", ["pe"]="روش‌شکافتن", ["ro"]="splitmethod", }, ["splitoffset"]={ ["cs"]="splitoffset", ["de"]="splitoffset", ["en"]="splitoffset", ["fr"]="splitoffset", ["it"]="splitoffset", ["nl"]="splitsoffset", ["pe"]="شکافتن‌آفست", ["ro"]="splitoffset", }, ["spot"]={ ["cs"]="spot", ["de"]="spot", ["en"]="spot", ["fr"]="spot", ["it"]="spot", ["nl"]="spot", ["pe"]="لکه", ["ro"]="spot", }, ["stack"]={ ["cs"]="stack", ["de"]="stack", ["en"]="stack", ["fr"]="stack", ["it"]="stack", ["nl"]="stapel", ["pe"]="توده", ["ro"]="stack", }, ["start"]={ ["cs"]="start", ["de"]="start", ["en"]="start", ["fr"]="demarre", ["it"]="inizia", ["nl"]="start", ["pe"]="شروع", ["ro"]="start", }, ["state"]={ ["cs"]="status", ["de"]="status", ["en"]="state", ["fr"]="etat", ["it"]="stato", ["nl"]="status", ["pe"]="وضعیت", ["ro"]="stare", }, ["step"]={ ["cs"]="krok", ["de"]="schritt", ["en"]="step", ["fr"]="pas", ["it"]="passo", ["nl"]="stap", ["pe"]="گام", ["ro"]="pas", }, ["stop"]={ ["cs"]="stop", ["de"]="stop", ["en"]="stop", ["fr"]="stoppe", ["it"]="termina", ["nl"]="stop", ["pe"]="پایان", ["ro"]="stop", }, ["stopper"]={ ["cs"]="predel", ["de"]="abschnitttrenner", ["en"]="stopper", ["fr"]="taquet", ["it"]="stopper", ["nl"]="afsluiter", ["pe"]="ایست", ["ro"]="stopper", }, ["starter"]={ ["en"]="starter", ["nl"]="opener", }, ["stretch"]={ ["cs"]="natahnout", ["de"]="strecken", ["en"]="stretch", ["fr"]="etire", ["it"]="dilata", ["nl"]="rek", ["pe"]="کشیدن", ["ro"]="dilatat", }, ["strut"]={ ["cs"]="strut", ["de"]="strut", ["en"]="strut", ["fr"]="strut", ["it"]="strut", ["nl"]="strut", ["pe"]="بست", ["ro"]="strut", }, ["mathstyle"]={ ["en"]="mathstyle", }, ["style"]={ ["cs"]="pismeno", ["de"]="stil", ["en"]="style", ["fr"]="style", ["it"]="stile", ["nl"]="letter", ["pe"]="سبک", ["ro"]="stil", }, ["sub"]={ ["cs"]="pod", ["de"]="unter", ["en"]="sub", ["fr"]="sous", ["it"]="sotto", ["nl"]="sub", ["pe"]="زیر", ["ro"]="sub", }, ["subtitle"]={ ["cs"]="podtitulek", ["de"]="untertitel", ["en"]="subtitle", ["fr"]="soustitre", ["it"]="sottotitolo", ["nl"]="subtitel", ["pe"]="زیرعنوان", ["ro"]="subtitlu", }, ["suffix"]={ ["cs"]="suffix", ["de"]="suffix", ["en"]="suffix", ["fr"]="suffix", ["it"]="suffix", ["nl"]="suffix", ["pe"]="پسوند", ["ro"]="suffix", }, ["suffixseparator"]={ ["en"]="suffixseparator", ["nl"]="suffixscheider", }, ["suffixstopper"]={ ["en"]="suffixstopper", ["nl"]="suffixafsluiter", }, ["sx"]={ ["cs"]="sx", ["de"]="sx", ["en"]="sx", ["fr"]="sx", ["it"]="sx", ["nl"]="sx", ["pe"]="sx", ["ro"]="sx", }, ["sy"]={ ["cs"]="sy", ["de"]="sy", ["en"]="sy", ["fr"]="sy", ["it"]="sy", ["nl"]="sy", ["pe"]="sy", ["ro"]="sy", }, ["symalign"]={ ["cs"]="symzarovnani", ["de"]="symausrichtung", ["en"]="symalign", ["fr"]="symalignement", ["it"]="symallinea", ["nl"]="symuitlijnen", ["pe"]="تنظیم‌نماد", ["ro"]="symaliniere", }, ["symbol"]={ ["cs"]="symbol", ["de"]="symbol", ["en"]="symbol", ["fr"]="symbole", ["it"]="simbolo", ["nl"]="symbool", ["pe"]="نماد", ["ro"]="simbol", }, ["symbolset"]={ ["cs"]="sadasymbolu", ["de"]="symbolset", ["en"]="symbolset", ["fr"]="jeusymbole", ["it"]="setsimboli", ["nl"]="symboolset", ["pe"]="مجموعه‌نماد", ["ro"]="setsimbol", }, ["symcolor"]={ ["cs"]="barvasymbolu", ["de"]="symfarbe", ["en"]="symcolor", ["fr"]="couleursym", ["it"]="coloresimbolo", ["nl"]="symkleur", ["pe"]="رنگ‌نماد", ["ro"]="culoaresimbol", }, ["symstyle"]={ ["cs"]="stylsymboly", ["de"]="symstil", ["en"]="symstyle", ["fr"]="stylesym", ["it"]="stilesimbolo", ["nl"]="symletter", ["pe"]="سبک‌نماد", ["ro"]="stilsimbol", }, ["synonym"]={ ["cs"]="synonymum", ["de"]="synonym", ["en"]="synonym", ["fr"]="synonyme", ["it"]="sinonimo", ["nl"]="synoniem", ["pe"]="مترادف", ["ro"]="sinonim", }, ["synonymcolor"]={ ["cs"]="barvasynonyma", ["de"]="synonymfarbe", ["en"]="synonymcolor", ["fr"]="couleursynonyme", ["it"]="coloresinonimi", ["nl"]="synoniemkleur", ["pe"]="رنگ‌مترادف", ["ro"]="culoaresinonim", }, ["synonymcommand"]={ ["cs"]="synonymcommand", ["de"]="synonymbefehl", ["en"]="synonymcommand", ["fr"]="synonymcommand", ["it"]="synonymcommand", ["nl"]="synoniemcommando", ["pe"]="synonymcommand", ["ro"]="synonymcommand", }, ["synonymstyle"]={ ["cs"]="stylsynonyma", ["de"]="synonymstil", ["en"]="synonymstyle", ["fr"]="stylesynonyme", ["it"]="stilesinonimi", ["nl"]="synoniemletter", ["pe"]="سبک‌مترادف", ["ro"]="stilsinonim", }, ["tab"]={ ["cs"]="tab", ["de"]="tab", ["en"]="tab", ["fr"]="tab", ["it"]="tab", ["nl"]="tab", ["pe"]="تب", ["ro"]="tab", }, ["text"]={ ["cs"]="text", ["de"]="text", ["en"]="text", ["fr"]="texte", ["it"]="testo", ["nl"]="tekst", ["pe"]="متن", ["ro"]="text", }, ["textcolor"]={ ["cs"]="barvatextu", ["de"]="textfarbe", ["en"]="textcolor", ["fr"]="couleurtexte", ["it"]="coloretesto", ["nl"]="tekstkleur", ["pe"]="رنگ‌متن", ["ro"]="culoaretext", }, ["textcommand"]={ ["cs"]="textovyprikaz", ["de"]="textbefehl", ["en"]="textcommand", ["fr"]="commandetexte", ["it"]="comandotesto", ["nl"]="tekstcommando", ["pe"]="فرمان‌متن", ["ro"]="comandatext", }, ["textdistance"]={ ["cs"]="textdistance", ["de"]="textdistance", ["en"]="textdistance", ["fr"]="distancetexte", ["it"]="distanzatesto", ["nl"]="tekstafstand", ["pe"]="فاصله‌متن", ["ro"]="textdistance", }, ["textlayer"]={ ["cs"]="textlayer", ["de"]="textlayer", ["en"]="textlayer", ["fr"]="calquetexte", ["it"]="textlayer", ["nl"]="tekstlaag", ["pe"]="لایه‌متن", ["ro"]="textlayer", }, ["textmargin"]={ ["cs"]="textmargin", ["de"]="textmargin", ["en"]="textmargin", ["fr"]="margetexte", ["it"]="textmargin", ["nl"]="tekstmarge", ["pe"]="حاشیه‌متن", ["ro"]="textmargin", }, ["textmethod"]={ ["cs"]="textmethod", ["de"]="textmethod", ["en"]="textmethod", ["fr"]="textmethod", ["it"]="textmethod", ["nl"]="tekstmethode", ["pe"]="روش‌متن", ["ro"]="textmethod", }, ["textseparator"]={ ["cs"]="oddelovactextu", ["de"]="textseparator", ["en"]="textseparator", ["fr"]="separateurtexte", ["it"]="separatoretesto", ["nl"]="tekstscheider", ["pe"]="جداکننده‌متن", ["ro"]="separatortext", }, ["textsize"]={ ["cs"]="velikosttextu", ["de"]="textgroesse", ["en"]="textsize", ["fr"]="tailletexte", ["it"]="dimensionetesto", ["nl"]="tekstformaat", ["pe"]="اندازه‌متن", ["ro"]="dimensiunetext", }, ["textstate"]={ ["cs"]="statustextu", ["de"]="textstatus", ["en"]="textstate", ["fr"]="etattexte", ["it"]="statotesto", ["nl"]="tekststatus", ["pe"]="وضعیت‌متن", ["ro"]="staretext", }, ["textstyle"]={ ["cs"]="styltextu", ["de"]="textstil", ["en"]="textstyle", ["fr"]="styletexte", ["it"]="stiletesto", ["nl"]="tekstletter", ["pe"]="سبک‌متن", ["ro"]="stiltext", }, ["textheight"]={ ["cs"]="vyskatextu", ["de"]="texthoehe", ["en"]="textheight", ["fr"]="hauteurtexte", ["it"]="altezzatesto", ["nl"]="teksthoogte", ["pe"]="ارتفاع‌متن", ["ro"]="inaltimetext", }, ["textwidth"]={ ["cs"]="sirkatextu", ["de"]="textbreite", ["en"]="textwidth", ["fr"]="largeurtexte", ["it"]="ampiezzatesto", ["nl"]="tekstbreedte", ["pe"]="عرض‌متن", ["ro"]="latimetext", }, ["threshold"]={ ["en"]="threshold", -- rather international term }, ["title"]={ ["cs"]="titul", ["de"]="titel", ["en"]="title", ["fr"]="titre", ["it"]="titolo", ["nl"]="titel", ["pe"]="عنوان", ["ro"]="titlu", }, ["titlecolor"]={ ["cs"]="barvatitulek", ["de"]="titelfarbe", ["en"]="titlecolor", ["fr"]="couleurtitre", ["it"]="coloretitolo", ["nl"]="titelkleur", ["pe"]="رنگ‌عنوان", ["ro"]="culoaretitlu", }, ["titlecommand"]={ ["cs"]="titlecommand", ["de"]="titlecommand", ["en"]="titlecommand", ["fr"]="titlecommand", ["it"]="titlecommand", ["nl"]="titelcommando", ["pe"]="فرمان‌عنوان", ["ro"]="titlecommand", }, ["titledistance"]={ ["cs"]="vzdalenosttitulek", ["de"]="titelabstand", ["en"]="titledistance", ["fr"]="distancetitre", ["it"]="distanzatitolo", ["nl"]="titelafstand", ["pe"]="فاصله‌عنوان", ["ro"]="distantatitlu", }, ["titleleft"]={ ["cs"]="titleleft", ["de"]="titleleft", ["en"]="titleleft", ["fr"]="titleleft", ["it"]="titleleft", ["nl"]="titellinks", ["pe"]="عنوان‌چپ", ["ro"]="titleleft", }, ["titleright"]={ ["cs"]="titleright", ["de"]="titleright", ["en"]="titleright", ["fr"]="titleright", ["it"]="titleright", ["nl"]="titelrechts", ["pe"]="عنوان‌راست", ["ro"]="titleright", }, ["titlestyle"]={ ["cs"]="styltitulek", ["de"]="titelstil", ["en"]="titlestyle", ["fr"]="styletitre", ["it"]="stiletitolo", ["nl"]="titelletter", ["pe"]="سبک‌عنوان", ["ro"]="stiltitlu", }, ["to"]={ ["cs"]="na", ["de"]="zu", ["en"]="to", ["fr"]="vers", ["it"]="verso", ["nl"]="aan", ["pe"]="به", ["ro"]="catre", }, ["tolerance"]={ ["cs"]="tolerance", ["de"]="toleranz", ["en"]="tolerance", ["fr"]="tolerance", ["it"]="tolleranza", ["nl"]="tolerantie", ["pe"]="بردباری", ["ro"]="toleranta", }, ["top"]={ ["cs"]="vrsek", ["de"]="oben", ["en"]="top", ["fr"]="sup", ["it"]="cima", ["nl"]="boven", ["pe"]="بالا", ["ro"]="sus", }, ["topdistance"]={ ["cs"]="vzdalenostvrsku", ["de"]="obenabstand", ["en"]="topdistance", ["fr"]="distancesup", ["it"]="distanzacima", ["nl"]="bovenafstand", ["pe"]="فاصله‌بالا", ["ro"]="distantasus", }, ["topframe"]={ ["cs"]="rameceknahore", ["de"]="obenrahmen", ["en"]="topframe", ["fr"]="cadresup", ["it"]="cornicecima", ["nl"]="bovenkader", ["pe"]="قالب‌راست", ["ro"]="framesus", }, ["topoffset"]={ ["cs"]="offsetvrsku", ["de"]="obenoffset", ["en"]="topoffset", ["fr"]="decalagesup", ["it"]="offsetcima", ["nl"]="bovenoffset", ["pe"]="آفست‌بالا", ["ro"]="offsetsus", }, ["topspace"]={ ["cs"]="svrchnimezera", ["de"]="kopfspatium", ["en"]="topspace", ["fr"]="espacesup", ["it"]="spaziocima", ["nl"]="kopwit", ["pe"]="فضای‌بالا", ["ro"]="spatiusus", }, ["topstate"]={ ["cs"]="statusvrsku", ["de"]="statusoben", ["en"]="topstate", ["fr"]="etatsup", ["it"]="statocima", ["nl"]="bovenstatus", ["pe"]="وضعیت‌بالا", ["ro"]="staresus", }, ["type"]={ ["cs"]="typ", ["de"]="typ", ["en"]="type", ["fr"]="type", ["it"]="type", ["nl"]="type", ["pe"]="تایپ", ["ro"]="type", }, ["unit"]={ ["cs"]="jednotka", ["de"]="einheit", ["en"]="unit", ["fr"]="unite", ["it"]="unita", ["nl"]="eenheid", ["pe"]="واحد", ["ro"]="unitate", }, ["unknownreference"]={ ["cs"]="neznamyodkaz", ["de"]="unbekantereferenz", ["en"]="unknownreference", ["fr"]="referenceinconnue", ["it"]="riferimentoingoto", ["nl"]="onbekendeverwijzing", ["pe"]="مرجع‌ناشناس", ["ro"]="referintanecunoscuta", }, ["urlalternative"]={ ["cs"]="urlalternativa", ["de"]="urlalternative", ["en"]="urlalternative", ["fr"]="alternativeurl", ["it"]="alternativaurl", ["nl"]="urlvariant", ["pe"]="urlalternative", ["ro"]="urlalternativ", }, ["urlspace"]={ ["cs"]="prostorurl", ["de"]="urlspatium", ["en"]="urlspace", ["fr"]="espaceurl", ["it"]="spaziourl", ["nl"]="urlspatie", ["pe"]="urlspace", ["ro"]="spatiuurl", }, ["validate"]={ ["cs"]="validovat", ["de"]="validieren", ["en"]="validate", ["fr"]="valider", ["it"]="verifica", ["nl"]="valideer", ["pe"]="تاییداعتبار", ["ro"]="verifica", }, ["vcommand"]={ ["cs"]="vprikaz", ["de"]="vbefehl", ["en"]="vcommand", ["fr"]="vcommande", ["it"]="vcomando", ["nl"]="vcommando", ["pe"]="vcommand", ["ro"]="comandav", }, ["vector"]={ ["en"]="vector", ["nl"]="vector", }, ["veroffset"]={ ["cs"]="offsethlavicky", ["de"]="kopfoffset", ["en"]="veroffset", ["fr"]="veroffset", ["it"]="veroffset", ["nl"]="kopoffset", ["pe"]="آفست‌عم", ["ro"]="veroffset", }, ["vfil"]={ ["cs"]="vfil", ["de"]="vfil", ["en"]="vfil", ["fr"]="vfil", ["it"]="vfil", ["nl"]="vfil", ["pe"]="vfil", ["ro"]="vfil", }, ["voffset"]={ ["cs"]="voffset", ["de"]="voffset", ["en"]="voffset", ["fr"]="voffset", ["it"]="voffset", ["nl"]="voffset", ["pe"]="آفست‌ع", ["ro"]="voffset", }, ["way"]={ ["cs"]="zpusob", ["de"]="art", ["en"]="way", ["fr"]="mode", ["it"]="modo", ["nl"]="wijze", ["pe"]="راه", ["ro"]="mod", }, ["wfactor"]={ ["cs"]="sfaktor", ["de"]="bfaktor", ["en"]="wfactor", ["fr"]="facteurlargeur", ["it"]="wfactor", ["nl"]="bfactor", ["pe"]="wfactor", ["ro"]="factorw", }, ["white"]={ ["cs"]="bily", ["de"]="weiss", ["en"]="white", ["fr"]="blanc", ["it"]="bianco", ["nl"]="wit", ["pe"]="سفید", ["ro"]="alb", }, ["width"]={ ["cs"]="sirka", ["de"]="breite", ["en"]="width", ["fr"]="largeur", ["it"]="ampiezza", ["nl"]="breedte", ["pe"]="عرض", ["ro"]="latime", }, ["xfactor"]={ ["cs"]="xfaktor", ["de"]="xfaktor", ["en"]="xfactor", ["fr"]="xfactor", ["it"]="xfactor", ["nl"]="xfactor", ["pe"]="فاکتورایکس", ["ro"]="xfactor", }, ["xmax"]={ ["cs"]="xmax", ["de"]="xmax", ["en"]="xmax", ["fr"]="xmax", ["it"]="xmax", ["nl"]="xmax", ["pe"]="xmax", ["ro"]="xmax", }, ["xoffset"]={ ["cs"]="xoffset", ["de"]="xoffset", ["en"]="xoffset", ["fr"]="xoffset", ["it"]="xoffset", ["nl"]="xoffset", ["pe"]="آفست‌ایکس", ["ro"]="xoffset", }, ["xscale"]={ ["cs"]="xmeritko", ["de"]="xformat", ["en"]="xscale", ["fr"]="xscale", ["it"]="xscale", ["nl"]="xschaal", ["pe"]="مقیاس‌ایکس", ["ro"]="xscala", }, ["xstep"]={ ["cs"]="xkrok", ["de"]="xschritt", ["en"]="xstep", ["fr"]="xstep", ["it"]="xstep", ["nl"]="xstap", ["pe"]="گام‌ایکس", ["ro"]="xstep", }, ["yfactor"]={ ["cs"]="yfaktor", ["de"]="yfaktor", ["en"]="yfactor", ["fr"]="yfactor", ["it"]="yfactor", ["nl"]="yfactor", ["pe"]="فاکتوروای", ["ro"]="yfactor", }, ["ymax"]={ ["cs"]="ymax", ["de"]="ymax", ["en"]="ymax", ["fr"]="ymax", ["it"]="ymax", ["nl"]="ymax", ["pe"]="ymax", ["ro"]="ymax", }, ["yoffset"]={ ["cs"]="yoffset", ["de"]="yoffset", ["en"]="yoffset", ["fr"]="yoffset", ["it"]="yoffset", ["nl"]="yoffset", ["pe"]="آفست‌وای", ["ro"]="yoffset", }, ["yscale"]={ ["cs"]="ymeritko", ["de"]="yformat", ["en"]="yscale", ["fr"]="yscale", ["it"]="yscale", ["nl"]="yschaal", ["pe"]="مقیاس‌وای", ["ro"]="yscala", }, ["ystep"]={ ["cs"]="ykrok", ["de"]="yschritt", ["en"]="ystep", ["fr"]="ystep", ["it"]="ystep", ["nl"]="ystap", ["pe"]="گام‌وای", ["ro"]="ystep", }, }, ["elements"]={ ["answerlines"]={ ["cs"]="answerlines", ["de"]="answerlines", ["en"]="answerlines", ["fr"]="answerlines", ["it"]="answerlines", ["nl"]="antwoordregels", ["pe"]="answerlines", ["ro"]="answerlines", }, ["answerspace"]={ ["cs"]="answerspace", ["de"]="answerspace", ["en"]="answerspace", ["fr"]="answerspace", ["it"]="answerspace", ["nl"]="antwoordruimte", ["pe"]="answerspace", ["ro"]="answerspace", }, ["begin"]={ ["cs"]="zacatek", ["de"]="anfang", ["en"]="begin", ["fr"]="debut", ["it"]="inizio", ["nl"]="beginvan", ["pe"]="عنصرها", ["ro"]="inceput", }, ["complete"]={ ["cs"]="uplny", ["de"]="vollende", ["en"]="complete", ["fr"]="complete", ["it"]="completo", ["nl"]="volledige", ["pe"]="کامل", ["ro"]="complet", }, ["coupled"]={ ["cs"]="propojene", ["de"]="verknuepft", ["en"]="coupled", ["fr"]="couple", ["it"]="accoppiato", ["nl"]="gekoppelde", ["pe"]="مزدوج", ["ro"]="cuplat", }, ["currentlocal"]={ ["cs"]="aktualnelokalni", ["de"]="aktuelllokal", ["en"]="currentlocal", ["fr"]="localcourant", ["it"]="correntelocale", ["nl"]="huidigelokale", ["pe"]="موضعی‌جاری", ["ro"]="localcurent", }, ["end"]={ ["cs"]="konec", ["de"]="ende", ["en"]="end", ["fr"]="fin", ["it"]="fine", ["nl"]="eindvan", ["pe"]="انتها", ["ro"]="sfarsit", }, ["endsetup"]={ ["cs"]="", ["de"]="ein", ["en"]="", ["fr"]="", ["it"]="", ["nl"]="in", ["pe"]="انتهای‌بارگذاری", ["ro"]="", }, ["get"]={ ["cs"]="ziskat", ["de"]="get", ["en"]="get", ["fr"]="obtient", ["it"]="prendi", ["nl"]="haal", ["pe"]="بگیر", ["ro"]="get", }, ["increment"]={ ["cs"]="zvysit", ["de"]="erhoehen", ["en"]="increment", ["fr"]="incremente", ["it"]="incrementa", ["nl"]="verhoog", ["pe"]="افزایش", ["ro"]="increment", }, ["list"]={ ["cs"]="seznam", ["de"]="auflisten", ["en"]="list", ["fr"]="liste", ["it"]="elenco", ["nl"]="lijst", ["pe"]="لیست", ["ro"]="lista", }, ["listof"]={ ["cs"]="seznam", ["de"]="auflistenvon", ["en"]="listof", ["fr"]="listede", ["it"]="elencodi", ["nl"]="lijstmet", ["pe"]="لیست‌از", ["ro"]="listade", }, ["load"]={ ["cs"]="nacist", ["de"]="laden", ["en"]="load", ["fr"]="charge", ["it"]="carica", ["nl"]="laad", ["pe"]="بارگذاشتن", ["ro"]="incarca", }, ["local"]={ ["cs"]="lokalne", ["de"]="lokal", ["en"]="local", ["fr"]="local", ["it"]="locale", ["nl"]="lokale", ["pe"]="موضعی", ["ro"]="local", }, ["makeup"]={ ["cs"]="zlom", ["de"]="umbruch", ["en"]="makeup", ["fr"]="makeup", ["it"]="makeup", ["nl"]="opmaak", ["pe"]="آرایش", ["ro"]="makeup", }, ["next"]={ ["cs"]="dalsi", ["de"]="folgende", ["en"]="next", ["fr"]="suivant", ["it"]="successivo", ["nl"]="volgende", ["pe"]="بعدی", ["ro"]="urmatorul", }, ["place"]={ ["cs"]="umisti", ["de"]="platziere", ["en"]="place", ["fr"]="place", ["it"]="metti", ["nl"]="plaats", ["pe"]="مکان", ["ro"]="pune", }, ["previous"]={ ["cs"]="predchozi", ["de"]="vorige", ["en"]="previous", ["fr"]="precedent", ["it"]="precedente", ["nl"]="vorige", ["pe"]="قبلی", ["ro"]="precedent", }, ["previouslocal"]={ ["cs"]="predchozilokalni", ["de"]="voriglokal", ["en"]="previouslocal", ["fr"]="localprecedent", ["it"]="precedentelocale", ["nl"]="vorigelokale", ["pe"]="موضع‌قبلی", ["ro"]="precedentlocal", }, ["reserve"]={ ["cs"]="rezervovat", ["de"]="reservieren", ["en"]="reserve", ["fr"]="reserver", ["it"]="riserva", ["nl"]="reserveer", ["pe"]="رزرو", ["ro"]="rezervat", }, ["see"]={ ["cs"]="viz", ["de"]="sieh", ["en"]="see", ["fr"]="voit", ["it"]="vedi", ["nl"]="zie", ["pe"]="ببینید", ["ro"]="vezi", }, ["setup"]={ ["cs"]="nastaveni", ["de"]="stelle", ["en"]="setup", ["fr"]="regle", ["it"]="imposta", ["nl"]="stel", ["pe"]="بارگذاری", ["ro"]="setare", }, ["start"]={ ["cs"]="start", ["de"]="start", ["en"]="start", ["fr"]="demarre", ["it"]="inizia", ["nl"]="start", ["pe"]="شروع", ["ro"]="start", }, ["stop"]={ ["cs"]="stop", ["de"]="stop", ["en"]="stop", ["fr"]="stoppe", ["it"]="termina", ["nl"]="stop", ["pe"]="پایان", ["ro"]="stop", }, ["text"]={ ["cs"]="text", ["de"]="text", ["en"]="text", ["fr"]="texte", ["it"]="testo", ["nl"]="tekst", ["pe"]="متن", ["ro"]="text", }, ["type"]={ ["cs"]="opis", ["de"]="type", ["en"]="type", ["fr"]="type", ["it"]="type", ["nl"]="type", ["pe"]="تایپ", ["ro"]="type", }, }, ["variables"]={ ["more"]={ ["en"]="more", ["nl"]="meer", }, ["less"]={ ["en"]="less", ["nl"]="minder", }, ["embed"]={ ["en"]="embed", ["nl"]="sluitin", }, ["end"]={ ["en"]="end", ["nl"]="eind", }, ["export"] = { ["en"]="export", }, ["begin"]={ ["en"]="begin", ["nl"]="begin", }, ["down"]={ ["en"]="down", ["nl"]="omlaag", }, ["up"]={ ["en"]="up", ["nl"]="omhoog", }, ["smaller"]={ ["en"]="smaller", ["nl"]="kleiner", }, ["bigger"]={ ["en"]="bigger", ["nl"]="groter", }, ["underbar"]={ ["cs"]="podtrzeno", ["de"]="unterstrichen", ["en"]="underbar", ["fr"]="souslignetout", ["it"]="sottolinea", ["nl"]="onderstreep", ["pe"]="میله‌زیر", ["ro"]="sublinie", }, ["underbars"]={ ["cs"]="podtrzeni", ["de"]="unterstreichen", ["en"]="underbars", ["fr"]="sousligne", ["it"]="sottolinee", ["nl"]="onderstrepen", ["pe"]="میله‌‌های‌زیر", ["ro"]="sublinii", }, ["overbar"]={ ["cs"]="nadtrzeno", ["de"]="ueberstrichen", ["en"]="overbar", ["fr"]="overbar", ["it"]="sopralinea", ["nl"]="overstreep", ["pe"]="میله‌رو", ["ro"]="barasus", }, ["overbars"]={ ["cs"]="nadtrzeni", ["de"]="ueberstreichen", ["en"]="overbars", ["fr"]="overbars", ["it"]="sopralinee", ["nl"]="overstrepen", ["pe"]="میله‌ها‌رو", ["ro"]="supralinie", }, ["understrike"]={ ["en"]="understrike", }, ["understrikes"]={ ["en"]="understrikes", }, ["overstrike"]={ ["cs"]="preskrtnuto", ["de"]="durchgestrichen", ["en"]="overstrike", ["fr"]="surlignetout", ["it"]="sbarrato", ["nl"]="doorstreep", ["pe"]="خط‌زدن", ["ro"]="liniepeste", }, ["overstrikes"]={ ["cs"]="preskrtnuti", ["de"]="durchstreichen", ["en"]="overstrikes", ["fr"]="surligne", ["it"]="sbarrati", ["nl"]="doorstrepen", ["pe"]="خط‌زدنها", ["ro"]="liniipeste", }, ["maxheight"]={ ["en"]="maxheight", }, ["maxdepth"]={ ["en"]="maxdepth", }, ["maxwidth"]={ ["en"]="maxwidth", }, ["minheight"]={ ["en"]="minheight", }, ["mindepth"]={ ["en"]="mindepth", }, ["minwidth"]={ ["en"]="minwidth", }, ["short"]={ ["nl"]="kort", ["en"]="short", ["de"]="kurz", ["cs"]="short", ["it"]="short", ["ro"]="short", ["fr"]="short", }, ["cite"]={ ["en"]="cite", }, ["bbl"]={ ["en"]="bbl", }, ["bib"]={ ["en"]="bib", }, ["author"]={ ["nl"]="auteur", ["en"]="author", ["de"]="autor", ["cs"]="autor", ["it"]="autore", ["ro"]="autor", ["fr"]="auteur", }, ["Addition"]={ ["cs"]="Pridavek", ["de"]="Zusatz", ["en"]="Addition", ["fr"]="Ajout", ["it"]="Aggiunta", ["nl"]="Toevoeging", ["pe"]="جمع", ["ro"]="Adaugare", }, ["Balloon"]={ ["cs"]="Bublinka", ["de"]="Ballon", ["en"]="Balloon", ["fr"]="Ballon", ["it"]="Pallone", ["nl"]="Ballon", ["pe"]="بادکنک", ["ro"]="Balon", }, ["Character"]={ ["cs"]="Pismeno", ["de"]="Buchstabe", ["en"]="Character", ["fr"]="Caratere", ["it"]="Lettera", ["nl"]="Letter", ["pe"]="Character", ["ro"]="Caracter", }, ["Characters"]={ ["cs"]="Pismena", ["de"]="Buchstaben", ["en"]="Characters", ["fr"]="Caracteres", ["it"]="Lettere", ["nl"]="Letters", ["pe"]="Characters", ["ro"]="Caractere", }, ["CloseDocument"]={ ["cs"]="ZavritDokument", ["de"]="SchliesseDokument", ["en"]="CloseDocument", ["fr"]="FermeDocument", ["it"]="ChiudiDocumento", ["nl"]="SluitDocument", ["pe"]="بستن‌نوشتار", ["ro"]="InchideDocument", }, ["ExitViewer"]={ ["cs"]="UkoncitProhlizec", ["de"]="BeendeViewer", ["en"]="ExitViewer", ["fr"]="SortVisualisateur", ["it"]="EsciVisualizzatore", ["nl"]="VerlaatViewer", ["pe"]="خروج‌نمایشگر", ["ro"]="IesireVizualizator", }, ["FirstPage"]={ ["cs"]="PrvniStrana", ["de"]="ErsteSeite", ["en"]="FirstPage", ["fr"]="PremierePage", ["it"]="PrimaPagina", ["nl"]="EerstePagina", ["pe"]="صفحه‌اول", ["ro"]="PrimaPagina", }, ["FitHeight"]={ ["cs"]="FitHeight", ["de"]="HoehePassend", ["en"]="FitHeight", ["fr"]="AjusteHauteur", ["it"]="FitHeight", ["nl"]="HoogtePassend", ["pe"]="پرکردن‌ارتفاع", ["ro"]="AjustatInaltime", }, ["FitWidth"]={ ["cs"]="FitWidth", ["de"]="BreitePassend", ["en"]="FitWidth", ["fr"]="AjusteLargeur", ["it"]="FitWidth", ["nl"]="BreedtePassend", ["pe"]="پرکردن‌عرض", ["ro"]="AjustatLatime", }, ["GotoPage"]={ ["cs"]="JdiNaStranku", ["de"]="GotoPage", ["en"]="GotoPage", ["fr"]="VaalaPage", ["it"]="VaiAPagina", ["nl"]="GaNaarPagina", ["pe"]="برو‌به‌صفحه", ["ro"]="LaPagina", }, ["Greek"]={ ["cs"]="Recky", ["de"]="Griechisch", ["en"]="Greek", ["fr"]="Grec", ["it"]="Greco", ["nl"]="Grieks", ["pe"]="یونانی", ["ro"]="Grec", }, ["Help"]={ ["cs"]="Napoveda", ["de"]="Hilfe", ["en"]="Help", ["fr"]="Aide", ["it"]="Aiuto", ["nl"]="Help", ["pe"]="کمک", ["ro"]="Ajutor", }, ["HideField"]={ ["cs"]="SkryjPole", ["de"]="VerbergeFeld", ["en"]="HideField", ["fr"]="CacheChamp", ["it"]="NascondiCampo", ["nl"]="VerbergVeld", ["pe"]="پنهان‌میدان", ["ro"]="AscundeCamp", }, ["HideLayer"]={ ["cs"]="HideLayer", ["de"]="HideLayer", ["en"]="HideLayer", ["fr"]="CacheCalque", ["it"]="HideLayer", ["nl"]="VerbergLaag", ["pe"]="پنهان‌لایه", ["ro"]="HideLayer", }, ["Key"]={ ["cs"]="Klavesa", ["de"]="Schluessel", ["en"]="Key", ["fr"]="Cle", ["it"]="Tasto", ["nl"]="Sleutel", ["pe"]="کلید", ["ro"]="Cheie", }, ["LastPage"]={ ["cs"]="PosledniStrana", ["de"]="LetzteSeite", ["en"]="LastPage", ["fr"]="DernierePage", ["it"]="UltimaPagina", ["nl"]="LaatstePagina", ["pe"]="صفحه‌آخر", ["ro"]="UltimaPagina", }, ["LoadForm"]={ ["cs"]="NacistFormular", ["de"]="LadeFormular", ["en"]="LoadForm", ["fr"]="ChargeForm", ["it"]="CaricaForm", ["nl"]="LaadFormulier", ["pe"]="بارگذاشتن‌فرم", ["ro"]="IncarcaFormular", }, ["MONTH"]={ ["cs"]="MESIC", ["de"]="MONAT", ["en"]="MONTH", ["fr"]="MOIS", ["it"]="MESE", ["nl"]="MAAND", ["pe"]="ماه", ["ro"]="LUNA", }, ["New"]={ ["cs"]="Novy", ["de"]="Neu", ["en"]="New", ["fr"]="Nouveau", ["it"]="Nuovo", ["nl"]="Nieuw", ["pe"]="جدید", ["ro"]="Nou", }, ["NextJump"]={ ["cs"]="NasledujiciSkok", ["de"]="NaechsterSprung", ["en"]="NextJump", ["fr"]="SautSuivant", ["it"]="SaltoSuccessivo", ["nl"]="VolgendeSprong", ["pe"]="پرش‌بعدی", ["ro"]="SaltUrmator", }, ["NextPage"]={ ["cs"]="DalsiStrana", ["de"]="FolgendeSeite", ["en"]="NextPage", ["fr"]="PageSuivante", ["it"]="PaginaSuccessiva", ["nl"]="VolgendePagina", ["pe"]="صفحه‌بعدی", ["ro"]="PaginaUrmatoare", }, ["Numbers"]={ ["cs"]="Cisla", ["de"]="Ziffern", ["en"]="Numbers", ["fr"]="Numeros", ["it"]="Numeri", ["nl"]="Cijfers", ["pe"]="شماره‌ها", ["ro"]="Numere", }, ["OpenNamedDocument"]={ ["cs"]="OpenNamedDocument", ["de"]="OpenNamedDocument", ["en"]="OpenNamedDocument", ["fr"]="OuvreDocumentNomme", ["it"]="OpenNamedDocument", ["nl"]="OpenDocumentOpNaam", ["pe"]="بازکردن‌نوشتار‌ذخیره‌شده", ["ro"]="OpenNamedDocument", }, ["Paragraph"]={ ["cs"]="Odstavec", ["de"]="Absatz", ["en"]="Paragraph", ["fr"]="Paragraphe", ["it"]="Capoverso", ["nl"]="Paragraaf", ["pe"]="پاراگراف", ["ro"]="Paragraf", }, ["PauseMovie"]={ ["cs"]="PozastavitFilm", ["de"]="PauseFilm", ["en"]="PauseMovie", ["fr"]="PauseFilm", ["it"]="PausaFilm", ["nl"]="PauzeerFilm", ["pe"]="ایست‌فیلم", ["ro"]="PauzaFilm", }, ["PauseRendering"]={ ["cs"]="PauseRendering", ["de"]="PauseRendering", ["en"]="PauseRendering", ["fr"]="PauseRendering", ["it"]="PauseRendering", ["nl"]="PauzeerRendering", ["pe"]="توقف‌تعبیر", ["ro"]="PauseRendering", }, ["PauseSound"]={ ["cs"]="PozastavitZvuk", ["de"]="PauseSound", ["en"]="PauseSound", ["fr"]="PauseSon", ["it"]="PausaSuono", ["nl"]="PauzeerGeluid", ["pe"]="ایست‌صدا", ["ro"]="PauzaSunet", }, ["PreviousJump"]={ ["cs"]="PredchoziSkok", ["de"]="VorigerSprung", ["en"]="PreviousJump", ["fr"]="SautPrecedent", ["it"]="SaltoPrecedente", ["nl"]="VorigeSprong", ["pe"]="پرش‌قبلی", ["ro"]="SaltPrecedent", }, ["PreviousPage"]={ ["cs"]="PredchoziStrana", ["de"]="VorigeSeite", ["en"]="PreviousPage", ["fr"]="PagePrecedente", ["it"]="PaginaPrecedente", ["nl"]="VorigePagina", ["pe"]="صفحه‌قبلی", ["ro"]="PaginaPrecedenta", }, ["PrintDocument"]={ ["cs"]="VytisknoutDokument", ["de"]="DruckeDokument", ["en"]="PrintDocument", ["fr"]="ImprimeDocument", ["it"]="StampaDocumento", ["nl"]="PrintDocument", ["pe"]="چاپ‌نوشتار", ["ro"]="TiparesteDocument", }, ["Query"]={ ["cs"]="Query", ["de"]="Query", ["en"]="Query", ["fr"]="Query", ["it"]="Richiesta", ["nl"]="RaadpleegDocument", ["pe"]="پرسش", ["ro"]="Query", }, ["QueryAgain"]={ ["cs"]="QueryAgain", ["de"]="QueryAgain", ["en"]="QueryAgain", ["fr"]="QueryAgain", ["it"]="RinnovaRichiesta", ["nl"]="HerhaalRaadplegen", ["pe"]="پرسش‌دوباره", ["ro"]="QueryAgain", }, ["ResetForm"]={ ["cs"]="ResetFormulare", ["de"]="ZuruecksetzenFormular", ["en"]="ResetForm", ["fr"]="RazForm", ["it"]="ReimpostaForm", ["nl"]="ResetFormulier", ["pe"]="دوباره‌نشانی‌فرم", ["ro"]="ResetareFormular", }, ["ResumeMovie"]={ ["cs"]="PokracovatFilm", ["de"]="FortsetzenFilm", ["en"]="ResumeMovie", ["fr"]="ReprendFilm", ["it"]="RiprendiFilm", ["nl"]="HervatFilm", ["pe"]="ادامه‌فیلم", ["ro"]="RepornesteFilm", }, ["ResumeRendering"]={ ["cs"]="ResumeRendering", ["de"]="ResumeRendering", ["en"]="ResumeRendering", ["fr"]="ResumeRendering", ["it"]="ResumeRendering", ["nl"]="HervatRendering", ["pe"]="ادامه‌تعبیر", ["ro"]="ResumeRendering", }, ["ResumeSound"]={ ["cs"]="PokracovatZvuk", ["de"]="ResumeSound", ["en"]="ResumeSound", ["fr"]="ReprendSon", ["it"]="RiprendiSuono", ["nl"]="HervatGeluid", ["pe"]="ادامه‌صدا", ["ro"]="RepornesteSunet", }, ["Romannumerals"]={ ["cs"]="Rimskecislice", ["de"]="Roemischezahlen", ["en"]="Romannumerals", ["fr"]="Chiffresromains", ["it"]="Numeriromani", ["nl"]="Romeins", ["pe"]="اعداد‌بزرگ‌لاتین", ["ro"]="Numereromane", }, ["SaveDocument"]={ ["cs"]="UlozitDokument", ["de"]="SpeichereDokument", ["en"]="SaveDocument", ["fr"]="SauvegardeDocument", ["it"]="SalvaDocumento", ["nl"]="BewaarDocument", ["pe"]="ذخیره‌نوشتار", ["ro"]="SalvareDocument", }, ["SaveForm"]={ ["cs"]="UlozitFormular", ["de"]="SpeicheFormular", ["en"]="SaveForm", ["fr"]="SauvegardeForm", ["it"]="SalvaForm", ["nl"]="BewaarFormulier", ["pe"]="ذخیره‌فرم", ["ro"]="SalveazaFormular", }, ["SaveNamedDocument"]={ ["cs"]="SaveNamedDocument", ["de"]="SaveNamedDocument", ["en"]="SaveNamedDocument", ["fr"]="SauvegardeDocumentNomme", ["it"]="SaveNamedDocument", ["nl"]="BewaarDocumentOpNaam", ["pe"]="ذخیره‌نوشتار‌بانام", ["ro"]="SaveNamedDocument", }, ["SearchAgain"]={ ["cs"]="HledatZnovu", ["de"]="WeiterSuchen", ["en"]="SearchAgain", ["fr"]="RechercheSuivant", ["it"]="CercaAncora", ["nl"]="HerhaalZoeken", ["pe"]="جستجوی‌دوباره", ["ro"]="CautaDinNou", }, ["SearchDocument"]={ ["cs"]="ProhledatDokument", ["de"]="DokumentDurchsuchen", ["en"]="SearchDocument", ["fr"]="RechercheDocument", ["it"]="CercaDocumento", ["nl"]="DoorzoekDocument", ["pe"]="جستجوی‌نوشتار", ["ro"]="CautaDocument", }, ["ShowBookmarks"]={ ["cs"]="UkazZalozky", ["de"]="ShowBookmarks", ["en"]="ShowBookmarks", ["fr"]="ShowBookmarks", ["it"]="MostraSegnalibro", ["nl"]="ShowBookmarks", ["pe"]="نمایش‌چوبخط", ["ro"]="ShowBookmarks", }, ["ShowField"]={ ["cs"]="UkazPole", ["de"]="ZeigeFeld", ["en"]="ShowField", ["fr"]="MontreChamp", ["it"]="MostraCampo", ["nl"]="ToonVeld", ["pe"]="نمایش‌میدان", ["ro"]="AfiseazaCamp", }, ["ShowThumbs"]={ ["cs"]="UkazNahledy", ["de"]="ShowThumbs", ["en"]="ShowThumbs", ["fr"]="ShowThumbs", ["it"]="MostraThumbs", ["nl"]="ShowThumbs", ["pe"]="نمایش‌شصت", ["ro"]="ShowThumbs", }, ["StartMovie"]={ ["cs"]="SpustitFilm", ["de"]="StartFilm", ["en"]="StartMovie", ["fr"]="DemarreFilm", ["it"]="IniziaFilm", ["nl"]="StartFilm", ["pe"]="شروع‌فیلم", ["ro"]="StartFilm", }, ["StartRendering"]={ ["cs"]="StartRendering", ["de"]="StartRendering", ["en"]="StartRendering", ["fr"]="StartRendering", ["it"]="StartRendering", ["nl"]="StartRendering", ["pe"]="شروع‌تعبیر", ["ro"]="StartRendering", }, ["StartSound"]={ ["cs"]="StartZvuk", ["de"]="StartSound", ["en"]="StartSound", ["fr"]="DemarreSon", ["it"]="IniziaSuono", ["nl"]="StartGeluid", ["pe"]="شروع‌صدا", ["ro"]="StartSunet", }, ["StopMovie"]={ ["cs"]="ZastavitFilm", ["de"]="StopFilm", ["en"]="StopMovie", ["fr"]="StoppeFilm", ["it"]="FermaFilm", ["nl"]="StopFilm", ["pe"]="پایان‌فیلم", ["ro"]="StopFilm", }, ["StopRendering"]={ ["cs"]="StopRendering", ["de"]="StopRendering", ["en"]="StopRendering", ["fr"]="StopRendering", ["it"]="StopRendering", ["nl"]="StopRendering", ["pe"]="پایان‌تعبیر", ["ro"]="StopRendering", }, ["StopSound"]={ ["cs"]="StopZvuk", ["de"]="StopSound", ["en"]="StopSound", ["fr"]="StoppeSon", ["it"]="FermaSuono", ["nl"]="StopGeluid", ["pe"]="پایان‌صدا", ["ro"]="StopSunet", }, ["SubmitForm"]={ ["cs"]="PoslatFormular", ["de"]="VersendeFormular", ["en"]="SubmitForm", ["fr"]="SoumettreForm", ["it"]="MandaForm", ["nl"]="VerzendFormulier", ["pe"]="تسلیم‌فرم", ["ro"]="TrimiteFormular", }, ["ToggleLayer"]={ ["cs"]="ToggleLayer", ["de"]="ToggleLayer", ["en"]="ToggleLayer", ["fr"]="ToggleLayer", ["it"]="ToggleLayer", ["nl"]="WisselLaag", ["pe"]="تغییرلایه", ["ro"]="ToggleLayer", }, ["ToggleViewer"]={ ["cs"]="ZmenitProhlizec", ["de"]="WechseleViewer", ["en"]="ToggleViewer", ["fr"]="ChangeVisualisateur", ["it"]="ScambiaVisualizzatore", ["nl"]="WisselViewer", ["pe"]="تغییرنمایشگر", ["ro"]="SchimbaVizualizator", }, ["URL"]={ ["cs"]="URL", ["de"]="URL", ["en"]="URL", ["fr"]="URL", ["it"]="URL", ["nl"]="URL", ["pe"]="URL", ["ro"]="URL", }, ["VideLayer"]={ ["cs"]="VideLayer", ["de"]="VideLayer", ["en"]="VideLayer", ["fr"]="VideLayer", ["it"]="VideLayer", ["nl"]="ToonLaag", ["pe"]="VideLayer", ["ro"]="VideLayer", }, ["ViewerHelp"]={ ["cs"]="NapovedaProhlizece", ["de"]="ViewerHilfe", ["en"]="ViewerHelp", ["fr"]="AideVisualisateur", ["it"]="AiutoVisualizzatore", ["nl"]="ViewerHelp", ["pe"]="کمک‌نمایشگر", ["ro"]="AjutorVizualizator", }, ["WEEKDAY"]={ ["cs"]="VSEDNIDEN", ["de"]="WOCHENTAG", ["en"]="WEEKDAY", ["fr"]="JOURSEMAINE", ["it"]="GIORNOSETTIMANA", ["nl"]="WEEKDAG", ["pe"]="روزهفته", ["ro"]="ZISAPTAMANA", }, ["WORD"]={ ["cs"]="SLOVO", ["de"]="WORT", ["en"]="WORD", ["fr"]="MOT", ["it"]="PAROLA", ["nl"]="WOORD", ["pe"]="کلمه", ["ro"]="CUVANT", }, ["WORDS"]={ ["cs"]="SLOVA", ["de"]="WOERTER", ["en"]="WORDS", ["fr"]="MOTS", ["it"]="PAROLE", ["nl"]="WOORDEN", ["pe"]="WORDS", ["ro"]="CUVINTE", }, ["word"]={ ["cs"]="slovo", ["de"]="wort", ["en"]="word", ["fr"]="mot", ["it"]="parola", ["nl"]="woord", ["pe"]="word", ["ro"]="cuvant", }, ["Word"]={ ["cs"]="Slovo", ["de"]="Wort", ["en"]="Word", ["fr"]="Mot", ["it"]="Parola", ["nl"]="Woord", ["pe"]="Word", ["ro"]="Cuvant", }, ["Words"]={ ["cs"]="Slova", ["de"]="Woerter", ["en"]="Words", ["fr"]="Mots", ["it"]="Parole", ["nl"]="Woorden", ["pe"]="Words", ["ro"]="Cuvinte", }, ["abbreviation"]={ ["cs"]="zkratka", ["de"]="abkuerzung", ["en"]="abbreviation", ["fr"]="abreviation", ["it"]="abbreviazione", ["nl"]="afkorting", ["pe"]="اختصار", ["ro"]="abreviere", }, ["abbreviations"]={ ["cs"]="zkratky", ["de"]="abkuerzungen", ["en"]="abbreviations", ["fr"]="abreviations", ["it"]="abbreviazioni", ["nl"]="afkortingen", ["pe"]="اختصارات", ["ro"]="abrevieri", }, ["absolute"]={ ["cs"]="absolutni", ["de"]="absolut", ["en"]="absolute", ["fr"]="absolute", ["it"]="assoluto", ["nl"]="absoluut", ["pe"]="قطعی", ["ro"]="absolut", }, ["action"]={ ["cs"]="akce", ["de"]="aktion", ["en"]="action", ["fr"]="action", ["it"]="azione", ["nl"]="actie", ["pe"]="کنش", ["ro"]="actiune", }, ["after"]={ ["cs"]="po", ["de"]="nach", ["en"]="after", ["fr"]="apres", ["it"]="dopo", ["nl"]="na", ["pe"]="بعداز", ["ro"]="dupa", }, ["all"]={ ["cs"]="vse", ["de"]="alles", ["en"]="all", ["fr"]="tout", ["it"]="tutti", ["nl"]="alles", ["pe"]="همه", ["ro"]="tot", }, ["always"]={ ["cs"]="vzdy", ["de"]="immer", ["en"]="always", ["fr"]="toujours", ["it"]="sempre", ["nl"]="altijd", ["pe"]="همواره", ["ro"]="totdeauna", }, ["and"]={ --["cs"]="", ["de"]="und", ["en"]="and", --["fr"]="", --["it"]="", ["nl"]="en", --["pe"]="", --["ro"]="", }, ["answerarea"]={ ["cs"]="answerarea", ["de"]="answerarea", ["en"]="answerarea", ["fr"]="answerarea", ["it"]="answerarea", ["nl"]="antwoordgebied", ["pe"]="answerarea", ["ro"]="answerarea", }, ["appendices"]={ ["cs"]="dodatky", ["de"]="anhaenge", ["en"]="appendices", ["fr"]="annexes", ["it"]="appendici", ["nl"]="bijlagen", ["pe"]="پیوستها", ["ro"]="apendixuri", }, ["appendix"]={ ["cs"]="dodatek", ["de"]="anhang", ["en"]="appendix", ["fr"]="annexe", ["it"]="appendice", ["nl"]="bijlage", ["pe"]="پیوست", ["ro"]="apendix", }, ["april"]={ ["cs"]="duben", ["de"]="april", ["en"]="april", ["fr"]="avril", ["it"]="aprile", ["nl"]="april", ["pe"]="آوریل", ["ro"]="aprilie", }, ["attachment"]={ ["en"]="attachment", ["nl"]="aanhangsel", }, ["atmargin"]={ ["cs"]="naokraji", ["de"]="amrand", ["en"]="atmargin", ["fr"]="alamarge", ["it"]="almargine", ["nl"]="opmarge", ["pe"]="درحاشیه", ["ro"]="lamargine", }, ["atpage"]={ ["cs"]="nastrance", ["de"]="aufseite", ["en"]="atpage", ["fr"]="alapage", ["it"]="apagina", ["nl"]="oppagina", ["pe"]="درصفحه", ["ro"]="lapagina", }, ["august"]={ ["cs"]="srpen", ["de"]="august", ["en"]="august", ["fr"]="août", ["it"]="agosto", ["nl"]="augustus", ["pe"]="آگوست", ["ro"]="august", }, ["auto"]={ ["cs"]="auto", ["de"]="auto", ["en"]="auto", ["fr"]="auto", ["it"]="auto", ["nl"]="auto", ["pe"]="خودکار", ["ro"]="auto", }, ["autointro"]={ ["cs"]="autouvod", ["de"]="autointro", ["en"]="autointro", ["fr"]="autointro", ["it"]="autointro", ["nl"]="autointro", ["pe"]="پیشگفتارخودکار", ["ro"]="autointro", }, ["back"]={ ["cs"]="zpet", ["de"]="zurueck", ["en"]="back", ["fr"]="retour", ["it"]="dietro", ["nl"]="terug", ["pe"]="پشت", ["ro"]="inapot", }, ["background"]={ ["cs"]="pozadi", ["de"]="hintergrund", ["en"]="background", ["fr"]="arriereplan", ["it"]="sfondo", ["nl"]="achtergrond", ["pe"]="پس‌زمینه", ["ro"]="fundal", }, ["backmatter"]={ ["cs"]="epilogy", ["de"]="epiloge", ["en"]="backmatter", ["fr"]="epilogue", ["it"]="postambolo", ["nl"]="uitleidingen", ["pe"]="پس‌مطلب", ["ro"]="epilogul", }, ["backpart"]={ ["cs"]="epilog", ["de"]="epilog", ["en"]="backpart", ["fr"]="postface", ["it"]="postfazione", ["nl"]="uitleiding", ["pe"]="پس‌قسمت", ["ro"]="epilog", }, ["backspace"]={ ["cs"]="zpetnamezera", ["de"]="rumpfspatium", ["en"]="backspace", ["fr"]="retourarriere", ["it"]="backspace", ["nl"]="rugwit", ["pe"]="فضای‌پشت", ["ro"]="spatiuspate", }, ["backward"]={ ["cs"]="zpet", ["de"]="rueckwaerts", ["en"]="backward", ["fr"]="retourarriere", ["it"]="indietro", ["nl"]="achteruit", ["pe"]="عقب‌گرد", ["ro"]="inapoi", }, ["before"]={ ["cs"]="pred", ["de"]="vor", ["en"]="before", ["fr"]="avant", ["it"]="prima", ["nl"]="voor", ["pe"]="قبل‌از", ["ro"]="inainte", }, ["big"]={ ["cs"]="velke", ["de"]="gross", ["en"]="big", ["fr"]="grand", ["it"]="grande", ["nl"]="groot", ["pe"]="بزرگ", ["ro"]="mare", }, ["bigbodyfont"]={ ["cs"]="bigbodyfont", ["de"]="bigbodyfont", ["en"]="bigbodyfont", ["fr"]="grandepolicecorp", ["it"]="grossofontdeltesto", ["nl"]="grootkorps", ["pe"]="قلم‌بدنه‌بزرگ", ["ro"]="bigbodyfont", }, ["bigpreference"]={ ["cs"]="vysokapriorita", ["de"]="grosszuegig", ["en"]="bigpreference", ["fr"]="grandepreference", ["it"]="grandepreferenza", ["nl"]="grotevoorkeur", ["pe"]="اولویت‌بزرگ", ["ro"]="preferintamare", }, ["blank"]={ ["cs"]="prazdny", ["de"]="blanko", ["en"]="blank", ["fr"]="vide", ["it"]="rigovuoto", ["nl"]="blanko", ["pe"]="خالی", ["ro"]="blank", }, ["blockquote"]={ ["cs"]="blockquote", ["de"]="blockquote", ["en"]="blockquote", ["fr"]="blockquote", ["it"]="blockquote", ["nl"]="blokcitaat", ["pe"]="نقل‌بلوک", ["ro"]="blockquote", }, ["bodymatter"]={ ["cs"]="hlavnicasti", ["de"]="haupttexte", ["en"]="bodymatter", ["fr"]="texteprincipal", ["it"]="testiprincipali", ["nl"]="hoofdteksten", ["pe"]="مطلب‌بدنه", ["ro"]="principalul", }, ["bodypart"]={ ["cs"]="hlavnicast", ["de"]="haupttext", ["en"]="bodypart", ["fr"]="corpsdetexte", ["it"]="testoprincipale", ["nl"]="hoofdtekst", ["pe"]="قسمت‌بدنه", ["ro"]="principal", }, ["bold"]={ ["cs"]="tucne", ["de"]="fett", ["en"]="bold", ["fr"]="gras", ["it"]="grassetto", ["nl"]="vet", ["pe"]="مشکی", ["ro"]="aldin", }, ["bolditalic"]={ ["cs"]="tucnekurzivni", ["de"]="fettitalic", ["en"]="bolditalic", ["fr"]="italiquegras", ["it"]="grassettocorsivo", ["nl"]="vetitalic", ["pe"]="ایتالیک‌مشکی", ["ro"]="aldinitalic", }, ["boldslanted"]={ ["cs"]="tucnesklonene", ["de"]="fettgeneigt", ["en"]="boldslanted", ["fr"]="inclinegras", ["it"]="grassettoinclinato", ["nl"]="vetschuin", ["pe"]="خوابیده‌مشکی", ["ro"]="aldininclinat", }, ["bookmark"]={ ["cs"]="zalozka", ["de"]="bookmark", ["en"]="bookmark", ["fr"]="marquepage", ["it"]="segnalibro", ["nl"]="bookmark", ["pe"]="چوبخط", ["ro"]="semncarte", }, ["both"]={ ["cs"]="obe", ["de"]="beide", ["en"]="both", ["fr"]="lesdeux", ["it"]="entrambi", ["nl"]="beide", ["pe"]="هردو", ["ro"]="ambele", }, ["bottom"]={ ["cs"]="spodek", ["de"]="unten", ["en"]="bottom", ["fr"]="inf", ["it"]="fondo", ["nl"]="onder", ["pe"]="پایین", ["ro"]="subsol", }, ["brief"]={ ["cs"]="brief", ["de"]="brief", ["en"]="brief", ["fr"]="brief", ["it"]="brief", ["nl"]="brief", ["pe"]="مختصر", ["ro"]="brief", }, ["broad"]={ ["cs"]="siroky", ["de"]="breit", ["en"]="broad", ["fr"]="large", ["it"]="ampio", ["nl"]="ruim", ["pe"]="گسترده", ["ro"]="broad", }, ["buffer"]={ ["cs"]="buffer", ["de"]="puffer", ["en"]="buffer", ["fr"]="buffer", ["it"]="buffer", ["nl"]="buffer", ["pe"]="بافر", ["ro"]="buffer", }, ["by"]={ ["cs"]="skrz", ["de"]="pro", ["en"]="by", ["fr"]="par", ["it"]="da", ["nl"]="per", ["pe"]="بوسیله", ["ro"]="de", }, ["calligraphic"]={ ["cs"]="kaligraficke", ["de"]="kalligraphie", ["en"]="calligraphic", ["fr"]="calligraphique", ["it"]="calligrafico", ["nl"]="calligrafie", ["pe"]="خوشنویسی", ["ro"]="caligrafic", }, ["cap"]={ ["cs"]="kap", ["de"]="kap", ["en"]="cap", ["fr"]="cap", ["it"]="cap", ["nl"]="kap", ["pe"]="cap", ["ro"]="cap", }, ["Cap"]={ ["cs"]="Kap", ["de"]="Kap", ["en"]="Cap", ["fr"]="Cap", ["it"]="Cap", ["nl"]="Kap", ["pe"]="Cap", ["ro"]="Cap", }, ["capital"]={ ["cs"]="kapitalky", ["de"]="versalien", ["en"]="capital", ["fr"]="capitale", ["it"]="maiuscolo", ["nl"]="kapitaal", ["pe"]="capital", ["ro"]="majuscula", }, ["Capital"]={ ["cs"]="Kapitalky", ["de"]="Versalien", ["en"]="Capital", ["fr"]="Capitale", ["it"]="Maiuscolo", ["nl"]="Kapitaal", ["pe"]="Capital", ["ro"]="Majuscula", }, ["center"]={ ["cs"]="center", ["de"]="center", ["en"]="center", ["fr"]="center", ["it"]="center", ["nl"]="centreer", ["pe"]="مرکز", ["ro"]="center", }, ["chapter"]={ ["cs"]="kapitola", ["de"]="kapitel", ["en"]="chapter", ["fr"]="chapitre", ["it"]="capitolo", ["nl"]="hoofdstuk", ["pe"]="فصل", ["ro"]="capitol", }, ["character"]={ ["cs"]="pismeno", ["de"]="buchstabe", ["en"]="character", ["fr"]="caractere", ["it"]="lettera", ["nl"]="letter", ["pe"]="حرف", ["ro"]="caracter", }, ["characters"]={ ["cs"]="pismena", ["de"]="buchstaben", ["en"]="characters", ["fr"]="caracteres", ["it"]="lettere", ["nl"]="letters", ["pe"]="حرفها", ["ro"]="caractere", }, ["chemistry"]={ ["en"]="chemistry", ["nl"]="chemie", }, ["color"]={ ["cs"]="barevne", ["de"]="farbe", ["en"]="color", ["fr"]="couleur", ["it"]="colore", ["nl"]="kleur", ["pe"]="رنگ", ["ro"]="culoare", }, ["column"]={ ["cs"]="column", ["de"]="column", ["en"]="column", ["fr"]="colonne", ["it"]="colonna", ["nl"]="kolom", ["pe"]="ستون", ["ro"]="coloana", }, ["columns"]={ ["cs"]="sloupce", ["de"]="spalten", ["en"]="columns", ["fr"]="colonnes", ["it"]="colonne", ["nl"]="kolommen", ["pe"]="ستونها", ["ro"]="coloane", }, ["command"]={ ["cs"]="prikaz", ["de"]="befehl", ["en"]="command", ["fr"]="commande", ["it"]="comando", ["nl"]="commando", ["pe"]="فرمان", ["ro"]="comanda", }, ["commands"]={ ["cs"]="prikazy", ["de"]="befehle", ["en"]="commands", ["fr"]="commandes", ["it"]="comandi", ["nl"]="commandos", ["pe"]="فرمانها", ["ro"]="comenzi", }, ["comment"]={ ["cs"]="komentar", ["de"]="kommentar", ["en"]="comment", ["fr"]="commentaire", ["it"]="commento", ["nl"]="commentaar", ["pe"]="توضیح", ["ro"]="comentariu", }, ["component"]={ ["cs"]="komponenta", ["de"]="komponente", ["en"]="component", ["fr"]="composant", ["it"]="componente", ["nl"]="onderdeel", ["pe"]="مولفه", ["ro"]="componenta", }, ["concept"]={ ["cs"]="koncept", ["de"]="konzept", ["en"]="concept", ["fr"]="concept", ["it"]="concetto", ["nl"]="concept", ["pe"]="مفهوم", ["ro"]="concept", }, ["content"]={ ["cs"]="obsah", ["de"]="inhalt", ["en"]="content", ["fr"]="contenu", ["it"]="indice", ["nl"]="inhoud", ["pe"]="محتوا", ["ro"]="cuprins", }, ["contents"]={ ["cs"]="obsah", ["de"]="inhalte", ["en"]="contents", ["fr"]="contenus", ["it"]="indici", ["nl"]="inhouden", ["pe"]="محتویات", ["ro"]="cuprinsuri", }, ["continue"]={ ["cs"]="pokracovat", ["de"]="fortsetzten", ["en"]="continue", ["fr"]="continue", ["it"]="continua", ["nl"]="verder", ["pe"]="ادامه", ["ro"]="continuu", }, ["continued"]={ ["en"]="continued", ["nl"]="vervolgd", }, ["controls"]={ ["cs"]="controls", ["de"]="controls", ["en"]="controls", ["fr"]="controles", ["it"]="controlli", ["nl"]="sturing", ["pe"]="کنترلها", ["ro"]="controale", }, ["conversion"]={ ["cs"]="konverze", ["de"]="konversion", ["en"]="conversion", ["fr"]="conversion", ["it"]="coversione", ["nl"]="conversie", ["pe"]="تبدیل", ["ro"]="conversie", }, ["current"]={ ["cs"]="aktualni", ["de"]="aktuell", ["en"]="current", ["fr"]="courant", ["it"]="corrente", ["nl"]="huidige", ["pe"]="جاری", ["ro"]="curent", }, ["cutspace"]={ ["cs"]="cutspace", ["de"]="cutspace", ["en"]="cutspace", ["fr"]="cutspace", ["it"]="cutspace", ["nl"]="snijwit", ["pe"]="فضای‌برش", ["ro"]="cutspace", }, ["date"]={ ["cs"]="datum", ["de"]="datum", ["en"]="date", ["fr"]="date", ["it"]="data", ["nl"]="datum", ["pe"]="تاریخ", ["ro"]="data", }, ["day"]={ ["cs"]="den", ["de"]="tag", ["en"]="day", ["fr"]="jour", ["it"]="giorno", ["nl"]="dag", ["pe"]="روز", ["ro"]="zi", }, ["december"]={ ["cs"]="prosinec", ["de"]="dezember", ["en"]="december", ["fr"]="decembre", ["it"]="dicembre", ["nl"]="december", ["pe"]="دسامبر", ["ro"]="decembrie", }, ["default"]={ ["cs"]="implicitni", ["de"]="default", ["en"]="default", ["fr"]="defaut", ["it"]="implicito", ["nl"]="default", ["pe"]="پیش‌فرض", ["ro"]="implicit", }, ["depth"]={ ["cs"]="podlehloubky", ["de"]="tiefe", ["en"]="depth", ["fr"]="profondeur", ["it"]="profondita", ["nl"]="diepte", ["pe"]="عمق", ["ro"]="adancime", }, ["description"]={ ["cs"]="popis", ["de"]="beschreibung", ["en"]="description", ["fr"]="description", ["it"]="descrizione", ["nl"]="doordefinitie", ["pe"]="شرح", ["ro"]="descriere", }, ["disable"]={ ["cs"]="zablokovat", ["de"]="sperren", ["en"]="disable", ["fr"]="desactiver", ["it"]="disattiva", ["nl"]="blokkeer", ["pe"]="ناتوان", ["ro"]="dezactivat", }, ["display"]={ ["cs"]="obrazovka", ["de"]="bildschirm", ["en"]="display", ["fr"]="affichage", ["it"]="schermo", ["nl"]="scherm", ["pe"]="نمایش", ["ro"]="display", }, ["dot"]={ ["cs"]="tecka", ["de"]="punkt", ["en"]="dot", ["fr"]="point", ["it"]="punto", ["nl"]="punt", ["pe"]="نقطه", ["ro"]="punct", }, ["doublesided"]={ ["cs"]="dvoustranny", ["de"]="doppelseitig", ["en"]="doublesided", ["fr"]="rectoverso", ["it"]="doppiafaccia", ["nl"]="dubbelzijdig", ["pe"]="دورو", ["ro"]="douafete", }, ["each"]={ ["cs"]="kazdy", ["de"]="jede", ["en"]="each", ["fr"]="chaque", ["it"]="ogni", ["nl"]="elk", ["pe"]="هر", ["ro"]="fiecare", }, ["edge"]={ ["cs"]="hrana", ["de"]="kante", ["en"]="edge", ["fr"]="bord", ["it"]="bordo", ["nl"]="rand", ["pe"]="لبه", ["ro"]="bordura", }, ["empty"]={ ["cs"]="prazdne", ["de"]="leer", ["en"]="empty", ["fr"]="vide", ["it"]="vuoto", ["nl"]="leeg", ["pe"]="تهی", ["ro"]="gol", }, ["endnote"]={ ["cs"]="endnote", ["de"]="endnote", ["en"]="endnote", ["fr"]="notefin", ["it"]="endnote", ["nl"]="eindnoot", ["pe"]="ته‌نوشت", ["ro"]="endnote", }, ["enumeration"]={ ["cs"]="vycet", ["de"]="nummerierung", ["en"]="enumeration", ["fr"]="enumeration", ["it"]="enumerazione", ["nl"]="doornummering", ["pe"]="شماره‌بندی", ["ro"]="enumerare", }, ["environment"]={ ["cs"]="prostredi", ["de"]="umgebung", ["en"]="environment", ["fr"]="environement", ["it"]="ambiente", ["nl"]="omgeving", ["pe"]="محیط", ["ro"]="mediu", }, ["even"]={ ["cs"]="sude", ["de"]="gerade", ["en"]="even", ["fr"]="paire", ["it"]="pari", ["nl"]="even", ["pe"]="زوج", ["ro"]="par", }, ["external"]={ ["cs"]="externi", ["de"]="extern", ["en"]="external", ["fr"]="external", ["it"]="esterno", ["nl"]="extern", ["pe"]="خارجی", ["ro"]="extern", }, ["fact"]={ ["cs"]="fakt", ["de"]="gegeben", ["en"]="fact", ["fr"]="fait", ["it"]="fatto", ["nl"]="gegeven", ["pe"]="fact", ["ro"]="fapt", }, ["february"]={ ["cs"]="unor", ["de"]="februar", ["en"]="february", ["fr"]="fevrier", ["it"]="febbraio", ["nl"]="februari", ["pe"]="فوریه", ["ro"]="februarie", }, ["figure"]={ ["cs"]="obrazek", ["de"]="abbildung", ["en"]="figure", ["fr"]="figure", ["it"]="figura", ["nl"]="figuur", ["pe"]="شکل", ["ro"]="figura", }, ["figures"]={ ["cs"]="obrazky", ["de"]="abbildungen", ["en"]="figures", ["fr"]="figures", ["it"]="figure", ["nl"]="figuren", ["pe"]="شکلها", ["ro"]="figure", }, ["file"]={ ["cs"]="soubor", ["de"]="datei", ["en"]="file", ["fr"]="fichier", ["it"]="file", ["nl"]="file", ["pe"]="پرونده", ["ro"]="fisier", }, ["final"]={ ["cs"]="finalni", ["de"]="endfassung", ["en"]="final", ["fr"]="final", ["it"]="finale", ["nl"]="definitief", ["pe"]="نهایی", ["ro"]="final", }, ["first"]={ ["cs"]="prvni", ["de"]="erste", ["en"]="first", ["fr"]="premier", ["it"]="primo", ["nl"]="eerste", ["pe"]="اولی", ["ro"]="primul", }, ["firstcolumn"]={ ["cs"]="firstcolumn", ["de"]="firstcolumn", ["en"]="firstcolumn", ["fr"]="premierecolonne", ["it"]="firstcolumn", ["nl"]="eerstekolom", ["pe"]="ستون‌اول", ["ro"]="firstcolumn", }, ["firstpage"]={ ["cs"]="prvnistranka", ["de"]="ersteseite", ["en"]="firstpage", ["fr"]="premierepage", ["it"]="primapagina", ["nl"]="eerstepagina", ["pe"]="صفحه‌اول", ["ro"]="primapagina", }, ["firstsubpage"]={ ["cs"]="prvnipodstranka", ["de"]="ersteunterseite", ["en"]="firstsubpage", ["fr"]="premieresouspage", ["it"]="primasottopagina", ["nl"]="eerstesubpagina", ["pe"]="زیرصفحه‌اول", ["ro"]="primasubpagina", }, ["fit"]={ ["cs"]="prizpusobive", ["de"]="passend", ["en"]="fit", ["fr"]="adapte", ["it"]="adatta", ["nl"]="passend", ["pe"]="پرکردن", ["ro"]="ajustat", }, ["five"]={ ["cs"]="pet", ["de"]="fuenf", ["en"]="five", ["fr"]="cinq", ["it"]="cinque", ["nl"]="vijf", ["pe"]="پنج", ["ro"]="cinci", }, ["fix"]={ ["cs"]="fixuj", ["de"]="stellewiederher", ["en"]="fix", ["fr"]="fixe", ["it"]="fisso", ["nl"]="herstel", ["pe"]="ثابت‌کن", ["ro"]="fix", }, ["fixed"]={ ["cs"]="fixne", ["de"]="fest", ["en"]="fixed", ["fr"]="fixe", ["it"]="fisso", ["nl"]="vast", ["pe"]="ثابت", ["ro"]="fixat", }, ["flexible"]={ ["cs"]="prizpusobive", ["de"]="flexibel", ["en"]="flexible", ["fr"]="flexible", ["it"]="flessibile", ["nl"]="flexibel", ["pe"]="انعطافپذیر", ["ro"]="flexibil", }, ["float"]={ ["cs"]="plvouciobjekt", ["de"]="gleitobjekt", ["en"]="float", ["fr"]="flottant", ["it"]="oggettomobile", ["nl"]="blok", ["pe"]="شناور", ["ro"]="obiectmobil", }, ["flushinner"]={ ["cs"]="flushinner", ["de"]="flushinner", ["en"]="flushinner", ["fr"]="flushinner", ["it"]="flushinner", ["nl"]="lijnbinnen", ["pe"]="پمپ‌داخلی", ["ro"]="flushinner", }, ["flushleft"]={ ["cs"]="flushleft", ["de"]="flushleft", ["en"]="flushleft", ["fr"]="flushleft", ["it"]="flushleft", ["nl"]="lijnlinks", ["pe"]="پمپ‌چپ", ["ro"]="flushleft", }, ["flushouter"]={ ["cs"]="flushouter", ["de"]="flushouter", ["en"]="flushouter", ["fr"]="flushouter", ["it"]="flushouter", ["nl"]="lijnbuiten", ["pe"]="پمپ‌خارجی", ["ro"]="flushouter", }, ["flushright"]={ ["cs"]="flushright", ["de"]="flushright", ["en"]="flushright", ["fr"]="flushright", ["it"]="flushright", ["nl"]="lijnrechts", ["pe"]="پمپ‌راست", ["ro"]="flushright", }, ["footer"]={ ["cs"]="upati", ["de"]="fusszeile", ["en"]="footer", ["fr"]="pdp", ["it"]="piedipagina", ["nl"]="voet", ["pe"]="ته‌برگ", ["ro"]="subsol", }, ["footnote"]={ ["cs"]="poznamkapodcarou", ["de"]="fussnote", ["en"]="footnote", ["fr"]="notepdp", ["it"]="notapdp", ["nl"]="voetnoot", ["pe"]="پانوشت", ["ro"]="notasubsol", }, ["force"]={ ["cs"]="sila", ["de"]="zwinge", ["en"]="force", ["fr"]="force", ["it"]="forza", ["nl"]="forceer", ["pe"]="اجبار", ["ro"]="fortat", }, ["foreground"]={ ["cs"]="popredi", ["de"]="vordergrund", ["en"]="foreground", ["fr"]="premierplan", ["it"]="foreground", ["nl"]="voorgrond", ["pe"]="پیش‌زمینه", ["ro"]="primplan", }, ["formeel"]={ ["cs"]="formeel", ["de"]="formeel", ["en"]="formeel", ["fr"]="formeel", ["it"]="formeel", ["nl"]="formeel", ["pe"]="formeel", ["ro"]="formeel", }, ["formula"]={ ["cs"]="rovnice", ["de"]="formel", ["en"]="formula", ["fr"]="formule", ["it"]="formula", ["nl"]="formule", ["pe"]="فرمول", ["ro"]="formula", }, ["formulae"]={ ["cs"]="rovnice", ["de"]="formeln", ["en"]="formulae", ["fr"]="formules", ["it"]="formule", ["nl"]="formules", ["pe"]="فرمولها", ["ro"]="formule", }, ["forward"]={ ["cs"]="vpred", ["de"]="vorwaerts", ["en"]="forward", ["fr"]="avance", ["it"]="avanti", ["nl"]="vooruit", ["pe"]="به‌جلو", ["ro"]="avans", }, ["four"]={ ["cs"]="ctyri", ["de"]="vier", ["en"]="four", ["fr"]="quatre", ["it"]="quattro", ["nl"]="vier", ["pe"]="چهار", ["ro"]="patru", }, ["frame"]={ ["cs"]="ramecek", ["de"]="rahmen", ["en"]="frame", ["fr"]="cadre", ["it"]="cornice", ["nl"]="kader", ["pe"]="قالب", ["ro"]="incadrat", }, ["framedtext"]={ ["cs"]="oramovanytext", ["de"]="umrahmtertext", ["en"]="framedtext", ["fr"]="texteencadre", ["it"]="testoincorniciato", ["nl"]="kadertekst", ["pe"]="متن‌قالبی", ["ro"]="textinconjurat", }, ["friday"]={ ["cs"]="patek", ["de"]="freitag", ["en"]="friday", ["fr"]="vendredi", ["it"]="venerdi", ["nl"]="vrijdag", ["pe"]="جمعه", ["ro"]="vineri", }, ["frontmatter"]={ ["cs"]="prednicasti", ["de"]="einleitungen", ["en"]="frontmatter", ["fr"]="preambule", ["it"]="preambolo", ["nl"]="inleidingen", ["pe"]="پیش‌مطلب", ["ro"]="prologul", }, ["frontpart"]={ ["cs"]="prednicast", ["de"]="einleitung", ["en"]="frontpart", ["fr"]="preface", ["it"]="prefazione", ["nl"]="inleiding", ["pe"]="پیش‌قسمت", ["ro"]="prolog", }, ["global"]={ ["cs"]="globalne", ["de"]="global", ["en"]="global", ["fr"]="global", ["it"]="globale", ["nl"]="globaal", ["pe"]="سراسری", ["ro"]="global", }, ["graphic"]={ ["cs"]="graf", ["de"]="grafik", ["en"]="graphic", ["fr"]="graphique", ["it"]="grafico", ["nl"]="grafiek", ["pe"]="گرافیک", ["ro"]="graficul", }, ["graphics"]={ ["cs"]="grafy", ["de"]="grafiken", ["en"]="graphics", ["fr"]="graphiques", ["it"]="grafici", ["nl"]="grafieken", ["pe"]="گرافیکها", ["ro"]="graficele", }, ["gray"]={ ["cs"]="seda", ["de"]="grau", ["en"]="gray", ["fr"]="gris", ["it"]="grigio", ["nl"]="grijs", ["pe"]="خاکستری", ["ro"]="gri", }, ["greek"]={ ["cs"]="recky", ["de"]="griechisch", ["en"]="greek", ["fr"]="grec", ["it"]="greco", ["nl"]="grieks", ["pe"]="یونانی", ["ro"]="grec", }, ["grid"]={ ["cs"]="mrizka", ["de"]="gritter", ["en"]="grid", ["fr"]="grille", ["it"]="griglia", ["nl"]="grid", ["pe"]="توری", ["ro"]="grila", }, ["halfline"]={ ["cs"]="pulradku", ["de"]="halbezeile", ["en"]="halfline", ["fr"]="demiligne", ["it"]="mezzariga", ["nl"]="halveregel", ["pe"]="نیم‌خط", ["ro"]="jumatatelinie", }, ["quarterline"]={ ["en"]="quarterline", ["nl"]="kwartregel", }, ["handwritten"]={ ["cs"]="rukopisne", ["de"]="handschrift", ["en"]="handwritten", ["fr"]="manuscript", ["it"]="grafiamanuale", ["nl"]="handschrift", ["pe"]="دست‌نوشته", ["ro"]="scrismanual", }, ["hang"]={ ["cs"]="zaveseni", ["de"]="haengend", ["en"]="hang", ["fr"]="suspend", ["it"]="sospendi", ["nl"]="hang", ["pe"]="بیاویز", ["ro"]="suspenda", }, ["hanging"]={ ["cs"]="visici", ["de"]="haengend", ["en"]="hanging", ["fr"]="suspend", ["it"]="sospeso", ["nl"]="hangend", ["pe"]="آویزان", ["ro"]="suspendat", }, ["head"]={ ["cs"]="hlavicka", ["de"]="kopf", ["en"]="head", ["fr"]="tete", ["it"]="testa", ["nl"]="kop", ["pe"]="سر", ["ro"]="antet", }, ["header"]={ ["cs"]="zahlavi", ["de"]="kopfzeile", ["en"]="header", ["fr"]="entete", ["it"]="intestazione", ["nl"]="hoofd", ["pe"]="سربرگ", ["ro"]="antet", }, ["height"]={ ["cs"]="vyska", ["de"]="hoehe", ["en"]="height", ["fr"]="hauteur", ["it"]="altezza", ["nl"]="hoogte", ["pe"]="ارتفاع", ["ro"]="inaltime", }, ["helptext"]={ ["cs"]="textnapovedy", ["de"]="hilfetext", ["en"]="helptext", ["fr"]="texteaide", ["it"]="testoaiuto", ["nl"]="helptekst", ["pe"]="متن‌کمکی", ["ro"]="textajutator", }, ["hencefore"]={ ["cs"]="vyse", ["de"]="vorher", ["en"]="hencefore", ["fr"]="precedent", ["it"]="precedente", ["nl"]="hierboven", ["pe"]="hencefore", ["ro"]="precedent", }, ["here"]={ ["cs"]="zde", ["de"]="hier", ["en"]="here", ["fr"]="ici", ["it"]="qui", ["nl"]="hier", ["pe"]="اینجا", ["ro"]="aici", }, ["hereafter"]={ ["cs"]="nize", ["de"]="nachher", ["en"]="hereafter", ["fr"]="suivant", ["it"]="seguente", ["nl"]="hieronder", ["pe"]="ازاین‌به‌بعد", ["ro"]="urmator", }, ["hidden"]={ ["cs"]="skryte", ["de"]="versteckt", ["en"]="hidden", ["fr"]="cache", ["it"]="nascosto", ["nl"]="verborgen", ["pe"]="پنهانی", ["ro"]="ascuns", }, ["hiding"]={ ["cs"]="skryt", ["de"]="verbergen", ["en"]="hiding", ["fr"]="cache", ["it"]="nascondere", ["nl"]="verbergen", ["pe"]="پنهان‌کردن", ["ro"]="ascundere", }, ["high"]={ ["cs"]="vysoko", ["de"]="hoch", ["en"]="high", ["fr"]="haut", ["it"]="alto", ["nl"]="hoog", ["pe"]="بلند", ["ro"]="inalt", }, ["horizontal"]={ ["cs"]="horizontalne", ["de"]="horizontal", ["en"]="horizontal", ["fr"]="horizontale", ["it"]="orizzontale", ["nl"]="horizontaal", ["pe"]="افقی", ["ro"]="orizontal", }, ["hyphenated"]={ ["cs"]="hyphenated", ["de"]="hyphenate", ["en"]="hyphenated", ["fr"]="hyphenated", ["it"]="sillabato", ["nl"]="afgebroken", ["pe"]="شکسته", ["ro"]="despsilabe", }, ["hz"]={ ["cs"]="hz", ["de"]="hz", ["en"]="hz", ["fr"]="hz", ["it"]="hz", ["nl"]="hz", ["pe"]="hz", ["ro"]="hz", }, ["inbetween"]={ ["cs"]="mezi", ["de"]="zwischen", ["en"]="inbetween", ["fr"]="entre", ["it"]="tra", ["nl"]="tussen", ["pe"]="دربین", ["ro"]="intre", }, ["index"]={ ["cs"]="rejstrik", ["de"]="index", ["en"]="index", ["fr"]="index", ["it"]="indiceanalitico", ["nl"]="index", ["pe"]="نمایه", ["ro"]="index", }, ["indices"]={ ["cs"]="rejstriky", ["de"]="indizies", ["en"]="indices", ["fr"]="indices", ["it"]="indicianalitici", ["nl"]="indices", ["pe"]="نمایه‌ها", ["ro"]="indexuri", }, ["informeel"]={ ["cs"]="informeel", ["de"]="informeel", ["en"]="informeel", ["fr"]="informeel", ["it"]="informeel", ["nl"]="informeel", ["pe"]="informeel", ["ro"]="informeel", }, ["inherit"]={ ["cs"]="inherit", ["de"]="inherit", ["en"]="inherit", ["fr"]="herite", ["it"]="inherit", ["nl"]="erf", ["pe"]="ارث‌بردن", ["ro"]="inherit", }, ["inleft"]={ ["cs"]="vlevo", ["de"]="imlinken", ["en"]="inleft", ["fr"]="dansgauche", ["it"]="insinistra", ["nl"]="inlinker", ["pe"]="درون‌چپ", ["ro"]="instanga", }, ["inmargin"]={ ["cs"]="naokraji", ["de"]="imrand", ["en"]="inmargin", ["fr"]="dansmarge", ["it"]="inmargine", ["nl"]="inmarge", ["pe"]="درون‌حاشیه", ["ro"]="inmargine", }, ["inner"]={ ["cs"]="uvnitr", ["de"]="innen", ["en"]="inner", ["fr"]="interieur", ["it"]="interno", ["nl"]="binnen", ["pe"]="داخلی", ["ro"]="intern", }, ["inneredge"]={ ["cs"]="inneredge", ["de"]="inneredge", ["en"]="inneredge", ["fr"]="bordinterieur", ["it"]="bordointerno", ["nl"]="binnenrand", ["pe"]="لبه‌داخلی", ["ro"]="inneredge", }, ["innermargin"]={ ["cs"]="innermargin", ["de"]="innermargin", ["en"]="innermargin", ["fr"]="margeinterieure", ["it"]="margineinterno", ["nl"]="binnenmarge", ["pe"]="حاشیه‌داخلی", ["ro"]="innermargin", }, ["inright"]={ ["cs"]="vpravo", ["de"]="imrechten", ["en"]="inright", ["fr"]="dansdroit", ["it"]="indestra", ["nl"]="inrechter", ["pe"]="درون‌راست", ["ro"]="indreapta", }, ["interaction"]={ ["cs"]="interakce", ["de"]="interaktion", ["en"]="interaction", ["fr"]="interaction", ["it"]="interazione", ["nl"]="interactie", ["pe"]="پانل", ["ro"]="interactiune", }, ["interactionmenu"]={ ["cs"]="interaktivnimenu", ["de"]="interaktionsmenue", ["en"]="interactionmenu", ["fr"]="menuinteraction", ["it"]="menuinterattivo", ["nl"]="interactiemenu", ["pe"]="منوی‌پانل", ["ro"]="meniuinteractiune", }, ["intermezzi"]={ ["cs"]="intermezzi", ["de"]="intermezzi", ["en"]="intermezzi", ["fr"]="intermezzi", ["it"]="intermezzi", ["nl"]="intermezzos", ["pe"]="میان‌پرده‌ها", ["ro"]="intermezzi", }, ["intermezzo"]={ ["cs"]="intermezzo", ["de"]="intermezzo", ["en"]="intermezzo", ["fr"]="intermezzo", ["it"]="intermezzo", ["nl"]="intermezzo", ["pe"]="میان‌پرده", ["ro"]="intermezzo", }, ["intext"]={ ["cs"]="dotextu", ["de"]="imtext", ["en"]="intext", ["fr"]="danstexte", ["it"]="intesto", ["nl"]="intekst", ["pe"]="درون‌متن", ["ro"]="intext", }, ["intro"]={ ["cs"]="uvod", ["de"]="intro", ["en"]="intro", ["fr"]="intro", ["it"]="intro", ["nl"]="intro", ["pe"]="پیشگفتار", ["ro"]="intro", }, ["italic"]={ ["cs"]="kurziva", ["de"]="italic", ["en"]="italic", ["fr"]="italique", ["it"]="corsivo", ["nl"]="italic", ["pe"]="ایتالیک", ["ro"]="italic", }, ["italicbold"]={ ["cs"]="kurzivnitucne", ["de"]="italicfett", ["en"]="italicbold", ["fr"]="grasitalique", ["it"]="corsivograssetto", ["nl"]="italicvet", ["pe"]="مشکی‌ایتالیک", ["ro"]="italicaldin", }, ["item"]={ ["cs"]="polozka", ["de"]="pos", ["en"]="item", ["fr"]="element", ["it"]="elemento", ["nl"]="som", ["pe"]="آیتم", ["ro"]="element", }, ["itemize"]={ ["cs"]="vycet", ["de"]="aufzaehlung", ["en"]="itemize", ["fr"]="lister", ["it"]="elenco", ["nl"]="opsomming", ["pe"]="آیتم‌بندی", ["ro"]="enumerare", }, ["its"]={ ["cs"]="pol", ["de"]="its", ["en"]="its", ["fr"]="its", ["it"]="its", ["nl"]="its", ["pe"]="آیم", ["ro"]="propriu", }, ["january"]={ ["cs"]="leden", ["de"]="januar", ["en"]="january", ["fr"]="janvier", ["it"]="gennaio", ["nl"]="januari", ["pe"]="ژانویه", ["ro"]="ianuarie", }, ["joinedup"]={ ["cs"]="spojeno", ["de"]="keinabstand", ["en"]="joinedup", ["fr"]="joinedup", ["it"]="unito", ["nl"]="aansluitend", ["pe"]="متصل‌بالا", ["ro"]="unit", }, ["july"]={ ["cs"]="cervenec", ["de"]="juli", ["en"]="july", ["fr"]="juillet", ["it"]="luglio", ["nl"]="juli", ["pe"]="ژولای", ["ro"]="iulie", }, ["june"]={ ["cs"]="cerven", ["de"]="juni", ["en"]="june", ["fr"]="juin", ["it"]="giugno", ["nl"]="juni", ["pe"]="ژوئن", ["ro"]="iunie", }, ["keep"]={ ["cs"]="drzet", ["de"]="behalte", ["en"]="keep", ["fr"]="maintient", ["it"]="mantieni", ["nl"]="handhaaf", ["pe"]="نگهدار", ["ro"]="mentine", }, ["knockout"]={ ["cs"]="knockout", ["de"]="knockout", ["en"]="knockout", ["fr"]="knockout", ["it"]="knockout", ["nl"]="knockout", ["pe"]="knockout", ["ro"]="knockout", }, ["label"]={ ["cs"]="popisek", ["de"]="label", ["en"]="label", ["fr"]="etiquette", ["it"]="etichetta", ["nl"]="label", ["pe"]="برچسب", ["ro"]="eticheta", }, ["landscape"]={ ["cs"]="nasirku", ["de"]="querformat", ["en"]="landscape", ["fr"]="paysage", ["it"]="orizzontale", ["nl"]="liggend", ["pe"]="صفحه‌گسترده", ["ro"]="vedere", }, ["last"]={ ["cs"]="posledni", ["de"]="letzte", ["en"]="last", ["fr"]="dernier", ["it"]="ultimo", ["nl"]="laatste", ["pe"]="آخرین", ["ro"]="ultim", }, ["lastcolumn"]={ ["cs"]="lastcolumn", ["de"]="lastcolumn", ["en"]="lastcolumn", ["fr"]="dernierecolonne", ["it"]="lastcolumn", ["nl"]="laatstekolom", ["pe"]="آخرین‌ستون", ["ro"]="lastcolumn", }, ["lastpage"]={ ["cs"]="poslednistrana", ["de"]="letzteseite", ["en"]="lastpage", ["fr"]="dernierepage", ["it"]="ultimapagina", ["nl"]="laatstepagina", ["pe"]="صفحه‌آخر", ["ro"]="ultimapagina", }, ["lastpagenumber"]={ ["cs"]="lastpagenumber", ["de"]="lastpagenumber", ["en"]="lastpagenumber", ["fr"]="derniernumeropage", ["it"]="lastpagenumber", ["nl"]="laatstepaginanummer", ["pe"]="شماه‌صفحه‌آخر", ["ro"]="lastpagenumber", }, ["lastsubpage"]={ ["cs"]="poslaednipodstranka", ["de"]="letzteunterseite", ["en"]="lastsubpage", ["fr"]="dernieresouspage", ["it"]="ultimasottopagina", ["nl"]="laatstesubpagina", ["pe"]="زیرصفحه‌آخر", ["ro"]="ultimasubpagina", }, ["layer"]={ ["cs"]="layer", ["de"]="layer", ["en"]="layer", ["fr"]="layer", ["it"]="layer", ["nl"]="layer", ["pe"]="layer", ["ro"]="layer", }, ["left"]={ ["cs"]="vlevo", ["de"]="links", ["en"]="left", ["fr"]="gauche", ["it"]="sinistra", ["nl"]="links", ["pe"]="چپ", ["ro"]="stanga", }, ["leftedge"]={ ["cs"]="levahrana", ["de"]="linkekante", ["en"]="leftedge", ["fr"]="bordgauche", ["it"]="bordosinistro", ["nl"]="linkerrand", ["pe"]="لبه‌چپ", ["ro"]="bordurastanga", }, ["lefthanging"]={ ["cs"]="lefthanging", ["de"]="lefthanging", ["en"]="lefthanging", ["fr"]="lefthanging", ["it"]="lefthanging", ["nl"]="linkshangend", ["pe"]="آویزان‌چپ", ["ro"]="lefthanging", }, ["leftmargin"]={ ["cs"]="levyokraj", ["de"]="linkerrand", ["en"]="leftmargin", ["fr"]="margegauche", ["it"]="marginesinistro", ["nl"]="linkermarge", ["pe"]="حاشیه‌چپ", ["ro"]="marginestanga", }, ["leftpage"]={ ["cs"]="levastranka", ["de"]="linkerseite", ["en"]="leftpage", ["fr"]="pagegauche", ["it"]="paginasinistra", ["nl"]="linkerpagina", ["pe"]="صفحه‌چپ", ["ro"]="paginastanga", }, ["lefttoright"]={ ["cs"]="lefttoright", ["de"]="lefttoright", ["en"]="lefttoright", ["fr"]="lefttoright", ["it"]="lefttoright", ["nl"]="lefttoright", ["pe"]="lefttoright", ["ro"]="lefttoright", }, ["legend"]={ ["cs"]="legenda", ["de"]="legende", ["en"]="legend", ["fr"]="legende", ["it"]="legenda", ["nl"]="legenda", ["pe"]="راهنما", ["ro"]="legenda", }, ["lesshyphenation"]={ ["cs"]="lesshyphenation", ["de"]="lesshyphenation", ["en"]="lesshyphenation", ["fr"]="lesshyphenation", ["it"]="lesshyphenation", ["nl"]="lesshyphenation", ["pe"]="شکست‌کلمات‌کمتر", ["ro"]="lesshyphenation", }, ["line"]={ ["cs"]="radek", ["de"]="zeile", ["en"]="line", ["fr"]="ligne", ["it"]="riga", ["nl"]="regel", ["pe"]="خط", ["ro"]="linie", }, ["linenote"]={ ["cs"]="linenote", ["de"]="linenote", ["en"]="linenote", ["fr"]="noteligne", ["it"]="linenote", ["nl"]="regelnoot", ["pe"]="خط‌نوشت", ["ro"]="linenote", }, ["lines"]={ ["cs"]="radky", ["de"]="zeilen", ["en"]="lines", ["fr"]="lignes", ["it"]="righe", ["nl"]="regels", ["pe"]="خطها", ["ro"]="linii", }, ["list"]={ ["cs"]="seznam", ["de"]="liste", ["en"]="list", ["fr"]="liste", ["it"]="elenco", ["nl"]="lijst", ["pe"]="لیست", ["ro"]="lista", }, ["local"]={ ["cs"]="lokalne", ["de"]="lokal", ["en"]="local", ["fr"]="local", ["it"]="locale", ["nl"]="lokaal", ["pe"]="موضعی", ["ro"]="local", }, ["localenvironment"]={ ["cs"]="lokalnihoprostredi", ["de"]="lokaleumgebung", ["en"]="localenvironment", ["fr"]="environementlocal", ["it"]="ambientelocale", ["nl"]="deelomgeving", ["pe"]="محیط‌موضعی", ["ro"]="mediulocal", }, ["logo"]={ ["cs"]="logo", ["de"]="logo", ["en"]="logo", ["fr"]="logo", ["it"]="logo", ["nl"]="logo", ["pe"]="آرم", ["ro"]="logo", }, ["logos"]={ ["cs"]="loga", ["de"]="logos", ["en"]="logos", ["fr"]="logos", ["it"]="loghi", ["nl"]="logos", ["pe"]="آرمها", ["ro"]="logos", }, ["lohi"]={ ["cs"]="nivy", ["de"]="hoti", ["en"]="lohi", ["fr"]="baha", ["it"]="pedap", ["nl"]="laho", ["pe"]="پابا", ["ro"]="lohi", }, ["loose"]={ ["cs"]="uvolnene", ["de"]="lose", ["en"]="loose", ["fr"]="perte", ["it"]="lento", ["nl"]="los", ["pe"]="شل", ["ro"]="larg", }, ["low"]={ ["cs"]="nizko", ["de"]="tief", ["en"]="low", ["fr"]="bas", ["it"]="basso", ["nl"]="laag", ["pe"]="پایین", ["ro"]="jos", }, ["ls"]={ ["cs"]="ls", ["de"]="ls", ["en"]="ls", ["fr"]="ls", ["it"]="ls", ["nl"]="ls", ["pe"]="ls", ["ro"]="ls", }, ["makeup"]={ ["cs"]="zlom", ["de"]="umbruch", ["en"]="makeup", ["fr"]="makeup", ["it"]="makeup", ["nl"]="opmaak", ["pe"]="آرایش", ["ro"]="marcaj", }, ["mar"]={ ["cs"]="mar", ["de"]="mar", ["en"]="mar", ["fr"]="mar", ["it"]="mar", ["nl"]="mar", ["pe"]="حاش", ["ro"]="mar", }, ["march"]={ ["cs"]="brezen", ["de"]="maerz", ["en"]="march", ["fr"]="mars", ["it"]="marzo", ["nl"]="maart", ["pe"]="مارس", ["ro"]="martie", }, ["margin"]={ ["cs"]="marginalie", ["de"]="marginalie", ["en"]="margin", ["fr"]="marge", ["it"]="margine", ["nl"]="marge", ["pe"]="حاشیه", ["ro"]="margine", }, ["marginedge"]={ ["cs"]="textovahrana", ["de"]="marginalkante", ["en"]="marginedge", ["fr"]="bordmarge", ["it"]="bordomargine", ["nl"]="kantlijn", ["pe"]="لبه‌حاشیه", ["ro"]="marginebordura", }, ["margintitle"]={ ["cs"]="titulmarginalie", ["de"]="marginaltitel", ["en"]="margintitle", ["fr"]="titremarge", ["it"]="titoloinmargine", ["nl"]="margetitel", ["pe"]="عنوان‌حاشیه", ["ro"]="titlumarginal", }, ["marking"]={ ["cs"]="znaceni", ["de"]="beschriftung", ["en"]="marking", ["fr"]="marquage", ["it"]="marcatura", ["nl"]="markering", ["pe"]="نشانه‌گذاری", ["ro"]="marcaje", }, ["mathematics"]={ ["cs"]="mathematika", ["de"]="mathematik", ["en"]="mathematics", ["fr"]="mathematique", ["it"]="matematica", ["nl"]="wiskunde", ["pe"]="ریاضی", ["ro"]="matematica", }, ["mathalignment"]={ ["cs"]="mathalignment", ["de"]="mathalignment", ["en"]="mathalignment", ["fr"]="mathalignment", ["it"]="mathalignment", ["nl"]="wiskundeuitlijnen", ["pe"]="تنظیم‌ریاضی", ["ro"]="mathalignment", }, ["mathcases"]={ ["cs"]="mathcases", ["de"]="mathcases", ["en"]="mathcases", ["fr"]="mathcases", ["it"]="mathcases", ["nl"]="mathcases", ["pe"]="حالتهای‌ریاضی", ["ro"]="mathcases", }, ["mathmatrix"]={ ["cs"]="mathmatrix", ["de"]="mathmatrix", ["en"]="mathmatrix", ["fr"]="mathmatrix", ["it"]="mathmatrix", ["nl"]="wiskundematrix", ["pe"]="ماتریش‌ریاضی", ["ro"]="mathmatrix", }, ["max"]={ ["cs"]="max", ["de"]="max", ["en"]="max", ["fr"]="max", ["it"]="max", ["nl"]="max", ["pe"]="بیشترین", ["ro"]="max", }, ["may"]={ ["cs"]="kveten", ["de"]="mai", ["en"]="may", ["fr"]="mai", ["it"]="maggio", ["nl"]="mei", ["pe"]="مه", ["ro"]="mai", }, ["mediaeval"]={ ["cs"]="stredoveky", ["de"]="mittelalterlich", ["en"]="mediaeval", ["fr"]="medieval", ["it"]="medievale", ["nl"]="mediaeval", ["pe"]="mediaeval", ["ro"]="medieval", }, ["medium"]={ ["cs"]="stredni", ["de"]="mittel", ["en"]="medium", ["fr"]="moyen", ["it"]="medio", ["nl"]="middel", ["pe"]="متوسط", ["ro"]="mediu", }, ["middle"]={ ["cs"]="nastred", ["de"]="mittig", ["en"]="middle", ["fr"]="milieu", ["it"]="centro", ["nl"]="midden", ["pe"]="میان", ["ro"]="centru", }, ["min"]={ ["cs"]="min", ["de"]="min", ["en"]="min", ["fr"]="min", ["it"]="min", ["nl"]="min", ["pe"]="کمترین", ["ro"]="min", }, ["minheight"]={ ["cs"]="minvyska", ["de"]="minhoehe", ["en"]="minheight", ["fr"]="hauteurmin", ["it"]="altezzamin", ["nl"]="minhoogte", ["pe"]="کمترین‌ارتفاع", ["ro"]="inaltimeminima", }, ["minwidth"]={ ["cs"]="minsirka", ["de"]="minbreite", ["en"]="minwidth", ["fr"]="largeurmin", ["it"]="ampiezzamin", ["nl"]="minbreedte", ["pe"]="کمترین‌عرض", ["ro"]="latimeminima", }, ["mirrored"]={ ["cs"]="zrcadleno", ["de"]="gespiegelt", ["en"]="mirrored", ["fr"]="reflete", ["it"]="riflesso", ["nl"]="gespiegeld", ["pe"]="منعکس", ["ro"]="oglindit", }, ["monday"]={ ["cs"]="pondeli", ["de"]="montag", ["en"]="monday", ["fr"]="lundi", ["it"]="lunedi", ["nl"]="maandag", ["pe"]="دوشنبه", ["ro"]="luni", }, ["mono"]={ ["cs"]="mono", ["de"]="mono", ["en"]="mono", ["fr"]="mono", ["it"]="mono", ["nl"]="mono", ["pe"]="مونو", ["ro"]="mono", }, ["month"]={ ["cs"]="mesic", ["de"]="monat", ["en"]="month", ["fr"]="mois", ["it"]="mese", ["nl"]="maand", ["pe"]="ماه", ["ro"]="luna", }, ["morehyphenation"]={ ["cs"]="morehyphenation", ["de"]="morehyphenation", ["en"]="morehyphenation", ["fr"]="morehyphenation", ["it"]="morehyphenation", ["nl"]="morehyphenation", ["pe"]="شکست‌کلمات‌بیشتر", ["ro"]="morehyphenation", }, ["name"]={ ["cs"]="jmeno", ["de"]="name", ["en"]="name", ["fr"]="nom", ["it"]="nome", ["nl"]="naam", ["pe"]="نام", ["ro"]="nume", }, ["narrow"]={ ["cs"]="uzky", ["de"]="schmall", ["en"]="narrow", ["fr"]="etroit", ["it"]="stretto", ["nl"]="smal", ["pe"]="نازک", ["ro"]="ingust", }, ["negative"]={ ["cs"]="negativ", ["de"]="negativ", ["en"]="negative", ["fr"]="negatif", ["it"]="negativo", ["nl"]="negatief", ["pe"]="منفی", ["ro"]="negativ", }, ["never"]={ ["cs"]="nikdy", ["de"]="nie", ["en"]="never", ["fr"]="jamais", ["it"]="mai", ["nl"]="nooit", ["pe"]="هیچگاه", ["ro"]="niciodata", }, ["new"]={ ["cs"]="novy", ["de"]="neu", ["en"]="new", ["fr"]="nouveau", ["it"]="nuovo", ["nl"]="nieuw", ["pe"]="جدید", ["ro"]="nou", }, ["next"]={ ["cs"]="dalsi", ["de"]="folgende", ["en"]="next", ["fr"]="prochain", ["it"]="successivo", ["nl"]="volgende", ["pe"]="بعدی", ["ro"]="urmatorul", }, ["nextevenpage"]={ ["cs"]="dalsisudastranka", ["de"]="naechstegeradeseite", ["en"]="nextevenpage", ["fr"]="pagepairesuivante", ["it"]="paginaparisuccessiva", ["nl"]="volgendeevenpagina", ["pe"]="صفحه‌زوج‌بعدی", ["ro"]="paginaparaurmatoarea", }, ["nextoddpage"]={ ["cs"]="dalsilichastranka", ["de"]="naechsteungeradeseite", ["en"]="nextoddpage", ["fr"]="pageimpairesuivante", ["it"]="paginadisparisuccessiva", ["nl"]="volgendeonevenpagina", ["pe"]="صفحه‌فردبعدی", ["ro"]="paginaimparaurmatoarea", }, ["nextpage"]={ ["cs"]="dalsistranka", ["de"]="folgendeseite", ["en"]="nextpage", ["fr"]="pagesuivante", ["it"]="paginasuccessiva", ["nl"]="volgendepagina", ["pe"]="صفحه‌بعدی", ["ro"]="paginaurmatoare", }, ["nextsubpage"]={ ["cs"]="dalsipodstranka", ["de"]="folgendeunterseite", ["en"]="nextsubpage", ["fr"]="souspagesuivante", ["it"]="sottopaginasuccessiva", ["nl"]="volgendesubpagina", ["pe"]="زیرصفحه‌بعدی", ["ro"]="urmatoareasubpagina", }, ["no"]={ ["cs"]="ne", ["de"]="nein", ["en"]="no", ["fr"]="non", ["it"]="no", ["nl"]="nee", ["pe"]="نه", ["ro"]="nu", }, ["nocheck"]={ ["cs"]="nocheck", ["de"]="nocheck", ["en"]="nocheck", ["fr"]="nonverifie", ["it"]="nocheck", ["nl"]="geencontrole", ["pe"]="بدون‌بررسی", ["ro"]="nocheck", }, ["nofit"]={ ["cs"]="nofit", ["de"]="nofit", ["en"]="nofit", ["fr"]="nofit", ["it"]="nofit", ["nl"]="nietpassend", ["pe"]="بدون‌پرکردن", ["ro"]="nofit", }, ["nogrid"]={ ["cs"]="nogrid", ["de"]="nogrid", ["en"]="nogrid", ["fr"]="nogrid", ["it"]="nogrid", ["nl"]="geengrid", ["pe"]="بدون‌توری", ["ro"]="nogrid", }, ["nohz"]={ ["cs"]="nohz", ["de"]="nohz", ["en"]="nohz", ["fr"]="nohz", ["it"]="nohz", ["nl"]="geenhz", ["pe"]="nohz", ["ro"]="nohz", }, ["nomarking"]={ ["cs"]="zadneznaceni", ["de"]="keinebeschriftung", ["en"]="nomarking", ["fr"]="sansmarquage", ["it"]="nomarcature", ["nl"]="geenmarkering", ["pe"]="بدون‌نشانه‌گذاری", ["ro"]="faramarcare", }, ["none"]={ ["cs"]="zadny", ["de"]="kein", ["en"]="none", ["fr"]="rien", ["it"]="nessuno", ["nl"]="geen", ["pe"]="هیچکدام", ["ro"]="niciunul", }, ["nonumber"]={ ["cs"]="nonumber", ["de"]="nonumber", ["en"]="nonumber", ["fr"]="sansnumero", ["it"]="nonumber", ["nl"]="geennummer", ["pe"]="بدون‌شماره", ["ro"]="nonumber", }, ["normal"]={ ["cs"]="normalni", ["de"]="normal", ["en"]="normal", ["fr"]="normal", ["it"]="normale", ["nl"]="normaal", ["pe"]="نرمال", ["ro"]="normal", }, ["nospacing"]={ ["cs"]="nospacing", ["de"]="nospacing", ["en"]="nospacing", ["fr"]="sansespacement", ["it"]="nospacing", ["nl"]="geenspatiering", ["pe"]="بدون‌فضاگذاری", ["ro"]="nospacing", }, ["not"]={ ["cs"]="ne", ["de"]="nicht", ["en"]="not", ["fr"]="pas", ["it"]="non", ["nl"]="niet", ["pe"]="بدون", ["ro"]="nu", }, ["note"]={ ["en"]="note", }, ["nothanging"]={ ["cs"]="nothanging", ["de"]="nothanging", ["en"]="nothanging", ["fr"]="nonsuspendu", ["it"]="nonsospeso", ["nl"]="niethangend", ["pe"]="بدون‌آویزان‌کردن", ["ro"]="nothanging", }, ["nothyphenated"]={ ["cs"]="nothyphenated", ["de"]="nothyphenated", ["en"]="nothyphenated", ["fr"]="nothyphenated", ["it"]="nonsillabato", ["nl"]="nietafgebroken", ["pe"]="بدون‌شکست", ["ro"]="nedespsilabe", }, ["november"]={ ["cs"]="listopad", ["de"]="november", ["en"]="november", ["fr"]="novembre", ["it"]="novembre", ["nl"]="november", ["pe"]="نوامبر", ["ro"]="noiembrie", }, ["nowhere"]={ ["cs"]="nikde", ["de"]="nirgens", ["en"]="nowhere", ["fr"]="nulpart", ["it"]="danessunaparte", ["nl"]="nergens", ["pe"]="هیچ‌حا", ["ro"]="niciunde", }, ["nowhite"]={ ["cs"]="zadnabila", ["de"]="keinweiss", ["en"]="nowhite", ["fr"]="sansblanc", ["it"]="nobianco", ["nl"]="geenwit", ["pe"]="سفید‌نه", ["ro"]="faraalb", }, ["number"]={ ["cs"]="cislo", ["de"]="nummer", ["en"]="number", ["fr"]="numero", ["it"]="numero", ["nl"]="nummer", ["pe"]="شماره", ["ro"]="numar", }, ["numbers"]={ ["cs"]="cisla", ["de"]="ziffern", ["en"]="numbers", ["fr"]="numeros", ["it"]="numeri", ["nl"]="cijfers", ["pe"]="شماره‌ها", ["ro"]="numere", }, ["october"]={ ["cs"]="rijen", ["de"]="oktober", ["en"]="october", ["fr"]="octobre", ["it"]="ottobre", ["nl"]="oktober", ["pe"]="اکتبر", ["ro"]="octombrie", }, ["odd"]={ ["cs"]="liche", ["de"]="ungerade", ["en"]="odd", ["fr"]="impair", ["it"]="dispari", ["nl"]="oneven", ["pe"]="فرد", ["ro"]="impar", }, ["off"]={ ["cs"]="vyp", ["de"]="aus", ["en"]="off", ["fr"]="desactive", ["it"]="disattivo", ["nl"]="uit", ["pe"]="خاموش", ["ro"]="dezactivat", }, ["offset"]={ ["cs"]="offset", ["de"]="offset", ["en"]="offset", ["fr"]="offset", ["it"]="offset", ["nl"]="offset", ["pe"]="آفست", ["ro"]="offset", }, ["old"]={ ["cs"]="old", ["de"]="old", ["en"]="old", ["fr"]="old", ["it"]="old", ["nl"]="oud", ["pe"]="قدیمی", ["ro"]="old", }, ["on"]={ ["cs"]="zap", ["de"]="an", ["en"]="on", ["fr"]="actif", ["it"]="attivo", ["nl"]="aan", ["pe"]="روی", ["ro"]="on", }, ["one"]={ ["cs"]="jedna", ["de"]="eins", ["en"]="one", ["fr"]="un", ["it"]="uno", ["nl"]="een", ["pe"]="یک", ["ro"]="unu", }, ["opposite"]={ ["cs"]="naproti", ["de"]="gegenueber", ["en"]="opposite", ["fr"]="opposition", ["it"]="opposto", ["nl"]="naast", ["pe"]="مخالف", ["ro"]="opus", }, ["outer"]={ ["cs"]="vnejsi", ["de"]="aussen", ["en"]="outer", ["fr"]="exterieur", ["it"]="esterno", ["nl"]="buiten", ["pe"]="خارجی", ["ro"]="extern", }, ["outeredge"]={ ["cs"]="outeredge", ["de"]="outeredge", ["en"]="outeredge", ["fr"]="bordexterieur", ["it"]="bordoesterno", ["nl"]="buitenrand", ["pe"]="لبه‌خارجی", ["ro"]="outeredge", }, ["outermargin"]={ ["cs"]="outermargin", ["de"]="outermargin", ["en"]="outermargin", ["fr"]="margeexterieure", ["it"]="margineesterno", ["nl"]="buitenmarge", ["pe"]="حاشیه‌خارجی", ["ro"]="outermargin", }, ["overlay"]={ ["cs"]="prekryv", ["de"]="overlay", ["en"]="overlay", ["fr"]="revetement", ["it"]="sovrapponi", ["nl"]="overlay", ["pe"]="پوشش", ["ro"]="overlay", }, ["overprint"]={ ["cs"]="overprint", ["de"]="overprint", ["en"]="overprint", ["fr"]="overprint", ["it"]="overprint", ["nl"]="overprint", ["pe"]="overprint", ["ro"]="overprint", }, ["packed"]={ ["cs"]="zhustene", ["de"]="gepackt", ["en"]="packed", ["fr"]="groupe", ["it"]="impaccato", ["nl"]="opelkaar", ["pe"]="فشرده", ["ro"]="impachetat", }, ["page"]={ ["cs"]="stranka", ["de"]="seite", ["en"]="page", ["fr"]="page", ["it"]="pagina", ["nl"]="pagina", ["pe"]="صفحه", ["ro"]="pagina", }, ["pagecomment"]={ ["cs"]="komentarstranky", ["de"]="pagecomment", ["en"]="pagecomment", ["fr"]="commentairepage", ["it"]="commentopagina", ["nl"]="paginacommentaar", ["pe"]="توضیح‌صفحه", ["ro"]="comentariupagina", }, ["pagenumber"]={ ["cs"]="cislostranky", ["de"]="seitennummer", ["en"]="pagenumber", ["fr"]="numeropage", ["it"]="numeropagina", ["nl"]="paginanummer", ["pe"]="شماره‌صفحه", ["ro"]="numarpagina", }, ["paper"]={ ["cs"]="papir", ["de"]="papier", ["en"]="paper", ["fr"]="papier", ["it"]="carta", ["nl"]="papier", ["pe"]="برگ", ["ro"]="foaie", }, ["paragraph"]={ ["cs"]="odstavec", ["de"]="absatz", ["en"]="paragraph", ["fr"]="paragraphe", ["it"]="capoverso", ["nl"]="alinea", ["pe"]="پاراگراف", ["ro"]="paragraf", }, ["part"]={ ["cs"]="cast", ["de"]="teil", ["en"]="part", ["fr"]="partie", ["it"]="parte", ["nl"]="deel", ["pe"]="قسمت", ["ro"]="parte", }, ["positive"]={ ["cs"]="positiv", ["de"]="positiv", ["en"]="positive", ["fr"]="positif", ["it"]="positivo", ["nl"]="positief", ["pe"]="مثبت", ["ro"]="positiv", }, ["postponing"]={ ["cs"]="odlozit", ["de"]="verschieben", ["en"]="postponing", ["fr"]="postponing", ["it"]="posporre", ["nl"]="uitstellen", ["pe"]="تاخیر", ["ro"]="postponing", }, ["postscript"]={ ["cs"]="postscript", ["de"]="postscript", ["en"]="postscript", ["fr"]="postscript", ["it"]="postscript", ["nl"]="postscript", ["pe"]="پست‌اسکریپت", ["ro"]="postscript", }, ["preference"]={ ["cs"]="nastaveni", ["de"]="einstellung", ["en"]="preference", ["fr"]="preference", ["it"]="preferenza", ["nl"]="voorkeur", ["pe"]="ترجیح", ["ro"]="preferinta", }, ["preview"]={ ["cs"]="nahled", ["de"]="vorschau", ["en"]="preview", ["fr"]="previsualisation", ["it"]="anteprima", ["nl"]="preview", ["pe"]="پیش‌دید", ["ro"]="previzualizare", }, ["previous"]={ ["cs"]="predchozi", ["de"]="vorig", ["en"]="previous", ["fr"]="precedent", ["it"]="precedente", ["nl"]="vorige", ["pe"]="قبلی", ["ro"]="precedent", }, ["previousevenpage"]={ ["cs"]="predchozisudastranka", ["de"]="vorigegeradeseite", ["en"]="previousevenpage", ["fr"]="pagepaireprecedente", ["it"]="paginapariprecedente", ["nl"]="vorigeevenpagina", ["pe"]="صفحه‌زوج‌قبلی", ["ro"]="paginaparaprecedenta", }, ["previousoddpage"]={ ["cs"]="predchozilichastranka", ["de"]="vorigeungeradeseite", ["en"]="previousoddpage", ["fr"]="pageimpaireprecedente", ["it"]="paginadispariprecedente", ["nl"]="vorigeonevenpagina", ["pe"]="صفحه‌فردقبلی", ["ro"]="paginaimparaprecedenta", }, ["previouspage"]={ ["cs"]="predchozistranka", ["de"]="vorigeseite", ["en"]="previouspage", ["fr"]="pageprecedente", ["it"]="paginaprecedente", ["nl"]="vorigepagina", ["pe"]="صفحه‌قبلی", ["ro"]="paginaanterioara", }, ["previoussubpage"]={ ["cs"]="predchozipodstranka", ["de"]="vorigeunterseite", ["en"]="previoussubpage", ["fr"]="souspageprecedente", ["it"]="sottopaginaprecedente", ["nl"]="vorigesubpagina", ["pe"]="زیرصفحه‌قبلی", ["ro"]="subpaginaanterioara", }, ["print"]={ ["en"]="print", ["nl"]="print", -- afdruk }, ["printable"]={ ["cs"]="tisknutelne", ["de"]="druckbar", ["en"]="printable", ["fr"]="editable", ["it"]="stampabile", ["nl"]="printbaar", -- afdrukbaar ["pe"]="قابل‌چاپ", ["ro"]="tiparibil", }, ["process"]={ ["cs"]="process", ["de"]="process", ["en"]="process", ["fr"]="process", ["it"]="process", ["nl"]="proces", ["pe"]="پردازش", ["ro"]="process", }, ["product"]={ ["cs"]="produkt", ["de"]="produkt", ["en"]="product", ["fr"]="produit", ["it"]="prodotto", ["nl"]="produkt", ["pe"]="محصول", ["ro"]="produs", }, ["program"]={ ["cs"]="program", ["de"]="programm", ["en"]="program", ["fr"]="programme", ["it"]="programma", ["nl"]="programma", ["pe"]="برنامه", ["ro"]="program", }, ["project"]={ ["cs"]="projekt", ["de"]="projekt", ["en"]="project", ["fr"]="projet", ["it"]="progetto", ["nl"]="project", ["pe"]="پروژه", ["ro"]="proiect", }, ["protected"]={ ["cs"]="chranene", ["de"]="geschuetzt", ["en"]="protected", ["fr"]="protege", ["it"]="protetto", ["nl"]="beschermd", ["pe"]="حفاظت‌شده", ["ro"]="protejat", }, ["quadruple"]={ ["cs"]="ctyrnasobny", ["de"]="viertel", ["en"]="quadruple", ["fr"]="quadruple", ["it"]="quadruplo", ["nl"]="viertal", ["pe"]="quadruple", ["ro"]="cvadrupul", }, ["quotation"]={ ["cs"]="citace", ["de"]="zitat", ["en"]="quotation", ["fr"]="citation", ["it"]="citazione", ["nl"]="citaat", ["pe"]="نقل‌قول", ["ro"]="citat", }, ["quote"]={ ["cs"]="citovat", ["de"]="zitieren", ["en"]="quote", ["fr"]="citer", ["it"]="menzione", ["nl"]="citeer", ["pe"]="نقل", ["ro"]="minicitat", }, ["ran"]={ ["cs"]="rozsah", ["de"]="ran", ["en"]="ran", ["fr"]="cours", ["it"]="corse", ["nl"]="ran", ["pe"]="برد", ["ro"]="rulat", }, ["random"]={ ["cs"]="nahodny", ["de"]="zufaellig", ["en"]="random", ["fr"]="aleatoire", ["it"]="casuale", ["nl"]="willekeurig", ["pe"]="تصادفی", ["ro"]="aleator", }, ["readonly"]={ ["cs"]="pouzeprocteni", ["de"]="nurlesbar", ["en"]="readonly", ["fr"]="lectureseule", ["it"]="solalettura", ["nl"]="alleenleesbaar", ["pe"]="تنهاخواندنی", ["ro"]="readonly", }, ["rectangular"]={ ["cs"]="pravouhly", ["de"]="rechteckig", ["en"]="rectangular", ["fr"]="rectangulaire", ["it"]="rettangolare", ["nl"]="recht", ["pe"]="چهارگوشه", ["ro"]="rectangular", }, ["referral"]={ ["cs"]="znacka", ["de"]="merkmal", ["en"]="referral", ["fr"]="referral", ["it"]="referral", ["nl"]="kenmerk", ["pe"]="مراجعه", ["ro"]="referinta", }, ["reference"]={ ["cs"]="odkaz", ["de"]="referenz", ["en"]="reference", ["fr"]="reference", ["it"]="riferimento", ["nl"]="referentie", ["pe"]="مرجع", ["ro"]="referinta", }, ["register"]={ ["cs"]="rejstrik", ["de"]="register", ["en"]="register", ["fr"]="registre", ["it"]="registro", ["nl"]="register", ["pe"]="ثبت", ["ro"]="registru", }, ["regular"]={ ["cs"]="pravidelne", ["de"]="regular", ["en"]="regular", ["fr"]="regulier", ["it"]="regolare", ["nl"]="regular", ["pe"]="منظم", ["ro"]="regular", }, ["rekening"]={ ["cs"]="rekening", ["de"]="rekening", ["en"]="rekening", ["fr"]="rekening", ["it"]="rekening", ["nl"]="rekening", ["pe"]="rekening", ["ro"]="rekening", }, ["relative"]={ ["cs"]="relativni", ["de"]="relativ", ["en"]="relative", ["fr"]="relatif", ["it"]="relativo", ["nl"]="relatief", ["pe"]="نسبی", ["ro"]="relativ", }, ["repeat"]={ ["cs"]="opakovat", ["de"]="wiederholen", ["en"]="repeat", ["fr"]="repete", ["it"]="ripeti", ["nl"]="herhaal", ["pe"]="تکرار", ["ro"]="repetat", }, ["required"]={ ["cs"]="pozadovane", ["de"]="obligatorisch", ["en"]="required", ["fr"]="recquis", ["it"]="richiestp", ["nl"]="verplicht", ["pe"]="موردنیاز", ["ro"]="obligatoriu", }, ["reset"]={ ["cs"]="reset", ["de"]="zuruecksetzten", ["en"]="reset", ["fr"]="raz", ["it"]="reimposta", ["nl"]="reset", ["pe"]="بازنشانی", ["ro"]="reset", }, ["reverse"]={ ["cs"]="reverse", ["de"]="reverse", ["en"]="reverse", ["fr"]="inverse", ["it"]="invertito", ["nl"]="omgekeerd", ["pe"]="برعکس", ["ro"]="reverse", }, ["right"]={ ["cs"]="vpravo", ["de"]="rechts", ["en"]="right", ["fr"]="droite", ["it"]="destra", ["nl"]="rechts", ["pe"]="راست", ["ro"]="dreapta", }, ["rightedge"]={ ["cs"]="pravahrana", ["de"]="rechterkante", ["en"]="rightedge", ["fr"]="borddroit", ["it"]="bordodestro", ["nl"]="rechterrand", ["pe"]="لبه‌راست", ["ro"]="borduradreapta", }, ["righthanging"]={ ["cs"]="righthanging", ["de"]="righthanging", ["en"]="righthanging", ["fr"]="righthanging", ["it"]="righthanging", ["nl"]="rechtshangend", ["pe"]="آویزان‌کردن‌راست", ["ro"]="righthanging", }, ["rightmargin"]={ ["cs"]="pravyokraj", ["de"]="rechterrand", ["en"]="rightmargin", ["fr"]="margedroite", ["it"]="marginedestro", ["nl"]="rechtermarge", ["pe"]="حاشیه‌راست", ["ro"]="marginedreapta", }, ["rightpage"]={ ["cs"]="pravastranka", ["de"]="rechterseite", ["en"]="rightpage", ["fr"]="pagedroite", ["it"]="paginadestra", ["nl"]="rechterpagina", ["pe"]="صفحه‌راست", ["ro"]="paginadreapta", }, ["righttoleft"]={ ["cs"]="righttoleft", ["de"]="righttoleft", ["en"]="righttoleft", ["fr"]="righttoleft", ["it"]="righttoleft", ["nl"]="righttoleft", ["pe"]="righttoleft", ["ro"]="righttoleft", }, ["roman"]={ ["cs"]="antikva", ["de"]="antiqua", ["en"]="roman", ["fr"]="roman", ["it"]="roman", ["nl"]="romaan", ["pe"]="رومن", ["ro"]="roman", }, ["romannumerals"]={ ["cs"]="rimskecislice", ["de"]="roemischezahlen", ["en"]="romannumerals", ["fr"]="chiffresromains", ["it"]="numeriromani", ["nl"]="romeins", ["pe"]="شماره‌لاتین", ["ro"]="numereromane", }, ["rotate"]={ ["cs"]="otoc", ["de"]="drehe", ["en"]="rotate", ["fr"]="oriente", ["it"]="ruota", ["nl"]="roteer", ["pe"]="دوران", ["ro"]="rotit", }, ["rotated"]={ ["cs"]="otoceno", ["de"]="gedreht", ["en"]="rotated", ["fr"]="tourne", ["it"]="ruotato", ["nl"]="geroteerd", ["pe"]="دوران‌یافته", ["ro"]="rotat", }, ["round"]={ ["cs"]="zaobleny", ["de"]="rund", ["en"]="round", ["fr"]="rond", ["it"]="rotondo", ["nl"]="rond", ["pe"]="گرد", ["ro"]="rotund", }, ["row"]={ ["cs"]="row", ["de"]="row", ["en"]="row", ["fr"]="rang", ["it"]="row", ["nl"]="rij", ["pe"]="سطر", ["ro"]="rand", }, ["rule"]={ ["cs"]="linka", ["de"]="linie", ["en"]="rule", ["fr"]="regle", ["it"]="linea", ["nl"]="lijn", ["pe"]="خط", ["ro"]="rigla", }, ["samepage"]={ ["cs"]="stejnastranka", ["de"]="selbeseite", ["en"]="samepage", ["fr"]="memepage", ["it"]="stessapagina", ["nl"]="zelfdepagina", ["pe"]="همان‌صفحه", ["ro"]="aceeasipagina", }, ["sans"]={ ["cs"]="sans", ["de"]="sans", ["en"]="sans", ["fr"]="sans", ["it"]="sans", ["nl"]="sans", ["pe"]="سانز", ["ro"]="sans", }, ["sansbold"]={ ["cs"]="sanstucne", ["de"]="sansfett", ["en"]="sansbold", ["fr"]="sansgras", ["it"]="sansgrassetto", ["nl"]="sansvet", ["pe"]="مشکی‌سانز", ["ro"]="sansaldin", }, ["sansserif"]={ ["cs"]="bezserifu", ["de"]="grotesk", ["en"]="sansserif", ["fr"]="sansserif", ["it"]="sansserif", ["nl"]="schreefloos", ["pe"]="سانزسریف", ["ro"]="sansserif", }, ["saturday"]={ ["cs"]="sobota", ["de"]="samstag", ["en"]="saturday", ["fr"]="samedi", ["it"]="sabato", ["nl"]="zaterdag", ["pe"]="شنبه", ["ro"]="sambata", }, ["screen"]={ ["cs"]="rastr", ["de"]="raster", ["en"]="screen", ["fr"]="ecran", ["it"]="schermo", ["nl"]="raster", ["pe"]="پرده", ["ro"]="ecran", }, ["section"]={ ["cs"]="sekce", ["de"]="absatz", ["en"]="section", ["fr"]="section", ["it"]="capoverso", ["nl"]="paragraaf", ["pe"]="بخش", ["ro"]="sectiune", }, ["sectionblockenvironment"]={ ["cs"]="sectionblockenvironment", ["de"]="sectionblockenvironment", ["en"]="sectionblockenvironment", ["fr"]="environementblocsection", ["it"]="ambientebloccosezione", ["nl"]="sectieblokomgeving", ["pe"]="محیط‌بلوک‌بخش", ["ro"]="blocsectiuneambient", }, ["sectionnumber"]={ ["cs"]="cislooddilu", ["de"]="abschnittsnummer", ["en"]="sectionnumber", ["fr"]="numerosection", ["it"]="numerosezione", ["nl"]="sectienummer", ["pe"]="شماره‌بخش", ["ro"]="numarsetiune", }, ["see"]={ ["cs"]="viz", ["de"]="sieh", ["en"]="see", ["fr"]="voit", ["it"]="vedi", ["nl"]="zie", ["pe"]="ببینید", ["ro"]="vezi", }, ["september"]={ ["cs"]="zari", ["de"]="september", ["en"]="september", ["fr"]="septembre", ["it"]="settembre", ["nl"]="september", ["pe"]="سپتامبر", ["ro"]="septembrie", }, ["serif"]={ ["cs"]="serif", ["de"]="serif", ["en"]="serif", ["fr"]="serif", ["it"]="serif", ["nl"]="serif", ["pe"]="سریف", ["ro"]="serif", }, ["serried"]={ ["cs"]="semknuto", ["de"]="kleinerabstand", ["en"]="serried", ["fr"]="serried", ["it"]="vicino", ["nl"]="aanelkaar", ["pe"]="تنگ‌هم", ["ro"]="serried", }, ["setups"]={ ["cs"]="einstellungen", ["de"]="impostazioni", ["en"]="setups", ["fr"]="reglages", ["it"]="nastaveni", ["nl"]="instellingen", ["pe"]="بارگذاریها", ["ro"]="setari", }, ["sheet"]={ ["cs"]="sheet", ["de"]="sheet", ["en"]="sheet", ["fr"]="sheet", ["it"]="sheet", ["nl"]="sheet", ["pe"]="ورقه", ["ro"]="sheet", }, ["singlesided"]={ ["cs"]="jednostranne", ["de"]="einzelseitig", ["en"]="singlesided", ["fr"]="recto", ["it"]="facciasingola", ["nl"]="enkelzijdig", ["pe"]="یک‌رو", ["ro"]="ofata", }, ["slanted"]={ ["cs"]="sklonene", ["de"]="geneigt", ["en"]="slanted", ["fr"]="incline", ["it"]="inclinato", ["nl"]="schuin", ["pe"]="خوابیده", ["ro"]="inclinat", }, ["slantedbold"]={ ["cs"]="sklonenetucne", ["de"]="geneigtfett", ["en"]="slantedbold", ["fr"]="grasincline", ["it"]="inclinatograssetto", ["nl"]="schuinvet", ["pe"]="مشکی‌خوابیده", ["ro"]="inclinataldin", }, ["small"]={ ["cs"]="male", ["de"]="klein", ["en"]="small", ["fr"]="petit", ["it"]="piccolo", ["nl"]="klein", ["pe"]="کوچک", ["ro"]="mic", }, ["smallbodyfont"]={ ["cs"]="smallbodyfont", ["de"]="smallbodyfont", ["en"]="smallbodyfont", ["fr"]="petitepolicecorps", ["it"]="piccolofontdelcorpo", ["nl"]="kleinkorps", ["pe"]="قلم‌بدنه‌کوچک", ["ro"]="smallbodyfont", }, ["smallbold"]={ ["cs"]="maletucne", ["de"]="kleinfett", ["en"]="smallbold", ["fr"]="graspetit", ["it"]="piccolograssetto", ["nl"]="kleinvet", ["pe"]="مشکی‌کوچک", ["ro"]="micaldin", }, ["smallbolditalic"]={ ["cs"]="maletucnekurzivni", ["de"]="kleinfettitalic", ["en"]="smallbolditalic", ["fr"]="italiquegraspetit", ["it"]="piccolograssettocorsivo", ["nl"]="kleinvetitalic", ["pe"]="ایتالیک‌مشکی‌کوچک", ["ro"]="micaldininclinat", }, ["smallboldslanted"]={ ["cs"]="maletucnesklonene", ["de"]="kleinfettgeneigt", ["en"]="smallboldslanted", ["fr"]="inclinegraspetit", ["it"]="piccolograssettoinclinato", ["nl"]="kleinvetschuin", ["pe"]="خوابیده‌مشکی‌کوچک", ["ro"]="micaldininclinat", }, ["smallcaps"]={ ["cs"]="kapitalky", ["de"]="smallcaps", ["en"]="smallcaps", ["fr"]="petitescapitales", ["it"]="maiuscoletto", ["nl"]="smallcaps", ["pe"]="smallcaps", ["ro"]="majusculemici", }, ["smallitalic"]={ ["cs"]="malekurzivni", ["de"]="kleinitalic", ["en"]="smallitalic", ["fr"]="italiquepetit", ["it"]="piccolocorsivo", ["nl"]="kleinitalic", ["pe"]="ایتالیک‌کوچک", ["ro"]="micitalic", }, ["smallitalicbold"]={ ["cs"]="malekurzivnitucne", ["de"]="kleinitalicfett", ["en"]="smallitalicbold", ["fr"]="grasitaliquepetit", ["it"]="piccolocorsivograssetto", ["nl"]="kleinitalicvet", ["pe"]="مشکی‌ایتالیک‌کوچک", ["ro"]="micitalicaldin", }, ["smallnormal"]={ ["cs"]="malenormalni", ["de"]="kleinnormal", ["en"]="smallnormal", ["fr"]="normalpetit", ["it"]="piccolonormale", ["nl"]="kleinnormaal", ["pe"]="نرمال‌کوچک", ["ro"]="micnormal", }, ["smallslanted"]={ ["cs"]="malesklonene", ["de"]="kleingeneigt", ["en"]="smallslanted", ["fr"]="inclinepetit", ["it"]="piccoloinclinato", ["nl"]="kleinschuin", ["pe"]="خوابیده‌کوچک", ["ro"]="micinclinat", }, ["smallslantedbold"]={ ["cs"]="malesklonenetucne", ["de"]="kleingeneigtfett", ["en"]="smallslantedbold", ["fr"]="grasinclinepetit", ["it"]="piccoloinclinatograssetto", ["nl"]="kleinschuinvet", ["pe"]="مشکی‌خوابیده‌کوچک", ["ro"]="micinclinataldin", }, ["smalltype"]={ ["cs"]="maletype", ["de"]="kleintippen", ["en"]="smalltype", ["fr"]="petittype", ["it"]="piccolotype", ["nl"]="kleintype", ["pe"]="تایپ‌کوچک", ["ro"]="mictype", }, ["somewhere"]={ ["cs"]="nekde", ["de"]="irgendwo", ["en"]="somewhere", ["fr"]="qqpart", ["it"]="daqualcheparte", ["nl"]="ergens", ["pe"]="جایی", ["ro"]="undeva", }, ["sorted"]={ ["cs"]="tridene", ["de"]="sortiert", ["en"]="sorted", ["fr"]="trie", ["it"]="ordinato", ["nl"]="gesorteerd", ["pe"]="مرتب", ["ro"]="sortat", }, ["space"]={ ["cs"]="mezera", ["de"]="spatium", ["en"]="space", ["fr"]="espace", ["it"]="spazio", ["nl"]="spatie", ["pe"]="فضا", ["ro"]="spatiu", }, ["spacing"]={ ["cs"]="mezerovani", ["de"]="spatiumausgleich", ["en"]="spacing", ["fr"]="espacement", ["it"]="spaziatura", ["nl"]="spatiering", ["pe"]="فضاگذاری", ["ro"]="spatiere", }, ["speech"]={ ["cs"]="speech", ["de"]="speech", ["en"]="speech", ["fr"]="discours", ["it"]="speech", ["nl"]="spraak", ["pe"]="سخنرانی", ["ro"]="speech", }, ["split"]={ ["cs"]="split", ["de"]="split", ["en"]="split", ["fr"]="split", ["it"]="separa", ["nl"]="splitsen", ["pe"]="شکافتن", ["ro"]="split", }, ["spot"]={ ["cs"]="spot", ["de"]="spot", ["en"]="spot", ["fr"]="spot", ["it"]="spot", ["nl"]="spot", ["pe"]="لکه", ["ro"]="spot", }, ["standard"]={ ["cs"]="standardni", ["de"]="standard", ["en"]="standard", ["fr"]="standard", ["it"]="standard", ["nl"]="standaard", ["pe"]="استاندارد", ["ro"]="standard", }, ["start"]={ ["cs"]="start", ["de"]="start", ["en"]="start", ["fr"]="demarre", ["it"]="inizia", ["nl"]="start", ["pe"]="شروع", ["ro"]="start", }, ["sticker"]={ ["cs"]="sticker", ["de"]="sticker", ["en"]="sticker", ["fr"]="sticker", ["it"]="sticker", ["nl"]="sticker", ["pe"]="دشنه", ["ro"]="sticker", }, ["stop"]={ ["cs"]="stop", ["de"]="stop", ["en"]="stop", ["fr"]="stoppe", ["it"]="termina", ["nl"]="stop", ["pe"]="پایان", ["ro"]="stop", }, ["stopper"]={ ["cs"]="predel", ["de"]="trenner", ["en"]="stopper", ["fr"]="stopper", ["it"]="stopper", ["nl"]="afsluiter", ["pe"]="ایست", ["ro"]="stopper", }, ["starter"]={ ["en"]="starter", ["nl"]="opener", }, ["stretch"]={ ["cs"]="natahnout", ["de"]="strecken", ["en"]="stretch", ["fr"]="etire", ["it"]="dilata", ["nl"]="rek", ["pe"]="بکش", ["ro"]="dilatat", }, ["strict"]={ ["cs"]="striktni", ["de"]="streng", ["en"]="strict", ["fr"]="strict", ["it"]="rigido", ["nl"]="streng", ["pe"]="اکید", ["ro"]="strict", }, ["strong"]={ ["cs"]="strong", ["de"]="strong", ["en"]="strong", ["fr"]="strong", ["it"]="strong", ["nl"]="sterk", ["pe"]="محکم", ["ro"]="strong", }, ["strut"]={ ["cs"]="strut", ["de"]="strut", ["en"]="strut", ["fr"]="strut", ["it"]="strut", ["nl"]="strut", ["pe"]="بست", ["ro"]="strut", }, ["sub"]={ ["cs"]="pod", ["de"]="unter", ["en"]="sub", ["fr"]="sous", ["it"]="sotto", ["nl"]="sub", ["pe"]="زیر", ["ro"]="sub", }, ["subbackward"]={ ["cs"]="podzpet", ["de"]="unterrueckwaerts", ["en"]="subbackward", ["fr"]="sousretourarriere", ["it"]="sottoindietro", ["nl"]="subachteruit", ["pe"]="زیرعقب‌گرد", ["ro"]="subinapoi", }, ["subformula"]={ ["cs"]="subrovnice", ["de"]="subformel", ["en"]="subformula", ["fr"]="subformule", ["it"]="subformula", ["nl"]="subformule", ["pe"]="زیرفرمول", ["ro"]="subformula", }, ["subforward"]={ ["cs"]="podvpred", ["de"]="untervorwaerts", ["en"]="subforward", ["fr"]="sousavance", ["it"]="sottoavanti", ["nl"]="subvooruit", ["pe"]="زیرجلوگرد", ["ro"]="subavans", }, ["subject"]={ ["cs"]="tema", ["de"]="thema", ["en"]="subject", ["fr"]="sujet", ["it"]="argomento", ["nl"]="onderwerp", ["pe"]="موضوع", ["ro"]="subiect", }, ["subpage"]={ ["cs"]="podstranka", ["de"]="unterseite", ["en"]="subpage", ["fr"]="souspage", ["it"]="sottopagina", ["nl"]="subpagina", ["pe"]="زیرصفحه", ["ro"]="subpagina", }, ["subs"]={ ["en"]="subs", }, ["subsection"]={ ["cs"]="podsekce", ["de"]="unterabsatz", ["en"]="subsection", ["fr"]="soussection", ["it"]="sottocapoverso", ["nl"]="subparagraaf", ["pe"]="زیربخش", ["ro"]="subsectiune", }, ["subsubject"]={ ["cs"]="podtema", ["de"]="unterthema", ["en"]="subsubject", ["fr"]="soussujet", ["it"]="sottoargomento", ["nl"]="subonderwerp", ["pe"]="زیرموضوع", ["ro"]="subsubiect", }, ["subsubsection"]={ ["cs"]="podpodsekce", ["de"]="unterunterabsatz", ["en"]="subsubsection", ["fr"]="soussoussection", ["it"]="sottosottocapoverso", ["nl"]="subsubparagraaf", ["pe"]="زیرزیربخش", ["ro"]="subsubsectiune", }, ["subsubsubject"]={ ["cs"]="podpodtema", ["de"]="unterunterthema", ["en"]="subsubsubject", ["fr"]="soussoussujet", ["it"]="sottosottoargomento", ["nl"]="subsubonderwerp", ["pe"]="زیرزیرموضوع", ["ro"]="subsubsubiect", }, ["subsubsubsection"]={ ["cs"]="podpodpodsekce", ["de"]="unterunterunterabsatz", ["en"]="subsubsubsection", ["fr"]="soussoussoussection", ["it"]="sottosottosottocapoverso", ["nl"]="subsubsubparagraaf", ["pe"]="زیرزیرزیربخش", ["ro"]="subsubsubsectiune", }, ["subsubsubsubject"]={ ["cs"]="podpodpodtema", ["de"]="unterunterunterthema", ["en"]="subsubsubsubject", ["fr"]="soussoussoussujet", ["it"]="sottosottosottoargomento", ["nl"]="subsubsubonderwerp", ["pe"]="زیرزیرزیرموضوع", ["ro"]="subsubsubsubiect", }, ["subsubsubsubsection"]={ ["cs"]="podpodpodpodsekce", ["de"]="unterunterunterunterabsatz", ["en"]="subsubsubsubsection", ["fr"]="soussoussoussoussection", ["it"]="sottosottosottosottocapoverso", ["nl"]="subsubsubsubparagraaf", ["pe"]="زیرزیرزیرزیربخش", ["ro"]="subsubsubsubsectiune", }, ["subsubsubsubsubject"]={ ["cs"]="podpodpodpodtema", ["de"]="unterunterunterunterthema", ["en"]="subsubsubsubsubject", ["fr"]="soussoussoussoussujet", ["it"]="sottosottosottosottoargomento", ["nl"]="subsubsubsubonderwerp", ["pe"]="زیرزیرزیرزیرموضوع", ["ro"]="subsubsubsubsubiect", }, ["subsubsubsubsubsection"]={ ["cs"]="podpodpodpodpodsekce", ["de"]="unterunterunterunterunterabsatz", ["en"]="subsubsubsubsubsection", ["fr"]="soussoussoussoussoussection", ["it"]="sottosottosottosottosottocapoverso", ["nl"]="subsubsubsubsubparagraaf", ["pe"]="زیرزیرزیرزیرزیربخش", ["ro"]="subsubsubsubsubsectiune", }, ["subsubsubsubsubsubject"]={ ["cs"]="podpodpodpodpodtema", ["de"]="unterunterunterunterunterthema", ["en"]="subsubsubsubsubsubject", ["fr"]="soussoussoussoussoussujet", ["it"]="sottosottosottosottosottoargomento", ["nl"]="subsubsubsubsubonderwerp", ["pe"]="زیرزیرزیرزیرزیرموضوع", ["ro"]="subsubsubsubsubsubiect", }, ["subsubsubsubsubsubsection"]={ ["cs"]="podpodpodpodpodpodsekce", ["de"]="unterunterunterunterunterunterabsatz", ["en"]="subsubsubsubsubsubsection", ["fr"]="soussoussoussoussoussoussection", ["it"]="sottosottosottosottosottosottocapoverso", ["nl"]="subsubsubsubsubsubparagraaf", ["pe"]="زیرزیرزیرزیرزیرزیربخش", ["ro"]="subsubsubsubsubsubsectiune", }, ["subsubsubsubsubsubsubject"]={ ["cs"]="podpodpodpodpodpodtema", ["de"]="unterunterunterunterunterunterthema", ["en"]="subsubsubsubsubsubsubject", ["fr"]="soussoussoussoussoussoussujet", ["it"]="sottosottosottosottosottosottoargomento", ["nl"]="subsubsubsubsubsubonderwerp", ["pe"]="زیرزیرزیرزیرزیرزیرموضوع", ["ro"]="subsubsubsubsubsubsubiect", }, ["subsubsubsubsubsubsubsection"]={ ["cs"]="podpodpodpodpodpodpodsekce", ["de"]="unterunterunterunterunterunterunterabsatz", ["en"]="subsubsubsubsubsubsubsection", ["fr"]="soussoussoussoussoussoussoussection", ["it"]="sottosottosottosottosottosottosottocapoverso", ["nl"]="subsubsubsubsubsubsubparagraaf", ["pe"]="زیرزیرزیرزیرزیرزیرزیربخش", ["ro"]="subsubsubsubsubsubsubsectiune", }, ["subsubsubsubsubsubsubsubject"]={ ["cs"]="podpodpodpodpodpodpodtema", ["de"]="unterunterunterunterunterunterunterthema", ["en"]="subsubsubsubsubsubsubsubject", ["fr"]="soussoussoussoussoussoussoussujet", ["it"]="sottosottosottosottosottosottosottoargomento", ["nl"]="subsubsubsubsubsubsubonderwerp", ["pe"]="زیرزیرزیرزیرزیرزیرزیرموضوع", ["ro"]="subsubsubsubsubsubsubsubiect", }, ["subsubsubsubsubsubsubsubsection"]={ ["cs"]="podpodpodpodpodpodpodpodsekce", ["de"]="unterunterunterunterunterunterunterunterabsatz", ["en"]="subsubsubsubsubsubsubsubsection", ["fr"]="soussoussoussoussoussoussoussoussection", ["it"]="sottosottosottosottosottosottosottosottocapoverso", ["nl"]="subsubsubsubsubsubsubsubparagraaf", ["pe"]="زیرزیرزیرزیرزیرزیرزیرزیربخش", ["ro"]="subsubsubsubsubsubsubsubsectiune", }, ["subsubsubsubsubsubsubsubsubject"]={ ["cs"]="podpodpodpodpodpodpodpodtema", ["de"]="unterunterunterunterunterunterunterunterthema", ["en"]="subsubsubsubsubsubsubsubsubject", ["fr"]="soussoussoussoussoussoussoussoussujet", ["it"]="sottosottosottosottosottosottosottosottoargomento", ["nl"]="subsubsubsubsubsubsubsubonderwerp", ["pe"]="زیرزیرزیرزیرزیرزیرزیرزیرموضوع", ["ro"]="subsubsubsubsubsubsubsubsubiect", }, ["subsubsubsubsubsubsubsubsubsection"]={ ["cs"]="podpodpodpodpodpodpodpodpodsekce", ["de"]="unterunterunterunterunterunterunterunterunterabsatz", ["en"]="subsubsubsubsubsubsubsubsubsection", ["fr"]="soussoussoussoussoussoussoussoussoussection", ["it"]="sottosottosottosottosottosottosottosottosottocapoverso", ["nl"]="subsubsubsubsubsubsubsubsubparagraaf", ["pe"]="زیرزیرزیرزیرزیرزیرزیرزیرزیربخش", ["ro"]="subsubsubsubsubsubsubsubsubsectiune", }, ["subsubsubsubsubsubsubsubsubsubject"]={ ["cs"]="podpodpodpodpodpodpodpodpodtema", ["de"]="unterunterunterunterunterunterunterunterunterthema", ["en"]="subsubsubsubsubsubsubsubsubsubject", ["fr"]="soussoussoussoussoussoussoussoussoussujet", ["it"]="sottosottosottosottosottosottosottosottosottoargomento", ["nl"]="subsubsubsubsubsubsubsubsubonderwerp", ["pe"]="زیرزیرزیرزیرزیرزیرزیرزیرزیرموضوع", ["ro"]="subsubsubsubsubsubsubsubsubsubiect", }, ["sunday"]={ ["cs"]="nedele", ["de"]="sonntag", ["en"]="sunday", ["fr"]="dimanche", ["it"]="domenica", ["nl"]="zondag", ["pe"]="یک‌شنبه", ["ro"]="duminica", }, ["support"]={ ["cs"]="podpora", ["de"]="support", ["en"]="support", ["fr"]="support", ["it"]="supporto", ["nl"]="support", ["pe"]="حمایت", ["ro"]="suport", }, ["sym"]={ ["cs"]="sym", ["de"]="sym", ["en"]="sym", ["fr"]="sym", ["it"]="sim", ["nl"]="sym", ["pe"]="نم", ["ro"]="sym", }, ["symbol"]={ ["cs"]="symbol", ["de"]="symbol", ["en"]="symbol", ["fr"]="symbole", ["it"]="simbolo", ["nl"]="symbool", ["pe"]="نماد", ["ro"]="simbol", }, ["synchronize"]={ ["cs"]="synchronize", ["de"]="synchronize", ["en"]="synchronize", ["fr"]="synchronize", ["it"]="synchronize", ["nl"]="synchroniseer", ["pe"]="تطابق", ["ro"]="synchronize", }, ["system"]={ ["cs"]="system", ["de"]="systeme", ["en"]="system", ["fr"]="systeme", ["it"]="sistema", ["nl"]="systeem", ["pe"]="سیستم", ["ro"]="sistem", }, ["table"]={ ["cs"]="tabulka", ["de"]="tabelle", ["en"]="table", ["fr"]="tableau", ["it"]="tabella", ["nl"]="tabel", ["pe"]="جدول", ["ro"]="tabelul", }, ["tablehead"]={ ["cs"]="zahlavitabulky", ["de"]="tabellenueberschrift", ["en"]="tablehead", ["fr"]="tetetableau", ["it"]="testatabella", ["nl"]="tabelkop", ["pe"]="سرجدول", ["ro"]="antettabel", }, ["tables"]={ ["cs"]="tabulky", ["de"]="tabellen", ["en"]="tables", ["fr"]="tables", ["it"]="tabelle", ["nl"]="tabellen", ["pe"]="جدولها", ["ro"]="tabelele", }, ["tabletail"]={ ["cs"]="konectabulky", ["de"]="tabellenende", ["en"]="tabletail", ["fr"]="queuetableau", ["it"]="codatabella", ["nl"]="tabelstaart", ["pe"]="دنباله‌جدول", ["ro"]="subsoltabel", }, ["tabulate"]={ ["cs"]="tabelator", ["de"]="tabulator", ["en"]="tabulate", ["fr"]="tabule", ["it"]="tabulato", ["nl"]="tabulatie", ["pe"]="جدول‌بندی", ["ro"]="tabulate", }, ["tabulatehead"]={ ["cs"]="tabulatehead", ["de"]="tabulatehead", ["en"]="tabulatehead", ["fr"]="tetetabule", ["it"]="testatabulato", ["nl"]="tabulatiekop", ["pe"]="سرجدول‌بندی", ["ro"]="tabulatehead", }, ["tabulatetail"]={ ["cs"]="tabulatetail", ["de"]="tabulatetail", ["en"]="tabulatetail", ["fr"]="queuetabule", ["it"]="codatabulato", ["nl"]="tabulatiestaart", ["pe"]="دنباله‌جدول‌بندی", ["ro"]="tabulatetail", }, ["tall"]={ ["cs"]="vysoko", ["de"]="lang", ["en"]="tall", ["fr"]="long", ["it"]="alto", ["nl"]="lang", ["pe"]="دراز", ["ro"]="inalt", }, ["teletype"]={ ["cs"]="strojopis", ["de"]="fernschreiber", ["en"]="teletype", ["fr"]="teletype", ["it"]="teletype", ["nl"]="teletype", ["pe"]="دورنگاره", ["ro"]="teletype", }, ["temporary"]={ ["cs"]="docasne", ["de"]="temporaer", ["en"]="temporary", ["fr"]="temporaire", ["it"]="temporaneo", ["nl"]="voorlopig", ["pe"]="موقتی", ["ro"]="temporar", }, ["test"]={ ["cs"]="test", ["de"]="test", ["en"]="test", ["fr"]="test", ["it"]="test", ["nl"]="test", ["pe"]="تست", ["ro"]="test", }, ["text"]={ ["cs"]="text", ["de"]="text", ["en"]="text", ["fr"]="texte", ["it"]="testo", ["nl"]="tekst", ["pe"]="متن", ["ro"]="text", }, ["three"]={ ["cs"]="tri", ["de"]="drei", ["en"]="three", ["fr"]="trois", ["it"]="tre", ["nl"]="drie", ["pe"]="سه", ["ro"]="trei", }, ["thursday"]={ ["cs"]="ctvrtek", ["de"]="donnerstag", ["en"]="thursday", ["fr"]="jeudi", ["it"]="giovedi", ["nl"]="donderdag", ["pe"]="پنج‌شنبه", ["ro"]="joi", }, ["tight"]={ ["en"]="tight", ["nl"]="krap", }, ["title"]={ ["cs"]="titul", ["de"]="titel", ["en"]="title", ["fr"]="titre", ["it"]="titolo", ["nl"]="titel", ["pe"]="عنوان", ["ro"]="titlu", }, ["toggle"]={ ["cs"]="toggle", ["de"]="toggle", ["en"]="wissel", ["fr"]="toggle", ["it"]="toggle", ["nl"]="toggle", ["pe"]="تغییر", ["ro"]="toggle", }, ["tolerant"]={ ["cs"]="tolerantni", ["de"]="tolerant", ["en"]="tolerant", ["fr"]="tolerant", ["it"]="tollerante", ["nl"]="soepel", ["pe"]="بردبار", ["ro"]="tolerant", }, ["top"]={ ["cs"]="vrsek", ["de"]="oben", ["en"]="top", ["fr"]="sup", ["it"]="cima", ["nl"]="boven", ["pe"]="بالا", ["ro"]="sus", }, ["tuesday"]={ ["cs"]="utery", ["de"]="dienstag", ["en"]="tuesday", ["fr"]="mardi", ["it"]="martedi", ["nl"]="dinsdag", ["pe"]="سه‌شنبه", ["ro"]="marti", }, ["two"]={ ["cs"]="dve", ["de"]="zwei", ["en"]="two", ["fr"]="deux", ["it"]="due", ["nl"]="twee", ["pe"]="دو", ["ro"]="doi", }, ["txt"]={ ["cs"]="txt", ["de"]="txt", ["en"]="txt", ["fr"]="txt", ["it"]="txt", ["nl"]="txt", ["pe"]="txt", ["ro"]="txt", }, ["type"]={ ["cs"]="opis", ["de"]="tippen", ["en"]="type", ["fr"]="type", ["it"]="type", ["nl"]="type", ["pe"]="تایپ", ["ro"]="type", }, ["typing"]={ ["cs"]="typing", ["de"]="tippen", ["en"]="typing", ["fr"]="typing", ["it"]="typing", ["nl"]="typen", ["pe"]="تایپ‌کردن", ["ro"]="typing", }, ["unavailable"]={ ["cs"]="nedostupne", ["de"]="nichtverfuegbar", ["en"]="unavailable", ["fr"]="indisponible", ["it"]="nondisponibile", ["nl"]="nietbeschikbaar", ["pe"]="غیرموجود", ["ro"]="nedisponibil", }, ["unit"]={ ["cs"]="jednotka", ["de"]="einheit", ["en"]="unit", ["fr"]="unite", ["it"]="unita", ["nl"]="eenheid", ["pe"]="واحد", ["ro"]="unitate", }, ["units"]={ ["cs"]="jednotky", ["de"]="einheiten", ["en"]="units", ["fr"]="unites", ["it"]="unita", ["nl"]="eenheden", ["pe"]="واحدها", ["ro"]="unitati", }, ["unknown"]={ ["cs"]="neznamy", ["de"]="unbekannt", ["en"]="unknown", ["fr"]="inconnu", ["it"]="ignoto", ["nl"]="onbekend", ["pe"]="ناشناس", ["ro"]="necunoscut", }, ["unpacked"]={ ["cs"]="rozbalene", ["de"]="ungepackt", ["en"]="unpacked", ["fr"]="degroupe", ["it"]="unpacked", ["nl"]="vanelkaar", ["pe"]="غیرفشرده", ["ro"]="despachetat", }, ["url"]={ ["cs"]="url", ["de"]="url", ["en"]="url", ["fr"]="url", ["it"]="url", ["nl"]="url", ["pe"]="url", ["ro"]="url", }, ["used"]={ ["cs"]="uzito", ["de"]="verwende", ["en"]="used", ["fr"]="used", ["it"]="usato", ["nl"]="gebruikt", ["pe"]="استفاده‌شده", ["ro"]="folosit", }, ["value"]={ ["cs"]="hodnota", ["de"]="wert", ["en"]="value", ["fr"]="valeur", ["it"]="valore", ["nl"]="waarde", ["pe"]="مقدار", ["ro"]="valoare", }, ["vertical"]={ ["cs"]="vertikalne", ["de"]="vertikal", ["en"]="vertical", ["fr"]="verticale", ["it"]="verticale", ["nl"]="vertikaal", ["pe"]="عمودی", ["ro"]="vertical", }, ["very"]={ ["cs"]="velmi", ["de"]="sehr", ["en"]="very", ["fr"]="tres", ["it"]="molto", ["nl"]="zeer", ["pe"]="خیلی", ["ro"]="foarte", }, ["verystrict"]={ ["cs"]="velmistriktni", ["de"]="sehrstreng", ["en"]="verystrict", ["fr"]="tresstrict", ["it"]="moltorigido", ["nl"]="zeerstreng", ["pe"]="خیلی‌سختگیر", ["ro"]="foartestrict", }, ["verytolerant"]={ ["cs"]="velmitolerantni", ["de"]="sehrtolerant", ["en"]="verytolerant", ["fr"]="trestolerant", ["it"]="moltotollerante", ["nl"]="zeersoepel", ["pe"]="خیلی‌بردبار", ["ro"]="foartetolerant", }, ["weak"]={ ["cs"]="weak", ["de"]="weak", ["en"]="weak", ["fr"]="weak", ["it"]="weak", ["nl"]="zwak", ["pe"]="هفته", ["ro"]="weak", }, ["wednesday"]={ ["cs"]="streda", ["de"]="mittwoch", ["en"]="wednesday", ["fr"]="mercredi", ["it"]="mercoledi", ["nl"]="woensdag", ["pe"]="چهارشنبه", ["ro"]="miercuri", }, ["week"]={ ["cs"]="tyden", ["de"]="woche", ["en"]="week", ["fr"]="semaine", ["it"]="settimana", ["nl"]="week", ["pe"]="هفته", ["ro"]="saptamana", }, ["weekday"]={ ["cs"]="vsedniden", ["de"]="wochentag", ["en"]="weekday", ["fr"]="joursemaine", ["it"]="giornosettimana", ["nl"]="weekdag", ["pe"]="روزهفته", ["ro"]="zisaptamana", }, ["white"]={ ["cs"]="bily", ["de"]="weiss", ["en"]="white", ["fr"]="blanc", ["it"]="bianco", ["nl"]="wit", ["pe"]="سفید", ["ro"]="alb", }, ["wide"]={ ["cs"]="siroce", ["de"]="breit", ["en"]="wide", ["fr"]="ample", ["it"]="ampio", ["nl"]="breed", ["pe"]="گسترده", ["ro"]="larg", }, ["width"]={ ["cs"]="sirka", ["de"]="breite", ["en"]="width", ["fr"]="largeur", ["it"]="ampiezza", ["nl"]="breedte", ["pe"]="عرض", ["ro"]="latime", }, ["xml"]={ ["cs"]="xml", ["de"]="xml", ["en"]="xml", ["fr"]="xml", ["it"]="xml", ["nl"]="xml", ["pe"]="xml", ["ro"]="xml", }, ["year"]={ ["cs"]="rok", ["de"]="jahr", ["en"]="year", ["fr"]="annee", ["it"]="anno", ["nl"]="jaar", ["pe"]="سال", ["ro"]="an", }, ["yes"]={ ["cs"]="ano", ["de"]="ja", ["en"]="yes", ["fr"]="oui", ["it"]="si", ["nl"]="ja", ["pe"]="بله", ["ro"]="da", }, }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/l-xml.lua0000644000175000017500000000120111376503616023427 0ustar norbertnorbertif not modules then modules = { } end modules ['l-xml'] = { version = 1.001, comment = "this module is replaced by the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We asume that the helper modules l-*.lua are loaded -- already. But anyway if you use mtxrun to run your script -- all is taken care of. if not trackers then require('trac-tra') end if not xml then require('lxml-tab') require('lxml-lpt') require('lxml-mis') require('lxml-aux') require('lxml-xml') end context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-ini.mkii0000644000175000017500000014426611754241457024306 0ustar norbertnorbert%D \module %D [ file=verb-ini, %D version=1997.12.22, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Today I would implement the pretty handler slightly %D different, using stack and intermediate flushing. Maybe %D even without active chars. So, someday \unknown. Also %D I think that there are better ways (the current approach %D is an accumulation; for instance, we could save a second %D argument by turning chars into numbers and vise versa. %D Because this module is quite independant of system macros, %D it can be used as a stand||alone verbatim environment. %D %D This is a sort of second release of \type{supp-ver} and %D therefore differs in some aspects from the implementation %D published in the \MAPS. The first change concern %D optimization of breaks, that is, the first and last two %D lines of verbatim blocks are kept together. The second %D adaption is due to the fact that I wanted to support pretty %D printing not only for \TEX\ sources, but also for \PERL, %D \METAPOST\ and probably more. The \JAVASCRIPT\ module is %D closely related to \PERL, so we will not mention that one %D again. \ifx \undefined \writestatus \input supp-mis.tex \fi %D Verbatim typesetting, especially of \TEX\ sources, is a %D non||trivial task. This is a direct results of the fact that %D characters can have \CATCODES\ other than~11 and such %D characters needs a special treatment. What for instance is %D \TEX\ supposed to do when it encounters a \type{$} or an %D \type{#}? This module deals with these matters. \writestatus{loading}{ConTeXt Verbatim Macros / Initialization} %D The verbatim environment has some features, like coloring %D \TEX\ text, seldom found in other environments. Especially %D when the output of \TEX\ is viewed on an electronic medium, %D coloring has a positive influence on the readability of %D \TEX\ sources, so we found it very acceptable to dedicate %D half of this module to typesetting \TEX\ specific character %D sequences in color. In this module we'll also present some %D macro's for typesetting inline, display and file verbatim. %D The macro's are capable of handling \TAB\ too. %D %D This module shows a few tricks that are often overseen by %D novice, like the use of the \TEX\ primitive \type{\meaning}. %D First I'll show in what way the users are confronted with %D verbatim typesetting. Because we want to be able to test for %D symmetry and because we hate the method of closing down the %D verbatim mode with some strange active character, we will %D use the following construction for display verbatim: %D %D \starttyping %D The Dutch word 'typen' stands for 'typing', therefore in the Dutch version %D one will not find the word 'verbatim'. %D \stoptyping %D %D In \CONTEXT\ files can be typed with \type{\typefile} and %D inline verbatim can be accomplished with \type{\type}. This %D last command comes in many flavors: %D %D \starttyping %D We can say \type<> or \type{something}. The first one is a bit %D longer but also supports slanted typing, which accomplished by typing %D \type<> word>>. We can also use commands to enhance the text %D \type<> text>>. Just to be complete, we decided %D to accept also \LaTeX\ alike verbatim, which means that \type+something+ %D and \type|something| are valid commands too. Of course we want the grouped %D alternatives to process \type{hello {\bf big} world} with braces. %D \stoptyping %D %D In the core modules, we will build this support on top of %D this module. There these commands can be tuned with %D accompanying setup commands. There we can enable commands, %D slanted typing, control spaces, \TAB||handling and (here we %D are:) coloring. We can also setup surrounding white space %D and indenting. Here we'll only show some examples. \unprotect %D \macros %D {verbatimfont} %D %D When we are typesetting verbatim we use a non||proportional %D (mono spaced) font. Normally this font is available by %D calling \type{\tt}. In \CONTEXT\ this command does a %D complete font||style switch. There we could have stuck with %D \type{\tttf}. \ifx\verbatimfont\undefined \def\verbatimfont{\tt\normalnoligatures\font} \fi \ifx\normalnoligatures\undefined \let\normalnoligatures\gobbleoneargument \fi %D \macros %D {obeyedspace, obeyedtab, obeyedline, obeyedpage} %D %D We have followed Knuth in naming macros that make \SPACE, %D \NEWLINE\ and \NEWPAGE\ active and assigning them %D \type{\obeysomething}, but first we set some default values. \def\obeyedspace {\hbox{ }} \def\obeyedtab {\obeyedspace} \def\obeyedline {\par} \def\obeyedpage {\vfill\eject} %D Because we will introduce a status variable, we can define %D a better \type {\obeyedspace}. \def\obeyedspace {\ifprocessingverbatim\hbox{ }\else\space\fi} %D \macros %D {controlspace,setcontrolspaces} %D %D First we define \type{\obeyspaces}. When we want visible %D spaces (control spaces) we only have to adapt the definition %D of \type{\obeyedspace} to: \def\controlspace{\hbox{\char32}} \def\normalspace { } \def\normalspaces{\catcode`\ =\@@space} \bgroup \catcode`\ =\@@active \gdef\obeyspaces{\catcode`\ =\@@active\def {\obeyedspace}} \gdef\setcontrolspaces{\catcode`\ =\@@active\def {\controlspace}} \egroup %D \macros %D {obeytabs, obeylines, obeypages, %D ignoretabs, ignorelines, ignorepages} %D %D Next we take care of \NEWLINE\ and \NEWPAGE\ and because we %D want to be able to typeset listings that contain \TAB, we %D have to handle those too. Because we have to redefine the %D \NEWPAGE\ character locally, we redefine the meaning of %D this (often already) active character. \catcode`\^^L=\@@active \def^^L{\par} %D The following indirect definitions enable us to implement %D all kind of \type{\obeyed} handlers. \bgroup \catcode`\^^I=\@@active \catcode`\^^M=\@@active \catcode`\^^L=\@@active \gdef\obeytabs {\catcode`\^^I=\@@active\def^^I{\obeyedtab}} \gdef\obeylines {\catcode`\^^M=\@@active\def^^M{\obeyedline}} \gdef\obeypages {\catcode`\^^L=\@@active\def^^L{\obeyedpage}} \gdef\ignoretabs {\catcode`\^^I=\@@active\def^^I{\obeyedspace}} \gdef\ignorelines {\catcode`\^^M=\@@active\def^^M{\obeyedspace}} \gdef\ignorepages {\catcode`\^^L=\@@ignore} % \@@active\def^^L{\obeyedline}} \gdef\ignoreeofs {\catcode`\^^Z=\@@ignore} %D For testing (see digit parser) we need an indirect macro %D in order to compare the next (\type {\next}) token %D (possibly \type {^^M}) being \type {\obeyedline}. \gdef\nextobeyedline{\obeyedline} \egroup %D \macros %D {obeycharacters} %D %D We also predefine \type{\obeycharacters}, which will %D enable us to implement character||specific behavior, like %D colored verbatim. \let\obeycharacters=\relax %D \macros %D {settabskips} %D %D The macro \type{\settabskip} can be used to enable tab %D handling. Processing tabs is sometimes needed when one %D processes a plain \ASCII\ listing. Tab handling slows down %D verbatim typesetting considerably. \bgroup \catcode`\^^I=\@@active \gdef\settabskips {\let\processverbatimline\doprocesstabskipline \catcode`\^^I\@@active \let^^I\doprocesstabskip} \gdef\setfixedtabskips#1% {\catcode`\^^I\@@active \def^^I{\kern#1\spaceskip}} \egroup %D \macros %D {processingverbatim} %D %D Typesetting a file in most cases results in more than one %D page. Because we don't want problems with files that are %D read in during the construction of the page, we set \type %D {\ifprocessingverbatim}, so the output routine can adapt %D its behavior. Originally we used \type {\scratchread}, but %D because we want to support nesting, we decided to use a %D separate input file. \newif\ifprocessingverbatim %D \macros %D {processinlineverbatim} %D %D Although the inline verbatim commands presented here will be %D extended and embedded in the core modules of \CONTEXT, %D they can be used separately. Both grouped and character %D alternatives are provided but \type{<<} and nested %D braces are implemented in the core module. This commands %D takes one argument: the closing command. %D %D \starttyping %D \processinlineverbatim{\closingcommand} %D \stoptyping %D %D One can define his own verbatim commands, which can be very %D simple: %D %D \starttyping %D \def\Verbatim {\processinlineverbatim\relax} %D \stoptyping %D %D or a bit more more complex: %D %D \starttyping %D \def\GroupedVerbatim% %D {\bgroup %D \dosomeusefullthings %D \processinlineverbatim\egroup} %D \stoptyping %D %D Before entering inline verbatim mode, we take care of the %D unwanted \TAB, \NEWLINE\ and \NEWPAGE\ characters and %D turn them into \SPACE. We need the double \type{\bgroup} %D construction to keep the closing command local. \def\setverbatimspaceskip {\setbox\scratchbox\hbox{x}% \spaceskip\wd\scratchbox \xspaceskip\spaceskip} \def\setupinlineverbatim {\verbatimfont \setverbatimspaceskip \let\obeytabs\ignoretabs \let\obeylines\ignorelines \let\obeypages\ignorepages \setupcopyverbatim} \def\doprocessinlineverbatim {\ifx\next\bgroup \setupinlineverbatim \catcode`\{\@@begingroup \catcode`\}\@@endgroup \def\next{\let\next=}% \else \setupinlineverbatim \def\next##1{\catcode`##1=\@@endgroup}% \fi \next} \def\processinlineverbatim#1% {\bgroup \processingverbatimtrue \localcatcodestrue % TeX processes paragraph's \def\endofverbatimcommand{#1\egroup}% \bgroup \aftergroup\endofverbatimcommand \futurelet\next\doprocessinlineverbatim} %D The closing command is executed afterwards as an internal %D command and therefore should not be given explicitly when %D typesetting inline verbatim. %D \macros %D {optimizeverbatim} %D %D One day, a collegue asked me why I didn't prevent breaking %D after a first or before a last verbatim line. At first sight %D I thought of using the two pass mechanism, but because we're %D already keeping track of individual lines, a more direct %D solution is possible: we just keep track of in what line %D we are. One can turn this feature off. \newif\ifoptimizeverbatim \optimizeverbatimtrue %D Before we implement display and file verbatim, we define %D some macros that deal with typesetting the individual lines. %D We keep track of the status by means of a character %D specification. This status variable tells us if we're %D skipping a first line or placing a first or last line. %D The next few examples show us where breaks are inserted. %D %D \bgroup %D %D \def\doverbatimnobreak %D {\nobreak\hrule width 10cm\par\penalty500} % == \nobreak %D %D \def\doverbatimgoodbreak %D {\nobreak\hrule width 3cm \par\penalty\linepenalty} %D %D \starttyping %D test %D test %D \stoptyping %D %D or %D %D \starttyping %D test %D test %D test %D test %D \stoptyping %D %D or %D %D \starttyping %D test %D %D test %D test %D test %D \stoptyping %D %D \egroup %D %D The long ones are \type{\nobreaks} and the short ones %D \type{\goodbreaks}. And this is how it's done: \def\doverbatimnobreak {\ifoptimizeverbatim\penalty500 \fi} \def\doverbatimgoodbreak {\ifoptimizeverbatim\penalty\linepenalty\fi} \def\doflushverbatimline {\expandafter\dodoverbatimline\expandafter{\savedverbatimline}} \def\doverbatimbeginofline#1% linenumber (optional provided by mkiv / todo) {\dontleavehmode \strut \the\everyline} \def\doverbatimendofline {\par} \def\doverbatimemptyline {\strut \par} \let\handleverbatimline=\relax % \def\initializeverbatimline% % {\global\let\savedverbatimline=\empty % \ifskipfirstverbatimline % \global\chardef\verbatimstatus=0 % \else % \global\chardef\verbatimstatus=1 % \fi} % % more efficient \global\chardef\verbatimstatus0 \def\initializeverbatimline {\global\let\savedverbatimline\empty \global\chardef\verbatimstatus\ifskipfirstverbatimline0 \else1 \fi} \chardef\verbatimemptylinemode\zerocount \def\presetemptyverbatimline {\ifcase\verbatimstatus \global\chardef\verbatimstatus\plusone \or \ifcase\verbatimemptylinemode\or\or \doemptyverbatimline \fi \or \ifcase\verbatimemptylinemode\else \doemptyverbatimline \fi \or \doflushverbatimline \global\let\savedverbatimline\empty \doemptyverbatimline \global\chardef\verbatimstatus\plustwo \else \kern\zeropoint \doverbatimnobreak \doflushverbatimline \global\let\savedverbatimline\empty \doemptyverbatimline \global\chardef\verbatimstatus\plustwo \fi} \def\presetnormalverbatimline {\ifcase\verbatimstatus \global\chardef\verbatimstatus\plustwo \or \global\chardef\verbatimstatus\plusthree \or \global\chardef\verbatimstatus\plusthree \or \doflushverbatimline \global\chardef\verbatimstatus\plusfour \or \kern\zeropoint \doverbatimnobreak \doflushverbatimline \global\chardef\verbatimstatus\plusfive \or \doverbatimgoodbreak \doflushverbatimline \fi \global\let\savedverbatimline\verbatimline} \def\presetlastverbatimline {\ifcase \verbatimstatus \or \or \or \doflushverbatimline \else \kern \zeropoint \doverbatimnobreak \doflushverbatimline \fi \ifcase\verbatimemptylinemode\or\else \kern \zeropoint \fi} %D \macros %D {skipfirstverbatimline} %D %D By default the rest of the first line is ignored. We can %D turn this feature off by saying: %D %D \starttyping %D \skipfirstverbatimlinefalse %D \stoptyping \newif\ifskipfirstverbatimline \skipfirstverbatimlinetrue %D \macros %D {processdisplayverbatim} %D %D We can define a display verbatim environment with the %D command \type{\processdisplayverbatim} in the following way: %D %D \starttyping %D \processdisplayverbatim{\closingcommand} %D \stoptyping %D %D \noindent For instance, we can define a simple command like: %D %D \starttyping %D \def\BeginVerbatim {\processdisplayverbatim{EndVerbatim}} %D \stoptyping %D %D \noindent But we can also do more advance things like: %D %D \starttyping %D \def\BeginVerbatim {\bigskip \processdisplayverbatim{\EndVerbatim}} %D \def\EndVerbatim {\bigskip} %D \stoptyping %D %D When we compare these examples, we see that the backslash in %D the closing command is optional. One is free in actually %D defining a closing command. If one is defined, the command %D is executed after ending verbatim mode. \def\processdisplayverbatim#1% {\par \bgroup \escapechar=-1 \xdef\verbatimname{\string#1}% \egroup \def\endofdisplayverbatim{\csname\verbatimname\endcsname}% \bgroup \parindent\zeropoint \ifdim\lastskip<\parskip \removelastskip \vskip\parskip \fi \parskip\zeropoint \processingverbatimtrue \global\linepartrue \expandafter\let\csname\verbatimname\endcsname\relax \edef\endofverbatimcommand{\csname\verbatimname\endcsname}% \edef\endofverbatimcommand{\meaning\endofverbatimcommand}% \verbatimfont \setverbatimspaceskip \global\linepartrue % needed for paragraph numbering \setupcopyverbatim \initializeverbatimline \copyverbatimline} %D We save the closing sequence in \type{\endofverbatimcommand} %D in such a way that it can be compared on a line by line %D basis. For the conversion we use \type{\meaning}, which %D converts the line to non||expandable tokens. We reset %D \type{\parskip}, because we don't want inter||paragraph %D skips to creep into the verbatim source. Furthermore we %D \type{\relax} the line||processing macro while getting the %D rest of the first line. The initialization command %D \type{\setupcopyverbatim} does just what we expect it to do: %D it assigns all characters \CATCODE~11. Next we switch to %D french spacing and call for obeyance. \newevery \everysetupverbatim \relax \def\setupcopyverbatim {\uncatcodecharacters \frenchspacing \obeyspaces \obeytabs \obeylines \obeypages \obeycharacters \the\everysetupverbatim} %D The main copying routine of display verbatim does an %D ordinary string||compare on the saved closing command and %D the current line. The space after \type{#1} in the %D definition of \type{\next} is essential! As a result of %D using \type{\obeylines}, we have to use \type{%}'s after %D each line but none after the first \type{#1}. {\obeylines% \long\gdef\copyverbatimline#1 {\def\next{#1 }% \gdef\verbatimline{#1}% \ifx\next\emptyspace% \presetemptyverbatimline% \else% \edef\next{\meaning\next}% \ifx\next\endofverbatimcommand% \presetlastverbatimline% \def\copyverbatimline{\egroup\endofdisplayverbatim}% \else% \presetnormalverbatimline% \fi% \fi% \handleverbatimline% \copyverbatimline}} %D The actual typesetting of a line is done by a separate %D macro, which enables us to implement \TAB\ handling. The %D \type{\do} and \type{\dodo} macros take care of the %D preceding \type{\parskip}, while skipping the rest of the %D first line. The \type{\relax} is used as an signal. %D \macros %D {iflinepar} %D %D A careful reader will see that \type{\linepar} is reset. %D This boolean can be used to determine if the current line is %D the first line in a pseudo paragraph and this boolean is set %D after each empty line. The \type{\relax} can be used to %D determine the end of the line when one implements a scanner %D routine. \newif\iflinepar \let\doopenupverbatimline=\empty \let\beginverbatimline\relax \let\endverbatimline \relax \long\def\dodoverbatimline#1% we don't want to group {\bgroup % due to pretty status \iflinepar\else\EveryPar{}\fi \dontleavehmode % \leavevmode \xdef\dokeepverbatimlinedata % why was this? {\parindent \the\parindent \hangindent\the\hangindent \hangafter \the\hangafter \leftskip \the\leftskip \rightskip \the\rightskip}% \egroup \dokeepverbatimlinedata \doopenupverbatimline \the\everyline\strut \beginverbatimline \processverbatimline{#1\relax\flushrestofverbatimline}% \endverbatimline \global\lineparfalse \obeyedline\par} %D \macros %D {flushrestofverbatimline} %D %D Some pretty drivers will collect tokens for the sake of %D testing on keywords. This collected string needs to be %D flushed. The \type {\relax} can serve as signal that there %D is nothing more to be interpreted. \let\flushrestofverbatimline\empty %D \macros %D {obeyemptylines,verbatimbaselineskip} %D %D Empty lines in verbatim can lead to white space on top of %D a new page. Because this is not what we want, we turn %D them into vertical skips. This default behavior can be %D overruled by: %D %D \starttyping %D \obeyemptylines %D \stoptyping %D %D Although it would cost us only a few lines of code, we %D decided not to take care of multiple empty lines. When a %D (display) verbatim text contains more successive empty %D lines, this probably suits some purpose. When applicable, %D one can set the verbatim baselineskip. \bgroup \catcode`\^^L=\@@active \gdef\emptypage {^^L} \catcode`\^^M=\@@active \gdef\emptyline {^^M} \gdef\emptyspace { } \egroup \def\verbatimbaselineskip% We don't use \let here! {\baselineskip} \def\doemptyverbatimline {\vskip\verbatimbaselineskip {\setbox0\hbox{\the\everyline}}% \global\linepartrue} % \def\obeyemptylines % {\let\donextemptyverbatimline\doemptyverbatimline} \def\obeyemptylines % tricky, only in verbatim (should be token list)! {\chardef\verbatimemptylinemode\plusone} \def\obeyallemptylines % tricky, only in verbatim (should be token list)! {\chardef\verbatimemptylinemode\plustwo} %D \TEX\ does not offer \type{\everyline}, which is a direct %D result of its advanced multi||pass paragraph typesetting %D mechanism. Because in verbatim mode paragraphs and lines are %D more or less equal, we can easily implement our own simple %D \type{\everyline} support. %D \macros %D {EveryPar, EveryLine} %D %D In this module we've reserved \type{\everypar} for the %D things to be done with paragraphs and \type{\everyline} for %D line specific actions. In \CONTEXT\ however, we use %D \type{\everypar} for placing side- and columnfloats, %D inhibiting indentation and some other purposes. In verbatim %D mode, every line becomes a paragraph, which means that %D \type{\everypar} is executed frequently. To be sure, the %D user specific use of both \type{\everyline} and %D \type{\everypar} is implemented by means of %D \type{\EveryLine} and \type{\EveryPar}. %D %D We still have to take care of the \TAB. A \TAB\ takes eight %D spaces and a \SPACE\ normally has a width of 0.5~em. Because %D we can be halfway a tabulation, we must keep track of the %D position. This takes time, especially when we print complete %D files, therefore we \type{\relax} this mechanism by default. \chardef\spacespertab=7 \def\doprocesstabskip {\obeyedspace % \hskip.5em or \hbox to .5em{} \ifdone \donefalse \advance\scratchcounter \plusone \@EA\doprocesstabskip \else\ifnum\scratchcounter>\spacespertab % nothing \else \advance\scratchcounter \plusone \@EAEAEA\doprocesstabskip \fi\fi} \let\endoftabskipping=\relax % will become obsolete \def\doprocesstabskipline#1% {\bgroup \scratchcounter\plusone \dodoprocesstabskipline#1\relax \egroup} \def\dodoprocesstabskipline#1% {\ifnum\scratchcounter>\spacespertab\relax \donetrue \else \donefalse \advance \fi \scratchcounter \plusone \ifx#1\relax \else \ifcase\tabskipmode % can't happen \or % go on \else\ifnum`#1<128 % ok, no special character \else\ifnum\catcode`#1=\active % quits parsing, else utf lookahead problems \chardef\tabskipmode\zerocount \fi\fi\fi \ifcase\tabskipmode \@EAEAEA#1% \else \@EAEAEA#1\@EAEAEA\dodoprocesstabskipline \fi \fi} % ^ will be replaced \chardef\tabskipmode=1 % 0=quit 1=no test 2=test on active>128 \long\def\processverbatimline#1{#1} % remove the fake grouping %D \macros %D {processfileverbatim} %D %D The verbatim typesetting of files is done on a bit different %D basis. This time we don't check for a closing command, but %D look for \EOF\ and when we've met, we make sure it does not %D turn into an empty line. %D %D \starttyping %D \processfileverbatim{filename} %D \stoptyping %D %D We reserve a dedicated file handle. \newread\verbatiminput \newcount\verbatimlinenumber \let \beginofverbatimlines \relax \let \endofverbatimlines \relax \def\processfileverbatim#1% {\par \bgroup \processingverbatimtrue \global\verbatimlinenumber\zerocount \global\linepartrue \beginofverbatimlines \bgroup \parindent\zeropoint \ifdim\lastskip<\parskip \removelastskip \vskip\parskip \fi \parskip\zeropoint \verbatimfont \uncatcodecharacters \setverbatimspaceskip \frenchspacing \obeyspaces \obeytabs \obeylines \obeypages \obeycharacters \ignoreeofs \catcode`\^^M=\@@ignore % \par is already taken care of % \openin\verbatiminput=#1\relax \openinputfile\verbatiminput{#1}% \skipfirstverbatimlinefalse \initializeverbatimline \def\readline% {\ifeof\verbatiminput \else \ifx\firstverbatimfileline\empty \global\advance\verbatimlinenumber\plusone \read\verbatiminput to \verbatimline \else \let\verbatimline\firstverbatimfileline \let\firstverbatimfileline\empty \fi \fi \ifeof\verbatiminput \ifx\lastverbatimfileline\empty \presetlastverbatimline \let\readline\relax \else % we will re-enter the \ifeof branch twice \presetnormalverbatimline \def\readline% {\let\verbatimline\lastverbatimfileline \let\lastverbatimfileline\empty}% \fi \else\ifx\verbatimline\empty \presetemptyverbatimline \else\ifx\verbatimline\emptyline \presetemptyverbatimline \else\ifx\verbatimline\emptypage \presetemptyverbatimline \else \presetnormalverbatimline \fi\fi\fi\fi \handleverbatimline \readline}% \ifeof\verbatiminput \else \expandafter\readline \fi \closein\verbatiminput \egroup \endofverbatimlines \egroup \ignorespaces} %D Something new: \def\processfilelinesverbatim#1#2#3% {\bgroup \let\saveddoflushverbatimline\doflushverbatimline \let\saveddoemptyverbatimline\doemptyverbatimline \def\checkverbatimfileline##1% {\ifnum\verbatimlinenumber<#2\else \ifnum\verbatimlinenumber>#3\else ##1% \fi\fi}% \def\doflushverbatimline {\checkverbatimfileline\saveddoflushverbatimline}% \def\doemptyverbatimline {\checkverbatimfileline\saveddoemptyverbatimline}% \processfileverbatim{#1}% \egroup} %D \macros %D {firstverbatimfileline, lastverbatimfileline} %D %D The following two macros can be set to achieve special %D effects, like: %D %D \starttyping %D \convertargument\StartFake{something}\to\firstverbatimfileline %D \convertargument\StopFake\to\firstverbatimfileline %D \stoptyping %D %D These hooks were needed for typesetting flowchart %D definitions verbatim, since the temporary files does not %D have the start and stop commands embedded. \let\firstverbatimfileline\empty \let\lastverbatimfileline \empty %D One can use the different \type{\obeysomething} commands to %D influence the behavior of these macro's. We use for instance %D \type{\obeycharacters} for making \type{/} an active %D character when we want to include typesetting commands. %D The next part of this module deals with pretty printing. The %D best way to understand how pretty verbatim typeseting works %D is to take a look at the output produced by the \TEX, \PERL\ %D and \METAPOST\ modules first. Each of these modules has a %D few setup macros that tag the individual characters with a %D number that itself is associated to a interpretation macro. %D A previous implementation linked characters (after making %D them active) directly to such interpreters, but the more %D indirect way makes it possible to inspect the next %D character(s) without much expansion problems and/or %D increasing run time. %D By the way, \TEX\ defines \type{\+} as an outer macro, so we %D have to redefine this one to keep ourselves out of complaints. \def\+{\tabalign} %D Just to keep things consistant and to speed up some macros a %D but, we define a few private constants. \def\!!PRETTY {PRETTY} \def\!!prettyone {prettyone} \def\!!prettytwo {prettytwo} \def\!!prettythree {prettythree} \def\!!prettyfour {prettyfour} \def\!!prettyfive {prettyfive} \def\!!prettynine {prettynine} \def\!!prettyeight {prettyeight} \def\!!prettytwoone {prettytwoone} \def\!!prettyfourthree {prettyfourthree} %D The first step in defining a pretty interpreter is to assign %D each character that needs special attention a number, like: %D %D \starttyping %D \setpretty \`A 21 %D \stoptyping %D %D Here the macro \type{\setpretty} makes the character %D \type{A} active, and sets it meaning to the auxiliary macro %D \type{\handleprettytoken}. This auxiliary macro takes the %D character code (a number) and the interpretation number. The %D three step implementation uses the \TEX book \type{~} trick. \def\dodosetpretty {\!!countb=\uccode`~\relax \catcode\!!countb=\@@active \uppercase{\edef~{\noexpand\handleprettytoken{\the\!!counta}{\the\!!countb}}}} \def\dosetpretty {\afterassignment\dodosetpretty\!!counta} \def\setpretty {\afterassignment\dosetpretty\uccode`~=} %D The macro \type{\handleprettytoken} is rather trivial and %D calls for an interpreter macro. \def\handleprettytoken#1% {\csname\!!PRETTY#1\endcsname} % \getvalue{\!!PRETTY#1}} %D This interpreter is installed by saying %D %D \starttyping %D \installprettyhandler 21 \SOMEprettyone %D \stoptyping \def\installprettyhandler#1 #2% {\letvalue{\!!PRETTY#1}#2} %D Such an interpreter gets the character number: %D %D \starttyping %D \def\SOMEprettyone#1{...\getpretty{#1}...} %D \stoptyping %D %D where \type{\getpretty} equals \type{\char}. We can't %D use \type{\let} here because we have to get rid of the %D braces. \def\getpretty#1% {\char#1} %D Sometimes the action depends on the next token. This token %D can be passed to the macro \type{\getprettydata}, that sets %D \type{\prettytype} to the interpreter code. The character %D code is saved in \type{\prettychar}. \def\setprettydata#1#2% {\global\chardef\prettytype#1% \global\chardef\prettychar#2\relax} \def\getprettydata#1% {\global\chardef\prettytype\zerocount \global\chardef\prettychar\zerocount \bgroup \let\handleprettytoken\setprettydata \setbox0\hbox{#1}% expands #1 and ignores space \egroup} %D If needed the current and next token can be handled alongside: \def\getpretties#1#2% {\char#1\bgroup\let\handleprettytoken\getsecondpretty#2\egroup} \def\getsecondpretty#1#2% {\char#2} %D When needed, one can reassign an interpreter by using %D \type{\newpretty} and its associates. %D %D \bgroup %D \setuptyping[file][optionoptie=tex,paletpalet=colorpretty] %D %D \startbuffer %D \bgroup %D \catcode`\|=\@@escape %%\|\ %D \catcode`\\=\@@active %%\\+ %D |gdef|dohandlenewpretty#1% %D {|def|dodohandlenewpretty##1% %D {|def|oldprettychar{#1}% %D |getprettydata{##1}% %D |ifnum|oldprettychar=|prettychar %D |def|dododohandlenewpretty####1% %D {|getprettydata{\}% %D |let|oldprettytype=|prettytype %D |getprettydata{####1}% %D |ifnum|prettytype=|oldprettytype %D |let|next=|newpretty %D |else %D |def|next{|newprettycommand{#1}##1####1}% %D |fi %D |next}% %D |let|next=|dododohandlenewpretty %D |else %D |def|next{|newprettycommand{#1}##1}% %D |fi %D |next}% %D |def|donohandlenewpretty##1% %D {|newprettycommand{#1}##1}% %D |handlenextnextpretty|dodohandlenewpretty|donohandlenewpretty} %D |egroup %D \stopbuffer %D %D {\newprettytrue\typebuffer} %D %D In this example we see that the colors differ from what we %D expect, but conform the definitions in the macro. This kind %D of recoloring can be achieved by saying: %D %D \typebuffer %D %D We'll show some more examples: %D %D \startbuffer[pretty] %D \installnewpretty r \red %D \installnewpretty g \green %D \installnewpretty b \blue %D \stopbuffer %D %D \getbuffer[pretty] %D %D \startbuffer %D %%\ r{Red %D %%\ g\Green %D %%\ b[Blue %D \stopbuffer %D %D {\newprettytrue\typebuffer} %D %D Watch the green \type{\Green}! This lines are specified as: %D %D \typebuffer %D %D along with: %D %D \typebuffer[pretty] %D %D When needed, one can use grouping. %D %D \startbuffer %D {yes} %%\ B %%\{[ %%\}] %D {no} %D {no} %%\ E %D {yes} %D \stopbuffer %D %D \typebuffer %D %D Here we tell the visualizer that the \type +{+ should be %D treated like a \type +[+ so we get: %D %D {\newprettytrue\typebuffer} %D %D I won't explain the details of this mechanism. Those who %D want to build their own pretty interpreters have to close %D read the source anyway. %D %D Last we show an example of mixed pretty typesetting: %D %D \startbuffer %D \ziezo{test} %%\ P ##\ B##\ T % enter PERL mode %%\ E %D if $test eq "test" ##\ B ##\ B##\ T % begin group (\bgroup) %%\ E %D if $test eq "test"; ##\ T %%\ B%%\ T % enter TEX mode %%\ E %D \ziezo{test} %%\ M %%\ B%%\ T % enter METAPOST mode %%\ E %D draw (0,0)--(10,10); %%\ E ##\ B##\ T % end group (\egroup) %%\ E %D if $test eq "test"; %D \stopbuffer %D %D \typebuffer %D %D Here we use \type{%%\ T}, \type{%%\ P} and \type{%%\ M} for %D switching between \TEX, \PERL\ and \METAPOST\ mode. %D %D {\newprettytrue\typebuffer} %D %D \egroup %D %D Don't forget to set: \newif\ifnewpretty \def\installnewpretty {\def\doinstallnewpretty##1% {\setvalue{NP::\the\scratchcounter}{##1}}% \afterassignment\doinstallnewpretty\scratchcounter=`} %D Let's define the options we used here: \newevery\everyprettyend\relax \let\prettyend=\relax \def\prettybegin {\bgroup\def\prettyend{\the\everyprettyend\egroup}} \installnewpretty B \prettybegin \installnewpretty E \prettyend \installnewpretty J \setupprettyJVtype \installnewpretty M \setupprettyMPtype \installnewpretty P \setupprettyPLtype \installnewpretty T \setupprettyTEXtype %D \macros %D {ifnaturaltextext} %D %D When one uses \ETEX, switching to normal \TEX\ is possible %D too. We also introduce a switch that can be used in the %D drivers and set in higher level shell macros. \newif\ifnaturaltextext % \starttyping % test /naturaltextext\hpos{word}{test}/relax test % \stoptyping % % \MPxy{word} \def\naturaltextext#1\relax {\bgroup \prettynaturalfont{\restorecatcodes\scantokens{\ignorespaces#1}}% \egroup} \def\naturaltextext#1\relax {\bgroup \def\ascii{#1}% \setnormalcatcodes \restorecatcodes \prettynaturalfont{\scantokens\expandafter{\ascii}\ifhmode\unskip\fi}% \egroup} \installnewpretty N \naturaltextext %D When seen in action this gives: %D %D \startbuffer %D \startTEX %D \def\mathematics#1% %%\ N usage: \type {\mathematics{x^2}} %D {\ifmmode#1\else$#1$\fi} %%\ N becomes: \mathematics{X^2} %D \stopTEX %D \stopbuffer %D %D \getbuffer %D %D This is keyed in as: %D %D \typebuffer %D This means that when the interpreter modules support this %D mechanism, by default we have some keys already available. \def\newpretty#1% {\getprettydata{#1}% \ifcase\prettytype \expandafter\nonewpretty \else \expandafter\donewpretty \fi #1} \def\nonewpretty#1#2% {\getprettydata{#2}% \getvalue{NP::\the\prettychar}} \def\donewpretty#1% {\bgroup \def\handleprettytoken##1##2##3% {\getprettydata{##3}% \egroup \ifcase\prettytype\else \setpretty##2=\prettytype\relax \fi}% #1} %D When implementing new pretty macros, one only needs to %D define something like: %D %D \starttyping %D \def\TEXtypezero% %D {\handlenewpretty\TEXtypethree} %D \stoptyping %D %D Here the number states the category (in our examples the %D backslash). The second argument takes care of normal %D situations. \def\handlenewpretty#1% {\let\newprettycommand=#1% \handlenextnextpretty\dohandlenewpretty\newprettycommand} %D The previous shown implementation only interprets single %D comments, but the final one also accepts double ones. The %D main reason for this is that in \JAVA\ we have to deal with %D \type{//}. Personally I prefer the double \type{%%} because %D is stands out and is more symmetrical with the double %D slash. \bgroup \catcode`\|=\@@escape \catcode`\\=\@@active |gdef|dohandlenewpretty#1% {|def|dodohandlenewpretty##1% {|def|oldprettychar{#1}% |getprettydata{##1}% |ifnum|oldprettychar=|prettychar |def|dododohandlenewpretty####1% {|getprettydata{\}% |let|oldprettytype=|prettytype |getprettydata{####1}% |ifnum|prettytype=|oldprettytype |let|next|newpretty |else |def|next{|newprettycommand{#1}##1####1}% |fi |next}% |let|next|dododohandlenewpretty |else |def|next{|newprettycommand{#1}##1}% |fi |next}% |def|donohandlenewpretty##1% {|newprettycommand{#1}##1}% |handlenextnextpretty|dodohandlenewpretty|donohandlenewpretty} |egroup %D The `nextnext' macro we used in the previous definition %D looks ahead. This is needed because individual lines are %D handles by macro's and the next character can be something %D that ends the line and/or does not belong to the verbatim %D data. \def\handlenextnextpretty#1#2#3% {\def\dohandlenextnextpretty% {\ifx\next\bgroup % something {} \@EA#2% \else\ifx\next\relax % end of line / signal \@EAEAEA#2% \else \@EAEAEA#1% \fi\fi {#3}}% \futurelet\next\dohandlenextnextpretty} %D The pretty interpreters can (and will) change the meaning of %D some controls. To enable them calling the originals we save %D their meanings and to enable nesting we permit this only %D once. \def\saveprettycontrols {\global\let\oldobeyedspace \obeyedspace \global\let\oldobeyedline \obeyedline \global\let\oldobeyedpage \obeyedpage \let\saveprettycontrols \relax} %D The \PERL\ and \METAPOST\ interpreters will also handle %D reserved words. Sets of identifiers are defined like: %D %D \starttyping %D \useprettyidentifiers \MODULAidentifiers \MODULAsetspecials %D if then else elsif case while do repeat until ... %D \stoptyping %D %D New entries can be added to existing sets by repeatedly %D using this command. \def\useprettyidentifiers#1#2% \variable \presetcatcodes {\bgroup \ifx#1\undefined \global\let#1=\empty \fi \def\handleprettytoken##1##2{\char##2}% #2\relax \def\douseprettyidentifiers##1\par% {\xdef#1{\space#1\space##1}% \egroup}% \douseprettyidentifiers} %D We can test om identifiers with: \def\doifprettyidentifierelse#1% {\doifincsnameelse{\space#1\space}} %D \macros %D {prettyidentifierfont,prettyvariablefont,prettynaturalfont} %D %D When one want to typeset identifiers and system variables %D in a different typeface, one has to set the next two %D variables. \let\prettyidentifierfont=\relax \let\prettyvariablefont =\relax \let\prettynaturalfont =\relax %D The interpreter macros are loaded at run time. The main %D reason lays in the fact that we don't want to have the %D identifier lists hard coded in the format file. To prevent %D repetitive loading, one should load the modules before the %D first call to the macros. %D %D \starttyping %D \input verb-tex.tex %D \input verb-pl.tex %D \input verb-mp.tex %D \input verb-jv.tex %D \stoptyping %D %D In \CONTEXT\ we follow a different thread, and therefore all %D macros in the additional modules use \type {\gdef}'s and %D \type {\doglobal}'s. Manipulating \type {\globaldef} is %D possible but leads to fuzzy situations. %D \macros %D {ifdisablepretty,disableprettynow,disableprettyafterwards} %D %D Although for pretty printing \PERL\ and \JAVASCRIPT\ code %D one has to implement a bit more clever mechanism, the next %D switches can be used to turn off pretty printing. The %D boolean turns on this feature. \newif\ifdisablepretty \disableprettyfalse \newif\ifprettydisabled \prettydisabledfalse \def\disableprettynow {\ifdisablepretty\ifprettydisabled\else \let\prettyidentifierfont\relax \let\prettyvariablefont\relax \let\prettycomment\relax \def\beginofpretty[##1]{}% \let\endofpretty\relax \prettydisabledtrue \fi\fi} \def\disableprettyafterwards {\ifdisablepretty\ifprettydisabled\else \def\endofpretty{\normalendofpretty\disableprettynow}% \fi\fi} \def\enableprettynow {\prettydisabledfalse \let\prettyidentifierfont\normalprettyidentifierfont \let\prettyvariablefont \normalprettyvariablefont \let\prettynaturalfont \normalprettynaturalfont \let\beginofpretty \normalbeginofpretty \let\endofpretty \normalendofpretty} %D This feature is hooked into the verbatim line handling %D routine with: \def\beginverbatimline {\prettydisabledfalse \ifnewpretty\else\let\handlenewpretty\empty\fi % moved \let\normalprettyidentifierfont\prettyidentifierfont \let\normalprettyvariablefont \prettyvariablefont \let\normalprettynaturalfont \prettynaturalfont \let\normalbeginofpretty \beginofpretty \let\normalendofpretty \endofpretty} \def\endverbatimline {\enableprettynow} %D The rest of this module is dedicated to non \CONTEXT\ users %D and shows an example of an verbatim environment based on the %D previous macros. %D %D The macro's can be used to construct the commands we %D mentioned in the beginning of this documentation. We leave %D this to the fantasy of the reader and only show some \PLAIN\ %D \TEX\ alternatives for display verbatim and listings. We %D define three commands for typesetting inline text, display %D text and files verbatim. The inline alternative also accepts %D user supplied delimiters. %D %D %D \type{text} %D %D \starttyping %D ... verbatim text ... %D \stoptyping %D %D \typefile{filename} %D %D We can turn on the options by: %D %D \starttyping %D \controlspacetrue %D \verbatimtabstrue %D \prettyverbatimtrue %D \stoptyping %D %D Here is the implementation: \newif\ifcontrolspace \newif\ifverbatimtabs \newif\ifprettyverbatim \ifCONTEXT \else \def\presettyping {\ifcontrolspace \let\obeyspace \setcontrolspace \fi \ifverbatimtabs \let\obeytabs \settabskips \fi \ifprettyverbatim \let\obeycharacters\setupprettytype \fi} \def\type {\bgroup \def\_{\string_}% \def\^{\string^}% \presettyping \processinlineverbatim\egroup} \def\starttyping {\bgroup \presettyping \processdisplayverbatim\stoptyping} \def\stoptyping {\egroup} \def\typefile#1% {\bgroup \presettyping \processfileverbatim{#1}% \egroup} \fi %D In \CONTEXT\ users say things like: %D %D \starttyping %D \definetyping [TEX] [option=TEX] %D \definetyping [MP] [option=MP] %D \definetyping [PL] [option=PL] %D \definetyping [JV] [option=JV] %D \stoptyping %D %D or %D %D \starttyping %D \setuptyping[file][option=color] %D \stoptyping %D %D That way \CONTEXT\ selects the appropriate interpreter %D itself, but more on that in another module. In other %D packages one can define: \ifCONTEXT \else \input verb-tex.mkii \input verb-mp.mkii \def\startTEX {\bgroup \everypar{}% \let\obeycharacters\setupprettyTEXtype \processdisplayverbatim{\stopTEX}} \def\startMP {\bgroup \everypar{}% \let\obeycharacters\setupprettyMPtype \processdisplayverbatim{\stopMP}} \let\stopTEX=\egroup \let\stopMP =\egroup \fi %D This following poor mans implementation of color is based on %D PostScript. One can of course use grayscales too. In the %D core modules these macros are redefined to using the color %D mechanism present in \CONTEXT. \ifCONTEXT \else \def\setcolorverbatim {\def\prettyone {.9 .0 .0 } % red \def\prettytwo {.0 .8 .0 } % green \def\prettythree {.0 .0 .9 } % blue \def\prettyfour {.8 .8 .6 } % yellow \def\beginofpretty[##1]% {\special{ps:: \csname##1\endcsname setrgbcolor}} \def\endofpretty% {\special{ps:: 0 0 0 setrgbcolor}}} % black \def\setgrayverbatim {\def\prettyone {.30 } % gray \def\prettytwo {.45 } % gray \def\prettythree {.60 } % gray \def\prettyfour {.75 } % gray \def\beginofpretty[##1]% {\special{ps:: \csname##1\endcsname setgray}} \def\endofpretty% {\special{ps:: 0 setgray}}} % black \fi %D One can redefine these two commands after loading this %D module. When available, one can also use appropriate %D font||switch macro's. We default to color. \ifCONTEXT \else \setcolorverbatim \fi %D Here come the commands that are responsible for entering and %D leaving the two states. As we can see, they've got much in %D common. %D The previous version of this module was published in the %D \MAPS\ of the dutch \TEX\ users group \NTG. In that article, %D the verbatim part of the text was typeset with the following %D commands for the examples: %D %D \starttyping %D \def\starttyping% We simplify the \ConTeXt\ macro. %D {\bgroup %D \everypar{} % We disable some troublesome mechanisms. %D \advance\leftskip by 1em %D \processdisplayverbatim{\stoptyping}} %D %D \let\stoptyping=\egroup %D \stoptyping %D %D We also used: %D %D \starttyping %D \def\startdefinition% %D {\bgroup %D \everypar{} % Again we disable some troublesome mechanisms. %D \let\obeycharacters=\setupprettyTEXtype % See verb-tex.tex! %D \EveryPar{\showparagraphcounter}% %D \EveryLine{\showlinecounter}% %D \verbatimbodyfont %D \processdisplayverbatim{\stopdefinition}} %D %D \def\stopdefinition% %D {\egroup} %D \stoptyping %D %D And because we have both \type{\EveryPar} and %D \type{\EveryLine} available, we can implement a dual %D numbering mechanism: %D %D \starttyping %D \newcount\paragraphcounter %D \newcount\linecounter %D %D \def\showparagraphcounter% %D {\llap %D {\bgroup %D \counterfont %D \hbox to 4em %D {\global\advance\paragraphcounter by 1 %D \hss \the\paragraphcounter \hskip2em}% %D \egroup %D \hskip1em}} %D %D \def\showlinecounter% %D {\llap %D {\bgroup %D \counterfont %D \hbox to 2em %D {\global\advance\linecounter by 1 %D \hss \the\linecounter}% %D \egroup %D \hskip1em}} %D \stoptyping %D %D One may have noticed that the \type{\EveryPar} is only %D executed once, because we consider each piece of verbatim %D as one paragraph. When one wants to take the empty lines %D into account, the following assignments are appropriate: %D %D \starttyping %D \EveryLine %D {\iflinepar %D \showparagraphcounter %D \fi %D \showlinecounter} %D \stoptyping %D %D In this case, nothing has to be assigned to \type{\EveryPar}, %D maybe except of just another extra numbering scheme. The %D macros used to typeset this documentation are a bit more %D complicated, because we have to take take 'long' margin %D lists into account. When such a list exceeds the previous %D pargraph we postpone placement of the paragraph number till %D there's room. This way so it does not clash with the margin %D words. %D Normally such commands have to be embedded in a decent setup %D structure, where options can be set at will. %D %D Now let's summarize the most important commands. %D %D \starttyping %D \processinlineverbatim{\closingcommand} %D \processdisplayverbatim{\closingcommand} %D \processfileverbatim{filename} %D \stoptyping %D %D We can satisfy our own specific needs with the following %D interfacing macro's: %D %D \starttyping %D \obeyspaces \obeytabs \obeylines \obeypages \obeycharacters %D \stoptyping %D %D We can influence the verbatim environment with the following %D macro: %D %D \starttyping %D \obeyemptylines %D \stoptyping %D %D Some needs are fulfilled already with: %D %D \starttyping %D \setcontrolspace \settabskips %D \stoptyping %D %D lines can be enhanced with ornaments using: %D %D \starttyping %D \everypar \everyline \iflinepar %D \stoptyping %D %D and pretty verbatim support is implemented by: %D %D \starttyping %D \beginofpretty[#1] ... \endofpretty %D \stoptyping %D %D and some setup macro, like: %D %D \starttyping %D \setupprettyIDENTIFIERtype %D \stoptyping %D %D The color support macro can be redefined by the user. The %D parameter \type{#1} can be one of the four 'fixed' %D identifiers {\em prettyone}, {\em prettytwo}, {\em %D prettythree} and {\em prettyfour}. We have implemented a %D more or less general PostScript color support mechanism, %D using \type{specials}. One can toggle between color and %D grayscale with: %D %D \starttyping %D \setgrayverbatim \setcolorverbatim %D \stoptyping %D \macros %D {permitshiftedendofverbatim} %D %D We did not mention one drawback of the mechanism described %D here. The closing command must start at the first position %D of the line. In \CONTEXT\ we will not have this drawback, %D because we can test if the end command is a substring of the %D current line. The testing is done by two of the support %D macros, which of course are not available in a stand alone %D application of this module. \ifCONTEXT \let\doifendofverbatim=\doifelse \def\permitshiftedendofverbatim {\let\doifendofverbatim\doifinstringelse} {\obeylines% \long\gdef\copyverbatimline#1 {\convertargument#1 \to\next% \gdef\verbatimline{#1}% \ifx\next\emptyspace% \presetemptyverbatimline% \else% \doifendofverbatim{\endofverbatimcommand}{\next}% {\presetlastverbatimline% \def\copyverbatimline{\egroup\endofdisplayverbatim}}% {\presetnormalverbatimline}% \fi% \handleverbatimline% \copyverbatimline}} %D As a bonus, we provide the next alternative, which takes %D end tags like \type {Hello World!}. \def\doprocessdisplayverbatim#1#2% {\par \beginofverbatimlines \bgroup \escapechar-1 \xdef\verbatimname{\string#2}% \egroup \ifcase#1% \let\endofdisplayverbatim\relax \else \def\endofdisplayverbatim{\endofverbatimlines\csname\verbatimname\endcsname}% \fi \bgroup \parindent\zeropoint \ifdim\lastskip<\parskip \removelastskip \vskip\parskip \fi \parskip\zeropoint \processingverbatimtrue \ifcase#1% \convertargument#2\to\endofverbatimcommand \else \expandafter\let\csname\verbatimname\endcsname=\relax \expandafter\convertargument\csname\verbatimname\endcsname \to\endofverbatimcommand \fi \verbatimfont \setverbatimspaceskip \global\linepartrue % needed for paragraph numbering \setupcopyverbatim \initializeverbatimline \copyverbatimline} \def\processdisplayverbatim {\doprocessdisplayverbatim1} \def\processtaggeddisplayverbatim{\doprocessdisplayverbatim0} \fi %D \macros %D {installprettyescape} %D %D The next feature is dedicated to Fabrice Popineau who %D wanted math inside verbatim. \def\prettyescapecnt{255} \def\installprettyescape {\dodoubleempty\doinstallprettyescape} \def\doinstallprettyescape[#1][#2]#3 #4% {\bgroup \doglobal\decrement\prettyescapecnt \def\docommand##1% {\def\next{\dodoinstallprettyescape{##1}{#3}{#4}}% \catcode`#3=\@@active \@EA\scantokens\@EA{\next}}% \iffirstargument \processcommalist[#1]\docommand \else \docommand\empty \fi} \def\dodoinstallprettyescape#1#2#3% {\unexpanded\setgvalue{PRETTY@#1@\prettyescapecnt}##1##2#2{#3{##2}}% \expanded % we need to freeze the counter {\doglobal\noexpand\appendtoks \noexpand\doif{#1}\noexpand\prettyidentifier {\noexpand\setpretty`\string#2=\prettyescapecnt \noexpand\installprettyhandler \prettyescapecnt\space\getvalue{PRETTY@#1@\prettyescapecnt}}% }\to \everysetupverbatim \egroup} %D An example of its usage is: %D %D \startbuffer %D \def\xverbatimmath#1#2{\naturaltextext\mathematics{#1}\relax} %D \def\yverbatimmath#1#2{\naturaltextext\mathematics{[[#1]]}\relax} %D \def\zverbatimmath#1#2{\naturaltextext\mathematics{(#1)}\relax} %D %D \installprettyescape [MP] $ \xverbatimmath %D \installprettyescape [MP] ~ \yverbatimmath %D \installprettyescape [MP] * \zverbatimmath %D %D \startMP %D if $x>10$ : %D $x := 20$ %D ~x := 20~ %D *x := 20* %D end %D \stopMP %D \stopbuffer %D %D \typebuffer \getbuffer \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-pfs-01.mkiv0000644000175000017500000002612111754241457024050 0ustar norbertnorbert% pfsense status info, work in progress % % usage: % % context --environment=x-pfs-01 filename.xml % % or % % \setupbodyfont [dejavu,10pt] \setuplayout [topspace=1cm, backspace=1cm, footer=0pt, header=1cm, width=middle, height=middle] \setupheader [style=bold] \setuphead [section] [style=\bfb] \setuphead [subsection] [style=\bfa] \setuppagenumbering [location=] \dontcomplain % todo: show all values and map keys onto longer names via labels \startxmlsetups xml:system \startsection[title={System}] \startsubsection[title={Properties}] \starttabulate[|B|T|] \NC hostname \NC \xmlfirst{#1}{hostname} \NC \NR \NC domain \NC \xmlfirst{#1}{domain} \NC \NR \NC timezone \NC \xmlfirst{#1}{timezone} \NC \NR \NC timeservers \NC \xmlfirst{#1}{timeservers} \NC \NR \NC dnsserver \NC \xmlfirst{#1}{dnsserver} \NC \NR \stoptabulate \stopsubsection \startsubsection[title={Groups}] \xmlfilter{#1}{group/command(xml:system:group)} \stopsubsection \startsubsection[title={Users}] \xmlfilter{#1}{user/command(xml:system:user)} \stopsubsection \stopsection \stopxmlsetups \startxmlsetups xml:system:group \starttabulate[|B|T|] \NC name \NC \xmlfirst{#1}{/name} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \NC scope \NC \xmlfirst{#1}{/scope} \NC \NR \NC gid \NC \xmlfirst{#1}{/gid} \NC \NR \NC privilege \NC \xmlfirst{#1}{/priv} \NC \NR \NC members \NC \xmlconcat{#1}{/member}{ } \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:system:user \starttabulate[|B|T|] \NC name \NC \xmlfirst{#1}{/name} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \NC scope \NC \xmlfirst{#1}{/scope} \NC \NR \NC uid \NC \xmlfirst{#1}{/uid} \NC \NR \NC group \NC \xmlfirst{#1}{/groupname} \NC \NR \NC privilege \NC \xmlfirst{#1}{/priv} \NC \NR \NC password \NC \xmldoifelsetext{#1}{/password}{set}{unset} \NC \NR \NC ipsec psk \NC \xmldoifelsetext{#1}{/ipsecpsk}{set}{unset} \NC \NR \NC certificate \NC \xmldoifelsetext{#1}{/cert} {set}{unset} \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:interfaces \startsection[title={Interfaces}] \xmlfilter{#1}{*/command(xml:interfaces:network)} \stopsection \stopxmlsetups \startxmlsetups xml:interfaces:network \startsubsection[title={\xmltag{#1}}] % \starttabulate[|B|T|] \NC interface \NC \xmlfirst{#1}{/if} \NC \NR \NC block private \NC \xmldoifelse{#1}{/blockpriv} {yes}{no} \NC \NR \NC block bogons \NC \xmldoifelse{#1}{/blockbogons}{yes}{no} \NC \NR \NC spoof mac address \NC \xmldoifelse{#1}{/spoofmac} {yes}{no} \NC \NR \NC enable interface \NC \xmldoifelse{#1}{/enable} {yes}{no} \NC \NR \NC ipaddress \NC \xmlfirst{#1}{/ipaddr} \NC \NR \NC subnet \NC \xmlfirst{#1}{/subnet} \NC \NR \NC gateway \NC \xmlfirst{#1}{/gateway} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \stoptabulate \stopsubsection \stopxmlsetups \startxmlsetups xml:gateways \startsection[title={Gateways}] \xmlfilter{#1}{*/command(xml:gateways:entry)} \stopsection \stopxmlsetups \startxmlsetups xml:gateways:entry \starttabulate[|B|T|] \NC interface \NC \xmlfirst{#1}{/interface} \NC \NR \NC gateway \NC \xmlfirst{#1}{/gateway} \NC \NR \NC name \NC \xmlfirst{#1}{/name} \NC \NR \NC weight \NC \xmlfirst{#1}{/weight} \NC \NR \NC interval \NC \xmlfirst{#1}{/interval} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \NC disable monitor \NC \xmlfirst{#1}{/monitor_disable} \NC \NR \NC default gateway \NC \xmlfirst{#1}{/defaultgw} \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:virtualips \startsection[title={Virtual ipadresses}] \xmlfilter{#1}{*/command(xml:virtualips:entry)} \stopsection \stopxmlsetups \startxmlsetups xml:virtualips:entry \starttabulate[|B|T|] \NC interface \NC \xmlfirst{#1}{/interface} \NC \NR \NC type \NC \xmlfirst{#1}{/type} \NC \NR \NC mode \NC \xmlfirst{#1}{/mode} \NC \NR \NC subnet \NC \xmlfirst{#1}{/subnet} /\xmlfirst{#1}{/subnet_bits} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:dhcp \startsection[title={DHCP}] \xmlfilter{#1}{*/command(xml:dhcp:network)} \stopsection \stopxmlsetups \startxmlsetups xml:dhcp:network \startsubsection[title={\xmltag{#1}}] \starttabulate[|B|T|] \NC range \NC \xmlfirst{#1}{/range/from} \endash\ \xmlfirst{#1}{/range/to} \NC \NR \NC domain \NC \xmlfirst{#1}{/domain} \NC \NR \NC dnsserver \NC \xmlfirst{#1}{/dnsserver} \NC \NR \NC gateway \NC \xmlfirst{#1}{/gateway} \NC \NR \NC ddnsdomain \NC \xmlfirst{#1}{/ddnsdomain} \NC \NR \stoptabulate \xmldoif {#1} {/staticmap} { \starttabulate[|T|T|T|p|] \NC \rm\bf macaddress \NC \rm\bf ipaddress \NC \rm\bf hostname \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/staticmap/command(xml:dhcp:network:entry)} \stoptabulate } \stopsubsection \stopxmlsetups \startxmlsetups xml:dhcp:network:entry \NC \xmlfirst{#1}{/mac} \NC \xmlfirst{#1}{/ipaddr} \NC \xmlfirst{#1}{/hostname} \NC \xmlfirst{#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:dnsmasq \startsection[title={DNS MASQ}] \starttabulate[|T|T|T|p|] \NC \rm\bf host \NC \rm\bf domain \NC \rm\bf ipaddress \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/hosts/command(xml:dnsmasq:hosts)} \stoptabulate \stopsection \stopxmlsetups \startxmlsetups xml:dnsmasq:hosts \NC \xmlfirst{#1}{/host} \NC \xmlfirst{#1}{/domain} \NC \xmlfirst{#1}{/ip} \NC \xmlfirst{#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:nat \startsection[title={NAT}] \startsubsection[title={Rules}] \starttabulate[|T|T|T|T|T|p|] \NC \rm\bf interface \NC \rm\bf protocol \NC \rm\bf source \NC \rm\bf destination \NC \rm\bf target \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/rule/command(xml:nat:rule)} \stoptabulate \stopsubsection \startsubsection[title={One to one}] \starttabulate[|T|T|T|T|T|p|] \NC \rm\bf interface \NC \rm\bf protocol \NC \rm\bf source \NC \rm\bf destination \NC \rm\bf external \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/onetoone/command(xml:nat:onetoone)} \stoptabulate \stopsubsection \stopsection \stopxmlsetups \startxmlsetups xml:nat:rule \NC \xmlfilter{#1}{/interface/command(xml:checked)} \NC \xmlfilter{#1}{/protocol/command(xml:checked)} \NC \xmlfilter{#1}{/source/command(xml:checked)} \NC \xmlfilter{#1}{/destination/(address|any)/command(xml:checked)} :\xmlfilter{#1}{/destination/port/command(xml:checked)} \NC \xmlfilter{#1}{/target/command(xml:checked)} :\xmlfilter{#1}{/local-port/command(xml:checked)} \NC \xmlfirst {#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:nat:onetoone \NC \xmlfilter{#1}{/interface/command(xml:checked)} \NC \xmlfilter{#1}{/protocol/command(xml:checked)} \NC \xmlfilter{#1}{/source/command(xml:checked)} \NC \xmlfilter{#1}{/destination/(address|any)/command(xml:checked)} :\xmlfilter{#1}{/destination/port/command(xml:checked)} \NC \xmlfilter{#1}{/external/command(xml:checked)} :\xmlfilter{#1}{/local-port/command(xml:checked)} \NC \xmlfirst {#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:checked \xmldoifelse {#1} {/any} { * } { \xmldoifelsetext {#1} {.} { \xmlflush{#1} } { * } } \stopxmlsetups \startxmlsetups xml:filter \startsection[title={Filter}] \startsubsection[title={Rules}] \starttabulate[|T|T|T|T|T|p|] \NC \rm\bf type \NC \rm\bf interface \NC \rm\bf protocol \NC \rm\bf source \NC \rm\bf destination \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/rule/command(xml:filter:rule)} \stoptabulate \stopsubsection \stopsubsection \stopxmlsetups \startxmlsetups xml:filter:rule \NC \xmlfilter{#1}{/type/command(xml:checked)} \NC \xmlfilter{#1}{/interface/command(xml:checked)} \NC \xmlfilter{#1}{/protocol/command(xml:checked)} \NC \xmlfilter{#1}{/source/(address|any)/command(xml:checked)}: :\xmlfilter{#1}{/source/port/command(xml:checked)} \NC \xmlfilter{#1}{/destination/(address|any)/command(xml:checked)} :\xmlfilter{#1}{/destination/port/command(xml:checked)} \NC \xmlfirst {#1}{/descr} \NC \NR \stopxmlsetups \starttext \doifelse {\inputfilename} {x-pfs-01.mkiv} { \xmlloadonly{main}{router.xml}{} \setupheadertexts[router.xml][\pagenumber] } { \xmlloadonly{main}{\inputfilename}{} \setupheadertexts[\inputfilename][\pagenumber] } \xmlfilter{main}{/pfsense/system/command(xml:system)} \xmlfilter{main}{/pfsense/interfaces/command(xml:interfaces)} \xmlfilter{main}{/pfsense/gateways/command(xml:gateways)} \xmlfilter{main}{/pfsense/virtualip/command(xml:virtualips)} \xmlfilter{main}{/pfsense/dhcpd/command(xml:dhcp)} \xmlfilter{main}{/pfsense/dnsmasq/command(xml:dnsmasq)} \xmlfilter{main}{/pfsense/nat/command(xml:nat)} \xmlfilter{main}{/pfsense/filter/command(xml:filter)} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-sql.mkii0000644000175000017500000001404311376503616024311 0ustar norbertnorbert%D \module %D [ file=verb-sql, %D version=2000.05.09, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty \SQL\ Verbatim, %D author={Berend de Boer \& Hans Hagen}, %D date=\currentdate, %D copyright={Berend de Boer \& Hans Hagen}] %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 Verbatim Macros / Pretty SQL Verbatim} %D \quotation {He, I want pretty pretting too!}, Berend cried out %D one day, \quotation {But now for \SQL.}. This query language %D shows code like: %D %D \startbuffer %D \startSQL %D select * -- some comment %D from tableA %D where 1 = 2 %D \stopSQL %D \stopbuffer %D %D \typebuffer %D %D and this should become something pretty like: %D %D \getbuffer %D %D or, with Berend's preferences: %D %D \startbuffer[setup] %D \setuptyping %D [SQL] %D [text=yes,palet=,icommand=\bf,vcommand=,ccommand=\it] %D \stopbuffer %D %D \getbuffer[setup] %D \getbuffer %D %D This kind of pretty printing is accomplished by: %D %D \typebuffer %D Like we did with the \JAVASCRIPT\ driver, we will borrow %D most of the macros from the \PERL\ driver. \ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi \unprotect %D \SQL\ has the one line comment sequence \type{--} and the %D multi line comment delimiters \type{/*} and \type{*/}. The %D next counter keeps track of multi line comment nesting. \newcount\SQLcommentlevel %D We need to handle \type{%}, \type{#} and \type{-} a bit %D different than in the \PERL\ driver. Compared to the %D \JAVASCRIPT\ driver |<|we copied most of the code from %D that one|>|, we now also have type~45. \gdef\SQLsetspecials% {\PLsetspecials \setpretty`\#=32 \setpretty`\:=41 \setpretty`\%=41 \setpretty`\/=43 \setpretty`\*=44 \setpretty`\-=45 } %D We need three additional handlers: \gdef\SQLsethandlers% {\PLsethandlers \installprettyhandler 43 \SQLtypefourthree \installprettyhandler 44 \SQLtypefourfour \installprettyhandler 45 \SQLtypefourfive } %D Next we have to do some general housekeeping. \gdef\SQLsetcontrols% {\PLsetcontrols \def\flushrestofverbatimline% {\endPLtypesix \ifcase\SQLcommentlevel \inPLcommentfalse \verbatimfont \fi \PLverbosefalse \PLverboseskipped=0}} \gdef\SQLsetvariables {\PLsetvariables \global\SQLcommentlevel=0 } \gdef\setupprettySQLtype% {\def\prettyidentifier{SQL}% \let\PLidentifiers=\SQLidentifiers \let\PLvariables=\SQLvariables \SQLsetvariables \SQLsetcontrols \SQLsethandlers \SQLsetspecials \PLsetdiagnostics} %D We have to look upto four characters ahead. If you don't %D grab the picture, just skip reading these macros. \gdef\SQLtypefourthree% {\handlenextnextpretty\doSQLtypefourthree\PLtypefourtwo} \gdef\doSQLtypefourthree#1#2% {\getprettydata{#2}% \ifnum\prettytype=43 \let\next=\dodoSQLtypefourthree \else\ifnum\prettytype=44 \global\advance\SQLcommentlevel by 1 \global\inPLcommenttrue \PLverbosecorrection \let\next=\SQLtogglecomment \else \let\next=\PLtypefourtwo \fi\fi \next{#1}#2} \gdef\SQLtogglecomment#1#2% {\ifnum\SQLcommentlevel=1 \prettynaturalfont \beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty \else \getpretties{#1}{#2}% \fi} \gdef\dodoSQLtypefourthree% #1% {\endPLtypesix \handlenextnextpretty\dododoSQLtypefourthree\dodododoPLtypefourthree} \gdef\dododoSQLtypefourthree% {\ifnewpretty\expandafter\handlenewpretty\fi\dodododoSQLtypefourthree} \gdef\dodododoSQLtypefourthree#1#2% {\ifinPLcomment \getpretties{#1}{#2}% \else \global\inPLcommenttrue \PLverbosecorrection \beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty \fi} \gdef\SQLtypefourfour% {\handlenextnextpretty\doSQLtypefourfour\PLtypefourtwo} \gdef\doSQLtypefourfour#1#2% {\getprettydata{#2}% \ifnum\prettytype=43 \SQLtogglecomment{#1}#2% \global\advance\SQLcommentlevel by -1 \ifcase\SQLcommentlevel \global\inPLcommentfalse \prettyverbatimfont \fi \else \endPLtypesix \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \expandafter#2% \fi} %D Much of the indirect calls (\type {dodo..}) is due to %D looking ahead as well as midway pretty print changing. \gdef\SQLtypefourfive% {\handlenextnextpretty\doSQLtypefourfive\PLtypefourtwo} \gdef\doSQLtypefourfive#1#2% {\getprettydata{#2}% \ifnum\prettytype=45 \let\next=\dodoSQLtypefourfive \else \let\next=\PLtypefourtwo \fi \next{#1}#2} \gdef\dodoSQLtypefourfive% #1% {\endPLtypesix \handlenextnextpretty\dododoSQLtypefourfive\dodododoPLtypefourfive} \gdef\dododoSQLtypefourfive% {\ifnewpretty\expandafter\handlenewpretty\fi\dodododoSQLtypefourfive} \gdef\dodododoSQLtypefourfive#1#2% {\ifinPLcomment \getpretties{#1}{#2}% \else \global\inPLcommenttrue \PLverbosecorrection \ifnaturaltextext \let\next\naturaltextext \else \prettynaturalfont \def\next{\beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty}% \fi \expandafter\next \fi} %D We need a different list of reserved words. This list %D replaces the \PERL\ one. \useprettyidentifiers \SQLidentifiers \SQLsetspecials add all alter and any as asc avg begin between break browse bulk by cascade case check close clustered coalesce column commit constraint contains count create cross cursor database default delete desc distinct drop else end exec execute exists exit fetch for foreign from grant group having if in index inner insert into is join key left like max min nocheck nonclustered not null of on open or order outer over plan prepare proc procedure public references return revoce right rollback rule select set sum table then to tran transaction trigger truncate uncommited union unique update use values varying view when where while with work primary \useprettyidentifiers \SQLvariables \SQLsetspecials not-yet-defined \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-tickets.lua0000644000175000017500000003667712130411274025630 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-tickets'] = { version = 1.001, comment = "companion to lmx-*", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- TODO: MAKE SOME INTO STORED PROCUDURES -- This is experimental code and currently part of the base installation simply -- because it's easier to distribute this way. Eventually it will be documented -- and the related scripts will show up as well. local tonumber = tonumber local format = string.format local ostime, uuid, osfulltime = os.time, os.uuid, os.fulltime local random = math.random local concat = table.concat local sql = utilities.sql local tickets = { } sql.tickets = tickets local trace_sql = false trackers.register("sql.tickets.trace", function(v) trace_sql = v end) local report = logs.reporter("sql","tickets") local serialize = sql.serialize local deserialize = sql.deserialize local execute = sql.execute tickets.newtoken = sql.tokens.new -- Beware as an index can be a string or a number, we will create -- a combination of hash and index. local statustags = { [0] = "unknown", "pending", "busy", "finished", "dependent", -- same token but different subtoken (so we only need to find the first) "reserved-1", "reserved-2", "error", "deleted", } local status = table.swapped(statustags) tickets.status = status tickets.statustags = statustags local s_unknown = status.unknown local s_pending = status.pending local s_busy = status.busy local s_finished = status.finished local s_dependent = status.dependent local s_error = status.error local s_deleted = status.deleted local s_rubish = s_error -- and higher local function checkeddb(presets,datatable) return sql.usedatabase(presets,datatable or presets.datatable or "tickets") end tickets.usedb = checkeddb local template =[[ CREATE TABLE IF NOT EXISTS %basename% ( `id` int(11) NOT NULL AUTO_INCREMENT, `token` varchar(50) NOT NULL, `subtoken` INT(11) NOT NULL, `created` int(11) NOT NULL, `accessed` int(11) NOT NULL, `category` int(11) NOT NULL, `status` int(11) NOT NULL, `usertoken` varchar(50) NOT NULL, `data` longtext NOT NULL, `comment` longtext NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_unique_index` (`id` ASC), KEY `token_unique_key` (`token`) ) DEFAULT CHARSET = utf8 ; ]] function tickets.createdb(presets,datatable) local db = checkeddb(presets,datatable) local data, keys = db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a created in %a",db.name,db.base) return db end local template =[[ DROP TABLE IF EXISTS %basename% ; ]] function tickets.deletedb(presets,datatable) local db = checkeddb(presets,datatable) local data, keys = db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a removed in %a",db.name,db.base) end local template_push =[[ INSERT INTO %basename% ( `token`, `subtoken`, `created`, `accessed`, `status`, `category`, `usertoken`, `data`, `comment` ) VALUES ( '%token%', %subtoken%, %time%, %time%, %status%, %category%, '%usertoken%', '%[data]%', '%[comment]%' ) ; ]] local template_fetch =[[ SELECT * FROM %basename% WHERE `token` = '%token%' AND `subtoken` = '%subtoken%' ; ]] function tickets.create(db,ticket) -- We assume a unique token .. if not we're toast anyway. We used to lock and -- get the last id etc etc but there is no real need for that. -- we could check for dependent here but we don't want the lookup local token = ticket.token or tickets.newtoken() local time = ostime() local status = ticket.status local category = ticket.category or 0 local subtoken = ticket.subtoken or 0 local usertoken = ticket.usertoken or "" local comment = ticket.comment or "" status = not status and subtoken > 1 and s_dependent or s_pending local result, message = db.execute { template = template_push, variables = { basename = db.basename, token = token, subtoken = subtoken, time = time, status = status, category = category, usertoken = usertoken, data = db.serialize(ticket.data or { },"return"), comment = comment, }, } -- We could stick to only fetching the id and make the table here -- but we're not pushing that many tickets so we can as well follow -- the lazy approach and fetch the whole. local result, message = db.execute { template = template_fetch, variables = { basename = db.basename, token = token, subtoken = subtoken, }, } if result and #result > 0 then if trace_sql then report("created: %s at %s",token,osfulltime(time)) end return result[1] else report("failed: %s at %s",token,osfulltime(time)) end end local template =[[ UPDATE %basename% SET `data` = '%[data]%', `status` = %status%, `accessed` = %time% WHERE `id` = %id% ; ]] function tickets.save(db,ticket) local time = ostime() local data = db.serialize(ticket.data or { },"return") local status = ticket.status or s_error -- print("SETTING") -- inspect(data) ticket.status = status ticket.accessed = time db.execute { template = template, variables = { basename = db.basename, id = ticket.id, time = ostime(), status = status, data = data, }, } if trace_sql then report("saved: id %s, time %s",id,osfulltime(time)) end return ticket end local template =[[ UPDATE %basename% SET `accessed` = %time% WHERE `token` = '%token%' ; SELECT * FROM %basename% WHERE `id` = %id% ; ]] function tickets.restore(db,id) local record, keys = db.execute { template = template, variables = { basename = db.basename, id = id, time = ostime(), }, } local record = record and record[1] if record then if trace_sql then report("restored: id %s",id) end record.data = db.deserialize(record.data or "") return record elseif trace_sql then report("unknown: id %s",id) end end local template =[[ DELETE FROM %basename% WHERE `id` = %id% ; ]] function tickets.remove(db,id) db.execute { template = template, variables = { basename = db.basename, id = id, }, } if trace_sql then report("removed: id %s",id) end end local template_yes =[[ SELECT * FROM %basename% ORDER BY `id` ; ]] local template_nop =[[ SELECT `created`, `usertoken`, `accessed`, `status` FROM %basename% ORDER BY `id` ; ]] function tickets.collect(db,nodata) local records, keys = db.execute { template = nodata and template_nop or template_yes, variables = { basename = db.basename, token = token, }, } if not nodata then db.unpackdata(records) end if trace_sql then report("collected: %s tickets",#records) end return records, keys end -- We aleays keep the last select in the execute so one can have -- an update afterwards. local template =[[ DELETE FROM %basename% WHERE `accessed` < %time% OR `status` >= %rubish% ; ]] local template_cleanup_yes =[[ SELECT * FROM %basename% WHERE `accessed` < %time% ORDER BY `id` ; ]] .. template local template_cleanup_nop =[[ SELECT `accessed`, `created`, `accessed`, `token` `usertoken` FROM %basename% WHERE `accessed` < %time% ORDER BY `id` ; ]] .. template function tickets.cleanupdb(db,delta,nodata) -- maybe delta in db local time = delta and (ostime() - delta) or 0 local records, keys = db.execute { template = nodata and template_cleanup_nop or template_cleanup_yes, variables = { basename = db.basename, time = time, rubish = s_rubish, }, } if not nodata then db.unpackdata(records) end if trace_sql then report("cleaned: %s seconds before %s",delta,osfulltime(time)) end return records, keys end -- status related functions local template =[[ SELECT `status` FROM %basename% WHERE `token` = '%token%' ORDER BY `id` ; ]] function tickets.getstatus(db,token) local record, keys = db.execute { template = template, variables = { basename = db.basename, token = token, }, } local record = record and record[1] return record and record.status or s_unknown end local template =[[ SELECT `status` FROM %basename% WHERE `status` >= %rubish% OR `accessed` < %time% ORDER BY `id` ; ]] function tickets.getobsolete(db,delta) local time = delta and (ostime() - delta) or 0 local records = db.execute { template = template, variables = { basename = db.basename, time = time, rubish = s_rubish, }, } db.unpackdata(records) return records end local template =[[ SELECT `id` FROM %basename% WHERE `status` = %status% LIMIT 1 ; ]] function tickets.hasstatus(db,status) local records = db.execute { template = template, variables = { basename = db.basename, status = status or s_unknown, }, } return records and #records > 0 or false end local template =[[ UPDATE %basename% SET `status` = %status%, `accessed` = %time% WHERE `id` = %id% ; ]] function tickets.setstatus(db,id,status) db.execute { template = template, variables = { basename = db.basename, id = id, time = ostime(), status = status or s_error, }, } end local template =[[ DELETE FROM %basename% WHERE `status` IN (%status%) ; ]] function tickets.prunedb(db,status) if type(status) == "table" then status = concat(status,",") end local data, keys = db.execute { template = template, variables = { basename = db.basename, status = status or s_unknown, }, } if trace_sql then report("pruned: status %s removed",status) end end -- START TRANSACTION ; ... COMMIT ; -- LOCK TABLES %basename% WRITE ; ... UNLOCK TABLES ; local template_a = [[ SET @last_ticket_token = '' ; UPDATE %basename% SET `token` = (@last_ticket_token := `token`), `status` = %newstatus%, `accessed` = %time% WHERE `status` = %status% ORDER BY `id` LIMIT 1 ; SELECT * FROM %basename% WHERE `token` = @last_ticket_token ORDER BY `id` ; ]] local template_b = [[ SELECT * FROM tickets WHERE `status` = %status% ORDER BY `id` LIMIT 1 ; ]] function tickets.getfirstwithstatus(db,status,newstatus) local records if type(newstatus) == "number" then -- todo: also accept string records = db.execute { template = template_a, variables = { basename = db.basename, status = status or s_pending, newstatus = newstatus, time = ostime(), }, } else records = db.execute { template = template_b, variables = { basename = db.basename, status = status or s_pending, }, } end if type(records) == "table" and #records > 0 then for i=1,#records do local record = records[i] record.data = db.deserialize(record.data or "") record.status = newstatus or s_busy end return records end end -- The next getter assumes that we have a sheduler running so that there is -- one process in charge of changing the status. local template = [[ SET @last_ticket_token = '' ; UPDATE %basename% SET `token` = (@last_ticket_token := `token`), `status` = %newstatus%, `accessed` = %time% WHERE `status` = %status% ORDER BY `id` LIMIT 1 ; SELECT @last_ticket_token AS `token` ; ]] function tickets.getfirstinqueue(db,status,newstatus) local records = db.execute { template = template, variables = { basename = db.basename, status = status or s_pending, newstatus = newstatus or s_busy, time = ostime(), }, } local token = type(records) == "table" and #records > 0 and records[1].token return token ~= "" and token end local template =[[ SELECT * FROM %basename% WHERE `token` = '%token%' ORDER BY `id` ; ]] function tickets.getticketsbytoken(db,token) local records, keys = db.execute { template = template, variables = { basename = db.basename, token = token, }, } db.unpackdata(records) return records end local template =[[ SELECT * FROM %basename% WHERE `usertoken` = '%usertoken%' AND `status` < %rubish% ORDER BY `id` ; ]] function tickets.getusertickets(db,usertoken) -- todo: update accessed -- todo: get less fields -- maybe only data for status changed (hard to check) local records, keys = db.execute { template = template, variables = { basename = db.basename, usertoken = usertoken, rubish = s_rubish, }, } db.unpackdata(records) return records end local template =[[ UPDATE %basename% SET `status` = %deleted% WHERE `usertoken` = '%usertoken%' ; ]] function tickets.removeusertickets(db,usertoken) db.execute { template = template, variables = { basename = db.basename, usertoken = usertoken, deleted = s_deleted, }, } if trace_sql then report("removed: usertoken %s",usertoken) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-ini.lua0000644000175000017500000006520412134352503024103 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-ini'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local setmetatable, getmetatable, type, next, tostring, tonumber, rawset = setmetatable, getmetatable, type, next, tostring, tonumber, rawset local char, byte, format, gsub, concat, match, sub, gmatch = string.char, string.byte, string.format, string.gsub, table.concat, string.match, string.sub, string.gmatch local utfchar, utfvalues = utf.char, utf.values local sind, cosd = math.sind, math.cosd local lpegmatch, P, C, R, S, Cc, Cs = lpeg.match, lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc, lpeg.Cs local formatters = string.formatters local pdfreserveobject = pdf.reserveobj local pdfimmediateobject = pdf.immediateobj local pdfdeferredobject = pdf.obj local pdfreferenceobject = pdf.refobj local trace_finalizers = false trackers.register("backend.finalizers", function(v) trace_finalizers = v end) local trace_resources = false trackers.register("backend.resources", function(v) trace_resources = v end) local trace_objects = false trackers.register("backend.objects", function(v) trace_objects = v end) local trace_detail = false trackers.register("backend.detail", function(v) trace_detail = v end) local report_objects = logs.reporter("backend","objects") local report_finalizing = logs.reporter("backend","finalizing") local backends = backends backends.pdf = backends.pdf or { comment = "backend for directly generating pdf output", nodeinjections = { }, codeinjections = { }, registrations = { }, tables = { }, } lpdf = lpdf or { } local lpdf = lpdf local function tosixteen(str) -- an lpeg might be faster (no table) if not str or str == "" then return "" -- not () as we want an indication that it's unicode else local r, n = { ""] = "\\>", -- ["["] = "\\[", ["]"] = "\\]", -- ["("] = "\\(", [")"] = "\\)", -- } -- -- local escaped = Cs(Cc("(") * (S("\\/#<>[]()")/escapes + P(1))^0 * Cc(")")) -- -- local function toeight(str) -- if not str or str == "" then -- return "()" -- else -- return lpegmatch(escaped,str) -- end -- end -- -- -- no need for escaping .. just use unicode instead -- \0 \t \n \r \f ( ) [ ] { } / % local function toeight(str) return "(" .. str .. ")" end lpdf.toeight = toeight --~ local escaped = lpeg.Cs((lpeg.S("\0\t\n\r\f ()[]{}/%")/function(s) return format("#%02X",byte(s)) end + lpeg.P(1))^0) --~ local function cleaned(str) --~ return (str and str ~= "" and lpegmatch(escaped,str)) or "" --~ end --~ lpdf.cleaned = cleaned -- not public yet local function merge_t(a,b) local t = { } for k,v in next, a do t[k] = v end for k,v in next, b do t[k] = v end return setmetatable(t,getmetatable(a)) end local f_key_value = formatters["/%s %s"] local f_key_dictionary = formatters["/%s << % t >>"] local f_dictionary = formatters["<< % t >>"] local f_key_array = formatters["/%s [ % t ]"] local f_array = formatters["[ % t ]"] local tostring_a, tostring_d tostring_d = function(t,contentonly,key) if not next(t) then if contentonly then return "" else return "<< >>" end else local r, rn = { }, 0 for k, v in next, t do rn = rn + 1 local tv = type(v) if tv == "string" then r[rn] = f_key_value(k,toeight(v)) elseif tv == "unicode" then r[rn] = f_key_value(k,tosixteen(v)) elseif tv == "table" then local mv = getmetatable(v) if mv and mv.__lpdftype then r[rn] = f_key_value(k,tostring(v)) elseif v[1] then r[rn] = f_key_value(k,tostring_a(v)) else r[rn] = f_key_value(k,tostring_d(v)) end else r[rn] = f_key_value(k,tostring(v)) end end if contentonly then return concat(r," ") elseif key then return f_key_dictionary(key,r) else return f_dictionary(r) end end end tostring_a = function(t,contentonly,key) local tn = #t if tn == 0 then if contentonly then return "" else return "[ ]" end else local r = { } for k=1,tn do local v = t[k] local tv = type(v) if tv == "string" then r[k] = toeight(v) elseif tv == "unicode" then r[k] = tosixteen(v) elseif tv == "table" then local mv = getmetatable(v) local mt = mv and mv.__lpdftype if mt then r[k] = tostring(v) elseif v[1] then r[k] = tostring_a(v) else r[k] = tostring_d(v) end else r[k] = tostring(v) end end if contentonly then return concat(r, " ") elseif key then return f_key_array(key,r) else return f_array(r) end end end local tostring_x = function(t) return concat(t, " ") end local tostring_s = function(t) return toeight(t[1]) end local tostring_u = function(t) return tosixteen(t[1]) end local tostring_n = function(t) return tostring(t[1]) end -- tostring not needed local tostring_c = function(t) return t[1] end -- already prefixed (hashed) local tostring_z = function() return "null" end local tostring_t = function() return "true" end local tostring_f = function() return "false" end local tostring_r = function(t) local n = t[1] return n and n > 0 and (n .. " 0 R") or "NULL" end local tostring_v = function(t) local s = t[1] if type(s) == "table" then return concat(s,"") else return s end end local function value_x(t) return t end -- the call is experimental local function value_s(t,key) return t[1] end -- the call is experimental local function value_u(t,key) return t[1] end -- the call is experimental local function value_n(t,key) return t[1] end -- the call is experimental local function value_c(t) return sub(t[1],2) end -- the call is experimental local function value_d(t) return tostring_d(t,true) end -- the call is experimental local function value_a(t) return tostring_a(t,true) end -- the call is experimental local function value_z() return nil end -- the call is experimental local function value_t(t) return t.value or true end -- the call is experimental local function value_f(t) return t.value or false end -- the call is experimental local function value_r() return t[1] or 0 end -- the call is experimental -- NULL local function value_v() return t[1] end -- the call is experimental local function add_x(t,k,v) rawset(t,k,tostring(v)) end local mt_x = { __lpdftype = "stream", __tostring = tostring_x, __call = value_x, __newindex = add_x } local mt_d = { __lpdftype = "dictionary", __tostring = tostring_d, __call = value_d } local mt_a = { __lpdftype = "array", __tostring = tostring_a, __call = value_a } local mt_u = { __lpdftype = "unicode", __tostring = tostring_u, __call = value_u } local mt_s = { __lpdftype = "string", __tostring = tostring_s, __call = value_s } local mt_n = { __lpdftype = "number", __tostring = tostring_n, __call = value_n } local mt_c = { __lpdftype = "constant", __tostring = tostring_c, __call = value_c } local mt_z = { __lpdftype = "null", __tostring = tostring_z, __call = value_z } local mt_t = { __lpdftype = "true", __tostring = tostring_t, __call = value_t } local mt_f = { __lpdftype = "false", __tostring = tostring_f, __call = value_f } local mt_r = { __lpdftype = "reference", __tostring = tostring_r, __call = value_r } local mt_v = { __lpdftype = "verbose", __tostring = tostring_v, __call = value_v } local function pdfstream(t) -- we need to add attributes if t then for i=1,#t do t[i] = tostring(t[i]) end end return setmetatable(t or { },mt_x) end local function pdfdictionary(t) return setmetatable(t or { },mt_d) end local function pdfarray(t) if type(t) == "string" then return setmetatable({ t },mt_a) else return setmetatable(t or { },mt_a) end end local function pdfstring(str,default) return setmetatable({ str or default or "" },mt_s) end local function pdfunicode(str,default) return setmetatable({ str or default or "" },mt_u) end local cache = { } -- can be weak local function pdfnumber(n,default) -- 0-10 n = n or default local c = cache[n] if not c then c = setmetatable({ n },mt_n) -- cache[n] = c -- too many numbers end return c end for i=-1,9 do cache[i] = pdfnumber(i) end local cache = { } -- can be weak local forbidden, replacements = "\0\t\n\r\f ()[]{}/%%#\\", { } -- table faster than function for s in gmatch(forbidden,".") do replacements[s] = format("#%02x",byte(s)) end local escaped = Cs(Cc("/") * (S(forbidden)/replacements + P(1))^0) local function pdfconstant(str,default) str = str or default or "" local c = cache[str] if not c then -- c = setmetatable({ "/" .. str },mt_c) c = setmetatable({ lpegmatch(escaped,str) },mt_c) cache[str] = c end return c end local p_null = { } setmetatable(p_null, mt_z) local p_true = { } setmetatable(p_true, mt_t) local p_false = { } setmetatable(p_false,mt_f) local function pdfnull() return p_null end --~ print(pdfboolean(false),pdfboolean(false,false),pdfboolean(false,true)) --~ print(pdfboolean(true),pdfboolean(true,false),pdfboolean(true,true)) --~ print(pdfboolean(nil,true),pdfboolean(nil,false)) local function pdfboolean(b,default) if type(b) == "boolean" then return b and p_true or p_false else return default and p_true or p_false end end local function pdfreference(r) return setmetatable({ r or 0 },mt_r) end local function pdfverbose(t) -- maybe check for type return setmetatable({ t or "" },mt_v) end lpdf.stream = pdfstream -- THIS WILL PROBABLY CHANGE lpdf.dictionary = pdfdictionary lpdf.array = pdfarray lpdf.string = pdfstring lpdf.unicode = pdfunicode lpdf.number = pdfnumber lpdf.constant = pdfconstant lpdf.null = pdfnull lpdf.boolean = pdfboolean lpdf.reference = pdfreference lpdf.verbose = pdfverbose -- n = pdf.obj(n, str) -- n = pdf.obj(n, "file", filename) -- n = pdf.obj(n, "stream", streamtext, attrtext) -- n = pdf.obj(n, "streamfile", filename, attrtext) -- we only use immediate objects -- todo: tracing local names, cache = { }, { } function lpdf.reserveobject(name) if name == "annot" then -- catch misuse return pdfreserveobject("annot") else local r = pdfreserveobject() if name then names[name] = r if trace_objects then report_objects("reserving number %a under name %a",r,name) end elseif trace_objects then report_objects("reserving number %a",r) end return r end end function lpdf.reserveannotation() return pdfreserveobject("annot") end -- lpdf.immediateobject = pdfimmediateobject -- lpdf.deferredobject = pdfdeferredobject -- lpdf.object = pdfdeferredobject -- lpdf.referenceobject = pdfreferenceobject lpdf.pagereference = pdf.pageref or tex.pdfpageref lpdf.registerannotation = pdf.registerannot function lpdf.delayedobject(data) -- we will get rid of this one local n = pdfdeferredobject(data) pdfreferenceobject(n) return n end function lpdf.flushobject(name,data) if data then local named = names[name] if named then if not trace_objects then elseif trace_detail then report_objects("flushing data to reserved object with name %a, data: %S",name,data) else report_objects("flushing data to reserved object with name %a",name) end return pdfimmediateobject(named,tostring(data)) else if not trace_objects then elseif trace_detail then report_objects("flushing data to reserved object with number %s, data: %S",name,data) else report_objects("flushing data to reserved object with number %s",name) end return pdfimmediateobject(name,tostring(data)) end else if trace_objects and trace_detail then report_objects("flushing data: %S",name) end return pdfimmediateobject(tostring(name)) end end function lpdf.flushstreamobject(data,dict,compressed) -- default compressed if trace_objects then report_objects("flushing stream object of %s bytes",#data) end local dtype = type(dict) return pdfdeferredobject { immediate = true, compresslevel = compressed == false and 0 or nil, type = "stream", string = data, attr = (dtype == "string" and dict) or (dtype == "table" and dict()) or nil, } end function lpdf.flushstreamfileobject(filename,dict,compressed) -- default compressed if trace_objects then report_objects("flushing stream file object %a",filename) end local dtype = type(dict) return pdfdeferredobject { immediate = true, compresslevel = compressed == false and 0 or nil, type = "stream", file = filename, attr = (dtype == "string" and dict) or (dtype == "table" and dict()) or nil, } end local shareobjectcache, shareobjectreferencecache = { }, { } function lpdf.shareobject(content) if content == nil then -- invalid object not created else content = tostring(content) local o = shareobjectcache[content] if not o then o = pdfimmediateobject(content) shareobjectcache[content] = o end return o end end function lpdf.shareobjectreference(content) if content == nil then -- invalid object not created else content = tostring(content) local r = shareobjectreferencecache[content] if not r then local o = shareobjectcache[content] if not o then o = pdfimmediateobject(content) shareobjectcache[content] = o end r = pdfreference(o) shareobjectreferencecache[content] = r end return r end end --~ local d = lpdf.dictionary() --~ local e = lpdf.dictionary { ["e"] = "abc", x = lpdf.dictionary { ["f"] = "ABC" } } --~ local f = lpdf.dictionary { ["f"] = "ABC" } --~ local a = lpdf.array { lpdf.array { lpdf.string("xxx") } } --~ print(a) --~ os.exit() --~ d["test"] = lpdf.string ("test") --~ d["more"] = "more" --~ d["bool"] = true --~ d["numb"] = 1234 --~ d["oeps"] = lpdf.dictionary { ["hans"] = "ton" } --~ d["whow"] = lpdf.array { lpdf.string("ton") } --~ a[#a+1] = lpdf.string("xxx") --~ a[#a+1] = lpdf.string("yyy") --~ d.what = a --~ print(e) --~ local d = lpdf.dictionary() --~ d["abcd"] = { 1, 2, 3, "test" } --~ print(d) --~ print(d()) --~ local d = lpdf.array() --~ d[#d+1] = 1 --~ d[#d+1] = 2 --~ d[#d+1] = 3 --~ d[#d+1] = "test" --~ print(d) --~ local d = lpdf.array() --~ d[#d+1] = { 1, 2, 3, "test" } --~ print(d) --~ local d = lpdf.array() --~ d[#d+1] = { a=1, b=2, c=3, d="test" } --~ print(d) --~ local s = lpdf.constant("xx") --~ print(s) -- fails somehow --~ print(s()) -- fails somehow --~ local s = lpdf.boolean(false) --~ s.value = true --~ print(s) --~ print(s()) -- three priority levels, default=2 local pagefinalizers, documentfinalizers = { { }, { }, { } }, { { }, { }, { } } local pageresources, pageattributes, pagesattributes local function resetpageproperties() pageresources = pdfdictionary() pageattributes = pdfdictionary() pagesattributes = pdfdictionary() end resetpageproperties() local function setpageproperties() pdf.pageresources = pageresources () pdf.pageattributes = pageattributes () pdf.pagesattributes = pagesattributes() end local function addtopageresources (k,v) pageresources [k] = v end local function addtopageattributes (k,v) pageattributes [k] = v end local function addtopagesattributes(k,v) pagesattributes[k] = v end lpdf.addtopageresources = addtopageresources lpdf.addtopageattributes = addtopageattributes lpdf.addtopagesattributes = addtopagesattributes local function set(where,what,f,when,comment) if type(when) == "string" then when, comment = 2, when elseif not when then when = 2 end local w = where[when] w[#w+1] = { f, comment } if trace_finalizers then report_finalizing("%s set: [%s,%s]",what,when,#w) end end local function run(where,what) if trace_finalizers then report_finalizing("start backend, category %a, n %a",what,#where) end for i=1,#where do local w = where[i] for j=1,#w do local wj = w[j] if trace_finalizers then report_finalizing("%s finalizer: [%s,%s] %s",what,i,j,wj[2] or "") end wj[1]() end end if trace_finalizers then report_finalizing("stop finalizing") end end local function registerpagefinalizer(f,when,comment) set(pagefinalizers,"page",f,when,comment) end local function registerdocumentfinalizer(f,when,comment) set(documentfinalizers,"document",f,when,comment) end lpdf.registerpagefinalizer = registerpagefinalizer lpdf.registerdocumentfinalizer = registerdocumentfinalizer function lpdf.finalizepage() if not environment.initex then -- resetpageproperties() -- maybe better before run(pagefinalizers,"page") setpageproperties() resetpageproperties() -- maybe better before end end function lpdf.finalizedocument() if not environment.initex then run(documentfinalizers,"document") function lpdf.finalizedocument() report_finalizing("serious error: the document is finalized multiple times") function lpdf.finalizedocument() end end end end backends.pdf.codeinjections.finalizepage = lpdf.finalizepage -- will go when we have hook --~ callbacks.register("finish_pdfpage", lpdf.finalizepage) callbacks.register("finish_pdffile", lpdf.finalizedocument) -- some minimal tracing, handy for checking the order local function trace_set(what,key) if trace_resources then report_finalizing("setting key %a in %a",key,what) end end local function trace_flush(what) if trace_resources then report_finalizing("flushing %a",what) end end lpdf.protectresources = true local catalog = pdfdictionary { Type = pdfconstant("Catalog") } -- nicer, but when we assign we nil the Type local info = pdfdictionary { Type = pdfconstant("Info") } -- nicer, but when we assign we nil the Type local names = pdfdictionary { Type = pdfconstant("Names") } -- nicer, but when we assign we nil the Type local function flushcatalog() if not environment.initex then trace_flush("catalog") catalog.Type = nil pdf.catalog = catalog() end end local function flushinfo () if not environment.initex then trace_flush("info") info .Type = nil pdf.info = info () end end local function flushnames () if not environment.initex then trace_flush("names") names .Type = nil pdf.names = names () end end function lpdf.addtocatalog(k,v) if not (lpdf.protectresources and catalog[k]) then trace_set("catalog",k) catalog[k] = v end end function lpdf.addtoinfo (k,v) if not (lpdf.protectresources and info [k]) then trace_set("info", k) info [k] = v end end function lpdf.addtonames (k,v) if not (lpdf.protectresources and names [k]) then trace_set("names", k) names [k] = v end end local dummy = pdfreserveobject() -- else bug in hvmd due so some internal luatex conflict -- Some day I will implement a proper minimalized resource management. local r_extgstates, d_extgstates = pdfreserveobject(), pdfdictionary() local p_extgstates = pdfreference(r_extgstates) local r_colorspaces, d_colorspaces = pdfreserveobject(), pdfdictionary() local p_colorspaces = pdfreference(r_colorspaces) local r_patterns, d_patterns = pdfreserveobject(), pdfdictionary() local p_patterns = pdfreference(r_patterns) local r_shades, d_shades = pdfreserveobject(), pdfdictionary() local p_shades = pdfreference(r_shades) local function checkextgstates () if next(d_extgstates ) then addtopageresources("ExtGState", p_extgstates ) end end local function checkcolorspaces() if next(d_colorspaces) then addtopageresources("ColorSpace",p_colorspaces) end end local function checkpatterns () if next(d_patterns ) then addtopageresources("Pattern", p_patterns ) end end local function checkshades () if next(d_shades ) then addtopageresources("Shading", p_shades ) end end local function flushextgstates () if next(d_extgstates ) then trace_flush("extgstates") pdfimmediateobject(r_extgstates, tostring(d_extgstates )) end end local function flushcolorspaces() if next(d_colorspaces) then trace_flush("colorspaces") pdfimmediateobject(r_colorspaces,tostring(d_colorspaces)) end end local function flushpatterns () if next(d_patterns ) then trace_flush("patterns") pdfimmediateobject(r_patterns, tostring(d_patterns )) end end local function flushshades () if next(d_shades ) then trace_flush("shades") pdfimmediateobject(r_shades, tostring(d_shades )) end end function lpdf.collectedresources() local ExtGState = next(d_extgstates ) and p_extgstates local ColorSpace = next(d_colorspaces) and p_colorspaces local Pattern = next(d_patterns ) and p_patterns local Shading = next(d_shades ) and p_shades if ExtGState or ColorSpace or Pattern or Shading then local collected = pdfdictionary { ExtGState = ExtGState, ColorSpace = ColorSpace, Pattern = Pattern, Shading = Shading, -- ProcSet = pdfarray { pdfconstant("PDF") }, } return collected() else return "" end end function lpdf.adddocumentextgstate (k,v) d_extgstates [k] = v end function lpdf.adddocumentcolorspace(k,v) d_colorspaces[k] = v end function lpdf.adddocumentpattern (k,v) d_patterns [k] = v end function lpdf.adddocumentshade (k,v) d_shades [k] = v end registerdocumentfinalizer(flushextgstates,3,"extended graphic states") registerdocumentfinalizer(flushcolorspaces,3,"color spaces") registerdocumentfinalizer(flushpatterns,3,"patterns") registerdocumentfinalizer(flushshades,3,"shades") registerdocumentfinalizer(flushcatalog,3,"catalog") registerdocumentfinalizer(flushinfo,3,"info") registerdocumentfinalizer(flushnames,3,"names") -- before catalog registerpagefinalizer(checkextgstates,3,"extended graphic states") registerpagefinalizer(checkcolorspaces,3,"color spaces") registerpagefinalizer(checkpatterns,3,"patterns") registerpagefinalizer(checkshades,3,"shades") -- in strc-bkm: lpdf.registerdocumentfinalizer(function() structures.bookmarks.place() end,1) function lpdf.rotationcm(a) local s, c = sind(a), cosd(a) return format("%0.6f %0.6f %0.6f %0.6f 0 0 cm",c,s,-s,c) end -- ! -> universaltime local timestamp = os.date("%Y-%m-%dT%X") .. os.timezone(true) function lpdf.timestamp() return timestamp end function lpdf.pdftimestamp(str) local Y, M, D, h, m, s, Zs, Zh, Zm = match(str,"^(%d%d%d%d)%-(%d%d)%-(%d%d)T(%d%d):(%d%d):(%d%d)([%+%-])(%d%d):(%d%d)$") return Y and format("D:%s%s%s%s%s%s%s%s'%s'",Y,M,D,h,m,s,Zs,Zh,Zm) end function lpdf.id() return format("%s.%s",tex.jobname,timestamp) end function lpdf.checkedkey(t,key,variant) local pn = t and t[key] if pn then local tn = type(pn) if tn == variant then if variant == "string" then return pn ~= "" and pn or nil elseif variant == "table" then return next(pn) and pn or nil else return pn end elseif tn == "string" and variant == "number" then return tonumber(pn) end end end function lpdf.checkedvalue(value,variant) -- code not shared if value then local tv = type(value) if tv == variant then if variant == "string" then return value ~= "" and value elseif variant == "table" then return next(value) and value else return value end elseif tv == "string" and variant == "number" then return tonumber(value) end end end function lpdf.limited(n,min,max,default) if not n then return default else n = tonumber(n) if not n then return default elseif n > max then return max elseif n < min then return min else return n end end end -- lpdf.addtoinfo("ConTeXt.Version", tex.contextversiontoks) -- lpdf.addtoinfo("ConTeXt.Time", os.date("%Y.%m.%d %H:%M")) -- :%S -- lpdf.addtoinfo("ConTeXt.Jobname", environment.jobname) -- lpdf.addtoinfo("ConTeXt.Url", "www.pragma-ade.com") if not pdfreferenceobject then local delayed = { } local function flush() local n = 0 for k,v in next, delayed do pdfimmediateobject(k,v) n = n + 1 end if trace_objects then report_objects("%s objects flushed",n) end delayed = { } end lpdf.registerdocumentfinalizer(flush,3,"objects") -- so we need a final flush too lpdf.registerpagefinalizer (flush,3,"objects") -- somehow this lags behind .. I need to look into that some day function lpdf.delayedobject(data) local n = pdfreserveobject() delayed[n] = data return n end end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-shapes.lua0000644000175000017500000003313312161703335025252 0ustar norbertnorbertif not modules then modules = { } end modules['s-fonts-shapes'] = { version = 1.001, comment = "companion to s-fonts-shapes.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.shapes = moduledata.fonts.shapes or { } local fontdata = fonts.hashes.identifiers local context = context local NC, NR = context.NC, context.NR local space, dontleavehmode, glyph, getvalue = context.space, context.dontleavehmode, context.glyph, context.getvalue local formatters = string.formatters function moduledata.fonts.shapes.showlist(specification) -- todo: ranges specification = interfaces.checkedspecification(specification) local id, cs = fonts.definers.internal(specification,"") local chrs = fontdata[id].characters function char(k) dontleavehmode() glyph(id,k) end local function special(v) local specials = v.specials if specials and #specials > 1 then context("%s:",specials[1]) for i=2,#specials do space() char(specials[i]) end end end context.begingroup() context.tt() context.starttabulate { "|l|c|c|c|c|l|l|" } context.FL() NC() context.bold("unicode") NC() context.bold("glyph") NC() context.bold("shape") NC() context.bold("lower") NC() context.bold("upper") NC() context.bold("specials") NC() context.bold("description") NC() NR() context.TL() for k, v in next, characters.data do if chrs[k] then NC() context("0x%05X",k) NC() char(k) -- getvalue(cs) context.char(k) NC() char(v.shcode) NC() char(v.lccode or k) NC() char(v.uccode or k) NC() special(v) NC() context.tx(v.description) NC() NR() end end context.stoptabulate() context.endgroup() end function moduledata.fonts.shapes.showlist(specification) -- todo: ranges specification = interfaces.checkedspecification(specification) local id, cs = fonts.definers.internal(specification,"") local chrs = fontdata[id].characters function char(k) dontleavehmode() glyph(id,k) end local function special(v) local specials = v.specials if specials and #specials > 1 then context("%s:",specials[1]) for i=2,#specials do space() char(specials[i]) end end end context.begingroup() context.tt() context.starttabulate { "|l|c|c|c|c|l|l|" } context.FL() NC() context.bold("unicode") NC() context.bold("glyph") NC() context.bold("shape") NC() context.bold("lower") NC() context.bold("upper") NC() context.bold("specials") NC() context.bold("description") NC() NR() context.TL() for k, v in next, characters.data do if chrs[k] then NC() context("0x%05X",k) NC() char(k) NC() char(v.shcode) NC() char(v.lccode or k) NC() char(v.uccode or k) NC() special(v) NC() context.tx(v.description) NC() NR() end end context.stoptabulate() context.endgroup() end local descriptions = nil local characters = nil local function showglyphshape(specification) specification = interfaces.checkedspecification(specification) local id, cs = fonts.definers.internal(specification,"") local tfmdata = fontdata[id] local charnum = tonumber(specification.character) if not charnum then charnum = fonts.helpers.nametoslot(n) end context.start() context.dontleavehmode() context.obeyMPboxdepth() local characters = tfmdata.characters local descriptions = tfmdata.descriptions local parameters = tfmdata.parameters local c = characters[charnum] local d = descriptions[charnum] if d then local factor = (parameters.size/parameters.units)*((7200/7227)/65536) local llx, lly, urx, ury = unpack(d.boundingbox) llx, lly, urx, ury = llx*factor, lly*factor, urx*factor, ury*factor local width, italic = (d.width or 0)*factor, (d.italic or 0)*factor local top_accent, bot_accent = (d.top_accent or 0)*factor, (d.bot_accent or 0)*factor local anchors, math = d.anchors, d.math context.startMPcode() context("pickup pencircle scaled .25bp ;") context('picture p ; p := image(draw textext.drt("\\getuvalue{%s}\\gray\\char%s");); draw p ;',cs,charnum) context('draw (%s,%s)--(%s,%s)--(%s,%s)--(%s,%s)--cycle withcolor green ;',llx,lly,urx,lly,urx,ury,llx,ury) context('draw (%s,%s)--(%s,%s) withcolor green ;',llx,0,urx,0) context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;') context("defaultscale := 0.05 ; ") -- inefficient but non critical local function slant_1(v,dx,dy,txt,xsign,ysign,loc,labloc) if #v > 0 then local l = { } for kk, vv in ipairs(v) do local h, k = vv.height, vv.kern if h and k then l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) end end context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled .25) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1]) context("draw laddered (%s) withcolor .5white ;",table.concat(l,"..")) context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled .25) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l]) for k, v in ipairs(l) do context("draw %s withcolor blue withpen pencircle scaled 1bp;",v) end end end local function slant_2(v,dx,dy,txt,xsign,ysign,loc,labloc) if #v > 0 then local l = { } for kk, vv in ipairs(v) do local h, k = vv.height, vv.kern if h and k then l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) end end if loc == "top" then context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[#l]) else context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1]) end for kk, vv in ipairs(v) do local h, k = vv.height, vv.kern if h and k then context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[kk]) end end end end if math then local kerns = math.kerns if kerns then for _, slant in ipairs { slant_1, slant_2 } do for k,v in pairs(kerns) do if k == "top_right" then slant(v,width+italic,0,k,1,1,"top","ulft") elseif k == "bottom_right" then slant(v,width,0,k,1,1,"bot","lrt") elseif k == "top_left" then slant(v,0,0,k,-1,1,"top","ulft") elseif k == "bottom_left" then slant(v,0,0,k,-1,1,"bot","lrt") end end end end end local function show(x,y,txt) local xx, yy = x*factor, y*factor context("draw (%s,%s) withcolor blue withpen pencircle scaled 1bp;",xx,yy) context('label.top("\\type{%s}",(%s,%s-2bp)) ;',txt,xx,yy) context('label.bot("(%s,%s)",(%s,%s+2bp)) ;',x,y,xx,yy) end if anchors then local a = anchors.baselig if a then for k, v in pairs(a) do for kk, vv in ipairs(v) do show(vv[1],vv[2],k .. ":" .. kk) end end end local a = anchors.mark if a then for k, v in pairs(a) do show(v[1],v[2],k) end end local a = anchors.basechar if a then for k, v in pairs(a) do show(v[1],v[2],k) end end local ba = anchors.centry if a then for k, v in pairs(a) do show(v[1],v[2],k) end end local a = anchors.cexit if a then for k, v in pairs(a) do show(v[1],v[2],k) end end end if italic ~= 0 then context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width,ury,width,ury) context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width+italic,ury,width+italic,ury) context('draw (%s,%s-1bp)--(%s,%s-1bp) withcolor blue;',width,ury,width+italic,ury) context('label.lft("\\type{%s}",(%s+2bp,%s-1bp));',"italic",width,ury) context('label.rt("%s",(%s-2bp,%s-1bp));',d.italic,width+italic,ury) end if top_accent ~= 0 then context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',top_accent,ury,top_accent,ury) context('label.bot("\\type{%s}",(%s,%s+1bp));',"top_accent",top_accent,ury) context('label.top("%s",(%s,%s-1bp));',d.top_accent,top_accent,ury) end if bot_accent ~= 0 then context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',bot_accent,lly,bot_accent,lly) context('label.top("\\type{%s}",(%s,%s-1bp));',"bot_accent",top_accent,ury) context('label.bot("%s",(%s,%s+1bp));',d.bot_accent,bot_accent,lly) end context('draw origin withcolor red withpen pencircle scaled 1bp;') context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;") context("currentpicture := currentpicture scaled 8 ;") context.stopMPcode() -- elseif c then -- lastdata, lastunicode = nil, nil -- local factor = (7200/7227)/65536 -- context.startMPcode() -- context("pickup pencircle scaled .25bp ; ") -- context('picture p ; p := image(draw textext.drt("\\gray\\char%s");); draw p ;',charnum) -- context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;') -- context("defaultscale := 0.05 ; ") -- local italic, top_accent, bot_accent = (c.italic or 0)*factor, (c.top_accent or 0)*factor, (c.bot_accent or 0)*factor -- local width, height, depth = (c.width or 0)*factor, (c.height or 0)*factor, (c.depth or 0)*factor -- local ury = height -- if italic ~= 0 then -- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width,ury,width,ury) -- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width+italic,ury,width+italic,ury) -- context('draw (%s,%s-1bp)--(%s,%s-1bp) withcolor blue;',width,ury,width+italic,height) -- context('label.lft("\\type{%s}",(%s+2bp,%s-1bp));',"italic",width,height) -- context('label.rt("%6.3f bp",(%s-2bp,%s-1bp));',italic,width+italic,height) -- end -- if top_accent ~= 0 then -- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',top_accent,ury,top_accent,height) -- context('label.bot("\\type{%s}",(%s,%s+1bp));',"top_accent",top_accent,height) -- context('label.top("%6.3f bp",(%s,%s-1bp));',top_accent,top_accent,height) -- end -- if bot_accent ~= 0 then -- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',bot_accent,lly,bot_accent,height) -- context('label.top("\\type{%s}",(%s,%s-1bp));',"bot_accent",top_accent,height) -- context('label.bot("%6.3f bp",(%s,%s+1bp));',bot_accent,bot_accent,height) -- end -- context('draw origin withcolor red withpen pencircle scaled 1bp;') -- context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;") -- context("currentpicture := currentpicture scaled 8 ;") -- context.stopMPcode() else lastdata, lastunicode = nil, nil context("no such shape: 0x%05X",charnum) end context.stop() end moduledata.fonts.shapes.showglyphshape = showglyphshape function moduledata.fonts.shapes.showallglypshapes(specification) specification = interfaces.checkedspecification(specification) local id, cs = fonts.definers.internal(specification,"") local descriptions = fontdata[id].descriptions for unicode, description in fonts.iterators.descriptions(tfmdata) do context.modulefontsstartshowglyphshape(unicode,description.name) showglyphshape { number = id, character = unicode } context.modulefontsstopshowglyphshape() end end function moduledata.fonts.shapes.showlastglyphshapefield(unicode,name) if not descriptions then -- bad news elseif name == "unicode" then context("U+%05X",descriptions.unicode) else local d = descriptions[name] if d then context(d) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-vfu.lua0000644000175000017500000012332312134352503024125 0ustar norbertnorbertif not modules then modules = { } end modules ['math-vfu'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- All these math vectors .. thanks to Aditya and Mojca they become -- better and better. If you have problems with math fonts or miss -- characters report it to the ConTeXt mailing list. Also thanks to -- Boguslaw for finding a couple of errors. -- -- This mechanism will stay around. Even when we've switched to the -- real fonts, one can still say: -- -- \enablemode[lmmath,pxmath,txmath] -- -- to get the virtual counterparts. There are still areas where the -- virtuals are better. -- 20D6 -> 2190 -- 20D7 -> 2192 local type, next = type, next local max = math.max local format = string.format local utfchar = utf.char local fonts, nodes, mathematics = fonts, nodes, mathematics local trace_virtual = false trackers.register("math.virtual", function(v) trace_virtual = v end) local trace_timings = false trackers.register("math.timings", function(v) trace_timings = v end) local add_optional = false directives.register("math.virtual.optional",function(v) add_optional = v end) local report_virtual = logs.reporter("fonts","virtual math") local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local mathencodings = allocate() fonts.encodings.math = mathencodings -- better is then: fonts.encodings.vectors local vfmath = allocate() fonts.handlers.vf.math = vfmath local shared = { } -- local push, pop, back = { "push" }, { "pop" }, { "slot", 1, 0x2215 } -- -- local function negate(main,characters,id,size,unicode,basecode) -- if not characters[unicode] then -- local basechar = characters[basecode] -- if basechar then -- local ht, wd = basechar.height, basechar.width -- characters[unicode] = { -- width = wd, -- height = ht, -- depth = basechar.depth, -- italic = basechar.italic, -- kerns = basechar.kerns, -- commands = { -- { "slot", 1, basecode }, -- push, -- { "down", ht/5}, -- { "right", - wd/2}, -- back, -- push, -- } -- } -- end -- end -- end -- -- \Umathchardef\braceld="0 "1 "FF07A -- \Umathchardef\bracerd="0 "1 "FF07B -- \Umathchardef\bracelu="0 "1 "FF07C -- \Umathchardef\braceru="0 "1 "FF07D local function brace(main,characters,id,size,unicode,first,rule,left,right,rule,last) if not characters[unicode] then characters[unicode] = { horiz_variants = { { extender = 0, glyph = first }, { extender = 1, glyph = rule }, { extender = 0, glyph = left }, { extender = 0, glyph = right }, { extender = 1, glyph = rule }, { extender = 0, glyph = last }, } } end end local function extension(main,characters,id,size,unicode,first,middle,last) local chr = characters[unicode] if not chr then return -- skip end local fw = characters[first] if not fw then return end local mw = characters[middle] if not mw then return end local lw = characters[last] if not lw then return end fw = fw.width mw = mw.width lw = lw.width if fw == 0 then fw = 1 end if lw == 0 then lw = 1 end chr.horiz_variants = { { extender = 0, glyph = first, ["end"] = fw/2, start = 0, advance = fw }, { extender = 1, glyph = middle, ["end"] = mw/2, start = mw/2, advance = mw }, { extender = 0, glyph = last, ["end"] = 0, start = lw/2, advance = lw }, } end local function parent(main,characters,id,size,unicode,first,rule,last) if not characters[unicode] then characters[unicode] = { horiz_variants = { { extender = 0, glyph = first }, { extender = 1, glyph = rule }, { extender = 0, glyph = last }, } } end end local push, pop, step = { "push" }, { "pop" }, 0.2 -- 0.1 is nicer but gives larger files local function make(main,characters,id,size,n,m) local old = 0xFF000 + n local c = characters[old] if c then local upslot, dnslot, uprule, dnrule = 0xFF100 + n, 0xFF200 + n, 0xFF300 + m, 0xFF400 + m local xu = main.parameters.x_height + 0.3*size local xd = 0.3*size local w, h, d = c.width, c.height, c.depth local thickness = h - d local rulewidth = step*size -- we could use an overlap local slot = { "slot", id, old } local rule = { "rule", thickness, rulewidth } local up = { "down", -xu } local dn = { "down", xd } local ht, dp = xu + 3*thickness, 0 if not characters[uprule] then characters[uprule] = { width = rulewidth, height = ht, depth = dp, commands = { push, up, rule, pop } } end characters[upslot] = { width = w, height = ht, depth = dp, commands = { push, up, slot, pop } } local ht, dp = 0, xd + 3*thickness if not characters[dnrule] then characters[dnrule] = { width = rulewidth, height = ht, depth = dp, commands = { push, dn, rule, pop } } end characters[dnslot] = { width = w, height = ht, depth = dp, commands = { push, dn, slot, pop } } end end local function clipped(main,characters,id,size,unicode,original) -- push/pop needed? local minus = characters[original] if minus then local mu = size/18 local step = 3*mu local width = minus.width if width > step then width = width - step step = step / 2 else width = width / 2 step = width end characters[unicode] = { width = width, height = minus.height, depth = minus.depth, commands = { push, { "right", -step }, { "slot", id, original }, pop } } end end -- fails: pdf:page: pdf:direct: ... some funny displacement -- this does not yet work ... { "scale", 2, 0, 0, 3 } .. commented code -- -- this does not work ... no interpretation going on here -- -- local nodeinjections = backends.nodeinjections -- { "node", nodeinjections.save() }, -- { "node", nodeinjections.transform(.7,0,0,.7) }, -- commands[#commands+1] = { "node", nodeinjections.restore() } local done = { } local function raise(main,characters,id,size,unicode,private,n) -- this is a real fake mess local raised = characters[private] if raised then if not done[unicode] then report_virtual("temporary too large %U due to issues in luatex backend",unicode) done[unicode] = true end local up = 0.85 * main.parameters.x_height local slot = { "slot", id, private } local commands = { push, { "down", - up }, -- { "scale", .7, 0, 0, .7 }, slot, } for i=2,n do commands[#commands+1] = slot end commands[#commands+1] = pop characters[unicode] = { width = .7 * n * raised.width, height = .7 * (raised.height + up), depth = .7 * (raised.depth - up), commands = commands, } end end local function dots(main,characters,id,size,unicode) local c = characters[0x002E] if c then local w, h, d = c.width, c.height, c.depth local mu = size/18 local right3mu = { "right", 3*mu } local right1mu = { "right", 1*mu } local up1size = { "down", -.1*size } local up4size = { "down", -.4*size } local up7size = { "down", -.7*size } local right2muw = { "right", 2*mu + w } local slot = { "slot", id, 0x002E } if unicode == 0x22EF then local c = characters[0x022C5] if c then local w, h, d = c.width, c.height, c.depth local slot = { "slot", id, 0x022C5 } characters[unicode] = { width = 3*w + 2*3*mu, height = h, depth = d, commands = { push, slot, right3mu, slot, right3mu, slot, pop } } end elseif unicode == 0x22EE then -- weird height ! characters[unicode] = { width = w, height = h+(1.4)*size, depth = 0, commands = { push, push, slot, pop, up4size, push, slot, pop, up4size, slot, pop } } elseif unicode == 0x22F1 then characters[unicode] = { width = 3*w + 6*size/18, height = 1.5*size, depth = 0, commands = { push, right1mu, push, up7size, slot, pop, right2muw, push, up4size, slot, pop, right2muw, push, up1size, slot, pop, right1mu, pop } } elseif unicode == 0x22F0 then characters[unicode] = { width = 3*w + 6*size/18, height = 1.5*size, depth = 0, commands = { push, right1mu, push, up1size, slot, pop, right2muw, push, up4size, slot, pop, right2muw, push, up7size, slot, pop, right1mu, pop } } else characters[unicode] = { width = 3*w + 2*3*mu, height = h, depth = d, commands = { push, slot, right3mu, slot, right3mu, slot, pop } } end end end local function vertbar(main,characters,id,size,parent,scale,unicode) local cp = characters[parent] if cp then local sc = scale * size local pc = { "slot", id, parent } characters[unicode] = { width = cp.width, height = cp.height + sc, depth = cp.depth + sc, commands = { push, { "down", -sc }, pc, pop, push, { "down", sc }, pc, pop, pc, }, next = cp.next -- can be extensible } cp.next = unicode end end local function jointwo(main,characters,id,size,unicode,u1,d12,u2,what) local c1, c2 = characters[u1], characters[u2] if c1 and c2 then local w1, w2 = c1.width, c2.width local mu = size/18 characters[unicode] = { width = w1 + w2 - d12 * mu, height = max(c1.height or 0, c2.height or 0), depth = max(c1.depth or 0, c2.depth or 0), commands = { { "slot", id, u1 }, { "right", -d12*mu } , { "slot", id, u2 }, }, } end end local function jointhree(main,characters,id,size,unicode,u1,d12,u2,d23,u3) local c1, c2, c3 = characters[u1], characters[u2], characters[u3] if c1 and c2 and c3 then local w1, w2, w3 = c1.width, c2.width, c3.width local mu = size/18 characters[unicode] = { width = w1 + w2 + w3 - d12*mu - d23*mu, height = max(c1.height or 0, c2.height or 0, c3.height or 0), depth = max(c1.depth or 0, c2.depth or 0, c3.depth or 0), commands = { { "slot", id, u1 }, { "right", - d12*mu } , { "slot", id, u2 }, { "right", - d23*mu }, { "slot", id, u3 }, } } end end local function stack(main,characters,id,size,unicode,u1,d12,u2) local c1, c2 = characters[u1], characters[u2] if c1 and c2 then local w1, w2 = c1.width, c2.width local h1, h2 = c1.height, c2.height local d1, d2 = c1.depth, c2.depth local mu = size/18 characters[unicode] = { width = w1, height = h1 + h2 + d12, depth = d1, commands = { { "slot", id, u1 }, { "right", - w1/2 - w2/2 } , { "down", -h1 + d2 -d12*mu } , { "slot", id, u2 }, } } end end local function repeated(main,characters,id,size,unicode,u,n,private,fraction) -- math-fbk.lua local c = characters[u] if c then local width = c.width local italic = fraction*width -- c.italic or 0 -- larger ones have funny italics local tc = { "slot", id, u } local tr = { "right", -italic } -- see hack elsewhere local commands = { } for i=1,n-1 do commands[#commands+1] = tc commands[#commands+1] = tr end commands[#commands+1] = tc -- inspect(c) -- inspect(commands) local next = c.next if next then repeated(main,characters,id,size,private,next,n,private+1,fraction) next = private end characters[unicode] = { width = width + (n-1)*(width-italic), height = c.height, depth = c.depth, italic = italic, commands = commands, next = next, } end end function vfmath.addmissing(main,id,size) local characters = main.characters local shared = main.shared local variables = main.goodies.mathematics and main.goodies.mathematics.variables or { } local joinrelfactor = variables.joinrelfactor or 3 for i=0x7A,0x7D do make(main,characters,id,size,i,1) end brace (main,characters,id,size,0x23DE,0xFF17A,0xFF301,0xFF17D,0xFF17C,0xFF301,0xFF17B) brace (main,characters,id,size,0x23DF,0xFF27C,0xFF401,0xFF27B,0xFF27A,0xFF401,0xFF27D) parent (main,characters,id,size,0x23DC,0xFF17A,0xFF301,0xFF17B) parent (main,characters,id,size,0x23DD,0xFF27C,0xFF401,0xFF27D) -- negate (main,characters,id,size,0x2260,0x003D) dots (main,characters,id,size,0x2026) -- ldots dots (main,characters,id,size,0x22EE) -- vdots dots (main,characters,id,size,0x22EF) -- cdots dots (main,characters,id,size,0x22F1) -- ddots dots (main,characters,id,size,0x22F0) -- udots vertbar (main,characters,id,size,0x0007C,0.10,0xFF601) -- big : 0.85 bodyfontsize vertbar (main,characters,id,size,0xFF601,0.30,0xFF602) -- Big : 1.15 bodyfontsize vertbar (main,characters,id,size,0xFF602,0.30,0xFF603) -- bigg : 1.45 bodyfontsize vertbar (main,characters,id,size,0xFF603,0.30,0xFF604) -- Bigg : 1.75 bodyfontsize vertbar (main,characters,id,size,0x02016,0.10,0xFF605) vertbar (main,characters,id,size,0xFF605,0.30,0xFF606) vertbar (main,characters,id,size,0xFF606,0.30,0xFF607) vertbar (main,characters,id,size,0xFF607,0.30,0xFF608) clipped (main,characters,id,size,0xFF501,0x0002D) -- minus clipped (main,characters,id,size,0xFF502,0x02190) -- lefthead clipped (main,characters,id,size,0xFF503,0x02192) -- righthead clipped (main,characters,id,size,0xFF504,0xFE321) -- mapsto clipped (main,characters,id,size,0xFF505,0xFE322) -- lhook clipped (main,characters,id,size,0xFF506,0xFE323) -- rhook clipped (main,characters,id,size,0xFF507,0xFE324) -- mapsfrom clipped (main,characters,id,size,0xFF508,0x021D0) -- double lefthead clipped (main,characters,id,size,0xFF509,0x021D2) -- double righthead clipped (main,characters,id,size,0xFF50A,0x0003D) -- equal clipped (main,characters,id,size,0xFF50B,0x0219E) -- lefttwohead clipped (main,characters,id,size,0xFF50C,0x021A0) -- righttwohead clipped (main,characters,id,size,0xFF50D,0xFF350) -- lr arrow combi snippet clipped (main,characters,id,size,0xFF50E,0xFF351) -- lr arrow combi snippet clipped (main,characters,id,size,0xFF50F,0xFF352) -- lr arrow combi snippet clipped (main,characters,id,size,0xFF510,0x02261) -- equiv extension(main,characters,id,size,0x2190,0xFF502,0xFF501,0xFF501) -- \leftarrow extension(main,characters,id,size,0x2192,0xFF501,0xFF501,0xFF503) -- \rightarrow extension(main,characters,id,size,0x002D,0xFF501,0xFF501,0xFF501) -- \rel extension(main,characters,id,size,0x003D,0xFF50A,0xFF50A,0xFF50A) -- \equal extension(main,characters,id,size,0x2261,0xFF510,0xFF510,0xFF510) -- \equiv jointwo (main,characters,id,size,0x21A6,0xFE321,0,0x02192) -- \mapstochar\rightarrow jointwo (main,characters,id,size,0x21A9,0x02190,joinrelfactor,0xFE323) -- \leftarrow\joinrel\rhook jointwo (main,characters,id,size,0x21AA,0xFE322,joinrelfactor,0x02192) -- \lhook\joinrel\rightarrow jointwo (main,characters,id,size,0x27F5,0x02190,joinrelfactor,0x0002D) -- \leftarrow\joinrel\relbar jointwo (main,characters,id,size,0x27F6,0x0002D,joinrelfactor,0x02192,2) -- \relbar\joinrel\rightarrow jointwo (main,characters,id,size,0x27F7,0x02190,joinrelfactor,0x02192) -- \leftarrow\joinrel\rightarrow jointwo (main,characters,id,size,0x27F8,0x021D0,joinrelfactor,0x0003D) -- \Leftarrow\joinrel\Relbar jointwo (main,characters,id,size,0x27F9,0x0003D,joinrelfactor,0x021D2) -- \Relbar\joinrel\Rightarrow jointwo (main,characters,id,size,0x27FA,0x021D0,joinrelfactor,0x021D2) -- \Leftarrow\joinrel\Rightarrow jointhree(main,characters,id,size,0x27FB,0x02190,joinrelfactor,0x0002D,0,0xFE324) -- \leftarrow\joinrel\relbar\mapsfromchar jointhree(main,characters,id,size,0x27FC,0xFE321,0,0x0002D,joinrelfactor,0x02192) -- \mapstochar\relbar\joinrel\rightarrow extension(main,characters,id,size,0x21A6,0xFF504,0xFF501,0xFF503) -- \mapstochar\rightarrow extension(main,characters,id,size,0x21A9,0xFF502,0xFF501,0xFF506) -- \leftarrow\joinrel\rhook extension(main,characters,id,size,0x21AA,0xFF505,0xFF501,0xFF503) -- \lhook\joinrel\rightarrow extension(main,characters,id,size,0x27F5,0xFF502,0xFF501,0xFF501) -- \leftarrow\joinrel\relbar extension(main,characters,id,size,0x27F6,0xFF501,0xFF501,0xFF503) -- \relbar\joinrel\rightarrow extension(main,characters,id,size,0x27F7,0xFF502,0xFF501,0xFF503) -- \leftarrow\joinrel\rightarrow extension(main,characters,id,size,0x27F8,0xFF508,0xFF50A,0xFF50A) -- \Leftarrow\joinrel\Relbar extension(main,characters,id,size,0x27F9,0xFF50A,0xFF50A,0xFF509) -- \Relbar\joinrel\Rightarrow extension(main,characters,id,size,0x27FA,0xFF508,0xFF50A,0xFF509) -- \Leftarrow\joinrel\Rightarrow extension(main,characters,id,size,0x27FB,0xFF502,0xFF501,0xFF507) -- \leftarrow\joinrel\relbar\mapsfromchar extension(main,characters,id,size,0x27FC,0xFF504,0xFF501,0xFF503) -- \mapstochar\relbar\joinrel\rightarrow extension(main,characters,id,size,0x219E,0xFF50B,0xFF501,0xFF501) -- \twoheadleftarrow\joinrel\relbar extension(main,characters,id,size,0x21A0,0xFF501,0xFF501,0xFF50C) -- \relbar\joinrel\twoheadrightarrow extension(main,characters,id,size,0x21C4,0xFF50D,0xFF50E,0xFF50F) -- leftoverright -- 21CB leftrightharpoon -- 21CC rightleftharpoon stack (main,characters,id,size,0x2259,0x0003D,3,0x02227) -- \buildrel\wedge\over= jointwo (main,characters,id,size,0x22C8,0x022B3,joinrelfactor,0x022B2) -- \mathrel\triangleright\joinrel\mathrel\triangleleft (4 looks better than 3) jointwo (main,characters,id,size,0x22A7,0x0007C,joinrelfactor,0x0003D) -- \mathrel|\joinrel= jointwo (main,characters,id,size,0x2260,0x00338,0,0x0003D) -- \not\equal jointwo (main,characters,id,size,0x2284,0x00338,0,0x02282) -- \not\subset jointwo (main,characters,id,size,0x2285,0x00338,0,0x02283) -- \not\supset jointwo (main,characters,id,size,0x2209,0x00338,0,0x02208) -- \not\in jointwo (main,characters,id,size,0x2254,0x03A,0,0x03D) -- := (≔) repeated(main,characters,id,size,0x222C,0x222B,2,0xFF800,1/3) repeated(main,characters,id,size,0x222D,0x222B,3,0xFF810,1/3) -- raise (main,characters,id,size,0x02032,0xFE325,1) -- prime -- raise (main,characters,id,size,0x02033,0xFE325,2) -- double prime -- raise (main,characters,id,size,0x02034,0xFE325,3) -- triple prime -- there are more (needs discussion first): -- characters[0x20D6] = characters[0x2190] -- characters[0x20D7] = characters[0x2192] characters[0x02B9] = characters[0x2032] -- we're nice end local unique = 0 -- testcase: \startTEXpage \math{!\text{-}\text{-}\text{-}} \stopTEXpage local reported = { } local reverse = { } -- index -> unicode setmetatableindex(reverse, function(t,name) if trace_virtual then report_virtual("initializing math vector %a",name) end local m, r = mathencodings[name], { } for u, i in next, m do r[i] = u end reverse[name] = r return r end) function vfmath.define(specification,set,goodies) local name = specification.name -- symbolic name local size = specification.size -- given size local loaded, fontlist, names, main = { }, { }, { }, nil local start = (trace_virtual or trace_timings) and os.clock() local okset, n = { }, 0 for s=1,#set do local ss = set[s] local ssname = ss.name if add_optional and ss.optional then if trace_virtual then report_virtual("loading font %a subfont %s with name %a at %p is skipped",name,s,ssname,size) end else if ss.features then ssname = ssname .. "*" .. ss.features end if ss.main then main = s end local alreadyloaded = names[ssname] -- for px we load one twice (saves .04 sec) local f, id if alreadyloaded then f, id = alreadyloaded.f, alreadyloaded.id if trace_virtual then report_virtual("loading font %a subfont %s with name %a is reused",name,s,ssname) end else f, id = fonts.constructors.readanddefine(ssname,size) names[ssname] = { f = f, id = id } end if not f or id == 0 then report_virtual("loading font %a subfont %s with name %a at %p is skipped, not found",name,s,ssname,size) else n = n + 1 okset[n] = ss loaded[n] = f fontlist[n] = { id = id, size = size } if not shared[s] then shared[n] = { } end if trace_virtual then report_virtual("loading font %a subfont %s with name %a at %p as id %s using encoding %p",name,s,ssname,size,id,ss.vector) end if not ss.checked then ss.checked = true local vector = mathencodings[ss.vector] if vector then -- we resolve named glyphs only once as we can assume that vectors -- are unique to a font set (when we read an afm we get those names -- mapped onto the private area) for unicode, index in next, vector do if not tonumber(index) then local u = f.unicodes u = u and u[index] if u then if trace_virtual then report_virtual("resolving name %a to %s",index,u) -- maybe more detail for u end else report_virtual("unable to resolve name %a",index) end vector[unicode] = u end end end end end end end -- beware, loaded[1] is already passed to tex (we need to make a simple copy then .. todo) local parent = loaded[1] or { } -- a text font local characters = { } local parameters = { } local mathparameters = { } local descriptions = { } local metadata = { } local properties = { } local goodies = { } local main = { metadata = metadata, properties = properties, characters = characters, descriptions = descriptions, parameters = parameters, mathparameters = mathparameters, fonts = fontlist, goodies = goodies, } -- -- for key, value in next, parent do if type(value) ~= "table" then main[key] = value end end -- if parent.characters then for unicode, character in next, parent.characters do characters[unicode] = character end else report_virtual("font %a has no characters",name) end -- if parent.parameters then for key, value in next, parent.parameters do parameters[key] = value end else report_virtual("font %a has no parameters",name) end -- local description = { name = "" } setmetatableindex(descriptions,function() return description end) -- if parent.properties then setmetatableindex(properties,parent.properties) end -- if parent.goodies then setmetatableindex(goodies,parent.goodies) end -- properties.virtualized = true properties.hasitalics = true properties.hasmath = true -- local fullname = properties.fullname -- parent via mt if fullname then unique = unique + 1 properties.fullname = fullname .. "-" .. unique end -- -- we need to set some values in main as well (still?) -- main.fullname = properties.fullname main.type = "virtual" main.nomath = false -- parameters.x_height = parameters.x_height or 0 -- local already_reported = false for s=1,n do local ss, fs = okset[s], loaded[s] if not fs then -- skip, error elseif add_optional and ss.optional then -- skip, redundant else local newparameters = fs.parameters if not newparameters then report_virtual("no parameters set in font %a",name) elseif ss.extension then mathparameters.math_x_height = newparameters.x_height or 0 -- math_x_height : height of x mathparameters.default_rule_thickness = newparameters[ 8] or 0 -- default_rule_thickness : thickness of \over bars mathparameters.big_op_spacing1 = newparameters[ 9] or 0 -- big_op_spacing1 : minimum clearance above a displayed op mathparameters.big_op_spacing2 = newparameters[10] or 0 -- big_op_spacing2 : minimum clearance below a displayed op mathparameters.big_op_spacing3 = newparameters[11] or 0 -- big_op_spacing3 : minimum baselineskip above displayed op mathparameters.big_op_spacing4 = newparameters[12] or 0 -- big_op_spacing4 : minimum baselineskip below displayed op mathparameters.big_op_spacing5 = newparameters[13] or 0 -- big_op_spacing5 : padding above and below displayed limits -- report_virtual("loading and virtualizing font %a at size %p, setting ex parameters",name,size) elseif ss.parameters then mathparameters.x_height = newparameters.x_height or mathparameters.x_height mathparameters.x_height = mathparameters.x_height or fp.x_height or 0 -- x_height : height of x mathparameters.num1 = newparameters[ 8] or 0 -- num1 : numerator shift-up in display styles mathparameters.num2 = newparameters[ 9] or 0 -- num2 : numerator shift-up in non-display, non-\atop mathparameters.num3 = newparameters[10] or 0 -- num3 : numerator shift-up in non-display \atop mathparameters.denom1 = newparameters[11] or 0 -- denom1 : denominator shift-down in display styles mathparameters.denom2 = newparameters[12] or 0 -- denom2 : denominator shift-down in non-display styles mathparameters.sup1 = newparameters[13] or 0 -- sup1 : superscript shift-up in uncramped display style mathparameters.sup2 = newparameters[14] or 0 -- sup2 : superscript shift-up in uncramped non-display mathparameters.sup3 = newparameters[15] or 0 -- sup3 : superscript shift-up in cramped styles mathparameters.sub1 = newparameters[16] or 0 -- sub1 : subscript shift-down if superscript is absent mathparameters.sub2 = newparameters[17] or 0 -- sub2 : subscript shift-down if superscript is present mathparameters.sup_drop = newparameters[18] or 0 -- sup_drop : superscript baseline below top of large box mathparameters.sub_drop = newparameters[19] or 0 -- sub_drop : subscript baseline below bottom of large box mathparameters.delim1 = newparameters[20] or 0 -- delim1 : size of \atopwithdelims delimiters in display styles mathparameters.delim2 = newparameters[21] or 0 -- delim2 : size of \atopwithdelims delimiters in non-displays mathparameters.axis_height = newparameters[22] or 0 -- axis_height : height of fraction lines above the baseline -- report_virtual("loading and virtualizing font %a at size %p, setting sy parameters",name,size) end local vectorname = ss.vector if vectorname then local offset = 0xFF000 local vector = mathencodings[vectorname] local rotcev = reverse[vectorname] local isextension = ss.extension if vector and rotcev then local fc, fd, si = fs.characters, fs.descriptions, shared[s] local skewchar = ss.skewchar for unicode, index in next, vector do local fci = fc[index] if not fci then local fontname = fs.properties.name or "unknown" local rf = reported[fontname] if not rf then rf = { } reported[fontname] = rf end local rv = rf[vectorname] if not rv then rv = { } rf[vectorname] = rv end local ru = rv[unicode] if not ru then if trace_virtual then report_virtual("unicode slot %U has no index %H in vector %a for font %a",unicode,index,vectorname,fontname) elseif not already_reported then report_virtual("the mapping is incomplete for %a at %p",name,size) already_reported = true end rv[unicode] = true end else local ref = si[index] if not ref then ref = { { 'slot', s, index } } si[index] = ref end local kerns = fci.kerns local width = fci.width local italic = fci.italic if italic and italic > 0 then -- int_a^b if isextension then width = width + italic -- for obscure reasons the integral as a width + italic correction end end if kerns then local krn = { } for k, v in next, kerns do -- kerns is sparse local rk = rotcev[k] if rk then krn[rk] = v -- kerns[k] end end if not next(krn) then krn = nil end local t = { width = width, height = fci.height, depth = fci.depth, italic = italic, kerns = krn, commands = ref, } if skewchar then local k = kerns[skewchar] if k then t.top_accent = width/2 + k end end characters[unicode] = t else characters[unicode] = { width = width, height = fci.height, depth = fci.depth, italic = italic, commands = ref, } end end end if isextension then -- todo: if multiple ex, then 256 offsets per instance local extension = mathencodings["large-to-small"] local variants_done = fs.variants_done for index, fci in next, fc do -- the raw ex file if type(index) == "number" then local ref = si[index] if not ref then ref = { { 'slot', s, index } } si[index] = ref end local italic = fci.italic local t = { width = fci.width, height = fci.height, depth = fci.depth, italic = italic, commands = ref, } local n = fci.next if n then t.next = offset + n elseif variants_done then local vv = fci.vert_variants if vv then t.vert_variants = vv end local hv = fci.horiz_variants if hv then t.horiz_variants = hv end else local vv = fci.vert_variants if vv then for i=1,#vv do local vvi = vv[i] vvi.glyph = vvi.glyph + offset end t.vert_variants = vv end local hv = fci.horiz_variants if hv then for i=1,#hv do local hvi = hv[i] hvi.glyph = hvi.glyph + offset end t.horiz_variants = hv end end characters[offset + index] = t end end fs.variants_done = true for unicode, index in next, extension do local cu = characters[unicode] if cu then cu.next = offset + index else local fci = fc[index] if not fci then -- do nothing else -- probably never entered local ref = si[index] if not ref then ref = { { 'slot', s, index } } si[index] = ref end local kerns = fci.kerns if kerns then local krn = { } -- for k=1,#kerns do -- krn[offset + k] = kerns[k] -- end for k, v in next, kerns do -- is kerns sparse? krn[offset + k] = v end characters[unicode] = { width = fci.width, height = fci.height, depth = fci.depth, italic = fci.italic, commands = ref, kerns = krn, next = offset + index, } else characters[unicode] = { width = fci.width, height = fci.height, depth = fci.depth, italic = fci.italic, commands = ref, next = offset + index, } end end end end end else report_virtual("error in loading %a, problematic vector %a",name,vectorname) end end mathematics.extras.copy(main) --not needed here (yet) end end -- fontlist[#fontlist+1] = { id = font.nextid(), size = size, } -- main.mathparameters = mathparameters -- still traditional ones vfmath.addmissing(main,#fontlist,size) mathematics.addfallbacks(main) -- main.properties.math_is_scaled = true -- signal fonts.constructors.assignmathparameters(main,main) -- main.MathConstants = main.mathparameters -- we directly pass it to TeX (bypasses the scaler) so this is needed -- if trace_virtual or trace_timings then report_virtual("loading and virtualizing font %a at size %p took %0.3f seconds",name,size,os.clock()-start) end -- return main end function mathematics.makefont(name,set,goodies) fonts.definers.methods.variants[name] = function(specification) return vfmath.define(specification,set,goodies) end end -- helpers function vfmath.setletters(font_encoding, name, uppercase, lowercase) local enc = font_encoding[name] for i = 0,25 do enc[uppercase+i] = i + 0x41 enc[lowercase+i] = i + 0x61 end end function vfmath.setdigits(font_encoding, name, digits) local enc = font_encoding[name] for i = 0,9 do enc[digits+i] = i + 0x30 end end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ttv.lua0000644000175000017500000007512512130411274024145 0ustar norbertnorbertif not modules then modules = { } end modules ['math-ttv'] = { version = 1.001, comment = "traditional tex vectors, companion to math-vfu.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } local vfmath = fonts.handlers.vf.math local setletters = vfmath.setletters local setdigits = vfmath.setdigits local mathencodings = fonts.encodings.math -- varphi is part of the alphabet, contrary to the other var*s' mathencodings["large-to-small"] = { [0x00028] = 0x00, -- ( [0x00029] = 0x01, -- ) [0x0005B] = 0x02, -- [ [0x0005D] = 0x03, -- ] [0x0230A] = 0x04, -- lfloor [0x0230B] = 0x05, -- rfloor [0x02308] = 0x06, -- lceil [0x02309] = 0x07, -- rceil [0x0007B] = 0x08, -- { [0x0007D] = 0x09, -- } [0x027E8] = 0x0A, -- < [0x027E9] = 0x0B, -- > [0x0007C] = 0x0C, -- | -- [0x0] = 0x0D, -- lVert rVert Vert -- [0x0002F] = 0x0E, -- / [0x0005C] = 0x0F, -- \ -- [0x0] = 0x3A, -- lgroup -- [0x0] = 0x3B, -- rgroup -- [0x0] = 0x3C, -- arrowvert -- [0x0] = 0x3D, -- Arrowvert [0x02195] = 0x3F, -- updownarrow -- [0x0] = 0x40, -- lmoustache -- [0x0] = 0x41, -- rmoustache [0x0221A] = 0x70, -- sqrt [0x021D5] = 0x77, -- Updownarrow [0x02191] = 0x78, -- uparrow [0x02193] = 0x79, -- downarrow [0x021D1] = 0x7E, -- Uparrow [0x021D3] = 0x7F, -- Downarrow [0x0220F] = 0x59, -- prod [0x02210] = 0x61, -- coprod [0x02211] = 0x58, -- sum [0x0222B] = 0x5A, -- intop [0x0222E] = 0x49, -- ointop -- [0xFE302] = 0x62, -- widehat -- [0xFE303] = 0x65, -- widetilde [0x00302] = 0x62, -- widehat [0x00303] = 0x65, -- widetilde [0x022C0] = 0x5E, -- bigwedge [0x022C1] = 0x5F, -- bigvee [0x022C2] = 0x5C, -- bigcap [0x022C3] = 0x5B, -- bigcup [0x02044] = 0x0E, -- / } -- Beware: these are (in cm/lm) below the baseline due to limitations -- in the tfm format bu the engien (combined with the mathclass) takes -- care of it. If we need them in textmode, we should make them virtual -- and move them up but we're in no hurry with that. mathencodings["tex-ex"] = { [0x0220F] = 0x51, -- prod [0x02210] = 0x60, -- coprod [0x02211] = 0x50, -- sum [0x0222B] = 0x52, -- intop [0x0222E] = 0x48, -- ointop [0x022C0] = 0x56, -- bigwedge [0x022C1] = 0x57, -- bigvee [0x022C2] = 0x54, -- bigcap [0x022C3] = 0x53, -- bigcup [0x02A00] = 0x4A, -- bigodot -- fixed BJ [0x02A01] = 0x4C, -- bigoplus [0x02A02] = 0x4E, -- bigotimes -- [0x02A03] = , -- bigudot -- [0x02A04] = 0x55, -- biguplus [0x02A06] = 0x46, -- bigsqcup } -- only math stuff is needed, since we always use an lm or gyre -- font as main font mathencodings["tex-mr"] = { [0x00393] = 0x00, -- Gamma [0x00394] = 0x01, -- Delta [0x00398] = 0x02, -- Theta [0x0039B] = 0x03, -- Lambda [0x0039E] = 0x04, -- Xi [0x003A0] = 0x05, -- Pi [0x003A3] = 0x06, -- Sigma [0x003A5] = 0x07, -- Upsilon [0x003A6] = 0x08, -- Phi [0x003A8] = 0x09, -- Psi [0x003A9] = 0x0A, -- Omega -- [0x00060] = 0x12, -- [math]grave -- [0x000B4] = 0x13, -- [math]acute -- [0x002C7] = 0x14, -- [math]check -- [0x002D8] = 0x15, -- [math]breve -- [0x000AF] = 0x16, -- [math]bar -- [0x00021] = 0x21, -- ! -- [0x00028] = 0x28, -- ( -- [0x00029] = 0x29, -- ) -- [0x0002B] = 0x2B, -- + -- [0x0002F] = 0x2F, -- / -- [0x0003A] = 0x3A, -- : -- [0x02236] = 0x3A, -- colon -- [0x0003B] = 0x3B, -- ; -- [0x0003C] = 0x3C, -- < -- [0x0003D] = 0x3D, -- = -- [0x0003E] = 0x3E, -- > -- [0x0003F] = 0x3F, -- ? [0x00391] = 0x41, -- Alpha [0x00392] = 0x42, -- Beta [0x02145] = 0x44, [0x00395] = 0x45, -- Epsilon [0x00397] = 0x48, -- Eta [0x00399] = 0x49, -- Iota [0x0039A] = 0x4B, -- Kappa [0x0039C] = 0x4D, -- Mu [0x0039D] = 0x4E, -- Nu [0x0039F] = 0x4F, -- Omicron [0x003A1] = 0x52, -- Rho [0x003A4] = 0x54, -- Tau [0x003A7] = 0x58, -- Chi [0x00396] = 0x5A, -- Zeta -- [0x0005B] = 0x5B, -- [ -- [0x0005D] = 0x5D, -- ] -- [0x0005E] = 0x5E, -- [math]hat -- the text one [0x00302] = 0x5E, -- [math]hat -- the real math one -- [0x002D9] = 0x5F, -- [math]dot [0x02146] = 0x64, [0x02147] = 0x65, -- [0x002DC] = 0x7E, -- [math]tilde -- the text one [0x00303] = 0x7E, -- [math]tilde -- the real one -- [0x000A8] = 0x7F, -- [math]ddot } mathencodings["tex-mr-missing"] = { [0x02236] = 0x3A, -- colon } mathencodings["tex-mi"] = { [0x1D6E4] = 0x00, -- Gamma [0x1D6E5] = 0x01, -- Delta [0x1D6E9] = 0x02, -- Theta [0x1D6F3] = 0x02, -- varTheta (not present in TeX) [0x1D6EC] = 0x03, -- Lambda [0x1D6EF] = 0x04, -- Xi [0x1D6F1] = 0x05, -- Pi [0x1D6F4] = 0x06, -- Sigma [0x1D6F6] = 0x07, -- Upsilon [0x1D6F7] = 0x08, -- Phi [0x1D6F9] = 0x09, -- Psi [0x1D6FA] = 0x0A, -- Omega [0x1D6FC] = 0x0B, -- alpha [0x1D6FD] = 0x0C, -- beta [0x1D6FE] = 0x0D, -- gamma [0x1D6FF] = 0x0E, -- delta [0x1D716] = 0x0F, -- epsilon TODO: 1D716 [0x1D701] = 0x10, -- zeta [0x1D702] = 0x11, -- eta [0x1D703] = 0x12, -- theta TODO: 1D703 [0x1D704] = 0x13, -- iota [0x1D705] = 0x14, -- kappa [0x1D718] = 0x14, -- varkappa, not in tex fonts [0x1D706] = 0x15, -- lambda [0x1D707] = 0x16, -- mu [0x1D708] = 0x17, -- nu [0x1D709] = 0x18, -- xi [0x1D70B] = 0x19, -- pi [0x1D70C] = 0x1A, -- rho [0x1D70E] = 0x1B, -- sigma [0x1D70F] = 0x1C, -- tau [0x1D710] = 0x1D, -- upsilon [0x1D719] = 0x1E, -- phi [0x1D712] = 0x1F, -- chi [0x1D713] = 0x20, -- psi [0x1D714] = 0x21, -- omega [0x1D700] = 0x22, -- varepsilon (the other way around) [0x1D717] = 0x23, -- vartheta [0x1D71B] = 0x24, -- varpi [0x1D71A] = 0x25, -- varrho [0x1D70D] = 0x26, -- varsigma [0x1D711] = 0x27, -- varphi (the other way around) [0x021BC] = 0x28, -- leftharpoonup [0x021BD] = 0x29, -- leftharpoondown [0x021C0] = 0x2A, -- rightharpoonup [0x021C1] = 0x2B, -- rightharpoondown [0xFE322] = 0x2C, -- lhook (hook for combining arrows) [0xFE323] = 0x2D, -- rhook (hook for combining arrows) [0x025B7] = 0x2E, -- triangleright : cf lmmath / BJ [0x025C1] = 0x2F, -- triangleleft : cf lmmath / BJ [0x022B3] = 0x2E, -- triangleright : cf lmmath this a cramped triangles / BJ / see * [0x022B2] = 0x2F, -- triangleleft : cf lmmath this a cramped triangles / BJ / see * -- [0x00041] = 0x30, -- 0 -- [0x00041] = 0x31, -- 1 -- [0x00041] = 0x32, -- 2 -- [0x00041] = 0x33, -- 3 -- [0x00041] = 0x34, -- 4 -- [0x00041] = 0x35, -- 5 -- [0x00041] = 0x36, -- 6 -- [0x00041] = 0x37, -- 7 -- [0x00041] = 0x38, -- 8 -- [0x00041] = 0x39, -- 9 --~ [0x0002E] = 0x3A, -- . [0x0002C] = 0x3B, -- , [0x0003C] = 0x3C, -- < -- [0x0002F] = 0x3D, -- /, slash, solidus [0x02044] = 0x3D, -- / AM: Not sure [0x0003E] = 0x3E, -- > [0x022C6] = 0x3F, -- star [0x02202] = 0x40, -- partial -- [0x0266D] = 0x5B, -- flat [0x0266E] = 0x5C, -- natural [0x0266F] = 0x5D, -- sharp [0x02323] = 0x5E, -- smile [0x02322] = 0x5F, -- frown [0x02113] = 0x60, -- ell -- [0x1D6A4] = 0x7B, -- imath (TODO: also 0131) [0x1D6A5] = 0x7C, -- jmath (TODO: also 0237) [0x02118] = 0x7D, -- wp [0x020D7] = 0x7E, -- vec (TODO: not sure) -- 0x7F, -- (no idea what that could be) } mathencodings["tex-it"] = { -- [0x1D434] = 0x41, -- A [0x1D6E2] = 0x41, -- Alpha -- [0x1D435] = 0x42, -- B [0x1D6E3] = 0x42, -- Beta -- [0x1D436] = 0x43, -- C -- [0x1D437] = 0x44, -- D -- [0x1D438] = 0x45, -- E [0x1D6E6] = 0x45, -- Epsilon -- [0x1D439] = 0x46, -- F -- [0x1D43A] = 0x47, -- G -- [0x1D43B] = 0x48, -- H [0x1D6E8] = 0x48, -- Eta -- [0x1D43C] = 0x49, -- I [0x1D6EA] = 0x49, -- Iota -- [0x1D43D] = 0x4A, -- J -- [0x1D43E] = 0x4B, -- K [0x1D6EB] = 0x4B, -- Kappa -- [0x1D43F] = 0x4C, -- L -- [0x1D440] = 0x4D, -- M [0x1D6ED] = 0x4D, -- Mu -- [0x1D441] = 0x4E, -- N [0x1D6EE] = 0x4E, -- Nu -- [0x1D442] = 0x4F, -- O [0x1D6F0] = 0x4F, -- Omicron -- [0x1D443] = 0x50, -- P [0x1D6F2] = 0x50, -- Rho -- [0x1D444] = 0x51, -- Q -- [0x1D445] = 0x52, -- R -- [0x1D446] = 0x53, -- S -- [0x1D447] = 0x54, -- T [0x1D6F5] = 0x54, -- Tau -- [0x1D448] = 0x55, -- U -- [0x1D449] = 0x56, -- V -- [0x1D44A] = 0x57, -- W -- [0x1D44B] = 0x58, -- X [0x1D6F8] = 0x58, -- Chi -- [0x1D44C] = 0x59, -- Y -- [0x1D44D] = 0x5A, -- Z -- -- [0x1D44E] = 0x61, -- a -- [0x1D44F] = 0x62, -- b -- [0x1D450] = 0x63, -- c -- [0x1D451] = 0x64, -- d -- [0x1D452] = 0x65, -- e -- [0x1D453] = 0x66, -- f -- [0x1D454] = 0x67, -- g -- [0x1D455] = 0x68, -- h [0x0210E] = 0x68, -- Planck constant (h) -- [0x1D456] = 0x69, -- i -- [0x1D457] = 0x6A, -- j -- [0x1D458] = 0x6B, -- k -- [0x1D459] = 0x6C, -- l -- [0x1D45A] = 0x6D, -- m -- [0x1D45B] = 0x6E, -- n -- [0x1D45C] = 0x6F, -- o [0x1D70A] = 0x6F, -- omicron -- [0x1D45D] = 0x70, -- p -- [0x1D45E] = 0x71, -- q -- [0x1D45F] = 0x72, -- r -- [0x1D460] = 0x73, -- s -- [0x1D461] = 0x74, -- t -- [0x1D462] = 0x75, -- u -- [0x1D463] = 0x76, -- v -- [0x1D464] = 0x77, -- w -- [0x1D465] = 0x78, -- x -- [0x1D466] = 0x79, -- y -- [0x1D467] = 0x7A, -- z } mathencodings["tex-ss"] = { } mathencodings["tex-tt"] = { } mathencodings["tex-bf"] = { } mathencodings["tex-bi"] = { } mathencodings["tex-fraktur"] = { } mathencodings["tex-fraktur-bold"] = { } mathencodings["tex-sy"] = { [0x0002D] = 0x00, -- - [0x02212] = 0x00, -- - -- [0x02201] = 0x00, -- complement -- [0x02206] = 0x00, -- increment -- [0x02204] = 0x00, -- not exists -- [0x000B7] = 0x01, -- cdot [0x022C5] = 0x01, -- cdot [0x000D7] = 0x02, -- times [0x0002A] = 0x03, -- * [0x02217] = 0x03, -- * [0x000F7] = 0x04, -- div [0x022C4] = 0x05, -- diamond [0x000B1] = 0x06, -- pm [0x02213] = 0x07, -- mp [0x02295] = 0x08, -- oplus [0x02296] = 0x09, -- ominus [0x02297] = 0x0A, -- otimes [0x02298] = 0x0B, -- oslash [0x02299] = 0x0C, -- odot [0x025EF] = 0x0D, -- bigcirc, Orb (either 25EF or 25CB) -- todo [0x02218] = 0x0E, -- circ [0x02219] = 0x0F, -- bullet [0x02022] = 0x0F, -- bullet [0x0224D] = 0x10, -- asymp [0x02261] = 0x11, -- equiv [0x02286] = 0x12, -- subseteq [0x02287] = 0x13, -- supseteq [0x02264] = 0x14, -- leq [0x02265] = 0x15, -- geq [0x02AAF] = 0x16, -- preceq -- [0x0227C] = 0x16, -- preceq, AM:No see 2AAF [0x02AB0] = 0x17, -- succeq -- [0x0227D] = 0x17, -- succeq, AM:No see 2AB0 [0x0223C] = 0x18, -- sim [0x02248] = 0x19, -- approx [0x02282] = 0x1A, -- subset [0x02283] = 0x1B, -- supset [0x0226A] = 0x1C, -- ll [0x0226B] = 0x1D, -- gg [0x0227A] = 0x1E, -- prec [0x0227B] = 0x1F, -- succ [0x02190] = 0x20, -- leftarrow [0x02192] = 0x21, -- rightarrow --~ [0xFE190] = 0x20, -- leftarrow --~ [0xFE192] = 0x21, -- rightarrow [0x02191] = 0x22, -- uparrow [0x02193] = 0x23, -- downarrow [0x02194] = 0x24, -- leftrightarrow [0x02197] = 0x25, -- nearrow [0x02198] = 0x26, -- searrow [0x02243] = 0x27, -- simeq [0x021D0] = 0x28, -- Leftarrow [0x021D2] = 0x29, -- Rightarrow [0x021D1] = 0x2A, -- Uparrow [0x021D3] = 0x2B, -- Downarrow [0x021D4] = 0x2C, -- Leftrightarrow [0x02196] = 0x2D, -- nwarrow [0x02199] = 0x2E, -- swarrow [0x0221D] = 0x2F, -- propto [0x02032] = 0x30, -- prime [0x0221E] = 0x31, -- infty [0x02208] = 0x32, -- in [0x0220B] = 0x33, -- ni [0x025B3] = 0x34, -- triangle, bigtriangleup [0x025BD] = 0x35, -- bigtriangledown [0x00338] = 0x36, -- not -- 0x37, -- (beginning of arrow) [0x02200] = 0x38, -- forall [0x02203] = 0x39, -- exists [0x000AC] = 0x3A, -- neg, lnot [0x02205] = 0x3B, -- empty set [0x0211C] = 0x3C, -- Re [0x02111] = 0x3D, -- Im [0x022A4] = 0x3E, -- top [0x022A5] = 0x3F, -- bot, perp [0x02135] = 0x40, -- aleph [0x1D49C] = 0x41, -- script A [0x0212C] = 0x42, -- script B [0x1D49E] = 0x43, -- script C [0x1D49F] = 0x44, -- script D [0x02130] = 0x45, -- script E [0x02131] = 0x46, -- script F [0x1D4A2] = 0x47, -- script G [0x0210B] = 0x48, -- script H [0x02110] = 0x49, -- script I [0x1D4A5] = 0x4A, -- script J [0x1D4A6] = 0x4B, -- script K [0x02112] = 0x4C, -- script L [0x02133] = 0x4D, -- script M [0x1D4A9] = 0x4E, -- script N [0x1D4AA] = 0x4F, -- script O [0x1D4AB] = 0x50, -- script P [0x1D4AC] = 0x51, -- script Q [0x0211B] = 0x52, -- script R [0x1D4AE] = 0x53, -- script S [0x1D4AF] = 0x54, -- script T [0x1D4B0] = 0x55, -- script U [0x1D4B1] = 0x56, -- script V [0x1D4B2] = 0x57, -- script W [0x1D4B3] = 0x58, -- script X [0x1D4B4] = 0x59, -- script Y [0x1D4B5] = 0x5A, -- script Z [0x0222A] = 0x5B, -- cup [0x02229] = 0x5C, -- cap [0x0228E] = 0x5D, -- uplus [0x02227] = 0x5E, -- wedge, land [0x02228] = 0x5F, -- vee, lor [0x022A2] = 0x60, -- vdash [0x022A3] = 0x61, -- dashv [0x0230A] = 0x62, -- lfloor [0x0230B] = 0x63, -- rfloor [0x02308] = 0x64, -- lceil [0x02309] = 0x65, -- rceil [0x0007B] = 0x66, -- {, lbrace [0x0007D] = 0x67, -- }, rbrace [0x027E8] = 0x68, -- <, langle [0x027E9] = 0x69, -- >, rangle [0x0007C] = 0x6A, -- |, mid, lvert, rvert [0x02225] = 0x6B, -- parallel -- [0x0 ] = 0x00, -- Vert, lVert, rVert, arrowvert, Arrowvert [0x02195] = 0x6C, -- updownarrow [0x021D5] = 0x6D, -- Updownarrow [0x0005C] = 0x6E, -- \, backslash, setminus [0x02216] = 0x6E, -- setminus [0x02240] = 0x6F, -- wr [0x0221A] = 0x70, -- sqrt. AM: Check surd?? [0x02A3F] = 0x71, -- amalg [0x1D6FB] = 0x72, -- nabla -- [0x0222B] = 0x73, -- smallint (TODO: what about intop?) [0x02294] = 0x74, -- sqcup [0x02293] = 0x75, -- sqcap [0x02291] = 0x76, -- sqsubseteq [0x02292] = 0x77, -- sqsupseteq [0x000A7] = 0x78, -- S [0x02020] = 0x79, -- dagger, dag [0x02021] = 0x7A, -- ddagger, ddag [0x000B6] = 0x7B, -- P [0x02663] = 0x7C, -- clubsuit [0x02662] = 0x7D, -- diamondsuit [0x02661] = 0x7E, -- heartsuit [0x02660] = 0x7F, -- spadesuit [0xFE321] = 0x37, -- mapstochar [0xFE325] = 0x30, -- prime 0x02032 } -- The names in masm10.enc can be trusted best and are shown in the first -- column, while in the second column we show the tex/ams names. As usual -- it costs hours to figure out such a table. mathencodings["tex-ma"] = { [0x022A1] = 0x00, -- squaredot \boxdot [0x0229E] = 0x01, -- squareplus \boxplus [0x022A0] = 0x02, -- squaremultiply \boxtimes [0x025A1] = 0x03, -- square \square \Box [0x025A0] = 0x04, -- squaresolid \blacksquare [0x025AA] = 0x05, -- squaresmallsolid \centerdot [0x022C4] = 0x06, -- diamond \Diamond \lozenge [0x02666] = 0x07, -- diamondsolid \blacklozenge [0x021BB] = 0x08, -- clockwise \circlearrowright [0x021BA] = 0x09, -- anticlockwise \circlearrowleft [0x021CC] = 0x0A, -- harpoonleftright \rightleftharpoons [0x021CB] = 0x0B, -- harpoonrightleft \leftrightharpoons [0x0229F] = 0x0C, -- squareminus \boxminus [0x022A9] = 0x0D, -- forces \Vdash [0x022AA] = 0x0E, -- forcesbar \Vvdash [0x022A8] = 0x0F, -- satisfies \vDash [0x021A0] = 0x10, -- dblarrowheadright \twoheadrightarrow [0x0219E] = 0x11, -- dblarrowheadleft \twoheadleftarrow [0x021C7] = 0x12, -- dblarrowleft \leftleftarrows [0x021C9] = 0x13, -- dblarrowright \rightrightarrows [0x021C8] = 0x14, -- dblarrowup \upuparrows [0x021CA] = 0x15, -- dblarrowdwn \downdownarrows [0x021BE] = 0x16, -- harpoonupright \upharpoonright \restriction [0x021C2] = 0x17, -- harpoondownright \downharpoonright [0x021BF] = 0x18, -- harpoonupleft \upharpoonleft [0x021C3] = 0x19, -- harpoondownleft \downharpoonleft [0x021A3] = 0x1A, -- arrowtailright \rightarrowtail [0x021A2] = 0x1B, -- arrowtailleft \leftarrowtail [0x021C6] = 0x1C, -- arrowparrleftright \leftrightarrows -- [0x021C5] = 0x00, -- \updownarrows (missing in lm) [0x021C4] = 0x1D, -- arrowparrrightleft \rightleftarrows [0x021B0] = 0x1E, -- shiftleft \Lsh [0x021B1] = 0x1F, -- shiftright \Rsh [0x021DD] = 0x20, -- squiggleright \leadsto \rightsquigarrow [0x021AD] = 0x21, -- squiggleleftright \leftrightsquigarrow [0x021AB] = 0x22, -- curlyleft \looparrowleft [0x021AC] = 0x23, -- curlyright \looparrowright [0x02257] = 0x24, -- circleequal \circeq [0x0227F] = 0x25, -- followsorequal \succsim [0x02273] = 0x26, -- greaterorsimilar \gtrsim [0x02A86] = 0x27, -- greaterorapproxeql \gtrapprox [0x022B8] = 0x28, -- multimap \multimap [0x02234] = 0x29, -- therefore \therefore [0x02235] = 0x2A, -- because \because [0x02251] = 0x2B, -- equalsdots \Doteq \doteqdot [0x0225C] = 0x2C, -- defines \triangleq [0x0227E] = 0x2D, -- precedesorequal \precsim [0x02272] = 0x2E, -- lessorsimilar \lesssim [0x02A85] = 0x2F, -- lessorapproxeql \lessapprox [0x02A95] = 0x30, -- equalorless \eqslantless [0x02A96] = 0x31, -- equalorgreater \eqslantgtr [0x022DE] = 0x32, -- equalorprecedes \curlyeqprec [0x022DF] = 0x33, -- equalorfollows \curlyeqsucc [0x0227C] = 0x34, -- precedesorcurly \preccurlyeq [0x02266] = 0x35, -- lessdblequal \leqq [0x02A7D] = 0x36, -- lessorequalslant \leqslant [0x02276] = 0x37, -- lessorgreater \lessgtr [0x02035] = 0x38, -- primereverse \backprime -- [0x0] = 0x39, -- axisshort \dabar [0x02253] = 0x3A, -- equaldotrightleft \risingdotseq [0x02252] = 0x3B, -- equaldotleftright \fallingdotseq [0x0227D] = 0x3C, -- followsorcurly \succcurlyeq [0x02267] = 0x3D, -- greaterdblequal \geqq [0x02A7E] = 0x3E, -- greaterorequalslant \geqslant [0x02277] = 0x3F, -- greaterorless \gtrless [0x0228F] = 0x40, -- squareimage \sqsubset [0x02290] = 0x41, -- squareoriginal \sqsupset -- wrong: see ** -- [0x022B3] = 0x42, -- triangleright \rhd \vartriangleright -- [0x022B2] = 0x43, -- triangleleft \lhd \vartriangleleft -- cf lm [0x022B5] = 0x44, -- trianglerightequal \unrhd \trianglerighteq [0x022B4] = 0x45, -- triangleleftequal \unlhd \trianglelefteq -- [0x02605] = 0x46, -- star \bigstar [0x0226C] = 0x47, -- between \between [0x025BC] = 0x48, -- triangledownsld \blacktriangledown [0x025B6] = 0x49, -- trianglerightsld \blacktriangleright [0x025C0] = 0x4A, -- triangleleftsld \blacktriangleleft -- [0x0] = 0x4B, -- arrowaxisright -- [0x0] = 0x4C, -- arrowaxisleft [0x025B2] = 0x4D, -- triangle \triangleup \vartriangle [0x025B2] = 0x4E, -- trianglesolid \blacktriangle [0x025BD] = 0x4F, -- triangleinv \triangledown [0x02256] = 0x50, -- ringinequal \eqcirc [0x022DA] = 0x51, -- lessequalgreater \lesseqgtr [0x022DB] = 0x52, -- greaterlessequal \gtreqless [0x02A8B] = 0x53, -- lessdbleqlgreater \lesseqqgtr [0x02A8C] = 0x54, -- greaterdbleqlless \gtreqqless [0x000A5] = 0x55, -- Yen \yen [0x021DB] = 0x56, -- arrowtripleright \Rrightarrow [0x021DA] = 0x57, -- arrowtripleleft \Lleftarrow [0x02713] = 0x58, -- check \checkmark [0x022BB] = 0x59, -- orunderscore \veebar [0x022BC] = 0x5A, -- nand \barwedge [0x02306] = 0x5B, -- perpcorrespond \doublebarwedge [0x02220] = 0x5C, -- angle \angle [0x02221] = 0x5D, -- measuredangle \measuredangle [0x02222] = 0x5E, -- sphericalangle \sphericalangle -- [0x0] = 0x5F, -- proportional \varpropto -- [0x0] = 0x60, -- smile \smallsmile -- [0x0] = 0x61, -- frown \smallfrown [0x022D0] = 0x62, -- subsetdbl \Subset [0x022D1] = 0x63, -- supersetdbl \Supset [0x022D3] = 0x64, -- uniondbl \doublecup \Cup [0x022D2] = 0x65, -- intersectiondbl \doublecap \Cap [0x022CF] = 0x66, -- uprise \curlywedge [0x022CE] = 0x67, -- downfall \curlyvee [0x022CB] = 0x68, -- multiopenleft \leftthreetimes [0x022CC] = 0x69, -- multiopenright \rightthreetimes [0x02AC5] = 0x6A, -- subsetdblequal \subseteqq [0x02AC6] = 0x6B, -- supersetdblequal \supseteqq [0x0224F] = 0x6C, -- difference \bumpeq [0x0224E] = 0x6D, -- geomequivalent \Bumpeq [0x022D8] = 0x6E, -- muchless \lll \llless [0x022D9] = 0x6F, -- muchgreater \ggg \gggtr [0x0231C] = 0x70, -- rightanglenw \ulcorner [0x0231D] = 0x71, -- rightanglene \urcorner [0x024C7] = 0x72, -- circleR \circledR [0x024C8] = 0x73, -- circleS \circledS [0x022D4] = 0x74, -- fork \pitchfork [0x02214] = 0x75, -- dotplus \dotplus [0x0223D] = 0x76, -- revsimilar \backsim [0x022CD] = 0x77, -- revasymptequal \backsimeq -- AM: Check this! I mapped it to simeq. [0x0231E] = 0x78, -- rightanglesw \llcorner [0x0231F] = 0x79, -- rightanglese \lrcorner [0x02720] = 0x7A, -- maltesecross \maltese [0x02201] = 0x7B, -- complement \complement [0x022BA] = 0x7C, -- intercal \intercal [0x0229A] = 0x7D, -- circlering \circledcirc [0x0229B] = 0x7E, -- circleasterisk \circledast [0x0229D] = 0x7F, -- circleminus \circleddash } mathencodings["tex-mb"] = { -- [0x0] = 0x00, -- lessornotequal \lvertneqq -- [0x0] = 0x01, -- greaterornotequal \gvertneqq [0x02270] = 0x02, -- notlessequal \nleq [0x02271] = 0x03, -- notgreaterequal \ngeq [0x0226E] = 0x04, -- notless \nless [0x0226F] = 0x05, -- notgreater \ngtr [0x02280] = 0x06, -- notprecedes \nprec [0x02281] = 0x07, -- notfollows \nsucc [0x02268] = 0x08, -- lessornotdbleql \lneqq [0x02269] = 0x09, -- greaterornotdbleql \gneqq -- [0x0] = 0x0A, -- notlessorslnteql \nleqslant -- [0x0] = 0x0B, -- notgreaterorslnteql \ngeqslant [0x02A87] = 0x0C, -- lessnotequal \lneq [0x02A88] = 0x0D, -- greaternotequal \gneq -- [0x0] = 0x0E, -- notprecedesoreql \npreceq -- [0x0] = 0x0F, -- notfollowsoreql \nsucceq [0x022E8] = 0x10, -- precedeornoteqvlnt \precnsim [0x022E9] = 0x11, -- followornoteqvlnt \succnsim [0x022E6] = 0x12, -- lessornotsimilar \lnsim [0x022E7] = 0x13, -- greaterornotsimilar \gnsim -- [0x0] = 0x14, -- notlessdblequal \nleqq -- [0x0] = 0x15, -- notgreaterdblequal \ngeqq [0x02AB5] = 0x16, -- precedenotslnteql \precneqq [0x02AB6] = 0x17, -- follownotslnteql \succneqq [0x02AB9] = 0x18, -- precedenotdbleqv \precnapprox [0x02ABA] = 0x19, -- follownotdbleqv \succnapprox [0x02A89] = 0x1A, -- lessnotdblequal \lnapprox [0x02A8A] = 0x1B, -- greaternotdblequal \gnapprox [0x02241] = 0x1C, -- notsimilar \nsim [0x02247] = 0x1D, -- notapproxequal \ncong -- [0x0] = 0x1E, -- upslope \diagup -- [0x0] = 0x1F, -- downslope \diagdown -- [0x0] = 0x20, -- notsubsetoreql \varsubsetneq -- [0x0] = 0x21, -- notsupersetoreql \varsupsetneq -- [0x0] = 0x22, -- notsubsetordbleql \nsubseteqq -- [0x0] = 0x23, -- notsupersetordbleql \nsupseteqq [0x02ACB] = 0x24, -- subsetornotdbleql \subsetneqq [0x02ACC] = 0x25, -- supersetornotdbleql \supsetneqq -- [0x0] = 0x26, -- subsetornoteql \varsubsetneqq -- [0x0] = 0x27, -- supersetornoteql \varsupsetneqq [0x0228A] = 0x28, -- subsetnoteql \subsetneq [0x0228B] = 0x29, -- supersetnoteql \supsetneq [0x02288] = 0x2A, -- notsubseteql \nsubseteq [0x02289] = 0x2B, -- notsuperseteql \nsupseteq [0x02226] = 0x2C, -- notparallel \nparallel [0x02224] = 0x2D, -- notbar \nmid \ndivides -- [0x0] = 0x2E, -- notshortbar \nshortmid -- [0x0] = 0x2F, -- notshortparallel \nshortparallel [0x022AC] = 0x30, -- notturnstile \nvdash [0x022AE] = 0x31, -- notforces \nVdash [0x022AD] = 0x32, -- notsatisfies \nvDash [0x022AF] = 0x33, -- notforcesextra \nVDash [0x022ED] = 0x34, -- nottriangeqlright \ntrianglerighteq [0x022EC] = 0x35, -- nottriangeqlleft \ntrianglelefteq [0x022EA] = 0x36, -- nottriangleleft \ntriangleleft [0x022EB] = 0x37, -- nottriangleright \ntriangleright [0x0219A] = 0x38, -- notarrowleft \nleftarrow [0x0219B] = 0x39, -- notarrowright \nrightarrow [0x021CD] = 0x3A, -- notdblarrowleft \nLeftarrow [0x021CF] = 0x3B, -- notdblarrowright \nRightarrow [0x021CE] = 0x3C, -- notdblarrowboth \nLeftrightarrow [0x021AE] = 0x3D, -- notarrowboth \nleftrightarrow [0x022C7] = 0x3E, -- dividemultiply \divideontimes [0x02300] = 0x3F, -- diametersign \varnothing [0x02204] = 0x40, -- notexistential \nexists [0x1D538] = 0x41, -- A (blackboard A) [0x1D539] = 0x42, -- B [0x02102] = 0x43, -- C [0x1D53B] = 0x44, -- D [0x1D53C] = 0x45, -- E [0x1D53D] = 0x46, -- F [0x1D53E] = 0x47, -- G [0x0210D] = 0x48, -- H [0x1D540] = 0x49, -- I [0x1D541] = 0x4A, -- J [0x1D542] = 0x4B, -- K [0x1D543] = 0x4C, -- L [0x1D544] = 0x4D, -- M [0x02115] = 0x4E, -- N [0x1D546] = 0x4F, -- O [0x02119] = 0x50, -- P [0x0211A] = 0x51, -- Q [0x0211D] = 0x52, -- R [0x1D54A] = 0x53, -- S [0x1D54B] = 0x54, -- T [0x1D54C] = 0x55, -- U [0x1D54D] = 0x56, -- V [0x1D54E] = 0x57, -- W [0x1D54F] = 0x58, -- X [0x1D550] = 0x59, -- Y [0x02124] = 0x5A, -- Z (blackboard Z) [0x02132] = 0x60, -- finv \Finv [0x02141] = 0x61, -- fmir \Game -- [0x0] = 0x62, tildewide -- [0x0] = 0x63, tildewider -- [0x0] = 0x64, Finv -- [0x0] = 0x65, Gmir [0x02127] = 0x66, -- Omegainv \mho [0x000F0] = 0x67, -- eth \eth [0x02242] = 0x68, -- equalorsimilar \eqsim [0x02136] = 0x69, -- beth \beth [0x02137] = 0x6A, -- gimel \gimel [0x02138] = 0x6B, -- daleth \daleth [0x022D6] = 0x6C, -- lessdot \lessdot [0x022D7] = 0x6D, -- greaterdot \gtrdot [0x022C9] = 0x6E, -- multicloseleft \ltimes [0x022CA] = 0x6F, -- multicloseright \rtimes -- [0x0] = 0x70, -- barshort \shortmid -- [0x0] = 0x71, -- parallelshort \shortparallel -- [0x02216] = 0x72, -- integerdivide \smallsetminus (2216 already part of tex-sy -- [0x0] = 0x73, -- similar \thicksim -- [0x0] = 0x74, -- approxequal \thickapprox [0x0224A] = 0x75, -- approxorequal \approxeq [0x02AB8] = 0x76, -- followsorequal \succapprox [0x02AB7] = 0x77, -- precedesorequal \precapprox [0x021B6] = 0x78, -- archleftdown \curvearrowleft [0x021B7] = 0x79, -- archrightdown \curvearrowright [0x003DC] = 0x7A, -- Digamma \digamma [0x003F0] = 0x7B, -- kappa \varkappa [0x1D55C] = 0x7C, -- k \Bbbk (blackboard k) [0x0210F] = 0x7D, -- planckover2pi \hslash % 0x7D [0x00127] = 0x7E, -- planckover2pi1 \hbar % 0x7E [0x003F6] = 0x7F, -- epsiloninv \backepsilon } mathencodings["tex-mc"] = { -- this file has no tfm so it gets mapped in the private space [0xFE324] = "mapsfromchar", } mathencodings["tex-fraktur"] = { -- [0x1D504] = 0x41, -- A (fraktur A) -- [0x1D505] = 0x42, -- B [0x0212D] = 0x43, -- C -- [0x1D507] = 0x44, -- D -- [0x1D508] = 0x45, -- E -- [0x1D509] = 0x46, -- F -- [0x1D50A] = 0x47, -- G [0x0210C] = 0x48, -- H [0x02111] = 0x49, -- I -- [0x1D50D] = 0x4A, -- J -- [0x1D50E] = 0x4B, -- K -- [0x1D50F] = 0x4C, -- L -- [0x1D510] = 0x4D, -- M -- [0x1D511] = 0x4E, -- N -- [0x1D512] = 0x4F, -- O -- [0x1D513] = 0x50, -- P -- [0x1D514] = 0x51, -- Q [0x0211C] = 0x52, -- R -- [0x1D516] = 0x53, -- S -- [0x1D517] = 0x54, -- T -- [0x1D518] = 0x55, -- U -- [0x1D519] = 0x56, -- V -- [0x1D51A] = 0x57, -- W -- [0x1D51B] = 0x58, -- X -- [0x1D51C] = 0x59, -- Y [0x02128] = 0x5A, -- Z (fraktur Z) -- [0x1D51E] = 0x61, -- a (fraktur a) -- [0x1D51F] = 0x62, -- b -- [0x1D520] = 0x63, -- c -- [0x1D521] = 0x64, -- d -- [0x1D522] = 0x65, -- e -- [0x1D523] = 0x66, -- f -- [0x1D524] = 0x67, -- g -- [0x1D525] = 0x68, -- h -- [0x1D526] = 0x69, -- i -- [0x1D527] = 0x6A, -- j -- [0x1D528] = 0x6B, -- k -- [0x1D529] = 0x6C, -- l -- [0x1D52A] = 0x6D, -- m -- [0x1D52B] = 0x6E, -- n -- [0x1D52C] = 0x6F, -- o -- [0x1D52D] = 0x70, -- p -- [0x1D52E] = 0x71, -- q -- [0x1D52F] = 0x72, -- r -- [0x1D530] = 0x73, -- s -- [0x1D531] = 0x74, -- t -- [0x1D532] = 0x75, -- u -- [0x1D533] = 0x76, -- v -- [0x1D534] = 0x77, -- w -- [0x1D535] = 0x78, -- x -- [0x1D536] = 0x79, -- y -- [0x1D537] = 0x7A, -- z } -- now that all other vectors are defined ... setletters(mathencodings, "tex-it", 0x1D434, 0x1D44E) setletters(mathencodings, "tex-ss", 0x1D5A0, 0x1D5BA) setletters(mathencodings, "tex-tt", 0x1D670, 0x1D68A) setletters(mathencodings, "tex-bf", 0x1D400, 0x1D41A) setletters(mathencodings, "tex-bi", 0x1D468, 0x1D482) setletters(mathencodings, "tex-fraktur", 0x1D504, 0x1D51E) setletters(mathencodings, "tex-fraktur-bold", 0x1D56C, 0x1D586) setdigits (mathencodings, "tex-ss", 0x1D7E2) setdigits (mathencodings, "tex-tt", 0x1D7F6) setdigits (mathencodings, "tex-bf", 0x1D7CE) -- setdigits (mathencodings, "tex-bi", 0x1D7CE) -- todo: add ss, tt, bf etc vectors -- todo: we can make ss tt etc an option context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fdf-00.mkii0000644000175000017500000000154011571377075024002 0ustar norbertnorbert% % % % first % % % second % % % % % previous method: % % object % data % fields % field \defineXMLprocess[fdf:xfdf] \defineXMLprocess[fdf:fields] \defineXMLignore [fdf:f] \defineXMLpush [fdf:value] \defineXMLenvironment [fdf:field] [name=,value=] {\XMLerase{fdf:value}} {\gsaveXMLdata{fdf:\XMLop{name}}{fdf:value}} \defineXMLsingular [fdf:field] [name=,value=] {\gsaveXMLasdata{fdf:\XMLop{name}}{\XMLop{value}}} \def\doifelseFDFfield#1{\doifelseXMLelement{fdf:#1}} \def\flushFDFfield #1{\flushXMLelement {fdf:#1}} \def\processFDFfield #1{\processXMLelement {fdf:#1}} \def\loadFDFfile#1% {\bgroup \autoXMLnamespace[fdf]% \processXMLfilegrouped{#1}% \egroup} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-pstricks.lua0000644000175000017500000000425512130411274024471 0ustar norbertnorbertif not modules then modules = { } end modules ['m-pstricks'] = { version = 1.001, comment = "companion to m-pstricks.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The following will be done when I need ps tricks figures -- in large quantities: -- -- + hash graphics and only process them once -- + save md5 checksums in tuc file -- -- It's no big deal but has a low priority. local format, lower, concat, gmatch = string.format, string.lower, table.concat, string.gmatch local variables = interfaces.variables moduledata.pstricks = moduledata.pstricks or { } local report_pstricks = logs.reporter("pstricks") local template = [[ \starttext \pushcatcodetable \setcatcodetable\texcatcodes \usemodule[pstric] %s \popcatcodetable \startTEXpage \hbox\bgroup \ignorespaces %s \removeunwantedspaces \egroup \obeydepth %% temp hack as we need to figure this out \stopTEXpage \stoptext ]] local loaded = { } local graphics = 0 function moduledata.pstricks.usemodule(names) for name in gmatch(names,"([^%s,]+)") do loaded[#loaded+1] = format([[\readfile{%s}{}{}]],name) end end function moduledata.pstricks.process(n) graphics = graphics + 1 local name = format("%s-pstricks-%04i",tex.jobname,graphics) local data = buffers.collectcontent("def-"..n) local tmpfile = name .. ".tmp" local epsfile = name .. ".ps" local pdffile = name .. ".pdf" local loaded = concat(loaded,"\n") os.remove(epsfile) os.remove(pdffile) io.savedata(tmpfile,format(template,loaded,data)) os.execute(format("mtxrun --script texexec %s --once --dvips",tmpfile)) if lfs.isfile(epsfile) then os.execute(format("ps2pdf %s %s",epsfile,pdffile)) -- todo: direct call but not now if lfs.isfile(pdffile) then context.externalfigure( { pdffile }, { object = variables.no } ) else report_pstricks("run failed, no pdf file") end else report_pstricks("run failed, no ps file") end end context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-sys.ori0000644000175000017500000001105711571377075024204 0ustar norbertnorbert%D \module %D [ file=cont-sys, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=System Specific Setups, %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 Beware, this is a MkII specific file. In MkIV we only load %D cont-sys.mkiv but in MkII we load the first found of %D cont-sys.mkii, cont-sys.tex, cont-sys.rme. \unprotect % Speed up typescript loading, but at the cost of much memory: \preloadtypescripts % If you want another default font: % % \let\preloadfonts\relax % \usetypescript[palatino][\defaultencoding] % \setupbodyfont[palatino,rm,12pt] % % Please make sure that this defines rm, ss, tt and mm. % Occasionally we will support both A4 and letter in % styles. If you want letter size paper to be the default, % uncomment: % % \enablemode[\systemmodeprefix letter] % % If you always want to default to letter, you may uncomment % the following line, but beware: it makes your documents less % portable: % % \setuppapersize[letter][letter] % If you want some extras, just uncomment the following % line: % % \usemodule[plus] % experimental code % % Here you can take care of overloading some (style) % defaults. What goes here, depends on your local system. % The following commands sets the default font encoding: % % \setupencoding [\s!default=texnansi] % % or: \setupencoding [\s!default=ec] % If you want the default berry names: % % \usetypescript [berry] [\defaultencoding] % % or, if you also want other encodings: \usetypescript [berry] [ec,t5,8r] % texnansi is never present % If you run into missing font metrics kind of problems, % you may want to uncomment: % % \usetypescript[adobekb] [\defaultencoding] % You can let \CONTEXT\ load the map files for \PDFTEX. \autoloadmapfilestrue % (1) you can prevent loading with: % % \preloadmapfile[<...somename...>.map] % % (2) otherwise, use this if you have a fast machine % % \resetmapfiles \usetypescript [map] [base] [all] % % (3) or this if it's a slow one: \resetmapfiles % more recent versions of pdftex support map loading on each page \donefalse \ifx\pdftexversion\undefined \else \ifnum\number\pdftexversion>119 \donetrue \fi \fi \ifdone \loadmapfile[original-base.map] \loadmapfile[original-ams-base.map] \loadmapfile[original-ams-euler.map] \loadmapfile[original-public-lm.map] \else \loadmapfile[original-base.map] \loadmapfile[texnansi-base.map] \loadmapfile[ec-base.map] \loadmapfile[qx-base.map] \loadmapfile[t5-base.map] %loadmapfile[il2-base.map] %loadmapfile[pl0-base.map] \loadmapfile[8r-base.map] \loadmapfile[original-ams-base.map] \loadmapfile[original-ams-euler.map] \loadmapfile[original-public-lm.map] %loadmapfile[texnansi-public-lm.map] %loadmapfile[ec-public-lm.map] %loadmapfile[qx-public-lm.map] %loadmapfile[t5-public-lm.map] %loadmapfile[pl0-public-lm.map] %loadmapfile[il2-public-lm.map] \fi % When you have your own fonts installed, you may want to predefine: % % \usetypescriptfile[type-buy] % Some styles default to Lucida Bright. You can overload % Lucida by Times cum suis. Watch out, the pos collection % is not scaled relatively. % % \definetypescriptsynonym [lbr] [pos] % Compensate for missing files: % % \definefontsynonym [gbhei] [gbsong] % \definefontsynonym [gbheisl] [gbsong] % \definefontsynonym [gbheisl] [gbsong] % Setting up a global figure path % % \setupexternalfigures [\c!directory={e:/fig/eps,t:/mine/figs}] % % Loading a specific special driver: % % \setupoutput [dviwindo] % Changing language defaults % % \setuplanguage % [nl] % [\c!leftquote=\upperleftsinglesixquote, % \c!leftquotation=\upperleftdoublesixquote] % Loading local preferences, for example % % \input prag-gen % company styles % \input prag-log % more company styles % % Enabling run time \METAPOST\ (also enable \write18 in % texmf.cnf): \runMPgraphicstrue \runMPTEXgraphicstrue % This saves some runtime, but needs a format, which you can % make with 'texexec --make --alone metafun'. Make sure that % the mem files are moved to the used web2c path (locate with % 'kpsewhich plain.mem'). \useMETAFUNformattrue % This can be a way to get things working on system with % name clashes. (Some \TeX's tend do search system wide.) \protectbufferstrue % You can enable a more extensive figure searching, but % normally this is not really needed and even annoying. % % \runutilityfiletrue % So far. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-inconsolata.mkiv0000644000175000017500000000142611754241457026652 0ustar norbertnorbert%D \module %D [ file=type-imp-incolsolata, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Inconsolata, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[inconsolata] \starttypescript [\s!mono] [inconsolata] \definefontsynonym [Inconsolata] [\s!file:inconsolata.otf] \stoptypescript \starttypescript [\s!mono] [inconsolata] [\s!name] \setups[\s!font:\s!fallback:\s!mono] \definefontsynonym [\s!Mono] [Inconsolata] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/math-eul.mkii0000644000175000017500000002340311754241457024274 0ustar norbertnorbert%D \module %D [ file=math-eul, %D version=2003.02.03, %D title=\CONTEXT\ Math Macros, %D subtitle=Virtual Euler Specials, %D author={Hans Hagen \& Taco Hoekwater \& Adam Lindsay}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. Further modified by Adam Lindsay. \unprotect %D We follow the following mappings from type-eul: %D %D mr [MathRoman] [Euler-Roman] [zeurm10] %D mi [MathItalic] [Euler-Italic] [eufm10] %D ex [MathExtension] [Euler-Extension] [zeuex10] %D sy [MathSymbol] [Euler-Symbol] [zeusm10] %D mb [MathBeta] [Charter-Roman] [bchr8r] XXX %D mc [MathGamma] [Euler-Fraktur] [eufm10] XXX %D %D The inclusion of Bitstream Charter was originally for the text accents. %D Obviously, it's not a proper ``MathBeta'' font. %D The varrho and varsigma characters don't exist in eulervm, %D so we point at the normal types. \definefamilysynonym [eul] [calligraphic] [sy] \definefamilysynonym [eul] [oldstyle] [mi] \definefamilysynonym [eul] [gothic] [mi] \definefamilysynonym [eul] [fraktur] [mi] \definefamilysynonym [eul] [lcgreek] [mr] \definefamilysynonym [eul] [ucgreek] [mr] \definefamilysynonym [eul] [vargreek] [mr] %% Well, you don't know until you try! %\definefamilysynonym [eul] [accents] [Serif] \startmathcollection [eul] \definemathsymbol [varrho] [nothing] [vargreek] ["1A] \definemathsymbol [varsigma] [nothing] [vargreek] ["1B] %D Changes necessitated by collapsing mr \& mi into one: \definemathsymbol [imath] [nothing] [mr] ["7B] \definemathsymbol [jmath] [nothing] [mr] ["7C] \definemathsymbol [ell] [nothing] [mr] ["60] \definemathsymbol [wp] [nothing] [mr] ["7D] \definemathsymbol [partial] [nothing] [mr] ["40] \definemathsymbol [flat] [ord] [mr] ["5B] \definemathsymbol [natural] [ord] [mr] ["5C] \definemathsymbol [sharp] [ord] [mr] ["5D] \definemathsymbol [triangleleft] [bin] [mr] ["2F] \definemathsymbol [triangleright][bin] [mr] ["2E] \definemathsymbol [star] [bin] [mr] ["3F] \definemathsymbol [smile] [rel] [mr] ["5E] \definemathsymbol [frown] [rel] [mr] ["5F] \definemathsymbol [leftharpoonup] [rel] [mr] ["28] \definemathsymbol [leftharpoondown] [rel] [mr] ["29] \definemathsymbol [rightharpoonup] [rel] [mr] ["2A] \definemathsymbol [rightharpoondown] [rel] [mr] ["2B] \definemathsymbol [lhook] [rel] [mr] ["2C] \definemathsymbol [rhook] [rel] [mr] ["2D] \definemathsymbol [mathperiod] [ord] [mr] ["3A] \definemathsymbol [textperiod] [punct] [mr] ["3A] \definemathsymbol [mathcomma] [ord] [mr] ["3B] \definemathsymbol [textcomma] [punct] [mr] ["3B] \definemathsymbol [ldotp] [punct] [mr] ["3A] % extras from AMS: \definemathsymbol [hslash] [ord] [mr] ["80] %beauty over truth \stopmathcollection \startmathcollection [eul] % Ugh. no way around this to keep it compact in the font defs. \definemathcharacter [a] [alpha] [mr] ["61] \definemathcharacter [b] [alpha] [mr] ["62] \definemathcharacter [c] [alpha] [mr] ["63] \definemathcharacter [d] [alpha] [mr] ["64] \definemathcharacter [e] [alpha] [mr] ["65] \definemathcharacter [f] [alpha] [mr] ["66] \definemathcharacter [g] [alpha] [mr] ["67] \definemathcharacter [h] [alpha] [mr] ["68] \definemathcharacter [i] [alpha] [mr] ["69] \definemathcharacter [j] [alpha] [mr] ["6A] \definemathcharacter [k] [alpha] [mr] ["6B] \definemathcharacter [l] [alpha] [mr] ["6C] \definemathcharacter [m] [alpha] [mr] ["6D] \definemathcharacter [n] [alpha] [mr] ["6E] \definemathcharacter [o] [alpha] [mr] ["6F] \definemathcharacter [p] [alpha] [mr] ["70] \definemathcharacter [q] [alpha] [mr] ["71] \definemathcharacter [r] [alpha] [mr] ["72] \definemathcharacter [s] [alpha] [mr] ["73] \definemathcharacter [t] [alpha] [mr] ["74] \definemathcharacter [u] [alpha] [mr] ["75] \definemathcharacter [v] [alpha] [mr] ["76] \definemathcharacter [w] [alpha] [mr] ["77] \definemathcharacter [x] [alpha] [mr] ["78] \definemathcharacter [y] [alpha] [mr] ["79] \definemathcharacter [z] [alpha] [mr] ["7A] \definemathcharacter [A] [alpha] [mr] ["41] \definemathcharacter [B] [alpha] [mr] ["42] \definemathcharacter [C] [alpha] [mr] ["43] \definemathcharacter [D] [alpha] [mr] ["44] \definemathcharacter [E] [alpha] [mr] ["45] \definemathcharacter [F] [alpha] [mr] ["46] \definemathcharacter [G] [alpha] [mr] ["47] \definemathcharacter [H] [alpha] [mr] ["48] \definemathcharacter [I] [alpha] [mr] ["49] \definemathcharacter [J] [alpha] [mr] ["4A] \definemathcharacter [K] [alpha] [mr] ["4B] \definemathcharacter [L] [alpha] [mr] ["4C] \definemathcharacter [M] [alpha] [mr] ["4D] \definemathcharacter [N] [alpha] [mr] ["4E] \definemathcharacter [O] [alpha] [mr] ["4F] \definemathcharacter [P] [alpha] [mr] ["50] \definemathcharacter [Q] [alpha] [mr] ["51] \definemathcharacter [R] [alpha] [mr] ["52] \definemathcharacter [S] [alpha] [mr] ["53] \definemathcharacter [T] [alpha] [mr] ["54] \definemathcharacter [U] [alpha] [mr] ["55] \definemathcharacter [V] [alpha] [mr] ["56] \definemathcharacter [W] [alpha] [mr] ["57] \definemathcharacter [X] [alpha] [mr] ["58] \definemathcharacter [Y] [alpha] [mr] ["59] \definemathcharacter [Z] [alpha] [mr] ["5A] \stopmathcollection \startmathcollection [eul] \definemathcharacter [!] [close] [sy] ["A1] \definemathcharacter [(] [open] [sy] ["A8] \definemathcharacter [)] [close] [sy] ["A9] \definemathcharacter [+] [bin] [sy] ["AB] \definemathcharacter [:] [rel] [sy] ["BA] \definemathcharacter [;] [punct] [sy] ["BB] \definemathcharacter [=] [rel] [sy] ["BD] \definemathcharacter [?] [close] [sy] ["BF] \definemathcharacter [91] [open] [sy] ["DB] % [ \definemathcharacter [93] [close] [sy] ["DD] % ] \definemathcharacter [,] [punct] [mr] ["3B] \definemathcharacter [.] [ord] [mr] ["3A] \definemathcharacter [/] [ord] [mr] ["3D] \definemathcharacter [<] [rel] [mr] ["3C] \definemathcharacter [>] [rel] [mr] ["3E] \stopmathcollection \startmathcollection [eul] \definemathcharacter [(] [nothing] [sy] ["A8] [ex] ["00] \definemathcharacter [)] [nothing] [sy] ["A9] [ex] ["01] \definemathcharacter [91] [nothing] [sy] ["DB] [ex] ["02] % [ \definemathcharacter [93] [nothing] [sy] ["DD] [ex] ["03] % ] \definemathcharacter [/] [nothing] [mr] ["3D] [ex] ["0E] \stopmathcollection \startmathcollection [eul] \definemathsymbol [hbar] [nothing] [mr] ["80] \stopmathcollection \startmathcollection [eul] \definemathsymbol [ddagger] [bin] [sy] ["7A] \definemathsymbol [dagger] [bin] [sy] ["79] \stopmathcollection \startmathcollection [eul] \definemathsymbol [colon] [punct] [sy] ["BA] \stopmathcollection %D This used to be very hackish; it brought in text %D accents from the well-matched Bitstream Charter. %D But now, these characters don't exist. I would prefer to pull %D them from the text font, but I don't know how. %D Instead, I'm just pointing to null characters! \startmathcollection [eul] \definemathsymbol [acute] [accent] [mr] ["90] \definemathsymbol [grave] [accent] [mr] ["91] \definemathsymbol [ddot] [accent] [mr] ["92] \definemathsymbol [tilde] [accent] [mr] ["93] \definemathsymbol [bar] [accent] [mr] ["94] \definemathsymbol [breve] [accent] [mr] ["95] \definemathsymbol [check] [accent] [mr] ["96] \definemathsymbol [hat] [accent] [mr] ["97] \definemathsymbol [dot] [accent] [mr] ["98] %\definemathsymbol [acute] [accent] [accents] ["B4] %\definemathsymbol [grave] [accent] [accents] ["1E] %\definemathsymbol [ddot] [accent] [accents] ["A8] %\definemathsymbol [tilde] [accent] [accents] ["98] %\definemathsymbol [bar] [accent] [accents] ["AF] %\definemathsymbol [breve] [accent] [accents] ["0B] %\definemathsymbol [check] [accent] [accents] ["10] %\definemathsymbol [hat] [accent] [accents] ["5E] %\definemathsymbol [dot] [accent] [accents] ["01] \definemathsymbol [vec] [accent] [mr] ["7E] % [ord] \definemathsymbol [hat] [accent] [sy] ["DE] \stopmathcollection \startmathcollection [eul] \definemathsymbol [lgroup] [open] [sy] ["A8] [ex] ["3A] % ? \definemathsymbol [rgroup] [close] [sy] ["A9] [ex] ["3B] % ? \stopmathcollection \startmathcollection [eul] \definemathsymbol [dag] [box] [sy] ["79] \definemathsymbol [ddag] [box] [sy] ["7A] \definemathsymbol [S] [box] [sy] ["78] \definemathsymbol [P] [box] [sy] ["7B] \stopmathcollection %D Aditya's additionl definitions: \startmathcollection[eul:texnansi] \definemathsymbol [acute] [accent] [tf] ["13] \definemathsymbol [grave] [accent] [tf] ["12] \definemathsymbol [ddot] [accent] [tf] ["A8] \definemathsymbol [tilde] [accent] [tf] ["98] \definemathsymbol [bar] [accent] [tf] ["16] \definemathsymbol [breve] [accent] [tf] ["15] \definemathsymbol [check] [accent] [tf] ["14] \definemathsymbol [hat] [accent] [tf] ["88] \definemathsymbol [dot] [accent] [tf] ["5] % Why is mathring not defined?? \definemathsymbol [mathring] [accent] [tf] ["17] \stopmathcollection \startmathcollection[eul:ec] \definemathsymbol [acute] [accent] [tf] ["1] \definemathsymbol [grave] [accent] [tf] ["0] \definemathsymbol [ddot] [accent] [tf] ["4] \definemathsymbol [tilde] [accent] [tf] ["3] \definemathsymbol [bar] [accent] [tf] ["9] \definemathsymbol [breve] [accent] [tf] ["8] \definemathsymbol [check] [accent] [tf] ["7] \definemathsymbol [hat] [accent] [tf] ["2] \definemathsymbol [dot] [accent] [tf] ["A] % Why is mathring not defined?? \definemathsymbol [mathring] [accent] [tf] ["6] \stopmathcollection \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-030.mkii0000644000175000017500000000626211754241457024022 0ustar norbertnorbert%D \module %D [ file=unic-030, %D version=2004.11.18, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 30, %D author=Adam Lindsay, %D date=\currentdate, %D copyright={Adam Lindsay \& Hans Hagen}] %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 \startunicodevector 30 \expandafter\strippedcsname \ifcase\numexpr#1-160\relax \Adotbelow \or \adotbelow \or \Ahook \or \ahook \or \Acircumflexacute \or \acircumflexacute \or \Acircumflexgrave \or \acircumflexgrave \or \Acircumflexhook \or \acircumflexhook \or \Acircumflextilde \or \acircumflextilde \or \Acircumflexdotbelow \or \acircumflexdotbelow \or \Abreveacute \or \abreveacute \or \Abrevegrave \or \abrevegrave \or \Abrevehook \or \abrevehook \or \Abrevetilde \or \abrevetilde \or \Abrevedotbelow \or \abrevedotbelow \or \Edotbelow \or \edotbelow \or \Ehook \or \ehook \or \Etilde \or \etilde \or \Ecircumflexacute \or \ecircumflexacute \or \Ecircumflexgrave \or \ecircumflexgrave \or \Ecircumflexhook \or \ecircumflexhook \or \Ecircumflextilde \or \ecircumflextilde \or \Ecircumflexdotbelow \or \ecircumflexdotbelow \or \Ihook \or \ihook \or \Idotbelow \or \idotbelow \or \Odotbelow \or \odotbelow \or \Ohook \or \ohook \or \Ocircumflexacute \or \ocircumflexacute \or \Ocircumflexgrave \or \ocircumflexgrave \or \Ocircumflexhook \or \ocircumflexhook \or \Ocircumflextilde \or \ocircumflextilde \or \Ocircumflexdotbelow \or \ocircumflexdotbelow \or \Ohornacute \or \ohornacute \or \Ohorngrave \or \ohorngrave \or \Ohornhook \or \ohornhook \or \Ohorntilde \or \ohorntilde \or \Ohorndotbelow \or \ohorndotbelow \or \Udotbelow \or \udotbelow \or \Uhook \or \uhook \or \Uhornacute \or \uhornacute \or \Uhorngrave \or \uhorngrave \or \Uhornhook \or \uhornhook \or \Uhorntilde \or \uhorntilde \or \Uhorndotbelow \or \uhorndotbelow \or \Ygrave \or \ygrave \or \Ydotbelow \or \ydotbelow \or \Yhook \or \yhook \or \Ytilde \or \ytilde \else \unknownchar \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-new.mkii0000644000175000017500000005411011754241457024350 0ustar norbertnorbert%D \module %D [ file=syst-new, %D version=1997.01.03, %D title=\CONTEXT\ Support Macros, %D subtitle=New Ones, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Code from this module will move. For instance to %D syst-dat.tex (datastructures). \unprotect % pretty ugly but fast % \copycsname xxx\endcsname\csname ..\endcsname \def\copycsname{\@EA\@EA\@EA\let\@EA\@EA\csname} % \letcscsname \crap \csname ..\endcsname % \letcsnamecs \csname ..\endcsname\crap % \letcsnamecsname\csname ..\endcsname\csname ..\endcsname \def\letcscsname {\@EA\let\@EA} \def\letcsnamecs {\@EA\let} \def\letcsnamecsname{\@EA\@EA\@EA\let\@EA\@EA} % another one, add an item to a commalist \def\addvalue#1#2% cs item {\ifundefined{#1}\@EA\let\csname#1\endcsname\empty\fi \expanded{\addtocommalist{#2}\@EA\noexpand\csname#1\endcsname}} % faster, and looks okay \def\unspaced#1% {\dounspaced#1\end} \def\dounspaced#1% {\ifx#1\end \@EA\gobbleoneargument \else \ifx#1\blankspace\else#1\fi \fi \dounspaced} \def\unspaceargument#1\to#2% {\defconvertedargument#2{#1}% \@EA\edef\@EA#2\@EA{\@EA\unspaced\@EA{#2}}} \def\unspaceafter#1#2% {\edef\ascii{\dounspaced#2\end}\@EA#1\@EA{\ascii}} % etex, much faster % % \def\unspaceargument#1\to#2% % {\scratchcounter\catcode'32\catcode32=\@@ignore % \scantokens{\edef#2{#1}}% % \catcode32=\scratchcounter} \def\unspaceafter#1#2% {\edef\ascii{\dounspaced#2\end}\@EA#1\@EA{\ascii}} % sometimes handy: \def\doifhasspaceelse#1% {\edef\!!stringa{#1}% \expanded{\dodoifhasspaceelse#1\space}\empty\relax} \def\dodoifhasspaceelse#1 #2#3\relax % \space\empty\relax {\ifx\!!stringa\space \@EA\firstoftwoarguments \else\ifx#2\empty \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi\fi} % this will replace loadfile once and alike !!! todo \def\@flg@{@flg@} \def\setflag#1% {\@EA\dodoglobal\@EA\chardef\csname\@flg@#1\endcsname\zerocount} \def\resetflag#1% {\@EA\dodoglobal\@EA\chardef\csname\@flg@#1\endcsname\plusone} \let\ifflagged\ifcase \def\flag#1{\csname\@flg@#1\endcsname} \def\doifelseflagged#1% {\@EA\ifx\csname\@flg@#1\endcsname\relax \@EA\secondoftwoarguments \else\ifcase\csname\@flg@#1\endcsname \@EAEAEA\firstoftwoarguments \else \@EAEAEA\secondoftwoarguments \fi\fi} \def\doifnotflagged#1% {\@EA\ifx\csname\@flg@#1\endcsname\relax \@EA\firstofoneargument \else\ifcase\csname\@flg@#1\endcsname \@EAEAEA\gobbleoneargument \else \@EAEAEA\firstofoneargument \fi\fi} \def\inheritparameter[#1]#2[#3]#4[#5]% tag tokey fromkey % [bypasses k!prefix] {\@EAEAEA\def\@EA\csname\@EA#1\@EA#3\@EA\endcsname\@EA {\csname#1#5\endcsname}} % \buildarray[test][aa,bb,cc,dd,ee,ff] % \setarrayelement{test}{1}{qq} % \arrayelement{test}{1} % \arraylength{test} % % \def\buildarray[#1][#2]% % {\scratchcounter=0 % \def\docommand##1% % {\advance\scratchcounter by 1 % \setvalue{@@aa#1\the\scratchcounter}{##1}}% % \processcommalist[#2]\docommand % \setevalue{@@aa#1}{\the\scratchcounter}}% % % \def\setarrayelement#1#2{\setvalue{@@aa#1#2}} % \def\arrayelement #1#2{\getvalue{@@aa#1#2}} % \def\arraylength #1{\getvalue{@@aa#1}} % \newsignal\junksignal % % \def\setjunksignal% % {\ifhmode % \hskip\junksignal % \let\removejunkspaces\doremovejunkspaces % \else % \let\removejunkspaces\relax % \fi} % % \def\doremovejunkspaces% % {\doloop{\ifdim\lastskip=\junksignal\unskip\else\exitloop\fi}} % \def\doifnonzeropositiveelse#1#2#3% % {\bgroup % \setbox\scratchbox=\hbox{\scratchcounter=0#1}% % \ifdim\wd\scratchbox=\!!zeropoint\egroup#2\else\egroup#3\fi} % % \def\dodoifnonzeropositiveelse#1#2\end#3#4% % {\egroup % \ifx#1\relax#3\else#4\fi} % % \def\doifnonzeropositiveelse#1% % {\bgroup % \afterassignment\dodoifnonzeropositiveelse\scratchcounter=0#1\relax\empty\end} \def\dodoifnonzeropositiveelse#1#2\end % #3#4% {\ifx#1\relax \ifcase\scratchcounter \endgroup \@EAEAEA\secondoftwoarguments \else \endgroup \@EAEAEA\firstoftwoarguments \fi \else \endgroup \@EA\secondoftwoarguments \fi} \def\doifnonzeropositiveelse#1% {\begingroup\afterassignment\dodoifnonzeropositiveelse\scratchcounter=0#1\relax\empty\end} % here ? \def\dosetrawvalue #1#2#3{\@EA \def\csname#1#2\endcsname{#3}} \def\dosetrawevalue#1#2#3{\@EA\edef\csname#1#2\endcsname{#3}} \def\dosetrawgvalue#1#2#3{\@EA\gdef\csname#1#2\endcsname{#3}} \def\dosetrawxvalue#1#2#3{\@EA\xdef\csname#1#2\endcsname{#3}} \def\getrawparameters {\dogetparameters\dosetrawvalue } \def\getraweparameters {\dogetparameters\dosetrawevalue} \def\getrawgparameters {\dogetparameters\dosetrawgvalue} \def\getrawxparameters {\dogetparameters\dosetrawxvalue} \def\globalgetrawparameters{\dogetparameters\dosetrawgvalue} % obsolete \def\splitskip#1% {\scratchskip\zeropoint \!!plus \onepoint \!!minus \onepoint \advance\scratchskip#1\relax % \relax is realy needed here \expandafter\SPLITSKIP\the\scratchskip} {\catcode`\.=\@@other \catcode`\p=\@@other \catcode`\l=\@@other \catcode`\u=\@@other \catcode`\s=\@@other \catcode`\m=\@@other \catcode`\i=\@@other \catcode`\n=\@@other \catcode`\t=\@@other \gdef\SPLITSKIP#1pt plus #2pt minus #3pt% {\DOSPLITSKIP#1 #2 #3 }} % \def\DOSPLITSKIP#1 #2 #3 % {\dimen0=#1pt\dimen2=#2pt\dimen4=#3pt % \advance\dimen2 -\onepoint % \advance\dimen4 -\onepoint} \def\DOSPLITSKIP#1 #2 #3 {\dimen0=#1\onepoint \dimen2=\dimexpr#2\onepoint-\onepoint\relax \dimen4=\dimexpr#3\onepoint-\onepoint\relax} % \def\minimaxskip#1#2% % {\splitskip#2\relax % \scratchdimen=#2\relax % #2=\scratchdimen % \advance#2 by #1\relax} % % \def\maximizeskip% % {\minimaxskip{-\dimen4}} % % \def\maximizeskip% % {\minimaxskip{\dimen2}} % % \def\maximizespacing% % {\maximizeskip\blankskipamount % \maximizeskip\parskip % \maximizeskip\ctxparskip % \maximizeskip\baselineskip % \maximizeskip\bigskipamount % \maximizeskip\medskipamount % \maximizeskip\smallskipamount} \newcount\modcounter %\def\DoMod #1by#2to#3% % {\modcounter#1\divide\modcounter#2\multiply\modcounter#2% % #3#1\advance#3 -\modcounter} % %\def\DoDiv #1by#2to#3% % {#3#1\divide#3 #2\relax} \def\dosetmodulo#1#2#3% {\modcounter#1\divide\modcounter#2\multiply\modcounter#2% #3#1\advance#3-\modcounter} \def\dosetdivision#1#2#3% {#3#1\divide#3 #2\relax} \def\DoMod#1by#2to#3{\dosetmodulo {#1}{#2}{#3}} \def\DoDiv#1by#2to#3{\dosetdivision{#1}{#2}{#3}} \def\dounprotected#1\par {#1\protect} \def\unprotected {\unprotect\dounprotected} %D Standaard kan een spatie (zoals ~) uitrekken. Dit is in %D overzichten niet altijd de bedoeling, vandaar: % \def\fixedspace{\hskip\interwordspace\relax} %\def\ExpandSecondAfter#1#2#3% % {\!!toksa={#2}% % \edef\!!stringa{#3}% % \edef\expanded% % {\noexpand#1{\the\!!toksa}{\!!stringa}}% % \expanded} % %\def\ExpandThirdAfter#1#2#3#4% % {\!!toksa={#2}% % \!!toksb={#3}% % \edef\!!stringa{#4}% % \edef\expanded% % {\noexpand#1{\the\!!toksa}{\the\!!toksb}{\!!stringa}}% % \expanded} %\def\indirect#1#2#3% % {\@EA#1\@EA#2\@EA{\@EA#3\csname\s!do\string#2\endcsname}% % \@EA#1\csname\s!do\string#2\endcsname} % %\def\doubleemptied#1#2#3% % {\indirect#1#2\dodoublempty} % %\indirect\def\stelietsin\dodoubleempty[#1][#2]% % {...} % %\doubleemptied\def\stelietsin[#1][#2]% % {...} % in mult-set % %\def\defaultsetup{def} % %\def\selectdefaultsetup#1#2% % {\writestatus{setup}{choose #1 setupfile}% % \bgroup % \endlinechar=-1 % \global\read16 to \usersetup % \egroup % \ifx\usersetup\empty % \let\usersetup=\defaultsetup % \fi % \readfile{#2\usersetup}{}{}% % \writestatus{setup}{loading #1 setupfile #2\usersetup}} % awaiting the definitive implementation \ifx\resettimer\undefined \let\resettimer \relax \newcount\elapsedtime \fi \newcount\featuretest \def\testfeature#1#2% {\def\dotestfeature {\advance\featuretest \plusone \ifnum\featuretest>#1\else#2\expandafter\dotestfeature\fi}% \retestfeature} \def\retestfeature % timer support is new per 10/5/2005 {\bgroup \ifcase\interactionmode\let\wait\relax\fi \writestatus\m!systems{starting feature test}\wait \resettimer \featuretest\zerocount \dotestfeature \writestatus\m!systems{feature test done (\elapsedseconds s)}% \wait \egroup} \def\elapsedseconds{\expandafter\withoutpt\the\dimexpr\elapsedtime sp\relax} \def\showtimer#1% {\writestatus{runtime}{\elapsedseconds\space s / #1}} % \edef\elapsedtime{\expandafter\withoutpt\the\dimexpr\elapsedtime\relax s}% % \writestatus\m!systems{feature test done (\elapsedtime)}% \def\testfeatureonce#1#2% {\let\wait\relax\testfeature{#1}{#2}\end} %D \macros %D {adddimenregister,adddimenmacro} %D %D Instead of using numerous \type {\advance}'s, one can use %D the next macros to add|/|subtract a series of dimensions %D to a register or macro. %D %D \starttyping %D \adddimenregister 10pt 5pt \paperwidth \to \somedimen %D \adddimenmacro 10pt 5pt \paperwidth \to \bagger %D \stoptyping % \newdimen\dimentoaddto % \def\adddimenregister#1\to#2% will be obsolete once full etex % {\begingroup % #2=\zeropoint % \dimentoaddto\zeropoint % \def\docommand% % {\advance#2 \dimentoaddto % \futurelet\next\dodocommand}% % \def\dodocommand% % {\ifx\next\relax % \expanded{\endgroup#2=\the#2}% % \else % \@EA\afterassignment\@EA\docommand\@EA\dimentoaddto % \fi}% % \docommand#1\relax} % \def\adddimenmacro#1\to#2% % {\adddimenregister#1\to\scratchdimen % \edef#2{\the\scratchdimen}} %D \macros %D {freezedimenmacro} %D %D This macro is use as: %D %D \starttyping %D \freezedimenmacro\leftmargindistance %D \stoptyping % \def\freezedimenmacro#1% % {\scratchdimen#1\edef#1{\the\scratchdimen}} \def\freezedimenmacro#1% {\edef#1{\the\dimexpr#1}} %D The next one is slower: %D %D \starttyping %D \def\freezedimenmacro#1{\edef#1{\the\dimexpr(#1)}} %D \stoptyping % \newcount\rawrecursecounter % % \def\rawrecurselevel{\the\rawrecursecounter}% % % \def\dorawrecurse#1#2% % {\rawrecursecounter\plusone % \let\oldrecurselevel\recurselevel % \let\recurselevel\rawrecurselevel % \def\dodorawrecurse % {\ifnum\rawrecursecounter>#1\relax % \let\recurselevel\oldrecurselevel % \else % #2\advance\rawrecursecounter \plusone % \expandafter\dodorawrecurse % \fi}% % \dodorawrecurse} %D The next macro negates a macro (dimension or number, or actually, whatever. %D It's a typical example of \type {\if} usage: %D %D \starttyping %D \if-\whatever \else-\whatever\fi => else => -whatever %D \if--\whatever\else-\whatever\fi => then => whatever %D \stoptyping \def\negated#1{\if-#1\else-#1\fi} % does only work in macros or text % This permits things like ^\index{hans}^, where hans is % duplicated in the text. \newif\ifduplicate \bgroup \gdef\checkduplication % in line with Knuth {\ifmmode\expandafter^\else\expandafter\startduplication\fi} \gdef\insideduplication {\ifmmode\expandafter^\else\expandafter\egroup\fi} \catcode`\^=\@@active \gdef\enableduplication {\catcode`\^=\@@active \let^\checkduplication} \gdef\disableduplication {\catcode`\^=\@@superscript} \gdef\startduplication {\bgroup \duplicatetrue \let^\insideduplication} \egroup \def\gobbleassigndimen#1\\{} \def\assigndimen#1#2% {\afterassignment\gobbleassigndimen#1=#2\!!zeropoint\\} \def\setusage#1% {\@EA\let\csname#1\endcsname\iftrue} \def\resetusage#1% {\@EA\let\csname#1\endcsname\iffalse} \beginTEX \def\ifusage#1% {\@EA\ifx\csname#1\endcsname\relax \resetusage{#1}% \fi \csname#1\endcsname} \endTEX \beginETEX \ifcsname \def\ifusage#1% {\ifcsname#1\endcsname\else \resetusage{#1}% \fi \csname#1\endcsname} \endETEX %D Very handy, more efficient than \type{{}}, and more readable %D than \type {\empty}. \let\donothing\empty % The following macros are used in XML handling. % \long\def\dowithstringed#1#2#3#4% " ' space % {\if#4"\@EA#1\else\if#4'\@EAEAEA#2\else\@EAEAEA#3\fi\fi#4} % % \def\unstringed % {\dowithstringed\unstringdouble\unstringsingle\unstringspaced} % % \long\def\unstringdouble"#1"{#1} % \long\def\unstringsingle'#1'{#1} % \long\def\unstringspaced #1 {#1} % % \def\grabstring % {\dowithstringed\grabstringdouble\grabstringsingle\grabstringspaced} % % \def\dowithgrabbedstring#1% % {\def\@@dowithgrabbedstring{#1}% % \afterassignment\@@dowithgrabbedstring\grabstring} % % \long\def\grabstringdouble"#1"{\scratchtoks{#1}} % \long\def\grabstringsingle'#1'{\scratchtoks{#1}} % \long\def\grabstringspaced #1 {\scratchtoks{#1}} \long\setvalue{@u@s@"}#1#2"{#2} \long\setvalue{@g@s@"}#1#2"{\scratchtoks{#2}} \long\setvalue{@u@s@'}#1#2'{#2} \long\setvalue{@g@s@'}#1#2'{\scratchtoks{#2}} \long\setvalue{@u@s@ }#1#2 {#2} \long\setvalue{@g@s@ }#1#2 {\scratchtoks{#2}} \long\def\unstringed#1{\csname\ifcsname @u@s@#1\endcsname @u@s@#1\else\s!empty\fi\endcsname#1} \long\def\grabstring#1{\csname\ifcsname @g@s@#1\endcsname @g@s@#1\else\s!empty\fi\endcsname#1} \def\dowithgrabbedstring#1% {\def\@@dowithgrabbedstring{#1}% \afterassignment\@@dowithgrabbedstring\grabstring} \def\expifequalelse#1#2% {\@@ifequal#1\relax\relax\@@and#2\relax\relax\@@then} \def\@@ifequal#1#2\@@and#3% {\ifx#1\relax \ifx#3\relax \@EAEAEA\@@if@@equal@@true \else \@EAEAEA\@@if@@equal@@false \fi \else \ifx#3\relax \@EAEAEAEAEAEA\@@if@@equal@@false \else\ifx#1#3% % go on \else \@EAEAEAEAEAEA\@@if@@equal@@false \fi\fi \fi \@@ifequal#2\@@and} \long\def\@@if@@equal@@true #1\@@then#2#3{#2} \long\def\@@if@@equal@@false#1\@@then#2#3{#3} %D new stuff : \def\partialexpanded#1% {\let\@@notexpanded\noexpand \long\xdef\@@expanded{\noexpand#1}% \let\@@notexpanded\empty \@@expanded} % for Simon ; watch how we make them fully expandable (i.e. % no \type {\relax}es) popping up \def\@do@the@number@#1\relax#2\end{#1} \def\@the@number@#1{\@EA\@do@the@number@\number#1\relax\end} \def\doifnum#1#2% {\ifnum#1=\@the@number@{#2} % space needed \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \def\doifnotnum#1#2% {\ifnum#1=\@the@number@{#2} % space needed \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \def\doifelsenum#1#2% {\ifnum#1=\@the@number@{#2} % space needed \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \edef\xxxx{\doifnum{1}{2}{no}} \show \xxxx % \edef\xxxx{\doifnum{2}{2}{yes}} \show \xxxx % \scratchcounter0 \edef\xxxx{\doifnum{1}{\scratchcounter}{no}} \show \xxxx % \scratchcounter1 \edef\xxxx{\doifnum{1}{\scratchcounter}{yes}} \show \xxxx \def\appended#1#2#3{\@EA#1\@EA#2\@EA{#2#3}} \def\appendvalue #1{\@EA\appended\@EA \def\csname#1\endcsname} \def\appendgvalue#1{\@EA\appended\@EA\gdef\csname#1\endcsname} \def\prepended#1#2#3{\scratchtoks{#3}\@EA\@EA\@EA#1\@EA\@EA\@EA#2\@EA\@EA\@EA{\@EA\the\@EA\scratchtoks#2}} \def\prependvalue #1{\@EA\prepended\@EA \def\csname#1\endcsname} \def\prependgvalue#1{\@EA\prepended\@EA\gdef\csname#1\endcsname} %D \macros %D {compresscommacommandnrs,compresscommalistnrs,compressedcommalistnrs, %D compresscommacommand,compresscommalist,compressedcommalist, %D reversecommacommand,reversecommalist,reversedcommalist} %D %D The following two list processing macros are needed by Taco's %D bibliography module. The numbers compressor converts the %D list in a list of ranges. The normal compressor remove duplicate %D and empty entries. \def\compresscommalistnrs[#1]% {\let\compressedlist\empty \!!counta\maxdimen \!!countb\maxdimen \processcommalist[#1]\docompresslistnrs \ifnum\!!counta=\maxdimen\else\dodocompresslistnrs\fi} \def\compresscommacommandnrs[#1]% {\expanded{\compresscommalistnrs[#1]}} \def\docompresslistnrs#1% {\edef\commalistelement{#1}% \ifx\commalistelement\empty\else \ifnum\!!counta=\maxdimen \!!counta\commalistelement\relax \!!countb\!!counta \else \advance\!!countb\plusone \ifnum\commalistelement>\!!countb \advance\!!countb\minusone \dodocompresslistnrs \!!counta\commalistelement\relax \!!countb\!!counta \fi \fi \fi} \def\dodocompresslistnrs {\edef\compressedlist {\ifx\compressedlist\empty\else\compressedlist,\fi {\the\!!counta}{\ifnum\!!countb>\!!counta\the\!!countb\fi}}} %D \def\test#1{{\tttf#1->\compresscommalistnrs[#1]\defconvertedcommand\ascii\compressedlist\ascii}} %D \startlines %D \test{} %D \test{1} %D \test{1,3} %D \test{1,3,4} %D \test{1,3,3,4,5} %D \test{1,3,3,4,5,8} %D \test{1,3,3,4,5,5,8,10} %D \test{1,3,4,5,8,10,11} %D \test{1,,3,,4,,5,,8,,10,,11,} %D \stoplines \def\compresscommalist[#1]% {\let\compressedlist\empty \let\!!stringa\empty \processcommalist[#1]\docompresslist} \def\compresscommacommand[#1]% {\expanded{\compresscommalist[#1]}} \def\docompresslist#1% {\edef\commalistelement{#1}% \ifx\commalistelement\empty \else \ifx\!!stringa\commalistelement \else \ifx\compressedlist\empty \def\compressedlist{#1}% \else \appended\def\compressedlist{,#1}% \fi \let\!!stringa\commalistelement \fi \fi} %D \def\test#1{{\tttf#1->\compresscommalist[#1]\defconvertedcommand\ascii\compressedlist\ascii}} %D \startlines %D \test{} %D \test{1} %D \test{1,3} %D \test{1,3,4} %D \test{1,3,3,4,5} %D \test{1,3,3,4,5,8} %D \test{1,3,3,4,5,5,8,10} %D \test{1,3,4,5,8,10,11} %D \test{1,,3,,4,,5,,8,,10,,11,} %D \stoplines \def\reversecommalist[#1]% {\let\reversedlist\empty \processcommalist[#1]\doreverselist} \def\doreverselist#1% {\ifx\reversedlist\empty \def\reversedlist{#1}% \else \prepended\def\reversedlist{#1,}% \fi} \def\reversecommacommand[#1]% {\expanded{\reversecommalist[#1]}} %D \def\test#1{{\tttf#1->\reversecommalist[#1]\defconvertedcommand\ascii\reversedlist\ascii}} %D \startlines %D \test{} %D \test{1} %D \test{1,3} %D \test{1,3,4} %D \test{1,3,3,4,5} %D \test{1,3,3,4,5,8} %D \test{1,3,3,4,5,5,8,10} %D \test{1,3,4,5,8,10,11} %D \test{1,,3,,4,,5,,8,,10,,11,} %D \stoplines %D \macros %D {stripstring} %D %D Needed in bookmarks: %D %D \starttyping %D {\sanitizePDFdocencoding test \CONTEXT\ test \to\oeps\stripstring\oeps\tttf[\oeps]} %D \stoptyping \def\stripstring#1% #1 is \cs {\bgroup \defconvertedcommand\ascii{#1}% \global\let\globalascii\empty \donefalse \expandafter\handletokens\ascii\with\dostripstring \egroup \let#1\globalascii} \def\dostripstring#1% {\ifx#1\blankspace \donetrue \else \ifdone\ifx\globalascii\empty\else \xdef\globalascii{\globalascii\space}% \donefalse \fi\fi \xdef\globalascii{\globalascii#1}% \fi} %D \macros %D {dowithrange} %D %D This one is for Mojca Miklavec, who made me aware of the fact that %D \type {page-imp.tex} was not the best place to hide it. \def\dowithrange#1#2% #2 takes number {\splitstring#1\at:\to\fromrange\and\torange \ifx\torange\empty\let\torange\fromrange\fi \dostepwiserecurse\fromrange\torange1{#2{\recurselevel}}} %D \macros {uncompresslist} %D %D When given a list like \type{1,4-7,9} as argument, this macro %D will store the expanded commalist in \type{\uncompressedlist}. %D %D \startbuffer %D \def\MojcaHasToDoTheTasks[#1]#2% %D {{\uncompresslist[#1]% %D \def\processitem##1{I have to do ##1 #2\par}% %D \processcommacommand[\uncompressedlist]\processitem}} %D %D \MojcaHasToDoTheTasks [1-4,7,9-11] {until tomorrow} %D \stopbuffer %D %D Here is an example of how to use \type {\uncompresslist}: %D \typebuffer %D %D The output of this is: %D %D \getbuffer \beginETEX \numexpr \def\uncompresslist[#1]% by TH {\let\uncompressedlist\empty \def\docompressedlistitem##1-##2-% {\@EA\dorecurse\@EA {\the\numexpr1+##2-##1\relax}% {\@EA\appendtocommalist\@EA{\the\numexpr##1-1+####1\relax}\uncompressedlist}}% \def\douncompresslist##1% {\doifinstringelse{-}{##1} {\docompressedlistitem##1-} {\appendtocommalist{##1}\uncompressedlist}}% \processcommalist[#1]\douncompresslist} \endETEX \beginTEX \def\uncompresslist[#1]% {\def\uncompressedlist{#1}} \endTEX %D \macros %D {ignoreimplicitspaces} %D %D \startbuffer %D \def\whatever[#1]{\expanded{\definedfont[#1 at 12pt]}\ignorespaces} %D {a\whatever[Serif]b a\whatever[Serif] b a\whatever[Serif]\space b} %D \def\whatever[#1]{\expanded{\definedfont[#1 at 12pt]}\ignoreimplicitspaces} %D {a\whatever[Serif]b a\whatever[Serif] b a\whatever[Serif]\space b} %D \stopbuffer %D %D \typebuffer \getbuffer \def\ignoreimplicitspaces {\doifnextcharelse\relax\relax\relax} % new % % \startnointerference % all kind of code % \stopnointerference \newbox\nointerferencebox \def\startnointerference {\setbox\nointerferencebox\vbox \bgroup} \def\stopnointerference {\egroup \setbox\nointerferencebox\emptybox} \protect \endinput % \def\appendtovaluelist#1#2% % {\ifcsname#1\endcsname % \expandafter\ifx\csname#1\endcsname\empty % \expandafter\def\csname#1\endcsname{#2}% % \else % \expandafter\def\csname#1\expandafter\expandafter\expandafter\endcsname % \expandafter\expandafter\expandafter{\csname#1\endcsname,#2}% % \fi % \else % \expandafter\def\csname#1\endcsname{#2}% % \fi} % % or % % \def\appendtovaluelist#1% % {\ifcsname#1\endcsname % \expandafter\ifx\csname#1\endcsname\empty % \expandafter\noappendtovaluelist\csname#1\expandafter\expandafter\expandafter\endcsname % \else % \expandafter\doappendtovaluelist\csname#1\expandafter\expandafter\expandafter\endcsname % \fi % \else % \expandafter\noappendtovaluelist\csname#1\expandafter\endcsname % \fi} % \def\doappendtovaluelist#1#2{\expandafter\def\expandafter#1\expandafter{#1,#2}} % \def\noappendtovaluelist#1#2{\def#1{#2}} % \appendtovaluelist{mylist}{aap} % \appendtovaluelist{mylist}{noot} % \appendtovaluelist{mylist}{mies} % \showvalue{mylist} context-2013.05.28.20130704/texmf-dist/tex/context/base/s-abr-02.tex0000644000175000017500000000103111754241457023643 0ustar norbertnorbert%D \module %D [ file=s-abr-02, %D version=1996.01.01, %D title=\CONTEXT\ Style File, %D subtitle=General Abbreviations 2, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[abr-01] \unprotect \setupsorting[logo][\c!style=\v!smallcaps] \setupcapitals[\c!title=\v!no] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-missing.mkiv0000644000175000017500000000254712161703335025632 0ustar norbertnorbert%D \module %D [ file=s-fonts-missing, %D version=2011.10.30, %D title=\CONTEXT\ Style File, %D subtitle=Some Missing Character Info, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[s-fonts-missing] \registerctxluafile{s-fonts-missing}{} \installmodulecommandluasingle \showmissingcharacterslegend {moduledata.fonts.missing.showlegend} \installmodulecommandluasingle \showmissingcharacters {moduledata.fonts.missing.showcharacters} \stopmodule \continueifinputfile{s-fonts-missing.mkiv} % the sooner, the more efficient, see log for details \enabletrackers[fonts.missing=replace] % \definefontfeature[default][default][missing=yes] % automatically when enabled \starttext \page legend: \blank \showmissingcharacterslegend \page sample: \blank ½ ⅓ ¼ ⅕ ⅙ ⅛ {\bf ½ ⅓ ¼ ⅕ ⅙ ⅛} \blank \startluacode for i=1,1000 do local c = characters.data[i] if c then context.char(c.unicodeslot) context.space() end end \stopluacode \page characters: \blank \showmissingcharacters \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lab.mkiv0000644000175000017500000001405212134352503024270 0ustar norbertnorbert%D \module %D [ file=strc-lab, % was part of strc-des, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Labels, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Labels} \unprotect % todo: reset and increment will go %D Labels are implemented somewhat inefficient but have the advantage that they %D can be controlled like other constructions. Who knows when that comes in %D handy? \installcorenamespace{labels} \installcommandhandler \??labels {label} \??labels % plural hash, else clash with label (or rename that one) \installcounterassociation{label} \let\setuplabels\setuplabel \setuplabel [\c!alternative=\v!intext, \c!headstyle=\v!bold, \c!titlestyle=\v!bold, \c!distance=\zeropoint, \c!width=\v!fit, \c!titledistance=.5\emwidth, \c!margin=\v!no, \c!titleleft=(, \c!titleright=), \c!display=\v!no, \c!titlecommand=, \c!expansion=\v!no, \c!way=\v!by\v!text, \c!prefix=\v!no, \c!prefixconnector=., \c!text=\currentlabel, \c!number=\v!yes, % else description \c!start=0, \c!state=\v!start, \c!levels=3] \unexpanded\def\strc_define_commands_label#1#2#3% current level parent {\doifelsenothing{#3} {\normalexpanded{\defineconstruction[#1][\s!handler=\v!label,\c!level=#2]}% \setevalue{\??label#1:\s!parent}{\??label}}% {\normalexpanded{\defineconstruction[#1][#3][\s!handler=\v!label,\c!level=#2]}% \setevalue{\??label#1:\s!parent}{\??label#3}}% \ifconditional\c_strc_constructions_define_commands \setuevalue{\e!next #1}{\strc_labels_next {#1}{\number#2}}% obsolete \setuevalue{\c!reset#1}{\strc_labels_reset {#1}{\number#2}}% obsolete %setuevalue{\c!set #1}{\strc_labels_set {#1}{\number#2}}% obsolete \setuevalue {#1}{\strc_labels_command{#1}}% \fi} % todo: \strc_labels_command for user \appendtoks \ifx\currentlabelparent\empty % clone => parent | subclone => clone | subsubclone => subclone \let\currentlabelsub\empty \strc_define_commands_label {\currentlabelsub\currentlabel}% \plusone \empty \edef\p_levels{\labelparameter\c!levels}% \dostepwiserecurse\plustwo\p_levels\plusone {\strc_define_commands_label {\v!sub\currentlabelsub\currentlabel}% \recurselevel {\currentlabelsub\currentlabel}% \edef\currentlabelsub{\v!sub\currentlabelsub}}% \else % clone => parent | subclone => subparent | subsubclone => subsubparent \let\currentlabelsub\empty \edef\p_levels{\labelparameter\c!levels}% \dorecurse\p_levels {\strc_define_commands_label {\currentlabelsub\currentlabel}% \recurselevel {\currentlabelsub\currentlabelparent}% \edef\currentlabelsub{\v!sub\currentlabelsub}}% \fi \edef\p_counter{\labelparameter\s!counter}% can inherit from parent \ifx\p_counter\empty % \let\p_counter\currentlabel \fi \doifcounterelse\p_counter\donothing{\strc_labels_define_counter\p_counter}% \letlabelparameter\s!counter\p_counter \to \everydefinelabel \let\p_strc_constructions_title \empty \let\p_strc_constructions_number\empty \setvalue{\??constructioninitializer\v!label}% {\let\currentlabel \currentconstruction \let\constructionparameter \labelparameter \let\detokenizedconstructionparameter\detokenizedlabelparameter \let\letconstructionparameter \letlabelparameter \let\useconstructionstyleandcolor \uselabelstyleandcolor \let\setupcurrentconstruction \setupcurrentlabel % shared with enumerations \edef\p_strc_constructions_number{\constructionparameter\c!number}% \ifx\p_strc_constructions_number\v!yes \settrue\c_strc_constructions_number_state \iftrialtypesetting \strc_counters_save\currentconstructionnumber \fi \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel \else \setfalse\c_strc_constructions_number_state \fi \edef\p_strc_constructions_title{\constructionparameter\c!title}% \ifx\p_strc_constructions_title\v!yes \settrue\c_strc_constructions_title_state \else \setfalse\c_strc_constructions_title_state \fi} \setvalue{\??constructionfinalizer\v!label}% {\ifconditional\c_strc_constructions_number_state \iftrialtypesetting \strc_counters_restore\currentconstructionnumber \fi \fi} %D Interfaces: \let\strc_labels_command\strc_descriptions_command \unexpanded\def\strc_labels_next {\strc_constructions_next_indeed \namedlabelparameter} % #1#2 \unexpanded\def\strc_labels_reset{\strc_constructions_reset_indeed\namedlabelparameter} % #1#2 %unexpanded\def\strc_labels_set {\strc_constructions_set_indeed \namedlabelparameter} % #1#2 % similar to enumerations \def\strc_labels_define_counter#1% {\definecounter[#1]% \registerlabelcounter{#1}} \appendtoks \synchronizelabelcounters \to \everysetuplabel \appendtoks \synchronizelabelcounters \to \everydefinelabel % no start stop here \expandafter\let\csname\??constructionmainhandler\v!label\expandafter\endcsname\csname\??constructionmainhandler\v!description\endcsname \unexpanded\setevalue{\??constructioncommandhandler\v!label}% {\csname\??constructionstarthandler\v!construction\endcsname \csname\??constructionstophandler \v!construction\endcsname \endgroup} \unexpanded\setvalue{\??constructiontexthandler\v!label}% {\begingroup \useconstructionstyleandcolor\c!headstyle\c!headcolor \strc_labels_text \endgroup} \let\strc_labels_text\strc_enumerations_text % inline variant \defineconstructionalternative [\v!intext] [\c!renderingsetup=\??constructionrenderings:\v!intext] \startsetups[\??constructionrenderings:\v!intext] \dontleavehmode\box\constructionheadbox \stopsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-wrd.mkiv0000644000175000017500000000335311754241457024312 0ustar norbertnorbert%D \module %D [ file=lang-wrd, %D version=2006.XX.XX, %D title=\CONTEXT\ Language Macros, %D subtitle=Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Experimental. \writestatus{loading}{ConTeXt Language Macros / Checking} \registerctxluafile{lang-wrd}{1.001} \unprotect % \loadspellchecklist[en][words-en.txt] % \loadspellchecklist[us][words-en.txt] % \loadspellchecklist[nl][words-nl.txt] % \setupspellchecking[state=start,method=1] % % \setupspellchecking[state=start,method=2] % ... % \typefile{\jobname.words} % % beware, maybe some day we will honour grouping % % 1: spell checking % 2: word counting % 3: language coloring \installcorenamespace{spell} \installdirectcommandhandler \??spell {spellchecking} \appendtoks \doifelse{\directspellcheckingparameter\c!state}\v!start {\ctxcommand{enablespellchecking { method = "\directspellcheckingparameter\c!method", list = "\directspellcheckingparameter\c!list" }}} {\ctxcommand{disablespellchecking()}}% \to \everysetupspellchecking \unexpanded\def\loadspellchecklist {\dodoubleempty\lang_spellchecking_load_list} \def\lang_spellchecking_load_list[#1][#2]% {\ctxcommand{loadspellchecklist("#1","#2")}} \setupspellchecking [\c!state=\v!stop, \c!method=1, \c!list=] \definecolor[word:yes] [g=.75] \definecolor[word:no] [r=.75] %definecolor[word:unset] [s=.75] \definecolor[word:en] [b=.75] \definecolor[word:de] [r=.75] \definecolor[word:nl] [g=.75] \definecolor[word:unknown][r=.75,g=.75] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-om2cml.xsl0000644000175000017500000012266511024176655024102 0ustar norbertnorbert ]> -10 16 0 1 times b b open closed open-closed closed-open all above below 16 Content MathML cannot add type for the object after this comment. x x 1 0.5 0 0.5 0 ERROR: Error Type: Error occured in CD: Error occured in symbol: ERROR: Error Type: Description: 0 1 π &NaN; γ &true; &false; x context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-tbo.mkii0000644000175000017500000001632311754241457024271 0ustar norbertnorbert%D \module %D [ file=enco-tbo, %D version=2000.05.07, % 2001.8.4, %D title=\CONTEXT\ Encoding Macros, %D subtitle=TeXBaseOne Encoding, %D author={Patrick Gundlach, Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmapping[8r] \resetcaserange 128 to 255 \definecasemap 228 228 196 \definecasemap 196 228 196 \definecasemap 235 235 203 \definecasemap 203 235 203 \definecasemap 239 239 207 \definecasemap 207 239 207 \definecasemap 246 246 214 \definecasemap 214 246 214 \definecasemap 252 252 220 \definecasemap 220 252 220 \definecasemap 255 255 159 \definecasemap 159 255 159 \definecasemap 225 225 193 \definecasemap 193 225 193 \definecasemap 233 233 201 \definecasemap 201 233 201 \definecasemap 237 237 205 \definecasemap 205 237 205 \definecasemap 243 243 211 \definecasemap 211 243 211 \definecasemap 250 250 218 \definecasemap 218 250 218 \definecasemap 253 253 221 \definecasemap 221 253 221 \definecasemap 224 224 192 \definecasemap 192 224 192 \definecasemap 232 232 200 \definecasemap 200 232 200 \definecasemap 236 236 204 \definecasemap 204 236 204 \definecasemap 242 242 210 \definecasemap 210 242 210 \definecasemap 249 249 217 \definecasemap 217 249 217 \definecasemap 226 226 194 \definecasemap 194 226 194 \definecasemap 234 234 202 \definecasemap 202 234 202 \definecasemap 238 238 206 \definecasemap 206 238 206 \definecasemap 244 244 212 \definecasemap 212 244 212 \definecasemap 251 251 219 \definecasemap 219 251 219 \definecasemap 227 227 195 \definecasemap 195 227 195 \definecasemap 241 241 209 \definecasemap 209 241 209 \definecasemap 245 245 213 \definecasemap 213 245 213 \stopmapping \startencoding[8r] \definecharacter textacute 180 \definecharacter textbreve 11 \definecharacter textcaron 16 \definecharacter textcedilla 184 \definecharacter textcircumflex 136 \definecharacter textdiaeresis 168 \definecharacter textdotaccent 1 \definecharacter textgrave 30 \definecharacter texthungarumlaut 5 \definecharacter textmacron 175 \definecharacter textogonek 8 \definecharacter textring 9 \definecharacter texttilde 152 \definecharacter dotlessi 17 %definecharacter dotlessj 18 \definecharacter endash 150 \definecharacter emdash 151 \definecharacter oeligature 156 \definecharacter OEligature 140 \definecharacter aeligature 230 \definecharacter AEligature 198 \definecharacter ssharp 223 \definecharacter thorn 254 \definecharacter Thorn 222 \definecharacter exclamdown 161 \definecharacter questiondown 191 \definecharacter copyright 169 \definecharacter registered 174 \definecharacter trademark 153 \definecharacter sectionmark 167 \definecharacter paragraphmark 182 \definecharacter onequarter 188 \definecharacter onehalf 189 \definecharacter threequarter 190 \definecharacter onesuperior 185 \definecharacter twosuperior 178 \definecharacter threesuperior 179 \definecharacter textcent 162 \definecharacter textcurrency 164 \definecharacter texteuro 128 \definecharacter textflorin 131 \definecharacter textsterling 163 \definecharacter textyen 165 \definecharacter percent 37 \definecharacter perthousand 137 \definecharacter periodcentered 183 \definecharacter softhyphen 173 \definecharacter textasciicircum 94 \definecharacter textasciitilde 126 \definecharacter textslash 47 \definecharacter textbackslash 92 \definecharacter textbraceleft 123 \definecharacter textbraceright 125 \definecharacter textunderscore 95 \definecharacter textbrokenbar 166 \definecharacter textbullet 149 \definecharacter textdag 134 \definecharacter textddag 135 \definecharacter textdegree 176 \definecharacter textdiv 247 \definecharacter textellipsis 133 \definecharacter textfraction 4 \definecharacter textlognot 172 \definecharacter textminus 12 \definecharacter textmu 181 \definecharacter textmultiply 215 \definecharacter textpm 177 \definecharacter quotedbl 34 \definecharacter quotedblbase 132 \definecharacter quotedblleft 147 \definecharacter quotedblright 148 \definecharacter quotesingle 31 \definecharacter quotesinglebase 130 \definecharacter quoteleft 96 \definecharacter quoteright 39 \definecharacter guilsingleleft 139 \definecharacter guilsingleright 155 \definecharacter leftguillemot 171 \definecharacter rightguillemot 187 \definecharacter aacute 225 \definecharacter Aacute 193 \definecharacter eacute 233 \definecharacter Eacute 201 \definecharacter iacute 237 \definecharacter Iacute 205 \definecharacter oacute 243 \definecharacter Oacute 211 \definecharacter uacute 250 \definecharacter Uacute 218 \definecharacter Yacute 221 \definecharacter yacute 253 \definecharacter scaron 154 \definecharacter Scaron 138 %definecharacter Zcaron 141 \definecharacter ccedilla 231 \definecharacter Ccedilla 199 \definecharacter acircumflex 226 \definecharacter Acircumflex 194 \definecharacter ecircumflex 234 \definecharacter Ecircumflex 202 \definecharacter icircumflex 238 \definecharacter Icircumflex 206 \definecharacter ocircumflex 244 \definecharacter Ocircumflex 212 \definecharacter ucircumflex 251 \definecharacter Ucircumflex 219 \definecharacter adiaeresis 228 \definecharacter Adiaeresis 196 \definecharacter ediaeresis 235 \definecharacter Ediaeresis 203 \definecharacter idiaeresis 239 \definecharacter Idiaeresis 207 \definecharacter odiaeresis 246 \definecharacter Odiaeresis 214 \definecharacter udiaeresis 252 \definecharacter Udiaeresis 220 \definecharacter ydiaeresis 255 \definecharacter Ydiaeresis 159 \definecharacter agrave 224 \definecharacter Agrave 192 \definecharacter egrave 232 \definecharacter Egrave 200 \definecharacter igrave 236 \definecharacter Igrave 204 \definecharacter ograve 242 \definecharacter Ograve 210 \definecharacter ugrave 249 \definecharacter Ugrave 217 \definecharacter aring 229 \definecharacter Aring 197 \definecharacter lstroke 7 \definecharacter Lstroke 6 \definecharacter ostroke 248 \definecharacter Ostroke 216 \definecharacter atilde 227 \definecharacter Atilde 195 \definecharacter ntilde 241 \definecharacter Ntilde 209 \definecharacter otilde 245 \definecharacter Otilde 213 \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-ini.lua0000644000175000017500000000406612161703335024141 0ustar norbertnorbertif not modules then modules = { } end modules ['type-ini'] = { version = 1.001, comment = "companion to type-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- more code will move here local commands, context = commands, context local gsub = string.gsub local report_typescripts = logs.reporter("fonts","typescripts") local patterns = { "type-imp-%s.mkiv", "type-imp-%s.tex", "type-%s.mkiv", "type-%s.tex" } -- this will be imp only local function action(name,foundname) -- context.startreadingfile() -- context.unprotect() -- context.pushendofline() -- context.input(foundname) -- context.popendofline() -- context.protect() -- context.stopreadingfile() context.loadfoundtypescriptfile(foundname) end local name_one, name_two local function failure_two(name) report_typescripts("unknown library %a or %a",name_one,name_two) end local function failure_one(name) name_two = gsub(name,"%-.*$","") if name_two == name then report_typescripts("unknown library %a",name_one) else commands.uselibrary { name = name_two, patterns = patterns, action = action, failure = failure_two, onlyonce = false, -- will become true } end end function commands.doprocesstypescriptfile(name) name_one = gsub(name,"^type%-","") commands.uselibrary { name = name_one, patterns = patterns, action = action, failure = failure_one, onlyonce = false, -- will become true } end local patterns = { "type-imp-%s.mkiv", "type-imp-%s.tex" } local function failure(name) report_typescripts("unknown library %a",name) end function commands.loadtypescriptfile(name) -- a more specific name commands.uselibrary { name = gsub(name,"^type%-",""), patterns = patterns, action = action, failure = failure, onlyonce = false, -- will become true } end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-xml.mkiv0000644000175000017500000000577611754241457024363 0ustar norbertnorbert%D \module %D [ file=strc-xml, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=XML Processing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / XML Processing} % This might disappear. \unprotect \startxmlsetups xml:ctx:internal:setup \xmlsetsetup{#1}{ctx:genericentry} {xml:ctx:genericentry} \xmlsetsetup{#1}{ctx:sectionentry} {xml:ctx:sectionentry} \xmlsetsetup{#1}{ctx:registerentry}{xml:ctx:registerentry} \stopxmlsetups \xmlregistersetup{xml:ctx:internal:setup} \startxmlsetups xml:ctx:genericentry \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:ctx:sectionentry \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:ctx:registerentry \xmlflush{#1} \stopxmlsetups \protect \endinput % test.xml
Some <b>bold</b> title <b>bold <i>bold</i> oeps</b> and more

a paragraph of text

another paragraph of text

Another <b>bold</b> title <b>bold <i>bold</i> oeps</b> and more

a paragraph of text

another paragraph of text

% test.tex \setuphead[chapter][expansion=xml] \startxmlsetups xml:demo:define:base \xmlsetsetup{demo}{document|section|p|b|i}{xml:demo:*} \stopxmlsetups \xmlregisterdocumentsetup{demo}{xml:demo:define:base} \startxmlsetups xml:demo:document \title{Contents} \placelist[chapter] \page \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:demo:section \chapter{\xmltext{#1}{/title}} \xmlfirst{#1}{/content} \stopxmlsetups \startxmlsetups xml:demo:p \xmlflush{#1}\endgraf \stopxmlsetups \startxmlsetups xml:demo:b \bgroup\bf\xmlflush{#1}\egroup \stopxmlsetups \startxmlsetups xml:demo:i \bgroup\it\xmlflush{#1}\egroup \stopxmlsetups \starttext \xmlprocessfile{demo}{oeps.xml}{} \stoptext % example by thomas: \startbuffer[test]
<emph>MyTitle</emph> Hello world
\stopbuffer \startxmlsetups xml:mysetups \xmlsetsetup{\xmldocument}{auth|section|title|content|emph}{xml:*} \stopxmlsetups \xmlregistersetup{xml:mysetups} \startxmlsetups xml:auth \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:section \xmlflush{#1}\par \midaligned{\hl[5]} \stopxmlsetups \startxmlsetups xml:title \section{\xmlflush{#1}} \stopxmlsetups \startxmlsetups xml:content \xmlflush{#1}\par \stopxmlsetups \startxmlsetups xml:emph {\bgroup\em \xmlflush{#1}\egroup} \stopxmlsetups \setuphead [section] [style=normal,number=no,expansion=yes,page=yes] \starttext \xmlprocessbuffer{main}{test}{} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/m-timing.mkiv0000644000175000017500000000737112130411274024305 0ustar norbertnorbert%D \module %D [ file=m-timing, %D version=2007.12.23, %D title=\CONTEXT\ Modules, %D subtitle=Timing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifdefined\ShowNamedUsage \endinput \fi %D Written at the end of 2007, this module is dedicated to Taco. Reaching this %D point in \LUATEX\ was a non trivial effort. By visualizing a bit what happens %D when pages come out of \LUATEX, you may get an idea what is involved. It took %D much time an dedication to reach this point in the development. Add to that %D those daily Skype intense discussion, testing and debugging moments. Time flies %D but progress is impressive. The motto of this module could be: what you see %D is what you get. An there is much more to come \unknown. % \usemodule[timing] % \setupcolors[state=start] % \starttext % \dorecurse{200}{\input tufte \par} \ShowUsage{} % \stoptext \definecolor[usage:line] [darkred] \definecolor[usage:time] [darkblue] \definecolor[usage:frame][darkgray] \ctxloadluafile{trac-tim}{} \startluacode local progress = moduledata.progress function progress.show(filename,parameters,nodes,other) for n, name in pairs(parameters or progress.parameters()) do context.ShowNamedUsage(filename or progress.defaultfilename,name,other or "") end for n, name in pairs(nodes or progress.nodes(filename)) do context.ShowNamedUsage(filename or progress.defaultfilename,name,other or "") end end \stopluacode % \everyfirstshipout \startnotmode[no-timing] \appendtoks\ctxlua{moduledata.progress.store()}\to\everystarttext \appendtoks\ctxlua{moduledata.progress.store()}\to\everyshipout \ctxlua{luatex.registerstopactions(function() moduledata.progress.save() end)} \stopnotmode \unexpanded\def\ShowNamedUsage#1#2#3% {\setbox\scratchbox\vbox\bgroup \startMPcode begingroup ; save p, q, b, h, w ; path p, q, b ; numeric h, w ; p := \cldcontext{moduledata.progress.path("#1","#2")} ; % p := p shifted -llcorner p ; if bbwidth(p) > 0 : h := 100 ; w := 2 * h ; w := \the\textwidth-3pt ; % correct for pen p := p xstretched w ; b := boundingbox (llcorner p -- llcorner p shifted (w,h)) ; pickup pencircle scaled 3pt ; linecap := butt ; draw b withcolor \MPcolor{usage:frame} ; draw p withcolor \MPcolor{usage:line} ; if ("#3" <> "") and ("#3" <> "#2") : q := \cldcontext{moduledata.progress.path("#1","#3")} ; % q := q shifted -llcorner q ; if bbwidth(q) > 1 : q := q xstretched w ; pickup pencircle scaled 1.5pt ; linecap := butt ; draw q withcolor \MPcolor{usage:time} ; fi ; fi ; fi ; endgroup ; \stopMPcode \egroup \scratchdimen\wd\scratchbox \ifdim\scratchdimen>\zeropoint \startlinecorrection \box\scratchbox \endgraf \hbox to \scratchdimen{\tttf\strut\detokenize{#2}\hss min:\cldcontext{moduledata.progress.bot("#1","\detokenize{#2}")}, % max:\cldcontext{moduledata.progress.top("#1","\detokenize{#2}")}, % pages:\cldcontext{moduledata.progress.pages("#1")}% }% \stoplinecorrection \fi} \unexpanded\def\LoadUsage #1{\ctxlua{moduledata.progress.convert("#1")}} \unexpanded\def\ShowUsage #1{\ctxlua{moduledata.progress.show("#1",nil,nil,"elapsed_time")}} \unexpanded\def\ShowMemoryUsage#1{\ctxlua{moduledata.progress.show("#1",nil,{}, "elapsed_time")}} \unexpanded\def\ShowNodeUsage #1{\ctxlua{moduledata.progress.show("#1",{},nil, "elapsed_time")}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-mathml.lua0000644000175000017500000006706312130411274024132 0ustar norbertnorbertif not modules then modules = { } end modules ['x-mathml'] = { version = 1.001, comment = "companion to x-mathml.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This needs an upgrade to the latest greatest mechanisms. local type, next = type, next local format, lower, find, gsub = string.format, string.lower, string.find, string.gsub local strip = string.strip local xmlsprint, xmlcprint, xmltext, xmlcontent = xml.sprint, xml.cprint, xml.text, xml.content local getid = lxml.getid local utfchar, utfcharacters, utfvalues = utf.char, utf.characters, utf.values local lpegmatch = lpeg.match local mathml = { } moduledata.mathml = mathml lxml.mathml = mathml -- for the moment -- an alternative is to remap to private codes, where we can have -- different properties .. to be done; this will move and become -- generic; we can then make the private ones active in math mode -- todo: handle opening/closing mo's here ... presentation mml is such a mess ... characters.registerentities() local doublebar = utfchar(0x2016) local n_replacements = { -- [" "] = utfchar(0x2002), -- "&textspace;" -> tricky, no &; in mkiv ["."] = "{.}", [","] = "{,}", [" "] = "", } local l_replacements = { -- in main table ["|"] = "\\mmlleftdelimiter\\vert", ["{"] = "\\mmlleftdelimiter\\lbrace", ["("] = "\\mmlleftdelimiter(", ["["] = "\\mmlleftdelimiter[", ["<"] = "\\mmlleftdelimiter<", [doublebar] = "\\mmlleftdelimiter\\Vert", } local r_replacements = { -- in main table ["|"] = "\\mmlrightdelimiter\\vert", ["}"] = "\\mmlrightdelimiter\\rbrace", [")"] = "\\mmlrightdelimiter)", ["]"] = "\\mmlrightdelimiter]", [">"] = "\\mmlrightdelimiter>", [doublebar] = "\\mmlrightdelimiter\\Vert", } -- todo: play with asciimode and avoid mmlchar local o_replacements = { -- in main table ["@l"] = "\\mmlleftdelimiter.", ["@r"] = "\\mmlrightdelimiter.", ["{"] = "\\mmlleftdelimiter \\lbrace", ["}"] = "\\mmlrightdelimiter\\rbrace", ["|"] = "\\mmlleftorrightdelimiter\\vert", [doublebar] = "\\mmlleftorrightdelimiter\\Vert", ["("] = "\\mmlleftdelimiter(", [")"] = "\\mmlrightdelimiter)", ["["] = "\\mmlleftdelimiter[", ["]"] = "\\mmlrightdelimiter]", -- ["<"] = "\\mmlleftdelimiter<", -- [">"] = "\\mmlrightdelimiter>", ["#"] = "\\mmlchar{35}", ["$"] = "\\mmlchar{36}", -- $ ["%"] = "\\mmlchar{37}", ["&"] = "\\mmlchar{38}", ["^"] = "\\mmlchar{94}{}", -- strange, sometimes luatex math sees the char instead of \char ["_"] = "\\mmlchar{95}{}", -- so we need the {} ["~"] = "\\mmlchar{126}", [" "] = "", ["°"] = "^\\circ", -- hack -- [utfchar(0xF103C)] = "\\mmlleftdelimiter<", [utfchar(0xF1026)] = "\\mmlchar{38}", -- [utfchar(0xF103E)] = "\\mmlleftdelimiter>", } local simpleoperatorremapper = utf.remapper(o_replacements) --~ languages.data.labels.functions local i_replacements = { ["sin"] = "\\mathopnolimits{sin}", ["cos"] = "\\mathopnolimits{cos}", ["abs"] = "\\mathopnolimits{abs}", ["arg"] = "\\mathopnolimits{arg}", ["codomain"] = "\\mathopnolimits{codomain}", ["curl"] = "\\mathopnolimits{curl}", ["determinant"] = "\\mathopnolimits{det}", ["divergence"] = "\\mathopnolimits{div}", ["domain"] = "\\mathopnolimits{domain}", ["gcd"] = "\\mathopnolimits{gcd}", ["grad"] = "\\mathopnolimits{grad}", ["identity"] = "\\mathopnolimits{id}", ["image"] = "\\mathopnolimits{image}", ["lcm"] = "\\mathopnolimits{lcm}", ["lim"] = "\\mathopnolimits{lim}", ["max"] = "\\mathopnolimits{max}", ["median"] = "\\mathopnolimits{median}", ["min"] = "\\mathopnolimits{min}", ["mode"] = "\\mathopnolimits{mode}", ["mod"] = "\\mathopnolimits{mod}", ["polar"] = "\\mathopnolimits{Polar}", ["exp"] = "\\mathopnolimits{exp}", ["ln"] = "\\mathopnolimits{ln}", ["log"] = "\\mathopnolimits{log}", ["sin"] = "\\mathopnolimits{sin}", ["arcsin"] = "\\mathopnolimits{arcsin}", ["sinh"] = "\\mathopnolimits{sinh}", ["arcsinh"] = "\\mathopnolimits{arcsinh}", ["cos"] = "\\mathopnolimits{cos}", ["arccos"] = "\\mathopnolimits{arccos}", ["cosh"] = "\\mathopnolimits{cosh}", ["arccosh"] = "\\mathopnolimits{arccosh}", ["tan"] = "\\mathopnolimits{tan}", ["arctan"] = "\\mathopnolimits{arctan}", ["tanh"] = "\\mathopnolimits{tanh}", ["arctanh"] = "\\mathopnolimits{arctanh}", ["cot"] = "\\mathopnolimits{cot}", ["arccot"] = "\\mathopnolimits{arccot}", ["coth"] = "\\mathopnolimits{coth}", ["arccoth"] = "\\mathopnolimits{arccoth}", ["csc"] = "\\mathopnolimits{csc}", ["arccsc"] = "\\mathopnolimits{arccsc}", ["csch"] = "\\mathopnolimits{csch}", ["arccsch"] = "\\mathopnolimits{arccsch}", ["sec"] = "\\mathopnolimits{sec}", ["arcsec"] = "\\mathopnolimits{arcsec}", ["sech"] = "\\mathopnolimits{sech}", ["arcsech"] = "\\mathopnolimits{arcsech}", [" "] = "", ["false"] = "{\\mr false}", ["notanumber"] = "{\\mr NaN}", ["otherwise"] = "{\\mr otherwise}", ["true"] = "{\\mr true}", ["declare"] = "{\\mr declare}", ["as"] = "{\\mr as}", } -- we could use a metatable or when accessing fallback on the -- key but at least we now have an overview local csymbols = { arith1 = { lcm = "lcm", big_lcm = "lcm", gcd = "gcd", big_gcd = "big_gcd", plus = "plus", unary_minus = "minus", minus = "minus", times = "times", divide = "divide", power = "power", abs = "abs", root = "root", sum = "sum", product = "product", }, fns = { domain = "domain", range = "codomain", image = "image", identity = "ident", -- left_inverse = "", -- right_inverse = "", inverse = "inverse", left_compose = "compose", lambda = "labmda", }, linalg1 = { vectorproduct = "vectorproduct", scalarproduct = "scalarproduct", outerproduct = "outerproduct", transpose = "transpose", determinant = "determinant", vector_selector = "selector", -- matrix_selector = "matrix_selector", }, logic1 = { equivalent = "equivalent", ["not"] = "not", ["and"] = "and", -- big_and = "", ["xor"] = "xor", -- big_xor = "", ["or"] = "or", -- big-or = "", implies = "implies", ["true"] = "true", ["false"] = "false", }, nums1 = { -- based_integer = "based_integer" rational = "rational", inifinity = "infinity", e = "expenonentiale", i = "imaginaryi", pi = "pi", gamma = "gamma", NaN = "NaN", }, relation1 = { eq = "eq", lt = "lt", gt = "gt", neq = "neq", leq = "leq", geq = "geq", approx = "approx", }, set1 = { cartesian_product = "cartesianproduct", empty_set = "emptyset", map = "map", size = "card", -- suchthat = "suchthat", set = "set", intersect = "intersect", -- big_intersect = "", union = "union", -- big_union = "", setdiff = "setdiff", subset = "subset", ["in"] = "in", notin = "notin", prsubset = "prsubset", notsubset = "notsubset", notprsubset = "notprsubset", }, veccalc1 = { divergence = "divergence", grad = "grad", curl = "curl", laplacian = "laplacian", Laplacian = "laplacian", }, calculus1 = { diff = "diff", -- nthdiff = "", partialdiff = "partialdiff", int = "int", -- defint = "defint", }, integer1 = { factorof = "factorof", factorial = "factorial", quotient = "quotient", remainder = "rem", }, linalg2 = { vector = "vector", matrix = "matrix", matrixrow = "matrixrow", }, mathmkeys = { -- equiv = "", -- contentequiv = "", -- contentequiv_strict = "", }, rounding1 = { ceiling = "ceiling", floor = "floor", -- trunc = "trunc", -- round = "round", }, setname1 = { P = "primes", N = "naturalnumbers", Z = "integers", rationals = "rationals", R = "reals", complexes = "complexes", }, complex1 = { -- complex_cartesian = "complex_cartesian", -- ci ? real = "real", imaginary = "imaginary", -- complex_polar = "complex_polar", -- ci ? argument = "arg", conjugate = "conjugate", }, interval1 = { -- not an apply -- integer_interval = "integer_interval", interval = "interval", interval_oo = { tag = "interval", closure = "open" }, interval_cc = { tag = "interval", closure = "closed" }, interval_oc = { tag = "interval", closure = "open-closed" }, interval_co = { tag = "interval", closure = "closed-open" }, }, linalg3 = { -- vector = "vector.column", -- matrixcolumn = "matrixcolumn", -- matrix = "matrix.column", }, minmax1 = { min = "min", -- big_min = "", max = "max", -- big_max = "", }, piece1 = { piecewise = "piecewise", piece = "piece", otherwise = "otherwise", }, error1 = { -- unhandled_symbol = "", -- unexpected_symbol = "", -- unsupported_CD = "", }, limit1 = { -- limit = "limit", -- both_sides = "both_sides", -- above = "above", -- below = "below", -- null = "null", tendsto = "tendsto", }, list1 = { -- map = "", -- suchthat = "", -- list = "list", }, multiset1 = { size = { tag = "card", type = "multiset" }, cartesian_product = { tag = "cartesianproduct", type = "multiset" }, empty_set = { tag = "emptyset", type = "multiset" }, -- multi_set = { tag = "multiset", type = "multiset" }, intersect = { tag = "intersect", type = "multiset" }, -- big_intersect = "", union = { tag = "union", type = "multiset" }, -- big_union = "", setdiff = { tag = "setdiff", type = "multiset" }, subset = { tag = "subset", type = "multiset" }, ["in"] = { tag = "in", type = "multiset" }, notin = { tag = "notin", type = "multiset" }, prsubset = { tag = "prsubset", type = "multiset" }, notsubset = { tag = "notsubset", type = "multiset" }, notprsubset = { tag = "notprsubset", type = "multiset" }, }, quant1 = { forall = "forall", exists = "exists", }, s_dist = { -- mean = "mean.dist", -- sdev = "sdev.dist", -- variance = "variance.dist", -- moment = "moment.dist", }, s_data = { mean = "mean", sdev = "sdev", variance = "vriance", mode = "mode", median = "median", moment = "moment", }, transc1 = { log = "log", ln = "ln", exp = "exp", sin = "sin", cos = "cos", tan = "tan", sec = "sec", csc = "csc", cot = "cot", sinh = "sinh", cosh = "cosh", tanh = "tanh", sech = "sech", csch = "cscs", coth = "coth", arcsin = "arcsin", arccos = "arccos", arctan = "arctan", arcsec = "arcsec", arcscs = "arccsc", arccot = "arccot", arcsinh = "arcsinh", arccosh = "arccosh", arctanh = "arstanh", arcsech = "arcsech", arccsch = "arccsch", arccoth = "arccoth", }, } function xml.functions.remapmmlcsymbol(e) local at = e.at local cd = at.cd if cd then cd = csymbols[cd] if cd then local tx = e.dt[1] if tx and tx ~= "" then local tg = cd[tx] if tg then at.cd = nil at.cdbase = nil e.dt = { } if type(tg) == "table" then for k, v in next, tg do if k == "tag" then e.tg = v else at[k] = v end end else e.tg = tg end end end end end end function xml.functions.remapmmlbind(e) e.tg = "apply" end function xml.functions.remapopenmath(e) local tg = e.tg if tg == "OMOBJ" then e.tg = "math" elseif tg == "OMA" then e.tg = "apply" elseif tg == "OMB" then e.tg = "apply" elseif tg == "OMS" then local at = e.at e.tg = "csymbol" e.dt = { at.name or "unknown" } at.name = nil elseif tg == "OMV" then local at = e.at e.tg = "ci" e.dt = { at.name or "unknown" } at.name = nil elseif tg == "OMI" then e.tg = "ci" end e.rn = "mml" end function mathml.checked_operator(str) context(simpleoperatorremapper(str)) end function mathml.stripped(str) context(strip(str)) end function mathml.mn(id,pattern) -- maybe at some point we need to interpret the number, but -- currently we assume an upright font local str = xmlcontent(getid(id)) or "" local rep = gsub(str,"&.-;","") local rep = gsub(rep,"(%s+)",utfchar(0x205F)) -- medspace e.g.: twenty one (nbsp is not seen) local rep = gsub(rep,".",n_replacements) context.mn(rep) end function mathml.mo(id) local str = xmlcontent(getid(id)) or "" local rep = gsub(str,"&.-;","") -- todo context(simpleoperatorremapper(rep)) end function mathml.mi(id) -- we need to strip comments etc .. todo when reading in tree local e = getid(id) local str = e.dt if type(str) == "string" then local n = #str if n == 0 then -- nothing to do elseif n == 1 then local str = gsub(str[1],"&.-;","") -- bah local rep = i_replacements[str] if not rep then rep = gsub(str,".",i_replacements) end context(rep) -- context.mi(rep) else context.xmlflush(id) -- xmlsprint or so end else context.xmlflush(id) -- xmlsprint or so end end function mathml.mfenced(id) -- multiple separators id = getid(id) local left, right, separators = id.at.open or "(", id.at.close or ")", id.at.separators or "," local l, r = l_replacements[left], r_replacements[right] context.enabledelimiter() if l then context(l_replacements[left] or o_replacements[left] or "") else context(o_replacements["@l"]) context(left) end context.disabledelimiter() local collected = lxml.filter(id,"/*") -- check the * if collected then local n = #collected if n == 0 then -- skip elseif n == 1 then xmlsprint(collected[1]) -- to be checked else local t = utf.split(separators,true) for i=1,n do xmlsprint(collected[i]) -- to be checked if i < n then local m = t[i] or t[#t] or "" if m == "|" then m = "\\enabledelimiter\\middle|\\relax\\disabledelimiter" elseif m == doublebar then m = "\\enabledelimiter\\middle|\\relax\\disabledelimiter" elseif m == "{" then m = "\\{" elseif m == "}" then m = "\\}" end context(m) end end end end context.enabledelimiter() if r then context(r_replacements[right] or o_replacements[right] or "") else context(right) context(o_replacements["@r"]) end context.disabledelimiter() end --~ local function flush(e,tag,toggle) --~ if toggle then --~ context("^{") --~ else --~ context("_{") --~ end --~ if tag == "none" then --~ context("{}") --~ else --~ xmlsprint(e.dt) --~ end --~ if not toggle then --~ context("}") --~ else --~ context("}{}") --~ end --~ return not toggle --~ end local function flush(e,tag,toggle) if tag == "none" then -- if not toggle then context("{}") -- {} starts a new ^_ set -- end elseif toggle then context("^{") xmlsprint(e.dt) context("}{}") -- {} starts a new ^_ set else context("_{") xmlsprint(e.dt) context("}") end return not toggle end function mathml.mmultiscripts(id) local done, toggle = false, false for e in lxml.collected(id,"/*") do local tag = e.tg if tag == "mprescripts" then context("{}") done = true elseif done then toggle = flush(e,tag,toggle) end end local done, toggle = false, false for e in lxml.collected(id,"/*") do local tag = e.tg if tag == "mprescripts" then break elseif done then toggle = flush(e,tag,toggle) else xmlsprint(e.dt) done = true end end end local columnalignments = { left = "flushleft", right = "flushright", center = "middle", } local rowalignments = { top = "high", bottom = "low", center = "lohi", baseline = "top", axis = "lohi", } local frametypes = { none = "off", solid = "on", dashed = "on", } -- crazy element ... should be a proper structure instead of such a mess function mathml.mcolumn(root) root = getid(root) local matrix, numbers = { }, 0 local function collect(m,e) local tag = e.tg if tag == "mi" or tag == "mn" or tag == "mo" or tag == "mtext" then local str = xmltext(e) str = gsub(str,"&.-;","") for s in utfcharacters(str) do m[#m+1] = { tag, s } end if tag == "mn" then local n = utf.len(str) if n > numbers then numbers = n end end elseif tag == "mspace" or tag == "mline" then local str = e.at.spacing or "" for s in utfcharacters(str) do m[#m+1] = { tag, s } end -- elseif tag == "mline" then -- m[#m+1] = { tag, e } end end for e in lxml.collected(root,"/*") do local m = { } matrix[#matrix+1] = m if e.tg == "mrow" then -- only one level for e in lxml.collected(e,"/*") do collect(m,e) end else collect(m,e) end end context.halign() context.bgroup() context([[\hss\startimath\alignmark\stopimath\aligntab\startimath\alignmark\stopimath\cr]]) for i=1,#matrix do local m = matrix[i] local mline = true for j=1,#m do if m[j][1] ~= "mline" then mline = false break end end if mline then context.noalign([[\obeydepth\nointerlineskip]]) end for j=1,#m do local mm = m[j] local tag, chr = mm[1], mm[2] if tag == "mline" then -- This code is under construction ... I need some real motivation -- to deal with this kind of crap. --~ local n, p = true, true --~ for c=1,#matrix do --~ local mc = matrix[c][j] --~ if mc then --~ mc = mc[2] --~ if type(mc) ~= "string" then --~ n, p = false, false --~ break --~ elseif find(mc,"^[%d ]$") then -- rangecheck is faster --~ -- digit --~ elseif not find(mc,"^[%.%,]$") then -- rangecheck is faster --~ -- punctuation --~ else --~ n = false --~ break --~ end --~ end --~ end --~ if n then --~ chr = "\\mmlmcolumndigitrule" --~ elseif p then --~ chr = "\\mmlmcolumnpunctuationrule" --~ else --~ chr = "\\mmlmcolumnsymbolrule" -- should be widest char --~ end chr = "\\hrulefill" elseif tag == "mspace" then chr = "\\mmlmcolumndigitspace" -- utfchar(0x2007) end if j == numbers + 1 then context("\\aligntab") end local nchr = n_replacements[chr] context(nchr or chr) end context.crcr() end context.egroup() end local spacesplitter = lpeg.tsplitat(" ") function mathml.mtable(root) -- todo: align, rowspacing, columnspacing, rowlines, columnlines root = getid(root) local at = root.at local rowalign = at.rowalign local columnalign = at.columnalign local frame = at.frame local rowaligns = rowalign and lpegmatch(spacesplitter,rowalign) local columnaligns = columnalign and lpegmatch(spacesplitter,columnalign) local frames = frame and lpegmatch(spacesplitter,frame) local framespacing = at.framespacing or "0pt" local framespacing = at.framespacing or "-\\ruledlinewidth" -- make this an option context.bTABLE { frame = frametypes[frame or "none"] or "off", offset = framespacing } for e in lxml.collected(root,"/(mml:mtr|mml:mlabeledtr)") do context.bTR() local at = e.at local col = 0 local rfr = at.frame or (frames and frames [#frames]) local rra = at.rowalign or (rowaligns and rowaligns [#rowaligns]) local rca = at.columnalign or (columnaligns and columnaligns[#columnaligns]) local ignorelabel = e.tg == "mlabeledtr" for e in lxml.collected(e,"/mml:mtd") do -- nested we can use xml.collected col = col + 1 if ignorelabel and col == 1 then -- get rid of label, should happen at the document level else local at = e.at local rowspan, columnspan = at.rowspan or 1, at.columnspan or 1 local cra = rowalignments [at.rowalign or (rowaligns and rowaligns [col]) or rra or "center"] or "lohi" local cca = columnalignments[at.columnalign or (columnaligns and columnaligns[col]) or rca or "center"] or "middle" local cfr = frametypes [at.frame or (frames and frames [col]) or rfr or "none" ] or "off" context.bTD { align = format("{%s,%s}",cra,cca), frame = cfr, nx = columnspan, ny = rowspan } context.startimath() context.ignorespaces() xmlcprint(e) context.stopimath() context.removeunwantedspaces() context.eTD() end end -- if e.tg == "mlabeledtr" then -- context.bTD() -- xmlcprint(xml.first(e,"/!mml:mtd")) -- context.eTD() -- end context.eTR() end context.eTABLE() end function mathml.csymbol(root) root = getid(root) local at = root.at local encoding = at.encoding or "" local hash = url.hashed(lower(at.definitionUrl or "")) local full = hash.original or "" local base = hash.path or "" local text = strip(xmltext(root) or "") context.mmlapplycsymbol(full,base,encoding,text) end function mathml.menclosepattern(root) root = getid(root) local a = root.at.notation if a and a ~= "" then context("mml:enclose:",(gsub(a," +",",mml:enclose:"))) end end function xml.is_element(e,name) return type(e) == "table" and (not name or e.tg == name) end function mathml.cpolar_a(root) root = getid(root) local dt = root.dt context.mathopnolimits("Polar") context.left(false,"(") for k=1,#dt do local dk = dt[k] if xml.is_element(dk,"sep") then context(",") else xmlsprint(dk) end end context.right(false,")") end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-run.mkiv0000644000175000017500000002342212130411274024275 0ustar norbertnorbert%D \module %D [ file=page-run, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Runtime Macros} \unprotect \gdef\showprint {\dotripleempty\page_layouts_show_print} \gdef\page_layouts_show_print[#1][#2][#3]% only english {\setbuffer[crap]% \unprotect \definepapersize[X][\c!width=4em, \c!height=6em] \definepapersize[Y][\c!width=12em,\c!height=14em] \setuppapersize[X,#1][Y,#2] \setuplayout[#3] \setuplayout[\v!page] \framed [\c!offset=\v!overlay,\c!strut=\v!no, \c!width=\paperwidth,\c!height=\paperheight] {\ss ABC\par DEF}% \protect \endbuffer \framed[\c!offset=\v!overlay,\c!strut=\v!no]{\typesetbuffer[crap]}} % \switchtobodyfont[8pt] % % \startcombination[4*4] % {\showprint} {\strut} % {\showprint[][][location=middle]} {\type{location=middle}} % {\showprint[][][location=middle,marking=on]} {\type{markering=aan}\break\type{location=middle}} % {\showprint[][][location=middle,marking=on,nx=2]} {\type{markering=aan}\break\type{location=middle}\break\type{nx=2}} % {\showprint[][][location=left]} {\type{location=left}} % {\showprint[][][location=right]} {\type{location=right}} % {\showprint[][][location={left,bottom}]} {\type{location={left,bottom}}} % {\showprint[][][location={right,bottom}]} {\type{location={right,bottom}}} % {\showprint[][][nx=2,ny=1]} {\type{nx=2,ny=1}} % {\showprint[][][nx=1,ny=2]} {\type{nx=1,ny=2}} % {\showprint[][][nx=2,ny=2]} {\type{nx=2,ny=2}} % {\showprint[][][nx=2,ny=2,location=middle]} {\type{nx=2,ny=2}\break\type{location=middle}} % {\showprint[][][backoffset=3pt]} {\type{rugoffset=.5cm}} % {\showprint[][][topoffset=3pt]} {\type{kopoffset=.5cm}} % {\showprint[][][scale=1.5]} {\type{schaal=1.5}} % {\showprint[][][scale=0.8]} {\type{schaal=0.8}} % \stopcombination % % \startcombination[3*4] % {\showprint[landscape][] [location=middle]} {\type{landscape}} % {\showprint[] [landscape][location=middle]} {\strut\break\type{landscape}} % {\showprint[landscape][landscape][location=middle]} {\type{landscape}\break\type{landscape}} % {\showprint[90] [] [location=middle]} {\type{90}} % {\showprint[] [90] [location=middle]} {\strut\break\type{90}} % {\showprint[90] [90] [location=middle]} {\type{90}\break\type{90}} % {\showprint[180] [] [location=middle]} {\type{180}} % {\showprint[] [180] [location=middle]} {\strut\break\type{180}} % {\showprint[180] [180] [location=middle]} {\type{180}\break\type{180}} % {\showprint[mirrored] [] [location=middle]} {\type{mirrored}} % {\showprint[] [mirrored] [location=middle]} {\strut\break\type{mirrored}} % {\showprint[mirrored] [mirrored] [location=middle]} {\type{mirrored}\break\type{mirrored}} % \stopcombination % maybe we will have page-run.lua \startluacode local format, concat = string.format, table.concat local function todimen(name,unit,fmt) return number.todimen(tex.dimen[name],unit,fmt) end function commands.showlayoutvariables(options) if options == "" then options = "pt,cm" end local options = utilities.parsers.settings_to_hash(options) local dimensions = { "pt", "bp", "cm", "mm", "dd", "cc", "pc", "nd", "nc", "sp", "in" } local n = 0 for i=1,#dimensions do if options[dimensions[i]] then n = n + 1 end end if n == 0 then options.pt = true n = 1 end local function showdimension(name) context.NC() context.tex(interfaces.interfacedcommand(name)) context.NC() for i=1,#dimensions do local d = dimensions[i] if options[d] then context("%s%s",todimen(name,d,"%0.4f"),d) context.NC() end end context.NR() end local function showmacro(name) context.NC() context.tex(interfaces.interfacedcommand(name)) context.NC() context.getvalue(name) context.NC() context.NR() end local function reportdimension(name) local result = { } for i=1,#dimensions do local d = dimensions[i] if options[d] then result[#result+1] = format("%12s%s",todimen(name,d,"%0.4f"),d) end end commands.writestatus("layout",format("%-24s %s",interfaces.interfacedcommand(name),concat(result," "))) end if tex.count.textlevel == 0 then -- especially for Luigi: reportdimension("paperheight") reportdimension("paperwidth") reportdimension("printpaperheight") reportdimension("printpaperwidth") reportdimension("topspace") reportdimension("backspace") reportdimension("makeupheight") reportdimension("makeupwidth") reportdimension("topheight") reportdimension("topdistance") reportdimension("headerheight") reportdimension("headerdistance") reportdimension("textheight") reportdimension("footerdistance") reportdimension("footerheight") reportdimension("bottomdistance") reportdimension("bottomheight") reportdimension("leftedgewidth") reportdimension("leftedgedistance") reportdimension("leftmarginwidth") reportdimension("leftmargindistance") reportdimension("textwidth") reportdimension("rightmargindistance") reportdimension("rightmarginwidth") reportdimension("rightedgedistance") reportdimension("rightedgewidth") reportdimension("bodyfontsize") reportdimension("lineheight") else context.starttabulate { "|l|" .. string.rep("Tr|",n) } showdimension("paperheight") showdimension("paperwidth") showdimension("printpaperheight") showdimension("printpaperwidth") showdimension("topspace") showdimension("backspace") showdimension("makeupheight") showdimension("makeupwidth") showdimension("topheight") showdimension("topdistance") showdimension("headerheight") showdimension("headerdistance") showdimension("textheight") showdimension("footerdistance") showdimension("footerheight") showdimension("bottomdistance") showdimension("bottomheight") showdimension("leftedgewidth") showdimension("leftedgedistance") showdimension("leftmarginwidth") showdimension("leftmargindistance") showdimension("textwidth") showdimension("rightmargindistance") showdimension("rightmarginwidth") showdimension("rightedgedistance") showdimension("rightedgewidth") context.NR() showdimension("bodyfontsize") showdimension("lineheight") context.NR() showmacro("strutheightfactor") showmacro("strutdepthfactor") showmacro("topskipfactor") showmacro("maxdepthfactor") context.stoptabulate() end end function commands.showlayout(options) if tex.count.textlevel == 0 then commands.showlayoutvariables(options) else context.page() context.bgroup() context.showframe() context.setuplayout { marking = interfaces.variables.on } for i=1,4 do commands.showlayoutvariables(options) context.page() end context.egroup() end end \stopluacode \gdef\page_layouts_show_frame[#1][#2]% {\ifsecondargument \setupbackgrounds [\v!page] [\c!frame=\v!on, \c!corner=\v!rectangular, \c!frameoffset=\zeropoint, \c!framedepth=\zeropoint, \c!framecolor=layout:page] \setupbackgrounds [#1][#2] [\c!background=, \c!frame=\v!on, \c!corner=\v!rectangular, \c!frameoffset=\zeropoint, \c!framedepth=\zeropoint, \c!framecolor=] \else\iffirstargument \showframe [\v!header,\v!text,\v!footer] [#1] \else \showframe [\v!top,\v!header, \v!text, \v!footer,\v!bottom] [\v!leftedge,\v!leftmargin, \v!text, \v!rightmargin,\v!rightedge] \fi\fi \setupbackgrounds [\c!state=\v!repeat]} \gdef\page_layouts_show_setups[#1]% {\ctxcommand{showlayoutvariables("#1")}} \gdef\page_layouts_show_layout[#1]% {\ctxcommand{showlayout("#1")}} \unexpanded\gdef\showframe {\dodoubleempty\page_layouts_show_frame } \unexpanded\gdef\showsetups{\dosingleempty\page_layouts_show_setups} \unexpanded\gdef\showlayout{\dosingleempty\page_layouts_show_layout} \unexpanded\gdef\showmargins {\starttabulate \NC asynchrone \NC \doifoddpageelse {odd} {even} \NC \NR \NC synchrone \NC \doifrightpageelse {right} {left} \NC \NR \NC right margin \NC \the\rightmarginwidth \NC \NR \NC left margin \NC \the\leftmarginwidth \NC \NR \NC outer margin \NC \the\outermarginwidth \NC \NR \NC inner margin \NC \the\innermarginwidth \NC \NR \stoptabulate} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-fr.mkii0000644000175000017500000000102211754241457024121 0ustar norbertnorbert%D \module %D [ file=cont-de, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ French Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {french} \def\defaultlanguagetag{fr} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-plg.mkiv0000644000175000017500000001377412130411274024264 0ustar norbertnorbert%D \module %D [ file=page-pls, %D version=2003.03.16, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Setup, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Extra Page Building} %D This still needs some work, especially the dimensions need to be %D checked cq.\ optimized. Beware: method has become alternative! %D This feature has been present for a while but has never been %D exploited: pluggable pagebuilders. The next example code %D demonstrates the application of one such a plug-in. This variant %D support \type {page}, \type {leftpage} and \type {rightpage} %D definitions where specific areas are placed with the \type %D {\pagearea} command. %D %D \starttyping %D \setupheadertexts[the header text] %D \setupfootertexts[a pretty long left footer text][something right] %D \setupbottomtexts[a not so long bottom text][another right thing] %D \setuptexttexts [margin][something marginal][indeed] %D %D \startpagelayout[leftpage] %D \setupTABLE[offset=overlay] %D \setupTABLE[c][1][width=\leftmarginwidth] %D \setupTABLE[c][2][width=\textwidth] %D \setupTABLE[c][3][width=\rightmarginwidth] %D \bTABLE %D \bTR %D \bTD[nx=3,background=color,backgroundcolor=green] %D \pagearea[header][text][middle] %D \eTD %D \eTR %D \bTR %D \bTD \pagearea[text][margin][left] \eTD %D \bTD[nx=2] \pagearea[text] \eTD %D \eTR %D \bTR %D \bTD[nx=3,offset=overlay] %D {\bTABLE %D \bTR %D \bTD \pagearea[footer][text][left] \eTD %D \bTD \pagearea[bottom][text][left] \eTD %D \eTR %D \eTABLE} %D \eTD %D \eTR %D \eTABLE %D \stoppagelayout %D %D \startpagelayout[rightpage] %D \setupTABLE[offset=overlay] %D \setupTABLE[c][1][width=\leftmarginwidth] %D \setupTABLE[c][2][width=\textwidth] %D \setupTABLE[c][3][width=\rightmarginwidth] %D \bTABLE %D \bTR %D \bTD[nx=3] \pagearea[header][text][middle] \eTD %D \eTR %D \bTR %D \bTD \pagearea[text][margin][left] \eTD %D \bTD[nx=2] \pagearea[text] \eTD %D \eTR %D \bTR %D \bTD[nx=3,offset=overlay] %D {\bTABLE %D \bTR %D \bTD \pagearea[bottom][text][right] \eTD %D \bTD \pagearea[footer][text][right] \eTD %D \eTR %D \eTABLE} %D \eTD %D \eTR %D \eTABLE %D \stoppagelayout %D %D \setupcolors[state=start] %D %D \setuppagenumbering[alternative=doublesided,location=] %D %D \setuplayout[alternative=makeup] %D %D \definetextbackground %D [test] %D [state=start, %D background=color, %D backgroundcolor=yellow] %D %D \starttext %D %D \dorecurse{10}{\input tufte \par} %D %D \input tufte \starttest \input tufte \stoptest \input tufte %D %D \starttabulate %D \NC test \NC \starttest \input tufte \stoptest \NC \NR %D \stoptabulate %D %D \dorecurse{10}{\input tufte \par} %D %D \stoptext %D \stoptyping \unprotect \installcorenamespace{layoutmakeupalternative} \def\page_boxes_construct_content_makeup#1#2#3% targetbox flusher box {\setbox#1\hbox {\vbox to \textheight {\offinterlineskip \vskip\dimexpr-1\topskip+\strutheight\relax % could be an option \textwidth\makeupwidth \hsize\textwidth \boxmaxdepth\maxdepth \noindent \page_otr_command_package_contents#2#3}}% \wd#1\makeupwidth \ht#1\textheight \dp#1\zeropoint \hsize\paperwidth \vsize\paperheight \setbox#1\vbox{\csname\??layoutmakeupalternative\doifbothsidesoverruled\v!page\v!rightpage\v!leftpage\endcsname}% \wd#1\paperwidth \ht#1\paperheight \dp#1\zeropoint} \installlayoutalternative\v!makeup{\page_boxes_construct_content_makeup} \newbox\b_page_area \unexpanded\def\pagearea {\dotripleempty\page_area} \def\page_area {\ifthirdargument \expandafter\page_area_three \else\ifsecondargument \doubleexpandafter\page_area_two \else \doubleexpandafter\page_area_one \fi\fi} \def\page_area_three[#1][#2][#3]% {\edef\m_page_area_three{#3}% \ifx\m_page_area_three\v!left \let\m_page_area_three\c!lefttext \else\ifx\m_page_area_three\v!right \let\m_page_area_three\c!righttext \else \let\m_page_area_three\c!middletext \fi\fi \page_area_indeed{#1}{#2}\m_page_area_three} \def\page_area_two[#1][#2][#3]% {\edef\m_page_area_three{\doifbothsidesoverruled\c!righttext\c!righttext\c!lefttext}% \page_area_indeed{#1}{#2}\m_page_area_three} \def\page_area_one[#1][#2][#3]% {\edef\m_page_area_one{#1} \ifx\m_page_area_one\v!text % copy due to trial runs in TABLE \iftrialtypesetting \fakebox\pagebox \else \page_backgrounds_add_to_text\pagebox \page_grids_add_to_box\pagebox \box\pagebox \fi \fi} \def\page_area_indeed#1#2#3% {\setbox\b_page_area\vbox{\getspecificlayouttext{#1}{#2}{#3}}% \iftrialtypesetting \fakebox\b_page_area \else\ifcsname\??layoutbackgrounds#1#2\endcsname \page_area_indeed_yes{#1}{#2}% \else \box\b_page_area \fi\fi} \def\page_area_indeed_yes#1#2% {% todo: \localbackgroundframed{\??layoutbackgrounds#1#2}{#1:#2} \localframed % todo: [\??layoutbackgrounds#1#2] [\c!width=\wd\b_page_area, \c!height=\ht\b_page_area, \c!offset=\v!overlay] {\box\b_page_area}} % to be done nicely (proper namespacing) \setvalue{\??layoutmakeupalternative\v!leftpage }{\csname\??layoutmakeupalternative\v!page\endcsname} \setvalue{\??layoutmakeupalternative\v!rightpage}{\csname\??layoutmakeupalternative\v!page\endcsname} \unexpanded\def\startpagelayout {\bgroup \catcode\endoflineasciicode\ignorecatcode \page_layouts_start_layout} \let\stoppagelayout\relax \def\page_layouts_start_layout[#1]#2\stoppagelayout {\egroup \setvalue{\??layoutmakeupalternative#1}{#2}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-openmath.mkii0000644000175000017500000000013211571377075024635 0ustar norbertnorbert% This module is yet empty. We assume a transformation using % x-openmath.xsl. \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-set.lua0000644000175000017500000000360311571377075023437 0ustar norbertnorbertif not modules then modules = { } end modules ['l-set'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This will become obsolete when we have the bitset library embedded. set = set or { } local nums = { } local tabs = { } local concat = table.concat local next, type = next, type set.create = table.tohash function set.tonumber(t) if next(t) then local s = "" -- we could save mem by sorting, but it slows down for k, v in next, t do if v then -- why bother about the leading space s = s .. " " .. k end end local n = nums[s] if not n then n = #tabs + 1 tabs[n] = t nums[s] = n end return n else return 0 end end function set.totable(n) if n == 0 then return { } else return tabs[n] or { } end end function set.tolist(n) if n == 0 or not tabs[n] then return "" else local t, n = { }, 0 for k, v in next, tabs[n] do if v then n = n + 1 t[n] = k end end return concat(t," ") end end function set.contains(n,s) if type(n) == "table" then return n[s] elseif n == 0 then return false else local t = tabs[n] return t and t[s] end end --~ local c = set.create{'aap','noot','mies'} --~ local s = set.tonumber(c) --~ local t = set.totable(s) --~ print(t['aap']) --~ local c = set.create{'zus','wim','jet'} --~ local s = set.tonumber(c) --~ local t = set.totable(s) --~ print(t['aap']) --~ print(t['jet']) --~ print(set.contains(t,'jet')) --~ print(set.contains(t,'aap')) context-2013.05.28.20130704/texmf-dist/tex/context/base/hand-ini.mkii0000644000175000017500000003351011754241457024247 0ustar norbertnorbert%D \module %D [ file=hand-ini, % moved from enco-ini / pro %D version=2000.12.27, % 1998.12.03, %D title=\CONTEXT\ Handling Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 {\em This module is experimental and implements font %D specific features, like hanging punctuation.} \unprotect \newif\iftracefonthandling % \tracefonthandlingtrue \newif\ifskiphandlingdef \skiphandlingdeffalse \newtoks\everyenablefonthandling % much in common with hz/protruding defs % todo: fix others \def\dosetsomehandling#1#2#3 #4 % no define since directly set {\ifskiphandlingdef \else \doifnumberelse{\string#2} {#1{#2#3}{#4}} {\doifelsenothing{#3} {#1{`#2}{#4}} {\let\char\empty \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}}\donothing \let\char\normalchar}}% \fi} \def\dosetpairhandling#1#2#3 #4 #5 % no define since directly set {\ifskiphandlingdef \else \doifnumberelse{\string#2} {#1{#2#3}{#4}{#5}} {\doifelsenothing{#3} {#1{`#2}{#4}{#5}} {\let\char\empty \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}}\donothing \let\char\normalchar}}% \fi} \def\dosetquartethandling#1#2#3 #4 #5 #6 #7 % no define since directly set {\ifskiphandlingdef \else \doifnumberelse{\string#2} {#1{#2#3}{#4}{#5}{#6}{#7}} {\doifelsenothing{#3} {#1{`#2}{#4}{#5}{#6}{#7}} {\let\char\empty \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}{#6}{#7}}\donothing \let\char\normalchar}}% \fi} \def\doinhsomehandling#1#2#3 #4 % to be checked {\ifskiphandlingdef \else \if#3\relax\relax #1{`#2}{`#4}% \else \let\char\empty \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{`#4}}\donothing \let\char\normalchar \fi \fi} % adjustspacing \newdimen\adjustdimen \let\handledfont\font \ifx\undefined\pdfadjustspacing % we don't use pdftex \let\enableadjusting \relax \let\disableadjusting \relax \let\setadjusting \gobbletwoarguments \def\defineadjustfactor #1 #2 {} \def\inheritadjustfactor #1 #2 {} \let\setfontadjusting \gobbleoneargument \else \def\enableadjusting {\pdfadjustspacing\plustwo} \def\disableadjusting {\pdfadjustspacing\zerocount} \appendtoks \disableadjusting \to \everyforgetall % Here or not here? \def\dododefineadjustfactor#1#2% {\efcode\handledfont#1\dimexpr#2\onepoint*\plusthousand/\maxcard\relax} \def\dodoinheritadjustfactor#1#2% {\efcode\handledfont#1\efcode\handledfont#2\relax} \def\defineadjustfactor#1 #2 % {\setfonttoks \let\inherithandling\inheritadjustfactor \appendtoks\dosetsomehandling\dododefineadjustfactor#1 #2 \to\fonttoks} \def\inheritadjustfactor#1 #2 % {\setfonttoks \appendtoks\doinhsomehandling\dodoinheritadjustfactor#1 #2 \to\fonttoks} \ifnum\pdftexversion<120 \let\@@pdfexpandbonus\plusthousand \else \def\@@pdfexpandbonus{autoexpand}% \fi \def\setfontadjusting#1% {\doifvalue{\@fha@\@fha@#1\c!type}\v!hz{\dosetfontadjusting{#1}}} \def\dosetfontadjusting#1% {\iftracefonthandling\showfontadjusting{#1}\fi \pdffontexpand\handledfont \csname\@fha@\@fha@#1\c!max \endcsname\space \csname\@fha@\@fha@#1\c!min \endcsname\space \csname\@fha@\@fha@#1\c!step\endcsname\space \@@pdfexpandbonus\relax} \def\showfontadjusting#1% {\writestatus\m!handlings{[adjust]\space#1\space \csname\@fha@\@fha@#1\c!max \endcsname/% \csname\@fha@\@fha@#1\c!min \endcsname/% \csname\@fha@\@fha@#1\c!step\endcsname\space \fontname\handledfont}} \fi \ifx\setfontadjusting\gobbleoneargument \else \appendtoks \setfontadjusting\askedfonthandling \to \everyenablefonthandling \fi % protruding \newif\ifembasedprotruding \embasedprotrudingfalse \newdimen\lproddimen \newdimen\rproddimen \let\handledfont\font \ifx\undefined\pdfprotrudechars % we don't use pdftex \let\enableprotruding \relax \let\disableprotruding \relax \let\setprotrudingfactor \gobbleoneargument \def\defineprotrudefactor #1 #2 #3 {} \def\inheritprotrudefactor #1 #2 {} \else \def\enableprotruding {\pdfprotrudechars\plustwo} \def\disableprotruding{\pdfprotrudechars\zerocount} \appendtoks \disableprotruding \to \everyforgetall % Here or not here? \lproddimen1000\onepoint \divide\lproddimen\maxcard \rproddimen1000\onepoint \divide\rproddimen\maxcard \def\setprotrudingfactor#1% {\doifvalue{\@fha@\@fha@#1\c!type}\v!hanging{\dosetprotrudingfactor{#1}}} \def\dosetprotrudingfactor#1% no \onepoint instead of pt {\lproddimen\dimexpr\csname\@fha@\@fha@#1\c!left \endcsname\onepoint*\plusthousand/\maxcard\relax \rproddimen\dimexpr\csname\@fha@\@fha@#1\c!right\endcsname\onepoint*\plusthousand/\maxcard\relax \iftracefonthandling\showprotrudingfactor{#1}\fi} \def\showprotrudingfactor#1% {\writestatus\m!handlings{[protrude]\space#1\space \csname\@fha@\@fha@#1\c!left \endcsname\space \csname\@fha@\@fha@#1\c!right\endcsname\space \fontname\handledfont}} % division before multiplication, else overflow with "sa>5" \newdimen\protrudethreshold \protrudethreshold=36pt \def\dododefineprotrudefactor#1#2#3% {\lpcode\handledfont#1\dimexpr#2\lproddimen \ifembasedprotruding \else \ifdim\emwidth>\protrudethreshold /\emwidth*\fontcharwd\handledfont#1% \else *\fontcharwd\handledfont#1/\emwidth \fi \fi \relax \rpcode\handledfont#1\dimexpr#3\rproddimen \ifembasedprotruding \else \ifdim\emwidth>\protrudethreshold /\emwidth*\fontcharwd\handledfont#1% \else *\fontcharwd\handledfont#1/\emwidth \fi \fi \relax} \def\dodoinheritprotrudefactor#1#2% {\lpcode\handledfont#1\lpcode\handledfont#2\relax \rpcode\handledfont#1\rpcode\handledfont#2\relax} \def\defineprotrudefactor#1 #2 #3 % {\setfonttoks \let\inherithandling\inheritprotrudefactor \appendtoks\dosetpairhandling\dododefineprotrudefactor#1 #2 #3 \to\fonttoks} \def\inheritprotrudefactor#1 #2 % {\setfonttoks \appendtoks\doinhsomehandling\dodoinheritprotrudefactor#1 #2 \to\fonttoks} \fi \ifx\setprotrudingfactor\gobbleoneargument \else \appendtoks \setprotrudingfactor\askedfonthandling \to \everyenablefonthandling \fi % Basic support for a new pdftex feature: space factors % % \knbccode -- kern before char code % \knbscode -- kern before space code % \stbscode -- stretch before space code % \shbscode -- shrink before space code % % Setting \knsbcode\font`\.=200 means that if a period sits before % a interword space (glue), then the interword glue will be increased % by an amount of 1em*200/1000, i.e. the value is given in thousandths % of an em. (HTT) \newdimen\spfacdimen \ifx\undefined\pdfadjustinterwordglue % we don't use pdftex \let\enablespacehandling \relax \let\disablespacehandling \relax \let\enablekernhandling \relax \let\disablekernhandling \relax \let\setspacehandling \gobbleoneargument \def\definespacefactor #1 #2 #3 #4 #5 {} \def\inheritspacefactor #1 #2 {} \else \def\enablespacehandling {\pdfadjustinterwordglue\plusone } \def\disablespacehandling{\pdfadjustinterwordglue\minusone} \def\enablekernhandling {\pdfprependkern \plusone } \def\disablekernhandling {\pdfprependkern \minusone} \appendtoks \disablespacehandling \to \everyforgetall % Here or not here? \def\dosetspacehandling#1% {\spfacdimen\csname\@fha@\@fha@#1\c!factor\endcsname\s!pt \multiply\spfacdimen\plusthousand\divide\spfacdimen\maxcard\relax} \def\setspacehandling#1% {\doifvalue{\@fha@\@fha@#1\c!type}\v!spacing{\dosetspacehandling{#1}}} \def\dododefinespacefactor#1#2#3#4#5% {\sfcode#1\plusthousand \knbccode\handledfont#1\dimexpr#2\spfacdimen\relax \knbscode\handledfont#1\dimexpr#3\spfacdimen\relax \stbscode\handledfont#1\dimexpr#4\spfacdimen\relax \shbscode\handledfont#1\dimexpr#5\spfacdimen\relax} \def\dodoinheritspacefactor#1#2% {\sfcode#1\plusthousand \knbccode\handledfont#1\knbccode\handledfont#2\relax \knbscode\handledfont#1\knbscode\handledfont#2\relax \stbscode\handledfont#1\stbscode\handledfont#2\relax \shbscode\handledfont#1\shbscode\handledfont#2\relax} \def\definespacefactor#1 #2 #3 #4 #5 % {\setfonttoks \let\inherithandling\inheritspacefactor \appendtoks\dosetquartethandling\dododefinespacefactor#1 #2 #3 #4 #5 \to\fonttoks} \def\inheritspacefactor#1 #2 % {\setfonttoks \appendtoks\doinhsomehandling\dodoinheritspacefactor#1 #2 \to\fonttoks} \fi \ifx\setspacehandling\gobbleoneargument \else \appendtoks \setspacehandling\askedfonthandling \to \everyenablefonthandling \fi % font attributes \let\notagcode\minusone \ifx\tagcode\undefined \def\settagcode #1 #2 {} \else \def\dodosettagcode#1#2% {\tagcode\handledfont#1 #2\relax} \def\settagcode#1 #2 % {\setfonttoks \appendtoks\dosetsomehandling\dodosettagcode#1 #2 \to\fonttoks} \fi % hook into font mechanism \let\fonthandling\empty \def\startfonthandling[#1]% {\def\fonthandling{#1}% \ifcsname\@fha@\fonthandling\endcsname\else \expandafter\newtoks\csname\@fha@\fonthandling\endcsname \fi \setfonttoks} \def\stopfonthandling {\let\fonthandling\empty} \def\setfonttoks {\@EA\let\@EA\fonttoks\csname\@fha@\fonthandling\endcsname} \def\definefonthandling {\dotripleempty\dodefinefonthandling} \def\dodefinefonthandling[#1][#2][#3]% {\ifthirdargument \setvalue{\@fha@\@fha@#1}{#2}% \getparameters [\@fha@\@fha@#1] [\c!type=\v!hanging,% \c!left=1,\c!right=1,% \c!min=20,\c!max=20,\c!step=5,% \c!factor=1,% #3]% \else \setvalue{\@fha@\@fha@\@fha@#1}{#2}% \fi} \def\setupfonthandling {\dodoubleempty\dosetupfonthandling} \def\dosetupfonthandling[#1][#2]% {\getparameters[\@fha@\@fha@#1][#2]} \def\enablehandling {\dodoubleempty\doenablehandling} \def\doenablehandling[#1][#2]% handling / symbolic fontname {\fastenablehandling{#1}{#2}} % for the moment the same as: \def\fastenablehandling#1#2% also gets #2 passed {\edef\askedfonthandling{#1}% \edef\filoffonthandling{#2}% \ifcsname\@fha@\@fha@\@fha@\askedfonthandling\endcsname \@EA\redofastenablehandling \else\ifcsname\@fha@\@fha@\askedfonthandling\endcsname \@EAEAEA\dofastenablehandling \else \@EAEAEA\nofastenablehandling \fi\fi} \def\xfastenablehandling#1% {\edef\askedfonthandling{#1}% \ifcsname\@fha@\@fha@\askedfonthandling\endcsname \@EA\dofastenablehandling \else \@EA\nofastenablehandling \fi} \def\redofastenablehandling {\startdirectcharacters \edef\fonthandling{\csname\@fha@\@fha@\@fha@\askedfonthandling\endcsname}% \rawprocesscommacommand[\fonthandling]\xfastenablehandling \stopdirectcharacters} \def\dofastenablehandling {\startdirectcharacters \the\everyenablefonthandling \edef\fonthandling{\csname\@fha@\@fha@\askedfonthandling\endcsname}% \checkfonthandling\filoffonthandling \rawprocesscommacommand[\fonthandling]\dodoenablehandling \registerfonthandling\filoffonthandling \stopdirectcharacters} \def\nofastenablehandling {\the\everyenablefonthandling \let\fonthandling\askedfonthandling \dodoenablehandling\fonthandling} \def\dodoenablehandling#1% {\ifcsname\@fha@#1\endcsname \the\csname\@fha@#1\endcsname \fi} %D We must not use \type {\purefontname} here (was a bug)! % not robust as long as tex reuses definitions internally % % \def\checkfonthandling#1% we need a fast compare % {\doifelsevalue{#1\s!handling\c!file}{\fontname\font} % \skiphandlingdeftrue\skiphandlingdeffalse} % % \def\registerfonthandling#1% % {\@EA\xdef\csname#1\s!handling\c!file\endcsname{\fontname\font}} \def\checkfonthandling #1{\skiphandlingdeffalse} \let\registerfonthandling \gobbleoneargument %D This one makes live easier (less definitions): \def\inherithandling #1 #2 % {\inheritprotrudefactor #1 #2 % \inheritadjustfactor #1 #2 } %D \macros %D {usehandling} %D %D Handling definitions are collected in dedicated files and %D loaded only once: %D %D % \showsetup{usehandling} \def\dousehandling#1% is the same as encoding {\doifundefined{\c!file\f!handlingprefix#1}% {\letvalueempty{\c!file\f!handlingprefix#1}% \makeshortfilename[\truefilename{\f!handlingprefix#1}]% \startreadingfile \readsysfile{\shortfilename.mkii} {\showmessage\m!handlings2{#1}} {\showmessage\m!handlings3{#1}}% \stopreadingfile}} \def\usehandling[#1]% {\processcommalist[#1]\dousehandling} %D New: \def\overloadcharacter#1 #2 % {\setfonttoks \doifnumberelse{\string#2} {\appendtoks\dooverloadcharacter{#1}{\char#2 }\to\fonttoks} {\appendtoks\dooverloadcharacter{#1}{#2}\to\fonttoks}} \def\dooverloadcharacter#1% {\setvalue{\characterencoding\string#1}} %D Let's now see if this macro works: % \setupfonthandling % [\s!default] % [\c!links=1,\c!rechts=1,\c!min=20,\c!max=20,\c!stap=5] % Beware of fonttoks: % % \startfonthandling[morespacing] % \appendtoks % \fontdimen2\handledfont=.50em % \fontdimen3\handledfont=.25em % \fontdimen4\handledfont=.25em % \to \fonttoks % \stopfonthandling % % \definefonthandling [morespacing] [morespacing] % % \definefontsynonym[xtexnansi-lmr7][texnansi-lmr7][handling=morespacing] % \definefont[crap][texnansi-lmr7] % % \crap \the\fontdimen2\font, \the\fontdimen3\font, \the\fontdimen4\font \usehandling [def] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mar.mkii0000644000175000017500000007266211754241457024264 0ustar norbertnorbert%D \module %D [ file=page-mar, % moved here from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Marginal Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for margin words is one of the reasons for writing %D \CONTEXT. Over time support for marginal content has been %D extended en enhanced. Therefore it's always good to watch %D out for unexpected side effects. \writestatus{loading}{ConTeXt Page Macros / Maginal Things} \unprotect %D There are three categories and their historically grown meaning is %D as follows: %D %D marginlines: these are flushed relative to the start of a line and %D need to be invoked there. %D %D marginwords: these can be issued in the text flow and will migrate %D sidewards; in spite of the name, it can be a paragraph of text as %D well, but normally it's words. %D %D margintexts: these can be set beforehand and are flushed at the %D next paragraph of text (of header) %D %D While these mechanisms were rather separated, they now are slightly %D more integrated. Instead of low level instances we now have a mechanism %D for defining additional ones. %D \macros %D {inleftedge,inleftmargin,inrightmargin,inrightedge} %D %D The fast and clean way of putting things in the margin is %D using \type{\rlap} or \type{\llap}. Unfortunately these %D macro's don't handle indentation, left and right skips. We %D therefore embed them in some macro's that (force and) %D remove the indentation and restore it afterwards. \def\definemarginline {\dodoubleargument\dodefinemarginline} \def\dodefinemarginline[#1][#2]% {\getparameters [\??im\??im#1] [\c!location=\v!left, \c!distance=\zeropoint, \c!width=\leftmarginwidth, \c!hoffset=\leftmargindistance, \c!command=, #2]% \unexpanded\setvalue{#1}{\dohandlemarginline{#1}}} \def\marginlineparameter #1{\csname\??im\??im\currentmarginline#1\endcsname} \def\marginlineexecuter #1#2{\executeifdefined{\??im\??im\currentmarginline#1}{#2}} \def\dohandlemarginline#1% #2 {\def\currentmarginline{#1}% \csname\s!do\??im\??im\executeifdefined{\??im\??im#1\c!location}\v!left\endcsname{#1}} % {#2} \def\doleftmarginline#1#2% #1 is redundant (we can remove it when we group dohandlemarginline; maybe ... {\pushindentation \llap {\def\currentmarginline{#1}% \postsignalrightpage \hsize\marginlineparameter\c!width\relax \marginlineexecuter\c!command\firstofoneargument{#2}\relax \hskip\dimexpr +\leftskip +\compensatedinnermakeupmargin +\marginlineparameter\c!hoffset +\marginlineparameter\c!distance \relax}% \popindentation \ignorespaces} \def\dorightmarginline#1#2% #1 is redundant {\pushindentation \rlap {\def\currentmarginline{#1}% \postsignalrightpage \hskip\dimexpr +\hsize -\rightskip +\compensatedinnermakeupmargin +\marginlineparameter\c!hoffset +\marginlineparameter\c!distance \relax \hsize\marginlineparameter\c!width \marginlineexecuter\c!command\firstofoneargument{#2}}% \popindentation \ignorespaces} \long\def\installmarginlinehandler#1#2{\setvalue{\s!do\??im\??im#1}{#2}} \installmarginlinehandler \v!left {\doleftmarginline} \installmarginlinehandler \v!right {\dorightmarginline} \installmarginlinehandler \v!inner {\presignalrightpage\doifrightpageelse\doleftmarginline \dorightmarginline} \installmarginlinehandler \v!outer {\presignalrightpage\doifrightpageelse\dorightmarginline\doleftmarginline } \definemarginline[inleftmargin] [\c!location=\v!left, \c!width=\leftmarginwidth, \c!distance=\leftmargindistance, \c!hoffset=\zeropoint] \definemarginline[inrightmargin][\c!location=\v!right,\c!width=\rightmarginwidth,\c!distance=\rightmargindistance,\c!hoffset=\zeropoint] \definemarginline[inleftedge] [\c!location=\v!left, \c!width=\leftedgewidth, \c!distance=\leftedgedistance, \c!hoffset=\leftmargintotal] \definemarginline[inrightedge] [\c!location=\v!right,\c!width=\rightedgewidth, \c!distance=\rightedgedistance, \c!hoffset=\rightmargintotal] \definemarginline[inoutermargin][\c!location=\v!outer,\c!width=\outermarginwidth,\c!distance=\outermargindistance,\c!hoffset=\zeropoint] \definemarginline[ininnermargin][\c!location=\v!inner,\c!width=\innermarginwidth,\c!distance=\innermargindistance,\c!hoffset=\zeropoint] \definemarginline[inouteredge] [\c!location=\v!outer,\c!width=\outeredgewidth, \c!distance=\outeredgedistance, \c!hoffset=\outermargintotal] \definemarginline[ininneredge] [\c!location=\v!inner,\c!width=\inneredgewidth, \c!distance=\inneredgedistance, \c!hoffset=\innermargintotal] \definemarginline[atleftmargin] [\c!location=\v!left, \c!command=\lrlap,\c!width=\zeropoint,\c!distance=\zeropoint,\c!hoffset=\zeropoint] \definemarginline[atrightmargin][\c!location=\v!right,\c!command=\rllap,\c!width=\zeropoint,\c!distance=\zeropoint,\c!hoffset=\zeropoint] \ifx\lrlap\undefined \def\lrlap#1{\llap{\rlap{#1}}} \fi \ifx\rllap\undefined \def\rllap#1{\rlap{\llap{#1}}} \fi \def\lrlap#1{\llap{\rlap{#1}}} \def\rllap#1{\rlap{\hskip\hsize\llap{#1}}} %D We want to keep things efficient and therefore only handle %D situations like: %D %D \startbuffer %D \inleftedge {fine} some text \par %D \strut \inleftmargin {fine} some text \par %D \noindent \inrightmargin {fine} some text \par %D \noindent \strut \inrightedge {fine} some text \par %D \stopbuffer %D %D \typebuffer %D %D which looks like: %D %D \bgroup %D \getbuffer %D \parindent 30pt %D \getbuffer %D \egroup %D %D A torture test: %D %D \starttyping %D \def\TestLine#1#2{\backgroundline[#1]{\strut\white\tttf#2~\recurselevel}} %D %D \startbuffer %D \inleftmargin {\TestLine{red} {lm}} test test test \par %D \inrightmargin{\TestLine{green} {rm}} test test test \par %D \inleftedge {\TestLine{red} {le}} test test test \par %D \inrightedge {\TestLine{green} {re}} test test test \par %D \inoutermargin{\TestLine{blue} {om}} test test test \par %D \ininnermargin{\TestLine{yellow}{im}} test test test \par %D \inouteredge {\TestLine{blue} {oe}} test test test \par %D \ininneredge {\TestLine{yellow}{ie}} test test test \par %D \atleftmargin {\TestLine{red} {alm}} \hfill test \par %D \atrightmargin{\TestLine{green} {arm}} test \hfill \par %D \stopbuffer %D %D \dorecurse{40}\getbuffer \page %D \stoptyping %D New, yet undocumented: %D %D used for pascal: %D %D \starttyping %D \index {test} test \index {west} west \index {rest} rest %D %D \startnarrower %D \placeregister[index][alternative=b,command=\atleftmargin] %D \stopnarrower %D \stoptyping % todo: compensate distance when setuplayout[textwidth=..] % todo: generalize margin/edge model, now too much duplication %D The next bunch of macros looks messy which is due to its %D multi-purpose character. \chardef\margincontentdisplacement \zerocount \let \margincontentdistance \!!zeropoint \let \margincontenthoffset \!!zeropoint \def \margincontentlines {1} \def \margincontenttag {0} \let \margincontentseparator \empty \def \margincontentstrutheight {\strutht} \newcount\margincontentlevel \newdimen\margincontentheight \def\setupinmargin {\dodoubleempty\dosetupinmargin} \def\dosetupinmargin[#1][#2]% {\ifsecondargument \processcommalist[#1]{\dodosetupinmargin[#2]}% becomes [#2]{##1} \else \getparameters[\??im][#1]% \fi} % \def\dodosetupinmargin[#1]#2% [settings]{class} % {\checkinmargin[#2]% % \getparameters[\??im#2][#1]} \def\dodosetupinmargin[#1]#2% [settings]{class} {\checkinmargin[#2]% \getparameters[\??im#2][#1]% % will become an \everyinmarginsetup thing \ifcase\executeifdefined{\??im#2\c!sidemethod}{0}\else \enableparpositions \fi} \def\checkinmargin[#1]% {\ifundefined{\??im#1\c!offset}% this offset is related to framed ! \addtocommalist{#1}\inmargintaglist \presetmargintext[#1]% \fi} \def\presetmargintext[#1]% {\presetlocalframed [\??im#1]% \getparameters [\??im#1] [\c!frame=\v!off, \c!offset=\v!overlay, \c!line=1, \c!separator=, \c!width=\v!broad, \c!distance=, % empty = signal \c!hoffset=\zeropoint, \c!style=\@@imstyle, \c!color=\@@imcolor, \c!strut=\@@imstrut, \c!location=\@@imlocation, \c!align=\@@imalign, \c!before=\@@imbefore, \c!after=\@@imafter]} \newdimen\naturalmargincontentheight \def\makemargintextblock#1#2#3% width l r content {\bgroup \forgetall % added, else problems with 'center' and nested itemize \dontcomplain \hsize\getvalue{\??im#1\c!width}\relax \doifnumberelse\margincontenttag {\ifcase\margincontenttag\relax \edef\margincontenttag{#1}% first one is setups id as well \fi} \donothing \doifnumberelse\margincontenttag {\ifnum\margincontenttag>25 % to be translated \writestatus\m!systems{potential margin stack overflow (\margincontenttag)}% \fi} \donothing % we need to preserve {a,b,c} kind of settings \let\margincontentalign#1% \processallactionsinset [\getvalue{\??im\margincontenttag\c!align}] [ \v!yes=>\let\margincontentalign#1, \v!no=>\let\margincontentalign\v!normal, \v!inner=>\let\margincontentalign#1, \v!outer=>\let\margincontentalign#2, \v!left=>\let\margincontentalign\v!left, \v!middle=>\let\margincontentalign\v!middle, \v!right=>\let\margincontentalign\v!right]% \doifvaluesomething{\??im\margincontenttag\c!align} % watch {} around set {\edef\margincontentalign{{\getvalue{\??im\margincontenttag\c!align},\margincontentalign}}}% % \expanded{\getparameters[\??im\margincontenttag][\c!align=\margincontentalign]}% % \edef\margincontentstrut{\getvalue{\??im\margincontenttag\c!strut}}% \savestrut % \setbox\scratchbox\vbox\localframed [\??im\margincontenttag] [\c!strut=\v!no,\c!offset=\v!overlay] % strut handled internally {\decrement\margincontentlines \dorecurse\margincontentlines{\savedstrut\endgraf\nointerlineskip}% ! savedstrut \@@imbefore \dostartattributes{\??im\margincontenttag}\c!style\c!color\empty \dosetupstrut[\margincontentstrut]% was: \setstrut % yes or no \begstrut#3\endstrut\endgraf \xdef\margincontentstrutheight{\the\strutht}% so that it's known outside the framed \dostopattributes \@@imafter}% \global \naturalmargincontentheight\ht\scratchbox \global\advance\naturalmargincontentheight\dp\scratchbox \doif\@@imstack\v!yes {\def\overlappingmargin{-20\scaledpoint}% test value, maybe .25\strutboxdp, maybe configurable \setbox\scratchbox\vbox{\stackeddown\vbox{\box\scratchbox}}}% new \ht\scratchbox\strutht \dp\scratchbox\strutdp % nieuw \box\scratchbox \egroup} %D The stacker permits constructs like: %D %D \starttyping %D \setupinmargin[stack=yes] %D %D \inleft{test 1}test\break %D \inleft{test 2}test\break %D \inleft{test 1} %D \input tufte %D \inleft{test 1} %D \inleft{test 2} %D \inleft{test 3} %D \input tufte %D \inleft{test 1} %D \inleft{test 2\endgraf test 3} %D \inleft{test 4} %D \input tufte %D \inleft{test 1} %D \inleft{test 2\endgraf test 3} %D \inleft{test 4\endgraf test 5\endgraf test 6} %D \inleft{test 7\endgraf test 8\endgraf test 9} %D \input tufte %D \stoptyping %D This approach permits us to implement a better mechanism %D later. We need the \type {\graphicvadjust} in order to %D handle: %D %D \starttyping %D \inleft{test} {\red \dorecurse{40}{test }\par} %D {\red \inleft{test} \dorecurse{40}{test }\par} %D \stoptyping %D %D The outer margin color is either black or color set as %D main text color. \newif\ifrightmargin % documenteren \ifx\dopositionmarginbox\undefined \def\dopositionmarginbox#1{\graphicvadjust{\box#1}} \fi % watch out, margin dimensions are swapped locally (\swapmargins) % with \margincontentmethod one can control pagebreaks % % 0 no break % 1 each entry is one line % 2 only natural height % 3 also stack height \chardef\margincontentmethod \plusthree % beware: 1 = old method \chardef\marginpagecheckmethod\plusone \def\margincontentextralines{1} % old method, play safe \def\nofmargincontentlines {0} \def\doplacemargintext#1#2#3#4% {\dontcomplain \strut \doifsomething{#1} {\def\margincontenttag{#1}}% \doifinsetelse{\margincontenttag}{\v!left,\v!right} % ugly hack {\let \margincontentdistance \empty % signal \let \margincontenthoffset \zeropoint} {\edef\margincontentdistance{\executeifdefined{\??im\margincontenttag\c!distance }\empty }% signal \edef\margincontenthoffset {\executeifdefined{\??im\margincontenttag\c!hoffset }\zeropoint}}% \edef\margincontentlines {\executeifdefined{\??im\margincontenttag\c!line }\plusone }% \edef\margincontentseparator {\executeifdefined{\??im\margincontenttag\c!separator}\donothing}% \setbox\scratchbox\hbox{#4}% % todo: make sure that color stack works \ifcase\margincontentmethod \scratchdimen\zeropoint \or % old method \scratchdimen\ht\scratchbox \advance\scratchdimen\dp\scratchbox \or \scratchdimen\naturalmargincontentheight \or \scratchdimen\naturalmargincontentheight \ifx\laststackvmove\undefined\else\global\advance\scratchdimen\laststackvmove\fi \fi \ifdim\scratchdimen>\margincontentheight \global\margincontentheight\scratchdimen \fi \setbox\scratchbox\hbox {#2{\hskip#3\strut \ifcase\margincontentdisplacement % normal, move strutheight up \scratchdimen\strutdp \advance\scratchdimen \margincontentstrutheight \advance\scratchdimen -\strutht \raise\scratchdimen \or % low, obey vadjust \fi \box\scratchbox}}% \ht\scratchbox\zeropoint \dp\scratchbox\zeropoint \gdef\margincontentstrutheight{\the\strutht}% %\graphicvadjust{\box\scratchbox}} % fails in high math lines, let it be %\hbox{\lower\strutdp\box\scratchbox}} % alas, wrong lapping, therefore useless \dopositionmarginbox\scratchbox} % \def\domarginblockskip#1% % {\hskip\margincontenthoffset % \hskip\compensatedinnermakeupmargin\relax % \doifelsenothing\margincontentdistance % {\hskip\getvalue{\??im#1\c!distance}} % {\hskip\margincontentdistance}% % \relax} \def\domarginblockskip#1% {\doifelsenothing\margincontentdistance {\hskip\dimexpr +\margincontenthoffset +\compensatedinnermakeupmargin +\csname\??im#1\c!distance\endcsname \relax} {\dimexpr +\margincontenthoffset +\compensatedinnermakeupmargin +\margincontentdistance \relax}% \relax} \def\doleftmarginblock#1#2% {\doplacemargintext{#1}\llap\zeropoint {\llap{\placemargincontentseparator}% \makemargintextblock\v!left\v!right{#2}% \domarginblockskip\v!left}} \def\dorightmarginblock#1#2% {\doplacemargintext{#1}\rlap\hsize {\hskip\textwidth\hskip-\hsize % new: hsize correction \domarginblockskip\v!right \makemargintextblock\v!right\v!left{#2}% \rlap{\placemargincontentseparator}}} \def\placemargincontentseparator {\ifnum\margincontentlevel>\zerocount \ifx\margincontentseparator\empty\else \bgroup \scratchdimen\margincontentlines\lineheight \advance\scratchdimen -\lineheight \lower\scratchdimen\hbox{\margincontentseparator}% \egroup \fi \fi} \newbox\marginconstructbox \def\doinmarginswapped#1#2#3#4% {\iffirstsidefloatparagraph\nowhitespace\fi % zo laat mogelijk \setbox\marginconstructbox\hbox\bgroup % prevents page break in the middle of construction \startsignalrightpage \doifswappedrightpageelse {\rightmargintrue #2} {\rightmarginfalse#1} {#3}% setups {#4}% content \stopsignalrightpage \egroup \unhbox\marginconstructbox} % history made this a bit complicated, the +/- was needed before % we had enough mem/hash to do the page correction \edef\inmargintaglist{+,-,\v!low,\v!left,\v!right,\v!inner,\v!outer} % the old one: % % \def\doinmargin[#1][#2][#3][#4][#5]% #6 #7 % {\doifcommonelse{+,-,\v!laag}{#4} % {\dodoinmargin[#1][#2][#3][#4][#5]} % {\dodoinmargin[#1][#2][#3][][#4]}} % % an alternative: % % \letvalue{\??im\v!laag\c!offset}\empty % \letvalue{\??im +\c!offset}\empty % \letvalue{\??im -\c!offset}\empty % % \def\doinmargin[#1][#2][#3][#4][#5]% #6 #7 % {\doifnumberelse{#4} % {\dodoinmargin[#1][#2][#3][#4][#5]} % {\doifdefinedelse{\??im#4\c!offset} % {\dodoinmargin[#1][#2][#3][#4][#5]} % {\dodoinmargin[#1][#2][#3][][#4]}}} % % the problem is that we need to keep downward compatibility % with respect to the first argument thing a reference or a % directive; the alternative is to force users to pass a % directive along with a reference; anyhow, as long as one % does not use references that have the same name as a % directive we can use the (slow) alternative \def\doinmargin[#1][#2][#3][#4][#5]% #6 #7 {\expanded{\doifinsetelse{#4}{\inmargintaglist}} {\dodoinmargin[#1][#2][#3][#4][#5]} {\dodoinmargin[#1][#2][#3][][#4]}} \def\defineinmargin {\doquadrupleempty\dodefineinmargin} \def\dodefineinmargin[#1][#2][#3][#4]% {\doifassignmentelse{#4} {\setupinmargin[#1][#4]% \setvalue{#1}{\indentation\doquintupleempty\doinmargin[#2][#3][#1]}} {\setvalue{#1}{\indentation\doquintupleempty\doinmargin[#2][#3][#4]}}} \defineinmargin [inleft] [\v!left] [\v!normal] % takes left settings \defineinmargin [inright] [\v!right] [\v!normal] % takes right settings \defineinmargin [ininner] [\v!inner] [\v!normal] % takes left/right settings \defineinmargin [inouter] [\v!outer] [\v!normal] % takes left/right settings \defineinmargin [inmargin] [\@@imlocation] [\v!normal] % takes left/right settings \defineinmargin [inother] [\@@imlocation] [\v!reverse] % takes left/right settings \def\inothermargin{\inother} %D This permits definitions like: %D %D \starttyping %D \defineinmargin [SomePlace] [inner] [normal] [distance=1cm] %D \defineinmargin [SomePlace] [inner] [normal] [SomePlace] \setupinmargin[SomePlace][distance=1cm] %D \defineinmargin [MyPlace] [inner] [normal] [SomePlace] %D \defineinmargin [YourPlace] [inner] [normal] [SomePlace] %D \stoptyping %D %D A torture test: %D %D \starttyping %D \startbuffer %D \inleft {\TestLine{red} {l}} test test test \par %D \inright {\TestLine{green} {r}} test test test \par %D \inmargin {\TestLine{blue} {m}} test test test \par %D \inothermargin{\TestLine{yellow} {x}} test test test \par %D \ininner {\TestLine{cyan} {i}} test test test \par %D \inouter {\TestLine{magenta}{o}} test test test \par %D \stopbuffer %D %D \dorecurse{80}\getbuffer \page %D \stoptyping %D %D and %D %D \starttyping %D \defineinmargin [InOuterA] [outer] [normal] [distance=0cm] %D \defineinmargin [InOuterB] [outer] [normal] [distance=1cm] %D \defineinmargin [InOuterC] [outer] [normal] [distance=2cm,line=2] %D %D \startbuffer %D \InOuterA{\TestLine{red} {A}} test test test \par %D \InOuterB{\TestLine{green}{B}} test test test \par %D \InOuterC{\TestLine{blue} {C}} test test test \par %D \stopbuffer %D %D \dorecurse{80}\getbuffer \page %D %D \dorecurse{10}{\inleft {one} test \inleft {two} test } \page %D %D \start %D \margintext {one} \margintext {two} \input thuan \par %D \setupinmargin[1][line=3,distance=1cm] %D \margintext [1]{one} %D \margintext [2]{two} %D \input thuan \page %D \stop %D %D \setupinmargin[3][location=inner,distance=1cm] %D \setupinmargin[4][location=outer,distance=2cm] %D %D % \setupinmargin[left] [line=2] %D % \setupinmargin[right][line=2] %D %D \dorecurse %D {10} %D {\margintext {\kern3cm\TestLine{blue}{none}} %D \margintext[3] {\TestLine{darkgray}{3}} %D \margintext[4] {\TestLine{darkgray}{4}} %D \margintext[left] {\TestLine{red} {left}} %D \margintext[right]{\TestLine{green} {right}} %D \margintext[inner]{\TestLine{cyan} {inner}} %D \margintext[outer]{\TestLine{magenta} {outer}} %D \input thuan \endgraf} %D %D \dorecurse{10}{\margintext{test\\test\\test} \input thuan \endgraf} %D \stoptyping % Test case: % % \setuppagenumbering[alternative=doublesided] \setupwhitespace[medium] % % \placefigure[right]{}{\externalfigure[dummy][width=2cm]} % \input tufte \inothermargin{test} \input tufte % \def\dodoinmargin[#1][#2][#3][#4][#5]#6% % {\bgroup % \forgetall % otherwise sidefloat problems, added 2005/07/20, maybe dangerous % \postponenotes % group is (somehow) needed % \doifinsetelse\v!low{#4} % {\chardef\margincontentdisplacement\plusone} % {\chardef\margincontentdisplacement\zerocount}% % \doif\v!reverse{#2} % {\swapmacros\dorightmarginblock\doleftmarginblock}% % \processaction % [#1] % [ \v!left=>\let\next\doleftmarginblock, % no swapping % \v!right=>\let\next\dorightmarginblock, % no swapping % \v!inner=>\def\next{\doinmarginswapped\dorightmarginblock\doleftmarginblock }, % \v!outer=>\def\next{\doinmarginswapped\doleftmarginblock \dorightmarginblock}, % \s!unknown=>\ifdoublesided % \doifcommonelse{+,-}{#4} % {\def\next{\doinmarginswapped\dorightmarginblock\doleftmarginblock }} % {\def\next{\doinmarginswapped\doleftmarginblock \dorightmarginblock}}% % \else % \let\next\doleftmarginblock % \fi]% % \next{#3}{#6}% % \rawpagereference\s!mar{#5}% naar binnen ! ! ! ! % \flushnotes % \egroup % don't forget the group % \ignorespaces} % test first % % setupsystem[random=1235] % % \setupinmargin[left][sidemethod=3] % \dorecurse{10}{test \fakewords{20}{40} test \inleft{test\\test} test \fakewords{20}{40} \par} % \page % \setupinmargin[left][sidemethod=4] % \dorecurse{40}{test \fakewords{50}{80} test \inleft{test\\test} \par} % \page \def\dodoinmargin[#1][#2][#3][#4][#5]#6% {\bgroup % \tracingall % old stuff, a bit tricky, but now interfaced \edef\currentmargincontent{#1}% \chardef\marginrepositionmethod\executeifdefined{\??im\currentmargincontent\c!sidemethod }\plusone \chardef\margincontentmethod \executeifdefined{\??im\currentmargincontent\c!textmethod }\plusthree \chardef\marginpagecheckmethod \executeifdefined{\??im\currentmargincontent\c!splitmethod}\plusone % so far \forgetall % otherwise sidefloat problems, added 2005/07/20, maybe dangerous \postponenotes % group is (somehow) needed \doifinsetelse\v!low{#4} {\chardef\margincontentdisplacement\plusone} {\chardef\margincontentdisplacement\zerocount}% \doif\v!reverse{#2} {\swapmacros\dorightmarginblock\doleftmarginblock}% \processaction [#1] [ \v!left=>\let\next\doleftmarginblock, % no swapping \v!right=>\let\next\dorightmarginblock, % no swapping \v!inner=>\def\next{\doinmarginswapped\dorightmarginblock\doleftmarginblock }, \v!outer=>\def\next{\doinmarginswapped\doleftmarginblock \dorightmarginblock}, \s!unknown=>\ifdoublesided \doifcommonelse{+,-}{#4} {\def\next{\doinmarginswapped\dorightmarginblock\doleftmarginblock }} {\def\next{\doinmarginswapped\doleftmarginblock \dorightmarginblock}}% \else \let\next\doleftmarginblock \fi]% \next{#3}{#6}% \rawpagereference\s!mar{#5}% naar binnen ! ! ! ! \flushnotes \egroup % don't forget the group \ignorespaces} % dit zijn voorlopig lokale commando's / vervallen % % \def\woordinmarge {\indentation\doquintupleempty\doinmargin[\@@implaats][\inleftmargin][\inrightmarge]} % % \def\woordinlinker {\inleftmargin } % vervallen % \def\woordinrechter{\inrechtermarge} % vervallen % Some day: \definemarking[\v!margetitel] %D Now come the margin text collectors. The collected content is %D flushed at every paragraph by the following macro. Note for %D myself: here the location (plaats) is no longer a tag (number). % gone: \def\doflushmargincontent{\doinmargin[\@@implaats][\v!normaal][]} % + [#1][#2]{#3}} %D These are now all the same (long ago they had different %D implementations, somewhere in Sork time if I remember %D right). \def\margintext {\dodoubleempty\domargincontent} \def\marginword {\margintext} \def\margintitle{\margintext} % txt mark as well \newtoks\collectedmargintexts % so .. delayed! \chardef\margintextcollected \zerocount \def\domargincontent[#1][#2]#3% we used to check for #2/#1 being number, no longer now {\global\chardef\margintextcollected\plusone \edef\margincontenttag{#1}% \ifx\margincontenttag\empty \global\advance\margincontentlevel\plusone \edef\margincontenttag{\number\margincontentlevel}% \fi \checkinmargin[\margincontenttag]% \doglobal \appendetoks \noexpand \checkinmargin[\margincontenttag]% \noexpand \doinmargin[\executeifdefined{\??im\margincontenttag\c!location}\@@imlocation][\v!normal][\margincontenttag][\margincontenttag][#2]% \to \collectedmargintexts \doglobal \appendtoks {#3}% \to \collectedmargintexts} \let\restoreinterlinepenalty\relax \def\flushmargincontents % plural {\restoreinterlinepenalty % here? \ifcase\margintextcollected\else % called quite often, so we \expandafter\doflushmargincontents % speed up the \fi scan by \fi} % using a \do.. \def\doflushmargincontents % links + rechts {\bgroup \forgetall \global\margincontentheight\zeropoint \startsignalrightpage \the\collectedmargintexts \signalrightpage \stopsignalrightpage \resetmargincontent % dirty tricks \ifcase\margincontentmethod \donefalse \else\ifinsidecolumns % brrrr \donetrue % how fuzzy \else\ifdim\margincontentheight>\lineheight\relax \donetrue % how dirty \else \donefalse % how needed \fi\fi\fi \savemargincontentlines \ifdone \advance\margincontentheight \margincontentextralines\lineheight \ifdim\pagegoal>\pagetotal \bgroup % preserve \margincontentheight \advance\margincontentheight \pagetotal \ifdim\margincontentheight>\pagegoal \egroup \ifcase\marginpagecheckmethod % disabled \or \setmargincontentpenalties \or % potentially dangerous, maybe better a \goodbreak; the problem is that % there can be a penalty there, which we then overload and we also introduce % nasty side effects, so, we drop this option % \vadjust pre {\page}% \fi \else \egroup \fi \fi \else % We need the above because interlinepenalties overrule vadjusted \nobreaks. % a bit dangerous \vadjust{\nobreak}% \fi \egroup} \def\setmargincontentpenalties {\getnoflines\margincontentheight \keeplinestogether\noflines} \def\savemargincontentlines {\bgroup \advance\margincontentheight \margincontentextralines\lineheight % 1 by default \getnoflines\margincontentheight \xdef\nofmargincontentlines{\the\noflines}% \egroup} \def\fillupmargincontentlines % etex ! ! ! {\endgraf \begingroup \scratchcounter\numexpr\nofmargincontentlines-\prevgraf\relax\relax \ifnum\scratchcounter>\zerocount \forgetall\dorecurse\scratchcounter{\nobreak\crlf}% \fi \endgroup} % Yet undocumented, for a manual flush in for instance headers. \def\resetmargincontent {\global\margincontentlevel\zerocount \global\chardef\margintextcollected\zerocount \global\collectedmargintexts\emptytoks} % \def\placemargincontent % {\ifcase\margintextcollected\else % \bgroup % \chardef\graphicvadjustmode\zerocount % \doflushmargincontents % \egroup % \fi} % % font fix: \def\placemargincontent {\ifcase\margintextcollected\else % was level check \bgroup \redoconvertfont % !! \chardef\graphicvadjustmode\zerocount \doflushmargincontents \egroup \fi} % For old times sake (i use it in project styles) we provide \def\placemargintexts {\placemargincontent} \def\resetmargetitels {\resetmargincontent} \def\margewoordpositie{\margewoord} % obsolete, now no longer range % but never use them yourself since they may disappear. \def\oplinker#1% {\strut \graphicvadjust {\dontcomplain \setbox\scratchbox\vtop{\forgetall\strut#1}% \getboxheight\scratchdimen\of\box\scratchbox \vskip-\scratchdimen % waarom stond hier een \ ? \box\scratchbox}} \setupinmargin [\c!style=\v!bold, \c!color=, \c!strut=\v!auto, \c!location=\v!both, \c!align=\v!inner, \c!stack=\v!no, \c!before=, \c!after=] \setupinmargin [\v!left] [\c!distance=\leftmargindistance, \c!width=\leftmarginwidth, %\c!align=\v!left, % no \c!location=\v!left] \setupinmargin [\v!right] [\c!distance=\rightmargindistance, \c!width=\rightmarginwidth, %\c!align=\v!right, % no \c!location=\v!right] % bonus needed when [inner/outer] is used as tag \setupinmargin[\v!inner][\c!location=\v!inner,\c!align=\v!inner] \setupinmargin[\v!outer][\c!location=\v!outer,\c!align=\v!inner] % more efficient (5K less fotmat file) % % \letvalue{\??im\v!inner\c!location}\v!inner \letvalue{\??im\v!inner\c!align}\v!inner % \letvalue{\??im\v!outer\c!location}\v!outer \letvalue{\??im\v!outer\c!align}\v!inner \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-dejavu.mkiv0000644000175000017500000001314711754241457025621 0ustar norbertnorbert%D \module %D [ file=type-imp-dejavu, %D version=2010.06.21, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Dejavu fonts (dejavu-fonts.org), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \definefontfeature[dejavu-condensed-mono][extend=.8] \starttypescriptcollection[dejavu] \starttypescript [\s!mono] [dejavu-condensed] [\s!name] \setups[\s!font:\s!fallback:\s!mono] % \definefontsynonym [\s!Mono] [\s!name:dejavusansmonocondensed] [\s!features=\s!none] % \definefontsynonym [\s!MonoBold] [\s!name:dejavusansmonoboldcondensed] [\s!features=\s!none] % \definefontsynonym [\s!MonoItalic] [\s!name:dejavusansmonoobliquecondensed] [\s!features=\s!none] % \definefontsynonym [\s!MonoBoldItalic] [\s!name:dejavusansmonoboldobliquecondensed] [\s!features=\s!none] \definefontsynonym [\s!Mono] [\s!name:dejavusansmono] [\s!features=dejavu-condensed-mono] \definefontsynonym [\s!MonoBold] [\s!name:dejavusansmonobold] [\s!features=dejavu-condensed-mono] \definefontsynonym [\s!MonoItalic] [\s!name:dejavusansmonooblique] [\s!features=dejavu-condensed-mono] \definefontsynonym [\s!MonoBoldItalic] [\s!name:dejavusansmonoboldoblique] [\s!features=dejavu-condensed-mono] \stoptypescript % \starttypescript [\s!mono] [dejavu-condensed] [\s!name] % \setups[\s!font:\s!fallback:\s!mono] % \definefontsynonym [\s!Mono] [\s!name:dejavusansmono] [\s!features=\s!none] % \definefontsynonym [\s!MonoBold] [\s!name:dejavusansmonobold] [\s!features=\s!none] % \definefontsynonym [\s!MonoItalic] [\s!name:dejavusansmonooblique] [\s!features=\s!none] % \definefontsynonym [\s!MonoBoldItalic] [\s!name:dejavusansmonoboldoblique] [\s!features=\s!none] % \stoptypescript \starttypescript[dejavu-condensed] \definetypeface [dejavu-condensed] [\s!rm] [\s!serif] [dejavu-condensed] [\s!default] \definetypeface [dejavu-condensed] [\s!ss] [\s!sans] [dejavu-condensed] [\s!default] \definetypeface [dejavu-condensed] [\s!tt] [\s!mono] [dejavu-condensed] [\s!default] \definetypeface [dejavu-condensed] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2] \stoptypescript \starttypescript [\s!serif] [dejavu] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!name:dejavuserif] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!name:dejavuserifbold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!name:dejavuserifitalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!name:dejavuserifbolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [dejavu] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!name:dejavusans] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!name:dejavusansbold] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!name:dejavusansoblique] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!name:dejavusansboldoblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [dejavu] [\s!name] \setups[\s!font:\s!fallback:\s!mono] \definefontsynonym [\s!Mono] [\s!name:dejavusansmono] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [\s!name:dejavusansmonobold] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [\s!name:dejavusansmonooblique] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [\s!name:dejavusansmonoboldoblique] [\s!features=\s!none] \stoptypescript \starttypescript[dejavu] \definetypeface [dejavu] [\s!rm] [\s!serif] [dejavu] [\s!default] \definetypeface [dejavu] [\s!ss] [\s!sans] [dejavu] [\s!default] \definetypeface [dejavu] [\s!tt] [\s!mono] [dejavu] [\s!default] \definetypeface [dejavu] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2] \stoptypescript \starttypescript [\s!serif] [dejavu-condensed] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!name:dejavuserifcondensed] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!name:dejavuserifcondensedbold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!name:dejavuserifcondenseditalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!name:dejavuserifcondensedbolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [dejavu-condensed] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!name:dejavusanscondensed] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!name:dejavusanscondensedbold] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!name:dejavusanscondensedoblique] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!name:dejavusanscondensedboldoblique] [\s!features=\s!default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/m-tex4ht.mkii0000644000175000017500000000021011571377075024224 0ustar norbertnorbert%D Preliminaty module \input tex4ht.sty \appendtoks \Preamble{\env{ht-1},\env{ht-2},html}\EndPreamble \to \everystarttext \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/font-pre.mkiv0000644000175000017500000004325612161703335024326 0ustar norbertnorbert%D \module %D [ file=font-pre, %D version=2012.01.04, % moved from font-ini %D title=\CONTEXT\ Font Macros, %D subtitle=Predefined, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Predefined} \unprotect %D A basic set of features is defined here. \definefontfeature [always] [mode=auto, script=auto, kern=yes, mark=yes, mkmk=yes, curs=yes] \definefontfeature [default] [always] [liga=yes, tlig=yes, trep=yes] % texligatures=yes,texquotes=yes \definefontfeature [smallcaps] [always] [smcp=yes, tlig=yes, trep=yes] % texligatures=yes,texquotes=yes \definefontfeature [oldstyle] [always] [onum=yes, liga=yes, tlig=yes, trep=yes] % texligatures=yes,texquotes=yes % \definefontfeature % [newstyle] % [onum=no] \definefontfeature % == default unless redefined [ligatures] [always] [liga=yes, tlig=yes, trep=yes] \definefontfeature % can be used for type1 fonts [complete] [always] [compose=yes, liga=yes, tlig=yes, trep=yes] \definefontfeature [none] [mode=none, features=no] \definefontfeature % might move [arabic] [mode=node,language=dflt,script=arab,ccmp=yes, init=yes,medi=yes,fina=yes,isol=yes, liga=yes,dlig=yes,rlig=yes,clig=yes,calt=yes, mark=yes,mkmk=yes,kern=yes,curs=yes] \definefontfeature [hebrew] [arabic] [script=hebr] \definefontfeature % might move [simplearabic] [mode=node,language=dflt,script=arab, init=yes,medi=yes,fina=yes, rlig=yes,calt=yes, mark=yes,mkmk=yes,curs=yes] \definefontfeature [simplehebrew] [simplearabic] [script=hebr] % \definefont [DevaOne] [file:chandas.ttf*devanagari-one at 12pt] % \definefont [DevaTwo] [file:kokila.ttf*devanagari-two at 18pt] \definefontfeature [devanagari-one] [mode=node, language=dflt, script=deva, nukt=yes, akhn=yes, rphf=yes, blwf=yes, half=yes, vatu=yes, pres=yes, abvs=yes, blws=yes, psts=yes, haln=yes, abvm=yes, blwm=yes, dist=yes] \definefontfeature [devanagari-two] [devanagari-one] [script=dev2, locl=yes, pref=yes, rkrf=yes, pstf=yes, cjct=yes, init=yes, calt=yes, kern=yes] % symbols: \definefontfeature [dingbats] [mode=base, goodies=dingbats, unicoding=yes] % math: \definefontfeature [mathematics] [mode=base, liga=yes, kern=yes, tlig=yes, trep=yes, mathalternates=yes, mathitalics=yes, % nomathitalics=yes, % don't pass to tex, might become default language=dflt, script=math] \definefontfeature [mathematics-l2r] [mathematics] [] \definefontfeature [mathematics-r2l] [mathematics] [language=ara, rtlm=yes, locl=yes] \definefontfeature[virtualmath] [mathematics] % downward compatibility \definefontfeature[virtualmath-l2r] [mathematics-l2r] % downward compatibility \definefontfeature[virtualmath-r2l] [mathematics-r2l] % downward compatibility \definefontfeature[math-text] [mathematics] [ssty=no] \definefontfeature[math-script] [mathematics] [ssty=1,mathsize=yes] \definefontfeature[math-scriptscript] [mathematics] [ssty=2,mathsize=yes] \definefontfeature[math-text-l2r] [mathematics-l2r] [ssty=no] \definefontfeature[math-script-l2r] [mathematics-l2r] [ssty=1,mathsize=yes] \definefontfeature[math-scriptscript-l2r] [mathematics-l2r] [ssty=2,mathsize=yes] \definefontfeature[math-text-r2l] [mathematics-r2l] [ssty=no] \definefontfeature[math-script-r2l] [mathematics-r2l] [ssty=1,mathsize=yes] \definefontfeature[math-scriptscript-r2l] [mathematics-r2l] [ssty=2,mathsize=yes] \definefontfeature[math-nostack-text] [math-text] [nostackmath=yes] \definefontfeature[math-nostack-script] [math-script] [nostackmath=yes] \definefontfeature[math-nostack-scriptscript][math-scriptscript][nostackmath=yes] % \definefontfeature[mathtext] [math-text] % \definefontfeature[mathscript] [math-script] % \definefontfeature[mathscriptscript] [math-scriptscript] \definefontfeature [missing] [missing=yes] %D We define some colors that are used in tracing (for instance \OPENTYPE\ %D features). We cannot yet inherit because no colors are predefined. \definecolor[trace:0][s=.4] \definecolor[trace:1][r=.6] \definecolor[trace:2][g=.6] \definecolor[trace:3][b=.6] \definecolor[trace:4][r=.6,g=.6] \definecolor[trace:5][r=.6,b=.6] \definecolor[trace:6][g=.6,b=.6] \definecolor[trace:7][r=.8,g=.4] \definecolor[trace:8][r=.8,b=.4] \definecolor[trace:9][g=.4,b=.8] \definecolor[font:init][r=.75] \definecolor[font:medi][g=.75] \definecolor[font:fina][b=.75] \definecolor[font:isol][r=.75,g=.75] % [y=.75] \definecolor[font:mark][r=.75,b=.75] % [m=.75] \definecolor[font:rest][b=.75,g=.75] % [c=.75] \definecolor[trace:w][s=1] \definecolor[trace:r][r=.75,t=.5,a=1] \definecolor[trace:g][g=.75,t=.5,a=1] \definecolor[trace:b][b=.75,t=.5,a=1] \definecolor[trace:c][c=.75,t=.5,a=1] \definecolor[trace:m][m=.75,t=.5,a=1] \definecolor[trace:y][y=.75,t=.5,a=1] \definecolor[trace:s][s=.75,t=.5,a=1] \definecolor[trace:o][r=1,g=.6,b=.1,t=.5,a=1] \definecolor[trace:dw][s=1] \definecolor[trace:dr][r=.75,t=.75,a=1] \definecolor[trace:dg][g=.75,t=.75,a=1] \definecolor[trace:db][b=.75,t=.75,a=1] \definecolor[trace:dc][c=.75,t=.75,a=1] \definecolor[trace:dm][m=.75,t=.75,a=1] \definecolor[trace:dy][y=.75,t=.75,a=1] \definecolor[trace:ds][s=.75,t=.75,a=1] \definecolor[trace:do][r=1,g=.6,b=.1,t=.75,a=1] \definecolor[font:0] [s=1] \definecolor[font:1] [r=.75] \definecolor[font:2] [g=.75] \definecolor[font:3] [b=.75] \definecolor[font:4] [r=.75,g=.75] \definecolor[font:5] [r=.75,b=.75] \definecolor[font:6] [b=.75,g=.75] \definecolor[font:7] [r=.75] \definecolor[font:8] [g=.75] \definecolor[font:9] [b=.75] %D Now we're up to some definitions. \definebodyfontenvironment [\s!default] [ \s!text=1.0, \s!script=0.7, \s!scriptscript=0.5, \s!a=1.200, \s!b=1.440, \s!c=1.728, \s!d=2.074, *=\currentfontscale, % wildcard \s!x=0.8, \s!xx=0.6, \v!big=1.2, \v!small=0.8, \c!interlinespace=, \s!em=\v!slanted] \definebodyfontenvironment [20.7pt] [ \s!text=20.7pt, \s!script=\!!fourteenpointfour, \s!scriptscript=\!!twelvepoint, \s!x=17.3pt, \s!xx=\!!fourteenpointfour, \v!big=20.7pt, % !!!! \v!small=17.3pt] \definebodyfontenvironment [17.3pt] [ \s!text=17.3pt, \s!script=\!!twelvepoint, \s!scriptscript=\!!tenpoint, \s!x=\!!fourteenpointfour, \s!xx=\!!twelvepoint, \v!big=20.7pt, \v!small=\!!fourteenpointfour] \definebodyfontenvironment [\!!fourteenpointfour] [ \s!text=\!!fourteenpointfour, \s!script=\!!elevenpoint, \s!scriptscript=\!!ninepoint, \s!x=\!!twelvepoint, \s!xx=\!!tenpoint, \v!big=17.3pt, \v!small=\!!twelvepoint] \definebodyfontenvironment [\!!twelvepoint] [ \s!text=\!!twelvepoint, \s!script=\!!ninepoint, \s!scriptscript=\!!sevenpoint, \s!x=\!!tenpoint, \s!xx=\!!eightpoint, \v!big=\!!fourteenpointfour, \v!small=\!!tenpoint] \definebodyfontenvironment [\!!elevenpoint] [ \s!text=\!!elevenpoint, \s!script=\!!eightpoint, \s!scriptscript=\!!sixpoint, \s!x=\!!ninepoint, \s!xx=\!!sevenpoint, \v!big=\!!twelvepoint, \v!small=\!!ninepoint] \definebodyfontenvironment [\!!tenpoint] [ \s!text=\!!tenpoint, \s!script=\!!sevenpoint, \s!scriptscript=\!!fivepoint, \s!x=\!!eightpoint, \s!xx=\!!sixpoint, \v!big=\!!twelvepoint, \v!small=\!!eightpoint] \definebodyfontenvironment [\!!ninepoint] [ \s!text=\!!ninepoint, \s!script=\!!sevenpoint, \s!scriptscript=\!!fivepoint, \s!x=\!!sevenpoint, \s!xx=\!!fivepoint, \v!big=\!!elevenpoint, \v!small=\!!sevenpoint] \definebodyfontenvironment [\!!eightpoint] [ \s!text=\!!eightpoint, \s!script=\!!sixpoint, \s!scriptscript=\!!fivepoint, \s!x=\!!sixpoint, \s!xx=\!!fivepoint, \v!big=\!!tenpoint, \v!small=\!!sixpoint] \definebodyfontenvironment [\!!sevenpoint] [ \s!text=\!!sevenpoint, \s!script=\!!sixpoint, \s!scriptscript=\!!fivepoint, \s!x=\!!sixpoint, \s!xx=\!!fivepoint, \v!big=\!!ninepoint, \v!small=\!!fivepoint] \definebodyfontenvironment [\!!sixpoint] [ \s!text=\!!sixpoint, \s!script=\!!fivepoint, \s!scriptscript=\!!fivepoint, \s!x=\!!fivepoint, \s!xx=\!!fivepoint, \v!big=\!!eightpoint, \v!small=\!!fivepoint] \definebodyfontenvironment [\!!fivepoint] [ \s!text=\!!fivepoint, \s!script=\!!fivepoint, \s!scriptscript=\!!fivepoint, \s!x=\!!fivepoint, \s!xx=\!!fivepoint, \v!big=\!!sevenpoint, \v!small=\!!fivepoint] \definebodyfontenvironment [\!!fourpoint] [ \s!text=\!!fourpoint, \s!script=\!!fourpoint, \s!scriptscript=\!!fourpoint, \s!x=\!!fourpoint, \s!xx=\!!fourpoint, \v!big=\!!sixpoint, \v!small=\!!fourpoint] \definebodyfontswitch [fourteenpointfour] [\!!fourteenpointfour] \definebodyfontswitch [twelvepoint] [\!!twelvepoint] \definebodyfontswitch [elevenpoint] [\!!elevenpoint] \definebodyfontswitch [tenpoint] [\!!tenpoint] \definebodyfontswitch [ninepoint] [\!!ninepoint] \definebodyfontswitch [eightpoint] [\!!eightpoint] \definebodyfontswitch [sevenpoint] [\!!sevenpoint] \definebodyfontswitch [sixpoint] [\!!sixpoint] \definebodyfontswitch [fivepoint] [\!!fivepoint] \definebodyfontswitch [fourpoint] [\!!fourpoint] %D So far. \definefontstyle [\s!hw] [\s!hw] \definefontstyle [\s!cg] [\s!cg] \definefontstyle [\v!roman,\v!serif,\v!regular] [\s!rm] \definefontstyle [\v!sansserif,\v!sans,\v!support] [\s!ss] \definefontstyle [\v!teletype,\v!type,\v!mono] [\s!tt] \definefontstyle [\v!handwritten] [\s!hw] \definefontstyle [\v!calligraphic] [\s!cg] \definefontalternative[\s!tf] \definefontalternative[\s!bf] \definefontalternative[\s!it] \definefontalternative[\s!sl] \definefontalternative[\s!bs] \definefontalternative[\s!bi] \definefontalternative[\s!sc] \definefontsize[\s!a] \definefontsize[\s!b] \definefontsize[\s!c] \definefontsize[\s!d] \definealternativestyle [\v!mediaeval] [\os] [] \definealternativestyle [\v!normal] [\tf] [] \definealternativestyle [\v!bold] [\bf] [] \definealternativestyle [\v!type] [\tt] [] \definealternativestyle [\v!mono] [\tt] [] \definealternativestyle [\v!slanted] [\sl] [] \definealternativestyle [\v!italic] [\it] [] \definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] [] \definealternativestyle [\v!bolditalic,\v!italicbold] [\bi] [] \definealternativestyle [\v!small,\v!smallnormal] [\setsmallbodyfont\tf] [] \definealternativestyle [\v!smallbold] [\setsmallbodyfont\bf] [] \definealternativestyle [\v!smalltype] [\setsmallbodyfont\tt] [] \definealternativestyle [\v!smallslanted] [\setsmallbodyfont\sl] [] \definealternativestyle [\v!smallboldslanted,\v!smallslantedbold] [\setsmallbodyfont\bs] [] \definealternativestyle [\v!smallbolditalic,\v!smallitalicbold] [\setsmallbodyfont\bi] [] \definealternativestyle [\v!bigger] [\setbigbodyfont \tf] [] \definealternativestyle [\v!smaller] [\setsmallbodyfont\tf] [] \definealternativestyle [\v!sans,\v!sansserif] [\ss] [] \definealternativestyle [\v!sansbold] [\ss\bf] [] \definealternativestyle [\v!roman,\v!serif,\v!regular] [\rm] \definealternativestyle [\v!handwritten] [\hw] \definealternativestyle [\v!calligraphic] [\cg] % % maybe we need interface neutral as well (for use in cld): % % \letcscsname\mediaeval \csname\v!mediaeval \endcsname % \letcscsname\normal \csname\v!normal \endcsname % \letcscsname\bold \csname\v!bold \endcsname % \letcscsname\mono \csname\v!mono \endcsname % \letcscsname\slanted \csname\v!slanted \endcsname % \letcscsname\italic \csname\v!italic \endcsname % \letcscsname\boldslanted \csname\v!boldslanted \endcsname % \letcscsname\slantedbold \csname\v!slantedbold \endcsname % \letcscsname\bolditalic \csname\v!bolditalic \endcsname % \letcscsname\italicbold \csname\v!italicbold \endcsname % % \letcscsname\small \csname\v!small \endcsname % \letcscsname\smallnormal \csname\v!smallnormal \endcsname % \letcscsname\smallbold \csname\v!smallbold \endcsname % \letcscsname\smalltype \csname\v!smalltype \endcsname % \letcscsname\smallslanted \csname\v!smallslanted \endcsname % \letcscsname\smallboldslanted\csname\v!smallboldslanted\endcsname % \letcscsname\smallslantedbold\csname\v!smallslantedbold\endcsname % \letcscsname\smallbolditalic \csname\v!smallbolditalic \endcsname % \letcscsname\smallitalicbold \csname\v!smallitalicbold \endcsname % % \letcscsname\bigger \csname\v!bigger \endcsname % \letcscsname\smaller \csname\v!smaller \endcsname % % \letcscsname\sans \csname\v!sans \endcsname % \letcscsname\sansserif \csname\v!sansserif \endcsname % \letcscsname\sansbold \csname\v!sansbold \endcsname %D We can go on and on and on: %D %D \starttyping %D \setupbodyfontenvironment[default][p=0.8,q=0.6] %D \definefontsize[p] %D \definefontsize[q] %D \stoptyping %D Slow but handy: \definealternativestyle [\v!smallbodyfont] [\setsmallbodyfont] [] \definealternativestyle [\v!bigbodyfont] [\setbigbodyfont] [] %D We treat {\sc Small Caps} and \cap {Pseudo Caps} a bit %D different. We also provide an \WORD {uppercase} style. \definealternativestyle [\v!WORD] [{\setcharactercasing[\v!WORD ]}] [{\setcharactercasing[\v!WORD ]}] \definealternativestyle [\v!word] [{\setcharactercasing[\v!word ]}] [{\setcharactercasing[\v!word ]}] \definealternativestyle [\v!Word] [{\setcharactercasing[\v!Word ]}] [{\setcharactercasing[\v!Word ]}] \definealternativestyle [\v!Words] [{\setcharactercasing[\v!Words ]}] [{\setcharactercasing[\v!Words ]}] \definealternativestyle [\v!capital] [{\setcharactercasing[\v!capital]}] [{\setcharactercasing[\v!capital]}] \definealternativestyle [\v!Capital] [{\setcharactercasing[\v!Capital]}] [{\setcharactercasing[\v!Capital]}] \definealternativestyle [\v!cap] [{\setcharactercasing[\v!cap ]}] [{\setcharactercasing[\v!cap ]}] \definealternativestyle [\v!Cap] [{\setcharactercasing[\v!Cap ]}] [{\setcharactercasing[\v!Cap ]}] %D From now (2013-03-17) on we have: \definefontfeature[f:smallcaps][smcp=yes] \definefontfeature[f:oldstyle] [onum=yes] \definealternativestyle [\v!smallcaps] [\setsmallcaps] [\setsmallcaps] \definealternativestyle [\v!oldstyle] [\setoldstyle ] [\setoldstyle ] \unexpanded\def\setsmallcaps{\doaddfeature{f:smallcaps}} \unexpanded\def\setoldstyle {\doaddfeature{f:oldstyle}} %D \macros %D {tinyfont} %D %D By default we load the Computer Modern Roman fonts (but %D not yet at this moment) and activate the 12pt roman %D bodyfont. Sans serif and teletype are also available and %D can be called for by \type{\ss} and \type{\tt}. Loading %D takes place elsewhere. %D %D For tracing purposes we define: \definefont[tinyfont][Mono at 1ex] %D \macros %D {infofont} %D %D The second situation occurs when we enable the info mode, %D and put all kind of status information in the margin. We %D don't want huge switches to the main bodyfont and style, so %D here too we use a direct method. \let\infofont\relax % satisfy dep checker \definefont [infofont] [Mono at 6pt] % todo \the\everybodyfont \protect \endinput % LM math vs CM math (analysis by Taco): % % Computer Modern Roman : Donald Knuth % Latin Modern : LM Font Revision Team % % lmex10.tfm % identical % lmmi5.tfm % identical % lmmi6.tfm % identical % lmmi7.tfm % identical % lmmi8.tfm % identical % lmmi9.tfm % identical % lmmi10.tfm % identical % lmmi12.tfm % identical % lmmib10.tfm % identical % lmsy5.tfm % extra chars: 254,255 (octal) % lmsy6.tfm % extra chars: 254,255 (octal) % lmsy7.tfm % extra chars: 254,255 (octal) % lmsy8.tfm % extra chars: 254,255 (octal) % lmsy9.tfm % extra chars: 254,255 (octal) % lmsy10.tfm % extra chars: 254,255 (octal) % lmbsy10.tfm % extra chars: 254,255 (octal) % % From the 'AMS' set: % % lmmib5.tfm % identical % lmmib7.tfm % identical % lmbsy5.tfm % extra chars: 254,255 (octal) % lmbsy7.tfm % extra chars: 254,255 (octal) % % The two extra characters are: % % /lessorequalslant % /greaterorequalslant context-2013.05.28.20130704/texmf-dist/tex/context/base/font-tfm.lua0000644000175000017500000001420012130411274024116 0ustar norbertnorbertif not modules then modules = { } end modules ['font-tfm'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next = next local match = string.match local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local trace_features = false trackers.register("tfm.features", function(v) trace_features = v end) local report_defining = logs.reporter("fonts","defining") local report_tfm = logs.reporter("fonts","tfm loading") local findbinfile = resolvers.findbinfile local fonts = fonts local handlers = fonts.handlers local readers = fonts.readers local constructors = fonts.constructors local encodings = fonts.encodings local tfm = constructors.newhandler("tfm") local tfmfeatures = constructors.newfeatures("tfm") local registertfmfeature = tfmfeatures.register constructors.resolvevirtualtoo = false -- wil be set in font-ctx.lua fonts.formats.tfm = "type1" -- we need to have at least a value here --[[ldx--

The next function encapsulates the standard loader as supplied by .

--ldx]]-- -- this might change: not scaling and then apply features and do scaling in the -- usual way with dummy descriptions but on the other hand .. we no longer use -- tfm so why bother -- ofm directive blocks local path search unless set; btw, in context we -- don't support ofm files anyway as this format is obsolete function tfm.setfeatures(tfmdata,features) local okay = constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm) if okay then return constructors.collectprocessors("tfm",tfmdata,features,trace_features,report_tfm) else return { } -- will become false end end local function read_from_tfm(specification) local filename = specification.filename local size = specification.size if trace_defining then report_defining("loading tfm file %a at size %s",filename,size) end local tfmdata = font.read_tfm(filename,size) -- not cached, fast enough if tfmdata then local features = specification.features and specification.features.normal or { } local resources = tfmdata.resources or { } local properties = tfmdata.properties or { } local parameters = tfmdata.parameters or { } local shared = tfmdata.shared or { } properties.name = tfmdata.name properties.fontname = tfmdata.fontname properties.psname = tfmdata.psname properties.filename = specification.filename parameters.size = size shared.rawdata = { } shared.features = features shared.processes = next(features) and tfm.setfeatures(tfmdata,features) or nil -- tfmdata.properties = properties tfmdata.resources = resources tfmdata.parameters = parameters tfmdata.shared = shared -- parameters.slant = parameters.slant or parameters[1] or 0 parameters.space = parameters.space or parameters[2] or 0 parameters.space_stretch = parameters.space_stretch or parameters[3] or 0 parameters.space_shrink = parameters.space_shrink or parameters[4] or 0 parameters.x_height = parameters.x_height or parameters[5] or 0 parameters.quad = parameters.quad or parameters[6] or 0 parameters.extra_space = parameters.extra_space or parameters[7] or 0 -- constructors.enhanceparameters(parameters) -- official copies for us -- if constructors.resolvevirtualtoo then fonts.loggers.register(tfmdata,file.suffix(filename),specification) -- strange, why here local vfname = findbinfile(specification.name, 'ovf') if vfname and vfname ~= "" then local vfdata = font.read_vf(vfname,size) -- not cached, fast enough if vfdata then local chars = tfmdata.characters for k,v in next, vfdata.characters do chars[k].commands = v.commands end properties.virtualized = true tfmdata.fonts = vfdata.fonts end end end -- local allfeatures = tfmdata.shared.features or specification.features.normal constructors.applymanipulators("tfm",tfmdata,allfeatures.normal,trace_features,report_tfm) if not features.encoding then local encoding, filename = match(properties.filename,"^(.-)%-(.*)$") -- context: encoding-name.* if filename and encoding and encodings.known[encoding] then features.encoding = encoding end end -- return tfmdata end end local function check_tfm(specification,fullname) -- we could split up like afm/otf local foundname = findbinfile(fullname, 'tfm') or "" if foundname == "" then foundname = findbinfile(fullname, 'ofm') or "" -- not needed in context end if foundname == "" then foundname = fonts.names.getfilename(fullname,"tfm") or "" end if foundname ~= "" then specification.filename = foundname specification.format = "ofm" return read_from_tfm(specification) elseif trace_defining then report_defining("loading tfm with name %a fails",specification.name) end end readers.check_tfm = check_tfm function readers.tfm(specification) local fullname = specification.filename or "" if fullname == "" then local forced = specification.forced or "" if forced ~= "" then fullname = specification.name .. "." .. forced else fullname = specification.name end end return check_tfm(specification,fullname) end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-00.mkii0000644000175000017500000000314411754241457024033 0ustar norbertnorbert%D \module %D [ file=x-res-00, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Resource Libraries, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % \defineXMLcommandpush [rl:instance] (todo) % \rawframed == [frame=off,offset=overlay] % resource library \defineXMLprocess [rl:figurelibrary] % not to be used any longer \defineXMLprocess [rl:library] % resource library description \defineXMLignore [rl:description] \defineXMLpush [rl:organization] \defineXMLpush [rl:product] \defineXMLpush [rl:project] \defineXMLpush [rl:collection] % resource library entries (better use XMLignore) \defineXMLignore [rl:applet] \defineXMLignore [rl:application] \defineXMLignore [rl:figure] \defineXMLignore [rl:movie] \defineXMLignore [rl:sound] \defineXMLpush [rl:type] \defineXMLpush [rl:state] \defineXMLpush [rl:width] \defineXMLpush [rl:height] \defineXMLpush [rl:file] \defineXMLpush [rl:label] \defineXMLpush [rl:original] \defineXMLpush [rl:title] \defineXMLpush [rl:alternative] \defineXMLpush [rl:dummy] \defineXMLpush [rl:icon] \defineXMLpush [rl:copyright] \defineXMLpush [rl:comment] \defineXMLpush [rl:status] \defineXMLpush [rl:original] \defineXMLpush [rl:manipulation] % instances \defineXMLignore [rl:instance] \defineXMLpush [rl:background] \defineXMLpush [rl:viewport] \defineXMLpush [rl:dimension] \defineXMLpush [rl:position] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context-error.lmx0000644000175000017500000000441711376503616025244 0ustar norbertnorbert <?lua pv('title')?>
Error   
File    
Line    

            
            
Job Name:     ConTeXt Version:     Real Page:     Page:    
context-2013.05.28.20130704/texmf-dist/tex/context/base/xetx-ini.mkii0000644000175000017500000000745711754241457024340 0ustar norbertnorbert%D \module %D [ file=xetx-ini, %D version=2004.09.11, %D title=\CONTEXT\ System Macros, %D subtitle=\XETEX\ Initializations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We moved some code around and now have reorganized the xetex %D code in the \type {xetx} module namespace. \unprotect %D Some defaults. \ifdefined\XeTeXuseglyphmetrics \XeTeXuseglyphmetrics\plusone \fi %D Character classes. \newcount\nofXTXcharinjections \def\defineXTXcharinjectionclass[#1]% {\global\advance\nofXTXcharinjections\plusone \setxvalue{@xtx@cc@#1}{\number\nofXTXcharinjections}} \setxvalue{@xtx@cc@\s!default}{0} \def\getXTXcharinjectionclass#1% {\csname @xtx@cc@\ifcsname @xtx@cc@#1\endcsname#1\else\s!default\fi\endcsname} \let\currentXTXcharinjection\s!default \def\startXTXcharinjecxtions[#1]% {\pushmacro\currentXTXcharinjection \def\currentXTXcharinjection{#1}} \def\stopXTXcharinjections {\popmacro\currentXTXcharinjection} \def\defineXTXcharinjection #1 #2 % {\doifnumberelse{#1}{\edef\XTXclassone{\number#1}}{\edef\XTXclassone{\getXTXcharinjectionclas{#1}}}% \doifnumberelse{#2}{\edef\XTXclasstwo{\number#2}}{\edef\XTXclasstwo{\getXTXcharinjectionclas{#2}}}% \expanded{\dodefineXTXcharinjection{\XTXclassone}{\XTXclasstwo}}} \def\setXTXcharcodes #1 #2 #3 % encoding syntax {\catcode#1=11 \lccode #1=#2 \uccode #1=#3 } \def\dosetXTXcharcodes#1#2#3% compact syntax {\catcode#1=11 \lccode #1=#2 \uccode #1=#3 } \ifdefined\XeTeXinterchartoks \long\def\dodefineXTXcharinjection#1#2#3% {\XeTeXinterchartoks #1 #2 {\XTXcharinjection{#1}{#2}}% \setvalue{@xtx@ch@\currentXTXcharinjection @#1@#2@}{#3}} \def\setXTXcharacterclass #1 #2 % {\doifnumberelse{#2} {\XeTeXcharclass#1=#2\relax} {\XeTeXcharclass#1=\getXTXcharinjectionclass{#2}\relax}} \def\dosetXTXcharacterclass#1% #2 fast one {\XeTeXcharclass#1=\getXTXcharinjectionclass} \else \long\def\dodefineXTXcharinjection#1#2#3% {\setvalue{@xtx@ch@\currentXTXcharinjection @#1@#2@}{#3}} \def\setXTXcharacterclass #1 #2 % {} \fi \chardef\XTXcharinjectionsmode=1 \letvalue{@xtx@ch@\s!empty}\empty \def\XTXcharinjection#1#2% {\csname @xtx@ch@% \ifcase\XTXcharinjectionsmode \s!empty \or \ifcsname @xtx@ch@\currentXTXcharinjection @#1@#2@\endcsname \currentXTXcharinjection @#1@#2@\fi \or \ifcsname @xtx@ch@\currentXTXcharinjection @#1@#2@\endcsname \currentXTXcharinjection @#1@#2@\else \ifcsname @xtx@ch@\s!default @#1@#2@\endcsname \s!default @#1@#2@\else \s!empty \fi\fi \else \s!empty \fi \endcsname} \def\enableXTXcharinjections[#1]% {\def\currentXTXcharinjection{#1}} \protect \endinput \starttext \startXTXcharinjecxtions[default] \defineXTXcharinjection 10 40 {[default]} \stopXTXcharinjections \startXTXcharinjecxtions[whatever] \defineXTXcharinjection 20 40 {[whatever]} \stopXTXcharinjections \chardef\XTXcharinjectionsmode=0 \enableXTXcharinjections[default] A\XTXcharinjection{10}{40}B\XTXcharinjection{20}{40}C \enableXTXcharinjections[whatever] A\XTXcharinjection{10}{40}B\XTXcharinjection{20}{40}C \chardef\XTXcharinjectionsmode=1 \enableXTXcharinjections[default] A\XTXcharinjection{10}{40}B\XTXcharinjection{20}{40}C \enableXTXcharinjections[whatever] A\XTXcharinjection{10}{40}B\XTXcharinjection{20}{40}C \chardef\XTXcharinjectionsmode=2 \enableXTXcharinjections[default] A\XTXcharinjection{10}{40}B\XTXcharinjection{20}{40}C \enableXTXcharinjections[whatever] A\XTXcharinjection{10}{40}B\XTXcharinjection{20}{40}C \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-sol.lua0000644000175000017500000007577212130411274024152 0ustar norbertnorbertif not modules then modules = { } end modules ['font-sol'] = { -- this was: node-spl version = 1.001, comment = "companion to font-sol.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This module is dedicated to the oriental tex project and for -- the moment is too experimental to be publicly supported. -- -- We could cache solutions: say that we store the featureset and -- all 'words' -> replacement ... so we create a large solution -- database (per font) -- -- This module can be optimized by using a dedicated dynamics handler -- but I'll only do that when the rest of the code is stable. -- -- Todo: bind setups to paragraph. local gmatch, concat, format, remove = string.gmatch, table.concat, string.format, table.remove local next, tostring, tonumber = next, tostring, tonumber local insert, remove = table.insert, table.remove local utfchar = utf.char local random = math.random local utilities, logs, statistics, fonts, trackers = utilities, logs, statistics, fonts, trackers local interfaces, commands, attributes = interfaces, commands, attributes local nodes, node, tex = nodes, node, tex local trace_split = false trackers.register("builders.paragraphs.solutions.splitters.splitter", function(v) trace_split = v end) local trace_optimize = false trackers.register("builders.paragraphs.solutions.splitters.optimizer", function(v) trace_optimize = v end) local trace_colors = false trackers.register("builders.paragraphs.solutions.splitters.colors", function(v) trace_colors = v end) local trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end) local report_solutions = logs.reporter("fonts","solutions") local report_splitters = logs.reporter("fonts","splitters") local report_optimizers = logs.reporter("fonts","optimizers") local variables = interfaces.variables local v_normal = variables.normal local v_reverse = variables.reverse local v_preroll = variables.preroll local v_random = variables.random local v_split = variables.split local settings_to_array = utilities.parsers.settings_to_array local settings_to_hash = utilities.parsers.settings_to_hash local find_node_tail = node.tail or node.slide local free_node = node.free local free_nodelist = node.flush_list local copy_nodelist = node.copy_list local traverse_nodes = node.traverse local traverse_ids = node.traverse_id local protect_glyphs = nodes.handlers.protectglyphs or node.protect_glyphs local hpack_nodes = node.hpack local insert_node_before = node.insert_before local insert_node_after = node.insert_after local repack_hlist = nodes.repackhlist local nodes_to_utf = nodes.listtoutf local setnodecolor = nodes.tracers.colors.set local nodecodes = nodes.nodecodes local whatsitcodes = nodes.whatsitcodes local kerncodes = nodes.kerncodes local glyph_code = nodecodes.glyph local disc_code = nodecodes.disc local kern_code = nodecodes.kern local hlist_code = nodecodes.hlist local whatsit_code = nodecodes.whatsit local fontkern_code = kerncodes.fontkern local localpar_code = whatsitcodes.localpar local dir_code = whatsitcodes.dir local userdefined_code = whatsitcodes.userdefined local nodepool = nodes.pool local tasks = nodes.tasks local usernodeids = nodepool.userids local new_textdir = nodepool.textdir local new_usernumber = nodepool.usernumber local new_glue = nodepool.glue local new_leftskip = nodepool.leftskip local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming local process_characters = nodes.handlers.characters local inject_kerns = nodes.injections.handler local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local setfontdynamics = fonthashes.setdynamics local fontprocesses = fonthashes.processes local texsetattribute = tex.setattribute local unsetvalue = attributes.unsetvalue local parbuilders = builders.paragraphs parbuilders.solutions = parbuilders.solutions or { } local parsolutions = parbuilders.solutions parsolutions.splitters = parsolutions.splitters or { } local splitters = parsolutions.splitters local solutions = { } -- attribute sets local registered = { } -- backmapping splitters.registered = registered local a_split = attributes.private('splitter') local preroll = true local criterium = 0 local randomseed = nil local optimize = nil -- set later local variant = v_normal local splitwords = true local cache = { } local variants = { } local max_less = 0 local max_more = 0 local stack = { } local dummy = { attribute = unsetvalue, randomseed = 0, criterium = 0, preroll = false, optimize = nil, splitwords = false, variant = v_normal, } local function checksettings(r,settings) local s = r.settings local method = settings_to_hash(settings.method or "") local optimize, preroll, splitwords for k, v in next, method do if k == v_preroll then preroll = true elseif k == v_split then splitwords = true elseif variants[k] then variant = k optimize = variants[k] -- last one wins end end r.randomseed = tonumber(settings.randomseed) or s.randomseed or r.randomseed or 0 r.criterium = tonumber(settings.criterium ) or s.criterium or r.criterium or 0 r.preroll = preroll or false r.splitwords = splitwords or false r.optimize = optimize or s.optimize or r.optimize or variants[v_normal] end local function pushsplitter(name,settings) local r = name and registered[name] if r then if settings then checksettings(r,settings) end else r = dummy end insert(stack,r) -- brr randomseed = r.randomseed or 0 criterium = r.criterium or 0 preroll = r.preroll or false optimize = r.optimize or nil splitwords = r.splitwords or nil -- texsetattribute(a_split,r.attribute) return #stack end local function popsplitter() remove(stack) local n = #stack local r = stack[n] or dummy -- randomseed = r.randomseed or 0 criterium = r.criterium or 0 preroll = r.preroll or false optimize = r.optimize or nil -- texsetattribute(a_split,r.attribute) return n end local contextsetups = fonts.specifiers.contextsetups local function convert(featuresets,name,list) if list then local numbers = { } local nofnumbers = 0 for i=1,#list do local feature = list[i] local fs = featuresets[feature] local fn = fs and fs.number if not fn then -- fall back on global features fs = contextsetups[feature] fn = fs and fs.number end if fn then nofnumbers = nofnumbers + 1 numbers[nofnumbers] = fn if trace_goodies or trace_optimize then report_solutions("solution %a of %a uses feature %a with number %s",i,name,feature,fn) end else report_solutions("solution %a of %a has an invalid feature reference %a",i,name,feature) end end return nofnumbers > 0 and numbers end end local function initialize(goodies) local solutions = goodies.solutions if solutions then local featuresets = goodies.featuresets local goodiesname = goodies.name if trace_goodies or trace_optimize then report_solutions("checking solutions in %a",goodiesname) end for name, set in next, solutions do set.less = convert(featuresets,name,set.less) set.more = convert(featuresets,name,set.more) end end end fonts.goodies.register("solutions",initialize) function splitters.define(name,settings) local goodies = settings.goodies local solution = settings.solution local less = settings.less local more = settings.more local less_set, more_set local l = less and settings_to_array(less) local m = more and settings_to_array(more) if goodies then goodies = fonts.goodies.load(goodies) -- also in tfmdata if goodies then local featuresets = goodies.featuresets local solution = solution and goodies.solutions[solution] if l and #l > 0 then less_set = convert(featuresets,name,less) -- take from settings else less_set = solution and solution.less -- take from goodies end if m and #m > 0 then more_set = convert(featuresets,name,more) -- take from settings else more_set = solution and solution.more -- take from goodies end end else if l then local n = #less_set for i=1,#l do local ss = contextsetups[l[i]] if ss then n = n + 1 less_set[n] = ss.number end end end if m then local n = #more_set for i=1,#m do local ss = contextsetups[m[i]] if ss then n = n + 1 more_set[n] = ss.number end end end end if trace_optimize then report_solutions("defining solutions %a, less %a, more %a",name,concat(less_set or {}," "),concat(more_set or {}," ")) end local nofsolutions = #solutions + 1 local t = { solution = solution, less = less_set or { }, more = more_set or { }, settings = settings, -- for tracing attribute = nofsolutions, } solutions[nofsolutions] = t registered[name] = t return nofsolutions end local nofwords, noftries, nofadapted, nofkept, nofparagraphs = 0, 0, 0, 0, 0 local splitter_one = usernodeids["splitters.one"] local splitter_two = usernodeids["splitters.two"] local a_word = attributes.private('word') local a_fontkern = attributes.private('fontkern') local encapsulate = false directives.register("builders.paragraphs.solutions.splitters.encapsulate", function(v) encapsulate = v end) function splitters.split(head) -- quite fast local current, done, rlmode, start, stop, attribute = head, false, false, nil, nil, 0 cache, max_less, max_more = { }, 0, 0 local function flush() -- we can move this local font = start.font local last = stop.next local list = last and copy_nodelist(start,last) or copy_nodelist(start) local n = #cache + 1 if encapsulate then local user_one = new_usernumber(splitter_one,n) local user_two = new_usernumber(splitter_two,n) head, start = insert_node_before(head,start,user_one) insert_node_after(head,stop,user_two) else local current = start while true do current[a_word] = n if current == stop then break else current = current.next end end end if rlmode == "TRT" or rlmode == "+TRT" then local dirnode = new_textdir("+TRT") list.prev = dirnode dirnode.next = list list = dirnode end local c = { original = list, attribute = attribute, direction = rlmode, font = font } if trace_split then report_splitters("cached %4i: font %a, attribute %a, direction %a, word %a", n, font, attribute, nodes_to_utf(list,true), rlmode and "r2l" or "l2r") end cache[n] = c local solution = solutions[attribute] local l, m = #solution.less, #solution.more if l > max_less then max_less = l end if m > max_more then max_more = m end start, stop, done = nil, nil, true end while current do -- also nextid local next = current.next local id = current.id if id == glyph_code then if current.subtype < 256 then local a = current[a_split] if not a then start, stop = nil, nil elseif not start then start, stop, attribute = current, current, a elseif a ~= attribute then start, stop = nil, nil else stop = current end end elseif id == disc_code then if splitwords then if start then flush() end elseif start and next and next.id == glyph_code and next.subtype < 256 then -- beware: we can cross future lines stop = next else start, stop = nil, nil end elseif id == whatsit_code then if start then flush() end local subtype = current.subtype if subtype == dir_code or subtype == localpar_code then rlmode = current.dir end else if start then flush() end end current = next end if start then flush() end nofparagraphs = nofparagraphs + 1 nofwords = nofwords + #cache return head, done end local function collect_words(list) -- can be made faster for attributes local words, w, word = { }, 0, nil if encapsulate then for current in traverse_ids(whatsit_code,list) do if current.subtype == userdefined_code then -- hm local user_id = current.user_id if user_id == splitter_one then word = { current.value, current, current } w = w + 1 words[w] = word elseif user_id == splitter_two then if word then word[3] = current else -- something is wrong end end end end else local current, first, last, index = list, nil, nil, nil while current do -- todo: disc and kern local id = current.id if id == glyph_code or id == disc_code then local a = current[a_word] if a then if a == index then -- same word last = current elseif index then w = w + 1 words[w] = { index, first, last } first = current last = current index = a elseif first then last = current index = a else first = current last = current index = a end elseif index then if first then w = w + 1 words[w] = { index, first, last } end index = nil first = nil elseif trace_split then if id == disc_code then report_splitters("skipped: disc node") else report_splitters("skipped: %C",current.char) end end elseif id == kern_code and (current.subtype == fontkern_code or current[a_fontkern]) then if first then last = current else first = current last = current end elseif index then w = w + 1 words[w] = { index, first, last } index = nil first = nil if id == disc_node then if trace_split then report_splitters("skipped: disc node") end end end current = current.next end if index then w = w + 1 words[w] = { index, first, last } end if trace_split then for i=1,#words do local w = words[i] local n, f, l = w[1], w[2], w[3] local c = cache[n] if c then report_splitters("found %4i: word %a, cached %a",n,nodes_to_utf(f,true,true,l),nodes_to_utf(c.original,true)) else report_splitters("found %4i: word %a, not in cache",n,nodes_to_utf(f,true,true,l)) end end end end return words, list -- check for empty (elsewhere) end -- we could avoid a hpack but hpack is not that slow local function doit(word,list,best,width,badness,line,set,listdir) local changed = 0 local n = word[1] local found = cache[n] if found then local h, t if encapsulate then h = word[2].next -- head of current word t = word[3].prev -- tail of current word else h = word[2] t = word[3] end if splitwords then -- there are no lines crossed in a word else local ok = false local c = h while c do if c == t then ok = true break else c = c.next end end if not ok then report_solutions("skipping hyphenated word (for now)") -- todo: mark in words as skipped, saves a bit runtime return false, changed end end local original, attribute, direction = found.original, found.attribute, found.direction local solution = solutions[attribute] local features = solution and solution[set] if features then local featurenumber = features[best] -- not ok probably if featurenumber then noftries = noftries + 1 local first = copy_nodelist(original) if not trace_colors then for n in traverse_nodes(first) do -- maybe fast force so no attr needed n[0] = featurenumber -- this forces dynamics end elseif set == "less" then for n in traverse_nodes(first) do setnodecolor(n,"font:isol") -- yellow n[0] = featurenumber end else for n in traverse_nodes(first) do setnodecolor(n,"font:medi") -- green n[0] = featurenumber end end local font = found.font local setdynamics = setfontdynamics[font] if setdynamics then local processes = setdynamics(font,featurenumber) for i=1,#processes do -- often more than 1 first = processes[i](first,font,featurenumber) end else report_solutions("fatal error, no dynamics for font %a",font) end first = inject_kerns(first) if first.id == whatsit_code then local temp = first first = first.next free_node(temp) end local last = find_node_tail(first) -- replace [u]h->t by [u]first->last local prev = h.prev local next = t.next prev.next = first first.prev = prev if next then last.next = next next.prev = last end -- check new pack local temp, b = repack_hlist(list,width,'exactly',listdir) if b > badness then if trace_optimize then report_optimizers("line %a, badness before %a, after %a, criterium %a, verdict %a",line,badness,b,criterium,"quit") end -- remove last insert prev.next = h h.prev = prev if next then t.next = next next.prev = t else t.next = nil end last.next = nil free_nodelist(first) else if trace_optimize then report_optimizers("line %a, badness before: %a, after %a, criterium %a, verdict %a",line,badness,b,criterium,"continue") end -- free old h->t t.next = nil free_nodelist(h) -- somhow fails if not encapsulate then word[2] = first word[3] = last end changed, badness = changed + 1, b end if b <= criterium then return true, changed end end end end return false, changed end -- We repeat some code but adding yet another layer of indirectness is not -- making things better. variants[v_normal] = function(words,list,best,width,badness,line,set,listdir) local changed = 0 for i=1,#words do local done, c = doit(words[i],list,best,width,badness,line,set,listdir) changed = changed + c if done then break end end if changed > 0 then nofadapted = nofadapted + 1 -- todo: get rid of pack when ok because we already have packed and we only need the last b local list, b = repack_hlist(list,width,'exactly',listdir) return list, true, changed, b -- badness else nofkept = nofkept + 1 return list, false, 0, badness end end variants[v_reverse] = function(words,list,best,width,badness,line,set,listdir) local changed = 0 for i=#words,1,-1 do local done, c = doit(words[i],list,best,width,badness,line,set,listdir) changed = changed + c if done then break end end if changed > 0 then nofadapted = nofadapted + 1 -- todo: get rid of pack when ok because we already have packed and we only need the last b local list, b = repack_hlist(list,width,'exactly',listdir) return list, true, changed, b -- badness else nofkept = nofkept + 1 return list, false, 0, badness end end variants[v_random] = function(words,list,best,width,badness,line,set,listdir) local changed = 0 while #words > 0 do local done, c = doit(remove(words,random(1,#words)),list,best,width,badness,line,set,listdir) changed = changed + c if done then break end end if changed > 0 then nofadapted = nofadapted + 1 -- todo: get rid of pack when ok because we already have packed and we only need the last b local list, b = repack_hlist(list,width,'exactly',listdir) return list, true, changed, b -- badness else nofkept = nofkept + 1 return list, false, 0, badness end end local function show_quality(current,what,line) local set = current.glue_set local sign = current.glue_sign local order = current.glue_order local amount = set * ((sign == 2 and -1) or 1) report_optimizers("line %a, category %a, amount %a, set %a, sign %a, how %a, order %a",line,what,amount,set,sign,how,order) end function splitters.optimize(head) if not optimize then report_optimizers("no optimizer set") return end local nc = #cache if nc == 0 then return end starttiming(splitters) local listdir = nil -- todo ! ! ! if randomseed then math.setrandomseedi(randomseed) randomseed = nil end local line = 0 local tex_hbadness, tex_hfuzz = tex.hbadness, tex.hfuzz tex.hbadness, tex.hfuzz = 10000, number.maxdimen if trace_optimize then report_optimizers("preroll %a, variant %a, criterium %a, cache size %a",preroll,variant,criterium,nc) end for current in traverse_ids(hlist_code,head) do -- report_splitters("before: [%s] => %s",current.dir,nodes.tosequence(current.list,nil)) line = line + 1 local sign, dir, list, width = current.glue_sign, current.dir, current.list, current.width if not encapsulate and list.id == glyph_code then -- nasty .. we always assume a prev being there .. future luatex will always have a leftskip set -- current.list, list = insert_node_before(list,list,new_glue(0)) current.list, list = insert_node_before(list,list,new_leftskip(0)) end local temp, badness = repack_hlist(list,width,'exactly',dir) -- it would be nice if the badness was stored in the node if badness > 0 then if sign == 0 then if trace_optimize then report_optimizers("line %a, badness %a, outcome %a, verdict %a",line,badness,"okay","okay") end else local set, max if sign == 1 then if trace_optimize then report_optimizers("line %a, badness %a, outcome %a, verdict %a",line,badness,"underfull","trying more") end set, max = "more", max_more else if trace_optimize then report_optimizers("line %a, badness %a, outcome %a, verdict %a",line,badness,"overfull","trying less") end set, max = "less", max_less end -- we can keep the best variants local lastbest, lastbadness = nil, badness if preroll then local bb, base for i=1,max do if base then free_nodelist(base) end base = copy_nodelist(list) local words = collect_words(base) -- beware: words is adapted for j=i,max do local temp, done, changes, b = optimize(words,base,j,width,badness,line,set,dir) base = temp if trace_optimize then report_optimizers("line %a, alternative %a.%a, changes %a, badness %a",line,i,j,changes,b) end bb = b if b <= criterium then break end -- if done then -- break -- end end if bb and bb > criterium then -- needs checking if not lastbest then lastbest, lastbadness = i, bb elseif bb > lastbadness then lastbest, lastbadness = i, bb end else break end end free_nodelist(base) end local words = collect_words(list) for best=lastbest or 1,max do local temp, done, changes, b = optimize(words,list,best,width,badness,line,set,dir) current.list = temp if trace_optimize then report_optimizers("line %a, alternative %a, changes %a, badness %a",line,best,changes,b) end if done then if b <= criterium then -- was == 0 protect_glyphs(list) break end end end end else if trace_optimize then report_optimizers("line %a, verdict %a",line,"not bad enough") end end -- we pack inside the outer hpack and that way keep the original wd/ht/dp as bonus current.list = hpack_nodes(current.list,width,'exactly',listdir) -- report_splitters("after: [%s] => %s",temp.dir,nodes.tosequence(temp.list,nil)) end for i=1,nc do local ci = cache[i] free_nodelist(ci.original) end cache = { } tex.hbadness, tex.hfuzz = tex_hbadness, tex_hfuzz stoptiming(splitters) end statistics.register("optimizer statistics", function() if nofwords > 0 then local elapsed = statistics.elapsedtime(splitters) local average = noftries/elapsed return format("%s words identified in %s paragraphs, %s words retried, %s lines tried, %0.3f seconds used, %s adapted, %0.1f lines per second", nofwords,nofparagraphs,noftries,nofadapted+nofkept,elapsed,nofadapted,average) end end) -- we could use a stack local enableaction = tasks.enableaction local disableaction = tasks.disableaction local function enable() enableaction("processors", "builders.paragraphs.solutions.splitters.split") enableaction("finalizers", "builders.paragraphs.solutions.splitters.optimize") end local function disable() disableaction("processors", "builders.paragraphs.solutions.splitters.split") disableaction("finalizers", "builders.paragraphs.solutions.splitters.optimize") end function splitters.start(name,settings) if pushsplitter(name,settings) == 1 then enable() end end function splitters.stop() if popsplitter() == 0 then disable() end end function splitters.set(name,settings) if #stack > 0 then stack = { } else enable() end pushsplitter(name,settings) -- sets attribute etc end function splitters.reset() if #stack > 0 then stack = { } popsplitter() -- resets attribute etc disable() end end -- interface commands.definefontsolution = splitters.define commands.startfontsolution = splitters.start commands.stopfontsolution = splitters.stop commands.setfontsolution = splitters.set commands.resetfontsolution = splitters.reset context-2013.05.28.20130704/texmf-dist/tex/context/base/page-one.mkiv0000644000175000017500000005356412130411274024264 0ustar norbertnorbert%D \module %D [ file=page-one, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Default Routine, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Default Routine} %D This is just the good old \CONTEXT\ output routine, which %D has been there right from the start. \unprotect % OTRONE: basic single column \newconstant \c_page_one_float_method \unexpanded\def\page_one_command_next_page {\page_otr_eject_page} \unexpanded\def\page_one_command_next_page_and_inserts {\page_otr_eject_page_and_flush_inserts} \unexpanded\def\page_one_command_set_hsize {\global\hsize\textwidth} \unexpanded\def\page_one_command_set_float_hsize {\global\hsize\textwidth} % \newdimen\d_page_one_saved_vsize % % \unexpanded\def\page_one_command_set_vsize % {\ifgridsnapping % \ifcase\layoutlines % \getrawnoflines\textheight % \else % \noflines\layoutlines % \fi % \global\vsize\noflines\openlineheight % \else % \global\vsize\textheight % \fi % \ifdim\pagegoal<\maxdimen % \ifdim\d_page_one_saved_vsize=\vsize % % let's assume that the layout didn't change % \else % \global\d_page_one_saved_vsize\vsize % \pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax % % \bgroup % % \global\d_page_one_saved_vsize\vsize % % \advance\vsize-\d_page_floats_inserted_top % % \advance\vsize-\d_page_floats_inserted_bottom % % \pagegoal\vsize % % \egroup % \fi % \fi} \unexpanded\def\page_one_command_set_vsize {\ifgridsnapping \ifcase\layoutlines \getrawnoflines\textheight \else \noflines\layoutlines \fi \global\vsize\noflines\openlineheight \else \global\vsize\textheight \fi % alternatively we could set it in builders.buildpage_filter % \ifdim\pagegoal<\maxdimen .. \fi \global\pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax} % 1 = partial page, 2 = whole page, 3 = partial page \setnewconstant\kindofpagetextareas\plustwo % \plusone can become default some day \def\page_one_registered_text_area_a % two arguments: (un)vbox n {\ifconditional\c_page_areas_enabled \expandafter\page_one_registered_text_area_a_indeed \else \expandafter\firstofoneargument \fi} \def\page_one_registered_text_area_b % one arguments: content {\ifconditional\c_page_areas_enabled \expandafter\page_one_registered_text_area_b_indeed \else \expandafter\firstofoneargument \fi} \def\page_one_registered_text_area_a_indeed % two arguments: (un)vbox n {\ifcase\kindofpagetextareas \expandafter\firstofoneargument \or % partial page (experimental) \expandafter\page_areas_register_direct \or % whole page (default) \expandafter\firstofoneargument \else \expandafter\firstofoneargument \fi} \def\page_one_registered_text_area_b_indeed % one arguments: content {\ifcase\kindofpagetextareas % \expandafter\firstofoneargument \or % partial page (experimental) % \expandafter\firstofoneargument \or % whole page (default) \expandafter\page_areas_register_boxed \else % \expandafter\firstofoneargument \fi} \newdimen\d_page_one_natural_depth \newbox \b_page_one_bottom_notes \newbox \b_page_one_contents \let\page_one_command_package_show_state\relax % \fakepagenotes ... needs checking % % we can also have bottom notes on top of bottom insertions \unexpanded\def\page_one_command_package_contents#1#2% \box \unvbox % this one will be redone (checked) {\bgroup \strc_notes_check_if_bottom_present \d_page_one_natural_depth\dp#2\relax % we need to set the height as otherwise the shrink will not kick in so the following % no longer applies: % % \setbox\b_page_one_contents\vbox \ifconditional\c_notes_bottom_present to \textheight \fi % \setbox\b_page_one_contents\vbox to \textheight {\page_otr_command_flush_top_insertions % this is messy ... we will provide a more tight area (no big deal as we can % do that at the lua end) \page_one_registered_text_area_a#1#2% \unvbox % \ifgridsnapping \vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax \prevdepth\openstrutdepth \page_otr_command_flush_bottom_insertions \vfil \else\ifcase\bottomraggednessmode % ragged (default) \vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax \prevdepth\openstrutdepth \page_otr_command_flush_bottom_insertions \vfil \or % align (normal) \page_otr_command_flush_bottom_insertions \or % baseline \kern\dimexpr\maxdepth-\d_page_one_natural_depth\relax \page_otr_command_flush_bottom_insertions \fi\fi \fakepagenotes}% \page_one_command_package_show_state \ifconditional\c_notes_bottom_present \ifgridsnapping \ifcase\layoutlines \getrawnoflines\textheight \else \noflines\layoutlines \fi \scratchoffset\dimexpr\numexpr\noflines-\plusone\relax\lineheight+\topskip\relax \else \scratchoffset\ht\b_page_one_contents \fi \setbox\b_page_one_bottom_notes\hbox {\checksinglecolumnfootnotes % why this check? *** \lower\scratchoffset\vbox{\placebottomnotes\par\kern\zeropoint}}% kerns makes notes sit on bottom \smashbox\b_page_one_bottom_notes \ht\b_page_one_contents\zeropoint \page_one_registered_text_area_b {\vbox to \textheight {\box\b_page_one_contents \box\b_page_one_bottom_notes}}% \else \ht\b_page_one_contents\textheight \page_one_registered_text_area_b {\box\b_page_one_contents}% \fi \egroup} \unexpanded\def\page_one_command_side_float_output {\page_otr_construct_and_shipout\unvbox\normalpagebox} \unexpanded\def\page_one_command_routine {\page_sides_output_routine} %D Insertions \newconditional\c_page_one_top_of_insert \newconditional\c_page_one_correct_top_insert \settrue\c_page_one_correct_top_insert % false moves up (tight) \newskip \s_page_one_between_top_insert \def\page_one_prepare_top_float {\ifdim\d_page_floats_inserted_top=\zeropoint \settrue\c_page_one_top_of_insert \else \setfalse\c_page_one_top_of_insert \fi \s_page_one_between_top_insert\ifdim\d_strc_floats_top>\d_strc_floats_bottom\d_strc_floats_top\else\d_strc_floats_bottom\fi\relax \global\advance\d_page_floats_inserted_top\dimexpr\ht\floatbox+\dp\floatbox+\s_page_one_between_top_insert\relax} \def\page_one_insert_top_float % maybe remember last beforeskip {\insert\namedinsertionnumber\s!topfloat\bgroup \forgetall \ifconditional\c_page_one_top_of_insert \ifconditional\c_page_one_correct_top_insert \topskipcorrection % [xx] new: see icare topbleed \kern-\lineskip \par \prevdepth\maxdimen \fi \fi \page_otr_command_flush_float_box \vskip\s_page_one_between_top_insert \egroup} \unexpanded\def\page_one_command_set_top_insertions {\bgroup \ifconditional\c_page_floats_some_waiting \noffloatinserts\zerocount \let\totaltopinserted\!!zeropoint \page_one_command_set_top_insertions_indeed \ifnum\rootfloatparameter\c!nbottom=\zerocount \ifnum\rootfloatparameter\c!nlines>\zerocount \ifdim\totaltopinserted>\zeropoint\relax \ifdim\dimexpr\rootfloatparameter\c!nlines\lineheight+\totaltopinserted\relax>\textheight \showmessage\m!floatblocks8{\rootfloatparameter\c!nlines}% \page_otr_fill_and_eject_page % was tripple: vfilll \fi \fi \fi \fi \fi \egroup} \def\page_one_command_set_top_insertions_indeed {\ifnum\noffloatinserts<\c_page_floats_n_of_top \page_floats_get \page_one_prepare_top_float \ifdim\d_page_floats_inserted_top<\textheight\relax \xdef\totaltopinserted{\the\d_page_floats_inserted_top}% \page_one_insert_top_float \ifconditional\c_page_floats_some_waiting \advance\noffloatinserts \plusone \else \noffloatinserts\c_page_floats_n_of_top\relax \fi \page_floats_report_flushed \else \page_floats_resave\s!text \noffloatinserts\c_page_floats_n_of_top\relax \fi \else \ifconditional\c_page_floats_some_waiting \showmessage\m!floatblocks6{\the\c_page_floats_n_of_top}% \fi \let\page_one_command_set_top_insertions_indeed\relax \fi \page_one_command_set_top_insertions_indeed} \unexpanded\def\page_one_command_set_bottom_insertions {\bgroup \ifconditional\c_page_floats_some_waiting \noffloatinserts\zerocount \page_one_command_set_bottom_insertions_indeed \fi \egroup} \def\page_one_command_set_bottom_insertions_indeed {\ifnum\noffloatinserts<\c_page_floats_n_of_bottom\relax \page_floats_get \global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax \ifdim\d_page_floats_inserted_bottom<\pagegoal\relax \insert\namedinsertionnumber\s!bottomfloat\bgroup \forgetall \blank[\rootfloatparameter\c!spacebefore]% \page_otr_command_flush_float_box \egroup \ifconditional\c_page_floats_some_waiting \advance\noffloatinserts \plusone \else \noffloatinserts\c_page_floats_n_of_bottom \fi \page_floats_report_flushed \else \page_floats_resave\s!text \noffloatinserts\c_page_floats_n_of_bottom\relax \fi \global\settrue\c_page_floats_not_permitted % vgl topfloats s! \else \ifconditional\c_page_floats_some_waiting \showmessage\m!floatblocks7{\the\c_page_floats_n_of_bottom}% \fi \let\page_one_command_set_bottom_insertions_indeed\relax \fi \page_one_command_set_bottom_insertions_indeed} \unexpanded\def\page_one_command_flush_top_insertions {\ifvoid\namedinsertionnumber\s!topfloat\else \ifgridsnapping \box\namedinsertionnumber\s!topfloat \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed \else \ifcase\c_page_floats_insertions_topskip_mode % 0: default, do nothing \or % 1: no topskip (crossed fingers) \vskip-\topskip \vskip\strutheight \fi \unvbox\namedinsertionnumber\s!topfloat \fi \fi \global\d_page_floats_inserted_top\zeropoint} \unexpanded\def\page_one_command_flush_bottom_insertions {\ifvoid\namedinsertionnumber\s!bottomfloat\else \ifgridsnapping % \floatparameter\c!bottombefore \snaptogrid\hbox{\box\namedinsertionnumber\s!bottomfloat}% % \floatparameter\c!bottomafter \else \floatparameter\c!bottombefore \unvbox\namedinsertionnumber\s!bottomfloat \floatparameter\c!bottomafter \fi \fi \global\d_page_floats_inserted_bottom\zeropoint \global\setfalse\c_page_floats_not_permitted} \unexpanded\def\page_one_command_flush_floats {\global\settrue\c_page_floats_flushing \ifconditional\c_page_floats_some_waiting \par % if kept, then option and definitely off in gridmode ! ! ! ! % \ifvmode \prevdepth\maxdimen \fi % prevents whitespace; problematic in icare tests \page_one_command_flush_floats_indeed \fi \global\savednoffloats\zerocount \global\setfalse\c_page_floats_some_waiting \global\setfalse\c_page_floats_flushing} \unexpanded\def\page_one_command_flush_float_box {\ifconditional\c_page_floats_center_box \ifdim\wd\floatbox<\hsize \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}% \fi \fi \snaptogrid\hbox{\box\floatbox}} % was copy \def\page_one_command_flush_floats_indeed % much in common with OTRSET {\ifconditional\c_page_floats_some_waiting \ifconditional\c_page_floats_pack_flushed \setfalse\c_page_floats_center_box % not needed as we do call directly \page_floats_collect\s!text\hsize\emwidth %% no longer (interferes with footnotes): %% %% \page_one_command_set_vsize % test 2011.06.24.001 %% \global\setbox\floatbox\hbox to \hsize {\hfil \dorecurse\nofcollectedfloats {\ifcase\columndirection % nog document wide \page_floats_flush\s!text\plusone \else \page_floats_flush\s!text{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}% \fi \ifdim\wd\floatbox>\makeupwidth % \hsize \hbox to \makeupwidth{\hss\box\floatbox\hss}% \else \box\floatbox \fi \ifnum\recurselevel<\nofcollectedfloats \hfil \fi}% \hfil}% \else \page_floats_get \fi % there is a chance that due to rounding errors, the float % fits on a page where it was first rejected, in which case % the prevdepth is -maxdimen and we cannot obey the grid \doplacefloatbox \expandafter\page_one_command_flush_floats_indeed \fi} \unexpanded\def\page_one_command_flush_margin_blocks {\ifconditional\c_page_margin_blocks_present % \ifvoid\b_page_margin_blocks \else \ifdim\pagetotal=\zeropoint \null % \fixedspace \fi \page_otr_command_next_page % \page \ifvoid\b_page_margin_blocks \global\setfalse\c_page_margin_blocks_present \else \doubleexpandafter\page_one_command_flush_margin_blocks \fi \fi} \unexpanded\def\page_one_command_check_if_float_fits {\ifconditional\c_page_floats_not_permitted \global\setfalse\c_page_floats_room \else % new per 31/5/2004, should be an option, only one column mode \begingroup \scratchdimen\dimexpr\pagetotal+\lineheight\relax \ifdim\scratchdimen>\pagegoal \goodbreak % hack ? needed in icare-az \fi % should be an option \endgroup \dimen0\dimexpr\pagetotal+\floatheight+\d_strc_floats_top-\pageshrink\relax \dimen2\pagegoal \relax % needed \ifcase\c_page_one_float_method % method 0 : raw \or % method 1 : safe \dimen2 .99\pagegoal \or % method 2 : tight \advance\dimen0 -\onepoint \fi \relax % really needed ! ! ! ! \ifdim\dimen0>\dimen2 \global\setfalse\c_page_floats_room \else \global\settrue\c_page_floats_room \fi \fi} \unexpanded\def\page_one_command_flush_saved_floats {\global\d_page_floats_inserted_top\zeropoint \global\d_page_floats_inserted_bottom\zeropoint \ifconditional\c_page_floats_flushing \else \page_one_command_set_top_insertions \page_one_command_set_bottom_insertions \ifconditional\c_page_floats_some_waiting \doif{\rootfloatparameter\c!cache}\v!no\page_one_command_flush_floats % could be _otr_ \else\ifconditional\c_page_margin_blocks_present \page_one_command_flush_floats \fi\fi \fi} \def\page_one_place_float_here_indeed {%\ifgridsnapping \else \baselinecorrection %\fi \doplacefloatbox \page_floats_report_total \dohandlenextfloatindent} \def\page_one_place_float_force {\showmessage\m!floatblocks9\empty \page_one_place_float_here_indeed} \def\page_one_place_float_side_indeed#1% {\setbox\floatbox\vbox{\box\floatbox}% ? can go \wd\floatbox\floatwidth #1{\box\floatbox}% \doifinset\v!tall\floatlocationmethod\page_sides_flush_floats_after_par} \def\page_one_place_float_left {\page_one_place_float_side_indeed\page_sides_process_float_left\presetindentation} \def\page_one_place_float_right {\page_one_place_float_side_indeed\page_sides_process_float_right} \def\page_one_place_float_leftmargin {\page_one_place_float_side_indeed\page_sides_process_float_leftmargin} \def\page_one_place_float_rightmargin{\page_one_place_float_side_indeed\page_sides_process_float_rightmargin} \def\page_one_place_float_leftedge {\page_one_place_float_side_indeed\page_sides_process_float_leftedge} \def\page_one_place_float_rightedge {\page_one_place_float_side_indeed\page_sides_process_float_rightedge} \def\page_one_place_float_inmargin {\page_one_place_float_side_indeed\page_sides_process_float_cutspace} \def\page_one_place_float_backspace {\page_one_place_float_side_indeed\page_sides_process_float_backspace} \def\page_one_place_float_cutspace {\page_one_place_float_side_indeed\page_sides_process_float_cutspace} %def\page_one_place_float_margin {\page_one_place_float_side_indeed\page_sides_process_float_margin\nonoindentation} % wil be overloaded \def\page_one_place_float_margin {\page_margin_blocks_process_float} \def\page_one_place_float_page {\page_floats_save_page_float \s!page \floatlocationmethod} \def\page_one_place_float_leftpage {\page_floats_save_page_float \s!leftpage \floatlocationmethod} \def\page_one_place_float_rightpage {\page_floats_save_page_float \s!rightpage\floatlocationmethod} \def\page_one_place_float_somewhere {\page_floats_save_somewhere_float\s!somewhere\floatlocationmethod} \def\page_one_place_float_here {\page_one_place_float_otherwise_here} \def\page_one_place_float_auto {\page_one_place_float_otherwise} \def\page_one_place_float_top {\page_one_place_float_otherwise\nonoindentation} \def\page_one_place_float_bottom {\page_one_place_float_otherwise} \def\page_one_place_float_otherwise {\doifinsetelse\v!here\floatlocationmethod \page_one_place_float_otherwise_here \page_one_place_float_otherwise_else} \def\page_one_place_float_otherwise_here {\doifinsetelse\v!always\floatlocationmethod {\page[\v!preference]% \page_otr_command_check_if_float_fits \ifconditional\c_page_floats_room \page_one_place_float_here_indeed \else \showmessage\m!floatblocks9\empty \page_floats_resave\s!text \fi} {\ifconditional\c_page_floats_some_waiting \page_floats_save\s!text \nonoindentation \else \page[\v!preference]% \page_otr_command_check_if_float_fits \ifconditional\c_page_floats_room \page_one_place_float_here_indeed \else \page_floats_save\s!text \nonoindentation \fi \fi}} \def\page_one_place_float_otherwise_else {\doifinsetelse\v!always\floatlocationmethod {\page_otr_command_check_if_float_fits \ifconditional\c_page_floats_room \page_one_place_float_auto_top_bottom \else \showmessage\m!floatblocks9\empty \page_floats_resave\s!text \fi} {\page_otr_command_check_if_float_fits \ifconditional\c_page_floats_room \page_one_place_float_auto_top_bottom \else \page_floats_save\s!text \nonoindentation \fi}} \def\floatautofactor{.5} \def\page_one_place_float_auto_top_bottom {\ifx\floatmethod\v!auto \ifdim\pagetotal<\floatautofactor\pagegoal % when empty page, maxdimen \page_one_place_float_top_indeed \else \page_one_place_float_bottom_indeed \fi \else \ifx\floatmethod\v!top \page_one_place_float_top_indeed \else\ifx\floatmethod\v!bottom \page_one_place_float_bottom_indeed \else \page_one_place_float_here_indeed \fi\fi \fi} \def\page_one_place_float_top_indeed % maybe remember last beforeskip {\page_one_prepare_top_float \page_one_insert_top_float \page_floats_report_total} \def\page_one_place_float_bottom_indeed {\global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax \insert\namedinsertionnumber\s!bottomfloat\bgroup \forgetall \blank[\rootfloatparameter\c!spacebefore]% \page_otr_command_flush_float_box \egroup \page_floats_report_total} \def\page_one_place_float_face % links, rechts, midden, hoog, midden, laag {%\checkwaitingfloats{#1}% \startopposite \page_otr_command_flush_float_box \stopopposite }%\page_floats_report_total} \unexpanded\def\page_one_command_flush_side_floats {\page_sides_flush_floats} \unexpanded\def\page_one_command_synchronize_side_floats {\page_sides_synchronize_floats} \defineoutputroutine [\s!singlecolumn] [\s!page_otr_command_routine =\page_one_command_routine, \s!page_otr_command_package_contents =\page_one_command_package_contents, \s!page_otr_command_set_vsize =\page_one_command_set_vsize, \s!page_otr_command_set_hsize =\page_one_command_set_hsize, \s!page_otr_command_next_page =\page_one_command_next_page, \s!page_otr_command_next_page_and_inserts =\page_one_command_next_page_and_inserts, % \s!page_otr_command_synchronize_hsize =\page_one_command_synchronize_hsize, \s!page_otr_command_set_top_insertions =\page_one_command_set_top_insertions, \s!page_otr_command_set_bottom_insertions =\page_one_command_set_bottom_insertions, \s!page_otr_command_flush_top_insertions =\page_one_command_flush_top_insertions, \s!page_otr_command_flush_bottom_insertions=\page_one_command_flush_bottom_insertions, % \s!page_otr_command_set_float_hsize =\page_one_command_set_float_hsize, \s!page_otr_command_check_if_float_fits =\page_one_command_check_if_float_fits, \s!page_otr_command_flush_float_box =\page_one_command_flush_float_box, \s!page_otr_command_synchronize_side_floats=\page_one_command_synchronize_side_floats, \s!page_otr_command_side_float_output =\page_one_command_side_float_output, \s!page_otr_command_flush_floats =\page_one_command_flush_floats, \s!page_otr_command_flush_side_floats =\page_one_command_flush_side_floats, \s!page_otr_command_flush_saved_floats =\page_one_command_flush_saved_floats, \s!page_otr_command_flush_margin_blocks =\page_one_command_flush_margin_blocks ] % \setupoutputroutine % [\s!singlecolumn] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-tex.lua0000644000175000017500000001274612130411274024114 0ustar norbertnorbertif not modules then modules = { } end modules ['char-tex'] = { version = 1.001, comment = "companion to char-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lpeg = lpeg local find = string.find local P, C, R, S, Cs, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cs, lpeg.Cc local U, lpegmatch = lpeg.patterns.utf8, lpeg.match local allocate, mark = utilities.storage.allocate, utilities.storage.mark characters = characters or { } local characters = characters characters.tex = characters.tex or { } local accentmapping = allocate { ['"'] = { [""] = "¨", A = "Ä", a = "ä", E = "Ë", e = "ë", I = "Ï", i = "ï", ["ı"] = "ï", O = "Ö", o = "ö", U = "Ü", u = "ü", Y = "Ÿ", y = "ÿ", }, ["'"] = { [""] = "´", A = "Á", a = "á", C = "Ć", c = "ć", E = "É", e = "é", I = "Í", i = "í", ["ı"] = "í", L = "Ĺ", l = "ĺ", N = "Ń", n = "ń", O = "Ó", o = "ó", R = "Ŕ", r = "ŕ", S = "Ś", s = "ś", U = "Ú", u = "ú", Y = "Ý", y = "ý", Z = "Ź", z = "ź", }, ["."] = { [""] = "˙", C = "Ċ", c = "ċ", E = "Ė", e = "ė", G = "Ġ", g = "ġ", I = "İ", i = "i", ["ı"] = "i", Z = "Ż", z = "ż", }, ["="] = { [""] = "¯", A = "Ā", a = "ā", E = "Ē", e = "ē", I = "Ī", i = "ī", ["ı"] = "ī", O = "Ō", o = "ō", U = "Ū", u = "ū", }, ["H"] = { [""] = "˝", O = "Ő", o = "ő", U = "Ű", u = "ű", }, ["^"] = { [""] = "ˆ", A = "Â", a = "â", C = "Ĉ", c = "ĉ", E = "Ê", e = "ê", G = "Ĝ", g = "ĝ", H = "Ĥ", h = "ĥ", I = "Î", i = "î", ["ı"] = "î", J = "Ĵ", j = "ĵ", O = "Ô", o = "ô", S = "Ŝ", s = "ŝ", U = "Û", u = "û", W = "Ŵ", w = "ŵ", Y = "Ŷ", y = "ŷ", }, ["`"] = { [""] = "`", A = "À", a = "à", E = "È", e = "è", I = "Ì", i = "ì", ["ı"] = "ì", O = "Ò", o = "ò", U = "Ù", u = "ù", Y = "Ỳ", y = "ỳ", }, ["c"] = { [""] = "¸", C = "Ç", c = "ç", K = "Ķ", k = "ķ", L = "Ļ", l = "ļ", N = "Ņ", n = "ņ", R = "Ŗ", r = "ŗ", S = "Ş", s = "ş", T = "Ţ", t = "ţ", }, ["k"] = { [""] = "˛", A = "Ą", a = "ą", E = "Ę", e = "ę", I = "Į", i = "į", U = "Ų", u = "ų", }, ["r"] = { [""] = "˚", A = "Å", a = "å", U = "Ů", u = "ů", }, ["u"] = { [""] = "˘", A = "Ă", a = "ă", E = "Ĕ", e = "ĕ", G = "Ğ", g = "ğ", I = "Ĭ", i = "ĭ", ["ı"] = "ĭ", O = "Ŏ", o = "ŏ", U = "Ŭ", u = "ŭ", }, ["v"] = { [""] = "ˇ", C = "Č", c = "č", D = "Ď", d = "ď", E = "Ě", e = "ě", L = "Ľ", l = "ľ", N = "Ň", n = "ň", R = "Ř", r = "ř", S = "Š", s = "š", T = "Ť", t = "ť", Z = "Ž", z = "ž", }, ["~"] = { [""] = "˜", A = "Ã", a = "ã", I = "Ĩ", i = "ĩ", ["ı"] = "ĩ", N = "Ñ", n = "ñ", O = "Õ", o = "õ", U = "Ũ", u = "ũ", }, } characters.tex.accentmapping = accentmapping local accent_map = allocate { -- incomplete ['~'] = "̃" , -- ̃ Ẽ ['"'] = "̈" , -- ̈ Ë ["`"] = "̀" , -- ̀ È ["'"] = "́" , -- ́ É ["^"] = "̂" , -- ̂ Ê -- ̄ Ē -- ̆ Ĕ -- ̇ Ė -- ̉ Ẻ -- ̌ Ě -- ̏ Ȅ -- ̑ Ȇ -- ̣ Ẹ -- ̧ Ȩ -- ̨ Ę -- ̭ Ḙ -- ̰ Ḛ } local accents = table.concat(table.keys(accent_map)) local function remap_accents(a,c,braced) local m = accent_map[a] if m then return c .. m elseif braced then return "\\" .. a .. "{" .. c .. "}" else return "\\" .. a .. c end end local command_map = allocate { ["i"] = "ı" } local function remap_commands(c) local m = command_map[c] if m then return m else return "\\" .. c end end local accents = (P('\\') * C(S(accents)) * (P("{") * C(U) * P("}" * Cc(true)) + C(U) * Cc(false))) / remap_accents local commands = (P('\\') * C(R("az","AZ")^1)) / remap_commands local convert_accents = Cs((accents + P(1))^0) local convert_commands = Cs((commands + P(1))^0) local no_l = P("{") / "" local no_r = P("}") / "" local convert_accents_strip = Cs((no_l * accents * no_r + accents + P(1))^0) local convert_commands_strip = Cs((no_l * commands * no_r + commands + P(1))^0) function characters.tex.toutf(str,strip) if not find(str,"\\") then -- we can start at the found position return str elseif strip then return lpegmatch(convert_accents_strip,lpegmatch(convert_commands_strip,str)) else return lpegmatch(convert_accents, lpegmatch(convert_commands, str)) end end --~ print(characters.tex.toutf([[\"{e}]]),true) --~ print(characters.tex.toutf([[{\"{e}}]],true)) function characters.tex.defineaccents() for accent, group in next, accentmapping do context.dodefineaccentcommand(accent) for character, mapping in next, group do context.dodefineaccent(accent,character,mapping) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-fil.mkii0000644000175000017500000001031611754241457024272 0ustar norbertnorbert%D \module %D [ file=cont-fil, %D version=1997.11.15, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=File Synonyms, %D author=J. Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 File Synonyms} \definefilesynonym [chemie] [chemic] \definefilesynonym [chemics] [chemic] \definefilesynonym [unit] [units] \definefilesynonym [eenheid] [units] \definefilesynonym [einheit] [units] \definefilesynonym [pstric] [pstricks] \definefilesynonym [pstrick] [pstricks] \definefilesynonym [finance] [financ] \definefilesynonym [con-01] [contml] % will go away %definefilesynonym [sch-base] [sch-00] %definefilesynonym [sch-make] [sch-01] \definefilesynonym [dir-make] [dir-01] \definefilesynonym [dir-identify] [dir-05] \definefilesynonym [xml-format] [xml-01] \definefilesynonym [xml-pretty] [xml-02] \definefilesynonym [xml-analyze] [xml-11] \definefilesynonym [int-load] [set-11] \definefilesynonym [int-make] [set-12] \definefilesynonym [fig-base] [fig-00] \definefilesynonym [fig-make] [fig-01] \definefilesynonym [fig-fake] [fig-02] \definefilesynonym [fig-missing] [fig-06] \definefilesynonym [exi-interface] [exi-21] \definefilesynonym [res-make] [res-01] \definefilesynonym [res-base] [res-04] \definefilesynonym [res-crop] [res-07] \definefilesynonym [res-trace] [res-08] \definefilesynonym [res-log] [res-09] \definefilesynonym [res-identify] [res-12] \definefilesynonym [med-show] [res-50] \definefilesynonym [pre-general] [pre-00] \definefilesynonym [pre-original] [pre-01] \definefilesynonym [pre-green] [pre-02] \definefilesynonym [pre-funny] [pre-03] \definefilesynonym [pre-colorful] [pre-04] \definefilesynonym [pre-fuzzy] [pre-05] \definefilesynonym [pre-polish] [pre-06] \definefilesynonym [pre-spider] [pre-07] \definefilesynonym [pre-wonder] [pre-08] \definefilesynonym [pre-windows] [pre-09] \definefilesynonym [pre-grow] [pre-10] \definefilesynonym [pre-stack] [pre-11] \definefilesynonym [pre-arrows] [pre-12] \definefilesynonym [pre-writing] [pre-13] \definefilesynonym [pre-split] [pre-14] \definefilesynonym [pre-balls] [pre-15] \definefilesynonym [pre-knot] [pre-16] \definefilesynonym [pre-weird] [pre-17] \definefilesynonym [pre-shade] [pre-18] \definefilesynonym [pre-organic] [pre-19] \definefilesynonym [pre-speckle] [pre-20] \definefilesynonym [pre-zoom] [pre-21] \definefilesynonym [pre-cycle] [pre-22] \definefilesynonym [pre-super] [pre-23] %definefilesynonym [pre-more] [pre-24] %definefilesynonym [pre-more] [pre-25] \definefilesynonym [pre-more] [pre-26] %definefilesynonym [pre-more] [pre-27] %definefilesynonym [pre-more] [pre-28] %definefilesynonym [pre-more] [pre-29] %definefilesynonym [pre-more] [pre-30] \definefilesynonym [pre-stepwise] [pre-60] \definefilesynonym [pre-stepper] [pre-61] \definefilesynonym [pre-punk] [pre-70] \definefilesynonym [pre-random] [pre-71] \definefilesynonym [abr-pseudocaps] [abr-01] \definefilesynonym [abr-smallcaps] [abr-02] \definefilesynonym [chinese] [chi-00] \definefilesynonym [japanese] [jap-00] %definefilesynonym [chi-simplified] [chi-01] %definefilesynonym [chi-traditional] [chi-02] \definefilesynonym [greek] [grk-00] \definefilesynonym [unic-chi] [unic-cjk] \definefilesynonym [unic-jap] [unic-cjk] %definefilesynonym [practexjournal] [ptj-01] \definefilesynonym [pracjourn] [ptj-01] \definefilesynonym [maps] [map-10] \definefilesynonym [map-se] [map-10] % for some time \definefilesynonym [mml] [mathml] \definefilesynonym [cml] [chemml] \definefilesynonym [letter] [cor-01] \definefilesynonym [memo] [cor-02] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mxn.mkii0000644000175000017500000000747511571377075024341 0ustar norbertnorbert\defineMMLsynonym gnapprox gnap \defineMMLsynonym gneq gne \defineMMLsynonym gneqq gnE \defineMMLsynonym gvertneqq gvnE \defineMMLsynonym lnapprox lnap \defineMMLsynonym lneq lne \defineMMLsynonym lneqq lnE \defineMMLsynonym lvertneqq lvnE \defineMMLsynonym napprox nap \defineMMLsynonym ngeq nge \defineMMLsynonym ngeqq ngE \defineMMLsynonym ngeqslant nges \defineMMLsynonym ngtr ngt \defineMMLsynonym nleq nle \defineMMLsynonym nleqq nlE \defineMMLsynonym nleqslant nles \defineMMLsynonym nless nlt \defineMMLsynonym NotCongruent nequiv \defineMMLsynonym NotDoubleVerticalBar npar \defineMMLsynonym NotGreater ngt \defineMMLsynonym NotGreaterEqual nge \defineMMLsynonym NotGreaterFullEqual ngE \defineMMLsynonym NotGreaterGreater nGtv \defineMMLsynonym NotGreaterLess ntvgl \defineMMLsynonym NotGreaterSlantEqual nges \defineMMLsynonym NotGreaterTilde ngsim \defineMMLsynonym NotLeftTriangle nltri \defineMMLsynonym NotLeftTriangleEqual nltrie \defineMMLsynonym NotLess nlt \defineMMLsynonym NotLessEqual nle \defineMMLsynonym NotLessFullEqual nlE \defineMMLsynonym NotLessGreater ntvlg \defineMMLsynonym NotLessLess nLtv \defineMMLsynonym NotLessSlantEqual nles \defineMMLsynonym NotLessTilde nlsim \defineMMLsynonym NotPrecedes npr \defineMMLsynonym NotPrecedesEqual npre \defineMMLsynonym NotPrecedesSlantEqual nprcue \defineMMLsynonym NotRightTriangle nrtri \defineMMLsynonym NotRightTriangleEqual nrtrie \defineMMLsynonym NotSquareSubsetEqual nsqsube \defineMMLsynonym NotSquareSupersetEqual nsqsupe \defineMMLsynonym NotSubset vnsub \defineMMLsynonym NotSucceeds nsc \defineMMLsynonym NotSucceedsEqual nsce \defineMMLsynonym NotSucceedsSlantEqual nsccue \defineMMLsynonym NotSuperset vnsup \defineMMLsynonym NotTilde nsim \defineMMLsynonym NotTildeEqual nsime \defineMMLsynonym NotTildeFullEqual ncong \defineMMLsynonym NotTildeTilde nap \defineMMLsynonym NotVerticalBar nmid \defineMMLsynonym nparallel npar \defineMMLsynonym nprec npr \defineMMLsynonym npreceq npre \defineMMLsynonym nshortmid nsmid \defineMMLsynonym nshortparallel nspar \defineMMLsynonym nsimeq nsime \defineMMLsynonym nsubset vnsub \defineMMLsynonym nsubseteq nsube \defineMMLsynonym nsubseteqq nsubE \defineMMLsynonym nsucc nsc \defineMMLsynonym nsucceq nsce \defineMMLsynonym nsupset vnsup \defineMMLsynonym nsupseteq nsupe \defineMMLsynonym nsupseteqq nsupE \defineMMLsynonym ntriangleleft nltri \defineMMLsynonym ntrianglelefteq nltrie \defineMMLsynonym ntriangleright nrtri \defineMMLsynonym ntrianglerighteq nrtrie \defineMMLsynonym precnapprox prnap \defineMMLsynonym precneqq prnE \defineMMLsynonym precnsim prnsim \defineMMLsynonym subsetneq subne \defineMMLsynonym subsetneqq subnE \defineMMLsynonym succnapprox scnap \defineMMLsynonym succneqq scnE \defineMMLsynonym succnsim scnsim \defineMMLsynonym supsetneq supne \defineMMLsynonym supsetneqq supnE \defineMMLsynonym varsubsetneq vsubne \defineMMLsynonym varsubsetneqq vsubnE \defineMMLsynonym varsupsetneq vsupne \defineMMLsynonym varsupsetneqq vsupnE context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-loggers.lua0000644000175000017500000001504512130411274025606 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-loggers'] = { version = 1.001, comment = "companion to lmx-*", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is experimental code and currently part of the base installation simply -- because it's easier to dirtribute this way. Eventually it will be documented -- and the related scripts will show up as well. local tonumber = tonumber local format = string.format local concat = table.concat local ostime, uuid, osfulltime = os.time, os.uuid, os.fulltime local random = math.random local sql = utilities.sql local loggers = { } sql.loggers = loggers local trace_sql = false trackers.register("sql.loggers.trace", function(v) trace_sql = v end) local report = logs.reporter("sql","loggers") loggers.newtoken = sql.tokens.new local makeconverter = sql.makeconverter local function checkeddb(presets,datatable) return sql.usedatabase(presets,datatable or presets.datatable or "loggers") end loggers.usedb = checkeddb local totype = { ["error"] = 1, [1] = 1, ["1"] = 1, ["warning"] = 2, [2] = 2, ["2"] = 2, ["debug"] = 3, [3] = 3, ["3"] = 3, ["info"] = 4, [4] = 4, ["4"] = 4, } local fromtype = { ["error"] = "error", [1] = "error", ["1"] = "error", ["warning"] = "warning", [2] = "warning", ["2"] = "warning", ["debug"] = "debug", [3] = "debug", ["3"] = "debug", ["info"] = "info", [4] = "info", ["4"] = "info", } table.setmetatableindex(totype, function() return 4 end) table.setmetatableindex(fromtype,function() return "info" end) loggers.totype = totype loggers.fromtype = fromtype local template =[[ CREATE TABLE IF NOT EXISTS %basename% ( `id` int(11) NOT NULL AUTO_INCREMENT, `time` int(11) NOT NULL, `type` int(11) NOT NULL, `action` varchar(15) NOT NULL, `data` longtext, PRIMARY KEY (`id`), UNIQUE KEY `id_unique_key` (`id`) ) DEFAULT CHARSET = utf8 ; ]] function loggers.createdb(presets,datatable) local db = checkeddb(presets,datatable) db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a created in %a",db.name,db.base) return db end local template =[[ DROP TABLE IF EXISTS %basename% ; ]] function loggers.deletedb(presets,datatable) local db = checkeddb(presets,datatable) db.execute { template = template, variables = { basename = db.basename, }, } report("datatable %a removed in %a",db.name,db.base) end local template =[[ INSERT INTO %basename% ( `time`, `type`, `action`, `data` ) VALUES ( %time%, %type%, '%action%', '%[data]%' ) ; ]] function loggers.save(db,data) -- beware, we pass type and action in the data (saves a table) if data then local time = ostime() local kind = totype[data.type] local action = data.action or "unknown" data.type = nil data.action = nil db.execute { template = template, variables = { basename = db.basename, time = ostime(), type = kind, action = action, data = data and db.serialize(data,"return") or "", }, } end end -- local template =[[ -- REMOVE FROM -- %basename% -- WHERE -- `token` = '%token%' ; -- ]] -- -- function loggers.remove(db,token) -- -- db.execute { -- template = template, -- variables = { -- basename = db.basename, -- token = token, -- }, -- } -- -- if trace_sql then -- report("removed: %s",token) -- end -- -- end local template_nop =[[ SELECT `time`, `type`, `action`, `data` FROM %basename% ORDER BY `time`, `type`, `action` DESC LIMIT %limit% ; ]] local template_yes =[[ SELECT `time`, `type`, `action`, `data` FROM %basename% %WHERE% ORDER BY `time`, `type`, `action` DESC LIMIT %limit% ; ]] local converter = makeconverter { -- { name = "time", type = os.localtime }, { name = "time", type = "number" }, { name = "type", type = fromtype }, { name = "action", type = "string" }, { name = "data", type = "deserialize" }, } function loggers.collect(db,specification) specification = specification or { } local start = specification.start local stop = specification.stop local limit = specification.limit or 100 local kind = specification.type local action = specification.action local filtered = start or stop local where = { } if filtered then local today = os.date("*t") if type(start) ~= "table" then start = { } end start = os.time { day = start.day or today.day, month = start.month or today.month, year = start.year or today.year, hour = start.hour or 0, minute = start.minute or 0, second = start.second or 0, isdst = true, } if type(stop) ~= "table" then stop = { } end stop = os.time { day = stop.day or today.day, month = stop.month or today.month, year = stop.year or today.year, hour = stop.hour or 24, minute = stop.minute or 0, second = stop.second or 0, isdst = true, } -- report("filter: %s => %s",start,stop) where[#where+1] = format("`time` BETWEEN %s AND %s",start,stop) end if kind then where[#where+1] = format("`type` = %s",totype[kind]) end if action then where[#where+1] = format("`action` = '%s'",action) end local records = db.execute { template = filtered and template_yes or template_nop, converter = converter, variables = { basename = db.basename, limit = limit, WHERE = #where > 0 and format("WHERE\n%s",concat(where," AND ")) or "", }, } if trace_sql then report("collected: %s loggers",#records) end return records, keys end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-tables.mkiv0000644000175000017500000000222112161703335025420 0ustar norbertnorbert%D \module %D [ file=s-fonts-tables, %D version=2011.10.10, %D title=\CONTEXT\ Style File, %D subtitle=Basic Font Data Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: make a mtxrun --script font option \startmodule[s-fonts-tables] \registerctxluafile{s-fonts-tables}{} \installmodulecommandluasingle \showfonttables {moduledata.fonts.tables.showall} \installmodulecommandluasingle \showfontproperties {moduledata.fonts.tables.showproperties} \installmodulecommandluasingle \showfontparameters {moduledata.fonts.tables.showparameters} \installmodulecommandluasingle \showfontpositionings {moduledata.fonts.tables.showpositionings} \installmodulecommandluasingle \showfontsubstitutions {moduledata.fonts.tables.showsubstitutions} \stopmodule \continueifinputfile{s-fonts-tables.mkiv} \usemodule[art-01] \setupbodyfont [cambria] \starttext \showfonttables[title=Cambria] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-unk.mkiv0000644000175000017500000001311211754241457024332 0ustar norbertnorbert%D \module %D [ file=font-unk, %D version=1998.09.10, %D title=\CONTEXT\ Font Macros, %D subtitle=Unknown Defaults, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is rather important, because it enables us to %D define and call for not yet defined fonts in a way %D completely independant of real font names. First we map %D some meaningful names onto unknown filenames. \unprotect \definefontsynonym [Serif] [unknown] \definefontsynonym [SerifBold] [unknown] \definefontsynonym [SerifItalic] [unknown] \definefontsynonym [SerifSlanted] [unknown] \definefontsynonym [SerifBoldItalic] [unknown] \definefontsynonym [SerifBoldSlanted] [unknown] \definefontsynonym [SerifCaps] [unknown] \definefontsynonym [Sans] [unknown] \definefontsynonym [SansBold] [unknown] \definefontsynonym [SansItalic] [unknown] \definefontsynonym [SansSlanted] [unknown] \definefontsynonym [SansBoldItalic] [unknown] \definefontsynonym [SansBoldSlanted] [unknown] \definefontsynonym [SansCaps] [unknown] \definefontsynonym [Mono] [unknown] \definefontsynonym [MonoBold] [unknown] \definefontsynonym [MonoItalic] [unknown] \definefontsynonym [MonoSlanted] [unknown] \definefontsynonym [MonoBoldItalic] [unknown] \definefontsynonym [MonoBoldSlanted] [unknown] \definefontsynonym [MonoCaps] [unknown] \definefontsynonym [MathRoman] [unknown] \definefontsynonym [MathRomanL2R] [MathRoman] \definefontsynonym [MathRomanR2L] [MathRoman] \definefontsynonym [MathRomanBold] [MathRoman] \definefontsynonym [MathRomanBoldL2R] [MathRomanBold] \definefontsynonym [MathRomanBoldR2L] [MathRomanBold] \definefontsynonym [Handwriting] [unknown] \definefontsynonym [Calligraphic] [unknown] %D This permit us to define (use) fonts that refer to the default %D style (so, Bold may expand to SansBold or SerifBold, depending %D on the default style in the typeface). \definefontsynonym[\s!Normal] [\noexpand\v_font_string_d] \definefontsynonym[\s!Bold] [\noexpand\v_font_string_d\noexpand\s!Bold] \definefontsynonym[\s!Italic] [\noexpand\v_font_string_d\noexpand\s!Italic] \definefontsynonym[\s!Slanted] [\noexpand\v_font_string_d\noexpand\s!Slanted] \definefontsynonym[\s!BoldItalic] [\noexpand\v_font_string_d\noexpand\s!BoldItalic] \definefontsynonym[\s!BoldSlanted][\noexpand\v_font_string_d\noexpand\s!BoldSlanted] \definefontsynonym[\s!Caps] [\noexpand\v_font_string_d\noexpand\s!Caps] %D Also handy: \definefontsynonym [Regular] [Serif] \definefontsynonym [RegularBold] [SerifBold] \definefontsynonym [RegularItalic] [SerifItalic] \definefontsynonym [RegularSlanted] [SerifSlanted] \definefontsynonym [RegularBoldItalic] [SerifBoldItalic] \definefontsynonym [RegularBoldSlanted] [SerifBoldSlanted] \definefontsynonym [RegularCaps] [SerifCaps] \definefontsynonym [Support] [Sans] \definefontsynonym [SupportBold] [SansBold] \definefontsynonym [SupportItalic] [SansItalic] \definefontsynonym [SupportSlanted] [SansSlanted] \definefontsynonym [SupportBoldItalic] [SansBoldItalic] \definefontsynonym [SupportBoldSlanted] [SansBoldSlanted] \definefontsynonym [SupportCaps] [SansCaps] %D Well, not that good an idea: \definefontsynonym [Roman] [Serif] \definefontsynonym [RomanBold] [SerifBold] \definefontsynonym [RomanItalic] [SerifItalic] \definefontsynonym [RomanSlanted] [SerifSlanted] \definefontsynonym [RomanBoldItalic] [SerifBoldItalic] \definefontsynonym [RomanBoldSlanted] [SerifBoldSlanted] \definefontsynonym [RomanCaps] [SerifCaps] \definefontsynonym [Type] [Mono] \definefontsynonym [TypeBold] [MonoBold] \definefontsynonym [TypeItalic] [MonoItalic] \definefontsynonym [TypeSlanted] [MonoSlanted] \definefontsynonym [TypeBoldItalic] [MonoBoldItalic] \definefontsynonym [TypeBoldSlanted] [MonoBoldSlanted] \definefontsynonym [TypeCaps] [MonoCaps] %D Next we define roman, sans and monospaced font sets. \definebodyfont [default] [rm] [\s!tf=Serif sa 1, \s!bf=SerifBold sa 1, \s!it=SerifItalic sa 1, \s!sl=SerifSlanted sa 1, \s!bi=SerifBoldItalic sa 1, \s!bs=SerifBoldSlanted sa 1, \s!sc=SerifCaps sa 1] \definebodyfont [default] [ss] [\s!tf=Sans sa 1, \s!bf=SansBold sa 1, \s!it=SansItalic sa 1, \s!sl=SansSlanted sa 1, \s!bi=SansBoldItalic sa 1, \s!bs=SansBoldSlanted sa 1, \s!sc=SansCaps sa 1] \definebodyfont [default] [tt] [\s!tf=Mono sa 1, \s!bf=MonoBold sa 1, \s!it=MonoItalic sa 1, \s!sl=MonoSlanted sa 1, \s!bi=MonoBoldItalic sa 1, \s!bs=MonoBoldSlanted sa 1, \s!sc=MonoCaps sa 1] \definebodyfont [default] [mm] [\s!mr =MathRoman mo 1, \s!mrlr=MathRomanL2R mo 1, \s!mrrl=MathRomanR2L mo 1, \s!mb =MathRomanBold mo 1, \s!mblr=MathRomanBoldL2R mo 1, \s!mbrl=MathRomanBoldR2L mo 1] \definebodyfont [default] [hw] [\s!tf=Handwriting sa 1] \definebodyfont [default] [cg] [\s!tf=Calligraphy sa 1] %D These definitions come into action as soon as names are %D mapped onto real file names (or names that themselves are %D mapped). \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-chk.lua0000644000175000017500000000406212130411274024115 0ustar norbertnorbertif not modules then modules = { } end modules ['mult-chk'] = { version = 1.001, comment = "companion to mult-chk.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local lpegmatch = lpeg.match local type = type local make_settings_to_hash_pattern = utilities.parsers.make_settings_to_hash_pattern local settings_to_set = utilities.parsers.settings_to_set local allocate = utilities.storage.allocate local report_interface = logs.reporter("interface","checking") interfaces = interfaces or { } interfaces.syntax = allocate { test = { keys = table.tohash { "a","b","c","d","e","f","g" } } } function interfaces.invalidkey(category,key) report_interface("invalid key %a for %a in line %a",key,category,tex.inputlineno) end function interfaces.setvalidkeys(category,list) local s = interfaces.syntax[category] if not s then interfaces.syntax[category] = { keys = settings_to_set(list) } else s.keys = settings_to_set(list) end end function interfaces.addvalidkeys(category,list) local s = interfaces.syntax[category] if not s then interfaces.syntax[category] = { keys = settings_to_set(list) } else settings_to_set(list,s.keys) end end -- weird code, looks incomplete ... probably an experiment local prefix, category, keys local setsomevalue = context.setsomevalue local invalidkey = interfaces.invalidkey local function set(key,value) if keys and not keys[key] then invalidkey(category,key) else setsomevalue(prefix,key,value) end end local pattern = make_settings_to_hash_pattern(set,"tolerant") function interfaces.getcheckedparameters(k,p,s) if s and s ~= "" then prefix, category = p, k keys = k and k ~= "" and interfaces.syntax[k].keys lpegmatch(pattern,s) end end -- _igcp_ = interfaces.getcheckedparameters context-2013.05.28.20130704/texmf-dist/tex/context/base/s-inf-01.mkvi0000644000175000017500000002074512130411274024016 0ustar norbertnorbert%D \module %D [ file=s-inf-01, %D version=2009.07.09, %D title=\CONTEXT\ Style File, %D subtitle=Information 1 (\MKII/\MKIV\ usage), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Some day I will generalize this table mechanism. This list is only %D right when run in the minimals as my machine might have more files. %D %D Als, the remaining tex code can proably be lua also which is more %D consistent. %D %D \starttyping %D context auto:s-inf-01 %D context auto:s-inf-01 --basepath=t:/texmf/tex/context/base %D \stoptyping % \enabletrackers[context.*] \startluacode local format, gsub, find, match = string.format, string.gsub, string.find, string.match local list, size, comp, used, nope = { }, { }, { }, { mkii = { }, mkiv = { }, mkvi = { } }, { 0, 0, 0, 0, 0 } local omit = { "char%-def%.lua", "mult%-def%.lua", "mult%-..%.mkii", "mult%-m..%.mkii", } local skip = { "prag%-.*%.tex", "docs%-.*.tex", "list%-.*%.tex", "test%-.*%.tex", "demo%-.*%.tex", "opti%-.*%.tex", "chrt%-.*%.tex", ".*%-old", ".*%-obs", ".*%-tst", "supp%-.*%.tex", "colo%-pan.tex", ".*test.*" } local types = { "tex", "mkii", "mkiv", "mkvi", "lua" } local patterns = { "^([a-z][a-z][a-z][a-z])%-[a-z0-9%-]+%.[a-z]+", "^([xms])%-[a-z0-9%-]+%.[a-z]+", } local function collect(list,suffix,n) local path = document.arguments.basepath or file.dirname(resolvers.find_file("context.mkiv"),".") local pattern = path .. "/*." .. suffix .. "$" -- avoid bla.tex~ local texfiles = dir.glob(pattern) for i=1,#texfiles do local name = texfiles[i] local base = file.basename(name) for p=1,#patterns do local category = match(base,patterns[p]) if category and lfs.isfile(name) then local okay = true for s=1,#skip do if find(base,skip[s]) then okay = false break end end if okay then local lm, sm, cm = list[category], size[category], comp[category] if not lm then lm, sm, cm = { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 } list[category], size[category], comp[category] = lm, sm, cm end lm[n] = lm[n] + 1 local done = true for o=1,#omit do if find(base,omit[o]) then done = false break end end local data = io.loaddata(name) if data then if suffix == "lua" then data = gsub(data,"%-%-%[%[.-%]%]%-%-","") data = gsub(data,"%-%-.-[\n\r]","") else data = gsub(data,"%%.-[\n\r]","") end data = gsub(data,"%s","") else logs.report("error","unknown file %a",name) data = "" end sm[n+5] = sm[n+5] + #data if done then sm[n] = sm[n] + #data else cm[n] = cm[n] + 1 end end end end end end local function prepare(what) if next(list) then -- already loaded else for i=1,#types do collect(list,types[i],i) end for category in next, list do pattern ="{"..category.."%-" for suffix, t in next, used do local data = io.loaddata(resolvers.find_file("context."..suffix)) if data and find(data,pattern) then t[category] = true end end end end local max, what = 0, (what == "size" and size) or list for k, v in table.sortedpairs(what) do for i=1,5 do if v[i] > max then max = v[i] end end end return max, what, function(n) return (max == 0 and 0) or (n == 0 and 0) or n/max end end function document.context_state_1(what) local max, what, norm = prepare(what) context.starttabulate { "|Tl|T|T|T|T|T|" } context.NC() context(category) context.NC() for i=1,#types do local n, m = 0, 0 for k, v in next, list do local nn, mm = what[k][i], what[k][i+5] n = n + nn m = m + (mm or nn) end context.Top(types[i],norm(max),n,m) context.NC() end context.NC() context.NR() context.HL() for k, v in table.sortedpairs(what) do local c = what == size and comp[k] or nope context.NC() context("%s~%s~~%s~~%s", (used.mkii[k] and "ii") or "~~", (used.mkiv[k] and "iv") or "~~", (used.mkvi[k] and "vi") or "~~", k ) context.NC() for i=1,#types do context.Bar(types[i],v[i],c[i],norm(v[i])) context.NC() end context.NR() end context.stoptabulate() end function document.context_state_2(what) local max, what, norm = prepare(what) for k, v in table.sortedpairs(what) do local c = (what == size and comp[k]) or nope context.StartUp(k) for i=1,#types do context.Up(types[i],norm(v[i])) end context.StopUp() end end \stopluacode \definecolor[bar:tex] [middlegreen] \definecolor[bar:mkii][middleblue] \definecolor[bar:mkiv][middlered] \definecolor[bar:mkvi][middleyellow] \definecolor[bar:lua] [middlegray] \newcount\UpCounter \starttexdefinition Top #what#fraction#total#bigones \hbox to 5em{\hss#total}% \enspace \hbox {#what\ifnum#total=#bigones\else~#bigones\rlap{~+}\fi\hss}% \stoptexdefinition \starttexdefinition Bar #color#size#nobigones#fraction \ifcase#size\else \hbox to 5em{\hss\ifcase#nobigones\else\llap{-~}\fi#size}% \enspace \blackrule[color=bar:#color,width=#fraction\dimexpr 20em\relax,height=.8\strutht]% \fi \stoptexdefinition \starttexdefinition StartUp #name \def\UpName{#name}% \dontleavehmode\framed[frame=off,align={middle,low},height=18em]\bgroup \stoptexdefinition \starttexdefinition StopUp \par\nointerlineskip\blackrule[height=1pt,width=5em,depth=0pt,color=darkgray] \par\tttf\strut\UpName\par \egroup \ifnum\UpCounter=17 \par \UpCounter\zerocount \else \kern1em \advance\UpCounter\plusone \fi \stoptexdefinition \starttexdefinition Up #color#width \scratchdimen#width\dimexpr 16em\relax \ifdim\scratchdimen=\zeropoint \kern1em \else \ifdim\scratchdimen<\onepoint \scratchdimen\onepoint \fi \blackrule[color=bar:#color,height=\scratchdimen,width=1em]% \fi \stoptexdefinition \starttexdefinition Show #title#how#what \startTEXpage[offset=1em,width=fit] \hbox{\tttf\strut\currentdate~-~#title} \par \ctxlua{document.context_state_\number#how("#what")} \stopTEXpage \stoptexdefinition % \continueifinputfile{s-inf-01.mkvi} \starttext \Show {The number of files used in ConTeXt (base modules and styles).} {1}{number} \Show {The size of (core) files used in ConTeXt (- indicates exclusion of large data files; + indicates inclusion of large data files; comment and spaces removed.)} {1}{size} \Show {The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, lua).} {2}{number} \Show {The relative size of files used in ConTeXt (tex, mkii, mkiv, mkvi, lua).} {2}{size} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-sla.mkii0000644000175000017500000004362111754241457024262 0ustar norbertnorbert%D \module %D [ file=lang-sla, %D version=1999.09.13, % 1997.09.03 %D title=\CONTEXT\ Language Macros, %D subtitle=Slavic Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % Todo: replace \'.. by \namedglyph %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. %D %D \starttabulate[|lB|l|] %D \NC Czech \NC Tom Hudec, Petr Sojka \NC \NR %D \NC Polish \NC Grzegorz Sapijaszko \NC \NR %D \NC Croatian \NC \Zcaron eljko Vrba \NC \NR %D \NC Slovenian \NC Mojca Miklavec \NC \NR %D \NC Cz and Sk \NC Richard Gabriel \NC \NR %D \stoptabulate % Belarussian, Russian, Ukrainian, Bulgarian, Macedonian, % Serbian, Croatian, Slovenian, Czech, Kushubian, % Lusatian/Sorbian/Wendish, Polish, Slovak, Albanian, % Illyrian, Armenian \writestatus{loading}{ConTeXt Language Macros / Slavic Languages} \unprotect \installlanguage [\s!pl] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year}, \s!mapping={pl0,ec,qx}, \s!encoding={pl0,ec,qx}] \installlanguage [\s!cs] [\c!spacing=\v!packed, \c!leftsentence=\thickglue--\thickglue\penalty-20\relax, % hh, \relax added \c!rightsentence=\thickglue--\thickglue\penalty-20\relax, \c!leftsubsentence=~---~\penalty-20\relax, \c!rightsubsentence=~---~\penalty-20\relax, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsinglesixquote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoublesixquote, \c!date={\v!day,{.\,},\v!month,\ ,\v!year}, \s!mapping={il2,ec}, \s!encoding={il2,ec}] \installlanguage [\s!sk] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,{.\,},\v!month,\ ,\v!year}, \s!mapping={il2,ec}, \s!encoding={il2,ec}] \installlanguage [\s!hr] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year}, \s!mapping=ec, \s!encoding=ec] %D The default quotation marks for Slovenian were chosen as %D \lowerleftdoubleninequote these ones\upperrightdoublesixquote\ %D which was probably due to the strong influence computers %D had on typesetting, but \rightguillemot these ones\leftguillemot\ %D are \quotation{more correct}. %D %D If you still want the other quotation marks, use this: %D %D \starttyping %D \installlanguage %D [sl] %D [leftquote=\lowerleftsingleninequote, %D rightquote=\upperrightsinglesixquote, %D leftquotation=\lowerleftdoubleninequote, %D rightquotation=\upperrightdoublesixquote] %D \stoptyping %D %D If you disagree with the change, please send an email to Mojca, but %D best use some pretty strong arguments because she loves S{\sl love}nia %D too much to compromise on this. %D %D German faces approximately the same problem. I (MM) would prefer to %D have something like: %D %D \starttyping %D \mainlanguage[sl][quotationstyle=guillemot|doublequote] % better name needed %D \stoptyping %D %D but users are expected to respect the rules of nice and correct %D typography anyway. \installlanguage [\s!sl] [\c!spacing=\v!packed, \c!leftsentence={\hbox{--~}}, \c!rightsentence={\hbox{~--}}, \c!leftsubsentence={--}, \c!rightsubsentence={--}, %\c!leftquote=\lowerleftsingleninequote, %\c!rightquote=\upperrightsinglesixquote, %\c!leftquotation=\lowerleftdoubleninequote, %\c!rightquotation=\upperrightdoublesixquote, \c!leftquote=\guilsingleright, \c!rightquote=\guilsingleleft, \c!leftquotation=\rightguillemot, \c!rightquotation=\leftguillemot, \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year}, \s!mapping=ec, \s!encoding=ec] \installlanguage [polish] [\s!pl] \installlanguage [czech] [\s!cs] \installlanguage [slovak] [\s!sk] \installlanguage [croatian] [\s!hr] \installlanguage [slovenian] [\s!sl] \installlanguage [slovene] [\s!sl] % both possible (mojca: still needed?) \installlanguage [cz] [\s!cs] % labels \setupheadtext [\s!pl] [\v!content=Spis tre\sacute ci] \setupheadtext [\s!cs] [\v!content=Obsah] \setupheadtext [\s!sk] [\v!content=Obsah] \setupheadtext [\s!hr] [\v!content=Sadr\zcaron aj] \setupheadtext [\s!sl] [\v!content=Kazalo] \setupheadtext [\s!pl] [\v!tables=Tabele] \setupheadtext [\s!cs] [\v!tables=Tabulky] \setupheadtext [\s!sk] [\v!tables=Tabuliek] \setupheadtext [\s!hr] [\v!tables=Tablice] \setupheadtext [\s!sl] [\v!tables=Tabele] \setupheadtext [\s!pl] [\v!figures=Ilustracje] \setupheadtext [\s!cs] [\v!figures=Obr\aacute zky] \setupheadtext [\s!sk] [\v!figures=Obr\aacute zkov] \setupheadtext [\s!hr] [\v!figures=Slike] \setupheadtext [\s!sl] [\v!figures=Slike] \setupheadtext [\s!pl] [\v!graphics=Grafika] \setupheadtext [\s!cs] [\v!graphics=Grafy] \setupheadtext [\s!sk] [\v!graphics=Graf] \setupheadtext [\s!hr] [\v!graphics=Slike] \setupheadtext [\s!sl] [\v!graphics=Slike] \setupheadtext [\s!pl] [\v!intermezzi=Intermezza] \setupheadtext [\s!cs] [\v!intermezzi=Intermezza] \setupheadtext [\s!sk] [\v!intermezzi=Intermezz\aacute] \setupheadtext [\s!hr] [\v!intermezzi=Intermeci] \setupheadtext [\s!sl] [\v!intermezzi=Intermezzi] \setupheadtext [\s!pl] [\v!index=Indeks] \setupheadtext [\s!cs] [\v!index=Rejst\rcaron\iacute k] \setupheadtext [\s!sk] [\v!index=Zoznam] \setupheadtext [\s!hr] [\v!index=Indeks] \setupheadtext [\s!sl] [\v!index=Stvarno kazalo] \setupheadtext [\s!pl] [\v!abbreviations=Skr\oacute cenie] \setupheadtext [\s!cs] [\v!abbreviations=Zkratky] \setupheadtext [\s!sk] [\v!abbreviations=Skratky] \setupheadtext [\s!hr] [\v!abbreviations=Kratice] \setupheadtext [\s!sl] [\v!abbreviations=Kratice] \setupheadtext [\s!pl] [\v!logos=Znaki] \setupheadtext [\s!cs] [\v!logos=Loga] \setupheadtext [\s!sk] [\v!logos=Log\aacute] \setupheadtext [\s!hr] [\v!logos=Znakovi] \setupheadtext [\s!sl] [\v!logos=Logotipi] \setupheadtext [\s!pl] [\v!units=Jednostki] \setupheadtext [\s!cs] [\v!units=Jednotky] \setupheadtext [\s!sk] [\v!units=Jednotky] \setupheadtext [\s!hr] [\v!units=Jedinice] \setupheadtext [\s!sl] [\v!units=Enote] %setupheadtext [\s!pl] [pubs=?] \setupheadtext [\s!cs] [pubs=Literatura] %setupheadtext [\s!sk] [pubs=?] \setupheadtext [\s!hr] [pubs=Literatura] \setupheadtext [\s!sl] [pubs=Literatura] \setuplabeltext [\s!pl] [\v!table=Tabela ] \setuplabeltext [\s!cs] [\v!table=Tabulka ] \setuplabeltext [\s!sk] [\v!table=Tabu\lcaron ka ] \setuplabeltext [\s!hr] [\v!table=Tablica ] \setuplabeltext [\s!sl] [\v!table=Tabela ] \setuplabeltext [\s!pl] [\v!figure=Ilustracja ] \setuplabeltext [\s!cs] [\v!figure=Obr\aacute zek ] \setuplabeltext [\s!sk] [\v!figure=Obr\aacute zok ] \setuplabeltext [\s!hr] [\v!figure=Slika ] \setuplabeltext [\s!sl] [\v!figure=Slika ] \setuplabeltext [\s!pl] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!cs] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!sk] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!hr] [\v!intermezzo=Intermeco ] \setuplabeltext [\s!sl] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!pl] [\v!graphic=Grafika ] \setuplabeltext [\s!cs] [\v!graphic=Graf ] \setuplabeltext [\s!sk] [\v!graphic=Graf ] \setuplabeltext [\s!hr] [\v!graphic=Slika ] \setuplabeltext [\s!sl] [\v!graphic=Slika ] \setuplabeltext [\s!pl] [\v!chapter=] % Rozdzia\l \setuplabeltext [\s!cs] [\v!chapter=] % Kapitola \setuplabeltext [\s!sk] [\v!chapter=] % Kapitola \setuplabeltext [\s!hr] [\v!chapter=] % Poglavlje \setuplabeltext [\s!sl] [\v!chapter=] % Poglavje \setuplabeltext [\s!pl] [\v!section=] % Podrozdzia\l \setuplabeltext [\s!cs] [\v!section=] % Sekce \setuplabeltext [\s!sk] [\v!section=] % Sekcia \setuplabeltext [\s!hr] [\v!section=] % Odjeljak \setuplabeltext [\s!sl] [\v!section=] \setuplabeltext [\s!pl] [\v!subsection=] \setuplabeltext [\s!cs] [\v!subsection=] % Podsekce \setuplabeltext [\s!sk] [\v!subsection=] % Podsekcia \setuplabeltext [\s!hr] [\v!subsection=] % Pododjeljak \setuplabeltext [\s!sl] [\v!subsection=] \setuplabeltext [\s!pl] [\v!subsubsection=] \setuplabeltext [\s!cs] [\v!subsubsection=] % Podpodsekce \setuplabeltext [\s!sk] [\v!subsubsection=] % Podpodsekcia \setuplabeltext [\s!hr] [\v!subsubsection=] % Podpododjeljak \setuplabeltext [\s!sl] [\v!subsubsection=] \setuplabeltext [\s!pl] [\v!subsubsubsection=] \setuplabeltext [\s!cs] [\v!subsubsubsection=] % Podpodpodsekce \setuplabeltext [\s!sk] [\v!subsubsubsection=] % Podpodpodsekcia \setuplabeltext [\s!hr] [\v!subsubsubsection=] % Podpodpododjeljak \setuplabeltext [\s!sl] [\v!subsubsubsection=] \setuplabeltext [\s!pl] [\v!appendix=] % Dodatek \setuplabeltext [\s!cs] [\v!appendix=] % P\rcaron\iacute loha \setuplabeltext [\s!sk] [\v!appendix=] % Pr\iacute loha \setuplabeltext [\s!hr] [\v!appendix=] % Dodatak \setuplabeltext [\s!sl] [\v!appendix=] % Dodatek \setuplabeltext [\s!pl] [\v!part=Ust\eogonek p ] \setuplabeltext [\s!cs] [\v!part=\Ccaron \aacute st ] \setuplabeltext [\s!sk] [\v!part=\Ccaron as\tcaron{} ] \setuplabeltext [\s!hr] [\v!part=Dio ] \setuplabeltext [\s!sl] [\v!part=Del ] \setuplabeltext [\s!pl] [\v!line=wiersz ] \setuplabeltext [\s!cs] [\v!line=\rcaron\aacute dek ] \setuplabeltext [\s!sk] [\v!line=riadok ] \setuplabeltext [\s!hr] [\v!line=redak ] \setuplabeltext [\s!sl] [\v!line=vrstica ] \setuplabeltext [\s!pl] [\v!lines=wiersze ] \setuplabeltext [\s!cs] [\v!lines=\rcaron\aacute dky ] \setuplabeltext [\s!sk] [\v!lines=riadky ] \setuplabeltext [\s!hr] [\v!lines=retci ] \setuplabeltext [\s!sl] [\v!lines=vrstice ] \setuplabeltext [\s!pl] [\v!january=stycznia] \setuplabeltext [\s!pl] [\v!february=lutego] \setuplabeltext [\s!pl] [\v!march=marca] \setuplabeltext [\s!pl] [\v!april=kwietnia] \setuplabeltext [\s!pl] [\v!may=maja] \setuplabeltext [\s!pl] [\v!june=czerwca] \setuplabeltext [\s!pl] [\v!july=lipca] \setuplabeltext [\s!pl] [\v!august=sierpnia] \setuplabeltext [\s!pl] [\v!september=wrze\sacute nia] \setuplabeltext [\s!pl] [\v!october=pa\zacute dziernika] \setuplabeltext [\s!pl] [\v!november=listopada] \setuplabeltext [\s!pl] [\v!december=grudnia] \setuplabeltext [\s!cs] [\v!january=ledna] \setuplabeltext [\s!cs] [\v!february=\uacute nora] \setuplabeltext [\s!cs] [\v!march=b\rcaron ezna] \setuplabeltext [\s!cs] [\v!april=dubna] \setuplabeltext [\s!cs] [\v!may=kv\ecaron tna] \setuplabeltext [\s!cs] [\v!june=\ccaron ervna] \setuplabeltext [\s!cs] [\v!july=\ccaron ervence] \setuplabeltext [\s!cs] [\v!august=srpna] \setuplabeltext [\s!cs] [\v!september=z\aacute\rcaron\iacute{}] \setuplabeltext [\s!cs] [\v!october=\rcaron\iacute jna] \setuplabeltext [\s!cs] [\v!november=listopadu] \setuplabeltext [\s!cs] [\v!december=prosince] \setuplabeltext [\s!sk] [\v!january=janu\aacute ra] \setuplabeltext [\s!sk] [\v!february=febru\aacute ra] \setuplabeltext [\s!sk] [\v!march=marca] \setuplabeltext [\s!sk] [\v!april=apr\iacute la] \setuplabeltext [\s!sk] [\v!may=m\aacute ja] \setuplabeltext [\s!sk] [\v!june=j\uacute na] \setuplabeltext [\s!sk] [\v!july=j\uacute la] \setuplabeltext [\s!sk] [\v!august=augusta] \setuplabeltext [\s!sk] [\v!september=septembra] \setuplabeltext [\s!sk] [\v!october=okt\oacute bra] \setuplabeltext [\s!sk] [\v!november=novembra] \setuplabeltext [\s!sk] [\v!december=decembra] \setuplabeltext [\s!hr] [\v!january=sije\ccaron anj] \setuplabeltext [\s!hr] [\v!february=velja\ccaron a] \setuplabeltext [\s!hr] [\v!march=o\zcaron ujak] \setuplabeltext [\s!hr] [\v!april=travanj] \setuplabeltext [\s!hr] [\v!may=svibanj] \setuplabeltext [\s!hr] [\v!june=lipanj] \setuplabeltext [\s!hr] [\v!july=srpanj] \setuplabeltext [\s!hr] [\v!august=kolovoz] \setuplabeltext [\s!hr] [\v!september=rujan] \setuplabeltext [\s!hr] [\v!october=listopad] \setuplabeltext [\s!hr] [\v!november=studeni] \setuplabeltext [\s!hr] [\v!december=prosinac] \setuplabeltext [\s!sl] [\v!january=januar] \setuplabeltext [\s!sl] [\v!february=februar] \setuplabeltext [\s!sl] [\v!march=marec] \setuplabeltext [\s!sl] [\v!april=april] \setuplabeltext [\s!sl] [\v!may=maj] \setuplabeltext [\s!sl] [\v!june=junij] \setuplabeltext [\s!sl] [\v!july=julij] \setuplabeltext [\s!sl] [\v!august=avgust] \setuplabeltext [\s!sl] [\v!september=september] \setuplabeltext [\s!sl] [\v!october=oktober] \setuplabeltext [\s!sl] [\v!november=november] \setuplabeltext [\s!sl] [\v!december=december] \setuplabeltext [\s!pl] [\v!sunday=niedziela] \setuplabeltext [\s!pl] [\v!monday=poniedzia\lstroke ek] \setuplabeltext [\s!pl] [\v!tuesday=wtorek] \setuplabeltext [\s!pl] [\v!wednesday=\sacute roda] \setuplabeltext [\s!pl] [\v!thursday=czwartek] \setuplabeltext [\s!pl] [\v!friday=pi\aogonek tek] \setuplabeltext [\s!pl] [\v!saturday=sobota] \setuplabeltext [\s!cs] [\v!sunday=ned\ecaron le] \setuplabeltext [\s!cs] [\v!monday=pond\ecaron l\iacute] \setuplabeltext [\s!cs] [\v!tuesday=\uacute ter\yacute] \setuplabeltext [\s!cs] [\v!wednesday=st\rcaron eda] \setuplabeltext [\s!cs] [\v!thursday=\ccaron tvrtek] \setuplabeltext [\s!cs] [\v!friday=p\aacute tek] \setuplabeltext [\s!cs] [\v!saturday=sobota] % Slovakian missing \setuplabeltext [\s!hr] [\v!sunday=nedjelja] \setuplabeltext [\s!hr] [\v!monday=ponedjeljak] \setuplabeltext [\s!hr] [\v!tuesday=utorak] \setuplabeltext [\s!hr] [\v!wednesday=srijeda] \setuplabeltext [\s!hr] [\v!thursday=\ccaron etvrtak] \setuplabeltext [\s!hr] [\v!friday=petak] \setuplabeltext [\s!hr] [\v!saturday=subota] \setuplabeltext [\s!sl] [\v!sunday=nedelja] \setuplabeltext [\s!sl] [\v!monday=ponedeljek] \setuplabeltext [\s!sl] [\v!tuesday=torek] \setuplabeltext [\s!sl] [\v!wednesday=sreda] \setuplabeltext [\s!sl] [\v!thursday=\ccaron etrtek] \setuplabeltext [\s!sl] [\v!friday=petek] \setuplabeltext [\s!sl] [\v!saturday=sobota] %D Rather new ... %\installlanguage % [\s!cs] % [\c!spacing=\v!packed, % \c!leftsentence=---, % \c!rightsentence=---, % \c!leftsubsentence=---, % \c!rightsubsentence=---, % \c!leftquote=\lowerleftsingleninequote, % \c!rightquote=\upperrightsinglesixquote, % \c!leftquotation=\lowerleftdoubleninequote, % \c!rightquotation=\upperrightdoublesixquote, % \c!date={\v!day,\ ,\v!month,\ ,\v!year}] % Polish missing \setuplabeltext [\s!cs] [\v!page=strana ] \setuplabeltext [\s!cs] [\v!atpage=na stran\ecaron\ ] \setuplabeltext [\s!cs] [\v!hencefore=viz v\yacute\scaron e ] \setuplabeltext [\s!cs] [\v!hereafter=viz n\iacute\zcaron e ] \setuplabeltext [\s!cs] [\v!see=viz ] % Slovakian missing \setuplabeltext [\s!hr] [\v!page=stranica ] \setuplabeltext [\s!hr] [\v!atpage=na stranici ] \setuplabeltext [\s!hr] [\v!hencefore=vidi gore ] \setuplabeltext [\s!hr] [\v!hereafter=vidi ispod ] \setuplabeltext [\s!hr] [\v!see=vidi ] \setuplabeltext [\s!sl] [\v!page=stran ] \setuplabeltext [\s!sl] [\v!atpage=na strani ] \setuplabeltext [\s!sl] [\v!hencefore=glej zgoraj ] \setuplabeltext [\s!sl] [\v!hereafter=glej spodaj ] \setuplabeltext [\s!sl] [\v!see=glej ] %D \ShowAllLanguageValues [\s!pl] [polish] {Polish} {furniture} %D \ShowAllLanguageValues [\s!cs] [czech] {Czech} {mate} %D \ShowAllLanguageValues [\s!sk] [slovak] {Slovakian} {face} %D \ShowAllLanguageValues [\s!hr] [croatian] {Croatian} {heartthrob} %D \ShowAllLanguageValues [\s!sl] [slovenian] {Slovenian} {mountains} %D A present from Brooks Moses and Hans Hagen for Mojca Miklavec: \def\doconvertsloveniancharacters{\dodoconvertcharacters{25}} \def\sloveniancharacters{\doconvertsloveniancharacters\sloveniancharacter} \def\slovenianCharacters{\doconvertsloveniancharacters\slovenianCharacter} %D Define general-purpose macros for Slovenian character enumerations: \defineconversion [sloveniancharacter] [\sloveniancharacter] \defineconversion [slovenianCharacter] [\slovenianCharacter] \defineconversion [sloveniancharacters] [\sloveniancharacters] \defineconversion [slovenianCharacters] [\slovenianCharacters] %D Define these as the general character enumeration when %D language is Slovenian. If you feel uncomfortable with this, %D mail Mojca, since she promised to to take the heat. \defineconversion [sl] [character] [\sloveniancharacter] \defineconversion [sl] [Character] [\slovenianCharacter] \defineconversion [sl] [characters] [\sloveniancharacters] \defineconversion [sl] [Characters] [\slovenianCharacters] \defineconversion [sl] [a] [\sloveniancharacters] \defineconversion [sl] [A] [\slovenianCharacters] \defineconversion [sl] [AK] [\smallcapped\sloveniancharacters] \defineconversion [sl] [KA] [\smallcapped\sloveniancharacters] \def\sloveniancharacter#1% {\ifcase#1\unknowncharacter \or a\or b\or c\or \ccaron\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m% \or n\or o\or p\or r\or s\or \scaron\or t\or u\or v\or z\or \zcaron \else \unknowncharacter \fi} \def\slovenianCharacter#1% {\ifcase#1\unknowncharacter \or A\or B\or C\or \Ccaron\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M% \or N\or O\or P\or R\or S\or \Scaron\or T\or U\or V\or Z\or \Zcaron \else \unknowncharacter \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-file.lua0000644000175000017500000004256112161703335023555 0ustar norbertnorbertif not modules then modules = { } end modules ['l-file'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- needs a cleanup file = file or { } local file = file if not lfs then lfs = optionalrequire("lfs") end if not lfs then lfs = { getcurrentdir = function() return "." end, attributes = function() return nil end, isfile = function(name) local f = io.open(name,'rb') if f then f:close() return true end end, isdir = function(name) print("you need to load lfs") return false end } elseif not lfs.isfile then local attributes = lfs.attributes function lfs.isdir(name) return attributes(name,"mode") == "directory" end function lfs.isfile(name) return attributes(name,"mode") == "file" end -- function lfs.isdir(name) -- local a = attributes(name) -- return a and a.mode == "directory" -- end -- function lfs.isfile(name) -- local a = attributes(name) -- return a and a.mode == "file" -- end end local insert, concat = table.insert, table.concat local match, find, gmatch = string.match, string.find, string.gmatch local lpegmatch = lpeg.match local getcurrentdir, attributes = lfs.currentdir, lfs.attributes local checkedsplit = string.checkedsplit -- local patterns = file.patterns or { } -- file.patterns = patterns local P, R, S, C, Cs, Cp, Cc, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Cp, lpeg.Cc, lpeg.Ct local colon = P(":") local period = P(".") local periods = P("..") local fwslash = P("/") local bwslash = P("\\") local slashes = S("\\/") local noperiod = 1-period local noslashes = 1-slashes local name = noperiod^1 local suffix = period/"" * (1-period-slashes)^1 * -1 ----- pattern = C((noslashes^0 * slashes^1)^1) local pattern = C((1 - (slashes^1 * noslashes^1 * -1))^1) * P(1) -- there must be a more efficient way local function pathpart(name,default) return name and lpegmatch(pattern,name) or default or "" end local pattern = (noslashes^0 * slashes)^1 * C(noslashes^1) * -1 local function basename(name) return name and lpegmatch(pattern,name) or name end -- print(pathpart("file")) -- print(pathpart("dir/file")) -- print(pathpart("/dir/file")) -- print(basename("file")) -- print(basename("dir/file")) -- print(basename("/dir/file")) local pattern = (noslashes^0 * slashes^1)^0 * Cs((1-suffix)^1) * suffix^0 local function nameonly(name) return name and lpegmatch(pattern,name) or name end local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * C(noperiod^1) * -1 local function suffixonly(name) return name and lpegmatch(pattern,name) or "" end local pattern = (noslashes^0 * slashes)^0 * noperiod^1 * ((period * C(noperiod^1))^1) * -1 + Cc("") local function suffixesonly(name) if name then return lpegmatch(pattern,name) else return "" end end file.pathpart = pathpart file.basename = basename file.nameonly = nameonly file.suffixonly = suffixonly file.suffix = suffixonly file.suffixesonly = suffixesonly file.suffixes = suffixesonly file.dirname = pathpart -- obsolete file.extname = suffixonly -- obsolete -- actually these are schemes local drive = C(R("az","AZ")) * colon local path = C((noslashes^0 * slashes)^0) local suffix = period * C(P(1-period)^0 * P(-1)) local base = C((1-suffix)^0) local rest = C(P(1)^0) drive = drive + Cc("") path = path + Cc("") base = base + Cc("") suffix = suffix + Cc("") local pattern_a = drive * path * base * suffix local pattern_b = path * base * suffix local pattern_c = C(drive * path) * C(base * suffix) -- trick: two extra captures local pattern_d = path * rest function file.splitname(str,splitdrive) if not str then -- error elseif splitdrive then return lpegmatch(pattern_a,str) -- returns drive, path, base, suffix else return lpegmatch(pattern_b,str) -- returns path, base, suffix end end function file.splitbase(str) if str then return lpegmatch(pattern_d,str) -- returns path, base+suffix (path has / appended, might change at some point) else return "", str -- assume no path end end ---- stripslash = C((1 - P("/")^1*P(-1))^0) function file.nametotable(str,splitdrive) if str then local path, drive, subpath, name, base, suffix = lpegmatch(pattern_c,str) -- if path ~= "" then -- path = lpegmatch(stripslash,path) -- unfortunate hack, maybe this becomes default -- end if splitdrive then return { path = path, drive = drive, subpath = subpath, name = name, base = base, suffix = suffix, } else return { path = path, name = name, base = base, suffix = suffix, } end end end -- print(file.splitname("file")) -- print(file.splitname("dir/file")) -- print(file.splitname("/dir/file")) -- print(file.splitname("file")) -- print(file.splitname("dir/file")) -- print(file.splitname("/dir/file")) -- inspect(file.nametotable("file.ext")) -- inspect(file.nametotable("dir/file.ext")) -- inspect(file.nametotable("/dir/file.ext")) -- inspect(file.nametotable("file.ext")) -- inspect(file.nametotable("dir/file.ext")) -- inspect(file.nametotable("/dir/file.ext")) ----- pattern = Cs(((period * noperiod^1 * -1) / "" + 1)^1) local pattern = Cs(((period * (1-period-slashes)^1 * -1) / "" + 1)^1) function file.removesuffix(name) return name and lpegmatch(pattern,name) end -- local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * Cp() * noperiod^1 * -1 -- -- function file.addsuffix(name, suffix) -- local p = lpegmatch(pattern,name) -- if p then -- return name -- else -- return name .. "." .. suffix -- end -- end local suffix = period/"" * (1-period-slashes)^1 * -1 local pattern = Cs((noslashes^0 * slashes^1)^0 * ((1-suffix)^1)) * Cs(suffix) function file.addsuffix(filename,suffix,criterium) if not filename or not suffix or suffix == "" then return filename elseif criterium == true then return filename .. "." .. suffix elseif not criterium then local n, s = lpegmatch(pattern,filename) if not s or s == "" then return filename .. "." .. suffix else return filename end else local n, s = lpegmatch(pattern,filename) if s and s ~= "" then local t = type(criterium) if t == "table" then -- keep if in criterium for i=1,#criterium do if s == criterium[i] then return filename end end elseif t == "string" then -- keep if criterium if s == criterium then return filename end end end return (n or filename) .. "." .. suffix end end -- print("1 " .. file.addsuffix("name","new") .. " -> name.new") -- print("2 " .. file.addsuffix("name.old","new") .. " -> name.old") -- print("3 " .. file.addsuffix("name.old","new",true) .. " -> name.old.new") -- print("4 " .. file.addsuffix("name.old","new","new") .. " -> name.new") -- print("5 " .. file.addsuffix("name.old","new","old") .. " -> name.old") -- print("6 " .. file.addsuffix("name.old","new","foo") .. " -> name.new") -- print("7 " .. file.addsuffix("name.old","new",{"foo","bar"}) .. " -> name.new") -- print("8 " .. file.addsuffix("name.old","new",{"old","bar"}) .. " -> name.old") local suffix = period * (1-period-slashes)^1 * -1 local pattern = Cs((1-suffix)^0) function file.replacesuffix(name,suffix) if name and suffix and suffix ~= "" then return lpegmatch(pattern,name) .. "." .. suffix else return name end end -- local reslasher = lpeg.replacer(P("\\"),"/") function file.reslash(str) return str and lpegmatch(reslasher,str) end -- We should be able to use: -- -- local writable = P(1) * P("w") * Cc(true) -- -- function file.is_writable(name) -- local a = attributes(name) or attributes(pathpart(name,".")) -- return a and lpegmatch(writable,a.permissions) or false -- end -- -- But after some testing Taco and I came up with the more robust -- variant: function file.is_writable(name) if not name then -- error elseif lfs.isdir(name) then name = name .. "/m_t_x_t_e_s_t.tmp" local f = io.open(name,"wb") if f then f:close() os.remove(name) return true end elseif lfs.isfile(name) then local f = io.open(name,"ab") if f then f:close() return true end else local f = io.open(name,"ab") if f then f:close() os.remove(name) return true end end return false end local readable = P("r") * Cc(true) function file.is_readable(name) if name then local a = attributes(name) return a and lpegmatch(readable,a.permissions) or false else return false end end file.isreadable = file.is_readable -- depricated file.iswritable = file.is_writable -- depricated function file.size(name) if name then local a = attributes(name) return a and a.size or 0 else return 0 end end function file.splitpath(str,separator) -- string .. reslash is a bonus (we could do a direct split) return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator) end function file.joinpath(tab,separator) -- table return tab and concat(tab,separator or io.pathseparator) -- can have trailing // end local stripper = Cs(P(fwslash)^0/"" * reslasher) local isnetwork = fwslash * fwslash * (1-fwslash) + (1-fwslash-colon)^1 * colon local isroot = fwslash^1 * -1 local hasroot = fwslash^1 local deslasher = lpeg.replacer(S("\\/")^1,"/") -- If we have a network or prefix then there is a change that we end up with two -- // in the middle ... we could prevent this if we (1) expand prefixes: and (2) -- split and rebuild as url. Of course we could assume no network paths (which -- makes sense) adn assume either mapped drives (windows) or mounts (unix) but -- then we still have to deal with urls ... anyhow, multiple // are never a real -- problem but just ugly. function file.join(...) local lst = { ... } local one = lst[1] if lpegmatch(isnetwork,one) then local two = lpegmatch(deslasher,concat(lst,"/",2)) return one .. "/" .. two elseif lpegmatch(isroot,one) then local two = lpegmatch(deslasher,concat(lst,"/",2)) if lpegmatch(hasroot,two) then return two else return "/" .. two end elseif one == "" then return lpegmatch(stripper,concat(lst,"/",2)) else return lpegmatch(deslasher,concat(lst,"/")) end end -- print(file.join("c:/whatever","name")) -- print(file.join("//","/y")) -- print(file.join("/","/y")) -- print(file.join("","/y")) -- print(file.join("/x/","/y")) -- print(file.join("x/","/y")) -- print(file.join("http://","/y")) -- print(file.join("http://a","/y")) -- print(file.join("http:///a","/y")) -- print(file.join("//nas-1","/y")) -- The previous one fails on "a.b/c" so Taco came up with a split based -- variant. After some skyping we got it sort of compatible with the old -- one. After that the anchoring to currentdir was added in a better way. -- Of course there are some optimizations too. Finally we had to deal with -- windows drive prefixes and things like sys://. Eventually gsubs and -- finds were replaced by lpegs. local drivespec = R("az","AZ")^1 * colon local anchors = fwslash + drivespec local untouched = periods + (1-period)^1 * P(-1) local splitstarter = (Cs(drivespec * (bwslash/"/" + fwslash)^0) + Cc(false)) * Ct(lpeg.splitat(S("/\\")^1)) local absolute = fwslash function file.collapsepath(str,anchor) -- anchor: false|nil, true, "." if not str then return end if anchor == true and not lpegmatch(anchors,str) then str = getcurrentdir() .. "/" .. str end if str == "" or str =="." then return "." elseif lpegmatch(untouched,str) then return lpegmatch(reslasher,str) end local starter, oldelements = lpegmatch(splitstarter,str) local newelements = { } local i = #oldelements while i > 0 do local element = oldelements[i] if element == '.' then -- do nothing elseif element == '..' then local n = i - 1 while n > 0 do local element = oldelements[n] if element ~= '..' and element ~= '.' then oldelements[n] = '.' break else n = n - 1 end end if n < 1 then insert(newelements,1,'..') end elseif element ~= "" then insert(newelements,1,element) end i = i - 1 end if #newelements == 0 then return starter or "." elseif starter then return starter .. concat(newelements, '/') elseif lpegmatch(absolute,str) then return "/" .. concat(newelements,'/') else newelements = concat(newelements, '/') if anchor == "." and find(str,"^%./") then return "./" .. newelements else return newelements end end end -- local function test(str,...) -- print(string.format("%-20s %-15s %-30s %-20s",str,file.collapsepath(str),file.collapsepath(str,true),file.collapsepath(str,"."))) -- end -- test("a/b.c/d") test("b.c/d") test("b.c/..") -- test("/") test("c:/..") test("sys://..") -- test("") test("./") test(".") test("..") test("./..") test("../..") -- test("a") test("./a") test("/a") test("a/../..") -- test("a/./b/..") test("a/aa/../b/bb") test("a/.././././b/..") test("a/./././b/..") -- test("a/b/c/../..") test("./a/b/c/../..") test("a/b/c/../..") -- test("./a") local validchars = R("az","09","AZ","--","..") local pattern_a = lpeg.replacer(1-validchars) local pattern_a = Cs((validchars + P(1)/"-")^1) local whatever = P("-")^0 / "" local pattern_b = Cs(whatever * (1 - whatever * -1)^1) function file.robustname(str,strict) if str then str = lpegmatch(pattern_a,str) or str if strict then return lpegmatch(pattern_b,str) or str -- two step is cleaner (less backtracking) else return str end end end file.readdata = io.loaddata file.savedata = io.savedata function file.copy(oldname,newname) if oldname and newname then local data = io.loaddata(oldname) if data and data ~= "" then file.savedata(newname,data) end end end -- also rewrite previous local letter = R("az","AZ") + S("_-+") local separator = P("://") local qualified = period^0 * fwslash + letter * colon + letter^1 * separator + letter^1 * fwslash local rootbased = fwslash + letter * colon lpeg.patterns.qualified = qualified lpeg.patterns.rootbased = rootbased -- ./name ../name /name c: :// name/name function file.is_qualified_path(filename) return filename and lpegmatch(qualified,filename) ~= nil end function file.is_rootbased_path(filename) return filename and lpegmatch(rootbased,filename) ~= nil end -- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end -- -- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" } -- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" } -- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" } -- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" } -- -- maybe: -- -- if os.type == "windows" then -- local currentdir = getcurrentdir -- function getcurrentdir() -- return lpegmatch(reslasher,currentdir()) -- end -- end -- for myself: function file.strip(name,dir) if name then local b, a = match(name,"^(.-)" .. dir .. "(.*)$") return a ~= "" and a or name end end -- local debuglist = { -- "pathpart", "basename", "nameonly", "suffixonly", "suffix", "dirname", "extname", -- "addsuffix", "removesuffix", "replacesuffix", "join", -- "strip","collapsepath", "joinpath", "splitpath", -- } -- for i=1,#debuglist do -- local name = debuglist[i] -- local f = file[name] -- file[name] = function(...) -- print(name,f(...)) -- return f(...) -- end -- end -- a goodie: a dumb version of mkdirs (not used in context itself, only -- in generic usage) function lfs.mkdirs(path) local full = "" for sub in gmatch(path,"(/*[^\\/]+)") do -- accepts leading c: and / full = full .. sub -- lfs.isdir("/foo") mistakenly returns true on windows so -- so we don't test and just make as that one is not too picky lfs.mkdir(full) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-com.lua0000644000175000017500000000224112130411274024052 0ustar norbertnorbertif not modules then modules = { } end modules ['cldf-com'] = { version = 1.001, comment = "companion to cldf-com.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local tostring = tostring local context = context local generics = context.generics -- needs documentation local variables = interfaces.variables generics.starttabulate = "starttabulate" -- "start" .. variables.tabulate -- todo: e!start generics.stoptabulate = "stoptabulate" -- "stop" .. variables.tabulate -- todo: e!stop local NC, NR = context.NC, context.NR local function tabulaterow(how,...) for i=1,select("#",...) do local ti = tostring(select(i,...)) NC() if how then context[how](ti) else context(ti) end end NC() NR() end function context.tabulaterow (...) tabulaterow(false, ...) end function context.tabulaterowbold(...) tabulaterow("bold",...) end function context.tabulaterowtype(...) tabulaterow("type",...) end function context.tabulaterowtyp (...) tabulaterow("typ", ...) end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-act.lua0000644000175000017500000003650012134352503024074 0ustar norbertnorbertif not modules then modules = { } end modules ['math-act'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Here we tweak some font properties (if needed). local type, next = type, next local fastcopy = table.fastcopy local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) local report_math = logs.reporter("mathematics","initializing") local context = context local commands = commands local mathematics = mathematics local texdimen = tex.dimen local abs = math.abs local sequencers = utilities.sequencers local appendgroup = sequencers.appendgroup local appendaction = sequencers.appendaction local mathfontparameteractions = sequencers.new { name = "mathparameters", arguments = "target,original", } appendgroup("mathparameters","before") -- user appendgroup("mathparameters","system") -- private appendgroup("mathparameters","after" ) -- user function fonts.constructors.assignmathparameters(original,target) local runner = mathfontparameteractions.runner if runner then runner(original,target) end end function mathematics.initializeparameters(target,original) local mathparameters = original.mathparameters if mathparameters and next(mathparameters) then target.mathparameters = mathematics.dimensions(mathparameters) end end sequencers.appendaction("mathparameters","system","mathematics.initializeparameters") local how = { -- RadicalKernBeforeDegree = "horizontal", -- RadicalKernAfterDegree = "horizontal", ScriptPercentScaleDown = "unscaled", ScriptScriptPercentScaleDown = "unscaled", RadicalDegreeBottomRaisePercent = "unscaled" } function mathematics.scaleparameters(target,original) if not target.properties.math_is_scaled then local mathparameters = target.mathparameters if mathparameters and next(mathparameters) then local parameters = target.parameters local factor = parameters.factor local hfactor = parameters.hfactor local vfactor = parameters.vfactor for name, value in next, mathparameters do local h = how[name] if h == "unscaled" then -- kept elseif h == "horizontal" then value = value * hfactor elseif h == "vertical"then value = value * vfactor else value = value * factor end mathparameters[name] = value end end target.properties.math_is_scaled = true end end sequencers.appendaction("mathparameters","system","mathematics.scaleparameters") function mathematics.checkaccentbaseheight(target,original) local mathparameters = target.mathparameters if mathparameters and mathparameters.AccentBaseHeight == 0 then mathparameters.AccentBaseHeight = target.parameters.x_height -- needs checking end end sequencers.appendaction("mathparameters","system","mathematics.checkaccentbaseheight") -- should go in lfg instead function mathematics.checkprivateparameters(target,original) local mathparameters = target.mathparameters if mathparameters then local parameters = target.parameters if parameters then if not mathparameters.FractionDelimiterSize then mathparameters.FractionDelimiterSize = 1.01 * parameters.size end if not mathparameters.FractionDelimiterDisplayStyleSize then mathparameters.FractionDelimiterDisplayStyleSize = 2.40 * parameters.size end elseif target.properties then report_math("no parameters in font %a",target.properties.fullname or "?") else report_math("no parameters and properties in font") end end end sequencers.appendaction("mathparameters","system","mathematics.checkprivateparameters") function mathematics.overloadparameters(target,original) local mathparameters = target.mathparameters if mathparameters and next(mathparameters) then local goodies = target.goodies if goodies then for i=1,#goodies do local goodie = goodies[i] local mathematics = goodie.mathematics local parameters = mathematics and mathematics.parameters if parameters then if trace_defining then report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) end for name, value in next, parameters do local tvalue = type(value) if tvalue == "string" then report_math("comment for math parameter %a: %s",name,value) else local oldvalue = mathparameters[name] local newvalue = oldvalue if oldvalue then if tvalue == "number" then newvalue = value elseif tvalue == "function" then newvalue = value(oldvalue,target,original) elseif not tvalue then newvalue = nil end if trace_defining and oldvalue ~= newvalue then report_math("overloading math parameter %a: %S => %S",name,oldvalue,newvalue) end else report_math("invalid math parameter %a",name) end mathparameters[name] = newvalue end end end end end end end sequencers.appendaction("mathparameters","system","mathematics.overloadparameters") local function applytweaks(when,target,original) local goodies = original.goodies if goodies then for i=1,#goodies do local goodie = goodies[i] local mathematics = goodie.mathematics local tweaks = mathematics and mathematics.tweaks if tweaks then tweaks = tweaks[when] if tweaks then if trace_defining then report_math("tweaking math of %a @ %p (%s)",target.properties.fullname,target.parameters.size,when) end for i=1,#tweaks do local tweak= tweaks[i] local tvalue = type(tweak) if tvalue == "function" then tweak(target,original) end end end end end end end function mathematics.tweakbeforecopyingfont(target,original) local mathparameters = target.mathparameters -- why not hasmath if mathparameters then applytweaks("beforecopying",target,original) end end function mathematics.tweakaftercopyingfont(target,original) local mathparameters = target.mathparameters -- why not hasmath if mathparameters then applytweaks("aftercopying",target,original) end end sequencers.appendaction("beforecopyingcharacters","system","mathematics.tweakbeforecopyingfont") sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaftercopyingfont") function mathematics.overloaddimensions(target,original,set) local goodies = target.goodies if goodies then for i=1,#goodies do local goodie = goodies[i] local mathematics = goodie.mathematics local dimensions = mathematics and mathematics.dimensions if dimensions then if trace_defining then report_math("overloading dimensions in %a @ %p",target.properties.fullname,target.parameters.size) end local characters = target.characters local parameters = target.parameters local factor = parameters.factor local hfactor = parameters.hfactor local vfactor = parameters.vfactor local addprivate = fonts.helpers.addprivate local function overload(dimensions) for unicode, data in next, dimensions do local character = characters[unicode] if character then -- local width = data.width local height = data.height local depth = data.depth if trace_defining and (width or height or depth) then report_math("overloading dimensions of %C, width %a, height %a, depth %a",unicode,width,height,depth) end if width then character.width = width * hfactor end if height then character.height = height * vfactor end if depth then character.depth = depth * vfactor end -- local xoffset = data.xoffset local yoffset = data.yoffset if xoffset then xoffset = { "right", xoffset * hfactor } end if yoffset then yoffset = { "down", -yoffset * vfactor } end if xoffset or yoffset then local slot = { "slot", 1, addprivate(target,nil,fastcopy(character)) } if xoffset and yoffset then character.commands = { xoffset, yoffset, slot } elseif xoffset then character.commands = { xoffset, slot } else character.commands = { yoffset, slot } end character.index = nil end elseif trace_defining then report_math("no overloading dimensions of %C, not in font",unicode) end end end if set == nil then set = { "default" } end if set == "all" or set == true then for name, set in next, dimensions do overload(set) end else if type(set) == "string" then set = utilities.parsers.settings_to_array(set) end if type(set) == "table" then for i=1,#set do local d = dimensions[set[i]] if d then overload(d) end end end end end end end end sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions") -- a couple of predefined tewaks: local tweaks = { } mathematics.tweaks = tweaks function tweaks.fixbadprime(target,original) target.characters[0xFE325] = target.characters[0x2032] end -- helpers local setmetatableindex = table.setmetatableindex local family_font = node.family_font local fontcharacters = fonts.hashes.characters local extensibles = utilities.storage.allocate() fonts.hashes.extensibles = extensibles local chardata = characters.data local extensibles = mathematics.extensibles -- we use numbers at the tex end (otherwise we could stick to chars) local e_left = extensibles.left local e_right = extensibles.right local e_horizontal = extensibles.horizontal local e_vertical = extensibles.vertical local e_mixed = extensibles.mixed local e_unknown = extensibles.unknown local unknown = { e_unknown, false, false } local function extensiblecode(font,unicode) local characters = fontcharacters[font] local character = characters[unicode] if not character then return unknown end local code = unicode local next = character.next while next do code = next character = characters[next] next = character.next end local char = chardata[unicode] local mathextensible = char and char.mathextensible if character.horiz_variants then if character.vert_variants then return { e_mixed, code, character } else local e = mathextensible and extensibles[mathextensible] return e and { e, code, character } or unknown end elseif character.vert_variants then local e = mathextensible and extensibles[mathextensible] return e and { e, code, character } or unknown else return unknown end end setmetatableindex(extensibles,function(extensibles,font) local codes = { } setmetatableindex(codes, function(codes,unicode) local status = extensiblecode(font,unicode) codes[unicode] = status return status end) extensibles[font] = codes return codes end) function mathematics.extensiblecode(family,unicode) return extensibles[family_font(family or 0)][unicode][1] end function commands.extensiblecode(family,unicode) context(extensibles[family_font(family or 0)][unicode][1]) end -- left : [head] ... -- right : ... [head] -- horizontal : [head] ... [head] -- -- abs(right["start"] - right["end"]) | right.advance | characters[right.glyph].width function commands.horizontalcode(family,unicode) local font = family_font(family or 0) local data = extensibles[font][unicode] local kind = data[1] if kind == e_left then local charlist = data[3].horiz_variants local characters = fontcharacters[font] local left = charlist[1] texdimen.scratchleftoffset = abs((left["start"] or 0) - (left["end"] or 0)) texdimen.scratchrightoffset = 0 elseif kind == e_right then local charlist = data[3].horiz_variants local characters = fontcharacters[font] local right = charlist[#charlist] texdimen.scratchleftoffset = 0 texdimen.scratchrightoffset = abs((right["start"] or 0) - (right["end"] or 0)) elseif kind == e_horizontal then local charlist = data[3].horiz_variants local characters = fontcharacters[font] local left = charlist[1] local right = charlist[#charlist] texdimen.scratchleftoffset = abs((left["start"] or 0) - (left["end"] or 0)) texdimen.scratchrightoffset = abs((right["start"] or 0) - (right["end"] or 0)) else texdimen.scratchleftoffset = 0 texdimen.scratchrightoffset = 0 end context(kind) end context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-dir.mkiv0000644000175000017500000000317711754241457024346 0ustar norbertnorbert%D \module %D [ file=supp-dir, %D version=2004.11.11, %D title=\CONTEXT\ Support Macros, %D subtitle=Directional Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We no longer have the \ETEX\ direction primitives. \unprotect % \expanded{\defineactivecharacter \number"2000E} {\textdir TRT\relax} % \expanded{\defineactivecharacter \number"2000F} {\textdir TLT\relax} %D As we have less directions now we can use something % \chardef\@@D@@TLT0 % \chardef\@@D@@TRT1 % \chardef\@@D@@RTT0 % \chardef\@@D@@LRL1 % % \def\thetextdir{\csname @@D@@\the\textdir\endcsname} % % \ifnum\thetextdir=0 L\else R\fi \textdir TRT \ifnum\thetextdir=0 L\else R\fi \unexpanded\def\showdirsinmargin {\doifelse{\the\pardir}\!!TLT {\inleft{\normalexpanded{\noexpand\hbox dir TLT{\ttxx[\the\pardir,\the\textdir]}}}} {\inleft{\normalexpanded{\noexpand\hbox dir TLT{\ttxx[\the\pardir,\the\textdir]}}}}} \bgroup \catcode`L=\othercatcode \gdef\istltdir#1#2#3{\if#2L0\else1\fi} \catcode`R=\othercatcode \gdef\istrtdir#1#2#3{\if#2R0\else1\fi} \egroup \def\istlttextdir{\expandafter\istltdir\the\textdir} \def\istrttextdir{\expandafter\istrtdir\the\textdir} \def\istltpardir {\expandafter\istltdir\the\pardir } \def\istrtpardir {\expandafter\istrtdir\the\pardir } % \ifcase\istlttextdir Y\else N\fi % \ifcase\istltpardir Y\else N\fi % \ifcase\istltdir TRT\relax Y\else N\fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-oldnum.mkiv0000644000175000017500000002607712130411274024320 0ustar norbertnorbert%D \module %D [ file=m-oldnum, % was: supp-num %D version=1998.05.15, %D title=\CONTEXT\ Support Macros, %D subtitle=Numbers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % See end for transition to mkiv. \writestatus{loading}{ConTeXt Support Macros / Numbers} \unprotect %D \macros %D {digits, setdigitmode, setdigitsign} %D %D Depending on the digit mode the command \type {\digits} %D normalizes number patterns depending on the language set. %D %D \starttyping %D This will never be a \digits{1.000.000} seller. %D \stoptyping %D %D or %D %D \starttyping %D I will never grow longer than \digits 1.86 \Meter. %D \stoptyping %D %D The different modes are shown in: %D %D \startbuffer %D \setdigitmode 1 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 2 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 3 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 4 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 5 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 6 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \stopbuffer %D %D \typebuffer % % This is typset as: % % \startlines % \getbuffer % \stoplines %D %D The sign can be typeset as is or within the space of a %D digit. %D %D \startbuffer %D \setdigitsign 0 \digits +12.345,90 %D \setdigitsign 1 \digits +12.345,90 %D \setdigitsign 2 \digits +12.345,90 %D \setdigitsign 3 \digits +12.345,90 %D \stopbuffer %D %D \typebuffer %D % This is typset as: % % \startlines % \getbuffer % \stoplines \chardef\digitoutputmode=1 % 0..6 \chardef\digitsignmode =0 % 0..3 \def\setdigitmode{\chardef\digitoutputmode} \def\setdigitsign{\chardef\digitsignmode} %D The digit modes are: %D %D \startitemize[packed] %D \item periods \& comma %D \item commas \& period %D \item thinmuskips \& comma %D \item thinmuskips \& period %D \item thickmuskips \& comma %D \item thickmuskips \& period %D \stopitemize \let\collecteddigits \empty \chardef\digitinputmode =1 \let\saveddigits \empty \chardef\skipdigit =0 \let\savedpowerdigits\empty \chardef\powerdigits =0 %D The first stage of the \type {\digit} macro takes care of %D the grouped call, the other branch handles the fuzzy %D delimited calls. \ifdefined\mbox \else \let\mbox\hbox \fi \unexpanded\def\digits {\bgroup \let~@% \doifnextbgroupelse\dodigits{\doifnextcharelse\normalmathshift\domathdigits\grabdigit}} \def\dodigits#1% {\grabdigit#1\relax} \def\domathdigits$#1$% {\mbox{\grabdigit#1\relax}} % adding $ $ goes wrong in tabulate \def\grabdigit {\futurelet\next\scandigit} %D Watch the test for \type {\nextobeyedline}, because the %D endofline token can be \type {\def'd}, not \type {\let}'d, %D we need to do an indirect test (see \type {verb-ini.tex}) %D for details. (This probably needs an update.) \ifx\normalmathshift\undefined \let\normalmathshift=$ \fi \def\scandigit {\ifx\next\blankspace \let\next\handledigits \else\ifx\next\nextobeyedline % the indirect one \let\next\handledigits \else\ifx\next\bgroup \let\next\handledigits \else\ifx\next\egroup \let\next\handledigits \else\ifx\next\normalmathshift \let\next\handledigits \else \let\next\collectdigit \fi\fi\fi\fi\fi \next} %D We store the power||of||ten (to be signaled by \type {^}, %D \type {e} or~\type {E}) in a seperate macro so that we can %D typeset it in superscript. The space placeholders are %D replaced by a \type {@}. \def\savedigit#1#2% {\edef#1{#1\saveddigits#2}\let\saveddigits\empty} \long\def\collectdigit#1% {\ifx#1~% \savedigit\collecteddigits @% \else\if#1_% tricky as can be several catcodes ... will become lua code anyway \savedigit\collecteddigits @% \else\if\noexpand#1\relax \let\grabdigit\handledigits \else\ifcase\powerdigits \if#1E% \chardef\powerdigits\plusone \else\if#1e% \chardef\powerdigits\plusone \else\if#1^% \chardef\powerdigits\plusone \else \savedigit\collecteddigits#1% %\doifnumberelse{#1} % {\savedigit\collecteddigits#1} % {\def\saveddigits{#1}}% \fi\fi\fi \else \savedigit\savedpowerdigits#1% %\doifnumberelse{#1} % {\savedigit\savedpowerdigits#1} % {\def\saveddigits{#1}}% \fi\fi\fi\fi \grabdigit} \let\handlemathdigits\firstofoneargument \let\handletextdigits\mathematics \def\handledigits {%\ifcase\powerdigits % \edef\collecteddigits{\collecteddigits\saveddigits}% %\else % \edef\savedpowerdigits{\savedpowerdigits\saveddigits}% %\fi \ifmmode \handlemathdigits{\dohandledigits}% \else \dontleavehmode\hbox{\handletextdigits{\dohandledigits}}% \fi \egroup} %D Although we could do with one pass, a second pass for %D handling the stored sequence is more readable. \ifnum\texengine=\luatexengine \def\dohandledigits {\mathcode`\,="002C \mathcode`\.="002E % pretty hard coded \expandafter\handletokens\collecteddigits\with\scandigits \ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi} \chardef\mathaxisfontid\zerocount \else \def\dohandledigits {\mathcode`\,="013B \mathcode`\.="013A % pretty hard coded \expandafter\handletokens\collecteddigits\with\scandigits \ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi} \chardef\mathaxisfontid\plustwo \fi \def\doscandigit#1% {\ifcase\skipdigit\@EA\hbox\else\@EA\hphantom\fi\bgroup \mathematics % brr, needed because of stored punctuation {\ifnum\digitinputmode=#1\relax \ifcase\digitoutputmode \or .% \or ,% \or \mskip\thinmuskip \or \mskip\thinmuskip \or \mskip\thickmuskip \or \mskip\thickmuskip \fi \else \ifodd\digitoutputmode,\else.\fi \fi}% \egroup} %D The signs can be made smaller and sqeezed into the width %D of a digit. Watch the \type {\mathaxisheight} trickery (this %D font related register stored the math axis). % 0,= % 0,== second = results in delta(00,=) % 0,- is invalid, should be = % 0,-- is invalid, should be == \def\digitzeroamount {\digitsgn\zeroamount \def\digitzeroamount {\hphantom {00\setbox\scratchbox\hbox{$\zeroamount$}% \hskip-\wd\scratchbox}% \let\digitzeroamount\empty}} \def\scandigits#1% {\if#1.\digitsep1\else \if#1,\digitsep2\else \if#1@\digitnop \else \if#1_\digitnop \else \if#1/\digitsgn{\hphantom{+}}\chardef\skipdigit0\else \if#1-\ifcase\skipdigit\digitsgn-\else \box\digitsepbox\digitzeroamount \fi\chardef\skipdigit0\else \if#1+\digitsgn+\chardef\skipdigit0\else \if#1=\box\digitsepbox\digitzeroamount \chardef\skipdigit0\else \if#1s\digitsgn{\hphantom{\positive}}\chardef\skipdigit0\else \if#1p\digitsgn\positive\chardef\skipdigit0\else \if#1m\digitsgn\negative\chardef\skipdigit0\else \if#1n\digitsgn\negative\chardef\skipdigit0\else \box\digitsepbox #1\chardef\skipdigit0\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} \newbox\digitsepbox \chardef\autodigitmode=1 \def\digitsep#1% {\ifcase\autodigitmode \doscandigit#1% \else \setbox\digitsepbox\hbox{\doscandigit#1}% \fi \chardef\skipdigit0\relax} % strange, does not work % % \def\digitnop % {\hphantom{\box\digitsepbox}% % \hphantom{0}\chardef\skipdigit1\relax} % % while this works \def\digitnop {\hbox{\hphantom{\box\digitsepbox}}% \hphantom{0}\chardef\skipdigit1\relax} % but this doesn't % % \def\digitnop % {\hphantom{\box\digitsepbox0}% % \chardef\skipdigit1\relax} \def\digitsgn#1% {\ifcase\digitsignmode#1\else \hbox {\setbox\scratchbox\hbox{0}% \scratchdimen\mathaxisheight\textfont\mathaxisfontid \def\digitsgn##1##2% {\advance\scratchdimen-\mathaxisheight##1\mathaxisfontid \raise\scratchdimen \hbox to \wd\scratchbox{\hss$##2#1$\hss}}% \ifcase\digitsignmode\or \digitsgn\textfont \textstyle \or \digitsgn\scriptfont \scriptstyle \or \digitsgn\scriptscriptfont\scriptscriptstyle\fi}% \fi} \ifx\undefined\zeroamount \def\zeroamount{-} \fi \ifx\undefined\positive \def\positive {+} \fi \ifx\undefined\negative \def\negative {-} \fi %D The digit parser handles a bunch of special characters as %D well as different formats. We strongly suggest you to use %D the grouped call. %D %D \starttabulate[|l|l|l|] %D \NC \type{.} \NC , . \NC comma or period \NC \NR %D \NC \type{,} \NC , . \NC comma or period \NC \NR %D \NC \type{@} \NC \NC invisible space \NC \NR %D \NC \type{_} \NC \NC invisible space \NC \NR %D \NC \type{/} \NC \NC invisible sign \NC \NR %D \NC \type{-} \NC $-$ \NC minus sign \NC \NR %D \NC \type{+} \NC $+$ \NC plus sign \NC \NR %D \NC \type{s} \NC \NC invisible high sign \NC \NR %D \NC \type{p} \NC $\positive$ \NC high plus sign \NC \NR %D \NC \type{m} \NC $\negative$ \NC high minus sign \NC \NR %D \NC \type{n} \NC $\negative$ \NC high minus (negative) sign \NC \NR %D \NC \type{=} \NC $\zeroamount$ \NC zero padding \NC \NR %D \stoptabulate %D %D These triggers are used in the following examples. %D %D \startbuffer %D \digits 12 %D \digits{~~~.~~~.~~~.68.712,34} %D \digits ~~~.~~~.~~~.68.712,34 %D \digits ___.___.111.68.712,34 %D \digits 111.111.111.68.712,34 %D \digits 12.345,90 %D \digits 12.345.000 %D \digits 12,34 %D \digits{392.857.230.68.712,34} %D {\digits1234} %D \digits{1234} %D \digits 1234\relax %D $\digits 123.222,00$ %D \digits 123.222,00 %D \digits 123.222,== %D \digits 123.222,00^10 %D \digits 123.222,00e10 %D \digits /123.222,00e-12 %D \digits -123.222,00e-12 %D \digits +123.222,00e-12 %D \digits n123.222,00e-12 %D \digits s123.222,00e-12 %D \digits p123.222,00e-12 %D \stopbuffer %D %D \typebuffer % % \startlines % \getbuffer % \stoplines %D \macros %D {Digits} %D %D We also permit: \let\Digits\digits %D These macros are complicated by the fact that we also %D have to support cases like: %D %D \starttyping %D {\digits1234} %D \digits{1234} %D \digits 1234\whatever %D $\digits 123.222,00$ %D \digits 123.222,00. %D \stoptyping %D %D The latter case shows us that trailing non digits are to %D be passed untreated. %D %D Another interesting case is: %D %D \starttyping %D \digits 123.222,00^10 %D \stoptyping %D %D The separator is defined as: % \def\digitpowerseparator% % {\cdot10} % {\times10} \def\digitpowerseparator {\ifx\collecteddigits\empty\else\cdot\fi10} %D \macros %D {digittemplate} %D %D Users can specify the way they enter those digits by saying %D something like: %D %D \starttyping %D \digittemplate 12.000.000,00 % \digittemplate ., %D \stoptyping \def\digittemplate #1 % {\chardef\digitinputmode\zerocount \handletokens#1\with\scandigittemplate} \def\scandigittemplate#1% {\if #1.\ifcase\digitinputmode\chardef\digitinputmode\plusone \fi% period \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode\plustwo \fi% comma \fi\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-1.lua0000644000175000017500000000457411571377075024122 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-1'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF } context-2013.05.28.20130704/texmf-dist/tex/context/base/core-stg.mkii0000644000175000017500000000427611754241457024312 0ustar norbertnorbert%D \module %D [ file=core-stg, %D version=2006.08.16, %D title=\CONTEXT\ Core Macros, %D subtitle=Strategies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a prelude to strategies. It is rather old code %D used in a project many years ago. Use with care since I %D will pick up this thread. (moved from cont-new) \unprotect \def\s!strategy{strategy} \def\currentstrategypass {1} \def\currentstrategyvariable{0} \def\maximumstrategypass {8} \newconditional\strategypassneeded \newconditional\strategypassforced \definetwopasslist{\s!strategy} \def\registerstrategypass {\ifnum\currentstrategypass>\maximumstrategypass \else \ifconditional\strategypassforced \doglobal\increment\currentstrategypass \else%\ifconditional\strategypassneeded %\doglobal\increment\currentstrategypass \fi%\fi \fi \savecurrentvalue\currentstrategypass{\currentstrategypass}} \appendtoks \registerstrategypass \to \everybye % \everylastshipout \def\setstrategyvariable#1#2% key value {%\doifnotstrategyvariable{#1}{\global\settrue\strategypassneeded}% \doglobal\increment\currentstrategyvariable \savetaggedtwopassdata{\s!strategy}{\currentstrategyvariable}{#1}{#2}} \def\doifstrategyvariableelse#1#2#3% {\getstrategyvariable{#1}\iftwopassdatafound#2\else#3\fi} \def\getstrategyvariable#1% key {\findtwopassdata{\s!strategy}{#1}% \setxvalue{\s!strategy:#1}{\twopassdata}} \def\retainstrategyvariable#1% key {\expanded{\setstrategyvariable{#1}{\strategyvariable{#1}}}} \def\strategyvariable#1% key {\csname\s!strategy:#1\endcsname} \let\stratvar\strategyvariable \def\forcestrategy{\global\settrue \strategypassforced} \def\abortstrategy{\global\setfalse\strategypassforced} \def\doifstrategyvariableelse#1#2#3% {\getstrategyvariable{#1}\iftwopassdatafound#2\else#3\fi} \def\doifstrategyvariable #1#2{\doifstrategyvariableelse{#1}{#2}{}} \def\doifnotstrategyvariable#1#2{\doifstrategyvariableelse{#1}{}{#2}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-ini.lua0000644000175000017500000000110011571377075024114 0ustar norbertnorbertif not modules then modules = { } end modules ['unic-ini'] = { version = 1.001, comment = "companion to unic-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfchar = utf.char -- Beware, initializing unicodechar happens at first usage and takes -- 0.05 -- 0.1 second (lots of function calls). function commands.unicodechar(asked) local n = characters.unicodechar(asked) if n then context(utfchar(n)) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-ltb.mkii0000644000175000017500000006163611754241457024273 0ustar norbertnorbert%D \module %D [ file=tabl-ltb, %D version=2002.10.31, %D title=\CONTEXT\ Table Macros, %D subtitle=Line Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % testfile: tfmetrics.tex % todo: als nx>1, dan in geval van rek tussenruimte berekenen en optellen % bij breedte, dus: nx nog niet gebruiken in combinatie met rek ! ! ! ! ! % This module is experimental, undocumented, and currently only set up % eTeX. It provides a mechanism for typesetting very large tables, % spanning many pages horizontally and vertically, with repeated % header lines and (entry) columns, tab tracking, color, etc. In does % two passes over a table, which is why the table goes into a % buffer or file. As said, tables can be real huge. % \BH \BC .. \EC \BC .. \EC \EH % append % \BR \BC .. \EC \BC .. \EC \ER % % or % % \NC .. \NC .. \NC \NR (todo: optional last \NC) % alternative: % % (1) direct run, save content in macro, but only if needed % % todo % % (2) buffered table content % % \startbuffer % \startlinetablehead % \stoplinetablehead % \startlinetablebody % \stoplinetablebody % \stopbuffer % % \processlinetablebuffer[buffer] % % in buffer : head and body % % (3) unbuffered run, multipass % % - run with starting width zero / prev run % - clip on prev run % - flush real widths \writestatus{loading}{ConTeXt Table Macros / Line Tables} \unprotect \chardef\linetablesplitstate\zerocount \chardef\linetableheadstate \zerocount \edef\??ler{\??le:r:} \edef\??lec{\??le:c:} \edef\??lew{\??le:w:} \edef\??leh{\??le:h:} \edef\??led{\??le:d:} \newif\iflinetablepreroll \newif\ifinlinetable \newcount\linetablecolumn \newcount\linetablesubcol \newdimen\linetablewidth \newdimen\linetableheight \newbox \linetablecell \let\noflinetablecolumns\!!zerocount \let\noflinetablerows \!!zerocount \let\noflinetablelines \!!zerocount \let\noflinetableparts \!!zerocount \let\linetablepart \!!plusone \let\linetablestep \!!plusone \let\linetableline \!!zerocount \let\linetablerow \!!zerocount \let\linetablerows \!!zerocount \initializetablebox \zerocount % holds repeater \chardef\linetablehmode \zerocount \chardef\linetablepage \zerocount \chardef\linetablerepeat\zerocount \def\setuplinetable {\dotripleempty\dosetuplinetable} \def\dosetuplinetable[#1][#2][#3]% {\ifthirdargument \getparameters[\??le:#1:#2][#3]% \else\ifsecondargument \getparameters[\??lec#1][#2]% \else \getparameters[\??le][#1]% \fi\fi} \setuplinetable [\c!n=\!!maxcard, \c!lines=\!!maxcard, \c!nx=\plusone, \c!nleft=0, \c!repeat=\v!yes, % when \c!nleft>0, repeat on both pages \c!before=, \c!after=, \c!inbetween=\page, \c!distance=\zeropoint, \c!stretch=\v!no, \c!align=\c!right, \c!leftoffset=.25ex, \c!rightoffset=\linetableparameter\c!leftoffset, \c!maxwidth=\zeropoint, \c!width=5em, \c!height=\v!fit, % \v!line = faster \c!background=, \c!backgroundcolor=] \def\linetableparameter#1% {\csname\??le#1\endcsname} \def\doifelselinetablecparameter#1% {\ifcsname\??lec\number\linetablecolumn#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\linetablecparameter#1% {\csname \ifcsname\??lec\number\linetablecolumn#1\endcsname \??lec\number\linetablecolumn \else \??le \fi #1\endcsname} \def\linetablerparameter#1% faster, leaner and meaner {\csname \ifnum\linetablerow=\zerocount % geen ifcase \ifcsname\??ler\v!header#1\endcsname \??ler\v!header#1% \else\ifcsname\??ler0#1\endcsname \??ler0#1% \else \s!empty \fi\fi \else \ifcsname\??ler\number\linetablerow#1\endcsname \??ler\number\linetablerow#1% \else\ifcsname\??ler\v!oddeven\linetablerow#1\endcsname \??ler\v!oddeven\linetablerow#1% \else \s!empty \fi\fi \fi \endcsname} \def\setnoftableslines {\doifelse{\linetableparameter\c!lines}\v!fit {% whitespace already added by vertical strut \ifdim\pagegoal<\maxdimen \scratchdimen\pagegoal \advance\scratchdimen -\pagetotal \else \scratchdimen\textheight \fi \getrawnoflines\scratchdimen \xdef\noflinetablelines{\the\noflines} \iflinetablepreroll \else \ifnum\noflinetablelines<\plustwo \page \setnoftableslines \fi \fi } {\xdef\noflinetablelines{\linetableparameter\c!lines}}} \def\startlinetablecell {\dosingleempty\dostartlinetablecell} \def\dostartlinetablecell[#1]% {\global\setbox\linetablecell\hbox\bgroup \iffirstargument \getparameters[\??lec\number\linetablecolumn][#1]% \fi \xdef\linetablestep{\linetablecparameter\c!nx}% \ifcase\linetablestep\or \scratchdimen\linetablecparameter\c!width \scratchskip \linetablecparameter\c!distance \else \scratchdimen \zeropoint \scratchskip \zeropoint \scratchcounter\linetablecolumn \dorecurse\linetablestep {\advance\scratchdimen\linetablecparameter\c!width %\advance\scratchskip \linetablecparameter\c!distance \global\advance \linetablecolumn\plusone \advance\scratchskip \linetablecparameter\c!distance }% \global\linetablecolumn\scratchcounter \fi \chardef\linetablemode \iflinetablepreroll \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi \else \zerocount \fi \ifcase\linetablemode \ifcase\linetablehmode % nothing \or % fit, keep it simple \or \chardef\linetablemode\plusone % line \else % some already calculated height \fi \fi \setbox\scratchbox\hbox \bgroup \dontcomplain \hskip\linetablecparameter\c!leftoffset\relax % 0 = width, unknown height % 1 = width, fixed height % 2 = no width, auto hsize \ifnum\linetablemode<\plustwo \advance\scratchdimen-\linetablecparameter\c!leftoffset \advance\scratchdimen-\linetablecparameter\c!rightoffset \fi \ifcase\linetablemode \dosetraggedcommand{\linetablecparameter\c!align}% \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup \hsize\scratchdimen \raggedcommand \else \setalignmentswitch{\linetablecparameter\c!align}% \hbox \ifcase\linetablemode \or to\scratchdimen \fi \bgroup \ifcase\alignmentswitch\hss\or\hss\fi \fi \dostartattributes{\??lec\number\linetablecolumn}\c!style\c!color\empty \begstrut \ignorespaces} % \def\stoplinetablecell % {\unskip \endstrut % \dostopattributes % \ifcase\linetablemode % \endgraf % \else % \ifcase\alignmentswitch\else\hss\fi % \fi % \egroup % \hskip\linetablecparameter\c!rightoffset % \egroup % \iflinetablepreroll % \box\scratchbox % \else % \doif{\linetablecparameter\c!background}\v!color % {\backgroundline[\linetablecparameter\c!backgroundcolor]}% % {\box\scratchbox}% % \fi % \egroup} \newconditional\linetableautoheight \settrue\linetableautoheight \def\stoplinetablecell {\unskip \endstrut \dostopattributes \ifcase\linetablemode \endgraf \else \ifcase\alignmentswitch\else\hss\fi \fi \egroup \hskip\linetablecparameter\c!rightoffset \egroup \iflinetablepreroll \box\scratchbox \else \doifelse{\linetablecparameter\c!background}\v!color {\ifconditional\linetableautoheight \hbox{\blackrule [ \c!color=\linetablecparameter\c!backgroundcolor, \c!height=\linetablerparameter{x\c!height}, \c!depth=\linetablerparameter{x\c!depth}, \c!width=\wd\scratchbox]% \hskip-\wd\scratchbox\box\scratchbox}% \else \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}% \fi}% {\box\scratchbox}% \fi \egroup} % \def\stoplinetablecell % {\unskip \endstrut % \dostopattributes % \ifcase\linetablemode % \endgraf % \else % \ifcase\alignmentswitch\else\hss\fi % \fi % \egroup % \hskip\linetablecparameter\c!rightoffset % \egroup % \iflinetablepreroll % \box\scratchbox % \else % \doifelse{\linetablecparameter\c!background}\v!color % {\ifconditional\linetableautoheight % % \hbox{\blackrule % % [ \c!color=\linetablecparameter\c!backgroundcolor, % % \c!height=\linetablerparameter{x\c!height}, % % \c!depth=\linetablerparameter{x\c!depth}, % % \c!width=\wd\scratchbox]% % % \hskip-\wd\scratchbox\box\scratchbox}% % \dp\scratchbox\linetablerparameter{x\c!depth}% % \ht\scratchbox\linetablerparameter{x\c!height}% % \framed % [\c!offset=\v!overlay, % \c!frameoffset=.5\linewidth, % \c!leftframe=\v!off,\c!rightframe=\v!off, % \c!background=\v!color, % \c!backgroundcolor=\linetablecparameter\c!backgroundcolor% % ]{\box\scratchbox}% % \else % \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}% % \fi}% % {\box\scratchbox}% % \fi % \egroup} \def\savelinetablepart {\global\setbox\tablebox\linetablepart \ifnum\linetablepart=\zerocount \box\scratchbox % just storing \else \vbox {\ifvoid\tablebox\linetablepart\else\unvbox\tablebox\linetablepart\fi \doif{\linetablerparameter\c!background}\v!color {\backgroundline[\linetablerparameter\c!backgroundcolor]}% {\box\scratchbox}% is also arg to \backgroundline \endgraf \linetablerparameter\c!after}% \fi} \def\flushlinetableparts {\doglobal\increment\linetableline \ifnum\linetableline<\noflinetablelines % keep collecting \else \iflinetablepreroll % forget about them \else \dorecurse\noflinetableparts {\let\linetablepart\recurselevel \dp\tablebox\linetablepart\strutdepth % noindent en endgraf needed else whitespace mess-up! \whitespace % here not after verticalstrut \ifdim\topskipgap=\zeropoint\else \verticalstrut\nobreak\kern-\struttotal\kern-\parskip\nobreak\nointerlineskip % fix topskip \fi \noindent\strut\hbox to \hsize{\box\tablebox\linetablepart\hss}\endgraf \ifnum\linetablepart<\noflinetableparts\relax \linetableparameter\c!inbetween \fi}% \ifnum\linetablerows<\noflinetablerows\relax \linetableparameter\c!inbetween \else % after, later \fi \chardef\linetableheadstate\plusthree \global\setbox\tablebox\zerocount\emptybox % here \fi % reset \linetablerow will be an option, currently % starts at zero after split \globallet\linetablerow\!!zerocount \globallet\linetableline\!!zerocount \global\chardef\linetablepage\zerocount \global\linetablewidth\zeropoint \setnoftableslines \fi} \def\startlinetablepart {\global\linetablesubcol\zerocount \setbox\scratchbox\hbox\bgroup \doconvertfont{\linetablerparameter\c!style}% \startcolor[\linetablerparameter\c!color]% \ignorespaces} \def\stoplinetablepart {\ifnum\linetablepart>\zerocount \unskip \unskip % remove last intercolumn skip (distance+fill) \fi \stopcolor \egroup \iflinetablepreroll \else \ifcase\linetablepart % we're collecting the repeater \else \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax \ifdim\scratchdimen>\linetableparameter\c!stretch\else \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}% \fi \fi \fi} \def\checklinetablepart {\global\advance\linetablewidth\wd\linetablecell \global\advance\linetablecolumn\linetablestep \global\advance\linetablesubcol\linetablestep \relax %\message{\the\linetablecolumn,\the\linetablesubcol}\wait % from now on the column counter is already incremented \ifcase\linetablesplitstate \iflinetablepreroll \else \box\linetablecell % the columncounter is one ahead ! % \hskip\linetablecparameter\c!afstand \hskip\scratchskip \fi %%% \donefalse \ifcase\linetablerepeat\else % van te voren berekenen \scratchcounter\linetablecolumn\advance\scratchcounter-\plustwo \ifnum\linetablerepeat=\scratchcounter \donetrue % collecting repeater \fi \fi %%%% \ifdone % collecting repeater \else \ifnum\linetablecolumn>\getvalue{\??le::\linetablepart}\relax \donetrue \fi \fi \ifdone \stoplinetablepart \iflinetablepreroll \else \savelinetablepart \fi \ifcase\linetablepage \or \global\chardef\linetablepage \plustwo \else \global\chardef\linetablepage \plusone \fi \doglobal\increment\linetablepart \global\linetablewidth\wd\tablebox\zerocount \startlinetablepart \fi \else \donefalse \!!doneafalse \ifcase\linetablerepeat\else % van te voren berekenen \scratchcounter\linetablecolumn \advance\scratchcounter-\plustwo \ifnum\linetablerepeat=\scratchcounter \donetrue % collecting repeater \fi \fi \ifdone \!!doneatrue % collecting repeater \else\ifdim\linetablewidth>\hsize \donetrue \else % \global\advance\linetablewidth\linetablecparameter\c!afstand\relax \global\advance\linetablewidth\scratchskip \ifdim\linetablewidth>\hsize % ? \donetrue \fi \fi\fi \ifdone \stoplinetablepart \savelinetablepart \ifcase\linetablepage \or \global\chardef\linetablepage \plustwo \else \global\chardef\linetablepage \plusone \fi \doglobal\increment\linetablepart \ifnum\linetablepart>\noflinetableparts \globallet\noflinetableparts\linetablepart \initializetablebox\linetablepart \fi \global\linetablewidth\wd\linetablecell \startlinetablepart \if!!doneb \else \ifcase\linetablerepeat \else % check for left/right page \ifcase\linetablepage\donetrue\or\donetrue\or\donefalse\fi\ifdone % insert repeater \global\advance\linetablewidth\wd\tablebox\zerocount \iflinetablepreroll\kern\wd\else\unhcopy\fi\tablebox\zerocount \fi \fi \fi \fi \iflinetablepreroll \else \box\linetablecell % the columncounter is one ahead ! % \hskip\linetablecparameter\c!afstand % \hskip\scratchskip \dorecurse\linetablestep{\strut\hfil}% \hskip\scratchskip \fi \fi} % \linetableparameter\c!var -> \@@levar (when no classes) \def\startlinetablerun % to do: quit when nested {\bgroup \inlinetabletrue % autowidth \doif{\linetableparameter\c!maxwidth}\v!fit {\setuplinetable[\c!maxwidth=\zeropoint]}% \processaction [\linetableparameter\c!stretch] [ \v!no=>{\setuplinetable[\c!stretch=\maxdimen]},% no stretch \v!yes=>{\setuplinetable[\c!stretch=\zeropoint]}]% max stretch \chardef\linetablerepeat\linetableparameter\c!nleft \chardef\linetablesplitstate % = \ifdim\linetableparameter\c!maxwidth>\zeropoint \zerocount \else \plusone \fi % optional prevdepth correction \iflinetablepreroll \globallet\noflinetablerows\!!zerocount \else \linetableparameter\c!before \fi \globallet\linetablerows\!!zerocount \globallet\noflinetablecolumns\!!zerocount \globallet\noflinetableparts\!!zerocount \!!counta\zerocount \def\docommand##1% {\doglobal\increment\noflinetableparts \advance\!!counta##1% \setxvalue{\??le::\noflinetableparts}{\the\!!counta}}% \processcommacommand[\linetableparameter\c!n]\docommand \initializetableboxes\noflinetableparts \ifcase\linetablerepeat \globallet\linetablepart\!!plusone \else \globallet\linetablepart\!!zerocount % repeater \fi \globallet\linetablestep\!!plusone \globallet\linetableline\!!zerocount \globallet\linetablerow \!!zerocount \global\linetablecolumn \zerocount \global\linetablesubcol \zerocount \global\linetablewidth \zeropoint \iflinetablepreroll \else \ifdim\pagetotal>\zeropoint \verticalstrut\kern-\struttotal \fi \fi \setnoftableslines \checklinetablepage \let\BR\linetableBR \let\ER\linetableER \let\BH\linetableBR \let\EH\linetableER \let\BC\linetableBC \let\EC\linetableEC \let\NC\linetableNC \let\NR\linetableNR \flushlinetablehead} \def\stoplinetablerun {\globallet\linetableline\!!maxcard \chardef\linetableheadstate\zerocount % blocked \flushlinetableparts \iflinetablepreroll \else \linetableparameter\c!after \fi \globallet\linetablepart \!!zerocount \globallet\noflinetableparts\!!zerocount \egroup} % \def\checklinecolumnwidth % {\ifundefined{\??lew\number\linetablecolumn}% % \donetrue % \else\ifdim\getvalue{\??lew\number\linetablecolumn}<\wd\linetablecell % \donetrue % \else % \donefalse % \fi\fi % \ifdone % \setxvalue{\??lew\number\linetablecolumn}{\the\wd\linetablecell}% % \fi} % % \def\checklinecolumnwidth % {\ifcsname\??lew\number\linetablecolumn\endcsname % \ifdim\csname\??lew\number\linetablecolumn\endcsname<\wd\linetablecell % \donetrue % \else % \donefalse % \fi % \else % \donetrue % \fi % \ifdone % \setxvalue{\??lew\number\linetablecolumn}{\the\wd\linetablecell}% % \fi} % \def\checklinecolumnwidth % {\expandafter\xdef\csname\??lew\number\linetablecolumn\endcsname % {\expandafter\ifx\csname\??lew\number\linetablecolumn\endcsname\relax % \the\wd\linetablecell % \else\ifdim\csname\??lew\number\linetablecolumn\endcsname<\wd\linetablecell % \the\wd\linetablecell % \else % \csname\??lew\number\linetablecolumn\endcsname % \fi\fi}} \def\checklinecolumndimension#1#2#3% {\expandafter\xdef\csname#1\number#3\endcsname {\expandafter\ifx\csname#1\number#3\endcsname\relax \the#2\linetablecell \else\ifdim\csname#1\number#3\endcsname<#2\linetablecell \the#2\linetablecell \else \csname#1\number#3\endcsname \fi\fi}} \def\checklinecolumnwidth {\checklinecolumndimension\??lew\wd\linetablecolumn} \def\checklinecolumnheight{\checklinecolumndimension\??leh\ht\linetablerow} \def\checklinecolumndepth {\checklinecolumndimension\??led\dp\linetablerow} \def\linetableBR {\dosingleempty\dolinetableBR} \def\dolinetableBR[#1]% #1 not yet implemented {\ifnum\linetableheadstate=1\else \doglobal\increment\linetablerow \doglobal\increment\linetablerows \fi \global\linetablecolumn\plusone \global\linetablesubcol\plusone % \linetableheight\linetablerparameter\c!height % % \ifx\linetableheight\empty % % nothing % \else\ifx\linetableheight\v!fit % % keep it simple % \else\ifx\linetableheight\v!line % \chardef\linetablemode\plusone % \else % \!!heighta\linetableheight % \advance\!!heighta-\strutdepth % \fi\fi\fi % \linetableheight\zeropoint \edef\!!stringa{\linetablerparameter\c!height}% \ifx\!!stringa\empty \chardef\linetablehmode\zerocount \else\ifx\!!stringa\v!fit \chardef\linetablehmode\plusone \else\ifx\!!stringa\v!line \chardef\linetablehmode\plustwo \else \linetableheight\!!stringa \advance\linetableheight-\strutdepth \fi\fi\fi % \startlinetablepart} \def\linetableBC {\startlinetablecell} \def\linetableEC {\stoplinetablecell \iflinetablepreroll \checklinecolumnwidth \checklinecolumnheight \checklinecolumndepth \fi \checklinetablepart} \def\linetableER {% \stoplinetablecell % no \box\linetablecell, i.e. dummy columnn, last \NC \NR \stoplinetablepart \savelinetablepart \advance\linetablecolumn \minusone \ifnum\linetablecolumn>\noflinetablecolumns \xdef\noflinetablecolumns{\number\linetablecolumn}% \fi \flushlinetableparts \global\linetablecolumn\zerocount \global\linetablewidth \zeropoint \ifcase\linetablerepeat \globallet\linetablepart\!!plusone \else \globallet\linetablepart\!!zerocount % repeater \fi \checklinetablepage \flushlinetablehead} \def\checklinetablepage {\global\chardef\linetablepage\zerocount \ifcase\linetablerepeat \else \ifcase\linetablepage \doif{\linetableparameter\c!repeat}\v!no {\global\chardef\linetablepage\doifoddpageelse\plusone\plustwo}% \fi \fi} \def\flushlinetablehead {\ifcase\linetableheadstate % 0 blocked \or % 1 doing head \or % 2 head done \or % 3 trigger flush \chardef\linetableheadstate\plusone \the\@@linetablehead\relax \chardef\linetableheadstate\plustwo \fi} \def\linetableNC % first time special treatment {\relax \ifcase\linetablecolumn \linetableBR \else \linetableEC \fi \linetableBC} % beware, this will result in BR BC EC BC NR \def\linetableNR {\stoplinetablecell % dummy \linetableER} \def\startlinetable {\startlinetablerun} \def\stoplinetable {\stoplinetablerun} \def\startlinetableanalysis {\bgroup \linetableprerolltrue \trialtypesettingtrue \startlinetablerun} \def\stoplinetableanalysis {\stoplinetablerun \egroup \globallet\noflinetablerows\linetablerows \dorecurse\noflinetablerows % global, from last run {\linetableparameter\c!n} {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% \setevalue{\??ler\recurselevel x\c!height}{\getvalue{\??leh\recurselevel}}% \setevalue{\??ler\recurselevel x\c!depth }{\getvalue{\??led\recurselevel}}% \letgvalue{\??leh\recurselevel}\!!zeropoint \letgvalue{\??led\recurselevel}\!!zeropoint} \dorecurse\noflinetablecolumns % global, from last run {\linetableparameter\c!n} {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% \setevalue{\??lec\recurselevel\c!width}{\getvalue{\??lew\recurselevel}}% \letgvalue{\??lew\recurselevel}\!!zeropoint}} % init next table % todo: store in box instead of macro \newtoks \@@linetablehead \long\def\startlinetablehead#1\stoplinetablehead {\ifinlinetable \@@linetablehead\emptytoks \fi \chardef\linetableheadstate3 % full \@@linetablehead{#1}% \ifinlinetable \flushlinetablehead \fi} \def\linetableBH {\ifx\EC\relax % signal, grabbing lines \else \@@linetablehead\emptytoks \fi \pushmacro\BC \pushmacro\EC \def\BC##1\EC{\appendtoks##1\to\@@linetablehead}% \let\EC\relax} % signal \def\linetableEH {\popmacro\EC \popmacro\BC \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead} \let\startlinetablebody\donothing \let\stoplinetablebody \donothing \def\processlinetablebuffer {\dosingleempty\doprocesslinetablebuffer} \def\doprocesslinetablebuffer[#1]% {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis \startlinetablerun \getbuffer[#1]\stoplinetablerun \egroup} \def\processlinetablefile#1% {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun \egroup} % will go away: \def\processlinetableXMLfile#1% {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\processXMLfile{#1}\stoplinetableanalysis \startlinetablerun \processXMLfile{#1}\stoplinetablerun \egroup} \protect \endinput \doifnotmode{demo}{\endinput} \setuplinetable[n=6,m={2,2,2},lines=25] % m ? \setuplinetable[c][1] [width=2cm,background=color,backgroundcolor=red] \setuplinetable[c][4] [width=3cm,background=color,backgroundcolor=yellow] \setuplinetable[c][6] [width=3cm,background=color,backgroundcolor=magenta] \setuplinetable[r][odd] [background=color,backgroundcolor=gray] \setuplinetable[r][even][background=color,backgroundcolor=green] \starttext \showframe \showstruts \setupcolors[state=start] \setuppagenumbering[alternative=doublesided]\page[left] \startlinetable \NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR \dorecurse{100}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} \stoplinetable \startlinetable \NC[style=slanted,color=green,background=color,backgroundcolor=darkred,nx=2,uitlijnen=middle] xxx \NC yy \NC ddddd \NC eeee \NC ff \NC \NR \dorecurse{100}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} \stoplinetable % \startbuffer[lt] % \NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC ee \NC ff \NC \NR % \NC aaa\crlf aaa \NC b \NC cc \NC ddd \NC eeee \NC f \NC \NR % \stopbuffer % % \processlinetablebuffer[lt] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/node-aux.lua0000644000175000017500000002605612130411274024120 0ustar norbertnorbertif not modules then modules = { } end modules ['node-aux'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: n1 .. n2 : __concat metatable local type, tostring = type, tostring local nodes, node = nodes, node local utfvalues = utf.values local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local attributelist_code = nodecodes.attributelist -- temporary local math_code = nodecodes.math local nodepool = nodes.pool local new_glue = nodepool.glue local new_glyph = nodepool.glyph local traverse_nodes = node.traverse local traverse_id = node.traverse_id local free_node = node.free local hpack_nodes = node.hpack local unset_attribute = node.unset_attribute local first_glyph = node.first_glyph or node.first_character local copy_node = node.copy local copy_node_list = node.copy_list local slide_nodes = node.slide local insert_node_after = node.insert_after local isnode = node.is_node local unsetvalue = attributes.unsetvalue local current_font = font.current local texbox = tex.box local report_error = logs.reporter("node-aux:error") function nodes.repackhlist(list,...) --~ nodes.showsimplelist(list) local temp, b = hpack_nodes(list,...) list = temp.list temp.list = nil free_node(temp) return list, b end local function set_attributes(head,attr,value) for n in traverse_nodes(head) do n[attr] = value local id = n.id if id == hlist_node or id == vlist_node then set_attributes(n.list,attr,value) end end end local function set_unset_attributes(head,attr,value) for n in traverse_nodes(head) do if not n[attr] then n[attr] = value end local id = n.id if id == hlist_code or id == vlist_code then set_unset_attributes(n.list,attr,value) end end end local function unset_attributes(head,attr) for n in traverse_nodes(head) do n[attr] = unsetvalue local id = n.id if id == hlist_code or id == vlist_code then unset_attributes(n.list,attr) end end end nodes.setattribute = node.set_attribute nodes.getattribute = node.has_attribute nodes.unsetattribute = node.unset_attribute nodes.has_attribute = node.has_attribute nodes.firstglyph = first_glyph nodes.setattributes = set_attributes nodes.setunsetattributes = set_unset_attributes nodes.unsetattributes = unset_attributes -- function nodes.is_skipable(a,id) -- skipable nodes at the margins during character protrusion -- return ( -- id ~= glyph_node -- or id == ins_node -- or id == mark_node -- or id == adjust_node -- or id == penalty_node -- or (id == glue_node and a.spec.writable) -- or (id == disc_node and a.pre == nil and a.post == nil and a.replace == nil) -- or (id == math_node and a.surround == 0) -- or (id == kern_node and (a.kern == 0 or a.subtype == NORMAL)) -- or (id == hlist_node and a.width == 0 and a.height == 0 and a.depth == 0 and a.list == nil) -- or (id == whatsit_node and a.subtype ~= pdf_refximage_node and a.subtype ~= pdf_refxform_node) -- ) -- end -- history: -- -- -- local function glyph_width(a) -- local ch = chardata[a.font][a.char] -- return (ch and ch.width) or 0 -- end -- -- local function glyph_total(a) -- local ch = chardata[a.font][a.char] -- return (ch and (ch.height+ch.depth)) or 0 -- end -- -- local function non_discardable(a) -- inline -- return a.id < math_node -- brrrr -- end -- -- local function calculate_badness(t,s) -- if t == 0 then -- return 0 -- elseif s <= 0 then -- return INF_BAD -- else -- local r -- if t <= 7230584 then -- r = t * 297 / s -- elseif s >= 1663497 then -- r = t / floor(s / 297) -- else -- r = t -- end -- r = floor(r) -- if r > 1290 then -- return INF_BAD -- else -- return floor((r * r * r + 0x20000) / 0x40000) -- 0400000 / 01000000 -- end -- end -- end -- -- left-overs -- -- local function round_xn_over_d(x, n, d) -- local positive -- was x >= 0 -- if x >= 0 then -- positive = true -- else -- x = -x -- positive = false -- end -- local t = floor(x % 0x8000) * n -- 0100000 -- local f = floor(t / 0x8000) -- 0100000 -- local u = floor(x / 0x8000) * n + f -- 0100000 -- local v = floor(u % d) * 0x8000 + f -- 0100000 -- if floor(u / d) >= 0x8000 then -- 0100000 -- report_parbuilders('arith_error') -- else -- u = 0x8000 * floor(u / d) + floor(v / d) -- 0100000 -- end -- v = floor(v % d) -- if 2*v >= d then -- u = u + 1 -- end -- if positive then -- return u -- else -- return -u -- end -- end function nodes.firstcharacter(n,untagged) -- tagged == subtype > 255 if untagged then return first_glyph(n) else for g in traverse_id(glyph_code,n) do return g end end end function nodes.firstcharinbox(n) local l = texbox[n].list if l then for g in traverse_id(glyph_code,l) do return g.char end end return 0 end if not node.end_of_math then function node.end_of_math(n) for n in traverse_id(math_code,n.next) do return n end end end nodes.endofmath = node.end_of_math -- local function firstline(n) -- while n do -- local id = n.id -- if id == hlist_code then -- if n.subtype == line_code then -- return n -- else -- return firstline(n.list) -- end -- elseif id == vlist_code then -- return firstline(n.list) -- end -- n = n.next -- end -- end -- nodes.firstline = firstline -- this depends on fonts, so we have a funny dependency ... will be -- sorted out .. we could make tonodes a plugin into this local function tonodes(str,fnt,attr) -- (str,template_glyph) -- moved from blob-ini if not str or str == "" then return end local head, tail, space, fnt, template = nil, nil, nil, nil, nil if not fnt then fnt = current_font() elseif type(fnt) ~= "number" and fnt.id == "glyph" then fnt, template = nil, fnt -- else -- already a number end for s in utfvalues(str) do local n if s == 32 then if space then n = copy_node(space) elseif fonts then -- depedency local parameters = fonts.hashes.identifiers[fnt].parameters space = new_glue(parameters.space,parameters.space_stretch,parameters.space_shrink) n = space end elseif template then n = copy_node(template) n.char = s else n = new_glyph(fnt,s) end if attr then -- normally false when template n.attr = copy_node_list(attr) end if head then insert_node_after(head,tail,n) else head = n end tail = n end return head, tail end nodes.tonodes = tonodes local function link(list,currentfont,currentattr,head,tail) for i=1,#list do local n = list[i] if n then local tn = isnode(n) if not tn then local tn = type(n) if tn == "number" then if not currentfont then currentfont = current_font() end local h, t = tonodes(tostring(n),currentfont,currentattr) if not h then -- skip elseif not head then head, tail = h, t else tail.next, h.prev, tail = h, t, t end elseif tn == "string" then if #tn > 0 then if not currentfont then currentfont = current_font() end local h, t = tonodes(n,currentfont,currentattr) if not h then -- skip elseif not head then head, tail = h, t else tail.next, h.prev, tail = h, t, t end end elseif tn == "table" then if #tn > 0 then if not currentfont then currentfont = current_font() end head, tail = link(n,currentfont,currentattr,head,tail) end end elseif not head then head = n if n.next then tail = slide_nodes(n) else tail = n end elseif n.id == attributelist_code then -- weird case report_error("weird node type in list at index %s:",i) for i=1,#list do local l = list[i] report_error("%3i: %s %S",i,l.id == attributelist_code and "!" or ">",l) end os.exit() else tail.next = n n.prev = tail if n.next then tail = slide_nodes(n) else tail = n end end else -- permitting nil is convenient end end return head, tail end nodes.link = link local function locate(start,wantedid,wantedsubtype) for n in traverse_nodes(start) do local id = n.id if id == wantedid then if not wantedsubtype or n.subtype == wantedsubtype then return n end elseif id == hlist_code or id == vlist_code then local found = locate(n.list,wantedid,wantedsubtype) if found then return found end end end end nodes.locate = locate function nodes.concat(list) local head, tail for i=1,#list do local li = list[i] if not li then -- skip elseif head then tail.next = li li.prev = tail tail = li.next and slide_nodes(li) or li else head = li tail = li.next and slide_nodes(li) or li end end return head, tail end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-sid.mkii0000644000175000017500000006703711754241457024264 0ustar norbertnorbert%D \module %D [ file=page-sid, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Side Floats, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Side Floats} \unprotect % problem: when too small, side effects; we need to determine the % shift earlier so that we can act when shift < size % % \definefloat[edgefigure] % \setupfloat % [edgefigure] % [rightmargindistance=-\rightmargintotal, % leftmargindistance=-\rightmargintotal, % default=outer] % \starttext % \placeedgefigure{}{\framed[width=12cm]{}} \input tufte % \placeedgefigure{}{\framed[width=5cm]{}} \input tufte % \placeedgefigure{}{\framed[width=4cm]{}} \input tufte % \placeedgefigure{}{\framed[width=2cm]{}} \input tufte % \stoptext % todo: dimexpr an dnumexpr % These macro deal with side floats. We started with Daniel % Comenetz macros as published in TUGBoat Volume 14 (1993), % No.\ 1: Anchored Figures at Either Margin. I extended and % patched the macros to suite our needs which results in a % messy module. Therefore, this module badly needs an update % because it's now a mixture of old and new macros. % afhankelijke variabelen % % \overgap vervangen door \floatsidetopskip % \sidegap vervangen door \floatsideskip % \undergap vervangen door \floatsidebottomskip % % \prskp vervangen door \ctxparskip % toegevoegde macro's/aanroepen % % \logsidefloat : loginformatie % \flushsidefloats : nodig voor koppen % recente wijzigingen: % % namen aangepast: \float... enz. i.p.v. \pic % Pas op: \EveryPar{\EveryPar{}\margetitel{whatever}} % \plaatsfiguur[links]{}{} moet goed gaan. In dat geval % begint de tekst terecht wat lager. \newdimen\sidefloatheight % includes the topskip \newdimen\sidefloatwidth \newdimen\sidefloathsize \newdimen\sidefloatshift \newdimen\sidefloatextrashift \newdimen\sidefloatvsize \def\nofloatvsize{-1pt } \newdimen\sidefloatprogress \newdimen\sidefloatpagetotal \newbox\floatbottom \newcount\sidefloatsidelines \newcount\sidefloatlinesdone % 1 = backspace % 2 = leftedge % 3 = leftmargin % 4 = leftside % 5 = rightside % 6 = rightmargin % 7 = rightedge % 8 = cutspace \chardef\sidefloattype\zerocount \def\backspacefloat {\global\chardef\sidefloattype1 \putsidefloat} \def\leftedgefloat {\global\chardef\sidefloattype2 \putsidefloat} \def\leftmarginfloat {\global\chardef\sidefloattype3 \putsidefloat} \def\leftfloat {\global\chardef\sidefloattype4 \putsidefloat} \def\rightfloat {\global\chardef\sidefloattype5 \putsidefloat} \def\rightmarginfloat {\global\chardef\sidefloattype6 \putsidefloat} \def\rightedgefloat {\global\chardef\sidefloattype7 \putsidefloat} \def\cutspacefloat {\global\chardef\sidefloattype8 \putsidefloat} \let\marginfloat \cutspacefloat \newif\ifroomforfloat \newif\iffloatshort \newif\iffloatflag \newif\iffloatrighteqo \newif\iffloatlefteqo \newdimen\sidefloatleftskip \newdimen\sidefloatrightskip \newdimen\sidefloatmaximum % \def\checksidefloatshift % {\ifdim\sidefloatmaximum>\zeropoint % \ifcase\sidefloattype % % invalid % \or % % backspace % \or % \global\sidefloatshift-\sidefloatmaximum % \global\advance\sidefloatshift-\rightorleftpageaction \leftedgedistance \rightedgedistance % \global\advance\sidefloatshift-\rightorleftpageaction \leftmarginwidth \rightmarginwidth % \global\advance\sidefloatshift-\rightorleftpageaction \leftmargindistance \rightmargindistance % \or % \global\sidefloatshift-\sidefloatmaximum % \global\advance\sidefloatshift-\rightorleftpageaction \leftmargindistance \rightmargindistance % \or % % left % \or % % right % \or % \global\sidefloatshift-\sidefloatmaximum % \global\advance\sidefloatshift-\rightorleftpageaction \leftmargindistance \rightmargindistance % \or % \global\sidefloatshift-\sidefloatmaximum % \global\advance\sidefloatshift-\rightorleftpageaction \leftedgedistance \rightedgedistance % \global\advance\sidefloatshift-\rightorleftpageaction \leftmarginwidth \rightmarginwidth % \global\advance\sidefloatshift-\rightorleftpageaction \leftmargindistance \rightmargindistance % \or % % cutspace % \fi % \fi} \def\checksidefloatshift {\ifdim\sidefloatmaximum>\zeropoint \ifcase\sidefloattype % invalid \or % backspace \or \global\sidefloatshift\dimexpr -\sidefloatmaximum -\rightorleftpageaction \leftedgedistance \rightedgedistance -\rightorleftpageaction \leftmarginwidth \rightmarginwidth -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or \global\sidefloatshift\dimexpr -\sidefloatmaximum -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or % left \or % right \or \global\sidefloatshift\dimexpr -\sidefloatmaximum -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or \global\sidefloatshift\dimexpr -\sidefloatmaximum -\rightorleftpageaction \leftedgedistance \rightedgedistance -\rightorleftpageaction \leftmarginwidth \rightmarginwidth -\rightorleftpageaction \leftmargindistance \rightmargindistance -\compensatedinnermakeupmargin \relax \or % cutspace \fi \fi} % \def\setsidefloatskips % {\global\sidefloatrightskip\zeropoint % \global\sidefloatleftskip \zeropoint % \ifcase\sidefloattype % \or % backspace % \global \sidefloatleftskip \rightorleftpageaction \backspace \cutspace % \or % leftedge % \global \sidefloatleftskip \rightorleftpageaction \leftmargindistance\rightmargindistance % \global\advance\sidefloatleftskip \rightorleftpageaction \leftmarginwidth\rightmarginwidth % \global\advance\sidefloatleftskip \rightorleftpageaction \leftedgedistance\rightedgedistance % \or % leftmargin % \global \sidefloatleftskip \rightorleftpageaction \leftmargindistance\rightmargindistance % \or % leftside % \or % rightside % \or % rightmargin % \global \sidefloatrightskip\rightorleftpageaction \rightmargindistance\leftmargindistance % \or % rightedge % \global \sidefloatrightskip\rightorleftpageaction \rightmargindistance\leftmargindistance % \global\advance\sidefloatrightskip\rightorleftpageaction \rightmarginwidth\leftmarginwidth % \global\advance\sidefloatrightskip\rightorleftpageaction \rightedgedistance\leftedgedistance % \or % cutspace % \global \sidefloatrightskip\rightorleftpageaction \cutspace\backspace % \fi % \ifdim\sidefloatrightskip>\zeropoint % \doglobal\advance\sidefloatrightskip\rightskip % \fi % \ifdim\sidefloatleftskip>\zeropoint % \doglobal\advance\sidefloatleftskip\leftskip % \fi} % use \outermarginwidth etc here \def\setsidefloatskips {\global\sidefloatrightskip\zeropoint \global\sidefloatleftskip \zeropoint \ifcase\sidefloattype \or % backspace \global\sidefloatleftskip\dimexpr +\rightorleftpageaction \backspace \cutspace +\compensatedinnermakeupmargin \relax \or % leftedge \global\sidefloatleftskip\dimexpr +\rightorleftpageaction \leftmargindistance \rightmargindistance +\rightorleftpageaction \leftmarginwidth \rightmarginwidth +\rightorleftpageaction \leftedgedistance \rightedgedistance +\compensatedinnermakeupmargin \relax \or % leftmargin \global\sidefloatleftskip\dimexpr +\rightorleftpageaction \leftmargindistance \rightmargindistance +\compensatedinnermakeupmargin \relax \or % leftside \or % rightside \or % rightmargin \global\sidefloatrightskip\dimexpr +\rightorleftpageaction \rightmargindistance \leftmargindistance +\compensatedinnermakeupmargin \relax \or % rightedge \global\sidefloatrightskip\dimexpr +\rightorleftpageaction \rightmargindistance \leftmargindistance +\rightorleftpageaction \rightmarginwidth \leftmarginwidth +\rightorleftpageaction \rightedgedistance \leftedgedistance +\compensatedinnermakeupmargin \relax \or % cutspace \global\sidefloatrightskip\dimexpr +\rightorleftpageaction \cutspace \backspace +\compensatedinnermakeupmargin \relax \fi \ifdim\sidefloatrightskip>\zeropoint \doglobal\advance\sidefloatrightskip\rightskip \fi \ifdim\sidefloatleftskip >\zeropoint \doglobal\advance\sidefloatleftskip \leftskip \fi} % eq is still crap \ifx\normalleqno\undefined \let\floatrighteqo=\eqno \let\floatleftleqo=\leqno \else \let\floatrighteqo=\normaleqno \let\floatleftleqo=\normalleqno \fi % Watch it even more! In inner, gaat't mis omdat daar % pagetotal enz niet zijn aangepast. Inner kan overigens niet % betrouwbaar worden getest! % \def\flushsidefloats% % {\par % \sidefloatprogress=\sidefloatvsize % \advance\sidefloatprogress by -\pagetotal % \ifdim\sidefloatprogress>\zeropoint % \witruimte % nog checken op interferentie % \kern\sidefloatprogress % \fi % \global\sidefloatvsize=\nofloatvsize % \global\floatflagfalse} % % no, too buggy, leads to top of page crap % %\def\flushsidefloats % {\par % \dochecksidefloat % \scratchcounter=-\hangafter % \dorecurse{\scratchcounter}{\strut\hfill\strut\par}} % %\def\flushsidefloats % {\par % \!!heighta\sidefloatvsize % \advance\!!heighta -\pagetotal % \ifdim\!!heighta>\zeropoint % % to be checked for interference % \witruimte % % will be option % \getnoflines\!!heighta % \!!heighta\noflines\lineheight % % so far for option % \kern\!!heighta % \fi % % == \forgetsidefloats % \global\sidefloatvsize\nofloatvsize % \global\floatshortfalse % \global\floatflagfalse} % \def\flushsidefloats % {\par % \!!heighta\sidefloatvsize % \advance\!!heighta -\pagetotal % \ifdim\!!heighta>\zeropoint % % to be checked for interference % \witruimte % % will be option % \getnoflines\!!heighta % \!!heighta\noflines\lineheight % % so far for option % \ifdim\sidefloatbottomskip>\zeropoint\relax % \ifdim\!!heighta>\sidefloatbottomskip % \advance\!!heighta-\sidefloatbottomskip % \kern\!!heighta % \vskip\sidefloatbottomskip % \else % \kern\!!heighta % \fi % \else % \kern\!!heighta % \fi % \fi % % == \forgetsidefloats % \global\sidefloatvsize\nofloatvsize % \global\floatshortfalse % \global\floatflagfalse} \newif\iftracesidefloats \def\flushsidefloats {\par \!!heighta\sidefloatvsize \advance\!!heighta -\pagetotal \ifnum\!!heighta>\zeropoint \global\advance\sidefloatvsize -\sidefloatbottomskip \ifdim\!!heighta>\zeropoint \bgroup \let\flushsidefloats\relax \forgetall \doloop {\strut \iftracesidefloats \color[darkgray]% {\baselinerulefalse \boxrulewidth.5\points \ruledhbox{\strut\kern\sidefloatwidth}}% \fi \par \!!heighta\sidefloatvsize \advance\!!heighta -\pagetotal \ifdim\!!heighta>\zeropoint \ifnum\recurselevel>\plushundred \exitloop \fi \else \exitloop \fi}% \egroup \ifdim\parskip>\zeropoint \ifdim\sidefloatbottomskip>\parskip \nowhitespace \vskip\sidefloatbottomskip \fi \fi \else\ifdim\sidefloatbottomskip>\parskip \vskip\sidefloatbottomskip \fi\fi \fi % not entirely the same as \forgetsidefloats \global\sidefloatvsize\nofloatvsize % \global\sidefloatsidelines\zerocount % no, we flush before a side float \global\floatshortfalse % so this will get lost % also here if used at all \global\holdinginserts\zerocount \global\floatflagfalse} \def\flushsidefloatsafterpar {\xdef\oldpagetotal{\the\pagetotal}% \gdef\checksidefloat {\dochecksidefloat \ifdim\oldpagetotal=\pagetotal \else \global\let\checksidefloat\dochecksidefloat \flushsidefloats \global\sidefloatsidelines\zerocount % here ! \fi}} \def\forgetsidefloats {\global\sidefloatvsize\nofloatvsize \global\sidefloatsidelines\zerocount % also here if used at all \global\holdinginserts\zerocount \global\floatshortfalse \global\floatflagfalse} \let\logsidefloat=\relax \def\pushpenalties % needed ? and right {\widowpenalty\plusone \clubpenalty\plustwo \brokenpenalty\plusone \let\pushpenalties\relax \edef\poppenalties {\widowpenalty \the\widowpenalty \clubpenalty \the\clubpenalty \brokenpenalty\the\brokenpenalty \let\poppenalties\relax}} % shouldn;t that be: % % \def\pushpenalties % needed? % {\let\pushpenalties\relax % \edef\poppenalties % {\widowpenalty \the\widowpenalty % \clubpenalty \the\clubpenalty % \brokenpenalty\the\brokenpenalty % \let\poppenalties\relax}% % \widowpenalty\plusone % \clubpenalty\plustwo % \brokenpenalty\plusone} \let\poppenalties=\relax \def\restorepenalties {\ifnum\outputpenalty=\!!tenthousand\else \penalty\outputpenalty \fi} \def\sidefloatoutput {\iffloatshort \unvbox\normalpagebox \setbox\floatbottom\lastbox \ifdim\wd\floatbottom>\sidefloathsize \penalty-201 \box\floatbottom \else \ifvoid\floatbottom \else \restoreleftindent \ifdim\wd\floatbottom<\sidefloathsize \parskip\zeropoint %\noindent \ifinner\else\vadjust{\penalty\minusone}\fi \iffloatlefteqo \global\floatlefteqofalse \else \global\advance\sidefloathsize -\wd\floatbottom \iffloatrighteqo \global\floatrighteqofalse \else \global\divide\sidefloathsize \plustwo \fi \hskip\sidefloathsize \fi \fi \box\floatbottom \restorepenalties \fi \fi % why was this \global\holdinginserts\zerocount \global\floatshortfalse \else \finalsidefloatoutput % new \global\sidefloatvsize\nofloatvsize \global\sidefloatsidelines\zerocount % we can end up in fig lock, so \global\holdinginserts\zerocount here too ? \poppenalties \fi} \def\finalsidefloatoutput% new {\finaloutput\unvbox\normalpagebox} \def\restoreleftindent {\relax \ifnum\sidefloattype>4 \else \parskip\zeropoint % here ? \ifdim\sidefloatwidth>\zeropoint % new, see prikkels \noindent \ifinner\else\vadjust{\penalty\minusone}\fi \hskip\sidefloatwidth %\else % we have a margin or edge float \fi \fi} \ifx\normaleqno\undefined \def\normaleqno {\iffloatshort \global\floatrighteqotrue \fi \floatrighteqo} \else \def\eqno {\iffloatshort \global\floatrighteqotrue \fi \floatrighteqo} \fi % externfiguur -> grid =ja|hoogte|diepte|halveregel|passend -> helemaal in details % stelplaatsblokin -> zijuitlijnen=hoogte|diepte|regel|halveregel|grid -> halveregel in 'details' % replacement for below % % \global\setbox\floatbox\hbox % no \hskip, but \kern here % {\ifcase\sidefloattype % \vbox{#1}% % \or % 1 % \hskip\sidefloatleftshift % \hskip\sidefloatshift % \vbox{#1}% % \kern-\sidefloatextrashift % \or % 2 % \hskip\sidefloatshift % \vbox{#1}% % \kern-\sidefloatextrashift % \or % 3 % \hskip\sidefloatshift % \vbox{#1}% % \kern-\sidefloatextrashift % \or % 4 % \hskip\sidefloatleftshift % \hskip\sidefloatshift % \vbox{#1\removedepth}% % \kern-\sidefloatextrashift % \or % 5 % \hskip-\sidefloatextrashift % \vbox{#1}% % \kern\sidefloatshift % \kern\sidefloatrightshift % \or % 6 % \hskip-\sidefloatextrashift % \vbox{#1}% % \kern\sidefloatshift % \or % 7 % \hskip-\sidefloatextrashift % \vbox{#1}% % \kern\sidefloatshift % \or % 8 % \hskip-\sidefloatextrashift % \vbox{#1}% % \kern\sidefloatshift % \kern\sidefloatrightshift % \fi}% % % keep this ^ \def\putsidefloat#1% grid (4) is rather experimental {\par \whitespace % moved here dec 2001 {\everypar\emptytoks\forgetall\verticalstrut\vskip-\struttotal}% moved \checksidefloatshift \ifdim\sidefloatshift=\zeropoint \relax \ifnum\sidefloattype=4 \global\advance\sidefloatshift\sidefloatextrashift \global\sidefloatextrashift\zeropoint \else\ifnum\sidefloattype=5 \global\advance\sidefloatshift\sidefloatextrashift \global\sidefloatextrashift\zeropoint \fi\fi \else \ifnum\sidefloattype<4 \global\chardef\sidefloattype4 \else\ifnum\sidefloattype>5 \global\chardef\sidefloattype5 \fi\fi \fi \previoussidefloat \stallsidefloat %\global\setbox\floatbox\hbox % {\ifmarginfloat\else\ifrightfloat\else\kern\sidefloatleftshift\fi\fi % \hskip\ifrightfloat-\sidefloatextrashift\else\sidefloatshift\fi % \vbox{#1\ifnum\sidefloatalign=4 \removedepth\fi}% % \kern\ifrightfloat\sidefloatshift\else-\sidefloatextrashift\fi % \ifmarginfloat\else\ifrightfloat\kern\sidefloatrightshift\fi\fi}% \global\setbox\floatbox\hbox % no \hskip, but \kern here {\ifnum\sidefloattype=4 \hskip\sidefloatleftshift \else\ifnum\sidefloattype=1 \hskip\sidefloatleftshift \fi\fi \ifnum\sidefloattype>4 \hskip-\sidefloatextrashift \else \hskip\sidefloatshift \fi \vbox{#1\ifnum\sidefloatalign=4 \removedepth\fi}% \ifnum\sidefloattype>4 \kern\sidefloatshift \else \kern-\sidefloatextrashift \fi \ifnum\sidefloattype=8 \kern\sidefloatrightshift \else\ifnum\sidefloattype=5 \kern\sidefloatrightshift \fi\fi}% \ifnum\sidefloatalign=4 \getnoflines{\ht\floatbox}% \scratchdimen\noflines\lineheight \advance\scratchdimen-\strutdepth \getrawnoflines\sidefloattopskip \advance\scratchdimen\noflines\lineheight % todo: maybe rounding problem here % \global\setbox\floatbox\hbox{\lower\lineheight\box\floatbox}% \global\setbox\floatbox\hbox{\lower\strutdepth\box\floatbox}% \ht\floatbox\scratchdimen \dp\floatbox\zeropoint \fi \ifcase\sidefloatalign \else \global\sidefloattopskip\zeropoint \fi \scratchdimen \ifnum\sidefloattype<4 \sidefloattopskip \else\ifnum\sidefloattype>5 \sidefloattopskip \else \zeropoint \fi\fi % the top of the box is at the previous baseline \ifcase\sidefloatalign % 0 normal \advance\scratchdimen\strutdepth % == \sidefloattopoffset \or % 1 height \advance\scratchdimen\strutdepth % == \sidefloattopoffset \or % 2 line \or % 3 depth \advance\scratchdimen\lineheight \advance\scratchdimen\strutdepth \or % 4 grid \scratchdimen\zeropoint \or \advance\scratchdimen\strutheight \fi % new \global\sidefloatlinesdone\zerocount \ifnum\sidefloatsidelines>\zerocount \advance\scratchdimen\sidefloatsidelines\lineheight \fi % new \global\setbox\floatbox\hbox {\vbox {\vskip\scratchdimen \nointerlineskip \box\floatbox \ifnum\sidefloatalign=5 \vskip-\lineheight \fi}}% \ifnum\sidefloattype<4 \global\sidefloattopskip\zeropoint \else\ifnum\sidefloattype>5 \global\sidefloattopskip\zeropoint \fi\fi \global\sidefloatdownshift\zeropoint \measuresidefloat \ifroomforfloat \else \tosssidefloat \measuresidefloat \stallsidefloat \fi \setsidefloat} \def\progresssidefloat {\sidefloatprogress\sidefloatvsize \iffloatflag \advance\sidefloatprogress -\sidefloatpagetotal \global\floatflagfalse \else \advance\sidefloatprogress -\pagetotal \fi} \def\tosssidefloat {\vfill\eject} \def\measuresidefloat {\global\floatflagtrue \global\sidefloatpagetotal \pagetotal % global \ifnum\sidefloattype<4 \global \sidefloatwidth \zeropoint \else\ifnum\sidefloattype>5 \global \sidefloatwidth \zeropoint \else \global \sidefloatwidth \wd\floatbox \global\advance\sidefloatwidth \floatsideskip \fi\fi \ifdim\sidefloatwidth<\zeropoint \global\sidefloatwidth\zeropoint \fi \global \sidefloathsize \hsize \global\advance\sidefloathsize -\sidefloatwidth \global \sidefloatheight \ht\floatbox \global\advance\sidefloatheight \dp\floatbox \global\advance\sidefloatheight \sidefloattopskip \global \sidefloatvsize \sidefloatheight \global\advance\sidefloatvsize \sidefloatpagetotal \dimen0\sidefloatvsize \dimen2\pagegoal \relax \ifcase\sidefloatmethod % method 0 : raw \or % method 1 : safe \dimen2 .99\pagegoal \or % method 2 : tight \advance\dimen0 -\onepoint \fi \relax % really needed ! ! ! ! \ifdim\dimen0>\dimen2 \global\roomforfloatfalse \else \dimen0=\pagegoal \advance\dimen0 -\sidefloatvsize \ifdim\dimen0<\sidefloatbottomskip \global\advance\sidefloatvsize \dimen0 \global\floatshorttrue \pushpenalties % why was this \global\holdinginserts\plusone \else \global\advance\sidefloatvsize \sidefloatbottomskip \global\floatshortfalse \fi \global\roomforfloattrue \fi} \def\setsidefloat% nilling everypar saves time and redudant pos's {% removed here dec 2001 % {\everypar\emptytoks\forgetall\verticalstrut\vskip-\struttotal}% \ifnum\sidefloattype=4 \kern\sidefloattopskip \fi \ifnum\sidefloattype=5 \kern\sidefloattopskip \fi \edef\presidefloatdepth{\the\prevdepth}% \nointerlineskip \bgroup \everypar\emptytoks \parskip\zeropoint %\checksidefloatshift \setsidefloatskips \logsidefloat \relax \ifcase\sidefloattype % invalid \or % backspace \noindent\llap{\rlap{\box\floatbox}\hskip\sidefloatleftskip}\hfill \or % leftedge \noindent\llap{\box\floatbox\hskip\sidefloatleftskip}\hfill \or % leftmargin \noindent\llap{\box\floatbox\hskip\sidefloatleftskip}\hfill \or % leftside \noindent\box\floatbox\hfill \or % rightside \hfill\box\floatbox \or % rightmargin \hfill\rlap{\hskip\sidefloatrightskip\box\floatbox}% \or % rightedge \hfill\rlap{\hskip\sidefloatrightskip\box\floatbox}% \or % cutspace \hfill\rlap{\hskip\sidefloatrightskip\llap{\box\floatbox}}% \fi \egroup \par \kern-\sidefloatheight \penalty10001 % oeps, this will change \normalbaselines \prevdepth\presidefloatdepth % \noindent \resetsidefloatparagraph \ignorespaces} % not really needed \newcount\sidefloatparagraph \def\iffirstsidefloatparagraph {\ifcase\sidefloatparagraph\or} % without sidefloat lines % % \def\setsidefloatparagraph % {%\advance\sidefloatprogress \sidefloatbottomskip % %\!!counta\sidefloatprogress % \scratchdimen\sidefloatprogress % \advance\scratchdimen \strutht % \advance\scratchdimen -\roundingeps % new, needed in prikkels, prevent rounding errors % \!!counta\scratchdimen % \divide\!!counta \baselineskip % \ifnum\!!counta>0 % \hangindent \ifnum\sidefloattype>4 -\fi\sidefloatwidth % \hangafter-\!!counta % \fi % \global\advance\sidefloatparagraph \plusone % \iftracesidefloats % \hskip-\sidefloatwidth % \color[darkgray]% % {\vrule\!!height.5\points\!!depth.5\points\!!width\sidefloatwidth % %\hskip-.25\bodyfontsize\showstruts\strut\hskip.25\bodyfontsize}% % \llap{\showstruts\strut\hskip.25\bodyfontsize}}% % \fi} \def\setsidefloatparagraph {%\advance\sidefloatprogress \sidefloatbottomskip %\!!counta\sidefloatprogress \scratchdimen\sidefloatprogress \advance\scratchdimen \strutht \advance\scratchdimen -\roundingeps % new, needed in prikkels, prevent rounding errors \!!counta\scratchdimen \divide\!!counta \baselineskip\relax \ifnum\!!counta>0 % new from here \ifcase\sidefloatsidelines\else \ifcase\sidefloatlinesdone \global\sidefloatlinesdone\!!counta \else \scratchcounter\sidefloatlinesdone \advance\scratchcounter-\!!counta \global\advance\sidefloatsidelines-\scratchcounter \fi \fi \ifnum\sidefloatsidelines>\zerocount \scratchtoks\emptytoks \scratchcounter\sidefloatsidelines \scratchdimen\hsize \advance\scratchdimen-\sidefloatwidth \dorecurse\sidefloatsidelines {\appendtoks \zeropoint \hsize \to \scratchtoks}% \ifnum\!!counta>\sidefloatsidelines \advance\!!counta -\sidefloatsidelines\relax \advance\scratchcounter\!!counta \dorecurse\!!counta {\ifnum\sidefloattype>4 \appendtoks \zeropoint \scratchdimen \to \scratchtoks \else \appendtoks \sidefloatwidth \scratchdimen \to \scratchtoks \fi}% \fi \advance\scratchcounter \plusone \parshape \scratchcounter \the\scratchtoks \zeropoint \hsize\relax \else % new till here \hangindent \ifnum\sidefloattype>4 -\fi\sidefloatwidth \hangafter-\!!counta \fi \fi \global\advance\sidefloatparagraph \plusone \iftracesidefloats \hskip-\sidefloatwidth \color[darkgray]% {\vrule\!!height.5\points\!!depth.5\points\!!width\sidefloatwidth %\hskip-.25\bodyfontsize\showstruts\strut\hskip.25\bodyfontsize}% \llap{\showstruts\strut\hskip.25\bodyfontsize}}% \fi} \def\resetsidefloatparagraph {\global\sidefloatparagraph\zerocount } \def\dochecksidefloat {\progresssidefloat \ifdim\sidefloatprogress>\zeropoint \setsidefloatparagraph \else \resetsidefloatparagraph \fi \parskip\ctxparskip} \def\checksidefloat {\dochecksidefloat} \def\synchronizesidefloats {\ifinner \else \checksidefloat \fi} \def\doadjustsidefloatdisplaylines {\par \vskip-\parskip \noindent \ignorespaces} \def\adjustsidefloatdisplaylines {\aftergroup\doadjustsidefloatdisplaylines} \def\previoussidefloat {\progresssidefloat \ifdim\sidefloatprogress>\zeropoint \relax \iffloatshort \global\floatshortfalse \tosssidefloat \else \kern\sidefloatprogress \fi \fi} \def\stallsidefloat {\!!counta\pageshrink \divide\!!counta \baselineskip \advance\!!counta \plusone \parskip\zeropoint \dorecurse\!!counta{\line{}}% \kern-\!!counta\baselineskip \penalty\zerocount } % We need to hook it into the other otr's. This code will move. \let\OTRONEflushsidefloats \flushsidefloats \let\OTRONEsynchronizesidefloats\synchronizesidefloats % page-set % % \let\OTRSETflushsidefloats \forgetsidefloats % \let\OTRSETsynchronizesidefloats\forgetsidefloats % page-mul % % \let\OTRMULflushsidefloats \forgetsidefloats % \let\OTRMULsynchronizesidefloats\forgetsidefloats \def\synchronizesidefloats{\OTRcommand\synchronizesidefloats} \def\flushsidefloats {\OTRcommand\flushsidefloats} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otc.lua0000644000175000017500000002612412130411274024125 0ustar norbertnorbertif not modules then modules = { } end modules ['font-otc'] = { version = 1.001, comment = "companion to font-otf.lua (context)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, insert = string.format, table.insert local type, next = type, next local lpegmatch = lpeg.match -- we assume that the other otf stuff is loaded already local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end) local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf local registerotffeature = otf.features.register local setmetatableindex = table.setmetatableindex -- In the userdata interface we can not longer tweak the loaded font as -- conveniently as before. For instance, instead of pushing extra data in -- in the table using the original structure, we now have to operate on -- the mkiv representation. And as the fontloader interface is modelled -- after fontforge we cannot change that one too much either. local types = { substitution = "gsub_single", ligature = "gsub_ligature", alternate = "gsub_alternate", } setmetatableindex(types, function(t,k) t[k] = k return k end) -- "key" local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } } local noflags = { } local function addfeature(data,feature,specifications) local descriptions = data.descriptions local resources = data.resources local lookups = resources.lookups local gsubfeatures = resources.features.gsub if gsubfeatures and gsubfeatures[feature] then -- already present else local sequences = resources.sequences local fontfeatures = resources.features local unicodes = resources.unicodes local lookuptypes = resources.lookuptypes local splitter = lpeg.splitter(" ",unicodes) local done = 0 local skip = 0 if not specifications[1] then -- so we accept a one entry specification specifications = { specifications } end -- subtables are tables themselves but we also accept flattened singular subtables for s=1,#specifications do local specification = specifications[s] local valid = specification.valid if not valid or valid(data,specification,feature) then local initialize = specification.initialize if initialize then -- when false is returned we initialize only once specification.initialize = initialize(specification) and initialize or nil end local askedfeatures = specification.features or everywhere local subtables = specification.subtables or { specification.data } or { } local featuretype = types[specification.type or "substitution"] local featureflags = specification.flags or noflags local added = false local featurename = format("ctx_%s_%s",feature,s) local st = { } for t=1,#subtables do local list = subtables[t] local full = format("%s_%s",featurename,t) st[t] = full if featuretype == "gsub_ligature" then lookuptypes[full] = "ligature" for code, ligature in next, list do local unicode = tonumber(code) or unicodes[code] local description = descriptions[unicode] if description then local slookups = description.slookups if type(ligature) == "string" then ligature = { lpegmatch(splitter,ligature) } end local present = true for i=1,#ligature do if not descriptions[ligature[i]] then present = false break end end if present then if slookups then slookups[full] = ligature else description.slookups = { [full] = ligature } end done, added = done + 1, true else skip = skip + 1 end end end elseif featuretype == "gsub_single" then lookuptypes[full] = "substitution" for code, replacement in next, list do local unicode = tonumber(code) or unicodes[code] local description = descriptions[unicode] if description then local slookups = description.slookups replacement = tonumber(replacement) or unicodes[replacement] if descriptions[replacement] then if slookups then slookups[full] = replacement else description.slookups = { [full] = replacement } end done, added = done + 1, true end end end end end if added then -- script = { lang1, lang2, lang3 } or script = { lang1 = true, ... } for k, v in next, askedfeatures do if v[1] then askedfeatures[k] = table.tohash(v) end end sequences[#sequences+1] = { chain = 0, features = { [feature] = askedfeatures }, flags = featureflags, name = featurename, subtables = st, type = featuretype, } -- register in metadata (merge as there can be a few) if not gsubfeatures then gsubfeatures = { } fontfeatures.gsub = gsubfeatures end local k = gsubfeatures[feature] if not k then k = { } gsubfeatures[feature] = k end for script, languages in next, askedfeatures do local kk = k[script] if not kk then kk = { } k[script] = kk end for language, value in next, languages do kk[language] = value end end end end end if trace_loading then report_otf("registering feature %a, affected glyphs %a, skipped glyphs %a",feature,done,skip) end end end otf.enhancers.addfeature = addfeature local extrafeatures = { } function otf.addfeature(name,specification) extrafeatures[name] = specification end local function enhance(data,filename,raw) for feature, specification in next, extrafeatures do addfeature(data,feature,specification) end end otf.enhancers.register("check extra features",enhance) -- tlig -- local tlig = { endash = "hyphen hyphen", emdash = "hyphen hyphen hyphen", -- quotedblleft = "quoteleft quoteleft", -- quotedblright = "quoteright quoteright", -- quotedblleft = "grave grave", -- quotedblright = "quotesingle quotesingle", -- quotedblbase = "comma comma", } local tlig_specification = { type = "ligature", features = everywhere, data = tlig, flags = noflags, } otf.addfeature("tlig",tlig_specification) registerotffeature { name = 'tlig', description = 'tex ligatures', } -- trep local trep = { -- [0x0022] = 0x201D, [0x0027] = 0x2019, -- [0x0060] = 0x2018, } local trep_specification = { type = "substitution", features = everywhere, data = trep, flags = noflags, } otf.addfeature("trep",trep_specification) registerotffeature { name = 'trep', description = 'tex replacements', } -- tcom if characters.combined then local tcom = { } local function initialize() characters.initialize() for first, seconds in next, characters.combined do for second, combination in next, seconds do tcom[combination] = { first, second } end end -- return false end local tcom_specification = { type = "ligature", features = everywhere, data = tcom, flags = noflags, initialize = initialize, } otf.addfeature("tcom",tcom_specification) registerotffeature { name = 'tcom', description = 'tex combinations', } end -- anum local anum_arabic = { [0x0030] = 0x0660, [0x0031] = 0x0661, [0x0032] = 0x0662, [0x0033] = 0x0663, [0x0034] = 0x0664, [0x0035] = 0x0665, [0x0036] = 0x0666, [0x0037] = 0x0667, [0x0038] = 0x0668, [0x0039] = 0x0669, } local anum_persian = { [0x0030] = 0x06F0, [0x0031] = 0x06F1, [0x0032] = 0x06F2, [0x0033] = 0x06F3, [0x0034] = 0x06F4, [0x0035] = 0x06F5, [0x0036] = 0x06F6, [0x0037] = 0x06F7, [0x0038] = 0x06F8, [0x0039] = 0x06F9, } local function valid(data) local features = data.resources.features if features then for k, v in next, features do for k, v in next, v do if v.arab then return true end end end end end local anum_specification = { { type = "substitution", features = { arab = { urd = true, dflt = true } }, data = anum_arabic, flags = noflags, -- { }, valid = valid, }, { type = "substitution", features = { arab = { urd = true } }, data = anum_persian, flags = noflags, -- { }, valid = valid, }, } otf.addfeature("anum",anum_specification) -- todo: only when there is already an arab script feature registerotffeature { name = 'anum', description = 'arabic digits', } context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-66.tex0000644000175000017500000000625111754241457023710 0ustar norbertnorbert%D \module %D [ file=s-pre-66, %D version=2009.02.24, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 66, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Cambria (made in the aftermath of testing \OPENTYPE\ math). % \enablemode[paper] \usemodule[pre-60] \usemodule[abr-01] \definepapersize [wide] [width=960pt, height=600pt] \setuppapersize [wide] [wide] \setuplayout [topspace=20pt, bottomspace=20pt, header=0pt, footer=0pt, backspace=20pt, height=middle, rightmargin=0pt, rightedge=\dimexpr220pt-40pt\relax, rightedgedistance=40pt, leftedge=0pt, leftmargin=0pt, cutspace=220pt, width=\dimexpr960pt-40pt-220pt\relax] \definebodyfontenvironment [20pt] \definefontfeature[default][default][mode=node,script=latn] \usetypescript [cambria] \setupbodyfont [cambria,20pt] \bf \setupwhitespace [big] \setupcolors [state=start] \definecolor[pagecolor][s=.25] \definecolor[edgecolor][b=.50,g=.75,r=.75] \setupinteraction [state=start, click=no, color=, contrastcolor=] \defineoverlay[pagegraphic][\reuseMPgraphic{pagegraphic}] \startuseMPgraphic{pagegraphic} StartPage ; fill Page enlarged 10pt withcolor \MPcolor{pagecolor} ; fill Page enlarged 10pt leftenlarged (CutSpace - bbwidth(Page) - 10pt) withcolor \MPcolor{edgecolor} ; % fill Field[Text][RightEdge] withcolor green ; % fill Field[Text][Text] withcolor yellow ; StopPage ; \stopuseMPgraphic \setupbackgrounds [page] [background=pagegraphic] \setupbackgrounds [text] [rightedge] [background=edge] \definelayer [edge] [width=\rightedgewidth, state=repeat] \setuphead [chapter] [style=\bfc, color=edgecolor] \setupcolors [textcolor=edgecolor] \newcounter\MyCounter \def\StartRemark#1% {\doglobal\increment\MyCounter % hm, we could use the autoref (todo in cont-xp) \title[topic:\MyCounter]{#1} \setlayer[edge][preset=middletop,y=\thelayerheight{edge}]{\strut\color[pagecolor]{\bf\goto{#1}[topic:\MyCounter]}} \StartSteps} \def\StopRemark {\StopSteps \page} \def\StartRemark#1% {\doglobal\increment\MyCounter % hm, we could use the autoref (todo in cont-xp) \title[topic:\MyCounter]{#1} \StartSteps \def\StopRemark {\StopSteps \page \setlayer[edge][preset=middletop,y=\thelayerheight{edge}]{\strut\color[pagecolor]{\bf\goto{#1}[topic:\MyCounter]}}}} \def\StartTitlePage {\startstandardmakeup[top=\vss,bottom=\vss\vss] \definedfont[Bold sa 4] \raggedcenter \setupinterlinespace \baselineskip=1\baselineskip plus 1fil minus 1fil\relax} \def\StopTitlePage {\stopstandardmakeup} \doifnotmode{demo} {\endinput} \starttext \StartTitlePage x\\y\\z \StopTitlePage \StartRemark{a} a \FlushStep a \FlushStep \StopRemark \StartRemark{b} b \FlushStep b \FlushStep b \FlushStep \StopRemark \StartRemark{c} c \FlushStep c \FlushStep c \FlushStep c \FlushStep \StopRemark \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-fil.mkvi0000644000175000017500000004163411754241457024321 0ustar norbertnorbert%D \module %D [ file=font-fil, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Classes and Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Classes and Files} \unprotect %D Personally I think that using \TEX\ macro packages is %D complicated by the way fonts are handled. Apart from the %D many encodings, we also deal with different naming schemes. %D Confronted with this problem, I decided to change the %D definitions into: %D %D \starttyping %D \definebodyfont [12pt] [rm] [tf=Times-Roman at 12pt] %D \stoptyping %D %D combined with for instance: %D %D \starttyping %D \definefontsynonym [Times-Roman] [tir] %D \stoptyping % \definetypeface[palatino][rm][serif][palatino,allbold][default] % % \startfontclass[palatino] % \definefontsynonym [Serif] [SerifBold] % \definefontsynonym [SerifItalic] [SerifBoldItalic] % \definefontsynonym [SerifSlanted] [SerifBoldSlanted] % \definefontsynonym [SerifCaps] [SerifBold] % \stopfontclass % % \setupbodyfont[palatino] \let\fontclass\empty \unexpanded\def\startfontclass {\dosingleempty\font_basics_start_font_class} \def\font_basics_start_font_class[#class]% {\pushmacro\fontclass \doifelse{#class}\v!each {\let\fontclass\empty} {\doifsomething{#class}{\def\fontclass{#class}}}} \unexpanded\def\stopfontclass {\popmacro\fontclass} \def\classfont#class#name{#class#name} % \definefont[whatever][\classfont{xx}{yy} at 10pt] %D \macros %D {definefontsynonym, doifelsefontsynonym, %D expandfontsynonym, truefontname, truefontdata} %D %D While looking for fonts, fontsynonyms are used for accessing %D the files! %D %D \starttyping %D \definefontsynonym[Serif][Lucida-Bright] %D \definefontsynonym[Lucida-Bright][lbr][encoding=texnansi] %D \stoptyping \installcorenamespace {fontfile} % file synonyms \let\m_font_name\empty \let\m_font_file\empty \def \defaultfontfile{\truefontname{Normal}} % was cmtt10, but that one is gone \edef\nullfontname {\fontname\nullfont} \unexpanded\def\definefontsynonym[#name]#crap[#file]% {\edef\m_font_name{#name}% \edef\m_font_file{#file}% \ifx\fontclass\empty \expandafter\font_basics_define_font_synonym_nop \else \expandafter\font_basics_define_font_synonym_yes \fi} \def\font_basics_define_font_synonym_nop {\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file \doifnextoptionalelse\font_basics_define_font_synonym_nop_opt\font_basics_define_font_synonym_nop_nil} \def\font_basics_define_font_synonym_yes {\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file \doifnextoptionalelse\font_basics_define_font_synonym_yes_opt\font_basics_define_font_synonym_yes_nil} \def\font_basics_define_font_synonym_nop_opt[#specification]% {\let\p_features \undefined \let\p_fallbacks \undefined \let\p_goodies \undefined \let\p_designsize\undefined \expandafter\font_basics_get_font_parameter_nop#specification,]=,} \def\font_basics_define_font_synonym_yes_opt[#specification]% {\let\p_features \undefined \let\p_fallbacks \undefined \let\p_goodies \undefined \let\p_designsize\undefined \expandafter\font_basics_get_font_parameter_yes#specification,]=,} \def\font_basics_get_font_parameter_nop#key=#value,% {\if]#key% \font_basics_get_font_parameter_nop_finish \else \expandafter\normaldef\csname p_#key\endcsname{#value}% \expandafter\font_basics_get_font_parameter_nop \fi} \def\font_basics_get_font_parameter_yes#key=#value,% {\if]#key% \font_basics_get_font_parameter_yes_finish \else \expandafter\normaldef\csname p_#key\endcsname{#value}% \expandafter\font_basics_get_font_parameter_yes \fi} % helpers, some day these will be toks and counts % \def\fntsetdefname {\global\let\somefontname\defaultfontfile} % \def\fntsetsomename{\gdef\somefontname} % takes argument % \def\fntsetnopsize {\let\somefontsize\empty} % \def\fntsetsomesize{\def\somefontsize} % takes argument % happens later, else mkvi parsing gets into troubles % end of helpers % we could collect them in one macro (but no expansion) \def\font_basics_define_font_synonym_nop_nil {\expandafter\let\csname\??fontfile\m_font_name\s!features \endcsname\undefined \expandafter\let\csname\??fontfile\m_font_name\s!fallbacks \endcsname\undefined \expandafter\let\csname\??fontfile\m_font_name\s!goodies \endcsname\undefined \expandafter\let\csname\??fontfile\m_font_name\s!designsize\endcsname\undefined} \def\font_basics_define_font_synonym_yes_nil {\global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!features \endcsname\undefined \global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!fallbacks \endcsname\undefined \global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!goodies \endcsname\undefined \global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\undefined} \def\font_basics_get_font_parameter_nop_finish {\expandafter\let\csname\??fontfile\m_font_name\s!features \endcsname\p_features \expandafter\let\csname\??fontfile\m_font_name\s!fallbacks \endcsname\p_fallbacks \expandafter\let\csname\??fontfile\m_font_name\s!goodies \endcsname\p_goodies \expandafter\let\csname\??fontfile\m_font_name\s!designsize\endcsname\p_designsize} \def\font_basics_get_font_parameter_yes_finish {\global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!features \endcsname\p_features \global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!fallbacks \endcsname\p_fallbacks \global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!goodies \endcsname\p_goodies \global\expandafter\let\csname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\p_designsize} %\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}] % %\defineclassfontsynonym [KopFont] [officina] [SerifBold] \unexpanded\def\defineclassfontsynonym {\dotripleargument\font_basics_define_class_font_synonym} %\definefontsynonym[#tag][\fontclassname{#class}{#fileortag}]} \def\font_basics_define_class_font_synonym[#tag][#class][#fileortag]% needs testing {\expandafter\normaldef\csname\??fontfile\fontclass#tag\endcsname{\fontclassname{#class}{#fileortag}}% \font_basics_define_font_synonym_yes_nil} \let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater \unexpanded\def\setupfontsynonym {\dodoubleempty\dosetupfontsynonym} \def\dosetupfontsynonym[#name][#settings]% not yet supported, will do when needed {} % todo: replace * by ... less messy with features \def\truefontname#name% {\expandafter\font_helpers_true_fontname#name*\empty*\relax} \def\font_helpers_true_fontname#name*#first#rest*#crap\relax {\ifcsname\??fontfile\fontclass#name\endcsname \ifx#first\empty \expandafter\truefontname\csname\??fontfile\fontclass#name\endcsname \else \expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname*#first#rest% \fi \else\ifcsname\??fontfile\defaultfontclass#name\endcsname \ifx#first\empty \expandafter\truefontname\csname\??fontfile\defaultfontclass#name\endcsname \else \expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname*#first#rest% \fi \else\ifcsname\??fontfile#name\endcsname \ifx#first\empty \expandafter\truefontname\csname\??fontfile#name\endcsname \else \expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname*#first#rest% \fi \else #name\ifx#first\empty\else*#first#rest\fi \fi\fi\fi} \def\font_helpers_true_fontname_check#name% {\expandafter\font_helpers_true_fontname_check_indeed#name*\relax} \def\font_helpers_true_fontname_check_indeed#name*#crap\relax {\ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname \else\ifcsname\??fontfile\defaultfontclass#name\endcsname \expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname \else\ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname \else #name% \fi\fi\fi} \def\expandfontsynonym#command#name% one level expansion {\ifcsname\??fontfile\fontclass#name\endcsname \expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\fontclass#name\endcsname}% \else\ifcsname\??fontfile\defaultfontclass#2\endcsname \expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\defaultfontclass#name\endcsname}% \fi\fi} \def\doifelsefontsynonym#name% {\ifcsname\??fontfile\fontclass#name\endcsname \singleexpandafter\firstoftwoarguments \else\ifcsname\??fontfile\defaultfontclass#name\endcsname \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} %D \macros %D {tracedfontname} %D %D A goody: \def\tracedfontname#name% {#name\ifcsname\??fontfile\fontclass#name\endcsname \expandafter\tracedfontname\csname\??fontfile\fontclass#name\endcsname \else\ifcsname\??fontfile#name\endcsname \expandafter\tracedfontname\csname\??fontfile#name\endcsname \fi\fi} %D \macros %D {fontclass, defaultfontclass} %D %D The fontclass model was introduced a while after we implement %D the basic font model and at that time we still defaulted to %D no model at all. Nowadays we default to the \type {modern} %D fontclass. \let\fontclass \empty \let\defaultfontclass\empty \def\fontclassname#class#name% {\ifcsname\??fontfile#class#name\endcsname \fontclassname{#class}{\csname\??fontfile#class#name\endcsname}% \else\ifcsname\??fontfile#name\endcsname \fontclassname{#class}{\csname\??fontfile#name\endcsname}% \else #2% \fi\fi} %D Files or names can have properties and these need to be consulted %D at some point. They can inherit them. % Why these expanded and rscale not ... maybe not worth the trouble (delayed % expansion actually would be better i.e. macros in feature specs). Test % without pre-expansion. \def\font_helpers_update_font_class_parameters {\edef\m_font_class_direction {\ifcsname\??fontclass\fontclass\fontstyle\s!direction \endcsname\csname\??fontclass\fontclass\fontstyle\s!direction \endcsname\fi}% \edef\m_font_class_features {\ifcsname\??fontclass\fontclass\fontstyle\s!features \endcsname\csname\??fontclass\fontclass\fontstyle\s!features \endcsname\fi}% \edef\m_font_class_fallbacks {\ifcsname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname\csname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname\fi}% \edef\m_font_class_goodies {\ifcsname\??fontclass\fontclass\fontstyle\s!goodies \endcsname\csname\??fontclass\fontclass\fontstyle\s!goodies \endcsname\fi}% \edef\m_font_class_designsize{\ifcsname\??fontclass\fontclass\fontstyle\s!designsize\endcsname\csname\??fontclass\fontclass\fontstyle\s!designsize\endcsname\fi}} % resolve \def\font_helpers_set_features_yes#name% {\ifcsname\??fontfile\fontclass#name\s!features \endcsname\expandafter\let\expandafter\m_font_features % class + symbolic_name \csname\??fontfile\fontclass#name\s!features \endcsname\else \ifcsname\??fontfile #name\s!features \endcsname\expandafter\let\expandafter\m_font_features % symbolic_name \csname\??fontfile #name\s!features \endcsname\else \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_features_yes % class + parent_name \csname\??fontfile\fontclass #name\endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_features_yes % parent_name \csname\??fontfile #name\endcsname\else \let\m_font_features\empty\fi\fi\fi\fi} \def\font_helpers_set_fallbacks_yes#name% {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname\expandafter\let\expandafter\m_font_fallbacks \csname\??fontfile\fontclass#name\s!fallbacks\endcsname\else \ifcsname\??fontfile #name\s!fallbacks\endcsname\expandafter\let\expandafter\m_font_fallbacks \csname\??fontfile #name\s!fallbacks\endcsname\else \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_fallbacks_yes \csname\??fontfile\fontclass #name\endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_fallbacks_yes \csname\??fontfile #name\endcsname\else \let\m_font_fallbacks\empty\fi\fi\fi\fi} \def\font_helpers_set_goodies_yes#name% {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname\expandafter\let\expandafter\m_font_goodies \csname\??fontfile\fontclass#name\s!goodies \endcsname\else \ifcsname\??fontfile #name\s!goodies \endcsname\expandafter\let\expandafter\m_font_goodies \csname\??fontfile #name\s!goodies \endcsname\else \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_goodies_yes \csname\??fontfile\fontclass #name\endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_goodies_yes \csname\??fontfile #name\endcsname\else \let\m_font_goodies\empty\fi\fi\fi\fi} \def\font_helpers_set_designsize_yes#name% {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname\expandafter\let\expandafter\m_font_designsize \csname\??fontfile\fontclass#name\s!designsize\endcsname\else \ifcsname\??fontfile #name\s!designsize\endcsname\expandafter\let\expandafter\m_font_designsize \csname\??fontfile #name\s!designsize\endcsname\else \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_designsize_yes \csname\??fontfile\fontclass #name\endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_designsize_yes \csname\??fontfile #name\endcsname\else \let\m_font_designsize\empty\fi\fi\fi\fi} \def\font_helpers_set_features_nop#name% {\ifcsname\??fontfile#name\s!features \endcsname\expandafter\let\expandafter\m_font_features \csname\??fontfile#name\s!features \endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_features_nop \csname\??fontfile #name\endcsname\else \let\m_font_features\empty\fi\fi} \def\font_helpers_set_fallbacks_nop#name% {\ifcsname\??fontfile#name\s!fallbacks\endcsname\expandafter\let\expandafter\m_font_fallbacks \csname\??fontfile#name\s!fallbacks\endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_fallbacks_nop \csname\??fontfile #name\endcsname\else \let\m_font_fallbacks\empty\fi\fi} \def\font_helpers_set_goodies_nop#name% {\ifcsname\??fontfile#name\s!goodies \endcsname\expandafter\let\expandafter\m_font_goodies \csname\??fontfile#name\s!goodies \endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_goodies_nop \csname\??fontfile #name\endcsname\else \let\m_font_goodies\empty\fi\fi} \def\font_helpers_set_designsize_nop#name% {\ifcsname\??fontfile#name\s!designsize\endcsname\expandafter\let\expandafter\m_font_designsize \csname\??fontfile#name\s!designsize\endcsname\else \ifcsname\??fontfile #name\endcsname\expandafter\font_helpers_set_designsize_nop \csname\??fontfile #name\endcsname\else \let\m_font_designsize\empty\fi\fi} \def\font_helpers_update_font_parameters_yes {\font_helpers_set_features_yes \somefontname \font_helpers_set_fallbacks_yes \somefontname \font_helpers_set_goodies_yes \somefontname \font_helpers_set_designsize_yes\somefontname} \def\font_helpers_update_font_parameters_nop {\font_helpers_set_features_nop \somefontname \font_helpers_set_fallbacks_nop \somefontname \font_helpers_set_goodies_nop \somefontname \font_helpers_set_designsize_nop\somefontname} \def\font_helpers_update_font_parameters {\ifx\fontclass\empty\font_helpers_update_font_parameters_nop\else\font_helpers_update_font_parameters_yes\fi} \installcorenamespace{fontclass} % we can pack them \unexpanded\def\savefontclassparameters#style#rscale#features#fallbacks#goodies#designsize#direction% {\setxvalue{\??fontclass\fontclass#style\s!rscale }{#rscale}% \setxvalue{\??fontclass\fontclass#style\s!features }{#features}% \setxvalue{\??fontclass\fontclass#style\s!fallbacks }{#fallbacks}% \setxvalue{\??fontclass\fontclass#style\s!goodies }{#goodies}% \setxvalue{\??fontclass\fontclass#style\s!designsize}{#designsize}% \setxvalue{\??fontclass\fontclass#style\s!direction }{#direction}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-17.mkii0000644000175000017500000002510012132111075024006 0ustar norbertnorbert%D \module %D [ file=s-pre-17, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 17, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setupbodyfont [12pt,ss] \setupcolors [state=start] \setupsystem [random=medium] \setupbackgrounds [state=repeat] \setupbackgrounds [page] [background={page,forward}] \setupbackgrounds [text][text] [background=blowup] \setupinteraction [state=start, %click=off, color=TitleColor, contrastcolor=TitleColor] \setupinteractionscreen [option=max] \setuptolerance [verytolerant,stretch] \definecolor [BackColor] [s=.30] \definecolor [PageColor] [g=1] \definecolor [FrameColor] [r=1] \definecolor [TitleColor] [y=1] \definecolor [ArrowColor] [b=1] \defineoverlay [title] [\useMPgraphic{title}] \defineoverlay [page] [\useMPgraphic{page}] \defineoverlay [blowup] [\overlaybutton{page(\realfolio)}] \defineoverlay [forward] [\overlaybutton{forward}] \startMPpositiongraphic{mppos:connection} path pa, pb, pc ; pair ca, cb ; initialize_box(\MPpos{\MPvar{self}}) ; pa := pxy ; ca := cxy ; initialize_box(\MPpos{\MPvar{prev}}) ; pb := pxy ; cb := cxy ; pickup pencircle scaled .5pt ; pa := pa enlarged 10pt ; pb := pb enlarged 10pt ; for i=1 upto 10 : draw pa randomized 20pt withcolor \MPcolor{FrameColor} ; endfor ; if \MPp{\MPvar{prev}}>0 : pair a, b, c, d ; for i=1 upto 25 : a := .5[ulcorner pa,urcorner pa] randomized (10pt,10pt) ; b := .5[llcorner pb,lrcorner pb] randomized (20pt,10pt) ; c := .5[a,b] rotatedaround(a,-25) randomized (5pt,5pt) ; d := .5[a,b] rotatedaround(a,+25) randomized (5pt,5pt) ; draw (a--b) withcolor \MPcolor{ArrowColor} ; draw (d--a--c) withcolor \MPcolor{ArrowColor} ; endfor ; fi ; anchor_box(\MPanchor{\MPvar{self}}) ; \stopMPpositiongraphic \startuseMPgraphic{title} pickup pencircle scaled .5pt ; for i=1 upto 10 : draw fullsquare xyscaled(OverlayWidth,OverlayHeight) enlarged 10pt randomized 20pt withcolor \MPcolor{TitleColor} ; endfor ; \stopuseMPgraphic \startuseMPgraphic{page} StartPage ; pickup pencircle scaled .5pt ; fill Page withcolor \MPcolor{BackColor} ; for i=1 upto 20 : draw Page enlarged -50pt randomized 50pt withcolor \MPcolor{PageColor} ; endfor ; StopPage ; \stopuseMPgraphic \def\StartText% {\bgroup \getrandomdimen\scratchdimen{250pt}{350pt}% \edef\TextWidth{\the\scratchdimen}% \setbox\scratchbox=\hbox\bgroup \hsize\TextWidth \setupframedtexts [before=,after=, width=fit,align=right, % normal, frame=off,foregroundcolor=white]% \framedtext\bgroup} \def\BlowX{450pt} % \def\BlowX{600pt} \def\BlowY{300pt} % \def\BlowY{450pt} \def\BlowV {50pt} % \def\BlowV{100pt} \def\BlowH {75pt} % \def\BlowH{100pt} \def\BackO {50pt} % \def\BackO {50pt} \def\StopText% {\egroup\egroup \doglobal\increment\CurrentBlaBla \let\PrevBlaBla\CurrentBlaBla \doglobal\decrement\PrevBlaBla \let\NextBlaBla\CurrentBlaBla \doglobal\increment\NextBlaBla \setMPpositiongraphic {connection:\CurrentBlaBla}% {mppos:connection}% {seed=\CurrentBlaBla, prev=connection:\PrevBlaBla, next=connection:\NextBlaBla}% \SetBlowUp{connection:\CurrentBlaBla}\BlowX\BlowY\BlowH\BlowV \hbox to 600pt % {\getrandomdimen\scratchdimen{50pt}{100pt}% {\getrandomdimen\scratchdimen{50pt}{75pt}% \hskip0pt plus \scratchdimen minus \scratchdimen \hpos{connection:\CurrentBlaBla}% {\framed [frame=off, offset=overlay, backgroundoffset=\BackO, background=blowup] {\box\scratchbox}}% % \getrandomdimen\scratchdimen{50pt}{100pt}% \getrandomdimen\scratchdimen{50pt}{75pt}% \hskip0pt plus \scratchdimen minus \scratchdimen}% % \getrandomdimen\scratchdimen{100pt}{150pt}% \getrandomdimen\scratchdimen{75pt}{125pt}% \vskip\scratchdimen \egroup} \def\xStartText {\bgroup \setbox\scratchbox=\hbox\bgroup \framed [frame=off,foregroundcolor=white] \bgroup} \def\xStopText{\StopText} \def\SetBlowUp#1#2#3#4#5% tag width height hoffset voffset {\scratchdimen=\MPw{#1}% \advance\scratchdimen-#2 % \divide\scratchdimen by 2 \advance\scratchdimen by \MPx{#1}\relax \ifdim\scratchdimen<0pt \scratchdimen=0pt \fi \ScaledPointsToBigPoints{\number\scratchdimen}\TextX \advance\scratchdimen by #2 % \ScaledPointsToBigPoints{\number\scratchdimen}\TextW % \scratchdimen=\MPh{#1}% \advance\scratchdimen-#3 % \divide\scratchdimen by 2 \advance\scratchdimen\MPy{#1}\relax \ifdim\scratchdimen<0pt \scratchdimen=0pt \fi \ScaledPointsToBigPoints{\number\scratchdimen}\TextY \advance\scratchdimen by #3 \ScaledPointsToBigPoints{\number\scratchdimen}\TextH % \def\PDFpageviewkey{ fitr \TextX\space\TextY\space\TextW\space\TextH}% \def\PDFpageviewwrd{ /FitR \TextX\space\TextY\space\TextW\space\TextH}% \edef\PDFpageview{/View [\PDFpageviewwrd]}} \def\xSetBlowUp#1#2#3#4#5% tag width height hoffset voffset {\scratchdimen\MPx{#1}\relax \ifdim\scratchdimen<#4 \ScaledPointsToBigPoints{0}\TextX \multiply\scratchdimen 2 \else \advance\scratchdimen-#4 \ScaledPointsToBigPoints{\number\scratchdimen}\TextX \advance\scratchdimen#4 \advance\scratchdimen#4 \fi \advance\scratchdimen\MPw{#1}% \ScaledPointsToBigPoints{\number\scratchdimen}\TextW % \scratchdimen\MPy{#1}\relax \ifdim\scratchdimen<#5 \ScaledPointsToBigPoints{0}\TextY \multiply\scratchdimen 2 \else \advance\scratchdimen-#5 \ScaledPointsToBigPoints{\number\scratchdimen}\TextY \advance\scratchdimen#5 \advance\scratchdimen#5 \fi \advance\scratchdimen\MPh{#1}% \ScaledPointsToBigPoints{\number\scratchdimen}\TextH % \def\PDFpageviewkey{ fitr \TextX\space\TextY\space\TextW\space\TextH}% \def\PDFpageviewwrd{ /FitR \TextX\space\TextY\space\TextW\space\TextH}% \edef\PDFpageview{/View [\PDFpageviewwrd]}} \dontcomplain \def\StartPage#1% {\doStartPage{1}{#1}} \def\doStartPage#1#2% {\def\StopPage{\doStopPage{#1}{#2}}% \setbox\scratchbox=\hbox\bgroup \valign\bgroup\ignorespaces##\vss\cr} \def\doStopPage#1#2% {\cr \egroup \egroup \setbox\scratchbox=\vbox {\vskip100pt \hbox \ifcase#1 spread 200pt \else to \wd\scratchbox \fi {\hss \switchtobodyfont[big]% \bfd\setupinterlinespace \ifcase#1\else \SetBlowUp{title:\realfolio}\BlowX\BlowY\BlowH\BlowV \fi \hpos{title:\realfolio} {\framed [frame=off,align=middle, foregroundcolor=white, background={title,blowup}] {#2}}% \hss} \vskip100pt \box\scratchbox} \doFlushPage} \def\doFlushPage {\scratchdimen=\ht\scratchbox \advance\scratchdimen \dp\scratchbox \advance\scratchdimen 100pt \edef\height{\the\scratchdimen} \scratchdimen=\wd\scratchbox \advance\scratchdimen 100pt \edef\width {\the\scratchdimen} \expanded{\definepapersize[MASTER][width=\width,height=\height]} \setuppapersize [MASTER][MASTER] \setuplayout [topspace=25pt,backspace=25pt, width=middle,header=0pt,footer=0pt,height=middle] \centerbox{\box\scratchbox} \page} \def\StartTopic#1% {\unskip\unskip\cr \doglobal\increment(\CurrentBlaBla,100)% \vbox\bgroup \vskip100pt \bgroup \definecolor[FrameColor][TitleColor] \switchtobodyfont[big] \bfd\setupinterlinespace \xStartText#1\xStopText \vskip25pt \egroup} \def\StopTopic% {\vskip-\lastskip \vskip100pt \egroup \ignorespaces} \def\TitlePage#1% {\doStartPage{0}{\def\\{\vskip1ex\bfc\def\\{\vskip1ex\bfb}}#1} \StopPage} \doifnotmode{demo}{\endinput} \setupoutput[pdftex] \starttext \TitlePage{About Text\\Today's Talk\\Hans Hagen} \StartPage{The First Page} \StartTopic{Some Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input knuth \StopText \StopTopic \StartTopic{Another Text} \StartText \input tufte \StopText \StartText \input zapf \StopText \StartText \input knuth \StopText \StopTopic \StartTopic{Some More Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StopTopic \StartTopic{Some Text Agian} \StartText \input tufte \StopText \StartText \input zapf \StopText \StartText \input knuth \StopText \StartText \input tufte \StopText \StopTopic \StopPage \StartPage{The Second Page} \StartTopic{Some Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Another Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Some Nice Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input tufte \StopText \StopTopic \StartTopic{Some Funny Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StopTopic \StartTopic{Quite Some Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Even More Text} \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StopPage \StartPage{The Third Page} \StartTopic{Some Short Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Some Minimal Text} \StartText \input tufte \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Some More Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input tufte \StopText \StopTopic \StopPage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/page-fac.mkiv0000644000175000017500000000450012130411274024216 0ustar norbertnorbert%D \module %D [ file=page-fac, % moved from page-ini %D version=2011.12.07, % 2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Facing Pages, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Facing Pages} \unprotect %D \macros %D {setupoppositeplacing,startopposite} %D %D \starttyping %D \starttext %D test \startopposite \blackrule[width=3cm,height=4cm] \stopopposite test %D test \startopposite \blackrule[width=3cm,height=4cm] \stopopposite test %D \stoptext %D \stoptyping \newbox \b_page_facings_content \newconditional\c_page_facings_busy \installcorenamespace{oppositeplacing} \installsetuponlycommandhandler \??oppositeplacing {oppositeplacing} \unexpanded\def\startopposite {\dowithnextboxcontent {\hsize\makeupwidth}% {\global\setbox\b_page_facings_content\vbox {\ifvoid\b_page_facings_content \directoppositeplacingparameter\c!before \else \directoppositeplacingparameter\c!inbetween \unvbox\b_page_facings_content \fi \box\nextbox}}% \vbox\bgroup} \unexpanded\def\stopopposite {\egroup} \def\page_facings_finish {\ifvoid\b_page_facings_content \else \global\setbox\b_page_facings_content\vbox to \makeupheight {\unvbox\b_page_facings_content \directoppositeplacingparameter\c!after \vss}% \fi} \def\page_facings_flush {\ifconditional\c_page_facings_busy \ifvoid\b_page_facings_content \else \page_facings_flush_indeed \fi \fi} \def\page_facings_flush_indeed {\ifnum\realpageno>\plusone \begingroup \pageornamentstate\plusone % tricky \page_facings_finish \page_boxes_shipout{\page_boxes_constructed_page\box\b_page_facings_content}% \endgroup \else \global\setbox\b_page_facings_content\emptybox \fi} \appendtoks \doifelse{\directoppositeplacingparameter\c!state}\v!start\settrue\setfalse\c_page_facings_busy \to \everysetupoppositeplacing \setupoppositeplacing [\c!state=\v!start, \c!before=, \c!inbetween=\blank, \c!after=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-2.mkii0000644000175000017500000002657111754241457024271 0ustar norbertnorbert%D \module %D [ file=regi-8859-2, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-2 (East European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-2/Latin2 input encoding (regime) for %D Central European languages, see also cp1250. %D %D Usage: \type{\enableregime[8859-2]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-2] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 162 {\textbreve} % 02D8 BREVE \defineactivetoken 163 {\Lstroke} % 0141 LATIN CAPITAL LETTER L WITH STROKE \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\Lcaron} % 013D LATIN CAPITAL LETTER L WITH CARON \defineactivetoken 166 {\Sacute} % 015A LATIN CAPITAL LETTER S WITH ACUTE \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 170 {\Scedilla} % 015E LATIN CAPITAL LETTER S WITH CEDILLA \defineactivetoken 171 {\Tcaron} % 0164 LATIN CAPITAL LETTER T WITH CARON \defineactivetoken 172 {\Zacute} % 0179 LATIN CAPITAL LETTER Z WITH ACUTE \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 175 {\Zdotaccent} % 017B LATIN CAPITAL LETTER Z WITH DOT ABOVE \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 178 {\textogonek} % 02DB OGONEK \defineactivetoken 179 {\lstroke} % 0142 LATIN SMALL LETTER L WITH STROKE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\lcaron} % 013E LATIN SMALL LETTER L WITH CARON \defineactivetoken 182 {\sacute} % 015B LATIN SMALL LETTER S WITH ACUTE \defineactivetoken 183 {\textcaron} % 02C7 CARON \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 186 {\scedilla} % 015F LATIN SMALL LETTER S WITH CEDILLA \defineactivetoken 187 {\tcaron} % 0165 LATIN SMALL LETTER T WITH CARON \defineactivetoken 188 {\zacute} % 017A LATIN SMALL LETTER Z WITH ACUTE \defineactivetoken 189 {\texthungarumlaut} % 02DD DOUBLE ACUTE ACCENT \defineactivetoken 190 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 191 {\zdotaccent} % 017C LATIN SMALL LETTER Z WITH DOT ABOVE \defineactivetoken 192 {\Racute} % 0154 LATIN CAPITAL LETTER R WITH ACUTE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Abreve} % 0102 LATIN CAPITAL LETTER A WITH BREVE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Lacute} % 0139 LATIN CAPITAL LETTER L WITH ACUTE \defineactivetoken 198 {\Cacute} % 0106 LATIN CAPITAL LETTER C WITH ACUTE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Ecaron} % 011A LATIN CAPITAL LETTER E WITH CARON \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Dcaron} % 010E LATIN CAPITAL LETTER D WITH CARON \defineactivetoken 208 {\Dstroke} % 0110 LATIN CAPITAL LETTER D WITH STROKE \defineactivetoken 209 {\Nacute} % 0143 LATIN CAPITAL LETTER N WITH ACUTE \defineactivetoken 210 {\Ncaron} % 0147 LATIN CAPITAL LETTER N WITH CARON \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Ohungarumlaut} % 0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Rcaron} % 0158 LATIN CAPITAL LETTER R WITH CARON \defineactivetoken 217 {\Uring} % 016E LATIN CAPITAL LETTER U WITH RING ABOVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Uhungarumlaut} % 0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\Tcedilla} % 0162 LATIN CAPITAL LETTER T WITH CEDILLA \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\racute} % 0155 LATIN SMALL LETTER R WITH ACUTE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\abreve} % 0103 LATIN SMALL LETTER A WITH BREVE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\lacute} % 013A LATIN SMALL LETTER L WITH ACUTE \defineactivetoken 230 {\cacute} % 0107 LATIN SMALL LETTER C WITH ACUTE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\ecaron} % 011B LATIN SMALL LETTER E WITH CARON \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\dcaron} % 010F LATIN SMALL LETTER D WITH CARON \defineactivetoken 240 {\dstroke} % 0111 LATIN SMALL LETTER D WITH STROKE \defineactivetoken 241 {\nacute} % 0144 LATIN SMALL LETTER N WITH ACUTE \defineactivetoken 242 {\ncaron} % 0148 LATIN SMALL LETTER N WITH CARON \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\ohungarumlaut} % 0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\rcaron} % 0159 LATIN SMALL LETTER R WITH CARON \defineactivetoken 249 {\uring} % 016F LATIN SMALL LETTER U WITH RING ABOVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\uhungarumlaut} % 0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\tcedilla} % 0163 LATIN SMALL LETTER T WITH CEDILLA \defineactivetoken 255 {\textdotaccent} % 02D9 DOT ABOVE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/x-mathml.xsd0000644000175000017500000000037610526734267024162 0ustar norbertnorbert context-2013.05.28.20130704/texmf-dist/tex/context/base/m-mkii.mkiv0000644000175000017500000000101211571377075023753 0ustar norbertnorbert% todo \unprotect \writestatus\m!system{loading some mkii compatibility hacks} % Compatibility for font-ini \let\normalxi=\xi \definebodyfontswitch [xii] [\!!twelvepoint] \definebodyfontswitch [xi] [\!!elevenpoint] \definebodyfontswitch [x] [\!!tenpoint] \definebodyfontswitch [ix] [\!!ninepoint] \definebodyfontswitch [viii] [\!!eightpoint] \definebodyfontswitch [vii] [\!!sevenpoint] \definebodyfontswitch [vi] [\!!sixpoint] \unexpanded\def\xi{\ifmmode\normalxi\else\elevenpoint\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-034.mkii0000644000175000017500000003173111754241457024025 0ustar norbertnorbert%D \module %D [ file=unic-034, %D version=2005.06.11, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 34, %D author=Nikolai Weibull, %D date=\currentdate, %D copyright={Nikolai Weibull \& Hans Hagen}] \unprotect \startunicodevector 34 \expandafter\strippedcsname \ifcase\numexpr#1\relax \forall \or % FOR ALL \complement \or % COMPLEMENT \partial \or % PARTIAL DIFFERENTIAL \exists \or % THERE EXISTS \nexists \or % THERE DOES NOT EXIST \emptyset \or % EMPTY SET \vartriangle \or % INCREMENT \nabla \or % NABLA \unic@in \or % ELEMENT OF \unic@nin \or % NOT AN ELEMENT OF \unknownchar \or % SMALL ELEMENT OF \ni \or % CONTAINS AS MEMBER \unic@nni \or % DOES NOT CONTAIN AS MEMBER \unknownchar \or % SMALL CONTAINS AS MEMBER \QED \or % END OF PROOF \prod \or % N-ARY PRODUCT \coprod \or % N-ARY COPRODUCT \sum \or % N-ARY SUMMATION \unic@minus \or % MINUS SIGN \mp \or % MINUS-OR-PLUS SIGN \dotplus \or % DOT PLUS \unic@divisionslash \or % DIVISION SLASH \setminus \or % SET MINUS \ast \or % ASTERISK OPERATOR \circ \or % RING OPERATOR \bullet \or % BULLET OPERATOR \unic@sqrt \or % SQUARE ROOT \unic@cubesqrt \or % CUBE ROOT \unic@fourthsqrt \or % FOURTH ROOT \propto \or % PROPORTIONAL TO \infty \or % INFINITY \unknownchar \or % RIGHT ANGLE \angle \or % ANGLE \measuredangle \or % MEASURED ANGLE \sphericalangle \or % SPHERICAL ANGLE \unic@divides \or % DIVIDES \unic@ndivides \or % DOES NOT DIVIDE \parallel \or % PARALLEL TO \nparallel \or % NOT PARALLEL TO \land \or % LOGICAL AND \lor \or % LOGICAL OR \unic@cap \or % INTERSECTION \cup \or % UNION \int \or % INTEGRAL \unic@dblint \or % DOUBLE INTEGRAL \unic@triint \or % TRIPLE INTEGRAL \oint \or % CONTOUR INTEGRAL \unknownchar \or % SURFACE INTEGRAL \unknownchar \or % VOLUME INTEGRAL \unknownchar \or % CLOCKWISE INTEGRAL \unknownchar \or % CLOCKWISE CONTOUR INTEGRAL \unknownchar \or % ANTICLOCKWISE CONTOUR INTEGRAL \therefore \or % THEREFORE \because \or % BECAUSE \unic@ratio \or % RATIO \unic@proportion \or % PROPORTION \unknownchar \or % DOT MINUS \unic@excess \or % EXCESS \unic@geompropr \or % GEOMETRIC PROPORTION \unic@homothetic \or % HOMOTHETIC \sim \or % TILDE OPERATOR \backsim \or % REVERSED TILDE \unknownchar \or % INVERTED LAZY S \unknownchar \or % SINE WAVE \wr \or % WREATH PRODUCT \nsim \or % NOT TILDE \eqsim \or % MINUS TILDE \simeq \or % ASYMPTOTICALLY EQUAL TO \nsimeq \or % NOT ASYMPTOTICALLY EQUAL TO \approxeq \or % APPROXIMATELY EQUAL TO \unic@cong \or % APPROXIMATELY BUT NOT ACTUALLY EQUAL TO \unic@napproxeq \or % NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO \approx \or % ALMOST EQUAL TO \unic@napprox \or % NOT ALMOST EQUAL TO \approxeq \or % ALMOST EQUAL OR EQUAL TO \unknownchar \or % TRIPLE TILDE \unknownchar \or % ALL EQUAL TO \asymp \or % EQUIVALENT TO \Bumpeq \or % GEOMETRICALLY EQUIVALENT TO \bumpeq \or % DIFFERENCE BETWEEN \unic@doteq \or % APPROACHES THE LIMIT \doteqdot \or % GEOMETRICALLY EQUAL TO \fallingdotseq \or % APPROXIMATELY EQUAL TO OR THE IMAGE OF \risingdotseq \or % IMAGE OF OR APPROXIMATELY EQUAL TO \unknownchar \or % COLON EQUALS \unknownchar \or % EQUALS COLON \eqcirc \or % RING IN EQUAL TO \circeq \or % RING EQUAL TO \unic@correspondsto \or % CORRESPONDS TO \unic@estimates \or % ESTIMATES \unic@equiangularto \or % EQUIANGULAR TO \unic@stareq \or % STAR EQUALS \unic@triangleq \or % DELTA EQUAL TO \unic@eqbydef \or % EQUAL TO BY DEFINITION \unic@measuredby \or % MEASURED BY \unic@questionedeq \or % QUESTIONED EQUAL TO \neq \or % NOT EQUAL TO \equiv \or % IDENTICAL TO \unic@nequiv \or % NOT IDENTICAL TO \unknownchar \or % STRICTLY EQUIVALENT TO \leq \or % LESS-THAN OR EQUAL TO \geq \or % GREATER-THAN OR EQUAL TO \leqq \or % LESS-THAN OVER EQUAL TO \geqq \or % GREATER-THAN OVER EQUAL TO \lneqq \or % LESS-THAN BUT NOT EQUAL TO \gneqq \or % GREATER-THAN BUT NOT EQUAL TO \ll \or % MUCH LESS-THAN \gg \or % MUCH GREATER-THAN \between \or % BETWEEN \nasymp \or % NOT EQUIVALENT TO \nless \or % NOT LESS-THAN \ngtr \or % NOT GREATER-THAN \nleq \or % NEITHER LESS-THAN NOR EQUAL TO \ngeq \or % NEITHER GREATER-THAN NOR EQUAL TO \lesssim \or % LESS-THAN OR EQUIVALENT TO \gtrsim \or % GREATER-THAN OR EQUIVALENT TO \unic@nlesssim \or % NEITHER LESS-THAN NOR EQUIVALENT TO \unic@ngtrsim \or % NEITHER GREATER-THAN NOR EQUIVALENT TO \lessgtr \or % LESS-THAN OR GREATER-THAN \gtrless \or % GREATER-THAN OR LESS-THAN \unic@nlessgtr \or % NEITHER LESS-THAN NOR GREATER-THAN \unic@ngtrless \or % NEITHER GREATER-THAN NOR LESS-THAN \prec \or % PRECEDES \succ \or % SUCCEEDS \preceq \or % PRECEDES OR EQUAL TO \succeq \or % SUCCEEDS OR EQUAL TO \precsim \or % PRECEDES OR EQUIVALENT TO \succsim \or % SUCCEEDS OR EQUIVALENT TO \nprec \or % DOES NOT PRECEDE \nsucc \or % DOES NOT SUCCEED \subset \or % SUBSET OF \supset \or % SUPERSET OF \unic@nsubset \or % NOT A SUBSET OF \unic@nsupset \or % NOT A SUPERSET OF \subseteq \or % SUBSET OF OR EQUAL TO \supseteq \or % SUPERSET OF OR EQUAL TO \nsubseteq \or % NEITHER A SUBSET OF NOR EQUAL TO \nsupseteq \or % NEITHER A SUPERSET OF NOR EQUAL TO \subsetneq \or % SUBSET OF WITH NOT EQUAL TO \supsetneq \or % SUPERSET OF WITH NOT EQUAL TO \unknownchar \or % MULTISET \unknownchar \or % MULTISET MULTIPLICATION \biguplus \or % MULTISET UNION \sqsubset \or % SQUARE IMAGE OF \sqsupset \or % SQUARE ORIGINAL OF \sqsubseteq \or % SQUARE IMAGE OF OR EQUAL TO \sqsupseteq \or % SQUARE ORIGINAL OF OR EQUAL TO \sqcap \or % SQUARE CAP \sqcup \or % SQUARE CUP \oplus \or % CIRCLED PLUS \ominus \or % CIRCLED MINUS \otimes \or % CIRCLED TIMES \oslash \or % CIRCLED DIVISION SLASH \odot \or % CIRCLED DOT OPERATOR \circledcirc \or % CIRCLED RING OPERATOR \circledast \or % CIRCLED ASTERISK OPERATOR \unknownchar \or % CIRCLED EQUALS \circleddash \or % CIRCLED DASH \boxplus \or % SQUARED PLUS \boxminus \or % SQUARED MINUS \boxtimes \or % SQUARED TIMES \boxdot \or % SQUARED DOT OPERATOR \vdash \or % RIGHT TACK \dashv \or % LEFT TACK \top \or % DOWN TACK \bot \or % UP TACK \unknownchar \or % ASSERTION \models \or % MODELS \vDash \or % TRUE \unknownchar \or % FORCES \Vvdash \or % TRIPLE VERTICAL BAR RIGHT TURNSTILE \unknownchar \or % DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE \nvdash \or % DOES NOT PROVE \nvDash \or % NOT TRUE \unknownchar \or % DOES NOT FORCE \unknownchar \or % NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE \unknownchar \or % PRECEDES UNDER RELATION \unknownchar \or % SUCCEEDS UNDER RELATION \lhd \or % NORMAL SUBGROUP OF \rhd \or % CONTAINS AS NORMAL SUBGROUP \unlhd \or % NORMAL SUBGROUP OF OR EQUAL TO \unrhd \or % CONTAINS AS NORMAL SUBGROUP OR EQUAL TO \unknownchar \or % ORIGINAL OF \unknownchar \or % IMAGE OF \unknownchar \or % MULTIMAP \unknownchar \or % HERMITIAN CONJUGATE MATRIX \unknownchar \or % INTERCALATE \veebar \or % XOR \barwedge \or % NAND \unknownchar \or % NOR \unknownchar \or % RIGHT ANGLE WITH ARC \unknownchar \or % RIGHT TRIANGLE \bigwedge \or % N-ARY LOGICAL AND \bigvee \or % N-ARY LOGICAL OR \bigcap \or % N-ARY INTERSECTION \bigcup \or % N-ARY UNION \diamond \or % DIAMOND OPERATOR \cdot \or % DOT OPERATOR \star \or % STAR OPERATOR \divideontimes \or % DIVISION TIMES \bowtie \or % BOWTIE \ltimes \or % LEFT NORMAL FACTOR SEMIDIRECT PRODUCT \rtimes \or % RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT \leftthreetimes \or % LEFT SEMIDIRECT PRODUCT \rightthreetimes \or % RIGHT SEMIDIRECT PRODUCT \backsimeq \or % REVERSED TILDE EQUALS \unknownchar \or % CURLY LOGICAL OR \unknownchar \or % CURLY LOGICAL AND \Subset \or % DOUBLE SUBSET \Supset \or % DOUBLE SUPERSET \Cap \or % DOUBLE INTERSECTION \Cup \or % DOUBLE UNION \pitchfork \or % PITCHFORK \unknownchar \or % EQUAL AND PARALLEL TO \unknownchar \or % LESS-THAN WITH DOT \unknownchar \or % GREATER-THAN WITH DOT \lll \or % VERY MUCH LESS-THAN \ggg \or % VERY MUCH GREATER-THAN \lesseqgtr \or % LESS-THAN EQUAL TO OR GREATER-THAN \gtreqless \or % GREATER-THAN EQUAL TO OR LESS-THAN \unknownchar \or % EQUAL TO OR LESS-THAN \unknownchar \or % EQUAL TO OR GREATER-THAN \curlyeqprec \or % EQUAL TO OR PRECEDES \curlyeqsucc \or % EQUAL TO OR SUCCEEDS \npreceq \or % DOES NOT PRECEDE OR EQUAL \nsucceq \or % DOES NOT SUCCEED OR EQUAL \unic@nsqsubseteq \or % NOT SQUARE IMAGE OF OR EQUAL TO \unic@nsqsupseteq \or % NOT SQUARE ORIGINAL OF OR EQUAL TO \unknownchar \or % SQUARE IMAGE OF OR NOT EQUAL TO \unknownchar \or % SQUARE ORIGINAL OF OR NOT EQUAL TO \lnsim \or % LESS-THAN BUT NOT EQUIVALENT TO \gnsim \or % GREATER-THAN BUT NOT EQUIVALENT TO \precnsim \or % PRECEDES BUT NOT EQUIVALENT TO \succnsim \or % SUCCEEDS BUT NOT EQUIVALENT TO \ntriangleleft \or % NOT NORMAL SUBGROUP OF \ntriangleright \or % DOES NOT CONTAIN AS NORMAL SUBGROUP \ntrianglelefteq \or % NOT NORMAL SUBGROUP OF OR EQUAL TO \ntrianglerighteq \or % DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL \vdots \or % VERTICAL ELLIPSIS \cdots \or % MIDLINE HORIZONTAL ELLIPSIS \unknownchar \or % UP RIGHT DIAGONAL ELLIPSIS \ddots \or % DOWN RIGHT DIAGONAL ELLIPSIS \unknownchar \or % ELEMENT OF WITH LONG HORIZONTAL STROKE \unknownchar \or % ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE \unknownchar \or % SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE \unknownchar \or % ELEMENT OF WITH DOT ABOVE \unknownchar \or % ELEMENT OF WITH OVERBAR \unknownchar \or % SMALL ELEMENT OF WITH OVERBAR \unknownchar \or % ELEMENT OF WITH UNDERBAR \unknownchar \or % ELEMENT OF WITH TWO HORIZONTAL STROKES \unknownchar \or % CONTAINS WITH LONG HORIZONTAL STROKE \unknownchar \or % CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE \unknownchar \or % SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE \unknownchar \or % CONTAINS WITH OVERBAR \unknownchar \else % SMALL CONTAINS WITH OVERBAR \unknownchar % Z NOTATION BAG MEMBERSHIP \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-ec.mkii0000644000175000017500000003145011754241457024072 0ustar norbertnorbert%D \module %D [ file=enco-ec, %D version=2000.05.07, % 1999.16.07, %D title=\CONTEXT\ Encoding Macros, %D subtitle=\LATEX\ EC Encoding, %D author={Patrick Gundlach, Hans Hagen, Taco Hoekwater, Mojca Miklavec}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is \LATEX2e's T1 encoding vector. All standard \LATEX\ %D accents will work, including \type{\k}. The only accent that %D does not work is \type{\t} (there is no tie in T1 encoding). %D %D Annoyingly, most \POSTSCRIPT\ fonts do not have \type %D {\dotlessj}, and T1 encoding does not make the various %D prebuilts with \type {j} available. When this is the case: %D %D \starttyping %D \startencoding[ec] %D \definecharacter dotlessj {j} %D \stopencoding %D \stoptyping %D %D is a way out. %D There is hardly a point in supporting TS1 encoding. \startmapping[ec] % a problem is that the uppercase of dstroke (158) and eth (240) % is the same glyph (208) so we cannot do lowercase mapping there \definecasemaps 128 to 156 lc +32 uc 0 \definecasemap 157 `i 157 % Idotaccent i \definecasemap 158 158 208 % dstroke Eth \definecasemap 159 159 159 % sectionmark \definecasemaps 160 to 187 lc 0 uc -32 \resetcaserange 189 to 191 % exclamdown, questiondown, textsterling \definecasemaps 192 to 223 lc +32 uc 0 \definecasemaps 224 to 254 lc 0 uc -32 \definecaseswap 255 223 % ssharp (else patterns fail) \definecaseswap 25 `I % dotless i % 156 vs. 188 IJligature %D Some languages need this: % \definecaseself 34 % quotedbl % \definecaseself 18 % quotedblbase % \definecaseself 16 % quotedblleft % \definecaseself 17 % quotedblright % \definecaseself 39 % quotesingle % \definecaseself 13 % quotesinglebase % \definecaseself 96 % quoteleft \definecaseself 39 % quoteright %D So far for the mapping. %D The following characters are kind of dangerous, %D that is, they are normally not part of fonts, unless %D explicitly constructed. %D %D \startitemize[columns,two] %D \item \type{\dotlessj} - but then it may not be defined!!!! %D \item \type{\IJligature} %D \item \type{\ijligature} %D \item \type{\Ssharp} %D \item \type{\perthousand} %D \item \type{\compoundwordmark} % \item \type{\textvisiblespace} %D \stopitemize %D So, for the moment we nil them; we can always create %D another vector if needed. \stopmapping \startencoding[ec][ec] % second arg defines auto regime, needed here ? \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter quotesinglebase 13 \definecharacter guilsingleleft 14 \definecharacter guilsingleright 15 \definecharacter quotedblleft 16 \definecharacter quotedblright 17 \definecharacter quotedblbase 18 \definecharacter leftguillemot 19 \definecharacter rightguillemot 20 \definecharacter endash 21 \definecharacter emdash 22 %definecharacter compoundwordmark 23 %definecharacter perthousand 24 \definecharacter dotlessi 25 % or when missing: {j} \definecharacter dotlessj 26 % ff 27 % fi 28 % fl 29 % ffi 30 % ffl 31 %definecharacter textvisiblespace 32 % exclam ! 33 \definecharacter quotedbl 34 % numbersign # 35 % dollar $ 36 \definecharacter percent 37 % ampersand & 38 %definecharacter quotesingle 39 % fake 'm TODO:enco-def!!!! \definecharacter quoteright 39 % parenleft ( 40 % parenright ) 41 % asterisk * 42 % plus + 43 % comma , 44 \definecharacter softhyphen 45 % period . 46 % slash / 47 % 0-9 48-57 % colon : 58 % semicolon ; 59 % less < 60 % equal = 61 % greater > 62 % question ? 63 % at @ 64 % A-Z 65-90 % bracketleft [ 91 \definecharacter textbackslash 92 % bracketright ] 93 \definecharacter textasciicircum 94 \definecharacter textunderscore 95 \definecharacter quoteleft 96 % a-z 97-122 \definecharacter textbraceleft 123 \definecharacter textbraceright 125 \definecharacter textasciitilde 126 %definecharacter softhyphen 127 % -> 45 (127 often undefined) \definecharacter Abreve 128 % abreve 160 \definecharacter Aogonek 129 % aogonek 161 \definecharacter Cacute 130 % cacute 162 \definecharacter Ccaron 131 % ccaron 163 \definecharacter Dcaron 132 % dcaron 164 \definecharacter Ecaron 133 % ecaron 165 \definecharacter Eogonek 134 % eogonek 166 \definecharacter Gbreve 135 % gbreve 167 \definecharacter Lacute 136 % lacute 168 \definecharacter Lcaron 137 % lcaron 169 \definecharacter Lstroke 138 % lstroke 170 \definecharacter Nacute 139 % nacute 171 \definecharacter Ncaron 140 % ncaron 172 \definecharacter Eng 141 % eng 173 \definecharacter Neng 141 % Neng 173 \definecharacter Ohungarumlaut 142 % ohungarumlaut 174 \definecharacter Racute 143 % racute 175 \definecharacter Rcaron 144 % rcaron 176 \definecharacter Sacute 145 % sacute 177 \definecharacter Scaron 146 % scaron 178 \definecharacter Scedilla 147 % scedilla 179 \definecharacter Tcaron 148 % tcaron 180 \definecharacter Tcedilla 149 % tcedilla 181 \definecharacter Uhungarumlaut 150 % uhungarumlaut 182 \definecharacter Uring 151 % uring 183 \definecharacter Ydiaeresis 152 % ydiaeresis 184 \definecharacter Zacute 153 % zacute 185 \definecharacter Zcaron 154 % zcaron 186 \definecharacter Zdotaccent 155 % zdotaccent 187 \definecharacter IJligature 156 % ijligature 188 \definecharacter Idotaccent 157 \definecharacter dstroke 158 % Dstroke 208 \definecharacter sectionmark 159 \definecharacter abreve 160 % Abreve 128 \definecharacter aogonek 161 % Aogonek 129 \definecharacter cacute 162 % Cacute 130 \definecharacter ccaron 163 % Ccaron 131 \definecharacter dcaron 164 % Dcaron 132 \definecharacter ecaron 165 % Ecaron 133 \definecharacter eogonek 166 % Eogonek 134 \definecharacter gbreve 167 % Gbreve 135 \definecharacter lacute 168 % Lacute 136 \definecharacter lcaron 169 % Lcaron 137 \definecharacter lstroke 170 % Lstroke 138 \definecharacter nacute 171 % Nacute 139 \definecharacter ncaron 172 % Ncaron 140 \definecharacter eng 173 % Eng 141 \definecharacter ohungarumlaut 174 % Ohungarumlaut 142 \definecharacter racute 175 % Racute 143 \definecharacter rcaron 176 % Rcaron 144 \definecharacter sacute 177 % Sacute 145 \definecharacter scaron 178 % Scaron 146 \definecharacter scedilla 179 % Scedilla 147 \definecharacter tcaron 180 % Tcaron 148 \definecharacter tcedilla 181 % Tcedilla 149 \definecharacter uhungarumlaut 182 % Uhungarumlaut 150 \definecharacter uring 183 % Uring 151 \definecharacter ydiaeresis 184 % Ydiaeresis 152 \definecharacter zacute 185 % Zacute 153 \definecharacter zcaron 186 % Zcaron 154 \definecharacter zdotaccent 187 % Zdotaccent 155 \definecharacter ijligature 188 % IJligature 156 \definecharacter exclamdown 189 \definecharacter questiondown 190 \definecharacter textsterling 191 \definecharacter Agrave 192 % agrave 224 \definecharacter Aacute 193 % aacute 225 \definecharacter Acircumflex 194 % acircumflex 226 \definecharacter Atilde 195 % atilde 227 \definecharacter Adiaeresis 196 % adiaeresis 228 \definecharacter Aring 197 % aring 229 \definecharacter AEligature 198 % aeligature 230 \definecharacter Ccedilla 199 % ccedilla 231 \definecharacter Egrave 200 % egrave 232 \definecharacter Eacute 201 % eacute 233 \definecharacter Ecircumflex 202 % ecircumflex 234 \definecharacter Ediaeresis 203 % ediaeresis 235 \definecharacter Igrave 204 % igrave 236 \definecharacter Iacute 205 % iacute 237 \definecharacter Icircumflex 206 % icircumflex 238 \definecharacter Idiaeresis 207 % idiaeresis 239 \definecharacter Eth 208 % eth 240 \definecharacter Dstroke 208 % dstroke 158 \definecharacter Ntilde 209 % ntilde 241 \definecharacter Ograve 210 % ograve 242 \definecharacter Oacute 211 % oacute 243 \definecharacter Ocircumflex 212 % ocircumflex 244 \definecharacter Otilde 213 % otilde 245 \definecharacter Odiaeresis 214 % odiaeresis 246 \definecharacter OEligature 215 % oeligature 247 \definecharacter Ostroke 216 % ostroke 248 \definecharacter Ugrave 217 % ugrave 249 \definecharacter Uacute 218 % uacute 250 \definecharacter Ucircumflex 219 % ucircumflex 251 \definecharacter Udiaeresis 220 % udiaeresis 252 \definecharacter Yacute 221 % yacute 253 \definecharacter Thorn 222 % thorn 254 \definecharacter Ssharp 223 % ssharp 255 \definecharacter agrave 224 % Agrave 192 \definecharacter aacute 225 % Aacute 193 \definecharacter acircumflex 226 % Acircumflex 194 \definecharacter atilde 227 % Atilde 195 \definecharacter adiaeresis 228 % Adiaeresis 196 \definecharacter aring 229 % Aring 197 \definecharacter aeligature 230 % AEligature 198 \definecharacter ccedilla 231 % Ccedilla 199 \definecharacter egrave 232 % Egrave 200 \definecharacter eacute 233 % Eacute 201 \definecharacter ecircumflex 234 % Ecircumflex 202 \definecharacter ediaeresis 235 % Ediaeresis 203 \definecharacter igrave 236 % Igrave 204 \definecharacter iacute 237 % Iacute 205 \definecharacter icircumflex 238 % Icircumflex 206 \definecharacter idiaeresis 239 % Idiaeresis 207 \definecharacter eth 240 % Eth 208 \definecharacter ntilde 241 % Ntilde 209 \definecharacter ograve 242 % Ograve 210 \definecharacter oacute 243 % Oacute 211 \definecharacter ocircumflex 244 % Ocircumflex 212 \definecharacter otilde 245 % Otilde 213 \definecharacter odiaeresis 246 % Odiaeresis 214 \definecharacter oeligature 247 % OEligature 215 \definecharacter ostroke 248 % Ostroke 216 \definecharacter ugrave 249 % Ugrave 217 \definecharacter uacute 250 % Uacute 218 \definecharacter ucircumflex 251 % Ucircumflex 219 \definecharacter udiaeresis 252 % Udiaeresis 220 \definecharacter yacute 253 % Yacute 221 \definecharacter thorn 254 % Thorn 222 \definecharacter ssharp 255 % Ssharp 223 \stopencoding \startencoding[ec] \definecharacter Scommaaccent {\Scedilla} \definecharacter scommaaccent {\scedilla} \definecharacter Tcommaaccent {\Tcedilla} \definecharacter tcommaaccent {\tcedilla} \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-jap-00.mkii0000644000175000017500000000110111754241457023776 0ustar norbertnorbert%D \module %D [ file=s-jap-00, %D version=2006.01.19, %D title=\CONTEXT\ Style File, %D subtitle=Basic Japanese Style, %D author=Hans Hagen, %D date=\currentdate, %D suggestions=Richard Gabriel, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \input font-jap.tex % faster than \setupbodyfont[jap] \mainlanguage [ja] \unprotect \setuptyping[\c!tab=\v!no] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mak.mkii0000644000175000017500000001342411754241457024244 0ustar norbertnorbert%D \module %D [ file=page-mak, % copied from main-001, %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Simple MakeUp, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / MakeUp} \unprotect %D \macros %D {definemakeup, setupmakeup, startmakeup} %D %D A makeup is a separate page, like a title page or colofon. %D There is one standard makeup page, but you can define more %D if needed. %D %D \starttyping %D \startstandardmakeup %D My Fancy Title %D \stopstandardmakeup %D \stoptyping %D %D The associated commands are: %D %D \showsetup{definemakeup} %D \showsetup{setupmakeup} %D \showsetup{startmakeup} \def\definemakeup {\dodoubleargument\dodefinemakeup} \def\dodefinemakeup[#1][#2]% {\getparameters [\??do#1]% [\c!width=\innermakeupwidth, % example in manual / was \makeupwidth \c!height=\textheight, % example in manual \c!commands=, \c!setups=, \c!page=\v!right, \c!doublesided=\v!empty, \c!before=, \c!top=\vss, \c!bottom=\vss, \c!after=, \c!bottomstate=\v!normal, \c!topstate=\v!normal, \c!textstate=\v!normal, \c!headerstate=\v!stop, \c!footerstate=\v!stop, \c!pagestate=\v!stop, % in manual ! ! ! \c!color=, \c!align=, #2]% \setvalue{\e!start#1\e!makeup}{\startmakeup[#1]}% \setvalue{\e!stop #1\e!makeup}{\stopmakeup}} \def\setupmakeup {\dodoubleargument\dosetupmakeup} \def\dosetupmakeup[#1]% {\getparameters[\??do#1]} %D This will save us some 375 bytes in the format file. \def\makeupparameter#1{\getvalue{\??do\currentmakeup#1}} %D The \type{\start}||\type{\stop} macros are used for both %D the direct and indirect way. The parameterless call will %D build a simple box. \newtoks\everymakeup \appendtoks \postponemarks \to \everymakeup \let\currentmakeup\empty \def\startmakeup {\dodoubleempty\dostartmakeup} \def\dostartmakeup[#1][#2]% {\bgroup \edef\currentmakeup{#1}% \the\everymakeup \iffirstargument \setupmakeup[\currentmakeup][#2]% \let\stopmakeup\dodostopmakeup \expandafter \dodostartmakeup \else \let\stopmakeup\donostopmakeup \expandafter \donostartmakeup \fi} %D The simple case: \def\donostartmakeup % textwidth ? {\page \setupheader[\c!state=\v!empty]% \setupfooter[\c!state=\v!empty]% \setsystemmode\v!makeup \vbox to \textheight\bgroup\hsize\textwidth} \def\donostopmakeup {\egroup \flushmarks % new, here, else empty pages \page \egroup} %D The normal one: \newbox\makeupbox \def\dodostartmakeup {\doifvaluesomething{\??do\currentmakeup\c!page} {\ExpandFirstAfter\page[\makeupparameter\c!page]}% \pagetype[\currentmakeup]% \setsystemmode\v!makeup \setupmakeuplayout \makeupparameter\c!commands % hm, what is this one doing here ? \startregistercolor[\makeupparameter\c!color]% \forgetall % else indented flush \global\setbox\makeupbox\vbox to \makeupparameter\c!height \bgroup % \forgetall \setups[\makeupparameter\c!setups]% \hsize\makeupparameter\c!width \doifsomething{\makeupparameter\c!align} {\setupalign[\makeupparameter\c!align]}% \makeupparameter\c!top} \def\dodostopmakeup {\endgraf \makeupparameter\c!bottom \egroup \flushmarks % new, here, else empty pages \stopregistercolor \doflushmakeup \egroup \calculatehsizes \calculatevsizes} %D Selective page processing is handled here. (Why?) \def\doflushmakeup {\ifprocessingpages \ifpageselected \doshipoutmakeup \fi \else \ifpageselected \else \doshipoutmakeup \fi \fi \ifselectingpages \global\pageselectedfalse \fi} % \def\pushpagestate{\globalpushmacro\@@pnstate} % \def\poppagestate {\globalpopmacro \@@pnstate} \def\doshipoutmakeup {\pushpagestate % new \makeupparameter\c!before \setbox\makeupbox\vbox{\hbox{\color[\makeupparameter\c!color]{\box\makeupbox}}}% % \ifgridsnapping % new per 22/6/2006 \ifdim\ht\makeupbox>\vsize \ht\makeupbox\vsize \fi % \fi \box\makeupbox \setuppagenumber[\c!state=\makeupparameter\c!pagestate]% \setupmakeuplayout \page \makeupparameter\c!after \relax % voor fi \ifdoublesided \ifodd\realpageno\else \processaction [\makeupparameter\c!doublesided] [ \v!yes=>\null \page, \v!empty=>{\setupmakeuplayout \page[\v!blank]% \null \page}]% \fi \fi \poppagestate} % new %D The text surrounding the main body text can be influenced %D by setting their associated status variables. The %D connection between them is made by the following macro \def\setupmakeuplayout {\setupfooter[\c!state=\makeupparameter\c!footerstate]% \setupheader[\c!state=\makeupparameter\c!headerstate]% \setuptext [\c!state=\makeupparameter\c!textstate]% \setupbottom[\c!state=\makeupparameter\c!bottomstate]% \setuptop [\c!state=\makeupparameter\c!topstate]% % this is needed, but no \setuplayout here; fails in texexec --fig=c \recalculatelayout} %D The standard page template is defined as follows: \definemakeup [\v!standard] [\c!width=\innermakeupwidth, \c!height=\textheight, \c!page=\v!right, \c!doublesided=\v!empty] \definemakeup [\v!text] [\c!topstate=\v!start, \c!headerstate=\v!start, \c!textstate=\v!start, \c!footerstate=\v!start, \c!bottomstate=\v!start, \c!doublesided=\v!no, \c!page=\v!yes, \c!top=\pseudostrut\ignorespaces, \c!bottom=\obeydepth\vss] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context.mkiv0000644000175000017500000002743012161703335024254 0ustar norbertnorbert%D \module %D [ file=context, %D version=2008.28.10, % 1995.10.10, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 %D From the next string (which is set by the script that assembles the %D distribution) later on we will calculate a number that can be used %D by use modules to identify the feature level. Starting with version %D 2004.8.30 the low level interface is english. Watch out and adapt %D your styles an modules. % \everypar{\writestatus{!!!!}{some spurious input in line \the\inputlineno}\wait} %D The order of loading will change when all modules have been cleaned %D up and the dependencies are more consistent. \edef\contextformat {\jobname} \edef\contextversion{2013.05.28 00:36} \edef\contextkind {current} %D For those who want to use this: \let\fmtname \contextformat \let\fmtversion\contextversion %D Loading: \edef\mksuffix {mkiv} \edef\contextmark{MKIV} \ifx\normalinput\undefined \let\normalinput\input \fi \def\loadcorefile#1{\normalinput#1\relax} \def\loadmarkfile#1{\normalinput#1.\mksuffix\relax} \def\loadmkiifile#1{} \def\loadmkivfile#1{\normalinput#1.mkiv\relax} \def\loadmkvifile#1{\normalinput#1.mkvi\relax} %D First we load the system modules. These implement a lot of %D manipulation macros. We start with setting up some basic \TEX\ %D machinery. \loadmarkfile{syst-ini} %D Some checking (more primitives are now defined): \ifdefined\defaultinterface \else \def\defaultinterface {english} \fi %ifdefined\messageinterface \else \let\messageinterface \defaultinterface \fi \ifdefined\defaultlanguagetag \else \def\defaultlanguagetag{en} \fi %D We just quit if new functionality is expected. \ifnum\luatexversion<70 % also change message \writestatus{!!!!}{Your luatex binary is too old, you need at least version 0.70!} \expandafter\end \fi %D There is only this way to pass the version info to \LUA\ (currently). Hm, we could %D now put it into the environment. \newtoks\contextversiontoks \contextversiontoks\expandafter{\contextversion} \newtoks\contextkindtoks \contextkindtoks \expandafter{\contextkind} % \normaleverypar{\wait} % uncomment for test of funny injections %D Now the more fundamental code gets defined. \loadmarkfile{norm-ctx} \loadmarkfile{syst-pln} \loadmarkfile{syst-mes} \loadmarkfile{luat-cod} \loadmarkfile{luat-bas} \loadmarkfile{luat-lib} \loadmarkfile{catc-ini} \loadmarkfile{catc-act} \loadmarkfile{catc-def} \loadmarkfile{catc-ctx} \loadmarkfile{catc-sym} \loadmarkfile{cldf-ini} % From here on we have \unexpanded being \normalprotected, as we already had % \unexpanded long before etex came around. \loadmarkfile{syst-aux} \loadmarkfile{syst-lua} \loadmarkfile{syst-con} \loadmarkfile{syst-fnt} \loadmarkfile{syst-rtp} \loadmkvifile{file-ini} \loadmkvifile{file-res} \loadmkvifile{file-lib} \loadmarkfile{supp-dir} \loadmarkfile{char-ini} \loadmarkfile{char-utf} \loadmarkfile{char-act} \loadmarkfile{mult-ini} \loadmarkfile{mult-sys} \loadmarkfile{mult-aux} \loadmarkfile{mult-def} \loadmarkfile{mult-chk} %loadmarkfile{mult-aux} % moved up \loadmkvifile{mult-dim} \loadmarkfile{cldf-int} % interface \loadmarkfile{luat-ini} \loadmarkfile{toks-ini} \loadmarkfile{attr-ini} \loadmarkfile{core-ini} \loadmarkfile{core-env} \loadmarkfile{layo-ini} \loadmarkfile{node-ini} \loadmarkfile{cldf-bas} % basics / depends on nodes \loadmarkfile{node-fin} \loadmarkfile{node-mig} \loadmarkfile{typo-bld} % par builders %loadmarkfile{node-pag} \loadmarkfile{back-ini} \loadmarkfile{attr-col} \loadmarkfile{attr-lay} \loadmarkfile{attr-neg} \loadmarkfile{attr-eff} \loadmarkfile{attr-mkr} \loadmarkfile{trac-tex} \loadmarkfile{trac-deb} % will move up \loadmarkfile{trac-ctx} % maybe move up %loadmarkfile{blob-ini} % not to be used, we only use a helper \loadmarkfile{supp-box} %loadmarkfile{supp-vis} % replaced by trac-vis %loadmarkfile{supp-fun} % mostly replaced \loadmarkfile{supp-ran} \loadmarkfile{supp-mat} \loadmarkfile{spac-cha} %loadmarkfile{supp-num} % obsolete \loadmarkfile{typo-ini} \loadmkvifile{file-syn} \loadmkvifile{file-mod} \loadmarkfile{core-con} \loadmarkfile{cont-fil} \loadmarkfile{regi-ini} \loadmarkfile{enco-ini} \loadmarkfile{hand-ini} \loadmarkfile{lang-ini} \loadmarkfile{lang-lab} \loadmarkfile{unic-ini} \loadmarkfile{core-uti} \loadmarkfile{core-two} \loadmarkfile{core-dat} \loadmarkfile{colo-ini} \loadmarkfile{colo-grp} % optional \loadmarkfile{colo-ext} \loadmarkfile{node-bck} % overloads anch-pgr (experimental and undocumented) \loadmarkfile{pack-cut} % leftovers from trac-vis \loadmarkfile{lang-mis} \loadmarkfile{lang-url} \loadmarkfile{lang-def} \loadmkvifile{file-job} % why so late? \loadmarkfile{symb-ini} % brrr depends on fonts \loadmarkfile{sort-ini} \loadmkvifile{pack-mis} \loadmarkfile{pack-rul} \loadmarkfile{pack-mrl} \loadmkvifile{pack-bck} \loadmarkfile{pack-fen} \loadmarkfile{lxml-ini} \loadmarkfile{lxml-sor} \loadmkvifile{typo-prc} \loadmkvifile{strc-ini} \loadmarkfile{strc-tag} \loadmarkfile{strc-doc} \loadmarkfile{strc-num} \loadmarkfile{strc-mar} \loadmarkfile{strc-sbe} \loadmkvifile{strc-lst} \loadmarkfile{strc-sec} \loadmarkfile{strc-pag} % hm, depends on core-num \loadmarkfile{strc-ren} \loadmarkfile{strc-xml} \loadmarkfile{strc-def} % might happen later \loadmkvifile{strc-ref} \loadmarkfile{strc-reg} \loadmkvifile{strc-lev} % experiment \loadmarkfile{spac-ali} \loadmarkfile{spac-hor} \loadmarkfile{spac-flr} \loadmarkfile{spac-ver} \loadmarkfile{spac-lin} \loadmarkfile{spac-pag} \loadmarkfile{spac-par} %loadmarkfile{spac-adj} % no longer needed \loadmarkfile{spac-def} \loadmarkfile{spac-grd} \loadmarkfile{anch-pos} \loadmkvifile{scrn-ini} \loadmkvifile{scrn-ref} \loadmarkfile{pack-obj} \loadmkvifile{strc-itm} \loadmkvifile{strc-con} \loadmkvifile{strc-des} \loadmkvifile{strc-enu} \loadmarkfile{strc-ind} \loadmarkfile{strc-lab} \loadmarkfile{strc-syn} \loadmarkfile{core-sys} \loadmarkfile{page-var} \loadmkvifile{page-otr} \loadmarkfile{page-ini} \loadmarkfile{page-ins} \loadmarkfile{page-fac} \loadmarkfile{page-brk} \loadmarkfile{page-col} \loadmarkfile{page-inf} \loadmarkfile{page-grd} \loadmarkfile{page-flt} \loadmarkfile{page-bck} \loadmarkfile{page-not} \loadmarkfile{page-one} \loadmarkfile{page-lay} \loadmkvifile{page-box} \loadmkvifile{page-txt} \loadmarkfile{page-sid} % when \loadmkvifile{strc-flt} \loadmarkfile{page-pst} \loadmkvifile{page-mbk} \loadmarkfile{page-mul} % partly overloaded \loadmarkfile{page-mix} % new \loadmarkfile{page-set} \loadmarkfile{pack-lyr} \loadmarkfile{pack-pos} \loadmkvifile{page-mak} \loadmarkfile{page-lin} \loadmarkfile{page-par} \loadmarkfile{typo-pag} \loadmarkfile{typo-mar} \loadmarkfile{typo-itm} \loadmarkfile{buff-ini} \loadmarkfile{buff-ver} \loadmkvifile{buff-par} \loadmarkfile{buff-imp-tex} % optional as also runtime if not loaded \loadmarkfile{buff-imp-mp} % optional as also runtime if not loaded \loadmarkfile{buff-imp-lua} % optional as also runtime if not loaded \loadmarkfile{buff-imp-xml} % optional as also runtime if not loaded \loadmarkfile{buff-imp-parsed-xml} % optional %loadmarkfile{buff-imp-parsed-lua} % optional \loadmarkfile{strc-blk} \loadmarkfile{page-imp} \loadmkvifile{page-sel} % optional \loadmkvifile{page-inj} % optional \loadmkvifile{scrn-pag} \loadmkvifile{scrn-wid} \loadmkvifile{scrn-but} \loadmkvifile{scrn-bar} \loadmarkfile{page-com} % optional (after scrn-pag) \loadmarkfile{strc-bkm} % bookmarks \loadmarkfile{tabl-com} \loadmarkfile{tabl-pln} \loadmarkfile{tabl-tab} % thrd-tab stripped and merged \loadmarkfile{tabl-tbl} \loadmarkfile{tabl-ntb} \loadmarkfile{tabl-nte} \loadmarkfile{tabl-ltb} \loadmarkfile{tabl-tsp} \loadmkvifile{tabl-xtb} \loadmarkfile{tabl-mis} \loadmarkfile{java-ini} \loadmkvifile{scrn-fld} \loadmkvifile{scrn-hlp} \loadmarkfile{char-enc} % will move up \loadmkvifile{font-lib} % way too late \loadmkvifile{font-fil} \loadmkvifile{font-var} \loadmkvifile{font-fea} \loadmkvifile{font-mat} \loadmkvifile{font-ini} \loadmkvifile{font-sym} \loadmkvifile{font-sty} \loadmkvifile{font-set} \loadmkvifile{font-emp} \loadmarkfile{font-pre} \loadmarkfile{font-unk} \loadmarkfile{font-tra} \loadmarkfile{font-chk} \loadmarkfile{font-uni} \loadmkvifile{font-col} \loadmkvifile{font-gds} \loadmkvifile{font-aux} \loadmarkfile{typo-lan} \loadmarkfile{lxml-css} \loadmarkfile{spac-chr} % depends on fonts \loadmarkfile{blob-ini} % not to be used, we only use a helper \loadmarkfile{trac-vis} \loadmarkfile{trac-jus} \loadmarkfile{typo-cln} \loadmarkfile{typo-spa} \loadmarkfile{typo-krn} \loadmkvifile{typo-itc} \loadmarkfile{typo-dir} \loadmarkfile{typo-brk} \loadmarkfile{typo-cap} \loadmarkfile{typo-dig} \loadmarkfile{typo-rep} \loadmkvifile{typo-txt} \loadmarkfile{typo-par} \loadmkvifile{type-ini} \loadmarkfile{type-set} \loadmarkfile{scrp-ini} \loadmarkfile{lang-wrd} % can be optional (discussion with mm sideeffect) %loadmarkfile{lang-rep} % can be optional (bt 2013 side effect) \loadmarkfile{prop-ini} % only for downward compatibility \loadmarkfile{mlib-ctx} \loadmarkfile{meta-ini} \loadmarkfile{meta-tex} \loadmarkfile{meta-fun} \loadmarkfile{meta-pag} \loadmarkfile{meta-grd} \loadmarkfile{page-mrk} % depends on mp \loadmarkfile{page-flw} \loadmarkfile{page-spr} \loadmarkfile{page-plg} \loadmarkfile{page-str} \loadmarkfile{anch-pgr} % can be moved up (nicer for dependencies) \loadmkvifile{anch-bck} \loadmarkfile{anch-tab} % overloads tabl-tbl \loadmarkfile{anch-bar} %loadmarkfile{anch-snc} % when needed this one will be redone \loadmarkfile{math-ini} \loadmarkfile{math-pln} \loadmarkfile{math-for} \loadmarkfile{math-def} \loadmarkfile{math-ali} %loadmarkfile{math-arr} \loadmkvifile{math-stc} \loadmarkfile{math-frc} \loadmarkfile{math-mis} \loadmarkfile{math-scr} \loadmarkfile{math-int} \loadmarkfile{math-del} \loadmarkfile{math-fen} \loadmarkfile{math-inl} \loadmarkfile{math-dis} %loadmarkfile{math-lan} \loadmarkfile{phys-dim} \loadmarkfile{strc-mat} \loadmarkfile{chem-ini} \loadmarkfile{chem-str} \loadmarkfile{typo-scr} \loadmarkfile{node-rul} \loadmkvifile{font-sol} % font solutions \loadmkvifile{strc-not} \loadmkvifile{strc-lnt} \loadmarkfile{pack-com} \loadmarkfile{typo-del} \loadmarkfile{grph-trf} \loadmarkfile{grph-inc} \loadmarkfile{grph-fig} \loadmarkfile{grph-raw} \loadmarkfile{pack-box} \loadmarkfile{pack-bar} \loadmarkfile{page-app} \loadmarkfile{meta-fig} \loadmarkfile{lang-spa} % will become obsolete \loadmarkfile{bibl-bib} \loadmarkfile{bibl-tra} %loadmarkfile{x-xtag} % no longer preloaded \loadmarkfile{meta-xml} \loadmarkfile{cont-log} \loadmarkfile{task-ini} \loadmarkfile{cldf-ver} % verbatim, this can come late \loadmarkfile{cldf-com} % commands, this can come late \loadmarkfile{core-ctx} % this order might change but we need to check depedencies / move to another namespace \loadmarkfile{core-def} %usemodule[x][res-04] % xml resource libraries %usemodule[x][res-08] % rlx runtime conversion %usemodule[x][res-12] % rli external indentification % now we hook in backend code (needs checking) \loadmarkfile{back-pdf} % actually, this one should load the next three using document.arguments.backend \loadmarkfile{mlib-pdf} \loadmarkfile{mlib-pps} \loadmarkfile{meta-pdf} \loadmarkfile{grph-epd} \loadmarkfile{back-exp} \setupcurrentlanguage[\defaultlanguagetag] \prependtoks \ctxlua{statistics.starttiming(statistics)}% \to \everyjob \appendtoks \ctxlua{statistics.stoptiming(statistics)}% \to \everyjob \appendtoks \ctxlua{statistics.savefmtstatus("\jobname","\contextversion","context.mkiv","\contextkind")}% can become automatic \to \everydump \errorstopmode \dump \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-t5.mkii0000644000175000017500000002061511754241457024034 0ustar norbertnorbert%D \module %D [ file=enco-t5, %D version=2004.11.16, %D title=\CONTEXT\ Encoding Macros, %D subtitle=New Vietnamese Encoding, %D author=Hans Hagen \& Adam Lindsay, %D date=\currentdate, %D copyright={Adam Lindsay \& Hans Hagen}] %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 is derived from the enco-x5 encoding, but now %D approaches the world with named glyphs. \startencoding[t5] \definecasemaps 128 to 159 lc +32 uc 0 \definecasemaps 160 to 191 lc 0 uc -32 \definecasemaps 192 to 223 lc +32 uc 0 \definecasemaps 224 to 225 lc 0 uc -32 \definecasemap 26 26 27 \definecasemap 27 26 27 \definecasemap 28 28 29 \definecasemap 29 28 29 \definecasemap 30 30 31 \definecasemap 31 30 31 \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter textbottomdot 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter texthookabove 12 \definecharacter textogonek {} \definecharacter quotesinglebase 13 \definecharacter guilsingleleft 14 \definecharacter guilsingleright 15 \definecharacter quotedblleft 16 \definecharacter quotedblright 17 \definecharacter quotedblbase 18 \definecharacter leftguillemot 19 \definecharacter rightguillemot 20 \definecharacter endash 21 \definecharacter emdash 22 \definecharacter cwm 23 \definecharacter zeroinferior 24 \definecharacter Yhook 26 \definecharacter yhook 27 \definecharacter Ydotbelow 28 \definecharacter ydotbelow 29 \definecharacter Dstroke 30 \definecharacter dstroke 31 \definecharacter textvisiblespace 32 \definecharacter dotlessi 25 %definecharacter DJ 30 %definecharacter dj 31 \definecharacter Agrave 128 \definecharacter Aacute 129 \definecharacter Atilde 130 \definecharacter Ahook 131 \definecharacter Adotbelow 132 \definecharacter Acircumflex 133 \definecharacter Acircumflexgrave 134 \definecharacter Acircumflexacute 135 \definecharacter Acircumflextilde 136 \definecharacter Acircumflexhook 137 \definecharacter Acircumflexdotbelow 138 \definecharacter Abreve 139 \definecharacter Abrevegrave 140 \definecharacter Abreveacute 141 \definecharacter Abrevetilde 142 \definecharacter Abrevehook 143 \definecharacter Abrevedotbelow 144 \definecharacter Egrave 145 \definecharacter Eacute 146 \definecharacter Etilde 147 \definecharacter Ehook 148 \definecharacter Edotbelow 149 \definecharacter Ecircumflex 150 \definecharacter Ecircumflexgrave 151 \definecharacter Ecircumflexacute 152 \definecharacter Ecircumflextilde 153 \definecharacter Ecircumflexhook 154 \definecharacter Ecircumflexdotbelow 155 \definecharacter Igrave 156 \definecharacter Iacute 157 \definecharacter Itilde 158 \definecharacter Ihook 159 \definecharacter agrave 160 \definecharacter aacute 161 \definecharacter atilde 162 \definecharacter ahook 163 \definecharacter adotbelow 164 \definecharacter acircumflex 165 \definecharacter acircumflexgrave 166 \definecharacter acircumflexacute 167 \definecharacter acircumflextilde 168 \definecharacter acircumflexhook 169 \definecharacter acircumflexdotbelow 170 \definecharacter abreve 171 \definecharacter abrevegrave 172 \definecharacter abreveacute 173 \definecharacter abrevetilde 174 \definecharacter abrevehook 175 \definecharacter abrevedotbelow 176 \definecharacter egrave 177 \definecharacter eacute 178 \definecharacter etilde 179 \definecharacter ehook 180 \definecharacter edotbelow 181 \definecharacter ecircumflex 182 \definecharacter ecircumflexgrave 183 \definecharacter ecircumflexacute 184 \definecharacter ecircumflextilde 185 \definecharacter ecircumflexhook 186 \definecharacter ecircumflexdotbelow 187 \definecharacter igrave 188 \definecharacter iacute 189 \definecharacter itilde 190 \definecharacter ihook 191 \definecharacter Idotbelow 192 \definecharacter Ograve 193 \definecharacter Oacute 194 \definecharacter Otilde 195 \definecharacter Ohook 196 \definecharacter Odotbelow 197 \definecharacter Ocircumflex 198 \definecharacter Ocircumflexgrave 199 \definecharacter Ocircumflexacute 200 \definecharacter Ocircumflextilde 201 \definecharacter Ocircumflexhook 202 \definecharacter Ocircumflexdotbelow 203 \definecharacter Ohorn 204 \definecharacter Ohorngrave 205 \definecharacter Ohornacute 206 \definecharacter Ohorntilde 207 \definecharacter Ohornhook 208 \definecharacter Ohorndotbelow 209 \definecharacter Ugrave 210 \definecharacter Uacute 211 \definecharacter Utilde 212 \definecharacter Uhook 213 \definecharacter Udotbelow 214 \definecharacter Uhorn 215 \definecharacter Uhorngrave 216 \definecharacter Uhornacute 217 \definecharacter Uhorntilde 218 \definecharacter Uhornhook 219 \definecharacter Uhorndotbelow 220 \definecharacter Ytilde 223 \definecharacter idotbelow 224 \definecharacter ograve 225 \definecharacter oacute 226 \definecharacter otilde 227 \definecharacter ohook 228 \definecharacter odotbelow 229 \definecharacter ocircumflex 230 \definecharacter ocircumflexgrave 231 \definecharacter ocircumflexacute 232 \definecharacter ocircumflextilde 233 \definecharacter ocircumflexhook 234 \definecharacter ocircumflexdotbelow 235 \definecharacter ohorn 236 \definecharacter ohorngrave 237 \definecharacter ohornacute 238 \definecharacter ohorntilde 239 \definecharacter ohornhook 240 \definecharacter ohorndotbelow 241 \definecharacter ugrave 242 \definecharacter uacute 243 \definecharacter utilde 244 \definecharacter uhook 245 \definecharacter udotbelow 246 \definecharacter uhorn 247 \definecharacter uhorngrave 248 \definecharacter uhornacute 249 \definecharacter uhorntilde 250 \definecharacter uhornhook 251 \definecharacter uhorndotbelow 252 \definecharacter ygrave 253 \definecharacter yacute 254 \definecharacter ytilde 255 \stopencoding \endinput % \startencoding [x5] % % \definecharacter aa {\xfiveencodedaa} % \definecharacter AA {\xfiveencodedAA} % % \stopencoding % % \unprotect % % \def\xfiveencodedaa% % {\accent23a} % % \def\xfiveencodedAA% % {\leavevmode % \setbox\zerocount\hbox{h}% % \dimen@\ht\zerocount % \advance\dimen@ -1ex % \rlap{\raise.67\dimen@\hbox{\char23}}A} % % \protect % % \quotesinglbase 13 % \guilsinglleft 14 % \guilsinglright 15 % \textquotedblleft 16 % \textquotedblright 17 % \quotedblbase 18 % \guillemotleft 19 % \guillemotright 20 % \textendash 21 % \textemdash 22 % \textcompwordmark 23 % \textperthousand \% \char 24 % \textpertenthousand \%\char 24\char 24 % \textvisiblespace 32 % \textquotedbl `\" % \textdollar `\$ % \textquoteright `\' % \textless `\< % \textgreater `\> % \textbackslash `\ % \textasciicircum `\^ % \textunderscore 95 % \textquoteleft `\` % \textbraceleft `\{ % \textbar `\| % \textbraceright `\} % \textasciitilde `\~ context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-int.mkii0000644000175000017500000021727111754241457024325 0ustar norbertnorbert%D \module %D [ file=scrn-int, %D version=1995.01.01, %D title=\CONTEXT\ Core Macros, %D subtitle=Interaction, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % evt interactionbaren runtime laden (scheelt 8K) %D Still to be done properly. \writestatus{loading}{ConTeXt Screen Macros / Interaction} \unprotect % \expand vs \expanded % linked registers implementeren als een koppeling == mooier \presetlocalframed[\??lk] \newcounter\numberoflinks \def\stelkoppelingenin {\dodoubleargument\getparameters[\??lk]} \def\definieerkoppeling[#1]% % local loading ! {\doifundefined{\s!link:#1:\s!list} {\expanded{\definetwopasslist{\s!link:#1}}% \expanded{\doloadtwopassdata{\s!link:#1}}% \getfirsttwopassdata{\s!link:#1}% \let\firstlink\twopassdata \getlasttwopassdata{\s!link:#1}% \let\lastlink\twopassdata \let\noflinks\noftwopassitems \gettwopassdata{\s!link:#1}% \let\currentlink\twopassdata \let\nextlink\twopassdata \setxvalue{\s!link:#1:}{\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}}} \def\koppeling[#1]#2% {\bgroup \definieerkoppeling[#1]% \doglobal\increment\numberoflinks \gettwopassdata{\s!link:#1}% \def\next[##1:##2:##3:##4:##5]% {\edef\firstlink {0##1}% \edef\lastlink {0##2}% \edef\noflinks {0##3}% \edef\prevlink {0##4}% \edef\currentlink{0##5}}% \expanded{\next[\getvalue{\s!link:#1:}]}% \edef\nextlink{0\iftwopassdatafound\twopassdata\else\lastlink\fi}% \setxvalue{\s!link:#1:}{\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}% \lazysavetwopassdata{\s!link:#1}{\numberoflinks}{\noexpand\realfolio}% \ifnum\noflinks<\plustwo \locationfalse \fi \iflocation \hbox {\setinteractionparameter\c!width\!!zeropoint #2\relax \hskip\@@lkdistance \dogotosomepage\??lk\gotobegincharacter\firstlink\hss \ifnum\noflinks>\plustwo \dogotosomepage\??lk\gobackwardcharacter\prevlink\hss \fi \ifnum\noflinks>\plustwo \dogotosomepage\??lk\goforwardcharacter\nextlink\hss \hskip\@@lkdistance \fi \dogotosomepage\??lk\gotoendcharacter\lastlink}% \else \hbox{#2}% \fi \egroup} \let\setupinteractionscreens\empty \def\docalculateinteractionscreen {\doifelse\@@scwidth\v!fit {\!!widtha\leftcombitotal \ifdim\backspace>\!!widtha\ifdim\backspace>\zeropoint\relax \advance\backspace -\!!widtha \fi\fi \advance\!!widtha\rightcombitotal \advance\!!widtha 2\dimexpr\@@scbackspace+\@@schoroffset\relax \advance\!!widtha \makeupwidth} {\doifelse\@@scwidth\v!max {\!!widtha\printpaperwidth} {\!!widtha\@@scwidth}}% \doifelse\@@scheight\v!fit {\!!heighta\dimexpr\topheight+\topdistance\relax \ifdim\topspace>\!!heighta\ifdim\topspace>\zeropoint\relax \advance\topspace -\!!heighta \fi\fi \advance\!!heighta \dimexpr\makeupheight+\bottomdistance+\bottomheight\relax \advance\!!heighta 2\dimexpr\@@sctopspace+\@@scveroffset\relax} {\doifelse\@@scheight\v!max {\!!heighta\printpaperheight} {\!!heighta\@@scheight}}% \doif\@@scdelay\v!none{\let\@@scdelay\zerocountervalue}} % The macro is not to be changed; only the \@@ia-variables % may be set! ConTeXt is the producer but we no longer % mention the pragma site, since we don't want to be bothered % with remarks about third party documents and/or associated % with documents produced outside our control. \def\doprepareidentity % beware, we need to construct {\let\!!stringa\@@iakeyword % an unexpanded space separated \let\@@iakeyword\empty % list of keywords from a comma \def\doprepareidentity##1% % separated one {\ifx\@@iakeyword\empty \appended\def\@@iakeyword{##1}% \else \appended\def\@@iakeyword{ ##1}% \fi}% \@EA\processcommalist\@EA[\!!stringa]\doprepareidentity \global\let\doprepareidentity\relax} %D The Creator field is changed per 12/04/2006 due to user presure. This %D means that I need to put my own status info someplace else. \def\initializeidentity {\doprepareidentity \dosetupidentity % no \expanded{..} will be done in special (else no pdfdoc) {\@@iatitle}{\@@iasubtitle}{\@@iaauthor}% {ConTeXt - \contextversion}% {\@@iadate}{\@@iakeyword}% \global\let\initializeidentity\relax} \appendtoks \initializeidentity \to \everyshipout \def\initializepaper {\bgroup \ifx\@@ppleft \empty \ifx\@@ppright\empty \ifx\@@pptop \empty \ifx\@@ppbottom \empty \ifx\@@pcstate\v!start \locationfalse\fi\else \locationfalse\fi\else \locationfalse\fi\else \locationfalse\fi\else \locationfalse\fi \iflocation % without screen settings \egroup \dosetuppaper\papersize\paperwidth\paperheight \else \egroup \dosetuppaper\printpapersize\printpaperwidth\printpaperheight \fi} \appendtoks \initializepaper \to \everyshipout \def\doinitializepaper {\bgroup \docalculateinteractionscreen \ifdim\!!widtha>\paperwidth\ifdim\!!widtha>\zeropoint \paperwidth\!!widtha \fi\fi \ifdim\!!heighta>\paperheight\ifdim\!!heighta>\zeropoint \paperheight\!!heighta \fi\fi \dosetuppaper {\printpapersize} {\the\paperwidth} {\the\paperheight}% \egroup} \let\@@pcscreendata\empty \def\dosetupinteractionscreens % met a, b en \number {\doifnot\@@pcstate\v!start\dodosetupinteractionscreens} \setvalue{\??sc\c!option\v!max }{1} % tzt share with driver \setvalue{\??sc\c!option\v!bookmark }{2} % tzt share with driver \setvalue{\??sc\c!option\v!fit }{3} % tzt share with driver \setvalue{\??sc\c!option\v!doublesided}{4} % tzt share with driver \def\dodosetupinteractionscreens % met a, b en \number {\bgroup \docalculateinteractionscreen \!!counte=0\getvalue{\??sc\c!option\@@scoption}\relax % niet waterdicht \doifnot{\the\!!widtha\the\!!heighta}\@@pcscreendata {\xdef\@@pcscreendata{\the\!!widtha\the\!!heighta}% \showmessage\m!interactions1{\withoutpt\the\!!widtha,\withoutpt\the\!!heighta}}% % needs to be split: dimensions for each page % and mode per document and only once ! \dosetupscreen \backoffset\topoffset\!!widtha\!!heighta{\the\!!counte}% \dosetupcropbox\backoffset\topoffset\!!widtha\!!heighta \egroup} \def\dosetupinteractionscreen[#1]% {\getparameters[\??sc][#1]% \ifproductionrun \let\initializepaper\doinitializepaper \let\setupinteractionscreens\dosetupinteractionscreens \fi} \appendtoks \setupinteractionscreens \to \everyfirstshipout % needed to get option=max etc working \appendtoks \setupinteractionscreens \to \everyshipout % needed for page/screen dimensions \def\setupinteractionscreen {\dosingleempty\dosetupinteractionscreen} %D Due to requests I finally decided to support bookmarks, a %D driver dependant way of showing tables of content. The most %D simple way of support is hooking bookmark generation into %D the existing list mechanisms. That way users can generate %D bookmarks automatically, although its entirely valid to add %D bookmarks by defining alternative ones. These will be added %D at the appropriate place in the list. % \hoofdstuk{het eerste hoofdstuk} % % \bookmark {de eerste bookmark} % optional overruled hoofdstuk % % .... text .... % % \placebookmarks [hoofdstuk,paragraaf,subparagraaf,subsubparagraaf,mylist] % [open list] % % \bookmark[mylist]{whatever} \def\@@bookmark {bm::} \def\@@booklevel{bl::} \def\@@bookcount{bc::} \definelist[\@@bookmark] \newtoks\postponedbookmarks \def\flushpostponedbookmark {\the\postponedbookmarks \global\postponedbookmarks\emptytoks} \def\simplebookmark#1% {\doglobal\prependtoks \writetolist[\@@bookmark]{}{#1}% \to\postponedbookmarks} \def\complexbookmark[#1]#2% {\doglobal\appendtoks\writetolist[#1]{}{#2}\to\postponedbookmarks} \definecomplexorsimple\bookmark \newif\iftracebookmarks \tracebookmarksfalse \let\tracebookmarks\tracebookmarkstrue \def\placebookmarks {\dodoubleempty\doplacebookmarks} \def\doplacebookmarks[#1][#2]% {\iflocation \iffirstargument \bgroup \ifsecondargument \doifelse{#2}\v!all {\edef\openbookmarklist{#1}} {\edef\openbookmarklist{#2}}% \else \let\openbookmarklist\empty \fi \xdef\doplacebookmarksindeed{\noexpand\dodoplacebookmarksindeed[#1][\openbookmarklist]} \egroup \else \expanded{\placebookmarks\@EA[\getvalue{\??ih\v!content\c!list}]}% \fi \fi} \def\dodoplacebookmarksindeed[#1][#2]% {\bgroup \edef\openbookmarklist{#2}% \global\let\bookmarklevellist\empty \def\bookmarklevelcount{0}% \doprocessbookmarks[#1]\dogetbookmarkelement \dolistelement{}{}{}{}{}{}% needed to finish the first pass \doprocessbookmarks[#1]\doputbookmarkelement \flushbookmark \egroup} \let\doplacebookmarksindeed\relax \prependtoks \doplacebookmarksindeed % new, now postponed so that halfway defined commands work out ok \to \everystoptext \def\doprocessbookmarks[#1]#2% {\let\dolistelement#2\relax \scratchcounter\zerocount \def\docommand##1% {\advance\scratchcounter \plusone \getlistlevel[##1]\listlevel{\the\scratchcounter}% \setxvalue{\@@bookcount\the\scratchcounter}{1}% \setxvalue{\@@booklevel##1}{\listlevel}}% \processcommalist[#1]\docommand \setxvalue{\@@bookcount0}{1}% \global\chardef\currentbookmarklevel\zerocount \global\chardef\previousbookmarklevel\zerocount \doutilities{listentries,#1,\@@bookmark}\jobname{#1}\relax\relax} \def\dodogetbookmarkelement#1#2#3#4#5#6% {\doifelsenothing{#1} {\global\chardef\currentbookmarklevel\zerocount} {\global\chardef\currentbookmarklevel\getvalue{\@@booklevel#1}\relax}% \ifnum\currentbookmarklevel>\previousbookmarklevel \setxvalue{\@@bookcount\the\currentbookmarklevel}{1}% \else\ifnum\currentbookmarklevel<\previousbookmarklevel \bgroup \!!counta\previousbookmarklevel \doloop {\let\bookmarktag\empty \!!countb\!!counta \advance\!!countb \minusone \dorecurse\!!countb {\edef\bookmarktag {\bookmarktag\getvalue{\@@bookcount\recurselevel}:}}% \edef\bookmarklevelcount {\getvalue{\@@bookcount\the\!!counta}}% \xdef\bookmarklevellist {\bookmarklevellist/\bookmarktag:\bookmarklevelcount/}% \advance\!!counta \minusone \ifnum\!!counta=\currentbookmarklevel \exitloop \fi}% \egroup \@EA\doglobal\@EA\increment\csname \@@bookcount\the\currentbookmarklevel\endcsname\relax \else \@EA\doglobal\@EA\increment\csname \@@bookcount\the\previousbookmarklevel\endcsname\relax \fi\fi \global\utilitydonetrue \global\chardef\previousbookmarklevel\currentbookmarklevel} \def\getbookmarklevelcount {\@EA\def\@EA\docommand\@EA[\@EA##\@EA1\@EA/\bookmarktag:##2/##3]% {\def\bookmarklevelcount{##2}}% \@EA\@EA\@EA\docommand\@EA\@EA\@EA[\@EA\bookmarklevellist\@EA/\bookmarktag:0/]} \def\dodoputbookmarkelement#1#2#3#4#5#6% {\doifelsenothing{#1} {\global\chardef\currentbookmarklevel\zerocount} {\global\chardef\currentbookmarklevel\getvalue{\@@booklevel#1}\relax}% \ifnum\currentbookmarklevel>\previousbookmarklevel \setxvalue{\@@bookcount\the\currentbookmarklevel}{1}% \else\ifnum\currentbookmarklevel<\previousbookmarklevel \@EA\doglobal\@EA\increment\csname \@@bookcount\the\currentbookmarklevel\endcsname\relax \else \@EA\doglobal\@EA\increment\csname \@@bookcount\the\previousbookmarklevel\endcsname\relax \fi\fi \let\bookmarktag\empty \!!countb\currentbookmarklevel \dorecurse\!!countb {\edef\bookmarktag {\bookmarktag\getvalue{\@@bookcount\recurselevel}:}}% \getbookmarklevelcount \iftracebookmarks \bgroup \par \bookmarktag\quad \dorecurse\currentbookmarklevel{\quad}\unskip#1\quad (\bookmarklevelcount)\quad \egroup \fi \global\chardef\previousbookmarklevel\currentbookmarklevel \global\utilitydonetrue \insertsomebookmark{#1}{\the\currentbookmarklevel}{\bookmarklevelcount}{#4}{#6}} \def\dogetbookmarkelement#1#2#3#4#5#6% {\doifnot{#1}\@@bookmark {\dodogetbookmarkelement{#1}{#2}{#3}{#4}{#5}{#6}}} \def\doputbookmarkelement#1#2#3#4#5#6% {\doifelse{#1}\@@bookmark {\localbookmark{#4}} {\flushbookmark \dodoputbookmarkelement{#1}{#2}{#3}{#4}{#5}{#6}}} \let\flushbookmark\relax \let\localbookmark\gobbleoneargument \def\insertsomebookmark#1#2#3#4#5% {\gdef\flushbookmark {\doinsertsomebookmark{#1}{#2}{#3}{#4}{#5}{g}}% \gdef\localbookmark##1% {\doinsertsomebookmark{#1}{#2}{#3}{##1}{#5}{l}}} \def\doinsertsomebookmark#1#2#3#4#5#6% {\global\utilitydonetrue \global\let\localbookmark\gobbleoneargument \global\let\flushbookmark\relax \doifinstringelse{#1}\openbookmarklist {\chardef\openbookmark\plusone} {\chardef\openbookmark\zerocount}% \iftracebookmarks(#6: #4)\quad(\the\openbookmark)\par\fi \doinsertbookmark{#2}{#3}{#4}{#5}{\openbookmark}} % \startinteractionmenu[rechts] % \but [eerste] eerste \\ % \txt hello world \\ % \but [tweede] tweede \\ % \nop \\ % \but [tweede] tweede \\ % \rul whow \\ % \but [tweede] tweede \\ % \raw hello world \\ % \but [tweede] tweede \\ % \com \vfill \\ % \but [derde] derde \\ % \stopinteractionmenu \newif\iflocationmenupermitted \def\testinteractionmenu#1% {\iflocation \doifelse\@@iamenu\v!on {\doifelsevalue{\??am#1\c!state}\v!start {\global\locationmenupermittedtrue} {\global\locationmenupermittedfalse}} {\global\locationmenupermittedfalse}% \else \global\locationmenupermittedfalse \fi} \def\dodisableinteractionmenu[#1][#2][#3]% {\def\dododisableinteractionmenu##1% {\doifelse{#3}{} {\letvalue{\??am##1\c!obstruction}\empty} {\edef\interactieblokkade{\getvalue{\??am##1\c!obstruction}} \def\docommand####1{#1{####1}{\interactieblokkade}}% #1 = \remove or \add \processcommalist[#3]\docommand \setevalue{\??am##1\c!obstruction}{\interactieblokkade}}}% \processcommalist[#2]\dododisableinteractionmenu} \def\disableinteractionmenu {\dotripleempty\dodisableinteractionmenu[\addtocommalist]} \def\enableinteractionmenu {\dotripleempty\dodisableinteractionmenu[\removefromcommalist]} % ja : kader/achtergrond met tekst % leeg : kader/achtergrond maar geen tekst % nee : alleen ruimte reserveren % geen : helemaal weglaten \newif\iflocationdummy \newif\ifskippedmenuitem \newif\iflocationempty \newif\iflocationclick % ja : kader/achtergrond met tekst % leeg : kader/achtergrond maar geen tekst % nee : alleen ruimte reserveren % geen : helemaal weglaten % % \setupinteractionmenu[right][samepage=yes, unknownreference=yes] % \setupinteractionmenu[right][samepage=empty,unknownreference=empty] % \setupinteractionmenu[right][samepage=no, unknownreference=no] % \setupinteractionmenu[right][samepage=none, unknownreference=none] % % \startinteractionmenu[right] % \but [firstpage] first \\ % \but [lastpage] last \\ % \but [somepage] crap \\ % \stopinteractionmenu \def\dosetlocationboxcontent#1[#2]#3[#4]% {\global\skippedmenuitemfalse \setbox\locationbox\hbox {\resetgoto % anders cyclische aanroep ! \localframed[#1][#2]{\dolocationattributes{#1}\c!style\c!color{#3}}}% \iflocationclick \hbox{\gotolocation{#4}{\box\locationbox}}% \else \hbox{\box\locationbox}% \fi} \let\dosetlocationboxyes\dosetlocationboxcontent \def\dosetlocationboxempty#1[% {\dosetlocationboxcontent{#1}[\c!empty=\v!yes,} \def\dosetlocationboxno#1[% {\dosetlocationboxcontent{#1}[\c!empty=\v!yes,\c!frame=,\c!background=,} \def\dosetlocationboxnone#1[#2]#3[#4]% {\global\skippedmenuitemtrue} \def\setlocationboxyes#1[#2]#3[#4]% {\locationclicktrue \setbox\locationbox\hbox {\resetgoto % anders cyclische aanroep ! \global\skippedmenuitemfalse \gotolocation {#4}% % needed {\ifrealreferencepage \ifcase\csname\??am\??am\csname#1\c!samepage\endcsname\endcsname\relax \copycsname#1\c!color\endcsname\csname#1\c!contrastcolor\endcsname \localframed[#1][#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \or \localframed[#1][\c!empty=\v!yes,#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \or \localframed[#1][\c!empty=\v!yes,\c!frame=,\c!background=,#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \or \global\skippedmenuitemtrue \fi \else \localframed[#1][#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \fi}}% \ifskippedmenuitem\else\box\locationbox\fi} \def\setlocationboxnop#1[#2]#3[#4]% inefficient as text can be outside box {\locationclickfalse \setbox\locationbox\hbox {\resetgoto % anders cyclische aanroep ! \global\skippedmenuitemfalse \ifcase\csname\??am\??am\csname#1\c!unknownreference\endcsname\endcsname\relax \localframed[#1][#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \or \localframed[#1][\c!empty=\v!yes,#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \or \localframed[#1][\c!empty=\v!yes,\c!frame=,\c!background=,#2]{\dolocationattributes{#1}\c!style\c!color{#3}}% \or \global\skippedmenuitemtrue \fi}% \ifskippedmenuitem\else\box\locationbox\fi} \def\setlocationboxraw#1[#2]#3[#4]% {\localframed[#1][#2]{\dolocationattributes{#1}\c!style\c!color{#3}}} \def\setlocationbox#1[#2]#3[#4]% {\bgroup % really needed ! \edef\permittedreferences{\csname#1\c!obstruction\endcsname}% \doifreferencepermittedelse{#4}% {\setlocationboxyes{#1}[#2]{#3}[#4]}% {\setlocationboxnop{#1}[#2]{#3}[#4]}% \egroup} \def\setlocationnop#1[#2]#3% {\localframed[#1][#2]{#3}} \def\executeamboxcommands#1#2#3#4#5% {%\processaction % [\getvalue{\??am#1\c!dummy}] % [ \v!yes=>\chardef\handleunknownmenuitem=0\relax, % \v!empty=>\chardef\handleunknownmenuitem=1\relax, % \v!no=>\chardef\handleunknownmenuitem=2\relax]% \getvalue{\??am#1#3}\relax \setamboxcommands{#1}{#4}% \ignorespaces#2\unskip \getvalue{\??am#1#5}} \newcounter\currentamposition \newtoks\everysetmenucommands \def\setamboxcommands#1#2% {\def\currentmenu{#1}% % kan nog eerder \def\currentsubmenu{#2}% % ? ? \doglobal\newcounter\currentamposition \the\everysetmenucommands} \def\menu@@amboxcommand#1\\% {\dontleavehmode \bgroup \ignorespaces#1\unskip\relax \ifskippedmenuitem \else \getvalue{\??am\currentmenu\currentsubmenu}% \fi \egroup \ignorespaces} \appendtoks \let\@@amboxcommand\menu@@amboxcommand \to \everysetmenucommands \def\menu@raw[#1]#2\\% {\@@amboxcommand\gotobox{\ignorespaces#2\unskip}[#1]\\}% \def\menu@but[#1]#2\\% {\@@amboxcommand\do@@amposition\currentmenu{#1}{\setlocationbox{\??am\currentmenu}[]{\ignorespaces#2\unskip}[#1]}\\}% \def\menu@got[#1]#2\\% pas op! offset {\@@amboxcommand\setlocationbox{\??am\currentmenu}[\c!frame=\v!off,\c!background=]{\ignorespaces#2\unskip}[#1]\\}% \def\menu@nop#1\\% {\@@amboxcommand\setlocationboxraw{\??am\currentmenu}[\c!frame=\v!off,\c!background=,\c!empty=\v!yes]{\ignorespaces#1\unskip}[]\\}% \def\menu@txt#1\\% {\@@amboxcommand\localframed[\??am\currentmenu][\c!frame=\v!off,\c!background=]{\ignorespaces#1\unskip}\\}% \def\menu@rul#1\\% ook \do@@amposition ! {\@@amboxcommand\localframed[\??am\currentmenu][]{\ignorespaces#1\unskip}\\}% \def\menu@com#1\\% {\ignorespaces#1\unskip\ignorespaces}% \appendtoks \let\raw\menu@raw \let\but\menu@but \let\got\menu@got \let\nop\menu@nop \let\txt\menu@txt \let\rul\menu@rul \let\com\menu@com \to \everysetmenucommands \ifx\do@@amposition\undefined \let\do@@amposition\gobbletwoarguments % hook for positional thingies \fi \let\currentmenu\empty % beware : never change the concept of pbgoffset \def\menuparameter#1{\csname\??am\currentmenu#1\endcsname} \def\@@amhbox#1#2#3#4% {\def\currentmenu{#3}% \testinteractionmenu{#3}% \iflocationmenupermitted \bgroup \showcomposition \scratchdimen\dimexpr \makeupwidth +\pagebackgroundhoffset +\pagebackgroundhoffset -\menuparameter\c!leftoffset -\menuparameter\c!rightoffset \relax \setbox\scratchbox\hbox to \scratchdimen {\forgetall\executeamboxcommands{#3}{#4}\c!left\c!middle\c!right}% \setbox\scratchbox\hbox{\do@@ammenuposition{#3}{\box\scratchbox}}% \wd\scratchbox\makeupwidth % geen \ht=#2 setting (yet) \hskip\dimexpr-\pagebackgroundhoffset+\menuparameter\c!leftoffset\relax \box\scratchbox \egroup \else #1\relax \fi} \def\@@amvbox#1#2#3#4% don't change skipping, this one works! {\def\currentmenu{#3}% \testinteractionmenu{#3}% \iflocationmenupermitted \bgroup \showcomposition \scratchdimen\dimexpr \textheight +\pagebackgroundvoffset +\pagebackgroundvoffset +\pagebackgrounddepth -\menuparameter\c!topoffset -\menuparameter\c!bottomoffset \relax \setbox\scratchbox\vbox to \scratchdimen {\forgetall % Voor't geval de afstand %\setupblank[\v!standard]% % (tijdelijk) is aangepast. \restorestandardblank \hsize#2\relax \executeamboxcommands{#3}{#4}\c!before\c!inbetween\c!after}% \setbox\scratchbox\vbox{\hbox{\do@@ammenuposition{#3}{\box\scratchbox}}}% \setbox\scratchbox\vbox {\ht\scratchbox\zeropoint \vskip\dimexpr-\pagebackgroundvoffset+\menuparameter\c!topoffset\relax \box\scratchbox \vskip\pagebackgroundvoffset}% overbodig \ht\scratchbox\textheight \wd\scratchbox#2\relax \box\scratchbox \egroup \else #1\relax \fi} \ifx\do@@ammenuposition\undefined \let\do@@ammenuposition\gobbleoneargument % hook for positional thingies \fi \setvalue{\??am\s!do\v!right }{\@@amvbox{\dodummypageskip\v!right }\rightedgewidth} \setvalue{\??am\s!do\v!left }{\@@amvbox{\dodummypageskip\v!left }\leftedgewidth } \setvalue{\??am\s!do\v!top }{\@@amhbox{\dodummypageskip\v!top }\topheight } \setvalue{\??am\s!do\v!bottom}{\@@amhbox{\dodummypageskip\v!bottom}\bottomheight } \def\dointeractionmenu#1#2% {\getvalue{\??am\s!do\getvalue{\??am#1\c!location}}{#1}{#2}} \unexpanded\def\interactionmenu[#1]% {\getvalue{\??am\c!menu#1}} \def\horizontalinteractionmenu#1#2#3#4% {\ifdim#2>\zeropoint % new \scratchdimen\zeropoint \setbox\scratchbox\hbox {\def\docommand##1% {\doifnotvalue{\??am##1\c!state}\v!none {\hskip\scratchdimen \setbox2\hbox to #2 {\getvalue{\??am##1#3}\interactionmenu[##1]\getvalue{\??am##1#4}}% \doifelsevalue{\??am##1\c!distance}\v!overlay {\scratchdimen\zeropoint \wd2\zeropoint}% {\scratchdimen\getvalue{\??am##1\c!distance}}% \box2}}% \startinteraction \processcommacommand[\getvalue{\??am#1}]\docommand \stopinteraction}% \wd\scratchbox#2\relax \box\scratchbox \fi} \def\verticalinteractionmenu#1#2#3#4% {\ifdim#2>\zeropoint % new \scratchdimen\zeropoint \setbox\scratchbox\vbox {\def\docommand##1% {\doifnotvalue{\??am##1\c!state}\v!none {\vskip\scratchdimen \setbox2\vbox to #2 {\getvalue{\??am##1#3}\interactionmenu[##1]\getvalue{\??am##1#4}}% \doifelsevalue{\??am##1\c!distance}\v!overlay {\scratchdimen\zeropoint \offinterlineskip \dp2\zeropoint \ht2\zeropoint}% {\scratchdimen\getvalue{\??am##1\c!distance}}% \box2}}% \startinteraction \processcommacommand[\getvalue{\??am#1}]\docommand \stopinteraction}% \ht\scratchbox#2\relax \dp\scratchbox\zeropoint \box\scratchbox \fi} \letvalue{\??am\v!left }\empty \letvalue{\??am\v!right}\empty \letvalue{\??am\v!top }\empty \letvalue{\??am\v!bottom }\empty % todo : \defineinteractionmenuclass \def\interactionmenus[#1]% {\iflocation \getvalue{\??am\??am\c!menu#1}% \else \dodummypageskip{#1}% \fi} \setvalue{\??am\??am\c!menu\v!left }{\horizontalinteractionmenu\v!left \leftedgewidth \c!left \c!right} \setvalue{\??am\??am\c!menu\v!right }{\horizontalinteractionmenu\v!right \rightedgewidth\c!left \c!right} \setvalue{\??am\??am\c!menu\v!top }{\verticalinteractionmenu \v!top \topheight \c!before\c!after} \setvalue{\??am\??am\c!menu\v!bottom}{\verticalinteractionmenu \v!bottom\bottomheight \c!before\c!after} % this can be implemented with the following command (which % is new, undocumented, experimental, untested, etc etc) \def\defineinteractionmenuclass {\dodoubleargument\dodefineinteractionmenuclass} \def\dodefineinteractionmenuclass[#1][#2]% tag hori|veri {\doifelse{#2}\v!vertical {\setvalue{\??am\??am\c!menu#1}{\verticalinteractionmenu {#1}{\getvalue{\??am#1\c!width }}\c!before\c!after}} {\setvalue{\??am\??am\c!menu#1}{\horizontalinteractionmenu{#1}{\getvalue{\??am#1\c!height}}\c!left\c!right }}} % \setupinteraction[menu=on,state=start] % % \defineinteractionmenuclass[test] [vertical] % \defineinteractionmenuclass[another][horizontal] % % \defineinteractionmenu[test] [left][state=start,width=4cm] % \defineinteractionmenu[another][top] [state=start,height=1cm] % % \startinteractionmenu[test] % \but [firstpage] test-a \\ % \but [nextpage] test-b \\ % \stopinteractionmenu % % \startinteractionmenu[another] % \but [firstpage] test-a \\ % \but [nextpage] test-b \\ % \stopinteractionmenu % % \setupheadertexts[{\interactionmenu[another]}] % % \starttext % % test \interactionmenu[test] \page % test \interactionmenu[test] \page % % \stoptext %D This can save complicated menu macros when one want to %D keep control over parts of a menu (i.e.\ turn them on and %D off). We could have achieved something similar with modes. \def\local@@ambox#1#2#3#4% don't change skipping, this one works! {\bgroup \testinteractionmenu{#3}% \iflocationmenupermitted \executeamboxcommands{#3}{#4}\c!before\c!inbetween\c!after \else #1\relax \fi \egroup} \def\includemenu[#1]% {\doifvalue{\??am#1\c!state}\v!local {\bgroup \letvalue{\??am#1\c!state}\v!start \let\@@amvbox\local@@ambox \let\@@amhbox\local@@ambox \getvalue{\??am\c!menu#1}% \egroup}} %D We also need an explicit position control some day. I'll %D do that when I need it. [The stacking order.] \newif\ifextendedmenu % [name] [location] % [name] [location] [pars] \def\defineinteractionmenu {\dotripleempty\dodefineinteractionmenu} \def\dodefineinteractionmenu[#1][#2][#3]% {% main settings \letvalue{\??am\c!menu#1}\empty \setvalue{\@@dodolistelement#1}{\def\dosomelistelement{\dodomenulistelement{#1}}}% \presetlocalframed[\??am#1]% % register location \expanded{\addtocommalist{#1}\@EA\noexpand\csname\??am#2\endcsname}% % inherit settings \doifnot{#1}{#2} {\copyparameters[\??am#1][\??am#2] [\c!left,\c!middle,\c!right,\c!before,\c!after,\c!inbetween,% \c!width,\c!height,\c!distance,\c!offset,% \c!frame,\c!framecolor,\c!rulethickness,% \c!background,\c!backgroundcolor,\c!backgroundscreen,% \c!style,\c!color,\c!contrastcolor,\c!samepage,\c!unknownreference,% \c!leftoffset,\c!rightoffset,\c!topoffset,\c!bottomoffset]}% % additional settings \getparameters[\??am#1][\c!location=#2,\c!obstruction=,#3]} \def\setupinteractionmenu {\dodoubleargument\dosetupinteractionmenu} \def\dosetupinteractionmenu[#1][#2]% {\def\docommand##1{\getparameters[\??am##1][#2]}% \processcommalist[#1]\docommand} \expandafter\chardef\csname\??am\??am\v!yes \endcsname\zerocount \expandafter\chardef\csname\??am\??am\v!empty\endcsname\plusone \expandafter\chardef\csname\??am\??am\v!no \endcsname\plustwo \expandafter\chardef\csname\??am\??am\v!none \endcsname\plusthree \expandafter\chardef\csname\??am\??am \endcsname\plusone % default \processbetween{\v!interactionmenu}\dostartinteractionmenu \def\dostartinteractionmenu#1% {\dodostartinteractionmenu#1\dodostopinteractionmenu} \def\dodostartinteractionmenu[#1]#2\dodostopinteractionmenu {\setvalue{\??am\c!menu#1}{\extendedmenutrue\dointeractionmenu{#1}{#2}}} \def\resetinteractionmenu[#1]% {\letvalue{\??am\c!menu#1}\empty} \def\dodomenulistelement#1#2#3#4#5#6#7% {\setbox0=\hbox {\let\gotolocation\gobbleoneargument % hack to catch last [] %\locationclickfalse % ipv ^ \docheckrealreferencepage{#7}% \setlocationboxyes {\??am#1}% % needed ! []% no settings {\limitatetext{#5}{\getvalue{\??li#2\c!maxwidth}}{\unknown}}% % needed ! []}% normally the destination, catch by gobble \@@amboxcommand\do@@amposition{#1}{#7}% beware, we pass the pagenumber {\ignorespaces\linklisttoelement{#3}{#6}{#7}{\box0}\unskip}\\} % \scherm moet worden als \page \def\screen {\dosingleempty\doscreen} \def\doscreen[#1]% {\iflocation\page[#1]\fi} \unexpanded\def\menubutton {\dodoubleempty\domenubutton} \def\domenubutton[#1]% {\iffirstargument \ifsecondargument \@EAEAEA\domenubuttonB \else \doifassignmentelse{#1} {\@EAEAEA\domenubuttonC} {\@EAEAEA\domenubuttonD}% \fi \else \@EA\domenubuttonA \fi[#1]} \def\domenubuttonA[#1][#2]#3[#4]% normal button, no parameters {\bgroup %\locationdummytrue \setlocationbox\??bt[]{#3}[#4]% \egroup} \def\domenubuttonB[#1][#2]#3[#4]% menu button, with parameters {\bgroup %\locationdummytrue \setlocationbox{\??am#1}[#2]{#3}[#4]% \egroup} \def\domenubuttonC[#1][#2]#3[#4]% normal button, with parameters {\bgroup %\locationdummytrue \setlocationbox\??bt[#1]{#3}[#4]% \egroup} \def\domenubuttonD[#1][#2]#3[#4]% menu button, no parameters {\bgroup %\locationdummytrue \setlocationbox{\??am#1}[]{#3}[#4]% \egroup} \def\menubox {\dodoubleempty\domenubox} \def\domenubox[#1][#2]#3% {\bgroup \let\setlocationbox\setlocationboxraw \domenubutton[#1][#2]#3[]% \egroup} % Hier volgen de synchronisatiemacro's: \def\syncprefix{sync} %def\syncmarker{syncmark} %\definemarking[\syncmarker] %\setupmarking[\syncmarker][\c!expansie=\v!ja] \newmark\syncmarker \newcounter\synccounter \newif\ifsynchronisation \def\startsynchronization% {\iflocation\ifsynchronisation \doglobal\increment\synccounter \fi\fi} \def\stopsynchronization% {\iflocation\ifsynchronisation %\thisisdestination{\syncprefix:\synccounter}% \pagereference[\syncprefix:\synccounter]% \ifvmode \@EA\setmark\@EA\syncmarker\@EA{\synccounter} % \marking[\syncmarker]{\synccounter}% \else \showmessage\m!interactions4\synccounter \fi \fi\fi} \def\synchronize% {\startsynchronization \stopsynchronization} \def\dosetupsynchronization[#1]% {\getparameters[\??sy][#1]% \doifelse\@@systate\v!start \synchronisationtrue \synchronisationfalse} \def\setupsynchronization {\dosingleargument\dosetupsynchronization} \def\definesynchronization {\dosingleargument\dodefinesynchronization} \def\setupsynchronizationbar {\dodoubleargument\getparameters[\??ba]} \presetlocalframed[\??ba] \setvalue{synchronisatie\v!page}[#1]% {\bgroup %\setupinteraction[\c!width=\!!zeropoint]% \setinteractionparameter\c!width\!!zeropoint \setbox0\hbox {\localframed[\??ba][]{\dolocationattributes\??ba\c!style\c!color{\strut\@@batext}}}% \dontcomplain \def\atthebottom {\leaders\hrule\!!depth1ex\!!height-.5ex\hfil}% \def\atthetop##1##2##3% {\dimen0=\wd0 \divide\dimen0 3 \multiply\dimen0 ##2\relax \dimen2=.25em % brrr \advance\dimen0 -##3\dimen2 %\gotodestination % {}{#1}{\syncprefix:##1}{} % {\hbox to \dimen0{\color[\locationcolor\@@bacolor]{\atthebottom}}}}% \gotobox {\hbox to \dimen0{\color[\locationcolor\@@bacolor]{\atthebottom}}}% [#1::\syncprefix:##1]}% \hbox {\def\check##1##2% {\edef##2{0##1\syncmarker}% \ifnum0##2=0 \def##2{1}\fi}% \check\gettopmark\top \check\getfirstmark\first \check\getbotmark\bot \setbox2\hbox to \wd0 {\ifnum\top=\first\relax \ifnum\first=\bot\relax \atthetop\first30\relax \else \atthetop\first21\hss\atthetop\bot11\relax \fi \else \ifnum\first=\bot\relax \atthetop\top11\hss\atthetop\first21\relax \else \atthetop\top11\hss\atthetop\first11\hss\atthetop\bot11\relax \fi \fi}% \wd2=\zeropoint\box2 \box0\relax}% \egroup} \setvalue{synchronisatie\v!local}[#1]% {\bgroup %\setupinteraction[\c!width=\!!zeropoint]% \setinteractionparameter\c!width\!!zeropoint \def\blackrule{\hbox{\vrule\!!height.5em\!!width.5em}}% %\gotodestination % {}{##1}{\syncprefix:#1}{0} % {\color[\locationcolor\@@bacolor]{\blackrule}}% \gotobox % {\color[\locationcolor\@@bacolor]{\blackrule}}% [#1::\syncprefix:\synccounter]% \egroup} \def\synchronizationbar[#1][#2]% {\iflocation\ifsynchronisation \bgroup \setupsynchronizationbar [\c!text=\getvalue{doc:des:#1},#2]% \getvalue{synchronisatie\@@baalternative}[#1]% \egroup \fi\fi} % A nice application of glue. All this code will be rewritten and % generalized. \newbox\interactionbarbox \newif\ifbarsymbol \def\dogotosomepage#1#2#3% nog checken ! {\checkreferences % nodig ?? \hbox {\iflocation \ifnum#3=\realpageno #2% \else \gotorealpage\empty\empty{#3}{\doifsomething{#1}{\dolocationattributes{#1}\c!style\c!color}{#2}}% \fi \else #2% \fi}} \def\dogotosomecontrastpage#1#2#3% nog checken, may replace previous {\checkreferences % nodig ?? \hbox {\iflocation \ifnum#3=\realpageno \gotorealpage\empty\empty{#3}{\doifsomething{#1}{\dolocationattributes{#1}\c!style\c!contrastcolor}{#2}}% \else \gotorealpage\empty\empty{#3}{\doifsomething{#1}{\dolocationattributes{#1}\c!style\c!color}{#2}}% \fi \else #2% \fi}} \presetlocalframed[\??ib] \def\interactionbara % we need better control over contrastcolor {\iflocation % maybe just use gotopage and set colors \bgroup \setinteractionparameter\c!width\zeropoint \setupblackrules[\c!height=\v!max,\c!depth=\v!max]% \!!widthb\dimexpr\@@ibwidth-2.75\emwidth\relax \!!widtha\dimexpr\!!widthb/\lastpage\relax \bgroup \advance\realpageno\minusone \ifvoid\interactionbarbox \bgroup \processaction [\@@ibstep] [ \v!small=>\scratchdimen.25\emwidth, \v!medium=>\scratchdimen.5\emwidth, \v!big=>\scratchdimen\emwidth, \s!unknown=>\scratchdimen\!!widtha]% \ifdim\!!widtha<\scratchdimen\relax \!!counta\numexpr\scratchdimen/\!!widtha\relax \else \!!counta\@@ibstep\relax \fi \!!widtha\!!counta\!!widtha \setbox\scratchbox\hbox{\blackrule[\c!width=\!!widtha,\c!color=middlegray]}% color here, else no mkiv \global\setbox\interactionbarbox\hbox to \!!widthb {\hss \dostepwiserecurse\plusone\lastpage\!!counta {\gotorealpage\empty\empty\recurselevel{\copy\scratchbox}}% \hss}% \wd\interactionbarbox\zeropoint \egroup \fi \egroup \noindent \strut \hbox to \@@ibwidth {\dontcomplain \setupblackrules[\c!width=\emwidth]% \dogotosomecontrastpage\??ib\blackrule\firstpage \hss \copy\interactionbarbox \hbox to \!!widthb {\ifdim\!!widtha<\emwidth \!!widtha\emwidth \fi \setupblackrules[\c!width=\!!widtha]% \ifnum\realpageno>\plusone \!!counta\numexpr\realpageno-\plustwo\relax \hskip\zeropoint\!!plus\!!counta \s!sp\relax % cm gives overflow \dogotosomepage\??ib\blackrule\prevpage \fi \dogotosomecontrastpage\??ib{\blackrule[\c!width=.5em]}\realpageno \ifnum\realpageno<\lastpage\relax \dogotosomepage\??ib\blackrule\nextpage \!!counta\numexpr\lastpage-\realpageno-\plusone\relax \hskip\zeropoint\!!plus\!!counta \s!sp\relax % cm gives overflow \fi}% \hss \dogotosomecontrastpage\??ib\blackrule\lastpage}% \egroup \fi} \def\interactionbarb {\ifnum\lastpage>\firstpage\relax \interactionbuttons[\v!firstpage,\v!previouspage,\v!nextpage,\v!lastpage]% \fi} \def\interactionbarc {\iflocation \ifnum\lastpage>\plusone \hbox to \@@ibwidth {\setupblackrules[\c!height=\@@ibheight,\c!depth=\@@ibdepth]% \scratchdimen\dimexpr(\@@ibwidth-4\emwidth)/\numexpr\lastpage+\minusone\relax\relax \!!widtha\numexpr\realpageno+\minusone\relax\scratchdimen \!!widthb\numexpr\lastpage-\realpageno\relax\scratchdimen \startcolor[\locationcolor\@@ibcolor]% \dogotosomepage\empty{\blackrule[\c!width=\emwidth]}\firstpage \hss \dogotosomepage\empty{\blackrule[\c!width=\!!widtha]}\prevpage \color[\@@ibcontrastcolor]{\blackrule[\c!width=\emwidth]}% \dogotosomepage\empty{\blackrule[\c!width=\!!widthb]}\nextpage \hss \dogotosomepage\empty{\blackrule[\c!width=\emwidth]}\lastpage \stopcolor}% \fi \fi} \def\interactionbard {\iflocation\ifshowingsubpage \ifnum\nofsubpages>\plusone \hbox \bgroup \setinteractionparameter\c!width\!!zeropoint \ifbarsymbol \setupsymbolset[\@@iasymbolset]% \def\dogotox##1% {\hbox{\symbol[\ifcase##1 \v!previous\or\v!somewhere\or\v!next\fi]}}% \else \def\dogotox##1% {\hbox{\vrule\!!height\@@ibheight\!!depth \@@ibdepth\!!width \@@ibwidth}}% \fi \dostepwiserecurse\plusone\nofsubpages\plusone {\bgroup \scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax \ifnum\scratchcounter<\realpageno\relax \dogotosomecontrastpage\??ib{\dogotox0}\scratchcounter \else\ifnum\scratchcounter=\realpageno\relax \dogotosomecontrastpage\??ib{\dogotox1}\scratchcounter \else \dogotosomecontrastpage\??ib{\dogotox2}\scratchcounter \fi\fi \egroup \hskip\@@ibdistance}% \unskip % not needed \egroup \fi \fi\fi} \def\interactionbare% KAN WORDEN GECOMBINEERD MET D {\iflocation\ifshowingsubpage \ifnum\nofsubpages>\plusone \bgroup \!!widthb\dimexpr\nofsubpages\dimexpr\@@ibdistance\relax-\@@ibdistance\relax % (n-1) \!!widtha\dimexpr(\@@ibwidth-\!!widthb)/\nofsubpages\relax \ifdim\!!widtha<\@@ibdistance\relax \interactionbarf \else \setinteractionparameter\c!width\!!zeropoint \noindent \hbox to \@@ibwidth \bgroup \ifbarsymbol \setupsymbolset[\@@iasymbolset]% \def\dogotox##1% {\hbox{\symbol[\ifcase##1 \v!previous\or\v!somewhere\or\v!next\fi}}% \else \def\dogotox##1% {\hbox{\vrule\!!height\@@ibheight\!!depth\@@ibdepth\!!width\!!widtha}}% \fi \dostepwiserecurse\plusone\nofsubpages\plusone {\bgroup \scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax \ifnum\scratchcounter<\realpageno\relax \dogotosomecontrastpage\??ib{\dogotox0}\scratchcounter \else\ifnum\scratchcounter=\realpageno\relax \dogotosomecontrastpage\??ib{\dogotox1}\scratchcounter \else \dogotosomecontrastpage\??ib{\dogotox2}\scratchcounter \fi\fi \egroup \hss}% \unskip \egroup \fi \egroup \fi \fi\fi} \def\interactionbarf % !! KAN WORDEN GECOMBINEERD MET D !! {\iflocation\ifshowingsubpage \ifnum\nofsubpages>\plusone \setinteractionparameter\c!width\!!zeropoint \noindent \hbox to \@@ibwidth \bgroup \!!countb\zerocount \loop % todo: \doloop \advance\!!countb \plusone %\!!countc\nofsubpages \divide\!!countc \!!countb \advance\!!countc \plusone \!!countc\numexpr(\nofsubpages/\!!countb)+\plusone\relax % rounding \!!widthb\@@ibdistance \multiply\!!widthb \!!countc \advance\!!widthb -\@@ibdistance \!!widtha\@@ibwidth \advance\!!widtha -\!!widthb \divide\!!widtha \!!countc \ifdim\!!widtha<\@@ibdistance\relax \repeat \ifnum\!!countc>\plusone % this is not that well tested \advance\!!countc \minustwo \!!widtha-\@@ibdistance \!!widtha\!!countc\!!widtha \advance\!!widtha \@@ibwidth \advance\!!countc \plusone \divide\!!widtha \!!countc \fi \ifbarsymbol \setupsymbolset[\@@iasymbolset]% \def\dogotox##1% {\hbox{\symbol[\ifcase##1 \v!previous\or\v!somewhere\or\v!somewhere\or\v!somewhere\or\v!next\fi}}% \else \def\dogotox##1% {\hbox {\!!heighta\@@ibheight \!!deptha\@@ibdepth \ifcase##1\relax \vrule\!!height \!!heighta\!!depth \!!deptha\!!width\!!widtha \or \vrule\!!height.5\!!heighta\!!depth.5\!!deptha\!!width\!!widtha \or \vrule\!!height \!!heighta\!!depth \!!deptha\!!width\!!widtha \or \vrule\!!height.5\!!heighta\!!depth.5\!!deptha\!!width\!!widtha \or \vrule\!!height \!!heighta\!!depth \!!deptha\!!width\!!widtha \fi}}% \fi \!!countc\numexpr\realpageno-\plustwo\relax \!!countd\numexpr\realpageno+\plustwo\relax \ifnum\!!countc<\plusone \!!countc\plusone \fi \!!countf\zerocount \dostepwiserecurse\firstsubpage\lastsubpage\plusone {\!!doneafalse \advance\!!countf \plusone \ifnum\recurselevel=\firstsubpage\relax \!!doneatrue \fi \ifnum\recurselevel=\lastsubpage\relax \!!doneatrue \fi \if!!donea \ifnum\recurselevel<\realpageno \dogotosomecontrastpage\??ib{\dogotox0}\recurselevel \else\ifnum\recurselevel>\realpageno \dogotosomecontrastpage\??ib{\dogotox2}\recurselevel \else \dogotosomecontrastpage\??ib{\dogotox4}\recurselevel \fi\fi \hss \!!countf\zerocount \else\ifnum\!!countf=\!!countb \ifnum\recurselevel<\realpageno \dogotosomecontrastpage\??ib{\dogotox1}\recurselevel \else\ifnum\recurselevel>\realpageno \dogotosomecontrastpage\??ib{\dogotox3}\recurselevel \else \dogotosomecontrastpage\??ib{\dogotox2}\recurselevel \fi\fi \hss \!!countf\zerocount \fi\fi}% \unskip \egroup \fi \fi\fi} \def\interactionbarg {\ifnum\lastsubpage>\firstsubpage\relax \interactionbuttons[\v!firstsubpage,\v!previoussubpage,\v!nextsubpage,\v!lastsubpage]% \fi} \def\checkinteractionbar#1#2#3% {\ifdim\@@ibwidth=\zeropoint\def\@@ibwidth{#1}\fi \doifnothing\@@ibheight{\def\@@ibheight{#2}}% \doifnothing\@@ibdepth{\def\@@ibdepth{#3}}} \def\complexinteractionbar[#1]% {\doifelse{#1}\v!reset {\global\setbox\interactionbarbox\emptybox}% {\bgroup \iflocation \checksubpages % goes wrong / loads \numberofpages too \getparameters[\??ib][#1]% \doif\@@ibstate\v!start {\startinteraction \processaction % breedte defaults ! [\@@ibalternative] [ c=>\checkinteractionbar{10em}\v!max \v!max, d=>\checkinteractionbar{.5em}{.5em} \!!zeropoint, e=>\checkinteractionbar{10em}{.5em} \!!zeropoint, f=>\checkinteractionbar{10em}{.5em} \!!zeropoint, \s!default=>\checkinteractionbar{10em}\v!broad\!!zeropoint, \s!unknown=>\checkinteractionbar{10em}\v!broad\!!zeropoint]% \doifelse\@@ibsymbol\v!yes \barsymboltrue\barsymbolfalse \getvalue{interactionbar\@@ibalternative}% \stopinteraction}% \fi \egroup}} \definecomplexorsimpleempty\interactionbar \def\setupinteractionbar {\dodoubleargument\getparameters[\??ib]} % Er wordt vooralsnog uitgegaan van een symmetrische % start-stop situatie. \def\c!profiel!! {profiel:} % brrr \def\c!versie!! {versie:} \def\dodefineprofile[#1][#2]% {\iflocation \def\dododefineprofile##1% {\def\dodododefineprofile####1% {\doifdefinedelse{\c!profiel!!####1}% {\edef\!!stringa{\getvalue{\c!profiel!!####1}}% \setevalue{\c!profiel!!####1}{\!!stringa,##1}}% {\setevalue{\c!profiel!!####1}{##1}}}% \processcommalist[#2]\dodododefineprofile}% \processcommalist[#1]\dododefineprofile \fi} \def\defineprofile% {\dodoubleargument\dodefineprofile} % Als met \getpar wordt gewerkt, dan moet \next worden toegepast. % TZT initialisatie! \def\profilepage{} \let\dosetprofilepage\relax \let\dogetprofilepage\relax \def\processprofile#1[#2]% {\iflocation \par % needed for pdftex \bgroup \dosetprofilepage \dogetprofilepage \def\processoneprofile##1##2% {\ExpandBothAfter\doifinsetelse{##2}{\processedprofiles}% {\doifsomething{##1}{(##1)}}% {\addtocommalist{##2}\processedprofiles ##1\relax \ifcase#1\relax \dobeginofprofile{##2}\paperwidth\paperheight\profilepage \else \doendofprofile \fi}}% \let\processedprofiles\empty \def\doprocessprofile##1% {\doifelse{\@@pfoption}{\v!test}% {\goodbreak\blank\nobreak\tt[\space \ifcase#1\v!start\else\v!stop\fi profiel\space ##1:\space \doifdefinedelse{\c!profiel!!##1}% {\def\dodoprocessprofile####1% {\processoneprofile {\goto{####1}[\c!profiel!!####1]}% {####1}% \space}% \processcommacommand [\getvalue{\c!profiel!!##1}]\dodoprocessprofile}% {- }% ]\nobreak\blank}% {\doifdefined{\c!profiel!!##1}% {\def\dodoprocessprofile####1% {\processoneprofile{}{####1}}% \processcommacommand [\getvalue{\c!profiel!!##1}]\dodoprocessprofile}}}% \processcommalist[#2]\doprocessprofile \egroup \par % needed for pdftex \fi} \def\startprofile[#1]% {\iflocation \bgroup \addtocommalist{#1}\actualprofile \def\stopprofile% {\processprofile1[#1]% \egroup}% \def\next{\processprofile0[#1]}% % \DoAfterFi \processprofile0[#1]% \else % ^^^^^^^^^^ will be obsolete \let\next\relax % since ugly and never used \fi \next} \let\stopprofile\relax \def\dofollowprofile#1[#2]% {\iflocation \hbox {\dohandlegoto {\dolocationattributes\??ia\c!style\c!color{#1\presetgoto}}% {\dostartgotoprofile\buttonwidth\buttonheight{#2}}% {\dostopgotoprofile}}% \else {#1}% \fi} \def\followprofile#1[#2]% {\iflocation \doif\@@pfoption\v!test{\pagereference[\c!profiel!!#2]}% \dofollowprofile{#1}[#2]% \fi} \def\setupprofiles% {\dodoubleargument\getparameters[\??pf]} % Als er nog geen tekst op de pagina staat, dan heeft het % profiel betrekking op het bovenstaande, dus soms een vorige % pagina! Vreemd, omdat PDF paginagewijs werkt. Gelukkig % biedt /page een oplossing. Echter: expansie van een % \special kan niet worden uitgesteld, zodat alleen een % two-pass een oplossing vormt. Het onderstaande kan komen % te vervallen als Acrobat dit ondervangt. Het scheelt een % pass en een lijst. % % Er kunnen eventueel twee lijsten worden gebruikt. Een voor % het begin (start) en een voor het eind (stop). Nu staat % alles in een lijst. \definetwopasslist\s!profile \newcounter\currentprofile \def\dosetprofilepage% {\doglobal\increment\currentprofile \lazysavetwopassdata{\s!profile}{\currentprofile}{\noexpand\realfolio}} \def\dogetprofilepage% {\gettwopassdata{\s!profile}% \let\profilepage=\twopassdata} % is this stuff used at all \newcounter\versionlevel \newcounter\versionorder \newif\ifrecentversion \let\oldatcharacter=@ \def\minimumversion{0} \def\actualversion{0} \def\dosetupversions[#1]% {\getparameters[\??ve][#1] \stripcharacter.\from\@@venumber\to\minimumversion} \def\setupversions {\dosingleargument\dosetupversions} \definetwopasslist\s!versionbegin \definetwopasslist\s!versionend \let\actualprofile\empty \def\doresetpageversion {\lazysavetwopassdata{\s!versionend}{\versionorder}{\noexpand\realfolio}} \def\dosetpageversion#1% {\recentversiontrue \doglobal\increment\versionorder\relax \lazysavetwopassdata{\s!versionbegin}{\versionorder}{\noexpand\realfolio}% \let\resetpageversion\doresetpageversion} \def\recentcontributions{} \def\checkrecentcontributions% {\gettwopassdata{\s!versionbegin}% \iftwopassdatafound \!!counta\twopassdata\relax \gettwopassdata{\s!versionend}% \iftwopassdatafound \!!countb\twopassdata\relax \doglobal\increment\versionorder\relax \savetwopassdata{\s!versionbegin}{\versionorder}{\the\!!counta}% \savetwopassdata{\s!versionend }{\versionorder}{\the\!!countb}% \dostepwiserecurse\!!counta\!!countb\plusone {\@EA\doglobal\@EA\addtocommalist\@EA{\recurselevel}{\recentcontributions}}% \let\next\checkrecentcontributions \else \let\next\relax \fi \else \let\next\relax \fi \next} \def\docheckpageversion {\ExpandBothAfter\doifinsetelse{\realfolio}{\recentcontributions} {\pageselectedtrue}% {\pageselectedfalse}} \let\setpageversion \gobbleoneargument \let\resetpageversion \relax \let\checkpageversion \relax \def\complexstartversion[#1]% {\bgroup \doifelsenothing\actualprofile {\startprofile[#1]}% {\startprofile[#1,\actualprofile]}% \def\docomplexstartversie##1% {\stripcharacter.\from##1\to\actualversion \ifnum\versionlevel>\zerocount\relax \ifnum\actualversion=\zerocount \setpageversion\actualversion % unknown version \else \ifnum\actualversion<\minimumversion\relax \relax % old version \else \setpageversion\actualversion % new version \fi \fi \fi}% \doglobal\increment\versionlevel\relax \doifelsenothing{#1} {\docomplexstartversie{0}}% {\processcommalist[#1]\docomplexstartversie}} \definecomplexorsimpleempty\startversion \def\stopversion {\stopprofile \doglobal\decrement\versionlevel \ifnum\versionlevel<\zerocount \showmessage\m!versions1\empty \else \resetpageversion \egroup \fi} \def\markversion {\showmessage\m!versions2\empty \let\setpageversion\dosetpageversion \let\resetpageversion\relax \let\checkpageversion\relax} \def\selectversion {\checkrecentcontributions \showmessage\m!versions3\recentcontributions \let\setpageversio\gobbleoneargument \let\resetpageversion\relax \let\checkpageversion\docheckpageversion} \def\dodefineversion[#1][#2]% {\setvalue{\c!versie!!#1}{#2}% \defineprofile[#1][#2]} \def\defineversion {\dodoubleargument\dodefineversion} \def\followversion {\followprofile} \def\followprofileversion#1[#2][#3]% {\def\docommand##1% {\defineprofile[#2#3][##1]}% \processcommacommand[\getvalue{\c!versie!!#3}]\docommand \followprofile#1[#2#3]} \newcounter\currentpagetransition \newif\ifrandomtransitions \def\setuppagetransitions% {\dosingleempty\dosetuppagetransitions} \def\dosetuppagetransitions[#1]% {\doifelsenothing{#1} {\doifnot\@@scdelay\v!none {\let\setpagetransition\setsomepagedelay}} {\doifelse{#1}\v!start {\doifnot\@@scdelay\v!none {\let\setpagetransition\setsomepagedelay}} {\doglobal\newcounter\currentpagetransition \doifinsetelse{#1}{\v!reset,\v!stop} {\let\setpagetransition\relax} {\let\setpagetransition\setsomepagetransition \doifinsetelse\v!random{#1} {\randomtransitionstrue}{\randomtransitionsfalse}% \edef\userpagetransitions{#1}% \@EA\removefromcommalist\@EA{\v!random}\userpagetransitions \ifx\userpagetransitions\empty \let\userpagetransitions\pagetransitions \fi}}}} \def\setsomepagedelay {\expanded{\dosetpagetransition{0}{\@@scdelay}}} \def\setsomepagetransition {\iflocation \ifrandomtransitions \expanded{\getcommalistsize[\userpagetransitions]}% \getrandomnumber\currentpagetransition1\commalistsize \else \doglobal\increment\currentpagetransition \fi \expanded{\getfromcommalist[\userpagetransitions][\currentpagetransition]}% \doifnumberelse\commalistelement {\expanded{\getfromcommalist[\pagetransitions][\commalistelement]}} {}% \ifx\commalistelement\empty \doglobal\newcounter\currentpagetransition \setsomepagetransition \else \doifelse\@@scdelay\v!none {\expanded{\dosetpagetransition{\commalistelement}{0}}} {\expanded{\dosetpagetransition{\commalistelement}{\@@scdelay}}}% \fi \fi} \prependtoks \setpagetransition \to \everyshipout % temporary here %D \startbuffer %D \dorecurse{10} %D {\horizontalpositionbar %D \pos\recurselevel \min1 \max10 %D \token\framed{\recurselevel}% %D \\} %D %D \hbox to 15em %D {\hss %D \dorecurse{10} %D {\verticalpositionbar\pos\recurselevel\min1\max10\token\blackrule\\ %D \hss}} %D \stopbuffer \def\horizontalpositionbar\pos#1\min#2\max#3\token#4\\% {\hbox to \hsize {\hskip\zeropoint\!!plus #1\!!fill \hskip\zeropoint\!!plus-#2\!!fill #4\relax \hskip\zeropoint\!!plus #3\!!fill \hskip\zeropoint\!!plus-#1\!!fill}} \def\verticalpositionbar\pos#1\min#2\max#3\token#4\\% {\vbox to \vsize {\vskip\zeropoint\!!plus #1\!!fill \vskip\zeropoint\!!plus-#2\!!fill \hbox{#4}\relax \vskip\zeropoint\!!plus #3\!!fill \vskip\zeropoint\!!plus-#1\!!fill}} \def\horizontalgrowingbar\pos#1\min#2\max#3\height#4\depth#5\\% {\hbox to \hsize {\scratchcounter#1% \advance\scratchcounter -#2% \advance\scratchcounter \plusone \leaders\vrule\hskip\zeropoint\!!plus \scratchcounter\!!fill \vrule\!!width\zeropoint\!!height#4\!!depth#5% \hskip\zeropoint\!!plus #3\!!fill \hskip\zeropoint\!!plus-#1\!!fill}} \def\verticalgrowingbar\pos#1\min#2\max#3\width#4\\% {\vbox to \vsize {\scratchcounter#1% \advance\scratchcounter -#2% \advance\scratchcounter \plusone \leaders\hrule\vskip\zeropoint\!!plus\scratchcounter\!!fill \hrule\!!width#4\!!height\zeropoint\!!depth\zeropoint \vskip\zeropoint\!!plus #3\!!fill \vskip\zeropoint\!!plus-#1\!!fill}} \newbox\commentbox \def\doflushcommentanchors {\let\next\relax % new \processaction [\@@cclocation] [% \v!text=>\let\next\relax, % new \v!inmargin=>\let\next\inmargin, % brr not the same as inleft|rightmargin \v!leftedge=>\let\next\inleftedge, \v!rightedge=>\let\next\inrightedge, \v!leftmargin=>\let\next\inleftmargin, \v!rightmargin=>\let\next\inrightmargin]% \next{\hbox{\raise\strutht\box\commentbox}}} \def\flushcommentanchors % in everypar so indirect {\ifvoid\commentbox\else \doflushcommentanchors \fi} \def\setupcomment {\dodoubleargument\getparameters[\??cc]} \setvalue{\e!start\v!comment}% the dummy triple gobbles trailing spaces {\dotripleempty\dostartcommentaar} \def\comment {\dodoubleempty\docomment} \def\dodocomment#1% {\!!widtha\@@ccwidth \!!heighta\@@ccheight \doifelse\@@ccoption\v!max {\let\@@ccopen \!!plusone}{\let\@@ccopen \!!zerocount}% \doifelse\@@ccoption\v!buffer {\let\@@cccollect\!!plusone}{\let\@@cccollect\!!zerocount}% \preparecommentvariables \doinsertcomment \@@cctitle\!!widtha\!!heighta \@@cccolor\@@ccopen\@@ccsymbol \@@cccollect{#1}} \def\preparecommentvariables % more will move here as with fields {\let\@@DriverCommentLayer\@@cctextlayer} \def\dopreparecommentaar#1#2% {\doifassignmentelse{#1} {\getparameters[\??cc][#1]} {\getparameters[\??cc][\c!title=#1,#2]}% \obeylines \doif\@@ccspace\v!yes\obeyspaces} \def\dostartcommentaar[#1][#2][#3]% {\bgroup \doifelse\@@ccstate\v!start {\dopreparecommentaar{#1}{#2}% \long\def\docommand##1% {\global\setbox\commentbox\frozenhbox {\hbox to \zeropoint {\struttedbox{\tbox{\dodocomment{##1}}}\hss}% \hskip\ifvoid\commentbox\@@ccmargin\else\@@ccdistance\fi \box\commentbox}% \egroup}}% {\long\def\docommand##1% {\egroup}}% \grabuntil{\e!stop\v!comment}\docommand} \letvalue{\e!stop\v!comment}\relax % handy for \expanded{...} \def\docomment[#1][#2]#3% {\doif\@@ccstate\v!start {\hbox to \zeropoint {\dopreparecommentaar{#1}{#2}% \hskip-\@@ccmargin \struttedbox{\tbox{\dodocomment{#3}}\hss}}}% \ignorespaces} % \startcomment % hello beautiful\\world % \stopcomment % % \startcomment[hello] % hello << \'e\'erste >> % beautiful % world % \stopcomment % % \startcomment[hello][color=green,width=4cm,height=3cm] % hello \leftguillemot\ \'e\'erste \rightguillemot\ % beautiful % world % \stopcommentaar % % \startcomment[hello][color=green,width=4cm,height=3cm] % hello \leftguillemot\ \'e\'erste \rightguillemot\ test % % beautiful % % world % \stopcomment % % \startcomment[symbol=Balloon] % Do we want this kind of rubish? And, why isn't this and % some more features related to text annotations so poorly % (actually not) documented? Anyhow, by providing this % functionality we demonstrate that \pdfTeX\ can do it. By % the way, it's funny that when in Acrobat we scale up the % text, the symbols scale down. % \stopcomment % \definesymbol [comment-normal][{\externalfigure[cow.pdf]}] % \definesymbol [comment-down] [{\externalfigure[cow.pdf]}] % % \def\CowSymbol#1#2% % {\scale % [\c!height=#1] % {\startMPcode % loadfigure "koe.mp" number 1 ; % refill currentpicture withcolor #2 ; % \stopMPcode}} % % \definesymbol [comment-normal] % [\CowSymbol{4ex}{red}] % % \definesymbol [comment-down] % [\CowSymbol{4ex}{green}] % % \setupcomment % [\c!symbol={comment-normal,comment-down}, % \c!option=\v!buffer] % % \setupfootertexts[\placecomments] \def\placecomments {\doflushcomments} % \setupinteraction[state=start] % % \useattachment[test.tex] % \useattachment[whatever][test.tex] % \useattachment[whatever][newname][test.tex] % \useattachment[whatever][title][newname][test.tex] % % % \setupattachments[\c!symbol={symbol-normal,symbol-down}] % % \starttext \attachment[whatever] \stoptext \def\useattachment {\doquadrupleempty\douseattachment} \def\douseattachment[#1][#2][#3][#4]% tag title newname filename {\iffourthargument \setgvalue{\??at:#1}{{#2}{#3}{#4}}% tooltip kind of case \else\ifthirdargument \setgvalue{\??at:#1}{{#2}{#2}{#3}}% full path case \else\ifsecondargument \setgvalue{\??at:#1}{{#2}{#2}{#2}}% obvious case \else \setgvalue{\??at:#1}{{#1}{#1}{#1}}% worst case \fi\fi\fi} \let\attachmenttitle\empty \let\attachmentname \empty \let\attachmentfile \empty \def\getattachmentdata[#1]% {\edef\attachmenttitle{\filterfromvalue{\??at:#1}31}% description \edef\attachmentname {\filterfromvalue{\??at:#1}32}% new name \edef\attachmentfile {\filterfromvalue{\??at:#1}33}% original \expandafter\splitstring\attachmentname\at.\to\!!stringa\and\!!stringb \ifx\!!stringb\empty % no suffix, so we need to inherit it \expandafter\splitstring\attachmentfile\at.\to\!!stringc\and\!!stringd \edef\attachmentname{\attachmentname.\!!stringd}% \fi} \def\attachment {\dodoubleempty\doattachment} \def\doattachment[#1][#2]% currently title equals newname {\iflocation \ifsecondargument \doifundefined{\??at:#2} {\showmessage\m!interactions6{#2}% \useattachment[#2]}% \doif\@@atstate\v!start {\bgroup \getattachmentdata[#2]% \doiffileelse\attachmentfile {\setupattachments[#1]% \presetattachmentvariables \struttedbox{\tbox{% \doattachfile \attachmenttitle {1em}\strutheight\strutdepth\@@atcolor\@@atsymbol \attachmentname \attachmentfile}% }}% {\showmessage\m!interactions5\attachmentfile}% \egroup}% \else\iffirstargument \attachment[][#1]% \fi\fi \fi} \def\presetattachmentvariables {\let\@@DriverAttachmentLayer\@@attextlayer} \def\setupattachments {\dodoubleempty\getparameters[\??at]} \setupattachments [\c!state=\v!start, \c!color=\@@iacolor, \c!textlayer=, \c!symbol=] % jammer, tussen/midden had erin gemoeten; \c!commando toevoegen \def\registermenucommand#1% {{\textonly\noindent#1\space}} % no math switching \def\doregistermenubuttons[#1][#2]% [menu id] [register] {\bgroup \ifsecondargument \setupinteractionmenu [#1][\c!unknownreference=\v!yes,\c!samepage=\v!yes]% \def\docommand##1% {\registermenucommand{\menubutton[#1]{##1}[#2:##1]}}% \else \def\docommand##1% {\registermenucommand {\button [\c!unknownreference=\v!yes,\c!samepage=\v!yes] {##1}[#1:##1]}}% \fi \handletokens abcdefghijklmnopqrstuvwxyz\with\docommand % moet anders \egroup} \def\registermenubuttons {\dodoubleempty\doregistermenubuttons} % It took quite a while to figure this out (using the preliminary 1.5 % spec). There are still a lot of things to be implemented. This is % the third alternative. % todo: multiple instances, dus indirect \let\currentrendering\empty \definereference[StartCurrentRendering] [\v!StartRendering {\currentrendering}] \definereference[StopCurrentRendering] [\v!StopRendering {\currentrendering}] \definereference[PauseCurrentRendering] [\v!PauseRendering {\currentrendering}] \definereference[ResumeCurrentRendering][\v!ResumeRendering{\currentrendering}] \newcounter\nofexternalrenderings \def\useexternalrendering{\doquadrupleempty\douseexternalrendering} \def\setinternalrendering{\dodoubleempty \dosetinternalrendering} \def\douseexternalrendering[#1][#2][#3][#4]% tag mime file options {\setgvalue{\??rd:#1}{\plusone{#1}{#2}{#3}{#4}}} \def\dosetinternalrendering[#1][#2]% tag options {content} {\bgroup \dowithnextbox {\setgvalue{\??rd:#1}{\plustwo{#1}{IRO}{#1}{#2}}% \let\objectoffset\zeropoint \setobject{IRO}{#1}\hbox{\box\nextbox}% \egroup}% \hbox} \def\checkrendering#1% let's hope that \next is not used {\iflocation \doifsomething{#1}% {\doifdefined{\??rd:#1}% {\expanded{\getvalue{\??rd::\number\renderingtype{#1}}% {\filterfromvalue{\??rd:#1}52}{\filterfromvalue{\??rd:#1}53}% {\filterfromvalue{\??rd:#1}54}{\filterfromvalue{\??rd:#1}55}}}}% \fi} \setvalue{\??rd::1}{\doinsertrendering} \setvalue{\??rd::2}{\doinsertrenderingobject} \def\renderingtype #1{\filterfromvalue{\??rd:#1}51} \def\renderingoptions#1{\filterfromvalue{\??rd:#1}55} \setexecutecommandcheck {startrendering} \checkrendering \setexecutecommandcheck {stoprendering} \checkrendering \setexecutecommandcheck {pauserendering} \checkrendering \setexecutecommandcheck {resumerendering} \checkrendering % by using a nice trick (used in other places of context as well) we % can easily overload the default size to match the opbject size \def\renderingwidth {8cm} \def\renderingheight{6cm} \def\definerenderingwindow {\dodoubleempty\dodefinerenderingwindow} \def\dodefinerenderingwindow[#1][#2]% {\presetlocalframed[\??rw#1]% \getparameters% [\??rw#1]% [\c!openpageaction=,\c!closepageaction=,% \c!width=\renderingwidth,\c!height=\renderingheight,% #2]} \def\setuprenderingwindow {\dodoubleargument\dosetuprenderingwindow} \def\dosetuprenderingwindow[#1]% {\getparameters[\??rw#1]} \def\placerenderingwindow {\dodoubleempty\doplacerenderingwindow} \def\doplacerenderingwindow[#1][#2]% {\bgroup \edef\currentrendering{\ifsecondargument#2\else#1\fi}% \ifcase\renderingtype\currentrendering\or % a file \or % an object \getobjectdimensions{IRO}\currentrendering \scratchdimen\objectheight \advance\scratchdimen\objectdepth \edef\renderingheight{\the\scratchdimen}% \edef\renderingwidth{\objectwidth}% \fi % create fall back if needed \doifdefinedelse{\??rw#1\c!width} {\def\currentrenderingwindow{#1}} {\let\currentrenderingwindow\s!default \definerenderingwindow[\currentrenderingwindow]}% \checkrendering\currentrendering \handlereferenceactions{\getvalue{\??rw\currentrenderingwindow\c!openpageaction }}\dosetuprenderingopenpageaction \handlereferenceactions{\getvalue{\??rw\currentrenderingwindow\c!closepageaction}}\dosetuprenderingclosepageaction \localframed [\??rw\currentrenderingwindow][\c!offset=\v!overlay]% {\expanded{\doinsertrenderingwindow \noexpand\currentrendering\hsize\vsize{\renderingoptions\currentrendering}}}% \egroup} % todo: % % \setinternalrendering[example-1][options]{} % test file: % % \definerenderingwindow % [example] % [width=320pt,height=150pt,frame=off, % background=color,backgroundcolor=gray, % openpageaction=StartCurrentRendering, % closepageaction=NextPage]% StopCurrentRendering] % % \useexternalrendering[example-1][audio/mpeg] [eldorado.mp3] % \useexternalrendering[example-2][audio/mpeg] [myst-12.mp3] % \useexternalrendering[example-3][application/x-shockwave-flash][http://localhost/mb.swf] [auto] % \useexternalrendering[example-4][application/x-shockwave-flash][celebration.swf] % \useexternalrendering[example-5][video/quicktime] [p1000726.mov] % \useexternalrendering[example-6][application/smil] [quadratic_map.smi] % % \def\renderingmenu[#1]% % {\hbox % {\setupbuttons[width=2.5em]% % \button{\symbol[StartRendering]} [StartRendering{#1}]\enspace % \button{\symbol[StopRendering]} [StopRendering{#1}]\enspace % \button{\symbol[PauseRendering]} [PauseRendering{#1}]\enspace % \button{\symbol[ResumeRendering]}[ResumeRendering{#1}]}} % % \renderingmenu[example-1]\blank % \renderingmenu[example-2]\blank % \renderingmenu[example-3]\blank % \renderingmenu[example-4] \placefigure{A ShockWave}{\placerenderingwindow[example][example-4]} \page % \renderingmenu[example-5] \placefigure{A Movie}{\placerenderingwindow[example][example-5]} \page % \renderingmenu[example-6] \placefigure{A Smile}{\placerenderingwindow[example][example-6]} \stelkoppelingenin [\c!distance=.25em, \c!width=\v!fit, \c!location=\v!low, \c!color=\@@iacolor, \c!frame=\v!off, \c!background=, \c!backgroundscreen=\@@rsscreen, \c!backgroundcolor=] \defineinteractionmenu [\v!right] [\v!right] [\c!before=, \c!after=\vfil, \c!inbetween=\blank, \c!distance=\bodyfontsize, % 12pt \c!left=\hss, \c!right=\hss, \c!width=\rightedgewidth, \c!height=\v!broad] \defineinteractionmenu [\v!left] [\v!left] [\c!before=, \c!after=\vfil, \c!inbetween=\blank, \c!distance=\bodyfontsize, % 12pt \c!left=\hss, \c!right=\hss, \c!width=\leftedgewidth, \c!height=\v!broad] \defineinteractionmenu [\v!bottom] [\v!bottom] [\c!before=\vss, \c!after=\vss, \c!middle=\hfil, \c!distance=\bodyfontsize, % 12pt \c!width=\v!fit, \c!height=\v!broad] \defineinteractionmenu [\v!top] [\v!top] [\c!before=\vss, \c!after=\vss, \c!middle=\hfil, \c!distance=\bodyfontsize, % 12pt \c!width=\v!fit, \c!height=\v!broad] \setupinteractionmenu [\v!left,\v!right,\v!top,\v!bottom] [\c!offset=.25em, \c!position=\v!no, \c!frame=\v!on, \c!background=, \c!backgroundcolor=, \c!backgroundscreen=\@@rsscreen, \c!style=\@@iastyle, \c!color=\@@iacolor, \c!contrastcolor=\@@iacontrastcolor, \c!state=\v!start, \c!samepage=\v!yes, \c!unknownreference=\v!empty, \c!topoffset=\!!zeropoint, \c!bottomoffset=\!!zeropoint, \c!leftoffset=\!!zeropoint, \c!rightoffset=\!!zeropoint] \def\placeleftedgetextblock % Is \hss/\hsize really needed here? {\hbox to \leftedgewidth % (check outer level and settings) {\hsize\leftedgewidth\hss\interactionmenus[\v!left]}} \def\placerightedgetextblock % Is \hss/\hsize really needed here? {\hbox to \rightedgewidth % (check outer level and settings) {\hsize\rightedgewidth\interactionmenus[\v!right]\hss}} \def\placetoptextblock {\vbox to \topheight {\vsize\topheight \csname\??tk\v!top\c!before\endcsname \interactionmenus[\v!top]% \csname\??tk\v!top\c!after\endcsname \kern\zeropoint}} \def\placebottomtextblock {\vbox to \bottomheight {\vsize\bottomheight \csname\??tk\v!bottom\c!before\endcsname \interactionmenus[\v!bottom]% \csname\??tk\v!bottom\c!after\endcsname \kern\zeropoint}} \ifx\leftedgetextcontent\undefined \else \appendtoks \placeleftedgetextblock \hskip-\leftedgewidth \to \leftedgetextcontent \appendtoks \placerightedgetextblock \hskip-\rightedgewidth \to \rightedgetextcontent \appendtoks \placetoptextblock \vskip-\topheight \to \toptextcontent \appendtoks \placebottomtextblock \vskip-\bottomheight \to \bottomtextcontent \fi \setupinteractionscreen [\c!width=\printpaperwidth, \c!height=\printpaperheight, \c!horoffset=\!!zeropoint, \c!veroffset=\!!zeropoint, \c!backspace=\backspace, \c!topspace=\topspace, \c!option=\v!min, \c!delay=\v!none] \setupbuttons [\c!state=\v!start, \c!width=\v!fit, \c!height=\v!broad, \c!offset=0.25em, \c!frame=\v!on, \c!background=, \c!backgroundscreen=\@@rsscreen, \c!backgroundcolor=, \c!style=\@@iastyle, \c!color=\@@iacolor, \c!contrastcolor=\@@iacontrastcolor, \c!samepage=\v!yes, \c!unknownreference=\v!yes] \setupinteractionbar [\c!state=\v!start, \c!alternative=a, \c!symbol=\v!no, \c!width=\rightedgewidth, \c!height=, % these are taken care \c!depth=, % of at calling time \c!distance=.5em, % beter relateren aan breedte \c!step=1, \c!color=\@@iacolor, \c!contrastcolor=\@@iacontrastcolor, \c!frame=\v!on, \c!background=, \c!backgroundscreen=\@@rsscreen, \c!backgroundcolor=, \c!samepage=\v!yes, \c!unknownreference=\v!yes] \setupsynchronizationbar [\c!alternative=\v!page, \c!width=\rightedgewidth, \c!style=\@@iastyle, \c!color=\@@iacolor, \c!background=, \c!backgroundscreen=\@@rsscreen, \c!backgroundcolor=] \setupsynchronization [\c!state=\v!stop] \setupprofiles [\c!option=] \setuppagetransitions [\v!reset] \setupcomment [\c!state=\v!start, \c!margin=2.5em, \c!distance=1em, \c!width=.3\textwidth, \c!height=.2\textheight, \c!color=\@@iacolor, \c!title=, \c!space=\v!no, \c!symbol=\v!normal, \c!location=\v!inmargin, \c!option=, \c!textlayer=] \setupversions % beware, @ is made active here, [\c!number=1, % therefore we set this one at the end \c!style=\ss, \c!color=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-ent.mkii0000644000175000017500000000766411754241457024322 0ustar norbertnorbert%D \module %D [ file=xtag-ent, %D version=2000.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=A bunch of Entities, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % We need this for French and Hungarian. \defineXMLentity [colon] {\directdiscretionary{:}} \defineXMLentity [semicolon] {\directdiscretionary{;}} \defineXMLentity [questionmark] {\directdiscretionary{?}} \defineXMLentity [exclamationmark] {\directdiscretionary{!}} % These will fall back to the raw encoding vector \defineXMLentity [Aacute] {\Aacute} \defineXMLentity [aacute] {\aacute} \defineXMLentity [Cacute] {\Cacute} % unofficial \defineXMLentity [cacute] {\cacute} % unofficial \defineXMLentity [Eacute] {\Eacute} \defineXMLentity [eacute] {\eacute} \defineXMLentity [Iacute] {\Iacute} \defineXMLentity [iacute] {\iacute} \defineXMLentity [Oacute] {\Oacute} \defineXMLentity [oacute] {\oacute} \defineXMLentity [Uacute] {\Uacute} \defineXMLentity [uacute] {\uacute} \defineXMLentity [Yacute] {\Yacute} \defineXMLentity [yacute] {\yacute} \defineXMLentity [Nacute] {\Nacute} \defineXMLentity [nacute] {\nacute} \defineXMLentity [Ccedil] {\Ccedilla} \defineXMLentity [ccedil] {\ccedilla} \defineXMLentity [AElig] {\AEligature} \defineXMLentity [aelig] {\aeligature} \defineXMLentity [Agrave] {\Agrave} \defineXMLentity [agrave] {\agrave} \defineXMLentity [Egrave] {\Egrave} \defineXMLentity [egrave] {\egrave} \defineXMLentity [Igrave] {\Igrave} \defineXMLentity [igrave] {\igrave} \defineXMLentity [Ograve] {\Ograve} \defineXMLentity [ograve] {\ograve} \defineXMLentity [Ugrave] {\Ugrave} \defineXMLentity [ugrave] {\ugrave} \defineXMLentity [THORN] {\Thorn} \defineXMLentity [thorn] {\thorn} \defineXMLentity [Aring] {\Aring} \defineXMLentity [aring] {\aring} \defineXMLentity [Oslash] {\Oslash} % stroke \defineXMLentity [oslash] {\oslash} \defineXMLentity [Lslash] {\Lslash} % unofficial \defineXMLentity [lslash] {\lslash} % unofficial \defineXMLentity [eth] {\eth} % ? \defineXMLentity [ETH] {\Eth} % ? \defineXMLentity [Atilde] {\Atilde} \defineXMLentity [atilde] {\atilde} \defineXMLentity [Etilde] {\Etilde} \defineXMLentity [etilde] {\etilde} \defineXMLentity [Itilde] {\Itilde} \defineXMLentity [itilde] {\itilde} \defineXMLentity [Ntilde] {\Ntilde} \defineXMLentity [ntilde] {\ntilde} \defineXMLentity [Otilde] {\Otilde} \defineXMLentity [otilde] {\otilde} \defineXMLentity [Utilde] {\Utilde} \defineXMLentity [utilde] {\utilde} \defineXMLentity [Auml] {\Adiaeresis} \defineXMLentity [auml] {\adiaeresis} \defineXMLentity [Euml] {\Ediaeresis} \defineXMLentity [euml] {\ediaeresis} \defineXMLentity [Iuml] {\Idiaeresis} \defineXMLentity [iuml] {\idiaeresis} \defineXMLentity [Ouml] {\Odiaeresis} \defineXMLentity [ouml] {\odiaeresis} \defineXMLentity [Uuml] {\Udiaeresis} \defineXMLentity [uuml] {\udiaeresis} \defineXMLentity [Yuml] {\Ydiaeresis} \defineXMLentity [yuml] {\ydiaeresis} \defineXMLentity [szlig] {\Ssharp} \defineXMLentity [Acirc] {\Acircumflex} \defineXMLentity [acirc] {\acircumflex} \defineXMLentity [Ecirc] {\Ecircumflex} \defineXMLentity [ecirc] {\ecircumflex} \defineXMLentity [Icirc] {\Icircumflex} \defineXMLentity [icirc] {\icircumflex} \defineXMLentity [Ocirc] {\Ocircumflex} \defineXMLentity [ocirc] {\ocircumflex} \defineXMLentity [Ucirc] {\Ucircumflex} \defineXMLentity [ucirc] {\ucircumflex} \defineXMLentity [ccaron] {\ccaron} % unofficial \defineXMLentity [rcaron] {\rcaron} % unofficial \defineXMLentity [scaron] {\scaron} % unofficial \defineXMLentity [zcaron] {\zcaron} % unofficial \defineXMLentity [dots] {\unknown} \defineXMLentity [amp] {\&} \defineXMLentity [nbsp] {\nonbreakablespace} context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-ver.lua0000644000175000017500000006170512130411274024114 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-ver'] = { version = 1.001, comment = "companion to buff-ver.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The default visualizers have reserved names starting with buff-imp-*. Users are -- supposed to use different names for their own variants. -- -- todo: skip=auto local type, next, rawset, rawget, setmetatable, getmetatable = type, next, rawset, rawget, setmetatable, getmetatable local format, lower, upper,match, find, sub = string.format, string.lower, string.upper, string.match, string.find, string.sub local splitlines = string.splitlines local concat = table.concat local C, P, R, S, V, Carg, Cc, Cs = lpeg.C, lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.Carg, lpeg.Cc, lpeg.Cs local patterns, lpegmatch, is_lpeg = lpeg.patterns, lpeg.match, lpeg.is_lpeg local context, commands = context, commands local trace_visualize = false trackers.register("buffers.visualize", function(v) trace_visualize = v end) local report_visualizers = logs.reporter("buffers","visualizers") local allocate = utilities.storage.allocate visualizers = visualizers or { } local specifications = allocate() visualizers.specifications = specifications local tabtospace = utilities.strings.tabtospace local variables = interfaces.variables local settings_to_array = utilities.parsers.settings_to_array local variables = interfaces.variables local findfile = resolvers.findfile local addsuffix = file.addsuffix local v_auto = variables.auto local v_yes = variables.yes -- beware, all macros have an argument: local doinlineverbatimnewline = context.doinlineverbatimnewline local doinlineverbatimbeginline = context.doinlineverbatimbeginline local doinlineverbatimemptyline = context.doinlineverbatimemptyline local doinlineverbatimstart = context.doinlineverbatimstart local doinlineverbatimstop = context.doinlineverbatimstop local dodisplayverbatimnewline = context.dodisplayverbatimnewline local dodisplayverbatimbeginline = context.dodisplayverbatimbeginline local dodisplayverbatimemptyline = context.dodisplayverbatimemptyline local dodisplayverbatimstart = context.dodisplayverbatimstart local dodisplayverbatimstop = context.dodisplayverbatimstop local verbatim = context.verbatim local doverbatimspace = context.doverbatimspace local CargOne = Carg(1) local function f_emptyline(s,settings) if settings and settings.nature == "inline" then doinlineverbatimemptyline() else dodisplayverbatimemptyline() end end local function f_beginline(s,settings) if settings and settings.nature == "inline" then doinlineverbatimbeginline() else dodisplayverbatimbeginline() end end local function f_newline(s,settings) if settings and settings.nature == "inline" then doinlineverbatimnewline() else dodisplayverbatimnewline() end end local function f_start(s,settings) if settings and settings.nature == "inline" then doinlineverbatimstart() else dodisplayverbatimstart() end end local function f_stop(s,settings) if settings and settings.nature == "inline" then doinlineverbatimstop() else dodisplayverbatimstop() end end local function f_default(s) -- (s,settings) verbatim(s) end local function f_space() -- (s,settings) doverbatimspace() end local function f_signal() -- (s,settings) -- we use these for special purposes end local signal = "\000" visualizers.signal = signal visualizers.signalpattern = P(signal) local functions = { __index = { emptyline = f_emptyline, newline = f_newline, default = f_default, beginline = f_beginline, space = f_space, start = f_start, stop = f_stop, signal = f_signal, } } local handlers = { } function visualizers.newhandler(name,data) local tname, tdata = type(name), type(data) if tname == "table" then -- (data) setmetatable(name,getmetatable(name) or functions) return name elseif tname == "string" then if tdata == "string" then -- ("name","parent") local result = { } setmetatable(result,getmetatable(handlers[data]) or functions) handlers[name] = result return result elseif tdata == "table" then -- ("name",data) setmetatable(data,getmetatable(data) or functions) handlers[name] = data return data else -- ("name") local result = { } setmetatable(result,functions) handlers[name] = result return result end else -- () local result = { } setmetatable(result,functions) return result end end function visualizers.newgrammar(name,t) name = lower(name) t = t or { } local g = visualizers.specifications[name] g = g and g.grammar if g then if trace_visualize then report_visualizers("cloning grammar %a",name) end for k,v in next, g do if not t[k] then t[k] = v end if is_lpeg(v) then t[name..":"..k] = v end end end return t end local function getvisualizer(method,nature) method = lower(method) local m = specifications[method] or specifications.default if nature then if trace_visualize then report_visualizers("getting visualizer %a with nature %a",method,nature) end return m and (m[nature] or m.parser) or nil else if trace_visualize then report_visualizers("getting visualizer %a",method) end return m and m.parser or nil end end local fallback = context.verbatim local function makepattern(visualizer,replacement,pattern) if not pattern then report_visualizers("error in visualizer %a",replacement) return patterns.alwaystrue else if type(visualizer) == "table" and type(replacement) == "string" then replacement = visualizer[replacement] or fallback else replacement = fallback end return (C(pattern) * CargOne) / replacement end end 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) name = lower(name) if rawget(specifications,name) == nil then name = lower(name) local texname = findfile(format("buff-imp-%s.mkiv",name)) local luaname = findfile(format("buff-imp-%s.lua" ,name)) if texname == "" or luaname == "" then -- assume a user specific file luaname = findfile(addsuffix(name,"mkiv")) texname = findfile(addsuffix(name,"lua" )) end if texname == "" or luaname == "" then if trace_visualize then report_visualizers("unknown visualizer %a",name) end else if trace_visualize then report_visualizers("loading visualizer %a",name) end lua.registercode(luaname) context.input(texname) end if rawget(specifications,name) == nil then rawset(specifications,name,false) end end end function visualizers.register(name,specification) name = lower(name) if trace_visualize then report_visualizers("registering visualizer %a",name) end specifications[name] = specification local parser, handler = specification.parser, specification.handler local displayparser = specification.display or parser local inlineparser = specification.inline or parser local isparser = is_lpeg(parser) local start, stop if isparser then start = makepattern(handler,"start",patterns.alwaysmatched) stop = makepattern(handler,"stop",patterns.alwaysmatched) end if handler then if isparser then specification.display = function(content,settings) if handler.startdisplay then handler.startdisplay(settings) end lpegmatch(start * displayparser * stop,content,1,settings) if handler.stopdisplay then handler.stopdisplay(settings) end end specification.inline = function(content,settings) if handler.startinline then handler.startinline(settings) end lpegmatch(start * inlineparser * stop,content,1,settings) if handler.stopinline then handler.stopinline(settings) end end specification.direct = function(content,settings) lpegmatch(parser,content,1,settings) end elseif parser then specification.display = function(content,settings) if handler.startdisplay then handler.startdisplay(settings) end parser(content,settings) if handler.stopdisplay then handler.stopdisplay(settings) end end specification.inline = function(content,settings) if handler.startinline then handler.startinline(settings) end parser(content,settings) if handler.stopinline then handler.stopinline(settings) end end specification.direct = parser end elseif isparser then specification.display = function(content,settings) lpegmatch(start * displayparser * stop,content,1,settings) end specification.inline = function(content,settings) lpegmatch(start * inlineparser * stop,content,1,settings) end specification.direct = function(content,settings) lpegmatch(parser,content,1,settings) end elseif parser then specification.display = parser specification.inline = parser specification.direct = parser end return specification end local escapepatterns = allocate() visualizers.escapepatterns = escapepatterns local function texmethod(s) context.bgroup() context(s) context.egroup() end local function texcommand(s) context[s]() end local function defaultmethod(s,settings) lpegmatch(getvisualizer("default"),lower(s),1,settings) end -- we can consider using a nested instead local space_pattern = patterns.space^0 local name_pattern = R("az","AZ")^1 -- the hack is needed in order to retain newlines when an escape happens at the -- at the begin of a line; it also ensures proper line numbering; a bit messy local function hack(pattern) return Cs(pattern * Cc(signal)) end local split_processor = typesetters.processors.split local apply_processor = typesetters.processors.apply -- todo: { before = b, after = a, processor = p }, ... function visualizers.registerescapepattern(name,befores,afters,normalmethod,escapemethod,processors) local escapepattern = escapepatterns[name] if not escapepattern then if type(befores) ~= "table" then befores = { befores } end if type(afters) ~= "table" then afters = { afters } end if type(processors) ~= "table" then processors = { processors } end for i=1,#befores do local before = befores[i] local after = afters[i] local processor = processors[i] if trace_visualize then report_visualizers("registering escape pattern, name %a, index %a, before %a, after %a, processor %a", name,i,before,after,processor or "default") end before = P(before) * space_pattern after = space_pattern * P(after) local action if processor then action = function(s) apply_processor(processor,s) end else action = escapemethod or texmethod end local ep = (before / "") * ((1 - after)^0 / action) * (after / "") if escapepattern then escapepattern = escapepattern + ep else escapepattern = ep end end escapepattern = ( escapepattern + hack((1 - escapepattern)^1) / (normalmethod or defaultmethod) )^0 escapepatterns[name] = escapepattern end return escapepattern end function visualizers.registerescapeline(name,befores,normalmethod,escapemethod,processors) local escapepattern = escapepatterns[name] if not escapepattern then if type(befores) ~= "table" then befores = { befores } end if type(processors) ~= "table" then processors = { processors } end for i=1,#befores do local before = befores[i] local processor = processors[i] if trace_visualize then report_visualizers("registering escape line pattern, name %a, before %a, after <>",name,before) end before = P(before) * space_pattern after = space_pattern * P("\n") local action if processor then action = function(s) apply_processor(processor,s) end else action = escapemethod or texmethod end local ep = (before / "") * ((1 - after)^0 / action) * (space_pattern / "") if escapepattern then escapepattern = escapepattern + ep else escapepattern = ep end end escapepattern = ( escapepattern + hack((1 - escapepattern)^1) / (normalmethod or defaultmethod) )^0 escapepatterns[name] = escapepattern end return escapepattern end function visualizers.registerescapecommand(name,token,normalmethod,escapecommand,processor) local escapepattern = escapepatterns[name] if not escapepattern then if trace_visualize then report_visualizers("registering escape token, name %a, token %a",name,token) end token = P(token) local notoken = hack((1 - token)^1) local cstoken = name_pattern * space_pattern escapepattern = ( (token / "") * (cstoken / (escapecommand or texcommand)) + (notoken / (normalmethod or defaultmethod)) )^0 escapepatterns[name] = escapepattern end return escapepattern end local escapedvisualizers = { } local function visualize(content,settings) -- maybe also method in settings if content and content ~= "" then local method = lower(settings.method or "default") local m local e = settings.escape if e and e ~= "" then local newname = format("%s : %s",method,e) local newspec = specifications[newname] if newspec then m = newspec else local starts, stops, processors = { }, { }, { } if e == v_yes then starts[1] = "/BTEX" stops [1] = "/ETEX" else local s = settings_to_array(e,true) for i=1,#s do local si = s[i] local processor, pattern = split_processor(si) si = processor and pattern or si local start, stop = match(si,"^(.-),(.-)$") if start then local n = #starts + 1 starts[n] = start stops [n] = stop or "" processors[n] = processor end end end local oldvisualizer = specifications[method] or specifications.default local oldparser = oldvisualizer.direct local newparser if starts[1] and stops[1] ~= "" then newparser = visualizers.registerescapepattern(newname,starts,stops,oldparser,nil,processors) elseif starts[1] then newparser = visualizers.registerescapeline(newname,starts,oldparser,nil,processors) else -- for old times sake: /em newparser = visualizers.registerescapecommand(newname,e,oldparser,nil,processors) end m = visualizers.register(newname, { parser = newparser, handler = oldvisualizer.handler, }) end else m = specifications[method] or specifications.default end local nature = settings.nature or "display" local n = m and m[nature] if n then if trace_visualize then report_visualizers("visualize using method %a and nature %a",method,nature) end n(content,settings) else if trace_visualize then report_visualizers("visualize using method %a",method) end fallback(content,1,settings) end end end visualizers.visualize = visualize visualizers.getvisualizer = getvisualizer local fallbacks = { } table.setmetatableindex(fallbacks,function(t,k) local v = { nature = k } t[k] = v return v end) local function checkedsettings(settings,nature) if not settings then -- let's avoid dummy tables as much as possible return fallbacks[nature] else if not settings.nature then settings.nature = nature end return settings end end function visualizers.visualizestring(content,settings) visualize(content,checkedsettings(settings,"inline")) end function visualizers.visualizefile(name,settings) visualize(resolvers.loadtexfile(name),checkedsettings(settings,"display")) end function visualizers.visualizebuffer(name,settings) visualize(buffers.getcontent(name),checkedsettings(settings,"display")) end -- -- local space = C(patterns.space) * CargOne / f_space local newline = C(patterns.newline) * CargOne / f_newline local emptyline = C(patterns.emptyline) * CargOne / f_emptyline local beginline = C(patterns.beginline) * CargOne / f_beginline local anything = C(patterns.somecontent) * CargOne / f_default ----- verbosed = (space + newline * (emptyline^0) * beginline + anything)^0 local verbosed = (space + newline * (emptyline^0) * beginline + emptyline + newline + anything)^0 local function write(s,settings) -- bad name lpegmatch(verbosed,s,1,settings or false) end visualizers.write = write visualizers.writenewline = f_newline visualizers.writeemptyline = f_emptyline visualizers.writespace = f_space visualizers.writedefault = f_default function visualizers.writeargument(...) context("{") -- If we didn't have tracing then we could write(...) -- use a faster print to tex variant for the context("}") -- { } tokens as they always have ctxcatcodes. end -- helpers local function realign(lines,strip) -- "yes", local n if strip == v_yes then n = math.huge for i=1, #lines do local spaces = find(lines[i],"%S") if not spaces then -- empty line elseif spaces == 0 then n = 0 break elseif spaces < n then n = spaces end end n = n - 1 else n = tonumber(strip) end if n and n > 0 then local copy = { } for i=1,#lines do copy[i] = sub(lines[i],n+1) end return copy end return lines end local function getstrip(lines,first,last) local first, last = first or 1, last or #lines for i=first,last do local li = lines[i] if #li == 0 or find(li,"^%s*$") then first = first + 1 else break end end for i=last,first,-1 do local li = lines[i] if #li == 0 or find(li,"^%s*$") then last = last - 1 else break end end return first, last, last - first + 1 end local function getrange(lines,first,last,range) -- 1,3 1,+3 fromhere,tothere local noflines = #lines local first, last = first or 1, last or noflines if last < 0 then last = noflines + last end local range = settings.range local what = settings_to_array(range) local r_first, r_last = what[1], what[2] local f, l = tonumber(r_first), tonumber(r_last) if r_first then if f then if f > first then first = f end else for i=first,last do if find(lines[i],r_first) then first = i + 1 break end end end end if r_last then if l then if l < 0 then l = noflines + l end if find(r_last,"^[%+]") then -- 1,+3 l = first + l end if l < last then last = l end else for i=first,last do if find(lines[i],r_last) then last = i - 1 break end end end end return first, last end local tablength = 7 local function dotabs(content,settings) local tab = settings.tab tab = tab and (tab == v_yes and tablength or tonumber(tab)) if tab then return tabtospace(content,tab) else return content end end local function filter(lines,settings) -- todo: inline or display in settings local strip = settings.strip if strip and strip ~= "" then lines = realign(lines,strip) end local line, n = 0, 0 local first, last, m = getstrip(lines) if range then first, last = getrange(lines,first,last,range) first, last = getstrip(lines,first,last) end -- \r is \endlinechar but \n would is more generic so this choice is debatable local content = concat(lines,(settings.nature == "inline" and " ") or "\n",first,last) return content, m end local getlines = buffers.getlines -- interface function commands.doifelsevisualizer(name) commands.doifelse(specifications[lower(name)]) end commands.loadvisualizer = visualizers.load -- local decodecomment = resolvers.macros.decodecomment -- experiment function commands.typebuffer(settings) local lines = getlines(settings.name) if lines then local content, m = filter(lines,settings) if content and content ~= "" then -- content = decodecomment(content) content = dotabs(content,settings) visualize(content,checkedsettings(settings,"display")) end end end function commands.processbuffer(settings) local lines = getlines(settings.name) if lines then local content, m = filter(lines,settings) if content and content ~= "" then content = dotabs(content,settings) visualize(content,checkedsettings(settings,"direct")) end end end -- not really buffers but it's closely related -- A string.gsub(str,"(\\.-) +$","%1") is faster than an lpeg when there is a -- match but slower when there is no match. But anyway, we need a more clever -- parser so we use lpeg. -- -- [[\text ]] [[\text{}]] [[\text \text ]] [[\text \\ \text ]] ----- strip = Cs((P(" ")^1 * P(-1)/"" + 1)^0) local strip = Cs((P("\\") * ((1-S("\\ "))^1) * (P(" ")/"") + 1)^0) -- function commands.typestring(settings) local content = settings.data if content and content ~= "" then content = #content > 1 and lpegmatch(strip,content) or content -- can be an option, but needed in e.g. tabulate -- content = decodecomment(content) -- content = dotabs(content,settings) visualize(content,checkedsettings(settings,"inline")) end end function commands.typefile(settings) local filename = settings.name local foundname = resolvers.findtexfile(filename) if foundname and foundname ~= "" then local str = resolvers.loadtexfile(foundname) if str and str ~= "" then local regime = settings.regime if regime and regime ~= "" then str = regimes.translate(str,regime) end if str and str~= "" then -- content = decodecomment(content) local lines = splitlines(str) local content, m = filter(lines,settings) if content and content ~= "" then content = dotabs(content,settings) visualize(content,checkedsettings(settings,"display")) end end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-glm.mkii0000644000175000017500000000657011754241457024315 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-obj.lua0000644000175000017500000000350712130411274024062 0ustar norbertnorbertif not modules then modules = { } end modules ['pack-obj'] = { version = 1.001, comment = "companion to pack-obj.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

We save object references in the main utility table. jobobjects are reusable components.

--ldx]]-- local commands, context = commands, context local texcount = tex.count local allocate = utilities.storage.allocate local collected = allocate() local tobesaved = allocate() local jobobjects = { collected = collected, tobesaved = tobesaved, } job.objects = jobobjects local function initializer() collected = jobobjects.collected tobesaved = jobobjects.tobesaved end job.register('job.objects.collected', tobesaved, initializer, nil) function jobobjects.save(tag,number,page) local t = { number, page } tobesaved[tag], collected[tag] = t, t end function jobobjects.set(tag,number,page) collected[tag] = { number, page } end function jobobjects.get(tag) return collected[tag] or tobesaved[tag] end function jobobjects.number(tag,default) local o = collected[tag] or tobesaved[tag] return o and o[1] or default end function jobobjects.page(tag,default) local o = collected[tag] or tobesaved[tag] return o and o[2] or default end -- interface commands.saveobject = jobobjects.save commands.setobject = jobobjects.set function commands.objectnumber(tag,default) local o = collected[tag] or tobesaved[tag] context(o and o[1] or default) end function commands.objectpage(tag,default) local o = collected[tag] or tobesaved[tag] context(o and o[2] or default) end function commands.doifobjectreferencefoundelse(tag) commands.doifelse(collected[tag] or tobesaved[tag]) end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-agl.lua0000644000175000017500000006131312161703335024110 0ustar norbertnorbertif not modules then modules = { } end modules ['font-agl'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "derived from http://www.adobe.com/devnet/opentype/archives/glyphlist.txt", original = "Adobe Glyph List, version 2.0, September 20, 2002", } local allocate = utilities.storage.allocate local names = allocate { -- filled from char-def.lua } local unicodes = allocate { -- filled from char-def.lua } local synonyms = { Acyrillic = 0x0410, Becyrillic = 0x0411, Cdot = 0x010A, Checyrillic = 0x0427, Decyrillic = 0x0414, Djecyrillic = 0x0402, Dzecyrillic = 0x0405, Dzhecyrillic = 0x040F, Ecyrillic = 0x0404, Edot = 0x0116, Efcyrillic = 0x0424, Elcyrillic = 0x041B, Emcyrillic = 0x041C, Encyrillic = 0x041D, Ercyrillic = 0x0420, Ereversedcyrillic = 0x042D, Escyrillic = 0x0421, Fitacyrillic = 0x0472, Gcedilla = 0x0122, Gdot = 0x0120, Gecyrillic = 0x0413, Gheupturncyrillic = 0x0490, Gjecyrillic = 0x0403, Hardsigncyrillic = 0x042A, IAcyrillic = 0x042F, IUcyrillic = 0x042E, Icyrillic = 0x0406, Idot = 0x0130, Iecyrillic = 0x0415, Iicyrillic = 0x0418, Iishortcyrillic = 0x0419, Iocyrillic = 0x0401, Izhitsacyrillic = 0x0474, Jecyrillic = 0x0408, Kacyrillic = 0x041A, Kcedilla = 0x0136, Khacyrillic = 0x0425, Kjecyrillic = 0x040C, Lcedilla = 0x013B, Ljecyrillic = 0x0409, Ncedilla = 0x0145, Njecyrillic = 0x040A, Ocyrillic = 0x041E, Odblacute = 0x0150, Ohm = 0x2126, Pecyrillic = 0x041F, Rcedilla = 0x0156, Shacyrillic = 0x0428, Shchacyrillic = 0x0429, Softsigncyrillic = 0x042C, Tcedilla = 0x0162, Tecyrillic = 0x0422, Tsecyrillic = 0x0426, Tshecyrillic = 0x040B, Ucyrillic = 0x0423, Udblacute = 0x0170, Ushortcyrillic = 0x040E, Vecyrillic = 0x0412, Yatcyrillic = 0x0462, Yericyrillic = 0x042B, Yicyrillic = 0x0407, Zdot = 0x017B, Zecyrillic = 0x0417, Zhecyrillic = 0x0416, acutecmb = 0x0301, acyrillic = 0x0430, afii00208 = 0x2015, afii08941 = 0x20A4, afii57694 = 0xFB2A, afii57695 = 0xFB2B, afii57700 = 0xFB4B, afii57705 = 0xFB1F, afii57723 = 0xFB35, alef = 0x05D0, alefmaksurainitialarabic = 0xFEF3, alefmaksuramedialarabic = 0xFEF4, approximatelyequal = 0x2245, asteriskaltonearabic = 0x066D, ayin = 0x05E2, bet = 0x05D1, betdagesh = 0xFB31, blackdownpointingtriangle = 0x25BC, blackleftpointingpointer = 0x25C4, blackrectangle = 0x25AC, blackrightpointingpointer = 0x25BA, blacksmilingface = 0x263B, blacksquare = 0x25A0, blackuppointingtriangle = 0x25B2, bulletinverse = 0x25D8, cdot = 0x010B, compass = 0x263C, dagesh = 0x05BC, dalet = 0x05D3, daletdagesh = 0xFB33, dalethatafpatah = 0x05D3, dalethatafpatahhebrew = 0x05D3, dalethatafsegol = 0x05D3, dalethatafsegolhebrew = 0x05D3, dalethebrew = 0x05D3, dalethiriq = 0x05D3, dalethiriqhebrew = 0x05D3, daletholam = 0x05D3, daletholamhebrew = 0x05D3, daletpatah = 0x05D3, daletpatahhebrew = 0x05D3, daletqamats = 0x05D3, daletqamatshebrew = 0x05D3, daletqubuts = 0x05D3, daletqubutshebrew = 0x05D3, daletsegol = 0x05D3, daletsegolhebrew = 0x05D3, daletsheva = 0x05D3, daletshevahebrew = 0x05D3, dalettsere = 0x05D3, dammaarabic = 0x064F, dammatanaltonearabic = 0x064C, dargahebrew = 0x05A7, dbllowline = 0x2017, decimalseparatorarabic = 0x066B, dialytikatonos = 0x0385, dotbelowcmb = 0x0323, doubleyodpatah = 0xFB1F, doubleyodpatahhebrew = 0xFB1F, edot = 0x0117, eightarabic = 0x0668, eighthnotebeamed = 0x266B, etnahtafoukhhebrew = 0x0591, etnahtafoukhlefthebrew = 0x0591, etnahtahebrew = 0x0591, fathaarabic = 0x064E, finalkaf = 0x05DA, finalkafdagesh = 0xFB3A, finalkafhebrew = 0x05DA, finalkafqamats = 0x05DA, finalkafqamatshebrew = 0x05DA, finalkafsheva = 0x05DA, finalmem = 0x05DD, finalnun = 0x05DF, finalpe = 0x05E3, finaltsadi = 0x05E5, fivearabic = 0x0665, forall = 0x2200, fourarabic = 0x0664, gcedilla = 0x0123, gdot = 0x0121, gimel = 0x05D2, gimeldagesh = 0xFB32, gravecmb = 0x0300, haaltonearabic = 0x06C1, hamzaarabic = 0x0621, hamzadammaarabic = 0x0621, hamzadammatanarabic = 0x0621, hamzafathaarabic = 0x0621, hamzafathatanarabic = 0x0621, hamzalowarabic = 0x0621, hamzalowkasraarabic = 0x0621, hamzalowkasratanarabic = 0x0621, hatafpatah = 0x05B2, hatafpatah16 = 0x05B2, hatafpatah23 = 0x05B2, hatafpatah2f = 0x05B2, hatafpatahhebrew = 0x05B2, hatafpatahnarrowhebrew = 0x05B2, hatafpatahquarterhebrew = 0x05B2, hatafqamats = 0x05B3, hatafqamats1b = 0x05B3, hatafqamats28 = 0x05B3, hatafqamats34 = 0x05B3, hatafqamatshebrew = 0x05B3, hatafqamatsnarrowhebrew = 0x05B3, hatafqamatsquarterhebrew = 0x05B3, hatafsegol = 0x05B1, hatafsegol17 = 0x05B1, hatafsegol24 = 0x05B1, hatafsegol30 = 0x05B1, hatafsegolhebrew = 0x05B1, hatafsegolnarrowhebrew = 0x05B1, hatafsegolquarterhebrew = 0x05B1, he = 0x05D4, hedagesh = 0xFB34, hehfinalalttwoarabic = 0xFEEA, het = 0x05D7, hiriq = 0x05B4, hiriq14 = 0x05B4, hiriq21 = 0x05B4, hiriq2d = 0x05B4, hiriqhebrew = 0x05B4, hiriqnarrowhebrew = 0x05B4, hiriqquarterhebrew = 0x05B4, holam = 0x05B9, holam19 = 0x05B9, holam26 = 0x05B9, holam32 = 0x05B9, holamhebrew = 0x05B9, holamnarrowhebrew = 0x05B9, holamquarterhebrew = 0x05B9, ilde = 0x02DC, integralbottom = 0x2321, integraltop = 0x2320, kaf = 0x05DB, kafdagesh = 0xFB3B, kashidaautoarabic = 0x0640, kashidaautonosidebearingarabic = 0x0640, kcedilla = 0x0137, lamed = 0x05DC, lameddagesh = 0xFB3C, lamedhebrew = 0x05DC, lamedholam = 0x05DC, lamedholamdagesh = 0x05DC, lamedholamdageshhebrew = 0x05DC, laminitialarabic = 0xFEDF, lammeemjeeminitialarabic = 0xFEDF, lcedilla = 0x013C, logicalnotreversed = 0x2310, mahapakhhebrew = 0x05A4, mem = 0x05DE, memdagesh = 0xFB3E, merkhahebrew = 0x05A5, merkhakefulahebrew = 0x05A6, middot = 0x00B7, munahhebrew = 0x05A3, nbspace = 0x00A0, ncedilla = 0x0146, newsheqelsign = 0x20AA, ninearabic = 0x0669, noonhehinitialarabic = 0xFEE7, nun = 0x05E0, nundagesh = 0xFB40, odblacute = 0x0151, onearabic = 0x0661, overscore = 0x00AF, patah = 0x05B7, patah11 = 0x05B7, patah1d = 0x05B7, patah2a = 0x05B7, patahhebrew = 0x05B7, patahnarrowhebrew = 0x05B7, patahquarterhebrew = 0x05B7, pe = 0x05E4, pedagesh = 0xFB44, qamats = 0x05B8, qamats10 = 0x05B8, qamats1a = 0x05B8, qamats1c = 0x05B8, qamats27 = 0x05B8, qamats29 = 0x05B8, qamats33 = 0x05B8, qamatsde = 0x05B8, qamatshebrew = 0x05B8, qamatsnarrowhebrew = 0x05B8, qamatsqatanhebrew = 0x05B8, qamatsqatannarrowhebrew = 0x05B8, qamatsqatanquarterhebrew = 0x05B8, qamatsqatanwidehebrew = 0x05B8, qamatsquarterhebrew = 0x05B8, qof = 0x05E7, qofdagesh = 0xFB47, qofhatafpatah = 0x05E7, qofhatafpatahhebrew = 0x05E7, qofhatafsegol = 0x05E7, qofhatafsegolhebrew = 0x05E7, qofhebrew = 0x05E7, qofhiriq = 0x05E7, qofhiriqhebrew = 0x05E7, qofholam = 0x05E7, qofholamhebrew = 0x05E7, qofpatah = 0x05E7, qofpatahhebrew = 0x05E7, qofqamats = 0x05E7, qofqamatshebrew = 0x05E7, qofqubuts = 0x05E7, qofqubutshebrew = 0x05E7, qofsegol = 0x05E7, qofsegolhebrew = 0x05E7, qofsheva = 0x05E7, qofshevahebrew = 0x05E7, qoftsere = 0x05E7, qubuts = 0x05BB, qubuts18 = 0x05BB, qubuts25 = 0x05BB, qubuts31 = 0x05BB, qubutshebrew = 0x05BB, qubutsnarrowhebrew = 0x05BB, qubutsquarterhebrew = 0x05BB, quoteleftreversed = 0x201B, rafe = 0x05BF, rcedilla = 0x0157, reharabic = 0x0631, resh = 0x05E8, reshhatafpatah = 0x05E8, reshhatafpatahhebrew = 0x05E8, reshhatafsegol = 0x05E8, reshhatafsegolhebrew = 0x05E8, reshhebrew = 0x05E8, reshhiriq = 0x05E8, reshhiriqhebrew = 0x05E8, reshholam = 0x05E8, reshholamhebrew = 0x05E8, reshpatah = 0x05E8, reshpatahhebrew = 0x05E8, reshqamats = 0x05E8, reshqamatshebrew = 0x05E8, reshqubuts = 0x05E8, reshqubutshebrew = 0x05E8, reshsegol = 0x05E8, reshsegolhebrew = 0x05E8, reshsheva = 0x05E8, reshshevahebrew = 0x05E8, reshtsere = 0x05E8, reviahebrew = 0x0597, samekh = 0x05E1, samekhdagesh = 0xFB41, segol = 0x05B6, segol13 = 0x05B6, segol1f = 0x05B6, segol2c = 0x05B6, segolhebrew = 0x05B6, segolnarrowhebrew = 0x05B6, segolquarterhebrew = 0x05B6, sevenarabic = 0x0667, sfthyphen = 0x00AD, shaddaarabic = 0x0651, sheqel = 0x20AA, sheva = 0x05B0, sheva115 = 0x05B0, sheva15 = 0x05B0, sheva22 = 0x05B0, sheva2e = 0x05B0, shevahebrew = 0x05B0, shevanarrowhebrew = 0x05B0, shevaquarterhebrew = 0x05B0, shin = 0x05E9, shindagesh = 0xFB49, shindageshshindot = 0xFB2C, shindageshsindot = 0xFB2D, shinshindot = 0xFB2A, shinsindot = 0xFB2B, siluqhebrew = 0x05BD, sixarabic = 0x0666, tav = 0x05EA, tavdages = 0xFB4A, tavdagesh = 0xFB4A, tcedilla = 0x0163, tchehinitialarabic = 0xFB7C, tet = 0x05D8, tetdagesh = 0xFB38, tevirhebrew = 0x059B, thousandsseparatorarabic = 0x066C, threearabic = 0x0663, tildecmb = 0x0303, tipehahebrew = 0x0596, tsadi = 0x05E6, tsadidagesh = 0xFB46, tsere = 0x05B5, tsere12 = 0x05B5, tsere1e = 0x05B5, tsere2b = 0x05B5, tserehebrew = 0x05B5, tserenarrowhebrew = 0x05B5, tserequarterhebrew = 0x05B5, twoarabic = 0x0662, udblacute = 0x0171, vav = 0x05D5, vavdagesh = 0xFB35, vavdagesh65 = 0xFB35, vavholam = 0xFB4B, yerahbenyomohebrew = 0x05AA, yod = 0x05D9, yoddagesh = 0xFB39, zayin = 0x05D6, zayindagesh = 0xFB36, zdot = 0x017C, zeroarabic = 0x0660, } local extras = allocate { -- private extensions Dcroat = 0x0110, Delta = 0x2206, Euro = 0x20AC, H18533 = 0x25CF, H18543 = 0x25AA, H18551 = 0x25AB, H22073 = 0x25A1, Ldot = 0x013F, Oslashacute = 0x01FE, SF10000 = 0x250C, SF20000 = 0x2514, SF30000 = 0x2510, SF40000 = 0x2518, SF50000 = 0x253C, SF60000 = 0x252C, SF70000 = 0x2534, SF80000 = 0x251C, SF90000 = 0x2524, Upsilon1 = 0x03D2, afii10066 = 0x0431, afii10067 = 0x0432, afii10068 = 0x0433, afii10069 = 0x0434, afii10070 = 0x0435, afii10071 = 0x0451, afii10072 = 0x0436, afii10073 = 0x0437, afii10074 = 0x0438, afii10075 = 0x0439, afii10076 = 0x043A, afii10077 = 0x043B, afii10078 = 0x043C, afii10079 = 0x043D, afii10080 = 0x043E, afii10081 = 0x043F, afii10082 = 0x0440, afii10083 = 0x0441, afii10084 = 0x0442, afii10085 = 0x0443, afii10086 = 0x0444, afii10087 = 0x0445, afii10088 = 0x0446, afii10089 = 0x0447, afii10090 = 0x0448, afii10091 = 0x0449, afii10092 = 0x044A, afii10093 = 0x044B, afii10094 = 0x044C, afii10095 = 0x044D, afii10096 = 0x044E, afii10097 = 0x044F, afii10098 = 0x0491, afii10099 = 0x0452, afii10100 = 0x0453, afii10101 = 0x0454, afii10102 = 0x0455, afii10103 = 0x0456, afii10104 = 0x0457, afii10105 = 0x0458, afii10106 = 0x0459, afii10107 = 0x045A, afii10108 = 0x045B, afii10109 = 0x045C, afii10110 = 0x045E, afii10193 = 0x045F, afii10194 = 0x0463, afii10195 = 0x0473, afii10196 = 0x0475, afii10846 = 0x04D9, afii208 = 0x2015, afii57381 = 0x066A, afii57388 = 0x060C, afii57392 = 0x0660, afii57393 = 0x0661, afii57394 = 0x0662, afii57395 = 0x0663, afii57396 = 0x0664, afii57397 = 0x0665, afii57398 = 0x0666, afii57399 = 0x0667, afii57400 = 0x0668, afii57401 = 0x0669, afii57403 = 0x061B, afii57407 = 0x061F, afii57409 = 0x0621, afii57410 = 0x0622, afii57411 = 0x0623, afii57412 = 0x0624, afii57413 = 0x0625, afii57414 = 0x0626, afii57415 = 0x0627, afii57416 = 0x0628, afii57417 = 0x0629, afii57418 = 0x062A, afii57419 = 0x062B, afii57420 = 0x062C, afii57421 = 0x062D, afii57422 = 0x062E, afii57423 = 0x062F, afii57424 = 0x0630, afii57425 = 0x0631, afii57426 = 0x0632, afii57427 = 0x0633, afii57428 = 0x0634, afii57429 = 0x0635, afii57430 = 0x0636, afii57431 = 0x0637, afii57432 = 0x0638, afii57433 = 0x0639, afii57434 = 0x063A, afii57440 = 0x0640, afii57441 = 0x0641, afii57442 = 0x0642, afii57443 = 0x0643, afii57444 = 0x0644, afii57445 = 0x0645, afii57446 = 0x0646, afii57448 = 0x0648, afii57449 = 0x0649, afii57450 = 0x064A, afii57451 = 0x064B, afii57452 = 0x064C, afii57453 = 0x064D, afii57454 = 0x064E, afii57455 = 0x064F, afii57456 = 0x0650, afii57457 = 0x0651, afii57458 = 0x0652, afii57470 = 0x0647, afii57505 = 0x06A4, afii57506 = 0x067E, afii57507 = 0x0686, afii57508 = 0x0698, afii57509 = 0x06AF, afii57511 = 0x0679, afii57512 = 0x0688, afii57513 = 0x0691, afii57514 = 0x06BA, afii57519 = 0x06D2, afii57636 = 0x20AA, afii57645 = 0x05BE, afii57658 = 0x05C3, afii57664 = 0x05D0, afii57665 = 0x05D1, afii57666 = 0x05D2, afii57667 = 0x05D3, afii57668 = 0x05D4, afii57669 = 0x05D5, afii57670 = 0x05D6, afii57671 = 0x05D7, afii57672 = 0x05D8, afii57673 = 0x05D9, afii57674 = 0x05DA, afii57675 = 0x05DB, afii57676 = 0x05DC, afii57677 = 0x05DD, afii57678 = 0x05DE, afii57679 = 0x05DF, afii57680 = 0x05E0, afii57681 = 0x05E1, afii57682 = 0x05E2, afii57683 = 0x05E3, afii57684 = 0x05E4, afii57685 = 0x05E5, afii57686 = 0x05E6, afii57687 = 0x05E7, afii57688 = 0x05E8, afii57689 = 0x05E9, afii57690 = 0x05EA, afii57716 = 0x05F0, afii57717 = 0x05F1, afii57718 = 0x05F2, afii57793 = 0x05B4, afii57794 = 0x05B5, afii57795 = 0x05B6, afii57796 = 0x05BB, afii57797 = 0x05B8, afii57798 = 0x05B7, afii57799 = 0x05B0, afii57800 = 0x05B2, afii57801 = 0x05B1, afii57802 = 0x05B3, afii57803 = 0x05C2, afii57804 = 0x05C1, afii57806 = 0x05B9, afii57807 = 0x05BC, afii57839 = 0x05BD, afii57841 = 0x05BF, afii57842 = 0x05C0, afii57929 = 0x02BC, afii61248 = 0x2105, afii61289 = 0x2113, afii61352 = 0x2116, afii61664 = 0x200C, afii63167 = 0x066D, afii64937 = 0x02BD, arrowdblboth = 0x21D4, arrowdblleft = 0x21D0, arrowdblright = 0x21D2, arrowupdnbse = 0x21A8, bar = 0x007C, circle = 0x25CB, circlemultiply = 0x2297, circleplus = 0x2295, club = 0x2663, colonmonetary = 0x20A1, dcroat = 0x0111, dkshade = 0x2593, existential = 0x2203, female = 0x2640, gradient = 0x2207, heart = 0x2665, hookabovecomb = 0x0309, invcircle = 0x25D9, ldot = 0x0140, longs = 0x017F, ltshade = 0x2591, male = 0x2642, mu = 0x00B5, napostrophe = 0x0149, notelement = 0x2209, omega1 = 0x03D6, openbullet = 0x25E6, orthogonal = 0x221F, oslashacute = 0x01FF, phi1 = 0x03D5, propersubset = 0x2282, propersuperset = 0x2283, reflexsubset = 0x2286, reflexsuperset = 0x2287, shade = 0x2592, sigma1 = 0x03C2, similar = 0x223C, smileface = 0x263A, spacehackarabic = 0x0020, spade = 0x2660, theta1 = 0x03D1, twodotenleader = 0x2025, } for u, c in next, characters.data do local a = c.adobename if a then unicodes[a] = u names [u] = a end end for a, u in next, extras do unicodes[a] = u if not names[u] then names[u] = a end end for s, u in next, synonyms do unicodes[s] = u if not names[u] then names[u] = s end end -- We load this table only when needed. We could use a loading mechanism -- return the table but there are no more vectors like this so why bother. fonts.encodings = fonts.encodings or { } fonts.encodings.agl = { names = names, -- unicode -> name unicodes = unicodes, -- name -> unicode synonyms = synonyms, -- merged into the other two extras = extras, -- merged into the other two } context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-fld.lua0000644000175000017500000013025612130411274024066 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-fld'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The problem with widgets is that so far each version of acrobat -- has some rendering problem. I tried to keep up with this but -- it makes no sense to do so as one cannot rely on the viewer -- not changing. Especially Btn fields are tricky as their appearences -- need to be synchronized in the case of children but e.g. acrobat -- 10 does not retain the state and forces a check symbol. If you -- make a file in acrobat then it has MK entries that seem to overload -- the already present appearance streams (they're probably only meant for -- printing) as it looks like the viewer has some fallback on (auto -- generated) MK behaviour built in. So ... hard to test. Unfortunately -- not even the default appearance is generated. This will probably be -- solved at some point. -- -- Also, for some reason the viewer does not always show custom appearances -- when fields are being rolled over or clicked upon, and circles or checks -- pop up when you don't expect them. I fear that this kind of instability -- eventually will kill pdf forms. After all, the manual says: "individual -- annotation handlers may ignore this entry and provide their own appearances" -- and one might wonder what 'individual' means here, but effectively this -- renders the whole concept of appearances useless. -- -- Okay, here is one observation. A pdf file contains objects and one might -- consider each one to be a static entity when read in. However, acrobat -- starts rendering and seems to manipulate (appearance streams) of objects -- in place (this is visible when the file is saved again). And, combined -- with some other caching and hashing, this might give side effects for -- shared objects. So, it seems that for some cases one can best be not too -- clever and not share but duplicate information. Of course this defeats the -- whole purpose of these objects. Of course I can be wrong. -- -- A rarther weird side effect of the viewer is that the highlighting of fields -- obscures values, unless you uses one of the BS variants, and this makes -- custum appearances rather useless as there is no way to control this apart -- from changing the viewer preferences. It could of course be a bug but it would -- be nice if the highlighting was at least transparent. I have no clue why the -- built in shapes work ok (some xform based appearances are generated) while -- equally valid other xforms fail. It looks like acrobat appearances come on -- top (being refered to in the MK) while custom ones are behind the highlight -- rectangle. One can disable the "Show border hover color for fields" option -- in the preferences. If you load java-imp-rhh this side effect gets disabled -- and you get what you expect (it took me a while to figure out this hack). -- -- When highlighting is enabled, those default symbols flash up, so it looks -- like we have some inteference between this setting and custom appearances. -- -- Anyhow, the NeedAppearances is really needed in order to get a rendering -- for printing especially when highlighting (those colorfull foregrounds) is -- on. local gmatch, lower, format = string.gmatch, string.lower, string.format local lpegmatch = lpeg.match local utfchar = utf.char local bpfactor, todimen = number.dimenfactors.bp, string.todimen local trace_fields = false trackers.register("backends.fields", function(v) trace_fields = v end) local report_fields = logs.reporter("backend","fields") local backends, lpdf = backends, lpdf local variables = interfaces.variables local context = context local references = structures.references local settings_to_array = utilities.parsers.settings_to_array local pdfbackend = backends.pdf local nodeinjections = pdfbackend.nodeinjections local codeinjections = pdfbackend.codeinjections local registrations = pdfbackend.registrations local registeredsymbol = codeinjections.registeredsymbol local pdfstream = lpdf.stream local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfreference = lpdf.reference local pdfunicode = lpdf.unicode local pdfstring = lpdf.string local pdfconstant = lpdf.constant local pdftoeight = lpdf.toeight local pdfflushobject = lpdf.flushobject local pdfshareobjectreference = lpdf.shareobjectreference local pdfshareobject = lpdf.shareobject local pdfreserveobject = lpdf.reserveobject local pdfreserveannotation = lpdf.reserveannotation local pdfaction = lpdf.action local hpack_node = node.hpack local nodepool = nodes.pool local pdfannotation_node = nodepool.pdfannotation local submitoutputformat = 0 -- 0=unknown 1=HTML 2=FDF 3=XML => not yet used, needs to be checked local pdf_widget = pdfconstant("Widget") local pdf_tx = pdfconstant("Tx") local pdf_ch = pdfconstant("Ch") local pdf_btn = pdfconstant("Btn") ----- pdf_yes = pdfconstant("Yes") local pdf_off = pdfconstant("Off") local pdf_p = pdfconstant("P") -- None Invert Outline Push local pdf_n = pdfconstant("N") -- None Invert Outline Push -- local pdf_no_rect = pdfarray { 0, 0, 0, 0 } local splitter = lpeg.splitat("=>") local formats = { html = 1, fdf = 2, xml = 3, } function codeinjections.setformsmethod(name) submitoutputformat = formats[lower(name)] or formats.xml end local flag = { -- /Ff ReadOnly = 1, -- 1 Required = 2, -- 2 NoExport = 4, -- 3 MultiLine = 4096, -- 13 Password = 8192, -- 14 NoToggleToOff = 16384, -- 15 Radio = 32768, -- 16 PushButton = 65536, -- 17 PopUp = 131072, -- 18 Edit = 262144, -- 19 Sort = 524288, -- 20 FileSelect = 1048576, -- 21 DoNotSpellCheck = 4194304, -- 23 DoNotScroll = 8388608, -- 24 Comb = 16777216, -- 25 RichText = 33554432, -- 26 RadiosInUnison = 33554432, -- 26 CommitOnSelChange = 67108864, -- 27 } local plus = { -- /F Invisible = 1, -- 1 Hidden = 2, -- 2 Printable = 4, -- 3 Print = 4, -- 3 NoZoom = 8, -- 4 NoRotate = 16, -- 5 NoView = 32, -- 6 ReadOnly = 64, -- 7 Locked = 128, -- 8 ToggleNoView = 256, -- 9 LockedContents = 512, -- 10, AutoView = 256, -- 288 (6+9) } -- todo: check what is interfaced flag.readonly = flag.ReadOnly flag.required = flag.Required flag.protected = flag.Password flag.sorted = flag.Sort flag.unavailable = flag.NoExport flag.nocheck = flag.DoNotSpellCheck flag.fixed = flag.DoNotScroll flag.file = flag.FileSelect plus.hidden = plus.Hidden plus.printable = plus.Printable plus.auto = plus.AutoView -- some day .. lpeg with function or table local function fieldflag(specification) -- /Ff local o, n = specification.option, 0 if o and o ~= "" then for f in gmatch(o,"[^, ]+") do n = n + (flag[f] or 0) end end return n end local function fieldplus(specification) -- /F local o, n = specification.option, 0 if o and o ~= "" then for p in gmatch(o,"[^, ]+") do n = n + (plus[p] or 0) end end -- n = n + 4 return n end local function checked(what) local set, bug = references.identify("",what) if not bug and #set > 0 then local r, n = pdfaction(set) return pdfshareobjectreference(r) end end local function fieldactions(specification) -- share actions local d, a = { }, nil a = specification.mousedown or specification.clickin if a and a ~= "" then d.D = checked(a) end a = specification.mouseup or specification.clickout if a and a ~= "" then d.U = checked(a) end a = specification.regionin if a and a ~= "" then d.E = checked(a) end -- Enter a = specification.regionout if a and a ~= "" then d.X = checked(a) end -- eXit a = specification.afterkey if a and a ~= "" then d.K = checked(a) end a = specification.format if a and a ~= "" then d.F = checked(a) end a = specification.validate if a and a ~= "" then d.V = checked(a) end a = specification.calculate if a and a ~= "" then d.C = checked(a) end a = specification.focusin if a and a ~= "" then d.Fo = checked(a) end a = specification.focusout if a and a ~= "" then d.Bl = checked(a) end a = specification.openpage if a and a ~= "" then d.PO = checked(a) end a = specification.closepage if a and a ~= "" then d.PC = checked(a) end -- a = specification.visiblepage if a and a ~= "" then d.PV = checked(a) end -- a = specification.invisiblepage if a and a ~= "" then d.PI = checked(a) end return next(d) and pdfdictionary(d) end -- fonts and color local pdfdocencodingvector, pdfdocencodingcapsule -- The pdf doc encoding vector is needed in order to -- trigger propper unicode. Interesting is that when -- a glyph is not in the vector, it is still visible -- as it is taken from some other font. Messy. -- To be checked: only when text/line fields. local function checkpdfdocencoding() report_fields("adding pdfdoc encoding vector") local encoding = dofile(resolvers.findfile("lpdf-enc.lua")) -- no checking, fatal if not present pdfdocencodingvector = pdfreference(pdfflushobject(encoding)) local capsule = pdfdictionary { PDFDocEncoding = pdfdocencodingvector } pdfdocencodingcapsule = pdfreference(pdfflushobject(capsule)) checkpdfdocencoding = function() end end local fontnames = { rm = { tf = "Times-Roman", bf = "Times-Bold", it = "Times-Italic", sl = "Times-Italic", bi = "Times-BoldItalic", bs = "Times-BoldItalic", }, ss = { tf = "Helvetica", bf = "Helvetica-Bold", it = "Helvetica-Oblique", sl = "Helvetica-Oblique", bi = "Helvetica-BoldOblique", bs = "Helvetica-BoldOblique", }, tt = { tf = "Courier", bf = "Courier-Bold", it = "Courier-Oblique", sl = "Courier-Oblique", bi = "Courier-BoldOblique", bs = "Courier-BoldOblique", }, symbol = { dingbats = "ZapfDingbats", } } local usedfonts = { } local function fieldsurrounding(specification) local fontsize = specification.fontsize or "12pt" local fontstyle = specification.fontstyle or "rm" local fontalternative = specification.fontalternative or "tf" local colorvalue = specification.colorvalue local s = fontnames[fontstyle] if not s then fontstyle, s = "rm", fontnames.rm end local a = s[fontalternative] if not a then alternative, a = "tf", s.tf end local tag = fontstyle .. fontalternative fontsize = todimen(fontsize) fontsize = fontsize and (bpfactor * fontsize) or 12 fontraise = 0.1 * fontsize -- todo: figure out what the natural one is and compensate for strutdp local fontcode = format("%0.4f Tf %0.4f Ts",fontsize,fontraise) -- we could test for colorvalue being 1 (black) and omit it then local colorcode = lpdf.color(3,colorvalue) -- we force an rgb color space if trace_fields then report_fields("using font, style %a, alternative %a, size %p, tag %a, code %a",fontstyle,fontalternative,fontsize,tag,fontcode) report_fields("using color, value %a, code %a",colorvalue,colorcode) end local stream = pdfstream { pdfconstant(tag), format("%s %s",fontcode,colorcode) } usedfonts[tag] = a -- the name -- move up with "x.y Ts" return tostring(stream) end local function registerfonts() if next(usedfonts) then checkpdfdocencoding() -- already done local d = pdfdictionary() local pdffonttype, pdffontsubtype = pdfconstant("Font"), pdfconstant("Type1") for tag, name in next, usedfonts do local f = pdfdictionary { Type = pdffonttype, Subtype = pdffontsubtype, Name = pdfconstant(tag), BaseFont = pdfconstant(name), Encoding = pdfdocencodingvector, } d[tag] = pdfreference(pdfflushobject(f)) end return d end end -- symbols local function fieldappearances(specification) -- todo: caching local values = specification.values local default = specification.default -- todo if not values then -- error return end local v = settings_to_array(values) local n, r, d if #v == 1 then n, r, d = v[1], v[1], v[1] elseif #v == 2 then n, r, d = v[1], v[1], v[2] else n, r, d = v[1], v[2], v[3] end local appearance = pdfdictionary { N = registeredsymbol(n), R = registeredsymbol(r), D = registeredsymbol(d), } return pdfshareobjectreference(appearance) -- return pdfreference(pdfflushobject(appearance)) end local YesorOn = "Yes" -- somehow On is not always working out well any longer (why o why this change) -- beware ... maybe we should have unique /Yes1 ... we will probably -- change this one too. -- -- TODO: the same as radio .. play safe and use different names. local function fieldstates_check(specification,forceyes,values,default,yesdefault) -- we don't use Opt here (too messy for radio buttons) local values, default = values or specification.values, default or specification.default if not values or values == "" then -- error return end local v = settings_to_array(values) local yes, off, yesn, yesr, yesd, offn, offr, offd if #v == 1 then yes, off = v[1], v[1] else yes, off = v[1], v[2] end local yesshown, yesvalue = lpegmatch(splitter,yes) if not (yesshown and yesvalue) then yesshown = yes, yes end yes = settings_to_array(yesshown) local offshown, offvalue = lpegmatch(splitter,off) if not (offshown and offvalue) then offshown = off, off end off = settings_to_array(offshown) if #yes == 1 then yesn, yesr, yesd = yes[1], yes[1], yes[1] elseif #yes == 2 then yesn, yesr, yesd = yes[1], yes[1], yes[2] else yesn, yesr, yesd = yes[1], yes[2], yes[3] end if #off == 1 then offn, offr, offd = off[1], off[1], off[1] elseif #off == 2 then offn, offr, offd = off[1], off[1], off[2] else offn, offr, offd = off[1], off[2], off[3] end if not yesvalue then yesvalue = yesdefault or yesn end if not offvalue then offvalue = offn end if forceyes == true then forceyes = YesorOn -- spec likes Yes more but we've used On for ages now else -- false or string end if default == yesn then default = pdfconstant(forceyes or yesn) else default = pdf_off end local appearance if false then -- needs testing appearance = pdfdictionary { -- maybe also cache components N = pdfshareobjectreference(pdfdictionary { [forceyes or yesn] = registeredsymbol(yesn), Off = registeredsymbol(offn) }), R = pdfshareobjectreference(pdfdictionary { [forceyes or yesr] = registeredsymbol(yesr), Off = registeredsymbol(offr) }), D = pdfshareobjectreference(pdfdictionary { [forceyes or yesd] = registeredsymbol(yesd), Off = registeredsymbol(offd) }), } else appearance = pdfdictionary { -- maybe also cache components N = pdfdictionary { [forceyes or yesn] = registeredsymbol(yesn), Off = registeredsymbol(offn) }, R = pdfdictionary { [forceyes or yesr] = registeredsymbol(yesr), Off = registeredsymbol(offr) }, D = pdfdictionary { [forceyes or yesd] = registeredsymbol(yesd), Off = registeredsymbol(offd) } } end local appearanceref = pdfshareobjectreference(appearance) -- local appearanceref = pdfreference(pdfflushobject(appearance)) return appearanceref, default, yesvalue end -- It looks like there is always a (MK related) symbol used and that -- the appearances are only used as ornaments behind a symbol. So, -- contrary to what we did when widgets showed up, we now limit -- ourself to more dumb definitions. Especially when highlighting is -- enabled weird interferences happen. So, we play safe (some nice code -- has been removed that worked well till recently). local function fieldstates_radio(specification,name,parent) local values = values or specification.values local default = default or parent.default -- specification.default if not values or values == "" then -- error return end local v = settings_to_array(values) local yes, off, yesn, yesr, yesd, offn, offr, offd if #v == 1 then yes, off = v[1], v[1] else yes, off = v[1], v[2] end -- yes keys might be the same in the three appearances within a field -- but can best be different among fields ... don't ask why local yessymbols, yesvalue = lpegmatch(splitter,yes) -- n,r,d=>x if not (yessymbols and yesvalue) then yessymbols = yes end if not yesvalue then yesvalue = name end yessymbols = settings_to_array(yessymbols) if #yessymbols == 1 then yesn = yessymbols[1] yesr = yesn yesd = yesr elseif #yessymbols == 2 then yesn = yessymbols[1] yesr = yessymbols[2] yesd = yesr else yesn = yessymbols[1] yesr = yessymbols[2] yesd = yessymbols[3] end -- we don't care about names, as all will be /Off local offsymbols = lpegmatch(splitter,off) or off offsymbols = settings_to_array(offsymbols) if #offsymbols == 1 then offn = offsymbols[1] offr = offn offd = offr elseif #offsymbols == 2 then offn = offsymbols[1] offr = offsymbols[2] offd = offr else offn = offsymbols[1] offr = offsymbols[2] offd = offsymbols[3] end if default == name then default = pdfconstant(name) else default = pdf_off end -- local appearance if false then -- needs testing appearance = pdfdictionary { -- maybe also cache components N = pdfshareobjectreference(pdfdictionary { [name] = registeredsymbol(yesn), Off = registeredsymbol(offn) }), R = pdfshareobjectreference(pdfdictionary { [name] = registeredsymbol(yesr), Off = registeredsymbol(offr) }), D = pdfshareobjectreference(pdfdictionary { [name] = registeredsymbol(yesd), Off = registeredsymbol(offd) }), } else appearance = pdfdictionary { -- maybe also cache components N = pdfdictionary { [name] = registeredsymbol(yesn), Off = registeredsymbol(offn) }, R = pdfdictionary { [name] = registeredsymbol(yesr), Off = registeredsymbol(offr) }, D = pdfdictionary { [name] = registeredsymbol(yesd), Off = registeredsymbol(offd) } } end local appearanceref = pdfshareobjectreference(appearance) -- pdfreference(pdfflushobject(appearance)) return appearanceref, default, yesvalue end local function fielddefault(field) local default = field.default if not default or default == "" then local values = settings_to_array(field.values) default = values[1] end if not default or default == "" then return pdf_off else return pdfconstant(default) end end local function fieldoptions(specification) local values = specification.values local default = specification.default if values then local v = settings_to_array(values) for i=1,#v do local vi = v[i] local shown, value = lpegmatch(splitter,vi) if shown and value then v[i] = pdfarray { pdfunicode(value), shown } else v[i] = pdfunicode(v[i]) end end return pdfarray(v) end end local mapping = { -- acrobat compliant (messy, probably some pdfdoc encoding interference here) check = "4", -- 0x34 circle = "l", -- 0x6C cross = "8", -- 0x38 diamond = "u", -- 0x75 square = "n", -- 0x6E star = "H", -- 0x48 } local function todingbat(n) if n and n ~= "" then return mapping[n] or "" end end -- local zero_bc = pdfarray { 0, 0, 0 } -- local zero_bg = pdfarray { 1, 1, 1 } local function fieldrendering(specification) local bvalue = tonumber(specification.backgroundcolorvalue) local fvalue = tonumber(specification.framecolorvalue) local svalue = specification.fontsymbol if bvalue or fvalue or (svalue and svalue ~= "") then return pdfdictionary { BG = bvalue and pdfarray { lpdf.colorvalues(3,bvalue) } or nil, -- or zero_bg, BC = fvalue and pdfarray { lpdf.colorvalues(3,fvalue) } or nil, -- or zero_bc, CA = svalue and pdfstring (svalue) or nil, } end end -- layers local function fieldlayer(specification) -- we can move this in line local layer = specification.layer return (layer and lpdf.layerreference(layer)) or nil end -- defining local fields, radios, clones, fieldsets, calculationset = { }, { }, { }, { }, nil local xfdftemplate = [[ %s ]] function codeinjections.exportformdata(name) local result = { } for k, v in table.sortedhash(fields) do result[#result+1] = format(" %s",v.name or k,v.default or "") end local base = file.basename(tex.jobname) local xfdf = format(xfdftemplate,base,table.concat(result,"\n")) if not name or name == "" then name = base end io.savedata(file.addsuffix(name,"xfdf"),xfdf) end function codeinjections.definefieldset(tag,list) fieldsets[tag] = list end function codeinjections.getfieldset(tag) return fieldsets[tag] end local function fieldsetlist(tag) if tag then local ft = fieldsets[tag] if ft then local a = pdfarray() for name in gmatch(list,"[^, ]+") do local f = field[name] if f and f.pobj then a[#a+1] = pdfreference(f.pobj) end end return a end end end function codeinjections.setfieldcalculationset(tag) calculationset = tag end local function predefinesymbols(specification) local values = specification.values if values then local symbols = settings_to_array(values) for i=1,#symbols do local symbol = symbols[i] local a, b = lpegmatch(splitter,symbol) codeinjections.presetsymbol(a or symbol) end end end function codeinjections.getdefaultfieldvalue(name) local f = fields[name] if f then local values = f.values local default = f.default if not default or default == "" then local symbols = settings_to_array(values) local symbol = symbols[1] if symbol then local a, b = lpegmatch(splitter,symbol) -- splits at => default = a or symbol end end return default end end function codeinjections.definefield(specification) local n = specification.name local f = fields[n] if not f then local fieldtype = specification.type if not fieldtype then if trace_fields then report_fields("invalid definition for %a, unknown type",n) end elseif fieldtype == "radio" then local values = specification.values if values and values ~= "" then values = settings_to_array(values) for v=1,#values do radios[values[v]] = { parent = n } end fields[n] = specification if trace_fields then report_fields("defining %a as type %a",n,"radio") end elseif trace_fields then report_fields("invalid definition of radio %a, missing values",n) end elseif fieldtype == "sub" then -- not in main field list ! local radio = radios[n] if radio then -- merge specification for key, value in next, specification do radio[key] = value end if trace_fields then local p = radios[n] and radios[n].parent report_fields("defining %a as type sub of radio %a",n,p) end elseif trace_fields then report_fields("invalid definition of radio sub %a, no parent given",n) end predefinesymbols(specification) elseif fieldtype == "text" or fieldtype == "line" then fields[n] = specification if trace_fields then report_fields("defining %a as type %a",n,fieldtype) end if specification.values ~= "" and specification.default == "" then specification.default, specification.values = specification.values, nil end else fields[n] = specification if trace_fields then report_fields("defining %a as type %a",n,fieldtype) end predefinesymbols(specification) end elseif trace_fields then report_fields("invalid definition for %a, already defined",n) end end function codeinjections.clonefield(specification) -- obsolete local p, c, v = specification.parent, specification.children, specification.alternative if not p or not c then if trace_fields then report_fields("invalid clone, children %a, parent %a, alternative %a",c,p,v) end return end local x = fields[p] or radios[p] if not x then if trace_fields then report_fields("invalid clone, unknown parent %a",p) end return end for n in gmatch(c,"[^, ]+") do local f, r, c = fields[n], radios[n], clones[n] if f or r or c then if trace_fields then report_fields("already cloned, child %a, parent %a, alternative %a",n,p,v) end else if trace_fields then report_fields("cloning, child %a, parent %a, alternative %a",n,p,v) end clones[n] = specification predefinesymbols(specification) end end end function codeinjections.getfieldcategory(name) local f = fields[name] or radios[name] or clones[name] if f then local g = f.category if not g or g == "" then local v, p, t = f.alternative, f.parent, f.type if v == "clone" or v == "copy" then f = fields[p] or radios[p] g = f and f.category elseif t == "sub" then f = fields[p] g = f and f.category end end return g end end -- function codeinjections.validfieldcategory(name) return fields[name] or radios[name] or clones[name] end function codeinjections.validfieldset(name) return fieldsets[tag] end function codeinjections.validfield(name) return fields[name] end -- local alignments = { flushleft = 0, right = 0, center = 1, middle = 1, flushright = 2, left = 2, } local function fieldalignment(specification) return alignments[specification.align] or 0 end local function enhance(specification,option) local so = specification.option if so and so ~= "" then specification.option = so .. "," .. option else specification.option = option end return specification end -- finish local collected = pdfarray() local forceencoding = false local function finishfields() local sometext = forceencoding for name, field in next, fields do local kids = field.kids if kids then pdfflushobject(field.kidsnum,kids) end local opt = field.opt if opt then pdfflushobject(field.optnum,opt) end local type = field.type if not sometext and (type == "text" or type == "line") then sometext = true end end for name, field in next, radios do local kids = field.kids if kids then pdfflushobject(field.kidsnum,kids) end local opt = field.opt if opt then pdfflushobject(field.optnum,opt) end end if #collected > 0 then local acroform = pdfdictionary { NeedAppearances = true, Fields = pdfreference(pdfflushobject(collected)), CO = fieldsetlist(calculationset), } if sometext then checkpdfdocencoding() usedfonts.tttf = fontnames.tt.tf acroform.DA = "/tttf 12 Tf 0 g" acroform.DR = pdfdictionary { Font = registerfonts(), Encoding = pdfdocencodingcapsule, } end lpdf.addtocatalog("AcroForm",pdfreference(pdfflushobject(acroform))) end end lpdf.registerdocumentfinalizer(finishfields,"form fields") local methods = { } function nodeinjections.typesetfield(name,specification) local field = fields[name] or radios[name] or clones[name] if not field then report_fields( "unknown child %a",name) -- unknown field return end local alternative, parent = field.alternative, field.parent if alternative == "copy" or alternative == "clone" then -- only in clones field = fields[parent] or radios[parent] end local method = methods[field.type] if method then return method(name,specification,alternative) else report_fields( "unknown method %a for child %a",field.type,name) end end local function save_parent(field,specification,d,hasopt) local kidsnum = pdfreserveobject() d.Kids = pdfreference(kidsnum) field.kidsnum = kidsnum field.kids = pdfarray() if hasopt then local optnum = pdfreserveobject() d.Opt = pdfreference(optnum) field.optnum = optnum field.opt = pdfarray() end local pnum = pdfflushobject(d) field.pobj = pnum collected[#collected+1] = pdfreference(pnum) end local function save_kid(field,specification,d,optname) local kn = pdfreserveannotation() field.kids[#field.kids+1] = pdfreference(kn) if optname then local opt = field.opt if opt then opt[#opt+1] = optname end end local width, height, depth = specification.width or 0, specification.height or 0, specification.depth local box = hpack_node(pdfannotation_node(width,height,depth,d(),kn)) box.width, box.height, box.depth = width, height, depth -- redundant return box end local function makelineparent(field,specification) local text = pdfunicode(field.default) local length = tonumber(specification.length or 0) or 0 local d = pdfdictionary { Subtype = pdf_widget, T = pdfunicode(specification.title), F = fieldplus(specification), Ff = fieldflag(specification), OC = fieldlayer(specification), DA = fieldsurrounding(specification), AA = fieldactions(specification), FT = pdf_tx, Q = fieldalignment(specification), MaxLen = length == 0 and 1000 or length, DV = text, V = text, } save_parent(field,specification,d) end local function makelinechild(name,specification) local field, parent = clones[name], nil if field then parent = fields[field.parent] if not parent.pobj then if trace_fields then report_fields("forcing parent text %a",parent.name) end makelineparent(parent,specification) end else parent = fields[name] field = parent if not parent.pobj then if trace_fields then report_fields("using parent text %a",name) end makelineparent(parent,specification) end end if trace_fields then report_fields("using child text %a",name) end local d = pdfdictionary { Subtype = pdf_widget, Parent = pdfreference(parent.pobj), F = fieldplus(specification), OC = fieldlayer(specification), DA = fieldsurrounding(specification), AA = fieldactions(specification), MK = fieldrendering(specification), Q = fieldalignment(specification), } return save_kid(parent,specification,d) end function methods.line(name,specification) return makelinechild(name,specification) end function methods.text(name,specification) return makelinechild(name,enhance(specification,"MultiLine")) end local function makechoiceparent(field,specification) local d = pdfdictionary { Subtype = pdf_widget, T = pdfunicode(specification.title), F = fieldplus(specification), Ff = fieldflag(specification), OC = fieldlayer(specification), AA = fieldactions(specification), FT = pdf_ch, Opt = fieldoptions(field), -- todo } save_parent(field,specification,d) end local function makechoicechild(name,specification) local field, parent = clones[name], nil if field then parent = fields[field.parent] if not parent.pobj then if trace_fields then report_fields("forcing parent choice %a",parent.name) end makechoiceparent(parent,specification,extras) end else parent = fields[name] field = parent if not parent.pobj then if trace_fields then report_fields("using parent choice %a",name) end makechoiceparent(parent,specification,extras) end end if trace_fields then report_fields("using child choice %a",name) end local d = pdfdictionary { Subtype = pdf_widget, Parent = pdfreference(parent.pobj), F = fieldplus(specification), OC = fieldlayer(specification), AA = fieldactions(specification), } return save_kid(parent,specification,d) -- do opt here end function methods.choice(name,specification) return makechoicechild(name,specification) end function methods.popup(name,specification) return makechoicechild(name,enhance(specification,"PopUp")) end function methods.combo(name,specification) return makechoicechild(name,enhance(specification,"PopUp,Edit")) end local function makecheckparent(field,specification) local d = pdfdictionary { T = pdfunicode(specification.title), -- todo: when tracing use a string F = fieldplus(specification), Ff = fieldflag(specification), OC = fieldlayer(specification), AA = fieldactions(specification), FT = pdf_btn, V = fielddefault(field), } save_parent(field,specification,d,true) end local function makecheckchild(name,specification) local field, parent = clones[name], nil if field then parent = fields[field.parent] if not parent.pobj then if trace_fields then report_fields("forcing parent check %a",parent.name) end makecheckparent(parent,specification,extras) end else parent = fields[name] field = parent if not parent.pobj then if trace_fields then report_fields("using parent check %a",name) end makecheckparent(parent,specification,extras) end end if trace_fields then report_fields("using child check %a",name) end local d = pdfdictionary { Subtype = pdf_widget, Parent = pdfreference(parent.pobj), F = fieldplus(specification), OC = fieldlayer(specification), AA = fieldactions(specification), H = pdf_n, } local fontsymbol = specification.fontsymbol if fontsymbol and fontsymbol ~= "" then specification.fontsymbol = todingbat(fontsymbol) specification.fontstyle = "symbol" specification.fontalternative = "dingbats" d.DA = fieldsurrounding(specification) d.MK = fieldrendering(specification) return save_kid(parent,specification,d) else local appearance, default, value = fieldstates_check(field,true) d.AS = default d.AP = appearance return save_kid(parent,specification,d,value) end end function methods.check(name,specification) return makecheckchild(name,specification) end local function makepushparent(field,specification) -- check if we can share with the previous local d = pdfdictionary { Subtype = pdf_widget, T = pdfunicode(specification.title), F = fieldplus(specification), Ff = fieldflag(specification), OC = fieldlayer(specification), AA = fieldactions(specification), FT = pdf_btn, AP = fieldappearances(field), H = pdf_p, } save_parent(field,specification,d) end local function makepushchild(name,specification) local field, parent = clones[name], nil if field then parent = fields[field.parent] if not parent.pobj then if trace_fields then report_fields("forcing parent push %a",parent.name) end makepushparent(parent,specification) end else parent = fields[name] field = parent if not parent.pobj then if trace_fields then report_fields("using parent push %a",name) end makepushparent(parent,specification) end end if trace_fields then report_fields("using child push %a",name) end local fontsymbol = specification.fontsymbol local d = pdfdictionary { Subtype = pdf_widget, Parent = pdfreference(field.pobj), F = fieldplus(specification), OC = fieldlayer(specification), AA = fieldactions(specification), H = pdf_p, } if fontsymbol and fontsymbol ~= "" then specification.fontsymbol = todingbat(fontsymbol) specification.fontstyle = "symbol" specification.fontalternative = "dingbats" d.DA = fieldsurrounding(specification) d.MK = fieldrendering(specification) else d.AP = fieldappearances(field) end return save_kid(parent,specification,d) end function methods.push(name,specification) return makepushchild(name,enhance(specification,"PushButton")) end local function makeradioparent(field,specification) -- specification = enhance(specification,"Radio,RadiosInUnison") specification = enhance(specification,"Radio,RadiosInUnison,Print,NoToggleToOff") -- specification = enhance(specification,"Radio,Print,NoToggleToOff") local d = pdfdictionary { T = field.name, FT = pdf_btn, -- F = fieldplus(specification), Ff = fieldflag(specification), -- H = pdf_n, V = fielddefault(field), } save_parent(field,specification,d,true) end -- local function makeradiochild(name,specification) -- local field, parent = clones[name], nil -- if field then -- field = radios[field.parent] -- parent = fields[field.parent] -- if not parent.pobj then -- if trace_fields then -- report_fields("forcing parent radio %a",parent.name) -- end -- makeradioparent(parent,parent) -- end -- else -- field = radios[name] -- if not field then -- report_fields("there is some problem with field %a",name) -- return nil -- end -- parent = fields[field.parent] -- if not parent.pobj then -- if trace_fields then -- report_fields("using parent radio %a",name) -- end -- makeradioparent(parent,parent) -- end -- end -- if trace_fields then -- report_fields("using child radio %a with values %a and default %a",name,field.values,field.default) -- end -- local fontsymbol = specification.fontsymbol -- fontsymbol="star" -- local d = pdfdictionary { -- Subtype = pdf_widget, -- Parent = pdfreference(parent.pobj), -- F = fieldplus(specification), -- OC = fieldlayer(specification), -- AA = fieldactions(specification), -- H = pdf_n, -- } -- if fontsymbol and fontsymbol ~= "" then -- local appearance, default, value = fieldstates_radio(field,true,false,false,name) -- false is also ok -- specification.fontsymbol = todingbat(fontsymbol) -- specification.fontstyle = "symbol" -- specification.fontalternative = "dingbats" -- d.DA = fieldsurrounding(specification) -- d.MK = fieldrendering(specification) -- d.AS = pdfconstant(value) -- default -- mandate when AP but confuses viewers -- d.AP = appearance -- return save_kid(parent,specification,d,value) -- -- return save_kid(parent,specification,d,name) -- else -- -- local appearance, default, value = fieldstates_radio(field,true) -- false is also ok -- local appearance, default, value = fieldstates_radio(field,true,false,false,name) -- false is also ok -- d.AS = default -- mandate when AP but confuses viewers -- d.AP = appearance -- return save_kid(parent,specification,d,value) -- end -- end local function makeradiochild(name,specification) local field, parent = clones[name], nil if field then field = radios[field.parent] parent = fields[field.parent] if not parent.pobj then if trace_fields then report_fields("forcing parent radio %a",parent.name) end makeradioparent(parent,parent) end else field = radios[name] if not field then report_fields("there is some problem with field %a",name) return nil end parent = fields[field.parent] if not parent.pobj then if trace_fields then report_fields("using parent radio %a",name) end makeradioparent(parent,parent) end end if trace_fields then report_fields("using child radio %a with values %a and default %a",name,field.values,field.default) end local fontsymbol = specification.fontsymbol -- fontsymbol = "circle" local d = pdfdictionary { Subtype = pdf_widget, Parent = pdfreference(parent.pobj), F = fieldplus(specification), OC = fieldlayer(specification), AA = fieldactions(specification), H = pdf_n, } if fontsymbol and fontsymbol ~= "" then specification.fontsymbol = todingbat(fontsymbol) specification.fontstyle = "symbol" specification.fontalternative = "dingbats" d.DA = fieldsurrounding(specification) d.MK = fieldrendering(specification) end local appearance, default, value = fieldstates_radio(field,name,fields[field.parent]) d.AP = appearance d.AS = default -- /Whatever return save_kid(parent,specification,d,value) end function methods.sub(name,specification) return makeradiochild(name,enhance(specification,"Radio,RadiosInUnison")) end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-frc.lua0000644000175000017500000000255212132111075024072 0ustar norbertnorbertif not modules then modules = { } end modules ['math-frc'] = { version = 1.001, comment = "companion to math-frc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfchar = utf.char local context = context local variables = interfaces.variables local v_no = variables.no local v_yes = variables.yes local resolved = { [0x007B] = "\\{", [0x007D] = "\\}", } table.setmetatableindex(resolved, function(t,k) local v = utfchar(k) t[k] = v return v end) local normalatop = context.normalatop local normalover = context.normalover function commands.math_frac(how,left,right,width) if how == v_no then if left == 0x002E and right == 0x002E then normalatop() else context("\\atopwithdelims%s%s",resolved[left],resolved[right]) end elseif how == v_yes then if left == 0x002E and right == 0x002E then context("\\normalabove%ssp",width) else context("\\abovewithdelims%s%s%ssp",resolved[left],resolved[right],width) end else -- v_auto if left == 0x002E and right == 0x002E then normalover() else context("\\overwithdelims%s%s",resolved[left],resolved[right]) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/util-ran.lua0000644000175000017500000000472312130411274024130 0ustar norbertnorbertif not modules then modules = { } end modules ['util-ran'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local random = math.random local concat = table.concat local sub, upper = string.sub, string.upper local randomizers = utilities.randomizers or { } utilities.randomizers = randomizers local l_one = "bcdfghjklmnpqrstvwxz" local l_two = "aeiouy" local u_one = upper(l_one) local u_two = upper(l_two) local n_one = #l_one local n_two = #l_two function randomizers.word(min,max,separator) local t = { } for i=1,random(min,max) do if i % 2 == 0 then local r = random(1,n_one) t[i] = sub(l_one,r,r) else local r = random(1,n_two) t[i] = sub(l_two,r,r) end end return concat(t,separator) end function randomizers.initials(min,max) if not min then if not max then min, max = 1, 3 else min, max = 1, min end elseif not max then max = min end local t = { } local n = random(min or 1,max or 3) local m = 0 for i=1,n do m = m + 1 if i % 2 == 0 then local r = random(1,n_one) t[m] = sub(u_one,r,r) else local r = random(1,n_two) t[m] = sub(u_two,r,r) end m = m + 1 t[m] = "." end return concat(t) end function randomizers.firstname(min,max) if not min then if not max then min, max = 3, 10 else min, max = 1, min end elseif not max then max = min end local t = { } local n = random(min,max) local b = true if n % 2 == 0 then local r = random(1,n_two) t[1] = sub(u_two,r,r) b = true else local r = random(1,n_one) t[1] = sub(u_one,r,r) b = false end for i=2,n do if b then local r = random(1,n_one) t[i] = sub(l_one,r,r) b = false else local r = random(1,n_two) t[i] = sub(l_two,r,r) b = true end end return concat(t,separator) end randomizers.surname = randomizers.firstname -- for i=1,10 do -- print(randomizers.initials(1,3),randomizers.firstname(5,10),randomizers.surname(5,15)) -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mno.mkii0000644000175000017500000003065711571377075024344 0ustar norbertnorbert\setinterfacemessage{references}{1}{ukjent referanse --} \setinterfacemessage{references}{30}{ukjent objekt --} \setinterfacemessage{references}{3}{ukjent referansetype --} \setinterfacemessage{references}{2}{duplikat referanse -- pø side --} \setinterfacemessage{references}{5}{number of unknown references: --} \setinterfacemessage{references}{4}{ulovlig referanse --} \setinterfacemessage{references}{6}{number of illegal references: --} \setinterfacemessage{references}{25}{references from document '--' are not imported (export again)} \setinterfacemessage{references}{24}{references from document '--' are not exported} \setinterfacemessage{references}{title}{referanser} \setinterfacemessage{references}{26}{references from document '--' are imported} \setinterfacemessage{references}{31}{duplikat objekt --} \setinterfacemessage{references}{21}{dokument -- er lest inn} \setinterfacemessage{references}{22}{dokument -- er ikke interaktivt} \setinterfacemessage{references}{23}{obskur referanse -- (Prefix=--)} \setinterfacemessage{documents}{1}{sheet --} \setinterfacemessage{documents}{title}{sheets} \setinterfacemessage{documents}{2}{number --} \setinterfacemessage{handlings}{1}{font handling --} \setinterfacemessage{handlings}{3}{unknown font handling --} \setinterfacemessage{handlings}{2}{font handling -- is loaded} \setinterfacemessage{handlings}{title}{handling} \setinterfacemessage{systems}{title}{system} \setinterfacemessage{systems}{41}{ekstern fil -- i gruppe -- eksisterer ikke} \setinterfacemessage{systems}{9}{-- ikke funnet/behandlet} \setinterfacemessage{systems}{91}{papertray --} \setinterfacemessage{systems}{8}{ny versjon av hjelpefil, andre gjennomkjøring nødvendig} \setinterfacemessage{systems}{21}{hjelpefila er ikke lest inn} \setinterfacemessage{systems}{20}{betydning (sorterer) av -- er lest inn} \setinterfacemessage{systems}{5}{makroene i modul -- er lest inn} \setinterfacemessage{systems}{4}{kommando -- er allerede definert} \setinterfacemessage{systems}{27}{Versjon} \setinterfacemessage{systems}{26}{Registere} \setinterfacemessage{systems}{25}{Referanser} \setinterfacemessage{systems}{24}{Flytblokker} \setinterfacemessage{systems}{1}{innlesning av hjelpefila utsatt (typemode)} \setinterfacemessage{systems}{23}{-- arrangert på --} \setinterfacemessage{systems}{22}{bruk en gyldig hjelpefil} \setinterfacemessage{systems}{2}{-- er lest inn} \setinterfacemessage{systems}{19}{betydning (synonymer) av -- er lest inn} \setinterfacemessage{systems}{18}{synonym -- -- eksisterer ikke} \setinterfacemessage{systems}{7}{makroene i modul -- er allerede lest inn} \setinterfacemessage{systems}{6}{ingen makroer funnet i modul ---} \setinterfacemessage{systems}{14}{tvunget sideskift i liste ved --} \setinterfacemessage{systems}{15}{lagrer Buffer --} \setinterfacemessage{systems}{16}{tegnsetter buffer --} \setinterfacemessage{systems}{17}{tegnsetter verbatim-buffer --} \setinterfacemessage{systems}{13}{markering -- definert --} \setinterfacemessage{systems}{12}{hjelpefila er ikke sortert, bruk texutil} \setinterfacemessage{systems}{11}{lager enkel hjelpefil} \setinterfacemessage{systems}{10}{ikke bruk em i --} \setinterfacemessage{floatblocks}{1}{-- renummerert / -- => --} \setinterfacemessage{floatblocks}{3}{-- flyttet} \setinterfacemessage{floatblocks}{2}{-- lagret} \setinterfacemessage{floatblocks}{5}{rekkefølge tilpasset} \setinterfacemessage{floatblocks}{4}{-- plassert} \setinterfacemessage{floatblocks}{7}{maksimalt -- flytblokker nederst} \setinterfacemessage{floatblocks}{6}{maksimalt -- flytblokker øverst} \setinterfacemessage{floatblocks}{9}{rekkefølge endret} \setinterfacemessage{floatblocks}{8}{mindre enn -- linjer} \setinterfacemessage{floatblocks}{title}{flytblokker} \setinterfacemessage{floatblocks}{13}{there is nothing to split} \setinterfacemessage{floatblocks}{12}{udefinert} \setinterfacemessage{floatblocks}{11}{ingen blokk oppgitt} \setinterfacemessage{floatblocks}{10}{-- begrenset} \setinterfacemessage{interactions}{1}{forholdstall -- x -- (b x h)} \setinterfacemessage{interactions}{3}{inaktiv} \setinterfacemessage{interactions}{2}{aktiv} \setinterfacemessage{interactions}{5}{unknown attachment --} \setinterfacemessage{interactions}{4}{ingen sidesynkronisering (--) i hmode} \setinterfacemessage{interactions}{6}{attachment file -- does not exist} \setinterfacemessage{interactions}{title}{interaksjon} \setinterfacemessage{interactions}{21}{-- kode satt inn / tilføyd} \setinterfacemessage{regimes}{1}{koding --} \setinterfacemessage{regimes}{3}{ukjent koding --} \setinterfacemessage{regimes}{2}{koding -- er lest inn} \setinterfacemessage{regimes}{title}{koding} \setinterfacemessage{structures}{1}{starten av blokk -- (seksjon)} \setinterfacemessage{structures}{title}{struktur} \setinterfacemessage{structures}{2}{slutten av blokk -- (seksjon)} \setinterfacemessage{linguals}{1}{orddelingsmønster -- for -- er lest inn (n=--,e=--,m=--)} \setinterfacemessage{linguals}{3}{orddelingsdefinisjon -- for -- er lest inn (n=--,e=--,m=--)} \setinterfacemessage{linguals}{2}{ingen orddelingsmønster -- for -- (n=--,e=--,m=--) (--,--)} \setinterfacemessage{linguals}{5}{orddelingsmønster for -- er ikke lest inn} \setinterfacemessage{linguals}{4}{ingen orddelingsdefinisjon -- for -- (n=--,e=--,m=--)} \setinterfacemessage{linguals}{7}{spràk spesifikk opsjon [--] introduserer et -- hopp} \setinterfacemessage{linguals}{6}{spràk -- er udefinert} \setinterfacemessage{linguals}{9}{spràk -- er aktivt} \setinterfacemessage{linguals}{8}{spràk spesifikk opsjon [--] problemfritt tilføyd} \setinterfacemessage{linguals}{title}{sprøk} \setinterfacemessage{linguals}{10}{orddelingsmønster -- er lest inn} \setinterfacemessage{verbatims}{1}{fil -- eksisterer ikke} \setinterfacemessage{verbatims}{title}{verbatim} \setinterfacemessage{filters}{1}{filter -- is loaded} \setinterfacemessage{filters}{title}{filter} \setinterfacemessage{filters}{2}{unknown filter --} \setinterfacemessage{textblocks}{1}{ny versjon, andre gjennomkjøring nødvendig} \setinterfacemessage{textblocks}{3}{leser blokker fra --} \setinterfacemessage{textblocks}{2}{skriver blokker til --} \setinterfacemessage{textblocks}{5}{-- ikke skjult} \setinterfacemessage{textblocks}{4}{andre gjennomkjøring nødvendig} \setinterfacemessage{textblocks}{7}{-- skjult} \setinterfacemessage{textblocks}{6}{-- skjult og behandlet} \setinterfacemessage{textblocks}{9}{-- ikke tegnsatt} \setinterfacemessage{textblocks}{8}{-- tegnsatt} \setinterfacemessage{textblocks}{title}{tekstblokker} \setinterfacemessage{textblocks}{12}{-- utelatt} \setinterfacemessage{textblocks}{11}{-- lest inn og tegnsatt} \setinterfacemessage{textblocks}{10}{-- lest inn og behandlet} \setinterfacemessage{encodings}{1}{koding --} \setinterfacemessage{encodings}{3}{ukjent koding --} \setinterfacemessage{encodings}{2}{koding -- er lest inn} \setinterfacemessage{encodings}{title}{koding} \setinterfacemessage{columns}{1}{maksimalt -- kolonner} \setinterfacemessage{columns}{3}{problemer, slår av balansering} \setinterfacemessage{columns}{2}{bruk \string\filbreak\space som et alternativ} \setinterfacemessage{columns}{5}{flytblokker nedert er ikke støttet enda} \setinterfacemessage{columns}{4}{flytblokker øverst er ikke støttet enda} \setinterfacemessage{columns}{7}{balansering avbrutt etter 100 iterasjoner} \setinterfacemessage{columns}{6}{-- flytblokk forskjøvet} \setinterfacemessage{columns}{9}{kontroller tekstlayout!} \setinterfacemessage{columns}{8}{balansert etter -- iterasjoner} \setinterfacemessage{columns}{title}{kolonner} \setinterfacemessage{columns}{13}{bred flytblokk forksjøvet til toppen av kolonnene} \setinterfacemessage{columns}{12}{flytblokk forskjøvet til neste kolonne / --} \setinterfacemessage{columns}{11}{flytblokk for bredt for kolonna} \setinterfacemessage{columns}{10}{(mindre enn) 1 linje igjen} \setinterfacemessage{symbols}{1}{leser inn symbolsett --} \setinterfacemessage{symbols}{title}{symboler} \setinterfacemessage{files}{1}{filesynonym -- er allerede brukt for --} \setinterfacemessage{files}{title}{filer} \setinterfacemessage{versions}{1}{manglende @+} \setinterfacemessage{versions}{3}{valgte sider: --} \setinterfacemessage{versions}{2}{markerer sider} \setinterfacemessage{versions}{title}{versjon} \setinterfacemessage{specials}{1}{-- er lest inn} \setinterfacemessage{specials}{3}{-- er tilbakestilt} \setinterfacemessage{specials}{2}{dypere 'nesting' er ikke tillatt --} \setinterfacemessage{specials}{5}{leser inn definisjonsfil for --} \setinterfacemessage{specials}{4}{kommando -- eksisterer ikke} \setinterfacemessage{specials}{7}{ukjent driver --} \setinterfacemessage{specials}{6}{'nesting' er ikke tillatt} \setinterfacemessage{specials}{title}{specials} \setinterfacemessage{layouts}{1}{teksthøyde tilpasset med -- på side --} \setinterfacemessage{layouts}{3}{-- ganger tekst forskjøvet} \setinterfacemessage{layouts}{2}{-- ganger forskjøvet tekst plassert} \setinterfacemessage{layouts}{5}{margblokker inaktive} \setinterfacemessage{layouts}{4}{margblokker aktive} \setinterfacemessage{layouts}{7}{beregner plass for logo} \setinterfacemessage{layouts}{6}{delside sett -- behandlet (størrelse --)} \setinterfacemessage{layouts}{9}{for øyeblikket maksimalt -- nivåer i opplisting} \setinterfacemessage{layouts}{8}{beregner bakgrunn} \setinterfacemessage{layouts}{title}{layout} \setinterfacemessage{layouts}{11}{mellomrom -- ikke tillatt i gridmodus} \setinterfacemessage{layouts}{10}{-- og -- er ikke 1.0 til sammen} \setinterfacemessage{fonts}{1}{koding --} \setinterfacemessage{fonts}{3}{ukjent variant --} \setinterfacemessage{fonts}{2}{variant -- er lest inn} \setinterfacemessage{fonts}{5}{stil -- er ikke definert} \setinterfacemessage{fonts}{4}{hovedfont -- er ikke definert} \setinterfacemessage{fonts}{7}{ukjent format --} \setinterfacemessage{fonts}{6}{-- er lest inn} \setinterfacemessage{fonts}{14}{bodyfont -- is defined (can better be done global)} \setinterfacemessage{fonts}{8}{stil -- definert} \setinterfacemessage{fonts}{title}{hovedfont} \setinterfacemessage{fonts}{10}{ukjent fontfil --} \setinterfacemessage{databases}{1}{--} \setinterfacemessage{databases}{3}{global fil --} \setinterfacemessage{databases}{2}{lokal fil --} \setinterfacemessage{databases}{4}{ukjent fil --} \setinterfacemessage{databases}{title}{databaser} \setinterfacemessage{publications}{1}{file -- not found, unknown style ignored} \setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux} \setinterfacemessage{publications}{title}{publications} \setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex} \setinterfacemessage{publications}{4}{loading database from --} \setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno} \setinterfacemessage{publications}{6}{loading formatting style from --} \setinterfacemessage{javascript}{1}{leser inn scriptsett --} \setinterfacemessage{javascript}{title}{javascript} \setinterfacemessage{javascript}{2}{ukjent 'preamble' --} \setinterfacemessage{check}{1}{manglende '=' etter '--' i linje --} \setinterfacemessage{check}{3}{-- -- overskygger en makro, bruk STORE BOKSTAVER!} \setinterfacemessage{check}{2}{-- argument forventet i linje --} \setinterfacemessage{check}{title}{kontroll} \setinterfacemessage{metapost}{1}{metapost bibliotek -- blir lest inn} \setinterfacemessage{metapost}{title}{metapost} \setinterfacemessage{figures}{1}{figure -- can not be found} \setinterfacemessage{figures}{3}{dimensions of -- are determined externally} \setinterfacemessage{figures}{2}{figure -- is not preset} \setinterfacemessage{figures}{5}{dimensions of -- are unknown} \setinterfacemessage{figures}{4}{dimensions of -- loaded from figurefile itself} \setinterfacemessage{figures}{6}{dimensions of -- calculated by rlxtools} \setinterfacemessage{figures}{8}{figureobject -- is reused} \setinterfacemessage{figures}{title}{figures} \setinterfacemessage{colors}{1}{system -- er aktivert globalt} \setinterfacemessage{colors}{3}{-- er udefinert --} \setinterfacemessage{colors}{2}{system -- er aktivert lokalt} \setinterfacemessage{colors}{5}{ukjent system --} \setinterfacemessage{colors}{4}{system -- er lest inn} \setinterfacemessage{colors}{7}{palett -- er ikke tilgjengelig} \setinterfacemessage{colors}{6}{palett -- er tilgjengelig} \setinterfacemessage{colors}{9}{-- fargerom er ikke støttet} \setinterfacemessage{colors}{8}{spesifikasjon -- for farge -- gir kun svart} \setinterfacemessage{colors}{title}{farge} \setinterfacemessage{colors}{12}{-- is registered} \setinterfacemessage{colors}{11}{fargen vil bli vist som grø} \setinterfacemessage{colors}{10}{-- fargerom er støttet} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-system.mkiv0000644000175000017500000000135612161703335026317 0ustar norbertnorbert%D \module %D [ file=s-languages-system, % moved from local s-lan-01 %D version=2013.05.19, %D title=\CONTEXT\ Style File, %D subtitle=Installed Languages, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[languages-system] \registerctxluafile{s-languages-system}{} \installmodulecommandluasingle \showinstalledlanguages {moduledata.languages.system.showinstalled} \stopmodule \continueifinputfile{s-languages-system.mkiv} \usemodule[art-01] \starttext \showinstalledlanguages \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/page-run.mkii0000644000175000017500000004031611754241457024300 0ustar norbertnorbert%D \module %D [ file=page-run, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Runtime Macros} \unprotect \gdef\doshowprint[#1][#2][#3]% {\framed [\c!offset=\v!overlay, \c!strut=\v!no] {\forgetall \dontcomplain \globaldefs\minusone \dimen0\pagegoal \definepapersize[X][\c!width=4em, \c!height=6em]% \definepapersize[Y][\c!width=12em,\c!height=14em]% \setuppapersize[#1,X][#2,Y]% \setuplayout[#3]% \setbox0\vbox {\framed [\c!offset=\v!overlay,\c!strut=\v!no, \c!width=\paperwidth,\c!height=\paperheight] {\ss ABC\par DEF}}% \doublesidedfalse \def\cutmarklength{.5em}% \addpagecutmarks0% \replicatepagebox0% \scalepagebox0% \mirrorpaperbox0% \orientpaperbox0% \centerpagebox0% \mirrorprintbox0% \orientprintbox0% \offsetprintbox0% \pagegoal\dimen0 \box0}} \gdef\showprint {\dotripleempty\doshowprint} % \switchnaarkorps[8pt] % % \startcombinatie[4*4] % {\toonprint} {\strut} % {\toonprint[][][plaats=midden]} {\type{plaats=midden}} % {\toonprint[][][plaats=midden,markering=aan]} {\type{markering=aan}\break % \type{plaats=midden}} % {\toonprint[][][plaats=midden,markering=aan,nx=2]} {\type{markering=aan}\break % \type{plaats=midden}\break % \type{nx=2}} % {\toonprint[][][plaats=links]} {\type{plaats=links}} % {\toonprint[][][plaats=rechts]} {\type{plaats=rechts}} % {\toonprint[][][plaats={links,onder}]} {\type{plaats={links,onder}}} % {\toonprint[][][plaats={rechts,onder}]} {\type{plaats={rechts,onder}}} % {\toonprint[][][nx=2,ny=1]} {\type{nx=2,ny=1}} % {\toonprint[][][nx=1,ny=2]} {\type{nx=1,ny=2}} % {\toonprint[][][nx=2,ny=2]} {\type{nx=2,ny=2}} % {\toonprint[][][nx=2,ny=2,plaats=midden]} {\type{nx=2,ny=2}\break % \type{plaats=midden}} % {\toonprint[][][rugoffset=3pt]} {\type{rugoffset=.5cm}} % {\toonprint[][][kopoffset=3pt]} {\type{kopoffset=.5cm}} % {\toonprint[][][schaal=1.5]} {\type{schaal=1.5}} % {\toonprint[][][schaal=0.8]} {\type{schaal=0.8}} % \stopcombinatie % % \startcombinatie[3*4] % {\toonprint[liggend][][plaats=midden]} {\type{liggend}} % {\toonprint[][liggend][plaats=midden]} {\strut\break\type{liggend}} % {\toonprint[liggend][liggend][plaats=midden]} {\type{liggend}\break\type{liggend}} % {\toonprint[90][][plaats=midden]} {\type{90}} % {\toonprint[][90][plaats=midden]} {\strut\break\type{90}} % {\toonprint[90][90][plaats=midden]} {\type{90}\break\type{90}} % {\toonprint[180][][plaats=midden]} {\type{180}} % {\toonprint[][180][plaats=midden]} {\strut\break\type{180}} % {\toonprint[180][180][plaats=midden]} {\type{180}\break\type{180}} % {\toonprint[gespiegeld][][plaats=midden]} {\type{gespiegeld}} % {\toonprint[][gespiegeld][plaats=midden]} {\strut\break\type{gespiegeld}} % {\toonprint[gespiegeld][gespiegeld][plaats=midden]} {\type{gespiegeld}\break\type{gespiegeld}} % \stopcombinatie \gdef\doshowframe[#1][#2]% {\ifsecondargument \setupbackgrounds [\v!page] [\c!frame=\v!on, \c!corner=\v!rectangular, \c!frameoffset=\!!zeropoint, \c!framedepth=\!!zeropoint, \c!framecolor=layout:page] \setupbackgrounds [#1][#2] [\c!background=, \c!frame=\v!on, \c!corner=\v!rectangular, \c!frameoffset=\!!zeropoint, \c!framedepth=\!!zeropoint, \c!framecolor=] \else\iffirstargument \showframe [\v!header,\v!text,\v!footer] [#1] \else \showframe [\v!header,\v!text,\v!footer] [\v!leftedge,\v!leftmargin, \v!text, \v!rightmargin,\v!rightedge] \fi\fi \setupbackgrounds [\c!state=\v!repeat]} \gdef\showframe{\dodoubleempty\doshowframe} \gdef\showsetupA#1#2% {#1&\PtToCm{\the#2}&\the#2&\tttf\string#2\cr} \gdef\showsetupB#1#2#3% {#1&#3&\tttf\string#3\cr} % \startinterface english % english is fallback \gdef\showsetups {\noindent \vbox {\forgetall \dontcomplain \switchtobodyfont[\v!small] \tabskip\zeropoint \halign {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr \showsetupA{paperheight} \paperheight \showsetupA{paperwidth} \paperwidth \showsetupA{printpaperheight} \printpaperheight \showsetupA{printpaperwidth} \printpaperwidth \showsetupA{topspace} \topspace \showsetupA{backspace} \backspace \showsetupA{height} \makeupheight \showsetupA{width} \makeupwidth \showsetupA{top} \topheight \showsetupA{topdistance} \topdistance \showsetupA{header} \headerheight \showsetupA{headerdistance} \headerdistance \showsetupA{textheight} \textheight \showsetupA{footerdistance} \footerdistance \showsetupA{footer} \footerheight \showsetupA{bottomdistance} \bottomdistance \showsetupA{bottom} \bottomheight \showsetupA{leftedge} \leftedgewidth \showsetupA{leftedgedistance} \leftedgedistance \showsetupA{leftmargin} \leftmarginwidth \showsetupA{leftmargindistance} \leftmargindistance \showsetupA{textwidth} \textwidth \showsetupA{rightmargindistance}\rightmargindistance \showsetupA{rightmargin} \rightmarginwidth \showsetupA{rightedgedistance} \rightedgedistance \showsetupA{rightedge} \rightedgewidth \showsetupB{bodyfontsize} \the \globalbodyfontsize \showsetupB{line} \relax \normallineheight \showsetupB{height} \relax \strutheightfactor \showsetupB{depth} \relax \strutdepthfactor \showsetupB{topskip} \relax \topskipfactor \showsetupB{maxdepth} \relax \maxdepthfactor}}} % \stopinterface \startinterface dutch \gdef\showsetups {\noindent \vbox {\forgetall \dontcomplain \switchtobodyfont[\v!small] \tabskip\zeropoint \halign {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr \showsetupA{papierhoogte} \papierhoogte \showsetupA{papierbreedte} \papierbreedte \showsetupA{printpapierhoogte} \printpapierhoogte \showsetupA{printpapierbreedte} \printpapierbreedte \showsetupA{kopwit} \kopwit \showsetupA{rugwit} \rugwit \showsetupA{snijwit} \snijwit \showsetupA{hoogte} \zethoogte \showsetupA{breedte} \zetbreedte \showsetupA{boven} \bovenhoogte \showsetupA{bovenafstand} \bovenafstand \showsetupA{hoofd} \hoofdhoogte \showsetupA{hoofdafstand} \hoofdafstand \showsetupA{teksthoogte} \teksthoogte \showsetupA{voetafstand} \voetafstand \showsetupA{voet} \voethoogte \showsetupA{onderafstand} \onderafstand \showsetupA{onder} \onderhoogte \showsetupA{linkerrand} \linkerrandbreedte \showsetupA{linkerrandafstand} \linkerrandafstand \showsetupA{linkermarge} \linkermargebreedte \showsetupA{linkermargeafstand} \linkermargeafstand \showsetupA{tekstbreedte} \tekstbreedte \showsetupA{rechtermargeafstand}\rechtermargeafstand \showsetupA{rechtermarge} \rechtermargebreedte \showsetupA{rechterrandafstand} \rechterrandafstand \showsetupA{rechterrand} \rechterrandbreedte \showsetupB{korps} \the \globalbodyfontsize \showsetupB{regel} \relax \normallineheight \showsetupB{hoogte} \relax \strutheightfactor \showsetupB{diepte} \relax \strutdepthfactor \showsetupB{boven} \relax \topskipfactor \showsetupB{onder} \relax \maxdepthfactor}}} \stopinterface % todo: \showsetupA{rugwit} \rugwit \startinterface german \gdef\showsetups% {\noindent \vbox {\forgetall \dontcomplain \switchtobodyfont[\v!small] \tabskip\zeropoint \halign {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr \showsetupA{papierhoehe} \papierhoehe \showsetupA{papierbreite} \papierbreite \showsetupA{printpapierhoehe} \printpapierhoehe \showsetupA{printpapierbreite} \printpapierbreite \showsetupA{kopfweite} \kopfweite \showsetupA{rumpfweite} \rumpfweite \showsetupA{hoehe} \satzhoehe \showsetupA{breite} \satzbreite \showsetupA{oben} \hoeheoben \showsetupA{abstandoben} \abstandoben \showsetupA{kopfzeile} \kopfzeilenhoehe \showsetupA{kopfzeilenabstand} \kopfzeilenabstand \showsetupA{texthoehe} \texthoehe \showsetupA{fusszeileabstand} \fusszeileabstand \showsetupA{fusszeilen} \fusszeilenhoehe \showsetupA{abstandunten} \abstandunten \showsetupA{hoeheunten} \hoeheunten \showsetupA{linkerrand} \breitelinkerrand \showsetupA{abstandlinkerrand} \abstandlinkerrand \showsetupA{linkemarginal} \linkemarginalbreite \showsetupA{linkemarginalafstand} \linkemarginalafstand \showsetupA{textbreite} \textbreite \showsetupA{rechtemarginalafstand}\rechtemarginalafstand \showsetupA{rechtemarginal} \rechtemarginalbreite \showsetupA{abstandrechterrand} \abstandrechterrand \showsetupA{rechterrand} \breiterechterrand \showsetupB{fliesstext} \the \globalbodyfontsize \showsetupB{linie} \relax \normallineheight \showsetupB{hoehe} \relax \strutheightfactor \showsetupB{tiefe} \relax \strutdepthfactor \showsetupB{topskip} \relax \topskipfactor \showsetupB{maxdepth} \relax \maxdepthfactor}}} \stopinterface \startinterface czech \gdef\showsetups% {\noindent \vbox {\forgetall \dontcomplain \switchtobodyfont[\v!small] \tabskip\zeropoint \halign {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr \showsetupA{vyskapapiru} \vyskapapiru \showsetupA{sirkapapiru} \sirkapapiru \showsetupA{vyskatiskpapiru} \vyskatiskpapiru \showsetupA{sirkatiskpapiru} \sirkatiskpapiru \showsetupA{hornimezera} \hornimezera \showsetupA{spodnimezera} \spodnimezera \showsetupA{vyska} \vyskasazby \showsetupA{breite} \sirkasazby \showsetupA{vyskatextu} \vyskatextu \showsetupA{sirkatextu} \sirkatextu \showsetupA{horejsek} \vyskahorejsku \showsetupA{vzdalenosthorejsku} \vzdalenosthorejsku \showsetupA{zahlavi} \vyskazahlavi \showsetupA{vzdalenostzahlavi} \vzdalenostzahlavi \showsetupA{fusszeileabstand} \vzdalenostupati \showsetupA{upati} \vyskaupati \showsetupA{vzdalenostspodku} \vzdalenostspodku \showsetupA{spodek} \vyakaspodku \showsetupA{levyokraj} \sirkalevehookraje \showsetupA{vzdalenostlevehookraje} \vzdalenostlevehookraje \showsetupA{levamarginalie} \sirkalevemarginalie \showsetupA{vzdalenostlevemarginalie} \vzdalenostlevemarginalie \showsetupA{vzdalenostpravemarginalie}\vzdalenostpravemarginalie \showsetupA{pravamarginalie} \sirkapravemarginalie \showsetupA{vzdalenostpravehookraje} \vzdalenostpravehookraje \showsetupA{pravyokraj} \sirkapravehookraje \showsetupB{zakladnivelikost} \the \globalbodyfontsize \showsetupB{linka} \relax \normallineheight \showsetupB{vyska} \relax \strutheightfactor \showsetupB{hloubka} \relax \strutdepthfactor \showsetupB{topskip} \relax \topskipfactor \showsetupB{maxdepth} \relax \maxdepthfactor}}} \stopinterface \startinterface romanian \gdef\showsetups% {\noindent \vbox {\forgetall \dontcomplain \switchtobodyfont[\v!small] \tabskip\zeropoint \halign {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr \showsetupA{paperheight} \paperheight \showsetupA{paperwidth} \paperwidth \showsetupA{printpaperheight} \printpaperheight \showsetupA{printpaperwidth} \printpaperwidth \showsetupA{topspace} \topspace \showsetupA{backspace} \backspace \showsetupA{height} \makeupheight \showsetupA{width} \makeupwidth \showsetupA{top} \topheight \showsetupA{topdistance} \topdistance \showsetupA{header} \headerheight \showsetupA{headerdistance} \headerdistance \showsetupA{textheight} \textheight \showsetupA{footerdistance} \footerdistance \showsetupA{footer} \footerheight \showsetupA{bottomdistance} \bottomdistance \showsetupA{bottom} \bottomheight \showsetupA{leftedge} \leftedgewidth \showsetupA{leftedgedistance} \leftedgedistance \showsetupA{leftmargin} \leftmarginwidth \showsetupA{leftmargindistance} \leftmargindistance \showsetupA{textwidth} \textwidth \showsetupA{rightmargindistance}\rightmargindistance \showsetupA{rightmargin} \rightmarginwidth \showsetupA{rightedgedistance} \rightedgedistance \showsetupA{rightedge} \rightedgewidth \showsetupB{bodyfontsize} \the \globalbodyfontsize \showsetupB{line} \relax \normallineheight \showsetupB{height} \relax \strutheightfactor \showsetupB{depth} \relax \strutdepthfactor \showsetupB{topskip} \relax \topskipfactor \showsetupB{maxdepth} \relax \maxdepthfactor}}} \stopinterface \gdef\showlayout % interfereert lelijk met een \typefile er na {\bgroup \page \showframe \setuplayout[\c!marking=\v!on] \dorecurse{4}{\showsetups\page} \egroup} \gdef\showmargins {\starttabulate \NC asynchrone \NC \doifoddpageelse {odd} {even} \NC \NR \NC synchrone \NC \doifrightpageelse {right} {left} \NC \NR \NC right margin \NC \the\rightmarginwidth \NC \NR \NC left margin \NC \the\leftmarginwidth \NC \NR \NC outer margin \NC \the\outermarginwidth \NC \NR \NC inner margin \NC \the\innermarginwidth \NC \NR \stoptabulate} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-run.mkii0000644000175000017500000001172211754241457024307 0ustar norbertnorbert%D \module %D [ file=enco-run, %D version=2000.27.12, % moved to runtime module %D title=\CONTEXT\ Encoding Macros, %D subtitle=Runtime Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \gdef\visualizecharacters% {}'s needed {\def\uchar##1##2{\hbox to 2.5em {\ifcase##1\relax\red\or\blue\else\green\fi##1\hss##2}}% \let\normalbuildtextaccent\buildtextaccent \let\normalbottomaccent \bottomaccent %\def\char{\green\normalchar}% \def\char % can be used in \oalign {\bgroup\def\char{\green\normalchar\scratchcounter\egroup}% \afterassignment\char\scratchcounter}% \def\buildtextaccent{\let\green\empty\blue\normalbuildtextaccent}% \def\bottomaccent{\let\green\empty\red\normalbottomaccent}} \unexpanded\gdef\visualizecharacterslegend {\hbox {\edef\banner{\currentencoding\space\fontname\font}% \tttf\banner:\space {\blue composed}\space{\red bottom}\space{\green char}\space raw}} \gdef\showaccents {\bgroup \savefont \setuptextrules[\c!bodyfont=,\c!style=] \starttextrule{\visualizecharacterslegend} \whitespace \restorefont\setupinterlinespace \visualizecharacters \def\do##1% {{\def\dodo####1% {\hss\hbox to 1em{\hss\expanded{##1####1\recurselevel}\hss}}% \hbox to \hsize {\strut \localcolortrue \hbox to 2em{\tttf\string##1\hss}% \dorecurse{26}{\dodo\character}}% \hbox to \hsize {\strut \localcolortrue \hskip2em \dorecurse{26}{\dodo\Character}}}% \par} \do\'\do\`\do\^\do\~\do\" \do\H\do\r\do\v\do\u\do\= \do\.\do\b\do\d\do\k\do\c \stoptextrule \egroup} \gdef\showcharacters {\bgroup \savefont \setuptextrules[\c!bodyfont=,\c!style=] \starttextrule{\visualizecharacterslegend} \whitespace \dontcomplain \forgetall \def\startencoding[##1]{} \def\stopencoding{\endinput} \dimen0=\zeropoint \dimen2=\zeropoint \def\definecharacter ##1 ##2 % {\setbox0=\hbox spread 1em{\getvalue{##1}}% \ifdim\wd0>\dimen0 \dimen0=\wd0 \fi \setbox2=\hbox spread 1em{\box0 \tttf##1} \ifdim\wd2>\dimen2 \dimen2=\wd2 \fi}% \readsysfile{\f!encodingprefix def}{}{} \edef\encwidth{\the\dimen0} \dimen0=\hsize \advance\dimen0 2em \advance\dimen2 2em \divide \dimen0 by \dimen2 \advance\dimen0 1sp \edef\enccols{\number\dimen0} \visualizecharacters \startcolumns[\c!n=\enccols,\c!distance=2em] \restorefont\setupinterlinespace \def\definecharacter ##1 ##2 % {\setbox0=\hbox to \hsize{\localcolortrue\hbox to \encwidth{\getvalue{##1}\hss}\tttf##1}% \ht0\strutheight \dp0\strutdepth \box0 \allowbreak} \readsysfile{\f!encodingprefix def}{}{} \stopcolumns \stoptextrule \egroup} % \hbox % {\font\test=uplr8t \test \ruledhbox{t} % \font\test=uplr8r \test \ruledhbox{t}} \ifnum\texengine=\pdftexengine \gdef\showhyphenations#1% {\starttabulate[|le|l|] \NC language \NC \currentlanguage\ (internal code:\the\normallanguage) \NC \NR \NC font \NC \fontname\font \NC \NR \NC encoding \NC \ifx\@@fontencoding\empty not set\else\@@fontencoding\fi \NC \NR \NC mapping \NC \ifx\@@fontmapping \empty not set\else\@@fontmapping \fi \NC \NR \NC handling \NC \ifx\@@fonthandling\empty not set\else\@@fonthandling\fi \NC \NR \NC sample \NC \hyphenatedword{#1} \NC \NR \stoptabulate} \gdef\showmapping {\dostepwiserecurse{128}{255}{1} {\hbox\bgroup \hbox to 2em{\hss\recurselevel}% \hbox to 2em{\hss\char\recurselevel\hss}% \hbox to 3em{\hss\ifcase\lccode\recurselevel\else\the \lccode\recurselevel\fi}% \hbox to 2em{\hss\ifcase\lccode\recurselevel\else\char\lccode\recurselevel\fi\hss}% \hbox to 3em{\hss\ifcase\lccode\recurselevel\else\the \uccode\recurselevel\fi}% \hbox to 2em{\hss\ifcase\uccode\recurselevel\else\char\uccode\recurselevel\fi\hss}% \egroup \endgraf}} \gdef\showcharacterbounds {\bgroup \localcolortrue \dorecurse{255} {\ifdim\fontcharwd\font\recurselevel>\zeropoint \noindent\ruledhbox{\darkgray\char\recurselevel}\space \fi}\unskip \egroup} \else \gdef\showhyphenations#1% {\starttabulate[|le|l|] \NC language \NC \currentlanguage\ (internal code:\the\normallanguage) \NC \NR \NC font \NC \fontname\font \NC \NR \NC sample \NC \hyphenatedword{#1} \NC \NR \stoptabulate} \globallet\showmapping\relax \globallet\showcharacterbounds\relax \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-qx.mkii0000644000175000017500000001702711754241457024137 0ustar norbertnorbert%D \module %D [ file=enco-qx, %D version=2004.04.03, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Polish QX Encoding, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % to be done % 35 numbersign % 95 dotaccent % 132 greaterequal % 133 approxequal % 137 lessequal % 142 ell % 156 IJ % 173 infinity % 182 threequartersemdash % 188 ij % 247 anglearc % 248 diameter \startmapping[qx] % to be done \resetcaserange 128 to 128 \resetcaserange 131 to 133 \resetcaserange 136 to 137 \resetcaserange 140 to 144 \resetcaserange 148 to 148 \resetcaserange 150 to 150 \resetcaserange 157 to 160 \resetcaserange 163 to 165 \resetcaserange 168 to 169 \resetcaserange 172 to 176 \resetcaserange 180 to 180 \resetcaserange 182 to 182 \resetcaserange 189 to 191 \resetcaserange 198 to 198 \resetcaserange 215 to 216 \resetcaserange 223 to 223 \resetcaserange 230 to 230 \resetcaserange 247 to 248 \resetcaserange 255 to 255 \definecaseswap 161 129 \definecaseswap 162 130 \definecaseswap 166 134 \definecaseswap 167 135 \definecaseswap 170 138 \definecaseswap 171 139 \definecaseswap 177 145 \definecaseswap 178 146 \definecaseswap 179 147 \definecaseswap 181 149 \definecasemaps 151 to 156 lc +32 uc 0 \definecasemaps 183 to 188 lc 0 uc -32 \definecasemaps 192 to 197 lc +32 uc 0 \definecasemaps 224 to 229 lc 0 uc -32 \definecasemaps 199 to 214 lc +32 uc 0 \definecasemaps 231 to 246 lc 0 uc -32 \definecasemaps 217 to 222 lc +32 uc 0 \definecasemaps 249 to 254 lc 0 uc -32 \definecaseself 39 % quoteright \stopmapping \startencoding[qx] \definecharacter textacute 19 \definecharacter textbreve 21 \definecharacter textcaron 20 \definecharacter textcedilla 24 \definecharacter textcircumflex 94 \definecharacter textdiaeresis 127 \definecharacter textdotaccent 94 \definecharacter textgrave 18 \definecharacter texthungarumlaut 125 \definecharacter textmacron 22 \definecharacter textogonek 150 \definecharacter textring 23 \definecharacter texttilde 126 \definecharacter dotlessi 16 \definecharacter dotlessj 17 \definecharacter endash 123 \definecharacter emdash 124 \definecharacter aeligature 26 \definecharacter AEligature 29 \definecharacter oeligature 27 \definecharacter OEligature 30 \definecharacter ssharp 25 %definecharacter Ssharp 25 \definecharacter thorn 254 \definecharacter Thorn 222 \definecharacter Dstroke 208 % also Eth, mapped into enco-def \definecharacter eth 240 \definecharacter exclamdown 60 \definecharacter questiondown 62 \definecharacter sectionmark 159 \definecharacter percent 37 \definecharacter perthousand 216 \definecharacter textasciicircum 141 \definecharacter textasciitilde 140 \definecharacter textbackslash 198 \definecharacter textbraceleft 157 \definecharacter textbraceright 158 \definecharacter textunderscore 230 \definecharacter textcurrency 215 \definecharacter textdollar 36 \definecharacter texteuro 128 \definecharacter periodcentered 189 \definecharacter textdag 143 \definecharacter textddag 144 \definecharacter textdegree 148 \definecharacter textbullet 180 \definecharacter paragraphmark 176 \definecharacter copyright 164 \definecharacter registered 163 \definecharacter textbrokenbar 223 \definecharacter textellipsis 8 \definecharacter textslash 47 \definecharacter textpm 172 \definecharacter textdiv 165 \definecharacter textminus 168 \definecharacter textmultiply 169 \definecharacter textmu 7 \definecharacter quotedbl 190 \definecharacter quotedblbase 255 \definecharacter quotedblleft 92 \definecharacter quotedblright 34 \definecharacter quotesingle 191 \definecharacter quoteleft 96 \definecharacter quoteright 39 \definecharacter leftguillemot 174 \definecharacter rightguillemot 175 \definecharacter aacute 225 \definecharacter Aacute 193 \definecharacter cacute 162 \definecharacter Cacute 130 \definecharacter eacute 233 \definecharacter Eacute 201 \definecharacter iacute 237 \definecharacter Iacute 205 \definecharacter Nacute 139 \definecharacter Oacute 211 \definecharacter nacute 171 \definecharacter oacute 243 \definecharacter sacute 177 \definecharacter Sacute 145 \definecharacter uacute 250 \definecharacter Uacute 218 \definecharacter yacute 253 \definecharacter Yacute 221 \definecharacter zacute 185 \definecharacter Zacute 153 \definecharacter scaron 178 \definecharacter Scaron 146 \definecharacter zcaron 186 \definecharacter Zcaron 154 \definecharacter ccedilla 231 \definecharacter Ccedilla 199 \definecharacter acircumflex 226 \definecharacter Acircumflex 194 \definecharacter ecircumflex 234 \definecharacter Ecircumflex 202 \definecharacter icircumflex 238 \definecharacter Icircumflex 206 \definecharacter ocircumflex 244 \definecharacter Ocircumflex 212 \definecharacter ucircumflex 251 \definecharacter Ucircumflex 219 \definecharacter adiaeresis 228 \definecharacter Adiaeresis 196 \definecharacter ediaeresis 235 \definecharacter Ediaeresis 203 \definecharacter idiaeresis 239 \definecharacter Idiaeresis 207 \definecharacter odiaeresis 246 \definecharacter Odiaeresis 214 \definecharacter udiaeresis 252 \definecharacter Udiaeresis 220 \definecharacter ydiaeresis 184 \definecharacter Ydiaeresis 152 \definecharacter zdotaccent 187 \definecharacter Zdotaccent 155 \definecharacter agrave 224 \definecharacter Agrave 192 \definecharacter egrave 232 \definecharacter Egrave 200 \definecharacter igrave 236 \definecharacter Igrave 204 \definecharacter ograve 242 \definecharacter Ograve 210 \definecharacter ugrave 249 \definecharacter Ugrave 217 \definecharacter aogonek 161 \definecharacter Aogonek 129 \definecharacter eogonek 166 \definecharacter Eogonek 134 \definecharacter iogonek 167 \definecharacter Iogonek 135 \definecharacter uogonek 183 \definecharacter Uogonek 151 \definecharacter aring 229 \definecharacter Aring 197 \definecharacter lstroke 170 \definecharacter Lstroke 138 \definecharacter ostroke 28 \definecharacter Ostroke 31 \definecharacter atilde 227 \definecharacter Atilde 195 \definecharacter ntilde 241 \definecharacter Ntilde 209 \definecharacter otilde 245 \definecharacter Otilde 213 \definecharacter scommaaccent 179 \definecharacter Scommaaccent 147 \definecharacter tcommaaccent 181 \definecharacter Tcommaaccent 149 \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-mes.mkiv0000644000175000017500000000123111754241457024354 0ustar norbertnorbert%D \module %D [ file=syst-mes, %D version=2010.06.03, %D title=\CONTEXT\ System Macros, %D subtitle=Messages, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \newtoks\everywritestring \def\writedirect {\immediate\write\statuswrite} \def\writeline {\writedirect{}} \def\writestring#1{\begingroup\the\everywritestring\writedirect{#1}\endgroup} \let\writebanner \writestring \let\message \normalmessage \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-chk.mkiv0000644000175000017500000000665512130411274024314 0ustar norbertnorbert%D \module %D [ file=mult-chk, %D version=2009.04.13, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Multilingual Macros / Checking} %D This is very experimental code that eventually might be used %D once we have split the whole code base. %D \startbuffer %D \getcheckedparameters[MyTest][MyNamespace][a=1,b=2,c=3,d=4,crap=whatever] %D %D \MyNamespacea\quad %D \MyNamespaceb\quad %D \MyNamespacec\quad %D \MyNamespaced\quad %D crap is \ifdefined\MyNamespacecrap\else un\fi defined %D \stopbuffer %D %D \enablecheckparameters %D %D \setvalidparameterkeys[MyTest][a,b,c,d] \getbuffer \par %D \addvalidparameterkeys[MyTest][crap] \getbuffer \par \unprotect \registerctxluafile{mult-chk}{1.001} \unexpanded\def\setvalidparameterkeys{\dodoubleargument\mult_checkers_set_valid_parameter_keys} \unexpanded\def\addvalidparameterkeys{\dodoubleargument\mult_checkers_add_valid_parameter_keys} \def\mult_checkers_set_valid_parameter_keys[#1][#2]{\ctxlua{interfaces.setvalidkeys("#1",\!!bs#2\!!es)}} \def\mult_checkers_add_valid_parameter_keys[#1][#2]{\ctxlua{interfaces.addvalidkeys("#1",\!!bs#2\!!es)}} \def\mult_checkers_get_checked_parameters_yes[#1]#2[#3]#4[#5% {\if\noexpand#5]% \expandafter\gobblethreearguments \else \let\setsomevalue\dosetvalue % used at the lua end \expandafter\mult_checkers_get_checked_parameters_yes_indeed \fi{#1}{#3}#5} \def\mult_checkers_get_checked_parameters_yes_indeed#1#2#3]% %{\ctxlua{_igcp_("#1","#2",\!!bs\detokenize{#3}\!!es)}} {\ctxlua{interfaces.getcheckedparameters("#1","#2",\!!bs\detokenize{#3}\!!es)}} \def\mult_checkers_get_checked_parameters_nop[#1]#2[#3]#4[#5% {\if\noexpand#5]% \expandafter\gobbletwoarguments \else \let\setsomevalue\dosetvalue % used at the lua end \expandafter\mult_checkers_get_checked_parameters_nop_indeed \fi{#3}#5} \def\mult_checkers_get_checked_parameters_nop_indeed#1#2]% needs checking with adapted syst-aux.mkiv {\def\syst_helpers_get_parameters_assign{\syst_helpers_get_parameters_assign_indeed#1}% will change \syst_helpers_process_comma_item#2,],\_e_o_p_} \unexpanded\def\disablecheckparameters{\let\getcheckedparameters\mult_checkers_get_checked_parameters_nop} \unexpanded\def\enablecheckparameters {\let\getcheckedparameters\mult_checkers_get_checked_parameters_yes} \disablecheckparameters \protect \endinput \starttext \testfeatureonce{10000}{\getcheckedparameters[test][xx][a=b,c= d, e = f]} % 0.20 seconds \enablecheckparameters \testfeatureonce{10000}{\getcheckedparameters[test][xx][a=b,c= d, e = f]} % 0.35 seconds \getcheckedparameters[test][xx][a=a] \getcheckedparameters[test][xx][b= b] \getcheckedparameters[test][xx][c = c] \getcheckedparameters[test][xx][d = d d , e = e ,f = f ] \getcheckedparameters[test][xx][g={oeps {oeps}}] \getcheckedparameters[test][xx][crap=whatever] \startlines [a:\getvalue{xxa}][a] [b:\getvalue{xxb}][b] [c:\getvalue{xxc}][c] [d:\getvalue{xxd}][d d ] [e:\getvalue{xxe}][e ] [f:\getvalue{xxf}][f ] [g:\getvalue{xxg}][\detokenize\expandafter{\xxg}] \stoplines \setvalidparameterkeys[test][crap] \getcheckedparameters[test][xx][crap=whatever] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lst.lua0000644000175000017500000007005312161703335024155 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-lst'] = { version = 1.001, comment = "companion to strc-lst.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- when all datastructures are stable a packer will be added which will -- bring down memory consumption a bit; we can use for instance a pagenumber, -- section, metadata cache (internal then has to move up one level) or a -- shared cache [we can use a fast and stupid serializer] -- todo: tag entry in list is crap -- -- move more to commands local format, gmatch, gsub = string.format, string.gmatch, string.gsub local tonumber = tonumber local texcount = tex.count local concat, insert, remove = table.concat, table.insert, table.remove local lpegmatch = lpeg.match local simple_hash_to_string, settings_to_hash = utilities.parsers.simple_hash_to_string, utilities.parsers.settings_to_hash local allocate, checked = utilities.storage.allocate, utilities.storage.checked local trace_lists = false trackers.register("structures.lists", function(v) trace_lists = v end) local report_lists = logs.reporter("structure","lists") local structures = structures local lists = structures.lists local sections = structures.sections local helpers = structures.helpers local documents = structures.documents local pages = structures.pages local tags = structures.tags local references = structures.references local collected = allocate() local tobesaved = allocate() local cached = allocate() local pushed = allocate() lists.collected = collected lists.tobesaved = tobesaved lists.enhancers = lists.enhancers or { } lists.internals = allocate(lists.internals or { }) -- to be checked lists.ordered = allocate(lists.ordered or { }) -- to be checked lists.cached = cached lists.pushed = pushed references.specials = references.specials or { } local variables = interfaces.variables local matchingtilldepth = sections.matchingtilldepth local numberatdepth = sections.numberatdepth -- -- -- -- -- -- local function zerostrippedconcat(t,separator) -- for the moment not public local f, l = 1, #t for i=f,l do if t[i] == 0 then f = f + 1 end end for i=l,f,-1 do if t[i] == 0 then l = l - 1 end end return concat(t,separator,f,l) end -- -- -- -- -- -- local function initializer() -- create a cross reference between internal references -- and list entries local collected = lists.collected local internals = checked(references.internals) local ordered = lists.ordered for i=1,#collected do local c = collected[i] local m = c.metadata local r = c.references if m then -- access by internal reference local internal = r and r.internal if internal then internals[internal] = c end -- access by order in list local kind, name = m.kind, m.name if kind and name then local ok = ordered[kind] if ok then local on = ok[name] if on then on[#on+1] = c else ok[name] = { c } end else ordered[kind] = { [name] = { c } } end end end if r then r.listindex = i -- handy to have end end end job.register('structures.lists.collected', tobesaved, initializer) local groupindices = table.setmetatableindex("table") function lists.groupindex(name,group) local groupindex = groupindices[name] return groupindex and groupindex[group] or 0 end function lists.addto(t) local m = t.metadata local u = t.userdata if u and type(u) == "string" then t.userdata = helpers.touserdata(u) -- nicer at the tex end end local numberdata = t.numberdata local group = numberdata and numberdata.group if not group then -- forget about it elseif group == "" then group, numberdata.group = nil, nil else local groupindex = groupindices[m.name][group] if groupindex then numberdata.numbers = cached[groupindex].numberdata.numbers end end local r = t.references local i = r and r.internal or 0 -- brrr local p = pushed[i] if not p then p = #cached + 1 cached[p] = helpers.simplify(t) pushed[i] = p r.listindex = p end local setcomponent = references.setcomponent if setcomponent then setcomponent(t) -- might move to the tex end end if group then groupindices[m.name][group] = p end return p end function lists.discard(n) n = tonumber(n) if not n then -- maybe an error message elseif n == #cached then cached[n] = nil n = n -1 while n > 0 and cached[n] == false do cached[n] = nil -- collect garbage n = n - 1 end else cached[n] = false end end function lists.iscached(n) return cached[tonumber(n)] end -- this is the main pagenumber enhancer function lists.enhance(n) -- todo: symbolic names for counters local l = cached[n] if l then local metadata = l.metadata local references = l.references -- l.directives = nil -- might change -- save in the right order (happens at shipout) lists.tobesaved[#lists.tobesaved+1] = l -- default enhancer (cross referencing) references.realpage = texcount.realpageno -- tags local kind = metadata.kind local name = metadata.name if references then -- is this used ? local tag = tags.getid(kind,name) if tag and tag ~= "?" then references.tag = tag end --~ references.listindex = n end -- specific enhancer (kind of obsolete) local enhancer = kind and lists.enhancers[kind] if enhancer then enhancer(l) end return l end end -- we can use level instead but we can also decide to remove level from the metadata local nesting = { } function lists.pushnesting(i) local parent = lists.result[i] local name = parent.metadata.name local numberdata = parent and parent.numberdata local numbers = numberdata and numberdata.numbers local number = numbers and numbers[sections.getlevel(name)] or 0 insert(nesting, { number = number, name = name, result = lists.result, parent = parent }) end function lists.popnesting() local old = remove(nesting) lists.result = old.result end -- will be split -- Historically we had blocks but in the mkiv approach that could as well be a level -- which would simplify things a bit. local splitter = lpeg.splitat(":") -- this will become filtercollected(specification) and then we'll also have sectionblock as key local sorters = { [variables.command] = function(a,b) if a.metadata.kind == "command" or b.metadata.kind == "command" then return a.references.internal < b.references.internal else return a.references.order < b.references.order end end, [variables.all] = function(a,b) return a.references.internal < b.references.internal end, } -- some day soon we will pass a table .. also split the function local function filtercollected(names, criterium, number, collected, forced, nested, sortorder) -- names is hash or string local numbers, depth = documents.data.numbers, documents.data.depth local result, nofresult, detail = { }, 0, nil local block = false -- all criterium = gsub(criterium or ""," ","") -- not needed -- new, will be applied stepwise local wantedblock, wantedcriterium = lpegmatch(splitter,criterium) -- block:criterium if wantedblock == "" or wantedblock == variables.all or wantedblock == variables.text then criterium = wantedcriterium ~= "" and wantedcriterium or criterium elseif not wantedcriterium then block = documents.data.block else block, criterium = wantedblock, wantedcriterium end if block == "" then block = false end -- print(">>",block,criterium) -- forced = forced or { } -- todo: also on other branched, for the moment only needed for bookmarks if type(names) == "string" then names = settings_to_hash(names) end local all = not next(names) or names[variables.all] or false if trace_lists then report_lists("filtering names %a, criterium %a, block %a, number %a",names,criterium,block or "*",number) end if criterium == variables.intro then -- special case, no structure yet for i=1,#collected do local v = collected[i] local r = v.references if r and r.section == 0 then nofresult = nofresult + 1 result[nofresult] = v end end elseif all or criterium == variables.all or criterium == variables.text then for i=1,#collected do local v = collected[i] local r = v.references if r and (not block or not r.block or block == r.block) then local metadata = v.metadata if metadata then local name = metadata.name or false local sectionnumber = (r.section == 0) or sections.collected[r.section] if forced[name] or (sectionnumber and not metadata.nolist and (all or names[name])) then -- and not sectionnumber.hidenumber then nofresult = nofresult + 1 result[nofresult] = v end end end end elseif criterium == variables.current then if depth == 0 then return filtercollected(names,variables.intro,number,collected,forced,false,sortorder) else for i=1,#collected do local v = collected[i] local r = v.references if r and (not block or not r.block or block == r.block) then local sectionnumber = sections.collected[r.section] if sectionnumber then -- and not sectionnumber.hidenumber then local cnumbers = sectionnumber.numbers local metadata = v.metadata if cnumbers then if metadata and not metadata.nolist and (all or names[metadata.name or false]) and #cnumbers > depth then local ok = true for d=1,depth do local cnd = cnumbers[d] if not (cnd == 0 or cnd == numbers[d]) then ok = false break end end if ok then nofresult = nofresult + 1 result[nofresult] = v end end end end end end end elseif criterium == variables.here then -- this is quite dirty ... as cnumbers is not sparse we can misuse #cnumbers if depth == 0 then return filtercollected(names,variables.intro,number,collected,forced,false,sortorder) else for i=1,#collected do local v = collected[i] local r = v.references if r then -- and (not block or not r.block or block == r.block) then local sectionnumber = sections.collected[r.section] if sectionnumber then -- and not sectionnumber.hidenumber then local cnumbers = sectionnumber.numbers local metadata = v.metadata if cnumbers then if metadata and not metadata.nolist and (all or names[metadata.name or false]) and #cnumbers >= depth then local ok = true for d=1,depth do local cnd = cnumbers[d] if not (cnd == 0 or cnd == numbers[d]) then ok = false break end end if ok then nofresult = nofresult + 1 result[nofresult] = v end end end end end end end elseif criterium == variables.previous then if depth == 0 then return filtercollected(names,variables.intro,number,collected,forced,false,sortorder) else for i=1,#collected do local v = collected[i] local r = v.references if r and (not block or not r.block or block == r.block) then local sectionnumber = sections.collected[r.section] if sectionnumber then -- and not sectionnumber.hidenumber then local cnumbers = sectionnumber.numbers local metadata = v.metadata if cnumbers then if metadata and not metadata.nolist and (all or names[metadata.name or false]) and #cnumbers >= depth then local ok = true for d=1,depth-1 do local cnd = cnumbers[d] if not (cnd == 0 or cnd == numbers[d]) then ok = false break end end if ok then nofresult = nofresult + 1 result[nofresult] = v end end end end end end end elseif criterium == variables["local"] then -- not yet ok local nested = nesting[#nesting] if nested then return filtercollected(names,nested.name,nested.number,collected,forced,nested,sortorder) elseif sections.autodepth(documents.data.numbers) == 0 then return filtercollected(names,variables.all,number,collected,forced,false,sortorder) else return filtercollected(names,variables.current,number,collected,forced,false,sortorder) end elseif criterium == variables.component then -- special case, no structure yet local component = resolvers.jobs.currentcomponent() or "" if component ~= "" then for i=1,#collected do local v = collected[i] local r = v.references local m = v.metadata if r and r.component == component and (m and names[m.name] or all) then nofresult = nofresult + 1 result[nofresult] = v end end end else -- sectionname, number -- not the same as register local depth = sections.getlevel(criterium) local number = tonumber(number) or numberatdepth(depth) or 0 if trace_lists then local t = sections.numbers() detail = format("depth %s, number %s, numbers %s, startset %s",depth,number,(#t>0 and concat(t,".",1,depth)) or "?",#collected) end if number > 0 then local pnumbers = nil local pblock = block local parent = nested and nested.parent if parent then pnumbers = parent.numberdata.numbers or pnumbers -- so local as well as nested pblock = parent.references.block or pblock end for i=1,#collected do local v = collected[i] local r = v.references if r and (not block or not r.block or pblock == r.block) then local sectionnumber = sections.collected[r.section] if sectionnumber then local metadata = v.metadata local cnumbers = sectionnumber.numbers if cnumbers then if (all or names[metadata.name or false]) and #cnumbers >= depth and matchingtilldepth(depth,cnumbers,pnumbers) then nofresult = nofresult + 1 result[nofresult] = v end end end end end end end if trace_lists then report_lists("criterium %a, block %a, found %a, detail %a",criterium,block or "*",#result,detail) end if sortorder then -- experiment local sorter = sorters[sortorder] if sorter then if trace_lists then report_lists("sorting list using method %a",sortorder) end for i=1,#result do result[i].references.order = i end table.sort(result,sorter) end end return result end lists.filtercollected = filtercollected function lists.filter(specification) return filtercollected( specification.names, specification.criterium, specification.number, lists.collected, specification.forced, false, specification.order ) end lists.result = { } function lists.process(specification) lists.result = lists.filter(specification) local specials = utilities.parsers.settings_to_hash(specification.extras or "") specials = next(specials) and specials or nil for i=1,#lists.result do local r = lists.result[i] local m = r.metadata local s = specials and r.numberdata and specials[zerostrippedconcat(r.numberdata.numbers,".")] or "" context.strclistsentryprocess(m.name,m.kind,i,s) end end function lists.analyze(specification) lists.result = lists.filter(specification) end function lists.userdata(name,r,tag) -- to tex (todo: xml) local result = lists.result[r] if result then local userdata, metadata = result.userdata, result.metadata local str = userdata and userdata[tag] if str then return str, metadata end end end function lists.uservalue(name,r,tag,default) -- to lua local str = lists.result[r] str = str and str.userdata str = str and str[tag] return str or default end function lists.size() return #lists.result end function lists.location(n) local l = lists.result[n] return l and l.references.internal or n end function lists.label(n,default) local l = lists.result[n] local t = l.titledata return t and t.label or default or "" end function lists.sectionnumber(name,n,spec) local data = lists.result[n] local sectiondata = sections.collected[data.references.section] -- hm, prefixnumber? sections.typesetnumber(sectiondata,"prefix",spec,sectiondata) -- data happens to contain the spec too end -- some basics (todo: helpers for pages) function lists.title(name,n,tag) -- tag becomes obsolete local data = lists.result[n] if data then local titledata = data.titledata if titledata then helpers.title(titledata[tag] or titledata.list or titledata.title or "",data.metadata) end end end function lists.hastitledata(name,n,tag) local data = cached[tonumber(n)] if data then local titledata = data.titledata if titledata then return (titledata[tag] or titledata.title or "") == "" end end return false end function lists.haspagedata(name,n) local data = lists.result[n] if data then local references = data.references if references and references.realpage then -- or references.pagedata return true end end return false end function lists.hasnumberdata(name,n) local data = lists.result[n] if data then local numberdata = data.numberdata if numberdata and not numberdata.hidenumber then -- th ehide number is true return true end end return false end function lists.prefix(name,n,spec) helpers.prefix(lists.result[n],spec) end function lists.page(name,n,pagespec) helpers.page(lists.result[n],pagespec) end function lists.prefixedpage(name,n,prefixspec,pagespec) helpers.prefixpage(lists.result[n],prefixspec,pagespec) end function lists.realpage(name,n) local data = lists.result[n] if data then local references = data.references return references and references.realpage or 0 else return 0 end end -- numbers stored in entry.numberdata + entry.numberprefix function lists.number(name,n,spec) local data = lists.result[n] if data then local numberdata = data.numberdata if numberdata then sections.typesetnumber(numberdata,"number",spec or false,numberdata or false) end end end function lists.prefixednumber(name,n,prefixspec,numberspec) local data = lists.result[n] if data then helpers.prefix(data,prefixspec) local numberdata = data.numberdata if numberdata then sections.typesetnumber(numberdata,"number",numberspec or false,numberdata or false) end end end -- todo, do this in references namespace ordered instead (this is an experiment) -- -- also see lpdf-ano (maybe move this there) local splitter = lpeg.splitat(":") function references.specials.order(var,actions) -- references.specials ! local operation = var.operation if operation then local kind, name, n = lpegmatch(splitter,operation) local order = lists.ordered[kind] order = order and order[name] local v = order[tonumber(n)] local r = v and v.references.realpage if r then actions.realpage = r var.operation = r -- brrr, but test anyway return references.specials.page(var,actions) end end end -- interface (maybe strclistpush etc) commands.pushlist = lists.pushnesting commands.poplist = lists.popnesting commands.enhancelist = lists.enhance commands.processlist = lists.process commands.analyzelist = lists.analyze commands.listtitle = lists.title commands.listprefixednumber = lists.prefixednumber commands.listprefixedpage = lists.prefixedpage function commands.addtolist (...) context(lists.addto (...)) end function commands.listsize (...) context(lists.size (...)) end function commands.listlocation (...) context(lists.location (...)) end function commands.listlabel (...) context(lists.label (...)) end function commands.listrealpage (...) context(lists.realpage (...)) end function commands.listgroupindex (...) context(lists.groupindex(...)) end function commands.currentsectiontolist() context(lists.addto(sections.current())) end function commands.listuserdata(...) local str, metadata = lists.userdata(...) if str then -- local catcodes = metadata and metadata.catcodes -- if catcodes then -- context.sprint(catcodes,str) -- else -- context(str) -- end helpers.title(str,metadata) end end -- we could also set variables .. names will change (when this module is done) -- maybe strc_lists_savedtitle etc function commands.doiflisthastitleelse (...) commands.doifelse(lists.hastitledata (...)) end function commands.doiflisthaspageelse (...) commands.doifelse(lists.haspagedata (...)) end function commands.doiflisthasnumberelse(...) commands.doifelse(lists.hasnumberdata(...)) end function commands.doiflisthasentry (n) commands.doifelse(lists.iscached (n )) end function commands.savedlistnumber(name,n) local data = cached[tonumber(n)] if data then local numberdata = data.numberdata if numberdata then sections.typesetnumber(numberdata,"number",numberdata or false) end end end function commands.savedlisttitle(name,n,tag) local data = cached[tonumber(n)] if data then local titledata = data.titledata if titledata then helpers.title(titledata[tag] or titledata.title or "",data.metadata) end end end -- function commands.savedlistprefixednumber(name,n) -- local data = cached[tonumber(n)] -- if data then -- local numberdata = data.numberdata -- if numberdata then -- helpers.prefix(data,data.prefixdata) -- sections.typesetnumber(numberdata,"number",numberdata or false) -- end -- end -- end if not lists.reordered then function lists.reordered(data) return data.numberdata end end function commands.savedlistprefixednumber(name,n) local data = cached[tonumber(n)] if data then local numberdata = lists.reordered(data) if numberdata then helpers.prefix(data,data.prefixdata) sections.typesetnumber(numberdata,"number",numberdata or false) end end end commands.discardfromlist = lists.discard -- new and experimental and therefore off by default local sort, setmetatableindex = table.sort, table.setmetatableindex lists.autoreorder = false -- true local function addlevel(t,k) local v = { } setmetatableindex(v,function(t,k) local v = { } t[k] = v return v end) t[k] = v return v end local internals = setmetatableindex({ }, function(t,k) local sublists = setmetatableindex({ },addlevel) local collected = lists.collected or { } for i=1,#collected do local entry = collected[i] local numberdata = entry.numberdata if numberdata then local metadata = entry.metadata if metadata then local references = entry.references if references then local kind = metadata.kind local name = numberdata.counter or metadata.name local internal = references.internal if kind and name and internal then local sublist = sublists[kind][name] sublist[#sublist + 1] = { internal, numberdata } end end end end end for k, v in next, sublists do for k, v in next, v do local tmp = { } for i=1,#v do tmp[i] = v[i] end sort(v,function(a,b) return a[1] < b[1] end) for i=1,#v do t[v[i][1]] = tmp[i][2] end end end setmetatableindex(t,nil) return t[k] end) function lists.reordered(entry) local numberdata = entry.numberdata if lists.autoreorder then if numberdata then local metadata = entry.metadata if metadata then local references = entry.references if references then local kind = metadata.kind local name = numberdata.counter or metadata.name local internal = references.internal if kind and name and internal then return internals[internal] or numberdata end end end end else function lists.reordered(entry) return entry.numberdata end end return numberdata end context-2013.05.28.20130704/texmf-dist/tex/context/base/file-job.lua0000644000175000017500000007344412134352503024075 0ustar norbertnorbertif not modules then modules = { } end modules ['file-job'] = { version = 1.001, comment = "companion to file-job.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- in retrospect dealing it's not that bad to deal with the nesting -- and push/poppign at the tex end local gsub, match, find = string.gsub, string.match, string.find local insert, remove, concat = table.insert, table.remove, table.concat local validstring = string.valid local sortedhash = table.sortedhash local formatters = string.formatters local commands, resolvers, context = commands, resolvers, context local trace_jobfiles = false trackers.register("system.jobfiles", function(v) trace_jobfiles = v end) local report_jobfiles = logs.reporter("system","jobfiles") local texsetcount = tex.setcount local elements = interfaces.elements local constants = interfaces.constants local variables = interfaces.variables local logsnewline = logs.newline local logspushtarget = logs.pushtarget local logspoptarget = logs.poptarget local settings_to_array = utilities.parsers.settings_to_array local allocate = utilities.storage.allocate local nameonly = file.nameonly local suffixonly = file.suffix local basename = file.basename local addsuffix = file.addsuffix local removesuffix = file.removesuffix local dirname = file.dirname local joinpath = file.join local is_qualified_path = file.is_qualified_path local cleanpath = resolvers.cleanpath local inputstack = resolvers.inputstack local v_outer = variables.outer local v_text = variables.text local v_project = variables.project local v_environment = variables.environment local v_product = variables.product local v_component = variables.component local c_prefix = variables.prefix -- main code .. there is some overlap .. here we have loc:// local function findctxfile(name) -- loc ? any ? if is_qualified_path(name) then -- maybe when no suffix do some test for tex return name elseif not url.hasscheme(name) then return resolvers.finders.byscheme("loc",name) or "" else return resolvers.findtexfile(name) or "" end end resolvers.findctxfile = findctxfile function commands.processfile(name) name = findctxfile(name) if name ~= "" then context.input(name) end end function commands.doifinputfileelse(name) commands.doifelse(findctxfile(name) ~= "") end function commands.locatefilepath(name) context(dirname(findctxfile(name))) end function commands.usepath(paths) resolvers.registerextrapath(paths) end function commands.usesubpath(subpaths) resolvers.registerextrapath(nil,subpaths) end function commands.allinputpaths() context(concat(resolvers.instance.extra_paths or { },",")) end function commands.setdocumentfilenames() environment.initializefilenames() end function commands.usezipfile(name,tree) if tree and tree ~= "" then resolvers.usezipfile(formatters["zip:///%s?tree=%s"](name,tree)) else resolvers.usezipfile(formatters["zip:///%s"](name)) end end local report_system = logs.reporter("system") -- moved from tex to lua: local texpatterns = { "%s.mkvi", "%s.mkiv", "%s.tex" } local luapatterns = { "%s" .. utilities.lua.suffixes.luc, "%s.lua" } local cldpatterns = { "%s.cld" } local xmlpatterns = { "%s.xml" } local uselibrary = commands.uselibrary local input = context.input -- status -- -- these need to be synced with input stream: local processstack = { } local processedfile = "" local processedfiles = { } function commands.processedfile() context(processedfile) end function commands.processedfiles() context(concat(processedfiles,",")) end function commands.dostarttextfile(name) insert(processstack,name) processedfile = name insert(processedfiles,name) end function commands.dostoptextfile() processedfile = remove(processstack) or "" end local function startprocessing(name,notext) if not notext then -- report_system("begin file %a at line %a",name,status.linenumber or 0) context.dostarttextfile(name) end end local function stopprocessing(notext) if not notext then context.dostoptextfile() -- report_system("end file %a at line %a",name,status.linenumber or 0) end end -- local action = function(name,foundname) input(foundname) end local failure = function(name,foundname) report_jobfiles("unknown %s file %a","tex",name) end local function usetexfile(name,onlyonce,notext) startprocessing(name,notext) uselibrary { name = name, patterns = texpatterns, action = action, failure = failure, onlyonce = onlyonce, } stopprocessing(notext) end local action = function(name,foundname) dofile(foundname) end local failure = function(name,foundname) report_jobfiles("unknown %s file %a","lua",name) end local function useluafile(name,onlyonce,notext) uselibrary { name = name, patterns = luapatterns, action = action, failure = failure, onlyonce = onlyonce, } end local action = function(name,foundname) dofile(foundname) end local failure = function(name,foundname) report_jobfiles("unknown %s file %a","cld",name) end local function usecldfile(name,onlyonce,notext) startprocessing(name,notext) uselibrary { name = name, patterns = cldpatterns, action = action, failure = failure, onlyonce = onlyonce, } stopprocessing(notext) end local action = function(name,foundname) context.xmlprocess(foundname,"main","") end local failure = function(name,foundname) report_jobfiles("unknown %s file %a","xml",name) end local function usexmlfile(name,onlyonce,notext) startprocessing(name,notext) uselibrary { name = name, patterns = xmlpatterns, action = action, failure = failure, onlyonce = onlyonce, } stopprocessing(notext) end commands.usetexfile = usetexfile commands.useluafile = useluafile commands.usecldfile = usecldfile commands.usexmlfile = usexmlfile local suffixes = { mkvi = usetexfile, mkiv = usetexfile, tex = usetexfile, luc = useluafile, lua = useluafile, cld = usecldfile, xml = usexmlfile, [""] = usetexfile, } local function useanyfile(name,onlyonce) local s = suffixes[file.suffix(name)] if s then s(removesuffix(name),onlyonce) else usetexfile(name,onlyonce) -- e.g. ctx file --~ resolvers.readfilename(name) end end commands.useanyfile = useanyfile function resolvers.jobs.usefile(name,onlyonce,notext) local s = suffixes[file.suffix(name)] if s then s(removesuffix(name),onlyonce,notext) end end -- document structure local textlevel = 0 -- inaccessible for user, we need to define counter textlevel at the tex end local function dummyfunction() end local function startstoperror() report_system("invalid \\%s%s ... \\%s%s structure",elements.start,v_text,elements.stop,v_text) startstoperror = dummyfunction end local function starttext() if textlevel == 0 then if trace_jobfiles then report_jobfiles("starting text") end -- registerfileinfo[begin]jobfilename context.dostarttext() end textlevel = textlevel + 1 texsetcount("global","textlevel",textlevel) end local function stoptext() if textlevel == 0 then startstoperror() elseif textlevel > 0 then textlevel = textlevel - 1 end texsetcount("global","textlevel",textlevel) if textlevel <= 0 then if trace_jobfiles then report_jobfiles("stopping text") end context.dostoptext() -- registerfileinfo[end]jobfilename context.finalend() commands.stoptext = dummyfunction end end commands.starttext = starttext commands.stoptext = stoptext function commands.forcequitjob(reason) if reason then report_system("forcing quit: %s",reason) else report_system("forcing quit") end context.batchmode() while textlevel >= 0 do context.stoptext() end end function commands.forceendjob() report_system([[don't use \end to finish a document]]) context.stoptext() end function commands.autostarttext() if textlevel == 0 then report_system([[auto \starttext ... \stoptext]]) end context.starttext() end commands.autostoptext = stoptext -- project structure function commands.processfilemany(name) useanyfile(name,false) end function commands.processfileonce(name) useanyfile(name,true) end function commands.processfilenone(name) -- skip file end -- local typestack = { } local pathstack = { } local currenttype = v_text local currentpath = "." local tree = { type = "text", name = "", branches = { } } local treestack = { } local top = tree.branches local root = tree local project_stack = { } local product_stack = { } local component_stack = { } local environment_stack = { } local stacks = { [v_project ] = project_stack, [v_product ] = product_stack, [v_component ] = component_stack, [v_environment] = environment_stack, } -- local report_structures = logs.reporter("system","structure") local report_structure = logs.reporter("used structure") local function pushtree(what,name) local t = { } top[#top+1] = { type = what, name = name, branches = t } insert(treestack,top) top = t end local function poptree() top = remove(treestack) -- inspect(top) end local function log_tree(top,depth) report_structure("%s%s: %s",depth,top.type,top.name) local branches = top.branches if #branches > 0 then depth = depth .. " " for i=1,#branches do log_tree(branches[i],depth) end end end luatex.registerstopactions(function() logspushtarget("logfile") logsnewline() report_structures("start used structure") logsnewline() root.name = environment.jobname log_tree(root,"") logsnewline() report_structures("stop used structure") logsnewline() logspoptarget() end) job.structure = job.structure or { } job.structure.collected = job.structure.collected or { } job.structure.tobesaved = root job.structure.components = { } local function initialize() local function collect(root,result) local branches = root.branches if branches then for i=1,#branches do local branch = branches[i] if branch.type == "component" then result[#result+1] = branch.name end collect(branch,result) end end return result end job.structure.components = collect(job.structure.collected,{}) end job.register('job.structure.collected',root,initialize) -- component: small unit, either or not components itself -- product : combination of components local context_processfilemany = context.processfilemany local context_processfileonce = context.processfileonce local context_processfilenone = context.processfilenone local processors = utilities.storage.allocate { -- [v_outer] = { -- [v_text] = { "many", context_processfilemany }, -- [v_project] = { "once", context_processfileonce }, -- [v_environment] = { "once", context_processfileonce }, -- [v_product] = { "once", context_processfileonce }, -- [v_component] = { "many", context_processfilemany }, -- }, [v_text] = { [v_text] = { "many", context_processfilemany }, [v_project] = { "once", context_processfileonce }, -- dubious [v_environment] = { "once", context_processfileonce }, [v_product] = { "many", context_processfilemany }, -- dubious [v_component] = { "many", context_processfilemany }, }, [v_project] = { [v_text] = { "many", context_processfilemany }, [v_project] = { "none", context_processfilenone }, [v_environment] = { "once", context_processfileonce }, [v_product] = { "none", context_processfilenone }, [v_component] = { "none", context_processfilenone }, }, [v_environment] = { [v_text] = { "many", context_processfilemany }, [v_project] = { "none", context_processfilenone }, [v_environment] = { "once", context_processfileonce }, [v_product] = { "none", context_processfilenone }, [v_component] = { "none", context_processfilenone }, }, [v_product] = { [v_text] = { "many", context_processfilemany }, [v_project] = { "once", context_processfileonce }, [v_environment] = { "once", context_processfileonce }, [v_product] = { "many", context_processfilemany }, [v_component] = { "many", context_processfilemany }, }, [v_component] = { [v_text] = { "many", context_processfilemany }, [v_project] = { "once", context_processfileonce }, [v_environment] = { "once", context_processfileonce }, [v_product] = { "none", context_processfilenone }, [v_component] = { "many", context_processfilemany }, } } local start = { [v_text] = nil, [v_project] = nil, [v_environment] = context.startreadingfile, [v_product] = context.starttext, [v_component] = context.starttext, } local stop = { [v_text] = nil, [v_project] = nil, [v_environment] = context.stopreadingfile, [v_product] = context.stoptext, [v_component] = context.stoptext, } resolvers.jobs.processors = processors local function topofstack(what) local stack = stacks[what] return stack and stack[#stack] or environment.jobname end local function productcomponent() -- only when in product local product = product_stack[#product_stack] if product and product ~= "" then local component = component_stack[1] if component and component ~= "" then return component end end end local function justacomponent() local product = product_stack[#product_stack] if not product or product == "" then local component = component_stack[1] if component and component ~= "" then return component end end end resolvers.jobs.productcomponent = productcomponent resolvers.jobs.justacomponent = justacomponent function resolvers.jobs.currentproject () return topofstack(v_project ) end function resolvers.jobs.currentproduct () return topofstack(v_product ) end function resolvers.jobs.currentcomponent () return topofstack(v_component ) end function resolvers.jobs.currentenvironment() return topofstack(v_environment) end local done = { } local tolerant = false -- too messy, mkii user with the wrong sructure should adapt local function process(what,name) local depth = #typestack local process -- name = resolvers.resolve(name) -- -- if not tolerant then -- okay, would be best but not compatible with mkii process = processors[currenttype][what] -- elseif depth == 0 then -- -- could be a component, product or (brr) project -- if trace_jobfiles then -- report_jobfiles("%s : %s > %s (case 1)",depth,currenttype,v_outer) -- end -- process = processors[v_outer][what] -- elseif depth == 1 and typestack[1] == v_text then -- -- we're still not doing a component or product -- if trace_jobfiles then -- report_jobfiles("%s : %s > %s (case 2)",depth,currenttype,v_outer) -- end -- process = processors[v_outer][what] -- else -- process = processors[currenttype][what] -- end if process then local method = process[1] if method == "none" then if trace_jobfiles then report_jobfiles("%s : %s : %s %s %a in %s %a",depth,method,"ignoring",what,name,currenttype,topofstack(currenttype)) end elseif method == "once" and done[name] then if trace_jobfiles then report_jobfiles("%s : %s : %s %s %a in %s %a",depth,method,"skipping",what,name,currenttype,topofstack(currenttype)) end else -- keep in mind that we also handle "once" at the file level -- so there is a double catch done[name] = true local before = start[what] local after = stop [what] if trace_jobfiles then report_jobfiles("%s : %s : %s %s %a in %s %a",depth,method,"processing",what,name,currenttype,topofstack(currenttype)) end if before then before() end process[2](name) if after then after() end end else if trace_jobfiles then report_jobfiles("%s : %s : %s %s %a in %s %a",depth,"none","ignoring",what,name,currenttype,topofstack(currenttype)) end end end function commands.useproject (name) process(v_project, name) end function commands.useenvironment(name) process(v_environment,name) end function commands.useproduct (name) process(v_product, name) end function commands.usecomponent (name) process(v_component, name) end -- todo: setsystemmode to currenttype -- todo: make start/stop commands at the tex end local start = { [v_project] = context.startprojectindeed, [v_product] = context.startproductindeed, [v_component] = context.startcomponentindeed, [v_environment] = context.startenvironmentindeed, } local stop = { [v_project] = context.stopprojectindeed, [v_product] = context.stopproductindeed, [v_component] = context.stopcomponentindeed, [v_environment] = context.stopenvironmentindeed, } local function gotonextlevel(what,name) -- todo: something with suffix name insert(stacks[what],name) insert(typestack,currenttype) insert(pathstack,currentpath) currenttype = what currentpath = dirname(name) pushtree(what,name) if start[what] then start[what]() end end local function gotopreviouslevel(what) if stop[what] then stop[what]() end poptree() currentpath = remove(pathstack) or "." currenttype = remove(typestack) or v_text remove(stacks[what]) -- not currenttype ... weak recovery -- context.endinput() -- does not work context.signalendofinput(what) end local function autoname(name) if name == "*" then name = nameonly(inputstack[#inputstack] or name) end return name end function commands.startproject (name) gotonextlevel(v_project, autoname(name)) end function commands.startproduct (name) gotonextlevel(v_product, autoname(name)) end function commands.startcomponent (name) gotonextlevel(v_component, autoname(name)) end function commands.startenvironment(name) gotonextlevel(v_environment,autoname(name)) end function commands.stopproject () gotopreviouslevel(v_project ) end function commands.stopproduct () gotopreviouslevel(v_product ) end function commands.stopcomponent () gotopreviouslevel(v_component ) end function commands.stopenvironment() gotopreviouslevel(v_environment) end function commands.currentproject () context(topofstack(v_project )) end function commands.currentproduct () context(topofstack(v_product )) end function commands.currentcomponent () context(topofstack(v_component )) end function commands.currentenvironment() context(topofstack(v_environment)) end -- -- -- this will move -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- nee -- standaard -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- local report_examodes = logs.reporter("system","examodes") local function convertexamodes(str) local x = xml.convert(str) for e in xml.collected(x,"exa:variable") do local label = e.at and e.at.label if label and label ~= "" then local data = xml.text(e) local mode = match(label,"^mode:(.+)$") if mode then context.enablemode { formatters["%s:%s"](mode,data) } end context.setvariable("exa:variables",label,(gsub(data,"([{}])","\\%1"))) end end end function commands.loadexamodes(filename) if not filename or filename == "" then filename = removesuffix(tex.jobname) end filename = resolvers.findfile(addsuffix(filename,'ctm')) or "" if filename ~= "" then report_examodes("loading %a",filename) -- todo: message system convertexamodes(io.loaddata(filename)) else report_examodes("no mode file %a",filename) -- todo: message system end end -- changed in mtx-context -- code moved from luat-ini -- todo: locals when mtx-context is changed document = document or { arguments = allocate(), files = allocate(), variables = allocate(), -- for templates options = { commandline = { environments = allocate(), modules = allocate(), modes = allocate(), }, ctxfile = { environments = allocate(), modules = allocate(), modes = allocate(), }, }, } function document.setargument(key,value) document.arguments[key] = value end function document.setdefaultargument(key,default) local v = document.arguments[key] if v == nil or v == "" then document.arguments[key] = default end end function document.setfilename(i,name) if name then document.files[tonumber(i)] = name else document.files[#document.files+1] = tostring(i) end end function document.getargument(key,default) -- commands local v = document.arguments[key] if type(v) == "boolean" then v = (v and "yes") or "no" document.arguments[key] = v end context(v or default or "") end function document.getfilename(i) -- commands context(document.files[tonumber(i)] or "") end function commands.getcommandline() -- has to happen at the tex end in order to expand -- the document[arguments|files] tables are copies local arguments = document.arguments local files = document.files local options = document.options for k, v in next, environment.arguments do k = gsub(k,"^c:","") -- already done, but better be safe than sorry if arguments[k] == nil then arguments[k] = v end end -- in the new mtx=context approach we always pass a stub file so we need to -- to trick the files table which actually only has one entry in a tex job if arguments.timing then context.usemodule("timing") end if arguments.batchmode then context.batchmode(false) end if arguments.nonstopmode then context.nonstopmode(false) end if arguments.nostatistics then directives.enable("system.nostatistics") end if arguments.paranoid then context.setvalue("maxreadlevel",1) end if validstring(arguments.path) then context.usepath { arguments.path } end local inputfile = validstring(arguments.input) if inputfile and dirname(inputfile) == "." and lfs.isfile(inputfile) then -- nicer in checks inputfile = basename(inputfile) end local kindofrun = arguments.kindofrun local currentrun = arguments.maxnofruns local maxnofruns = arguments.currentrun context.setupsystem { [constants.directory] = validstring(arguments.setuppath), [constants.inputfile] = inputfile, [constants.file] = validstring(arguments.result), [constants.random] = validstring(arguments.randomseed), -- old: [constants.n] = validstring(kindofrun), [constants.m] = validstring(currentrun), } environment.kindofrun = tonumber(kindofrun) or 0 environment.maxnofruns = tonumber(maxnofruns) or 0 environment.currentrun = tonumber(currentrun) or 0 if validstring(arguments.arguments) then context.setupenv { arguments.arguments } end if arguments.once then directives.enable("system.runonce") end if arguments.noarrange then context.setuparranging { variables.disable } end -- local commandline = options.commandline commandline.environments = table.append(commandline.environments,settings_to_array(validstring(arguments.environment))) commandline.modules = table.append(commandline.modules, settings_to_array(validstring(arguments.usemodule))) commandline.modes = table.append(commandline.modes, settings_to_array(validstring(arguments.mode))) -- if #files == 0 then local list = settings_to_array(validstring(arguments.files)) if list and #list > 0 then files = list end end if #files == 0 then files = { validstring(arguments.input) } end -- document.arguments = arguments document.files = files end -- commandline wins over ctxfile local function apply(list,action) if list then for i=1,#list do action { list[i] } end end end function commands.setdocumentmodes() -- was setup: *runtime:modes apply(document.options.ctxfile .modes,context.enablemode) apply(document.options.commandline.modes,context.enablemode) end function commands.setdocumentmodules() -- was setup: *runtime:modules apply(document.options.ctxfile .modules,context.usemodule) apply(document.options.commandline.modules,context.usemodule) end function commands.setdocumentenvironments() -- was setup: *runtime:environments apply(document.options.ctxfile .environments,context.environment) apply(document.options.commandline.environments,context.environment) end local report_files = logs.reporter("system","files") local report_options = logs.reporter("system","options") local report_file = logs.reporter("used file") local report_option = logs.reporter("used option") luatex.registerstopactions(function() local foundintrees = resolvers.instance.foundintrees if #foundintrees > 0 then logspushtarget("logfile") logsnewline() report_files("start used files") logsnewline() for i=1,#foundintrees do report_file("%4i: % T",i,foundintrees[i]) end logsnewline() report_files("stop used files") logsnewline() logspoptarget() end end) luatex.registerstopactions(function() local files = document.files -- or environment.files local arguments = document.arguments -- or environment.arguments -- logspushtarget("logfile") logsnewline() report_options("start commandline options") logsnewline() for argument, value in sortedhash(arguments) do report_option("%s=%A",argument,value) end logsnewline() report_options("stop commandline options") logsnewline() report_options("start commandline files") logsnewline() for i=1,#files do report_file("% 4i: %s",i,files[i]) end logsnewline() report_options("stop commandline files") logsnewline() logspoptarget() end) if environment.initex then local report_storage = logs.reporter("system","storage") local report_table = logs.reporter("stored table") local report_module = logs.reporter("stored module") local report_attribute = logs.reporter("stored attribute") local report_catcodetable = logs.reporter("stored catcodetable") local report_corenamespace = logs.reporter("stored corenamespace") luatex.registerstopactions(function() logspushtarget("logfile") logsnewline() report_storage("start stored tables") logsnewline() for k,v in sortedhash(storage.data) do report_table("%03i %s",k,v[1]) end logsnewline() report_storage("stop stored tables") logsnewline() report_storage("start stored modules") logsnewline() for k,v in sortedhash(lua.bytedata) do report_module("%03i %s %s",k,v[2],v[1]) end logsnewline() report_storage("stop stored modules") logsnewline() report_storage("start stored attributes") logsnewline() for k,v in sortedhash(attributes.names) do report_attribute("%03i %s",k,v) end logsnewline() report_storage("stop stored attributes") logsnewline() report_storage("start stored catcodetables") logsnewline() for k,v in sortedhash(catcodes.names) do report_catcodetable("%03i % t",k,v) end logsnewline() report_storage("stop stored catcodetables") logsnewline() report_storage("start stored corenamespaces") for k,v in sortedhash(interfaces.corenamespaces) do report_corenamespace("%03i %s",k,v) end logsnewline() report_storage("stop stored corenamespaces") logsnewline() logspoptarget() end) end function commands.doifelsecontinuewithfile(inpname,basetoo) local inpnamefull = addsuffix(inpname,"tex") local inpfilefull = addsuffix(environment.inputfilename,"tex") local continue = inpnamefull == inpfilefull if basetoo and not continue then continue = inpnamefull == basename(inpfilefull) end if continue then report_system("continuing input file %a",inpname) end commands.doifelse(continue) end context-2013.05.28.20130704/texmf-dist/tex/context/base/util-deb.lua0000644000175000017500000000717412130411274024105 0ustar norbertnorbertif not modules then modules = { } end modules ['util-deb'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- the tag is kind of generic and used for functions that are not -- bound to a variable, like node.new, node.copy etc (contrary to for instance -- node.has_attribute which is bound to a has_attribute local variable in mkiv) local debug = require "debug" local getinfo = debug.getinfo local type, next, tostring = type, next, tostring local format, find = string.format, string.find local is_boolean = string.is_boolean utilities = utilities or { } local debugger = utilities.debugger or { } utilities.debugger = debugger local counters = { } local names = { } local report = logs.reporter("debugger") -- one local function hook() local f = getinfo(2) -- "nS" if f then local n = "unknown" if f.what == "C" then n = f.name or '' if not names[n] then names[n] = format("%42s",n) end else -- source short_src linedefined what name namewhat nups func n = f.name or f.namewhat or f.what if not n or n == "" then n = "?" end if not names[n] then names[n] = format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source") end end counters[n] = (counters[n] or 0) + 1 end end function debugger.showstats(printer,threshold) -- hm, something has changed, rubish now printer = printer or report threshold = threshold or 0 local total, grandtotal, functions = 0, 0, 0 local dataset = { } for name, count in next, counters do dataset[#dataset+1] = { name, count } end table.sort(dataset,function(a,b) return a[2] == b[2] and b[1] > a[1] or a[2] > b[2] end) for i=1,#dataset do local d = dataset[i] local name = d[1] local count = d[2] if count > threshold and not find(name,"for generator") then -- move up printer(format("%8i %s\n", count, names[name])) total = total + count end grandtotal = grandtotal + count functions = functions + 1 end printer("\n") printer(format("functions : % 10i\n", functions)) printer(format("total : % 10i\n", total)) printer(format("grand total: % 10i\n", grandtotal)) printer(format("threshold : % 10i\n", threshold)) end function debugger.savestats(filename,threshold) local f = io.open(filename,'w') if f then debugger.showstats(function(str) f:write(str) end,threshold) f:close() end end function debugger.enable() debug.sethook(hook,"c") end function debugger.disable() debug.sethook() --~ counters[debug.getinfo(2,"f").func] = nil end --~ debugger.enable() --~ print(math.sin(1*.5)) --~ print(math.sin(1*.5)) --~ print(math.sin(1*.5)) --~ print(math.sin(1*.5)) --~ print(math.sin(1*.5)) --~ debugger.disable() --~ print("") --~ debugger.showstats() --~ print("") --~ debugger.showstats(print,3) -- from the lua book: function traceback() local level = 1 while true do local info = debug.getinfo(level, "Sl") if not info then break elseif info.what == "C" then print(format("%3i : C function",level)) else print(format("%3i : [%s]:%d",level,info.short_src,info.currentline)) end level = level + 1 end end context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-cap.mkiv0000644000175000017500000001726012161703335024324 0ustar norbertnorbert%D \module %D [ file=typo-cap, %D version=2009.03.27, % code moved from core-spa.mkiv %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Capping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Caps} \unprotect %D Maybe we need a more clever system: either command or style mode etc. so %D that we can avoid the grouped mess in a simple style switch. \registerctxluafile{typo-cap}{1.001} \definesystemattribute[case][public] %D \macros %D {Word, Words, WORD, WORDS} %D %D This is probably not the right place to present the next set %D of macros. %D %D \starttyping %D \Word {far too many words} %D \Words{far too many words} %D \WORD {far too many words} %D \WORDS{far too many words} %D \stoptyping %D %D \typebuffer %D %D This calls result in: %D %D \startlines %D \getbuffer %D \stoplines %D %D \showsetup{Word} %D \showsetup{Words} %D \showsetup{WORD} %D \showsetup{WORDS} % test \WORD{test TEST \TeX} test % test \word{test TEST \TeX} test % test \Word{test TEST \TeX} test \unexpanded\def\setcharactercasing[#1]% {\ctxcommand{setcharactercasing("#1")}} % todo: names casings \unexpanded\def\WORD {\groupedcommand{\setcharactercasing[\v!WORD ]}{}} \unexpanded\def\word {\groupedcommand{\setcharactercasing[\v!word ]}{}} \unexpanded\def\Word {\groupedcommand{\setcharactercasing[\v!Word ]}{}} \unexpanded\def\Words{\groupedcommand{\setcharactercasing[\v!Words]}{}} % This might become: % % \unexpanded\def\WORD {\bgroup\def\g_word{\setcharactercasing[\v!WORD ]}\afterassignment\g_word\let\nexttoken} % \unexpanded\def\word {\bgroup\def\g_word{\setcharactercasing[\v!word ]}\afterassignment\g_word\let\nexttoken} % \unexpanded\def\Word {\bgroup\def\g_word{\setcharactercasing[\v!Word ]}\afterassignment\g_word\let\nexttoken} % \unexpanded\def\Words{\bgroup\def\g_word{\setcharactercasing[\v!Words]}\afterassignment\g_word\let\nexttoken} % % so no longer {\Word test} and { } mandate (also later \groupedcommands will go) \let\WORDS\WORD \let\words\word %D \macros %D {kap,KAP,Kap,Kaps,nokap,userealcaps,usepseudocaps} %D %D We already introduced \type{\cap} as way to capitalize %D words. This command comes in several versions: %D %D \startbuffer %D \cap {let's put on a \cap{cap}} %D \cap {let's put on a \nocap{cap}} %D \CAP {let's put on a \\{cap}} %D \Cap {let's put on a \\{cap}} %D \Caps{let's put on a cap} %D \stopbuffer %D %D \typebuffer %D %D Note the use of \type{\nocap}, \type{\\} and the nested %D \type{\cap}. %D %D \startlines %D \getbuffer %D \stoplines %D %D These macros show te main reason why we introduced the %D smaller \type{\tx} and \type{\txx}. %D %D \starttyping %D \cap\romannumerals{1995} %D \stoptyping %D %D This at first sight unusual capitilization is completely %D legal. %D %D \showsetup{smallcapped} %D \showsetup{notsmallcapped} %D \showsetup{CAPPED} %D \showsetup{SmallCapped} %D \showsetup{SmallCaps} %D %D The difference between pseudo and real caps is demonstrated %D below: %D %D \startbuffer %D \usepseudocaps \cap{Hans Hagen} %D \userealcaps \cap{Hans Hagen} %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D The \type {\bgroup} trickery below is needed because of %D \type {\groupedcommand}. \let\disablepseudocaps\relax % maybe used elsewhere \newconditional\c_typo_capitals_pseudo \unexpanded\def\usepseudocaps{\settrue \c_typo_capitals_pseudo} \unexpanded\def\userealcaps {\setfalse\c_typo_capitals_pseudo} \usepseudocaps % we use char0 as placeholder for the larger font % % here we keep the \groupedcommand \unexpanded\def\pseudosmallcapped{\groupedcommand{\setcharactercasing [\v!WORD ]\signalcharacter\tx}{}} % all upper \unexpanded\def\pseudoSmallcapped{\groupedcommand{\setcharactercasing [\v!capital]\signalcharacter\tx}{}} % one upper + font \unexpanded\def\pseudoSmallCapped{\groupedcommand{\setcharactercasing [\v!Capital]\signalcharacter\tx}{}} % some upper + font \unexpanded\def\realsmallcapped {\groupedcommand{\sc\setcharactercasing[\v!WORD ]}{}} % all lower \unexpanded\def\realSmallcapped {\groupedcommand{\sc\setcharactercasing[\v!Word ]}{}} % one upper + font \unexpanded\def\realSmallCapped {\groupedcommand{\sc\setcharactercasing[\v!Words ]}{}} % some upper \unexpanded\def\font_style_pseudosmallcapped{\setcharactercasing [\v!WORD ]\signalcharacter\tx} % all upper \unexpanded\def\font_style_pseudoSmallcapped{\setcharactercasing [\v!capital]\signalcharacter\tx} % one upper + font \unexpanded\def\font_style_pseudoSmallCapped{\setcharactercasing [\v!Capital]\signalcharacter\tx} % some upper + font \unexpanded\def\font_style_realsmallcapped {\sc\setcharactercasing[\v!WORD ]} % all lower \unexpanded\def\font_style_realSmallcapped {\sc\setcharactercasing[\v!Word ]} % one upper + font \unexpanded\def\font_style_realSmallCapped {\sc\setcharactercasing[\v!Words ]} % some upper \unexpanded\def\typo_capitals_smallcaps {\ifconditional\c_typo_capitals_pseudo \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\smallcapped{\typo_capitals_smallcaps\pseudosmallcapped\realsmallcapped} \unexpanded\def\Smallcapped{\typo_capitals_smallcaps\pseudoSmallcapped\realSmallcapped} \unexpanded\def\SmallCapped{\typo_capitals_smallcaps\pseudoSmallCapped\realSmallCapped} \unexpanded\def\font_style_smallcapped{\typo_capitals_smallcaps\font_style_pseudosmallcapped\font_style_realsmallcapped} \unexpanded\def\font_style_Smallcapped{\typo_capitals_smallcaps\font_style_pseudoSmallcapped\font_style_realSmallcapped} \unexpanded\def\font_style_SmallCapped{\typo_capitals_smallcaps\font_style_pseudoSmallCapped\font_style_realSmallCapped} \unexpanded\def\autocap{\ifmmode\expandafter\normalcap\else\expandafter\smallcapped\fi} \appendtoks \let\normalcap\cap % mathmode cap \let\cap\autocap \to \everydump \let\kap\cap % for old times sake \let\Caps\SmallCapped % for old times sake \let\normalsmallcapped\smallcapped \let\normalWORD \WORD \let\normalword \word \let\font_style_normalsmallcapped\font_style_smallcapped \let\font_style_normalWORD \WORD \let\font_style_normalword \word %D As suggested by WS: \unexpanded\def\notsmallcapped{\groupedcommand{\setcharactercasing[\v!word]\signalcharacter}{}} %D \macros %D {setupcapitals} %D %D By default we use pseudo small caps in titles. This can be %D set up with: %D %D \showsetup{setupcapitals} \installcorenamespace{capitals} \installsetuponlycommandhandler \??capitals {capitals} \let\normalsmallcapped\smallcapped \appendtoks \doifelse{\directcapitalsparameter\c!title}\v!yes {\definealternativestyle[\v!capital ][\font_style_normalsmallcapped][\font_style_normalsmallcapped]% \definealternativestyle[\v!smallcaps][\setsmallcaps][\setsmallcaps]} {\definealternativestyle[\v!capital ][\font_style_normalsmallcapped][\font_style_normalWORD]% \definealternativestyle[\v!smallcaps][\setsmallcaps][\font_style_normalWORD]}% \doifelse{\directcapitalsparameter\s!sc}\v!yes \userealcaps \usepseudocaps \to \everysetupcapitals \let\uppercased\normalWORD \let\lowercased\normalword \setupcapitals [\c!title=\v!yes, \s!sc=\v!no] % no \c!sc any longer % \definestartstop is not yet in available at core-spa time % % \startrandomized \input tufte \stoprandomized % % \definestartstop[randomized][\c!before=\dosetattribute{case}{8},\c!after=] \unexpanded\def\randomizetext{\groupedcommand{\attribute\caseattribute\pluseight}{}} \definestartstop[randomized][\c!before=\dosetattribute{case}{8},\c!after=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-grd.mkiv0000644000175000017500000000670012130411274024257 0ustar norbertnorbert%D \module %D [ file=meta-grd, %D version=2012.06.28, %D title=\METAPOST\ Graphics, %D subtitle=grids, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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}{MetaPost Graphics / Grids} %D This used to be a \TEX\ method, and a rather old one too. We keep it around but %D in a more modern way. %D %D \startbuffer %D \basegrid %D [nx=8,ny=5, %D dx=.5,dy=.25, %D unit=cm,scale=2,factor=1, %D offset=1ex,xstep=2,ystep=1, %D align=middle,style=\tt\tx] %D \stopbuffer %D %D \typebuffer %D %D \placefigure %D {An example of a grid.} %D {\getbuffer} \startuseMPgraphic{grid}{nx,ny,dx,dy,factor,scale,xstep,ystep,xoffset,yoffset,align} begingroup ; save nx, ny, dx, dy, wd, ht, xstep, ystep, xoffset, yoffset, align, xalign, yalign ; numeric nx ; nx := \MPvar{nx} ; numeric ny ; ny := \MPvar{ny} ; numeric dx ; dx := \MPvar{factor} * \MPvar{scale} * \MPvar{dx} ; numeric dy ; dy := \MPvar{factor} * \MPvar{scale} * \MPvar{dy} ; numeric wd ; wd := nx * dx ; numeric ht ; ht := ny * dy ; numeric xstep ; xstep := \MPvar{xstep} ; numeric ystep ; ystep := \MPvar{ystep} ; numeric xoffset ; xoffset := \MPvar{xoffset} ; numeric yoffset ; yoffset := \MPvar{yoffset} ; numeric align ; align := \MPvar{align} ; numeric xalign ; xalign := 0 ; numeric yalign ; yalign := 0 ; if align = 1 : xalign := dx/2 ; yalign := dy/2 ; fi ; for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ; for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ; if xstep > 0 : for i=1 step xstep until nx : draw thetextext.bot(decimal i,(i*dx-xalign,-xoffset)) ; endfor ; fi ; if ystep > 0 : for i=1 step ystep until ny : draw thetextext.lft(decimal i,(-yoffset,i*dy-yalign)) ; endfor ; fi ; endgroup ; \stopuseMPgraphic \unprotect \unexpanded\def\basegrid {\dosingleempty\typo_grid_base} \def\typo_grid_base[#1]% {\hbox\bgroup \getdummyparameters [\c!nx=10,\c!ny=10,\c!dx=.5,\c!dy=.5,\c!xstep=0,\c!ystep=0, \c!unit=\s!cm,\c!scale=1,\c!factor=1, \c!offset=.25ex,\c!xoffset=\directdummyparameter\c!offset,\c!yoffset=\directdummyparameter\c!offset, \c!align=, #1]% \usedummystyleandcolor\c!style\c!color \edef\p_align{\directdummyparameter\c!align}% \ifx\p_align\v!middle \let\p_align\!!plusone \else \let\p_align\!!zerocount \fi \useMPgraphic {grid}% {nx=\directdummyparameter\c!nx,% ny=\directdummyparameter\c!ny,% dx=\directdummyparameter\c!dx\directdummyparameter\c!unit,% dy=\directdummyparameter\c!dy\directdummyparameter\c!unit,% factor=\directdummyparameter\c!factor,% scale=\directdummyparameter\c!scale,% xstep=\directdummyparameter\c!xstep,% ystep=\directdummyparameter\c!ystep,% xoffset=\directdummyparameter\c!xoffset,% yoffset=\directdummyparameter\c!yoffset,% align=\p_align}% \egroup} \let\grid\basegrid \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-str.lua0000644000175000017500000005446212130411274024165 0ustar norbertnorbertif not modules then modules = { } end modules ['util-str'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } utilities = utilities or {} utilities.strings = utilities.strings or { } local strings = utilities.strings local format, gsub, rep, sub = string.format, string.gsub, string.rep, string.sub local load, dump = load, string.dump local tonumber, type, tostring = tonumber, type, tostring local unpack, concat = table.unpack, table.concat local P, V, C, S, R, Ct, Cs, Cp, Carg, Cc = lpeg.P, lpeg.V, lpeg.C, lpeg.S, lpeg.R, lpeg.Ct, lpeg.Cs, lpeg.Cp, lpeg.Carg, lpeg.Cc local patterns, lpegmatch = lpeg.patterns, lpeg.match local utfchar, utfbyte = utf.char, utf.byte ----- loadstripped = utilities.lua.loadstripped ----- setmetatableindex = table.setmetatableindex local loadstripped = _LUAVERSION < 5.2 and load or function(str) return load(dump(load(str),true)) -- it only makes sense in luajit and luatex where we have a stipped load end -- todo: make a special namespace for the formatter if not number then number = { } end -- temp hack for luatex-fonts local stripper = patterns.stripzeros local function points(n) return (not n or n == 0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536)) end local function basepoints(n) return (not n or n == 0) and "0bp" or lpegmatch(stripper,format("%.5fbp", n*(7200/7227)/65536)) end number.points = points number.basepoints = basepoints -- str = " \n \ntest \n test\ntest " -- print("["..string.gsub(string.collapsecrlf(str),"\n","+").."]") local rubish = patterns.spaceortab^0 * patterns.newline local anyrubish = patterns.spaceortab + patterns.newline local anything = patterns.anything local stripped = (patterns.spaceortab^1 / "") * patterns.newline local leading = rubish^0 / "" local trailing = (anyrubish^1 * patterns.endofstring) / "" local redundant = rubish^3 / "\n" local pattern = Cs(leading * (trailing + redundant + stripped + anything)^0) function strings.collapsecrlf(str) return lpegmatch(pattern,str) end -- The following functions might end up in another namespace. local repeaters = { } -- watch how we also moved the -1 in depth-1 to the creator function strings.newrepeater(str,offset) offset = offset or 0 local s = repeaters[str] if not s then s = { } repeaters[str] = s end local t = s[offset] if t then return t end t = { } setmetatable(t, { __index = function(t,k) if not k then return "" end local n = k + offset local s = n > 0 and rep(str,n) or "" t[k] = s return s end }) s[offset] = t return t end -- local dashes = strings.newrepeater("--",-1) -- print(dashes[2],dashes[3],dashes[1]) local extra, tab, start = 0, 0, 4, 0 local nspaces = strings.newrepeater(" ") string.nspaces = nspaces local pattern = Carg(1) / function(t) extra, tab, start = 0, t or 7, 1 end * Cs(( Cp() * patterns.tab / function(position) local current = (position - start + 1) + extra local spaces = tab-(current-1) % tab if spaces > 0 then extra = extra + spaces - 1 return nspaces[spaces] -- rep(" ",spaces) else return "" end end + patterns.newline * Cp() / function(position) extra, start = 0, position end + patterns.anything )^1) function strings.tabtospace(str,tab) return lpegmatch(pattern,str,1,tab or 7) end -- local t = { -- "1234567123456712345671234567", -- "\tb\tc", -- "a\tb\tc", -- "aa\tbb\tcc", -- "aaa\tbbb\tccc", -- "aaaa\tbbbb\tcccc", -- "aaaaa\tbbbbb\tccccc", -- "aaaaaa\tbbbbbb\tcccccc\n aaaaaa\tbbbbbb\tcccccc", -- "one\n two\nxxx three\nxx four\nx five\nsix", -- } -- for k=1,#t do -- print(strings.tabtospace(t[k])) -- end function strings.striplong(str) -- strips all leading spaces str = gsub(str,"^%s*","") str = gsub(str,"[\n\r]+ *","\n") return str end -- local template = string.striplong([[ -- aaaa -- bb -- cccccc -- ]]) function strings.nice(str) str = gsub(str,"[:%-+_]+"," ") -- maybe more return str end -- Work in progress. Interesting is that compared to the built-in this is faster in -- luatex than in luajittex where we have a comparable speed. It only makes sense -- to use the formatter when a (somewhat) complex format is used a lot. Each formatter -- is a function so there is some overhead and not all formatted output is worth that -- overhead. Keep in mind that there is an extra function call involved. In principle -- we end up with a string concatination so one could inline such a sequence but often -- at the cost of less readabinity. So, it's a sort of (visual) compromise. Of course -- there is the benefit of more variants. (Concerning the speed: a simple format like -- %05fpt is better off with format than with a formatter, but as soon as you put -- something in front formatters become faster. Passing the pt as extra argument makes -- formatters behave better. Of course this is rather implementation dependent. Also, -- when a specific format is only used a few times the overhead in creating it is not -- compensated by speed.) -- -- More info can be found in cld-mkiv.pdf so here I stick to a simple list. -- -- integer %...i number -- integer %...d number -- unsigned %...u number -- character %...c number -- hexadecimal %...x number -- HEXADECIMAL %...X number -- octal %...o number -- string %...s string number -- float %...f number -- exponential %...e number -- exponential %...E number -- autofloat %...g number -- autofloat %...G number -- utf character %...c number -- force tostring %...S any -- force tostring %Q any -- force tonumber %N number (strip leading zeros) -- signed number %I number -- rounded number %r number -- 0xhexadecimal %...h character number -- 0xHEXADECIMAL %...H character number -- U+hexadecimal %...u character number -- U+HEXADECIMAL %...U character number -- points %p number (scaled points) -- basepoints %b number (scaled points) -- table concat %...t table -- serialize %...T sequenced (no nested tables) -- boolean (logic) %l boolean -- BOOLEAN %L boolean -- whitespace %...w -- automatic %...a 'whatever' (string, table, ...) -- automatic %...a "whatever" (string, table, ...) local n = 0 -- we are somewhat sloppy in parsing prefixes as it's not that critical -- hard to avoid but we can collect them in a private namespace if needed -- inline the next two makes no sense as we only use this in logging local sequenced = table.sequenced function string.autodouble(s,sep) if s == nil then return '""' end local t = type(s) if t == "number" then return tostring(s) -- tostring not really needed end if t == "table" then return ('"' .. sequenced(s,sep or ",") .. '"') end return ('"' .. tostring(s) .. '"') end function string.autosingle(s,sep) if s == nil then return "''" end local t = type(s) if t == "number" then return tostring(s) -- tostring not really needed end if t == "table" then return ("'" .. sequenced(s,sep or ",") .. "'") end return ("'" .. tostring(s) .. "'") end local tracedchars = { } string.tracedchars = tracedchars strings.tracers = tracedchars function string.tracedchar(b) -- todo: table if type(b) == "number" then return tracedchars[b] or (utfchar(b) .. " (U+" .. format('%05X',b) .. ")") else local c = utfbyte(b) return tracedchars[c] or (b .. " (U+" .. format('%05X',c) .. ")") end end function number.signed(i) if i > 0 then return "+", i else return "-", -i end end local preamble = [[ local type = type local tostring = tostring local tonumber = tonumber local format = string.format local concat = table.concat local signed = number.signed local points = number.points local basepoints = number.basepoints local utfchar = utf.char local utfbyte = utf.byte local lpegmatch = lpeg.match local nspaces = string.nspaces local tracedchar = string.tracedchar local autosingle = string.autosingle local autodouble = string.autodouble local sequenced = table.sequenced ]] local template = [[ %s %s return function(%s) return %s end ]] local arguments = { "a1" } -- faster than previously used (select(n,...)) setmetatable(arguments, { __index = function(t,k) local v = t[k-1] .. ",a" .. k t[k] = v return v end }) local prefix_any = C((S("+- .") + R("09"))^0) local prefix_tab = C((1-R("az","AZ","09","%%"))^0) -- we've split all cases as then we can optimize them (let's omit the fuzzy u) -- todo: replace outer formats in next by .. local format_s = function(f) n = n + 1 if f and f ~= "" then return format("format('%%%ss',a%s)",f,n) else -- best no tostring in order to stay compatible (.. does a selective tostring too) return format("(a%s or '')",n) -- goodie: nil check end end local format_S = function(f) -- can be optimized n = n + 1 if f and f ~= "" then return format("format('%%%ss',tostring(a%s))",f,n) else return format("tostring(a%s)",n) end end local format_q = function() n = n + 1 return format("(a%s and format('%%q',a%s) or '')",n,n) -- goodie: nil check (maybe separate lpeg, not faster) end local format_Q = function() -- can be optimized n = n + 1 return format("format('%%q',tostring(a%s))",n) end local format_i = function(f) n = n + 1 if f and f ~= "" then return format("format('%%%si',a%s)",f,n) else return format("a%s",n) end end local format_d = format_i local format_I = function(f) n = n + 1 return format("format('%%s%%%si',signed(a%s))",f,n) end local format_f = function(f) n = n + 1 return format("format('%%%sf',a%s)",f,n) end local format_g = function(f) n = n + 1 return format("format('%%%sg',a%s)",f,n) end local format_G = function(f) n = n + 1 return format("format('%%%sG',a%s)",f,n) end local format_e = function(f) n = n + 1 return format("format('%%%se',a%s)",f,n) end local format_E = function(f) n = n + 1 return format("format('%%%sE',a%s)",f,n) end local format_x = function(f) n = n + 1 return format("format('%%%sx',a%s)",f,n) end local format_X = function(f) n = n + 1 return format("format('%%%sX',a%s)",f,n) end local format_o = function(f) n = n + 1 return format("format('%%%so',a%s)",f,n) end local format_c = function() n = n + 1 return format("utfchar(a%s)",n) end local format_C = function() n = n + 1 return format("tracedchar(a%s)",n) end local format_r = function(f) n = n + 1 return format("format('%%%s.0f',a%s)",f,n) end local format_h = function(f) n = n + 1 if f == "-" then f = sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) else return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) end end local format_H = function(f) n = n + 1 if f == "-" then f = sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) else return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) end end local format_u = function(f) n = n + 1 if f == "-" then f = sub(f,2) return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) else return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) end end local format_U = function(f) n = n + 1 if f == "-" then f = sub(f,2) return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) else return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f == "" and "05" or f,n,n,n) end end local format_p = function() n = n + 1 return format("points(a%s)",n) end local format_b = function() n = n + 1 return format("basepoints(a%s)",n) end local format_t = function(f) n = n + 1 if f and f ~= "" then return format("concat(a%s,%q)",n,f) else return format("concat(a%s)",n) end end local format_T = function(f) n = n + 1 if f and f ~= "" then return format("sequenced(a%s,%q)",n,f) else return format("sequenced(a%s)",n) end end local format_l = function() n = n + 1 return format("(a%s and 'true' or 'false')",n) end local format_L = function() n = n + 1 return format("(a%s and 'TRUE' or 'FALSE')",n) end local format_N = function() -- strips leading zeros n = n + 1 return format("tostring(tonumber(a%s) or a%s)",n,n) end local format_a = function(f) n = n + 1 if f and f ~= "" then return format("autosingle(a%s,%q)",n,f) else return format("autosingle(a%s)",n) end end local format_A = function(f) n = n + 1 if f and f ~= "" then return format("autodouble(a%s,%q)",n,f) else return format("autodouble(a%s)",n) end end local format_w = function(f) -- handy when doing depth related indent n = n + 1 f = tonumber(f) if f then -- not that useful return format("nspaces[%s+a%s]",f,n) -- no real need for tonumber else return format("nspaces[a%s]",n) -- no real need for tonumber end end local format_W = function(f) -- handy when doing depth related indent return format("nspaces[%s]",tonumber(f) or 0) end local format_rest = function(s) return format("%q",s) -- catches " and \n and such end local format_extension = function(extensions,f,name) local extension = extensions[name] or "tostring(%s)" local f = tonumber(f) or 1 if f == 0 then return extension elseif f == 1 then n = n + 1 local a = "a" .. n return format(extension,a,a) -- maybe more times? elseif f < 0 then local a = "a" .. (n + f + 1) return format(extension,a,a) else local t = { } for i=1,f do n = n + 1 t[#t+1] = "a" .. n end return format(extension,unpack(t)) end end local builder = Cs { "start", start = ( ( P("%") / "" * ( V("!") -- new + V("s") + V("q") + V("i") + V("d") + V("f") + V("g") + V("G") + V("e") + V("E") + V("x") + V("X") + V("o") -- + V("c") + V("C") + V("S") -- new + V("Q") -- new + V("N") -- new -- + V("r") + V("h") + V("H") + V("u") + V("U") + V("p") + V("b") + V("t") + V("T") + V("l") + V("L") + V("I") + V("h") -- new + V("w") -- new + V("W") -- new + V("a") -- new + V("A") -- new -- + V("*") -- ignores probably messed up % ) + V("*") ) * (P(-1) + Carg(1)) )^0, -- ["s"] = (prefix_any * P("s")) / format_s, -- %s => regular %s (string) ["q"] = (prefix_any * P("q")) / format_q, -- %q => regular %q (quoted string) ["i"] = (prefix_any * P("i")) / format_i, -- %i => regular %i (integer) ["d"] = (prefix_any * P("d")) / format_d, -- %d => regular %d (integer) ["f"] = (prefix_any * P("f")) / format_f, -- %f => regular %f (float) ["g"] = (prefix_any * P("g")) / format_g, -- %g => regular %g (float) ["G"] = (prefix_any * P("G")) / format_G, -- %G => regular %G (float) ["e"] = (prefix_any * P("e")) / format_e, -- %e => regular %e (float) ["E"] = (prefix_any * P("E")) / format_E, -- %E => regular %E (float) ["x"] = (prefix_any * P("x")) / format_x, -- %x => regular %x (hexadecimal) ["X"] = (prefix_any * P("X")) / format_X, -- %X => regular %X (HEXADECIMAL) ["o"] = (prefix_any * P("o")) / format_o, -- %o => regular %o (octal) -- ["S"] = (prefix_any * P("S")) / format_S, -- %S => %s (tostring) ["Q"] = (prefix_any * P("Q")) / format_S, -- %Q => %q (tostring) ["N"] = (prefix_any * P("N")) / format_N, -- %N => tonumber (strips leading zeros) ["c"] = (prefix_any * P("c")) / format_c, -- %c => utf character (extension to regular) ["C"] = (prefix_any * P("C")) / format_C, -- %c => U+.... utf character -- ["r"] = (prefix_any * P("r")) / format_r, -- %r => round ["h"] = (prefix_any * P("h")) / format_h, -- %h => 0x0a1b2 (when - no 0x) was v ["H"] = (prefix_any * P("H")) / format_H, -- %H => 0x0A1B2 (when - no 0x) was V ["u"] = (prefix_any * P("u")) / format_u, -- %u => u+0a1b2 (when - no u+) ["U"] = (prefix_any * P("U")) / format_U, -- %U => U+0A1B2 (when - no U+) ["p"] = (prefix_any * P("p")) / format_p, -- %p => 12.345pt / maybe: P (and more units) ["b"] = (prefix_any * P("b")) / format_b, -- %b => 12.342bp / maybe: B (and more units) ["t"] = (prefix_tab * P("t")) / format_t, -- %t => concat ["T"] = (prefix_tab * P("T")) / format_T, -- %t => sequenced ["l"] = (prefix_tab * P("l")) / format_l, -- %l => boolean ["L"] = (prefix_tab * P("L")) / format_L, -- %L => BOOLEAN ["I"] = (prefix_any * P("I")) / format_I, -- %I => signed integer -- ["w"] = (prefix_any * P("w")) / format_w, -- %w => n spaces (optional prefix is added) ["W"] = (prefix_any * P("W")) / format_W, -- %W => mandate prefix, no specifier -- ["a"] = (prefix_any * P("a")) / format_a, -- %a => '...' (forces tostring) ["A"] = (prefix_any * P("A")) / format_A, -- %A => "..." (forces tostring) -- ["*"] = Cs(((1-P("%"))^1 + P("%%")/"%%%%")^1) / format_rest, -- rest (including %%) -- ["!"] = Carg(2) * prefix_any * P("!") * C((1-P("!"))^1) * P("!") / format_extension, } -- we can be clever and only alias what is needed local direct = Cs ( P("%")/"" * Cc([[local format = string.format return function(str) return format("%]]) * (S("+- .") + R("09"))^0 * S("sqidfgGeExXo") * Cc([[",str) end]]) * P(-1) ) local function make(t,str) local f local p local p = lpegmatch(direct,str) if p then f = loadstripped(p)() else n = 0 p = lpegmatch(builder,str,1,"..",t._extensions_) -- after this we know n if n > 0 then p = format(template,preamble,t._preamble_,arguments[n],p) -- print("builder>",p) f = loadstripped(p)() else f = function() return str end end end t[str] = f return f end -- -- collect periodically -- -- local threshold = 1000 -- max nof cached formats -- -- local function make(t,str) -- local f = rawget(t,str) -- if f then -- return f -- end -- local parent = t._t_ -- if parent._n_ > threshold then -- local m = { _t_ = parent } -- getmetatable(parent).__index = m -- setmetatable(m, { __index = make }) -- else -- parent._n_ = parent._n_ + 1 -- end -- local f -- local p = lpegmatch(direct,str) -- if p then -- f = loadstripped(p)() -- else -- n = 0 -- p = lpegmatch(builder,str,1,"..",parent._extensions_) -- after this we know n -- if n > 0 then -- p = format(template,preamble,parent._preamble_,arguments[n],p) -- -- print("builder>",p) -- f = loadstripped(p)() -- else -- f = function() return str end -- end -- end -- t[str] = f -- return f -- end local function use(t,fmt,...) return t[fmt](...) end strings.formatters = { } -- we cannot make these tables weak, unless we start using an indirect -- table (metatable) in which case we could better keep a count and -- clear that table when a threshold is reached function strings.formatters.new() local t = { _extensions_ = { }, _preamble_ = "", _type_ = "formatter" } setmetatable(t, { __index = make, __call = use }) return t end -- function strings.formatters.new() -- local t = { _extensions_ = { }, _preamble_ = "", _type_ = "formatter", _n_ = 0 } -- local m = { _t_ = t } -- setmetatable(t, { __index = m, __call = use }) -- setmetatable(m, { __index = make }) -- return t -- end local formatters = strings.formatters.new() -- the default instance string.formatters = formatters -- in the main string namespace string.formatter = function(str,...) return formatters[str](...) end -- sometimes nicer name local function add(t,name,template,preamble) if type(t) == "table" and t._type_ == "formatter" then t._extensions_[name] = template or "%s" if preamble then t._preamble_ = preamble .. "\n" .. t._preamble_ -- so no overload ! end end end strings.formatters.add = add -- registered in the default instance (should we fall back on this one?) lpeg.patterns.xmlescape = Cs((P("<")/"<" + P(">")/">" + P("&")/"&" + P('"')/""" + P(1))^0) lpeg.patterns.texescape = Cs((C(S("#$%\\{}"))/"\\%1" + P(1))^0) add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],[[local xmlescape = lpeg.patterns.xmlescape]]) add(formatters,"tex",[[lpegmatch(texescape,%s)]],[[local texescape = lpeg.patterns.texescape]]) -- -- yes or no: -- -- local function make(t,str) -- local f -- local p = lpegmatch(direct,str) -- if p then -- f = loadstripped(p)() -- else -- n = 0 -- p = lpegmatch(builder,str,1,",") -- after this we know n -- if n > 0 then -- p = format(template,template_shortcuts,arguments[n],p) -- f = loadstripped(p)() -- else -- f = function() return str end -- end -- end -- t[str] = f -- return f -- end -- -- local formatteds = string.formatteds or { } -- string.formatteds = formatteds -- -- setmetatable(formatteds, { __index = make, __call = use }) context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-033.mkii0000644000175000017500000004150511754241457024024 0ustar norbertnorbert%D \module %D [ file=unic-033, %D version=2006.03.29, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 33, %D author={Nikolai Weibull \& Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={Nikolai Weibull \& Hans Hagen}] \unprotect \startunicodevector 33 \expandafter\strippedcsname \ifcase\numexpr#1\relax \unic@accountof \or % 2100 ACCOUNT OF \unic@addressedtothesubject \or % 2101 ADDRESSED TO THE SUBJECT \unic@doublestruckC \or % 2102 DOUBLE-STRUCK CAPITAL C \unic@degreecelsius \or % 2103 DEGREE CELSIUS \unic@centrelinesymbol \or % 2104 CENTRE LINE SYMBOL \unic@careof \or % 2105 CARE OF \unic@cadauna \or % 2106 CADA UNA \unic@eulerconstant \or % 2107 EULER CONSTANT \unic@scruple \or % 2108 SCRUPLE \unic@degreefahrenheit \or % 2109 DEGREE FAHRENHEIT \unic@scriptg \or % 210A SCRIPT SMALL G \unic@scriptH \or % 210B SCRIPT CAPITAL H \unic@blackletterH \or % 210C BLACK-LETTER CAPITAL H \unic@doublestruckH \or % 210D DOUBLE-STRUCK CAPITAL H \unic@planckconstant \or % 210E PLANCK CONSTANT \unic@planckconstantovertwopi \or % 210F PLANCK CONSTANT OVER TWO PI \unic@scriptI \or % 2110 SCRIPT CAPITAL I \unic@blackletterI \or % 2111 BLACK-LETTER CAPITAL I \unic@scriptL \or % 2112 SCRIPT CAPITAL L \unic@scriptl \or % 2113 SCRIPT SMALL L \unic@lbbarsymbol \or % 2114 L B BAR SYMBOL \unic@doublestruckN \or % 2115 DOUBLE-STRUCK CAPITAL N \unic@numerosign \or % 2116 NUMERO SIGN \unic@soundrecordingcopyright \or % 2117 SOUND RECORDING COPYRIGHT \unic@scriptP \or % 2118 SCRIPT CAPITAL P \unic@doublestruckP \or % 2119 DOUBLE-STRUCK CAPITAL P \unic@doublestruckQ \or % 211A DOUBLE-STRUCK CAPITAL Q \unic@scriptR \or % 211B SCRIPT CAPITAL R \unic@blackletterR \or % 211C BLACK-LETTER CAPITAL R \unic@doublestruckR \or % 211D DOUBLE-STRUCK CAPITAL R \unic@prescriptiontake \or % 211E PRESCRIPTION TAKE \unic@response \or % 211F RESPONSE \unic@servicemark \or % 2120 SERVICE MARK \unic@telephonesign \or % 2121 TELEPHONE SIGN \unic@trademarksign \or % 2122 TRADE MARK SIGN \unic@versickle \or % 2123 VERSICLE \unic@doublestruckZ \or % 2124 DOUBLE-STRUCK CAPITAL Z \unic@ouncesign \or % 2125 OUNCE SIGN \unic@ohmsign \or % 2126 OHM SIGN \unic@invertedohmsign \or % 2127 INVERTED OHM SIGN \unic@blackletterZ \or % 2128 BLACK-LETTER CAPITAL Z \unic@turnedgreekletteriota \or % 2129 TURNED GREEK SMALL LETTER IOTA \unic@kelvinsign \or % 212A KELVIN SIGN \unic@angstromsign \or % 212B ANGSTROM SIGN \unic@scriptB \or % 212C SCRIPT CAPITAL B \unic@blackletterC \or % 212D BLACK-LETTER CAPITAL C \unic@estimatedsymbol \or % 212E ESTIMATED SYMBOL \unic@scripte \or % 212F SCRIPT SMALL E \unic@scriptE \or % 2130 SCRIPT CAPITAL E \unic@scriptF \or % 2131 SCRIPT CAPITAL F \unic@turnedF \or % 2132 TURNED CAPITAL F \unic@scriptM \or % 2133 SCRIPT CAPITAL M \unic@scripto \or % 2134 SCRIPT SMALL O \aleph \or % 2135 ALEF SYMBOL \beth \or % 2136 BET SYMBOL \gimel \or % 2137 GIMEL SYMBOL \daleth \or % 2138 DALET SYMBOL \unic@informationsource \or % 2139 INFORMATION SOURCE \unic@rotatedQ \or % 213A ROTATED CAPITAL Q \unic@facsimilesign \or % 213B FACSIMILE SIGN \unic@doublestruckpi \or % 213C DOUBLE-STRUCK SMALL PI \unic@doublestruckgamma \or % 213D DOUBLE-STRUCK SMALL GAMMA \unic@doublestruckGamma \or % 213E DOUBLE-STRUCK CAPITAL GAMMA \unic@doublestruckPi \or % 213F DOUBLE-STRUCK CAPITAL PI \unic@doublestrucknarysummation \or % 2140 DOUBLE-STRUCK N-ARY SUMMATION \unic@turnedsansserifG \or % 2141 TURNED SANS-SERIF CAPITAL G \unic@turnedsansserifL \or % 2142 TURNED SANS-SERIF CAPITAL L \unic@reversedsansserifL \or % 2143 REVERSED SANS-SERIF CAPITAL L \unic@turnedsansserifY \or % 2144 TURNED SANS-SERIF CAPITAL Y \unic@doublestruckitalicD \or % 2145 DOUBLE-STRUCK ITALIC CAPITAL D \unic@doublestruckitalicd \or % 2146 DOUBLE-STRUCK ITALIC SMALL D \unic@doublestruckitalice \or % 2147 DOUBLE-STRUCK ITALIC SMALL E \unic@doublestruckitalici \or % 2148 DOUBLE-STRUCK ITALIC SMALL I \unic@doublestruckitalicj \or % 2149 DOUBLE-STRUCK ITALIC SMALL J \unic@propertyline \or % 214A PROPERTY LINE \unic@turnedampersand \or % 214B TURNED AMPERSAND \unic@persign \or % 214C PER SIGN \unknownchar \or % 214D \unknownchar \or % 214E \unknownchar \or % 214F \unknownchar \or % 2150 \unknownchar \or % 2151 \unknownchar \or % 2152 \unic@fractiononethird \or % 2153 VULGAR FRACTION ONE THIRD \unic@fractiontwothirds \or % 2154 VULGAR FRACTION TWO THIRDS \unic@fractiononefifth \or % 2155 VULGAR FRACTION ONE FIFTH \unic@fractiontwofifths \or % 2156 VULGAR FRACTION TWO FIFTHS \unic@fractionthreefifths \or % 2157 VULGAR FRACTION THREE FIFTHS \unic@fractionfourfifths \or % 2158 VULGAR FRACTION FOUR FIFTHS \unic@fractiononesixth \or % 2159 VULGAR FRACTION ONE SIXTH \unic@fractionfivesixths \or % 215A VULGAR FRACTION FIVE SIXTHS \unic@fractiononeeighth \or % 215B VULGAR FRACTION ONE EIGHTH \unic@fractionthreeeighths \or % 215C VULGAR FRACTION THREE EIGHTHS \unic@fractionfiveeighths \or % 215D VULGAR FRACTION FIVE EIGHTHS \unic@fractionseveneighths \or % 215E VULGAR FRACTION SEVEN EIGHTHS \unic@fractionnumeratorone \or % 215F FRACTION NUMERATOR ONE \unic@romannumeralOne \or % 2160 ROMAN NUMERAL ONE \unic@romannumeralTwo \or % 2161 ROMAN NUMERAL TWO \unic@romannumeralThree \or % 2162 ROMAN NUMERAL THREE \unic@romannumeralFour \or % 2163 ROMAN NUMERAL FOUR \unic@romannumeralFive \or % 2164 ROMAN NUMERAL FIVE \unic@romannumeralSix \or % 2165 ROMAN NUMERAL SIX \unic@romannumeralSeven \or % 2166 ROMAN NUMERAL SEVEN \unic@romannumeralEight \or % 2167 ROMAN NUMERAL EIGHT \unic@romannumeralNine \or % 2168 ROMAN NUMERAL NINE \unic@romannumeralTen \or % 2169 ROMAN NUMERAL TEN \unic@romannumeralEleven \or % 216A ROMAN NUMERAL ELEVEN \unic@romannumeralTwelve \or % 216B ROMAN NUMERAL TWELVE \unic@romannumeralFifty \or % 216C ROMAN NUMERAL FIFTY \unic@romannumeralOnehundred \or % 216D ROMAN NUMERAL ONE HUNDRED \unic@romannumeralFivehundred \or % 216E ROMAN NUMERAL FIVE HUNDRED \unic@romannumeralOnethousand \or % 216F ROMAN NUMERAL ONE THOUSAND \unic@romannumeralone \or % 2170 SMALL ROMAN NUMERAL ONE \unic@romannumeraltwo \or % 2171 SMALL ROMAN NUMERAL TWO \unic@romannumeralthree \or % 2172 SMALL ROMAN NUMERAL THREE \unic@romannumeralfour \or % 2173 SMALL ROMAN NUMERAL FOUR \unic@romannumeralfive \or % 2174 SMALL ROMAN NUMERAL FIVE \unic@romannumeralsix \or % 2175 SMALL ROMAN NUMERAL SIX \unic@romannumeralseven \or % 2176 SMALL ROMAN NUMERAL SEVEN \unic@romannumeraleight \or % 2177 SMALL ROMAN NUMERAL EIGHT \unic@romannumeralnine \or % 2178 SMALL ROMAN NUMERAL NINE \unic@romannumeralten \or % 2179 SMALL ROMAN NUMERAL TEN \unic@romannumeraleleven \or % 217A SMALL ROMAN NUMERAL ELEVEN \unic@romannumeraltwelve \or % 217B SMALL ROMAN NUMERAL TWELVE \unic@romannumeralfifty \or % 217C SMALL ROMAN NUMERAL FIFTY \unic@romannumeralonehundred \or % 217D SMALL ROMAN NUMERAL ONE HUNDRED \unic@romannumeralfivehundred \or % 217E SMALL ROMAN NUMERAL FIVE HUNDRED \unic@romannumeralonethousand \or % 217F SMALL ROMAN NUMERAL ONE THOUSAND \unic@romannumeralonethousandCD \or % 2180 ROMAN NUMERAL ONE THOUSAND C D \unic@romannumeralfivethousand \or % 2181 ROMAN NUMERAL FIVE THOUSAND \unic@romannumeraltenthousand \or % 2182 ROMAN NUMERAL TEN THOUSAND \unic@romannumeralreversedonehundred\or % 2183 ROMAN NUMERAL REVERSED ONE HUNDRED \unknownchar \or % 2184 \unknownchar \or % 2185 \unknownchar \or % 2186 \unknownchar \or % 2187 \unknownchar \or % 2188 \unknownchar \or % 2189 \unknownchar \or % 218A \unknownchar \or % 218B \unknownchar \or % 218C \unknownchar \or % 218D \unknownchar \or % 218E \unknownchar \or % 218F \leftarrow \or % LEFTWARDS ARROW \uparrow \or % UPWARDS ARROW \rightarrow \or % RIGHTWARDS ARROW \downarrow \or % DOWNWARDS ARROW \leftrightarrow \or % LEFT RIGHT ARROW \updownarrow \or % UP DOWN ARROW \nwarrow \or % NORTH WEST ARROW \nearrow \or % NORTH EAST ARROW \searrow \or % SOUTH EAST ARROW \swarrow \or % SOUTH WEST ARROW \nleftarrow \or % LEFTWARDS ARROW WITH STROKE \nrightarrow \or % RIGHTWARDS ARROW WITH STROKE \unknownchar \or % LEFTWARDS WAVE ARROW \unknownchar \or % RIGHTWARDS WAVE ARROW \twoheadedleftarrow \or % LEFTWARDS TWO HEADED ARROW \unknownchar \or % UPWARDS TWO HEADED ARROW \twoheadedrightarrow \or % RIGHTWARDS TWO HEADED ARROW \unknownchar \or % DOWNWARDS TWO HEADED ARROW \leftarrowtail \or % LEFTWARDS ARROW WITH TAIL \rightarrowtail \or % RIGHTWARDS ARROW WITH TAIL \mapsfrom \or % LEFTWARDS ARROW FROM BAR \unknownchar \or % UPWARDS ARROW FROM BAR \mapsto \or % RIGHTWARDS ARROW FROM BAR \unknownchar \or % DOWNWARDS ARROW FROM BAR \unknownchar \or % UP DOWN ARROW WITH BASE \hookleftarrow \or % LEFTWARDS ARROW WITH HOOK \hookrightarrow \or % RIGHTWARDS ARROW WITH HOOK \loopleftarrow \or % LEFTWARDS ARROW WITH LOOP \looprightarrow \or % RIGHTWARDS ARROW WITH LOOP \unknownchar \or % LEFT RIGHT WAVE ARROW \nleftrightarrow \or % LEFT RIGHT ARROW WITH STROKE \lightning \or % DOWNWARDS ZIGZAG ARROW \Lsh \or % UPWARDS ARROW WITH TIP LEFTWARDS \Rsh \or % UPWARDS ARROW WITH TIP RIGHTWARDS \unknownchar \or % DOWNWARDS ARROW WITH TIP LEFTWARDS \unknownchar \or % DOWNWARDS ARROW WITH TIP RIGHTWARDS \unknownchar \or % RIGHTWARDS ARROW WITH CORNER DOWNWARDS \unknownchar \or % DOWNWARDS ARROW WITH CORNER LEFTWARDS \curveleftarrow \or % ANTICLOCKWISE TOP SEMICIRCLE ARROW \curverightarrow \or % CLOCKWISE TOP SEMICIRCLE ARROW \unknownchar \or % NORTH WEST ARROW TO LONG BAR \unknownchar \or % LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR \circlearrowleft \or % ANTICLOCKWISE OPEN CIRCLE ARROW \circlearrowright \or % CLOCKWISE OPEN CIRCLE ARROW \leftharpoonup \or % LEFTWARDS HARPOON WITH BARB UPWARDS \leftharpoondown \or % LEFTWARDS HARPOON WITH BARB DOWNWARDS \upharpoonright \or % UPWARDS HARPOON WITH BARB RIGHTWARDS \upharpoonleft \or % UPWARDS HARPOON WITH BARB LEFTWARDS \rightharpoonup \or % RIGHTWARDS HARPOON WITH BARB UPWARDS \rightharpoondown \or % RIGHTWARDS HARPOON WITH BARB DOWNWARDS \downharpoonright \or % DOWNWARDS HARPOON WITH BARB RIGHTWARDS \downharpoonleft \or % DOWNWARDS HARPOON WITH BARB LEFTWARDS \rightleftarrows \or % RIGHTWARDS ARROW OVER LEFTWARDS ARROW \unknownchar \or % UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW \leftrightarrows \or % LEFTWARDS ARROW OVER RIGHTWARDS ARROW \leftleftarrows \or % LEFTWARDS PAIRED ARROWS \upuparrows \or % UPWARDS PAIRED ARROWS \rightrightarrows \or % RIGHTWARDS PAIRED ARROWS \downdownarrows \or % DOWNWARDS PAIRED ARROWS \leftrightharpoons \or % LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON \rightleftharpoons \or % RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON \nLeftarrow \or % LEFTWARDS DOUBLE ARROW WITH STROKE \nLeftrightarrow \or % LEFT RIGHT DOUBLE ARROW WITH STROKE \nRightarrow \or % RIGHTWARDS DOUBLE ARROW WITH STROKE \Leftarrow \or % LEFTWARDS DOUBLE ARROW \Uparrow \or % UPWARDS DOUBLE ARROW \Rightarrow \or % RIGHTWARDS DOUBLE ARROW \Downarrow \or % DOWNWARDS DOUBLE ARROW \Leftrightarrow \or % LEFT RIGHT DOUBLE ARROW \Updownarrow \or % UP DOWN DOUBLE ARROW \unknownchar \or % NORTH WEST DOUBLE ARROW \unknownchar \or % NORTH EAST DOUBLE ARROW \unknownchar \or % SOUTH EAST DOUBLE ARROW \unknownchar \or % SOUTH WEST DOUBLE ARROW \Lleftarrow \or % LEFTWARDS TRIPLE ARROW \unknownchar \or % RIGHTWARDS TRIPLE ARROW \leftsquidarrow \or % LEFTWARDS SQUIGGLE ARROW \rightsquidarrow \or % RIGHTWARDS SQUIGGLE ARROW \unknownchar \or % UPWARDS ARROW WITH DOUBLE STROKE \unknownchar \or % DOWNWARDS ARROW WITH DOUBLE STROKE \dashleftarrow \or % LEFTWARDS DASHED ARROW \unknownchar \or % UPWARDS DASHED ARROW \dashrightarrow \or % RIGHTWARDS DASHED ARROW \unknownchar \or % DOWNWARDS DASHED ARROW \unic@leftarrowtobar \or % LEFTWARDS ARROW TO BAR \unknownchar \or % RIGHTWARDS ARROW TO BAR \unknownchar \or % LEFTWARDS WHITE ARROW \unknownchar \or % UPWARDS WHITE ARROW \unknownchar \or % RIGHTWARDS WHITE ARROW \unknownchar \or % DOWNWARDS WHITE ARROW \unknownchar \or % UPWARDS WHITE ARROW FROM BAR \unknownchar \or % UPWARDS WHITE ARROW ON PEDESTAL \unknownchar \or % UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR \unknownchar \or % UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR \unknownchar \or % UPWARDS WHITE DOUBLE ARROW \unknownchar \or % UPWARDS WHITE DOUBLE ARROW ON PEDESTAL \unknownchar \or % RIGHTWARDS WHITE ARROW FROM WALL \unknownchar \or % NORTH WEST ARROW TO CORNER \unknownchar \or % SOUTH EAST ARROW TO CORNER \unknownchar \or % UP DOWN WHITE ARROW \unknownchar \or % RIGHT ARROW WITH SMALL CIRCLE \unknownchar \or % DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW \unknownchar \or % THREE RIGHTWARDS ARROWS \unknownchar \or % LEFTWARDS ARROW WITH VERTICAL STROKE \unknownchar \or % RIGHTWARDS ARROW WITH VERTICAL STROKE \unknownchar \or % LEFT RIGHT ARROW WITH VERTICAL STROKE \unknownchar \or % LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE \unknownchar \or % RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE \unknownchar \or % LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE \leftarrowtriangle \or % LEFTWARDS OPEN-HEADED ARROW \rightarrowtriangle \or % RIGHTWARDS OPEN-HEADED ARROW \leftrightarrowtriangle \else % LEFT RIGHT OPEN-HEADED ARROW \unknowncharacter \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-out.lua0000644000175000017500000000102211571377075024122 0ustar norbertnorbertif not modules then modules = { } end modules ['data-out'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local allocate = utilities.storage.allocate local resolvers = resolvers local registermethod = resolvers.registermethod local savers = allocate { helpers = { } } resolvers.savers = savers registermethod("savers", savers, "uri") context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-raw.mkii0000644000175000017500000001342111244221744024261 0ustar norbertnorbert% default instelbaar maken: \enableencoding[main][fallback] \startencoding[raw] \definecharacter Acircumflex {A} \definecharacter acircumflex {a} \definecharacter Ccircumflex {C} \definecharacter ccircumflex {c} \definecharacter Ecircumflex {E} \definecharacter ecircumflex {e} \definecharacter Gcircumflex {G} \definecharacter gcircumflex {g} \definecharacter Hcircumflex {H} \definecharacter hcircumflex {h} \definecharacter Icircumflex {I} \definecharacter icircumflex {i} \definecharacter Jcircumflex {J} \definecharacter jcircumflex {j} \definecharacter Ocircumflex {O} \definecharacter ocircumflex {o} \definecharacter Scircumflex {S} \definecharacter scircumflex {s} \definecharacter Ucircumflex {U} \definecharacter ucircumflex {u} \definecharacter Wcircumflex {W} \definecharacter wcircumflex {w} \definecharacter Ycircumflex {Y} \definecharacter ycircumflex {y} \definecharacter Agrave {A} \definecharacter agrave {a} \definecharacter Egrave {E} \definecharacter egrave {e} \definecharacter Igrave {I} \definecharacter igrave {i} \definecharacter Ograve {O} \definecharacter ograve {o} \definecharacter Ugrave {U} \definecharacter ugrave {u} \definecharacter Ygrave {Y} \definecharacter ygrave {y} \definecharacter Atilde {A} \definecharacter atilde {a} \definecharacter Itilde {I} \definecharacter itilde {i} \definecharacter Otilde {O} \definecharacter otilde {o} \definecharacter Utilde {U} \definecharacter utilde {u} \definecharacter Utilde {N} \definecharacter utilde {n} \definecharacter Adiaeresis {A} \definecharacter adiaeresis {a} \definecharacter Ediaeresis {E} \definecharacter ediaeresis {e} \definecharacter Idiaeresis {I} \definecharacter idiaeresis {i} \definecharacter Odiaeresis {O} \definecharacter odiaeresis {o} \definecharacter Udiaeresis {U} \definecharacter udiaeresis {u} \definecharacter Ydiaeresis {Y} \definecharacter ydiaeresis {y} \definecharacter Aacute {A} \definecharacter aacute {a} \definecharacter Cacute {C} \definecharacter cacute {c} \definecharacter Eacute {E} \definecharacter eacute {e} \definecharacter Iacute {I} \definecharacter iacute {i} \definecharacter Lacute {L} \definecharacter lacute {l} \definecharacter Nacute {N} \definecharacter nacute {n} \definecharacter Oacute {O} \definecharacter oacute {o} \definecharacter Racute {R} \definecharacter racute {r} \definecharacter Sacute {S} \definecharacter sacute {s} \definecharacter Uacute {U} \definecharacter uacute {u} \definecharacter Yacute {Y} \definecharacter yacute {y} \definecharacter Zacute {Z} \definecharacter zacute {z} \definecharacter Dstroke {D} \definecharacter dstroke {d} \definecharacter Hstroke {H} \definecharacter hstroke {h} \definecharacter Tstroke {T} \definecharacter tstroke {t} \definecharacter Cdotaccent {C} \definecharacter cdotaccent {c} \definecharacter Edotaccent {E} \definecharacter edotaccent {e} \definecharacter Gdotaccent {G} \definecharacter gdotaccent {g} \definecharacter Idotaccent {I} \definecharacter idotaccent {i} \definecharacter Zdotaccent {Z} \definecharacter zdotaccent {z} \definecharacter Amacron {A} \definecharacter amacron {a} \definecharacter Emacron {E} \definecharacter emacron {e} \definecharacter Imacron {I} \definecharacter imacron {i} \definecharacter Omacron {O} \definecharacter omacron {o} \definecharacter Umacron {U} \definecharacter umacron {u} \definecharacter Ccedilla {C} \definecharacter ccedilla {c} \definecharacter Kcedilla {K} \definecharacter kcedilla {k} \definecharacter Lcedilla {L} \definecharacter lcedilla {l} \definecharacter Ncedilla {N} \definecharacter ncedilla {n} \definecharacter Rcedilla {R} \definecharacter rcedilla {r} \definecharacter Scedilla {S} \definecharacter scedilla {s} \definecharacter Tcedilla {T} \definecharacter tcedilla {t} \definecharacter Ohungarumlaut {O} \definecharacter ohungarumlaut {o} \definecharacter Uhungarumlaut {U} \definecharacter uhungarumlaut {u} \definecharacter Aogonek {A} \definecharacter aogonek {a} \definecharacter Eogonek {E} \definecharacter eogonek {e} \definecharacter Iogonek {I} \definecharacter iogonek {i} \definecharacter Uogonek {U} \definecharacter uogonek {u} \definecharacter Aring {A} \definecharacter aring {a} \definecharacter Uring {U} \definecharacter uring {u} \definecharacter Abreve {A} \definecharacter abreve {a} \definecharacter Ebreve {E} \definecharacter ebreve {e} \definecharacter Gbreve {G} \definecharacter gbreve {g} \definecharacter Ibreve {I} \definecharacter ibreve {i} \definecharacter Obreve {O} \definecharacter obreve {o} \definecharacter Ubreve {U} \definecharacter ubreve {u} \definecharacter Ccaron {C} \definecharacter ccaron {c} \definecharacter Dcaron {D} \definecharacter dcaron {d} \definecharacter Ecaron {E} \definecharacter ecaron {e} \definecharacter Lcaron {L} \definecharacter lcaron {l} \definecharacter Ncaron {N} \definecharacter ncaron {n} \definecharacter Rcaron {R} \definecharacter rcaron {r} \definecharacter Scaron {S} \definecharacter scaron {s} \definecharacter Tcaron {T} \definecharacter tcaron {t} \definecharacter Zcaron {Z} \definecharacter zcaron {z} \definecharacter dotlessI {I} \definecharacter dotlessi {i} \definecharacter dotlessJ {J} \definecharacter dotlessj {j} \definecharacter AEligature {AE} \definecharacter aeligature {ae} \definecharacter Lstroke {L} \definecharacter lstroke {l} \definecharacter Ostroke {O} \definecharacter ostroke {o} \definecharacter OEligature {OE} \definecharacter oeligature {oe} \definecharacter Ssharp {SS} \definecharacter ssharp {ss} \definecharacter IJligature {IJ} \definecharacter ijligature {ij} \definecharacter Aumlaut {A} \definecharacter aumlaut {a} \definecharacter Eumlaut {E} \definecharacter eumlaut {e} \definecharacter Iumlaut {I} \definecharacter iumlaut {i} \definecharacter Oumlaut {O} \definecharacter oumlaut {o} \definecharacter Uumlaut {U} \definecharacter uumlaut {u} \stopencoding context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-css.lua0000644000175000017500000001242512130411274024135 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-css'] = { version = 1.001, comment = "companion to lxml-css.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local tonumber, rawset = tonumber, rawset local lower, format = string.lower, string.format local P, S, C, R, Cb, Cg, Carg, Ct, Cc, Cf = lpeg.P, lpeg.S, lpeg.C, lpeg.R, lpeg.Cb, lpeg.Cg, lpeg.Carg, lpeg.Ct, lpeg.Cc, lpeg.Cf local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns xml.css = xml.css or { } local css = xml.css if not number.dimenfactors then require("util-dim.lua") end local dimenfactors = number.dimenfactors local bpf = 1/dimenfactors.bp local cmf = 1/dimenfactors.cm local mmf = 1/dimenfactors.mm local inf = 1/dimenfactors["in"] local percentage, exheight, emwidth, pixels if tex then local exheights = fonts.hashes.exheights local emwidths = fonts.hashes.emwidths percentage = function(s,pcf) return tonumber(s) * (pcf or tex.hsize) end exheight = function(s,exf) return tonumber(s) * (exf or exheights[true]) end emwidth = function(s,emf) return tonumber(s) * (emf or emwidths[true]) end pixels = function(s,pxf) return tonumber(s) * (pxf or emwidths[true]/300) end else local function generic(s,unit) return tonumber(s) * unit end percentage = generic exheight = generic emwidth = generic pixels = generic end local validdimen = Cg(lpegpatterns.number,'a') * ( Cb('a') * P("pt") / function(s) return tonumber(s) * bpf end + Cb('a') * P("cm") / function(s) return tonumber(s) * cmf end + Cb('a') * P("mm") / function(s) return tonumber(s) * mmf end + Cb('a') * P("in") / function(s) return tonumber(s) * inf end + Cb('a') * P("px") * Carg(1) / pixels + Cb('a') * P("%") * Carg(2) / percentage + Cb('a') * P("ex") * Carg(3) / exheight + Cb('a') * P("em") * Carg(4) / emwidth + Cb('a') * Carg(1) / pixels ) local pattern = (validdimen * lpegpatterns.whitespace^0)^1 -- todo: default if "" local function dimension(str,pixel,percent,exheight,emwidth) return (lpegmatch(pattern,str,1,pixel,percent,exheight,emwidth)) end local function padding(str,pixel,percent,exheight,emwidth) local top, bottom, left, right = lpegmatch(pattern,str,1,pixel,percent,exheight,emwidth) if not bottom then bottom, left, right = top, top, top elseif not left then bottom, left, right = top, bottom, bottom elseif not right then bottom, left, right = left, bottom, bottom end return top, bottom, left, right end css.dimension = dimension css.padding = padding -- local hsize = 655360*100 -- local exheight = 65536*4 -- local emwidth = 65536*10 -- local pixel = emwidth/100 -- -- print(padding("10px",pixel,hsize,exheight,emwidth)) -- print(padding("10px 20px",pixel,hsize,exheight,emwidth)) -- print(padding("10px 20px 30px",pixel,hsize,exheight,emwidth)) -- print(padding("10px 20px 30px 40px",pixel,hsize,exheight,emwidth)) -- -- print(padding("10%",pixel,hsize,exheight,emwidth)) -- print(padding("10% 20%",pixel,hsize,exheight,emwidth)) -- print(padding("10% 20% 30%",pixel,hsize,exheight,emwidth)) -- print(padding("10% 20% 30% 40%",pixel,hsize,exheight,emwidth)) -- -- print(padding("10",pixel,hsize,exheight,emwidth)) -- print(padding("10 20",pixel,hsize,exheight,emwidth)) -- print(padding("10 20 30",pixel,hsize,exheight,emwidth)) -- print(padding("10 20 30 40",pixel,hsize,exheight,emwidth)) -- -- print(padding("10pt",pixel,hsize,exheight,emwidth)) -- print(padding("10pt 20pt",pixel,hsize,exheight,emwidth)) -- print(padding("10pt 20pt 30pt",pixel,hsize,exheight,emwidth)) -- print(padding("10pt 20pt 30pt 40pt",pixel,hsize,exheight,emwidth)) -- print(padding("0",pixel,hsize,exheight,emwidth)) -- local currentfont = font.current -- local texdimen = tex.dimen -- local hashes = fonts.hashes -- local quads = hashes.quads -- local xheights = hashes.xheights -- -- local function padding(str) -- local font = currentfont() -- local exheight = xheights[font] -- local emwidth = quads[font] -- local hsize = texdimen.hsize/100 -- local pixel = emwidth/100 -- return padding(str,pixel,hsize,exheight,emwidth) -- end -- -- function css.simplepadding(str) -- context("%ssp",padding(str,pixel,hsize,exheight,emwidth)) -- end local pattern = Cf( Ct("") * ( Cg( Cc("style") * ( C("italic") + C("oblique") + C("slanted") / "oblique" ) + Cc("variant") * ( (C("smallcaps") + C("caps")) / "small-caps" ) + Cc("weight") * C("bold") + Cc("family") * ( (C("mono") + C("type")) / "monospace" -- just ignore the "space(d)" + (C("sansserif") + C("sans")) / "sans-serif" -- match before serif + C("serif") ) ) + P(1) )^0 , rawset) function css.fontspecification(str) return str and lpegmatch(pattern,lower(str)) end function css.colorspecification(str) local c = str and attributes.colors.values[tonumber(str)] return c and format("rgb(%s%%,%s%%,%s%%)",c[3]*100,c[4]*100,c[5]*100) end context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-ctx.mkiv0000644000175000017500000000641512130411274024331 0ustar norbertnorbert%D \module %D [ file=norm-ctx, %D version=2009.03.19, %D title=\CONTEXT\ Normal Macros, %D subtitle=\CONTEXT, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 A few more might end up here (like the weird ones in syst-ini). \let\normalreqno\normaleqno % more friendly in setups: \let\ordordspacing \Umathordordspacing \let\ordopspacing \Umathordopspacing \let\ordbinspacing \Umathordbinspacing \let\ordrelspacing \Umathordrelspacing \let\ordopenspacing \Umathordopenspacing \let\ordclosespacing \Umathordclosespacing \let\ordpunctspacing \Umathordpunctspacing \let\ordinnerspacing \Umathordinnerspacing \let\opordspacing \Umathopordspacing \let\opopspacing \Umathopopspacing \let\opbinspacing \Umathopbinspacing \let\oprelspacing \Umathoprelspacing \let\opopenspacing \Umathopopenspacing \let\opclosespacing \Umathopclosespacing \let\oppunctspacing \Umathoppunctspacing \let\opinnerspacing \Umathopinnerspacing \let\binordspacing \Umathbinordspacing \let\binopspacing \Umathbinopspacing \let\binbinspacing \Umathbinbinspacing \let\binrelspacing \Umathbinrelspacing \let\binopenspacing \Umathbinopenspacing \let\binclosespacing \Umathbinclosespacing \let\binpunctspacing \Umathbinpunctspacing \let\bininnerspacing \Umathbininnerspacing \let\relordspacing \Umathrelordspacing \let\relopspacing \Umathrelopspacing \let\relbinspacing \Umathrelbinspacing \let\relrelspacing \Umathrelrelspacing \let\relopenspacing \Umathrelopenspacing \let\relclosespacing \Umathrelclosespacing \let\relpunctspacing \Umathrelpunctspacing \let\relinnerspacing \Umathrelinnerspacing \let\openordspacing \Umathopenordspacing \let\openopspacing \Umathopenopspacing \let\openbinspacing \Umathopenbinspacing \let\openrelspacing \Umathopenrelspacing \let\openopenspacing \Umathopenopenspacing \let\openclosespacing \Umathopenclosespacing \let\openpunctspacing \Umathopenpunctspacing \let\openinnerspacing \Umathopeninnerspacing \let\closeordspacing \Umathcloseordspacing \let\closeopspacing \Umathcloseopspacing \let\closebinspacing \Umathclosebinspacing \let\closerelspacing \Umathcloserelspacing \let\closeopenspacing \Umathcloseopenspacing \let\closeclosespacing\Umathcloseclosespacing \let\closepunctspacing\Umathclosepunctspacing \let\closeinnerspacing\Umathcloseinnerspacing \let\punctordspacing \Umathpunctordspacing \let\punctopspacing \Umathpunctopspacing \let\punctbinspacing \Umathpunctbinspacing \let\punctrelspacing \Umathpunctrelspacing \let\punctopenspacing \Umathpunctopenspacing \let\punctclosespacing\Umathpunctclosespacing \let\punctpunctspacing\Umathpunctpunctspacing \let\punctinnerspacing\Umathpunctinnerspacing \let\innerordspacing \Umathinnerordspacing \let\inneropspacing \Umathinneropspacing \let\innerbinspacing \Umathinnerbinspacing \let\innerrelspacing \Umathinnerrelspacing \let\inneropenspacing \Umathinneropenspacing \let\innerclosespacing\Umathinnerclosespacing \let\innerpunctspacing\Umathinnerpunctspacing \let\innerinnerspacing\Umathinnerinnerspacing \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-pe.mkii0000644000175000017500000026616512130411274024142 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language pe % \setinterfacevariable{Addition}{جمع} \setinterfacevariable{Balloon}{بادکنک} \setinterfacevariable{Cap}{Cap} \setinterfacevariable{Capital}{Capital} \setinterfacevariable{Character}{Character} \setinterfacevariable{Characters}{Characters} \setinterfacevariable{CloseDocument}{بستن‌نوشتار} \setinterfacevariable{ExitViewer}{خروج‌نمایشگر} \setinterfacevariable{FirstPage}{صفحه‌اول} \setinterfacevariable{FitHeight}{پرکردن‌ارتفاع} \setinterfacevariable{FitWidth}{پرکردن‌عرض} \setinterfacevariable{GotoPage}{برو‌به‌صفحه} \setinterfacevariable{Greek}{یونانی} \setinterfacevariable{Help}{کمک} \setinterfacevariable{HideField}{پنهان‌میدان} \setinterfacevariable{HideLayer}{پنهان‌لایه} \setinterfacevariable{Key}{کلید} \setinterfacevariable{LastPage}{صفحه‌آخر} \setinterfacevariable{LoadForm}{بارگذاشتن‌فرم} \setinterfacevariable{MONTH}{ماه} \setinterfacevariable{New}{جدید} \setinterfacevariable{NextJump}{پرش‌بعدی} \setinterfacevariable{NextPage}{صفحه‌بعدی} \setinterfacevariable{Numbers}{شماره‌ها} \setinterfacevariable{OpenNamedDocument}{بازکردن‌نوشتار‌ذخیره‌شده} \setinterfacevariable{Paragraph}{پاراگراف} \setinterfacevariable{PauseMovie}{ایست‌فیلم} \setinterfacevariable{PauseRendering}{توقف‌تعبیر} \setinterfacevariable{PauseSound}{ایست‌صدا} \setinterfacevariable{PreviousJump}{پرش‌قبلی} \setinterfacevariable{PreviousPage}{صفحه‌قبلی} \setinterfacevariable{PrintDocument}{چاپ‌نوشتار} \setinterfacevariable{Query}{پرسش} \setinterfacevariable{QueryAgain}{پرسش‌دوباره} \setinterfacevariable{ResetForm}{دوباره‌نشانی‌فرم} \setinterfacevariable{ResumeMovie}{ادامه‌فیلم} \setinterfacevariable{ResumeRendering}{ادامه‌تعبیر} \setinterfacevariable{ResumeSound}{ادامه‌صدا} \setinterfacevariable{Romannumerals}{اعداد‌بزرگ‌لاتین} \setinterfacevariable{SaveDocument}{ذخیره‌نوشتار} \setinterfacevariable{SaveForm}{ذخیره‌فرم} \setinterfacevariable{SaveNamedDocument}{ذخیره‌نوشتار‌بانام} \setinterfacevariable{SearchAgain}{جستجوی‌دوباره} \setinterfacevariable{SearchDocument}{جستجوی‌نوشتار} \setinterfacevariable{ShowBookmarks}{نمایش‌چوبخط} \setinterfacevariable{ShowField}{نمایش‌میدان} \setinterfacevariable{ShowThumbs}{نمایش‌شصت} \setinterfacevariable{StartMovie}{شروع‌فیلم} \setinterfacevariable{StartRendering}{شروع‌تعبیر} \setinterfacevariable{StartSound}{شروع‌صدا} \setinterfacevariable{StopMovie}{پایان‌فیلم} \setinterfacevariable{StopRendering}{پایان‌تعبیر} \setinterfacevariable{StopSound}{پایان‌صدا} \setinterfacevariable{SubmitForm}{تسلیم‌فرم} \setinterfacevariable{ToggleLayer}{تغییرلایه} \setinterfacevariable{ToggleViewer}{تغییرنمایشگر} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{VideLayer} \setinterfacevariable{ViewerHelp}{کمک‌نمایشگر} \setinterfacevariable{WEEKDAY}{روزهفته} \setinterfacevariable{WORD}{کلمه} \setinterfacevariable{WORDS}{WORDS} \setinterfacevariable{Word}{Word} \setinterfacevariable{Words}{Words} \setinterfacevariable{abbreviation}{اختصار} \setinterfacevariable{abbreviations}{اختصارات} \setinterfacevariable{absolute}{قطعی} \setinterfacevariable{action}{کنش} \setinterfacevariable{after}{بعداز} \setinterfacevariable{all}{همه} \setinterfacevariable{always}{همواره} \setinterfacevariable{and}{and} \setinterfacevariable{answerarea}{answerarea} \setinterfacevariable{appendices}{پیوستها} \setinterfacevariable{appendix}{پیوست} \setinterfacevariable{april}{آوریل} \setinterfacevariable{atmargin}{درحاشیه} \setinterfacevariable{atpage}{درصفحه} \setinterfacevariable{attachment}{attachment} \setinterfacevariable{august}{آگوست} \setinterfacevariable{author}{author} \setinterfacevariable{auto}{خودکار} \setinterfacevariable{autointro}{پیشگفتارخودکار} \setinterfacevariable{back}{پشت} \setinterfacevariable{background}{پس‌زمینه} \setinterfacevariable{backmatter}{پس‌مطلب} \setinterfacevariable{backpart}{پس‌قسمت} \setinterfacevariable{backspace}{فضای‌پشت} \setinterfacevariable{backward}{عقب‌گرد} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{قبل‌از} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{بزرگ} \setinterfacevariable{bigbodyfont}{قلم‌بدنه‌بزرگ} \setinterfacevariable{bigger}{bigger} \setinterfacevariable{bigpreference}{اولویت‌بزرگ} \setinterfacevariable{blank}{خالی} \setinterfacevariable{blockquote}{نقل‌بلوک} \setinterfacevariable{bodymatter}{مطلب‌بدنه} \setinterfacevariable{bodypart}{قسمت‌بدنه} \setinterfacevariable{bold}{مشکی} \setinterfacevariable{bolditalic}{ایتالیک‌مشکی} \setinterfacevariable{boldslanted}{خوابیده‌مشکی} \setinterfacevariable{bookmark}{چوبخط} \setinterfacevariable{both}{هردو} \setinterfacevariable{bottom}{پایین} \setinterfacevariable{brief}{مختصر} \setinterfacevariable{broad}{گسترده} \setinterfacevariable{buffer}{بافر} \setinterfacevariable{by}{بوسیله} \setinterfacevariable{calligraphic}{خوشنویسی} \setinterfacevariable{cap}{cap} \setinterfacevariable{capital}{capital} \setinterfacevariable{center}{مرکز} \setinterfacevariable{chapter}{فصل} \setinterfacevariable{character}{حرف} \setinterfacevariable{characters}{حرفها} \setinterfacevariable{chemistry}{chemistry} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{رنگ} \setinterfacevariable{column}{ستون} \setinterfacevariable{columns}{ستونها} \setinterfacevariable{command}{فرمان} \setinterfacevariable{commands}{فرمانها} \setinterfacevariable{comment}{توضیح} \setinterfacevariable{component}{مولفه} \setinterfacevariable{concept}{مفهوم} \setinterfacevariable{content}{محتوا} \setinterfacevariable{contents}{محتویات} \setinterfacevariable{continue}{ادامه} \setinterfacevariable{continued}{continued} \setinterfacevariable{controls}{کنترلها} \setinterfacevariable{conversion}{تبدیل} \setinterfacevariable{current}{جاری} \setinterfacevariable{cutspace}{فضای‌برش} \setinterfacevariable{date}{تاریخ} \setinterfacevariable{day}{روز} \setinterfacevariable{december}{دسامبر} \setinterfacevariable{default}{پیش‌فرض} \setinterfacevariable{depth}{عمق} \setinterfacevariable{description}{شرح} \setinterfacevariable{disable}{ناتوان} \setinterfacevariable{display}{نمایش} \setinterfacevariable{dot}{نقطه} \setinterfacevariable{doublesided}{دورو} \setinterfacevariable{down}{down} \setinterfacevariable{each}{هر} \setinterfacevariable{edge}{لبه} \setinterfacevariable{embed}{embed} \setinterfacevariable{empty}{تهی} \setinterfacevariable{end}{end} \setinterfacevariable{endnote}{ته‌نوشت} \setinterfacevariable{enumeration}{شماره‌بندی} \setinterfacevariable{environment}{محیط} \setinterfacevariable{even}{زوج} \setinterfacevariable{export}{export} \setinterfacevariable{external}{خارجی} \setinterfacevariable{fact}{fact} \setinterfacevariable{february}{فوریه} \setinterfacevariable{figure}{شکل} \setinterfacevariable{figures}{شکلها} \setinterfacevariable{file}{پرونده} \setinterfacevariable{final}{نهایی} \setinterfacevariable{first}{اولی} \setinterfacevariable{firstcolumn}{ستون‌اول} \setinterfacevariable{firstpage}{صفحه‌اول} \setinterfacevariable{firstsubpage}{زیرصفحه‌اول} \setinterfacevariable{fit}{پرکردن} \setinterfacevariable{five}{پنج} \setinterfacevariable{fix}{ثابت‌کن} \setinterfacevariable{fixed}{ثابت} \setinterfacevariable{flexible}{انعطافپذیر} \setinterfacevariable{float}{شناور} \setinterfacevariable{flushinner}{پمپ‌داخلی} \setinterfacevariable{flushleft}{پمپ‌چپ} \setinterfacevariable{flushouter}{پمپ‌خارجی} \setinterfacevariable{flushright}{پمپ‌راست} \setinterfacevariable{footer}{ته‌برگ} \setinterfacevariable{footnote}{پانوشت} \setinterfacevariable{force}{اجبار} \setinterfacevariable{foreground}{پیش‌زمینه} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{فرمول} \setinterfacevariable{formulae}{فرمولها} \setinterfacevariable{forward}{به‌جلو} \setinterfacevariable{four}{چهار} \setinterfacevariable{frame}{قالب} \setinterfacevariable{framedtext}{متن‌قالبی} \setinterfacevariable{friday}{جمعه} \setinterfacevariable{frontmatter}{پیش‌مطلب} \setinterfacevariable{frontpart}{پیش‌قسمت} \setinterfacevariable{global}{سراسری} \setinterfacevariable{graphic}{گرافیک} \setinterfacevariable{graphics}{گرافیکها} \setinterfacevariable{gray}{خاکستری} \setinterfacevariable{greek}{یونانی} \setinterfacevariable{grid}{توری} \setinterfacevariable{halfline}{نیم‌خط} \setinterfacevariable{handwritten}{دست‌نوشته} \setinterfacevariable{hang}{بیاویز} \setinterfacevariable{hanging}{آویزان} \setinterfacevariable{head}{سر} \setinterfacevariable{header}{سربرگ} \setinterfacevariable{height}{ارتفاع} \setinterfacevariable{helptext}{متن‌کمکی} \setinterfacevariable{hencefore}{hencefore} \setinterfacevariable{here}{اینجا} \setinterfacevariable{hereafter}{ازاین‌به‌بعد} \setinterfacevariable{hidden}{پنهانی} \setinterfacevariable{hiding}{پنهان‌کردن} \setinterfacevariable{high}{بلند} \setinterfacevariable{horizontal}{افقی} \setinterfacevariable{hyphenated}{شکسته} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{دربین} \setinterfacevariable{index}{نمایه} \setinterfacevariable{indices}{نمایه‌ها} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{ارث‌بردن} \setinterfacevariable{inleft}{درون‌چپ} \setinterfacevariable{inmargin}{درون‌حاشیه} \setinterfacevariable{inner}{داخلی} \setinterfacevariable{inneredge}{لبه‌داخلی} \setinterfacevariable{innermargin}{حاشیه‌داخلی} \setinterfacevariable{inright}{درون‌راست} \setinterfacevariable{interaction}{پانل} \setinterfacevariable{interactionmenu}{منوی‌پانل} \setinterfacevariable{intermezzi}{میان‌پرده‌ها} \setinterfacevariable{intermezzo}{میان‌پرده} \setinterfacevariable{intext}{درون‌متن} \setinterfacevariable{intro}{پیشگفتار} \setinterfacevariable{italic}{ایتالیک} \setinterfacevariable{italicbold}{مشکی‌ایتالیک} \setinterfacevariable{item}{آیتم} \setinterfacevariable{itemize}{آیتم‌بندی} \setinterfacevariable{its}{آیم} \setinterfacevariable{january}{ژانویه} \setinterfacevariable{joinedup}{متصل‌بالا} \setinterfacevariable{july}{ژولای} \setinterfacevariable{june}{ژوئن} \setinterfacevariable{keep}{نگهدار} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{برچسب} \setinterfacevariable{landscape}{صفحه‌گسترده} \setinterfacevariable{last}{آخرین} \setinterfacevariable{lastcolumn}{آخرین‌ستون} \setinterfacevariable{lastpage}{صفحه‌آخر} \setinterfacevariable{lastpagenumber}{شماه‌صفحه‌آخر} \setinterfacevariable{lastsubpage}{زیرصفحه‌آخر} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{چپ} \setinterfacevariable{leftedge}{لبه‌چپ} \setinterfacevariable{lefthanging}{آویزان‌چپ} \setinterfacevariable{leftmargin}{حاشیه‌چپ} \setinterfacevariable{leftpage}{صفحه‌چپ} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{راهنما} \setinterfacevariable{less}{less} \setinterfacevariable{lesshyphenation}{شکست‌کلمات‌کمتر} \setinterfacevariable{line}{خط} \setinterfacevariable{linenote}{خط‌نوشت} \setinterfacevariable{lines}{خطها} \setinterfacevariable{list}{لیست} \setinterfacevariable{local}{موضعی} \setinterfacevariable{localenvironment}{محیط‌موضعی} \setinterfacevariable{logo}{آرم} \setinterfacevariable{logos}{آرمها} \setinterfacevariable{lohi}{پابا} \setinterfacevariable{loose}{شل} \setinterfacevariable{low}{پایین} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{آرایش} \setinterfacevariable{mar}{حاش} \setinterfacevariable{march}{مارس} \setinterfacevariable{margin}{حاشیه} \setinterfacevariable{marginedge}{لبه‌حاشیه} \setinterfacevariable{margintitle}{عنوان‌حاشیه} \setinterfacevariable{marking}{نشانه‌گذاری} \setinterfacevariable{mathalignment}{تنظیم‌ریاضی} \setinterfacevariable{mathcases}{حالتهای‌ریاضی} \setinterfacevariable{mathematics}{ریاضی} \setinterfacevariable{mathmatrix}{ماتریش‌ریاضی} \setinterfacevariable{max}{بیشترین} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{مه} \setinterfacevariable{mediaeval}{mediaeval} \setinterfacevariable{medium}{متوسط} \setinterfacevariable{middle}{میان} \setinterfacevariable{min}{کمترین} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{کمترین‌ارتفاع} \setinterfacevariable{minwidth}{کمترین‌عرض} \setinterfacevariable{mirrored}{منعکس} \setinterfacevariable{monday}{دوشنبه} \setinterfacevariable{mono}{مونو} \setinterfacevariable{month}{ماه} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{شکست‌کلمات‌بیشتر} \setinterfacevariable{name}{نام} \setinterfacevariable{narrow}{نازک} \setinterfacevariable{negative}{منفی} \setinterfacevariable{never}{هیچگاه} \setinterfacevariable{new}{جدید} \setinterfacevariable{next}{بعدی} \setinterfacevariable{nextevenpage}{صفحه‌زوج‌بعدی} \setinterfacevariable{nextoddpage}{صفحه‌فردبعدی} \setinterfacevariable{nextpage}{صفحه‌بعدی} \setinterfacevariable{nextsubpage}{زیرصفحه‌بعدی} \setinterfacevariable{no}{نه} \setinterfacevariable{nocheck}{بدون‌بررسی} \setinterfacevariable{nofit}{بدون‌پرکردن} \setinterfacevariable{nogrid}{بدون‌توری} \setinterfacevariable{nohz}{nohz} \setinterfacevariable{nomarking}{بدون‌نشانه‌گذاری} \setinterfacevariable{none}{هیچکدام} \setinterfacevariable{nonumber}{بدون‌شماره} \setinterfacevariable{normal}{نرمال} \setinterfacevariable{nospacing}{بدون‌فضاگذاری} \setinterfacevariable{not}{بدون} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{بدون‌آویزان‌کردن} \setinterfacevariable{nothyphenated}{بدون‌شکست} \setinterfacevariable{november}{نوامبر} \setinterfacevariable{nowhere}{هیچ‌حا} \setinterfacevariable{nowhite}{سفید‌نه} \setinterfacevariable{number}{شماره} \setinterfacevariable{numbers}{شماره‌ها} \setinterfacevariable{october}{اکتبر} \setinterfacevariable{odd}{فرد} \setinterfacevariable{off}{خاموش} \setinterfacevariable{offset}{آفست} \setinterfacevariable{old}{قدیمی} \setinterfacevariable{on}{روی} \setinterfacevariable{one}{یک} \setinterfacevariable{opposite}{مخالف} \setinterfacevariable{outer}{خارجی} \setinterfacevariable{outeredge}{لبه‌خارجی} \setinterfacevariable{outermargin}{حاشیه‌خارجی} \setinterfacevariable{overbar}{میله‌رو} \setinterfacevariable{overbars}{میله‌ها‌رو} \setinterfacevariable{overlay}{پوشش} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{خط‌زدن} \setinterfacevariable{overstrikes}{خط‌زدنها} \setinterfacevariable{packed}{فشرده} \setinterfacevariable{page}{صفحه} \setinterfacevariable{pagecomment}{توضیح‌صفحه} \setinterfacevariable{pagenumber}{شماره‌صفحه} \setinterfacevariable{paper}{برگ} \setinterfacevariable{paragraph}{پاراگراف} \setinterfacevariable{part}{قسمت} \setinterfacevariable{positive}{مثبت} \setinterfacevariable{postponing}{تاخیر} \setinterfacevariable{postscript}{پست‌اسکریپت} \setinterfacevariable{preference}{ترجیح} \setinterfacevariable{preview}{پیش‌دید} \setinterfacevariable{previous}{قبلی} \setinterfacevariable{previousevenpage}{صفحه‌زوج‌قبلی} \setinterfacevariable{previousoddpage}{صفحه‌فردقبلی} \setinterfacevariable{previouspage}{صفحه‌قبلی} \setinterfacevariable{previoussubpage}{زیرصفحه‌قبلی} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{قابل‌چاپ} \setinterfacevariable{process}{پردازش} \setinterfacevariable{product}{محصول} \setinterfacevariable{program}{برنامه} \setinterfacevariable{project}{پروژه} \setinterfacevariable{protected}{حفاظت‌شده} \setinterfacevariable{quadruple}{quadruple} \setinterfacevariable{quarterline}{quarterline} \setinterfacevariable{quotation}{نقل‌قول} \setinterfacevariable{quote}{نقل} \setinterfacevariable{ran}{برد} \setinterfacevariable{random}{تصادفی} \setinterfacevariable{readonly}{تنهاخواندنی} \setinterfacevariable{rectangular}{چهارگوشه} \setinterfacevariable{reference}{مرجع} \setinterfacevariable{referral}{مراجعه} \setinterfacevariable{register}{ثبت} \setinterfacevariable{regular}{منظم} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{نسبی} \setinterfacevariable{repeat}{تکرار} \setinterfacevariable{required}{موردنیاز} \setinterfacevariable{reset}{بازنشانی} \setinterfacevariable{reverse}{برعکس} \setinterfacevariable{right}{راست} \setinterfacevariable{rightedge}{لبه‌راست} \setinterfacevariable{righthanging}{آویزان‌کردن‌راست} \setinterfacevariable{rightmargin}{حاشیه‌راست} \setinterfacevariable{rightpage}{صفحه‌راست} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{رومن} \setinterfacevariable{romannumerals}{شماره‌لاتین} \setinterfacevariable{rotate}{دوران} \setinterfacevariable{rotated}{دوران‌یافته} \setinterfacevariable{round}{گرد} \setinterfacevariable{row}{سطر} \setinterfacevariable{rule}{خط} \setinterfacevariable{samepage}{همان‌صفحه} \setinterfacevariable{sans}{سانز} \setinterfacevariable{sansbold}{مشکی‌سانز} \setinterfacevariable{sansserif}{سانزسریف} \setinterfacevariable{saturday}{شنبه} \setinterfacevariable{screen}{پرده} \setinterfacevariable{section}{بخش} \setinterfacevariable{sectionblockenvironment}{محیط‌بلوک‌بخش} \setinterfacevariable{sectionnumber}{شماره‌بخش} \setinterfacevariable{see}{ببینید} \setinterfacevariable{september}{سپتامبر} \setinterfacevariable{serif}{سریف} \setinterfacevariable{serried}{تنگ‌هم} \setinterfacevariable{setups}{بارگذاریها} \setinterfacevariable{sheet}{ورقه} \setinterfacevariable{short}{short} \setinterfacevariable{singlesided}{یک‌رو} \setinterfacevariable{slanted}{خوابیده} \setinterfacevariable{slantedbold}{مشکی‌خوابیده} \setinterfacevariable{small}{کوچک} \setinterfacevariable{smallbodyfont}{قلم‌بدنه‌کوچک} \setinterfacevariable{smallbold}{مشکی‌کوچک} \setinterfacevariable{smallbolditalic}{ایتالیک‌مشکی‌کوچک} \setinterfacevariable{smallboldslanted}{خوابیده‌مشکی‌کوچک} \setinterfacevariable{smallcaps}{smallcaps} \setinterfacevariable{smaller}{smaller} \setinterfacevariable{smallitalic}{ایتالیک‌کوچک} \setinterfacevariable{smallitalicbold}{مشکی‌ایتالیک‌کوچک} \setinterfacevariable{smallnormal}{نرمال‌کوچک} \setinterfacevariable{smallslanted}{خوابیده‌کوچک} \setinterfacevariable{smallslantedbold}{مشکی‌خوابیده‌کوچک} \setinterfacevariable{smalltype}{تایپ‌کوچک} \setinterfacevariable{somewhere}{جایی} \setinterfacevariable{sorted}{مرتب} \setinterfacevariable{space}{فضا} \setinterfacevariable{spacing}{فضاگذاری} \setinterfacevariable{speech}{سخنرانی} \setinterfacevariable{split}{شکافتن} \setinterfacevariable{spot}{لکه} \setinterfacevariable{standard}{استاندارد} \setinterfacevariable{start}{شروع} \setinterfacevariable{starter}{starter} \setinterfacevariable{sticker}{دشنه} \setinterfacevariable{stop}{پایان} \setinterfacevariable{stopper}{ایست} \setinterfacevariable{stretch}{بکش} \setinterfacevariable{strict}{اکید} \setinterfacevariable{strong}{محکم} \setinterfacevariable{strut}{بست} \setinterfacevariable{sub}{زیر} \setinterfacevariable{subbackward}{زیرعقب‌گرد} \setinterfacevariable{subformula}{زیرفرمول} \setinterfacevariable{subforward}{زیرجلوگرد} \setinterfacevariable{subject}{موضوع} \setinterfacevariable{subpage}{زیرصفحه} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{زیربخش} \setinterfacevariable{subsubject}{زیرموضوع} \setinterfacevariable{subsubsection}{زیرزیربخش} \setinterfacevariable{subsubsubject}{زیرزیرموضوع} \setinterfacevariable{subsubsubsection}{زیرزیرزیربخش} \setinterfacevariable{subsubsubsubject}{زیرزیرزیرموضوع} \setinterfacevariable{subsubsubsubsection}{زیرزیرزیرزیربخش} \setinterfacevariable{subsubsubsubsubject}{زیرزیرزیرزیرموضوع} \setinterfacevariable{subsubsubsubsubsection}{زیرزیرزیرزیرزیربخش} \setinterfacevariable{subsubsubsubsubsubject}{زیرزیرزیرزیرزیرموضوع} \setinterfacevariable{subsubsubsubsubsubsection}{زیرزیرزیرزیرزیرزیربخش} \setinterfacevariable{subsubsubsubsubsubsubject}{زیرزیرزیرزیرزیرزیرموضوع} \setinterfacevariable{subsubsubsubsubsubsubsection}{زیرزیرزیرزیرزیرزیرزیربخش} \setinterfacevariable{subsubsubsubsubsubsubsubject}{زیرزیرزیرزیرزیرزیرزیرموضوع} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{زیرزیرزیرزیرزیرزیرزیرزیربخش} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{زیرزیرزیرزیرزیرزیرزیرزیرموضوع} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{زیرزیرزیرزیرزیرزیرزیرزیرزیربخش} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{زیرزیرزیرزیرزیرزیرزیرزیرزیرموضوع} \setinterfacevariable{sunday}{یک‌شنبه} \setinterfacevariable{support}{حمایت} \setinterfacevariable{sym}{نم} \setinterfacevariable{symbol}{نماد} \setinterfacevariable{synchronize}{تطابق} \setinterfacevariable{system}{سیستم} \setinterfacevariable{table}{جدول} \setinterfacevariable{tablehead}{سرجدول} \setinterfacevariable{tables}{جدولها} \setinterfacevariable{tabletail}{دنباله‌جدول} \setinterfacevariable{tabulate}{جدول‌بندی} \setinterfacevariable{tabulatehead}{سرجدول‌بندی} \setinterfacevariable{tabulatetail}{دنباله‌جدول‌بندی} \setinterfacevariable{tall}{دراز} \setinterfacevariable{teletype}{دورنگاره} \setinterfacevariable{temporary}{موقتی} \setinterfacevariable{test}{تست} \setinterfacevariable{text}{متن} \setinterfacevariable{three}{سه} \setinterfacevariable{thursday}{پنج‌شنبه} \setinterfacevariable{tight}{tight} \setinterfacevariable{title}{عنوان} \setinterfacevariable{toggle}{تغییر} \setinterfacevariable{tolerant}{بردبار} \setinterfacevariable{top}{بالا} \setinterfacevariable{tuesday}{سه‌شنبه} \setinterfacevariable{two}{دو} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{تایپ} \setinterfacevariable{typing}{تایپ‌کردن} \setinterfacevariable{unavailable}{غیرموجود} \setinterfacevariable{underbar}{میله‌زیر} \setinterfacevariable{underbars}{میله‌‌های‌زیر} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{واحد} \setinterfacevariable{units}{واحدها} \setinterfacevariable{unknown}{ناشناس} \setinterfacevariable{unpacked}{غیرفشرده} \setinterfacevariable{up}{up} \setinterfacevariable{url}{url} \setinterfacevariable{used}{استفاده‌شده} \setinterfacevariable{value}{مقدار} \setinterfacevariable{vertical}{عمودی} \setinterfacevariable{very}{خیلی} \setinterfacevariable{verystrict}{خیلی‌سختگیر} \setinterfacevariable{verytolerant}{خیلی‌بردبار} \setinterfacevariable{weak}{هفته} \setinterfacevariable{wednesday}{چهارشنبه} \setinterfacevariable{week}{هفته} \setinterfacevariable{weekday}{روزهفته} \setinterfacevariable{white}{سفید} \setinterfacevariable{wide}{گسترده} \setinterfacevariable{width}{عرض} \setinterfacevariable{word}{word} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{سال} \setinterfacevariable{yes}{بله} % definitions for interface constants for language pe % \setinterfaceconstant{action}{کنش} \setinterfaceconstant{address}{نشانی} \setinterfaceconstant{after}{بعداز} \setinterfaceconstant{afterhead}{بعدازسر} \setinterfaceconstant{afterkey}{بعدازکلید} \setinterfaceconstant{aftersection}{aftersection} \setinterfaceconstant{align}{تنظیم} \setinterfaceconstant{aligncharacter}{حرف‌تنظیم} \setinterfaceconstant{alignmentcharacter}{حرف‌تنظیم‌کردن} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{عنوان‌تنظیم} \setinterfaceconstant{alternative}{جایگزین} \setinterfaceconstant{anchor}{anchor} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{پیکان} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{در} \setinterfaceconstant{author}{نویسنده} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{خودکار} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{پرونده‌خودکار} \setinterfaceconstant{autofocus}{تمرکز‌خودکار} \setinterfaceconstant{autohang}{آویزان‌خودکار} \setinterfaceconstant{autostrut}{بست‌خودکار} \setinterfaceconstant{autowidth}{عرض‌خودکار} \setinterfaceconstant{availableheight}{availableheight} \setinterfaceconstant{availablewidth}{availablewidth} \setinterfaceconstant{axis}{محورها} \setinterfaceconstant{background}{پس‌زمینه} \setinterfaceconstant{backgroundcolor}{رنگ‌پس‌زمینه} \setinterfaceconstant{backgroundcorner}{گوشه‌پس‌زمینه} \setinterfaceconstant{backgrounddepth}{عمق‌پس‌زمینه} \setinterfaceconstant{backgroundoffset}{آفست‌پس‌زمینه} \setinterfaceconstant{backgroundradius}{شعاع‌پس‌زمینه} \setinterfaceconstant{backgroundscreen}{پرده‌پس‌زمینه} \setinterfaceconstant{backreference}{backreference} \setinterfaceconstant{backspace}{فضای‌پس} \setinterfaceconstant{balance}{تعادل} \setinterfaceconstant{before}{قبل‌از} \setinterfaceconstant{beforehead}{قبل‌ازسر} \setinterfaceconstant{beforesection}{beforesection} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{بزرگ} \setinterfaceconstant{blank}{خالی} \setinterfaceconstant{blockway}{راه‌بلوک} \setinterfaceconstant{bodyfont}{قلم‌بدنه} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{چوبخط} \setinterfaceconstant{bottom}{پایین} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{فاصله‌پایین} \setinterfaceconstant{bottomframe}{قالب‌پایین} \setinterfaceconstant{bottomoffset}{آفست‌پایین} \setinterfaceconstant{bottomspace}{فضای‌پایین} \setinterfaceconstant{bottomstate}{وضعیت‌پایین} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{میانگیر} \setinterfaceconstant{calculate}{محاسبه} \setinterfaceconstant{category}{category} \setinterfaceconstant{ccommand}{فرمان} \setinterfaceconstant{click}{فشردن} \setinterfaceconstant{clickin}{فشردن‌داخل} \setinterfaceconstant{clickout}{فشردن‌خارج} \setinterfaceconstant{clipoffset}{آفست‌کلیپ} \setinterfaceconstant{closeaction}{بستن‌کنش} \setinterfaceconstant{closecommand}{بستن‌فرمان} \setinterfaceconstant{closepage}{closepage} \setinterfaceconstant{closepageaction}{بستن‌عمل‌صفحه} \setinterfaceconstant{closesymbol}{بستن‌نماد} \setinterfaceconstant{color}{رنگ} \setinterfaceconstant{column}{ستون} \setinterfaceconstant{columndistance}{فاصله‌ستون} \setinterfaceconstant{columns}{ستونها} \setinterfaceconstant{command}{فرمان} \setinterfaceconstant{commandafter}{فرمان‌بعداز} \setinterfaceconstant{commandbefore}{فرمان‌قبل‌از} \setinterfaceconstant{commands}{فرمانها} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{مولفه} \setinterfaceconstant{compoundhyphen}{compoundhyphen} \setinterfaceconstant{compress}{فشردن} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{ادامه} \setinterfaceconstant{contrastcolor}{contrastcolor} \setinterfaceconstant{controls}{کنترلها} \setinterfaceconstant{conversion}{تبدیل} \setinterfaceconstant{convertfile}{پرونده‌تبدیل} \setinterfaceconstant{corner}{گوشه} \setinterfaceconstant{coupling}{تزویج} \setinterfaceconstant{couplingway}{روش‌تزویج} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{جاری} \setinterfaceconstant{cutspace}{فضای‌برش} \setinterfaceconstant{dash}{دش} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{تاریخ} \setinterfaceconstant{deepnumbercommand}{فرمان‌شماره‌عمیق} \setinterfaceconstant{deeptextcommand}{فرمان‌متن‌عمیق} \setinterfaceconstant{default}{پیش‌فرض} \setinterfaceconstant{delay}{تاخیر} \setinterfaceconstant{depth}{عمق} \setinterfaceconstant{depthcorrection}{تصحیح‌عمق} \setinterfaceconstant{direction}{جهت} \setinterfaceconstant{directory}{پوشه} \setinterfaceconstant{display}{نمایش} \setinterfaceconstant{distance}{فاصله} \setinterfaceconstant{dot}{نقطه} \setinterfaceconstant{doublesided}{دورو} \setinterfaceconstant{dummy}{مصنوعی} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{لبه} \setinterfaceconstant{edgedistance}{فاصله‌لبه} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{تهی} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{entries} \setinterfaceconstant{equalheight}{ارتفاع‌یکسان} \setinterfaceconstant{equalwidth}{عرض‌یکسان} \setinterfaceconstant{escape}{فرار} \setinterfaceconstant{evenmargin}{حاشیه‌زوج} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{گسترش} \setinterfaceconstant{export}{export} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{عامل} \setinterfaceconstant{fallback}{عقب‌ریختن} \setinterfaceconstant{family}{خانواده} \setinterfaceconstant{fieldbackgroundcolor}{رنگ‌پس‌زمینه‌میدان} \setinterfaceconstant{fieldframecolor}{رنگ‌قالب‌میدان} \setinterfaceconstant{fieldlayer}{لایه‌میدان} \setinterfaceconstant{fieldoffset}{آفست‌میدان} \setinterfaceconstant{file}{پرونده} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{صفحه‌اول} \setinterfaceconstant{focus}{تمرکز} \setinterfaceconstant{focusin}{تمرکزدرون} \setinterfaceconstant{focusout}{تمرکزبیرون} \setinterfaceconstant{footer}{ته‌برگ} \setinterfaceconstant{footerdistance}{فاصله‌ته‌برگ} \setinterfaceconstant{footerstate}{وضعیت‌ته‌برگ} \setinterfaceconstant{force}{اجبار} \setinterfaceconstant{foregroundcolor}{رنگ‌پیش‌زمینه} \setinterfaceconstant{foregroundstyle}{سبک‌پیش‌زمینه} \setinterfaceconstant{format}{شمایل} \setinterfaceconstant{frame}{قالب} \setinterfaceconstant{framecolor}{رنگ‌قالب} \setinterfaceconstant{framecorner}{گوشه‌قالب} \setinterfaceconstant{framedepth}{عمق‌قالب} \setinterfaceconstant{frameoffset}{آفست‌قالب} \setinterfaceconstant{frameradius}{شعاع‌قالب} \setinterfaceconstant{frames}{قالبها} \setinterfaceconstant{from}{از} \setinterfaceconstant{get}{بگیر} \setinterfaceconstant{global}{سراسری} \setinterfaceconstant{grid}{توری} \setinterfaceconstant{hang}{بیاویز} \setinterfaceconstant{hcompact}{hcompact} \setinterfaceconstant{headalign}{headalign} \setinterfaceconstant{headcolor}{رنگ‌سر} \setinterfaceconstant{headcommand}{فرمان‌سر} \setinterfaceconstant{headconversion}{تبدیل‌سر} \setinterfaceconstant{header}{سربرگ} \setinterfaceconstant{headerdistance}{فاصله‌سربرگ} \setinterfaceconstant{headerstate}{وضعیت‌سربرگ} \setinterfaceconstant{headlabel}{برچسب‌سر} \setinterfaceconstant{headnumber}{شماره‌سر} \setinterfaceconstant{headstyle}{سبک‌سر} \setinterfaceconstant{height}{ارتفاع} \setinterfaceconstant{hfactor}{عامل‌ارتفاع} \setinterfaceconstant{hfil}{پرکردن‌ارتفاع} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{آفست‌ا} \setinterfaceconstant{horoffset}{آفست‌افق} \setinterfaceconstant{hyphen}{شکستن} \setinterfaceconstant{icommand}{icommand} \setinterfaceconstant{in}{درون} \setinterfaceconstant{inbetween}{دربین} \setinterfaceconstant{increment}{افزایش} \setinterfaceconstant{incrementnumber}{شماره‌افزایش} \setinterfaceconstant{indenting}{تورفتگی} \setinterfaceconstant{indentnext}{متن‌تورفته} \setinterfaceconstant{indicator}{اندیکاتور} \setinterfaceconstant{inner}{داخلی} \setinterfaceconstant{innermargin}{حاشیه‌داخلی} \setinterfaceconstant{inputfile}{پرونده‌ورودی} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{پانل} \setinterfaceconstant{interlinespace}{فضای‌بین‌خط} \setinterfaceconstant{internalgrid}{internalgrid} \setinterfaceconstant{itemalign}{تنظیم‌آیتم} \setinterfaceconstant{items}{آیتمها} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{گسترش‌کلید} \setinterfaceconstant{keys}{keys} \setinterfaceconstant{keyword}{کلید‌واژه} \setinterfaceconstant{label}{برچسب} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{صفحه‌آخر} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{چپ} \setinterfaceconstant{leftcolor}{رنگ‌چپ} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{لبه‌چپ} \setinterfaceconstant{leftedgedistance}{فاصله‌لبه‌چپ} \setinterfaceconstant{leftframe}{قالب‌چپ} \setinterfaceconstant{lefthyphen}{شکست‌چپ} \setinterfaceconstant{leftmargin}{حاشیه‌چپ} \setinterfaceconstant{leftmargindistance}{فاصله‌حاشیه‌چپ} \setinterfaceconstant{leftoffset}{آفست‌چپ} \setinterfaceconstant{leftquotation}{نقل‌قول‌چپ} \setinterfaceconstant{leftquote}{نقل‌چپ} \setinterfaceconstant{leftsentence}{جمله‌چپ} \setinterfaceconstant{leftspeech}{سخنرانی‌چپ} \setinterfaceconstant{leftstyle}{سبک‌چپ} \setinterfaceconstant{leftsubsentence}{زیرجمله‌چپ} \setinterfaceconstant{lefttext}{متن‌چپ} \setinterfaceconstant{leftwidth}{عرض‌خط} \setinterfaceconstant{less}{less} \setinterfaceconstant{level}{مرحله} \setinterfaceconstant{levels}{مرحله‌ها} \setinterfaceconstant{limittext}{مرزمتن} \setinterfaceconstant{line}{خط} \setinterfaceconstant{linecorrection}{تصحیح‌خط} \setinterfaceconstant{lines}{خطها} \setinterfaceconstant{list}{لیست} \setinterfaceconstant{listtext}{متن‌لیست} \setinterfaceconstant{local}{موضعی} \setinterfaceconstant{location}{مکان} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{آرم} \setinterfaceconstant{logos}{آرمها} \setinterfaceconstant{marcolor}{رنگ‌حاش} \setinterfaceconstant{margin}{حاشیه} \setinterfaceconstant{margindistance}{فاصله‌حاشیه} \setinterfaceconstant{marginedge}{لبه‌حاشیه} \setinterfaceconstant{marginedgetext}{متن‌لبه‌حاشیه} \setinterfaceconstant{margintext}{متن‌حاشیه} \setinterfaceconstant{marking}{نشانه‌گذاری} \setinterfaceconstant{marstyle}{سبک‌حاش} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{بیشترین} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{بیشترین‌ارتفاع} \setinterfaceconstant{maxwidth}{بیشترین‌عرض} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{منو} \setinterfaceconstant{method}{روش} \setinterfaceconstant{middle}{میان} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlespeech}{سخنرانی‌میانی} \setinterfaceconstant{middletext}{متن‌میانی} \setinterfaceconstant{midsentence}{جمله‌میانی} \setinterfaceconstant{min}{کمترین} \setinterfaceconstant{mindepth}{کمترین‌عمق} \setinterfaceconstant{minheight}{کمترین‌ارتفاع} \setinterfaceconstant{minwidth}{کمترین‌عرض} \setinterfaceconstant{monthconversion}{monthconversion} \setinterfaceconstant{more}{more} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{نام} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{nbottom} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{بعدی} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{nleft} \setinterfaceconstant{nlines}{nlines} \setinterfaceconstant{norm}{norm} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{nright} \setinterfaceconstant{ntop}{ntop} \setinterfaceconstant{number}{شماره} \setinterfaceconstant{numbercolor}{رنگ‌شماره} \setinterfaceconstant{numbercommand}{فرمان‌شماره} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{فاصله‌شماره} \setinterfaceconstant{numbering}{شماره‌گذاری} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{جداکننده‌شماره} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{سبک‌شماره} \setinterfaceconstant{numberwidth}{عرض‌شماره} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{شیئ} \setinterfaceconstant{obstruction}{انسداد} \setinterfaceconstant{oddmargin}{حاشیه‌فرد} \setinterfaceconstant{offset}{آفست} \setinterfaceconstant{openaction}{عمل‌باز} \setinterfaceconstant{openpage}{openpage} \setinterfaceconstant{openpageaction}{عمل‌صفحه‌باز} \setinterfaceconstant{option}{گزینه} \setinterfaceconstant{order}{order} \setinterfaceconstant{orientation}{جهت‌دهی} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{حاشیه‌خارجی} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{شماره‌خود} \setinterfaceconstant{page}{صفحه} \setinterfaceconstant{pageboundaries}{مرزهای‌صفحه} \setinterfaceconstant{pagecolor}{رنگ‌صفحه} \setinterfaceconstant{pagecolormodel}{pagecolormodel} \setinterfaceconstant{pagecommand}{فرمان‌صفحه} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{شماره‌صفحه} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{وضعیت‌صفحه} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{سبک‌صفحه} \setinterfaceconstant{palet}{لوح} \setinterfaceconstant{paper}{برگ} \setinterfaceconstant{paragraph}{پاراگراف} \setinterfaceconstant{place}{بگذار} \setinterfaceconstant{placehead}{بگذارسر} \setinterfaceconstant{placestopper}{بگذارایست} \setinterfaceconstant{position}{موقعیت} \setinterfaceconstant{prefix}{پیشوند} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{preset} \setinterfaceconstant{preview}{پیش‌دید} \setinterfaceconstant{previous}{قبلی} \setinterfaceconstant{previousnumber}{شماره‌قبلی} \setinterfaceconstant{printable}{قابل‌چاپ} \setinterfaceconstant{process}{پردازش} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{شعاع} \setinterfaceconstant{random}{تصادفی} \setinterfaceconstant{range}{range} \setinterfaceconstant{reduction}{کاهش} \setinterfaceconstant{ref}{رج} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{مرجع} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{مراجعه} \setinterfaceconstant{region}{region} \setinterfaceconstant{regionin}{ناحیه‌درون} \setinterfaceconstant{regionout}{ناحیه‌بیرون} \setinterfaceconstant{repeat}{تکرار} \setinterfaceconstant{reset}{بازنشانی} \setinterfaceconstant{resetnumber}{بازنشانی‌شماره} \setinterfaceconstant{resolution}{کیفیت} \setinterfaceconstant{right}{راست} \setinterfaceconstant{rightcolor}{رنگ‌راست} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{لبه‌راست} \setinterfaceconstant{rightedgedistance}{فاصله‌لبه‌راست} \setinterfaceconstant{rightframe}{قالب‌راست} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{حاشیه‌راست} \setinterfaceconstant{rightmargindistance}{فاصله‌حاشیه‌راست} \setinterfaceconstant{rightoffset}{آفست‌راست} \setinterfaceconstant{rightquotation}{نقل‌قول‌راست} \setinterfaceconstant{rightquote}{نقل‌راست} \setinterfaceconstant{rightsentence}{جمله‌راست} \setinterfaceconstant{rightspeech}{سخنرانی‌راست} \setinterfaceconstant{rightstyle}{سبک‌راست} \setinterfaceconstant{rightsubsentence}{زیرجمله‌راست} \setinterfaceconstant{righttext}{متن‌راست} \setinterfaceconstant{rightwidth}{عرض‌راست} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{دوران} \setinterfaceconstant{rule}{خط} \setinterfaceconstant{rulecolor}{رنگ‌خط} \setinterfaceconstant{rulecommand}{rulecommand} \setinterfaceconstant{rulethickness}{ضخامت‌خط} \setinterfaceconstant{samepage}{همان‌صفحه} \setinterfaceconstant{sample}{نمونه} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{مقیاس} \setinterfaceconstant{scope}{طرح} \setinterfaceconstant{screen}{پرده} \setinterfaceconstant{section}{بخش} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{شماره‌بخش} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{جداکننده} \setinterfaceconstant{set}{قراربده} \setinterfaceconstant{setups}{بارگذاریها} \setinterfaceconstant{shrink}{shrink} \setinterfaceconstant{side}{کنار} \setinterfaceconstant{sidealign}{تنظیم‌کنار} \setinterfaceconstant{sidemethod}{روش‌کنار} \setinterfaceconstant{sidespaceafter}{فضای‌کناری‌بعد} \setinterfaceconstant{sidespacebefore}{فضای‌کناری‌قبل} \setinterfaceconstant{sign}{علامت} \setinterfaceconstant{size}{اندازه} \setinterfaceconstant{small}{کوچک} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{ترتیب‌تایپ} \setinterfaceconstant{source}{منبع} \setinterfaceconstant{space}{فضا} \setinterfaceconstant{spaceafter}{فضا‌بعداز} \setinterfaceconstant{spacebefore}{فضا‌قبل‌از} \setinterfaceconstant{spaceinbetween}{فضا‌دربین} \setinterfaceconstant{spacing}{فضاگذاری} \setinterfaceconstant{split}{شکافتن} \setinterfaceconstant{splitcolor}{شکافتن‌رنگ} \setinterfaceconstant{splitmethod}{روش‌شکافتن} \setinterfaceconstant{splitoffset}{شکافتن‌آفست} \setinterfaceconstant{spot}{لکه} \setinterfaceconstant{stack}{توده} \setinterfaceconstant{start}{شروع} \setinterfaceconstant{starter}{starter} \setinterfaceconstant{state}{وضعیت} \setinterfaceconstant{step}{گام} \setinterfaceconstant{stop}{پایان} \setinterfaceconstant{stopper}{ایست} \setinterfaceconstant{stretch}{کشیدن} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{بست} \setinterfaceconstant{style}{سبک} \setinterfaceconstant{sub}{زیر} \setinterfaceconstant{subtitle}{زیرعنوان} \setinterfaceconstant{suffix}{پسوند} \setinterfaceconstant{suffixseparator}{suffixseparator} \setinterfaceconstant{suffixstopper}{suffixstopper} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{تنظیم‌نماد} \setinterfaceconstant{symbol}{نماد} \setinterfaceconstant{symbolset}{مجموعه‌نماد} \setinterfaceconstant{symcolor}{رنگ‌نماد} \setinterfaceconstant{symstyle}{سبک‌نماد} \setinterfaceconstant{synonym}{مترادف} \setinterfaceconstant{synonymcolor}{رنگ‌مترادف} \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{سبک‌مترادف} \setinterfaceconstant{tab}{تب} \setinterfaceconstant{text}{متن} \setinterfaceconstant{textcolor}{رنگ‌متن} \setinterfaceconstant{textcommand}{فرمان‌متن} \setinterfaceconstant{textdistance}{فاصله‌متن} \setinterfaceconstant{textheight}{ارتفاع‌متن} \setinterfaceconstant{textlayer}{لایه‌متن} \setinterfaceconstant{textmargin}{حاشیه‌متن} \setinterfaceconstant{textmethod}{روش‌متن} \setinterfaceconstant{textseparator}{جداکننده‌متن} \setinterfaceconstant{textsize}{اندازه‌متن} \setinterfaceconstant{textstate}{وضعیت‌متن} \setinterfaceconstant{textstyle}{سبک‌متن} \setinterfaceconstant{textwidth}{عرض‌متن} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{عنوان} \setinterfaceconstant{titlecolor}{رنگ‌عنوان} \setinterfaceconstant{titlecommand}{فرمان‌عنوان} \setinterfaceconstant{titledistance}{فاصله‌عنوان} \setinterfaceconstant{titleleft}{عنوان‌چپ} \setinterfaceconstant{titleright}{عنوان‌راست} \setinterfaceconstant{titlestyle}{سبک‌عنوان} \setinterfaceconstant{to}{به} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{بردباری} \setinterfaceconstant{top}{بالا} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{فاصله‌بالا} \setinterfaceconstant{topframe}{قالب‌راست} \setinterfaceconstant{topoffset}{آفست‌بالا} \setinterfaceconstant{topspace}{فضای‌بالا} \setinterfaceconstant{topstate}{وضعیت‌بالا} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{تایپ} \setinterfaceconstant{unit}{واحد} \setinterfaceconstant{unknownreference}{مرجع‌ناشناس} \setinterfaceconstant{urlalternative}{urlalternative} \setinterfaceconstant{urlspace}{urlspace} \setinterfaceconstant{validate}{تاییداعتبار} \setinterfaceconstant{values}{values} \setinterfaceconstant{vcommand}{vcommand} \setinterfaceconstant{vcompact}{vcompact} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{آفست‌عم} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{آفست‌ع} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{راه} \setinterfaceconstant{wfactor}{wfactor} \setinterfaceconstant{white}{سفید} \setinterfaceconstant{width}{عرض} \setinterfaceconstant{xfactor}{فاکتورایکس} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{آفست‌ایکس} \setinterfaceconstant{xscale}{مقیاس‌ایکس} \setinterfaceconstant{xstep}{گام‌ایکس} \setinterfaceconstant{yfactor}{فاکتوروای} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{آفست‌وای} \setinterfaceconstant{yscale}{مقیاس‌وای} \setinterfaceconstant{ystep}{گام‌وای} % definitions for interface elements for language pe % \setinterfaceelement{answerlines}{answerlines} \setinterfaceelement{answerspace}{answerspace} \setinterfaceelement{begin}{عنصرها} \setinterfaceelement{complete}{کامل} \setinterfaceelement{coupled}{مزدوج} \setinterfaceelement{currentlocal}{موضعی‌جاری} \setinterfaceelement{end}{انتها} \setinterfaceelement{endsetup}{انتهای‌بارگذاری} \setinterfaceelement{get}{بگیر} \setinterfaceelement{increment}{افزایش} \setinterfaceelement{list}{لیست} \setinterfaceelement{listof}{لیست‌از} \setinterfaceelement{load}{بارگذاشتن} \setinterfaceelement{local}{موضعی} \setinterfaceelement{makeup}{آرایش} \setinterfaceelement{next}{بعدی} \setinterfaceelement{place}{مکان} \setinterfaceelement{previous}{قبلی} \setinterfaceelement{previouslocal}{موضع‌قبلی} \setinterfaceelement{reserve}{رزرو} \setinterfaceelement{see}{ببینید} \setinterfaceelement{setup}{بارگذاری} \setinterfaceelement{start}{شروع} \setinterfaceelement{stop}{پایان} \setinterfaceelement{text}{متن} \setinterfaceelement{type}{تایپ} % definitions for interface commands for language pe % \setinterfacecommand{CAPPED}{CAP} \setinterfacecommand{Character}{Character} \setinterfacecommand{Characters}{Characters} \setinterfacecommand{MONTH}{MONTH} \setinterfacecommand{Numbers}{Numbers} \setinterfacecommand{Romannumerals}{Romannumerals} \setinterfacecommand{SmallCapped}{Cap} \setinterfacecommand{SmallCaps}{Caps} \setinterfacecommand{WEEKDAY}{WEEKDAY} \setinterfacecommand{WORD}{WORD} \setinterfacecommand{WORDS}{WORDS} \setinterfacecommand{Word}{Word} \setinterfacecommand{Words}{Words} \setinterfacecommand{about}{درمورد} \setinterfacecommand{adaptlayout}{تنظیم‌طرح‌بندی} \setinterfacecommand{arg}{افزودن} \setinterfacecommand{at}{در} \setinterfacecommand{atleftmargin}{درحاشیه‌چپ} \setinterfacecommand{atpage}{درصفحه} \setinterfacecommand{atrightmargin}{درحاشیه‌راست} \setinterfacecommand{background}{پس‌زمینه} \setinterfacecommand{backspace}{فاصله‌پشت} \setinterfacecommand{blackrule}{خط‌سیاه} \setinterfacecommand{blackrules}{خطهای‌سیاه} \setinterfacecommand{blank}{خالی} \setinterfacecommand{bookmark}{چوبخط} \setinterfacecommand{bottomdistance}{فاصله‌پایین} \setinterfacecommand{bottomheight}{ارتفاع‌پایین} \setinterfacecommand{bottomspace}{فضای‌پایین} \setinterfacecommand{but}{اما} \setinterfacecommand{button}{دکمه} \setinterfacecommand{bypassblocks}{عبوربلوکها} \setinterfacecommand{character}{حرف} \setinterfacecommand{characters}{حرفها} \setinterfacecommand{chem}{chem} \setinterfacecommand{clip}{گیره} \setinterfacecommand{clonefield}{میدان‌شبیه‌سازی} \setinterfacecommand{color}{رنگ} \setinterfacecommand{colorbar}{میله‌رنگ} \setinterfacecommand{colorvalue}{مقداررنگ} \setinterfacecommand{column}{ستون} \setinterfacecommand{comparecolorgroup}{مقایسه‌گروه‌رنگ} \setinterfacecommand{comparepalet}{لوح‌مقایسه} \setinterfacecommand{completepagenumber}{شماره‌صفحه‌کامل} \setinterfacecommand{completeregister}{ثبت‌کامل} \setinterfacecommand{component}{مولفه} \setinterfacecommand{convertnumber}{شماره‌مبدل} \setinterfacecommand{copyfield}{میدان‌کپی} \setinterfacecommand{correctwhitespace}{فضای‌سفیدصحیح} \setinterfacecommand{coupledocument}{نوشتارزوج} \setinterfacecommand{couplemarking}{نشانه‌گذاری‌زوج} \setinterfacecommand{couplepage}{صفحه‌زوج} \setinterfacecommand{couplepaper}{کاغذزوج} \setinterfacecommand{coupleregister}{ثبت‌زوج} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{تاریخ‌جاری} \setinterfacecommand{currentheadnumber}{شماره‌سرجاری} \setinterfacecommand{cutspace}{فضای‌برش} \setinterfacecommand{date}{تاریخ} \setinterfacecommand{decouplemarking}{جداسازی‌نشانه‌گذاری} \setinterfacecommand{decrementnumber}{شماره‌کاهش} \setinterfacecommand{define}{تعریف} \setinterfacecommand{defineaccent}{تعریف‌لهجه} \setinterfacecommand{defineblank}{تعریف‌خالی} \setinterfacecommand{defineblock}{تعریف‌بلوک} \setinterfacecommand{definebodyfont}{تعریف‌قلم‌متن} \setinterfacecommand{definebodyfontenvironment}{تعریف‌محیط‌قلم‌بدنه} \setinterfacecommand{definebuffer}{تعریف‌بافر} \setinterfacecommand{definecharacter}{تعریف‌حرف} \setinterfacecommand{definecolor}{تعریف‌رنگ} \setinterfacecommand{definecolorgroup}{تعریف‌گروه‌رنگ} \setinterfacecommand{definecolumnbreak}{تعریف‌شکستن‌ستون} \setinterfacecommand{definecolumnset}{تعریف‌مجموعه‌ستون} \setinterfacecommand{definecombination}{تعریف‌ترکیب} \setinterfacecommand{definecombinedlist}{تعریف‌لیست‌ترکیبی} \setinterfacecommand{definecommand}{تعریف‌فرمان} \setinterfacecommand{defineconversion}{تعریف‌تبدیل} \setinterfacecommand{definedescription}{تعریف‌شرح} \setinterfacecommand{defineenumeration}{تعریف‌شماره‌بندی} \setinterfacecommand{definefield}{تعریف‌میدان} \setinterfacecommand{definefieldstack}{تعریف‌توده‌میدان} \setinterfacecommand{definefiguresymbol}{تعریف‌نمادشکل} \setinterfacecommand{definefloat}{تعریف‌شناور} \setinterfacecommand{definefont}{تعریف‌قلم} \setinterfacecommand{definefontstyle}{تعریف‌سبک‌قلم} \setinterfacecommand{definefontsynonym}{تعریف‌مترادف‌قلم} \setinterfacecommand{defineframed}{تعریف‌قالبی} \setinterfacecommand{defineframedtext}{تعریف‌متن‌قالبی} \setinterfacecommand{definehbox}{تعریف‌جعبه‌‌افقی} \setinterfacecommand{definehead}{تعریف‌سر} \setinterfacecommand{defineindentedtext}{defineindentedtext} \setinterfacecommand{defineinmargin}{تعریف‌درون‌حاشیه} \setinterfacecommand{defineinteractionmenu}{تعریف‌منوی‌پانل} \setinterfacecommand{defineitemgroup}{تعریف‌گروه‌آیتم} \setinterfacecommand{definelabel}{تعریف‌برچسب} \setinterfacecommand{definelayer}{تعریف‌لایه} \setinterfacecommand{definelayout}{تعریف‌طرح‌بندی} \setinterfacecommand{definelist}{تعریف‌لیست} \setinterfacecommand{definelogo}{تعریف‌آرم} \setinterfacecommand{definemainfield}{تعریف‌میدان‌اصلی} \setinterfacecommand{definemakeup}{تعریف‌آرایش} \setinterfacecommand{definemarking}{تعریف‌نشانه‌گذاری} \setinterfacecommand{definemathalignment}{تعریف‌تنظیم‌ریاضی} \setinterfacecommand{defineoutput}{تعریف‌خروجی} \setinterfacecommand{defineoverlay}{تعریف‌پوشش} \setinterfacecommand{definepagebreak}{تعریف‌شکست‌صفحه} \setinterfacecommand{definepalet}{تعریف‌لوح} \setinterfacecommand{definepapersize}{تعریف‌اندازه‌برگ} \setinterfacecommand{defineparagraphs}{تعریف‌پاراگرافها} \setinterfacecommand{defineplacement}{تعریف‌جانشانی} \setinterfacecommand{defineprofile}{تعریف‌پروفایل} \setinterfacecommand{defineprogram}{تعریف‌برنامه} \setinterfacecommand{definerawfont}{تعریف‌قلم‌خام} \setinterfacecommand{definereference}{تعریف‌مرجع} \setinterfacecommand{definereferenceformat}{تعریف‌شمایل‌مرجع} \setinterfacecommand{definereferencelist}{تعریف‌لیست‌مرجع} \setinterfacecommand{defineregister}{تعریف‌ثبت} \setinterfacecommand{definerule}{تعریف‌خط‌حائل} \setinterfacecommand{definesection}{تعریف‌بخش} \setinterfacecommand{definesectionblock}{تعریف‌بلوک‌بخش} \setinterfacecommand{definesorting}{تعریف‌ترتیب} \setinterfacecommand{definestartstop}{تعریف‌شروع‌پایان} \setinterfacecommand{definestyle}{تعریف‌سبک} \setinterfacecommand{definesubfield}{تعریف‌زیرمیدان} \setinterfacecommand{definesymbol}{تعریف‌نماد} \setinterfacecommand{definesynonyms}{تعریف‌مترادفها} \setinterfacecommand{definetabletemplate}{تعریف‌الگوی‌جدول} \setinterfacecommand{definetabulate}{تعریف‌جدول‌بندی} \setinterfacecommand{definetext}{تعریف‌متن} \setinterfacecommand{definetextposition}{تعریف‌مکان‌متن} \setinterfacecommand{definetextvariable}{تعریف‌متغیرمتن} \setinterfacecommand{definetype}{تعریف‌تایپ} \setinterfacecommand{definetyping}{تعریف‌تایپ‌کردن} \setinterfacecommand{defineversion}{تعریف‌نسخه} \setinterfacecommand{determineheadnumber}{تعیین‌شماره‌سر} \setinterfacecommand{determinelistcharacteristics}{تعیین‌مشخصات‌لیست} \setinterfacecommand{determineregistercharacteristics}{تعیین‌مشخصات‌ثبت} \setinterfacecommand{dimension}{بعد} \setinterfacecommand{disableinteractionmenu}{ازکارانداختن‌منوی‌پانل} \setinterfacecommand{domicile}{مسکن} \setinterfacecommand{donttest}{امتحان‌نکن} \setinterfacecommand{edgedistance}{فاصله‌لبه} \setinterfacecommand{edgewidth}{عرض‌لبه} \setinterfacecommand{emptylines}{خطها‌خالی} \setinterfacecommand{environment}{محیط} \setinterfacecommand{externalfigure}{شکل‌خارجی} \setinterfacecommand{fact}{حقیقت} \setinterfacecommand{field}{میدان} \setinterfacecommand{fieldstack}{میدان‌پشته} \setinterfacecommand{fillinfield}{درج‌درمیدان} \setinterfacecommand{fillinline}{درج‌درخط} \setinterfacecommand{fillinrules}{درج‌درخطها} \setinterfacecommand{fillintext}{درج‌درمتن} \setinterfacecommand{fitfield}{پرکردن‌میدان} \setinterfacecommand{fixedspace}{فضای‌ثابت} \setinterfacecommand{fixedspaces}{فضاهای‌ثابت} \setinterfacecommand{followprofile}{پیروی‌پروفایل} \setinterfacecommand{followprofileversion}{پیروی‌نسخه‌پروفایل} \setinterfacecommand{followversion}{پیروی‌نسخه} \setinterfacecommand{footerdistance}{فاصله‌ته‌برگ} \setinterfacecommand{footerheight}{ارتفاع‌ته‌برگ} \setinterfacecommand{footnote}{پانوشت} \setinterfacecommand{footnotetext}{متن‌پانوشت} \setinterfacecommand{forceblocks}{اجباربلوکها} \setinterfacecommand{formulanumber}{شماره‌فرمول} \setinterfacecommand{fraction}{کسر} \setinterfacecommand{framed}{قالبی} \setinterfacecommand{from}{از} \setinterfacecommand{getbuffer}{دریافت‌بافر} \setinterfacecommand{getmarking}{دریافت‌نشانه} \setinterfacecommand{getnumber}{دریافت‌شماره} \setinterfacecommand{godown}{بروپایین} \setinterfacecommand{goto}{بروبه} \setinterfacecommand{gotobox}{بروبه‌جعبه} \setinterfacecommand{gotopage}{بروبه‌صفحه} \setinterfacecommand{graycolor}{رنگ‌خاکستری} \setinterfacecommand{greyvalue}{مقدارخاکستری} \setinterfacecommand{grid}{توری} \setinterfacecommand{hairline}{خط‌مو} \setinterfacecommand{head}{سر} \setinterfacecommand{headerdistance}{فاصله‌سربرگ} \setinterfacecommand{headerheight}{ارتفاع‌سربرگ} \setinterfacecommand{headlevel}{مرحله‌سر} \setinterfacecommand{headnumber}{شماره‌سر} \setinterfacecommand{headsym}{نمادسر} \setinterfacecommand{headtext}{متن‌سر} \setinterfacecommand{hideblocks}{بلوکها‌پنهان} \setinterfacecommand{high}{بلند} \setinterfacecommand{hl}{خ‌ا} \setinterfacecommand{immediatebetweenlist}{فوری‌بین‌لیست} \setinterfacecommand{immediatetolist}{فوری‌به‌لیست} \setinterfacecommand{in}{درون} \setinterfacecommand{incrementnumber}{شماره‌افزایش} \setinterfacecommand{indenting}{تورفتگی} \setinterfacecommand{inframed}{درقالبی} \setinterfacecommand{infull}{درپر} \setinterfacecommand{ininner}{درداخلی} \setinterfacecommand{inleft}{درچپ} \setinterfacecommand{inleftedge}{درلبه‌چپ} \setinterfacecommand{inleftmargin}{درحاشیه‌چپ} \setinterfacecommand{inline}{درخط} \setinterfacecommand{inmargin}{درحاشیه} \setinterfacecommand{inmframed}{inmframed} \setinterfacecommand{inneredgedistance}{فاصله‌لبه‌داخلی} \setinterfacecommand{inneredgewidth}{عرض‌لبه‌داخلی} \setinterfacecommand{innermargindistance}{فاصله‌حاشیه‌داخلی} \setinterfacecommand{innermarginwidth}{عرض‌حاشیه‌داخلی} \setinterfacecommand{inothermargin}{درحاشیه‌دیگر} \setinterfacecommand{inouter}{درخارجی} \setinterfacecommand{inright}{درراست} \setinterfacecommand{inrightedge}{درلبه‌راست} \setinterfacecommand{inrightmargin}{درحاشیه‌راست} \setinterfacecommand{installlanguage}{نصب‌زبان} \setinterfacecommand{interactionbar}{میله‌پانل} \setinterfacecommand{interactionbuttons}{دکمه‌پانل} \setinterfacecommand{interactionmenu}{منوی‌پانل} \setinterfacecommand{item}{آیتم} \setinterfacecommand{items}{آیتمها} \setinterfacecommand{its}{its} \setinterfacecommand{keepblocks}{حفظ‌بلوکها} \setinterfacecommand{label}{برچسب} \setinterfacecommand{labels}{برچسبها} \setinterfacecommand{labeltext}{متن‌برچسب} \setinterfacecommand{language}{زبان} \setinterfacecommand{leftaligned}{چپ‌چین} \setinterfacecommand{leftedgedistance}{فاصله‌لبه‌چپ} \setinterfacecommand{leftedgewidth}{عرض‌لبه‌چپ} \setinterfacecommand{leftmargindistance}{فاصله‌حاشیه‌چپ} \setinterfacecommand{leftmarginwidth}{عرض‌حاشیه‌چپ} \setinterfacecommand{leg}{پا} \setinterfacecommand{linewidth}{عرض‌خط} \setinterfacecommand{listheight}{ارتفاع‌خط} \setinterfacecommand{listlength}{طول‌لیست} \setinterfacecommand{listsymbol}{نمادلیست} \setinterfacecommand{listwidth}{عرض‌لیست} \setinterfacecommand{logfields}{میدانهای‌گزارش} \setinterfacecommand{lohi}{پابا} \setinterfacecommand{low}{پایین} \setinterfacecommand{macroname}{نام‌ماکرو} \setinterfacecommand{mainlanguage}{زبان‌اصلی} \setinterfacecommand{makeupheight}{ارتفاع‌آرایش} \setinterfacecommand{makeupwidth}{عرض‌آرایش} \setinterfacecommand{mar}{حاش} \setinterfacecommand{margindistance}{فاصله‌حاشیه} \setinterfacecommand{marginrule}{خط‌حاشیه} \setinterfacecommand{margintext}{متن‌حاشیه} \setinterfacecommand{margintitle}{عنوان‌حاشیه} \setinterfacecommand{marginwidth}{عرض‌حاشیه} \setinterfacecommand{marginword}{کلمه‌حاشیه} \setinterfacecommand{marking}{نشانه‌گذاری} \setinterfacecommand{markversion}{نسخه‌نشانه} \setinterfacecommand{mathematics}{ریاضی} \setinterfacecommand{menubutton}{دکمه‌منو} \setinterfacecommand{mframed}{mframed} \setinterfacecommand{midaligned}{تنظیم‌وسط} \setinterfacecommand{mirror}{آینه} \setinterfacecommand{month}{ماه} \setinterfacecommand{moveformula}{انتقال‌فرمول} \setinterfacecommand{moveongrid}{انتقال‌به‌توری} \setinterfacecommand{movesidefloat}{انتقال‌کنار‌شناور} \setinterfacecommand{navigating}{هدایت} \setinterfacecommand{nodimension}{بدون‌بعد} \setinterfacecommand{noheaderandfooterlines}{بدون‌خط‌سروته‌برگ} \setinterfacecommand{noindenting}{بدون‌تورفتگی} \setinterfacecommand{nolist}{بدون‌لیست} \setinterfacecommand{nomarking}{بدون‌نشانه‌گذاری} \setinterfacecommand{nomoreblocks}{بدون‌بلوکهای‌بیشتر} \setinterfacecommand{nomorefiles}{بدون‌فایلهای‌بیشتر} \setinterfacecommand{nop}{منفی} \setinterfacecommand{nospace}{بدون‌فضا} \setinterfacecommand{note}{یادداشت} \setinterfacecommand{notopandbottomlines}{بدون‌خط‌بالاوپایین} \setinterfacecommand{notsmallcapped}{سرپوش‌کوچک‌نه} \setinterfacecommand{nowhitespace}{بدون‌فضای‌سفید} \setinterfacecommand{numberofsubpages}{شماره‌زیرصفحه} \setinterfacecommand{numbers}{شماره‌ها} \setinterfacecommand{outeredgedistance}{فاصله‌لبه‌خارجی} \setinterfacecommand{outeredgewidth}{عرض‌لبه‌خارجی} \setinterfacecommand{outermargindistance}{فاصله‌حاشیه‌خارجی} \setinterfacecommand{outermarginwidth}{عرض‌حاشیه‌خارجی} \setinterfacecommand{packed}{فشرده} \setinterfacecommand{page}{صفحه} \setinterfacecommand{pagedepth}{عمق‌صفحه} \setinterfacecommand{pagenumber}{شماره‌صفحه} \setinterfacecommand{pageoffset}{آفست‌صفحه} \setinterfacecommand{pagereference}{مرجع‌صفحه} \setinterfacecommand{paperheight}{ارتفاع‌برگ} \setinterfacecommand{paperwidth}{عرض‌برگ} \setinterfacecommand{periods}{نقطه‌ها} \setinterfacecommand{plaatsruwelijst}{درج‌لیست‌خام} \setinterfacecommand{placebookmarks}{درج‌چوب‌خط} \setinterfacecommand{placecombinedlist}{درج‌لیست‌مختلط} \setinterfacecommand{placefloat}{درج‌شناور} \setinterfacecommand{placefootnotes}{درج‌پانوشتها} \setinterfacecommand{placeformula}{درج‌فرمول} \setinterfacecommand{placeheadnumber}{درج‌شماره‌سر} \setinterfacecommand{placeheadtext}{درج‌متن‌سر} \setinterfacecommand{placelegend}{درج‌راهنما} \setinterfacecommand{placelist}{درج‌لیست} \setinterfacecommand{placelocalfootnotes}{درج‌پانوشتهای‌موضعی} \setinterfacecommand{placelogos}{درج‌آرمها} \setinterfacecommand{placeongrid}{درج‌در‌توری} \setinterfacecommand{placeontopofeachother}{درج‌در‌بالای‌یکدیگر} \setinterfacecommand{placepagenumber}{درج‌شماره‌صفحه} \setinterfacecommand{placereferencelist}{درج‌لیست‌مرجع} \setinterfacecommand{placeregister}{درج‌ثبت} \setinterfacecommand{placerule}{درج‌خط} \setinterfacecommand{placesidebyside}{درج‌کنار‌به‌کنار} \setinterfacecommand{placesubformula}{درج‌زیرفرمول} \setinterfacecommand{placetextvariable}{درج‌متغیرمتن} \setinterfacecommand{position}{مکان} \setinterfacecommand{positiontext}{مکان‌متن} \setinterfacecommand{printpaperheight}{چاپ‌ارتفاع‌برگ} \setinterfacecommand{printpaperwidth}{چاپ‌عرض‌برگ} \setinterfacecommand{processblocks}{بلوکهای‌پردازش} \setinterfacecommand{processpage}{صفحه‌پردازش} \setinterfacecommand{product}{تولید} \setinterfacecommand{program}{برنامه} \setinterfacecommand{project}{پروژه} \setinterfacecommand{publication}{نشر} \setinterfacecommand{quotation}{نقل‌قول} \setinterfacecommand{quote}{نقل} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{انجام‌دوباره} \setinterfacecommand{ref}{رج} \setinterfacecommand{reference}{مرجع} \setinterfacecommand{referral}{رجوع} \setinterfacecommand{referraldate}{تاریخ‌رجوع} \setinterfacecommand{referring}{مراجعه} \setinterfacecommand{remark}{توجه} \setinterfacecommand{reset}{بازنشانی} \setinterfacecommand{resetmarking}{بازنشانی‌نشانه‌گذاری} \setinterfacecommand{resetnumber}{بازنشانی‌شماره} \setinterfacecommand{resettext}{بازنشانی‌متن} \setinterfacecommand{rightaligned}{تنظیم‌راست} \setinterfacecommand{rightedgedistance}{فاصله‌لبه‌راست} \setinterfacecommand{rightedgewidth}{عرض‌لبه‌راست} \setinterfacecommand{rightmargindistance}{فاصله‌حاشیه‌راست} \setinterfacecommand{rightmarginwidth}{عرض‌حاشیه‌راست} \setinterfacecommand{romannumerals}{اعدادلاتین} \setinterfacecommand{rotate}{دوران} \setinterfacecommand{scale}{مقیاس} \setinterfacecommand{screen}{پرده} \setinterfacecommand{selectblocks}{انتخاب‌بلوکها} \setinterfacecommand{selectpaper}{انتخاب‌برگ} \setinterfacecommand{selectversion}{انتخاب‌نسخه} \setinterfacecommand{setnumber}{تعیین‌شماره} \setinterfacecommand{settextcontent}{تعیین‌محتوای‌متن} \setinterfacecommand{settextvariable}{تعیین‌متغیر‌متن} \setinterfacecommand{setupalign}{بارگذاری‌تنظیم} \setinterfacecommand{setupanswerarea}{setupanswerarea} \setinterfacecommand{setuparranging}{بارگذاری‌ترتیب} \setinterfacecommand{setupbackground}{بارگذاری‌پس‌زمینه} \setinterfacecommand{setupbackgrounds}{بارگذاری‌پس‌زمینه‌ها} \setinterfacecommand{setupblackrules}{بارگذاری‌خطهای‌سیاه} \setinterfacecommand{setupblank}{بارگذاری‌خالی} \setinterfacecommand{setupblock}{بارگذاری‌بلوک} \setinterfacecommand{setupbodyfont}{بارگذاری‌قلم‌متن} \setinterfacecommand{setupbodyfontenvironment}{بارگذاری‌محیط‌قلم‌متن} \setinterfacecommand{setupbottom}{بارگذاری‌پایین} \setinterfacecommand{setupbottomtexts}{بارگذاری‌متن‌پایین} \setinterfacecommand{setupbuffer}{بارگذاری‌بافر} \setinterfacecommand{setupbuttons}{بارگذاری‌دکمه‌ها} \setinterfacecommand{setupcapitals}{setupcapitals} \setinterfacecommand{setupcaption}{بارگذاری‌شرح} \setinterfacecommand{setupcaptions}{بارگذاری‌شرحها} \setinterfacecommand{setupclipping}{بارگذاری‌چیدن} \setinterfacecommand{setupcolor}{بارگذاری‌رنگ} \setinterfacecommand{setupcolors}{بارگذاری‌رنگها} \setinterfacecommand{setupcolumns}{بارگذاری‌ستونها} \setinterfacecommand{setupcolumnset}{بارگذاری‌مجموعه‌ستون} \setinterfacecommand{setupcolumnsetlines}{بارگذاری‌خطهای‌مجموعه‌ستون} \setinterfacecommand{setupcolumnsetstart}{بارگذاری‌شروع‌مجموعه‌ستون} \setinterfacecommand{setupcombinations}{بارگذاری‌ترکیب‌ها} \setinterfacecommand{setupcombinedlist}{بارگذاری‌لیست‌ترکیبی} \setinterfacecommand{setupcomment}{بارگذاری‌توضیح} \setinterfacecommand{setupdescriptions}{بارگذاری‌شرح} \setinterfacecommand{setupenumerations}{بارگذاری‌شماره‌گذاریها} \setinterfacecommand{setupexternalfigures}{بارگذاری‌شکلهای‌خارجی} \setinterfacecommand{setupfield}{بارگذاری‌میدان} \setinterfacecommand{setupfields}{بارگذاری‌میدانها} \setinterfacecommand{setupfillinlines}{بارگذاری‌پرکردن‌خطها} \setinterfacecommand{setupfillinrules}{بارگذاری‌درج‌درخطها} \setinterfacecommand{setupfloat}{بارگذاری‌شناور} \setinterfacecommand{setupfloats}{بارگذاری‌شناورها} \setinterfacecommand{setupfloatsplitting}{بارگذاری‌شکافتن‌شناورها} \setinterfacecommand{setupfooter}{بارگذاری‌ته‌برگ} \setinterfacecommand{setupfootertexts}{بارگذاری‌متن‌پانوشت} \setinterfacecommand{setupfootnotedefinition}{بارگذاری‌تعریف‌پانوشت} \setinterfacecommand{setupfootnotes}{بارگذاری‌پانوشتها} \setinterfacecommand{setupforms}{بارگذاری‌طرح} \setinterfacecommand{setupformulas}{بارگذاری‌فرمولها} \setinterfacecommand{setupframed}{بارگذاری‌قالبی} \setinterfacecommand{setupframedtexts}{بارگذاری‌متن‌قالبی} \setinterfacecommand{setuphead}{بارگذاری‌سر} \setinterfacecommand{setupheader}{بارگذاری‌سربرگ} \setinterfacecommand{setupheadertexts}{بارگذاری‌متن‌سربرگ} \setinterfacecommand{setupheadnumber}{بارگذاری‌شماره‌سر} \setinterfacecommand{setupheads}{بارگذاری‌سرها} \setinterfacecommand{setupheadtext}{بارگذاری‌متن‌سر} \setinterfacecommand{setuphyphenmark}{بارگذاری‌نشانه‌شکستن} \setinterfacecommand{setupindentedtext}{setupindentedtext} \setinterfacecommand{setupindenting}{بارگذاری‌تورفتگی} \setinterfacecommand{setupinmargin}{بارگذاری‌درون‌حاشیه} \setinterfacecommand{setupinteraction}{بارگذاری‌پانل} \setinterfacecommand{setupinteractionbar}{بارگذاری‌میله‌پانل} \setinterfacecommand{setupinteractionmenu}{بارگذاری‌منوی‌پانل} \setinterfacecommand{setupinteractionscreen}{بارگذاری‌پرده‌پانل} \setinterfacecommand{setupinterlinespace}{بارگذاری‌فاصله‌بین‌خط} \setinterfacecommand{setupitemgroup}{بارگذاری‌گروه‌آیتم} \setinterfacecommand{setupitemgroups}{بارگذاری‌گروههای‌آیتم} \setinterfacecommand{setupitems}{بارگذاری‌آیتمها} \setinterfacecommand{setuplabeltext}{باگذاری‌متن‌برچسب} \setinterfacecommand{setuplanguage}{بارگذاری‌زبان} \setinterfacecommand{setuplayout}{بارگذاری‌طرح‌بندی} \setinterfacecommand{setuplegend}{بارگذاری‌راهنما} \setinterfacecommand{setuplinenumbering}{بارگذاری‌شماره‌‌گذاری‌خط} \setinterfacecommand{setuplines}{بارگذاری‌خطها} \setinterfacecommand{setuplinewidth}{بارگذاری‌عرض‌خط} \setinterfacecommand{setuplist}{بارگذاری‌لیست} \setinterfacecommand{setupmakeup}{بارگذاری‌آرایش} \setinterfacecommand{setupmarginblocks}{بارگذاری‌بلوکهای‌حاشیه} \setinterfacecommand{setupmarginrules}{بارگذاری‌خطهای‌حاشیه} \setinterfacecommand{setupmarking}{بارگذاری‌نشانه‌گذاری} \setinterfacecommand{setupmathalignment}{بارگذاری‌تنظیم‌ریاضی} \setinterfacecommand{setupnarrower}{بارگذاری‌باریکتر} \setinterfacecommand{setupnumber}{بارگذاری‌شماره} \setinterfacecommand{setupnumbering}{بارگذاری‌شماره‌گذاری} \setinterfacecommand{setupoppositeplacing}{بارگذاری‌درج‌مخالف} \setinterfacecommand{setupoutput}{بارگذاری‌خروجی} \setinterfacecommand{setuppagecomment}{بارگذاری‌توضیح‌صفحه} \setinterfacecommand{setuppagenumber}{بارگذاری‌شماره‌صفحه} \setinterfacecommand{setuppagenumbering}{بارگذاری‌شماره‌گذاری‌صفحه} \setinterfacecommand{setuppagetransitions}{بارگذاری‌گذارصفحه} \setinterfacecommand{setuppalet}{بارگذاری‌لوح} \setinterfacecommand{setuppaper}{بارگذاری‌برگ} \setinterfacecommand{setuppapersize}{بارگذاری‌اندازه‌برگ} \setinterfacecommand{setupparagraphnumbering}{بارگذاری‌شماره‌گذاری‌پاراگراف} \setinterfacecommand{setupparagraphs}{بارگذاری‌پاراگرافها} \setinterfacecommand{setupplacement}{بارگذاری‌جانشانی} \setinterfacecommand{setuppositioning}{بارگذاری‌مکان‌گذاری} \setinterfacecommand{setupprofiles}{بارگذاری‌پروفایلها} \setinterfacecommand{setupprograms}{بارگذاری‌برنامه‌ها} \setinterfacecommand{setuppublications}{بارگذاری‌نشرها} \setinterfacecommand{setupquote}{بارگذاری‌نقل} \setinterfacecommand{setupreferencelist}{بارگذاری‌لیست‌مرجع} \setinterfacecommand{setupreferencing}{بارگذاری‌ارجاع} \setinterfacecommand{setupregister}{بارگذاری‌ثبت} \setinterfacecommand{setuprotate}{بارگذاری‌دوران} \setinterfacecommand{setuprule}{بارگذاری‌خط} \setinterfacecommand{setups}{بارگذاریها} \setinterfacecommand{setupscreens}{بارگذاری‌پرده‌ها} \setinterfacecommand{setupsection}{بارگذاری‌بخش} \setinterfacecommand{setupsectionblock}{بارگذاری‌بلوک‌بخش} \setinterfacecommand{setupsorting}{بارگذاری‌ترتیب} \setinterfacecommand{setupspacing}{بارگذاری‌فضا‌گذاری} \setinterfacecommand{setupstartstop}{بارگذاری‌شروع‌پایان} \setinterfacecommand{setupstrut}{بارگذاری‌بست} \setinterfacecommand{setupsubpagenumber}{بارگذاری‌شماره‌زیرصفحه} \setinterfacecommand{setupsymbolset}{بارگذاری‌مجموعه‌نماد} \setinterfacecommand{setupsynchronization}{بارگذاری‌تطابق} \setinterfacecommand{setupsynchronizationbar}{بارگذاری‌میله‌تطابق} \setinterfacecommand{setupsynonyms}{بارگذاری‌مترادفها} \setinterfacecommand{setupsystem}{بارگذاری‌سیستم} \setinterfacecommand{setuptab}{بارگذاری‌تب} \setinterfacecommand{setuptables}{بارگذاری‌جدولها} \setinterfacecommand{setuptabulate}{بارگذاری‌جدول‌بندی} \setinterfacecommand{setuptext}{بارگذاری‌متن} \setinterfacecommand{setuptextposition}{بارگذاری‌مکان‌متن} \setinterfacecommand{setuptextrules}{بارگذاری‌خطهای‌متن} \setinterfacecommand{setuptexttexts}{بارگذاری‌متن‌متنها} \setinterfacecommand{setuptextvariable}{بارگذاری‌متغیر‌متن} \setinterfacecommand{setupthinrules}{بارگذاری‌خطها‌ی‌نازک} \setinterfacecommand{setuptolerance}{بارگذاری‌بردباری} \setinterfacecommand{setuptop}{بارگذاری‌بالا} \setinterfacecommand{setuptoptexts}{بارگذاری‌متنهای‌بالا} \setinterfacecommand{setuptype}{بارگذاری‌تایپ} \setinterfacecommand{setuptyping}{بارگذاری‌تایپ‌کردن} \setinterfacecommand{setupunderbar}{بارگذاری‌میله‌زیر} \setinterfacecommand{setupurl}{setupurl} \setinterfacecommand{setupversions}{بارگذاری‌نسخه‌ها} \setinterfacecommand{setupwhitespace}{بارگذاری‌فضای‌سفید} \setinterfacecommand{showbodyfont}{نمایش‌قلم‌بدنه} \setinterfacecommand{showbodyfontenvironment}{نمایش‌محیط‌قلم‌بدنه} \setinterfacecommand{showcolor}{نمایش‌رنگ} \setinterfacecommand{showcolorgroup}{نمایش‌گروه‌رنگ} \setinterfacecommand{showexternalfigures}{نمایش‌شکلهای‌خارجی} \setinterfacecommand{showfields}{نمایش‌میدانها} \setinterfacecommand{showframe}{نمایش‌قالب} \setinterfacecommand{showgrid}{نمایش‌توری} \setinterfacecommand{showlayout}{نمایش‌طرح‌بندی} \setinterfacecommand{showmakeup}{نمایش‌آرایش} \setinterfacecommand{showpalet}{نمایش‌لوح} \setinterfacecommand{showprint}{نمایش‌چاپ} \setinterfacecommand{showsetups}{نمایش‌بارگذاریها} \setinterfacecommand{showstruts}{نمایش‌بستها} \setinterfacecommand{showsymbolset}{نمایش‌مجموعه‌علامت} \setinterfacecommand{smallcapped}{cap} \setinterfacecommand{someline}{یک‌خط} \setinterfacecommand{somewhere}{یک‌جا} \setinterfacecommand{space}{فضا} \setinterfacecommand{splitfloat}{شکافتن‌شناور} \setinterfacecommand{startalignment}{شروع‌تنظیم} \setinterfacecommand{startbackground}{شروع‌پس‌زمینه} \setinterfacecommand{startcoding}{شروع‌کد} \setinterfacecommand{startcolor}{شروع‌رنگ} \setinterfacecommand{startcolumnmakeup}{شروع‌آرایش‌ستون} \setinterfacecommand{startcolumns}{شروع‌ستونها} \setinterfacecommand{startcolumnset}{شروع‌مجموعه‌ستون} \setinterfacecommand{startcombination}{شروع‌ترکیب} \setinterfacecommand{startcomponent}{شروع‌مولفه} \setinterfacecommand{startdocument}{شروع‌نوشتار} \setinterfacecommand{startenvironment}{شروع‌محیط} \setinterfacecommand{startfigure}{شروع‌شکل} \setinterfacecommand{startglobal}{شروع‌سراسری} \setinterfacecommand{startline}{شروع‌خط} \setinterfacecommand{startlinecorrection}{شروع‌تصحیح‌خط} \setinterfacecommand{startlinenumbering}{شروع‌شماره‌گذاری‌خط} \setinterfacecommand{startlines}{شروع‌خطها} \setinterfacecommand{startlocal}{شروع‌موضعی} \setinterfacecommand{startlocalfootnotes}{شروع‌پانوشتهای‌موضعی} \setinterfacecommand{startmakeup}{شروع‌آرایش} \setinterfacecommand{startmarginblock}{شروع‌بلوک‌حاشیه} \setinterfacecommand{startmarginrule}{شروع‌خط‌حاشیه} \setinterfacecommand{startnarrower}{شروع‌باریکتر} \setinterfacecommand{startopposite}{شروع‌مخالف} \setinterfacecommand{startoverlay}{شروع‌پوشش} \setinterfacecommand{startoverzicht}{شروع‌بازبینی} \setinterfacecommand{startpacked}{شروع‌فشرده} \setinterfacecommand{startpositioning}{شروع‌مکان‌گذاری} \setinterfacecommand{startproduct}{شروع‌تولید} \setinterfacecommand{startprofile}{شروع‌پروفایل} \setinterfacecommand{startproject}{شروع‌پروژه} \setinterfacecommand{startquotation}{شروع‌نقل‌قول} \setinterfacecommand{startraster}{startraster} \setinterfacecommand{startsymbolset}{شروع‌مجموعه‌نماد} \setinterfacecommand{startsynchronization}{شروع‌تطابق} \setinterfacecommand{starttable}{شروع‌جدول} \setinterfacecommand{starttables}{شروع‌جدولها} \setinterfacecommand{starttext}{شروع‌متن} \setinterfacecommand{starttextrule}{شروع‌خط‌متن} \setinterfacecommand{startunpacked}{شروع‌غیر‌فشرده} \setinterfacecommand{startversion}{شروع‌نسخه} \setinterfacecommand{stopalignment}{پایان‌تنظیم} \setinterfacecommand{stopbackground}{پایان‌پس‌زمینه} \setinterfacecommand{stopcoding}{پایان‌کد} \setinterfacecommand{stopcolor}{پایان‌رنگ} \setinterfacecommand{stopcolumnmakeup}{پایان‌آرایش‌ستون} \setinterfacecommand{stopcolumns}{پایان‌ستونها} \setinterfacecommand{stopcolumnset}{پایان‌مجموعه‌ستون} \setinterfacecommand{stopcombination}{پایان‌ترکیب} \setinterfacecommand{stopcomponent}{پایان‌مولفه} \setinterfacecommand{stopdocument}{پایان‌نوشتار} \setinterfacecommand{stopenvironment}{پایان‌محیط} \setinterfacecommand{stopglobal}{پایان‌سراسری} \setinterfacecommand{stopline}{پایان‌خط} \setinterfacecommand{stoplinecorrection}{پایان‌تصحیح‌خط} \setinterfacecommand{stoplinenumbering}{پایان‌شماره‌گذاری‌خط} \setinterfacecommand{stoplines}{پایان‌خطها} \setinterfacecommand{stoplocal}{پایان‌موضعی} \setinterfacecommand{stoplocalfootnotes}{پایان‌پانوشتهای‌موضعی} \setinterfacecommand{stopmakeup}{پایان‌آرایش} \setinterfacecommand{stopmarginblock}{پایان‌بلوک‌حاشیه} \setinterfacecommand{stopmarginrule}{پایان‌خط‌حاشیه} \setinterfacecommand{stopnarrower}{پایان‌نازکتر} \setinterfacecommand{stopopposite}{پایان‌مخالف} \setinterfacecommand{stopoverlay}{پایان‌پوشش} \setinterfacecommand{stopoverzicht}{پایان‌بازبینی} \setinterfacecommand{stoppacked}{پایان‌فشرده} \setinterfacecommand{stoppositioning}{پایان‌مکان‌گذاری} \setinterfacecommand{stopproduct}{پایان‌تولید} \setinterfacecommand{stopprofile}{پایان‌پروفایل} \setinterfacecommand{stopproject}{پایان‌پروژه} \setinterfacecommand{stopquotation}{پایان‌نقل‌قول} \setinterfacecommand{stopraster}{stopraster} \setinterfacecommand{stopsynchronization}{پایان‌تطابق} \setinterfacecommand{stoptable}{پایان‌جدول} \setinterfacecommand{stoptables}{پایان‌جدولها} \setinterfacecommand{stoptext}{پایان‌متن} \setinterfacecommand{stoptextrule}{پایان‌خط‌متن} \setinterfacecommand{stopunpacked}{پایان‌غیرفشرده} \setinterfacecommand{stopversion}{پایان‌نسخه} \setinterfacecommand{stretched}{کشیده} \setinterfacecommand{subformulanumber}{شماره‌زیرفرمول} \setinterfacecommand{subpagenumber}{شماره‌زیرصفحه} \setinterfacecommand{switchtobodyfont}{تغییربه‌قلم‌بدنه} \setinterfacecommand{switchtorawfont}{تغییربه‌قلم‌خام} \setinterfacecommand{sym}{نم} \setinterfacecommand{symbol}{نماد} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{میله‌تطابق} \setinterfacecommand{synchronize}{تطابق} \setinterfacecommand{tab}{تب} \setinterfacecommand{testcolumn}{ستون‌امتحان} \setinterfacecommand{testpage}{صفحه‌تست} \setinterfacecommand{tex}{تک} \setinterfacecommand{textheight}{ارتفاع‌متن} \setinterfacecommand{textreference}{مرجع‌متن} \setinterfacecommand{textrule}{خط‌متن} \setinterfacecommand{textvariable}{متغیر متن} \setinterfacecommand{textwidth}{عرض‌متن} \setinterfacecommand{thinrule}{خط‌نازک} \setinterfacecommand{thinrules}{خطهای‌نازک} \setinterfacecommand{tooltip}{tooltip} \setinterfacecommand{topdistance}{فاصله‌بالا} \setinterfacecommand{topheight}{ارتفاع‌بالا} \setinterfacecommand{topspace}{فضای‌بالا} \setinterfacecommand{totalnumberofpages}{شماره‌کل‌صفحه‌ها} \setinterfacecommand{translate}{ترجمه} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{typ} \setinterfacecommand{type}{تایپ} \setinterfacecommand{typebuffer}{تایپ‌بافر} \setinterfacecommand{typefile}{تایپ‌پرونده} \setinterfacecommand{unitmeaning}{معنی‌واحد} \setinterfacecommand{unknown}{ناشناس} \setinterfacecommand{useJSscripts}{useJSscripts} \setinterfacecommand{useURL}{useURL} \setinterfacecommand{useXMLfilter}{useXMLfilter} \setinterfacecommand{useblocks}{استفاده‌بلوکها} \setinterfacecommand{usecommands}{استفاده‌فرمانها} \setinterfacecommand{useencoding}{استفاده‌رمزینه} \setinterfacecommand{useexternaldocument}{استفاده‌نوشتارخارجی} \setinterfacecommand{useexternalfigure}{استفاده‌شکل‌خارجی} \setinterfacecommand{useexternalfile}{استفاده‌پرونده‌خارجی} \setinterfacecommand{useexternalfiles}{استفاده‌پرونده‌های‌خارجی} \setinterfacecommand{useexternalsoundtrack}{استفاده‌قطعه‌موزیک‌خارجی} \setinterfacecommand{usemodule}{استفاده‌مدول} \setinterfacecommand{usemodules}{استفاده‌مدولها} \setinterfacecommand{usepath}{استفاده‌مسیر} \setinterfacecommand{usereferences}{استفاده‌مرجعها} \setinterfacecommand{usespecials}{استفاده‌ویژگیها} \setinterfacecommand{usesymbols}{استفاده‌نمادها} \setinterfacecommand{usetypescript}{استفاده‌دستخط‌تایپ} \setinterfacecommand{usetypescriptfile}{استفاده‌پرونده‌دستخط‌تایپ} \setinterfacecommand{useurl}{useurl} \setinterfacecommand{version}{نسخه} \setinterfacecommand{vl}{خ‌ع} \setinterfacecommand{weekday}{روزهفته} \setinterfacecommand{whitespace}{فضای‌سفید} \setinterfacecommand{wordright}{کلمه‌راست} \setinterfacecommand{writebetweenlist}{بنویس‌بین‌لیست} \setinterfacecommand{writetolist}{بنویس‌در‌لیست} \setinterfacecommand{writetoreferencelist}{بنویس‌درلیست‌مرجع} \setinterfacecommand{writetoregister}{بنویس‌درثبت} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/attr-ini.mkiv0000644000175000017500000001137612130411274024313 0ustar norbertnorbert%D \module %D [ file=attr-ini, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Attribute Macros / Initialization} %D Although it's still somewhat experimental, here we introduce code %D related to attributes. Housekeeping will move completely to \LUA\ %D and \type {\newattribute} will go away. \unprotect \registerctxluafile{attr-ini}{1.001} \installcorenamespace{attributecount} % the counter representing the attribute (attrdef'd) \installcorenamespace{attributeid} % the internal number \installcorenamespace{attributestack} % the attribute specific stack \unexpanded\def\pushattribute#1% {\global\advance\csname\??attributestack\string#1\endcsname\plusone \expandafter\xdef\csname\??attributestack\string#1:\number\csname\??attributestack\string#1\endcsname\endcsname{\number\attribute#1}} \unexpanded\def\popattribute#1% {\attribute#1\csname\??attributestack\string#1:\number\csname\??attributestack\string#1\endcsname\endcsname\relax \global\advance\csname\??attributestack\string#1\endcsname\minusone} \unexpanded\def\installattributestack#1% {\ifcsname\??attributestack\string#1\endcsname \else \expandafter\newcount\csname\??attributestack\string#1\endcsname \fi} \newtoks \attributesresetlist \ifdefined \s!global \else \def\s!global{global} \fi % for metatex % or hard check later \ifdefined \s!public \else \def\s!public{public} \fi % for metatex % or hard check later \unexpanded\def\defineattribute {\dodoubleempty\attr_basics_define} \def\attr_basics_define[#1][#2]% alternatively we can let lua do the housekeeping {\expandafter\newattribute\csname\??attributecount#1\endcsname \expandafter\newconstant \csname\??attributeid#1\endcsname \csname\??attributeid#1\endcsname\c_syst_last_allocated_attribute \ctxcommand{defineattribute("#1",\number\c_syst_last_allocated_attribute)}% \doifnotinset\s!global{#2}{\appendetoks\csname\??attributecount#1\endcsname\attributeunsetvalue\to\attributesresetlist}% \doifinset \s!public{#2}{\expandafter\let\csname#1attribute\expandafter\endcsname\csname\??attributeid#1\endcsname}} \unexpanded\def\definesystemattribute {\dodoubleempty\attr_basics_define_system} \def\attr_basics_define_system[#1][#2]% alternatively we can let lua do the housekeeping {\scratchcounter\ctxcommand{getprivateattribute("#1")}\relax \expandafter\attributedef\csname\??attributecount#1\endcsname\scratchcounter \expandafter\newconstant \csname\??attributeid#1\endcsname \csname\??attributeid#1\endcsname\scratchcounter %\writestatus\m!system{defining system attribute #1 with number \number\scratchcounter}% \doifnotinset\s!global{#2}{\appendetoks\csname\??attributecount#1\endcsname\attributeunsetvalue\to\attributesresetlist}% \doifinset \s!public{#2}{\expandafter\let\csname#1attribute\expandafter\endcsname\csname\??attributeid#1\endcsname}} % expandable so we can \edef them for speed \def\dosetattribute#1#2{\csname\??attributecount#1\endcsname#2\relax} \def\doresetattribute#1{\csname\??attributecount#1\endcsname\attributeunsetvalue} \def\dogetattribute #1{\number\csname\??attributecount#1\endcsname} \def\dogetattributeid#1{\number\csname\??attributeid#1\endcsname} \let\dompattribute\gobbletwoarguments \unexpanded\def\resetallattributes{\the\attributesresetlist} %D Rather special. \unexpanded\def\savecurrentattributes #1{\ctxcommand{savecurrentattributes ("#1")}} \unexpanded\def\restorecurrentattributes#1{\ctxcommand{restorecurrentattributes("#1")}} %D For the moment we put this here (later it will move to where it's used): \definesystemattribute [state] \definesystemattribute [color] [public] \definesystemattribute [colormodel] [public,global] \definesystemattribute [skip] \definesystemattribute [penalty] \definesystemattribute [transparency] [public] \definesystemattribute [background] [public] \definesystemattribute [alignbackground] [public] \definesystemattribute [colorintent] [public] \definesystemattribute [negative] [public] \definesystemattribute [effect] [public] \definesystemattribute [viewerlayer] [public] \definesystemattribute [layoutcomponent] [public] \definesystemattribute [reference] [public] \definesystemattribute [destination] [public] \definesystemattribute [internal] [public] \definesystemattribute [ruled] [public] \definesystemattribute [shifted] [public] \unexpanded\def\showattributes{\ctxcommand{showattributes()}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-08.tex0000644000175000017500000001650511754241457023707 0ustar norbertnorbert%D \module %D [ file=s-pre-08, %D version=1999.09.01, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 8, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is one of the 6 styles made for the \NTS\ presentation %D at \EUROTEX\ 1999. The idea was to demonstrate a couple of %D nasty things that one can do with \PDFTEX, being an example %D of an extension. Afterwards it was provded that this could %D also be done using traditional \TEX. %D %D This version is nearly the same as the original, although %D since then the \METAPOST\ related macro have become more %D smooth. The original used a couple of boxes, skipt and %D fills, while this version uses the layer mechanism that %D came available in fall 2000. This style is actually more a %D demonstration gimmick than a real useful one. %D You may want to turn on layer tracing: %D %D \starttyping %D \tracelayerstrue %D \stoptyping \setuppapersize [S6][S6] \setupbodyfont [pos,10pt] %D We use the whole page and have no margins. \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] \setupcolors [state=start] \definecolor[TextColor][s=.9] \definecolor[PageColor][r=.5,g=.4,b=.3] \definecolor[LineColor][r=.7,g=.6,b=.5] \definecolor[ColorPage][r=.5,g=.6,b=.7] \definecolor[ColorLine][r=.3,g=.4,b=.5] \setupinteraction [state=start, display=new] \setupinteractionscreen [option=max] %D The page, sample text and pagenumber will have a background %D graphic. \defineoverlay [page] [\uniqueMPgraphic{page}] \defineoverlay [graphic] [\uniqueMPgraphic{graphic}] \defineoverlay [number] [\uniqueMPgraphic{number}] %D Each element will also be a button. \defineoverlay [nextpage] [\overlaybutton{nextpage}] \defineoverlay [previouspage] [\overlaybutton{previouspage}] \defineoverlay [forward] [\overlaybutton{forward}] %D We are going to put all three elements on a layer. \definelayer [main] \defineoverlay [main] [\composedlayer{main}] %D The page backgrounds are as follows: \setupbackgrounds [page] [background={previouspage,page}] %D We could have put the main layer on the page overlay, but %D the next solution makes us independent of the back and top %D margins. The \type {idea} layer is for user purposes. \setupbackgrounds [text] [background={main,idea}] %D The page number, sample text and explanation all have %D associated framed texts. The two overlays \type {sample} %D and \type {text} and there for special (user) purposes. \defineframedtext [PageText] [width=fit,offset=.5cm, before=,after=,frame=off,background={number,forward}] \defineframedtext [SampleText] [width=.6\makeupwidth,height=fit,offset=2cm,align=middle, before=,after=,frame=off,background={graphic,sample,nextpage}] \defineframedtext [TextText] [width=.6\makeupwidth,height=fit,offset=2cm,align=middle, before=,after=,frame=off,background={text,nextpage}] %D Nothing goes on the page directly, since we use layers. The %D \type {\null} command makes sure that at least something is %D on the page so that the page is flushed. Here we also take %D care of placing the page number. \def\StartIdea {\null \dontcomplain} \def\StopIdea {\setlayer [main] [x=\makeupwidth,y=.5cm,hoffset=-.5cm,location=lb] {\PageText{\pagenumber}} \page} %D Both texts get their position registered. \def\StartSample {\setlayer [main] [hoffset=.75cm,voffset=.75cm] \bgroup \hpos {SampText:\realfolio} \bgroup \startSampleText [none]} \def\StopSample {\stopSampleText \egroup \egroup} %D Here the position of the sample text and explanationary %D text are passed on to the graphic that concerns the latter. % use setlayertext instead \def\StartText {\setMPpositiongraphic {TextText:\realfolio}{text}{other=SampText:\realfolio} \setlayer [main] [x=\makeupwidth,y=\makeupheight, hoffset=-.75cm,voffset=-.75cm, location=lt] \bgroup \noindent \hpos {TextText:\realfolio} \bgroup \startTextText [none]} \def\StopText {\stopTextText \egroup \egroup} %D The graphics that encircle the two texts are related to %D their position. This is because when they overlay, a shine %D through is shown. This only shows up when there is enough %D text to make them overlap. \startuniqueMPgraphic{page} StartPage ; pickup pencircle scaled .5cm ; fill Page withcolor \MPcolor{PageColor} ; draw Page withcolor \MPcolor{LineColor} ; StopPage ; \stopuniqueMPgraphic \startuniqueMPgraphic{number} path p ; p := fullcircle xscaled OverlayWidth yscaled OverlayHeight; pickup pencircle scaled .25cm ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor (white-\MPcolor{PageColor}) ; \stopuniqueMPgraphic \startuniqueMPgraphic{graphic} path p ; p := fullcircle xscaled OverlayWidth yscaled OverlayHeight; pickup pencircle scaled .5cm ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor \MPcolor{LineColor} ; \stopuniqueMPgraphic %D This graphic is calculated when a position is flushed that %D has this graphics as attached. The \type {self} reference %D is provided by \CONTEXT\ itself. \startMPpositiongraphic{text} initialize_box(\MPpos{\MPvar{other}}) ; path p ; p := fullcircle xscaled wxy yscaled hxy shifted cxy ; initialize_box(\MPpos{\MPvar{self}}) ; path q ; q := fullcircle xscaled wxy yscaled hxy shifted cxy ; pickup pencircle scaled .5cm ; fill q withcolor \MPcolor{TextColor} ; draw p withcolor (white-\MPcolor{PageColor}) ; clip currentpicture to q ; draw q withcolor \MPcolor{LineColor} ; anchor_box(\MPanchor{\MPvar{self}}) ; \stopMPpositiongraphic %D In order to be complete, we also define a title page. %D Here suddenly the text background shows up. \def\StartTitlePage {\startstandardmakeup \dontcomplain \setupframedtexts[TextText][width=fit] \StartText \bfd\setupinterlinespace \def\\{\blank\bfc\setupinterlinespace\def\\{\blank}}} \def\StopTitlePage {\StopText \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D For this purpose, we redefine the position graphic to %D handle a text only case: \startMPpositiongraphic{text} if box_found(\MPpos{\MPvar{other}}) : initialize_box(\MPpos{\MPvar{other}}) ; path p ; p := fullcircle xscaled wxy yscaled hxy shifted cxy ; fi ; initialize_box(\MPpos{\MPvar{self}}) ; path q ; q := fullcircle xscaled wxy yscaled hxy shifted cxy ; pickup pencircle scaled .5cm ; fill q withcolor \MPcolor{TextColor} ; if box_found(\MPpos{\MPvar{other}}) : draw p withcolor (white-\MPcolor{PageColor}) ; clip currentpicture to q ; draw q withcolor \MPcolor{LineColor} ; else : draw q withcolor (white-\MPcolor{PageColor}) ; fi ; anchor_box(\MPanchor{\MPvar{self}}) ; % setbounds currentpicture to boundingbox origin ; \stopMPpositiongraphic \doifnotmode{demo}{\endinput} \starttext \TitlePage {Fancy Styles:\\layers} \StartIdea \StartSample \input tufte \StopSample \StartText \input reich \StopText \StopIdea \StartIdea \StartSample \input knuth \StopSample \StartText \input reich \StopText \StopIdea \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/m-chart.mkvi0000644000175000017500000004421412130411274024114 0ustar norbertnorbert%D \module %D [ file=m-chart, %D version=2011.10.1, % 1998.10.10, %D title=\CONTEXT\ Modules, %D subtitle=Flow Charts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo (if used): % flowsets % autoscaling (bodyfontsteps) % comment % overlay % % todo: % \useFLOWchart[name][parent][setting,setting][additional settings] % \useFLOWchart[name][parent][additional settings] % setups % mp instance with less files \registerctxluafile{m-chart}{} \unprotect % todo: figure out a nice way to define the lot: share current and % support current as name (nb: we need to set parent then) \installcorenamespace {flowchart} % \def\??flch{@@flch} % chart \installcorenamespace {flowline} % \def\??flln{@@flln} % line \installcorenamespace {flowshape} % \def\??flsh{@@flsh} % shape \installcorenamespace {flowfocus} % \def\??flfc{@@flfc} % focus \installcorenamespace {flowsets} % \def\??flst{@@flst} % sets \installcorenamespace {flowsplit} % \def\??flsp{@@flsp} % split \installsimplecommandhandler \??flowchart {FLOWchart} \??flowchart % maybe just a setuphandler \installsimplecommandhandler \??flowline {FLOWline} \??flowline % maybe just a setuphandler \installsimplecommandhandler \??flowshape {FLOWshape} \??flowshape % maybe just a setuphandler \installsimplecommandhandler \??flowfocus {FLOWfocus} \??flowfocus % maybe just a setuphandler \installsimplecommandhandler \??flowsets {FLOWsets} \??flowsets % maybe just a setuphandler \installsimplecommandhandler \??flowsplit {FLOWsplit} \??flowsplit % maybe just a setuphandler \let\setupFLOWcharts\setupFLOWchart \let\setupFLOWlines \setupFLOWline \let\setupFLOWshapes\setupFLOWshape \let\setupFLOWsets \setupFLOWset \setupFLOWcharts [\c!width=12\bodyfontsize, \c!height=7\bodyfontsize, \c!offset=\FLOWlineparameter\c!rulethickness, \c!dx=2\bodyfontsize, \c!dy=2\bodyfontsize, \c!nx=0, \c!ny=0, \c!x=1, \c!y=1, \c!labeloffset=.5\bodyfontsize, \c!commentoffset=.5\bodyfontsize, \c!exitoffset=\zeropoint, % \c!split=\v!no, % \c!maxwidth=, % \c!maxheight=, % \c!option=, % \c!bodyfont=, % \c!dot=, % private option % \c!autofocus=, % \c!focus=, % \c!background=, % \c!framecolor= % \c!backgroundcolor=, % \s!white \c!rulethickness=.15\bodyfontsize, %\linewidth, \c!frame=\v!off] \setupFLOWlines [\c!corner=\v!round, \c!arrow=\v!yes, \c!dash=\v!no, \c!radius=.375\bodyfontsize, \c!color=FLOWlinecolor, \c!rulethickness=.15\bodyfontsize, \c!offset=\zeropoint] \setupFLOWshapes [\c!default=action, \c!framecolor=FLOWframecolor, \c!background=\v!color, \c!backgroundcolor=FLOWbackgroundcolor, \c!rulethickness=.15\bodyfontsize, \c!offset=.5\bodyfontsize] \setupFLOWfocus [\c!framecolor=FLOWfocuscolor, \c!background=\FLOWshapeparameter\c!background, \c!backgroundcolor=\FLOWshapeparameter\c!backgroundcolor, \c!backgroundscreen=\FLOWshapeparameter\c!backgroundscreen, \c!rulethickness=\FLOWshapeparameter\c!rulethickness, \c!offset=\FLOWshapeparameter\c!offset] \setupFLOWsplit [\c!dx=0, \c!dy=0, % \c!command=, % \c!before=, % \c!after=, \c!nx=3, \c!ny=4] \unexpanded\def\beforeFLOWsplit{\FLOWsplitparameter\c!before} \unexpanded\def\afterFLOWsplit {\FLOWsplitparameter\c!after} \unexpanded\def\handleFLOWsplit{\FLOWsplitparameter\c!command} \definecolor [FLOWfocuscolor] [s=.2] \definecolor [FLOWlinecolor] [s=.5] \definecolor [FLOWframecolor] [s=.7] \definecolor [FLOWbackgroundcolor] [s=.9] \newtoks\everyFLOWchart \unexpanded\def\module_charts_process[#name]% {\ctxcommand{flow_start_chart("#name")}} \unexpanded\def\startFLOWchart {\startnointerference \the\everyFLOWchart \dosingleempty\module_charts_start_chart} \unexpanded\def\module_charts_start_chart[#name]% {\ctxcommand{flow_start_chart("#name")}} \unexpanded\def\stopFLOWchart {\ctxcommand{flow_stop_chart()}% \stopnointerference} \unexpanded\def\defineFLOWchart % for old times sake {\dodoubleempty\module_charts_FLOW_define} \unexpanded\def\module_charts_FLOW_define[#name][#settings]#cells% todo: save settings {\startnointerference \the\everyFLOWchart \ctxcommand{flow_start_chart("#name")}% #cells% \ctxcommand{flow_stop_chart()}% \stopnointerference} \unexpanded\def\startFLOWcell {\dodoubleempty\module_charts_start_cell} \unexpanded\def\module_charts_start_cell[#1][#2]% {\begingroup \iffirstargument \setupFLOWshape[#1]% \fi \ifsecondargument \setupFLOWline[#2]% \fi \ctxcommand{flow_start_cell { shape = { rulethickness = \number\dimexpr\FLOWshapeparameter\c!rulethickness, default = "\FLOWshapeparameter\c!default", framecolor = "\FLOWshapeparameter\c!framecolor", backgroundcolor = "\FLOWshapeparameter\c!backgroundcolor", }, focus = { rulethickness = \number\dimexpr\FLOWfocusparameter\c!rulethickness, framecolor = "\FLOWfocusparameter\c!framecolor", backgroundcolor = "\FLOWfocusparameter\c!backgroundcolor", }, line = { rulethickness = \number\dimexpr\FLOWlineparameter\c!rulethickness, radius = \number\dimexpr\FLOWlineparameter\c!radius, color = "\FLOWlineparameter\c!color", corner = "\FLOWlineparameter\c!corner", dash = "\FLOWlineparameter\c!dash", arrow = "\FLOWlineparameter\c!arrow", offset = "\FLOWlineparameter\c!offset", }, } }% \endgroup} \unexpanded\def\stopFLOWcell {\ctxcommand{flow_stop_cell()}} \unexpanded\def\FLOWchart {\dodoubleempty\module_charts_process} \def\module_charts_process[#name][#settings]% {\bgroup % \vbox removed \insidefloattrue \dontcomplain \setupFLOWchart[#settings]% \setupbodyfont[\FLOWchartparameter\c!bodyfont]% \ctxcommand{flow_make_chart { chart = { name = "#name", option = "\FLOWchartparameter\c!option", backgroundcolor = "\FLOWchartparameter\c!backgroundcolor", width = \number\dimexpr\FLOWchartparameter\c!width, height = \number\dimexpr\FLOWchartparameter\c!height, dx = \number\dimexpr\FLOWchartparameter\c!dx, dy = \number\dimexpr\FLOWchartparameter\c!dy, offset = \number\dimexpr\FLOWchartparameter\c!offset, % bodyfont = "\FLOWchartparameter\c!bodyfont", dot = "\FLOWchartparameter\c!dot", % private option hcompact = "\FLOWchartparameter\c!hcompact", % undocumented option vcompact = "\FLOWchartparameter\c!vcompact", % undocumented option focus = "\FLOWchartparameter\c!focus", autofocus = "\FLOWchartparameter\c!autofocus", nx = "\FLOWchartparameter\c!nx", ny = "\FLOWchartparameter\c!ny", x = "\FLOWchartparameter\c!x", y = "\FLOWchartparameter\c!y", labeloffset = \number\dimexpr\FLOWchartparameter\c!labeloffset, commentoffset = \number\dimexpr\FLOWchartparameter\c!commentoffset, exitoffset = \number\dimexpr\FLOWchartparameter\c!exitoffset, split = "\FLOWchartparameter\c!split", }, shape = { rulethickness = \number\dimexpr\FLOWshapeparameter\c!rulethickness, default = "\FLOWshapeparameter\c!default", framecolor = "\FLOWshapeparameter\c!framecolor", backgroundcolor = "\FLOWshapeparameter\c!backgroundcolor", }, focus = { rulethickness = \number\dimexpr\FLOWfocusparameter\c!rulethickness, framecolor = "\FLOWfocusparameter\c!framecolor", backgroundcolor = "\FLOWfocusparameter\c!backgroundcolor", }, line = { rulethickness = \number\dimexpr\FLOWlineparameter\c!rulethickness, radius = \number\dimexpr\FLOWlineparameter\c!radius, color = "\FLOWlineparameter\c!color", corner = "\FLOWlineparameter\c!corner", dash = "\FLOWlineparameter\c!dash", arrow = "\FLOWlineparameter\c!arrow", offset = "\FLOWlineparameter\c!offset", }, set = { }, split = { nx = \number\FLOWsplitparameter\c!nx, ny = \number\FLOWsplitparameter\c!ny, dx = \number\FLOWsplitparameter\c!dx, dy = \number\FLOWsplitparameter\c!dy, command = "", marking = "\FLOWsplitparameter\c!marking", before = "", after = "", } } }% \egroup} \unexpanded\def\FLOWcharts {\dodoubleempty\FLOW_charts} \def\FLOW_charts[#name][#settings] {\begingroup \setupFLOWsplit[\c!state=\v!start,#settings]% \FLOW_chart[#name][]% \endgroup} \appendtoks \let\name \FLOW_name \let\shape \FLOW_shape \let\destination\FLOW_destination \let\focus \FLOW_focus \let\overlay \FLOW_overlay \let\location \FLOW_location \let\text \FLOW_text \let\label \FLOW_label \let\comment \FLOW_comment \let\exit \FLOW_exit \let\connection \FLOW_connection \let\include \FLOW_include \let\figure \FLOW_figure % \let\connect \FLOW_connection \let\locate \FLOW_location % \let\includeFLOWchart\include \to \everyFLOWchart \unexpanded\def\FLOW_name #name{\ctxcommand{flow_set_name("#name")}\ignorespaces} \unexpanded\def\FLOW_shape #shape{\ctxcommand{flow_set_shape("#shape")}\ignorespaces} \unexpanded\def\FLOW_destination#destination{\ctxcommand{flow_set_destination("#destination")}\ignorespaces} \unexpanded\def\FLOW_focus #focus{\ctxcommand{flow_set_focus("#focus")}\ignorespaces} \unexpanded\def\FLOW_overlay #overlay{\ctxcommand{flow_set_overlay("#overlay")}\ignorespaces} \unexpanded\def\FLOW_location #location{\ctxcommand{flow_set_location("#location")}\ignorespaces} \unexpanded\def\FLOW_figure #figure{\ctxcommand{flow_set_figure("#figure")}\ignorespaces} \unexpanded\def\FLOW_text {\dosingleempty\module_charts_FLOW_text} \unexpanded\def\FLOW_label {\dosingleempty\module_charts_FLOW_label} \unexpanded\def\FLOW_comment {\dosingleempty\module_charts_FLOW_comment} \unexpanded\def\FLOW_exit {\dosingleempty\module_charts_FLOW_exit} \unexpanded\def\FLOW_connection{\dodoubleempty\module_charts_FLOW_connection} \unexpanded\def\FLOW_include {\dodoubleempty\module_charts_FLOW_include} \unexpanded\def\module_charts_FLOW_text [#align]#text{\ctxcommand{flow_set_text("#align",\!!bs\detokenize{#text}\!!es)}\ignorespaces} \unexpanded\def\module_charts_FLOW_label [#location]#text{\ctxcommand{flow_set_label("#location",\!!bs\detokenize{#text}\!!es)}\ignorespaces} \unexpanded\def\module_charts_FLOW_comment [#location]#text{\ctxcommand{flow_set_comment("#location",\!!bs\detokenize{#text}\!!es)}\ignorespaces} \unexpanded\def\module_charts_FLOW_exit [#location]#text{\ctxcommand{flow_set_exit("#location",\!!bs\detokenize{#text}\!!es)}\ignorespaces} \unexpanded\def\module_charts_FLOW_connection[#location][#offset]#name{\ctxcommand{flow_set_connection("#location","#offset","#name")}\ignorespaces} \unexpanded\def\module_charts_FLOW_include [#name][#settings]{% \begingroup \getparameters[FLOWi][x=1,y=1,#settings]% \ctxcommand{flow_set_include("#name",\number\FLOWix,\number\FLOWiy,\!!bs\detokenize{#settings}\!!es)}% \endgroup \ignorespaces } \setvariables [flowcell:text] [x=1, y=1, text=, align=, set=\setups{flowcell:text:place}] \def\FLOWx{\getvariable{flowcell:text}{x}} % compatibility (for Willi) \def\FLOWy{\getvariable{flowcell:text}{y}} % compatibility (for Willi) % \c!background={\@@FLOWbackground,\FLOWoverlay}, \defineoverlay [flowcell:figure] [\overlayfigure{\getvariable{flowcell:text}{figure}}] \startsetups flowcell:text:place \begingroup \iftrialtypesetting \directsetup{flowcell:text:place:indeed} \else \iflocation \doifelsenothing {\getvariable{flowcell:text}{destination}} { \directsetup{flowcell:text:place:indeed} } { % tricky: scaling and moving around is not taken into account \setupinteraction[\c!color=,\c!contrastcolor=] \gotobox{\directsetup{flowcell:text:place:indeed}}[\getvariable{flowcell:text}{destination}] } \else \directsetup{flowcell:text:place:indeed} \fi \fi \endgroup \stopsetups \startsetups flowcell:text:place:indeed \begingroup \directsetup{flowcell:text:user} \doifelsenothing {\getvariable{flowcell:text}{figure}} { \expandcheckedcsname{flowcell:}{\getvariable{flowcell:text}{align}}\empty {\getvariable{flowcell:text}{text}} } { \expandcheckedcsname{flowcell:}{\getvariable{flowcell:text}{align}}\empty [\c!background=flowcell:figure] {\getvariable{flowcell:text}{text}} } \endgroup \stopsetups \defineframed % to be discussed: shape or global [flowcell:base] [\c!offset=\v!overlay, % no strut ? \c!frame=\FLOWchartparameter\c!frame, \c!background=\FLOWchartparameter\c!background, \c!backgroundcolor=\FLOWchartparameter\c!backgroundcolor, %\c!foregroundcolor=\FLOWshapeparameter\c!foregroundcolor, \c!align=\v!middle, \c!bottom=\vfill, \c!top=\vfill, \c!width=\FLOWchartparameter\c!width, \c!height=\FLOWchartparameter\c!height, % \c!rulethickness=\FLOWchartparameter\c!rulethickness, \c!rulethickness=\zeropoint, % comment for tracing \c!framecolor=\FLOWchartparameter\c!framecolor] \defineframed[flowcell:] [flowcell:base] \defineframed[flowcell:l] [flowcell:base][\c!align=\v!flushleft] \defineframed[flowcell:r] [flowcell:base][\c!align=\v!flushright] \defineframed[flowcell:m] [flowcell:base][\c!align=\v!middle] \defineframed[flowcell:c] [flowcell:base][\c!align=\v!middle] \defineframed[flowcell:t] [flowcell:base][\c!top=] \defineframed[flowcell:b] [flowcell:base][\c!bottom=] \defineframed[flowcell:lt][flowcell:base][\c!top=,\c!align=\v!flushleft] \defineframed[flowcell:rt][flowcell:base][\c!top=,\c!align=\v!flushright] \defineframed[flowcell:mt][flowcell:base][\c!top=,\c!align=\v!middle] \defineframed[flowcell:ct][flowcell:base][\c!top=,\c!align=\v!middle] \defineframed[flowcell:lb][flowcell:base][\c!bottom=,\c!align=\v!flushleft] \defineframed[flowcell:rb][flowcell:base][\c!bottom=,\c!align=\v!flushright] \defineframed[flowcell:mb][flowcell:base][\c!bottom=,\c!align=\v!middle] \defineframed[flowcell:cb][flowcell:base][\c!bottom=,\c!align=\v!middle] % \startsetups flowcell:text:user % \setupframed % [flowcell:base] % [background=flowcell] % \definelayer % [flowcell] % [width=\namedframedparameter{flowcell:base}{width}, % height=\namedframedparameter{flowcell:base}{height}] % \setlayerframed % [flowcell] % [preset=rightbottom,offset=-2.75ex] % [frame=off] % {\tx\FLOWx.\FLOWy} % \stopsetups % % % or: % % \setupframed % [flowcell:base] % [background={flowcell-1,flowcell-2}] % % \defineoverlay % [flowcell-1] % [\directsetup{flowcell-1}] % % \definelayer % [flowcell-2] % [width=\overlaywidth, % height=\overlayheight] % % \startsetups flowcell-1 % \setlayerframed % [flowcell-2] % [preset=rightbottom,offset=-2.75ex] % [frame=off] % {\tx\FLOWx.\FLOWy} % \stopsetups % %D \starttyping % %D \setupFLOWsplit % %D [nx=5,ny=10, % %D dx=0,dy=0, % %D before=, % %D after=\page] % %D % %D \FLOWcharts[mybigflow] % %D \stoptyping % %D % %D \starttyping % %D \splitfloat % %D {\placefigure{What a big flowchart this is!}} % %D {\FLOWcharts[mybigflow]} % %D \stoptyping % \setupFLOWsplit % [nx=5, % ny=8, % dx=1, % dy=1, % command=\framed, % before=\page, % after=\page] % % \FLOWchart[demo] \page % \FLOWchart[demo][split=yes] \page % \FLOWchart[demo][x=1,y=1,nx=5,ny=8] \page % \FLOWchart[demo][x=1,y=9,nx=5,ny=10] \page \protect \continueifinputfile{m-chart.mkvi} \input chrt-xml.tex \usemodule[abr-01] \setupFLOWcharts[option=test] \setupFLOWcharts[frame=on] \setupinteraction[state=start] % \setupFLOWcharts[dx=30pt,dy=30pt] \startMPinclusions predefined_shapes[101] := fullcircle ; \stopMPinclusions \startFLOWchart[demo] \startFLOWcell[framecolor=darkgray] \name {start} \location {1,1} \shape {action} \text {start} \connection [bl] {one} \stopFLOWcell \startFLOWcell[framecolor=darkred] \name {one} % \destination{CloseDocument} \location {2,2} % \shape {action} \shape {101} \text {first} % \label [b] {\bfx bottom} \connection [rt] {two} % \exit [l] {exit l} % \exit [r] {exit r} % \exit [t] {exit t} % \exit [b] {exit b} \stopFLOWcell \setupFLOWshapes[framecolor=darkgray] \startFLOWcell % [foregroundcolor=white] \name {two} % \destination{CloseDocument} \location {3,3} \shape {action} \text {second} \figure {cow.pdf} % \label [l] {\bfx left} % \exit [l] {exit l} % \exit [r] {exit r} % \exit [t] {exit t} % \exit [b] {exit b} \stopFLOWcell \stopFLOWchart \starttext \startTEXpage % \FLOWchart[convert-en] % \FLOWchart[conversion 1] % \FLOWchart[conversion 7] % \FLOWchart[conversion 9] % \FLOWchart[conversion 10] \FLOWchart[demo] \stopTEXpage \startTEXpage \FLOWchart[conversion 10] \stopTEXpage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-xitsbidi.mkiv0000644000175000017500000000071311754241457026155 0ustar norbertnorbert%D \module %D [ file=type-imp-hvmath, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Xits, %D author=Khaled Hosny \& Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \loadtypescriptfile[xits] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lev.mkvi0000644000175000017500000000620011754241457024330 0ustar norbertnorbert%D \module %D [ file=strc-lev, %D version=2010.09.23, %D title=\CONTEXT\ Structure Macros, %D subtitle=Automatic Levels, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Automatic Levels} %D This module is the result of a discussion between Alan Braslau and %D me. I used to have a private (\MKII) module for this but the new %D structure code in \MKIV\ is more suitable for this so now we have %D it as core functionality. For the moment this an experiment that %D Alan and I conduct so it might evolve. \registerctxluafile{strc-lev}{1.001} \unprotect \unexpanded\def\definesectionlevels{\dodoubleargument\strc_levels_define} \unexpanded\def\startsectionlevel {\dosingleempty \strc_levels_start } \unexpanded\def\strc_levels_define[#category][#list]{\ctxcommand{definesectionlevels("#category","#list")}} \unexpanded\def\strc_levels_start [#category]{\ctxcommand{startsectionlevel("#category")}} \unexpanded\def\stopsectionlevel {\ctxcommand{stopsectionlevel()}} \unexpanded\def\nostarthead{\dotripleargument\strc_levels_start_nop} % used at the lua end \unexpanded\def\nostophead {\dosingleargument\strc_levels_stop_nop } % used at the lua end \unexpanded\def\strc_levels_start[#category]% {\doifassignmentelse{#category} {\ctxcommand{startsectionlevel("\v!default")}[#category]} {\ctxcommand{startsectionlevel("#category")}}} \unexpanded\def\strc_levels_start_nop[#category][#settings][#userdata]% {\blank \noindentation{\tttf[start missing section level #category]} \blank} \unexpanded\def\strc_levels_stop_nop[#category]% {\blank \noindentation{\tttf[stop missing section level #category]} \blank} \definesectionlevels [\v!default] [\v!chapter, \v!section, \v!subsection, \v!subsubsection, \v!subsubsubsection, \v!subsubsubsubsection] \let\definestructurelevels\definesectionlevels \let\startstructurelevel \startsectionlevel \let\stopstructurelevel \stopsectionlevel \protect \endinput % \starttext % % \definehead[xxxxxxsection][subsubsection] % \setuphead [xxxxxxsection][color=red] % % \definesectionlevels[main][chapter,section,subsection,subsubsection] % \definesectionlevels[next][chapter,section,subsection,xxxxxxsection] % % \startsectionlevel [main] [title=first top level] % % \startsectionlevel [main] [title=first lower level] % \startsectionlevel [main] [title=second lower level] % \startsectionlevel [main] [title=third lower level] % test % \stopsectionlevel % \stopsectionlevel % \stopsectionlevel % % \startsectionlevel [main] [title=first lower level] % \startsectionlevel [main] [title=second lower level] % \startsectionlevel [next] [title=third lower level] % test % \stopsectionlevel % \stopsectionlevel % \stopsectionlevel % % \stopsectionlevel % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-xtb.lua0000644000175000017500000007710212132111075024111 0ustar norbertnorbertif not modules then modules = { } end modules ['tabl-xtb'] = { version = 1.001, comment = "companion to tabl-xtb.mkvi", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ This table mechanism is a combination between TeX and Lua. We do process cells at the TeX end and inspect them at the Lua end. After some analysis we have a second pass using the calculated widths, and if needed cells will go through a third pass to get the heights right. This last pass is avoided when possible which is why some code below looks a bit more complex than needed. The reason for such optimizations is that each cells is actually a framed instance and because tables like this can be hundreds of pages we want to keep processing time reasonable. To a large extend the behaviour is comparable with the way bTABLE/eTABLE works and there is a module that maps that one onto this one. Eventually this mechamism will be improved so that it can replace its older cousin. ]]-- -- todo: use linked list instead of r/c array local commands, context, tex, node = commands, context, tex, node local texdimen = tex.dimen local texcount = tex.count local texbox = tex.box local texsetcount = tex.setcount local texsetdimen = tex.setdimen local format = string.format local concat = table.concat local points = number.points local context = context local context_beginvbox = context.beginvbox local context_endvbox = context.endvbox local context_blank = context.blank local context_nointerlineskip = context.nointerlineskip local variables = interfaces.variables local setmetatableindex = table.setmetatableindex local settings_to_hash = utilities.parsers.settings_to_hash local copy_node_list = node.copy_list local hpack_node_list = node.hpack local vpack_node_list = node.vpack local slide_node_list = node.slide local flush_node_list = node.flush_list local nodepool = nodes.pool local new_glue = nodepool.glue local new_kern = nodepool.kern local new_penalty = nodepool.penalty local new_hlist = nodepool.hlist local v_stretch = variables.stretch local v_normal = variables.normal local v_width = variables.width local v_height = variables.height local v_repeat = variables["repeat"] local v_max = variables.max local v_fixed = variables.fixed local xtables = { } typesetters.xtables = xtables local trace_xtable = false local report_xtable = logs.reporter("xtable") trackers.register("xtable.construct", function(v) trace_xtable = v end) local null_mode = 0 local head_mode = 1 local foot_mode = 2 local more_mode = 3 local body_mode = 4 local namedmodes = { [0] = "null", "head", "foot", "next", "body", } local stack, data = { }, nil function xtables.create(settings) table.insert(stack,data) local rows = { } local widths = { } local heights = { } local depths = { } local spans = { } local distances = { } local autowidths = { } local modes = { } local fixedrows = { } local fixedcolumns = { } local frozencolumns = { } local options = { } data = { rows = rows, widths = widths, heights = heights, depths = depths, spans = spans, distances = distances, modes = modes, autowidths = autowidths, fixedrows = fixedrows, fixedcolumns = fixedcolumns, frozencolumns = frozencolumns, options = options, nofrows = 0, nofcolumns = 0, currentrow = 0, currentcolumn = 0, settings = settings or { }, } local function add_zero(t,k) t[k] = 0 return 0 end local function add_table(t,k) local v = { } t[k] = v return v end local function add_cell(row,c) local cell = { nx = 0, ny = 0, list = false, } row[c] = cell if c > data.nofcolumns then data.nofcolumns = c end return cell end local function add_row(rows,r) local row = { } setmetatableindex(row,add_cell) rows[r] = row if r > data.nofrows then data.nofrows = r end return row end setmetatableindex(rows,add_row) setmetatableindex(widths,add_zero) setmetatableindex(heights,add_zero) setmetatableindex(depths,add_zero) setmetatableindex(distances,add_zero) setmetatableindex(modes,add_zero) setmetatableindex(fixedrows,add_zero) setmetatableindex(fixedcolumns,add_zero) setmetatableindex(options,add_table) -- settings.columndistance = tonumber(settings.columndistance) or 0 settings.rowdistance = tonumber(settings.rowdistance) or 0 settings.leftmargindistance = tonumber(settings.leftmargindistance) or 0 settings.rightmargindistance = tonumber(settings.rightmargindistance) or 0 settings.options = settings_to_hash(settings.option) settings.textwidth = tonumber(settings.textwidth) or tex.hsize settings.lineheight = tonumber(settings.lineheight) or texdimen.lineheight settings.maxwidth = tonumber(settings.maxwidth) or settings.textwidth/8 -- if #stack > 0 then -- settings.textwidth = tex.hsize -- end data.criterium_v = 2 * data.settings.lineheight data.criterium_h = .75 * data.settings.textwidth end function xtables.initialize_reflow_width(option) local r = data.currentrow local c = data.currentcolumn + 1 local drc = data.rows[r][c] drc.nx = texcount.c_tabl_x_nx drc.ny = texcount.c_tabl_x_ny local distances = data.distances local distance = texdimen.d_tabl_x_distance if distance > distances[c] then distances[c] = distance end if option and option ~= "" then local options = settings_to_hash(option) data.options[r][c] = options if options[v_fixed] then data.frozencolumns[c] = true end end data.currentcolumn = c end -- local function rather_fixed(n) -- for n in node. function xtables.set_reflow_width() local r = data.currentrow local c = data.currentcolumn local rows = data.rows local row = rows[r] while row[c].span do -- can also be previous row ones c = c + 1 end local tb = texbox.b_tabl_x local drc = row[c] -- drc.list = true -- we don't need to keep the content around as we're in trial mode (no: copy_node_list(tb)) -- local widths, width = data.widths, tb.width if width > widths[c] then widths[c] = width end local heights, height = data.heights, tb.height if height > heights[r] then heights[r] = height end local depths, depth = data.depths, tb.depth if depth > depths[r] then depths[r] = depth end -- local dimensionstate = texcount.frameddimensionstate local fixedcolumns = data.fixedcolumns local fixedrows = data.fixedrows if dimensionstate == 1 then if width > fixedcolumns[c] then -- how about a span here? fixedcolumns[c] = width end elseif dimensionstate == 2 then fixedrows[r] = height elseif dimensionstate == 3 then fixedrows[r] = height -- width fixedcolumns[c] = width -- height else -- probably something frozen, like an image -- we could parse the list if width <= data.criterium_h and height >= data.criterium_v then if width > fixedcolumns[c] then -- how about a span here? fixedcolumns[c] = width end end end drc.dimensionstate = dimensionstate -- local nx, ny = drc.nx, drc.ny if nx > 1 or ny > 1 then local spans = data.spans local self = true for y=1,ny do for x=1,nx do if self then self = false else local ry = r + y - 1 local cx = c + x - 1 if y > 1 then spans[ry] = true end rows[ry][cx].span = true end end end c = c + nx - 1 end if c > data.nofcolumns then data.nofcolumns = c end data.currentcolumn = c end function xtables.initialize_reflow_height() local r = data.currentrow local c = data.currentcolumn + 1 local rows = data.rows local row = rows[r] while row[c].span do -- can also be previous row ones c = c + 1 end data.currentcolumn = c local widths = data.widths local w = widths[c] local drc = row[c] for x=1,drc.nx-1 do w = w + widths[c+x] end texdimen.d_tabl_x_width = w local dimensionstate = drc.dimensionstate or 0 if dimensionstate == 1 or dimensionstate == 3 then -- width was fixed so height is known texcount.c_tabl_x_skip_mode = 1 elseif dimensionstate == 2 then -- height is enforced texcount.c_tabl_x_skip_mode = 1 elseif data.autowidths[c] then -- width has changed so we need to recalculate the height texcount.c_tabl_x_skip_mode = 0 else texcount.c_tabl_x_skip_mode = 1 end end function xtables.set_reflow_height() local r = data.currentrow local c = data.currentcolumn local rows = data.rows local row = rows[r] -- while row[c].span do -- we could adapt drc.nx instead -- c = c + 1 -- end local tb = texbox.b_tabl_x local drc = row[c] if data.fixedrows[r] == 0 then -- and drc.dimensionstate < 2 local heights, height = data.heights, tb.height if height > heights[r] then heights[r] = height end local depths, depth = data.depths, tb.depth if depth > depths[r] then depths[r] = depth end end -- c = c + drc.nx - 1 -- data.currentcolumn = c end function xtables.initialize_construct() local r = data.currentrow local c = data.currentcolumn + 1 local rows = data.rows local row = rows[r] while row[c].span do -- can also be previous row ones c = c + 1 end data.currentcolumn = c local widths = data.widths local heights = data.heights local depths = data.depths local w = widths[c] local h = heights[r] local d = depths[r] local drc = row[c] for x=1,drc.nx-1 do w = w + widths[c+x] end for y=1,drc.ny-1 do h = h + heights[r+y] d = d + depths[r+y] end texdimen.d_tabl_x_width = w texdimen.d_tabl_x_height = h + d texdimen.d_tabl_x_depth = 0 end function xtables.set_construct() local r = data.currentrow local c = data.currentcolumn local rows = data.rows local row = rows[r] -- while row[c].span do -- can also be previous row ones -- c = c + 1 -- end local drc = row[c] -- this will change as soon as in luatex we can reset a box list without freeing drc.list = copy_node_list(texbox.b_tabl_x) -- c = c + drc.nx - 1 -- data.currentcolumn = c end local function showwidths(where,widths,autowidths) local result = { } for i=1,#widths do result[#result+1] = format("%12s%s",points(widths[i]),autowidths[i] and "*" or " ") end return report_xtable("%s : %s",where,concat(result," ")) end function xtables.reflow_width() local nofrows = data.nofrows local nofcolumns = data.nofcolumns local rows = data.rows for r=1,nofrows do local row = rows[r] for c=1,nofcolumns do local drc = row[c] if drc.list then -- flush_node_list(drc.list) drc.list = false end end end -- spread local settings = data.settings local options = settings.options local maxwidth = settings.maxwidth -- calculate width local widths = data.widths local distances = data.distances local autowidths = data.autowidths local fixedcolumns = data.fixedcolumns local frozencolumns = data.frozencolumns local width = 0 local distance = 0 local nofwide = 0 local widetotal = 0 local available = settings.textwidth - settings.leftmargindistance - settings.rightmargindistance if trace_xtable then showwidths("stage 1",widths,autowidths) end local noffrozen = 0 if options[v_max] then for c=1,nofcolumns do width = width + widths[c] if width > maxwidth then autowidths[c] = true nofwide = nofwide + 1 widetotal = widetotal + widths[c] end if c < nofcolumns then distance = distance + distances[c] end if frozencolumns[c] then noffrozen = noffrozen + 1 -- brr, should be nx or so end end else for c=1,nofcolumns do -- also keep track of forced local fixedwidth = fixedcolumns[c] if fixedwidth > 0 then widths[c] = fixedwidth width = width + fixedwidth else width = width + widths[c] if width > maxwidth then autowidths[c] = true nofwide = nofwide + 1 widetotal = widetotal + widths[c] end end if c < nofcolumns then distance = distance + distances[c] end if frozencolumns[c] then noffrozen = noffrozen + 1 -- brr, should be nx or so end end end if trace_xtable then showwidths("stage 2",widths,autowidths) end local delta = available - width - distance - (nofcolumns-1) * settings.columndistance if delta == 0 then -- nothing to be done if trace_xtable then report_xtable("perfect fit") end elseif delta > 0 then -- we can distribute some if not options[v_stretch] then -- not needed if trace_xtable then report_xtable("too wide but no stretch, delta %p",delta) end elseif options[v_width] then local factor = delta / width if trace_xtable then report_xtable("proportional stretch, delta %p, width %p, factor %a",delta,width,factor) end for c=1,nofcolumns do widths[c] = widths[c] + factor * widths[c] end else -- frozen -> a column with option=fixed will not stretch local extra = delta / (nofcolumns - noffrozen) if trace_xtable then report_xtable("normal stretch, delta %p, extra %p",delta,extra) end for c=1,nofcolumns do if not frozencolumns[c] then widths[c] = widths[c] + extra end end end elseif nofwide > 0 then while true do done = false local available = (widetotal + delta) / nofwide if trace_xtable then report_xtable("shrink check, total %p, delta %p, columns %s, fixed %p",widetotal,delta,nofwide,available) end for c=1,nofcolumns do if autowidths[c] and available >= widths[c] then autowidths[c] = nil nofwide = nofwide - 1 widetotal = widetotal - widths[c] done = true end end if not done then break end end -- maybe also options[v_width] here but tricky as width does not say -- much about amount if options[v_width] then -- not that much (we could have a clever vpack loop balancing .. no fun) local factor = (widetotal + delta) / width if trace_xtable then report_xtable("proportional shrink used, total %p, delta %p, columns %s, factor %s",widetotal,delta,nofwide,factor) end for c=1,nofcolumns do if autowidths[c] then widths[c] = factor * widths[c] end end else local available = (widetotal + delta) / nofwide if trace_xtable then report_xtable("normal shrink used, total %p, delta %p, columns %s, fixed %p",widetotal,delta,nofwide,available) end for c=1,nofcolumns do if autowidths[c] then widths[c] = available end end end end if trace_xtable then showwidths("stage 3",widths,autowidths) end -- data.currentrow = 0 data.currentcolumn = 0 end function xtables.reflow_height() data.currentrow = 0 data.currentcolumn = 0 local settings = data.settings if settings.options[v_height] then local heights = data.heights local depths = data.depths local nofrows = data.nofrows local totalheight = 0 local totaldepth = 0 for i=1,nofrows do totalheight = totalheight + heights[i] totalheight = totalheight + depths [i] end local total = totalheight + totaldepth local leftover = settings.textheight - total if leftover > 0 then local leftheight = (totalheight / total ) * leftover / #heights local leftdepth = (totaldepth / total ) * leftover / #depths for i=1,nofrows do heights[i] = heights[i] + leftheight depths [i] = depths [i] + leftdepth end end end end local function showspans(data) local rows = data.rows local modes = data.modes local nofcolumns = data.nofcolumns local nofrows = data.nofrows for r=1,nofrows do local line = { } local row = rows[r] for c=1,nofcolumns do local cell =row[c] if cell.list then line[#line+1] = "list" elseif cell.span then line[#line+1] = "span" else line[#line+1] = "none" end end report_xtable("%3d : %s : % t",r,namedmodes[modes[r]] or "----",line) end end function xtables.construct() local rows = data.rows local heights = data.heights local depths = data.depths local widths = data.widths local spans = data.spans local distances = data.distances local modes = data.modes local settings = data.settings local nofcolumns = data.nofcolumns local nofrows = data.nofrows local columndistance = settings.columndistance local rowdistance = settings.rowdistance local leftmargindistance = settings.leftmargindistance local rightmargindistance = settings.rightmargindistance -- ranges can be mixes so we collect if trace_xtable then showspans(data) end local ranges = { [head_mode] = { }, [foot_mode] = { }, [more_mode] = { }, [body_mode] = { }, } for r=1,nofrows do local m = modes[r] if m == 0 then m = body_mode end local range = ranges[m] range[#range+1] = r end -- todo: hook in the splitter ... the splitter can ask for a chunk of -- a certain size ... no longer a split memory issue then and header -- footer then has to happen here too .. target height local function packaged_column(r) local row = rows[r] local start = nil local stop = nil if leftmargindistance > 0 then start = new_kern(leftmargindistance) stop = start end local hasspan = false for c=1,nofcolumns do local drc = row[c] if not hasspan then hasspan = drc.span end local list = drc.list if list then list.shift = list.height + list.depth -- list = hpack_node_list(list) -- is somehow needed -- list.width = 0 -- list.height = 0 -- list.depth = 0 -- faster: local h = new_hlist() h.list = list list = h -- if start then stop.next = list list.prev = stop else start = list end stop = list -- one node anyway, so not needed: slide_node_list(list) end local step = widths[c] if c < nofcolumns then step = step + columndistance + distances[c] end local kern = new_kern(step) if stop then stop.prev = kern stop.next = kern else -- can be first spanning next row (ny=...) start = kern end stop = kern end if start then if rightmargindistance > 0 then local kern = new_kern(rightmargindistance) stop.next = kern kern.prev = stop -- stop = kern end return start, heights[r] + depths[r], hasspan end end local function collect_range(range) local result, nofr = { }, 0 local nofrange = #range for i=1,#range do local r = range[i] -- local row = rows[r] local list, size, hasspan = packaged_column(r) if list then if hasspan and nofr > 0 then result[nofr][4] = true end nofr = nofr + 1 result[nofr] = { hpack_node_list(list), size, i < nofrange and rowdistance > 0 and rowdistance or false, -- might move false } end end return result end local body = collect_range(ranges[body_mode]) data.results = { [head_mode] = collect_range(ranges[head_mode]), [foot_mode] = collect_range(ranges[foot_mode]), [more_mode] = collect_range(ranges[more_mode]), [body_mode] = body, } if #body == 0 then texsetcount("global","c_tabl_x_state",0) texsetdimen("global","d_tabl_x_final_width",0) else texsetcount("global","c_tabl_x_state",1) texsetdimen("global","d_tabl_x_final_width",body[1][1].width) end end local function inject(row,copy,package) local list = row[1] if copy then row[1] = copy_node_list(list) end if package then context_beginvbox() context(list) context(new_kern(row[2])) context_endvbox() context_nointerlineskip() -- figure out a better way if row[4] then -- nothing as we have a span elseif row[3] then context_blank(row[3] .. "sp") -- why blank ? else context(new_glue(0)) end else context(list) context(new_kern(row[2])) if row[3] then context(new_glue(row[3])) end end end local function total(row,distance) local n = #row > 0 and rowdistance or 0 for i=1,#row do local ri = row[i] n = n + ri[2] + (ri[3] or 0) end return n end -- local function append(list,what) -- for i=1,#what do -- local l = what[i] -- list[#list+1] = l[1] -- local k = l[2] + (l[3] or 0) -- if k ~= 0 then -- list[#list+1] = new_kern(k) -- end -- end -- end local function spanheight(body,i) local height, n = 0, 1 while true do local bi = body[i] if bi then height = height + bi[2] + (bi[3] or 0) if bi[4] then n = n + 1 i = i + 1 else break end else break end end return height, n end function xtables.flush(directives) -- todo split by size / no inbetween then .. glue list kern blank local vsize = directives.vsize local method = directives.method or v_normal local settings = data.settings local results = data.results local rowdistance = settings.rowdistance local head = results[head_mode] local foot = results[foot_mode] local more = results[more_mode] local body = results[body_mode] local repeatheader = settings.header == v_repeat local repeatfooter = settings.footer == v_repeat if vsize and vsize > 0 then context_beginvbox() local bodystart = data.bodystart or 1 local bodystop = data.bodystop or #body if bodystart > 0 and bodystart <= bodystop then local bodysize = vsize local footsize = total(foot,rowdistance) local headsize = total(head,rowdistance) local moresize = total(more,rowdistance) local firstsize, firstspans = spanheight(body,bodystart) if bodystart == 1 then -- first chunk gets head bodysize = bodysize - headsize - footsize if headsize > 0 and bodysize >= firstsize then for i=1,#head do inject(head[i],repeatheader) end if rowdistance > 0 then context(new_glue(rowdistance)) end if not repeatheader then results[head_mode] = { } end end elseif moresize > 0 then -- following chunk gets next bodysize = bodysize - footsize - moresize if bodysize >= firstsize then for i=1,#more do inject(more[i],true) end if rowdistance > 0 then context(new_glue(rowdistance)) end end elseif headsize > 0 and repeatheader then -- following chunk gets head bodysize = bodysize - footsize - headsize if bodysize >= firstsize then for i=1,#head do inject(head[i],true) end if rowdistance > 0 then context(new_glue(rowdistance)) end end else -- following chunk gets nothing bodysize = bodysize - footsize end if bodysize >= firstsize then local i = bodystart while i <= bodystop do -- room for improvement local total, spans = spanheight(body,i) local bs = bodysize - total if bs > 0 then bodysize = bs for s=1,spans do inject(body[i]) body[i] = nil i = i + 1 end bodystart = i else break end end if bodystart > bodystop then -- all is flushed and footer fits if footsize > 0 then if rowdistance > 0 then context(new_glue(rowdistance)) end for i=1,#foot do inject(foot[i]) end results[foot_mode] = { } end results[body_mode] = { } texsetcount("global","c_tabl_x_state",0) else -- some is left so footer is delayed -- todo: try to flush a few more lines if repeatfooter and footsize > 0 then if rowdistance > 0 then context(new_glue(rowdistance)) end for i=1,#foot do inject(foot[i],true) end else -- todo: try to fit more of body end texsetcount("global","c_tabl_x_state",2) end else if firstsize > vsize then -- get rid of the too large cell for s=1,firstspans do inject(body[bodystart]) body[bodystart] = nil bodystart = bodystart + 1 end end texsetcount("global","c_tabl_x_state",2) -- 1 end else texsetcount("global","c_tabl_x_state",0) end data.bodystart = bodystart data.bodystop = bodystop context_endvbox() else if method == variables.split then -- maybe also a non float mode with header/footer repeat although -- we can also use a float without caption for i=1,#head do inject(head[i],false,true) end if #head > 0 and rowdistance > 0 then context_blank(rowdistance .. "sp") end for i=1,#body do inject(body[i],false,true) end if #foot > 0 and rowdistance > 0 then context_blank(rowdistance .. "sp") end for i=1,#foot do inject(foot[i],false,true) end else -- normal context_beginvbox() for i=1,#head do inject(head[i]) end if #head > 0 and rowdistance > 0 then context(new_glue(rowdistance)) end for i=1,#body do inject(body[i]) end if #foot > 0 and rowdistance > 0 then context(new_glue(rowdistance)) end for i=1,#foot do inject(foot[i]) end context_endvbox() end results[head_mode] = { } results[body_mode] = { } results[foot_mode] = { } texsetcount("global","c_tabl_x_state",0) end end function xtables.cleanup() for mode, result in next, data.results do for _, r in next, result do flush_node_list(r[1]) end end data = table.remove(stack) end function xtables.next_row() local r = data.currentrow + 1 data.modes[r] = texcount.c_tabl_x_mode data.currentrow = r data.currentcolumn = 0 end -- eventually we might only have commands commands.x_table_create = xtables.create commands.x_table_reflow_width = xtables.reflow_width commands.x_table_reflow_height = xtables.reflow_height commands.x_table_construct = xtables.construct commands.x_table_flush = xtables.flush commands.x_table_cleanup = xtables.cleanup commands.x_table_next_row = xtables.next_row commands.x_table_init_reflow_width = xtables.initialize_reflow_width commands.x_table_init_reflow_height = xtables.initialize_reflow_height commands.x_table_init_construct = xtables.initialize_construct commands.x_table_set_reflow_width = xtables.set_reflow_width commands.x_table_set_reflow_height = xtables.set_reflow_height commands.x_table_set_construct = xtables.set_construct context-2013.05.28.20130704/texmf-dist/tex/context/base/type-otf.mkii0000644000175000017500000032543611754241457024342 0ustar norbertnorbert%D \module %D [ file=type-otf, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Opentype Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Actually, \LUATEX\ does not need all these definitions since it can %D consult its database. However, here we use the names that we used %D in good old \TEX, and these may differ a bit. Here we also see %D some oldstyle definitions which normally are done with features. \starttypescriptcollection[fallback] \starttypescript [fallback] \definetypeface [] [rm] [serif] [modern] [computer-modern] [features=default] \definetypeface [] [ss] [sans] [modern] [computer-modern] [features=default] \definetypeface [] [tt] [mono] [modern] [computer-modern] [features=default] \definetypeface [] [mm] [math] [modern] [computer-modern] \quittypescriptscanning \stoptypescript % faster % % \starttypescript [fallback] % \definetypeface [] [rm] [serif] [modern] [default] [features=default] % \definetypeface [] [ss] [sans] [modern] [default] [features=default] % \definetypeface [] [tt] [mono] [modern] [default] [features=default] % \definetypeface [] [mm] [math] [modern] [default] % \quittypescriptscanning % \stoptypescript \stoptypescriptcollection % if a fontname equals the filename, then use % % \setupfontsynonym [LMRoman10-DemiOblique] [features=default] % file is lowercase, so fails % \definefontsynonym [LMRoman10-DemiOblique] [name:LMRoman10-DemiOblique] [features=default] % \definefontsynonym [LMRoman10-DemiOblique] [lmroman10-demioblique] [features=default] \starttypescriptcollection[latinmodern] %D The names have changed (again) ... but I will not change the symbolic names %D any more. Filename changes will be catched in luatex (fallbacks) but not in %D other tex's. \starttypescript [serif] [modern,latin-modern] \definefontsynonym [LMRoman5-Regular] [file:lmroman5-regular] [features=default] \definefontsynonym [LMRoman6-Regular] [file:lmroman6-regular] [features=default] \definefontsynonym [LMRoman7-Regular] [file:lmroman7-regular] [features=default] \definefontsynonym [LMRoman8-Regular] [file:lmroman8-regular] [features=default] \definefontsynonym [LMRoman9-Regular] [file:lmroman9-regular] [features=default] \definefontsynonym [LMRoman10-Regular] [file:lmroman10-regular] [features=default] \definefontsynonym [LMRoman12-Regular] [file:lmroman12-regular] [features=default] \definefontsynonym [LMRoman17-Regular] [file:lmroman17-regular] [features=default] \definefontsynonym [LMRoman5-Bold] [file:lmroman5-bold] [features=default] \definefontsynonym [LMRoman6-Bold] [file:lmroman6-bold] [features=default] \definefontsynonym [LMRoman7-Bold] [file:lmroman7-bold] [features=default] \definefontsynonym [LMRoman8-Bold] [file:lmroman8-bold] [features=default] \definefontsynonym [LMRoman9-Bold] [file:lmroman9-bold] [features=default] \definefontsynonym [LMRoman10-Bold] [file:lmroman10-bold] [features=default] \definefontsynonym [LMRoman12-Bold] [file:lmroman12-bold] [features=default] \definefontsynonym [LMRoman7-Italic] [file:lmroman7-italic] [features=default] \definefontsynonym [LMRoman8-Italic] [file:lmroman8-italic] [features=default] \definefontsynonym [LMRoman9-Italic] [file:lmroman9-italic] [features=default] \definefontsynonym [LMRoman10-Italic] [file:lmroman10-italic] [features=default] \definefontsynonym [LMRoman12-Italic] [file:lmroman12-italic] [features=default] \definefontsynonym [LMRoman10-BoldItalic] [file:lmroman10-bolditalic] [features=default] \definefontsynonym [LMRoman8-Oblique] [file:lmromanslant8-regular] [features=default] \definefontsynonym [LMRoman9-Oblique] [file:lmromanslant9-regular] [features=default] \definefontsynonym [LMRoman10-Oblique] [file:lmromanslant10-regular][features=default] \definefontsynonym [LMRoman12-Oblique] [file:lmromanslant12-regular][features=default] \definefontsynonym [LMRoman17-Oblique] [file:lmromanslant17-regular][features=default] \definefontsynonym [LMRoman10-BoldOblique] [file:lmromanslant10-bold] [features=default] \definefontsynonym [LMRoman10-Demi] [file:lmromandemi10-regular] [features=default] \definefontsynonym [LMRoman10-DemiOblique] [file:lmromandemi10-oblique] [features=default] \definefontsynonym [LMRoman10-CapsRegular] [file:lmromancaps10-regular] [features=default] % features=smallcaps? \definefontsynonym [LMRoman10-CapsOblique] [file:lmromancaps10-oblique] [features=default] \definefontsynonym [LMRoman10-Dunhill] [file:lmromandunh10-regular] [features=default] \definefontsynonym [LMRoman10-DunhillOblique] [file:lmromandunh10-oblique] [features=default] \definefontsynonym [LMRoman10-Unslanted] [file:lmromanunsl10-regular] [features=default] \stoptypescript \starttypescript [sans] [modern,latin-modern] \definefontsynonym [LMSans8-Regular] [file:lmsans8-regular] [features=default] \definefontsynonym [LMSans9-Regular] [file:lmsans9-regular] [features=default] \definefontsynonym [LMSans10-Regular] [file:lmsans10-regular] [features=default] \definefontsynonym [LMSans12-Regular] [file:lmsans12-regular] [features=default] \definefontsynonym [LMSans17-Regular] [file:lmsans17-regular] [features=default] \definefontsynonym [LMSans10-Bold] [file:lmsans10-bold] [features=default] \definefontsynonym [LMSans8-Oblique] [file:lmsans8-oblique] [features=default] \definefontsynonym [LMSans9-Oblique] [file:lmsans9-oblique] [features=default] \definefontsynonym [LMSans10-Oblique] [file:lmsans10-oblique] [features=default] \definefontsynonym [LMSans12-Oblique] [file:lmsans12-oblique] [features=default] \definefontsynonym [LMSans17-Oblique] [file:lmsans17-oblique] [features=default] \definefontsynonym [LMSans10-BoldOblique] [file:lmsans10-boldoblique] [features=default] \definefontsynonym [LMSans10-DemiCondensed] [file:lmsansdemicond10-regular] [features=default] \definefontsynonym [LMSans10-DemiCondensedOblique] [file:lmsansdemicond10-oblique] [features=default] \definefontsynonym [LMSansQuotation8-Regular] [file:lmsansquot8-regular] [features=default] \definefontsynonym [LMSansQuotation8-Bold] [file:lmsansquot8-bold] [features=default] \definefontsynonym [LMSansQuotation8-Oblique] [file:lmsansquot8-oblique] [features=default] \definefontsynonym [LMSansQuotation8-BoldOblique] [file:lmsansquot8-boldoblique] [features=default] \stoptypescript \starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond] \definefontsynonym [LMTypewriter8-Regular] [file:lmmono8-regular] [features=none] \definefontsynonym [LMTypewriter9-Regular] [file:lmmono9-regular] [features=none] \definefontsynonym [LMTypewriter10-Regular] [file:lmmono10-regular] [features=none] \definefontsynonym [LMTypewriter12-Regular] [file:lmmono12-regular] [features=none] \definefontsynonym [LMTypewriter10-Italic] [file:lmmono10-italic] [features=none] \definefontsynonym [LMTypewriter10-Oblique] [file:lmmonoslant10-regular] [features=none] \definefontsynonym [LMTypewriter10-CapsRegular] [file:lmmonocaps10-regular] [features=none] % features=smallcaps? \definefontsynonym [LMTypewriter10-CapsOblique] [file:lmmonocaps10-oblique] [features=none] \definefontsynonym [LMTypewriter10-Light] [file:lmmonolt10-regular] [features=none] \definefontsynonym [LMTypewriter10-LightOblique] [file:lmmonolt10-oblique] [features=none] \definefontsynonym [LMTypewriter10-LightCondensed] [file:lmmonoltcond10-regular] [features=none] \definefontsynonym [LMTypewriter10-LightCondensedOblique] [file:lmmonoltcond10-oblique] [features=none] \definefontsynonym [LMTypewriter10-Dark] [file:lmmonolt10-bold] [features=none] \definefontsynonym [LMTypewriter10-DarkOblique] [file:lmmonolt10-boldoblique] [features=none] \definefontsynonym [LMTypewriterVarWd10-Regular] [file:lmmonoproplt10-regular] [features=default] \definefontsynonym [LMTypewriterVarWd10-Oblique] [file:lmmonoproplt10-oblique] [features=default] \definefontsynonym [LMTypewriterVarWd10-Light] [file:lmmonoprop10-regular] [features=default] \definefontsynonym [LMTypewriterVarWd10-LightOblique] [file:lmmonoprop10-oblique] [features=default] \definefontsynonym [LMTypewriterVarWd10-Dark] [file:lmmonoproplt10-bold] [features=default] \definefontsynonym [LMTypewriterVarWd10-DarkOblique] [file:lmmonoproplt10-boldoblique] [features=default] \stoptypescript \starttypescript [math] [modern,latin-modern] \definefontsynonym [LMMathRoman5-Regular] [rm-lmr5] \definefontsynonym [LMMathRoman6-Regular] [rm-lmr6] \definefontsynonym [LMMathRoman7-Regular] [rm-lmr7] \definefontsynonym [LMMathRoman8-Regular] [rm-lmr8] \definefontsynonym [LMMathRoman9-Regular] [rm-lmr9] \definefontsynonym [LMMathRoman10-Regular] [rm-lmr10] \definefontsynonym [LMMathRoman12-Regular] [rm-lmr12] \definefontsynonym [LMMathRoman17-Regular] [rm-lmr17] \definefontsynonym [LMMathRoman5-Bold] [rm-lmbx5] \definefontsynonym [LMMathRoman6-Bold] [rm-lmbx6] \definefontsynonym [LMMathRoman7-Bold] [rm-lmbx7] \definefontsynonym [LMMathRoman8-Bold] [rm-lmbx8] \definefontsynonym [LMMathRoman9-Bold] [rm-lmbx9] \definefontsynonym [LMMathRoman10-Bold] [rm-lmbx10] \definefontsynonym [LMMathRoman12-Bold] [rm-lmbx12] \definefontsynonym [LMMathSymbols5-BoldItalic] [lmbsy5] \definefontsynonym [LMMathSymbols7-BoldItalic] [lmbsy7] \definefontsynonym [LMMathSymbols10-BoldItalic][lmbsy10] \definefontsynonym [LMMathSymbols5-Italic] [lmsy5] \definefontsynonym [LMMathSymbols6-Italic] [lmsy6] \definefontsynonym [LMMathSymbols7-Italic] [lmsy7] \definefontsynonym [LMMathSymbols8-Italic] [lmsy8] \definefontsynonym [LMMathSymbols9-Italic] [lmsy9] \definefontsynonym [LMMathSymbols10-Italic] [lmsy10] \definefontsynonym [LMMathExtension10-Regular] [lmex10] \definefontsynonym [LMMathItalic5-Italic] [lmmi5] \definefontsynonym [LMMathItalic6-Italic] [lmmi6] \definefontsynonym [LMMathItalic7-Italic] [lmmi7] \definefontsynonym [LMMathItalic8-Italic] [lmmi8] \definefontsynonym [LMMathItalic9-Italic] [lmmi9] \definefontsynonym [LMMathItalic10-Italic] [lmmi10] \definefontsynonym [LMMathItalic12-Italic] [lmmi12] \definefontsynonym [LMMathItalic5-BoldItalic] [lmmib5] \definefontsynonym [LMMathItalic7-BoldItalic] [lmmib7] \definefontsynonym [LMMathItalic10-BoldItalic] [lmmib10] \loadmapfile[lm-math.map] \loadmapfile[lm-rm.map] \stoptypescript \starttypescript [serif] [modern,computer-modern,latin-modern] [name] \definefontsynonym [Serif] [LMRoman-Regular] \definefontsynonym [SerifBold] [LMRoman-Bold] \definefontsynonym [SerifItalic] [LMRoman-Italic] \definefontsynonym [SerifSlanted] [LMRoman-Oblique] \definefontsynonym [SerifBoldItalic] [LMRoman-BoldItalic] \definefontsynonym [SerifBoldSlanted] [LMRoman-BoldOblique] \definefontsynonym [SerifCaps] [LMRoman-CapsRegular] \definefontsynonym [SerifCapsSlanted] [LMRoman-CapsOblique] \stoptypescript \starttypescript [sans] [modern,computer-modern,latin-modern] [name] \definefontsynonym [Sans] [LMSans-Regular] \definefontsynonym [SansBold] [LMSans-Bold] \definefontsynonym [SansItalic] [LMSans-Oblique] \definefontsynonym [SansSlanted] [LMSans-Oblique] \definefontsynonym [SansBoldItalic] [LMSans-BoldOblique] \definefontsynonym [SansBoldSlanted] [LMSans-BoldOblique] \definefontsynonym [SansCaps] [LMSans-Regular] \definefontsynonym [SansCapsSlanted] [LMSans-Oblique] \stoptypescript \starttypescript [mono] [modern,computer-modern,latin-modern] [name] \definefontsynonym [Mono] [LMTypewriter-Regular] \definefontsynonym [MonoBold] [LMTypewriter-Dark] \definefontsynonym [MonoItalic] [LMTypewriter-Italic] \definefontsynonym [MonoSlanted] [LMTypewriter-Oblique] \definefontsynonym [MonoBoldItalic] [LMTypewriter-DarkOblique] \definefontsynonym [MonoBoldSlanted] [LMTypewriter-DarkOblique] \definefontsynonym [MonoCaps] [LMTypewriter-CapsRegular] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-CapsOblique] \definefontsynonym [MonoVariable] [LMTypewriterVarWd-Regular] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern] [name] \definefontsynonym [MathRoman] [LMMathRoman-Regular] \definefontsynonym [MathExtension] [LMMathExtension-Regular] \definefontsynonym [MathItalic] [LMMathItalic-Italic] \definefontsynonym [MathSymbol] [LMMathSymbols-Italic] \stoptypescript \starttypescript [boldmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [MathRoman] [LMMathRoman-Bold] \definefontsynonym [MathExtension] [LMMathExtension-Regular] \definefontsynonym [MathItalic] [LMMathItalic-BoldItalic] \definefontsynonym [MathSymbol] [LMMathSymbols-BoldItalic] \stoptypescript \starttypescript [bfmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [MathRomanBold] [LMMathRoman-Bold] \definefontsynonym [MathExtension] [LMMathExtension-Regular] \definefontsynonym [MathItalicBold] [LMMathItalic-BoldItalic] \definefontsynonym [MathSymbolBold] [LMMathSymbols-BoldItalic] \stoptypescript \starttypescript [math,boldmath,bfmath] [modern,computer-modern,latin-modern] [name] \usemathcollection[default] \stoptypescript \starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari] [name] \definefontsynonym [Serif] [LMTypewriterVarWd-Regular] \definefontsynonym [SerifBold] [LMTypewriterVarWd-Oblique] \definefontsynonym [SerifItalic] [LMTypewriterVarWd-Oblique] \definefontsynonym [SerifSlanted] [LMTypewriterVarWd-Dark] \definefontsynonym [SerifBoldItalic] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [SerifBoldSlanted] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [SerifCaps] [LMTypewriterVarWd-Regular] \definefontsynonym [SerifCapsSlanted] [LMTypewriterVarWd-Oblique] \stoptypescript \starttypescript [mono] [modern-cond,computer-modern-cond,latin-modern-cond,modern-lightcond,computer-modern-lightcond,latin-modern-lightcond] [name] \definefontsynonym [Mono] [LMTypewriter-LightCondensed] \definefontsynonym [MonoBold] [LMTypewriter-LightCondensed] \definefontsynonym [MonoItalic] [LMTypewriter-LightCondensedOblique] \definefontsynonym [MonoSlanted] [LMTypewriter-LightCondensedOblique] \definefontsynonym [MonoBoldItalic] [LMTypewriter-LightCondensed] \definefontsynonym [MonoBoldSlanted] [LMTypewriter-LightCondensed] \definefontsynonym [MonoCaps] [LMTypewriter-LightCondensed] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-LightCondensed] \stoptypescript \starttypescript [mono] [modern-light,computer-modern-light,latin-modern-light] [name] \definefontsynonym [Mono] [LMTypewriter-Light] \definefontsynonym [MonoBold] [LMTypewriter-Light] \definefontsynonym [MonoItalic] [LMTypewriter-LightOblique] \definefontsynonym [MonoSlanted] [LMTypewriter-LightOblique] \definefontsynonym [MonoBoldItalic] [LMTypewriter-Light] \definefontsynonym [MonoBoldSlanted] [LMTypewriter-Light] \definefontsynonym [MonoCaps] [LMTypewriter-Light] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-Light] \stoptypescript % Later we will map the real fonts, here we just map synonyms. \starttypescript [serif] [modern,latin-modern] \definefontsynonym [LMRoman-DemiOblique] [LMRoman10-DemiOblique] \definefontsynonym [LMRoman-Bold] [LMRoman10-Bold] \definefontsynonym [LMRoman-BoldItalic] [LMRoman10-BoldItalic] \definefontsynonym [LMRoman-BoldOblique] [LMRoman10-BoldOblique] \definefontsynonym [LMRoman-CapsRegular] [LMRoman10-CapsRegular] \definefontsynonym [LMRoman-CapsOblique] [LMRoman10-CapsOblique] \definefontsynonym [LMRoman-Regular] [LMRoman10-Regular] \definefontsynonym [LMRoman-Italic] [LMRoman10-Italic] \definefontsynonym [LMRoman-Oblique] [LMRoman10-Oblique] \stoptypescript \starttypescript [sans] [modern,latin-modern] \definefontsynonym [LMSans-Regular] [LMSans10-Regular] \definefontsynonym [LMSans-BoldOblique] [LMSans10-BoldOblique] \definefontsynonym [LMSans-Bold] [LMSans10-Bold] \definefontsynonym [LMSans-DemiCondensed] [LMSans10-DemiCondensed] \definefontsynonym [LMSans-DemiCondensedOblique] [LMSans10-DemiCondensedOblique] \definefontsynonym [LMSans-Oblique] [LMSans10-Oblique] \stoptypescript \starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond] \definefontsynonym [LMTypewriter-CapsRegular] [LMTypewriter10-CapsRegular] \definefontsynonym [LMTypewriter-CapsOblique] [LMTypewriter10-CapsOblique] \definefontsynonym [LMTypewriter-Light] [LMTypewriter10-Light] \definefontsynonym [LMTypewriter-LightOblique] [LMTypewriter10-LightOblique] \definefontsynonym [LMTypewriter-LightCondensed] [LMTypewriter10-LightCondensed] \definefontsynonym [LMTypewriter-LightCondensedOblique] [LMTypewriter10-LightCondensedOblique] \definefontsynonym [LMTypewriter-Dark] [LMTypewriter10-Dark] \definefontsynonym [LMTypewriter-DarkOblique] [LMTypewriter10-DarkOblique] \definefontsynonym [LMTypewriter-Regular] [LMTypewriter10-Regular] \definefontsynonym [LMTypewriter-Italic] [LMTypewriter10-Italic] \definefontsynonym [LMTypewriter-Oblique] [LMTypewriter10-Oblique] \definefontsynonym [LMTypewriterVarWd-Regular] [LMTypewriterVarWd10-Regular] \definefontsynonym [LMTypewriterVarWd-Oblique] [LMTypewriterVarWd10-Oblique] \definefontsynonym [LMTypewriterVarWd-Light] [LMTypewriterVarWd10-Light] \definefontsynonym [LMTypewriterVarWd-LightOblique] [LMTypewriterVarWd10-LightOblique] \definefontsynonym [LMTypewriterVarWd-Dark] [LMTypewriterVarWd10-Dark] \definefontsynonym [LMTypewriterVarWd-DarkOblique] [LMTypewriterVarWd10-DarkOblique] \stoptypescript \starttypescript [serif] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModern] [LMRoman-Regular] \definefontsynonym [ComputerModern-Italic] [LMRoman-Italic] \definefontsynonym [ComputerModern-Slanted] [LMRoman-Oblique] \definefontsynonym [ComputerModern-Bold] [LMRoman-Bold] \definefontsynonym [ComputerModern-BoldItalic] [LMRoman-BoldItalic] \definefontsynonym [ComputerModern-BoldSlanted] [LMRoman-BoldOblique] \definefontsynonym [ComputerModern-Caps] [LMRoman-CapsRegular] \definefontsynonym [ComputerModern-CapsSlanted] [LMRoman-CapsOblique] \stoptypescript \starttypescript [sans] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModernSans] [LMSans-Regular] \definefontsynonym [ComputerModernSans-Italic] [LMSans-Oblique] \definefontsynonym [ComputerModernSans-Slanted] [LMSans-Oblique] \definefontsynonym [ComputerModernSans-Bold] [LMSans-Bold] \definefontsynonym [ComputerModernSans-BoldItalic] [LMSans-BoldOblique] \definefontsynonym [ComputerModernSans-BoldSlanted] [LMSans-BoldOblique] \definefontsynonym [ComputerModernSans-Caps] [LMSans-Regular] % [LMSans-CapsRegular] \definefontsynonym [ComputerModernSans-CapsSlanted] [LMSans-Oblique] % [LMSans-CapsOblique] \stoptypescript \starttypescript [mono] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModernMono] [LMTypewriter-Regular] \definefontsynonym [ComputerModernMono-Italic] [LMTypewriter-Italic] \definefontsynonym [ComputerModernMono-Slanted] [LMTypewriter-Oblique] \definefontsynonym [ComputerModernMono-Bold] [LMTypewriter-Dark] \definefontsynonym [ComputerModernMono-BoldItalic] [LMTypewriter-DarkOblique] % ! \definefontsynonym [ComputerModernMono-BoldSlanted] [LMTypewriter-DarkOblique] \definefontsynonym [ComputerModernMono-Caps] [LMTypewriter-CapsRegular] \definefontsynonym [ComputerModernMono-CapsSlanted] [LMTypewriter-CapsOblique] \definefontsynonym [ComputerModernMono-Variable] [LMTypewriterVarWd-Regular] \stoptypescript \starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari] \definefontsynonym [ComputerModernVariable] [LMTypewriterVarWd-Regular] \definefontsynonym [ComputerModernVariable-Italic] [LMTypewriterVarWd-Oblique] \definefontsynonym [ComputerModernVariable-Slanted] [LMTypewriterVarWd-Oblique] \definefontsynonym [ComputerModernVariable-Bold] [LMTypewriterVarWd-Dark] \definefontsynonym [ComputerModernVariable-BoldItalic] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [ComputerModernVariable-BoldSlanted] [LMTypewriterVarWd-DarkOblique] \definefontsynonym [ComputerModernVariable-Caps] [LMTypewriterVarWd-Regular] \definefontsynonym [ComputerModernVariable-CapsSlanted] [LMTypewriterVarWd-Oblique] \stoptypescript \starttypescript [math] [modern,latin-modern] \definefontsynonym [LMMathRoman-Regular] [LMMathRoman10-Regular] \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold] \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic] \definefontsynonym [LMMathSymbols-Italic] [LMMathSymbols10-Italic] \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular] \definefontsynonym [LMMathItalic-Italic] [LMMathItalic10-Italic] \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic] \stoptypescript % can boldmath and bfmath be joined? \starttypescript [boldmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold] \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular] \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic] \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic] \stoptypescript \starttypescript [bfmath] [modern,computer-modern,latin-modern] [name] \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold] \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular] \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic] \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic] \stoptypescript \starttypescript [serif] [modern,latin-modern,computer-modern] \definefontsynonym [cmr5] [LMRoman5-Regular] \definefontsynonym [cmr6] [LMRoman6-Regular] \definefontsynonym [cmr7] [LMRoman7-Regular] \definefontsynonym [cmr8] [LMRoman8-Regular] \definefontsynonym [cmr9] [LMRoman9-Regular] \definefontsynonym [cmr10] [LMRoman10-Regular] \definefontsynonym [cmr12] [LMRoman12-Regular] \definefontsynonym [cmr17] [LMRoman17-Regular] \definefontsynonym [cmbx5] [LMRoman5-Bold] \definefontsynonym [cmbx6] [LMRoman6-Bold] \definefontsynonym [cmbx7] [LMRoman7-Bold] \definefontsynonym [cmbx8] [LMRoman8-Bold] \definefontsynonym [cmbx9] [LMRoman9-Bold] \definefontsynonym [cmbx10] [LMRoman10-Bold] \definefontsynonym [cmbx12] [LMRoman12-Bold] \definefontsynonym [cmsl10] [LMRoman10-Oblique] \definefontsynonym [cmsl12] [LMRoman12-Oblique] \definefontsynonym [cmsl17] [LMRoman17-Oblique] \definefontsynonym [cmsl8] [LMRoman8-Oblique] \definefontsynonym [cmsl9] [LMRoman9-Oblique] \definefontsynonym [cmti7] [LMRoman7-Italic] \definefontsynonym [cmti8] [LMRoman8-Italic] \definefontsynonym [cmti9] [LMRoman9-Italic] \definefontsynonym [cmti10] [LMRoman10-Italic] \definefontsynonym [cmti12] [LMRoman12-Italic] \definefontsynonym [cmbsl10] [LMRoman10-DemiOblique] \definefontsynonym [cmbxsl10] [LMRoman10-BoldOblique] \definefontsynonym [cmbxti10] [LMRoman10-BoldItalic] \definefontsynonym [cmcsc10] [LMRoman10-CapsRegular] \definefontsynonym [cmcscsl10][LMRoman10-CapsOblique] %definefontsynonym [cmb10] \stoptypescript \starttypescript [sans] [modern,latin-modern,computer-modern] \definefontsynonym [cmss8] [LMSans8-Regular] \definefontsynonym [cmss9] [LMSans9-Regular] \definefontsynonym [cmss10] [LMSans10-Regular] \definefontsynonym [cmss12] [LMSans12-Regular] \definefontsynonym [cmss17] [LMSans17-Regular] \definefontsynonym [cmssi10] [LMSans10-Oblique] \definefontsynonym [cmssi12] [LMSans12-Oblique] \definefontsynonym [cmssi17] [LMSans17-Oblique] \definefontsynonym [cmssi8] [LMSans8-Oblique] \definefontsynonym [cmssi9] [LMSans9-Oblique] \definefontsynonym [cmssq8] [LMSansQuotation8-Regular] \definefontsynonym [cmssqb8] [LMSansQuotation8-Bold] \definefontsynonym [cmssqbi8] [LMSansQuotation8-BoldOblique] \definefontsynonym [cmssqi8] [LMSansQuotation8-Oblique] \definefontsynonym [cmssbx10] [LMSans10-Bold] \definefontsynonym [cmssdc10] [LMSans10-DemiCondensed] \definefontsynonym [cmssbi10] [LMSans10-BoldOblique] \definefontsynonym [cmssdi10] [LMSans10-DemiCondensedOblique] \stoptypescript \starttypescript [mono] [modern,latin-modern,computer-modern] \definefontsynonym [cmtt8] [LMTypewriter8-Regular] \definefontsynonym [cmtt9] [LMTypewriter9-Regular] \definefontsynonym [cmtt10] [LMTypewriter10-Regular] \definefontsynonym [cmtt12] [LMTypewriter12-Regular] \definefontsynonym [cmitt10] [LMTypewriter10-Italic] \definefontsynonym [cmsltt10] [LMTypewriter10-Oblique] \definefontsynonym [cmvtt10] [LMTypewriterVarWd10-Regular] \definefontsynonym [cmvtti10] [LMTypewriterVarWd10-Oblique] \definefontsynonym [cmtcsc10] [LMTypewriter10-CapsRegular] \stoptypescript \starttypescript [math] [modern,latin-modern,computer-modern] \definefontsynonym [cmbsy5] [LMMathSymbols5-BoldItalic] \definefontsynonym [cmbsy7] [LMMathSymbols7-BoldItalic] \definefontsynonym [cmbsy10] [LMMathSymbols10-BoldItalic] \definefontsynonym [cmsy5] [LMMathSymbols5-Italic] \definefontsynonym [cmsy6] [LMMathSymbols6-Italic] \definefontsynonym [cmsy7] [LMMathSymbols7-Italic] \definefontsynonym [cmsy8] [LMMathSymbols8-Italic] \definefontsynonym [cmsy9] [LMMathSymbols9-Italic] \definefontsynonym [cmsy10] [LMMathSymbols10-Italic] \definefontsynonym [cmex10] [LMMathExtension10-Regular] \definefontsynonym [cmmi5] [LMMathItalic5-Italic] \definefontsynonym [cmmi6] [LMMathItalic6-Italic] \definefontsynonym [cmmi7] [LMMathItalic7-Italic] \definefontsynonym [cmmi8] [LMMathItalic8-Italic] \definefontsynonym [cmmi9] [LMMathItalic9-Italic] \definefontsynonym [cmmi10] [LMMathItalic10-Italic] \definefontsynonym [cmmi12] [LMMathItalic12-Italic] \definefontsynonym [cmmib5] [LMMathItalic5-BoldItalic] \definefontsynonym [cmmib7] [LMMathItalic7-BoldItalic] \definefontsynonym [cmmib10] [LMMathItalic10-BoldItalic] \stoptypescript % This will change some day. \starttypescript [math] [modern,computer-modern,latin-modern] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [msbm10] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [cmsy10] \stoptypescript % Concrete Modern Roman : Donald Knuth \starttypescript [serif] [concrete] [name] \definefontsynonym [Serif] [ComputerConcrete] \definefontsynonym [SerifBold] [ComputerConcrete] \definefontsynonym [SerifItalic] [ComputerConcrete-Italic] \definefontsynonym [SerifSlanted] [ComputerConcrete-Slanted] \definefontsynonym [SerifBoldItalic] [ComputerConcrete-Italic] \definefontsynonym [SerifBoldSlanted] [ComputerConcrete-Slanted] \definefontsynonym [SerifCaps] [ComputerConcrete-Caps] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10] \definefontsynonym [ComputerModernMath-Extension] [lmex10] \definefontsynonym [ComputerModernMath-Italic] [lmmi10] \definefontsynonym [ComputerModernMath-Symbol] [lmsy10] \stoptypescript \starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern] \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10] \definefontsynonym [ComputerModernMath-Extension] [lmex10] \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10] \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10] \stoptypescript \starttypescript [modern] \definetypeface [modern] [rm] [serif] [modern] [computer-modern] [features=default] \definetypeface [modern] [ss] [sans] [modern] [computer-modern] [features=default] \definetypeface [modern] [tt] [mono] [modern] [computer-modern] [features=default] \definetypeface [modern] [mm] [math] [modern] [computer-modern] \quittypescriptscanning \stoptypescript \starttypescript [modern-base] \definetypeface [modern] [rm] [serif] [modern] [default] [features=default] \definetypeface [modern] [ss] [sans] [modern] [default] [features=default] \definetypeface [modern] [tt] [mono] [modern] [default] [features=default] \definetypeface [modern] [mm] [math] [modern] [default] \quittypescriptscanning \stoptypescript \starttypescript [modernvariable] \definetypeface [modernvariable] [rm] [serif] [simple] [default] [features=default] \definetypeface [modernvariable] [ss] [sans] [modern] [default] [features=default] \definetypeface [modernvariable] [tt] [mono] [modern] [default] [features=default] \definetypeface [modernvariable] [mm] [math] [modern] [default] \quittypescriptscanning \stoptypescript \starttypescript [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it \definefontsynonym [Simple] [cmvtt10] \setupfontsynonym [Simple] [handling=pure] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[concrete] % Computer Concrete (AMS) \starttypescript [serif] [concrete] \definefontsynonym [ComputerConcrete] [ccr10] \definefontsynonym [ComputerConcrete-Italic] [ccti10] \definefontsynonym [ComputerConcrete-Slanted] [ccsl10] \definefontsynonym [ComputerConcrete-Bold] [ComputerConcrete] \definefontsynonym [ComputerConcrete-BoldItalic] [ComputerConcrete-Italic] \definefontsynonym [ComputerConcrete-BoldSlanted] [ComputerConcrete-Slanted] \definefontsynonym [ComputerConcrete-Caps] [cccsc10] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[euler] \starttypescript [math] [euler] \definefontsynonym [Euler-Roman] [zeurm10] \definefontsynonym [Euler-Extension] [zeuex10] \definefontsynonym [Euler-Symbol] [zeusm10] \definefontsynonym [Euler-Fraktur] [eufm10] \loadmapfile[original-ams-euler.map] \stoptypescript \starttypescript [boldmath,bfmath] [euler] \definefontsynonym [Euler-Roman-Bold] [zeurb10] \definefontsynonym [Euler-Extension] [zeuex10] \definefontsynonym [Euler-Symbol-Bold] [zeusb10] \definefontsynonym [Euler-Fraktur-Bold] [eufb10] \loadmapfile[original-ams-euler.map] \stoptypescript \starttypescript [math] [euler] [name] \definefontsynonym [MathRoman] [Euler-Roman] % mr \definefontsynonym [MathItalic] [Euler-Fraktur] % mi \definefontsynonym [MathExtension] [Euler-Extension] % ex \definefontsynonym [MathSymbol] [Euler-Symbol] % sy \stoptypescript \starttypescript [boldmath] [euler] [name] \definefontsynonym [MathRoman] [Euler-Roman-Bold] % mr \definefontsynonym [MathItalic] [Euler-Fraktur-Bold] % mi \definefontsynonym [MathExtension] [Euler-Extension] % ex \definefontsynonym [MathSymbol] [Euler-Symbol-Bold] % sy \stoptypescript \starttypescript [bfmath] [euler] [name] \definefontsynonym [MathRomanBold] [Euler-Roman-Bold] % mr \definefontsynonym [MathItalicBold] [Euler-Fraktur-Bold] % mi \definefontsynonym [MathExtension] [Euler-Extension] % ex \definefontsynonym [MathSymbolBold] [Euler-Symbol-Bold] % sy \stoptypescript \starttypescript [math] [euler] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [MathItalic] \definefontsynonym [Gothic] [MathItalic] \definefontsynonym [Calligraphic] [MathSymbol] \stoptypescript \starttypescript [boldmath] [euler] [name] \definefontsynonym [OldStyle] [MathItalicBold] \definefontsynonym [Fraktur] [MathItalicBold] \definefontsynonym [Gothic] [MathItalicBold] \definefontsynonym [Calligraphic] [MathSymbolBold] \stoptypescript \starttypescript [math,boldmath,bfmath] [euler] [name] \usemathcollection[eul] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[amssymbols] \starttypescript [math] [modern,computer-modern,latin-modern,ams] [name] \definefontsynonym [MathAlpha] [AMS-SymbolA] \definefontsynonym [MathBeta] [AMS-SymbolB] \stoptypescript \starttypescript [math] [modern,computer-modern,latin-modern,ams] \definefontsynonym [AMS-SymbolA] [msam10] \definefontsynonym [AMS-SymbolB] [msbm10] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[texgyre] \definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:palatino] [pagella] \definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:times] [termes] \definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:helvetica] [heros] \definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:bookman] [bonum] \definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:schoolbook] [schola] \definetypescriptprefix [f:adventor][adventor] %definetypescriptprefix [f:adventor] [adventor] \definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:courier] [cursor] \definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:chancery] [chorus] % not the full set % \starttypescript [serif,sans,mono] [adventor,bonum,cursor,heros,pagella,palatino,schola,termes] % \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [name] \starttypescript [serif,sans,mono] [adventor,bonum,bookman,cursor,courier,heros,helvetica,pagella,palatino,schola,schoolbook,termes,times] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [features=smallcaps] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=smallcaps] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=smallcaps] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=smallcaps] \stoptypescript \starttypescript [serif,calligraphy] [chorus,chancery] \definefontsynonym [TeXGyreChorus-MediumItalic] [file:texgyrechorus-mediumitalic] [features=default] \stoptypescript \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella] \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes] \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros] \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum] \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola] \definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor] \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor] \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [name] \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [SerifCaps] \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps] \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps] \definefontsynonym [SerifCapsCaps] [SerifCaps] \stoptypescript \starttypescript [serif] [chorus,chancery] [name] \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic] \definefontsynonym [Serif] [SerifMediumItalic] \definefontsynonym [SerifItalic] [SerifMediumItalic] \definefontsynonym [SerifBold] [SerifMediumItalic] \definefontsynonym [SerifBoldItalic] [SerifMediumItalic] \definefontsynonym [SerifSlanted] [SerifMediumItalic] \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic] \definefontsynonym [SerifCaps] [SerifMediumItalic] \stoptypescript \starttypescript [calligraphy] [chorus,chancery] [name] \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic] \stoptypescript \starttypescript [sans] [heros,helvetica,adventor] [name] \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontvariant [Sans][osf][Caps] \definefontvariant [Sans][sc] [Caps] \definefontsynonym [SansRegular] [Sans] \definefontsynonym [SansRegularCaps] [SansCaps] \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [SansSlantedCaps] [SansItalicCaps] \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps] \definefontsynonym [SansCapsCaps] [SansCaps] \stoptypescript \starttypescript [mono] [cursor,courier] [name] \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [MonoSlanted] [MonoItalic] \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic] \definefontvariant [Mono][osf][Caps] \definefontvariant [Mono][sc] [Caps] \definefontsynonym [MonoRegular] [Mono] \definefontsynonym [MonoRegularCaps] [MonoCaps] \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps] \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps] \definefontsynonym [MonoCapsCaps] [MonoCaps] \stoptypescript \starttypescript [times,termes] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [features=default,rscale=0.9] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.05] \definetypeface [\typescriptone] [mm] [math] [times] [default] \quittypescriptscanning \stoptypescript \starttypescript [palatino,pagella] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [features=default,rscale=1.075] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.075] \definetypeface [\typescriptone] [mm] [math] [palatino] [default] \quittypescriptscanning \stoptypescript \starttypescript [schoolbook,schola] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [features=default,rscale=1.1] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.1] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript [bookman,bonum] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [features=default,rscale=1.1] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.1] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript [chancery,chorus] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [features=default] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default] \definetypeface [\typescriptone] [mm] [math] [modern] [default] \quittypescriptscanning \stoptypescript \starttypescript [helvetica,heros] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [features=default,rscale=1.15] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.15] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.15] \quittypescriptscanning \stoptypescript \starttypescript [avantgarde,adventor] \definetypeface [\typescriptone] [ss] [sans] [adventor] [default] [features=default] \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [features=default,rscale=1.15] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.15] \definetypeface [\typescriptone] [mm] [math] [modern] [default] \quittypescriptscanning \stoptypescript \starttypescript [courier,cursor] \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [features=default] \definetypeface [\typescriptone] [mm] [math] [modern] [default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[xmath] \starttypescript [math] [times] [all] \definefontsynonym [Times-Roman-Upright] [txr] \definefontsynonym [Times-Roman-Italic] [txi] \definefontsynonym [Times-Roman-Slanted] [txsl] \definefontsynonym [Times-Roman-Caps] [txsc] \definefontsynonym [Times-Companion-Upright] [tcxr] \definefontsynonym [Times-Companion-Italic] [tcxi] \definefontsynonym [Times-Companion-Slanted] [tcxsl] \definefontsynonym [Times-Math-Italic] [txmi] \definefontsynonym [Times-Math-Symbols] [txsy] \definefontsynonym [Times-Math-Extension] [txex] \definefontsynonym [Times-Math-SymbolsA] [txsya] \definefontsynonym [Times-Math-SymbolsB] [txsyb] \definefontsynonym [Times-Math-SymbolsC] [txsyc] \definefontsynonym [Times-Math-Italic-A] [txmia] \definefontsynonym [Times-Math-Extension-A] [txexa] \loadmapfile[original-youngryu-tx.map] \usemathcollection[default] \stoptypescript \starttypescript [math] [times] [name] \definefontsynonym [MathRoman] [Times-Roman-Upright] \definefontsynonym [MathExtension] [Times-Math-Extension] \definefontsynonym [MathItalic] [Times-Math-Italic] \definefontsynonym [MathSymbol] [Times-Math-Symbols] \definefontsynonym [MathAlpha] [Times-Math-SymbolsA] \definefontsynonym [MathBeta] [Times-Math-SymbolsB] \stoptypescript \starttypescript [math] [times] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [MathBeta] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [eusm10] \stoptypescript \starttypescript [math] [palatino] [all] \definefontsynonym [Palatino-Roman-Upright] [pxr] \definefontsynonym [Palatino-Roman-Italic] [pxi] \definefontsynonym [Palatino-Roman-Slanted] [pxsl] \definefontsynonym [Palatino-Roman-Caps] [pxsc] \definefontsynonym [Palatino-Companion-Upright] [pcxr] \definefontsynonym [Palatino-Companion-Italic] [pcxi] \definefontsynonym [Palatino-Companion-Slanted] [pcxsl] \definefontsynonym [Palatino-Math-Italic] [pxmi] \definefontsynonym [Palatino-Math-Symbols] [pxsy] \definefontsynonym [Palatino-Math-Extension] [pxex] \definefontsynonym [Palatino-Math-SymbolsA] [pxsya] \definefontsynonym [Palatino-Math-SymbolsB] [pxsyb] \definefontsynonym [Palatino-Math-SymbolsC] [pxsyc] \definefontsynonym [Palatino-Math-Italic-A] [pxmia] \definefontsynonym [Palatino-Math-Extension-A] [pxexa] \loadmapfile[original-youngryu-px.map] \usemathcollection[default] \stoptypescript \starttypescript [math] [palatino] [name] \definefontsynonym [MathRoman] [Palatino-Roman-Upright] \definefontsynonym [MathExtension] [Palatino-Math-Extension] \definefontsynonym [MathItalic] [Palatino-Math-Italic] \definefontsynonym [MathSymbol] [Palatino-Math-Symbols] \definefontsynonym [MathAlpha] [Palatino-Math-SymbolsA] \definefontsynonym [MathBeta] [Palatino-Math-SymbolsB] \stoptypescript \starttypescript [math] [palatino] [name] \definefontsynonym [OldStyle] [MathItalic] \definefontsynonym [Fraktur] [eufm10] \definefontsynonym [Blackboard] [MathBeta] \definefontsynonym [Gothic] [eufm10] \definefontsynonym [Calligraphic] [eusm10] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[antykwa] % Antykwa Torunska (GUST) \starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] \definefontsynonym [AntykwaTorunska-Regular] [file:AntykwaTorunska-Regular] [features=default] \definefontsynonym [AntykwaTorunska-Italic] [file:AntykwaTorunska-Italic] [features=default] \definefontsynonym [AntykwaTorunska-Bold] [file:AntykwaTorunska-Bold] [features=default] \definefontsynonym [AntykwaTorunska-BoldItalic] [file:AntykwaTorunska-BoldItalic] [features=default] \definefontsynonym [AntykwaTorunska-Light] [file:AntykwaTorunskaLight-Regular] [features=default] \definefontsynonym [AntykwaTorunska-LightItalic] [file:AntykwaTorunskaLight-Italic] [features=default] \definefontsynonym [AntykwaTorunska-Medium] [file:AntykwaTorunskaMed-Regular] [features=default] \definefontsynonym [AntykwaTorunska-MedItalic] [file:AntykwaTorunskaMed-Italic] [features=default] \definefontsynonym [AntykwaTorunska-CondRegular] [file:AntykwaTorunskaCond-Regular] [features=default] \definefontsynonym [AntykwaTorunska-CondItalic] [file:AntykwaTorunskaCond-Italic] [features=default] \definefontsynonym [AntykwaTorunska-CondBold] [file:AntykwaTorunskaCond-Bold] [features=default] \definefontsynonym [AntykwaTorunska-CondBoldItalic] [file:AntykwaTorunskaCond-BoldItalic] [features=default] \definefontsynonym [AntykwaTorunska-CondLight] [file:AntykwaTorunskaCondLight-Regular] [features=default] \definefontsynonym [AntykwaTorunska-CondLightItalic] [file:AntykwaTorunskaCondLight-Italic] [features=default] \definefontsynonym [AntykwaTorunska-CondMedium] [file:AntykwaTorunskaCondMed-Regular] [features=default] \definefontsynonym [AntykwaTorunska-CondMedItalic] [file:AntykwaTorunskaCondMed-Italic] [features=default] \definefontsynonym [AntykwaTorunska-Cap] [file:AntykwaTorunska-Regular] [features=smallcaps] \definefontsynonym [AntykwaTorunska-ItalicCap] [file:AntykwaTorunska-Italic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-BoldCap] [file:AntykwaTorunska-Bold] [features=smallcaps] \definefontsynonym [AntykwaTorunska-BoldItalicCap] [file:AntykwaTorunska-BoldItalic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-LightCap] [file:AntykwaTorunskaLight-Regular] [features=smallcaps] \definefontsynonym [AntykwaTorunska-LightItalicCap] [file:AntykwaTorunskaLight-Italic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-MediumCap] [file:AntykwaTorunskaMed-Regular] [features=smallcaps] \definefontsynonym [AntykwaTorunska-MedItalicCap] [file:AntykwaTorunskaMed-Italic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondCap] [file:AntykwaTorunskaCond-Regular] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondItalicCap] [file:AntykwaTorunskaCond-Italic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondBoldCap] [file:AntykwaTorunskaCond-Bold] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [file:AntykwaTorunskaCond-BoldItalic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondLightCap] [file:AntykwaTorunskaCondLight-Regular] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondLightItalicCap][file:AntykwaTorunskaCondLight-Italic] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondMediumCap] [file:AntykwaTorunskaCondMed-Regular] [features=smallcaps] \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [file:AntykwaTorunskaCondMed-Italic] [features=smallcaps] \stoptypescript \starttypescript [math] [antykwa-torunska] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-Regular] [rm-anttr] \definefontsynonym [AntykwaTorunska-Math-Letters-Italic] [mi-anttri] \definefontsynonym [AntykwaTorunska-Math-Symbols-Regular] [sy-anttrz] \definefontsynonym [AntykwaTorunska-Math-Extension-Regular] [ex-anttr] \stoptypescript \starttypescript [math] [antykwa-torunska-light] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-Light] [rm-anttl] \definefontsynonym [AntykwaTorunska-Math-Letters-LightItalic] [mi-anttli] \definefontsynonym [AntykwaTorunska-Math-Symbols-Light] [sy-anttlz] \definefontsynonym [AntykwaTorunska-Math-Extension-Light] [ex-anttl] \stoptypescript \starttypescript [math] [antykwa-torunska-cond] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-CondRegular] [rm-anttcr] \definefontsynonym [AntykwaTorunska-Math-Letters-CondItalic] [mi-anttcri] \definefontsynonym [AntykwaTorunska-Math-Symbols-CondRegular] [sy-anttcrz] \definefontsynonym [AntykwaTorunska-Math-Extension-CondRegular] [ex-anttcr] \stoptypescript \starttypescript [math] [antykwa-torunska-lightcond] [default] \definefontsynonym [AntykwaTorunska-Math-Letters-CondLight] [rm-anttcl] \definefontsynonym [AntykwaTorunska-Math-Letters-CondLightItalic] [mi-anttcli] \definefontsynonym [AntykwaTorunska-Math-Symbols-CondLight] [sy-anttclz] \definefontsynonym [AntykwaTorunska-Math-Extension-CondLight] [ex-anttcl] \stoptypescript \starttypescript [math] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] \usemathcollection[default] \loadmapfile[antt-rm.map] \loadmapfile[antt-mi.map] \loadmapfile[antt-sy.map] \loadmapfile[antt-ex.map] \stoptypescript \starttypescript [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] \definetypeface[antykwa][rm][serif][\typescriptone] [default] [features=default] \definetypeface[antykwa][ss][sans] [modern] [default] [features=default,rscale=1.05] \definetypeface[antykwa][tt][mono] [modern] [default] [features=default,rscale=1.05] \definetypeface[antykwa][mm][math] [\typescriptone] [default] \quittypescriptscanning \stoptypescript \starttypescript [serif] [antykwa-torunska] [name] \definefontsynonym [Serif] [AntykwaTorunska-Regular] \definefontsynonym [SerifBold] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalic] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-Cap] \stoptypescript \starttypescript [serif] [antykwa-torunska-light] [name] \definefontsynonym [Serif] [AntykwaTorunska-Light] \definefontsynonym [SerifBold] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalic] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-LightCap] \stoptypescript \starttypescript [serif] [antykwa-torunska-cond] [name] \definefontsynonym [Serif] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBold] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalic] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-CondCap] \stoptypescript \starttypescript [serif] [antykwa-torunska-lightcond] [name] \definefontsynonym [Serif] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBold] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalic] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlanted] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCaps] [AntykwaTorunska-CondLightCap] \stoptypescript \starttypescript [serif] [antykwa-torunska] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-Cap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-BoldCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-ItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-ItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-BoldItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-BoldItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-Cap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularLight] [AntykwaTorunska-Light] \definefontsynonym [SerifBoldLight] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalicLight] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCapsLight] [AntykwaTorunska-LightCap] \definefontvariant [Serif][lt][Light] \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondCap] \definefontvariant [Serif][cond][Cond] \stoptypescript \starttypescript [serif] [antykwa-torunska-light] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-LightCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-MediumCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-LightItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-LightItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-MedItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-MedItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-LightCap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularDark] [AntykwaTorunska-Regular] \definefontsynonym [SerifBoldDark] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalicDark] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCapsDark] [AntykwaTorunska-Cap] \definefontvariant [Serif][dk][Dark] \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondLightCap] \definefontvariant [Serif][cond][Cond] \stoptypescript \starttypescript [serif] [antykwa-torunska-cond] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondBoldCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondBoldItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondBoldItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondCap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularLight] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBoldLight] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalicLight] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCapsLight] [AntykwaTorunska-CondLightCap] \definefontvariant [Serif][lt][Light] \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Regular] \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalicExp] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCapsExp] [AntykwaTorunska-Cap] \definefontvariant [Serif][exp][Exp] \stoptypescript \starttypescript [serif] [antykwa-torunska-lightcond] [name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondLightCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondMediumCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondLightItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondLightItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondMedItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondMedItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondLightCap] \definefontvariant [Serif][osf][Caps] \definefontvariant [Serif][sc] [Caps] \definefontsynonym [SerifRegularDark] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBoldDark] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalicDark] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCapsDark] [AntykwaTorunska-CondCap] \definefontvariant [Serif][dk][Dark] \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Light] \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalicExp] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCapsExp] [AntykwaTorunska-LightCap] \definefontvariant [Serif][exp][Exp] \stoptypescript % maybe no -Regular etc \starttypescript [math] [antykwa-torunska-light] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-Light] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-LightItalic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-Light] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-Light] \stoptypescript \starttypescript [math] [antykwa-torunska] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-Regular] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-Italic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-Regular] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-Regular] \stoptypescript \starttypescript [math] [antykwa-torunska-cond] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-CondRegular] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-CondItalic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-CondRegular] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-CondRegular] \stoptypescript \starttypescript [math] [antykwa-torunska-lightcond] [name] \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-CondLight] \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-CondLightItalic] \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-CondLight] \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-CondLight] \stoptypescript % Antykwa Poltawskiego (GUST) % \starttypescript [serif] [antykwa-poltawskiego] % \definefontsynonym [AntykwaPoltawskiego-Regular] [antpr] % \definefontsynonym [AntykwaPoltawskiego-Bold] [antpb] % \definefontsynonym [AntykwaPoltawskiego-Italic] [antpri] % \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [antpbi] % \stoptypescript % \starttypescript [serif] [antykwa-poltawskiego] [name] % \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular] % \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold] % \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic] % \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic] % \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-Bold] % \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-Bold] % \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-Regular] % \stoptypescript % names of "Caps" may still change \starttypescript [serif] [antykwa-poltawskiego,antykwa-poltawskiego-light] \definefontsynonym [AntykwaPoltawskiego-Condensed-Light] [\s!file:antpoltltcond-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-LightItalic] [\s!file:antpoltltcond-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-Regular] [\s!file:antpoltcond-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-Italic] [\s!file:antpoltcond-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-Medium] [\s!file:antpoltltcond-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-MediumItalic] [\s!file:antpoltltcond-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-Bold] [\s!file:antpoltcond-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-BoldItalic] [\s!file:antpoltcond-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLight] [\s!file:antpoltltcond-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLightItalic] [\s!file:antpoltltcond-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsRegular] [\s!file:antpoltcond-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsItalic] [\s!file:antpoltcond-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMedium] [\s!file:antpoltltcond-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMediumItalic] [\s!file:antpoltltcond-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBold] [\s!file:antpoltcond-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBoldItalic] [\s!file:antpoltcond-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Light] [\s!file:antpoltltsemicond-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-LightItalic] [\s!file:antpoltltsemicond-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\s!file:antpoltsemicond-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\s!file:antpoltsemicond-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Medium] [\s!file:antpoltltsemicond-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-MediumItalic] [\s!file:antpoltltsemicond-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Bold] [\s!file:antpoltsemicond-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-BoldItalic] [\s!file:antpoltsemicond-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsLight] [\s!file:antpoltltsemicond-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsLightItalic] [\s!file:antpoltltsemicond-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\s!file:antpoltsemicond-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\s!file:antpoltsemicond-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMedium] [\s!file:antpoltltsemicond-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMediumItalic] [\s!file:antpoltltsemicond-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBold] [\s!file:antpoltsemicond-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBoldItalic] [\s!file:antpoltsemicond-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Light] [\s!file:antpoltlt-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-LightItalic] [\s!file:antpoltlt-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Regular] [\s!file:antpolt-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Italic] [\s!file:antpolt-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Medium] [\s!file:antpoltlt-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-MediumItalic] [\s!file:antpoltlt-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Bold] [\s!file:antpolt-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [\s!file:antpolt-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-CapsLight] [\s!file:antpoltcond-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsLightItalic] [\s!file:antpoltcond-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsRegular] [\s!file:antpolt-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsItalic] [\s!file:antpolt-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsMedium] [\s!file:antpoltcond-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsMediumItalic] [\s!file:antpoltcond-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsBold] [\s!file:antpolt-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-CapsBoldItalic] [\s!file:antpolt-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Light] [\s!file:antpoltltsemiexpd-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-LightItalic] [\s!file:antpoltltsemiexpd-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Regular] [\s!file:antpoltsemiexpd-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Italic] [\s!file:antpoltsemiexpd-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Medium] [\s!file:antpoltltsemiexpd-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-MediumItalic] [\s!file:antpoltltsemiexpd-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-Bold] [\s!file:antpoltsemiexpd-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-BoldItalic] [\s!file:antpoltsemiexpd-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsLight] [\s!file:antpoltltsemiexpd-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsLightItalic] [\s!file:antpoltltsemiexpd-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsRegular] [\s!file:antpoltsemiexpd-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsItalic] [\s!file:antpoltsemiexpd-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsMedium] [\s!file:antpoltltsemiexpd-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsMediumItalic] [\s!file:antpoltltsemiexpd-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsBold] [\s!file:antpoltsemiexpd-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-SemiExpanded-CapsBoldItalic] [\s!file:antpoltsemiexpd-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-Light] [\s!file:antpoltltexpd-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-LightItalic] [\s!file:antpoltltexpd-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-Regular] [\s!file:antpoltexpd-regular] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-Italic] [\s!file:antpoltexpd-italic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-Medium] [\s!file:antpoltltexpd-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-MediumItalic] [\s!file:antpoltltexpd-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-Bold] [\s!file:antpoltexpd-bold] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-BoldItalic] [\s!file:antpoltexpd-bolditalic] [\s!features=\s!default] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsLight] [\s!file:antpoltltexpd-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsLightItalic] [\s!file:antpoltltexpd-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsRegular] [\s!file:antpoltexpd-regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsItalic] [\s!file:antpoltexpd-italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsMedium] [\s!file:antpoltltexpd-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsMediumItalic] [\s!file:antpoltltexpd-bolditalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsBold] [\s!file:antpoltexpd-bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaPoltawskiego-Expanded-CapsBoldItalic] [\s!file:antpoltexpd-bolditalic] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [serif] [antykwa-poltawskiego] [name] \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular] \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold] \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic] \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic] \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-BoldItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-BoldItalic] \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsRegular] \stoptypescript \starttypescript [serif] [antykwa-poltawskiego-light] [name] \definefontsynonym [Serif] [AntykwaPoltawskiego-Light] \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Medium] \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-LightItalic] \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-LightItalic] \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-MediumItalic] \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-MediumItalic] \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsLight] \stoptypescript % condensed and extended variants are still missing \starttypescript [antykwa-poltawskiego,antykwa-poltawskiego-light] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [features=default,rscale=1.05] \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [features=default,rscale=1.05] \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.05] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[iwona] % maybe this will change in Iwona-Math-Letters and Iwona-Math-Letters-Italic % These names are a depressing mess. They have changed over time and are % still not consistent. I'd expect Bold-Regular and Bold-Italic. \starttypescript [sans] [iwona-light,iwona,iwona-medium,iwona-heavy,iwona-light-cond,iwona-cond,iwona-medium-cond,iwona-heavy-cond] \definefontsynonym [Iwona-Regular] [file:Iwona-Regular] [features=default] \definefontsynonym [Iwona-Italic] [file:Iwona-Italic] [features=default] \definefontsynonym [Iwona-Bold] [file:Iwona-Bold] [features=default] \definefontsynonym [Iwona-BoldItalic] [file:Iwona-BoldItalic] [features=default] \definefontsynonym [Iwona-Light-Regular] [file:IwonaLight-Regular] [features=default] \definefontsynonym [Iwona-Light-Italic] [file:IwonaLight-Italic] [features=default] \definefontsynonym [Iwona-Medium-Regular] [file:IwonaMedium-Regular] [features=default] \definefontsynonym [Iwona-Medium-Italic] [file:IwonaMedium-Italic] [features=default] \definefontsynonym [Iwona-Heavy-Regular] [file:IwonaHeavy-Regular] [features=default] \definefontsynonym [Iwona-Heavy-Italic] [file:IwonaHeavy-Italic] [features=default] \definefontsynonym [Iwona-CapsRegular] [file:Iwona-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsItalic] [file:Iwona-Italic] [features=smallcaps] \definefontsynonym [Iwona-CapsBold] [file:Iwona-Bold] [features=smallcaps] \definefontsynonym [Iwona-CapsBoldItalic] [file:Iwona-BoldItalic] [features=smallcaps] \definefontsynonym [Iwona-CapsLight] [file:IwonaLight-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsLight-Italic] [file:IwonaLight-Italic] [features=smallcaps] \definefontsynonym [Iwona-CapsMedium] [file:IwonaMedium-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsMedium-Italic] [file:IwonaMedium-Italic] [features=smallcaps] \definefontsynonym [Iwona-CapsHeavy] [file:IwonaHeavy-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsHeavy-Italic] [file:IwonaHeavy-Italic] [features=smallcaps] \definefontsynonym [Iwona-CondRegular] [file:IwonaCond-Regular] [features=default] \definefontsynonym [Iwona-CondItalic] [file:IwonaCond-Italic] [features=default] \definefontsynonym [Iwona-CondBold] [file:IwonaCond-Bold] [features=default] \definefontsynonym [Iwona-CondBoldItalic] [file:IwonaCond-BoldItalic] [features=default] \definefontsynonym [Iwona-CondLight-Regular] [file:IwonaCondLight-Regular] [features=default] \definefontsynonym [Iwona-CondLight-Italic] [file:IwonaCondLight-Italic] [features=default] \definefontsynonym [Iwona-CondMedium-Regular] [file:IwonaCondMedium-Regular] [features=default] \definefontsynonym [Iwona-CondMedium-Italic] [file:IwonaCondMedium-Italic] [features=default] \definefontsynonym [Iwona-CondHeavy-Regular] [file:IwonaCondHeavy-Regular] [features=default] \definefontsynonym [Iwona-CondHeavy-Italic] [file:IwonaCondHeavy-Italic] [features=default] \definefontsynonym [Iwona-CapsCondRegular] [file:IwonaCond-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsCondItalic] [file:IwonaCond-Italic] [features=smallcaps] \definefontsynonym [Iwona-CapsCondBold] [file:IwonaCond-Bold] [features=smallcaps] \definefontsynonym [Iwona-CapsCondBoldItalic] [file:IwonaCond-BoldItalic] [features=smallcaps] \definefontsynonym [Iwona-CapsCondLight-Regular] [file:IwonaCondLight-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsCondLight-Italic] [file:IwonaCondLight-Italic] [features=smallcaps] \definefontsynonym [Iwona-CapsCondMedium-Regular][file:IwonaCondMedium-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsCondMedium-Italic] [file:IwonaCondMedium-Italic] [features=smallcaps] \definefontsynonym [Iwona-CapsCondHeavy-Regular] [file:IwonaCondHeavy-Regular] [features=smallcaps] \definefontsynonym [Iwona-CapsCondHeavy-Italic] [file:IwonaCondHeavy-Italic] [features=smallcaps] \stoptypescript \starttypescript [math] [iwona] [default] \definefontsynonym [Iwona-Math-Letters-Regular] [rm-iwonar] \definefontsynonym [Iwona-Math-Letters-Italic] [mi-iwonari] \definefontsynonym [Iwona-Math-Symbols-Regular] [sy-iwonarz] \definefontsynonym [Iwona-Math-Extension-Regular] [ex-iwonar] \stoptypescript \starttypescript [math] [iwona-light] [default] \definefontsynonym [Iwona-Math-Letters-Light-Regular] [rm-iwonal] \definefontsynonym [Iwona-Math-Letters-Light-Italic] [mi-iwonali] \definefontsynonym [Iwona-Math-Symbols-Light] [sy-iwonalz] \definefontsynonym [Iwona-Math-Extension-Light] [ex-iwonal] \stoptypescript \starttypescript [math] [iwona-medium] [default] \definefontsynonym [Iwona-Math-Letters-Medium-Regular][rm-iwonam] \definefontsynonym [Iwona-Math-Letters-Medium-Italic] [mi-iwonami] \definefontsynonym [Iwona-Math-Symbols-Medium] [sy-iwonamz] \definefontsynonym [Iwona-Math-Extension-Medium] [ex-iwonam] \stoptypescript \starttypescript [math] [iwona-heavy] [default] \definefontsynonym [Iwona-Math-Letters-Heavy-Regular] [rm-iwonah] \definefontsynonym [Iwona-Math-Letters-Heavy-Italic] [mi-iwonahi] \definefontsynonym [Iwona-Math-Symbols-Heavy] [sy-iwonahz] \definefontsynonym [Iwona-Math-Extension-Heavy] [ex-iwonah] \stoptypescript \starttypescript [math] [iwona,iwona-light,iwona-medium,iwona-heavy] [default] \usemathcollection[default] \loadmapfile[iwona-rm.map] \loadmapfile[iwona-mi.map] \loadmapfile[iwona-sy.map] \loadmapfile[iwona-ex.map] \stoptypescript \starttypescript [sans] [iwona-light] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Light-Regular] \definefontsynonym [SansItalic] [Iwona-Light-Italic] \definefontsynonym [SansBold] [Iwona-Medium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-Medium-Italic] \definefontsynonym [SansCaps] [Iwona-CapsLight-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsLight-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsMedium] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsMediumItalic] \stoptypescript \starttypescript [sans] [iwona-light-caps] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsLight-Regular] \definefontsynonym [SansItalic] [Iwona-CapsLight-Italic] \definefontsynonym [SansBold] [Iwona-CapsMedium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsMedium-Italic] \stoptypescript \starttypescript [sans] [iwona] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Regular] \definefontsynonym [SansItalic] [Iwona-Italic] \definefontsynonym [SansBold] [Iwona-Bold] \definefontsynonym [SansBoldItalic] [Iwona-BoldItalic] \definefontsynonym [SansCaps] [Iwona-CapsRegular] \definefontsynonym [SansItalicCaps] [Iwona-CapsItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsBold] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsBoldItalic] \stoptypescript \starttypescript [sans] [iwona-caps] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsRegular] \definefontsynonym [SansItalic] [Iwona-CapsItalic] \definefontsynonym [SansBold] [Iwona-CapsBold] \definefontsynonym [SansBoldItalic] [Iwona-CapsBoldItalic] \stoptypescript \starttypescript [sans] [iwona-medium] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Medium-Regular] \definefontsynonym [SansItalic] [Iwona-Medium-Italic] \definefontsynonym [SansBold] [Iwona-Heavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsMedium-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-medium-caps] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalic] [Iwona-CapsMedium-Italic] \definefontsynonym [SansBold] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-heavy] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-Heavy-Regular] \definefontsynonym [SansItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansBold] [Iwona-Heavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-heavy-caps] [name] \setups[font:fallback:sans] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-light-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CondLight-Regular] \definefontsynonym [SansItalic] [Iwona-CondLight-Italic] \definefontsynonym [SansBold] [Iwona-CondMedium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CondMedium-Italic] \definefontsynonym [SansCaps] [Iwona-CapsCondLight-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondLight-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondMedium-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondMedium-Italic] \stoptypescript \starttypescript [sans] [iwona-light-cond-caps,iwona-light-caps-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsCondLight-Regular] \definefontsynonym [SansItalic] [Iwona-CapsCondLight-Italic] \definefontsynonym [SansBold] [Iwona-CapsCondMedium-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsCondMedium-Italic] \stoptypescript \starttypescript [sans] [iwona-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CondRegular] \definefontsynonym [SansItalic] [Iwona-CondItalic] \definefontsynonym [SansBold] [Iwona-CondBold] \definefontsynonym [SansBoldItalic] [Iwona-CondBoldItalic] \definefontsynonym [SansCaps] [Iwona-CapsCondRegular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondBold] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondBoldItalic] \stoptypescript \starttypescript [sans] [iwona-cond-caps,iwona-caps-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsCondRegular] \definefontsynonym [SansItalic] [Iwona-CapsCondItalic] \definefontsynonym [SansBold] [Iwona-CapsCondBold] \definefontsynonym [SansBoldItalic] [Iwona-CapsCondBoldItalic] \stoptypescript \starttypescript [sans] [iwona-medium-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CondMedium-Regular] \definefontsynonym [SansItalic] [Iwona-CondMedium-Italic] \definefontsynonym [SansBold] [Iwona-CondHeavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CondHeavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondMedium-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondHeavy-Italic] \stoptypescript \starttypescript [sans] [iwona-medium-cond-caps,iwona-medium-caps-cond] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansItalic] [Iwona-CapsCondMedium-Italic] \definefontsynonym [SansBold] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansBoldItalic] [Iwona-CapsCondHeavy-Italic] \stoptypescript \starttypescript [math] [iwona-light] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Light-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Light-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Light] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Light] \stoptypescript \starttypescript [math] [iwona] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Regular] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Regular] \stoptypescript \starttypescript [math] [iwona-medium] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Medium-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Medium-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Medium] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Medium] \stoptypescript \starttypescript [math] [iwona-heavy] [name] \definefontsynonym [MathRoman] [Iwona-Math-Letters-Heavy-Regular] \definefontsynonym [MathItalic] [Iwona-Math-Letters-Heavy-Italic] \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Heavy] \definefontsynonym [MathExtension] [Iwona-Math-Extension-Heavy] \stoptypescript \starttypescript [iwona,iwona-light,iwona-heavy,iwona-medium] \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default] [features=default] \definetypeface[\typescriptone][rm][serif][modern] [default] [features=default] \definetypeface[\typescriptone][tt][mono] [modern] [default] [features=default] \definetypeface[\typescriptone][mm][math] [\typescriptone] [default] [features=default,text=ss] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \starttypescriptcollection[kurier] \starttypescript [sans] [kurier-light,kurier,kurier-medium] \definefontsynonym[Kurier-Light] [kurierl] \definefontsynonym[Kurier-Regular] [kurierr] \definefontsynonym[Kurier-Medium] [kurierm] \definefontsynonym[Kurier-Bold] [kurierb] \definefontsynonym[Kurier-Heavy] [kurierh] \definefontsynonym[Kurier-LightItalic] [kurierli] \definefontsynonym[Kurier-Italic] [kurierri] \definefontsynonym[Kurier-MediumItalic] [kuriermi] \definefontsynonym[Kurier-BoldItalic] [kurierbi] \definefontsynonym[Kurier-HeavyItalic] [kurierhi] \stoptypescript \starttypescript [math] [kurier] [default] \definefontsynonym [Kurier-Math-Letters-Regular] [rm-kurierr] \definefontsynonym [Kurier-Math-Letters-Italic] [mi-kurierri] \definefontsynonym [Kurier-Math-Symbols-Regular] [sy-kurierrz] \definefontsynonym [Kurier-Math-Extension-Regular] [ex-kurierr] \stoptypescript \starttypescript [math] [kurier-light] [default] \definefontsynonym [Kurier-Math-Letters-Light-Regular] [rm-kurierl] \definefontsynonym [Kurier-Math-Letters-Light-Italic] [mi-kurierli] \definefontsynonym [Kurier-Math-Symbols-Light] [sy-kurierlz] \definefontsynonym [Kurier-Math-Extension-Light] [ex-kurierl] \stoptypescript \starttypescript [math] [kurier-medium] [default] \definefontsynonym [Kurier-Math-Letters-Medium-Regular] [rm-kurierm] \definefontsynonym [Kurier-Math-Letters-Medium-Italic] [mi-kuriermi] \definefontsynonym [Kurier-Math-Symbols-Medium-Regular] [sy-kuriermz] \definefontsynonym [Kurier-Math-Extension-Medium] [ex-kurierm] \stoptypescript \starttypescript [math] [kurier,kurier-light,kurier-medium] [default] \loadmapfile[kurier-rm.map] \loadmapfile[kurier-mi.map] \loadmapfile[kurier-sy.map] \loadmapfile[kurier-ex.map] \stoptypescript \starttypescript [sans] [kurier-light] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Kurier-Light-Regular] \definefontsynonym [SansItalic] [Kurier-Light-Italic] \definefontsynonym [SansBold] [Kurier-Medium-Regular] \definefontsynonym [SansBoldItalic] [Kurier-Medium-Italic] \stoptypescript \starttypescript [sans] [kurier] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Kurier-Regular] \definefontsynonym [SansItalic] [Kurier-Italic] \definefontsynonym [SansBold] [Kurier-Bold] \definefontsynonym [SansBoldItalic] [Kurier-BoldItalic] \stoptypescript \starttypescript [sans] [kurier-medium] [name] \setups[font:fallback:sans] \definefontsynonym [Sans] [Kurier-Medium-Regular] \definefontsynonym [SansItalic] [Kurier-Medium-Italic] \definefontsynonym [SansBold] [Kurier-Heavy-Regular] \definefontsynonym [SansBoldItalic] [Kurier-Heavy-Italic] \stoptypescript \starttypescript [math] [kurier-light] [name] \definefontsynonym [MathRoman] [Kurier-Math-Letters-Light-Regular] \definefontsynonym [MathItalic] [Kurier-Math-Letters-Light-Italic] \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Light] \definefontsynonym [MathExtension] [Kurier-Math-Extension-Light] \stoptypescript \starttypescript [math] [kurier] [name] \definefontsynonym [MathRoman] [Kurier-Math-Letters-Regular] \definefontsynonym [MathItalic] [Kurier-Math-Letters-Italic] \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Regular] \definefontsynonym [MathExtension] [Kurier-Math-Extension-Regular] \stoptypescript \starttypescript [math] [kurier-medium] [name] \definefontsynonym [MathRoman] [Kurier-Math-Letters-Medium-Regular] \definefontsynonym [MathItalic] [Kurier-Math-Letters-Medium-Italic] \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Medium] \definefontsynonym [MathExtension] [Kurier-Math-Extension-Medium] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[symbols] \starttypescript \definefontsynonym [ZapfDingbats] [uzdr] \definefontsynonym [RalfSmithFormalScript] [rsfs10] \definefontsynonym [MartinVogel] [umvs] \stoptypescript \stoptypescriptcollection \starttypescriptcollection[charter] % is this ok? \starttypescript [serif] [charter] \definefontsynonym [Charter-Roman] [name:CharterBT-Roman] % or: [bchr8a] \definefontsynonym [Charter-Italic] [name:CharterBT-Italic] % or: [bchri8a] \definefontsynonym [Charter-Bold] [name:CharterBT-Bold] % or: [bchb8a] \definefontsynonym [Charter-BoldItalic] [name:CharterBT-BoldItalic] % or: [bchbi8a] \definefontsynonym [Charter-Slanted] [name:CharterBT-Italic] % or: [bchri8a] \definefontsynonym [Charter-BoldSlanted] [name:CharterBT-BoldItalic] % or: [bchbi8a] \definefontsynonym [Charter-Roman-Caps] [Charter-Roman] % not present \stoptypescript \stoptypescriptcollection \starttypescriptcollection[postscript] \starttypescript [postscript] \definetypeface [postscript] [rm] [serif] [times] [default] [features=default] \definetypeface [postscript] [ss] [sans] [helvetica] [default] [features=default,rscale=0.9] \definetypeface [postscript] [tt] [mono] [courier] [default] [features=default,rscale=1.1] \definetypeface [postscript] [mm] [math] [times] [default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-physml.xsd0000644000175000017500000001250010526734267024204 0ustar norbertnorbert This schema covers (basic presentational) Physics markup. It combines the power of MathML and the ConTeXt units engine. author: Hans Hagen, copyright: PRAGMA-ADE / Hasselt NL context-2013.05.28.20130704/texmf-dist/tex/context/base/char-def.lua0000644000175000017500001647647212161703335024101 0ustar norbertnorbertif not modules then modules = { } end modules ['char-def'] = { version = 1.001, comment = "companion to char-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } --[[ The first version of this table was generated from unicode tables but after that was mostly updated manual using data present in ConTeXt and elsewhere. I did my best to make this table as complete as needed for proper use in ConTeXt MkIV. All errors are mine. If you find an error or ommision, just let me know. This file is updated every now and then using mtx-unicode where we check against the latest unicode txt files (normally once per year around the tex live code freeze) and checked afterwards for differences. We could save some bytes by sharing variant tables but it's not worth the trouble. Some additional data is kept in other files. ]]-- characters = characters or { } characters.data={ [0x0000]={ category="cc", description="NULL", direction="bn", linebreak="cm", unicodeslot=0x0000, }, { adobename="controlSTX", category="cc", description="START OF HEADING", direction="bn", linebreak="cm", unicodeslot=0x0001, }, { adobename="controlSOT", category="cc", description="START OF TEXT", direction="bn", linebreak="cm", unicodeslot=0x0002, }, { adobename="controlETX", category="cc", description="END OF TEXT", direction="bn", linebreak="cm", unicodeslot=0x0003, }, { adobename="controlEOT", category="cc", description="END OF TRANSMISSION", direction="bn", linebreak="cm", unicodeslot=0x0004, }, { adobename="controlENQ", category="cc", description="ENQUIRY", direction="bn", linebreak="cm", unicodeslot=0x0005, }, { adobename="controlACK", category="cc", description="ACKNOWLEDGE", direction="bn", linebreak="cm", unicodeslot=0x0006, }, { adobename="controlBEL", category="cc", description="BELL", direction="bn", linebreak="cm", unicodeslot=0x0007, }, { adobename="controlBS", category="cc", description="BACKSPACE", direction="bn", linebreak="cm", unicodeslot=0x0008, }, { adobename="controlHT", category="cc", description="CHARACTER TABULATION", direction="s", linebreak="ba", unicodeslot=0x0009, }, { adobename="controlLF", category="cc", description="LINE FEED (LF)", direction="b", linebreak="lf", unicodeslot=0x000A, }, { adobename="controlVT", category="cc", description="LINE TABULATION", direction="s", linebreak="bk", unicodeslot=0x000B, }, { adobename="controlFF", category="cc", description="FORM FEED (FF)", direction="ws", linebreak="bk", unicodeslot=0x000C, }, { adobename="controlCR", category="cc", description="CARRIAGE RETURN (CR)", direction="b", linebreak="cr", unicodeslot=0x000D, }, { adobename="controlSO", category="cc", description="SHIFT OUT", direction="bn", linebreak="cm", unicodeslot=0x000E, }, { adobename="controlSI", category="cc", description="SHIFT IN", direction="bn", linebreak="cm", unicodeslot=0x000F, }, { adobename="controlDLE", category="cc", description="DATA LINK ESCAPE", direction="bn", linebreak="cm", unicodeslot=0x0010, }, { adobename="controlDC1", category="cc", description="DEVICE CONTROL ONE", direction="bn", linebreak="cm", unicodeslot=0x0011, }, { adobename="controlDC2", category="cc", description="DEVICE CONTROL TWO", direction="bn", linebreak="cm", unicodeslot=0x0012, }, { adobename="controlDC3", category="cc", description="DEVICE CONTROL THREE", direction="bn", linebreak="cm", unicodeslot=0x0013, }, { adobename="controlDC4", category="cc", description="DEVICE CONTROL FOUR", direction="bn", linebreak="cm", unicodeslot=0x0014, }, { adobename="controlNAK", category="cc", description="NEGATIVE ACKNOWLEDGE", direction="bn", linebreak="cm", unicodeslot=0x0015, }, { adobename="controlSYN", category="cc", description="SYNCHRONOUS IDLE", direction="bn", linebreak="cm", unicodeslot=0x0016, }, { adobename="controlETB", category="cc", description="END OF TRANSMISSION BLOCK", direction="bn", linebreak="cm", unicodeslot=0x0017, }, { adobename="controlCAN", category="cc", description="CANCEL", direction="bn", linebreak="cm", unicodeslot=0x0018, }, { adobename="controlEM", category="cc", description="END OF MEDIUM", direction="bn", linebreak="cm", unicodeslot=0x0019, }, { adobename="controlSUB", category="cc", description="SUBSTITUTE", direction="bn", linebreak="cm", unicodeslot=0x001A, }, { adobename="controlESC", category="cc", description="ESCAPE", direction="bn", linebreak="cm", unicodeslot=0x001B, }, { adobename="controlFS", category="cc", description="INFORMATION SEPARATOR FOUR", direction="b", linebreak="cm", unicodeslot=0x001C, }, { adobename="controlGS", category="cc", description="INFORMATION SEPARATOR THREE", direction="b", linebreak="cm", unicodeslot=0x001D, }, { adobename="controlRS", category="cc", description="INFORMATION SEPARATOR TWO", direction="b", linebreak="cm", unicodeslot=0x001E, }, { adobename="controlUS", category="cc", description="INFORMATION SEPARATOR ONE", direction="s", linebreak="cm", unicodeslot=0x001F, }, { adobename="space", category="zs", cjkwd="na", description="SPACE", direction="ws", linebreak="sp", unicodeslot=0x0020, }, { adobename="exclam", category="po", cjkwd="na", description="EXCLAMATION MARK", direction="on", linebreak="ex", mathclass="close", unicodeslot=0x0021, }, { adobename="quotedbl", category="po", cjkwd="na", contextname="quotedbl", description="QUOTATION MARK", direction="on", linebreak="qu", mathclass="default", unicodeslot=0x0022, }, { adobename="numbersign", category="po", cjkwd="na", description="NUMBER SIGN", direction="et", linebreak="al", unicodeslot=0x0023, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="dollar", category="sc", cjkwd="na", contextname="textdollar", description="DOLLAR SIGN", direction="et", linebreak="pr", unicodeslot=0x0024, }, { adobename="percent", category="po", cjkwd="na", contextname="percent", description="PERCENT SIGN", direction="et", linebreak="po", unicodeslot=0x0025, }, { adobename="ampersand", category="po", cjkwd="na", description="AMPERSAND", direction="on", linebreak="al", unicodeslot=0x0026, }, { adobename="quotesingle", category="po", cjkwd="na", contextname="quotesingle", description="APOSTROPHE", direction="on", linebreak="qu", mathclass="default", unicodeslot=0x0027, }, { adobename="parenleft", category="ps", cjkwd="na", description="LEFT PARENTHESIS", direction="on", linebreak="op", mathclass="open", mathname="lparent", mirror=0x0029, unicodeslot=0x0028, }, { adobename="parenright", category="pe", cjkwd="na", description="RIGHT PARENTHESIS", direction="on", linebreak="cp", mathclass="close", mathname="rparent", mirror=0x0028, unicodeslot=0x0029, }, { adobename="asterisk", category="po", cjkwd="na", description="ASTERISK", direction="on", linebreak="al", mathclass="binary", mathname="ast", mathsymbol=0x2217, unicodeslot=0x002A, }, { adobename="plus", category="sm", cjkwd="na", description="PLUS SIGN", direction="es", linebreak="pr", mathclass="binary", unicodeslot=0x002B, }, { adobename="comma", category="po", cjkwd="na", contextname="textcomma", description="COMMA", direction="cs", linebreak="is", mathclass="punctuation", unicodeslot=0x002C, }, { adobename="hyphen", category="pd", cjkwd="na", description="HYPHEN-MINUS", direction="es", linebreak="hy", mathextensible="h", mathfiller="relfill", mathsymbol=0x2212, unicodeslot=0x002D, }, { adobename="period", category="po", cjkwd="na", comment="class needed for autopunctuation", contextname="textperiod", description="FULL STOP", direction="cs", linebreak="is", mathclass="punctuation", mathspec={ { class="punctuation", name="ldotp", }, }, unicodeslot=0x002E, }, { adobename="slash", category="po", cjkwd="na", comment="mathsymbol=0x2044", contextname="textslash", description="SOLIDUS", direction="cs", linebreak="sy", mathspec={ { class="middle", unicode=0x2044, }, { class="ordinary", unicode=0x2044, }, }, unicodeslot=0x002F, }, { adobename="zero", category="nd", cjkwd="na", description="DIGIT ZERO", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0030, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="one", category="nd", cjkwd="na", description="DIGIT ONE", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0031, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="two", category="nd", cjkwd="na", description="DIGIT TWO", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0032, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="three", category="nd", cjkwd="na", description="DIGIT THREE", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0033, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="four", category="nd", cjkwd="na", description="DIGIT FOUR", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0034, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="five", category="nd", cjkwd="na", description="DIGIT FIVE", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0035, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="six", category="nd", cjkwd="na", description="DIGIT SIX", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0036, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="seven", category="nd", cjkwd="na", description="DIGIT SEVEN", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0037, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="eight", category="nd", cjkwd="na", description="DIGIT EIGHT", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0038, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="nine", category="nd", cjkwd="na", description="DIGIT NINE", direction="en", linebreak="nu", mathclass="number", unicodeslot=0x0039, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, { adobename="colon", category="po", cjkwd="na", comment="mathclass=punctuation,mathname=colon", description="COLON", direction="cs", linebreak="is", mathclass="relation", unicodeslot=0x003A, }, { adobename="semicolon", category="po", cjkwd="na", description="SEMICOLON", direction="on", linebreak="is", mathclass="punctuation", unicodeslot=0x003B, }, { adobename="less", category="sm", cjkwd="na", description="LESS-THAN SIGN", direction="on", linebreak="al", mathclass="relation", mathname="lt", mirror=0x003E, unicodeslot=0x003C, }, { adobename="equal", category="sm", cjkwd="na", comment="mathclass=binary", description="EQUALS SIGN", direction="on", linebreak="al", mathextensible="h", mathfiller="equalfill", mathspec={ { class="relation", name="eq", }, { class="relation", name="Relbar", }, }, unicodeslot=0x003D, }, { adobename="greater", category="sm", cjkwd="na", description="GREATER-THAN SIGN", direction="on", linebreak="al", mathclass="relation", mathname="gt", mirror=0x003C, unicodeslot=0x003E, }, { adobename="question", category="po", cjkwd="na", description="QUESTION MARK", direction="on", linebreak="ex", mathclass="close", unicodeslot=0x003F, }, { adobename="at", category="po", cjkwd="na", contextname="textat", description="COMMERCIAL AT", direction="on", linebreak="al", unicodeslot=0x0040, }, { adobename="A", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER A", direction="l", lccode=0x0061, linebreak="al", mathclass="variable", unicodeslot=0x0041, }, { adobename="B", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER B", direction="l", lccode=0x0062, linebreak="al", mathclass="variable", unicodeslot=0x0042, }, { adobename="C", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER C", direction="l", lccode=0x0063, linebreak="al", mathclass="variable", unicodeslot=0x0043, }, { adobename="D", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER D", direction="l", lccode=0x0064, linebreak="al", mathclass="variable", unicodeslot=0x0044, }, { adobename="E", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER E", direction="l", lccode=0x0065, linebreak="al", mathclass="variable", unicodeslot=0x0045, }, { adobename="F", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER F", direction="l", lccode=0x0066, linebreak="al", mathclass="variable", unicodeslot=0x0046, }, { adobename="G", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER G", direction="l", lccode=0x0067, linebreak="al", mathclass="variable", unicodeslot=0x0047, }, { adobename="H", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER H", direction="l", lccode=0x0068, linebreak="al", mathclass="variable", unicodeslot=0x0048, }, { adobename="I", category="lu", cjkwd="na", contextname="dotlessI", description="LATIN CAPITAL LETTER I", direction="l", lccode=0x0069, linebreak="al", mathclass="variable", unicodeslot=0x0049, }, { adobename="J", category="lu", cjkwd="na", contextname="dotlessJ", description="LATIN CAPITAL LETTER J", direction="l", lccode=0x006A, linebreak="al", mathclass="variable", unicodeslot=0x004A, }, { adobename="K", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER K", direction="l", lccode=0x006B, linebreak="al", mathclass="variable", unicodeslot=0x004B, }, { adobename="L", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER L", direction="l", lccode=0x006C, linebreak="al", mathclass="variable", unicodeslot=0x004C, }, { adobename="M", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER M", direction="l", lccode=0x006D, linebreak="al", mathclass="variable", unicodeslot=0x004D, }, { adobename="N", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER N", direction="l", lccode=0x006E, linebreak="al", mathclass="variable", unicodeslot=0x004E, }, { adobename="O", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER O", direction="l", lccode=0x006F, linebreak="al", mathclass="variable", unicodeslot=0x004F, }, { adobename="P", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER P", direction="l", lccode=0x0070, linebreak="al", mathclass="variable", unicodeslot=0x0050, }, { adobename="Q", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER Q", direction="l", lccode=0x0071, linebreak="al", mathclass="variable", unicodeslot=0x0051, }, { adobename="R", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER R", direction="l", lccode=0x0072, linebreak="al", mathclass="variable", unicodeslot=0x0052, }, { adobename="S", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER S", direction="l", lccode=0x0073, linebreak="al", mathclass="variable", unicodeslot=0x0053, }, { adobename="T", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER T", direction="l", lccode=0x0074, linebreak="al", mathclass="variable", unicodeslot=0x0054, }, { adobename="U", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER U", direction="l", lccode=0x0075, linebreak="al", mathclass="variable", unicodeslot=0x0055, }, { adobename="V", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER V", direction="l", lccode=0x0076, linebreak="al", mathclass="variable", unicodeslot=0x0056, }, { adobename="W", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER W", direction="l", lccode=0x0077, linebreak="al", mathclass="variable", unicodeslot=0x0057, }, { adobename="X", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER X", direction="l", lccode=0x0078, linebreak="al", mathclass="variable", unicodeslot=0x0058, }, { adobename="Y", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER Y", direction="l", lccode=0x0079, linebreak="al", mathclass="variable", unicodeslot=0x0059, }, { adobename="Z", category="lu", cjkwd="na", description="LATIN CAPITAL LETTER Z", direction="l", lccode=0x007A, linebreak="al", mathclass="variable", unicodeslot=0x005A, }, { adobename="bracketleft", category="ps", cjkwd="na", description="LEFT SQUARE BRACKET", direction="on", linebreak="op", mathclass="open", mathname="lbrack", mirror=0x005D, unicodeslot=0x005B, }, { adobename="backslash", category="po", cjkwd="na", contextname="textbackslash", description="REVERSE SOLIDUS", direction="on", linebreak="pr", mathclass="nothing", mathname="backslash", unicodeslot=0x005C, }, { adobename="bracketright", category="pe", cjkwd="na", description="RIGHT SQUARE BRACKET", direction="on", linebreak="cp", mathclass="close", mathname="rbrack", mirror=0x005B, unicodeslot=0x005D, }, { adobename="asciicircum", category="sk", cjkwd="na", contextname="textasciicircum", description="CIRCUMFLEX ACCENT", direction="on", linebreak="al", mathclass="topaccent", unicodeslot=0x005E, }, { adobename="underscore", category="pc", cjkwd="na", contextname="textunderscore", description="LOW LINE", direction="on", linebreak="al", unicodeslot=0x005F, }, { adobename="grave", category="sk", cjkwd="na", contextname="textgrave", description="GRAVE ACCENT", direction="on", linebreak="al", mathclass="topaccent", mathname="grave", unicodeslot=0x0060, }, { adobename="a", category="ll", cjkwd="na", description="LATIN SMALL LETTER A", direction="l", linebreak="al", mathclass="variable", uccode=0x0041, unicodeslot=0x0061, }, { adobename="b", category="ll", cjkwd="na", description="LATIN SMALL LETTER B", direction="l", linebreak="al", mathclass="variable", uccode=0x0042, unicodeslot=0x0062, }, { adobename="c", category="ll", cjkwd="na", description="LATIN SMALL LETTER C", direction="l", linebreak="al", mathclass="variable", uccode=0x0043, unicodeslot=0x0063, }, { adobename="d", category="ll", cjkwd="na", description="LATIN SMALL LETTER D", direction="l", linebreak="al", mathclass="variable", uccode=0x0044, unicodeslot=0x0064, }, { adobename="e", category="ll", cjkwd="na", description="LATIN SMALL LETTER E", direction="l", linebreak="al", mathclass="variable", uccode=0x0045, unicodeslot=0x0065, }, { adobename="f", category="ll", cjkwd="na", description="LATIN SMALL LETTER F", direction="l", linebreak="al", mathclass="variable", uccode=0x0046, unicodeslot=0x0066, }, { adobename="g", category="ll", cjkwd="na", description="LATIN SMALL LETTER G", direction="l", linebreak="al", mathclass="variable", uccode=0x0047, unicodeslot=0x0067, }, { adobename="h", category="ll", cjkwd="na", description="LATIN SMALL LETTER H", direction="l", linebreak="al", mathclass="variable", uccode=0x0048, unicodeslot=0x0068, }, { adobename="i", category="ll", cjkwd="na", contextname="idotaccent", description="LATIN SMALL LETTER I", direction="l", linebreak="al", mathclass="variable", uccode=0x0049, unicodeslot=0x0069, }, { adobename="j", category="ll", cjkwd="na", description="LATIN SMALL LETTER J", direction="l", linebreak="al", mathclass="variable", uccode=0x004A, unicodeslot=0x006A, }, { adobename="k", category="ll", cjkwd="na", description="LATIN SMALL LETTER K", direction="l", linebreak="al", mathclass="variable", uccode=0x004B, unicodeslot=0x006B, }, { adobename="l", category="ll", cjkwd="na", description="LATIN SMALL LETTER L", direction="l", linebreak="al", mathclass="variable", uccode=0x004C, unicodeslot=0x006C, }, { adobename="m", category="ll", cjkwd="na", description="LATIN SMALL LETTER M", direction="l", linebreak="al", mathclass="variable", uccode=0x004D, unicodeslot=0x006D, }, { adobename="n", category="ll", cjkwd="na", description="LATIN SMALL LETTER N", direction="l", linebreak="al", mathclass="variable", uccode=0x004E, unicodeslot=0x006E, }, { adobename="o", category="ll", cjkwd="na", description="LATIN SMALL LETTER O", direction="l", linebreak="al", mathclass="variable", uccode=0x004F, unicodeslot=0x006F, }, { adobename="p", category="ll", cjkwd="na", description="LATIN SMALL LETTER P", direction="l", linebreak="al", mathclass="variable", uccode=0x0050, unicodeslot=0x0070, }, { adobename="q", category="ll", cjkwd="na", description="LATIN SMALL LETTER Q", direction="l", linebreak="al", mathclass="variable", uccode=0x0051, unicodeslot=0x0071, }, { adobename="r", category="ll", cjkwd="na", description="LATIN SMALL LETTER R", direction="l", linebreak="al", mathclass="variable", uccode=0x0052, unicodeslot=0x0072, }, { adobename="s", category="ll", cjkwd="na", description="LATIN SMALL LETTER S", direction="l", linebreak="al", mathclass="variable", uccode=0x0053, unicodeslot=0x0073, }, { adobename="t", category="ll", cjkwd="na", description="LATIN SMALL LETTER T", direction="l", linebreak="al", mathclass="variable", uccode=0x0054, unicodeslot=0x0074, }, { adobename="u", category="ll", cjkwd="na", description="LATIN SMALL LETTER U", direction="l", linebreak="al", mathclass="variable", uccode=0x0055, unicodeslot=0x0075, }, { adobename="v", category="ll", cjkwd="na", description="LATIN SMALL LETTER V", direction="l", linebreak="al", mathclass="variable", uccode=0x0056, unicodeslot=0x0076, }, { adobename="w", category="ll", cjkwd="na", description="LATIN SMALL LETTER W", direction="l", linebreak="al", mathclass="variable", uccode=0x0057, unicodeslot=0x0077, }, { adobename="x", category="ll", cjkwd="na", description="LATIN SMALL LETTER X", direction="l", linebreak="al", mathclass="variable", uccode=0x0058, unicodeslot=0x0078, }, { adobename="y", category="ll", cjkwd="na", description="LATIN SMALL LETTER Y", direction="l", linebreak="al", mathclass="variable", uccode=0x0059, unicodeslot=0x0079, }, { adobename="z", category="ll", cjkwd="na", description="LATIN SMALL LETTER Z", direction="l", linebreak="al", mathclass="variable", uccode=0x005A, unicodeslot=0x007A, }, { adobename="braceleft", category="ps", cjkwd="na", contextname="textbraceleft", description="LEFT CURLY BRACKET", direction="on", linebreak="op", mathclass="open", mathname="lbrace", mirror=0x007D, unicodeslot=0x007B, }, { adobename="verticalbar", category="sm", cjkwd="na", comment="mathclass=binary,mathname=bar", contextname="textbar", description="VERTICAL LINE", direction="on", linebreak="ba", mathspec={ { class="nothing", name="arrowvert", }, { class="delimiter", name="vert", }, { class="open", name="lvert", }, { class="close", name="rvert", }, { class="relation", name="mid", }, }, unicodeslot=0x007C, }, { adobename="braceright", category="pe", cjkwd="na", contextname="textbraceright", description="RIGHT CURLY BRACKET", direction="on", linebreak="cl", mathclass="close", mathname="rbrace", mirror=0x007B, unicodeslot=0x007D, }, { adobename="asciitilde", category="sm", cjkwd="na", contextname="textasciitilde", description="TILDE", direction="on", linebreak="al", unicodeslot=0x007E, }, { adobename="controlDEL", category="cc", description="DELETE", direction="bn", linebreak="cm", unicodeslot=0x007F, }, { category="cc", description="NONE", direction="bn", linebreak="cm", unicodeslot=0x0080, }, { category="cc", description="NONE", direction="bn", linebreak="cm", unicodeslot=0x0081, }, { category="cc", description="BREAK PERMITTED HERE", direction="bn", linebreak="cm", unicodeslot=0x0082, }, { category="cc", description="NO BREAK HERE", direction="bn", linebreak="cm", unicodeslot=0x0083, }, { category="cc", description="NONE", direction="bn", linebreak="cm", unicodeslot=0x0084, }, { category="cc", description="NEXT LINE (NEL)", direction="b", linebreak="nl", unicodeslot=0x0085, }, { category="cc", description="START OF SELECTED AREA", direction="bn", linebreak="cm", unicodeslot=0x0086, }, { category="cc", description="END OF SELECTED AREA", direction="bn", linebreak="cm", unicodeslot=0x0087, }, { category="cc", description="CHARACTER TABULATION SET", direction="bn", linebreak="cm", unicodeslot=0x0088, }, { category="cc", description="CHARACTER TABULATION WITH JUSTIFICATION", direction="bn", linebreak="cm", unicodeslot=0x0089, }, { category="cc", description="LINE TABULATION SET", direction="bn", linebreak="cm", unicodeslot=0x008A, }, { category="cc", description="PARTIAL LINE FORWARD", direction="bn", linebreak="cm", unicodeslot=0x008B, }, { category="cc", description="PARTIAL LINE BACKWARD", direction="bn", linebreak="cm", unicodeslot=0x008C, }, { category="cc", description="REVERSE LINE FEED", direction="bn", linebreak="cm", unicodeslot=0x008D, }, { category="cc", description="SINGLE SHIFT TWO", direction="bn", linebreak="cm", unicodeslot=0x008E, }, { category="cc", description="SINGLE SHIFT THREE", direction="bn", linebreak="cm", unicodeslot=0x008F, }, { category="cc", description="DEVICE CONTROL STRING", direction="bn", linebreak="cm", unicodeslot=0x0090, }, { category="cc", description="PRIVATE USE ONE", direction="bn", linebreak="cm", unicodeslot=0x0091, }, { category="cc", description="PRIVATE USE TWO", direction="bn", linebreak="cm", unicodeslot=0x0092, }, { category="cc", description="SET TRANSMIT STATE", direction="bn", linebreak="cm", unicodeslot=0x0093, }, { category="cc", description="CANCEL CHARACTER", direction="bn", linebreak="cm", unicodeslot=0x0094, }, { category="cc", description="MESSAGE WAITING", direction="bn", linebreak="cm", unicodeslot=0x0095, }, { category="cc", description="START OF GUARDED AREA", direction="bn", linebreak="cm", unicodeslot=0x0096, }, { category="cc", description="END OF GUARDED AREA", direction="bn", linebreak="cm", unicodeslot=0x0097, }, { category="cc", description="START OF STRING", direction="bn", linebreak="cm", unicodeslot=0x0098, }, { category="cc", description="NONE", direction="bn", linebreak="cm", unicodeslot=0x0099, }, { category="cc", description="SINGLE CHARACTER INTRODUCER", direction="bn", linebreak="cm", unicodeslot=0x009A, }, { category="cc", description="CONTROL SEQUENCE INTRODUCER", direction="bn", linebreak="cm", unicodeslot=0x009B, }, { category="cc", description="STRING TERMINATOR", direction="bn", linebreak="cm", unicodeslot=0x009C, }, { category="cc", description="OPERATING SYSTEM COMMAND", direction="bn", linebreak="cm", unicodeslot=0x009D, }, { category="cc", description="PRIVACY MESSAGE", direction="bn", linebreak="cm", unicodeslot=0x009E, }, { category="cc", description="APPLICATION PROGRAM COMMAND", direction="bn", linebreak="cm", unicodeslot=0x009F, }, { adobename="nonbreakingspace", category="zs", contextname="nobreakspace", description="NO-BREAK SPACE", direction="cs", linebreak="gl", specials={ "nobreak", 0x0020 }, unicodeslot=0x00A0, }, { adobename="exclamdown", category="po", cjkwd="a", contextname="exclamdown", description="INVERTED EXCLAMATION MARK", direction="on", linebreak="op", unicodeslot=0x00A1, }, { adobename="cent", category="sc", cjkwd="na", contextname="textcent", description="CENT SIGN", direction="et", linebreak="po", unicodeslot=0x00A2, }, { adobename="sterling", category="sc", cjkwd="na", contextname="textsterling", description="POUND SIGN", direction="et", linebreak="pr", unicodeslot=0x00A3, }, { adobename="currency", category="sc", cjkwd="a", contextname="textcurrency", description="CURRENCY SIGN", direction="et", linebreak="pr", unicodeslot=0x00A4, }, { adobename="yen", category="sc", cjkwd="na", contextname="textyen", description="YEN SIGN", direction="et", linebreak="pr", mathclass="nothing", mathname="yen", unicodeslot=0x00A5, }, { adobename="brokenbar", category="so", cjkwd="na", contextname="textbrokenbar", description="BROKEN BAR", direction="on", linebreak="al", unicodeslot=0x00A6, }, { adobename="section", category="so", cjkwd="a", contextname="sectionmark", description="SECTION SIGN", direction="on", linebreak="ai", mathclass="box", mathname="S", unicodeslot=0x00A7, }, { adobename="dieresis", category="sk", cjkwd="a", contextname="textdiaeresis", description="DIAERESIS", direction="on", linebreak="ai", mathclass="topaccent", mathname="ddot", specials={ "compat", 0x0020, 0x0308 }, unicodeslot=0x00A8, }, { adobename="copyright", category="so", contextname="copyright", description="COPYRIGHT SIGN", direction="on", linebreak="al", unicodeslot=0x00A9, }, { adobename="ordfeminine", category="ll", cjkwd="a", contextname="ordfeminine", description="FEMININE ORDINAL INDICATOR", direction="l", linebreak="ai", specials={ "super", 0x0061 }, unicodeslot=0x00AA, }, { adobename="guillemotleft", category="pi", contextname="leftguillemot", description="LEFT-POINTING DOUBLE ANGLE QUOTATION MARK", direction="on", linebreak="qu", mirror=0x00BB, unicodeslot=0x00AB, }, { adobename="logicalnot", category="sm", cjkwd="na", contextname="textlognot", description="NOT SIGN", direction="on", linebreak="al", mathspec={ { class="ordinary", name="lnot", }, { class="ordinary", name="neg", }, }, unicodeslot=0x00AC, }, { adobename="softhyphen", category="cf", cjkwd="a", contextname="softhyphen", description="SOFT HYPHEN", direction="bn", linebreak="ba", unicodeslot=0x00AD, }, { adobename="registered", category="so", cjkwd="a", contextname="registered", description="REGISTERED SIGN", direction="on", linebreak="al", unicodeslot=0x00AE, }, { adobename="macron", category="sk", cjkwd="na", contextname="textmacron", description="MACRON", direction="on", linebreak="al", mathclass="topaccent", mathname="bar", specials={ "compat", 0x0020, 0x0304 }, unicodeslot=0x00AF, }, { adobename="degree", category="so", cjkwd="a", contextname="textdegree", description="DEGREE SIGN", direction="et", linebreak="po", unicodeslot=0x00B0, }, { adobename="plusminus", category="sm", cjkwd="a", contextname="textpm", description="PLUS-MINUS SIGN", direction="et", linebreak="pr", mathclass="binary", mathname="pm", unicodeslot=0x00B1, }, { adobename="twosuperior", category="no", cjkwd="a", contextname="twosuperior", description="SUPERSCRIPT TWO", direction="en", linebreak="ai", specials={ "super", 0x0032 }, unicodeslot=0x00B2, }, { adobename="threesuperior", category="no", cjkwd="a", contextname="threesuperior", description="SUPERSCRIPT THREE", direction="en", linebreak="ai", specials={ "super", 0x0033 }, unicodeslot=0x00B3, }, { adobename="acute", category="sk", cjkwd="a", contextname="textacute", description="ACUTE ACCENT", direction="on", linebreak="bb", mathclass="topaccent", mathname="acute", specials={ "compat", 0x0020, 0x0301 }, unicodeslot=0x00B4, }, { adobename="mu1", category="ll", contextname="textmu", description="MICRO SIGN", direction="l", linebreak="al", specials={ "compat", 0x03BC }, uccode=0x039C, unicodeslot=0x00B5, }, { adobename="paragraph", category="so", cjkwd="a", contextname="paragraphmark", description="PILCROW SIGN", direction="on", linebreak="ai", mathclass="box", mathname="P", unicodeslot=0x00B6, }, { adobename="periodcentered", category="po", cjkwd="a", contextname="periodcentered", description="MIDDLE DOT", direction="on", linebreak="ai", mathclass="binary", mathname="centerdot", unicodeslot=0x00B7, }, { adobename="cedilla", category="sk", cjkwd="a", contextname="textcedilla", description="CEDILLA", direction="on", linebreak="ai", specials={ "compat", 0x0020, 0x0327 }, unicodeslot=0x00B8, }, { adobename="onesuperior", category="no", cjkwd="a", contextname="onesuperior", description="SUPERSCRIPT ONE", direction="en", linebreak="ai", specials={ "super", 0x0031 }, unicodeslot=0x00B9, }, { adobename="ordmasculine", category="ll", cjkwd="a", contextname="ordmasculine", description="MASCULINE ORDINAL INDICATOR", direction="l", linebreak="ai", specials={ "super", 0x006F }, unicodeslot=0x00BA, }, { adobename="guillemotright", category="pf", contextname="rightguillemot", description="RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", direction="on", linebreak="qu", mirror=0x00AB, unicodeslot=0x00BB, }, { adobename="onequarter", category="no", cjkwd="a", contextname="onequarter", description="VULGAR FRACTION ONE QUARTER", direction="on", linebreak="ai", specials={ "fraction", 0x0031, 0x2044, 0x0034 }, unicodeslot=0x00BC, }, { adobename="onehalf", category="no", cjkwd="a", contextname="onehalf", description="VULGAR FRACTION ONE HALF", direction="on", linebreak="ai", specials={ "fraction", 0x0031, 0x2044, 0x0032 }, unicodeslot=0x00BD, }, { adobename="threequarters", category="no", cjkwd="a", contextname="threequarter", description="VULGAR FRACTION THREE QUARTERS", direction="on", linebreak="ai", specials={ "fraction", 0x0033, 0x2044, 0x0034 }, unicodeslot=0x00BE, }, { adobename="questiondown", category="po", cjkwd="a", contextname="questiondown", description="INVERTED QUESTION MARK", direction="on", linebreak="op", unicodeslot=0x00BF, }, { adobename="Agrave", category="lu", contextname="Agrave", description="LATIN CAPITAL LETTER A WITH GRAVE", direction="l", lccode=0x00E0, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0300 }, unicodeslot=0x00C0, }, { adobename="Aacute", category="lu", contextname="Aacute", description="LATIN CAPITAL LETTER A WITH ACUTE", direction="l", lccode=0x00E1, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0301 }, unicodeslot=0x00C1, }, { adobename="Acircumflex", category="lu", contextname="Acircumflex", description="LATIN CAPITAL LETTER A WITH CIRCUMFLEX", direction="l", lccode=0x00E2, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0302 }, unicodeslot=0x00C2, }, { adobename="Atilde", category="lu", contextname="Atilde", description="LATIN CAPITAL LETTER A WITH TILDE", direction="l", lccode=0x00E3, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0303 }, unicodeslot=0x00C3, }, { adobename="Adieresis", category="lu", contextname="Adiaeresis", description="LATIN CAPITAL LETTER A WITH DIAERESIS", direction="l", lccode=0x00E4, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0308 }, unicodeslot=0x00C4, }, { adobename="Aring", category="lu", contextname="Aring", description="LATIN CAPITAL LETTER A WITH RING ABOVE", direction="l", lccode=0x00E5, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x030A }, unicodeslot=0x00C5, }, { adobename="AE", category="lu", cjkwd="a", contextname="AEligature", description="LATIN CAPITAL LETTER AE", direction="l", lccode=0x00E6, linebreak="al", shcode={ 0x0041, 0x0045 }, unicodeslot=0x00C6, }, { adobename="Ccedilla", category="lu", contextname="Ccedilla", description="LATIN CAPITAL LETTER C WITH CEDILLA", direction="l", lccode=0x00E7, linebreak="al", shcode=0x0043, specials={ "char", 0x0043, 0x0327 }, unicodeslot=0x00C7, }, { adobename="Egrave", category="lu", contextname="Egrave", description="LATIN CAPITAL LETTER E WITH GRAVE", direction="l", lccode=0x00E8, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0300 }, unicodeslot=0x00C8, }, { adobename="Eacute", category="lu", contextname="Eacute", description="LATIN CAPITAL LETTER E WITH ACUTE", direction="l", lccode=0x00E9, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0301 }, unicodeslot=0x00C9, }, { adobename="Ecircumflex", category="lu", contextname="Ecircumflex", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX", direction="l", lccode=0x00EA, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0302 }, unicodeslot=0x00CA, }, { adobename="Edieresis", category="lu", contextname="Ediaeresis", description="LATIN CAPITAL LETTER E WITH DIAERESIS", direction="l", lccode=0x00EB, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0308 }, unicodeslot=0x00CB, }, { adobename="Igrave", category="lu", contextname="Igrave", description="LATIN CAPITAL LETTER I WITH GRAVE", direction="l", lccode=0x00EC, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0300 }, unicodeslot=0x00CC, }, { adobename="Iacute", category="lu", contextname="Iacute", description="LATIN CAPITAL LETTER I WITH ACUTE", direction="l", lccode=0x00ED, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0301 }, unicodeslot=0x00CD, }, { adobename="Icircumflex", category="lu", contextname="Icircumflex", description="LATIN CAPITAL LETTER I WITH CIRCUMFLEX", direction="l", lccode=0x00EE, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0302 }, unicodeslot=0x00CE, }, { adobename="Idieresis", category="lu", contextname="Idiaeresis", description="LATIN CAPITAL LETTER I WITH DIAERESIS", direction="l", lccode=0x00EF, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0308 }, unicodeslot=0x00CF, }, { adobename="Eth", category="lu", cjkwd="a", contextname="Eth", description="LATIN CAPITAL LETTER ETH", direction="l", lccode=0x00F0, linebreak="al", unicodeslot=0x00D0, }, { adobename="Ntilde", category="lu", contextname="Ntilde", description="LATIN CAPITAL LETTER N WITH TILDE", direction="l", lccode=0x00F1, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0303 }, unicodeslot=0x00D1, }, { adobename="Ograve", category="lu", contextname="Ograve", description="LATIN CAPITAL LETTER O WITH GRAVE", direction="l", lccode=0x00F2, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0300 }, unicodeslot=0x00D2, }, { adobename="Oacute", category="lu", contextname="Oacute", description="LATIN CAPITAL LETTER O WITH ACUTE", direction="l", lccode=0x00F3, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0301 }, unicodeslot=0x00D3, }, { adobename="Ocircumflex", category="lu", contextname="Ocircumflex", description="LATIN CAPITAL LETTER O WITH CIRCUMFLEX", direction="l", lccode=0x00F4, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0302 }, unicodeslot=0x00D4, }, { adobename="Otilde", category="lu", contextname="Otilde", description="LATIN CAPITAL LETTER O WITH TILDE", direction="l", lccode=0x00F5, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0303 }, unicodeslot=0x00D5, }, { adobename="Odieresis", category="lu", contextname="Odiaeresis", description="LATIN CAPITAL LETTER O WITH DIAERESIS", direction="l", lccode=0x00F6, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0308 }, unicodeslot=0x00D6, }, { adobename="multiply", category="sm", cjkwd="a", contextname="textmultiply", description="MULTIPLICATION SIGN", direction="on", linebreak="ai", mathclass="binary", mathname="times", unicodeslot=0x00D7, }, { adobename="Oslash", category="lu", cjkwd="a", contextname="Ostroke", description="LATIN CAPITAL LETTER O WITH STROKE", direction="l", lccode=0x00F8, linebreak="al", shcode=0x004F, unicodeslot=0x00D8, }, { adobename="Ugrave", category="lu", contextname="Ugrave", description="LATIN CAPITAL LETTER U WITH GRAVE", direction="l", lccode=0x00F9, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0300 }, unicodeslot=0x00D9, }, { adobename="Uacute", category="lu", contextname="Uacute", description="LATIN CAPITAL LETTER U WITH ACUTE", direction="l", lccode=0x00FA, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0301 }, unicodeslot=0x00DA, }, { adobename="Ucircumflex", category="lu", contextname="Ucircumflex", description="LATIN CAPITAL LETTER U WITH CIRCUMFLEX", direction="l", lccode=0x00FB, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0302 }, unicodeslot=0x00DB, }, { adobename="Udieresis", category="lu", contextname="Udiaeresis", description="LATIN CAPITAL LETTER U WITH DIAERESIS", direction="l", lccode=0x00FC, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0308 }, unicodeslot=0x00DC, }, { adobename="Yacute", category="lu", contextname="Yacute", description="LATIN CAPITAL LETTER Y WITH ACUTE", direction="l", lccode=0x00FD, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0301 }, unicodeslot=0x00DD, }, { adobename="Thorn", category="lu", cjkwd="a", contextname="Thorn", description="LATIN CAPITAL LETTER THORN", direction="l", lccode=0x00FE, linebreak="al", unicodeslot=0x00DE, }, { adobename="germandbls", category="ll", cjkwd="a", contextname="ssharp", description="LATIN SMALL LETTER SHARP S", direction="l", linebreak="al", uccode={ 0x0053, 0x0053 }, unicodeslot=0x00DF, }, { adobename="agrave", category="ll", cjkwd="a", contextname="agrave", description="LATIN SMALL LETTER A WITH GRAVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0300 }, uccode=0x00C0, unicodeslot=0x00E0, }, { adobename="aacute", category="ll", cjkwd="a", contextname="aacute", description="LATIN SMALL LETTER A WITH ACUTE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0301 }, uccode=0x00C1, unicodeslot=0x00E1, }, { adobename="acircumflex", category="ll", contextname="acircumflex", description="LATIN SMALL LETTER A WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0302 }, uccode=0x00C2, unicodeslot=0x00E2, }, { adobename="atilde", category="ll", contextname="atilde", description="LATIN SMALL LETTER A WITH TILDE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0303 }, uccode=0x00C3, unicodeslot=0x00E3, }, { adobename="adieresis", category="ll", contextname="adiaeresis", description="LATIN SMALL LETTER A WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0308 }, uccode=0x00C4, unicodeslot=0x00E4, }, { adobename="aring", category="ll", contextname="aring", description="LATIN SMALL LETTER A WITH RING ABOVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x030A }, uccode=0x00C5, unicodeslot=0x00E5, }, { adobename="ae", category="ll", cjkwd="a", contextname="aeligature", description="LATIN SMALL LETTER AE", direction="l", linebreak="al", shcode={ 0x0061, 0x0065 }, uccode=0x00C6, unicodeslot=0x00E6, }, { adobename="ccedilla", category="ll", contextname="ccedilla", description="LATIN SMALL LETTER C WITH CEDILLA", direction="l", linebreak="al", shcode=0x0063, specials={ "char", 0x0063, 0x0327 }, uccode=0x00C7, unicodeslot=0x00E7, }, { adobename="egrave", category="ll", cjkwd="a", contextname="egrave", description="LATIN SMALL LETTER E WITH GRAVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0300 }, uccode=0x00C8, unicodeslot=0x00E8, }, { adobename="eacute", category="ll", cjkwd="a", contextname="eacute", description="LATIN SMALL LETTER E WITH ACUTE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0301 }, uccode=0x00C9, unicodeslot=0x00E9, }, { adobename="ecircumflex", category="ll", cjkwd="a", contextname="ecircumflex", description="LATIN SMALL LETTER E WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0302 }, uccode=0x00CA, unicodeslot=0x00EA, }, { adobename="edieresis", category="ll", contextname="ediaeresis", description="LATIN SMALL LETTER E WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0308 }, uccode=0x00CB, unicodeslot=0x00EB, }, { adobename="igrave", category="ll", cjkwd="a", contextname="igrave", description="LATIN SMALL LETTER I WITH GRAVE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0300 }, uccode=0x00CC, unicodeslot=0x00EC, }, { adobename="iacute", category="ll", cjkwd="a", contextname="iacute", description="LATIN SMALL LETTER I WITH ACUTE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0301 }, uccode=0x00CD, unicodeslot=0x00ED, }, { adobename="icircumflex", category="ll", contextname="icircumflex", description="LATIN SMALL LETTER I WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0302 }, uccode=0x00CE, unicodeslot=0x00EE, }, { adobename="idieresis", category="ll", contextname="idiaeresis", description="LATIN SMALL LETTER I WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0308 }, uccode=0x00CF, unicodeslot=0x00EF, }, { adobename="eth", category="ll", cjkwd="a", comment="contextname=eth", description="LATIN SMALL LETTER ETH", direction="l", linebreak="al", mathclass="ordinary", mathname="eth", uccode=0x00D0, unicodeslot=0x00F0, }, { adobename="ntilde", category="ll", contextname="ntilde", description="LATIN SMALL LETTER N WITH TILDE", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0303 }, uccode=0x00D1, unicodeslot=0x00F1, }, { adobename="ograve", category="ll", cjkwd="a", contextname="ograve", description="LATIN SMALL LETTER O WITH GRAVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0300 }, uccode=0x00D2, unicodeslot=0x00F2, }, { adobename="oacute", category="ll", cjkwd="a", contextname="oacute", description="LATIN SMALL LETTER O WITH ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0301 }, uccode=0x00D3, unicodeslot=0x00F3, }, { adobename="ocircumflex", category="ll", contextname="ocircumflex", description="LATIN SMALL LETTER O WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0302 }, uccode=0x00D4, unicodeslot=0x00F4, }, { adobename="otilde", category="ll", contextname="otilde", description="LATIN SMALL LETTER O WITH TILDE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0303 }, uccode=0x00D5, unicodeslot=0x00F5, }, { adobename="odieresis", category="ll", contextname="odiaeresis", description="LATIN SMALL LETTER O WITH DIAERESIS", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0308 }, uccode=0x00D6, unicodeslot=0x00F6, }, { adobename="divide", category="sm", cjkwd="a", contextname="textdiv", description="DIVISION SIGN", direction="on", linebreak="ai", mathclass="binary", mathname="div", unicodeslot=0x00F7, }, { adobename="oslash", category="ll", cjkwd="a", contextname="ostroke", description="LATIN SMALL LETTER O WITH STROKE", direction="l", linebreak="al", shcode=0x006F, uccode=0x00D8, unicodeslot=0x00F8, }, { adobename="ugrave", category="ll", cjkwd="a", contextname="ugrave", description="LATIN SMALL LETTER U WITH GRAVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0300 }, uccode=0x00D9, unicodeslot=0x00F9, }, { adobename="uacute", category="ll", cjkwd="a", contextname="uacute", description="LATIN SMALL LETTER U WITH ACUTE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0301 }, uccode=0x00DA, unicodeslot=0x00FA, }, { adobename="ucircumflex", category="ll", contextname="ucircumflex", description="LATIN SMALL LETTER U WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0302 }, uccode=0x00DB, unicodeslot=0x00FB, }, { adobename="udieresis", category="ll", cjkwd="a", contextname="udiaeresis", description="LATIN SMALL LETTER U WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0308 }, uccode=0x00DC, unicodeslot=0x00FC, }, { adobename="yacute", category="ll", contextname="yacute", description="LATIN SMALL LETTER Y WITH ACUTE", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0301 }, uccode=0x00DD, unicodeslot=0x00FD, }, { adobename="thorn", category="ll", cjkwd="a", contextname="thorn", description="LATIN SMALL LETTER THORN", direction="l", linebreak="al", uccode=0x00DE, unicodeslot=0x00FE, }, { adobename="ydieresis", category="ll", contextname="ydiaeresis", description="LATIN SMALL LETTER Y WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0308 }, uccode=0x0178, unicodeslot=0x00FF, }, { adobename="Amacron", category="lu", contextname="Amacron", description="LATIN CAPITAL LETTER A WITH MACRON", direction="l", lccode=0x0101, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0304 }, unicodeslot=0x0100, }, { adobename="amacron", category="ll", cjkwd="a", contextname="amacron", description="LATIN SMALL LETTER A WITH MACRON", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0304 }, uccode=0x0100, unicodeslot=0x0101, }, { adobename="Abreve", category="lu", contextname="Abreve", description="LATIN CAPITAL LETTER A WITH BREVE", direction="l", lccode=0x0103, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0306 }, unicodeslot=0x0102, }, { adobename="abreve", category="ll", contextname="abreve", description="LATIN SMALL LETTER A WITH BREVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0306 }, uccode=0x0102, unicodeslot=0x0103, }, { adobename="Aogonek", category="lu", contextname="Aogonek", description="LATIN CAPITAL LETTER A WITH OGONEK", direction="l", lccode=0x0105, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0328 }, unicodeslot=0x0104, }, { adobename="aogonek", category="ll", contextname="aogonek", description="LATIN SMALL LETTER A WITH OGONEK", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0328 }, uccode=0x0104, unicodeslot=0x0105, }, { adobename="Cacute", category="lu", contextname="Cacute", description="LATIN CAPITAL LETTER C WITH ACUTE", direction="l", lccode=0x0107, linebreak="al", shcode=0x0043, specials={ "char", 0x0043, 0x0301 }, unicodeslot=0x0106, }, { adobename="cacute", category="ll", contextname="cacute", description="LATIN SMALL LETTER C WITH ACUTE", direction="l", linebreak="al", shcode=0x0063, specials={ "char", 0x0063, 0x0301 }, uccode=0x0106, unicodeslot=0x0107, }, { adobename="Ccircumflex", category="lu", contextname="Ccircumflex", description="LATIN CAPITAL LETTER C WITH CIRCUMFLEX", direction="l", lccode=0x0109, linebreak="al", shcode=0x0043, specials={ "char", 0x0043, 0x0302 }, unicodeslot=0x0108, }, { adobename="ccircumflex", category="ll", contextname="ccircumflex", description="LATIN SMALL LETTER C WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0063, specials={ "char", 0x0063, 0x0302 }, uccode=0x0108, unicodeslot=0x0109, }, { adobename="Cdotaccent", category="lu", contextname="Cdotaccent", description="LATIN CAPITAL LETTER C WITH DOT ABOVE", direction="l", lccode=0x010B, linebreak="al", shcode=0x0043, specials={ "char", 0x0043, 0x0307 }, unicodeslot=0x010A, }, { adobename="cdotaccent", category="ll", contextname="cdotaccent", description="LATIN SMALL LETTER C WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0063, specials={ "char", 0x0063, 0x0307 }, uccode=0x010A, unicodeslot=0x010B, }, { adobename="Ccaron", category="lu", contextname="Ccaron", description="LATIN CAPITAL LETTER C WITH CARON", direction="l", lccode=0x010D, linebreak="al", shcode=0x0043, specials={ "char", 0x0043, 0x030C }, unicodeslot=0x010C, }, { adobename="ccaron", category="ll", contextname="ccaron", description="LATIN SMALL LETTER C WITH CARON", direction="l", linebreak="al", shcode=0x0063, specials={ "char", 0x0063, 0x030C }, uccode=0x010C, unicodeslot=0x010D, }, { adobename="Dcaron", category="lu", contextname="Dcaron", description="LATIN CAPITAL LETTER D WITH CARON", direction="l", lccode=0x010F, linebreak="al", shcode=0x0044, specials={ "char", 0x0044, 0x030C }, unicodeslot=0x010E, }, { adobename="dcaron", category="ll", contextname="dcaron", description="LATIN SMALL LETTER D WITH CARON", direction="l", linebreak="al", shcode=0x0064, specials={ "char", 0x0064, 0x030C }, uccode=0x010E, unicodeslot=0x010F, }, { adobename="Dslash", category="lu", contextname="Dstroke", description="LATIN CAPITAL LETTER D WITH STROKE", direction="l", lccode=0x0111, linebreak="al", shcode=0x0044, unicodeslot=0x0110, }, { adobename="dmacron", category="ll", cjkwd="a", contextname="dstroke", description="LATIN SMALL LETTER D WITH STROKE", direction="l", linebreak="al", shcode=0x0064, uccode=0x0110, unicodeslot=0x0111, }, { adobename="Emacron", category="lu", contextname="Emacron", description="LATIN CAPITAL LETTER E WITH MACRON", direction="l", lccode=0x0113, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0304 }, unicodeslot=0x0112, }, { adobename="emacron", category="ll", cjkwd="a", contextname="emacron", description="LATIN SMALL LETTER E WITH MACRON", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0304 }, uccode=0x0112, unicodeslot=0x0113, }, { adobename="Ebreve", category="lu", contextname="Ebreve", description="LATIN CAPITAL LETTER E WITH BREVE", direction="l", lccode=0x0115, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0306 }, unicodeslot=0x0114, }, { adobename="ebreve", category="ll", contextname="ebreve", description="LATIN SMALL LETTER E WITH BREVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0306 }, uccode=0x0114, unicodeslot=0x0115, }, { adobename="Edotaccent", category="lu", contextname="Edotaccent", description="LATIN CAPITAL LETTER E WITH DOT ABOVE", direction="l", lccode=0x0117, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0307 }, unicodeslot=0x0116, }, { adobename="edotaccent", category="ll", contextname="edotaccent", description="LATIN SMALL LETTER E WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0307 }, uccode=0x0116, unicodeslot=0x0117, }, { adobename="Eogonek", category="lu", contextname="Eogonek", description="LATIN CAPITAL LETTER E WITH OGONEK", direction="l", lccode=0x0119, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0328 }, unicodeslot=0x0118, }, { adobename="eogonek", category="ll", contextname="eogonek", description="LATIN SMALL LETTER E WITH OGONEK", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0328 }, uccode=0x0118, unicodeslot=0x0119, }, { adobename="Ecaron", category="lu", contextname="Ecaron", description="LATIN CAPITAL LETTER E WITH CARON", direction="l", lccode=0x011B, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x030C }, unicodeslot=0x011A, }, { adobename="ecaron", category="ll", cjkwd="a", contextname="ecaron", description="LATIN SMALL LETTER E WITH CARON", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x030C }, uccode=0x011A, unicodeslot=0x011B, }, { adobename="Gcircumflex", category="lu", contextname="Gcircumflex", description="LATIN CAPITAL LETTER G WITH CIRCUMFLEX", direction="l", lccode=0x011D, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x0302 }, unicodeslot=0x011C, }, { adobename="gcircumflex", category="ll", contextname="gcircumflex", description="LATIN SMALL LETTER G WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x0302 }, uccode=0x011C, unicodeslot=0x011D, }, { adobename="Gbreve", category="lu", contextname="Gbreve", description="LATIN CAPITAL LETTER G WITH BREVE", direction="l", lccode=0x011F, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x0306 }, unicodeslot=0x011E, }, { adobename="gbreve", category="ll", contextname="gbreve", description="LATIN SMALL LETTER G WITH BREVE", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x0306 }, uccode=0x011E, unicodeslot=0x011F, }, { adobename="Gdotaccent", category="lu", contextname="Gdotaccent", description="LATIN CAPITAL LETTER G WITH DOT ABOVE", direction="l", lccode=0x0121, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x0307 }, unicodeslot=0x0120, }, { adobename="gdotaccent", category="ll", contextname="gdotaccent", description="LATIN SMALL LETTER G WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x0307 }, uccode=0x0120, unicodeslot=0x0121, }, { adobename="Gcommaaccent", category="lu", contextname="Gcommaaccent", description="LATIN CAPITAL LETTER G WITH CEDILLA", direction="l", lccode=0x0123, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x0327 }, unicodeslot=0x0122, }, { adobename="gcommaaccent", category="ll", contextname="gcommaaccent", description="LATIN SMALL LETTER G WITH CEDILLA", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x0327 }, uccode=0x0122, unicodeslot=0x0123, }, { adobename="Hcircumflex", category="lu", contextname="Hcircumflex", description="LATIN CAPITAL LETTER H WITH CIRCUMFLEX", direction="l", lccode=0x0125, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x0302 }, unicodeslot=0x0124, }, { adobename="hcircumflex", category="ll", contextname="hcircumflex", description="LATIN SMALL LETTER H WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x0302 }, uccode=0x0124, unicodeslot=0x0125, }, { adobename="Hbar", category="lu", cjkwd="a", contextname="Hstroke", description="LATIN CAPITAL LETTER H WITH STROKE", direction="l", lccode=0x0127, linebreak="al", shcode=0x0048, unicodeslot=0x0126, }, { adobename="hbar", category="ll", cjkwd="a", contextname="hstroke", description="LATIN SMALL LETTER H WITH STROKE", direction="l", linebreak="al", shcode=0x0068, uccode=0x0126, unicodeslot=0x0127, }, { adobename="Itilde", category="lu", contextname="Itilde", description="LATIN CAPITAL LETTER I WITH TILDE", direction="l", lccode=0x0129, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0303 }, unicodeslot=0x0128, }, { adobename="itilde", category="ll", contextname="itilde", description="LATIN SMALL LETTER I WITH TILDE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0303 }, uccode=0x0128, unicodeslot=0x0129, }, { adobename="Imacron", category="lu", contextname="Imacron", description="LATIN CAPITAL LETTER I WITH MACRON", direction="l", lccode=0x012B, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0304 }, unicodeslot=0x012A, }, { adobename="imacron", category="ll", cjkwd="a", contextname="imacron", description="LATIN SMALL LETTER I WITH MACRON", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0304 }, uccode=0x012A, unicodeslot=0x012B, }, { adobename="Ibreve", category="lu", contextname="Ibreve", description="LATIN CAPITAL LETTER I WITH BREVE", direction="l", lccode=0x012D, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0306 }, unicodeslot=0x012C, }, { adobename="ibreve", category="ll", contextname="ibreve", description="LATIN SMALL LETTER I WITH BREVE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0306 }, uccode=0x012C, unicodeslot=0x012D, }, { adobename="Iogonek", category="lu", contextname="Iogonek", description="LATIN CAPITAL LETTER I WITH OGONEK", direction="l", lccode=0x012F, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0328 }, unicodeslot=0x012E, }, { adobename="iogonek", category="ll", contextname="iogonek", description="LATIN SMALL LETTER I WITH OGONEK", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0328 }, uccode=0x012E, unicodeslot=0x012F, }, { adobename="Idotaccent", category="lu", contextname="Idotaccent", description="LATIN CAPITAL LETTER I WITH DOT ABOVE", direction="l", lccode=0x0069, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0307 }, unicodeslot=0x0130, }, { adobename="dotlessi", category="ll", cjkwd="a", contextname="dotlessi", description="LATIN SMALL LETTER DOTLESS I", direction="l", linebreak="al", uccode=0x0049, unicodeslot=0x0131, }, { adobename="IJ", category="lu", cjkwd="a", contextname="IJligature", description="LATIN CAPITAL LIGATURE IJ", direction="l", lccode=0x0133, linebreak="al", shcode={ 0x0049, 0x004A }, specials={ "compat", 0x0049, 0x004A }, unicodeslot=0x0132, }, { adobename="ij", category="ll", cjkwd="a", contextname="ijligature", description="LATIN SMALL LIGATURE IJ", direction="l", linebreak="al", shcode={ 0x0069, 0x006A }, specials={ "compat", 0x0069, 0x006A }, uccode=0x0132, unicodeslot=0x0133, }, { adobename="Jcircumflex", category="lu", contextname="Jcircumflex", description="LATIN CAPITAL LETTER J WITH CIRCUMFLEX", direction="l", lccode=0x0135, linebreak="al", shcode=0x004A, specials={ "char", 0x004A, 0x0302 }, unicodeslot=0x0134, }, { adobename="jcircumflex", category="ll", contextname="jcircumflex", description="LATIN SMALL LETTER J WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x006A, specials={ "char", 0x006A, 0x0302 }, uccode=0x0134, unicodeslot=0x0135, }, { adobename="Kcommaaccent", category="lu", contextname="Kcommaaccent", description="LATIN CAPITAL LETTER K WITH CEDILLA", direction="l", lccode=0x0137, linebreak="al", shcode=0x004B, specials={ "char", 0x004B, 0x0327 }, unicodeslot=0x0136, }, { adobename="kcommaaccent", category="ll", contextname="kcommaaccent", description="LATIN SMALL LETTER K WITH CEDILLA", direction="l", linebreak="al", shcode=0x006B, specials={ "char", 0x006B, 0x0327 }, uccode=0x0136, unicodeslot=0x0137, }, { adobename="kgreenlandic", category="ll", cjkwd="a", contextname="kkra", description="LATIN SMALL LETTER KRA", direction="l", linebreak="al", unicodeslot=0x0138, }, { adobename="Lacute", category="lu", contextname="Lacute", description="LATIN CAPITAL LETTER L WITH ACUTE", direction="l", lccode=0x013A, linebreak="al", shcode=0x004C, specials={ "char", 0x004C, 0x0301 }, unicodeslot=0x0139, }, { adobename="lacute", category="ll", contextname="lacute", description="LATIN SMALL LETTER L WITH ACUTE", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x006C, 0x0301 }, uccode=0x0139, unicodeslot=0x013A, }, { adobename="Lcommaaccent", category="lu", contextname="Lcommaaccent", description="LATIN CAPITAL LETTER L WITH CEDILLA", direction="l", lccode=0x013C, linebreak="al", shcode=0x004C, specials={ "char", 0x004C, 0x0327 }, unicodeslot=0x013B, }, { adobename="lcommaaccent", category="ll", contextname="lcommaaccent", description="LATIN SMALL LETTER L WITH CEDILLA", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x006C, 0x0327 }, uccode=0x013B, unicodeslot=0x013C, }, { adobename="Lcaron", category="lu", contextname="Lcaron", description="LATIN CAPITAL LETTER L WITH CARON", direction="l", lccode=0x013E, linebreak="al", shcode=0x004C, specials={ "char", 0x004C, 0x030C }, unicodeslot=0x013D, }, { adobename="lcaron", category="ll", contextname="lcaron", description="LATIN SMALL LETTER L WITH CARON", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x006C, 0x030C }, uccode=0x013D, unicodeslot=0x013E, }, { adobename="Ldotaccent", category="lu", cjkwd="a", contextname="Ldotmiddle", description="LATIN CAPITAL LETTER L WITH MIDDLE DOT", direction="l", lccode=0x0140, linebreak="al", shcode=0x004C, specials={ "compat", 0x004C, 0x00B7 }, unicodeslot=0x013F, }, { adobename="ldotaccent", category="ll", cjkwd="a", contextname="ldotmiddle", description="LATIN SMALL LETTER L WITH MIDDLE DOT", direction="l", linebreak="al", shcode=0x006C, specials={ "compat", 0x006C, 0x00B7 }, uccode=0x013F, unicodeslot=0x0140, }, { adobename="Lslash", category="lu", cjkwd="a", contextname="Lstroke", description="LATIN CAPITAL LETTER L WITH STROKE", direction="l", lccode=0x0142, linebreak="al", shcode=0x004C, unicodeslot=0x0141, }, { adobename="lslash", category="ll", cjkwd="a", contextname="lstroke", description="LATIN SMALL LETTER L WITH STROKE", direction="l", linebreak="al", shcode=0x006C, uccode=0x0141, unicodeslot=0x0142, }, { adobename="Nacute", category="lu", contextname="Nacute", description="LATIN CAPITAL LETTER N WITH ACUTE", direction="l", lccode=0x0144, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0301 }, unicodeslot=0x0143, }, { adobename="nacute", category="ll", cjkwd="a", contextname="nacute", description="LATIN SMALL LETTER N WITH ACUTE", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0301 }, uccode=0x0143, unicodeslot=0x0144, }, { adobename="Ncommaaccent", category="lu", contextname="Ncommaaccent", description="LATIN CAPITAL LETTER N WITH CEDILLA", direction="l", lccode=0x0146, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0327 }, unicodeslot=0x0145, }, { adobename="ncommaaccent", category="ll", contextname="ncommaaccent", description="LATIN SMALL LETTER N WITH CEDILLA", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0327 }, uccode=0x0145, unicodeslot=0x0146, }, { adobename="Ncaron", category="lu", contextname="Ncaron", description="LATIN CAPITAL LETTER N WITH CARON", direction="l", lccode=0x0148, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x030C }, unicodeslot=0x0147, }, { adobename="ncaron", category="ll", cjkwd="a", contextname="ncaron", description="LATIN SMALL LETTER N WITH CARON", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x030C }, uccode=0x0147, unicodeslot=0x0148, }, { adobename="quoterightn", category="ll", cjkwd="a", contextname="napostrophe", description="LATIN SMALL LETTER N PRECEDED BY APOSTROPHE", direction="l", linebreak="al", specials={ "compat", 0x02BC, 0x006E }, unicodeslot=0x0149, }, { adobename="Eng", category="lu", cjkwd="a", contextname="Neng", description="LATIN CAPITAL LETTER ENG", direction="l", lccode=0x014B, linebreak="al", unicodeslot=0x014A, }, { adobename="eng", category="ll", cjkwd="a", contextname="neng", description="LATIN SMALL LETTER ENG", direction="l", linebreak="al", uccode=0x014A, unicodeslot=0x014B, }, { adobename="Omacron", category="lu", contextname="Omacron", description="LATIN CAPITAL LETTER O WITH MACRON", direction="l", lccode=0x014D, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0304 }, unicodeslot=0x014C, }, { adobename="omacron", category="ll", cjkwd="a", contextname="omacron", description="LATIN SMALL LETTER O WITH MACRON", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0304 }, uccode=0x014C, unicodeslot=0x014D, }, { adobename="Obreve", category="lu", contextname="Obreve", description="LATIN CAPITAL LETTER O WITH BREVE", direction="l", lccode=0x014F, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0306 }, unicodeslot=0x014E, }, { adobename="obreve", category="ll", contextname="obreve", description="LATIN SMALL LETTER O WITH BREVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0306 }, uccode=0x014E, unicodeslot=0x014F, }, { adobename="Ohungarumlaut", category="lu", contextname="Ohungarumlaut", description="LATIN CAPITAL LETTER O WITH DOUBLE ACUTE", direction="l", lccode=0x0151, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x030B }, unicodeslot=0x0150, }, { adobename="ohungarumlaut", category="ll", contextname="ohungarumlaut", description="LATIN SMALL LETTER O WITH DOUBLE ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x030B }, uccode=0x0150, unicodeslot=0x0151, }, { adobename="OE", category="lu", cjkwd="a", contextname="OEligature", description="LATIN CAPITAL LIGATURE OE", direction="l", lccode=0x0153, linebreak="al", shcode={ 0x004F, 0x0045 }, unicodeslot=0x0152, }, { adobename="oe", category="ll", cjkwd="a", contextname="oeligature", description="LATIN SMALL LIGATURE OE", direction="l", linebreak="al", shcode={ 0x006F, 0x0065 }, uccode=0x0152, unicodeslot=0x0153, }, { adobename="Racute", category="lu", contextname="Racute", description="LATIN CAPITAL LETTER R WITH ACUTE", direction="l", lccode=0x0155, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x0301 }, unicodeslot=0x0154, }, { adobename="racute", category="ll", contextname="racute", description="LATIN SMALL LETTER R WITH ACUTE", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x0301 }, uccode=0x0154, unicodeslot=0x0155, }, { adobename="Rcommaaccent", category="lu", contextname="Rcommaaccent", description="LATIN CAPITAL LETTER R WITH CEDILLA", direction="l", lccode=0x0157, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x0327 }, unicodeslot=0x0156, }, { adobename="rcommaaccent", category="ll", contextname="rcommaaccent", description="LATIN SMALL LETTER R WITH CEDILLA", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x0327 }, uccode=0x0156, unicodeslot=0x0157, }, { adobename="Rcaron", category="lu", contextname="Rcaron", description="LATIN CAPITAL LETTER R WITH CARON", direction="l", lccode=0x0159, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x030C }, unicodeslot=0x0158, }, { adobename="rcaron", category="ll", contextname="rcaron", description="LATIN SMALL LETTER R WITH CARON", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x030C }, uccode=0x0158, unicodeslot=0x0159, }, { adobename="Sacute", category="lu", contextname="Sacute", description="LATIN CAPITAL LETTER S WITH ACUTE", direction="l", lccode=0x015B, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x0301 }, unicodeslot=0x015A, }, { adobename="sacute", category="ll", contextname="sacute", description="LATIN SMALL LETTER S WITH ACUTE", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x0301 }, uccode=0x015A, unicodeslot=0x015B, }, { adobename="Scircumflex", category="lu", contextname="Scircumflex", description="LATIN CAPITAL LETTER S WITH CIRCUMFLEX", direction="l", lccode=0x015D, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x0302 }, unicodeslot=0x015C, }, { adobename="scircumflex", category="ll", contextname="scircumflex", description="LATIN SMALL LETTER S WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x0302 }, uccode=0x015C, unicodeslot=0x015D, }, { adobename="Scedilla", category="lu", contextname="Scedilla", description="LATIN CAPITAL LETTER S WITH CEDILLA", direction="l", lccode=0x015F, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x0327 }, unicodeslot=0x015E, }, { adobename="scedilla", category="ll", contextname="scedilla", description="LATIN SMALL LETTER S WITH CEDILLA", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x0327 }, uccode=0x015E, unicodeslot=0x015F, }, { adobename="Scaron", category="lu", contextname="Scaron", description="LATIN CAPITAL LETTER S WITH CARON", direction="l", lccode=0x0161, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x030C }, unicodeslot=0x0160, }, { adobename="scaron", category="ll", contextname="scaron", description="LATIN SMALL LETTER S WITH CARON", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x030C }, uccode=0x0160, unicodeslot=0x0161, }, { adobename="Tcommaaccent", category="lu", contextname="Tcedilla", description="LATIN CAPITAL LETTER T WITH CEDILLA", direction="l", lccode=0x0163, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x0327 }, unicodeslot=0x0162, }, { adobename="tcommaaccent", category="ll", contextname="tcedilla", description="LATIN SMALL LETTER T WITH CEDILLA", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x0327 }, uccode=0x0162, unicodeslot=0x0163, }, { adobename="Tcaron", category="lu", contextname="Tcaron", description="LATIN CAPITAL LETTER T WITH CARON", direction="l", lccode=0x0165, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x030C }, unicodeslot=0x0164, }, { adobename="tcaron", category="ll", contextname="tcaron", description="LATIN SMALL LETTER T WITH CARON", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x030C }, uccode=0x0164, unicodeslot=0x0165, }, { adobename="Tbar", category="lu", cjkwd="a", contextname="Tstroke", description="LATIN CAPITAL LETTER T WITH STROKE", direction="l", lccode=0x0167, linebreak="al", shcode=0x0054, unicodeslot=0x0166, }, { adobename="tbar", category="ll", cjkwd="a", contextname="tstroke", description="LATIN SMALL LETTER T WITH STROKE", direction="l", linebreak="al", shcode=0x0074, uccode=0x0166, unicodeslot=0x0167, }, { adobename="Utilde", category="lu", contextname="Utilde", description="LATIN CAPITAL LETTER U WITH TILDE", direction="l", lccode=0x0169, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0303 }, unicodeslot=0x0168, }, { adobename="utilde", category="ll", contextname="utilde", description="LATIN SMALL LETTER U WITH TILDE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0303 }, uccode=0x0168, unicodeslot=0x0169, }, { adobename="Umacron", category="lu", contextname="Umacron", description="LATIN CAPITAL LETTER U WITH MACRON", direction="l", lccode=0x016B, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0304 }, unicodeslot=0x016A, }, { adobename="umacron", category="ll", cjkwd="a", contextname="umacron", description="LATIN SMALL LETTER U WITH MACRON", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0304 }, uccode=0x016A, unicodeslot=0x016B, }, { adobename="Ubreve", category="lu", contextname="Ubreve", description="LATIN CAPITAL LETTER U WITH BREVE", direction="l", lccode=0x016D, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0306 }, unicodeslot=0x016C, }, { adobename="ubreve", category="ll", contextname="ubreve", description="LATIN SMALL LETTER U WITH BREVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0306 }, uccode=0x016C, unicodeslot=0x016D, }, { adobename="Uring", category="lu", contextname="Uring", description="LATIN CAPITAL LETTER U WITH RING ABOVE", direction="l", lccode=0x016F, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x030A }, unicodeslot=0x016E, }, { adobename="uring", category="ll", contextname="uring", description="LATIN SMALL LETTER U WITH RING ABOVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x030A }, uccode=0x016E, unicodeslot=0x016F, }, { adobename="Uhungarumlaut", category="lu", contextname="Uhungarumlaut", description="LATIN CAPITAL LETTER U WITH DOUBLE ACUTE", direction="l", lccode=0x0171, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x030B }, unicodeslot=0x0170, }, { adobename="uhungarumlaut", category="ll", contextname="uhungarumlaut", description="LATIN SMALL LETTER U WITH DOUBLE ACUTE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x030B }, uccode=0x0170, unicodeslot=0x0171, }, { adobename="Uogonek", category="lu", contextname="Uogonek", description="LATIN CAPITAL LETTER U WITH OGONEK", direction="l", lccode=0x0173, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0328 }, unicodeslot=0x0172, }, { adobename="uogonek", category="ll", contextname="uogonek", description="LATIN SMALL LETTER U WITH OGONEK", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0328 }, uccode=0x0172, unicodeslot=0x0173, }, { adobename="Wcircumflex", category="lu", contextname="Wcircumflex", description="LATIN CAPITAL LETTER W WITH CIRCUMFLEX", direction="l", lccode=0x0175, linebreak="al", shcode=0x0057, specials={ "char", 0x0057, 0x0302 }, unicodeslot=0x0174, }, { adobename="wcircumflex", category="ll", contextname="wcircumflex", description="LATIN SMALL LETTER W WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x0302 }, uccode=0x0174, unicodeslot=0x0175, }, { adobename="Ycircumflex", category="lu", contextname="Ycircumflex", description="LATIN CAPITAL LETTER Y WITH CIRCUMFLEX", direction="l", lccode=0x0177, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0302 }, unicodeslot=0x0176, }, { adobename="ycircumflex", category="ll", contextname="ycircumflex", description="LATIN SMALL LETTER Y WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0302 }, uccode=0x0176, unicodeslot=0x0177, }, { adobename="Ydieresis", category="lu", contextname="Ydiaeresis", description="LATIN CAPITAL LETTER Y WITH DIAERESIS", direction="l", lccode=0x00FF, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0308 }, unicodeslot=0x0178, }, { adobename="Zacute", category="lu", contextname="Zacute", description="LATIN CAPITAL LETTER Z WITH ACUTE", direction="l", lccode=0x017A, linebreak="al", shcode=0x005A, specials={ "char", 0x005A, 0x0301 }, unicodeslot=0x0179, }, { adobename="zacute", category="ll", contextname="zacute", description="LATIN SMALL LETTER Z WITH ACUTE", direction="l", linebreak="al", shcode=0x007A, specials={ "char", 0x007A, 0x0301 }, uccode=0x0179, unicodeslot=0x017A, }, { adobename="Zdotaccent", category="lu", contextname="Zdotaccent", description="LATIN CAPITAL LETTER Z WITH DOT ABOVE", direction="l", lccode=0x017C, linebreak="al", shcode=0x005A, specials={ "char", 0x005A, 0x0307 }, unicodeslot=0x017B, }, { adobename="zdotaccent", category="ll", contextname="zdotaccent", description="LATIN SMALL LETTER Z WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x007A, specials={ "char", 0x007A, 0x0307 }, uccode=0x017B, unicodeslot=0x017C, }, { adobename="Zcaron", category="lu", contextname="Zcaron", description="LATIN CAPITAL LETTER Z WITH CARON", direction="l", lccode=0x017E, linebreak="al", shcode=0x005A, specials={ "char", 0x005A, 0x030C }, unicodeslot=0x017D, }, { adobename="zcaron", category="ll", contextname="zcaron", description="LATIN SMALL LETTER Z WITH CARON", direction="l", linebreak="al", shcode=0x007A, specials={ "char", 0x007A, 0x030C }, uccode=0x017D, unicodeslot=0x017E, }, { adobename="slong", category="ll", contextname="slong", description="LATIN SMALL LETTER LONG S", direction="l", linebreak="al", specials={ "compat", 0x0073 }, uccode=0x0053, unicodeslot=0x017F, }, { adobename="bstroke", category="ll", contextname="bstroke", description="LATIN SMALL LETTER B WITH STROKE", direction="l", linebreak="al", shcode=0x0062, uccode=0x0243, unicodeslot=0x0180, }, { adobename="Bhook", category="lu", contextname="Bhook", description="LATIN CAPITAL LETTER B WITH HOOK", direction="l", lccode=0x0253, linebreak="al", shcode=0x0042, unicodeslot=0x0181, }, { adobename="Btopbar", category="lu", description="LATIN CAPITAL LETTER B WITH TOPBAR", direction="l", lccode=0x0183, linebreak="al", shcode=0x0042, unicodeslot=0x0182, }, { adobename="btopbar", category="ll", description="LATIN SMALL LETTER B WITH TOPBAR", direction="l", linebreak="al", shcode=0x0062, uccode=0x0182, unicodeslot=0x0183, }, { adobename="Tonesix", category="lu", description="LATIN CAPITAL LETTER TONE SIX", direction="l", lccode=0x0185, linebreak="al", unicodeslot=0x0184, }, { adobename="tonesix", category="ll", description="LATIN SMALL LETTER TONE SIX", direction="l", linebreak="al", uccode=0x0184, unicodeslot=0x0185, }, { adobename="Oopen", category="lu", description="LATIN CAPITAL LETTER OPEN O", direction="l", lccode=0x0254, linebreak="al", unicodeslot=0x0186, }, { adobename="Chook", category="lu", contextname="Chook", description="LATIN CAPITAL LETTER C WITH HOOK", direction="l", lccode=0x0188, linebreak="al", shcode=0x0043, unicodeslot=0x0187, }, { adobename="chook", category="ll", contextname="chook", description="LATIN SMALL LETTER C WITH HOOK", direction="l", linebreak="al", shcode=0x0063, uccode=0x0187, unicodeslot=0x0188, }, { adobename="Dafrican", category="lu", contextname="Dafrican", description="LATIN CAPITAL LETTER AFRICAN D", direction="l", lccode=0x0256, linebreak="al", unicodeslot=0x0189, }, { adobename="Dhook", category="lu", contextname="Dhook", description="LATIN CAPITAL LETTER D WITH HOOK", direction="l", lccode=0x0257, linebreak="al", shcode=0x0044, unicodeslot=0x018A, }, { adobename="Dtopbar", category="lu", description="LATIN CAPITAL LETTER D WITH TOPBAR", direction="l", lccode=0x018C, linebreak="al", shcode=0x0044, unicodeslot=0x018B, }, { adobename="dtopbar", category="ll", description="LATIN SMALL LETTER D WITH TOPBAR", direction="l", linebreak="al", shcode=0x0064, uccode=0x018B, unicodeslot=0x018C, }, { adobename="deltaturned", category="ll", description="LATIN SMALL LETTER TURNED DELTA", direction="l", linebreak="al", unicodeslot=0x018D, }, { adobename="Ereversed", category="lu", description="LATIN CAPITAL LETTER REVERSED E", direction="l", lccode=0x01DD, linebreak="al", unicodeslot=0x018E, }, { adobename="Schwa", category="lu", contextname="Schwa", description="LATIN CAPITAL LETTER SCHWA", direction="l", lccode=0x0259, linebreak="al", unicodeslot=0x018F, }, { adobename="Eopen", category="lu", description="LATIN CAPITAL LETTER OPEN E", direction="l", lccode=0x025B, linebreak="al", unicodeslot=0x0190, }, { adobename="Fhook", category="lu", contextname="Fhook", description="LATIN CAPITAL LETTER F WITH HOOK", direction="l", lccode=0x0192, linebreak="al", shcode=0x0046, unicodeslot=0x0191, }, { adobename="florin", category="ll", contextname="fhook", description="LATIN SMALL LETTER F WITH HOOK", direction="l", linebreak="al", shcode=0x0066, uccode=0x0191, unicodeslot=0x0192, }, { adobename="Ghook", category="lu", contextname="Ghook", description="LATIN CAPITAL LETTER G WITH HOOK", direction="l", lccode=0x0260, linebreak="al", shcode=0x0047, unicodeslot=0x0193, }, { adobename="Gammaafrican", category="lu", description="LATIN CAPITAL LETTER GAMMA", direction="l", lccode=0x0263, linebreak="al", unicodeslot=0x0194, }, { adobename="hv", category="ll", description="LATIN SMALL LETTER HV", direction="l", linebreak="al", uccode=0x01F6, unicodeslot=0x0195, }, { adobename="Iotaafrican", category="lu", description="LATIN CAPITAL LETTER IOTA", direction="l", lccode=0x0269, linebreak="al", unicodeslot=0x0196, }, { adobename="Istroke", category="lu", contextname="Istroke", description="LATIN CAPITAL LETTER I WITH STROKE", direction="l", lccode=0x0268, linebreak="al", shcode=0x0049, unicodeslot=0x0197, }, { adobename="Khook", category="lu", contextname="Khook", description="LATIN CAPITAL LETTER K WITH HOOK", direction="l", lccode=0x0199, linebreak="al", shcode=0x004B, unicodeslot=0x0198, }, { adobename="khook", category="ll", contextname="khook", description="LATIN SMALL LETTER K WITH HOOK", direction="l", linebreak="al", shcode=0x006B, uccode=0x0198, unicodeslot=0x0199, }, { adobename="lbar", category="ll", contextname="lbar", description="LATIN SMALL LETTER L WITH BAR", direction="l", linebreak="al", shcode=0x006C, uccode=0x023D, unicodeslot=0x019A, }, { adobename="lambdastroke", category="ll", description="LATIN SMALL LETTER LAMBDA WITH STROKE", direction="l", linebreak="al", unicodeslot=0x019B, }, { adobename="Mturned", category="lu", description="LATIN CAPITAL LETTER TURNED M", direction="l", lccode=0x026F, linebreak="al", unicodeslot=0x019C, }, { adobename="Nhookleft", category="lu", description="LATIN CAPITAL LETTER N WITH LEFT HOOK", direction="l", lccode=0x0272, linebreak="al", shcode=0x004E, unicodeslot=0x019D, }, { adobename="nlegrightlong", category="ll", description="LATIN SMALL LETTER N WITH LONG RIGHT LEG", direction="l", linebreak="al", shcode=0x006E, uccode=0x0220, unicodeslot=0x019E, }, { adobename="Ocenteredtilde", category="lu", description="LATIN CAPITAL LETTER O WITH MIDDLE TILDE", direction="l", lccode=0x0275, linebreak="al", shcode=0x004F, unicodeslot=0x019F, }, { adobename="Ohorn", category="lu", contextname="Ohorn", description="LATIN CAPITAL LETTER O WITH HORN", direction="l", lccode=0x01A1, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x031B }, unicodeslot=0x01A0, }, { adobename="ohorn", category="ll", contextname="ohorn", description="LATIN SMALL LETTER O WITH HORN", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x031B }, uccode=0x01A0, unicodeslot=0x01A1, }, { adobename="Oi", category="lu", description="LATIN CAPITAL LETTER OI", direction="l", lccode=0x01A3, linebreak="al", unicodeslot=0x01A2, }, { adobename="oi", category="ll", description="LATIN SMALL LETTER OI", direction="l", linebreak="al", uccode=0x01A2, unicodeslot=0x01A3, }, { adobename="Phook", category="lu", contextname="Phook", description="LATIN CAPITAL LETTER P WITH HOOK", direction="l", lccode=0x01A5, linebreak="al", shcode=0x0050, unicodeslot=0x01A4, }, { adobename="phook", category="ll", contextname="phook", description="LATIN SMALL LETTER P WITH HOOK", direction="l", linebreak="al", shcode=0x0070, uccode=0x01A4, unicodeslot=0x01A5, }, { adobename="yr", category="lu", description="LATIN LETTER YR", direction="l", lccode=0x0280, linebreak="al", unicodeslot=0x01A6, }, { adobename="Tonetwo", category="lu", description="LATIN CAPITAL LETTER TONE TWO", direction="l", lccode=0x01A8, linebreak="al", unicodeslot=0x01A7, }, { adobename="tonetwo", category="ll", description="LATIN SMALL LETTER TONE TWO", direction="l", linebreak="al", uccode=0x01A7, unicodeslot=0x01A8, }, { adobename="Esh", category="lu", description="LATIN CAPITAL LETTER ESH", direction="l", lccode=0x0283, linebreak="al", unicodeslot=0x01A9, }, { adobename="eshreversedloop", category="ll", description="LATIN LETTER REVERSED ESH LOOP", direction="l", linebreak="al", unicodeslot=0x01AA, }, { adobename="tpalatalhook", category="ll", description="LATIN SMALL LETTER T WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0074, unicodeslot=0x01AB, }, { adobename="Thook", category="lu", contextname="Thook", description="LATIN CAPITAL LETTER T WITH HOOK", direction="l", lccode=0x01AD, linebreak="al", shcode=0x0054, unicodeslot=0x01AC, }, { adobename="thook", category="ll", contextname="thook", description="LATIN SMALL LETTER T WITH HOOK", direction="l", linebreak="al", shcode=0x0074, uccode=0x01AC, unicodeslot=0x01AD, }, { adobename="Tretroflexhook", category="lu", description="LATIN CAPITAL LETTER T WITH RETROFLEX HOOK", direction="l", lccode=0x0288, linebreak="al", shcode=0x0054, unicodeslot=0x01AE, }, { adobename="Uhorn", category="lu", contextname="Uhorn", description="LATIN CAPITAL LETTER U WITH HORN", direction="l", lccode=0x01B0, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x031B }, unicodeslot=0x01AF, }, { adobename="uhorn", category="ll", contextname="uhorn", description="LATIN SMALL LETTER U WITH HORN", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x031B }, uccode=0x01AF, unicodeslot=0x01B0, }, { adobename="Upsilonafrican", category="lu", description="LATIN CAPITAL LETTER UPSILON", direction="l", lccode=0x028A, linebreak="al", unicodeslot=0x01B1, }, { adobename="Vhook", category="lu", contextname="Uhook", description="LATIN CAPITAL LETTER V WITH HOOK", direction="l", lccode=0x028B, linebreak="al", shcode=0x0056, unicodeslot=0x01B2, }, { adobename="Yhook", category="lu", contextname="Yhook", description="LATIN CAPITAL LETTER Y WITH HOOK", direction="l", lccode=0x01B4, linebreak="al", shcode=0x0059, unicodeslot=0x01B3, }, { adobename="yhook", category="ll", contextname="yhook", description="LATIN SMALL LETTER Y WITH HOOK", direction="l", linebreak="al", shcode=0x0079, uccode=0x01B3, unicodeslot=0x01B4, }, { adobename="Zstroke", category="lu", contextname="Zstroke", description="LATIN CAPITAL LETTER Z WITH STROKE", direction="l", lccode=0x01B6, linebreak="al", shcode=0x005A, unicodeslot=0x01B5, }, { adobename="zstroke", category="ll", contextname="zstroke", description="LATIN SMALL LETTER Z WITH STROKE", direction="l", linebreak="al", shcode=0x007A, uccode=0x01B5, unicodeslot=0x01B6, }, { adobename="Ezh", category="lu", description="LATIN CAPITAL LETTER EZH", direction="l", lccode=0x0292, linebreak="al", unicodeslot=0x01B7, }, { adobename="Ezhreversed", category="lu", description="LATIN CAPITAL LETTER EZH REVERSED", direction="l", lccode=0x01B9, linebreak="al", unicodeslot=0x01B8, }, { adobename="ezhreversed", category="ll", description="LATIN SMALL LETTER EZH REVERSED", direction="l", linebreak="al", uccode=0x01B8, unicodeslot=0x01B9, }, { adobename="ezhtail", category="ll", description="LATIN SMALL LETTER EZH WITH TAIL", direction="l", linebreak="al", shcode=0x0292, unicodeslot=0x01BA, }, { adobename="twostroke", category="lo", description="LATIN LETTER TWO WITH STROKE", direction="l", linebreak="al", unicodeslot=0x01BB, }, { adobename="Tonefive", category="lu", description="LATIN CAPITAL LETTER TONE FIVE", direction="l", lccode=0x01BD, linebreak="al", unicodeslot=0x01BC, }, { adobename="tonefive", category="ll", description="LATIN SMALL LETTER TONE FIVE", direction="l", linebreak="al", uccode=0x01BC, unicodeslot=0x01BD, }, { adobename="glottalinvertedstroke", category="ll", description="LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE", direction="l", linebreak="al", unicodeslot=0x01BE, }, { adobename="wynn", category="ll", description="LATIN LETTER WYNN", direction="l", linebreak="al", uccode=0x01F7, unicodeslot=0x01BF, }, { adobename="clickdental", category="lo", description="LATIN LETTER DENTAL CLICK", direction="l", linebreak="al", unicodeslot=0x01C0, }, { adobename="clicklateral", category="lo", description="LATIN LETTER LATERAL CLICK", direction="l", linebreak="al", unicodeslot=0x01C1, }, { adobename="clickalveolar", category="lo", description="LATIN LETTER ALVEOLAR CLICK", direction="l", linebreak="al", unicodeslot=0x01C2, }, { adobename="clickretroflex", category="lo", description="LATIN LETTER RETROFLEX CLICK", direction="l", linebreak="al", unicodeslot=0x01C3, }, { adobename="DZcaron", category="lu", contextname="DZcaronligature", description="LATIN CAPITAL LETTER DZ WITH CARON", direction="l", lccode=0x01C6, linebreak="al", shcode=0x01F1, specials={ "compat", 0x0044, 0x017D }, uccode=0x01C5, unicodeslot=0x01C4, }, { adobename="Dzcaron", category="lt", contextname="Dzcaronligature", description="LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON", direction="l", lccode=0x01C6, linebreak="al", shcode=0x01F2, specials={ "compat", 0x0044, 0x017E }, uccode=0x01C4, unicodeslot=0x01C5, }, { adobename="dzcaron", category="ll", contextname="dzcaronligature", description="LATIN SMALL LETTER DZ WITH CARON", direction="l", linebreak="al", shcode=0x01F3, specials={ "compat", 0x0064, 0x017E }, uccode=0x01C4, unicodeslot=0x01C6, }, { adobename="LJ", category="lu", contextname="LJligature", description="LATIN CAPITAL LETTER LJ", direction="l", lccode=0x01C9, linebreak="al", shcode={ 0x004C, 0x004A }, specials={ "compat", 0x004C, 0x004A }, uccode=0x01C8, unicodeslot=0x01C7, }, { adobename="Lj", category="lt", contextname="Ljligature", description="LATIN CAPITAL LETTER L WITH SMALL LETTER J", direction="l", lccode=0x01C9, linebreak="al", shcode={ 0x004C, 0x006A }, specials={ "compat", 0x004C, 0x006A }, uccode=0x01C7, unicodeslot=0x01C8, }, { adobename="lj", category="ll", contextname="ljligature", description="LATIN SMALL LETTER LJ", direction="l", linebreak="al", shcode={ 0x006C, 0x006A }, specials={ "compat", 0x006C, 0x006A }, uccode=0x01C7, unicodeslot=0x01C9, }, { adobename="NJ", category="lu", contextname="NJligature", description="LATIN CAPITAL LETTER NJ", direction="l", lccode=0x01CC, linebreak="al", shcode={ 0x004E, 0x004A }, specials={ "compat", 0x004E, 0x004A }, uccode=0x01CB, unicodeslot=0x01CA, }, { adobename="Nj", category="lt", contextname="Njligature", description="LATIN CAPITAL LETTER N WITH SMALL LETTER J", direction="l", lccode=0x01CC, linebreak="al", shcode=0x004E, specials={ "compat", 0x004E, 0x006A }, uccode=0x01CA, unicodeslot=0x01CB, }, { adobename="nj", category="ll", contextname="njligature", description="LATIN SMALL LETTER NJ", direction="l", linebreak="al", shcode={ 0x006E, 0x006A }, specials={ "compat", 0x006E, 0x006A }, uccode=0x01CA, unicodeslot=0x01CC, }, { adobename="Acaron", category="lu", contextname="Acaron", description="LATIN CAPITAL LETTER A WITH CARON", direction="l", lccode=0x01CE, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x030C }, unicodeslot=0x01CD, }, { adobename="acaron", category="ll", cjkwd="a", contextname="acaron", description="LATIN SMALL LETTER A WITH CARON", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x030C }, uccode=0x01CD, unicodeslot=0x01CE, }, { adobename="Icaron", category="lu", contextname="Icaron", description="LATIN CAPITAL LETTER I WITH CARON", direction="l", lccode=0x01D0, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x030C }, unicodeslot=0x01CF, }, { adobename="icaron", category="ll", cjkwd="a", contextname="icaron", description="LATIN SMALL LETTER I WITH CARON", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x030C }, uccode=0x01CF, unicodeslot=0x01D0, }, { adobename="Ocaron", category="lu", contextname="Ocaron", description="LATIN CAPITAL LETTER O WITH CARON", direction="l", lccode=0x01D2, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x030C }, unicodeslot=0x01D1, }, { adobename="ocaron", category="ll", cjkwd="a", contextname="ocaron", description="LATIN SMALL LETTER O WITH CARON", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x030C }, uccode=0x01D1, unicodeslot=0x01D2, }, { adobename="Ucaron", category="lu", contextname="Ucaron", description="LATIN CAPITAL LETTER U WITH CARON", direction="l", lccode=0x01D4, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x030C }, unicodeslot=0x01D3, }, { adobename="ucaron", category="ll", cjkwd="a", contextname="ucaron", description="LATIN SMALL LETTER U WITH CARON", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x030C }, uccode=0x01D3, unicodeslot=0x01D4, }, { adobename="Udieresismacron", category="lu", contextname="Udiaeresismacron", description="LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON", direction="l", lccode=0x01D6, linebreak="al", shcode=0x0055, specials={ "char", 0x00DC, 0x0304 }, unicodeslot=0x01D5, }, { adobename="udieresismacron", category="ll", cjkwd="a", contextname="udiaeresismacron", description="LATIN SMALL LETTER U WITH DIAERESIS AND MACRON", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x00FC, 0x0304 }, uccode=0x01D5, unicodeslot=0x01D6, }, { adobename="Udieresisacute", category="lu", contextname="Udiaeresisacute", description="LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE", direction="l", lccode=0x01D8, linebreak="al", shcode=0x0055, specials={ "char", 0x00DC, 0x0301 }, unicodeslot=0x01D7, }, { adobename="udieresisacute", category="ll", cjkwd="a", contextname="udiaeresisacute", description="LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x00FC, 0x0301 }, uccode=0x01D7, unicodeslot=0x01D8, }, { adobename="Udieresiscaron", category="lu", contextname="Udiaeresiscaron", description="LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON", direction="l", lccode=0x01DA, linebreak="al", shcode=0x0055, specials={ "char", 0x00DC, 0x030C }, unicodeslot=0x01D9, }, { adobename="udieresiscaron", category="ll", cjkwd="a", contextname="udiaeresiscaron", description="LATIN SMALL LETTER U WITH DIAERESIS AND CARON", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x00FC, 0x030C }, uccode=0x01D9, unicodeslot=0x01DA, }, { adobename="Udieresisgrave", category="lu", contextname="Udiaeresisgrave", description="LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE", direction="l", lccode=0x01DC, linebreak="al", shcode=0x0055, specials={ "char", 0x00DC, 0x0300 }, unicodeslot=0x01DB, }, { adobename="udieresisgrave", category="ll", cjkwd="a", contextname="udiaeresisgrave", description="LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x00FC, 0x0300 }, uccode=0x01DB, unicodeslot=0x01DC, }, { adobename="eturned", category="ll", description="LATIN SMALL LETTER TURNED E", direction="l", linebreak="al", uccode=0x018E, unicodeslot=0x01DD, }, { adobename="Adieresismacron", category="lu", contextname="Adiaeresismacron", description="LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON", direction="l", lccode=0x01DF, linebreak="al", shcode=0x0041, specials={ "char", 0x00C4, 0x0304 }, unicodeslot=0x01DE, }, { adobename="adieresismacron", category="ll", contextname="adiaeresismacron", description="LATIN SMALL LETTER A WITH DIAERESIS AND MACRON", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x00E4, 0x0304 }, uccode=0x01DE, unicodeslot=0x01DF, }, { adobename="Adotmacron", category="lu", contextname="Adotaccentmacron", description="LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON", direction="l", lccode=0x01E1, linebreak="al", shcode=0x0041, specials={ "char", 0x0226, 0x0304 }, unicodeslot=0x01E0, }, { adobename="adotmacron", category="ll", contextname="adotaccentmacron", description="LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0227, 0x0304 }, uccode=0x01E0, unicodeslot=0x01E1, }, { adobename="AEmacron", category="lu", contextname="AEmacron", description="LATIN CAPITAL LETTER AE WITH MACRON", direction="l", lccode=0x01E3, linebreak="al", shcode=0x00C6, specials={ "char", 0x00C6, 0x0304 }, unicodeslot=0x01E2, }, { adobename="aemacron", category="ll", contextname="aemacron", description="LATIN SMALL LETTER AE WITH MACRON", direction="l", linebreak="al", shcode=0x00E6, specials={ "char", 0x00E6, 0x0304 }, uccode=0x01E2, unicodeslot=0x01E3, }, { adobename="Gstroke", category="lu", contextname="Gstroke", description="LATIN CAPITAL LETTER G WITH STROKE", direction="l", lccode=0x01E5, linebreak="al", shcode=0x0047, unicodeslot=0x01E4, }, { adobename="gstroke", category="ll", contextname="gstroke", description="LATIN SMALL LETTER G WITH STROKE", direction="l", linebreak="al", shcode=0x0067, uccode=0x01E4, unicodeslot=0x01E5, }, { adobename="Gcaron", category="lu", contextname="Gcaron", description="LATIN CAPITAL LETTER G WITH CARON", direction="l", lccode=0x01E7, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x030C }, unicodeslot=0x01E6, }, { adobename="gcaron", category="ll", contextname="gcaron", description="LATIN SMALL LETTER G WITH CARON", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x030C }, uccode=0x01E6, unicodeslot=0x01E7, }, { adobename="Kcaron", category="lu", contextname="Kcaron", description="LATIN CAPITAL LETTER K WITH CARON", direction="l", lccode=0x01E9, linebreak="al", shcode=0x004B, specials={ "char", 0x004B, 0x030C }, unicodeslot=0x01E8, }, { adobename="kcaron", category="ll", contextname="kcaron", description="LATIN SMALL LETTER K WITH CARON", direction="l", linebreak="al", shcode=0x006B, specials={ "char", 0x006B, 0x030C }, uccode=0x01E8, unicodeslot=0x01E9, }, { adobename="Oogonek", category="lu", contextname="Oogonek", description="LATIN CAPITAL LETTER O WITH OGONEK", direction="l", lccode=0x01EB, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0328 }, unicodeslot=0x01EA, }, { adobename="oogonek", category="ll", contextname="oogonek", description="LATIN SMALL LETTER O WITH OGONEK", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0328 }, uccode=0x01EA, unicodeslot=0x01EB, }, { adobename="Oogonekmacron", category="lu", contextname="Oogonekmacron", description="LATIN CAPITAL LETTER O WITH OGONEK AND MACRON", direction="l", lccode=0x01ED, linebreak="al", shcode=0x004F, specials={ "char", 0x01EA, 0x0304 }, unicodeslot=0x01EC, }, { adobename="oogonekmacron", category="ll", contextname="oogonekmacron", description="LATIN SMALL LETTER O WITH OGONEK AND MACRON", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x01EB, 0x0304 }, uccode=0x01EC, unicodeslot=0x01ED, }, { adobename="Ezhcaron", category="lu", description="LATIN CAPITAL LETTER EZH WITH CARON", direction="l", lccode=0x01EF, linebreak="al", shcode=0x01B7, specials={ "char", 0x01B7, 0x030C }, unicodeslot=0x01EE, }, { adobename="ezhcaron", category="ll", description="LATIN SMALL LETTER EZH WITH CARON", direction="l", linebreak="al", shcode=0x0292, specials={ "char", 0x0292, 0x030C }, uccode=0x01EE, unicodeslot=0x01EF, }, { adobename="jcaron", category="ll", contextname="jcaron", description="LATIN SMALL LETTER J WITH CARON", direction="l", linebreak="al", shcode=0x006A, specials={ "char", 0x006A, 0x030C }, unicodeslot=0x01F0, }, { adobename="DZ", category="lu", contextname="DZligature", description="LATIN CAPITAL LETTER DZ", direction="l", lccode=0x01F3, linebreak="al", specials={ "compat", 0x0044, 0x005A }, uccode=0x01F2, unicodeslot=0x01F1, }, { adobename="Dz", category="lt", contextname="Dzligature", description="LATIN CAPITAL LETTER D WITH SMALL LETTER Z", direction="l", lccode=0x01F3, linebreak="al", shcode=0x0044, specials={ "compat", 0x0044, 0x007A }, uccode=0x01F1, unicodeslot=0x01F2, }, { adobename="dz", category="ll", contextname="dzligature", description="LATIN SMALL LETTER DZ", direction="l", linebreak="al", specials={ "compat", 0x0064, 0x007A }, uccode=0x01F1, unicodeslot=0x01F3, }, { adobename="Gacute", category="lu", contextname="Gacute", description="LATIN CAPITAL LETTER G WITH ACUTE", direction="l", lccode=0x01F5, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x0301 }, unicodeslot=0x01F4, }, { adobename="gacute", category="ll", contextname="gacute", description="LATIN SMALL LETTER G WITH ACUTE", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x0301 }, uccode=0x01F4, unicodeslot=0x01F5, }, { category="lu", description="LATIN CAPITAL LETTER HWAIR", direction="l", lccode=0x0195, linebreak="al", unicodeslot=0x01F6, }, { category="lu", description="LATIN CAPITAL LETTER WYNN", direction="l", lccode=0x01BF, linebreak="al", unicodeslot=0x01F7, }, { category="lu", contextname="Ngrave", description="LATIN CAPITAL LETTER N WITH GRAVE", direction="l", lccode=0x01F9, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0300 }, unicodeslot=0x01F8, }, { category="ll", contextname="ngrave", description="LATIN SMALL LETTER N WITH GRAVE", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0300 }, uccode=0x01F8, unicodeslot=0x01F9, }, { adobename="Aringacute", category="lu", contextname="Aringacute", description="LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE", direction="l", lccode=0x01FB, linebreak="al", shcode=0x0041, specials={ "char", 0x00C5, 0x0301 }, unicodeslot=0x01FA, }, { adobename="aringacute", category="ll", contextname="aringacute", description="LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x00E5, 0x0301 }, uccode=0x01FA, unicodeslot=0x01FB, }, { adobename="AEacute", category="lu", contextname="AEacute", description="LATIN CAPITAL LETTER AE WITH ACUTE", direction="l", lccode=0x01FD, linebreak="al", shcode=0x00C6, specials={ "char", 0x00C6, 0x0301 }, unicodeslot=0x01FC, }, { adobename="aeacute", category="ll", contextname="aeacute", description="LATIN SMALL LETTER AE WITH ACUTE", direction="l", linebreak="al", shcode=0x00E6, specials={ "char", 0x00E6, 0x0301 }, uccode=0x01FC, unicodeslot=0x01FD, }, { adobename="Ostrokeacute", category="lu", contextname="Ostrokeacute", description="LATIN CAPITAL LETTER O WITH STROKE AND ACUTE", direction="l", lccode=0x01FF, linebreak="al", shcode=0x004F, specials={ "char", 0x00D8, 0x0301 }, unicodeslot=0x01FE, }, { adobename="ostrokeacute", category="ll", contextname="ostrokeacute", description="LATIN SMALL LETTER O WITH STROKE AND ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F8, 0x0301 }, uccode=0x01FE, unicodeslot=0x01FF, }, { adobename="Adblgrave", category="lu", contextname="Adoublegrave", description="LATIN CAPITAL LETTER A WITH DOUBLE GRAVE", direction="l", lccode=0x0201, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x030F }, unicodeslot=0x0200, }, { adobename="adblgrave", category="ll", contextname="adoublegrave", description="LATIN SMALL LETTER A WITH DOUBLE GRAVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x030F }, uccode=0x0200, unicodeslot=0x0201, }, { adobename="Ainvertedbreve", category="lu", contextname="Ainvertedbreve", description="LATIN CAPITAL LETTER A WITH INVERTED BREVE", direction="l", lccode=0x0203, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0311 }, unicodeslot=0x0202, }, { adobename="ainvertedbreve", category="ll", contextname="ainvertedbreve", description="LATIN SMALL LETTER A WITH INVERTED BREVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0311 }, uccode=0x0202, unicodeslot=0x0203, }, { adobename="Edblgrave", category="lu", contextname="Edoublegrave", description="LATIN CAPITAL LETTER E WITH DOUBLE GRAVE", direction="l", lccode=0x0205, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x030F }, unicodeslot=0x0204, }, { adobename="edblgrave", category="ll", contextname="edoublegrave", description="LATIN SMALL LETTER E WITH DOUBLE GRAVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x030F }, uccode=0x0204, unicodeslot=0x0205, }, { adobename="Einvertedbreve", category="lu", contextname="Einvertedbreve", description="LATIN CAPITAL LETTER E WITH INVERTED BREVE", direction="l", lccode=0x0207, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0311 }, unicodeslot=0x0206, }, { adobename="einvertedbreve", category="ll", contextname="einvertedbreve", description="LATIN SMALL LETTER E WITH INVERTED BREVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0311 }, uccode=0x0206, unicodeslot=0x0207, }, { adobename="Idblgrave", category="lu", contextname="Idoublegrave", description="LATIN CAPITAL LETTER I WITH DOUBLE GRAVE", direction="l", lccode=0x0209, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x030F }, unicodeslot=0x0208, }, { adobename="idblgrave", category="ll", contextname="idoublegrave", description="LATIN SMALL LETTER I WITH DOUBLE GRAVE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x030F }, uccode=0x0208, unicodeslot=0x0209, }, { adobename="Iinvertedbreve", category="lu", contextname="Iinvertedbreve", description="LATIN CAPITAL LETTER I WITH INVERTED BREVE", direction="l", lccode=0x020B, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0311 }, unicodeslot=0x020A, }, { adobename="iinvertedbreve", category="ll", contextname="iinvertedbreve", description="LATIN SMALL LETTER I WITH INVERTED BREVE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0311 }, uccode=0x020A, unicodeslot=0x020B, }, { adobename="Odblgrave", category="lu", contextname="Odoublegrave", description="LATIN CAPITAL LETTER O WITH DOUBLE GRAVE", direction="l", lccode=0x020D, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x030F }, unicodeslot=0x020C, }, { adobename="odblgrave", category="ll", contextname="odoublegrave", description="LATIN SMALL LETTER O WITH DOUBLE GRAVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x030F }, uccode=0x020C, unicodeslot=0x020D, }, { adobename="Oinvertedbreve", category="lu", contextname="Oinvertedbreve", description="LATIN CAPITAL LETTER O WITH INVERTED BREVE", direction="l", lccode=0x020F, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0311 }, unicodeslot=0x020E, }, { adobename="oinvertedbreve", category="ll", contextname="oinvertedbreve", description="LATIN SMALL LETTER O WITH INVERTED BREVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0311 }, uccode=0x020E, unicodeslot=0x020F, }, { adobename="Rdblgrave", category="lu", contextname="Rdoublegrave", description="LATIN CAPITAL LETTER R WITH DOUBLE GRAVE", direction="l", lccode=0x0211, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x030F }, unicodeslot=0x0210, }, { adobename="rdblgrave", category="ll", contextname="rdoublegrave", description="LATIN SMALL LETTER R WITH DOUBLE GRAVE", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x030F }, uccode=0x0210, unicodeslot=0x0211, }, { adobename="Rinvertedbreve", category="lu", contextname="Rinvertedbreve", description="LATIN CAPITAL LETTER R WITH INVERTED BREVE", direction="l", lccode=0x0213, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x0311 }, unicodeslot=0x0212, }, { adobename="rinvertedbreve", category="ll", contextname="rinvertedbreve", description="LATIN SMALL LETTER R WITH INVERTED BREVE", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x0311 }, uccode=0x0212, unicodeslot=0x0213, }, { adobename="Udblgrave", category="lu", contextname="Udoublegrave", description="LATIN CAPITAL LETTER U WITH DOUBLE GRAVE", direction="l", lccode=0x0215, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x030F }, unicodeslot=0x0214, }, { adobename="udblgrave", category="ll", contextname="udoublegrave", description="LATIN SMALL LETTER U WITH DOUBLE GRAVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x030F }, uccode=0x0214, unicodeslot=0x0215, }, { adobename="Uinvertedbreve", category="lu", contextname="Uinvertedbreve", description="LATIN CAPITAL LETTER U WITH INVERTED BREVE", direction="l", lccode=0x0217, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0311 }, unicodeslot=0x0216, }, { adobename="uinvertedbreve", category="ll", contextname="uinvertedbreve", description="LATIN SMALL LETTER U WITH INVERTED BREVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0311 }, uccode=0x0216, unicodeslot=0x0217, }, { adobename="Scommaaccent", category="lu", contextname="Scommaaccent", description="LATIN CAPITAL LETTER S WITH COMMA BELOW", direction="l", lccode=0x0219, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x0326 }, unicodeslot=0x0218, }, { adobename="scommaaccent", category="ll", contextname="scommaaccent", description="LATIN SMALL LETTER S WITH COMMA BELOW", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x0326 }, uccode=0x0218, unicodeslot=0x0219, }, { category="lu", contextname="Tcommaaccent", description="LATIN CAPITAL LETTER T WITH COMMA BELOW", direction="l", lccode=0x021B, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x0326 }, unicodeslot=0x021A, }, { category="ll", contextname="tcommaaccent", description="LATIN SMALL LETTER T WITH COMMA BELOW", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x0326 }, uccode=0x021A, unicodeslot=0x021B, }, { category="lu", description="LATIN CAPITAL LETTER YOGH", direction="l", lccode=0x021D, linebreak="al", unicodeslot=0x021C, }, { category="ll", description="LATIN SMALL LETTER YOGH", direction="l", linebreak="al", uccode=0x021C, unicodeslot=0x021D, }, { category="lu", contextname="Hcaron", description="LATIN CAPITAL LETTER H WITH CARON", direction="l", lccode=0x021F, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x030C }, unicodeslot=0x021E, }, { category="ll", contextname="hcaron", description="LATIN SMALL LETTER H WITH CARON", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x030C }, uccode=0x021E, unicodeslot=0x021F, }, { category="lu", description="LATIN CAPITAL LETTER N WITH LONG RIGHT LEG", direction="l", lccode=0x019E, linebreak="al", shcode=0x004E, unicodeslot=0x0220, }, { category="ll", contextname="dcurl", description="LATIN SMALL LETTER D WITH CURL", direction="l", linebreak="al", shcode=0x0064, unicodeslot=0x0221, }, { category="lu", description="LATIN CAPITAL LETTER OU", direction="l", lccode=0x0223, linebreak="al", unicodeslot=0x0222, }, { category="ll", description="LATIN SMALL LETTER OU", direction="l", linebreak="al", uccode=0x0222, unicodeslot=0x0223, }, { category="lu", contextname="Zhook", description="LATIN CAPITAL LETTER Z WITH HOOK", direction="l", lccode=0x0225, linebreak="al", shcode=0x005A, unicodeslot=0x0224, }, { category="ll", contextname="zhook", description="LATIN SMALL LETTER Z WITH HOOK", direction="l", linebreak="al", shcode=0x007A, uccode=0x0224, unicodeslot=0x0225, }, { category="lu", contextname="Adotaccent", description="LATIN CAPITAL LETTER A WITH DOT ABOVE", direction="l", lccode=0x0227, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0307 }, unicodeslot=0x0226, }, { category="ll", contextname="adotaccent", description="LATIN SMALL LETTER A WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0307 }, uccode=0x0226, unicodeslot=0x0227, }, { category="lu", contextname="Ecedilla", description="LATIN CAPITAL LETTER E WITH CEDILLA", direction="l", lccode=0x0229, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0327 }, unicodeslot=0x0228, }, { category="ll", contextname="ecedilla", description="LATIN SMALL LETTER E WITH CEDILLA", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0327 }, uccode=0x0228, unicodeslot=0x0229, }, { category="lu", contextname="Odiaeresismacron", description="LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON", direction="l", lccode=0x022B, linebreak="al", shcode=0x004F, specials={ "char", 0x00D6, 0x0304 }, unicodeslot=0x022A, }, { category="ll", contextname="odiaeresismacron", description="LATIN SMALL LETTER O WITH DIAERESIS AND MACRON", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F6, 0x0304 }, uccode=0x022A, unicodeslot=0x022B, }, { category="lu", contextname="Otildemacron", description="LATIN CAPITAL LETTER O WITH TILDE AND MACRON", direction="l", lccode=0x022D, linebreak="al", shcode=0x004F, specials={ "char", 0x00D5, 0x0304 }, unicodeslot=0x022C, }, { category="ll", contextname="otildemacron", description="LATIN SMALL LETTER O WITH TILDE AND MACRON", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F5, 0x0304 }, uccode=0x022C, unicodeslot=0x022D, }, { category="lu", contextname="Odotaccent", description="LATIN CAPITAL LETTER O WITH DOT ABOVE", direction="l", lccode=0x022F, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0307 }, unicodeslot=0x022E, }, { category="ll", contextname="odotaccent", description="LATIN SMALL LETTER O WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0307 }, uccode=0x022E, unicodeslot=0x022F, }, { category="lu", contextname="Odotaccentmacron", description="LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON", direction="l", lccode=0x0231, linebreak="al", shcode=0x004F, specials={ "char", 0x022E, 0x0304 }, unicodeslot=0x0230, }, { category="ll", contextname="odotaccentmacron", description="LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x022F, 0x0304 }, uccode=0x0230, unicodeslot=0x0231, }, { category="lu", contextname="Ymacron", description="LATIN CAPITAL LETTER Y WITH MACRON", direction="l", lccode=0x0233, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0304 }, unicodeslot=0x0232, }, { category="ll", contextname="ymacron", description="LATIN SMALL LETTER Y WITH MACRON", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0304 }, uccode=0x0232, unicodeslot=0x0233, }, { category="ll", contextname="lcurl", description="LATIN SMALL LETTER L WITH CURL", direction="l", linebreak="al", shcode=0x006C, unicodeslot=0x0234, }, { category="ll", contextname="ncurl", description="LATIN SMALL LETTER N WITH CURL", direction="l", linebreak="al", shcode=0x006E, unicodeslot=0x0235, }, { category="ll", contextname="tcurl", description="LATIN SMALL LETTER T WITH CURL", direction="l", linebreak="al", shcode=0x0074, unicodeslot=0x0236, }, { category="ll", contextname="dotlessj", description="LATIN SMALL LETTER DOTLESS J", direction="l", linebreak="al", unicodeslot=0x0237, }, { category="ll", description="LATIN SMALL LETTER DB DIGRAPH", direction="l", linebreak="al", unicodeslot=0x0238, }, { category="ll", description="LATIN SMALL LETTER QP DIGRAPH", direction="l", linebreak="al", unicodeslot=0x0239, }, { category="lu", contextname="Astroke", description="LATIN CAPITAL LETTER A WITH STROKE", direction="l", lccode=0x2C65, linebreak="al", shcode=0x0041, unicodeslot=0x023A, }, { category="lu", contextname="Cstroke", description="LATIN CAPITAL LETTER C WITH STROKE", direction="l", lccode=0x023C, linebreak="al", shcode=0x0043, unicodeslot=0x023B, }, { category="ll", contextname="cstroke", description="LATIN SMALL LETTER C WITH STROKE", direction="l", linebreak="al", shcode=0x0063, uccode=0x023B, unicodeslot=0x023C, }, { category="lu", contextname="Lbar", description="LATIN CAPITAL LETTER L WITH BAR", direction="l", lccode=0x019A, linebreak="al", shcode=0x004C, unicodeslot=0x023D, }, { category="lu", description="LATIN CAPITAL LETTER T WITH DIAGONAL STROKE", direction="l", lccode=0x2C66, linebreak="al", shcode=0x0054, unicodeslot=0x023E, }, { category="ll", description="LATIN SMALL LETTER S WITH SWASH TAIL", direction="l", linebreak="al", shcode=0x0073, unicodeslot=0x023F, }, { category="ll", description="LATIN SMALL LETTER Z WITH SWASH TAIL", direction="l", linebreak="al", shcode=0x007A, unicodeslot=0x0240, }, { category="lu", description="LATIN CAPITAL LETTER GLOTTAL STOP", direction="l", lccode=0x0242, linebreak="al", unicodeslot=0x0241, }, { category="ll", description="LATIN SMALL LETTER GLOTTAL STOP", direction="l", linebreak="al", uccode=0x0241, unicodeslot=0x0242, }, { category="lu", description="LATIN CAPITAL LETTER B WITH STROKE", direction="l", lccode=0x0180, linebreak="al", shcode=0x0042, unicodeslot=0x0243, }, { category="lu", description="LATIN CAPITAL LETTER U BAR", direction="l", lccode=0x0289, linebreak="al", unicodeslot=0x0244, }, { category="lu", description="LATIN CAPITAL LETTER TURNED V", direction="l", lccode=0x028C, linebreak="al", unicodeslot=0x0245, }, { category="lu", description="LATIN CAPITAL LETTER E WITH STROKE", direction="l", lccode=0x0247, linebreak="al", shcode=0x0045, unicodeslot=0x0246, }, { category="ll", description="LATIN SMALL LETTER E WITH STROKE", direction="l", linebreak="al", shcode=0x0065, uccode=0x0246, unicodeslot=0x0247, }, { category="lu", description="LATIN CAPITAL LETTER J WITH STROKE", direction="l", lccode=0x0249, linebreak="al", shcode=0x004A, unicodeslot=0x0248, }, { category="ll", description="LATIN SMALL LETTER J WITH STROKE", direction="l", linebreak="al", shcode=0x006A, uccode=0x0248, unicodeslot=0x0249, }, { category="lu", description="LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL", direction="l", lccode=0x024B, linebreak="al", unicodeslot=0x024A, }, { category="ll", description="LATIN SMALL LETTER Q WITH HOOK TAIL", direction="l", linebreak="al", shcode=0x0071, uccode=0x024A, unicodeslot=0x024B, }, { category="lu", description="LATIN CAPITAL LETTER R WITH STROKE", direction="l", lccode=0x024D, linebreak="al", shcode=0x0052, unicodeslot=0x024C, }, { category="ll", description="LATIN SMALL LETTER R WITH STROKE", direction="l", linebreak="al", shcode=0x0072, uccode=0x024C, unicodeslot=0x024D, }, { category="lu", description="LATIN CAPITAL LETTER Y WITH STROKE", direction="l", lccode=0x024F, linebreak="al", shcode=0x0059, unicodeslot=0x024E, }, { category="ll", description="LATIN SMALL LETTER Y WITH STROKE", direction="l", linebreak="al", shcode=0x0079, uccode=0x024E, unicodeslot=0x024F, }, { adobename="aturned", category="ll", description="LATIN SMALL LETTER TURNED A", direction="l", linebreak="al", unicodeslot=0x0250, }, { adobename="ascript", category="ll", cjkwd="a", description="LATIN SMALL LETTER ALPHA", direction="l", linebreak="al", unicodeslot=0x0251, }, { adobename="ascriptturned", category="ll", description="LATIN SMALL LETTER TURNED ALPHA", direction="l", linebreak="al", unicodeslot=0x0252, }, { adobename="bhook", category="ll", contextname="bhook", description="LATIN SMALL LETTER B WITH HOOK", direction="l", linebreak="al", shcode=0x0062, uccode=0x0181, unicodeslot=0x0253, }, { adobename="oopen", category="ll", description="LATIN SMALL LETTER OPEN O", direction="l", linebreak="al", uccode=0x0186, unicodeslot=0x0254, }, { adobename="ccurl", category="ll", contextname="ccurl", description="LATIN SMALL LETTER C WITH CURL", direction="l", linebreak="al", shcode=0x0063, unicodeslot=0x0255, }, { adobename="dtail", category="ll", contextname="dtail", description="LATIN SMALL LETTER D WITH TAIL", direction="l", linebreak="al", shcode=0x0064, uccode=0x0189, unicodeslot=0x0256, }, { adobename="dhook", category="ll", contextname="dhook", description="LATIN SMALL LETTER D WITH HOOK", direction="l", linebreak="al", shcode=0x0064, uccode=0x018A, unicodeslot=0x0257, }, { adobename="ereversed", category="ll", description="LATIN SMALL LETTER REVERSED E", direction="l", linebreak="al", unicodeslot=0x0258, }, { adobename="schwa", category="ll", contextname="schwa", description="LATIN SMALL LETTER SCHWA", direction="l", linebreak="al", uccode=0x018F, unicodeslot=0x0259, }, { adobename="schwahook", category="ll", contextname="schwahook", description="LATIN SMALL LETTER SCHWA WITH HOOK", direction="l", linebreak="al", shcode=0x0259, unicodeslot=0x025A, }, { adobename="eopen", category="ll", description="LATIN SMALL LETTER OPEN E", direction="l", linebreak="al", uccode=0x0190, unicodeslot=0x025B, }, { adobename="eopenreversed", category="ll", description="LATIN SMALL LETTER REVERSED OPEN E", direction="l", linebreak="al", unicodeslot=0x025C, }, { adobename="eopenreversedhook", category="ll", description="LATIN SMALL LETTER REVERSED OPEN E WITH HOOK", direction="l", linebreak="al", unicodeslot=0x025D, }, { adobename="eopenreversedclosed", category="ll", description="LATIN SMALL LETTER CLOSED REVERSED OPEN E", direction="l", linebreak="al", unicodeslot=0x025E, }, { adobename="jdotlessstroke", category="ll", contextname="dotlessjstroke", description="LATIN SMALL LETTER DOTLESS J WITH STROKE", direction="l", linebreak="al", unicodeslot=0x025F, }, { adobename="ghook", category="ll", description="LATIN SMALL LETTER G WITH HOOK", direction="l", linebreak="al", shcode=0x0067, uccode=0x0193, unicodeslot=0x0260, }, { adobename="gscript", category="ll", cjkwd="a", description="LATIN SMALL LETTER SCRIPT G", direction="l", linebreak="al", unicodeslot=0x0261, }, { category="ll", description="LATIN LETTER SMALL CAPITAL G", direction="l", linebreak="al", unicodeslot=0x0262, }, { adobename="gammalatinsmall", category="ll", description="LATIN SMALL LETTER GAMMA", direction="l", linebreak="al", uccode=0x0194, unicodeslot=0x0263, }, { adobename="ramshorn", category="ll", description="LATIN SMALL LETTER RAMS HORN", direction="l", linebreak="al", unicodeslot=0x0264, }, { adobename="hturned", category="ll", description="LATIN SMALL LETTER TURNED H", direction="l", linebreak="al", unicodeslot=0x0265, }, { adobename="hhook", category="ll", description="LATIN SMALL LETTER H WITH HOOK", direction="l", linebreak="al", shcode=0x0068, unicodeslot=0x0266, }, { adobename="henghook", category="ll", description="LATIN SMALL LETTER HENG WITH HOOK", direction="l", linebreak="al", unicodeslot=0x0267, }, { adobename="istroke", category="ll", description="LATIN SMALL LETTER I WITH STROKE", direction="l", linebreak="al", shcode=0x0069, uccode=0x0197, unicodeslot=0x0268, }, { adobename="iotalatin", category="ll", description="LATIN SMALL LETTER IOTA", direction="l", linebreak="al", uccode=0x0196, unicodeslot=0x0269, }, { category="ll", description="LATIN LETTER SMALL CAPITAL I", direction="l", linebreak="al", unicodeslot=0x026A, }, { adobename="lmiddletilde", category="ll", description="LATIN SMALL LETTER L WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x006C, uccode=0x2C62, unicodeslot=0x026B, }, { adobename="lbelt", category="ll", description="LATIN SMALL LETTER L WITH BELT", direction="l", linebreak="al", shcode=0x006C, unicodeslot=0x026C, }, { adobename="lhookretroflex", category="ll", description="LATIN SMALL LETTER L WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x006C, unicodeslot=0x026D, }, { adobename="lezh", category="ll", description="LATIN SMALL LETTER LEZH", direction="l", linebreak="al", unicodeslot=0x026E, }, { adobename="mturned", category="ll", description="LATIN SMALL LETTER TURNED M", direction="l", linebreak="al", uccode=0x019C, unicodeslot=0x026F, }, { adobename="mlonglegturned", category="ll", description="LATIN SMALL LETTER TURNED M WITH LONG LEG", direction="l", linebreak="al", unicodeslot=0x0270, }, { adobename="mhook", category="ll", description="LATIN SMALL LETTER M WITH HOOK", direction="l", linebreak="al", shcode=0x006D, unicodeslot=0x0271, }, { adobename="nhookleft", category="ll", description="LATIN SMALL LETTER N WITH LEFT HOOK", direction="l", linebreak="al", shcode=0x006E, uccode=0x019D, unicodeslot=0x0272, }, { adobename="nhookretroflex", category="ll", description="LATIN SMALL LETTER N WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x006E, unicodeslot=0x0273, }, { category="ll", description="LATIN LETTER SMALL CAPITAL N", direction="l", linebreak="al", unicodeslot=0x0274, }, { adobename="obarred", category="ll", description="LATIN SMALL LETTER BARRED O", direction="l", linebreak="al", uccode=0x019F, unicodeslot=0x0275, }, { category="ll", description="LATIN LETTER SMALL CAPITAL OE", direction="l", linebreak="al", unicodeslot=0x0276, }, { adobename="omegalatinclosed", category="ll", description="LATIN SMALL LETTER CLOSED OMEGA", direction="l", linebreak="al", unicodeslot=0x0277, }, { adobename="philatin", category="ll", description="LATIN SMALL LETTER PHI", direction="l", linebreak="al", unicodeslot=0x0278, }, { adobename="rturned", category="ll", description="LATIN SMALL LETTER TURNED R", direction="l", linebreak="al", unicodeslot=0x0279, }, { adobename="rlonglegturned", category="ll", description="LATIN SMALL LETTER TURNED R WITH LONG LEG", direction="l", linebreak="al", unicodeslot=0x027A, }, { adobename="rhookturned", category="ll", description="LATIN SMALL LETTER TURNED R WITH HOOK", direction="l", linebreak="al", unicodeslot=0x027B, }, { adobename="rlongleg", category="ll", description="LATIN SMALL LETTER R WITH LONG LEG", direction="l", linebreak="al", shcode=0x0072, unicodeslot=0x027C, }, { adobename="rhook", category="ll", description="LATIN SMALL LETTER R WITH TAIL", direction="l", linebreak="al", shcode=0x0072, uccode=0x2C64, unicodeslot=0x027D, }, { adobename="rfishhook", category="ll", description="LATIN SMALL LETTER R WITH FISHHOOK", direction="l", linebreak="al", shcode=0x0072, unicodeslot=0x027E, }, { adobename="rfishhookreversed", category="ll", description="LATIN SMALL LETTER REVERSED R WITH FISHHOOK", direction="l", linebreak="al", unicodeslot=0x027F, }, { category="ll", description="LATIN LETTER SMALL CAPITAL R", direction="l", linebreak="al", uccode=0x01A6, unicodeslot=0x0280, }, { adobename="Rsmallinverted", category="ll", description="LATIN LETTER SMALL CAPITAL INVERTED R", direction="l", linebreak="al", unicodeslot=0x0281, }, { adobename="shook", category="ll", description="LATIN SMALL LETTER S WITH HOOK", direction="l", linebreak="al", shcode=0x0073, unicodeslot=0x0282, }, { adobename="esh", category="ll", description="LATIN SMALL LETTER ESH", direction="l", linebreak="al", uccode=0x01A9, unicodeslot=0x0283, }, { adobename="dotlessjstrokehook", category="ll", description="LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK", direction="l", linebreak="al", unicodeslot=0x0284, }, { adobename="eshsquatreversed", category="ll", description="LATIN SMALL LETTER SQUAT REVERSED ESH", direction="l", linebreak="al", unicodeslot=0x0285, }, { adobename="eshcurl", category="ll", description="LATIN SMALL LETTER ESH WITH CURL", direction="l", linebreak="al", shcode=0x0283, unicodeslot=0x0286, }, { adobename="tturned", category="ll", description="LATIN SMALL LETTER TURNED T", direction="l", linebreak="al", unicodeslot=0x0287, }, { adobename="tretroflexhook", category="ll", description="LATIN SMALL LETTER T WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0074, uccode=0x01AE, unicodeslot=0x0288, }, { adobename="ubar", category="ll", description="LATIN SMALL LETTER U BAR", direction="l", linebreak="al", uccode=0x0244, unicodeslot=0x0289, }, { adobename="upsilonlatin", category="ll", description="LATIN SMALL LETTER UPSILON", direction="l", linebreak="al", uccode=0x01B1, unicodeslot=0x028A, }, { adobename="vhook", category="ll", description="LATIN SMALL LETTER V WITH HOOK", direction="l", linebreak="al", shcode=0x0076, uccode=0x01B2, unicodeslot=0x028B, }, { adobename="vturned", category="ll", description="LATIN SMALL LETTER TURNED V", direction="l", linebreak="al", uccode=0x0245, unicodeslot=0x028C, }, { adobename="wturned", category="ll", description="LATIN SMALL LETTER TURNED W", direction="l", linebreak="al", unicodeslot=0x028D, }, { adobename="yturned", category="ll", description="LATIN SMALL LETTER TURNED Y", direction="l", linebreak="al", unicodeslot=0x028E, }, { category="ll", description="LATIN LETTER SMALL CAPITAL Y", direction="l", linebreak="al", unicodeslot=0x028F, }, { adobename="zretroflexhook", category="ll", description="LATIN SMALL LETTER Z WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x007A, unicodeslot=0x0290, }, { adobename="zcurl", category="ll", description="LATIN SMALL LETTER Z WITH CURL", direction="l", linebreak="al", shcode=0x007A, unicodeslot=0x0291, }, { adobename="ezh", category="ll", description="LATIN SMALL LETTER EZH", direction="l", linebreak="al", uccode=0x01B7, unicodeslot=0x0292, }, { adobename="ezhcurl", category="ll", description="LATIN SMALL LETTER EZH WITH CURL", direction="l", linebreak="al", shcode=0x0292, unicodeslot=0x0293, }, { adobename="glottalstop", category="lo", description="LATIN LETTER GLOTTAL STOP", direction="l", linebreak="al", unicodeslot=0x0294, }, { adobename="glottalstopreversed", category="ll", description="LATIN LETTER PHARYNGEAL VOICED FRICATIVE", direction="l", linebreak="al", unicodeslot=0x0295, }, { adobename="glottalstopinverted", category="ll", description="LATIN LETTER INVERTED GLOTTAL STOP", direction="l", linebreak="al", unicodeslot=0x0296, }, { adobename="cstretched", category="ll", description="LATIN LETTER STRETCHED C", direction="l", linebreak="al", unicodeslot=0x0297, }, { adobename="bilabialclick", category="ll", description="LATIN LETTER BILABIAL CLICK", direction="l", linebreak="al", unicodeslot=0x0298, }, { category="ll", description="LATIN LETTER SMALL CAPITAL B", direction="l", linebreak="al", unicodeslot=0x0299, }, { adobename="eopenclosed", category="ll", description="LATIN SMALL LETTER CLOSED OPEN E", direction="l", linebreak="al", unicodeslot=0x029A, }, { adobename="Gsmallhook", category="ll", description="LATIN LETTER SMALL CAPITAL G WITH HOOK", direction="l", linebreak="al", unicodeslot=0x029B, }, { category="ll", description="LATIN LETTER SMALL CAPITAL H", direction="l", linebreak="al", unicodeslot=0x029C, }, { adobename="jcrossedtail", category="ll", description="LATIN SMALL LETTER J WITH CROSSED-TAIL", direction="l", linebreak="al", shcode=0x006A, unicodeslot=0x029D, }, { adobename="kturned", category="ll", description="LATIN SMALL LETTER TURNED K", direction="l", linebreak="al", unicodeslot=0x029E, }, { category="ll", description="LATIN LETTER SMALL CAPITAL L", direction="l", linebreak="al", unicodeslot=0x029F, }, { adobename="qhook", category="ll", description="LATIN SMALL LETTER Q WITH HOOK", direction="l", linebreak="al", shcode=0x0071, unicodeslot=0x02A0, }, { adobename="glottalstopstroke", category="ll", description="LATIN LETTER GLOTTAL STOP WITH STROKE", direction="l", linebreak="al", unicodeslot=0x02A1, }, { adobename="glottalstopstrokereversed", category="ll", description="LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE", direction="l", linebreak="al", unicodeslot=0x02A2, }, { adobename="dzaltone", category="ll", description="LATIN SMALL LETTER DZ DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02A3, }, { adobename="dezh", category="ll", description="LATIN SMALL LETTER DEZH DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02A4, }, { adobename="dzcurl", category="ll", description="LATIN SMALL LETTER DZ DIGRAPH WITH CURL", direction="l", linebreak="al", unicodeslot=0x02A5, }, { adobename="ts", category="ll", description="LATIN SMALL LETTER TS DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02A6, }, { adobename="tesh", category="ll", description="LATIN SMALL LETTER TESH DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02A7, }, { adobename="tccurl", category="ll", description="LATIN SMALL LETTER TC DIGRAPH WITH CURL", direction="l", linebreak="al", unicodeslot=0x02A8, }, { category="ll", description="LATIN SMALL LETTER FENG DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02A9, }, { category="ll", description="LATIN SMALL LETTER LS DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02AA, }, { category="ll", description="LATIN SMALL LETTER LZ DIGRAPH", direction="l", linebreak="al", unicodeslot=0x02AB, }, { category="ll", description="LATIN LETTER BILABIAL PERCUSSIVE", direction="l", linebreak="al", unicodeslot=0x02AC, }, { category="ll", description="LATIN LETTER BIDENTAL PERCUSSIVE", direction="l", linebreak="al", unicodeslot=0x02AD, }, { category="ll", description="LATIN SMALL LETTER TURNED H WITH FISHHOOK", direction="l", linebreak="al", unicodeslot=0x02AE, }, { category="ll", description="LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL", direction="l", linebreak="al", unicodeslot=0x02AF, }, { adobename="hsuperior", category="lm", description="MODIFIER LETTER SMALL H", direction="l", linebreak="al", specials={ "super", 0x0068 }, unicodeslot=0x02B0, }, { adobename="hhooksuperior", category="lm", description="MODIFIER LETTER SMALL H WITH HOOK", direction="l", linebreak="al", specials={ "super", 0x0266 }, unicodeslot=0x02B1, }, { adobename="jsuperior", category="lm", description="MODIFIER LETTER SMALL J", direction="l", linebreak="al", specials={ "super", 0x006A }, unicodeslot=0x02B2, }, { category="lm", description="MODIFIER LETTER SMALL R", direction="l", linebreak="al", specials={ "super", 0x0072 }, unicodeslot=0x02B3, }, { adobename="rturnedsuperior", category="lm", description="MODIFIER LETTER SMALL TURNED R", direction="l", linebreak="al", specials={ "super", 0x0279 }, unicodeslot=0x02B4, }, { adobename="rhookturnedsuperior", category="lm", description="MODIFIER LETTER SMALL TURNED R WITH HOOK", direction="l", linebreak="al", specials={ "super", 0x027B }, unicodeslot=0x02B5, }, { adobename="Rsmallinvertedsuperior", category="lm", description="MODIFIER LETTER SMALL CAPITAL INVERTED R", direction="l", linebreak="al", specials={ "super", 0x0281 }, unicodeslot=0x02B6, }, { adobename="wsuperior", category="lm", description="MODIFIER LETTER SMALL W", direction="l", linebreak="al", specials={ "super", 0x0077 }, unicodeslot=0x02B7, }, { adobename="ysuperior", category="lm", description="MODIFIER LETTER SMALL Y", direction="l", linebreak="al", specials={ "super", 0x0079 }, unicodeslot=0x02B8, }, { adobename="primemod", category="lm", description="MODIFIER LETTER PRIME", direction="on", linebreak="al", unicodeslot=0x02B9, }, { adobename="dblprimemod", category="lm", description="MODIFIER LETTER DOUBLE PRIME", direction="on", linebreak="al", unicodeslot=0x02BA, }, { adobename="commaturnedmod", category="lm", description="MODIFIER LETTER TURNED COMMA", direction="l", linebreak="al", unicodeslot=0x02BB, }, { adobename="apostrophemod", category="lm", description="MODIFIER LETTER APOSTROPHE", direction="l", linebreak="al", unicodeslot=0x02BC, }, { adobename="commareversedmod", category="lm", description="MODIFIER LETTER REVERSED COMMA", direction="l", linebreak="al", unicodeslot=0x02BD, }, { adobename="ringhalfright", category="lm", description="MODIFIER LETTER RIGHT HALF RING", direction="l", linebreak="al", unicodeslot=0x02BE, }, { adobename="ringhalfleft", category="lm", description="MODIFIER LETTER LEFT HALF RING", direction="l", linebreak="al", unicodeslot=0x02BF, }, { adobename="glottalstopmod", category="lm", description="MODIFIER LETTER GLOTTAL STOP", direction="l", linebreak="al", unicodeslot=0x02C0, }, { adobename="glottalstopreversedmod", category="lm", description="MODIFIER LETTER REVERSED GLOTTAL STOP", direction="l", linebreak="al", unicodeslot=0x02C1, }, { adobename="arrowheadleftmod", category="sk", description="MODIFIER LETTER LEFT ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02C2, }, { adobename="arrowheadrightmod", category="sk", description="MODIFIER LETTER RIGHT ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02C3, }, { adobename="arrowheadupmod", category="sk", cjkwd="a", description="MODIFIER LETTER UP ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02C4, }, { adobename="arrowheaddownmod", category="sk", description="MODIFIER LETTER DOWN ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02C5, }, { adobename="circumflex", category="lm", comment="check special", contextname="textcircumflex", description="MODIFIER LETTER CIRCUMFLEX ACCENT", direction="on", linebreak="al", mathclass="topaccent", mathname="hat", specials={ "compat", 0x0020, 0x0302 }, unicodeslot=0x02C6, }, { adobename="caron", category="lm", cjkwd="a", comment="check special", contextname="textcaron", description="CARON", direction="on", linebreak="ai", mathclass="topaccent", mathname="check", specials={ "compat", 0x0020, 0x030C }, unicodeslot=0x02C7, }, { adobename="verticallinemod", category="lm", description="MODIFIER LETTER VERTICAL LINE", direction="on", linebreak="bb", unicodeslot=0x02C8, }, { adobename="firsttonechinese", category="lm", cjkwd="a", description="MODIFIER LETTER MACRON", direction="on", linebreak="ai", unicodeslot=0x02C9, }, { adobename="secondtonechinese", category="lm", cjkwd="a", description="MODIFIER LETTER ACUTE ACCENT", direction="on", linebreak="ai", unicodeslot=0x02CA, }, { adobename="fourthtonechinese", category="lm", cjkwd="a", description="MODIFIER LETTER GRAVE ACCENT", direction="on", linebreak="ai", unicodeslot=0x02CB, }, { adobename="verticallinelowmod", category="lm", description="MODIFIER LETTER LOW VERTICAL LINE", direction="on", linebreak="bb", unicodeslot=0x02CC, }, { adobename="macronlowmod", category="lm", cjkwd="a", description="MODIFIER LETTER LOW MACRON", direction="on", linebreak="ai", unicodeslot=0x02CD, }, { adobename="gravelowmod", category="lm", description="MODIFIER LETTER LOW GRAVE ACCENT", direction="on", linebreak="al", unicodeslot=0x02CE, }, { adobename="acutelowmod", category="lm", description="MODIFIER LETTER LOW ACUTE ACCENT", direction="on", linebreak="al", unicodeslot=0x02CF, }, { adobename="colontriangularmod", category="lm", cjkwd="a", description="MODIFIER LETTER TRIANGULAR COLON", direction="l", linebreak="ai", unicodeslot=0x02D0, }, { adobename="colontriangularhalfmod", category="lm", description="MODIFIER LETTER HALF TRIANGULAR COLON", direction="l", linebreak="al", unicodeslot=0x02D1, }, { adobename="ringhalfrightcentered", category="sk", description="MODIFIER LETTER CENTRED RIGHT HALF RING", direction="on", linebreak="al", unicodeslot=0x02D2, }, { adobename="ringhalfleftcentered", category="sk", description="MODIFIER LETTER CENTRED LEFT HALF RING", direction="on", linebreak="al", unicodeslot=0x02D3, }, { adobename="uptackmod", category="sk", description="MODIFIER LETTER UP TACK", direction="on", linebreak="al", unicodeslot=0x02D4, }, { adobename="downtackmod", category="sk", description="MODIFIER LETTER DOWN TACK", direction="on", linebreak="al", unicodeslot=0x02D5, }, { adobename="plusmod", category="sk", description="MODIFIER LETTER PLUS SIGN", direction="on", linebreak="al", unicodeslot=0x02D6, }, { adobename="minusmod", category="sk", description="MODIFIER LETTER MINUS SIGN", direction="on", linebreak="al", unicodeslot=0x02D7, }, { adobename="breve", category="sk", cjkwd="a", contextname="textbreve", description="BREVE", direction="on", linebreak="ai", mathclass="topaccent", mathname="breve", specials={ "compat", 0x0020, 0x0306 }, unicodeslot=0x02D8, }, { adobename="dotaccent", category="sk", cjkwd="a", contextname="textdotaccent", description="DOT ABOVE", direction="on", linebreak="ai", mathclass="topaccent", mathname="dot", specials={ "compat", 0x0020, 0x0307 }, unicodeslot=0x02D9, }, { adobename="ring", category="sk", cjkwd="a", contextname="textring", description="RING ABOVE", direction="on", linebreak="ai", mathclass="topaccent", mathname="mathring", specials={ "compat", 0x0020, 0x030A }, unicodeslot=0x02DA, }, { adobename="ogonek", category="sk", cjkwd="a", contextname="textogonek", description="OGONEK", direction="on", linebreak="ai", specials={ "compat", 0x0020, 0x0328 }, unicodeslot=0x02DB, }, { adobename="tilde", category="sk", contextname="texttilde", description="SMALL TILDE", direction="on", linebreak="al", mathclass="topaccent", mathname="tilde", specials={ "compat", 0x0020, 0x0303 }, unicodeslot=0x02DC, }, { adobename="hungarumlaut", category="sk", cjkwd="a", contextname="texthungarumlaut", description="DOUBLE ACUTE ACCENT", direction="on", linebreak="ai", specials={ "compat", 0x0020, 0x030B }, unicodeslot=0x02DD, }, { adobename="rhotichookmod", category="sk", description="MODIFIER LETTER RHOTIC HOOK", direction="on", linebreak="al", unicodeslot=0x02DE, }, { category="sk", cjkwd="a", description="MODIFIER LETTER CROSS ACCENT", direction="on", linebreak="bb", unicodeslot=0x02DF, }, { adobename="gammasuperior", category="lm", description="MODIFIER LETTER SMALL GAMMA", direction="l", linebreak="al", specials={ "super", 0x0263 }, unicodeslot=0x02E0, }, { category="lm", description="MODIFIER LETTER SMALL L", direction="l", linebreak="al", specials={ "super", 0x006C }, unicodeslot=0x02E1, }, { category="lm", description="MODIFIER LETTER SMALL S", direction="l", linebreak="al", specials={ "super", 0x0073 }, unicodeslot=0x02E2, }, { adobename="xsuperior", category="lm", description="MODIFIER LETTER SMALL X", direction="l", linebreak="al", specials={ "super", 0x0078 }, unicodeslot=0x02E3, }, { adobename="glottalstopreversedsuperior", category="lm", description="MODIFIER LETTER SMALL REVERSED GLOTTAL STOP", direction="l", linebreak="al", specials={ "super", 0x0295 }, unicodeslot=0x02E4, }, { adobename="tonebarextrahighmod", category="sk", description="MODIFIER LETTER EXTRA-HIGH TONE BAR", direction="on", linebreak="al", unicodeslot=0x02E5, }, { adobename="tonebarhighmod", category="sk", description="MODIFIER LETTER HIGH TONE BAR", direction="on", linebreak="al", unicodeslot=0x02E6, }, { adobename="tonebarmidmod", category="sk", description="MODIFIER LETTER MID TONE BAR", direction="on", linebreak="al", unicodeslot=0x02E7, }, { adobename="tonebarlowmod", category="sk", description="MODIFIER LETTER LOW TONE BAR", direction="on", linebreak="al", unicodeslot=0x02E8, }, { adobename="tonebarextralowmod", category="sk", description="MODIFIER LETTER EXTRA-LOW TONE BAR", direction="on", linebreak="al", unicodeslot=0x02E9, }, { category="sk", description="MODIFIER LETTER YIN DEPARTING TONE MARK", direction="on", linebreak="al", unicodeslot=0x02EA, }, { category="sk", description="MODIFIER LETTER YANG DEPARTING TONE MARK", direction="on", linebreak="al", unicodeslot=0x02EB, }, { category="sk", description="MODIFIER LETTER VOICING", direction="on", linebreak="al", unicodeslot=0x02EC, }, { category="sk", description="MODIFIER LETTER UNASPIRATED", direction="on", linebreak="al", unicodeslot=0x02ED, }, { category="lm", description="MODIFIER LETTER DOUBLE APOSTROPHE", direction="l", linebreak="al", unicodeslot=0x02EE, }, { category="sk", description="MODIFIER LETTER LOW DOWN ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02EF, }, { category="sk", description="MODIFIER LETTER LOW UP ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02F0, }, { category="sk", description="MODIFIER LETTER LOW LEFT ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02F1, }, { category="sk", description="MODIFIER LETTER LOW RIGHT ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x02F2, }, { category="sk", description="MODIFIER LETTER LOW RING", direction="on", linebreak="al", unicodeslot=0x02F3, }, { category="sk", description="MODIFIER LETTER MIDDLE GRAVE ACCENT", direction="on", linebreak="al", unicodeslot=0x02F4, }, { category="sk", description="MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT", direction="on", linebreak="al", unicodeslot=0x02F5, }, { category="sk", description="MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT", direction="on", linebreak="al", unicodeslot=0x02F6, }, { category="sk", description="MODIFIER LETTER LOW TILDE", direction="on", linebreak="al", unicodeslot=0x02F7, }, { category="sk", description="MODIFIER LETTER RAISED COLON", direction="on", linebreak="al", unicodeslot=0x02F8, }, { category="sk", description="MODIFIER LETTER BEGIN HIGH TONE", direction="on", linebreak="al", unicodeslot=0x02F9, }, { category="sk", description="MODIFIER LETTER END HIGH TONE", direction="on", linebreak="al", unicodeslot=0x02FA, }, { category="sk", description="MODIFIER LETTER BEGIN LOW TONE", direction="on", linebreak="al", unicodeslot=0x02FB, }, { category="sk", description="MODIFIER LETTER END LOW TONE", direction="on", linebreak="al", unicodeslot=0x02FC, }, { category="sk", description="MODIFIER LETTER SHELF", direction="on", linebreak="al", unicodeslot=0x02FD, }, { category="sk", description="MODIFIER LETTER OPEN SHELF", direction="on", linebreak="al", unicodeslot=0x02FE, }, { category="sk", description="MODIFIER LETTER LOW LEFT ARROW", direction="on", linebreak="al", unicodeslot=0x02FF, }, { adobename="gravecomb", category="mn", cjkwd="a", description="COMBINING GRAVE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x0300, }, { adobename="acutecomb", category="mn", cjkwd="a", description="COMBINING ACUTE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x0301, }, { adobename="circumflexcmb", category="mn", cjkwd="a", description="COMBINING CIRCUMFLEX ACCENT", direction="nsm", linebreak="cm", mathclass="topaccent", mathname="widehat", mathstretch="h", unicodeslot=0x0302, }, { adobename="tildecomb", category="mn", cjkwd="a", description="COMBINING TILDE", direction="nsm", linebreak="cm", mathclass="topaccent", mathname="widetilde", mathstretch="h", unicodeslot=0x0303, }, { adobename="macroncmb", category="mn", cjkwd="a", description="COMBINING MACRON", direction="nsm", linebreak="cm", unicodeslot=0x0304, }, { adobename="overlinecmb", category="mn", cjkwd="a", description="COMBINING OVERLINE", direction="nsm", linebreak="cm", unicodeslot=0x0305, }, { adobename="brevecmb", category="mn", cjkwd="a", description="COMBINING BREVE", direction="nsm", linebreak="cm", unicodeslot=0x0306, }, { adobename="dotaccentcmb", category="mn", cjkwd="a", description="COMBINING DOT ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0307, }, { adobename="dieresiscmb", category="mn", cjkwd="a", description="COMBINING DIAERESIS", direction="nsm", linebreak="cm", unicodeslot=0x0308, }, { adobename="hookcmb", category="mn", cjkwd="a", description="COMBINING HOOK ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0309, }, { adobename="ringcmb", category="mn", cjkwd="a", description="COMBINING RING ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x030A, }, { adobename="hungarumlautcmb", category="mn", cjkwd="a", description="COMBINING DOUBLE ACUTE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x030B, }, { adobename="caroncmb", category="mn", cjkwd="a", description="COMBINING CARON", direction="nsm", linebreak="cm", unicodeslot=0x030C, }, { adobename="verticallineabovecmb", category="mn", cjkwd="a", description="COMBINING VERTICAL LINE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x030D, }, { adobename="dblverticallineabovecmb", category="mn", cjkwd="a", description="COMBINING DOUBLE VERTICAL LINE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x030E, }, { adobename="dblgravecmb", category="mn", cjkwd="a", description="COMBINING DOUBLE GRAVE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x030F, }, { adobename="candrabinducmb", category="mn", cjkwd="a", description="COMBINING CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x0310, }, { adobename="breveinvertedcmb", category="mn", cjkwd="a", description="COMBINING INVERTED BREVE", direction="nsm", linebreak="cm", unicodeslot=0x0311, }, { adobename="commaturnedabovecmb", category="mn", cjkwd="a", description="COMBINING TURNED COMMA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0312, }, { adobename="commaabovecmb", category="mn", cjkwd="a", description="COMBINING COMMA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0313, }, { adobename="commareversedabovecmb", category="mn", cjkwd="a", description="COMBINING REVERSED COMMA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0314, }, { adobename="commaaboverightcmb", category="mn", cjkwd="a", description="COMBINING COMMA ABOVE RIGHT", direction="nsm", linebreak="cm", unicodeslot=0x0315, }, { adobename="gravebelowcmb", category="mn", cjkwd="a", description="COMBINING GRAVE ACCENT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0316, }, { adobename="acutebelowcmb", category="mn", cjkwd="a", description="COMBINING ACUTE ACCENT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0317, }, { adobename="lefttackbelowcmb", category="mn", cjkwd="a", description="COMBINING LEFT TACK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0318, }, { adobename="righttackbelowcmb", category="mn", cjkwd="a", description="COMBINING RIGHT TACK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0319, }, { adobename="leftangleabovecmb", category="mn", cjkwd="a", description="COMBINING LEFT ANGLE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x031A, }, { adobename="horncmb", category="mn", cjkwd="a", description="COMBINING HORN", direction="nsm", linebreak="cm", unicodeslot=0x031B, }, { adobename="ringhalfleftbelowcmb", category="mn", cjkwd="a", description="COMBINING LEFT HALF RING BELOW", direction="nsm", linebreak="cm", unicodeslot=0x031C, }, { adobename="uptackbelowcmb", category="mn", cjkwd="a", description="COMBINING UP TACK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x031D, }, { adobename="downtackbelowcmb", category="mn", cjkwd="a", description="COMBINING DOWN TACK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x031E, }, { adobename="plusbelowcmb", category="mn", cjkwd="a", description="COMBINING PLUS SIGN BELOW", direction="nsm", linebreak="cm", unicodeslot=0x031F, }, { adobename="minusbelowcmb", category="mn", cjkwd="a", description="COMBINING MINUS SIGN BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0320, }, { adobename="hookpalatalizedbelowcmb", category="mn", cjkwd="a", description="COMBINING PALATALIZED HOOK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0321, }, { adobename="hookretroflexbelowcmb", category="mn", cjkwd="a", description="COMBINING RETROFLEX HOOK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0322, }, { adobename="dotbelowcomb", category="mn", cjkwd="a", contextname="textbottomdot", description="COMBINING DOT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0323, }, { adobename="dieresisbelowcmb", category="mn", cjkwd="a", description="COMBINING DIAERESIS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0324, }, { adobename="ringbelowcmb", category="mn", cjkwd="a", description="COMBINING RING BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0325, }, { category="mn", cjkwd="a", contextname="textbottomcomma", description="COMBINING COMMA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0326, }, { adobename="cedillacmb", category="mn", cjkwd="a", description="COMBINING CEDILLA", direction="nsm", linebreak="cm", unicodeslot=0x0327, }, { adobename="ogonekcmb", category="mn", cjkwd="a", description="COMBINING OGONEK", direction="nsm", linebreak="cm", unicodeslot=0x0328, }, { adobename="verticallinebelowcmb", category="mn", cjkwd="a", description="COMBINING VERTICAL LINE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0329, }, { adobename="bridgebelowcmb", category="mn", cjkwd="a", description="COMBINING BRIDGE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x032A, }, { adobename="dblarchinvertedbelowcmb", category="mn", cjkwd="a", description="COMBINING INVERTED DOUBLE ARCH BELOW", direction="nsm", linebreak="cm", unicodeslot=0x032B, }, { adobename="caronbelowcmb", category="mn", cjkwd="a", description="COMBINING CARON BELOW", direction="nsm", linebreak="cm", unicodeslot=0x032C, }, { adobename="circumflexbelowcmb", category="mn", cjkwd="a", description="COMBINING CIRCUMFLEX ACCENT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x032D, }, { adobename="brevebelowcmb", category="mn", cjkwd="a", description="COMBINING BREVE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x032E, }, { adobename="breveinvertedbelowcmb", category="mn", cjkwd="a", description="COMBINING INVERTED BREVE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x032F, }, { adobename="tildebelowcmb", category="mn", cjkwd="a", description="COMBINING TILDE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0330, }, { adobename="macronbelowcmb", category="mn", cjkwd="a", description="COMBINING MACRON BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0331, }, { adobename="lowlinecmb", category="mn", cjkwd="a", description="COMBINING LOW LINE", direction="nsm", linebreak="cm", unicodeslot=0x0332, }, { adobename="dbllowlinecmb", category="mn", cjkwd="a", description="COMBINING DOUBLE LOW LINE", direction="nsm", linebreak="cm", unicodeslot=0x0333, }, { adobename="tildeoverlaycmb", category="mn", cjkwd="a", description="COMBINING TILDE OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x0334, }, { adobename="strokeshortoverlaycmb", category="mn", cjkwd="a", description="COMBINING SHORT STROKE OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x0335, }, { adobename="strokelongoverlaycmb", category="mn", cjkwd="a", description="COMBINING LONG STROKE OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x0336, }, { adobename="solidusshortoverlaycmb", category="mn", cjkwd="a", description="COMBINING SHORT SOLIDUS OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x0337, }, { adobename="soliduslongoverlaycmb", category="mn", cjkwd="a", description="COMBINING LONG SOLIDUS OVERLAY", direction="nsm", linebreak="cm", mathclass="relation", mathname="not", unicodeslot=0x0338, }, { adobename="ringhalfrightbelowcmb", category="mn", cjkwd="a", description="COMBINING RIGHT HALF RING BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0339, }, { adobename="bridgeinvertedbelowcmb", category="mn", cjkwd="a", description="COMBINING INVERTED BRIDGE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x033A, }, { adobename="squarebelowcmb", category="mn", cjkwd="a", description="COMBINING SQUARE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x033B, }, { adobename="seagullbelowcmb", category="mn", cjkwd="a", description="COMBINING SEAGULL BELOW", direction="nsm", linebreak="cm", unicodeslot=0x033C, }, { adobename="xabovecmb", category="mn", cjkwd="a", description="COMBINING X ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x033D, }, { adobename="tildeverticalcmb", category="mn", cjkwd="a", description="COMBINING VERTICAL TILDE", direction="nsm", linebreak="cm", unicodeslot=0x033E, }, { adobename="dbloverlinecmb", category="mn", cjkwd="a", description="COMBINING DOUBLE OVERLINE", direction="nsm", linebreak="cm", unicodeslot=0x033F, }, { adobename="gravetonecmb", category="mn", cjkwd="a", description="COMBINING GRAVE TONE MARK", direction="nsm", linebreak="cm", specials={ "char", 0x0300 }, unicodeslot=0x0340, }, { adobename="acutetonecmb", category="mn", cjkwd="a", description="COMBINING ACUTE TONE MARK", direction="nsm", linebreak="cm", specials={ "char", 0x0301 }, unicodeslot=0x0341, }, { adobename="perispomenigreekcmb", category="mn", cjkwd="a", description="COMBINING GREEK PERISPOMENI", direction="nsm", linebreak="cm", unicodeslot=0x0342, }, { adobename="koroniscmb", category="mn", cjkwd="a", description="COMBINING GREEK KORONIS", direction="nsm", linebreak="cm", specials={ "char", 0x0313 }, unicodeslot=0x0343, }, { adobename="dialytikatonoscmb", category="mn", cjkwd="a", description="COMBINING GREEK DIALYTIKA TONOS", direction="nsm", linebreak="cm", specials={ "char", 0x0308, 0x0301 }, unicodeslot=0x0344, }, { adobename="ypogegrammenigreekcmb", category="mn", cjkwd="a", description="COMBINING GREEK YPOGEGRAMMENI", direction="nsm", linebreak="cm", uccode=0x0399, unicodeslot=0x0345, }, { category="mn", cjkwd="a", description="COMBINING BRIDGE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0346, }, { category="mn", cjkwd="a", description="COMBINING EQUALS SIGN BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0347, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE VERTICAL LINE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0348, }, { category="mn", cjkwd="a", description="COMBINING LEFT ANGLE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0349, }, { category="mn", cjkwd="a", description="COMBINING NOT TILDE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x034A, }, { category="mn", cjkwd="a", description="COMBINING HOMOTHETIC ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x034B, }, { category="mn", cjkwd="a", description="COMBINING ALMOST EQUAL TO ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x034C, }, { category="mn", cjkwd="a", description="COMBINING LEFT RIGHT ARROW BELOW", direction="nsm", linebreak="cm", unicodeslot=0x034D, }, { category="mn", cjkwd="a", description="COMBINING UPWARDS ARROW BELOW", direction="nsm", linebreak="cm", unicodeslot=0x034E, }, { category="mn", cjkwd="a", description="COMBINING GRAPHEME JOINER", direction="nsm", linebreak="gl", unicodeslot=0x034F, }, { category="mn", cjkwd="a", description="COMBINING RIGHT ARROWHEAD ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0350, }, { category="mn", cjkwd="a", description="COMBINING LEFT HALF RING ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0351, }, { category="mn", cjkwd="a", description="COMBINING FERMATA", direction="nsm", linebreak="cm", unicodeslot=0x0352, }, { category="mn", cjkwd="a", description="COMBINING X BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0353, }, { category="mn", cjkwd="a", description="COMBINING LEFT ARROWHEAD BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0354, }, { category="mn", cjkwd="a", description="COMBINING RIGHT ARROWHEAD BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0355, }, { category="mn", cjkwd="a", description="COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0356, }, { category="mn", cjkwd="a", description="COMBINING RIGHT HALF RING ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0357, }, { category="mn", cjkwd="a", description="COMBINING DOT ABOVE RIGHT", direction="nsm", linebreak="cm", unicodeslot=0x0358, }, { category="mn", cjkwd="a", description="COMBINING ASTERISK BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0359, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE RING BELOW", direction="nsm", linebreak="cm", unicodeslot=0x035A, }, { category="mn", cjkwd="a", description="COMBINING ZIGZAG ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x035B, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE BREVE BELOW", direction="nsm", linebreak="gl", unicodeslot=0x035C, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE BREVE", direction="nsm", linebreak="gl", unicodeslot=0x035D, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE MACRON", direction="nsm", linebreak="gl", unicodeslot=0x035E, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE MACRON BELOW", direction="nsm", linebreak="gl", unicodeslot=0x035F, }, { adobename="tildedoublecmb", category="mn", cjkwd="a", description="COMBINING DOUBLE TILDE", direction="nsm", linebreak="gl", unicodeslot=0x0360, }, { adobename="breveinverteddoublecmb", category="mn", cjkwd="a", description="COMBINING DOUBLE INVERTED BREVE", direction="nsm", linebreak="gl", unicodeslot=0x0361, }, { category="mn", cjkwd="a", description="COMBINING DOUBLE RIGHTWARDS ARROW BELOW", direction="nsm", linebreak="gl", unicodeslot=0x0362, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER A", direction="nsm", linebreak="cm", unicodeslot=0x0363, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER E", direction="nsm", linebreak="cm", unicodeslot=0x0364, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER I", direction="nsm", linebreak="cm", unicodeslot=0x0365, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER O", direction="nsm", linebreak="cm", unicodeslot=0x0366, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER U", direction="nsm", linebreak="cm", unicodeslot=0x0367, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER C", direction="nsm", linebreak="cm", unicodeslot=0x0368, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER D", direction="nsm", linebreak="cm", unicodeslot=0x0369, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER H", direction="nsm", linebreak="cm", unicodeslot=0x036A, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER M", direction="nsm", linebreak="cm", unicodeslot=0x036B, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER R", direction="nsm", linebreak="cm", unicodeslot=0x036C, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER T", direction="nsm", linebreak="cm", unicodeslot=0x036D, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER V", direction="nsm", linebreak="cm", unicodeslot=0x036E, }, { category="mn", cjkwd="a", description="COMBINING LATIN SMALL LETTER X", direction="nsm", linebreak="cm", unicodeslot=0x036F, }, { category="lu", description="GREEK CAPITAL LETTER HETA", direction="l", linebreak="al", unicodeslot=0x0370, }, { category="ll", description="GREEK SMALL LETTER HETA", direction="l", linebreak="al", unicodeslot=0x0371, }, { category="lu", description="GREEK CAPITAL LETTER ARCHAIC SAMPI", direction="l", linebreak="al", unicodeslot=0x0372, }, { category="ll", description="GREEK SMALL LETTER ARCHAIC SAMPI", direction="l", linebreak="al", unicodeslot=0x0373, }, { adobename="numeralsigngreek", category="sk", description="GREEK NUMERAL SIGN", direction="on", linebreak="al", specials={ "char", 0x02B9 }, unicodeslot=0x0374, }, { adobename="numeralsignlowergreek", category="sk", description="GREEK LOWER NUMERAL SIGN", direction="on", linebreak="al", unicodeslot=0x0375, }, { category="lu", description="GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA", direction="l", linebreak="al", unicodeslot=0x0376, }, { category="ll", description="GREEK SMALL LETTER PAMPHYLIAN DIGAMMA", direction="l", linebreak="al", unicodeslot=0x0377, }, [0x037A]={ adobename="ypogegrammeni", category="lm", description="GREEK YPOGEGRAMMENI", direction="l", linebreak="al", specials={ "compat", 0x0020, 0x0345 }, unicodeslot=0x037A, }, [0x037B]={ category="ll", description="GREEK SMALL REVERSED LUNATE SIGMA SYMBOL", direction="l", linebreak="al", uccode=0x03FD, unicodeslot=0x037B, }, [0x037C]={ category="ll", description="GREEK SMALL DOTTED LUNATE SIGMA SYMBOL", direction="l", linebreak="al", uccode=0x03FE, unicodeslot=0x037C, }, [0x037D]={ category="ll", description="GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL", direction="l", linebreak="al", uccode=0x03FF, unicodeslot=0x037D, }, [0x037E]={ adobename="questiongreek", category="po", description="GREEK QUESTION MARK", direction="on", linebreak="is", specials={ "char", 0x003B }, unicodeslot=0x037E, }, [0x0384]={ adobename="tonos", category="sk", contextname="greektonos", description="GREEK TONOS", direction="on", linebreak="al", specials={ "compat", 0x0020, 0x0301 }, unicodeslot=0x0384, }, [0x0385]={ adobename="dieresistonos", category="sk", contextname="greekdialytikatonos", description="GREEK DIALYTIKA TONOS", direction="on", linebreak="al", specials={ "char", 0x00A8, 0x0301 }, unicodeslot=0x0385, }, [0x0386]={ adobename="Alphatonos", category="lu", contextname="greekAlphatonos", description="GREEK CAPITAL LETTER ALPHA WITH TONOS", direction="l", lccode=0x03AC, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0301 }, unicodeslot=0x0386, }, [0x0387]={ adobename="anoteleia", category="po", description="GREEK ANO TELEIA", direction="on", linebreak="al", specials={ "char", 0x00B7 }, unicodeslot=0x0387, }, [0x0388]={ adobename="Epsilontonos", category="lu", contextname="greekEpsilontonos", description="GREEK CAPITAL LETTER EPSILON WITH TONOS", direction="l", lccode=0x03AD, linebreak="al", shcode=0x0395, specials={ "char", 0x0395, 0x0301 }, unicodeslot=0x0388, }, [0x0389]={ adobename="Etatonos", category="lu", contextname="greekEtatonos", description="GREEK CAPITAL LETTER ETA WITH TONOS", direction="l", lccode=0x03AE, linebreak="al", shcode=0x0397, specials={ "char", 0x0397, 0x0301 }, unicodeslot=0x0389, }, [0x038A]={ adobename="Iotatonos", category="lu", contextname="greekIotatonos", description="GREEK CAPITAL LETTER IOTA WITH TONOS", direction="l", lccode=0x03AF, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0301 }, unicodeslot=0x038A, }, [0x038C]={ adobename="Omicrontonos", category="lu", contextname="greekOmicrontonos", description="GREEK CAPITAL LETTER OMICRON WITH TONOS", direction="l", lccode=0x03CC, linebreak="al", shcode=0x039F, specials={ "char", 0x039F, 0x0301 }, unicodeslot=0x038C, }, [0x038E]={ adobename="Upsilontonos", category="lu", contextname="greekUpsilontonos", description="GREEK CAPITAL LETTER UPSILON WITH TONOS", direction="l", lccode=0x03CD, linebreak="al", shcode=0x03A5, specials={ "char", 0x03A5, 0x0301 }, unicodeslot=0x038E, }, [0x038F]={ adobename="Omegatonos", category="lu", contextname="greekOmegatonos", description="GREEK CAPITAL LETTER OMEGA WITH TONOS", direction="l", lccode=0x03CE, linebreak="al", shcode=0x03A9, specials={ "char", 0x03A9, 0x0301 }, unicodeslot=0x038F, }, [0x0390]={ adobename="iotadieresistonos", category="ll", contextname="greekiotadialytikatonos", description="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03CA, 0x0301 }, unicodeslot=0x0390, }, [0x0391]={ adobename="Alpha", category="lu", cjkwd="a", contextname="greekAlpha", description="GREEK CAPITAL LETTER ALPHA", direction="l", lccode=0x03B1, linebreak="al", mathclass="variable", mathname="Alpha", unicodeslot=0x0391, }, [0x0392]={ adobename="Beta", category="lu", cjkwd="a", contextname="greekBeta", description="GREEK CAPITAL LETTER BETA", direction="l", lccode=0x03B2, linebreak="al", mathclass="variable", mathname="Beta", unicodeslot=0x0392, }, [0x0393]={ adobename="Gamma", category="lu", cjkwd="a", contextname="greekGamma", description="GREEK CAPITAL LETTER GAMMA", direction="l", lccode=0x03B3, linebreak="al", mathclass="variable", mathname="Gamma", unicodeslot=0x0393, }, [0x0394]={ adobename="Deltagreek", category="lu", cjkwd="a", contextname="greekDelta", description="GREEK CAPITAL LETTER DELTA", direction="l", lccode=0x03B4, linebreak="al", mathclass="variable", mathname="Delta", unicodeslot=0x0394, }, [0x0395]={ adobename="Epsilon", category="lu", cjkwd="a", contextname="greekEpsilon", description="GREEK CAPITAL LETTER EPSILON", direction="l", lccode=0x03B5, linebreak="al", mathclass="variable", mathname="Epsilon", unicodeslot=0x0395, }, [0x0396]={ adobename="Zeta", category="lu", cjkwd="a", contextname="greekZeta", description="GREEK CAPITAL LETTER ZETA", direction="l", lccode=0x03B6, linebreak="al", mathclass="variable", mathname="Zeta", unicodeslot=0x0396, }, [0x0397]={ adobename="Eta", category="lu", cjkwd="a", contextname="greekEta", description="GREEK CAPITAL LETTER ETA", direction="l", lccode=0x03B7, linebreak="al", mathclass="variable", mathname="Eta", unicodeslot=0x0397, }, [0x0398]={ adobename="Theta", category="lu", cjkwd="a", contextname="greekTheta", description="GREEK CAPITAL LETTER THETA", direction="l", lccode=0x03B8, linebreak="al", mathclass="variable", mathname="Theta", unicodeslot=0x0398, }, [0x0399]={ adobename="Iota", category="lu", cjkwd="a", contextname="greekIota", description="GREEK CAPITAL LETTER IOTA", direction="l", lccode=0x03B9, linebreak="al", mathclass="variable", mathname="Iota", unicodeslot=0x0399, }, [0x039A]={ adobename="Kappa", category="lu", cjkwd="a", contextname="greekKappa", description="GREEK CAPITAL LETTER KAPPA", direction="l", lccode=0x03BA, linebreak="al", mathclass="variable", mathname="Kappa", unicodeslot=0x039A, }, [0x039B]={ adobename="Lambda", category="lu", cjkwd="a", contextname="greekLambda", description="GREEK CAPITAL LETTER LAMDA", direction="l", lccode=0x03BB, linebreak="al", mathclass="variable", mathname="Lambda", unicodeslot=0x039B, }, [0x039C]={ adobename="Mu", category="lu", cjkwd="a", contextname="greekMu", description="GREEK CAPITAL LETTER MU", direction="l", lccode=0x03BC, linebreak="al", mathclass="variable", mathname="Mu", unicodeslot=0x039C, }, [0x039D]={ adobename="Nu", category="lu", cjkwd="a", contextname="greekNu", description="GREEK CAPITAL LETTER NU", direction="l", lccode=0x03BD, linebreak="al", mathclass="variable", mathname="Nu", unicodeslot=0x039D, }, [0x039E]={ adobename="Xi", category="lu", cjkwd="a", contextname="greekXi", description="GREEK CAPITAL LETTER XI", direction="l", lccode=0x03BE, linebreak="al", mathclass="variable", mathname="Xi", unicodeslot=0x039E, }, [0x039F]={ adobename="Omicron", category="lu", cjkwd="a", contextname="greekOmicron", description="GREEK CAPITAL LETTER OMICRON", direction="l", lccode=0x03BF, linebreak="al", mathclass="variable", mathname="Omicron", unicodeslot=0x039F, }, [0x03A0]={ adobename="Pi", category="lu", cjkwd="a", contextname="greekPi", description="GREEK CAPITAL LETTER PI", direction="l", lccode=0x03C0, linebreak="al", mathclass="variable", mathname="Pi", unicodeslot=0x03A0, }, [0x03A1]={ adobename="Rho", category="lu", cjkwd="a", contextname="greekRho", description="GREEK CAPITAL LETTER RHO", direction="l", lccode=0x03C1, linebreak="al", mathclass="variable", mathname="Rho", unicodeslot=0x03A1, }, [0x03A3]={ adobename="Sigma", category="lu", cjkwd="a", contextname="greekSigma", description="GREEK CAPITAL LETTER SIGMA", direction="l", lccode=0x03C3, linebreak="al", mathclass="variable", mathname="Sigma", unicodeslot=0x03A3, }, [0x03A4]={ adobename="Tau", category="lu", cjkwd="a", contextname="greekTau", description="GREEK CAPITAL LETTER TAU", direction="l", lccode=0x03C4, linebreak="al", mathclass="variable", mathname="Tau", unicodeslot=0x03A4, }, [0x03A5]={ adobename="Upsilon", category="lu", cjkwd="a", contextname="greekUpsilon", description="GREEK CAPITAL LETTER UPSILON", direction="l", lccode=0x03C5, linebreak="al", mathclass="variable", mathname="Upsilon", unicodeslot=0x03A5, }, [0x03A6]={ adobename="Phi", category="lu", cjkwd="a", contextname="greekPhi", description="GREEK CAPITAL LETTER PHI", direction="l", lccode=0x03C6, linebreak="al", mathclass="variable", mathname="Phi", unicodeslot=0x03A6, }, [0x03A7]={ adobename="Chi", category="lu", cjkwd="a", contextname="greekChi", description="GREEK CAPITAL LETTER CHI", direction="l", lccode=0x03C7, linebreak="al", mathclass="variable", mathname="Chi", unicodeslot=0x03A7, }, [0x03A8]={ adobename="Psi", category="lu", cjkwd="a", contextname="greekPsi", description="GREEK CAPITAL LETTER PSI", direction="l", lccode=0x03C8, linebreak="al", mathclass="variable", mathname="Psi", unicodeslot=0x03A8, }, [0x03A9]={ adobename="Omegagreek", category="lu", cjkwd="a", contextname="greekOmega", description="GREEK CAPITAL LETTER OMEGA", direction="l", lccode=0x03C9, linebreak="al", mathclass="variable", mathname="Omega", unicodeslot=0x03A9, }, [0x03AA]={ adobename="Iotadieresis", category="lu", contextname="greekIotadialytika", description="GREEK CAPITAL LETTER IOTA WITH DIALYTIKA", direction="l", lccode=0x03CA, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0308 }, unicodeslot=0x03AA, }, [0x03AB]={ adobename="Upsilondieresis", category="lu", contextname="greekUpsilondialytika", description="GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA", direction="l", lccode=0x03CB, linebreak="al", shcode=0x03A5, specials={ "char", 0x03A5, 0x0308 }, unicodeslot=0x03AB, }, [0x03AC]={ adobename="alphatonos", category="ll", contextname="greekalphatonos", description="GREEK SMALL LETTER ALPHA WITH TONOS", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0301 }, uccode=0x0386, unicodeslot=0x03AC, }, [0x03AD]={ adobename="epsilontonos", category="ll", contextname="greekepsilontonos", description="GREEK SMALL LETTER EPSILON WITH TONOS", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x03B5, 0x0301 }, uccode=0x0388, unicodeslot=0x03AD, }, [0x03AE]={ adobename="etatonos", category="ll", contextname="greeketatonos", description="GREEK SMALL LETTER ETA WITH TONOS", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03B7, 0x0301 }, uccode=0x0389, unicodeslot=0x03AE, }, [0x03AF]={ adobename="iotatonos", category="ll", contextname="greekiotatonos", description="GREEK SMALL LETTER IOTA WITH TONOS", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0301 }, uccode=0x038A, unicodeslot=0x03AF, }, [0x03B0]={ adobename="upsilondieresistonos", category="ll", contextname="greekupsilondialytikatonos", description="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03CB, 0x0301 }, unicodeslot=0x03B0, }, [0x03B1]={ adobename="alpha", category="ll", cjkwd="a", contextname="greekalpha", description="GREEK SMALL LETTER ALPHA", direction="l", linebreak="al", mathclass="variable", mathname="alpha", uccode=0x0391, unicodeslot=0x03B1, }, [0x03B2]={ adobename="beta", category="ll", cjkwd="a", contextname="greekbeta", description="GREEK SMALL LETTER BETA", direction="l", linebreak="al", mathclass="variable", mathname="beta", uccode=0x0392, unicodeslot=0x03B2, }, [0x03B3]={ adobename="gamma", category="ll", cjkwd="a", contextname="greekgamma", description="GREEK SMALL LETTER GAMMA", direction="l", linebreak="al", mathclass="variable", mathname="gamma", uccode=0x0393, unicodeslot=0x03B3, }, [0x03B4]={ adobename="delta", category="ll", cjkwd="a", contextname="greekdelta", description="GREEK SMALL LETTER DELTA", direction="l", linebreak="al", mathclass="variable", mathname="delta", uccode=0x0394, unicodeslot=0x03B4, }, [0x03B5]={ adobename="epsilon", category="ll", cjkwd="a", contextname="greekepsilon", description="GREEK SMALL LETTER EPSILON", direction="l", linebreak="al", mathclass="variable", mathname="varepsilon", uccode=0x0395, unicodeslot=0x03B5, }, [0x03B6]={ adobename="zeta", category="ll", cjkwd="a", contextname="greekzeta", description="GREEK SMALL LETTER ZETA", direction="l", linebreak="al", mathclass="variable", mathname="zeta", uccode=0x0396, unicodeslot=0x03B6, }, [0x03B7]={ adobename="eta", category="ll", cjkwd="a", contextname="greeketa", description="GREEK SMALL LETTER ETA", direction="l", linebreak="al", mathclass="variable", mathname="eta", uccode=0x0397, unicodeslot=0x03B7, }, [0x03B8]={ adobename="theta", category="ll", cjkwd="a", contextname="greektheta", description="GREEK SMALL LETTER THETA", direction="l", linebreak="al", mathclass="variable", mathname="theta", uccode=0x0398, unicodeslot=0x03B8, }, [0x03B9]={ adobename="iota", category="ll", cjkwd="a", contextname="greekiota", description="GREEK SMALL LETTER IOTA", direction="l", linebreak="al", mathclass="variable", mathname="iota", uccode=0x0399, unicodeslot=0x03B9, }, [0x03BA]={ adobename="kappa", category="ll", cjkwd="a", contextname="greekkappa", description="GREEK SMALL LETTER KAPPA", direction="l", linebreak="al", mathclass="variable", mathname="kappa", uccode=0x039A, unicodeslot=0x03BA, }, [0x03BB]={ adobename="lambda", category="ll", cjkwd="a", contextname="greeklambda", description="GREEK SMALL LETTER LAMDA", direction="l", linebreak="al", mathclass="variable", mathname="lambda", uccode=0x039B, unicodeslot=0x03BB, }, [0x03BC]={ adobename="mugreek", category="ll", cjkwd="a", contextname="greekmu", description="GREEK SMALL LETTER MU", direction="l", linebreak="al", mathclass="variable", mathname="mu", uccode=0x039C, unicodeslot=0x03BC, }, [0x03BD]={ adobename="nu", category="ll", cjkwd="a", contextname="greeknu", description="GREEK SMALL LETTER NU", direction="l", linebreak="al", mathclass="variable", mathname="nu", uccode=0x039D, unicodeslot=0x03BD, }, [0x03BE]={ adobename="xi", category="ll", cjkwd="a", contextname="greekxi", description="GREEK SMALL LETTER XI", direction="l", linebreak="al", mathclass="variable", mathname="xi", uccode=0x039E, unicodeslot=0x03BE, }, [0x03BF]={ adobename="omicron", category="ll", cjkwd="a", contextname="greekomicron", description="GREEK SMALL LETTER OMICRON", direction="l", linebreak="al", mathclass="variable", mathname="omicron", uccode=0x039F, unicodeslot=0x03BF, }, [0x03C0]={ adobename="pi", category="ll", cjkwd="a", contextname="greekpi", description="GREEK SMALL LETTER PI", direction="l", linebreak="al", mathclass="variable", mathname="pi", uccode=0x03A0, unicodeslot=0x03C0, }, [0x03C1]={ adobename="rho", category="ll", cjkwd="a", contextname="greekrho", description="GREEK SMALL LETTER RHO", direction="l", linebreak="al", mathclass="variable", mathname="rho", uccode=0x03A1, unicodeslot=0x03C1, }, [0x03C2]={ adobename="sigmafinal", category="ll", contextname="greekfinalsigma", description="GREEK SMALL LETTER FINAL SIGMA", direction="l", linebreak="al", mathclass="variable", mathname="varsigma", uccode=0x03A3, unicodeslot=0x03C2, }, [0x03C3]={ adobename="sigma", category="ll", cjkwd="a", contextname="greeksigma", description="GREEK SMALL LETTER SIGMA", direction="l", linebreak="al", mathclass="variable", mathname="sigma", uccode=0x03A3, unicodeslot=0x03C3, }, [0x03C4]={ adobename="tau", category="ll", cjkwd="a", contextname="greektau", description="GREEK SMALL LETTER TAU", direction="l", linebreak="al", mathclass="variable", mathname="tau", uccode=0x03A4, unicodeslot=0x03C4, }, [0x03C5]={ adobename="upsilon", category="ll", cjkwd="a", contextname="greekupsilon", description="GREEK SMALL LETTER UPSILON", direction="l", linebreak="al", mathclass="variable", mathname="upsilon", uccode=0x03A5, unicodeslot=0x03C5, }, [0x03C6]={ adobename="phi", category="ll", cjkwd="a", contextname="greekphi", description="GREEK SMALL LETTER PHI", direction="l", linebreak="al", mathclass="variable", mathname="varphi", uccode=0x03A6, unicodeslot=0x03C6, }, [0x03C7]={ adobename="chi", category="ll", cjkwd="a", contextname="greekchi", description="GREEK SMALL LETTER CHI", direction="l", linebreak="al", mathclass="variable", mathname="chi", uccode=0x03A7, unicodeslot=0x03C7, }, [0x03C8]={ adobename="psi", category="ll", cjkwd="a", contextname="greekpsi", description="GREEK SMALL LETTER PSI", direction="l", linebreak="al", mathclass="variable", mathname="psi", uccode=0x03A8, unicodeslot=0x03C8, }, [0x03C9]={ adobename="omega", category="ll", cjkwd="a", contextname="greekomega", description="GREEK SMALL LETTER OMEGA", direction="l", linebreak="al", mathclass="variable", mathname="omega", uccode=0x03A9, unicodeslot=0x03C9, }, [0x03CA]={ adobename="iotadieresis", category="ll", contextname="greekiotadialytika", description="GREEK SMALL LETTER IOTA WITH DIALYTIKA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0308 }, uccode=0x03AA, unicodeslot=0x03CA, }, [0x03CB]={ adobename="upsilondieresis", category="ll", contextname="greekupsilondiaeresis", description="GREEK SMALL LETTER UPSILON WITH DIALYTIKA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0308 }, uccode=0x03AB, unicodeslot=0x03CB, }, [0x03CC]={ adobename="omicrontonos", category="ll", contextname="greekomicrontonos", description="GREEK SMALL LETTER OMICRON WITH TONOS", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x03BF, 0x0301 }, uccode=0x038C, unicodeslot=0x03CC, }, [0x03CD]={ adobename="upsilontonos", category="ll", contextname="greekupsilontonos", description="GREEK SMALL LETTER UPSILON WITH TONOS", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0301 }, uccode=0x038E, unicodeslot=0x03CD, }, [0x03CE]={ adobename="omegatonos", category="ll", contextname="greekomegatonos", description="GREEK SMALL LETTER OMEGA WITH TONOS", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03C9, 0x0301 }, uccode=0x038F, unicodeslot=0x03CE, }, [0x03CF]={ category="lu", description="GREEK CAPITAL KAI SYMBOL", direction="l", linebreak="al", unicodeslot=0x03CF, }, [0x03D0]={ adobename="betasymbolgreek", category="ll", description="GREEK BETA SYMBOL", direction="l", linebreak="al", specials={ "compat", 0x03B2 }, uccode=0x0392, unicodeslot=0x03D0, }, [0x03D1]={ adobename="thetasymbolgreek", category="ll", contextname="greekthetaalt", description="GREEK THETA SYMBOL", direction="l", linebreak="al", mathclass="variable", mathname="varTheta", specials={ "compat", 0x03B8 }, uccode=0x0398, unicodeslot=0x03D1, }, [0x03D2]={ adobename="Upsilonhooksymbol", category="lu", description="GREEK UPSILON WITH HOOK SYMBOL", direction="l", linebreak="al", specials={ "compat", 0x03A5 }, unicodeslot=0x03D2, }, [0x03D3]={ adobename="Upsilonacutehooksymbolgreek", category="lu", description="GREEK UPSILON WITH ACUTE AND HOOK SYMBOL", direction="l", linebreak="al", specials={ "char", 0x03D2, 0x0301 }, unicodeslot=0x03D3, }, [0x03D4]={ adobename="Upsilondieresishooksymbolgreek", category="lu", description="GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL", direction="l", linebreak="al", specials={ "char", 0x03D2, 0x0308 }, unicodeslot=0x03D4, }, [0x03D5]={ adobename="phisymbolgreek", category="ll", contextname="greekphialt", description="GREEK PHI SYMBOL", direction="l", linebreak="al", mathclass="variable", mathname="phi", specials={ "compat", 0x03C6 }, uccode=0x03A6, unicodeslot=0x03D5, }, [0x03D6]={ adobename="pisymbolgreek", category="ll", contextname="greekpialt", description="GREEK PI SYMBOL", direction="l", linebreak="al", mathclass="variable", mathname="varpi", specials={ "compat", 0x03C0 }, uccode=0x03A0, unicodeslot=0x03D6, }, [0x03D7]={ category="ll", description="GREEK KAI SYMBOL", direction="l", linebreak="al", unicodeslot=0x03D7, }, [0x03D8]={ category="lu", description="GREEK LETTER ARCHAIC KOPPA", direction="l", lccode=0x03D9, linebreak="al", unicodeslot=0x03D8, }, [0x03D9]={ category="ll", contextname="greekkoppa", description="GREEK SMALL LETTER ARCHAIC KOPPA", direction="l", linebreak="al", uccode=0x03D8, unicodeslot=0x03D9, }, [0x03DA]={ adobename="Stigmagreek", category="lu", description="GREEK LETTER STIGMA", direction="l", lccode=0x03DB, linebreak="al", unicodeslot=0x03DA, }, [0x03DB]={ category="ll", contextname="greekstigma", description="GREEK SMALL LETTER STIGMA", direction="l", linebreak="al", uccode=0x03DA, unicodeslot=0x03DB, }, [0x03DC]={ adobename="Digammagreek", category="lu", description="GREEK LETTER DIGAMMA", direction="l", lccode=0x03DD, linebreak="al", mathclass="variable", mathname="digamma", unicodeslot=0x03DC, }, [0x03DD]={ category="ll", contextname="greekdigamma", description="GREEK SMALL LETTER DIGAMMA", direction="l", linebreak="al", uccode=0x03DC, unicodeslot=0x03DD, }, [0x03DE]={ adobename="Koppagreek", category="lu", description="GREEK LETTER KOPPA", direction="l", lccode=0x03DF, linebreak="al", unicodeslot=0x03DE, }, [0x03DF]={ category="ll", contextname="greeknumkoppa", description="GREEK SMALL LETTER KOPPA", direction="l", linebreak="al", uccode=0x03DE, unicodeslot=0x03DF, }, [0x03E0]={ adobename="Sampigreek", category="lu", description="GREEK LETTER SAMPI", direction="l", lccode=0x03E1, linebreak="al", unicodeslot=0x03E0, }, [0x03E1]={ category="ll", contextname="greeksampi", description="GREEK SMALL LETTER SAMPI", direction="l", linebreak="al", uccode=0x03E0, unicodeslot=0x03E1, }, [0x03E2]={ adobename="Sheicoptic", category="lu", description="COPTIC CAPITAL LETTER SHEI", direction="l", lccode=0x03E3, linebreak="al", unicodeslot=0x03E2, }, [0x03E3]={ adobename="sheicoptic", category="ll", description="COPTIC SMALL LETTER SHEI", direction="l", linebreak="al", uccode=0x03E2, unicodeslot=0x03E3, }, [0x03E4]={ adobename="Feicoptic", category="lu", description="COPTIC CAPITAL LETTER FEI", direction="l", lccode=0x03E5, linebreak="al", unicodeslot=0x03E4, }, [0x03E5]={ adobename="feicoptic", category="ll", description="COPTIC SMALL LETTER FEI", direction="l", linebreak="al", uccode=0x03E4, unicodeslot=0x03E5, }, [0x03E6]={ adobename="Kheicoptic", category="lu", description="COPTIC CAPITAL LETTER KHEI", direction="l", lccode=0x03E7, linebreak="al", unicodeslot=0x03E6, }, [0x03E7]={ adobename="kheicoptic", category="ll", description="COPTIC SMALL LETTER KHEI", direction="l", linebreak="al", uccode=0x03E6, unicodeslot=0x03E7, }, [0x03E8]={ adobename="Horicoptic", category="lu", description="COPTIC CAPITAL LETTER HORI", direction="l", lccode=0x03E9, linebreak="al", unicodeslot=0x03E8, }, [0x03E9]={ adobename="horicoptic", category="ll", description="COPTIC SMALL LETTER HORI", direction="l", linebreak="al", uccode=0x03E8, unicodeslot=0x03E9, }, [0x03EA]={ adobename="Gangiacoptic", category="lu", description="COPTIC CAPITAL LETTER GANGIA", direction="l", lccode=0x03EB, linebreak="al", unicodeslot=0x03EA, }, [0x03EB]={ adobename="gangiacoptic", category="ll", description="COPTIC SMALL LETTER GANGIA", direction="l", linebreak="al", uccode=0x03EA, unicodeslot=0x03EB, }, [0x03EC]={ adobename="Shimacoptic", category="lu", description="COPTIC CAPITAL LETTER SHIMA", direction="l", lccode=0x03ED, linebreak="al", unicodeslot=0x03EC, }, [0x03ED]={ adobename="shimacoptic", category="ll", description="COPTIC SMALL LETTER SHIMA", direction="l", linebreak="al", uccode=0x03EC, unicodeslot=0x03ED, }, [0x03EE]={ adobename="Deicoptic", category="lu", description="COPTIC CAPITAL LETTER DEI", direction="l", lccode=0x03EF, linebreak="al", unicodeslot=0x03EE, }, [0x03EF]={ adobename="deicoptic", category="ll", description="COPTIC SMALL LETTER DEI", direction="l", linebreak="al", uccode=0x03EE, unicodeslot=0x03EF, }, [0x03F0]={ adobename="kappasymbolgreek", category="ll", description="GREEK KAPPA SYMBOL", direction="l", linebreak="al", mathclass="ordinary", mathname="varkappa", specials={ "compat", 0x03BA }, uccode=0x039A, unicodeslot=0x03F0, }, [0x03F1]={ adobename="rhosymbolgreek", category="ll", contextname="greekrhoalt", description="GREEK RHO SYMBOL", direction="l", linebreak="al", specials={ "compat", 0x03C1 }, uccode=0x03A1, unicodeslot=0x03F1, }, [0x03F2]={ adobename="sigmalunatesymbolgreek", category="ll", contextname="greeksigmalunate", description="GREEK LUNATE SIGMA SYMBOL", direction="l", linebreak="al", specials={ "compat", 0x03C2 }, uccode=0x03F9, unicodeslot=0x03F2, }, [0x03F3]={ adobename="yotgreek", category="ll", description="GREEK LETTER YOT", direction="l", linebreak="al", unicodeslot=0x03F3, }, [0x03F4]={ category="lu", description="GREEK CAPITAL THETA SYMBOL", direction="l", lccode=0x03B8, linebreak="al", specials={ "compat", 0x0398 }, unicodeslot=0x03F4, }, [0x03F5]={ category="ll", contextname="greekepsilonalt", description="GREEK LUNATE EPSILON SYMBOL", direction="l", linebreak="al", mathclass="variable", mathname="epsilon", specials={ "compat", 0x03B5 }, uccode=0x0395, unicodeslot=0x03F5, }, [0x03F6]={ category="sm", description="GREEK REVERSED LUNATE EPSILON SYMBOL", direction="on", linebreak="al", mathclass="variable", mathname="backepsilon", unicodeslot=0x03F6, }, [0x03F7]={ category="lu", description="GREEK CAPITAL LETTER SHO", direction="l", lccode=0x03F8, linebreak="al", unicodeslot=0x03F7, }, [0x03F8]={ category="ll", description="GREEK SMALL LETTER SHO", direction="l", linebreak="al", uccode=0x03F7, unicodeslot=0x03F8, }, [0x03F9]={ category="lu", contextname="greekSigmalunate", description="GREEK CAPITAL LUNATE SIGMA SYMBOL", direction="l", lccode=0x03F2, linebreak="al", specials={ "compat", 0x03A3 }, unicodeslot=0x03F9, }, [0x03FA]={ category="lu", description="GREEK CAPITAL LETTER SAN", direction="l", lccode=0x03FB, linebreak="al", unicodeslot=0x03FA, }, [0x03FB]={ category="ll", description="GREEK SMALL LETTER SAN", direction="l", linebreak="al", uccode=0x03FA, unicodeslot=0x03FB, }, [0x03FC]={ category="ll", description="GREEK RHO WITH STROKE SYMBOL", direction="l", linebreak="al", unicodeslot=0x03FC, }, [0x03FD]={ category="lu", description="GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL", direction="l", lccode=0x037B, linebreak="al", unicodeslot=0x03FD, }, [0x03FE]={ category="lu", description="GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL", direction="l", lccode=0x037C, linebreak="al", unicodeslot=0x03FE, }, [0x03FF]={ category="lu", description="GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL", direction="l", lccode=0x037D, linebreak="al", unicodeslot=0x03FF, }, [0x0400]={ category="lu", contextname="cyrillicEgrave", description="CYRILLIC CAPITAL LETTER IE WITH GRAVE", direction="l", lccode=0x0450, linebreak="al", shcode=0x0415, specials={ "char", 0x0415, 0x0300 }, unicodeslot=0x0400, }, [0x0401]={ adobename="afii10023", category="lu", cjkwd="a", contextname="cyrillicYO", description="CYRILLIC CAPITAL LETTER IO", direction="l", lccode=0x0451, linebreak="al", specials={ "char", 0x0415, 0x0308 }, unicodeslot=0x0401, }, [0x0402]={ adobename="afii10051", category="lu", contextname="cyrillicDJE", description="CYRILLIC CAPITAL LETTER DJE", direction="l", lccode=0x0452, linebreak="al", unicodeslot=0x0402, }, [0x0403]={ adobename="afii10052", category="lu", contextname="cyrillicGJE", description="CYRILLIC CAPITAL LETTER GJE", direction="l", lccode=0x0453, linebreak="al", specials={ "char", 0x0413, 0x0301 }, unicodeslot=0x0403, }, [0x0404]={ adobename="afii10053", category="lu", contextname="cyrillicIE", description="CYRILLIC CAPITAL LETTER UKRAINIAN IE", direction="l", lccode=0x0454, linebreak="al", unicodeslot=0x0404, }, [0x0405]={ adobename="afii10054", category="lu", contextname="cyrillicDZE", description="CYRILLIC CAPITAL LETTER DZE", direction="l", lccode=0x0455, linebreak="al", unicodeslot=0x0405, }, [0x0406]={ adobename="afii10055", category="lu", contextname="cyrillicII", description="CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I", direction="l", lccode=0x0456, linebreak="al", unicodeslot=0x0406, }, [0x0407]={ adobename="afii10056", category="lu", contextname="cyrillicYI", description="CYRILLIC CAPITAL LETTER YI", direction="l", lccode=0x0457, linebreak="al", specials={ "char", 0x0406, 0x0308 }, unicodeslot=0x0407, }, [0x0408]={ adobename="afii10057", category="lu", contextname="cyrillicJE", description="CYRILLIC CAPITAL LETTER JE", direction="l", lccode=0x0458, linebreak="al", unicodeslot=0x0408, }, [0x0409]={ adobename="afii10058", category="lu", contextname="cyrillicLJE", description="CYRILLIC CAPITAL LETTER LJE", direction="l", lccode=0x0459, linebreak="al", unicodeslot=0x0409, }, [0x040A]={ adobename="afii10059", category="lu", contextname="cyrillicNJE", description="CYRILLIC CAPITAL LETTER NJE", direction="l", lccode=0x045A, linebreak="al", unicodeslot=0x040A, }, [0x040B]={ adobename="afii10060", category="lu", contextname="cyrillicTSHE", description="CYRILLIC CAPITAL LETTER TSHE", direction="l", lccode=0x045B, linebreak="al", unicodeslot=0x040B, }, [0x040C]={ adobename="afii10061", category="lu", contextname="cyrillicKJE", description="CYRILLIC CAPITAL LETTER KJE", direction="l", lccode=0x045C, linebreak="al", specials={ "char", 0x041A, 0x0301 }, unicodeslot=0x040C, }, [0x040D]={ category="lu", contextname="cyrillicIgrave", description="CYRILLIC CAPITAL LETTER I WITH GRAVE", direction="l", lccode=0x045D, linebreak="al", shcode=0x0418, specials={ "char", 0x0418, 0x0300 }, unicodeslot=0x040D, }, [0x040E]={ adobename="afii10062", category="lu", contextname="cyrillicUSHRT", description="CYRILLIC CAPITAL LETTER SHORT U", direction="l", lccode=0x045E, linebreak="al", specials={ "char", 0x0423, 0x0306 }, unicodeslot=0x040E, }, [0x040F]={ adobename="afii10145", category="lu", contextname="cyrillicDZHE", description="CYRILLIC CAPITAL LETTER DZHE", direction="l", lccode=0x045F, linebreak="al", unicodeslot=0x040F, }, [0x0410]={ adobename="afii10017", category="lu", cjkwd="a", contextname="cyrillicA", description="CYRILLIC CAPITAL LETTER A", direction="l", lccode=0x0430, linebreak="al", unicodeslot=0x0410, }, [0x0411]={ adobename="afii10018", category="lu", cjkwd="a", contextname="cyrillicB", description="CYRILLIC CAPITAL LETTER BE", direction="l", lccode=0x0431, linebreak="al", unicodeslot=0x0411, }, [0x0412]={ adobename="afii10019", category="lu", cjkwd="a", contextname="cyrillicV", description="CYRILLIC CAPITAL LETTER VE", direction="l", lccode=0x0432, linebreak="al", unicodeslot=0x0412, }, [0x0413]={ adobename="afii10020", category="lu", cjkwd="a", contextname="cyrillicG", description="CYRILLIC CAPITAL LETTER GHE", direction="l", lccode=0x0433, linebreak="al", unicodeslot=0x0413, }, [0x0414]={ adobename="afii10021", category="lu", cjkwd="a", contextname="cyrillicD", description="CYRILLIC CAPITAL LETTER DE", direction="l", lccode=0x0434, linebreak="al", unicodeslot=0x0414, }, [0x0415]={ adobename="afii10022", category="lu", cjkwd="a", contextname="cyrillicE", description="CYRILLIC CAPITAL LETTER IE", direction="l", lccode=0x0435, linebreak="al", unicodeslot=0x0415, }, [0x0416]={ adobename="afii10024", category="lu", cjkwd="a", contextname="cyrillicZH", description="CYRILLIC CAPITAL LETTER ZHE", direction="l", lccode=0x0436, linebreak="al", unicodeslot=0x0416, }, [0x0417]={ adobename="afii10025", category="lu", cjkwd="a", contextname="cyrillicZ", description="CYRILLIC CAPITAL LETTER ZE", direction="l", lccode=0x0437, linebreak="al", unicodeslot=0x0417, }, [0x0418]={ adobename="afii10026", category="lu", cjkwd="a", contextname="cyrillicI", description="CYRILLIC CAPITAL LETTER I", direction="l", lccode=0x0438, linebreak="al", unicodeslot=0x0418, }, [0x0419]={ adobename="afii10027", category="lu", cjkwd="a", contextname="cyrillicISHRT", description="CYRILLIC CAPITAL LETTER SHORT I", direction="l", lccode=0x0439, linebreak="al", specials={ "char", 0x0418, 0x0306 }, unicodeslot=0x0419, }, [0x041A]={ adobename="afii10028", category="lu", cjkwd="a", contextname="cyrillicK", description="CYRILLIC CAPITAL LETTER KA", direction="l", lccode=0x043A, linebreak="al", unicodeslot=0x041A, }, [0x041B]={ adobename="afii10029", category="lu", cjkwd="a", contextname="cyrillicL", description="CYRILLIC CAPITAL LETTER EL", direction="l", lccode=0x043B, linebreak="al", unicodeslot=0x041B, }, [0x041C]={ adobename="afii10030", category="lu", cjkwd="a", contextname="cyrillicM", description="CYRILLIC CAPITAL LETTER EM", direction="l", lccode=0x043C, linebreak="al", unicodeslot=0x041C, }, [0x041D]={ adobename="afii10031", category="lu", cjkwd="a", contextname="cyrillicN", description="CYRILLIC CAPITAL LETTER EN", direction="l", lccode=0x043D, linebreak="al", unicodeslot=0x041D, }, [0x041E]={ adobename="afii10032", category="lu", cjkwd="a", contextname="cyrillicO", description="CYRILLIC CAPITAL LETTER O", direction="l", lccode=0x043E, linebreak="al", unicodeslot=0x041E, }, [0x041F]={ adobename="afii10033", category="lu", cjkwd="a", contextname="cyrillicP", description="CYRILLIC CAPITAL LETTER PE", direction="l", lccode=0x043F, linebreak="al", unicodeslot=0x041F, }, [0x0420]={ adobename="afii10034", category="lu", cjkwd="a", contextname="cyrillicR", description="CYRILLIC CAPITAL LETTER ER", direction="l", lccode=0x0440, linebreak="al", unicodeslot=0x0420, }, [0x0421]={ adobename="afii10035", category="lu", cjkwd="a", contextname="cyrillicS", description="CYRILLIC CAPITAL LETTER ES", direction="l", lccode=0x0441, linebreak="al", unicodeslot=0x0421, }, [0x0422]={ adobename="afii10036", category="lu", cjkwd="a", contextname="cyrillicT", description="CYRILLIC CAPITAL LETTER TE", direction="l", lccode=0x0442, linebreak="al", unicodeslot=0x0422, }, [0x0423]={ adobename="afii10037", category="lu", cjkwd="a", contextname="cyrillicU", description="CYRILLIC CAPITAL LETTER U", direction="l", lccode=0x0443, linebreak="al", unicodeslot=0x0423, }, [0x0424]={ adobename="afii10038", category="lu", cjkwd="a", contextname="cyrillicF", description="CYRILLIC CAPITAL LETTER EF", direction="l", lccode=0x0444, linebreak="al", unicodeslot=0x0424, }, [0x0425]={ adobename="afii10039", category="lu", cjkwd="a", contextname="cyrillicH", description="CYRILLIC CAPITAL LETTER HA", direction="l", lccode=0x0445, linebreak="al", unicodeslot=0x0425, }, [0x0426]={ adobename="afii10040", category="lu", cjkwd="a", contextname="cyrillicC", description="CYRILLIC CAPITAL LETTER TSE", direction="l", lccode=0x0446, linebreak="al", unicodeslot=0x0426, }, [0x0427]={ adobename="afii10041", category="lu", cjkwd="a", contextname="cyrillicCH", description="CYRILLIC CAPITAL LETTER CHE", direction="l", lccode=0x0447, linebreak="al", unicodeslot=0x0427, }, [0x0428]={ adobename="afii10042", category="lu", cjkwd="a", contextname="cyrillicSH", description="CYRILLIC CAPITAL LETTER SHA", direction="l", lccode=0x0448, linebreak="al", unicodeslot=0x0428, }, [0x0429]={ adobename="afii10043", category="lu", cjkwd="a", contextname="cyrillicSHCH", description="CYRILLIC CAPITAL LETTER SHCHA", direction="l", lccode=0x0449, linebreak="al", unicodeslot=0x0429, }, [0x042A]={ adobename="afii10044", category="lu", cjkwd="a", contextname="cyrillicHRDSN", description="CYRILLIC CAPITAL LETTER HARD SIGN", direction="l", lccode=0x044A, linebreak="al", unicodeslot=0x042A, }, [0x042B]={ adobename="afii10045", category="lu", cjkwd="a", contextname="cyrillicERY", description="CYRILLIC CAPITAL LETTER YERU", direction="l", lccode=0x044B, linebreak="al", unicodeslot=0x042B, }, [0x042C]={ adobename="afii10046", category="lu", cjkwd="a", contextname="cyrillicSFTSN", description="CYRILLIC CAPITAL LETTER SOFT SIGN", direction="l", lccode=0x044C, linebreak="al", unicodeslot=0x042C, }, [0x042D]={ adobename="afii10047", category="lu", cjkwd="a", contextname="cyrillicEREV", description="CYRILLIC CAPITAL LETTER E", direction="l", lccode=0x044D, linebreak="al", unicodeslot=0x042D, }, [0x042E]={ adobename="afii10048", category="lu", cjkwd="a", contextname="cyrillicYU", description="CYRILLIC CAPITAL LETTER YU", direction="l", lccode=0x044E, linebreak="al", unicodeslot=0x042E, }, [0x042F]={ adobename="afii10049", category="lu", cjkwd="a", contextname="cyrillicYA", description="CYRILLIC CAPITAL LETTER YA", direction="l", lccode=0x044F, linebreak="al", unicodeslot=0x042F, }, [0x0430]={ adobename="afii10065", category="ll", cjkwd="a", contextname="cyrillica", description="CYRILLIC SMALL LETTER A", direction="l", linebreak="al", uccode=0x0410, unicodeslot=0x0430, }, [0x0431]={ adobename="becyrillic", category="ll", cjkwd="a", contextname="cyrillicb", description="CYRILLIC SMALL LETTER BE", direction="l", linebreak="al", uccode=0x0411, unicodeslot=0x0431, }, [0x0432]={ adobename="vecyrillic", category="ll", cjkwd="a", contextname="cyrillicv", description="CYRILLIC SMALL LETTER VE", direction="l", linebreak="al", uccode=0x0412, unicodeslot=0x0432, }, [0x0433]={ adobename="gecyrillic", category="ll", cjkwd="a", contextname="cyrillicg", description="CYRILLIC SMALL LETTER GHE", direction="l", linebreak="al", uccode=0x0413, unicodeslot=0x0433, }, [0x0434]={ adobename="decyrillic", category="ll", cjkwd="a", contextname="cyrillicd", description="CYRILLIC SMALL LETTER DE", direction="l", linebreak="al", uccode=0x0414, unicodeslot=0x0434, }, [0x0435]={ adobename="iecyrillic", category="ll", cjkwd="a", contextname="cyrillice", description="CYRILLIC SMALL LETTER IE", direction="l", linebreak="al", uccode=0x0415, unicodeslot=0x0435, }, [0x0436]={ adobename="zhecyrillic", category="ll", cjkwd="a", contextname="cyrilliczh", description="CYRILLIC SMALL LETTER ZHE", direction="l", linebreak="al", uccode=0x0416, unicodeslot=0x0436, }, [0x0437]={ adobename="zecyrillic", category="ll", cjkwd="a", contextname="cyrillicz", description="CYRILLIC SMALL LETTER ZE", direction="l", linebreak="al", uccode=0x0417, unicodeslot=0x0437, }, [0x0438]={ adobename="iicyrillic", category="ll", cjkwd="a", contextname="cyrillici", description="CYRILLIC SMALL LETTER I", direction="l", linebreak="al", uccode=0x0418, unicodeslot=0x0438, }, [0x0439]={ adobename="iishortcyrillic", category="ll", cjkwd="a", contextname="cyrillicishrt", description="CYRILLIC SMALL LETTER SHORT I", direction="l", linebreak="al", specials={ "char", 0x0438, 0x0306 }, uccode=0x0419, unicodeslot=0x0439, }, [0x043A]={ adobename="kacyrillic", category="ll", cjkwd="a", contextname="cyrillick", description="CYRILLIC SMALL LETTER KA", direction="l", linebreak="al", uccode=0x041A, unicodeslot=0x043A, }, [0x043B]={ adobename="elcyrillic", category="ll", cjkwd="a", contextname="cyrillicl", description="CYRILLIC SMALL LETTER EL", direction="l", linebreak="al", uccode=0x041B, unicodeslot=0x043B, }, [0x043C]={ adobename="emcyrillic", category="ll", cjkwd="a", contextname="cyrillicm", description="CYRILLIC SMALL LETTER EM", direction="l", linebreak="al", uccode=0x041C, unicodeslot=0x043C, }, [0x043D]={ adobename="encyrillic", category="ll", cjkwd="a", contextname="cyrillicn", description="CYRILLIC SMALL LETTER EN", direction="l", linebreak="al", uccode=0x041D, unicodeslot=0x043D, }, [0x043E]={ adobename="ocyrillic", category="ll", cjkwd="a", contextname="cyrillico", description="CYRILLIC SMALL LETTER O", direction="l", linebreak="al", uccode=0x041E, unicodeslot=0x043E, }, [0x043F]={ adobename="pecyrillic", category="ll", cjkwd="a", contextname="cyrillicp", description="CYRILLIC SMALL LETTER PE", direction="l", linebreak="al", uccode=0x041F, unicodeslot=0x043F, }, [0x0440]={ adobename="ercyrillic", category="ll", cjkwd="a", contextname="cyrillicr", description="CYRILLIC SMALL LETTER ER", direction="l", linebreak="al", uccode=0x0420, unicodeslot=0x0440, }, [0x0441]={ adobename="escyrillic", category="ll", cjkwd="a", contextname="cyrillics", description="CYRILLIC SMALL LETTER ES", direction="l", linebreak="al", uccode=0x0421, unicodeslot=0x0441, }, [0x0442]={ adobename="tecyrillic", category="ll", cjkwd="a", contextname="cyrillict", description="CYRILLIC SMALL LETTER TE", direction="l", linebreak="al", uccode=0x0422, unicodeslot=0x0442, }, [0x0443]={ adobename="ucyrillic", category="ll", cjkwd="a", contextname="cyrillicu", description="CYRILLIC SMALL LETTER U", direction="l", linebreak="al", uccode=0x0423, unicodeslot=0x0443, }, [0x0444]={ adobename="efcyrillic", category="ll", cjkwd="a", contextname="cyrillicf", description="CYRILLIC SMALL LETTER EF", direction="l", linebreak="al", uccode=0x0424, unicodeslot=0x0444, }, [0x0445]={ adobename="khacyrillic", category="ll", cjkwd="a", contextname="cyrillich", description="CYRILLIC SMALL LETTER HA", direction="l", linebreak="al", uccode=0x0425, unicodeslot=0x0445, }, [0x0446]={ adobename="tsecyrillic", category="ll", cjkwd="a", contextname="cyrillicc", description="CYRILLIC SMALL LETTER TSE", direction="l", linebreak="al", uccode=0x0426, unicodeslot=0x0446, }, [0x0447]={ adobename="checyrillic", category="ll", cjkwd="a", contextname="cyrillicch", description="CYRILLIC SMALL LETTER CHE", direction="l", linebreak="al", uccode=0x0427, unicodeslot=0x0447, }, [0x0448]={ adobename="shacyrillic", category="ll", cjkwd="a", contextname="cyrillicsh", description="CYRILLIC SMALL LETTER SHA", direction="l", linebreak="al", uccode=0x0428, unicodeslot=0x0448, }, [0x0449]={ adobename="shchacyrillic", category="ll", cjkwd="a", contextname="cyrillicshch", description="CYRILLIC SMALL LETTER SHCHA", direction="l", linebreak="al", uccode=0x0429, unicodeslot=0x0449, }, [0x044A]={ adobename="hardsigncyrillic", category="ll", cjkwd="a", contextname="cyrillichrdsn", description="CYRILLIC SMALL LETTER HARD SIGN", direction="l", linebreak="al", uccode=0x042A, unicodeslot=0x044A, }, [0x044B]={ adobename="yericyrillic", category="ll", cjkwd="a", contextname="cyrillicery", description="CYRILLIC SMALL LETTER YERU", direction="l", linebreak="al", uccode=0x042B, unicodeslot=0x044B, }, [0x044C]={ adobename="softsigncyrillic", category="ll", cjkwd="a", contextname="cyrillicsftsn", description="CYRILLIC SMALL LETTER SOFT SIGN", direction="l", linebreak="al", uccode=0x042C, unicodeslot=0x044C, }, [0x044D]={ adobename="ereversedcyrillic", category="ll", cjkwd="a", contextname="cyrillicerev", description="CYRILLIC SMALL LETTER E", direction="l", linebreak="al", uccode=0x042D, unicodeslot=0x044D, }, [0x044E]={ adobename="iucyrillic", category="ll", cjkwd="a", contextname="cyrillicyu", description="CYRILLIC SMALL LETTER YU", direction="l", linebreak="al", uccode=0x042E, unicodeslot=0x044E, }, [0x044F]={ adobename="iacyrillic", category="ll", cjkwd="a", contextname="cyrillicya", description="CYRILLIC SMALL LETTER YA", direction="l", linebreak="al", uccode=0x042F, unicodeslot=0x044F, }, [0x0450]={ category="ll", contextname="cyrillicegrave", description="CYRILLIC SMALL LETTER IE WITH GRAVE", direction="l", linebreak="al", shcode=0x0435, specials={ "char", 0x0435, 0x0300 }, uccode=0x0400, unicodeslot=0x0450, }, [0x0451]={ adobename="iocyrillic", category="ll", cjkwd="a", contextname="cyrillicyo", description="CYRILLIC SMALL LETTER IO", direction="l", linebreak="al", specials={ "char", 0x0435, 0x0308 }, uccode=0x0401, unicodeslot=0x0451, }, [0x0452]={ adobename="djecyrillic", category="ll", contextname="cyrillicdje", description="CYRILLIC SMALL LETTER DJE", direction="l", linebreak="al", uccode=0x0402, unicodeslot=0x0452, }, [0x0453]={ adobename="gjecyrillic", category="ll", contextname="cyrillicgje", description="CYRILLIC SMALL LETTER GJE", direction="l", linebreak="al", specials={ "char", 0x0433, 0x0301 }, uccode=0x0403, unicodeslot=0x0453, }, [0x0454]={ adobename="ecyrillic", category="ll", contextname="cyrillicie", description="CYRILLIC SMALL LETTER UKRAINIAN IE", direction="l", linebreak="al", uccode=0x0404, unicodeslot=0x0454, }, [0x0455]={ adobename="dzecyrillic", category="ll", contextname="cyrillicdze", description="CYRILLIC SMALL LETTER DZE", direction="l", linebreak="al", uccode=0x0405, unicodeslot=0x0455, }, [0x0456]={ adobename="icyrillic", category="ll", contextname="cyrillicii", description="CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I", direction="l", linebreak="al", uccode=0x0406, unicodeslot=0x0456, }, [0x0457]={ adobename="yicyrillic", category="ll", contextname="cyrillicyi", description="CYRILLIC SMALL LETTER YI", direction="l", linebreak="al", specials={ "char", 0x0456, 0x0308 }, uccode=0x0407, unicodeslot=0x0457, }, [0x0458]={ adobename="jecyrillic", category="ll", contextname="cyrillicje", description="CYRILLIC SMALL LETTER JE", direction="l", linebreak="al", uccode=0x0408, unicodeslot=0x0458, }, [0x0459]={ adobename="ljecyrillic", category="ll", contextname="cyrilliclje", description="CYRILLIC SMALL LETTER LJE", direction="l", linebreak="al", uccode=0x0409, unicodeslot=0x0459, }, [0x045A]={ adobename="njecyrillic", category="ll", contextname="cyrillicnje", description="CYRILLIC SMALL LETTER NJE", direction="l", linebreak="al", uccode=0x040A, unicodeslot=0x045A, }, [0x045B]={ adobename="tshecyrillic", category="ll", contextname="cyrillictshe", description="CYRILLIC SMALL LETTER TSHE", direction="l", linebreak="al", uccode=0x040B, unicodeslot=0x045B, }, [0x045C]={ adobename="kjecyrillic", category="ll", contextname="cyrillickje", description="CYRILLIC SMALL LETTER KJE", direction="l", linebreak="al", specials={ "char", 0x043A, 0x0301 }, uccode=0x040C, unicodeslot=0x045C, }, [0x045D]={ category="ll", contextname="cyrillicigrave", description="CYRILLIC SMALL LETTER I WITH GRAVE", direction="l", linebreak="al", shcode=0x0438, specials={ "char", 0x0438, 0x0300 }, uccode=0x040D, unicodeslot=0x045D, }, [0x045E]={ adobename="ushortcyrillic", category="ll", contextname="cyrillicushrt", description="CYRILLIC SMALL LETTER SHORT U", direction="l", linebreak="al", specials={ "char", 0x0443, 0x0306 }, uccode=0x040E, unicodeslot=0x045E, }, [0x045F]={ adobename="dzhecyrillic", category="ll", contextname="cyrillicdzhe", description="CYRILLIC SMALL LETTER DZHE", direction="l", linebreak="al", uccode=0x040F, unicodeslot=0x045F, }, [0x0460]={ adobename="Omegacyrillic", category="lu", contextname="cyrillicOMEGA", description="CYRILLIC CAPITAL LETTER OMEGA", direction="l", lccode=0x0461, linebreak="al", unicodeslot=0x0460, }, [0x0461]={ adobename="omegacyrillic", category="ll", contextname="cyrillicomega", description="CYRILLIC SMALL LETTER OMEGA", direction="l", linebreak="al", uccode=0x0460, unicodeslot=0x0461, }, [0x0462]={ adobename="afii10146", category="lu", contextname="cyrillicYAT", description="CYRILLIC CAPITAL LETTER YAT", direction="l", lccode=0x0463, linebreak="al", unicodeslot=0x0462, }, [0x0463]={ adobename="yatcyrillic", category="ll", contextname="cyrillicyat", description="CYRILLIC SMALL LETTER YAT", direction="l", linebreak="al", uccode=0x0462, unicodeslot=0x0463, }, [0x0464]={ adobename="Eiotifiedcyrillic", category="lu", contextname="cyrillicEiotified", description="CYRILLIC CAPITAL LETTER IOTIFIED E", direction="l", lccode=0x0465, linebreak="al", unicodeslot=0x0464, }, [0x0465]={ adobename="eiotifiedcyrillic", category="ll", contextname="cyrilliceiotified", description="CYRILLIC SMALL LETTER IOTIFIED E", direction="l", linebreak="al", uccode=0x0464, unicodeslot=0x0465, }, [0x0466]={ adobename="Yuslittlecyrillic", category="lu", contextname="cyrillicLITTLEYUS", description="CYRILLIC CAPITAL LETTER LITTLE YUS", direction="l", lccode=0x0467, linebreak="al", unicodeslot=0x0466, }, [0x0467]={ adobename="yuslittlecyrillic", category="ll", contextname="cyrilliclittleyus", description="CYRILLIC SMALL LETTER LITTLE YUS", direction="l", linebreak="al", uccode=0x0466, unicodeslot=0x0467, }, [0x0468]={ adobename="Yuslittleiotifiedcyrillic", category="lu", contextname="cyrillicLITTLEYUSiotified", description="CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS", direction="l", lccode=0x0469, linebreak="al", unicodeslot=0x0468, }, [0x0469]={ adobename="yuslittleiotifiedcyrillic", category="ll", contextname="cyrilliclittleyusiotified", description="CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS", direction="l", linebreak="al", uccode=0x0468, unicodeslot=0x0469, }, [0x046A]={ adobename="Yusbigcyrillic", category="lu", contextname="cyrillicBIGYUS", description="CYRILLIC CAPITAL LETTER BIG YUS", direction="l", lccode=0x046B, linebreak="al", unicodeslot=0x046A, }, [0x046B]={ adobename="yusbigcyrillic", category="ll", contextname="cyrillicbigyus", description="CYRILLIC SMALL LETTER BIG YUS", direction="l", linebreak="al", uccode=0x046A, unicodeslot=0x046B, }, [0x046C]={ adobename="Yusbigiotifiedcyrillic", category="lu", contextname="cyrillicBIGYUSiotified", description="CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS", direction="l", lccode=0x046D, linebreak="al", unicodeslot=0x046C, }, [0x046D]={ adobename="yusbigiotifiedcyrillic", category="ll", contextname="cyrillicbigyusiotified", description="CYRILLIC SMALL LETTER IOTIFIED BIG YUS", direction="l", linebreak="al", uccode=0x046C, unicodeslot=0x046D, }, [0x046E]={ adobename="Ksicyrillic", category="lu", contextname="cyrillicKSI", description="CYRILLIC CAPITAL LETTER KSI", direction="l", lccode=0x046F, linebreak="al", unicodeslot=0x046E, }, [0x046F]={ adobename="ksicyrillic", category="ll", contextname="cyrillicksi", description="CYRILLIC SMALL LETTER KSI", direction="l", linebreak="al", uccode=0x046E, unicodeslot=0x046F, }, [0x0470]={ adobename="Psicyrillic", category="lu", contextname="cyrillicPSI", description="CYRILLIC CAPITAL LETTER PSI", direction="l", lccode=0x0471, linebreak="al", unicodeslot=0x0470, }, [0x0471]={ adobename="psicyrillic", category="ll", contextname="cyrillicpsi", description="CYRILLIC SMALL LETTER PSI", direction="l", linebreak="al", uccode=0x0470, unicodeslot=0x0471, }, [0x0472]={ adobename="afii10147", category="lu", contextname="cyrillicFITA", description="CYRILLIC CAPITAL LETTER FITA", direction="l", lccode=0x0473, linebreak="al", unicodeslot=0x0472, }, [0x0473]={ adobename="fitacyrillic", category="ll", contextname="cyrillicfita", description="CYRILLIC SMALL LETTER FITA", direction="l", linebreak="al", uccode=0x0472, unicodeslot=0x0473, }, [0x0474]={ adobename="afii10148", category="lu", contextname="cyrillicIZHITSA", description="CYRILLIC CAPITAL LETTER IZHITSA", direction="l", lccode=0x0475, linebreak="al", unicodeslot=0x0474, }, [0x0475]={ adobename="izhitsacyrillic", category="ll", contextname="cyrillicizhitsa", description="CYRILLIC SMALL LETTER IZHITSA", direction="l", linebreak="al", uccode=0x0474, unicodeslot=0x0475, }, [0x0476]={ adobename="Izhitsadblgravecyrillic", category="lu", contextname="cyrillicIZHITSAdoublegrave", description="CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT", direction="l", lccode=0x0477, linebreak="al", shcode=0x0474, specials={ "char", 0x0474, 0x030F }, unicodeslot=0x0476, }, [0x0477]={ adobename="izhitsadblgravecyrillic", category="ll", contextname="cyrillicizhitsadoublegrave", description="CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT", direction="l", linebreak="al", shcode=0x0475, specials={ "char", 0x0475, 0x030F }, uccode=0x0476, unicodeslot=0x0477, }, [0x0478]={ adobename="Ukcyrillic", category="lu", contextname="cyrillicUK", description="CYRILLIC CAPITAL LETTER UK", direction="l", lccode=0x0479, linebreak="al", unicodeslot=0x0478, }, [0x0479]={ adobename="ukcyrillic", category="ll", contextname="cyrillicuk", description="CYRILLIC SMALL LETTER UK", direction="l", linebreak="al", uccode=0x0478, unicodeslot=0x0479, }, [0x047A]={ adobename="Omegaroundcyrillic", category="lu", contextname="cyrillicOMEGAround", description="CYRILLIC CAPITAL LETTER ROUND OMEGA", direction="l", lccode=0x047B, linebreak="al", unicodeslot=0x047A, }, [0x047B]={ adobename="omegaroundcyrillic", category="ll", contextname="cyrillicomegaround", description="CYRILLIC SMALL LETTER ROUND OMEGA", direction="l", linebreak="al", uccode=0x047A, unicodeslot=0x047B, }, [0x047C]={ adobename="Omegatitlocyrillic", category="lu", contextname="cyrillicOMEGAtitlo", description="CYRILLIC CAPITAL LETTER OMEGA WITH TITLO", direction="l", lccode=0x047D, linebreak="al", shcode=0x0460, unicodeslot=0x047C, }, [0x047D]={ adobename="omegatitlocyrillic", category="ll", contextname="cyrillicomegatitlo", description="CYRILLIC SMALL LETTER OMEGA WITH TITLO", direction="l", linebreak="al", shcode=0x0461, uccode=0x047C, unicodeslot=0x047D, }, [0x047E]={ adobename="Otcyrillic", category="lu", contextname="cyrillicOT", description="CYRILLIC CAPITAL LETTER OT", direction="l", lccode=0x047F, linebreak="al", unicodeslot=0x047E, }, [0x047F]={ adobename="otcyrillic", category="ll", contextname="cyrillicot", description="CYRILLIC SMALL LETTER OT", direction="l", linebreak="al", uccode=0x047E, unicodeslot=0x047F, }, [0x0480]={ adobename="Koppacyrillic", category="lu", contextname="cyrillicKOPPA", description="CYRILLIC CAPITAL LETTER KOPPA", direction="l", lccode=0x0481, linebreak="al", unicodeslot=0x0480, }, [0x0481]={ adobename="koppacyrillic", category="ll", contextname="cyrillickoppa", description="CYRILLIC SMALL LETTER KOPPA", direction="l", linebreak="al", uccode=0x0480, unicodeslot=0x0481, }, [0x0482]={ adobename="thousandcyrillic", category="so", description="CYRILLIC THOUSANDS SIGN", direction="l", linebreak="al", unicodeslot=0x0482, }, [0x0483]={ adobename="titlocyrilliccmb", category="mn", contextname="cyrillicTITLO", description="COMBINING CYRILLIC TITLO", direction="nsm", linebreak="cm", unicodeslot=0x0483, }, [0x0484]={ adobename="palatalizationcyrilliccmb", category="mn", contextname="cyrillicPALATALIZATION", description="COMBINING CYRILLIC PALATALIZATION", direction="nsm", linebreak="cm", unicodeslot=0x0484, }, [0x0485]={ adobename="dasiapneumatacyrilliccmb", category="mn", contextname="cyrillicDASIAPNEUMATA", description="COMBINING CYRILLIC DASIA PNEUMATA", direction="nsm", linebreak="cm", unicodeslot=0x0485, }, [0x0486]={ adobename="psilipneumatacyrilliccmb", category="mn", contextname="cyrillicPSILIPNEUMATA", description="COMBINING CYRILLIC PSILI PNEUMATA", direction="nsm", linebreak="cm", unicodeslot=0x0486, }, [0x0487]={ category="mn", description="COMBINING CYRILLIC POKRYTIE", direction="nsm", linebreak="cm", unicodeslot=0x0487, }, [0x0488]={ category="me", description="COMBINING CYRILLIC HUNDRED THOUSANDS SIGN", direction="nsm", linebreak="cm", unicodeslot=0x0488, }, [0x0489]={ category="me", description="COMBINING CYRILLIC MILLIONS SIGN", direction="nsm", linebreak="cm", unicodeslot=0x0489, }, [0x048A]={ category="lu", contextname="cyrillicISHRTtail", description="CYRILLIC CAPITAL LETTER SHORT I WITH TAIL", direction="l", lccode=0x048B, linebreak="al", unicodeslot=0x048A, }, [0x048B]={ category="ll", contextname="cyrillicishrttail", description="CYRILLIC SMALL LETTER SHORT I WITH TAIL", direction="l", linebreak="al", uccode=0x048A, unicodeslot=0x048B, }, [0x048C]={ category="lu", contextname="cyrillicSEMISOFT", description="CYRILLIC CAPITAL LETTER SEMISOFT SIGN", direction="l", lccode=0x048D, linebreak="al", unicodeslot=0x048C, }, [0x048D]={ category="ll", contextname="cyrillicsemisoft", description="CYRILLIC SMALL LETTER SEMISOFT SIGN", direction="l", linebreak="al", uccode=0x048C, unicodeslot=0x048D, }, [0x048E]={ category="lu", contextname="cyrillicERtick", description="CYRILLIC CAPITAL LETTER ER WITH TICK", direction="l", lccode=0x048F, linebreak="al", shcode=0x0420, unicodeslot=0x048E, }, [0x048F]={ category="ll", contextname="cyrillicertick", description="CYRILLIC SMALL LETTER ER WITH TICK", direction="l", linebreak="al", shcode=0x0440, uccode=0x048E, unicodeslot=0x048F, }, [0x0490]={ adobename="afii10050", category="lu", contextname="cyrillicGHEupturn", description="CYRILLIC CAPITAL LETTER GHE WITH UPTURN", direction="l", lccode=0x0491, linebreak="al", shcode=0x0413, unicodeslot=0x0490, }, [0x0491]={ adobename="gheupturncyrillic", category="ll", contextname="cyrillicgheupturn", description="CYRILLIC SMALL LETTER GHE WITH UPTURN", direction="l", linebreak="al", shcode=0x0433, uccode=0x0490, unicodeslot=0x0491, }, [0x0492]={ adobename="Ghestrokecyrillic", category="lu", contextname="cyrillicGHEstroke", description="CYRILLIC CAPITAL LETTER GHE WITH STROKE", direction="l", lccode=0x0493, linebreak="al", shcode=0x0413, unicodeslot=0x0492, }, [0x0493]={ adobename="ghestrokecyrillic", category="ll", contextname="cyrillicghestroke", description="CYRILLIC SMALL LETTER GHE WITH STROKE", direction="l", linebreak="al", shcode=0x0433, uccode=0x0492, unicodeslot=0x0493, }, [0x0494]={ adobename="Ghemiddlehookcyrillic", category="lu", contextname="cyrillicGHEmidhook", description="CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK", direction="l", lccode=0x0495, linebreak="al", shcode=0x0413, unicodeslot=0x0494, }, [0x0495]={ adobename="ghemiddlehookcyrillic", category="ll", contextname="cyrillicghemidhook", description="CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK", direction="l", linebreak="al", shcode=0x0433, uccode=0x0494, unicodeslot=0x0495, }, [0x0496]={ adobename="Zhedescendercyrillic", category="lu", contextname="cyrillicZHEdescender", description="CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER", direction="l", lccode=0x0497, linebreak="al", shcode=0x0416, unicodeslot=0x0496, }, [0x0497]={ adobename="zhedescendercyrillic", category="ll", contextname="cyrilliczhedescender", description="CYRILLIC SMALL LETTER ZHE WITH DESCENDER", direction="l", linebreak="al", shcode=0x0436, uccode=0x0496, unicodeslot=0x0497, }, [0x0498]={ adobename="Zedescendercyrillic", category="lu", contextname="cyrillicZDSC", description="CYRILLIC CAPITAL LETTER ZE WITH DESCENDER", direction="l", lccode=0x0499, linebreak="al", shcode=0x0417, unicodeslot=0x0498, }, [0x0499]={ adobename="zedescendercyrillic", category="ll", contextname="cyrilliczdsc", description="CYRILLIC SMALL LETTER ZE WITH DESCENDER", direction="l", linebreak="al", shcode=0x0437, uccode=0x0498, unicodeslot=0x0499, }, [0x049A]={ adobename="Kadescendercyrillic", category="lu", contextname="cyrillicKADC", description="CYRILLIC CAPITAL LETTER KA WITH DESCENDER", direction="l", lccode=0x049B, linebreak="al", shcode=0x041A, unicodeslot=0x049A, }, [0x049B]={ adobename="kadescendercyrillic", category="ll", contextname="cyrillickadc", description="CYRILLIC SMALL LETTER KA WITH DESCENDER", direction="l", linebreak="al", shcode=0x043A, uccode=0x049A, unicodeslot=0x049B, }, [0x049C]={ adobename="Kaverticalstrokecyrillic", category="lu", contextname="cyrillicKAvertstroke", description="CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE", direction="l", lccode=0x049D, linebreak="al", shcode=0x041A, unicodeslot=0x049C, }, [0x049D]={ adobename="kaverticalstrokecyrillic", category="ll", contextname="cyrillickavertstroke", description="CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE", direction="l", linebreak="al", shcode=0x043A, uccode=0x049C, unicodeslot=0x049D, }, [0x049E]={ adobename="Kastrokecyrillic", category="lu", contextname="cyrillicKAstroke", description="CYRILLIC CAPITAL LETTER KA WITH STROKE", direction="l", lccode=0x049F, linebreak="al", shcode=0x041A, unicodeslot=0x049E, }, [0x049F]={ adobename="kastrokecyrillic", category="ll", contextname="cyrillickastroke", description="CYRILLIC SMALL LETTER KA WITH STROKE", direction="l", linebreak="al", shcode=0x043A, uccode=0x049E, unicodeslot=0x049F, }, [0x04A0]={ adobename="Kabashkircyrillic", category="lu", contextname="cyrillicKAbashkir", description="CYRILLIC CAPITAL LETTER BASHKIR KA", direction="l", lccode=0x04A1, linebreak="al", unicodeslot=0x04A0, }, [0x04A1]={ adobename="kabashkircyrillic", category="ll", contextname="cyrillickabashkir", description="CYRILLIC SMALL LETTER BASHKIR KA", direction="l", linebreak="al", uccode=0x04A0, unicodeslot=0x04A1, }, [0x04A2]={ adobename="Endescendercyrillic", category="lu", contextname="cyrillicENDC", description="CYRILLIC CAPITAL LETTER EN WITH DESCENDER", direction="l", lccode=0x04A3, linebreak="al", shcode=0x041D, unicodeslot=0x04A2, }, [0x04A3]={ adobename="endescendercyrillic", category="ll", contextname="cyrillicendc", description="CYRILLIC SMALL LETTER EN WITH DESCENDER", direction="l", linebreak="al", shcode=0x043D, uccode=0x04A2, unicodeslot=0x04A3, }, [0x04A4]={ adobename="Enghecyrillic", category="lu", contextname="cyrillicENGHE", description="CYRILLIC CAPITAL LIGATURE EN GHE", direction="l", lccode=0x04A5, linebreak="al", unicodeslot=0x04A4, }, [0x04A5]={ adobename="enghecyrillic", category="ll", contextname="cyrillicenghe", description="CYRILLIC SMALL LIGATURE EN GHE", direction="l", linebreak="al", uccode=0x04A4, unicodeslot=0x04A5, }, [0x04A6]={ adobename="Pemiddlehookcyrillic", category="lu", contextname="cyrillicPEmidhook", description="CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK", direction="l", lccode=0x04A7, linebreak="al", shcode=0x041F, unicodeslot=0x04A6, }, [0x04A7]={ adobename="pemiddlehookcyrillic", category="ll", contextname="cyrillicpemidhook", description="CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK", direction="l", linebreak="al", shcode=0x043F, uccode=0x04A6, unicodeslot=0x04A7, }, [0x04A8]={ adobename="Haabkhasiancyrillic", category="lu", contextname="cyrillicHA", description="CYRILLIC CAPITAL LETTER ABKHASIAN HA", direction="l", lccode=0x04A9, linebreak="al", unicodeslot=0x04A8, }, [0x04A9]={ adobename="haabkhasiancyrillic", category="ll", contextname="cyrillicha", description="CYRILLIC SMALL LETTER ABKHASIAN HA", direction="l", linebreak="al", uccode=0x04A8, unicodeslot=0x04A9, }, [0x04AA]={ adobename="Esdescendercyrillic", category="lu", contextname="cyrillicSDSC", description="CYRILLIC CAPITAL LETTER ES WITH DESCENDER", direction="l", lccode=0x04AB, linebreak="al", shcode=0x0421, unicodeslot=0x04AA, }, [0x04AB]={ adobename="esdescendercyrillic", category="ll", contextname="cyrillicsdsc", description="CYRILLIC SMALL LETTER ES WITH DESCENDER", direction="l", linebreak="al", shcode=0x0441, uccode=0x04AA, unicodeslot=0x04AB, }, [0x04AC]={ adobename="Tedescendercyrillic", category="lu", contextname="cyrillicTEDC", description="CYRILLIC CAPITAL LETTER TE WITH DESCENDER", direction="l", lccode=0x04AD, linebreak="al", shcode=0x0422, unicodeslot=0x04AC, }, [0x04AD]={ adobename="tedescendercyrillic", category="ll", contextname="cyrillictedc", description="CYRILLIC SMALL LETTER TE WITH DESCENDER", direction="l", linebreak="al", shcode=0x0442, uccode=0x04AC, unicodeslot=0x04AD, }, [0x04AE]={ adobename="Ustraightcyrillic", category="lu", contextname="cyrillicYstr", description="CYRILLIC CAPITAL LETTER STRAIGHT U", direction="l", lccode=0x04AF, linebreak="al", unicodeslot=0x04AE, }, [0x04AF]={ adobename="ustraightcyrillic", category="ll", contextname="cyrillicystr", description="CYRILLIC SMALL LETTER STRAIGHT U", direction="l", linebreak="al", uccode=0x04AE, unicodeslot=0x04AF, }, [0x04B0]={ adobename="Ustraightstrokecyrillic", category="lu", contextname="cyrillicYstrstroke", description="CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE", direction="l", lccode=0x04B1, linebreak="al", unicodeslot=0x04B0, }, [0x04B1]={ adobename="ustraightstrokecyrillic", category="ll", contextname="cyrillicystrstroke", description="CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE", direction="l", linebreak="al", uccode=0x04B0, unicodeslot=0x04B1, }, [0x04B2]={ adobename="Hadescendercyrillic", category="lu", contextname="cyrillicHADC", description="CYRILLIC CAPITAL LETTER HA WITH DESCENDER", direction="l", lccode=0x04B3, linebreak="al", shcode=0x0425, unicodeslot=0x04B2, }, [0x04B3]={ adobename="hadescendercyrillic", category="ll", contextname="cyrillichadc", description="CYRILLIC SMALL LETTER HA WITH DESCENDER", direction="l", linebreak="al", shcode=0x0445, uccode=0x04B2, unicodeslot=0x04B3, }, [0x04B4]={ adobename="Tetsecyrillic", category="lu", contextname="cyrillicTETSE", description="CYRILLIC CAPITAL LIGATURE TE TSE", direction="l", lccode=0x04B5, linebreak="al", unicodeslot=0x04B4, }, [0x04B5]={ adobename="tetsecyrillic", category="ll", contextname="cyrillictetse", description="CYRILLIC SMALL LIGATURE TE TSE", direction="l", linebreak="al", uccode=0x04B4, unicodeslot=0x04B5, }, [0x04B6]={ adobename="Chedescendercyrillic", category="lu", contextname="cyrillicCHEDC", description="CYRILLIC CAPITAL LETTER CHE WITH DESCENDER", direction="l", lccode=0x04B7, linebreak="al", shcode=0x0427, unicodeslot=0x04B6, }, [0x04B7]={ adobename="chedescendercyrillic", category="ll", contextname="cyrillicchedc", description="CYRILLIC SMALL LETTER CHE WITH DESCENDER", direction="l", linebreak="al", shcode=0x0447, uccode=0x04B6, unicodeslot=0x04B7, }, [0x04B8]={ adobename="Cheverticalstrokecyrillic", category="lu", contextname="cyrillicCHEvertstroke", description="CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE", direction="l", lccode=0x04B9, linebreak="al", shcode=0x0427, unicodeslot=0x04B8, }, [0x04B9]={ adobename="cheverticalstrokecyrillic", category="ll", contextname="cyrillicchevertstroke", description="CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE", direction="l", linebreak="al", shcode=0x0447, uccode=0x04B8, unicodeslot=0x04B9, }, [0x04BA]={ adobename="Shhacyrillic", category="lu", contextname="cyrillicSHHA", description="CYRILLIC CAPITAL LETTER SHHA", direction="l", lccode=0x04BB, linebreak="al", unicodeslot=0x04BA, }, [0x04BB]={ adobename="shhacyrillic", category="ll", contextname="cyrillicshha", description="CYRILLIC SMALL LETTER SHHA", direction="l", linebreak="al", uccode=0x04BA, unicodeslot=0x04BB, }, [0x04BC]={ adobename="Cheabkhasiancyrillic", category="lu", contextname="cyrillicCHEabkhasian", description="CYRILLIC CAPITAL LETTER ABKHASIAN CHE", direction="l", lccode=0x04BD, linebreak="al", unicodeslot=0x04BC, }, [0x04BD]={ adobename="cheabkhasiancyrillic", category="ll", contextname="cyrilliccheabkhasian", description="CYRILLIC SMALL LETTER ABKHASIAN CHE", direction="l", linebreak="al", uccode=0x04BC, unicodeslot=0x04BD, }, [0x04BE]={ adobename="Chedescenderabkhasiancyrillic", category="lu", contextname="cyrillicCHEDCabkhasian", description="CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER", direction="l", lccode=0x04BF, linebreak="al", unicodeslot=0x04BE, }, [0x04BF]={ adobename="chedescenderabkhasiancyrillic", category="ll", contextname="cyrillicchedcabkhasian", description="CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER", direction="l", linebreak="al", uccode=0x04BE, unicodeslot=0x04BF, }, [0x04C0]={ adobename="palochkacyrillic", category="lu", contextname="cyrillicPALOCHKA", description="CYRILLIC LETTER PALOCHKA", direction="l", lccode=0x04CF, linebreak="al", unicodeslot=0x04C0, }, [0x04C1]={ adobename="Zhebrevecyrillic", category="lu", contextname="cyrillicZHEbreve", description="CYRILLIC CAPITAL LETTER ZHE WITH BREVE", direction="l", lccode=0x04C2, linebreak="al", shcode=0x0416, specials={ "char", 0x0416, 0x0306 }, unicodeslot=0x04C1, }, [0x04C2]={ adobename="zhebrevecyrillic", category="ll", contextname="cyrilliczhebreve", description="CYRILLIC SMALL LETTER ZHE WITH BREVE", direction="l", linebreak="al", shcode=0x0436, specials={ "char", 0x0436, 0x0306 }, uccode=0x04C1, unicodeslot=0x04C2, }, [0x04C3]={ adobename="Kahookcyrillic", category="lu", contextname="cyrillicKAhook", description="CYRILLIC CAPITAL LETTER KA WITH HOOK", direction="l", lccode=0x04C4, linebreak="al", shcode=0x041A, unicodeslot=0x04C3, }, [0x04C4]={ adobename="kahookcyrillic", category="ll", contextname="cyrillickahook", description="CYRILLIC SMALL LETTER KA WITH HOOK", direction="l", linebreak="al", shcode=0x043A, uccode=0x04C3, unicodeslot=0x04C4, }, [0x04C5]={ category="lu", contextname="cyrillicELtail", description="CYRILLIC CAPITAL LETTER EL WITH TAIL", direction="l", lccode=0x04C6, linebreak="al", shcode=0x041B, unicodeslot=0x04C5, }, [0x04C6]={ category="ll", contextname="cyrilliceltail", description="CYRILLIC SMALL LETTER EL WITH TAIL", direction="l", linebreak="al", shcode=0x043B, uccode=0x04C5, unicodeslot=0x04C6, }, [0x04C7]={ adobename="Enhookcyrillic", category="lu", contextname="cyrillicENhook", description="CYRILLIC CAPITAL LETTER EN WITH HOOK", direction="l", lccode=0x04C8, linebreak="al", shcode=0x041D, unicodeslot=0x04C7, }, [0x04C8]={ adobename="enhookcyrillic", category="ll", contextname="cyrillicenhook", description="CYRILLIC SMALL LETTER EN WITH HOOK", direction="l", linebreak="al", shcode=0x043D, uccode=0x04C7, unicodeslot=0x04C8, }, [0x04C9]={ category="lu", contextname="cyrillicENtail", description="CYRILLIC CAPITAL LETTER EN WITH TAIL", direction="l", lccode=0x04CA, linebreak="al", shcode=0x041D, unicodeslot=0x04C9, }, [0x04CA]={ category="ll", contextname="cyrillicentail", description="CYRILLIC SMALL LETTER EN WITH TAIL", direction="l", linebreak="al", shcode=0x043D, uccode=0x04C9, unicodeslot=0x04CA, }, [0x04CB]={ adobename="Chekhakassiancyrillic", category="lu", contextname="cyrillicCHEkhakassian", description="CYRILLIC CAPITAL LETTER KHAKASSIAN CHE", direction="l", lccode=0x04CC, linebreak="al", unicodeslot=0x04CB, }, [0x04CC]={ adobename="chekhakassiancyrillic", category="ll", contextname="cyrillicchekhakassian", description="CYRILLIC SMALL LETTER KHAKASSIAN CHE", direction="l", linebreak="al", uccode=0x04CB, unicodeslot=0x04CC, }, [0x04CD]={ category="lu", contextname="cyrillicEMtail", description="CYRILLIC CAPITAL LETTER EM WITH TAIL", direction="l", lccode=0x04CE, linebreak="al", shcode=0x041C, unicodeslot=0x04CD, }, [0x04CE]={ category="ll", contextname="cyrillicemtail", description="CYRILLIC SMALL LETTER EM WITH TAIL", direction="l", linebreak="al", shcode=0x043C, uccode=0x04CD, unicodeslot=0x04CE, }, [0x04CF]={ category="ll", description="CYRILLIC SMALL LETTER PALOCHKA", direction="l", linebreak="al", uccode=0x04C0, unicodeslot=0x04CF, }, [0x04D0]={ adobename="Abrevecyrillic", category="lu", contextname="cyrillicAbreve", description="CYRILLIC CAPITAL LETTER A WITH BREVE", direction="l", lccode=0x04D1, linebreak="al", shcode=0x0410, specials={ "char", 0x0410, 0x0306 }, unicodeslot=0x04D0, }, [0x04D1]={ adobename="abrevecyrillic", category="ll", contextname="cyrillicabreve", description="CYRILLIC SMALL LETTER A WITH BREVE", direction="l", linebreak="al", shcode=0x0430, specials={ "char", 0x0430, 0x0306 }, uccode=0x04D0, unicodeslot=0x04D1, }, [0x04D2]={ adobename="Adieresiscyrillic", category="lu", contextname="cyrillicAdiaeresis", description="CYRILLIC CAPITAL LETTER A WITH DIAERESIS", direction="l", lccode=0x04D3, linebreak="al", shcode=0x0410, specials={ "char", 0x0410, 0x0308 }, unicodeslot=0x04D2, }, [0x04D3]={ adobename="adieresiscyrillic", category="ll", contextname="cyrillicadiaeresis", description="CYRILLIC SMALL LETTER A WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0430, specials={ "char", 0x0430, 0x0308 }, uccode=0x04D2, unicodeslot=0x04D3, }, [0x04D4]={ adobename="Aiecyrillic", category="lu", contextname="cyrillicAE", description="CYRILLIC CAPITAL LIGATURE A IE", direction="l", lccode=0x04D5, linebreak="al", unicodeslot=0x04D4, }, [0x04D5]={ adobename="aiecyrillic", category="ll", contextname="cyrillicae", description="CYRILLIC SMALL LIGATURE A IE", direction="l", linebreak="al", uccode=0x04D4, unicodeslot=0x04D5, }, [0x04D6]={ adobename="Iebrevecyrillic", category="lu", contextname="cyrillicEbreve", description="CYRILLIC CAPITAL LETTER IE WITH BREVE", direction="l", lccode=0x04D7, linebreak="al", shcode=0x0415, specials={ "char", 0x0415, 0x0306 }, unicodeslot=0x04D6, }, [0x04D7]={ adobename="iebrevecyrillic", category="ll", contextname="cyrillicebreve", description="CYRILLIC SMALL LETTER IE WITH BREVE", direction="l", linebreak="al", shcode=0x0435, specials={ "char", 0x0435, 0x0306 }, uccode=0x04D6, unicodeslot=0x04D7, }, [0x04D8]={ adobename="Schwacyrillic", category="lu", contextname="cyrillicSCHWA", description="CYRILLIC CAPITAL LETTER SCHWA", direction="l", lccode=0x04D9, linebreak="al", unicodeslot=0x04D8, }, [0x04D9]={ adobename="schwacyrillic", category="ll", contextname="cyrillicschwa", description="CYRILLIC SMALL LETTER SCHWA", direction="l", linebreak="al", uccode=0x04D8, unicodeslot=0x04D9, }, [0x04DA]={ adobename="Schwadieresiscyrillic", category="lu", contextname="cyrillicSCHWAdiaeresis", description="CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS", direction="l", lccode=0x04DB, linebreak="al", shcode=0x04D8, specials={ "char", 0x04D8, 0x0308 }, unicodeslot=0x04DA, }, [0x04DB]={ adobename="schwadieresiscyrillic", category="ll", contextname="cyrillicschwadiaeresis", description="CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS", direction="l", linebreak="al", shcode=0x04D9, specials={ "char", 0x04D9, 0x0308 }, uccode=0x04DA, unicodeslot=0x04DB, }, [0x04DC]={ adobename="Zhedieresiscyrillic", category="lu", contextname="cyrillicZHEdiaeresis", description="CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS", direction="l", lccode=0x04DD, linebreak="al", shcode=0x0416, specials={ "char", 0x0416, 0x0308 }, unicodeslot=0x04DC, }, [0x04DD]={ adobename="zhedieresiscyrillic", category="ll", contextname="cyrilliczhediaeresis", description="CYRILLIC SMALL LETTER ZHE WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0436, specials={ "char", 0x0436, 0x0308 }, uccode=0x04DC, unicodeslot=0x04DD, }, [0x04DE]={ adobename="Zedieresiscyrillic", category="lu", contextname="cyrillicZEdiaeresis", description="CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS", direction="l", lccode=0x04DF, linebreak="al", shcode=0x0417, specials={ "char", 0x0417, 0x0308 }, unicodeslot=0x04DE, }, [0x04DF]={ adobename="zedieresiscyrillic", category="ll", contextname="cyrilliczediaeresis", description="CYRILLIC SMALL LETTER ZE WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0437, specials={ "char", 0x0437, 0x0308 }, uccode=0x04DE, unicodeslot=0x04DF, }, [0x04E0]={ adobename="Dzeabkhasiancyrillic", category="lu", contextname="cyrillicDZEabkhasian", description="CYRILLIC CAPITAL LETTER ABKHASIAN DZE", direction="l", lccode=0x04E1, linebreak="al", unicodeslot=0x04E0, }, [0x04E1]={ adobename="dzeabkhasiancyrillic", category="ll", contextname="cyrillicdzeabkhasian", description="CYRILLIC SMALL LETTER ABKHASIAN DZE", direction="l", linebreak="al", uccode=0x04E0, unicodeslot=0x04E1, }, [0x04E2]={ adobename="Imacroncyrillic", category="lu", contextname="cyrillicImacron", description="CYRILLIC CAPITAL LETTER I WITH MACRON", direction="l", lccode=0x04E3, linebreak="al", shcode=0x0418, specials={ "char", 0x0418, 0x0304 }, unicodeslot=0x04E2, }, [0x04E3]={ adobename="imacroncyrillic", category="ll", contextname="cyrillicimacron", description="CYRILLIC SMALL LETTER I WITH MACRON", direction="l", linebreak="al", shcode=0x0438, specials={ "char", 0x0438, 0x0304 }, uccode=0x04E2, unicodeslot=0x04E3, }, [0x04E4]={ adobename="Idieresiscyrillic", category="lu", contextname="cyrillicIdiaeresis", description="CYRILLIC CAPITAL LETTER I WITH DIAERESIS", direction="l", lccode=0x04E5, linebreak="al", shcode=0x0418, specials={ "char", 0x0418, 0x0308 }, unicodeslot=0x04E4, }, [0x04E5]={ adobename="idieresiscyrillic", category="ll", contextname="cyrillicidiaeresis", description="CYRILLIC SMALL LETTER I WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0438, specials={ "char", 0x0438, 0x0308 }, uccode=0x04E4, unicodeslot=0x04E5, }, [0x04E6]={ adobename="Odieresiscyrillic", category="lu", contextname="cyrillicOdiaeresis", description="CYRILLIC CAPITAL LETTER O WITH DIAERESIS", direction="l", lccode=0x04E7, linebreak="al", shcode=0x041E, specials={ "char", 0x041E, 0x0308 }, unicodeslot=0x04E6, }, [0x04E7]={ adobename="odieresiscyrillic", category="ll", contextname="cyrillicodiaeresis", description="CYRILLIC SMALL LETTER O WITH DIAERESIS", direction="l", linebreak="al", shcode=0x043E, specials={ "char", 0x043E, 0x0308 }, uccode=0x04E6, unicodeslot=0x04E7, }, [0x04E8]={ adobename="Obarredcyrillic", category="lu", contextname="cyrillicObarred", description="CYRILLIC CAPITAL LETTER BARRED O", direction="l", lccode=0x04E9, linebreak="al", unicodeslot=0x04E8, }, [0x04E9]={ adobename="obarredcyrillic", category="ll", contextname="cyrillicobarred", description="CYRILLIC SMALL LETTER BARRED O", direction="l", linebreak="al", uccode=0x04E8, unicodeslot=0x04E9, }, [0x04EA]={ adobename="Obarreddieresiscyrillic", category="lu", contextname="cyrillicObarreddiaeresis", description="CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS", direction="l", lccode=0x04EB, linebreak="al", specials={ "char", 0x04E8, 0x0308 }, unicodeslot=0x04EA, }, [0x04EB]={ adobename="obarreddieresiscyrillic", category="ll", contextname="cyrillicobarreddiaeresis", description="CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS", direction="l", linebreak="al", specials={ "char", 0x04E9, 0x0308 }, uccode=0x04EA, unicodeslot=0x04EB, }, [0x04EC]={ category="lu", contextname="cyrillicEdiaeresis", description="CYRILLIC CAPITAL LETTER E WITH DIAERESIS", direction="l", lccode=0x04ED, linebreak="al", shcode=0x042D, specials={ "char", 0x042D, 0x0308 }, unicodeslot=0x04EC, }, [0x04ED]={ category="ll", contextname="cyrillicediaeresis", description="CYRILLIC SMALL LETTER E WITH DIAERESIS", direction="l", linebreak="al", shcode=0x044D, specials={ "char", 0x044D, 0x0308 }, uccode=0x04EC, unicodeslot=0x04ED, }, [0x04EE]={ adobename="Umacroncyrillic", category="lu", contextname="cyrillicUmacron", description="CYRILLIC CAPITAL LETTER U WITH MACRON", direction="l", lccode=0x04EF, linebreak="al", shcode=0x0423, specials={ "char", 0x0423, 0x0304 }, unicodeslot=0x04EE, }, [0x04EF]={ adobename="umacroncyrillic", category="ll", contextname="cyrillicumacron", description="CYRILLIC SMALL LETTER U WITH MACRON", direction="l", linebreak="al", shcode=0x0443, specials={ "char", 0x0443, 0x0304 }, uccode=0x04EE, unicodeslot=0x04EF, }, [0x04F0]={ adobename="Udieresiscyrillic", category="lu", contextname="cyrillicUdiaeresis", description="CYRILLIC CAPITAL LETTER U WITH DIAERESIS", direction="l", lccode=0x04F1, linebreak="al", shcode=0x0423, specials={ "char", 0x0423, 0x0308 }, unicodeslot=0x04F0, }, [0x04F1]={ adobename="udieresiscyrillic", category="ll", contextname="cyrillicudiaeresis", description="CYRILLIC SMALL LETTER U WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0443, specials={ "char", 0x0443, 0x0308 }, uccode=0x04F0, unicodeslot=0x04F1, }, [0x04F2]={ adobename="Uhungarumlautcyrillic", category="lu", contextname="cyrillicUdoubleacute", description="CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE", direction="l", lccode=0x04F3, linebreak="al", shcode=0x0423, specials={ "char", 0x0423, 0x030B }, unicodeslot=0x04F2, }, [0x04F3]={ adobename="uhungarumlautcyrillic", category="ll", contextname="cyrillicudoubleacute", description="CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE", direction="l", linebreak="al", shcode=0x0443, specials={ "char", 0x0443, 0x030B }, uccode=0x04F2, unicodeslot=0x04F3, }, [0x04F4]={ adobename="Chedieresiscyrillic", category="lu", contextname="cyrillicCHEdiaeresis", description="CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS", direction="l", lccode=0x04F5, linebreak="al", shcode=0x0427, specials={ "char", 0x0427, 0x0308 }, unicodeslot=0x04F4, }, [0x04F5]={ adobename="chedieresiscyrillic", category="ll", contextname="cyrillicchediaeresis", description="CYRILLIC SMALL LETTER CHE WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0447, specials={ "char", 0x0447, 0x0308 }, uccode=0x04F4, unicodeslot=0x04F5, }, [0x04F6]={ category="lu", description="CYRILLIC CAPITAL LETTER GHE WITH DESCENDER", direction="l", lccode=0x04F7, linebreak="al", shcode=0x0413, unicodeslot=0x04F6, }, [0x04F7]={ category="ll", description="CYRILLIC SMALL LETTER GHE WITH DESCENDER", direction="l", linebreak="al", shcode=0x0433, uccode=0x04F6, unicodeslot=0x04F7, }, [0x04F8]={ adobename="Yerudieresiscyrillic", category="lu", contextname="cyrillicYERUdiaeresis", description="CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS", direction="l", lccode=0x04F9, linebreak="al", shcode=0x042B, specials={ "char", 0x042B, 0x0308 }, unicodeslot=0x04F8, }, [0x04F9]={ adobename="yerudieresiscyrillic", category="ll", contextname="cyrillicyerudiaeresis", description="CYRILLIC SMALL LETTER YERU WITH DIAERESIS", direction="l", linebreak="al", shcode=0x044B, specials={ "char", 0x044B, 0x0308 }, uccode=0x04F8, unicodeslot=0x04F9, }, [0x04FA]={ category="lu", description="CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK", direction="l", lccode=0x04FB, linebreak="al", shcode=0x0413, unicodeslot=0x04FA, }, [0x04FB]={ category="ll", description="CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK", direction="l", linebreak="al", shcode=0x0433, uccode=0x04FA, unicodeslot=0x04FB, }, [0x04FC]={ category="lu", description="CYRILLIC CAPITAL LETTER HA WITH HOOK", direction="l", lccode=0x04FD, linebreak="al", shcode=0x0425, unicodeslot=0x04FC, }, [0x04FD]={ category="ll", description="CYRILLIC SMALL LETTER HA WITH HOOK", direction="l", linebreak="al", shcode=0x0445, uccode=0x04FC, unicodeslot=0x04FD, }, [0x04FE]={ category="lu", description="CYRILLIC CAPITAL LETTER HA WITH STROKE", direction="l", lccode=0x04FF, linebreak="al", shcode=0x0425, unicodeslot=0x04FE, }, [0x04FF]={ category="ll", description="CYRILLIC SMALL LETTER HA WITH STROKE", direction="l", linebreak="al", shcode=0x0445, uccode=0x04FE, unicodeslot=0x04FF, }, [0x0500]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI DE", direction="l", lccode=0x0501, linebreak="al", unicodeslot=0x0500, }, [0x0501]={ category="ll", description="CYRILLIC SMALL LETTER KOMI DE", direction="l", linebreak="al", uccode=0x0500, unicodeslot=0x0501, }, [0x0502]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI DJE", direction="l", lccode=0x0503, linebreak="al", unicodeslot=0x0502, }, [0x0503]={ category="ll", description="CYRILLIC SMALL LETTER KOMI DJE", direction="l", linebreak="al", uccode=0x0502, unicodeslot=0x0503, }, [0x0504]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI ZJE", direction="l", lccode=0x0505, linebreak="al", unicodeslot=0x0504, }, [0x0505]={ category="ll", description="CYRILLIC SMALL LETTER KOMI ZJE", direction="l", linebreak="al", uccode=0x0504, unicodeslot=0x0505, }, [0x0506]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI DZJE", direction="l", lccode=0x0507, linebreak="al", unicodeslot=0x0506, }, [0x0507]={ category="ll", description="CYRILLIC SMALL LETTER KOMI DZJE", direction="l", linebreak="al", uccode=0x0506, unicodeslot=0x0507, }, [0x0508]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI LJE", direction="l", lccode=0x0509, linebreak="al", unicodeslot=0x0508, }, [0x0509]={ category="ll", description="CYRILLIC SMALL LETTER KOMI LJE", direction="l", linebreak="al", uccode=0x0508, unicodeslot=0x0509, }, [0x050A]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI NJE", direction="l", lccode=0x050B, linebreak="al", unicodeslot=0x050A, }, [0x050B]={ category="ll", description="CYRILLIC SMALL LETTER KOMI NJE", direction="l", linebreak="al", uccode=0x050A, unicodeslot=0x050B, }, [0x050C]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI SJE", direction="l", lccode=0x050D, linebreak="al", unicodeslot=0x050C, }, [0x050D]={ category="ll", description="CYRILLIC SMALL LETTER KOMI SJE", direction="l", linebreak="al", uccode=0x050C, unicodeslot=0x050D, }, [0x050E]={ category="lu", description="CYRILLIC CAPITAL LETTER KOMI TJE", direction="l", lccode=0x050F, linebreak="al", unicodeslot=0x050E, }, [0x050F]={ category="ll", description="CYRILLIC SMALL LETTER KOMI TJE", direction="l", linebreak="al", uccode=0x050E, unicodeslot=0x050F, }, [0x0510]={ category="lu", description="CYRILLIC CAPITAL LETTER REVERSED ZE", direction="l", lccode=0x0511, linebreak="al", unicodeslot=0x0510, }, [0x0511]={ category="ll", description="CYRILLIC SMALL LETTER REVERSED ZE", direction="l", linebreak="al", uccode=0x0510, unicodeslot=0x0511, }, [0x0512]={ category="lu", description="CYRILLIC CAPITAL LETTER EL WITH HOOK", direction="l", lccode=0x0513, linebreak="al", shcode=0x041B, unicodeslot=0x0512, }, [0x0513]={ category="ll", description="CYRILLIC SMALL LETTER EL WITH HOOK", direction="l", linebreak="al", shcode=0x043B, uccode=0x0512, unicodeslot=0x0513, }, [0x0514]={ category="lu", description="CYRILLIC CAPITAL LETTER LHA", direction="l", linebreak="al", unicodeslot=0x0514, }, [0x0515]={ category="ll", description="CYRILLIC SMALL LETTER LHA", direction="l", linebreak="al", unicodeslot=0x0515, }, [0x0516]={ category="lu", description="CYRILLIC CAPITAL LETTER RHA", direction="l", linebreak="al", unicodeslot=0x0516, }, [0x0517]={ category="ll", description="CYRILLIC SMALL LETTER RHA", direction="l", linebreak="al", unicodeslot=0x0517, }, [0x0518]={ category="lu", description="CYRILLIC CAPITAL LETTER YAE", direction="l", linebreak="al", unicodeslot=0x0518, }, [0x0519]={ category="ll", description="CYRILLIC SMALL LETTER YAE", direction="l", linebreak="al", unicodeslot=0x0519, }, [0x051A]={ category="lu", description="CYRILLIC CAPITAL LETTER QA", direction="l", linebreak="al", unicodeslot=0x051A, }, [0x051B]={ category="ll", description="CYRILLIC SMALL LETTER QA", direction="l", linebreak="al", unicodeslot=0x051B, }, [0x051C]={ category="lu", description="CYRILLIC CAPITAL LETTER WE", direction="l", linebreak="al", unicodeslot=0x051C, }, [0x051D]={ category="ll", description="CYRILLIC SMALL LETTER WE", direction="l", linebreak="al", unicodeslot=0x051D, }, [0x051E]={ category="lu", description="CYRILLIC CAPITAL LETTER ALEUT KA", direction="l", linebreak="al", unicodeslot=0x051E, }, [0x051F]={ category="ll", description="CYRILLIC SMALL LETTER ALEUT KA", direction="l", linebreak="al", unicodeslot=0x051F, }, [0x0520]={ category="lu", description="CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK", direction="l", linebreak="al", unicodeslot=0x0520, }, [0x0521]={ category="ll", description="CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK", direction="l", linebreak="al", unicodeslot=0x0521, }, [0x0522]={ category="lu", description="CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK", direction="l", linebreak="al", unicodeslot=0x0522, }, [0x0523]={ category="ll", description="CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK", direction="l", linebreak="al", unicodeslot=0x0523, }, [0x0524]={ category="lu", description="CYRILLIC CAPITAL LETTER PE WITH DESCENDER", direction="l", linebreak="al", unicodeslot=0x0524, }, [0x0525]={ category="ll", description="CYRILLIC SMALL LETTER PE WITH DESCENDER", direction="l", linebreak="al", unicodeslot=0x0525, }, [0x0526]={ category="lu", description="CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER", direction="l", linebreak="al", unicodeslot=0x0526, }, [0x0527]={ category="ll", description="CYRILLIC SMALL LETTER SHHA WITH DESCENDER", direction="l", linebreak="al", unicodeslot=0x0527, }, [0x0531]={ adobename="Aybarmenian", category="lu", description="ARMENIAN CAPITAL LETTER AYB", direction="l", lccode=0x0561, linebreak="al", unicodeslot=0x0531, }, [0x0532]={ adobename="Benarmenian", category="lu", description="ARMENIAN CAPITAL LETTER BEN", direction="l", lccode=0x0562, linebreak="al", unicodeslot=0x0532, }, [0x0533]={ adobename="Gimarmenian", category="lu", description="ARMENIAN CAPITAL LETTER GIM", direction="l", lccode=0x0563, linebreak="al", unicodeslot=0x0533, }, [0x0534]={ adobename="Daarmenian", category="lu", description="ARMENIAN CAPITAL LETTER DA", direction="l", lccode=0x0564, linebreak="al", unicodeslot=0x0534, }, [0x0535]={ adobename="Echarmenian", category="lu", description="ARMENIAN CAPITAL LETTER ECH", direction="l", lccode=0x0565, linebreak="al", unicodeslot=0x0535, }, [0x0536]={ adobename="Zaarmenian", category="lu", description="ARMENIAN CAPITAL LETTER ZA", direction="l", lccode=0x0566, linebreak="al", unicodeslot=0x0536, }, [0x0537]={ adobename="Eharmenian", category="lu", description="ARMENIAN CAPITAL LETTER EH", direction="l", lccode=0x0567, linebreak="al", unicodeslot=0x0537, }, [0x0538]={ adobename="Etarmenian", category="lu", description="ARMENIAN CAPITAL LETTER ET", direction="l", lccode=0x0568, linebreak="al", unicodeslot=0x0538, }, [0x0539]={ adobename="Toarmenian", category="lu", description="ARMENIAN CAPITAL LETTER TO", direction="l", lccode=0x0569, linebreak="al", unicodeslot=0x0539, }, [0x053A]={ adobename="Zhearmenian", category="lu", description="ARMENIAN CAPITAL LETTER ZHE", direction="l", lccode=0x056A, linebreak="al", unicodeslot=0x053A, }, [0x053B]={ adobename="Iniarmenian", category="lu", description="ARMENIAN CAPITAL LETTER INI", direction="l", lccode=0x056B, linebreak="al", unicodeslot=0x053B, }, [0x053C]={ adobename="Liwnarmenian", category="lu", description="ARMENIAN CAPITAL LETTER LIWN", direction="l", lccode=0x056C, linebreak="al", unicodeslot=0x053C, }, [0x053D]={ adobename="Xeharmenian", category="lu", description="ARMENIAN CAPITAL LETTER XEH", direction="l", lccode=0x056D, linebreak="al", unicodeslot=0x053D, }, [0x053E]={ adobename="Caarmenian", category="lu", description="ARMENIAN CAPITAL LETTER CA", direction="l", lccode=0x056E, linebreak="al", unicodeslot=0x053E, }, [0x053F]={ adobename="Kenarmenian", category="lu", description="ARMENIAN CAPITAL LETTER KEN", direction="l", lccode=0x056F, linebreak="al", unicodeslot=0x053F, }, [0x0540]={ adobename="Hoarmenian", category="lu", description="ARMENIAN CAPITAL LETTER HO", direction="l", lccode=0x0570, linebreak="al", unicodeslot=0x0540, }, [0x0541]={ adobename="Jaarmenian", category="lu", description="ARMENIAN CAPITAL LETTER JA", direction="l", lccode=0x0571, linebreak="al", unicodeslot=0x0541, }, [0x0542]={ adobename="Ghadarmenian", category="lu", description="ARMENIAN CAPITAL LETTER GHAD", direction="l", lccode=0x0572, linebreak="al", unicodeslot=0x0542, }, [0x0543]={ adobename="Cheharmenian", category="lu", description="ARMENIAN CAPITAL LETTER CHEH", direction="l", lccode=0x0573, linebreak="al", unicodeslot=0x0543, }, [0x0544]={ adobename="Menarmenian", category="lu", description="ARMENIAN CAPITAL LETTER MEN", direction="l", lccode=0x0574, linebreak="al", unicodeslot=0x0544, }, [0x0545]={ adobename="Yiarmenian", category="lu", description="ARMENIAN CAPITAL LETTER YI", direction="l", lccode=0x0575, linebreak="al", unicodeslot=0x0545, }, [0x0546]={ adobename="Nowarmenian", category="lu", description="ARMENIAN CAPITAL LETTER NOW", direction="l", lccode=0x0576, linebreak="al", unicodeslot=0x0546, }, [0x0547]={ adobename="Shaarmenian", category="lu", description="ARMENIAN CAPITAL LETTER SHA", direction="l", lccode=0x0577, linebreak="al", unicodeslot=0x0547, }, [0x0548]={ adobename="Voarmenian", category="lu", description="ARMENIAN CAPITAL LETTER VO", direction="l", lccode=0x0578, linebreak="al", unicodeslot=0x0548, }, [0x0549]={ adobename="Chaarmenian", category="lu", description="ARMENIAN CAPITAL LETTER CHA", direction="l", lccode=0x0579, linebreak="al", unicodeslot=0x0549, }, [0x054A]={ adobename="Peharmenian", category="lu", description="ARMENIAN CAPITAL LETTER PEH", direction="l", lccode=0x057A, linebreak="al", unicodeslot=0x054A, }, [0x054B]={ adobename="Jheharmenian", category="lu", description="ARMENIAN CAPITAL LETTER JHEH", direction="l", lccode=0x057B, linebreak="al", unicodeslot=0x054B, }, [0x054C]={ adobename="Raarmenian", category="lu", description="ARMENIAN CAPITAL LETTER RA", direction="l", lccode=0x057C, linebreak="al", unicodeslot=0x054C, }, [0x054D]={ adobename="Seharmenian", category="lu", description="ARMENIAN CAPITAL LETTER SEH", direction="l", lccode=0x057D, linebreak="al", unicodeslot=0x054D, }, [0x054E]={ adobename="Vewarmenian", category="lu", description="ARMENIAN CAPITAL LETTER VEW", direction="l", lccode=0x057E, linebreak="al", unicodeslot=0x054E, }, [0x054F]={ adobename="Tiwnarmenian", category="lu", description="ARMENIAN CAPITAL LETTER TIWN", direction="l", lccode=0x057F, linebreak="al", unicodeslot=0x054F, }, [0x0550]={ adobename="Reharmenian", category="lu", description="ARMENIAN CAPITAL LETTER REH", direction="l", lccode=0x0580, linebreak="al", unicodeslot=0x0550, }, [0x0551]={ adobename="Coarmenian", category="lu", description="ARMENIAN CAPITAL LETTER CO", direction="l", lccode=0x0581, linebreak="al", unicodeslot=0x0551, }, [0x0552]={ adobename="Yiwnarmenian", category="lu", description="ARMENIAN CAPITAL LETTER YIWN", direction="l", lccode=0x0582, linebreak="al", unicodeslot=0x0552, }, [0x0553]={ adobename="Piwrarmenian", category="lu", description="ARMENIAN CAPITAL LETTER PIWR", direction="l", lccode=0x0583, linebreak="al", unicodeslot=0x0553, }, [0x0554]={ adobename="Keharmenian", category="lu", description="ARMENIAN CAPITAL LETTER KEH", direction="l", lccode=0x0584, linebreak="al", unicodeslot=0x0554, }, [0x0555]={ adobename="Oharmenian", category="lu", description="ARMENIAN CAPITAL LETTER OH", direction="l", lccode=0x0585, linebreak="al", unicodeslot=0x0555, }, [0x0556]={ adobename="Feharmenian", category="lu", description="ARMENIAN CAPITAL LETTER FEH", direction="l", lccode=0x0586, linebreak="al", unicodeslot=0x0556, }, [0x0559]={ adobename="ringhalfleftarmenian", category="lm", description="ARMENIAN MODIFIER LETTER LEFT HALF RING", direction="l", linebreak="al", unicodeslot=0x0559, }, [0x055A]={ adobename="apostrophearmenian", category="po", description="ARMENIAN APOSTROPHE", direction="l", linebreak="al", unicodeslot=0x055A, }, [0x055B]={ adobename="emphasismarkarmenian", category="po", description="ARMENIAN EMPHASIS MARK", direction="l", linebreak="al", unicodeslot=0x055B, }, [0x055C]={ adobename="exclamarmenian", category="po", description="ARMENIAN EXCLAMATION MARK", direction="l", linebreak="al", unicodeslot=0x055C, }, [0x055D]={ adobename="commaarmenian", category="po", description="ARMENIAN COMMA", direction="l", linebreak="al", unicodeslot=0x055D, }, [0x055E]={ adobename="questionarmenian", category="po", description="ARMENIAN QUESTION MARK", direction="l", linebreak="al", unicodeslot=0x055E, }, [0x055F]={ adobename="abbreviationmarkarmenian", category="po", description="ARMENIAN ABBREVIATION MARK", direction="l", linebreak="al", unicodeslot=0x055F, }, [0x0561]={ adobename="aybarmenian", category="ll", description="ARMENIAN SMALL LETTER AYB", direction="l", linebreak="al", uccode=0x0531, unicodeslot=0x0561, }, [0x0562]={ adobename="benarmenian", category="ll", description="ARMENIAN SMALL LETTER BEN", direction="l", linebreak="al", uccode=0x0532, unicodeslot=0x0562, }, [0x0563]={ adobename="gimarmenian", category="ll", description="ARMENIAN SMALL LETTER GIM", direction="l", linebreak="al", uccode=0x0533, unicodeslot=0x0563, }, [0x0564]={ adobename="daarmenian", category="ll", description="ARMENIAN SMALL LETTER DA", direction="l", linebreak="al", uccode=0x0534, unicodeslot=0x0564, }, [0x0565]={ adobename="echarmenian", category="ll", description="ARMENIAN SMALL LETTER ECH", direction="l", linebreak="al", uccode=0x0535, unicodeslot=0x0565, }, [0x0566]={ adobename="zaarmenian", category="ll", description="ARMENIAN SMALL LETTER ZA", direction="l", linebreak="al", uccode=0x0536, unicodeslot=0x0566, }, [0x0567]={ adobename="eharmenian", category="ll", description="ARMENIAN SMALL LETTER EH", direction="l", linebreak="al", uccode=0x0537, unicodeslot=0x0567, }, [0x0568]={ adobename="etarmenian", category="ll", description="ARMENIAN SMALL LETTER ET", direction="l", linebreak="al", uccode=0x0538, unicodeslot=0x0568, }, [0x0569]={ adobename="toarmenian", category="ll", description="ARMENIAN SMALL LETTER TO", direction="l", linebreak="al", uccode=0x0539, unicodeslot=0x0569, }, [0x056A]={ adobename="zhearmenian", category="ll", description="ARMENIAN SMALL LETTER ZHE", direction="l", linebreak="al", uccode=0x053A, unicodeslot=0x056A, }, [0x056B]={ adobename="iniarmenian", category="ll", description="ARMENIAN SMALL LETTER INI", direction="l", linebreak="al", uccode=0x053B, unicodeslot=0x056B, }, [0x056C]={ adobename="liwnarmenian", category="ll", description="ARMENIAN SMALL LETTER LIWN", direction="l", linebreak="al", uccode=0x053C, unicodeslot=0x056C, }, [0x056D]={ adobename="xeharmenian", category="ll", description="ARMENIAN SMALL LETTER XEH", direction="l", linebreak="al", uccode=0x053D, unicodeslot=0x056D, }, [0x056E]={ adobename="caarmenian", category="ll", description="ARMENIAN SMALL LETTER CA", direction="l", linebreak="al", uccode=0x053E, unicodeslot=0x056E, }, [0x056F]={ adobename="kenarmenian", category="ll", description="ARMENIAN SMALL LETTER KEN", direction="l", linebreak="al", uccode=0x053F, unicodeslot=0x056F, }, [0x0570]={ adobename="hoarmenian", category="ll", description="ARMENIAN SMALL LETTER HO", direction="l", linebreak="al", uccode=0x0540, unicodeslot=0x0570, }, [0x0571]={ adobename="jaarmenian", category="ll", description="ARMENIAN SMALL LETTER JA", direction="l", linebreak="al", uccode=0x0541, unicodeslot=0x0571, }, [0x0572]={ adobename="ghadarmenian", category="ll", description="ARMENIAN SMALL LETTER GHAD", direction="l", linebreak="al", uccode=0x0542, unicodeslot=0x0572, }, [0x0573]={ adobename="cheharmenian", category="ll", description="ARMENIAN SMALL LETTER CHEH", direction="l", linebreak="al", uccode=0x0543, unicodeslot=0x0573, }, [0x0574]={ adobename="menarmenian", category="ll", description="ARMENIAN SMALL LETTER MEN", direction="l", linebreak="al", uccode=0x0544, unicodeslot=0x0574, }, [0x0575]={ adobename="yiarmenian", category="ll", description="ARMENIAN SMALL LETTER YI", direction="l", linebreak="al", uccode=0x0545, unicodeslot=0x0575, }, [0x0576]={ adobename="nowarmenian", category="ll", description="ARMENIAN SMALL LETTER NOW", direction="l", linebreak="al", uccode=0x0546, unicodeslot=0x0576, }, [0x0577]={ adobename="shaarmenian", category="ll", description="ARMENIAN SMALL LETTER SHA", direction="l", linebreak="al", uccode=0x0547, unicodeslot=0x0577, }, [0x0578]={ adobename="voarmenian", category="ll", description="ARMENIAN SMALL LETTER VO", direction="l", linebreak="al", uccode=0x0548, unicodeslot=0x0578, }, [0x0579]={ adobename="chaarmenian", category="ll", description="ARMENIAN SMALL LETTER CHA", direction="l", linebreak="al", uccode=0x0549, unicodeslot=0x0579, }, [0x057A]={ adobename="peharmenian", category="ll", description="ARMENIAN SMALL LETTER PEH", direction="l", linebreak="al", uccode=0x054A, unicodeslot=0x057A, }, [0x057B]={ adobename="jheharmenian", category="ll", description="ARMENIAN SMALL LETTER JHEH", direction="l", linebreak="al", uccode=0x054B, unicodeslot=0x057B, }, [0x057C]={ adobename="raarmenian", category="ll", description="ARMENIAN SMALL LETTER RA", direction="l", linebreak="al", uccode=0x054C, unicodeslot=0x057C, }, [0x057D]={ adobename="seharmenian", category="ll", description="ARMENIAN SMALL LETTER SEH", direction="l", linebreak="al", uccode=0x054D, unicodeslot=0x057D, }, [0x057E]={ adobename="vewarmenian", category="ll", description="ARMENIAN SMALL LETTER VEW", direction="l", linebreak="al", uccode=0x054E, unicodeslot=0x057E, }, [0x057F]={ adobename="tiwnarmenian", category="ll", description="ARMENIAN SMALL LETTER TIWN", direction="l", linebreak="al", uccode=0x054F, unicodeslot=0x057F, }, [0x0580]={ adobename="reharmenian", category="ll", description="ARMENIAN SMALL LETTER REH", direction="l", linebreak="al", uccode=0x0550, unicodeslot=0x0580, }, [0x0581]={ adobename="coarmenian", category="ll", description="ARMENIAN SMALL LETTER CO", direction="l", linebreak="al", uccode=0x0551, unicodeslot=0x0581, }, [0x0582]={ adobename="yiwnarmenian", category="ll", description="ARMENIAN SMALL LETTER YIWN", direction="l", linebreak="al", uccode=0x0552, unicodeslot=0x0582, }, [0x0583]={ adobename="piwrarmenian", category="ll", description="ARMENIAN SMALL LETTER PIWR", direction="l", linebreak="al", uccode=0x0553, unicodeslot=0x0583, }, [0x0584]={ adobename="keharmenian", category="ll", description="ARMENIAN SMALL LETTER KEH", direction="l", linebreak="al", uccode=0x0554, unicodeslot=0x0584, }, [0x0585]={ adobename="oharmenian", category="ll", description="ARMENIAN SMALL LETTER OH", direction="l", linebreak="al", uccode=0x0555, unicodeslot=0x0585, }, [0x0586]={ adobename="feharmenian", category="ll", description="ARMENIAN SMALL LETTER FEH", direction="l", linebreak="al", uccode=0x0556, unicodeslot=0x0586, }, [0x0587]={ adobename="echyiwnarmenian", category="ll", description="ARMENIAN SMALL LIGATURE ECH YIWN", direction="l", linebreak="al", specials={ "compat", 0x0565, 0x0582 }, unicodeslot=0x0587, }, [0x0589]={ adobename="periodarmenian", category="po", description="ARMENIAN FULL STOP", direction="l", linebreak="is", unicodeslot=0x0589, }, [0x058A]={ category="pd", description="ARMENIAN HYPHEN", direction="on", linebreak="ba", unicodeslot=0x058A, }, [0x058F]={ category="sc", description="ARMENIAN DRAM SIGN", direction="et", linebreak="pr", unicodeslot=0x058F, }, [0x0591]={ adobename="etnahtalefthebrew", category="mn", description="HEBREW ACCENT ETNAHTA", direction="nsm", linebreak="cm", unicodeslot=0x0591, }, [0x0592]={ adobename="segoltahebrew", category="mn", description="HEBREW ACCENT SEGOL", direction="nsm", linebreak="cm", unicodeslot=0x0592, }, [0x0593]={ adobename="shalshelethebrew", category="mn", description="HEBREW ACCENT SHALSHELET", direction="nsm", linebreak="cm", unicodeslot=0x0593, }, [0x0594]={ adobename="zaqefqatanhebrew", category="mn", description="HEBREW ACCENT ZAQEF QATAN", direction="nsm", linebreak="cm", unicodeslot=0x0594, }, [0x0595]={ adobename="zaqefgadolhebrew", category="mn", description="HEBREW ACCENT ZAQEF GADOL", direction="nsm", linebreak="cm", unicodeslot=0x0595, }, [0x0596]={ adobename="tipehalefthebrew", category="mn", description="HEBREW ACCENT TIPEHA", direction="nsm", linebreak="cm", unicodeslot=0x0596, }, [0x0597]={ adobename="reviamugrashhebrew", category="mn", description="HEBREW ACCENT REVIA", direction="nsm", linebreak="cm", unicodeslot=0x0597, }, [0x0598]={ adobename="zarqahebrew", category="mn", description="HEBREW ACCENT ZARQA", direction="nsm", linebreak="cm", unicodeslot=0x0598, }, [0x0599]={ adobename="pashtahebrew", category="mn", description="HEBREW ACCENT PASHTA", direction="nsm", linebreak="cm", unicodeslot=0x0599, }, [0x059A]={ adobename="yetivhebrew", category="mn", description="HEBREW ACCENT YETIV", direction="nsm", linebreak="cm", unicodeslot=0x059A, }, [0x059B]={ adobename="tevirlefthebrew", category="mn", description="HEBREW ACCENT TEVIR", direction="nsm", linebreak="cm", unicodeslot=0x059B, }, [0x059C]={ adobename="gereshaccenthebrew", category="mn", description="HEBREW ACCENT GERESH", direction="nsm", linebreak="cm", unicodeslot=0x059C, }, [0x059D]={ adobename="gereshmuqdamhebrew", category="mn", description="HEBREW ACCENT GERESH MUQDAM", direction="nsm", linebreak="cm", unicodeslot=0x059D, }, [0x059E]={ adobename="gershayimaccenthebrew", category="mn", description="HEBREW ACCENT GERSHAYIM", direction="nsm", linebreak="cm", unicodeslot=0x059E, }, [0x059F]={ adobename="qarneyparahebrew", category="mn", description="HEBREW ACCENT QARNEY PARA", direction="nsm", linebreak="cm", unicodeslot=0x059F, }, [0x05A0]={ adobename="telishagedolahebrew", category="mn", description="HEBREW ACCENT TELISHA GEDOLA", direction="nsm", linebreak="cm", unicodeslot=0x05A0, }, [0x05A1]={ adobename="pazerhebrew", category="mn", description="HEBREW ACCENT PAZER", direction="nsm", linebreak="cm", unicodeslot=0x05A1, }, [0x05A2]={ category="mn", description="HEBREW ACCENT ATNAH HAFUKH", direction="nsm", linebreak="cm", unicodeslot=0x05A2, }, [0x05A3]={ adobename="munahlefthebrew", category="mn", description="HEBREW ACCENT MUNAH", direction="nsm", linebreak="cm", unicodeslot=0x05A3, }, [0x05A4]={ adobename="mahapakhlefthebrew", category="mn", description="HEBREW ACCENT MAHAPAKH", direction="nsm", linebreak="cm", unicodeslot=0x05A4, }, [0x05A5]={ adobename="merkhalefthebrew", category="mn", description="HEBREW ACCENT MERKHA", direction="nsm", linebreak="cm", unicodeslot=0x05A5, }, [0x05A6]={ adobename="merkhakefulalefthebrew", category="mn", description="HEBREW ACCENT MERKHA KEFULA", direction="nsm", linebreak="cm", unicodeslot=0x05A6, }, [0x05A7]={ adobename="dargalefthebrew", category="mn", description="HEBREW ACCENT DARGA", direction="nsm", linebreak="cm", unicodeslot=0x05A7, }, [0x05A8]={ adobename="qadmahebrew", category="mn", description="HEBREW ACCENT QADMA", direction="nsm", linebreak="cm", unicodeslot=0x05A8, }, [0x05A9]={ adobename="telishaqetanahebrew", category="mn", description="HEBREW ACCENT TELISHA QETANA", direction="nsm", linebreak="cm", unicodeslot=0x05A9, }, [0x05AA]={ adobename="yerahbenyomolefthebrew", category="mn", description="HEBREW ACCENT YERAH BEN YOMO", direction="nsm", linebreak="cm", unicodeslot=0x05AA, }, [0x05AB]={ adobename="olehebrew", category="mn", description="HEBREW ACCENT OLE", direction="nsm", linebreak="cm", unicodeslot=0x05AB, }, [0x05AC]={ adobename="iluyhebrew", category="mn", description="HEBREW ACCENT ILUY", direction="nsm", linebreak="cm", unicodeslot=0x05AC, }, [0x05AD]={ adobename="dehihebrew", category="mn", description="HEBREW ACCENT DEHI", direction="nsm", linebreak="cm", unicodeslot=0x05AD, }, [0x05AE]={ adobename="zinorhebrew", category="mn", description="HEBREW ACCENT ZINOR", direction="nsm", linebreak="cm", unicodeslot=0x05AE, }, [0x05AF]={ adobename="masoracirclehebrew", category="mn", description="HEBREW MARK MASORA CIRCLE", direction="nsm", linebreak="cm", unicodeslot=0x05AF, }, [0x05B0]={ adobename="shevawidehebrew", category="mn", description="HEBREW POINT SHEVA", direction="nsm", linebreak="cm", unicodeslot=0x05B0, }, [0x05B1]={ adobename="hatafsegolwidehebrew", category="mn", description="HEBREW POINT HATAF SEGOL", direction="nsm", linebreak="cm", unicodeslot=0x05B1, }, [0x05B2]={ adobename="hatafpatahwidehebrew", category="mn", description="HEBREW POINT HATAF PATAH", direction="nsm", linebreak="cm", unicodeslot=0x05B2, }, [0x05B3]={ adobename="hatafqamatswidehebrew", category="mn", description="HEBREW POINT HATAF QAMATS", direction="nsm", linebreak="cm", unicodeslot=0x05B3, }, [0x05B4]={ adobename="hiriqwidehebrew", category="mn", description="HEBREW POINT HIRIQ", direction="nsm", linebreak="cm", unicodeslot=0x05B4, }, [0x05B5]={ adobename="tserewidehebrew", category="mn", description="HEBREW POINT TSERE", direction="nsm", linebreak="cm", unicodeslot=0x05B5, }, [0x05B6]={ adobename="segolwidehebrew", category="mn", description="HEBREW POINT SEGOL", direction="nsm", linebreak="cm", unicodeslot=0x05B6, }, [0x05B7]={ adobename="patahwidehebrew", category="mn", description="HEBREW POINT PATAH", direction="nsm", linebreak="cm", unicodeslot=0x05B7, }, [0x05B8]={ adobename="qamatswidehebrew", category="mn", description="HEBREW POINT QAMATS", direction="nsm", linebreak="cm", unicodeslot=0x05B8, }, [0x05B9]={ adobename="holamwidehebrew", category="mn", description="HEBREW POINT HOLAM", direction="nsm", linebreak="cm", unicodeslot=0x05B9, }, [0x05BA]={ category="mn", description="HEBREW POINT HOLAM HASER FOR VAV", direction="nsm", linebreak="cm", unicodeslot=0x05BA, }, [0x05BB]={ adobename="qubutswidehebrew", category="mn", description="HEBREW POINT QUBUTS", direction="nsm", linebreak="cm", unicodeslot=0x05BB, }, [0x05BC]={ adobename="dageshhebrew", category="mn", description="HEBREW POINT DAGESH OR MAPIQ", direction="nsm", linebreak="cm", unicodeslot=0x05BC, }, [0x05BD]={ adobename="siluqlefthebrew", category="mn", description="HEBREW POINT METEG", direction="nsm", linebreak="cm", unicodeslot=0x05BD, }, [0x05BE]={ adobename="maqafhebrew", category="po", description="HEBREW PUNCTUATION MAQAF", direction="r", linebreak="ba", unicodeslot=0x05BE, }, [0x05BF]={ adobename="rafehebrew", category="mn", description="HEBREW POINT RAFE", direction="nsm", linebreak="cm", unicodeslot=0x05BF, }, [0x05C0]={ adobename="paseqhebrew", category="po", description="HEBREW PUNCTUATION PASEQ", direction="r", linebreak="al", unicodeslot=0x05C0, }, [0x05C1]={ adobename="shindothebrew", category="mn", description="HEBREW POINT SHIN DOT", direction="nsm", linebreak="cm", unicodeslot=0x05C1, }, [0x05C2]={ adobename="sindothebrew", category="mn", description="HEBREW POINT SIN DOT", direction="nsm", linebreak="cm", unicodeslot=0x05C2, }, [0x05C3]={ adobename="sofpasuqhebrew", category="po", description="HEBREW PUNCTUATION SOF PASUQ", direction="r", linebreak="al", unicodeslot=0x05C3, }, [0x05C4]={ adobename="upperdothebrew", category="mn", description="HEBREW MARK UPPER DOT", direction="nsm", linebreak="cm", unicodeslot=0x05C4, }, [0x05C5]={ category="mn", description="HEBREW MARK LOWER DOT", direction="nsm", linebreak="cm", unicodeslot=0x05C5, }, [0x05C6]={ category="po", description="HEBREW PUNCTUATION NUN HAFUKHA", direction="r", linebreak="ex", unicodeslot=0x05C6, }, [0x05C7]={ category="mn", description="HEBREW POINT QAMATS QATAN", direction="nsm", linebreak="cm", unicodeslot=0x05C7, }, [0x05D0]={ adobename="alefhebrew", category="lo", contextname="hebrewAlef", description="HEBREW LETTER ALEF", direction="r", linebreak="hl", unicodeslot=0x05D0, }, [0x05D1]={ adobename="bethebrew", category="lo", contextname="hebrewBet", description="HEBREW LETTER BET", direction="r", linebreak="hl", unicodeslot=0x05D1, }, [0x05D2]={ adobename="gimelhebrew", category="lo", contextname="hebrewGimel", description="HEBREW LETTER GIMEL", direction="r", linebreak="hl", unicodeslot=0x05D2, }, [0x05D3]={ adobename="dalettserehebrew", category="lo", contextname="hebrewDalet", description="HEBREW LETTER DALET", direction="r", linebreak="hl", unicodeslot=0x05D3, }, [0x05D4]={ adobename="hehebrew", category="lo", contextname="hebrewHe", description="HEBREW LETTER HE", direction="r", linebreak="hl", unicodeslot=0x05D4, }, [0x05D5]={ adobename="vavhebrew", category="lo", contextname="hebrewVav", description="HEBREW LETTER VAV", direction="r", linebreak="hl", unicodeslot=0x05D5, }, [0x05D6]={ adobename="zayinhebrew", category="lo", contextname="hebrewZayin", description="HEBREW LETTER ZAYIN", direction="r", linebreak="hl", unicodeslot=0x05D6, }, [0x05D7]={ adobename="hethebrew", category="lo", contextname="hebrewHet", description="HEBREW LETTER HET", direction="r", linebreak="hl", unicodeslot=0x05D7, }, [0x05D8]={ adobename="tethebrew", category="lo", contextname="hebrewTet", description="HEBREW LETTER TET", direction="r", linebreak="hl", unicodeslot=0x05D8, }, [0x05D9]={ adobename="yodhebrew", category="lo", contextname="hebrewYod", description="HEBREW LETTER YOD", direction="r", linebreak="hl", unicodeslot=0x05D9, }, [0x05DA]={ adobename="finalkafshevahebrew", category="lo", contextname="hebrewKaffinal", description="HEBREW LETTER FINAL KAF", direction="r", linebreak="hl", unicodeslot=0x05DA, }, [0x05DB]={ adobename="kafhebrew", category="lo", contextname="hebrewKaf", description="HEBREW LETTER KAF", direction="r", linebreak="hl", unicodeslot=0x05DB, }, [0x05DC]={ adobename="lamedholamhebrew", category="lo", contextname="hebrewLamed", description="HEBREW LETTER LAMED", direction="r", linebreak="hl", unicodeslot=0x05DC, }, [0x05DD]={ adobename="finalmemhebrew", category="lo", contextname="hebrewMemfinal", description="HEBREW LETTER FINAL MEM", direction="r", linebreak="hl", unicodeslot=0x05DD, }, [0x05DE]={ adobename="memhebrew", category="lo", contextname="hebrewMem", description="HEBREW LETTER MEM", direction="r", linebreak="hl", unicodeslot=0x05DE, }, [0x05DF]={ adobename="finalnunhebrew", category="lo", contextname="hebrewNunfinal", description="HEBREW LETTER FINAL NUN", direction="r", linebreak="hl", unicodeslot=0x05DF, }, [0x05E0]={ adobename="nunhebrew", category="lo", contextname="hebrewNun", description="HEBREW LETTER NUN", direction="r", linebreak="hl", unicodeslot=0x05E0, }, [0x05E1]={ adobename="samekhhebrew", category="lo", contextname="hebrewSamekh", description="HEBREW LETTER SAMEKH", direction="r", linebreak="hl", unicodeslot=0x05E1, }, [0x05E2]={ adobename="ayinhebrew", category="lo", contextname="hebrewAyin", description="HEBREW LETTER AYIN", direction="r", linebreak="hl", unicodeslot=0x05E2, }, [0x05E3]={ adobename="finalpehebrew", category="lo", contextname="hebrewPefinal", description="HEBREW LETTER FINAL PE", direction="r", linebreak="hl", unicodeslot=0x05E3, }, [0x05E4]={ adobename="pehebrew", category="lo", contextname="hebrewPe", description="HEBREW LETTER PE", direction="r", linebreak="hl", unicodeslot=0x05E4, }, [0x05E5]={ adobename="finaltsadihebrew", category="lo", contextname="hebrewTsadifinal", description="HEBREW LETTER FINAL TSADI", direction="r", linebreak="hl", unicodeslot=0x05E5, }, [0x05E6]={ adobename="tsadihebrew", category="lo", contextname="hebrewTsadi", description="HEBREW LETTER TSADI", direction="r", linebreak="hl", unicodeslot=0x05E6, }, [0x05E7]={ adobename="qoftserehebrew", category="lo", contextname="hebrewQof", description="HEBREW LETTER QOF", direction="r", linebreak="hl", unicodeslot=0x05E7, }, [0x05E8]={ adobename="reshtserehebrew", category="lo", contextname="hebrewResh", description="HEBREW LETTER RESH", direction="r", linebreak="hl", unicodeslot=0x05E8, }, [0x05E9]={ adobename="shinhebrew", category="lo", contextname="hebrewShin", description="HEBREW LETTER SHIN", direction="r", linebreak="hl", unicodeslot=0x05E9, }, [0x05EA]={ adobename="tavhebrew", category="lo", contextname="hebrewTav", description="HEBREW LETTER TAV", direction="r", linebreak="hl", unicodeslot=0x05EA, }, [0x05F0]={ adobename="vavvavhebrew", category="lo", description="HEBREW LIGATURE YIDDISH DOUBLE VAV", direction="r", linebreak="hl", unicodeslot=0x05F0, }, [0x05F1]={ adobename="vavyodhebrew", category="lo", description="HEBREW LIGATURE YIDDISH VAV YOD", direction="r", linebreak="hl", unicodeslot=0x05F1, }, [0x05F2]={ adobename="yodyodhebrew", category="lo", description="HEBREW LIGATURE YIDDISH DOUBLE YOD", direction="r", linebreak="hl", unicodeslot=0x05F2, }, [0x05F3]={ adobename="gereshhebrew", category="po", description="HEBREW PUNCTUATION GERESH", direction="r", linebreak="al", unicodeslot=0x05F3, }, [0x05F4]={ adobename="gershayimhebrew", category="po", description="HEBREW PUNCTUATION GERSHAYIM", direction="r", linebreak="al", unicodeslot=0x05F4, }, [0x0600]={ arabic="u", category="cf", description="ARABIC NUMBER SIGN", direction="an", linebreak="al", unicodeslot=0x0600, visible="yes", }, [0x0601]={ arabic="u", category="cf", description="ARABIC SIGN SANAH", direction="an", linebreak="al", unicodeslot=0x0601, visible="yes", }, [0x0602]={ arabic="u", category="cf", description="ARABIC FOOTNOTE MARKER", direction="an", linebreak="al", unicodeslot=0x0602, visible="yes", }, [0x0603]={ arabic="u", category="cf", description="ARABIC SIGN SAFHA", direction="an", linebreak="al", unicodeslot=0x0603, visible="yes", }, [0x0604]={ arabic="u", category="cf", description="ARABIC SIGN SAMVAT", direction="an", linebreak="al", unicodeslot=0x0604, }, [0x0606]={ category="sm", description="ARABIC-INDIC CUBE ROOT", direction="on", linebreak="al", unicodeslot=0x0606, }, [0x0607]={ category="sm", description="ARABIC-INDIC FOURTH ROOT", direction="on", linebreak="al", unicodeslot=0x0607, }, [0x0608]={ arabic="u", category="sm", description="ARABIC RAY", direction="al", linebreak="al", unicodeslot=0x0608, }, [0x0609]={ category="po", description="ARABIC-INDIC PER MILLE SIGN", direction="et", linebreak="po", unicodeslot=0x0609, }, [0x060A]={ category="po", description="ARABIC-INDIC PER TEN THOUSAND SIGN", direction="et", linebreak="po", unicodeslot=0x060A, }, [0x060B]={ arabic="u", category="sc", description="AFGHANI SIGN", direction="al", linebreak="po", unicodeslot=0x060B, }, [0x060C]={ adobename="commaarabic", category="po", description="ARABIC COMMA", direction="cs", linebreak="is", unicodeslot=0x060C, }, [0x060D]={ category="po", description="ARABIC DATE SEPARATOR", direction="al", linebreak="is", unicodeslot=0x060D, }, [0x060E]={ category="so", description="ARABIC POETIC VERSE SIGN", direction="on", linebreak="al", unicodeslot=0x060E, }, [0x060F]={ category="so", description="ARABIC SIGN MISRA", direction="on", linebreak="al", unicodeslot=0x060F, }, [0x0610]={ category="mn", description="ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM", direction="nsm", linebreak="cm", unicodeslot=0x0610, }, [0x0611]={ category="mn", description="ARABIC SIGN ALAYHE ASSALLAM", direction="nsm", linebreak="cm", unicodeslot=0x0611, }, [0x0612]={ category="mn", description="ARABIC SIGN RAHMATULLAH ALAYHE", direction="nsm", linebreak="cm", unicodeslot=0x0612, }, [0x0613]={ category="mn", description="ARABIC SIGN RADI ALLAHOU ANHU", direction="nsm", linebreak="cm", unicodeslot=0x0613, }, [0x0614]={ category="mn", description="ARABIC SIGN TAKHALLUS", direction="nsm", linebreak="cm", unicodeslot=0x0614, }, [0x0615]={ category="mn", description="ARABIC SMALL HIGH TAH", direction="nsm", linebreak="cm", unicodeslot=0x0615, }, [0x0616]={ category="mn", description="ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH", direction="nsm", linebreak="cm", unicodeslot=0x0616, }, [0x0617]={ category="mn", description="ARABIC SMALL HIGH ZAIN", direction="nsm", linebreak="cm", unicodeslot=0x0617, }, [0x0618]={ category="mn", description="ARABIC SMALL FATHA", direction="nsm", linebreak="cm", unicodeslot=0x0618, }, [0x0619]={ category="mn", description="ARABIC SMALL DAMMA", direction="nsm", linebreak="cm", unicodeslot=0x0619, }, [0x061A]={ category="mn", description="ARABIC SMALL KASRA", direction="nsm", linebreak="cm", unicodeslot=0x061A, }, [0x061B]={ adobename="semicolonarabic", category="po", description="ARABIC SEMICOLON", direction="al", linebreak="ex", unicodeslot=0x061B, }, [0x061E]={ category="po", description="ARABIC TRIPLE DOT PUNCTUATION MARK", direction="al", linebreak="ex", unicodeslot=0x061E, }, [0x061F]={ adobename="questionarabic", category="po", description="ARABIC QUESTION MARK", direction="al", linebreak="ex", unicodeslot=0x061F, }, [0x0620]={ arabic="d", category="lo", description="ARABIC LETTER KASHMIRI YEH", direction="al", linebreak="al", unicodeslot=0x0620, }, [0x0621]={ adobename="hamzasukunarabic", arabic="u", category="lo", description="ARABIC LETTER HAMZA", direction="al", linebreak="al", unicodeslot=0x0621, }, [0x0622]={ adobename="alefmaddaabovearabic", arabic="r", category="lo", description="ARABIC LETTER ALEF WITH MADDA ABOVE", direction="al", linebreak="al", shcode=0x0627, specials={ "char", 0x0627, 0x0653 }, unicodeslot=0x0622, }, [0x0623]={ adobename="alefhamzaabovearabic", arabic="r", category="lo", description="ARABIC LETTER ALEF WITH HAMZA ABOVE", direction="al", linebreak="al", shcode=0x0627, specials={ "char", 0x0627, 0x0654 }, unicodeslot=0x0623, }, [0x0624]={ adobename="wawhamzaabovearabic", arabic="r", category="lo", description="ARABIC LETTER WAW WITH HAMZA ABOVE", direction="al", linebreak="al", shcode=0x0648, specials={ "char", 0x0648, 0x0654 }, unicodeslot=0x0624, }, [0x0625]={ adobename="alefhamzabelowarabic", arabic="r", category="lo", description="ARABIC LETTER ALEF WITH HAMZA BELOW", direction="al", linebreak="al", shcode=0x0627, specials={ "char", 0x0627, 0x0655 }, unicodeslot=0x0625, }, [0x0626]={ adobename="yehhamzaabovearabic", arabic="d", category="lo", description="ARABIC LETTER YEH WITH HAMZA ABOVE", direction="al", linebreak="al", shcode=0x064A, specials={ "char", 0x064A, 0x0654 }, unicodeslot=0x0626, }, [0x0627]={ adobename="alefarabic", arabic="r", category="lo", description="ARABIC LETTER ALEF", direction="al", linebreak="al", unicodeslot=0x0627, }, [0x0628]={ adobename="beharabic", arabic="d", category="lo", description="ARABIC LETTER BEH", direction="al", linebreak="al", unicodeslot=0x0628, }, [0x0629]={ adobename="tehmarbutaarabic", arabic="r", category="lo", description="ARABIC LETTER TEH MARBUTA", direction="al", linebreak="al", unicodeslot=0x0629, }, [0x062A]={ adobename="teharabic", arabic="d", category="lo", description="ARABIC LETTER TEH", direction="al", linebreak="al", unicodeslot=0x062A, }, [0x062B]={ adobename="theharabic", arabic="d", category="lo", description="ARABIC LETTER THEH", direction="al", linebreak="al", unicodeslot=0x062B, }, [0x062C]={ adobename="jeemarabic", arabic="d", category="lo", description="ARABIC LETTER JEEM", direction="al", linebreak="al", unicodeslot=0x062C, }, [0x062D]={ adobename="haharabic", arabic="d", category="lo", description="ARABIC LETTER HAH", direction="al", linebreak="al", unicodeslot=0x062D, }, [0x062E]={ adobename="khaharabic", arabic="d", category="lo", description="ARABIC LETTER KHAH", direction="al", linebreak="al", unicodeslot=0x062E, }, [0x062F]={ adobename="dalarabic", arabic="r", category="lo", description="ARABIC LETTER DAL", direction="al", linebreak="al", unicodeslot=0x062F, }, [0x0630]={ adobename="thalarabic", arabic="r", category="lo", description="ARABIC LETTER THAL", direction="al", linebreak="al", unicodeslot=0x0630, }, [0x0631]={ adobename="rehyehaleflamarabic", arabic="r", category="lo", description="ARABIC LETTER REH", direction="al", linebreak="al", unicodeslot=0x0631, }, [0x0632]={ adobename="zainarabic", arabic="r", category="lo", description="ARABIC LETTER ZAIN", direction="al", linebreak="al", unicodeslot=0x0632, }, [0x0633]={ adobename="seenarabic", arabic="d", category="lo", description="ARABIC LETTER SEEN", direction="al", linebreak="al", unicodeslot=0x0633, }, [0x0634]={ adobename="sheenarabic", arabic="d", category="lo", description="ARABIC LETTER SHEEN", direction="al", linebreak="al", unicodeslot=0x0634, }, [0x0635]={ adobename="sadarabic", arabic="d", category="lo", description="ARABIC LETTER SAD", direction="al", linebreak="al", unicodeslot=0x0635, }, [0x0636]={ adobename="dadarabic", arabic="d", category="lo", description="ARABIC LETTER DAD", direction="al", linebreak="al", unicodeslot=0x0636, }, [0x0637]={ adobename="taharabic", arabic="d", category="lo", description="ARABIC LETTER TAH", direction="al", linebreak="al", unicodeslot=0x0637, }, [0x0638]={ adobename="zaharabic", arabic="d", category="lo", description="ARABIC LETTER ZAH", direction="al", linebreak="al", unicodeslot=0x0638, }, [0x0639]={ adobename="ainarabic", arabic="d", category="lo", description="ARABIC LETTER AIN", direction="al", linebreak="al", unicodeslot=0x0639, }, [0x063A]={ adobename="ghainarabic", arabic="d", category="lo", description="ARABIC LETTER GHAIN", direction="al", linebreak="al", unicodeslot=0x063A, }, [0x063B]={ arabic="d", category="lo", description="ARABIC LETTER KEHEH WITH TWO DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x063B, }, [0x063C]={ arabic="d", category="lo", description="ARABIC LETTER KEHEH WITH THREE DOTS BELOW", direction="al", linebreak="al", unicodeslot=0x063C, }, [0x063D]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH WITH INVERTED V", direction="al", linebreak="al", unicodeslot=0x063D, }, [0x063E]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x063E, }, [0x063F]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x063F, }, [0x0640]={ adobename="tatweelarabic", arabic="c", category="lm", description="ARABIC TATWEEL", direction="al", linebreak="al", unicodeslot=0x0640, }, [0x0641]={ adobename="feharabic", arabic="d", category="lo", description="ARABIC LETTER FEH", direction="al", linebreak="al", unicodeslot=0x0641, }, [0x0642]={ adobename="qafarabic", arabic="d", category="lo", description="ARABIC LETTER QAF", direction="al", linebreak="al", unicodeslot=0x0642, }, [0x0643]={ adobename="kafarabic", arabic="d", category="lo", description="ARABIC LETTER KAF", direction="al", linebreak="al", unicodeslot=0x0643, }, [0x0644]={ adobename="lamarabic", arabic="d", category="lo", description="ARABIC LETTER LAM", direction="al", linebreak="al", unicodeslot=0x0644, }, [0x0645]={ adobename="meemarabic", arabic="d", category="lo", description="ARABIC LETTER MEEM", direction="al", linebreak="al", unicodeslot=0x0645, }, [0x0646]={ adobename="noonarabic", arabic="d", category="lo", description="ARABIC LETTER NOON", direction="al", linebreak="al", unicodeslot=0x0646, }, [0x0647]={ adobename="heharabic", arabic="d", category="lo", description="ARABIC LETTER HEH", direction="al", linebreak="al", unicodeslot=0x0647, }, [0x0648]={ adobename="wawarabic", arabic="r", category="lo", description="ARABIC LETTER WAW", direction="al", linebreak="al", unicodeslot=0x0648, }, [0x0649]={ adobename="alefmaksuraarabic", arabic="d", category="lo", description="ARABIC LETTER ALEF MAKSURA", direction="al", linebreak="al", unicodeslot=0x0649, }, [0x064A]={ adobename="yeharabic", arabic="d", category="lo", description="ARABIC LETTER YEH", direction="al", linebreak="al", unicodeslot=0x064A, }, [0x064B]={ adobename="fathatanarabic", category="mn", description="ARABIC FATHATAN", direction="nsm", linebreak="cm", unicodeslot=0x064B, }, [0x064C]={ adobename="dammatanarabic", category="mn", description="ARABIC DAMMATAN", direction="nsm", linebreak="cm", unicodeslot=0x064C, }, [0x064D]={ adobename="kasratanarabic", category="mn", description="ARABIC KASRATAN", direction="nsm", linebreak="cm", unicodeslot=0x064D, }, [0x064E]={ adobename="fathalowarabic", category="mn", description="ARABIC FATHA", direction="nsm", linebreak="cm", unicodeslot=0x064E, }, [0x064F]={ adobename="dammalowarabic", category="mn", description="ARABIC DAMMA", direction="nsm", linebreak="cm", unicodeslot=0x064F, }, [0x0650]={ adobename="kasraarabic", category="mn", description="ARABIC KASRA", direction="nsm", linebreak="cm", unicodeslot=0x0650, }, [0x0651]={ adobename="shaddafathatanarabic", category="mn", description="ARABIC SHADDA", direction="nsm", linebreak="cm", unicodeslot=0x0651, }, [0x0652]={ adobename="sukunarabic", category="mn", description="ARABIC SUKUN", direction="nsm", linebreak="cm", unicodeslot=0x0652, }, [0x0653]={ category="mn", description="ARABIC MADDAH ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0653, }, [0x0654]={ category="mn", description="ARABIC HAMZA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0654, }, [0x0655]={ category="mn", description="ARABIC HAMZA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0655, }, [0x0656]={ category="mn", description="ARABIC SUBSCRIPT ALEF", direction="nsm", linebreak="cm", unicodeslot=0x0656, }, [0x0657]={ category="mn", description="ARABIC INVERTED DAMMA", direction="nsm", linebreak="cm", unicodeslot=0x0657, }, [0x0658]={ category="mn", description="ARABIC MARK NOON GHUNNA", direction="nsm", linebreak="cm", unicodeslot=0x0658, }, [0x0659]={ category="mn", description="ARABIC ZWARAKAY", direction="nsm", linebreak="cm", unicodeslot=0x0659, }, [0x065A]={ category="mn", description="ARABIC VOWEL SIGN SMALL V ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x065A, }, [0x065B]={ category="mn", description="ARABIC VOWEL SIGN INVERTED SMALL V ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x065B, }, [0x065C]={ category="mn", description="ARABIC VOWEL SIGN DOT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x065C, }, [0x065D]={ category="mn", description="ARABIC REVERSED DAMMA", direction="nsm", linebreak="cm", unicodeslot=0x065D, }, [0x065E]={ category="mn", description="ARABIC FATHA WITH TWO DOTS", direction="nsm", linebreak="cm", unicodeslot=0x065E, }, [0x065F]={ category="mn", description="ARABIC WAVY HAMZA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x065F, }, [0x0660]={ adobename="zerohackarabic", category="nd", description="ARABIC-INDIC DIGIT ZERO", direction="an", linebreak="nu", unicodeslot=0x0660, }, [0x0661]={ adobename="onehackarabic", category="nd", description="ARABIC-INDIC DIGIT ONE", direction="an", linebreak="nu", unicodeslot=0x0661, }, [0x0662]={ adobename="twohackarabic", category="nd", description="ARABIC-INDIC DIGIT TWO", direction="an", linebreak="nu", unicodeslot=0x0662, }, [0x0663]={ adobename="threehackarabic", category="nd", description="ARABIC-INDIC DIGIT THREE", direction="an", linebreak="nu", unicodeslot=0x0663, }, [0x0664]={ adobename="fourhackarabic", category="nd", description="ARABIC-INDIC DIGIT FOUR", direction="an", linebreak="nu", unicodeslot=0x0664, }, [0x0665]={ adobename="fivehackarabic", category="nd", description="ARABIC-INDIC DIGIT FIVE", direction="an", linebreak="nu", unicodeslot=0x0665, }, [0x0666]={ adobename="sixhackarabic", category="nd", description="ARABIC-INDIC DIGIT SIX", direction="an", linebreak="nu", unicodeslot=0x0666, }, [0x0667]={ adobename="sevenhackarabic", category="nd", description="ARABIC-INDIC DIGIT SEVEN", direction="an", linebreak="nu", unicodeslot=0x0667, }, [0x0668]={ adobename="eighthackarabic", category="nd", description="ARABIC-INDIC DIGIT EIGHT", direction="an", linebreak="nu", unicodeslot=0x0668, }, [0x0669]={ adobename="ninehackarabic", category="nd", description="ARABIC-INDIC DIGIT NINE", direction="an", linebreak="nu", unicodeslot=0x0669, }, [0x066A]={ adobename="percentarabic", category="po", description="ARABIC PERCENT SIGN", direction="et", linebreak="po", unicodeslot=0x066A, }, [0x066B]={ adobename="decimalseparatorpersian", category="po", description="ARABIC DECIMAL SEPARATOR", direction="an", linebreak="nu", unicodeslot=0x066B, }, [0x066C]={ adobename="thousandsseparatorpersian", category="po", description="ARABIC THOUSANDS SEPARATOR", direction="an", linebreak="nu", unicodeslot=0x066C, }, [0x066D]={ adobename="asteriskarabic", category="po", description="ARABIC FIVE POINTED STAR", direction="al", linebreak="al", unicodeslot=0x066D, }, [0x066E]={ arabic="d", category="lo", description="ARABIC LETTER DOTLESS BEH", direction="al", linebreak="al", unicodeslot=0x066E, }, [0x066F]={ arabic="d", category="lo", description="ARABIC LETTER DOTLESS QAF", direction="al", linebreak="al", unicodeslot=0x066F, }, [0x0670]={ category="mn", description="ARABIC LETTER SUPERSCRIPT ALEF", direction="nsm", linebreak="cm", unicodeslot=0x0670, }, [0x0671]={ arabic="r", category="lo", description="ARABIC LETTER ALEF WASLA", direction="al", linebreak="al", unicodeslot=0x0671, }, [0x0672]={ arabic="r", category="lo", description="ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE", direction="al", linebreak="al", shcode=0x0627, unicodeslot=0x0672, }, [0x0673]={ arabic="r", category="lo", description="ARABIC LETTER ALEF WITH WAVY HAMZA BELOW", direction="al", linebreak="al", shcode=0x0627, unicodeslot=0x0673, }, [0x0674]={ arabic="u", category="lo", description="ARABIC LETTER HIGH HAMZA", direction="al", linebreak="al", unicodeslot=0x0674, }, [0x0675]={ arabic="r", category="lo", description="ARABIC LETTER HIGH HAMZA ALEF", direction="al", linebreak="al", specials={ "compat", 0x0627, 0x0674 }, unicodeslot=0x0675, }, [0x0676]={ arabic="r", category="lo", description="ARABIC LETTER HIGH HAMZA WAW", direction="al", linebreak="al", specials={ "compat", 0x0648, 0x0674 }, unicodeslot=0x0676, }, [0x0677]={ arabic="r", category="lo", description="ARABIC LETTER U WITH HAMZA ABOVE", direction="al", linebreak="al", shcode=0x06C7, specials={ "compat", 0x06C7, 0x0674 }, unicodeslot=0x0677, }, [0x0678]={ arabic="d", category="lo", description="ARABIC LETTER HIGH HAMZA YEH", direction="al", linebreak="al", specials={ "compat", 0x064A, 0x0674 }, unicodeslot=0x0678, }, [0x0679]={ adobename="tteharabic", arabic="d", category="lo", description="ARABIC LETTER TTEH", direction="al", linebreak="al", unicodeslot=0x0679, }, [0x067A]={ arabic="d", category="lo", description="ARABIC LETTER TTEHEH", direction="al", linebreak="al", unicodeslot=0x067A, }, [0x067B]={ arabic="d", category="lo", description="ARABIC LETTER BEEH", direction="al", linebreak="al", unicodeslot=0x067B, }, [0x067C]={ arabic="d", category="lo", description="ARABIC LETTER TEH WITH RING", direction="al", linebreak="al", shcode=0x062A, unicodeslot=0x067C, }, [0x067D]={ arabic="d", category="lo", description="ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS", direction="al", linebreak="al", shcode=0x062A, unicodeslot=0x067D, }, [0x067E]={ adobename="peharabic", arabic="d", category="lo", description="ARABIC LETTER PEH", direction="al", linebreak="al", unicodeslot=0x067E, }, [0x067F]={ arabic="d", category="lo", description="ARABIC LETTER TEHEH", direction="al", linebreak="al", unicodeslot=0x067F, }, [0x0680]={ arabic="d", category="lo", description="ARABIC LETTER BEHEH", direction="al", linebreak="al", unicodeslot=0x0680, }, [0x0681]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH HAMZA ABOVE", direction="al", linebreak="al", shcode=0x062D, unicodeslot=0x0681, }, [0x0682]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE", direction="al", linebreak="al", shcode=0x062D, unicodeslot=0x0682, }, [0x0683]={ arabic="d", category="lo", description="ARABIC LETTER NYEH", direction="al", linebreak="al", unicodeslot=0x0683, }, [0x0684]={ arabic="d", category="lo", description="ARABIC LETTER DYEH", direction="al", linebreak="al", unicodeslot=0x0684, }, [0x0685]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x062D, unicodeslot=0x0685, }, [0x0686]={ adobename="tcheharabic", arabic="d", category="lo", description="ARABIC LETTER TCHEH", direction="al", linebreak="al", unicodeslot=0x0686, }, [0x0687]={ arabic="d", category="lo", description="ARABIC LETTER TCHEHEH", direction="al", linebreak="al", unicodeslot=0x0687, }, [0x0688]={ adobename="ddalarabic", arabic="r", category="lo", description="ARABIC LETTER DDAL", direction="al", linebreak="al", unicodeslot=0x0688, }, [0x0689]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH RING", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x0689, }, [0x068A]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH DOT BELOW", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x068A, }, [0x068B]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x068B, }, [0x068C]={ arabic="r", category="lo", description="ARABIC LETTER DAHAL", direction="al", linebreak="al", unicodeslot=0x068C, }, [0x068D]={ arabic="r", category="lo", description="ARABIC LETTER DDAHAL", direction="al", linebreak="al", unicodeslot=0x068D, }, [0x068E]={ arabic="r", category="lo", description="ARABIC LETTER DUL", direction="al", linebreak="al", unicodeslot=0x068E, }, [0x068F]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x068F, }, [0x0690]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH FOUR DOTS ABOVE", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x0690, }, [0x0691]={ adobename="rreharabic", arabic="r", category="lo", description="ARABIC LETTER RREH", direction="al", linebreak="al", unicodeslot=0x0691, }, [0x0692]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH SMALL V", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0692, }, [0x0693]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH RING", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0693, }, [0x0694]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH DOT BELOW", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0694, }, [0x0695]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH SMALL V BELOW", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0695, }, [0x0696]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0696, }, [0x0697]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH TWO DOTS ABOVE", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0697, }, [0x0698]={ adobename="jeharabic", arabic="r", category="lo", description="ARABIC LETTER JEH", direction="al", linebreak="al", unicodeslot=0x0698, }, [0x0699]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH FOUR DOTS ABOVE", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x0699, }, [0x069A]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE", direction="al", linebreak="al", shcode=0x0633, unicodeslot=0x069A, }, [0x069B]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH THREE DOTS BELOW", direction="al", linebreak="al", shcode=0x0633, unicodeslot=0x069B, }, [0x069C]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0633, unicodeslot=0x069C, }, [0x069D]={ arabic="d", category="lo", description="ARABIC LETTER SAD WITH TWO DOTS BELOW", direction="al", linebreak="al", shcode=0x0635, unicodeslot=0x069D, }, [0x069E]={ arabic="d", category="lo", description="ARABIC LETTER SAD WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0635, unicodeslot=0x069E, }, [0x069F]={ arabic="d", category="lo", description="ARABIC LETTER TAH WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0637, unicodeslot=0x069F, }, [0x06A0]={ arabic="d", category="lo", description="ARABIC LETTER AIN WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0639, unicodeslot=0x06A0, }, [0x06A1]={ arabic="d", category="lo", description="ARABIC LETTER DOTLESS FEH", direction="al", linebreak="al", unicodeslot=0x06A1, }, [0x06A2]={ arabic="d", category="lo", description="ARABIC LETTER FEH WITH DOT MOVED BELOW", direction="al", linebreak="al", shcode=0x0641, unicodeslot=0x06A2, }, [0x06A3]={ arabic="d", category="lo", description="ARABIC LETTER FEH WITH DOT BELOW", direction="al", linebreak="al", shcode=0x0641, unicodeslot=0x06A3, }, [0x06A4]={ adobename="veharabic", arabic="d", category="lo", description="ARABIC LETTER VEH", direction="al", linebreak="al", unicodeslot=0x06A4, }, [0x06A5]={ arabic="d", category="lo", description="ARABIC LETTER FEH WITH THREE DOTS BELOW", direction="al", linebreak="al", shcode=0x0641, unicodeslot=0x06A5, }, [0x06A6]={ arabic="d", category="lo", description="ARABIC LETTER PEHEH", direction="al", linebreak="al", unicodeslot=0x06A6, }, [0x06A7]={ arabic="d", category="lo", description="ARABIC LETTER QAF WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x0642, unicodeslot=0x06A7, }, [0x06A8]={ arabic="d", category="lo", description="ARABIC LETTER QAF WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0642, unicodeslot=0x06A8, }, [0x06A9]={ arabic="d", category="lo", description="ARABIC LETTER KEHEH", direction="al", linebreak="al", unicodeslot=0x06A9, }, [0x06AA]={ arabic="d", category="lo", description="ARABIC LETTER SWASH KAF", direction="al", linebreak="al", unicodeslot=0x06AA, }, [0x06AB]={ arabic="d", category="lo", description="ARABIC LETTER KAF WITH RING", direction="al", linebreak="al", shcode=0x0643, unicodeslot=0x06AB, }, [0x06AC]={ arabic="d", category="lo", description="ARABIC LETTER KAF WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x0643, unicodeslot=0x06AC, }, [0x06AD]={ arabic="d", category="lo", description="ARABIC LETTER NG", direction="al", linebreak="al", unicodeslot=0x06AD, }, [0x06AE]={ arabic="d", category="lo", description="ARABIC LETTER KAF WITH THREE DOTS BELOW", direction="al", linebreak="al", shcode=0x0643, unicodeslot=0x06AE, }, [0x06AF]={ adobename="gafarabic", arabic="d", category="lo", description="ARABIC LETTER GAF", direction="al", linebreak="al", unicodeslot=0x06AF, }, [0x06B0]={ arabic="d", category="lo", description="ARABIC LETTER GAF WITH RING", direction="al", linebreak="al", shcode=0x06AF, unicodeslot=0x06B0, }, [0x06B1]={ arabic="d", category="lo", description="ARABIC LETTER NGOEH", direction="al", linebreak="al", unicodeslot=0x06B1, }, [0x06B2]={ arabic="d", category="lo", description="ARABIC LETTER GAF WITH TWO DOTS BELOW", direction="al", linebreak="al", shcode=0x06AF, unicodeslot=0x06B2, }, [0x06B3]={ arabic="d", category="lo", description="ARABIC LETTER GUEH", direction="al", linebreak="al", unicodeslot=0x06B3, }, [0x06B4]={ arabic="d", category="lo", description="ARABIC LETTER GAF WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x06AF, unicodeslot=0x06B4, }, [0x06B5]={ arabic="d", category="lo", description="ARABIC LETTER LAM WITH SMALL V", direction="al", linebreak="al", shcode=0x0644, unicodeslot=0x06B5, }, [0x06B6]={ arabic="d", category="lo", description="ARABIC LETTER LAM WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x0644, unicodeslot=0x06B6, }, [0x06B7]={ arabic="d", category="lo", description="ARABIC LETTER LAM WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0644, unicodeslot=0x06B7, }, [0x06B8]={ arabic="d", category="lo", description="ARABIC LETTER LAM WITH THREE DOTS BELOW", direction="al", linebreak="al", shcode=0x0644, unicodeslot=0x06B8, }, [0x06B9]={ arabic="d", category="lo", description="ARABIC LETTER NOON WITH DOT BELOW", direction="al", linebreak="al", shcode=0x0646, unicodeslot=0x06B9, }, [0x06BA]={ adobename="noonghunnaarabic", arabic="d", category="lo", description="ARABIC LETTER NOON GHUNNA", direction="al", linebreak="al", unicodeslot=0x06BA, }, [0x06BB]={ arabic="d", category="lo", description="ARABIC LETTER RNOON", direction="al", linebreak="al", unicodeslot=0x06BB, }, [0x06BC]={ arabic="d", category="lo", description="ARABIC LETTER NOON WITH RING", direction="al", linebreak="al", shcode=0x0646, unicodeslot=0x06BC, }, [0x06BD]={ arabic="d", category="lo", description="ARABIC LETTER NOON WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0646, unicodeslot=0x06BD, }, [0x06BE]={ arabic="d", category="lo", description="ARABIC LETTER HEH DOACHASHMEE", direction="al", linebreak="al", unicodeslot=0x06BE, }, [0x06BF]={ arabic="d", category="lo", description="ARABIC LETTER TCHEH WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x0686, unicodeslot=0x06BF, }, [0x06C0]={ arabic="r", category="lo", description="ARABIC LETTER HEH WITH YEH ABOVE", direction="al", linebreak="al", shcode=0x0647, specials={ "char", 0x06D5, 0x0654 }, unicodeslot=0x06C0, }, [0x06C1]={ adobename="hehaltonearabic", arabic="d", category="lo", description="ARABIC LETTER HEH GOAL", direction="al", linebreak="al", unicodeslot=0x06C1, }, [0x06C2]={ arabic="d", category="lo", description="ARABIC LETTER HEH GOAL WITH HAMZA ABOVE", direction="al", linebreak="al", specials={ "char", 0x06C1, 0x0654 }, unicodeslot=0x06C2, }, [0x06C3]={ arabic="r", category="lo", description="ARABIC LETTER TEH MARBUTA GOAL", direction="al", linebreak="al", unicodeslot=0x06C3, }, [0x06C4]={ arabic="r", category="lo", description="ARABIC LETTER WAW WITH RING", direction="al", linebreak="al", shcode=0x0648, unicodeslot=0x06C4, }, [0x06C5]={ arabic="r", category="lo", description="ARABIC LETTER KIRGHIZ OE", direction="al", linebreak="al", unicodeslot=0x06C5, }, [0x06C6]={ arabic="r", category="lo", description="ARABIC LETTER OE", direction="al", linebreak="al", unicodeslot=0x06C6, }, [0x06C7]={ arabic="r", category="lo", description="ARABIC LETTER U", direction="al", linebreak="al", unicodeslot=0x06C7, }, [0x06C8]={ arabic="r", category="lo", description="ARABIC LETTER YU", direction="al", linebreak="al", unicodeslot=0x06C8, }, [0x06C9]={ arabic="r", category="lo", description="ARABIC LETTER KIRGHIZ YU", direction="al", linebreak="al", unicodeslot=0x06C9, }, [0x06CA]={ arabic="r", category="lo", description="ARABIC LETTER WAW WITH TWO DOTS ABOVE", direction="al", linebreak="al", shcode=0x0648, unicodeslot=0x06CA, }, [0x06CB]={ arabic="r", category="lo", description="ARABIC LETTER VE", direction="al", linebreak="al", unicodeslot=0x06CB, }, [0x06CC]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH", direction="al", linebreak="al", unicodeslot=0x06CC, }, [0x06CD]={ arabic="r", category="lo", description="ARABIC LETTER YEH WITH TAIL", direction="al", linebreak="al", shcode=0x064A, unicodeslot=0x06CD, }, [0x06CE]={ arabic="d", category="lo", description="ARABIC LETTER YEH WITH SMALL V", direction="al", linebreak="al", shcode=0x064A, unicodeslot=0x06CE, }, [0x06CF]={ arabic="r", category="lo", description="ARABIC LETTER WAW WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x0648, unicodeslot=0x06CF, }, [0x06D0]={ arabic="d", category="lo", description="ARABIC LETTER E", direction="al", linebreak="al", unicodeslot=0x06D0, }, [0x06D1]={ adobename="yehthreedotsbelowarabic", arabic="d", category="lo", description="ARABIC LETTER YEH WITH THREE DOTS BELOW", direction="al", linebreak="al", shcode=0x064A, unicodeslot=0x06D1, }, [0x06D2]={ adobename="yehbarreearabic", arabic="r", category="lo", description="ARABIC LETTER YEH BARREE", direction="al", linebreak="al", unicodeslot=0x06D2, }, [0x06D3]={ arabic="r", category="lo", description="ARABIC LETTER YEH BARREE WITH HAMZA ABOVE", direction="al", linebreak="al", specials={ "char", 0x06D2, 0x0654 }, unicodeslot=0x06D3, }, [0x06D4]={ category="po", description="ARABIC FULL STOP", direction="al", linebreak="ex", unicodeslot=0x06D4, }, [0x06D5]={ adobename="afii57534", arabic="r", category="lo", description="ARABIC LETTER AE", direction="al", linebreak="al", unicodeslot=0x06D5, }, [0x06D6]={ category="mn", description="ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA", direction="nsm", linebreak="cm", unicodeslot=0x06D6, }, [0x06D7]={ category="mn", description="ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA", direction="nsm", linebreak="cm", unicodeslot=0x06D7, }, [0x06D8]={ category="mn", description="ARABIC SMALL HIGH MEEM INITIAL FORM", direction="nsm", linebreak="cm", unicodeslot=0x06D8, }, [0x06D9]={ category="mn", description="ARABIC SMALL HIGH LAM ALEF", direction="nsm", linebreak="cm", unicodeslot=0x06D9, }, [0x06DA]={ category="mn", description="ARABIC SMALL HIGH JEEM", direction="nsm", linebreak="cm", unicodeslot=0x06DA, }, [0x06DB]={ category="mn", description="ARABIC SMALL HIGH THREE DOTS", direction="nsm", linebreak="cm", unicodeslot=0x06DB, }, [0x06DC]={ category="mn", description="ARABIC SMALL HIGH SEEN", direction="nsm", linebreak="cm", unicodeslot=0x06DC, }, [0x06DD]={ arabic="u", category="cf", description="ARABIC END OF AYAH", direction="an", linebreak="al", unicodeslot=0x06DD, visible="yes", }, [0x06DE]={ category="me", description="ARABIC START OF RUB EL HIZB", direction="on", linebreak="al", unicodeslot=0x06DE, }, [0x06DF]={ category="mn", description="ARABIC SMALL HIGH ROUNDED ZERO", direction="nsm", linebreak="cm", unicodeslot=0x06DF, }, [0x06E0]={ category="mn", description="ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO", direction="nsm", linebreak="cm", unicodeslot=0x06E0, }, [0x06E1]={ category="mn", description="ARABIC SMALL HIGH DOTLESS HEAD OF KHAH", direction="nsm", linebreak="cm", unicodeslot=0x06E1, }, [0x06E2]={ category="mn", description="ARABIC SMALL HIGH MEEM ISOLATED FORM", direction="nsm", linebreak="cm", unicodeslot=0x06E2, }, [0x06E3]={ category="mn", description="ARABIC SMALL LOW SEEN", direction="nsm", linebreak="cm", unicodeslot=0x06E3, }, [0x06E4]={ category="mn", description="ARABIC SMALL HIGH MADDA", direction="nsm", linebreak="cm", unicodeslot=0x06E4, }, [0x06E5]={ category="lm", description="ARABIC SMALL WAW", direction="al", linebreak="al", unicodeslot=0x06E5, }, [0x06E6]={ category="lm", description="ARABIC SMALL YEH", direction="al", linebreak="al", unicodeslot=0x06E6, }, [0x06E7]={ category="mn", description="ARABIC SMALL HIGH YEH", direction="nsm", linebreak="cm", unicodeslot=0x06E7, }, [0x06E8]={ category="mn", description="ARABIC SMALL HIGH NOON", direction="nsm", linebreak="cm", unicodeslot=0x06E8, }, [0x06E9]={ category="so", description="ARABIC PLACE OF SAJDAH", direction="on", linebreak="al", unicodeslot=0x06E9, }, [0x06EA]={ category="mn", description="ARABIC EMPTY CENTRE LOW STOP", direction="nsm", linebreak="cm", unicodeslot=0x06EA, }, [0x06EB]={ category="mn", description="ARABIC EMPTY CENTRE HIGH STOP", direction="nsm", linebreak="cm", unicodeslot=0x06EB, }, [0x06EC]={ category="mn", description="ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE", direction="nsm", linebreak="cm", unicodeslot=0x06EC, }, [0x06ED]={ category="mn", description="ARABIC SMALL LOW MEEM", direction="nsm", linebreak="cm", unicodeslot=0x06ED, }, [0x06EE]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH INVERTED V", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x06EE, }, [0x06EF]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH INVERTED V", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x06EF, }, [0x06F0]={ adobename="zeropersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT ZERO", direction="en", linebreak="nu", unicodeslot=0x06F0, }, [0x06F1]={ adobename="onepersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT ONE", direction="en", linebreak="nu", unicodeslot=0x06F1, }, [0x06F2]={ adobename="twopersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT TWO", direction="en", linebreak="nu", unicodeslot=0x06F2, }, [0x06F3]={ adobename="threepersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT THREE", direction="en", linebreak="nu", unicodeslot=0x06F3, }, [0x06F4]={ adobename="fourpersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT FOUR", direction="en", linebreak="nu", unicodeslot=0x06F4, }, [0x06F5]={ adobename="fivepersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT FIVE", direction="en", linebreak="nu", unicodeslot=0x06F5, }, [0x06F6]={ adobename="sixpersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT SIX", direction="en", linebreak="nu", unicodeslot=0x06F6, }, [0x06F7]={ adobename="sevenpersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT SEVEN", direction="en", linebreak="nu", unicodeslot=0x06F7, }, [0x06F8]={ adobename="eightpersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT EIGHT", direction="en", linebreak="nu", unicodeslot=0x06F8, }, [0x06F9]={ adobename="ninepersian", category="nd", description="EXTENDED ARABIC-INDIC DIGIT NINE", direction="en", linebreak="nu", unicodeslot=0x06F9, }, [0x06FA]={ arabic="d", category="lo", description="ARABIC LETTER SHEEN WITH DOT BELOW", direction="al", linebreak="al", shcode=0x0634, unicodeslot=0x06FA, }, [0x06FB]={ arabic="d", category="lo", description="ARABIC LETTER DAD WITH DOT BELOW", direction="al", linebreak="al", shcode=0x0636, unicodeslot=0x06FB, }, [0x06FC]={ arabic="d", category="lo", description="ARABIC LETTER GHAIN WITH DOT BELOW", direction="al", linebreak="al", shcode=0x063A, unicodeslot=0x06FC, }, [0x06FD]={ category="so", description="ARABIC SIGN SINDHI AMPERSAND", direction="al", linebreak="al", unicodeslot=0x06FD, }, [0x06FE]={ category="so", description="ARABIC SIGN SINDHI POSTPOSITION MEN", direction="al", linebreak="al", unicodeslot=0x06FE, }, [0x06FF]={ arabic="d", category="lo", description="ARABIC LETTER HEH WITH INVERTED V", direction="al", linebreak="al", shcode=0x0647, unicodeslot=0x06FF, }, [0x0700]={ category="po", description="SYRIAC END OF PARAGRAPH", direction="al", linebreak="al", unicodeslot=0x0700, }, [0x0701]={ category="po", description="SYRIAC SUPRALINEAR FULL STOP", direction="al", linebreak="al", unicodeslot=0x0701, }, [0x0702]={ category="po", description="SYRIAC SUBLINEAR FULL STOP", direction="al", linebreak="al", unicodeslot=0x0702, }, [0x0703]={ category="po", description="SYRIAC SUPRALINEAR COLON", direction="al", linebreak="al", unicodeslot=0x0703, }, [0x0704]={ category="po", description="SYRIAC SUBLINEAR COLON", direction="al", linebreak="al", unicodeslot=0x0704, }, [0x0705]={ category="po", description="SYRIAC HORIZONTAL COLON", direction="al", linebreak="al", unicodeslot=0x0705, }, [0x0706]={ category="po", description="SYRIAC COLON SKEWED LEFT", direction="al", linebreak="al", unicodeslot=0x0706, }, [0x0707]={ category="po", description="SYRIAC COLON SKEWED RIGHT", direction="al", linebreak="al", unicodeslot=0x0707, }, [0x0708]={ category="po", description="SYRIAC SUPRALINEAR COLON SKEWED LEFT", direction="al", linebreak="al", unicodeslot=0x0708, }, [0x0709]={ category="po", description="SYRIAC SUBLINEAR COLON SKEWED RIGHT", direction="al", linebreak="al", unicodeslot=0x0709, }, [0x070A]={ category="po", description="SYRIAC CONTRACTION", direction="al", linebreak="al", unicodeslot=0x070A, }, [0x070B]={ category="po", description="SYRIAC HARKLEAN OBELUS", direction="al", linebreak="al", unicodeslot=0x070B, }, [0x070C]={ category="po", description="SYRIAC HARKLEAN METOBELUS", direction="al", linebreak="al", unicodeslot=0x070C, }, [0x070D]={ category="po", description="SYRIAC HARKLEAN ASTERISCUS", direction="al", linebreak="al", unicodeslot=0x070D, }, [0x070F]={ category="cf", description="SYRIAC ABBREVIATION MARK", direction="al", linebreak="al", unicodeslot=0x070F, visible="yes", }, [0x0710]={ arabic="r", category="lo", description="SYRIAC LETTER ALAPH", direction="al", linebreak="al", unicodeslot=0x0710, }, [0x0711]={ category="mn", description="SYRIAC LETTER SUPERSCRIPT ALAPH", direction="nsm", linebreak="cm", unicodeslot=0x0711, }, [0x0712]={ arabic="d", category="lo", description="SYRIAC LETTER BETH", direction="al", linebreak="al", unicodeslot=0x0712, }, [0x0713]={ arabic="d", category="lo", description="SYRIAC LETTER GAMAL", direction="al", linebreak="al", unicodeslot=0x0713, }, [0x0714]={ arabic="d", category="lo", description="SYRIAC LETTER GAMAL GARSHUNI", direction="al", linebreak="al", unicodeslot=0x0714, }, [0x0715]={ arabic="r", category="lo", description="SYRIAC LETTER DALATH", direction="al", linebreak="al", unicodeslot=0x0715, }, [0x0716]={ arabic="r", category="lo", description="SYRIAC LETTER DOTLESS DALATH RISH", direction="al", linebreak="al", unicodeslot=0x0716, }, [0x0717]={ arabic="r", category="lo", description="SYRIAC LETTER HE", direction="al", linebreak="al", unicodeslot=0x0717, }, [0x0718]={ arabic="r", category="lo", description="SYRIAC LETTER WAW", direction="al", linebreak="al", unicodeslot=0x0718, }, [0x0719]={ arabic="r", category="lo", description="SYRIAC LETTER ZAIN", direction="al", linebreak="al", unicodeslot=0x0719, }, [0x071A]={ arabic="d", category="lo", description="SYRIAC LETTER HETH", direction="al", linebreak="al", unicodeslot=0x071A, }, [0x071B]={ arabic="d", category="lo", description="SYRIAC LETTER TETH", direction="al", linebreak="al", unicodeslot=0x071B, }, [0x071C]={ arabic="d", category="lo", description="SYRIAC LETTER TETH GARSHUNI", direction="al", linebreak="al", unicodeslot=0x071C, }, [0x071D]={ arabic="d", category="lo", description="SYRIAC LETTER YUDH", direction="al", linebreak="al", unicodeslot=0x071D, }, [0x071E]={ arabic="r", category="lo", description="SYRIAC LETTER YUDH HE", direction="al", linebreak="al", unicodeslot=0x071E, }, [0x071F]={ arabic="d", category="lo", description="SYRIAC LETTER KAPH", direction="al", linebreak="al", unicodeslot=0x071F, }, [0x0720]={ arabic="d", category="lo", description="SYRIAC LETTER LAMADH", direction="al", linebreak="al", unicodeslot=0x0720, }, [0x0721]={ arabic="d", category="lo", description="SYRIAC LETTER MIM", direction="al", linebreak="al", unicodeslot=0x0721, }, [0x0722]={ arabic="d", category="lo", description="SYRIAC LETTER NUN", direction="al", linebreak="al", unicodeslot=0x0722, }, [0x0723]={ arabic="d", category="lo", description="SYRIAC LETTER SEMKATH", direction="al", linebreak="al", unicodeslot=0x0723, }, [0x0724]={ arabic="d", category="lo", description="SYRIAC LETTER FINAL SEMKATH", direction="al", linebreak="al", unicodeslot=0x0724, }, [0x0725]={ arabic="d", category="lo", description="SYRIAC LETTER E", direction="al", linebreak="al", unicodeslot=0x0725, }, [0x0726]={ arabic="d", category="lo", description="SYRIAC LETTER PE", direction="al", linebreak="al", unicodeslot=0x0726, }, [0x0727]={ arabic="d", category="lo", description="SYRIAC LETTER REVERSED PE", direction="al", linebreak="al", unicodeslot=0x0727, }, [0x0728]={ arabic="r", category="lo", description="SYRIAC LETTER SADHE", direction="al", linebreak="al", unicodeslot=0x0728, }, [0x0729]={ arabic="d", category="lo", description="SYRIAC LETTER QAPH", direction="al", linebreak="al", unicodeslot=0x0729, }, [0x072A]={ arabic="r", category="lo", description="SYRIAC LETTER RISH", direction="al", linebreak="al", unicodeslot=0x072A, }, [0x072B]={ arabic="d", category="lo", description="SYRIAC LETTER SHIN", direction="al", linebreak="al", unicodeslot=0x072B, }, [0x072C]={ arabic="r", category="lo", description="SYRIAC LETTER TAW", direction="al", linebreak="al", unicodeslot=0x072C, }, [0x072D]={ arabic="d", category="lo", description="SYRIAC LETTER PERSIAN BHETH", direction="al", linebreak="al", unicodeslot=0x072D, }, [0x072E]={ arabic="d", category="lo", description="SYRIAC LETTER PERSIAN GHAMAL", direction="al", linebreak="al", unicodeslot=0x072E, }, [0x072F]={ arabic="r", category="lo", description="SYRIAC LETTER PERSIAN DHALATH", direction="al", linebreak="al", unicodeslot=0x072F, }, [0x0730]={ category="mn", description="SYRIAC PTHAHA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0730, }, [0x0731]={ category="mn", description="SYRIAC PTHAHA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0731, }, [0x0732]={ category="mn", description="SYRIAC PTHAHA DOTTED", direction="nsm", linebreak="cm", unicodeslot=0x0732, }, [0x0733]={ category="mn", description="SYRIAC ZQAPHA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0733, }, [0x0734]={ category="mn", description="SYRIAC ZQAPHA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0734, }, [0x0735]={ category="mn", description="SYRIAC ZQAPHA DOTTED", direction="nsm", linebreak="cm", unicodeslot=0x0735, }, [0x0736]={ category="mn", description="SYRIAC RBASA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0736, }, [0x0737]={ category="mn", description="SYRIAC RBASA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0737, }, [0x0738]={ category="mn", description="SYRIAC DOTTED ZLAMA HORIZONTAL", direction="nsm", linebreak="cm", unicodeslot=0x0738, }, [0x0739]={ category="mn", description="SYRIAC DOTTED ZLAMA ANGULAR", direction="nsm", linebreak="cm", unicodeslot=0x0739, }, [0x073A]={ category="mn", description="SYRIAC HBASA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x073A, }, [0x073B]={ category="mn", description="SYRIAC HBASA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x073B, }, [0x073C]={ category="mn", description="SYRIAC HBASA-ESASA DOTTED", direction="nsm", linebreak="cm", unicodeslot=0x073C, }, [0x073D]={ category="mn", description="SYRIAC ESASA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x073D, }, [0x073E]={ category="mn", description="SYRIAC ESASA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x073E, }, [0x073F]={ category="mn", description="SYRIAC RWAHA", direction="nsm", linebreak="cm", unicodeslot=0x073F, }, [0x0740]={ category="mn", description="SYRIAC FEMININE DOT", direction="nsm", linebreak="cm", unicodeslot=0x0740, }, [0x0741]={ category="mn", description="SYRIAC QUSHSHAYA", direction="nsm", linebreak="cm", unicodeslot=0x0741, }, [0x0742]={ category="mn", description="SYRIAC RUKKAKHA", direction="nsm", linebreak="cm", unicodeslot=0x0742, }, [0x0743]={ category="mn", description="SYRIAC TWO VERTICAL DOTS ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0743, }, [0x0744]={ category="mn", description="SYRIAC TWO VERTICAL DOTS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0744, }, [0x0745]={ category="mn", description="SYRIAC THREE DOTS ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0745, }, [0x0746]={ category="mn", description="SYRIAC THREE DOTS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0746, }, [0x0747]={ category="mn", description="SYRIAC OBLIQUE LINE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x0747, }, [0x0748]={ category="mn", description="SYRIAC OBLIQUE LINE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x0748, }, [0x0749]={ category="mn", description="SYRIAC MUSIC", direction="nsm", linebreak="cm", unicodeslot=0x0749, }, [0x074A]={ category="mn", description="SYRIAC BARREKH", direction="nsm", linebreak="cm", unicodeslot=0x074A, }, [0x074D]={ arabic="r", category="lo", description="SYRIAC LETTER SOGDIAN ZHAIN", direction="al", linebreak="al", unicodeslot=0x074D, }, [0x074E]={ arabic="d", category="lo", description="SYRIAC LETTER SOGDIAN KHAPH", direction="al", linebreak="al", unicodeslot=0x074E, }, [0x074F]={ arabic="d", category="lo", description="SYRIAC LETTER SOGDIAN FE", direction="al", linebreak="al", unicodeslot=0x074F, }, [0x0750]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0750, }, [0x0751]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0751, }, [0x0752]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0752, }, [0x0753]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0753, }, [0x0754]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0754, }, [0x0755]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH INVERTED SMALL V BELOW", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0755, }, [0x0756]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH SMALL V", direction="al", linebreak="al", shcode=0x0628, unicodeslot=0x0756, }, [0x0757]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH TWO DOTS ABOVE", direction="al", linebreak="al", shcode=0x062D, unicodeslot=0x0757, }, [0x0758]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW", direction="al", linebreak="al", shcode=0x062D, unicodeslot=0x0758, }, [0x0759]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x0759, }, [0x075A]={ arabic="r", category="lo", description="ARABIC LETTER DAL WITH INVERTED SMALL V BELOW", direction="al", linebreak="al", shcode=0x062F, unicodeslot=0x075A, }, [0x075B]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH STROKE", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x075B, }, [0x075C]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH FOUR DOTS ABOVE", direction="al", linebreak="al", shcode=0x0633, unicodeslot=0x075C, }, [0x075D]={ arabic="d", category="lo", description="ARABIC LETTER AIN WITH TWO DOTS ABOVE", direction="al", linebreak="al", shcode=0x0639, unicodeslot=0x075D, }, [0x075E]={ arabic="d", category="lo", description="ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE", direction="al", linebreak="al", shcode=0x0639, unicodeslot=0x075E, }, [0x075F]={ arabic="d", category="lo", description="ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE", direction="al", linebreak="al", shcode=0x0639, unicodeslot=0x075F, }, [0x0760]={ arabic="d", category="lo", description="ARABIC LETTER FEH WITH TWO DOTS BELOW", direction="al", linebreak="al", shcode=0x0641, unicodeslot=0x0760, }, [0x0761]={ arabic="d", category="lo", description="ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW", direction="al", linebreak="al", shcode=0x0641, unicodeslot=0x0761, }, [0x0762]={ arabic="d", category="lo", description="ARABIC LETTER KEHEH WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x06A9, unicodeslot=0x0762, }, [0x0763]={ arabic="d", category="lo", description="ARABIC LETTER KEHEH WITH THREE DOTS ABOVE", direction="al", linebreak="al", shcode=0x06A9, unicodeslot=0x0763, }, [0x0764]={ arabic="d", category="lo", description="ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW", direction="al", linebreak="al", shcode=0x06A9, unicodeslot=0x0764, }, [0x0765]={ arabic="d", category="lo", description="ARABIC LETTER MEEM WITH DOT ABOVE", direction="al", linebreak="al", shcode=0x0645, unicodeslot=0x0765, }, [0x0766]={ arabic="d", category="lo", description="ARABIC LETTER MEEM WITH DOT BELOW", direction="al", linebreak="al", shcode=0x0645, unicodeslot=0x0766, }, [0x0767]={ arabic="d", category="lo", description="ARABIC LETTER NOON WITH TWO DOTS BELOW", direction="al", linebreak="al", shcode=0x0646, unicodeslot=0x0767, }, [0x0768]={ arabic="d", category="lo", description="ARABIC LETTER NOON WITH SMALL TAH", direction="al", linebreak="al", shcode=0x0646, unicodeslot=0x0768, }, [0x0769]={ arabic="d", category="lo", description="ARABIC LETTER NOON WITH SMALL V", direction="al", linebreak="al", shcode=0x0646, unicodeslot=0x0769, }, [0x076A]={ arabic="d", category="lo", description="ARABIC LETTER LAM WITH BAR", direction="al", linebreak="al", shcode=0x0644, unicodeslot=0x076A, }, [0x076B]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x076B, }, [0x076C]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH HAMZA ABOVE", direction="al", linebreak="al", shcode=0x0631, unicodeslot=0x076C, }, [0x076D]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE", direction="al", linebreak="al", shcode=0x0633, unicodeslot=0x076D, }, [0x076E]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW", direction="al", linebreak="al", unicodeslot=0x076E, }, [0x076F]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS", direction="al", linebreak="al", unicodeslot=0x076F, }, [0x0770]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS", direction="al", linebreak="al", unicodeslot=0x0770, }, [0x0771]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS", direction="al", linebreak="al", unicodeslot=0x0771, }, [0x0772]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE", direction="al", linebreak="al", unicodeslot=0x0772, }, [0x0773]={ arabic="r", category="lo", description="ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", direction="al", linebreak="al", unicodeslot=0x0773, }, [0x0774]={ arabic="r", category="lo", description="ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", direction="al", linebreak="al", unicodeslot=0x0774, }, [0x0775]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", direction="al", linebreak="al", unicodeslot=0x0775, }, [0x0776]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", direction="al", linebreak="al", unicodeslot=0x0776, }, [0x0777]={ arabic="d", category="lo", description="ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW", direction="al", linebreak="al", unicodeslot=0x0777, }, [0x0778]={ arabic="r", category="lo", description="ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", direction="al", linebreak="al", unicodeslot=0x0778, }, [0x0779]={ arabic="r", category="lo", description="ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", direction="al", linebreak="al", unicodeslot=0x0779, }, [0x077A]={ arabic="d", category="lo", description="ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", direction="al", linebreak="al", unicodeslot=0x077A, }, [0x077B]={ arabic="d", category="lo", description="ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", direction="al", linebreak="al", unicodeslot=0x077B, }, [0x077C]={ arabic="d", category="lo", description="ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW", direction="al", linebreak="al", unicodeslot=0x077C, }, [0x077D]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE", direction="al", linebreak="al", unicodeslot=0x077D, }, [0x077E]={ arabic="d", category="lo", description="ARABIC LETTER SEEN WITH INVERTED V", direction="al", linebreak="al", unicodeslot=0x077E, }, [0x077F]={ arabic="d", category="lo", description="ARABIC LETTER KAF WITH TWO DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x077F, }, [0x0780]={ category="lo", description="THAANA LETTER HAA", direction="al", linebreak="al", unicodeslot=0x0780, }, [0x0781]={ category="lo", description="THAANA LETTER SHAVIYANI", direction="al", linebreak="al", unicodeslot=0x0781, }, [0x0782]={ category="lo", description="THAANA LETTER NOONU", direction="al", linebreak="al", unicodeslot=0x0782, }, [0x0783]={ category="lo", description="THAANA LETTER RAA", direction="al", linebreak="al", unicodeslot=0x0783, }, [0x0784]={ category="lo", description="THAANA LETTER BAA", direction="al", linebreak="al", unicodeslot=0x0784, }, [0x0785]={ category="lo", description="THAANA LETTER LHAVIYANI", direction="al", linebreak="al", unicodeslot=0x0785, }, [0x0786]={ category="lo", description="THAANA LETTER KAAFU", direction="al", linebreak="al", unicodeslot=0x0786, }, [0x0787]={ category="lo", description="THAANA LETTER ALIFU", direction="al", linebreak="al", unicodeslot=0x0787, }, [0x0788]={ category="lo", description="THAANA LETTER VAAVU", direction="al", linebreak="al", unicodeslot=0x0788, }, [0x0789]={ category="lo", description="THAANA LETTER MEEMU", direction="al", linebreak="al", unicodeslot=0x0789, }, [0x078A]={ category="lo", description="THAANA LETTER FAAFU", direction="al", linebreak="al", unicodeslot=0x078A, }, [0x078B]={ category="lo", description="THAANA LETTER DHAALU", direction="al", linebreak="al", unicodeslot=0x078B, }, [0x078C]={ category="lo", description="THAANA LETTER THAA", direction="al", linebreak="al", unicodeslot=0x078C, }, [0x078D]={ category="lo", description="THAANA LETTER LAAMU", direction="al", linebreak="al", unicodeslot=0x078D, }, [0x078E]={ category="lo", description="THAANA LETTER GAAFU", direction="al", linebreak="al", unicodeslot=0x078E, }, [0x078F]={ category="lo", description="THAANA LETTER GNAVIYANI", direction="al", linebreak="al", unicodeslot=0x078F, }, [0x0790]={ category="lo", description="THAANA LETTER SEENU", direction="al", linebreak="al", unicodeslot=0x0790, }, [0x0791]={ category="lo", description="THAANA LETTER DAVIYANI", direction="al", linebreak="al", unicodeslot=0x0791, }, [0x0792]={ category="lo", description="THAANA LETTER ZAVIYANI", direction="al", linebreak="al", unicodeslot=0x0792, }, [0x0793]={ category="lo", description="THAANA LETTER TAVIYANI", direction="al", linebreak="al", unicodeslot=0x0793, }, [0x0794]={ category="lo", description="THAANA LETTER YAA", direction="al", linebreak="al", unicodeslot=0x0794, }, [0x0795]={ category="lo", description="THAANA LETTER PAVIYANI", direction="al", linebreak="al", unicodeslot=0x0795, }, [0x0796]={ category="lo", description="THAANA LETTER JAVIYANI", direction="al", linebreak="al", unicodeslot=0x0796, }, [0x0797]={ category="lo", description="THAANA LETTER CHAVIYANI", direction="al", linebreak="al", unicodeslot=0x0797, }, [0x0798]={ category="lo", description="THAANA LETTER TTAA", direction="al", linebreak="al", unicodeslot=0x0798, }, [0x0799]={ category="lo", description="THAANA LETTER HHAA", direction="al", linebreak="al", unicodeslot=0x0799, }, [0x079A]={ category="lo", description="THAANA LETTER KHAA", direction="al", linebreak="al", unicodeslot=0x079A, }, [0x079B]={ category="lo", description="THAANA LETTER THAALU", direction="al", linebreak="al", unicodeslot=0x079B, }, [0x079C]={ category="lo", description="THAANA LETTER ZAA", direction="al", linebreak="al", unicodeslot=0x079C, }, [0x079D]={ category="lo", description="THAANA LETTER SHEENU", direction="al", linebreak="al", unicodeslot=0x079D, }, [0x079E]={ category="lo", description="THAANA LETTER SAADHU", direction="al", linebreak="al", unicodeslot=0x079E, }, [0x079F]={ category="lo", description="THAANA LETTER DAADHU", direction="al", linebreak="al", unicodeslot=0x079F, }, [0x07A0]={ category="lo", description="THAANA LETTER TO", direction="al", linebreak="al", unicodeslot=0x07A0, }, [0x07A1]={ category="lo", description="THAANA LETTER ZO", direction="al", linebreak="al", unicodeslot=0x07A1, }, [0x07A2]={ category="lo", description="THAANA LETTER AINU", direction="al", linebreak="al", unicodeslot=0x07A2, }, [0x07A3]={ category="lo", description="THAANA LETTER GHAINU", direction="al", linebreak="al", unicodeslot=0x07A3, }, [0x07A4]={ category="lo", description="THAANA LETTER QAAFU", direction="al", linebreak="al", unicodeslot=0x07A4, }, [0x07A5]={ category="lo", description="THAANA LETTER WAAVU", direction="al", linebreak="al", unicodeslot=0x07A5, }, [0x07A6]={ category="mn", description="THAANA ABAFILI", direction="nsm", linebreak="cm", unicodeslot=0x07A6, }, [0x07A7]={ category="mn", description="THAANA AABAAFILI", direction="nsm", linebreak="cm", unicodeslot=0x07A7, }, [0x07A8]={ category="mn", description="THAANA IBIFILI", direction="nsm", linebreak="cm", unicodeslot=0x07A8, }, [0x07A9]={ category="mn", description="THAANA EEBEEFILI", direction="nsm", linebreak="cm", unicodeslot=0x07A9, }, [0x07AA]={ category="mn", description="THAANA UBUFILI", direction="nsm", linebreak="cm", unicodeslot=0x07AA, }, [0x07AB]={ category="mn", description="THAANA OOBOOFILI", direction="nsm", linebreak="cm", unicodeslot=0x07AB, }, [0x07AC]={ category="mn", description="THAANA EBEFILI", direction="nsm", linebreak="cm", unicodeslot=0x07AC, }, [0x07AD]={ category="mn", description="THAANA EYBEYFILI", direction="nsm", linebreak="cm", unicodeslot=0x07AD, }, [0x07AE]={ category="mn", description="THAANA OBOFILI", direction="nsm", linebreak="cm", unicodeslot=0x07AE, }, [0x07AF]={ category="mn", description="THAANA OABOAFILI", direction="nsm", linebreak="cm", unicodeslot=0x07AF, }, [0x07B0]={ category="mn", description="THAANA SUKUN", direction="nsm", linebreak="cm", unicodeslot=0x07B0, }, [0x07B1]={ category="lo", description="THAANA LETTER NAA", direction="al", linebreak="al", unicodeslot=0x07B1, }, [0x07C0]={ category="nd", description="NKO DIGIT ZERO", direction="r", linebreak="nu", unicodeslot=0x07C0, }, [0x07C1]={ category="nd", description="NKO DIGIT ONE", direction="r", linebreak="nu", unicodeslot=0x07C1, }, [0x07C2]={ category="nd", description="NKO DIGIT TWO", direction="r", linebreak="nu", unicodeslot=0x07C2, }, [0x07C3]={ category="nd", description="NKO DIGIT THREE", direction="r", linebreak="nu", unicodeslot=0x07C3, }, [0x07C4]={ category="nd", description="NKO DIGIT FOUR", direction="r", linebreak="nu", unicodeslot=0x07C4, }, [0x07C5]={ category="nd", description="NKO DIGIT FIVE", direction="r", linebreak="nu", unicodeslot=0x07C5, }, [0x07C6]={ category="nd", description="NKO DIGIT SIX", direction="r", linebreak="nu", unicodeslot=0x07C6, }, [0x07C7]={ category="nd", description="NKO DIGIT SEVEN", direction="r", linebreak="nu", unicodeslot=0x07C7, }, [0x07C8]={ category="nd", description="NKO DIGIT EIGHT", direction="r", linebreak="nu", unicodeslot=0x07C8, }, [0x07C9]={ category="nd", description="NKO DIGIT NINE", direction="r", linebreak="nu", unicodeslot=0x07C9, }, [0x07CA]={ arabic="d", category="lo", description="NKO LETTER A", direction="r", linebreak="al", unicodeslot=0x07CA, }, [0x07CB]={ arabic="d", category="lo", description="NKO LETTER EE", direction="r", linebreak="al", unicodeslot=0x07CB, }, [0x07CC]={ arabic="d", category="lo", description="NKO LETTER I", direction="r", linebreak="al", unicodeslot=0x07CC, }, [0x07CD]={ arabic="d", category="lo", description="NKO LETTER E", direction="r", linebreak="al", unicodeslot=0x07CD, }, [0x07CE]={ arabic="d", category="lo", description="NKO LETTER U", direction="r", linebreak="al", unicodeslot=0x07CE, }, [0x07CF]={ arabic="d", category="lo", description="NKO LETTER OO", direction="r", linebreak="al", unicodeslot=0x07CF, }, [0x07D0]={ arabic="d", category="lo", description="NKO LETTER O", direction="r", linebreak="al", unicodeslot=0x07D0, }, [0x07D1]={ arabic="d", category="lo", description="NKO LETTER DAGBASINNA", direction="r", linebreak="al", unicodeslot=0x07D1, }, [0x07D2]={ arabic="d", category="lo", description="NKO LETTER N", direction="r", linebreak="al", unicodeslot=0x07D2, }, [0x07D3]={ arabic="d", category="lo", description="NKO LETTER BA", direction="r", linebreak="al", unicodeslot=0x07D3, }, [0x07D4]={ arabic="d", category="lo", description="NKO LETTER PA", direction="r", linebreak="al", unicodeslot=0x07D4, }, [0x07D5]={ arabic="d", category="lo", description="NKO LETTER TA", direction="r", linebreak="al", unicodeslot=0x07D5, }, [0x07D6]={ arabic="d", category="lo", description="NKO LETTER JA", direction="r", linebreak="al", unicodeslot=0x07D6, }, [0x07D7]={ arabic="d", category="lo", description="NKO LETTER CHA", direction="r", linebreak="al", unicodeslot=0x07D7, }, [0x07D8]={ arabic="d", category="lo", description="NKO LETTER DA", direction="r", linebreak="al", unicodeslot=0x07D8, }, [0x07D9]={ arabic="d", category="lo", description="NKO LETTER RA", direction="r", linebreak="al", unicodeslot=0x07D9, }, [0x07DA]={ arabic="d", category="lo", description="NKO LETTER RRA", direction="r", linebreak="al", unicodeslot=0x07DA, }, [0x07DB]={ arabic="d", category="lo", description="NKO LETTER SA", direction="r", linebreak="al", unicodeslot=0x07DB, }, [0x07DC]={ arabic="d", category="lo", description="NKO LETTER GBA", direction="r", linebreak="al", unicodeslot=0x07DC, }, [0x07DD]={ arabic="d", category="lo", description="NKO LETTER FA", direction="r", linebreak="al", unicodeslot=0x07DD, }, [0x07DE]={ arabic="d", category="lo", description="NKO LETTER KA", direction="r", linebreak="al", unicodeslot=0x07DE, }, [0x07DF]={ arabic="d", category="lo", description="NKO LETTER LA", direction="r", linebreak="al", unicodeslot=0x07DF, }, [0x07E0]={ arabic="d", category="lo", description="NKO LETTER NA WOLOSO", direction="r", linebreak="al", unicodeslot=0x07E0, }, [0x07E1]={ arabic="d", category="lo", description="NKO LETTER MA", direction="r", linebreak="al", unicodeslot=0x07E1, }, [0x07E2]={ arabic="d", category="lo", description="NKO LETTER NYA", direction="r", linebreak="al", unicodeslot=0x07E2, }, [0x07E3]={ arabic="d", category="lo", description="NKO LETTER NA", direction="r", linebreak="al", unicodeslot=0x07E3, }, [0x07E4]={ arabic="d", category="lo", description="NKO LETTER HA", direction="r", linebreak="al", unicodeslot=0x07E4, }, [0x07E5]={ arabic="d", category="lo", description="NKO LETTER WA", direction="r", linebreak="al", unicodeslot=0x07E5, }, [0x07E6]={ arabic="d", category="lo", description="NKO LETTER YA", direction="r", linebreak="al", unicodeslot=0x07E6, }, [0x07E7]={ arabic="d", category="lo", description="NKO LETTER NYA WOLOSO", direction="r", linebreak="al", unicodeslot=0x07E7, }, [0x07E8]={ arabic="d", category="lo", description="NKO LETTER JONA JA", direction="r", linebreak="al", unicodeslot=0x07E8, }, [0x07E9]={ arabic="d", category="lo", description="NKO LETTER JONA CHA", direction="r", linebreak="al", unicodeslot=0x07E9, }, [0x07EA]={ arabic="d", category="lo", description="NKO LETTER JONA RA", direction="r", linebreak="al", unicodeslot=0x07EA, }, [0x07EB]={ category="mn", description="NKO COMBINING SHORT HIGH TONE", direction="nsm", linebreak="cm", unicodeslot=0x07EB, }, [0x07EC]={ category="mn", description="NKO COMBINING SHORT LOW TONE", direction="nsm", linebreak="cm", unicodeslot=0x07EC, }, [0x07ED]={ category="mn", description="NKO COMBINING SHORT RISING TONE", direction="nsm", linebreak="cm", unicodeslot=0x07ED, }, [0x07EE]={ category="mn", description="NKO COMBINING LONG DESCENDING TONE", direction="nsm", linebreak="cm", unicodeslot=0x07EE, }, [0x07EF]={ category="mn", description="NKO COMBINING LONG HIGH TONE", direction="nsm", linebreak="cm", unicodeslot=0x07EF, }, [0x07F0]={ category="mn", description="NKO COMBINING LONG LOW TONE", direction="nsm", linebreak="cm", unicodeslot=0x07F0, }, [0x07F1]={ category="mn", description="NKO COMBINING LONG RISING TONE", direction="nsm", linebreak="cm", unicodeslot=0x07F1, }, [0x07F2]={ category="mn", description="NKO COMBINING NASALIZATION MARK", direction="nsm", linebreak="cm", unicodeslot=0x07F2, }, [0x07F3]={ category="mn", description="NKO COMBINING DOUBLE DOT ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x07F3, }, [0x07F4]={ category="lm", description="NKO HIGH TONE APOSTROPHE", direction="r", linebreak="al", unicodeslot=0x07F4, }, [0x07F5]={ category="lm", description="NKO LOW TONE APOSTROPHE", direction="r", linebreak="al", unicodeslot=0x07F5, }, [0x07F6]={ category="so", description="NKO SYMBOL OO DENNEN", direction="on", linebreak="al", unicodeslot=0x07F6, }, [0x07F7]={ category="po", description="NKO SYMBOL GBAKURUNEN", direction="on", linebreak="al", unicodeslot=0x07F7, }, [0x07F8]={ category="po", description="NKO COMMA", direction="on", linebreak="is", unicodeslot=0x07F8, }, [0x07F9]={ category="po", description="NKO EXCLAMATION MARK", direction="on", linebreak="ex", unicodeslot=0x07F9, }, [0x07FA]={ arabic="c", category="lm", description="NKO LAJANYALAN", direction="r", linebreak="al", unicodeslot=0x07FA, }, [0x0800]={ category="lo", description="SAMARITAN LETTER ALAF", direction="r", linebreak="al", unicodeslot=0x0800, }, [0x0801]={ category="lo", description="SAMARITAN LETTER BIT", direction="r", linebreak="al", unicodeslot=0x0801, }, [0x0802]={ category="lo", description="SAMARITAN LETTER GAMAN", direction="r", linebreak="al", unicodeslot=0x0802, }, [0x0803]={ category="lo", description="SAMARITAN LETTER DALAT", direction="r", linebreak="al", unicodeslot=0x0803, }, [0x0804]={ category="lo", description="SAMARITAN LETTER IY", direction="r", linebreak="al", unicodeslot=0x0804, }, [0x0805]={ category="lo", description="SAMARITAN LETTER BAA", direction="r", linebreak="al", unicodeslot=0x0805, }, [0x0806]={ category="lo", description="SAMARITAN LETTER ZEN", direction="r", linebreak="al", unicodeslot=0x0806, }, [0x0807]={ category="lo", description="SAMARITAN LETTER IT", direction="r", linebreak="al", unicodeslot=0x0807, }, [0x0808]={ category="lo", description="SAMARITAN LETTER TIT", direction="r", linebreak="al", unicodeslot=0x0808, }, [0x0809]={ category="lo", description="SAMARITAN LETTER YUT", direction="r", linebreak="al", unicodeslot=0x0809, }, [0x080A]={ category="lo", description="SAMARITAN LETTER KAAF", direction="r", linebreak="al", unicodeslot=0x080A, }, [0x080B]={ category="lo", description="SAMARITAN LETTER LABAT", direction="r", linebreak="al", unicodeslot=0x080B, }, [0x080C]={ category="lo", description="SAMARITAN LETTER MIM", direction="r", linebreak="al", unicodeslot=0x080C, }, [0x080D]={ category="lo", description="SAMARITAN LETTER NUN", direction="r", linebreak="al", unicodeslot=0x080D, }, [0x080E]={ category="lo", description="SAMARITAN LETTER SINGAAT", direction="r", linebreak="al", unicodeslot=0x080E, }, [0x080F]={ category="lo", description="SAMARITAN LETTER IN", direction="r", linebreak="al", unicodeslot=0x080F, }, [0x0810]={ category="lo", description="SAMARITAN LETTER FI", direction="r", linebreak="al", unicodeslot=0x0810, }, [0x0811]={ category="lo", description="SAMARITAN LETTER TSAADIY", direction="r", linebreak="al", unicodeslot=0x0811, }, [0x0812]={ category="lo", description="SAMARITAN LETTER QUF", direction="r", linebreak="al", unicodeslot=0x0812, }, [0x0813]={ category="lo", description="SAMARITAN LETTER RISH", direction="r", linebreak="al", unicodeslot=0x0813, }, [0x0814]={ category="lo", description="SAMARITAN LETTER SHAN", direction="r", linebreak="al", unicodeslot=0x0814, }, [0x0815]={ category="lo", description="SAMARITAN LETTER TAAF", direction="r", linebreak="al", unicodeslot=0x0815, }, [0x0816]={ category="mn", description="SAMARITAN MARK IN", direction="nsm", linebreak="cm", unicodeslot=0x0816, }, [0x0817]={ category="mn", description="SAMARITAN MARK IN-ALAF", direction="nsm", linebreak="cm", unicodeslot=0x0817, }, [0x0818]={ category="mn", description="SAMARITAN MARK OCCLUSION", direction="nsm", linebreak="cm", unicodeslot=0x0818, }, [0x0819]={ category="mn", description="SAMARITAN MARK DAGESH", direction="nsm", linebreak="cm", unicodeslot=0x0819, }, [0x081A]={ category="lm", description="SAMARITAN MODIFIER LETTER EPENTHETIC YUT", direction="r", linebreak="al", unicodeslot=0x081A, }, [0x081B]={ category="mn", description="SAMARITAN MARK EPENTHETIC YUT", direction="nsm", linebreak="cm", unicodeslot=0x081B, }, [0x081C]={ category="mn", description="SAMARITAN VOWEL SIGN LONG E", direction="nsm", linebreak="cm", unicodeslot=0x081C, }, [0x081D]={ category="mn", description="SAMARITAN VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x081D, }, [0x081E]={ category="mn", description="SAMARITAN VOWEL SIGN OVERLONG AA", direction="nsm", linebreak="cm", unicodeslot=0x081E, }, [0x081F]={ category="mn", description="SAMARITAN VOWEL SIGN LONG AA", direction="nsm", linebreak="cm", unicodeslot=0x081F, }, [0x0820]={ category="mn", description="SAMARITAN VOWEL SIGN AA", direction="nsm", linebreak="cm", unicodeslot=0x0820, }, [0x0821]={ category="mn", description="SAMARITAN VOWEL SIGN OVERLONG A", direction="nsm", linebreak="cm", unicodeslot=0x0821, }, [0x0822]={ category="mn", description="SAMARITAN VOWEL SIGN LONG A", direction="nsm", linebreak="cm", unicodeslot=0x0822, }, [0x0823]={ category="mn", description="SAMARITAN VOWEL SIGN A", direction="nsm", linebreak="cm", unicodeslot=0x0823, }, [0x0824]={ category="lm", description="SAMARITAN MODIFIER LETTER SHORT A", direction="r", linebreak="al", unicodeslot=0x0824, }, [0x0825]={ category="mn", description="SAMARITAN VOWEL SIGN SHORT A", direction="nsm", linebreak="cm", unicodeslot=0x0825, }, [0x0826]={ category="mn", description="SAMARITAN VOWEL SIGN LONG U", direction="nsm", linebreak="cm", unicodeslot=0x0826, }, [0x0827]={ category="mn", description="SAMARITAN VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0827, }, [0x0828]={ category="lm", description="SAMARITAN MODIFIER LETTER I", direction="r", linebreak="al", unicodeslot=0x0828, }, [0x0829]={ category="mn", description="SAMARITAN VOWEL SIGN LONG I", direction="nsm", linebreak="cm", unicodeslot=0x0829, }, [0x082A]={ category="mn", description="SAMARITAN VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x082A, }, [0x082B]={ category="mn", description="SAMARITAN VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x082B, }, [0x082C]={ category="mn", description="SAMARITAN VOWEL SIGN SUKUN", direction="nsm", linebreak="cm", unicodeslot=0x082C, }, [0x082D]={ category="mn", description="SAMARITAN MARK NEQUDAA", direction="nsm", linebreak="cm", unicodeslot=0x082D, }, [0x0830]={ category="po", description="SAMARITAN PUNCTUATION NEQUDAA", direction="r", linebreak="al", unicodeslot=0x0830, }, [0x0831]={ category="po", description="SAMARITAN PUNCTUATION AFSAAQ", direction="r", linebreak="al", unicodeslot=0x0831, }, [0x0832]={ category="po", description="SAMARITAN PUNCTUATION ANGED", direction="r", linebreak="al", unicodeslot=0x0832, }, [0x0833]={ category="po", description="SAMARITAN PUNCTUATION BAU", direction="r", linebreak="al", unicodeslot=0x0833, }, [0x0834]={ category="po", description="SAMARITAN PUNCTUATION ATMAAU", direction="r", linebreak="al", unicodeslot=0x0834, }, [0x0835]={ category="po", description="SAMARITAN PUNCTUATION SHIYYAALAA", direction="r", linebreak="al", unicodeslot=0x0835, }, [0x0836]={ category="po", description="SAMARITAN ABBREVIATION MARK", direction="r", linebreak="al", unicodeslot=0x0836, }, [0x0837]={ category="po", description="SAMARITAN PUNCTUATION MELODIC QITSA", direction="r", linebreak="al", unicodeslot=0x0837, }, [0x0838]={ category="po", description="SAMARITAN PUNCTUATION ZIQAA", direction="r", linebreak="al", unicodeslot=0x0838, }, [0x0839]={ category="po", description="SAMARITAN PUNCTUATION QITSA", direction="r", linebreak="al", unicodeslot=0x0839, }, [0x083A]={ category="po", description="SAMARITAN PUNCTUATION ZAEF", direction="r", linebreak="al", unicodeslot=0x083A, }, [0x083B]={ category="po", description="SAMARITAN PUNCTUATION TURU", direction="r", linebreak="al", unicodeslot=0x083B, }, [0x083C]={ category="po", description="SAMARITAN PUNCTUATION ARKAANU", direction="r", linebreak="al", unicodeslot=0x083C, }, [0x083D]={ category="po", description="SAMARITAN PUNCTUATION SOF MASHFAAT", direction="r", linebreak="al", unicodeslot=0x083D, }, [0x083E]={ category="po", description="SAMARITAN PUNCTUATION ANNAAU", direction="r", linebreak="al", unicodeslot=0x083E, }, [0x0840]={ arabic="r", category="lo", description="MANDAIC LETTER HALQA", direction="r", linebreak="al", unicodeslot=0x0840, }, [0x0841]={ arabic="d", category="lo", description="MANDAIC LETTER AB", direction="r", linebreak="al", unicodeslot=0x0841, }, [0x0842]={ arabic="d", category="lo", description="MANDAIC LETTER AG", direction="r", linebreak="al", unicodeslot=0x0842, }, [0x0843]={ arabic="d", category="lo", description="MANDAIC LETTER AD", direction="r", linebreak="al", unicodeslot=0x0843, }, [0x0844]={ arabic="d", category="lo", description="MANDAIC LETTER AH", direction="r", linebreak="al", unicodeslot=0x0844, }, [0x0845]={ arabic="d", category="lo", description="MANDAIC LETTER USHENNA", direction="r", linebreak="al", unicodeslot=0x0845, }, [0x0846]={ arabic="r", category="lo", description="MANDAIC LETTER AZ", direction="r", linebreak="al", unicodeslot=0x0846, }, [0x0847]={ arabic="d", category="lo", description="MANDAIC LETTER IT", direction="r", linebreak="al", unicodeslot=0x0847, }, [0x0848]={ arabic="d", category="lo", description="MANDAIC LETTER ATT", direction="r", linebreak="al", unicodeslot=0x0848, }, [0x0849]={ arabic="r", category="lo", description="MANDAIC LETTER AKSA", direction="r", linebreak="al", unicodeslot=0x0849, }, [0x084A]={ arabic="d", category="lo", description="MANDAIC LETTER AK", direction="r", linebreak="al", unicodeslot=0x084A, }, [0x084B]={ arabic="d", category="lo", description="MANDAIC LETTER AL", direction="r", linebreak="al", unicodeslot=0x084B, }, [0x084C]={ arabic="d", category="lo", description="MANDAIC LETTER AM", direction="r", linebreak="al", unicodeslot=0x084C, }, [0x084D]={ arabic="d", category="lo", description="MANDAIC LETTER AN", direction="r", linebreak="al", unicodeslot=0x084D, }, [0x084E]={ arabic="d", category="lo", description="MANDAIC LETTER AS", direction="r", linebreak="al", unicodeslot=0x084E, }, [0x084F]={ arabic="r", category="lo", description="MANDAIC LETTER IN", direction="r", linebreak="al", unicodeslot=0x084F, }, [0x0850]={ arabic="d", category="lo", description="MANDAIC LETTER AP", direction="r", linebreak="al", unicodeslot=0x0850, }, [0x0851]={ arabic="d", category="lo", description="MANDAIC LETTER ASZ", direction="r", linebreak="al", unicodeslot=0x0851, }, [0x0852]={ arabic="d", category="lo", description="MANDAIC LETTER AQ", direction="r", linebreak="al", unicodeslot=0x0852, }, [0x0853]={ arabic="d", category="lo", description="MANDAIC LETTER AR", direction="r", linebreak="al", unicodeslot=0x0853, }, [0x0854]={ arabic="r", category="lo", description="MANDAIC LETTER ASH", direction="r", linebreak="al", unicodeslot=0x0854, }, [0x0855]={ arabic="d", category="lo", description="MANDAIC LETTER AT", direction="r", linebreak="al", unicodeslot=0x0855, }, [0x0856]={ arabic="u", category="lo", description="MANDAIC LETTER DUSHENNA", direction="r", linebreak="al", unicodeslot=0x0856, }, [0x0857]={ arabic="u", category="lo", description="MANDAIC LETTER KAD", direction="r", linebreak="al", unicodeslot=0x0857, }, [0x0858]={ arabic="u", category="lo", description="MANDAIC LETTER AIN", direction="r", linebreak="al", unicodeslot=0x0858, }, [0x0859]={ category="mn", description="MANDAIC AFFRICATION MARK", direction="nsm", linebreak="cm", unicodeslot=0x0859, }, [0x085A]={ category="mn", description="MANDAIC VOCALIZATION MARK", direction="nsm", linebreak="cm", unicodeslot=0x085A, }, [0x085B]={ category="mn", description="MANDAIC GEMINATION MARK", direction="nsm", linebreak="cm", unicodeslot=0x085B, }, [0x085E]={ category="po", description="MANDAIC PUNCTUATION", direction="r", linebreak="al", unicodeslot=0x085E, }, [0x08A0]={ arabic="d", category="lo", description="ARABIC LETTER BEH WITH SMALL V BELOW", direction="al", linebreak="al", unicodeslot=0x08A0, }, [0x08A2]={ arabic="d", category="lo", description="ARABIC LETTER JEEM WITH TWO DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x08A2, }, [0x08A3]={ arabic="d", category="lo", description="ARABIC LETTER TAH WITH TWO DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x08A3, }, [0x08A4]={ arabic="d", category="lo", description="ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x08A4, }, [0x08A5]={ arabic="d", category="lo", description="ARABIC LETTER QAF WITH DOT BELOW", direction="al", linebreak="al", unicodeslot=0x08A5, }, [0x08A6]={ arabic="d", category="lo", description="ARABIC LETTER LAM WITH DOUBLE BAR", direction="al", linebreak="al", unicodeslot=0x08A6, }, [0x08A7]={ arabic="d", category="lo", description="ARABIC LETTER MEEM WITH THREE DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0x08A7, }, [0x08A8]={ arabic="d", category="lo", description="ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE", direction="al", linebreak="al", unicodeslot=0x08A8, }, [0x08A9]={ arabic="d", category="lo", description="ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE", direction="al", linebreak="al", unicodeslot=0x08A9, }, [0x08AA]={ arabic="r", category="lo", description="ARABIC LETTER REH WITH LOOP", direction="al", linebreak="al", unicodeslot=0x08AA, }, [0x08AB]={ arabic="r", category="lo", description="ARABIC LETTER WAW WITH DOT WITHIN", direction="al", linebreak="al", unicodeslot=0x08AB, }, [0x08AC]={ arabic="r", category="lo", description="ARABIC LETTER ROHINGYA YEH", direction="al", linebreak="al", unicodeslot=0x08AC, }, [0x08E4]={ category="mn", description="ARABIC CURLY FATHA", direction="nsm", linebreak="cm", unicodeslot=0x08E4, }, [0x08E5]={ category="mn", description="ARABIC CURLY DAMMA", direction="nsm", linebreak="cm", unicodeslot=0x08E5, }, [0x08E6]={ category="mn", description="ARABIC CURLY KASRA", direction="nsm", linebreak="cm", unicodeslot=0x08E6, }, [0x08E7]={ category="mn", description="ARABIC CURLY FATHATAN", direction="nsm", linebreak="cm", unicodeslot=0x08E7, }, [0x08E8]={ category="mn", description="ARABIC CURLY DAMMATAN", direction="nsm", linebreak="cm", unicodeslot=0x08E8, }, [0x08E9]={ category="mn", description="ARABIC CURLY KASRATAN", direction="nsm", linebreak="cm", unicodeslot=0x08E9, }, [0x08EA]={ category="mn", description="ARABIC TONE ONE DOT ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08EA, }, [0x08EB]={ category="mn", description="ARABIC TONE TWO DOTS ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08EB, }, [0x08EC]={ category="mn", description="ARABIC TONE LOOP ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08EC, }, [0x08ED]={ category="mn", description="ARABIC TONE ONE DOT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x08ED, }, [0x08EE]={ category="mn", description="ARABIC TONE TWO DOTS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x08EE, }, [0x08EF]={ category="mn", description="ARABIC TONE LOOP BELOW", direction="nsm", linebreak="cm", unicodeslot=0x08EF, }, [0x08F0]={ category="mn", description="ARABIC OPEN FATHATAN", direction="nsm", linebreak="cm", unicodeslot=0x08F0, }, [0x08F1]={ category="mn", description="ARABIC OPEN DAMMATAN", direction="nsm", linebreak="cm", unicodeslot=0x08F1, }, [0x08F2]={ category="mn", description="ARABIC OPEN KASRATAN", direction="nsm", linebreak="cm", unicodeslot=0x08F2, }, [0x08F3]={ category="mn", description="ARABIC SMALL HIGH WAW", direction="nsm", linebreak="cm", unicodeslot=0x08F3, }, [0x08F4]={ category="mn", description="ARABIC FATHA WITH RING", direction="nsm", linebreak="cm", unicodeslot=0x08F4, }, [0x08F5]={ category="mn", description="ARABIC FATHA WITH DOT ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08F5, }, [0x08F6]={ category="mn", description="ARABIC KASRA WITH DOT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x08F6, }, [0x08F7]={ category="mn", description="ARABIC LEFT ARROWHEAD ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08F7, }, [0x08F8]={ category="mn", description="ARABIC RIGHT ARROWHEAD ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08F8, }, [0x08F9]={ category="mn", description="ARABIC LEFT ARROWHEAD BELOW", direction="nsm", linebreak="cm", unicodeslot=0x08F9, }, [0x08FA]={ category="mn", description="ARABIC RIGHT ARROWHEAD BELOW", direction="nsm", linebreak="cm", unicodeslot=0x08FA, }, [0x08FB]={ category="mn", description="ARABIC DOUBLE RIGHT ARROWHEAD ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x08FB, }, [0x08FC]={ category="mn", description="ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT", direction="nsm", linebreak="cm", unicodeslot=0x08FC, }, [0x08FD]={ category="mn", description="ARABIC RIGHT ARROWHEAD ABOVE WITH DOT", direction="nsm", linebreak="cm", unicodeslot=0x08FD, }, [0x08FE]={ category="mn", description="ARABIC DAMMA WITH DOT", direction="nsm", linebreak="cm", unicodeslot=0x08FE, }, [0x0900]={ category="mn", description="DEVANAGARI SIGN INVERTED CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x0900, }, [0x0901]={ adobename="candrabindudeva", category="mn", description="DEVANAGARI SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x0901, }, [0x0902]={ adobename="anusvaradeva", category="mn", description="DEVANAGARI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x0902, }, [0x0903]={ adobename="visargadeva", category="mc", description="DEVANAGARI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0903, }, [0x0904]={ category="lo", description="DEVANAGARI LETTER SHORT A", direction="l", linebreak="al", unicodeslot=0x0904, }, [0x0905]={ adobename="adeva", category="lo", description="DEVANAGARI LETTER A", direction="l", linebreak="al", unicodeslot=0x0905, }, [0x0906]={ adobename="aadeva", category="lo", description="DEVANAGARI LETTER AA", direction="l", linebreak="al", unicodeslot=0x0906, }, [0x0907]={ adobename="ideva", category="lo", description="DEVANAGARI LETTER I", direction="l", linebreak="al", unicodeslot=0x0907, }, [0x0908]={ adobename="iideva", category="lo", description="DEVANAGARI LETTER II", direction="l", linebreak="al", unicodeslot=0x0908, }, [0x0909]={ adobename="udeva", category="lo", description="DEVANAGARI LETTER U", direction="l", linebreak="al", unicodeslot=0x0909, }, [0x090A]={ adobename="uudeva", category="lo", description="DEVANAGARI LETTER UU", direction="l", linebreak="al", unicodeslot=0x090A, }, [0x090B]={ adobename="rvocalicdeva", category="lo", description="DEVANAGARI LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x090B, }, [0x090C]={ adobename="lvocalicdeva", category="lo", description="DEVANAGARI LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x090C, }, [0x090D]={ adobename="ecandradeva", category="lo", description="DEVANAGARI LETTER CANDRA E", direction="l", linebreak="al", unicodeslot=0x090D, }, [0x090E]={ adobename="eshortdeva", category="lo", description="DEVANAGARI LETTER SHORT E", direction="l", linebreak="al", unicodeslot=0x090E, }, [0x090F]={ adobename="edeva", category="lo", description="DEVANAGARI LETTER E", direction="l", linebreak="al", unicodeslot=0x090F, }, [0x0910]={ adobename="aideva", category="lo", description="DEVANAGARI LETTER AI", direction="l", linebreak="al", unicodeslot=0x0910, }, [0x0911]={ adobename="ocandradeva", category="lo", description="DEVANAGARI LETTER CANDRA O", direction="l", linebreak="al", unicodeslot=0x0911, }, [0x0912]={ adobename="oshortdeva", category="lo", description="DEVANAGARI LETTER SHORT O", direction="l", linebreak="al", unicodeslot=0x0912, }, [0x0913]={ adobename="odeva", category="lo", description="DEVANAGARI LETTER O", direction="l", linebreak="al", unicodeslot=0x0913, }, [0x0914]={ adobename="audeva", category="lo", description="DEVANAGARI LETTER AU", direction="l", linebreak="al", unicodeslot=0x0914, }, [0x0915]={ adobename="kadeva", category="lo", description="DEVANAGARI LETTER KA", direction="l", linebreak="al", unicodeslot=0x0915, }, [0x0916]={ adobename="khadeva", category="lo", description="DEVANAGARI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0916, }, [0x0917]={ adobename="gadeva", category="lo", description="DEVANAGARI LETTER GA", direction="l", linebreak="al", unicodeslot=0x0917, }, [0x0918]={ adobename="ghadeva", category="lo", description="DEVANAGARI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0918, }, [0x0919]={ adobename="ngadeva", category="lo", description="DEVANAGARI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0919, }, [0x091A]={ adobename="cadeva", category="lo", description="DEVANAGARI LETTER CA", direction="l", linebreak="al", unicodeslot=0x091A, }, [0x091B]={ adobename="chadeva", category="lo", description="DEVANAGARI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x091B, }, [0x091C]={ adobename="jadeva", category="lo", description="DEVANAGARI LETTER JA", direction="l", linebreak="al", unicodeslot=0x091C, }, [0x091D]={ adobename="jhadeva", category="lo", description="DEVANAGARI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x091D, }, [0x091E]={ adobename="nyadeva", category="lo", description="DEVANAGARI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x091E, }, [0x091F]={ adobename="ttadeva", category="lo", description="DEVANAGARI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x091F, }, [0x0920]={ adobename="tthadeva", category="lo", description="DEVANAGARI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0920, }, [0x0921]={ adobename="ddadeva", category="lo", description="DEVANAGARI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0921, }, [0x0922]={ adobename="ddhadeva", category="lo", description="DEVANAGARI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0922, }, [0x0923]={ adobename="nnadeva", category="lo", description="DEVANAGARI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0923, }, [0x0924]={ adobename="tadeva", category="lo", description="DEVANAGARI LETTER TA", direction="l", linebreak="al", unicodeslot=0x0924, }, [0x0925]={ adobename="thadeva", category="lo", description="DEVANAGARI LETTER THA", direction="l", linebreak="al", unicodeslot=0x0925, }, [0x0926]={ adobename="dadeva", category="lo", description="DEVANAGARI LETTER DA", direction="l", linebreak="al", unicodeslot=0x0926, }, [0x0927]={ adobename="dhadeva", category="lo", description="DEVANAGARI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0927, }, [0x0928]={ adobename="nadeva", category="lo", description="DEVANAGARI LETTER NA", direction="l", linebreak="al", unicodeslot=0x0928, }, [0x0929]={ adobename="nnnadeva", category="lo", description="DEVANAGARI LETTER NNNA", direction="l", linebreak="al", specials={ "char", 0x0928, 0x093C }, unicodeslot=0x0929, }, [0x092A]={ adobename="padeva", category="lo", description="DEVANAGARI LETTER PA", direction="l", linebreak="al", unicodeslot=0x092A, }, [0x092B]={ adobename="phadeva", category="lo", description="DEVANAGARI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x092B, }, [0x092C]={ adobename="badeva", category="lo", description="DEVANAGARI LETTER BA", direction="l", linebreak="al", unicodeslot=0x092C, }, [0x092D]={ adobename="bhadeva", category="lo", description="DEVANAGARI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x092D, }, [0x092E]={ adobename="madeva", category="lo", description="DEVANAGARI LETTER MA", direction="l", linebreak="al", unicodeslot=0x092E, }, [0x092F]={ adobename="yadeva", category="lo", description="DEVANAGARI LETTER YA", direction="l", linebreak="al", unicodeslot=0x092F, }, [0x0930]={ adobename="radeva", category="lo", description="DEVANAGARI LETTER RA", direction="l", linebreak="al", unicodeslot=0x0930, }, [0x0931]={ adobename="rradeva", category="lo", description="DEVANAGARI LETTER RRA", direction="l", linebreak="al", specials={ "char", 0x0930, 0x093C }, unicodeslot=0x0931, }, [0x0932]={ adobename="ladeva", category="lo", description="DEVANAGARI LETTER LA", direction="l", linebreak="al", unicodeslot=0x0932, }, [0x0933]={ adobename="lladeva", category="lo", description="DEVANAGARI LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0933, }, [0x0934]={ adobename="llladeva", category="lo", description="DEVANAGARI LETTER LLLA", direction="l", linebreak="al", specials={ "char", 0x0933, 0x093C }, unicodeslot=0x0934, }, [0x0935]={ adobename="vadeva", category="lo", description="DEVANAGARI LETTER VA", direction="l", linebreak="al", unicodeslot=0x0935, }, [0x0936]={ adobename="shadeva", category="lo", description="DEVANAGARI LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0936, }, [0x0937]={ adobename="ssadeva", category="lo", description="DEVANAGARI LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0937, }, [0x0938]={ adobename="sadeva", category="lo", description="DEVANAGARI LETTER SA", direction="l", linebreak="al", unicodeslot=0x0938, }, [0x0939]={ adobename="hadeva", category="lo", description="DEVANAGARI LETTER HA", direction="l", linebreak="al", unicodeslot=0x0939, }, [0x093A]={ category="mn", description="DEVANAGARI VOWEL SIGN OE", direction="nsm", linebreak="cm", unicodeslot=0x093A, }, [0x093B]={ category="mc", description="DEVANAGARI VOWEL SIGN OOE", direction="l", linebreak="cm", unicodeslot=0x093B, }, [0x093C]={ adobename="nuktadeva", category="mn", description="DEVANAGARI SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x093C, }, [0x093D]={ adobename="avagrahadeva", category="lo", description="DEVANAGARI SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x093D, }, [0x093E]={ adobename="aavowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x093E, }, [0x093F]={ adobename="ivowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x093F, }, [0x0940]={ adobename="iivowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x0940, }, [0x0941]={ adobename="uvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0941, }, [0x0942]={ adobename="uuvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x0942, }, [0x0943]={ adobename="rvocalicvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x0943, }, [0x0944]={ adobename="rrvocalicvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x0944, }, [0x0945]={ adobename="ecandravowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN CANDRA E", direction="nsm", linebreak="cm", unicodeslot=0x0945, }, [0x0946]={ adobename="eshortvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN SHORT E", direction="nsm", linebreak="cm", unicodeslot=0x0946, }, [0x0947]={ adobename="evowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x0947, }, [0x0948]={ adobename="aivowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x0948, }, [0x0949]={ adobename="ocandravowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN CANDRA O", direction="l", linebreak="cm", unicodeslot=0x0949, }, [0x094A]={ adobename="oshortvowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN SHORT O", direction="l", linebreak="cm", unicodeslot=0x094A, }, [0x094B]={ adobename="ovowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x094B, }, [0x094C]={ adobename="auvowelsigndeva", category="mc", description="DEVANAGARI VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0x094C, }, [0x094D]={ adobename="viramadeva", category="mn", description="DEVANAGARI SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x094D, }, [0x094E]={ category="mc", description="DEVANAGARI VOWEL SIGN PRISHTHAMATRA E", direction="l", linebreak="cm", unicodeslot=0x094E, }, [0x094F]={ category="mc", description="DEVANAGARI VOWEL SIGN AW", direction="l", linebreak="cm", unicodeslot=0x094F, }, [0x0950]={ adobename="omdeva", category="lo", description="DEVANAGARI OM", direction="l", linebreak="al", unicodeslot=0x0950, }, [0x0951]={ adobename="udattadeva", category="mn", description="DEVANAGARI STRESS SIGN UDATTA", direction="nsm", linebreak="cm", unicodeslot=0x0951, }, [0x0952]={ adobename="anudattadeva", category="mn", description="DEVANAGARI STRESS SIGN ANUDATTA", direction="nsm", linebreak="cm", unicodeslot=0x0952, }, [0x0953]={ adobename="gravedeva", category="mn", description="DEVANAGARI GRAVE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x0953, }, [0x0954]={ adobename="acutedeva", category="mn", description="DEVANAGARI ACUTE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x0954, }, [0x0955]={ category="mn", description="DEVANAGARI VOWEL SIGN CANDRA LONG E", direction="nsm", linebreak="cm", unicodeslot=0x0955, }, [0x0956]={ category="mn", description="DEVANAGARI VOWEL SIGN UE", direction="nsm", linebreak="cm", unicodeslot=0x0956, }, [0x0957]={ category="mn", description="DEVANAGARI VOWEL SIGN UUE", direction="nsm", linebreak="cm", unicodeslot=0x0957, }, [0x0958]={ adobename="qadeva", category="lo", description="DEVANAGARI LETTER QA", direction="l", linebreak="al", specials={ "char", 0x0915, 0x093C }, unicodeslot=0x0958, }, [0x0959]={ adobename="khhadeva", category="lo", description="DEVANAGARI LETTER KHHA", direction="l", linebreak="al", specials={ "char", 0x0916, 0x093C }, unicodeslot=0x0959, }, [0x095A]={ adobename="ghhadeva", category="lo", description="DEVANAGARI LETTER GHHA", direction="l", linebreak="al", specials={ "char", 0x0917, 0x093C }, unicodeslot=0x095A, }, [0x095B]={ adobename="zadeva", category="lo", description="DEVANAGARI LETTER ZA", direction="l", linebreak="al", specials={ "char", 0x091C, 0x093C }, unicodeslot=0x095B, }, [0x095C]={ adobename="dddhadeva", category="lo", description="DEVANAGARI LETTER DDDHA", direction="l", linebreak="al", specials={ "char", 0x0921, 0x093C }, unicodeslot=0x095C, }, [0x095D]={ adobename="rhadeva", category="lo", description="DEVANAGARI LETTER RHA", direction="l", linebreak="al", specials={ "char", 0x0922, 0x093C }, unicodeslot=0x095D, }, [0x095E]={ adobename="fadeva", category="lo", description="DEVANAGARI LETTER FA", direction="l", linebreak="al", specials={ "char", 0x092B, 0x093C }, unicodeslot=0x095E, }, [0x095F]={ adobename="yyadeva", category="lo", description="DEVANAGARI LETTER YYA", direction="l", linebreak="al", specials={ "char", 0x092F, 0x093C }, unicodeslot=0x095F, }, [0x0960]={ adobename="rrvocalicdeva", category="lo", description="DEVANAGARI LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x0960, }, [0x0961]={ adobename="llvocalicdeva", category="lo", description="DEVANAGARI LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x0961, }, [0x0962]={ adobename="lvocalicvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x0962, }, [0x0963]={ adobename="llvocalicvowelsigndeva", category="mn", description="DEVANAGARI VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x0963, }, [0x0964]={ adobename="danda", category="po", description="DEVANAGARI DANDA", direction="l", linebreak="ba", unicodeslot=0x0964, }, [0x0965]={ adobename="dbldanda", category="po", description="DEVANAGARI DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0x0965, }, [0x0966]={ adobename="zerodeva", category="nd", description="DEVANAGARI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0966, }, [0x0967]={ adobename="onedeva", category="nd", description="DEVANAGARI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0967, }, [0x0968]={ adobename="twodeva", category="nd", description="DEVANAGARI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0968, }, [0x0969]={ adobename="threedeva", category="nd", description="DEVANAGARI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0969, }, [0x096A]={ adobename="fourdeva", category="nd", description="DEVANAGARI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x096A, }, [0x096B]={ adobename="fivedeva", category="nd", description="DEVANAGARI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x096B, }, [0x096C]={ adobename="sixdeva", category="nd", description="DEVANAGARI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x096C, }, [0x096D]={ adobename="sevendeva", category="nd", description="DEVANAGARI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x096D, }, [0x096E]={ adobename="eightdeva", category="nd", description="DEVANAGARI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x096E, }, [0x096F]={ adobename="ninedeva", category="nd", description="DEVANAGARI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x096F, }, [0x0970]={ adobename="abbreviationsigndeva", category="po", description="DEVANAGARI ABBREVIATION SIGN", direction="l", linebreak="al", unicodeslot=0x0970, }, [0x0971]={ category="lm", description="DEVANAGARI SIGN HIGH SPACING DOT", direction="l", linebreak="al", unicodeslot=0x0971, }, [0x0972]={ category="lo", description="DEVANAGARI LETTER CANDRA A", direction="l", linebreak="al", unicodeslot=0x0972, }, [0x0973]={ category="lo", description="DEVANAGARI LETTER OE", direction="l", linebreak="al", unicodeslot=0x0973, }, [0x0974]={ category="lo", description="DEVANAGARI LETTER OOE", direction="l", linebreak="al", unicodeslot=0x0974, }, [0x0975]={ category="lo", description="DEVANAGARI LETTER AW", direction="l", linebreak="al", unicodeslot=0x0975, }, [0x0976]={ category="lo", description="DEVANAGARI LETTER UE", direction="l", linebreak="al", unicodeslot=0x0976, }, [0x0977]={ category="lo", description="DEVANAGARI LETTER UUE", direction="l", linebreak="al", unicodeslot=0x0977, }, [0x0979]={ category="lo", description="DEVANAGARI LETTER ZHA", direction="l", linebreak="al", unicodeslot=0x0979, }, [0x097A]={ category="lo", description="DEVANAGARI LETTER HEAVY YA", direction="l", linebreak="al", unicodeslot=0x097A, }, [0x097B]={ category="lo", description="DEVANAGARI LETTER GGA", direction="l", linebreak="al", unicodeslot=0x097B, }, [0x097C]={ category="lo", description="DEVANAGARI LETTER JJA", direction="l", linebreak="al", unicodeslot=0x097C, }, [0x097D]={ category="lo", description="DEVANAGARI LETTER GLOTTAL STOP", direction="l", linebreak="al", unicodeslot=0x097D, }, [0x097E]={ category="lo", description="DEVANAGARI LETTER DDDA", direction="l", linebreak="al", unicodeslot=0x097E, }, [0x097F]={ category="lo", description="DEVANAGARI LETTER BBA", direction="l", linebreak="al", unicodeslot=0x097F, }, [0x0981]={ adobename="candrabindubengali", category="mn", description="BENGALI SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x0981, }, [0x0982]={ adobename="anusvarabengali", category="mc", description="BENGALI SIGN ANUSVARA", direction="l", linebreak="cm", unicodeslot=0x0982, }, [0x0983]={ adobename="visargabengali", category="mc", description="BENGALI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0983, }, [0x0985]={ adobename="abengali", category="lo", description="BENGALI LETTER A", direction="l", linebreak="al", unicodeslot=0x0985, }, [0x0986]={ adobename="aabengali", category="lo", description="BENGALI LETTER AA", direction="l", linebreak="al", unicodeslot=0x0986, }, [0x0987]={ adobename="ibengali", category="lo", description="BENGALI LETTER I", direction="l", linebreak="al", unicodeslot=0x0987, }, [0x0988]={ adobename="iibengali", category="lo", description="BENGALI LETTER II", direction="l", linebreak="al", unicodeslot=0x0988, }, [0x0989]={ adobename="ubengali", category="lo", description="BENGALI LETTER U", direction="l", linebreak="al", unicodeslot=0x0989, }, [0x098A]={ adobename="uubengali", category="lo", description="BENGALI LETTER UU", direction="l", linebreak="al", unicodeslot=0x098A, }, [0x098B]={ adobename="rvocalicbengali", category="lo", description="BENGALI LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x098B, }, [0x098C]={ adobename="lvocalicbengali", category="lo", description="BENGALI LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x098C, }, [0x098F]={ adobename="ebengali", category="lo", description="BENGALI LETTER E", direction="l", linebreak="al", unicodeslot=0x098F, }, [0x0990]={ adobename="aibengali", category="lo", description="BENGALI LETTER AI", direction="l", linebreak="al", unicodeslot=0x0990, }, [0x0993]={ adobename="obengali", category="lo", description="BENGALI LETTER O", direction="l", linebreak="al", unicodeslot=0x0993, }, [0x0994]={ adobename="aubengali", category="lo", description="BENGALI LETTER AU", direction="l", linebreak="al", unicodeslot=0x0994, }, [0x0995]={ adobename="kabengali", category="lo", description="BENGALI LETTER KA", direction="l", linebreak="al", unicodeslot=0x0995, }, [0x0996]={ adobename="khabengali", category="lo", description="BENGALI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0996, }, [0x0997]={ adobename="gabengali", category="lo", description="BENGALI LETTER GA", direction="l", linebreak="al", unicodeslot=0x0997, }, [0x0998]={ adobename="ghabengali", category="lo", description="BENGALI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0998, }, [0x0999]={ adobename="ngabengali", category="lo", description="BENGALI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0999, }, [0x099A]={ adobename="cabengali", category="lo", description="BENGALI LETTER CA", direction="l", linebreak="al", unicodeslot=0x099A, }, [0x099B]={ adobename="chabengali", category="lo", description="BENGALI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x099B, }, [0x099C]={ adobename="jabengali", category="lo", description="BENGALI LETTER JA", direction="l", linebreak="al", unicodeslot=0x099C, }, [0x099D]={ adobename="jhabengali", category="lo", description="BENGALI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x099D, }, [0x099E]={ adobename="nyabengali", category="lo", description="BENGALI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x099E, }, [0x099F]={ adobename="ttabengali", category="lo", description="BENGALI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x099F, }, [0x09A0]={ adobename="tthabengali", category="lo", description="BENGALI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x09A0, }, [0x09A1]={ adobename="ddabengali", category="lo", description="BENGALI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x09A1, }, [0x09A2]={ adobename="ddhabengali", category="lo", description="BENGALI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x09A2, }, [0x09A3]={ adobename="nnabengali", category="lo", description="BENGALI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x09A3, }, [0x09A4]={ adobename="tabengali", category="lo", description="BENGALI LETTER TA", direction="l", linebreak="al", unicodeslot=0x09A4, }, [0x09A5]={ adobename="thabengali", category="lo", description="BENGALI LETTER THA", direction="l", linebreak="al", unicodeslot=0x09A5, }, [0x09A6]={ adobename="dabengali", category="lo", description="BENGALI LETTER DA", direction="l", linebreak="al", unicodeslot=0x09A6, }, [0x09A7]={ adobename="dhabengali", category="lo", description="BENGALI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x09A7, }, [0x09A8]={ adobename="nabengali", category="lo", description="BENGALI LETTER NA", direction="l", linebreak="al", unicodeslot=0x09A8, }, [0x09AA]={ adobename="pabengali", category="lo", description="BENGALI LETTER PA", direction="l", linebreak="al", unicodeslot=0x09AA, }, [0x09AB]={ adobename="phabengali", category="lo", description="BENGALI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x09AB, }, [0x09AC]={ adobename="babengali", category="lo", description="BENGALI LETTER BA", direction="l", linebreak="al", unicodeslot=0x09AC, }, [0x09AD]={ adobename="bhabengali", category="lo", description="BENGALI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x09AD, }, [0x09AE]={ adobename="mabengali", category="lo", description="BENGALI LETTER MA", direction="l", linebreak="al", unicodeslot=0x09AE, }, [0x09AF]={ adobename="yabengali", category="lo", description="BENGALI LETTER YA", direction="l", linebreak="al", unicodeslot=0x09AF, }, [0x09B0]={ adobename="rabengali", category="lo", description="BENGALI LETTER RA", direction="l", linebreak="al", unicodeslot=0x09B0, }, [0x09B2]={ adobename="labengali", category="lo", description="BENGALI LETTER LA", direction="l", linebreak="al", unicodeslot=0x09B2, }, [0x09B6]={ adobename="shabengali", category="lo", description="BENGALI LETTER SHA", direction="l", linebreak="al", unicodeslot=0x09B6, }, [0x09B7]={ adobename="ssabengali", category="lo", description="BENGALI LETTER SSA", direction="l", linebreak="al", unicodeslot=0x09B7, }, [0x09B8]={ adobename="sabengali", category="lo", description="BENGALI LETTER SA", direction="l", linebreak="al", unicodeslot=0x09B8, }, [0x09B9]={ adobename="habengali", category="lo", description="BENGALI LETTER HA", direction="l", linebreak="al", unicodeslot=0x09B9, }, [0x09BC]={ adobename="nuktabengali", category="mn", description="BENGALI SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x09BC, }, [0x09BD]={ category="lo", description="BENGALI SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x09BD, }, [0x09BE]={ adobename="aavowelsignbengali", category="mc", description="BENGALI VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x09BE, }, [0x09BF]={ adobename="ivowelsignbengali", category="mc", description="BENGALI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x09BF, }, [0x09C0]={ adobename="iivowelsignbengali", category="mc", description="BENGALI VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x09C0, }, [0x09C1]={ adobename="uvowelsignbengali", category="mn", description="BENGALI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x09C1, }, [0x09C2]={ adobename="uuvowelsignbengali", category="mn", description="BENGALI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x09C2, }, [0x09C3]={ adobename="rvocalicvowelsignbengali", category="mn", description="BENGALI VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x09C3, }, [0x09C4]={ adobename="rrvocalicvowelsignbengali", category="mn", description="BENGALI VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x09C4, }, [0x09C7]={ adobename="evowelsignbengali", category="mc", description="BENGALI VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x09C7, }, [0x09C8]={ adobename="aivowelsignbengali", category="mc", description="BENGALI VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0x09C8, }, [0x09CB]={ adobename="ovowelsignbengali", category="mc", description="BENGALI VOWEL SIGN O", direction="l", linebreak="cm", specials={ "char", 0x09C7, 0x09BE }, unicodeslot=0x09CB, }, [0x09CC]={ adobename="auvowelsignbengali", category="mc", description="BENGALI VOWEL SIGN AU", direction="l", linebreak="cm", specials={ "char", 0x09C7, 0x09D7 }, unicodeslot=0x09CC, }, [0x09CD]={ adobename="viramabengali", category="mn", description="BENGALI SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x09CD, }, [0x09CE]={ category="lo", description="BENGALI LETTER KHANDA TA", direction="l", linebreak="al", unicodeslot=0x09CE, }, [0x09D7]={ adobename="aulengthmarkbengali", category="mc", description="BENGALI AU LENGTH MARK", direction="l", linebreak="cm", unicodeslot=0x09D7, }, [0x09DC]={ adobename="rrabengali", category="lo", description="BENGALI LETTER RRA", direction="l", linebreak="al", specials={ "char", 0x09A1, 0x09BC }, unicodeslot=0x09DC, }, [0x09DD]={ adobename="rhabengali", category="lo", description="BENGALI LETTER RHA", direction="l", linebreak="al", specials={ "char", 0x09A2, 0x09BC }, unicodeslot=0x09DD, }, [0x09DF]={ adobename="yyabengali", category="lo", description="BENGALI LETTER YYA", direction="l", linebreak="al", specials={ "char", 0x09AF, 0x09BC }, unicodeslot=0x09DF, }, [0x09E0]={ adobename="rrvocalicbengali", category="lo", description="BENGALI LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x09E0, }, [0x09E1]={ adobename="llvocalicbengali", category="lo", description="BENGALI LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x09E1, }, [0x09E2]={ adobename="lvocalicvowelsignbengali", category="mn", description="BENGALI VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x09E2, }, [0x09E3]={ adobename="llvocalicvowelsignbengali", category="mn", description="BENGALI VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x09E3, }, [0x09E6]={ adobename="zerobengali", category="nd", description="BENGALI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x09E6, }, [0x09E7]={ adobename="onebengali", category="nd", description="BENGALI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x09E7, }, [0x09E8]={ adobename="twobengali", category="nd", description="BENGALI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x09E8, }, [0x09E9]={ adobename="threebengali", category="nd", description="BENGALI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x09E9, }, [0x09EA]={ adobename="fourbengali", category="nd", description="BENGALI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x09EA, }, [0x09EB]={ adobename="fivebengali", category="nd", description="BENGALI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x09EB, }, [0x09EC]={ adobename="sixbengali", category="nd", description="BENGALI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x09EC, }, [0x09ED]={ adobename="sevenbengali", category="nd", description="BENGALI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x09ED, }, [0x09EE]={ adobename="eightbengali", category="nd", description="BENGALI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x09EE, }, [0x09EF]={ adobename="ninebengali", category="nd", description="BENGALI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x09EF, }, [0x09F0]={ adobename="ramiddlediagonalbengali", category="lo", description="BENGALI LETTER RA WITH MIDDLE DIAGONAL", direction="l", linebreak="al", shcode=0x09B0, unicodeslot=0x09F0, }, [0x09F1]={ adobename="ralowerdiagonalbengali", category="lo", description="BENGALI LETTER RA WITH LOWER DIAGONAL", direction="l", linebreak="al", shcode=0x09B0, unicodeslot=0x09F1, }, [0x09F2]={ adobename="rupeemarkbengali", category="sc", description="BENGALI RUPEE MARK", direction="et", linebreak="po", unicodeslot=0x09F2, }, [0x09F3]={ adobename="rupeesignbengali", category="sc", description="BENGALI RUPEE SIGN", direction="et", linebreak="po", unicodeslot=0x09F3, }, [0x09F4]={ adobename="onenumeratorbengali", category="no", description="BENGALI CURRENCY NUMERATOR ONE", direction="l", linebreak="al", unicodeslot=0x09F4, }, [0x09F5]={ adobename="twonumeratorbengali", category="no", description="BENGALI CURRENCY NUMERATOR TWO", direction="l", linebreak="al", unicodeslot=0x09F5, }, [0x09F6]={ adobename="threenumeratorbengali", category="no", description="BENGALI CURRENCY NUMERATOR THREE", direction="l", linebreak="al", unicodeslot=0x09F6, }, [0x09F7]={ adobename="fournumeratorbengali", category="no", description="BENGALI CURRENCY NUMERATOR FOUR", direction="l", linebreak="al", unicodeslot=0x09F7, }, [0x09F8]={ adobename="denominatorminusonenumeratorbengali", category="no", description="BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR", direction="l", linebreak="al", unicodeslot=0x09F8, }, [0x09F9]={ adobename="sixteencurrencydenominatorbengali", category="no", description="BENGALI CURRENCY DENOMINATOR SIXTEEN", direction="l", linebreak="po", unicodeslot=0x09F9, }, [0x09FA]={ adobename="issharbengali", category="so", description="BENGALI ISSHAR", direction="l", linebreak="al", unicodeslot=0x09FA, }, [0x09FB]={ category="sc", description="BENGALI GANDA MARK", direction="et", linebreak="pr", unicodeslot=0x09FB, }, [0x0A01]={ category="mn", description="GURMUKHI SIGN ADAK BINDI", direction="nsm", linebreak="cm", unicodeslot=0x0A01, }, [0x0A02]={ adobename="bindigurmukhi", category="mn", description="GURMUKHI SIGN BINDI", direction="nsm", linebreak="cm", unicodeslot=0x0A02, }, [0x0A03]={ category="mc", description="GURMUKHI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0A03, }, [0x0A05]={ adobename="agurmukhi", category="lo", description="GURMUKHI LETTER A", direction="l", linebreak="al", unicodeslot=0x0A05, }, [0x0A06]={ adobename="aagurmukhi", category="lo", description="GURMUKHI LETTER AA", direction="l", linebreak="al", unicodeslot=0x0A06, }, [0x0A07]={ adobename="igurmukhi", category="lo", description="GURMUKHI LETTER I", direction="l", linebreak="al", unicodeslot=0x0A07, }, [0x0A08]={ adobename="iigurmukhi", category="lo", description="GURMUKHI LETTER II", direction="l", linebreak="al", unicodeslot=0x0A08, }, [0x0A09]={ adobename="ugurmukhi", category="lo", description="GURMUKHI LETTER U", direction="l", linebreak="al", unicodeslot=0x0A09, }, [0x0A0A]={ adobename="uugurmukhi", category="lo", description="GURMUKHI LETTER UU", direction="l", linebreak="al", unicodeslot=0x0A0A, }, [0x0A0F]={ adobename="eegurmukhi", category="lo", description="GURMUKHI LETTER EE", direction="l", linebreak="al", unicodeslot=0x0A0F, }, [0x0A10]={ adobename="aigurmukhi", category="lo", description="GURMUKHI LETTER AI", direction="l", linebreak="al", unicodeslot=0x0A10, }, [0x0A13]={ adobename="oogurmukhi", category="lo", description="GURMUKHI LETTER OO", direction="l", linebreak="al", unicodeslot=0x0A13, }, [0x0A14]={ adobename="augurmukhi", category="lo", description="GURMUKHI LETTER AU", direction="l", linebreak="al", unicodeslot=0x0A14, }, [0x0A15]={ adobename="kagurmukhi", category="lo", description="GURMUKHI LETTER KA", direction="l", linebreak="al", unicodeslot=0x0A15, }, [0x0A16]={ adobename="khagurmukhi", category="lo", description="GURMUKHI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0A16, }, [0x0A17]={ adobename="gagurmukhi", category="lo", description="GURMUKHI LETTER GA", direction="l", linebreak="al", unicodeslot=0x0A17, }, [0x0A18]={ adobename="ghagurmukhi", category="lo", description="GURMUKHI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0A18, }, [0x0A19]={ adobename="ngagurmukhi", category="lo", description="GURMUKHI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0A19, }, [0x0A1A]={ adobename="cagurmukhi", category="lo", description="GURMUKHI LETTER CA", direction="l", linebreak="al", unicodeslot=0x0A1A, }, [0x0A1B]={ adobename="chagurmukhi", category="lo", description="GURMUKHI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0A1B, }, [0x0A1C]={ adobename="jagurmukhi", category="lo", description="GURMUKHI LETTER JA", direction="l", linebreak="al", unicodeslot=0x0A1C, }, [0x0A1D]={ adobename="jhagurmukhi", category="lo", description="GURMUKHI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x0A1D, }, [0x0A1E]={ adobename="nyagurmukhi", category="lo", description="GURMUKHI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0A1E, }, [0x0A1F]={ adobename="ttagurmukhi", category="lo", description="GURMUKHI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0A1F, }, [0x0A20]={ adobename="tthagurmukhi", category="lo", description="GURMUKHI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0A20, }, [0x0A21]={ adobename="ddagurmukhi", category="lo", description="GURMUKHI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0A21, }, [0x0A22]={ adobename="ddhagurmukhi", category="lo", description="GURMUKHI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0A22, }, [0x0A23]={ adobename="nnagurmukhi", category="lo", description="GURMUKHI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0A23, }, [0x0A24]={ adobename="tagurmukhi", category="lo", description="GURMUKHI LETTER TA", direction="l", linebreak="al", unicodeslot=0x0A24, }, [0x0A25]={ adobename="thagurmukhi", category="lo", description="GURMUKHI LETTER THA", direction="l", linebreak="al", unicodeslot=0x0A25, }, [0x0A26]={ adobename="dagurmukhi", category="lo", description="GURMUKHI LETTER DA", direction="l", linebreak="al", unicodeslot=0x0A26, }, [0x0A27]={ adobename="dhagurmukhi", category="lo", description="GURMUKHI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0A27, }, [0x0A28]={ adobename="nagurmukhi", category="lo", description="GURMUKHI LETTER NA", direction="l", linebreak="al", unicodeslot=0x0A28, }, [0x0A2A]={ adobename="pagurmukhi", category="lo", description="GURMUKHI LETTER PA", direction="l", linebreak="al", unicodeslot=0x0A2A, }, [0x0A2B]={ adobename="phagurmukhi", category="lo", description="GURMUKHI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0A2B, }, [0x0A2C]={ adobename="bagurmukhi", category="lo", description="GURMUKHI LETTER BA", direction="l", linebreak="al", unicodeslot=0x0A2C, }, [0x0A2D]={ adobename="bhagurmukhi", category="lo", description="GURMUKHI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x0A2D, }, [0x0A2E]={ adobename="magurmukhi", category="lo", description="GURMUKHI LETTER MA", direction="l", linebreak="al", unicodeslot=0x0A2E, }, [0x0A2F]={ adobename="yagurmukhi", category="lo", description="GURMUKHI LETTER YA", direction="l", linebreak="al", unicodeslot=0x0A2F, }, [0x0A30]={ adobename="ragurmukhi", category="lo", description="GURMUKHI LETTER RA", direction="l", linebreak="al", unicodeslot=0x0A30, }, [0x0A32]={ adobename="lagurmukhi", category="lo", description="GURMUKHI LETTER LA", direction="l", linebreak="al", unicodeslot=0x0A32, }, [0x0A33]={ category="lo", description="GURMUKHI LETTER LLA", direction="l", linebreak="al", specials={ "char", 0x0A32, 0x0A3C }, unicodeslot=0x0A33, }, [0x0A35]={ adobename="vagurmukhi", category="lo", description="GURMUKHI LETTER VA", direction="l", linebreak="al", unicodeslot=0x0A35, }, [0x0A36]={ adobename="shagurmukhi", category="lo", description="GURMUKHI LETTER SHA", direction="l", linebreak="al", specials={ "char", 0x0A38, 0x0A3C }, unicodeslot=0x0A36, }, [0x0A38]={ adobename="sagurmukhi", category="lo", description="GURMUKHI LETTER SA", direction="l", linebreak="al", unicodeslot=0x0A38, }, [0x0A39]={ adobename="hagurmukhi", category="lo", description="GURMUKHI LETTER HA", direction="l", linebreak="al", unicodeslot=0x0A39, }, [0x0A3C]={ adobename="nuktagurmukhi", category="mn", description="GURMUKHI SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x0A3C, }, [0x0A3E]={ adobename="aamatragurmukhi", category="mc", description="GURMUKHI VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x0A3E, }, [0x0A3F]={ adobename="imatragurmukhi", category="mc", description="GURMUKHI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x0A3F, }, [0x0A40]={ adobename="iimatragurmukhi", category="mc", description="GURMUKHI VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x0A40, }, [0x0A41]={ adobename="umatragurmukhi", category="mn", description="GURMUKHI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0A41, }, [0x0A42]={ adobename="uumatragurmukhi", category="mn", description="GURMUKHI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x0A42, }, [0x0A47]={ adobename="eematragurmukhi", category="mn", description="GURMUKHI VOWEL SIGN EE", direction="nsm", linebreak="cm", unicodeslot=0x0A47, }, [0x0A48]={ adobename="aimatragurmukhi", category="mn", description="GURMUKHI VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x0A48, }, [0x0A4B]={ adobename="oomatragurmukhi", category="mn", description="GURMUKHI VOWEL SIGN OO", direction="nsm", linebreak="cm", unicodeslot=0x0A4B, }, [0x0A4C]={ adobename="aumatragurmukhi", category="mn", description="GURMUKHI VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0x0A4C, }, [0x0A4D]={ adobename="halantgurmukhi", category="mn", description="GURMUKHI SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0A4D, }, [0x0A51]={ category="mn", description="GURMUKHI SIGN UDAAT", direction="nsm", linebreak="cm", unicodeslot=0x0A51, }, [0x0A59]={ adobename="khhagurmukhi", category="lo", description="GURMUKHI LETTER KHHA", direction="l", linebreak="al", specials={ "char", 0x0A16, 0x0A3C }, unicodeslot=0x0A59, }, [0x0A5A]={ adobename="ghhagurmukhi", category="lo", description="GURMUKHI LETTER GHHA", direction="l", linebreak="al", specials={ "char", 0x0A17, 0x0A3C }, unicodeslot=0x0A5A, }, [0x0A5B]={ adobename="zagurmukhi", category="lo", description="GURMUKHI LETTER ZA", direction="l", linebreak="al", specials={ "char", 0x0A1C, 0x0A3C }, unicodeslot=0x0A5B, }, [0x0A5C]={ adobename="rragurmukhi", category="lo", description="GURMUKHI LETTER RRA", direction="l", linebreak="al", unicodeslot=0x0A5C, }, [0x0A5E]={ adobename="fagurmukhi", category="lo", description="GURMUKHI LETTER FA", direction="l", linebreak="al", specials={ "char", 0x0A2B, 0x0A3C }, unicodeslot=0x0A5E, }, [0x0A66]={ adobename="zerogurmukhi", category="nd", description="GURMUKHI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0A66, }, [0x0A67]={ adobename="onegurmukhi", category="nd", description="GURMUKHI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0A67, }, [0x0A68]={ adobename="twogurmukhi", category="nd", description="GURMUKHI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0A68, }, [0x0A69]={ adobename="threegurmukhi", category="nd", description="GURMUKHI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0A69, }, [0x0A6A]={ adobename="fourgurmukhi", category="nd", description="GURMUKHI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0A6A, }, [0x0A6B]={ adobename="fivegurmukhi", category="nd", description="GURMUKHI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0A6B, }, [0x0A6C]={ adobename="sixgurmukhi", category="nd", description="GURMUKHI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0A6C, }, [0x0A6D]={ adobename="sevengurmukhi", category="nd", description="GURMUKHI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0A6D, }, [0x0A6E]={ adobename="eightgurmukhi", category="nd", description="GURMUKHI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0A6E, }, [0x0A6F]={ adobename="ninegurmukhi", category="nd", description="GURMUKHI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0A6F, }, [0x0A70]={ adobename="tippigurmukhi", category="mn", description="GURMUKHI TIPPI", direction="nsm", linebreak="cm", unicodeslot=0x0A70, }, [0x0A71]={ adobename="addakgurmukhi", category="mn", description="GURMUKHI ADDAK", direction="nsm", linebreak="cm", unicodeslot=0x0A71, }, [0x0A72]={ adobename="irigurmukhi", category="lo", description="GURMUKHI IRI", direction="l", linebreak="al", unicodeslot=0x0A72, }, [0x0A73]={ adobename="uragurmukhi", category="lo", description="GURMUKHI URA", direction="l", linebreak="al", unicodeslot=0x0A73, }, [0x0A74]={ adobename="ekonkargurmukhi", category="lo", description="GURMUKHI EK ONKAR", direction="l", linebreak="al", unicodeslot=0x0A74, }, [0x0A75]={ category="mn", description="GURMUKHI SIGN YAKASH", direction="nsm", linebreak="cm", unicodeslot=0x0A75, }, [0x0A81]={ adobename="candrabindugujarati", category="mn", description="GUJARATI SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x0A81, }, [0x0A82]={ adobename="anusvaragujarati", category="mn", description="GUJARATI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x0A82, }, [0x0A83]={ adobename="visargagujarati", category="mc", description="GUJARATI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0A83, }, [0x0A85]={ adobename="agujarati", category="lo", description="GUJARATI LETTER A", direction="l", linebreak="al", unicodeslot=0x0A85, }, [0x0A86]={ adobename="aagujarati", category="lo", description="GUJARATI LETTER AA", direction="l", linebreak="al", unicodeslot=0x0A86, }, [0x0A87]={ adobename="igujarati", category="lo", description="GUJARATI LETTER I", direction="l", linebreak="al", unicodeslot=0x0A87, }, [0x0A88]={ adobename="iigujarati", category="lo", description="GUJARATI LETTER II", direction="l", linebreak="al", unicodeslot=0x0A88, }, [0x0A89]={ adobename="ugujarati", category="lo", description="GUJARATI LETTER U", direction="l", linebreak="al", unicodeslot=0x0A89, }, [0x0A8A]={ adobename="uugujarati", category="lo", description="GUJARATI LETTER UU", direction="l", linebreak="al", unicodeslot=0x0A8A, }, [0x0A8B]={ adobename="rvocalicgujarati", category="lo", description="GUJARATI LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x0A8B, }, [0x0A8C]={ category="lo", description="GUJARATI LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x0A8C, }, [0x0A8D]={ adobename="ecandragujarati", category="lo", description="GUJARATI VOWEL CANDRA E", direction="l", linebreak="al", unicodeslot=0x0A8D, }, [0x0A8F]={ adobename="egujarati", category="lo", description="GUJARATI LETTER E", direction="l", linebreak="al", unicodeslot=0x0A8F, }, [0x0A90]={ adobename="aigujarati", category="lo", description="GUJARATI LETTER AI", direction="l", linebreak="al", unicodeslot=0x0A90, }, [0x0A91]={ adobename="ocandragujarati", category="lo", description="GUJARATI VOWEL CANDRA O", direction="l", linebreak="al", unicodeslot=0x0A91, }, [0x0A93]={ adobename="ogujarati", category="lo", description="GUJARATI LETTER O", direction="l", linebreak="al", unicodeslot=0x0A93, }, [0x0A94]={ adobename="augujarati", category="lo", description="GUJARATI LETTER AU", direction="l", linebreak="al", unicodeslot=0x0A94, }, [0x0A95]={ adobename="kagujarati", category="lo", description="GUJARATI LETTER KA", direction="l", linebreak="al", unicodeslot=0x0A95, }, [0x0A96]={ adobename="khagujarati", category="lo", description="GUJARATI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0A96, }, [0x0A97]={ adobename="gagujarati", category="lo", description="GUJARATI LETTER GA", direction="l", linebreak="al", unicodeslot=0x0A97, }, [0x0A98]={ adobename="ghagujarati", category="lo", description="GUJARATI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0A98, }, [0x0A99]={ adobename="ngagujarati", category="lo", description="GUJARATI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0A99, }, [0x0A9A]={ adobename="cagujarati", category="lo", description="GUJARATI LETTER CA", direction="l", linebreak="al", unicodeslot=0x0A9A, }, [0x0A9B]={ adobename="chagujarati", category="lo", description="GUJARATI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0A9B, }, [0x0A9C]={ adobename="jagujarati", category="lo", description="GUJARATI LETTER JA", direction="l", linebreak="al", unicodeslot=0x0A9C, }, [0x0A9D]={ adobename="jhagujarati", category="lo", description="GUJARATI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x0A9D, }, [0x0A9E]={ adobename="nyagujarati", category="lo", description="GUJARATI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0A9E, }, [0x0A9F]={ adobename="ttagujarati", category="lo", description="GUJARATI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0A9F, }, [0x0AA0]={ adobename="tthagujarati", category="lo", description="GUJARATI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0AA0, }, [0x0AA1]={ adobename="ddagujarati", category="lo", description="GUJARATI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0AA1, }, [0x0AA2]={ adobename="ddhagujarati", category="lo", description="GUJARATI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0AA2, }, [0x0AA3]={ adobename="nnagujarati", category="lo", description="GUJARATI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0AA3, }, [0x0AA4]={ adobename="tagujarati", category="lo", description="GUJARATI LETTER TA", direction="l", linebreak="al", unicodeslot=0x0AA4, }, [0x0AA5]={ adobename="thagujarati", category="lo", description="GUJARATI LETTER THA", direction="l", linebreak="al", unicodeslot=0x0AA5, }, [0x0AA6]={ adobename="dagujarati", category="lo", description="GUJARATI LETTER DA", direction="l", linebreak="al", unicodeslot=0x0AA6, }, [0x0AA7]={ adobename="dhagujarati", category="lo", description="GUJARATI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0AA7, }, [0x0AA8]={ adobename="nagujarati", category="lo", description="GUJARATI LETTER NA", direction="l", linebreak="al", unicodeslot=0x0AA8, }, [0x0AAA]={ adobename="pagujarati", category="lo", description="GUJARATI LETTER PA", direction="l", linebreak="al", unicodeslot=0x0AAA, }, [0x0AAB]={ adobename="phagujarati", category="lo", description="GUJARATI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0AAB, }, [0x0AAC]={ adobename="bagujarati", category="lo", description="GUJARATI LETTER BA", direction="l", linebreak="al", unicodeslot=0x0AAC, }, [0x0AAD]={ adobename="bhagujarati", category="lo", description="GUJARATI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x0AAD, }, [0x0AAE]={ adobename="magujarati", category="lo", description="GUJARATI LETTER MA", direction="l", linebreak="al", unicodeslot=0x0AAE, }, [0x0AAF]={ adobename="yagujarati", category="lo", description="GUJARATI LETTER YA", direction="l", linebreak="al", unicodeslot=0x0AAF, }, [0x0AB0]={ adobename="ragujarati", category="lo", description="GUJARATI LETTER RA", direction="l", linebreak="al", unicodeslot=0x0AB0, }, [0x0AB2]={ adobename="lagujarati", category="lo", description="GUJARATI LETTER LA", direction="l", linebreak="al", unicodeslot=0x0AB2, }, [0x0AB3]={ adobename="llagujarati", category="lo", description="GUJARATI LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0AB3, }, [0x0AB5]={ adobename="vagujarati", category="lo", description="GUJARATI LETTER VA", direction="l", linebreak="al", unicodeslot=0x0AB5, }, [0x0AB6]={ adobename="shagujarati", category="lo", description="GUJARATI LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0AB6, }, [0x0AB7]={ adobename="ssagujarati", category="lo", description="GUJARATI LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0AB7, }, [0x0AB8]={ adobename="sagujarati", category="lo", description="GUJARATI LETTER SA", direction="l", linebreak="al", unicodeslot=0x0AB8, }, [0x0AB9]={ adobename="hagujarati", category="lo", description="GUJARATI LETTER HA", direction="l", linebreak="al", unicodeslot=0x0AB9, }, [0x0ABC]={ adobename="nuktagujarati", category="mn", description="GUJARATI SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x0ABC, }, [0x0ABD]={ category="lo", description="GUJARATI SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x0ABD, }, [0x0ABE]={ adobename="aavowelsigngujarati", category="mc", description="GUJARATI VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x0ABE, }, [0x0ABF]={ adobename="ivowelsigngujarati", category="mc", description="GUJARATI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x0ABF, }, [0x0AC0]={ adobename="iivowelsigngujarati", category="mc", description="GUJARATI VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x0AC0, }, [0x0AC1]={ adobename="uvowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0AC1, }, [0x0AC2]={ adobename="uuvowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x0AC2, }, [0x0AC3]={ adobename="rvocalicvowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x0AC3, }, [0x0AC4]={ adobename="rrvocalicvowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x0AC4, }, [0x0AC5]={ adobename="ecandravowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN CANDRA E", direction="nsm", linebreak="cm", unicodeslot=0x0AC5, }, [0x0AC7]={ adobename="evowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x0AC7, }, [0x0AC8]={ adobename="aivowelsigngujarati", category="mn", description="GUJARATI VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x0AC8, }, [0x0AC9]={ adobename="ocandravowelsigngujarati", category="mc", description="GUJARATI VOWEL SIGN CANDRA O", direction="l", linebreak="cm", unicodeslot=0x0AC9, }, [0x0ACB]={ adobename="ovowelsigngujarati", category="mc", description="GUJARATI VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x0ACB, }, [0x0ACC]={ adobename="auvowelsigngujarati", category="mc", description="GUJARATI VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0x0ACC, }, [0x0ACD]={ adobename="viramagujarati", category="mn", description="GUJARATI SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0ACD, }, [0x0AD0]={ adobename="omgujarati", category="lo", description="GUJARATI OM", direction="l", linebreak="al", unicodeslot=0x0AD0, }, [0x0AE0]={ adobename="rrvocalicgujarati", category="lo", description="GUJARATI LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x0AE0, }, [0x0AE1]={ category="lo", description="GUJARATI LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x0AE1, }, [0x0AE2]={ category="mn", description="GUJARATI VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x0AE2, }, [0x0AE3]={ category="mn", description="GUJARATI VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x0AE3, }, [0x0AE6]={ adobename="zerogujarati", category="nd", description="GUJARATI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0AE6, }, [0x0AE7]={ adobename="onegujarati", category="nd", description="GUJARATI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0AE7, }, [0x0AE8]={ adobename="twogujarati", category="nd", description="GUJARATI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0AE8, }, [0x0AE9]={ adobename="threegujarati", category="nd", description="GUJARATI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0AE9, }, [0x0AEA]={ adobename="fourgujarati", category="nd", description="GUJARATI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0AEA, }, [0x0AEB]={ adobename="fivegujarati", category="nd", description="GUJARATI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0AEB, }, [0x0AEC]={ adobename="sixgujarati", category="nd", description="GUJARATI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0AEC, }, [0x0AED]={ adobename="sevengujarati", category="nd", description="GUJARATI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0AED, }, [0x0AEE]={ adobename="eightgujarati", category="nd", description="GUJARATI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0AEE, }, [0x0AEF]={ adobename="ninegujarati", category="nd", description="GUJARATI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0AEF, }, [0x0AF0]={ category="po", description="GUJARATI ABBREVIATION SIGN", direction="l", linebreak="al", unicodeslot=0x0AF0, }, [0x0AF1]={ category="sc", description="GUJARATI RUPEE SIGN", direction="et", linebreak="pr", unicodeslot=0x0AF1, }, [0x0B01]={ category="mn", description="ORIYA SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x0B01, }, [0x0B02]={ category="mc", description="ORIYA SIGN ANUSVARA", direction="l", linebreak="cm", unicodeslot=0x0B02, }, [0x0B03]={ category="mc", description="ORIYA SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0B03, }, [0x0B05]={ category="lo", description="ORIYA LETTER A", direction="l", linebreak="al", unicodeslot=0x0B05, }, [0x0B06]={ category="lo", description="ORIYA LETTER AA", direction="l", linebreak="al", unicodeslot=0x0B06, }, [0x0B07]={ category="lo", description="ORIYA LETTER I", direction="l", linebreak="al", unicodeslot=0x0B07, }, [0x0B08]={ category="lo", description="ORIYA LETTER II", direction="l", linebreak="al", unicodeslot=0x0B08, }, [0x0B09]={ category="lo", description="ORIYA LETTER U", direction="l", linebreak="al", unicodeslot=0x0B09, }, [0x0B0A]={ category="lo", description="ORIYA LETTER UU", direction="l", linebreak="al", unicodeslot=0x0B0A, }, [0x0B0B]={ category="lo", description="ORIYA LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x0B0B, }, [0x0B0C]={ category="lo", description="ORIYA LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x0B0C, }, [0x0B0F]={ category="lo", description="ORIYA LETTER E", direction="l", linebreak="al", unicodeslot=0x0B0F, }, [0x0B10]={ category="lo", description="ORIYA LETTER AI", direction="l", linebreak="al", unicodeslot=0x0B10, }, [0x0B13]={ category="lo", description="ORIYA LETTER O", direction="l", linebreak="al", unicodeslot=0x0B13, }, [0x0B14]={ category="lo", description="ORIYA LETTER AU", direction="l", linebreak="al", unicodeslot=0x0B14, }, [0x0B15]={ category="lo", description="ORIYA LETTER KA", direction="l", linebreak="al", unicodeslot=0x0B15, }, [0x0B16]={ category="lo", description="ORIYA LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0B16, }, [0x0B17]={ category="lo", description="ORIYA LETTER GA", direction="l", linebreak="al", unicodeslot=0x0B17, }, [0x0B18]={ category="lo", description="ORIYA LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0B18, }, [0x0B19]={ category="lo", description="ORIYA LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0B19, }, [0x0B1A]={ category="lo", description="ORIYA LETTER CA", direction="l", linebreak="al", unicodeslot=0x0B1A, }, [0x0B1B]={ category="lo", description="ORIYA LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0B1B, }, [0x0B1C]={ category="lo", description="ORIYA LETTER JA", direction="l", linebreak="al", unicodeslot=0x0B1C, }, [0x0B1D]={ category="lo", description="ORIYA LETTER JHA", direction="l", linebreak="al", unicodeslot=0x0B1D, }, [0x0B1E]={ category="lo", description="ORIYA LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0B1E, }, [0x0B1F]={ category="lo", description="ORIYA LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0B1F, }, [0x0B20]={ category="lo", description="ORIYA LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0B20, }, [0x0B21]={ category="lo", description="ORIYA LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0B21, }, [0x0B22]={ category="lo", description="ORIYA LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0B22, }, [0x0B23]={ category="lo", description="ORIYA LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0B23, }, [0x0B24]={ category="lo", description="ORIYA LETTER TA", direction="l", linebreak="al", unicodeslot=0x0B24, }, [0x0B25]={ category="lo", description="ORIYA LETTER THA", direction="l", linebreak="al", unicodeslot=0x0B25, }, [0x0B26]={ category="lo", description="ORIYA LETTER DA", direction="l", linebreak="al", unicodeslot=0x0B26, }, [0x0B27]={ category="lo", description="ORIYA LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0B27, }, [0x0B28]={ category="lo", description="ORIYA LETTER NA", direction="l", linebreak="al", unicodeslot=0x0B28, }, [0x0B2A]={ category="lo", description="ORIYA LETTER PA", direction="l", linebreak="al", unicodeslot=0x0B2A, }, [0x0B2B]={ category="lo", description="ORIYA LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0B2B, }, [0x0B2C]={ category="lo", description="ORIYA LETTER BA", direction="l", linebreak="al", unicodeslot=0x0B2C, }, [0x0B2D]={ category="lo", description="ORIYA LETTER BHA", direction="l", linebreak="al", unicodeslot=0x0B2D, }, [0x0B2E]={ category="lo", description="ORIYA LETTER MA", direction="l", linebreak="al", unicodeslot=0x0B2E, }, [0x0B2F]={ category="lo", description="ORIYA LETTER YA", direction="l", linebreak="al", unicodeslot=0x0B2F, }, [0x0B30]={ category="lo", description="ORIYA LETTER RA", direction="l", linebreak="al", unicodeslot=0x0B30, }, [0x0B32]={ category="lo", description="ORIYA LETTER LA", direction="l", linebreak="al", unicodeslot=0x0B32, }, [0x0B33]={ category="lo", description="ORIYA LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0B33, }, [0x0B35]={ category="lo", description="ORIYA LETTER VA", direction="l", linebreak="al", unicodeslot=0x0B35, }, [0x0B36]={ category="lo", description="ORIYA LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0B36, }, [0x0B37]={ category="lo", description="ORIYA LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0B37, }, [0x0B38]={ category="lo", description="ORIYA LETTER SA", direction="l", linebreak="al", unicodeslot=0x0B38, }, [0x0B39]={ category="lo", description="ORIYA LETTER HA", direction="l", linebreak="al", unicodeslot=0x0B39, }, [0x0B3C]={ category="mn", description="ORIYA SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x0B3C, }, [0x0B3D]={ category="lo", description="ORIYA SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x0B3D, }, [0x0B3E]={ category="mc", description="ORIYA VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x0B3E, }, [0x0B3F]={ category="mn", description="ORIYA VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x0B3F, }, [0x0B40]={ category="mc", description="ORIYA VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x0B40, }, [0x0B41]={ category="mn", description="ORIYA VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0B41, }, [0x0B42]={ category="mn", description="ORIYA VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x0B42, }, [0x0B43]={ category="mn", description="ORIYA VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x0B43, }, [0x0B44]={ category="mn", description="ORIYA VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x0B44, }, [0x0B47]={ category="mc", description="ORIYA VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x0B47, }, [0x0B48]={ category="mc", description="ORIYA VOWEL SIGN AI", direction="l", linebreak="cm", specials={ "char", 0x0B47, 0x0B56 }, unicodeslot=0x0B48, }, [0x0B4B]={ category="mc", description="ORIYA VOWEL SIGN O", direction="l", linebreak="cm", specials={ "char", 0x0B47, 0x0B3E }, unicodeslot=0x0B4B, }, [0x0B4C]={ category="mc", description="ORIYA VOWEL SIGN AU", direction="l", linebreak="cm", specials={ "char", 0x0B47, 0x0B57 }, unicodeslot=0x0B4C, }, [0x0B4D]={ category="mn", description="ORIYA SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0B4D, }, [0x0B56]={ category="mn", description="ORIYA AI LENGTH MARK", direction="nsm", linebreak="cm", unicodeslot=0x0B56, }, [0x0B57]={ category="mc", description="ORIYA AU LENGTH MARK", direction="l", linebreak="cm", unicodeslot=0x0B57, }, [0x0B5C]={ category="lo", description="ORIYA LETTER RRA", direction="l", linebreak="al", specials={ "char", 0x0B21, 0x0B3C }, unicodeslot=0x0B5C, }, [0x0B5D]={ category="lo", description="ORIYA LETTER RHA", direction="l", linebreak="al", specials={ "char", 0x0B22, 0x0B3C }, unicodeslot=0x0B5D, }, [0x0B5F]={ category="lo", description="ORIYA LETTER YYA", direction="l", linebreak="al", unicodeslot=0x0B5F, }, [0x0B60]={ category="lo", description="ORIYA LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x0B60, }, [0x0B61]={ category="lo", description="ORIYA LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x0B61, }, [0x0B62]={ category="mn", description="ORIYA VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x0B62, }, [0x0B63]={ category="mn", description="ORIYA VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x0B63, }, [0x0B66]={ category="nd", description="ORIYA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0B66, }, [0x0B67]={ category="nd", description="ORIYA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0B67, }, [0x0B68]={ category="nd", description="ORIYA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0B68, }, [0x0B69]={ category="nd", description="ORIYA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0B69, }, [0x0B6A]={ category="nd", description="ORIYA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0B6A, }, [0x0B6B]={ category="nd", description="ORIYA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0B6B, }, [0x0B6C]={ category="nd", description="ORIYA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0B6C, }, [0x0B6D]={ category="nd", description="ORIYA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0B6D, }, [0x0B6E]={ category="nd", description="ORIYA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0B6E, }, [0x0B6F]={ category="nd", description="ORIYA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0B6F, }, [0x0B70]={ category="so", description="ORIYA ISSHAR", direction="l", linebreak="al", unicodeslot=0x0B70, }, [0x0B71]={ category="lo", description="ORIYA LETTER WA", direction="l", linebreak="al", unicodeslot=0x0B71, }, [0x0B72]={ category="no", description="ORIYA FRACTION ONE QUARTER", direction="l", linebreak="al", unicodeslot=0x0B72, }, [0x0B73]={ category="no", description="ORIYA FRACTION ONE HALF", direction="l", linebreak="al", unicodeslot=0x0B73, }, [0x0B74]={ category="no", description="ORIYA FRACTION THREE QUARTERS", direction="l", linebreak="al", unicodeslot=0x0B74, }, [0x0B75]={ category="no", description="ORIYA FRACTION ONE SIXTEENTH", direction="l", linebreak="al", unicodeslot=0x0B75, }, [0x0B76]={ category="no", description="ORIYA FRACTION ONE EIGHTH", direction="l", linebreak="al", unicodeslot=0x0B76, }, [0x0B77]={ category="no", description="ORIYA FRACTION THREE SIXTEENTHS", direction="l", linebreak="al", unicodeslot=0x0B77, }, [0x0B82]={ category="mn", description="TAMIL SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x0B82, }, [0x0B83]={ category="lo", description="TAMIL SIGN VISARGA", direction="l", linebreak="al", unicodeslot=0x0B83, }, [0x0B85]={ category="lo", description="TAMIL LETTER A", direction="l", linebreak="al", unicodeslot=0x0B85, }, [0x0B86]={ category="lo", description="TAMIL LETTER AA", direction="l", linebreak="al", unicodeslot=0x0B86, }, [0x0B87]={ category="lo", description="TAMIL LETTER I", direction="l", linebreak="al", unicodeslot=0x0B87, }, [0x0B88]={ category="lo", description="TAMIL LETTER II", direction="l", linebreak="al", unicodeslot=0x0B88, }, [0x0B89]={ category="lo", description="TAMIL LETTER U", direction="l", linebreak="al", unicodeslot=0x0B89, }, [0x0B8A]={ category="lo", description="TAMIL LETTER UU", direction="l", linebreak="al", unicodeslot=0x0B8A, }, [0x0B8E]={ category="lo", description="TAMIL LETTER E", direction="l", linebreak="al", unicodeslot=0x0B8E, }, [0x0B8F]={ category="lo", description="TAMIL LETTER EE", direction="l", linebreak="al", unicodeslot=0x0B8F, }, [0x0B90]={ category="lo", description="TAMIL LETTER AI", direction="l", linebreak="al", unicodeslot=0x0B90, }, [0x0B92]={ category="lo", description="TAMIL LETTER O", direction="l", linebreak="al", unicodeslot=0x0B92, }, [0x0B93]={ category="lo", description="TAMIL LETTER OO", direction="l", linebreak="al", unicodeslot=0x0B93, }, [0x0B94]={ category="lo", description="TAMIL LETTER AU", direction="l", linebreak="al", specials={ "char", 0x0B92, 0x0BD7 }, unicodeslot=0x0B94, }, [0x0B95]={ category="lo", description="TAMIL LETTER KA", direction="l", linebreak="al", unicodeslot=0x0B95, }, [0x0B99]={ category="lo", description="TAMIL LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0B99, }, [0x0B9A]={ category="lo", description="TAMIL LETTER CA", direction="l", linebreak="al", unicodeslot=0x0B9A, }, [0x0B9C]={ category="lo", description="TAMIL LETTER JA", direction="l", linebreak="al", unicodeslot=0x0B9C, }, [0x0B9E]={ category="lo", description="TAMIL LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0B9E, }, [0x0B9F]={ category="lo", description="TAMIL LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0B9F, }, [0x0BA3]={ category="lo", description="TAMIL LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0BA3, }, [0x0BA4]={ category="lo", description="TAMIL LETTER TA", direction="l", linebreak="al", unicodeslot=0x0BA4, }, [0x0BA8]={ category="lo", description="TAMIL LETTER NA", direction="l", linebreak="al", unicodeslot=0x0BA8, }, [0x0BA9]={ category="lo", description="TAMIL LETTER NNNA", direction="l", linebreak="al", unicodeslot=0x0BA9, }, [0x0BAA]={ category="lo", description="TAMIL LETTER PA", direction="l", linebreak="al", unicodeslot=0x0BAA, }, [0x0BAE]={ category="lo", description="TAMIL LETTER MA", direction="l", linebreak="al", unicodeslot=0x0BAE, }, [0x0BAF]={ category="lo", description="TAMIL LETTER YA", direction="l", linebreak="al", unicodeslot=0x0BAF, }, [0x0BB0]={ category="lo", description="TAMIL LETTER RA", direction="l", linebreak="al", unicodeslot=0x0BB0, }, [0x0BB1]={ category="lo", description="TAMIL LETTER RRA", direction="l", linebreak="al", unicodeslot=0x0BB1, }, [0x0BB2]={ category="lo", description="TAMIL LETTER LA", direction="l", linebreak="al", unicodeslot=0x0BB2, }, [0x0BB3]={ category="lo", description="TAMIL LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0BB3, }, [0x0BB4]={ category="lo", description="TAMIL LETTER LLLA", direction="l", linebreak="al", unicodeslot=0x0BB4, }, [0x0BB5]={ category="lo", description="TAMIL LETTER VA", direction="l", linebreak="al", unicodeslot=0x0BB5, }, [0x0BB6]={ category="lo", description="TAMIL LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0BB6, }, [0x0BB7]={ category="lo", description="TAMIL LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0BB7, }, [0x0BB8]={ category="lo", description="TAMIL LETTER SA", direction="l", linebreak="al", unicodeslot=0x0BB8, }, [0x0BB9]={ category="lo", description="TAMIL LETTER HA", direction="l", linebreak="al", unicodeslot=0x0BB9, }, [0x0BBE]={ category="mc", description="TAMIL VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x0BBE, }, [0x0BBF]={ category="mc", description="TAMIL VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x0BBF, }, [0x0BC0]={ category="mn", description="TAMIL VOWEL SIGN II", direction="nsm", linebreak="cm", unicodeslot=0x0BC0, }, [0x0BC1]={ category="mc", description="TAMIL VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0x0BC1, }, [0x0BC2]={ category="mc", description="TAMIL VOWEL SIGN UU", direction="l", linebreak="cm", unicodeslot=0x0BC2, }, [0x0BC6]={ category="mc", description="TAMIL VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x0BC6, }, [0x0BC7]={ category="mc", description="TAMIL VOWEL SIGN EE", direction="l", linebreak="cm", unicodeslot=0x0BC7, }, [0x0BC8]={ category="mc", description="TAMIL VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0x0BC8, }, [0x0BCA]={ category="mc", description="TAMIL VOWEL SIGN O", direction="l", linebreak="cm", specials={ "char", 0x0BC6, 0x0BBE }, unicodeslot=0x0BCA, }, [0x0BCB]={ category="mc", description="TAMIL VOWEL SIGN OO", direction="l", linebreak="cm", specials={ "char", 0x0BC7, 0x0BBE }, unicodeslot=0x0BCB, }, [0x0BCC]={ category="mc", description="TAMIL VOWEL SIGN AU", direction="l", linebreak="cm", specials={ "char", 0x0BC6, 0x0BD7 }, unicodeslot=0x0BCC, }, [0x0BCD]={ category="mn", description="TAMIL SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0BCD, }, [0x0BD0]={ category="lo", description="TAMIL OM", direction="l", linebreak="al", unicodeslot=0x0BD0, }, [0x0BD7]={ category="mc", description="TAMIL AU LENGTH MARK", direction="l", linebreak="cm", unicodeslot=0x0BD7, }, [0x0BE6]={ category="nd", description="TAMIL DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0BE6, }, [0x0BE7]={ category="nd", description="TAMIL DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0BE7, }, [0x0BE8]={ category="nd", description="TAMIL DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0BE8, }, [0x0BE9]={ category="nd", description="TAMIL DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0BE9, }, [0x0BEA]={ category="nd", description="TAMIL DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0BEA, }, [0x0BEB]={ category="nd", description="TAMIL DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0BEB, }, [0x0BEC]={ category="nd", description="TAMIL DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0BEC, }, [0x0BED]={ category="nd", description="TAMIL DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0BED, }, [0x0BEE]={ category="nd", description="TAMIL DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0BEE, }, [0x0BEF]={ category="nd", description="TAMIL DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0BEF, }, [0x0BF0]={ category="no", description="TAMIL NUMBER TEN", direction="l", linebreak="al", unicodeslot=0x0BF0, }, [0x0BF1]={ category="no", description="TAMIL NUMBER ONE HUNDRED", direction="l", linebreak="al", unicodeslot=0x0BF1, }, [0x0BF2]={ category="no", description="TAMIL NUMBER ONE THOUSAND", direction="l", linebreak="al", unicodeslot=0x0BF2, }, [0x0BF3]={ category="so", description="TAMIL DAY SIGN", direction="on", linebreak="al", unicodeslot=0x0BF3, }, [0x0BF4]={ category="so", description="TAMIL MONTH SIGN", direction="on", linebreak="al", unicodeslot=0x0BF4, }, [0x0BF5]={ category="so", description="TAMIL YEAR SIGN", direction="on", linebreak="al", unicodeslot=0x0BF5, }, [0x0BF6]={ category="so", description="TAMIL DEBIT SIGN", direction="on", linebreak="al", unicodeslot=0x0BF6, }, [0x0BF7]={ category="so", description="TAMIL CREDIT SIGN", direction="on", linebreak="al", unicodeslot=0x0BF7, }, [0x0BF8]={ category="so", description="TAMIL AS ABOVE SIGN", direction="on", linebreak="al", unicodeslot=0x0BF8, }, [0x0BF9]={ category="sc", description="TAMIL RUPEE SIGN", direction="et", linebreak="pr", unicodeslot=0x0BF9, }, [0x0BFA]={ category="so", description="TAMIL NUMBER SIGN", direction="on", linebreak="al", unicodeslot=0x0BFA, }, [0x0C01]={ category="mc", description="TELUGU SIGN CANDRABINDU", direction="l", linebreak="cm", unicodeslot=0x0C01, }, [0x0C02]={ category="mc", description="TELUGU SIGN ANUSVARA", direction="l", linebreak="cm", unicodeslot=0x0C02, }, [0x0C03]={ category="mc", description="TELUGU SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0C03, }, [0x0C05]={ category="lo", description="TELUGU LETTER A", direction="l", linebreak="al", unicodeslot=0x0C05, }, [0x0C06]={ category="lo", description="TELUGU LETTER AA", direction="l", linebreak="al", unicodeslot=0x0C06, }, [0x0C07]={ category="lo", description="TELUGU LETTER I", direction="l", linebreak="al", unicodeslot=0x0C07, }, [0x0C08]={ category="lo", description="TELUGU LETTER II", direction="l", linebreak="al", unicodeslot=0x0C08, }, [0x0C09]={ category="lo", description="TELUGU LETTER U", direction="l", linebreak="al", unicodeslot=0x0C09, }, [0x0C0A]={ category="lo", description="TELUGU LETTER UU", direction="l", linebreak="al", unicodeslot=0x0C0A, }, [0x0C0B]={ category="lo", description="TELUGU LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x0C0B, }, [0x0C0C]={ category="lo", description="TELUGU LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x0C0C, }, [0x0C0E]={ category="lo", description="TELUGU LETTER E", direction="l", linebreak="al", unicodeslot=0x0C0E, }, [0x0C0F]={ category="lo", description="TELUGU LETTER EE", direction="l", linebreak="al", unicodeslot=0x0C0F, }, [0x0C10]={ category="lo", description="TELUGU LETTER AI", direction="l", linebreak="al", unicodeslot=0x0C10, }, [0x0C12]={ category="lo", description="TELUGU LETTER O", direction="l", linebreak="al", unicodeslot=0x0C12, }, [0x0C13]={ category="lo", description="TELUGU LETTER OO", direction="l", linebreak="al", unicodeslot=0x0C13, }, [0x0C14]={ category="lo", description="TELUGU LETTER AU", direction="l", linebreak="al", unicodeslot=0x0C14, }, [0x0C15]={ category="lo", description="TELUGU LETTER KA", direction="l", linebreak="al", unicodeslot=0x0C15, }, [0x0C16]={ category="lo", description="TELUGU LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0C16, }, [0x0C17]={ category="lo", description="TELUGU LETTER GA", direction="l", linebreak="al", unicodeslot=0x0C17, }, [0x0C18]={ category="lo", description="TELUGU LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0C18, }, [0x0C19]={ category="lo", description="TELUGU LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0C19, }, [0x0C1A]={ category="lo", description="TELUGU LETTER CA", direction="l", linebreak="al", unicodeslot=0x0C1A, }, [0x0C1B]={ category="lo", description="TELUGU LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0C1B, }, [0x0C1C]={ category="lo", description="TELUGU LETTER JA", direction="l", linebreak="al", unicodeslot=0x0C1C, }, [0x0C1D]={ category="lo", description="TELUGU LETTER JHA", direction="l", linebreak="al", unicodeslot=0x0C1D, }, [0x0C1E]={ category="lo", description="TELUGU LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0C1E, }, [0x0C1F]={ category="lo", description="TELUGU LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0C1F, }, [0x0C20]={ category="lo", description="TELUGU LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0C20, }, [0x0C21]={ category="lo", description="TELUGU LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0C21, }, [0x0C22]={ category="lo", description="TELUGU LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0C22, }, [0x0C23]={ category="lo", description="TELUGU LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0C23, }, [0x0C24]={ category="lo", description="TELUGU LETTER TA", direction="l", linebreak="al", unicodeslot=0x0C24, }, [0x0C25]={ category="lo", description="TELUGU LETTER THA", direction="l", linebreak="al", unicodeslot=0x0C25, }, [0x0C26]={ category="lo", description="TELUGU LETTER DA", direction="l", linebreak="al", unicodeslot=0x0C26, }, [0x0C27]={ category="lo", description="TELUGU LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0C27, }, [0x0C28]={ category="lo", description="TELUGU LETTER NA", direction="l", linebreak="al", unicodeslot=0x0C28, }, [0x0C2A]={ category="lo", description="TELUGU LETTER PA", direction="l", linebreak="al", unicodeslot=0x0C2A, }, [0x0C2B]={ category="lo", description="TELUGU LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0C2B, }, [0x0C2C]={ category="lo", description="TELUGU LETTER BA", direction="l", linebreak="al", unicodeslot=0x0C2C, }, [0x0C2D]={ category="lo", description="TELUGU LETTER BHA", direction="l", linebreak="al", unicodeslot=0x0C2D, }, [0x0C2E]={ category="lo", description="TELUGU LETTER MA", direction="l", linebreak="al", unicodeslot=0x0C2E, }, [0x0C2F]={ category="lo", description="TELUGU LETTER YA", direction="l", linebreak="al", unicodeslot=0x0C2F, }, [0x0C30]={ category="lo", description="TELUGU LETTER RA", direction="l", linebreak="al", unicodeslot=0x0C30, }, [0x0C31]={ category="lo", description="TELUGU LETTER RRA", direction="l", linebreak="al", unicodeslot=0x0C31, }, [0x0C32]={ category="lo", description="TELUGU LETTER LA", direction="l", linebreak="al", unicodeslot=0x0C32, }, [0x0C33]={ category="lo", description="TELUGU LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0C33, }, [0x0C35]={ category="lo", description="TELUGU LETTER VA", direction="l", linebreak="al", unicodeslot=0x0C35, }, [0x0C36]={ category="lo", description="TELUGU LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0C36, }, [0x0C37]={ category="lo", description="TELUGU LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0C37, }, [0x0C38]={ category="lo", description="TELUGU LETTER SA", direction="l", linebreak="al", unicodeslot=0x0C38, }, [0x0C39]={ category="lo", description="TELUGU LETTER HA", direction="l", linebreak="al", unicodeslot=0x0C39, }, [0x0C3D]={ category="lo", description="TELUGU SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x0C3D, }, [0x0C3E]={ category="mn", description="TELUGU VOWEL SIGN AA", direction="nsm", linebreak="cm", unicodeslot=0x0C3E, }, [0x0C3F]={ category="mn", description="TELUGU VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x0C3F, }, [0x0C40]={ category="mn", description="TELUGU VOWEL SIGN II", direction="nsm", linebreak="cm", unicodeslot=0x0C40, }, [0x0C41]={ category="mc", description="TELUGU VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0x0C41, }, [0x0C42]={ category="mc", description="TELUGU VOWEL SIGN UU", direction="l", linebreak="cm", unicodeslot=0x0C42, }, [0x0C43]={ category="mc", description="TELUGU VOWEL SIGN VOCALIC R", direction="l", linebreak="cm", unicodeslot=0x0C43, }, [0x0C44]={ category="mc", description="TELUGU VOWEL SIGN VOCALIC RR", direction="l", linebreak="cm", unicodeslot=0x0C44, }, [0x0C46]={ category="mn", description="TELUGU VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x0C46, }, [0x0C47]={ category="mn", description="TELUGU VOWEL SIGN EE", direction="nsm", linebreak="cm", unicodeslot=0x0C47, }, [0x0C48]={ category="mn", description="TELUGU VOWEL SIGN AI", direction="nsm", linebreak="cm", specials={ "char", 0x0C46, 0x0C56 }, unicodeslot=0x0C48, }, [0x0C4A]={ category="mn", description="TELUGU VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x0C4A, }, [0x0C4B]={ category="mn", description="TELUGU VOWEL SIGN OO", direction="nsm", linebreak="cm", unicodeslot=0x0C4B, }, [0x0C4C]={ category="mn", description="TELUGU VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0x0C4C, }, [0x0C4D]={ category="mn", description="TELUGU SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0C4D, }, [0x0C55]={ category="mn", description="TELUGU LENGTH MARK", direction="nsm", linebreak="cm", unicodeslot=0x0C55, }, [0x0C56]={ category="mn", description="TELUGU AI LENGTH MARK", direction="nsm", linebreak="cm", unicodeslot=0x0C56, }, [0x0C58]={ category="lo", description="TELUGU LETTER TSA", direction="l", linebreak="al", unicodeslot=0x0C58, }, [0x0C59]={ category="lo", description="TELUGU LETTER DZA", direction="l", linebreak="al", unicodeslot=0x0C59, }, [0x0C60]={ category="lo", description="TELUGU LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x0C60, }, [0x0C61]={ category="lo", description="TELUGU LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x0C61, }, [0x0C62]={ category="mn", description="TELUGU VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x0C62, }, [0x0C63]={ category="mn", description="TELUGU VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x0C63, }, [0x0C66]={ category="nd", description="TELUGU DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0C66, }, [0x0C67]={ category="nd", description="TELUGU DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0C67, }, [0x0C68]={ category="nd", description="TELUGU DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0C68, }, [0x0C69]={ category="nd", description="TELUGU DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0C69, }, [0x0C6A]={ category="nd", description="TELUGU DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0C6A, }, [0x0C6B]={ category="nd", description="TELUGU DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0C6B, }, [0x0C6C]={ category="nd", description="TELUGU DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0C6C, }, [0x0C6D]={ category="nd", description="TELUGU DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0C6D, }, [0x0C6E]={ category="nd", description="TELUGU DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0C6E, }, [0x0C6F]={ category="nd", description="TELUGU DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0C6F, }, [0x0C78]={ category="no", description="TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C78, }, [0x0C79]={ category="no", description="TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C79, }, [0x0C7A]={ category="no", description="TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C7A, }, [0x0C7B]={ category="no", description="TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C7B, }, [0x0C7C]={ category="no", description="TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C7C, }, [0x0C7D]={ category="no", description="TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C7D, }, [0x0C7E]={ category="no", description="TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR", direction="on", linebreak="al", unicodeslot=0x0C7E, }, [0x0C7F]={ category="so", description="TELUGU SIGN TUUMU", direction="l", linebreak="al", unicodeslot=0x0C7F, }, [0x0C82]={ category="mc", description="KANNADA SIGN ANUSVARA", direction="l", linebreak="cm", unicodeslot=0x0C82, }, [0x0C83]={ category="mc", description="KANNADA SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0C83, }, [0x0C85]={ category="lo", description="KANNADA LETTER A", direction="l", linebreak="al", unicodeslot=0x0C85, }, [0x0C86]={ category="lo", description="KANNADA LETTER AA", direction="l", linebreak="al", unicodeslot=0x0C86, }, [0x0C87]={ category="lo", description="KANNADA LETTER I", direction="l", linebreak="al", unicodeslot=0x0C87, }, [0x0C88]={ category="lo", description="KANNADA LETTER II", direction="l", linebreak="al", unicodeslot=0x0C88, }, [0x0C89]={ category="lo", description="KANNADA LETTER U", direction="l", linebreak="al", unicodeslot=0x0C89, }, [0x0C8A]={ category="lo", description="KANNADA LETTER UU", direction="l", linebreak="al", unicodeslot=0x0C8A, }, [0x0C8B]={ category="lo", description="KANNADA LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x0C8B, }, [0x0C8C]={ category="lo", description="KANNADA LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x0C8C, }, [0x0C8E]={ category="lo", description="KANNADA LETTER E", direction="l", linebreak="al", unicodeslot=0x0C8E, }, [0x0C8F]={ category="lo", description="KANNADA LETTER EE", direction="l", linebreak="al", unicodeslot=0x0C8F, }, [0x0C90]={ category="lo", description="KANNADA LETTER AI", direction="l", linebreak="al", unicodeslot=0x0C90, }, [0x0C92]={ category="lo", description="KANNADA LETTER O", direction="l", linebreak="al", unicodeslot=0x0C92, }, [0x0C93]={ category="lo", description="KANNADA LETTER OO", direction="l", linebreak="al", unicodeslot=0x0C93, }, [0x0C94]={ category="lo", description="KANNADA LETTER AU", direction="l", linebreak="al", unicodeslot=0x0C94, }, [0x0C95]={ category="lo", description="KANNADA LETTER KA", direction="l", linebreak="al", unicodeslot=0x0C95, }, [0x0C96]={ category="lo", description="KANNADA LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0C96, }, [0x0C97]={ category="lo", description="KANNADA LETTER GA", direction="l", linebreak="al", unicodeslot=0x0C97, }, [0x0C98]={ category="lo", description="KANNADA LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0C98, }, [0x0C99]={ category="lo", description="KANNADA LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0C99, }, [0x0C9A]={ category="lo", description="KANNADA LETTER CA", direction="l", linebreak="al", unicodeslot=0x0C9A, }, [0x0C9B]={ category="lo", description="KANNADA LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0C9B, }, [0x0C9C]={ category="lo", description="KANNADA LETTER JA", direction="l", linebreak="al", unicodeslot=0x0C9C, }, [0x0C9D]={ category="lo", description="KANNADA LETTER JHA", direction="l", linebreak="al", unicodeslot=0x0C9D, }, [0x0C9E]={ category="lo", description="KANNADA LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0C9E, }, [0x0C9F]={ category="lo", description="KANNADA LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0C9F, }, [0x0CA0]={ category="lo", description="KANNADA LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0CA0, }, [0x0CA1]={ category="lo", description="KANNADA LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0CA1, }, [0x0CA2]={ category="lo", description="KANNADA LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0CA2, }, [0x0CA3]={ category="lo", description="KANNADA LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0CA3, }, [0x0CA4]={ category="lo", description="KANNADA LETTER TA", direction="l", linebreak="al", unicodeslot=0x0CA4, }, [0x0CA5]={ category="lo", description="KANNADA LETTER THA", direction="l", linebreak="al", unicodeslot=0x0CA5, }, [0x0CA6]={ category="lo", description="KANNADA LETTER DA", direction="l", linebreak="al", unicodeslot=0x0CA6, }, [0x0CA7]={ category="lo", description="KANNADA LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0CA7, }, [0x0CA8]={ category="lo", description="KANNADA LETTER NA", direction="l", linebreak="al", unicodeslot=0x0CA8, }, [0x0CAA]={ category="lo", description="KANNADA LETTER PA", direction="l", linebreak="al", unicodeslot=0x0CAA, }, [0x0CAB]={ category="lo", description="KANNADA LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0CAB, }, [0x0CAC]={ category="lo", description="KANNADA LETTER BA", direction="l", linebreak="al", unicodeslot=0x0CAC, }, [0x0CAD]={ category="lo", description="KANNADA LETTER BHA", direction="l", linebreak="al", unicodeslot=0x0CAD, }, [0x0CAE]={ category="lo", description="KANNADA LETTER MA", direction="l", linebreak="al", unicodeslot=0x0CAE, }, [0x0CAF]={ category="lo", description="KANNADA LETTER YA", direction="l", linebreak="al", unicodeslot=0x0CAF, }, [0x0CB0]={ category="lo", description="KANNADA LETTER RA", direction="l", linebreak="al", unicodeslot=0x0CB0, }, [0x0CB1]={ category="lo", description="KANNADA LETTER RRA", direction="l", linebreak="al", unicodeslot=0x0CB1, }, [0x0CB2]={ category="lo", description="KANNADA LETTER LA", direction="l", linebreak="al", unicodeslot=0x0CB2, }, [0x0CB3]={ category="lo", description="KANNADA LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0CB3, }, [0x0CB5]={ category="lo", description="KANNADA LETTER VA", direction="l", linebreak="al", unicodeslot=0x0CB5, }, [0x0CB6]={ category="lo", description="KANNADA LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0CB6, }, [0x0CB7]={ category="lo", description="KANNADA LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0CB7, }, [0x0CB8]={ category="lo", description="KANNADA LETTER SA", direction="l", linebreak="al", unicodeslot=0x0CB8, }, [0x0CB9]={ category="lo", description="KANNADA LETTER HA", direction="l", linebreak="al", unicodeslot=0x0CB9, }, [0x0CBC]={ category="mn", description="KANNADA SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x0CBC, }, [0x0CBD]={ category="lo", description="KANNADA SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x0CBD, }, [0x0CBE]={ category="mc", description="KANNADA VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x0CBE, }, [0x0CBF]={ category="mn", description="KANNADA VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x0CBF, }, [0x0CC0]={ category="mc", description="KANNADA VOWEL SIGN II", direction="l", linebreak="cm", specials={ "char", 0x0CBF, 0x0CD5 }, unicodeslot=0x0CC0, }, [0x0CC1]={ category="mc", description="KANNADA VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0x0CC1, }, [0x0CC2]={ category="mc", description="KANNADA VOWEL SIGN UU", direction="l", linebreak="cm", unicodeslot=0x0CC2, }, [0x0CC3]={ category="mc", description="KANNADA VOWEL SIGN VOCALIC R", direction="l", linebreak="cm", unicodeslot=0x0CC3, }, [0x0CC4]={ category="mc", description="KANNADA VOWEL SIGN VOCALIC RR", direction="l", linebreak="cm", unicodeslot=0x0CC4, }, [0x0CC6]={ category="mn", description="KANNADA VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x0CC6, }, [0x0CC7]={ category="mc", description="KANNADA VOWEL SIGN EE", direction="l", linebreak="cm", specials={ "char", 0x0CC6, 0x0CD5 }, unicodeslot=0x0CC7, }, [0x0CC8]={ category="mc", description="KANNADA VOWEL SIGN AI", direction="l", linebreak="cm", specials={ "char", 0x0CC6, 0x0CD6 }, unicodeslot=0x0CC8, }, [0x0CCA]={ category="mc", description="KANNADA VOWEL SIGN O", direction="l", linebreak="cm", specials={ "char", 0x0CC6, 0x0CC2 }, unicodeslot=0x0CCA, }, [0x0CCB]={ category="mc", description="KANNADA VOWEL SIGN OO", direction="l", linebreak="cm", specials={ "char", 0x0CCA, 0x0CD5 }, unicodeslot=0x0CCB, }, [0x0CCC]={ category="mn", description="KANNADA VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0x0CCC, }, [0x0CCD]={ category="mn", description="KANNADA SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0CCD, }, [0x0CD5]={ category="mc", description="KANNADA LENGTH MARK", direction="l", linebreak="cm", unicodeslot=0x0CD5, }, [0x0CD6]={ category="mc", description="KANNADA AI LENGTH MARK", direction="l", linebreak="cm", unicodeslot=0x0CD6, }, [0x0CDE]={ category="lo", description="KANNADA LETTER FA", direction="l", linebreak="al", unicodeslot=0x0CDE, }, [0x0CE0]={ category="lo", description="KANNADA LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x0CE0, }, [0x0CE1]={ category="lo", description="KANNADA LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x0CE1, }, [0x0CE2]={ category="mn", description="KANNADA VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x0CE2, }, [0x0CE3]={ category="mn", description="KANNADA VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x0CE3, }, [0x0CE6]={ category="nd", description="KANNADA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0CE6, }, [0x0CE7]={ category="nd", description="KANNADA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0CE7, }, [0x0CE8]={ category="nd", description="KANNADA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0CE8, }, [0x0CE9]={ category="nd", description="KANNADA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0CE9, }, [0x0CEA]={ category="nd", description="KANNADA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0CEA, }, [0x0CEB]={ category="nd", description="KANNADA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0CEB, }, [0x0CEC]={ category="nd", description="KANNADA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0CEC, }, [0x0CED]={ category="nd", description="KANNADA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0CED, }, [0x0CEE]={ category="nd", description="KANNADA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0CEE, }, [0x0CEF]={ category="nd", description="KANNADA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0CEF, }, [0x0CF1]={ category="so", description="KANNADA SIGN JIHVAMULIYA", direction="l", linebreak="al", unicodeslot=0x0CF1, }, [0x0CF2]={ category="so", description="KANNADA SIGN UPADHMANIYA", direction="l", linebreak="al", unicodeslot=0x0CF2, }, [0x0D02]={ category="mc", description="MALAYALAM SIGN ANUSVARA", direction="l", linebreak="cm", unicodeslot=0x0D02, }, [0x0D03]={ category="mc", description="MALAYALAM SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x0D03, }, [0x0D05]={ category="lo", description="MALAYALAM LETTER A", direction="l", linebreak="al", unicodeslot=0x0D05, }, [0x0D06]={ category="lo", description="MALAYALAM LETTER AA", direction="l", linebreak="al", unicodeslot=0x0D06, }, [0x0D07]={ category="lo", description="MALAYALAM LETTER I", direction="l", linebreak="al", unicodeslot=0x0D07, }, [0x0D08]={ category="lo", description="MALAYALAM LETTER II", direction="l", linebreak="al", unicodeslot=0x0D08, }, [0x0D09]={ category="lo", description="MALAYALAM LETTER U", direction="l", linebreak="al", unicodeslot=0x0D09, }, [0x0D0A]={ category="lo", description="MALAYALAM LETTER UU", direction="l", linebreak="al", unicodeslot=0x0D0A, }, [0x0D0B]={ category="lo", description="MALAYALAM LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x0D0B, }, [0x0D0C]={ category="lo", description="MALAYALAM LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x0D0C, }, [0x0D0E]={ category="lo", description="MALAYALAM LETTER E", direction="l", linebreak="al", unicodeslot=0x0D0E, }, [0x0D0F]={ category="lo", description="MALAYALAM LETTER EE", direction="l", linebreak="al", unicodeslot=0x0D0F, }, [0x0D10]={ category="lo", description="MALAYALAM LETTER AI", direction="l", linebreak="al", unicodeslot=0x0D10, }, [0x0D12]={ category="lo", description="MALAYALAM LETTER O", direction="l", linebreak="al", unicodeslot=0x0D12, }, [0x0D13]={ category="lo", description="MALAYALAM LETTER OO", direction="l", linebreak="al", unicodeslot=0x0D13, }, [0x0D14]={ category="lo", description="MALAYALAM LETTER AU", direction="l", linebreak="al", unicodeslot=0x0D14, }, [0x0D15]={ category="lo", description="MALAYALAM LETTER KA", direction="l", linebreak="al", unicodeslot=0x0D15, }, [0x0D16]={ category="lo", description="MALAYALAM LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0D16, }, [0x0D17]={ category="lo", description="MALAYALAM LETTER GA", direction="l", linebreak="al", unicodeslot=0x0D17, }, [0x0D18]={ category="lo", description="MALAYALAM LETTER GHA", direction="l", linebreak="al", unicodeslot=0x0D18, }, [0x0D19]={ category="lo", description="MALAYALAM LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0D19, }, [0x0D1A]={ category="lo", description="MALAYALAM LETTER CA", direction="l", linebreak="al", unicodeslot=0x0D1A, }, [0x0D1B]={ category="lo", description="MALAYALAM LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0D1B, }, [0x0D1C]={ category="lo", description="MALAYALAM LETTER JA", direction="l", linebreak="al", unicodeslot=0x0D1C, }, [0x0D1D]={ category="lo", description="MALAYALAM LETTER JHA", direction="l", linebreak="al", unicodeslot=0x0D1D, }, [0x0D1E]={ category="lo", description="MALAYALAM LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0D1E, }, [0x0D1F]={ category="lo", description="MALAYALAM LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0D1F, }, [0x0D20]={ category="lo", description="MALAYALAM LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0D20, }, [0x0D21]={ category="lo", description="MALAYALAM LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0D21, }, [0x0D22]={ category="lo", description="MALAYALAM LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x0D22, }, [0x0D23]={ category="lo", description="MALAYALAM LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0D23, }, [0x0D24]={ category="lo", description="MALAYALAM LETTER TA", direction="l", linebreak="al", unicodeslot=0x0D24, }, [0x0D25]={ category="lo", description="MALAYALAM LETTER THA", direction="l", linebreak="al", unicodeslot=0x0D25, }, [0x0D26]={ category="lo", description="MALAYALAM LETTER DA", direction="l", linebreak="al", unicodeslot=0x0D26, }, [0x0D27]={ category="lo", description="MALAYALAM LETTER DHA", direction="l", linebreak="al", unicodeslot=0x0D27, }, [0x0D28]={ category="lo", description="MALAYALAM LETTER NA", direction="l", linebreak="al", unicodeslot=0x0D28, }, [0x0D29]={ category="lo", description="MALAYALAM LETTER NNNA", direction="l", linebreak="al", unicodeslot=0x0D29, }, [0x0D2A]={ category="lo", description="MALAYALAM LETTER PA", direction="l", linebreak="al", unicodeslot=0x0D2A, }, [0x0D2B]={ category="lo", description="MALAYALAM LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0D2B, }, [0x0D2C]={ category="lo", description="MALAYALAM LETTER BA", direction="l", linebreak="al", unicodeslot=0x0D2C, }, [0x0D2D]={ category="lo", description="MALAYALAM LETTER BHA", direction="l", linebreak="al", unicodeslot=0x0D2D, }, [0x0D2E]={ category="lo", description="MALAYALAM LETTER MA", direction="l", linebreak="al", unicodeslot=0x0D2E, }, [0x0D2F]={ category="lo", description="MALAYALAM LETTER YA", direction="l", linebreak="al", unicodeslot=0x0D2F, }, [0x0D30]={ category="lo", description="MALAYALAM LETTER RA", direction="l", linebreak="al", unicodeslot=0x0D30, }, [0x0D31]={ category="lo", description="MALAYALAM LETTER RRA", direction="l", linebreak="al", unicodeslot=0x0D31, }, [0x0D32]={ category="lo", description="MALAYALAM LETTER LA", direction="l", linebreak="al", unicodeslot=0x0D32, }, [0x0D33]={ category="lo", description="MALAYALAM LETTER LLA", direction="l", linebreak="al", unicodeslot=0x0D33, }, [0x0D34]={ category="lo", description="MALAYALAM LETTER LLLA", direction="l", linebreak="al", unicodeslot=0x0D34, }, [0x0D35]={ category="lo", description="MALAYALAM LETTER VA", direction="l", linebreak="al", unicodeslot=0x0D35, }, [0x0D36]={ category="lo", description="MALAYALAM LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0D36, }, [0x0D37]={ category="lo", description="MALAYALAM LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0D37, }, [0x0D38]={ category="lo", description="MALAYALAM LETTER SA", direction="l", linebreak="al", unicodeslot=0x0D38, }, [0x0D39]={ category="lo", description="MALAYALAM LETTER HA", direction="l", linebreak="al", unicodeslot=0x0D39, }, [0x0D3A]={ category="lo", description="MALAYALAM LETTER TTTA", direction="l", linebreak="al", unicodeslot=0x0D3A, }, [0x0D3D]={ category="lo", description="MALAYALAM SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x0D3D, }, [0x0D3E]={ category="mc", description="MALAYALAM VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x0D3E, }, [0x0D3F]={ category="mc", description="MALAYALAM VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x0D3F, }, [0x0D40]={ category="mc", description="MALAYALAM VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x0D40, }, [0x0D41]={ category="mn", description="MALAYALAM VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0D41, }, [0x0D42]={ category="mn", description="MALAYALAM VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x0D42, }, [0x0D43]={ category="mn", description="MALAYALAM VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x0D43, }, [0x0D44]={ category="mn", description="MALAYALAM VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x0D44, }, [0x0D46]={ category="mc", description="MALAYALAM VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x0D46, }, [0x0D47]={ category="mc", description="MALAYALAM VOWEL SIGN EE", direction="l", linebreak="cm", unicodeslot=0x0D47, }, [0x0D48]={ category="mc", description="MALAYALAM VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0x0D48, }, [0x0D4A]={ category="mc", description="MALAYALAM VOWEL SIGN O", direction="l", linebreak="cm", specials={ "char", 0x0D46, 0x0D3E }, unicodeslot=0x0D4A, }, [0x0D4B]={ category="mc", description="MALAYALAM VOWEL SIGN OO", direction="l", linebreak="cm", specials={ "char", 0x0D47, 0x0D3E }, unicodeslot=0x0D4B, }, [0x0D4C]={ category="mc", description="MALAYALAM VOWEL SIGN AU", direction="l", linebreak="cm", specials={ "char", 0x0D46, 0x0D57 }, unicodeslot=0x0D4C, }, [0x0D4D]={ category="mn", description="MALAYALAM SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x0D4D, }, [0x0D4E]={ category="lo", description="MALAYALAM LETTER DOT REPH", direction="l", linebreak="al", unicodeslot=0x0D4E, }, [0x0D57]={ category="mc", description="MALAYALAM AU LENGTH MARK", direction="l", linebreak="cm", unicodeslot=0x0D57, }, [0x0D60]={ category="lo", description="MALAYALAM LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x0D60, }, [0x0D61]={ category="lo", description="MALAYALAM LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x0D61, }, [0x0D62]={ category="mn", description="MALAYALAM VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x0D62, }, [0x0D63]={ category="mn", description="MALAYALAM VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x0D63, }, [0x0D66]={ category="nd", description="MALAYALAM DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0D66, }, [0x0D67]={ category="nd", description="MALAYALAM DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0D67, }, [0x0D68]={ category="nd", description="MALAYALAM DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0D68, }, [0x0D69]={ category="nd", description="MALAYALAM DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0D69, }, [0x0D6A]={ category="nd", description="MALAYALAM DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0D6A, }, [0x0D6B]={ category="nd", description="MALAYALAM DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0D6B, }, [0x0D6C]={ category="nd", description="MALAYALAM DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0D6C, }, [0x0D6D]={ category="nd", description="MALAYALAM DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0D6D, }, [0x0D6E]={ category="nd", description="MALAYALAM DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0D6E, }, [0x0D6F]={ category="nd", description="MALAYALAM DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0D6F, }, [0x0D70]={ category="no", description="MALAYALAM NUMBER TEN", direction="l", linebreak="al", unicodeslot=0x0D70, }, [0x0D71]={ category="no", description="MALAYALAM NUMBER ONE HUNDRED", direction="l", linebreak="al", unicodeslot=0x0D71, }, [0x0D72]={ category="no", description="MALAYALAM NUMBER ONE THOUSAND", direction="l", linebreak="al", unicodeslot=0x0D72, }, [0x0D73]={ category="no", description="MALAYALAM FRACTION ONE QUARTER", direction="l", linebreak="al", unicodeslot=0x0D73, }, [0x0D74]={ category="no", description="MALAYALAM FRACTION ONE HALF", direction="l", linebreak="al", unicodeslot=0x0D74, }, [0x0D75]={ category="no", description="MALAYALAM FRACTION THREE QUARTERS", direction="l", linebreak="al", unicodeslot=0x0D75, }, [0x0D79]={ category="so", description="MALAYALAM DATE MARK", direction="l", linebreak="po", unicodeslot=0x0D79, }, [0x0D7A]={ category="lo", description="MALAYALAM LETTER CHILLU NN", direction="l", linebreak="al", unicodeslot=0x0D7A, }, [0x0D7B]={ category="lo", description="MALAYALAM LETTER CHILLU N", direction="l", linebreak="al", unicodeslot=0x0D7B, }, [0x0D7C]={ category="lo", description="MALAYALAM LETTER CHILLU RR", direction="l", linebreak="al", unicodeslot=0x0D7C, }, [0x0D7D]={ category="lo", description="MALAYALAM LETTER CHILLU L", direction="l", linebreak="al", unicodeslot=0x0D7D, }, [0x0D7E]={ category="lo", description="MALAYALAM LETTER CHILLU LL", direction="l", linebreak="al", unicodeslot=0x0D7E, }, [0x0D7F]={ category="lo", description="MALAYALAM LETTER CHILLU K", direction="l", linebreak="al", unicodeslot=0x0D7F, }, [0x0D82]={ category="mc", description="SINHALA SIGN ANUSVARAYA", direction="l", linebreak="cm", unicodeslot=0x0D82, }, [0x0D83]={ category="mc", description="SINHALA SIGN VISARGAYA", direction="l", linebreak="cm", unicodeslot=0x0D83, }, [0x0D85]={ category="lo", description="SINHALA LETTER AYANNA", direction="l", linebreak="al", unicodeslot=0x0D85, }, [0x0D86]={ category="lo", description="SINHALA LETTER AAYANNA", direction="l", linebreak="al", unicodeslot=0x0D86, }, [0x0D87]={ category="lo", description="SINHALA LETTER AEYANNA", direction="l", linebreak="al", unicodeslot=0x0D87, }, [0x0D88]={ category="lo", description="SINHALA LETTER AEEYANNA", direction="l", linebreak="al", unicodeslot=0x0D88, }, [0x0D89]={ category="lo", description="SINHALA LETTER IYANNA", direction="l", linebreak="al", unicodeslot=0x0D89, }, [0x0D8A]={ category="lo", description="SINHALA LETTER IIYANNA", direction="l", linebreak="al", unicodeslot=0x0D8A, }, [0x0D8B]={ category="lo", description="SINHALA LETTER UYANNA", direction="l", linebreak="al", unicodeslot=0x0D8B, }, [0x0D8C]={ category="lo", description="SINHALA LETTER UUYANNA", direction="l", linebreak="al", unicodeslot=0x0D8C, }, [0x0D8D]={ category="lo", description="SINHALA LETTER IRUYANNA", direction="l", linebreak="al", unicodeslot=0x0D8D, }, [0x0D8E]={ category="lo", description="SINHALA LETTER IRUUYANNA", direction="l", linebreak="al", unicodeslot=0x0D8E, }, [0x0D8F]={ category="lo", description="SINHALA LETTER ILUYANNA", direction="l", linebreak="al", unicodeslot=0x0D8F, }, [0x0D90]={ category="lo", description="SINHALA LETTER ILUUYANNA", direction="l", linebreak="al", unicodeslot=0x0D90, }, [0x0D91]={ category="lo", description="SINHALA LETTER EYANNA", direction="l", linebreak="al", unicodeslot=0x0D91, }, [0x0D92]={ category="lo", description="SINHALA LETTER EEYANNA", direction="l", linebreak="al", unicodeslot=0x0D92, }, [0x0D93]={ category="lo", description="SINHALA LETTER AIYANNA", direction="l", linebreak="al", unicodeslot=0x0D93, }, [0x0D94]={ category="lo", description="SINHALA LETTER OYANNA", direction="l", linebreak="al", unicodeslot=0x0D94, }, [0x0D95]={ category="lo", description="SINHALA LETTER OOYANNA", direction="l", linebreak="al", unicodeslot=0x0D95, }, [0x0D96]={ category="lo", description="SINHALA LETTER AUYANNA", direction="l", linebreak="al", unicodeslot=0x0D96, }, [0x0D9A]={ category="lo", description="SINHALA LETTER ALPAPRAANA KAYANNA", direction="l", linebreak="al", unicodeslot=0x0D9A, }, [0x0D9B]={ category="lo", description="SINHALA LETTER MAHAAPRAANA KAYANNA", direction="l", linebreak="al", unicodeslot=0x0D9B, }, [0x0D9C]={ category="lo", description="SINHALA LETTER ALPAPRAANA GAYANNA", direction="l", linebreak="al", unicodeslot=0x0D9C, }, [0x0D9D]={ category="lo", description="SINHALA LETTER MAHAAPRAANA GAYANNA", direction="l", linebreak="al", unicodeslot=0x0D9D, }, [0x0D9E]={ category="lo", description="SINHALA LETTER KANTAJA NAASIKYAYA", direction="l", linebreak="al", unicodeslot=0x0D9E, }, [0x0D9F]={ category="lo", description="SINHALA LETTER SANYAKA GAYANNA", direction="l", linebreak="al", unicodeslot=0x0D9F, }, [0x0DA0]={ category="lo", description="SINHALA LETTER ALPAPRAANA CAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA0, }, [0x0DA1]={ category="lo", description="SINHALA LETTER MAHAAPRAANA CAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA1, }, [0x0DA2]={ category="lo", description="SINHALA LETTER ALPAPRAANA JAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA2, }, [0x0DA3]={ category="lo", description="SINHALA LETTER MAHAAPRAANA JAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA3, }, [0x0DA4]={ category="lo", description="SINHALA LETTER TAALUJA NAASIKYAYA", direction="l", linebreak="al", unicodeslot=0x0DA4, }, [0x0DA5]={ category="lo", description="SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA", direction="l", linebreak="al", unicodeslot=0x0DA5, }, [0x0DA6]={ category="lo", description="SINHALA LETTER SANYAKA JAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA6, }, [0x0DA7]={ category="lo", description="SINHALA LETTER ALPAPRAANA TTAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA7, }, [0x0DA8]={ category="lo", description="SINHALA LETTER MAHAAPRAANA TTAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA8, }, [0x0DA9]={ category="lo", description="SINHALA LETTER ALPAPRAANA DDAYANNA", direction="l", linebreak="al", unicodeslot=0x0DA9, }, [0x0DAA]={ category="lo", description="SINHALA LETTER MAHAAPRAANA DDAYANNA", direction="l", linebreak="al", unicodeslot=0x0DAA, }, [0x0DAB]={ category="lo", description="SINHALA LETTER MUURDHAJA NAYANNA", direction="l", linebreak="al", unicodeslot=0x0DAB, }, [0x0DAC]={ category="lo", description="SINHALA LETTER SANYAKA DDAYANNA", direction="l", linebreak="al", unicodeslot=0x0DAC, }, [0x0DAD]={ category="lo", description="SINHALA LETTER ALPAPRAANA TAYANNA", direction="l", linebreak="al", unicodeslot=0x0DAD, }, [0x0DAE]={ category="lo", description="SINHALA LETTER MAHAAPRAANA TAYANNA", direction="l", linebreak="al", unicodeslot=0x0DAE, }, [0x0DAF]={ category="lo", description="SINHALA LETTER ALPAPRAANA DAYANNA", direction="l", linebreak="al", unicodeslot=0x0DAF, }, [0x0DB0]={ category="lo", description="SINHALA LETTER MAHAAPRAANA DAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB0, }, [0x0DB1]={ category="lo", description="SINHALA LETTER DANTAJA NAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB1, }, [0x0DB3]={ category="lo", description="SINHALA LETTER SANYAKA DAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB3, }, [0x0DB4]={ category="lo", description="SINHALA LETTER ALPAPRAANA PAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB4, }, [0x0DB5]={ category="lo", description="SINHALA LETTER MAHAAPRAANA PAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB5, }, [0x0DB6]={ category="lo", description="SINHALA LETTER ALPAPRAANA BAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB6, }, [0x0DB7]={ category="lo", description="SINHALA LETTER MAHAAPRAANA BAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB7, }, [0x0DB8]={ category="lo", description="SINHALA LETTER MAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB8, }, [0x0DB9]={ category="lo", description="SINHALA LETTER AMBA BAYANNA", direction="l", linebreak="al", unicodeslot=0x0DB9, }, [0x0DBA]={ category="lo", description="SINHALA LETTER YAYANNA", direction="l", linebreak="al", unicodeslot=0x0DBA, }, [0x0DBB]={ category="lo", description="SINHALA LETTER RAYANNA", direction="l", linebreak="al", unicodeslot=0x0DBB, }, [0x0DBD]={ category="lo", description="SINHALA LETTER DANTAJA LAYANNA", direction="l", linebreak="al", unicodeslot=0x0DBD, }, [0x0DC0]={ category="lo", description="SINHALA LETTER VAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC0, }, [0x0DC1]={ category="lo", description="SINHALA LETTER TAALUJA SAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC1, }, [0x0DC2]={ category="lo", description="SINHALA LETTER MUURDHAJA SAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC2, }, [0x0DC3]={ category="lo", description="SINHALA LETTER DANTAJA SAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC3, }, [0x0DC4]={ category="lo", description="SINHALA LETTER HAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC4, }, [0x0DC5]={ category="lo", description="SINHALA LETTER MUURDHAJA LAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC5, }, [0x0DC6]={ category="lo", description="SINHALA LETTER FAYANNA", direction="l", linebreak="al", unicodeslot=0x0DC6, }, [0x0DCA]={ category="mn", description="SINHALA SIGN AL-LAKUNA", direction="nsm", linebreak="cm", unicodeslot=0x0DCA, }, [0x0DCF]={ category="mc", description="SINHALA VOWEL SIGN AELA-PILLA", direction="l", linebreak="cm", unicodeslot=0x0DCF, }, [0x0DD0]={ category="mc", description="SINHALA VOWEL SIGN KETTI AEDA-PILLA", direction="l", linebreak="cm", unicodeslot=0x0DD0, }, [0x0DD1]={ category="mc", description="SINHALA VOWEL SIGN DIGA AEDA-PILLA", direction="l", linebreak="cm", unicodeslot=0x0DD1, }, [0x0DD2]={ category="mn", description="SINHALA VOWEL SIGN KETTI IS-PILLA", direction="nsm", linebreak="cm", unicodeslot=0x0DD2, }, [0x0DD3]={ category="mn", description="SINHALA VOWEL SIGN DIGA IS-PILLA", direction="nsm", linebreak="cm", unicodeslot=0x0DD3, }, [0x0DD4]={ category="mn", description="SINHALA VOWEL SIGN KETTI PAA-PILLA", direction="nsm", linebreak="cm", unicodeslot=0x0DD4, }, [0x0DD6]={ category="mn", description="SINHALA VOWEL SIGN DIGA PAA-PILLA", direction="nsm", linebreak="cm", unicodeslot=0x0DD6, }, [0x0DD8]={ category="mc", description="SINHALA VOWEL SIGN GAETTA-PILLA", direction="l", linebreak="cm", unicodeslot=0x0DD8, }, [0x0DD9]={ category="mc", description="SINHALA VOWEL SIGN KOMBUVA", direction="l", linebreak="cm", unicodeslot=0x0DD9, }, [0x0DDA]={ category="mc", description="SINHALA VOWEL SIGN DIGA KOMBUVA", direction="l", linebreak="cm", specials={ "char", 0x0DD9, 0x0DCA }, unicodeslot=0x0DDA, }, [0x0DDB]={ category="mc", description="SINHALA VOWEL SIGN KOMBU DEKA", direction="l", linebreak="cm", unicodeslot=0x0DDB, }, [0x0DDC]={ category="mc", description="SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA", direction="l", linebreak="cm", specials={ "char", 0x0DD9, 0x0DCF }, unicodeslot=0x0DDC, }, [0x0DDD]={ category="mc", description="SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA", direction="l", linebreak="cm", specials={ "char", 0x0DDC, 0x0DCA }, unicodeslot=0x0DDD, }, [0x0DDE]={ category="mc", description="SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA", direction="l", linebreak="cm", specials={ "char", 0x0DD9, 0x0DDF }, unicodeslot=0x0DDE, }, [0x0DDF]={ category="mc", description="SINHALA VOWEL SIGN GAYANUKITTA", direction="l", linebreak="cm", unicodeslot=0x0DDF, }, [0x0DF2]={ category="mc", description="SINHALA VOWEL SIGN DIGA GAETTA-PILLA", direction="l", linebreak="cm", unicodeslot=0x0DF2, }, [0x0DF3]={ category="mc", description="SINHALA VOWEL SIGN DIGA GAYANUKITTA", direction="l", linebreak="cm", unicodeslot=0x0DF3, }, [0x0DF4]={ category="po", description="SINHALA PUNCTUATION KUNDDALIYA", direction="l", linebreak="al", unicodeslot=0x0DF4, }, [0x0E01]={ adobename="kokaithai", category="lo", description="THAI CHARACTER KO KAI", direction="l", linebreak="sa", unicodeslot=0x0E01, }, [0x0E02]={ adobename="khokhaithai", category="lo", description="THAI CHARACTER KHO KHAI", direction="l", linebreak="sa", unicodeslot=0x0E02, }, [0x0E03]={ adobename="khokhuatthai", category="lo", description="THAI CHARACTER KHO KHUAT", direction="l", linebreak="sa", unicodeslot=0x0E03, }, [0x0E04]={ adobename="khokhwaithai", category="lo", description="THAI CHARACTER KHO KHWAI", direction="l", linebreak="sa", unicodeslot=0x0E04, }, [0x0E05]={ adobename="khokhonthai", category="lo", description="THAI CHARACTER KHO KHON", direction="l", linebreak="sa", unicodeslot=0x0E05, }, [0x0E06]={ adobename="khorakhangthai", category="lo", description="THAI CHARACTER KHO RAKHANG", direction="l", linebreak="sa", unicodeslot=0x0E06, }, [0x0E07]={ adobename="ngonguthai", category="lo", description="THAI CHARACTER NGO NGU", direction="l", linebreak="sa", unicodeslot=0x0E07, }, [0x0E08]={ adobename="chochanthai", category="lo", description="THAI CHARACTER CHO CHAN", direction="l", linebreak="sa", unicodeslot=0x0E08, }, [0x0E09]={ adobename="chochingthai", category="lo", description="THAI CHARACTER CHO CHING", direction="l", linebreak="sa", unicodeslot=0x0E09, }, [0x0E0A]={ adobename="chochangthai", category="lo", description="THAI CHARACTER CHO CHANG", direction="l", linebreak="sa", unicodeslot=0x0E0A, }, [0x0E0B]={ adobename="sosothai", category="lo", description="THAI CHARACTER SO SO", direction="l", linebreak="sa", unicodeslot=0x0E0B, }, [0x0E0C]={ adobename="chochoethai", category="lo", description="THAI CHARACTER CHO CHOE", direction="l", linebreak="sa", unicodeslot=0x0E0C, }, [0x0E0D]={ adobename="yoyingthai", category="lo", description="THAI CHARACTER YO YING", direction="l", linebreak="sa", unicodeslot=0x0E0D, }, [0x0E0E]={ adobename="dochadathai", category="lo", description="THAI CHARACTER DO CHADA", direction="l", linebreak="sa", unicodeslot=0x0E0E, }, [0x0E0F]={ adobename="topatakthai", category="lo", description="THAI CHARACTER TO PATAK", direction="l", linebreak="sa", unicodeslot=0x0E0F, }, [0x0E10]={ adobename="thothanthai", category="lo", description="THAI CHARACTER THO THAN", direction="l", linebreak="sa", unicodeslot=0x0E10, }, [0x0E11]={ adobename="thonangmonthothai", category="lo", description="THAI CHARACTER THO NANGMONTHO", direction="l", linebreak="sa", unicodeslot=0x0E11, }, [0x0E12]={ adobename="thophuthaothai", category="lo", description="THAI CHARACTER THO PHUTHAO", direction="l", linebreak="sa", unicodeslot=0x0E12, }, [0x0E13]={ adobename="nonenthai", category="lo", description="THAI CHARACTER NO NEN", direction="l", linebreak="sa", unicodeslot=0x0E13, }, [0x0E14]={ adobename="dodekthai", category="lo", description="THAI CHARACTER DO DEK", direction="l", linebreak="sa", unicodeslot=0x0E14, }, [0x0E15]={ adobename="totaothai", category="lo", description="THAI CHARACTER TO TAO", direction="l", linebreak="sa", unicodeslot=0x0E15, }, [0x0E16]={ adobename="thothungthai", category="lo", description="THAI CHARACTER THO THUNG", direction="l", linebreak="sa", unicodeslot=0x0E16, }, [0x0E17]={ adobename="thothahanthai", category="lo", description="THAI CHARACTER THO THAHAN", direction="l", linebreak="sa", unicodeslot=0x0E17, }, [0x0E18]={ adobename="thothongthai", category="lo", description="THAI CHARACTER THO THONG", direction="l", linebreak="sa", unicodeslot=0x0E18, }, [0x0E19]={ adobename="nonuthai", category="lo", description="THAI CHARACTER NO NU", direction="l", linebreak="sa", unicodeslot=0x0E19, }, [0x0E1A]={ adobename="bobaimaithai", category="lo", description="THAI CHARACTER BO BAIMAI", direction="l", linebreak="sa", unicodeslot=0x0E1A, }, [0x0E1B]={ adobename="poplathai", category="lo", description="THAI CHARACTER PO PLA", direction="l", linebreak="sa", unicodeslot=0x0E1B, }, [0x0E1C]={ adobename="phophungthai", category="lo", description="THAI CHARACTER PHO PHUNG", direction="l", linebreak="sa", unicodeslot=0x0E1C, }, [0x0E1D]={ adobename="fofathai", category="lo", description="THAI CHARACTER FO FA", direction="l", linebreak="sa", unicodeslot=0x0E1D, }, [0x0E1E]={ adobename="phophanthai", category="lo", description="THAI CHARACTER PHO PHAN", direction="l", linebreak="sa", unicodeslot=0x0E1E, }, [0x0E1F]={ adobename="fofanthai", category="lo", description="THAI CHARACTER FO FAN", direction="l", linebreak="sa", unicodeslot=0x0E1F, }, [0x0E20]={ adobename="phosamphaothai", category="lo", description="THAI CHARACTER PHO SAMPHAO", direction="l", linebreak="sa", unicodeslot=0x0E20, }, [0x0E21]={ adobename="momathai", category="lo", description="THAI CHARACTER MO MA", direction="l", linebreak="sa", unicodeslot=0x0E21, }, [0x0E22]={ adobename="yoyakthai", category="lo", description="THAI CHARACTER YO YAK", direction="l", linebreak="sa", unicodeslot=0x0E22, }, [0x0E23]={ adobename="roruathai", category="lo", description="THAI CHARACTER RO RUA", direction="l", linebreak="sa", unicodeslot=0x0E23, }, [0x0E24]={ adobename="ruthai", category="lo", description="THAI CHARACTER RU", direction="l", linebreak="sa", unicodeslot=0x0E24, }, [0x0E25]={ adobename="lolingthai", category="lo", description="THAI CHARACTER LO LING", direction="l", linebreak="sa", unicodeslot=0x0E25, }, [0x0E26]={ adobename="luthai", category="lo", description="THAI CHARACTER LU", direction="l", linebreak="sa", unicodeslot=0x0E26, }, [0x0E27]={ adobename="wowaenthai", category="lo", description="THAI CHARACTER WO WAEN", direction="l", linebreak="sa", unicodeslot=0x0E27, }, [0x0E28]={ adobename="sosalathai", category="lo", description="THAI CHARACTER SO SALA", direction="l", linebreak="sa", unicodeslot=0x0E28, }, [0x0E29]={ adobename="sorusithai", category="lo", description="THAI CHARACTER SO RUSI", direction="l", linebreak="sa", unicodeslot=0x0E29, }, [0x0E2A]={ adobename="sosuathai", category="lo", description="THAI CHARACTER SO SUA", direction="l", linebreak="sa", unicodeslot=0x0E2A, }, [0x0E2B]={ adobename="hohipthai", category="lo", description="THAI CHARACTER HO HIP", direction="l", linebreak="sa", unicodeslot=0x0E2B, }, [0x0E2C]={ adobename="lochulathai", category="lo", description="THAI CHARACTER LO CHULA", direction="l", linebreak="sa", unicodeslot=0x0E2C, }, [0x0E2D]={ adobename="oangthai", category="lo", description="THAI CHARACTER O ANG", direction="l", linebreak="sa", unicodeslot=0x0E2D, }, [0x0E2E]={ adobename="honokhukthai", category="lo", description="THAI CHARACTER HO NOKHUK", direction="l", linebreak="sa", unicodeslot=0x0E2E, }, [0x0E2F]={ adobename="paiyannoithai", category="lo", description="THAI CHARACTER PAIYANNOI", direction="l", linebreak="sa", unicodeslot=0x0E2F, }, [0x0E30]={ adobename="saraathai", category="lo", description="THAI CHARACTER SARA A", direction="l", linebreak="sa", unicodeslot=0x0E30, }, [0x0E31]={ adobename="maihanakatthai", category="mn", description="THAI CHARACTER MAI HAN-AKAT", direction="nsm", linebreak="sa", unicodeslot=0x0E31, }, [0x0E32]={ adobename="saraaathai", category="lo", description="THAI CHARACTER SARA AA", direction="l", linebreak="sa", unicodeslot=0x0E32, }, [0x0E33]={ adobename="saraamthai", category="lo", description="THAI CHARACTER SARA AM", direction="l", linebreak="sa", specials={ "compat", 0x0E4D, 0x0E32 }, unicodeslot=0x0E33, }, [0x0E34]={ adobename="saraithai", category="mn", description="THAI CHARACTER SARA I", direction="nsm", linebreak="sa", unicodeslot=0x0E34, }, [0x0E35]={ adobename="saraiithai", category="mn", description="THAI CHARACTER SARA II", direction="nsm", linebreak="sa", unicodeslot=0x0E35, }, [0x0E36]={ adobename="sarauethai", category="mn", description="THAI CHARACTER SARA UE", direction="nsm", linebreak="sa", unicodeslot=0x0E36, }, [0x0E37]={ adobename="saraueethai", category="mn", description="THAI CHARACTER SARA UEE", direction="nsm", linebreak="sa", unicodeslot=0x0E37, }, [0x0E38]={ adobename="sarauthai", category="mn", description="THAI CHARACTER SARA U", direction="nsm", linebreak="sa", unicodeslot=0x0E38, }, [0x0E39]={ adobename="sarauuthai", category="mn", description="THAI CHARACTER SARA UU", direction="nsm", linebreak="sa", unicodeslot=0x0E39, }, [0x0E3A]={ adobename="phinthuthai", category="mn", description="THAI CHARACTER PHINTHU", direction="nsm", linebreak="sa", unicodeslot=0x0E3A, }, [0x0E3F]={ adobename="bahtthai", category="sc", description="THAI CURRENCY SYMBOL BAHT", direction="et", linebreak="pr", unicodeslot=0x0E3F, }, [0x0E40]={ adobename="saraethai", category="lo", description="THAI CHARACTER SARA E", direction="l", linebreak="sa", unicodeslot=0x0E40, }, [0x0E41]={ adobename="saraaethai", category="lo", description="THAI CHARACTER SARA AE", direction="l", linebreak="sa", unicodeslot=0x0E41, }, [0x0E42]={ adobename="saraothai", category="lo", description="THAI CHARACTER SARA O", direction="l", linebreak="sa", unicodeslot=0x0E42, }, [0x0E43]={ adobename="saraaimaimuanthai", category="lo", description="THAI CHARACTER SARA AI MAIMUAN", direction="l", linebreak="sa", unicodeslot=0x0E43, }, [0x0E44]={ adobename="saraaimaimalaithai", category="lo", description="THAI CHARACTER SARA AI MAIMALAI", direction="l", linebreak="sa", unicodeslot=0x0E44, }, [0x0E45]={ adobename="lakkhangyaothai", category="lo", description="THAI CHARACTER LAKKHANGYAO", direction="l", linebreak="sa", unicodeslot=0x0E45, }, [0x0E46]={ adobename="maiyamokthai", category="lm", description="THAI CHARACTER MAIYAMOK", direction="l", linebreak="sa", unicodeslot=0x0E46, }, [0x0E47]={ adobename="maitaikhuthai", category="mn", description="THAI CHARACTER MAITAIKHU", direction="nsm", linebreak="sa", unicodeslot=0x0E47, }, [0x0E48]={ adobename="maiekthai", category="mn", description="THAI CHARACTER MAI EK", direction="nsm", linebreak="sa", unicodeslot=0x0E48, }, [0x0E49]={ adobename="maithothai", category="mn", description="THAI CHARACTER MAI THO", direction="nsm", linebreak="sa", unicodeslot=0x0E49, }, [0x0E4A]={ adobename="maitrithai", category="mn", description="THAI CHARACTER MAI TRI", direction="nsm", linebreak="sa", unicodeslot=0x0E4A, }, [0x0E4B]={ adobename="maichattawathai", category="mn", description="THAI CHARACTER MAI CHATTAWA", direction="nsm", linebreak="sa", unicodeslot=0x0E4B, }, [0x0E4C]={ adobename="thanthakhatthai", category="mn", description="THAI CHARACTER THANTHAKHAT", direction="nsm", linebreak="sa", unicodeslot=0x0E4C, }, [0x0E4D]={ adobename="nikhahitthai", category="mn", description="THAI CHARACTER NIKHAHIT", direction="nsm", linebreak="sa", unicodeslot=0x0E4D, }, [0x0E4E]={ adobename="yamakkanthai", category="mn", description="THAI CHARACTER YAMAKKAN", direction="nsm", linebreak="sa", unicodeslot=0x0E4E, }, [0x0E4F]={ adobename="fongmanthai", category="po", description="THAI CHARACTER FONGMAN", direction="l", linebreak="al", unicodeslot=0x0E4F, }, [0x0E50]={ adobename="zerothai", category="nd", description="THAI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0E50, }, [0x0E51]={ adobename="onethai", category="nd", description="THAI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0E51, }, [0x0E52]={ adobename="twothai", category="nd", description="THAI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0E52, }, [0x0E53]={ adobename="threethai", category="nd", description="THAI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0E53, }, [0x0E54]={ adobename="fourthai", category="nd", description="THAI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0E54, }, [0x0E55]={ adobename="fivethai", category="nd", description="THAI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0E55, }, [0x0E56]={ adobename="sixthai", category="nd", description="THAI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0E56, }, [0x0E57]={ adobename="seventhai", category="nd", description="THAI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0E57, }, [0x0E58]={ adobename="eightthai", category="nd", description="THAI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0E58, }, [0x0E59]={ adobename="ninethai", category="nd", description="THAI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0E59, }, [0x0E5A]={ adobename="angkhankhuthai", category="po", description="THAI CHARACTER ANGKHANKHU", direction="l", linebreak="ba", unicodeslot=0x0E5A, }, [0x0E5B]={ adobename="khomutthai", category="po", description="THAI CHARACTER KHOMUT", direction="l", linebreak="ba", unicodeslot=0x0E5B, }, [0x0E81]={ category="lo", description="LAO LETTER KO", direction="l", linebreak="sa", unicodeslot=0x0E81, }, [0x0E82]={ category="lo", description="LAO LETTER KHO SUNG", direction="l", linebreak="sa", unicodeslot=0x0E82, }, [0x0E84]={ category="lo", description="LAO LETTER KHO TAM", direction="l", linebreak="sa", unicodeslot=0x0E84, }, [0x0E87]={ category="lo", description="LAO LETTER NGO", direction="l", linebreak="sa", unicodeslot=0x0E87, }, [0x0E88]={ category="lo", description="LAO LETTER CO", direction="l", linebreak="sa", unicodeslot=0x0E88, }, [0x0E8A]={ category="lo", description="LAO LETTER SO TAM", direction="l", linebreak="sa", unicodeslot=0x0E8A, }, [0x0E8D]={ category="lo", description="LAO LETTER NYO", direction="l", linebreak="sa", unicodeslot=0x0E8D, }, [0x0E94]={ category="lo", description="LAO LETTER DO", direction="l", linebreak="sa", unicodeslot=0x0E94, }, [0x0E95]={ category="lo", description="LAO LETTER TO", direction="l", linebreak="sa", unicodeslot=0x0E95, }, [0x0E96]={ category="lo", description="LAO LETTER THO SUNG", direction="l", linebreak="sa", unicodeslot=0x0E96, }, [0x0E97]={ category="lo", description="LAO LETTER THO TAM", direction="l", linebreak="sa", unicodeslot=0x0E97, }, [0x0E99]={ category="lo", description="LAO LETTER NO", direction="l", linebreak="sa", unicodeslot=0x0E99, }, [0x0E9A]={ category="lo", description="LAO LETTER BO", direction="l", linebreak="sa", unicodeslot=0x0E9A, }, [0x0E9B]={ category="lo", description="LAO LETTER PO", direction="l", linebreak="sa", unicodeslot=0x0E9B, }, [0x0E9C]={ category="lo", description="LAO LETTER PHO SUNG", direction="l", linebreak="sa", unicodeslot=0x0E9C, }, [0x0E9D]={ category="lo", description="LAO LETTER FO TAM", direction="l", linebreak="sa", unicodeslot=0x0E9D, }, [0x0E9E]={ category="lo", description="LAO LETTER PHO TAM", direction="l", linebreak="sa", unicodeslot=0x0E9E, }, [0x0E9F]={ category="lo", description="LAO LETTER FO SUNG", direction="l", linebreak="sa", unicodeslot=0x0E9F, }, [0x0EA1]={ category="lo", description="LAO LETTER MO", direction="l", linebreak="sa", unicodeslot=0x0EA1, }, [0x0EA2]={ category="lo", description="LAO LETTER YO", direction="l", linebreak="sa", unicodeslot=0x0EA2, }, [0x0EA3]={ category="lo", description="LAO LETTER LO LING", direction="l", linebreak="sa", unicodeslot=0x0EA3, }, [0x0EA5]={ category="lo", description="LAO LETTER LO LOOT", direction="l", linebreak="sa", unicodeslot=0x0EA5, }, [0x0EA7]={ category="lo", description="LAO LETTER WO", direction="l", linebreak="sa", unicodeslot=0x0EA7, }, [0x0EAA]={ category="lo", description="LAO LETTER SO SUNG", direction="l", linebreak="sa", unicodeslot=0x0EAA, }, [0x0EAB]={ category="lo", description="LAO LETTER HO SUNG", direction="l", linebreak="sa", unicodeslot=0x0EAB, }, [0x0EAD]={ category="lo", description="LAO LETTER O", direction="l", linebreak="sa", unicodeslot=0x0EAD, }, [0x0EAE]={ category="lo", description="LAO LETTER HO TAM", direction="l", linebreak="sa", unicodeslot=0x0EAE, }, [0x0EAF]={ category="lo", description="LAO ELLIPSIS", direction="l", linebreak="sa", unicodeslot=0x0EAF, }, [0x0EB0]={ category="lo", description="LAO VOWEL SIGN A", direction="l", linebreak="sa", unicodeslot=0x0EB0, }, [0x0EB1]={ category="mn", description="LAO VOWEL SIGN MAI KAN", direction="nsm", linebreak="sa", unicodeslot=0x0EB1, }, [0x0EB2]={ category="lo", description="LAO VOWEL SIGN AA", direction="l", linebreak="sa", unicodeslot=0x0EB2, }, [0x0EB3]={ category="lo", description="LAO VOWEL SIGN AM", direction="l", linebreak="sa", specials={ "compat", 0x0ECD, 0x0EB2 }, unicodeslot=0x0EB3, }, [0x0EB4]={ category="mn", description="LAO VOWEL SIGN I", direction="nsm", linebreak="sa", unicodeslot=0x0EB4, }, [0x0EB5]={ category="mn", description="LAO VOWEL SIGN II", direction="nsm", linebreak="sa", unicodeslot=0x0EB5, }, [0x0EB6]={ category="mn", description="LAO VOWEL SIGN Y", direction="nsm", linebreak="sa", unicodeslot=0x0EB6, }, [0x0EB7]={ category="mn", description="LAO VOWEL SIGN YY", direction="nsm", linebreak="sa", unicodeslot=0x0EB7, }, [0x0EB8]={ category="mn", description="LAO VOWEL SIGN U", direction="nsm", linebreak="sa", unicodeslot=0x0EB8, }, [0x0EB9]={ category="mn", description="LAO VOWEL SIGN UU", direction="nsm", linebreak="sa", unicodeslot=0x0EB9, }, [0x0EBB]={ category="mn", description="LAO VOWEL SIGN MAI KON", direction="nsm", linebreak="sa", unicodeslot=0x0EBB, }, [0x0EBC]={ category="mn", description="LAO SEMIVOWEL SIGN LO", direction="nsm", linebreak="sa", unicodeslot=0x0EBC, }, [0x0EBD]={ category="lo", description="LAO SEMIVOWEL SIGN NYO", direction="l", linebreak="sa", unicodeslot=0x0EBD, }, [0x0EC0]={ category="lo", description="LAO VOWEL SIGN E", direction="l", linebreak="sa", unicodeslot=0x0EC0, }, [0x0EC1]={ category="lo", description="LAO VOWEL SIGN EI", direction="l", linebreak="sa", unicodeslot=0x0EC1, }, [0x0EC2]={ category="lo", description="LAO VOWEL SIGN O", direction="l", linebreak="sa", unicodeslot=0x0EC2, }, [0x0EC3]={ category="lo", description="LAO VOWEL SIGN AY", direction="l", linebreak="sa", unicodeslot=0x0EC3, }, [0x0EC4]={ category="lo", description="LAO VOWEL SIGN AI", direction="l", linebreak="sa", unicodeslot=0x0EC4, }, [0x0EC6]={ category="lm", description="LAO KO LA", direction="l", linebreak="sa", unicodeslot=0x0EC6, }, [0x0EC8]={ category="mn", description="LAO TONE MAI EK", direction="nsm", linebreak="sa", unicodeslot=0x0EC8, }, [0x0EC9]={ category="mn", description="LAO TONE MAI THO", direction="nsm", linebreak="sa", unicodeslot=0x0EC9, }, [0x0ECA]={ category="mn", description="LAO TONE MAI TI", direction="nsm", linebreak="sa", unicodeslot=0x0ECA, }, [0x0ECB]={ category="mn", description="LAO TONE MAI CATAWA", direction="nsm", linebreak="sa", unicodeslot=0x0ECB, }, [0x0ECC]={ category="mn", description="LAO CANCELLATION MARK", direction="nsm", linebreak="sa", unicodeslot=0x0ECC, }, [0x0ECD]={ category="mn", description="LAO NIGGAHITA", direction="nsm", linebreak="sa", unicodeslot=0x0ECD, }, [0x0ED0]={ category="nd", description="LAO DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0ED0, }, [0x0ED1]={ category="nd", description="LAO DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0ED1, }, [0x0ED2]={ category="nd", description="LAO DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0ED2, }, [0x0ED3]={ category="nd", description="LAO DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0ED3, }, [0x0ED4]={ category="nd", description="LAO DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0ED4, }, [0x0ED5]={ category="nd", description="LAO DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0ED5, }, [0x0ED6]={ category="nd", description="LAO DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0ED6, }, [0x0ED7]={ category="nd", description="LAO DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0ED7, }, [0x0ED8]={ category="nd", description="LAO DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0ED8, }, [0x0ED9]={ category="nd", description="LAO DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0ED9, }, [0x0EDC]={ category="lo", description="LAO HO NO", direction="l", linebreak="sa", specials={ "compat", 0x0EAB, 0x0E99 }, unicodeslot=0x0EDC, }, [0x0EDD]={ category="lo", description="LAO HO MO", direction="l", linebreak="sa", specials={ "compat", 0x0EAB, 0x0EA1 }, unicodeslot=0x0EDD, }, [0x0EDE]={ category="lo", description="LAO LETTER KHMU GO", direction="l", linebreak="sa", unicodeslot=0x0EDE, }, [0x0EDF]={ category="lo", description="LAO LETTER KHMU NYO", direction="l", linebreak="sa", unicodeslot=0x0EDF, }, [0x0F00]={ category="lo", description="TIBETAN SYLLABLE OM", direction="l", linebreak="al", unicodeslot=0x0F00, }, [0x0F01]={ category="so", description="TIBETAN MARK GTER YIG MGO TRUNCATED A", direction="l", linebreak="bb", unicodeslot=0x0F01, }, [0x0F02]={ category="so", description="TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA", direction="l", linebreak="bb", unicodeslot=0x0F02, }, [0x0F03]={ category="so", description="TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA", direction="l", linebreak="bb", unicodeslot=0x0F03, }, [0x0F04]={ category="po", description="TIBETAN MARK INITIAL YIG MGO MDUN MA", direction="l", linebreak="bb", unicodeslot=0x0F04, }, [0x0F05]={ category="po", description="TIBETAN MARK CLOSING YIG MGO SGAB MA", direction="l", linebreak="al", unicodeslot=0x0F05, }, [0x0F06]={ category="po", description="TIBETAN MARK CARET YIG MGO PHUR SHAD MA", direction="l", linebreak="bb", unicodeslot=0x0F06, }, [0x0F07]={ category="po", description="TIBETAN MARK YIG MGO TSHEG SHAD MA", direction="l", linebreak="bb", unicodeslot=0x0F07, }, [0x0F08]={ category="po", description="TIBETAN MARK SBRUL SHAD", direction="l", linebreak="gl", unicodeslot=0x0F08, }, [0x0F09]={ category="po", description="TIBETAN MARK BSKUR YIG MGO", direction="l", linebreak="bb", unicodeslot=0x0F09, }, [0x0F0A]={ category="po", description="TIBETAN MARK BKA- SHOG YIG MGO", direction="l", linebreak="bb", unicodeslot=0x0F0A, }, [0x0F0B]={ category="po", description="TIBETAN MARK INTERSYLLABIC TSHEG", direction="l", linebreak="ba", unicodeslot=0x0F0B, }, [0x0F0C]={ category="po", description="TIBETAN MARK DELIMITER TSHEG BSTAR", direction="l", linebreak="gl", specials={ "nobreak", 0x0F0B }, unicodeslot=0x0F0C, }, [0x0F0D]={ category="po", description="TIBETAN MARK SHAD", direction="l", linebreak="ex", unicodeslot=0x0F0D, }, [0x0F0E]={ category="po", description="TIBETAN MARK NYIS SHAD", direction="l", linebreak="ex", unicodeslot=0x0F0E, }, [0x0F0F]={ category="po", description="TIBETAN MARK TSHEG SHAD", direction="l", linebreak="ex", unicodeslot=0x0F0F, }, [0x0F10]={ category="po", description="TIBETAN MARK NYIS TSHEG SHAD", direction="l", linebreak="ex", unicodeslot=0x0F10, }, [0x0F11]={ category="po", description="TIBETAN MARK RIN CHEN SPUNGS SHAD", direction="l", linebreak="ex", unicodeslot=0x0F11, }, [0x0F12]={ category="po", description="TIBETAN MARK RGYA GRAM SHAD", direction="l", linebreak="gl", unicodeslot=0x0F12, }, [0x0F13]={ category="so", description="TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN", direction="l", linebreak="al", unicodeslot=0x0F13, }, [0x0F14]={ category="so", description="TIBETAN MARK GTER TSHEG", direction="l", linebreak="ex", unicodeslot=0x0F14, }, [0x0F15]={ category="so", description="TIBETAN LOGOTYPE SIGN CHAD RTAGS", direction="l", linebreak="al", unicodeslot=0x0F15, }, [0x0F16]={ category="so", description="TIBETAN LOGOTYPE SIGN LHAG RTAGS", direction="l", linebreak="al", unicodeslot=0x0F16, }, [0x0F17]={ category="so", description="TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS", direction="l", linebreak="al", unicodeslot=0x0F17, }, [0x0F18]={ category="mn", description="TIBETAN ASTROLOGICAL SIGN -KHYUD PA", direction="nsm", linebreak="cm", unicodeslot=0x0F18, }, [0x0F19]={ category="mn", description="TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS", direction="nsm", linebreak="cm", unicodeslot=0x0F19, }, [0x0F1A]={ category="so", description="TIBETAN SIGN RDEL DKAR GCIG", direction="l", linebreak="al", unicodeslot=0x0F1A, }, [0x0F1B]={ category="so", description="TIBETAN SIGN RDEL DKAR GNYIS", direction="l", linebreak="al", unicodeslot=0x0F1B, }, [0x0F1C]={ category="so", description="TIBETAN SIGN RDEL DKAR GSUM", direction="l", linebreak="al", unicodeslot=0x0F1C, }, [0x0F1D]={ category="so", description="TIBETAN SIGN RDEL NAG GCIG", direction="l", linebreak="al", unicodeslot=0x0F1D, }, [0x0F1E]={ category="so", description="TIBETAN SIGN RDEL NAG GNYIS", direction="l", linebreak="al", unicodeslot=0x0F1E, }, [0x0F1F]={ category="so", description="TIBETAN SIGN RDEL DKAR RDEL NAG", direction="l", linebreak="al", unicodeslot=0x0F1F, }, [0x0F20]={ category="nd", description="TIBETAN DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x0F20, }, [0x0F21]={ category="nd", description="TIBETAN DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x0F21, }, [0x0F22]={ category="nd", description="TIBETAN DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x0F22, }, [0x0F23]={ category="nd", description="TIBETAN DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x0F23, }, [0x0F24]={ category="nd", description="TIBETAN DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x0F24, }, [0x0F25]={ category="nd", description="TIBETAN DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x0F25, }, [0x0F26]={ category="nd", description="TIBETAN DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x0F26, }, [0x0F27]={ category="nd", description="TIBETAN DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x0F27, }, [0x0F28]={ category="nd", description="TIBETAN DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x0F28, }, [0x0F29]={ category="nd", description="TIBETAN DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x0F29, }, [0x0F2A]={ category="no", description="TIBETAN DIGIT HALF ONE", direction="l", linebreak="al", unicodeslot=0x0F2A, }, [0x0F2B]={ category="no", description="TIBETAN DIGIT HALF TWO", direction="l", linebreak="al", unicodeslot=0x0F2B, }, [0x0F2C]={ category="no", description="TIBETAN DIGIT HALF THREE", direction="l", linebreak="al", unicodeslot=0x0F2C, }, [0x0F2D]={ category="no", description="TIBETAN DIGIT HALF FOUR", direction="l", linebreak="al", unicodeslot=0x0F2D, }, [0x0F2E]={ category="no", description="TIBETAN DIGIT HALF FIVE", direction="l", linebreak="al", unicodeslot=0x0F2E, }, [0x0F2F]={ category="no", description="TIBETAN DIGIT HALF SIX", direction="l", linebreak="al", unicodeslot=0x0F2F, }, [0x0F30]={ category="no", description="TIBETAN DIGIT HALF SEVEN", direction="l", linebreak="al", unicodeslot=0x0F30, }, [0x0F31]={ category="no", description="TIBETAN DIGIT HALF EIGHT", direction="l", linebreak="al", unicodeslot=0x0F31, }, [0x0F32]={ category="no", description="TIBETAN DIGIT HALF NINE", direction="l", linebreak="al", unicodeslot=0x0F32, }, [0x0F33]={ category="no", description="TIBETAN DIGIT HALF ZERO", direction="l", linebreak="al", unicodeslot=0x0F33, }, [0x0F34]={ category="so", description="TIBETAN MARK BSDUS RTAGS", direction="l", linebreak="ba", unicodeslot=0x0F34, }, [0x0F35]={ category="mn", description="TIBETAN MARK NGAS BZUNG NYI ZLA", direction="nsm", linebreak="cm", unicodeslot=0x0F35, }, [0x0F36]={ category="so", description="TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN", direction="l", linebreak="al", unicodeslot=0x0F36, }, [0x0F37]={ category="mn", description="TIBETAN MARK NGAS BZUNG SGOR RTAGS", direction="nsm", linebreak="cm", unicodeslot=0x0F37, }, [0x0F38]={ category="so", description="TIBETAN MARK CHE MGO", direction="l", linebreak="al", unicodeslot=0x0F38, }, [0x0F39]={ category="mn", description="TIBETAN MARK TSA -PHRU", direction="nsm", linebreak="cm", unicodeslot=0x0F39, }, [0x0F3A]={ category="ps", description="TIBETAN MARK GUG RTAGS GYON", direction="on", linebreak="op", mirror=0x0F3B, unicodeslot=0x0F3A, }, [0x0F3B]={ category="pe", description="TIBETAN MARK GUG RTAGS GYAS", direction="on", linebreak="cl", mirror=0x0F3A, unicodeslot=0x0F3B, }, [0x0F3C]={ category="ps", description="TIBETAN MARK ANG KHANG GYON", direction="on", linebreak="op", mirror=0x0F3D, unicodeslot=0x0F3C, }, [0x0F3D]={ category="pe", description="TIBETAN MARK ANG KHANG GYAS", direction="on", linebreak="cl", mirror=0x0F3C, unicodeslot=0x0F3D, }, [0x0F3E]={ category="mc", description="TIBETAN SIGN YAR TSHES", direction="l", linebreak="cm", unicodeslot=0x0F3E, }, [0x0F3F]={ category="mc", description="TIBETAN SIGN MAR TSHES", direction="l", linebreak="cm", unicodeslot=0x0F3F, }, [0x0F40]={ category="lo", description="TIBETAN LETTER KA", direction="l", linebreak="al", unicodeslot=0x0F40, }, [0x0F41]={ category="lo", description="TIBETAN LETTER KHA", direction="l", linebreak="al", unicodeslot=0x0F41, }, [0x0F42]={ category="lo", description="TIBETAN LETTER GA", direction="l", linebreak="al", unicodeslot=0x0F42, }, [0x0F43]={ category="lo", description="TIBETAN LETTER GHA", direction="l", linebreak="al", specials={ "char", 0x0F42, 0x0FB7 }, unicodeslot=0x0F43, }, [0x0F44]={ category="lo", description="TIBETAN LETTER NGA", direction="l", linebreak="al", unicodeslot=0x0F44, }, [0x0F45]={ category="lo", description="TIBETAN LETTER CA", direction="l", linebreak="al", unicodeslot=0x0F45, }, [0x0F46]={ category="lo", description="TIBETAN LETTER CHA", direction="l", linebreak="al", unicodeslot=0x0F46, }, [0x0F47]={ category="lo", description="TIBETAN LETTER JA", direction="l", linebreak="al", unicodeslot=0x0F47, }, [0x0F49]={ category="lo", description="TIBETAN LETTER NYA", direction="l", linebreak="al", unicodeslot=0x0F49, }, [0x0F4A]={ category="lo", description="TIBETAN LETTER TTA", direction="l", linebreak="al", unicodeslot=0x0F4A, }, [0x0F4B]={ category="lo", description="TIBETAN LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x0F4B, }, [0x0F4C]={ category="lo", description="TIBETAN LETTER DDA", direction="l", linebreak="al", unicodeslot=0x0F4C, }, [0x0F4D]={ category="lo", description="TIBETAN LETTER DDHA", direction="l", linebreak="al", specials={ "char", 0x0F4C, 0x0FB7 }, unicodeslot=0x0F4D, }, [0x0F4E]={ category="lo", description="TIBETAN LETTER NNA", direction="l", linebreak="al", unicodeslot=0x0F4E, }, [0x0F4F]={ category="lo", description="TIBETAN LETTER TA", direction="l", linebreak="al", unicodeslot=0x0F4F, }, [0x0F50]={ category="lo", description="TIBETAN LETTER THA", direction="l", linebreak="al", unicodeslot=0x0F50, }, [0x0F51]={ category="lo", description="TIBETAN LETTER DA", direction="l", linebreak="al", unicodeslot=0x0F51, }, [0x0F52]={ category="lo", description="TIBETAN LETTER DHA", direction="l", linebreak="al", specials={ "char", 0x0F51, 0x0FB7 }, unicodeslot=0x0F52, }, [0x0F53]={ category="lo", description="TIBETAN LETTER NA", direction="l", linebreak="al", unicodeslot=0x0F53, }, [0x0F54]={ category="lo", description="TIBETAN LETTER PA", direction="l", linebreak="al", unicodeslot=0x0F54, }, [0x0F55]={ category="lo", description="TIBETAN LETTER PHA", direction="l", linebreak="al", unicodeslot=0x0F55, }, [0x0F56]={ category="lo", description="TIBETAN LETTER BA", direction="l", linebreak="al", unicodeslot=0x0F56, }, [0x0F57]={ category="lo", description="TIBETAN LETTER BHA", direction="l", linebreak="al", specials={ "char", 0x0F56, 0x0FB7 }, unicodeslot=0x0F57, }, [0x0F58]={ category="lo", description="TIBETAN LETTER MA", direction="l", linebreak="al", unicodeslot=0x0F58, }, [0x0F59]={ category="lo", description="TIBETAN LETTER TSA", direction="l", linebreak="al", unicodeslot=0x0F59, }, [0x0F5A]={ category="lo", description="TIBETAN LETTER TSHA", direction="l", linebreak="al", unicodeslot=0x0F5A, }, [0x0F5B]={ category="lo", description="TIBETAN LETTER DZA", direction="l", linebreak="al", unicodeslot=0x0F5B, }, [0x0F5C]={ category="lo", description="TIBETAN LETTER DZHA", direction="l", linebreak="al", specials={ "char", 0x0F5B, 0x0FB7 }, unicodeslot=0x0F5C, }, [0x0F5D]={ category="lo", description="TIBETAN LETTER WA", direction="l", linebreak="al", unicodeslot=0x0F5D, }, [0x0F5E]={ category="lo", description="TIBETAN LETTER ZHA", direction="l", linebreak="al", unicodeslot=0x0F5E, }, [0x0F5F]={ category="lo", description="TIBETAN LETTER ZA", direction="l", linebreak="al", unicodeslot=0x0F5F, }, [0x0F60]={ category="lo", description="TIBETAN LETTER -A", direction="l", linebreak="al", unicodeslot=0x0F60, }, [0x0F61]={ category="lo", description="TIBETAN LETTER YA", direction="l", linebreak="al", unicodeslot=0x0F61, }, [0x0F62]={ category="lo", description="TIBETAN LETTER RA", direction="l", linebreak="al", unicodeslot=0x0F62, }, [0x0F63]={ category="lo", description="TIBETAN LETTER LA", direction="l", linebreak="al", unicodeslot=0x0F63, }, [0x0F64]={ category="lo", description="TIBETAN LETTER SHA", direction="l", linebreak="al", unicodeslot=0x0F64, }, [0x0F65]={ category="lo", description="TIBETAN LETTER SSA", direction="l", linebreak="al", unicodeslot=0x0F65, }, [0x0F66]={ category="lo", description="TIBETAN LETTER SA", direction="l", linebreak="al", unicodeslot=0x0F66, }, [0x0F67]={ category="lo", description="TIBETAN LETTER HA", direction="l", linebreak="al", unicodeslot=0x0F67, }, [0x0F68]={ category="lo", description="TIBETAN LETTER A", direction="l", linebreak="al", unicodeslot=0x0F68, }, [0x0F69]={ category="lo", description="TIBETAN LETTER KSSA", direction="l", linebreak="al", specials={ "char", 0x0F40, 0x0FB5 }, unicodeslot=0x0F69, }, [0x0F6A]={ category="lo", description="TIBETAN LETTER FIXED-FORM RA", direction="l", linebreak="al", unicodeslot=0x0F6A, }, [0x0F6B]={ category="lo", description="TIBETAN LETTER KKA", direction="l", linebreak="al", unicodeslot=0x0F6B, }, [0x0F6C]={ category="lo", description="TIBETAN LETTER RRA", direction="l", linebreak="al", unicodeslot=0x0F6C, }, [0x0F71]={ category="mn", description="TIBETAN VOWEL SIGN AA", direction="nsm", linebreak="cm", unicodeslot=0x0F71, }, [0x0F72]={ category="mn", description="TIBETAN VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x0F72, }, [0x0F73]={ category="mn", description="TIBETAN VOWEL SIGN II", direction="nsm", linebreak="cm", specials={ "char", 0x0F71, 0x0F72 }, unicodeslot=0x0F73, }, [0x0F74]={ category="mn", description="TIBETAN VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x0F74, }, [0x0F75]={ category="mn", description="TIBETAN VOWEL SIGN UU", direction="nsm", linebreak="cm", specials={ "char", 0x0F71, 0x0F74 }, unicodeslot=0x0F75, }, [0x0F76]={ category="mn", description="TIBETAN VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", specials={ "char", 0x0FB2, 0x0F80 }, unicodeslot=0x0F76, }, [0x0F77]={ category="mn", description="TIBETAN VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", specials={ "compat", 0x0FB2, 0x0F81 }, unicodeslot=0x0F77, }, [0x0F78]={ category="mn", description="TIBETAN VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", specials={ "char", 0x0FB3, 0x0F80 }, unicodeslot=0x0F78, }, [0x0F79]={ category="mn", description="TIBETAN VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", specials={ "compat", 0x0FB3, 0x0F81 }, unicodeslot=0x0F79, }, [0x0F7A]={ category="mn", description="TIBETAN VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x0F7A, }, [0x0F7B]={ category="mn", description="TIBETAN VOWEL SIGN EE", direction="nsm", linebreak="cm", unicodeslot=0x0F7B, }, [0x0F7C]={ category="mn", description="TIBETAN VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x0F7C, }, [0x0F7D]={ category="mn", description="TIBETAN VOWEL SIGN OO", direction="nsm", linebreak="cm", unicodeslot=0x0F7D, }, [0x0F7E]={ category="mn", description="TIBETAN SIGN RJES SU NGA RO", direction="nsm", linebreak="cm", unicodeslot=0x0F7E, }, [0x0F7F]={ category="mc", description="TIBETAN SIGN RNAM BCAD", direction="l", linebreak="ba", unicodeslot=0x0F7F, }, [0x0F80]={ category="mn", description="TIBETAN VOWEL SIGN REVERSED I", direction="nsm", linebreak="cm", unicodeslot=0x0F80, }, [0x0F81]={ category="mn", description="TIBETAN VOWEL SIGN REVERSED II", direction="nsm", linebreak="cm", specials={ "char", 0x0F71, 0x0F80 }, unicodeslot=0x0F81, }, [0x0F82]={ category="mn", description="TIBETAN SIGN NYI ZLA NAA DA", direction="nsm", linebreak="cm", unicodeslot=0x0F82, }, [0x0F83]={ category="mn", description="TIBETAN SIGN SNA LDAN", direction="nsm", linebreak="cm", unicodeslot=0x0F83, }, [0x0F84]={ category="mn", description="TIBETAN MARK HALANTA", direction="nsm", linebreak="cm", unicodeslot=0x0F84, }, [0x0F85]={ category="po", description="TIBETAN MARK PALUTA", direction="l", linebreak="ba", unicodeslot=0x0F85, }, [0x0F86]={ category="mn", description="TIBETAN SIGN LCI RTAGS", direction="nsm", linebreak="cm", unicodeslot=0x0F86, }, [0x0F87]={ category="mn", description="TIBETAN SIGN YANG RTAGS", direction="nsm", linebreak="cm", unicodeslot=0x0F87, }, [0x0F88]={ category="lo", description="TIBETAN SIGN LCE TSA CAN", direction="l", linebreak="al", unicodeslot=0x0F88, }, [0x0F89]={ category="lo", description="TIBETAN SIGN MCHU CAN", direction="l", linebreak="al", unicodeslot=0x0F89, }, [0x0F8A]={ category="lo", description="TIBETAN SIGN GRU CAN RGYINGS", direction="l", linebreak="al", unicodeslot=0x0F8A, }, [0x0F8B]={ category="lo", description="TIBETAN SIGN GRU MED RGYINGS", direction="l", linebreak="al", unicodeslot=0x0F8B, }, [0x0F8C]={ category="lo", description="TIBETAN SIGN INVERTED MCHU CAN", direction="l", linebreak="al", unicodeslot=0x0F8C, }, [0x0F8D]={ category="mn", description="TIBETAN SUBJOINED SIGN LCE TSA CAN", direction="nsm", linebreak="cm", unicodeslot=0x0F8D, }, [0x0F8E]={ category="mn", description="TIBETAN SUBJOINED SIGN MCHU CAN", direction="nsm", linebreak="cm", unicodeslot=0x0F8E, }, [0x0F8F]={ category="mn", description="TIBETAN SUBJOINED SIGN INVERTED MCHU CAN", direction="nsm", linebreak="cm", unicodeslot=0x0F8F, }, [0x0F90]={ category="mn", description="TIBETAN SUBJOINED LETTER KA", direction="nsm", linebreak="cm", unicodeslot=0x0F90, }, [0x0F91]={ category="mn", description="TIBETAN SUBJOINED LETTER KHA", direction="nsm", linebreak="cm", unicodeslot=0x0F91, }, [0x0F92]={ category="mn", description="TIBETAN SUBJOINED LETTER GA", direction="nsm", linebreak="cm", unicodeslot=0x0F92, }, [0x0F93]={ category="mn", description="TIBETAN SUBJOINED LETTER GHA", direction="nsm", linebreak="cm", specials={ "char", 0x0F92, 0x0FB7 }, unicodeslot=0x0F93, }, [0x0F94]={ category="mn", description="TIBETAN SUBJOINED LETTER NGA", direction="nsm", linebreak="cm", unicodeslot=0x0F94, }, [0x0F95]={ category="mn", description="TIBETAN SUBJOINED LETTER CA", direction="nsm", linebreak="cm", unicodeslot=0x0F95, }, [0x0F96]={ category="mn", description="TIBETAN SUBJOINED LETTER CHA", direction="nsm", linebreak="cm", unicodeslot=0x0F96, }, [0x0F97]={ category="mn", description="TIBETAN SUBJOINED LETTER JA", direction="nsm", linebreak="cm", unicodeslot=0x0F97, }, [0x0F99]={ category="mn", description="TIBETAN SUBJOINED LETTER NYA", direction="nsm", linebreak="cm", unicodeslot=0x0F99, }, [0x0F9A]={ category="mn", description="TIBETAN SUBJOINED LETTER TTA", direction="nsm", linebreak="cm", unicodeslot=0x0F9A, }, [0x0F9B]={ category="mn", description="TIBETAN SUBJOINED LETTER TTHA", direction="nsm", linebreak="cm", unicodeslot=0x0F9B, }, [0x0F9C]={ category="mn", description="TIBETAN SUBJOINED LETTER DDA", direction="nsm", linebreak="cm", unicodeslot=0x0F9C, }, [0x0F9D]={ category="mn", description="TIBETAN SUBJOINED LETTER DDHA", direction="nsm", linebreak="cm", specials={ "char", 0x0F9C, 0x0FB7 }, unicodeslot=0x0F9D, }, [0x0F9E]={ category="mn", description="TIBETAN SUBJOINED LETTER NNA", direction="nsm", linebreak="cm", unicodeslot=0x0F9E, }, [0x0F9F]={ category="mn", description="TIBETAN SUBJOINED LETTER TA", direction="nsm", linebreak="cm", unicodeslot=0x0F9F, }, [0x0FA0]={ category="mn", description="TIBETAN SUBJOINED LETTER THA", direction="nsm", linebreak="cm", unicodeslot=0x0FA0, }, [0x0FA1]={ category="mn", description="TIBETAN SUBJOINED LETTER DA", direction="nsm", linebreak="cm", unicodeslot=0x0FA1, }, [0x0FA2]={ category="mn", description="TIBETAN SUBJOINED LETTER DHA", direction="nsm", linebreak="cm", specials={ "char", 0x0FA1, 0x0FB7 }, unicodeslot=0x0FA2, }, [0x0FA3]={ category="mn", description="TIBETAN SUBJOINED LETTER NA", direction="nsm", linebreak="cm", unicodeslot=0x0FA3, }, [0x0FA4]={ category="mn", description="TIBETAN SUBJOINED LETTER PA", direction="nsm", linebreak="cm", unicodeslot=0x0FA4, }, [0x0FA5]={ category="mn", description="TIBETAN SUBJOINED LETTER PHA", direction="nsm", linebreak="cm", unicodeslot=0x0FA5, }, [0x0FA6]={ category="mn", description="TIBETAN SUBJOINED LETTER BA", direction="nsm", linebreak="cm", unicodeslot=0x0FA6, }, [0x0FA7]={ category="mn", description="TIBETAN SUBJOINED LETTER BHA", direction="nsm", linebreak="cm", specials={ "char", 0x0FA6, 0x0FB7 }, unicodeslot=0x0FA7, }, [0x0FA8]={ category="mn", description="TIBETAN SUBJOINED LETTER MA", direction="nsm", linebreak="cm", unicodeslot=0x0FA8, }, [0x0FA9]={ category="mn", description="TIBETAN SUBJOINED LETTER TSA", direction="nsm", linebreak="cm", unicodeslot=0x0FA9, }, [0x0FAA]={ category="mn", description="TIBETAN SUBJOINED LETTER TSHA", direction="nsm", linebreak="cm", unicodeslot=0x0FAA, }, [0x0FAB]={ category="mn", description="TIBETAN SUBJOINED LETTER DZA", direction="nsm", linebreak="cm", unicodeslot=0x0FAB, }, [0x0FAC]={ category="mn", description="TIBETAN SUBJOINED LETTER DZHA", direction="nsm", linebreak="cm", specials={ "char", 0x0FAB, 0x0FB7 }, unicodeslot=0x0FAC, }, [0x0FAD]={ category="mn", description="TIBETAN SUBJOINED LETTER WA", direction="nsm", linebreak="cm", unicodeslot=0x0FAD, }, [0x0FAE]={ category="mn", description="TIBETAN SUBJOINED LETTER ZHA", direction="nsm", linebreak="cm", unicodeslot=0x0FAE, }, [0x0FAF]={ category="mn", description="TIBETAN SUBJOINED LETTER ZA", direction="nsm", linebreak="cm", unicodeslot=0x0FAF, }, [0x0FB0]={ category="mn", description="TIBETAN SUBJOINED LETTER -A", direction="nsm", linebreak="cm", unicodeslot=0x0FB0, }, [0x0FB1]={ category="mn", description="TIBETAN SUBJOINED LETTER YA", direction="nsm", linebreak="cm", unicodeslot=0x0FB1, }, [0x0FB2]={ category="mn", description="TIBETAN SUBJOINED LETTER RA", direction="nsm", linebreak="cm", unicodeslot=0x0FB2, }, [0x0FB3]={ category="mn", description="TIBETAN SUBJOINED LETTER LA", direction="nsm", linebreak="cm", unicodeslot=0x0FB3, }, [0x0FB4]={ category="mn", description="TIBETAN SUBJOINED LETTER SHA", direction="nsm", linebreak="cm", unicodeslot=0x0FB4, }, [0x0FB5]={ category="mn", description="TIBETAN SUBJOINED LETTER SSA", direction="nsm", linebreak="cm", unicodeslot=0x0FB5, }, [0x0FB6]={ category="mn", description="TIBETAN SUBJOINED LETTER SA", direction="nsm", linebreak="cm", unicodeslot=0x0FB6, }, [0x0FB7]={ category="mn", description="TIBETAN SUBJOINED LETTER HA", direction="nsm", linebreak="cm", unicodeslot=0x0FB7, }, [0x0FB8]={ category="mn", description="TIBETAN SUBJOINED LETTER A", direction="nsm", linebreak="cm", unicodeslot=0x0FB8, }, [0x0FB9]={ category="mn", description="TIBETAN SUBJOINED LETTER KSSA", direction="nsm", linebreak="cm", specials={ "char", 0x0F90, 0x0FB5 }, unicodeslot=0x0FB9, }, [0x0FBA]={ category="mn", description="TIBETAN SUBJOINED LETTER FIXED-FORM WA", direction="nsm", linebreak="cm", unicodeslot=0x0FBA, }, [0x0FBB]={ category="mn", description="TIBETAN SUBJOINED LETTER FIXED-FORM YA", direction="nsm", linebreak="cm", unicodeslot=0x0FBB, }, [0x0FBC]={ category="mn", description="TIBETAN SUBJOINED LETTER FIXED-FORM RA", direction="nsm", linebreak="cm", unicodeslot=0x0FBC, }, [0x0FBE]={ category="so", description="TIBETAN KU RU KHA", direction="l", linebreak="ba", unicodeslot=0x0FBE, }, [0x0FBF]={ category="so", description="TIBETAN KU RU KHA BZHI MIG CAN", direction="l", linebreak="ba", unicodeslot=0x0FBF, }, [0x0FC0]={ category="so", description="TIBETAN CANTILLATION SIGN HEAVY BEAT", direction="l", linebreak="al", unicodeslot=0x0FC0, }, [0x0FC1]={ category="so", description="TIBETAN CANTILLATION SIGN LIGHT BEAT", direction="l", linebreak="al", unicodeslot=0x0FC1, }, [0x0FC2]={ category="so", description="TIBETAN CANTILLATION SIGN CANG TE-U", direction="l", linebreak="al", unicodeslot=0x0FC2, }, [0x0FC3]={ category="so", description="TIBETAN CANTILLATION SIGN SBUB -CHAL", direction="l", linebreak="al", unicodeslot=0x0FC3, }, [0x0FC4]={ category="so", description="TIBETAN SYMBOL DRIL BU", direction="l", linebreak="al", unicodeslot=0x0FC4, }, [0x0FC5]={ category="so", description="TIBETAN SYMBOL RDO RJE", direction="l", linebreak="al", unicodeslot=0x0FC5, }, [0x0FC6]={ category="mn", description="TIBETAN SYMBOL PADMA GDAN", direction="nsm", linebreak="cm", unicodeslot=0x0FC6, }, [0x0FC7]={ category="so", description="TIBETAN SYMBOL RDO RJE RGYA GRAM", direction="l", linebreak="al", unicodeslot=0x0FC7, }, [0x0FC8]={ category="so", description="TIBETAN SYMBOL PHUR PA", direction="l", linebreak="al", unicodeslot=0x0FC8, }, [0x0FC9]={ category="so", description="TIBETAN SYMBOL NOR BU", direction="l", linebreak="al", unicodeslot=0x0FC9, }, [0x0FCA]={ category="so", description="TIBETAN SYMBOL NOR BU NYIS -KHYIL", direction="l", linebreak="al", unicodeslot=0x0FCA, }, [0x0FCB]={ category="so", description="TIBETAN SYMBOL NOR BU GSUM -KHYIL", direction="l", linebreak="al", unicodeslot=0x0FCB, }, [0x0FCC]={ category="so", description="TIBETAN SYMBOL NOR BU BZHI -KHYIL", direction="l", linebreak="al", unicodeslot=0x0FCC, }, [0x0FCE]={ category="so", description="TIBETAN SIGN RDEL NAG RDEL DKAR", direction="l", linebreak="al", unicodeslot=0x0FCE, }, [0x0FCF]={ category="so", description="TIBETAN SIGN RDEL NAG GSUM", direction="l", linebreak="al", unicodeslot=0x0FCF, }, [0x0FD0]={ category="po", description="TIBETAN MARK BSKA- SHOG GI MGO RGYAN", direction="l", linebreak="bb", unicodeslot=0x0FD0, }, [0x0FD1]={ category="po", description="TIBETAN MARK MNYAM YIG GI MGO RGYAN", direction="l", linebreak="bb", unicodeslot=0x0FD1, }, [0x0FD2]={ category="po", description="TIBETAN MARK NYIS TSHEG", direction="l", linebreak="ba", unicodeslot=0x0FD2, }, [0x0FD3]={ category="po", description="TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA", direction="l", linebreak="bb", unicodeslot=0x0FD3, }, [0x0FD4]={ category="po", description="TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA", direction="l", linebreak="al", unicodeslot=0x0FD4, }, [0x0FD5]={ category="so", description="RIGHT-FACING SVASTI SIGN", direction="l", linebreak="al", unicodeslot=0x0FD5, }, [0x0FD6]={ category="so", description="LEFT-FACING SVASTI SIGN", direction="l", linebreak="al", unicodeslot=0x0FD6, }, [0x0FD7]={ category="so", description="RIGHT-FACING SVASTI SIGN WITH DOTS", direction="l", linebreak="al", unicodeslot=0x0FD7, }, [0x0FD8]={ category="so", description="LEFT-FACING SVASTI SIGN WITH DOTS", direction="l", linebreak="al", unicodeslot=0x0FD8, }, [0x0FD9]={ category="po", description="TIBETAN MARK LEADING MCHAN RTAGS", direction="l", linebreak="gl", unicodeslot=0x0FD9, }, [0x0FDA]={ category="po", description="TIBETAN MARK TRAILING MCHAN RTAGS", direction="l", linebreak="gl", unicodeslot=0x0FDA, }, [0x1000]={ category="lo", description="MYANMAR LETTER KA", direction="l", linebreak="sa", unicodeslot=0x1000, }, [0x1001]={ category="lo", description="MYANMAR LETTER KHA", direction="l", linebreak="sa", unicodeslot=0x1001, }, [0x1002]={ category="lo", description="MYANMAR LETTER GA", direction="l", linebreak="sa", unicodeslot=0x1002, }, [0x1003]={ category="lo", description="MYANMAR LETTER GHA", direction="l", linebreak="sa", unicodeslot=0x1003, }, [0x1004]={ category="lo", description="MYANMAR LETTER NGA", direction="l", linebreak="sa", unicodeslot=0x1004, }, [0x1005]={ category="lo", description="MYANMAR LETTER CA", direction="l", linebreak="sa", unicodeslot=0x1005, }, [0x1006]={ category="lo", description="MYANMAR LETTER CHA", direction="l", linebreak="sa", unicodeslot=0x1006, }, [0x1007]={ category="lo", description="MYANMAR LETTER JA", direction="l", linebreak="sa", unicodeslot=0x1007, }, [0x1008]={ category="lo", description="MYANMAR LETTER JHA", direction="l", linebreak="sa", unicodeslot=0x1008, }, [0x1009]={ category="lo", description="MYANMAR LETTER NYA", direction="l", linebreak="sa", unicodeslot=0x1009, }, [0x100A]={ category="lo", description="MYANMAR LETTER NNYA", direction="l", linebreak="sa", unicodeslot=0x100A, }, [0x100B]={ category="lo", description="MYANMAR LETTER TTA", direction="l", linebreak="sa", unicodeslot=0x100B, }, [0x100C]={ category="lo", description="MYANMAR LETTER TTHA", direction="l", linebreak="sa", unicodeslot=0x100C, }, [0x100D]={ category="lo", description="MYANMAR LETTER DDA", direction="l", linebreak="sa", unicodeslot=0x100D, }, [0x100E]={ category="lo", description="MYANMAR LETTER DDHA", direction="l", linebreak="sa", unicodeslot=0x100E, }, [0x100F]={ category="lo", description="MYANMAR LETTER NNA", direction="l", linebreak="sa", unicodeslot=0x100F, }, [0x1010]={ category="lo", description="MYANMAR LETTER TA", direction="l", linebreak="sa", unicodeslot=0x1010, }, [0x1011]={ category="lo", description="MYANMAR LETTER THA", direction="l", linebreak="sa", unicodeslot=0x1011, }, [0x1012]={ category="lo", description="MYANMAR LETTER DA", direction="l", linebreak="sa", unicodeslot=0x1012, }, [0x1013]={ category="lo", description="MYANMAR LETTER DHA", direction="l", linebreak="sa", unicodeslot=0x1013, }, [0x1014]={ category="lo", description="MYANMAR LETTER NA", direction="l", linebreak="sa", unicodeslot=0x1014, }, [0x1015]={ category="lo", description="MYANMAR LETTER PA", direction="l", linebreak="sa", unicodeslot=0x1015, }, [0x1016]={ category="lo", description="MYANMAR LETTER PHA", direction="l", linebreak="sa", unicodeslot=0x1016, }, [0x1017]={ category="lo", description="MYANMAR LETTER BA", direction="l", linebreak="sa", unicodeslot=0x1017, }, [0x1018]={ category="lo", description="MYANMAR LETTER BHA", direction="l", linebreak="sa", unicodeslot=0x1018, }, [0x1019]={ category="lo", description="MYANMAR LETTER MA", direction="l", linebreak="sa", unicodeslot=0x1019, }, [0x101A]={ category="lo", description="MYANMAR LETTER YA", direction="l", linebreak="sa", unicodeslot=0x101A, }, [0x101B]={ category="lo", description="MYANMAR LETTER RA", direction="l", linebreak="sa", unicodeslot=0x101B, }, [0x101C]={ category="lo", description="MYANMAR LETTER LA", direction="l", linebreak="sa", unicodeslot=0x101C, }, [0x101D]={ category="lo", description="MYANMAR LETTER WA", direction="l", linebreak="sa", unicodeslot=0x101D, }, [0x101E]={ category="lo", description="MYANMAR LETTER SA", direction="l", linebreak="sa", unicodeslot=0x101E, }, [0x101F]={ category="lo", description="MYANMAR LETTER HA", direction="l", linebreak="sa", unicodeslot=0x101F, }, [0x1020]={ category="lo", description="MYANMAR LETTER LLA", direction="l", linebreak="sa", unicodeslot=0x1020, }, [0x1021]={ category="lo", description="MYANMAR LETTER A", direction="l", linebreak="sa", unicodeslot=0x1021, }, [0x1022]={ category="lo", description="MYANMAR LETTER SHAN A", direction="l", linebreak="sa", unicodeslot=0x1022, }, [0x1023]={ category="lo", description="MYANMAR LETTER I", direction="l", linebreak="sa", unicodeslot=0x1023, }, [0x1024]={ category="lo", description="MYANMAR LETTER II", direction="l", linebreak="sa", unicodeslot=0x1024, }, [0x1025]={ category="lo", description="MYANMAR LETTER U", direction="l", linebreak="sa", unicodeslot=0x1025, }, [0x1026]={ category="lo", description="MYANMAR LETTER UU", direction="l", linebreak="sa", specials={ "char", 0x1025, 0x102E }, unicodeslot=0x1026, }, [0x1027]={ category="lo", description="MYANMAR LETTER E", direction="l", linebreak="sa", unicodeslot=0x1027, }, [0x1028]={ category="lo", description="MYANMAR LETTER MON E", direction="l", linebreak="sa", unicodeslot=0x1028, }, [0x1029]={ category="lo", description="MYANMAR LETTER O", direction="l", linebreak="sa", unicodeslot=0x1029, }, [0x102A]={ category="lo", description="MYANMAR LETTER AU", direction="l", linebreak="sa", unicodeslot=0x102A, }, [0x102B]={ category="mc", description="MYANMAR VOWEL SIGN TALL AA", direction="l", linebreak="sa", unicodeslot=0x102B, }, [0x102C]={ category="mc", description="MYANMAR VOWEL SIGN AA", direction="l", linebreak="sa", unicodeslot=0x102C, }, [0x102D]={ category="mn", description="MYANMAR VOWEL SIGN I", direction="nsm", linebreak="sa", unicodeslot=0x102D, }, [0x102E]={ category="mn", description="MYANMAR VOWEL SIGN II", direction="nsm", linebreak="sa", unicodeslot=0x102E, }, [0x102F]={ category="mn", description="MYANMAR VOWEL SIGN U", direction="nsm", linebreak="sa", unicodeslot=0x102F, }, [0x1030]={ category="mn", description="MYANMAR VOWEL SIGN UU", direction="nsm", linebreak="sa", unicodeslot=0x1030, }, [0x1031]={ category="mc", description="MYANMAR VOWEL SIGN E", direction="l", linebreak="sa", unicodeslot=0x1031, }, [0x1032]={ category="mn", description="MYANMAR VOWEL SIGN AI", direction="nsm", linebreak="sa", unicodeslot=0x1032, }, [0x1033]={ category="mn", description="MYANMAR VOWEL SIGN MON II", direction="nsm", linebreak="sa", unicodeslot=0x1033, }, [0x1034]={ category="mn", description="MYANMAR VOWEL SIGN MON O", direction="nsm", linebreak="sa", unicodeslot=0x1034, }, [0x1035]={ category="mn", description="MYANMAR VOWEL SIGN E ABOVE", direction="nsm", linebreak="sa", unicodeslot=0x1035, }, [0x1036]={ category="mn", description="MYANMAR SIGN ANUSVARA", direction="nsm", linebreak="sa", unicodeslot=0x1036, }, [0x1037]={ category="mn", description="MYANMAR SIGN DOT BELOW", direction="nsm", linebreak="sa", unicodeslot=0x1037, }, [0x1038]={ category="mc", description="MYANMAR SIGN VISARGA", direction="l", linebreak="sa", unicodeslot=0x1038, }, [0x1039]={ category="mn", description="MYANMAR SIGN VIRAMA", direction="nsm", linebreak="sa", unicodeslot=0x1039, }, [0x103A]={ category="mn", description="MYANMAR SIGN ASAT", direction="nsm", linebreak="sa", unicodeslot=0x103A, }, [0x103B]={ category="mc", description="MYANMAR CONSONANT SIGN MEDIAL YA", direction="l", linebreak="sa", unicodeslot=0x103B, }, [0x103C]={ category="mc", description="MYANMAR CONSONANT SIGN MEDIAL RA", direction="l", linebreak="sa", unicodeslot=0x103C, }, [0x103D]={ category="mn", description="MYANMAR CONSONANT SIGN MEDIAL WA", direction="nsm", linebreak="sa", unicodeslot=0x103D, }, [0x103E]={ category="mn", description="MYANMAR CONSONANT SIGN MEDIAL HA", direction="nsm", linebreak="sa", unicodeslot=0x103E, }, [0x103F]={ category="lo", description="MYANMAR LETTER GREAT SA", direction="l", linebreak="sa", unicodeslot=0x103F, }, [0x1040]={ category="nd", description="MYANMAR DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1040, }, [0x1041]={ category="nd", description="MYANMAR DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1041, }, [0x1042]={ category="nd", description="MYANMAR DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1042, }, [0x1043]={ category="nd", description="MYANMAR DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1043, }, [0x1044]={ category="nd", description="MYANMAR DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1044, }, [0x1045]={ category="nd", description="MYANMAR DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1045, }, [0x1046]={ category="nd", description="MYANMAR DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1046, }, [0x1047]={ category="nd", description="MYANMAR DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1047, }, [0x1048]={ category="nd", description="MYANMAR DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1048, }, [0x1049]={ category="nd", description="MYANMAR DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1049, }, [0x104A]={ category="po", description="MYANMAR SIGN LITTLE SECTION", direction="l", linebreak="ba", unicodeslot=0x104A, }, [0x104B]={ category="po", description="MYANMAR SIGN SECTION", direction="l", linebreak="ba", unicodeslot=0x104B, }, [0x104C]={ category="po", description="MYANMAR SYMBOL LOCATIVE", direction="l", linebreak="al", unicodeslot=0x104C, }, [0x104D]={ category="po", description="MYANMAR SYMBOL COMPLETED", direction="l", linebreak="al", unicodeslot=0x104D, }, [0x104E]={ category="po", description="MYANMAR SYMBOL AFOREMENTIONED", direction="l", linebreak="al", unicodeslot=0x104E, }, [0x104F]={ category="po", description="MYANMAR SYMBOL GENITIVE", direction="l", linebreak="al", unicodeslot=0x104F, }, [0x1050]={ category="lo", description="MYANMAR LETTER SHA", direction="l", linebreak="sa", unicodeslot=0x1050, }, [0x1051]={ category="lo", description="MYANMAR LETTER SSA", direction="l", linebreak="sa", unicodeslot=0x1051, }, [0x1052]={ category="lo", description="MYANMAR LETTER VOCALIC R", direction="l", linebreak="sa", unicodeslot=0x1052, }, [0x1053]={ category="lo", description="MYANMAR LETTER VOCALIC RR", direction="l", linebreak="sa", unicodeslot=0x1053, }, [0x1054]={ category="lo", description="MYANMAR LETTER VOCALIC L", direction="l", linebreak="sa", unicodeslot=0x1054, }, [0x1055]={ category="lo", description="MYANMAR LETTER VOCALIC LL", direction="l", linebreak="sa", unicodeslot=0x1055, }, [0x1056]={ category="mc", description="MYANMAR VOWEL SIGN VOCALIC R", direction="l", linebreak="sa", unicodeslot=0x1056, }, [0x1057]={ category="mc", description="MYANMAR VOWEL SIGN VOCALIC RR", direction="l", linebreak="sa", unicodeslot=0x1057, }, [0x1058]={ category="mn", description="MYANMAR VOWEL SIGN VOCALIC L", direction="nsm", linebreak="sa", unicodeslot=0x1058, }, [0x1059]={ category="mn", description="MYANMAR VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="sa", unicodeslot=0x1059, }, [0x105A]={ category="lo", description="MYANMAR LETTER MON NGA", direction="l", linebreak="sa", unicodeslot=0x105A, }, [0x105B]={ category="lo", description="MYANMAR LETTER MON JHA", direction="l", linebreak="sa", unicodeslot=0x105B, }, [0x105C]={ category="lo", description="MYANMAR LETTER MON BBA", direction="l", linebreak="sa", unicodeslot=0x105C, }, [0x105D]={ category="lo", description="MYANMAR LETTER MON BBE", direction="l", linebreak="sa", unicodeslot=0x105D, }, [0x105E]={ category="mn", description="MYANMAR CONSONANT SIGN MON MEDIAL NA", direction="nsm", linebreak="sa", unicodeslot=0x105E, }, [0x105F]={ category="mn", description="MYANMAR CONSONANT SIGN MON MEDIAL MA", direction="nsm", linebreak="sa", unicodeslot=0x105F, }, [0x1060]={ category="mn", description="MYANMAR CONSONANT SIGN MON MEDIAL LA", direction="nsm", linebreak="sa", unicodeslot=0x1060, }, [0x1061]={ category="lo", description="MYANMAR LETTER SGAW KAREN SHA", direction="l", linebreak="sa", unicodeslot=0x1061, }, [0x1062]={ category="mc", description="MYANMAR VOWEL SIGN SGAW KAREN EU", direction="l", linebreak="sa", unicodeslot=0x1062, }, [0x1063]={ category="mc", description="MYANMAR TONE MARK SGAW KAREN HATHI", direction="l", linebreak="sa", unicodeslot=0x1063, }, [0x1064]={ category="mc", description="MYANMAR TONE MARK SGAW KAREN KE PHO", direction="l", linebreak="sa", unicodeslot=0x1064, }, [0x1065]={ category="lo", description="MYANMAR LETTER WESTERN PWO KAREN THA", direction="l", linebreak="sa", unicodeslot=0x1065, }, [0x1066]={ category="lo", description="MYANMAR LETTER WESTERN PWO KAREN PWA", direction="l", linebreak="sa", unicodeslot=0x1066, }, [0x1067]={ category="mc", description="MYANMAR VOWEL SIGN WESTERN PWO KAREN EU", direction="l", linebreak="sa", unicodeslot=0x1067, }, [0x1068]={ category="mc", description="MYANMAR VOWEL SIGN WESTERN PWO KAREN UE", direction="l", linebreak="sa", unicodeslot=0x1068, }, [0x1069]={ category="mc", description="MYANMAR SIGN WESTERN PWO KAREN TONE-1", direction="l", linebreak="sa", unicodeslot=0x1069, }, [0x106A]={ category="mc", description="MYANMAR SIGN WESTERN PWO KAREN TONE-2", direction="l", linebreak="sa", unicodeslot=0x106A, }, [0x106B]={ category="mc", description="MYANMAR SIGN WESTERN PWO KAREN TONE-3", direction="l", linebreak="sa", unicodeslot=0x106B, }, [0x106C]={ category="mc", description="MYANMAR SIGN WESTERN PWO KAREN TONE-4", direction="l", linebreak="sa", unicodeslot=0x106C, }, [0x106D]={ category="mc", description="MYANMAR SIGN WESTERN PWO KAREN TONE-5", direction="l", linebreak="sa", unicodeslot=0x106D, }, [0x106E]={ category="lo", description="MYANMAR LETTER EASTERN PWO KAREN NNA", direction="l", linebreak="sa", unicodeslot=0x106E, }, [0x106F]={ category="lo", description="MYANMAR LETTER EASTERN PWO KAREN YWA", direction="l", linebreak="sa", unicodeslot=0x106F, }, [0x1070]={ category="lo", description="MYANMAR LETTER EASTERN PWO KAREN GHWA", direction="l", linebreak="sa", unicodeslot=0x1070, }, [0x1071]={ category="mn", description="MYANMAR VOWEL SIGN GEBA KAREN I", direction="nsm", linebreak="sa", unicodeslot=0x1071, }, [0x1072]={ category="mn", description="MYANMAR VOWEL SIGN KAYAH OE", direction="nsm", linebreak="sa", unicodeslot=0x1072, }, [0x1073]={ category="mn", description="MYANMAR VOWEL SIGN KAYAH U", direction="nsm", linebreak="sa", unicodeslot=0x1073, }, [0x1074]={ category="mn", description="MYANMAR VOWEL SIGN KAYAH EE", direction="nsm", linebreak="sa", unicodeslot=0x1074, }, [0x1075]={ category="lo", description="MYANMAR LETTER SHAN KA", direction="l", linebreak="sa", unicodeslot=0x1075, }, [0x1076]={ category="lo", description="MYANMAR LETTER SHAN KHA", direction="l", linebreak="sa", unicodeslot=0x1076, }, [0x1077]={ category="lo", description="MYANMAR LETTER SHAN GA", direction="l", linebreak="sa", unicodeslot=0x1077, }, [0x1078]={ category="lo", description="MYANMAR LETTER SHAN CA", direction="l", linebreak="sa", unicodeslot=0x1078, }, [0x1079]={ category="lo", description="MYANMAR LETTER SHAN ZA", direction="l", linebreak="sa", unicodeslot=0x1079, }, [0x107A]={ category="lo", description="MYANMAR LETTER SHAN NYA", direction="l", linebreak="sa", unicodeslot=0x107A, }, [0x107B]={ category="lo", description="MYANMAR LETTER SHAN DA", direction="l", linebreak="sa", unicodeslot=0x107B, }, [0x107C]={ category="lo", description="MYANMAR LETTER SHAN NA", direction="l", linebreak="sa", unicodeslot=0x107C, }, [0x107D]={ category="lo", description="MYANMAR LETTER SHAN PHA", direction="l", linebreak="sa", unicodeslot=0x107D, }, [0x107E]={ category="lo", description="MYANMAR LETTER SHAN FA", direction="l", linebreak="sa", unicodeslot=0x107E, }, [0x107F]={ category="lo", description="MYANMAR LETTER SHAN BA", direction="l", linebreak="sa", unicodeslot=0x107F, }, [0x1080]={ category="lo", description="MYANMAR LETTER SHAN THA", direction="l", linebreak="sa", unicodeslot=0x1080, }, [0x1081]={ category="lo", description="MYANMAR LETTER SHAN HA", direction="l", linebreak="sa", unicodeslot=0x1081, }, [0x1082]={ category="mn", description="MYANMAR CONSONANT SIGN SHAN MEDIAL WA", direction="nsm", linebreak="sa", unicodeslot=0x1082, }, [0x1083]={ category="mc", description="MYANMAR VOWEL SIGN SHAN AA", direction="l", linebreak="sa", unicodeslot=0x1083, }, [0x1084]={ category="mc", description="MYANMAR VOWEL SIGN SHAN E", direction="l", linebreak="sa", unicodeslot=0x1084, }, [0x1085]={ category="mn", description="MYANMAR VOWEL SIGN SHAN E ABOVE", direction="nsm", linebreak="sa", unicodeslot=0x1085, }, [0x1086]={ category="mn", description="MYANMAR VOWEL SIGN SHAN FINAL Y", direction="nsm", linebreak="sa", unicodeslot=0x1086, }, [0x1087]={ category="mc", description="MYANMAR SIGN SHAN TONE-2", direction="l", linebreak="sa", unicodeslot=0x1087, }, [0x1088]={ category="mc", description="MYANMAR SIGN SHAN TONE-3", direction="l", linebreak="sa", unicodeslot=0x1088, }, [0x1089]={ category="mc", description="MYANMAR SIGN SHAN TONE-5", direction="l", linebreak="sa", unicodeslot=0x1089, }, [0x108A]={ category="mc", description="MYANMAR SIGN SHAN TONE-6", direction="l", linebreak="sa", unicodeslot=0x108A, }, [0x108B]={ category="mc", description="MYANMAR SIGN SHAN COUNCIL TONE-2", direction="l", linebreak="sa", unicodeslot=0x108B, }, [0x108C]={ category="mc", description="MYANMAR SIGN SHAN COUNCIL TONE-3", direction="l", linebreak="sa", unicodeslot=0x108C, }, [0x108D]={ category="mn", description="MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE", direction="nsm", linebreak="sa", unicodeslot=0x108D, }, [0x108E]={ category="lo", description="MYANMAR LETTER RUMAI PALAUNG FA", direction="l", linebreak="sa", unicodeslot=0x108E, }, [0x108F]={ category="mc", description="MYANMAR SIGN RUMAI PALAUNG TONE-5", direction="l", linebreak="sa", unicodeslot=0x108F, }, [0x1090]={ category="nd", description="MYANMAR SHAN DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1090, }, [0x1091]={ category="nd", description="MYANMAR SHAN DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1091, }, [0x1092]={ category="nd", description="MYANMAR SHAN DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1092, }, [0x1093]={ category="nd", description="MYANMAR SHAN DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1093, }, [0x1094]={ category="nd", description="MYANMAR SHAN DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1094, }, [0x1095]={ category="nd", description="MYANMAR SHAN DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1095, }, [0x1096]={ category="nd", description="MYANMAR SHAN DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1096, }, [0x1097]={ category="nd", description="MYANMAR SHAN DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1097, }, [0x1098]={ category="nd", description="MYANMAR SHAN DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1098, }, [0x1099]={ category="nd", description="MYANMAR SHAN DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1099, }, [0x109A]={ category="mc", description="MYANMAR SIGN KHAMTI TONE-1", direction="l", linebreak="sa", unicodeslot=0x109A, }, [0x109B]={ category="mc", description="MYANMAR SIGN KHAMTI TONE-3", direction="l", linebreak="sa", unicodeslot=0x109B, }, [0x109C]={ category="mc", description="MYANMAR VOWEL SIGN AITON A", direction="l", linebreak="sa", unicodeslot=0x109C, }, [0x109D]={ category="mn", description="MYANMAR VOWEL SIGN AITON AI", direction="nsm", linebreak="sa", unicodeslot=0x109D, }, [0x109E]={ category="so", description="MYANMAR SYMBOL SHAN ONE", direction="l", linebreak="sa", unicodeslot=0x109E, }, [0x109F]={ category="so", description="MYANMAR SYMBOL SHAN EXCLAMATION", direction="l", linebreak="sa", unicodeslot=0x109F, }, [0x10A0]={ category="lu", description="GEORGIAN CAPITAL LETTER AN", direction="l", lccode=0x2D00, linebreak="al", unicodeslot=0x10A0, }, [0x10A1]={ category="lu", description="GEORGIAN CAPITAL LETTER BAN", direction="l", lccode=0x2D01, linebreak="al", unicodeslot=0x10A1, }, [0x10A2]={ category="lu", description="GEORGIAN CAPITAL LETTER GAN", direction="l", lccode=0x2D02, linebreak="al", unicodeslot=0x10A2, }, [0x10A3]={ category="lu", description="GEORGIAN CAPITAL LETTER DON", direction="l", lccode=0x2D03, linebreak="al", unicodeslot=0x10A3, }, [0x10A4]={ category="lu", description="GEORGIAN CAPITAL LETTER EN", direction="l", lccode=0x2D04, linebreak="al", unicodeslot=0x10A4, }, [0x10A5]={ category="lu", description="GEORGIAN CAPITAL LETTER VIN", direction="l", lccode=0x2D05, linebreak="al", unicodeslot=0x10A5, }, [0x10A6]={ category="lu", description="GEORGIAN CAPITAL LETTER ZEN", direction="l", lccode=0x2D06, linebreak="al", unicodeslot=0x10A6, }, [0x10A7]={ category="lu", description="GEORGIAN CAPITAL LETTER TAN", direction="l", lccode=0x2D07, linebreak="al", unicodeslot=0x10A7, }, [0x10A8]={ category="lu", description="GEORGIAN CAPITAL LETTER IN", direction="l", lccode=0x2D08, linebreak="al", unicodeslot=0x10A8, }, [0x10A9]={ category="lu", description="GEORGIAN CAPITAL LETTER KAN", direction="l", lccode=0x2D09, linebreak="al", unicodeslot=0x10A9, }, [0x10AA]={ category="lu", description="GEORGIAN CAPITAL LETTER LAS", direction="l", lccode=0x2D0A, linebreak="al", unicodeslot=0x10AA, }, [0x10AB]={ category="lu", description="GEORGIAN CAPITAL LETTER MAN", direction="l", lccode=0x2D0B, linebreak="al", unicodeslot=0x10AB, }, [0x10AC]={ category="lu", description="GEORGIAN CAPITAL LETTER NAR", direction="l", lccode=0x2D0C, linebreak="al", unicodeslot=0x10AC, }, [0x10AD]={ category="lu", description="GEORGIAN CAPITAL LETTER ON", direction="l", lccode=0x2D0D, linebreak="al", unicodeslot=0x10AD, }, [0x10AE]={ category="lu", description="GEORGIAN CAPITAL LETTER PAR", direction="l", lccode=0x2D0E, linebreak="al", unicodeslot=0x10AE, }, [0x10AF]={ category="lu", description="GEORGIAN CAPITAL LETTER ZHAR", direction="l", lccode=0x2D0F, linebreak="al", unicodeslot=0x10AF, }, [0x10B0]={ category="lu", description="GEORGIAN CAPITAL LETTER RAE", direction="l", lccode=0x2D10, linebreak="al", unicodeslot=0x10B0, }, [0x10B1]={ category="lu", description="GEORGIAN CAPITAL LETTER SAN", direction="l", lccode=0x2D11, linebreak="al", unicodeslot=0x10B1, }, [0x10B2]={ category="lu", description="GEORGIAN CAPITAL LETTER TAR", direction="l", lccode=0x2D12, linebreak="al", unicodeslot=0x10B2, }, [0x10B3]={ category="lu", description="GEORGIAN CAPITAL LETTER UN", direction="l", lccode=0x2D13, linebreak="al", unicodeslot=0x10B3, }, [0x10B4]={ category="lu", description="GEORGIAN CAPITAL LETTER PHAR", direction="l", lccode=0x2D14, linebreak="al", unicodeslot=0x10B4, }, [0x10B5]={ category="lu", description="GEORGIAN CAPITAL LETTER KHAR", direction="l", lccode=0x2D15, linebreak="al", unicodeslot=0x10B5, }, [0x10B6]={ category="lu", description="GEORGIAN CAPITAL LETTER GHAN", direction="l", lccode=0x2D16, linebreak="al", unicodeslot=0x10B6, }, [0x10B7]={ category="lu", description="GEORGIAN CAPITAL LETTER QAR", direction="l", lccode=0x2D17, linebreak="al", unicodeslot=0x10B7, }, [0x10B8]={ category="lu", description="GEORGIAN CAPITAL LETTER SHIN", direction="l", lccode=0x2D18, linebreak="al", unicodeslot=0x10B8, }, [0x10B9]={ category="lu", description="GEORGIAN CAPITAL LETTER CHIN", direction="l", lccode=0x2D19, linebreak="al", unicodeslot=0x10B9, }, [0x10BA]={ category="lu", description="GEORGIAN CAPITAL LETTER CAN", direction="l", lccode=0x2D1A, linebreak="al", unicodeslot=0x10BA, }, [0x10BB]={ category="lu", description="GEORGIAN CAPITAL LETTER JIL", direction="l", lccode=0x2D1B, linebreak="al", unicodeslot=0x10BB, }, [0x10BC]={ category="lu", description="GEORGIAN CAPITAL LETTER CIL", direction="l", lccode=0x2D1C, linebreak="al", unicodeslot=0x10BC, }, [0x10BD]={ category="lu", description="GEORGIAN CAPITAL LETTER CHAR", direction="l", lccode=0x2D1D, linebreak="al", unicodeslot=0x10BD, }, [0x10BE]={ category="lu", description="GEORGIAN CAPITAL LETTER XAN", direction="l", lccode=0x2D1E, linebreak="al", unicodeslot=0x10BE, }, [0x10BF]={ category="lu", description="GEORGIAN CAPITAL LETTER JHAN", direction="l", lccode=0x2D1F, linebreak="al", unicodeslot=0x10BF, }, [0x10C0]={ category="lu", description="GEORGIAN CAPITAL LETTER HAE", direction="l", lccode=0x2D20, linebreak="al", unicodeslot=0x10C0, }, [0x10C1]={ category="lu", description="GEORGIAN CAPITAL LETTER HE", direction="l", lccode=0x2D21, linebreak="al", unicodeslot=0x10C1, }, [0x10C2]={ category="lu", description="GEORGIAN CAPITAL LETTER HIE", direction="l", lccode=0x2D22, linebreak="al", unicodeslot=0x10C2, }, [0x10C3]={ category="lu", description="GEORGIAN CAPITAL LETTER WE", direction="l", lccode=0x2D23, linebreak="al", unicodeslot=0x10C3, }, [0x10C4]={ category="lu", description="GEORGIAN CAPITAL LETTER HAR", direction="l", lccode=0x2D24, linebreak="al", unicodeslot=0x10C4, }, [0x10C5]={ category="lu", description="GEORGIAN CAPITAL LETTER HOE", direction="l", lccode=0x2D25, linebreak="al", unicodeslot=0x10C5, }, [0x10C7]={ category="lu", description="GEORGIAN CAPITAL LETTER YN", direction="l", linebreak="al", unicodeslot=0x10C7, }, [0x10CD]={ category="lu", description="GEORGIAN CAPITAL LETTER AEN", direction="l", linebreak="al", unicodeslot=0x10CD, }, [0x10D0]={ category="lo", description="GEORGIAN LETTER AN", direction="l", linebreak="al", unicodeslot=0x10D0, }, [0x10D1]={ category="lo", description="GEORGIAN LETTER BAN", direction="l", linebreak="al", unicodeslot=0x10D1, }, [0x10D2]={ category="lo", description="GEORGIAN LETTER GAN", direction="l", linebreak="al", unicodeslot=0x10D2, }, [0x10D3]={ category="lo", description="GEORGIAN LETTER DON", direction="l", linebreak="al", unicodeslot=0x10D3, }, [0x10D4]={ category="lo", description="GEORGIAN LETTER EN", direction="l", linebreak="al", unicodeslot=0x10D4, }, [0x10D5]={ category="lo", description="GEORGIAN LETTER VIN", direction="l", linebreak="al", unicodeslot=0x10D5, }, [0x10D6]={ category="lo", description="GEORGIAN LETTER ZEN", direction="l", linebreak="al", unicodeslot=0x10D6, }, [0x10D7]={ category="lo", description="GEORGIAN LETTER TAN", direction="l", linebreak="al", unicodeslot=0x10D7, }, [0x10D8]={ category="lo", description="GEORGIAN LETTER IN", direction="l", linebreak="al", unicodeslot=0x10D8, }, [0x10D9]={ category="lo", description="GEORGIAN LETTER KAN", direction="l", linebreak="al", unicodeslot=0x10D9, }, [0x10DA]={ category="lo", description="GEORGIAN LETTER LAS", direction="l", linebreak="al", unicodeslot=0x10DA, }, [0x10DB]={ category="lo", description="GEORGIAN LETTER MAN", direction="l", linebreak="al", unicodeslot=0x10DB, }, [0x10DC]={ category="lo", description="GEORGIAN LETTER NAR", direction="l", linebreak="al", unicodeslot=0x10DC, }, [0x10DD]={ category="lo", description="GEORGIAN LETTER ON", direction="l", linebreak="al", unicodeslot=0x10DD, }, [0x10DE]={ category="lo", description="GEORGIAN LETTER PAR", direction="l", linebreak="al", unicodeslot=0x10DE, }, [0x10DF]={ category="lo", description="GEORGIAN LETTER ZHAR", direction="l", linebreak="al", unicodeslot=0x10DF, }, [0x10E0]={ category="lo", description="GEORGIAN LETTER RAE", direction="l", linebreak="al", unicodeslot=0x10E0, }, [0x10E1]={ category="lo", description="GEORGIAN LETTER SAN", direction="l", linebreak="al", unicodeslot=0x10E1, }, [0x10E2]={ category="lo", description="GEORGIAN LETTER TAR", direction="l", linebreak="al", unicodeslot=0x10E2, }, [0x10E3]={ category="lo", description="GEORGIAN LETTER UN", direction="l", linebreak="al", unicodeslot=0x10E3, }, [0x10E4]={ category="lo", description="GEORGIAN LETTER PHAR", direction="l", linebreak="al", unicodeslot=0x10E4, }, [0x10E5]={ category="lo", description="GEORGIAN LETTER KHAR", direction="l", linebreak="al", unicodeslot=0x10E5, }, [0x10E6]={ category="lo", description="GEORGIAN LETTER GHAN", direction="l", linebreak="al", unicodeslot=0x10E6, }, [0x10E7]={ category="lo", description="GEORGIAN LETTER QAR", direction="l", linebreak="al", unicodeslot=0x10E7, }, [0x10E8]={ category="lo", description="GEORGIAN LETTER SHIN", direction="l", linebreak="al", unicodeslot=0x10E8, }, [0x10E9]={ category="lo", description="GEORGIAN LETTER CHIN", direction="l", linebreak="al", unicodeslot=0x10E9, }, [0x10EA]={ category="lo", description="GEORGIAN LETTER CAN", direction="l", linebreak="al", unicodeslot=0x10EA, }, [0x10EB]={ category="lo", description="GEORGIAN LETTER JIL", direction="l", linebreak="al", unicodeslot=0x10EB, }, [0x10EC]={ category="lo", description="GEORGIAN LETTER CIL", direction="l", linebreak="al", unicodeslot=0x10EC, }, [0x10ED]={ category="lo", description="GEORGIAN LETTER CHAR", direction="l", linebreak="al", unicodeslot=0x10ED, }, [0x10EE]={ category="lo", description="GEORGIAN LETTER XAN", direction="l", linebreak="al", unicodeslot=0x10EE, }, [0x10EF]={ category="lo", description="GEORGIAN LETTER JHAN", direction="l", linebreak="al", unicodeslot=0x10EF, }, [0x10F0]={ category="lo", description="GEORGIAN LETTER HAE", direction="l", linebreak="al", unicodeslot=0x10F0, }, [0x10F1]={ category="lo", description="GEORGIAN LETTER HE", direction="l", linebreak="al", unicodeslot=0x10F1, }, [0x10F2]={ category="lo", description="GEORGIAN LETTER HIE", direction="l", linebreak="al", unicodeslot=0x10F2, }, [0x10F3]={ category="lo", description="GEORGIAN LETTER WE", direction="l", linebreak="al", unicodeslot=0x10F3, }, [0x10F4]={ category="lo", description="GEORGIAN LETTER HAR", direction="l", linebreak="al", unicodeslot=0x10F4, }, [0x10F5]={ category="lo", description="GEORGIAN LETTER HOE", direction="l", linebreak="al", unicodeslot=0x10F5, }, [0x10F6]={ category="lo", description="GEORGIAN LETTER FI", direction="l", linebreak="al", unicodeslot=0x10F6, }, [0x10F7]={ category="lo", description="GEORGIAN LETTER YN", direction="l", linebreak="al", unicodeslot=0x10F7, }, [0x10F8]={ category="lo", description="GEORGIAN LETTER ELIFI", direction="l", linebreak="al", unicodeslot=0x10F8, }, [0x10F9]={ category="lo", description="GEORGIAN LETTER TURNED GAN", direction="l", linebreak="al", unicodeslot=0x10F9, }, [0x10FA]={ category="lo", description="GEORGIAN LETTER AIN", direction="l", linebreak="al", unicodeslot=0x10FA, }, [0x10FB]={ category="po", description="GEORGIAN PARAGRAPH SEPARATOR", direction="l", linebreak="al", unicodeslot=0x10FB, }, [0x10FC]={ category="lm", description="MODIFIER LETTER GEORGIAN NAR", direction="l", linebreak="al", specials={ "super", 0x10DC }, unicodeslot=0x10FC, }, [0x10FD]={ category="lo", description="GEORGIAN LETTER AEN", direction="l", linebreak="al", unicodeslot=0x10FD, }, [0x10FE]={ category="lo", description="GEORGIAN LETTER HARD SIGN", direction="l", linebreak="al", unicodeslot=0x10FE, }, [0x10FF]={ category="lo", description="GEORGIAN LETTER LABIAL SIGN", direction="l", linebreak="al", unicodeslot=0x10FF, }, [0x1100]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KIYEOK", direction="l", linebreak="jl", unicodeslot=0x1100, }, [0x1101]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGKIYEOK", direction="l", linebreak="jl", unicodeslot=0x1101, }, [0x1102]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN", direction="l", linebreak="jl", unicodeslot=0x1102, }, [0x1103]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT", direction="l", linebreak="jl", unicodeslot=0x1103, }, [0x1104]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGTIKEUT", direction="l", linebreak="jl", unicodeslot=0x1104, }, [0x1105]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL", direction="l", linebreak="jl", unicodeslot=0x1105, }, [0x1106]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG MIEUM", direction="l", linebreak="jl", unicodeslot=0x1106, }, [0x1107]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP", direction="l", linebreak="jl", unicodeslot=0x1107, }, [0x1108]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGPIEUP", direction="l", linebreak="jl", unicodeslot=0x1108, }, [0x1109]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS", direction="l", linebreak="jl", unicodeslot=0x1109, }, [0x110A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGSIOS", direction="l", linebreak="jl", unicodeslot=0x110A, }, [0x110B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG", direction="l", linebreak="jl", unicodeslot=0x110B, }, [0x110C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CIEUC", direction="l", linebreak="jl", unicodeslot=0x110C, }, [0x110D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGCIEUC", direction="l", linebreak="jl", unicodeslot=0x110D, }, [0x110E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHIEUCH", direction="l", linebreak="jl", unicodeslot=0x110E, }, [0x110F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KHIEUKH", direction="l", linebreak="jl", unicodeslot=0x110F, }, [0x1110]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG THIEUTH", direction="l", linebreak="jl", unicodeslot=0x1110, }, [0x1111]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PHIEUPH", direction="l", linebreak="jl", unicodeslot=0x1111, }, [0x1112]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG HIEUH", direction="l", linebreak="jl", unicodeslot=0x1112, }, [0x1113]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x1113, }, [0x1114]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGNIEUN", direction="l", linebreak="jl", unicodeslot=0x1114, }, [0x1115]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN-TIKEUT", direction="l", linebreak="jl", unicodeslot=0x1115, }, [0x1116]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN-PIEUP", direction="l", linebreak="jl", unicodeslot=0x1116, }, [0x1117]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x1117, }, [0x1118]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-NIEUN", direction="l", linebreak="jl", unicodeslot=0x1118, }, [0x1119]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGRIEUL", direction="l", linebreak="jl", unicodeslot=0x1119, }, [0x111A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-HIEUH", direction="l", linebreak="jl", unicodeslot=0x111A, }, [0x111B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KAPYEOUNRIEUL", direction="l", linebreak="jl", unicodeslot=0x111B, }, [0x111C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG MIEUM-PIEUP", direction="l", linebreak="jl", unicodeslot=0x111C, }, [0x111D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KAPYEOUNMIEUM", direction="l", linebreak="jl", unicodeslot=0x111D, }, [0x111E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x111E, }, [0x111F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-NIEUN", direction="l", linebreak="jl", unicodeslot=0x111F, }, [0x1120]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-TIKEUT", direction="l", linebreak="jl", unicodeslot=0x1120, }, [0x1121]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SIOS", direction="l", linebreak="jl", unicodeslot=0x1121, }, [0x1122]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SIOS-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x1122, }, [0x1123]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SIOS-TIKEUT", direction="l", linebreak="jl", unicodeslot=0x1123, }, [0x1124]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SIOS-PIEUP", direction="l", linebreak="jl", unicodeslot=0x1124, }, [0x1125]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SSANGSIOS", direction="l", linebreak="jl", unicodeslot=0x1125, }, [0x1126]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SIOS-CIEUC", direction="l", linebreak="jl", unicodeslot=0x1126, }, [0x1127]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-CIEUC", direction="l", linebreak="jl", unicodeslot=0x1127, }, [0x1128]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-CHIEUCH", direction="l", linebreak="jl", unicodeslot=0x1128, }, [0x1129]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-THIEUTH", direction="l", linebreak="jl", unicodeslot=0x1129, }, [0x112A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-PHIEUPH", direction="l", linebreak="jl", unicodeslot=0x112A, }, [0x112B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KAPYEOUNPIEUP", direction="l", linebreak="jl", unicodeslot=0x112B, }, [0x112C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KAPYEOUNSSANGPIEUP", direction="l", linebreak="jl", unicodeslot=0x112C, }, [0x112D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x112D, }, [0x112E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-NIEUN", direction="l", linebreak="jl", unicodeslot=0x112E, }, [0x112F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-TIKEUT", direction="l", linebreak="jl", unicodeslot=0x112F, }, [0x1130]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-RIEUL", direction="l", linebreak="jl", unicodeslot=0x1130, }, [0x1131]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-MIEUM", direction="l", linebreak="jl", unicodeslot=0x1131, }, [0x1132]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-PIEUP", direction="l", linebreak="jl", unicodeslot=0x1132, }, [0x1133]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-PIEUP-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x1133, }, [0x1134]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-SSANGSIOS", direction="l", linebreak="jl", unicodeslot=0x1134, }, [0x1135]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-IEUNG", direction="l", linebreak="jl", unicodeslot=0x1135, }, [0x1136]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-CIEUC", direction="l", linebreak="jl", unicodeslot=0x1136, }, [0x1137]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-CHIEUCH", direction="l", linebreak="jl", unicodeslot=0x1137, }, [0x1138]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-KHIEUKH", direction="l", linebreak="jl", unicodeslot=0x1138, }, [0x1139]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-THIEUTH", direction="l", linebreak="jl", unicodeslot=0x1139, }, [0x113A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-PHIEUPH", direction="l", linebreak="jl", unicodeslot=0x113A, }, [0x113B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SIOS-HIEUH", direction="l", linebreak="jl", unicodeslot=0x113B, }, [0x113C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHITUEUMSIOS", direction="l", linebreak="jl", unicodeslot=0x113C, }, [0x113D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHITUEUMSSANGSIOS", direction="l", linebreak="jl", unicodeslot=0x113D, }, [0x113E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CEONGCHIEUMSIOS", direction="l", linebreak="jl", unicodeslot=0x113E, }, [0x113F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS", direction="l", linebreak="jl", unicodeslot=0x113F, }, [0x1140]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PANSIOS", direction="l", linebreak="jl", unicodeslot=0x1140, }, [0x1141]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-KIYEOK", direction="l", linebreak="jl", unicodeslot=0x1141, }, [0x1142]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-TIKEUT", direction="l", linebreak="jl", unicodeslot=0x1142, }, [0x1143]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-MIEUM", direction="l", linebreak="jl", unicodeslot=0x1143, }, [0x1144]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-PIEUP", direction="l", linebreak="jl", unicodeslot=0x1144, }, [0x1145]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-SIOS", direction="l", linebreak="jl", unicodeslot=0x1145, }, [0x1146]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-PANSIOS", direction="l", linebreak="jl", unicodeslot=0x1146, }, [0x1147]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGIEUNG", direction="l", linebreak="jl", unicodeslot=0x1147, }, [0x1148]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-CIEUC", direction="l", linebreak="jl", unicodeslot=0x1148, }, [0x1149]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-CHIEUCH", direction="l", linebreak="jl", unicodeslot=0x1149, }, [0x114A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-THIEUTH", direction="l", linebreak="jl", unicodeslot=0x114A, }, [0x114B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-PHIEUPH", direction="l", linebreak="jl", unicodeslot=0x114B, }, [0x114C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG YESIEUNG", direction="l", linebreak="jl", unicodeslot=0x114C, }, [0x114D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CIEUC-IEUNG", direction="l", linebreak="jl", unicodeslot=0x114D, }, [0x114E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHITUEUMCIEUC", direction="l", linebreak="jl", unicodeslot=0x114E, }, [0x114F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHITUEUMSSANGCIEUC", direction="l", linebreak="jl", unicodeslot=0x114F, }, [0x1150]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CEONGCHIEUMCIEUC", direction="l", linebreak="jl", unicodeslot=0x1150, }, [0x1151]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC", direction="l", linebreak="jl", unicodeslot=0x1151, }, [0x1152]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHIEUCH-KHIEUKH", direction="l", linebreak="jl", unicodeslot=0x1152, }, [0x1153]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHIEUCH-HIEUH", direction="l", linebreak="jl", unicodeslot=0x1153, }, [0x1154]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CHITUEUMCHIEUCH", direction="l", linebreak="jl", unicodeslot=0x1154, }, [0x1155]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG CEONGCHIEUMCHIEUCH", direction="l", linebreak="jl", unicodeslot=0x1155, }, [0x1156]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PHIEUPH-PIEUP", direction="l", linebreak="jl", unicodeslot=0x1156, }, [0x1157]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KAPYEOUNPHIEUPH", direction="l", linebreak="jl", unicodeslot=0x1157, }, [0x1158]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGHIEUH", direction="l", linebreak="jl", unicodeslot=0x1158, }, [0x1159]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG YEORINHIEUH", direction="l", linebreak="jl", unicodeslot=0x1159, }, [0x115A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG KIYEOK-TIKEUT", direction="l", linebreak="jl", unicodeslot=0x115A, }, [0x115B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN-SIOS", direction="l", linebreak="jl", unicodeslot=0x115B, }, [0x115C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN-CIEUC", direction="l", linebreak="jl", unicodeslot=0x115C, }, [0x115D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG NIEUN-HIEUH", direction="l", linebreak="jl", unicodeslot=0x115D, }, [0x115E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT-RIEUL", direction="l", linebreak="jl", unicodeslot=0x115E, }, [0x115F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG FILLER", direction="l", linebreak="jl", unicodeslot=0x115F, }, [0x1160]={ category="lo", description="HANGUL JUNGSEONG FILLER", direction="l", linebreak="jv", unicodeslot=0x1160, }, [0x1161]={ category="lo", description="HANGUL JUNGSEONG A", direction="l", linebreak="jv", unicodeslot=0x1161, }, [0x1162]={ category="lo", description="HANGUL JUNGSEONG AE", direction="l", linebreak="jv", unicodeslot=0x1162, }, [0x1163]={ category="lo", description="HANGUL JUNGSEONG YA", direction="l", linebreak="jv", unicodeslot=0x1163, }, [0x1164]={ category="lo", description="HANGUL JUNGSEONG YAE", direction="l", linebreak="jv", unicodeslot=0x1164, }, [0x1165]={ category="lo", description="HANGUL JUNGSEONG EO", direction="l", linebreak="jv", unicodeslot=0x1165, }, [0x1166]={ category="lo", description="HANGUL JUNGSEONG E", direction="l", linebreak="jv", unicodeslot=0x1166, }, [0x1167]={ category="lo", description="HANGUL JUNGSEONG YEO", direction="l", linebreak="jv", unicodeslot=0x1167, }, [0x1168]={ category="lo", description="HANGUL JUNGSEONG YE", direction="l", linebreak="jv", unicodeslot=0x1168, }, [0x1169]={ category="lo", description="HANGUL JUNGSEONG O", direction="l", linebreak="jv", unicodeslot=0x1169, }, [0x116A]={ category="lo", description="HANGUL JUNGSEONG WA", direction="l", linebreak="jv", unicodeslot=0x116A, }, [0x116B]={ category="lo", description="HANGUL JUNGSEONG WAE", direction="l", linebreak="jv", unicodeslot=0x116B, }, [0x116C]={ category="lo", description="HANGUL JUNGSEONG OE", direction="l", linebreak="jv", unicodeslot=0x116C, }, [0x116D]={ category="lo", description="HANGUL JUNGSEONG YO", direction="l", linebreak="jv", unicodeslot=0x116D, }, [0x116E]={ category="lo", description="HANGUL JUNGSEONG U", direction="l", linebreak="jv", unicodeslot=0x116E, }, [0x116F]={ category="lo", description="HANGUL JUNGSEONG WEO", direction="l", linebreak="jv", unicodeslot=0x116F, }, [0x1170]={ category="lo", description="HANGUL JUNGSEONG WE", direction="l", linebreak="jv", unicodeslot=0x1170, }, [0x1171]={ category="lo", description="HANGUL JUNGSEONG WI", direction="l", linebreak="jv", unicodeslot=0x1171, }, [0x1172]={ category="lo", description="HANGUL JUNGSEONG YU", direction="l", linebreak="jv", unicodeslot=0x1172, }, [0x1173]={ category="lo", description="HANGUL JUNGSEONG EU", direction="l", linebreak="jv", unicodeslot=0x1173, }, [0x1174]={ category="lo", description="HANGUL JUNGSEONG YI", direction="l", linebreak="jv", unicodeslot=0x1174, }, [0x1175]={ category="lo", description="HANGUL JUNGSEONG I", direction="l", linebreak="jv", unicodeslot=0x1175, }, [0x1176]={ category="lo", description="HANGUL JUNGSEONG A-O", direction="l", linebreak="jv", unicodeslot=0x1176, }, [0x1177]={ category="lo", description="HANGUL JUNGSEONG A-U", direction="l", linebreak="jv", unicodeslot=0x1177, }, [0x1178]={ category="lo", description="HANGUL JUNGSEONG YA-O", direction="l", linebreak="jv", unicodeslot=0x1178, }, [0x1179]={ category="lo", description="HANGUL JUNGSEONG YA-YO", direction="l", linebreak="jv", unicodeslot=0x1179, }, [0x117A]={ category="lo", description="HANGUL JUNGSEONG EO-O", direction="l", linebreak="jv", unicodeslot=0x117A, }, [0x117B]={ category="lo", description="HANGUL JUNGSEONG EO-U", direction="l", linebreak="jv", unicodeslot=0x117B, }, [0x117C]={ category="lo", description="HANGUL JUNGSEONG EO-EU", direction="l", linebreak="jv", unicodeslot=0x117C, }, [0x117D]={ category="lo", description="HANGUL JUNGSEONG YEO-O", direction="l", linebreak="jv", unicodeslot=0x117D, }, [0x117E]={ category="lo", description="HANGUL JUNGSEONG YEO-U", direction="l", linebreak="jv", unicodeslot=0x117E, }, [0x117F]={ category="lo", description="HANGUL JUNGSEONG O-EO", direction="l", linebreak="jv", unicodeslot=0x117F, }, [0x1180]={ category="lo", description="HANGUL JUNGSEONG O-E", direction="l", linebreak="jv", unicodeslot=0x1180, }, [0x1181]={ category="lo", description="HANGUL JUNGSEONG O-YE", direction="l", linebreak="jv", unicodeslot=0x1181, }, [0x1182]={ category="lo", description="HANGUL JUNGSEONG O-O", direction="l", linebreak="jv", unicodeslot=0x1182, }, [0x1183]={ category="lo", description="HANGUL JUNGSEONG O-U", direction="l", linebreak="jv", unicodeslot=0x1183, }, [0x1184]={ category="lo", description="HANGUL JUNGSEONG YO-YA", direction="l", linebreak="jv", unicodeslot=0x1184, }, [0x1185]={ category="lo", description="HANGUL JUNGSEONG YO-YAE", direction="l", linebreak="jv", unicodeslot=0x1185, }, [0x1186]={ category="lo", description="HANGUL JUNGSEONG YO-YEO", direction="l", linebreak="jv", unicodeslot=0x1186, }, [0x1187]={ category="lo", description="HANGUL JUNGSEONG YO-O", direction="l", linebreak="jv", unicodeslot=0x1187, }, [0x1188]={ category="lo", description="HANGUL JUNGSEONG YO-I", direction="l", linebreak="jv", unicodeslot=0x1188, }, [0x1189]={ category="lo", description="HANGUL JUNGSEONG U-A", direction="l", linebreak="jv", unicodeslot=0x1189, }, [0x118A]={ category="lo", description="HANGUL JUNGSEONG U-AE", direction="l", linebreak="jv", unicodeslot=0x118A, }, [0x118B]={ category="lo", description="HANGUL JUNGSEONG U-EO-EU", direction="l", linebreak="jv", unicodeslot=0x118B, }, [0x118C]={ category="lo", description="HANGUL JUNGSEONG U-YE", direction="l", linebreak="jv", unicodeslot=0x118C, }, [0x118D]={ category="lo", description="HANGUL JUNGSEONG U-U", direction="l", linebreak="jv", unicodeslot=0x118D, }, [0x118E]={ category="lo", description="HANGUL JUNGSEONG YU-A", direction="l", linebreak="jv", unicodeslot=0x118E, }, [0x118F]={ category="lo", description="HANGUL JUNGSEONG YU-EO", direction="l", linebreak="jv", unicodeslot=0x118F, }, [0x1190]={ category="lo", description="HANGUL JUNGSEONG YU-E", direction="l", linebreak="jv", unicodeslot=0x1190, }, [0x1191]={ category="lo", description="HANGUL JUNGSEONG YU-YEO", direction="l", linebreak="jv", unicodeslot=0x1191, }, [0x1192]={ category="lo", description="HANGUL JUNGSEONG YU-YE", direction="l", linebreak="jv", unicodeslot=0x1192, }, [0x1193]={ category="lo", description="HANGUL JUNGSEONG YU-U", direction="l", linebreak="jv", unicodeslot=0x1193, }, [0x1194]={ category="lo", description="HANGUL JUNGSEONG YU-I", direction="l", linebreak="jv", unicodeslot=0x1194, }, [0x1195]={ category="lo", description="HANGUL JUNGSEONG EU-U", direction="l", linebreak="jv", unicodeslot=0x1195, }, [0x1196]={ category="lo", description="HANGUL JUNGSEONG EU-EU", direction="l", linebreak="jv", unicodeslot=0x1196, }, [0x1197]={ category="lo", description="HANGUL JUNGSEONG YI-U", direction="l", linebreak="jv", unicodeslot=0x1197, }, [0x1198]={ category="lo", description="HANGUL JUNGSEONG I-A", direction="l", linebreak="jv", unicodeslot=0x1198, }, [0x1199]={ category="lo", description="HANGUL JUNGSEONG I-YA", direction="l", linebreak="jv", unicodeslot=0x1199, }, [0x119A]={ category="lo", description="HANGUL JUNGSEONG I-O", direction="l", linebreak="jv", unicodeslot=0x119A, }, [0x119B]={ category="lo", description="HANGUL JUNGSEONG I-U", direction="l", linebreak="jv", unicodeslot=0x119B, }, [0x119C]={ category="lo", description="HANGUL JUNGSEONG I-EU", direction="l", linebreak="jv", unicodeslot=0x119C, }, [0x119D]={ category="lo", description="HANGUL JUNGSEONG I-ARAEA", direction="l", linebreak="jv", unicodeslot=0x119D, }, [0x119E]={ category="lo", description="HANGUL JUNGSEONG ARAEA", direction="l", linebreak="jv", unicodeslot=0x119E, }, [0x119F]={ category="lo", description="HANGUL JUNGSEONG ARAEA-EO", direction="l", linebreak="jv", unicodeslot=0x119F, }, [0x11A0]={ category="lo", description="HANGUL JUNGSEONG ARAEA-U", direction="l", linebreak="jv", unicodeslot=0x11A0, }, [0x11A1]={ category="lo", description="HANGUL JUNGSEONG ARAEA-I", direction="l", linebreak="jv", unicodeslot=0x11A1, }, [0x11A2]={ category="lo", description="HANGUL JUNGSEONG SSANGARAEA", direction="l", linebreak="jv", unicodeslot=0x11A2, }, [0x11A3]={ category="lo", description="HANGUL JUNGSEONG A-EU", direction="l", linebreak="jv", unicodeslot=0x11A3, }, [0x11A4]={ category="lo", description="HANGUL JUNGSEONG YA-U", direction="l", linebreak="jv", unicodeslot=0x11A4, }, [0x11A5]={ category="lo", description="HANGUL JUNGSEONG YEO-YA", direction="l", linebreak="jv", unicodeslot=0x11A5, }, [0x11A6]={ category="lo", description="HANGUL JUNGSEONG O-YA", direction="l", linebreak="jv", unicodeslot=0x11A6, }, [0x11A7]={ category="lo", description="HANGUL JUNGSEONG O-YAE", direction="l", linebreak="jv", unicodeslot=0x11A7, }, [0x11A8]={ category="lo", description="HANGUL JONGSEONG KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11A8, }, [0x11A9]={ category="lo", description="HANGUL JONGSEONG SSANGKIYEOK", direction="l", linebreak="jt", unicodeslot=0x11A9, }, [0x11AA]={ category="lo", description="HANGUL JONGSEONG KIYEOK-SIOS", direction="l", linebreak="jt", unicodeslot=0x11AA, }, [0x11AB]={ category="lo", description="HANGUL JONGSEONG NIEUN", direction="l", linebreak="jt", unicodeslot=0x11AB, }, [0x11AC]={ category="lo", description="HANGUL JONGSEONG NIEUN-CIEUC", direction="l", linebreak="jt", unicodeslot=0x11AC, }, [0x11AD]={ category="lo", description="HANGUL JONGSEONG NIEUN-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11AD, }, [0x11AE]={ category="lo", description="HANGUL JONGSEONG TIKEUT", direction="l", linebreak="jt", unicodeslot=0x11AE, }, [0x11AF]={ category="lo", description="HANGUL JONGSEONG RIEUL", direction="l", linebreak="jt", unicodeslot=0x11AF, }, [0x11B0]={ category="lo", description="HANGUL JONGSEONG RIEUL-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11B0, }, [0x11B1]={ category="lo", description="HANGUL JONGSEONG RIEUL-MIEUM", direction="l", linebreak="jt", unicodeslot=0x11B1, }, [0x11B2]={ category="lo", description="HANGUL JONGSEONG RIEUL-PIEUP", direction="l", linebreak="jt", unicodeslot=0x11B2, }, [0x11B3]={ category="lo", description="HANGUL JONGSEONG RIEUL-SIOS", direction="l", linebreak="jt", unicodeslot=0x11B3, }, [0x11B4]={ category="lo", description="HANGUL JONGSEONG RIEUL-THIEUTH", direction="l", linebreak="jt", unicodeslot=0x11B4, }, [0x11B5]={ category="lo", description="HANGUL JONGSEONG RIEUL-PHIEUPH", direction="l", linebreak="jt", unicodeslot=0x11B5, }, [0x11B6]={ category="lo", description="HANGUL JONGSEONG RIEUL-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11B6, }, [0x11B7]={ category="lo", description="HANGUL JONGSEONG MIEUM", direction="l", linebreak="jt", unicodeslot=0x11B7, }, [0x11B8]={ category="lo", description="HANGUL JONGSEONG PIEUP", direction="l", linebreak="jt", unicodeslot=0x11B8, }, [0x11B9]={ category="lo", description="HANGUL JONGSEONG PIEUP-SIOS", direction="l", linebreak="jt", unicodeslot=0x11B9, }, [0x11BA]={ category="lo", description="HANGUL JONGSEONG SIOS", direction="l", linebreak="jt", unicodeslot=0x11BA, }, [0x11BB]={ category="lo", description="HANGUL JONGSEONG SSANGSIOS", direction="l", linebreak="jt", unicodeslot=0x11BB, }, [0x11BC]={ category="lo", description="HANGUL JONGSEONG IEUNG", direction="l", linebreak="jt", unicodeslot=0x11BC, }, [0x11BD]={ category="lo", description="HANGUL JONGSEONG CIEUC", direction="l", linebreak="jt", unicodeslot=0x11BD, }, [0x11BE]={ category="lo", description="HANGUL JONGSEONG CHIEUCH", direction="l", linebreak="jt", unicodeslot=0x11BE, }, [0x11BF]={ category="lo", description="HANGUL JONGSEONG KHIEUKH", direction="l", linebreak="jt", unicodeslot=0x11BF, }, [0x11C0]={ category="lo", description="HANGUL JONGSEONG THIEUTH", direction="l", linebreak="jt", unicodeslot=0x11C0, }, [0x11C1]={ category="lo", description="HANGUL JONGSEONG PHIEUPH", direction="l", linebreak="jt", unicodeslot=0x11C1, }, [0x11C2]={ category="lo", description="HANGUL JONGSEONG HIEUH", direction="l", linebreak="jt", unicodeslot=0x11C2, }, [0x11C3]={ category="lo", description="HANGUL JONGSEONG KIYEOK-RIEUL", direction="l", linebreak="jt", unicodeslot=0x11C3, }, [0x11C4]={ category="lo", description="HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11C4, }, [0x11C5]={ category="lo", description="HANGUL JONGSEONG NIEUN-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11C5, }, [0x11C6]={ category="lo", description="HANGUL JONGSEONG NIEUN-TIKEUT", direction="l", linebreak="jt", unicodeslot=0x11C6, }, [0x11C7]={ category="lo", description="HANGUL JONGSEONG NIEUN-SIOS", direction="l", linebreak="jt", unicodeslot=0x11C7, }, [0x11C8]={ category="lo", description="HANGUL JONGSEONG NIEUN-PANSIOS", direction="l", linebreak="jt", unicodeslot=0x11C8, }, [0x11C9]={ category="lo", description="HANGUL JONGSEONG NIEUN-THIEUTH", direction="l", linebreak="jt", unicodeslot=0x11C9, }, [0x11CA]={ category="lo", description="HANGUL JONGSEONG TIKEUT-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11CA, }, [0x11CB]={ category="lo", description="HANGUL JONGSEONG TIKEUT-RIEUL", direction="l", linebreak="jt", unicodeslot=0x11CB, }, [0x11CC]={ category="lo", description="HANGUL JONGSEONG RIEUL-KIYEOK-SIOS", direction="l", linebreak="jt", unicodeslot=0x11CC, }, [0x11CD]={ category="lo", description="HANGUL JONGSEONG RIEUL-NIEUN", direction="l", linebreak="jt", unicodeslot=0x11CD, }, [0x11CE]={ category="lo", description="HANGUL JONGSEONG RIEUL-TIKEUT", direction="l", linebreak="jt", unicodeslot=0x11CE, }, [0x11CF]={ category="lo", description="HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11CF, }, [0x11D0]={ category="lo", description="HANGUL JONGSEONG SSANGRIEUL", direction="l", linebreak="jt", unicodeslot=0x11D0, }, [0x11D1]={ category="lo", description="HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11D1, }, [0x11D2]={ category="lo", description="HANGUL JONGSEONG RIEUL-MIEUM-SIOS", direction="l", linebreak="jt", unicodeslot=0x11D2, }, [0x11D3]={ category="lo", description="HANGUL JONGSEONG RIEUL-PIEUP-SIOS", direction="l", linebreak="jt", unicodeslot=0x11D3, }, [0x11D4]={ category="lo", description="HANGUL JONGSEONG RIEUL-PIEUP-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11D4, }, [0x11D5]={ category="lo", description="HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP", direction="l", linebreak="jt", unicodeslot=0x11D5, }, [0x11D6]={ category="lo", description="HANGUL JONGSEONG RIEUL-SSANGSIOS", direction="l", linebreak="jt", unicodeslot=0x11D6, }, [0x11D7]={ category="lo", description="HANGUL JONGSEONG RIEUL-PANSIOS", direction="l", linebreak="jt", unicodeslot=0x11D7, }, [0x11D8]={ category="lo", description="HANGUL JONGSEONG RIEUL-KHIEUKH", direction="l", linebreak="jt", unicodeslot=0x11D8, }, [0x11D9]={ category="lo", description="HANGUL JONGSEONG RIEUL-YEORINHIEUH", direction="l", linebreak="jt", unicodeslot=0x11D9, }, [0x11DA]={ category="lo", description="HANGUL JONGSEONG MIEUM-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11DA, }, [0x11DB]={ category="lo", description="HANGUL JONGSEONG MIEUM-RIEUL", direction="l", linebreak="jt", unicodeslot=0x11DB, }, [0x11DC]={ category="lo", description="HANGUL JONGSEONG MIEUM-PIEUP", direction="l", linebreak="jt", unicodeslot=0x11DC, }, [0x11DD]={ category="lo", description="HANGUL JONGSEONG MIEUM-SIOS", direction="l", linebreak="jt", unicodeslot=0x11DD, }, [0x11DE]={ category="lo", description="HANGUL JONGSEONG MIEUM-SSANGSIOS", direction="l", linebreak="jt", unicodeslot=0x11DE, }, [0x11DF]={ category="lo", description="HANGUL JONGSEONG MIEUM-PANSIOS", direction="l", linebreak="jt", unicodeslot=0x11DF, }, [0x11E0]={ category="lo", description="HANGUL JONGSEONG MIEUM-CHIEUCH", direction="l", linebreak="jt", unicodeslot=0x11E0, }, [0x11E1]={ category="lo", description="HANGUL JONGSEONG MIEUM-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11E1, }, [0x11E2]={ category="lo", description="HANGUL JONGSEONG KAPYEOUNMIEUM", direction="l", linebreak="jt", unicodeslot=0x11E2, }, [0x11E3]={ category="lo", description="HANGUL JONGSEONG PIEUP-RIEUL", direction="l", linebreak="jt", unicodeslot=0x11E3, }, [0x11E4]={ category="lo", description="HANGUL JONGSEONG PIEUP-PHIEUPH", direction="l", linebreak="jt", unicodeslot=0x11E4, }, [0x11E5]={ category="lo", description="HANGUL JONGSEONG PIEUP-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11E5, }, [0x11E6]={ category="lo", description="HANGUL JONGSEONG KAPYEOUNPIEUP", direction="l", linebreak="jt", unicodeslot=0x11E6, }, [0x11E7]={ category="lo", description="HANGUL JONGSEONG SIOS-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11E7, }, [0x11E8]={ category="lo", description="HANGUL JONGSEONG SIOS-TIKEUT", direction="l", linebreak="jt", unicodeslot=0x11E8, }, [0x11E9]={ category="lo", description="HANGUL JONGSEONG SIOS-RIEUL", direction="l", linebreak="jt", unicodeslot=0x11E9, }, [0x11EA]={ category="lo", description="HANGUL JONGSEONG SIOS-PIEUP", direction="l", linebreak="jt", unicodeslot=0x11EA, }, [0x11EB]={ category="lo", description="HANGUL JONGSEONG PANSIOS", direction="l", linebreak="jt", unicodeslot=0x11EB, }, [0x11EC]={ category="lo", description="HANGUL JONGSEONG IEUNG-KIYEOK", direction="l", linebreak="jt", unicodeslot=0x11EC, }, [0x11ED]={ category="lo", description="HANGUL JONGSEONG IEUNG-SSANGKIYEOK", direction="l", linebreak="jt", unicodeslot=0x11ED, }, [0x11EE]={ category="lo", description="HANGUL JONGSEONG SSANGIEUNG", direction="l", linebreak="jt", unicodeslot=0x11EE, }, [0x11EF]={ category="lo", description="HANGUL JONGSEONG IEUNG-KHIEUKH", direction="l", linebreak="jt", unicodeslot=0x11EF, }, [0x11F0]={ category="lo", description="HANGUL JONGSEONG YESIEUNG", direction="l", linebreak="jt", unicodeslot=0x11F0, }, [0x11F1]={ category="lo", description="HANGUL JONGSEONG YESIEUNG-SIOS", direction="l", linebreak="jt", unicodeslot=0x11F1, }, [0x11F2]={ category="lo", description="HANGUL JONGSEONG YESIEUNG-PANSIOS", direction="l", linebreak="jt", unicodeslot=0x11F2, }, [0x11F3]={ category="lo", description="HANGUL JONGSEONG PHIEUPH-PIEUP", direction="l", linebreak="jt", unicodeslot=0x11F3, }, [0x11F4]={ category="lo", description="HANGUL JONGSEONG KAPYEOUNPHIEUPH", direction="l", linebreak="jt", unicodeslot=0x11F4, }, [0x11F5]={ category="lo", description="HANGUL JONGSEONG HIEUH-NIEUN", direction="l", linebreak="jt", unicodeslot=0x11F5, }, [0x11F6]={ category="lo", description="HANGUL JONGSEONG HIEUH-RIEUL", direction="l", linebreak="jt", unicodeslot=0x11F6, }, [0x11F7]={ category="lo", description="HANGUL JONGSEONG HIEUH-MIEUM", direction="l", linebreak="jt", unicodeslot=0x11F7, }, [0x11F8]={ category="lo", description="HANGUL JONGSEONG HIEUH-PIEUP", direction="l", linebreak="jt", unicodeslot=0x11F8, }, [0x11F9]={ category="lo", description="HANGUL JONGSEONG YEORINHIEUH", direction="l", linebreak="jt", unicodeslot=0x11F9, }, [0x11FA]={ category="lo", description="HANGUL JONGSEONG KIYEOK-NIEUN", direction="l", linebreak="jt", unicodeslot=0x11FA, }, [0x11FB]={ category="lo", description="HANGUL JONGSEONG KIYEOK-PIEUP", direction="l", linebreak="jt", unicodeslot=0x11FB, }, [0x11FC]={ category="lo", description="HANGUL JONGSEONG KIYEOK-CHIEUCH", direction="l", linebreak="jt", unicodeslot=0x11FC, }, [0x11FD]={ category="lo", description="HANGUL JONGSEONG KIYEOK-KHIEUKH", direction="l", linebreak="jt", unicodeslot=0x11FD, }, [0x11FE]={ category="lo", description="HANGUL JONGSEONG KIYEOK-HIEUH", direction="l", linebreak="jt", unicodeslot=0x11FE, }, [0x11FF]={ category="lo", description="HANGUL JONGSEONG SSANGNIEUN", direction="l", linebreak="jt", unicodeslot=0x11FF, }, [0x1200]={ category="lo", description="ETHIOPIC SYLLABLE HA", direction="l", linebreak="al", unicodeslot=0x1200, }, [0x1201]={ category="lo", description="ETHIOPIC SYLLABLE HU", direction="l", linebreak="al", unicodeslot=0x1201, }, [0x1202]={ category="lo", description="ETHIOPIC SYLLABLE HI", direction="l", linebreak="al", unicodeslot=0x1202, }, [0x1203]={ category="lo", description="ETHIOPIC SYLLABLE HAA", direction="l", linebreak="al", unicodeslot=0x1203, }, [0x1204]={ category="lo", description="ETHIOPIC SYLLABLE HEE", direction="l", linebreak="al", unicodeslot=0x1204, }, [0x1205]={ category="lo", description="ETHIOPIC SYLLABLE HE", direction="l", linebreak="al", unicodeslot=0x1205, }, [0x1206]={ category="lo", description="ETHIOPIC SYLLABLE HO", direction="l", linebreak="al", unicodeslot=0x1206, }, [0x1207]={ category="lo", description="ETHIOPIC SYLLABLE HOA", direction="l", linebreak="al", unicodeslot=0x1207, }, [0x1208]={ category="lo", description="ETHIOPIC SYLLABLE LA", direction="l", linebreak="al", unicodeslot=0x1208, }, [0x1209]={ category="lo", description="ETHIOPIC SYLLABLE LU", direction="l", linebreak="al", unicodeslot=0x1209, }, [0x120A]={ category="lo", description="ETHIOPIC SYLLABLE LI", direction="l", linebreak="al", unicodeslot=0x120A, }, [0x120B]={ category="lo", description="ETHIOPIC SYLLABLE LAA", direction="l", linebreak="al", unicodeslot=0x120B, }, [0x120C]={ category="lo", description="ETHIOPIC SYLLABLE LEE", direction="l", linebreak="al", unicodeslot=0x120C, }, [0x120D]={ category="lo", description="ETHIOPIC SYLLABLE LE", direction="l", linebreak="al", unicodeslot=0x120D, }, [0x120E]={ category="lo", description="ETHIOPIC SYLLABLE LO", direction="l", linebreak="al", unicodeslot=0x120E, }, [0x120F]={ category="lo", description="ETHIOPIC SYLLABLE LWA", direction="l", linebreak="al", unicodeslot=0x120F, }, [0x1210]={ category="lo", description="ETHIOPIC SYLLABLE HHA", direction="l", linebreak="al", unicodeslot=0x1210, }, [0x1211]={ category="lo", description="ETHIOPIC SYLLABLE HHU", direction="l", linebreak="al", unicodeslot=0x1211, }, [0x1212]={ category="lo", description="ETHIOPIC SYLLABLE HHI", direction="l", linebreak="al", unicodeslot=0x1212, }, [0x1213]={ category="lo", description="ETHIOPIC SYLLABLE HHAA", direction="l", linebreak="al", unicodeslot=0x1213, }, [0x1214]={ category="lo", description="ETHIOPIC SYLLABLE HHEE", direction="l", linebreak="al", unicodeslot=0x1214, }, [0x1215]={ category="lo", description="ETHIOPIC SYLLABLE HHE", direction="l", linebreak="al", unicodeslot=0x1215, }, [0x1216]={ category="lo", description="ETHIOPIC SYLLABLE HHO", direction="l", linebreak="al", unicodeslot=0x1216, }, [0x1217]={ category="lo", description="ETHIOPIC SYLLABLE HHWA", direction="l", linebreak="al", unicodeslot=0x1217, }, [0x1218]={ category="lo", description="ETHIOPIC SYLLABLE MA", direction="l", linebreak="al", unicodeslot=0x1218, }, [0x1219]={ category="lo", description="ETHIOPIC SYLLABLE MU", direction="l", linebreak="al", unicodeslot=0x1219, }, [0x121A]={ category="lo", description="ETHIOPIC SYLLABLE MI", direction="l", linebreak="al", unicodeslot=0x121A, }, [0x121B]={ category="lo", description="ETHIOPIC SYLLABLE MAA", direction="l", linebreak="al", unicodeslot=0x121B, }, [0x121C]={ category="lo", description="ETHIOPIC SYLLABLE MEE", direction="l", linebreak="al", unicodeslot=0x121C, }, [0x121D]={ category="lo", description="ETHIOPIC SYLLABLE ME", direction="l", linebreak="al", unicodeslot=0x121D, }, [0x121E]={ category="lo", description="ETHIOPIC SYLLABLE MO", direction="l", linebreak="al", unicodeslot=0x121E, }, [0x121F]={ category="lo", description="ETHIOPIC SYLLABLE MWA", direction="l", linebreak="al", unicodeslot=0x121F, }, [0x1220]={ category="lo", description="ETHIOPIC SYLLABLE SZA", direction="l", linebreak="al", unicodeslot=0x1220, }, [0x1221]={ category="lo", description="ETHIOPIC SYLLABLE SZU", direction="l", linebreak="al", unicodeslot=0x1221, }, [0x1222]={ category="lo", description="ETHIOPIC SYLLABLE SZI", direction="l", linebreak="al", unicodeslot=0x1222, }, [0x1223]={ category="lo", description="ETHIOPIC SYLLABLE SZAA", direction="l", linebreak="al", unicodeslot=0x1223, }, [0x1224]={ category="lo", description="ETHIOPIC SYLLABLE SZEE", direction="l", linebreak="al", unicodeslot=0x1224, }, [0x1225]={ category="lo", description="ETHIOPIC SYLLABLE SZE", direction="l", linebreak="al", unicodeslot=0x1225, }, [0x1226]={ category="lo", description="ETHIOPIC SYLLABLE SZO", direction="l", linebreak="al", unicodeslot=0x1226, }, [0x1227]={ category="lo", description="ETHIOPIC SYLLABLE SZWA", direction="l", linebreak="al", unicodeslot=0x1227, }, [0x1228]={ category="lo", description="ETHIOPIC SYLLABLE RA", direction="l", linebreak="al", unicodeslot=0x1228, }, [0x1229]={ category="lo", description="ETHIOPIC SYLLABLE RU", direction="l", linebreak="al", unicodeslot=0x1229, }, [0x122A]={ category="lo", description="ETHIOPIC SYLLABLE RI", direction="l", linebreak="al", unicodeslot=0x122A, }, [0x122B]={ category="lo", description="ETHIOPIC SYLLABLE RAA", direction="l", linebreak="al", unicodeslot=0x122B, }, [0x122C]={ category="lo", description="ETHIOPIC SYLLABLE REE", direction="l", linebreak="al", unicodeslot=0x122C, }, [0x122D]={ category="lo", description="ETHIOPIC SYLLABLE RE", direction="l", linebreak="al", unicodeslot=0x122D, }, [0x122E]={ category="lo", description="ETHIOPIC SYLLABLE RO", direction="l", linebreak="al", unicodeslot=0x122E, }, [0x122F]={ category="lo", description="ETHIOPIC SYLLABLE RWA", direction="l", linebreak="al", unicodeslot=0x122F, }, [0x1230]={ category="lo", description="ETHIOPIC SYLLABLE SA", direction="l", linebreak="al", unicodeslot=0x1230, }, [0x1231]={ category="lo", description="ETHIOPIC SYLLABLE SU", direction="l", linebreak="al", unicodeslot=0x1231, }, [0x1232]={ category="lo", description="ETHIOPIC SYLLABLE SI", direction="l", linebreak="al", unicodeslot=0x1232, }, [0x1233]={ category="lo", description="ETHIOPIC SYLLABLE SAA", direction="l", linebreak="al", unicodeslot=0x1233, }, [0x1234]={ category="lo", description="ETHIOPIC SYLLABLE SEE", direction="l", linebreak="al", unicodeslot=0x1234, }, [0x1235]={ category="lo", description="ETHIOPIC SYLLABLE SE", direction="l", linebreak="al", unicodeslot=0x1235, }, [0x1236]={ category="lo", description="ETHIOPIC SYLLABLE SO", direction="l", linebreak="al", unicodeslot=0x1236, }, [0x1237]={ category="lo", description="ETHIOPIC SYLLABLE SWA", direction="l", linebreak="al", unicodeslot=0x1237, }, [0x1238]={ category="lo", description="ETHIOPIC SYLLABLE SHA", direction="l", linebreak="al", unicodeslot=0x1238, }, [0x1239]={ category="lo", description="ETHIOPIC SYLLABLE SHU", direction="l", linebreak="al", unicodeslot=0x1239, }, [0x123A]={ category="lo", description="ETHIOPIC SYLLABLE SHI", direction="l", linebreak="al", unicodeslot=0x123A, }, [0x123B]={ category="lo", description="ETHIOPIC SYLLABLE SHAA", direction="l", linebreak="al", unicodeslot=0x123B, }, [0x123C]={ category="lo", description="ETHIOPIC SYLLABLE SHEE", direction="l", linebreak="al", unicodeslot=0x123C, }, [0x123D]={ category="lo", description="ETHIOPIC SYLLABLE SHE", direction="l", linebreak="al", unicodeslot=0x123D, }, [0x123E]={ category="lo", description="ETHIOPIC SYLLABLE SHO", direction="l", linebreak="al", unicodeslot=0x123E, }, [0x123F]={ category="lo", description="ETHIOPIC SYLLABLE SHWA", direction="l", linebreak="al", unicodeslot=0x123F, }, [0x1240]={ category="lo", description="ETHIOPIC SYLLABLE QA", direction="l", linebreak="al", unicodeslot=0x1240, }, [0x1241]={ category="lo", description="ETHIOPIC SYLLABLE QU", direction="l", linebreak="al", unicodeslot=0x1241, }, [0x1242]={ category="lo", description="ETHIOPIC SYLLABLE QI", direction="l", linebreak="al", unicodeslot=0x1242, }, [0x1243]={ category="lo", description="ETHIOPIC SYLLABLE QAA", direction="l", linebreak="al", unicodeslot=0x1243, }, [0x1244]={ category="lo", description="ETHIOPIC SYLLABLE QEE", direction="l", linebreak="al", unicodeslot=0x1244, }, [0x1245]={ category="lo", description="ETHIOPIC SYLLABLE QE", direction="l", linebreak="al", unicodeslot=0x1245, }, [0x1246]={ category="lo", description="ETHIOPIC SYLLABLE QO", direction="l", linebreak="al", unicodeslot=0x1246, }, [0x1247]={ category="lo", description="ETHIOPIC SYLLABLE QOA", direction="l", linebreak="al", unicodeslot=0x1247, }, [0x1248]={ category="lo", description="ETHIOPIC SYLLABLE QWA", direction="l", linebreak="al", unicodeslot=0x1248, }, [0x124A]={ category="lo", description="ETHIOPIC SYLLABLE QWI", direction="l", linebreak="al", unicodeslot=0x124A, }, [0x124B]={ category="lo", description="ETHIOPIC SYLLABLE QWAA", direction="l", linebreak="al", unicodeslot=0x124B, }, [0x124C]={ category="lo", description="ETHIOPIC SYLLABLE QWEE", direction="l", linebreak="al", unicodeslot=0x124C, }, [0x124D]={ category="lo", description="ETHIOPIC SYLLABLE QWE", direction="l", linebreak="al", unicodeslot=0x124D, }, [0x1250]={ category="lo", description="ETHIOPIC SYLLABLE QHA", direction="l", linebreak="al", unicodeslot=0x1250, }, [0x1251]={ category="lo", description="ETHIOPIC SYLLABLE QHU", direction="l", linebreak="al", unicodeslot=0x1251, }, [0x1252]={ category="lo", description="ETHIOPIC SYLLABLE QHI", direction="l", linebreak="al", unicodeslot=0x1252, }, [0x1253]={ category="lo", description="ETHIOPIC SYLLABLE QHAA", direction="l", linebreak="al", unicodeslot=0x1253, }, [0x1254]={ category="lo", description="ETHIOPIC SYLLABLE QHEE", direction="l", linebreak="al", unicodeslot=0x1254, }, [0x1255]={ category="lo", description="ETHIOPIC SYLLABLE QHE", direction="l", linebreak="al", unicodeslot=0x1255, }, [0x1256]={ category="lo", description="ETHIOPIC SYLLABLE QHO", direction="l", linebreak="al", unicodeslot=0x1256, }, [0x1258]={ category="lo", description="ETHIOPIC SYLLABLE QHWA", direction="l", linebreak="al", unicodeslot=0x1258, }, [0x125A]={ category="lo", description="ETHIOPIC SYLLABLE QHWI", direction="l", linebreak="al", unicodeslot=0x125A, }, [0x125B]={ category="lo", description="ETHIOPIC SYLLABLE QHWAA", direction="l", linebreak="al", unicodeslot=0x125B, }, [0x125C]={ category="lo", description="ETHIOPIC SYLLABLE QHWEE", direction="l", linebreak="al", unicodeslot=0x125C, }, [0x125D]={ category="lo", description="ETHIOPIC SYLLABLE QHWE", direction="l", linebreak="al", unicodeslot=0x125D, }, [0x1260]={ category="lo", description="ETHIOPIC SYLLABLE BA", direction="l", linebreak="al", unicodeslot=0x1260, }, [0x1261]={ category="lo", description="ETHIOPIC SYLLABLE BU", direction="l", linebreak="al", unicodeslot=0x1261, }, [0x1262]={ category="lo", description="ETHIOPIC SYLLABLE BI", direction="l", linebreak="al", unicodeslot=0x1262, }, [0x1263]={ category="lo", description="ETHIOPIC SYLLABLE BAA", direction="l", linebreak="al", unicodeslot=0x1263, }, [0x1264]={ category="lo", description="ETHIOPIC SYLLABLE BEE", direction="l", linebreak="al", unicodeslot=0x1264, }, [0x1265]={ category="lo", description="ETHIOPIC SYLLABLE BE", direction="l", linebreak="al", unicodeslot=0x1265, }, [0x1266]={ category="lo", description="ETHIOPIC SYLLABLE BO", direction="l", linebreak="al", unicodeslot=0x1266, }, [0x1267]={ category="lo", description="ETHIOPIC SYLLABLE BWA", direction="l", linebreak="al", unicodeslot=0x1267, }, [0x1268]={ category="lo", description="ETHIOPIC SYLLABLE VA", direction="l", linebreak="al", unicodeslot=0x1268, }, [0x1269]={ category="lo", description="ETHIOPIC SYLLABLE VU", direction="l", linebreak="al", unicodeslot=0x1269, }, [0x126A]={ category="lo", description="ETHIOPIC SYLLABLE VI", direction="l", linebreak="al", unicodeslot=0x126A, }, [0x126B]={ category="lo", description="ETHIOPIC SYLLABLE VAA", direction="l", linebreak="al", unicodeslot=0x126B, }, [0x126C]={ category="lo", description="ETHIOPIC SYLLABLE VEE", direction="l", linebreak="al", unicodeslot=0x126C, }, [0x126D]={ category="lo", description="ETHIOPIC SYLLABLE VE", direction="l", linebreak="al", unicodeslot=0x126D, }, [0x126E]={ category="lo", description="ETHIOPIC SYLLABLE VO", direction="l", linebreak="al", unicodeslot=0x126E, }, [0x126F]={ category="lo", description="ETHIOPIC SYLLABLE VWA", direction="l", linebreak="al", unicodeslot=0x126F, }, [0x1270]={ category="lo", description="ETHIOPIC SYLLABLE TA", direction="l", linebreak="al", unicodeslot=0x1270, }, [0x1271]={ category="lo", description="ETHIOPIC SYLLABLE TU", direction="l", linebreak="al", unicodeslot=0x1271, }, [0x1272]={ category="lo", description="ETHIOPIC SYLLABLE TI", direction="l", linebreak="al", unicodeslot=0x1272, }, [0x1273]={ category="lo", description="ETHIOPIC SYLLABLE TAA", direction="l", linebreak="al", unicodeslot=0x1273, }, [0x1274]={ category="lo", description="ETHIOPIC SYLLABLE TEE", direction="l", linebreak="al", unicodeslot=0x1274, }, [0x1275]={ category="lo", description="ETHIOPIC SYLLABLE TE", direction="l", linebreak="al", unicodeslot=0x1275, }, [0x1276]={ category="lo", description="ETHIOPIC SYLLABLE TO", direction="l", linebreak="al", unicodeslot=0x1276, }, [0x1277]={ category="lo", description="ETHIOPIC SYLLABLE TWA", direction="l", linebreak="al", unicodeslot=0x1277, }, [0x1278]={ category="lo", description="ETHIOPIC SYLLABLE CA", direction="l", linebreak="al", unicodeslot=0x1278, }, [0x1279]={ category="lo", description="ETHIOPIC SYLLABLE CU", direction="l", linebreak="al", unicodeslot=0x1279, }, [0x127A]={ category="lo", description="ETHIOPIC SYLLABLE CI", direction="l", linebreak="al", unicodeslot=0x127A, }, [0x127B]={ category="lo", description="ETHIOPIC SYLLABLE CAA", direction="l", linebreak="al", unicodeslot=0x127B, }, [0x127C]={ category="lo", description="ETHIOPIC SYLLABLE CEE", direction="l", linebreak="al", unicodeslot=0x127C, }, [0x127D]={ category="lo", description="ETHIOPIC SYLLABLE CE", direction="l", linebreak="al", unicodeslot=0x127D, }, [0x127E]={ category="lo", description="ETHIOPIC SYLLABLE CO", direction="l", linebreak="al", unicodeslot=0x127E, }, [0x127F]={ category="lo", description="ETHIOPIC SYLLABLE CWA", direction="l", linebreak="al", unicodeslot=0x127F, }, [0x1280]={ category="lo", description="ETHIOPIC SYLLABLE XA", direction="l", linebreak="al", unicodeslot=0x1280, }, [0x1281]={ category="lo", description="ETHIOPIC SYLLABLE XU", direction="l", linebreak="al", unicodeslot=0x1281, }, [0x1282]={ category="lo", description="ETHIOPIC SYLLABLE XI", direction="l", linebreak="al", unicodeslot=0x1282, }, [0x1283]={ category="lo", description="ETHIOPIC SYLLABLE XAA", direction="l", linebreak="al", unicodeslot=0x1283, }, [0x1284]={ category="lo", description="ETHIOPIC SYLLABLE XEE", direction="l", linebreak="al", unicodeslot=0x1284, }, [0x1285]={ category="lo", description="ETHIOPIC SYLLABLE XE", direction="l", linebreak="al", unicodeslot=0x1285, }, [0x1286]={ category="lo", description="ETHIOPIC SYLLABLE XO", direction="l", linebreak="al", unicodeslot=0x1286, }, [0x1287]={ category="lo", description="ETHIOPIC SYLLABLE XOA", direction="l", linebreak="al", unicodeslot=0x1287, }, [0x1288]={ category="lo", description="ETHIOPIC SYLLABLE XWA", direction="l", linebreak="al", unicodeslot=0x1288, }, [0x128A]={ category="lo", description="ETHIOPIC SYLLABLE XWI", direction="l", linebreak="al", unicodeslot=0x128A, }, [0x128B]={ category="lo", description="ETHIOPIC SYLLABLE XWAA", direction="l", linebreak="al", unicodeslot=0x128B, }, [0x128C]={ category="lo", description="ETHIOPIC SYLLABLE XWEE", direction="l", linebreak="al", unicodeslot=0x128C, }, [0x128D]={ category="lo", description="ETHIOPIC SYLLABLE XWE", direction="l", linebreak="al", unicodeslot=0x128D, }, [0x1290]={ category="lo", description="ETHIOPIC SYLLABLE NA", direction="l", linebreak="al", unicodeslot=0x1290, }, [0x1291]={ category="lo", description="ETHIOPIC SYLLABLE NU", direction="l", linebreak="al", unicodeslot=0x1291, }, [0x1292]={ category="lo", description="ETHIOPIC SYLLABLE NI", direction="l", linebreak="al", unicodeslot=0x1292, }, [0x1293]={ category="lo", description="ETHIOPIC SYLLABLE NAA", direction="l", linebreak="al", unicodeslot=0x1293, }, [0x1294]={ category="lo", description="ETHIOPIC SYLLABLE NEE", direction="l", linebreak="al", unicodeslot=0x1294, }, [0x1295]={ category="lo", description="ETHIOPIC SYLLABLE NE", direction="l", linebreak="al", unicodeslot=0x1295, }, [0x1296]={ category="lo", description="ETHIOPIC SYLLABLE NO", direction="l", linebreak="al", unicodeslot=0x1296, }, [0x1297]={ category="lo", description="ETHIOPIC SYLLABLE NWA", direction="l", linebreak="al", unicodeslot=0x1297, }, [0x1298]={ category="lo", description="ETHIOPIC SYLLABLE NYA", direction="l", linebreak="al", unicodeslot=0x1298, }, [0x1299]={ category="lo", description="ETHIOPIC SYLLABLE NYU", direction="l", linebreak="al", unicodeslot=0x1299, }, [0x129A]={ category="lo", description="ETHIOPIC SYLLABLE NYI", direction="l", linebreak="al", unicodeslot=0x129A, }, [0x129B]={ category="lo", description="ETHIOPIC SYLLABLE NYAA", direction="l", linebreak="al", unicodeslot=0x129B, }, [0x129C]={ category="lo", description="ETHIOPIC SYLLABLE NYEE", direction="l", linebreak="al", unicodeslot=0x129C, }, [0x129D]={ category="lo", description="ETHIOPIC SYLLABLE NYE", direction="l", linebreak="al", unicodeslot=0x129D, }, [0x129E]={ category="lo", description="ETHIOPIC SYLLABLE NYO", direction="l", linebreak="al", unicodeslot=0x129E, }, [0x129F]={ category="lo", description="ETHIOPIC SYLLABLE NYWA", direction="l", linebreak="al", unicodeslot=0x129F, }, [0x12A0]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL A", direction="l", linebreak="al", unicodeslot=0x12A0, }, [0x12A1]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL U", direction="l", linebreak="al", unicodeslot=0x12A1, }, [0x12A2]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL I", direction="l", linebreak="al", unicodeslot=0x12A2, }, [0x12A3]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL AA", direction="l", linebreak="al", unicodeslot=0x12A3, }, [0x12A4]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL EE", direction="l", linebreak="al", unicodeslot=0x12A4, }, [0x12A5]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL E", direction="l", linebreak="al", unicodeslot=0x12A5, }, [0x12A6]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL O", direction="l", linebreak="al", unicodeslot=0x12A6, }, [0x12A7]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL WA", direction="l", linebreak="al", unicodeslot=0x12A7, }, [0x12A8]={ category="lo", description="ETHIOPIC SYLLABLE KA", direction="l", linebreak="al", unicodeslot=0x12A8, }, [0x12A9]={ category="lo", description="ETHIOPIC SYLLABLE KU", direction="l", linebreak="al", unicodeslot=0x12A9, }, [0x12AA]={ category="lo", description="ETHIOPIC SYLLABLE KI", direction="l", linebreak="al", unicodeslot=0x12AA, }, [0x12AB]={ category="lo", description="ETHIOPIC SYLLABLE KAA", direction="l", linebreak="al", unicodeslot=0x12AB, }, [0x12AC]={ category="lo", description="ETHIOPIC SYLLABLE KEE", direction="l", linebreak="al", unicodeslot=0x12AC, }, [0x12AD]={ category="lo", description="ETHIOPIC SYLLABLE KE", direction="l", linebreak="al", unicodeslot=0x12AD, }, [0x12AE]={ category="lo", description="ETHIOPIC SYLLABLE KO", direction="l", linebreak="al", unicodeslot=0x12AE, }, [0x12AF]={ category="lo", description="ETHIOPIC SYLLABLE KOA", direction="l", linebreak="al", unicodeslot=0x12AF, }, [0x12B0]={ category="lo", description="ETHIOPIC SYLLABLE KWA", direction="l", linebreak="al", unicodeslot=0x12B0, }, [0x12B2]={ category="lo", description="ETHIOPIC SYLLABLE KWI", direction="l", linebreak="al", unicodeslot=0x12B2, }, [0x12B3]={ category="lo", description="ETHIOPIC SYLLABLE KWAA", direction="l", linebreak="al", unicodeslot=0x12B3, }, [0x12B4]={ category="lo", description="ETHIOPIC SYLLABLE KWEE", direction="l", linebreak="al", unicodeslot=0x12B4, }, [0x12B5]={ category="lo", description="ETHIOPIC SYLLABLE KWE", direction="l", linebreak="al", unicodeslot=0x12B5, }, [0x12B8]={ category="lo", description="ETHIOPIC SYLLABLE KXA", direction="l", linebreak="al", unicodeslot=0x12B8, }, [0x12B9]={ category="lo", description="ETHIOPIC SYLLABLE KXU", direction="l", linebreak="al", unicodeslot=0x12B9, }, [0x12BA]={ category="lo", description="ETHIOPIC SYLLABLE KXI", direction="l", linebreak="al", unicodeslot=0x12BA, }, [0x12BB]={ category="lo", description="ETHIOPIC SYLLABLE KXAA", direction="l", linebreak="al", unicodeslot=0x12BB, }, [0x12BC]={ category="lo", description="ETHIOPIC SYLLABLE KXEE", direction="l", linebreak="al", unicodeslot=0x12BC, }, [0x12BD]={ category="lo", description="ETHIOPIC SYLLABLE KXE", direction="l", linebreak="al", unicodeslot=0x12BD, }, [0x12BE]={ category="lo", description="ETHIOPIC SYLLABLE KXO", direction="l", linebreak="al", unicodeslot=0x12BE, }, [0x12C0]={ category="lo", description="ETHIOPIC SYLLABLE KXWA", direction="l", linebreak="al", unicodeslot=0x12C0, }, [0x12C2]={ category="lo", description="ETHIOPIC SYLLABLE KXWI", direction="l", linebreak="al", unicodeslot=0x12C2, }, [0x12C3]={ category="lo", description="ETHIOPIC SYLLABLE KXWAA", direction="l", linebreak="al", unicodeslot=0x12C3, }, [0x12C4]={ category="lo", description="ETHIOPIC SYLLABLE KXWEE", direction="l", linebreak="al", unicodeslot=0x12C4, }, [0x12C5]={ category="lo", description="ETHIOPIC SYLLABLE KXWE", direction="l", linebreak="al", unicodeslot=0x12C5, }, [0x12C8]={ category="lo", description="ETHIOPIC SYLLABLE WA", direction="l", linebreak="al", unicodeslot=0x12C8, }, [0x12C9]={ category="lo", description="ETHIOPIC SYLLABLE WU", direction="l", linebreak="al", unicodeslot=0x12C9, }, [0x12CA]={ category="lo", description="ETHIOPIC SYLLABLE WI", direction="l", linebreak="al", unicodeslot=0x12CA, }, [0x12CB]={ category="lo", description="ETHIOPIC SYLLABLE WAA", direction="l", linebreak="al", unicodeslot=0x12CB, }, [0x12CC]={ category="lo", description="ETHIOPIC SYLLABLE WEE", direction="l", linebreak="al", unicodeslot=0x12CC, }, [0x12CD]={ category="lo", description="ETHIOPIC SYLLABLE WE", direction="l", linebreak="al", unicodeslot=0x12CD, }, [0x12CE]={ category="lo", description="ETHIOPIC SYLLABLE WO", direction="l", linebreak="al", unicodeslot=0x12CE, }, [0x12CF]={ category="lo", description="ETHIOPIC SYLLABLE WOA", direction="l", linebreak="al", unicodeslot=0x12CF, }, [0x12D0]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL A", direction="l", linebreak="al", unicodeslot=0x12D0, }, [0x12D1]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL U", direction="l", linebreak="al", unicodeslot=0x12D1, }, [0x12D2]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL I", direction="l", linebreak="al", unicodeslot=0x12D2, }, [0x12D3]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL AA", direction="l", linebreak="al", unicodeslot=0x12D3, }, [0x12D4]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL EE", direction="l", linebreak="al", unicodeslot=0x12D4, }, [0x12D5]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL E", direction="l", linebreak="al", unicodeslot=0x12D5, }, [0x12D6]={ category="lo", description="ETHIOPIC SYLLABLE PHARYNGEAL O", direction="l", linebreak="al", unicodeslot=0x12D6, }, [0x12D8]={ category="lo", description="ETHIOPIC SYLLABLE ZA", direction="l", linebreak="al", unicodeslot=0x12D8, }, [0x12D9]={ category="lo", description="ETHIOPIC SYLLABLE ZU", direction="l", linebreak="al", unicodeslot=0x12D9, }, [0x12DA]={ category="lo", description="ETHIOPIC SYLLABLE ZI", direction="l", linebreak="al", unicodeslot=0x12DA, }, [0x12DB]={ category="lo", description="ETHIOPIC SYLLABLE ZAA", direction="l", linebreak="al", unicodeslot=0x12DB, }, [0x12DC]={ category="lo", description="ETHIOPIC SYLLABLE ZEE", direction="l", linebreak="al", unicodeslot=0x12DC, }, [0x12DD]={ category="lo", description="ETHIOPIC SYLLABLE ZE", direction="l", linebreak="al", unicodeslot=0x12DD, }, [0x12DE]={ category="lo", description="ETHIOPIC SYLLABLE ZO", direction="l", linebreak="al", unicodeslot=0x12DE, }, [0x12DF]={ category="lo", description="ETHIOPIC SYLLABLE ZWA", direction="l", linebreak="al", unicodeslot=0x12DF, }, [0x12E0]={ category="lo", description="ETHIOPIC SYLLABLE ZHA", direction="l", linebreak="al", unicodeslot=0x12E0, }, [0x12E1]={ category="lo", description="ETHIOPIC SYLLABLE ZHU", direction="l", linebreak="al", unicodeslot=0x12E1, }, [0x12E2]={ category="lo", description="ETHIOPIC SYLLABLE ZHI", direction="l", linebreak="al", unicodeslot=0x12E2, }, [0x12E3]={ category="lo", description="ETHIOPIC SYLLABLE ZHAA", direction="l", linebreak="al", unicodeslot=0x12E3, }, [0x12E4]={ category="lo", description="ETHIOPIC SYLLABLE ZHEE", direction="l", linebreak="al", unicodeslot=0x12E4, }, [0x12E5]={ category="lo", description="ETHIOPIC SYLLABLE ZHE", direction="l", linebreak="al", unicodeslot=0x12E5, }, [0x12E6]={ category="lo", description="ETHIOPIC SYLLABLE ZHO", direction="l", linebreak="al", unicodeslot=0x12E6, }, [0x12E7]={ category="lo", description="ETHIOPIC SYLLABLE ZHWA", direction="l", linebreak="al", unicodeslot=0x12E7, }, [0x12E8]={ category="lo", description="ETHIOPIC SYLLABLE YA", direction="l", linebreak="al", unicodeslot=0x12E8, }, [0x12E9]={ category="lo", description="ETHIOPIC SYLLABLE YU", direction="l", linebreak="al", unicodeslot=0x12E9, }, [0x12EA]={ category="lo", description="ETHIOPIC SYLLABLE YI", direction="l", linebreak="al", unicodeslot=0x12EA, }, [0x12EB]={ category="lo", description="ETHIOPIC SYLLABLE YAA", direction="l", linebreak="al", unicodeslot=0x12EB, }, [0x12EC]={ category="lo", description="ETHIOPIC SYLLABLE YEE", direction="l", linebreak="al", unicodeslot=0x12EC, }, [0x12ED]={ category="lo", description="ETHIOPIC SYLLABLE YE", direction="l", linebreak="al", unicodeslot=0x12ED, }, [0x12EE]={ category="lo", description="ETHIOPIC SYLLABLE YO", direction="l", linebreak="al", unicodeslot=0x12EE, }, [0x12EF]={ category="lo", description="ETHIOPIC SYLLABLE YOA", direction="l", linebreak="al", unicodeslot=0x12EF, }, [0x12F0]={ category="lo", description="ETHIOPIC SYLLABLE DA", direction="l", linebreak="al", unicodeslot=0x12F0, }, [0x12F1]={ category="lo", description="ETHIOPIC SYLLABLE DU", direction="l", linebreak="al", unicodeslot=0x12F1, }, [0x12F2]={ category="lo", description="ETHIOPIC SYLLABLE DI", direction="l", linebreak="al", unicodeslot=0x12F2, }, [0x12F3]={ category="lo", description="ETHIOPIC SYLLABLE DAA", direction="l", linebreak="al", unicodeslot=0x12F3, }, [0x12F4]={ category="lo", description="ETHIOPIC SYLLABLE DEE", direction="l", linebreak="al", unicodeslot=0x12F4, }, [0x12F5]={ category="lo", description="ETHIOPIC SYLLABLE DE", direction="l", linebreak="al", unicodeslot=0x12F5, }, [0x12F6]={ category="lo", description="ETHIOPIC SYLLABLE DO", direction="l", linebreak="al", unicodeslot=0x12F6, }, [0x12F7]={ category="lo", description="ETHIOPIC SYLLABLE DWA", direction="l", linebreak="al", unicodeslot=0x12F7, }, [0x12F8]={ category="lo", description="ETHIOPIC SYLLABLE DDA", direction="l", linebreak="al", unicodeslot=0x12F8, }, [0x12F9]={ category="lo", description="ETHIOPIC SYLLABLE DDU", direction="l", linebreak="al", unicodeslot=0x12F9, }, [0x12FA]={ category="lo", description="ETHIOPIC SYLLABLE DDI", direction="l", linebreak="al", unicodeslot=0x12FA, }, [0x12FB]={ category="lo", description="ETHIOPIC SYLLABLE DDAA", direction="l", linebreak="al", unicodeslot=0x12FB, }, [0x12FC]={ category="lo", description="ETHIOPIC SYLLABLE DDEE", direction="l", linebreak="al", unicodeslot=0x12FC, }, [0x12FD]={ category="lo", description="ETHIOPIC SYLLABLE DDE", direction="l", linebreak="al", unicodeslot=0x12FD, }, [0x12FE]={ category="lo", description="ETHIOPIC SYLLABLE DDO", direction="l", linebreak="al", unicodeslot=0x12FE, }, [0x12FF]={ category="lo", description="ETHIOPIC SYLLABLE DDWA", direction="l", linebreak="al", unicodeslot=0x12FF, }, [0x1300]={ category="lo", description="ETHIOPIC SYLLABLE JA", direction="l", linebreak="al", unicodeslot=0x1300, }, [0x1301]={ category="lo", description="ETHIOPIC SYLLABLE JU", direction="l", linebreak="al", unicodeslot=0x1301, }, [0x1302]={ category="lo", description="ETHIOPIC SYLLABLE JI", direction="l", linebreak="al", unicodeslot=0x1302, }, [0x1303]={ category="lo", description="ETHIOPIC SYLLABLE JAA", direction="l", linebreak="al", unicodeslot=0x1303, }, [0x1304]={ category="lo", description="ETHIOPIC SYLLABLE JEE", direction="l", linebreak="al", unicodeslot=0x1304, }, [0x1305]={ category="lo", description="ETHIOPIC SYLLABLE JE", direction="l", linebreak="al", unicodeslot=0x1305, }, [0x1306]={ category="lo", description="ETHIOPIC SYLLABLE JO", direction="l", linebreak="al", unicodeslot=0x1306, }, [0x1307]={ category="lo", description="ETHIOPIC SYLLABLE JWA", direction="l", linebreak="al", unicodeslot=0x1307, }, [0x1308]={ category="lo", description="ETHIOPIC SYLLABLE GA", direction="l", linebreak="al", unicodeslot=0x1308, }, [0x1309]={ category="lo", description="ETHIOPIC SYLLABLE GU", direction="l", linebreak="al", unicodeslot=0x1309, }, [0x130A]={ category="lo", description="ETHIOPIC SYLLABLE GI", direction="l", linebreak="al", unicodeslot=0x130A, }, [0x130B]={ category="lo", description="ETHIOPIC SYLLABLE GAA", direction="l", linebreak="al", unicodeslot=0x130B, }, [0x130C]={ category="lo", description="ETHIOPIC SYLLABLE GEE", direction="l", linebreak="al", unicodeslot=0x130C, }, [0x130D]={ category="lo", description="ETHIOPIC SYLLABLE GE", direction="l", linebreak="al", unicodeslot=0x130D, }, [0x130E]={ category="lo", description="ETHIOPIC SYLLABLE GO", direction="l", linebreak="al", unicodeslot=0x130E, }, [0x130F]={ category="lo", description="ETHIOPIC SYLLABLE GOA", direction="l", linebreak="al", unicodeslot=0x130F, }, [0x1310]={ category="lo", description="ETHIOPIC SYLLABLE GWA", direction="l", linebreak="al", unicodeslot=0x1310, }, [0x1312]={ category="lo", description="ETHIOPIC SYLLABLE GWI", direction="l", linebreak="al", unicodeslot=0x1312, }, [0x1313]={ category="lo", description="ETHIOPIC SYLLABLE GWAA", direction="l", linebreak="al", unicodeslot=0x1313, }, [0x1314]={ category="lo", description="ETHIOPIC SYLLABLE GWEE", direction="l", linebreak="al", unicodeslot=0x1314, }, [0x1315]={ category="lo", description="ETHIOPIC SYLLABLE GWE", direction="l", linebreak="al", unicodeslot=0x1315, }, [0x1318]={ category="lo", description="ETHIOPIC SYLLABLE GGA", direction="l", linebreak="al", unicodeslot=0x1318, }, [0x1319]={ category="lo", description="ETHIOPIC SYLLABLE GGU", direction="l", linebreak="al", unicodeslot=0x1319, }, [0x131A]={ category="lo", description="ETHIOPIC SYLLABLE GGI", direction="l", linebreak="al", unicodeslot=0x131A, }, [0x131B]={ category="lo", description="ETHIOPIC SYLLABLE GGAA", direction="l", linebreak="al", unicodeslot=0x131B, }, [0x131C]={ category="lo", description="ETHIOPIC SYLLABLE GGEE", direction="l", linebreak="al", unicodeslot=0x131C, }, [0x131D]={ category="lo", description="ETHIOPIC SYLLABLE GGE", direction="l", linebreak="al", unicodeslot=0x131D, }, [0x131E]={ category="lo", description="ETHIOPIC SYLLABLE GGO", direction="l", linebreak="al", unicodeslot=0x131E, }, [0x131F]={ category="lo", description="ETHIOPIC SYLLABLE GGWAA", direction="l", linebreak="al", unicodeslot=0x131F, }, [0x1320]={ category="lo", description="ETHIOPIC SYLLABLE THA", direction="l", linebreak="al", unicodeslot=0x1320, }, [0x1321]={ category="lo", description="ETHIOPIC SYLLABLE THU", direction="l", linebreak="al", unicodeslot=0x1321, }, [0x1322]={ category="lo", description="ETHIOPIC SYLLABLE THI", direction="l", linebreak="al", unicodeslot=0x1322, }, [0x1323]={ category="lo", description="ETHIOPIC SYLLABLE THAA", direction="l", linebreak="al", unicodeslot=0x1323, }, [0x1324]={ category="lo", description="ETHIOPIC SYLLABLE THEE", direction="l", linebreak="al", unicodeslot=0x1324, }, [0x1325]={ category="lo", description="ETHIOPIC SYLLABLE THE", direction="l", linebreak="al", unicodeslot=0x1325, }, [0x1326]={ category="lo", description="ETHIOPIC SYLLABLE THO", direction="l", linebreak="al", unicodeslot=0x1326, }, [0x1327]={ category="lo", description="ETHIOPIC SYLLABLE THWA", direction="l", linebreak="al", unicodeslot=0x1327, }, [0x1328]={ category="lo", description="ETHIOPIC SYLLABLE CHA", direction="l", linebreak="al", unicodeslot=0x1328, }, [0x1329]={ category="lo", description="ETHIOPIC SYLLABLE CHU", direction="l", linebreak="al", unicodeslot=0x1329, }, [0x132A]={ category="lo", description="ETHIOPIC SYLLABLE CHI", direction="l", linebreak="al", unicodeslot=0x132A, }, [0x132B]={ category="lo", description="ETHIOPIC SYLLABLE CHAA", direction="l", linebreak="al", unicodeslot=0x132B, }, [0x132C]={ category="lo", description="ETHIOPIC SYLLABLE CHEE", direction="l", linebreak="al", unicodeslot=0x132C, }, [0x132D]={ category="lo", description="ETHIOPIC SYLLABLE CHE", direction="l", linebreak="al", unicodeslot=0x132D, }, [0x132E]={ category="lo", description="ETHIOPIC SYLLABLE CHO", direction="l", linebreak="al", unicodeslot=0x132E, }, [0x132F]={ category="lo", description="ETHIOPIC SYLLABLE CHWA", direction="l", linebreak="al", unicodeslot=0x132F, }, [0x1330]={ category="lo", description="ETHIOPIC SYLLABLE PHA", direction="l", linebreak="al", unicodeslot=0x1330, }, [0x1331]={ category="lo", description="ETHIOPIC SYLLABLE PHU", direction="l", linebreak="al", unicodeslot=0x1331, }, [0x1332]={ category="lo", description="ETHIOPIC SYLLABLE PHI", direction="l", linebreak="al", unicodeslot=0x1332, }, [0x1333]={ category="lo", description="ETHIOPIC SYLLABLE PHAA", direction="l", linebreak="al", unicodeslot=0x1333, }, [0x1334]={ category="lo", description="ETHIOPIC SYLLABLE PHEE", direction="l", linebreak="al", unicodeslot=0x1334, }, [0x1335]={ category="lo", description="ETHIOPIC SYLLABLE PHE", direction="l", linebreak="al", unicodeslot=0x1335, }, [0x1336]={ category="lo", description="ETHIOPIC SYLLABLE PHO", direction="l", linebreak="al", unicodeslot=0x1336, }, [0x1337]={ category="lo", description="ETHIOPIC SYLLABLE PHWA", direction="l", linebreak="al", unicodeslot=0x1337, }, [0x1338]={ category="lo", description="ETHIOPIC SYLLABLE TSA", direction="l", linebreak="al", unicodeslot=0x1338, }, [0x1339]={ category="lo", description="ETHIOPIC SYLLABLE TSU", direction="l", linebreak="al", unicodeslot=0x1339, }, [0x133A]={ category="lo", description="ETHIOPIC SYLLABLE TSI", direction="l", linebreak="al", unicodeslot=0x133A, }, [0x133B]={ category="lo", description="ETHIOPIC SYLLABLE TSAA", direction="l", linebreak="al", unicodeslot=0x133B, }, [0x133C]={ category="lo", description="ETHIOPIC SYLLABLE TSEE", direction="l", linebreak="al", unicodeslot=0x133C, }, [0x133D]={ category="lo", description="ETHIOPIC SYLLABLE TSE", direction="l", linebreak="al", unicodeslot=0x133D, }, [0x133E]={ category="lo", description="ETHIOPIC SYLLABLE TSO", direction="l", linebreak="al", unicodeslot=0x133E, }, [0x133F]={ category="lo", description="ETHIOPIC SYLLABLE TSWA", direction="l", linebreak="al", unicodeslot=0x133F, }, [0x1340]={ category="lo", description="ETHIOPIC SYLLABLE TZA", direction="l", linebreak="al", unicodeslot=0x1340, }, [0x1341]={ category="lo", description="ETHIOPIC SYLLABLE TZU", direction="l", linebreak="al", unicodeslot=0x1341, }, [0x1342]={ category="lo", description="ETHIOPIC SYLLABLE TZI", direction="l", linebreak="al", unicodeslot=0x1342, }, [0x1343]={ category="lo", description="ETHIOPIC SYLLABLE TZAA", direction="l", linebreak="al", unicodeslot=0x1343, }, [0x1344]={ category="lo", description="ETHIOPIC SYLLABLE TZEE", direction="l", linebreak="al", unicodeslot=0x1344, }, [0x1345]={ category="lo", description="ETHIOPIC SYLLABLE TZE", direction="l", linebreak="al", unicodeslot=0x1345, }, [0x1346]={ category="lo", description="ETHIOPIC SYLLABLE TZO", direction="l", linebreak="al", unicodeslot=0x1346, }, [0x1347]={ category="lo", description="ETHIOPIC SYLLABLE TZOA", direction="l", linebreak="al", unicodeslot=0x1347, }, [0x1348]={ category="lo", description="ETHIOPIC SYLLABLE FA", direction="l", linebreak="al", unicodeslot=0x1348, }, [0x1349]={ category="lo", description="ETHIOPIC SYLLABLE FU", direction="l", linebreak="al", unicodeslot=0x1349, }, [0x134A]={ category="lo", description="ETHIOPIC SYLLABLE FI", direction="l", linebreak="al", unicodeslot=0x134A, }, [0x134B]={ category="lo", description="ETHIOPIC SYLLABLE FAA", direction="l", linebreak="al", unicodeslot=0x134B, }, [0x134C]={ category="lo", description="ETHIOPIC SYLLABLE FEE", direction="l", linebreak="al", unicodeslot=0x134C, }, [0x134D]={ category="lo", description="ETHIOPIC SYLLABLE FE", direction="l", linebreak="al", unicodeslot=0x134D, }, [0x134E]={ category="lo", description="ETHIOPIC SYLLABLE FO", direction="l", linebreak="al", unicodeslot=0x134E, }, [0x134F]={ category="lo", description="ETHIOPIC SYLLABLE FWA", direction="l", linebreak="al", unicodeslot=0x134F, }, [0x1350]={ category="lo", description="ETHIOPIC SYLLABLE PA", direction="l", linebreak="al", unicodeslot=0x1350, }, [0x1351]={ category="lo", description="ETHIOPIC SYLLABLE PU", direction="l", linebreak="al", unicodeslot=0x1351, }, [0x1352]={ category="lo", description="ETHIOPIC SYLLABLE PI", direction="l", linebreak="al", unicodeslot=0x1352, }, [0x1353]={ category="lo", description="ETHIOPIC SYLLABLE PAA", direction="l", linebreak="al", unicodeslot=0x1353, }, [0x1354]={ category="lo", description="ETHIOPIC SYLLABLE PEE", direction="l", linebreak="al", unicodeslot=0x1354, }, [0x1355]={ category="lo", description="ETHIOPIC SYLLABLE PE", direction="l", linebreak="al", unicodeslot=0x1355, }, [0x1356]={ category="lo", description="ETHIOPIC SYLLABLE PO", direction="l", linebreak="al", unicodeslot=0x1356, }, [0x1357]={ category="lo", description="ETHIOPIC SYLLABLE PWA", direction="l", linebreak="al", unicodeslot=0x1357, }, [0x1358]={ category="lo", description="ETHIOPIC SYLLABLE RYA", direction="l", linebreak="al", unicodeslot=0x1358, }, [0x1359]={ category="lo", description="ETHIOPIC SYLLABLE MYA", direction="l", linebreak="al", unicodeslot=0x1359, }, [0x135A]={ category="lo", description="ETHIOPIC SYLLABLE FYA", direction="l", linebreak="al", unicodeslot=0x135A, }, [0x135D]={ category="mn", description="ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK", direction="nsm", linebreak="cm", unicodeslot=0x135D, }, [0x135E]={ category="mn", description="ETHIOPIC COMBINING VOWEL LENGTH MARK", direction="nsm", linebreak="cm", unicodeslot=0x135E, }, [0x135F]={ category="mn", description="ETHIOPIC COMBINING GEMINATION MARK", direction="nsm", linebreak="cm", unicodeslot=0x135F, }, [0x1360]={ category="so", description="ETHIOPIC SECTION MARK", direction="l", linebreak="al", unicodeslot=0x1360, }, [0x1361]={ category="po", description="ETHIOPIC WORDSPACE", direction="l", linebreak="ba", unicodeslot=0x1361, }, [0x1362]={ category="po", description="ETHIOPIC FULL STOP", direction="l", linebreak="al", unicodeslot=0x1362, }, [0x1363]={ category="po", description="ETHIOPIC COMMA", direction="l", linebreak="al", unicodeslot=0x1363, }, [0x1364]={ category="po", description="ETHIOPIC SEMICOLON", direction="l", linebreak="al", unicodeslot=0x1364, }, [0x1365]={ category="po", description="ETHIOPIC COLON", direction="l", linebreak="al", unicodeslot=0x1365, }, [0x1366]={ category="po", description="ETHIOPIC PREFACE COLON", direction="l", linebreak="al", unicodeslot=0x1366, }, [0x1367]={ category="po", description="ETHIOPIC QUESTION MARK", direction="l", linebreak="al", unicodeslot=0x1367, }, [0x1368]={ category="po", description="ETHIOPIC PARAGRAPH SEPARATOR", direction="l", linebreak="al", unicodeslot=0x1368, }, [0x1369]={ category="no", description="ETHIOPIC DIGIT ONE", direction="l", linebreak="al", unicodeslot=0x1369, }, [0x136A]={ category="no", description="ETHIOPIC DIGIT TWO", direction="l", linebreak="al", unicodeslot=0x136A, }, [0x136B]={ category="no", description="ETHIOPIC DIGIT THREE", direction="l", linebreak="al", unicodeslot=0x136B, }, [0x136C]={ category="no", description="ETHIOPIC DIGIT FOUR", direction="l", linebreak="al", unicodeslot=0x136C, }, [0x136D]={ category="no", description="ETHIOPIC DIGIT FIVE", direction="l", linebreak="al", unicodeslot=0x136D, }, [0x136E]={ category="no", description="ETHIOPIC DIGIT SIX", direction="l", linebreak="al", unicodeslot=0x136E, }, [0x136F]={ category="no", description="ETHIOPIC DIGIT SEVEN", direction="l", linebreak="al", unicodeslot=0x136F, }, [0x1370]={ category="no", description="ETHIOPIC DIGIT EIGHT", direction="l", linebreak="al", unicodeslot=0x1370, }, [0x1371]={ category="no", description="ETHIOPIC DIGIT NINE", direction="l", linebreak="al", unicodeslot=0x1371, }, [0x1372]={ category="no", description="ETHIOPIC NUMBER TEN", direction="l", linebreak="al", unicodeslot=0x1372, }, [0x1373]={ category="no", description="ETHIOPIC NUMBER TWENTY", direction="l", linebreak="al", unicodeslot=0x1373, }, [0x1374]={ category="no", description="ETHIOPIC NUMBER THIRTY", direction="l", linebreak="al", unicodeslot=0x1374, }, [0x1375]={ category="no", description="ETHIOPIC NUMBER FORTY", direction="l", linebreak="al", unicodeslot=0x1375, }, [0x1376]={ category="no", description="ETHIOPIC NUMBER FIFTY", direction="l", linebreak="al", unicodeslot=0x1376, }, [0x1377]={ category="no", description="ETHIOPIC NUMBER SIXTY", direction="l", linebreak="al", unicodeslot=0x1377, }, [0x1378]={ category="no", description="ETHIOPIC NUMBER SEVENTY", direction="l", linebreak="al", unicodeslot=0x1378, }, [0x1379]={ category="no", description="ETHIOPIC NUMBER EIGHTY", direction="l", linebreak="al", unicodeslot=0x1379, }, [0x137A]={ category="no", description="ETHIOPIC NUMBER NINETY", direction="l", linebreak="al", unicodeslot=0x137A, }, [0x137B]={ category="no", description="ETHIOPIC NUMBER HUNDRED", direction="l", linebreak="al", unicodeslot=0x137B, }, [0x137C]={ category="no", description="ETHIOPIC NUMBER TEN THOUSAND", direction="l", linebreak="al", unicodeslot=0x137C, }, [0x1380]={ category="lo", description="ETHIOPIC SYLLABLE SEBATBEIT MWA", direction="l", linebreak="al", unicodeslot=0x1380, }, [0x1381]={ category="lo", description="ETHIOPIC SYLLABLE MWI", direction="l", linebreak="al", unicodeslot=0x1381, }, [0x1382]={ category="lo", description="ETHIOPIC SYLLABLE MWEE", direction="l", linebreak="al", unicodeslot=0x1382, }, [0x1383]={ category="lo", description="ETHIOPIC SYLLABLE MWE", direction="l", linebreak="al", unicodeslot=0x1383, }, [0x1384]={ category="lo", description="ETHIOPIC SYLLABLE SEBATBEIT BWA", direction="l", linebreak="al", unicodeslot=0x1384, }, [0x1385]={ category="lo", description="ETHIOPIC SYLLABLE BWI", direction="l", linebreak="al", unicodeslot=0x1385, }, [0x1386]={ category="lo", description="ETHIOPIC SYLLABLE BWEE", direction="l", linebreak="al", unicodeslot=0x1386, }, [0x1387]={ category="lo", description="ETHIOPIC SYLLABLE BWE", direction="l", linebreak="al", unicodeslot=0x1387, }, [0x1388]={ category="lo", description="ETHIOPIC SYLLABLE SEBATBEIT FWA", direction="l", linebreak="al", unicodeslot=0x1388, }, [0x1389]={ category="lo", description="ETHIOPIC SYLLABLE FWI", direction="l", linebreak="al", unicodeslot=0x1389, }, [0x138A]={ category="lo", description="ETHIOPIC SYLLABLE FWEE", direction="l", linebreak="al", unicodeslot=0x138A, }, [0x138B]={ category="lo", description="ETHIOPIC SYLLABLE FWE", direction="l", linebreak="al", unicodeslot=0x138B, }, [0x138C]={ category="lo", description="ETHIOPIC SYLLABLE SEBATBEIT PWA", direction="l", linebreak="al", unicodeslot=0x138C, }, [0x138D]={ category="lo", description="ETHIOPIC SYLLABLE PWI", direction="l", linebreak="al", unicodeslot=0x138D, }, [0x138E]={ category="lo", description="ETHIOPIC SYLLABLE PWEE", direction="l", linebreak="al", unicodeslot=0x138E, }, [0x138F]={ category="lo", description="ETHIOPIC SYLLABLE PWE", direction="l", linebreak="al", unicodeslot=0x138F, }, [0x1390]={ category="so", description="ETHIOPIC TONAL MARK YIZET", direction="on", linebreak="al", unicodeslot=0x1390, }, [0x1391]={ category="so", description="ETHIOPIC TONAL MARK DERET", direction="on", linebreak="al", unicodeslot=0x1391, }, [0x1392]={ category="so", description="ETHIOPIC TONAL MARK RIKRIK", direction="on", linebreak="al", unicodeslot=0x1392, }, [0x1393]={ category="so", description="ETHIOPIC TONAL MARK SHORT RIKRIK", direction="on", linebreak="al", unicodeslot=0x1393, }, [0x1394]={ category="so", description="ETHIOPIC TONAL MARK DIFAT", direction="on", linebreak="al", unicodeslot=0x1394, }, [0x1395]={ category="so", description="ETHIOPIC TONAL MARK KENAT", direction="on", linebreak="al", unicodeslot=0x1395, }, [0x1396]={ category="so", description="ETHIOPIC TONAL MARK CHIRET", direction="on", linebreak="al", unicodeslot=0x1396, }, [0x1397]={ category="so", description="ETHIOPIC TONAL MARK HIDET", direction="on", linebreak="al", unicodeslot=0x1397, }, [0x1398]={ category="so", description="ETHIOPIC TONAL MARK DERET-HIDET", direction="on", linebreak="al", unicodeslot=0x1398, }, [0x1399]={ category="so", description="ETHIOPIC TONAL MARK KURT", direction="on", linebreak="al", unicodeslot=0x1399, }, [0x13A0]={ category="lo", description="CHEROKEE LETTER A", direction="l", linebreak="al", unicodeslot=0x13A0, }, [0x13A1]={ category="lo", description="CHEROKEE LETTER E", direction="l", linebreak="al", unicodeslot=0x13A1, }, [0x13A2]={ category="lo", description="CHEROKEE LETTER I", direction="l", linebreak="al", unicodeslot=0x13A2, }, [0x13A3]={ category="lo", description="CHEROKEE LETTER O", direction="l", linebreak="al", unicodeslot=0x13A3, }, [0x13A4]={ category="lo", description="CHEROKEE LETTER U", direction="l", linebreak="al", unicodeslot=0x13A4, }, [0x13A5]={ category="lo", description="CHEROKEE LETTER V", direction="l", linebreak="al", unicodeslot=0x13A5, }, [0x13A6]={ category="lo", description="CHEROKEE LETTER GA", direction="l", linebreak="al", unicodeslot=0x13A6, }, [0x13A7]={ category="lo", description="CHEROKEE LETTER KA", direction="l", linebreak="al", unicodeslot=0x13A7, }, [0x13A8]={ category="lo", description="CHEROKEE LETTER GE", direction="l", linebreak="al", unicodeslot=0x13A8, }, [0x13A9]={ category="lo", description="CHEROKEE LETTER GI", direction="l", linebreak="al", unicodeslot=0x13A9, }, [0x13AA]={ category="lo", description="CHEROKEE LETTER GO", direction="l", linebreak="al", unicodeslot=0x13AA, }, [0x13AB]={ category="lo", description="CHEROKEE LETTER GU", direction="l", linebreak="al", unicodeslot=0x13AB, }, [0x13AC]={ category="lo", description="CHEROKEE LETTER GV", direction="l", linebreak="al", unicodeslot=0x13AC, }, [0x13AD]={ category="lo", description="CHEROKEE LETTER HA", direction="l", linebreak="al", unicodeslot=0x13AD, }, [0x13AE]={ category="lo", description="CHEROKEE LETTER HE", direction="l", linebreak="al", unicodeslot=0x13AE, }, [0x13AF]={ category="lo", description="CHEROKEE LETTER HI", direction="l", linebreak="al", unicodeslot=0x13AF, }, [0x13B0]={ category="lo", description="CHEROKEE LETTER HO", direction="l", linebreak="al", unicodeslot=0x13B0, }, [0x13B1]={ category="lo", description="CHEROKEE LETTER HU", direction="l", linebreak="al", unicodeslot=0x13B1, }, [0x13B2]={ category="lo", description="CHEROKEE LETTER HV", direction="l", linebreak="al", unicodeslot=0x13B2, }, [0x13B3]={ category="lo", description="CHEROKEE LETTER LA", direction="l", linebreak="al", unicodeslot=0x13B3, }, [0x13B4]={ category="lo", description="CHEROKEE LETTER LE", direction="l", linebreak="al", unicodeslot=0x13B4, }, [0x13B5]={ category="lo", description="CHEROKEE LETTER LI", direction="l", linebreak="al", unicodeslot=0x13B5, }, [0x13B6]={ category="lo", description="CHEROKEE LETTER LO", direction="l", linebreak="al", unicodeslot=0x13B6, }, [0x13B7]={ category="lo", description="CHEROKEE LETTER LU", direction="l", linebreak="al", unicodeslot=0x13B7, }, [0x13B8]={ category="lo", description="CHEROKEE LETTER LV", direction="l", linebreak="al", unicodeslot=0x13B8, }, [0x13B9]={ category="lo", description="CHEROKEE LETTER MA", direction="l", linebreak="al", unicodeslot=0x13B9, }, [0x13BA]={ category="lo", description="CHEROKEE LETTER ME", direction="l", linebreak="al", unicodeslot=0x13BA, }, [0x13BB]={ category="lo", description="CHEROKEE LETTER MI", direction="l", linebreak="al", unicodeslot=0x13BB, }, [0x13BC]={ category="lo", description="CHEROKEE LETTER MO", direction="l", linebreak="al", unicodeslot=0x13BC, }, [0x13BD]={ category="lo", description="CHEROKEE LETTER MU", direction="l", linebreak="al", unicodeslot=0x13BD, }, [0x13BE]={ category="lo", description="CHEROKEE LETTER NA", direction="l", linebreak="al", unicodeslot=0x13BE, }, [0x13BF]={ category="lo", description="CHEROKEE LETTER HNA", direction="l", linebreak="al", unicodeslot=0x13BF, }, [0x13C0]={ category="lo", description="CHEROKEE LETTER NAH", direction="l", linebreak="al", unicodeslot=0x13C0, }, [0x13C1]={ category="lo", description="CHEROKEE LETTER NE", direction="l", linebreak="al", unicodeslot=0x13C1, }, [0x13C2]={ category="lo", description="CHEROKEE LETTER NI", direction="l", linebreak="al", unicodeslot=0x13C2, }, [0x13C3]={ category="lo", description="CHEROKEE LETTER NO", direction="l", linebreak="al", unicodeslot=0x13C3, }, [0x13C4]={ category="lo", description="CHEROKEE LETTER NU", direction="l", linebreak="al", unicodeslot=0x13C4, }, [0x13C5]={ category="lo", description="CHEROKEE LETTER NV", direction="l", linebreak="al", unicodeslot=0x13C5, }, [0x13C6]={ category="lo", description="CHEROKEE LETTER QUA", direction="l", linebreak="al", unicodeslot=0x13C6, }, [0x13C7]={ category="lo", description="CHEROKEE LETTER QUE", direction="l", linebreak="al", unicodeslot=0x13C7, }, [0x13C8]={ category="lo", description="CHEROKEE LETTER QUI", direction="l", linebreak="al", unicodeslot=0x13C8, }, [0x13C9]={ category="lo", description="CHEROKEE LETTER QUO", direction="l", linebreak="al", unicodeslot=0x13C9, }, [0x13CA]={ category="lo", description="CHEROKEE LETTER QUU", direction="l", linebreak="al", unicodeslot=0x13CA, }, [0x13CB]={ category="lo", description="CHEROKEE LETTER QUV", direction="l", linebreak="al", unicodeslot=0x13CB, }, [0x13CC]={ category="lo", description="CHEROKEE LETTER SA", direction="l", linebreak="al", unicodeslot=0x13CC, }, [0x13CD]={ category="lo", description="CHEROKEE LETTER S", direction="l", linebreak="al", unicodeslot=0x13CD, }, [0x13CE]={ category="lo", description="CHEROKEE LETTER SE", direction="l", linebreak="al", unicodeslot=0x13CE, }, [0x13CF]={ category="lo", description="CHEROKEE LETTER SI", direction="l", linebreak="al", unicodeslot=0x13CF, }, [0x13D0]={ category="lo", description="CHEROKEE LETTER SO", direction="l", linebreak="al", unicodeslot=0x13D0, }, [0x13D1]={ category="lo", description="CHEROKEE LETTER SU", direction="l", linebreak="al", unicodeslot=0x13D1, }, [0x13D2]={ category="lo", description="CHEROKEE LETTER SV", direction="l", linebreak="al", unicodeslot=0x13D2, }, [0x13D3]={ category="lo", description="CHEROKEE LETTER DA", direction="l", linebreak="al", unicodeslot=0x13D3, }, [0x13D4]={ category="lo", description="CHEROKEE LETTER TA", direction="l", linebreak="al", unicodeslot=0x13D4, }, [0x13D5]={ category="lo", description="CHEROKEE LETTER DE", direction="l", linebreak="al", unicodeslot=0x13D5, }, [0x13D6]={ category="lo", description="CHEROKEE LETTER TE", direction="l", linebreak="al", unicodeslot=0x13D6, }, [0x13D7]={ category="lo", description="CHEROKEE LETTER DI", direction="l", linebreak="al", unicodeslot=0x13D7, }, [0x13D8]={ category="lo", description="CHEROKEE LETTER TI", direction="l", linebreak="al", unicodeslot=0x13D8, }, [0x13D9]={ category="lo", description="CHEROKEE LETTER DO", direction="l", linebreak="al", unicodeslot=0x13D9, }, [0x13DA]={ category="lo", description="CHEROKEE LETTER DU", direction="l", linebreak="al", unicodeslot=0x13DA, }, [0x13DB]={ category="lo", description="CHEROKEE LETTER DV", direction="l", linebreak="al", unicodeslot=0x13DB, }, [0x13DC]={ category="lo", description="CHEROKEE LETTER DLA", direction="l", linebreak="al", unicodeslot=0x13DC, }, [0x13DD]={ category="lo", description="CHEROKEE LETTER TLA", direction="l", linebreak="al", unicodeslot=0x13DD, }, [0x13DE]={ category="lo", description="CHEROKEE LETTER TLE", direction="l", linebreak="al", unicodeslot=0x13DE, }, [0x13DF]={ category="lo", description="CHEROKEE LETTER TLI", direction="l", linebreak="al", unicodeslot=0x13DF, }, [0x13E0]={ category="lo", description="CHEROKEE LETTER TLO", direction="l", linebreak="al", unicodeslot=0x13E0, }, [0x13E1]={ category="lo", description="CHEROKEE LETTER TLU", direction="l", linebreak="al", unicodeslot=0x13E1, }, [0x13E2]={ category="lo", description="CHEROKEE LETTER TLV", direction="l", linebreak="al", unicodeslot=0x13E2, }, [0x13E3]={ category="lo", description="CHEROKEE LETTER TSA", direction="l", linebreak="al", unicodeslot=0x13E3, }, [0x13E4]={ category="lo", description="CHEROKEE LETTER TSE", direction="l", linebreak="al", unicodeslot=0x13E4, }, [0x13E5]={ category="lo", description="CHEROKEE LETTER TSI", direction="l", linebreak="al", unicodeslot=0x13E5, }, [0x13E6]={ category="lo", description="CHEROKEE LETTER TSO", direction="l", linebreak="al", unicodeslot=0x13E6, }, [0x13E7]={ category="lo", description="CHEROKEE LETTER TSU", direction="l", linebreak="al", unicodeslot=0x13E7, }, [0x13E8]={ category="lo", description="CHEROKEE LETTER TSV", direction="l", linebreak="al", unicodeslot=0x13E8, }, [0x13E9]={ category="lo", description="CHEROKEE LETTER WA", direction="l", linebreak="al", unicodeslot=0x13E9, }, [0x13EA]={ category="lo", description="CHEROKEE LETTER WE", direction="l", linebreak="al", unicodeslot=0x13EA, }, [0x13EB]={ category="lo", description="CHEROKEE LETTER WI", direction="l", linebreak="al", unicodeslot=0x13EB, }, [0x13EC]={ category="lo", description="CHEROKEE LETTER WO", direction="l", linebreak="al", unicodeslot=0x13EC, }, [0x13ED]={ category="lo", description="CHEROKEE LETTER WU", direction="l", linebreak="al", unicodeslot=0x13ED, }, [0x13EE]={ category="lo", description="CHEROKEE LETTER WV", direction="l", linebreak="al", unicodeslot=0x13EE, }, [0x13EF]={ category="lo", description="CHEROKEE LETTER YA", direction="l", linebreak="al", unicodeslot=0x13EF, }, [0x13F0]={ category="lo", description="CHEROKEE LETTER YE", direction="l", linebreak="al", unicodeslot=0x13F0, }, [0x13F1]={ category="lo", description="CHEROKEE LETTER YI", direction="l", linebreak="al", unicodeslot=0x13F1, }, [0x13F2]={ category="lo", description="CHEROKEE LETTER YO", direction="l", linebreak="al", unicodeslot=0x13F2, }, [0x13F3]={ category="lo", description="CHEROKEE LETTER YU", direction="l", linebreak="al", unicodeslot=0x13F3, }, [0x13F4]={ category="lo", description="CHEROKEE LETTER YV", direction="l", linebreak="al", unicodeslot=0x13F4, }, [0x1400]={ category="pd", description="CANADIAN SYLLABICS HYPHEN", direction="on", linebreak="ba", unicodeslot=0x1400, }, [0x1401]={ category="lo", description="CANADIAN SYLLABICS E", direction="l", linebreak="al", unicodeslot=0x1401, }, [0x1402]={ category="lo", description="CANADIAN SYLLABICS AAI", direction="l", linebreak="al", unicodeslot=0x1402, }, [0x1403]={ category="lo", description="CANADIAN SYLLABICS I", direction="l", linebreak="al", unicodeslot=0x1403, }, [0x1404]={ category="lo", description="CANADIAN SYLLABICS II", direction="l", linebreak="al", unicodeslot=0x1404, }, [0x1405]={ category="lo", description="CANADIAN SYLLABICS O", direction="l", linebreak="al", unicodeslot=0x1405, }, [0x1406]={ category="lo", description="CANADIAN SYLLABICS OO", direction="l", linebreak="al", unicodeslot=0x1406, }, [0x1407]={ category="lo", description="CANADIAN SYLLABICS Y-CREE OO", direction="l", linebreak="al", unicodeslot=0x1407, }, [0x1408]={ category="lo", description="CANADIAN SYLLABICS CARRIER EE", direction="l", linebreak="al", unicodeslot=0x1408, }, [0x1409]={ category="lo", description="CANADIAN SYLLABICS CARRIER I", direction="l", linebreak="al", unicodeslot=0x1409, }, [0x140A]={ category="lo", description="CANADIAN SYLLABICS A", direction="l", linebreak="al", unicodeslot=0x140A, }, [0x140B]={ category="lo", description="CANADIAN SYLLABICS AA", direction="l", linebreak="al", unicodeslot=0x140B, }, [0x140C]={ category="lo", description="CANADIAN SYLLABICS WE", direction="l", linebreak="al", unicodeslot=0x140C, }, [0x140D]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WE", direction="l", linebreak="al", unicodeslot=0x140D, }, [0x140E]={ category="lo", description="CANADIAN SYLLABICS WI", direction="l", linebreak="al", unicodeslot=0x140E, }, [0x140F]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WI", direction="l", linebreak="al", unicodeslot=0x140F, }, [0x1410]={ category="lo", description="CANADIAN SYLLABICS WII", direction="l", linebreak="al", unicodeslot=0x1410, }, [0x1411]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WII", direction="l", linebreak="al", unicodeslot=0x1411, }, [0x1412]={ category="lo", description="CANADIAN SYLLABICS WO", direction="l", linebreak="al", unicodeslot=0x1412, }, [0x1413]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WO", direction="l", linebreak="al", unicodeslot=0x1413, }, [0x1414]={ category="lo", description="CANADIAN SYLLABICS WOO", direction="l", linebreak="al", unicodeslot=0x1414, }, [0x1415]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WOO", direction="l", linebreak="al", unicodeslot=0x1415, }, [0x1416]={ category="lo", description="CANADIAN SYLLABICS NASKAPI WOO", direction="l", linebreak="al", unicodeslot=0x1416, }, [0x1417]={ category="lo", description="CANADIAN SYLLABICS WA", direction="l", linebreak="al", unicodeslot=0x1417, }, [0x1418]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WA", direction="l", linebreak="al", unicodeslot=0x1418, }, [0x1419]={ category="lo", description="CANADIAN SYLLABICS WAA", direction="l", linebreak="al", unicodeslot=0x1419, }, [0x141A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE WAA", direction="l", linebreak="al", unicodeslot=0x141A, }, [0x141B]={ category="lo", description="CANADIAN SYLLABICS NASKAPI WAA", direction="l", linebreak="al", unicodeslot=0x141B, }, [0x141C]={ category="lo", description="CANADIAN SYLLABICS AI", direction="l", linebreak="al", unicodeslot=0x141C, }, [0x141D]={ category="lo", description="CANADIAN SYLLABICS Y-CREE W", direction="l", linebreak="al", unicodeslot=0x141D, }, [0x141E]={ category="lo", description="CANADIAN SYLLABICS GLOTTAL STOP", direction="l", linebreak="al", unicodeslot=0x141E, }, [0x141F]={ category="lo", description="CANADIAN SYLLABICS FINAL ACUTE", direction="l", linebreak="al", unicodeslot=0x141F, }, [0x1420]={ category="lo", description="CANADIAN SYLLABICS FINAL GRAVE", direction="l", linebreak="al", unicodeslot=0x1420, }, [0x1421]={ category="lo", description="CANADIAN SYLLABICS FINAL BOTTOM HALF RING", direction="l", linebreak="al", unicodeslot=0x1421, }, [0x1422]={ category="lo", description="CANADIAN SYLLABICS FINAL TOP HALF RING", direction="l", linebreak="al", unicodeslot=0x1422, }, [0x1423]={ category="lo", description="CANADIAN SYLLABICS FINAL RIGHT HALF RING", direction="l", linebreak="al", unicodeslot=0x1423, }, [0x1424]={ category="lo", description="CANADIAN SYLLABICS FINAL RING", direction="l", linebreak="al", unicodeslot=0x1424, }, [0x1425]={ category="lo", description="CANADIAN SYLLABICS FINAL DOUBLE ACUTE", direction="l", linebreak="al", unicodeslot=0x1425, }, [0x1426]={ category="lo", description="CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES", direction="l", linebreak="al", unicodeslot=0x1426, }, [0x1427]={ category="lo", description="CANADIAN SYLLABICS FINAL MIDDLE DOT", direction="l", linebreak="al", unicodeslot=0x1427, }, [0x1428]={ category="lo", description="CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE", direction="l", linebreak="al", unicodeslot=0x1428, }, [0x1429]={ category="lo", description="CANADIAN SYLLABICS FINAL PLUS", direction="l", linebreak="al", unicodeslot=0x1429, }, [0x142A]={ category="lo", description="CANADIAN SYLLABICS FINAL DOWN TACK", direction="l", linebreak="al", unicodeslot=0x142A, }, [0x142B]={ category="lo", description="CANADIAN SYLLABICS EN", direction="l", linebreak="al", unicodeslot=0x142B, }, [0x142C]={ category="lo", description="CANADIAN SYLLABICS IN", direction="l", linebreak="al", unicodeslot=0x142C, }, [0x142D]={ category="lo", description="CANADIAN SYLLABICS ON", direction="l", linebreak="al", unicodeslot=0x142D, }, [0x142E]={ category="lo", description="CANADIAN SYLLABICS AN", direction="l", linebreak="al", unicodeslot=0x142E, }, [0x142F]={ category="lo", description="CANADIAN SYLLABICS PE", direction="l", linebreak="al", unicodeslot=0x142F, }, [0x1430]={ category="lo", description="CANADIAN SYLLABICS PAAI", direction="l", linebreak="al", unicodeslot=0x1430, }, [0x1431]={ category="lo", description="CANADIAN SYLLABICS PI", direction="l", linebreak="al", unicodeslot=0x1431, }, [0x1432]={ category="lo", description="CANADIAN SYLLABICS PII", direction="l", linebreak="al", unicodeslot=0x1432, }, [0x1433]={ category="lo", description="CANADIAN SYLLABICS PO", direction="l", linebreak="al", unicodeslot=0x1433, }, [0x1434]={ category="lo", description="CANADIAN SYLLABICS POO", direction="l", linebreak="al", unicodeslot=0x1434, }, [0x1435]={ category="lo", description="CANADIAN SYLLABICS Y-CREE POO", direction="l", linebreak="al", unicodeslot=0x1435, }, [0x1436]={ category="lo", description="CANADIAN SYLLABICS CARRIER HEE", direction="l", linebreak="al", unicodeslot=0x1436, }, [0x1437]={ category="lo", description="CANADIAN SYLLABICS CARRIER HI", direction="l", linebreak="al", unicodeslot=0x1437, }, [0x1438]={ category="lo", description="CANADIAN SYLLABICS PA", direction="l", linebreak="al", unicodeslot=0x1438, }, [0x1439]={ category="lo", description="CANADIAN SYLLABICS PAA", direction="l", linebreak="al", unicodeslot=0x1439, }, [0x143A]={ category="lo", description="CANADIAN SYLLABICS PWE", direction="l", linebreak="al", unicodeslot=0x143A, }, [0x143B]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWE", direction="l", linebreak="al", unicodeslot=0x143B, }, [0x143C]={ category="lo", description="CANADIAN SYLLABICS PWI", direction="l", linebreak="al", unicodeslot=0x143C, }, [0x143D]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWI", direction="l", linebreak="al", unicodeslot=0x143D, }, [0x143E]={ category="lo", description="CANADIAN SYLLABICS PWII", direction="l", linebreak="al", unicodeslot=0x143E, }, [0x143F]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWII", direction="l", linebreak="al", unicodeslot=0x143F, }, [0x1440]={ category="lo", description="CANADIAN SYLLABICS PWO", direction="l", linebreak="al", unicodeslot=0x1440, }, [0x1441]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWO", direction="l", linebreak="al", unicodeslot=0x1441, }, [0x1442]={ category="lo", description="CANADIAN SYLLABICS PWOO", direction="l", linebreak="al", unicodeslot=0x1442, }, [0x1443]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWOO", direction="l", linebreak="al", unicodeslot=0x1443, }, [0x1444]={ category="lo", description="CANADIAN SYLLABICS PWA", direction="l", linebreak="al", unicodeslot=0x1444, }, [0x1445]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWA", direction="l", linebreak="al", unicodeslot=0x1445, }, [0x1446]={ category="lo", description="CANADIAN SYLLABICS PWAA", direction="l", linebreak="al", unicodeslot=0x1446, }, [0x1447]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE PWAA", direction="l", linebreak="al", unicodeslot=0x1447, }, [0x1448]={ category="lo", description="CANADIAN SYLLABICS Y-CREE PWAA", direction="l", linebreak="al", unicodeslot=0x1448, }, [0x1449]={ category="lo", description="CANADIAN SYLLABICS P", direction="l", linebreak="al", unicodeslot=0x1449, }, [0x144A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE P", direction="l", linebreak="al", unicodeslot=0x144A, }, [0x144B]={ category="lo", description="CANADIAN SYLLABICS CARRIER H", direction="l", linebreak="al", unicodeslot=0x144B, }, [0x144C]={ category="lo", description="CANADIAN SYLLABICS TE", direction="l", linebreak="al", unicodeslot=0x144C, }, [0x144D]={ category="lo", description="CANADIAN SYLLABICS TAAI", direction="l", linebreak="al", unicodeslot=0x144D, }, [0x144E]={ category="lo", description="CANADIAN SYLLABICS TI", direction="l", linebreak="al", unicodeslot=0x144E, }, [0x144F]={ category="lo", description="CANADIAN SYLLABICS TII", direction="l", linebreak="al", unicodeslot=0x144F, }, [0x1450]={ category="lo", description="CANADIAN SYLLABICS TO", direction="l", linebreak="al", unicodeslot=0x1450, }, [0x1451]={ category="lo", description="CANADIAN SYLLABICS TOO", direction="l", linebreak="al", unicodeslot=0x1451, }, [0x1452]={ category="lo", description="CANADIAN SYLLABICS Y-CREE TOO", direction="l", linebreak="al", unicodeslot=0x1452, }, [0x1453]={ category="lo", description="CANADIAN SYLLABICS CARRIER DEE", direction="l", linebreak="al", unicodeslot=0x1453, }, [0x1454]={ category="lo", description="CANADIAN SYLLABICS CARRIER DI", direction="l", linebreak="al", unicodeslot=0x1454, }, [0x1455]={ category="lo", description="CANADIAN SYLLABICS TA", direction="l", linebreak="al", unicodeslot=0x1455, }, [0x1456]={ category="lo", description="CANADIAN SYLLABICS TAA", direction="l", linebreak="al", unicodeslot=0x1456, }, [0x1457]={ category="lo", description="CANADIAN SYLLABICS TWE", direction="l", linebreak="al", unicodeslot=0x1457, }, [0x1458]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWE", direction="l", linebreak="al", unicodeslot=0x1458, }, [0x1459]={ category="lo", description="CANADIAN SYLLABICS TWI", direction="l", linebreak="al", unicodeslot=0x1459, }, [0x145A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWI", direction="l", linebreak="al", unicodeslot=0x145A, }, [0x145B]={ category="lo", description="CANADIAN SYLLABICS TWII", direction="l", linebreak="al", unicodeslot=0x145B, }, [0x145C]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWII", direction="l", linebreak="al", unicodeslot=0x145C, }, [0x145D]={ category="lo", description="CANADIAN SYLLABICS TWO", direction="l", linebreak="al", unicodeslot=0x145D, }, [0x145E]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWO", direction="l", linebreak="al", unicodeslot=0x145E, }, [0x145F]={ category="lo", description="CANADIAN SYLLABICS TWOO", direction="l", linebreak="al", unicodeslot=0x145F, }, [0x1460]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWOO", direction="l", linebreak="al", unicodeslot=0x1460, }, [0x1461]={ category="lo", description="CANADIAN SYLLABICS TWA", direction="l", linebreak="al", unicodeslot=0x1461, }, [0x1462]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWA", direction="l", linebreak="al", unicodeslot=0x1462, }, [0x1463]={ category="lo", description="CANADIAN SYLLABICS TWAA", direction="l", linebreak="al", unicodeslot=0x1463, }, [0x1464]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE TWAA", direction="l", linebreak="al", unicodeslot=0x1464, }, [0x1465]={ category="lo", description="CANADIAN SYLLABICS NASKAPI TWAA", direction="l", linebreak="al", unicodeslot=0x1465, }, [0x1466]={ category="lo", description="CANADIAN SYLLABICS T", direction="l", linebreak="al", unicodeslot=0x1466, }, [0x1467]={ category="lo", description="CANADIAN SYLLABICS TTE", direction="l", linebreak="al", unicodeslot=0x1467, }, [0x1468]={ category="lo", description="CANADIAN SYLLABICS TTI", direction="l", linebreak="al", unicodeslot=0x1468, }, [0x1469]={ category="lo", description="CANADIAN SYLLABICS TTO", direction="l", linebreak="al", unicodeslot=0x1469, }, [0x146A]={ category="lo", description="CANADIAN SYLLABICS TTA", direction="l", linebreak="al", unicodeslot=0x146A, }, [0x146B]={ category="lo", description="CANADIAN SYLLABICS KE", direction="l", linebreak="al", unicodeslot=0x146B, }, [0x146C]={ category="lo", description="CANADIAN SYLLABICS KAAI", direction="l", linebreak="al", unicodeslot=0x146C, }, [0x146D]={ category="lo", description="CANADIAN SYLLABICS KI", direction="l", linebreak="al", unicodeslot=0x146D, }, [0x146E]={ category="lo", description="CANADIAN SYLLABICS KII", direction="l", linebreak="al", unicodeslot=0x146E, }, [0x146F]={ category="lo", description="CANADIAN SYLLABICS KO", direction="l", linebreak="al", unicodeslot=0x146F, }, [0x1470]={ category="lo", description="CANADIAN SYLLABICS KOO", direction="l", linebreak="al", unicodeslot=0x1470, }, [0x1471]={ category="lo", description="CANADIAN SYLLABICS Y-CREE KOO", direction="l", linebreak="al", unicodeslot=0x1471, }, [0x1472]={ category="lo", description="CANADIAN SYLLABICS KA", direction="l", linebreak="al", unicodeslot=0x1472, }, [0x1473]={ category="lo", description="CANADIAN SYLLABICS KAA", direction="l", linebreak="al", unicodeslot=0x1473, }, [0x1474]={ category="lo", description="CANADIAN SYLLABICS KWE", direction="l", linebreak="al", unicodeslot=0x1474, }, [0x1475]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWE", direction="l", linebreak="al", unicodeslot=0x1475, }, [0x1476]={ category="lo", description="CANADIAN SYLLABICS KWI", direction="l", linebreak="al", unicodeslot=0x1476, }, [0x1477]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWI", direction="l", linebreak="al", unicodeslot=0x1477, }, [0x1478]={ category="lo", description="CANADIAN SYLLABICS KWII", direction="l", linebreak="al", unicodeslot=0x1478, }, [0x1479]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWII", direction="l", linebreak="al", unicodeslot=0x1479, }, [0x147A]={ category="lo", description="CANADIAN SYLLABICS KWO", direction="l", linebreak="al", unicodeslot=0x147A, }, [0x147B]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWO", direction="l", linebreak="al", unicodeslot=0x147B, }, [0x147C]={ category="lo", description="CANADIAN SYLLABICS KWOO", direction="l", linebreak="al", unicodeslot=0x147C, }, [0x147D]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWOO", direction="l", linebreak="al", unicodeslot=0x147D, }, [0x147E]={ category="lo", description="CANADIAN SYLLABICS KWA", direction="l", linebreak="al", unicodeslot=0x147E, }, [0x147F]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWA", direction="l", linebreak="al", unicodeslot=0x147F, }, [0x1480]={ category="lo", description="CANADIAN SYLLABICS KWAA", direction="l", linebreak="al", unicodeslot=0x1480, }, [0x1481]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE KWAA", direction="l", linebreak="al", unicodeslot=0x1481, }, [0x1482]={ category="lo", description="CANADIAN SYLLABICS NASKAPI KWAA", direction="l", linebreak="al", unicodeslot=0x1482, }, [0x1483]={ category="lo", description="CANADIAN SYLLABICS K", direction="l", linebreak="al", unicodeslot=0x1483, }, [0x1484]={ category="lo", description="CANADIAN SYLLABICS KW", direction="l", linebreak="al", unicodeslot=0x1484, }, [0x1485]={ category="lo", description="CANADIAN SYLLABICS SOUTH-SLAVEY KEH", direction="l", linebreak="al", unicodeslot=0x1485, }, [0x1486]={ category="lo", description="CANADIAN SYLLABICS SOUTH-SLAVEY KIH", direction="l", linebreak="al", unicodeslot=0x1486, }, [0x1487]={ category="lo", description="CANADIAN SYLLABICS SOUTH-SLAVEY KOH", direction="l", linebreak="al", unicodeslot=0x1487, }, [0x1488]={ category="lo", description="CANADIAN SYLLABICS SOUTH-SLAVEY KAH", direction="l", linebreak="al", unicodeslot=0x1488, }, [0x1489]={ category="lo", description="CANADIAN SYLLABICS CE", direction="l", linebreak="al", unicodeslot=0x1489, }, [0x148A]={ category="lo", description="CANADIAN SYLLABICS CAAI", direction="l", linebreak="al", unicodeslot=0x148A, }, [0x148B]={ category="lo", description="CANADIAN SYLLABICS CI", direction="l", linebreak="al", unicodeslot=0x148B, }, [0x148C]={ category="lo", description="CANADIAN SYLLABICS CII", direction="l", linebreak="al", unicodeslot=0x148C, }, [0x148D]={ category="lo", description="CANADIAN SYLLABICS CO", direction="l", linebreak="al", unicodeslot=0x148D, }, [0x148E]={ category="lo", description="CANADIAN SYLLABICS COO", direction="l", linebreak="al", unicodeslot=0x148E, }, [0x148F]={ category="lo", description="CANADIAN SYLLABICS Y-CREE COO", direction="l", linebreak="al", unicodeslot=0x148F, }, [0x1490]={ category="lo", description="CANADIAN SYLLABICS CA", direction="l", linebreak="al", unicodeslot=0x1490, }, [0x1491]={ category="lo", description="CANADIAN SYLLABICS CAA", direction="l", linebreak="al", unicodeslot=0x1491, }, [0x1492]={ category="lo", description="CANADIAN SYLLABICS CWE", direction="l", linebreak="al", unicodeslot=0x1492, }, [0x1493]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWE", direction="l", linebreak="al", unicodeslot=0x1493, }, [0x1494]={ category="lo", description="CANADIAN SYLLABICS CWI", direction="l", linebreak="al", unicodeslot=0x1494, }, [0x1495]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWI", direction="l", linebreak="al", unicodeslot=0x1495, }, [0x1496]={ category="lo", description="CANADIAN SYLLABICS CWII", direction="l", linebreak="al", unicodeslot=0x1496, }, [0x1497]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWII", direction="l", linebreak="al", unicodeslot=0x1497, }, [0x1498]={ category="lo", description="CANADIAN SYLLABICS CWO", direction="l", linebreak="al", unicodeslot=0x1498, }, [0x1499]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWO", direction="l", linebreak="al", unicodeslot=0x1499, }, [0x149A]={ category="lo", description="CANADIAN SYLLABICS CWOO", direction="l", linebreak="al", unicodeslot=0x149A, }, [0x149B]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWOO", direction="l", linebreak="al", unicodeslot=0x149B, }, [0x149C]={ category="lo", description="CANADIAN SYLLABICS CWA", direction="l", linebreak="al", unicodeslot=0x149C, }, [0x149D]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWA", direction="l", linebreak="al", unicodeslot=0x149D, }, [0x149E]={ category="lo", description="CANADIAN SYLLABICS CWAA", direction="l", linebreak="al", unicodeslot=0x149E, }, [0x149F]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE CWAA", direction="l", linebreak="al", unicodeslot=0x149F, }, [0x14A0]={ category="lo", description="CANADIAN SYLLABICS NASKAPI CWAA", direction="l", linebreak="al", unicodeslot=0x14A0, }, [0x14A1]={ category="lo", description="CANADIAN SYLLABICS C", direction="l", linebreak="al", unicodeslot=0x14A1, }, [0x14A2]={ category="lo", description="CANADIAN SYLLABICS SAYISI TH", direction="l", linebreak="al", unicodeslot=0x14A2, }, [0x14A3]={ category="lo", description="CANADIAN SYLLABICS ME", direction="l", linebreak="al", unicodeslot=0x14A3, }, [0x14A4]={ category="lo", description="CANADIAN SYLLABICS MAAI", direction="l", linebreak="al", unicodeslot=0x14A4, }, [0x14A5]={ category="lo", description="CANADIAN SYLLABICS MI", direction="l", linebreak="al", unicodeslot=0x14A5, }, [0x14A6]={ category="lo", description="CANADIAN SYLLABICS MII", direction="l", linebreak="al", unicodeslot=0x14A6, }, [0x14A7]={ category="lo", description="CANADIAN SYLLABICS MO", direction="l", linebreak="al", unicodeslot=0x14A7, }, [0x14A8]={ category="lo", description="CANADIAN SYLLABICS MOO", direction="l", linebreak="al", unicodeslot=0x14A8, }, [0x14A9]={ category="lo", description="CANADIAN SYLLABICS Y-CREE MOO", direction="l", linebreak="al", unicodeslot=0x14A9, }, [0x14AA]={ category="lo", description="CANADIAN SYLLABICS MA", direction="l", linebreak="al", unicodeslot=0x14AA, }, [0x14AB]={ category="lo", description="CANADIAN SYLLABICS MAA", direction="l", linebreak="al", unicodeslot=0x14AB, }, [0x14AC]={ category="lo", description="CANADIAN SYLLABICS MWE", direction="l", linebreak="al", unicodeslot=0x14AC, }, [0x14AD]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWE", direction="l", linebreak="al", unicodeslot=0x14AD, }, [0x14AE]={ category="lo", description="CANADIAN SYLLABICS MWI", direction="l", linebreak="al", unicodeslot=0x14AE, }, [0x14AF]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWI", direction="l", linebreak="al", unicodeslot=0x14AF, }, [0x14B0]={ category="lo", description="CANADIAN SYLLABICS MWII", direction="l", linebreak="al", unicodeslot=0x14B0, }, [0x14B1]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWII", direction="l", linebreak="al", unicodeslot=0x14B1, }, [0x14B2]={ category="lo", description="CANADIAN SYLLABICS MWO", direction="l", linebreak="al", unicodeslot=0x14B2, }, [0x14B3]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWO", direction="l", linebreak="al", unicodeslot=0x14B3, }, [0x14B4]={ category="lo", description="CANADIAN SYLLABICS MWOO", direction="l", linebreak="al", unicodeslot=0x14B4, }, [0x14B5]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWOO", direction="l", linebreak="al", unicodeslot=0x14B5, }, [0x14B6]={ category="lo", description="CANADIAN SYLLABICS MWA", direction="l", linebreak="al", unicodeslot=0x14B6, }, [0x14B7]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWA", direction="l", linebreak="al", unicodeslot=0x14B7, }, [0x14B8]={ category="lo", description="CANADIAN SYLLABICS MWAA", direction="l", linebreak="al", unicodeslot=0x14B8, }, [0x14B9]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE MWAA", direction="l", linebreak="al", unicodeslot=0x14B9, }, [0x14BA]={ category="lo", description="CANADIAN SYLLABICS NASKAPI MWAA", direction="l", linebreak="al", unicodeslot=0x14BA, }, [0x14BB]={ category="lo", description="CANADIAN SYLLABICS M", direction="l", linebreak="al", unicodeslot=0x14BB, }, [0x14BC]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE M", direction="l", linebreak="al", unicodeslot=0x14BC, }, [0x14BD]={ category="lo", description="CANADIAN SYLLABICS MH", direction="l", linebreak="al", unicodeslot=0x14BD, }, [0x14BE]={ category="lo", description="CANADIAN SYLLABICS ATHAPASCAN M", direction="l", linebreak="al", unicodeslot=0x14BE, }, [0x14BF]={ category="lo", description="CANADIAN SYLLABICS SAYISI M", direction="l", linebreak="al", unicodeslot=0x14BF, }, [0x14C0]={ category="lo", description="CANADIAN SYLLABICS NE", direction="l", linebreak="al", unicodeslot=0x14C0, }, [0x14C1]={ category="lo", description="CANADIAN SYLLABICS NAAI", direction="l", linebreak="al", unicodeslot=0x14C1, }, [0x14C2]={ category="lo", description="CANADIAN SYLLABICS NI", direction="l", linebreak="al", unicodeslot=0x14C2, }, [0x14C3]={ category="lo", description="CANADIAN SYLLABICS NII", direction="l", linebreak="al", unicodeslot=0x14C3, }, [0x14C4]={ category="lo", description="CANADIAN SYLLABICS NO", direction="l", linebreak="al", unicodeslot=0x14C4, }, [0x14C5]={ category="lo", description="CANADIAN SYLLABICS NOO", direction="l", linebreak="al", unicodeslot=0x14C5, }, [0x14C6]={ category="lo", description="CANADIAN SYLLABICS Y-CREE NOO", direction="l", linebreak="al", unicodeslot=0x14C6, }, [0x14C7]={ category="lo", description="CANADIAN SYLLABICS NA", direction="l", linebreak="al", unicodeslot=0x14C7, }, [0x14C8]={ category="lo", description="CANADIAN SYLLABICS NAA", direction="l", linebreak="al", unicodeslot=0x14C8, }, [0x14C9]={ category="lo", description="CANADIAN SYLLABICS NWE", direction="l", linebreak="al", unicodeslot=0x14C9, }, [0x14CA]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE NWE", direction="l", linebreak="al", unicodeslot=0x14CA, }, [0x14CB]={ category="lo", description="CANADIAN SYLLABICS NWA", direction="l", linebreak="al", unicodeslot=0x14CB, }, [0x14CC]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE NWA", direction="l", linebreak="al", unicodeslot=0x14CC, }, [0x14CD]={ category="lo", description="CANADIAN SYLLABICS NWAA", direction="l", linebreak="al", unicodeslot=0x14CD, }, [0x14CE]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE NWAA", direction="l", linebreak="al", unicodeslot=0x14CE, }, [0x14CF]={ category="lo", description="CANADIAN SYLLABICS NASKAPI NWAA", direction="l", linebreak="al", unicodeslot=0x14CF, }, [0x14D0]={ category="lo", description="CANADIAN SYLLABICS N", direction="l", linebreak="al", unicodeslot=0x14D0, }, [0x14D1]={ category="lo", description="CANADIAN SYLLABICS CARRIER NG", direction="l", linebreak="al", unicodeslot=0x14D1, }, [0x14D2]={ category="lo", description="CANADIAN SYLLABICS NH", direction="l", linebreak="al", unicodeslot=0x14D2, }, [0x14D3]={ category="lo", description="CANADIAN SYLLABICS LE", direction="l", linebreak="al", unicodeslot=0x14D3, }, [0x14D4]={ category="lo", description="CANADIAN SYLLABICS LAAI", direction="l", linebreak="al", unicodeslot=0x14D4, }, [0x14D5]={ category="lo", description="CANADIAN SYLLABICS LI", direction="l", linebreak="al", unicodeslot=0x14D5, }, [0x14D6]={ category="lo", description="CANADIAN SYLLABICS LII", direction="l", linebreak="al", unicodeslot=0x14D6, }, [0x14D7]={ category="lo", description="CANADIAN SYLLABICS LO", direction="l", linebreak="al", unicodeslot=0x14D7, }, [0x14D8]={ category="lo", description="CANADIAN SYLLABICS LOO", direction="l", linebreak="al", unicodeslot=0x14D8, }, [0x14D9]={ category="lo", description="CANADIAN SYLLABICS Y-CREE LOO", direction="l", linebreak="al", unicodeslot=0x14D9, }, [0x14DA]={ category="lo", description="CANADIAN SYLLABICS LA", direction="l", linebreak="al", unicodeslot=0x14DA, }, [0x14DB]={ category="lo", description="CANADIAN SYLLABICS LAA", direction="l", linebreak="al", unicodeslot=0x14DB, }, [0x14DC]={ category="lo", description="CANADIAN SYLLABICS LWE", direction="l", linebreak="al", unicodeslot=0x14DC, }, [0x14DD]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWE", direction="l", linebreak="al", unicodeslot=0x14DD, }, [0x14DE]={ category="lo", description="CANADIAN SYLLABICS LWI", direction="l", linebreak="al", unicodeslot=0x14DE, }, [0x14DF]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWI", direction="l", linebreak="al", unicodeslot=0x14DF, }, [0x14E0]={ category="lo", description="CANADIAN SYLLABICS LWII", direction="l", linebreak="al", unicodeslot=0x14E0, }, [0x14E1]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWII", direction="l", linebreak="al", unicodeslot=0x14E1, }, [0x14E2]={ category="lo", description="CANADIAN SYLLABICS LWO", direction="l", linebreak="al", unicodeslot=0x14E2, }, [0x14E3]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWO", direction="l", linebreak="al", unicodeslot=0x14E3, }, [0x14E4]={ category="lo", description="CANADIAN SYLLABICS LWOO", direction="l", linebreak="al", unicodeslot=0x14E4, }, [0x14E5]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWOO", direction="l", linebreak="al", unicodeslot=0x14E5, }, [0x14E6]={ category="lo", description="CANADIAN SYLLABICS LWA", direction="l", linebreak="al", unicodeslot=0x14E6, }, [0x14E7]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWA", direction="l", linebreak="al", unicodeslot=0x14E7, }, [0x14E8]={ category="lo", description="CANADIAN SYLLABICS LWAA", direction="l", linebreak="al", unicodeslot=0x14E8, }, [0x14E9]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LWAA", direction="l", linebreak="al", unicodeslot=0x14E9, }, [0x14EA]={ category="lo", description="CANADIAN SYLLABICS L", direction="l", linebreak="al", unicodeslot=0x14EA, }, [0x14EB]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE L", direction="l", linebreak="al", unicodeslot=0x14EB, }, [0x14EC]={ category="lo", description="CANADIAN SYLLABICS MEDIAL L", direction="l", linebreak="al", unicodeslot=0x14EC, }, [0x14ED]={ category="lo", description="CANADIAN SYLLABICS SE", direction="l", linebreak="al", unicodeslot=0x14ED, }, [0x14EE]={ category="lo", description="CANADIAN SYLLABICS SAAI", direction="l", linebreak="al", unicodeslot=0x14EE, }, [0x14EF]={ category="lo", description="CANADIAN SYLLABICS SI", direction="l", linebreak="al", unicodeslot=0x14EF, }, [0x14F0]={ category="lo", description="CANADIAN SYLLABICS SII", direction="l", linebreak="al", unicodeslot=0x14F0, }, [0x14F1]={ category="lo", description="CANADIAN SYLLABICS SO", direction="l", linebreak="al", unicodeslot=0x14F1, }, [0x14F2]={ category="lo", description="CANADIAN SYLLABICS SOO", direction="l", linebreak="al", unicodeslot=0x14F2, }, [0x14F3]={ category="lo", description="CANADIAN SYLLABICS Y-CREE SOO", direction="l", linebreak="al", unicodeslot=0x14F3, }, [0x14F4]={ category="lo", description="CANADIAN SYLLABICS SA", direction="l", linebreak="al", unicodeslot=0x14F4, }, [0x14F5]={ category="lo", description="CANADIAN SYLLABICS SAA", direction="l", linebreak="al", unicodeslot=0x14F5, }, [0x14F6]={ category="lo", description="CANADIAN SYLLABICS SWE", direction="l", linebreak="al", unicodeslot=0x14F6, }, [0x14F7]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWE", direction="l", linebreak="al", unicodeslot=0x14F7, }, [0x14F8]={ category="lo", description="CANADIAN SYLLABICS SWI", direction="l", linebreak="al", unicodeslot=0x14F8, }, [0x14F9]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWI", direction="l", linebreak="al", unicodeslot=0x14F9, }, [0x14FA]={ category="lo", description="CANADIAN SYLLABICS SWII", direction="l", linebreak="al", unicodeslot=0x14FA, }, [0x14FB]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWII", direction="l", linebreak="al", unicodeslot=0x14FB, }, [0x14FC]={ category="lo", description="CANADIAN SYLLABICS SWO", direction="l", linebreak="al", unicodeslot=0x14FC, }, [0x14FD]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWO", direction="l", linebreak="al", unicodeslot=0x14FD, }, [0x14FE]={ category="lo", description="CANADIAN SYLLABICS SWOO", direction="l", linebreak="al", unicodeslot=0x14FE, }, [0x14FF]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWOO", direction="l", linebreak="al", unicodeslot=0x14FF, }, [0x1500]={ category="lo", description="CANADIAN SYLLABICS SWA", direction="l", linebreak="al", unicodeslot=0x1500, }, [0x1501]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWA", direction="l", linebreak="al", unicodeslot=0x1501, }, [0x1502]={ category="lo", description="CANADIAN SYLLABICS SWAA", direction="l", linebreak="al", unicodeslot=0x1502, }, [0x1503]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SWAA", direction="l", linebreak="al", unicodeslot=0x1503, }, [0x1504]={ category="lo", description="CANADIAN SYLLABICS NASKAPI SWAA", direction="l", linebreak="al", unicodeslot=0x1504, }, [0x1505]={ category="lo", description="CANADIAN SYLLABICS S", direction="l", linebreak="al", unicodeslot=0x1505, }, [0x1506]={ category="lo", description="CANADIAN SYLLABICS ATHAPASCAN S", direction="l", linebreak="al", unicodeslot=0x1506, }, [0x1507]={ category="lo", description="CANADIAN SYLLABICS SW", direction="l", linebreak="al", unicodeslot=0x1507, }, [0x1508]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT S", direction="l", linebreak="al", unicodeslot=0x1508, }, [0x1509]={ category="lo", description="CANADIAN SYLLABICS MOOSE-CREE SK", direction="l", linebreak="al", unicodeslot=0x1509, }, [0x150A]={ category="lo", description="CANADIAN SYLLABICS NASKAPI SKW", direction="l", linebreak="al", unicodeslot=0x150A, }, [0x150B]={ category="lo", description="CANADIAN SYLLABICS NASKAPI S-W", direction="l", linebreak="al", unicodeslot=0x150B, }, [0x150C]={ category="lo", description="CANADIAN SYLLABICS NASKAPI SPWA", direction="l", linebreak="al", unicodeslot=0x150C, }, [0x150D]={ category="lo", description="CANADIAN SYLLABICS NASKAPI STWA", direction="l", linebreak="al", unicodeslot=0x150D, }, [0x150E]={ category="lo", description="CANADIAN SYLLABICS NASKAPI SKWA", direction="l", linebreak="al", unicodeslot=0x150E, }, [0x150F]={ category="lo", description="CANADIAN SYLLABICS NASKAPI SCWA", direction="l", linebreak="al", unicodeslot=0x150F, }, [0x1510]={ category="lo", description="CANADIAN SYLLABICS SHE", direction="l", linebreak="al", unicodeslot=0x1510, }, [0x1511]={ category="lo", description="CANADIAN SYLLABICS SHI", direction="l", linebreak="al", unicodeslot=0x1511, }, [0x1512]={ category="lo", description="CANADIAN SYLLABICS SHII", direction="l", linebreak="al", unicodeslot=0x1512, }, [0x1513]={ category="lo", description="CANADIAN SYLLABICS SHO", direction="l", linebreak="al", unicodeslot=0x1513, }, [0x1514]={ category="lo", description="CANADIAN SYLLABICS SHOO", direction="l", linebreak="al", unicodeslot=0x1514, }, [0x1515]={ category="lo", description="CANADIAN SYLLABICS SHA", direction="l", linebreak="al", unicodeslot=0x1515, }, [0x1516]={ category="lo", description="CANADIAN SYLLABICS SHAA", direction="l", linebreak="al", unicodeslot=0x1516, }, [0x1517]={ category="lo", description="CANADIAN SYLLABICS SHWE", direction="l", linebreak="al", unicodeslot=0x1517, }, [0x1518]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWE", direction="l", linebreak="al", unicodeslot=0x1518, }, [0x1519]={ category="lo", description="CANADIAN SYLLABICS SHWI", direction="l", linebreak="al", unicodeslot=0x1519, }, [0x151A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWI", direction="l", linebreak="al", unicodeslot=0x151A, }, [0x151B]={ category="lo", description="CANADIAN SYLLABICS SHWII", direction="l", linebreak="al", unicodeslot=0x151B, }, [0x151C]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWII", direction="l", linebreak="al", unicodeslot=0x151C, }, [0x151D]={ category="lo", description="CANADIAN SYLLABICS SHWO", direction="l", linebreak="al", unicodeslot=0x151D, }, [0x151E]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWO", direction="l", linebreak="al", unicodeslot=0x151E, }, [0x151F]={ category="lo", description="CANADIAN SYLLABICS SHWOO", direction="l", linebreak="al", unicodeslot=0x151F, }, [0x1520]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWOO", direction="l", linebreak="al", unicodeslot=0x1520, }, [0x1521]={ category="lo", description="CANADIAN SYLLABICS SHWA", direction="l", linebreak="al", unicodeslot=0x1521, }, [0x1522]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWA", direction="l", linebreak="al", unicodeslot=0x1522, }, [0x1523]={ category="lo", description="CANADIAN SYLLABICS SHWAA", direction="l", linebreak="al", unicodeslot=0x1523, }, [0x1524]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE SHWAA", direction="l", linebreak="al", unicodeslot=0x1524, }, [0x1525]={ category="lo", description="CANADIAN SYLLABICS SH", direction="l", linebreak="al", unicodeslot=0x1525, }, [0x1526]={ category="lo", description="CANADIAN SYLLABICS YE", direction="l", linebreak="al", unicodeslot=0x1526, }, [0x1527]={ category="lo", description="CANADIAN SYLLABICS YAAI", direction="l", linebreak="al", unicodeslot=0x1527, }, [0x1528]={ category="lo", description="CANADIAN SYLLABICS YI", direction="l", linebreak="al", unicodeslot=0x1528, }, [0x1529]={ category="lo", description="CANADIAN SYLLABICS YII", direction="l", linebreak="al", unicodeslot=0x1529, }, [0x152A]={ category="lo", description="CANADIAN SYLLABICS YO", direction="l", linebreak="al", unicodeslot=0x152A, }, [0x152B]={ category="lo", description="CANADIAN SYLLABICS YOO", direction="l", linebreak="al", unicodeslot=0x152B, }, [0x152C]={ category="lo", description="CANADIAN SYLLABICS Y-CREE YOO", direction="l", linebreak="al", unicodeslot=0x152C, }, [0x152D]={ category="lo", description="CANADIAN SYLLABICS YA", direction="l", linebreak="al", unicodeslot=0x152D, }, [0x152E]={ category="lo", description="CANADIAN SYLLABICS YAA", direction="l", linebreak="al", unicodeslot=0x152E, }, [0x152F]={ category="lo", description="CANADIAN SYLLABICS YWE", direction="l", linebreak="al", unicodeslot=0x152F, }, [0x1530]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWE", direction="l", linebreak="al", unicodeslot=0x1530, }, [0x1531]={ category="lo", description="CANADIAN SYLLABICS YWI", direction="l", linebreak="al", unicodeslot=0x1531, }, [0x1532]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWI", direction="l", linebreak="al", unicodeslot=0x1532, }, [0x1533]={ category="lo", description="CANADIAN SYLLABICS YWII", direction="l", linebreak="al", unicodeslot=0x1533, }, [0x1534]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWII", direction="l", linebreak="al", unicodeslot=0x1534, }, [0x1535]={ category="lo", description="CANADIAN SYLLABICS YWO", direction="l", linebreak="al", unicodeslot=0x1535, }, [0x1536]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWO", direction="l", linebreak="al", unicodeslot=0x1536, }, [0x1537]={ category="lo", description="CANADIAN SYLLABICS YWOO", direction="l", linebreak="al", unicodeslot=0x1537, }, [0x1538]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWOO", direction="l", linebreak="al", unicodeslot=0x1538, }, [0x1539]={ category="lo", description="CANADIAN SYLLABICS YWA", direction="l", linebreak="al", unicodeslot=0x1539, }, [0x153A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWA", direction="l", linebreak="al", unicodeslot=0x153A, }, [0x153B]={ category="lo", description="CANADIAN SYLLABICS YWAA", direction="l", linebreak="al", unicodeslot=0x153B, }, [0x153C]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE YWAA", direction="l", linebreak="al", unicodeslot=0x153C, }, [0x153D]={ category="lo", description="CANADIAN SYLLABICS NASKAPI YWAA", direction="l", linebreak="al", unicodeslot=0x153D, }, [0x153E]={ category="lo", description="CANADIAN SYLLABICS Y", direction="l", linebreak="al", unicodeslot=0x153E, }, [0x153F]={ category="lo", description="CANADIAN SYLLABICS BIBLE-CREE Y", direction="l", linebreak="al", unicodeslot=0x153F, }, [0x1540]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE Y", direction="l", linebreak="al", unicodeslot=0x1540, }, [0x1541]={ category="lo", description="CANADIAN SYLLABICS SAYISI YI", direction="l", linebreak="al", unicodeslot=0x1541, }, [0x1542]={ category="lo", description="CANADIAN SYLLABICS RE", direction="l", linebreak="al", unicodeslot=0x1542, }, [0x1543]={ category="lo", description="CANADIAN SYLLABICS R-CREE RE", direction="l", linebreak="al", unicodeslot=0x1543, }, [0x1544]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LE", direction="l", linebreak="al", unicodeslot=0x1544, }, [0x1545]={ category="lo", description="CANADIAN SYLLABICS RAAI", direction="l", linebreak="al", unicodeslot=0x1545, }, [0x1546]={ category="lo", description="CANADIAN SYLLABICS RI", direction="l", linebreak="al", unicodeslot=0x1546, }, [0x1547]={ category="lo", description="CANADIAN SYLLABICS RII", direction="l", linebreak="al", unicodeslot=0x1547, }, [0x1548]={ category="lo", description="CANADIAN SYLLABICS RO", direction="l", linebreak="al", unicodeslot=0x1548, }, [0x1549]={ category="lo", description="CANADIAN SYLLABICS ROO", direction="l", linebreak="al", unicodeslot=0x1549, }, [0x154A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LO", direction="l", linebreak="al", unicodeslot=0x154A, }, [0x154B]={ category="lo", description="CANADIAN SYLLABICS RA", direction="l", linebreak="al", unicodeslot=0x154B, }, [0x154C]={ category="lo", description="CANADIAN SYLLABICS RAA", direction="l", linebreak="al", unicodeslot=0x154C, }, [0x154D]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LA", direction="l", linebreak="al", unicodeslot=0x154D, }, [0x154E]={ category="lo", description="CANADIAN SYLLABICS RWAA", direction="l", linebreak="al", unicodeslot=0x154E, }, [0x154F]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE RWAA", direction="l", linebreak="al", unicodeslot=0x154F, }, [0x1550]={ category="lo", description="CANADIAN SYLLABICS R", direction="l", linebreak="al", unicodeslot=0x1550, }, [0x1551]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE R", direction="l", linebreak="al", unicodeslot=0x1551, }, [0x1552]={ category="lo", description="CANADIAN SYLLABICS MEDIAL R", direction="l", linebreak="al", unicodeslot=0x1552, }, [0x1553]={ category="lo", description="CANADIAN SYLLABICS FE", direction="l", linebreak="al", unicodeslot=0x1553, }, [0x1554]={ category="lo", description="CANADIAN SYLLABICS FAAI", direction="l", linebreak="al", unicodeslot=0x1554, }, [0x1555]={ category="lo", description="CANADIAN SYLLABICS FI", direction="l", linebreak="al", unicodeslot=0x1555, }, [0x1556]={ category="lo", description="CANADIAN SYLLABICS FII", direction="l", linebreak="al", unicodeslot=0x1556, }, [0x1557]={ category="lo", description="CANADIAN SYLLABICS FO", direction="l", linebreak="al", unicodeslot=0x1557, }, [0x1558]={ category="lo", description="CANADIAN SYLLABICS FOO", direction="l", linebreak="al", unicodeslot=0x1558, }, [0x1559]={ category="lo", description="CANADIAN SYLLABICS FA", direction="l", linebreak="al", unicodeslot=0x1559, }, [0x155A]={ category="lo", description="CANADIAN SYLLABICS FAA", direction="l", linebreak="al", unicodeslot=0x155A, }, [0x155B]={ category="lo", description="CANADIAN SYLLABICS FWAA", direction="l", linebreak="al", unicodeslot=0x155B, }, [0x155C]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE FWAA", direction="l", linebreak="al", unicodeslot=0x155C, }, [0x155D]={ category="lo", description="CANADIAN SYLLABICS F", direction="l", linebreak="al", unicodeslot=0x155D, }, [0x155E]={ category="lo", description="CANADIAN SYLLABICS THE", direction="l", linebreak="al", unicodeslot=0x155E, }, [0x155F]={ category="lo", description="CANADIAN SYLLABICS N-CREE THE", direction="l", linebreak="al", unicodeslot=0x155F, }, [0x1560]={ category="lo", description="CANADIAN SYLLABICS THI", direction="l", linebreak="al", unicodeslot=0x1560, }, [0x1561]={ category="lo", description="CANADIAN SYLLABICS N-CREE THI", direction="l", linebreak="al", unicodeslot=0x1561, }, [0x1562]={ category="lo", description="CANADIAN SYLLABICS THII", direction="l", linebreak="al", unicodeslot=0x1562, }, [0x1563]={ category="lo", description="CANADIAN SYLLABICS N-CREE THII", direction="l", linebreak="al", unicodeslot=0x1563, }, [0x1564]={ category="lo", description="CANADIAN SYLLABICS THO", direction="l", linebreak="al", unicodeslot=0x1564, }, [0x1565]={ category="lo", description="CANADIAN SYLLABICS THOO", direction="l", linebreak="al", unicodeslot=0x1565, }, [0x1566]={ category="lo", description="CANADIAN SYLLABICS THA", direction="l", linebreak="al", unicodeslot=0x1566, }, [0x1567]={ category="lo", description="CANADIAN SYLLABICS THAA", direction="l", linebreak="al", unicodeslot=0x1567, }, [0x1568]={ category="lo", description="CANADIAN SYLLABICS THWAA", direction="l", linebreak="al", unicodeslot=0x1568, }, [0x1569]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE THWAA", direction="l", linebreak="al", unicodeslot=0x1569, }, [0x156A]={ category="lo", description="CANADIAN SYLLABICS TH", direction="l", linebreak="al", unicodeslot=0x156A, }, [0x156B]={ category="lo", description="CANADIAN SYLLABICS TTHE", direction="l", linebreak="al", unicodeslot=0x156B, }, [0x156C]={ category="lo", description="CANADIAN SYLLABICS TTHI", direction="l", linebreak="al", unicodeslot=0x156C, }, [0x156D]={ category="lo", description="CANADIAN SYLLABICS TTHO", direction="l", linebreak="al", unicodeslot=0x156D, }, [0x156E]={ category="lo", description="CANADIAN SYLLABICS TTHA", direction="l", linebreak="al", unicodeslot=0x156E, }, [0x156F]={ category="lo", description="CANADIAN SYLLABICS TTH", direction="l", linebreak="al", unicodeslot=0x156F, }, [0x1570]={ category="lo", description="CANADIAN SYLLABICS TYE", direction="l", linebreak="al", unicodeslot=0x1570, }, [0x1571]={ category="lo", description="CANADIAN SYLLABICS TYI", direction="l", linebreak="al", unicodeslot=0x1571, }, [0x1572]={ category="lo", description="CANADIAN SYLLABICS TYO", direction="l", linebreak="al", unicodeslot=0x1572, }, [0x1573]={ category="lo", description="CANADIAN SYLLABICS TYA", direction="l", linebreak="al", unicodeslot=0x1573, }, [0x1574]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HE", direction="l", linebreak="al", unicodeslot=0x1574, }, [0x1575]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HI", direction="l", linebreak="al", unicodeslot=0x1575, }, [0x1576]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HII", direction="l", linebreak="al", unicodeslot=0x1576, }, [0x1577]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HO", direction="l", linebreak="al", unicodeslot=0x1577, }, [0x1578]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HOO", direction="l", linebreak="al", unicodeslot=0x1578, }, [0x1579]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HA", direction="l", linebreak="al", unicodeslot=0x1579, }, [0x157A]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK HAA", direction="l", linebreak="al", unicodeslot=0x157A, }, [0x157B]={ category="lo", description="CANADIAN SYLLABICS NUNAVIK H", direction="l", linebreak="al", unicodeslot=0x157B, }, [0x157C]={ category="lo", description="CANADIAN SYLLABICS NUNAVUT H", direction="l", linebreak="al", unicodeslot=0x157C, }, [0x157D]={ category="lo", description="CANADIAN SYLLABICS HK", direction="l", linebreak="al", unicodeslot=0x157D, }, [0x157E]={ category="lo", description="CANADIAN SYLLABICS QAAI", direction="l", linebreak="al", unicodeslot=0x157E, }, [0x157F]={ category="lo", description="CANADIAN SYLLABICS QI", direction="l", linebreak="al", unicodeslot=0x157F, }, [0x1580]={ category="lo", description="CANADIAN SYLLABICS QII", direction="l", linebreak="al", unicodeslot=0x1580, }, [0x1581]={ category="lo", description="CANADIAN SYLLABICS QO", direction="l", linebreak="al", unicodeslot=0x1581, }, [0x1582]={ category="lo", description="CANADIAN SYLLABICS QOO", direction="l", linebreak="al", unicodeslot=0x1582, }, [0x1583]={ category="lo", description="CANADIAN SYLLABICS QA", direction="l", linebreak="al", unicodeslot=0x1583, }, [0x1584]={ category="lo", description="CANADIAN SYLLABICS QAA", direction="l", linebreak="al", unicodeslot=0x1584, }, [0x1585]={ category="lo", description="CANADIAN SYLLABICS Q", direction="l", linebreak="al", unicodeslot=0x1585, }, [0x1586]={ category="lo", description="CANADIAN SYLLABICS TLHE", direction="l", linebreak="al", unicodeslot=0x1586, }, [0x1587]={ category="lo", description="CANADIAN SYLLABICS TLHI", direction="l", linebreak="al", unicodeslot=0x1587, }, [0x1588]={ category="lo", description="CANADIAN SYLLABICS TLHO", direction="l", linebreak="al", unicodeslot=0x1588, }, [0x1589]={ category="lo", description="CANADIAN SYLLABICS TLHA", direction="l", linebreak="al", unicodeslot=0x1589, }, [0x158A]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE RE", direction="l", linebreak="al", unicodeslot=0x158A, }, [0x158B]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE RI", direction="l", linebreak="al", unicodeslot=0x158B, }, [0x158C]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE RO", direction="l", linebreak="al", unicodeslot=0x158C, }, [0x158D]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE RA", direction="l", linebreak="al", unicodeslot=0x158D, }, [0x158E]={ category="lo", description="CANADIAN SYLLABICS NGAAI", direction="l", linebreak="al", unicodeslot=0x158E, }, [0x158F]={ category="lo", description="CANADIAN SYLLABICS NGI", direction="l", linebreak="al", unicodeslot=0x158F, }, [0x1590]={ category="lo", description="CANADIAN SYLLABICS NGII", direction="l", linebreak="al", unicodeslot=0x1590, }, [0x1591]={ category="lo", description="CANADIAN SYLLABICS NGO", direction="l", linebreak="al", unicodeslot=0x1591, }, [0x1592]={ category="lo", description="CANADIAN SYLLABICS NGOO", direction="l", linebreak="al", unicodeslot=0x1592, }, [0x1593]={ category="lo", description="CANADIAN SYLLABICS NGA", direction="l", linebreak="al", unicodeslot=0x1593, }, [0x1594]={ category="lo", description="CANADIAN SYLLABICS NGAA", direction="l", linebreak="al", unicodeslot=0x1594, }, [0x1595]={ category="lo", description="CANADIAN SYLLABICS NG", direction="l", linebreak="al", unicodeslot=0x1595, }, [0x1596]={ category="lo", description="CANADIAN SYLLABICS NNG", direction="l", linebreak="al", unicodeslot=0x1596, }, [0x1597]={ category="lo", description="CANADIAN SYLLABICS SAYISI SHE", direction="l", linebreak="al", unicodeslot=0x1597, }, [0x1598]={ category="lo", description="CANADIAN SYLLABICS SAYISI SHI", direction="l", linebreak="al", unicodeslot=0x1598, }, [0x1599]={ category="lo", description="CANADIAN SYLLABICS SAYISI SHO", direction="l", linebreak="al", unicodeslot=0x1599, }, [0x159A]={ category="lo", description="CANADIAN SYLLABICS SAYISI SHA", direction="l", linebreak="al", unicodeslot=0x159A, }, [0x159B]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THE", direction="l", linebreak="al", unicodeslot=0x159B, }, [0x159C]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THI", direction="l", linebreak="al", unicodeslot=0x159C, }, [0x159D]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THO", direction="l", linebreak="al", unicodeslot=0x159D, }, [0x159E]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THA", direction="l", linebreak="al", unicodeslot=0x159E, }, [0x159F]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE TH", direction="l", linebreak="al", unicodeslot=0x159F, }, [0x15A0]={ category="lo", description="CANADIAN SYLLABICS LHI", direction="l", linebreak="al", unicodeslot=0x15A0, }, [0x15A1]={ category="lo", description="CANADIAN SYLLABICS LHII", direction="l", linebreak="al", unicodeslot=0x15A1, }, [0x15A2]={ category="lo", description="CANADIAN SYLLABICS LHO", direction="l", linebreak="al", unicodeslot=0x15A2, }, [0x15A3]={ category="lo", description="CANADIAN SYLLABICS LHOO", direction="l", linebreak="al", unicodeslot=0x15A3, }, [0x15A4]={ category="lo", description="CANADIAN SYLLABICS LHA", direction="l", linebreak="al", unicodeslot=0x15A4, }, [0x15A5]={ category="lo", description="CANADIAN SYLLABICS LHAA", direction="l", linebreak="al", unicodeslot=0x15A5, }, [0x15A6]={ category="lo", description="CANADIAN SYLLABICS LH", direction="l", linebreak="al", unicodeslot=0x15A6, }, [0x15A7]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THE", direction="l", linebreak="al", unicodeslot=0x15A7, }, [0x15A8]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THI", direction="l", linebreak="al", unicodeslot=0x15A8, }, [0x15A9]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THII", direction="l", linebreak="al", unicodeslot=0x15A9, }, [0x15AA]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THO", direction="l", linebreak="al", unicodeslot=0x15AA, }, [0x15AB]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THOO", direction="l", linebreak="al", unicodeslot=0x15AB, }, [0x15AC]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THA", direction="l", linebreak="al", unicodeslot=0x15AC, }, [0x15AD]={ category="lo", description="CANADIAN SYLLABICS TH-CREE THAA", direction="l", linebreak="al", unicodeslot=0x15AD, }, [0x15AE]={ category="lo", description="CANADIAN SYLLABICS TH-CREE TH", direction="l", linebreak="al", unicodeslot=0x15AE, }, [0x15AF]={ category="lo", description="CANADIAN SYLLABICS AIVILIK B", direction="l", linebreak="al", unicodeslot=0x15AF, }, [0x15B0]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT E", direction="l", linebreak="al", unicodeslot=0x15B0, }, [0x15B1]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT I", direction="l", linebreak="al", unicodeslot=0x15B1, }, [0x15B2]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT O", direction="l", linebreak="al", unicodeslot=0x15B2, }, [0x15B3]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT A", direction="l", linebreak="al", unicodeslot=0x15B3, }, [0x15B4]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT WE", direction="l", linebreak="al", unicodeslot=0x15B4, }, [0x15B5]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT WI", direction="l", linebreak="al", unicodeslot=0x15B5, }, [0x15B6]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT WO", direction="l", linebreak="al", unicodeslot=0x15B6, }, [0x15B7]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT WA", direction="l", linebreak="al", unicodeslot=0x15B7, }, [0x15B8]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT NE", direction="l", linebreak="al", unicodeslot=0x15B8, }, [0x15B9]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT NI", direction="l", linebreak="al", unicodeslot=0x15B9, }, [0x15BA]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT NO", direction="l", linebreak="al", unicodeslot=0x15BA, }, [0x15BB]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT NA", direction="l", linebreak="al", unicodeslot=0x15BB, }, [0x15BC]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT KE", direction="l", linebreak="al", unicodeslot=0x15BC, }, [0x15BD]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT KI", direction="l", linebreak="al", unicodeslot=0x15BD, }, [0x15BE]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT KO", direction="l", linebreak="al", unicodeslot=0x15BE, }, [0x15BF]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT KA", direction="l", linebreak="al", unicodeslot=0x15BF, }, [0x15C0]={ category="lo", description="CANADIAN SYLLABICS SAYISI HE", direction="l", linebreak="al", unicodeslot=0x15C0, }, [0x15C1]={ category="lo", description="CANADIAN SYLLABICS SAYISI HI", direction="l", linebreak="al", unicodeslot=0x15C1, }, [0x15C2]={ category="lo", description="CANADIAN SYLLABICS SAYISI HO", direction="l", linebreak="al", unicodeslot=0x15C2, }, [0x15C3]={ category="lo", description="CANADIAN SYLLABICS SAYISI HA", direction="l", linebreak="al", unicodeslot=0x15C3, }, [0x15C4]={ category="lo", description="CANADIAN SYLLABICS CARRIER GHU", direction="l", linebreak="al", unicodeslot=0x15C4, }, [0x15C5]={ category="lo", description="CANADIAN SYLLABICS CARRIER GHO", direction="l", linebreak="al", unicodeslot=0x15C5, }, [0x15C6]={ category="lo", description="CANADIAN SYLLABICS CARRIER GHE", direction="l", linebreak="al", unicodeslot=0x15C6, }, [0x15C7]={ category="lo", description="CANADIAN SYLLABICS CARRIER GHEE", direction="l", linebreak="al", unicodeslot=0x15C7, }, [0x15C8]={ category="lo", description="CANADIAN SYLLABICS CARRIER GHI", direction="l", linebreak="al", unicodeslot=0x15C8, }, [0x15C9]={ category="lo", description="CANADIAN SYLLABICS CARRIER GHA", direction="l", linebreak="al", unicodeslot=0x15C9, }, [0x15CA]={ category="lo", description="CANADIAN SYLLABICS CARRIER RU", direction="l", linebreak="al", unicodeslot=0x15CA, }, [0x15CB]={ category="lo", description="CANADIAN SYLLABICS CARRIER RO", direction="l", linebreak="al", unicodeslot=0x15CB, }, [0x15CC]={ category="lo", description="CANADIAN SYLLABICS CARRIER RE", direction="l", linebreak="al", unicodeslot=0x15CC, }, [0x15CD]={ category="lo", description="CANADIAN SYLLABICS CARRIER REE", direction="l", linebreak="al", unicodeslot=0x15CD, }, [0x15CE]={ category="lo", description="CANADIAN SYLLABICS CARRIER RI", direction="l", linebreak="al", unicodeslot=0x15CE, }, [0x15CF]={ category="lo", description="CANADIAN SYLLABICS CARRIER RA", direction="l", linebreak="al", unicodeslot=0x15CF, }, [0x15D0]={ category="lo", description="CANADIAN SYLLABICS CARRIER WU", direction="l", linebreak="al", unicodeslot=0x15D0, }, [0x15D1]={ category="lo", description="CANADIAN SYLLABICS CARRIER WO", direction="l", linebreak="al", unicodeslot=0x15D1, }, [0x15D2]={ category="lo", description="CANADIAN SYLLABICS CARRIER WE", direction="l", linebreak="al", unicodeslot=0x15D2, }, [0x15D3]={ category="lo", description="CANADIAN SYLLABICS CARRIER WEE", direction="l", linebreak="al", unicodeslot=0x15D3, }, [0x15D4]={ category="lo", description="CANADIAN SYLLABICS CARRIER WI", direction="l", linebreak="al", unicodeslot=0x15D4, }, [0x15D5]={ category="lo", description="CANADIAN SYLLABICS CARRIER WA", direction="l", linebreak="al", unicodeslot=0x15D5, }, [0x15D6]={ category="lo", description="CANADIAN SYLLABICS CARRIER HWU", direction="l", linebreak="al", unicodeslot=0x15D6, }, [0x15D7]={ category="lo", description="CANADIAN SYLLABICS CARRIER HWO", direction="l", linebreak="al", unicodeslot=0x15D7, }, [0x15D8]={ category="lo", description="CANADIAN SYLLABICS CARRIER HWE", direction="l", linebreak="al", unicodeslot=0x15D8, }, [0x15D9]={ category="lo", description="CANADIAN SYLLABICS CARRIER HWEE", direction="l", linebreak="al", unicodeslot=0x15D9, }, [0x15DA]={ category="lo", description="CANADIAN SYLLABICS CARRIER HWI", direction="l", linebreak="al", unicodeslot=0x15DA, }, [0x15DB]={ category="lo", description="CANADIAN SYLLABICS CARRIER HWA", direction="l", linebreak="al", unicodeslot=0x15DB, }, [0x15DC]={ category="lo", description="CANADIAN SYLLABICS CARRIER THU", direction="l", linebreak="al", unicodeslot=0x15DC, }, [0x15DD]={ category="lo", description="CANADIAN SYLLABICS CARRIER THO", direction="l", linebreak="al", unicodeslot=0x15DD, }, [0x15DE]={ category="lo", description="CANADIAN SYLLABICS CARRIER THE", direction="l", linebreak="al", unicodeslot=0x15DE, }, [0x15DF]={ category="lo", description="CANADIAN SYLLABICS CARRIER THEE", direction="l", linebreak="al", unicodeslot=0x15DF, }, [0x15E0]={ category="lo", description="CANADIAN SYLLABICS CARRIER THI", direction="l", linebreak="al", unicodeslot=0x15E0, }, [0x15E1]={ category="lo", description="CANADIAN SYLLABICS CARRIER THA", direction="l", linebreak="al", unicodeslot=0x15E1, }, [0x15E2]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTU", direction="l", linebreak="al", unicodeslot=0x15E2, }, [0x15E3]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTO", direction="l", linebreak="al", unicodeslot=0x15E3, }, [0x15E4]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTE", direction="l", linebreak="al", unicodeslot=0x15E4, }, [0x15E5]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTEE", direction="l", linebreak="al", unicodeslot=0x15E5, }, [0x15E6]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTI", direction="l", linebreak="al", unicodeslot=0x15E6, }, [0x15E7]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTA", direction="l", linebreak="al", unicodeslot=0x15E7, }, [0x15E8]={ category="lo", description="CANADIAN SYLLABICS CARRIER PU", direction="l", linebreak="al", unicodeslot=0x15E8, }, [0x15E9]={ category="lo", description="CANADIAN SYLLABICS CARRIER PO", direction="l", linebreak="al", unicodeslot=0x15E9, }, [0x15EA]={ category="lo", description="CANADIAN SYLLABICS CARRIER PE", direction="l", linebreak="al", unicodeslot=0x15EA, }, [0x15EB]={ category="lo", description="CANADIAN SYLLABICS CARRIER PEE", direction="l", linebreak="al", unicodeslot=0x15EB, }, [0x15EC]={ category="lo", description="CANADIAN SYLLABICS CARRIER PI", direction="l", linebreak="al", unicodeslot=0x15EC, }, [0x15ED]={ category="lo", description="CANADIAN SYLLABICS CARRIER PA", direction="l", linebreak="al", unicodeslot=0x15ED, }, [0x15EE]={ category="lo", description="CANADIAN SYLLABICS CARRIER P", direction="l", linebreak="al", unicodeslot=0x15EE, }, [0x15EF]={ category="lo", description="CANADIAN SYLLABICS CARRIER GU", direction="l", linebreak="al", unicodeslot=0x15EF, }, [0x15F0]={ category="lo", description="CANADIAN SYLLABICS CARRIER GO", direction="l", linebreak="al", unicodeslot=0x15F0, }, [0x15F1]={ category="lo", description="CANADIAN SYLLABICS CARRIER GE", direction="l", linebreak="al", unicodeslot=0x15F1, }, [0x15F2]={ category="lo", description="CANADIAN SYLLABICS CARRIER GEE", direction="l", linebreak="al", unicodeslot=0x15F2, }, [0x15F3]={ category="lo", description="CANADIAN SYLLABICS CARRIER GI", direction="l", linebreak="al", unicodeslot=0x15F3, }, [0x15F4]={ category="lo", description="CANADIAN SYLLABICS CARRIER GA", direction="l", linebreak="al", unicodeslot=0x15F4, }, [0x15F5]={ category="lo", description="CANADIAN SYLLABICS CARRIER KHU", direction="l", linebreak="al", unicodeslot=0x15F5, }, [0x15F6]={ category="lo", description="CANADIAN SYLLABICS CARRIER KHO", direction="l", linebreak="al", unicodeslot=0x15F6, }, [0x15F7]={ category="lo", description="CANADIAN SYLLABICS CARRIER KHE", direction="l", linebreak="al", unicodeslot=0x15F7, }, [0x15F8]={ category="lo", description="CANADIAN SYLLABICS CARRIER KHEE", direction="l", linebreak="al", unicodeslot=0x15F8, }, [0x15F9]={ category="lo", description="CANADIAN SYLLABICS CARRIER KHI", direction="l", linebreak="al", unicodeslot=0x15F9, }, [0x15FA]={ category="lo", description="CANADIAN SYLLABICS CARRIER KHA", direction="l", linebreak="al", unicodeslot=0x15FA, }, [0x15FB]={ category="lo", description="CANADIAN SYLLABICS CARRIER KKU", direction="l", linebreak="al", unicodeslot=0x15FB, }, [0x15FC]={ category="lo", description="CANADIAN SYLLABICS CARRIER KKO", direction="l", linebreak="al", unicodeslot=0x15FC, }, [0x15FD]={ category="lo", description="CANADIAN SYLLABICS CARRIER KKE", direction="l", linebreak="al", unicodeslot=0x15FD, }, [0x15FE]={ category="lo", description="CANADIAN SYLLABICS CARRIER KKEE", direction="l", linebreak="al", unicodeslot=0x15FE, }, [0x15FF]={ category="lo", description="CANADIAN SYLLABICS CARRIER KKI", direction="l", linebreak="al", unicodeslot=0x15FF, }, [0x1600]={ category="lo", description="CANADIAN SYLLABICS CARRIER KKA", direction="l", linebreak="al", unicodeslot=0x1600, }, [0x1601]={ category="lo", description="CANADIAN SYLLABICS CARRIER KK", direction="l", linebreak="al", unicodeslot=0x1601, }, [0x1602]={ category="lo", description="CANADIAN SYLLABICS CARRIER NU", direction="l", linebreak="al", unicodeslot=0x1602, }, [0x1603]={ category="lo", description="CANADIAN SYLLABICS CARRIER NO", direction="l", linebreak="al", unicodeslot=0x1603, }, [0x1604]={ category="lo", description="CANADIAN SYLLABICS CARRIER NE", direction="l", linebreak="al", unicodeslot=0x1604, }, [0x1605]={ category="lo", description="CANADIAN SYLLABICS CARRIER NEE", direction="l", linebreak="al", unicodeslot=0x1605, }, [0x1606]={ category="lo", description="CANADIAN SYLLABICS CARRIER NI", direction="l", linebreak="al", unicodeslot=0x1606, }, [0x1607]={ category="lo", description="CANADIAN SYLLABICS CARRIER NA", direction="l", linebreak="al", unicodeslot=0x1607, }, [0x1608]={ category="lo", description="CANADIAN SYLLABICS CARRIER MU", direction="l", linebreak="al", unicodeslot=0x1608, }, [0x1609]={ category="lo", description="CANADIAN SYLLABICS CARRIER MO", direction="l", linebreak="al", unicodeslot=0x1609, }, [0x160A]={ category="lo", description="CANADIAN SYLLABICS CARRIER ME", direction="l", linebreak="al", unicodeslot=0x160A, }, [0x160B]={ category="lo", description="CANADIAN SYLLABICS CARRIER MEE", direction="l", linebreak="al", unicodeslot=0x160B, }, [0x160C]={ category="lo", description="CANADIAN SYLLABICS CARRIER MI", direction="l", linebreak="al", unicodeslot=0x160C, }, [0x160D]={ category="lo", description="CANADIAN SYLLABICS CARRIER MA", direction="l", linebreak="al", unicodeslot=0x160D, }, [0x160E]={ category="lo", description="CANADIAN SYLLABICS CARRIER YU", direction="l", linebreak="al", unicodeslot=0x160E, }, [0x160F]={ category="lo", description="CANADIAN SYLLABICS CARRIER YO", direction="l", linebreak="al", unicodeslot=0x160F, }, [0x1610]={ category="lo", description="CANADIAN SYLLABICS CARRIER YE", direction="l", linebreak="al", unicodeslot=0x1610, }, [0x1611]={ category="lo", description="CANADIAN SYLLABICS CARRIER YEE", direction="l", linebreak="al", unicodeslot=0x1611, }, [0x1612]={ category="lo", description="CANADIAN SYLLABICS CARRIER YI", direction="l", linebreak="al", unicodeslot=0x1612, }, [0x1613]={ category="lo", description="CANADIAN SYLLABICS CARRIER YA", direction="l", linebreak="al", unicodeslot=0x1613, }, [0x1614]={ category="lo", description="CANADIAN SYLLABICS CARRIER JU", direction="l", linebreak="al", unicodeslot=0x1614, }, [0x1615]={ category="lo", description="CANADIAN SYLLABICS SAYISI JU", direction="l", linebreak="al", unicodeslot=0x1615, }, [0x1616]={ category="lo", description="CANADIAN SYLLABICS CARRIER JO", direction="l", linebreak="al", unicodeslot=0x1616, }, [0x1617]={ category="lo", description="CANADIAN SYLLABICS CARRIER JE", direction="l", linebreak="al", unicodeslot=0x1617, }, [0x1618]={ category="lo", description="CANADIAN SYLLABICS CARRIER JEE", direction="l", linebreak="al", unicodeslot=0x1618, }, [0x1619]={ category="lo", description="CANADIAN SYLLABICS CARRIER JI", direction="l", linebreak="al", unicodeslot=0x1619, }, [0x161A]={ category="lo", description="CANADIAN SYLLABICS SAYISI JI", direction="l", linebreak="al", unicodeslot=0x161A, }, [0x161B]={ category="lo", description="CANADIAN SYLLABICS CARRIER JA", direction="l", linebreak="al", unicodeslot=0x161B, }, [0x161C]={ category="lo", description="CANADIAN SYLLABICS CARRIER JJU", direction="l", linebreak="al", unicodeslot=0x161C, }, [0x161D]={ category="lo", description="CANADIAN SYLLABICS CARRIER JJO", direction="l", linebreak="al", unicodeslot=0x161D, }, [0x161E]={ category="lo", description="CANADIAN SYLLABICS CARRIER JJE", direction="l", linebreak="al", unicodeslot=0x161E, }, [0x161F]={ category="lo", description="CANADIAN SYLLABICS CARRIER JJEE", direction="l", linebreak="al", unicodeslot=0x161F, }, [0x1620]={ category="lo", description="CANADIAN SYLLABICS CARRIER JJI", direction="l", linebreak="al", unicodeslot=0x1620, }, [0x1621]={ category="lo", description="CANADIAN SYLLABICS CARRIER JJA", direction="l", linebreak="al", unicodeslot=0x1621, }, [0x1622]={ category="lo", description="CANADIAN SYLLABICS CARRIER LU", direction="l", linebreak="al", unicodeslot=0x1622, }, [0x1623]={ category="lo", description="CANADIAN SYLLABICS CARRIER LO", direction="l", linebreak="al", unicodeslot=0x1623, }, [0x1624]={ category="lo", description="CANADIAN SYLLABICS CARRIER LE", direction="l", linebreak="al", unicodeslot=0x1624, }, [0x1625]={ category="lo", description="CANADIAN SYLLABICS CARRIER LEE", direction="l", linebreak="al", unicodeslot=0x1625, }, [0x1626]={ category="lo", description="CANADIAN SYLLABICS CARRIER LI", direction="l", linebreak="al", unicodeslot=0x1626, }, [0x1627]={ category="lo", description="CANADIAN SYLLABICS CARRIER LA", direction="l", linebreak="al", unicodeslot=0x1627, }, [0x1628]={ category="lo", description="CANADIAN SYLLABICS CARRIER DLU", direction="l", linebreak="al", unicodeslot=0x1628, }, [0x1629]={ category="lo", description="CANADIAN SYLLABICS CARRIER DLO", direction="l", linebreak="al", unicodeslot=0x1629, }, [0x162A]={ category="lo", description="CANADIAN SYLLABICS CARRIER DLE", direction="l", linebreak="al", unicodeslot=0x162A, }, [0x162B]={ category="lo", description="CANADIAN SYLLABICS CARRIER DLEE", direction="l", linebreak="al", unicodeslot=0x162B, }, [0x162C]={ category="lo", description="CANADIAN SYLLABICS CARRIER DLI", direction="l", linebreak="al", unicodeslot=0x162C, }, [0x162D]={ category="lo", description="CANADIAN SYLLABICS CARRIER DLA", direction="l", linebreak="al", unicodeslot=0x162D, }, [0x162E]={ category="lo", description="CANADIAN SYLLABICS CARRIER LHU", direction="l", linebreak="al", unicodeslot=0x162E, }, [0x162F]={ category="lo", description="CANADIAN SYLLABICS CARRIER LHO", direction="l", linebreak="al", unicodeslot=0x162F, }, [0x1630]={ category="lo", description="CANADIAN SYLLABICS CARRIER LHE", direction="l", linebreak="al", unicodeslot=0x1630, }, [0x1631]={ category="lo", description="CANADIAN SYLLABICS CARRIER LHEE", direction="l", linebreak="al", unicodeslot=0x1631, }, [0x1632]={ category="lo", description="CANADIAN SYLLABICS CARRIER LHI", direction="l", linebreak="al", unicodeslot=0x1632, }, [0x1633]={ category="lo", description="CANADIAN SYLLABICS CARRIER LHA", direction="l", linebreak="al", unicodeslot=0x1633, }, [0x1634]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLHU", direction="l", linebreak="al", unicodeslot=0x1634, }, [0x1635]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLHO", direction="l", linebreak="al", unicodeslot=0x1635, }, [0x1636]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLHE", direction="l", linebreak="al", unicodeslot=0x1636, }, [0x1637]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLHEE", direction="l", linebreak="al", unicodeslot=0x1637, }, [0x1638]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLHI", direction="l", linebreak="al", unicodeslot=0x1638, }, [0x1639]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLHA", direction="l", linebreak="al", unicodeslot=0x1639, }, [0x163A]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLU", direction="l", linebreak="al", unicodeslot=0x163A, }, [0x163B]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLO", direction="l", linebreak="al", unicodeslot=0x163B, }, [0x163C]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLE", direction="l", linebreak="al", unicodeslot=0x163C, }, [0x163D]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLEE", direction="l", linebreak="al", unicodeslot=0x163D, }, [0x163E]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLI", direction="l", linebreak="al", unicodeslot=0x163E, }, [0x163F]={ category="lo", description="CANADIAN SYLLABICS CARRIER TLA", direction="l", linebreak="al", unicodeslot=0x163F, }, [0x1640]={ category="lo", description="CANADIAN SYLLABICS CARRIER ZU", direction="l", linebreak="al", unicodeslot=0x1640, }, [0x1641]={ category="lo", description="CANADIAN SYLLABICS CARRIER ZO", direction="l", linebreak="al", unicodeslot=0x1641, }, [0x1642]={ category="lo", description="CANADIAN SYLLABICS CARRIER ZE", direction="l", linebreak="al", unicodeslot=0x1642, }, [0x1643]={ category="lo", description="CANADIAN SYLLABICS CARRIER ZEE", direction="l", linebreak="al", unicodeslot=0x1643, }, [0x1644]={ category="lo", description="CANADIAN SYLLABICS CARRIER ZI", direction="l", linebreak="al", unicodeslot=0x1644, }, [0x1645]={ category="lo", description="CANADIAN SYLLABICS CARRIER ZA", direction="l", linebreak="al", unicodeslot=0x1645, }, [0x1646]={ category="lo", description="CANADIAN SYLLABICS CARRIER Z", direction="l", linebreak="al", unicodeslot=0x1646, }, [0x1647]={ category="lo", description="CANADIAN SYLLABICS CARRIER INITIAL Z", direction="l", linebreak="al", unicodeslot=0x1647, }, [0x1648]={ category="lo", description="CANADIAN SYLLABICS CARRIER DZU", direction="l", linebreak="al", unicodeslot=0x1648, }, [0x1649]={ category="lo", description="CANADIAN SYLLABICS CARRIER DZO", direction="l", linebreak="al", unicodeslot=0x1649, }, [0x164A]={ category="lo", description="CANADIAN SYLLABICS CARRIER DZE", direction="l", linebreak="al", unicodeslot=0x164A, }, [0x164B]={ category="lo", description="CANADIAN SYLLABICS CARRIER DZEE", direction="l", linebreak="al", unicodeslot=0x164B, }, [0x164C]={ category="lo", description="CANADIAN SYLLABICS CARRIER DZI", direction="l", linebreak="al", unicodeslot=0x164C, }, [0x164D]={ category="lo", description="CANADIAN SYLLABICS CARRIER DZA", direction="l", linebreak="al", unicodeslot=0x164D, }, [0x164E]={ category="lo", description="CANADIAN SYLLABICS CARRIER SU", direction="l", linebreak="al", unicodeslot=0x164E, }, [0x164F]={ category="lo", description="CANADIAN SYLLABICS CARRIER SO", direction="l", linebreak="al", unicodeslot=0x164F, }, [0x1650]={ category="lo", description="CANADIAN SYLLABICS CARRIER SE", direction="l", linebreak="al", unicodeslot=0x1650, }, [0x1651]={ category="lo", description="CANADIAN SYLLABICS CARRIER SEE", direction="l", linebreak="al", unicodeslot=0x1651, }, [0x1652]={ category="lo", description="CANADIAN SYLLABICS CARRIER SI", direction="l", linebreak="al", unicodeslot=0x1652, }, [0x1653]={ category="lo", description="CANADIAN SYLLABICS CARRIER SA", direction="l", linebreak="al", unicodeslot=0x1653, }, [0x1654]={ category="lo", description="CANADIAN SYLLABICS CARRIER SHU", direction="l", linebreak="al", unicodeslot=0x1654, }, [0x1655]={ category="lo", description="CANADIAN SYLLABICS CARRIER SHO", direction="l", linebreak="al", unicodeslot=0x1655, }, [0x1656]={ category="lo", description="CANADIAN SYLLABICS CARRIER SHE", direction="l", linebreak="al", unicodeslot=0x1656, }, [0x1657]={ category="lo", description="CANADIAN SYLLABICS CARRIER SHEE", direction="l", linebreak="al", unicodeslot=0x1657, }, [0x1658]={ category="lo", description="CANADIAN SYLLABICS CARRIER SHI", direction="l", linebreak="al", unicodeslot=0x1658, }, [0x1659]={ category="lo", description="CANADIAN SYLLABICS CARRIER SHA", direction="l", linebreak="al", unicodeslot=0x1659, }, [0x165A]={ category="lo", description="CANADIAN SYLLABICS CARRIER SH", direction="l", linebreak="al", unicodeslot=0x165A, }, [0x165B]={ category="lo", description="CANADIAN SYLLABICS CARRIER TSU", direction="l", linebreak="al", unicodeslot=0x165B, }, [0x165C]={ category="lo", description="CANADIAN SYLLABICS CARRIER TSO", direction="l", linebreak="al", unicodeslot=0x165C, }, [0x165D]={ category="lo", description="CANADIAN SYLLABICS CARRIER TSE", direction="l", linebreak="al", unicodeslot=0x165D, }, [0x165E]={ category="lo", description="CANADIAN SYLLABICS CARRIER TSEE", direction="l", linebreak="al", unicodeslot=0x165E, }, [0x165F]={ category="lo", description="CANADIAN SYLLABICS CARRIER TSI", direction="l", linebreak="al", unicodeslot=0x165F, }, [0x1660]={ category="lo", description="CANADIAN SYLLABICS CARRIER TSA", direction="l", linebreak="al", unicodeslot=0x1660, }, [0x1661]={ category="lo", description="CANADIAN SYLLABICS CARRIER CHU", direction="l", linebreak="al", unicodeslot=0x1661, }, [0x1662]={ category="lo", description="CANADIAN SYLLABICS CARRIER CHO", direction="l", linebreak="al", unicodeslot=0x1662, }, [0x1663]={ category="lo", description="CANADIAN SYLLABICS CARRIER CHE", direction="l", linebreak="al", unicodeslot=0x1663, }, [0x1664]={ category="lo", description="CANADIAN SYLLABICS CARRIER CHEE", direction="l", linebreak="al", unicodeslot=0x1664, }, [0x1665]={ category="lo", description="CANADIAN SYLLABICS CARRIER CHI", direction="l", linebreak="al", unicodeslot=0x1665, }, [0x1666]={ category="lo", description="CANADIAN SYLLABICS CARRIER CHA", direction="l", linebreak="al", unicodeslot=0x1666, }, [0x1667]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTSU", direction="l", linebreak="al", unicodeslot=0x1667, }, [0x1668]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTSO", direction="l", linebreak="al", unicodeslot=0x1668, }, [0x1669]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTSE", direction="l", linebreak="al", unicodeslot=0x1669, }, [0x166A]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTSEE", direction="l", linebreak="al", unicodeslot=0x166A, }, [0x166B]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTSI", direction="l", linebreak="al", unicodeslot=0x166B, }, [0x166C]={ category="lo", description="CANADIAN SYLLABICS CARRIER TTSA", direction="l", linebreak="al", unicodeslot=0x166C, }, [0x166D]={ category="po", description="CANADIAN SYLLABICS CHI SIGN", direction="l", linebreak="al", unicodeslot=0x166D, }, [0x166E]={ category="po", description="CANADIAN SYLLABICS FULL STOP", direction="l", linebreak="al", unicodeslot=0x166E, }, [0x166F]={ category="lo", description="CANADIAN SYLLABICS QAI", direction="l", linebreak="al", unicodeslot=0x166F, }, [0x1670]={ category="lo", description="CANADIAN SYLLABICS NGAI", direction="l", linebreak="al", unicodeslot=0x1670, }, [0x1671]={ category="lo", description="CANADIAN SYLLABICS NNGI", direction="l", linebreak="al", unicodeslot=0x1671, }, [0x1672]={ category="lo", description="CANADIAN SYLLABICS NNGII", direction="l", linebreak="al", unicodeslot=0x1672, }, [0x1673]={ category="lo", description="CANADIAN SYLLABICS NNGO", direction="l", linebreak="al", unicodeslot=0x1673, }, [0x1674]={ category="lo", description="CANADIAN SYLLABICS NNGOO", direction="l", linebreak="al", unicodeslot=0x1674, }, [0x1675]={ category="lo", description="CANADIAN SYLLABICS NNGA", direction="l", linebreak="al", unicodeslot=0x1675, }, [0x1676]={ category="lo", description="CANADIAN SYLLABICS NNGAA", direction="l", linebreak="al", unicodeslot=0x1676, }, [0x1677]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWEE", direction="l", linebreak="al", unicodeslot=0x1677, }, [0x1678]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWI", direction="l", linebreak="al", unicodeslot=0x1678, }, [0x1679]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWII", direction="l", linebreak="al", unicodeslot=0x1679, }, [0x167A]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWO", direction="l", linebreak="al", unicodeslot=0x167A, }, [0x167B]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWOO", direction="l", linebreak="al", unicodeslot=0x167B, }, [0x167C]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWA", direction="l", linebreak="al", unicodeslot=0x167C, }, [0x167D]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE THWAA", direction="l", linebreak="al", unicodeslot=0x167D, }, [0x167E]={ category="lo", description="CANADIAN SYLLABICS WOODS-CREE FINAL TH", direction="l", linebreak="al", unicodeslot=0x167E, }, [0x167F]={ category="lo", description="CANADIAN SYLLABICS BLACKFOOT W", direction="l", linebreak="al", unicodeslot=0x167F, }, [0x1680]={ category="zs", description="OGHAM SPACE MARK", direction="ws", linebreak="ba", unicodeslot=0x1680, }, [0x1681]={ category="lo", description="OGHAM LETTER BEITH", direction="l", linebreak="al", unicodeslot=0x1681, }, [0x1682]={ category="lo", description="OGHAM LETTER LUIS", direction="l", linebreak="al", unicodeslot=0x1682, }, [0x1683]={ category="lo", description="OGHAM LETTER FEARN", direction="l", linebreak="al", unicodeslot=0x1683, }, [0x1684]={ category="lo", description="OGHAM LETTER SAIL", direction="l", linebreak="al", unicodeslot=0x1684, }, [0x1685]={ category="lo", description="OGHAM LETTER NION", direction="l", linebreak="al", unicodeslot=0x1685, }, [0x1686]={ category="lo", description="OGHAM LETTER UATH", direction="l", linebreak="al", unicodeslot=0x1686, }, [0x1687]={ category="lo", description="OGHAM LETTER DAIR", direction="l", linebreak="al", unicodeslot=0x1687, }, [0x1688]={ category="lo", description="OGHAM LETTER TINNE", direction="l", linebreak="al", unicodeslot=0x1688, }, [0x1689]={ category="lo", description="OGHAM LETTER COLL", direction="l", linebreak="al", unicodeslot=0x1689, }, [0x168A]={ category="lo", description="OGHAM LETTER CEIRT", direction="l", linebreak="al", unicodeslot=0x168A, }, [0x168B]={ category="lo", description="OGHAM LETTER MUIN", direction="l", linebreak="al", unicodeslot=0x168B, }, [0x168C]={ category="lo", description="OGHAM LETTER GORT", direction="l", linebreak="al", unicodeslot=0x168C, }, [0x168D]={ category="lo", description="OGHAM LETTER NGEADAL", direction="l", linebreak="al", unicodeslot=0x168D, }, [0x168E]={ category="lo", description="OGHAM LETTER STRAIF", direction="l", linebreak="al", unicodeslot=0x168E, }, [0x168F]={ category="lo", description="OGHAM LETTER RUIS", direction="l", linebreak="al", unicodeslot=0x168F, }, [0x1690]={ category="lo", description="OGHAM LETTER AILM", direction="l", linebreak="al", unicodeslot=0x1690, }, [0x1691]={ category="lo", description="OGHAM LETTER ONN", direction="l", linebreak="al", unicodeslot=0x1691, }, [0x1692]={ category="lo", description="OGHAM LETTER UR", direction="l", linebreak="al", unicodeslot=0x1692, }, [0x1693]={ category="lo", description="OGHAM LETTER EADHADH", direction="l", linebreak="al", unicodeslot=0x1693, }, [0x1694]={ category="lo", description="OGHAM LETTER IODHADH", direction="l", linebreak="al", unicodeslot=0x1694, }, [0x1695]={ category="lo", description="OGHAM LETTER EABHADH", direction="l", linebreak="al", unicodeslot=0x1695, }, [0x1696]={ category="lo", description="OGHAM LETTER OR", direction="l", linebreak="al", unicodeslot=0x1696, }, [0x1697]={ category="lo", description="OGHAM LETTER UILLEANN", direction="l", linebreak="al", unicodeslot=0x1697, }, [0x1698]={ category="lo", description="OGHAM LETTER IFIN", direction="l", linebreak="al", unicodeslot=0x1698, }, [0x1699]={ category="lo", description="OGHAM LETTER EAMHANCHOLL", direction="l", linebreak="al", unicodeslot=0x1699, }, [0x169A]={ category="lo", description="OGHAM LETTER PEITH", direction="l", linebreak="al", unicodeslot=0x169A, }, [0x169B]={ category="ps", description="OGHAM FEATHER MARK", direction="on", linebreak="op", mirror=0x169C, unicodeslot=0x169B, }, [0x169C]={ category="pe", description="OGHAM REVERSED FEATHER MARK", direction="on", linebreak="cl", mirror=0x169B, unicodeslot=0x169C, }, [0x16A0]={ category="lo", description="RUNIC LETTER FEHU FEOH FE F", direction="l", linebreak="al", unicodeslot=0x16A0, }, [0x16A1]={ category="lo", description="RUNIC LETTER V", direction="l", linebreak="al", unicodeslot=0x16A1, }, [0x16A2]={ category="lo", description="RUNIC LETTER URUZ UR U", direction="l", linebreak="al", unicodeslot=0x16A2, }, [0x16A3]={ category="lo", description="RUNIC LETTER YR", direction="l", linebreak="al", unicodeslot=0x16A3, }, [0x16A4]={ category="lo", description="RUNIC LETTER Y", direction="l", linebreak="al", unicodeslot=0x16A4, }, [0x16A5]={ category="lo", description="RUNIC LETTER W", direction="l", linebreak="al", unicodeslot=0x16A5, }, [0x16A6]={ category="lo", description="RUNIC LETTER THURISAZ THURS THORN", direction="l", linebreak="al", unicodeslot=0x16A6, }, [0x16A7]={ category="lo", description="RUNIC LETTER ETH", direction="l", linebreak="al", unicodeslot=0x16A7, }, [0x16A8]={ category="lo", description="RUNIC LETTER ANSUZ A", direction="l", linebreak="al", unicodeslot=0x16A8, }, [0x16A9]={ category="lo", description="RUNIC LETTER OS O", direction="l", linebreak="al", unicodeslot=0x16A9, }, [0x16AA]={ category="lo", description="RUNIC LETTER AC A", direction="l", linebreak="al", unicodeslot=0x16AA, }, [0x16AB]={ category="lo", description="RUNIC LETTER AESC", direction="l", linebreak="al", unicodeslot=0x16AB, }, [0x16AC]={ category="lo", description="RUNIC LETTER LONG-BRANCH-OSS O", direction="l", linebreak="al", unicodeslot=0x16AC, }, [0x16AD]={ category="lo", description="RUNIC LETTER SHORT-TWIG-OSS O", direction="l", linebreak="al", unicodeslot=0x16AD, }, [0x16AE]={ category="lo", description="RUNIC LETTER O", direction="l", linebreak="al", unicodeslot=0x16AE, }, [0x16AF]={ category="lo", description="RUNIC LETTER OE", direction="l", linebreak="al", unicodeslot=0x16AF, }, [0x16B0]={ category="lo", description="RUNIC LETTER ON", direction="l", linebreak="al", unicodeslot=0x16B0, }, [0x16B1]={ category="lo", description="RUNIC LETTER RAIDO RAD REID R", direction="l", linebreak="al", unicodeslot=0x16B1, }, [0x16B2]={ category="lo", description="RUNIC LETTER KAUNA", direction="l", linebreak="al", unicodeslot=0x16B2, }, [0x16B3]={ category="lo", description="RUNIC LETTER CEN", direction="l", linebreak="al", unicodeslot=0x16B3, }, [0x16B4]={ category="lo", description="RUNIC LETTER KAUN K", direction="l", linebreak="al", unicodeslot=0x16B4, }, [0x16B5]={ category="lo", description="RUNIC LETTER G", direction="l", linebreak="al", unicodeslot=0x16B5, }, [0x16B6]={ category="lo", description="RUNIC LETTER ENG", direction="l", linebreak="al", unicodeslot=0x16B6, }, [0x16B7]={ category="lo", description="RUNIC LETTER GEBO GYFU G", direction="l", linebreak="al", unicodeslot=0x16B7, }, [0x16B8]={ category="lo", description="RUNIC LETTER GAR", direction="l", linebreak="al", unicodeslot=0x16B8, }, [0x16B9]={ category="lo", description="RUNIC LETTER WUNJO WYNN W", direction="l", linebreak="al", unicodeslot=0x16B9, }, [0x16BA]={ category="lo", description="RUNIC LETTER HAGLAZ H", direction="l", linebreak="al", unicodeslot=0x16BA, }, [0x16BB]={ category="lo", description="RUNIC LETTER HAEGL H", direction="l", linebreak="al", unicodeslot=0x16BB, }, [0x16BC]={ category="lo", description="RUNIC LETTER LONG-BRANCH-HAGALL H", direction="l", linebreak="al", unicodeslot=0x16BC, }, [0x16BD]={ category="lo", description="RUNIC LETTER SHORT-TWIG-HAGALL H", direction="l", linebreak="al", unicodeslot=0x16BD, }, [0x16BE]={ category="lo", description="RUNIC LETTER NAUDIZ NYD NAUD N", direction="l", linebreak="al", unicodeslot=0x16BE, }, [0x16BF]={ category="lo", description="RUNIC LETTER SHORT-TWIG-NAUD N", direction="l", linebreak="al", unicodeslot=0x16BF, }, [0x16C0]={ category="lo", description="RUNIC LETTER DOTTED-N", direction="l", linebreak="al", unicodeslot=0x16C0, }, [0x16C1]={ category="lo", description="RUNIC LETTER ISAZ IS ISS I", direction="l", linebreak="al", unicodeslot=0x16C1, }, [0x16C2]={ category="lo", description="RUNIC LETTER E", direction="l", linebreak="al", unicodeslot=0x16C2, }, [0x16C3]={ category="lo", description="RUNIC LETTER JERAN J", direction="l", linebreak="al", unicodeslot=0x16C3, }, [0x16C4]={ category="lo", description="RUNIC LETTER GER", direction="l", linebreak="al", unicodeslot=0x16C4, }, [0x16C5]={ category="lo", description="RUNIC LETTER LONG-BRANCH-AR AE", direction="l", linebreak="al", unicodeslot=0x16C5, }, [0x16C6]={ category="lo", description="RUNIC LETTER SHORT-TWIG-AR A", direction="l", linebreak="al", unicodeslot=0x16C6, }, [0x16C7]={ category="lo", description="RUNIC LETTER IWAZ EOH", direction="l", linebreak="al", unicodeslot=0x16C7, }, [0x16C8]={ category="lo", description="RUNIC LETTER PERTHO PEORTH P", direction="l", linebreak="al", unicodeslot=0x16C8, }, [0x16C9]={ category="lo", description="RUNIC LETTER ALGIZ EOLHX", direction="l", linebreak="al", unicodeslot=0x16C9, }, [0x16CA]={ category="lo", description="RUNIC LETTER SOWILO S", direction="l", linebreak="al", unicodeslot=0x16CA, }, [0x16CB]={ category="lo", description="RUNIC LETTER SIGEL LONG-BRANCH-SOL S", direction="l", linebreak="al", unicodeslot=0x16CB, }, [0x16CC]={ category="lo", description="RUNIC LETTER SHORT-TWIG-SOL S", direction="l", linebreak="al", unicodeslot=0x16CC, }, [0x16CD]={ category="lo", description="RUNIC LETTER C", direction="l", linebreak="al", unicodeslot=0x16CD, }, [0x16CE]={ category="lo", description="RUNIC LETTER Z", direction="l", linebreak="al", unicodeslot=0x16CE, }, [0x16CF]={ category="lo", description="RUNIC LETTER TIWAZ TIR TYR T", direction="l", linebreak="al", unicodeslot=0x16CF, }, [0x16D0]={ category="lo", description="RUNIC LETTER SHORT-TWIG-TYR T", direction="l", linebreak="al", unicodeslot=0x16D0, }, [0x16D1]={ category="lo", description="RUNIC LETTER D", direction="l", linebreak="al", unicodeslot=0x16D1, }, [0x16D2]={ category="lo", description="RUNIC LETTER BERKANAN BEORC BJARKAN B", direction="l", linebreak="al", unicodeslot=0x16D2, }, [0x16D3]={ category="lo", description="RUNIC LETTER SHORT-TWIG-BJARKAN B", direction="l", linebreak="al", unicodeslot=0x16D3, }, [0x16D4]={ category="lo", description="RUNIC LETTER DOTTED-P", direction="l", linebreak="al", unicodeslot=0x16D4, }, [0x16D5]={ category="lo", description="RUNIC LETTER OPEN-P", direction="l", linebreak="al", unicodeslot=0x16D5, }, [0x16D6]={ category="lo", description="RUNIC LETTER EHWAZ EH E", direction="l", linebreak="al", unicodeslot=0x16D6, }, [0x16D7]={ category="lo", description="RUNIC LETTER MANNAZ MAN M", direction="l", linebreak="al", unicodeslot=0x16D7, }, [0x16D8]={ category="lo", description="RUNIC LETTER LONG-BRANCH-MADR M", direction="l", linebreak="al", unicodeslot=0x16D8, }, [0x16D9]={ category="lo", description="RUNIC LETTER SHORT-TWIG-MADR M", direction="l", linebreak="al", unicodeslot=0x16D9, }, [0x16DA]={ category="lo", description="RUNIC LETTER LAUKAZ LAGU LOGR L", direction="l", linebreak="al", unicodeslot=0x16DA, }, [0x16DB]={ category="lo", description="RUNIC LETTER DOTTED-L", direction="l", linebreak="al", unicodeslot=0x16DB, }, [0x16DC]={ category="lo", description="RUNIC LETTER INGWAZ", direction="l", linebreak="al", unicodeslot=0x16DC, }, [0x16DD]={ category="lo", description="RUNIC LETTER ING", direction="l", linebreak="al", unicodeslot=0x16DD, }, [0x16DE]={ category="lo", description="RUNIC LETTER DAGAZ DAEG D", direction="l", linebreak="al", unicodeslot=0x16DE, }, [0x16DF]={ category="lo", description="RUNIC LETTER OTHALAN ETHEL O", direction="l", linebreak="al", unicodeslot=0x16DF, }, [0x16E0]={ category="lo", description="RUNIC LETTER EAR", direction="l", linebreak="al", unicodeslot=0x16E0, }, [0x16E1]={ category="lo", description="RUNIC LETTER IOR", direction="l", linebreak="al", unicodeslot=0x16E1, }, [0x16E2]={ category="lo", description="RUNIC LETTER CWEORTH", direction="l", linebreak="al", unicodeslot=0x16E2, }, [0x16E3]={ category="lo", description="RUNIC LETTER CALC", direction="l", linebreak="al", unicodeslot=0x16E3, }, [0x16E4]={ category="lo", description="RUNIC LETTER CEALC", direction="l", linebreak="al", unicodeslot=0x16E4, }, [0x16E5]={ category="lo", description="RUNIC LETTER STAN", direction="l", linebreak="al", unicodeslot=0x16E5, }, [0x16E6]={ category="lo", description="RUNIC LETTER LONG-BRANCH-YR", direction="l", linebreak="al", unicodeslot=0x16E6, }, [0x16E7]={ category="lo", description="RUNIC LETTER SHORT-TWIG-YR", direction="l", linebreak="al", unicodeslot=0x16E7, }, [0x16E8]={ category="lo", description="RUNIC LETTER ICELANDIC-YR", direction="l", linebreak="al", unicodeslot=0x16E8, }, [0x16E9]={ category="lo", description="RUNIC LETTER Q", direction="l", linebreak="al", unicodeslot=0x16E9, }, [0x16EA]={ category="lo", description="RUNIC LETTER X", direction="l", linebreak="al", unicodeslot=0x16EA, }, [0x16EB]={ category="po", description="RUNIC SINGLE PUNCTUATION", direction="l", linebreak="ba", unicodeslot=0x16EB, }, [0x16EC]={ category="po", description="RUNIC MULTIPLE PUNCTUATION", direction="l", linebreak="ba", unicodeslot=0x16EC, }, [0x16ED]={ category="po", description="RUNIC CROSS PUNCTUATION", direction="l", linebreak="ba", unicodeslot=0x16ED, }, [0x16EE]={ category="nl", description="RUNIC ARLAUG SYMBOL", direction="l", linebreak="al", unicodeslot=0x16EE, }, [0x16EF]={ category="nl", description="RUNIC TVIMADUR SYMBOL", direction="l", linebreak="al", unicodeslot=0x16EF, }, [0x16F0]={ category="nl", description="RUNIC BELGTHOR SYMBOL", direction="l", linebreak="al", unicodeslot=0x16F0, }, [0x1700]={ category="lo", description="TAGALOG LETTER A", direction="l", linebreak="al", unicodeslot=0x1700, }, [0x1701]={ category="lo", description="TAGALOG LETTER I", direction="l", linebreak="al", unicodeslot=0x1701, }, [0x1702]={ category="lo", description="TAGALOG LETTER U", direction="l", linebreak="al", unicodeslot=0x1702, }, [0x1703]={ category="lo", description="TAGALOG LETTER KA", direction="l", linebreak="al", unicodeslot=0x1703, }, [0x1704]={ category="lo", description="TAGALOG LETTER GA", direction="l", linebreak="al", unicodeslot=0x1704, }, [0x1705]={ category="lo", description="TAGALOG LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1705, }, [0x1706]={ category="lo", description="TAGALOG LETTER TA", direction="l", linebreak="al", unicodeslot=0x1706, }, [0x1707]={ category="lo", description="TAGALOG LETTER DA", direction="l", linebreak="al", unicodeslot=0x1707, }, [0x1708]={ category="lo", description="TAGALOG LETTER NA", direction="l", linebreak="al", unicodeslot=0x1708, }, [0x1709]={ category="lo", description="TAGALOG LETTER PA", direction="l", linebreak="al", unicodeslot=0x1709, }, [0x170A]={ category="lo", description="TAGALOG LETTER BA", direction="l", linebreak="al", unicodeslot=0x170A, }, [0x170B]={ category="lo", description="TAGALOG LETTER MA", direction="l", linebreak="al", unicodeslot=0x170B, }, [0x170C]={ category="lo", description="TAGALOG LETTER YA", direction="l", linebreak="al", unicodeslot=0x170C, }, [0x170E]={ category="lo", description="TAGALOG LETTER LA", direction="l", linebreak="al", unicodeslot=0x170E, }, [0x170F]={ category="lo", description="TAGALOG LETTER WA", direction="l", linebreak="al", unicodeslot=0x170F, }, [0x1710]={ category="lo", description="TAGALOG LETTER SA", direction="l", linebreak="al", unicodeslot=0x1710, }, [0x1711]={ category="lo", description="TAGALOG LETTER HA", direction="l", linebreak="al", unicodeslot=0x1711, }, [0x1712]={ category="mn", description="TAGALOG VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1712, }, [0x1713]={ category="mn", description="TAGALOG VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1713, }, [0x1714]={ category="mn", description="TAGALOG SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x1714, }, [0x1720]={ category="lo", description="HANUNOO LETTER A", direction="l", linebreak="al", unicodeslot=0x1720, }, [0x1721]={ category="lo", description="HANUNOO LETTER I", direction="l", linebreak="al", unicodeslot=0x1721, }, [0x1722]={ category="lo", description="HANUNOO LETTER U", direction="l", linebreak="al", unicodeslot=0x1722, }, [0x1723]={ category="lo", description="HANUNOO LETTER KA", direction="l", linebreak="al", unicodeslot=0x1723, }, [0x1724]={ category="lo", description="HANUNOO LETTER GA", direction="l", linebreak="al", unicodeslot=0x1724, }, [0x1725]={ category="lo", description="HANUNOO LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1725, }, [0x1726]={ category="lo", description="HANUNOO LETTER TA", direction="l", linebreak="al", unicodeslot=0x1726, }, [0x1727]={ category="lo", description="HANUNOO LETTER DA", direction="l", linebreak="al", unicodeslot=0x1727, }, [0x1728]={ category="lo", description="HANUNOO LETTER NA", direction="l", linebreak="al", unicodeslot=0x1728, }, [0x1729]={ category="lo", description="HANUNOO LETTER PA", direction="l", linebreak="al", unicodeslot=0x1729, }, [0x172A]={ category="lo", description="HANUNOO LETTER BA", direction="l", linebreak="al", unicodeslot=0x172A, }, [0x172B]={ category="lo", description="HANUNOO LETTER MA", direction="l", linebreak="al", unicodeslot=0x172B, }, [0x172C]={ category="lo", description="HANUNOO LETTER YA", direction="l", linebreak="al", unicodeslot=0x172C, }, [0x172D]={ category="lo", description="HANUNOO LETTER RA", direction="l", linebreak="al", unicodeslot=0x172D, }, [0x172E]={ category="lo", description="HANUNOO LETTER LA", direction="l", linebreak="al", unicodeslot=0x172E, }, [0x172F]={ category="lo", description="HANUNOO LETTER WA", direction="l", linebreak="al", unicodeslot=0x172F, }, [0x1730]={ category="lo", description="HANUNOO LETTER SA", direction="l", linebreak="al", unicodeslot=0x1730, }, [0x1731]={ category="lo", description="HANUNOO LETTER HA", direction="l", linebreak="al", unicodeslot=0x1731, }, [0x1732]={ category="mn", description="HANUNOO VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1732, }, [0x1733]={ category="mn", description="HANUNOO VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1733, }, [0x1734]={ category="mn", description="HANUNOO SIGN PAMUDPOD", direction="nsm", linebreak="cm", unicodeslot=0x1734, }, [0x1735]={ category="po", description="PHILIPPINE SINGLE PUNCTUATION", direction="l", linebreak="ba", unicodeslot=0x1735, }, [0x1736]={ category="po", description="PHILIPPINE DOUBLE PUNCTUATION", direction="l", linebreak="ba", unicodeslot=0x1736, }, [0x1740]={ category="lo", description="BUHID LETTER A", direction="l", linebreak="al", unicodeslot=0x1740, }, [0x1741]={ category="lo", description="BUHID LETTER I", direction="l", linebreak="al", unicodeslot=0x1741, }, [0x1742]={ category="lo", description="BUHID LETTER U", direction="l", linebreak="al", unicodeslot=0x1742, }, [0x1743]={ category="lo", description="BUHID LETTER KA", direction="l", linebreak="al", unicodeslot=0x1743, }, [0x1744]={ category="lo", description="BUHID LETTER GA", direction="l", linebreak="al", unicodeslot=0x1744, }, [0x1745]={ category="lo", description="BUHID LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1745, }, [0x1746]={ category="lo", description="BUHID LETTER TA", direction="l", linebreak="al", unicodeslot=0x1746, }, [0x1747]={ category="lo", description="BUHID LETTER DA", direction="l", linebreak="al", unicodeslot=0x1747, }, [0x1748]={ category="lo", description="BUHID LETTER NA", direction="l", linebreak="al", unicodeslot=0x1748, }, [0x1749]={ category="lo", description="BUHID LETTER PA", direction="l", linebreak="al", unicodeslot=0x1749, }, [0x174A]={ category="lo", description="BUHID LETTER BA", direction="l", linebreak="al", unicodeslot=0x174A, }, [0x174B]={ category="lo", description="BUHID LETTER MA", direction="l", linebreak="al", unicodeslot=0x174B, }, [0x174C]={ category="lo", description="BUHID LETTER YA", direction="l", linebreak="al", unicodeslot=0x174C, }, [0x174D]={ category="lo", description="BUHID LETTER RA", direction="l", linebreak="al", unicodeslot=0x174D, }, [0x174E]={ category="lo", description="BUHID LETTER LA", direction="l", linebreak="al", unicodeslot=0x174E, }, [0x174F]={ category="lo", description="BUHID LETTER WA", direction="l", linebreak="al", unicodeslot=0x174F, }, [0x1750]={ category="lo", description="BUHID LETTER SA", direction="l", linebreak="al", unicodeslot=0x1750, }, [0x1751]={ category="lo", description="BUHID LETTER HA", direction="l", linebreak="al", unicodeslot=0x1751, }, [0x1752]={ category="mn", description="BUHID VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1752, }, [0x1753]={ category="mn", description="BUHID VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1753, }, [0x1760]={ category="lo", description="TAGBANWA LETTER A", direction="l", linebreak="al", unicodeslot=0x1760, }, [0x1761]={ category="lo", description="TAGBANWA LETTER I", direction="l", linebreak="al", unicodeslot=0x1761, }, [0x1762]={ category="lo", description="TAGBANWA LETTER U", direction="l", linebreak="al", unicodeslot=0x1762, }, [0x1763]={ category="lo", description="TAGBANWA LETTER KA", direction="l", linebreak="al", unicodeslot=0x1763, }, [0x1764]={ category="lo", description="TAGBANWA LETTER GA", direction="l", linebreak="al", unicodeslot=0x1764, }, [0x1765]={ category="lo", description="TAGBANWA LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1765, }, [0x1766]={ category="lo", description="TAGBANWA LETTER TA", direction="l", linebreak="al", unicodeslot=0x1766, }, [0x1767]={ category="lo", description="TAGBANWA LETTER DA", direction="l", linebreak="al", unicodeslot=0x1767, }, [0x1768]={ category="lo", description="TAGBANWA LETTER NA", direction="l", linebreak="al", unicodeslot=0x1768, }, [0x1769]={ category="lo", description="TAGBANWA LETTER PA", direction="l", linebreak="al", unicodeslot=0x1769, }, [0x176A]={ category="lo", description="TAGBANWA LETTER BA", direction="l", linebreak="al", unicodeslot=0x176A, }, [0x176B]={ category="lo", description="TAGBANWA LETTER MA", direction="l", linebreak="al", unicodeslot=0x176B, }, [0x176C]={ category="lo", description="TAGBANWA LETTER YA", direction="l", linebreak="al", unicodeslot=0x176C, }, [0x176E]={ category="lo", description="TAGBANWA LETTER LA", direction="l", linebreak="al", unicodeslot=0x176E, }, [0x176F]={ category="lo", description="TAGBANWA LETTER WA", direction="l", linebreak="al", unicodeslot=0x176F, }, [0x1770]={ category="lo", description="TAGBANWA LETTER SA", direction="l", linebreak="al", unicodeslot=0x1770, }, [0x1772]={ category="mn", description="TAGBANWA VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1772, }, [0x1773]={ category="mn", description="TAGBANWA VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1773, }, [0x1780]={ category="lo", description="KHMER LETTER KA", direction="l", linebreak="sa", unicodeslot=0x1780, }, [0x1781]={ category="lo", description="KHMER LETTER KHA", direction="l", linebreak="sa", unicodeslot=0x1781, }, [0x1782]={ category="lo", description="KHMER LETTER KO", direction="l", linebreak="sa", unicodeslot=0x1782, }, [0x1783]={ category="lo", description="KHMER LETTER KHO", direction="l", linebreak="sa", unicodeslot=0x1783, }, [0x1784]={ category="lo", description="KHMER LETTER NGO", direction="l", linebreak="sa", unicodeslot=0x1784, }, [0x1785]={ category="lo", description="KHMER LETTER CA", direction="l", linebreak="sa", unicodeslot=0x1785, }, [0x1786]={ category="lo", description="KHMER LETTER CHA", direction="l", linebreak="sa", unicodeslot=0x1786, }, [0x1787]={ category="lo", description="KHMER LETTER CO", direction="l", linebreak="sa", unicodeslot=0x1787, }, [0x1788]={ category="lo", description="KHMER LETTER CHO", direction="l", linebreak="sa", unicodeslot=0x1788, }, [0x1789]={ category="lo", description="KHMER LETTER NYO", direction="l", linebreak="sa", unicodeslot=0x1789, }, [0x178A]={ category="lo", description="KHMER LETTER DA", direction="l", linebreak="sa", unicodeslot=0x178A, }, [0x178B]={ category="lo", description="KHMER LETTER TTHA", direction="l", linebreak="sa", unicodeslot=0x178B, }, [0x178C]={ category="lo", description="KHMER LETTER DO", direction="l", linebreak="sa", unicodeslot=0x178C, }, [0x178D]={ category="lo", description="KHMER LETTER TTHO", direction="l", linebreak="sa", unicodeslot=0x178D, }, [0x178E]={ category="lo", description="KHMER LETTER NNO", direction="l", linebreak="sa", unicodeslot=0x178E, }, [0x178F]={ category="lo", description="KHMER LETTER TA", direction="l", linebreak="sa", unicodeslot=0x178F, }, [0x1790]={ category="lo", description="KHMER LETTER THA", direction="l", linebreak="sa", unicodeslot=0x1790, }, [0x1791]={ category="lo", description="KHMER LETTER TO", direction="l", linebreak="sa", unicodeslot=0x1791, }, [0x1792]={ category="lo", description="KHMER LETTER THO", direction="l", linebreak="sa", unicodeslot=0x1792, }, [0x1793]={ category="lo", description="KHMER LETTER NO", direction="l", linebreak="sa", unicodeslot=0x1793, }, [0x1794]={ category="lo", description="KHMER LETTER BA", direction="l", linebreak="sa", unicodeslot=0x1794, }, [0x1795]={ category="lo", description="KHMER LETTER PHA", direction="l", linebreak="sa", unicodeslot=0x1795, }, [0x1796]={ category="lo", description="KHMER LETTER PO", direction="l", linebreak="sa", unicodeslot=0x1796, }, [0x1797]={ category="lo", description="KHMER LETTER PHO", direction="l", linebreak="sa", unicodeslot=0x1797, }, [0x1798]={ category="lo", description="KHMER LETTER MO", direction="l", linebreak="sa", unicodeslot=0x1798, }, [0x1799]={ category="lo", description="KHMER LETTER YO", direction="l", linebreak="sa", unicodeslot=0x1799, }, [0x179A]={ category="lo", description="KHMER LETTER RO", direction="l", linebreak="sa", unicodeslot=0x179A, }, [0x179B]={ category="lo", description="KHMER LETTER LO", direction="l", linebreak="sa", unicodeslot=0x179B, }, [0x179C]={ category="lo", description="KHMER LETTER VO", direction="l", linebreak="sa", unicodeslot=0x179C, }, [0x179D]={ category="lo", description="KHMER LETTER SHA", direction="l", linebreak="sa", unicodeslot=0x179D, }, [0x179E]={ category="lo", description="KHMER LETTER SSO", direction="l", linebreak="sa", unicodeslot=0x179E, }, [0x179F]={ category="lo", description="KHMER LETTER SA", direction="l", linebreak="sa", unicodeslot=0x179F, }, [0x17A0]={ category="lo", description="KHMER LETTER HA", direction="l", linebreak="sa", unicodeslot=0x17A0, }, [0x17A1]={ category="lo", description="KHMER LETTER LA", direction="l", linebreak="sa", unicodeslot=0x17A1, }, [0x17A2]={ category="lo", description="KHMER LETTER QA", direction="l", linebreak="sa", unicodeslot=0x17A2, }, [0x17A3]={ category="lo", description="KHMER INDEPENDENT VOWEL QAQ", direction="l", linebreak="sa", unicodeslot=0x17A3, }, [0x17A4]={ category="lo", description="KHMER INDEPENDENT VOWEL QAA", direction="l", linebreak="sa", unicodeslot=0x17A4, }, [0x17A5]={ category="lo", description="KHMER INDEPENDENT VOWEL QI", direction="l", linebreak="sa", unicodeslot=0x17A5, }, [0x17A6]={ category="lo", description="KHMER INDEPENDENT VOWEL QII", direction="l", linebreak="sa", unicodeslot=0x17A6, }, [0x17A7]={ category="lo", description="KHMER INDEPENDENT VOWEL QU", direction="l", linebreak="sa", unicodeslot=0x17A7, }, [0x17A8]={ category="lo", description="KHMER INDEPENDENT VOWEL QUK", direction="l", linebreak="sa", unicodeslot=0x17A8, }, [0x17A9]={ category="lo", description="KHMER INDEPENDENT VOWEL QUU", direction="l", linebreak="sa", unicodeslot=0x17A9, }, [0x17AA]={ category="lo", description="KHMER INDEPENDENT VOWEL QUUV", direction="l", linebreak="sa", unicodeslot=0x17AA, }, [0x17AB]={ category="lo", description="KHMER INDEPENDENT VOWEL RY", direction="l", linebreak="sa", unicodeslot=0x17AB, }, [0x17AC]={ category="lo", description="KHMER INDEPENDENT VOWEL RYY", direction="l", linebreak="sa", unicodeslot=0x17AC, }, [0x17AD]={ category="lo", description="KHMER INDEPENDENT VOWEL LY", direction="l", linebreak="sa", unicodeslot=0x17AD, }, [0x17AE]={ category="lo", description="KHMER INDEPENDENT VOWEL LYY", direction="l", linebreak="sa", unicodeslot=0x17AE, }, [0x17AF]={ category="lo", description="KHMER INDEPENDENT VOWEL QE", direction="l", linebreak="sa", unicodeslot=0x17AF, }, [0x17B0]={ category="lo", description="KHMER INDEPENDENT VOWEL QAI", direction="l", linebreak="sa", unicodeslot=0x17B0, }, [0x17B1]={ category="lo", description="KHMER INDEPENDENT VOWEL QOO TYPE ONE", direction="l", linebreak="sa", unicodeslot=0x17B1, }, [0x17B2]={ category="lo", description="KHMER INDEPENDENT VOWEL QOO TYPE TWO", direction="l", linebreak="sa", unicodeslot=0x17B2, }, [0x17B3]={ category="lo", description="KHMER INDEPENDENT VOWEL QAU", direction="l", linebreak="sa", unicodeslot=0x17B3, }, [0x17B4]={ category="cf", description="KHMER VOWEL INHERENT AQ", direction="nsm", linebreak="sa", unicodeslot=0x17B4, }, [0x17B5]={ category="cf", description="KHMER VOWEL INHERENT AA", direction="nsm", linebreak="sa", unicodeslot=0x17B5, }, [0x17B6]={ category="mc", description="KHMER VOWEL SIGN AA", direction="l", linebreak="sa", unicodeslot=0x17B6, }, [0x17B7]={ category="mn", description="KHMER VOWEL SIGN I", direction="nsm", linebreak="sa", unicodeslot=0x17B7, }, [0x17B8]={ category="mn", description="KHMER VOWEL SIGN II", direction="nsm", linebreak="sa", unicodeslot=0x17B8, }, [0x17B9]={ category="mn", description="KHMER VOWEL SIGN Y", direction="nsm", linebreak="sa", unicodeslot=0x17B9, }, [0x17BA]={ category="mn", description="KHMER VOWEL SIGN YY", direction="nsm", linebreak="sa", unicodeslot=0x17BA, }, [0x17BB]={ category="mn", description="KHMER VOWEL SIGN U", direction="nsm", linebreak="sa", unicodeslot=0x17BB, }, [0x17BC]={ category="mn", description="KHMER VOWEL SIGN UU", direction="nsm", linebreak="sa", unicodeslot=0x17BC, }, [0x17BD]={ category="mn", description="KHMER VOWEL SIGN UA", direction="nsm", linebreak="sa", unicodeslot=0x17BD, }, [0x17BE]={ category="mc", description="KHMER VOWEL SIGN OE", direction="l", linebreak="sa", unicodeslot=0x17BE, }, [0x17BF]={ category="mc", description="KHMER VOWEL SIGN YA", direction="l", linebreak="sa", unicodeslot=0x17BF, }, [0x17C0]={ category="mc", description="KHMER VOWEL SIGN IE", direction="l", linebreak="sa", unicodeslot=0x17C0, }, [0x17C1]={ category="mc", description="KHMER VOWEL SIGN E", direction="l", linebreak="sa", unicodeslot=0x17C1, }, [0x17C2]={ category="mc", description="KHMER VOWEL SIGN AE", direction="l", linebreak="sa", unicodeslot=0x17C2, }, [0x17C3]={ category="mc", description="KHMER VOWEL SIGN AI", direction="l", linebreak="sa", unicodeslot=0x17C3, }, [0x17C4]={ category="mc", description="KHMER VOWEL SIGN OO", direction="l", linebreak="sa", unicodeslot=0x17C4, }, [0x17C5]={ category="mc", description="KHMER VOWEL SIGN AU", direction="l", linebreak="sa", unicodeslot=0x17C5, }, [0x17C6]={ category="mn", description="KHMER SIGN NIKAHIT", direction="nsm", linebreak="sa", unicodeslot=0x17C6, }, [0x17C7]={ category="mc", description="KHMER SIGN REAHMUK", direction="l", linebreak="sa", unicodeslot=0x17C7, }, [0x17C8]={ category="mc", description="KHMER SIGN YUUKALEAPINTU", direction="l", linebreak="sa", unicodeslot=0x17C8, }, [0x17C9]={ category="mn", description="KHMER SIGN MUUSIKATOAN", direction="nsm", linebreak="sa", unicodeslot=0x17C9, }, [0x17CA]={ category="mn", description="KHMER SIGN TRIISAP", direction="nsm", linebreak="sa", unicodeslot=0x17CA, }, [0x17CB]={ category="mn", description="KHMER SIGN BANTOC", direction="nsm", linebreak="sa", unicodeslot=0x17CB, }, [0x17CC]={ category="mn", description="KHMER SIGN ROBAT", direction="nsm", linebreak="sa", unicodeslot=0x17CC, }, [0x17CD]={ category="mn", description="KHMER SIGN TOANDAKHIAT", direction="nsm", linebreak="sa", unicodeslot=0x17CD, }, [0x17CE]={ category="mn", description="KHMER SIGN KAKABAT", direction="nsm", linebreak="sa", unicodeslot=0x17CE, }, [0x17CF]={ category="mn", description="KHMER SIGN AHSDA", direction="nsm", linebreak="sa", unicodeslot=0x17CF, }, [0x17D0]={ category="mn", description="KHMER SIGN SAMYOK SANNYA", direction="nsm", linebreak="sa", unicodeslot=0x17D0, }, [0x17D1]={ category="mn", description="KHMER SIGN VIRIAM", direction="nsm", linebreak="sa", unicodeslot=0x17D1, }, [0x17D2]={ category="mn", description="KHMER SIGN COENG", direction="nsm", linebreak="sa", unicodeslot=0x17D2, }, [0x17D3]={ category="mn", description="KHMER SIGN BATHAMASAT", direction="nsm", linebreak="sa", unicodeslot=0x17D3, }, [0x17D4]={ category="po", description="KHMER SIGN KHAN", direction="l", linebreak="ba", unicodeslot=0x17D4, }, [0x17D5]={ category="po", description="KHMER SIGN BARIYOOSAN", direction="l", linebreak="ba", unicodeslot=0x17D5, }, [0x17D6]={ category="po", description="KHMER SIGN CAMNUC PII KUUH", direction="l", linebreak="ns", unicodeslot=0x17D6, }, [0x17D7]={ category="lm", description="KHMER SIGN LEK TOO", direction="l", linebreak="sa", unicodeslot=0x17D7, }, [0x17D8]={ category="po", description="KHMER SIGN BEYYAL", direction="l", linebreak="ba", unicodeslot=0x17D8, }, [0x17D9]={ category="po", description="KHMER SIGN PHNAEK MUAN", direction="l", linebreak="al", unicodeslot=0x17D9, }, [0x17DA]={ category="po", description="KHMER SIGN KOOMUUT", direction="l", linebreak="ba", unicodeslot=0x17DA, }, [0x17DB]={ category="sc", description="KHMER CURRENCY SYMBOL RIEL", direction="et", linebreak="pr", unicodeslot=0x17DB, }, [0x17DC]={ category="lo", description="KHMER SIGN AVAKRAHASANYA", direction="l", linebreak="sa", unicodeslot=0x17DC, }, [0x17DD]={ category="mn", description="KHMER SIGN ATTHACAN", direction="nsm", linebreak="sa", unicodeslot=0x17DD, }, [0x17E0]={ category="nd", description="KHMER DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x17E0, }, [0x17E1]={ category="nd", description="KHMER DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x17E1, }, [0x17E2]={ category="nd", description="KHMER DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x17E2, }, [0x17E3]={ category="nd", description="KHMER DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x17E3, }, [0x17E4]={ category="nd", description="KHMER DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x17E4, }, [0x17E5]={ category="nd", description="KHMER DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x17E5, }, [0x17E6]={ category="nd", description="KHMER DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x17E6, }, [0x17E7]={ category="nd", description="KHMER DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x17E7, }, [0x17E8]={ category="nd", description="KHMER DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x17E8, }, [0x17E9]={ category="nd", description="KHMER DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x17E9, }, [0x17F0]={ category="no", description="KHMER SYMBOL LEK ATTAK SON", direction="on", linebreak="al", unicodeslot=0x17F0, }, [0x17F1]={ category="no", description="KHMER SYMBOL LEK ATTAK MUOY", direction="on", linebreak="al", unicodeslot=0x17F1, }, [0x17F2]={ category="no", description="KHMER SYMBOL LEK ATTAK PII", direction="on", linebreak="al", unicodeslot=0x17F2, }, [0x17F3]={ category="no", description="KHMER SYMBOL LEK ATTAK BEI", direction="on", linebreak="al", unicodeslot=0x17F3, }, [0x17F4]={ category="no", description="KHMER SYMBOL LEK ATTAK BUON", direction="on", linebreak="al", unicodeslot=0x17F4, }, [0x17F5]={ category="no", description="KHMER SYMBOL LEK ATTAK PRAM", direction="on", linebreak="al", unicodeslot=0x17F5, }, [0x17F6]={ category="no", description="KHMER SYMBOL LEK ATTAK PRAM-MUOY", direction="on", linebreak="al", unicodeslot=0x17F6, }, [0x17F7]={ category="no", description="KHMER SYMBOL LEK ATTAK PRAM-PII", direction="on", linebreak="al", unicodeslot=0x17F7, }, [0x17F8]={ category="no", description="KHMER SYMBOL LEK ATTAK PRAM-BEI", direction="on", linebreak="al", unicodeslot=0x17F8, }, [0x17F9]={ category="no", description="KHMER SYMBOL LEK ATTAK PRAM-BUON", direction="on", linebreak="al", unicodeslot=0x17F9, }, [0x1800]={ category="po", description="MONGOLIAN BIRGA", direction="on", linebreak="al", unicodeslot=0x1800, }, [0x1801]={ category="po", description="MONGOLIAN ELLIPSIS", direction="on", linebreak="al", unicodeslot=0x1801, }, [0x1802]={ category="po", description="MONGOLIAN COMMA", direction="on", linebreak="ex", unicodeslot=0x1802, }, [0x1803]={ category="po", description="MONGOLIAN FULL STOP", direction="on", linebreak="ex", unicodeslot=0x1803, }, [0x1804]={ category="po", description="MONGOLIAN COLON", direction="on", linebreak="ba", unicodeslot=0x1804, }, [0x1805]={ category="po", description="MONGOLIAN FOUR DOTS", direction="on", linebreak="ba", unicodeslot=0x1805, }, [0x1806]={ category="pd", description="MONGOLIAN TODO SOFT HYPHEN", direction="on", linebreak="bb", unicodeslot=0x1806, }, [0x1807]={ category="po", description="MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER", direction="on", linebreak="al", unicodeslot=0x1807, }, [0x1808]={ category="po", description="MONGOLIAN MANCHU COMMA", direction="on", linebreak="ex", unicodeslot=0x1808, }, [0x1809]={ category="po", description="MONGOLIAN MANCHU FULL STOP", direction="on", linebreak="ex", unicodeslot=0x1809, }, [0x180A]={ category="po", description="MONGOLIAN NIRUGU", direction="on", linebreak="al", unicodeslot=0x180A, }, [0x180B]={ category="mn", description="MONGOLIAN FREE VARIATION SELECTOR ONE", direction="nsm", linebreak="cm", unicodeslot=0x180B, }, [0x180C]={ category="mn", description="MONGOLIAN FREE VARIATION SELECTOR TWO", direction="nsm", linebreak="cm", unicodeslot=0x180C, }, [0x180D]={ category="mn", description="MONGOLIAN FREE VARIATION SELECTOR THREE", direction="nsm", linebreak="cm", unicodeslot=0x180D, }, [0x180E]={ category="zs", description="MONGOLIAN VOWEL SEPARATOR", direction="ws", linebreak="gl", unicodeslot=0x180E, }, [0x1810]={ category="nd", description="MONGOLIAN DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1810, }, [0x1811]={ category="nd", description="MONGOLIAN DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1811, }, [0x1812]={ category="nd", description="MONGOLIAN DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1812, }, [0x1813]={ category="nd", description="MONGOLIAN DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1813, }, [0x1814]={ category="nd", description="MONGOLIAN DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1814, }, [0x1815]={ category="nd", description="MONGOLIAN DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1815, }, [0x1816]={ category="nd", description="MONGOLIAN DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1816, }, [0x1817]={ category="nd", description="MONGOLIAN DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1817, }, [0x1818]={ category="nd", description="MONGOLIAN DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1818, }, [0x1819]={ category="nd", description="MONGOLIAN DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1819, }, [0x1820]={ category="lo", description="MONGOLIAN LETTER A", direction="l", linebreak="al", unicodeslot=0x1820, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1821]={ category="lo", description="MONGOLIAN LETTER E", direction="l", linebreak="al", unicodeslot=0x1821, variants={ [0x180B]="second form", }, }, [0x1822]={ category="lo", description="MONGOLIAN LETTER I", direction="l", linebreak="al", unicodeslot=0x1822, variants={ [0x180B]="second form", }, }, [0x1823]={ category="lo", description="MONGOLIAN LETTER O", direction="l", linebreak="al", unicodeslot=0x1823, variants={ [0x180B]="second form", }, }, [0x1824]={ category="lo", description="MONGOLIAN LETTER U", direction="l", linebreak="al", unicodeslot=0x1824, variants={ [0x180B]="second form", }, }, [0x1825]={ category="lo", description="MONGOLIAN LETTER OE", direction="l", linebreak="al", unicodeslot=0x1825, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1826]={ category="lo", description="MONGOLIAN LETTER UE", direction="l", linebreak="al", unicodeslot=0x1826, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1827]={ category="lo", description="MONGOLIAN LETTER EE", direction="l", linebreak="al", unicodeslot=0x1827, }, [0x1828]={ category="lo", description="MONGOLIAN LETTER NA", direction="l", linebreak="al", unicodeslot=0x1828, variants={ [0x180B]="second form", [0x180C]="third form", [0x180D]="separate form", }, }, [0x1829]={ category="lo", description="MONGOLIAN LETTER ANG", direction="l", linebreak="al", unicodeslot=0x1829, }, [0x182A]={ category="lo", description="MONGOLIAN LETTER BA", direction="l", linebreak="al", unicodeslot=0x182A, variants={ [0x180B]="alternative form", }, }, [0x182B]={ category="lo", description="MONGOLIAN LETTER PA", direction="l", linebreak="al", unicodeslot=0x182B, }, [0x182C]={ category="lo", description="MONGOLIAN LETTER QA", direction="l", linebreak="al", unicodeslot=0x182C, variants={ [0x180B]="second form", [0x180C]="third form", [0x180D]="fourth form", }, }, [0x182D]={ category="lo", description="MONGOLIAN LETTER GA", direction="l", linebreak="al", unicodeslot=0x182D, variants={ [0x180B]="second form", [0x180C]="third form", [0x180D]="feminine form", }, }, [0x182E]={ category="lo", description="MONGOLIAN LETTER MA", direction="l", linebreak="al", unicodeslot=0x182E, }, [0x182F]={ category="lo", description="MONGOLIAN LETTER LA", direction="l", linebreak="al", unicodeslot=0x182F, }, [0x1830]={ category="lo", description="MONGOLIAN LETTER SA", direction="l", linebreak="al", unicodeslot=0x1830, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1831]={ category="lo", description="MONGOLIAN LETTER SHA", direction="l", linebreak="al", unicodeslot=0x1831, }, [0x1832]={ category="lo", description="MONGOLIAN LETTER TA", direction="l", linebreak="al", unicodeslot=0x1832, variants={ [0x180B]="second form", }, }, [0x1833]={ category="lo", description="MONGOLIAN LETTER DA", direction="l", linebreak="al", unicodeslot=0x1833, variants={ [0x180B]="second form", }, }, [0x1834]={ category="lo", description="MONGOLIAN LETTER CHA", direction="l", linebreak="al", unicodeslot=0x1834, }, [0x1835]={ category="lo", description="MONGOLIAN LETTER JA", direction="l", linebreak="al", unicodeslot=0x1835, variants={ [0x180B]="second form", }, }, [0x1836]={ category="lo", description="MONGOLIAN LETTER YA", direction="l", linebreak="al", unicodeslot=0x1836, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1837]={ category="lo", description="MONGOLIAN LETTER RA", direction="l", linebreak="al", unicodeslot=0x1837, }, [0x1838]={ category="lo", description="MONGOLIAN LETTER WA", direction="l", linebreak="al", unicodeslot=0x1838, variants={ [0x180B]="second form", }, }, [0x1839]={ category="lo", description="MONGOLIAN LETTER FA", direction="l", linebreak="al", unicodeslot=0x1839, }, [0x183A]={ category="lo", description="MONGOLIAN LETTER KA", direction="l", linebreak="al", unicodeslot=0x183A, }, [0x183B]={ category="lo", description="MONGOLIAN LETTER KHA", direction="l", linebreak="al", unicodeslot=0x183B, }, [0x183C]={ category="lo", description="MONGOLIAN LETTER TSA", direction="l", linebreak="al", unicodeslot=0x183C, }, [0x183D]={ category="lo", description="MONGOLIAN LETTER ZA", direction="l", linebreak="al", unicodeslot=0x183D, }, [0x183E]={ category="lo", description="MONGOLIAN LETTER HAA", direction="l", linebreak="al", unicodeslot=0x183E, }, [0x183F]={ category="lo", description="MONGOLIAN LETTER ZRA", direction="l", linebreak="al", unicodeslot=0x183F, }, [0x1840]={ category="lo", description="MONGOLIAN LETTER LHA", direction="l", linebreak="al", unicodeslot=0x1840, }, [0x1841]={ category="lo", description="MONGOLIAN LETTER ZHI", direction="l", linebreak="al", unicodeslot=0x1841, }, [0x1842]={ category="lo", description="MONGOLIAN LETTER CHI", direction="l", linebreak="al", unicodeslot=0x1842, }, [0x1843]={ category="lm", description="MONGOLIAN LETTER TODO LONG VOWEL SIGN", direction="l", linebreak="al", unicodeslot=0x1843, }, [0x1844]={ category="lo", description="MONGOLIAN LETTER TODO E", direction="l", linebreak="al", unicodeslot=0x1844, variants={ [0x180B]="second form", }, }, [0x1845]={ category="lo", description="MONGOLIAN LETTER TODO I", direction="l", linebreak="al", unicodeslot=0x1845, variants={ [0x180B]="second form", }, }, [0x1846]={ category="lo", description="MONGOLIAN LETTER TODO O", direction="l", linebreak="al", unicodeslot=0x1846, variants={ [0x180B]="second form", }, }, [0x1847]={ category="lo", description="MONGOLIAN LETTER TODO U", direction="l", linebreak="al", unicodeslot=0x1847, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1848]={ category="lo", description="MONGOLIAN LETTER TODO OE", direction="l", linebreak="al", unicodeslot=0x1848, variants={ [0x180B]="second form", }, }, [0x1849]={ category="lo", description="MONGOLIAN LETTER TODO UE", direction="l", linebreak="al", unicodeslot=0x1849, variants={ [0x180B]="second form", }, }, [0x184A]={ category="lo", description="MONGOLIAN LETTER TODO ANG", direction="l", linebreak="al", unicodeslot=0x184A, }, [0x184B]={ category="lo", description="MONGOLIAN LETTER TODO BA", direction="l", linebreak="al", unicodeslot=0x184B, }, [0x184C]={ category="lo", description="MONGOLIAN LETTER TODO PA", direction="l", linebreak="al", unicodeslot=0x184C, }, [0x184D]={ category="lo", description="MONGOLIAN LETTER TODO QA", direction="l", linebreak="al", unicodeslot=0x184D, variants={ [0x180B]="feminine form", }, }, [0x184E]={ category="lo", description="MONGOLIAN LETTER TODO GA", direction="l", linebreak="al", unicodeslot=0x184E, variants={ [0x180B]="second form", }, }, [0x184F]={ category="lo", description="MONGOLIAN LETTER TODO MA", direction="l", linebreak="al", unicodeslot=0x184F, }, [0x1850]={ category="lo", description="MONGOLIAN LETTER TODO TA", direction="l", linebreak="al", unicodeslot=0x1850, }, [0x1851]={ category="lo", description="MONGOLIAN LETTER TODO DA", direction="l", linebreak="al", unicodeslot=0x1851, }, [0x1852]={ category="lo", description="MONGOLIAN LETTER TODO CHA", direction="l", linebreak="al", unicodeslot=0x1852, }, [0x1853]={ category="lo", description="MONGOLIAN LETTER TODO JA", direction="l", linebreak="al", unicodeslot=0x1853, }, [0x1854]={ category="lo", description="MONGOLIAN LETTER TODO TSA", direction="l", linebreak="al", unicodeslot=0x1854, }, [0x1855]={ category="lo", description="MONGOLIAN LETTER TODO YA", direction="l", linebreak="al", unicodeslot=0x1855, }, [0x1856]={ category="lo", description="MONGOLIAN LETTER TODO WA", direction="l", linebreak="al", unicodeslot=0x1856, }, [0x1857]={ category="lo", description="MONGOLIAN LETTER TODO KA", direction="l", linebreak="al", unicodeslot=0x1857, }, [0x1858]={ category="lo", description="MONGOLIAN LETTER TODO GAA", direction="l", linebreak="al", unicodeslot=0x1858, }, [0x1859]={ category="lo", description="MONGOLIAN LETTER TODO HAA", direction="l", linebreak="al", unicodeslot=0x1859, }, [0x185A]={ category="lo", description="MONGOLIAN LETTER TODO JIA", direction="l", linebreak="al", unicodeslot=0x185A, }, [0x185B]={ category="lo", description="MONGOLIAN LETTER TODO NIA", direction="l", linebreak="al", unicodeslot=0x185B, }, [0x185C]={ category="lo", description="MONGOLIAN LETTER TODO DZA", direction="l", linebreak="al", unicodeslot=0x185C, }, [0x185D]={ category="lo", description="MONGOLIAN LETTER SIBE E", direction="l", linebreak="al", unicodeslot=0x185D, variants={ [0x180B]="second form", }, }, [0x185E]={ category="lo", description="MONGOLIAN LETTER SIBE I", direction="l", linebreak="al", unicodeslot=0x185E, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x185F]={ category="lo", description="MONGOLIAN LETTER SIBE IY", direction="l", linebreak="al", unicodeslot=0x185F, }, [0x1860]={ category="lo", description="MONGOLIAN LETTER SIBE UE", direction="l", linebreak="al", unicodeslot=0x1860, variants={ [0x180B]="second form", }, }, [0x1861]={ category="lo", description="MONGOLIAN LETTER SIBE U", direction="l", linebreak="al", unicodeslot=0x1861, }, [0x1862]={ category="lo", description="MONGOLIAN LETTER SIBE ANG", direction="l", linebreak="al", unicodeslot=0x1862, }, [0x1863]={ category="lo", description="MONGOLIAN LETTER SIBE KA", direction="l", linebreak="al", unicodeslot=0x1863, variants={ [0x180B]="second form", }, }, [0x1864]={ category="lo", description="MONGOLIAN LETTER SIBE GA", direction="l", linebreak="al", unicodeslot=0x1864, }, [0x1865]={ category="lo", description="MONGOLIAN LETTER SIBE HA", direction="l", linebreak="al", unicodeslot=0x1865, }, [0x1866]={ category="lo", description="MONGOLIAN LETTER SIBE PA", direction="l", linebreak="al", unicodeslot=0x1866, }, [0x1867]={ category="lo", description="MONGOLIAN LETTER SIBE SHA", direction="l", linebreak="al", unicodeslot=0x1867, }, [0x1868]={ category="lo", description="MONGOLIAN LETTER SIBE TA", direction="l", linebreak="al", unicodeslot=0x1868, variants={ [0x180B]="second form", [0x180C]="third form", }, }, [0x1869]={ category="lo", description="MONGOLIAN LETTER SIBE DA", direction="l", linebreak="al", unicodeslot=0x1869, variants={ [0x180B]="second form", }, }, [0x186A]={ category="lo", description="MONGOLIAN LETTER SIBE JA", direction="l", linebreak="al", unicodeslot=0x186A, }, [0x186B]={ category="lo", description="MONGOLIAN LETTER SIBE FA", direction="l", linebreak="al", unicodeslot=0x186B, }, [0x186C]={ category="lo", description="MONGOLIAN LETTER SIBE GAA", direction="l", linebreak="al", unicodeslot=0x186C, }, [0x186D]={ category="lo", description="MONGOLIAN LETTER SIBE HAA", direction="l", linebreak="al", unicodeslot=0x186D, }, [0x186E]={ category="lo", description="MONGOLIAN LETTER SIBE TSA", direction="l", linebreak="al", unicodeslot=0x186E, }, [0x186F]={ category="lo", description="MONGOLIAN LETTER SIBE ZA", direction="l", linebreak="al", unicodeslot=0x186F, variants={ [0x180B]="second form", }, }, [0x1870]={ category="lo", description="MONGOLIAN LETTER SIBE RAA", direction="l", linebreak="al", unicodeslot=0x1870, }, [0x1871]={ category="lo", description="MONGOLIAN LETTER SIBE CHA", direction="l", linebreak="al", unicodeslot=0x1871, }, [0x1872]={ category="lo", description="MONGOLIAN LETTER SIBE ZHA", direction="l", linebreak="al", unicodeslot=0x1872, }, [0x1873]={ category="lo", description="MONGOLIAN LETTER MANCHU I", direction="l", linebreak="al", unicodeslot=0x1873, variants={ [0x180B]="second form", [0x180C]="third form", [0x180D]="fourth form", }, }, [0x1874]={ category="lo", description="MONGOLIAN LETTER MANCHU KA", direction="l", linebreak="al", unicodeslot=0x1874, variants={ [0x180B]="second form", [0x180C]="feminine first medial form", [0x180D]="feminine second medial form", }, }, [0x1875]={ category="lo", description="MONGOLIAN LETTER MANCHU RA", direction="l", linebreak="al", unicodeslot=0x1875, }, [0x1876]={ category="lo", description="MONGOLIAN LETTER MANCHU FA", direction="l", linebreak="al", unicodeslot=0x1876, variants={ [0x180B]="second form", }, }, [0x1877]={ category="lo", description="MONGOLIAN LETTER MANCHU ZHA", direction="l", linebreak="al", unicodeslot=0x1877, }, [0x1880]={ category="lo", description="MONGOLIAN LETTER ALI GALI ANUSVARA ONE", direction="l", linebreak="al", unicodeslot=0x1880, variants={ [0x180B]="second form", }, }, [0x1881]={ category="lo", description="MONGOLIAN LETTER ALI GALI VISARGA ONE", direction="l", linebreak="al", unicodeslot=0x1881, variants={ [0x180B]="second form", }, }, [0x1882]={ category="lo", description="MONGOLIAN LETTER ALI GALI DAMARU", direction="l", linebreak="al", unicodeslot=0x1882, }, [0x1883]={ category="lo", description="MONGOLIAN LETTER ALI GALI UBADAMA", direction="l", linebreak="al", unicodeslot=0x1883, }, [0x1884]={ category="lo", description="MONGOLIAN LETTER ALI GALI INVERTED UBADAMA", direction="l", linebreak="al", unicodeslot=0x1884, }, [0x1885]={ category="lo", description="MONGOLIAN LETTER ALI GALI BALUDA", direction="l", linebreak="al", unicodeslot=0x1885, }, [0x1886]={ category="lo", description="MONGOLIAN LETTER ALI GALI THREE BALUDA", direction="l", linebreak="al", unicodeslot=0x1886, }, [0x1887]={ category="lo", description="MONGOLIAN LETTER ALI GALI A", direction="l", linebreak="al", unicodeslot=0x1887, variants={ [0x180B]="second form", [0x180C]="third form", [0x180D]="fourth form", }, }, [0x1888]={ category="lo", description="MONGOLIAN LETTER ALI GALI I", direction="l", linebreak="al", unicodeslot=0x1888, variants={ [0x180B]="second form", }, }, [0x1889]={ category="lo", description="MONGOLIAN LETTER ALI GALI KA", direction="l", linebreak="al", unicodeslot=0x1889, }, [0x188A]={ category="lo", description="MONGOLIAN LETTER ALI GALI NGA", direction="l", linebreak="al", unicodeslot=0x188A, variants={ [0x180B]="second form", }, }, [0x188B]={ category="lo", description="MONGOLIAN LETTER ALI GALI CA", direction="l", linebreak="al", unicodeslot=0x188B, }, [0x188C]={ category="lo", description="MONGOLIAN LETTER ALI GALI TTA", direction="l", linebreak="al", unicodeslot=0x188C, }, [0x188D]={ category="lo", description="MONGOLIAN LETTER ALI GALI TTHA", direction="l", linebreak="al", unicodeslot=0x188D, }, [0x188E]={ category="lo", description="MONGOLIAN LETTER ALI GALI DDA", direction="l", linebreak="al", unicodeslot=0x188E, }, [0x188F]={ category="lo", description="MONGOLIAN LETTER ALI GALI NNA", direction="l", linebreak="al", unicodeslot=0x188F, }, [0x1890]={ category="lo", description="MONGOLIAN LETTER ALI GALI TA", direction="l", linebreak="al", unicodeslot=0x1890, }, [0x1891]={ category="lo", description="MONGOLIAN LETTER ALI GALI DA", direction="l", linebreak="al", unicodeslot=0x1891, }, [0x1892]={ category="lo", description="MONGOLIAN LETTER ALI GALI PA", direction="l", linebreak="al", unicodeslot=0x1892, }, [0x1893]={ category="lo", description="MONGOLIAN LETTER ALI GALI PHA", direction="l", linebreak="al", unicodeslot=0x1893, }, [0x1894]={ category="lo", description="MONGOLIAN LETTER ALI GALI SSA", direction="l", linebreak="al", unicodeslot=0x1894, }, [0x1895]={ category="lo", description="MONGOLIAN LETTER ALI GALI ZHA", direction="l", linebreak="al", unicodeslot=0x1895, }, [0x1896]={ category="lo", description="MONGOLIAN LETTER ALI GALI ZA", direction="l", linebreak="al", unicodeslot=0x1896, }, [0x1897]={ category="lo", description="MONGOLIAN LETTER ALI GALI AH", direction="l", linebreak="al", unicodeslot=0x1897, }, [0x1898]={ category="lo", description="MONGOLIAN LETTER TODO ALI GALI TA", direction="l", linebreak="al", unicodeslot=0x1898, }, [0x1899]={ category="lo", description="MONGOLIAN LETTER TODO ALI GALI ZHA", direction="l", linebreak="al", unicodeslot=0x1899, }, [0x189A]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI GHA", direction="l", linebreak="al", unicodeslot=0x189A, }, [0x189B]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI NGA", direction="l", linebreak="al", unicodeslot=0x189B, }, [0x189C]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI CA", direction="l", linebreak="al", unicodeslot=0x189C, }, [0x189D]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI JHA", direction="l", linebreak="al", unicodeslot=0x189D, }, [0x189E]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI TTA", direction="l", linebreak="al", unicodeslot=0x189E, }, [0x189F]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI DDHA", direction="l", linebreak="al", unicodeslot=0x189F, }, [0x18A0]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI TA", direction="l", linebreak="al", unicodeslot=0x18A0, }, [0x18A1]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI DHA", direction="l", linebreak="al", unicodeslot=0x18A1, }, [0x18A2]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI SSA", direction="l", linebreak="al", unicodeslot=0x18A2, }, [0x18A3]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI CYA", direction="l", linebreak="al", unicodeslot=0x18A3, }, [0x18A4]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI ZHA", direction="l", linebreak="al", unicodeslot=0x18A4, }, [0x18A5]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI ZA", direction="l", linebreak="al", unicodeslot=0x18A5, }, [0x18A6]={ category="lo", description="MONGOLIAN LETTER ALI GALI HALF U", direction="l", linebreak="al", unicodeslot=0x18A6, }, [0x18A7]={ category="lo", description="MONGOLIAN LETTER ALI GALI HALF YA", direction="l", linebreak="al", unicodeslot=0x18A7, }, [0x18A8]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI BHA", direction="l", linebreak="al", unicodeslot=0x18A8, }, [0x18A9]={ category="mn", description="MONGOLIAN LETTER ALI GALI DAGALGA", direction="nsm", linebreak="cm", unicodeslot=0x18A9, }, [0x18AA]={ category="lo", description="MONGOLIAN LETTER MANCHU ALI GALI LHA", direction="l", linebreak="al", unicodeslot=0x18AA, }, [0x18B0]={ category="lo", description="CANADIAN SYLLABICS OY", direction="l", linebreak="al", unicodeslot=0x18B0, }, [0x18B1]={ category="lo", description="CANADIAN SYLLABICS AY", direction="l", linebreak="al", unicodeslot=0x18B1, }, [0x18B2]={ category="lo", description="CANADIAN SYLLABICS AAY", direction="l", linebreak="al", unicodeslot=0x18B2, }, [0x18B3]={ category="lo", description="CANADIAN SYLLABICS WAY", direction="l", linebreak="al", unicodeslot=0x18B3, }, [0x18B4]={ category="lo", description="CANADIAN SYLLABICS POY", direction="l", linebreak="al", unicodeslot=0x18B4, }, [0x18B5]={ category="lo", description="CANADIAN SYLLABICS PAY", direction="l", linebreak="al", unicodeslot=0x18B5, }, [0x18B6]={ category="lo", description="CANADIAN SYLLABICS PWOY", direction="l", linebreak="al", unicodeslot=0x18B6, }, [0x18B7]={ category="lo", description="CANADIAN SYLLABICS TAY", direction="l", linebreak="al", unicodeslot=0x18B7, }, [0x18B8]={ category="lo", description="CANADIAN SYLLABICS KAY", direction="l", linebreak="al", unicodeslot=0x18B8, }, [0x18B9]={ category="lo", description="CANADIAN SYLLABICS KWAY", direction="l", linebreak="al", unicodeslot=0x18B9, }, [0x18BA]={ category="lo", description="CANADIAN SYLLABICS MAY", direction="l", linebreak="al", unicodeslot=0x18BA, }, [0x18BB]={ category="lo", description="CANADIAN SYLLABICS NOY", direction="l", linebreak="al", unicodeslot=0x18BB, }, [0x18BC]={ category="lo", description="CANADIAN SYLLABICS NAY", direction="l", linebreak="al", unicodeslot=0x18BC, }, [0x18BD]={ category="lo", description="CANADIAN SYLLABICS LAY", direction="l", linebreak="al", unicodeslot=0x18BD, }, [0x18BE]={ category="lo", description="CANADIAN SYLLABICS SOY", direction="l", linebreak="al", unicodeslot=0x18BE, }, [0x18BF]={ category="lo", description="CANADIAN SYLLABICS SAY", direction="l", linebreak="al", unicodeslot=0x18BF, }, [0x18C0]={ category="lo", description="CANADIAN SYLLABICS SHOY", direction="l", linebreak="al", unicodeslot=0x18C0, }, [0x18C1]={ category="lo", description="CANADIAN SYLLABICS SHAY", direction="l", linebreak="al", unicodeslot=0x18C1, }, [0x18C2]={ category="lo", description="CANADIAN SYLLABICS SHWOY", direction="l", linebreak="al", unicodeslot=0x18C2, }, [0x18C3]={ category="lo", description="CANADIAN SYLLABICS YOY", direction="l", linebreak="al", unicodeslot=0x18C3, }, [0x18C4]={ category="lo", description="CANADIAN SYLLABICS YAY", direction="l", linebreak="al", unicodeslot=0x18C4, }, [0x18C5]={ category="lo", description="CANADIAN SYLLABICS RAY", direction="l", linebreak="al", unicodeslot=0x18C5, }, [0x18C6]={ category="lo", description="CANADIAN SYLLABICS NWI", direction="l", linebreak="al", unicodeslot=0x18C6, }, [0x18C7]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY NWI", direction="l", linebreak="al", unicodeslot=0x18C7, }, [0x18C8]={ category="lo", description="CANADIAN SYLLABICS NWII", direction="l", linebreak="al", unicodeslot=0x18C8, }, [0x18C9]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY NWII", direction="l", linebreak="al", unicodeslot=0x18C9, }, [0x18CA]={ category="lo", description="CANADIAN SYLLABICS NWO", direction="l", linebreak="al", unicodeslot=0x18CA, }, [0x18CB]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY NWO", direction="l", linebreak="al", unicodeslot=0x18CB, }, [0x18CC]={ category="lo", description="CANADIAN SYLLABICS NWOO", direction="l", linebreak="al", unicodeslot=0x18CC, }, [0x18CD]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY NWOO", direction="l", linebreak="al", unicodeslot=0x18CD, }, [0x18CE]={ category="lo", description="CANADIAN SYLLABICS RWEE", direction="l", linebreak="al", unicodeslot=0x18CE, }, [0x18CF]={ category="lo", description="CANADIAN SYLLABICS RWI", direction="l", linebreak="al", unicodeslot=0x18CF, }, [0x18D0]={ category="lo", description="CANADIAN SYLLABICS RWII", direction="l", linebreak="al", unicodeslot=0x18D0, }, [0x18D1]={ category="lo", description="CANADIAN SYLLABICS RWO", direction="l", linebreak="al", unicodeslot=0x18D1, }, [0x18D2]={ category="lo", description="CANADIAN SYLLABICS RWOO", direction="l", linebreak="al", unicodeslot=0x18D2, }, [0x18D3]={ category="lo", description="CANADIAN SYLLABICS RWA", direction="l", linebreak="al", unicodeslot=0x18D3, }, [0x18D4]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY P", direction="l", linebreak="al", unicodeslot=0x18D4, }, [0x18D5]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY T", direction="l", linebreak="al", unicodeslot=0x18D5, }, [0x18D6]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY K", direction="l", linebreak="al", unicodeslot=0x18D6, }, [0x18D7]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY C", direction="l", linebreak="al", unicodeslot=0x18D7, }, [0x18D8]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY M", direction="l", linebreak="al", unicodeslot=0x18D8, }, [0x18D9]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY N", direction="l", linebreak="al", unicodeslot=0x18D9, }, [0x18DA]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY S", direction="l", linebreak="al", unicodeslot=0x18DA, }, [0x18DB]={ category="lo", description="CANADIAN SYLLABICS OJIBWAY SH", direction="l", linebreak="al", unicodeslot=0x18DB, }, [0x18DC]={ category="lo", description="CANADIAN SYLLABICS EASTERN W", direction="l", linebreak="al", unicodeslot=0x18DC, }, [0x18DD]={ category="lo", description="CANADIAN SYLLABICS WESTERN W", direction="l", linebreak="al", unicodeslot=0x18DD, }, [0x18DE]={ category="lo", description="CANADIAN SYLLABICS FINAL SMALL RING", direction="l", linebreak="al", unicodeslot=0x18DE, }, [0x18DF]={ category="lo", description="CANADIAN SYLLABICS FINAL RAISED DOT", direction="l", linebreak="al", unicodeslot=0x18DF, }, [0x18E0]={ category="lo", description="CANADIAN SYLLABICS R-CREE RWE", direction="l", linebreak="al", unicodeslot=0x18E0, }, [0x18E1]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LOO", direction="l", linebreak="al", unicodeslot=0x18E1, }, [0x18E2]={ category="lo", description="CANADIAN SYLLABICS WEST-CREE LAA", direction="l", linebreak="al", unicodeslot=0x18E2, }, [0x18E3]={ category="lo", description="CANADIAN SYLLABICS THWE", direction="l", linebreak="al", unicodeslot=0x18E3, }, [0x18E4]={ category="lo", description="CANADIAN SYLLABICS THWA", direction="l", linebreak="al", unicodeslot=0x18E4, }, [0x18E5]={ category="lo", description="CANADIAN SYLLABICS TTHWE", direction="l", linebreak="al", unicodeslot=0x18E5, }, [0x18E6]={ category="lo", description="CANADIAN SYLLABICS TTHOO", direction="l", linebreak="al", unicodeslot=0x18E6, }, [0x18E7]={ category="lo", description="CANADIAN SYLLABICS TTHAA", direction="l", linebreak="al", unicodeslot=0x18E7, }, [0x18E8]={ category="lo", description="CANADIAN SYLLABICS TLHWE", direction="l", linebreak="al", unicodeslot=0x18E8, }, [0x18E9]={ category="lo", description="CANADIAN SYLLABICS TLHOO", direction="l", linebreak="al", unicodeslot=0x18E9, }, [0x18EA]={ category="lo", description="CANADIAN SYLLABICS SAYISI SHWE", direction="l", linebreak="al", unicodeslot=0x18EA, }, [0x18EB]={ category="lo", description="CANADIAN SYLLABICS SAYISI SHOO", direction="l", linebreak="al", unicodeslot=0x18EB, }, [0x18EC]={ category="lo", description="CANADIAN SYLLABICS SAYISI HOO", direction="l", linebreak="al", unicodeslot=0x18EC, }, [0x18ED]={ category="lo", description="CANADIAN SYLLABICS CARRIER GWU", direction="l", linebreak="al", unicodeslot=0x18ED, }, [0x18EE]={ category="lo", description="CANADIAN SYLLABICS CARRIER DENE GEE", direction="l", linebreak="al", unicodeslot=0x18EE, }, [0x18EF]={ category="lo", description="CANADIAN SYLLABICS CARRIER GAA", direction="l", linebreak="al", unicodeslot=0x18EF, }, [0x18F0]={ category="lo", description="CANADIAN SYLLABICS CARRIER GWA", direction="l", linebreak="al", unicodeslot=0x18F0, }, [0x18F1]={ category="lo", description="CANADIAN SYLLABICS SAYISI JUU", direction="l", linebreak="al", unicodeslot=0x18F1, }, [0x18F2]={ category="lo", description="CANADIAN SYLLABICS CARRIER JWA", direction="l", linebreak="al", unicodeslot=0x18F2, }, [0x18F3]={ category="lo", description="CANADIAN SYLLABICS BEAVER DENE L", direction="l", linebreak="al", unicodeslot=0x18F3, }, [0x18F4]={ category="lo", description="CANADIAN SYLLABICS BEAVER DENE R", direction="l", linebreak="al", unicodeslot=0x18F4, }, [0x18F5]={ category="lo", description="CANADIAN SYLLABICS CARRIER DENTAL S", direction="l", linebreak="al", unicodeslot=0x18F5, }, [0x1900]={ category="lo", description="LIMBU VOWEL-CARRIER LETTER", direction="l", linebreak="al", unicodeslot=0x1900, }, [0x1901]={ category="lo", description="LIMBU LETTER KA", direction="l", linebreak="al", unicodeslot=0x1901, }, [0x1902]={ category="lo", description="LIMBU LETTER KHA", direction="l", linebreak="al", unicodeslot=0x1902, }, [0x1903]={ category="lo", description="LIMBU LETTER GA", direction="l", linebreak="al", unicodeslot=0x1903, }, [0x1904]={ category="lo", description="LIMBU LETTER GHA", direction="l", linebreak="al", unicodeslot=0x1904, }, [0x1905]={ category="lo", description="LIMBU LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1905, }, [0x1906]={ category="lo", description="LIMBU LETTER CA", direction="l", linebreak="al", unicodeslot=0x1906, }, [0x1907]={ category="lo", description="LIMBU LETTER CHA", direction="l", linebreak="al", unicodeslot=0x1907, }, [0x1908]={ category="lo", description="LIMBU LETTER JA", direction="l", linebreak="al", unicodeslot=0x1908, }, [0x1909]={ category="lo", description="LIMBU LETTER JHA", direction="l", linebreak="al", unicodeslot=0x1909, }, [0x190A]={ category="lo", description="LIMBU LETTER YAN", direction="l", linebreak="al", unicodeslot=0x190A, }, [0x190B]={ category="lo", description="LIMBU LETTER TA", direction="l", linebreak="al", unicodeslot=0x190B, }, [0x190C]={ category="lo", description="LIMBU LETTER THA", direction="l", linebreak="al", unicodeslot=0x190C, }, [0x190D]={ category="lo", description="LIMBU LETTER DA", direction="l", linebreak="al", unicodeslot=0x190D, }, [0x190E]={ category="lo", description="LIMBU LETTER DHA", direction="l", linebreak="al", unicodeslot=0x190E, }, [0x190F]={ category="lo", description="LIMBU LETTER NA", direction="l", linebreak="al", unicodeslot=0x190F, }, [0x1910]={ category="lo", description="LIMBU LETTER PA", direction="l", linebreak="al", unicodeslot=0x1910, }, [0x1911]={ category="lo", description="LIMBU LETTER PHA", direction="l", linebreak="al", unicodeslot=0x1911, }, [0x1912]={ category="lo", description="LIMBU LETTER BA", direction="l", linebreak="al", unicodeslot=0x1912, }, [0x1913]={ category="lo", description="LIMBU LETTER BHA", direction="l", linebreak="al", unicodeslot=0x1913, }, [0x1914]={ category="lo", description="LIMBU LETTER MA", direction="l", linebreak="al", unicodeslot=0x1914, }, [0x1915]={ category="lo", description="LIMBU LETTER YA", direction="l", linebreak="al", unicodeslot=0x1915, }, [0x1916]={ category="lo", description="LIMBU LETTER RA", direction="l", linebreak="al", unicodeslot=0x1916, }, [0x1917]={ category="lo", description="LIMBU LETTER LA", direction="l", linebreak="al", unicodeslot=0x1917, }, [0x1918]={ category="lo", description="LIMBU LETTER WA", direction="l", linebreak="al", unicodeslot=0x1918, }, [0x1919]={ category="lo", description="LIMBU LETTER SHA", direction="l", linebreak="al", unicodeslot=0x1919, }, [0x191A]={ category="lo", description="LIMBU LETTER SSA", direction="l", linebreak="al", unicodeslot=0x191A, }, [0x191B]={ category="lo", description="LIMBU LETTER SA", direction="l", linebreak="al", unicodeslot=0x191B, }, [0x191C]={ category="lo", description="LIMBU LETTER HA", direction="l", linebreak="al", unicodeslot=0x191C, }, [0x1920]={ category="mn", description="LIMBU VOWEL SIGN A", direction="nsm", linebreak="cm", unicodeslot=0x1920, }, [0x1921]={ category="mn", description="LIMBU VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1921, }, [0x1922]={ category="mn", description="LIMBU VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1922, }, [0x1923]={ category="mc", description="LIMBU VOWEL SIGN EE", direction="l", linebreak="cm", unicodeslot=0x1923, }, [0x1924]={ category="mc", description="LIMBU VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0x1924, }, [0x1925]={ category="mc", description="LIMBU VOWEL SIGN OO", direction="l", linebreak="cm", unicodeslot=0x1925, }, [0x1926]={ category="mc", description="LIMBU VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0x1926, }, [0x1927]={ category="mn", description="LIMBU VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x1927, }, [0x1928]={ category="mn", description="LIMBU VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x1928, }, [0x1929]={ category="mc", description="LIMBU SUBJOINED LETTER YA", direction="l", linebreak="cm", unicodeslot=0x1929, }, [0x192A]={ category="mc", description="LIMBU SUBJOINED LETTER RA", direction="l", linebreak="cm", unicodeslot=0x192A, }, [0x192B]={ category="mc", description="LIMBU SUBJOINED LETTER WA", direction="l", linebreak="cm", unicodeslot=0x192B, }, [0x1930]={ category="mc", description="LIMBU SMALL LETTER KA", direction="l", linebreak="cm", unicodeslot=0x1930, }, [0x1931]={ category="mc", description="LIMBU SMALL LETTER NGA", direction="l", linebreak="cm", unicodeslot=0x1931, }, [0x1932]={ category="mn", description="LIMBU SMALL LETTER ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x1932, }, [0x1933]={ category="mc", description="LIMBU SMALL LETTER TA", direction="l", linebreak="cm", unicodeslot=0x1933, }, [0x1934]={ category="mc", description="LIMBU SMALL LETTER NA", direction="l", linebreak="cm", unicodeslot=0x1934, }, [0x1935]={ category="mc", description="LIMBU SMALL LETTER PA", direction="l", linebreak="cm", unicodeslot=0x1935, }, [0x1936]={ category="mc", description="LIMBU SMALL LETTER MA", direction="l", linebreak="cm", unicodeslot=0x1936, }, [0x1937]={ category="mc", description="LIMBU SMALL LETTER RA", direction="l", linebreak="cm", unicodeslot=0x1937, }, [0x1938]={ category="mc", description="LIMBU SMALL LETTER LA", direction="l", linebreak="cm", unicodeslot=0x1938, }, [0x1939]={ category="mn", description="LIMBU SIGN MUKPHRENG", direction="nsm", linebreak="cm", unicodeslot=0x1939, }, [0x193A]={ category="mn", description="LIMBU SIGN KEMPHRENG", direction="nsm", linebreak="cm", unicodeslot=0x193A, }, [0x193B]={ category="mn", description="LIMBU SIGN SA-I", direction="nsm", linebreak="cm", unicodeslot=0x193B, }, [0x1940]={ category="so", description="LIMBU SIGN LOO", direction="on", linebreak="al", unicodeslot=0x1940, }, [0x1944]={ category="po", description="LIMBU EXCLAMATION MARK", direction="on", linebreak="ex", unicodeslot=0x1944, }, [0x1945]={ category="po", description="LIMBU QUESTION MARK", direction="on", linebreak="ex", unicodeslot=0x1945, }, [0x1946]={ category="nd", description="LIMBU DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1946, }, [0x1947]={ category="nd", description="LIMBU DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1947, }, [0x1948]={ category="nd", description="LIMBU DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1948, }, [0x1949]={ category="nd", description="LIMBU DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1949, }, [0x194A]={ category="nd", description="LIMBU DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x194A, }, [0x194B]={ category="nd", description="LIMBU DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x194B, }, [0x194C]={ category="nd", description="LIMBU DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x194C, }, [0x194D]={ category="nd", description="LIMBU DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x194D, }, [0x194E]={ category="nd", description="LIMBU DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x194E, }, [0x194F]={ category="nd", description="LIMBU DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x194F, }, [0x1950]={ category="lo", description="TAI LE LETTER KA", direction="l", linebreak="sa", unicodeslot=0x1950, }, [0x1951]={ category="lo", description="TAI LE LETTER XA", direction="l", linebreak="sa", unicodeslot=0x1951, }, [0x1952]={ category="lo", description="TAI LE LETTER NGA", direction="l", linebreak="sa", unicodeslot=0x1952, }, [0x1953]={ category="lo", description="TAI LE LETTER TSA", direction="l", linebreak="sa", unicodeslot=0x1953, }, [0x1954]={ category="lo", description="TAI LE LETTER SA", direction="l", linebreak="sa", unicodeslot=0x1954, }, [0x1955]={ category="lo", description="TAI LE LETTER YA", direction="l", linebreak="sa", unicodeslot=0x1955, }, [0x1956]={ category="lo", description="TAI LE LETTER TA", direction="l", linebreak="sa", unicodeslot=0x1956, }, [0x1957]={ category="lo", description="TAI LE LETTER THA", direction="l", linebreak="sa", unicodeslot=0x1957, }, [0x1958]={ category="lo", description="TAI LE LETTER LA", direction="l", linebreak="sa", unicodeslot=0x1958, }, [0x1959]={ category="lo", description="TAI LE LETTER PA", direction="l", linebreak="sa", unicodeslot=0x1959, }, [0x195A]={ category="lo", description="TAI LE LETTER PHA", direction="l", linebreak="sa", unicodeslot=0x195A, }, [0x195B]={ category="lo", description="TAI LE LETTER MA", direction="l", linebreak="sa", unicodeslot=0x195B, }, [0x195C]={ category="lo", description="TAI LE LETTER FA", direction="l", linebreak="sa", unicodeslot=0x195C, }, [0x195D]={ category="lo", description="TAI LE LETTER VA", direction="l", linebreak="sa", unicodeslot=0x195D, }, [0x195E]={ category="lo", description="TAI LE LETTER HA", direction="l", linebreak="sa", unicodeslot=0x195E, }, [0x195F]={ category="lo", description="TAI LE LETTER QA", direction="l", linebreak="sa", unicodeslot=0x195F, }, [0x1960]={ category="lo", description="TAI LE LETTER KHA", direction="l", linebreak="sa", unicodeslot=0x1960, }, [0x1961]={ category="lo", description="TAI LE LETTER TSHA", direction="l", linebreak="sa", unicodeslot=0x1961, }, [0x1962]={ category="lo", description="TAI LE LETTER NA", direction="l", linebreak="sa", unicodeslot=0x1962, }, [0x1963]={ category="lo", description="TAI LE LETTER A", direction="l", linebreak="sa", unicodeslot=0x1963, }, [0x1964]={ category="lo", description="TAI LE LETTER I", direction="l", linebreak="sa", unicodeslot=0x1964, }, [0x1965]={ category="lo", description="TAI LE LETTER EE", direction="l", linebreak="sa", unicodeslot=0x1965, }, [0x1966]={ category="lo", description="TAI LE LETTER EH", direction="l", linebreak="sa", unicodeslot=0x1966, }, [0x1967]={ category="lo", description="TAI LE LETTER U", direction="l", linebreak="sa", unicodeslot=0x1967, }, [0x1968]={ category="lo", description="TAI LE LETTER OO", direction="l", linebreak="sa", unicodeslot=0x1968, }, [0x1969]={ category="lo", description="TAI LE LETTER O", direction="l", linebreak="sa", unicodeslot=0x1969, }, [0x196A]={ category="lo", description="TAI LE LETTER UE", direction="l", linebreak="sa", unicodeslot=0x196A, }, [0x196B]={ category="lo", description="TAI LE LETTER E", direction="l", linebreak="sa", unicodeslot=0x196B, }, [0x196C]={ category="lo", description="TAI LE LETTER AUE", direction="l", linebreak="sa", unicodeslot=0x196C, }, [0x196D]={ category="lo", description="TAI LE LETTER AI", direction="l", linebreak="sa", unicodeslot=0x196D, }, [0x1970]={ category="lo", description="TAI LE LETTER TONE-0x0002", direction="l", linebreak="sa", unicodeslot=0x1970, }, [0x1971]={ category="lo", description="TAI LE LETTER TONE-0x0003", direction="l", linebreak="sa", unicodeslot=0x1971, }, [0x1972]={ category="lo", description="TAI LE LETTER TONE-0x0004", direction="l", linebreak="sa", unicodeslot=0x1972, }, [0x1973]={ category="lo", description="TAI LE LETTER TONE-0x0005", direction="l", linebreak="sa", unicodeslot=0x1973, }, [0x1974]={ category="lo", description="TAI LE LETTER TONE-0x0006", direction="l", linebreak="sa", unicodeslot=0x1974, }, [0x1980]={ category="lo", description="NEW TAI LUE LETTER HIGH QA", direction="l", linebreak="sa", unicodeslot=0x1980, }, [0x1981]={ category="lo", description="NEW TAI LUE LETTER LOW QA", direction="l", linebreak="sa", unicodeslot=0x1981, }, [0x1982]={ category="lo", description="NEW TAI LUE LETTER HIGH KA", direction="l", linebreak="sa", unicodeslot=0x1982, }, [0x1983]={ category="lo", description="NEW TAI LUE LETTER HIGH XA", direction="l", linebreak="sa", unicodeslot=0x1983, }, [0x1984]={ category="lo", description="NEW TAI LUE LETTER HIGH NGA", direction="l", linebreak="sa", unicodeslot=0x1984, }, [0x1985]={ category="lo", description="NEW TAI LUE LETTER LOW KA", direction="l", linebreak="sa", unicodeslot=0x1985, }, [0x1986]={ category="lo", description="NEW TAI LUE LETTER LOW XA", direction="l", linebreak="sa", unicodeslot=0x1986, }, [0x1987]={ category="lo", description="NEW TAI LUE LETTER LOW NGA", direction="l", linebreak="sa", unicodeslot=0x1987, }, [0x1988]={ category="lo", description="NEW TAI LUE LETTER HIGH TSA", direction="l", linebreak="sa", unicodeslot=0x1988, }, [0x1989]={ category="lo", description="NEW TAI LUE LETTER HIGH SA", direction="l", linebreak="sa", unicodeslot=0x1989, }, [0x198A]={ category="lo", description="NEW TAI LUE LETTER HIGH YA", direction="l", linebreak="sa", unicodeslot=0x198A, }, [0x198B]={ category="lo", description="NEW TAI LUE LETTER LOW TSA", direction="l", linebreak="sa", unicodeslot=0x198B, }, [0x198C]={ category="lo", description="NEW TAI LUE LETTER LOW SA", direction="l", linebreak="sa", unicodeslot=0x198C, }, [0x198D]={ category="lo", description="NEW TAI LUE LETTER LOW YA", direction="l", linebreak="sa", unicodeslot=0x198D, }, [0x198E]={ category="lo", description="NEW TAI LUE LETTER HIGH TA", direction="l", linebreak="sa", unicodeslot=0x198E, }, [0x198F]={ category="lo", description="NEW TAI LUE LETTER HIGH THA", direction="l", linebreak="sa", unicodeslot=0x198F, }, [0x1990]={ category="lo", description="NEW TAI LUE LETTER HIGH NA", direction="l", linebreak="sa", unicodeslot=0x1990, }, [0x1991]={ category="lo", description="NEW TAI LUE LETTER LOW TA", direction="l", linebreak="sa", unicodeslot=0x1991, }, [0x1992]={ category="lo", description="NEW TAI LUE LETTER LOW THA", direction="l", linebreak="sa", unicodeslot=0x1992, }, [0x1993]={ category="lo", description="NEW TAI LUE LETTER LOW NA", direction="l", linebreak="sa", unicodeslot=0x1993, }, [0x1994]={ category="lo", description="NEW TAI LUE LETTER HIGH PA", direction="l", linebreak="sa", unicodeslot=0x1994, }, [0x1995]={ category="lo", description="NEW TAI LUE LETTER HIGH PHA", direction="l", linebreak="sa", unicodeslot=0x1995, }, [0x1996]={ category="lo", description="NEW TAI LUE LETTER HIGH MA", direction="l", linebreak="sa", unicodeslot=0x1996, }, [0x1997]={ category="lo", description="NEW TAI LUE LETTER LOW PA", direction="l", linebreak="sa", unicodeslot=0x1997, }, [0x1998]={ category="lo", description="NEW TAI LUE LETTER LOW PHA", direction="l", linebreak="sa", unicodeslot=0x1998, }, [0x1999]={ category="lo", description="NEW TAI LUE LETTER LOW MA", direction="l", linebreak="sa", unicodeslot=0x1999, }, [0x199A]={ category="lo", description="NEW TAI LUE LETTER HIGH FA", direction="l", linebreak="sa", unicodeslot=0x199A, }, [0x199B]={ category="lo", description="NEW TAI LUE LETTER HIGH VA", direction="l", linebreak="sa", unicodeslot=0x199B, }, [0x199C]={ category="lo", description="NEW TAI LUE LETTER HIGH LA", direction="l", linebreak="sa", unicodeslot=0x199C, }, [0x199D]={ category="lo", description="NEW TAI LUE LETTER LOW FA", direction="l", linebreak="sa", unicodeslot=0x199D, }, [0x199E]={ category="lo", description="NEW TAI LUE LETTER LOW VA", direction="l", linebreak="sa", unicodeslot=0x199E, }, [0x199F]={ category="lo", description="NEW TAI LUE LETTER LOW LA", direction="l", linebreak="sa", unicodeslot=0x199F, }, [0x19A0]={ category="lo", description="NEW TAI LUE LETTER HIGH HA", direction="l", linebreak="sa", unicodeslot=0x19A0, }, [0x19A1]={ category="lo", description="NEW TAI LUE LETTER HIGH DA", direction="l", linebreak="sa", unicodeslot=0x19A1, }, [0x19A2]={ category="lo", description="NEW TAI LUE LETTER HIGH BA", direction="l", linebreak="sa", unicodeslot=0x19A2, }, [0x19A3]={ category="lo", description="NEW TAI LUE LETTER LOW HA", direction="l", linebreak="sa", unicodeslot=0x19A3, }, [0x19A4]={ category="lo", description="NEW TAI LUE LETTER LOW DA", direction="l", linebreak="sa", unicodeslot=0x19A4, }, [0x19A5]={ category="lo", description="NEW TAI LUE LETTER LOW BA", direction="l", linebreak="sa", unicodeslot=0x19A5, }, [0x19A6]={ category="lo", description="NEW TAI LUE LETTER HIGH KVA", direction="l", linebreak="sa", unicodeslot=0x19A6, }, [0x19A7]={ category="lo", description="NEW TAI LUE LETTER HIGH XVA", direction="l", linebreak="sa", unicodeslot=0x19A7, }, [0x19A8]={ category="lo", description="NEW TAI LUE LETTER LOW KVA", direction="l", linebreak="sa", unicodeslot=0x19A8, }, [0x19A9]={ category="lo", description="NEW TAI LUE LETTER LOW XVA", direction="l", linebreak="sa", unicodeslot=0x19A9, }, [0x19AA]={ category="lo", description="NEW TAI LUE LETTER HIGH SUA", direction="l", linebreak="sa", unicodeslot=0x19AA, }, [0x19AB]={ category="lo", description="NEW TAI LUE LETTER LOW SUA", direction="l", linebreak="sa", unicodeslot=0x19AB, }, [0x19B0]={ category="mc", description="NEW TAI LUE VOWEL SIGN VOWEL SHORTENER", direction="l", linebreak="sa", unicodeslot=0x19B0, }, [0x19B1]={ category="mc", description="NEW TAI LUE VOWEL SIGN AA", direction="l", linebreak="sa", unicodeslot=0x19B1, }, [0x19B2]={ category="mc", description="NEW TAI LUE VOWEL SIGN II", direction="l", linebreak="sa", unicodeslot=0x19B2, }, [0x19B3]={ category="mc", description="NEW TAI LUE VOWEL SIGN U", direction="l", linebreak="sa", unicodeslot=0x19B3, }, [0x19B4]={ category="mc", description="NEW TAI LUE VOWEL SIGN UU", direction="l", linebreak="sa", unicodeslot=0x19B4, }, [0x19B5]={ category="mc", description="NEW TAI LUE VOWEL SIGN E", direction="l", linebreak="sa", unicodeslot=0x19B5, }, [0x19B6]={ category="mc", description="NEW TAI LUE VOWEL SIGN AE", direction="l", linebreak="sa", unicodeslot=0x19B6, }, [0x19B7]={ category="mc", description="NEW TAI LUE VOWEL SIGN O", direction="l", linebreak="sa", unicodeslot=0x19B7, }, [0x19B8]={ category="mc", description="NEW TAI LUE VOWEL SIGN OA", direction="l", linebreak="sa", unicodeslot=0x19B8, }, [0x19B9]={ category="mc", description="NEW TAI LUE VOWEL SIGN UE", direction="l", linebreak="sa", unicodeslot=0x19B9, }, [0x19BA]={ category="mc", description="NEW TAI LUE VOWEL SIGN AY", direction="l", linebreak="sa", unicodeslot=0x19BA, }, [0x19BB]={ category="mc", description="NEW TAI LUE VOWEL SIGN AAY", direction="l", linebreak="sa", unicodeslot=0x19BB, }, [0x19BC]={ category="mc", description="NEW TAI LUE VOWEL SIGN UY", direction="l", linebreak="sa", unicodeslot=0x19BC, }, [0x19BD]={ category="mc", description="NEW TAI LUE VOWEL SIGN OY", direction="l", linebreak="sa", unicodeslot=0x19BD, }, [0x19BE]={ category="mc", description="NEW TAI LUE VOWEL SIGN OAY", direction="l", linebreak="sa", unicodeslot=0x19BE, }, [0x19BF]={ category="mc", description="NEW TAI LUE VOWEL SIGN UEY", direction="l", linebreak="sa", unicodeslot=0x19BF, }, [0x19C0]={ category="mc", description="NEW TAI LUE VOWEL SIGN IY", direction="l", linebreak="sa", unicodeslot=0x19C0, }, [0x19C1]={ category="lo", description="NEW TAI LUE LETTER FINAL V", direction="l", linebreak="sa", unicodeslot=0x19C1, }, [0x19C2]={ category="lo", description="NEW TAI LUE LETTER FINAL NG", direction="l", linebreak="sa", unicodeslot=0x19C2, }, [0x19C3]={ category="lo", description="NEW TAI LUE LETTER FINAL N", direction="l", linebreak="sa", unicodeslot=0x19C3, }, [0x19C4]={ category="lo", description="NEW TAI LUE LETTER FINAL M", direction="l", linebreak="sa", unicodeslot=0x19C4, }, [0x19C5]={ category="lo", description="NEW TAI LUE LETTER FINAL K", direction="l", linebreak="sa", unicodeslot=0x19C5, }, [0x19C6]={ category="lo", description="NEW TAI LUE LETTER FINAL D", direction="l", linebreak="sa", unicodeslot=0x19C6, }, [0x19C7]={ category="lo", description="NEW TAI LUE LETTER FINAL B", direction="l", linebreak="sa", unicodeslot=0x19C7, }, [0x19C8]={ category="mc", description="NEW TAI LUE TONE MARK-0x0001", direction="l", linebreak="sa", unicodeslot=0x19C8, }, [0x19C9]={ category="mc", description="NEW TAI LUE TONE MARK-0x0002", direction="l", linebreak="sa", unicodeslot=0x19C9, }, [0x19D0]={ category="nd", description="NEW TAI LUE DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x19D0, }, [0x19D1]={ category="nd", description="NEW TAI LUE DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x19D1, }, [0x19D2]={ category="nd", description="NEW TAI LUE DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x19D2, }, [0x19D3]={ category="nd", description="NEW TAI LUE DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x19D3, }, [0x19D4]={ category="nd", description="NEW TAI LUE DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x19D4, }, [0x19D5]={ category="nd", description="NEW TAI LUE DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x19D5, }, [0x19D6]={ category="nd", description="NEW TAI LUE DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x19D6, }, [0x19D7]={ category="nd", description="NEW TAI LUE DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x19D7, }, [0x19D8]={ category="nd", description="NEW TAI LUE DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x19D8, }, [0x19D9]={ category="nd", description="NEW TAI LUE DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x19D9, }, [0x19DA]={ category="no", description="NEW TAI LUE THAM DIGIT ONE", direction="l", linebreak="sa", unicodeslot=0x19DA, }, [0x19DE]={ category="po", description="NEW TAI LUE SIGN LAE", direction="on", linebreak="sa", unicodeslot=0x19DE, }, [0x19DF]={ category="po", description="NEW TAI LUE SIGN LAEV", direction="on", linebreak="sa", unicodeslot=0x19DF, }, [0x19E0]={ category="so", description="KHMER SYMBOL PATHAMASAT", direction="on", linebreak="al", unicodeslot=0x19E0, }, [0x19E1]={ category="so", description="KHMER SYMBOL MUOY KOET", direction="on", linebreak="al", unicodeslot=0x19E1, }, [0x19E2]={ category="so", description="KHMER SYMBOL PII KOET", direction="on", linebreak="al", unicodeslot=0x19E2, }, [0x19E3]={ category="so", description="KHMER SYMBOL BEI KOET", direction="on", linebreak="al", unicodeslot=0x19E3, }, [0x19E4]={ category="so", description="KHMER SYMBOL BUON KOET", direction="on", linebreak="al", unicodeslot=0x19E4, }, [0x19E5]={ category="so", description="KHMER SYMBOL PRAM KOET", direction="on", linebreak="al", unicodeslot=0x19E5, }, [0x19E6]={ category="so", description="KHMER SYMBOL PRAM-MUOY KOET", direction="on", linebreak="al", unicodeslot=0x19E6, }, [0x19E7]={ category="so", description="KHMER SYMBOL PRAM-PII KOET", direction="on", linebreak="al", unicodeslot=0x19E7, }, [0x19E8]={ category="so", description="KHMER SYMBOL PRAM-BEI KOET", direction="on", linebreak="al", unicodeslot=0x19E8, }, [0x19E9]={ category="so", description="KHMER SYMBOL PRAM-BUON KOET", direction="on", linebreak="al", unicodeslot=0x19E9, }, [0x19EA]={ category="so", description="KHMER SYMBOL DAP KOET", direction="on", linebreak="al", unicodeslot=0x19EA, }, [0x19EB]={ category="so", description="KHMER SYMBOL DAP-MUOY KOET", direction="on", linebreak="al", unicodeslot=0x19EB, }, [0x19EC]={ category="so", description="KHMER SYMBOL DAP-PII KOET", direction="on", linebreak="al", unicodeslot=0x19EC, }, [0x19ED]={ category="so", description="KHMER SYMBOL DAP-BEI KOET", direction="on", linebreak="al", unicodeslot=0x19ED, }, [0x19EE]={ category="so", description="KHMER SYMBOL DAP-BUON KOET", direction="on", linebreak="al", unicodeslot=0x19EE, }, [0x19EF]={ category="so", description="KHMER SYMBOL DAP-PRAM KOET", direction="on", linebreak="al", unicodeslot=0x19EF, }, [0x19F0]={ category="so", description="KHMER SYMBOL TUTEYASAT", direction="on", linebreak="al", unicodeslot=0x19F0, }, [0x19F1]={ category="so", description="KHMER SYMBOL MUOY ROC", direction="on", linebreak="al", unicodeslot=0x19F1, }, [0x19F2]={ category="so", description="KHMER SYMBOL PII ROC", direction="on", linebreak="al", unicodeslot=0x19F2, }, [0x19F3]={ category="so", description="KHMER SYMBOL BEI ROC", direction="on", linebreak="al", unicodeslot=0x19F3, }, [0x19F4]={ category="so", description="KHMER SYMBOL BUON ROC", direction="on", linebreak="al", unicodeslot=0x19F4, }, [0x19F5]={ category="so", description="KHMER SYMBOL PRAM ROC", direction="on", linebreak="al", unicodeslot=0x19F5, }, [0x19F6]={ category="so", description="KHMER SYMBOL PRAM-MUOY ROC", direction="on", linebreak="al", unicodeslot=0x19F6, }, [0x19F7]={ category="so", description="KHMER SYMBOL PRAM-PII ROC", direction="on", linebreak="al", unicodeslot=0x19F7, }, [0x19F8]={ category="so", description="KHMER SYMBOL PRAM-BEI ROC", direction="on", linebreak="al", unicodeslot=0x19F8, }, [0x19F9]={ category="so", description="KHMER SYMBOL PRAM-BUON ROC", direction="on", linebreak="al", unicodeslot=0x19F9, }, [0x19FA]={ category="so", description="KHMER SYMBOL DAP ROC", direction="on", linebreak="al", unicodeslot=0x19FA, }, [0x19FB]={ category="so", description="KHMER SYMBOL DAP-MUOY ROC", direction="on", linebreak="al", unicodeslot=0x19FB, }, [0x19FC]={ category="so", description="KHMER SYMBOL DAP-PII ROC", direction="on", linebreak="al", unicodeslot=0x19FC, }, [0x19FD]={ category="so", description="KHMER SYMBOL DAP-BEI ROC", direction="on", linebreak="al", unicodeslot=0x19FD, }, [0x19FE]={ category="so", description="KHMER SYMBOL DAP-BUON ROC", direction="on", linebreak="al", unicodeslot=0x19FE, }, [0x19FF]={ category="so", description="KHMER SYMBOL DAP-PRAM ROC", direction="on", linebreak="al", unicodeslot=0x19FF, }, [0x1A00]={ category="lo", description="BUGINESE LETTER KA", direction="l", linebreak="al", unicodeslot=0x1A00, }, [0x1A01]={ category="lo", description="BUGINESE LETTER GA", direction="l", linebreak="al", unicodeslot=0x1A01, }, [0x1A02]={ category="lo", description="BUGINESE LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1A02, }, [0x1A03]={ category="lo", description="BUGINESE LETTER NGKA", direction="l", linebreak="al", unicodeslot=0x1A03, }, [0x1A04]={ category="lo", description="BUGINESE LETTER PA", direction="l", linebreak="al", unicodeslot=0x1A04, }, [0x1A05]={ category="lo", description="BUGINESE LETTER BA", direction="l", linebreak="al", unicodeslot=0x1A05, }, [0x1A06]={ category="lo", description="BUGINESE LETTER MA", direction="l", linebreak="al", unicodeslot=0x1A06, }, [0x1A07]={ category="lo", description="BUGINESE LETTER MPA", direction="l", linebreak="al", unicodeslot=0x1A07, }, [0x1A08]={ category="lo", description="BUGINESE LETTER TA", direction="l", linebreak="al", unicodeslot=0x1A08, }, [0x1A09]={ category="lo", description="BUGINESE LETTER DA", direction="l", linebreak="al", unicodeslot=0x1A09, }, [0x1A0A]={ category="lo", description="BUGINESE LETTER NA", direction="l", linebreak="al", unicodeslot=0x1A0A, }, [0x1A0B]={ category="lo", description="BUGINESE LETTER NRA", direction="l", linebreak="al", unicodeslot=0x1A0B, }, [0x1A0C]={ category="lo", description="BUGINESE LETTER CA", direction="l", linebreak="al", unicodeslot=0x1A0C, }, [0x1A0D]={ category="lo", description="BUGINESE LETTER JA", direction="l", linebreak="al", unicodeslot=0x1A0D, }, [0x1A0E]={ category="lo", description="BUGINESE LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1A0E, }, [0x1A0F]={ category="lo", description="BUGINESE LETTER NYCA", direction="l", linebreak="al", unicodeslot=0x1A0F, }, [0x1A10]={ category="lo", description="BUGINESE LETTER YA", direction="l", linebreak="al", unicodeslot=0x1A10, }, [0x1A11]={ category="lo", description="BUGINESE LETTER RA", direction="l", linebreak="al", unicodeslot=0x1A11, }, [0x1A12]={ category="lo", description="BUGINESE LETTER LA", direction="l", linebreak="al", unicodeslot=0x1A12, }, [0x1A13]={ category="lo", description="BUGINESE LETTER VA", direction="l", linebreak="al", unicodeslot=0x1A13, }, [0x1A14]={ category="lo", description="BUGINESE LETTER SA", direction="l", linebreak="al", unicodeslot=0x1A14, }, [0x1A15]={ category="lo", description="BUGINESE LETTER A", direction="l", linebreak="al", unicodeslot=0x1A15, }, [0x1A16]={ category="lo", description="BUGINESE LETTER HA", direction="l", linebreak="al", unicodeslot=0x1A16, }, [0x1A17]={ category="mn", description="BUGINESE VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1A17, }, [0x1A18]={ category="mn", description="BUGINESE VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1A18, }, [0x1A19]={ category="mc", description="BUGINESE VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x1A19, }, [0x1A1A]={ category="mc", description="BUGINESE VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x1A1A, }, [0x1A1B]={ category="mc", description="BUGINESE VOWEL SIGN AE", direction="l", linebreak="cm", unicodeslot=0x1A1B, }, [0x1A1E]={ category="po", description="BUGINESE PALLAWA", direction="l", linebreak="al", unicodeslot=0x1A1E, }, [0x1A1F]={ category="po", description="BUGINESE END OF SECTION", direction="l", linebreak="al", unicodeslot=0x1A1F, }, [0x1A20]={ category="lo", description="TAI THAM LETTER HIGH KA", direction="l", linebreak="sa", unicodeslot=0x1A20, }, [0x1A21]={ category="lo", description="TAI THAM LETTER HIGH KHA", direction="l", linebreak="sa", unicodeslot=0x1A21, }, [0x1A22]={ category="lo", description="TAI THAM LETTER HIGH KXA", direction="l", linebreak="sa", unicodeslot=0x1A22, }, [0x1A23]={ category="lo", description="TAI THAM LETTER LOW KA", direction="l", linebreak="sa", unicodeslot=0x1A23, }, [0x1A24]={ category="lo", description="TAI THAM LETTER LOW KXA", direction="l", linebreak="sa", unicodeslot=0x1A24, }, [0x1A25]={ category="lo", description="TAI THAM LETTER LOW KHA", direction="l", linebreak="sa", unicodeslot=0x1A25, }, [0x1A26]={ category="lo", description="TAI THAM LETTER NGA", direction="l", linebreak="sa", unicodeslot=0x1A26, }, [0x1A27]={ category="lo", description="TAI THAM LETTER HIGH CA", direction="l", linebreak="sa", unicodeslot=0x1A27, }, [0x1A28]={ category="lo", description="TAI THAM LETTER HIGH CHA", direction="l", linebreak="sa", unicodeslot=0x1A28, }, [0x1A29]={ category="lo", description="TAI THAM LETTER LOW CA", direction="l", linebreak="sa", unicodeslot=0x1A29, }, [0x1A2A]={ category="lo", description="TAI THAM LETTER LOW SA", direction="l", linebreak="sa", unicodeslot=0x1A2A, }, [0x1A2B]={ category="lo", description="TAI THAM LETTER LOW CHA", direction="l", linebreak="sa", unicodeslot=0x1A2B, }, [0x1A2C]={ category="lo", description="TAI THAM LETTER NYA", direction="l", linebreak="sa", unicodeslot=0x1A2C, }, [0x1A2D]={ category="lo", description="TAI THAM LETTER RATA", direction="l", linebreak="sa", unicodeslot=0x1A2D, }, [0x1A2E]={ category="lo", description="TAI THAM LETTER HIGH RATHA", direction="l", linebreak="sa", unicodeslot=0x1A2E, }, [0x1A2F]={ category="lo", description="TAI THAM LETTER DA", direction="l", linebreak="sa", unicodeslot=0x1A2F, }, [0x1A30]={ category="lo", description="TAI THAM LETTER LOW RATHA", direction="l", linebreak="sa", unicodeslot=0x1A30, }, [0x1A31]={ category="lo", description="TAI THAM LETTER RANA", direction="l", linebreak="sa", unicodeslot=0x1A31, }, [0x1A32]={ category="lo", description="TAI THAM LETTER HIGH TA", direction="l", linebreak="sa", unicodeslot=0x1A32, }, [0x1A33]={ category="lo", description="TAI THAM LETTER HIGH THA", direction="l", linebreak="sa", unicodeslot=0x1A33, }, [0x1A34]={ category="lo", description="TAI THAM LETTER LOW TA", direction="l", linebreak="sa", unicodeslot=0x1A34, }, [0x1A35]={ category="lo", description="TAI THAM LETTER LOW THA", direction="l", linebreak="sa", unicodeslot=0x1A35, }, [0x1A36]={ category="lo", description="TAI THAM LETTER NA", direction="l", linebreak="sa", unicodeslot=0x1A36, }, [0x1A37]={ category="lo", description="TAI THAM LETTER BA", direction="l", linebreak="sa", unicodeslot=0x1A37, }, [0x1A38]={ category="lo", description="TAI THAM LETTER HIGH PA", direction="l", linebreak="sa", unicodeslot=0x1A38, }, [0x1A39]={ category="lo", description="TAI THAM LETTER HIGH PHA", direction="l", linebreak="sa", unicodeslot=0x1A39, }, [0x1A3A]={ category="lo", description="TAI THAM LETTER HIGH FA", direction="l", linebreak="sa", unicodeslot=0x1A3A, }, [0x1A3B]={ category="lo", description="TAI THAM LETTER LOW PA", direction="l", linebreak="sa", unicodeslot=0x1A3B, }, [0x1A3C]={ category="lo", description="TAI THAM LETTER LOW FA", direction="l", linebreak="sa", unicodeslot=0x1A3C, }, [0x1A3D]={ category="lo", description="TAI THAM LETTER LOW PHA", direction="l", linebreak="sa", unicodeslot=0x1A3D, }, [0x1A3E]={ category="lo", description="TAI THAM LETTER MA", direction="l", linebreak="sa", unicodeslot=0x1A3E, }, [0x1A3F]={ category="lo", description="TAI THAM LETTER LOW YA", direction="l", linebreak="sa", unicodeslot=0x1A3F, }, [0x1A40]={ category="lo", description="TAI THAM LETTER HIGH YA", direction="l", linebreak="sa", unicodeslot=0x1A40, }, [0x1A41]={ category="lo", description="TAI THAM LETTER RA", direction="l", linebreak="sa", unicodeslot=0x1A41, }, [0x1A42]={ category="lo", description="TAI THAM LETTER RUE", direction="l", linebreak="sa", unicodeslot=0x1A42, }, [0x1A43]={ category="lo", description="TAI THAM LETTER LA", direction="l", linebreak="sa", unicodeslot=0x1A43, }, [0x1A44]={ category="lo", description="TAI THAM LETTER LUE", direction="l", linebreak="sa", unicodeslot=0x1A44, }, [0x1A45]={ category="lo", description="TAI THAM LETTER WA", direction="l", linebreak="sa", unicodeslot=0x1A45, }, [0x1A46]={ category="lo", description="TAI THAM LETTER HIGH SHA", direction="l", linebreak="sa", unicodeslot=0x1A46, }, [0x1A47]={ category="lo", description="TAI THAM LETTER HIGH SSA", direction="l", linebreak="sa", unicodeslot=0x1A47, }, [0x1A48]={ category="lo", description="TAI THAM LETTER HIGH SA", direction="l", linebreak="sa", unicodeslot=0x1A48, }, [0x1A49]={ category="lo", description="TAI THAM LETTER HIGH HA", direction="l", linebreak="sa", unicodeslot=0x1A49, }, [0x1A4A]={ category="lo", description="TAI THAM LETTER LLA", direction="l", linebreak="sa", unicodeslot=0x1A4A, }, [0x1A4B]={ category="lo", description="TAI THAM LETTER A", direction="l", linebreak="sa", unicodeslot=0x1A4B, }, [0x1A4C]={ category="lo", description="TAI THAM LETTER LOW HA", direction="l", linebreak="sa", unicodeslot=0x1A4C, }, [0x1A4D]={ category="lo", description="TAI THAM LETTER I", direction="l", linebreak="sa", unicodeslot=0x1A4D, }, [0x1A4E]={ category="lo", description="TAI THAM LETTER II", direction="l", linebreak="sa", unicodeslot=0x1A4E, }, [0x1A4F]={ category="lo", description="TAI THAM LETTER U", direction="l", linebreak="sa", unicodeslot=0x1A4F, }, [0x1A50]={ category="lo", description="TAI THAM LETTER UU", direction="l", linebreak="sa", unicodeslot=0x1A50, }, [0x1A51]={ category="lo", description="TAI THAM LETTER EE", direction="l", linebreak="sa", unicodeslot=0x1A51, }, [0x1A52]={ category="lo", description="TAI THAM LETTER OO", direction="l", linebreak="sa", unicodeslot=0x1A52, }, [0x1A53]={ category="lo", description="TAI THAM LETTER LAE", direction="l", linebreak="sa", unicodeslot=0x1A53, }, [0x1A54]={ category="lo", description="TAI THAM LETTER GREAT SA", direction="l", linebreak="sa", unicodeslot=0x1A54, }, [0x1A55]={ category="mc", description="TAI THAM CONSONANT SIGN MEDIAL RA", direction="l", linebreak="sa", unicodeslot=0x1A55, }, [0x1A56]={ category="mn", description="TAI THAM CONSONANT SIGN MEDIAL LA", direction="nsm", linebreak="sa", unicodeslot=0x1A56, }, [0x1A57]={ category="mc", description="TAI THAM CONSONANT SIGN LA TANG LAI", direction="l", linebreak="sa", unicodeslot=0x1A57, }, [0x1A58]={ category="mn", description="TAI THAM SIGN MAI KANG LAI", direction="nsm", linebreak="sa", unicodeslot=0x1A58, }, [0x1A59]={ category="mn", description="TAI THAM CONSONANT SIGN FINAL NGA", direction="nsm", linebreak="sa", unicodeslot=0x1A59, }, [0x1A5A]={ category="mn", description="TAI THAM CONSONANT SIGN LOW PA", direction="nsm", linebreak="sa", unicodeslot=0x1A5A, }, [0x1A5B]={ category="mn", description="TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA", direction="nsm", linebreak="sa", unicodeslot=0x1A5B, }, [0x1A5C]={ category="mn", description="TAI THAM CONSONANT SIGN MA", direction="nsm", linebreak="sa", unicodeslot=0x1A5C, }, [0x1A5D]={ category="mn", description="TAI THAM CONSONANT SIGN BA", direction="nsm", linebreak="sa", unicodeslot=0x1A5D, }, [0x1A5E]={ category="mn", description="TAI THAM CONSONANT SIGN SA", direction="nsm", linebreak="sa", unicodeslot=0x1A5E, }, [0x1A60]={ category="mn", description="TAI THAM SIGN SAKOT", direction="nsm", linebreak="sa", unicodeslot=0x1A60, }, [0x1A61]={ category="mc", description="TAI THAM VOWEL SIGN A", direction="l", linebreak="sa", unicodeslot=0x1A61, }, [0x1A62]={ category="mn", description="TAI THAM VOWEL SIGN MAI SAT", direction="nsm", linebreak="sa", unicodeslot=0x1A62, }, [0x1A63]={ category="mc", description="TAI THAM VOWEL SIGN AA", direction="l", linebreak="sa", unicodeslot=0x1A63, }, [0x1A64]={ category="mc", description="TAI THAM VOWEL SIGN TALL AA", direction="l", linebreak="sa", unicodeslot=0x1A64, }, [0x1A65]={ category="mn", description="TAI THAM VOWEL SIGN I", direction="nsm", linebreak="sa", unicodeslot=0x1A65, }, [0x1A66]={ category="mn", description="TAI THAM VOWEL SIGN II", direction="nsm", linebreak="sa", unicodeslot=0x1A66, }, [0x1A67]={ category="mn", description="TAI THAM VOWEL SIGN UE", direction="nsm", linebreak="sa", unicodeslot=0x1A67, }, [0x1A68]={ category="mn", description="TAI THAM VOWEL SIGN UUE", direction="nsm", linebreak="sa", unicodeslot=0x1A68, }, [0x1A69]={ category="mn", description="TAI THAM VOWEL SIGN U", direction="nsm", linebreak="sa", unicodeslot=0x1A69, }, [0x1A6A]={ category="mn", description="TAI THAM VOWEL SIGN UU", direction="nsm", linebreak="sa", unicodeslot=0x1A6A, }, [0x1A6B]={ category="mn", description="TAI THAM VOWEL SIGN O", direction="nsm", linebreak="sa", unicodeslot=0x1A6B, }, [0x1A6C]={ category="mn", description="TAI THAM VOWEL SIGN OA BELOW", direction="nsm", linebreak="sa", unicodeslot=0x1A6C, }, [0x1A6D]={ category="mc", description="TAI THAM VOWEL SIGN OY", direction="l", linebreak="sa", unicodeslot=0x1A6D, }, [0x1A6E]={ category="mc", description="TAI THAM VOWEL SIGN E", direction="l", linebreak="sa", unicodeslot=0x1A6E, }, [0x1A6F]={ category="mc", description="TAI THAM VOWEL SIGN AE", direction="l", linebreak="sa", unicodeslot=0x1A6F, }, [0x1A70]={ category="mc", description="TAI THAM VOWEL SIGN OO", direction="l", linebreak="sa", unicodeslot=0x1A70, }, [0x1A71]={ category="mc", description="TAI THAM VOWEL SIGN AI", direction="l", linebreak="sa", unicodeslot=0x1A71, }, [0x1A72]={ category="mc", description="TAI THAM VOWEL SIGN THAM AI", direction="l", linebreak="sa", unicodeslot=0x1A72, }, [0x1A73]={ category="mn", description="TAI THAM VOWEL SIGN OA ABOVE", direction="nsm", linebreak="sa", unicodeslot=0x1A73, }, [0x1A74]={ category="mn", description="TAI THAM SIGN MAI KANG", direction="nsm", linebreak="sa", unicodeslot=0x1A74, }, [0x1A75]={ category="mn", description="TAI THAM SIGN TONE-1", direction="nsm", linebreak="sa", unicodeslot=0x1A75, }, [0x1A76]={ category="mn", description="TAI THAM SIGN TONE-2", direction="nsm", linebreak="sa", unicodeslot=0x1A76, }, [0x1A77]={ category="mn", description="TAI THAM SIGN KHUEN TONE-3", direction="nsm", linebreak="sa", unicodeslot=0x1A77, }, [0x1A78]={ category="mn", description="TAI THAM SIGN KHUEN TONE-4", direction="nsm", linebreak="sa", unicodeslot=0x1A78, }, [0x1A79]={ category="mn", description="TAI THAM SIGN KHUEN TONE-5", direction="nsm", linebreak="sa", unicodeslot=0x1A79, }, [0x1A7A]={ category="mn", description="TAI THAM SIGN RA HAAM", direction="nsm", linebreak="sa", unicodeslot=0x1A7A, }, [0x1A7B]={ category="mn", description="TAI THAM SIGN MAI SAM", direction="nsm", linebreak="sa", unicodeslot=0x1A7B, }, [0x1A7C]={ category="mn", description="TAI THAM SIGN KHUEN-LUE KARAN", direction="nsm", linebreak="sa", unicodeslot=0x1A7C, }, [0x1A7F]={ category="mn", description="TAI THAM COMBINING CRYPTOGRAMMIC DOT", direction="nsm", linebreak="cm", unicodeslot=0x1A7F, }, [0x1A80]={ category="nd", description="TAI THAM HORA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1A80, }, [0x1A81]={ category="nd", description="TAI THAM HORA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1A81, }, [0x1A82]={ category="nd", description="TAI THAM HORA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1A82, }, [0x1A83]={ category="nd", description="TAI THAM HORA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1A83, }, [0x1A84]={ category="nd", description="TAI THAM HORA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1A84, }, [0x1A85]={ category="nd", description="TAI THAM HORA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1A85, }, [0x1A86]={ category="nd", description="TAI THAM HORA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1A86, }, [0x1A87]={ category="nd", description="TAI THAM HORA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1A87, }, [0x1A88]={ category="nd", description="TAI THAM HORA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1A88, }, [0x1A89]={ category="nd", description="TAI THAM HORA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1A89, }, [0x1A90]={ category="nd", description="TAI THAM THAM DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1A90, }, [0x1A91]={ category="nd", description="TAI THAM THAM DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1A91, }, [0x1A92]={ category="nd", description="TAI THAM THAM DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1A92, }, [0x1A93]={ category="nd", description="TAI THAM THAM DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1A93, }, [0x1A94]={ category="nd", description="TAI THAM THAM DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1A94, }, [0x1A95]={ category="nd", description="TAI THAM THAM DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1A95, }, [0x1A96]={ category="nd", description="TAI THAM THAM DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1A96, }, [0x1A97]={ category="nd", description="TAI THAM THAM DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1A97, }, [0x1A98]={ category="nd", description="TAI THAM THAM DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1A98, }, [0x1A99]={ category="nd", description="TAI THAM THAM DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1A99, }, [0x1AA0]={ category="po", description="TAI THAM SIGN WIANG", direction="l", linebreak="sa", unicodeslot=0x1AA0, }, [0x1AA1]={ category="po", description="TAI THAM SIGN WIANGWAAK", direction="l", linebreak="sa", unicodeslot=0x1AA1, }, [0x1AA2]={ category="po", description="TAI THAM SIGN SAWAN", direction="l", linebreak="sa", unicodeslot=0x1AA2, }, [0x1AA3]={ category="po", description="TAI THAM SIGN KEOW", direction="l", linebreak="sa", unicodeslot=0x1AA3, }, [0x1AA4]={ category="po", description="TAI THAM SIGN HOY", direction="l", linebreak="sa", unicodeslot=0x1AA4, }, [0x1AA5]={ category="po", description="TAI THAM SIGN DOKMAI", direction="l", linebreak="sa", unicodeslot=0x1AA5, }, [0x1AA6]={ category="po", description="TAI THAM SIGN REVERSED ROTATED RANA", direction="l", linebreak="sa", unicodeslot=0x1AA6, }, [0x1AA7]={ category="lm", description="TAI THAM SIGN MAI YAMOK", direction="l", linebreak="sa", unicodeslot=0x1AA7, }, [0x1AA8]={ category="po", description="TAI THAM SIGN KAAN", direction="l", linebreak="sa", unicodeslot=0x1AA8, }, [0x1AA9]={ category="po", description="TAI THAM SIGN KAANKUU", direction="l", linebreak="sa", unicodeslot=0x1AA9, }, [0x1AAA]={ category="po", description="TAI THAM SIGN SATKAAN", direction="l", linebreak="sa", unicodeslot=0x1AAA, }, [0x1AAB]={ category="po", description="TAI THAM SIGN SATKAANKUU", direction="l", linebreak="sa", unicodeslot=0x1AAB, }, [0x1AAC]={ category="po", description="TAI THAM SIGN HANG", direction="l", linebreak="sa", unicodeslot=0x1AAC, }, [0x1AAD]={ category="po", description="TAI THAM SIGN CAANG", direction="l", linebreak="sa", unicodeslot=0x1AAD, }, [0x1B00]={ category="mn", description="BALINESE SIGN ULU RICEM", direction="nsm", linebreak="cm", unicodeslot=0x1B00, }, [0x1B01]={ category="mn", description="BALINESE SIGN ULU CANDRA", direction="nsm", linebreak="cm", unicodeslot=0x1B01, }, [0x1B02]={ category="mn", description="BALINESE SIGN CECEK", direction="nsm", linebreak="cm", unicodeslot=0x1B02, }, [0x1B03]={ category="mn", description="BALINESE SIGN SURANG", direction="nsm", linebreak="cm", unicodeslot=0x1B03, }, [0x1B04]={ category="mc", description="BALINESE SIGN BISAH", direction="l", linebreak="cm", unicodeslot=0x1B04, }, [0x1B05]={ category="lo", description="BALINESE LETTER AKARA", direction="l", linebreak="al", unicodeslot=0x1B05, }, [0x1B06]={ category="lo", description="BALINESE LETTER AKARA TEDUNG", direction="l", linebreak="al", specials={ "char", 0x1B05, 0x1B35 }, unicodeslot=0x1B06, }, [0x1B07]={ category="lo", description="BALINESE LETTER IKARA", direction="l", linebreak="al", unicodeslot=0x1B07, }, [0x1B08]={ category="lo", description="BALINESE LETTER IKARA TEDUNG", direction="l", linebreak="al", specials={ "char", 0x1B07, 0x1B35 }, unicodeslot=0x1B08, }, [0x1B09]={ category="lo", description="BALINESE LETTER UKARA", direction="l", linebreak="al", unicodeslot=0x1B09, }, [0x1B0A]={ category="lo", description="BALINESE LETTER UKARA TEDUNG", direction="l", linebreak="al", specials={ "char", 0x1B09, 0x1B35 }, unicodeslot=0x1B0A, }, [0x1B0B]={ category="lo", description="BALINESE LETTER RA REPA", direction="l", linebreak="al", unicodeslot=0x1B0B, }, [0x1B0C]={ category="lo", description="BALINESE LETTER RA REPA TEDUNG", direction="l", linebreak="al", specials={ "char", 0x1B0B, 0x1B35 }, unicodeslot=0x1B0C, }, [0x1B0D]={ category="lo", description="BALINESE LETTER LA LENGA", direction="l", linebreak="al", unicodeslot=0x1B0D, }, [0x1B0E]={ category="lo", description="BALINESE LETTER LA LENGA TEDUNG", direction="l", linebreak="al", specials={ "char", 0x1B0D, 0x1B35 }, unicodeslot=0x1B0E, }, [0x1B0F]={ category="lo", description="BALINESE LETTER EKARA", direction="l", linebreak="al", unicodeslot=0x1B0F, }, [0x1B10]={ category="lo", description="BALINESE LETTER AIKARA", direction="l", linebreak="al", unicodeslot=0x1B10, }, [0x1B11]={ category="lo", description="BALINESE LETTER OKARA", direction="l", linebreak="al", unicodeslot=0x1B11, }, [0x1B12]={ category="lo", description="BALINESE LETTER OKARA TEDUNG", direction="l", linebreak="al", specials={ "char", 0x1B11, 0x1B35 }, unicodeslot=0x1B12, }, [0x1B13]={ category="lo", description="BALINESE LETTER KA", direction="l", linebreak="al", unicodeslot=0x1B13, }, [0x1B14]={ category="lo", description="BALINESE LETTER KA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0x1B14, }, [0x1B15]={ category="lo", description="BALINESE LETTER GA", direction="l", linebreak="al", unicodeslot=0x1B15, }, [0x1B16]={ category="lo", description="BALINESE LETTER GA GORA", direction="l", linebreak="al", unicodeslot=0x1B16, }, [0x1B17]={ category="lo", description="BALINESE LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1B17, }, [0x1B18]={ category="lo", description="BALINESE LETTER CA", direction="l", linebreak="al", unicodeslot=0x1B18, }, [0x1B19]={ category="lo", description="BALINESE LETTER CA LACA", direction="l", linebreak="al", unicodeslot=0x1B19, }, [0x1B1A]={ category="lo", description="BALINESE LETTER JA", direction="l", linebreak="al", unicodeslot=0x1B1A, }, [0x1B1B]={ category="lo", description="BALINESE LETTER JA JERA", direction="l", linebreak="al", unicodeslot=0x1B1B, }, [0x1B1C]={ category="lo", description="BALINESE LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1B1C, }, [0x1B1D]={ category="lo", description="BALINESE LETTER TA LATIK", direction="l", linebreak="al", unicodeslot=0x1B1D, }, [0x1B1E]={ category="lo", description="BALINESE LETTER TA MURDA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0x1B1E, }, [0x1B1F]={ category="lo", description="BALINESE LETTER DA MURDA ALPAPRANA", direction="l", linebreak="al", unicodeslot=0x1B1F, }, [0x1B20]={ category="lo", description="BALINESE LETTER DA MURDA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0x1B20, }, [0x1B21]={ category="lo", description="BALINESE LETTER NA RAMBAT", direction="l", linebreak="al", unicodeslot=0x1B21, }, [0x1B22]={ category="lo", description="BALINESE LETTER TA", direction="l", linebreak="al", unicodeslot=0x1B22, }, [0x1B23]={ category="lo", description="BALINESE LETTER TA TAWA", direction="l", linebreak="al", unicodeslot=0x1B23, }, [0x1B24]={ category="lo", description="BALINESE LETTER DA", direction="l", linebreak="al", unicodeslot=0x1B24, }, [0x1B25]={ category="lo", description="BALINESE LETTER DA MADU", direction="l", linebreak="al", unicodeslot=0x1B25, }, [0x1B26]={ category="lo", description="BALINESE LETTER NA", direction="l", linebreak="al", unicodeslot=0x1B26, }, [0x1B27]={ category="lo", description="BALINESE LETTER PA", direction="l", linebreak="al", unicodeslot=0x1B27, }, [0x1B28]={ category="lo", description="BALINESE LETTER PA KAPAL", direction="l", linebreak="al", unicodeslot=0x1B28, }, [0x1B29]={ category="lo", description="BALINESE LETTER BA", direction="l", linebreak="al", unicodeslot=0x1B29, }, [0x1B2A]={ category="lo", description="BALINESE LETTER BA KEMBANG", direction="l", linebreak="al", unicodeslot=0x1B2A, }, [0x1B2B]={ category="lo", description="BALINESE LETTER MA", direction="l", linebreak="al", unicodeslot=0x1B2B, }, [0x1B2C]={ category="lo", description="BALINESE LETTER YA", direction="l", linebreak="al", unicodeslot=0x1B2C, }, [0x1B2D]={ category="lo", description="BALINESE LETTER RA", direction="l", linebreak="al", unicodeslot=0x1B2D, }, [0x1B2E]={ category="lo", description="BALINESE LETTER LA", direction="l", linebreak="al", unicodeslot=0x1B2E, }, [0x1B2F]={ category="lo", description="BALINESE LETTER WA", direction="l", linebreak="al", unicodeslot=0x1B2F, }, [0x1B30]={ category="lo", description="BALINESE LETTER SA SAGA", direction="l", linebreak="al", unicodeslot=0x1B30, }, [0x1B31]={ category="lo", description="BALINESE LETTER SA SAPA", direction="l", linebreak="al", unicodeslot=0x1B31, }, [0x1B32]={ category="lo", description="BALINESE LETTER SA", direction="l", linebreak="al", unicodeslot=0x1B32, }, [0x1B33]={ category="lo", description="BALINESE LETTER HA", direction="l", linebreak="al", unicodeslot=0x1B33, }, [0x1B34]={ category="mn", description="BALINESE SIGN REREKAN", direction="nsm", linebreak="cm", unicodeslot=0x1B34, }, [0x1B35]={ category="mc", description="BALINESE VOWEL SIGN TEDUNG", direction="l", linebreak="cm", unicodeslot=0x1B35, }, [0x1B36]={ category="mn", description="BALINESE VOWEL SIGN ULU", direction="nsm", linebreak="cm", unicodeslot=0x1B36, }, [0x1B37]={ category="mn", description="BALINESE VOWEL SIGN ULU SARI", direction="nsm", linebreak="cm", unicodeslot=0x1B37, }, [0x1B38]={ category="mn", description="BALINESE VOWEL SIGN SUKU", direction="nsm", linebreak="cm", unicodeslot=0x1B38, }, [0x1B39]={ category="mn", description="BALINESE VOWEL SIGN SUKU ILUT", direction="nsm", linebreak="cm", unicodeslot=0x1B39, }, [0x1B3A]={ category="mn", description="BALINESE VOWEL SIGN RA REPA", direction="nsm", linebreak="cm", unicodeslot=0x1B3A, }, [0x1B3B]={ category="mc", description="BALINESE VOWEL SIGN RA REPA TEDUNG", direction="l", linebreak="cm", specials={ "char", 0x1B3A, 0x1B35 }, unicodeslot=0x1B3B, }, [0x1B3C]={ category="mn", description="BALINESE VOWEL SIGN LA LENGA", direction="nsm", linebreak="cm", unicodeslot=0x1B3C, }, [0x1B3D]={ category="mc", description="BALINESE VOWEL SIGN LA LENGA TEDUNG", direction="l", linebreak="cm", specials={ "char", 0x1B3C, 0x1B35 }, unicodeslot=0x1B3D, }, [0x1B3E]={ category="mc", description="BALINESE VOWEL SIGN TALING", direction="l", linebreak="cm", unicodeslot=0x1B3E, }, [0x1B3F]={ category="mc", description="BALINESE VOWEL SIGN TALING REPA", direction="l", linebreak="cm", unicodeslot=0x1B3F, }, [0x1B40]={ category="mc", description="BALINESE VOWEL SIGN TALING TEDUNG", direction="l", linebreak="cm", specials={ "char", 0x1B3E, 0x1B35 }, unicodeslot=0x1B40, }, [0x1B41]={ category="mc", description="BALINESE VOWEL SIGN TALING REPA TEDUNG", direction="l", linebreak="cm", specials={ "char", 0x1B3F, 0x1B35 }, unicodeslot=0x1B41, }, [0x1B42]={ category="mn", description="BALINESE VOWEL SIGN PEPET", direction="nsm", linebreak="cm", unicodeslot=0x1B42, }, [0x1B43]={ category="mc", description="BALINESE VOWEL SIGN PEPET TEDUNG", direction="l", linebreak="cm", specials={ "char", 0x1B42, 0x1B35 }, unicodeslot=0x1B43, }, [0x1B44]={ category="mc", description="BALINESE ADEG ADEG", direction="l", linebreak="cm", unicodeslot=0x1B44, }, [0x1B45]={ category="lo", description="BALINESE LETTER KAF SASAK", direction="l", linebreak="al", unicodeslot=0x1B45, }, [0x1B46]={ category="lo", description="BALINESE LETTER KHOT SASAK", direction="l", linebreak="al", unicodeslot=0x1B46, }, [0x1B47]={ category="lo", description="BALINESE LETTER TZIR SASAK", direction="l", linebreak="al", unicodeslot=0x1B47, }, [0x1B48]={ category="lo", description="BALINESE LETTER EF SASAK", direction="l", linebreak="al", unicodeslot=0x1B48, }, [0x1B49]={ category="lo", description="BALINESE LETTER VE SASAK", direction="l", linebreak="al", unicodeslot=0x1B49, }, [0x1B4A]={ category="lo", description="BALINESE LETTER ZAL SASAK", direction="l", linebreak="al", unicodeslot=0x1B4A, }, [0x1B4B]={ category="lo", description="BALINESE LETTER ASYURA SASAK", direction="l", linebreak="al", unicodeslot=0x1B4B, }, [0x1B50]={ category="nd", description="BALINESE DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1B50, }, [0x1B51]={ category="nd", description="BALINESE DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1B51, }, [0x1B52]={ category="nd", description="BALINESE DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1B52, }, [0x1B53]={ category="nd", description="BALINESE DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1B53, }, [0x1B54]={ category="nd", description="BALINESE DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1B54, }, [0x1B55]={ category="nd", description="BALINESE DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1B55, }, [0x1B56]={ category="nd", description="BALINESE DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1B56, }, [0x1B57]={ category="nd", description="BALINESE DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1B57, }, [0x1B58]={ category="nd", description="BALINESE DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1B58, }, [0x1B59]={ category="nd", description="BALINESE DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1B59, }, [0x1B5A]={ category="po", description="BALINESE PANTI", direction="l", linebreak="ba", unicodeslot=0x1B5A, }, [0x1B5B]={ category="po", description="BALINESE PAMADA", direction="l", linebreak="ba", unicodeslot=0x1B5B, }, [0x1B5C]={ category="po", description="BALINESE WINDU", direction="l", linebreak="al", unicodeslot=0x1B5C, }, [0x1B5D]={ category="po", description="BALINESE CARIK PAMUNGKAH", direction="l", linebreak="ba", unicodeslot=0x1B5D, }, [0x1B5E]={ category="po", description="BALINESE CARIK SIKI", direction="l", linebreak="ba", unicodeslot=0x1B5E, }, [0x1B5F]={ category="po", description="BALINESE CARIK PAREREN", direction="l", linebreak="ba", unicodeslot=0x1B5F, }, [0x1B60]={ category="po", description="BALINESE PAMENENG", direction="l", linebreak="ba", unicodeslot=0x1B60, }, [0x1B61]={ category="so", description="BALINESE MUSICAL SYMBOL DONG", direction="l", linebreak="al", unicodeslot=0x1B61, }, [0x1B62]={ category="so", description="BALINESE MUSICAL SYMBOL DENG", direction="l", linebreak="al", unicodeslot=0x1B62, }, [0x1B63]={ category="so", description="BALINESE MUSICAL SYMBOL DUNG", direction="l", linebreak="al", unicodeslot=0x1B63, }, [0x1B64]={ category="so", description="BALINESE MUSICAL SYMBOL DANG", direction="l", linebreak="al", unicodeslot=0x1B64, }, [0x1B65]={ category="so", description="BALINESE MUSICAL SYMBOL DANG SURANG", direction="l", linebreak="al", unicodeslot=0x1B65, }, [0x1B66]={ category="so", description="BALINESE MUSICAL SYMBOL DING", direction="l", linebreak="al", unicodeslot=0x1B66, }, [0x1B67]={ category="so", description="BALINESE MUSICAL SYMBOL DAENG", direction="l", linebreak="al", unicodeslot=0x1B67, }, [0x1B68]={ category="so", description="BALINESE MUSICAL SYMBOL DEUNG", direction="l", linebreak="al", unicodeslot=0x1B68, }, [0x1B69]={ category="so", description="BALINESE MUSICAL SYMBOL DAING", direction="l", linebreak="al", unicodeslot=0x1B69, }, [0x1B6A]={ category="so", description="BALINESE MUSICAL SYMBOL DANG GEDE", direction="l", linebreak="al", unicodeslot=0x1B6A, }, [0x1B6B]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING TEGEH", direction="nsm", linebreak="cm", unicodeslot=0x1B6B, }, [0x1B6C]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING ENDEP", direction="nsm", linebreak="cm", unicodeslot=0x1B6C, }, [0x1B6D]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING KEMPUL", direction="nsm", linebreak="cm", unicodeslot=0x1B6D, }, [0x1B6E]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING KEMPLI", direction="nsm", linebreak="cm", unicodeslot=0x1B6E, }, [0x1B6F]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING JEGOGAN", direction="nsm", linebreak="cm", unicodeslot=0x1B6F, }, [0x1B70]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN", direction="nsm", linebreak="cm", unicodeslot=0x1B70, }, [0x1B71]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN", direction="nsm", linebreak="cm", unicodeslot=0x1B71, }, [0x1B72]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING BENDE", direction="nsm", linebreak="cm", unicodeslot=0x1B72, }, [0x1B73]={ category="mn", description="BALINESE MUSICAL SYMBOL COMBINING GONG", direction="nsm", linebreak="cm", unicodeslot=0x1B73, }, [0x1B74]={ category="so", description="BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG", direction="l", linebreak="al", unicodeslot=0x1B74, }, [0x1B75]={ category="so", description="BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG", direction="l", linebreak="al", unicodeslot=0x1B75, }, [0x1B76]={ category="so", description="BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK", direction="l", linebreak="al", unicodeslot=0x1B76, }, [0x1B77]={ category="so", description="BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK", direction="l", linebreak="al", unicodeslot=0x1B77, }, [0x1B78]={ category="so", description="BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG", direction="l", linebreak="al", unicodeslot=0x1B78, }, [0x1B79]={ category="so", description="BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG", direction="l", linebreak="al", unicodeslot=0x1B79, }, [0x1B7A]={ category="so", description="BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK", direction="l", linebreak="al", unicodeslot=0x1B7A, }, [0x1B7B]={ category="so", description="BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK", direction="l", linebreak="al", unicodeslot=0x1B7B, }, [0x1B7C]={ category="so", description="BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING", direction="l", linebreak="al", unicodeslot=0x1B7C, }, [0x1B80]={ category="mn", description="SUNDANESE SIGN PANYECEK", direction="nsm", linebreak="cm", unicodeslot=0x1B80, }, [0x1B81]={ category="mn", description="SUNDANESE SIGN PANGLAYAR", direction="nsm", linebreak="cm", unicodeslot=0x1B81, }, [0x1B82]={ category="mc", description="SUNDANESE SIGN PANGWISAD", direction="l", linebreak="cm", unicodeslot=0x1B82, }, [0x1B83]={ category="lo", description="SUNDANESE LETTER A", direction="l", linebreak="al", unicodeslot=0x1B83, }, [0x1B84]={ category="lo", description="SUNDANESE LETTER I", direction="l", linebreak="al", unicodeslot=0x1B84, }, [0x1B85]={ category="lo", description="SUNDANESE LETTER U", direction="l", linebreak="al", unicodeslot=0x1B85, }, [0x1B86]={ category="lo", description="SUNDANESE LETTER AE", direction="l", linebreak="al", unicodeslot=0x1B86, }, [0x1B87]={ category="lo", description="SUNDANESE LETTER O", direction="l", linebreak="al", unicodeslot=0x1B87, }, [0x1B88]={ category="lo", description="SUNDANESE LETTER E", direction="l", linebreak="al", unicodeslot=0x1B88, }, [0x1B89]={ category="lo", description="SUNDANESE LETTER EU", direction="l", linebreak="al", unicodeslot=0x1B89, }, [0x1B8A]={ category="lo", description="SUNDANESE LETTER KA", direction="l", linebreak="al", unicodeslot=0x1B8A, }, [0x1B8B]={ category="lo", description="SUNDANESE LETTER QA", direction="l", linebreak="al", unicodeslot=0x1B8B, }, [0x1B8C]={ category="lo", description="SUNDANESE LETTER GA", direction="l", linebreak="al", unicodeslot=0x1B8C, }, [0x1B8D]={ category="lo", description="SUNDANESE LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1B8D, }, [0x1B8E]={ category="lo", description="SUNDANESE LETTER CA", direction="l", linebreak="al", unicodeslot=0x1B8E, }, [0x1B8F]={ category="lo", description="SUNDANESE LETTER JA", direction="l", linebreak="al", unicodeslot=0x1B8F, }, [0x1B90]={ category="lo", description="SUNDANESE LETTER ZA", direction="l", linebreak="al", unicodeslot=0x1B90, }, [0x1B91]={ category="lo", description="SUNDANESE LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1B91, }, [0x1B92]={ category="lo", description="SUNDANESE LETTER TA", direction="l", linebreak="al", unicodeslot=0x1B92, }, [0x1B93]={ category="lo", description="SUNDANESE LETTER DA", direction="l", linebreak="al", unicodeslot=0x1B93, }, [0x1B94]={ category="lo", description="SUNDANESE LETTER NA", direction="l", linebreak="al", unicodeslot=0x1B94, }, [0x1B95]={ category="lo", description="SUNDANESE LETTER PA", direction="l", linebreak="al", unicodeslot=0x1B95, }, [0x1B96]={ category="lo", description="SUNDANESE LETTER FA", direction="l", linebreak="al", unicodeslot=0x1B96, }, [0x1B97]={ category="lo", description="SUNDANESE LETTER VA", direction="l", linebreak="al", unicodeslot=0x1B97, }, [0x1B98]={ category="lo", description="SUNDANESE LETTER BA", direction="l", linebreak="al", unicodeslot=0x1B98, }, [0x1B99]={ category="lo", description="SUNDANESE LETTER MA", direction="l", linebreak="al", unicodeslot=0x1B99, }, [0x1B9A]={ category="lo", description="SUNDANESE LETTER YA", direction="l", linebreak="al", unicodeslot=0x1B9A, }, [0x1B9B]={ category="lo", description="SUNDANESE LETTER RA", direction="l", linebreak="al", unicodeslot=0x1B9B, }, [0x1B9C]={ category="lo", description="SUNDANESE LETTER LA", direction="l", linebreak="al", unicodeslot=0x1B9C, }, [0x1B9D]={ category="lo", description="SUNDANESE LETTER WA", direction="l", linebreak="al", unicodeslot=0x1B9D, }, [0x1B9E]={ category="lo", description="SUNDANESE LETTER SA", direction="l", linebreak="al", unicodeslot=0x1B9E, }, [0x1B9F]={ category="lo", description="SUNDANESE LETTER XA", direction="l", linebreak="al", unicodeslot=0x1B9F, }, [0x1BA0]={ category="lo", description="SUNDANESE LETTER HA", direction="l", linebreak="al", unicodeslot=0x1BA0, }, [0x1BA1]={ category="mc", description="SUNDANESE CONSONANT SIGN PAMINGKAL", direction="l", linebreak="cm", unicodeslot=0x1BA1, }, [0x1BA2]={ category="mn", description="SUNDANESE CONSONANT SIGN PANYAKRA", direction="nsm", linebreak="cm", unicodeslot=0x1BA2, }, [0x1BA3]={ category="mn", description="SUNDANESE CONSONANT SIGN PANYIKU", direction="nsm", linebreak="cm", unicodeslot=0x1BA3, }, [0x1BA4]={ category="mn", description="SUNDANESE VOWEL SIGN PANGHULU", direction="nsm", linebreak="cm", unicodeslot=0x1BA4, }, [0x1BA5]={ category="mn", description="SUNDANESE VOWEL SIGN PANYUKU", direction="nsm", linebreak="cm", unicodeslot=0x1BA5, }, [0x1BA6]={ category="mc", description="SUNDANESE VOWEL SIGN PANAELAENG", direction="l", linebreak="cm", unicodeslot=0x1BA6, }, [0x1BA7]={ category="mc", description="SUNDANESE VOWEL SIGN PANOLONG", direction="l", linebreak="cm", unicodeslot=0x1BA7, }, [0x1BA8]={ category="mn", description="SUNDANESE VOWEL SIGN PAMEPET", direction="nsm", linebreak="cm", unicodeslot=0x1BA8, }, [0x1BA9]={ category="mn", description="SUNDANESE VOWEL SIGN PANEULEUNG", direction="nsm", linebreak="cm", unicodeslot=0x1BA9, }, [0x1BAA]={ category="mc", description="SUNDANESE SIGN PAMAAEH", direction="l", linebreak="cm", unicodeslot=0x1BAA, }, [0x1BAB]={ category="mn", description="SUNDANESE SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x1BAB, }, [0x1BAC]={ category="mc", description="SUNDANESE CONSONANT SIGN PASANGAN MA", direction="l", linebreak="cm", unicodeslot=0x1BAC, }, [0x1BAD]={ category="mc", description="SUNDANESE CONSONANT SIGN PASANGAN WA", direction="l", linebreak="cm", unicodeslot=0x1BAD, }, [0x1BAE]={ category="lo", description="SUNDANESE LETTER KHA", direction="l", linebreak="al", unicodeslot=0x1BAE, }, [0x1BAF]={ category="lo", description="SUNDANESE LETTER SYA", direction="l", linebreak="al", unicodeslot=0x1BAF, }, [0x1BB0]={ category="nd", description="SUNDANESE DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1BB0, }, [0x1BB1]={ category="nd", description="SUNDANESE DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1BB1, }, [0x1BB2]={ category="nd", description="SUNDANESE DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1BB2, }, [0x1BB3]={ category="nd", description="SUNDANESE DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1BB3, }, [0x1BB4]={ category="nd", description="SUNDANESE DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1BB4, }, [0x1BB5]={ category="nd", description="SUNDANESE DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1BB5, }, [0x1BB6]={ category="nd", description="SUNDANESE DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1BB6, }, [0x1BB7]={ category="nd", description="SUNDANESE DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1BB7, }, [0x1BB8]={ category="nd", description="SUNDANESE DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1BB8, }, [0x1BB9]={ category="nd", description="SUNDANESE DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1BB9, }, [0x1BBA]={ category="lo", description="SUNDANESE AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x1BBA, }, [0x1BBB]={ category="lo", description="SUNDANESE LETTER REU", direction="l", linebreak="al", unicodeslot=0x1BBB, }, [0x1BBC]={ category="lo", description="SUNDANESE LETTER LEU", direction="l", linebreak="al", unicodeslot=0x1BBC, }, [0x1BBD]={ category="lo", description="SUNDANESE LETTER BHA", direction="l", linebreak="al", unicodeslot=0x1BBD, }, [0x1BBE]={ category="lo", description="SUNDANESE LETTER FINAL K", direction="l", linebreak="al", unicodeslot=0x1BBE, }, [0x1BBF]={ category="lo", description="SUNDANESE LETTER FINAL M", direction="l", linebreak="al", unicodeslot=0x1BBF, }, [0x1BC0]={ category="lo", description="BATAK LETTER A", direction="l", linebreak="al", unicodeslot=0x1BC0, }, [0x1BC1]={ category="lo", description="BATAK LETTER SIMALUNGUN A", direction="l", linebreak="al", unicodeslot=0x1BC1, }, [0x1BC2]={ category="lo", description="BATAK LETTER HA", direction="l", linebreak="al", unicodeslot=0x1BC2, }, [0x1BC3]={ category="lo", description="BATAK LETTER SIMALUNGUN HA", direction="l", linebreak="al", unicodeslot=0x1BC3, }, [0x1BC4]={ category="lo", description="BATAK LETTER MANDAILING HA", direction="l", linebreak="al", unicodeslot=0x1BC4, }, [0x1BC5]={ category="lo", description="BATAK LETTER BA", direction="l", linebreak="al", unicodeslot=0x1BC5, }, [0x1BC6]={ category="lo", description="BATAK LETTER KARO BA", direction="l", linebreak="al", unicodeslot=0x1BC6, }, [0x1BC7]={ category="lo", description="BATAK LETTER PA", direction="l", linebreak="al", unicodeslot=0x1BC7, }, [0x1BC8]={ category="lo", description="BATAK LETTER SIMALUNGUN PA", direction="l", linebreak="al", unicodeslot=0x1BC8, }, [0x1BC9]={ category="lo", description="BATAK LETTER NA", direction="l", linebreak="al", unicodeslot=0x1BC9, }, [0x1BCA]={ category="lo", description="BATAK LETTER MANDAILING NA", direction="l", linebreak="al", unicodeslot=0x1BCA, }, [0x1BCB]={ category="lo", description="BATAK LETTER WA", direction="l", linebreak="al", unicodeslot=0x1BCB, }, [0x1BCC]={ category="lo", description="BATAK LETTER SIMALUNGUN WA", direction="l", linebreak="al", unicodeslot=0x1BCC, }, [0x1BCD]={ category="lo", description="BATAK LETTER PAKPAK WA", direction="l", linebreak="al", unicodeslot=0x1BCD, }, [0x1BCE]={ category="lo", description="BATAK LETTER GA", direction="l", linebreak="al", unicodeslot=0x1BCE, }, [0x1BCF]={ category="lo", description="BATAK LETTER SIMALUNGUN GA", direction="l", linebreak="al", unicodeslot=0x1BCF, }, [0x1BD0]={ category="lo", description="BATAK LETTER JA", direction="l", linebreak="al", unicodeslot=0x1BD0, }, [0x1BD1]={ category="lo", description="BATAK LETTER DA", direction="l", linebreak="al", unicodeslot=0x1BD1, }, [0x1BD2]={ category="lo", description="BATAK LETTER RA", direction="l", linebreak="al", unicodeslot=0x1BD2, }, [0x1BD3]={ category="lo", description="BATAK LETTER SIMALUNGUN RA", direction="l", linebreak="al", unicodeslot=0x1BD3, }, [0x1BD4]={ category="lo", description="BATAK LETTER MA", direction="l", linebreak="al", unicodeslot=0x1BD4, }, [0x1BD5]={ category="lo", description="BATAK LETTER SIMALUNGUN MA", direction="l", linebreak="al", unicodeslot=0x1BD5, }, [0x1BD6]={ category="lo", description="BATAK LETTER SOUTHERN TA", direction="l", linebreak="al", unicodeslot=0x1BD6, }, [0x1BD7]={ category="lo", description="BATAK LETTER NORTHERN TA", direction="l", linebreak="al", unicodeslot=0x1BD7, }, [0x1BD8]={ category="lo", description="BATAK LETTER SA", direction="l", linebreak="al", unicodeslot=0x1BD8, }, [0x1BD9]={ category="lo", description="BATAK LETTER SIMALUNGUN SA", direction="l", linebreak="al", unicodeslot=0x1BD9, }, [0x1BDA]={ category="lo", description="BATAK LETTER MANDAILING SA", direction="l", linebreak="al", unicodeslot=0x1BDA, }, [0x1BDB]={ category="lo", description="BATAK LETTER YA", direction="l", linebreak="al", unicodeslot=0x1BDB, }, [0x1BDC]={ category="lo", description="BATAK LETTER SIMALUNGUN YA", direction="l", linebreak="al", unicodeslot=0x1BDC, }, [0x1BDD]={ category="lo", description="BATAK LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1BDD, }, [0x1BDE]={ category="lo", description="BATAK LETTER LA", direction="l", linebreak="al", unicodeslot=0x1BDE, }, [0x1BDF]={ category="lo", description="BATAK LETTER SIMALUNGUN LA", direction="l", linebreak="al", unicodeslot=0x1BDF, }, [0x1BE0]={ category="lo", description="BATAK LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1BE0, }, [0x1BE1]={ category="lo", description="BATAK LETTER CA", direction="l", linebreak="al", unicodeslot=0x1BE1, }, [0x1BE2]={ category="lo", description="BATAK LETTER NDA", direction="l", linebreak="al", unicodeslot=0x1BE2, }, [0x1BE3]={ category="lo", description="BATAK LETTER MBA", direction="l", linebreak="al", unicodeslot=0x1BE3, }, [0x1BE4]={ category="lo", description="BATAK LETTER I", direction="l", linebreak="al", unicodeslot=0x1BE4, }, [0x1BE5]={ category="lo", description="BATAK LETTER U", direction="l", linebreak="al", unicodeslot=0x1BE5, }, [0x1BE6]={ category="mn", description="BATAK SIGN TOMPI", direction="nsm", linebreak="cm", unicodeslot=0x1BE6, }, [0x1BE7]={ category="mc", description="BATAK VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x1BE7, }, [0x1BE8]={ category="mn", description="BATAK VOWEL SIGN PAKPAK E", direction="nsm", linebreak="cm", unicodeslot=0x1BE8, }, [0x1BE9]={ category="mn", description="BATAK VOWEL SIGN EE", direction="nsm", linebreak="cm", unicodeslot=0x1BE9, }, [0x1BEA]={ category="mc", description="BATAK VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x1BEA, }, [0x1BEB]={ category="mc", description="BATAK VOWEL SIGN KARO I", direction="l", linebreak="cm", unicodeslot=0x1BEB, }, [0x1BEC]={ category="mc", description="BATAK VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x1BEC, }, [0x1BED]={ category="mn", description="BATAK VOWEL SIGN KARO O", direction="nsm", linebreak="cm", unicodeslot=0x1BED, }, [0x1BEE]={ category="mc", description="BATAK VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0x1BEE, }, [0x1BEF]={ category="mn", description="BATAK VOWEL SIGN U FOR SIMALUNGUN SA", direction="nsm", linebreak="cm", unicodeslot=0x1BEF, }, [0x1BF0]={ category="mn", description="BATAK CONSONANT SIGN NG", direction="nsm", linebreak="cm", unicodeslot=0x1BF0, }, [0x1BF1]={ category="mn", description="BATAK CONSONANT SIGN H", direction="nsm", linebreak="cm", unicodeslot=0x1BF1, }, [0x1BF2]={ category="mc", description="BATAK PANGOLAT", direction="l", linebreak="cm", unicodeslot=0x1BF2, }, [0x1BF3]={ category="mc", description="BATAK PANONGONAN", direction="l", linebreak="cm", unicodeslot=0x1BF3, }, [0x1BFC]={ category="po", description="BATAK SYMBOL BINDU NA METEK", direction="l", linebreak="al", unicodeslot=0x1BFC, }, [0x1BFD]={ category="po", description="BATAK SYMBOL BINDU PINARBORAS", direction="l", linebreak="al", unicodeslot=0x1BFD, }, [0x1BFE]={ category="po", description="BATAK SYMBOL BINDU JUDUL", direction="l", linebreak="al", unicodeslot=0x1BFE, }, [0x1BFF]={ category="po", description="BATAK SYMBOL BINDU PANGOLAT", direction="l", linebreak="al", unicodeslot=0x1BFF, }, [0x1C00]={ category="lo", description="LEPCHA LETTER KA", direction="l", linebreak="al", unicodeslot=0x1C00, }, [0x1C01]={ category="lo", description="LEPCHA LETTER KLA", direction="l", linebreak="al", unicodeslot=0x1C01, }, [0x1C02]={ category="lo", description="LEPCHA LETTER KHA", direction="l", linebreak="al", unicodeslot=0x1C02, }, [0x1C03]={ category="lo", description="LEPCHA LETTER GA", direction="l", linebreak="al", unicodeslot=0x1C03, }, [0x1C04]={ category="lo", description="LEPCHA LETTER GLA", direction="l", linebreak="al", unicodeslot=0x1C04, }, [0x1C05]={ category="lo", description="LEPCHA LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1C05, }, [0x1C06]={ category="lo", description="LEPCHA LETTER CA", direction="l", linebreak="al", unicodeslot=0x1C06, }, [0x1C07]={ category="lo", description="LEPCHA LETTER CHA", direction="l", linebreak="al", unicodeslot=0x1C07, }, [0x1C08]={ category="lo", description="LEPCHA LETTER JA", direction="l", linebreak="al", unicodeslot=0x1C08, }, [0x1C09]={ category="lo", description="LEPCHA LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1C09, }, [0x1C0A]={ category="lo", description="LEPCHA LETTER TA", direction="l", linebreak="al", unicodeslot=0x1C0A, }, [0x1C0B]={ category="lo", description="LEPCHA LETTER THA", direction="l", linebreak="al", unicodeslot=0x1C0B, }, [0x1C0C]={ category="lo", description="LEPCHA LETTER DA", direction="l", linebreak="al", unicodeslot=0x1C0C, }, [0x1C0D]={ category="lo", description="LEPCHA LETTER NA", direction="l", linebreak="al", unicodeslot=0x1C0D, }, [0x1C0E]={ category="lo", description="LEPCHA LETTER PA", direction="l", linebreak="al", unicodeslot=0x1C0E, }, [0x1C0F]={ category="lo", description="LEPCHA LETTER PLA", direction="l", linebreak="al", unicodeslot=0x1C0F, }, [0x1C10]={ category="lo", description="LEPCHA LETTER PHA", direction="l", linebreak="al", unicodeslot=0x1C10, }, [0x1C11]={ category="lo", description="LEPCHA LETTER FA", direction="l", linebreak="al", unicodeslot=0x1C11, }, [0x1C12]={ category="lo", description="LEPCHA LETTER FLA", direction="l", linebreak="al", unicodeslot=0x1C12, }, [0x1C13]={ category="lo", description="LEPCHA LETTER BA", direction="l", linebreak="al", unicodeslot=0x1C13, }, [0x1C14]={ category="lo", description="LEPCHA LETTER BLA", direction="l", linebreak="al", unicodeslot=0x1C14, }, [0x1C15]={ category="lo", description="LEPCHA LETTER MA", direction="l", linebreak="al", unicodeslot=0x1C15, }, [0x1C16]={ category="lo", description="LEPCHA LETTER MLA", direction="l", linebreak="al", unicodeslot=0x1C16, }, [0x1C17]={ category="lo", description="LEPCHA LETTER TSA", direction="l", linebreak="al", unicodeslot=0x1C17, }, [0x1C18]={ category="lo", description="LEPCHA LETTER TSHA", direction="l", linebreak="al", unicodeslot=0x1C18, }, [0x1C19]={ category="lo", description="LEPCHA LETTER DZA", direction="l", linebreak="al", unicodeslot=0x1C19, }, [0x1C1A]={ category="lo", description="LEPCHA LETTER YA", direction="l", linebreak="al", unicodeslot=0x1C1A, }, [0x1C1B]={ category="lo", description="LEPCHA LETTER RA", direction="l", linebreak="al", unicodeslot=0x1C1B, }, [0x1C1C]={ category="lo", description="LEPCHA LETTER LA", direction="l", linebreak="al", unicodeslot=0x1C1C, }, [0x1C1D]={ category="lo", description="LEPCHA LETTER HA", direction="l", linebreak="al", unicodeslot=0x1C1D, }, [0x1C1E]={ category="lo", description="LEPCHA LETTER HLA", direction="l", linebreak="al", unicodeslot=0x1C1E, }, [0x1C1F]={ category="lo", description="LEPCHA LETTER VA", direction="l", linebreak="al", unicodeslot=0x1C1F, }, [0x1C20]={ category="lo", description="LEPCHA LETTER SA", direction="l", linebreak="al", unicodeslot=0x1C20, }, [0x1C21]={ category="lo", description="LEPCHA LETTER SHA", direction="l", linebreak="al", unicodeslot=0x1C21, }, [0x1C22]={ category="lo", description="LEPCHA LETTER WA", direction="l", linebreak="al", unicodeslot=0x1C22, }, [0x1C23]={ category="lo", description="LEPCHA LETTER A", direction="l", linebreak="al", unicodeslot=0x1C23, }, [0x1C24]={ category="mc", description="LEPCHA SUBJOINED LETTER YA", direction="l", linebreak="cm", unicodeslot=0x1C24, }, [0x1C25]={ category="mc", description="LEPCHA SUBJOINED LETTER RA", direction="l", linebreak="cm", unicodeslot=0x1C25, }, [0x1C26]={ category="mc", description="LEPCHA VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x1C26, }, [0x1C27]={ category="mc", description="LEPCHA VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x1C27, }, [0x1C28]={ category="mc", description="LEPCHA VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x1C28, }, [0x1C29]={ category="mc", description="LEPCHA VOWEL SIGN OO", direction="l", linebreak="cm", unicodeslot=0x1C29, }, [0x1C2A]={ category="mc", description="LEPCHA VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0x1C2A, }, [0x1C2B]={ category="mc", description="LEPCHA VOWEL SIGN UU", direction="l", linebreak="cm", unicodeslot=0x1C2B, }, [0x1C2C]={ category="mn", description="LEPCHA VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x1C2C, }, [0x1C2D]={ category="mn", description="LEPCHA CONSONANT SIGN K", direction="nsm", linebreak="cm", unicodeslot=0x1C2D, }, [0x1C2E]={ category="mn", description="LEPCHA CONSONANT SIGN M", direction="nsm", linebreak="cm", unicodeslot=0x1C2E, }, [0x1C2F]={ category="mn", description="LEPCHA CONSONANT SIGN L", direction="nsm", linebreak="cm", unicodeslot=0x1C2F, }, [0x1C30]={ category="mn", description="LEPCHA CONSONANT SIGN N", direction="nsm", linebreak="cm", unicodeslot=0x1C30, }, [0x1C31]={ category="mn", description="LEPCHA CONSONANT SIGN P", direction="nsm", linebreak="cm", unicodeslot=0x1C31, }, [0x1C32]={ category="mn", description="LEPCHA CONSONANT SIGN R", direction="nsm", linebreak="cm", unicodeslot=0x1C32, }, [0x1C33]={ category="mn", description="LEPCHA CONSONANT SIGN T", direction="nsm", linebreak="cm", unicodeslot=0x1C33, }, [0x1C34]={ category="mc", description="LEPCHA CONSONANT SIGN NYIN-DO", direction="l", linebreak="cm", unicodeslot=0x1C34, }, [0x1C35]={ category="mc", description="LEPCHA CONSONANT SIGN KANG", direction="l", linebreak="cm", unicodeslot=0x1C35, }, [0x1C36]={ category="mn", description="LEPCHA SIGN RAN", direction="nsm", linebreak="cm", unicodeslot=0x1C36, }, [0x1C37]={ category="mn", description="LEPCHA SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x1C37, }, [0x1C3B]={ category="po", description="LEPCHA PUNCTUATION TA-ROL", direction="l", linebreak="ba", unicodeslot=0x1C3B, }, [0x1C3C]={ category="po", description="LEPCHA PUNCTUATION NYET THYOOM TA-ROL", direction="l", linebreak="ba", unicodeslot=0x1C3C, }, [0x1C3D]={ category="po", description="LEPCHA PUNCTUATION CER-WA", direction="l", linebreak="ba", unicodeslot=0x1C3D, }, [0x1C3E]={ category="po", description="LEPCHA PUNCTUATION TSHOOK CER-WA", direction="l", linebreak="ba", unicodeslot=0x1C3E, }, [0x1C3F]={ category="po", description="LEPCHA PUNCTUATION TSHOOK", direction="l", linebreak="ba", unicodeslot=0x1C3F, }, [0x1C40]={ category="nd", description="LEPCHA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1C40, }, [0x1C41]={ category="nd", description="LEPCHA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1C41, }, [0x1C42]={ category="nd", description="LEPCHA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1C42, }, [0x1C43]={ category="nd", description="LEPCHA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1C43, }, [0x1C44]={ category="nd", description="LEPCHA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1C44, }, [0x1C45]={ category="nd", description="LEPCHA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1C45, }, [0x1C46]={ category="nd", description="LEPCHA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1C46, }, [0x1C47]={ category="nd", description="LEPCHA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1C47, }, [0x1C48]={ category="nd", description="LEPCHA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1C48, }, [0x1C49]={ category="nd", description="LEPCHA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1C49, }, [0x1C4D]={ category="lo", description="LEPCHA LETTER TTA", direction="l", linebreak="al", unicodeslot=0x1C4D, }, [0x1C4E]={ category="lo", description="LEPCHA LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x1C4E, }, [0x1C4F]={ category="lo", description="LEPCHA LETTER DDA", direction="l", linebreak="al", unicodeslot=0x1C4F, }, [0x1C50]={ category="nd", description="OL CHIKI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x1C50, }, [0x1C51]={ category="nd", description="OL CHIKI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x1C51, }, [0x1C52]={ category="nd", description="OL CHIKI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x1C52, }, [0x1C53]={ category="nd", description="OL CHIKI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x1C53, }, [0x1C54]={ category="nd", description="OL CHIKI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1C54, }, [0x1C55]={ category="nd", description="OL CHIKI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1C55, }, [0x1C56]={ category="nd", description="OL CHIKI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1C56, }, [0x1C57]={ category="nd", description="OL CHIKI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1C57, }, [0x1C58]={ category="nd", description="OL CHIKI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1C58, }, [0x1C59]={ category="nd", description="OL CHIKI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1C59, }, [0x1C5A]={ category="lo", description="OL CHIKI LETTER LA", direction="l", linebreak="al", unicodeslot=0x1C5A, }, [0x1C5B]={ category="lo", description="OL CHIKI LETTER AT", direction="l", linebreak="al", unicodeslot=0x1C5B, }, [0x1C5C]={ category="lo", description="OL CHIKI LETTER AG", direction="l", linebreak="al", unicodeslot=0x1C5C, }, [0x1C5D]={ category="lo", description="OL CHIKI LETTER ANG", direction="l", linebreak="al", unicodeslot=0x1C5D, }, [0x1C5E]={ category="lo", description="OL CHIKI LETTER AL", direction="l", linebreak="al", unicodeslot=0x1C5E, }, [0x1C5F]={ category="lo", description="OL CHIKI LETTER LAA", direction="l", linebreak="al", unicodeslot=0x1C5F, }, [0x1C60]={ category="lo", description="OL CHIKI LETTER AAK", direction="l", linebreak="al", unicodeslot=0x1C60, }, [0x1C61]={ category="lo", description="OL CHIKI LETTER AAJ", direction="l", linebreak="al", unicodeslot=0x1C61, }, [0x1C62]={ category="lo", description="OL CHIKI LETTER AAM", direction="l", linebreak="al", unicodeslot=0x1C62, }, [0x1C63]={ category="lo", description="OL CHIKI LETTER AAW", direction="l", linebreak="al", unicodeslot=0x1C63, }, [0x1C64]={ category="lo", description="OL CHIKI LETTER LI", direction="l", linebreak="al", unicodeslot=0x1C64, }, [0x1C65]={ category="lo", description="OL CHIKI LETTER IS", direction="l", linebreak="al", unicodeslot=0x1C65, }, [0x1C66]={ category="lo", description="OL CHIKI LETTER IH", direction="l", linebreak="al", unicodeslot=0x1C66, }, [0x1C67]={ category="lo", description="OL CHIKI LETTER INY", direction="l", linebreak="al", unicodeslot=0x1C67, }, [0x1C68]={ category="lo", description="OL CHIKI LETTER IR", direction="l", linebreak="al", unicodeslot=0x1C68, }, [0x1C69]={ category="lo", description="OL CHIKI LETTER LU", direction="l", linebreak="al", unicodeslot=0x1C69, }, [0x1C6A]={ category="lo", description="OL CHIKI LETTER UC", direction="l", linebreak="al", unicodeslot=0x1C6A, }, [0x1C6B]={ category="lo", description="OL CHIKI LETTER UD", direction="l", linebreak="al", unicodeslot=0x1C6B, }, [0x1C6C]={ category="lo", description="OL CHIKI LETTER UNN", direction="l", linebreak="al", unicodeslot=0x1C6C, }, [0x1C6D]={ category="lo", description="OL CHIKI LETTER UY", direction="l", linebreak="al", unicodeslot=0x1C6D, }, [0x1C6E]={ category="lo", description="OL CHIKI LETTER LE", direction="l", linebreak="al", unicodeslot=0x1C6E, }, [0x1C6F]={ category="lo", description="OL CHIKI LETTER EP", direction="l", linebreak="al", unicodeslot=0x1C6F, }, [0x1C70]={ category="lo", description="OL CHIKI LETTER EDD", direction="l", linebreak="al", unicodeslot=0x1C70, }, [0x1C71]={ category="lo", description="OL CHIKI LETTER EN", direction="l", linebreak="al", unicodeslot=0x1C71, }, [0x1C72]={ category="lo", description="OL CHIKI LETTER ERR", direction="l", linebreak="al", unicodeslot=0x1C72, }, [0x1C73]={ category="lo", description="OL CHIKI LETTER LO", direction="l", linebreak="al", unicodeslot=0x1C73, }, [0x1C74]={ category="lo", description="OL CHIKI LETTER OTT", direction="l", linebreak="al", unicodeslot=0x1C74, }, [0x1C75]={ category="lo", description="OL CHIKI LETTER OB", direction="l", linebreak="al", unicodeslot=0x1C75, }, [0x1C76]={ category="lo", description="OL CHIKI LETTER OV", direction="l", linebreak="al", unicodeslot=0x1C76, }, [0x1C77]={ category="lo", description="OL CHIKI LETTER OH", direction="l", linebreak="al", unicodeslot=0x1C77, }, [0x1C78]={ category="lm", description="OL CHIKI MU TTUDDAG", direction="l", linebreak="al", unicodeslot=0x1C78, }, [0x1C79]={ category="lm", description="OL CHIKI GAAHLAA TTUDDAAG", direction="l", linebreak="al", unicodeslot=0x1C79, }, [0x1C7A]={ category="lm", description="OL CHIKI MU-GAAHLAA TTUDDAAG", direction="l", linebreak="al", unicodeslot=0x1C7A, }, [0x1C7B]={ category="lm", description="OL CHIKI RELAA", direction="l", linebreak="al", unicodeslot=0x1C7B, }, [0x1C7C]={ category="lm", description="OL CHIKI PHAARKAA", direction="l", linebreak="al", unicodeslot=0x1C7C, }, [0x1C7D]={ category="lm", description="OL CHIKI AHAD", direction="l", linebreak="al", unicodeslot=0x1C7D, }, [0x1C7E]={ category="po", description="OL CHIKI PUNCTUATION MUCAAD", direction="l", linebreak="ba", unicodeslot=0x1C7E, }, [0x1C7F]={ category="po", description="OL CHIKI PUNCTUATION DOUBLE MUCAAD", direction="l", linebreak="ba", unicodeslot=0x1C7F, }, [0x1CC0]={ category="po", description="SUNDANESE PUNCTUATION BINDU SURYA", direction="l", linebreak="al", unicodeslot=0x1CC0, }, [0x1CC1]={ category="po", description="SUNDANESE PUNCTUATION BINDU PANGLONG", direction="l", linebreak="al", unicodeslot=0x1CC1, }, [0x1CC2]={ category="po", description="SUNDANESE PUNCTUATION BINDU PURNAMA", direction="l", linebreak="al", unicodeslot=0x1CC2, }, [0x1CC3]={ category="po", description="SUNDANESE PUNCTUATION BINDU CAKRA", direction="l", linebreak="al", unicodeslot=0x1CC3, }, [0x1CC4]={ category="po", description="SUNDANESE PUNCTUATION BINDU LEU SATANGA", direction="l", linebreak="al", unicodeslot=0x1CC4, }, [0x1CC5]={ category="po", description="SUNDANESE PUNCTUATION BINDU KA SATANGA", direction="l", linebreak="al", unicodeslot=0x1CC5, }, [0x1CC6]={ category="po", description="SUNDANESE PUNCTUATION BINDU DA SATANGA", direction="l", linebreak="al", unicodeslot=0x1CC6, }, [0x1CC7]={ category="po", description="SUNDANESE PUNCTUATION BINDU BA SATANGA", direction="l", linebreak="al", unicodeslot=0x1CC7, }, [0x1CD0]={ category="mn", description="VEDIC TONE KARSHANA", direction="nsm", linebreak="cm", unicodeslot=0x1CD0, }, [0x1CD1]={ category="mn", description="VEDIC TONE SHARA", direction="nsm", linebreak="cm", unicodeslot=0x1CD1, }, [0x1CD2]={ category="mn", description="VEDIC TONE PRENKHA", direction="nsm", linebreak="cm", unicodeslot=0x1CD2, }, [0x1CD3]={ category="po", description="VEDIC SIGN NIHSHVASA", direction="l", linebreak="al", unicodeslot=0x1CD3, }, [0x1CD4]={ category="mn", description="VEDIC SIGN YAJURVEDIC MIDLINE SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CD4, }, [0x1CD5]={ category="mn", description="VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CD5, }, [0x1CD6]={ category="mn", description="VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CD6, }, [0x1CD7]={ category="mn", description="VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CD7, }, [0x1CD8]={ category="mn", description="VEDIC TONE CANDRA BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1CD8, }, [0x1CD9]={ category="mn", description="VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER", direction="nsm", linebreak="cm", unicodeslot=0x1CD9, }, [0x1CDA]={ category="mn", description="VEDIC TONE DOUBLE SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CDA, }, [0x1CDB]={ category="mn", description="VEDIC TONE TRIPLE SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CDB, }, [0x1CDC]={ category="mn", description="VEDIC TONE KATHAKA ANUDATTA", direction="nsm", linebreak="cm", unicodeslot=0x1CDC, }, [0x1CDD]={ category="mn", description="VEDIC TONE DOT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1CDD, }, [0x1CDE]={ category="mn", description="VEDIC TONE TWO DOTS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1CDE, }, [0x1CDF]={ category="mn", description="VEDIC TONE THREE DOTS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1CDF, }, [0x1CE0]={ category="mn", description="VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CE0, }, [0x1CE1]={ category="mc", description="VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA", direction="l", linebreak="cm", unicodeslot=0x1CE1, }, [0x1CE2]={ category="mn", description="VEDIC SIGN VISARGA SVARITA", direction="nsm", linebreak="cm", unicodeslot=0x1CE2, }, [0x1CE3]={ category="mn", description="VEDIC SIGN VISARGA UDATTA", direction="nsm", linebreak="cm", unicodeslot=0x1CE3, }, [0x1CE4]={ category="mn", description="VEDIC SIGN REVERSED VISARGA UDATTA", direction="nsm", linebreak="cm", unicodeslot=0x1CE4, }, [0x1CE5]={ category="mn", description="VEDIC SIGN VISARGA ANUDATTA", direction="nsm", linebreak="cm", unicodeslot=0x1CE5, }, [0x1CE6]={ category="mn", description="VEDIC SIGN REVERSED VISARGA ANUDATTA", direction="nsm", linebreak="cm", unicodeslot=0x1CE6, }, [0x1CE7]={ category="mn", description="VEDIC SIGN VISARGA UDATTA WITH TAIL", direction="nsm", linebreak="cm", unicodeslot=0x1CE7, }, [0x1CE8]={ category="mn", description="VEDIC SIGN VISARGA ANUDATTA WITH TAIL", direction="nsm", linebreak="cm", unicodeslot=0x1CE8, }, [0x1CE9]={ category="lo", description="VEDIC SIGN ANUSVARA ANTARGOMUKHA", direction="l", linebreak="al", unicodeslot=0x1CE9, }, [0x1CEA]={ category="lo", description="VEDIC SIGN ANUSVARA BAHIRGOMUKHA", direction="l", linebreak="al", unicodeslot=0x1CEA, }, [0x1CEB]={ category="lo", description="VEDIC SIGN ANUSVARA VAMAGOMUKHA", direction="l", linebreak="al", unicodeslot=0x1CEB, }, [0x1CEC]={ category="lo", description="VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL", direction="l", linebreak="al", unicodeslot=0x1CEC, }, [0x1CED]={ category="mn", description="VEDIC SIGN TIRYAK", direction="nsm", linebreak="cm", unicodeslot=0x1CED, }, [0x1CEE]={ category="lo", description="VEDIC SIGN HEXIFORM LONG ANUSVARA", direction="l", linebreak="al", unicodeslot=0x1CEE, }, [0x1CEF]={ category="lo", description="VEDIC SIGN LONG ANUSVARA", direction="l", linebreak="al", unicodeslot=0x1CEF, }, [0x1CF0]={ category="lo", description="VEDIC SIGN RTHANG LONG ANUSVARA", direction="l", linebreak="al", unicodeslot=0x1CF0, }, [0x1CF1]={ category="lo", description="VEDIC SIGN ANUSVARA UBHAYATO MUKHA", direction="l", linebreak="al", unicodeslot=0x1CF1, }, [0x1CF2]={ category="mc", description="VEDIC SIGN ARDHAVISARGA", direction="l", linebreak="cm", unicodeslot=0x1CF2, }, [0x1CF3]={ category="mc", description="VEDIC SIGN ROTATED ARDHAVISARGA", direction="l", linebreak="cm", unicodeslot=0x1CF3, }, [0x1CF4]={ category="mn", description="VEDIC TONE CANDRA ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1CF4, }, [0x1CF5]={ category="lo", description="VEDIC SIGN JIHVAMULIYA", direction="l", linebreak="al", unicodeslot=0x1CF5, }, [0x1CF6]={ category="lo", description="VEDIC SIGN UPADHMANIYA", direction="l", linebreak="al", unicodeslot=0x1CF6, }, [0x1D00]={ category="ll", description="LATIN LETTER SMALL CAPITAL A", direction="l", linebreak="al", unicodeslot=0x1D00, }, [0x1D01]={ category="ll", description="LATIN LETTER SMALL CAPITAL AE", direction="l", linebreak="al", unicodeslot=0x1D01, }, [0x1D02]={ category="ll", description="LATIN SMALL LETTER TURNED AE", direction="l", linebreak="al", unicodeslot=0x1D02, }, [0x1D03]={ category="ll", description="LATIN LETTER SMALL CAPITAL BARRED B", direction="l", linebreak="al", unicodeslot=0x1D03, }, [0x1D04]={ category="ll", description="LATIN LETTER SMALL CAPITAL C", direction="l", linebreak="al", unicodeslot=0x1D04, }, [0x1D05]={ category="ll", description="LATIN LETTER SMALL CAPITAL D", direction="l", linebreak="al", unicodeslot=0x1D05, }, [0x1D06]={ category="ll", description="LATIN LETTER SMALL CAPITAL ETH", direction="l", linebreak="al", unicodeslot=0x1D06, }, [0x1D07]={ category="ll", description="LATIN LETTER SMALL CAPITAL E", direction="l", linebreak="al", unicodeslot=0x1D07, }, [0x1D08]={ category="ll", description="LATIN SMALL LETTER TURNED OPEN E", direction="l", linebreak="al", unicodeslot=0x1D08, }, [0x1D09]={ category="ll", description="LATIN SMALL LETTER TURNED I", direction="l", linebreak="al", unicodeslot=0x1D09, }, [0x1D0A]={ category="ll", description="LATIN LETTER SMALL CAPITAL J", direction="l", linebreak="al", unicodeslot=0x1D0A, }, [0x1D0B]={ category="ll", description="LATIN LETTER SMALL CAPITAL K", direction="l", linebreak="al", unicodeslot=0x1D0B, }, [0x1D0C]={ category="ll", description="LATIN LETTER SMALL CAPITAL L WITH STROKE", direction="l", linebreak="al", unicodeslot=0x1D0C, }, [0x1D0D]={ category="ll", description="LATIN LETTER SMALL CAPITAL M", direction="l", linebreak="al", unicodeslot=0x1D0D, }, [0x1D0E]={ category="ll", description="LATIN LETTER SMALL CAPITAL REVERSED N", direction="l", linebreak="al", unicodeslot=0x1D0E, }, [0x1D0F]={ category="ll", description="LATIN LETTER SMALL CAPITAL O", direction="l", linebreak="al", unicodeslot=0x1D0F, }, [0x1D10]={ category="ll", description="LATIN LETTER SMALL CAPITAL OPEN O", direction="l", linebreak="al", unicodeslot=0x1D10, }, [0x1D11]={ category="ll", description="LATIN SMALL LETTER SIDEWAYS O", direction="l", linebreak="al", unicodeslot=0x1D11, }, [0x1D12]={ category="ll", description="LATIN SMALL LETTER SIDEWAYS OPEN O", direction="l", linebreak="al", unicodeslot=0x1D12, }, [0x1D13]={ category="ll", description="LATIN SMALL LETTER SIDEWAYS O WITH STROKE", direction="l", linebreak="al", unicodeslot=0x1D13, }, [0x1D14]={ category="ll", description="LATIN SMALL LETTER TURNED OE", direction="l", linebreak="al", unicodeslot=0x1D14, }, [0x1D15]={ category="ll", description="LATIN LETTER SMALL CAPITAL OU", direction="l", linebreak="al", unicodeslot=0x1D15, }, [0x1D16]={ category="ll", description="LATIN SMALL LETTER TOP HALF O", direction="l", linebreak="al", unicodeslot=0x1D16, }, [0x1D17]={ category="ll", description="LATIN SMALL LETTER BOTTOM HALF O", direction="l", linebreak="al", unicodeslot=0x1D17, }, [0x1D18]={ category="ll", description="LATIN LETTER SMALL CAPITAL P", direction="l", linebreak="al", unicodeslot=0x1D18, }, [0x1D19]={ category="ll", description="LATIN LETTER SMALL CAPITAL REVERSED R", direction="l", linebreak="al", unicodeslot=0x1D19, }, [0x1D1A]={ category="ll", description="LATIN LETTER SMALL CAPITAL TURNED R", direction="l", linebreak="al", unicodeslot=0x1D1A, }, [0x1D1B]={ category="ll", description="LATIN LETTER SMALL CAPITAL T", direction="l", linebreak="al", unicodeslot=0x1D1B, }, [0x1D1C]={ category="ll", description="LATIN LETTER SMALL CAPITAL U", direction="l", linebreak="al", unicodeslot=0x1D1C, }, [0x1D1D]={ category="ll", description="LATIN SMALL LETTER SIDEWAYS U", direction="l", linebreak="al", unicodeslot=0x1D1D, }, [0x1D1E]={ category="ll", description="LATIN SMALL LETTER SIDEWAYS DIAERESIZED U", direction="l", linebreak="al", unicodeslot=0x1D1E, }, [0x1D1F]={ category="ll", description="LATIN SMALL LETTER SIDEWAYS TURNED M", direction="l", linebreak="al", unicodeslot=0x1D1F, }, [0x1D20]={ category="ll", description="LATIN LETTER SMALL CAPITAL V", direction="l", linebreak="al", unicodeslot=0x1D20, }, [0x1D21]={ category="ll", description="LATIN LETTER SMALL CAPITAL W", direction="l", linebreak="al", unicodeslot=0x1D21, }, [0x1D22]={ category="ll", description="LATIN LETTER SMALL CAPITAL Z", direction="l", linebreak="al", unicodeslot=0x1D22, }, [0x1D23]={ category="ll", description="LATIN LETTER SMALL CAPITAL EZH", direction="l", linebreak="al", unicodeslot=0x1D23, }, [0x1D24]={ category="ll", description="LATIN LETTER VOICED LARYNGEAL SPIRANT", direction="l", linebreak="al", unicodeslot=0x1D24, }, [0x1D25]={ category="ll", description="LATIN LETTER AIN", direction="l", linebreak="al", unicodeslot=0x1D25, }, [0x1D26]={ category="ll", description="GREEK LETTER SMALL CAPITAL GAMMA", direction="l", linebreak="al", unicodeslot=0x1D26, }, [0x1D27]={ category="ll", description="GREEK LETTER SMALL CAPITAL LAMDA", direction="l", linebreak="al", unicodeslot=0x1D27, }, [0x1D28]={ category="ll", description="GREEK LETTER SMALL CAPITAL PI", direction="l", linebreak="al", unicodeslot=0x1D28, }, [0x1D29]={ category="ll", description="GREEK LETTER SMALL CAPITAL RHO", direction="l", linebreak="al", unicodeslot=0x1D29, }, [0x1D2A]={ category="ll", description="GREEK LETTER SMALL CAPITAL PSI", direction="l", linebreak="al", unicodeslot=0x1D2A, }, [0x1D2B]={ category="ll", description="CYRILLIC LETTER SMALL CAPITAL EL", direction="l", linebreak="al", unicodeslot=0x1D2B, }, [0x1D2C]={ category="lm", description="MODIFIER LETTER CAPITAL A", direction="l", linebreak="al", specials={ "super", 0x0041 }, unicodeslot=0x1D2C, }, [0x1D2D]={ category="lm", description="MODIFIER LETTER CAPITAL AE", direction="l", linebreak="al", specials={ "super", 0x00C6 }, unicodeslot=0x1D2D, }, [0x1D2E]={ category="lm", description="MODIFIER LETTER CAPITAL B", direction="l", linebreak="al", specials={ "super", 0x0042 }, unicodeslot=0x1D2E, }, [0x1D2F]={ category="lm", description="MODIFIER LETTER CAPITAL BARRED B", direction="l", linebreak="al", unicodeslot=0x1D2F, }, [0x1D30]={ category="lm", description="MODIFIER LETTER CAPITAL D", direction="l", linebreak="al", specials={ "super", 0x0044 }, unicodeslot=0x1D30, }, [0x1D31]={ category="lm", description="MODIFIER LETTER CAPITAL E", direction="l", linebreak="al", specials={ "super", 0x0045 }, unicodeslot=0x1D31, }, [0x1D32]={ category="lm", description="MODIFIER LETTER CAPITAL REVERSED E", direction="l", linebreak="al", specials={ "super", 0x018E }, unicodeslot=0x1D32, }, [0x1D33]={ category="lm", description="MODIFIER LETTER CAPITAL G", direction="l", linebreak="al", specials={ "super", 0x0047 }, unicodeslot=0x1D33, }, [0x1D34]={ category="lm", description="MODIFIER LETTER CAPITAL H", direction="l", linebreak="al", specials={ "super", 0x0048 }, unicodeslot=0x1D34, }, [0x1D35]={ category="lm", description="MODIFIER LETTER CAPITAL I", direction="l", linebreak="al", specials={ "super", 0x0049 }, unicodeslot=0x1D35, }, [0x1D36]={ category="lm", description="MODIFIER LETTER CAPITAL J", direction="l", linebreak="al", specials={ "super", 0x004A }, unicodeslot=0x1D36, }, [0x1D37]={ category="lm", description="MODIFIER LETTER CAPITAL K", direction="l", linebreak="al", specials={ "super", 0x004B }, unicodeslot=0x1D37, }, [0x1D38]={ category="lm", description="MODIFIER LETTER CAPITAL L", direction="l", linebreak="al", specials={ "super", 0x004C }, unicodeslot=0x1D38, }, [0x1D39]={ category="lm", description="MODIFIER LETTER CAPITAL M", direction="l", linebreak="al", specials={ "super", 0x004D }, unicodeslot=0x1D39, }, [0x1D3A]={ category="lm", description="MODIFIER LETTER CAPITAL N", direction="l", linebreak="al", specials={ "super", 0x004E }, unicodeslot=0x1D3A, }, [0x1D3B]={ category="lm", description="MODIFIER LETTER CAPITAL REVERSED N", direction="l", linebreak="al", unicodeslot=0x1D3B, }, [0x1D3C]={ category="lm", description="MODIFIER LETTER CAPITAL O", direction="l", linebreak="al", specials={ "super", 0x004F }, unicodeslot=0x1D3C, }, [0x1D3D]={ category="lm", description="MODIFIER LETTER CAPITAL OU", direction="l", linebreak="al", specials={ "super", 0x0222 }, unicodeslot=0x1D3D, }, [0x1D3E]={ category="lm", description="MODIFIER LETTER CAPITAL P", direction="l", linebreak="al", specials={ "super", 0x0050 }, unicodeslot=0x1D3E, }, [0x1D3F]={ category="lm", description="MODIFIER LETTER CAPITAL R", direction="l", linebreak="al", specials={ "super", 0x0052 }, unicodeslot=0x1D3F, }, [0x1D40]={ category="lm", description="MODIFIER LETTER CAPITAL T", direction="l", linebreak="al", specials={ "super", 0x0054 }, unicodeslot=0x1D40, }, [0x1D41]={ category="lm", description="MODIFIER LETTER CAPITAL U", direction="l", linebreak="al", specials={ "super", 0x0055 }, unicodeslot=0x1D41, }, [0x1D42]={ category="lm", description="MODIFIER LETTER CAPITAL W", direction="l", linebreak="al", specials={ "super", 0x0057 }, unicodeslot=0x1D42, }, [0x1D43]={ category="lm", description="MODIFIER LETTER SMALL A", direction="l", linebreak="al", specials={ "super", 0x0061 }, unicodeslot=0x1D43, }, [0x1D44]={ category="lm", description="MODIFIER LETTER SMALL TURNED A", direction="l", linebreak="al", specials={ "super", 0x0250 }, unicodeslot=0x1D44, }, [0x1D45]={ category="lm", description="MODIFIER LETTER SMALL ALPHA", direction="l", linebreak="al", specials={ "super", 0x0251 }, unicodeslot=0x1D45, }, [0x1D46]={ category="lm", description="MODIFIER LETTER SMALL TURNED AE", direction="l", linebreak="al", specials={ "super", 0x1D02 }, unicodeslot=0x1D46, }, [0x1D47]={ category="lm", description="MODIFIER LETTER SMALL B", direction="l", linebreak="al", specials={ "super", 0x0062 }, unicodeslot=0x1D47, }, [0x1D48]={ category="lm", description="MODIFIER LETTER SMALL D", direction="l", linebreak="al", specials={ "super", 0x0064 }, unicodeslot=0x1D48, }, [0x1D49]={ category="lm", description="MODIFIER LETTER SMALL E", direction="l", linebreak="al", specials={ "super", 0x0065 }, unicodeslot=0x1D49, }, [0x1D4A]={ category="lm", description="MODIFIER LETTER SMALL SCHWA", direction="l", linebreak="al", specials={ "super", 0x0259 }, unicodeslot=0x1D4A, }, [0x1D4B]={ category="lm", description="MODIFIER LETTER SMALL OPEN E", direction="l", linebreak="al", specials={ "super", 0x025B }, unicodeslot=0x1D4B, }, [0x1D4C]={ category="lm", description="MODIFIER LETTER SMALL TURNED OPEN E", direction="l", linebreak="al", specials={ "super", 0x025C }, unicodeslot=0x1D4C, }, [0x1D4D]={ category="lm", description="MODIFIER LETTER SMALL G", direction="l", linebreak="al", specials={ "super", 0x0067 }, unicodeslot=0x1D4D, }, [0x1D4E]={ category="lm", description="MODIFIER LETTER SMALL TURNED I", direction="l", linebreak="al", unicodeslot=0x1D4E, }, [0x1D4F]={ category="lm", description="MODIFIER LETTER SMALL K", direction="l", linebreak="al", specials={ "super", 0x006B }, unicodeslot=0x1D4F, }, [0x1D50]={ category="lm", description="MODIFIER LETTER SMALL M", direction="l", linebreak="al", specials={ "super", 0x006D }, unicodeslot=0x1D50, }, [0x1D51]={ category="lm", description="MODIFIER LETTER SMALL ENG", direction="l", linebreak="al", specials={ "super", 0x014B }, unicodeslot=0x1D51, }, [0x1D52]={ category="lm", description="MODIFIER LETTER SMALL O", direction="l", linebreak="al", specials={ "super", 0x006F }, unicodeslot=0x1D52, }, [0x1D53]={ category="lm", description="MODIFIER LETTER SMALL OPEN O", direction="l", linebreak="al", specials={ "super", 0x0254 }, unicodeslot=0x1D53, }, [0x1D54]={ category="lm", description="MODIFIER LETTER SMALL TOP HALF O", direction="l", linebreak="al", specials={ "super", 0x1D16 }, unicodeslot=0x1D54, }, [0x1D55]={ category="lm", description="MODIFIER LETTER SMALL BOTTOM HALF O", direction="l", linebreak="al", specials={ "super", 0x1D17 }, unicodeslot=0x1D55, }, [0x1D56]={ category="lm", description="MODIFIER LETTER SMALL P", direction="l", linebreak="al", specials={ "super", 0x0070 }, unicodeslot=0x1D56, }, [0x1D57]={ category="lm", description="MODIFIER LETTER SMALL T", direction="l", linebreak="al", specials={ "super", 0x0074 }, unicodeslot=0x1D57, }, [0x1D58]={ category="lm", description="MODIFIER LETTER SMALL U", direction="l", linebreak="al", specials={ "super", 0x0075 }, unicodeslot=0x1D58, }, [0x1D59]={ category="lm", description="MODIFIER LETTER SMALL SIDEWAYS U", direction="l", linebreak="al", specials={ "super", 0x1D1D }, unicodeslot=0x1D59, }, [0x1D5A]={ category="lm", description="MODIFIER LETTER SMALL TURNED M", direction="l", linebreak="al", specials={ "super", 0x026F }, unicodeslot=0x1D5A, }, [0x1D5B]={ category="lm", description="MODIFIER LETTER SMALL V", direction="l", linebreak="al", specials={ "super", 0x0076 }, unicodeslot=0x1D5B, }, [0x1D5C]={ category="lm", description="MODIFIER LETTER SMALL AIN", direction="l", linebreak="al", specials={ "super", 0x1D25 }, unicodeslot=0x1D5C, }, [0x1D5D]={ category="lm", description="MODIFIER LETTER SMALL BETA", direction="l", linebreak="al", specials={ "super", 0x03B2 }, unicodeslot=0x1D5D, }, [0x1D5E]={ category="lm", description="MODIFIER LETTER SMALL GREEK GAMMA", direction="l", linebreak="al", specials={ "super", 0x03B3 }, unicodeslot=0x1D5E, }, [0x1D5F]={ category="lm", description="MODIFIER LETTER SMALL DELTA", direction="l", linebreak="al", specials={ "super", 0x03B4 }, unicodeslot=0x1D5F, }, [0x1D60]={ category="lm", description="MODIFIER LETTER SMALL GREEK PHI", direction="l", linebreak="al", specials={ "super", 0x03C6 }, unicodeslot=0x1D60, }, [0x1D61]={ category="lm", description="MODIFIER LETTER SMALL CHI", direction="l", linebreak="al", specials={ "super", 0x03C7 }, unicodeslot=0x1D61, }, [0x1D62]={ category="ll", description="LATIN SUBSCRIPT SMALL LETTER I", direction="l", linebreak="al", specials={ "sub", 0x0069 }, unicodeslot=0x1D62, }, [0x1D63]={ category="ll", description="LATIN SUBSCRIPT SMALL LETTER R", direction="l", linebreak="al", specials={ "sub", 0x0072 }, unicodeslot=0x1D63, }, [0x1D64]={ category="ll", description="LATIN SUBSCRIPT SMALL LETTER U", direction="l", linebreak="al", specials={ "sub", 0x0075 }, unicodeslot=0x1D64, }, [0x1D65]={ category="ll", description="LATIN SUBSCRIPT SMALL LETTER V", direction="l", linebreak="al", specials={ "sub", 0x0076 }, unicodeslot=0x1D65, }, [0x1D66]={ category="ll", description="GREEK SUBSCRIPT SMALL LETTER BETA", direction="l", linebreak="al", specials={ "sub", 0x03B2 }, unicodeslot=0x1D66, }, [0x1D67]={ category="ll", description="GREEK SUBSCRIPT SMALL LETTER GAMMA", direction="l", linebreak="al", specials={ "sub", 0x03B3 }, unicodeslot=0x1D67, }, [0x1D68]={ category="ll", description="GREEK SUBSCRIPT SMALL LETTER RHO", direction="l", linebreak="al", specials={ "sub", 0x03C1 }, unicodeslot=0x1D68, }, [0x1D69]={ category="ll", description="GREEK SUBSCRIPT SMALL LETTER PHI", direction="l", linebreak="al", specials={ "sub", 0x03C6 }, unicodeslot=0x1D69, }, [0x1D6A]={ category="ll", description="GREEK SUBSCRIPT SMALL LETTER CHI", direction="l", linebreak="al", specials={ "sub", 0x03C7 }, unicodeslot=0x1D6A, }, [0x1D6B]={ category="ll", description="LATIN SMALL LETTER UE", direction="l", linebreak="al", unicodeslot=0x1D6B, }, [0x1D6C]={ category="ll", description="LATIN SMALL LETTER B WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0062, unicodeslot=0x1D6C, }, [0x1D6D]={ category="ll", description="LATIN SMALL LETTER D WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0064, unicodeslot=0x1D6D, }, [0x1D6E]={ category="ll", description="LATIN SMALL LETTER F WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0066, unicodeslot=0x1D6E, }, [0x1D6F]={ category="ll", description="LATIN SMALL LETTER M WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x006D, unicodeslot=0x1D6F, }, [0x1D70]={ category="ll", description="LATIN SMALL LETTER N WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x006E, unicodeslot=0x1D70, }, [0x1D71]={ category="ll", description="LATIN SMALL LETTER P WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0070, unicodeslot=0x1D71, }, [0x1D72]={ category="ll", description="LATIN SMALL LETTER R WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0072, unicodeslot=0x1D72, }, [0x1D73]={ category="ll", description="LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0072, unicodeslot=0x1D73, }, [0x1D74]={ category="ll", description="LATIN SMALL LETTER S WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0073, unicodeslot=0x1D74, }, [0x1D75]={ category="ll", description="LATIN SMALL LETTER T WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x0074, unicodeslot=0x1D75, }, [0x1D76]={ category="ll", description="LATIN SMALL LETTER Z WITH MIDDLE TILDE", direction="l", linebreak="al", shcode=0x007A, unicodeslot=0x1D76, }, [0x1D77]={ category="ll", description="LATIN SMALL LETTER TURNED G", direction="l", linebreak="al", unicodeslot=0x1D77, }, [0x1D78]={ category="lm", description="MODIFIER LETTER CYRILLIC EN", direction="l", linebreak="al", specials={ "super", 0x043D }, unicodeslot=0x1D78, }, [0x1D79]={ category="ll", description="LATIN SMALL LETTER INSULAR G", direction="l", linebreak="al", unicodeslot=0x1D79, }, [0x1D7A]={ category="ll", description="LATIN SMALL LETTER TH WITH STRIKETHROUGH", direction="l", linebreak="al", unicodeslot=0x1D7A, }, [0x1D7B]={ category="ll", description="LATIN SMALL CAPITAL LETTER I WITH STROKE", direction="l", linebreak="al", unicodeslot=0x1D7B, }, [0x1D7C]={ category="ll", description="LATIN SMALL LETTER IOTA WITH STROKE", direction="l", linebreak="al", shcode=0x0269, unicodeslot=0x1D7C, }, [0x1D7D]={ category="ll", description="LATIN SMALL LETTER P WITH STROKE", direction="l", linebreak="al", shcode=0x0070, uccode=0x2C63, unicodeslot=0x1D7D, }, [0x1D7E]={ category="ll", description="LATIN SMALL CAPITAL LETTER U WITH STROKE", direction="l", linebreak="al", unicodeslot=0x1D7E, }, [0x1D7F]={ category="ll", description="LATIN SMALL LETTER UPSILON WITH STROKE", direction="l", linebreak="al", shcode=0x028A, unicodeslot=0x1D7F, }, [0x1D80]={ category="ll", description="LATIN SMALL LETTER B WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0062, unicodeslot=0x1D80, }, [0x1D81]={ category="ll", description="LATIN SMALL LETTER D WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0064, unicodeslot=0x1D81, }, [0x1D82]={ category="ll", description="LATIN SMALL LETTER F WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0066, unicodeslot=0x1D82, }, [0x1D83]={ category="ll", description="LATIN SMALL LETTER G WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0067, unicodeslot=0x1D83, }, [0x1D84]={ category="ll", description="LATIN SMALL LETTER K WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x006B, unicodeslot=0x1D84, }, [0x1D85]={ category="ll", description="LATIN SMALL LETTER L WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x006C, unicodeslot=0x1D85, }, [0x1D86]={ category="ll", description="LATIN SMALL LETTER M WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x006D, unicodeslot=0x1D86, }, [0x1D87]={ category="ll", description="LATIN SMALL LETTER N WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x006E, unicodeslot=0x1D87, }, [0x1D88]={ category="ll", description="LATIN SMALL LETTER P WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0070, unicodeslot=0x1D88, }, [0x1D89]={ category="ll", description="LATIN SMALL LETTER R WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0072, unicodeslot=0x1D89, }, [0x1D8A]={ category="ll", description="LATIN SMALL LETTER S WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0073, unicodeslot=0x1D8A, }, [0x1D8B]={ category="ll", description="LATIN SMALL LETTER ESH WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0283, unicodeslot=0x1D8B, }, [0x1D8C]={ category="ll", description="LATIN SMALL LETTER V WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0076, unicodeslot=0x1D8C, }, [0x1D8D]={ category="ll", description="LATIN SMALL LETTER X WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x0078, unicodeslot=0x1D8D, }, [0x1D8E]={ category="ll", description="LATIN SMALL LETTER Z WITH PALATAL HOOK", direction="l", linebreak="al", shcode=0x007A, unicodeslot=0x1D8E, }, [0x1D8F]={ category="ll", description="LATIN SMALL LETTER A WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0061, unicodeslot=0x1D8F, }, [0x1D90]={ category="ll", description="LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0251, unicodeslot=0x1D90, }, [0x1D91]={ category="ll", description="LATIN SMALL LETTER D WITH HOOK AND TAIL", direction="l", linebreak="al", shcode=0x0064, unicodeslot=0x1D91, }, [0x1D92]={ category="ll", description="LATIN SMALL LETTER E WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0065, unicodeslot=0x1D92, }, [0x1D93]={ category="ll", description="LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK", direction="l", linebreak="al", unicodeslot=0x1D93, }, [0x1D94]={ category="ll", description="LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK", direction="l", linebreak="al", unicodeslot=0x1D94, }, [0x1D95]={ category="ll", description="LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0259, unicodeslot=0x1D95, }, [0x1D96]={ category="ll", description="LATIN SMALL LETTER I WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0069, unicodeslot=0x1D96, }, [0x1D97]={ category="ll", description="LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK", direction="l", linebreak="al", unicodeslot=0x1D97, }, [0x1D98]={ category="ll", description="LATIN SMALL LETTER ESH WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0283, unicodeslot=0x1D98, }, [0x1D99]={ category="ll", description="LATIN SMALL LETTER U WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0075, unicodeslot=0x1D99, }, [0x1D9A]={ category="ll", description="LATIN SMALL LETTER EZH WITH RETROFLEX HOOK", direction="l", linebreak="al", shcode=0x0292, unicodeslot=0x1D9A, }, [0x1D9B]={ category="lm", description="MODIFIER LETTER SMALL TURNED ALPHA", direction="l", linebreak="al", specials={ "super", 0x0252 }, unicodeslot=0x1D9B, }, [0x1D9C]={ category="lm", description="MODIFIER LETTER SMALL C", direction="l", linebreak="al", specials={ "super", 0x0063 }, unicodeslot=0x1D9C, }, [0x1D9D]={ category="lm", description="MODIFIER LETTER SMALL C WITH CURL", direction="l", linebreak="al", specials={ "super", 0x0255 }, unicodeslot=0x1D9D, }, [0x1D9E]={ category="lm", description="MODIFIER LETTER SMALL ETH", direction="l", linebreak="al", specials={ "super", 0x00F0 }, unicodeslot=0x1D9E, }, [0x1D9F]={ category="lm", description="MODIFIER LETTER SMALL REVERSED OPEN E", direction="l", linebreak="al", specials={ "super", 0x025C }, unicodeslot=0x1D9F, }, [0x1DA0]={ category="lm", description="MODIFIER LETTER SMALL F", direction="l", linebreak="al", specials={ "super", 0x0066 }, unicodeslot=0x1DA0, }, [0x1DA1]={ category="lm", description="MODIFIER LETTER SMALL DOTLESS J WITH STROKE", direction="l", linebreak="al", specials={ "super", 0x025F }, unicodeslot=0x1DA1, }, [0x1DA2]={ category="lm", description="MODIFIER LETTER SMALL SCRIPT G", direction="l", linebreak="al", specials={ "super", 0x0261 }, unicodeslot=0x1DA2, }, [0x1DA3]={ category="lm", description="MODIFIER LETTER SMALL TURNED H", direction="l", linebreak="al", specials={ "super", 0x0265 }, unicodeslot=0x1DA3, }, [0x1DA4]={ category="lm", description="MODIFIER LETTER SMALL I WITH STROKE", direction="l", linebreak="al", specials={ "super", 0x0268 }, unicodeslot=0x1DA4, }, [0x1DA5]={ category="lm", description="MODIFIER LETTER SMALL IOTA", direction="l", linebreak="al", specials={ "super", 0x0269 }, unicodeslot=0x1DA5, }, [0x1DA6]={ category="lm", description="MODIFIER LETTER SMALL CAPITAL I", direction="l", linebreak="al", specials={ "super", 0x026A }, unicodeslot=0x1DA6, }, [0x1DA7]={ category="lm", description="MODIFIER LETTER SMALL CAPITAL I WITH STROKE", direction="l", linebreak="al", specials={ "super", 0x1D7B }, unicodeslot=0x1DA7, }, [0x1DA8]={ category="lm", description="MODIFIER LETTER SMALL J WITH CROSSED-TAIL", direction="l", linebreak="al", specials={ "super", 0x029D }, unicodeslot=0x1DA8, }, [0x1DA9]={ category="lm", description="MODIFIER LETTER SMALL L WITH RETROFLEX HOOK", direction="l", linebreak="al", specials={ "super", 0x026D }, unicodeslot=0x1DA9, }, [0x1DAA]={ category="lm", description="MODIFIER LETTER SMALL L WITH PALATAL HOOK", direction="l", linebreak="al", specials={ "super", 0x1D85 }, unicodeslot=0x1DAA, }, [0x1DAB]={ category="lm", description="MODIFIER LETTER SMALL CAPITAL L", direction="l", linebreak="al", specials={ "super", 0x029F }, unicodeslot=0x1DAB, }, [0x1DAC]={ category="lm", description="MODIFIER LETTER SMALL M WITH HOOK", direction="l", linebreak="al", specials={ "super", 0x0271 }, unicodeslot=0x1DAC, }, [0x1DAD]={ category="lm", description="MODIFIER LETTER SMALL TURNED M WITH LONG LEG", direction="l", linebreak="al", specials={ "super", 0x0270 }, unicodeslot=0x1DAD, }, [0x1DAE]={ category="lm", description="MODIFIER LETTER SMALL N WITH LEFT HOOK", direction="l", linebreak="al", specials={ "super", 0x0272 }, unicodeslot=0x1DAE, }, [0x1DAF]={ category="lm", description="MODIFIER LETTER SMALL N WITH RETROFLEX HOOK", direction="l", linebreak="al", specials={ "super", 0x0273 }, unicodeslot=0x1DAF, }, [0x1DB0]={ category="lm", description="MODIFIER LETTER SMALL CAPITAL N", direction="l", linebreak="al", specials={ "super", 0x0274 }, unicodeslot=0x1DB0, }, [0x1DB1]={ category="lm", description="MODIFIER LETTER SMALL BARRED O", direction="l", linebreak="al", specials={ "super", 0x0275 }, unicodeslot=0x1DB1, }, [0x1DB2]={ category="lm", description="MODIFIER LETTER SMALL PHI", direction="l", linebreak="al", specials={ "super", 0x0278 }, unicodeslot=0x1DB2, }, [0x1DB3]={ category="lm", description="MODIFIER LETTER SMALL S WITH HOOK", direction="l", linebreak="al", specials={ "super", 0x0282 }, unicodeslot=0x1DB3, }, [0x1DB4]={ category="lm", description="MODIFIER LETTER SMALL ESH", direction="l", linebreak="al", specials={ "super", 0x0283 }, unicodeslot=0x1DB4, }, [0x1DB5]={ category="lm", description="MODIFIER LETTER SMALL T WITH PALATAL HOOK", direction="l", linebreak="al", specials={ "super", 0x01AB }, unicodeslot=0x1DB5, }, [0x1DB6]={ category="lm", description="MODIFIER LETTER SMALL U BAR", direction="l", linebreak="al", specials={ "super", 0x0289 }, unicodeslot=0x1DB6, }, [0x1DB7]={ category="lm", description="MODIFIER LETTER SMALL UPSILON", direction="l", linebreak="al", specials={ "super", 0x028A }, unicodeslot=0x1DB7, }, [0x1DB8]={ category="lm", description="MODIFIER LETTER SMALL CAPITAL U", direction="l", linebreak="al", specials={ "super", 0x1D1C }, unicodeslot=0x1DB8, }, [0x1DB9]={ category="lm", description="MODIFIER LETTER SMALL V WITH HOOK", direction="l", linebreak="al", specials={ "super", 0x028B }, unicodeslot=0x1DB9, }, [0x1DBA]={ category="lm", description="MODIFIER LETTER SMALL TURNED V", direction="l", linebreak="al", specials={ "super", 0x028C }, unicodeslot=0x1DBA, }, [0x1DBB]={ category="lm", description="MODIFIER LETTER SMALL Z", direction="l", linebreak="al", specials={ "super", 0x007A }, unicodeslot=0x1DBB, }, [0x1DBC]={ category="lm", description="MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK", direction="l", linebreak="al", specials={ "super", 0x0290 }, unicodeslot=0x1DBC, }, [0x1DBD]={ category="lm", description="MODIFIER LETTER SMALL Z WITH CURL", direction="l", linebreak="al", specials={ "super", 0x0291 }, unicodeslot=0x1DBD, }, [0x1DBE]={ category="lm", description="MODIFIER LETTER SMALL EZH", direction="l", linebreak="al", specials={ "super", 0x0292 }, unicodeslot=0x1DBE, }, [0x1DBF]={ category="lm", description="MODIFIER LETTER SMALL THETA", direction="l", linebreak="al", specials={ "super", 0x03B8 }, unicodeslot=0x1DBF, }, [0x1DC0]={ category="mn", description="COMBINING DOTTED GRAVE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x1DC0, }, [0x1DC1]={ category="mn", description="COMBINING DOTTED ACUTE ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x1DC1, }, [0x1DC2]={ category="mn", description="COMBINING SNAKE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DC2, }, [0x1DC3]={ category="mn", description="COMBINING SUSPENSION MARK", direction="nsm", linebreak="cm", unicodeslot=0x1DC3, }, [0x1DC4]={ category="mn", description="COMBINING MACRON-ACUTE", direction="nsm", linebreak="cm", unicodeslot=0x1DC4, }, [0x1DC5]={ category="mn", description="COMBINING GRAVE-MACRON", direction="nsm", linebreak="cm", unicodeslot=0x1DC5, }, [0x1DC6]={ category="mn", description="COMBINING MACRON-GRAVE", direction="nsm", linebreak="cm", unicodeslot=0x1DC6, }, [0x1DC7]={ category="mn", description="COMBINING ACUTE-MACRON", direction="nsm", linebreak="cm", unicodeslot=0x1DC7, }, [0x1DC8]={ category="mn", description="COMBINING GRAVE-ACUTE-GRAVE", direction="nsm", linebreak="cm", unicodeslot=0x1DC8, }, [0x1DC9]={ category="mn", description="COMBINING ACUTE-GRAVE-ACUTE", direction="nsm", linebreak="cm", unicodeslot=0x1DC9, }, [0x1DCA]={ category="mn", description="COMBINING LATIN SMALL LETTER R BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DCA, }, [0x1DCB]={ category="mn", description="COMBINING BREVE-MACRON", direction="nsm", linebreak="cm", unicodeslot=0x1DCB, }, [0x1DCC]={ category="mn", description="COMBINING MACRON-BREVE", direction="nsm", linebreak="cm", unicodeslot=0x1DCC, }, [0x1DCD]={ category="mn", description="COMBINING DOUBLE CIRCUMFLEX ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1DCD, }, [0x1DCE]={ category="mn", description="COMBINING OGONEK ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1DCE, }, [0x1DCF]={ category="mn", description="COMBINING ZIGZAG BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DCF, }, [0x1DD0]={ category="mn", description="COMBINING IS BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DD0, }, [0x1DD1]={ category="mn", description="COMBINING UR ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1DD1, }, [0x1DD2]={ category="mn", description="COMBINING US ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1DD2, }, [0x1DD3]={ category="mn", description="COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1DD3, }, [0x1DD4]={ category="mn", description="COMBINING LATIN SMALL LETTER AE", direction="nsm", linebreak="cm", unicodeslot=0x1DD4, }, [0x1DD5]={ category="mn", description="COMBINING LATIN SMALL LETTER AO", direction="nsm", linebreak="cm", unicodeslot=0x1DD5, }, [0x1DD6]={ category="mn", description="COMBINING LATIN SMALL LETTER AV", direction="nsm", linebreak="cm", unicodeslot=0x1DD6, }, [0x1DD7]={ category="mn", description="COMBINING LATIN SMALL LETTER C CEDILLA", direction="nsm", linebreak="cm", unicodeslot=0x1DD7, }, [0x1DD8]={ category="mn", description="COMBINING LATIN SMALL LETTER INSULAR D", direction="nsm", linebreak="cm", unicodeslot=0x1DD8, }, [0x1DD9]={ category="mn", description="COMBINING LATIN SMALL LETTER ETH", direction="nsm", linebreak="cm", unicodeslot=0x1DD9, }, [0x1DDA]={ category="mn", description="COMBINING LATIN SMALL LETTER G", direction="nsm", linebreak="cm", unicodeslot=0x1DDA, }, [0x1DDB]={ category="mn", description="COMBINING LATIN LETTER SMALL CAPITAL G", direction="nsm", linebreak="cm", unicodeslot=0x1DDB, }, [0x1DDC]={ category="mn", description="COMBINING LATIN SMALL LETTER K", direction="nsm", linebreak="cm", unicodeslot=0x1DDC, }, [0x1DDD]={ category="mn", description="COMBINING LATIN SMALL LETTER L", direction="nsm", linebreak="cm", unicodeslot=0x1DDD, }, [0x1DDE]={ category="mn", description="COMBINING LATIN LETTER SMALL CAPITAL L", direction="nsm", linebreak="cm", unicodeslot=0x1DDE, }, [0x1DDF]={ category="mn", description="COMBINING LATIN LETTER SMALL CAPITAL M", direction="nsm", linebreak="cm", unicodeslot=0x1DDF, }, [0x1DE0]={ category="mn", description="COMBINING LATIN SMALL LETTER N", direction="nsm", linebreak="cm", unicodeslot=0x1DE0, }, [0x1DE1]={ category="mn", description="COMBINING LATIN LETTER SMALL CAPITAL N", direction="nsm", linebreak="cm", unicodeslot=0x1DE1, }, [0x1DE2]={ category="mn", description="COMBINING LATIN LETTER SMALL CAPITAL R", direction="nsm", linebreak="cm", unicodeslot=0x1DE2, }, [0x1DE3]={ category="mn", description="COMBINING LATIN SMALL LETTER R ROTUNDA", direction="nsm", linebreak="cm", unicodeslot=0x1DE3, }, [0x1DE4]={ category="mn", description="COMBINING LATIN SMALL LETTER S", direction="nsm", linebreak="cm", unicodeslot=0x1DE4, }, [0x1DE5]={ category="mn", description="COMBINING LATIN SMALL LETTER LONG S", direction="nsm", linebreak="cm", unicodeslot=0x1DE5, }, [0x1DE6]={ category="mn", description="COMBINING LATIN SMALL LETTER Z", direction="nsm", linebreak="cm", unicodeslot=0x1DE6, }, [0x1DFC]={ category="mn", description="COMBINING DOUBLE INVERTED BREVE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DFC, }, [0x1DFD]={ category="mn", description="COMBINING ALMOST EQUAL TO BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DFD, }, [0x1DFE]={ category="mn", description="COMBINING LEFT ARROWHEAD ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x1DFE, }, [0x1DFF]={ category="mn", description="COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW", direction="nsm", linebreak="cm", unicodeslot=0x1DFF, }, [0x1E00]={ adobename="Aringbelow", category="lu", description="LATIN CAPITAL LETTER A WITH RING BELOW", direction="l", lccode=0x1E01, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0325 }, unicodeslot=0x1E00, }, [0x1E01]={ adobename="aringbelow", category="ll", description="LATIN SMALL LETTER A WITH RING BELOW", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0325 }, uccode=0x1E00, unicodeslot=0x1E01, }, [0x1E02]={ adobename="Bdotaccent", category="lu", description="LATIN CAPITAL LETTER B WITH DOT ABOVE", direction="l", lccode=0x1E03, linebreak="al", shcode=0x0042, specials={ "char", 0x0042, 0x0307 }, unicodeslot=0x1E02, }, [0x1E03]={ adobename="bdotaccent", category="ll", description="LATIN SMALL LETTER B WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0062, specials={ "char", 0x0062, 0x0307 }, uccode=0x1E02, unicodeslot=0x1E03, }, [0x1E04]={ adobename="Bdotbelow", category="lu", description="LATIN CAPITAL LETTER B WITH DOT BELOW", direction="l", lccode=0x1E05, linebreak="al", shcode=0x0042, specials={ "char", 0x0042, 0x0323 }, unicodeslot=0x1E04, }, [0x1E05]={ adobename="bdotbelow", category="ll", description="LATIN SMALL LETTER B WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0062, specials={ "char", 0x0062, 0x0323 }, uccode=0x1E04, unicodeslot=0x1E05, }, [0x1E06]={ adobename="Blinebelow", category="lu", description="LATIN CAPITAL LETTER B WITH LINE BELOW", direction="l", lccode=0x1E07, linebreak="al", shcode=0x0042, specials={ "char", 0x0042, 0x0331 }, unicodeslot=0x1E06, }, [0x1E07]={ adobename="blinebelow", category="ll", description="LATIN SMALL LETTER B WITH LINE BELOW", direction="l", linebreak="al", shcode=0x0062, specials={ "char", 0x0062, 0x0331 }, uccode=0x1E06, unicodeslot=0x1E07, }, [0x1E08]={ adobename="Ccedillaacute", category="lu", description="LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE", direction="l", lccode=0x1E09, linebreak="al", shcode=0x0043, specials={ "char", 0x00C7, 0x0301 }, unicodeslot=0x1E08, }, [0x1E09]={ adobename="ccedillaacute", category="ll", description="LATIN SMALL LETTER C WITH CEDILLA AND ACUTE", direction="l", linebreak="al", shcode=0x0063, specials={ "char", 0x00E7, 0x0301 }, uccode=0x1E08, unicodeslot=0x1E09, }, [0x1E0A]={ adobename="Ddotaccent", category="lu", description="LATIN CAPITAL LETTER D WITH DOT ABOVE", direction="l", lccode=0x1E0B, linebreak="al", shcode=0x0044, specials={ "char", 0x0044, 0x0307 }, unicodeslot=0x1E0A, }, [0x1E0B]={ adobename="ddotaccent", category="ll", description="LATIN SMALL LETTER D WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0064, specials={ "char", 0x0064, 0x0307 }, uccode=0x1E0A, unicodeslot=0x1E0B, }, [0x1E0C]={ adobename="Ddotbelow", category="lu", description="LATIN CAPITAL LETTER D WITH DOT BELOW", direction="l", lccode=0x1E0D, linebreak="al", shcode=0x0044, specials={ "char", 0x0044, 0x0323 }, unicodeslot=0x1E0C, }, [0x1E0D]={ adobename="ddotbelow", category="ll", description="LATIN SMALL LETTER D WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0064, specials={ "char", 0x0064, 0x0323 }, uccode=0x1E0C, unicodeslot=0x1E0D, }, [0x1E0E]={ adobename="Dlinebelow", category="lu", description="LATIN CAPITAL LETTER D WITH LINE BELOW", direction="l", lccode=0x1E0F, linebreak="al", shcode=0x0044, specials={ "char", 0x0044, 0x0331 }, unicodeslot=0x1E0E, }, [0x1E0F]={ adobename="dlinebelow", category="ll", description="LATIN SMALL LETTER D WITH LINE BELOW", direction="l", linebreak="al", shcode=0x0064, specials={ "char", 0x0064, 0x0331 }, uccode=0x1E0E, unicodeslot=0x1E0F, }, [0x1E10]={ adobename="Dcedilla", category="lu", description="LATIN CAPITAL LETTER D WITH CEDILLA", direction="l", lccode=0x1E11, linebreak="al", shcode=0x0044, specials={ "char", 0x0044, 0x0327 }, unicodeslot=0x1E10, }, [0x1E11]={ adobename="dcedilla", category="ll", description="LATIN SMALL LETTER D WITH CEDILLA", direction="l", linebreak="al", shcode=0x0064, specials={ "char", 0x0064, 0x0327 }, uccode=0x1E10, unicodeslot=0x1E11, }, [0x1E12]={ adobename="Dcircumflexbelow", category="lu", description="LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW", direction="l", lccode=0x1E13, linebreak="al", shcode=0x0044, specials={ "char", 0x0044, 0x032D }, unicodeslot=0x1E12, }, [0x1E13]={ adobename="dcircumflexbelow", category="ll", description="LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW", direction="l", linebreak="al", shcode=0x0064, specials={ "char", 0x0064, 0x032D }, uccode=0x1E12, unicodeslot=0x1E13, }, [0x1E14]={ adobename="Emacrongrave", category="lu", description="LATIN CAPITAL LETTER E WITH MACRON AND GRAVE", direction="l", lccode=0x1E15, linebreak="al", shcode=0x0045, specials={ "char", 0x0112, 0x0300 }, unicodeslot=0x1E14, }, [0x1E15]={ adobename="emacrongrave", category="ll", description="LATIN SMALL LETTER E WITH MACRON AND GRAVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0113, 0x0300 }, uccode=0x1E14, unicodeslot=0x1E15, }, [0x1E16]={ adobename="Emacronacute", category="lu", description="LATIN CAPITAL LETTER E WITH MACRON AND ACUTE", direction="l", lccode=0x1E17, linebreak="al", shcode=0x0045, specials={ "char", 0x0112, 0x0301 }, unicodeslot=0x1E16, }, [0x1E17]={ adobename="emacronacute", category="ll", description="LATIN SMALL LETTER E WITH MACRON AND ACUTE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0113, 0x0301 }, uccode=0x1E16, unicodeslot=0x1E17, }, [0x1E18]={ adobename="Ecircumflexbelow", category="lu", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW", direction="l", lccode=0x1E19, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x032D }, unicodeslot=0x1E18, }, [0x1E19]={ adobename="ecircumflexbelow", category="ll", description="LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x032D }, uccode=0x1E18, unicodeslot=0x1E19, }, [0x1E1A]={ adobename="Etildebelow", category="lu", description="LATIN CAPITAL LETTER E WITH TILDE BELOW", direction="l", lccode=0x1E1B, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0330 }, unicodeslot=0x1E1A, }, [0x1E1B]={ adobename="etildebelow", category="ll", description="LATIN SMALL LETTER E WITH TILDE BELOW", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0330 }, uccode=0x1E1A, unicodeslot=0x1E1B, }, [0x1E1C]={ adobename="Ecedillabreve", category="lu", description="LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE", direction="l", lccode=0x1E1D, linebreak="al", shcode=0x0045, specials={ "char", 0x0228, 0x0306 }, unicodeslot=0x1E1C, }, [0x1E1D]={ adobename="ecedillabreve", category="ll", description="LATIN SMALL LETTER E WITH CEDILLA AND BREVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0229, 0x0306 }, uccode=0x1E1C, unicodeslot=0x1E1D, }, [0x1E1E]={ adobename="Fdotaccent", category="lu", description="LATIN CAPITAL LETTER F WITH DOT ABOVE", direction="l", lccode=0x1E1F, linebreak="al", shcode=0x0046, specials={ "char", 0x0046, 0x0307 }, unicodeslot=0x1E1E, }, [0x1E1F]={ adobename="fdotaccent", category="ll", description="LATIN SMALL LETTER F WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0066, specials={ "char", 0x0066, 0x0307 }, uccode=0x1E1E, unicodeslot=0x1E1F, }, [0x1E20]={ adobename="Gmacron", category="lu", description="LATIN CAPITAL LETTER G WITH MACRON", direction="l", lccode=0x1E21, linebreak="al", shcode=0x0047, specials={ "char", 0x0047, 0x0304 }, unicodeslot=0x1E20, }, [0x1E21]={ adobename="gmacron", category="ll", description="LATIN SMALL LETTER G WITH MACRON", direction="l", linebreak="al", shcode=0x0067, specials={ "char", 0x0067, 0x0304 }, uccode=0x1E20, unicodeslot=0x1E21, }, [0x1E22]={ adobename="Hdotaccent", category="lu", description="LATIN CAPITAL LETTER H WITH DOT ABOVE", direction="l", lccode=0x1E23, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x0307 }, unicodeslot=0x1E22, }, [0x1E23]={ adobename="hdotaccent", category="ll", description="LATIN SMALL LETTER H WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x0307 }, uccode=0x1E22, unicodeslot=0x1E23, }, [0x1E24]={ adobename="Hdotbelow", category="lu", description="LATIN CAPITAL LETTER H WITH DOT BELOW", direction="l", lccode=0x1E25, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x0323 }, unicodeslot=0x1E24, }, [0x1E25]={ adobename="hdotbelow", category="ll", description="LATIN SMALL LETTER H WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x0323 }, uccode=0x1E24, unicodeslot=0x1E25, }, [0x1E26]={ adobename="Hdieresis", category="lu", description="LATIN CAPITAL LETTER H WITH DIAERESIS", direction="l", lccode=0x1E27, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x0308 }, unicodeslot=0x1E26, }, [0x1E27]={ adobename="hdieresis", category="ll", description="LATIN SMALL LETTER H WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x0308 }, uccode=0x1E26, unicodeslot=0x1E27, }, [0x1E28]={ adobename="Hcedilla", category="lu", description="LATIN CAPITAL LETTER H WITH CEDILLA", direction="l", lccode=0x1E29, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x0327 }, unicodeslot=0x1E28, }, [0x1E29]={ adobename="hcedilla", category="ll", description="LATIN SMALL LETTER H WITH CEDILLA", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x0327 }, uccode=0x1E28, unicodeslot=0x1E29, }, [0x1E2A]={ adobename="Hbrevebelow", category="lu", description="LATIN CAPITAL LETTER H WITH BREVE BELOW", direction="l", lccode=0x1E2B, linebreak="al", shcode=0x0048, specials={ "char", 0x0048, 0x032E }, unicodeslot=0x1E2A, }, [0x1E2B]={ adobename="hbrevebelow", category="ll", description="LATIN SMALL LETTER H WITH BREVE BELOW", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x032E }, uccode=0x1E2A, unicodeslot=0x1E2B, }, [0x1E2C]={ adobename="Itildebelow", category="lu", description="LATIN CAPITAL LETTER I WITH TILDE BELOW", direction="l", lccode=0x1E2D, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0330 }, unicodeslot=0x1E2C, }, [0x1E2D]={ adobename="itildebelow", category="ll", description="LATIN SMALL LETTER I WITH TILDE BELOW", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0330 }, uccode=0x1E2C, unicodeslot=0x1E2D, }, [0x1E2E]={ adobename="Idieresisacute", category="lu", description="LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE", direction="l", lccode=0x1E2F, linebreak="al", shcode=0x0049, specials={ "char", 0x00CF, 0x0301 }, unicodeslot=0x1E2E, }, [0x1E2F]={ adobename="idieresisacute", category="ll", description="LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x00EF, 0x0301 }, uccode=0x1E2E, unicodeslot=0x1E2F, }, [0x1E30]={ adobename="Kacute", category="lu", description="LATIN CAPITAL LETTER K WITH ACUTE", direction="l", lccode=0x1E31, linebreak="al", shcode=0x004B, specials={ "char", 0x004B, 0x0301 }, unicodeslot=0x1E30, }, [0x1E31]={ adobename="kacute", category="ll", description="LATIN SMALL LETTER K WITH ACUTE", direction="l", linebreak="al", shcode=0x006B, specials={ "char", 0x006B, 0x0301 }, uccode=0x1E30, unicodeslot=0x1E31, }, [0x1E32]={ adobename="Kdotbelow", category="lu", description="LATIN CAPITAL LETTER K WITH DOT BELOW", direction="l", lccode=0x1E33, linebreak="al", shcode=0x004B, specials={ "char", 0x004B, 0x0323 }, unicodeslot=0x1E32, }, [0x1E33]={ adobename="kdotbelow", category="ll", description="LATIN SMALL LETTER K WITH DOT BELOW", direction="l", linebreak="al", shcode=0x006B, specials={ "char", 0x006B, 0x0323 }, uccode=0x1E32, unicodeslot=0x1E33, }, [0x1E34]={ adobename="Klinebelow", category="lu", description="LATIN CAPITAL LETTER K WITH LINE BELOW", direction="l", lccode=0x1E35, linebreak="al", shcode=0x004B, specials={ "char", 0x004B, 0x0331 }, unicodeslot=0x1E34, }, [0x1E35]={ adobename="klinebelow", category="ll", description="LATIN SMALL LETTER K WITH LINE BELOW", direction="l", linebreak="al", shcode=0x006B, specials={ "char", 0x006B, 0x0331 }, uccode=0x1E34, unicodeslot=0x1E35, }, [0x1E36]={ adobename="Ldotbelow", category="lu", description="LATIN CAPITAL LETTER L WITH DOT BELOW", direction="l", lccode=0x1E37, linebreak="al", shcode=0x004C, specials={ "char", 0x004C, 0x0323 }, unicodeslot=0x1E36, }, [0x1E37]={ adobename="ldotbelow", category="ll", description="LATIN SMALL LETTER L WITH DOT BELOW", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x006C, 0x0323 }, uccode=0x1E36, unicodeslot=0x1E37, }, [0x1E38]={ adobename="Ldotbelowmacron", category="lu", description="LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON", direction="l", lccode=0x1E39, linebreak="al", shcode=0x004C, specials={ "char", 0x1E36, 0x0304 }, unicodeslot=0x1E38, }, [0x1E39]={ adobename="ldotbelowmacron", category="ll", description="LATIN SMALL LETTER L WITH DOT BELOW AND MACRON", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x1E37, 0x0304 }, uccode=0x1E38, unicodeslot=0x1E39, }, [0x1E3A]={ adobename="Llinebelow", category="lu", description="LATIN CAPITAL LETTER L WITH LINE BELOW", direction="l", lccode=0x1E3B, linebreak="al", shcode=0x004C, specials={ "char", 0x004C, 0x0331 }, unicodeslot=0x1E3A, }, [0x1E3B]={ adobename="llinebelow", category="ll", description="LATIN SMALL LETTER L WITH LINE BELOW", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x006C, 0x0331 }, uccode=0x1E3A, unicodeslot=0x1E3B, }, [0x1E3C]={ adobename="Lcircumflexbelow", category="lu", description="LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW", direction="l", lccode=0x1E3D, linebreak="al", shcode=0x004C, specials={ "char", 0x004C, 0x032D }, unicodeslot=0x1E3C, }, [0x1E3D]={ adobename="lcircumflexbelow", category="ll", description="LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW", direction="l", linebreak="al", shcode=0x006C, specials={ "char", 0x006C, 0x032D }, uccode=0x1E3C, unicodeslot=0x1E3D, }, [0x1E3E]={ adobename="Macute", category="lu", description="LATIN CAPITAL LETTER M WITH ACUTE", direction="l", lccode=0x1E3F, linebreak="al", shcode=0x004D, specials={ "char", 0x004D, 0x0301 }, unicodeslot=0x1E3E, }, [0x1E3F]={ adobename="macute", category="ll", description="LATIN SMALL LETTER M WITH ACUTE", direction="l", linebreak="al", shcode=0x006D, specials={ "char", 0x006D, 0x0301 }, uccode=0x1E3E, unicodeslot=0x1E3F, }, [0x1E40]={ adobename="Mdotaccent", category="lu", description="LATIN CAPITAL LETTER M WITH DOT ABOVE", direction="l", lccode=0x1E41, linebreak="al", shcode=0x004D, specials={ "char", 0x004D, 0x0307 }, unicodeslot=0x1E40, }, [0x1E41]={ adobename="mdotaccent", category="ll", description="LATIN SMALL LETTER M WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x006D, specials={ "char", 0x006D, 0x0307 }, uccode=0x1E40, unicodeslot=0x1E41, }, [0x1E42]={ adobename="Mdotbelow", category="lu", description="LATIN CAPITAL LETTER M WITH DOT BELOW", direction="l", lccode=0x1E43, linebreak="al", shcode=0x004D, specials={ "char", 0x004D, 0x0323 }, unicodeslot=0x1E42, }, [0x1E43]={ adobename="mdotbelow", category="ll", description="LATIN SMALL LETTER M WITH DOT BELOW", direction="l", linebreak="al", shcode=0x006D, specials={ "char", 0x006D, 0x0323 }, uccode=0x1E42, unicodeslot=0x1E43, }, [0x1E44]={ adobename="Ndotaccent", category="lu", description="LATIN CAPITAL LETTER N WITH DOT ABOVE", direction="l", lccode=0x1E45, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0307 }, unicodeslot=0x1E44, }, [0x1E45]={ adobename="ndotaccent", category="ll", description="LATIN SMALL LETTER N WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0307 }, uccode=0x1E44, unicodeslot=0x1E45, }, [0x1E46]={ adobename="Ndotbelow", category="lu", description="LATIN CAPITAL LETTER N WITH DOT BELOW", direction="l", lccode=0x1E47, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0323 }, unicodeslot=0x1E46, }, [0x1E47]={ adobename="ndotbelow", category="ll", description="LATIN SMALL LETTER N WITH DOT BELOW", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0323 }, uccode=0x1E46, unicodeslot=0x1E47, }, [0x1E48]={ adobename="Nlinebelow", category="lu", description="LATIN CAPITAL LETTER N WITH LINE BELOW", direction="l", lccode=0x1E49, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x0331 }, unicodeslot=0x1E48, }, [0x1E49]={ adobename="nlinebelow", category="ll", description="LATIN SMALL LETTER N WITH LINE BELOW", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x0331 }, uccode=0x1E48, unicodeslot=0x1E49, }, [0x1E4A]={ adobename="Ncircumflexbelow", category="lu", description="LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW", direction="l", lccode=0x1E4B, linebreak="al", shcode=0x004E, specials={ "char", 0x004E, 0x032D }, unicodeslot=0x1E4A, }, [0x1E4B]={ adobename="ncircumflexbelow", category="ll", description="LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW", direction="l", linebreak="al", shcode=0x006E, specials={ "char", 0x006E, 0x032D }, uccode=0x1E4A, unicodeslot=0x1E4B, }, [0x1E4C]={ adobename="Otildeacute", category="lu", description="LATIN CAPITAL LETTER O WITH TILDE AND ACUTE", direction="l", lccode=0x1E4D, linebreak="al", shcode=0x004F, specials={ "char", 0x00D5, 0x0301 }, unicodeslot=0x1E4C, }, [0x1E4D]={ adobename="otildeacute", category="ll", description="LATIN SMALL LETTER O WITH TILDE AND ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F5, 0x0301 }, uccode=0x1E4C, unicodeslot=0x1E4D, }, [0x1E4E]={ adobename="Otildedieresis", category="lu", description="LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS", direction="l", lccode=0x1E4F, linebreak="al", shcode=0x004F, specials={ "char", 0x00D5, 0x0308 }, unicodeslot=0x1E4E, }, [0x1E4F]={ adobename="otildedieresis", category="ll", description="LATIN SMALL LETTER O WITH TILDE AND DIAERESIS", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F5, 0x0308 }, uccode=0x1E4E, unicodeslot=0x1E4F, }, [0x1E50]={ adobename="Omacrongrave", category="lu", description="LATIN CAPITAL LETTER O WITH MACRON AND GRAVE", direction="l", lccode=0x1E51, linebreak="al", shcode=0x004F, specials={ "char", 0x014C, 0x0300 }, unicodeslot=0x1E50, }, [0x1E51]={ adobename="omacrongrave", category="ll", description="LATIN SMALL LETTER O WITH MACRON AND GRAVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x014D, 0x0300 }, uccode=0x1E50, unicodeslot=0x1E51, }, [0x1E52]={ adobename="Omacronacute", category="lu", description="LATIN CAPITAL LETTER O WITH MACRON AND ACUTE", direction="l", lccode=0x1E53, linebreak="al", shcode=0x004F, specials={ "char", 0x014C, 0x0301 }, unicodeslot=0x1E52, }, [0x1E53]={ adobename="omacronacute", category="ll", description="LATIN SMALL LETTER O WITH MACRON AND ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x014D, 0x0301 }, uccode=0x1E52, unicodeslot=0x1E53, }, [0x1E54]={ adobename="Pacute", category="lu", description="LATIN CAPITAL LETTER P WITH ACUTE", direction="l", lccode=0x1E55, linebreak="al", shcode=0x0050, specials={ "char", 0x0050, 0x0301 }, unicodeslot=0x1E54, }, [0x1E55]={ adobename="pacute", category="ll", description="LATIN SMALL LETTER P WITH ACUTE", direction="l", linebreak="al", shcode=0x0070, specials={ "char", 0x0070, 0x0301 }, uccode=0x1E54, unicodeslot=0x1E55, }, [0x1E56]={ adobename="Pdotaccent", category="lu", description="LATIN CAPITAL LETTER P WITH DOT ABOVE", direction="l", lccode=0x1E57, linebreak="al", shcode=0x0050, specials={ "char", 0x0050, 0x0307 }, unicodeslot=0x1E56, }, [0x1E57]={ adobename="pdotaccent", category="ll", description="LATIN SMALL LETTER P WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0070, specials={ "char", 0x0070, 0x0307 }, uccode=0x1E56, unicodeslot=0x1E57, }, [0x1E58]={ adobename="Rdotaccent", category="lu", description="LATIN CAPITAL LETTER R WITH DOT ABOVE", direction="l", lccode=0x1E59, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x0307 }, unicodeslot=0x1E58, }, [0x1E59]={ adobename="rdotaccent", category="ll", description="LATIN SMALL LETTER R WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x0307 }, uccode=0x1E58, unicodeslot=0x1E59, }, [0x1E5A]={ adobename="Rdotbelow", category="lu", description="LATIN CAPITAL LETTER R WITH DOT BELOW", direction="l", lccode=0x1E5B, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x0323 }, unicodeslot=0x1E5A, }, [0x1E5B]={ adobename="rdotbelow", category="ll", description="LATIN SMALL LETTER R WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x0323 }, uccode=0x1E5A, unicodeslot=0x1E5B, }, [0x1E5C]={ adobename="Rdotbelowmacron", category="lu", description="LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON", direction="l", lccode=0x1E5D, linebreak="al", shcode=0x0052, specials={ "char", 0x1E5A, 0x0304 }, unicodeslot=0x1E5C, }, [0x1E5D]={ adobename="rdotbelowmacron", category="ll", description="LATIN SMALL LETTER R WITH DOT BELOW AND MACRON", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x1E5B, 0x0304 }, uccode=0x1E5C, unicodeslot=0x1E5D, }, [0x1E5E]={ adobename="Rlinebelow", category="lu", description="LATIN CAPITAL LETTER R WITH LINE BELOW", direction="l", lccode=0x1E5F, linebreak="al", shcode=0x0052, specials={ "char", 0x0052, 0x0331 }, unicodeslot=0x1E5E, }, [0x1E5F]={ adobename="rlinebelow", category="ll", description="LATIN SMALL LETTER R WITH LINE BELOW", direction="l", linebreak="al", shcode=0x0072, specials={ "char", 0x0072, 0x0331 }, uccode=0x1E5E, unicodeslot=0x1E5F, }, [0x1E60]={ adobename="Sdotaccent", category="lu", description="LATIN CAPITAL LETTER S WITH DOT ABOVE", direction="l", lccode=0x1E61, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x0307 }, unicodeslot=0x1E60, }, [0x1E61]={ adobename="sdotaccent", category="ll", description="LATIN SMALL LETTER S WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x0307 }, uccode=0x1E60, unicodeslot=0x1E61, }, [0x1E62]={ adobename="Sdotbelow", category="lu", description="LATIN CAPITAL LETTER S WITH DOT BELOW", direction="l", lccode=0x1E63, linebreak="al", shcode=0x0053, specials={ "char", 0x0053, 0x0323 }, unicodeslot=0x1E62, }, [0x1E63]={ adobename="sdotbelow", category="ll", description="LATIN SMALL LETTER S WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0073, 0x0323 }, uccode=0x1E62, unicodeslot=0x1E63, }, [0x1E64]={ adobename="Sacutedotaccent", category="lu", description="LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE", direction="l", lccode=0x1E65, linebreak="al", shcode=0x0053, specials={ "char", 0x015A, 0x0307 }, unicodeslot=0x1E64, }, [0x1E65]={ adobename="sacutedotaccent", category="ll", description="LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x015B, 0x0307 }, uccode=0x1E64, unicodeslot=0x1E65, }, [0x1E66]={ adobename="Scarondotaccent", category="lu", description="LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE", direction="l", lccode=0x1E67, linebreak="al", shcode=0x0053, specials={ "char", 0x0160, 0x0307 }, unicodeslot=0x1E66, }, [0x1E67]={ adobename="scarondotaccent", category="ll", description="LATIN SMALL LETTER S WITH CARON AND DOT ABOVE", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x0161, 0x0307 }, uccode=0x1E66, unicodeslot=0x1E67, }, [0x1E68]={ adobename="Sdotbelowdotaccent", category="lu", description="LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE", direction="l", lccode=0x1E69, linebreak="al", shcode=0x0053, specials={ "char", 0x1E62, 0x0307 }, unicodeslot=0x1E68, }, [0x1E69]={ adobename="sdotbelowdotaccent", category="ll", description="LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE", direction="l", linebreak="al", shcode=0x0073, specials={ "char", 0x1E63, 0x0307 }, uccode=0x1E68, unicodeslot=0x1E69, }, [0x1E6A]={ adobename="Tdotaccent", category="lu", description="LATIN CAPITAL LETTER T WITH DOT ABOVE", direction="l", lccode=0x1E6B, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x0307 }, unicodeslot=0x1E6A, }, [0x1E6B]={ adobename="tdotaccent", category="ll", description="LATIN SMALL LETTER T WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x0307 }, uccode=0x1E6A, unicodeslot=0x1E6B, }, [0x1E6C]={ adobename="Tdotbelow", category="lu", description="LATIN CAPITAL LETTER T WITH DOT BELOW", direction="l", lccode=0x1E6D, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x0323 }, unicodeslot=0x1E6C, }, [0x1E6D]={ adobename="tdotbelow", category="ll", description="LATIN SMALL LETTER T WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x0323 }, uccode=0x1E6C, unicodeslot=0x1E6D, }, [0x1E6E]={ adobename="Tlinebelow", category="lu", description="LATIN CAPITAL LETTER T WITH LINE BELOW", direction="l", lccode=0x1E6F, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x0331 }, unicodeslot=0x1E6E, }, [0x1E6F]={ adobename="tlinebelow", category="ll", description="LATIN SMALL LETTER T WITH LINE BELOW", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x0331 }, uccode=0x1E6E, unicodeslot=0x1E6F, }, [0x1E70]={ adobename="Tcircumflexbelow", category="lu", description="LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW", direction="l", lccode=0x1E71, linebreak="al", shcode=0x0054, specials={ "char", 0x0054, 0x032D }, unicodeslot=0x1E70, }, [0x1E71]={ adobename="tcircumflexbelow", category="ll", description="LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x032D }, uccode=0x1E70, unicodeslot=0x1E71, }, [0x1E72]={ adobename="Udieresisbelow", category="lu", description="LATIN CAPITAL LETTER U WITH DIAERESIS BELOW", direction="l", lccode=0x1E73, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0324 }, unicodeslot=0x1E72, }, [0x1E73]={ adobename="udieresisbelow", category="ll", description="LATIN SMALL LETTER U WITH DIAERESIS BELOW", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0324 }, uccode=0x1E72, unicodeslot=0x1E73, }, [0x1E74]={ adobename="Utildebelow", category="lu", description="LATIN CAPITAL LETTER U WITH TILDE BELOW", direction="l", lccode=0x1E75, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0330 }, unicodeslot=0x1E74, }, [0x1E75]={ adobename="utildebelow", category="ll", description="LATIN SMALL LETTER U WITH TILDE BELOW", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0330 }, uccode=0x1E74, unicodeslot=0x1E75, }, [0x1E76]={ adobename="Ucircumflexbelow", category="lu", description="LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW", direction="l", lccode=0x1E77, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x032D }, unicodeslot=0x1E76, }, [0x1E77]={ adobename="ucircumflexbelow", category="ll", description="LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x032D }, uccode=0x1E76, unicodeslot=0x1E77, }, [0x1E78]={ adobename="Utildeacute", category="lu", description="LATIN CAPITAL LETTER U WITH TILDE AND ACUTE", direction="l", lccode=0x1E79, linebreak="al", shcode=0x0055, specials={ "char", 0x0168, 0x0301 }, unicodeslot=0x1E78, }, [0x1E79]={ adobename="utildeacute", category="ll", description="LATIN SMALL LETTER U WITH TILDE AND ACUTE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0169, 0x0301 }, uccode=0x1E78, unicodeslot=0x1E79, }, [0x1E7A]={ adobename="Umacrondieresis", category="lu", description="LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS", direction="l", lccode=0x1E7B, linebreak="al", shcode=0x0055, specials={ "char", 0x016A, 0x0308 }, unicodeslot=0x1E7A, }, [0x1E7B]={ adobename="umacrondieresis", category="ll", description="LATIN SMALL LETTER U WITH MACRON AND DIAERESIS", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x016B, 0x0308 }, uccode=0x1E7A, unicodeslot=0x1E7B, }, [0x1E7C]={ adobename="Vtilde", category="lu", description="LATIN CAPITAL LETTER V WITH TILDE", direction="l", lccode=0x1E7D, linebreak="al", shcode=0x0056, specials={ "char", 0x0056, 0x0303 }, unicodeslot=0x1E7C, }, [0x1E7D]={ adobename="vtilde", category="ll", description="LATIN SMALL LETTER V WITH TILDE", direction="l", linebreak="al", shcode=0x0076, specials={ "char", 0x0076, 0x0303 }, uccode=0x1E7C, unicodeslot=0x1E7D, }, [0x1E7E]={ adobename="Vdotbelow", category="lu", description="LATIN CAPITAL LETTER V WITH DOT BELOW", direction="l", lccode=0x1E7F, linebreak="al", shcode=0x0056, specials={ "char", 0x0056, 0x0323 }, unicodeslot=0x1E7E, }, [0x1E7F]={ adobename="vdotbelow", category="ll", description="LATIN SMALL LETTER V WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0076, specials={ "char", 0x0076, 0x0323 }, uccode=0x1E7E, unicodeslot=0x1E7F, }, [0x1E80]={ adobename="Wgrave", category="lu", description="LATIN CAPITAL LETTER W WITH GRAVE", direction="l", lccode=0x1E81, linebreak="al", shcode=0x0057, specials={ "char", 0x0057, 0x0300 }, unicodeslot=0x1E80, }, [0x1E81]={ adobename="wgrave", category="ll", description="LATIN SMALL LETTER W WITH GRAVE", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x0300 }, uccode=0x1E80, unicodeslot=0x1E81, }, [0x1E82]={ adobename="Wacute", category="lu", description="LATIN CAPITAL LETTER W WITH ACUTE", direction="l", lccode=0x1E83, linebreak="al", shcode=0x0057, specials={ "char", 0x0057, 0x0301 }, unicodeslot=0x1E82, }, [0x1E83]={ adobename="wacute", category="ll", description="LATIN SMALL LETTER W WITH ACUTE", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x0301 }, uccode=0x1E82, unicodeslot=0x1E83, }, [0x1E84]={ adobename="Wdieresis", category="lu", description="LATIN CAPITAL LETTER W WITH DIAERESIS", direction="l", lccode=0x1E85, linebreak="al", shcode=0x0057, specials={ "char", 0x0057, 0x0308 }, unicodeslot=0x1E84, }, [0x1E85]={ adobename="wdieresis", category="ll", description="LATIN SMALL LETTER W WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x0308 }, uccode=0x1E84, unicodeslot=0x1E85, }, [0x1E86]={ adobename="Wdotaccent", category="lu", description="LATIN CAPITAL LETTER W WITH DOT ABOVE", direction="l", lccode=0x1E87, linebreak="al", shcode=0x0057, specials={ "char", 0x0057, 0x0307 }, unicodeslot=0x1E86, }, [0x1E87]={ adobename="wdotaccent", category="ll", description="LATIN SMALL LETTER W WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x0307 }, uccode=0x1E86, unicodeslot=0x1E87, }, [0x1E88]={ adobename="Wdotbelow", category="lu", description="LATIN CAPITAL LETTER W WITH DOT BELOW", direction="l", lccode=0x1E89, linebreak="al", shcode=0x0057, specials={ "char", 0x0057, 0x0323 }, unicodeslot=0x1E88, }, [0x1E89]={ adobename="wdotbelow", category="ll", description="LATIN SMALL LETTER W WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x0323 }, uccode=0x1E88, unicodeslot=0x1E89, }, [0x1E8A]={ adobename="Xdotaccent", category="lu", description="LATIN CAPITAL LETTER X WITH DOT ABOVE", direction="l", lccode=0x1E8B, linebreak="al", shcode=0x0058, specials={ "char", 0x0058, 0x0307 }, unicodeslot=0x1E8A, }, [0x1E8B]={ adobename="xdotaccent", category="ll", description="LATIN SMALL LETTER X WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0078, specials={ "char", 0x0078, 0x0307 }, uccode=0x1E8A, unicodeslot=0x1E8B, }, [0x1E8C]={ adobename="Xdieresis", category="lu", description="LATIN CAPITAL LETTER X WITH DIAERESIS", direction="l", lccode=0x1E8D, linebreak="al", shcode=0x0058, specials={ "char", 0x0058, 0x0308 }, unicodeslot=0x1E8C, }, [0x1E8D]={ adobename="xdieresis", category="ll", description="LATIN SMALL LETTER X WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0078, specials={ "char", 0x0078, 0x0308 }, uccode=0x1E8C, unicodeslot=0x1E8D, }, [0x1E8E]={ adobename="Ydotaccent", category="lu", description="LATIN CAPITAL LETTER Y WITH DOT ABOVE", direction="l", lccode=0x1E8F, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0307 }, unicodeslot=0x1E8E, }, [0x1E8F]={ adobename="ydotaccent", category="ll", description="LATIN SMALL LETTER Y WITH DOT ABOVE", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0307 }, uccode=0x1E8E, unicodeslot=0x1E8F, }, [0x1E90]={ adobename="Zcircumflex", category="lu", description="LATIN CAPITAL LETTER Z WITH CIRCUMFLEX", direction="l", lccode=0x1E91, linebreak="al", shcode=0x005A, specials={ "char", 0x005A, 0x0302 }, unicodeslot=0x1E90, }, [0x1E91]={ adobename="zcircumflex", category="ll", description="LATIN SMALL LETTER Z WITH CIRCUMFLEX", direction="l", linebreak="al", shcode=0x007A, specials={ "char", 0x007A, 0x0302 }, uccode=0x1E90, unicodeslot=0x1E91, }, [0x1E92]={ adobename="Zdotbelow", category="lu", description="LATIN CAPITAL LETTER Z WITH DOT BELOW", direction="l", lccode=0x1E93, linebreak="al", shcode=0x005A, specials={ "char", 0x005A, 0x0323 }, unicodeslot=0x1E92, }, [0x1E93]={ adobename="zdotbelow", category="ll", description="LATIN SMALL LETTER Z WITH DOT BELOW", direction="l", linebreak="al", shcode=0x007A, specials={ "char", 0x007A, 0x0323 }, uccode=0x1E92, unicodeslot=0x1E93, }, [0x1E94]={ adobename="Zlinebelow", category="lu", description="LATIN CAPITAL LETTER Z WITH LINE BELOW", direction="l", lccode=0x1E95, linebreak="al", shcode=0x005A, specials={ "char", 0x005A, 0x0331 }, unicodeslot=0x1E94, }, [0x1E95]={ adobename="zlinebelow", category="ll", description="LATIN SMALL LETTER Z WITH LINE BELOW", direction="l", linebreak="al", shcode=0x007A, specials={ "char", 0x007A, 0x0331 }, uccode=0x1E94, unicodeslot=0x1E95, }, [0x1E96]={ adobename="hlinebelow", category="ll", description="LATIN SMALL LETTER H WITH LINE BELOW", direction="l", linebreak="al", shcode=0x0068, specials={ "char", 0x0068, 0x0331 }, unicodeslot=0x1E96, }, [0x1E97]={ adobename="tdieresis", category="ll", description="LATIN SMALL LETTER T WITH DIAERESIS", direction="l", linebreak="al", shcode=0x0074, specials={ "char", 0x0074, 0x0308 }, unicodeslot=0x1E97, }, [0x1E98]={ adobename="wring", category="ll", description="LATIN SMALL LETTER W WITH RING ABOVE", direction="l", linebreak="al", shcode=0x0077, specials={ "char", 0x0077, 0x030A }, unicodeslot=0x1E98, }, [0x1E99]={ adobename="yring", category="ll", description="LATIN SMALL LETTER Y WITH RING ABOVE", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x030A }, unicodeslot=0x1E99, }, [0x1E9A]={ adobename="arighthalfring", category="ll", description="LATIN SMALL LETTER A WITH RIGHT HALF RING", direction="l", linebreak="al", shcode=0x0061, specials={ "compat", 0x0061, 0x02BE }, unicodeslot=0x1E9A, }, [0x1E9B]={ adobename="slongdotaccent", category="ll", description="LATIN SMALL LETTER LONG S WITH DOT ABOVE", direction="l", linebreak="al", specials={ "char", 0x017F, 0x0307 }, uccode=0x1E60, unicodeslot=0x1E9B, }, [0x1E9C]={ category="ll", description="LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0x1E9C, }, [0x1E9D]={ category="ll", description="LATIN SMALL LETTER LONG S WITH HIGH STROKE", direction="l", linebreak="al", unicodeslot=0x1E9D, }, [0x1E9E]={ category="lu", description="LATIN CAPITAL LETTER SHARP S", direction="l", linebreak="al", unicodeslot=0x1E9E, }, [0x1E9F]={ category="ll", description="LATIN SMALL LETTER DELTA", direction="l", linebreak="al", unicodeslot=0x1E9F, }, [0x1EA0]={ adobename="Adotbelow", category="lu", contextname="Adotbelow", description="LATIN CAPITAL LETTER A WITH DOT BELOW", direction="l", lccode=0x1EA1, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0323 }, unicodeslot=0x1EA0, }, [0x1EA1]={ adobename="adotbelow", category="ll", contextname="adotbelow", description="LATIN SMALL LETTER A WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0323 }, uccode=0x1EA0, unicodeslot=0x1EA1, }, [0x1EA2]={ adobename="Ahookabove", category="lu", contextname="Ahook", description="LATIN CAPITAL LETTER A WITH HOOK ABOVE", direction="l", lccode=0x1EA3, linebreak="al", shcode=0x0041, specials={ "char", 0x0041, 0x0309 }, unicodeslot=0x1EA2, }, [0x1EA3]={ adobename="ahookabove", category="ll", contextname="ahook", description="LATIN SMALL LETTER A WITH HOOK ABOVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0061, 0x0309 }, uccode=0x1EA2, unicodeslot=0x1EA3, }, [0x1EA4]={ adobename="Acircumflexacute", category="lu", contextname="Acircumflexacute", description="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE", direction="l", lccode=0x1EA5, linebreak="al", shcode=0x0041, specials={ "char", 0x00C2, 0x0301 }, unicodeslot=0x1EA4, }, [0x1EA5]={ adobename="acircumflexacute", category="ll", contextname="acircumflexacute", description="LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x00E2, 0x0301 }, uccode=0x1EA4, unicodeslot=0x1EA5, }, [0x1EA6]={ adobename="Acircumflexgrave", category="lu", contextname="Acircumflexgrave", description="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE", direction="l", lccode=0x1EA7, linebreak="al", shcode=0x0041, specials={ "char", 0x00C2, 0x0300 }, unicodeslot=0x1EA6, }, [0x1EA7]={ adobename="acircumflexgrave", category="ll", contextname="acircumflexgrave", description="LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x00E2, 0x0300 }, uccode=0x1EA6, unicodeslot=0x1EA7, }, [0x1EA8]={ adobename="Acircumflexhookabove", category="lu", contextname="Acircumflexhook", description="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE", direction="l", lccode=0x1EA9, linebreak="al", shcode=0x0041, specials={ "char", 0x00C2, 0x0309 }, unicodeslot=0x1EA8, }, [0x1EA9]={ adobename="acircumflexhookabove", category="ll", contextname="acircumflexhook", description="LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x00E2, 0x0309 }, uccode=0x1EA8, unicodeslot=0x1EA9, }, [0x1EAA]={ adobename="Acircumflextilde", category="lu", contextname="Acircumflextilde", description="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE", direction="l", lccode=0x1EAB, linebreak="al", shcode=0x0041, specials={ "char", 0x00C2, 0x0303 }, unicodeslot=0x1EAA, }, [0x1EAB]={ adobename="acircumflextilde", category="ll", contextname="acircumflextilde", description="LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x00E2, 0x0303 }, uccode=0x1EAA, unicodeslot=0x1EAB, }, [0x1EAC]={ adobename="Acircumflexdotbelow", category="lu", contextname="Acircumflexdotbelow", description="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW", direction="l", lccode=0x1EAD, linebreak="al", shcode=0x0041, specials={ "char", 0x1EA0, 0x0302 }, unicodeslot=0x1EAC, }, [0x1EAD]={ adobename="acircumflexdotbelow", category="ll", contextname="acircumflexdotbelow", description="LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x1EA1, 0x0302 }, uccode=0x1EAC, unicodeslot=0x1EAD, }, [0x1EAE]={ adobename="Abreveacute", category="lu", contextname="Abreveacute", description="LATIN CAPITAL LETTER A WITH BREVE AND ACUTE", direction="l", lccode=0x1EAF, linebreak="al", shcode=0x0041, specials={ "char", 0x0102, 0x0301 }, unicodeslot=0x1EAE, }, [0x1EAF]={ adobename="abreveacute", category="ll", contextname="abreveacute", description="LATIN SMALL LETTER A WITH BREVE AND ACUTE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0103, 0x0301 }, uccode=0x1EAE, unicodeslot=0x1EAF, }, [0x1EB0]={ adobename="Abrevegrave", category="lu", contextname="Abrevegrave", description="LATIN CAPITAL LETTER A WITH BREVE AND GRAVE", direction="l", lccode=0x1EB1, linebreak="al", shcode=0x0041, specials={ "char", 0x0102, 0x0300 }, unicodeslot=0x1EB0, }, [0x1EB1]={ adobename="abrevegrave", category="ll", contextname="abrevegrave", description="LATIN SMALL LETTER A WITH BREVE AND GRAVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0103, 0x0300 }, uccode=0x1EB0, unicodeslot=0x1EB1, }, [0x1EB2]={ adobename="Abrevehookabove", category="lu", contextname="Abrevehook", description="LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE", direction="l", lccode=0x1EB3, linebreak="al", shcode=0x0041, specials={ "char", 0x0102, 0x0309 }, unicodeslot=0x1EB2, }, [0x1EB3]={ adobename="abrevehookabove", category="ll", contextname="abrevehook", description="LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0103, 0x0309 }, uccode=0x1EB2, unicodeslot=0x1EB3, }, [0x1EB4]={ adobename="Abrevetilde", category="lu", contextname="Abrevetilde", description="LATIN CAPITAL LETTER A WITH BREVE AND TILDE", direction="l", lccode=0x1EB5, linebreak="al", shcode=0x0041, specials={ "char", 0x0102, 0x0303 }, unicodeslot=0x1EB4, }, [0x1EB5]={ adobename="abrevetilde", category="ll", contextname="abrevetilde", description="LATIN SMALL LETTER A WITH BREVE AND TILDE", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x0103, 0x0303 }, uccode=0x1EB4, unicodeslot=0x1EB5, }, [0x1EB6]={ adobename="Abrevedotbelow", category="lu", contextname="Abrevedotbelow", description="LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW", direction="l", lccode=0x1EB7, linebreak="al", shcode=0x0041, specials={ "char", 0x1EA0, 0x0306 }, unicodeslot=0x1EB6, }, [0x1EB7]={ adobename="abrevedotbelow", category="ll", contextname="abrevedotbelow", description="LATIN SMALL LETTER A WITH BREVE AND DOT BELOW", direction="l", linebreak="al", shcode=0x0061, specials={ "char", 0x1EA1, 0x0306 }, uccode=0x1EB6, unicodeslot=0x1EB7, }, [0x1EB8]={ adobename="Edotbelow", category="lu", contextname="Edotbelow", description="LATIN CAPITAL LETTER E WITH DOT BELOW", direction="l", lccode=0x1EB9, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0323 }, unicodeslot=0x1EB8, }, [0x1EB9]={ adobename="edotbelow", category="ll", contextname="edotbelow", description="LATIN SMALL LETTER E WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0323 }, uccode=0x1EB8, unicodeslot=0x1EB9, }, [0x1EBA]={ adobename="Ehookabove", category="lu", contextname="Ehook", description="LATIN CAPITAL LETTER E WITH HOOK ABOVE", direction="l", lccode=0x1EBB, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0309 }, unicodeslot=0x1EBA, }, [0x1EBB]={ adobename="ehookabove", category="ll", contextname="ehook", description="LATIN SMALL LETTER E WITH HOOK ABOVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0309 }, uccode=0x1EBA, unicodeslot=0x1EBB, }, [0x1EBC]={ adobename="Etilde", category="lu", contextname="Etilde", description="LATIN CAPITAL LETTER E WITH TILDE", direction="l", lccode=0x1EBD, linebreak="al", shcode=0x0045, specials={ "char", 0x0045, 0x0303 }, unicodeslot=0x1EBC, }, [0x1EBD]={ adobename="etilde", category="ll", contextname="etilde", description="LATIN SMALL LETTER E WITH TILDE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x0065, 0x0303 }, uccode=0x1EBC, unicodeslot=0x1EBD, }, [0x1EBE]={ adobename="Ecircumflexacute", category="lu", contextname="Ecircumflexacute", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE", direction="l", lccode=0x1EBF, linebreak="al", shcode=0x0045, specials={ "char", 0x00CA, 0x0301 }, unicodeslot=0x1EBE, }, [0x1EBF]={ adobename="ecircumflexacute", category="ll", contextname="ecircumflexacute", description="LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x00EA, 0x0301 }, uccode=0x1EBE, unicodeslot=0x1EBF, }, [0x1EC0]={ adobename="Ecircumflexgrave", category="lu", contextname="Ecircumflexgrave", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE", direction="l", lccode=0x1EC1, linebreak="al", shcode=0x0045, specials={ "char", 0x00CA, 0x0300 }, unicodeslot=0x1EC0, }, [0x1EC1]={ adobename="ecircumflexgrave", category="ll", contextname="ecircumflexgrave", description="LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x00EA, 0x0300 }, uccode=0x1EC0, unicodeslot=0x1EC1, }, [0x1EC2]={ adobename="Ecircumflexhookabove", category="lu", contextname="Ecircumflexhook", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE", direction="l", lccode=0x1EC3, linebreak="al", shcode=0x0045, specials={ "char", 0x00CA, 0x0309 }, unicodeslot=0x1EC2, }, [0x1EC3]={ adobename="ecircumflexhookabove", category="ll", contextname="ecircumflexhook", description="LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x00EA, 0x0309 }, uccode=0x1EC2, unicodeslot=0x1EC3, }, [0x1EC4]={ adobename="Ecircumflextilde", category="lu", contextname="Ecircumflextilde", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE", direction="l", lccode=0x1EC5, linebreak="al", shcode=0x0045, specials={ "char", 0x00CA, 0x0303 }, unicodeslot=0x1EC4, }, [0x1EC5]={ adobename="ecircumflextilde", category="ll", contextname="ecircumflextilde", description="LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x00EA, 0x0303 }, uccode=0x1EC4, unicodeslot=0x1EC5, }, [0x1EC6]={ adobename="Ecircumflexdotbelow", category="lu", contextname="Ecircumflexdotbelow", description="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW", direction="l", lccode=0x1EC7, linebreak="al", shcode=0x0045, specials={ "char", 0x1EB8, 0x0302 }, unicodeslot=0x1EC6, }, [0x1EC7]={ adobename="ecircumflexdotbelow", category="ll", contextname="ecircumflexdotbelow", description="LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW", direction="l", linebreak="al", shcode=0x0065, specials={ "char", 0x1EB9, 0x0302 }, uccode=0x1EC6, unicodeslot=0x1EC7, }, [0x1EC8]={ adobename="Ihookabove", category="lu", contextname="Ihook", description="LATIN CAPITAL LETTER I WITH HOOK ABOVE", direction="l", lccode=0x1EC9, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0309 }, unicodeslot=0x1EC8, }, [0x1EC9]={ adobename="ihookabove", category="ll", contextname="ihook", description="LATIN SMALL LETTER I WITH HOOK ABOVE", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0309 }, uccode=0x1EC8, unicodeslot=0x1EC9, }, [0x1ECA]={ adobename="Idotbelow", category="lu", contextname="Idotbelow", description="LATIN CAPITAL LETTER I WITH DOT BELOW", direction="l", lccode=0x1ECB, linebreak="al", shcode=0x0049, specials={ "char", 0x0049, 0x0323 }, unicodeslot=0x1ECA, }, [0x1ECB]={ adobename="idotbelow", category="ll", contextname="idotbelow", description="LATIN SMALL LETTER I WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0069, specials={ "char", 0x0069, 0x0323 }, uccode=0x1ECA, unicodeslot=0x1ECB, }, [0x1ECC]={ adobename="Odotbelow", category="lu", contextname="Odotbelow", description="LATIN CAPITAL LETTER O WITH DOT BELOW", direction="l", lccode=0x1ECD, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0323 }, unicodeslot=0x1ECC, }, [0x1ECD]={ adobename="odotbelow", category="ll", contextname="odotbelow", description="LATIN SMALL LETTER O WITH DOT BELOW", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0323 }, uccode=0x1ECC, unicodeslot=0x1ECD, }, [0x1ECE]={ adobename="Ohookabove", category="lu", contextname="Ohook", description="LATIN CAPITAL LETTER O WITH HOOK ABOVE", direction="l", lccode=0x1ECF, linebreak="al", shcode=0x004F, specials={ "char", 0x004F, 0x0309 }, unicodeslot=0x1ECE, }, [0x1ECF]={ adobename="ohookabove", category="ll", contextname="ohook", description="LATIN SMALL LETTER O WITH HOOK ABOVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x006F, 0x0309 }, uccode=0x1ECE, unicodeslot=0x1ECF, }, [0x1ED0]={ adobename="Ocircumflexacute", category="lu", contextname="Ocircumflexacute", description="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE", direction="l", lccode=0x1ED1, linebreak="al", shcode=0x004F, specials={ "char", 0x00D4, 0x0301 }, unicodeslot=0x1ED0, }, [0x1ED1]={ adobename="ocircumflexacute", category="ll", contextname="ocircumflexacute", description="LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F4, 0x0301 }, uccode=0x1ED0, unicodeslot=0x1ED1, }, [0x1ED2]={ adobename="Ocircumflexgrave", category="lu", contextname="Ocircumflexgrave", description="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE", direction="l", lccode=0x1ED3, linebreak="al", shcode=0x004F, specials={ "char", 0x00D4, 0x0300 }, unicodeslot=0x1ED2, }, [0x1ED3]={ adobename="ocircumflexgrave", category="ll", contextname="ocircumflexgrave", description="LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F4, 0x0300 }, uccode=0x1ED2, unicodeslot=0x1ED3, }, [0x1ED4]={ adobename="Ocircumflexhookabove", category="lu", contextname="Ocircumflexhook", description="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE", direction="l", lccode=0x1ED5, linebreak="al", shcode=0x004F, specials={ "char", 0x00D4, 0x0309 }, unicodeslot=0x1ED4, }, [0x1ED5]={ adobename="ocircumflexhookabove", category="ll", contextname="ocircumflexhook", description="LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F4, 0x0309 }, uccode=0x1ED4, unicodeslot=0x1ED5, }, [0x1ED6]={ adobename="Ocircumflextilde", category="lu", contextname="Ocircumflextilde", description="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE", direction="l", lccode=0x1ED7, linebreak="al", shcode=0x004F, specials={ "char", 0x00D4, 0x0303 }, unicodeslot=0x1ED6, }, [0x1ED7]={ adobename="ocircumflextilde", category="ll", contextname="ocircumflextilde", description="LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x00F4, 0x0303 }, uccode=0x1ED6, unicodeslot=0x1ED7, }, [0x1ED8]={ adobename="Ocircumflexdotbelow", category="lu", contextname="Ocircumflexdotbelow", description="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW", direction="l", lccode=0x1ED9, linebreak="al", shcode=0x004F, specials={ "char", 0x1ECC, 0x0302 }, unicodeslot=0x1ED8, }, [0x1ED9]={ adobename="ocircumflexdotbelow", category="ll", contextname="ocircumflexdotbelow", description="LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x1ECD, 0x0302 }, uccode=0x1ED8, unicodeslot=0x1ED9, }, [0x1EDA]={ adobename="Ohornacute", category="lu", contextname="Ohornacute", description="LATIN CAPITAL LETTER O WITH HORN AND ACUTE", direction="l", lccode=0x1EDB, linebreak="al", shcode=0x004F, specials={ "char", 0x01A0, 0x0301 }, unicodeslot=0x1EDA, }, [0x1EDB]={ adobename="ohornacute", category="ll", contextname="ohornacute", description="LATIN SMALL LETTER O WITH HORN AND ACUTE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x01A1, 0x0301 }, uccode=0x1EDA, unicodeslot=0x1EDB, }, [0x1EDC]={ adobename="Ohorngrave", category="lu", contextname="Ohorngrave", description="LATIN CAPITAL LETTER O WITH HORN AND GRAVE", direction="l", lccode=0x1EDD, linebreak="al", shcode=0x004F, specials={ "char", 0x01A0, 0x0300 }, unicodeslot=0x1EDC, }, [0x1EDD]={ adobename="ohorngrave", category="ll", contextname="ohorngrave", description="LATIN SMALL LETTER O WITH HORN AND GRAVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x01A1, 0x0300 }, uccode=0x1EDC, unicodeslot=0x1EDD, }, [0x1EDE]={ adobename="Ohornhookabove", category="lu", contextname="Ohornhook", description="LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE", direction="l", lccode=0x1EDF, linebreak="al", shcode=0x004F, specials={ "char", 0x01A0, 0x0309 }, unicodeslot=0x1EDE, }, [0x1EDF]={ adobename="ohornhookabove", category="ll", contextname="ohornhook", description="LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x01A1, 0x0309 }, uccode=0x1EDE, unicodeslot=0x1EDF, }, [0x1EE0]={ adobename="Ohorntilde", category="lu", contextname="Ohorntilde", description="LATIN CAPITAL LETTER O WITH HORN AND TILDE", direction="l", lccode=0x1EE1, linebreak="al", shcode=0x004F, specials={ "char", 0x01A0, 0x0303 }, unicodeslot=0x1EE0, }, [0x1EE1]={ adobename="ohorntilde", category="ll", contextname="ohorntilde", description="LATIN SMALL LETTER O WITH HORN AND TILDE", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x01A1, 0x0303 }, uccode=0x1EE0, unicodeslot=0x1EE1, }, [0x1EE2]={ adobename="Ohorndotbelow", category="lu", contextname="Ohorndotbelow", description="LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW", direction="l", lccode=0x1EE3, linebreak="al", shcode=0x004F, specials={ "char", 0x01A0, 0x0323 }, unicodeslot=0x1EE2, }, [0x1EE3]={ adobename="ohorndotbelow", category="ll", contextname="ohorndotbelow", description="LATIN SMALL LETTER O WITH HORN AND DOT BELOW", direction="l", linebreak="al", shcode=0x006F, specials={ "char", 0x01A1, 0x0323 }, uccode=0x1EE2, unicodeslot=0x1EE3, }, [0x1EE4]={ adobename="Udotbelow", category="lu", contextname="Udotbelow", description="LATIN CAPITAL LETTER U WITH DOT BELOW", direction="l", lccode=0x1EE5, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0323 }, unicodeslot=0x1EE4, }, [0x1EE5]={ adobename="udotbelow", category="ll", contextname="udotbelow", description="LATIN SMALL LETTER U WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0323 }, uccode=0x1EE4, unicodeslot=0x1EE5, }, [0x1EE6]={ adobename="Uhookabove", category="lu", contextname="Uhook", description="LATIN CAPITAL LETTER U WITH HOOK ABOVE", direction="l", lccode=0x1EE7, linebreak="al", shcode=0x0055, specials={ "char", 0x0055, 0x0309 }, unicodeslot=0x1EE6, }, [0x1EE7]={ adobename="uhookabove", category="ll", contextname="uhook", description="LATIN SMALL LETTER U WITH HOOK ABOVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x0075, 0x0309 }, uccode=0x1EE6, unicodeslot=0x1EE7, }, [0x1EE8]={ adobename="Uhornacute", category="lu", contextname="Uhornacute", description="LATIN CAPITAL LETTER U WITH HORN AND ACUTE", direction="l", lccode=0x1EE9, linebreak="al", shcode=0x0055, specials={ "char", 0x01AF, 0x0301 }, unicodeslot=0x1EE8, }, [0x1EE9]={ adobename="uhornacute", category="ll", contextname="uhornacute", description="LATIN SMALL LETTER U WITH HORN AND ACUTE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x01B0, 0x0301 }, uccode=0x1EE8, unicodeslot=0x1EE9, }, [0x1EEA]={ adobename="Uhorngrave", category="lu", contextname="Uhorngrave", description="LATIN CAPITAL LETTER U WITH HORN AND GRAVE", direction="l", lccode=0x1EEB, linebreak="al", shcode=0x0055, specials={ "char", 0x01AF, 0x0300 }, unicodeslot=0x1EEA, }, [0x1EEB]={ adobename="uhorngrave", category="ll", contextname="uhorngrave", description="LATIN SMALL LETTER U WITH HORN AND GRAVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x01B0, 0x0300 }, uccode=0x1EEA, unicodeslot=0x1EEB, }, [0x1EEC]={ adobename="Uhornhookabove", category="lu", contextname="Uhornhook", description="LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE", direction="l", lccode=0x1EED, linebreak="al", shcode=0x0055, specials={ "char", 0x01AF, 0x0309 }, unicodeslot=0x1EEC, }, [0x1EED]={ adobename="uhornhookabove", category="ll", contextname="uhornhook", description="LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x01B0, 0x0309 }, uccode=0x1EEC, unicodeslot=0x1EED, }, [0x1EEE]={ adobename="Uhorntilde", category="lu", contextname="Uhorntilde", description="LATIN CAPITAL LETTER U WITH HORN AND TILDE", direction="l", lccode=0x1EEF, linebreak="al", shcode=0x0055, specials={ "char", 0x01AF, 0x0303 }, unicodeslot=0x1EEE, }, [0x1EEF]={ adobename="uhorntilde", category="ll", contextname="uhorntilde", description="LATIN SMALL LETTER U WITH HORN AND TILDE", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x01B0, 0x0303 }, uccode=0x1EEE, unicodeslot=0x1EEF, }, [0x1EF0]={ adobename="Uhorndotbelow", category="lu", contextname="Uhorndotbelow", description="LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW", direction="l", lccode=0x1EF1, linebreak="al", shcode=0x0055, specials={ "char", 0x01AF, 0x0323 }, unicodeslot=0x1EF0, }, [0x1EF1]={ adobename="uhorndotbelow", category="ll", contextname="uhorndotbelow", description="LATIN SMALL LETTER U WITH HORN AND DOT BELOW", direction="l", linebreak="al", shcode=0x0075, specials={ "char", 0x01B0, 0x0323 }, uccode=0x1EF0, unicodeslot=0x1EF1, }, [0x1EF2]={ adobename="Ygrave", category="lu", contextname="Ygrave", description="LATIN CAPITAL LETTER Y WITH GRAVE", direction="l", lccode=0x1EF3, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0300 }, unicodeslot=0x1EF2, }, [0x1EF3]={ adobename="ygrave", category="ll", contextname="ygrave", description="LATIN SMALL LETTER Y WITH GRAVE", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0300 }, uccode=0x1EF2, unicodeslot=0x1EF3, }, [0x1EF4]={ adobename="Ydotbelow", category="lu", contextname="Ydotbelow", description="LATIN CAPITAL LETTER Y WITH DOT BELOW", direction="l", lccode=0x1EF5, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0323 }, unicodeslot=0x1EF4, }, [0x1EF5]={ adobename="ydotbelow", category="ll", contextname="ydotbelow", description="LATIN SMALL LETTER Y WITH DOT BELOW", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0323 }, uccode=0x1EF4, unicodeslot=0x1EF5, }, [0x1EF6]={ adobename="Yhookabove", category="lu", contextname="Yhook", description="LATIN CAPITAL LETTER Y WITH HOOK ABOVE", direction="l", lccode=0x1EF7, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0309 }, unicodeslot=0x1EF6, }, [0x1EF7]={ adobename="yhookabove", category="ll", contextname="yhook", description="LATIN SMALL LETTER Y WITH HOOK ABOVE", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0309 }, uccode=0x1EF6, unicodeslot=0x1EF7, }, [0x1EF8]={ adobename="Ytilde", category="lu", contextname="Ytilde", description="LATIN CAPITAL LETTER Y WITH TILDE", direction="l", lccode=0x1EF9, linebreak="al", shcode=0x0059, specials={ "char", 0x0059, 0x0303 }, unicodeslot=0x1EF8, }, [0x1EF9]={ adobename="ytilde", category="ll", contextname="ytilde", description="LATIN SMALL LETTER Y WITH TILDE", direction="l", linebreak="al", shcode=0x0079, specials={ "char", 0x0079, 0x0303 }, uccode=0x1EF8, unicodeslot=0x1EF9, }, [0x1EFA]={ category="lu", description="LATIN CAPITAL LETTER MIDDLE-WELSH LL", direction="l", linebreak="al", unicodeslot=0x1EFA, }, [0x1EFB]={ category="ll", description="LATIN SMALL LETTER MIDDLE-WELSH LL", direction="l", linebreak="al", unicodeslot=0x1EFB, }, [0x1EFC]={ category="lu", description="LATIN CAPITAL LETTER MIDDLE-WELSH V", direction="l", linebreak="al", unicodeslot=0x1EFC, }, [0x1EFD]={ category="ll", description="LATIN SMALL LETTER MIDDLE-WELSH V", direction="l", linebreak="al", unicodeslot=0x1EFD, }, [0x1EFE]={ category="lu", description="LATIN CAPITAL LETTER Y WITH LOOP", direction="l", linebreak="al", unicodeslot=0x1EFE, }, [0x1EFF]={ category="ll", description="LATIN SMALL LETTER Y WITH LOOP", direction="l", linebreak="al", unicodeslot=0x1EFF, }, [0x1F00]={ category="ll", contextname="greekalphapsili", description="GREEK SMALL LETTER ALPHA WITH PSILI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0313 }, uccode=0x1F08, unicodeslot=0x1F00, }, [0x1F01]={ category="ll", contextname="greekalphadasia", description="GREEK SMALL LETTER ALPHA WITH DASIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0314 }, uccode=0x1F09, unicodeslot=0x1F01, }, [0x1F02]={ category="ll", contextname="greekalphapsilivaria", description="GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F00, 0x0300 }, uccode=0x1F0A, unicodeslot=0x1F02, }, [0x1F03]={ category="ll", contextname="greekalphadasiavaria", description="GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F01, 0x0300 }, uccode=0x1F0B, unicodeslot=0x1F03, }, [0x1F04]={ category="ll", contextname="greekalphapsilitonos", description="GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F00, 0x0301 }, uccode=0x1F0C, unicodeslot=0x1F04, }, [0x1F05]={ category="ll", contextname="greekalphadasiatonos", description="GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F01, 0x0301 }, uccode=0x1F0D, unicodeslot=0x1F05, }, [0x1F06]={ category="ll", contextname="greekalphapsiliperispomeni", description="GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F00, 0x0342 }, uccode=0x1F0E, unicodeslot=0x1F06, }, [0x1F07]={ category="ll", contextname="greekalphadasiaperispomeni", description="GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F01, 0x0342 }, uccode=0x1F0F, unicodeslot=0x1F07, }, [0x1F08]={ category="lu", contextname="greekAlphapsili", description="GREEK CAPITAL LETTER ALPHA WITH PSILI", direction="l", lccode=0x1F00, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0313 }, unicodeslot=0x1F08, }, [0x1F09]={ category="lu", contextname="greekAlphadasia", description="GREEK CAPITAL LETTER ALPHA WITH DASIA", direction="l", lccode=0x1F01, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0314 }, unicodeslot=0x1F09, }, [0x1F0A]={ category="lu", contextname="greekAlphapsilivaria", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA", direction="l", lccode=0x1F02, linebreak="al", shcode=0x0391, specials={ "char", 0x1F08, 0x0300 }, unicodeslot=0x1F0A, }, [0x1F0B]={ category="lu", contextname="greekAlphadasiavaria", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA", direction="l", lccode=0x1F03, linebreak="al", shcode=0x0391, specials={ "char", 0x1F09, 0x0300 }, unicodeslot=0x1F0B, }, [0x1F0C]={ category="lu", contextname="greekAlphapsilitonos", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA", direction="l", lccode=0x1F04, linebreak="al", shcode=0x0391, specials={ "char", 0x1F08, 0x0301 }, unicodeslot=0x1F0C, }, [0x1F0D]={ category="lu", contextname="greekAlphadasiatonos", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA", direction="l", lccode=0x1F05, linebreak="al", shcode=0x0391, specials={ "char", 0x1F09, 0x0301 }, unicodeslot=0x1F0D, }, [0x1F0E]={ category="lu", contextname="greekAlphapsiliperispomeni", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI", direction="l", lccode=0x1F06, linebreak="al", shcode=0x0391, specials={ "char", 0x1F08, 0x0342 }, unicodeslot=0x1F0E, }, [0x1F0F]={ category="lu", contextname="greekAlphadasiaperispomeni", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI", direction="l", lccode=0x1F07, linebreak="al", shcode=0x0391, specials={ "char", 0x1F09, 0x0342 }, unicodeslot=0x1F0F, }, [0x1F10]={ category="ll", contextname="greekepsilonpsili", description="GREEK SMALL LETTER EPSILON WITH PSILI", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x03B5, 0x0313 }, uccode=0x1F18, unicodeslot=0x1F10, }, [0x1F11]={ category="ll", contextname="greekepsilondasia", description="GREEK SMALL LETTER EPSILON WITH DASIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x03B5, 0x0314 }, uccode=0x1F19, unicodeslot=0x1F11, }, [0x1F12]={ category="ll", contextname="greekepsilonpsilivaria", description="GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x1F10, 0x0300 }, uccode=0x1F1A, unicodeslot=0x1F12, }, [0x1F13]={ category="ll", contextname="greekepsilondasiavaria", description="GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x1F11, 0x0300 }, uccode=0x1F1B, unicodeslot=0x1F13, }, [0x1F14]={ category="ll", contextname="greekepsilonpsilitonos", description="GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x1F10, 0x0301 }, uccode=0x1F1C, unicodeslot=0x1F14, }, [0x1F15]={ category="ll", contextname="greekepsilondasiatonos", description="GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x1F11, 0x0301 }, uccode=0x1F1D, unicodeslot=0x1F15, }, [0x1F18]={ category="lu", contextname="greekEpsilonpsili", description="GREEK CAPITAL LETTER EPSILON WITH PSILI", direction="l", lccode=0x1F10, linebreak="al", shcode=0x0395, specials={ "char", 0x0395, 0x0313 }, unicodeslot=0x1F18, }, [0x1F19]={ category="lu", contextname="greekEpsilondasia", description="GREEK CAPITAL LETTER EPSILON WITH DASIA", direction="l", lccode=0x1F11, linebreak="al", shcode=0x0395, specials={ "char", 0x0395, 0x0314 }, unicodeslot=0x1F19, }, [0x1F1A]={ category="lu", contextname="greekEpsilonpsilivaria", description="GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA", direction="l", lccode=0x1F12, linebreak="al", shcode=0x0395, specials={ "char", 0x1F18, 0x0300 }, unicodeslot=0x1F1A, }, [0x1F1B]={ category="lu", contextname="greekEpsilondasiavaria", description="GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA", direction="l", lccode=0x1F13, linebreak="al", shcode=0x0395, specials={ "char", 0x1F19, 0x0300 }, unicodeslot=0x1F1B, }, [0x1F1C]={ category="lu", contextname="greekEpsilonpsilitonos", description="GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA", direction="l", lccode=0x1F14, linebreak="al", shcode=0x0395, specials={ "char", 0x1F18, 0x0301 }, unicodeslot=0x1F1C, }, [0x1F1D]={ category="lu", contextname="greekEpsilondasiatonos", description="GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA", direction="l", lccode=0x1F15, linebreak="al", shcode=0x0395, specials={ "char", 0x1F19, 0x0301 }, unicodeslot=0x1F1D, }, [0x1F20]={ category="ll", contextname="greeketapsili", description="GREEK SMALL LETTER ETA WITH PSILI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03B7, 0x0313 }, uccode=0x1F28, unicodeslot=0x1F20, }, [0x1F21]={ category="ll", contextname="greeketadasia", description="GREEK SMALL LETTER ETA WITH DASIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03B7, 0x0314 }, uccode=0x1F29, unicodeslot=0x1F21, }, [0x1F22]={ category="ll", contextname="greeketapsilivaria", description="GREEK SMALL LETTER ETA WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F20, 0x0300 }, uccode=0x1F2A, unicodeslot=0x1F22, }, [0x1F23]={ category="ll", contextname="greeketadasiavaria", description="GREEK SMALL LETTER ETA WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F21, 0x0300 }, uccode=0x1F2B, unicodeslot=0x1F23, }, [0x1F24]={ category="ll", contextname="greeketapsilitonos", description="GREEK SMALL LETTER ETA WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F20, 0x0301 }, uccode=0x1F2C, unicodeslot=0x1F24, }, [0x1F25]={ category="ll", contextname="greeketadasiatonos", description="GREEK SMALL LETTER ETA WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F21, 0x0301 }, uccode=0x1F2D, unicodeslot=0x1F25, }, [0x1F26]={ category="ll", contextname="greeketapsiliperispomeni", description="GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F20, 0x0342 }, uccode=0x1F2E, unicodeslot=0x1F26, }, [0x1F27]={ category="ll", contextname="greeketadasiaperispomeni", description="GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F21, 0x0342 }, uccode=0x1F2F, unicodeslot=0x1F27, }, [0x1F28]={ category="lu", contextname="greekEtapsili", description="GREEK CAPITAL LETTER ETA WITH PSILI", direction="l", lccode=0x1F20, linebreak="al", shcode=0x0397, specials={ "char", 0x0397, 0x0313 }, unicodeslot=0x1F28, }, [0x1F29]={ category="lu", contextname="greekEtadasia", description="GREEK CAPITAL LETTER ETA WITH DASIA", direction="l", lccode=0x1F21, linebreak="al", shcode=0x0397, specials={ "char", 0x0397, 0x0314 }, unicodeslot=0x1F29, }, [0x1F2A]={ category="lu", contextname="greekEtapsilivaria", description="GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA", direction="l", lccode=0x1F22, linebreak="al", shcode=0x0397, specials={ "char", 0x1F28, 0x0300 }, unicodeslot=0x1F2A, }, [0x1F2B]={ category="lu", contextname="greekEtadasiavaria", description="GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA", direction="l", lccode=0x1F23, linebreak="al", shcode=0x0397, specials={ "char", 0x1F29, 0x0300 }, unicodeslot=0x1F2B, }, [0x1F2C]={ category="lu", contextname="greekEtapsilitonos", description="GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA", direction="l", lccode=0x1F24, linebreak="al", shcode=0x0397, specials={ "char", 0x1F28, 0x0301 }, unicodeslot=0x1F2C, }, [0x1F2D]={ category="lu", contextname="greekEtadasiatonos", description="GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA", direction="l", lccode=0x1F25, linebreak="al", shcode=0x0397, specials={ "char", 0x1F29, 0x0301 }, unicodeslot=0x1F2D, }, [0x1F2E]={ category="lu", contextname="greekEtapsiliperispomeni", description="GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI", direction="l", lccode=0x1F26, linebreak="al", shcode=0x0397, specials={ "char", 0x1F28, 0x0342 }, unicodeslot=0x1F2E, }, [0x1F2F]={ category="lu", contextname="greekEtadasiaperispomeni", description="GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI", direction="l", lccode=0x1F27, linebreak="al", shcode=0x0397, specials={ "char", 0x1F29, 0x0342 }, unicodeslot=0x1F2F, }, [0x1F30]={ category="ll", contextname="greekiotapsili", description="GREEK SMALL LETTER IOTA WITH PSILI", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0313 }, uccode=0x1F38, unicodeslot=0x1F30, }, [0x1F31]={ category="ll", contextname="greekiotadasia", description="GREEK SMALL LETTER IOTA WITH DASIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0314 }, uccode=0x1F39, unicodeslot=0x1F31, }, [0x1F32]={ category="ll", contextname="greekiotapsilivaria", description="GREEK SMALL LETTER IOTA WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x1F30, 0x0300 }, uccode=0x1F3A, unicodeslot=0x1F32, }, [0x1F33]={ category="ll", contextname="greekiotadasiavaria", description="GREEK SMALL LETTER IOTA WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x1F31, 0x0300 }, uccode=0x1F3B, unicodeslot=0x1F33, }, [0x1F34]={ category="ll", contextname="greekiotapsilitonos", description="GREEK SMALL LETTER IOTA WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x1F30, 0x0301 }, uccode=0x1F3C, unicodeslot=0x1F34, }, [0x1F35]={ category="ll", contextname="greekiotadasiatonos", description="GREEK SMALL LETTER IOTA WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x1F31, 0x0301 }, uccode=0x1F3D, unicodeslot=0x1F35, }, [0x1F36]={ category="ll", contextname="greekiotapsiliperispomeni", description="GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x1F30, 0x0342 }, uccode=0x1F3E, unicodeslot=0x1F36, }, [0x1F37]={ category="ll", contextname="greekiotadasiaperispomeni", description="GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x1F31, 0x0342 }, uccode=0x1F3F, unicodeslot=0x1F37, }, [0x1F38]={ category="lu", contextname="greekIotapsili", description="GREEK CAPITAL LETTER IOTA WITH PSILI", direction="l", lccode=0x1F30, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0313 }, unicodeslot=0x1F38, }, [0x1F39]={ category="lu", contextname="greekIotadasia", description="GREEK CAPITAL LETTER IOTA WITH DASIA", direction="l", lccode=0x1F31, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0314 }, unicodeslot=0x1F39, }, [0x1F3A]={ category="lu", contextname="greekIotapsilivaria", description="GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA", direction="l", lccode=0x1F32, linebreak="al", shcode=0x0399, specials={ "char", 0x1F38, 0x0300 }, unicodeslot=0x1F3A, }, [0x1F3B]={ category="lu", contextname="greekIotadasiavaria", description="GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA", direction="l", lccode=0x1F33, linebreak="al", shcode=0x0399, specials={ "char", 0x1F39, 0x0300 }, unicodeslot=0x1F3B, }, [0x1F3C]={ category="lu", contextname="greekIotapsilitonos", description="GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA", direction="l", lccode=0x1F34, linebreak="al", shcode=0x0399, specials={ "char", 0x1F38, 0x0301 }, unicodeslot=0x1F3C, }, [0x1F3D]={ category="lu", contextname="greekIotadasiatonos", description="GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA", direction="l", lccode=0x1F35, linebreak="al", shcode=0x0399, specials={ "char", 0x1F39, 0x0301 }, unicodeslot=0x1F3D, }, [0x1F3E]={ category="lu", contextname="greekIotapsiliperispomeni", description="GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI", direction="l", lccode=0x1F36, linebreak="al", shcode=0x0399, specials={ "char", 0x1F38, 0x0342 }, unicodeslot=0x1F3E, }, [0x1F3F]={ category="lu", contextname="greekIotadasiaperispomeni", description="GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI", direction="l", lccode=0x1F37, linebreak="al", shcode=0x0399, specials={ "char", 0x1F39, 0x0342 }, unicodeslot=0x1F3F, }, [0x1F40]={ category="ll", contextname="greekomicronpsili", description="GREEK SMALL LETTER OMICRON WITH PSILI", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x03BF, 0x0313 }, uccode=0x1F48, unicodeslot=0x1F40, }, [0x1F41]={ category="ll", contextname="greekomicrondasia", description="GREEK SMALL LETTER OMICRON WITH DASIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x03BF, 0x0314 }, uccode=0x1F49, unicodeslot=0x1F41, }, [0x1F42]={ category="ll", contextname="greekomicronpsilivaria", description="GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x1F40, 0x0300 }, uccode=0x1F4A, unicodeslot=0x1F42, }, [0x1F43]={ category="ll", contextname="greekomicrondasiavaria", description="GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x1F41, 0x0300 }, uccode=0x1F4B, unicodeslot=0x1F43, }, [0x1F44]={ category="ll", contextname="greekomicronpsilitonos", description="GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x1F40, 0x0301 }, uccode=0x1F4C, unicodeslot=0x1F44, }, [0x1F45]={ category="ll", contextname="greekomicrondasiatonos", description="GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x1F41, 0x0301 }, uccode=0x1F4D, unicodeslot=0x1F45, }, [0x1F48]={ category="lu", contextname="greekOmicronpsili", description="GREEK CAPITAL LETTER OMICRON WITH PSILI", direction="l", lccode=0x1F40, linebreak="al", shcode=0x039F, specials={ "char", 0x039F, 0x0313 }, unicodeslot=0x1F48, }, [0x1F49]={ category="lu", contextname="greekOmicrondasia", description="GREEK CAPITAL LETTER OMICRON WITH DASIA", direction="l", lccode=0x1F41, linebreak="al", shcode=0x039F, specials={ "char", 0x039F, 0x0314 }, unicodeslot=0x1F49, }, [0x1F4A]={ category="lu", contextname="greekOmicronpsilivaria", description="GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA", direction="l", lccode=0x1F42, linebreak="al", shcode=0x039F, specials={ "char", 0x1F48, 0x0300 }, unicodeslot=0x1F4A, }, [0x1F4B]={ category="lu", contextname="greekOmicrondasiavaria", description="GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA", direction="l", lccode=0x1F43, linebreak="al", shcode=0x039F, specials={ "char", 0x1F49, 0x0300 }, unicodeslot=0x1F4B, }, [0x1F4C]={ category="lu", contextname="greekOmicronpsilitonos", description="GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA", direction="l", lccode=0x1F44, linebreak="al", shcode=0x039F, specials={ "char", 0x1F48, 0x0301 }, unicodeslot=0x1F4C, }, [0x1F4D]={ category="lu", contextname="greekOmicrondasiatonos", description="GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA", direction="l", lccode=0x1F45, linebreak="al", shcode=0x039F, specials={ "char", 0x1F49, 0x0301 }, unicodeslot=0x1F4D, }, [0x1F50]={ category="ll", contextname="greekupsilonpsili", description="GREEK SMALL LETTER UPSILON WITH PSILI", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0313 }, unicodeslot=0x1F50, }, [0x1F51]={ category="ll", contextname="greekupsilondasia", description="GREEK SMALL LETTER UPSILON WITH DASIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0314 }, uccode=0x1F59, unicodeslot=0x1F51, }, [0x1F52]={ category="ll", contextname="greekupsilonpsilivaria", description="GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x1F50, 0x0300 }, unicodeslot=0x1F52, }, [0x1F53]={ category="ll", contextname="greekupsilondasiavaria", description="GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x1F51, 0x0300 }, uccode=0x1F5B, unicodeslot=0x1F53, }, [0x1F54]={ category="ll", contextname="greekupsilonpsilitonos", description="GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x1F50, 0x0301 }, unicodeslot=0x1F54, }, [0x1F55]={ category="ll", contextname="greekupsilondasiatonos", description="GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x1F51, 0x0301 }, uccode=0x1F5D, unicodeslot=0x1F55, }, [0x1F56]={ category="ll", contextname="greekupsilonpsiliperispomeni", description="GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x1F50, 0x0342 }, unicodeslot=0x1F56, }, [0x1F57]={ category="ll", contextname="greekupsilondasiaperispomeni", description="GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x1F51, 0x0342 }, uccode=0x1F5F, unicodeslot=0x1F57, }, [0x1F59]={ category="lu", contextname="greekUpsilondasia", description="GREEK CAPITAL LETTER UPSILON WITH DASIA", direction="l", lccode=0x1F51, linebreak="al", shcode=0x03A5, specials={ "char", 0x03A5, 0x0314 }, unicodeslot=0x1F59, }, [0x1F5B]={ category="lu", contextname="greekUpsilondasiavaria", description="GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA", direction="l", lccode=0x1F53, linebreak="al", shcode=0x03A5, specials={ "char", 0x1F59, 0x0300 }, unicodeslot=0x1F5B, }, [0x1F5D]={ category="lu", contextname="greekUpsilondasiatonos", description="GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA", direction="l", lccode=0x1F55, linebreak="al", shcode=0x03A5, specials={ "char", 0x1F59, 0x0301 }, unicodeslot=0x1F5D, }, [0x1F5F]={ category="lu", contextname="greekUpsilondasiaperispomeni", description="GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI", direction="l", lccode=0x1F57, linebreak="al", shcode=0x03A5, specials={ "char", 0x1F59, 0x0342 }, unicodeslot=0x1F5F, }, [0x1F60]={ category="ll", contextname="greekomegapsili", description="GREEK SMALL LETTER OMEGA WITH PSILI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03C9, 0x0313 }, uccode=0x1F68, unicodeslot=0x1F60, }, [0x1F61]={ category="ll", contextname="greekomegadasia", description="GREEK SMALL LETTER OMEGA WITH DASIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03C9, 0x0314 }, uccode=0x1F69, unicodeslot=0x1F61, }, [0x1F62]={ category="ll", contextname="greekomegapsilivaria", description="GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F60, 0x0300 }, uccode=0x1F6A, unicodeslot=0x1F62, }, [0x1F63]={ category="ll", contextname="greekomegadasiavaria", description="GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F61, 0x0300 }, uccode=0x1F6B, unicodeslot=0x1F63, }, [0x1F64]={ category="ll", contextname="greekomegapsilitonos", description="GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F60, 0x0301 }, uccode=0x1F6C, unicodeslot=0x1F64, }, [0x1F65]={ category="ll", contextname="greekomegadasiatonos", description="GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F61, 0x0301 }, uccode=0x1F6D, unicodeslot=0x1F65, }, [0x1F66]={ category="ll", contextname="greekomegapsiliperispomeni", description="GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F60, 0x0342 }, uccode=0x1F6E, unicodeslot=0x1F66, }, [0x1F67]={ category="ll", contextname="greekomegadasiaperispomeni", description="GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F61, 0x0342 }, uccode=0x1F6F, unicodeslot=0x1F67, }, [0x1F68]={ category="lu", contextname="greekOmegapsili", description="GREEK CAPITAL LETTER OMEGA WITH PSILI", direction="l", lccode=0x1F60, linebreak="al", shcode=0x03A9, specials={ "char", 0x03A9, 0x0313 }, unicodeslot=0x1F68, }, [0x1F69]={ category="lu", contextname="greekOmegadasia", description="GREEK CAPITAL LETTER OMEGA WITH DASIA", direction="l", lccode=0x1F61, linebreak="al", shcode=0x03A9, specials={ "char", 0x03A9, 0x0314 }, unicodeslot=0x1F69, }, [0x1F6A]={ category="lu", contextname="greekOmegapsilivaria", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA", direction="l", lccode=0x1F62, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F68, 0x0300 }, unicodeslot=0x1F6A, }, [0x1F6B]={ category="lu", contextname="greekOmegadasiavaria", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA", direction="l", lccode=0x1F63, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F69, 0x0300 }, unicodeslot=0x1F6B, }, [0x1F6C]={ category="lu", contextname="greekOmegapsilitonos", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA", direction="l", lccode=0x1F64, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F68, 0x0301 }, unicodeslot=0x1F6C, }, [0x1F6D]={ category="lu", contextname="greekOmegadasiatonos", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA", direction="l", lccode=0x1F65, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F69, 0x0301 }, unicodeslot=0x1F6D, }, [0x1F6E]={ category="lu", contextname="greekOmegapsiliperispomeni", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI", direction="l", lccode=0x1F66, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F68, 0x0342 }, unicodeslot=0x1F6E, }, [0x1F6F]={ category="lu", contextname="greekOmegadasiaperispomeni", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI", direction="l", lccode=0x1F67, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F69, 0x0342 }, unicodeslot=0x1F6F, }, [0x1F70]={ category="ll", contextname="greekalphavaria", description="GREEK SMALL LETTER ALPHA WITH VARIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0300 }, uccode=0x1FBA, unicodeslot=0x1F70, }, [0x1F71]={ category="ll", contextname="greekalphaoxia", description="GREEK SMALL LETTER ALPHA WITH OXIA", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03AC }, uccode=0x1FBB, unicodeslot=0x1F71, }, [0x1F72]={ category="ll", contextname="greekepsilonvaria", description="GREEK SMALL LETTER EPSILON WITH VARIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x03B5, 0x0300 }, uccode=0x1FC8, unicodeslot=0x1F72, }, [0x1F73]={ category="ll", contextname="greekepsilonoxia", description="GREEK SMALL LETTER EPSILON WITH OXIA", direction="l", linebreak="al", shcode=0x03B5, specials={ "char", 0x03AD }, uccode=0x1FC9, unicodeslot=0x1F73, }, [0x1F74]={ category="ll", contextname="greeketavaria", description="GREEK SMALL LETTER ETA WITH VARIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03B7, 0x0300 }, uccode=0x1FCA, unicodeslot=0x1F74, }, [0x1F75]={ category="ll", contextname="greeketaoxia", description="GREEK SMALL LETTER ETA WITH OXIA", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03AE }, uccode=0x1FCB, unicodeslot=0x1F75, }, [0x1F76]={ category="ll", contextname="greekiotavaria", description="GREEK SMALL LETTER IOTA WITH VARIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0300 }, uccode=0x1FDA, unicodeslot=0x1F76, }, [0x1F77]={ category="ll", contextname="greekiotaoxia", description="GREEK SMALL LETTER IOTA WITH OXIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03AF }, uccode=0x1FDB, unicodeslot=0x1F77, }, [0x1F78]={ category="ll", contextname="greekomicronvaria", description="GREEK SMALL LETTER OMICRON WITH VARIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x03BF, 0x0300 }, uccode=0x1FF8, unicodeslot=0x1F78, }, [0x1F79]={ category="ll", contextname="greekomicronoxia", description="GREEK SMALL LETTER OMICRON WITH OXIA", direction="l", linebreak="al", shcode=0x03BF, specials={ "char", 0x03CC }, uccode=0x1FF9, unicodeslot=0x1F79, }, [0x1F7A]={ category="ll", contextname="greekupsilonvaria", description="GREEK SMALL LETTER UPSILON WITH VARIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0300 }, uccode=0x1FEA, unicodeslot=0x1F7A, }, [0x1F7B]={ category="ll", contextname="greekupsilonoxia", description="GREEK SMALL LETTER UPSILON WITH OXIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03CD }, uccode=0x1FEB, unicodeslot=0x1F7B, }, [0x1F7C]={ category="ll", contextname="greekomegavaria", description="GREEK SMALL LETTER OMEGA WITH VARIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03C9, 0x0300 }, uccode=0x1FFA, unicodeslot=0x1F7C, }, [0x1F7D]={ category="ll", contextname="greekomegaoxia", description="GREEK SMALL LETTER OMEGA WITH OXIA", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03CE }, uccode=0x1FFB, unicodeslot=0x1F7D, }, [0x1F80]={ category="ll", contextname="greekalphaiotasubpsili", description="GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F00, 0x0345 }, uccode=0x1F88, unicodeslot=0x1F80, }, [0x1F81]={ category="ll", contextname="greekalphaiotasubdasia", description="GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F01, 0x0345 }, uccode=0x1F89, unicodeslot=0x1F81, }, [0x1F82]={ category="ll", contextname="greekalphaiotasubpsilivaria", description="GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F02, 0x0345 }, uccode=0x1F8A, unicodeslot=0x1F82, }, [0x1F83]={ category="ll", contextname="greekalphaiotasubdasiavaria", description="GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F03, 0x0345 }, uccode=0x1F8B, unicodeslot=0x1F83, }, [0x1F84]={ category="ll", contextname="greekalphaiotasubpsilitonos", description="GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F04, 0x0345 }, uccode=0x1F8C, unicodeslot=0x1F84, }, [0x1F85]={ category="ll", contextname="greekalphaiotasubdasiatonos", description="GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F05, 0x0345 }, uccode=0x1F8D, unicodeslot=0x1F85, }, [0x1F86]={ category="ll", contextname="greekalphaiotasubpsiliperispomeni", description="GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F06, 0x0345 }, uccode=0x1F8E, unicodeslot=0x1F86, }, [0x1F87]={ category="ll", contextname="greekalphaiotasubdasiaperispomeni", description="GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F07, 0x0345 }, uccode=0x1F8F, unicodeslot=0x1F87, }, [0x1F88]={ category="lt", contextname="greekAlphaiotasubpsili", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI", direction="l", lccode=0x1F80, linebreak="al", shcode=0x0391, specials={ "char", 0x1F08, 0x0345 }, unicodeslot=0x1F88, }, [0x1F89]={ category="lt", contextname="greekAlphaiotasubdasia", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F81, linebreak="al", shcode=0x0391, specials={ "char", 0x1F09, 0x0345 }, unicodeslot=0x1F89, }, [0x1F8A]={ category="lt", contextname="greekAlphaiotasubpsilivaria", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F82, linebreak="al", shcode=0x0391, specials={ "char", 0x1F0A, 0x0345 }, unicodeslot=0x1F8A, }, [0x1F8B]={ category="lt", contextname="greekAlphaiotasubdasiavaria", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F83, linebreak="al", shcode=0x0391, specials={ "char", 0x1F0B, 0x0345 }, unicodeslot=0x1F8B, }, [0x1F8C]={ category="lt", contextname="greekAlphaiotasubpsilitonos", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F84, linebreak="al", shcode=0x0391, specials={ "char", 0x1F0C, 0x0345 }, unicodeslot=0x1F8C, }, [0x1F8D]={ category="lt", contextname="greekAlphaiotasubdasiatonos", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F85, linebreak="al", shcode=0x0391, specials={ "char", 0x1F0D, 0x0345 }, unicodeslot=0x1F8D, }, [0x1F8E]={ category="lt", contextname="greekAlphaiotasubpsiliperispomeni", description="GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", direction="l", lccode=0x1F86, linebreak="al", shcode=0x0391, specials={ "char", 0x1F0E, 0x0345 }, unicodeslot=0x1F8E, }, [0x1F8F]={ category="lt", contextname="greekAlphaiotasubdasiaperispomeni", description="GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", direction="l", lccode=0x1F87, linebreak="al", shcode=0x0391, specials={ "char", 0x1F0F, 0x0345 }, unicodeslot=0x1F8F, }, [0x1F90]={ category="ll", contextname="greeketaiotasubpsili", description="GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F20, 0x0345 }, uccode=0x1F98, unicodeslot=0x1F90, }, [0x1F91]={ category="ll", contextname="greeketaiotasubdasia", description="GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F21, 0x0345 }, uccode=0x1F99, unicodeslot=0x1F91, }, [0x1F92]={ category="ll", contextname="greeketaiotasubpsilivaria", description="GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F22, 0x0345 }, uccode=0x1F9A, unicodeslot=0x1F92, }, [0x1F93]={ category="ll", contextname="greeketaiotasubdasiavaria", description="GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F23, 0x0345 }, uccode=0x1F9B, unicodeslot=0x1F93, }, [0x1F94]={ category="ll", contextname="greeketaiotasubpsilitonos", description="GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F24, 0x0345 }, uccode=0x1F9C, unicodeslot=0x1F94, }, [0x1F95]={ category="ll", contextname="greeketaiotasubdasiatonos", description="GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F25, 0x0345 }, uccode=0x1F9D, unicodeslot=0x1F95, }, [0x1F96]={ category="ll", contextname="greeketaiotasubpsiliperispomeni", description="GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F26, 0x0345 }, uccode=0x1F9E, unicodeslot=0x1F96, }, [0x1F97]={ category="ll", contextname="greeketaiotasubdasiaperispomeni", description="GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F27, 0x0345 }, uccode=0x1F9F, unicodeslot=0x1F97, }, [0x1F98]={ category="lt", contextname="greekEtaiotasubpsili", description="GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI", direction="l", lccode=0x1F90, linebreak="al", shcode=0x0397, specials={ "char", 0x1F28, 0x0345 }, unicodeslot=0x1F98, }, [0x1F99]={ category="lt", contextname="greekEtaiotasubdasia", description="GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F91, linebreak="al", shcode=0x0397, specials={ "char", 0x1F29, 0x0345 }, unicodeslot=0x1F99, }, [0x1F9A]={ category="lt", contextname="greekEtaiotasubpsilivaria", description="GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F92, linebreak="al", shcode=0x0397, specials={ "char", 0x1F2A, 0x0345 }, unicodeslot=0x1F9A, }, [0x1F9B]={ category="lt", contextname="greekEtaiotasubdasiavaria", description="GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F93, linebreak="al", shcode=0x0397, specials={ "char", 0x1F2B, 0x0345 }, unicodeslot=0x1F9B, }, [0x1F9C]={ category="lt", contextname="greekEtaiotasubpsilitonos", description="GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F94, linebreak="al", shcode=0x0397, specials={ "char", 0x1F2C, 0x0345 }, unicodeslot=0x1F9C, }, [0x1F9D]={ category="lt", contextname="greekEtaiotasubdasiatonos", description="GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI", direction="l", lccode=0x1F95, linebreak="al", shcode=0x0397, specials={ "char", 0x1F2D, 0x0345 }, unicodeslot=0x1F9D, }, [0x1F9E]={ category="lt", contextname="greekEtaiotasubpsiliperispomeni", description="GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", direction="l", lccode=0x1F96, linebreak="al", shcode=0x0397, specials={ "char", 0x1F2E, 0x0345 }, unicodeslot=0x1F9E, }, [0x1F9F]={ category="lt", contextname="greekEtaiotasubdasiaperispomeni", description="GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", direction="l", lccode=0x1F97, linebreak="al", shcode=0x0397, specials={ "char", 0x1F2F, 0x0345 }, unicodeslot=0x1F9F, }, [0x1FA0]={ category="ll", contextname="greekomegaiotasubpsili", description="GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F60, 0x0345 }, uccode=0x1FA8, unicodeslot=0x1FA0, }, [0x1FA1]={ category="ll", contextname="greekomegaiotasubdasia", description="GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F61, 0x0345 }, uccode=0x1FA9, unicodeslot=0x1FA1, }, [0x1FA2]={ category="ll", contextname="greekomegaiotasubpsilivaria", description="GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F62, 0x0345 }, uccode=0x1FAA, unicodeslot=0x1FA2, }, [0x1FA3]={ category="ll", contextname="greekomegaiotasubdasiavaria", description="GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F63, 0x0345 }, uccode=0x1FAB, unicodeslot=0x1FA3, }, [0x1FA4]={ category="ll", contextname="greekomegaiotasubpsilitonos", description="GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F64, 0x0345 }, uccode=0x1FAC, unicodeslot=0x1FA4, }, [0x1FA5]={ category="ll", contextname="greekomegaiotasubdasiatonos", description="GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F65, 0x0345 }, uccode=0x1FAD, unicodeslot=0x1FA5, }, [0x1FA6]={ category="ll", contextname="greekomegaiotasubpsiliperispomeni", description="GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F66, 0x0345 }, uccode=0x1FAE, unicodeslot=0x1FA6, }, [0x1FA7]={ category="ll", contextname="greekomegaiotasubdasiaperispomeni", description="GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F67, 0x0345 }, uccode=0x1FAF, unicodeslot=0x1FA7, }, [0x1FA8]={ category="lt", contextname="greekOmegaiotasubpsili", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI", direction="l", lccode=0x1FA0, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F68, 0x0345 }, unicodeslot=0x1FA8, }, [0x1FA9]={ category="lt", contextname="greekOmegaiotasubdasia", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI", direction="l", lccode=0x1FA1, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F69, 0x0345 }, unicodeslot=0x1FA9, }, [0x1FAA]={ category="lt", contextname="greekOmegaiotasubpsilivaria", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI", direction="l", lccode=0x1FA2, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F6A, 0x0345 }, unicodeslot=0x1FAA, }, [0x1FAB]={ category="lt", contextname="greekOmegaiotasubdasiavaria", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI", direction="l", lccode=0x1FA3, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F6B, 0x0345 }, unicodeslot=0x1FAB, }, [0x1FAC]={ category="lt", contextname="greekOmegaiotasubpsilitonos", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI", direction="l", lccode=0x1FA4, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F6C, 0x0345 }, unicodeslot=0x1FAC, }, [0x1FAD]={ category="lt", contextname="greekOmegaiotasubdasiatonos", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI", direction="l", lccode=0x1FA5, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F6D, 0x0345 }, unicodeslot=0x1FAD, }, [0x1FAE]={ category="lt", contextname="greekOmegaiotasubpsiliperispomeni", description="GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", direction="l", lccode=0x1FA6, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F6E, 0x0345 }, unicodeslot=0x1FAE, }, [0x1FAF]={ category="lt", contextname="greekOmegaiotasubdasiaperispomeni", description="GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", direction="l", lccode=0x1FA7, linebreak="al", shcode=0x03A9, specials={ "char", 0x1F6F, 0x0345 }, unicodeslot=0x1FAF, }, [0x1FB0]={ category="ll", contextname="greekalphavrachy", description="GREEK SMALL LETTER ALPHA WITH VRACHY", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0306 }, uccode=0x1FB8, unicodeslot=0x1FB0, }, [0x1FB1]={ category="ll", contextname="greekalphamacron", description="GREEK SMALL LETTER ALPHA WITH MACRON", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0304 }, uccode=0x1FB9, unicodeslot=0x1FB1, }, [0x1FB2]={ category="ll", contextname="greekalphaiotasubvaria", description="GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1F70, 0x0345 }, unicodeslot=0x1FB2, }, [0x1FB3]={ category="ll", contextname="greekalphaiotasub", description="GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0345 }, uccode=0x1FBC, unicodeslot=0x1FB3, }, [0x1FB4]={ category="ll", contextname="greekalphaiotasubtonos", description="GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03AC, 0x0345 }, unicodeslot=0x1FB4, }, [0x1FB6]={ category="ll", contextname="greekalphaperispomeni", description="GREEK SMALL LETTER ALPHA WITH PERISPOMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x03B1, 0x0342 }, unicodeslot=0x1FB6, }, [0x1FB7]={ category="ll", contextname="greekalphaiotasubperispomeni", description="GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B1, specials={ "char", 0x1FB6, 0x0345 }, unicodeslot=0x1FB7, }, [0x1FB8]={ category="lu", contextname="greekAlphavrachy", description="GREEK CAPITAL LETTER ALPHA WITH VRACHY", direction="l", lccode=0x1FB0, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0306 }, unicodeslot=0x1FB8, }, [0x1FB9]={ category="lu", contextname="greekAlphamacron", description="GREEK CAPITAL LETTER ALPHA WITH MACRON", direction="l", lccode=0x1FB1, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0304 }, unicodeslot=0x1FB9, }, [0x1FBA]={ category="lu", contextname="greekAlphavaria", description="GREEK CAPITAL LETTER ALPHA WITH VARIA", direction="l", lccode=0x1F70, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0300 }, unicodeslot=0x1FBA, }, [0x1FBB]={ category="lu", contextname="greekAlphatonos", description="GREEK CAPITAL LETTER ALPHA WITH OXIA", direction="l", lccode=0x1F71, linebreak="al", shcode=0x0391, specials={ "char", 0x0386 }, unicodeslot=0x1FBB, }, [0x1FBC]={ category="lt", contextname="greekAlphaiotasub", description="GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI", direction="l", lccode=0x1FB3, linebreak="al", shcode=0x0391, specials={ "char", 0x0391, 0x0345 }, unicodeslot=0x1FBC, }, [0x1FBD]={ category="sk", contextname="greekCoronis", description="GREEK KORONIS", direction="on", linebreak="al", specials={ "compat", 0x0020, 0x0313 }, unicodeslot=0x1FBD, }, [0x1FBE]={ category="ll", contextname="greekprosgegrammeni", description="GREEK PROSGEGRAMMENI", direction="l", linebreak="al", specials={ "char", 0x03B9 }, uccode=0x0399, unicodeslot=0x1FBE, }, [0x1FBF]={ category="sk", contextname="greekpsili", description="GREEK PSILI", direction="on", linebreak="al", specials={ "compat", 0x0020, 0x0313 }, unicodeslot=0x1FBF, }, [0x1FC0]={ category="sk", contextname="greekperispomeni", description="GREEK PERISPOMENI", direction="on", linebreak="al", specials={ "compat", 0x0020, 0x0342 }, unicodeslot=0x1FC0, }, [0x1FC1]={ category="sk", contextname="greekdialytikaperispomeni", description="GREEK DIALYTIKA AND PERISPOMENI", direction="on", linebreak="al", specials={ "char", 0x00A8, 0x0342 }, unicodeslot=0x1FC1, }, [0x1FC2]={ category="ll", contextname="greeketaiotasubvaria", description="GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1F74, 0x0345 }, unicodeslot=0x1FC2, }, [0x1FC3]={ category="ll", contextname="greeketaiotasub", description="GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03B7, 0x0345 }, uccode=0x1FCC, unicodeslot=0x1FC3, }, [0x1FC4]={ category="ll", contextname="greeketaiotasubtonos", description="GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03AE, 0x0345 }, unicodeslot=0x1FC4, }, [0x1FC6]={ category="ll", contextname="greeketaperispomeni", description="GREEK SMALL LETTER ETA WITH PERISPOMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x03B7, 0x0342 }, unicodeslot=0x1FC6, }, [0x1FC7]={ category="ll", contextname="greeketaiotasubperispomeni", description="GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03B7, specials={ "char", 0x1FC6, 0x0345 }, unicodeslot=0x1FC7, }, [0x1FC8]={ category="lu", contextname="greekEpsilonvaria", description="GREEK CAPITAL LETTER EPSILON WITH VARIA", direction="l", lccode=0x1F72, linebreak="al", shcode=0x0395, specials={ "char", 0x0395, 0x0300 }, unicodeslot=0x1FC8, }, [0x1FC9]={ category="lu", contextname="greekEpsilontonos", description="GREEK CAPITAL LETTER EPSILON WITH OXIA", direction="l", lccode=0x1F73, linebreak="al", shcode=0x0395, specials={ "char", 0x0388 }, unicodeslot=0x1FC9, }, [0x1FCA]={ category="lu", contextname="greekEtavaria", description="GREEK CAPITAL LETTER ETA WITH VARIA", direction="l", lccode=0x1F74, linebreak="al", shcode=0x0397, specials={ "char", 0x0397, 0x0300 }, unicodeslot=0x1FCA, }, [0x1FCB]={ category="lu", contextname="greekEtatonos", description="GREEK CAPITAL LETTER ETA WITH OXIA", direction="l", lccode=0x1F75, linebreak="al", shcode=0x0397, specials={ "char", 0x0389 }, unicodeslot=0x1FCB, }, [0x1FCC]={ category="lt", contextname="greekEtaiotasub", description="GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI", direction="l", lccode=0x1FC3, linebreak="al", shcode=0x0397, specials={ "char", 0x0397, 0x0345 }, unicodeslot=0x1FCC, }, [0x1FCD]={ category="sk", contextname="greekpsilivaria", description="GREEK PSILI AND VARIA", direction="on", linebreak="al", specials={ "char", 0x1FBF, 0x0300 }, unicodeslot=0x1FCD, }, [0x1FCE]={ category="sk", contextname="greekpsilitonos", description="GREEK PSILI AND OXIA", direction="on", linebreak="al", specials={ "char", 0x1FBF, 0x0301 }, unicodeslot=0x1FCE, }, [0x1FCF]={ category="sk", contextname="greekpsiliperispomeni", description="GREEK PSILI AND PERISPOMENI", direction="on", linebreak="al", specials={ "char", 0x1FBF, 0x0342 }, unicodeslot=0x1FCF, }, [0x1FD0]={ category="ll", contextname="greekiotavrachy", description="GREEK SMALL LETTER IOTA WITH VRACHY", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0306 }, uccode=0x1FD8, unicodeslot=0x1FD0, }, [0x1FD1]={ category="ll", contextname="greekiotamacron", description="GREEK SMALL LETTER IOTA WITH MACRON", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0304 }, uccode=0x1FD9, unicodeslot=0x1FD1, }, [0x1FD2]={ category="ll", contextname="greekiotadialytikavaria", description="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03CA, 0x0300 }, unicodeslot=0x1FD2, }, [0x1FD3]={ category="ll", contextname="greekiotadialytikatonos", description="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x0390 }, unicodeslot=0x1FD3, }, [0x1FD6]={ category="ll", contextname="greekiotaperispomeni", description="GREEK SMALL LETTER IOTA WITH PERISPOMENI", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03B9, 0x0342 }, unicodeslot=0x1FD6, }, [0x1FD7]={ category="ll", contextname="greekiotadialytikaperispomeni", description="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03B9, specials={ "char", 0x03CA, 0x0342 }, unicodeslot=0x1FD7, }, [0x1FD8]={ category="lu", contextname="greekIotavrachy", description="GREEK CAPITAL LETTER IOTA WITH VRACHY", direction="l", lccode=0x1FD0, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0306 }, unicodeslot=0x1FD8, }, [0x1FD9]={ category="lu", contextname="greekIotamacron", description="GREEK CAPITAL LETTER IOTA WITH MACRON", direction="l", lccode=0x1FD1, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0304 }, unicodeslot=0x1FD9, }, [0x1FDA]={ category="lu", contextname="greekIotavaria", description="GREEK CAPITAL LETTER IOTA WITH VARIA", direction="l", lccode=0x1F76, linebreak="al", shcode=0x0399, specials={ "char", 0x0399, 0x0300 }, unicodeslot=0x1FDA, }, [0x1FDB]={ category="lu", contextname="greekIotatonos", description="GREEK CAPITAL LETTER IOTA WITH OXIA", direction="l", lccode=0x1F77, linebreak="al", shcode=0x0399, specials={ "char", 0x038A }, unicodeslot=0x1FDB, }, [0x1FDD]={ category="sk", contextname="greekdasiavaria", description="GREEK DASIA AND VARIA", direction="on", linebreak="al", specials={ "char", 0x1FFE, 0x0300 }, unicodeslot=0x1FDD, }, [0x1FDE]={ category="sk", contextname="greekdasiatonos", description="GREEK DASIA AND OXIA", direction="on", linebreak="al", specials={ "char", 0x1FFE, 0x0301 }, unicodeslot=0x1FDE, }, [0x1FDF]={ category="sk", contextname="greekdasiaperispomeni", description="GREEK DASIA AND PERISPOMENI", direction="on", linebreak="al", specials={ "char", 0x1FFE, 0x0342 }, unicodeslot=0x1FDF, }, [0x1FE0]={ category="ll", contextname="greekupsilonvrachy", description="GREEK SMALL LETTER UPSILON WITH VRACHY", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0306 }, uccode=0x1FE8, unicodeslot=0x1FE0, }, [0x1FE1]={ category="ll", contextname="greekupsilonmacron", description="GREEK SMALL LETTER UPSILON WITH MACRON", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0304 }, uccode=0x1FE9, unicodeslot=0x1FE1, }, [0x1FE2]={ category="ll", contextname="greekupsilondialytikavaria", description="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03CB, 0x0300 }, unicodeslot=0x1FE2, }, [0x1FE3]={ category="ll", contextname="greekupsilondialytikatonos", description="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03B0 }, unicodeslot=0x1FE3, }, [0x1FE4]={ category="ll", contextname="greekrhopsili", description="GREEK SMALL LETTER RHO WITH PSILI", direction="l", linebreak="al", shcode=0x03C1, specials={ "char", 0x03C1, 0x0313 }, unicodeslot=0x1FE4, }, [0x1FE5]={ category="ll", contextname="greekrhodasia", description="GREEK SMALL LETTER RHO WITH DASIA", direction="l", linebreak="al", shcode=0x03C1, specials={ "char", 0x03C1, 0x0314 }, uccode=0x1FEC, unicodeslot=0x1FE5, }, [0x1FE6]={ category="ll", contextname="greekupsilonperispomeni", description="GREEK SMALL LETTER UPSILON WITH PERISPOMENI", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03C5, 0x0342 }, unicodeslot=0x1FE6, }, [0x1FE7]={ category="ll", contextname="greekupsilondialytikaperispomeni", description="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI", direction="l", linebreak="al", shcode=0x03C5, specials={ "char", 0x03CB, 0x0342 }, unicodeslot=0x1FE7, }, [0x1FE8]={ category="lu", contextname="greekUpsilonvrachy", description="GREEK CAPITAL LETTER UPSILON WITH VRACHY", direction="l", lccode=0x1FE0, linebreak="al", shcode=0x03A5, specials={ "char", 0x03A5, 0x0306 }, unicodeslot=0x1FE8, }, [0x1FE9]={ category="lu", contextname="greekUpsilonmacron", description="GREEK CAPITAL LETTER UPSILON WITH MACRON", direction="l", lccode=0x1FE1, linebreak="al", shcode=0x03A5, specials={ "char", 0x03A5, 0x0304 }, unicodeslot=0x1FE9, }, [0x1FEA]={ category="lu", contextname="greekUpsilonvaria", description="GREEK CAPITAL LETTER UPSILON WITH VARIA", direction="l", lccode=0x1F7A, linebreak="al", shcode=0x03A5, specials={ "char", 0x03A5, 0x0300 }, unicodeslot=0x1FEA, }, [0x1FEB]={ category="lu", contextname="greekUpsilontonos", description="GREEK CAPITAL LETTER UPSILON WITH OXIA", direction="l", lccode=0x1F7B, linebreak="al", shcode=0x03A5, specials={ "char", 0x038E }, unicodeslot=0x1FEB, }, [0x1FEC]={ category="lu", contextname="greekRhodasia", description="GREEK CAPITAL LETTER RHO WITH DASIA", direction="l", lccode=0x1FE5, linebreak="al", shcode=0x03A1, specials={ "char", 0x03A1, 0x0314 }, unicodeslot=0x1FEC, }, [0x1FED]={ category="sk", contextname="greekdialytikavaria", description="GREEK DIALYTIKA AND VARIA", direction="on", linebreak="al", specials={ "char", 0x00A8, 0x0300 }, unicodeslot=0x1FED, }, [0x1FEE]={ category="sk", contextname="greekdialytikatonos", description="GREEK DIALYTIKA AND OXIA", direction="on", linebreak="al", specials={ "char", 0x0385 }, unicodeslot=0x1FEE, }, [0x1FEF]={ category="sk", contextname="greekvaria", description="GREEK VARIA", direction="on", linebreak="al", specials={ "char", 0x0060 }, unicodeslot=0x1FEF, }, [0x1FF2]={ category="ll", contextname="greekomegaiotasubvaria", description="GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1F7C, 0x0345 }, unicodeslot=0x1FF2, }, [0x1FF3]={ category="ll", contextname="greekomegaiotasub", description="GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03C9, 0x0345 }, uccode=0x1FFC, unicodeslot=0x1FF3, }, [0x1FF4]={ category="ll", contextname="greekomegaiotasubtonos", description="GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03CE, 0x0345 }, unicodeslot=0x1FF4, }, [0x1FF6]={ category="ll", contextname="greekomegaperispomeni", description="GREEK SMALL LETTER OMEGA WITH PERISPOMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x03C9, 0x0342 }, unicodeslot=0x1FF6, }, [0x1FF7]={ category="ll", contextname="greekomegaiotasubperispomeni", description="GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI", direction="l", linebreak="al", shcode=0x03C9, specials={ "char", 0x1FF6, 0x0345 }, unicodeslot=0x1FF7, }, [0x1FF8]={ category="lu", contextname="greekOmicronvaria", description="GREEK CAPITAL LETTER OMICRON WITH VARIA", direction="l", lccode=0x1F78, linebreak="al", shcode=0x039F, specials={ "char", 0x039F, 0x0300 }, unicodeslot=0x1FF8, }, [0x1FF9]={ category="lu", contextname="greekOmicrontonos", description="GREEK CAPITAL LETTER OMICRON WITH OXIA", direction="l", lccode=0x1F79, linebreak="al", shcode=0x039F, specials={ "char", 0x038C }, unicodeslot=0x1FF9, }, [0x1FFA]={ category="lu", contextname="greekOmegavaria", description="GREEK CAPITAL LETTER OMEGA WITH VARIA", direction="l", lccode=0x1F7C, linebreak="al", shcode=0x03A9, specials={ "char", 0x03A9, 0x0300 }, unicodeslot=0x1FFA, }, [0x1FFB]={ category="lu", contextname="greekOmegatonos", description="GREEK CAPITAL LETTER OMEGA WITH OXIA", direction="l", lccode=0x1F7D, linebreak="al", shcode=0x03A9, specials={ "char", 0x038F }, unicodeslot=0x1FFB, }, [0x1FFC]={ category="lt", contextname="greekOmegaiotasub", description="GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI", direction="l", lccode=0x1FF3, linebreak="al", shcode=0x03A9, specials={ "char", 0x03A9, 0x0345 }, unicodeslot=0x1FFC, }, [0x1FFD]={ category="sk", contextname="greekoxia", description="GREEK OXIA", direction="on", linebreak="bb", specials={ "char", 0x00B4 }, unicodeslot=0x1FFD, }, [0x1FFE]={ category="sk", contextname="greekdasia", description="GREEK DASIA", direction="on", linebreak="al", specials={ "compat", 0x0020, 0x0314 }, unicodeslot=0x1FFE, }, [0x2000]={ category="zs", description="EN QUAD", direction="ws", linebreak="ba", specials={ "char", 0x2002 }, unicodeslot=0x2000, }, [0x2001]={ category="zs", description="EM QUAD", direction="ws", linebreak="ba", specials={ "char", 0x2003 }, unicodeslot=0x2001, }, [0x2002]={ adobename="enspace", category="zs", contextname="enspace", description="EN SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2002, }, [0x2003]={ category="zs", contextname="emspace", description="EM SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2003, }, [0x2004]={ category="zs", contextname="threeperemspace", description="THREE-PER-EM SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2004, }, [0x2005]={ category="zs", contextname="fourperemspace", description="FOUR-PER-EM SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2005, }, [0x2006]={ category="zs", contextname="sixperemspace", description="SIX-PER-EM SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2006, }, [0x2007]={ category="zs", contextname="figurespace", description="FIGURE SPACE", direction="ws", linebreak="gl", specials={ "nobreak", 0x0020 }, unicodeslot=0x2007, }, [0x2008]={ category="zs", contextname="punctuationspace", description="PUNCTUATION SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2008, }, [0x2009]={ category="zs", contextname="breakablethinspace", description="THIN SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x2009, }, [0x200A]={ category="zs", contextname="hairspace", description="HAIR SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x200A, }, [0x200B]={ adobename="zerowidthspace", category="cf", contextname="zerowidthspace", description="ZERO WIDTH SPACE", direction="bn", linebreak="zw", unicodeslot=0x200B, }, [0x200C]={ adobename="zerowidthnonjoiner", arabic="u", category="cf", contextname="zwnj", description="ZERO WIDTH NON-JOINER", direction="bn", linebreak="cm", unicodeslot=0x200C, }, [0x200D]={ adobename="afii301", arabic="c", category="cf", contextname="zwj", description="ZERO WIDTH JOINER", direction="bn", linebreak="cm", unicodeslot=0x200D, }, [0x200E]={ adobename="afii299", category="cf", description="LEFT-TO-RIGHT MARK", direction="l", linebreak="cm", unicodeslot=0x200E, }, [0x200F]={ adobename="afii300", category="cf", description="RIGHT-TO-LEFT MARK", direction="r", linebreak="cm", unicodeslot=0x200F, }, [0x2010]={ adobename="hyphentwo", category="pd", cjkwd="a", description="HYPHEN", direction="on", linebreak="ba", unicodeslot=0x2010, }, [0x2011]={ category="pd", description="NON-BREAKING HYPHEN", direction="on", linebreak="gl", specials={ "nobreak", 0x2010 }, unicodeslot=0x2011, }, [0x2012]={ adobename="figuredash", category="pd", contextname="textminus", description="FIGURE DASH", direction="on", linebreak="ba", unicodeslot=0x2012, }, [0x2013]={ adobename="endash", category="pd", cjkwd="a", contextname="endash", description="EN DASH", direction="on", linebreak="ba", unicodeslot=0x2013, }, [0x2014]={ adobename="emdash", category="pd", cjkwd="a", contextname="emdash", description="EM DASH", direction="on", linebreak="b2", unicodeslot=0x2014, }, [0x2015]={ adobename="horizontalbar", category="pd", cjkwd="a", contextname="texthorizontalbar", description="HORIZONTAL BAR", direction="on", linebreak="ai", unicodeslot=0x2015, }, [0x2016]={ adobename="dblverticalbar", category="po", cjkwd="a", description="DOUBLE VERTICAL LINE", direction="on", linebreak="ai", mathspec={ { class="delimiter", name="Vert", }, { class="nothing", name="Arrowvert", }, { class="open", name="lVert", }, { class="close", name="rVert", }, }, unicodeslot=0x2016, }, [0x2017]={ adobename="underscoredbl", category="po", description="DOUBLE LOW LINE", direction="on", linebreak="al", specials={ "compat", 0x0020, 0x0333 }, unicodeslot=0x2017, }, [0x2018]={ adobename="quoteleft", category="pi", cjkwd="a", contextname="quoteleft", description="LEFT SINGLE QUOTATION MARK", direction="on", linebreak="qu", unicodeslot=0x2018, }, [0x2019]={ adobename="quoteright", category="pf", cjkwd="a", contextname="quoteright", description="RIGHT SINGLE QUOTATION MARK", direction="on", linebreak="qu", unicodeslot=0x2019, }, [0x201A]={ adobename="quotesinglbase", category="ps", contextname="quotesinglebase", description="SINGLE LOW-0x0009 QUOTATION MARK", direction="on", linebreak="op", unicodeslot=0x201A, }, [0x201B]={ adobename="quotereversed", category="pi", description="SINGLE HIGH-REVERSED-0x0009 QUOTATION MARK", direction="on", linebreak="qu", unicodeslot=0x201B, }, [0x201C]={ adobename="quotedblleft", category="pi", cjkwd="a", contextname="quotedblleft", description="LEFT DOUBLE QUOTATION MARK", direction="on", linebreak="qu", unicodeslot=0x201C, }, [0x201D]={ adobename="quotedblright", category="pf", cjkwd="a", contextname="quotedblright", description="RIGHT DOUBLE QUOTATION MARK", direction="on", linebreak="qu", unicodeslot=0x201D, }, [0x201E]={ adobename="quotedblbase", category="ps", contextname="quotedblbase", description="DOUBLE LOW-0x0009 QUOTATION MARK", direction="on", linebreak="op", unicodeslot=0x201E, }, [0x201F]={ category="pi", description="DOUBLE HIGH-REVERSED-0x0009 QUOTATION MARK", direction="on", linebreak="qu", unicodeslot=0x201F, }, [0x2020]={ adobename="dagger", category="po", cjkwd="a", contextname="textdag", description="DAGGER", direction="on", linebreak="ai", mathspec={ { class="binary", name="dagger", }, { class="box", name="dag", }, }, unicodeslot=0x2020, }, [0x2021]={ adobename="daggerdbl", category="po", cjkwd="a", contextname="textddag", description="DOUBLE DAGGER", direction="on", linebreak="ai", mathspec={ { class="binary", name="ddagger", }, { class="box", name="ddag", }, }, unicodeslot=0x2021, }, [0x2022]={ adobename="bullet", category="po", cjkwd="a", contextname="textbullet", description="BULLET", direction="on", linebreak="al", mathclass="binary", mathname="bullet", unicodeslot=0x2022, }, [0x2023]={ category="po", description="TRIANGULAR BULLET", direction="on", linebreak="al", unicodeslot=0x2023, }, [0x2024]={ adobename="onedotenleader", category="po", cjkwd="a", description="ONE DOT LEADER", direction="on", linebreak="in", specials={ "compat", 0x002E }, unicodeslot=0x2024, }, [0x2025]={ adobename="twodotleader", category="po", cjkwd="a", description="TWO DOT LEADER", direction="on", linebreak="in", specials={ "compat", 0x002E, 0x002E }, unicodeslot=0x2025, }, [0x2026]={ adobename="ellipsis", category="po", cjkwd="a", contextname="textellipsis", description="HORIZONTAL ELLIPSIS", direction="on", linebreak="in", mathspec={ { class="inner", name="ldots", }, { class="inner", name="dots", }, }, specials={ "compat", 0x002E, 0x002E, 0x002E }, unicodeslot=0x2026, }, [0x2027]={ category="po", cjkwd="a", description="HYPHENATION POINT", direction="on", linebreak="ba", unicodeslot=0x2027, }, [0x2028]={ category="zl", description="LINE SEPARATOR", direction="ws", linebreak="bk", unicodeslot=0x2028, }, [0x2029]={ category="zp", description="PARAGRAPH SEPARATOR", direction="b", linebreak="bk", unicodeslot=0x2029, }, [0x202A]={ category="cf", description="LEFT-TO-RIGHT EMBEDDING", direction="lre", linebreak="cm", unicodeslot=0x202A, }, [0x202B]={ category="cf", description="RIGHT-TO-LEFT EMBEDDING", direction="rle", linebreak="cm", unicodeslot=0x202B, }, [0x202C]={ adobename="afii61573", category="cf", description="POP DIRECTIONAL FORMATTING", direction="pdf", linebreak="cm", unicodeslot=0x202C, }, [0x202D]={ adobename="afii61574", category="cf", description="LEFT-TO-RIGHT OVERRIDE", direction="lro", linebreak="cm", unicodeslot=0x202D, }, [0x202E]={ adobename="afii61575", category="cf", description="RIGHT-TO-LEFT OVERRIDE", direction="rlo", linebreak="cm", unicodeslot=0x202E, }, [0x202F]={ category="zs", contextname="narrownobreakspace", description="NARROW NO-BREAK SPACE", direction="cs", linebreak="gl", specials={ "nobreak", 0x0020 }, unicodeslot=0x202F, }, [0x2030]={ adobename="perthousand", category="po", cjkwd="a", contextname="perthousand", description="PER MILLE SIGN", direction="et", linebreak="po", unicodeslot=0x2030, }, [0x2031]={ category="po", description="PER TEN THOUSAND SIGN", direction="et", linebreak="po", unicodeslot=0x2031, }, [0x2032]={ adobename="minute", category="po", cjkwd="a", description="PRIME", direction="et", linebreak="po", mathclass="nothing", mathname="prime", unicodeslot=0x2032, }, [0x2033]={ adobename="second", category="po", cjkwd="a", description="DOUBLE PRIME", direction="et", linebreak="po", mathclass="nothing", mathname="doubleprime", specials={ "compat", 0x2032, 0x2032 }, unicodeslot=0x2033, }, [0x2034]={ category="po", description="TRIPLE PRIME", direction="et", linebreak="po", mathclass="nothing", mathname="tripleprime", specials={ "compat", 0x2032, 0x2032, 0x2032 }, unicodeslot=0x2034, }, [0x2035]={ adobename="primereversed", category="po", cjkwd="a", description="REVERSED PRIME", direction="on", linebreak="po", unicodeslot=0x2035, }, [0x2036]={ category="po", description="REVERSED DOUBLE PRIME", direction="on", linebreak="po", specials={ "compat", 0x2035, 0x2035 }, unicodeslot=0x2036, }, [0x2037]={ category="po", description="REVERSED TRIPLE PRIME", direction="on", linebreak="po", specials={ "compat", 0x2035, 0x2035, 0x2035 }, unicodeslot=0x2037, }, [0x2038]={ category="po", description="CARET", direction="on", linebreak="al", unicodeslot=0x2038, }, [0x2039]={ adobename="guilsinglleft", category="pi", contextname="guilsingleleft", description="SINGLE LEFT-POINTING ANGLE QUOTATION MARK", direction="on", linebreak="qu", mirror=0x203A, unicodeslot=0x2039, }, [0x203A]={ adobename="guilsinglright", category="pf", contextname="guilsingleright", description="SINGLE RIGHT-POINTING ANGLE QUOTATION MARK", direction="on", linebreak="qu", mirror=0x2039, unicodeslot=0x203A, }, [0x203B]={ adobename="referencemark", category="po", cjkwd="a", description="REFERENCE MARK", direction="on", linebreak="ai", unicodeslot=0x203B, }, [0x203C]={ adobename="exclamdbl", category="po", description="DOUBLE EXCLAMATION MARK", direction="on", linebreak="ns", specials={ "compat", 0x0021, 0x0021 }, unicodeslot=0x203C, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x203D]={ category="po", description="INTERROBANG", direction="on", linebreak="ns", unicodeslot=0x203D, }, [0x203E]={ adobename="overline", category="po", cjkwd="a", description="OVERLINE", direction="on", linebreak="al", mathspec={ { class="topaccent", name="overbar", }, { class="botaccent", name="underbar", }, }, specials={ "compat", 0x0020, 0x0305 }, unicodeslot=0x203E, }, [0x203F]={ category="pc", description="UNDERTIE", direction="on", linebreak="al", unicodeslot=0x203F, }, [0x2040]={ category="pc", description="CHARACTER TIE", direction="on", linebreak="al", unicodeslot=0x2040, }, [0x2041]={ category="po", description="CARET INSERTION POINT", direction="on", linebreak="al", unicodeslot=0x2041, }, [0x2042]={ adobename="asterism", category="po", description="ASTERISM", direction="on", linebreak="al", unicodeslot=0x2042, }, [0x2043]={ category="po", description="HYPHEN BULLET", direction="on", linebreak="al", unicodeslot=0x2043, }, [0x2044]={ adobename="fraction", category="sm", contextname="textfraction", description="FRACTION SLASH", direction="cs", linebreak="is", mathspec={ { class="ordinary", name="slash", }, { class="close", name="solidus", }, }, unicodeslot=0x2044, }, [0x2045]={ category="ps", description="LEFT SQUARE BRACKET WITH QUILL", direction="on", linebreak="op", mirror=0x2046, unicodeslot=0x2045, }, [0x2046]={ category="pe", description="RIGHT SQUARE BRACKET WITH QUILL", direction="on", linebreak="cl", mirror=0x2045, unicodeslot=0x2046, }, [0x2047]={ category="po", description="DOUBLE QUESTION MARK", direction="on", linebreak="ns", specials={ "compat", 0x003F, 0x003F }, unicodeslot=0x2047, }, [0x2048]={ category="po", description="QUESTION EXCLAMATION MARK", direction="on", linebreak="ns", specials={ "compat", 0x003F, 0x0021 }, unicodeslot=0x2048, }, [0x2049]={ category="po", description="EXCLAMATION QUESTION MARK", direction="on", linebreak="ns", specials={ "compat", 0x0021, 0x003F }, unicodeslot=0x2049, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x204A]={ category="po", description="TIRONIAN SIGN ET", direction="on", linebreak="al", unicodeslot=0x204A, }, [0x204B]={ category="po", description="REVERSED PILCROW SIGN", direction="on", linebreak="al", unicodeslot=0x204B, }, [0x204C]={ category="po", description="BLACK LEFTWARDS BULLET", direction="on", linebreak="al", unicodeslot=0x204C, }, [0x204D]={ category="po", description="BLACK RIGHTWARDS BULLET", direction="on", linebreak="al", unicodeslot=0x204D, }, [0x204E]={ category="po", description="LOW ASTERISK", direction="on", linebreak="al", unicodeslot=0x204E, }, [0x204F]={ category="po", description="REVERSED SEMICOLON", direction="on", linebreak="al", unicodeslot=0x204F, }, [0x2050]={ category="po", description="CLOSE UP", direction="on", linebreak="al", unicodeslot=0x2050, }, [0x2051]={ category="po", description="TWO ASTERISKS ALIGNED VERTICALLY", direction="on", linebreak="al", unicodeslot=0x2051, }, [0x2052]={ category="sm", description="COMMERCIAL MINUS SIGN", direction="on", linebreak="al", unicodeslot=0x2052, }, [0x2053]={ category="po", description="SWUNG DASH", direction="on", linebreak="al", unicodeslot=0x2053, }, [0x2054]={ category="pc", description="INVERTED UNDERTIE", direction="on", linebreak="al", unicodeslot=0x2054, }, [0x2055]={ category="po", description="FLOWER PUNCTUATION MARK", direction="on", linebreak="al", unicodeslot=0x2055, }, [0x2056]={ category="po", description="THREE DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x2056, }, [0x2057]={ category="po", description="QUADRUPLE PRIME", direction="on", linebreak="al", specials={ "compat", 0x2032, 0x2032, 0x2032, 0x2032 }, unicodeslot=0x2057, }, [0x2058]={ category="po", description="FOUR DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x2058, }, [0x2059]={ category="po", description="FIVE DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x2059, }, [0x205A]={ category="po", description="TWO DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x205A, }, [0x205B]={ category="po", description="FOUR DOT MARK", direction="on", linebreak="ba", unicodeslot=0x205B, }, [0x205C]={ category="po", description="DOTTED CROSS", direction="on", linebreak="al", unicodeslot=0x205C, }, [0x205D]={ category="po", description="TRICOLON", direction="on", linebreak="ba", unicodeslot=0x205D, }, [0x205E]={ category="po", description="VERTICAL FOUR DOTS", direction="on", linebreak="ba", unicodeslot=0x205E, }, [0x205F]={ category="zs", contextname="medspace", description="MEDIUM MATHEMATICAL SPACE", direction="ws", linebreak="ba", specials={ "compat", 0x0020 }, unicodeslot=0x205F, }, [0x2060]={ category="cf", description="WORD JOINER", direction="bn", linebreak="wj", unicodeslot=0x2060, }, [0x2061]={ category="cf", comment="maybe: nulloperator", contextname="relax", description="FUNCTION APPLICATION", direction="bn", linebreak="al", unicodeslot=0x2061, }, [0x2062]={ category="cf", description="INVISIBLE TIMES", direction="bn", linebreak="al", unicodeslot=0x2062, }, [0x2063]={ category="cf", description="INVISIBLE SEPARATOR", direction="bn", linebreak="al", unicodeslot=0x2063, }, [0x2064]={ category="cf", description="INVISIBLE PLUS", direction="bn", linebreak="al", unicodeslot=0x2064, }, [0x206A]={ category="cf", description="INHIBIT SYMMETRIC SWAPPING", direction="bn", linebreak="cm", unicodeslot=0x206A, }, [0x206B]={ category="cf", description="ACTIVATE SYMMETRIC SWAPPING", direction="bn", linebreak="cm", unicodeslot=0x206B, }, [0x206C]={ category="cf", description="INHIBIT ARABIC FORM SHAPING", direction="bn", linebreak="cm", unicodeslot=0x206C, }, [0x206D]={ category="cf", description="ACTIVATE ARABIC FORM SHAPING", direction="bn", linebreak="cm", unicodeslot=0x206D, }, [0x206E]={ category="cf", description="NATIONAL DIGIT SHAPES", direction="bn", linebreak="cm", unicodeslot=0x206E, }, [0x206F]={ category="cf", description="NOMINAL DIGIT SHAPES", direction="bn", linebreak="cm", unicodeslot=0x206F, }, [0x2070]={ adobename="zerosuperior", category="no", description="SUPERSCRIPT ZERO", direction="en", linebreak="al", specials={ "super", 0x0030 }, unicodeslot=0x2070, }, [0x2071]={ category="ll", description="SUPERSCRIPT LATIN SMALL LETTER I", direction="l", linebreak="al", specials={ "super", 0x0069 }, unicodeslot=0x2071, }, [0x2074]={ adobename="foursuperior", category="no", cjkwd="a", description="SUPERSCRIPT FOUR", direction="en", linebreak="ai", specials={ "super", 0x0034 }, unicodeslot=0x2074, }, [0x2075]={ adobename="fivesuperior", category="no", description="SUPERSCRIPT FIVE", direction="en", linebreak="al", specials={ "super", 0x0035 }, unicodeslot=0x2075, }, [0x2076]={ adobename="sixsuperior", category="no", description="SUPERSCRIPT SIX", direction="en", linebreak="al", specials={ "super", 0x0036 }, unicodeslot=0x2076, }, [0x2077]={ adobename="sevensuperior", category="no", description="SUPERSCRIPT SEVEN", direction="en", linebreak="al", specials={ "super", 0x0037 }, unicodeslot=0x2077, }, [0x2078]={ adobename="eightsuperior", category="no", description="SUPERSCRIPT EIGHT", direction="en", linebreak="al", specials={ "super", 0x0038 }, unicodeslot=0x2078, }, [0x2079]={ adobename="ninesuperior", category="no", description="SUPERSCRIPT NINE", direction="en", linebreak="al", specials={ "super", 0x0039 }, unicodeslot=0x2079, }, [0x207A]={ adobename="plussuperior", category="sm", description="SUPERSCRIPT PLUS SIGN", direction="es", linebreak="al", mathclass="binary", mathname="positivesign", specials={ "super", 0x002B }, unicodeslot=0x207A, }, [0x207B]={ category="sm", description="SUPERSCRIPT MINUS", direction="es", linebreak="al", mathclass="binary", mathname="negativesign", specials={ "super", 0x2212 }, unicodeslot=0x207B, }, [0x207C]={ adobename="equalsuperior", category="sm", description="SUPERSCRIPT EQUALS SIGN", direction="on", linebreak="al", specials={ "super", 0x003D }, unicodeslot=0x207C, }, [0x207D]={ adobename="parenleftsuperior", category="ps", description="SUPERSCRIPT LEFT PARENTHESIS", direction="on", linebreak="op", mirror=0x207E, specials={ "super", 0x0028 }, unicodeslot=0x207D, }, [0x207E]={ adobename="parenrightsuperior", category="pe", description="SUPERSCRIPT RIGHT PARENTHESIS", direction="on", linebreak="cl", mirror=0x207D, specials={ "super", 0x0029 }, unicodeslot=0x207E, }, [0x207F]={ adobename="nsuperior", category="ll", cjkwd="a", description="SUPERSCRIPT LATIN SMALL LETTER N", direction="l", linebreak="ai", specials={ "super", 0x006E }, unicodeslot=0x207F, }, [0x2080]={ adobename="zeroinferior", category="no", description="SUBSCRIPT ZERO", direction="en", linebreak="al", specials={ "sub", 0x0030 }, unicodeslot=0x2080, }, [0x2081]={ adobename="oneinferior", category="no", cjkwd="a", description="SUBSCRIPT ONE", direction="en", linebreak="ai", specials={ "sub", 0x0031 }, unicodeslot=0x2081, }, [0x2082]={ adobename="twoinferior", category="no", cjkwd="a", description="SUBSCRIPT TWO", direction="en", linebreak="ai", specials={ "sub", 0x0032 }, unicodeslot=0x2082, }, [0x2083]={ adobename="threeinferior", category="no", cjkwd="a", description="SUBSCRIPT THREE", direction="en", linebreak="ai", specials={ "sub", 0x0033 }, unicodeslot=0x2083, }, [0x2084]={ adobename="fourinferior", category="no", cjkwd="a", description="SUBSCRIPT FOUR", direction="en", linebreak="ai", specials={ "sub", 0x0034 }, unicodeslot=0x2084, }, [0x2085]={ adobename="fiveinferior", category="no", description="SUBSCRIPT FIVE", direction="en", linebreak="al", specials={ "sub", 0x0035 }, unicodeslot=0x2085, }, [0x2086]={ adobename="sixinferior", category="no", description="SUBSCRIPT SIX", direction="en", linebreak="al", specials={ "sub", 0x0036 }, unicodeslot=0x2086, }, [0x2087]={ adobename="seveninferior", category="no", description="SUBSCRIPT SEVEN", direction="en", linebreak="al", specials={ "sub", 0x0037 }, unicodeslot=0x2087, }, [0x2088]={ adobename="eightinferior", category="no", description="SUBSCRIPT EIGHT", direction="en", linebreak="al", specials={ "sub", 0x0038 }, unicodeslot=0x2088, }, [0x2089]={ adobename="nineinferior", category="no", description="SUBSCRIPT NINE", direction="en", linebreak="al", specials={ "sub", 0x0039 }, unicodeslot=0x2089, }, [0x208A]={ category="sm", description="SUBSCRIPT PLUS SIGN", direction="es", linebreak="al", specials={ "sub", 0x002B }, unicodeslot=0x208A, }, [0x208B]={ category="sm", description="SUBSCRIPT MINUS", direction="es", linebreak="al", specials={ "sub", 0x2212 }, unicodeslot=0x208B, }, [0x208C]={ category="sm", description="SUBSCRIPT EQUALS SIGN", direction="on", linebreak="al", specials={ "sub", 0x003D }, unicodeslot=0x208C, }, [0x208D]={ adobename="parenleftinferior", category="ps", description="SUBSCRIPT LEFT PARENTHESIS", direction="on", linebreak="op", mirror=0x208E, specials={ "sub", 0x0028 }, unicodeslot=0x208D, }, [0x208E]={ adobename="parenrightinferior", category="pe", description="SUBSCRIPT RIGHT PARENTHESIS", direction="on", linebreak="cl", mirror=0x208D, specials={ "sub", 0x0029 }, unicodeslot=0x208E, }, [0x2090]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER A", direction="l", linebreak="al", specials={ "sub", 0x0061 }, unicodeslot=0x2090, }, [0x2091]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER E", direction="l", linebreak="al", specials={ "sub", 0x0065 }, unicodeslot=0x2091, }, [0x2092]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER O", direction="l", linebreak="al", specials={ "sub", 0x006F }, unicodeslot=0x2092, }, [0x2093]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER X", direction="l", linebreak="al", specials={ "sub", 0x0078 }, unicodeslot=0x2093, }, [0x2094]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER SCHWA", direction="l", linebreak="al", specials={ "sub", 0x0259 }, unicodeslot=0x2094, }, [0x2095]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER H", direction="l", linebreak="al", specials={ "sub", 0x0068 }, unicodeslot=0x2095, }, [0x2096]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER K", direction="l", linebreak="al", specials={ "sub", 0x006B }, unicodeslot=0x2096, }, [0x2097]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER L", direction="l", linebreak="al", specials={ "sub", 0x006C }, unicodeslot=0x2097, }, [0x2098]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER M", direction="l", linebreak="al", specials={ "sub", 0x006D }, unicodeslot=0x2098, }, [0x2099]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER N", direction="l", linebreak="al", specials={ "sub", 0x006E }, unicodeslot=0x2099, }, [0x209A]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER P", direction="l", linebreak="al", specials={ "sub", 0x0070 }, unicodeslot=0x209A, }, [0x209B]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER S", direction="l", linebreak="al", specials={ "sub", 0x0073 }, unicodeslot=0x209B, }, [0x209C]={ category="lm", description="LATIN SUBSCRIPT SMALL LETTER T", direction="l", linebreak="al", specials={ "sub", 0x0074 }, unicodeslot=0x209C, }, [0x20A0]={ category="sc", description="EURO-CURRENCY SIGN", direction="et", linebreak="pr", unicodeslot=0x20A0, }, [0x20A1]={ adobename="colonsign", category="sc", description="COLON SIGN", direction="et", linebreak="pr", unicodeslot=0x20A1, }, [0x20A2]={ adobename="cruzeiro", category="sc", description="CRUZEIRO SIGN", direction="et", linebreak="pr", unicodeslot=0x20A2, }, [0x20A3]={ adobename="franc", category="sc", description="FRENCH FRANC SIGN", direction="et", linebreak="pr", unicodeslot=0x20A3, }, [0x20A4]={ adobename="lira", category="sc", description="LIRA SIGN", direction="et", linebreak="pr", unicodeslot=0x20A4, }, [0x20A5]={ category="sc", description="MILL SIGN", direction="et", linebreak="pr", unicodeslot=0x20A5, }, [0x20A6]={ category="sc", description="NAIRA SIGN", direction="et", linebreak="pr", unicodeslot=0x20A6, }, [0x20A7]={ adobename="peseta", category="sc", description="PESETA SIGN", direction="et", linebreak="po", unicodeslot=0x20A7, }, [0x20A8]={ category="sc", description="RUPEE SIGN", direction="et", linebreak="pr", specials={ "compat", 0x0052, 0x0073 }, unicodeslot=0x20A8, }, [0x20A9]={ adobename="won", category="sc", cjkwd="h", description="WON SIGN", direction="et", linebreak="pr", unicodeslot=0x20A9, }, [0x20AA]={ adobename="sheqelhebrew", category="sc", description="NEW SHEQEL SIGN", direction="et", linebreak="pr", unicodeslot=0x20AA, }, [0x20AB]={ adobename="dong", category="sc", contextname="textdong", description="DONG SIGN", direction="et", linebreak="pr", unicodeslot=0x20AB, }, [0x20AC]={ adobename="euro", category="sc", cjkwd="a", contextname="texteuro", description="EURO SIGN", direction="et", linebreak="pr", unicodeslot=0x20AC, }, [0x20AD]={ category="sc", description="KIP SIGN", direction="et", linebreak="pr", unicodeslot=0x20AD, }, [0x20AE]={ category="sc", description="TUGRIK SIGN", direction="et", linebreak="pr", unicodeslot=0x20AE, }, [0x20AF]={ category="sc", description="DRACHMA SIGN", direction="et", linebreak="pr", unicodeslot=0x20AF, }, [0x20B0]={ category="sc", description="GERMAN PENNY SIGN", direction="et", linebreak="pr", unicodeslot=0x20B0, }, [0x20B1]={ category="sc", description="PESO SIGN", direction="et", linebreak="pr", unicodeslot=0x20B1, }, [0x20B2]={ category="sc", description="GUARANI SIGN", direction="et", linebreak="pr", unicodeslot=0x20B2, }, [0x20B3]={ category="sc", description="AUSTRAL SIGN", direction="et", linebreak="pr", unicodeslot=0x20B3, }, [0x20B4]={ category="sc", description="HRYVNIA SIGN", direction="et", linebreak="pr", unicodeslot=0x20B4, }, [0x20B5]={ category="sc", description="CEDI SIGN", direction="et", linebreak="pr", unicodeslot=0x20B5, }, [0x20B6]={ category="sc", description="LIVRE TOURNOIS SIGN", direction="et", linebreak="po", unicodeslot=0x20B6, }, [0x20B7]={ category="sc", description="SPESMILO SIGN", direction="et", linebreak="pr", unicodeslot=0x20B7, }, [0x20B8]={ category="sc", description="TENGE SIGN", direction="et", linebreak="pr", unicodeslot=0x20B8, }, [0x20B9]={ category="sc", description="INDIAN RUPEE SIGN", direction="et", linebreak="pr", unicodeslot=0x20B9, }, [0x20BA]={ category="sc", description="TURKISH LIRA SIGN", direction="et", linebreak="pr", unicodeslot=0x20BA, }, [0x20D0]={ category="mn", description="COMBINING LEFT HARPOON ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20D0, }, [0x20D1]={ category="mn", description="COMBINING RIGHT HARPOON ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20D1, }, [0x20D2]={ category="mn", description="COMBINING LONG VERTICAL LINE OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20D2, }, [0x20D3]={ category="mn", description="COMBINING SHORT VERTICAL LINE OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20D3, }, [0x20D4]={ category="mn", description="COMBINING ANTICLOCKWISE ARROW ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20D4, }, [0x20D5]={ category="mn", description="COMBINING CLOCKWISE ARROW ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20D5, }, [0x20D6]={ category="mn", description="COMBINING LEFT ARROW ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20D6, }, [0x20D7]={ category="mn", description="COMBINING RIGHT ARROW ABOVE", direction="nsm", linebreak="cm", mathclass="topaccent", mathname="vec", unicodeslot=0x20D7, }, [0x20D8]={ category="mn", description="COMBINING RING OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20D8, }, [0x20D9]={ category="mn", description="COMBINING CLOCKWISE RING OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20D9, }, [0x20DA]={ category="mn", description="COMBINING ANTICLOCKWISE RING OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20DA, }, [0x20DB]={ category="mn", description="COMBINING THREE DOTS ABOVE", direction="nsm", linebreak="cm", mathclass="topaccent", mathname="dddot", unicodeslot=0x20DB, }, [0x20DC]={ category="mn", description="COMBINING FOUR DOTS ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20DC, }, [0x20DD]={ category="me", description="COMBINING ENCLOSING CIRCLE", direction="nsm", linebreak="cm", mathspec={ { class="default", name="bigcircle", }, { class="binary", name="bigcircle", }, }, unicodeslot=0x20DD, }, [0x20DE]={ category="me", description="COMBINING ENCLOSING SQUARE", direction="nsm", linebreak="cm", mathclass="default", mathname="bigsquare", unicodeslot=0x20DE, }, [0x20DF]={ category="me", description="COMBINING ENCLOSING DIAMOND", direction="nsm", linebreak="cm", mathclass="default", mathname="bigdiamond", unicodeslot=0x20DF, }, [0x20E0]={ category="me", description="COMBINING ENCLOSING CIRCLE BACKSLASH", direction="nsm", linebreak="cm", unicodeslot=0x20E0, }, [0x20E1]={ category="mn", description="COMBINING LEFT RIGHT ARROW ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20E1, }, [0x20E2]={ category="me", description="COMBINING ENCLOSING SCREEN", direction="nsm", linebreak="cm", unicodeslot=0x20E2, }, [0x20E3]={ category="me", description="COMBINING ENCLOSING KEYCAP", direction="nsm", linebreak="cm", unicodeslot=0x20E3, }, [0x20E4]={ category="me", description="COMBINING ENCLOSING UPWARD POINTING TRIANGLE", direction="nsm", linebreak="cm", unicodeslot=0x20E4, }, [0x20E5]={ category="mn", description="COMBINING REVERSE SOLIDUS OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20E5, }, [0x20E6]={ category="mn", description="COMBINING DOUBLE VERTICAL STROKE OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20E6, }, [0x20E7]={ category="mn", description="COMBINING ANNUITY SYMBOL", direction="nsm", linebreak="cm", unicodeslot=0x20E7, }, [0x20E8]={ category="mn", description="COMBINING TRIPLE UNDERDOT", direction="nsm", linebreak="cm", unicodeslot=0x20E8, }, [0x20E9]={ category="mn", description="COMBINING WIDE BRIDGE ABOVE", direction="nsm", linebreak="cm", mathclass="topaccent", unicodeslot=0x20E9, }, [0x20EA]={ category="mn", description="COMBINING LEFTWARDS ARROW OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20EA, }, [0x20EB]={ category="mn", description="COMBINING LONG DOUBLE SOLIDUS OVERLAY", direction="nsm", linebreak="cm", unicodeslot=0x20EB, }, [0x20EC]={ category="mn", description="COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS", direction="nsm", linebreak="cm", unicodeslot=0x20EC, }, [0x20ED]={ category="mn", description="COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS", direction="nsm", linebreak="cm", unicodeslot=0x20ED, }, [0x20EE]={ category="mn", description="COMBINING LEFT ARROW BELOW", direction="nsm", linebreak="cm", unicodeslot=0x20EE, }, [0x20EF]={ category="mn", description="COMBINING RIGHT ARROW BELOW", direction="nsm", linebreak="cm", unicodeslot=0x20EF, }, [0x20F0]={ category="mn", description="COMBINING ASTERISK ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x20F0, }, [0x2100]={ category="so", description="ACCOUNT OF", direction="on", linebreak="al", specials={ "compat", 0x0061, 0x002F, 0x0063 }, unicodeslot=0x2100, }, [0x2101]={ category="so", description="ADDRESSED TO THE SUBJECT", direction="on", linebreak="al", specials={ "compat", 0x0061, 0x002F, 0x0073 }, unicodeslot=0x2101, }, [0x2102]={ category="lu", description="DOUBLE-STRUCK CAPITAL C", direction="l", linebreak="al", mathclass="variable", mathname="complexes", specials={ "font", 0x0043 }, unicodeslot=0x2102, }, [0x2103]={ adobename="centigrade", category="so", cjkwd="a", contextname="textcelsius", description="DEGREE CELSIUS", direction="on", linebreak="po", specials={ "compat", 0x00B0, 0x0043 }, unicodeslot=0x2103, }, [0x2104]={ category="so", description="CENTRE LINE SYMBOL", direction="on", linebreak="al", unicodeslot=0x2104, }, [0x2105]={ adobename="careof", category="so", cjkwd="a", description="CARE OF", direction="on", linebreak="ai", specials={ "compat", 0x0063, 0x002F, 0x006F }, unicodeslot=0x2105, }, [0x2106]={ category="so", description="CADA UNA", direction="on", linebreak="al", specials={ "compat", 0x0063, 0x002F, 0x0075 }, unicodeslot=0x2106, }, [0x2107]={ category="lu", description="EULER CONSTANT", direction="l", linebreak="al", mathclass="variable", mathname="Eulerconst", specials={ "compat", 0x0190 }, unicodeslot=0x2107, }, [0x2108]={ category="so", description="SCRUPLE", direction="on", linebreak="al", unicodeslot=0x2108, }, [0x2109]={ adobename="fahrenheit", category="so", cjkwd="a", description="DEGREE FAHRENHEIT", direction="on", linebreak="po", specials={ "compat", 0x00B0, 0x0046 }, unicodeslot=0x2109, }, [0x210A]={ category="ll", description="SCRIPT SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x210A, }, [0x210B]={ category="lu", description="SCRIPT CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x210B, }, [0x210C]={ category="lu", description="BLACK-LETTER CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x210C, }, [0x210D]={ category="lu", description="DOUBLE-STRUCK CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x210D, }, [0x210E]={ category="ll", description="PLANCK CONSTANT", direction="l", linebreak="al", mathclass="variable", mathname="Plankconst", specials={ "font", 0x0068 }, unicodeslot=0x210E, }, [0x210F]={ category="ll", description="PLANCK CONSTANT OVER TWO PI", direction="l", linebreak="al", mathspec={ { class="variable", name="hslash", }, { class="ordinary", name="hbar", }, }, specials={ "font", 0x0127 }, unicodeslot=0x210F, }, [0x2110]={ category="lu", description="SCRIPT CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x2110, }, [0x2111]={ adobename="Ifraktur", category="lu", description="BLACK-LETTER CAPITAL I", direction="l", linebreak="al", mathclass="default", mathname="Im", specials={ "font", 0x0049 }, unicodeslot=0x2111, }, [0x2112]={ category="lu", description="SCRIPT CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x2112, }, [0x2113]={ adobename="lsquare", category="ll", cjkwd="a", description="SCRIPT SMALL L", direction="l", linebreak="ai", mathclass="default", mathname="ell", specials={ "font", 0x006C }, unicodeslot=0x2113, }, [0x2114]={ category="so", description="L B BAR SYMBOL", direction="on", linebreak="al", unicodeslot=0x2114, }, [0x2115]={ category="lu", description="DOUBLE-STRUCK CAPITAL N", direction="l", linebreak="al", mathclass="variable", mathname="naturalnumbers", specials={ "font", 0x004E }, unicodeslot=0x2115, }, [0x2116]={ adobename="numero", category="so", cjkwd="a", contextname="textnumero", description="NUMERO SIGN", direction="on", linebreak="pr", specials={ "compat", 0x004E, 0x006F }, unicodeslot=0x2116, }, [0x2117]={ category="so", contextname="textcircledP", description="SOUND RECORDING COPYRIGHT", direction="on", linebreak="al", unicodeslot=0x2117, }, [0x2118]={ adobename="weierstrass", category="so", description="SCRIPT CAPITAL P", direction="on", linebreak="al", mathclass="default", mathname="wp", unicodeslot=0x2118, }, [0x2119]={ category="lu", description="DOUBLE-STRUCK CAPITAL P", direction="l", linebreak="al", mathclass="variable", mathname="primes", specials={ "font", 0x0050 }, unicodeslot=0x2119, }, [0x211A]={ category="lu", description="DOUBLE-STRUCK CAPITAL Q", direction="l", linebreak="al", mathclass="variable", mathname="rationals", specials={ "font", 0x0051 }, unicodeslot=0x211A, }, [0x211B]={ category="lu", description="SCRIPT CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x211B, }, [0x211C]={ adobename="Rfraktur", category="lu", description="BLACK-LETTER CAPITAL R", direction="l", linebreak="al", mathclass="default", mathname="Re", specials={ "font", 0x0052 }, unicodeslot=0x211C, }, [0x211D]={ category="lu", description="DOUBLE-STRUCK CAPITAL R", direction="l", linebreak="al", mathclass="variable", mathname="reals", specials={ "font", 0x0052 }, unicodeslot=0x211D, }, [0x211E]={ adobename="prescription", category="so", description="PRESCRIPTION TAKE", direction="on", linebreak="al", unicodeslot=0x211E, }, [0x211F]={ category="so", description="RESPONSE", direction="on", linebreak="al", unicodeslot=0x211F, }, [0x2120]={ category="so", description="SERVICE MARK", direction="on", linebreak="al", specials={ "super", 0x0053, 0x004D }, unicodeslot=0x2120, }, [0x2121]={ adobename="telephone", category="so", cjkwd="a", description="TELEPHONE SIGN", direction="on", linebreak="ai", specials={ "compat", 0x0054, 0x0045, 0x004C }, unicodeslot=0x2121, }, [0x2122]={ adobename="trademark", category="so", cjkwd="a", contextname="trademark", description="TRADE MARK SIGN", direction="on", linebreak="ai", specials={ "super", 0x0054, 0x004D }, unicodeslot=0x2122, }, [0x2123]={ category="so", description="VERSICLE", direction="on", linebreak="al", unicodeslot=0x2123, }, [0x2124]={ category="lu", description="DOUBLE-STRUCK CAPITAL Z", direction="l", linebreak="al", mathclass="variable", mathname="integers", specials={ "font", 0x005A }, unicodeslot=0x2124, }, [0x2125]={ category="so", contextname="textounce", description="OUNCE SIGN", direction="on", linebreak="al", unicodeslot=0x2125, }, [0x2126]={ adobename="Omega", category="lu", cjkwd="a", contextname="textohm", description="OHM SIGN", direction="l", lccode=0x03C9, linebreak="al", mathclass="variable", mathname="ohm", specials={ "char", 0x03A9 }, unicodeslot=0x2126, }, [0x2127]={ category="so", contextname="textmho", description="INVERTED OHM SIGN", direction="on", linebreak="al", mathclass="variable", mathname="mho", unicodeslot=0x2127, }, [0x2128]={ category="lu", description="BLACK-LETTER CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x2128, }, [0x2129]={ category="so", description="TURNED GREEK SMALL LETTER IOTA", direction="on", linebreak="al", mathclass="variable", mathname="turnediota", unicodeslot=0x2129, }, [0x212A]={ category="lu", contextname="textkelvin", description="KELVIN SIGN", direction="l", lccode=0x006B, linebreak="al", specials={ "char", 0x004B }, unicodeslot=0x212A, }, [0x212B]={ adobename="angstrom", category="lu", cjkwd="a", contextname="textAngstrom", description="ANGSTROM SIGN", direction="l", lccode=0x00E5, linebreak="ai", mathclass="variable", mathname="Angstrom", specials={ "char", 0x00C5 }, unicodeslot=0x212B, }, [0x212C]={ category="lu", description="SCRIPT CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x212C, }, [0x212D]={ category="lu", description="BLACK-LETTER CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x212D, }, [0x212E]={ adobename="estimated", category="so", description="ESTIMATED SYMBOL", direction="et", linebreak="al", unicodeslot=0x212E, }, [0x212F]={ category="ll", description="SCRIPT SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x212F, }, [0x2130]={ category="lu", description="SCRIPT CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x2130, }, [0x2131]={ category="lu", description="SCRIPT CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x2131, }, [0x2132]={ category="lu", description="TURNED CAPITAL F", direction="l", lccode=0x214E, linebreak="al", mathclass="ordinary", mathname="Finv", unicodeslot=0x2132, }, [0x2133]={ category="lu", description="SCRIPT CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x2133, }, [0x2134]={ category="ll", description="SCRIPT SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x2134, }, [0x2135]={ adobename="aleph", category="lo", description="ALEF SYMBOL", direction="l", linebreak="al", mathclass="default", mathname="aleph", specials={ "compat", 0x05D0 }, unicodeslot=0x2135, }, [0x2136]={ category="lo", description="BET SYMBOL", direction="l", linebreak="al", mathclass="default", mathname="beth", specials={ "compat", 0x05D1 }, unicodeslot=0x2136, }, [0x2137]={ category="lo", description="GIMEL SYMBOL", direction="l", linebreak="al", mathclass="default", mathname="gimel", specials={ "compat", 0x05D2 }, unicodeslot=0x2137, }, [0x2138]={ category="lo", description="DALET SYMBOL", direction="l", linebreak="al", mathclass="default", mathname="daleth", specials={ "compat", 0x05D3 }, unicodeslot=0x2138, }, [0x2139]={ category="ll", description="INFORMATION SOURCE", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x2139, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x213A]={ category="so", description="ROTATED CAPITAL Q", direction="on", linebreak="al", unicodeslot=0x213A, }, [0x213B]={ category="so", description="FACSIMILE SIGN", direction="on", linebreak="al", specials={ "compat", 0x0046, 0x0041, 0x0058 }, unicodeslot=0x213B, }, [0x213C]={ category="ll", description="DOUBLE-STRUCK SMALL PI", direction="l", linebreak="al", specials={ "font", 0x03C0 }, unicodeslot=0x213C, }, [0x213D]={ category="ll", description="DOUBLE-STRUCK SMALL GAMMA", direction="l", linebreak="al", specials={ "font", 0x03B3 }, unicodeslot=0x213D, }, [0x213E]={ category="lu", description="DOUBLE-STRUCK CAPITAL GAMMA", direction="l", linebreak="al", specials={ "font", 0x0393 }, unicodeslot=0x213E, }, [0x213F]={ category="lu", description="DOUBLE-STRUCK CAPITAL PI", direction="l", linebreak="al", specials={ "font", 0x03A0 }, unicodeslot=0x213F, }, [0x2140]={ category="sm", description="DOUBLE-STRUCK N-ARY SUMMATION", direction="on", linebreak="al", specials={ "font", 0x2211 }, unicodeslot=0x2140, }, [0x2141]={ category="sm", description="TURNED SANS-SERIF CAPITAL G", direction="on", linebreak="al", mathclass="ordinary", mathname="Game", unicodeslot=0x2141, }, [0x2142]={ category="sm", comment="mathname=sansLturned", description="TURNED SANS-SERIF CAPITAL L", direction="on", linebreak="al", mathclass="ordinary", unicodeslot=0x2142, }, [0x2143]={ category="sm", comment="mathname=sansLmirrored", description="REVERSED SANS-SERIF CAPITAL L", direction="on", linebreak="al", mathclass="ordinary", unicodeslot=0x2143, }, [0x2144]={ category="sm", comment="mathname=Yup", description="TURNED SANS-SERIF CAPITAL Y", direction="on", linebreak="al", mathclass="ordinary", unicodeslot=0x2144, }, [0x2145]={ category="lu", description="DOUBLE-STRUCK ITALIC CAPITAL D", direction="l", linebreak="al", mathclass="nothing", mathname="differentialD", specials={ "font", 0x0044 }, unicodeslot=0x2145, }, [0x2146]={ category="ll", description="DOUBLE-STRUCK ITALIC SMALL D", direction="l", linebreak="al", mathclass="nothing", mathname="differentiald", specials={ "font", 0x0064 }, unicodeslot=0x2146, }, [0x2147]={ category="ll", description="DOUBLE-STRUCK ITALIC SMALL E", direction="l", linebreak="al", mathclass="nothing", mathname="exponentiale", specials={ "font", 0x0065 }, unicodeslot=0x2147, }, [0x2148]={ category="ll", description="DOUBLE-STRUCK ITALIC SMALL I", direction="l", linebreak="al", mathclass="nothing", mathname="imaginaryi", specials={ "font", 0x0069 }, unicodeslot=0x2148, }, [0x2149]={ category="ll", description="DOUBLE-STRUCK ITALIC SMALL J", direction="l", linebreak="al", mathclass="nothing", mathname="imaginaryj", specials={ "font", 0x006A }, unicodeslot=0x2149, }, [0x214A]={ category="so", description="PROPERTY LINE", direction="on", linebreak="al", mathclass="ordinary", mathname="PropertyLine", unicodeslot=0x214A, }, [0x214B]={ category="sm", description="TURNED AMPERSAND", direction="on", linebreak="al", mathclass="binary", mathname="upand", unicodeslot=0x214B, }, [0x214C]={ category="so", description="PER SIGN", direction="on", linebreak="al", unicodeslot=0x214C, }, [0x214D]={ category="so", description="AKTIESELSKAB", direction="on", linebreak="al", unicodeslot=0x214D, }, [0x214E]={ category="ll", description="TURNED SMALL F", direction="l", linebreak="al", uccode=0x2132, unicodeslot=0x214E, }, [0x214F]={ category="so", description="SYMBOL FOR SAMARITAN SOURCE", direction="l", linebreak="al", unicodeslot=0x214F, }, [0x2150]={ category="no", description="VULGAR FRACTION ONE SEVENTH", direction="on", linebreak="al", specials={ "fraction", 0x0031, 0x2044, 0x0037 }, unicodeslot=0x2150, }, [0x2151]={ category="no", description="VULGAR FRACTION ONE NINTH", direction="on", linebreak="al", specials={ "fraction", 0x0031, 0x2044, 0x0039 }, unicodeslot=0x2151, }, [0x2152]={ category="no", description="VULGAR FRACTION ONE TENTH", direction="on", linebreak="al", specials={ "fraction", 0x0031, 0x2044, 0x0031, 0x0030 }, unicodeslot=0x2152, }, [0x2153]={ adobename="onethird", category="no", cjkwd="a", contextname="onethird", description="VULGAR FRACTION ONE THIRD", direction="on", linebreak="al", specials={ "fraction", 0x0031, 0x2044, 0x0033 }, unicodeslot=0x2153, }, [0x2154]={ adobename="twothirds", category="no", cjkwd="a", contextname="twothirds", description="VULGAR FRACTION TWO THIRDS", direction="on", linebreak="ai", specials={ "fraction", 0x0032, 0x2044, 0x0033 }, unicodeslot=0x2154, }, [0x2155]={ category="no", contextname="onefifth", description="VULGAR FRACTION ONE FIFTH", direction="on", linebreak="ai", specials={ "fraction", 0x0031, 0x2044, 0x0035 }, unicodeslot=0x2155, }, [0x2156]={ category="no", contextname="twofifths", description="VULGAR FRACTION TWO FIFTHS", direction="on", linebreak="al", specials={ "fraction", 0x0032, 0x2044, 0x0035 }, unicodeslot=0x2156, }, [0x2157]={ category="no", contextname="threefifths", description="VULGAR FRACTION THREE FIFTHS", direction="on", linebreak="al", specials={ "fraction", 0x0033, 0x2044, 0x0035 }, unicodeslot=0x2157, }, [0x2158]={ category="no", contextname="fourfifths", description="VULGAR FRACTION FOUR FIFTHS", direction="on", linebreak="al", specials={ "fraction", 0x0034, 0x2044, 0x0035 }, unicodeslot=0x2158, }, [0x2159]={ category="no", contextname="onesixth", description="VULGAR FRACTION ONE SIXTH", direction="on", linebreak="al", specials={ "fraction", 0x0031, 0x2044, 0x0036 }, unicodeslot=0x2159, }, [0x215A]={ category="no", contextname="fivesixths", description="VULGAR FRACTION FIVE SIXTHS", direction="on", linebreak="al", specials={ "fraction", 0x0035, 0x2044, 0x0036 }, unicodeslot=0x215A, }, [0x215B]={ adobename="oneeighth", category="no", cjkwd="a", contextname="oneeighth", description="VULGAR FRACTION ONE EIGHTH", direction="on", linebreak="ai", specials={ "fraction", 0x0031, 0x2044, 0x0038 }, unicodeslot=0x215B, }, [0x215C]={ adobename="threeeighths", category="no", cjkwd="a", contextname="threeeighths", description="VULGAR FRACTION THREE EIGHTHS", direction="on", linebreak="al", specials={ "fraction", 0x0033, 0x2044, 0x0038 }, unicodeslot=0x215C, }, [0x215D]={ adobename="fiveeighths", category="no", cjkwd="a", contextname="fiveeighths", description="VULGAR FRACTION FIVE EIGHTHS", direction="on", linebreak="al", specials={ "fraction", 0x0035, 0x2044, 0x0038 }, unicodeslot=0x215D, }, [0x215E]={ adobename="seveneighths", category="no", cjkwd="a", contextname="seveneighths", description="VULGAR FRACTION SEVEN EIGHTHS", direction="on", linebreak="ai", specials={ "fraction", 0x0037, 0x2044, 0x0038 }, unicodeslot=0x215E, }, [0x215F]={ category="no", description="FRACTION NUMERATOR ONE", direction="on", linebreak="al", specials={ "fraction", 0x0031, 0x2044 }, unicodeslot=0x215F, }, [0x2160]={ adobename="Oneroman", category="nl", cjkwd="a", contextname="romanI", description="ROMAN NUMERAL ONE", direction="l", lccode=0x2170, linebreak="ai", specials={ "compat", 0x0049 }, unicodeslot=0x2160, }, [0x2161]={ adobename="Tworoman", category="nl", cjkwd="a", contextname="romanII", description="ROMAN NUMERAL TWO", direction="l", lccode=0x2171, linebreak="ai", specials={ "compat", 0x0049, 0x0049 }, unicodeslot=0x2161, }, [0x2162]={ adobename="Threeroman", category="nl", cjkwd="a", contextname="romanIII", description="ROMAN NUMERAL THREE", direction="l", lccode=0x2172, linebreak="ai", specials={ "compat", 0x0049, 0x0049, 0x0049 }, unicodeslot=0x2162, }, [0x2163]={ adobename="Fourroman", category="nl", cjkwd="a", contextname="romanIV", description="ROMAN NUMERAL FOUR", direction="l", lccode=0x2173, linebreak="ai", specials={ "compat", 0x0049, 0x0056 }, unicodeslot=0x2163, }, [0x2164]={ adobename="Fiveroman", category="nl", cjkwd="a", contextname="romanV", description="ROMAN NUMERAL FIVE", direction="l", lccode=0x2174, linebreak="ai", specials={ "compat", 0x0056 }, unicodeslot=0x2164, }, [0x2165]={ adobename="Sixroman", category="nl", cjkwd="a", contextname="romanVI", description="ROMAN NUMERAL SIX", direction="l", lccode=0x2175, linebreak="ai", specials={ "compat", 0x0056, 0x0049 }, unicodeslot=0x2165, }, [0x2166]={ adobename="Sevenroman", category="nl", cjkwd="a", contextname="romanVII", description="ROMAN NUMERAL SEVEN", direction="l", lccode=0x2176, linebreak="ai", specials={ "compat", 0x0056, 0x0049, 0x0049 }, unicodeslot=0x2166, }, [0x2167]={ adobename="Eightroman", category="nl", cjkwd="a", contextname="romanVIII", description="ROMAN NUMERAL EIGHT", direction="l", lccode=0x2177, linebreak="ai", specials={ "compat", 0x0056, 0x0049, 0x0049, 0x0049 }, unicodeslot=0x2167, }, [0x2168]={ adobename="Nineroman", category="nl", cjkwd="a", contextname="romanIX", description="ROMAN NUMERAL NINE", direction="l", lccode=0x2178, linebreak="ai", specials={ "compat", 0x0049, 0x0058 }, unicodeslot=0x2168, }, [0x2169]={ adobename="Tenroman", category="nl", cjkwd="a", contextname="romanX", description="ROMAN NUMERAL TEN", direction="l", lccode=0x2179, linebreak="ai", specials={ "compat", 0x0058 }, unicodeslot=0x2169, }, [0x216A]={ adobename="Elevenroman", category="nl", cjkwd="a", contextname="romanXI", description="ROMAN NUMERAL ELEVEN", direction="l", lccode=0x217A, linebreak="ai", specials={ "compat", 0x0058, 0x0049 }, unicodeslot=0x216A, }, [0x216B]={ adobename="Twelveroman", category="nl", cjkwd="a", contextname="romanXII", description="ROMAN NUMERAL TWELVE", direction="l", lccode=0x217B, linebreak="ai", specials={ "compat", 0x0058, 0x0049, 0x0049 }, unicodeslot=0x216B, }, [0x216C]={ category="nl", contextname="romanL", description="ROMAN NUMERAL FIFTY", direction="l", lccode=0x217C, linebreak="al", specials={ "compat", 0x004C }, unicodeslot=0x216C, }, [0x216D]={ category="nl", contextname="romanC", description="ROMAN NUMERAL ONE HUNDRED", direction="l", lccode=0x217D, linebreak="al", specials={ "compat", 0x0043 }, unicodeslot=0x216D, }, [0x216E]={ category="nl", contextname="romanD", description="ROMAN NUMERAL FIVE HUNDRED", direction="l", lccode=0x217E, linebreak="al", specials={ "compat", 0x0044 }, unicodeslot=0x216E, }, [0x216F]={ category="nl", contextname="romanM", description="ROMAN NUMERAL ONE THOUSAND", direction="l", lccode=0x217F, linebreak="al", specials={ "compat", 0x004D }, unicodeslot=0x216F, }, [0x2170]={ adobename="oneroman", category="nl", cjkwd="a", contextname="romani", description="SMALL ROMAN NUMERAL ONE", direction="l", linebreak="ai", specials={ "compat", 0x0069 }, uccode=0x2160, unicodeslot=0x2170, }, [0x2171]={ adobename="tworoman", category="nl", cjkwd="a", contextname="romanii", description="SMALL ROMAN NUMERAL TWO", direction="l", linebreak="ai", specials={ "compat", 0x0069, 0x0069 }, uccode=0x2161, unicodeslot=0x2171, }, [0x2172]={ adobename="threeroman", category="nl", cjkwd="a", contextname="romaniii", description="SMALL ROMAN NUMERAL THREE", direction="l", linebreak="ai", specials={ "compat", 0x0069, 0x0069, 0x0069 }, uccode=0x2162, unicodeslot=0x2172, }, [0x2173]={ adobename="fourroman", category="nl", cjkwd="a", contextname="romaniv", description="SMALL ROMAN NUMERAL FOUR", direction="l", linebreak="ai", specials={ "compat", 0x0069, 0x0076 }, uccode=0x2163, unicodeslot=0x2173, }, [0x2174]={ adobename="fiveroman", category="nl", cjkwd="a", contextname="romanv", description="SMALL ROMAN NUMERAL FIVE", direction="l", linebreak="ai", specials={ "compat", 0x0076 }, uccode=0x2164, unicodeslot=0x2174, }, [0x2175]={ adobename="sixroman", category="nl", cjkwd="a", contextname="romanvi", description="SMALL ROMAN NUMERAL SIX", direction="l", linebreak="ai", specials={ "compat", 0x0076, 0x0069 }, uccode=0x2165, unicodeslot=0x2175, }, [0x2176]={ adobename="sevenroman", category="nl", cjkwd="a", contextname="romanvii", description="SMALL ROMAN NUMERAL SEVEN", direction="l", linebreak="ai", specials={ "compat", 0x0076, 0x0069, 0x0069 }, uccode=0x2166, unicodeslot=0x2176, }, [0x2177]={ adobename="eightroman", category="nl", cjkwd="a", contextname="romanviii", description="SMALL ROMAN NUMERAL EIGHT", direction="l", linebreak="ai", specials={ "compat", 0x0076, 0x0069, 0x0069, 0x0069 }, uccode=0x2167, unicodeslot=0x2177, }, [0x2178]={ adobename="nineroman", category="nl", cjkwd="a", contextname="romanix", description="SMALL ROMAN NUMERAL NINE", direction="l", linebreak="ai", specials={ "compat", 0x0069, 0x0078 }, uccode=0x2168, unicodeslot=0x2178, }, [0x2179]={ adobename="tenroman", category="nl", cjkwd="a", contextname="romanx", description="SMALL ROMAN NUMERAL TEN", direction="l", linebreak="ai", specials={ "compat", 0x0078 }, uccode=0x2169, unicodeslot=0x2179, }, [0x217A]={ adobename="elevenroman", category="nl", contextname="romanxi", description="SMALL ROMAN NUMERAL ELEVEN", direction="l", linebreak="al", specials={ "compat", 0x0078, 0x0069 }, uccode=0x216A, unicodeslot=0x217A, }, [0x217B]={ adobename="twelveroman", category="nl", contextname="romanxii", description="SMALL ROMAN NUMERAL TWELVE", direction="l", linebreak="al", specials={ "compat", 0x0078, 0x0069, 0x0069 }, uccode=0x216B, unicodeslot=0x217B, }, [0x217C]={ category="nl", contextname="romanl", description="SMALL ROMAN NUMERAL FIFTY", direction="l", linebreak="al", specials={ "compat", 0x006C }, uccode=0x216C, unicodeslot=0x217C, }, [0x217D]={ category="nl", contextname="romanc", description="SMALL ROMAN NUMERAL ONE HUNDRED", direction="l", linebreak="al", specials={ "compat", 0x0063 }, uccode=0x216D, unicodeslot=0x217D, }, [0x217E]={ category="nl", contextname="romand", description="SMALL ROMAN NUMERAL FIVE HUNDRED", direction="l", linebreak="al", specials={ "compat", 0x0064 }, uccode=0x216E, unicodeslot=0x217E, }, [0x217F]={ category="nl", contextname="romanm", description="SMALL ROMAN NUMERAL ONE THOUSAND", direction="l", linebreak="al", specials={ "compat", 0x006D }, uccode=0x216F, unicodeslot=0x217F, }, [0x2180]={ category="nl", description="ROMAN NUMERAL ONE THOUSAND C D", direction="l", linebreak="al", unicodeslot=0x2180, }, [0x2181]={ category="nl", description="ROMAN NUMERAL FIVE THOUSAND", direction="l", linebreak="al", unicodeslot=0x2181, }, [0x2182]={ category="nl", description="ROMAN NUMERAL TEN THOUSAND", direction="l", linebreak="al", unicodeslot=0x2182, }, [0x2183]={ category="lu", description="ROMAN NUMERAL REVERSED ONE HUNDRED", direction="l", lccode=0x2184, linebreak="al", unicodeslot=0x2183, }, [0x2184]={ category="ll", description="LATIN SMALL LETTER REVERSED C", direction="l", linebreak="al", uccode=0x2183, unicodeslot=0x2184, }, [0x2185]={ category="nl", description="ROMAN NUMERAL SIX LATE FORM", direction="l", linebreak="al", unicodeslot=0x2185, }, [0x2186]={ category="nl", description="ROMAN NUMERAL FIFTY EARLY FORM", direction="l", linebreak="al", unicodeslot=0x2186, }, [0x2187]={ category="nl", description="ROMAN NUMERAL FIFTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x2187, }, [0x2188]={ category="nl", description="ROMAN NUMERAL ONE HUNDRED THOUSAND", direction="l", linebreak="al", unicodeslot=0x2188, }, [0x2189]={ category="no", cjkwd="a", description="VULGAR FRACTION ZERO THIRDS", direction="on", linebreak="ai", specials={ "fraction", 0x0030, 0x2044, 0x0033 }, unicodeslot=0x2189, }, [0x2190]={ adobename="arrowleft", category="sm", cjkwd="a", description="LEFTWARDS ARROW", direction="on", linebreak="ai", mathextensible="l", mathfiller="leftarrowfill", mathspec={ { class="relation", name="leftarrow", }, { class="relation", name="gets", }, { class="under", name="underleftarrow", }, { class="over", name="overleftarrow", }, }, mathstretch="h", unicodeslot=0x2190, }, [0x2191]={ adobename="arrowup", category="sm", cjkwd="a", description="UPWARDS ARROW", direction="on", linebreak="ai", mathclass="relation", mathextensible="u", mathname="uparrow", unicodeslot=0x2191, }, [0x2192]={ adobename="arrowright", category="sm", cjkwd="a", description="RIGHTWARDS ARROW", direction="on", linebreak="ai", mathextensible="r", mathfiller="rightarrowfill", mathspec={ { class="relation", name="rightarrow", }, { class="relation", name="to", }, { class="under", name="underrightarrow", }, { class="over", name="overrightarrow", }, }, mathstretch="h", unicodeslot=0x2192, }, [0x2193]={ adobename="arrowdown", category="sm", cjkwd="a", description="DOWNWARDS ARROW", direction="on", linebreak="ai", mathclass="relation", mathextensible="d", mathname="downarrow", unicodeslot=0x2193, }, [0x2194]={ adobename="arrowboth", category="sm", cjkwd="a", description="LEFT RIGHT ARROW", direction="on", linebreak="ai", mathclass="relation", mathextensible="h", mathname="leftrightarrow", unicodeslot=0x2194, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2195]={ adobename="arrowupdn", category="so", cjkwd="a", description="UP DOWN ARROW", direction="on", linebreak="ai", mathclass="relation", mathextensible="v", mathname="updownarrow", unicodeslot=0x2195, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2196]={ adobename="arrowupleft", category="so", cjkwd="a", description="NORTH WEST ARROW", direction="on", linebreak="ai", mathclass="relation", mathname="nwarrow", unicodeslot=0x2196, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2197]={ adobename="arrowupright", category="so", cjkwd="a", description="NORTH EAST ARROW", direction="on", linebreak="ai", mathclass="relation", mathname="nearrow", unicodeslot=0x2197, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2198]={ adobename="arrowdownright", category="so", cjkwd="a", description="SOUTH EAST ARROW", direction="on", linebreak="ai", mathclass="relation", mathname="searrow", unicodeslot=0x2198, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2199]={ adobename="arrowdownleft", category="so", cjkwd="a", description="SOUTH WEST ARROW", direction="on", linebreak="ai", mathclass="relation", mathname="swarrow", unicodeslot=0x2199, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x219A]={ category="sm", description="LEFTWARDS ARROW WITH STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="nleftarrow", specials={ "char", 0x2190, 0x0338 }, unicodeslot=0x219A, }, [0x219B]={ category="sm", description="RIGHTWARDS ARROW WITH STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="nrightarrow", specials={ "char", 0x2192, 0x0338 }, unicodeslot=0x219B, }, [0x219C]={ category="so", description="LEFTWARDS WAVE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="leftwavearrow", unicodeslot=0x219C, }, [0x219D]={ category="so", description="RIGHTWARDS WAVE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="rightwavearrow", unicodeslot=0x219D, }, [0x219E]={ category="so", description="LEFTWARDS TWO HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathfiller="twoheadleftarrowfill", mathname="twoheadleftarrow", unicodeslot=0x219E, }, [0x219F]={ category="so", description="UPWARDS TWO HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="twoheaduparrow", unicodeslot=0x219F, }, [0x21A0]={ category="sm", description="RIGHTWARDS TWO HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathfiller="twoheadrightarrowfill", mathname="twoheadrightarrow", unicodeslot=0x21A0, }, [0x21A1]={ category="so", description="DOWNWARDS TWO HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="twoheaddownarrow", unicodeslot=0x21A1, }, [0x21A2]={ category="so", description="LEFTWARDS ARROW WITH TAIL", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="leftarrowtail", unicodeslot=0x21A2, }, [0x21A3]={ category="sm", description="RIGHTWARDS ARROW WITH TAIL", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="rightarrowtail", unicodeslot=0x21A3, }, [0x21A4]={ category="so", description="LEFTWARDS ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="mapsfrom", unicodeslot=0x21A4, }, [0x21A5]={ category="so", description="UPWARDS ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="mapsup", unicodeslot=0x21A5, }, [0x21A6]={ category="sm", description="RIGHTWARDS ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathfiller="mapstofill", mathname="mapsto", unicodeslot=0x21A6, }, [0x21A7]={ category="so", description="DOWNWARDS ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="mapsdown", unicodeslot=0x21A7, }, [0x21A8]={ adobename="arrowupdownbase", category="so", description="UP DOWN ARROW WITH BASE", direction="on", linebreak="al", mathclass="ordinary", mathextensible="v", mathname="updownarrowbar", unicodeslot=0x21A8, }, [0x21A9]={ category="so", description="LEFTWARDS ARROW WITH HOOK", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathfiller="hookleftarrowfill", mathname="hookleftarrow", unicodeslot=0x21A9, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x21AA]={ category="so", description="RIGHTWARDS ARROW WITH HOOK", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathfiller="hookrightarrowfill", mathname="hookrightarrow", unicodeslot=0x21AA, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x21AB]={ category="so", description="LEFTWARDS ARROW WITH LOOP", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="looparrowleft", unicodeslot=0x21AB, }, [0x21AC]={ category="so", description="RIGHTWARDS ARROW WITH LOOP", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="looparrowright", unicodeslot=0x21AC, }, [0x21AD]={ category="so", description="LEFT RIGHT WAVE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="leftrightsquigarrow", unicodeslot=0x21AD, }, [0x21AE]={ category="sm", description="LEFT RIGHT ARROW WITH STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="nleftrightarrow", specials={ "char", 0x2194, 0x0338 }, unicodeslot=0x21AE, }, [0x21AF]={ category="so", description="DOWNWARDS ZIGZAG ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="downzigzagarrow", unicodeslot=0x21AF, }, [0x21B0]={ category="so", description="UPWARDS ARROW WITH TIP LEFTWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="m", mathname="Lsh", unicodeslot=0x21B0, }, [0x21B1]={ category="so", description="UPWARDS ARROW WITH TIP RIGHTWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="m", mathname="Rsh", unicodeslot=0x21B1, }, [0x21B2]={ category="so", description="DOWNWARDS ARROW WITH TIP LEFTWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="m", mathname="Ldsh", unicodeslot=0x21B2, }, [0x21B3]={ category="so", description="DOWNWARDS ARROW WITH TIP RIGHTWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="m", mathname="Rdsh", unicodeslot=0x21B3, }, [0x21B4]={ category="so", description="RIGHTWARDS ARROW WITH CORNER DOWNWARDS", direction="on", linebreak="al", mathclass="ordinary", mathextensible="m", mathname="linefeed", unicodeslot=0x21B4, }, [0x21B5]={ adobename="carriagereturn", category="so", contextname="carriagereturn", description="DOWNWARDS ARROW WITH CORNER LEFTWARDS", direction="on", linebreak="al", mathclass="ordinary", mathextensible="m", mathname="carriagereturn", unicodeslot=0x21B5, }, [0x21B6]={ category="so", description="ANTICLOCKWISE TOP SEMICIRCLE ARROW", direction="on", linebreak="al", mathclass="relation", mathname="curvearrowleft", unicodeslot=0x21B6, }, [0x21B7]={ category="so", description="CLOCKWISE TOP SEMICIRCLE ARROW", direction="on", linebreak="al", mathclass="relation", mathname="curvearrowright", unicodeslot=0x21B7, }, [0x21B8]={ category="so", cjkwd="a", description="NORTH WEST ARROW TO LONG BAR", direction="on", linebreak="al", mathclass="relation", mathname="barovernorthwestarrow", unicodeslot=0x21B8, }, [0x21B9]={ category="so", cjkwd="a", description="LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="barleftarrowrightarrowbar", unicodeslot=0x21B9, }, [0x21BA]={ category="so", description="ANTICLOCKWISE OPEN CIRCLE ARROW", direction="on", linebreak="al", mathspec={ { class="relation", name="circlearrowright", }, { class="relation", name="acwopencirclearrow", }, }, unicodeslot=0x21BA, }, [0x21BB]={ category="so", description="CLOCKWISE OPEN CIRCLE ARROW", direction="on", linebreak="al", mathspec={ { class="relation", name="circlearrowleft", }, { class="relation", name="cwopencirclearrow", }, }, unicodeslot=0x21BB, }, [0x21BC]={ adobename="harpoonleftbarbup", category="so", description="LEFTWARDS HARPOON WITH BARB UPWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathfiller="leftharpoonupfill", mathname="leftharpoonup", unicodeslot=0x21BC, }, [0x21BD]={ category="so", description="LEFTWARDS HARPOON WITH BARB DOWNWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathfiller="leftharpoondownfill", mathname="leftharpoondown", unicodeslot=0x21BD, }, [0x21BE]={ category="so", description="UPWARDS HARPOON WITH BARB RIGHTWARDS", direction="on", linebreak="al", mathspec={ { class="relation", name="upharpoonright", }, { class="relation", name="restriction", }, }, unicodeslot=0x21BE, }, [0x21BF]={ category="so", description="UPWARDS HARPOON WITH BARB LEFTWARDS", direction="on", linebreak="al", mathclass="relation", mathname="upharpoonleft", unicodeslot=0x21BF, }, [0x21C0]={ adobename="harpoonrightbarbup", category="so", description="RIGHTWARDS HARPOON WITH BARB UPWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathfiller="rightharpoonupfill", mathname="rightharpoonup", unicodeslot=0x21C0, }, [0x21C1]={ category="so", description="RIGHTWARDS HARPOON WITH BARB DOWNWARDS", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathfiller="rightharpoondownfill", mathname="rightharpoondown", unicodeslot=0x21C1, }, [0x21C2]={ category="so", description="DOWNWARDS HARPOON WITH BARB RIGHTWARDS", direction="on", linebreak="al", mathclass="relation", mathname="downharpoonright", unicodeslot=0x21C2, }, [0x21C3]={ category="so", description="DOWNWARDS HARPOON WITH BARB LEFTWARDS", direction="on", linebreak="al", mathclass="relation", mathname="downharpoonleft", unicodeslot=0x21C3, }, [0x21C4]={ adobename="arrowrightoverleft", category="so", description="RIGHTWARDS ARROW OVER LEFTWARDS ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="rightoverleftarrowfill", mathname="rightleftarrows", unicodeslot=0x21C4, }, [0x21C5]={ adobename="arrowupleftofdown", category="so", description="UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="m", mathname="updownarrows", unicodeslot=0x21C5, }, [0x21C6]={ adobename="arrowleftoverright", category="so", description="LEFTWARDS ARROW OVER RIGHTWARDS ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="lefgtoverrightarrowfill", mathname="leftrightarrows", unicodeslot=0x21C6, }, [0x21C7]={ category="so", description="LEFTWARDS PAIRED ARROWS", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="leftleftarrows", unicodeslot=0x21C7, }, [0x21C8]={ category="so", description="UPWARDS PAIRED ARROWS", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="upuparrows", unicodeslot=0x21C8, }, [0x21C9]={ category="so", description="RIGHTWARDS PAIRED ARROWS", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="rightrightarrows", unicodeslot=0x21C9, }, [0x21CA]={ category="so", description="DOWNWARDS PAIRED ARROWS", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="downdownarrows", unicodeslot=0x21CA, }, [0x21CB]={ category="so", description="LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="leftrightharpoonsfill", mathname="leftrightharpoons", unicodeslot=0x21CB, }, [0x21CC]={ category="so", description="RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="rightleftharpoonsfill", mathname="rightleftharpoons", unicodeslot=0x21CC, }, [0x21CD]={ adobename="arrowleftdblstroke", category="so", description="LEFTWARDS DOUBLE ARROW WITH STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="nLeftarrow", specials={ "char", 0x21D0, 0x0338 }, unicodeslot=0x21CD, }, [0x21CE]={ category="sm", description="LEFT RIGHT DOUBLE ARROW WITH STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="nLeftrightarrow", specials={ "char", 0x21D4, 0x0338 }, unicodeslot=0x21CE, }, [0x21CF]={ adobename="arrowrightdblstroke", category="sm", description="RIGHTWARDS DOUBLE ARROW WITH STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="nRightarrow", specials={ "char", 0x21D2, 0x0338 }, unicodeslot=0x21CF, }, [0x21D0]={ adobename="arrowleftdbl", category="so", description="LEFTWARDS DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="Leftarrow", unicodeslot=0x21D0, }, [0x21D1]={ adobename="arrowdblup", category="so", description="UPWARDS DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="Uparrow", unicodeslot=0x21D1, }, [0x21D2]={ adobename="dblarrowright", category="sm", cjkwd="a", description="RIGHTWARDS DOUBLE ARROW", direction="on", linebreak="ai", mathextensible="r", mathspec={ { class="relation", name="Rightarrow", }, { class="relation", name="imply", }, }, unicodeslot=0x21D2, }, [0x21D3]={ adobename="arrowdbldown", category="so", description="DOWNWARDS DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="Downarrow", unicodeslot=0x21D3, }, [0x21D4]={ adobename="dblarrowleft", category="sm", cjkwd="a", description="LEFT RIGHT DOUBLE ARROW", direction="on", linebreak="ai", mathclass="relation", mathextensible="h", mathname="Leftrightarrow", unicodeslot=0x21D4, }, [0x21D5]={ category="so", description="UP DOWN DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="v", mathname="Updownarrow", unicodeslot=0x21D5, }, [0x21D6]={ category="so", description="NORTH WEST DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathname="Nwarrow", unicodeslot=0x21D6, }, [0x21D7]={ category="so", description="NORTH EAST DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathname="Nearrow", unicodeslot=0x21D7, }, [0x21D8]={ category="so", description="SOUTH EAST DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathname="Searrow", unicodeslot=0x21D8, }, [0x21D9]={ category="so", description="SOUTH WEST DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathname="Swarrow", unicodeslot=0x21D9, }, [0x21DA]={ category="so", description="LEFTWARDS TRIPLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="Lleftarrow", unicodeslot=0x21DA, }, [0x21DB]={ category="so", description="RIGHTWARDS TRIPLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="Rrightarrow", unicodeslot=0x21DB, }, [0x21DC]={ category="so", description="LEFTWARDS SQUIGGLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="leftsquigarrow", unicodeslot=0x21DC, }, [0x21DD]={ category="so", description="RIGHTWARDS SQUIGGLE ARROW", direction="on", linebreak="al", mathspec={ { class="relation", name="rightsquigarrow", }, { class="relation", name="leadsto", }, }, unicodeslot=0x21DD, }, [0x21DE]={ adobename="pageup", category="so", description="UPWARDS ARROW WITH DOUBLE STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="nHuparrow", unicodeslot=0x21DE, }, [0x21DF]={ adobename="pagedown", category="so", description="DOWNWARDS ARROW WITH DOUBLE STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="nHdownarrow", unicodeslot=0x21DF, }, [0x21E0]={ adobename="arrowdashleft", category="so", description="LEFTWARDS DASHED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="leftdasharrow", unicodeslot=0x21E0, }, [0x21E1]={ adobename="arrowdashup", category="so", description="UPWARDS DASHED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="updasharrow", unicodeslot=0x21E1, }, [0x21E2]={ adobename="arrowdashright", category="so", description="RIGHTWARDS DASHED ARROW", direction="on", linebreak="al", mathspec={ { class="relation", name="rightdasharrow", }, { class="relation", name="dasharrow", }, }, unicodeslot=0x21E2, }, [0x21E3]={ adobename="arrowdashdown", category="so", description="DOWNWARDS DASHED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="downdasharrow", unicodeslot=0x21E3, }, [0x21E4]={ adobename="arrowtableft", category="so", description="LEFTWARDS ARROW TO BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="barleftarrow", unicodeslot=0x21E4, }, [0x21E5]={ adobename="arrowtabright", category="so", description="RIGHTWARDS ARROW TO BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="rightarrowbar", unicodeslot=0x21E5, }, [0x21E6]={ adobename="arrowleftwhite", category="so", description="LEFTWARDS WHITE ARROW", direction="on", linebreak="al", mathclass="ordinary", mathextensible="l", mathname="leftwhitearrow", unicodeslot=0x21E6, }, [0x21E7]={ adobename="arrowupwhite", category="so", cjkwd="a", description="UPWARDS WHITE ARROW", direction="on", linebreak="al", mathclass="ordinary", mathextensible="u", mathname="upwhitearrow", unicodeslot=0x21E7, }, [0x21E8]={ adobename="arrowrightwhite", category="so", description="RIGHTWARDS WHITE ARROW", direction="on", linebreak="al", mathclass="ordinary", mathextensible="r", mathname="rightwhitearrow", unicodeslot=0x21E8, }, [0x21E9]={ adobename="arrowdownwhite", category="so", description="DOWNWARDS WHITE ARROW", direction="on", linebreak="al", mathclass="ordinary", mathextensible="d", mathname="downwhitearrow", unicodeslot=0x21E9, }, [0x21EA]={ adobename="capslock", category="so", description="UPWARDS WHITE ARROW FROM BAR", direction="on", linebreak="al", unicodeslot=0x21EA, }, [0x21EB]={ category="so", description="UPWARDS WHITE ARROW ON PEDESTAL", direction="on", linebreak="al", mathclass="ordinary", mathextensible="u", mathname="whitearrowupfrombar", unicodeslot=0x21EB, }, [0x21EC]={ category="so", description="UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR", direction="on", linebreak="al", unicodeslot=0x21EC, }, [0x21ED]={ category="so", description="UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x21ED, }, [0x21EE]={ category="so", description="UPWARDS WHITE DOUBLE ARROW", direction="on", linebreak="al", unicodeslot=0x21EE, }, [0x21EF]={ category="so", description="UPWARDS WHITE DOUBLE ARROW ON PEDESTAL", direction="on", linebreak="al", unicodeslot=0x21EF, }, [0x21F0]={ category="so", description="RIGHTWARDS WHITE ARROW FROM WALL", direction="on", linebreak="al", unicodeslot=0x21F0, }, [0x21F1]={ category="so", description="NORTH WEST ARROW TO CORNER", direction="on", linebreak="al", unicodeslot=0x21F1, }, [0x21F2]={ category="so", description="SOUTH EAST ARROW TO CORNER", direction="on", linebreak="al", unicodeslot=0x21F2, }, [0x21F3]={ category="so", description="UP DOWN WHITE ARROW", direction="on", linebreak="al", unicodeslot=0x21F3, }, [0x21F4]={ category="sm", description="RIGHT ARROW WITH SMALL CIRCLE", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="circleonrightarrow", unicodeslot=0x21F4, }, [0x21F5]={ category="sm", description="DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="m", mathname="downuparrows", unicodeslot=0x21F5, }, [0x21F6]={ category="sm", description="THREE RIGHTWARDS ARROWS", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="rightthreearrows", unicodeslot=0x21F6, }, [0x21F7]={ category="sm", description="LEFTWARDS ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="nvleftarrow", unicodeslot=0x21F7, }, [0x21F8]={ category="sm", description="RIGHTWARDS ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="nvrightarrow", unicodeslot=0x21F8, }, [0x21F9]={ category="sm", description="LEFT RIGHT ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="nvleftrightarrow", unicodeslot=0x21F9, }, [0x21FA]={ category="sm", description="LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="nVleftarrow", unicodeslot=0x21FA, }, [0x21FB]={ category="sm", description="RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="nVrightarrow", unicodeslot=0x21FB, }, [0x21FC]={ category="sm", description="LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="nVleftrightarrow", unicodeslot=0x21FC, }, [0x21FD]={ category="sm", description="LEFTWARDS OPEN-HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="leftarrowtriangle", unicodeslot=0x21FD, }, [0x21FE]={ category="sm", description="RIGHTWARDS OPEN-HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="rightarrowtriangle", unicodeslot=0x21FE, }, [0x21FF]={ category="sm", description="LEFT RIGHT OPEN-HEADED ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathname="leftrightarrowtriangle", unicodeslot=0x21FF, }, [0x2200]={ adobename="universal", category="sm", cjkwd="a", description="FOR ALL", direction="on", linebreak="ai", mathclass="ordinary", mathname="forall", unicodeslot=0x2200, }, [0x2201]={ category="sm", description="COMPLEMENT", direction="on", linebreak="al", mathclass="ordinary", mathname="complement", unicodeslot=0x2201, }, [0x2202]={ adobename="partialdiff", category="sm", cjkwd="a", description="PARTIAL DIFFERENTIAL", direction="on", linebreak="ai", mathclass="default", mathname="partial", unicodeslot=0x2202, }, [0x2203]={ adobename="thereexists", category="sm", cjkwd="a", description="THERE EXISTS", direction="on", linebreak="ai", mathclass="ordinary", mathname="exists", unicodeslot=0x2203, }, [0x2204]={ category="sm", description="THERE DOES NOT EXIST", direction="on", linebreak="al", mathclass="ordinary", mathname="nexists", specials={ "char", 0x2203, 0x0338 }, unicodeslot=0x2204, }, [0x2205]={ adobename="emptyset", category="sm", description="EMPTY SET", direction="on", linebreak="al", mathclass="default", mathname="emptyset", unicodeslot=0x2205, }, [0x2206]={ adobename="increment", category="sm", description="INCREMENT", direction="on", linebreak="al", unicodeslot=0x2206, }, [0x2207]={ adobename="nabla", category="sm", cjkwd="a", description="NABLA", direction="on", linebreak="ai", unicodeslot=0x2207, }, [0x2208]={ adobename="element", category="sm", cjkwd="a", description="ELEMENT OF", direction="on", linebreak="ai", mathclass="relation", mathname="in", mirror=0x220B, unicodeslot=0x2208, }, [0x2209]={ adobename="notelementof", category="sm", description="NOT AN ELEMENT OF", direction="on", linebreak="al", mathspec={ { class="relation", name="notin", }, { class="relation", name="nin", }, }, mirror=0x220C, specials={ "char", 0x2208, 0x0338 }, unicodeslot=0x2209, }, [0x220A]={ category="sm", description="SMALL ELEMENT OF", direction="on", linebreak="al", mirror=0x220D, unicodeslot=0x220A, }, [0x220B]={ adobename="suchthat", category="sm", cjkwd="a", description="CONTAINS AS MEMBER", direction="on", linebreak="ai", mathspec={ { class="relation", name="ni", }, { class="relation", name="owns", }, }, mirror=0x2208, unicodeslot=0x220B, }, [0x220C]={ adobename="notcontains", category="sm", description="DOES NOT CONTAIN AS MEMBER", direction="on", linebreak="al", mathspec={ { class="relation", name="nni", }, { class="relation", name="nowns", }, }, mirror=0x2209, specials={ "char", 0x220B, 0x0338 }, unicodeslot=0x220C, }, [0x220D]={ category="sm", description="SMALL CONTAINS AS MEMBER", direction="on", linebreak="al", mirror=0x220A, unicodeslot=0x220D, }, [0x220E]={ category="sm", description="END OF PROOF", direction="on", linebreak="al", unicodeslot=0x220E, }, [0x220F]={ adobename="product", category="sm", cjkwd="a", description="N-ARY PRODUCT", direction="on", linebreak="ai", mathclass="limop", mathname="prod", unicodeslot=0x220F, }, [0x2210]={ category="sm", description="N-ARY COPRODUCT", direction="on", linebreak="al", mathclass="limop", mathname="coprod", unicodeslot=0x2210, }, [0x2211]={ adobename="summation", category="sm", cjkwd="a", description="N-ARY SUMMATION", direction="on", linebreak="ai", mathclass="limop", mathname="sum", unicodeslot=0x2211, }, [0x2212]={ adobename="minus", category="sm", description="MINUS SIGN", direction="es", linebreak="pr", mathspec={ { class="binary", name="minus", }, { class="relation", name="relbar", }, }, unicodeslot=0x2212, }, [0x2213]={ adobename="minusplus", category="sm", description="MINUS-OR-PLUS SIGN", direction="et", linebreak="pr", mathclass="binary", mathname="mp", unicodeslot=0x2213, }, [0x2214]={ category="sm", description="DOT PLUS", direction="on", linebreak="al", mathclass="binary", mathname="dotplus", unicodeslot=0x2214, }, [0x2215]={ adobename="divisionslash", category="sm", cjkwd="a", comment="mathclass=ordinary,mathname=diagup", description="DIVISION SLASH", direction="on", linebreak="ai", mirror=0x29F5, unicodeslot=0x2215, }, [0x2216]={ category="sm", comment="mathclass=ordinary,mathname=diagdown", description="SET MINUS", direction="on", linebreak="al", mathspec={ { class="binary", name="setminus", }, }, unicodeslot=0x2216, }, [0x2217]={ adobename="asteriskmath", category="sm", description="ASTERISK OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="ast", unicodeslot=0x2217, }, [0x2218]={ category="sm", description="RING OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="circ", unicodeslot=0x2218, }, [0x2219]={ adobename="bulletoperator", category="sm", description="BULLET OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="bullet", unicodeslot=0x2219, }, [0x221A]={ adobename="radical", category="sm", cjkwd="a", description="SQUARE ROOT", direction="on", linebreak="ai", mathclass="radical", mathname="surd", unicodeslot=0x221A, }, [0x221B]={ category="sm", description="CUBE ROOT", direction="on", linebreak="al", unicodeslot=0x221B, }, [0x221C]={ category="sm", description="FOURTH ROOT", direction="on", linebreak="al", unicodeslot=0x221C, }, [0x221D]={ adobename="proportional", category="sm", cjkwd="a", description="PROPORTIONAL TO", direction="on", linebreak="ai", mathclass="relation", mathname="propto", unicodeslot=0x221D, }, [0x221E]={ adobename="infinity", category="sm", cjkwd="a", description="INFINITY", direction="on", linebreak="ai", mathclass="default", mathname="infty", unicodeslot=0x221E, }, [0x221F]={ adobename="rightangle", category="sm", cjkwd="a", description="RIGHT ANGLE", direction="on", linebreak="ai", mathclass="ordinary", mathname="rightangle", unicodeslot=0x221F, }, [0x2220]={ adobename="angle", category="sm", cjkwd="a", description="ANGLE", direction="on", linebreak="ai", mathclass="ordinary", mathname="angle", unicodeslot=0x2220, }, [0x2221]={ category="sm", description="MEASURED ANGLE", direction="on", linebreak="al", mathclass="ordinary", mathname="measuredangle", unicodeslot=0x2221, }, [0x2222]={ category="sm", description="SPHERICAL ANGLE", direction="on", linebreak="al", mathclass="ordinary", mathname="sphericalangle", unicodeslot=0x2222, }, [0x2223]={ adobename="divides", category="sm", cjkwd="a", description="DIVIDES", direction="on", linebreak="ai", mathclass="binary", mathname="divides", unicodeslot=0x2223, }, [0x2224]={ category="sm", description="DOES NOT DIVIDE", direction="on", linebreak="al", mathspec={ { class="binary", name="ndivides", }, { class="relation", name="nmid", }, }, specials={ "char", 0x2223, 0x0338 }, unicodeslot=0x2224, }, [0x2225]={ adobename="parallel", category="sm", cjkwd="a", description="PARALLEL TO", direction="on", linebreak="ai", mathspec={ { class="relation", name="parallel", }, }, unicodeslot=0x2225, }, [0x2226]={ adobename="notparallel", category="sm", description="NOT PARALLEL TO", direction="on", linebreak="al", mathclass="relation", mathname="nparallel", specials={ "char", 0x2225, 0x0338 }, unicodeslot=0x2226, }, [0x2227]={ adobename="logicaland", category="sm", cjkwd="a", description="LOGICAL AND", direction="on", linebreak="ai", mathspec={ { class="binary", name="wedge", }, { class="binary", name="land", }, }, unicodeslot=0x2227, }, [0x2228]={ adobename="logicalor", category="sm", cjkwd="a", description="LOGICAL OR", direction="on", linebreak="ai", mathspec={ { class="binary", name="vee", }, { class="binary", name="lor", }, }, unicodeslot=0x2228, }, [0x2229]={ adobename="intersection", category="sm", cjkwd="a", description="INTERSECTION", direction="on", linebreak="ai", mathclass="binary", mathname="cap", unicodeslot=0x2229, variants={ [0xFE00]="with serifs", }, }, [0x222A]={ adobename="union", category="sm", cjkwd="a", description="UNION", direction="on", linebreak="ai", mathclass="binary", mathname="cup", unicodeslot=0x222A, variants={ [0xFE00]="with serifs", }, }, [0x222B]={ adobename="integral", category="sm", cjkwd="a", description="INTEGRAL", direction="on", linebreak="ai", mathclass="limop", mathspec={ { class="limop", name="int", }, { class="nothing", name="intop", }, }, unicodeslot=0x222B, }, [0x222C]={ adobename="dblintegral", category="sm", cjkwd="a", description="DOUBLE INTEGRAL", direction="on", linebreak="ai", mathclass="limop", mathspec={ { class="limop", name="iint", }, { class="nothing", name="iintop", }, }, specials={ "compat", 0x222B, 0x222B }, unicodeslot=0x222C, }, [0x222D]={ category="sm", description="TRIPLE INTEGRAL", direction="on", linebreak="al", mathclass="limop", mathspec={ { class="limop", name="iiint", }, { class="nothing", name="iiintop", }, }, specials={ "compat", 0x222B, 0x222B, 0x222B }, unicodeslot=0x222D, }, [0x222E]={ adobename="contourintegral", category="sm", cjkwd="a", description="CONTOUR INTEGRAL", direction="on", linebreak="ai", mathclass="limop", mathname="oint", unicodeslot=0x222E, }, [0x222F]={ category="sm", description="SURFACE INTEGRAL", direction="on", linebreak="al", mathclass="limop", mathname="oiint", specials={ "compat", 0x222E, 0x222E }, unicodeslot=0x222F, }, [0x2230]={ category="sm", description="VOLUME INTEGRAL", direction="on", linebreak="al", mathclass="limop", mathname="oiiint", specials={ "compat", 0x222E, 0x222E, 0x222E }, unicodeslot=0x2230, }, [0x2231]={ category="sm", description="CLOCKWISE INTEGRAL", direction="on", linebreak="al", mathclass="limop", mathname="intclockwise", unicodeslot=0x2231, }, [0x2232]={ category="sm", description="CLOCKWISE CONTOUR INTEGRAL", direction="on", linebreak="al", mathclass="limop", mathname="ointclockwise", unicodeslot=0x2232, }, [0x2233]={ category="sm", description="ANTICLOCKWISE CONTOUR INTEGRAL", direction="on", linebreak="al", mathclass="limop", mathname="ointctrclockwise", unicodeslot=0x2233, }, [0x2234]={ adobename="therefore", category="sm", cjkwd="a", description="THEREFORE", direction="on", linebreak="ai", mathclass="relation", mathname="therefore", unicodeslot=0x2234, }, [0x2235]={ adobename="because", category="sm", cjkwd="a", description="BECAUSE", direction="on", linebreak="ai", mathclass="relation", mathname="because", unicodeslot=0x2235, }, [0x2236]={ adobename="ratio", category="sm", cjkwd="a", description="RATIO", direction="on", linebreak="ai", mathclass="punctuation", mathname="colon", unicodeslot=0x2236, }, [0x2237]={ adobename="proportion", category="sm", cjkwd="a", description="PROPORTION", direction="on", linebreak="ai", mathclass="relation", mathname="squaredots", unicodeslot=0x2237, }, [0x2238]={ category="sm", description="DOT MINUS", direction="on", linebreak="al", mathclass="binary", mathname="dotminus", unicodeslot=0x2238, }, [0x2239]={ category="sm", description="EXCESS", direction="on", linebreak="al", mathclass="relation", mathname="minuscolon", unicodeslot=0x2239, }, [0x223A]={ category="sm", description="GEOMETRIC PROPORTION", direction="on", linebreak="al", unicodeslot=0x223A, }, [0x223B]={ category="sm", description="HOMOTHETIC", direction="on", linebreak="al", unicodeslot=0x223B, }, [0x223C]={ adobename="tildeoperator", category="sm", cjkwd="a", description="TILDE OPERATOR", direction="on", linebreak="ai", mathclass="relation", mathname="sim", mirror=0x223D, unicodeslot=0x223C, }, [0x223D]={ adobename="reversedtilde", category="sm", cjkwd="a", description="REVERSED TILDE", direction="on", linebreak="ai", mathclass="relation", mathname="backsim", mirror=0x223C, unicodeslot=0x223D, }, [0x223E]={ category="sm", description="INVERTED LAZY S", direction="on", linebreak="al", unicodeslot=0x223E, }, [0x223F]={ category="sm", description="SINE WAVE", direction="on", linebreak="al", unicodeslot=0x223F, }, [0x2240]={ category="sm", description="WREATH PRODUCT", direction="on", linebreak="al", mathclass="binary", mathname="wr", unicodeslot=0x2240, }, [0x2241]={ category="sm", description="NOT TILDE", direction="on", linebreak="al", mathclass="relation", mathname="nsim", specials={ "char", 0x223C, 0x0338 }, unicodeslot=0x2241, }, [0x2242]={ category="sm", description="MINUS TILDE", direction="on", linebreak="al", mathclass="relation", mathname="eqsim", unicodeslot=0x2242, }, [0x2243]={ adobename="asymptoticallyequal", category="sm", description="ASYMPTOTICALLY EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="simeq", mirror=0x22CD, unicodeslot=0x2243, }, [0x2244]={ category="sm", description="NOT ASYMPTOTICALLY EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="nsimeq", specials={ "char", 0x2243, 0x0338 }, unicodeslot=0x2244, }, [0x2245]={ adobename="congruent", category="sm", description="APPROXIMATELY EQUAL TO", direction="on", linebreak="al", mathspec={ { class="relation", name="approxEq", }, { class="relation", name="cong", }, }, unicodeslot=0x2245, }, [0x2246]={ category="sm", description="APPROXIMATELY BUT NOT ACTUALLY EQUAL TO", direction="on", linebreak="al", mathspec={ { class="relation", name="napproxEq", }, { class="relation", name="ncong", }, }, unicodeslot=0x2246, }, [0x2247]={ category="sm", description="NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="approxnEq", specials={ "char", 0x2245, 0x0338 }, unicodeslot=0x2247, }, [0x2248]={ adobename="approxequal", category="sm", cjkwd="a", description="ALMOST EQUAL TO", direction="on", linebreak="ai", mathclass="relation", mathname="approx", unicodeslot=0x2248, }, [0x2249]={ category="sm", description="NOT ALMOST EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="napprox", specials={ "char", 0x2248, 0x0338 }, unicodeslot=0x2249, }, [0x224A]={ category="sm", description="ALMOST EQUAL OR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="approxeq", unicodeslot=0x224A, }, [0x224B]={ category="sm", description="TRIPLE TILDE", direction="on", linebreak="al", unicodeslot=0x224B, }, [0x224C]={ adobename="allequal", category="sm", cjkwd="a", description="ALL EQUAL TO", direction="on", linebreak="ai", mathclass="relation", unicodeslot=0x224C, }, [0x224D]={ category="sm", description="EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="asymp", unicodeslot=0x224D, }, [0x224E]={ category="sm", description="GEOMETRICALLY EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="Bumpeq", unicodeslot=0x224E, }, [0x224F]={ category="sm", description="DIFFERENCE BETWEEN", direction="on", linebreak="al", unicodeslot=0x224F, }, [0x2250]={ adobename="approaches", category="sm", description="APPROACHES THE LIMIT", direction="on", linebreak="al", mathclass="relation", mathname="doteq", unicodeslot=0x2250, }, [0x2251]={ adobename="geometricallyequal", category="sm", description="GEOMETRICALLY EQUAL TO", direction="on", linebreak="al", mathspec={ { class="relation", name="doteqdot", }, { class="relation", name="Doteq", }, }, unicodeslot=0x2251, }, [0x2252]={ adobename="approxequalorimage", category="sm", cjkwd="a", description="APPROXIMATELY EQUAL TO OR THE IMAGE OF", direction="on", linebreak="ai", mathclass="relation", mathname="fallingdotseq", mirror=0x2253, unicodeslot=0x2252, }, [0x2253]={ adobename="imageorapproximatelyequal", category="sm", description="IMAGE OF OR APPROXIMATELY EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="risingdotseq", mirror=0x2252, unicodeslot=0x2253, }, [0x2254]={ category="sm", description="COLON EQUALS", direction="on", linebreak="al", mathclass="relation", mathname="colonequals", mirror=0x2255, unicodeslot=0x2254, }, [0x2255]={ category="sm", description="EQUALS COLON", direction="on", linebreak="al", mathclass="relation", mathname="equalscolon", mirror=0x2254, unicodeslot=0x2255, }, [0x2256]={ category="sm", description="RING IN EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="eqcirc", unicodeslot=0x2256, }, [0x2257]={ category="sm", description="RING EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="circeq", unicodeslot=0x2257, }, [0x2258]={ category="sm", description="CORRESPONDS TO", direction="on", linebreak="al", unicodeslot=0x2258, }, [0x2259]={ category="sm", description="ESTIMATES", direction="on", linebreak="al", mathclass="relation", mathname="wedgeeq", unicodeslot=0x2259, }, [0x225A]={ category="sm", description="EQUIANGULAR TO", direction="on", linebreak="al", mathclass="relation", mathname="veeeq", unicodeslot=0x225A, }, [0x225B]={ category="sm", description="STAR EQUALS", direction="on", linebreak="al", mathclass="relation", mathname="stareq", unicodeslot=0x225B, }, [0x225C]={ category="sm", description="DELTA EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="triangleq", unicodeslot=0x225C, }, [0x225D]={ category="sm", description="EQUAL TO BY DEFINITION", direction="on", linebreak="al", mathclass="relation", mathname="definedeq", unicodeslot=0x225D, }, [0x225E]={ category="sm", description="MEASURED BY", direction="on", linebreak="al", mathclass="relation", mathname="measuredeq", unicodeslot=0x225E, }, [0x225F]={ category="sm", description="QUESTIONED EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="questionedeq", unicodeslot=0x225F, }, [0x2260]={ adobename="notequal", category="sm", cjkwd="a", description="NOT EQUAL TO", direction="on", linebreak="ai", mathspec={ { class="relation", name="neq", }, { class="relation", name="ne", }, }, specials={ "char", 0x003D, 0x0338 }, unicodeslot=0x2260, }, [0x2261]={ adobename="equivalence", category="sm", cjkwd="a", description="IDENTICAL TO", direction="on", linebreak="ai", mathclass="relation", mathextensible="h", mathname="equiv", unicodeslot=0x2261, }, [0x2262]={ adobename="notidentical", category="sm", description="NOT IDENTICAL TO", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="triplerelfill", mathname="nequiv", specials={ "char", 0x2261, 0x0338 }, unicodeslot=0x2262, }, [0x2263]={ category="sm", description="STRICTLY EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathextensible="h", unicodeslot=0x2263, }, [0x2264]={ adobename="lessequal", category="sm", cjkwd="a", description="LESS-THAN OR EQUAL TO", direction="on", linebreak="ai", mathspec={ { class="relation", name="leq", }, { class="relation", name="le", }, }, mirror=0x2265, unicodeslot=0x2264, }, [0x2265]={ adobename="greaterequal", category="sm", cjkwd="a", description="GREATER-THAN OR EQUAL TO", direction="on", linebreak="ai", mathspec={ { class="relation", name="geq", }, { class="relation", name="ge", }, }, mirror=0x2264, unicodeslot=0x2265, }, [0x2266]={ adobename="lessoverequal", category="sm", cjkwd="a", description="LESS-THAN OVER EQUAL TO", direction="on", linebreak="ai", mathclass="relation", mathname="leqq", mirror=0x2267, unicodeslot=0x2266, }, [0x2267]={ adobename="greateroverequal", category="sm", cjkwd="a", description="GREATER-THAN OVER EQUAL TO", direction="on", linebreak="ai", mathclass="relation", mathname="geqq", mirror=0x2266, unicodeslot=0x2267, }, [0x2268]={ category="sm", description="LESS-THAN BUT NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="lneqq", mirror=0x2269, unicodeslot=0x2268, variants={ [0xFE00]="with vertical stroke", }, }, [0x2269]={ category="sm", description="GREATER-THAN BUT NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="gneqq", mirror=0x2268, unicodeslot=0x2269, variants={ [0xFE00]="with vertical stroke", }, }, [0x226A]={ adobename="muchless", category="sm", cjkwd="a", description="MUCH LESS-THAN", direction="on", linebreak="ai", mathclass="relation", mathname="ll", mirror=0x226B, unicodeslot=0x226A, }, [0x226B]={ adobename="muchgreater", category="sm", cjkwd="a", description="MUCH GREATER-THAN", direction="on", linebreak="ai", mathclass="relation", mathname="gg", mirror=0x226A, unicodeslot=0x226B, }, [0x226C]={ category="sm", description="BETWEEN", direction="on", linebreak="al", mathclass="relation", mathname="between", unicodeslot=0x226C, }, [0x226D]={ category="sm", description="NOT EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="nasymp", specials={ "char", 0x224D, 0x0338 }, unicodeslot=0x226D, }, [0x226E]={ adobename="notless", category="sm", cjkwd="a", description="NOT LESS-THAN", direction="on", linebreak="ai", mathclass="relation", mathname="nless", mirror=0x226F, specials={ "char", 0x003C, 0x0338 }, unicodeslot=0x226E, }, [0x226F]={ adobename="notgreater", category="sm", cjkwd="a", description="NOT GREATER-THAN", direction="on", linebreak="ai", mathclass="relation", mathname="ngtr", mirror=0x226E, specials={ "char", 0x003E, 0x0338 }, unicodeslot=0x226F, }, [0x2270]={ adobename="notlessnorequal", category="sm", description="NEITHER LESS-THAN NOR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="nleq", mirror=0x2271, specials={ "char", 0x2264, 0x0338 }, unicodeslot=0x2270, }, [0x2271]={ adobename="notgreaternorequal", category="sm", description="NEITHER GREATER-THAN NOR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="ngeq", mirror=0x2270, specials={ "char", 0x2265, 0x0338 }, unicodeslot=0x2271, }, [0x2272]={ adobename="lessorequivalent", category="sm", description="LESS-THAN OR EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="lesssim", mirror=0x2273, unicodeslot=0x2272, variants={ [0xFE00]="following the slant of the lower leg", }, }, [0x2273]={ adobename="greaterorequivalent", category="sm", description="GREATER-THAN OR EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="gtrsim", mirror=0x2272, unicodeslot=0x2273, variants={ [0xFE00]="following the slant of the lower leg", }, }, [0x2274]={ category="sm", description="NEITHER LESS-THAN NOR EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="nlesssim", mirror=0x2275, specials={ "char", 0x2272, 0x0338 }, unicodeslot=0x2274, }, [0x2275]={ category="sm", description="NEITHER GREATER-THAN NOR EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="ngtrsim", mirror=0x2274, specials={ "char", 0x2273, 0x0338 }, unicodeslot=0x2275, }, [0x2276]={ adobename="lessorgreater", category="sm", description="LESS-THAN OR GREATER-THAN", direction="on", linebreak="al", mathclass="relation", mathname="lessgtr", mirror=0x2277, unicodeslot=0x2276, }, [0x2277]={ adobename="greaterorless", category="sm", description="GREATER-THAN OR LESS-THAN", direction="on", linebreak="al", mathclass="relation", mathname="gtrless", mirror=0x2276, unicodeslot=0x2277, }, [0x2278]={ category="sm", description="NEITHER LESS-THAN NOR GREATER-THAN", direction="on", linebreak="al", mathclass="relation", mathname="nlessgtr", mirror=0x2279, specials={ "char", 0x2276, 0x0338 }, unicodeslot=0x2278, }, [0x2279]={ adobename="notgreaternorless", category="sm", description="NEITHER GREATER-THAN NOR LESS-THAN", direction="on", linebreak="al", mathclass="relation", mathname="ngtrless", mirror=0x2278, specials={ "char", 0x2277, 0x0338 }, unicodeslot=0x2279, }, [0x227A]={ adobename="precedes", category="sm", description="PRECEDES", direction="on", linebreak="al", mathclass="relation", mathname="prec", mirror=0x227B, unicodeslot=0x227A, }, [0x227B]={ adobename="succeeds", category="sm", description="SUCCEEDS", direction="on", linebreak="al", mathclass="relation", mathname="succ", mirror=0x227A, unicodeslot=0x227B, }, [0x227C]={ category="sm", description="PRECEDES OR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="preccurlyeq", mirror=0x227D, unicodeslot=0x227C, }, [0x227D]={ category="sm", description="SUCCEEDS OR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="succcurlyeq", mirror=0x227C, unicodeslot=0x227D, }, [0x227E]={ category="sm", description="PRECEDES OR EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="precsim", mirror=0x227F, unicodeslot=0x227E, }, [0x227F]={ category="sm", description="SUCCEEDS OR EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="succsim", mirror=0x227E, unicodeslot=0x227F, }, [0x2280]={ adobename="notprecedes", category="sm", description="DOES NOT PRECEDE", direction="on", linebreak="al", mathclass="relation", mathname="nprec", mirror=0x2281, specials={ "char", 0x227A, 0x0338 }, unicodeslot=0x2280, }, [0x2281]={ adobename="notsucceeds", category="sm", description="DOES NOT SUCCEED", direction="on", linebreak="al", mathclass="relation", mathname="nsucc", mirror=0x2280, specials={ "char", 0x227B, 0x0338 }, unicodeslot=0x2281, }, [0x2282]={ adobename="subset", category="sm", cjkwd="a", description="SUBSET OF", direction="on", linebreak="ai", mathclass="relation", mathname="subset", mirror=0x2283, unicodeslot=0x2282, }, [0x2283]={ adobename="superset", category="sm", cjkwd="a", description="SUPERSET OF", direction="on", linebreak="ai", mathclass="relation", mathname="supset", mirror=0x2282, unicodeslot=0x2283, }, [0x2284]={ adobename="notsubset", category="sm", description="NOT A SUBSET OF", direction="on", linebreak="al", mathclass="relation", mathname="nsubset", mirror=0x2285, specials={ "char", 0x2282, 0x0338 }, unicodeslot=0x2284, }, [0x2285]={ adobename="notsuperset", category="sm", description="NOT A SUPERSET OF", direction="on", linebreak="al", mathclass="relation", mathname="nsupset", mirror=0x2284, specials={ "char", 0x2283, 0x0338 }, unicodeslot=0x2285, }, [0x2286]={ adobename="subsetorequal", category="sm", cjkwd="a", description="SUBSET OF OR EQUAL TO", direction="on", linebreak="ai", mathclass="relation", mathname="subseteq", mirror=0x2287, unicodeslot=0x2286, }, [0x2287]={ adobename="supersetorequal", category="sm", cjkwd="a", description="SUPERSET OF OR EQUAL TO", direction="on", linebreak="ai", mathclass="relation", mathname="supseteq", mirror=0x2286, unicodeslot=0x2287, }, [0x2288]={ category="sm", description="NEITHER A SUBSET OF NOR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="nsubseteq", mirror=0x2289, specials={ "char", 0x2286, 0x0338 }, unicodeslot=0x2288, }, [0x2289]={ category="sm", description="NEITHER A SUPERSET OF NOR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="nsupseteq", mirror=0x2288, specials={ "char", 0x2287, 0x0338 }, unicodeslot=0x2289, }, [0x228A]={ adobename="subsetnotequal", category="sm", description="SUBSET OF WITH NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="subsetneq", mirror=0x228B, unicodeslot=0x228A, variants={ [0xFE00]="with stroke through bottom members", }, }, [0x228B]={ adobename="supersetnotequal", category="sm", description="SUPERSET OF WITH NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="supsetneq", mirror=0x228A, unicodeslot=0x228B, variants={ [0xFE00]="with stroke through bottom members", }, }, [0x228C]={ category="sm", description="MULTISET", direction="on", linebreak="al", unicodeslot=0x228C, }, [0x228D]={ category="sm", description="MULTISET MULTIPLICATION", direction="on", linebreak="al", unicodeslot=0x228D, }, [0x228E]={ category="sm", description="MULTISET UNION", direction="on", linebreak="al", mathclass="binary", mathname="uplus", unicodeslot=0x228E, }, [0x228F]={ category="sm", description="SQUARE IMAGE OF", direction="on", linebreak="al", mathclass="relation", mathname="sqsubset", mirror=0x2290, unicodeslot=0x228F, }, [0x2290]={ category="sm", description="SQUARE ORIGINAL OF", direction="on", linebreak="al", mathclass="relation", mathname="sqsupset", mirror=0x228F, unicodeslot=0x2290, }, [0x2291]={ category="sm", description="SQUARE IMAGE OF OR EQUAL TO", direction="on", linebreak="al", mathclass="binary", mathname="sqsubseteq", mirror=0x2292, unicodeslot=0x2291, }, [0x2292]={ category="sm", description="SQUARE ORIGINAL OF OR EQUAL TO", direction="on", linebreak="al", mathclass="binary", mathname="sqsupseteq", mirror=0x2291, unicodeslot=0x2292, }, [0x2293]={ category="sm", description="SQUARE CAP", direction="on", linebreak="al", mathclass="binary", mathname="sqcap", unicodeslot=0x2293, variants={ [0xFE00]="with serifs", }, }, [0x2294]={ category="sm", description="SQUARE CUP", direction="on", linebreak="al", mathclass="binary", mathname="sqcup", unicodeslot=0x2294, variants={ [0xFE00]="with serifs", }, }, [0x2295]={ adobename="pluscircle", category="sm", cjkwd="a", description="CIRCLED PLUS", direction="on", linebreak="ai", mathclass="binary", mathname="oplus", unicodeslot=0x2295, variants={ [0xFE00]="with white rim", }, }, [0x2296]={ adobename="minuscircle", category="sm", description="CIRCLED MINUS", direction="on", linebreak="al", mathclass="binary", mathname="ominus", unicodeslot=0x2296, }, [0x2297]={ adobename="timescircle", category="sm", description="CIRCLED TIMES", direction="on", linebreak="al", mathclass="binary", mathname="otimes", unicodeslot=0x2297, variants={ [0xFE00]="with white rim", }, }, [0x2298]={ category="sm", description="CIRCLED DIVISION SLASH", direction="on", linebreak="al", mathclass="binary", mathname="oslash", mirror=0x29B8, unicodeslot=0x2298, }, [0x2299]={ adobename="circleot", category="sm", cjkwd="a", description="CIRCLED DOT OPERATOR", direction="on", linebreak="ai", mathclass="binary", mathname="odot", unicodeslot=0x2299, }, [0x229A]={ category="sm", description="CIRCLED RING OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="circledcirc", unicodeslot=0x229A, }, [0x229B]={ category="sm", description="CIRCLED ASTERISK OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="circledast", unicodeslot=0x229B, }, [0x229C]={ category="sm", description="CIRCLED EQUALS", direction="on", linebreak="al", mathclass="binary", mathname="circledequals", unicodeslot=0x229C, variants={ [0xFE00]="with equal sign touching the circle", }, }, [0x229D]={ category="sm", description="CIRCLED DASH", direction="on", linebreak="al", mathclass="binary", mathname="circleddash", unicodeslot=0x229D, }, [0x229E]={ category="sm", description="SQUARED PLUS", direction="on", linebreak="al", mathclass="binary", mathname="boxplus", unicodeslot=0x229E, }, [0x229F]={ category="sm", description="SQUARED MINUS", direction="on", linebreak="al", mathclass="binary", mathname="boxminus", unicodeslot=0x229F, }, [0x22A0]={ category="sm", description="SQUARED TIMES", direction="on", linebreak="al", mathclass="binary", mathname="boxtimes", unicodeslot=0x22A0, }, [0x22A1]={ category="sm", description="SQUARED DOT OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="boxdot", unicodeslot=0x22A1, }, [0x22A2]={ category="sm", description="RIGHT TACK", direction="on", linebreak="al", mathclass="relation", mathname="vdash", mirror=0x22A3, unicodeslot=0x22A2, }, [0x22A3]={ adobename="tackleft", category="sm", description="LEFT TACK", direction="on", linebreak="al", mathclass="relation", mathname="dashv", mirror=0x22A2, unicodeslot=0x22A3, }, [0x22A4]={ adobename="tackdown", category="sm", description="DOWN TACK", direction="on", linebreak="al", mathclass="default", mathname="top", unicodeslot=0x22A4, }, [0x22A5]={ adobename="perpendicular", category="sm", cjkwd="a", description="UP TACK", direction="on", linebreak="ai", mathspec={ { class="default", name="bot", }, { class="relation", name="perp", }, }, unicodeslot=0x22A5, }, [0x22A6]={ category="sm", description="ASSERTION", direction="on", linebreak="al", mirror=0x2ADE, unicodeslot=0x22A6, }, [0x22A7]={ category="sm", description="MODELS", direction="on", linebreak="al", mathclass="relation", mathname="models", unicodeslot=0x22A7, }, [0x22A8]={ category="sm", description="TRUE", direction="on", linebreak="al", mathclass="relation", mathname="vDash", mirror=0x2AE4, unicodeslot=0x22A8, }, [0x22A9]={ category="sm", description="FORCES", direction="on", linebreak="al", mathclass="relation", mathname="Vdash", mirror=0x2AE3, unicodeslot=0x22A9, }, [0x22AA]={ category="sm", description="TRIPLE VERTICAL BAR RIGHT TURNSTILE", direction="on", linebreak="al", mathclass="relation", mathname="Vvdash", unicodeslot=0x22AA, }, [0x22AB]={ category="sm", description="DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE", direction="on", linebreak="al", mathclass="relation", mathname="VDash", mirror=0x2AE5, unicodeslot=0x22AB, }, [0x22AC]={ category="sm", description="DOES NOT PROVE", direction="on", linebreak="al", mathclass="relation", mathname="nvdash", specials={ "char", 0x22A2, 0x0338 }, unicodeslot=0x22AC, }, [0x22AD]={ category="sm", description="NOT TRUE", direction="on", linebreak="al", mathclass="relation", mathname="nvDash", specials={ "char", 0x22A8, 0x0338 }, unicodeslot=0x22AD, }, [0x22AE]={ category="sm", description="DOES NOT FORCE", direction="on", linebreak="al", mathclass="relation", mathname="nVdash", specials={ "char", 0x22A9, 0x0338 }, unicodeslot=0x22AE, }, [0x22AF]={ category="sm", description="NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE", direction="on", linebreak="al", mathclass="relation", mathname="nVDash", specials={ "char", 0x22AB, 0x0338 }, unicodeslot=0x22AF, }, [0x22B0]={ category="sm", description="PRECEDES UNDER RELATION", direction="on", linebreak="al", mirror=0x22B1, unicodeslot=0x22B0, }, [0x22B1]={ category="sm", description="SUCCEEDS UNDER RELATION", direction="on", linebreak="al", mirror=0x22B0, unicodeslot=0x22B1, }, [0x22B2]={ category="sm", comment="cramped triangleleft", description="NORMAL SUBGROUP OF", direction="on", linebreak="al", mathclass="binary", mirror=0x22B3, unicodeslot=0x22B2, }, [0x22B3]={ category="sm", comment="cramped triangleright", description="CONTAINS AS NORMAL SUBGROUP", direction="on", linebreak="al", mathclass="binary", mirror=0x22B2, unicodeslot=0x22B3, }, [0x22B4]={ category="sm", description="NORMAL SUBGROUP OF OR EQUAL TO", direction="on", linebreak="al", mirror=0x22B5, unicodeslot=0x22B4, }, [0x22B5]={ category="sm", description="CONTAINS AS NORMAL SUBGROUP OR EQUAL TO", direction="on", linebreak="al", mirror=0x22B4, unicodeslot=0x22B5, }, [0x22B6]={ category="sm", description="ORIGINAL OF", direction="on", linebreak="al", mirror=0x22B7, unicodeslot=0x22B6, }, [0x22B7]={ category="sm", description="IMAGE OF", direction="on", linebreak="al", mirror=0x22B6, unicodeslot=0x22B7, }, [0x22B8]={ category="sm", description="MULTIMAP", direction="on", linebreak="al", mathclass="relation", mathname="multimap", unicodeslot=0x22B8, }, [0x22B9]={ category="sm", description="HERMITIAN CONJUGATE MATRIX", direction="on", linebreak="al", unicodeslot=0x22B9, }, [0x22BA]={ category="sm", description="INTERCALATE", direction="on", linebreak="al", mathclass="binary", mathname="intercal", unicodeslot=0x22BA, }, [0x22BB]={ category="sm", description="XOR", direction="on", linebreak="al", mathclass="binary", mathname="veebar", unicodeslot=0x22BB, }, [0x22BC]={ category="sm", description="NAND", direction="on", linebreak="al", mathclass="binary", mathname="barwedge", unicodeslot=0x22BC, }, [0x22BD]={ category="sm", description="NOR", direction="on", linebreak="al", unicodeslot=0x22BD, }, [0x22BE]={ category="sm", description="RIGHT ANGLE WITH ARC", direction="on", linebreak="al", unicodeslot=0x22BE, }, [0x22BF]={ adobename="righttriangle", category="sm", cjkwd="a", description="RIGHT TRIANGLE", direction="on", linebreak="ai", unicodeslot=0x22BF, }, [0x22C0]={ category="sm", description="N-ARY LOGICAL AND", direction="on", linebreak="al", mathclass="limop", mathname="bigwedge", unicodeslot=0x22C0, }, [0x22C1]={ category="sm", description="N-ARY LOGICAL OR", direction="on", linebreak="al", mathclass="limop", mathname="bigvee", unicodeslot=0x22C1, }, [0x22C2]={ category="sm", description="N-ARY INTERSECTION", direction="on", linebreak="al", mathclass="limop", mathname="bigcap", unicodeslot=0x22C2, }, [0x22C3]={ category="sm", description="N-ARY UNION", direction="on", linebreak="al", mathclass="limop", mathname="bigcup", unicodeslot=0x22C3, }, [0x22C4]={ category="sm", description="DIAMOND OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="diamond", unicodeslot=0x22C4, }, [0x22C5]={ adobename="dotmath", category="sm", description="DOT OPERATOR", direction="on", linebreak="al", mathspec={ { class="binary", name="cdot", }, { class="punctuation", name="cdotp", }, }, unicodeslot=0x22C5, }, [0x22C6]={ category="sm", description="STAR OPERATOR", direction="on", linebreak="al", mathclass="binary", mathname="star", unicodeslot=0x22C6, }, [0x22C7]={ category="sm", description="DIVISION TIMES", direction="on", linebreak="al", mathclass="binary", mathname="divideontimes", unicodeslot=0x22C7, }, [0x22C8]={ category="sm", description="BOWTIE", direction="on", linebreak="al", mathspec={ { class="relation", name="bowtie", }, { class="relation", name="Join", }, }, unicodeslot=0x22C8, }, [0x22C9]={ category="sm", description="LEFT NORMAL FACTOR SEMIDIRECT PRODUCT", direction="on", linebreak="al", mathclass="binary", mathname="ltimes", mirror=0x22CA, unicodeslot=0x22C9, }, [0x22CA]={ category="sm", description="RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT", direction="on", linebreak="al", mathclass="binary", mathname="rtimes", mirror=0x22C9, unicodeslot=0x22CA, }, [0x22CB]={ category="sm", description="LEFT SEMIDIRECT PRODUCT", direction="on", linebreak="al", mathclass="binary", mathname="leftthreetimes", mirror=0x22CC, unicodeslot=0x22CB, }, [0x22CC]={ category="sm", description="RIGHT SEMIDIRECT PRODUCT", direction="on", linebreak="al", mathclass="binary", mathname="rightthreetimes", mirror=0x22CB, unicodeslot=0x22CC, }, [0x22CD]={ category="sm", description="REVERSED TILDE EQUALS", direction="on", linebreak="al", mirror=0x2243, unicodeslot=0x22CD, }, [0x22CE]={ adobename="curlyor", category="sm", description="CURLY LOGICAL OR", direction="on", linebreak="al", mathclass="binary", mathname="curlyvee", unicodeslot=0x22CE, }, [0x22CF]={ adobename="curlyand", category="sm", description="CURLY LOGICAL AND", direction="on", linebreak="al", mathclass="binary", mathname="curlywedge", unicodeslot=0x22CF, }, [0x22D0]={ category="sm", description="DOUBLE SUBSET", direction="on", linebreak="al", mathclass="relation", mathname="Subset", mirror=0x22D1, unicodeslot=0x22D0, }, [0x22D1]={ category="sm", description="DOUBLE SUPERSET", direction="on", linebreak="al", mathclass="relation", mathname="Supset", mirror=0x22D0, unicodeslot=0x22D1, }, [0x22D2]={ category="sm", description="DOUBLE INTERSECTION", direction="on", linebreak="al", mathspec={ { class="binary", name="Cap", }, { class="binary", name="doublecap", }, }, unicodeslot=0x22D2, }, [0x22D3]={ category="sm", description="DOUBLE UNION", direction="on", linebreak="al", mathspec={ { class="binary", name="Cup", }, { class="binary", name="doublecup", }, }, unicodeslot=0x22D3, }, [0x22D4]={ category="sm", description="PITCHFORK", direction="on", linebreak="al", mathclass="relation", mathname="pitchfork", unicodeslot=0x22D4, }, [0x22D5]={ category="sm", description="EQUAL AND PARALLEL TO", direction="on", linebreak="al", unicodeslot=0x22D5, }, [0x22D6]={ category="sm", description="LESS-THAN WITH DOT", direction="on", linebreak="al", mathclass="binary", mathname="lessdot", mirror=0x22D7, unicodeslot=0x22D6, }, [0x22D7]={ category="sm", description="GREATER-THAN WITH DOT", direction="on", linebreak="al", mathclass="binary", mathname="gtrdot", mirror=0x22D6, unicodeslot=0x22D7, }, [0x22D8]={ category="sm", description="VERY MUCH LESS-THAN", direction="on", linebreak="al", mathspec={ { class="relation", name="lll", }, { class="relation", name="llless", }, }, mirror=0x22D9, unicodeslot=0x22D8, }, [0x22D9]={ category="sm", description="VERY MUCH GREATER-THAN", direction="on", linebreak="al", mathspec={ { class="relation", name="ggg", }, { class="relation", name="gggtr", }, }, mirror=0x22D8, unicodeslot=0x22D9, }, [0x22DA]={ adobename="lessequalorgreater", category="sm", description="LESS-THAN EQUAL TO OR GREATER-THAN", direction="on", linebreak="al", mathclass="relation", mathname="lesseqgtr", mirror=0x22DB, unicodeslot=0x22DA, variants={ [0xFE00]="with slanted equal", }, }, [0x22DB]={ adobename="greaterequalorless", category="sm", description="GREATER-THAN EQUAL TO OR LESS-THAN", direction="on", linebreak="al", mathclass="relation", mathname="gtreqless", mirror=0x22DA, unicodeslot=0x22DB, variants={ [0xFE00]="with slanted equal", }, }, [0x22DC]={ category="sm", description="EQUAL TO OR LESS-THAN", direction="on", linebreak="al", mathclass="relation", mathname="eqless", mirror=0x22DD, unicodeslot=0x22DC, }, [0x22DD]={ category="sm", description="EQUAL TO OR GREATER-THAN", direction="on", linebreak="al", mathclass="relation", mathname="eqgtr", mirror=0x22DC, unicodeslot=0x22DD, }, [0x22DE]={ category="sm", description="EQUAL TO OR PRECEDES", direction="on", linebreak="al", mathclass="relation", mathname="curlyeqprec", mirror=0x22DF, unicodeslot=0x22DE, }, [0x22DF]={ category="sm", description="EQUAL TO OR SUCCEEDS", direction="on", linebreak="al", mathclass="relation", mathname="curlyeqsucc", mirror=0x22DE, unicodeslot=0x22DF, }, [0x22E0]={ category="sm", description="DOES NOT PRECEDE OR EQUAL", direction="on", linebreak="al", mathclass="relation", mathname="npreccurlyeq", mirror=0x22E1, specials={ "char", 0x227C, 0x0338 }, unicodeslot=0x22E0, }, [0x22E1]={ category="sm", description="DOES NOT SUCCEED OR EQUAL", direction="on", linebreak="al", mathclass="relation", mathname="nsucccurlyeq", mirror=0x22E0, specials={ "char", 0x227D, 0x0338 }, unicodeslot=0x22E1, }, [0x22E2]={ category="sm", description="NOT SQUARE IMAGE OF OR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="nsqsubseteq", mirror=0x22E3, specials={ "char", 0x2291, 0x0338 }, unicodeslot=0x22E2, }, [0x22E3]={ category="sm", description="NOT SQUARE ORIGINAL OF OR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="nsqsupseteq", mirror=0x22E2, specials={ "char", 0x2292, 0x0338 }, unicodeslot=0x22E3, }, [0x22E4]={ category="sm", description="SQUARE IMAGE OF OR NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="sqsubsetneq", mirror=0x22E5, unicodeslot=0x22E4, }, [0x22E5]={ category="sm", description="SQUARE ORIGINAL OF OR NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="sqsupsetneq", mirror=0x22E4, unicodeslot=0x22E5, }, [0x22E6]={ category="sm", description="LESS-THAN BUT NOT EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="lnsim", mirror=0x22E7, unicodeslot=0x22E6, }, [0x22E7]={ category="sm", description="GREATER-THAN BUT NOT EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="gnsim", mirror=0x22E6, unicodeslot=0x22E7, }, [0x22E8]={ category="sm", description="PRECEDES BUT NOT EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="precnsim", mirror=0x22E9, unicodeslot=0x22E8, }, [0x22E9]={ category="sm", description="SUCCEEDS BUT NOT EQUIVALENT TO", direction="on", linebreak="al", mathclass="relation", mathname="succnsim", mirror=0x22E8, unicodeslot=0x22E9, }, [0x22EA]={ category="sm", description="NOT NORMAL SUBGROUP OF", direction="on", linebreak="al", mathclass="relation", mathname="ntriangleright", mirror=0x22EB, specials={ "char", 0x22B2, 0x0338 }, unicodeslot=0x22EA, }, [0x22EB]={ category="sm", description="DOES NOT CONTAIN AS NORMAL SUBGROUP", direction="on", linebreak="al", mathclass="relation", mathname="ntriangleleft", mirror=0x22EA, specials={ "char", 0x22B3, 0x0338 }, unicodeslot=0x22EB, }, [0x22EC]={ category="sm", description="NOT NORMAL SUBGROUP OF OR EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="ntrianglelefteq", mirror=0x22ED, specials={ "char", 0x22B4, 0x0338 }, unicodeslot=0x22EC, }, [0x22ED]={ category="sm", description="DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL", direction="on", linebreak="al", mathclass="relation", mathname="ntrianglerighteq", mirror=0x22EC, specials={ "char", 0x22B5, 0x0338 }, unicodeslot=0x22ED, }, [0x22EE]={ adobename="ellipsisvertical", category="sm", description="VERTICAL ELLIPSIS", direction="on", linebreak="al", mathclass="inner", mathname="vdots", unicodeslot=0x22EE, }, [0x22EF]={ category="sm", description="MIDLINE HORIZONTAL ELLIPSIS", direction="on", linebreak="al", mathclass="inner", mathname="cdots", unicodeslot=0x22EF, }, [0x22F0]={ category="sm", description="UP RIGHT DIAGONAL ELLIPSIS", direction="on", linebreak="al", mathclass="inner", mathname="udots", mirror=0x22F1, unicodeslot=0x22F0, }, [0x22F1]={ category="sm", description="DOWN RIGHT DIAGONAL ELLIPSIS", direction="on", linebreak="al", mathclass="inner", mathname="ddots", mirror=0x22F0, unicodeslot=0x22F1, }, [0x22F2]={ category="sm", description="ELEMENT OF WITH LONG HORIZONTAL STROKE", direction="on", linebreak="al", mirror=0x22FA, unicodeslot=0x22F2, }, [0x22F3]={ category="sm", description="ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", direction="on", linebreak="al", mirror=0x22FB, unicodeslot=0x22F3, }, [0x22F4]={ category="sm", description="SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", direction="on", linebreak="al", mirror=0x22FC, unicodeslot=0x22F4, }, [0x22F5]={ category="sm", description="ELEMENT OF WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x22F5, }, [0x22F6]={ category="sm", description="ELEMENT OF WITH OVERBAR", direction="on", linebreak="al", mirror=0x22FD, unicodeslot=0x22F6, }, [0x22F7]={ category="sm", description="SMALL ELEMENT OF WITH OVERBAR", direction="on", linebreak="al", mirror=0x22FE, unicodeslot=0x22F7, }, [0x22F8]={ category="sm", description="ELEMENT OF WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x22F8, }, [0x22F9]={ category="sm", description="ELEMENT OF WITH TWO HORIZONTAL STROKES", direction="on", linebreak="al", unicodeslot=0x22F9, }, [0x22FA]={ category="sm", description="CONTAINS WITH LONG HORIZONTAL STROKE", direction="on", linebreak="al", mirror=0x22F2, unicodeslot=0x22FA, }, [0x22FB]={ category="sm", description="CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", direction="on", linebreak="al", mirror=0x22F3, unicodeslot=0x22FB, }, [0x22FC]={ category="sm", description="SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", direction="on", linebreak="al", mirror=0x22F4, unicodeslot=0x22FC, }, [0x22FD]={ category="sm", description="CONTAINS WITH OVERBAR", direction="on", linebreak="al", mirror=0x22F6, unicodeslot=0x22FD, }, [0x22FE]={ category="sm", description="SMALL CONTAINS WITH OVERBAR", direction="on", linebreak="al", mirror=0x22F7, unicodeslot=0x22FE, }, [0x22FF]={ category="sm", description="Z NOTATION BAG MEMBERSHIP", direction="on", linebreak="al", unicodeslot=0x22FF, }, [0x2300]={ category="so", description="DIAMETER SIGN", direction="on", linebreak="al", mathclass="ordinary", mathname="varnothing", unicodeslot=0x2300, }, [0x2301]={ category="so", description="ELECTRIC ARROW", direction="on", linebreak="al", unicodeslot=0x2301, }, [0x2302]={ adobename="house", category="so", description="HOUSE", direction="on", linebreak="al", unicodeslot=0x2302, }, [0x2303]={ adobename="control", category="so", description="UP ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x2303, }, [0x2304]={ category="so", description="DOWN ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x2304, }, [0x2305]={ adobename="projective", category="so", description="PROJECTIVE", direction="on", linebreak="al", unicodeslot=0x2305, }, [0x2306]={ category="so", description="PERSPECTIVE", direction="on", linebreak="al", unicodeslot=0x2306, }, [0x2307]={ category="so", description="WAVY LINE", direction="on", linebreak="al", unicodeslot=0x2307, }, [0x2308]={ category="sm", description="LEFT CEILING", direction="on", linebreak="al", mathspec={ { class="open", name="lceil", }, { class="open", name="lceiling", }, }, mirror=0x2309, unicodeslot=0x2308, }, [0x2309]={ category="sm", description="RIGHT CEILING", direction="on", linebreak="al", mathspec={ { class="close", name="rceil", }, { class="close", name="rceiling", }, }, mirror=0x2308, unicodeslot=0x2309, }, [0x230A]={ category="sm", description="LEFT FLOOR", direction="on", linebreak="al", mathclass="open", mathname="lfloor", mirror=0x230B, unicodeslot=0x230A, }, [0x230B]={ category="sm", description="RIGHT FLOOR", direction="on", linebreak="al", mathclass="close", mathname="rfloor", mirror=0x230A, unicodeslot=0x230B, }, [0x230C]={ category="so", description="BOTTOM RIGHT CROP", direction="on", linebreak="al", unicodeslot=0x230C, }, [0x230D]={ category="so", description="BOTTOM LEFT CROP", direction="on", linebreak="al", unicodeslot=0x230D, }, [0x230E]={ category="so", description="TOP RIGHT CROP", direction="on", linebreak="al", unicodeslot=0x230E, }, [0x230F]={ category="so", description="TOP LEFT CROP", direction="on", linebreak="al", unicodeslot=0x230F, }, [0x2310]={ adobename="revlogicalnot", category="so", description="REVERSED NOT SIGN", direction="on", linebreak="al", unicodeslot=0x2310, }, [0x2311]={ category="so", description="SQUARE LOZENGE", direction="on", linebreak="al", unicodeslot=0x2311, }, [0x2312]={ adobename="arc", category="so", cjkwd="a", description="ARC", direction="on", linebreak="ai", unicodeslot=0x2312, }, [0x2313]={ category="so", description="SEGMENT", direction="on", linebreak="al", unicodeslot=0x2313, }, [0x2314]={ category="so", description="SECTOR", direction="on", linebreak="al", unicodeslot=0x2314, }, [0x2315]={ category="so", description="TELEPHONE RECORDER", direction="on", linebreak="al", unicodeslot=0x2315, }, [0x2316]={ category="so", description="POSITION INDICATOR", direction="on", linebreak="al", unicodeslot=0x2316, }, [0x2317]={ category="so", description="VIEWDATA SQUARE", direction="on", linebreak="al", unicodeslot=0x2317, }, [0x2318]={ adobename="propellor", category="so", description="PLACE OF INTEREST SIGN", direction="on", linebreak="al", unicodeslot=0x2318, }, [0x2319]={ category="so", description="TURNED NOT SIGN", direction="on", linebreak="al", unicodeslot=0x2319, }, [0x231A]={ category="so", description="WATCH", direction="on", linebreak="id", unicodeslot=0x231A, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x231B]={ category="so", description="HOURGLASS", direction="on", linebreak="id", unicodeslot=0x231B, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x231C]={ category="so", description="TOP LEFT CORNER", direction="on", linebreak="al", mathclass="open", mathname="ulcorner", unicodeslot=0x231C, }, [0x231D]={ category="so", description="TOP RIGHT CORNER", direction="on", linebreak="al", mathclass="close", mathname="urcorner", unicodeslot=0x231D, }, [0x231E]={ category="so", description="BOTTOM LEFT CORNER", direction="on", linebreak="al", mathclass="open", mathname="llcorner", unicodeslot=0x231E, }, [0x231F]={ category="so", description="BOTTOM RIGHT CORNER", direction="on", linebreak="al", mathclass="close", mathname="lrcorner", unicodeslot=0x231F, }, [0x2320]={ adobename="integraltp", category="sm", description="TOP HALF INTEGRAL", direction="on", linebreak="al", unicodeslot=0x2320, }, [0x2321]={ adobename="integralbt", category="sm", description="BOTTOM HALF INTEGRAL", direction="on", linebreak="al", unicodeslot=0x2321, }, [0x2322]={ category="so", description="FROWN", direction="on", linebreak="al", mathclass="relation", mathname="frown", unicodeslot=0x2322, }, [0x2323]={ category="so", description="SMILE", direction="on", linebreak="al", mathclass="relation", mathname="smile", unicodeslot=0x2323, }, [0x2324]={ category="so", description="UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS", direction="on", linebreak="al", unicodeslot=0x2324, }, [0x2325]={ adobename="option", category="so", description="OPTION KEY", direction="on", linebreak="al", unicodeslot=0x2325, }, [0x2326]={ adobename="deleteright", category="so", description="ERASE TO THE RIGHT", direction="on", linebreak="al", unicodeslot=0x2326, }, [0x2327]={ adobename="clear", category="so", description="X IN A RECTANGLE BOX", direction="on", linebreak="al", unicodeslot=0x2327, }, [0x2328]={ category="so", description="KEYBOARD", direction="on", linebreak="al", unicodeslot=0x2328, }, [0x2329]={ adobename="angleleft", category="ps", cjkwd="w", description="LEFT-POINTING ANGLE BRACKET", direction="on", linebreak="op", mirror=0x232A, specials={ "char", 0x3008 }, unicodeslot=0x2329, }, [0x232A]={ adobename="angleright", category="pe", cjkwd="w", description="RIGHT-POINTING ANGLE BRACKET", direction="on", linebreak="cl", mirror=0x2329, specials={ "char", 0x3009 }, unicodeslot=0x232A, }, [0x232B]={ adobename="deleteleft", category="so", description="ERASE TO THE LEFT", direction="on", linebreak="al", unicodeslot=0x232B, }, [0x232C]={ category="so", description="BENZENE RING", direction="on", linebreak="al", unicodeslot=0x232C, }, [0x232D]={ category="so", description="CYLINDRICITY", direction="on", linebreak="al", unicodeslot=0x232D, }, [0x232E]={ category="so", description="ALL AROUND-PROFILE", direction="on", linebreak="al", unicodeslot=0x232E, }, [0x232F]={ category="so", description="SYMMETRY", direction="on", linebreak="al", unicodeslot=0x232F, }, [0x2330]={ category="so", description="TOTAL RUNOUT", direction="on", linebreak="al", unicodeslot=0x2330, }, [0x2331]={ category="so", description="DIMENSION ORIGIN", direction="on", linebreak="al", unicodeslot=0x2331, }, [0x2332]={ category="so", description="CONICAL TAPER", direction="on", linebreak="al", unicodeslot=0x2332, }, [0x2333]={ category="so", description="SLOPE", direction="on", linebreak="al", unicodeslot=0x2333, }, [0x2334]={ category="so", description="COUNTERBORE", direction="on", linebreak="al", unicodeslot=0x2334, }, [0x2335]={ category="so", description="COUNTERSINK", direction="on", linebreak="al", unicodeslot=0x2335, }, [0x2336]={ category="so", description="APL FUNCTIONAL SYMBOL I-BEAM", direction="l", linebreak="al", unicodeslot=0x2336, }, [0x2337]={ category="so", description="APL FUNCTIONAL SYMBOL SQUISH QUAD", direction="l", linebreak="al", unicodeslot=0x2337, }, [0x2338]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD EQUAL", direction="l", linebreak="al", unicodeslot=0x2338, }, [0x2339]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD DIVIDE", direction="l", linebreak="al", unicodeslot=0x2339, }, [0x233A]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD DIAMOND", direction="l", linebreak="al", unicodeslot=0x233A, }, [0x233B]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD JOT", direction="l", linebreak="al", unicodeslot=0x233B, }, [0x233C]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD CIRCLE", direction="l", linebreak="al", unicodeslot=0x233C, }, [0x233D]={ category="so", description="APL FUNCTIONAL SYMBOL CIRCLE STILE", direction="l", linebreak="al", unicodeslot=0x233D, }, [0x233E]={ category="so", description="APL FUNCTIONAL SYMBOL CIRCLE JOT", direction="l", linebreak="al", unicodeslot=0x233E, }, [0x233F]={ category="so", description="APL FUNCTIONAL SYMBOL SLASH BAR", direction="l", linebreak="al", unicodeslot=0x233F, }, [0x2340]={ category="so", description="APL FUNCTIONAL SYMBOL BACKSLASH BAR", direction="l", linebreak="al", unicodeslot=0x2340, }, [0x2341]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD SLASH", direction="l", linebreak="al", unicodeslot=0x2341, }, [0x2342]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD BACKSLASH", direction="l", linebreak="al", unicodeslot=0x2342, }, [0x2343]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD LESS-THAN", direction="l", linebreak="al", unicodeslot=0x2343, }, [0x2344]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD GREATER-THAN", direction="l", linebreak="al", unicodeslot=0x2344, }, [0x2345]={ category="so", description="APL FUNCTIONAL SYMBOL LEFTWARDS VANE", direction="l", linebreak="al", unicodeslot=0x2345, }, [0x2346]={ category="so", description="APL FUNCTIONAL SYMBOL RIGHTWARDS VANE", direction="l", linebreak="al", unicodeslot=0x2346, }, [0x2347]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW", direction="l", linebreak="al", unicodeslot=0x2347, }, [0x2348]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW", direction="l", linebreak="al", unicodeslot=0x2348, }, [0x2349]={ category="so", description="APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH", direction="l", linebreak="al", unicodeslot=0x2349, }, [0x234A]={ category="so", description="APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR", direction="l", linebreak="al", unicodeslot=0x234A, }, [0x234B]={ category="so", description="APL FUNCTIONAL SYMBOL DELTA STILE", direction="l", linebreak="al", unicodeslot=0x234B, }, [0x234C]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD DOWN CARET", direction="l", linebreak="al", unicodeslot=0x234C, }, [0x234D]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD DELTA", direction="l", linebreak="al", unicodeslot=0x234D, }, [0x234E]={ category="so", description="APL FUNCTIONAL SYMBOL DOWN TACK JOT", direction="l", linebreak="al", unicodeslot=0x234E, }, [0x234F]={ category="so", description="APL FUNCTIONAL SYMBOL UPWARDS VANE", direction="l", linebreak="al", unicodeslot=0x234F, }, [0x2350]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW", direction="l", linebreak="al", unicodeslot=0x2350, }, [0x2351]={ category="so", description="APL FUNCTIONAL SYMBOL UP TACK OVERBAR", direction="l", linebreak="al", unicodeslot=0x2351, }, [0x2352]={ category="so", description="APL FUNCTIONAL SYMBOL DEL STILE", direction="l", linebreak="al", unicodeslot=0x2352, }, [0x2353]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD UP CARET", direction="l", linebreak="al", unicodeslot=0x2353, }, [0x2354]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD DEL", direction="l", linebreak="al", unicodeslot=0x2354, }, [0x2355]={ category="so", description="APL FUNCTIONAL SYMBOL UP TACK JOT", direction="l", linebreak="al", unicodeslot=0x2355, }, [0x2356]={ category="so", description="APL FUNCTIONAL SYMBOL DOWNWARDS VANE", direction="l", linebreak="al", unicodeslot=0x2356, }, [0x2357]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW", direction="l", linebreak="al", unicodeslot=0x2357, }, [0x2358]={ category="so", description="APL FUNCTIONAL SYMBOL QUOTE UNDERBAR", direction="l", linebreak="al", unicodeslot=0x2358, }, [0x2359]={ category="so", description="APL FUNCTIONAL SYMBOL DELTA UNDERBAR", direction="l", linebreak="al", unicodeslot=0x2359, }, [0x235A]={ category="so", description="APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR", direction="l", linebreak="al", unicodeslot=0x235A, }, [0x235B]={ category="so", description="APL FUNCTIONAL SYMBOL JOT UNDERBAR", direction="l", linebreak="al", unicodeslot=0x235B, }, [0x235C]={ category="so", description="APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR", direction="l", linebreak="al", unicodeslot=0x235C, }, [0x235D]={ category="so", description="APL FUNCTIONAL SYMBOL UP SHOE JOT", direction="l", linebreak="al", unicodeslot=0x235D, }, [0x235E]={ category="so", description="APL FUNCTIONAL SYMBOL QUOTE QUAD", direction="l", linebreak="al", unicodeslot=0x235E, }, [0x235F]={ category="so", description="APL FUNCTIONAL SYMBOL CIRCLE STAR", direction="l", linebreak="al", unicodeslot=0x235F, }, [0x2360]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD COLON", direction="l", linebreak="al", unicodeslot=0x2360, }, [0x2361]={ category="so", description="APL FUNCTIONAL SYMBOL UP TACK DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2361, }, [0x2362]={ category="so", description="APL FUNCTIONAL SYMBOL DEL DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2362, }, [0x2363]={ category="so", description="APL FUNCTIONAL SYMBOL STAR DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2363, }, [0x2364]={ category="so", description="APL FUNCTIONAL SYMBOL JOT DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2364, }, [0x2365]={ category="so", description="APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2365, }, [0x2366]={ category="so", description="APL FUNCTIONAL SYMBOL DOWN SHOE STILE", direction="l", linebreak="al", unicodeslot=0x2366, }, [0x2367]={ category="so", description="APL FUNCTIONAL SYMBOL LEFT SHOE STILE", direction="l", linebreak="al", unicodeslot=0x2367, }, [0x2368]={ category="so", description="APL FUNCTIONAL SYMBOL TILDE DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2368, }, [0x2369]={ category="so", description="APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS", direction="l", linebreak="al", unicodeslot=0x2369, }, [0x236A]={ category="so", description="APL FUNCTIONAL SYMBOL COMMA BAR", direction="l", linebreak="al", unicodeslot=0x236A, }, [0x236B]={ category="so", description="APL FUNCTIONAL SYMBOL DEL TILDE", direction="l", linebreak="al", unicodeslot=0x236B, }, [0x236C]={ category="so", description="APL FUNCTIONAL SYMBOL ZILDE", direction="l", linebreak="al", unicodeslot=0x236C, }, [0x236D]={ category="so", description="APL FUNCTIONAL SYMBOL STILE TILDE", direction="l", linebreak="al", unicodeslot=0x236D, }, [0x236E]={ category="so", description="APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR", direction="l", linebreak="al", unicodeslot=0x236E, }, [0x236F]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD NOT EQUAL", direction="l", linebreak="al", unicodeslot=0x236F, }, [0x2370]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD QUESTION", direction="l", linebreak="al", unicodeslot=0x2370, }, [0x2371]={ category="so", description="APL FUNCTIONAL SYMBOL DOWN CARET TILDE", direction="l", linebreak="al", unicodeslot=0x2371, }, [0x2372]={ category="so", description="APL FUNCTIONAL SYMBOL UP CARET TILDE", direction="l", linebreak="al", unicodeslot=0x2372, }, [0x2373]={ category="so", description="APL FUNCTIONAL SYMBOL IOTA", direction="l", linebreak="al", unicodeslot=0x2373, }, [0x2374]={ category="so", description="APL FUNCTIONAL SYMBOL RHO", direction="l", linebreak="al", unicodeslot=0x2374, }, [0x2375]={ category="so", description="APL FUNCTIONAL SYMBOL OMEGA", direction="l", linebreak="al", unicodeslot=0x2375, }, [0x2376]={ category="so", description="APL FUNCTIONAL SYMBOL ALPHA UNDERBAR", direction="l", linebreak="al", unicodeslot=0x2376, }, [0x2377]={ category="so", description="APL FUNCTIONAL SYMBOL EPSILON UNDERBAR", direction="l", linebreak="al", unicodeslot=0x2377, }, [0x2378]={ category="so", description="APL FUNCTIONAL SYMBOL IOTA UNDERBAR", direction="l", linebreak="al", unicodeslot=0x2378, }, [0x2379]={ category="so", description="APL FUNCTIONAL SYMBOL OMEGA UNDERBAR", direction="l", linebreak="al", unicodeslot=0x2379, }, [0x237A]={ category="so", description="APL FUNCTIONAL SYMBOL ALPHA", direction="l", linebreak="al", unicodeslot=0x237A, }, [0x237B]={ category="so", description="NOT CHECK MARK", direction="on", linebreak="al", unicodeslot=0x237B, }, [0x237C]={ category="sm", description="RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW", direction="on", linebreak="al", unicodeslot=0x237C, }, [0x237D]={ category="so", description="SHOULDERED OPEN BOX", direction="on", linebreak="al", unicodeslot=0x237D, }, [0x237E]={ category="so", description="BELL SYMBOL", direction="on", linebreak="al", unicodeslot=0x237E, }, [0x237F]={ category="so", description="VERTICAL LINE WITH MIDDLE DOT", direction="on", linebreak="al", unicodeslot=0x237F, }, [0x2380]={ category="so", description="INSERTION SYMBOL", direction="on", linebreak="al", unicodeslot=0x2380, }, [0x2381]={ category="so", description="CONTINUOUS UNDERLINE SYMBOL", direction="on", linebreak="al", unicodeslot=0x2381, }, [0x2382]={ category="so", description="DISCONTINUOUS UNDERLINE SYMBOL", direction="on", linebreak="al", unicodeslot=0x2382, }, [0x2383]={ category="so", description="EMPHASIS SYMBOL", direction="on", linebreak="al", unicodeslot=0x2383, }, [0x2384]={ category="so", description="COMPOSITION SYMBOL", direction="on", linebreak="al", unicodeslot=0x2384, }, [0x2385]={ category="so", description="WHITE SQUARE WITH CENTRE VERTICAL LINE", direction="on", linebreak="al", unicodeslot=0x2385, }, [0x2386]={ category="so", description="ENTER SYMBOL", direction="on", linebreak="al", unicodeslot=0x2386, }, [0x2387]={ category="so", description="ALTERNATIVE KEY SYMBOL", direction="on", linebreak="al", unicodeslot=0x2387, }, [0x2388]={ category="so", description="HELM SYMBOL", direction="on", linebreak="al", unicodeslot=0x2388, }, [0x2389]={ category="so", description="CIRCLED HORIZONTAL BAR WITH NOTCH", direction="on", linebreak="al", unicodeslot=0x2389, }, [0x238A]={ category="so", description="CIRCLED TRIANGLE DOWN", direction="on", linebreak="al", unicodeslot=0x238A, }, [0x238B]={ category="so", description="BROKEN CIRCLE WITH NORTHWEST ARROW", direction="on", linebreak="al", unicodeslot=0x238B, }, [0x238C]={ category="so", description="UNDO SYMBOL", direction="on", linebreak="al", unicodeslot=0x238C, }, [0x238D]={ category="so", description="MONOSTABLE SYMBOL", direction="on", linebreak="al", unicodeslot=0x238D, }, [0x238E]={ category="so", description="HYSTERESIS SYMBOL", direction="on", linebreak="al", unicodeslot=0x238E, }, [0x238F]={ category="so", description="OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL", direction="on", linebreak="al", unicodeslot=0x238F, }, [0x2390]={ category="so", description="OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL", direction="on", linebreak="al", unicodeslot=0x2390, }, [0x2391]={ category="so", description="PASSIVE-PULL-DOWN-OUTPUT SYMBOL", direction="on", linebreak="al", unicodeslot=0x2391, }, [0x2392]={ category="so", description="PASSIVE-PULL-UP-OUTPUT SYMBOL", direction="on", linebreak="al", unicodeslot=0x2392, }, [0x2393]={ category="so", description="DIRECT CURRENT SYMBOL FORM TWO", direction="on", linebreak="al", unicodeslot=0x2393, }, [0x2394]={ category="so", description="SOFTWARE-FUNCTION SYMBOL", direction="on", linebreak="al", unicodeslot=0x2394, }, [0x2395]={ category="so", description="APL FUNCTIONAL SYMBOL QUAD", direction="l", linebreak="al", unicodeslot=0x2395, }, [0x2396]={ category="so", description="DECIMAL SEPARATOR KEY SYMBOL", direction="on", linebreak="al", unicodeslot=0x2396, }, [0x2397]={ category="so", description="PREVIOUS PAGE", direction="on", linebreak="al", unicodeslot=0x2397, }, [0x2398]={ category="so", description="NEXT PAGE", direction="on", linebreak="al", unicodeslot=0x2398, }, [0x2399]={ category="so", description="PRINT SCREEN SYMBOL", direction="on", linebreak="al", unicodeslot=0x2399, }, [0x239A]={ category="so", description="CLEAR SCREEN SYMBOL", direction="on", linebreak="al", unicodeslot=0x239A, }, [0x239B]={ category="sm", description="LEFT PARENTHESIS UPPER HOOK", direction="on", linebreak="al", unicodeslot=0x239B, }, [0x239C]={ category="sm", description="LEFT PARENTHESIS EXTENSION", direction="on", linebreak="al", unicodeslot=0x239C, }, [0x239D]={ category="sm", description="LEFT PARENTHESIS LOWER HOOK", direction="on", linebreak="al", unicodeslot=0x239D, }, [0x239E]={ category="sm", description="RIGHT PARENTHESIS UPPER HOOK", direction="on", linebreak="al", unicodeslot=0x239E, }, [0x239F]={ category="sm", description="RIGHT PARENTHESIS EXTENSION", direction="on", linebreak="al", unicodeslot=0x239F, }, [0x23A0]={ category="sm", description="RIGHT PARENTHESIS LOWER HOOK", direction="on", linebreak="al", unicodeslot=0x23A0, }, [0x23A1]={ category="sm", description="LEFT SQUARE BRACKET UPPER CORNER", direction="on", linebreak="al", unicodeslot=0x23A1, }, [0x23A2]={ category="sm", description="LEFT SQUARE BRACKET EXTENSION", direction="on", linebreak="al", unicodeslot=0x23A2, }, [0x23A3]={ category="sm", description="LEFT SQUARE BRACKET LOWER CORNER", direction="on", linebreak="al", unicodeslot=0x23A3, }, [0x23A4]={ category="sm", description="RIGHT SQUARE BRACKET UPPER CORNER", direction="on", linebreak="al", unicodeslot=0x23A4, }, [0x23A5]={ category="sm", description="RIGHT SQUARE BRACKET EXTENSION", direction="on", linebreak="al", unicodeslot=0x23A5, }, [0x23A6]={ category="sm", description="RIGHT SQUARE BRACKET LOWER CORNER", direction="on", linebreak="al", unicodeslot=0x23A6, }, [0x23A7]={ category="sm", description="LEFT CURLY BRACKET UPPER HOOK", direction="on", linebreak="al", unicodeslot=0x23A7, }, [0x23A8]={ category="sm", description="LEFT CURLY BRACKET MIDDLE PIECE", direction="on", linebreak="al", unicodeslot=0x23A8, }, [0x23A9]={ category="sm", description="LEFT CURLY BRACKET LOWER HOOK", direction="on", linebreak="al", unicodeslot=0x23A9, }, [0x23AA]={ category="sm", description="CURLY BRACKET EXTENSION", direction="on", linebreak="al", unicodeslot=0x23AA, }, [0x23AB]={ category="sm", description="RIGHT CURLY BRACKET UPPER HOOK", direction="on", linebreak="al", unicodeslot=0x23AB, }, [0x23AC]={ category="sm", description="RIGHT CURLY BRACKET MIDDLE PIECE", direction="on", linebreak="al", unicodeslot=0x23AC, }, [0x23AD]={ category="sm", description="RIGHT CURLY BRACKET LOWER HOOK", direction="on", linebreak="al", unicodeslot=0x23AD, }, [0x23AE]={ category="sm", description="INTEGRAL EXTENSION", direction="on", linebreak="al", unicodeslot=0x23AE, }, [0x23AF]={ category="sm", description="HORIZONTAL LINE EXTENSION", direction="on", linebreak="al", unicodeslot=0x23AF, }, [0x23B0]={ category="sm", description="UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION", direction="on", linebreak="al", mathclass="open", mathname="lmoustache", unicodeslot=0x23B0, }, [0x23B1]={ category="sm", description="UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION", direction="on", linebreak="al", mathclass="close", mathname="rmoustache", unicodeslot=0x23B1, }, [0x23B2]={ category="sm", description="SUMMATION TOP", direction="on", linebreak="al", unicodeslot=0x23B2, }, [0x23B3]={ category="sm", description="SUMMATION BOTTOM", direction="on", linebreak="al", unicodeslot=0x23B3, }, [0x23B4]={ category="so", description="TOP SQUARE BRACKET", direction="on", linebreak="al", mathclass="topaccent", mathname="overbracket", unicodeslot=0x23B4, }, [0x23B5]={ category="so", description="BOTTOM SQUARE BRACKET", direction="on", linebreak="al", mathclass="botaccent", mathname="underbracket", unicodeslot=0x23B5, }, [0x23B6]={ category="so", description="BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET", direction="on", linebreak="al", unicodeslot=0x23B6, }, [0x23B7]={ category="so", description="RADICAL SYMBOL BOTTOM", direction="on", linebreak="al", unicodeslot=0x23B7, }, [0x23B8]={ category="so", description="LEFT VERTICAL BOX LINE", direction="on", linebreak="al", unicodeslot=0x23B8, }, [0x23B9]={ category="so", description="RIGHT VERTICAL BOX LINE", direction="on", linebreak="al", unicodeslot=0x23B9, }, [0x23BA]={ category="so", description="HORIZONTAL SCAN LINE-0x0001", direction="on", linebreak="al", unicodeslot=0x23BA, }, [0x23BB]={ category="so", description="HORIZONTAL SCAN LINE-0x0003", direction="on", linebreak="al", unicodeslot=0x23BB, }, [0x23BC]={ category="so", description="HORIZONTAL SCAN LINE-0x0007", direction="on", linebreak="al", unicodeslot=0x23BC, }, [0x23BD]={ category="so", description="HORIZONTAL SCAN LINE-0x0009", direction="on", linebreak="al", unicodeslot=0x23BD, }, [0x23BE]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT", direction="on", linebreak="al", unicodeslot=0x23BE, }, [0x23BF]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT", direction="on", linebreak="al", unicodeslot=0x23BF, }, [0x23C0]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE", direction="on", linebreak="al", unicodeslot=0x23C0, }, [0x23C1]={ category="so", description="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE", direction="on", linebreak="al", unicodeslot=0x23C1, }, [0x23C2]={ category="so", description="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE", direction="on", linebreak="al", unicodeslot=0x23C2, }, [0x23C3]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23C3, }, [0x23C4]={ category="so", description="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23C4, }, [0x23C5]={ category="so", description="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23C5, }, [0x23C6]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE", direction="on", linebreak="al", unicodeslot=0x23C6, }, [0x23C7]={ category="so", description="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE", direction="on", linebreak="al", unicodeslot=0x23C7, }, [0x23C8]={ category="so", description="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE", direction="on", linebreak="al", unicodeslot=0x23C8, }, [0x23C9]={ category="so", description="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL", direction="on", linebreak="al", unicodeslot=0x23C9, }, [0x23CA]={ category="so", description="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL", direction="on", linebreak="al", unicodeslot=0x23CA, }, [0x23CB]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT", direction="on", linebreak="al", unicodeslot=0x23CB, }, [0x23CC]={ category="so", description="DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT", direction="on", linebreak="al", unicodeslot=0x23CC, }, [0x23CD]={ category="so", description="SQUARE FOOT", direction="on", linebreak="al", unicodeslot=0x23CD, }, [0x23CE]={ category="so", description="RETURN SYMBOL", direction="on", linebreak="al", unicodeslot=0x23CE, }, [0x23CF]={ category="so", description="EJECT SYMBOL", direction="on", linebreak="al", unicodeslot=0x23CF, }, [0x23D0]={ category="so", description="VERTICAL LINE EXTENSION", direction="on", linebreak="al", unicodeslot=0x23D0, }, [0x23D1]={ category="so", description="METRICAL BREVE", direction="on", linebreak="al", unicodeslot=0x23D1, }, [0x23D2]={ category="so", description="METRICAL LONG OVER SHORT", direction="on", linebreak="al", unicodeslot=0x23D2, }, [0x23D3]={ category="so", description="METRICAL SHORT OVER LONG", direction="on", linebreak="al", unicodeslot=0x23D3, }, [0x23D4]={ category="so", description="METRICAL LONG OVER TWO SHORTS", direction="on", linebreak="al", unicodeslot=0x23D4, }, [0x23D5]={ category="so", description="METRICAL TWO SHORTS OVER LONG", direction="on", linebreak="al", unicodeslot=0x23D5, }, [0x23D6]={ category="so", description="METRICAL TWO SHORTS JOINED", direction="on", linebreak="al", unicodeslot=0x23D6, }, [0x23D7]={ category="so", description="METRICAL TRISEME", direction="on", linebreak="al", unicodeslot=0x23D7, }, [0x23D8]={ category="so", description="METRICAL TETRASEME", direction="on", linebreak="al", unicodeslot=0x23D8, }, [0x23D9]={ category="so", description="METRICAL PENTASEME", direction="on", linebreak="al", unicodeslot=0x23D9, }, [0x23DA]={ category="so", description="EARTH GROUND", direction="on", linebreak="al", unicodeslot=0x23DA, }, [0x23DB]={ category="so", description="FUSE", direction="on", linebreak="al", unicodeslot=0x23DB, }, [0x23DC]={ category="sm", description="TOP PARENTHESIS", direction="on", linebreak="al", mathclass="topaccent", mathname="overparent", unicodeslot=0x23DC, }, [0x23DD]={ category="sm", description="BOTTOM PARENTHESIS", direction="on", linebreak="al", mathclass="botaccent", mathname="underparent", unicodeslot=0x23DD, }, [0x23DE]={ category="sm", description="TOP CURLY BRACKET", direction="on", linebreak="al", mathclass="topaccent", mathname="overbrace", unicodeslot=0x23DE, }, [0x23DF]={ category="sm", description="BOTTOM CURLY BRACKET", direction="on", linebreak="al", mathclass="botaccent", mathname="underbrace", unicodeslot=0x23DF, }, [0x23E0]={ category="sm", description="TOP TORTOISE SHELL BRACKET", direction="on", linebreak="al", mathclass="topaccent", unicodeslot=0x23E0, }, [0x23E1]={ category="sm", description="BOTTOM TORTOISE SHELL BRACKET", direction="on", linebreak="al", mathclass="botaccent", unicodeslot=0x23E1, }, [0x23E2]={ category="so", description="WHITE TRAPEZIUM", direction="on", linebreak="al", unicodeslot=0x23E2, }, [0x23E3]={ category="so", description="BENZENE RING WITH CIRCLE", direction="on", linebreak="al", unicodeslot=0x23E3, }, [0x23E4]={ category="so", description="STRAIGHTNESS", direction="on", linebreak="al", unicodeslot=0x23E4, }, [0x23E5]={ category="so", description="FLATNESS", direction="on", linebreak="al", unicodeslot=0x23E5, }, [0x23E6]={ category="so", description="AC CURRENT", direction="on", linebreak="al", unicodeslot=0x23E6, }, [0x23E7]={ category="so", description="ELECTRICAL INTERSECTION", direction="on", linebreak="al", unicodeslot=0x23E7, }, [0x23E8]={ category="so", description="DECIMAL EXPONENT SYMBOL", direction="on", linebreak="al", unicodeslot=0x23E8, }, [0x23E9]={ category="so", description="BLACK RIGHT-POINTING DOUBLE TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23E9, }, [0x23EA]={ category="so", description="BLACK LEFT-POINTING DOUBLE TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23EA, }, [0x23EB]={ category="so", description="BLACK UP-POINTING DOUBLE TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23EB, }, [0x23EC]={ category="so", description="BLACK DOWN-POINTING DOUBLE TRIANGLE", direction="on", linebreak="al", unicodeslot=0x23EC, }, [0x23ED]={ category="so", description="BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x23ED, }, [0x23EE]={ category="so", description="BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x23EE, }, [0x23EF]={ category="so", description="BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x23EF, }, [0x23F0]={ category="so", description="ALARM CLOCK", direction="on", linebreak="id", unicodeslot=0x23F0, }, [0x23F1]={ category="so", description="STOPWATCH", direction="on", linebreak="id", unicodeslot=0x23F1, }, [0x23F2]={ category="so", description="TIMER CLOCK", direction="on", linebreak="id", unicodeslot=0x23F2, }, [0x23F3]={ category="so", description="HOURGLASS WITH FLOWING SAND", direction="on", linebreak="id", unicodeslot=0x23F3, }, [0x2400]={ category="so", description="SYMBOL FOR NULL", direction="on", linebreak="al", unicodeslot=0x2400, }, [0x2401]={ category="so", description="SYMBOL FOR START OF HEADING", direction="on", linebreak="al", unicodeslot=0x2401, }, [0x2402]={ category="so", description="SYMBOL FOR START OF TEXT", direction="on", linebreak="al", unicodeslot=0x2402, }, [0x2403]={ category="so", description="SYMBOL FOR END OF TEXT", direction="on", linebreak="al", unicodeslot=0x2403, }, [0x2404]={ category="so", description="SYMBOL FOR END OF TRANSMISSION", direction="on", linebreak="al", unicodeslot=0x2404, }, [0x2405]={ category="so", description="SYMBOL FOR ENQUIRY", direction="on", linebreak="al", unicodeslot=0x2405, }, [0x2406]={ category="so", description="SYMBOL FOR ACKNOWLEDGE", direction="on", linebreak="al", unicodeslot=0x2406, }, [0x2407]={ category="so", description="SYMBOL FOR BELL", direction="on", linebreak="al", unicodeslot=0x2407, }, [0x2408]={ category="so", description="SYMBOL FOR BACKSPACE", direction="on", linebreak="al", unicodeslot=0x2408, }, [0x2409]={ category="so", description="SYMBOL FOR HORIZONTAL TABULATION", direction="on", linebreak="al", unicodeslot=0x2409, }, [0x240A]={ category="so", description="SYMBOL FOR LINE FEED", direction="on", linebreak="al", unicodeslot=0x240A, }, [0x240B]={ category="so", description="SYMBOL FOR VERTICAL TABULATION", direction="on", linebreak="al", unicodeslot=0x240B, }, [0x240C]={ category="so", description="SYMBOL FOR FORM FEED", direction="on", linebreak="al", unicodeslot=0x240C, }, [0x240D]={ category="so", description="SYMBOL FOR CARRIAGE RETURN", direction="on", linebreak="al", unicodeslot=0x240D, }, [0x240E]={ category="so", description="SYMBOL FOR SHIFT OUT", direction="on", linebreak="al", unicodeslot=0x240E, }, [0x240F]={ category="so", description="SYMBOL FOR SHIFT IN", direction="on", linebreak="al", unicodeslot=0x240F, }, [0x2410]={ category="so", description="SYMBOL FOR DATA LINK ESCAPE", direction="on", linebreak="al", unicodeslot=0x2410, }, [0x2411]={ category="so", description="SYMBOL FOR DEVICE CONTROL ONE", direction="on", linebreak="al", unicodeslot=0x2411, }, [0x2412]={ category="so", description="SYMBOL FOR DEVICE CONTROL TWO", direction="on", linebreak="al", unicodeslot=0x2412, }, [0x2413]={ category="so", description="SYMBOL FOR DEVICE CONTROL THREE", direction="on", linebreak="al", unicodeslot=0x2413, }, [0x2414]={ category="so", description="SYMBOL FOR DEVICE CONTROL FOUR", direction="on", linebreak="al", unicodeslot=0x2414, }, [0x2415]={ category="so", description="SYMBOL FOR NEGATIVE ACKNOWLEDGE", direction="on", linebreak="al", unicodeslot=0x2415, }, [0x2416]={ category="so", description="SYMBOL FOR SYNCHRONOUS IDLE", direction="on", linebreak="al", unicodeslot=0x2416, }, [0x2417]={ category="so", description="SYMBOL FOR END OF TRANSMISSION BLOCK", direction="on", linebreak="al", unicodeslot=0x2417, }, [0x2418]={ category="so", description="SYMBOL FOR CANCEL", direction="on", linebreak="al", unicodeslot=0x2418, }, [0x2419]={ category="so", description="SYMBOL FOR END OF MEDIUM", direction="on", linebreak="al", unicodeslot=0x2419, }, [0x241A]={ category="so", description="SYMBOL FOR SUBSTITUTE", direction="on", linebreak="al", unicodeslot=0x241A, }, [0x241B]={ category="so", description="SYMBOL FOR ESCAPE", direction="on", linebreak="al", unicodeslot=0x241B, }, [0x241C]={ category="so", description="SYMBOL FOR FILE SEPARATOR", direction="on", linebreak="al", unicodeslot=0x241C, }, [0x241D]={ category="so", description="SYMBOL FOR GROUP SEPARATOR", direction="on", linebreak="al", unicodeslot=0x241D, }, [0x241E]={ category="so", description="SYMBOL FOR RECORD SEPARATOR", direction="on", linebreak="al", unicodeslot=0x241E, }, [0x241F]={ category="so", description="SYMBOL FOR UNIT SEPARATOR", direction="on", linebreak="al", unicodeslot=0x241F, }, [0x2420]={ category="so", description="SYMBOL FOR SPACE", direction="on", linebreak="al", unicodeslot=0x2420, }, [0x2421]={ category="so", description="SYMBOL FOR DELETE", direction="on", linebreak="al", unicodeslot=0x2421, }, [0x2422]={ category="so", description="BLANK SYMBOL", direction="on", linebreak="al", unicodeslot=0x2422, }, [0x2423]={ adobename="blank", category="so", description="OPEN BOX", direction="on", linebreak="al", unicodeslot=0x2423, }, [0x2424]={ category="so", description="SYMBOL FOR NEWLINE", direction="on", linebreak="al", unicodeslot=0x2424, }, [0x2425]={ category="so", description="SYMBOL FOR DELETE FORM TWO", direction="on", linebreak="al", unicodeslot=0x2425, }, [0x2426]={ category="so", description="SYMBOL FOR SUBSTITUTE FORM TWO", direction="on", linebreak="al", unicodeslot=0x2426, }, [0x2440]={ category="so", description="OCR HOOK", direction="on", linebreak="al", unicodeslot=0x2440, }, [0x2441]={ category="so", description="OCR CHAIR", direction="on", linebreak="al", unicodeslot=0x2441, }, [0x2442]={ category="so", description="OCR FORK", direction="on", linebreak="al", unicodeslot=0x2442, }, [0x2443]={ category="so", description="OCR INVERTED FORK", direction="on", linebreak="al", unicodeslot=0x2443, }, [0x2444]={ category="so", description="OCR BELT BUCKLE", direction="on", linebreak="al", unicodeslot=0x2444, }, [0x2445]={ category="so", description="OCR BOW TIE", direction="on", linebreak="al", unicodeslot=0x2445, }, [0x2446]={ category="so", description="OCR BRANCH BANK IDENTIFICATION", direction="on", linebreak="al", unicodeslot=0x2446, }, [0x2447]={ category="so", description="OCR AMOUNT OF CHECK", direction="on", linebreak="al", unicodeslot=0x2447, }, [0x2448]={ category="so", description="OCR DASH", direction="on", linebreak="al", unicodeslot=0x2448, }, [0x2449]={ category="so", description="OCR CUSTOMER ACCOUNT NUMBER", direction="on", linebreak="al", unicodeslot=0x2449, }, [0x244A]={ category="so", description="OCR DOUBLE BACKSLASH", direction="on", linebreak="al", unicodeslot=0x244A, }, [0x2460]={ adobename="onecircle", category="no", cjkwd="a", description="CIRCLED DIGIT ONE", direction="on", linebreak="ai", specials={ "circle", 0x0031 }, unicodeslot=0x2460, }, [0x2461]={ adobename="twocircle", category="no", cjkwd="a", description="CIRCLED DIGIT TWO", direction="on", linebreak="ai", specials={ "circle", 0x0032 }, unicodeslot=0x2461, }, [0x2462]={ adobename="threecircle", category="no", cjkwd="a", description="CIRCLED DIGIT THREE", direction="on", linebreak="ai", specials={ "circle", 0x0033 }, unicodeslot=0x2462, }, [0x2463]={ adobename="fourcircle", category="no", cjkwd="a", description="CIRCLED DIGIT FOUR", direction="on", linebreak="ai", specials={ "circle", 0x0034 }, unicodeslot=0x2463, }, [0x2464]={ adobename="fivecircle", category="no", cjkwd="a", description="CIRCLED DIGIT FIVE", direction="on", linebreak="ai", specials={ "circle", 0x0035 }, unicodeslot=0x2464, }, [0x2465]={ adobename="sixcircle", category="no", cjkwd="a", description="CIRCLED DIGIT SIX", direction="on", linebreak="ai", specials={ "circle", 0x0036 }, unicodeslot=0x2465, }, [0x2466]={ adobename="sevencircle", category="no", cjkwd="a", description="CIRCLED DIGIT SEVEN", direction="on", linebreak="ai", specials={ "circle", 0x0037 }, unicodeslot=0x2466, }, [0x2467]={ adobename="eightcircle", category="no", cjkwd="a", description="CIRCLED DIGIT EIGHT", direction="on", linebreak="ai", specials={ "circle", 0x0038 }, unicodeslot=0x2467, }, [0x2468]={ adobename="ninecircle", category="no", cjkwd="a", description="CIRCLED DIGIT NINE", direction="on", linebreak="ai", specials={ "circle", 0x0039 }, unicodeslot=0x2468, }, [0x2469]={ adobename="tencircle", category="no", cjkwd="a", description="CIRCLED NUMBER TEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0030 }, unicodeslot=0x2469, }, [0x246A]={ adobename="elevencircle", category="no", cjkwd="a", description="CIRCLED NUMBER ELEVEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0031 }, unicodeslot=0x246A, }, [0x246B]={ adobename="twelvecircle", category="no", cjkwd="a", description="CIRCLED NUMBER TWELVE", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0032 }, unicodeslot=0x246B, }, [0x246C]={ adobename="thirteencircle", category="no", cjkwd="a", description="CIRCLED NUMBER THIRTEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0033 }, unicodeslot=0x246C, }, [0x246D]={ adobename="fourteencircle", category="no", cjkwd="a", description="CIRCLED NUMBER FOURTEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0034 }, unicodeslot=0x246D, }, [0x246E]={ adobename="fifteencircle", category="no", cjkwd="a", description="CIRCLED NUMBER FIFTEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0035 }, unicodeslot=0x246E, }, [0x246F]={ adobename="sixteencircle", category="no", cjkwd="a", description="CIRCLED NUMBER SIXTEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0036 }, unicodeslot=0x246F, }, [0x2470]={ adobename="seventeencircle", category="no", cjkwd="a", description="CIRCLED NUMBER SEVENTEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0037 }, unicodeslot=0x2470, }, [0x2471]={ adobename="eighteencircle", category="no", cjkwd="a", description="CIRCLED NUMBER EIGHTEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0038 }, unicodeslot=0x2471, }, [0x2472]={ adobename="nineteencircle", category="no", cjkwd="a", description="CIRCLED NUMBER NINETEEN", direction="on", linebreak="ai", specials={ "circle", 0x0031, 0x0039 }, unicodeslot=0x2472, }, [0x2473]={ adobename="twentycircle", category="no", cjkwd="a", description="CIRCLED NUMBER TWENTY", direction="on", linebreak="ai", specials={ "circle", 0x0032, 0x0030 }, unicodeslot=0x2473, }, [0x2474]={ adobename="oneparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT ONE", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0029 }, unicodeslot=0x2474, }, [0x2475]={ adobename="twoparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT TWO", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0032, 0x0029 }, unicodeslot=0x2475, }, [0x2476]={ adobename="threeparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT THREE", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0033, 0x0029 }, unicodeslot=0x2476, }, [0x2477]={ adobename="fourparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT FOUR", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0034, 0x0029 }, unicodeslot=0x2477, }, [0x2478]={ adobename="fiveparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT FIVE", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0035, 0x0029 }, unicodeslot=0x2478, }, [0x2479]={ adobename="sixparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT SIX", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0036, 0x0029 }, unicodeslot=0x2479, }, [0x247A]={ adobename="sevenparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT SEVEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0037, 0x0029 }, unicodeslot=0x247A, }, [0x247B]={ adobename="eightparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT EIGHT", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0038, 0x0029 }, unicodeslot=0x247B, }, [0x247C]={ adobename="nineparen", category="no", cjkwd="a", description="PARENTHESIZED DIGIT NINE", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0039, 0x0029 }, unicodeslot=0x247C, }, [0x247D]={ adobename="tenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER TEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0030, 0x0029 }, unicodeslot=0x247D, }, [0x247E]={ adobename="elevenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER ELEVEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0031, 0x0029 }, unicodeslot=0x247E, }, [0x247F]={ adobename="twelveparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER TWELVE", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0032, 0x0029 }, unicodeslot=0x247F, }, [0x2480]={ adobename="thirteenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER THIRTEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0033, 0x0029 }, unicodeslot=0x2480, }, [0x2481]={ adobename="fourteenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER FOURTEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0034, 0x0029 }, unicodeslot=0x2481, }, [0x2482]={ adobename="fifteenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER FIFTEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0035, 0x0029 }, unicodeslot=0x2482, }, [0x2483]={ adobename="sixteenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER SIXTEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0036, 0x0029 }, unicodeslot=0x2483, }, [0x2484]={ adobename="seventeenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER SEVENTEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0037, 0x0029 }, unicodeslot=0x2484, }, [0x2485]={ adobename="eighteenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER EIGHTEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0038, 0x0029 }, unicodeslot=0x2485, }, [0x2486]={ adobename="nineteenparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER NINETEEN", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0031, 0x0039, 0x0029 }, unicodeslot=0x2486, }, [0x2487]={ adobename="twentyparen", category="no", cjkwd="a", description="PARENTHESIZED NUMBER TWENTY", direction="on", linebreak="ai", specials={ "compat", 0x0028, 0x0032, 0x0030, 0x0029 }, unicodeslot=0x2487, }, [0x2488]={ adobename="oneperiod", category="no", cjkwd="a", description="DIGIT ONE FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x002E }, unicodeslot=0x2488, }, [0x2489]={ adobename="twoperiod", category="no", cjkwd="a", description="DIGIT TWO FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0032, 0x002E }, unicodeslot=0x2489, }, [0x248A]={ adobename="threeperiod", category="no", cjkwd="a", description="DIGIT THREE FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0033, 0x002E }, unicodeslot=0x248A, }, [0x248B]={ adobename="fourperiod", category="no", cjkwd="a", description="DIGIT FOUR FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0034, 0x002E }, unicodeslot=0x248B, }, [0x248C]={ adobename="fiveperiod", category="no", cjkwd="a", description="DIGIT FIVE FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0035, 0x002E }, unicodeslot=0x248C, }, [0x248D]={ adobename="sixperiod", category="no", cjkwd="a", description="DIGIT SIX FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0036, 0x002E }, unicodeslot=0x248D, }, [0x248E]={ adobename="sevenperiod", category="no", cjkwd="a", description="DIGIT SEVEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0037, 0x002E }, unicodeslot=0x248E, }, [0x248F]={ adobename="eightperiod", category="no", cjkwd="a", description="DIGIT EIGHT FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0038, 0x002E }, unicodeslot=0x248F, }, [0x2490]={ adobename="nineperiod", category="no", cjkwd="a", description="DIGIT NINE FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0039, 0x002E }, unicodeslot=0x2490, }, [0x2491]={ adobename="tenperiod", category="no", cjkwd="a", description="NUMBER TEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0030, 0x002E }, unicodeslot=0x2491, }, [0x2492]={ adobename="elevenperiod", category="no", cjkwd="a", description="NUMBER ELEVEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0031, 0x002E }, unicodeslot=0x2492, }, [0x2493]={ adobename="twelveperiod", category="no", cjkwd="a", description="NUMBER TWELVE FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0032, 0x002E }, unicodeslot=0x2493, }, [0x2494]={ adobename="thirteenperiod", category="no", cjkwd="a", description="NUMBER THIRTEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0033, 0x002E }, unicodeslot=0x2494, }, [0x2495]={ adobename="fourteenperiod", category="no", cjkwd="a", description="NUMBER FOURTEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0034, 0x002E }, unicodeslot=0x2495, }, [0x2496]={ adobename="fifteenperiod", category="no", cjkwd="a", description="NUMBER FIFTEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0035, 0x002E }, unicodeslot=0x2496, }, [0x2497]={ adobename="sixteenperiod", category="no", cjkwd="a", description="NUMBER SIXTEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0036, 0x002E }, unicodeslot=0x2497, }, [0x2498]={ adobename="seventeenperiod", category="no", cjkwd="a", description="NUMBER SEVENTEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0037, 0x002E }, unicodeslot=0x2498, }, [0x2499]={ adobename="eighteenperiod", category="no", cjkwd="a", description="NUMBER EIGHTEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0038, 0x002E }, unicodeslot=0x2499, }, [0x249A]={ adobename="nineteenperiod", category="no", cjkwd="a", description="NUMBER NINETEEN FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x0039, 0x002E }, unicodeslot=0x249A, }, [0x249B]={ adobename="twentyperiod", category="no", cjkwd="a", description="NUMBER TWENTY FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0032, 0x0030, 0x002E }, unicodeslot=0x249B, }, [0x249C]={ adobename="aparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER A", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0061, 0x0029 }, unicodeslot=0x249C, }, [0x249D]={ adobename="bparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER B", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0062, 0x0029 }, unicodeslot=0x249D, }, [0x249E]={ adobename="cparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER C", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0063, 0x0029 }, unicodeslot=0x249E, }, [0x249F]={ adobename="dparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER D", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0064, 0x0029 }, unicodeslot=0x249F, }, [0x24A0]={ adobename="eparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER E", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0065, 0x0029 }, unicodeslot=0x24A0, }, [0x24A1]={ adobename="fparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER F", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0066, 0x0029 }, unicodeslot=0x24A1, }, [0x24A2]={ adobename="gparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER G", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0067, 0x0029 }, unicodeslot=0x24A2, }, [0x24A3]={ adobename="hparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER H", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0068, 0x0029 }, unicodeslot=0x24A3, }, [0x24A4]={ adobename="iparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER I", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0069, 0x0029 }, unicodeslot=0x24A4, }, [0x24A5]={ adobename="jparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER J", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x006A, 0x0029 }, unicodeslot=0x24A5, }, [0x24A6]={ adobename="kparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER K", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x006B, 0x0029 }, unicodeslot=0x24A6, }, [0x24A7]={ adobename="lparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER L", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x006C, 0x0029 }, unicodeslot=0x24A7, }, [0x24A8]={ adobename="mparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER M", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x006D, 0x0029 }, unicodeslot=0x24A8, }, [0x24A9]={ adobename="nparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER N", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x006E, 0x0029 }, unicodeslot=0x24A9, }, [0x24AA]={ adobename="oparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER O", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x006F, 0x0029 }, unicodeslot=0x24AA, }, [0x24AB]={ adobename="pparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER P", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0070, 0x0029 }, unicodeslot=0x24AB, }, [0x24AC]={ adobename="qparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER Q", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0071, 0x0029 }, unicodeslot=0x24AC, }, [0x24AD]={ adobename="rparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER R", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0072, 0x0029 }, unicodeslot=0x24AD, }, [0x24AE]={ adobename="sparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER S", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0073, 0x0029 }, unicodeslot=0x24AE, }, [0x24AF]={ adobename="tparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER T", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0074, 0x0029 }, unicodeslot=0x24AF, }, [0x24B0]={ adobename="uparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER U", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0075, 0x0029 }, unicodeslot=0x24B0, }, [0x24B1]={ adobename="vparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER V", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0076, 0x0029 }, unicodeslot=0x24B1, }, [0x24B2]={ adobename="wparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER W", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0077, 0x0029 }, unicodeslot=0x24B2, }, [0x24B3]={ adobename="xparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER X", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0078, 0x0029 }, unicodeslot=0x24B3, }, [0x24B4]={ adobename="yparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER Y", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0079, 0x0029 }, unicodeslot=0x24B4, }, [0x24B5]={ adobename="zparen", category="so", cjkwd="a", description="PARENTHESIZED LATIN SMALL LETTER Z", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x007A, 0x0029 }, unicodeslot=0x24B5, }, [0x24B6]={ adobename="Acircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER A", direction="l", lccode=0x24D0, linebreak="ai", specials={ "circle", 0x0041 }, unicodeslot=0x24B6, }, [0x24B7]={ adobename="Bcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER B", direction="l", lccode=0x24D1, linebreak="ai", specials={ "circle", 0x0042 }, unicodeslot=0x24B7, }, [0x24B8]={ adobename="Ccircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER C", direction="l", lccode=0x24D2, linebreak="ai", specials={ "circle", 0x0043 }, unicodeslot=0x24B8, }, [0x24B9]={ adobename="Dcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER D", direction="l", lccode=0x24D3, linebreak="ai", specials={ "circle", 0x0044 }, unicodeslot=0x24B9, }, [0x24BA]={ adobename="Ecircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER E", direction="l", lccode=0x24D4, linebreak="ai", specials={ "circle", 0x0045 }, unicodeslot=0x24BA, }, [0x24BB]={ adobename="Fcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER F", direction="l", lccode=0x24D5, linebreak="ai", specials={ "circle", 0x0046 }, unicodeslot=0x24BB, }, [0x24BC]={ adobename="Gcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER G", direction="l", lccode=0x24D6, linebreak="ai", specials={ "circle", 0x0047 }, unicodeslot=0x24BC, }, [0x24BD]={ adobename="Hcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER H", direction="l", lccode=0x24D7, linebreak="ai", specials={ "circle", 0x0048 }, unicodeslot=0x24BD, }, [0x24BE]={ adobename="Icircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER I", direction="l", lccode=0x24D8, linebreak="ai", specials={ "circle", 0x0049 }, unicodeslot=0x24BE, }, [0x24BF]={ adobename="Jcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER J", direction="l", lccode=0x24D9, linebreak="ai", specials={ "circle", 0x004A }, unicodeslot=0x24BF, }, [0x24C0]={ adobename="Kcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER K", direction="l", lccode=0x24DA, linebreak="ai", specials={ "circle", 0x004B }, unicodeslot=0x24C0, }, [0x24C1]={ adobename="Lcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER L", direction="l", lccode=0x24DB, linebreak="ai", specials={ "circle", 0x004C }, unicodeslot=0x24C1, }, [0x24C2]={ adobename="Mcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER M", direction="l", lccode=0x24DC, linebreak="ai", specials={ "circle", 0x004D }, unicodeslot=0x24C2, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x24C3]={ adobename="Ncircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER N", direction="l", lccode=0x24DD, linebreak="ai", specials={ "circle", 0x004E }, unicodeslot=0x24C3, }, [0x24C4]={ adobename="Ocircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER O", direction="l", lccode=0x24DE, linebreak="ai", specials={ "circle", 0x004F }, unicodeslot=0x24C4, }, [0x24C5]={ adobename="Pcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER P", direction="l", lccode=0x24DF, linebreak="ai", specials={ "circle", 0x0050 }, unicodeslot=0x24C5, }, [0x24C6]={ adobename="Qcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER Q", direction="l", lccode=0x24E0, linebreak="ai", specials={ "circle", 0x0051 }, unicodeslot=0x24C6, }, [0x24C7]={ adobename="Rcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER R", direction="l", lccode=0x24E1, linebreak="ai", mathclass="ordinary", mathname="circledR", specials={ "circle", 0x0052 }, unicodeslot=0x24C7, }, [0x24C8]={ adobename="Scircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER S", direction="l", lccode=0x24E2, linebreak="ai", mathclass="ordinary", mathname="circledS", specials={ "circle", 0x0053 }, unicodeslot=0x24C8, }, [0x24C9]={ adobename="Tcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER T", direction="l", lccode=0x24E3, linebreak="ai", specials={ "circle", 0x0054 }, unicodeslot=0x24C9, }, [0x24CA]={ adobename="Ucircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER U", direction="l", lccode=0x24E4, linebreak="ai", specials={ "circle", 0x0055 }, unicodeslot=0x24CA, }, [0x24CB]={ adobename="Vcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER V", direction="l", lccode=0x24E5, linebreak="ai", specials={ "circle", 0x0056 }, unicodeslot=0x24CB, }, [0x24CC]={ adobename="Wcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER W", direction="l", lccode=0x24E6, linebreak="ai", specials={ "circle", 0x0057 }, unicodeslot=0x24CC, }, [0x24CD]={ adobename="Xcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER X", direction="l", lccode=0x24E7, linebreak="ai", specials={ "circle", 0x0058 }, unicodeslot=0x24CD, }, [0x24CE]={ adobename="Ycircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER Y", direction="l", lccode=0x24E8, linebreak="ai", specials={ "circle", 0x0059 }, unicodeslot=0x24CE, }, [0x24CF]={ adobename="Zcircle", category="so", cjkwd="a", description="CIRCLED LATIN CAPITAL LETTER Z", direction="l", lccode=0x24E9, linebreak="ai", specials={ "circle", 0x005A }, unicodeslot=0x24CF, }, [0x24D0]={ adobename="acircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER A", direction="l", linebreak="ai", specials={ "circle", 0x0061 }, uccode=0x24B6, unicodeslot=0x24D0, }, [0x24D1]={ adobename="bcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER B", direction="l", linebreak="ai", specials={ "circle", 0x0062 }, uccode=0x24B7, unicodeslot=0x24D1, }, [0x24D2]={ adobename="ccircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER C", direction="l", linebreak="ai", specials={ "circle", 0x0063 }, uccode=0x24B8, unicodeslot=0x24D2, }, [0x24D3]={ adobename="dcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER D", direction="l", linebreak="ai", specials={ "circle", 0x0064 }, uccode=0x24B9, unicodeslot=0x24D3, }, [0x24D4]={ adobename="ecircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER E", direction="l", linebreak="ai", specials={ "circle", 0x0065 }, uccode=0x24BA, unicodeslot=0x24D4, }, [0x24D5]={ adobename="fcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER F", direction="l", linebreak="ai", specials={ "circle", 0x0066 }, uccode=0x24BB, unicodeslot=0x24D5, }, [0x24D6]={ adobename="gcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER G", direction="l", linebreak="ai", specials={ "circle", 0x0067 }, uccode=0x24BC, unicodeslot=0x24D6, }, [0x24D7]={ adobename="hcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER H", direction="l", linebreak="ai", specials={ "circle", 0x0068 }, uccode=0x24BD, unicodeslot=0x24D7, }, [0x24D8]={ adobename="icircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER I", direction="l", linebreak="ai", specials={ "circle", 0x0069 }, uccode=0x24BE, unicodeslot=0x24D8, }, [0x24D9]={ adobename="jcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER J", direction="l", linebreak="ai", specials={ "circle", 0x006A }, uccode=0x24BF, unicodeslot=0x24D9, }, [0x24DA]={ adobename="kcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER K", direction="l", linebreak="ai", specials={ "circle", 0x006B }, uccode=0x24C0, unicodeslot=0x24DA, }, [0x24DB]={ adobename="lcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER L", direction="l", linebreak="ai", specials={ "circle", 0x006C }, uccode=0x24C1, unicodeslot=0x24DB, }, [0x24DC]={ adobename="mcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER M", direction="l", linebreak="ai", specials={ "circle", 0x006D }, uccode=0x24C2, unicodeslot=0x24DC, }, [0x24DD]={ adobename="ncircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER N", direction="l", linebreak="ai", specials={ "circle", 0x006E }, uccode=0x24C3, unicodeslot=0x24DD, }, [0x24DE]={ adobename="ocircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER O", direction="l", linebreak="ai", specials={ "circle", 0x006F }, uccode=0x24C4, unicodeslot=0x24DE, }, [0x24DF]={ adobename="pcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER P", direction="l", linebreak="ai", specials={ "circle", 0x0070 }, uccode=0x24C5, unicodeslot=0x24DF, }, [0x24E0]={ adobename="qcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER Q", direction="l", linebreak="ai", specials={ "circle", 0x0071 }, uccode=0x24C6, unicodeslot=0x24E0, }, [0x24E1]={ adobename="rcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER R", direction="l", linebreak="ai", specials={ "circle", 0x0072 }, uccode=0x24C7, unicodeslot=0x24E1, }, [0x24E2]={ adobename="scircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER S", direction="l", linebreak="ai", specials={ "circle", 0x0073 }, uccode=0x24C8, unicodeslot=0x24E2, }, [0x24E3]={ adobename="tcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER T", direction="l", linebreak="ai", specials={ "circle", 0x0074 }, uccode=0x24C9, unicodeslot=0x24E3, }, [0x24E4]={ adobename="ucircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER U", direction="l", linebreak="ai", specials={ "circle", 0x0075 }, uccode=0x24CA, unicodeslot=0x24E4, }, [0x24E5]={ adobename="vcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER V", direction="l", linebreak="ai", specials={ "circle", 0x0076 }, uccode=0x24CB, unicodeslot=0x24E5, }, [0x24E6]={ adobename="wcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER W", direction="l", linebreak="ai", specials={ "circle", 0x0077 }, uccode=0x24CC, unicodeslot=0x24E6, }, [0x24E7]={ adobename="xcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER X", direction="l", linebreak="ai", specials={ "circle", 0x0078 }, uccode=0x24CD, unicodeslot=0x24E7, }, [0x24E8]={ adobename="ycircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER Y", direction="l", linebreak="ai", specials={ "circle", 0x0079 }, uccode=0x24CE, unicodeslot=0x24E8, }, [0x24E9]={ adobename="zcircle", category="so", cjkwd="a", description="CIRCLED LATIN SMALL LETTER Z", direction="l", linebreak="ai", specials={ "circle", 0x007A }, uccode=0x24CF, unicodeslot=0x24E9, }, [0x24EA]={ category="no", description="CIRCLED DIGIT ZERO", direction="on", linebreak="ai", specials={ "circle", 0x0030 }, unicodeslot=0x24EA, }, [0x24EB]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER ELEVEN", direction="on", linebreak="ai", unicodeslot=0x24EB, }, [0x24EC]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER TWELVE", direction="on", linebreak="ai", unicodeslot=0x24EC, }, [0x24ED]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER THIRTEEN", direction="on", linebreak="ai", unicodeslot=0x24ED, }, [0x24EE]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER FOURTEEN", direction="on", linebreak="ai", unicodeslot=0x24EE, }, [0x24EF]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER FIFTEEN", direction="on", linebreak="ai", unicodeslot=0x24EF, }, [0x24F0]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER SIXTEEN", direction="on", linebreak="ai", unicodeslot=0x24F0, }, [0x24F1]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER SEVENTEEN", direction="on", linebreak="ai", unicodeslot=0x24F1, }, [0x24F2]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER EIGHTEEN", direction="on", linebreak="ai", unicodeslot=0x24F2, }, [0x24F3]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER NINETEEN", direction="on", linebreak="ai", unicodeslot=0x24F3, }, [0x24F4]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED NUMBER TWENTY", direction="on", linebreak="ai", unicodeslot=0x24F4, }, [0x24F5]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT ONE", direction="on", linebreak="ai", unicodeslot=0x24F5, }, [0x24F6]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT TWO", direction="on", linebreak="ai", unicodeslot=0x24F6, }, [0x24F7]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT THREE", direction="on", linebreak="ai", unicodeslot=0x24F7, }, [0x24F8]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT FOUR", direction="on", linebreak="ai", unicodeslot=0x24F8, }, [0x24F9]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT FIVE", direction="on", linebreak="ai", unicodeslot=0x24F9, }, [0x24FA]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT SIX", direction="on", linebreak="ai", unicodeslot=0x24FA, }, [0x24FB]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT SEVEN", direction="on", linebreak="ai", unicodeslot=0x24FB, }, [0x24FC]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT EIGHT", direction="on", linebreak="ai", unicodeslot=0x24FC, }, [0x24FD]={ category="no", cjkwd="a", description="DOUBLE CIRCLED DIGIT NINE", direction="on", linebreak="ai", unicodeslot=0x24FD, }, [0x24FE]={ category="no", cjkwd="a", description="DOUBLE CIRCLED NUMBER TEN", direction="on", linebreak="ai", unicodeslot=0x24FE, }, [0x24FF]={ category="no", cjkwd="a", description="NEGATIVE CIRCLED DIGIT ZERO", direction="on", linebreak="al", unicodeslot=0x24FF, }, [0x2500]={ adobename="SF100000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2500, }, [0x2501]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2501, }, [0x2502]={ adobename="SF110000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT VERTICAL", direction="on", linebreak="ai", unicodeslot=0x2502, }, [0x2503]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY VERTICAL", direction="on", linebreak="ai", unicodeslot=0x2503, }, [0x2504]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2504, }, [0x2505]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2505, }, [0x2506]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL", direction="on", linebreak="ai", unicodeslot=0x2506, }, [0x2507]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL", direction="on", linebreak="ai", unicodeslot=0x2507, }, [0x2508]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2508, }, [0x2509]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2509, }, [0x250A]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL", direction="on", linebreak="ai", unicodeslot=0x250A, }, [0x250B]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL", direction="on", linebreak="ai", unicodeslot=0x250B, }, [0x250C]={ adobename="SF010000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT DOWN AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x250C, }, [0x250D]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY", direction="on", linebreak="ai", unicodeslot=0x250D, }, [0x250E]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT", direction="on", linebreak="ai", unicodeslot=0x250E, }, [0x250F]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY DOWN AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x250F, }, [0x2510]={ adobename="SF030000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT DOWN AND LEFT", direction="on", linebreak="ai", unicodeslot=0x2510, }, [0x2511]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY", direction="on", linebreak="ai", unicodeslot=0x2511, }, [0x2512]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT", direction="on", linebreak="ai", unicodeslot=0x2512, }, [0x2513]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY DOWN AND LEFT", direction="on", linebreak="ai", unicodeslot=0x2513, }, [0x2514]={ adobename="SF020000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT UP AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x2514, }, [0x2515]={ category="so", cjkwd="a", description="BOX DRAWINGS UP LIGHT AND RIGHT HEAVY", direction="on", linebreak="ai", unicodeslot=0x2515, }, [0x2516]={ category="so", cjkwd="a", description="BOX DRAWINGS UP HEAVY AND RIGHT LIGHT", direction="on", linebreak="ai", unicodeslot=0x2516, }, [0x2517]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY UP AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x2517, }, [0x2518]={ adobename="SF040000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT UP AND LEFT", direction="on", linebreak="ai", unicodeslot=0x2518, }, [0x2519]={ category="so", cjkwd="a", description="BOX DRAWINGS UP LIGHT AND LEFT HEAVY", direction="on", linebreak="ai", unicodeslot=0x2519, }, [0x251A]={ category="so", cjkwd="a", description="BOX DRAWINGS UP HEAVY AND LEFT LIGHT", direction="on", linebreak="ai", unicodeslot=0x251A, }, [0x251B]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY UP AND LEFT", direction="on", linebreak="ai", unicodeslot=0x251B, }, [0x251C]={ adobename="SF080000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT VERTICAL AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x251C, }, [0x251D]={ category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY", direction="on", linebreak="ai", unicodeslot=0x251D, }, [0x251E]={ category="so", cjkwd="a", description="BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT", direction="on", linebreak="ai", unicodeslot=0x251E, }, [0x251F]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT", direction="on", linebreak="ai", unicodeslot=0x251F, }, [0x2520]={ category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT", direction="on", linebreak="ai", unicodeslot=0x2520, }, [0x2521]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY", direction="on", linebreak="ai", unicodeslot=0x2521, }, [0x2522]={ category="so", cjkwd="a", description="BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY", direction="on", linebreak="ai", unicodeslot=0x2522, }, [0x2523]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY VERTICAL AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x2523, }, [0x2524]={ adobename="SF090000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT VERTICAL AND LEFT", direction="on", linebreak="ai", unicodeslot=0x2524, }, [0x2525]={ category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY", direction="on", linebreak="ai", unicodeslot=0x2525, }, [0x2526]={ category="so", cjkwd="a", description="BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT", direction="on", linebreak="ai", unicodeslot=0x2526, }, [0x2527]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT", direction="on", linebreak="ai", unicodeslot=0x2527, }, [0x2528]={ category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT", direction="on", linebreak="ai", unicodeslot=0x2528, }, [0x2529]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY", direction="on", linebreak="ai", unicodeslot=0x2529, }, [0x252A]={ category="so", cjkwd="a", description="BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY", direction="on", linebreak="ai", unicodeslot=0x252A, }, [0x252B]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY VERTICAL AND LEFT", direction="on", linebreak="ai", unicodeslot=0x252B, }, [0x252C]={ adobename="SF060000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT DOWN AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x252C, }, [0x252D]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT", direction="on", linebreak="ai", unicodeslot=0x252D, }, [0x252E]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT", direction="on", linebreak="ai", unicodeslot=0x252E, }, [0x252F]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x252F, }, [0x2530]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x2530, }, [0x2531]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY", direction="on", linebreak="ai", unicodeslot=0x2531, }, [0x2532]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY", direction="on", linebreak="ai", unicodeslot=0x2532, }, [0x2533]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY DOWN AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2533, }, [0x2534]={ adobename="SF070000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT UP AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2534, }, [0x2535]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT", direction="on", linebreak="ai", unicodeslot=0x2535, }, [0x2536]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT", direction="on", linebreak="ai", unicodeslot=0x2536, }, [0x2537]={ category="so", cjkwd="a", description="BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x2537, }, [0x2538]={ category="so", cjkwd="a", description="BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x2538, }, [0x2539]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY", direction="on", linebreak="ai", unicodeslot=0x2539, }, [0x253A]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY", direction="on", linebreak="ai", unicodeslot=0x253A, }, [0x253B]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY UP AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x253B, }, [0x253C]={ adobename="SF050000", category="so", cjkwd="a", description="BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x253C, }, [0x253D]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x253D, }, [0x253E]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x253E, }, [0x253F]={ category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x253F, }, [0x2540]={ category="so", cjkwd="a", description="BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x2540, }, [0x2541]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x2541, }, [0x2542]={ category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT", direction="on", linebreak="ai", unicodeslot=0x2542, }, [0x2543]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT", direction="on", linebreak="ai", unicodeslot=0x2543, }, [0x2544]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT", direction="on", linebreak="ai", unicodeslot=0x2544, }, [0x2545]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT", direction="on", linebreak="ai", unicodeslot=0x2545, }, [0x2546]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT", direction="on", linebreak="ai", unicodeslot=0x2546, }, [0x2547]={ category="so", cjkwd="a", description="BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x2547, }, [0x2548]={ category="so", cjkwd="a", description="BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x2548, }, [0x2549]={ category="so", cjkwd="a", description="BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x2549, }, [0x254A]={ category="so", cjkwd="a", description="BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY", direction="on", linebreak="ai", unicodeslot=0x254A, }, [0x254B]={ category="so", cjkwd="a", description="BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x254B, }, [0x254C]={ category="so", description="BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL", direction="on", linebreak="al", unicodeslot=0x254C, }, [0x254D]={ category="so", description="BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL", direction="on", linebreak="al", unicodeslot=0x254D, }, [0x254E]={ category="so", description="BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL", direction="on", linebreak="al", unicodeslot=0x254E, }, [0x254F]={ category="so", description="BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL", direction="on", linebreak="al", unicodeslot=0x254F, }, [0x2550]={ adobename="SF430000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2550, }, [0x2551]={ adobename="SF240000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE VERTICAL", direction="on", linebreak="ai", unicodeslot=0x2551, }, [0x2552]={ adobename="SF510000", category="so", cjkwd="a", description="BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE", direction="on", linebreak="ai", unicodeslot=0x2552, }, [0x2553]={ adobename="SF520000", category="so", cjkwd="a", description="BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE", direction="on", linebreak="ai", unicodeslot=0x2553, }, [0x2554]={ adobename="SF390000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE DOWN AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x2554, }, [0x2555]={ adobename="SF220000", category="so", cjkwd="a", description="BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE", direction="on", linebreak="ai", unicodeslot=0x2555, }, [0x2556]={ adobename="SF210000", category="so", cjkwd="a", description="BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE", direction="on", linebreak="ai", unicodeslot=0x2556, }, [0x2557]={ adobename="SF250000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE DOWN AND LEFT", direction="on", linebreak="ai", unicodeslot=0x2557, }, [0x2558]={ adobename="SF500000", category="so", cjkwd="a", description="BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE", direction="on", linebreak="ai", unicodeslot=0x2558, }, [0x2559]={ adobename="SF490000", category="so", cjkwd="a", description="BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE", direction="on", linebreak="ai", unicodeslot=0x2559, }, [0x255A]={ adobename="SF380000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE UP AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x255A, }, [0x255B]={ adobename="SF280000", category="so", cjkwd="a", description="BOX DRAWINGS UP SINGLE AND LEFT DOUBLE", direction="on", linebreak="ai", unicodeslot=0x255B, }, [0x255C]={ adobename="SF270000", category="so", cjkwd="a", description="BOX DRAWINGS UP DOUBLE AND LEFT SINGLE", direction="on", linebreak="ai", unicodeslot=0x255C, }, [0x255D]={ adobename="SF260000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE UP AND LEFT", direction="on", linebreak="ai", unicodeslot=0x255D, }, [0x255E]={ adobename="SF360000", category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE", direction="on", linebreak="ai", unicodeslot=0x255E, }, [0x255F]={ adobename="SF370000", category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE", direction="on", linebreak="ai", unicodeslot=0x255F, }, [0x2560]={ adobename="SF420000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE VERTICAL AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x2560, }, [0x2561]={ adobename="SF190000", category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE", direction="on", linebreak="ai", unicodeslot=0x2561, }, [0x2562]={ adobename="SF200000", category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE", direction="on", linebreak="ai", unicodeslot=0x2562, }, [0x2563]={ adobename="SF230000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE VERTICAL AND LEFT", direction="on", linebreak="ai", unicodeslot=0x2563, }, [0x2564]={ adobename="SF470000", category="so", cjkwd="a", description="BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE", direction="on", linebreak="ai", unicodeslot=0x2564, }, [0x2565]={ adobename="SF480000", category="so", cjkwd="a", description="BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE", direction="on", linebreak="ai", unicodeslot=0x2565, }, [0x2566]={ adobename="SF410000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2566, }, [0x2567]={ adobename="SF450000", category="so", cjkwd="a", description="BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE", direction="on", linebreak="ai", unicodeslot=0x2567, }, [0x2568]={ adobename="SF460000", category="so", cjkwd="a", description="BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE", direction="on", linebreak="ai", unicodeslot=0x2568, }, [0x2569]={ adobename="SF400000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE UP AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x2569, }, [0x256A]={ adobename="SF540000", category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE", direction="on", linebreak="ai", unicodeslot=0x256A, }, [0x256B]={ adobename="SF530000", category="so", cjkwd="a", description="BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE", direction="on", linebreak="ai", unicodeslot=0x256B, }, [0x256C]={ adobename="SF440000", category="so", cjkwd="a", description="BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL", direction="on", linebreak="ai", unicodeslot=0x256C, }, [0x256D]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT ARC DOWN AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x256D, }, [0x256E]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT ARC DOWN AND LEFT", direction="on", linebreak="ai", unicodeslot=0x256E, }, [0x256F]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT ARC UP AND LEFT", direction="on", linebreak="ai", unicodeslot=0x256F, }, [0x2570]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT ARC UP AND RIGHT", direction="on", linebreak="ai", unicodeslot=0x2570, }, [0x2571]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT", direction="on", linebreak="ai", unicodeslot=0x2571, }, [0x2572]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT", direction="on", linebreak="ai", unicodeslot=0x2572, }, [0x2573]={ category="so", cjkwd="a", description="BOX DRAWINGS LIGHT DIAGONAL CROSS", direction="on", linebreak="ai", unicodeslot=0x2573, }, [0x2574]={ category="so", description="BOX DRAWINGS LIGHT LEFT", direction="on", linebreak="ai", unicodeslot=0x2574, }, [0x2575]={ category="so", description="BOX DRAWINGS LIGHT UP", direction="on", linebreak="al", unicodeslot=0x2575, }, [0x2576]={ category="so", description="BOX DRAWINGS LIGHT RIGHT", direction="on", linebreak="al", unicodeslot=0x2576, }, [0x2577]={ category="so", description="BOX DRAWINGS LIGHT DOWN", direction="on", linebreak="al", unicodeslot=0x2577, }, [0x2578]={ category="so", description="BOX DRAWINGS HEAVY LEFT", direction="on", linebreak="al", unicodeslot=0x2578, }, [0x2579]={ category="so", description="BOX DRAWINGS HEAVY UP", direction="on", linebreak="al", unicodeslot=0x2579, }, [0x257A]={ category="so", description="BOX DRAWINGS HEAVY RIGHT", direction="on", linebreak="al", unicodeslot=0x257A, }, [0x257B]={ category="so", description="BOX DRAWINGS HEAVY DOWN", direction="on", linebreak="al", unicodeslot=0x257B, }, [0x257C]={ category="so", description="BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT", direction="on", linebreak="al", unicodeslot=0x257C, }, [0x257D]={ category="so", description="BOX DRAWINGS LIGHT UP AND HEAVY DOWN", direction="on", linebreak="al", unicodeslot=0x257D, }, [0x257E]={ category="so", description="BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT", direction="on", linebreak="al", unicodeslot=0x257E, }, [0x257F]={ category="so", description="BOX DRAWINGS HEAVY UP AND LIGHT DOWN", direction="on", linebreak="al", unicodeslot=0x257F, }, [0x2580]={ adobename="upblock", category="so", cjkwd="a", description="UPPER HALF BLOCK", direction="on", linebreak="ai", unicodeslot=0x2580, }, [0x2581]={ category="so", cjkwd="a", description="LOWER ONE EIGHTH BLOCK", direction="on", linebreak="ai", unicodeslot=0x2581, }, [0x2582]={ category="so", cjkwd="a", description="LOWER ONE QUARTER BLOCK", direction="on", linebreak="ai", unicodeslot=0x2582, }, [0x2583]={ category="so", cjkwd="a", description="LOWER THREE EIGHTHS BLOCK", direction="on", linebreak="ai", unicodeslot=0x2583, }, [0x2584]={ adobename="dnblock", category="so", cjkwd="a", description="LOWER HALF BLOCK", direction="on", linebreak="ai", unicodeslot=0x2584, }, [0x2585]={ category="so", cjkwd="a", description="LOWER FIVE EIGHTHS BLOCK", direction="on", linebreak="ai", unicodeslot=0x2585, }, [0x2586]={ category="so", cjkwd="a", description="LOWER THREE QUARTERS BLOCK", direction="on", linebreak="ai", unicodeslot=0x2586, }, [0x2587]={ category="so", cjkwd="a", description="LOWER SEVEN EIGHTHS BLOCK", direction="on", linebreak="ai", unicodeslot=0x2587, }, [0x2588]={ adobename="block", category="so", cjkwd="a", description="FULL BLOCK", direction="on", linebreak="ai", unicodeslot=0x2588, }, [0x2589]={ category="so", cjkwd="a", description="LEFT SEVEN EIGHTHS BLOCK", direction="on", linebreak="ai", unicodeslot=0x2589, }, [0x258A]={ category="so", cjkwd="a", description="LEFT THREE QUARTERS BLOCK", direction="on", linebreak="ai", unicodeslot=0x258A, }, [0x258B]={ category="so", cjkwd="a", description="LEFT FIVE EIGHTHS BLOCK", direction="on", linebreak="ai", unicodeslot=0x258B, }, [0x258C]={ adobename="lfblock", category="so", cjkwd="a", description="LEFT HALF BLOCK", direction="on", linebreak="ai", unicodeslot=0x258C, }, [0x258D]={ category="so", cjkwd="a", description="LEFT THREE EIGHTHS BLOCK", direction="on", linebreak="ai", unicodeslot=0x258D, }, [0x258E]={ category="so", cjkwd="a", description="LEFT ONE QUARTER BLOCK", direction="on", linebreak="ai", unicodeslot=0x258E, }, [0x258F]={ category="so", cjkwd="a", description="LEFT ONE EIGHTH BLOCK", direction="on", linebreak="ai", unicodeslot=0x258F, }, [0x2590]={ adobename="rtblock", category="so", description="RIGHT HALF BLOCK", direction="on", linebreak="al", unicodeslot=0x2590, }, [0x2591]={ adobename="shadelight", category="so", description="LIGHT SHADE", direction="on", linebreak="al", unicodeslot=0x2591, }, [0x2592]={ adobename="shademedium", category="so", cjkwd="a", description="MEDIUM SHADE", direction="on", linebreak="ai", unicodeslot=0x2592, }, [0x2593]={ adobename="shadedark", category="so", cjkwd="a", description="DARK SHADE", direction="on", linebreak="ai", unicodeslot=0x2593, }, [0x2594]={ category="so", cjkwd="a", description="UPPER ONE EIGHTH BLOCK", direction="on", linebreak="ai", unicodeslot=0x2594, }, [0x2595]={ category="so", cjkwd="a", description="RIGHT ONE EIGHTH BLOCK", direction="on", linebreak="ai", unicodeslot=0x2595, }, [0x2596]={ category="so", description="QUADRANT LOWER LEFT", direction="on", linebreak="al", unicodeslot=0x2596, }, [0x2597]={ category="so", description="QUADRANT LOWER RIGHT", direction="on", linebreak="al", unicodeslot=0x2597, }, [0x2598]={ category="so", description="QUADRANT UPPER LEFT", direction="on", linebreak="al", unicodeslot=0x2598, }, [0x2599]={ category="so", description="QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT", direction="on", linebreak="al", unicodeslot=0x2599, }, [0x259A]={ category="so", description="QUADRANT UPPER LEFT AND LOWER RIGHT", direction="on", linebreak="al", unicodeslot=0x259A, }, [0x259B]={ category="so", description="QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT", direction="on", linebreak="al", unicodeslot=0x259B, }, [0x259C]={ category="so", description="QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT", direction="on", linebreak="al", unicodeslot=0x259C, }, [0x259D]={ category="so", description="QUADRANT UPPER RIGHT", direction="on", linebreak="al", unicodeslot=0x259D, }, [0x259E]={ category="so", description="QUADRANT UPPER RIGHT AND LOWER LEFT", direction="on", linebreak="al", unicodeslot=0x259E, }, [0x259F]={ category="so", description="QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT", direction="on", linebreak="al", unicodeslot=0x259F, }, [0x25A0]={ adobename="filledbox", category="so", cjkwd="a", description="BLACK SQUARE", direction="on", linebreak="ai", mathclass="ordinary", mathname="blacksquare", unicodeslot=0x25A0, }, [0x25A1]={ adobename="whitesquare", category="so", cjkwd="a", description="WHITE SQUARE", direction="on", linebreak="ai", mathspec={ { class="ordinary", name="square", }, { class="ordinary", name="Box", }, }, unicodeslot=0x25A1, }, [0x25A2]={ category="so", description="WHITE SQUARE WITH ROUNDED CORNERS", direction="on", linebreak="al", mathclass="ordinary", unicodeslot=0x25A2, }, [0x25A3]={ adobename="squarewhitewithsmallblack", category="so", cjkwd="a", description="WHITE SQUARE CONTAINING BLACK SMALL SQUARE", direction="on", linebreak="ai", unicodeslot=0x25A3, }, [0x25A4]={ adobename="squarehorizontalfill", category="so", cjkwd="a", description="SQUARE WITH HORIZONTAL FILL", direction="on", linebreak="ai", unicodeslot=0x25A4, }, [0x25A5]={ adobename="squareverticalfill", category="so", cjkwd="a", description="SQUARE WITH VERTICAL FILL", direction="on", linebreak="ai", unicodeslot=0x25A5, }, [0x25A6]={ adobename="squareorthogonalcrosshatchfill", category="so", cjkwd="a", description="SQUARE WITH ORTHOGONAL CROSSHATCH FILL", direction="on", linebreak="ai", unicodeslot=0x25A6, }, [0x25A7]={ adobename="squareupperlefttolowerrightfill", category="so", cjkwd="a", description="SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL", direction="on", linebreak="ai", unicodeslot=0x25A7, }, [0x25A8]={ adobename="squareupperrighttolowerleftfill", category="so", cjkwd="a", description="SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL", direction="on", linebreak="ai", unicodeslot=0x25A8, }, [0x25A9]={ adobename="squarediagonalcrosshatchfill", category="so", cjkwd="a", description="SQUARE WITH DIAGONAL CROSSHATCH FILL", direction="on", linebreak="ai", unicodeslot=0x25A9, }, [0x25AA]={ adobename="blacksmallsquare", category="so", description="BLACK SMALL SQUARE", direction="on", linebreak="al", unicodeslot=0x25AA, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25AB]={ adobename="whitesmallsquare", category="so", description="WHITE SMALL SQUARE", direction="on", linebreak="al", unicodeslot=0x25AB, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25AC]={ adobename="filledrect", category="so", description="BLACK RECTANGLE", direction="on", linebreak="al", unicodeslot=0x25AC, }, [0x25AD]={ category="so", description="WHITE RECTANGLE", direction="on", linebreak="al", unicodeslot=0x25AD, }, [0x25AE]={ category="so", description="BLACK VERTICAL RECTANGLE", direction="on", linebreak="al", unicodeslot=0x25AE, }, [0x25AF]={ category="so", description="WHITE VERTICAL RECTANGLE", direction="on", linebreak="al", unicodeslot=0x25AF, }, [0x25B0]={ category="so", description="BLACK PARALLELOGRAM", direction="on", linebreak="al", unicodeslot=0x25B0, }, [0x25B1]={ category="so", description="WHITE PARALLELOGRAM", direction="on", linebreak="al", unicodeslot=0x25B1, }, [0x25B2]={ adobename="triagup", category="so", cjkwd="a", description="BLACK UP-POINTING TRIANGLE", direction="on", linebreak="ai", mathclass="binary", mathname="blacktriangle", unicodeslot=0x25B2, }, [0x25B3]={ adobename="whiteuppointingtriangle", category="so", cjkwd="a", description="WHITE UP-POINTING TRIANGLE", direction="on", linebreak="ai", mathspec={ { class="ordinary", name="triangle", }, { class="binary", name="bigtriangleup", }, }, unicodeslot=0x25B3, }, [0x25B4]={ adobename="blackuppointingsmalltriangle", category="so", description="BLACK UP-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25B4, }, [0x25B5]={ adobename="whiteuppointingsmalltriangle", category="so", description="WHITE UP-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25B5, }, [0x25B6]={ adobename="blackrightpointingtriangle", category="so", cjkwd="a", description="BLACK RIGHT-POINTING TRIANGLE", direction="on", linebreak="ai", mathclass="binary", mathname="blacktriangleright", unicodeslot=0x25B6, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25B7]={ adobename="whiterightpointingtriangle", category="sm", cjkwd="a", description="WHITE RIGHT-POINTING TRIANGLE", direction="on", linebreak="ai", mathclass="binary", mathname="triangleright", unicodeslot=0x25B7, }, [0x25B8]={ category="so", description="BLACK RIGHT-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25B8, }, [0x25B9]={ adobename="whiterightpointingsmalltriangle", category="so", description="WHITE RIGHT-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25B9, }, [0x25BA]={ adobename="triagrt", category="so", description="BLACK RIGHT-POINTING POINTER", direction="on", linebreak="al", unicodeslot=0x25BA, }, [0x25BB]={ category="so", description="WHITE RIGHT-POINTING POINTER", direction="on", linebreak="al", unicodeslot=0x25BB, }, [0x25BC]={ adobename="triagdn", category="so", cjkwd="a", description="BLACK DOWN-POINTING TRIANGLE", direction="on", linebreak="ai", mathclass="binary", mathname="blacktriangledown", unicodeslot=0x25BC, }, [0x25BD]={ adobename="whitedownpointingtriangle", category="so", cjkwd="a", description="WHITE DOWN-POINTING TRIANGLE", direction="on", linebreak="ai", mathspec={ { class="binary", name="triangledown", }, { class="binary", name="bigtriangledown", }, }, unicodeslot=0x25BD, }, [0x25BE]={ category="so", description="BLACK DOWN-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25BE, }, [0x25BF]={ adobename="whitedownpointingsmalltriangle", category="so", description="WHITE DOWN-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25BF, }, [0x25C0]={ adobename="blackleftpointingtriangle", category="so", cjkwd="a", description="BLACK LEFT-POINTING TRIANGLE", direction="on", linebreak="ai", mathclass="binary", mathname="blacktriangleleft", unicodeslot=0x25C0, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25C1]={ adobename="whiteleftpointingtriangle", category="sm", cjkwd="a", description="WHITE LEFT-POINTING TRIANGLE", direction="on", linebreak="ai", mathclass="binary", mathname="triangleleft", unicodeslot=0x25C1, }, [0x25C2]={ category="so", description="BLACK LEFT-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25C2, }, [0x25C3]={ adobename="whiteleftpointingsmalltriangle", category="so", description="WHITE LEFT-POINTING SMALL TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25C3, }, [0x25C4]={ adobename="triaglf", category="so", description="BLACK LEFT-POINTING POINTER", direction="on", linebreak="al", unicodeslot=0x25C4, }, [0x25C5]={ category="so", description="WHITE LEFT-POINTING POINTER", direction="on", linebreak="al", unicodeslot=0x25C5, }, [0x25C6]={ adobename="blackdiamond", category="so", cjkwd="a", description="BLACK DIAMOND", direction="on", linebreak="ai", unicodeslot=0x25C6, }, [0x25C7]={ adobename="whitediamond", category="so", cjkwd="a", description="WHITE DIAMOND", direction="on", linebreak="ai", unicodeslot=0x25C7, }, [0x25C8]={ adobename="whitediamondcontainingblacksmalldiamond", category="so", cjkwd="a", description="WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND", direction="on", linebreak="ai", unicodeslot=0x25C8, }, [0x25C9]={ adobename="fisheye", category="so", description="FISHEYE", direction="on", linebreak="al", unicodeslot=0x25C9, }, [0x25CA]={ adobename="lozenge", category="so", description="LOZENGE", direction="on", linebreak="al", mathclass="ordinary", mathname="lozenge", unicodeslot=0x25CA, }, [0x25CB]={ adobename="whitecircle", category="so", cjkwd="a", description="WHITE CIRCLE", direction="on", linebreak="ai", unicodeslot=0x25CB, }, [0x25CC]={ adobename="dottedcircle", category="so", description="DOTTED CIRCLE", direction="on", linebreak="al", unicodeslot=0x25CC, }, [0x25CD]={ category="so", description="CIRCLE WITH VERTICAL FILL", direction="on", linebreak="al", unicodeslot=0x25CD, }, [0x25CE]={ adobename="bullseye", category="so", cjkwd="a", description="BULLSEYE", direction="on", linebreak="ai", unicodeslot=0x25CE, }, [0x25CF]={ adobename="blackcircle", category="so", cjkwd="a", description="BLACK CIRCLE", direction="on", linebreak="ai", unicodeslot=0x25CF, }, [0x25D0]={ adobename="circlewithlefthalfblack", category="so", cjkwd="a", description="CIRCLE WITH LEFT HALF BLACK", direction="on", linebreak="ai", unicodeslot=0x25D0, }, [0x25D1]={ adobename="circlewithrighthalfblack", category="so", cjkwd="a", description="CIRCLE WITH RIGHT HALF BLACK", direction="on", linebreak="ai", unicodeslot=0x25D1, }, [0x25D2]={ category="so", description="CIRCLE WITH LOWER HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25D2, }, [0x25D3]={ category="so", description="CIRCLE WITH UPPER HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25D3, }, [0x25D4]={ category="so", description="CIRCLE WITH UPPER RIGHT QUADRANT BLACK", direction="on", linebreak="al", unicodeslot=0x25D4, }, [0x25D5]={ category="so", description="CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK", direction="on", linebreak="al", unicodeslot=0x25D5, }, [0x25D6]={ category="so", description="LEFT HALF BLACK CIRCLE", direction="on", linebreak="al", unicodeslot=0x25D6, }, [0x25D7]={ category="so", description="RIGHT HALF BLACK CIRCLE", direction="on", linebreak="al", unicodeslot=0x25D7, }, [0x25D8]={ adobename="invbullet", category="so", description="INVERSE BULLET", direction="on", linebreak="al", unicodeslot=0x25D8, }, [0x25D9]={ adobename="whitecircleinverse", category="so", description="INVERSE WHITE CIRCLE", direction="on", linebreak="al", unicodeslot=0x25D9, }, [0x25DA]={ category="so", description="UPPER HALF INVERSE WHITE CIRCLE", direction="on", linebreak="al", unicodeslot=0x25DA, }, [0x25DB]={ category="so", description="LOWER HALF INVERSE WHITE CIRCLE", direction="on", linebreak="al", unicodeslot=0x25DB, }, [0x25DC]={ category="so", description="UPPER LEFT QUADRANT CIRCULAR ARC", direction="on", linebreak="al", unicodeslot=0x25DC, }, [0x25DD]={ category="so", description="UPPER RIGHT QUADRANT CIRCULAR ARC", direction="on", linebreak="al", unicodeslot=0x25DD, }, [0x25DE]={ category="so", description="LOWER RIGHT QUADRANT CIRCULAR ARC", direction="on", linebreak="al", unicodeslot=0x25DE, }, [0x25DF]={ category="so", description="LOWER LEFT QUADRANT CIRCULAR ARC", direction="on", linebreak="al", unicodeslot=0x25DF, }, [0x25E0]={ category="so", description="UPPER HALF CIRCLE", direction="on", linebreak="al", unicodeslot=0x25E0, }, [0x25E1]={ category="so", description="LOWER HALF CIRCLE", direction="on", linebreak="al", unicodeslot=0x25E1, }, [0x25E2]={ adobename="blacklowerrighttriangle", category="so", cjkwd="a", description="BLACK LOWER RIGHT TRIANGLE", direction="on", linebreak="ai", unicodeslot=0x25E2, }, [0x25E3]={ adobename="blacklowerlefttriangle", category="so", cjkwd="a", description="BLACK LOWER LEFT TRIANGLE", direction="on", linebreak="ai", unicodeslot=0x25E3, }, [0x25E4]={ adobename="blackupperlefttriangle", category="so", cjkwd="a", description="BLACK UPPER LEFT TRIANGLE", direction="on", linebreak="ai", unicodeslot=0x25E4, }, [0x25E5]={ adobename="blackupperrighttriangle", category="so", cjkwd="a", description="BLACK UPPER RIGHT TRIANGLE", direction="on", linebreak="ai", unicodeslot=0x25E5, }, [0x25E6]={ adobename="whitebullet", category="so", description="WHITE BULLET", direction="on", linebreak="al", unicodeslot=0x25E6, }, [0x25E7]={ category="so", description="SQUARE WITH LEFT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25E7, }, [0x25E8]={ category="so", description="SQUARE WITH RIGHT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25E8, }, [0x25E9]={ category="so", description="SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25E9, }, [0x25EA]={ category="so", description="SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25EA, }, [0x25EB]={ category="so", description="WHITE SQUARE WITH VERTICAL BISECTING LINE", direction="on", linebreak="al", unicodeslot=0x25EB, }, [0x25EC]={ category="so", description="WHITE UP-POINTING TRIANGLE WITH DOT", direction="on", linebreak="al", unicodeslot=0x25EC, }, [0x25ED]={ category="so", description="UP-POINTING TRIANGLE WITH LEFT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25ED, }, [0x25EE]={ category="so", description="UP-POINTING TRIANGLE WITH RIGHT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x25EE, }, [0x25EF]={ adobename="largecircle", category="so", cjkwd="a", description="LARGE CIRCLE", direction="on", linebreak="ai", mathclass="binary", mathname="bigcirc", unicodeslot=0x25EF, }, [0x25F0]={ category="so", description="WHITE SQUARE WITH UPPER LEFT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F0, }, [0x25F1]={ category="so", description="WHITE SQUARE WITH LOWER LEFT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F1, }, [0x25F2]={ category="so", description="WHITE SQUARE WITH LOWER RIGHT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F2, }, [0x25F3]={ category="so", description="WHITE SQUARE WITH UPPER RIGHT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F3, }, [0x25F4]={ category="so", description="WHITE CIRCLE WITH UPPER LEFT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F4, }, [0x25F5]={ category="so", description="WHITE CIRCLE WITH LOWER LEFT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F5, }, [0x25F6]={ category="so", description="WHITE CIRCLE WITH LOWER RIGHT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F6, }, [0x25F7]={ category="so", description="WHITE CIRCLE WITH UPPER RIGHT QUADRANT", direction="on", linebreak="al", unicodeslot=0x25F7, }, [0x25F8]={ category="sm", description="UPPER LEFT TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25F8, }, [0x25F9]={ category="sm", description="UPPER RIGHT TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25F9, }, [0x25FA]={ category="sm", description="LOWER LEFT TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25FA, }, [0x25FB]={ category="sm", description="WHITE MEDIUM SQUARE", direction="on", linebreak="al", unicodeslot=0x25FB, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25FC]={ category="sm", description="BLACK MEDIUM SQUARE", direction="on", linebreak="al", unicodeslot=0x25FC, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25FD]={ category="sm", description="WHITE MEDIUM SMALL SQUARE", direction="on", linebreak="al", unicodeslot=0x25FD, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25FE]={ category="sm", description="BLACK MEDIUM SMALL SQUARE", direction="on", linebreak="al", unicodeslot=0x25FE, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x25FF]={ category="sm", description="LOWER RIGHT TRIANGLE", direction="on", linebreak="al", unicodeslot=0x25FF, }, [0x2600]={ category="so", description="BLACK SUN WITH RAYS", direction="on", linebreak="id", unicodeslot=0x2600, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2601]={ category="so", description="CLOUD", direction="on", linebreak="id", unicodeslot=0x2601, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2602]={ category="so", description="UMBRELLA", direction="on", linebreak="id", unicodeslot=0x2602, }, [0x2603]={ category="so", description="SNOWMAN", direction="on", linebreak="id", unicodeslot=0x2603, }, [0x2604]={ category="so", description="COMET", direction="on", linebreak="al", unicodeslot=0x2604, }, [0x2605]={ adobename="blackstar", category="so", cjkwd="a", description="BLACK STAR", direction="on", linebreak="ai", mathclass="ordinary", mathname="bigstar", unicodeslot=0x2605, }, [0x2606]={ adobename="whitestar", category="so", cjkwd="a", description="WHITE STAR", direction="on", linebreak="ai", unicodeslot=0x2606, }, [0x2607]={ category="so", description="LIGHTNING", direction="on", linebreak="al", unicodeslot=0x2607, }, [0x2608]={ category="so", description="THUNDERSTORM", direction="on", linebreak="al", unicodeslot=0x2608, }, [0x2609]={ category="so", cjkwd="a", description="SUN", direction="on", linebreak="ai", unicodeslot=0x2609, }, [0x260A]={ category="so", description="ASCENDING NODE", direction="on", linebreak="al", unicodeslot=0x260A, }, [0x260B]={ category="so", description="DESCENDING NODE", direction="on", linebreak="al", unicodeslot=0x260B, }, [0x260C]={ category="so", description="CONJUNCTION", direction="on", linebreak="al", unicodeslot=0x260C, }, [0x260D]={ category="so", description="OPPOSITION", direction="on", linebreak="al", unicodeslot=0x260D, }, [0x260E]={ adobename="telephoneblack", category="so", cjkwd="a", description="BLACK TELEPHONE", direction="on", linebreak="ai", unicodeslot=0x260E, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x260F]={ adobename="whitetelephone", category="so", cjkwd="a", description="WHITE TELEPHONE", direction="on", linebreak="ai", unicodeslot=0x260F, }, [0x2610]={ category="so", description="BALLOT BOX", direction="on", linebreak="al", unicodeslot=0x2610, }, [0x2611]={ category="so", description="BALLOT BOX WITH CHECK", direction="on", linebreak="al", unicodeslot=0x2611, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2612]={ category="so", description="BALLOT BOX WITH X", direction="on", linebreak="al", unicodeslot=0x2612, }, [0x2613]={ category="so", description="SALTIRE", direction="on", linebreak="al", unicodeslot=0x2613, }, [0x2614]={ category="so", cjkwd="a", description="UMBRELLA WITH RAIN DROPS", direction="on", linebreak="id", unicodeslot=0x2614, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2615]={ category="so", cjkwd="a", description="HOT BEVERAGE", direction="on", linebreak="id", unicodeslot=0x2615, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2616]={ category="so", description="WHITE SHOGI PIECE", direction="on", linebreak="ai", unicodeslot=0x2616, }, [0x2617]={ category="so", description="BLACK SHOGI PIECE", direction="on", linebreak="ai", unicodeslot=0x2617, }, [0x2618]={ category="so", description="SHAMROCK", direction="on", linebreak="id", unicodeslot=0x2618, }, [0x2619]={ category="so", description="REVERSED ROTATED FLORAL HEART BULLET", direction="on", linebreak="al", unicodeslot=0x2619, }, [0x261A]={ category="so", description="BLACK LEFT POINTING INDEX", direction="on", linebreak="id", unicodeslot=0x261A, }, [0x261B]={ category="so", description="BLACK RIGHT POINTING INDEX", direction="on", linebreak="id", unicodeslot=0x261B, }, [0x261C]={ adobename="pointingindexleftwhite", category="so", cjkwd="a", description="WHITE LEFT POINTING INDEX", direction="on", linebreak="id", unicodeslot=0x261C, }, [0x261D]={ adobename="pointingindexupwhite", category="so", description="WHITE UP POINTING INDEX", direction="on", linebreak="id", unicodeslot=0x261D, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x261E]={ adobename="pointingindexrightwhite", category="so", cjkwd="a", description="WHITE RIGHT POINTING INDEX", direction="on", linebreak="id", unicodeslot=0x261E, }, [0x261F]={ adobename="pointingindexdownwhite", category="so", description="WHITE DOWN POINTING INDEX", direction="on", linebreak="id", unicodeslot=0x261F, }, [0x2620]={ category="so", description="SKULL AND CROSSBONES", direction="on", linebreak="al", unicodeslot=0x2620, }, [0x2621]={ category="so", description="CAUTION SIGN", direction="on", linebreak="al", unicodeslot=0x2621, }, [0x2622]={ category="so", description="RADIOACTIVE SIGN", direction="on", linebreak="al", unicodeslot=0x2622, }, [0x2623]={ category="so", description="BIOHAZARD SIGN", direction="on", linebreak="al", unicodeslot=0x2623, }, [0x2624]={ category="so", description="CADUCEUS", direction="on", linebreak="al", unicodeslot=0x2624, }, [0x2625]={ category="so", description="ANKH", direction="on", linebreak="al", unicodeslot=0x2625, }, [0x2626]={ category="so", description="ORTHODOX CROSS", direction="on", linebreak="al", unicodeslot=0x2626, }, [0x2627]={ category="so", description="CHI RHO", direction="on", linebreak="al", unicodeslot=0x2627, }, [0x2628]={ category="so", description="CROSS OF LORRAINE", direction="on", linebreak="al", unicodeslot=0x2628, }, [0x2629]={ category="so", description="CROSS OF JERUSALEM", direction="on", linebreak="al", unicodeslot=0x2629, }, [0x262A]={ category="so", description="STAR AND CRESCENT", direction="on", linebreak="al", unicodeslot=0x262A, }, [0x262B]={ category="so", description="FARSI SYMBOL", direction="on", linebreak="al", unicodeslot=0x262B, }, [0x262C]={ category="so", description="ADI SHAKTI", direction="on", linebreak="al", unicodeslot=0x262C, }, [0x262D]={ category="so", description="HAMMER AND SICKLE", direction="on", linebreak="al", unicodeslot=0x262D, }, [0x262E]={ category="so", description="PEACE SYMBOL", direction="on", linebreak="al", unicodeslot=0x262E, }, [0x262F]={ adobename="yinyang", category="so", description="YIN YANG", direction="on", linebreak="al", unicodeslot=0x262F, }, [0x2630]={ category="so", description="TRIGRAM FOR HEAVEN", direction="on", linebreak="al", unicodeslot=0x2630, }, [0x2631]={ category="so", description="TRIGRAM FOR LAKE", direction="on", linebreak="al", unicodeslot=0x2631, }, [0x2632]={ category="so", description="TRIGRAM FOR FIRE", direction="on", linebreak="al", unicodeslot=0x2632, }, [0x2633]={ category="so", description="TRIGRAM FOR THUNDER", direction="on", linebreak="al", unicodeslot=0x2633, }, [0x2634]={ category="so", description="TRIGRAM FOR WIND", direction="on", linebreak="al", unicodeslot=0x2634, }, [0x2635]={ category="so", description="TRIGRAM FOR WATER", direction="on", linebreak="al", unicodeslot=0x2635, }, [0x2636]={ category="so", description="TRIGRAM FOR MOUNTAIN", direction="on", linebreak="al", unicodeslot=0x2636, }, [0x2637]={ category="so", description="TRIGRAM FOR EARTH", direction="on", linebreak="al", unicodeslot=0x2637, }, [0x2638]={ category="so", description="WHEEL OF DHARMA", direction="on", linebreak="al", unicodeslot=0x2638, }, [0x2639]={ category="so", description="WHITE FROWNING FACE", direction="on", linebreak="id", unicodeslot=0x2639, }, [0x263A]={ adobename="whitesmilingface", category="so", description="WHITE SMILING FACE", direction="on", linebreak="id", unicodeslot=0x263A, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x263B]={ adobename="invsmileface", category="so", description="BLACK SMILING FACE", direction="on", linebreak="id", unicodeslot=0x263B, }, [0x263C]={ adobename="sun", category="so", description="WHITE SUN WITH RAYS", direction="on", linebreak="al", unicodeslot=0x263C, }, [0x263D]={ category="so", description="FIRST QUARTER MOON", direction="on", linebreak="al", unicodeslot=0x263D, }, [0x263E]={ category="so", description="LAST QUARTER MOON", direction="on", linebreak="al", unicodeslot=0x263E, }, [0x263F]={ category="so", description="MERCURY", direction="on", linebreak="al", unicodeslot=0x263F, }, [0x2640]={ adobename="venus", category="so", cjkwd="a", description="FEMALE SIGN", direction="on", linebreak="ai", unicodeslot=0x2640, }, [0x2641]={ adobename="earth", category="so", description="EARTH", direction="on", linebreak="al", unicodeslot=0x2641, }, [0x2642]={ adobename="mars", category="so", cjkwd="a", description="MALE SIGN", direction="on", linebreak="ai", unicodeslot=0x2642, }, [0x2643]={ category="so", description="JUPITER", direction="on", linebreak="al", unicodeslot=0x2643, }, [0x2644]={ category="so", description="SATURN", direction="on", linebreak="al", unicodeslot=0x2644, }, [0x2645]={ category="so", description="URANUS", direction="on", linebreak="al", unicodeslot=0x2645, }, [0x2646]={ category="so", description="NEPTUNE", direction="on", linebreak="al", unicodeslot=0x2646, }, [0x2647]={ category="so", description="PLUTO", direction="on", linebreak="al", unicodeslot=0x2647, }, [0x2648]={ category="so", description="ARIES", direction="on", linebreak="al", unicodeslot=0x2648, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2649]={ category="so", description="TAURUS", direction="on", linebreak="al", unicodeslot=0x2649, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x264A]={ category="so", description="GEMINI", direction="on", linebreak="al", unicodeslot=0x264A, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x264B]={ category="so", description="CANCER", direction="on", linebreak="al", unicodeslot=0x264B, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x264C]={ category="so", description="LEO", direction="on", linebreak="al", unicodeslot=0x264C, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x264D]={ category="so", description="VIRGO", direction="on", linebreak="al", unicodeslot=0x264D, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x264E]={ category="so", description="LIBRA", direction="on", linebreak="al", unicodeslot=0x264E, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x264F]={ category="so", description="SCORPIUS", direction="on", linebreak="al", unicodeslot=0x264F, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2650]={ category="so", description="SAGITTARIUS", direction="on", linebreak="al", unicodeslot=0x2650, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2651]={ category="so", description="CAPRICORN", direction="on", linebreak="al", unicodeslot=0x2651, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2652]={ category="so", description="AQUARIUS", direction="on", linebreak="al", unicodeslot=0x2652, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2653]={ category="so", description="PISCES", direction="on", linebreak="al", unicodeslot=0x2653, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2654]={ category="so", description="WHITE CHESS KING", direction="on", linebreak="al", unicodeslot=0x2654, }, [0x2655]={ category="so", description="WHITE CHESS QUEEN", direction="on", linebreak="al", unicodeslot=0x2655, }, [0x2656]={ category="so", description="WHITE CHESS ROOK", direction="on", linebreak="al", unicodeslot=0x2656, }, [0x2657]={ category="so", description="WHITE CHESS BISHOP", direction="on", linebreak="al", unicodeslot=0x2657, }, [0x2658]={ category="so", description="WHITE CHESS KNIGHT", direction="on", linebreak="al", unicodeslot=0x2658, }, [0x2659]={ category="so", description="WHITE CHESS PAWN", direction="on", linebreak="al", unicodeslot=0x2659, }, [0x265A]={ category="so", description="BLACK CHESS KING", direction="on", linebreak="al", unicodeslot=0x265A, }, [0x265B]={ category="so", description="BLACK CHESS QUEEN", direction="on", linebreak="al", unicodeslot=0x265B, }, [0x265C]={ category="so", description="BLACK CHESS ROOK", direction="on", linebreak="al", unicodeslot=0x265C, }, [0x265D]={ category="so", description="BLACK CHESS BISHOP", direction="on", linebreak="al", unicodeslot=0x265D, }, [0x265E]={ category="so", description="BLACK CHESS KNIGHT", direction="on", linebreak="al", unicodeslot=0x265E, }, [0x265F]={ category="so", description="BLACK CHESS PAWN", direction="on", linebreak="al", unicodeslot=0x265F, }, [0x2660]={ adobename="spadesuitblack", category="so", cjkwd="a", description="BLACK SPADE SUIT", direction="on", linebreak="ai", mathclass="default", mathname="spadesuit", unicodeslot=0x2660, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2661]={ adobename="heartsuitwhite", category="so", cjkwd="a", description="WHITE HEART SUIT", direction="on", linebreak="ai", mathclass="default", mathname="heartsuit", unicodeslot=0x2661, }, [0x2662]={ adobename="diamondsuitwhite", category="so", description="WHITE DIAMOND SUIT", direction="on", linebreak="al", mathclass="default", mathname="diamondsuit", unicodeslot=0x2662, }, [0x2663]={ adobename="clubsuitblack", category="so", cjkwd="a", description="BLACK CLUB SUIT", direction="on", linebreak="ai", mathclass="default", mathname="clubsuit", unicodeslot=0x2663, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2664]={ adobename="spadesuitwhite", category="so", cjkwd="a", description="WHITE SPADE SUIT", direction="on", linebreak="ai", unicodeslot=0x2664, }, [0x2665]={ adobename="heartsuitblack", category="so", cjkwd="a", description="BLACK HEART SUIT", direction="on", linebreak="ai", unicodeslot=0x2665, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2666]={ adobename="diamond", category="so", description="BLACK DIAMOND SUIT", direction="on", linebreak="al", mathclass="ordinary", mathname="blacklozenge", unicodeslot=0x2666, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2667]={ adobename="clubsuitwhite", category="so", cjkwd="a", description="WHITE CLUB SUIT", direction="on", linebreak="ai", unicodeslot=0x2667, }, [0x2668]={ adobename="hotsprings", category="so", cjkwd="a", description="HOT SPRINGS", direction="on", linebreak="id", unicodeslot=0x2668, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2669]={ adobename="quarternote", category="so", cjkwd="a", description="QUARTER NOTE", direction="on", linebreak="ai", unicodeslot=0x2669, }, [0x266A]={ adobename="musicalnote", category="so", cjkwd="a", description="EIGHTH NOTE", direction="on", linebreak="ai", unicodeslot=0x266A, }, [0x266B]={ adobename="musicalnotedbl", category="so", description="BEAMED EIGHTH NOTES", direction="on", linebreak="al", unicodeslot=0x266B, }, [0x266C]={ adobename="beamedsixteenthnotes", category="so", cjkwd="a", description="BEAMED SIXTEENTH NOTES", direction="on", linebreak="ai", unicodeslot=0x266C, }, [0x266D]={ adobename="musicflatsign", category="so", cjkwd="a", description="MUSIC FLAT SIGN", direction="on", linebreak="ai", mathclass="default", mathname="flat", unicodeslot=0x266D, }, [0x266E]={ category="so", description="MUSIC NATURAL SIGN", direction="on", linebreak="al", mathclass="default", mathname="natural", unicodeslot=0x266E, }, [0x266F]={ adobename="musicsharpsign", category="sm", cjkwd="a", description="MUSIC SHARP SIGN", direction="on", linebreak="ai", mathclass="default", mathname="sharp", unicodeslot=0x266F, }, [0x2670]={ category="so", description="WEST SYRIAC CROSS", direction="on", linebreak="al", unicodeslot=0x2670, }, [0x2671]={ category="so", description="EAST SYRIAC CROSS", direction="on", linebreak="al", unicodeslot=0x2671, }, [0x2672]={ category="so", description="UNIVERSAL RECYCLING SYMBOL", direction="on", linebreak="al", unicodeslot=0x2672, }, [0x2673]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0001 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2673, }, [0x2674]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0002 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2674, }, [0x2675]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0003 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2675, }, [0x2676]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0004 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2676, }, [0x2677]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0005 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2677, }, [0x2678]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0006 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2678, }, [0x2679]={ category="so", description="RECYCLING SYMBOL FOR TYPE-0x0007 PLASTICS", direction="on", linebreak="al", unicodeslot=0x2679, }, [0x267A]={ category="so", description="RECYCLING SYMBOL FOR GENERIC MATERIALS", direction="on", linebreak="al", unicodeslot=0x267A, }, [0x267B]={ category="so", description="BLACK UNIVERSAL RECYCLING SYMBOL", direction="on", linebreak="al", unicodeslot=0x267B, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x267C]={ category="so", description="RECYCLED PAPER SYMBOL", direction="on", linebreak="al", unicodeslot=0x267C, }, [0x267D]={ category="so", description="PARTIALLY-RECYCLED PAPER SYMBOL", direction="on", linebreak="al", unicodeslot=0x267D, }, [0x267E]={ category="so", description="PERMANENT PAPER SIGN", direction="on", linebreak="al", unicodeslot=0x267E, }, [0x267F]={ category="so", description="WHEELCHAIR SYMBOL", direction="on", linebreak="id", unicodeslot=0x267F, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2680]={ category="so", description="DIE FACE-0x0001", direction="on", linebreak="al", unicodeslot=0x2680, }, [0x2681]={ category="so", description="DIE FACE-0x0002", direction="on", linebreak="al", unicodeslot=0x2681, }, [0x2682]={ category="so", description="DIE FACE-0x0003", direction="on", linebreak="al", unicodeslot=0x2682, }, [0x2683]={ category="so", description="DIE FACE-0x0004", direction="on", linebreak="al", unicodeslot=0x2683, }, [0x2684]={ category="so", description="DIE FACE-0x0005", direction="on", linebreak="al", unicodeslot=0x2684, }, [0x2685]={ category="so", description="DIE FACE-0x0006", direction="on", linebreak="al", unicodeslot=0x2685, }, [0x2686]={ category="so", description="WHITE CIRCLE WITH DOT RIGHT", direction="on", linebreak="al", unicodeslot=0x2686, }, [0x2687]={ category="so", description="WHITE CIRCLE WITH TWO DOTS", direction="on", linebreak="al", unicodeslot=0x2687, }, [0x2688]={ category="so", description="BLACK CIRCLE WITH WHITE DOT RIGHT", direction="on", linebreak="al", unicodeslot=0x2688, }, [0x2689]={ category="so", description="BLACK CIRCLE WITH TWO WHITE DOTS", direction="on", linebreak="al", unicodeslot=0x2689, }, [0x268A]={ category="so", description="MONOGRAM FOR YANG", direction="on", linebreak="al", unicodeslot=0x268A, }, [0x268B]={ category="so", description="MONOGRAM FOR YIN", direction="on", linebreak="al", unicodeslot=0x268B, }, [0x268C]={ category="so", description="DIGRAM FOR GREATER YANG", direction="on", linebreak="al", unicodeslot=0x268C, }, [0x268D]={ category="so", description="DIGRAM FOR LESSER YIN", direction="on", linebreak="al", unicodeslot=0x268D, }, [0x268E]={ category="so", description="DIGRAM FOR LESSER YANG", direction="on", linebreak="al", unicodeslot=0x268E, }, [0x268F]={ category="so", description="DIGRAM FOR GREATER YIN", direction="on", linebreak="al", unicodeslot=0x268F, }, [0x2690]={ category="so", description="WHITE FLAG", direction="on", linebreak="al", unicodeslot=0x2690, }, [0x2691]={ category="so", description="BLACK FLAG", direction="on", linebreak="al", unicodeslot=0x2691, }, [0x2692]={ category="so", description="HAMMER AND PICK", direction="on", linebreak="al", unicodeslot=0x2692, }, [0x2693]={ category="so", description="ANCHOR", direction="on", linebreak="al", unicodeslot=0x2693, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2694]={ category="so", description="CROSSED SWORDS", direction="on", linebreak="al", unicodeslot=0x2694, }, [0x2695]={ category="so", description="STAFF OF AESCULAPIUS", direction="on", linebreak="al", unicodeslot=0x2695, }, [0x2696]={ category="so", description="SCALES", direction="on", linebreak="al", unicodeslot=0x2696, }, [0x2697]={ category="so", description="ALEMBIC", direction="on", linebreak="al", unicodeslot=0x2697, }, [0x2698]={ category="so", description="FLOWER", direction="on", linebreak="al", unicodeslot=0x2698, }, [0x2699]={ category="so", description="GEAR", direction="on", linebreak="al", unicodeslot=0x2699, }, [0x269A]={ category="so", description="STAFF OF HERMES", direction="on", linebreak="al", unicodeslot=0x269A, }, [0x269B]={ category="so", description="ATOM SYMBOL", direction="on", linebreak="al", unicodeslot=0x269B, }, [0x269C]={ category="so", description="FLEUR-DE-LIS", direction="on", linebreak="al", unicodeslot=0x269C, }, [0x269D]={ category="so", description="OUTLINED WHITE STAR", direction="on", linebreak="al", unicodeslot=0x269D, }, [0x269E]={ category="so", cjkwd="a", description="THREE LINES CONVERGING RIGHT", direction="on", linebreak="ai", unicodeslot=0x269E, }, [0x269F]={ category="so", cjkwd="a", description="THREE LINES CONVERGING LEFT", direction="on", linebreak="ai", unicodeslot=0x269F, }, [0x26A0]={ category="so", description="WARNING SIGN", direction="on", linebreak="al", unicodeslot=0x26A0, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26A1]={ category="so", description="HIGH VOLTAGE SIGN", direction="on", linebreak="al", unicodeslot=0x26A1, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26A2]={ category="so", description="DOUBLED FEMALE SIGN", direction="on", linebreak="al", unicodeslot=0x26A2, }, [0x26A3]={ category="so", description="DOUBLED MALE SIGN", direction="on", linebreak="al", unicodeslot=0x26A3, }, [0x26A4]={ category="so", description="INTERLOCKED FEMALE AND MALE SIGN", direction="on", linebreak="al", unicodeslot=0x26A4, }, [0x26A5]={ category="so", description="MALE AND FEMALE SIGN", direction="on", linebreak="al", unicodeslot=0x26A5, }, [0x26A6]={ category="so", description="MALE WITH STROKE SIGN", direction="on", linebreak="al", unicodeslot=0x26A6, }, [0x26A7]={ category="so", description="MALE WITH STROKE AND MALE AND FEMALE SIGN", direction="on", linebreak="al", unicodeslot=0x26A7, }, [0x26A8]={ category="so", description="VERTICAL MALE WITH STROKE SIGN", direction="on", linebreak="al", unicodeslot=0x26A8, }, [0x26A9]={ category="so", description="HORIZONTAL MALE WITH STROKE SIGN", direction="on", linebreak="al", unicodeslot=0x26A9, }, [0x26AA]={ category="so", description="MEDIUM WHITE CIRCLE", direction="on", linebreak="al", unicodeslot=0x26AA, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26AB]={ category="so", description="MEDIUM BLACK CIRCLE", direction="on", linebreak="al", unicodeslot=0x26AB, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26AC]={ category="so", description="MEDIUM SMALL WHITE CIRCLE", direction="l", linebreak="al", unicodeslot=0x26AC, }, [0x26AD]={ category="so", description="MARRIAGE SYMBOL", direction="on", linebreak="al", unicodeslot=0x26AD, }, [0x26AE]={ category="so", description="DIVORCE SYMBOL", direction="on", linebreak="al", unicodeslot=0x26AE, }, [0x26AF]={ category="so", description="UNMARRIED PARTNERSHIP SYMBOL", direction="on", linebreak="al", unicodeslot=0x26AF, }, [0x26B0]={ category="so", description="COFFIN", direction="on", linebreak="al", unicodeslot=0x26B0, }, [0x26B1]={ category="so", description="FUNERAL URN", direction="on", linebreak="al", unicodeslot=0x26B1, }, [0x26B2]={ category="so", description="NEUTER", direction="on", linebreak="al", unicodeslot=0x26B2, }, [0x26B3]={ category="so", description="CERES", direction="on", linebreak="al", unicodeslot=0x26B3, }, [0x26B4]={ category="so", description="PALLAS", direction="on", linebreak="al", unicodeslot=0x26B4, }, [0x26B5]={ category="so", description="JUNO", direction="on", linebreak="al", unicodeslot=0x26B5, }, [0x26B6]={ category="so", description="VESTA", direction="on", linebreak="al", unicodeslot=0x26B6, }, [0x26B7]={ category="so", description="CHIRON", direction="on", linebreak="al", unicodeslot=0x26B7, }, [0x26B8]={ category="so", description="BLACK MOON LILITH", direction="on", linebreak="al", unicodeslot=0x26B8, }, [0x26B9]={ category="so", description="SEXTILE", direction="on", linebreak="al", unicodeslot=0x26B9, }, [0x26BA]={ category="so", description="SEMISEXTILE", direction="on", linebreak="al", unicodeslot=0x26BA, }, [0x26BB]={ category="so", description="QUINCUNX", direction="on", linebreak="al", unicodeslot=0x26BB, }, [0x26BC]={ category="so", description="SESQUIQUADRATE", direction="on", linebreak="al", unicodeslot=0x26BC, }, [0x26BD]={ category="so", description="SOCCER BALL", direction="on", linebreak="id", unicodeslot=0x26BD, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26BE]={ category="so", cjkwd="a", description="BASEBALL", direction="on", linebreak="id", unicodeslot=0x26BE, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26BF]={ category="so", cjkwd="a", description="SQUARED KEY", direction="on", linebreak="id", unicodeslot=0x26BF, }, [0x26C0]={ category="so", description="WHITE DRAUGHTS MAN", direction="on", linebreak="id", unicodeslot=0x26C0, }, [0x26C1]={ category="so", description="WHITE DRAUGHTS KING", direction="on", linebreak="id", unicodeslot=0x26C1, }, [0x26C2]={ category="so", description="BLACK DRAUGHTS MAN", direction="on", linebreak="id", unicodeslot=0x26C2, }, [0x26C3]={ category="so", description="BLACK DRAUGHTS KING", direction="on", linebreak="id", unicodeslot=0x26C3, }, [0x26C4]={ category="so", cjkwd="a", description="SNOWMAN WITHOUT SNOW", direction="on", linebreak="id", unicodeslot=0x26C4, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26C5]={ category="so", cjkwd="a", description="SUN BEHIND CLOUD", direction="on", linebreak="id", unicodeslot=0x26C5, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26C6]={ category="so", cjkwd="a", description="RAIN", direction="on", linebreak="id", unicodeslot=0x26C6, }, [0x26C7]={ category="so", cjkwd="a", description="BLACK SNOWMAN", direction="on", linebreak="id", unicodeslot=0x26C7, }, [0x26C8]={ category="so", cjkwd="a", description="THUNDER CLOUD AND RAIN", direction="on", linebreak="id", unicodeslot=0x26C8, }, [0x26C9]={ category="so", cjkwd="a", description="TURNED WHITE SHOGI PIECE", direction="on", linebreak="ai", unicodeslot=0x26C9, }, [0x26CA]={ category="so", cjkwd="a", description="TURNED BLACK SHOGI PIECE", direction="on", linebreak="ai", unicodeslot=0x26CA, }, [0x26CB]={ category="so", cjkwd="a", description="WHITE DIAMOND IN SQUARE", direction="on", linebreak="ai", unicodeslot=0x26CB, }, [0x26CC]={ category="so", cjkwd="a", description="CROSSING LANES", direction="on", linebreak="ai", unicodeslot=0x26CC, }, [0x26CD]={ category="so", cjkwd="a", description="DISABLED CAR", direction="on", linebreak="id", unicodeslot=0x26CD, }, [0x26CE]={ category="so", description="OPHIUCHUS", direction="on", linebreak="al", unicodeslot=0x26CE, }, [0x26CF]={ category="so", cjkwd="a", description="PICK", direction="on", linebreak="id", unicodeslot=0x26CF, }, [0x26D0]={ category="so", cjkwd="a", description="CAR SLIDING", direction="on", linebreak="id", unicodeslot=0x26D0, }, [0x26D1]={ category="so", cjkwd="a", description="HELMET WITH WHITE CROSS", direction="on", linebreak="id", unicodeslot=0x26D1, }, [0x26D2]={ category="so", cjkwd="a", description="CIRCLED CROSSING LANES", direction="on", linebreak="ai", unicodeslot=0x26D2, }, [0x26D3]={ category="so", cjkwd="a", description="CHAINS", direction="on", linebreak="id", unicodeslot=0x26D3, }, [0x26D4]={ category="so", cjkwd="a", description="NO ENTRY", direction="on", linebreak="id", unicodeslot=0x26D4, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26D5]={ category="so", cjkwd="a", description="ALTERNATE ONE-WAY LEFT WAY TRAFFIC", direction="on", linebreak="ai", unicodeslot=0x26D5, }, [0x26D6]={ category="so", cjkwd="a", description="BLACK TWO-WAY LEFT WAY TRAFFIC", direction="on", linebreak="ai", unicodeslot=0x26D6, }, [0x26D7]={ category="so", cjkwd="a", description="WHITE TWO-WAY LEFT WAY TRAFFIC", direction="on", linebreak="ai", unicodeslot=0x26D7, }, [0x26D8]={ category="so", cjkwd="a", description="BLACK LEFT LANE MERGE", direction="on", linebreak="id", unicodeslot=0x26D8, }, [0x26D9]={ category="so", cjkwd="a", description="WHITE LEFT LANE MERGE", direction="on", linebreak="id", unicodeslot=0x26D9, }, [0x26DA]={ category="so", cjkwd="a", description="DRIVE SLOW SIGN", direction="on", linebreak="ai", unicodeslot=0x26DA, }, [0x26DB]={ category="so", cjkwd="a", description="HEAVY WHITE DOWN-POINTING TRIANGLE", direction="on", linebreak="ai", unicodeslot=0x26DB, }, [0x26DC]={ category="so", cjkwd="a", description="LEFT CLOSED ENTRY", direction="on", linebreak="id", unicodeslot=0x26DC, }, [0x26DD]={ category="so", cjkwd="a", description="SQUARED SALTIRE", direction="on", linebreak="ai", unicodeslot=0x26DD, }, [0x26DE]={ category="so", cjkwd="a", description="FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE", direction="on", linebreak="ai", unicodeslot=0x26DE, }, [0x26DF]={ category="so", cjkwd="a", description="BLACK TRUCK", direction="on", linebreak="id", unicodeslot=0x26DF, }, [0x26E0]={ category="so", cjkwd="a", description="RESTRICTED LEFT ENTRY-1", direction="on", linebreak="id", unicodeslot=0x26E0, }, [0x26E1]={ category="so", cjkwd="a", description="RESTRICTED LEFT ENTRY-2", direction="on", linebreak="id", unicodeslot=0x26E1, }, [0x26E2]={ category="so", description="ASTRONOMICAL SYMBOL FOR URANUS", direction="on", linebreak="al", unicodeslot=0x26E2, }, [0x26E3]={ category="so", cjkwd="a", description="HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE", direction="on", linebreak="ai", unicodeslot=0x26E3, }, [0x26E4]={ category="so", description="PENTAGRAM", direction="on", linebreak="al", unicodeslot=0x26E4, }, [0x26E5]={ category="so", description="RIGHT-HANDED INTERLACED PENTAGRAM", direction="on", linebreak="al", unicodeslot=0x26E5, }, [0x26E6]={ category="so", description="LEFT-HANDED INTERLACED PENTAGRAM", direction="on", linebreak="al", unicodeslot=0x26E6, }, [0x26E7]={ category="so", description="INVERTED PENTAGRAM", direction="on", linebreak="al", unicodeslot=0x26E7, }, [0x26E8]={ category="so", cjkwd="a", description="BLACK CROSS ON SHIELD", direction="on", linebreak="ai", unicodeslot=0x26E8, }, [0x26E9]={ category="so", cjkwd="a", description="SHINTO SHRINE", direction="on", linebreak="ai", unicodeslot=0x26E9, }, [0x26EA]={ category="so", cjkwd="a", description="CHURCH", direction="on", linebreak="id", unicodeslot=0x26EA, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26EB]={ category="so", cjkwd="a", description="CASTLE", direction="on", linebreak="ai", unicodeslot=0x26EB, }, [0x26EC]={ category="so", cjkwd="a", description="HISTORIC SITE", direction="on", linebreak="ai", unicodeslot=0x26EC, }, [0x26ED]={ category="so", cjkwd="a", description="GEAR WITHOUT HUB", direction="on", linebreak="ai", unicodeslot=0x26ED, }, [0x26EE]={ category="so", cjkwd="a", description="GEAR WITH HANDLES", direction="on", linebreak="ai", unicodeslot=0x26EE, }, [0x26EF]={ category="so", cjkwd="a", description="MAP SYMBOL FOR LIGHTHOUSE", direction="on", linebreak="ai", unicodeslot=0x26EF, }, [0x26F0]={ category="so", cjkwd="a", description="MOUNTAIN", direction="on", linebreak="ai", unicodeslot=0x26F0, }, [0x26F1]={ category="so", cjkwd="a", description="UMBRELLA ON GROUND", direction="on", linebreak="id", unicodeslot=0x26F1, }, [0x26F2]={ category="so", cjkwd="a", description="FOUNTAIN", direction="on", linebreak="id", unicodeslot=0x26F2, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26F3]={ category="so", cjkwd="a", description="FLAG IN HOLE", direction="on", linebreak="id", unicodeslot=0x26F3, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26F4]={ category="so", cjkwd="a", description="FERRY", direction="on", linebreak="id", unicodeslot=0x26F4, }, [0x26F5]={ category="so", cjkwd="a", description="SAILBOAT", direction="on", linebreak="id", unicodeslot=0x26F5, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26F6]={ category="so", cjkwd="a", description="SQUARE FOUR CORNERS", direction="on", linebreak="ai", unicodeslot=0x26F6, }, [0x26F7]={ category="so", cjkwd="a", description="SKIER", direction="on", linebreak="id", unicodeslot=0x26F7, }, [0x26F8]={ category="so", cjkwd="a", description="ICE SKATE", direction="on", linebreak="id", unicodeslot=0x26F8, }, [0x26F9]={ category="so", cjkwd="a", description="PERSON WITH BALL", direction="on", linebreak="id", unicodeslot=0x26F9, }, [0x26FA]={ category="so", cjkwd="a", description="TENT", direction="on", linebreak="id", unicodeslot=0x26FA, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26FB]={ category="so", cjkwd="a", description="JAPANESE BANK SYMBOL", direction="on", linebreak="ai", unicodeslot=0x26FB, }, [0x26FC]={ category="so", cjkwd="a", description="HEADSTONE GRAVEYARD SYMBOL", direction="on", linebreak="ai", unicodeslot=0x26FC, }, [0x26FD]={ category="so", cjkwd="a", description="FUEL PUMP", direction="on", linebreak="id", unicodeslot=0x26FD, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x26FE]={ category="so", cjkwd="a", description="CUP ON BLACK SQUARE", direction="on", linebreak="id", unicodeslot=0x26FE, }, [0x26FF]={ category="so", cjkwd="a", description="WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE", direction="on", linebreak="id", unicodeslot=0x26FF, }, [0x2701]={ category="so", description="UPPER BLADE SCISSORS", direction="on", linebreak="id", unicodeslot=0x2701, }, [0x2702]={ category="so", description="BLACK SCISSORS", direction="on", linebreak="id", unicodeslot=0x2702, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2703]={ category="so", description="LOWER BLADE SCISSORS", direction="on", linebreak="id", unicodeslot=0x2703, }, [0x2704]={ category="so", description="WHITE SCISSORS", direction="on", linebreak="id", unicodeslot=0x2704, }, [0x2705]={ category="so", description="WHITE HEAVY CHECK MARK", direction="on", linebreak="al", unicodeslot=0x2705, }, [0x2706]={ category="so", description="TELEPHONE LOCATION SIGN", direction="on", linebreak="al", unicodeslot=0x2706, }, [0x2707]={ category="so", description="TAPE DRIVE", direction="on", linebreak="al", unicodeslot=0x2707, }, [0x2708]={ category="so", description="AIRPLANE", direction="on", linebreak="id", unicodeslot=0x2708, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2709]={ category="so", description="ENVELOPE", direction="on", linebreak="id", unicodeslot=0x2709, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x270A]={ category="so", description="RAISED FIST", direction="on", linebreak="id", unicodeslot=0x270A, }, [0x270B]={ category="so", description="RAISED HAND", direction="on", linebreak="id", unicodeslot=0x270B, }, [0x270C]={ category="so", description="VICTORY HAND", direction="on", linebreak="id", unicodeslot=0x270C, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x270D]={ category="so", description="WRITING HAND", direction="on", linebreak="id", unicodeslot=0x270D, }, [0x270E]={ category="so", description="LOWER RIGHT PENCIL", direction="on", linebreak="al", unicodeslot=0x270E, }, [0x270F]={ category="so", description="PENCIL", direction="on", linebreak="al", unicodeslot=0x270F, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2710]={ category="so", description="UPPER RIGHT PENCIL", direction="on", linebreak="al", unicodeslot=0x2710, }, [0x2711]={ category="so", description="WHITE NIB", direction="on", linebreak="al", unicodeslot=0x2711, }, [0x2712]={ category="so", description="BLACK NIB", direction="on", linebreak="al", unicodeslot=0x2712, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2713]={ adobename="checkmark", category="so", description="CHECK MARK", direction="on", linebreak="al", mathclass="nothing", mathname="checkmark", unicodeslot=0x2713, }, [0x2714]={ category="so", description="HEAVY CHECK MARK", direction="on", linebreak="al", unicodeslot=0x2714, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2715]={ category="so", description="MULTIPLICATION X", direction="on", linebreak="al", unicodeslot=0x2715, }, [0x2716]={ category="so", description="HEAVY MULTIPLICATION X", direction="on", linebreak="al", unicodeslot=0x2716, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2717]={ category="so", description="BALLOT X", direction="on", linebreak="al", unicodeslot=0x2717, }, [0x2718]={ category="so", description="HEAVY BALLOT X", direction="on", linebreak="al", unicodeslot=0x2718, }, [0x2719]={ category="so", description="OUTLINED GREEK CROSS", direction="on", linebreak="al", unicodeslot=0x2719, }, [0x271A]={ category="so", description="HEAVY GREEK CROSS", direction="on", linebreak="al", unicodeslot=0x271A, }, [0x271B]={ category="so", description="OPEN CENTRE CROSS", direction="on", linebreak="al", unicodeslot=0x271B, }, [0x271C]={ category="so", description="HEAVY OPEN CENTRE CROSS", direction="on", linebreak="al", unicodeslot=0x271C, }, [0x271D]={ category="so", description="LATIN CROSS", direction="on", linebreak="al", unicodeslot=0x271D, }, [0x271E]={ category="so", description="SHADOWED WHITE LATIN CROSS", direction="on", linebreak="al", unicodeslot=0x271E, }, [0x271F]={ category="so", description="OUTLINED LATIN CROSS", direction="on", linebreak="al", unicodeslot=0x271F, }, [0x2720]={ category="so", description="MALTESE CROSS", direction="on", linebreak="al", mathclass="nothing", mathname="maltese", unicodeslot=0x2720, }, [0x2721]={ category="so", description="STAR OF DAVID", direction="on", linebreak="al", unicodeslot=0x2721, }, [0x2722]={ category="so", description="FOUR TEARDROP-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x2722, }, [0x2723]={ category="so", description="FOUR BALLOON-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x2723, }, [0x2724]={ category="so", description="HEAVY FOUR BALLOON-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x2724, }, [0x2725]={ category="so", description="FOUR CLUB-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x2725, }, [0x2726]={ category="so", description="BLACK FOUR POINTED STAR", direction="on", linebreak="al", unicodeslot=0x2726, }, [0x2727]={ category="so", description="WHITE FOUR POINTED STAR", direction="on", linebreak="al", unicodeslot=0x2727, }, [0x2728]={ category="so", description="SPARKLES", direction="on", linebreak="al", unicodeslot=0x2728, }, [0x2729]={ category="so", description="STRESS OUTLINED WHITE STAR", direction="on", linebreak="al", unicodeslot=0x2729, }, [0x272A]={ category="so", description="CIRCLED WHITE STAR", direction="on", linebreak="al", unicodeslot=0x272A, }, [0x272B]={ category="so", description="OPEN CENTRE BLACK STAR", direction="on", linebreak="al", unicodeslot=0x272B, }, [0x272C]={ category="so", description="BLACK CENTRE WHITE STAR", direction="on", linebreak="al", unicodeslot=0x272C, }, [0x272D]={ category="so", description="OUTLINED BLACK STAR", direction="on", linebreak="al", unicodeslot=0x272D, }, [0x272E]={ category="so", description="HEAVY OUTLINED BLACK STAR", direction="on", linebreak="al", unicodeslot=0x272E, }, [0x272F]={ category="so", description="PINWHEEL STAR", direction="on", linebreak="al", unicodeslot=0x272F, }, [0x2730]={ category="so", description="SHADOWED WHITE STAR", direction="on", linebreak="al", unicodeslot=0x2730, }, [0x2731]={ category="so", description="HEAVY ASTERISK", direction="on", linebreak="al", unicodeslot=0x2731, }, [0x2732]={ category="so", description="OPEN CENTRE ASTERISK", direction="on", linebreak="al", unicodeslot=0x2732, }, [0x2733]={ category="so", description="EIGHT SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x2733, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2734]={ category="so", description="EIGHT POINTED BLACK STAR", direction="on", linebreak="al", unicodeslot=0x2734, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2735]={ category="so", description="EIGHT POINTED PINWHEEL STAR", direction="on", linebreak="al", unicodeslot=0x2735, }, [0x2736]={ category="so", description="SIX POINTED BLACK STAR", direction="on", linebreak="al", unicodeslot=0x2736, }, [0x2737]={ category="so", description="EIGHT POINTED RECTILINEAR BLACK STAR", direction="on", linebreak="al", unicodeslot=0x2737, }, [0x2738]={ category="so", description="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR", direction="on", linebreak="al", unicodeslot=0x2738, }, [0x2739]={ category="so", description="TWELVE POINTED BLACK STAR", direction="on", linebreak="al", unicodeslot=0x2739, }, [0x273A]={ category="so", description="SIXTEEN POINTED ASTERISK", direction="on", linebreak="al", unicodeslot=0x273A, }, [0x273B]={ category="so", description="TEARDROP-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x273B, }, [0x273C]={ category="so", description="OPEN CENTRE TEARDROP-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x273C, }, [0x273D]={ category="so", cjkwd="a", description="HEAVY TEARDROP-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x273D, }, [0x273E]={ category="so", description="SIX PETALLED BLACK AND WHITE FLORETTE", direction="on", linebreak="al", unicodeslot=0x273E, }, [0x273F]={ category="so", description="BLACK FLORETTE", direction="on", linebreak="al", unicodeslot=0x273F, }, [0x2740]={ category="so", description="WHITE FLORETTE", direction="on", linebreak="al", unicodeslot=0x2740, }, [0x2741]={ category="so", description="EIGHT PETALLED OUTLINED BLACK FLORETTE", direction="on", linebreak="al", unicodeslot=0x2741, }, [0x2742]={ category="so", description="CIRCLED OPEN CENTRE EIGHT POINTED STAR", direction="on", linebreak="al", unicodeslot=0x2742, }, [0x2743]={ category="so", description="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK", direction="on", linebreak="al", unicodeslot=0x2743, }, [0x2744]={ category="so", description="SNOWFLAKE", direction="on", linebreak="al", unicodeslot=0x2744, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2745]={ category="so", description="TIGHT TRIFOLIATE SNOWFLAKE", direction="on", linebreak="al", unicodeslot=0x2745, }, [0x2746]={ category="so", description="HEAVY CHEVRON SNOWFLAKE", direction="on", linebreak="al", unicodeslot=0x2746, }, [0x2747]={ category="so", description="SPARKLE", direction="on", linebreak="al", unicodeslot=0x2747, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2748]={ category="so", description="HEAVY SPARKLE", direction="on", linebreak="al", unicodeslot=0x2748, }, [0x2749]={ category="so", description="BALLOON-SPOKED ASTERISK", direction="on", linebreak="al", unicodeslot=0x2749, }, [0x274A]={ category="so", description="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK", direction="on", linebreak="al", unicodeslot=0x274A, }, [0x274B]={ category="so", description="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK", direction="on", linebreak="al", unicodeslot=0x274B, }, [0x274C]={ category="so", description="CROSS MARK", direction="on", linebreak="al", unicodeslot=0x274C, }, [0x274D]={ category="so", description="SHADOWED WHITE CIRCLE", direction="on", linebreak="al", unicodeslot=0x274D, }, [0x274E]={ category="so", description="NEGATIVE SQUARED CROSS MARK", direction="on", linebreak="al", unicodeslot=0x274E, }, [0x274F]={ category="so", description="LOWER RIGHT DROP-SHADOWED WHITE SQUARE", direction="on", linebreak="al", unicodeslot=0x274F, }, [0x2750]={ category="so", description="UPPER RIGHT DROP-SHADOWED WHITE SQUARE", direction="on", linebreak="al", unicodeslot=0x2750, }, [0x2751]={ category="so", description="LOWER RIGHT SHADOWED WHITE SQUARE", direction="on", linebreak="al", unicodeslot=0x2751, }, [0x2752]={ category="so", description="UPPER RIGHT SHADOWED WHITE SQUARE", direction="on", linebreak="al", unicodeslot=0x2752, }, [0x2753]={ category="so", description="BLACK QUESTION MARK ORNAMENT", direction="on", linebreak="al", unicodeslot=0x2753, }, [0x2754]={ category="so", description="WHITE QUESTION MARK ORNAMENT", direction="on", linebreak="al", unicodeslot=0x2754, }, [0x2755]={ category="so", description="WHITE EXCLAMATION MARK ORNAMENT", direction="on", linebreak="al", unicodeslot=0x2755, }, [0x2756]={ category="so", description="BLACK DIAMOND MINUS WHITE X", direction="on", linebreak="al", unicodeslot=0x2756, }, [0x2757]={ category="so", cjkwd="a", description="HEAVY EXCLAMATION MARK SYMBOL", direction="on", linebreak="ai", unicodeslot=0x2757, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2758]={ category="so", description="LIGHT VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x2758, }, [0x2759]={ category="so", description="MEDIUM VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x2759, }, [0x275A]={ category="so", description="HEAVY VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x275A, }, [0x275B]={ category="so", description="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT", direction="on", linebreak="qu", unicodeslot=0x275B, }, [0x275C]={ category="so", description="HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT", direction="on", linebreak="qu", unicodeslot=0x275C, }, [0x275D]={ category="so", description="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT", direction="on", linebreak="qu", unicodeslot=0x275D, }, [0x275E]={ category="so", description="HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT", direction="on", linebreak="qu", unicodeslot=0x275E, }, [0x275F]={ category="so", description="HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT", direction="on", linebreak="al", unicodeslot=0x275F, }, [0x2760]={ category="so", description="HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT", direction="on", linebreak="al", unicodeslot=0x2760, }, [0x2761]={ category="so", description="CURVED STEM PARAGRAPH SIGN ORNAMENT", direction="on", linebreak="al", unicodeslot=0x2761, }, [0x2762]={ category="so", description="HEAVY EXCLAMATION MARK ORNAMENT", direction="on", linebreak="ex", unicodeslot=0x2762, }, [0x2763]={ category="so", description="HEAVY HEART EXCLAMATION MARK ORNAMENT", direction="on", linebreak="ex", unicodeslot=0x2763, }, [0x2764]={ category="so", description="HEAVY BLACK HEART", direction="on", linebreak="al", unicodeslot=0x2764, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2765]={ category="so", description="ROTATED HEAVY BLACK HEART BULLET", direction="on", linebreak="al", unicodeslot=0x2765, }, [0x2766]={ category="so", description="FLORAL HEART", direction="on", linebreak="al", unicodeslot=0x2766, }, [0x2767]={ category="so", description="ROTATED FLORAL HEART BULLET", direction="on", linebreak="al", unicodeslot=0x2767, }, [0x2768]={ category="ps", description="MEDIUM LEFT PARENTHESIS ORNAMENT", direction="on", linebreak="op", mirror=0x2769, unicodeslot=0x2768, }, [0x2769]={ category="pe", description="MEDIUM RIGHT PARENTHESIS ORNAMENT", direction="on", linebreak="cl", mirror=0x2768, unicodeslot=0x2769, }, [0x276A]={ category="ps", description="MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT", direction="on", linebreak="op", mirror=0x276B, unicodeslot=0x276A, }, [0x276B]={ category="pe", description="MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT", direction="on", linebreak="cl", mirror=0x276A, unicodeslot=0x276B, }, [0x276C]={ category="ps", description="MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT", direction="on", linebreak="op", mirror=0x276D, unicodeslot=0x276C, }, [0x276D]={ category="pe", description="MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT", direction="on", linebreak="cl", mirror=0x276C, unicodeslot=0x276D, }, [0x276E]={ category="ps", description="HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT", direction="on", linebreak="op", mirror=0x276F, unicodeslot=0x276E, }, [0x276F]={ category="pe", description="HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT", direction="on", linebreak="cl", mirror=0x276E, unicodeslot=0x276F, }, [0x2770]={ category="ps", description="HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT", direction="on", linebreak="op", mirror=0x2771, unicodeslot=0x2770, }, [0x2771]={ category="pe", description="HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT", direction="on", linebreak="cl", mirror=0x2770, unicodeslot=0x2771, }, [0x2772]={ category="ps", description="LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT", direction="on", linebreak="op", mirror=0x2773, unicodeslot=0x2772, }, [0x2773]={ category="pe", description="LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT", direction="on", linebreak="cl", mirror=0x2772, unicodeslot=0x2773, }, [0x2774]={ category="ps", description="MEDIUM LEFT CURLY BRACKET ORNAMENT", direction="on", linebreak="op", mirror=0x2775, unicodeslot=0x2774, }, [0x2775]={ category="pe", description="MEDIUM RIGHT CURLY BRACKET ORNAMENT", direction="on", linebreak="cl", mirror=0x2774, unicodeslot=0x2775, }, [0x2776]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT ONE", direction="on", linebreak="ai", unicodeslot=0x2776, }, [0x2777]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT TWO", direction="on", linebreak="ai", unicodeslot=0x2777, }, [0x2778]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT THREE", direction="on", linebreak="ai", unicodeslot=0x2778, }, [0x2779]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT FOUR", direction="on", linebreak="ai", unicodeslot=0x2779, }, [0x277A]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT FIVE", direction="on", linebreak="ai", unicodeslot=0x277A, }, [0x277B]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT SIX", direction="on", linebreak="ai", unicodeslot=0x277B, }, [0x277C]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN", direction="on", linebreak="ai", unicodeslot=0x277C, }, [0x277D]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT", direction="on", linebreak="ai", unicodeslot=0x277D, }, [0x277E]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED DIGIT NINE", direction="on", linebreak="ai", unicodeslot=0x277E, }, [0x277F]={ category="no", cjkwd="a", description="DINGBAT NEGATIVE CIRCLED NUMBER TEN", direction="on", linebreak="ai", unicodeslot=0x277F, }, [0x2780]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT ONE", direction="on", linebreak="ai", unicodeslot=0x2780, }, [0x2781]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT TWO", direction="on", linebreak="ai", unicodeslot=0x2781, }, [0x2782]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT THREE", direction="on", linebreak="ai", unicodeslot=0x2782, }, [0x2783]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR", direction="on", linebreak="ai", unicodeslot=0x2783, }, [0x2784]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE", direction="on", linebreak="ai", unicodeslot=0x2784, }, [0x2785]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT SIX", direction="on", linebreak="ai", unicodeslot=0x2785, }, [0x2786]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN", direction="on", linebreak="ai", unicodeslot=0x2786, }, [0x2787]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT", direction="on", linebreak="ai", unicodeslot=0x2787, }, [0x2788]={ category="no", description="DINGBAT CIRCLED SANS-SERIF DIGIT NINE", direction="on", linebreak="ai", unicodeslot=0x2788, }, [0x2789]={ category="no", description="DINGBAT CIRCLED SANS-SERIF NUMBER TEN", direction="on", linebreak="ai", unicodeslot=0x2789, }, [0x278A]={ adobename="onecircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE", direction="on", linebreak="ai", unicodeslot=0x278A, }, [0x278B]={ adobename="twocircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO", direction="on", linebreak="ai", unicodeslot=0x278B, }, [0x278C]={ adobename="threecircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE", direction="on", linebreak="ai", unicodeslot=0x278C, }, [0x278D]={ adobename="fourcircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR", direction="on", linebreak="ai", unicodeslot=0x278D, }, [0x278E]={ adobename="fivecircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE", direction="on", linebreak="ai", unicodeslot=0x278E, }, [0x278F]={ adobename="sixcircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX", direction="on", linebreak="ai", unicodeslot=0x278F, }, [0x2790]={ adobename="sevencircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN", direction="on", linebreak="ai", unicodeslot=0x2790, }, [0x2791]={ adobename="eightcircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT", direction="on", linebreak="ai", unicodeslot=0x2791, }, [0x2792]={ adobename="ninecircleinversesansserif", category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE", direction="on", linebreak="ai", unicodeslot=0x2792, }, [0x2793]={ category="no", description="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN", direction="on", linebreak="ai", unicodeslot=0x2793, }, [0x2794]={ category="so", description="HEAVY WIDE-HEADED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2794, }, [0x2795]={ category="so", description="HEAVY PLUS SIGN", direction="on", linebreak="al", unicodeslot=0x2795, }, [0x2796]={ category="so", description="HEAVY MINUS SIGN", direction="on", linebreak="al", unicodeslot=0x2796, }, [0x2797]={ category="so", description="HEAVY DIVISION SIGN", direction="on", linebreak="al", unicodeslot=0x2797, }, [0x2798]={ category="so", description="HEAVY SOUTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x2798, }, [0x2799]={ category="so", description="HEAVY RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2799, }, [0x279A]={ category="so", description="HEAVY NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x279A, }, [0x279B]={ category="so", description="DRAFTING POINT RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x279B, }, [0x279C]={ category="so", description="HEAVY ROUND-TIPPED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x279C, }, [0x279D]={ category="so", description="TRIANGLE-HEADED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x279D, }, [0x279E]={ adobename="arrowrightheavy", category="so", description="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x279E, }, [0x279F]={ category="so", description="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x279F, }, [0x27A0]={ category="so", description="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A0, }, [0x27A1]={ category="so", description="BLACK RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A1, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x27A2]={ category="so", description="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x27A2, }, [0x27A3]={ category="so", description="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x27A3, }, [0x27A4]={ category="so", description="BLACK RIGHTWARDS ARROWHEAD", direction="on", linebreak="al", unicodeslot=0x27A4, }, [0x27A5]={ category="so", description="HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A5, }, [0x27A6]={ category="so", description="HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A6, }, [0x27A7]={ category="so", description="SQUAT BLACK RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A7, }, [0x27A8]={ category="so", description="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A8, }, [0x27A9]={ category="so", description="RIGHT-SHADED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27A9, }, [0x27AA]={ category="so", description="LEFT-SHADED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27AA, }, [0x27AB]={ category="so", description="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27AB, }, [0x27AC]={ category="so", description="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27AC, }, [0x27AD]={ category="so", description="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27AD, }, [0x27AE]={ category="so", description="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27AE, }, [0x27AF]={ category="so", description="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27AF, }, [0x27B0]={ category="so", description="CURLY LOOP", direction="on", linebreak="al", unicodeslot=0x27B0, }, [0x27B1]={ category="so", description="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27B1, }, [0x27B2]={ category="so", description="CIRCLED HEAVY WHITE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27B2, }, [0x27B3]={ category="so", description="WHITE-FEATHERED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27B3, }, [0x27B4]={ category="so", description="BLACK-FEATHERED SOUTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x27B4, }, [0x27B5]={ category="so", description="BLACK-FEATHERED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27B5, }, [0x27B6]={ category="so", description="BLACK-FEATHERED NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x27B6, }, [0x27B7]={ category="so", description="HEAVY BLACK-FEATHERED SOUTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x27B7, }, [0x27B8]={ category="so", description="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27B8, }, [0x27B9]={ category="so", description="HEAVY BLACK-FEATHERED NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x27B9, }, [0x27BA]={ category="so", description="TEARDROP-BARBED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27BA, }, [0x27BB]={ category="so", description="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27BB, }, [0x27BC]={ category="so", description="WEDGE-TAILED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27BC, }, [0x27BD]={ category="so", description="HEAVY WEDGE-TAILED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27BD, }, [0x27BE]={ category="so", description="OPEN-OUTLINED RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x27BE, }, [0x27BF]={ category="so", description="DOUBLE CURLY LOOP", direction="on", linebreak="al", unicodeslot=0x27BF, }, [0x27C0]={ category="sm", description="THREE DIMENSIONAL ANGLE", direction="on", linebreak="al", unicodeslot=0x27C0, }, [0x27C1]={ category="sm", description="WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE", direction="on", linebreak="al", unicodeslot=0x27C1, }, [0x27C2]={ category="sm", description="PERPENDICULAR", direction="on", linebreak="al", unicodeslot=0x27C2, }, [0x27C3]={ category="sm", description="OPEN SUBSET", direction="on", linebreak="al", mirror=0x27C4, unicodeslot=0x27C3, }, [0x27C4]={ category="sm", description="OPEN SUPERSET", direction="on", linebreak="al", mirror=0x27C3, unicodeslot=0x27C4, }, [0x27C5]={ category="ps", description="LEFT S-SHAPED BAG DELIMITER", direction="on", linebreak="op", mirror=0x27C6, unicodeslot=0x27C5, }, [0x27C6]={ category="pe", description="RIGHT S-SHAPED BAG DELIMITER", direction="on", linebreak="cl", mirror=0x27C5, unicodeslot=0x27C6, }, [0x27C7]={ category="sm", description="OR WITH DOT INSIDE", direction="on", linebreak="al", unicodeslot=0x27C7, }, [0x27C8]={ category="sm", description="REVERSE SOLIDUS PRECEDING SUBSET", direction="on", linebreak="al", mirror=0x27C9, unicodeslot=0x27C8, }, [0x27C9]={ category="sm", description="SUPERSET PRECEDING SOLIDUS", direction="on", linebreak="al", mirror=0x27C8, unicodeslot=0x27C9, }, [0x27CA]={ category="sm", description="VERTICAL BAR WITH HORIZONTAL STROKE", direction="on", linebreak="al", unicodeslot=0x27CA, }, [0x27CB]={ category="sm", comment="check math properties", description="MATHEMATICAL RISING DIAGONAL", direction="on", linebreak="al", mirror=0x27CD, unicodeslot=0x27CB, }, [0x27CC]={ category="sm", description="LONG DIVISION", direction="on", linebreak="al", unicodeslot=0x27CC, }, [0x27CD]={ category="sm", comment="check math properties", description="MATHEMATICAL FALLING DIAGONAL", direction="on", linebreak="al", mirror=0x27CB, unicodeslot=0x27CD, }, [0x27CE]={ category="sm", description="SQUARED LOGICAL AND", direction="on", linebreak="al", unicodeslot=0x27CE, }, [0x27CF]={ category="sm", description="SQUARED LOGICAL OR", direction="on", linebreak="al", unicodeslot=0x27CF, }, [0x27D0]={ category="sm", description="WHITE DIAMOND WITH CENTRED DOT", direction="on", linebreak="al", unicodeslot=0x27D0, }, [0x27D1]={ category="sm", description="AND WITH DOT", direction="on", linebreak="al", unicodeslot=0x27D1, }, [0x27D2]={ category="sm", description="ELEMENT OF OPENING UPWARDS", direction="on", linebreak="al", unicodeslot=0x27D2, }, [0x27D3]={ category="sm", description="LOWER RIGHT CORNER WITH DOT", direction="on", linebreak="al", unicodeslot=0x27D3, }, [0x27D4]={ category="sm", description="UPPER LEFT CORNER WITH DOT", direction="on", linebreak="al", unicodeslot=0x27D4, }, [0x27D5]={ category="sm", description="LEFT OUTER JOIN", direction="on", linebreak="al", mirror=0x27D6, unicodeslot=0x27D5, }, [0x27D6]={ category="sm", description="RIGHT OUTER JOIN", direction="on", linebreak="al", mirror=0x27D5, unicodeslot=0x27D6, }, [0x27D7]={ category="sm", description="FULL OUTER JOIN", direction="on", linebreak="al", unicodeslot=0x27D7, }, [0x27D8]={ category="sm", description="LARGE UP TACK", direction="on", linebreak="al", unicodeslot=0x27D8, }, [0x27D9]={ category="sm", description="LARGE DOWN TACK", direction="on", linebreak="al", unicodeslot=0x27D9, }, [0x27DA]={ category="sm", description="LEFT AND RIGHT DOUBLE TURNSTILE", direction="on", linebreak="al", unicodeslot=0x27DA, }, [0x27DB]={ category="sm", description="LEFT AND RIGHT TACK", direction="on", linebreak="al", unicodeslot=0x27DB, }, [0x27DC]={ category="sm", description="LEFT MULTIMAP", direction="on", linebreak="al", unicodeslot=0x27DC, }, [0x27DD]={ category="sm", description="LONG RIGHT TACK", direction="on", linebreak="al", mirror=0x27DE, unicodeslot=0x27DD, }, [0x27DE]={ category="sm", description="LONG LEFT TACK", direction="on", linebreak="al", mirror=0x27DD, unicodeslot=0x27DE, }, [0x27DF]={ category="sm", description="UP TACK WITH CIRCLE ABOVE", direction="on", linebreak="al", unicodeslot=0x27DF, }, [0x27E0]={ category="sm", description="LOZENGE DIVIDED BY HORIZONTAL RULE", direction="on", linebreak="al", unicodeslot=0x27E0, }, [0x27E1]={ category="sm", description="WHITE CONCAVE-SIDED DIAMOND", direction="on", linebreak="al", unicodeslot=0x27E1, }, [0x27E2]={ category="sm", description="WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK", direction="on", linebreak="al", mirror=0x27E3, unicodeslot=0x27E2, }, [0x27E3]={ category="sm", description="WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK", direction="on", linebreak="al", mirror=0x27E2, unicodeslot=0x27E3, }, [0x27E4]={ category="sm", description="WHITE SQUARE WITH LEFTWARDS TICK", direction="on", linebreak="al", mirror=0x27E5, unicodeslot=0x27E4, }, [0x27E5]={ category="sm", description="WHITE SQUARE WITH RIGHTWARDS TICK", direction="on", linebreak="al", mirror=0x27E4, unicodeslot=0x27E5, }, [0x27E6]={ category="ps", cjkwd="na", description="MATHEMATICAL LEFT WHITE SQUARE BRACKET", direction="on", linebreak="op", mathclass="open", mathname="llbracket", mirror=0x27E7, unicodeslot=0x27E6, }, [0x27E7]={ category="pe", cjkwd="na", description="MATHEMATICAL RIGHT WHITE SQUARE BRACKET", direction="on", linebreak="cl", mathclass="close", mathname="rrbracket", mirror=0x27E6, unicodeslot=0x27E7, }, [0x27E8]={ category="ps", cjkwd="na", description="MATHEMATICAL LEFT ANGLE BRACKET", direction="on", linebreak="op", mathclass="open", mathname="langle", mirror=0x27E9, unicodeslot=0x27E8, }, [0x27E9]={ category="pe", cjkwd="na", description="MATHEMATICAL RIGHT ANGLE BRACKET", direction="on", linebreak="cl", mathclass="close", mathname="rangle", mirror=0x27E8, unicodeslot=0x27E9, }, [0x27EA]={ category="ps", cjkwd="na", description="MATHEMATICAL LEFT DOUBLE ANGLE BRACKET", direction="on", linebreak="op", mathclass="open", mathname="llangle", mirror=0x27EB, unicodeslot=0x27EA, }, [0x27EB]={ category="pe", cjkwd="na", description="MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET", direction="on", linebreak="cl", mathclass="close", mathname="rrangle", mirror=0x27EA, unicodeslot=0x27EB, }, [0x27EC]={ category="ps", cjkwd="na", description="MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET", direction="on", linebreak="op", mirror=0x27ED, unicodeslot=0x27EC, }, [0x27ED]={ category="pe", cjkwd="na", description="MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET", direction="on", linebreak="cl", mirror=0x27EC, unicodeslot=0x27ED, }, [0x27EE]={ category="ps", description="MATHEMATICAL LEFT FLATTENED PARENTHESIS", direction="on", linebreak="op", mathclass="open", mathname="lgroup", mirror=0x27EF, unicodeslot=0x27EE, }, [0x27EF]={ category="pe", description="MATHEMATICAL RIGHT FLATTENED PARENTHESIS", direction="on", linebreak="cl", mathclass="close", mathname="rgroup", mirror=0x27EE, unicodeslot=0x27EF, }, [0x27F0]={ category="sm", description="UPWARDS QUADRUPLE ARROW", direction="on", linebreak="al", mathextensible="u", unicodeslot=0x27F0, }, [0x27F1]={ category="sm", description="DOWNWARDS QUADRUPLE ARROW", direction="on", linebreak="al", mathextensible="v", unicodeslot=0x27F1, }, [0x27F2]={ category="sm", description="ANTICLOCKWISE GAPPED CIRCLE ARROW", direction="on", linebreak="al", unicodeslot=0x27F2, }, [0x27F3]={ category="sm", description="CLOCKWISE GAPPED CIRCLE ARROW", direction="on", linebreak="al", unicodeslot=0x27F3, }, [0x27F4]={ category="sm", description="RIGHT ARROW WITH CIRCLED PLUS", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x27F4, }, [0x27F5]={ category="sm", description="LONG LEFTWARDS ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="longleftarrow", unicodeslot=0x27F5, }, [0x27F6]={ category="sm", description="LONG RIGHTWARDS ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="longrightarrow", unicodeslot=0x27F6, }, [0x27F7]={ category="sm", description="LONG LEFT RIGHT ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="leftrightarrowfill", mathname="longleftrightarrow", unicodeslot=0x27F7, }, [0x27F8]={ category="sm", description="LONG LEFTWARDS DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathfiller="Leftarrowfill", mathname="Longleftarrow", unicodeslot=0x27F8, }, [0x27F9]={ category="sm", description="LONG RIGHTWARDS DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathfiller="Rightarrowfill", mathname="Longrightarrow", unicodeslot=0x27F9, }, [0x27FA]={ category="sm", description="LONG LEFT RIGHT DOUBLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="h", mathfiller="Leftrightarrowfill", mathname="Longleftrightarrow", unicodeslot=0x27FA, }, [0x27FB]={ category="sm", description="LONG LEFTWARDS ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="longmapsfrom", unicodeslot=0x27FB, }, [0x27FC]={ category="sm", description="LONG RIGHTWARDS ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="longmapsto", unicodeslot=0x27FC, }, [0x27FD]={ category="sm", description="LONG LEFTWARDS DOUBLE ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="Longmapsfrom", unicodeslot=0x27FD, }, [0x27FE]={ category="sm", description="LONG RIGHTWARDS DOUBLE ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="Longmapsto", unicodeslot=0x27FE, }, [0x27FF]={ category="sm", description="LONG RIGHTWARDS SQUIGGLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="longrightsquigarrow", unicodeslot=0x27FF, }, [0x2800]={ category="so", description="BRAILLE PATTERN BLANK", direction="l", linebreak="al", unicodeslot=0x2800, }, [0x2801]={ category="so", description="BRAILLE PATTERN DOTS-0x0001", direction="l", linebreak="al", unicodeslot=0x2801, }, [0x2802]={ category="so", description="BRAILLE PATTERN DOTS-0x0002", direction="l", linebreak="al", unicodeslot=0x2802, }, [0x2803]={ category="so", description="BRAILLE PATTERN DOTS-0x000C", direction="l", linebreak="al", unicodeslot=0x2803, }, [0x2804]={ category="so", description="BRAILLE PATTERN DOTS-0x0003", direction="l", linebreak="al", unicodeslot=0x2804, }, [0x2805]={ category="so", description="BRAILLE PATTERN DOTS-0x000D", direction="l", linebreak="al", unicodeslot=0x2805, }, [0x2806]={ category="so", description="BRAILLE PATTERN DOTS-0x0017", direction="l", linebreak="al", unicodeslot=0x2806, }, [0x2807]={ category="so", description="BRAILLE PATTERN DOTS-0x007B", direction="l", linebreak="al", unicodeslot=0x2807, }, [0x2808]={ category="so", description="BRAILLE PATTERN DOTS-0x0004", direction="l", linebreak="al", unicodeslot=0x2808, }, [0x2809]={ category="so", description="BRAILLE PATTERN DOTS-0x000E", direction="l", linebreak="al", unicodeslot=0x2809, }, [0x280A]={ category="so", description="BRAILLE PATTERN DOTS-0x0018", direction="l", linebreak="al", unicodeslot=0x280A, }, [0x280B]={ category="so", description="BRAILLE PATTERN DOTS-0x007C", direction="l", linebreak="al", unicodeslot=0x280B, }, [0x280C]={ category="so", description="BRAILLE PATTERN DOTS-0x0022", direction="l", linebreak="al", unicodeslot=0x280C, }, [0x280D]={ category="so", description="BRAILLE PATTERN DOTS-0x0086", direction="l", linebreak="al", unicodeslot=0x280D, }, [0x280E]={ category="so", description="BRAILLE PATTERN DOTS-0x00EA", direction="l", linebreak="al", unicodeslot=0x280E, }, [0x280F]={ category="so", description="BRAILLE PATTERN DOTS-0x04D2", direction="l", linebreak="al", unicodeslot=0x280F, }, [0x2810]={ category="so", description="BRAILLE PATTERN DOTS-0x0005", direction="l", linebreak="al", unicodeslot=0x2810, }, [0x2811]={ category="so", description="BRAILLE PATTERN DOTS-0x000F", direction="l", linebreak="al", unicodeslot=0x2811, }, [0x2812]={ category="so", description="BRAILLE PATTERN DOTS-0x0019", direction="l", linebreak="al", unicodeslot=0x2812, }, [0x2813]={ category="so", description="BRAILLE PATTERN DOTS-0x007D", direction="l", linebreak="al", unicodeslot=0x2813, }, [0x2814]={ category="so", description="BRAILLE PATTERN DOTS-0x0023", direction="l", linebreak="al", unicodeslot=0x2814, }, [0x2815]={ category="so", description="BRAILLE PATTERN DOTS-0x0087", direction="l", linebreak="al", unicodeslot=0x2815, }, [0x2816]={ category="so", description="BRAILLE PATTERN DOTS-0x00EB", direction="l", linebreak="al", unicodeslot=0x2816, }, [0x2817]={ category="so", description="BRAILLE PATTERN DOTS-0x04D3", direction="l", linebreak="al", unicodeslot=0x2817, }, [0x2818]={ category="so", description="BRAILLE PATTERN DOTS-0x002D", direction="l", linebreak="al", unicodeslot=0x2818, }, [0x2819]={ category="so", description="BRAILLE PATTERN DOTS-0x0091", direction="l", linebreak="al", unicodeslot=0x2819, }, [0x281A]={ category="so", description="BRAILLE PATTERN DOTS-0x00F5", direction="l", linebreak="al", unicodeslot=0x281A, }, [0x281B]={ category="so", description="BRAILLE PATTERN DOTS-0x04DD", direction="l", linebreak="al", unicodeslot=0x281B, }, [0x281C]={ category="so", description="BRAILLE PATTERN DOTS-0x0159", direction="l", linebreak="al", unicodeslot=0x281C, }, [0x281D]={ category="so", description="BRAILLE PATTERN DOTS-0x0541", direction="l", linebreak="al", unicodeslot=0x281D, }, [0x281E]={ category="so", description="BRAILLE PATTERN DOTS-0x0929", direction="l", linebreak="al", unicodeslot=0x281E, }, [0x281F]={ category="so", description="BRAILLE PATTERN DOTS-0x3039", direction="l", linebreak="al", unicodeslot=0x281F, }, [0x2820]={ category="so", description="BRAILLE PATTERN DOTS-0x0006", direction="l", linebreak="al", unicodeslot=0x2820, }, [0x2821]={ category="so", description="BRAILLE PATTERN DOTS-0x0010", direction="l", linebreak="al", unicodeslot=0x2821, }, [0x2822]={ category="so", description="BRAILLE PATTERN DOTS-0x001A", direction="l", linebreak="al", unicodeslot=0x2822, }, [0x2823]={ category="so", description="BRAILLE PATTERN DOTS-0x007E", direction="l", linebreak="al", unicodeslot=0x2823, }, [0x2824]={ category="so", description="BRAILLE PATTERN DOTS-0x0024", direction="l", linebreak="al", unicodeslot=0x2824, }, [0x2825]={ category="so", description="BRAILLE PATTERN DOTS-0x0088", direction="l", linebreak="al", unicodeslot=0x2825, }, [0x2826]={ category="so", description="BRAILLE PATTERN DOTS-0x00EC", direction="l", linebreak="al", unicodeslot=0x2826, }, [0x2827]={ category="so", description="BRAILLE PATTERN DOTS-0x04D4", direction="l", linebreak="al", unicodeslot=0x2827, }, [0x2828]={ category="so", description="BRAILLE PATTERN DOTS-0x002E", direction="l", linebreak="al", unicodeslot=0x2828, }, [0x2829]={ category="so", description="BRAILLE PATTERN DOTS-0x0092", direction="l", linebreak="al", unicodeslot=0x2829, }, [0x282A]={ category="so", description="BRAILLE PATTERN DOTS-0x00F6", direction="l", linebreak="al", unicodeslot=0x282A, }, [0x282B]={ category="so", description="BRAILLE PATTERN DOTS-0x04DE", direction="l", linebreak="al", unicodeslot=0x282B, }, [0x282C]={ category="so", description="BRAILLE PATTERN DOTS-0x015A", direction="l", linebreak="al", unicodeslot=0x282C, }, [0x282D]={ category="so", description="BRAILLE PATTERN DOTS-0x0542", direction="l", linebreak="al", unicodeslot=0x282D, }, [0x282E]={ category="so", description="BRAILLE PATTERN DOTS-0x092A", direction="l", linebreak="al", unicodeslot=0x282E, }, [0x282F]={ category="so", description="BRAILLE PATTERN DOTS-0x303A", direction="l", linebreak="al", unicodeslot=0x282F, }, [0x2830]={ category="so", description="BRAILLE PATTERN DOTS-0x0038", direction="l", linebreak="al", unicodeslot=0x2830, }, [0x2831]={ category="so", description="BRAILLE PATTERN DOTS-0x009C", direction="l", linebreak="al", unicodeslot=0x2831, }, [0x2832]={ category="so", description="BRAILLE PATTERN DOTS-0x0100", direction="l", linebreak="al", unicodeslot=0x2832, }, [0x2833]={ category="so", description="BRAILLE PATTERN DOTS-0x04E8", direction="l", linebreak="al", unicodeslot=0x2833, }, [0x2834]={ category="so", description="BRAILLE PATTERN DOTS-0x0164", direction="l", linebreak="al", unicodeslot=0x2834, }, [0x2835]={ category="so", description="BRAILLE PATTERN DOTS-0x054C", direction="l", linebreak="al", unicodeslot=0x2835, }, [0x2836]={ category="so", description="BRAILLE PATTERN DOTS-0x0934", direction="l", linebreak="al", unicodeslot=0x2836, }, [0x2837]={ category="so", description="BRAILLE PATTERN DOTS-0x3044", direction="l", linebreak="al", unicodeslot=0x2837, }, [0x2838]={ category="so", description="BRAILLE PATTERN DOTS-0x01C8", direction="l", linebreak="al", unicodeslot=0x2838, }, [0x2839]={ category="so", description="BRAILLE PATTERN DOTS-0x05B0", direction="l", linebreak="al", unicodeslot=0x2839, }, [0x283A]={ category="so", description="BRAILLE PATTERN DOTS-0x0998", direction="l", linebreak="al", unicodeslot=0x283A, }, [0x283B]={ category="so", description="BRAILLE PATTERN DOTS-0x30A8", direction="l", linebreak="al", unicodeslot=0x283B, }, [0x283C]={ category="so", description="BRAILLE PATTERN DOTS-0x0D80", direction="l", linebreak="al", unicodeslot=0x283C, }, [0x283D]={ category="so", description="BRAILLE PATTERN DOTS-0x3490", direction="l", linebreak="al", unicodeslot=0x283D, }, [0x283E]={ category="so", description="BRAILLE PATTERN DOTS-0x5BA0", direction="l", linebreak="al", unicodeslot=0x283E, }, [0x283F]={ category="so", description="BRAILLE PATTERN DOTS-0x1E240", direction="l", linebreak="al", unicodeslot=0x283F, }, [0x2840]={ category="so", description="BRAILLE PATTERN DOTS-0x0007", direction="l", linebreak="al", unicodeslot=0x2840, }, [0x2841]={ category="so", description="BRAILLE PATTERN DOTS-0x0011", direction="l", linebreak="al", unicodeslot=0x2841, }, [0x2842]={ category="so", description="BRAILLE PATTERN DOTS-0x001B", direction="l", linebreak="al", unicodeslot=0x2842, }, [0x2843]={ category="so", description="BRAILLE PATTERN DOTS-0x007F", direction="l", linebreak="al", unicodeslot=0x2843, }, [0x2844]={ category="so", description="BRAILLE PATTERN DOTS-0x0025", direction="l", linebreak="al", unicodeslot=0x2844, }, [0x2845]={ category="so", description="BRAILLE PATTERN DOTS-0x0089", direction="l", linebreak="al", unicodeslot=0x2845, }, [0x2846]={ category="so", description="BRAILLE PATTERN DOTS-0x00ED", direction="l", linebreak="al", unicodeslot=0x2846, }, [0x2847]={ category="so", description="BRAILLE PATTERN DOTS-0x04D5", direction="l", linebreak="al", unicodeslot=0x2847, }, [0x2848]={ category="so", description="BRAILLE PATTERN DOTS-0x002F", direction="l", linebreak="al", unicodeslot=0x2848, }, [0x2849]={ category="so", description="BRAILLE PATTERN DOTS-0x0093", direction="l", linebreak="al", unicodeslot=0x2849, }, [0x284A]={ category="so", description="BRAILLE PATTERN DOTS-0x00F7", direction="l", linebreak="al", unicodeslot=0x284A, }, [0x284B]={ category="so", description="BRAILLE PATTERN DOTS-0x04DF", direction="l", linebreak="al", unicodeslot=0x284B, }, [0x284C]={ category="so", description="BRAILLE PATTERN DOTS-0x015B", direction="l", linebreak="al", unicodeslot=0x284C, }, [0x284D]={ category="so", description="BRAILLE PATTERN DOTS-0x0543", direction="l", linebreak="al", unicodeslot=0x284D, }, [0x284E]={ category="so", description="BRAILLE PATTERN DOTS-0x092B", direction="l", linebreak="al", unicodeslot=0x284E, }, [0x284F]={ category="so", description="BRAILLE PATTERN DOTS-0x303B", direction="l", linebreak="al", unicodeslot=0x284F, }, [0x2850]={ category="so", description="BRAILLE PATTERN DOTS-0x0039", direction="l", linebreak="al", unicodeslot=0x2850, }, [0x2851]={ category="so", description="BRAILLE PATTERN DOTS-0x009D", direction="l", linebreak="al", unicodeslot=0x2851, }, [0x2852]={ category="so", description="BRAILLE PATTERN DOTS-0x0101", direction="l", linebreak="al", unicodeslot=0x2852, }, [0x2853]={ category="so", description="BRAILLE PATTERN DOTS-0x04E9", direction="l", linebreak="al", unicodeslot=0x2853, }, [0x2854]={ category="so", description="BRAILLE PATTERN DOTS-0x0165", direction="l", linebreak="al", unicodeslot=0x2854, }, [0x2855]={ category="so", description="BRAILLE PATTERN DOTS-0x054D", direction="l", linebreak="al", unicodeslot=0x2855, }, [0x2856]={ category="so", description="BRAILLE PATTERN DOTS-0x0935", direction="l", linebreak="al", unicodeslot=0x2856, }, [0x2857]={ category="so", description="BRAILLE PATTERN DOTS-0x3045", direction="l", linebreak="al", unicodeslot=0x2857, }, [0x2858]={ category="so", description="BRAILLE PATTERN DOTS-0x01C9", direction="l", linebreak="al", unicodeslot=0x2858, }, [0x2859]={ category="so", description="BRAILLE PATTERN DOTS-0x05B1", direction="l", linebreak="al", unicodeslot=0x2859, }, [0x285A]={ category="so", description="BRAILLE PATTERN DOTS-0x0999", direction="l", linebreak="al", unicodeslot=0x285A, }, [0x285B]={ category="so", description="BRAILLE PATTERN DOTS-0x30A9", direction="l", linebreak="al", unicodeslot=0x285B, }, [0x285C]={ category="so", description="BRAILLE PATTERN DOTS-0x0D81", direction="l", linebreak="al", unicodeslot=0x285C, }, [0x285D]={ category="so", description="BRAILLE PATTERN DOTS-0x3491", direction="l", linebreak="al", unicodeslot=0x285D, }, [0x285E]={ category="so", description="BRAILLE PATTERN DOTS-0x5BA1", direction="l", linebreak="al", unicodeslot=0x285E, }, [0x285F]={ category="so", description="BRAILLE PATTERN DOTS-0x1E241", direction="l", linebreak="al", unicodeslot=0x285F, }, [0x2860]={ category="so", description="BRAILLE PATTERN DOTS-0x0043", direction="l", linebreak="al", unicodeslot=0x2860, }, [0x2861]={ category="so", description="BRAILLE PATTERN DOTS-0x00A7", direction="l", linebreak="al", unicodeslot=0x2861, }, [0x2862]={ category="so", description="BRAILLE PATTERN DOTS-0x010B", direction="l", linebreak="al", unicodeslot=0x2862, }, [0x2863]={ category="so", description="BRAILLE PATTERN DOTS-0x04F3", direction="l", linebreak="al", unicodeslot=0x2863, }, [0x2864]={ category="so", description="BRAILLE PATTERN DOTS-0x016F", direction="l", linebreak="al", unicodeslot=0x2864, }, [0x2865]={ category="so", description="BRAILLE PATTERN DOTS-0x0557", direction="l", linebreak="al", unicodeslot=0x2865, }, [0x2866]={ category="so", description="BRAILLE PATTERN DOTS-0x093F", direction="l", linebreak="al", unicodeslot=0x2866, }, [0x2867]={ category="so", description="BRAILLE PATTERN DOTS-0x304F", direction="l", linebreak="al", unicodeslot=0x2867, }, [0x2868]={ category="so", description="BRAILLE PATTERN DOTS-0x01D3", direction="l", linebreak="al", unicodeslot=0x2868, }, [0x2869]={ category="so", description="BRAILLE PATTERN DOTS-0x05BB", direction="l", linebreak="al", unicodeslot=0x2869, }, [0x286A]={ category="so", description="BRAILLE PATTERN DOTS-0x09A3", direction="l", linebreak="al", unicodeslot=0x286A, }, [0x286B]={ category="so", description="BRAILLE PATTERN DOTS-0x30B3", direction="l", linebreak="al", unicodeslot=0x286B, }, [0x286C]={ category="so", description="BRAILLE PATTERN DOTS-0x0D8B", direction="l", linebreak="al", unicodeslot=0x286C, }, [0x286D]={ category="so", description="BRAILLE PATTERN DOTS-0x349B", direction="l", linebreak="al", unicodeslot=0x286D, }, [0x286E]={ category="so", description="BRAILLE PATTERN DOTS-0x5BAB", direction="l", linebreak="al", unicodeslot=0x286E, }, [0x286F]={ category="so", description="BRAILLE PATTERN DOTS-0x1E24B", direction="l", linebreak="al", unicodeslot=0x286F, }, [0x2870]={ category="so", description="BRAILLE PATTERN DOTS-0x0237", direction="l", linebreak="al", unicodeslot=0x2870, }, [0x2871]={ category="so", description="BRAILLE PATTERN DOTS-0x061F", direction="l", linebreak="al", unicodeslot=0x2871, }, [0x2872]={ category="so", description="BRAILLE PATTERN DOTS-0x0A07", direction="l", linebreak="al", unicodeslot=0x2872, }, [0x2873]={ category="so", description="BRAILLE PATTERN DOTS-0x3117", direction="l", linebreak="al", unicodeslot=0x2873, }, [0x2874]={ category="so", description="BRAILLE PATTERN DOTS-0x0DEF", direction="l", linebreak="al", unicodeslot=0x2874, }, [0x2875]={ category="so", description="BRAILLE PATTERN DOTS-0x34FF", direction="l", linebreak="al", unicodeslot=0x2875, }, [0x2876]={ category="so", description="BRAILLE PATTERN DOTS-0x5C0F", direction="l", linebreak="al", unicodeslot=0x2876, }, [0x2877]={ category="so", description="BRAILLE PATTERN DOTS-0x1E2AF", direction="l", linebreak="al", unicodeslot=0x2877, }, [0x2878]={ category="so", description="BRAILLE PATTERN DOTS-0x11D7", direction="l", linebreak="al", unicodeslot=0x2878, }, [0x2879]={ category="so", description="BRAILLE PATTERN DOTS-0x38E7", direction="l", linebreak="al", unicodeslot=0x2879, }, [0x287A]={ category="so", description="BRAILLE PATTERN DOTS-0x5FF7", direction="l", linebreak="al", unicodeslot=0x287A, }, [0x287B]={ category="so", description="BRAILLE PATTERN DOTS-0x1E697", direction="l", linebreak="al", unicodeslot=0x287B, }, [0x287C]={ category="so", description="BRAILLE PATTERN DOTS-0x8707", direction="l", linebreak="al", unicodeslot=0x287C, }, [0x287D]={ category="so", description="BRAILLE PATTERN DOTS-0x20DA7", direction="l", linebreak="al", unicodeslot=0x287D, }, [0x287E]={ category="so", description="BRAILLE PATTERN DOTS-0x39447", direction="l", linebreak="al", unicodeslot=0x287E, }, [0x287F]={ category="so", description="BRAILLE PATTERN DOTS-0x12D687", direction="l", linebreak="al", unicodeslot=0x287F, }, [0x2880]={ category="so", description="BRAILLE PATTERN DOTS-0x0008", direction="l", linebreak="al", unicodeslot=0x2880, }, [0x2881]={ category="so", description="BRAILLE PATTERN DOTS-0x0012", direction="l", linebreak="al", unicodeslot=0x2881, }, [0x2882]={ category="so", description="BRAILLE PATTERN DOTS-0x001C", direction="l", linebreak="al", unicodeslot=0x2882, }, [0x2883]={ category="so", description="BRAILLE PATTERN DOTS-0x0080", direction="l", linebreak="al", unicodeslot=0x2883, }, [0x2884]={ category="so", description="BRAILLE PATTERN DOTS-0x0026", direction="l", linebreak="al", unicodeslot=0x2884, }, [0x2885]={ category="so", description="BRAILLE PATTERN DOTS-0x008A", direction="l", linebreak="al", unicodeslot=0x2885, }, [0x2886]={ category="so", description="BRAILLE PATTERN DOTS-0x00EE", direction="l", linebreak="al", unicodeslot=0x2886, }, [0x2887]={ category="so", description="BRAILLE PATTERN DOTS-0x04D6", direction="l", linebreak="al", unicodeslot=0x2887, }, [0x2888]={ category="so", description="BRAILLE PATTERN DOTS-0x0030", direction="l", linebreak="al", unicodeslot=0x2888, }, [0x2889]={ category="so", description="BRAILLE PATTERN DOTS-0x0094", direction="l", linebreak="al", unicodeslot=0x2889, }, [0x288A]={ category="so", description="BRAILLE PATTERN DOTS-0x00F8", direction="l", linebreak="al", unicodeslot=0x288A, }, [0x288B]={ category="so", description="BRAILLE PATTERN DOTS-0x04E0", direction="l", linebreak="al", unicodeslot=0x288B, }, [0x288C]={ category="so", description="BRAILLE PATTERN DOTS-0x015C", direction="l", linebreak="al", unicodeslot=0x288C, }, [0x288D]={ category="so", description="BRAILLE PATTERN DOTS-0x0544", direction="l", linebreak="al", unicodeslot=0x288D, }, [0x288E]={ category="so", description="BRAILLE PATTERN DOTS-0x092C", direction="l", linebreak="al", unicodeslot=0x288E, }, [0x288F]={ category="so", description="BRAILLE PATTERN DOTS-0x303C", direction="l", linebreak="al", unicodeslot=0x288F, }, [0x2890]={ category="so", description="BRAILLE PATTERN DOTS-0x003A", direction="l", linebreak="al", unicodeslot=0x2890, }, [0x2891]={ category="so", description="BRAILLE PATTERN DOTS-0x009E", direction="l", linebreak="al", unicodeslot=0x2891, }, [0x2892]={ category="so", description="BRAILLE PATTERN DOTS-0x0102", direction="l", linebreak="al", unicodeslot=0x2892, }, [0x2893]={ category="so", description="BRAILLE PATTERN DOTS-0x04EA", direction="l", linebreak="al", unicodeslot=0x2893, }, [0x2894]={ category="so", description="BRAILLE PATTERN DOTS-0x0166", direction="l", linebreak="al", unicodeslot=0x2894, }, [0x2895]={ category="so", description="BRAILLE PATTERN DOTS-0x054E", direction="l", linebreak="al", unicodeslot=0x2895, }, [0x2896]={ category="so", description="BRAILLE PATTERN DOTS-0x0936", direction="l", linebreak="al", unicodeslot=0x2896, }, [0x2897]={ category="so", description="BRAILLE PATTERN DOTS-0x3046", direction="l", linebreak="al", unicodeslot=0x2897, }, [0x2898]={ category="so", description="BRAILLE PATTERN DOTS-0x01CA", direction="l", linebreak="al", unicodeslot=0x2898, }, [0x2899]={ category="so", description="BRAILLE PATTERN DOTS-0x05B2", direction="l", linebreak="al", unicodeslot=0x2899, }, [0x289A]={ category="so", description="BRAILLE PATTERN DOTS-0x099A", direction="l", linebreak="al", unicodeslot=0x289A, }, [0x289B]={ category="so", description="BRAILLE PATTERN DOTS-0x30AA", direction="l", linebreak="al", unicodeslot=0x289B, }, [0x289C]={ category="so", description="BRAILLE PATTERN DOTS-0x0D82", direction="l", linebreak="al", unicodeslot=0x289C, }, [0x289D]={ category="so", description="BRAILLE PATTERN DOTS-0x3492", direction="l", linebreak="al", unicodeslot=0x289D, }, [0x289E]={ category="so", description="BRAILLE PATTERN DOTS-0x5BA2", direction="l", linebreak="al", unicodeslot=0x289E, }, [0x289F]={ category="so", description="BRAILLE PATTERN DOTS-0x1E242", direction="l", linebreak="al", unicodeslot=0x289F, }, [0x28A0]={ category="so", description="BRAILLE PATTERN DOTS-0x0044", direction="l", linebreak="al", unicodeslot=0x28A0, }, [0x28A1]={ category="so", description="BRAILLE PATTERN DOTS-0x00A8", direction="l", linebreak="al", unicodeslot=0x28A1, }, [0x28A2]={ category="so", description="BRAILLE PATTERN DOTS-0x010C", direction="l", linebreak="al", unicodeslot=0x28A2, }, [0x28A3]={ category="so", description="BRAILLE PATTERN DOTS-0x04F4", direction="l", linebreak="al", unicodeslot=0x28A3, }, [0x28A4]={ category="so", description="BRAILLE PATTERN DOTS-0x0170", direction="l", linebreak="al", unicodeslot=0x28A4, }, [0x28A5]={ category="so", description="BRAILLE PATTERN DOTS-0x0558", direction="l", linebreak="al", unicodeslot=0x28A5, }, [0x28A6]={ category="so", description="BRAILLE PATTERN DOTS-0x0940", direction="l", linebreak="al", unicodeslot=0x28A6, }, [0x28A7]={ category="so", description="BRAILLE PATTERN DOTS-0x3050", direction="l", linebreak="al", unicodeslot=0x28A7, }, [0x28A8]={ category="so", description="BRAILLE PATTERN DOTS-0x01D4", direction="l", linebreak="al", unicodeslot=0x28A8, }, [0x28A9]={ category="so", description="BRAILLE PATTERN DOTS-0x05BC", direction="l", linebreak="al", unicodeslot=0x28A9, }, [0x28AA]={ category="so", description="BRAILLE PATTERN DOTS-0x09A4", direction="l", linebreak="al", unicodeslot=0x28AA, }, [0x28AB]={ category="so", description="BRAILLE PATTERN DOTS-0x30B4", direction="l", linebreak="al", unicodeslot=0x28AB, }, [0x28AC]={ category="so", description="BRAILLE PATTERN DOTS-0x0D8C", direction="l", linebreak="al", unicodeslot=0x28AC, }, [0x28AD]={ category="so", description="BRAILLE PATTERN DOTS-0x349C", direction="l", linebreak="al", unicodeslot=0x28AD, }, [0x28AE]={ category="so", description="BRAILLE PATTERN DOTS-0x5BAC", direction="l", linebreak="al", unicodeslot=0x28AE, }, [0x28AF]={ category="so", description="BRAILLE PATTERN DOTS-0x1E24C", direction="l", linebreak="al", unicodeslot=0x28AF, }, [0x28B0]={ category="so", description="BRAILLE PATTERN DOTS-0x0238", direction="l", linebreak="al", unicodeslot=0x28B0, }, [0x28B1]={ category="so", description="BRAILLE PATTERN DOTS-0x0620", direction="l", linebreak="al", unicodeslot=0x28B1, }, [0x28B2]={ category="so", description="BRAILLE PATTERN DOTS-0x0A08", direction="l", linebreak="al", unicodeslot=0x28B2, }, [0x28B3]={ category="so", description="BRAILLE PATTERN DOTS-0x3118", direction="l", linebreak="al", unicodeslot=0x28B3, }, [0x28B4]={ category="so", description="BRAILLE PATTERN DOTS-0x0DF0", direction="l", linebreak="al", unicodeslot=0x28B4, }, [0x28B5]={ category="so", description="BRAILLE PATTERN DOTS-0x3500", direction="l", linebreak="al", unicodeslot=0x28B5, }, [0x28B6]={ category="so", description="BRAILLE PATTERN DOTS-0x5C10", direction="l", linebreak="al", unicodeslot=0x28B6, }, [0x28B7]={ category="so", description="BRAILLE PATTERN DOTS-0x1E2B0", direction="l", linebreak="al", unicodeslot=0x28B7, }, [0x28B8]={ category="so", description="BRAILLE PATTERN DOTS-0x11D8", direction="l", linebreak="al", unicodeslot=0x28B8, }, [0x28B9]={ category="so", description="BRAILLE PATTERN DOTS-0x38E8", direction="l", linebreak="al", unicodeslot=0x28B9, }, [0x28BA]={ category="so", description="BRAILLE PATTERN DOTS-0x5FF8", direction="l", linebreak="al", unicodeslot=0x28BA, }, [0x28BB]={ category="so", description="BRAILLE PATTERN DOTS-0x1E698", direction="l", linebreak="al", unicodeslot=0x28BB, }, [0x28BC]={ category="so", description="BRAILLE PATTERN DOTS-0x8708", direction="l", linebreak="al", unicodeslot=0x28BC, }, [0x28BD]={ category="so", description="BRAILLE PATTERN DOTS-0x20DA8", direction="l", linebreak="al", unicodeslot=0x28BD, }, [0x28BE]={ category="so", description="BRAILLE PATTERN DOTS-0x39448", direction="l", linebreak="al", unicodeslot=0x28BE, }, [0x28BF]={ category="so", description="BRAILLE PATTERN DOTS-0x12D688", direction="l", linebreak="al", unicodeslot=0x28BF, }, [0x28C0]={ category="so", description="BRAILLE PATTERN DOTS-0x004E", direction="l", linebreak="al", unicodeslot=0x28C0, }, [0x28C1]={ category="so", description="BRAILLE PATTERN DOTS-0x00B2", direction="l", linebreak="al", unicodeslot=0x28C1, }, [0x28C2]={ category="so", description="BRAILLE PATTERN DOTS-0x0116", direction="l", linebreak="al", unicodeslot=0x28C2, }, [0x28C3]={ category="so", description="BRAILLE PATTERN DOTS-0x04FE", direction="l", linebreak="al", unicodeslot=0x28C3, }, [0x28C4]={ category="so", description="BRAILLE PATTERN DOTS-0x017A", direction="l", linebreak="al", unicodeslot=0x28C4, }, [0x28C5]={ category="so", description="BRAILLE PATTERN DOTS-0x0562", direction="l", linebreak="al", unicodeslot=0x28C5, }, [0x28C6]={ category="so", description="BRAILLE PATTERN DOTS-0x094A", direction="l", linebreak="al", unicodeslot=0x28C6, }, [0x28C7]={ category="so", description="BRAILLE PATTERN DOTS-0x305A", direction="l", linebreak="al", unicodeslot=0x28C7, }, [0x28C8]={ category="so", description="BRAILLE PATTERN DOTS-0x01DE", direction="l", linebreak="al", unicodeslot=0x28C8, }, [0x28C9]={ category="so", description="BRAILLE PATTERN DOTS-0x05C6", direction="l", linebreak="al", unicodeslot=0x28C9, }, [0x28CA]={ category="so", description="BRAILLE PATTERN DOTS-0x09AE", direction="l", linebreak="al", unicodeslot=0x28CA, }, [0x28CB]={ category="so", description="BRAILLE PATTERN DOTS-0x30BE", direction="l", linebreak="al", unicodeslot=0x28CB, }, [0x28CC]={ category="so", description="BRAILLE PATTERN DOTS-0x0D96", direction="l", linebreak="al", unicodeslot=0x28CC, }, [0x28CD]={ category="so", description="BRAILLE PATTERN DOTS-0x34A6", direction="l", linebreak="al", unicodeslot=0x28CD, }, [0x28CE]={ category="so", description="BRAILLE PATTERN DOTS-0x5BB6", direction="l", linebreak="al", unicodeslot=0x28CE, }, [0x28CF]={ category="so", description="BRAILLE PATTERN DOTS-0x1E256", direction="l", linebreak="al", unicodeslot=0x28CF, }, [0x28D0]={ category="so", description="BRAILLE PATTERN DOTS-0x0242", direction="l", linebreak="al", unicodeslot=0x28D0, }, [0x28D1]={ category="so", description="BRAILLE PATTERN DOTS-0x062A", direction="l", linebreak="al", unicodeslot=0x28D1, }, [0x28D2]={ category="so", description="BRAILLE PATTERN DOTS-0x0A12", direction="l", linebreak="al", unicodeslot=0x28D2, }, [0x28D3]={ category="so", description="BRAILLE PATTERN DOTS-0x3122", direction="l", linebreak="al", unicodeslot=0x28D3, }, [0x28D4]={ category="so", description="BRAILLE PATTERN DOTS-0x0DFA", direction="l", linebreak="al", unicodeslot=0x28D4, }, [0x28D5]={ category="so", description="BRAILLE PATTERN DOTS-0x350A", direction="l", linebreak="al", unicodeslot=0x28D5, }, [0x28D6]={ category="so", description="BRAILLE PATTERN DOTS-0x5C1A", direction="l", linebreak="al", unicodeslot=0x28D6, }, [0x28D7]={ category="so", description="BRAILLE PATTERN DOTS-0x1E2BA", direction="l", linebreak="al", unicodeslot=0x28D7, }, [0x28D8]={ category="so", description="BRAILLE PATTERN DOTS-0x11E2", direction="l", linebreak="al", unicodeslot=0x28D8, }, [0x28D9]={ category="so", description="BRAILLE PATTERN DOTS-0x38F2", direction="l", linebreak="al", unicodeslot=0x28D9, }, [0x28DA]={ category="so", description="BRAILLE PATTERN DOTS-0x6002", direction="l", linebreak="al", unicodeslot=0x28DA, }, [0x28DB]={ category="so", description="BRAILLE PATTERN DOTS-0x1E6A2", direction="l", linebreak="al", unicodeslot=0x28DB, }, [0x28DC]={ category="so", description="BRAILLE PATTERN DOTS-0x8712", direction="l", linebreak="al", unicodeslot=0x28DC, }, [0x28DD]={ category="so", description="BRAILLE PATTERN DOTS-0x20DB2", direction="l", linebreak="al", unicodeslot=0x28DD, }, [0x28DE]={ category="so", description="BRAILLE PATTERN DOTS-0x39452", direction="l", linebreak="al", unicodeslot=0x28DE, }, [0x28DF]={ category="so", description="BRAILLE PATTERN DOTS-0x12D692", direction="l", linebreak="al", unicodeslot=0x28DF, }, [0x28E0]={ category="so", description="BRAILLE PATTERN DOTS-0x02A6", direction="l", linebreak="al", unicodeslot=0x28E0, }, [0x28E1]={ category="so", description="BRAILLE PATTERN DOTS-0x068E", direction="l", linebreak="al", unicodeslot=0x28E1, }, [0x28E2]={ category="so", description="BRAILLE PATTERN DOTS-0x0A76", direction="l", linebreak="al", unicodeslot=0x28E2, }, [0x28E3]={ category="so", description="BRAILLE PATTERN DOTS-0x3186", direction="l", linebreak="al", unicodeslot=0x28E3, }, [0x28E4]={ category="so", description="BRAILLE PATTERN DOTS-0x0E5E", direction="l", linebreak="al", unicodeslot=0x28E4, }, [0x28E5]={ category="so", description="BRAILLE PATTERN DOTS-0x356E", direction="l", linebreak="al", unicodeslot=0x28E5, }, [0x28E6]={ category="so", description="BRAILLE PATTERN DOTS-0x5C7E", direction="l", linebreak="al", unicodeslot=0x28E6, }, [0x28E7]={ category="so", description="BRAILLE PATTERN DOTS-0x1E31E", direction="l", linebreak="al", unicodeslot=0x28E7, }, [0x28E8]={ category="so", description="BRAILLE PATTERN DOTS-0x1246", direction="l", linebreak="al", unicodeslot=0x28E8, }, [0x28E9]={ category="so", description="BRAILLE PATTERN DOTS-0x3956", direction="l", linebreak="al", unicodeslot=0x28E9, }, [0x28EA]={ category="so", description="BRAILLE PATTERN DOTS-0x6066", direction="l", linebreak="al", unicodeslot=0x28EA, }, [0x28EB]={ category="so", description="BRAILLE PATTERN DOTS-0x1E706", direction="l", linebreak="al", unicodeslot=0x28EB, }, [0x28EC]={ category="so", description="BRAILLE PATTERN DOTS-0x8776", direction="l", linebreak="al", unicodeslot=0x28EC, }, [0x28ED]={ category="so", description="BRAILLE PATTERN DOTS-0x20E16", direction="l", linebreak="al", unicodeslot=0x28ED, }, [0x28EE]={ category="so", description="BRAILLE PATTERN DOTS-0x394B6", direction="l", linebreak="al", unicodeslot=0x28EE, }, [0x28EF]={ category="so", description="BRAILLE PATTERN DOTS-0x12D6F6", direction="l", linebreak="al", unicodeslot=0x28EF, }, [0x28F0]={ category="so", description="BRAILLE PATTERN DOTS-0x162E", direction="l", linebreak="al", unicodeslot=0x28F0, }, [0x28F1]={ category="so", description="BRAILLE PATTERN DOTS-0x3D3E", direction="l", linebreak="al", unicodeslot=0x28F1, }, [0x28F2]={ category="so", description="BRAILLE PATTERN DOTS-0x644E", direction="l", linebreak="al", unicodeslot=0x28F2, }, [0x28F3]={ category="so", description="BRAILLE PATTERN DOTS-0x1EAEE", direction="l", linebreak="al", unicodeslot=0x28F3, }, [0x28F4]={ category="so", description="BRAILLE PATTERN DOTS-0x8B5E", direction="l", linebreak="al", unicodeslot=0x28F4, }, [0x28F5]={ category="so", description="BRAILLE PATTERN DOTS-0x211FE", direction="l", linebreak="al", unicodeslot=0x28F5, }, [0x28F6]={ category="so", description="BRAILLE PATTERN DOTS-0x3989E", direction="l", linebreak="al", unicodeslot=0x28F6, }, [0x28F7]={ category="so", description="BRAILLE PATTERN DOTS-0x12DADE", direction="l", linebreak="al", unicodeslot=0x28F7, }, [0x28F8]={ category="so", description="BRAILLE PATTERN DOTS-0xB26E", direction="l", linebreak="al", unicodeslot=0x28F8, }, [0x28F9]={ category="so", description="BRAILLE PATTERN DOTS-0x2390E", direction="l", linebreak="al", unicodeslot=0x28F9, }, [0x28FA]={ category="so", description="BRAILLE PATTERN DOTS-0x3BFAE", direction="l", linebreak="al", unicodeslot=0x28FA, }, [0x28FB]={ category="so", description="BRAILLE PATTERN DOTS-0x1301EE", direction="l", linebreak="al", unicodeslot=0x28FB, }, [0x28FC]={ category="so", description="BRAILLE PATTERN DOTS-0x5464E", direction="l", linebreak="al", unicodeslot=0x28FC, }, [0x28FD]={ category="so", description="BRAILLE PATTERN DOTS-0x14888E", direction="l", linebreak="al", unicodeslot=0x28FD, }, [0x28FE]={ category="so", description="BRAILLE PATTERN DOTS-0x23CACE", direction="l", linebreak="al", unicodeslot=0x28FE, }, [0x28FF]={ category="so", description="BRAILLE PATTERN DOTS-0xBC614E", direction="l", linebreak="al", unicodeslot=0x28FF, }, [0x2900]={ category="sm", description="RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2900, }, [0x2901]={ category="sm", description="RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2901, }, [0x2902]={ category="sm", description="LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2902, }, [0x2903]={ category="sm", description="RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2903, }, [0x2904]={ category="sm", description="LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="h", unicodeslot=0x2904, }, [0x2905]={ category="sm", description="RIGHTWARDS TWO-HEADED ARROW FROM BAR", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2905, }, [0x2906]={ category="sm", description="LEFTWARDS DOUBLE ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="Mapsfrom", unicodeslot=0x2906, }, [0x2907]={ category="sm", description="RIGHTWARDS DOUBLE ARROW FROM BAR", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="Mapsto", unicodeslot=0x2907, }, [0x2908]={ category="sm", description="DOWNWARDS ARROW WITH HORIZONTAL STROKE", direction="on", linebreak="al", mathextensible="d", unicodeslot=0x2908, }, [0x2909]={ category="sm", description="UPWARDS ARROW WITH HORIZONTAL STROKE", direction="on", linebreak="al", mathextensible="u", unicodeslot=0x2909, }, [0x290A]={ category="sm", description="UPWARDS TRIPLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="u", mathname="Uuparrow", unicodeslot=0x290A, }, [0x290B]={ category="sm", description="DOWNWARDS TRIPLE ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="d", mathname="Ddownarrow", unicodeslot=0x290B, }, [0x290C]={ category="sm", description="LEFTWARDS DOUBLE DASH ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="l", mathname="dashedleftarrow", unicodeslot=0x290C, }, [0x290D]={ category="sm", description="RIGHTWARDS DOUBLE DASH ARROW", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="dashedrightarrow", unicodeslot=0x290D, }, [0x290E]={ category="sm", description="LEFTWARDS TRIPLE DASH ARROW", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x290E, }, [0x290F]={ category="sm", description="RIGHTWARDS TRIPLE DASH ARROW", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x290F, }, [0x2910]={ category="sm", description="RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2910, }, [0x2911]={ category="sm", description="RIGHTWARDS ARROW WITH DOTTED STEM", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="dottedrightarrow", unicodeslot=0x2911, }, [0x2912]={ category="sm", description="UPWARDS ARROW TO BAR", direction="on", linebreak="al", mathextensible="u", unicodeslot=0x2912, }, [0x2913]={ category="sm", description="DOWNWARDS ARROW TO BAR", direction="on", linebreak="al", mathextensible="d", unicodeslot=0x2913, }, [0x2914]={ category="sm", description="RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2914, }, [0x2915]={ category="sm", description="RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2915, }, [0x2916]={ category="sm", description="RIGHTWARDS TWO-HEADED ARROW WITH TAIL", direction="on", linebreak="al", mathclass="relation", mathextensible="r", mathname="twoheadrightarrowtail", unicodeslot=0x2916, }, [0x2917]={ category="sm", description="RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE", direction="on", linebreak="al", mathclass="relation", mathextensible="r", unicodeslot=0x2917, }, [0x2918]={ category="sm", description="RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2918, }, [0x2919]={ category="sm", description="LEFTWARDS ARROW-TAIL", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2919, }, [0x291A]={ category="sm", description="RIGHTWARDS ARROW-TAIL", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x291A, }, [0x291B]={ category="sm", description="LEFTWARDS DOUBLE ARROW-TAIL", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x291B, }, [0x291C]={ category="sm", description="RIGHTWARDS DOUBLE ARROW-TAIL", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x291C, }, [0x291D]={ category="sm", description="LEFTWARDS ARROW TO BLACK DIAMOND", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x291D, }, [0x291E]={ category="sm", description="RIGHTWARDS ARROW TO BLACK DIAMOND", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x291E, }, [0x291F]={ category="sm", description="LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x291F, }, [0x2920]={ category="sm", description="RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2920, }, [0x2921]={ category="sm", description="NORTH WEST AND SOUTH EAST ARROW", direction="on", linebreak="al", mathclass="relation", mathname="nwsearrow", unicodeslot=0x2921, }, [0x2922]={ category="sm", description="NORTH EAST AND SOUTH WEST ARROW", direction="on", linebreak="al", mathclass="relation", mathname="neswarrow", unicodeslot=0x2922, }, [0x2923]={ category="sm", description="NORTH WEST ARROW WITH HOOK", direction="on", linebreak="al", mathclass="relation", mathname="lhooknwarrow", unicodeslot=0x2923, }, [0x2924]={ category="sm", description="NORTH EAST ARROW WITH HOOK", direction="on", linebreak="al", mathclass="relation", mathname="rhooknearrow", unicodeslot=0x2924, }, [0x2925]={ category="sm", description="SOUTH EAST ARROW WITH HOOK", direction="on", linebreak="al", mathclass="relation", mathname="lhooksearrow", unicodeslot=0x2925, }, [0x2926]={ category="sm", description="SOUTH WEST ARROW WITH HOOK", direction="on", linebreak="al", mathclass="relation", mathname="rhookswarrow", unicodeslot=0x2926, }, [0x2927]={ category="sm", description="NORTH WEST ARROW AND NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x2927, }, [0x2928]={ category="sm", description="NORTH EAST ARROW AND SOUTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x2928, }, [0x2929]={ category="sm", description="SOUTH EAST ARROW AND SOUTH WEST ARROW", direction="on", linebreak="al", unicodeslot=0x2929, }, [0x292A]={ category="sm", description="SOUTH WEST ARROW AND NORTH WEST ARROW", direction="on", linebreak="al", unicodeslot=0x292A, }, [0x292B]={ category="sm", description="RISING DIAGONAL CROSSING FALLING DIAGONAL", direction="on", linebreak="al", unicodeslot=0x292B, }, [0x292C]={ category="sm", description="FALLING DIAGONAL CROSSING RISING DIAGONAL", direction="on", linebreak="al", unicodeslot=0x292C, }, [0x292D]={ category="sm", description="SOUTH EAST ARROW CROSSING NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x292D, }, [0x292E]={ category="sm", description="NORTH EAST ARROW CROSSING SOUTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x292E, }, [0x292F]={ category="sm", description="FALLING DIAGONAL CROSSING NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x292F, }, [0x2930]={ category="sm", description="RISING DIAGONAL CROSSING SOUTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x2930, }, [0x2931]={ category="sm", description="NORTH EAST ARROW CROSSING NORTH WEST ARROW", direction="on", linebreak="al", unicodeslot=0x2931, }, [0x2932]={ category="sm", description="NORTH WEST ARROW CROSSING NORTH EAST ARROW", direction="on", linebreak="al", unicodeslot=0x2932, }, [0x2933]={ category="sm", description="WAVE ARROW POINTING DIRECTLY RIGHT", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2933, }, [0x2934]={ category="sm", description="ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS", direction="on", linebreak="al", mathextensible="m", unicodeslot=0x2934, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2935]={ category="sm", description="ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS", direction="on", linebreak="al", mathextensible="m", unicodeslot=0x2935, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2936]={ category="sm", description="ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS", direction="on", linebreak="al", mathextensible="m", unicodeslot=0x2936, }, [0x2937]={ category="sm", description="ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS", direction="on", linebreak="al", mathextensible="m", unicodeslot=0x2937, }, [0x2938]={ category="sm", description="RIGHT-SIDE ARC CLOCKWISE ARROW", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2938, }, [0x2939]={ category="sm", description="LEFT-SIDE ARC ANTICLOCKWISE ARROW", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2939, }, [0x293A]={ category="sm", description="TOP ARC ANTICLOCKWISE ARROW", direction="on", linebreak="al", unicodeslot=0x293A, }, [0x293B]={ category="sm", description="BOTTOM ARC ANTICLOCKWISE ARROW", direction="on", linebreak="al", unicodeslot=0x293B, }, [0x293C]={ category="sm", description="TOP ARC CLOCKWISE ARROW WITH MINUS", direction="on", linebreak="al", unicodeslot=0x293C, }, [0x293D]={ category="sm", description="TOP ARC ANTICLOCKWISE ARROW WITH PLUS", direction="on", linebreak="al", unicodeslot=0x293D, }, [0x293E]={ category="sm", description="LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x293E, }, [0x293F]={ category="sm", description="LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x293F, }, [0x2940]={ category="sm", description="ANTICLOCKWISE CLOSED CIRCLE ARROW", direction="on", linebreak="al", unicodeslot=0x2940, }, [0x2941]={ category="sm", description="CLOCKWISE CLOSED CIRCLE ARROW", direction="on", linebreak="al", unicodeslot=0x2941, }, [0x2942]={ category="sm", description="RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2942, }, [0x2943]={ category="sm", description="LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2943, }, [0x2944]={ category="sm", description="SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2944, }, [0x2945]={ category="sm", description="RIGHTWARDS ARROW WITH PLUS BELOW", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2945, }, [0x2946]={ category="sm", description="LEFTWARDS ARROW WITH PLUS BELOW", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2946, }, [0x2947]={ category="sm", description="RIGHTWARDS ARROW THROUGH X", direction="on", linebreak="al", unicodeslot=0x2947, }, [0x2948]={ category="sm", description="LEFT RIGHT ARROW THROUGH SMALL CIRCLE", direction="on", linebreak="al", unicodeslot=0x2948, }, [0x2949]={ category="sm", description="UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE", direction="on", linebreak="al", mathextensible="u", unicodeslot=0x2949, }, [0x294A]={ category="sm", description="LEFT BARB UP RIGHT BARB DOWN HARPOON", direction="on", linebreak="al", unicodeslot=0x294A, }, [0x294B]={ category="sm", description="LEFT BARB DOWN RIGHT BARB UP HARPOON", direction="on", linebreak="al", unicodeslot=0x294B, }, [0x294C]={ category="sm", description="UP BARB RIGHT DOWN BARB LEFT HARPOON", direction="on", linebreak="al", unicodeslot=0x294C, }, [0x294D]={ category="sm", description="UP BARB LEFT DOWN BARB RIGHT HARPOON", direction="on", linebreak="al", unicodeslot=0x294D, }, [0x294E]={ category="sm", description="LEFT BARB UP RIGHT BARB UP HARPOON", direction="on", linebreak="al", unicodeslot=0x294E, }, [0x294F]={ category="sm", description="UP BARB RIGHT DOWN BARB RIGHT HARPOON", direction="on", linebreak="al", unicodeslot=0x294F, }, [0x2950]={ category="sm", description="LEFT BARB DOWN RIGHT BARB DOWN HARPOON", direction="on", linebreak="al", unicodeslot=0x2950, }, [0x2951]={ category="sm", description="UP BARB LEFT DOWN BARB LEFT HARPOON", direction="on", linebreak="al", unicodeslot=0x2951, }, [0x2952]={ category="sm", description="LEFTWARDS HARPOON WITH BARB UP TO BAR", direction="on", linebreak="al", unicodeslot=0x2952, }, [0x2953]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB UP TO BAR", direction="on", linebreak="al", unicodeslot=0x2953, }, [0x2954]={ category="sm", description="UPWARDS HARPOON WITH BARB RIGHT TO BAR", direction="on", linebreak="al", unicodeslot=0x2954, }, [0x2955]={ category="sm", description="DOWNWARDS HARPOON WITH BARB RIGHT TO BAR", direction="on", linebreak="al", unicodeslot=0x2955, }, [0x2956]={ category="sm", description="LEFTWARDS HARPOON WITH BARB DOWN TO BAR", direction="on", linebreak="al", unicodeslot=0x2956, }, [0x2957]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB DOWN TO BAR", direction="on", linebreak="al", unicodeslot=0x2957, }, [0x2958]={ category="sm", description="UPWARDS HARPOON WITH BARB LEFT TO BAR", direction="on", linebreak="al", unicodeslot=0x2958, }, [0x2959]={ category="sm", description="DOWNWARDS HARPOON WITH BARB LEFT TO BAR", direction="on", linebreak="al", unicodeslot=0x2959, }, [0x295A]={ category="sm", description="LEFTWARDS HARPOON WITH BARB UP FROM BAR", direction="on", linebreak="al", unicodeslot=0x295A, }, [0x295B]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB UP FROM BAR", direction="on", linebreak="al", unicodeslot=0x295B, }, [0x295C]={ category="sm", description="UPWARDS HARPOON WITH BARB RIGHT FROM BAR", direction="on", linebreak="al", unicodeslot=0x295C, }, [0x295D]={ category="sm", description="DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR", direction="on", linebreak="al", unicodeslot=0x295D, }, [0x295E]={ category="sm", description="LEFTWARDS HARPOON WITH BARB DOWN FROM BAR", direction="on", linebreak="al", unicodeslot=0x295E, }, [0x295F]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR", direction="on", linebreak="al", unicodeslot=0x295F, }, [0x2960]={ category="sm", description="UPWARDS HARPOON WITH BARB LEFT FROM BAR", direction="on", linebreak="al", unicodeslot=0x2960, }, [0x2961]={ category="sm", description="DOWNWARDS HARPOON WITH BARB LEFT FROM BAR", direction="on", linebreak="al", unicodeslot=0x2961, }, [0x2962]={ category="sm", description="LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN", direction="on", linebreak="al", unicodeslot=0x2962, }, [0x2963]={ category="sm", description="UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT", direction="on", linebreak="al", unicodeslot=0x2963, }, [0x2964]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN", direction="on", linebreak="al", unicodeslot=0x2964, }, [0x2965]={ category="sm", description="DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT", direction="on", linebreak="al", unicodeslot=0x2965, }, [0x2966]={ category="sm", description="LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP", direction="on", linebreak="al", unicodeslot=0x2966, }, [0x2967]={ category="sm", description="LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN", direction="on", linebreak="al", unicodeslot=0x2967, }, [0x2968]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP", direction="on", linebreak="al", unicodeslot=0x2968, }, [0x2969]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN", direction="on", linebreak="al", unicodeslot=0x2969, }, [0x296A]={ category="sm", description="LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH", direction="on", linebreak="al", unicodeslot=0x296A, }, [0x296B]={ category="sm", description="LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH", direction="on", linebreak="al", unicodeslot=0x296B, }, [0x296C]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH", direction="on", linebreak="al", unicodeslot=0x296C, }, [0x296D]={ category="sm", description="RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH", direction="on", linebreak="al", unicodeslot=0x296D, }, [0x296E]={ category="sm", description="UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT", direction="on", linebreak="al", unicodeslot=0x296E, }, [0x296F]={ category="sm", description="DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT", direction="on", linebreak="al", unicodeslot=0x296F, }, [0x2970]={ category="sm", description="RIGHT DOUBLE ARROW WITH ROUNDED HEAD", direction="on", linebreak="al", mathextensible="r", unicodeslot=0x2970, }, [0x2971]={ category="sm", description="EQUALS SIGN ABOVE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2971, }, [0x2972]={ category="sm", description="TILDE OPERATOR ABOVE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2972, }, [0x2973]={ category="sm", description="LEFTWARDS ARROW ABOVE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2973, }, [0x2974]={ category="sm", description="RIGHTWARDS ARROW ABOVE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2974, }, [0x2975]={ category="sm", description="RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2975, }, [0x2976]={ category="sm", description="LESS-THAN ABOVE LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2976, }, [0x2977]={ category="sm", description="LEFTWARDS ARROW THROUGH LESS-THAN", direction="on", linebreak="al", unicodeslot=0x2977, }, [0x2978]={ category="sm", description="GREATER-THAN ABOVE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2978, }, [0x2979]={ category="sm", description="SUBSET ABOVE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2979, }, [0x297A]={ category="sm", description="LEFTWARDS ARROW THROUGH SUBSET", direction="on", linebreak="al", unicodeslot=0x297A, }, [0x297B]={ category="sm", description="SUPERSET ABOVE LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x297B, }, [0x297C]={ category="sm", description="LEFT FISH TAIL", direction="on", linebreak="al", unicodeslot=0x297C, }, [0x297D]={ category="sm", description="RIGHT FISH TAIL", direction="on", linebreak="al", unicodeslot=0x297D, }, [0x297E]={ category="sm", description="UP FISH TAIL", direction="on", linebreak="al", unicodeslot=0x297E, }, [0x297F]={ category="sm", description="DOWN FISH TAIL", direction="on", linebreak="al", unicodeslot=0x297F, }, [0x2980]={ category="sm", description="TRIPLE VERTICAL BAR DELIMITER", direction="on", linebreak="al", unicodeslot=0x2980, }, [0x2981]={ category="sm", description="Z NOTATION SPOT", direction="on", linebreak="al", unicodeslot=0x2981, }, [0x2982]={ category="sm", description="Z NOTATION TYPE COLON", direction="on", linebreak="al", unicodeslot=0x2982, }, [0x2983]={ category="ps", description="LEFT WHITE CURLY BRACKET", direction="on", linebreak="op", mirror=0x2984, unicodeslot=0x2983, }, [0x2984]={ category="pe", description="RIGHT WHITE CURLY BRACKET", direction="on", linebreak="cl", mirror=0x2983, unicodeslot=0x2984, }, [0x2985]={ category="ps", cjkwd="na", description="LEFT WHITE PARENTHESIS", direction="on", linebreak="op", mirror=0x2986, unicodeslot=0x2985, }, [0x2986]={ category="pe", cjkwd="na", description="RIGHT WHITE PARENTHESIS", direction="on", linebreak="cl", mirror=0x2985, unicodeslot=0x2986, }, [0x2987]={ category="ps", description="Z NOTATION LEFT IMAGE BRACKET", direction="on", linebreak="op", mirror=0x2988, unicodeslot=0x2987, }, [0x2988]={ category="pe", description="Z NOTATION RIGHT IMAGE BRACKET", direction="on", linebreak="cl", mirror=0x2987, unicodeslot=0x2988, }, [0x2989]={ category="ps", description="Z NOTATION LEFT BINDING BRACKET", direction="on", linebreak="op", mirror=0x298A, unicodeslot=0x2989, }, [0x298A]={ category="pe", description="Z NOTATION RIGHT BINDING BRACKET", direction="on", linebreak="cl", mirror=0x2989, unicodeslot=0x298A, }, [0x298B]={ category="ps", description="LEFT SQUARE BRACKET WITH UNDERBAR", direction="on", linebreak="op", mirror=0x298C, unicodeslot=0x298B, }, [0x298C]={ category="pe", description="RIGHT SQUARE BRACKET WITH UNDERBAR", direction="on", linebreak="cl", mirror=0x298B, unicodeslot=0x298C, }, [0x298D]={ category="ps", description="LEFT SQUARE BRACKET WITH TICK IN TOP CORNER", direction="on", linebreak="op", mirror=0x2990, unicodeslot=0x298D, }, [0x298E]={ category="pe", description="RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER", direction="on", linebreak="cl", mirror=0x298F, unicodeslot=0x298E, }, [0x298F]={ category="ps", description="LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER", direction="on", linebreak="op", mirror=0x298E, unicodeslot=0x298F, }, [0x2990]={ category="pe", description="RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER", direction="on", linebreak="cl", mirror=0x298D, unicodeslot=0x2990, }, [0x2991]={ category="ps", description="LEFT ANGLE BRACKET WITH DOT", direction="on", linebreak="op", mirror=0x2992, unicodeslot=0x2991, }, [0x2992]={ category="pe", description="RIGHT ANGLE BRACKET WITH DOT", direction="on", linebreak="cl", mirror=0x2991, unicodeslot=0x2992, }, [0x2993]={ category="ps", description="LEFT ARC LESS-THAN BRACKET", direction="on", linebreak="op", mirror=0x2994, unicodeslot=0x2993, }, [0x2994]={ category="pe", description="RIGHT ARC GREATER-THAN BRACKET", direction="on", linebreak="cl", mirror=0x2993, unicodeslot=0x2994, }, [0x2995]={ category="ps", description="DOUBLE LEFT ARC GREATER-THAN BRACKET", direction="on", linebreak="op", mirror=0x2996, unicodeslot=0x2995, }, [0x2996]={ category="pe", description="DOUBLE RIGHT ARC LESS-THAN BRACKET", direction="on", linebreak="cl", mirror=0x2995, unicodeslot=0x2996, }, [0x2997]={ category="ps", description="LEFT BLACK TORTOISE SHELL BRACKET", direction="on", linebreak="op", mirror=0x2998, unicodeslot=0x2997, }, [0x2998]={ category="pe", description="RIGHT BLACK TORTOISE SHELL BRACKET", direction="on", linebreak="cl", mirror=0x2997, unicodeslot=0x2998, }, [0x2999]={ category="sm", description="DOTTED FENCE", direction="on", linebreak="al", unicodeslot=0x2999, }, [0x299A]={ category="sm", description="VERTICAL ZIGZAG LINE", direction="on", linebreak="al", unicodeslot=0x299A, }, [0x299B]={ category="sm", description="MEASURED ANGLE OPENING LEFT", direction="on", linebreak="al", unicodeslot=0x299B, }, [0x299C]={ category="sm", description="RIGHT ANGLE VARIANT WITH SQUARE", direction="on", linebreak="al", unicodeslot=0x299C, }, [0x299D]={ category="sm", description="MEASURED RIGHT ANGLE WITH DOT", direction="on", linebreak="al", unicodeslot=0x299D, }, [0x299E]={ category="sm", description="ANGLE WITH S INSIDE", direction="on", linebreak="al", unicodeslot=0x299E, }, [0x299F]={ category="sm", description="ACUTE ANGLE", direction="on", linebreak="al", unicodeslot=0x299F, }, [0x29A0]={ category="sm", description="SPHERICAL ANGLE OPENING LEFT", direction="on", linebreak="al", unicodeslot=0x29A0, }, [0x29A1]={ category="sm", description="SPHERICAL ANGLE OPENING UP", direction="on", linebreak="al", unicodeslot=0x29A1, }, [0x29A2]={ category="sm", description="TURNED ANGLE", direction="on", linebreak="al", unicodeslot=0x29A2, }, [0x29A3]={ category="sm", description="REVERSED ANGLE", direction="on", linebreak="al", unicodeslot=0x29A3, }, [0x29A4]={ category="sm", description="ANGLE WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x29A4, }, [0x29A5]={ category="sm", description="REVERSED ANGLE WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x29A5, }, [0x29A6]={ category="sm", description="OBLIQUE ANGLE OPENING UP", direction="on", linebreak="al", unicodeslot=0x29A6, }, [0x29A7]={ category="sm", description="OBLIQUE ANGLE OPENING DOWN", direction="on", linebreak="al", unicodeslot=0x29A7, }, [0x29A8]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT", direction="on", linebreak="al", unicodeslot=0x29A8, }, [0x29A9]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT", direction="on", linebreak="al", unicodeslot=0x29A9, }, [0x29AA]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT", direction="on", linebreak="al", unicodeslot=0x29AA, }, [0x29AB]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT", direction="on", linebreak="al", unicodeslot=0x29AB, }, [0x29AC]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP", direction="on", linebreak="al", unicodeslot=0x29AC, }, [0x29AD]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP", direction="on", linebreak="al", unicodeslot=0x29AD, }, [0x29AE]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN", direction="on", linebreak="al", unicodeslot=0x29AE, }, [0x29AF]={ category="sm", description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN", direction="on", linebreak="al", unicodeslot=0x29AF, }, [0x29B0]={ category="sm", description="REVERSED EMPTY SET", direction="on", linebreak="al", unicodeslot=0x29B0, }, [0x29B1]={ category="sm", description="EMPTY SET WITH OVERBAR", direction="on", linebreak="al", unicodeslot=0x29B1, }, [0x29B2]={ category="sm", description="EMPTY SET WITH SMALL CIRCLE ABOVE", direction="on", linebreak="al", unicodeslot=0x29B2, }, [0x29B3]={ category="sm", description="EMPTY SET WITH RIGHT ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x29B3, }, [0x29B4]={ category="sm", description="EMPTY SET WITH LEFT ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x29B4, }, [0x29B5]={ category="sm", description="CIRCLE WITH HORIZONTAL BAR", direction="on", linebreak="al", unicodeslot=0x29B5, }, [0x29B6]={ category="sm", description="CIRCLED VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x29B6, }, [0x29B7]={ category="sm", description="CIRCLED PARALLEL", direction="on", linebreak="al", unicodeslot=0x29B7, }, [0x29B8]={ category="sm", description="CIRCLED REVERSE SOLIDUS", direction="on", linebreak="al", mirror=0x2298, unicodeslot=0x29B8, }, [0x29B9]={ category="sm", description="CIRCLED PERPENDICULAR", direction="on", linebreak="al", unicodeslot=0x29B9, }, [0x29BA]={ category="sm", description="CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x29BA, }, [0x29BB]={ category="sm", description="CIRCLE WITH SUPERIMPOSED X", direction="on", linebreak="al", unicodeslot=0x29BB, }, [0x29BC]={ category="sm", description="CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN", direction="on", linebreak="al", unicodeslot=0x29BC, }, [0x29BD]={ category="sm", description="UP ARROW THROUGH CIRCLE", direction="on", linebreak="al", unicodeslot=0x29BD, }, [0x29BE]={ category="sm", description="CIRCLED WHITE BULLET", direction="on", linebreak="al", unicodeslot=0x29BE, }, [0x29BF]={ category="sm", description="CIRCLED BULLET", direction="on", linebreak="al", unicodeslot=0x29BF, }, [0x29C0]={ category="sm", description="CIRCLED LESS-THAN", direction="on", linebreak="al", mirror=0x29C1, unicodeslot=0x29C0, }, [0x29C1]={ category="sm", description="CIRCLED GREATER-THAN", direction="on", linebreak="al", mirror=0x29C0, unicodeslot=0x29C1, }, [0x29C2]={ category="sm", description="CIRCLE WITH SMALL CIRCLE TO THE RIGHT", direction="on", linebreak="al", unicodeslot=0x29C2, }, [0x29C3]={ category="sm", description="CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT", direction="on", linebreak="al", unicodeslot=0x29C3, }, [0x29C4]={ category="sm", description="SQUARED RISING DIAGONAL SLASH", direction="on", linebreak="al", mirror=0x29C5, unicodeslot=0x29C4, }, [0x29C5]={ category="sm", description="SQUARED FALLING DIAGONAL SLASH", direction="on", linebreak="al", mirror=0x29C4, unicodeslot=0x29C5, }, [0x29C6]={ category="sm", description="SQUARED ASTERISK", direction="on", linebreak="al", unicodeslot=0x29C6, }, [0x29C7]={ category="sm", description="SQUARED SMALL CIRCLE", direction="on", linebreak="al", unicodeslot=0x29C7, }, [0x29C8]={ category="sm", description="SQUARED SQUARE", direction="on", linebreak="al", unicodeslot=0x29C8, }, [0x29C9]={ category="sm", description="TWO JOINED SQUARES", direction="on", linebreak="al", unicodeslot=0x29C9, }, [0x29CA]={ category="sm", description="TRIANGLE WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x29CA, }, [0x29CB]={ category="sm", description="TRIANGLE WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x29CB, }, [0x29CC]={ category="sm", description="S IN TRIANGLE", direction="on", linebreak="al", unicodeslot=0x29CC, }, [0x29CD]={ category="sm", description="TRIANGLE WITH SERIFS AT BOTTOM", direction="on", linebreak="al", unicodeslot=0x29CD, }, [0x29CE]={ category="sm", description="RIGHT TRIANGLE ABOVE LEFT TRIANGLE", direction="on", linebreak="al", unicodeslot=0x29CE, }, [0x29CF]={ category="sm", description="LEFT TRIANGLE BESIDE VERTICAL BAR", direction="on", linebreak="al", mirror=0x29D0, unicodeslot=0x29CF, }, [0x29D0]={ category="sm", description="VERTICAL BAR BESIDE RIGHT TRIANGLE", direction="on", linebreak="al", mirror=0x29CF, unicodeslot=0x29D0, }, [0x29D1]={ category="sm", description="BOWTIE WITH LEFT HALF BLACK", direction="on", linebreak="al", mirror=0x29D2, unicodeslot=0x29D1, }, [0x29D2]={ category="sm", description="BOWTIE WITH RIGHT HALF BLACK", direction="on", linebreak="al", mirror=0x29D1, unicodeslot=0x29D2, }, [0x29D3]={ category="sm", description="BLACK BOWTIE", direction="on", linebreak="al", unicodeslot=0x29D3, }, [0x29D4]={ category="sm", description="TIMES WITH LEFT HALF BLACK", direction="on", linebreak="al", mirror=0x29D5, unicodeslot=0x29D4, }, [0x29D5]={ category="sm", description="TIMES WITH RIGHT HALF BLACK", direction="on", linebreak="al", mirror=0x29D4, unicodeslot=0x29D5, }, [0x29D6]={ category="sm", description="WHITE HOURGLASS", direction="on", linebreak="al", unicodeslot=0x29D6, }, [0x29D7]={ category="sm", description="BLACK HOURGLASS", direction="on", linebreak="al", unicodeslot=0x29D7, }, [0x29D8]={ category="ps", description="LEFT WIGGLY FENCE", direction="on", linebreak="op", mirror=0x29D9, unicodeslot=0x29D8, }, [0x29D9]={ category="pe", description="RIGHT WIGGLY FENCE", direction="on", linebreak="cl", mirror=0x29D8, unicodeslot=0x29D9, }, [0x29DA]={ category="ps", description="LEFT DOUBLE WIGGLY FENCE", direction="on", linebreak="op", mirror=0x29DB, unicodeslot=0x29DA, }, [0x29DB]={ category="pe", description="RIGHT DOUBLE WIGGLY FENCE", direction="on", linebreak="cl", mirror=0x29DA, unicodeslot=0x29DB, }, [0x29DC]={ category="sm", description="INCOMPLETE INFINITY", direction="on", linebreak="al", unicodeslot=0x29DC, }, [0x29DD]={ category="sm", description="TIE OVER INFINITY", direction="on", linebreak="al", unicodeslot=0x29DD, }, [0x29DE]={ category="sm", description="INFINITY NEGATED WITH VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x29DE, }, [0x29DF]={ category="sm", description="DOUBLE-ENDED MULTIMAP", direction="on", linebreak="al", unicodeslot=0x29DF, }, [0x29E0]={ category="sm", description="SQUARE WITH CONTOURED OUTLINE", direction="on", linebreak="al", unicodeslot=0x29E0, }, [0x29E1]={ category="sm", description="INCREASES AS", direction="on", linebreak="al", unicodeslot=0x29E1, }, [0x29E2]={ category="sm", description="SHUFFLE PRODUCT", direction="on", linebreak="al", unicodeslot=0x29E2, }, [0x29E3]={ category="sm", description="EQUALS SIGN AND SLANTED PARALLEL", direction="on", linebreak="al", unicodeslot=0x29E3, }, [0x29E4]={ category="sm", description="EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE", direction="on", linebreak="al", unicodeslot=0x29E4, }, [0x29E5]={ category="sm", description="IDENTICAL TO AND SLANTED PARALLEL", direction="on", linebreak="al", unicodeslot=0x29E5, }, [0x29E6]={ category="sm", description="GLEICH STARK", direction="on", linebreak="al", unicodeslot=0x29E6, }, [0x29E7]={ category="sm", description="THERMODYNAMIC", direction="on", linebreak="al", unicodeslot=0x29E7, }, [0x29E8]={ category="sm", description="DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x29E8, }, [0x29E9]={ category="sm", description="DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x29E9, }, [0x29EA]={ category="sm", description="BLACK DIAMOND WITH DOWN ARROW", direction="on", linebreak="al", mathextensible="d", unicodeslot=0x29EA, }, [0x29EB]={ category="sm", description="BLACK LOZENGE", direction="on", linebreak="al", unicodeslot=0x29EB, }, [0x29EC]={ category="sm", description="WHITE CIRCLE WITH DOWN ARROW", direction="on", linebreak="al", mathextensible="d", unicodeslot=0x29EC, }, [0x29ED]={ category="sm", description="BLACK CIRCLE WITH DOWN ARROW", direction="on", linebreak="al", mathextensible="d", unicodeslot=0x29ED, }, [0x29EE]={ category="sm", description="ERROR-BARRED WHITE SQUARE", direction="on", linebreak="al", unicodeslot=0x29EE, }, [0x29EF]={ category="sm", description="ERROR-BARRED BLACK SQUARE", direction="on", linebreak="al", unicodeslot=0x29EF, }, [0x29F0]={ category="sm", description="ERROR-BARRED WHITE DIAMOND", direction="on", linebreak="al", unicodeslot=0x29F0, }, [0x29F1]={ category="sm", description="ERROR-BARRED BLACK DIAMOND", direction="on", linebreak="al", unicodeslot=0x29F1, }, [0x29F2]={ category="sm", description="ERROR-BARRED WHITE CIRCLE", direction="on", linebreak="al", unicodeslot=0x29F2, }, [0x29F3]={ category="sm", description="ERROR-BARRED BLACK CIRCLE", direction="on", linebreak="al", unicodeslot=0x29F3, }, [0x29F4]={ category="sm", description="RULE-DELAYED", direction="on", linebreak="al", unicodeslot=0x29F4, }, [0x29F5]={ category="sm", description="REVERSE SOLIDUS OPERATOR", direction="on", linebreak="al", mirror=0x2215, unicodeslot=0x29F5, }, [0x29F6]={ category="sm", description="SOLIDUS WITH OVERBAR", direction="on", linebreak="al", unicodeslot=0x29F6, }, [0x29F7]={ category="sm", description="REVERSE SOLIDUS WITH HORIZONTAL STROKE", direction="on", linebreak="al", unicodeslot=0x29F7, }, [0x29F8]={ category="sm", description="BIG SOLIDUS", direction="on", linebreak="al", mirror=0x29F9, unicodeslot=0x29F8, }, [0x29F9]={ category="sm", description="BIG REVERSE SOLIDUS", direction="on", linebreak="al", mirror=0x29F8, unicodeslot=0x29F9, }, [0x29FA]={ category="sm", description="DOUBLE PLUS", direction="on", linebreak="al", unicodeslot=0x29FA, }, [0x29FB]={ category="sm", description="TRIPLE PLUS", direction="on", linebreak="al", unicodeslot=0x29FB, }, [0x29FC]={ category="ps", description="LEFT-POINTING CURVED ANGLE BRACKET", direction="on", linebreak="op", mirror=0x29FD, unicodeslot=0x29FC, }, [0x29FD]={ category="pe", description="RIGHT-POINTING CURVED ANGLE BRACKET", direction="on", linebreak="cl", mirror=0x29FC, unicodeslot=0x29FD, }, [0x29FE]={ category="sm", description="TINY", direction="on", linebreak="al", unicodeslot=0x29FE, }, [0x29FF]={ category="sm", description="MINY", direction="on", linebreak="al", unicodeslot=0x29FF, }, [0x2A00]={ category="sm", description="N-ARY CIRCLED DOT OPERATOR", direction="on", linebreak="al", mathclass="limop", mathname="bigodot", unicodeslot=0x2A00, }, [0x2A01]={ category="sm", description="N-ARY CIRCLED PLUS OPERATOR", direction="on", linebreak="al", mathclass="limop", mathname="bigoplus", unicodeslot=0x2A01, }, [0x2A02]={ category="sm", description="N-ARY CIRCLED TIMES OPERATOR", direction="on", linebreak="al", mathclass="limop", mathname="bigotimes", unicodeslot=0x2A02, }, [0x2A03]={ category="sm", description="N-ARY UNION OPERATOR WITH DOT", direction="on", linebreak="al", mathclass="limop", mathname="bigudot", unicodeslot=0x2A03, }, [0x2A04]={ category="sm", description="N-ARY UNION OPERATOR WITH PLUS", direction="on", linebreak="al", mathclass="limop", mathname="biguplus", unicodeslot=0x2A04, }, [0x2A05]={ category="sm", description="N-ARY SQUARE INTERSECTION OPERATOR", direction="on", linebreak="al", mathclass="limop", mathname="bigsqcap", unicodeslot=0x2A05, }, [0x2A06]={ category="sm", description="N-ARY SQUARE UNION OPERATOR", direction="on", linebreak="al", mathclass="limop", mathname="bigsqcup", unicodeslot=0x2A06, }, [0x2A07]={ category="sm", description="TWO LOGICAL AND OPERATOR", direction="on", linebreak="al", unicodeslot=0x2A07, }, [0x2A08]={ category="sm", description="TWO LOGICAL OR OPERATOR", direction="on", linebreak="al", unicodeslot=0x2A08, }, [0x2A09]={ category="sm", description="N-ARY TIMES OPERATOR", direction="on", linebreak="al", mathclass="limop", mathname="bigtimes", unicodeslot=0x2A09, }, [0x2A0A]={ category="sm", description="MODULO TWO SUM", direction="on", linebreak="al", unicodeslot=0x2A0A, }, [0x2A0B]={ category="sm", description="SUMMATION WITH INTEGRAL", direction="on", linebreak="al", unicodeslot=0x2A0B, }, [0x2A0C]={ category="sm", description="QUADRUPLE INTEGRAL OPERATOR", direction="on", linebreak="al", specials={ "compat", 0x222B, 0x222B, 0x222B, 0x222B }, unicodeslot=0x2A0C, }, [0x2A0D]={ category="sm", description="FINITE PART INTEGRAL", direction="on", linebreak="al", unicodeslot=0x2A0D, }, [0x2A0E]={ category="sm", description="INTEGRAL WITH DOUBLE STROKE", direction="on", linebreak="al", unicodeslot=0x2A0E, }, [0x2A0F]={ category="sm", description="INTEGRAL AVERAGE WITH SLASH", direction="on", linebreak="al", unicodeslot=0x2A0F, }, [0x2A10]={ category="sm", description="CIRCULATION FUNCTION", direction="on", linebreak="al", unicodeslot=0x2A10, }, [0x2A11]={ category="sm", description="ANTICLOCKWISE INTEGRATION", direction="on", linebreak="al", unicodeslot=0x2A11, }, [0x2A12]={ category="sm", description="LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE", direction="on", linebreak="al", unicodeslot=0x2A12, }, [0x2A13]={ category="sm", description="LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE", direction="on", linebreak="al", unicodeslot=0x2A13, }, [0x2A14]={ category="sm", description="LINE INTEGRATION NOT INCLUDING THE POLE", direction="on", linebreak="al", unicodeslot=0x2A14, }, [0x2A15]={ category="sm", description="INTEGRAL AROUND A POINT OPERATOR", direction="on", linebreak="al", unicodeslot=0x2A15, }, [0x2A16]={ category="sm", description="QUATERNION INTEGRAL OPERATOR", direction="on", linebreak="al", unicodeslot=0x2A16, }, [0x2A17]={ category="sm", description="INTEGRAL WITH LEFTWARDS ARROW WITH HOOK", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2A17, }, [0x2A18]={ category="sm", description="INTEGRAL WITH TIMES SIGN", direction="on", linebreak="al", unicodeslot=0x2A18, }, [0x2A19]={ category="sm", description="INTEGRAL WITH INTERSECTION", direction="on", linebreak="al", unicodeslot=0x2A19, }, [0x2A1A]={ category="sm", description="INTEGRAL WITH UNION", direction="on", linebreak="al", unicodeslot=0x2A1A, }, [0x2A1B]={ category="sm", description="INTEGRAL WITH OVERBAR", direction="on", linebreak="al", unicodeslot=0x2A1B, }, [0x2A1C]={ category="sm", description="INTEGRAL WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2A1C, }, [0x2A1D]={ category="sm", description="JOIN", direction="on", linebreak="al", unicodeslot=0x2A1D, }, [0x2A1E]={ category="sm", description="LARGE LEFT TRIANGLE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2A1E, }, [0x2A1F]={ category="sm", description="Z NOTATION SCHEMA COMPOSITION", direction="on", linebreak="al", unicodeslot=0x2A1F, }, [0x2A20]={ category="sm", description="Z NOTATION SCHEMA PIPING", direction="on", linebreak="al", unicodeslot=0x2A20, }, [0x2A21]={ category="sm", description="Z NOTATION SCHEMA PROJECTION", direction="on", linebreak="al", unicodeslot=0x2A21, }, [0x2A22]={ category="sm", description="PLUS SIGN WITH SMALL CIRCLE ABOVE", direction="on", linebreak="al", unicodeslot=0x2A22, }, [0x2A23]={ category="sm", description="PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A23, }, [0x2A24]={ category="sm", description="PLUS SIGN WITH TILDE ABOVE", direction="on", linebreak="al", unicodeslot=0x2A24, }, [0x2A25]={ category="sm", description="PLUS SIGN WITH DOT BELOW", direction="on", linebreak="al", unicodeslot=0x2A25, }, [0x2A26]={ category="sm", description="PLUS SIGN WITH TILDE BELOW", direction="on", linebreak="al", unicodeslot=0x2A26, }, [0x2A27]={ category="sm", description="PLUS SIGN WITH SUBSCRIPT TWO", direction="on", linebreak="al", unicodeslot=0x2A27, }, [0x2A28]={ category="sm", description="PLUS SIGN WITH BLACK TRIANGLE", direction="on", linebreak="al", unicodeslot=0x2A28, }, [0x2A29]={ category="sm", description="MINUS SIGN WITH COMMA ABOVE", direction="on", linebreak="al", unicodeslot=0x2A29, }, [0x2A2A]={ category="sm", description="MINUS SIGN WITH DOT BELOW", direction="on", linebreak="al", unicodeslot=0x2A2A, }, [0x2A2B]={ category="sm", description="MINUS SIGN WITH FALLING DOTS", direction="on", linebreak="al", mirror=0x2A2C, unicodeslot=0x2A2B, }, [0x2A2C]={ category="sm", description="MINUS SIGN WITH RISING DOTS", direction="on", linebreak="al", mirror=0x2A2B, unicodeslot=0x2A2C, }, [0x2A2D]={ category="sm", description="PLUS SIGN IN LEFT HALF CIRCLE", direction="on", linebreak="al", mirror=0x2A2E, unicodeslot=0x2A2D, }, [0x2A2E]={ category="sm", description="PLUS SIGN IN RIGHT HALF CIRCLE", direction="on", linebreak="al", mirror=0x2A2D, unicodeslot=0x2A2E, }, [0x2A2F]={ category="sm", description="VECTOR OR CROSS PRODUCT", direction="on", linebreak="al", unicodeslot=0x2A2F, }, [0x2A30]={ category="sm", description="MULTIPLICATION SIGN WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A30, }, [0x2A31]={ category="sm", description="MULTIPLICATION SIGN WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2A31, }, [0x2A32]={ category="sm", description="SEMIDIRECT PRODUCT WITH BOTTOM CLOSED", direction="on", linebreak="al", unicodeslot=0x2A32, }, [0x2A33]={ category="sm", description="SMASH PRODUCT", direction="on", linebreak="al", unicodeslot=0x2A33, }, [0x2A34]={ category="sm", description="MULTIPLICATION SIGN IN LEFT HALF CIRCLE", direction="on", linebreak="al", mirror=0x2A35, unicodeslot=0x2A34, }, [0x2A35]={ category="sm", description="MULTIPLICATION SIGN IN RIGHT HALF CIRCLE", direction="on", linebreak="al", mirror=0x2A34, unicodeslot=0x2A35, }, [0x2A36]={ category="sm", description="CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT", direction="on", linebreak="al", unicodeslot=0x2A36, }, [0x2A37]={ category="sm", description="MULTIPLICATION SIGN IN DOUBLE CIRCLE", direction="on", linebreak="al", unicodeslot=0x2A37, }, [0x2A38]={ category="sm", description="CIRCLED DIVISION SIGN", direction="on", linebreak="al", unicodeslot=0x2A38, }, [0x2A39]={ category="sm", description="PLUS SIGN IN TRIANGLE", direction="on", linebreak="al", unicodeslot=0x2A39, }, [0x2A3A]={ category="sm", description="MINUS SIGN IN TRIANGLE", direction="on", linebreak="al", unicodeslot=0x2A3A, }, [0x2A3B]={ category="sm", description="MULTIPLICATION SIGN IN TRIANGLE", direction="on", linebreak="al", unicodeslot=0x2A3B, }, [0x2A3C]={ category="sm", description="INTERIOR PRODUCT", direction="on", linebreak="al", mirror=0x2A3D, unicodeslot=0x2A3C, variants={ [0xFE00]="tall variant with narrow foot", }, }, [0x2A3D]={ category="sm", description="RIGHTHAND INTERIOR PRODUCT", direction="on", linebreak="al", mirror=0x2A3C, unicodeslot=0x2A3D, variants={ [0xFE00]="tall variant with narrow foot", }, }, [0x2A3E]={ category="sm", description="Z NOTATION RELATIONAL COMPOSITION", direction="on", linebreak="al", unicodeslot=0x2A3E, }, [0x2A3F]={ category="sm", description="AMALGAMATION OR COPRODUCT", direction="on", linebreak="al", mathclass="binary", mathname="amalg", unicodeslot=0x2A3F, }, [0x2A40]={ category="sm", description="INTERSECTION WITH DOT", direction="on", linebreak="al", unicodeslot=0x2A40, }, [0x2A41]={ category="sm", description="UNION WITH MINUS SIGN", direction="on", linebreak="al", unicodeslot=0x2A41, }, [0x2A42]={ category="sm", description="UNION WITH OVERBAR", direction="on", linebreak="al", unicodeslot=0x2A42, }, [0x2A43]={ category="sm", description="INTERSECTION WITH OVERBAR", direction="on", linebreak="al", unicodeslot=0x2A43, }, [0x2A44]={ category="sm", description="INTERSECTION WITH LOGICAL AND", direction="on", linebreak="al", unicodeslot=0x2A44, }, [0x2A45]={ category="sm", description="UNION WITH LOGICAL OR", direction="on", linebreak="al", unicodeslot=0x2A45, }, [0x2A46]={ category="sm", description="UNION ABOVE INTERSECTION", direction="on", linebreak="al", unicodeslot=0x2A46, }, [0x2A47]={ category="sm", description="INTERSECTION ABOVE UNION", direction="on", linebreak="al", unicodeslot=0x2A47, }, [0x2A48]={ category="sm", description="UNION ABOVE BAR ABOVE INTERSECTION", direction="on", linebreak="al", unicodeslot=0x2A48, }, [0x2A49]={ category="sm", description="INTERSECTION ABOVE BAR ABOVE UNION", direction="on", linebreak="al", unicodeslot=0x2A49, }, [0x2A4A]={ category="sm", description="UNION BESIDE AND JOINED WITH UNION", direction="on", linebreak="al", unicodeslot=0x2A4A, }, [0x2A4B]={ category="sm", description="INTERSECTION BESIDE AND JOINED WITH INTERSECTION", direction="on", linebreak="al", unicodeslot=0x2A4B, }, [0x2A4C]={ category="sm", description="CLOSED UNION WITH SERIFS", direction="on", linebreak="al", unicodeslot=0x2A4C, }, [0x2A4D]={ category="sm", description="CLOSED INTERSECTION WITH SERIFS", direction="on", linebreak="al", unicodeslot=0x2A4D, }, [0x2A4E]={ category="sm", description="DOUBLE SQUARE INTERSECTION", direction="on", linebreak="al", unicodeslot=0x2A4E, }, [0x2A4F]={ category="sm", description="DOUBLE SQUARE UNION", direction="on", linebreak="al", unicodeslot=0x2A4F, }, [0x2A50]={ category="sm", description="CLOSED UNION WITH SERIFS AND SMASH PRODUCT", direction="on", linebreak="al", unicodeslot=0x2A50, }, [0x2A51]={ category="sm", description="LOGICAL AND WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A51, }, [0x2A52]={ category="sm", description="LOGICAL OR WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A52, }, [0x2A53]={ category="sm", description="DOUBLE LOGICAL AND", direction="on", linebreak="al", unicodeslot=0x2A53, }, [0x2A54]={ category="sm", description="DOUBLE LOGICAL OR", direction="on", linebreak="al", unicodeslot=0x2A54, }, [0x2A55]={ category="sm", description="TWO INTERSECTING LOGICAL AND", direction="on", linebreak="al", unicodeslot=0x2A55, }, [0x2A56]={ category="sm", description="TWO INTERSECTING LOGICAL OR", direction="on", linebreak="al", unicodeslot=0x2A56, }, [0x2A57]={ category="sm", description="SLOPING LARGE OR", direction="on", linebreak="al", unicodeslot=0x2A57, }, [0x2A58]={ category="sm", description="SLOPING LARGE AND", direction="on", linebreak="al", unicodeslot=0x2A58, }, [0x2A59]={ category="sm", description="LOGICAL OR OVERLAPPING LOGICAL AND", direction="on", linebreak="al", unicodeslot=0x2A59, }, [0x2A5A]={ category="sm", description="LOGICAL AND WITH MIDDLE STEM", direction="on", linebreak="al", unicodeslot=0x2A5A, }, [0x2A5B]={ category="sm", description="LOGICAL OR WITH MIDDLE STEM", direction="on", linebreak="al", unicodeslot=0x2A5B, }, [0x2A5C]={ category="sm", description="LOGICAL AND WITH HORIZONTAL DASH", direction="on", linebreak="al", unicodeslot=0x2A5C, }, [0x2A5D]={ category="sm", description="LOGICAL OR WITH HORIZONTAL DASH", direction="on", linebreak="al", unicodeslot=0x2A5D, }, [0x2A5E]={ category="sm", description="LOGICAL AND WITH DOUBLE OVERBAR", direction="on", linebreak="al", unicodeslot=0x2A5E, }, [0x2A5F]={ category="sm", description="LOGICAL AND WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2A5F, }, [0x2A60]={ category="sm", description="LOGICAL AND WITH DOUBLE UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2A60, }, [0x2A61]={ category="sm", description="SMALL VEE WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2A61, }, [0x2A62]={ category="sm", description="LOGICAL OR WITH DOUBLE OVERBAR", direction="on", linebreak="al", unicodeslot=0x2A62, }, [0x2A63]={ category="sm", description="LOGICAL OR WITH DOUBLE UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2A63, }, [0x2A64]={ category="sm", description="Z NOTATION DOMAIN ANTIRESTRICTION", direction="on", linebreak="al", mirror=0x2A65, unicodeslot=0x2A64, }, [0x2A65]={ category="sm", description="Z NOTATION RANGE ANTIRESTRICTION", direction="on", linebreak="al", mirror=0x2A64, unicodeslot=0x2A65, }, [0x2A66]={ category="sm", description="EQUALS SIGN WITH DOT BELOW", direction="on", linebreak="al", unicodeslot=0x2A66, }, [0x2A67]={ category="sm", description="IDENTICAL WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A67, }, [0x2A68]={ category="sm", description="TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", unicodeslot=0x2A68, }, [0x2A69]={ category="sm", description="TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE", direction="on", linebreak="al", unicodeslot=0x2A69, }, [0x2A6A]={ category="sm", description="TILDE OPERATOR WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A6A, }, [0x2A6B]={ category="sm", description="TILDE OPERATOR WITH RISING DOTS", direction="on", linebreak="al", unicodeslot=0x2A6B, }, [0x2A6C]={ category="sm", description="SIMILAR MINUS SIMILAR", direction="on", linebreak="al", unicodeslot=0x2A6C, }, [0x2A6D]={ category="sm", description="CONGRUENT WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2A6D, }, [0x2A6E]={ category="sm", description="EQUALS WITH ASTERISK", direction="on", linebreak="al", unicodeslot=0x2A6E, }, [0x2A6F]={ category="sm", description="ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT", direction="on", linebreak="al", unicodeslot=0x2A6F, }, [0x2A70]={ category="sm", description="APPROXIMATELY EQUAL OR EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2A70, }, [0x2A71]={ category="sm", description="EQUALS SIGN ABOVE PLUS SIGN", direction="on", linebreak="al", unicodeslot=0x2A71, }, [0x2A72]={ category="sm", description="PLUS SIGN ABOVE EQUALS SIGN", direction="on", linebreak="al", unicodeslot=0x2A72, }, [0x2A73]={ category="sm", description="EQUALS SIGN ABOVE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2A73, }, [0x2A74]={ category="sm", description="DOUBLE COLON EQUAL", direction="on", linebreak="al", mathclass="relation", mathname="coloncolonequals", specials={ "compat", 0x003A, 0x003A, 0x003D }, unicodeslot=0x2A74, }, [0x2A75]={ category="sm", description="TWO CONSECUTIVE EQUALS SIGNS", direction="on", linebreak="al", specials={ "compat", 0x003D, 0x003D }, unicodeslot=0x2A75, }, [0x2A76]={ category="sm", description="THREE CONSECUTIVE EQUALS SIGNS", direction="on", linebreak="al", specials={ "compat", 0x003D, 0x003D, 0x003D }, unicodeslot=0x2A76, }, [0x2A77]={ category="sm", description="EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW", direction="on", linebreak="al", unicodeslot=0x2A77, }, [0x2A78]={ category="sm", description="EQUIVALENT WITH FOUR DOTS ABOVE", direction="on", linebreak="al", unicodeslot=0x2A78, }, [0x2A79]={ category="sm", description="LESS-THAN WITH CIRCLE INSIDE", direction="on", linebreak="al", mirror=0x2A7A, unicodeslot=0x2A79, }, [0x2A7A]={ category="sm", description="GREATER-THAN WITH CIRCLE INSIDE", direction="on", linebreak="al", mirror=0x2A79, unicodeslot=0x2A7A, }, [0x2A7B]={ category="sm", description="LESS-THAN WITH QUESTION MARK ABOVE", direction="on", linebreak="al", unicodeslot=0x2A7B, }, [0x2A7C]={ category="sm", description="GREATER-THAN WITH QUESTION MARK ABOVE", direction="on", linebreak="al", unicodeslot=0x2A7C, }, [0x2A7D]={ category="sm", description="LESS-THAN OR SLANTED EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="leqslant", mirror=0x2A7E, unicodeslot=0x2A7D, }, [0x2A7E]={ category="sm", description="GREATER-THAN OR SLANTED EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="geqslant", mirror=0x2A7D, unicodeslot=0x2A7E, }, [0x2A7F]={ category="sm", description="LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE", direction="on", linebreak="al", mirror=0x2A80, unicodeslot=0x2A7F, }, [0x2A80]={ category="sm", description="GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE", direction="on", linebreak="al", mirror=0x2A7F, unicodeslot=0x2A80, }, [0x2A81]={ category="sm", description="LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE", direction="on", linebreak="al", mirror=0x2A82, unicodeslot=0x2A81, }, [0x2A82]={ category="sm", description="GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE", direction="on", linebreak="al", mirror=0x2A81, unicodeslot=0x2A82, }, [0x2A83]={ category="sm", description="LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT", direction="on", linebreak="al", mirror=0x2A84, unicodeslot=0x2A83, }, [0x2A84]={ category="sm", description="GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT", direction="on", linebreak="al", mirror=0x2A83, unicodeslot=0x2A84, }, [0x2A85]={ category="sm", description="LESS-THAN OR APPROXIMATE", direction="on", linebreak="al", mathclass="relation", mathname="lessapprox", unicodeslot=0x2A85, }, [0x2A86]={ category="sm", description="GREATER-THAN OR APPROXIMATE", direction="on", linebreak="al", mathclass="relation", mathname="gtrapprox", unicodeslot=0x2A86, }, [0x2A87]={ category="sm", description="LESS-THAN AND SINGLE-LINE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="lneq", unicodeslot=0x2A87, }, [0x2A88]={ category="sm", description="GREATER-THAN AND SINGLE-LINE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="rneq", unicodeslot=0x2A88, }, [0x2A89]={ category="sm", description="LESS-THAN AND NOT APPROXIMATE", direction="on", linebreak="al", mathclass="relation", mathname="lnapprox", unicodeslot=0x2A89, }, [0x2A8A]={ category="sm", description="GREATER-THAN AND NOT APPROXIMATE", direction="on", linebreak="al", mathclass="relation", mathname="gnapprox", unicodeslot=0x2A8A, }, [0x2A8B]={ category="sm", description="LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN", direction="on", linebreak="al", mathclass="relation", mathname="lesseqqgtr", mirror=0x2A8C, unicodeslot=0x2A8B, }, [0x2A8C]={ category="sm", description="GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN", direction="on", linebreak="al", mathclass="relation", mathname="gtreqqless", mirror=0x2A8B, unicodeslot=0x2A8C, }, [0x2A8D]={ category="sm", description="LESS-THAN ABOVE SIMILAR OR EQUAL", direction="on", linebreak="al", unicodeslot=0x2A8D, }, [0x2A8E]={ category="sm", description="GREATER-THAN ABOVE SIMILAR OR EQUAL", direction="on", linebreak="al", unicodeslot=0x2A8E, }, [0x2A8F]={ category="sm", description="LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN", direction="on", linebreak="al", unicodeslot=0x2A8F, }, [0x2A90]={ category="sm", description="GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN", direction="on", linebreak="al", unicodeslot=0x2A90, }, [0x2A91]={ category="sm", description="LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL", direction="on", linebreak="al", mirror=0x2A92, unicodeslot=0x2A91, }, [0x2A92]={ category="sm", description="GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL", direction="on", linebreak="al", mirror=0x2A91, unicodeslot=0x2A92, }, [0x2A93]={ category="sm", description="LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL", direction="on", linebreak="al", mirror=0x2A94, unicodeslot=0x2A93, }, [0x2A94]={ category="sm", description="GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL", direction="on", linebreak="al", mirror=0x2A93, unicodeslot=0x2A94, }, [0x2A95]={ category="sm", description="SLANTED EQUAL TO OR LESS-THAN", direction="on", linebreak="al", mathclass="relation", mathname="eqslantless", mirror=0x2A96, unicodeslot=0x2A95, }, [0x2A96]={ category="sm", description="SLANTED EQUAL TO OR GREATER-THAN", direction="on", linebreak="al", mathclass="relation", mathname="eqslantgtr", mirror=0x2A95, unicodeslot=0x2A96, }, [0x2A97]={ category="sm", description="SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE", direction="on", linebreak="al", mirror=0x2A98, unicodeslot=0x2A97, }, [0x2A98]={ category="sm", description="SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE", direction="on", linebreak="al", mirror=0x2A97, unicodeslot=0x2A98, }, [0x2A99]={ category="sm", description="DOUBLE-LINE EQUAL TO OR LESS-THAN", direction="on", linebreak="al", mirror=0x2A9A, unicodeslot=0x2A99, }, [0x2A9A]={ category="sm", description="DOUBLE-LINE EQUAL TO OR GREATER-THAN", direction="on", linebreak="al", mirror=0x2A99, unicodeslot=0x2A9A, }, [0x2A9B]={ category="sm", description="DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN", direction="on", linebreak="al", mirror=0x2A9C, unicodeslot=0x2A9B, }, [0x2A9C]={ category="sm", description="DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN", direction="on", linebreak="al", mirror=0x2A9B, unicodeslot=0x2A9C, }, [0x2A9D]={ category="sm", description="SIMILAR OR LESS-THAN", direction="on", linebreak="al", unicodeslot=0x2A9D, variants={ [0xFE00]="with similar following the slant of the upper leg", }, }, [0x2A9E]={ category="sm", description="SIMILAR OR GREATER-THAN", direction="on", linebreak="al", unicodeslot=0x2A9E, variants={ [0xFE00]="with similar following the slant of the upper leg", }, }, [0x2A9F]={ category="sm", description="SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN", direction="on", linebreak="al", unicodeslot=0x2A9F, }, [0x2AA0]={ category="sm", description="SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN", direction="on", linebreak="al", unicodeslot=0x2AA0, }, [0x2AA1]={ category="sm", description="DOUBLE NESTED LESS-THAN", direction="on", linebreak="al", mirror=0x2AA2, unicodeslot=0x2AA1, }, [0x2AA2]={ category="sm", description="DOUBLE NESTED GREATER-THAN", direction="on", linebreak="al", mirror=0x2AA1, unicodeslot=0x2AA2, }, [0x2AA3]={ category="sm", description="DOUBLE NESTED LESS-THAN WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2AA3, }, [0x2AA4]={ category="sm", description="GREATER-THAN OVERLAPPING LESS-THAN", direction="on", linebreak="al", unicodeslot=0x2AA4, }, [0x2AA5]={ category="sm", description="GREATER-THAN BESIDE LESS-THAN", direction="on", linebreak="al", unicodeslot=0x2AA5, }, [0x2AA6]={ category="sm", description="LESS-THAN CLOSED BY CURVE", direction="on", linebreak="al", mirror=0x2AA7, unicodeslot=0x2AA6, }, [0x2AA7]={ category="sm", description="GREATER-THAN CLOSED BY CURVE", direction="on", linebreak="al", mirror=0x2AA6, unicodeslot=0x2AA7, }, [0x2AA8]={ category="sm", description="LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL", direction="on", linebreak="al", mirror=0x2AA9, unicodeslot=0x2AA8, }, [0x2AA9]={ category="sm", description="GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL", direction="on", linebreak="al", mirror=0x2AA8, unicodeslot=0x2AA9, }, [0x2AAA]={ category="sm", description="SMALLER THAN", direction="on", linebreak="al", mirror=0x2AAB, unicodeslot=0x2AAA, }, [0x2AAB]={ category="sm", description="LARGER THAN", direction="on", linebreak="al", mirror=0x2AAA, unicodeslot=0x2AAB, }, [0x2AAC]={ category="sm", description="SMALLER THAN OR EQUAL TO", direction="on", linebreak="al", mirror=0x2AAD, unicodeslot=0x2AAC, variants={ [0xFE00]="with slanted equal", }, }, [0x2AAD]={ category="sm", description="LARGER THAN OR EQUAL TO", direction="on", linebreak="al", mirror=0x2AAC, unicodeslot=0x2AAD, variants={ [0xFE00]="with slanted equal", }, }, [0x2AAE]={ category="sm", description="EQUALS SIGN WITH BUMPY ABOVE", direction="on", linebreak="al", unicodeslot=0x2AAE, }, [0x2AAF]={ category="sm", description="PRECEDES ABOVE SINGLE-LINE EQUALS SIGN", direction="on", linebreak="al", mathclass="relation", mathname="preceq", mirror=0x2AB0, unicodeslot=0x2AAF, }, [0x2AB0]={ category="sm", description="SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN", direction="on", linebreak="al", mathclass="relation", mathname="succeq", mirror=0x2AAF, unicodeslot=0x2AB0, }, [0x2AB1]={ category="sm", description="PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="precneq", unicodeslot=0x2AB1, }, [0x2AB2]={ category="sm", description="SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="succneq", unicodeslot=0x2AB2, }, [0x2AB3]={ category="sm", description="PRECEDES ABOVE EQUALS SIGN", direction="on", linebreak="al", mathclass="relation", mathname="preceqq", mirror=0x2AB4, unicodeslot=0x2AB3, }, [0x2AB4]={ category="sm", description="SUCCEEDS ABOVE EQUALS SIGN", direction="on", linebreak="al", mathclass="relation", mathname="succeqq", mirror=0x2AB3, unicodeslot=0x2AB4, }, [0x2AB5]={ category="sm", description="PRECEDES ABOVE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="precneqq", unicodeslot=0x2AB5, }, [0x2AB6]={ category="sm", description="SUCCEEDS ABOVE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="succneqq", unicodeslot=0x2AB6, }, [0x2AB7]={ category="sm", description="PRECEDES ABOVE ALMOST EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="precapprox", unicodeslot=0x2AB7, }, [0x2AB8]={ category="sm", description="SUCCEEDS ABOVE ALMOST EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="succapprox", unicodeslot=0x2AB8, }, [0x2AB9]={ category="sm", description="PRECEDES ABOVE NOT ALMOST EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="precnapprox", unicodeslot=0x2AB9, }, [0x2ABA]={ category="sm", description="SUCCEEDS ABOVE NOT ALMOST EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="succnapprox", unicodeslot=0x2ABA, }, [0x2ABB]={ category="sm", description="DOUBLE PRECEDES", direction="on", linebreak="al", mirror=0x2ABC, unicodeslot=0x2ABB, }, [0x2ABC]={ category="sm", description="DOUBLE SUCCEEDS", direction="on", linebreak="al", mirror=0x2ABB, unicodeslot=0x2ABC, }, [0x2ABD]={ category="sm", description="SUBSET WITH DOT", direction="on", linebreak="al", mirror=0x2ABE, unicodeslot=0x2ABD, }, [0x2ABE]={ category="sm", description="SUPERSET WITH DOT", direction="on", linebreak="al", mirror=0x2ABD, unicodeslot=0x2ABE, }, [0x2ABF]={ category="sm", description="SUBSET WITH PLUS SIGN BELOW", direction="on", linebreak="al", mirror=0x2AC0, unicodeslot=0x2ABF, }, [0x2AC0]={ category="sm", description="SUPERSET WITH PLUS SIGN BELOW", direction="on", linebreak="al", mirror=0x2ABF, unicodeslot=0x2AC0, }, [0x2AC1]={ category="sm", description="SUBSET WITH MULTIPLICATION SIGN BELOW", direction="on", linebreak="al", mirror=0x2AC2, unicodeslot=0x2AC1, }, [0x2AC2]={ category="sm", description="SUPERSET WITH MULTIPLICATION SIGN BELOW", direction="on", linebreak="al", mirror=0x2AC1, unicodeslot=0x2AC2, }, [0x2AC3]={ category="sm", description="SUBSET OF OR EQUAL TO WITH DOT ABOVE", direction="on", linebreak="al", mirror=0x2AC4, unicodeslot=0x2AC3, }, [0x2AC4]={ category="sm", description="SUPERSET OF OR EQUAL TO WITH DOT ABOVE", direction="on", linebreak="al", mirror=0x2AC3, unicodeslot=0x2AC4, }, [0x2AC5]={ category="sm", description="SUBSET OF ABOVE EQUALS SIGN", direction="on", linebreak="al", mathclass="relation", mathname="subseteqq", mirror=0x2AC6, unicodeslot=0x2AC5, }, [0x2AC6]={ category="sm", description="SUPERSET OF ABOVE EQUALS SIGN", direction="on", linebreak="al", mathclass="relation", mathname="supseteqq", mirror=0x2AC5, unicodeslot=0x2AC6, }, [0x2AC7]={ category="sm", description="SUBSET OF ABOVE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2AC7, }, [0x2AC8]={ category="sm", description="SUPERSET OF ABOVE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2AC8, }, [0x2AC9]={ category="sm", description="SUBSET OF ABOVE ALMOST EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2AC9, }, [0x2ACA]={ category="sm", description="SUPERSET OF ABOVE ALMOST EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2ACA, }, [0x2ACB]={ category="sm", description="SUBSET OF ABOVE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="subsetneqq", unicodeslot=0x2ACB, variants={ [0xFE00]="with stroke through bottom members", }, }, [0x2ACC]={ category="sm", description="SUPERSET OF ABOVE NOT EQUAL TO", direction="on", linebreak="al", mathclass="relation", mathname="supsetneqq", unicodeslot=0x2ACC, variants={ [0xFE00]="with stroke through bottom members", }, }, [0x2ACD]={ category="sm", description="SQUARE LEFT OPEN BOX OPERATOR", direction="on", linebreak="al", mirror=0x2ACE, unicodeslot=0x2ACD, }, [0x2ACE]={ category="sm", description="SQUARE RIGHT OPEN BOX OPERATOR", direction="on", linebreak="al", mirror=0x2ACD, unicodeslot=0x2ACE, }, [0x2ACF]={ category="sm", description="CLOSED SUBSET", direction="on", linebreak="al", mirror=0x2AD0, unicodeslot=0x2ACF, }, [0x2AD0]={ category="sm", description="CLOSED SUPERSET", direction="on", linebreak="al", mirror=0x2ACF, unicodeslot=0x2AD0, }, [0x2AD1]={ category="sm", description="CLOSED SUBSET OR EQUAL TO", direction="on", linebreak="al", mirror=0x2AD2, unicodeslot=0x2AD1, }, [0x2AD2]={ category="sm", description="CLOSED SUPERSET OR EQUAL TO", direction="on", linebreak="al", mirror=0x2AD1, unicodeslot=0x2AD2, }, [0x2AD3]={ category="sm", description="SUBSET ABOVE SUPERSET", direction="on", linebreak="al", mirror=0x2AD4, unicodeslot=0x2AD3, }, [0x2AD4]={ category="sm", description="SUPERSET ABOVE SUBSET", direction="on", linebreak="al", mirror=0x2AD3, unicodeslot=0x2AD4, }, [0x2AD5]={ category="sm", description="SUBSET ABOVE SUBSET", direction="on", linebreak="al", mirror=0x2AD6, unicodeslot=0x2AD5, }, [0x2AD6]={ category="sm", description="SUPERSET ABOVE SUPERSET", direction="on", linebreak="al", mirror=0x2AD5, unicodeslot=0x2AD6, }, [0x2AD7]={ category="sm", description="SUPERSET BESIDE SUBSET", direction="on", linebreak="al", unicodeslot=0x2AD7, }, [0x2AD8]={ category="sm", description="SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET", direction="on", linebreak="al", unicodeslot=0x2AD8, }, [0x2AD9]={ category="sm", description="ELEMENT OF OPENING DOWNWARDS", direction="on", linebreak="al", unicodeslot=0x2AD9, }, [0x2ADA]={ category="sm", description="PITCHFORK WITH TEE TOP", direction="on", linebreak="al", unicodeslot=0x2ADA, }, [0x2ADB]={ category="sm", description="TRANSVERSAL INTERSECTION", direction="on", linebreak="al", unicodeslot=0x2ADB, }, [0x2ADC]={ category="sm", description="FORKING", direction="on", linebreak="al", specials={ "char", 0x2ADD, 0x0338 }, unicodeslot=0x2ADC, }, [0x2ADD]={ category="sm", description="NONFORKING", direction="on", linebreak="al", unicodeslot=0x2ADD, }, [0x2ADE]={ category="sm", description="SHORT LEFT TACK", direction="on", linebreak="al", mirror=0x22A6, unicodeslot=0x2ADE, }, [0x2ADF]={ category="sm", description="SHORT DOWN TACK", direction="on", linebreak="al", unicodeslot=0x2ADF, }, [0x2AE0]={ category="sm", description="SHORT UP TACK", direction="on", linebreak="al", unicodeslot=0x2AE0, }, [0x2AE1]={ category="sm", description="PERPENDICULAR WITH S", direction="on", linebreak="al", unicodeslot=0x2AE1, }, [0x2AE2]={ category="sm", description="VERTICAL BAR TRIPLE RIGHT TURNSTILE", direction="on", linebreak="al", unicodeslot=0x2AE2, }, [0x2AE3]={ category="sm", description="DOUBLE VERTICAL BAR LEFT TURNSTILE", direction="on", linebreak="al", mirror=0x22A9, unicodeslot=0x2AE3, }, [0x2AE4]={ category="sm", description="VERTICAL BAR DOUBLE LEFT TURNSTILE", direction="on", linebreak="al", mirror=0x22A8, unicodeslot=0x2AE4, }, [0x2AE5]={ category="sm", description="DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE", direction="on", linebreak="al", mirror=0x22AB, unicodeslot=0x2AE5, }, [0x2AE6]={ category="sm", description="LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL", direction="on", linebreak="al", unicodeslot=0x2AE6, }, [0x2AE7]={ category="sm", description="SHORT DOWN TACK WITH OVERBAR", direction="on", linebreak="al", unicodeslot=0x2AE7, }, [0x2AE8]={ category="sm", description="SHORT UP TACK WITH UNDERBAR", direction="on", linebreak="al", unicodeslot=0x2AE8, }, [0x2AE9]={ category="sm", description="SHORT UP TACK ABOVE SHORT DOWN TACK", direction="on", linebreak="al", unicodeslot=0x2AE9, }, [0x2AEA]={ category="sm", description="DOUBLE DOWN TACK", direction="on", linebreak="al", unicodeslot=0x2AEA, }, [0x2AEB]={ category="sm", description="DOUBLE UP TACK", direction="on", linebreak="al", unicodeslot=0x2AEB, }, [0x2AEC]={ category="sm", description="DOUBLE STROKE NOT SIGN", direction="on", linebreak="al", mirror=0x2AED, unicodeslot=0x2AEC, }, [0x2AED]={ category="sm", description="REVERSED DOUBLE STROKE NOT SIGN", direction="on", linebreak="al", mirror=0x2AEC, unicodeslot=0x2AED, }, [0x2AEE]={ category="sm", description="DOES NOT DIVIDE WITH REVERSED NEGATION SLASH", direction="on", linebreak="al", unicodeslot=0x2AEE, }, [0x2AEF]={ category="sm", description="VERTICAL LINE WITH CIRCLE ABOVE", direction="on", linebreak="al", unicodeslot=0x2AEF, }, [0x2AF0]={ category="sm", description="VERTICAL LINE WITH CIRCLE BELOW", direction="on", linebreak="al", unicodeslot=0x2AF0, }, [0x2AF1]={ category="sm", description="DOWN TACK WITH CIRCLE BELOW", direction="on", linebreak="al", unicodeslot=0x2AF1, }, [0x2AF2]={ category="sm", description="PARALLEL WITH HORIZONTAL STROKE", direction="on", linebreak="al", unicodeslot=0x2AF2, }, [0x2AF3]={ category="sm", description="PARALLEL WITH TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2AF3, }, [0x2AF4]={ category="sm", description="TRIPLE VERTICAL BAR BINARY RELATION", direction="on", linebreak="al", unicodeslot=0x2AF4, }, [0x2AF5]={ category="sm", description="TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE", direction="on", linebreak="al", unicodeslot=0x2AF5, }, [0x2AF6]={ category="sm", description="TRIPLE COLON OPERATOR", direction="on", linebreak="al", unicodeslot=0x2AF6, }, [0x2AF7]={ category="sm", description="TRIPLE NESTED LESS-THAN", direction="on", linebreak="al", mirror=0x2AF8, unicodeslot=0x2AF7, }, [0x2AF8]={ category="sm", description="TRIPLE NESTED GREATER-THAN", direction="on", linebreak="al", mirror=0x2AF7, unicodeslot=0x2AF8, }, [0x2AF9]={ category="sm", description="DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO", direction="on", linebreak="al", mirror=0x2AFA, unicodeslot=0x2AF9, }, [0x2AFA]={ category="sm", description="DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO", direction="on", linebreak="al", mirror=0x2AF9, unicodeslot=0x2AFA, }, [0x2AFB]={ category="sm", description="TRIPLE SOLIDUS BINARY RELATION", direction="on", linebreak="al", unicodeslot=0x2AFB, }, [0x2AFC]={ category="sm", description="LARGE TRIPLE VERTICAL BAR OPERATOR", direction="on", linebreak="al", unicodeslot=0x2AFC, }, [0x2AFD]={ category="sm", description="DOUBLE SOLIDUS OPERATOR", direction="on", linebreak="al", unicodeslot=0x2AFD, }, [0x2AFE]={ category="sm", description="WHITE VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x2AFE, }, [0x2AFF]={ category="sm", description="N-ARY WHITE VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0x2AFF, }, [0x2B00]={ category="so", description="NORTH EAST WHITE ARROW", direction="on", linebreak="al", unicodeslot=0x2B00, }, [0x2B01]={ category="so", description="NORTH WEST WHITE ARROW", direction="on", linebreak="al", unicodeslot=0x2B01, }, [0x2B02]={ category="so", description="SOUTH EAST WHITE ARROW", direction="on", linebreak="al", unicodeslot=0x2B02, }, [0x2B03]={ category="so", description="SOUTH WEST WHITE ARROW", direction="on", linebreak="al", unicodeslot=0x2B03, }, [0x2B04]={ category="so", description="LEFT RIGHT WHITE ARROW", direction="on", linebreak="al", unicodeslot=0x2B04, }, [0x2B05]={ category="so", description="LEFTWARDS BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B05, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B06]={ category="so", description="UPWARDS BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B06, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B07]={ category="so", description="DOWNWARDS BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B07, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B08]={ category="so", description="NORTH EAST BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B08, }, [0x2B09]={ category="so", description="NORTH WEST BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B09, }, [0x2B0A]={ category="so", description="SOUTH EAST BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B0A, }, [0x2B0B]={ category="so", description="SOUTH WEST BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B0B, }, [0x2B0C]={ category="so", description="LEFT RIGHT BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B0C, }, [0x2B0D]={ category="so", description="UP DOWN BLACK ARROW", direction="on", linebreak="al", unicodeslot=0x2B0D, }, [0x2B0E]={ category="so", description="RIGHTWARDS ARROW WITH TIP DOWNWARDS", direction="on", linebreak="al", unicodeslot=0x2B0E, }, [0x2B0F]={ category="so", description="RIGHTWARDS ARROW WITH TIP UPWARDS", direction="on", linebreak="al", unicodeslot=0x2B0F, }, [0x2B10]={ category="so", description="LEFTWARDS ARROW WITH TIP DOWNWARDS", direction="on", linebreak="al", unicodeslot=0x2B10, }, [0x2B11]={ category="so", description="LEFTWARDS ARROW WITH TIP UPWARDS", direction="on", linebreak="al", unicodeslot=0x2B11, }, [0x2B12]={ category="so", description="SQUARE WITH TOP HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B12, }, [0x2B13]={ category="so", description="SQUARE WITH BOTTOM HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B13, }, [0x2B14]={ category="so", description="SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B14, }, [0x2B15]={ category="so", description="SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B15, }, [0x2B16]={ category="so", description="DIAMOND WITH LEFT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B16, }, [0x2B17]={ category="so", description="DIAMOND WITH RIGHT HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B17, }, [0x2B18]={ category="so", description="DIAMOND WITH TOP HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B18, }, [0x2B19]={ category="so", description="DIAMOND WITH BOTTOM HALF BLACK", direction="on", linebreak="al", unicodeslot=0x2B19, }, [0x2B1A]={ category="so", description="DOTTED SQUARE", direction="on", linebreak="al", unicodeslot=0x2B1A, }, [0x2B1B]={ category="so", description="BLACK LARGE SQUARE", direction="on", linebreak="al", unicodeslot=0x2B1B, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B1C]={ category="so", description="WHITE LARGE SQUARE", direction="on", linebreak="al", unicodeslot=0x2B1C, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B1D]={ category="so", description="BLACK VERY SMALL SQUARE", direction="on", linebreak="al", unicodeslot=0x2B1D, }, [0x2B1E]={ category="so", description="WHITE VERY SMALL SQUARE", direction="on", linebreak="al", unicodeslot=0x2B1E, }, [0x2B1F]={ category="so", description="BLACK PENTAGON", direction="on", linebreak="al", unicodeslot=0x2B1F, }, [0x2B20]={ category="so", description="WHITE PENTAGON", direction="on", linebreak="al", unicodeslot=0x2B20, }, [0x2B21]={ category="so", description="WHITE HEXAGON", direction="on", linebreak="al", unicodeslot=0x2B21, }, [0x2B22]={ category="so", description="BLACK HEXAGON", direction="on", linebreak="al", unicodeslot=0x2B22, }, [0x2B23]={ category="so", description="HORIZONTAL BLACK HEXAGON", direction="on", linebreak="al", unicodeslot=0x2B23, }, [0x2B24]={ category="so", description="BLACK LARGE CIRCLE", direction="on", linebreak="al", unicodeslot=0x2B24, }, [0x2B25]={ category="so", description="BLACK MEDIUM DIAMOND", direction="on", linebreak="al", unicodeslot=0x2B25, }, [0x2B26]={ category="so", description="WHITE MEDIUM DIAMOND", direction="on", linebreak="al", unicodeslot=0x2B26, }, [0x2B27]={ category="so", description="BLACK MEDIUM LOZENGE", direction="on", linebreak="al", unicodeslot=0x2B27, }, [0x2B28]={ category="so", description="WHITE MEDIUM LOZENGE", direction="on", linebreak="al", unicodeslot=0x2B28, }, [0x2B29]={ category="so", description="BLACK SMALL DIAMOND", direction="on", linebreak="al", unicodeslot=0x2B29, }, [0x2B2A]={ category="so", description="BLACK SMALL LOZENGE", direction="on", linebreak="al", unicodeslot=0x2B2A, }, [0x2B2B]={ category="so", description="WHITE SMALL LOZENGE", direction="on", linebreak="al", unicodeslot=0x2B2B, }, [0x2B2C]={ category="so", description="BLACK HORIZONTAL ELLIPSE", direction="on", linebreak="al", unicodeslot=0x2B2C, }, [0x2B2D]={ category="so", description="WHITE HORIZONTAL ELLIPSE", direction="on", linebreak="al", unicodeslot=0x2B2D, }, [0x2B2E]={ category="so", description="BLACK VERTICAL ELLIPSE", direction="on", linebreak="al", unicodeslot=0x2B2E, }, [0x2B2F]={ category="so", description="WHITE VERTICAL ELLIPSE", direction="on", linebreak="al", unicodeslot=0x2B2F, }, [0x2B30]={ category="sm", description="LEFT ARROW WITH SMALL CIRCLE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B30, }, [0x2B31]={ category="sm", description="THREE LEFTWARDS ARROWS", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B31, }, [0x2B32]={ category="sm", description="LEFT ARROW WITH CIRCLED PLUS", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B32, }, [0x2B33]={ category="sm", description="LONG LEFTWARDS SQUIGGLE ARROW", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B33, }, [0x2B34]={ category="sm", description="LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B34, }, [0x2B35]={ category="sm", description="LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B35, }, [0x2B36]={ category="sm", description="LEFTWARDS TWO-HEADED ARROW FROM BAR", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B36, }, [0x2B37]={ category="sm", description="LEFTWARDS TWO-HEADED TRIPLE DASH ARROW", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B37, }, [0x2B38]={ category="sm", description="LEFTWARDS ARROW WITH DOTTED STEM", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B38, }, [0x2B39]={ category="sm", description="LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B39, }, [0x2B3A]={ category="sm", description="LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B3A, }, [0x2B3B]={ category="sm", description="LEFTWARDS TWO-HEADED ARROW WITH TAIL", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B3B, }, [0x2B3C]={ category="sm", description="LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B3C, }, [0x2B3D]={ category="sm", description="LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B3D, }, [0x2B3E]={ category="sm", description="LEFTWARDS ARROW THROUGH X", direction="on", linebreak="al", unicodeslot=0x2B3E, }, [0x2B3F]={ category="sm", description="WAVE ARROW POINTING DIRECTLY LEFT", direction="on", linebreak="al", mathextensible="l", unicodeslot=0x2B3F, }, [0x2B40]={ category="sm", description="EQUALS SIGN ABOVE LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2B40, }, [0x2B41]={ category="sm", description="REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2B41, }, [0x2B42]={ category="sm", description="LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2B42, }, [0x2B43]={ category="sm", description="RIGHTWARDS ARROW THROUGH GREATER-THAN", direction="on", linebreak="al", unicodeslot=0x2B43, }, [0x2B44]={ category="sm", description="RIGHTWARDS ARROW THROUGH SUPERSET", direction="on", linebreak="al", unicodeslot=0x2B44, }, [0x2B45]={ category="so", description="LEFTWARDS QUADRUPLE ARROW", direction="on", linebreak="al", unicodeslot=0x2B45, }, [0x2B46]={ category="so", description="RIGHTWARDS QUADRUPLE ARROW", direction="on", linebreak="al", unicodeslot=0x2B46, }, [0x2B47]={ category="sm", description="REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2B47, }, [0x2B48]={ category="sm", description="RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2B48, }, [0x2B49]={ category="sm", description="TILDE OPERATOR ABOVE LEFTWARDS ARROW", direction="on", linebreak="al", unicodeslot=0x2B49, }, [0x2B4A]={ category="sm", description="LEFTWARDS ARROW ABOVE ALMOST EQUAL TO", direction="on", linebreak="al", unicodeslot=0x2B4A, }, [0x2B4B]={ category="sm", description="LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2B4B, }, [0x2B4C]={ category="sm", description="RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR", direction="on", linebreak="al", unicodeslot=0x2B4C, }, [0x2B50]={ category="so", description="WHITE MEDIUM STAR", direction="on", linebreak="al", unicodeslot=0x2B50, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B51]={ category="so", description="BLACK SMALL STAR", direction="on", linebreak="al", unicodeslot=0x2B51, }, [0x2B52]={ category="so", description="WHITE SMALL STAR", direction="on", linebreak="al", unicodeslot=0x2B52, }, [0x2B53]={ category="so", description="BLACK RIGHT-POINTING PENTAGON", direction="on", linebreak="al", unicodeslot=0x2B53, }, [0x2B54]={ category="so", description="WHITE RIGHT-POINTING PENTAGON", direction="on", linebreak="al", unicodeslot=0x2B54, }, [0x2B55]={ category="so", cjkwd="a", description="HEAVY LARGE CIRCLE", direction="on", linebreak="ai", unicodeslot=0x2B55, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x2B56]={ category="so", cjkwd="a", description="HEAVY OVAL WITH OVAL INSIDE", direction="on", linebreak="ai", unicodeslot=0x2B56, }, [0x2B57]={ category="so", cjkwd="a", description="HEAVY CIRCLE WITH CIRCLE INSIDE", direction="on", linebreak="ai", unicodeslot=0x2B57, }, [0x2B58]={ category="so", cjkwd="a", description="HEAVY CIRCLE", direction="on", linebreak="ai", unicodeslot=0x2B58, }, [0x2B59]={ category="so", cjkwd="a", description="HEAVY CIRCLED SALTIRE", direction="on", linebreak="ai", unicodeslot=0x2B59, }, [0x2C00]={ category="lu", description="GLAGOLITIC CAPITAL LETTER AZU", direction="l", lccode=0x2C30, linebreak="al", unicodeslot=0x2C00, }, [0x2C01]={ category="lu", description="GLAGOLITIC CAPITAL LETTER BUKY", direction="l", lccode=0x2C31, linebreak="al", unicodeslot=0x2C01, }, [0x2C02]={ category="lu", description="GLAGOLITIC CAPITAL LETTER VEDE", direction="l", lccode=0x2C32, linebreak="al", unicodeslot=0x2C02, }, [0x2C03]={ category="lu", description="GLAGOLITIC CAPITAL LETTER GLAGOLI", direction="l", lccode=0x2C33, linebreak="al", unicodeslot=0x2C03, }, [0x2C04]={ category="lu", description="GLAGOLITIC CAPITAL LETTER DOBRO", direction="l", lccode=0x2C34, linebreak="al", unicodeslot=0x2C04, }, [0x2C05]={ category="lu", description="GLAGOLITIC CAPITAL LETTER YESTU", direction="l", lccode=0x2C35, linebreak="al", unicodeslot=0x2C05, }, [0x2C06]={ category="lu", description="GLAGOLITIC CAPITAL LETTER ZHIVETE", direction="l", lccode=0x2C36, linebreak="al", unicodeslot=0x2C06, }, [0x2C07]={ category="lu", description="GLAGOLITIC CAPITAL LETTER DZELO", direction="l", lccode=0x2C37, linebreak="al", unicodeslot=0x2C07, }, [0x2C08]={ category="lu", description="GLAGOLITIC CAPITAL LETTER ZEMLJA", direction="l", lccode=0x2C38, linebreak="al", unicodeslot=0x2C08, }, [0x2C09]={ category="lu", description="GLAGOLITIC CAPITAL LETTER IZHE", direction="l", lccode=0x2C39, linebreak="al", unicodeslot=0x2C09, }, [0x2C0A]={ category="lu", description="GLAGOLITIC CAPITAL LETTER INITIAL IZHE", direction="l", lccode=0x2C3A, linebreak="al", unicodeslot=0x2C0A, }, [0x2C0B]={ category="lu", description="GLAGOLITIC CAPITAL LETTER I", direction="l", lccode=0x2C3B, linebreak="al", unicodeslot=0x2C0B, }, [0x2C0C]={ category="lu", description="GLAGOLITIC CAPITAL LETTER DJERVI", direction="l", lccode=0x2C3C, linebreak="al", unicodeslot=0x2C0C, }, [0x2C0D]={ category="lu", description="GLAGOLITIC CAPITAL LETTER KAKO", direction="l", lccode=0x2C3D, linebreak="al", unicodeslot=0x2C0D, }, [0x2C0E]={ category="lu", description="GLAGOLITIC CAPITAL LETTER LJUDIJE", direction="l", lccode=0x2C3E, linebreak="al", unicodeslot=0x2C0E, }, [0x2C0F]={ category="lu", description="GLAGOLITIC CAPITAL LETTER MYSLITE", direction="l", lccode=0x2C3F, linebreak="al", unicodeslot=0x2C0F, }, [0x2C10]={ category="lu", description="GLAGOLITIC CAPITAL LETTER NASHI", direction="l", lccode=0x2C40, linebreak="al", unicodeslot=0x2C10, }, [0x2C11]={ category="lu", description="GLAGOLITIC CAPITAL LETTER ONU", direction="l", lccode=0x2C41, linebreak="al", unicodeslot=0x2C11, }, [0x2C12]={ category="lu", description="GLAGOLITIC CAPITAL LETTER POKOJI", direction="l", lccode=0x2C42, linebreak="al", unicodeslot=0x2C12, }, [0x2C13]={ category="lu", description="GLAGOLITIC CAPITAL LETTER RITSI", direction="l", lccode=0x2C43, linebreak="al", unicodeslot=0x2C13, }, [0x2C14]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SLOVO", direction="l", lccode=0x2C44, linebreak="al", unicodeslot=0x2C14, }, [0x2C15]={ category="lu", description="GLAGOLITIC CAPITAL LETTER TVRIDO", direction="l", lccode=0x2C45, linebreak="al", unicodeslot=0x2C15, }, [0x2C16]={ category="lu", description="GLAGOLITIC CAPITAL LETTER UKU", direction="l", lccode=0x2C46, linebreak="al", unicodeslot=0x2C16, }, [0x2C17]={ category="lu", description="GLAGOLITIC CAPITAL LETTER FRITU", direction="l", lccode=0x2C47, linebreak="al", unicodeslot=0x2C17, }, [0x2C18]={ category="lu", description="GLAGOLITIC CAPITAL LETTER HERU", direction="l", lccode=0x2C48, linebreak="al", unicodeslot=0x2C18, }, [0x2C19]={ category="lu", description="GLAGOLITIC CAPITAL LETTER OTU", direction="l", lccode=0x2C49, linebreak="al", unicodeslot=0x2C19, }, [0x2C1A]={ category="lu", description="GLAGOLITIC CAPITAL LETTER PE", direction="l", lccode=0x2C4A, linebreak="al", unicodeslot=0x2C1A, }, [0x2C1B]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SHTA", direction="l", lccode=0x2C4B, linebreak="al", unicodeslot=0x2C1B, }, [0x2C1C]={ category="lu", description="GLAGOLITIC CAPITAL LETTER TSI", direction="l", lccode=0x2C4C, linebreak="al", unicodeslot=0x2C1C, }, [0x2C1D]={ category="lu", description="GLAGOLITIC CAPITAL LETTER CHRIVI", direction="l", lccode=0x2C4D, linebreak="al", unicodeslot=0x2C1D, }, [0x2C1E]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SHA", direction="l", lccode=0x2C4E, linebreak="al", unicodeslot=0x2C1E, }, [0x2C1F]={ category="lu", description="GLAGOLITIC CAPITAL LETTER YERU", direction="l", lccode=0x2C4F, linebreak="al", unicodeslot=0x2C1F, }, [0x2C20]={ category="lu", description="GLAGOLITIC CAPITAL LETTER YERI", direction="l", lccode=0x2C50, linebreak="al", unicodeslot=0x2C20, }, [0x2C21]={ category="lu", description="GLAGOLITIC CAPITAL LETTER YATI", direction="l", lccode=0x2C51, linebreak="al", unicodeslot=0x2C21, }, [0x2C22]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SPIDERY HA", direction="l", lccode=0x2C52, linebreak="al", unicodeslot=0x2C22, }, [0x2C23]={ category="lu", description="GLAGOLITIC CAPITAL LETTER YU", direction="l", lccode=0x2C53, linebreak="al", unicodeslot=0x2C23, }, [0x2C24]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SMALL YUS", direction="l", lccode=0x2C54, linebreak="al", unicodeslot=0x2C24, }, [0x2C25]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL", direction="l", lccode=0x2C55, linebreak="al", unicodeslot=0x2C25, }, [0x2C26]={ category="lu", description="GLAGOLITIC CAPITAL LETTER YO", direction="l", lccode=0x2C56, linebreak="al", unicodeslot=0x2C26, }, [0x2C27]={ category="lu", description="GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS", direction="l", lccode=0x2C57, linebreak="al", unicodeslot=0x2C27, }, [0x2C28]={ category="lu", description="GLAGOLITIC CAPITAL LETTER BIG YUS", direction="l", lccode=0x2C58, linebreak="al", unicodeslot=0x2C28, }, [0x2C29]={ category="lu", description="GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS", direction="l", lccode=0x2C59, linebreak="al", unicodeslot=0x2C29, }, [0x2C2A]={ category="lu", description="GLAGOLITIC CAPITAL LETTER FITA", direction="l", lccode=0x2C5A, linebreak="al", unicodeslot=0x2C2A, }, [0x2C2B]={ category="lu", description="GLAGOLITIC CAPITAL LETTER IZHITSA", direction="l", lccode=0x2C5B, linebreak="al", unicodeslot=0x2C2B, }, [0x2C2C]={ category="lu", description="GLAGOLITIC CAPITAL LETTER SHTAPIC", direction="l", lccode=0x2C5C, linebreak="al", unicodeslot=0x2C2C, }, [0x2C2D]={ category="lu", description="GLAGOLITIC CAPITAL LETTER TROKUTASTI A", direction="l", lccode=0x2C5D, linebreak="al", unicodeslot=0x2C2D, }, [0x2C2E]={ category="lu", description="GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE", direction="l", lccode=0x2C5E, linebreak="al", unicodeslot=0x2C2E, }, [0x2C30]={ category="ll", description="GLAGOLITIC SMALL LETTER AZU", direction="l", linebreak="al", uccode=0x2C00, unicodeslot=0x2C30, }, [0x2C31]={ category="ll", description="GLAGOLITIC SMALL LETTER BUKY", direction="l", linebreak="al", uccode=0x2C01, unicodeslot=0x2C31, }, [0x2C32]={ category="ll", description="GLAGOLITIC SMALL LETTER VEDE", direction="l", linebreak="al", uccode=0x2C02, unicodeslot=0x2C32, }, [0x2C33]={ category="ll", description="GLAGOLITIC SMALL LETTER GLAGOLI", direction="l", linebreak="al", uccode=0x2C03, unicodeslot=0x2C33, }, [0x2C34]={ category="ll", description="GLAGOLITIC SMALL LETTER DOBRO", direction="l", linebreak="al", uccode=0x2C04, unicodeslot=0x2C34, }, [0x2C35]={ category="ll", description="GLAGOLITIC SMALL LETTER YESTU", direction="l", linebreak="al", uccode=0x2C05, unicodeslot=0x2C35, }, [0x2C36]={ category="ll", description="GLAGOLITIC SMALL LETTER ZHIVETE", direction="l", linebreak="al", uccode=0x2C06, unicodeslot=0x2C36, }, [0x2C37]={ category="ll", description="GLAGOLITIC SMALL LETTER DZELO", direction="l", linebreak="al", uccode=0x2C07, unicodeslot=0x2C37, }, [0x2C38]={ category="ll", description="GLAGOLITIC SMALL LETTER ZEMLJA", direction="l", linebreak="al", uccode=0x2C08, unicodeslot=0x2C38, }, [0x2C39]={ category="ll", description="GLAGOLITIC SMALL LETTER IZHE", direction="l", linebreak="al", uccode=0x2C09, unicodeslot=0x2C39, }, [0x2C3A]={ category="ll", description="GLAGOLITIC SMALL LETTER INITIAL IZHE", direction="l", linebreak="al", uccode=0x2C0A, unicodeslot=0x2C3A, }, [0x2C3B]={ category="ll", description="GLAGOLITIC SMALL LETTER I", direction="l", linebreak="al", uccode=0x2C0B, unicodeslot=0x2C3B, }, [0x2C3C]={ category="ll", description="GLAGOLITIC SMALL LETTER DJERVI", direction="l", linebreak="al", uccode=0x2C0C, unicodeslot=0x2C3C, }, [0x2C3D]={ category="ll", description="GLAGOLITIC SMALL LETTER KAKO", direction="l", linebreak="al", uccode=0x2C0D, unicodeslot=0x2C3D, }, [0x2C3E]={ category="ll", description="GLAGOLITIC SMALL LETTER LJUDIJE", direction="l", linebreak="al", uccode=0x2C0E, unicodeslot=0x2C3E, }, [0x2C3F]={ category="ll", description="GLAGOLITIC SMALL LETTER MYSLITE", direction="l", linebreak="al", uccode=0x2C0F, unicodeslot=0x2C3F, }, [0x2C40]={ category="ll", description="GLAGOLITIC SMALL LETTER NASHI", direction="l", linebreak="al", uccode=0x2C10, unicodeslot=0x2C40, }, [0x2C41]={ category="ll", description="GLAGOLITIC SMALL LETTER ONU", direction="l", linebreak="al", uccode=0x2C11, unicodeslot=0x2C41, }, [0x2C42]={ category="ll", description="GLAGOLITIC SMALL LETTER POKOJI", direction="l", linebreak="al", uccode=0x2C12, unicodeslot=0x2C42, }, [0x2C43]={ category="ll", description="GLAGOLITIC SMALL LETTER RITSI", direction="l", linebreak="al", uccode=0x2C13, unicodeslot=0x2C43, }, [0x2C44]={ category="ll", description="GLAGOLITIC SMALL LETTER SLOVO", direction="l", linebreak="al", uccode=0x2C14, unicodeslot=0x2C44, }, [0x2C45]={ category="ll", description="GLAGOLITIC SMALL LETTER TVRIDO", direction="l", linebreak="al", uccode=0x2C15, unicodeslot=0x2C45, }, [0x2C46]={ category="ll", description="GLAGOLITIC SMALL LETTER UKU", direction="l", linebreak="al", uccode=0x2C16, unicodeslot=0x2C46, }, [0x2C47]={ category="ll", description="GLAGOLITIC SMALL LETTER FRITU", direction="l", linebreak="al", uccode=0x2C17, unicodeslot=0x2C47, }, [0x2C48]={ category="ll", description="GLAGOLITIC SMALL LETTER HERU", direction="l", linebreak="al", uccode=0x2C18, unicodeslot=0x2C48, }, [0x2C49]={ category="ll", description="GLAGOLITIC SMALL LETTER OTU", direction="l", linebreak="al", uccode=0x2C19, unicodeslot=0x2C49, }, [0x2C4A]={ category="ll", description="GLAGOLITIC SMALL LETTER PE", direction="l", linebreak="al", uccode=0x2C1A, unicodeslot=0x2C4A, }, [0x2C4B]={ category="ll", description="GLAGOLITIC SMALL LETTER SHTA", direction="l", linebreak="al", uccode=0x2C1B, unicodeslot=0x2C4B, }, [0x2C4C]={ category="ll", description="GLAGOLITIC SMALL LETTER TSI", direction="l", linebreak="al", uccode=0x2C1C, unicodeslot=0x2C4C, }, [0x2C4D]={ category="ll", description="GLAGOLITIC SMALL LETTER CHRIVI", direction="l", linebreak="al", uccode=0x2C1D, unicodeslot=0x2C4D, }, [0x2C4E]={ category="ll", description="GLAGOLITIC SMALL LETTER SHA", direction="l", linebreak="al", uccode=0x2C1E, unicodeslot=0x2C4E, }, [0x2C4F]={ category="ll", description="GLAGOLITIC SMALL LETTER YERU", direction="l", linebreak="al", uccode=0x2C1F, unicodeslot=0x2C4F, }, [0x2C50]={ category="ll", description="GLAGOLITIC SMALL LETTER YERI", direction="l", linebreak="al", uccode=0x2C20, unicodeslot=0x2C50, }, [0x2C51]={ category="ll", description="GLAGOLITIC SMALL LETTER YATI", direction="l", linebreak="al", uccode=0x2C21, unicodeslot=0x2C51, }, [0x2C52]={ category="ll", description="GLAGOLITIC SMALL LETTER SPIDERY HA", direction="l", linebreak="al", uccode=0x2C22, unicodeslot=0x2C52, }, [0x2C53]={ category="ll", description="GLAGOLITIC SMALL LETTER YU", direction="l", linebreak="al", uccode=0x2C23, unicodeslot=0x2C53, }, [0x2C54]={ category="ll", description="GLAGOLITIC SMALL LETTER SMALL YUS", direction="l", linebreak="al", uccode=0x2C24, unicodeslot=0x2C54, }, [0x2C55]={ category="ll", description="GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL", direction="l", linebreak="al", uccode=0x2C25, unicodeslot=0x2C55, }, [0x2C56]={ category="ll", description="GLAGOLITIC SMALL LETTER YO", direction="l", linebreak="al", uccode=0x2C26, unicodeslot=0x2C56, }, [0x2C57]={ category="ll", description="GLAGOLITIC SMALL LETTER IOTATED SMALL YUS", direction="l", linebreak="al", uccode=0x2C27, unicodeslot=0x2C57, }, [0x2C58]={ category="ll", description="GLAGOLITIC SMALL LETTER BIG YUS", direction="l", linebreak="al", uccode=0x2C28, unicodeslot=0x2C58, }, [0x2C59]={ category="ll", description="GLAGOLITIC SMALL LETTER IOTATED BIG YUS", direction="l", linebreak="al", uccode=0x2C29, unicodeslot=0x2C59, }, [0x2C5A]={ category="ll", description="GLAGOLITIC SMALL LETTER FITA", direction="l", linebreak="al", uccode=0x2C2A, unicodeslot=0x2C5A, }, [0x2C5B]={ category="ll", description="GLAGOLITIC SMALL LETTER IZHITSA", direction="l", linebreak="al", uccode=0x2C2B, unicodeslot=0x2C5B, }, [0x2C5C]={ category="ll", description="GLAGOLITIC SMALL LETTER SHTAPIC", direction="l", linebreak="al", uccode=0x2C2C, unicodeslot=0x2C5C, }, [0x2C5D]={ category="ll", description="GLAGOLITIC SMALL LETTER TROKUTASTI A", direction="l", linebreak="al", uccode=0x2C2D, unicodeslot=0x2C5D, }, [0x2C5E]={ category="ll", description="GLAGOLITIC SMALL LETTER LATINATE MYSLITE", direction="l", linebreak="al", uccode=0x2C2E, unicodeslot=0x2C5E, }, [0x2C60]={ category="lu", description="LATIN CAPITAL LETTER L WITH DOUBLE BAR", direction="l", lccode=0x2C61, linebreak="al", shcode=0x004C, unicodeslot=0x2C60, }, [0x2C61]={ category="ll", description="LATIN SMALL LETTER L WITH DOUBLE BAR", direction="l", linebreak="al", shcode=0x006C, uccode=0x2C60, unicodeslot=0x2C61, }, [0x2C62]={ category="lu", description="LATIN CAPITAL LETTER L WITH MIDDLE TILDE", direction="l", lccode=0x026B, linebreak="al", shcode=0x004C, unicodeslot=0x2C62, }, [0x2C63]={ category="lu", description="LATIN CAPITAL LETTER P WITH STROKE", direction="l", lccode=0x1D7D, linebreak="al", shcode=0x0050, unicodeslot=0x2C63, }, [0x2C64]={ category="lu", description="LATIN CAPITAL LETTER R WITH TAIL", direction="l", lccode=0x027D, linebreak="al", shcode=0x0052, unicodeslot=0x2C64, }, [0x2C65]={ category="ll", description="LATIN SMALL LETTER A WITH STROKE", direction="l", linebreak="al", shcode=0x0061, uccode=0x023A, unicodeslot=0x2C65, }, [0x2C66]={ category="ll", description="LATIN SMALL LETTER T WITH DIAGONAL STROKE", direction="l", linebreak="al", shcode=0x0074, uccode=0x023E, unicodeslot=0x2C66, }, [0x2C67]={ category="lu", description="LATIN CAPITAL LETTER H WITH DESCENDER", direction="l", lccode=0x2C68, linebreak="al", shcode=0x0048, unicodeslot=0x2C67, }, [0x2C68]={ category="ll", description="LATIN SMALL LETTER H WITH DESCENDER", direction="l", linebreak="al", shcode=0x0068, uccode=0x2C67, unicodeslot=0x2C68, }, [0x2C69]={ category="lu", description="LATIN CAPITAL LETTER K WITH DESCENDER", direction="l", lccode=0x2C6A, linebreak="al", shcode=0x004B, unicodeslot=0x2C69, }, [0x2C6A]={ category="ll", description="LATIN SMALL LETTER K WITH DESCENDER", direction="l", linebreak="al", shcode=0x006B, uccode=0x2C69, unicodeslot=0x2C6A, }, [0x2C6B]={ category="lu", description="LATIN CAPITAL LETTER Z WITH DESCENDER", direction="l", lccode=0x2C6C, linebreak="al", shcode=0x005A, unicodeslot=0x2C6B, }, [0x2C6C]={ category="ll", description="LATIN SMALL LETTER Z WITH DESCENDER", direction="l", linebreak="al", shcode=0x007A, uccode=0x2C6B, unicodeslot=0x2C6C, }, [0x2C6D]={ category="lu", description="LATIN CAPITAL LETTER ALPHA", direction="l", linebreak="al", unicodeslot=0x2C6D, }, [0x2C6E]={ category="lu", description="LATIN CAPITAL LETTER M WITH HOOK", direction="l", linebreak="al", unicodeslot=0x2C6E, }, [0x2C6F]={ category="lu", description="LATIN CAPITAL LETTER TURNED A", direction="l", linebreak="al", unicodeslot=0x2C6F, }, [0x2C70]={ category="lu", description="LATIN CAPITAL LETTER TURNED ALPHA", direction="l", linebreak="al", unicodeslot=0x2C70, }, [0x2C71]={ category="ll", description="LATIN SMALL LETTER V WITH RIGHT HOOK", direction="l", linebreak="al", unicodeslot=0x2C71, }, [0x2C72]={ category="lu", description="LATIN CAPITAL LETTER W WITH HOOK", direction="l", linebreak="al", unicodeslot=0x2C72, }, [0x2C73]={ category="ll", description="LATIN SMALL LETTER W WITH HOOK", direction="l", linebreak="al", unicodeslot=0x2C73, }, [0x2C74]={ category="ll", description="LATIN SMALL LETTER V WITH CURL", direction="l", linebreak="al", shcode=0x0076, unicodeslot=0x2C74, }, [0x2C75]={ category="lu", description="LATIN CAPITAL LETTER HALF H", direction="l", lccode=0x2C76, linebreak="al", unicodeslot=0x2C75, }, [0x2C76]={ category="ll", description="LATIN SMALL LETTER HALF H", direction="l", linebreak="al", uccode=0x2C75, unicodeslot=0x2C76, }, [0x2C77]={ category="ll", description="LATIN SMALL LETTER TAILLESS PHI", direction="l", linebreak="al", unicodeslot=0x2C77, }, [0x2C78]={ category="ll", description="LATIN SMALL LETTER E WITH NOTCH", direction="l", linebreak="al", unicodeslot=0x2C78, }, [0x2C79]={ category="ll", description="LATIN SMALL LETTER TURNED R WITH TAIL", direction="l", linebreak="al", unicodeslot=0x2C79, }, [0x2C7A]={ category="ll", description="LATIN SMALL LETTER O WITH LOW RING INSIDE", direction="l", linebreak="al", unicodeslot=0x2C7A, }, [0x2C7B]={ category="ll", description="LATIN LETTER SMALL CAPITAL TURNED E", direction="l", linebreak="al", unicodeslot=0x2C7B, }, [0x2C7C]={ category="ll", description="LATIN SUBSCRIPT SMALL LETTER J", direction="l", linebreak="al", specials={ "sub", 0x006A }, unicodeslot=0x2C7C, }, [0x2C7D]={ category="lm", description="MODIFIER LETTER CAPITAL V", direction="l", linebreak="al", specials={ "super", 0x0056 }, unicodeslot=0x2C7D, }, [0x2C7E]={ category="lu", description="LATIN CAPITAL LETTER S WITH SWASH TAIL", direction="l", linebreak="al", unicodeslot=0x2C7E, }, [0x2C7F]={ category="lu", description="LATIN CAPITAL LETTER Z WITH SWASH TAIL", direction="l", linebreak="al", unicodeslot=0x2C7F, }, [0x2C80]={ category="lu", description="COPTIC CAPITAL LETTER ALFA", direction="l", lccode=0x2C81, linebreak="al", unicodeslot=0x2C80, }, [0x2C81]={ category="ll", description="COPTIC SMALL LETTER ALFA", direction="l", linebreak="al", uccode=0x2C80, unicodeslot=0x2C81, }, [0x2C82]={ category="lu", description="COPTIC CAPITAL LETTER VIDA", direction="l", lccode=0x2C83, linebreak="al", unicodeslot=0x2C82, }, [0x2C83]={ category="ll", description="COPTIC SMALL LETTER VIDA", direction="l", linebreak="al", uccode=0x2C82, unicodeslot=0x2C83, }, [0x2C84]={ category="lu", description="COPTIC CAPITAL LETTER GAMMA", direction="l", lccode=0x2C85, linebreak="al", unicodeslot=0x2C84, }, [0x2C85]={ category="ll", description="COPTIC SMALL LETTER GAMMA", direction="l", linebreak="al", uccode=0x2C84, unicodeslot=0x2C85, }, [0x2C86]={ category="lu", description="COPTIC CAPITAL LETTER DALDA", direction="l", lccode=0x2C87, linebreak="al", unicodeslot=0x2C86, }, [0x2C87]={ category="ll", description="COPTIC SMALL LETTER DALDA", direction="l", linebreak="al", uccode=0x2C86, unicodeslot=0x2C87, }, [0x2C88]={ category="lu", description="COPTIC CAPITAL LETTER EIE", direction="l", lccode=0x2C89, linebreak="al", unicodeslot=0x2C88, }, [0x2C89]={ category="ll", description="COPTIC SMALL LETTER EIE", direction="l", linebreak="al", uccode=0x2C88, unicodeslot=0x2C89, }, [0x2C8A]={ category="lu", description="COPTIC CAPITAL LETTER SOU", direction="l", lccode=0x2C8B, linebreak="al", unicodeslot=0x2C8A, }, [0x2C8B]={ category="ll", description="COPTIC SMALL LETTER SOU", direction="l", linebreak="al", uccode=0x2C8A, unicodeslot=0x2C8B, }, [0x2C8C]={ category="lu", description="COPTIC CAPITAL LETTER ZATA", direction="l", lccode=0x2C8D, linebreak="al", unicodeslot=0x2C8C, }, [0x2C8D]={ category="ll", description="COPTIC SMALL LETTER ZATA", direction="l", linebreak="al", uccode=0x2C8C, unicodeslot=0x2C8D, }, [0x2C8E]={ category="lu", description="COPTIC CAPITAL LETTER HATE", direction="l", lccode=0x2C8F, linebreak="al", unicodeslot=0x2C8E, }, [0x2C8F]={ category="ll", description="COPTIC SMALL LETTER HATE", direction="l", linebreak="al", uccode=0x2C8E, unicodeslot=0x2C8F, }, [0x2C90]={ category="lu", description="COPTIC CAPITAL LETTER THETHE", direction="l", lccode=0x2C91, linebreak="al", unicodeslot=0x2C90, }, [0x2C91]={ category="ll", description="COPTIC SMALL LETTER THETHE", direction="l", linebreak="al", uccode=0x2C90, unicodeslot=0x2C91, }, [0x2C92]={ category="lu", description="COPTIC CAPITAL LETTER IAUDA", direction="l", lccode=0x2C93, linebreak="al", unicodeslot=0x2C92, }, [0x2C93]={ category="ll", description="COPTIC SMALL LETTER IAUDA", direction="l", linebreak="al", uccode=0x2C92, unicodeslot=0x2C93, }, [0x2C94]={ category="lu", description="COPTIC CAPITAL LETTER KAPA", direction="l", lccode=0x2C95, linebreak="al", unicodeslot=0x2C94, }, [0x2C95]={ category="ll", description="COPTIC SMALL LETTER KAPA", direction="l", linebreak="al", uccode=0x2C94, unicodeslot=0x2C95, }, [0x2C96]={ category="lu", description="COPTIC CAPITAL LETTER LAULA", direction="l", lccode=0x2C97, linebreak="al", unicodeslot=0x2C96, }, [0x2C97]={ category="ll", description="COPTIC SMALL LETTER LAULA", direction="l", linebreak="al", uccode=0x2C96, unicodeslot=0x2C97, }, [0x2C98]={ category="lu", description="COPTIC CAPITAL LETTER MI", direction="l", lccode=0x2C99, linebreak="al", unicodeslot=0x2C98, }, [0x2C99]={ category="ll", description="COPTIC SMALL LETTER MI", direction="l", linebreak="al", uccode=0x2C98, unicodeslot=0x2C99, }, [0x2C9A]={ category="lu", description="COPTIC CAPITAL LETTER NI", direction="l", lccode=0x2C9B, linebreak="al", unicodeslot=0x2C9A, }, [0x2C9B]={ category="ll", description="COPTIC SMALL LETTER NI", direction="l", linebreak="al", uccode=0x2C9A, unicodeslot=0x2C9B, }, [0x2C9C]={ category="lu", description="COPTIC CAPITAL LETTER KSI", direction="l", lccode=0x2C9D, linebreak="al", unicodeslot=0x2C9C, }, [0x2C9D]={ category="ll", description="COPTIC SMALL LETTER KSI", direction="l", linebreak="al", uccode=0x2C9C, unicodeslot=0x2C9D, }, [0x2C9E]={ category="lu", description="COPTIC CAPITAL LETTER O", direction="l", lccode=0x2C9F, linebreak="al", unicodeslot=0x2C9E, }, [0x2C9F]={ category="ll", description="COPTIC SMALL LETTER O", direction="l", linebreak="al", uccode=0x2C9E, unicodeslot=0x2C9F, }, [0x2CA0]={ category="lu", description="COPTIC CAPITAL LETTER PI", direction="l", lccode=0x2CA1, linebreak="al", unicodeslot=0x2CA0, }, [0x2CA1]={ category="ll", description="COPTIC SMALL LETTER PI", direction="l", linebreak="al", uccode=0x2CA0, unicodeslot=0x2CA1, }, [0x2CA2]={ category="lu", description="COPTIC CAPITAL LETTER RO", direction="l", lccode=0x2CA3, linebreak="al", unicodeslot=0x2CA2, }, [0x2CA3]={ category="ll", description="COPTIC SMALL LETTER RO", direction="l", linebreak="al", uccode=0x2CA2, unicodeslot=0x2CA3, }, [0x2CA4]={ category="lu", description="COPTIC CAPITAL LETTER SIMA", direction="l", lccode=0x2CA5, linebreak="al", unicodeslot=0x2CA4, }, [0x2CA5]={ category="ll", description="COPTIC SMALL LETTER SIMA", direction="l", linebreak="al", uccode=0x2CA4, unicodeslot=0x2CA5, }, [0x2CA6]={ category="lu", description="COPTIC CAPITAL LETTER TAU", direction="l", lccode=0x2CA7, linebreak="al", unicodeslot=0x2CA6, }, [0x2CA7]={ category="ll", description="COPTIC SMALL LETTER TAU", direction="l", linebreak="al", uccode=0x2CA6, unicodeslot=0x2CA7, }, [0x2CA8]={ category="lu", description="COPTIC CAPITAL LETTER UA", direction="l", lccode=0x2CA9, linebreak="al", unicodeslot=0x2CA8, }, [0x2CA9]={ category="ll", description="COPTIC SMALL LETTER UA", direction="l", linebreak="al", uccode=0x2CA8, unicodeslot=0x2CA9, }, [0x2CAA]={ category="lu", description="COPTIC CAPITAL LETTER FI", direction="l", lccode=0x2CAB, linebreak="al", unicodeslot=0x2CAA, }, [0x2CAB]={ category="ll", description="COPTIC SMALL LETTER FI", direction="l", linebreak="al", uccode=0x2CAA, unicodeslot=0x2CAB, }, [0x2CAC]={ category="lu", description="COPTIC CAPITAL LETTER KHI", direction="l", lccode=0x2CAD, linebreak="al", unicodeslot=0x2CAC, }, [0x2CAD]={ category="ll", description="COPTIC SMALL LETTER KHI", direction="l", linebreak="al", uccode=0x2CAC, unicodeslot=0x2CAD, }, [0x2CAE]={ category="lu", description="COPTIC CAPITAL LETTER PSI", direction="l", lccode=0x2CAF, linebreak="al", unicodeslot=0x2CAE, }, [0x2CAF]={ category="ll", description="COPTIC SMALL LETTER PSI", direction="l", linebreak="al", uccode=0x2CAE, unicodeslot=0x2CAF, }, [0x2CB0]={ category="lu", description="COPTIC CAPITAL LETTER OOU", direction="l", lccode=0x2CB1, linebreak="al", unicodeslot=0x2CB0, }, [0x2CB1]={ category="ll", description="COPTIC SMALL LETTER OOU", direction="l", linebreak="al", uccode=0x2CB0, unicodeslot=0x2CB1, }, [0x2CB2]={ category="lu", description="COPTIC CAPITAL LETTER DIALECT-P ALEF", direction="l", lccode=0x2CB3, linebreak="al", unicodeslot=0x2CB2, }, [0x2CB3]={ category="ll", description="COPTIC SMALL LETTER DIALECT-P ALEF", direction="l", linebreak="al", uccode=0x2CB2, unicodeslot=0x2CB3, }, [0x2CB4]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC AIN", direction="l", lccode=0x2CB5, linebreak="al", unicodeslot=0x2CB4, }, [0x2CB5]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC AIN", direction="l", linebreak="al", uccode=0x2CB4, unicodeslot=0x2CB5, }, [0x2CB6]={ category="lu", description="COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE", direction="l", lccode=0x2CB7, linebreak="al", unicodeslot=0x2CB6, }, [0x2CB7]={ category="ll", description="COPTIC SMALL LETTER CRYPTOGRAMMIC EIE", direction="l", linebreak="al", uccode=0x2CB6, unicodeslot=0x2CB7, }, [0x2CB8]={ category="lu", description="COPTIC CAPITAL LETTER DIALECT-P KAPA", direction="l", lccode=0x2CB9, linebreak="al", unicodeslot=0x2CB8, }, [0x2CB9]={ category="ll", description="COPTIC SMALL LETTER DIALECT-P KAPA", direction="l", linebreak="al", uccode=0x2CB8, unicodeslot=0x2CB9, }, [0x2CBA]={ category="lu", description="COPTIC CAPITAL LETTER DIALECT-P NI", direction="l", lccode=0x2CBB, linebreak="al", unicodeslot=0x2CBA, }, [0x2CBB]={ category="ll", description="COPTIC SMALL LETTER DIALECT-P NI", direction="l", linebreak="al", uccode=0x2CBA, unicodeslot=0x2CBB, }, [0x2CBC]={ category="lu", description="COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI", direction="l", lccode=0x2CBD, linebreak="al", unicodeslot=0x2CBC, }, [0x2CBD]={ category="ll", description="COPTIC SMALL LETTER CRYPTOGRAMMIC NI", direction="l", linebreak="al", uccode=0x2CBC, unicodeslot=0x2CBD, }, [0x2CBE]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC OOU", direction="l", lccode=0x2CBF, linebreak="al", unicodeslot=0x2CBE, }, [0x2CBF]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC OOU", direction="l", linebreak="al", uccode=0x2CBE, unicodeslot=0x2CBF, }, [0x2CC0]={ category="lu", description="COPTIC CAPITAL LETTER SAMPI", direction="l", lccode=0x2CC1, linebreak="al", unicodeslot=0x2CC0, }, [0x2CC1]={ category="ll", description="COPTIC SMALL LETTER SAMPI", direction="l", linebreak="al", uccode=0x2CC0, unicodeslot=0x2CC1, }, [0x2CC2]={ category="lu", description="COPTIC CAPITAL LETTER CROSSED SHEI", direction="l", lccode=0x2CC3, linebreak="al", unicodeslot=0x2CC2, }, [0x2CC3]={ category="ll", description="COPTIC SMALL LETTER CROSSED SHEI", direction="l", linebreak="al", uccode=0x2CC2, unicodeslot=0x2CC3, }, [0x2CC4]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC SHEI", direction="l", lccode=0x2CC5, linebreak="al", unicodeslot=0x2CC4, }, [0x2CC5]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC SHEI", direction="l", linebreak="al", uccode=0x2CC4, unicodeslot=0x2CC5, }, [0x2CC6]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC ESH", direction="l", lccode=0x2CC7, linebreak="al", unicodeslot=0x2CC6, }, [0x2CC7]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC ESH", direction="l", linebreak="al", uccode=0x2CC6, unicodeslot=0x2CC7, }, [0x2CC8]={ category="lu", description="COPTIC CAPITAL LETTER AKHMIMIC KHEI", direction="l", lccode=0x2CC9, linebreak="al", unicodeslot=0x2CC8, }, [0x2CC9]={ category="ll", description="COPTIC SMALL LETTER AKHMIMIC KHEI", direction="l", linebreak="al", uccode=0x2CC8, unicodeslot=0x2CC9, }, [0x2CCA]={ category="lu", description="COPTIC CAPITAL LETTER DIALECT-P HORI", direction="l", lccode=0x2CCB, linebreak="al", unicodeslot=0x2CCA, }, [0x2CCB]={ category="ll", description="COPTIC SMALL LETTER DIALECT-P HORI", direction="l", linebreak="al", uccode=0x2CCA, unicodeslot=0x2CCB, }, [0x2CCC]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC HORI", direction="l", lccode=0x2CCD, linebreak="al", unicodeslot=0x2CCC, }, [0x2CCD]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC HORI", direction="l", linebreak="al", uccode=0x2CCC, unicodeslot=0x2CCD, }, [0x2CCE]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC HA", direction="l", lccode=0x2CCF, linebreak="al", unicodeslot=0x2CCE, }, [0x2CCF]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC HA", direction="l", linebreak="al", uccode=0x2CCE, unicodeslot=0x2CCF, }, [0x2CD0]={ category="lu", description="COPTIC CAPITAL LETTER L-SHAPED HA", direction="l", lccode=0x2CD1, linebreak="al", unicodeslot=0x2CD0, }, [0x2CD1]={ category="ll", description="COPTIC SMALL LETTER L-SHAPED HA", direction="l", linebreak="al", uccode=0x2CD0, unicodeslot=0x2CD1, }, [0x2CD2]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC HEI", direction="l", lccode=0x2CD3, linebreak="al", unicodeslot=0x2CD2, }, [0x2CD3]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC HEI", direction="l", linebreak="al", uccode=0x2CD2, unicodeslot=0x2CD3, }, [0x2CD4]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC HAT", direction="l", lccode=0x2CD5, linebreak="al", unicodeslot=0x2CD4, }, [0x2CD5]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC HAT", direction="l", linebreak="al", uccode=0x2CD4, unicodeslot=0x2CD5, }, [0x2CD6]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC GANGIA", direction="l", lccode=0x2CD7, linebreak="al", unicodeslot=0x2CD6, }, [0x2CD7]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC GANGIA", direction="l", linebreak="al", uccode=0x2CD6, unicodeslot=0x2CD7, }, [0x2CD8]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC DJA", direction="l", lccode=0x2CD9, linebreak="al", unicodeslot=0x2CD8, }, [0x2CD9]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC DJA", direction="l", linebreak="al", uccode=0x2CD8, unicodeslot=0x2CD9, }, [0x2CDA]={ category="lu", description="COPTIC CAPITAL LETTER OLD COPTIC SHIMA", direction="l", lccode=0x2CDB, linebreak="al", unicodeslot=0x2CDA, }, [0x2CDB]={ category="ll", description="COPTIC SMALL LETTER OLD COPTIC SHIMA", direction="l", linebreak="al", uccode=0x2CDA, unicodeslot=0x2CDB, }, [0x2CDC]={ category="lu", description="COPTIC CAPITAL LETTER OLD NUBIAN SHIMA", direction="l", lccode=0x2CDD, linebreak="al", unicodeslot=0x2CDC, }, [0x2CDD]={ category="ll", description="COPTIC SMALL LETTER OLD NUBIAN SHIMA", direction="l", linebreak="al", uccode=0x2CDC, unicodeslot=0x2CDD, }, [0x2CDE]={ category="lu", description="COPTIC CAPITAL LETTER OLD NUBIAN NGI", direction="l", lccode=0x2CDF, linebreak="al", unicodeslot=0x2CDE, }, [0x2CDF]={ category="ll", description="COPTIC SMALL LETTER OLD NUBIAN NGI", direction="l", linebreak="al", uccode=0x2CDE, unicodeslot=0x2CDF, }, [0x2CE0]={ category="lu", description="COPTIC CAPITAL LETTER OLD NUBIAN NYI", direction="l", lccode=0x2CE1, linebreak="al", unicodeslot=0x2CE0, }, [0x2CE1]={ category="ll", description="COPTIC SMALL LETTER OLD NUBIAN NYI", direction="l", linebreak="al", uccode=0x2CE0, unicodeslot=0x2CE1, }, [0x2CE2]={ category="lu", description="COPTIC CAPITAL LETTER OLD NUBIAN WAU", direction="l", lccode=0x2CE3, linebreak="al", unicodeslot=0x2CE2, }, [0x2CE3]={ category="ll", description="COPTIC SMALL LETTER OLD NUBIAN WAU", direction="l", linebreak="al", uccode=0x2CE2, unicodeslot=0x2CE3, }, [0x2CE4]={ category="ll", description="COPTIC SYMBOL KAI", direction="l", linebreak="al", unicodeslot=0x2CE4, }, [0x2CE5]={ category="so", description="COPTIC SYMBOL MI RO", direction="on", linebreak="al", unicodeslot=0x2CE5, }, [0x2CE6]={ category="so", description="COPTIC SYMBOL PI RO", direction="on", linebreak="al", unicodeslot=0x2CE6, }, [0x2CE7]={ category="so", description="COPTIC SYMBOL STAUROS", direction="on", linebreak="al", unicodeslot=0x2CE7, }, [0x2CE8]={ category="so", description="COPTIC SYMBOL TAU RO", direction="on", linebreak="al", unicodeslot=0x2CE8, }, [0x2CE9]={ category="so", description="COPTIC SYMBOL KHI RO", direction="on", linebreak="al", unicodeslot=0x2CE9, }, [0x2CEA]={ category="so", description="COPTIC SYMBOL SHIMA SIMA", direction="on", linebreak="al", unicodeslot=0x2CEA, }, [0x2CEB]={ category="lu", description="COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI", direction="l", linebreak="al", unicodeslot=0x2CEB, }, [0x2CEC]={ category="ll", description="COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI", direction="l", linebreak="al", unicodeslot=0x2CEC, }, [0x2CED]={ category="lu", description="COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA", direction="l", linebreak="al", unicodeslot=0x2CED, }, [0x2CEE]={ category="ll", description="COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA", direction="l", linebreak="al", unicodeslot=0x2CEE, }, [0x2CEF]={ category="mn", description="COPTIC COMBINING NI ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x2CEF, }, [0x2CF0]={ category="mn", description="COPTIC COMBINING SPIRITUS ASPER", direction="nsm", linebreak="cm", unicodeslot=0x2CF0, }, [0x2CF1]={ category="mn", description="COPTIC COMBINING SPIRITUS LENIS", direction="nsm", linebreak="cm", unicodeslot=0x2CF1, }, [0x2CF2]={ category="lu", description="COPTIC CAPITAL LETTER BOHAIRIC KHEI", direction="l", linebreak="al", unicodeslot=0x2CF2, }, [0x2CF3]={ category="ll", description="COPTIC SMALL LETTER BOHAIRIC KHEI", direction="l", linebreak="al", unicodeslot=0x2CF3, }, [0x2CF9]={ category="po", description="COPTIC OLD NUBIAN FULL STOP", direction="on", linebreak="ex", unicodeslot=0x2CF9, }, [0x2CFA]={ category="po", description="COPTIC OLD NUBIAN DIRECT QUESTION MARK", direction="on", linebreak="ba", unicodeslot=0x2CFA, }, [0x2CFB]={ category="po", description="COPTIC OLD NUBIAN INDIRECT QUESTION MARK", direction="on", linebreak="ba", unicodeslot=0x2CFB, }, [0x2CFC]={ category="po", description="COPTIC OLD NUBIAN VERSE DIVIDER", direction="on", linebreak="ba", unicodeslot=0x2CFC, }, [0x2CFD]={ category="no", description="COPTIC FRACTION ONE HALF", direction="on", linebreak="al", unicodeslot=0x2CFD, }, [0x2CFE]={ category="po", description="COPTIC FULL STOP", direction="on", linebreak="ex", unicodeslot=0x2CFE, }, [0x2CFF]={ category="po", description="COPTIC MORPHOLOGICAL DIVIDER", direction="on", linebreak="ba", unicodeslot=0x2CFF, }, [0x2D00]={ category="ll", description="GEORGIAN SMALL LETTER AN", direction="l", linebreak="al", uccode=0x10A0, unicodeslot=0x2D00, }, [0x2D01]={ category="ll", description="GEORGIAN SMALL LETTER BAN", direction="l", linebreak="al", uccode=0x10A1, unicodeslot=0x2D01, }, [0x2D02]={ category="ll", description="GEORGIAN SMALL LETTER GAN", direction="l", linebreak="al", uccode=0x10A2, unicodeslot=0x2D02, }, [0x2D03]={ category="ll", description="GEORGIAN SMALL LETTER DON", direction="l", linebreak="al", uccode=0x10A3, unicodeslot=0x2D03, }, [0x2D04]={ category="ll", description="GEORGIAN SMALL LETTER EN", direction="l", linebreak="al", uccode=0x10A4, unicodeslot=0x2D04, }, [0x2D05]={ category="ll", description="GEORGIAN SMALL LETTER VIN", direction="l", linebreak="al", uccode=0x10A5, unicodeslot=0x2D05, }, [0x2D06]={ category="ll", description="GEORGIAN SMALL LETTER ZEN", direction="l", linebreak="al", uccode=0x10A6, unicodeslot=0x2D06, }, [0x2D07]={ category="ll", description="GEORGIAN SMALL LETTER TAN", direction="l", linebreak="al", uccode=0x10A7, unicodeslot=0x2D07, }, [0x2D08]={ category="ll", description="GEORGIAN SMALL LETTER IN", direction="l", linebreak="al", uccode=0x10A8, unicodeslot=0x2D08, }, [0x2D09]={ category="ll", description="GEORGIAN SMALL LETTER KAN", direction="l", linebreak="al", uccode=0x10A9, unicodeslot=0x2D09, }, [0x2D0A]={ category="ll", description="GEORGIAN SMALL LETTER LAS", direction="l", linebreak="al", uccode=0x10AA, unicodeslot=0x2D0A, }, [0x2D0B]={ category="ll", description="GEORGIAN SMALL LETTER MAN", direction="l", linebreak="al", uccode=0x10AB, unicodeslot=0x2D0B, }, [0x2D0C]={ category="ll", description="GEORGIAN SMALL LETTER NAR", direction="l", linebreak="al", uccode=0x10AC, unicodeslot=0x2D0C, }, [0x2D0D]={ category="ll", description="GEORGIAN SMALL LETTER ON", direction="l", linebreak="al", uccode=0x10AD, unicodeslot=0x2D0D, }, [0x2D0E]={ category="ll", description="GEORGIAN SMALL LETTER PAR", direction="l", linebreak="al", uccode=0x10AE, unicodeslot=0x2D0E, }, [0x2D0F]={ category="ll", description="GEORGIAN SMALL LETTER ZHAR", direction="l", linebreak="al", uccode=0x10AF, unicodeslot=0x2D0F, }, [0x2D10]={ category="ll", description="GEORGIAN SMALL LETTER RAE", direction="l", linebreak="al", uccode=0x10B0, unicodeslot=0x2D10, }, [0x2D11]={ category="ll", description="GEORGIAN SMALL LETTER SAN", direction="l", linebreak="al", uccode=0x10B1, unicodeslot=0x2D11, }, [0x2D12]={ category="ll", description="GEORGIAN SMALL LETTER TAR", direction="l", linebreak="al", uccode=0x10B2, unicodeslot=0x2D12, }, [0x2D13]={ category="ll", description="GEORGIAN SMALL LETTER UN", direction="l", linebreak="al", uccode=0x10B3, unicodeslot=0x2D13, }, [0x2D14]={ category="ll", description="GEORGIAN SMALL LETTER PHAR", direction="l", linebreak="al", uccode=0x10B4, unicodeslot=0x2D14, }, [0x2D15]={ category="ll", description="GEORGIAN SMALL LETTER KHAR", direction="l", linebreak="al", uccode=0x10B5, unicodeslot=0x2D15, }, [0x2D16]={ category="ll", description="GEORGIAN SMALL LETTER GHAN", direction="l", linebreak="al", uccode=0x10B6, unicodeslot=0x2D16, }, [0x2D17]={ category="ll", description="GEORGIAN SMALL LETTER QAR", direction="l", linebreak="al", uccode=0x10B7, unicodeslot=0x2D17, }, [0x2D18]={ category="ll", description="GEORGIAN SMALL LETTER SHIN", direction="l", linebreak="al", uccode=0x10B8, unicodeslot=0x2D18, }, [0x2D19]={ category="ll", description="GEORGIAN SMALL LETTER CHIN", direction="l", linebreak="al", uccode=0x10B9, unicodeslot=0x2D19, }, [0x2D1A]={ category="ll", description="GEORGIAN SMALL LETTER CAN", direction="l", linebreak="al", uccode=0x10BA, unicodeslot=0x2D1A, }, [0x2D1B]={ category="ll", description="GEORGIAN SMALL LETTER JIL", direction="l", linebreak="al", uccode=0x10BB, unicodeslot=0x2D1B, }, [0x2D1C]={ category="ll", description="GEORGIAN SMALL LETTER CIL", direction="l", linebreak="al", uccode=0x10BC, unicodeslot=0x2D1C, }, [0x2D1D]={ category="ll", description="GEORGIAN SMALL LETTER CHAR", direction="l", linebreak="al", uccode=0x10BD, unicodeslot=0x2D1D, }, [0x2D1E]={ category="ll", description="GEORGIAN SMALL LETTER XAN", direction="l", linebreak="al", uccode=0x10BE, unicodeslot=0x2D1E, }, [0x2D1F]={ category="ll", description="GEORGIAN SMALL LETTER JHAN", direction="l", linebreak="al", uccode=0x10BF, unicodeslot=0x2D1F, }, [0x2D20]={ category="ll", description="GEORGIAN SMALL LETTER HAE", direction="l", linebreak="al", uccode=0x10C0, unicodeslot=0x2D20, }, [0x2D21]={ category="ll", description="GEORGIAN SMALL LETTER HE", direction="l", linebreak="al", uccode=0x10C1, unicodeslot=0x2D21, }, [0x2D22]={ category="ll", description="GEORGIAN SMALL LETTER HIE", direction="l", linebreak="al", uccode=0x10C2, unicodeslot=0x2D22, }, [0x2D23]={ category="ll", description="GEORGIAN SMALL LETTER WE", direction="l", linebreak="al", uccode=0x10C3, unicodeslot=0x2D23, }, [0x2D24]={ category="ll", description="GEORGIAN SMALL LETTER HAR", direction="l", linebreak="al", uccode=0x10C4, unicodeslot=0x2D24, }, [0x2D25]={ category="ll", description="GEORGIAN SMALL LETTER HOE", direction="l", linebreak="al", uccode=0x10C5, unicodeslot=0x2D25, }, [0x2D27]={ category="ll", description="GEORGIAN SMALL LETTER YN", direction="l", linebreak="al", unicodeslot=0x2D27, }, [0x2D2D]={ category="ll", description="GEORGIAN SMALL LETTER AEN", direction="l", linebreak="al", unicodeslot=0x2D2D, }, [0x2D30]={ category="lo", description="TIFINAGH LETTER YA", direction="l", linebreak="al", unicodeslot=0x2D30, }, [0x2D31]={ category="lo", description="TIFINAGH LETTER YAB", direction="l", linebreak="al", unicodeslot=0x2D31, }, [0x2D32]={ category="lo", description="TIFINAGH LETTER YABH", direction="l", linebreak="al", unicodeslot=0x2D32, }, [0x2D33]={ category="lo", description="TIFINAGH LETTER YAG", direction="l", linebreak="al", unicodeslot=0x2D33, }, [0x2D34]={ category="lo", description="TIFINAGH LETTER YAGHH", direction="l", linebreak="al", unicodeslot=0x2D34, }, [0x2D35]={ category="lo", description="TIFINAGH LETTER BERBER ACADEMY YAJ", direction="l", linebreak="al", unicodeslot=0x2D35, }, [0x2D36]={ category="lo", description="TIFINAGH LETTER YAJ", direction="l", linebreak="al", unicodeslot=0x2D36, }, [0x2D37]={ category="lo", description="TIFINAGH LETTER YAD", direction="l", linebreak="al", unicodeslot=0x2D37, }, [0x2D38]={ category="lo", description="TIFINAGH LETTER YADH", direction="l", linebreak="al", unicodeslot=0x2D38, }, [0x2D39]={ category="lo", description="TIFINAGH LETTER YADD", direction="l", linebreak="al", unicodeslot=0x2D39, }, [0x2D3A]={ category="lo", description="TIFINAGH LETTER YADDH", direction="l", linebreak="al", unicodeslot=0x2D3A, }, [0x2D3B]={ category="lo", description="TIFINAGH LETTER YEY", direction="l", linebreak="al", unicodeslot=0x2D3B, }, [0x2D3C]={ category="lo", description="TIFINAGH LETTER YAF", direction="l", linebreak="al", unicodeslot=0x2D3C, }, [0x2D3D]={ category="lo", description="TIFINAGH LETTER YAK", direction="l", linebreak="al", unicodeslot=0x2D3D, }, [0x2D3E]={ category="lo", description="TIFINAGH LETTER TUAREG YAK", direction="l", linebreak="al", unicodeslot=0x2D3E, }, [0x2D3F]={ category="lo", description="TIFINAGH LETTER YAKHH", direction="l", linebreak="al", unicodeslot=0x2D3F, }, [0x2D40]={ category="lo", description="TIFINAGH LETTER YAH", direction="l", linebreak="al", unicodeslot=0x2D40, }, [0x2D41]={ category="lo", description="TIFINAGH LETTER BERBER ACADEMY YAH", direction="l", linebreak="al", unicodeslot=0x2D41, }, [0x2D42]={ category="lo", description="TIFINAGH LETTER TUAREG YAH", direction="l", linebreak="al", unicodeslot=0x2D42, }, [0x2D43]={ category="lo", description="TIFINAGH LETTER YAHH", direction="l", linebreak="al", unicodeslot=0x2D43, }, [0x2D44]={ category="lo", description="TIFINAGH LETTER YAA", direction="l", linebreak="al", unicodeslot=0x2D44, }, [0x2D45]={ category="lo", description="TIFINAGH LETTER YAKH", direction="l", linebreak="al", unicodeslot=0x2D45, }, [0x2D46]={ category="lo", description="TIFINAGH LETTER TUAREG YAKH", direction="l", linebreak="al", unicodeslot=0x2D46, }, [0x2D47]={ category="lo", description="TIFINAGH LETTER YAQ", direction="l", linebreak="al", unicodeslot=0x2D47, }, [0x2D48]={ category="lo", description="TIFINAGH LETTER TUAREG YAQ", direction="l", linebreak="al", unicodeslot=0x2D48, }, [0x2D49]={ category="lo", description="TIFINAGH LETTER YI", direction="l", linebreak="al", unicodeslot=0x2D49, }, [0x2D4A]={ category="lo", description="TIFINAGH LETTER YAZH", direction="l", linebreak="al", unicodeslot=0x2D4A, }, [0x2D4B]={ category="lo", description="TIFINAGH LETTER AHAGGAR YAZH", direction="l", linebreak="al", unicodeslot=0x2D4B, }, [0x2D4C]={ category="lo", description="TIFINAGH LETTER TUAREG YAZH", direction="l", linebreak="al", unicodeslot=0x2D4C, }, [0x2D4D]={ category="lo", description="TIFINAGH LETTER YAL", direction="l", linebreak="al", unicodeslot=0x2D4D, }, [0x2D4E]={ category="lo", description="TIFINAGH LETTER YAM", direction="l", linebreak="al", unicodeslot=0x2D4E, }, [0x2D4F]={ category="lo", description="TIFINAGH LETTER YAN", direction="l", linebreak="al", unicodeslot=0x2D4F, }, [0x2D50]={ category="lo", description="TIFINAGH LETTER TUAREG YAGN", direction="l", linebreak="al", unicodeslot=0x2D50, }, [0x2D51]={ category="lo", description="TIFINAGH LETTER TUAREG YANG", direction="l", linebreak="al", unicodeslot=0x2D51, }, [0x2D52]={ category="lo", description="TIFINAGH LETTER YAP", direction="l", linebreak="al", unicodeslot=0x2D52, }, [0x2D53]={ category="lo", description="TIFINAGH LETTER YU", direction="l", linebreak="al", unicodeslot=0x2D53, }, [0x2D54]={ category="lo", description="TIFINAGH LETTER YAR", direction="l", linebreak="al", unicodeslot=0x2D54, }, [0x2D55]={ category="lo", description="TIFINAGH LETTER YARR", direction="l", linebreak="al", unicodeslot=0x2D55, }, [0x2D56]={ category="lo", description="TIFINAGH LETTER YAGH", direction="l", linebreak="al", unicodeslot=0x2D56, }, [0x2D57]={ category="lo", description="TIFINAGH LETTER TUAREG YAGH", direction="l", linebreak="al", unicodeslot=0x2D57, }, [0x2D58]={ category="lo", description="TIFINAGH LETTER AYER YAGH", direction="l", linebreak="al", unicodeslot=0x2D58, }, [0x2D59]={ category="lo", description="TIFINAGH LETTER YAS", direction="l", linebreak="al", unicodeslot=0x2D59, }, [0x2D5A]={ category="lo", description="TIFINAGH LETTER YASS", direction="l", linebreak="al", unicodeslot=0x2D5A, }, [0x2D5B]={ category="lo", description="TIFINAGH LETTER YASH", direction="l", linebreak="al", unicodeslot=0x2D5B, }, [0x2D5C]={ category="lo", description="TIFINAGH LETTER YAT", direction="l", linebreak="al", unicodeslot=0x2D5C, }, [0x2D5D]={ category="lo", description="TIFINAGH LETTER YATH", direction="l", linebreak="al", unicodeslot=0x2D5D, }, [0x2D5E]={ category="lo", description="TIFINAGH LETTER YACH", direction="l", linebreak="al", unicodeslot=0x2D5E, }, [0x2D5F]={ category="lo", description="TIFINAGH LETTER YATT", direction="l", linebreak="al", unicodeslot=0x2D5F, }, [0x2D60]={ category="lo", description="TIFINAGH LETTER YAV", direction="l", linebreak="al", unicodeslot=0x2D60, }, [0x2D61]={ category="lo", description="TIFINAGH LETTER YAW", direction="l", linebreak="al", unicodeslot=0x2D61, }, [0x2D62]={ category="lo", description="TIFINAGH LETTER YAY", direction="l", linebreak="al", unicodeslot=0x2D62, }, [0x2D63]={ category="lo", description="TIFINAGH LETTER YAZ", direction="l", linebreak="al", unicodeslot=0x2D63, }, [0x2D64]={ category="lo", description="TIFINAGH LETTER TAWELLEMET YAZ", direction="l", linebreak="al", unicodeslot=0x2D64, }, [0x2D65]={ category="lo", description="TIFINAGH LETTER YAZZ", direction="l", linebreak="al", unicodeslot=0x2D65, }, [0x2D66]={ category="lo", description="TIFINAGH LETTER YE", direction="l", linebreak="al", unicodeslot=0x2D66, }, [0x2D67]={ category="lo", description="TIFINAGH LETTER YO", direction="l", linebreak="al", unicodeslot=0x2D67, }, [0x2D6F]={ category="lm", description="TIFINAGH MODIFIER LETTER LABIALIZATION MARK", direction="l", linebreak="al", specials={ "super", 0x2D61 }, unicodeslot=0x2D6F, }, [0x2D70]={ category="po", description="TIFINAGH SEPARATOR MARK", direction="l", linebreak="ba", unicodeslot=0x2D70, }, [0x2D7F]={ category="mn", description="TIFINAGH CONSONANT JOINER", direction="nsm", linebreak="cm", unicodeslot=0x2D7F, }, [0x2D80]={ category="lo", description="ETHIOPIC SYLLABLE LOA", direction="l", linebreak="al", unicodeslot=0x2D80, }, [0x2D81]={ category="lo", description="ETHIOPIC SYLLABLE MOA", direction="l", linebreak="al", unicodeslot=0x2D81, }, [0x2D82]={ category="lo", description="ETHIOPIC SYLLABLE ROA", direction="l", linebreak="al", unicodeslot=0x2D82, }, [0x2D83]={ category="lo", description="ETHIOPIC SYLLABLE SOA", direction="l", linebreak="al", unicodeslot=0x2D83, }, [0x2D84]={ category="lo", description="ETHIOPIC SYLLABLE SHOA", direction="l", linebreak="al", unicodeslot=0x2D84, }, [0x2D85]={ category="lo", description="ETHIOPIC SYLLABLE BOA", direction="l", linebreak="al", unicodeslot=0x2D85, }, [0x2D86]={ category="lo", description="ETHIOPIC SYLLABLE TOA", direction="l", linebreak="al", unicodeslot=0x2D86, }, [0x2D87]={ category="lo", description="ETHIOPIC SYLLABLE COA", direction="l", linebreak="al", unicodeslot=0x2D87, }, [0x2D88]={ category="lo", description="ETHIOPIC SYLLABLE NOA", direction="l", linebreak="al", unicodeslot=0x2D88, }, [0x2D89]={ category="lo", description="ETHIOPIC SYLLABLE NYOA", direction="l", linebreak="al", unicodeslot=0x2D89, }, [0x2D8A]={ category="lo", description="ETHIOPIC SYLLABLE GLOTTAL OA", direction="l", linebreak="al", unicodeslot=0x2D8A, }, [0x2D8B]={ category="lo", description="ETHIOPIC SYLLABLE ZOA", direction="l", linebreak="al", unicodeslot=0x2D8B, }, [0x2D8C]={ category="lo", description="ETHIOPIC SYLLABLE DOA", direction="l", linebreak="al", unicodeslot=0x2D8C, }, [0x2D8D]={ category="lo", description="ETHIOPIC SYLLABLE DDOA", direction="l", linebreak="al", unicodeslot=0x2D8D, }, [0x2D8E]={ category="lo", description="ETHIOPIC SYLLABLE JOA", direction="l", linebreak="al", unicodeslot=0x2D8E, }, [0x2D8F]={ category="lo", description="ETHIOPIC SYLLABLE THOA", direction="l", linebreak="al", unicodeslot=0x2D8F, }, [0x2D90]={ category="lo", description="ETHIOPIC SYLLABLE CHOA", direction="l", linebreak="al", unicodeslot=0x2D90, }, [0x2D91]={ category="lo", description="ETHIOPIC SYLLABLE PHOA", direction="l", linebreak="al", unicodeslot=0x2D91, }, [0x2D92]={ category="lo", description="ETHIOPIC SYLLABLE POA", direction="l", linebreak="al", unicodeslot=0x2D92, }, [0x2D93]={ category="lo", description="ETHIOPIC SYLLABLE GGWA", direction="l", linebreak="al", unicodeslot=0x2D93, }, [0x2D94]={ category="lo", description="ETHIOPIC SYLLABLE GGWI", direction="l", linebreak="al", unicodeslot=0x2D94, }, [0x2D95]={ category="lo", description="ETHIOPIC SYLLABLE GGWEE", direction="l", linebreak="al", unicodeslot=0x2D95, }, [0x2D96]={ category="lo", description="ETHIOPIC SYLLABLE GGWE", direction="l", linebreak="al", unicodeslot=0x2D96, }, [0x2DA0]={ category="lo", description="ETHIOPIC SYLLABLE SSA", direction="l", linebreak="al", unicodeslot=0x2DA0, }, [0x2DA1]={ category="lo", description="ETHIOPIC SYLLABLE SSU", direction="l", linebreak="al", unicodeslot=0x2DA1, }, [0x2DA2]={ category="lo", description="ETHIOPIC SYLLABLE SSI", direction="l", linebreak="al", unicodeslot=0x2DA2, }, [0x2DA3]={ category="lo", description="ETHIOPIC SYLLABLE SSAA", direction="l", linebreak="al", unicodeslot=0x2DA3, }, [0x2DA4]={ category="lo", description="ETHIOPIC SYLLABLE SSEE", direction="l", linebreak="al", unicodeslot=0x2DA4, }, [0x2DA5]={ category="lo", description="ETHIOPIC SYLLABLE SSE", direction="l", linebreak="al", unicodeslot=0x2DA5, }, [0x2DA6]={ category="lo", description="ETHIOPIC SYLLABLE SSO", direction="l", linebreak="al", unicodeslot=0x2DA6, }, [0x2DA8]={ category="lo", description="ETHIOPIC SYLLABLE CCA", direction="l", linebreak="al", unicodeslot=0x2DA8, }, [0x2DA9]={ category="lo", description="ETHIOPIC SYLLABLE CCU", direction="l", linebreak="al", unicodeslot=0x2DA9, }, [0x2DAA]={ category="lo", description="ETHIOPIC SYLLABLE CCI", direction="l", linebreak="al", unicodeslot=0x2DAA, }, [0x2DAB]={ category="lo", description="ETHIOPIC SYLLABLE CCAA", direction="l", linebreak="al", unicodeslot=0x2DAB, }, [0x2DAC]={ category="lo", description="ETHIOPIC SYLLABLE CCEE", direction="l", linebreak="al", unicodeslot=0x2DAC, }, [0x2DAD]={ category="lo", description="ETHIOPIC SYLLABLE CCE", direction="l", linebreak="al", unicodeslot=0x2DAD, }, [0x2DAE]={ category="lo", description="ETHIOPIC SYLLABLE CCO", direction="l", linebreak="al", unicodeslot=0x2DAE, }, [0x2DB0]={ category="lo", description="ETHIOPIC SYLLABLE ZZA", direction="l", linebreak="al", unicodeslot=0x2DB0, }, [0x2DB1]={ category="lo", description="ETHIOPIC SYLLABLE ZZU", direction="l", linebreak="al", unicodeslot=0x2DB1, }, [0x2DB2]={ category="lo", description="ETHIOPIC SYLLABLE ZZI", direction="l", linebreak="al", unicodeslot=0x2DB2, }, [0x2DB3]={ category="lo", description="ETHIOPIC SYLLABLE ZZAA", direction="l", linebreak="al", unicodeslot=0x2DB3, }, [0x2DB4]={ category="lo", cjkwd="w", description="ETHIOPIC SYLLABLE ZZEE", direction="l", linebreak="al", unicodeslot=0x2DB4, }, [0x2DB5]={ category="lo", cjkwd="w", description="ETHIOPIC SYLLABLE ZZE", direction="l", linebreak="al", unicodeslot=0x2DB5, }, [0x2DB6]={ category="lo", description="ETHIOPIC SYLLABLE ZZO", direction="l", linebreak="al", unicodeslot=0x2DB6, }, [0x2DB8]={ category="lo", description="ETHIOPIC SYLLABLE CCHA", direction="l", linebreak="al", unicodeslot=0x2DB8, }, [0x2DB9]={ category="lo", description="ETHIOPIC SYLLABLE CCHU", direction="l", linebreak="al", unicodeslot=0x2DB9, }, [0x2DBA]={ category="lo", description="ETHIOPIC SYLLABLE CCHI", direction="l", linebreak="al", unicodeslot=0x2DBA, }, [0x2DBB]={ category="lo", description="ETHIOPIC SYLLABLE CCHAA", direction="l", linebreak="id", unicodeslot=0x2DBB, }, [0x2DBC]={ category="lo", description="ETHIOPIC SYLLABLE CCHEE", direction="l", linebreak="id", unicodeslot=0x2DBC, }, [0x2DBD]={ category="lo", description="ETHIOPIC SYLLABLE CCHE", direction="l", linebreak="al", unicodeslot=0x2DBD, }, [0x2DBE]={ category="lo", description="ETHIOPIC SYLLABLE CCHO", direction="l", linebreak="al", unicodeslot=0x2DBE, }, [0x2DC0]={ category="lo", description="ETHIOPIC SYLLABLE QYA", direction="l", linebreak="al", unicodeslot=0x2DC0, }, [0x2DC1]={ category="lo", description="ETHIOPIC SYLLABLE QYU", direction="l", linebreak="al", unicodeslot=0x2DC1, }, [0x2DC2]={ category="lo", description="ETHIOPIC SYLLABLE QYI", direction="l", linebreak="al", unicodeslot=0x2DC2, }, [0x2DC3]={ category="lo", description="ETHIOPIC SYLLABLE QYAA", direction="l", linebreak="al", unicodeslot=0x2DC3, }, [0x2DC4]={ category="lo", description="ETHIOPIC SYLLABLE QYEE", direction="l", linebreak="al", unicodeslot=0x2DC4, }, [0x2DC5]={ category="lo", description="ETHIOPIC SYLLABLE QYE", direction="l", linebreak="al", unicodeslot=0x2DC5, }, [0x2DC6]={ category="lo", description="ETHIOPIC SYLLABLE QYO", direction="l", linebreak="al", unicodeslot=0x2DC6, }, [0x2DC8]={ category="lo", description="ETHIOPIC SYLLABLE KYA", direction="l", linebreak="al", unicodeslot=0x2DC8, }, [0x2DC9]={ category="lo", description="ETHIOPIC SYLLABLE KYU", direction="l", linebreak="al", unicodeslot=0x2DC9, }, [0x2DCA]={ category="lo", description="ETHIOPIC SYLLABLE KYI", direction="l", linebreak="al", unicodeslot=0x2DCA, }, [0x2DCB]={ category="lo", description="ETHIOPIC SYLLABLE KYAA", direction="l", linebreak="al", unicodeslot=0x2DCB, }, [0x2DCC]={ category="lo", description="ETHIOPIC SYLLABLE KYEE", direction="l", linebreak="al", unicodeslot=0x2DCC, }, [0x2DCD]={ category="lo", description="ETHIOPIC SYLLABLE KYE", direction="l", linebreak="al", unicodeslot=0x2DCD, }, [0x2DCE]={ category="lo", description="ETHIOPIC SYLLABLE KYO", direction="l", linebreak="al", unicodeslot=0x2DCE, }, [0x2DD0]={ category="lo", description="ETHIOPIC SYLLABLE XYA", direction="l", linebreak="al", unicodeslot=0x2DD0, }, [0x2DD1]={ category="lo", description="ETHIOPIC SYLLABLE XYU", direction="l", linebreak="al", unicodeslot=0x2DD1, }, [0x2DD2]={ category="lo", description="ETHIOPIC SYLLABLE XYI", direction="l", linebreak="al", unicodeslot=0x2DD2, }, [0x2DD3]={ category="lo", description="ETHIOPIC SYLLABLE XYAA", direction="l", linebreak="al", unicodeslot=0x2DD3, }, [0x2DD4]={ category="lo", description="ETHIOPIC SYLLABLE XYEE", direction="l", linebreak="al", unicodeslot=0x2DD4, }, [0x2DD5]={ category="lo", description="ETHIOPIC SYLLABLE XYE", direction="l", linebreak="al", unicodeslot=0x2DD5, }, [0x2DD6]={ category="lo", description="ETHIOPIC SYLLABLE XYO", direction="l", linebreak="al", unicodeslot=0x2DD6, }, [0x2DD8]={ category="lo", description="ETHIOPIC SYLLABLE GYA", direction="l", linebreak="al", unicodeslot=0x2DD8, }, [0x2DD9]={ category="lo", description="ETHIOPIC SYLLABLE GYU", direction="l", linebreak="al", unicodeslot=0x2DD9, }, [0x2DDA]={ category="lo", description="ETHIOPIC SYLLABLE GYI", direction="l", linebreak="al", unicodeslot=0x2DDA, }, [0x2DDB]={ category="lo", description="ETHIOPIC SYLLABLE GYAA", direction="l", linebreak="al", unicodeslot=0x2DDB, }, [0x2DDC]={ category="lo", description="ETHIOPIC SYLLABLE GYEE", direction="l", linebreak="al", unicodeslot=0x2DDC, }, [0x2DDD]={ category="lo", description="ETHIOPIC SYLLABLE GYE", direction="l", linebreak="al", unicodeslot=0x2DDD, }, [0x2DDE]={ category="lo", description="ETHIOPIC SYLLABLE GYO", direction="l", linebreak="al", unicodeslot=0x2DDE, }, [0x2DE0]={ category="mn", description="COMBINING CYRILLIC LETTER BE", direction="nsm", linebreak="cm", unicodeslot=0x2DE0, }, [0x2DE1]={ category="mn", description="COMBINING CYRILLIC LETTER VE", direction="nsm", linebreak="cm", unicodeslot=0x2DE1, }, [0x2DE2]={ category="mn", description="COMBINING CYRILLIC LETTER GHE", direction="nsm", linebreak="cm", unicodeslot=0x2DE2, }, [0x2DE3]={ category="mn", description="COMBINING CYRILLIC LETTER DE", direction="nsm", linebreak="cm", unicodeslot=0x2DE3, }, [0x2DE4]={ category="mn", description="COMBINING CYRILLIC LETTER ZHE", direction="nsm", linebreak="cm", unicodeslot=0x2DE4, }, [0x2DE5]={ category="mn", description="COMBINING CYRILLIC LETTER ZE", direction="nsm", linebreak="cm", unicodeslot=0x2DE5, }, [0x2DE6]={ category="mn", description="COMBINING CYRILLIC LETTER KA", direction="nsm", linebreak="cm", unicodeslot=0x2DE6, }, [0x2DE7]={ category="mn", description="COMBINING CYRILLIC LETTER EL", direction="nsm", linebreak="cm", unicodeslot=0x2DE7, }, [0x2DE8]={ category="mn", description="COMBINING CYRILLIC LETTER EM", direction="nsm", linebreak="cm", unicodeslot=0x2DE8, }, [0x2DE9]={ category="mn", description="COMBINING CYRILLIC LETTER EN", direction="nsm", linebreak="cm", unicodeslot=0x2DE9, }, [0x2DEA]={ category="mn", description="COMBINING CYRILLIC LETTER O", direction="nsm", linebreak="cm", unicodeslot=0x2DEA, }, [0x2DEB]={ category="mn", description="COMBINING CYRILLIC LETTER PE", direction="nsm", linebreak="cm", unicodeslot=0x2DEB, }, [0x2DEC]={ category="mn", description="COMBINING CYRILLIC LETTER ER", direction="nsm", linebreak="cm", unicodeslot=0x2DEC, }, [0x2DED]={ category="mn", description="COMBINING CYRILLIC LETTER ES", direction="nsm", linebreak="cm", unicodeslot=0x2DED, }, [0x2DEE]={ category="mn", description="COMBINING CYRILLIC LETTER TE", direction="nsm", linebreak="cm", unicodeslot=0x2DEE, }, [0x2DEF]={ category="mn", description="COMBINING CYRILLIC LETTER HA", direction="nsm", linebreak="cm", unicodeslot=0x2DEF, }, [0x2DF0]={ category="mn", description="COMBINING CYRILLIC LETTER TSE", direction="nsm", linebreak="cm", unicodeslot=0x2DF0, }, [0x2DF1]={ category="mn", description="COMBINING CYRILLIC LETTER CHE", direction="nsm", linebreak="cm", unicodeslot=0x2DF1, }, [0x2DF2]={ category="mn", description="COMBINING CYRILLIC LETTER SHA", direction="nsm", linebreak="cm", unicodeslot=0x2DF2, }, [0x2DF3]={ category="mn", description="COMBINING CYRILLIC LETTER SHCHA", direction="nsm", linebreak="cm", unicodeslot=0x2DF3, }, [0x2DF4]={ category="mn", description="COMBINING CYRILLIC LETTER FITA", direction="nsm", linebreak="cm", unicodeslot=0x2DF4, }, [0x2DF5]={ category="mn", description="COMBINING CYRILLIC LETTER ES-TE", direction="nsm", linebreak="cm", unicodeslot=0x2DF5, }, [0x2DF6]={ category="mn", cjkwd="w", description="COMBINING CYRILLIC LETTER A", direction="nsm", linebreak="cm", unicodeslot=0x2DF6, }, [0x2DF7]={ category="mn", cjkwd="w", description="COMBINING CYRILLIC LETTER IE", direction="nsm", linebreak="cm", unicodeslot=0x2DF7, }, [0x2DF8]={ category="mn", description="COMBINING CYRILLIC LETTER DJERV", direction="nsm", linebreak="cm", unicodeslot=0x2DF8, }, [0x2DF9]={ category="mn", description="COMBINING CYRILLIC LETTER MONOGRAPH UK", direction="nsm", linebreak="cm", unicodeslot=0x2DF9, }, [0x2DFA]={ category="mn", description="COMBINING CYRILLIC LETTER YAT", direction="nsm", linebreak="cm", unicodeslot=0x2DFA, }, [0x2DFB]={ category="mn", description="COMBINING CYRILLIC LETTER YU", direction="nsm", linebreak="cm", unicodeslot=0x2DFB, }, [0x2DFC]={ category="mn", description="COMBINING CYRILLIC LETTER IOTIFIED A", direction="nsm", linebreak="cm", unicodeslot=0x2DFC, }, [0x2DFD]={ category="mn", description="COMBINING CYRILLIC LETTER LITTLE YUS", direction="nsm", linebreak="id", unicodeslot=0x2DFD, }, [0x2DFE]={ category="mn", description="COMBINING CYRILLIC LETTER BIG YUS", direction="nsm", linebreak="id", unicodeslot=0x2DFE, }, [0x2DFF]={ category="mn", description="COMBINING CYRILLIC LETTER IOTIFIED BIG YUS", direction="nsm", linebreak="cm", unicodeslot=0x2DFF, }, [0x2E00]={ category="po", description="RIGHT ANGLE SUBSTITUTION MARKER", direction="on", linebreak="qu", unicodeslot=0x2E00, }, [0x2E01]={ category="po", description="RIGHT ANGLE DOTTED SUBSTITUTION MARKER", direction="on", linebreak="qu", unicodeslot=0x2E01, }, [0x2E02]={ category="pi", description="LEFT SUBSTITUTION BRACKET", direction="on", linebreak="qu", mirror=0x2E03, unicodeslot=0x2E02, }, [0x2E03]={ category="pf", description="RIGHT SUBSTITUTION BRACKET", direction="on", linebreak="qu", mirror=0x2E02, unicodeslot=0x2E03, }, [0x2E04]={ category="pi", description="LEFT DOTTED SUBSTITUTION BRACKET", direction="on", linebreak="qu", mirror=0x2E05, unicodeslot=0x2E04, }, [0x2E05]={ category="pf", description="RIGHT DOTTED SUBSTITUTION BRACKET", direction="on", linebreak="qu", mirror=0x2E04, unicodeslot=0x2E05, }, [0x2E06]={ category="po", description="RAISED INTERPOLATION MARKER", direction="on", linebreak="qu", unicodeslot=0x2E06, }, [0x2E07]={ category="po", description="RAISED DOTTED INTERPOLATION MARKER", direction="on", linebreak="qu", unicodeslot=0x2E07, }, [0x2E08]={ category="po", description="DOTTED TRANSPOSITION MARKER", direction="on", linebreak="qu", unicodeslot=0x2E08, }, [0x2E09]={ category="pi", description="LEFT TRANSPOSITION BRACKET", direction="on", linebreak="qu", mirror=0x2E0A, unicodeslot=0x2E09, }, [0x2E0A]={ category="pf", description="RIGHT TRANSPOSITION BRACKET", direction="on", linebreak="qu", mirror=0x2E09, unicodeslot=0x2E0A, }, [0x2E0B]={ category="po", description="RAISED SQUARE", direction="on", linebreak="qu", unicodeslot=0x2E0B, }, [0x2E0C]={ category="pi", description="LEFT RAISED OMISSION BRACKET", direction="on", linebreak="qu", mirror=0x2E0D, unicodeslot=0x2E0C, }, [0x2E0D]={ category="pf", description="RIGHT RAISED OMISSION BRACKET", direction="on", linebreak="qu", mirror=0x2E0C, unicodeslot=0x2E0D, }, [0x2E0E]={ category="po", description="EDITORIAL CORONIS", direction="on", linebreak="ba", unicodeslot=0x2E0E, }, [0x2E0F]={ category="po", description="PARAGRAPHOS", direction="on", linebreak="ba", unicodeslot=0x2E0F, }, [0x2E10]={ category="po", description="FORKED PARAGRAPHOS", direction="on", linebreak="ba", unicodeslot=0x2E10, }, [0x2E11]={ category="po", description="REVERSED FORKED PARAGRAPHOS", direction="on", linebreak="ba", unicodeslot=0x2E11, }, [0x2E12]={ category="po", description="HYPODIASTOLE", direction="on", linebreak="ba", unicodeslot=0x2E12, }, [0x2E13]={ category="po", description="DOTTED OBELOS", direction="on", linebreak="ba", unicodeslot=0x2E13, }, [0x2E14]={ category="po", description="DOWNWARDS ANCORA", direction="on", linebreak="ba", unicodeslot=0x2E14, }, [0x2E15]={ category="po", description="UPWARDS ANCORA", direction="on", linebreak="ba", unicodeslot=0x2E15, }, [0x2E16]={ category="po", description="DOTTED RIGHT-POINTING ANGLE", direction="on", linebreak="al", unicodeslot=0x2E16, }, [0x2E17]={ category="pd", description="DOUBLE OBLIQUE HYPHEN", direction="on", linebreak="ba", unicodeslot=0x2E17, }, [0x2E18]={ category="po", description="INVERTED INTERROBANG", direction="on", linebreak="op", unicodeslot=0x2E18, }, [0x2E19]={ category="po", description="PALM BRANCH", direction="on", linebreak="ba", unicodeslot=0x2E19, }, [0x2E1A]={ category="pd", description="HYPHEN WITH DIAERESIS", direction="on", linebreak="al", unicodeslot=0x2E1A, }, [0x2E1B]={ category="po", description="TILDE WITH RING ABOVE", direction="on", linebreak="al", unicodeslot=0x2E1B, }, [0x2E1C]={ category="pi", description="LEFT LOW PARAPHRASE BRACKET", direction="on", linebreak="qu", mirror=0x2E1D, unicodeslot=0x2E1C, }, [0x2E1D]={ category="pf", description="RIGHT LOW PARAPHRASE BRACKET", direction="on", linebreak="qu", mirror=0x2E1C, unicodeslot=0x2E1D, }, [0x2E1E]={ category="po", description="TILDE WITH DOT ABOVE", direction="on", linebreak="al", unicodeslot=0x2E1E, }, [0x2E1F]={ category="po", description="TILDE WITH DOT BELOW", direction="on", linebreak="al", unicodeslot=0x2E1F, }, [0x2E20]={ category="pi", description="LEFT VERTICAL BAR WITH QUILL", direction="on", linebreak="qu", mirror=0x2E21, unicodeslot=0x2E20, }, [0x2E21]={ category="pf", description="RIGHT VERTICAL BAR WITH QUILL", direction="on", linebreak="qu", mirror=0x2E20, unicodeslot=0x2E21, }, [0x2E22]={ category="ps", description="TOP LEFT HALF BRACKET", direction="on", linebreak="op", mirror=0x2E23, unicodeslot=0x2E22, }, [0x2E23]={ category="pe", description="TOP RIGHT HALF BRACKET", direction="on", linebreak="cl", mirror=0x2E22, unicodeslot=0x2E23, }, [0x2E24]={ category="ps", description="BOTTOM LEFT HALF BRACKET", direction="on", linebreak="op", mirror=0x2E25, unicodeslot=0x2E24, }, [0x2E25]={ category="pe", description="BOTTOM RIGHT HALF BRACKET", direction="on", linebreak="cl", mirror=0x2E24, unicodeslot=0x2E25, }, [0x2E26]={ category="ps", description="LEFT SIDEWAYS U BRACKET", direction="on", linebreak="op", mirror=0x2E27, unicodeslot=0x2E26, }, [0x2E27]={ category="pe", description="RIGHT SIDEWAYS U BRACKET", direction="on", linebreak="cl", mirror=0x2E26, unicodeslot=0x2E27, }, [0x2E28]={ category="ps", description="LEFT DOUBLE PARENTHESIS", direction="on", linebreak="op", mirror=0x2E29, unicodeslot=0x2E28, }, [0x2E29]={ category="pe", description="RIGHT DOUBLE PARENTHESIS", direction="on", linebreak="cl", mirror=0x2E28, unicodeslot=0x2E29, }, [0x2E2A]={ category="po", description="TWO DOTS OVER ONE DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x2E2A, }, [0x2E2B]={ category="po", description="ONE DOT OVER TWO DOTS PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x2E2B, }, [0x2E2C]={ category="po", description="SQUARED FOUR DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x2E2C, }, [0x2E2D]={ category="po", description="FIVE DOT MARK", direction="on", linebreak="ba", unicodeslot=0x2E2D, }, [0x2E2E]={ category="po", description="REVERSED QUESTION MARK", direction="on", linebreak="ex", unicodeslot=0x2E2E, }, [0x2E2F]={ category="lm", description="VERTICAL TILDE", direction="on", linebreak="al", unicodeslot=0x2E2F, }, [0x2E30]={ category="po", description="RING POINT", direction="on", linebreak="ba", unicodeslot=0x2E30, }, [0x2E31]={ category="po", description="WORD SEPARATOR MIDDLE DOT", direction="on", linebreak="ba", unicodeslot=0x2E31, }, [0x2E32]={ category="po", description="TURNED COMMA", direction="on", linebreak="al", unicodeslot=0x2E32, }, [0x2E33]={ category="po", description="RAISED DOT", direction="on", linebreak="ba", unicodeslot=0x2E33, }, [0x2E34]={ category="po", description="RAISED COMMA", direction="on", linebreak="ba", unicodeslot=0x2E34, }, [0x2E35]={ category="po", description="TURNED SEMICOLON", direction="on", linebreak="al", unicodeslot=0x2E35, }, [0x2E36]={ category="po", description="DAGGER WITH LEFT GUARD", direction="on", linebreak="al", unicodeslot=0x2E36, }, [0x2E37]={ category="po", description="DAGGER WITH RIGHT GUARD", direction="on", linebreak="al", unicodeslot=0x2E37, }, [0x2E38]={ category="po", description="TURNED DAGGER", direction="on", linebreak="al", unicodeslot=0x2E38, }, [0x2E39]={ category="po", description="TOP HALF SECTION SIGN", direction="on", linebreak="al", unicodeslot=0x2E39, }, [0x2E3A]={ category="pd", description="TWO-EM DASH", direction="on", linebreak="b2", unicodeslot=0x2E3A, }, [0x2E3B]={ category="pd", description="THREE-EM DASH", direction="on", linebreak="b2", unicodeslot=0x2E3B, }, [0x2E80]={ category="so", cjkwd="w", description="CJK RADICAL REPEAT", direction="on", linebreak="id", unicodeslot=0x2E80, }, [0x2E81]={ category="so", cjkwd="w", description="CJK RADICAL CLIFF", direction="on", linebreak="id", unicodeslot=0x2E81, }, [0x2E82]={ category="so", cjkwd="w", description="CJK RADICAL SECOND ONE", direction="on", linebreak="id", unicodeslot=0x2E82, }, [0x2E83]={ category="so", cjkwd="w", description="CJK RADICAL SECOND TWO", direction="on", linebreak="id", unicodeslot=0x2E83, }, [0x2E84]={ category="so", cjkwd="w", description="CJK RADICAL SECOND THREE", direction="on", linebreak="id", unicodeslot=0x2E84, }, [0x2E85]={ category="so", cjkwd="w", description="CJK RADICAL PERSON", direction="on", linebreak="id", unicodeslot=0x2E85, }, [0x2E86]={ category="so", cjkwd="w", description="CJK RADICAL BOX", direction="on", linebreak="id", unicodeslot=0x2E86, }, [0x2E87]={ category="so", cjkwd="w", description="CJK RADICAL TABLE", direction="on", linebreak="id", unicodeslot=0x2E87, }, [0x2E88]={ category="so", cjkwd="w", description="CJK RADICAL KNIFE ONE", direction="on", linebreak="id", unicodeslot=0x2E88, }, [0x2E89]={ category="so", cjkwd="w", description="CJK RADICAL KNIFE TWO", direction="on", linebreak="id", unicodeslot=0x2E89, }, [0x2E8A]={ category="so", cjkwd="w", description="CJK RADICAL DIVINATION", direction="on", linebreak="id", unicodeslot=0x2E8A, }, [0x2E8B]={ category="so", cjkwd="w", description="CJK RADICAL SEAL", direction="on", linebreak="id", unicodeslot=0x2E8B, }, [0x2E8C]={ category="so", cjkwd="w", description="CJK RADICAL SMALL ONE", direction="on", linebreak="id", unicodeslot=0x2E8C, }, [0x2E8D]={ category="so", cjkwd="w", description="CJK RADICAL SMALL TWO", direction="on", linebreak="id", unicodeslot=0x2E8D, }, [0x2E8E]={ category="so", cjkwd="w", description="CJK RADICAL LAME ONE", direction="on", linebreak="id", unicodeslot=0x2E8E, }, [0x2E8F]={ category="so", cjkwd="w", description="CJK RADICAL LAME TWO", direction="on", linebreak="id", unicodeslot=0x2E8F, }, [0x2E90]={ category="so", cjkwd="w", description="CJK RADICAL LAME THREE", direction="on", linebreak="id", unicodeslot=0x2E90, }, [0x2E91]={ category="so", cjkwd="w", description="CJK RADICAL LAME FOUR", direction="on", linebreak="id", unicodeslot=0x2E91, }, [0x2E92]={ category="so", cjkwd="w", description="CJK RADICAL SNAKE", direction="on", linebreak="id", unicodeslot=0x2E92, }, [0x2E93]={ category="so", cjkwd="w", description="CJK RADICAL THREAD", direction="on", linebreak="id", unicodeslot=0x2E93, }, [0x2E94]={ category="so", cjkwd="w", description="CJK RADICAL SNOUT ONE", direction="on", linebreak="id", unicodeslot=0x2E94, }, [0x2E95]={ category="so", cjkwd="w", description="CJK RADICAL SNOUT TWO", direction="on", linebreak="id", unicodeslot=0x2E95, }, [0x2E96]={ category="so", cjkwd="w", description="CJK RADICAL HEART ONE", direction="on", linebreak="id", unicodeslot=0x2E96, }, [0x2E97]={ category="so", cjkwd="w", description="CJK RADICAL HEART TWO", direction="on", linebreak="id", unicodeslot=0x2E97, }, [0x2E98]={ category="so", cjkwd="w", description="CJK RADICAL HAND", direction="on", linebreak="id", unicodeslot=0x2E98, }, [0x2E99]={ category="so", cjkwd="w", description="CJK RADICAL RAP", direction="on", linebreak="id", unicodeslot=0x2E99, }, [0x2E9B]={ category="so", cjkwd="w", description="CJK RADICAL CHOKE", direction="on", linebreak="id", unicodeslot=0x2E9B, }, [0x2E9C]={ category="so", cjkwd="w", description="CJK RADICAL SUN", direction="on", linebreak="id", unicodeslot=0x2E9C, }, [0x2E9D]={ category="so", cjkwd="w", description="CJK RADICAL MOON", direction="on", linebreak="id", unicodeslot=0x2E9D, }, [0x2E9E]={ category="so", cjkwd="w", description="CJK RADICAL DEATH", direction="on", linebreak="id", unicodeslot=0x2E9E, }, [0x2E9F]={ category="so", cjkwd="w", description="CJK RADICAL MOTHER", direction="on", linebreak="id", specials={ "compat", 0x6BCD }, unicodeslot=0x2E9F, }, [0x2EA0]={ category="so", cjkwd="w", description="CJK RADICAL CIVILIAN", direction="on", linebreak="id", unicodeslot=0x2EA0, }, [0x2EA1]={ category="so", cjkwd="w", description="CJK RADICAL WATER ONE", direction="on", linebreak="id", unicodeslot=0x2EA1, }, [0x2EA2]={ category="so", cjkwd="w", description="CJK RADICAL WATER TWO", direction="on", linebreak="id", unicodeslot=0x2EA2, }, [0x2EA3]={ category="so", cjkwd="w", description="CJK RADICAL FIRE", direction="on", linebreak="id", unicodeslot=0x2EA3, }, [0x2EA4]={ category="so", cjkwd="w", description="CJK RADICAL PAW ONE", direction="on", linebreak="id", unicodeslot=0x2EA4, }, [0x2EA5]={ category="so", cjkwd="w", description="CJK RADICAL PAW TWO", direction="on", linebreak="id", unicodeslot=0x2EA5, }, [0x2EA6]={ category="so", cjkwd="w", description="CJK RADICAL SIMPLIFIED HALF TREE TRUNK", direction="on", linebreak="id", unicodeslot=0x2EA6, }, [0x2EA7]={ category="so", cjkwd="w", description="CJK RADICAL COW", direction="on", linebreak="id", unicodeslot=0x2EA7, }, [0x2EA8]={ category="so", cjkwd="w", description="CJK RADICAL DOG", direction="on", linebreak="id", unicodeslot=0x2EA8, }, [0x2EA9]={ category="so", cjkwd="w", description="CJK RADICAL JADE", direction="on", linebreak="id", unicodeslot=0x2EA9, }, [0x2EAA]={ category="so", cjkwd="w", description="CJK RADICAL BOLT OF CLOTH", direction="on", linebreak="id", unicodeslot=0x2EAA, }, [0x2EAB]={ category="so", cjkwd="w", description="CJK RADICAL EYE", direction="on", linebreak="id", unicodeslot=0x2EAB, }, [0x2EAC]={ category="so", cjkwd="w", description="CJK RADICAL SPIRIT ONE", direction="on", linebreak="id", unicodeslot=0x2EAC, }, [0x2EAD]={ category="so", cjkwd="w", description="CJK RADICAL SPIRIT TWO", direction="on", linebreak="id", unicodeslot=0x2EAD, }, [0x2EAE]={ category="so", cjkwd="w", description="CJK RADICAL BAMBOO", direction="on", linebreak="id", unicodeslot=0x2EAE, }, [0x2EAF]={ category="so", cjkwd="w", description="CJK RADICAL SILK", direction="on", linebreak="id", unicodeslot=0x2EAF, }, [0x2EB0]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED SILK", direction="on", linebreak="id", unicodeslot=0x2EB0, }, [0x2EB1]={ category="so", cjkwd="w", description="CJK RADICAL NET ONE", direction="on", linebreak="id", unicodeslot=0x2EB1, }, [0x2EB2]={ category="so", cjkwd="w", description="CJK RADICAL NET TWO", direction="on", linebreak="id", unicodeslot=0x2EB2, }, [0x2EB3]={ category="so", cjkwd="w", description="CJK RADICAL NET THREE", direction="on", linebreak="id", unicodeslot=0x2EB3, }, [0x2EB4]={ category="so", cjkwd="w", description="CJK RADICAL NET FOUR", direction="on", linebreak="id", unicodeslot=0x2EB4, }, [0x2EB5]={ category="so", cjkwd="w", description="CJK RADICAL MESH", direction="on", linebreak="id", unicodeslot=0x2EB5, }, [0x2EB6]={ category="so", cjkwd="w", description="CJK RADICAL SHEEP", direction="on", linebreak="id", unicodeslot=0x2EB6, }, [0x2EB7]={ category="so", cjkwd="w", description="CJK RADICAL RAM", direction="on", linebreak="id", unicodeslot=0x2EB7, }, [0x2EB8]={ category="so", cjkwd="w", description="CJK RADICAL EWE", direction="on", linebreak="id", unicodeslot=0x2EB8, }, [0x2EB9]={ category="so", cjkwd="w", description="CJK RADICAL OLD", direction="on", linebreak="id", unicodeslot=0x2EB9, }, [0x2EBA]={ category="so", cjkwd="w", description="CJK RADICAL BRUSH ONE", direction="on", linebreak="id", unicodeslot=0x2EBA, }, [0x2EBB]={ category="so", cjkwd="w", description="CJK RADICAL BRUSH TWO", direction="on", linebreak="id", unicodeslot=0x2EBB, }, [0x2EBC]={ category="so", cjkwd="w", description="CJK RADICAL MEAT", direction="on", linebreak="id", unicodeslot=0x2EBC, }, [0x2EBD]={ category="so", cjkwd="w", description="CJK RADICAL MORTAR", direction="on", linebreak="id", unicodeslot=0x2EBD, }, [0x2EBE]={ category="so", cjkwd="w", description="CJK RADICAL GRASS ONE", direction="on", linebreak="id", unicodeslot=0x2EBE, }, [0x2EBF]={ category="so", cjkwd="w", description="CJK RADICAL GRASS TWO", direction="on", linebreak="id", unicodeslot=0x2EBF, }, [0x2EC0]={ category="so", cjkwd="w", description="CJK RADICAL GRASS THREE", direction="on", linebreak="id", unicodeslot=0x2EC0, }, [0x2EC1]={ category="so", cjkwd="w", description="CJK RADICAL TIGER", direction="on", linebreak="id", unicodeslot=0x2EC1, }, [0x2EC2]={ category="so", cjkwd="w", description="CJK RADICAL CLOTHES", direction="on", linebreak="id", unicodeslot=0x2EC2, }, [0x2EC3]={ category="so", cjkwd="w", description="CJK RADICAL WEST ONE", direction="on", linebreak="id", unicodeslot=0x2EC3, }, [0x2EC4]={ category="so", cjkwd="w", description="CJK RADICAL WEST TWO", direction="on", linebreak="id", unicodeslot=0x2EC4, }, [0x2EC5]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED SEE", direction="on", linebreak="id", unicodeslot=0x2EC5, }, [0x2EC6]={ category="so", cjkwd="w", description="CJK RADICAL SIMPLIFIED HORN", direction="on", linebreak="id", unicodeslot=0x2EC6, }, [0x2EC7]={ category="so", cjkwd="w", description="CJK RADICAL HORN", direction="on", linebreak="id", unicodeslot=0x2EC7, }, [0x2EC8]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED SPEECH", direction="on", linebreak="id", unicodeslot=0x2EC8, }, [0x2EC9]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED SHELL", direction="on", linebreak="id", unicodeslot=0x2EC9, }, [0x2ECA]={ category="so", cjkwd="w", description="CJK RADICAL FOOT", direction="on", linebreak="id", unicodeslot=0x2ECA, }, [0x2ECB]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED CART", direction="on", linebreak="id", unicodeslot=0x2ECB, }, [0x2ECC]={ category="so", cjkwd="w", description="CJK RADICAL SIMPLIFIED WALK", direction="on", linebreak="id", unicodeslot=0x2ECC, }, [0x2ECD]={ category="so", cjkwd="w", description="CJK RADICAL WALK ONE", direction="on", linebreak="id", unicodeslot=0x2ECD, }, [0x2ECE]={ category="so", cjkwd="w", description="CJK RADICAL WALK TWO", direction="on", linebreak="id", unicodeslot=0x2ECE, }, [0x2ECF]={ category="so", cjkwd="w", description="CJK RADICAL CITY", direction="on", linebreak="id", unicodeslot=0x2ECF, }, [0x2ED0]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED GOLD", direction="on", linebreak="id", unicodeslot=0x2ED0, }, [0x2ED1]={ category="so", cjkwd="w", description="CJK RADICAL LONG ONE", direction="on", linebreak="id", unicodeslot=0x2ED1, }, [0x2ED2]={ category="so", cjkwd="w", description="CJK RADICAL LONG TWO", direction="on", linebreak="id", unicodeslot=0x2ED2, }, [0x2ED3]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED LONG", direction="on", linebreak="id", unicodeslot=0x2ED3, }, [0x2ED4]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED GATE", direction="on", linebreak="id", unicodeslot=0x2ED4, }, [0x2ED5]={ category="so", cjkwd="w", description="CJK RADICAL MOUND ONE", direction="on", linebreak="id", unicodeslot=0x2ED5, }, [0x2ED6]={ category="so", cjkwd="w", description="CJK RADICAL MOUND TWO", direction="on", linebreak="id", unicodeslot=0x2ED6, }, [0x2ED7]={ category="so", cjkwd="w", description="CJK RADICAL RAIN", direction="on", linebreak="id", unicodeslot=0x2ED7, }, [0x2ED8]={ category="so", cjkwd="w", description="CJK RADICAL BLUE", direction="on", linebreak="id", unicodeslot=0x2ED8, }, [0x2ED9]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED TANNED LEATHER", direction="on", linebreak="id", unicodeslot=0x2ED9, }, [0x2EDA]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED LEAF", direction="on", linebreak="id", unicodeslot=0x2EDA, }, [0x2EDB]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED WIND", direction="on", linebreak="id", unicodeslot=0x2EDB, }, [0x2EDC]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED FLY", direction="on", linebreak="id", unicodeslot=0x2EDC, }, [0x2EDD]={ category="so", cjkwd="w", description="CJK RADICAL EAT ONE", direction="on", linebreak="id", unicodeslot=0x2EDD, }, [0x2EDE]={ category="so", cjkwd="w", description="CJK RADICAL EAT TWO", direction="on", linebreak="id", unicodeslot=0x2EDE, }, [0x2EDF]={ category="so", cjkwd="w", description="CJK RADICAL EAT THREE", direction="on", linebreak="id", unicodeslot=0x2EDF, }, [0x2EE0]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED EAT", direction="on", linebreak="id", unicodeslot=0x2EE0, }, [0x2EE1]={ category="so", cjkwd="w", description="CJK RADICAL HEAD", direction="on", linebreak="id", unicodeslot=0x2EE1, }, [0x2EE2]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED HORSE", direction="on", linebreak="id", unicodeslot=0x2EE2, }, [0x2EE3]={ category="so", cjkwd="w", description="CJK RADICAL BONE", direction="on", linebreak="id", unicodeslot=0x2EE3, }, [0x2EE4]={ category="so", cjkwd="w", description="CJK RADICAL GHOST", direction="on", linebreak="id", unicodeslot=0x2EE4, }, [0x2EE5]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED FISH", direction="on", linebreak="id", unicodeslot=0x2EE5, }, [0x2EE6]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED BIRD", direction="on", linebreak="id", unicodeslot=0x2EE6, }, [0x2EE7]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED SALT", direction="on", linebreak="id", unicodeslot=0x2EE7, }, [0x2EE8]={ category="so", cjkwd="w", description="CJK RADICAL SIMPLIFIED WHEAT", direction="on", linebreak="id", unicodeslot=0x2EE8, }, [0x2EE9]={ category="so", cjkwd="w", description="CJK RADICAL SIMPLIFIED YELLOW", direction="on", linebreak="id", unicodeslot=0x2EE9, }, [0x2EEA]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED FROG", direction="on", linebreak="id", unicodeslot=0x2EEA, }, [0x2EEB]={ category="so", cjkwd="w", description="CJK RADICAL J-SIMPLIFIED EVEN", direction="on", linebreak="id", unicodeslot=0x2EEB, }, [0x2EEC]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED EVEN", direction="on", linebreak="id", unicodeslot=0x2EEC, }, [0x2EED]={ category="so", cjkwd="w", description="CJK RADICAL J-SIMPLIFIED TOOTH", direction="on", linebreak="id", unicodeslot=0x2EED, }, [0x2EEE]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED TOOTH", direction="on", linebreak="id", unicodeslot=0x2EEE, }, [0x2EEF]={ category="so", cjkwd="w", description="CJK RADICAL J-SIMPLIFIED DRAGON", direction="on", linebreak="id", unicodeslot=0x2EEF, }, [0x2EF0]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED DRAGON", direction="on", linebreak="id", unicodeslot=0x2EF0, }, [0x2EF1]={ category="so", cjkwd="w", description="CJK RADICAL TURTLE", direction="on", linebreak="id", unicodeslot=0x2EF1, }, [0x2EF2]={ category="so", cjkwd="w", description="CJK RADICAL J-SIMPLIFIED TURTLE", direction="on", linebreak="id", unicodeslot=0x2EF2, }, [0x2EF3]={ category="so", cjkwd="w", description="CJK RADICAL C-SIMPLIFIED TURTLE", direction="on", linebreak="id", specials={ "compat", 0x9F9F }, unicodeslot=0x2EF3, }, [0x2F00]={ category="so", cjkwd="w", description="KANGXI RADICAL ONE", direction="on", linebreak="id", specials={ "compat", 0x4E00 }, unicodeslot=0x2F00, }, [0x2F01]={ category="so", cjkwd="w", description="KANGXI RADICAL LINE", direction="on", linebreak="id", specials={ "compat", 0x4E28 }, unicodeslot=0x2F01, }, [0x2F02]={ category="so", cjkwd="w", description="KANGXI RADICAL DOT", direction="on", linebreak="id", specials={ "compat", 0x4E36 }, unicodeslot=0x2F02, }, [0x2F03]={ category="so", cjkwd="w", description="KANGXI RADICAL SLASH", direction="on", linebreak="id", specials={ "compat", 0x4E3F }, unicodeslot=0x2F03, }, [0x2F04]={ category="so", cjkwd="w", description="KANGXI RADICAL SECOND", direction="on", linebreak="id", specials={ "compat", 0x4E59 }, unicodeslot=0x2F04, }, [0x2F05]={ category="so", cjkwd="w", description="KANGXI RADICAL HOOK", direction="on", linebreak="id", specials={ "compat", 0x4E85 }, unicodeslot=0x2F05, }, [0x2F06]={ category="so", cjkwd="w", description="KANGXI RADICAL TWO", direction="on", linebreak="id", specials={ "compat", 0x4E8C }, unicodeslot=0x2F06, }, [0x2F07]={ category="so", cjkwd="w", description="KANGXI RADICAL LID", direction="on", linebreak="id", specials={ "compat", 0x4EA0 }, unicodeslot=0x2F07, }, [0x2F08]={ category="so", cjkwd="w", description="KANGXI RADICAL MAN", direction="on", linebreak="id", specials={ "compat", 0x4EBA }, unicodeslot=0x2F08, }, [0x2F09]={ category="so", cjkwd="w", description="KANGXI RADICAL LEGS", direction="on", linebreak="id", specials={ "compat", 0x513F }, unicodeslot=0x2F09, }, [0x2F0A]={ category="so", cjkwd="w", description="KANGXI RADICAL ENTER", direction="on", linebreak="id", specials={ "compat", 0x5165 }, unicodeslot=0x2F0A, }, [0x2F0B]={ category="so", cjkwd="w", description="KANGXI RADICAL EIGHT", direction="on", linebreak="id", specials={ "compat", 0x516B }, unicodeslot=0x2F0B, }, [0x2F0C]={ category="so", cjkwd="w", description="KANGXI RADICAL DOWN BOX", direction="on", linebreak="id", specials={ "compat", 0x5182 }, unicodeslot=0x2F0C, }, [0x2F0D]={ category="so", cjkwd="w", description="KANGXI RADICAL COVER", direction="on", linebreak="id", specials={ "compat", 0x5196 }, unicodeslot=0x2F0D, }, [0x2F0E]={ category="so", cjkwd="w", description="KANGXI RADICAL ICE", direction="on", linebreak="id", specials={ "compat", 0x51AB }, unicodeslot=0x2F0E, }, [0x2F0F]={ category="so", cjkwd="w", description="KANGXI RADICAL TABLE", direction="on", linebreak="id", specials={ "compat", 0x51E0 }, unicodeslot=0x2F0F, }, [0x2F10]={ category="so", cjkwd="w", description="KANGXI RADICAL OPEN BOX", direction="on", linebreak="id", specials={ "compat", 0x51F5 }, unicodeslot=0x2F10, }, [0x2F11]={ category="so", cjkwd="w", description="KANGXI RADICAL KNIFE", direction="on", linebreak="id", specials={ "compat", 0x5200 }, unicodeslot=0x2F11, }, [0x2F12]={ category="so", cjkwd="w", description="KANGXI RADICAL POWER", direction="on", linebreak="id", specials={ "compat", 0x529B }, unicodeslot=0x2F12, }, [0x2F13]={ category="so", cjkwd="w", description="KANGXI RADICAL WRAP", direction="on", linebreak="id", specials={ "compat", 0x52F9 }, unicodeslot=0x2F13, }, [0x2F14]={ category="so", cjkwd="w", description="KANGXI RADICAL SPOON", direction="on", linebreak="id", specials={ "compat", 0x5315 }, unicodeslot=0x2F14, }, [0x2F15]={ category="so", cjkwd="w", description="KANGXI RADICAL RIGHT OPEN BOX", direction="on", linebreak="id", specials={ "compat", 0x531A }, unicodeslot=0x2F15, }, [0x2F16]={ category="so", cjkwd="w", description="KANGXI RADICAL HIDING ENCLOSURE", direction="on", linebreak="id", specials={ "compat", 0x5338 }, unicodeslot=0x2F16, }, [0x2F17]={ category="so", cjkwd="w", description="KANGXI RADICAL TEN", direction="on", linebreak="id", specials={ "compat", 0x5341 }, unicodeslot=0x2F17, }, [0x2F18]={ category="so", cjkwd="w", description="KANGXI RADICAL DIVINATION", direction="on", linebreak="id", specials={ "compat", 0x535C }, unicodeslot=0x2F18, }, [0x2F19]={ category="so", cjkwd="w", description="KANGXI RADICAL SEAL", direction="on", linebreak="id", specials={ "compat", 0x5369 }, unicodeslot=0x2F19, }, [0x2F1A]={ category="so", cjkwd="w", description="KANGXI RADICAL CLIFF", direction="on", linebreak="id", specials={ "compat", 0x5382 }, unicodeslot=0x2F1A, }, [0x2F1B]={ category="so", cjkwd="w", description="KANGXI RADICAL PRIVATE", direction="on", linebreak="id", specials={ "compat", 0x53B6 }, unicodeslot=0x2F1B, }, [0x2F1C]={ category="so", cjkwd="w", description="KANGXI RADICAL AGAIN", direction="on", linebreak="id", specials={ "compat", 0x53C8 }, unicodeslot=0x2F1C, }, [0x2F1D]={ category="so", cjkwd="w", description="KANGXI RADICAL MOUTH", direction="on", linebreak="id", specials={ "compat", 0x53E3 }, unicodeslot=0x2F1D, }, [0x2F1E]={ category="so", cjkwd="w", description="KANGXI RADICAL ENCLOSURE", direction="on", linebreak="id", specials={ "compat", 0x56D7 }, unicodeslot=0x2F1E, }, [0x2F1F]={ category="so", cjkwd="w", description="KANGXI RADICAL EARTH", direction="on", linebreak="id", specials={ "compat", 0x571F }, unicodeslot=0x2F1F, }, [0x2F20]={ category="so", cjkwd="w", description="KANGXI RADICAL SCHOLAR", direction="on", linebreak="id", specials={ "compat", 0x58EB }, unicodeslot=0x2F20, }, [0x2F21]={ category="so", cjkwd="w", description="KANGXI RADICAL GO", direction="on", linebreak="id", specials={ "compat", 0x5902 }, unicodeslot=0x2F21, }, [0x2F22]={ category="so", cjkwd="w", description="KANGXI RADICAL GO SLOWLY", direction="on", linebreak="id", specials={ "compat", 0x590A }, unicodeslot=0x2F22, }, [0x2F23]={ category="so", cjkwd="w", description="KANGXI RADICAL EVENING", direction="on", linebreak="id", specials={ "compat", 0x5915 }, unicodeslot=0x2F23, }, [0x2F24]={ category="so", cjkwd="w", description="KANGXI RADICAL BIG", direction="on", linebreak="id", specials={ "compat", 0x5927 }, unicodeslot=0x2F24, }, [0x2F25]={ category="so", cjkwd="w", description="KANGXI RADICAL WOMAN", direction="on", linebreak="id", specials={ "compat", 0x5973 }, unicodeslot=0x2F25, }, [0x2F26]={ category="so", cjkwd="w", description="KANGXI RADICAL CHILD", direction="on", linebreak="id", specials={ "compat", 0x5B50 }, unicodeslot=0x2F26, }, [0x2F27]={ category="so", cjkwd="w", description="KANGXI RADICAL ROOF", direction="on", linebreak="id", specials={ "compat", 0x5B80 }, unicodeslot=0x2F27, }, [0x2F28]={ category="so", cjkwd="w", description="KANGXI RADICAL INCH", direction="on", linebreak="id", specials={ "compat", 0x5BF8 }, unicodeslot=0x2F28, }, [0x2F29]={ category="so", cjkwd="w", description="KANGXI RADICAL SMALL", direction="on", linebreak="id", specials={ "compat", 0x5C0F }, unicodeslot=0x2F29, }, [0x2F2A]={ category="so", cjkwd="w", description="KANGXI RADICAL LAME", direction="on", linebreak="id", specials={ "compat", 0x5C22 }, unicodeslot=0x2F2A, }, [0x2F2B]={ category="so", cjkwd="w", description="KANGXI RADICAL CORPSE", direction="on", linebreak="id", specials={ "compat", 0x5C38 }, unicodeslot=0x2F2B, }, [0x2F2C]={ category="so", cjkwd="w", description="KANGXI RADICAL SPROUT", direction="on", linebreak="id", specials={ "compat", 0x5C6E }, unicodeslot=0x2F2C, }, [0x2F2D]={ category="so", cjkwd="w", description="KANGXI RADICAL MOUNTAIN", direction="on", linebreak="id", specials={ "compat", 0x5C71 }, unicodeslot=0x2F2D, }, [0x2F2E]={ category="so", cjkwd="w", description="KANGXI RADICAL RIVER", direction="on", linebreak="id", specials={ "compat", 0x5DDB }, unicodeslot=0x2F2E, }, [0x2F2F]={ category="so", cjkwd="w", description="KANGXI RADICAL WORK", direction="on", linebreak="id", specials={ "compat", 0x5DE5 }, unicodeslot=0x2F2F, }, [0x2F30]={ category="so", cjkwd="w", description="KANGXI RADICAL ONESELF", direction="on", linebreak="id", specials={ "compat", 0x5DF1 }, unicodeslot=0x2F30, }, [0x2F31]={ category="so", cjkwd="w", description="KANGXI RADICAL TURBAN", direction="on", linebreak="id", specials={ "compat", 0x5DFE }, unicodeslot=0x2F31, }, [0x2F32]={ category="so", cjkwd="w", description="KANGXI RADICAL DRY", direction="on", linebreak="id", specials={ "compat", 0x5E72 }, unicodeslot=0x2F32, }, [0x2F33]={ category="so", cjkwd="w", description="KANGXI RADICAL SHORT THREAD", direction="on", linebreak="id", specials={ "compat", 0x5E7A }, unicodeslot=0x2F33, }, [0x2F34]={ category="so", cjkwd="w", description="KANGXI RADICAL DOTTED CLIFF", direction="on", linebreak="id", specials={ "compat", 0x5E7F }, unicodeslot=0x2F34, }, [0x2F35]={ category="so", cjkwd="w", description="KANGXI RADICAL LONG STRIDE", direction="on", linebreak="id", specials={ "compat", 0x5EF4 }, unicodeslot=0x2F35, }, [0x2F36]={ category="so", cjkwd="w", description="KANGXI RADICAL TWO HANDS", direction="on", linebreak="id", specials={ "compat", 0x5EFE }, unicodeslot=0x2F36, }, [0x2F37]={ category="so", cjkwd="w", description="KANGXI RADICAL SHOOT", direction="on", linebreak="id", specials={ "compat", 0x5F0B }, unicodeslot=0x2F37, }, [0x2F38]={ category="so", cjkwd="w", description="KANGXI RADICAL BOW", direction="on", linebreak="id", specials={ "compat", 0x5F13 }, unicodeslot=0x2F38, }, [0x2F39]={ category="so", cjkwd="w", description="KANGXI RADICAL SNOUT", direction="on", linebreak="id", specials={ "compat", 0x5F50 }, unicodeslot=0x2F39, }, [0x2F3A]={ category="so", cjkwd="w", description="KANGXI RADICAL BRISTLE", direction="on", linebreak="id", specials={ "compat", 0x5F61 }, unicodeslot=0x2F3A, }, [0x2F3B]={ category="so", cjkwd="w", description="KANGXI RADICAL STEP", direction="on", linebreak="id", specials={ "compat", 0x5F73 }, unicodeslot=0x2F3B, }, [0x2F3C]={ category="so", cjkwd="w", description="KANGXI RADICAL HEART", direction="on", linebreak="id", specials={ "compat", 0x5FC3 }, unicodeslot=0x2F3C, }, [0x2F3D]={ category="so", cjkwd="w", description="KANGXI RADICAL HALBERD", direction="on", linebreak="id", specials={ "compat", 0x6208 }, unicodeslot=0x2F3D, }, [0x2F3E]={ category="so", cjkwd="w", description="KANGXI RADICAL DOOR", direction="on", linebreak="id", specials={ "compat", 0x6236 }, unicodeslot=0x2F3E, }, [0x2F3F]={ category="so", cjkwd="w", description="KANGXI RADICAL HAND", direction="on", linebreak="id", specials={ "compat", 0x624B }, unicodeslot=0x2F3F, }, [0x2F40]={ category="so", cjkwd="w", description="KANGXI RADICAL BRANCH", direction="on", linebreak="id", specials={ "compat", 0x652F }, unicodeslot=0x2F40, }, [0x2F41]={ category="so", cjkwd="w", description="KANGXI RADICAL RAP", direction="on", linebreak="id", specials={ "compat", 0x6534 }, unicodeslot=0x2F41, }, [0x2F42]={ category="so", cjkwd="w", description="KANGXI RADICAL SCRIPT", direction="on", linebreak="id", specials={ "compat", 0x6587 }, unicodeslot=0x2F42, }, [0x2F43]={ category="so", cjkwd="w", description="KANGXI RADICAL DIPPER", direction="on", linebreak="id", specials={ "compat", 0x6597 }, unicodeslot=0x2F43, }, [0x2F44]={ category="so", cjkwd="w", description="KANGXI RADICAL AXE", direction="on", linebreak="id", specials={ "compat", 0x65A4 }, unicodeslot=0x2F44, }, [0x2F45]={ category="so", cjkwd="w", description="KANGXI RADICAL SQUARE", direction="on", linebreak="id", specials={ "compat", 0x65B9 }, unicodeslot=0x2F45, }, [0x2F46]={ category="so", cjkwd="w", description="KANGXI RADICAL NOT", direction="on", linebreak="id", specials={ "compat", 0x65E0 }, unicodeslot=0x2F46, }, [0x2F47]={ category="so", cjkwd="w", description="KANGXI RADICAL SUN", direction="on", linebreak="id", specials={ "compat", 0x65E5 }, unicodeslot=0x2F47, }, [0x2F48]={ category="so", cjkwd="w", description="KANGXI RADICAL SAY", direction="on", linebreak="id", specials={ "compat", 0x66F0 }, unicodeslot=0x2F48, }, [0x2F49]={ category="so", cjkwd="w", description="KANGXI RADICAL MOON", direction="on", linebreak="id", specials={ "compat", 0x6708 }, unicodeslot=0x2F49, }, [0x2F4A]={ category="so", cjkwd="w", description="KANGXI RADICAL TREE", direction="on", linebreak="id", specials={ "compat", 0x6728 }, unicodeslot=0x2F4A, }, [0x2F4B]={ category="so", cjkwd="w", description="KANGXI RADICAL LACK", direction="on", linebreak="id", specials={ "compat", 0x6B20 }, unicodeslot=0x2F4B, }, [0x2F4C]={ category="so", cjkwd="w", description="KANGXI RADICAL STOP", direction="on", linebreak="id", specials={ "compat", 0x6B62 }, unicodeslot=0x2F4C, }, [0x2F4D]={ category="so", cjkwd="w", description="KANGXI RADICAL DEATH", direction="on", linebreak="id", specials={ "compat", 0x6B79 }, unicodeslot=0x2F4D, }, [0x2F4E]={ category="so", cjkwd="w", description="KANGXI RADICAL WEAPON", direction="on", linebreak="id", specials={ "compat", 0x6BB3 }, unicodeslot=0x2F4E, }, [0x2F4F]={ category="so", cjkwd="w", description="KANGXI RADICAL DO NOT", direction="on", linebreak="id", specials={ "compat", 0x6BCB }, unicodeslot=0x2F4F, }, [0x2F50]={ category="so", cjkwd="w", description="KANGXI RADICAL COMPARE", direction="on", linebreak="id", specials={ "compat", 0x6BD4 }, unicodeslot=0x2F50, }, [0x2F51]={ category="so", cjkwd="w", description="KANGXI RADICAL FUR", direction="on", linebreak="id", specials={ "compat", 0x6BDB }, unicodeslot=0x2F51, }, [0x2F52]={ category="so", cjkwd="w", description="KANGXI RADICAL CLAN", direction="on", linebreak="id", specials={ "compat", 0x6C0F }, unicodeslot=0x2F52, }, [0x2F53]={ category="so", cjkwd="w", description="KANGXI RADICAL STEAM", direction="on", linebreak="id", specials={ "compat", 0x6C14 }, unicodeslot=0x2F53, }, [0x2F54]={ category="so", cjkwd="w", description="KANGXI RADICAL WATER", direction="on", linebreak="id", specials={ "compat", 0x6C34 }, unicodeslot=0x2F54, }, [0x2F55]={ category="so", cjkwd="w", description="KANGXI RADICAL FIRE", direction="on", linebreak="id", specials={ "compat", 0x706B }, unicodeslot=0x2F55, }, [0x2F56]={ category="so", cjkwd="w", description="KANGXI RADICAL CLAW", direction="on", linebreak="id", specials={ "compat", 0x722A }, unicodeslot=0x2F56, }, [0x2F57]={ category="so", cjkwd="w", description="KANGXI RADICAL FATHER", direction="on", linebreak="id", specials={ "compat", 0x7236 }, unicodeslot=0x2F57, }, [0x2F58]={ category="so", cjkwd="w", description="KANGXI RADICAL DOUBLE X", direction="on", linebreak="id", specials={ "compat", 0x723B }, unicodeslot=0x2F58, }, [0x2F59]={ category="so", cjkwd="w", description="KANGXI RADICAL HALF TREE TRUNK", direction="on", linebreak="id", specials={ "compat", 0x723F }, unicodeslot=0x2F59, }, [0x2F5A]={ category="so", cjkwd="w", description="KANGXI RADICAL SLICE", direction="on", linebreak="id", specials={ "compat", 0x7247 }, unicodeslot=0x2F5A, }, [0x2F5B]={ category="so", cjkwd="w", description="KANGXI RADICAL FANG", direction="on", linebreak="id", specials={ "compat", 0x7259 }, unicodeslot=0x2F5B, }, [0x2F5C]={ category="so", cjkwd="w", description="KANGXI RADICAL COW", direction="on", linebreak="id", specials={ "compat", 0x725B }, unicodeslot=0x2F5C, }, [0x2F5D]={ category="so", cjkwd="w", description="KANGXI RADICAL DOG", direction="on", linebreak="id", specials={ "compat", 0x72AC }, unicodeslot=0x2F5D, }, [0x2F5E]={ category="so", cjkwd="w", description="KANGXI RADICAL PROFOUND", direction="on", linebreak="id", specials={ "compat", 0x7384 }, unicodeslot=0x2F5E, }, [0x2F5F]={ category="so", cjkwd="w", description="KANGXI RADICAL JADE", direction="on", linebreak="id", specials={ "compat", 0x7389 }, unicodeslot=0x2F5F, }, [0x2F60]={ category="so", cjkwd="w", description="KANGXI RADICAL MELON", direction="on", linebreak="id", specials={ "compat", 0x74DC }, unicodeslot=0x2F60, }, [0x2F61]={ category="so", cjkwd="w", description="KANGXI RADICAL TILE", direction="on", linebreak="id", specials={ "compat", 0x74E6 }, unicodeslot=0x2F61, }, [0x2F62]={ category="so", cjkwd="w", description="KANGXI RADICAL SWEET", direction="on", linebreak="id", specials={ "compat", 0x7518 }, unicodeslot=0x2F62, }, [0x2F63]={ category="so", cjkwd="w", description="KANGXI RADICAL LIFE", direction="on", linebreak="id", specials={ "compat", 0x751F }, unicodeslot=0x2F63, }, [0x2F64]={ category="so", cjkwd="w", description="KANGXI RADICAL USE", direction="on", linebreak="id", specials={ "compat", 0x7528 }, unicodeslot=0x2F64, }, [0x2F65]={ category="so", cjkwd="w", description="KANGXI RADICAL FIELD", direction="on", linebreak="id", specials={ "compat", 0x7530 }, unicodeslot=0x2F65, }, [0x2F66]={ category="so", cjkwd="w", description="KANGXI RADICAL BOLT OF CLOTH", direction="on", linebreak="id", specials={ "compat", 0x758B }, unicodeslot=0x2F66, }, [0x2F67]={ category="so", cjkwd="w", description="KANGXI RADICAL SICKNESS", direction="on", linebreak="id", specials={ "compat", 0x7592 }, unicodeslot=0x2F67, }, [0x2F68]={ category="so", cjkwd="w", description="KANGXI RADICAL DOTTED TENT", direction="on", linebreak="id", specials={ "compat", 0x7676 }, unicodeslot=0x2F68, }, [0x2F69]={ category="so", cjkwd="w", description="KANGXI RADICAL WHITE", direction="on", linebreak="id", specials={ "compat", 0x767D }, unicodeslot=0x2F69, }, [0x2F6A]={ category="so", cjkwd="w", description="KANGXI RADICAL SKIN", direction="on", linebreak="id", specials={ "compat", 0x76AE }, unicodeslot=0x2F6A, }, [0x2F6B]={ category="so", cjkwd="w", description="KANGXI RADICAL DISH", direction="on", linebreak="id", specials={ "compat", 0x76BF }, unicodeslot=0x2F6B, }, [0x2F6C]={ category="so", cjkwd="w", description="KANGXI RADICAL EYE", direction="on", linebreak="id", specials={ "compat", 0x76EE }, unicodeslot=0x2F6C, }, [0x2F6D]={ category="so", cjkwd="w", description="KANGXI RADICAL SPEAR", direction="on", linebreak="id", specials={ "compat", 0x77DB }, unicodeslot=0x2F6D, }, [0x2F6E]={ category="so", cjkwd="w", description="KANGXI RADICAL ARROW", direction="on", linebreak="id", specials={ "compat", 0x77E2 }, unicodeslot=0x2F6E, }, [0x2F6F]={ category="so", cjkwd="w", description="KANGXI RADICAL STONE", direction="on", linebreak="id", specials={ "compat", 0x77F3 }, unicodeslot=0x2F6F, }, [0x2F70]={ category="so", cjkwd="w", description="KANGXI RADICAL SPIRIT", direction="on", linebreak="id", specials={ "compat", 0x793A }, unicodeslot=0x2F70, }, [0x2F71]={ category="so", cjkwd="w", description="KANGXI RADICAL TRACK", direction="on", linebreak="id", specials={ "compat", 0x79B8 }, unicodeslot=0x2F71, }, [0x2F72]={ category="so", cjkwd="w", description="KANGXI RADICAL GRAIN", direction="on", linebreak="id", specials={ "compat", 0x79BE }, unicodeslot=0x2F72, }, [0x2F73]={ category="so", cjkwd="w", description="KANGXI RADICAL CAVE", direction="on", linebreak="id", specials={ "compat", 0x7A74 }, unicodeslot=0x2F73, }, [0x2F74]={ category="so", cjkwd="w", description="KANGXI RADICAL STAND", direction="on", linebreak="id", specials={ "compat", 0x7ACB }, unicodeslot=0x2F74, }, [0x2F75]={ category="so", cjkwd="w", description="KANGXI RADICAL BAMBOO", direction="on", linebreak="id", specials={ "compat", 0x7AF9 }, unicodeslot=0x2F75, }, [0x2F76]={ category="so", cjkwd="w", description="KANGXI RADICAL RICE", direction="on", linebreak="id", specials={ "compat", 0x7C73 }, unicodeslot=0x2F76, }, [0x2F77]={ category="so", cjkwd="w", description="KANGXI RADICAL SILK", direction="on", linebreak="id", specials={ "compat", 0x7CF8 }, unicodeslot=0x2F77, }, [0x2F78]={ category="so", cjkwd="w", description="KANGXI RADICAL JAR", direction="on", linebreak="id", specials={ "compat", 0x7F36 }, unicodeslot=0x2F78, }, [0x2F79]={ category="so", cjkwd="w", description="KANGXI RADICAL NET", direction="on", linebreak="id", specials={ "compat", 0x7F51 }, unicodeslot=0x2F79, }, [0x2F7A]={ category="so", cjkwd="w", description="KANGXI RADICAL SHEEP", direction="on", linebreak="id", specials={ "compat", 0x7F8A }, unicodeslot=0x2F7A, }, [0x2F7B]={ category="so", cjkwd="w", description="KANGXI RADICAL FEATHER", direction="on", linebreak="id", specials={ "compat", 0x7FBD }, unicodeslot=0x2F7B, }, [0x2F7C]={ category="so", cjkwd="w", description="KANGXI RADICAL OLD", direction="on", linebreak="id", specials={ "compat", 0x8001 }, unicodeslot=0x2F7C, }, [0x2F7D]={ category="so", cjkwd="w", description="KANGXI RADICAL AND", direction="on", linebreak="id", specials={ "compat", 0x800C }, unicodeslot=0x2F7D, }, [0x2F7E]={ category="so", cjkwd="w", description="KANGXI RADICAL PLOW", direction="on", linebreak="id", specials={ "compat", 0x8012 }, unicodeslot=0x2F7E, }, [0x2F7F]={ category="so", cjkwd="w", description="KANGXI RADICAL EAR", direction="on", linebreak="id", specials={ "compat", 0x8033 }, unicodeslot=0x2F7F, }, [0x2F80]={ category="so", cjkwd="w", description="KANGXI RADICAL BRUSH", direction="on", linebreak="id", specials={ "compat", 0x807F }, unicodeslot=0x2F80, }, [0x2F81]={ category="so", cjkwd="w", description="KANGXI RADICAL MEAT", direction="on", linebreak="id", specials={ "compat", 0x8089 }, unicodeslot=0x2F81, }, [0x2F82]={ category="so", cjkwd="w", description="KANGXI RADICAL MINISTER", direction="on", linebreak="id", specials={ "compat", 0x81E3 }, unicodeslot=0x2F82, }, [0x2F83]={ category="so", cjkwd="w", description="KANGXI RADICAL SELF", direction="on", linebreak="id", specials={ "compat", 0x81EA }, unicodeslot=0x2F83, }, [0x2F84]={ category="so", cjkwd="w", description="KANGXI RADICAL ARRIVE", direction="on", linebreak="id", specials={ "compat", 0x81F3 }, unicodeslot=0x2F84, }, [0x2F85]={ category="so", cjkwd="w", description="KANGXI RADICAL MORTAR", direction="on", linebreak="id", specials={ "compat", 0x81FC }, unicodeslot=0x2F85, }, [0x2F86]={ category="so", cjkwd="w", description="KANGXI RADICAL TONGUE", direction="on", linebreak="id", specials={ "compat", 0x820C }, unicodeslot=0x2F86, }, [0x2F87]={ category="so", cjkwd="w", description="KANGXI RADICAL OPPOSE", direction="on", linebreak="id", specials={ "compat", 0x821B }, unicodeslot=0x2F87, }, [0x2F88]={ category="so", cjkwd="w", description="KANGXI RADICAL BOAT", direction="on", linebreak="id", specials={ "compat", 0x821F }, unicodeslot=0x2F88, }, [0x2F89]={ category="so", cjkwd="w", description="KANGXI RADICAL STOPPING", direction="on", linebreak="id", specials={ "compat", 0x826E }, unicodeslot=0x2F89, }, [0x2F8A]={ category="so", cjkwd="w", description="KANGXI RADICAL COLOR", direction="on", linebreak="id", specials={ "compat", 0x8272 }, unicodeslot=0x2F8A, }, [0x2F8B]={ category="so", cjkwd="w", description="KANGXI RADICAL GRASS", direction="on", linebreak="id", specials={ "compat", 0x8278 }, unicodeslot=0x2F8B, }, [0x2F8C]={ category="so", cjkwd="w", description="KANGXI RADICAL TIGER", direction="on", linebreak="id", specials={ "compat", 0x864D }, unicodeslot=0x2F8C, }, [0x2F8D]={ category="so", cjkwd="w", description="KANGXI RADICAL INSECT", direction="on", linebreak="id", specials={ "compat", 0x866B }, unicodeslot=0x2F8D, }, [0x2F8E]={ category="so", cjkwd="w", description="KANGXI RADICAL BLOOD", direction="on", linebreak="id", specials={ "compat", 0x8840 }, unicodeslot=0x2F8E, }, [0x2F8F]={ category="so", cjkwd="w", description="KANGXI RADICAL WALK ENCLOSURE", direction="on", linebreak="id", specials={ "compat", 0x884C }, unicodeslot=0x2F8F, }, [0x2F90]={ category="so", cjkwd="w", description="KANGXI RADICAL CLOTHES", direction="on", linebreak="id", specials={ "compat", 0x8863 }, unicodeslot=0x2F90, }, [0x2F91]={ category="so", cjkwd="w", description="KANGXI RADICAL WEST", direction="on", linebreak="id", specials={ "compat", 0x897E }, unicodeslot=0x2F91, }, [0x2F92]={ category="so", cjkwd="w", description="KANGXI RADICAL SEE", direction="on", linebreak="id", specials={ "compat", 0x898B }, unicodeslot=0x2F92, }, [0x2F93]={ category="so", cjkwd="w", description="KANGXI RADICAL HORN", direction="on", linebreak="id", specials={ "compat", 0x89D2 }, unicodeslot=0x2F93, }, [0x2F94]={ category="so", cjkwd="w", description="KANGXI RADICAL SPEECH", direction="on", linebreak="id", specials={ "compat", 0x8A00 }, unicodeslot=0x2F94, }, [0x2F95]={ category="so", cjkwd="w", description="KANGXI RADICAL VALLEY", direction="on", linebreak="id", specials={ "compat", 0x8C37 }, unicodeslot=0x2F95, }, [0x2F96]={ category="so", cjkwd="w", description="KANGXI RADICAL BEAN", direction="on", linebreak="id", specials={ "compat", 0x8C46 }, unicodeslot=0x2F96, }, [0x2F97]={ category="so", cjkwd="w", description="KANGXI RADICAL PIG", direction="on", linebreak="id", specials={ "compat", 0x8C55 }, unicodeslot=0x2F97, }, [0x2F98]={ category="so", cjkwd="w", description="KANGXI RADICAL BADGER", direction="on", linebreak="id", specials={ "compat", 0x8C78 }, unicodeslot=0x2F98, }, [0x2F99]={ category="so", cjkwd="w", description="KANGXI RADICAL SHELL", direction="on", linebreak="id", specials={ "compat", 0x8C9D }, unicodeslot=0x2F99, }, [0x2F9A]={ category="so", cjkwd="w", description="KANGXI RADICAL RED", direction="on", linebreak="id", specials={ "compat", 0x8D64 }, unicodeslot=0x2F9A, }, [0x2F9B]={ category="so", cjkwd="w", description="KANGXI RADICAL RUN", direction="on", linebreak="id", specials={ "compat", 0x8D70 }, unicodeslot=0x2F9B, }, [0x2F9C]={ category="so", cjkwd="w", description="KANGXI RADICAL FOOT", direction="on", linebreak="id", specials={ "compat", 0x8DB3 }, unicodeslot=0x2F9C, }, [0x2F9D]={ category="so", cjkwd="w", description="KANGXI RADICAL BODY", direction="on", linebreak="id", specials={ "compat", 0x8EAB }, unicodeslot=0x2F9D, }, [0x2F9E]={ category="so", cjkwd="w", description="KANGXI RADICAL CART", direction="on", linebreak="id", specials={ "compat", 0x8ECA }, unicodeslot=0x2F9E, }, [0x2F9F]={ category="so", cjkwd="w", description="KANGXI RADICAL BITTER", direction="on", linebreak="id", specials={ "compat", 0x8F9B }, unicodeslot=0x2F9F, }, [0x2FA0]={ category="so", cjkwd="w", description="KANGXI RADICAL MORNING", direction="on", linebreak="id", specials={ "compat", 0x8FB0 }, unicodeslot=0x2FA0, }, [0x2FA1]={ category="so", cjkwd="w", description="KANGXI RADICAL WALK", direction="on", linebreak="id", specials={ "compat", 0x8FB5 }, unicodeslot=0x2FA1, }, [0x2FA2]={ category="so", cjkwd="w", description="KANGXI RADICAL CITY", direction="on", linebreak="id", specials={ "compat", 0x9091 }, unicodeslot=0x2FA2, }, [0x2FA3]={ category="so", cjkwd="w", description="KANGXI RADICAL WINE", direction="on", linebreak="id", specials={ "compat", 0x9149 }, unicodeslot=0x2FA3, }, [0x2FA4]={ category="so", cjkwd="w", description="KANGXI RADICAL DISTINGUISH", direction="on", linebreak="id", specials={ "compat", 0x91C6 }, unicodeslot=0x2FA4, }, [0x2FA5]={ category="so", cjkwd="w", description="KANGXI RADICAL VILLAGE", direction="on", linebreak="id", specials={ "compat", 0x91CC }, unicodeslot=0x2FA5, }, [0x2FA6]={ category="so", cjkwd="w", description="KANGXI RADICAL GOLD", direction="on", linebreak="id", specials={ "compat", 0x91D1 }, unicodeslot=0x2FA6, }, [0x2FA7]={ category="so", cjkwd="w", description="KANGXI RADICAL LONG", direction="on", linebreak="id", specials={ "compat", 0x9577 }, unicodeslot=0x2FA7, }, [0x2FA8]={ category="so", cjkwd="w", description="KANGXI RADICAL GATE", direction="on", linebreak="id", specials={ "compat", 0x9580 }, unicodeslot=0x2FA8, }, [0x2FA9]={ category="so", cjkwd="w", description="KANGXI RADICAL MOUND", direction="on", linebreak="id", specials={ "compat", 0x961C }, unicodeslot=0x2FA9, }, [0x2FAA]={ category="so", cjkwd="w", description="KANGXI RADICAL SLAVE", direction="on", linebreak="id", specials={ "compat", 0x96B6 }, unicodeslot=0x2FAA, }, [0x2FAB]={ category="so", cjkwd="w", description="KANGXI RADICAL SHORT TAILED BIRD", direction="on", linebreak="id", specials={ "compat", 0x96B9 }, unicodeslot=0x2FAB, }, [0x2FAC]={ category="so", cjkwd="w", description="KANGXI RADICAL RAIN", direction="on", linebreak="id", specials={ "compat", 0x96E8 }, unicodeslot=0x2FAC, }, [0x2FAD]={ category="so", cjkwd="w", description="KANGXI RADICAL BLUE", direction="on", linebreak="id", specials={ "compat", 0x9751 }, unicodeslot=0x2FAD, }, [0x2FAE]={ category="so", cjkwd="w", description="KANGXI RADICAL WRONG", direction="on", linebreak="id", specials={ "compat", 0x975E }, unicodeslot=0x2FAE, }, [0x2FAF]={ category="so", cjkwd="w", description="KANGXI RADICAL FACE", direction="on", linebreak="id", specials={ "compat", 0x9762 }, unicodeslot=0x2FAF, }, [0x2FB0]={ category="so", cjkwd="w", description="KANGXI RADICAL LEATHER", direction="on", linebreak="id", specials={ "compat", 0x9769 }, unicodeslot=0x2FB0, }, [0x2FB1]={ category="so", cjkwd="w", description="KANGXI RADICAL TANNED LEATHER", direction="on", linebreak="id", specials={ "compat", 0x97CB }, unicodeslot=0x2FB1, }, [0x2FB2]={ category="so", cjkwd="w", description="KANGXI RADICAL LEEK", direction="on", linebreak="id", specials={ "compat", 0x97ED }, unicodeslot=0x2FB2, }, [0x2FB3]={ category="so", cjkwd="w", description="KANGXI RADICAL SOUND", direction="on", linebreak="id", specials={ "compat", 0x97F3 }, unicodeslot=0x2FB3, }, [0x2FB4]={ category="so", cjkwd="w", description="KANGXI RADICAL LEAF", direction="on", linebreak="id", specials={ "compat", 0x9801 }, unicodeslot=0x2FB4, }, [0x2FB5]={ category="so", cjkwd="w", description="KANGXI RADICAL WIND", direction="on", linebreak="id", specials={ "compat", 0x98A8 }, unicodeslot=0x2FB5, }, [0x2FB6]={ category="so", cjkwd="w", description="KANGXI RADICAL FLY", direction="on", linebreak="id", specials={ "compat", 0x98DB }, unicodeslot=0x2FB6, }, [0x2FB7]={ category="so", cjkwd="w", description="KANGXI RADICAL EAT", direction="on", linebreak="id", specials={ "compat", 0x98DF }, unicodeslot=0x2FB7, }, [0x2FB8]={ category="so", cjkwd="w", description="KANGXI RADICAL HEAD", direction="on", linebreak="id", specials={ "compat", 0x9996 }, unicodeslot=0x2FB8, }, [0x2FB9]={ category="so", cjkwd="w", description="KANGXI RADICAL FRAGRANT", direction="on", linebreak="id", specials={ "compat", 0x9999 }, unicodeslot=0x2FB9, }, [0x2FBA]={ category="so", cjkwd="w", description="KANGXI RADICAL HORSE", direction="on", linebreak="id", specials={ "compat", 0x99AC }, unicodeslot=0x2FBA, }, [0x2FBB]={ category="so", cjkwd="w", description="KANGXI RADICAL BONE", direction="on", linebreak="id", specials={ "compat", 0x9AA8 }, unicodeslot=0x2FBB, }, [0x2FBC]={ category="so", cjkwd="w", description="KANGXI RADICAL TALL", direction="on", linebreak="id", specials={ "compat", 0x9AD8 }, unicodeslot=0x2FBC, }, [0x2FBD]={ category="so", cjkwd="w", description="KANGXI RADICAL HAIR", direction="on", linebreak="id", specials={ "compat", 0x9ADF }, unicodeslot=0x2FBD, }, [0x2FBE]={ category="so", cjkwd="w", description="KANGXI RADICAL FIGHT", direction="on", linebreak="id", specials={ "compat", 0x9B25 }, unicodeslot=0x2FBE, }, [0x2FBF]={ category="so", cjkwd="w", description="KANGXI RADICAL SACRIFICIAL WINE", direction="on", linebreak="id", specials={ "compat", 0x9B2F }, unicodeslot=0x2FBF, }, [0x2FC0]={ category="so", cjkwd="w", description="KANGXI RADICAL CAULDRON", direction="on", linebreak="id", specials={ "compat", 0x9B32 }, unicodeslot=0x2FC0, }, [0x2FC1]={ category="so", cjkwd="w", description="KANGXI RADICAL GHOST", direction="on", linebreak="id", specials={ "compat", 0x9B3C }, unicodeslot=0x2FC1, }, [0x2FC2]={ category="so", cjkwd="w", description="KANGXI RADICAL FISH", direction="on", linebreak="id", specials={ "compat", 0x9B5A }, unicodeslot=0x2FC2, }, [0x2FC3]={ category="so", cjkwd="w", description="KANGXI RADICAL BIRD", direction="on", linebreak="id", specials={ "compat", 0x9CE5 }, unicodeslot=0x2FC3, }, [0x2FC4]={ category="so", cjkwd="w", description="KANGXI RADICAL SALT", direction="on", linebreak="id", specials={ "compat", 0x9E75 }, unicodeslot=0x2FC4, }, [0x2FC5]={ category="so", cjkwd="w", description="KANGXI RADICAL DEER", direction="on", linebreak="id", specials={ "compat", 0x9E7F }, unicodeslot=0x2FC5, }, [0x2FC6]={ category="so", cjkwd="w", description="KANGXI RADICAL WHEAT", direction="on", linebreak="id", specials={ "compat", 0x9EA5 }, unicodeslot=0x2FC6, }, [0x2FC7]={ category="so", cjkwd="w", description="KANGXI RADICAL HEMP", direction="on", linebreak="id", specials={ "compat", 0x9EBB }, unicodeslot=0x2FC7, }, [0x2FC8]={ category="so", cjkwd="w", description="KANGXI RADICAL YELLOW", direction="on", linebreak="id", specials={ "compat", 0x9EC3 }, unicodeslot=0x2FC8, }, [0x2FC9]={ category="so", cjkwd="w", description="KANGXI RADICAL MILLET", direction="on", linebreak="id", specials={ "compat", 0x9ECD }, unicodeslot=0x2FC9, }, [0x2FCA]={ category="so", cjkwd="w", description="KANGXI RADICAL BLACK", direction="on", linebreak="id", specials={ "compat", 0x9ED1 }, unicodeslot=0x2FCA, }, [0x2FCB]={ category="so", cjkwd="w", description="KANGXI RADICAL EMBROIDERY", direction="on", linebreak="id", specials={ "compat", 0x9EF9 }, unicodeslot=0x2FCB, }, [0x2FCC]={ category="so", cjkwd="w", description="KANGXI RADICAL FROG", direction="on", linebreak="id", specials={ "compat", 0x9EFD }, unicodeslot=0x2FCC, }, [0x2FCD]={ category="so", cjkwd="w", description="KANGXI RADICAL TRIPOD", direction="on", linebreak="id", specials={ "compat", 0x9F0E }, unicodeslot=0x2FCD, }, [0x2FCE]={ category="so", cjkwd="w", description="KANGXI RADICAL DRUM", direction="on", linebreak="id", specials={ "compat", 0x9F13 }, unicodeslot=0x2FCE, }, [0x2FCF]={ category="so", cjkwd="w", description="KANGXI RADICAL RAT", direction="on", linebreak="id", specials={ "compat", 0x9F20 }, unicodeslot=0x2FCF, }, [0x2FD0]={ category="so", cjkwd="w", description="KANGXI RADICAL NOSE", direction="on", linebreak="id", specials={ "compat", 0x9F3B }, unicodeslot=0x2FD0, }, [0x2FD1]={ category="so", cjkwd="w", description="KANGXI RADICAL EVEN", direction="on", linebreak="id", specials={ "compat", 0x9F4A }, unicodeslot=0x2FD1, }, [0x2FD2]={ category="so", cjkwd="w", description="KANGXI RADICAL TOOTH", direction="on", linebreak="id", specials={ "compat", 0x9F52 }, unicodeslot=0x2FD2, }, [0x2FD3]={ category="so", cjkwd="w", description="KANGXI RADICAL DRAGON", direction="on", linebreak="id", specials={ "compat", 0x9F8D }, unicodeslot=0x2FD3, }, [0x2FD4]={ category="so", cjkwd="w", description="KANGXI RADICAL TURTLE", direction="on", linebreak="id", specials={ "compat", 0x9F9C }, unicodeslot=0x2FD4, }, [0x2FD5]={ category="so", cjkwd="w", description="KANGXI RADICAL FLUTE", direction="on", linebreak="id", specials={ "compat", 0x9FA0 }, unicodeslot=0x2FD5, }, [0x2FF0]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT", direction="on", linebreak="id", unicodeslot=0x2FF0, }, [0x2FF1]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW", direction="on", linebreak="id", unicodeslot=0x2FF1, }, [0x2FF2]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT", direction="on", linebreak="id", unicodeslot=0x2FF2, }, [0x2FF3]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW", direction="on", linebreak="id", unicodeslot=0x2FF3, }, [0x2FF4]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND", direction="on", linebreak="id", unicodeslot=0x2FF4, }, [0x2FF5]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE", direction="on", linebreak="id", unicodeslot=0x2FF5, }, [0x2FF6]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW", direction="on", linebreak="id", unicodeslot=0x2FF6, }, [0x2FF7]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT", direction="on", linebreak="id", unicodeslot=0x2FF7, }, [0x2FF8]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT", direction="on", linebreak="id", unicodeslot=0x2FF8, }, [0x2FF9]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT", direction="on", linebreak="id", unicodeslot=0x2FF9, }, [0x2FFA]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT", direction="on", linebreak="id", unicodeslot=0x2FFA, }, [0x2FFB]={ category="so", cjkwd="w", description="IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID", direction="on", linebreak="id", unicodeslot=0x2FFB, }, [0x3000]={ adobename="ideographicspace", category="zs", cjkwd="f", contextname="ideographicspace", description="IDEOGRAPHIC SPACE", direction="ws", linebreak="id", specials={ "wide", 0x0020 }, unicodeslot=0x3000, }, [0x3001]={ adobename="ideographiccomma", category="po", cjkwd="w", description="IDEOGRAPHIC COMMA", direction="on", linebreak="cl", unicodeslot=0x3001, }, [0x3002]={ adobename="ideographicperiod", category="po", cjkwd="w", description="IDEOGRAPHIC FULL STOP", direction="on", linebreak="cl", unicodeslot=0x3002, }, [0x3003]={ adobename="dittomark", category="po", cjkwd="w", description="DITTO MARK", direction="on", linebreak="id", unicodeslot=0x3003, }, [0x3004]={ adobename="jis", category="so", cjkwd="w", description="JAPANESE INDUSTRIAL STANDARD SYMBOL", direction="on", linebreak="id", unicodeslot=0x3004, }, [0x3005]={ adobename="ideographiciterationmark", category="lm", cjkwd="w", description="IDEOGRAPHIC ITERATION MARK", direction="l", linebreak="ns", unicodeslot=0x3005, }, [0x3006]={ adobename="ideographicclose", category="lo", cjkwd="w", description="IDEOGRAPHIC CLOSING MARK", direction="l", linebreak="id", unicodeslot=0x3006, }, [0x3007]={ adobename="ideographiczero", category="nl", cjkwd="w", description="IDEOGRAPHIC NUMBER ZERO", direction="l", linebreak="id", unicodeslot=0x3007, }, [0x3008]={ adobename="anglebracketleft", category="ps", cjkwd="w", description="LEFT ANGLE BRACKET", direction="on", linebreak="op", mirror=0x3009, unicodeslot=0x3008, }, [0x3009]={ adobename="anglebracketright", category="pe", cjkwd="w", description="RIGHT ANGLE BRACKET", direction="on", linebreak="cl", mirror=0x3008, unicodeslot=0x3009, }, [0x300A]={ adobename="dblanglebracketleft", category="ps", cjkwd="w", description="LEFT DOUBLE ANGLE BRACKET", direction="on", linebreak="op", mirror=0x300B, unicodeslot=0x300A, }, [0x300B]={ adobename="dblanglebracketright", category="pe", cjkwd="w", description="RIGHT DOUBLE ANGLE BRACKET", direction="on", linebreak="cl", mirror=0x300A, unicodeslot=0x300B, }, [0x300C]={ adobename="cornerbracketleft", category="ps", cjkwd="w", description="LEFT CORNER BRACKET", direction="on", linebreak="op", mirror=0x300D, unicodeslot=0x300C, }, [0x300D]={ adobename="cornerbracketright", category="pe", cjkwd="w", description="RIGHT CORNER BRACKET", direction="on", linebreak="cl", mirror=0x300C, unicodeslot=0x300D, }, [0x300E]={ adobename="whitecornerbracketleft", category="ps", cjkwd="w", description="LEFT WHITE CORNER BRACKET", direction="on", linebreak="op", mirror=0x300F, unicodeslot=0x300E, }, [0x300F]={ adobename="whitecornerbracketright", category="pe", cjkwd="w", description="RIGHT WHITE CORNER BRACKET", direction="on", linebreak="cl", mirror=0x300E, unicodeslot=0x300F, }, [0x3010]={ adobename="blacklenticularbracketleft", category="ps", cjkwd="w", description="LEFT BLACK LENTICULAR BRACKET", direction="on", linebreak="op", mirror=0x3011, unicodeslot=0x3010, }, [0x3011]={ adobename="blacklenticularbracketright", category="pe", cjkwd="w", description="RIGHT BLACK LENTICULAR BRACKET", direction="on", linebreak="cl", mirror=0x3010, unicodeslot=0x3011, }, [0x3012]={ adobename="postalmark", category="so", cjkwd="w", description="POSTAL MARK", direction="on", linebreak="id", unicodeslot=0x3012, }, [0x3013]={ adobename="getamark", category="so", cjkwd="w", description="GETA MARK", direction="on", linebreak="id", unicodeslot=0x3013, }, [0x3014]={ adobename="tortoiseshellbracketleft", category="ps", cjkwd="w", description="LEFT TORTOISE SHELL BRACKET", direction="on", linebreak="op", mirror=0x3015, unicodeslot=0x3014, }, [0x3015]={ adobename="tortoiseshellbracketright", category="pe", cjkwd="w", description="RIGHT TORTOISE SHELL BRACKET", direction="on", linebreak="cl", mirror=0x3014, unicodeslot=0x3015, }, [0x3016]={ adobename="whitelenticularbracketleft", category="ps", cjkwd="w", description="LEFT WHITE LENTICULAR BRACKET", direction="on", linebreak="op", mirror=0x3017, unicodeslot=0x3016, }, [0x3017]={ adobename="whitelenticularbracketright", category="pe", cjkwd="w", description="RIGHT WHITE LENTICULAR BRACKET", direction="on", linebreak="cl", mirror=0x3016, unicodeslot=0x3017, }, [0x3018]={ adobename="whitetortoiseshellbracketleft", category="ps", cjkwd="w", description="LEFT WHITE TORTOISE SHELL BRACKET", direction="on", linebreak="op", mirror=0x3019, unicodeslot=0x3018, }, [0x3019]={ adobename="whitetortoiseshellbracketright", category="pe", cjkwd="w", description="RIGHT WHITE TORTOISE SHELL BRACKET", direction="on", linebreak="cl", mirror=0x3018, unicodeslot=0x3019, }, [0x301A]={ category="ps", cjkwd="w", description="LEFT WHITE SQUARE BRACKET", direction="on", linebreak="op", mirror=0x301B, unicodeslot=0x301A, }, [0x301B]={ category="pe", cjkwd="w", description="RIGHT WHITE SQUARE BRACKET", direction="on", linebreak="cl", mirror=0x301A, unicodeslot=0x301B, }, [0x301C]={ adobename="wavedash", category="pd", cjkwd="w", description="WAVE DASH", direction="on", linebreak="ns", unicodeslot=0x301C, }, [0x301D]={ adobename="quotedblprimereversed", category="ps", cjkwd="w", description="REVERSED DOUBLE PRIME QUOTATION MARK", direction="on", linebreak="op", unicodeslot=0x301D, }, [0x301E]={ adobename="quotedblprime", category="pe", cjkwd="w", description="DOUBLE PRIME QUOTATION MARK", direction="on", linebreak="cl", unicodeslot=0x301E, }, [0x301F]={ category="pe", cjkwd="w", description="LOW DOUBLE PRIME QUOTATION MARK", direction="on", linebreak="cl", unicodeslot=0x301F, }, [0x3020]={ adobename="postalmarkface", category="so", cjkwd="w", description="POSTAL MARK FACE", direction="on", linebreak="id", unicodeslot=0x3020, }, [0x3021]={ adobename="onehangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL ONE", direction="l", linebreak="id", unicodeslot=0x3021, }, [0x3022]={ adobename="twohangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL TWO", direction="l", linebreak="id", unicodeslot=0x3022, }, [0x3023]={ adobename="threehangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL THREE", direction="l", linebreak="id", unicodeslot=0x3023, }, [0x3024]={ adobename="fourhangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL FOUR", direction="l", linebreak="id", unicodeslot=0x3024, }, [0x3025]={ adobename="fivehangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL FIVE", direction="l", linebreak="id", unicodeslot=0x3025, }, [0x3026]={ adobename="sixhangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL SIX", direction="l", linebreak="id", unicodeslot=0x3026, }, [0x3027]={ adobename="sevenhangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL SEVEN", direction="l", linebreak="id", unicodeslot=0x3027, }, [0x3028]={ adobename="eighthangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL EIGHT", direction="l", linebreak="id", unicodeslot=0x3028, }, [0x3029]={ adobename="ninehangzhou", category="nl", cjkwd="w", description="HANGZHOU NUMERAL NINE", direction="l", linebreak="id", unicodeslot=0x3029, }, [0x302A]={ category="mn", cjkwd="w", description="IDEOGRAPHIC LEVEL TONE MARK", direction="nsm", linebreak="cm", unicodeslot=0x302A, }, [0x302B]={ category="mn", cjkwd="w", description="IDEOGRAPHIC RISING TONE MARK", direction="nsm", linebreak="cm", unicodeslot=0x302B, }, [0x302C]={ category="mn", cjkwd="w", description="IDEOGRAPHIC DEPARTING TONE MARK", direction="nsm", linebreak="cm", unicodeslot=0x302C, }, [0x302D]={ category="mn", cjkwd="w", description="IDEOGRAPHIC ENTERING TONE MARK", direction="nsm", linebreak="cm", unicodeslot=0x302D, }, [0x302E]={ category="mn", cjkwd="w", description="HANGUL SINGLE DOT TONE MARK", direction="l", linebreak="cm", unicodeslot=0x302E, }, [0x302F]={ category="mn", cjkwd="w", description="HANGUL DOUBLE DOT TONE MARK", direction="l", linebreak="cm", unicodeslot=0x302F, }, [0x3030]={ category="pd", cjkwd="w", description="WAVY DASH", direction="on", linebreak="id", unicodeslot=0x3030, }, [0x3031]={ category="lm", cjkwd="w", description="VERTICAL KANA REPEAT MARK", direction="l", linebreak="id", unicodeslot=0x3031, }, [0x3032]={ category="lm", cjkwd="w", description="VERTICAL KANA REPEAT WITH VOICED SOUND MARK", direction="l", linebreak="id", unicodeslot=0x3032, }, [0x3033]={ category="lm", cjkwd="w", description="VERTICAL KANA REPEAT MARK UPPER HALF", direction="l", linebreak="id", unicodeslot=0x3033, }, [0x3034]={ category="lm", cjkwd="w", description="VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF", direction="l", linebreak="id", unicodeslot=0x3034, }, [0x3035]={ category="lm", cjkwd="w", description="VERTICAL KANA REPEAT MARK LOWER HALF", direction="l", linebreak="id", unicodeslot=0x3035, }, [0x3036]={ adobename="circlepostalmark", category="so", cjkwd="w", description="CIRCLED POSTAL MARK", direction="on", linebreak="id", specials={ "compat", 0x3012 }, unicodeslot=0x3036, }, [0x3037]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL", direction="on", linebreak="id", unicodeslot=0x3037, }, [0x3038]={ category="nl", cjkwd="w", description="HANGZHOU NUMERAL TEN", direction="l", linebreak="id", specials={ "compat", 0x5341 }, unicodeslot=0x3038, }, [0x3039]={ category="nl", cjkwd="w", description="HANGZHOU NUMERAL TWENTY", direction="l", linebreak="id", specials={ "compat", 0x5344 }, unicodeslot=0x3039, }, [0x303A]={ category="nl", cjkwd="w", description="HANGZHOU NUMERAL THIRTY", direction="l", linebreak="id", specials={ "compat", 0x5345 }, unicodeslot=0x303A, }, [0x303B]={ category="lm", cjkwd="w", description="VERTICAL IDEOGRAPHIC ITERATION MARK", direction="l", linebreak="ns", unicodeslot=0x303B, }, [0x303C]={ category="lo", cjkwd="w", description="MASU MARK", direction="l", linebreak="ns", unicodeslot=0x303C, }, [0x303D]={ category="po", cjkwd="w", description="PART ALTERNATION MARK", direction="on", linebreak="id", unicodeslot=0x303D, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x303E]={ category="so", cjkwd="w", description="IDEOGRAPHIC VARIATION INDICATOR", direction="on", linebreak="id", unicodeslot=0x303E, }, [0x303F]={ category="so", contextname="ideographichalffillspace", description="IDEOGRAPHIC HALF FILL SPACE", direction="on", linebreak="id", unicodeslot=0x303F, }, [0x3041]={ adobename="asmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL A", direction="l", linebreak="cj", unicodeslot=0x3041, }, [0x3042]={ adobename="ahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER A", direction="l", linebreak="id", unicodeslot=0x3042, }, [0x3043]={ adobename="ismallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL I", direction="l", linebreak="cj", unicodeslot=0x3043, }, [0x3044]={ adobename="ihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER I", direction="l", linebreak="id", unicodeslot=0x3044, }, [0x3045]={ adobename="usmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL U", direction="l", linebreak="cj", unicodeslot=0x3045, }, [0x3046]={ adobename="uhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER U", direction="l", linebreak="id", unicodeslot=0x3046, }, [0x3047]={ adobename="esmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL E", direction="l", linebreak="cj", unicodeslot=0x3047, }, [0x3048]={ adobename="ehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER E", direction="l", linebreak="id", unicodeslot=0x3048, }, [0x3049]={ adobename="osmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL O", direction="l", linebreak="cj", unicodeslot=0x3049, }, [0x304A]={ adobename="ohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER O", direction="l", linebreak="id", unicodeslot=0x304A, }, [0x304B]={ adobename="kahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER KA", direction="l", linebreak="id", unicodeslot=0x304B, }, [0x304C]={ adobename="gahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER GA", direction="l", linebreak="id", specials={ "char", 0x304B, 0x3099 }, unicodeslot=0x304C, }, [0x304D]={ adobename="kihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER KI", direction="l", linebreak="id", unicodeslot=0x304D, }, [0x304E]={ adobename="gihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER GI", direction="l", linebreak="id", specials={ "char", 0x304D, 0x3099 }, unicodeslot=0x304E, }, [0x304F]={ adobename="kuhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER KU", direction="l", linebreak="id", unicodeslot=0x304F, }, [0x3050]={ adobename="guhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER GU", direction="l", linebreak="id", specials={ "char", 0x304F, 0x3099 }, unicodeslot=0x3050, }, [0x3051]={ adobename="kehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER KE", direction="l", linebreak="id", unicodeslot=0x3051, }, [0x3052]={ adobename="gehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER GE", direction="l", linebreak="id", specials={ "char", 0x3051, 0x3099 }, unicodeslot=0x3052, }, [0x3053]={ adobename="kohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER KO", direction="l", linebreak="id", unicodeslot=0x3053, }, [0x3054]={ adobename="gohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER GO", direction="l", linebreak="id", specials={ "char", 0x3053, 0x3099 }, unicodeslot=0x3054, }, [0x3055]={ adobename="sahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SA", direction="l", linebreak="id", unicodeslot=0x3055, }, [0x3056]={ adobename="zahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER ZA", direction="l", linebreak="id", specials={ "char", 0x3055, 0x3099 }, unicodeslot=0x3056, }, [0x3057]={ adobename="sihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SI", direction="l", linebreak="id", unicodeslot=0x3057, }, [0x3058]={ adobename="zihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER ZI", direction="l", linebreak="id", specials={ "char", 0x3057, 0x3099 }, unicodeslot=0x3058, }, [0x3059]={ adobename="suhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SU", direction="l", linebreak="id", unicodeslot=0x3059, }, [0x305A]={ adobename="zuhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER ZU", direction="l", linebreak="id", specials={ "char", 0x3059, 0x3099 }, unicodeslot=0x305A, }, [0x305B]={ adobename="sehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SE", direction="l", linebreak="id", unicodeslot=0x305B, }, [0x305C]={ adobename="zehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER ZE", direction="l", linebreak="id", specials={ "char", 0x305B, 0x3099 }, unicodeslot=0x305C, }, [0x305D]={ adobename="sohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SO", direction="l", linebreak="id", unicodeslot=0x305D, }, [0x305E]={ adobename="zohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER ZO", direction="l", linebreak="id", specials={ "char", 0x305D, 0x3099 }, unicodeslot=0x305E, }, [0x305F]={ adobename="tahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER TA", direction="l", linebreak="id", unicodeslot=0x305F, }, [0x3060]={ adobename="dahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER DA", direction="l", linebreak="id", specials={ "char", 0x305F, 0x3099 }, unicodeslot=0x3060, }, [0x3061]={ adobename="tihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER TI", direction="l", linebreak="id", unicodeslot=0x3061, }, [0x3062]={ adobename="dihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER DI", direction="l", linebreak="id", specials={ "char", 0x3061, 0x3099 }, unicodeslot=0x3062, }, [0x3063]={ adobename="tusmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL TU", direction="l", linebreak="cj", unicodeslot=0x3063, }, [0x3064]={ adobename="tuhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER TU", direction="l", linebreak="id", unicodeslot=0x3064, }, [0x3065]={ adobename="duhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER DU", direction="l", linebreak="id", specials={ "char", 0x3064, 0x3099 }, unicodeslot=0x3065, }, [0x3066]={ adobename="tehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER TE", direction="l", linebreak="id", unicodeslot=0x3066, }, [0x3067]={ adobename="dehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER DE", direction="l", linebreak="id", specials={ "char", 0x3066, 0x3099 }, unicodeslot=0x3067, }, [0x3068]={ adobename="tohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER TO", direction="l", linebreak="id", unicodeslot=0x3068, }, [0x3069]={ adobename="dohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER DO", direction="l", linebreak="id", specials={ "char", 0x3068, 0x3099 }, unicodeslot=0x3069, }, [0x306A]={ adobename="nahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER NA", direction="l", linebreak="id", unicodeslot=0x306A, }, [0x306B]={ adobename="nihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER NI", direction="l", linebreak="id", unicodeslot=0x306B, }, [0x306C]={ adobename="nuhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER NU", direction="l", linebreak="id", unicodeslot=0x306C, }, [0x306D]={ adobename="nehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER NE", direction="l", linebreak="id", unicodeslot=0x306D, }, [0x306E]={ adobename="nohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER NO", direction="l", linebreak="id", unicodeslot=0x306E, }, [0x306F]={ adobename="hahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER HA", direction="l", linebreak="id", unicodeslot=0x306F, }, [0x3070]={ adobename="bahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER BA", direction="l", linebreak="id", specials={ "char", 0x306F, 0x3099 }, unicodeslot=0x3070, }, [0x3071]={ adobename="pahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER PA", direction="l", linebreak="id", specials={ "char", 0x306F, 0x309A }, unicodeslot=0x3071, }, [0x3072]={ adobename="hihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER HI", direction="l", linebreak="id", unicodeslot=0x3072, }, [0x3073]={ adobename="bihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER BI", direction="l", linebreak="id", specials={ "char", 0x3072, 0x3099 }, unicodeslot=0x3073, }, [0x3074]={ adobename="pihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER PI", direction="l", linebreak="id", specials={ "char", 0x3072, 0x309A }, unicodeslot=0x3074, }, [0x3075]={ adobename="huhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER HU", direction="l", linebreak="id", unicodeslot=0x3075, }, [0x3076]={ adobename="buhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER BU", direction="l", linebreak="id", specials={ "char", 0x3075, 0x3099 }, unicodeslot=0x3076, }, [0x3077]={ adobename="puhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER PU", direction="l", linebreak="id", specials={ "char", 0x3075, 0x309A }, unicodeslot=0x3077, }, [0x3078]={ adobename="hehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER HE", direction="l", linebreak="id", unicodeslot=0x3078, }, [0x3079]={ adobename="behiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER BE", direction="l", linebreak="id", specials={ "char", 0x3078, 0x3099 }, unicodeslot=0x3079, }, [0x307A]={ adobename="pehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER PE", direction="l", linebreak="id", specials={ "char", 0x3078, 0x309A }, unicodeslot=0x307A, }, [0x307B]={ adobename="hohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER HO", direction="l", linebreak="id", unicodeslot=0x307B, }, [0x307C]={ adobename="bohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER BO", direction="l", linebreak="id", specials={ "char", 0x307B, 0x3099 }, unicodeslot=0x307C, }, [0x307D]={ adobename="pohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER PO", direction="l", linebreak="id", specials={ "char", 0x307B, 0x309A }, unicodeslot=0x307D, }, [0x307E]={ adobename="mahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER MA", direction="l", linebreak="id", unicodeslot=0x307E, }, [0x307F]={ adobename="mihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER MI", direction="l", linebreak="id", unicodeslot=0x307F, }, [0x3080]={ adobename="muhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER MU", direction="l", linebreak="id", unicodeslot=0x3080, }, [0x3081]={ adobename="mehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER ME", direction="l", linebreak="id", unicodeslot=0x3081, }, [0x3082]={ adobename="mohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER MO", direction="l", linebreak="id", unicodeslot=0x3082, }, [0x3083]={ adobename="yasmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL YA", direction="l", linebreak="cj", unicodeslot=0x3083, }, [0x3084]={ adobename="yahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER YA", direction="l", linebreak="id", unicodeslot=0x3084, }, [0x3085]={ adobename="yusmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL YU", direction="l", linebreak="cj", unicodeslot=0x3085, }, [0x3086]={ adobename="yuhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER YU", direction="l", linebreak="id", unicodeslot=0x3086, }, [0x3087]={ adobename="yosmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL YO", direction="l", linebreak="cj", unicodeslot=0x3087, }, [0x3088]={ adobename="yohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER YO", direction="l", linebreak="id", unicodeslot=0x3088, }, [0x3089]={ adobename="rahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER RA", direction="l", linebreak="id", unicodeslot=0x3089, }, [0x308A]={ adobename="rihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER RI", direction="l", linebreak="id", unicodeslot=0x308A, }, [0x308B]={ adobename="ruhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER RU", direction="l", linebreak="id", unicodeslot=0x308B, }, [0x308C]={ adobename="rehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER RE", direction="l", linebreak="id", unicodeslot=0x308C, }, [0x308D]={ adobename="rohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER RO", direction="l", linebreak="id", unicodeslot=0x308D, }, [0x308E]={ adobename="wasmallhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL WA", direction="l", linebreak="cj", unicodeslot=0x308E, }, [0x308F]={ adobename="wahiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER WA", direction="l", linebreak="id", unicodeslot=0x308F, }, [0x3090]={ adobename="wihiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER WI", direction="l", linebreak="id", unicodeslot=0x3090, }, [0x3091]={ adobename="wehiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER WE", direction="l", linebreak="id", unicodeslot=0x3091, }, [0x3092]={ adobename="wohiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER WO", direction="l", linebreak="id", unicodeslot=0x3092, }, [0x3093]={ adobename="nhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER N", direction="l", linebreak="id", unicodeslot=0x3093, }, [0x3094]={ adobename="vuhiragana", category="lo", cjkwd="w", description="HIRAGANA LETTER VU", direction="l", linebreak="id", specials={ "char", 0x3046, 0x3099 }, unicodeslot=0x3094, }, [0x3095]={ category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL KA", direction="l", linebreak="cj", unicodeslot=0x3095, }, [0x3096]={ category="lo", cjkwd="w", description="HIRAGANA LETTER SMALL KE", direction="l", linebreak="cj", unicodeslot=0x3096, }, [0x3099]={ category="mn", cjkwd="w", description="COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK", direction="nsm", linebreak="cm", unicodeslot=0x3099, }, [0x309A]={ category="mn", cjkwd="w", description="COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK", direction="nsm", linebreak="cm", unicodeslot=0x309A, }, [0x309B]={ adobename="voicedmarkkana", category="sk", cjkwd="w", description="KATAKANA-HIRAGANA VOICED SOUND MARK", direction="on", linebreak="ns", specials={ "compat", 0x0020, 0x3099 }, unicodeslot=0x309B, }, [0x309C]={ adobename="semivoicedmarkkana", category="sk", cjkwd="w", description="KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK", direction="on", linebreak="ns", specials={ "compat", 0x0020, 0x309A }, unicodeslot=0x309C, }, [0x309D]={ adobename="iterationhiragana", category="lm", cjkwd="w", description="HIRAGANA ITERATION MARK", direction="l", linebreak="ns", unicodeslot=0x309D, }, [0x309E]={ adobename="voicediterationhiragana", category="lm", cjkwd="w", description="HIRAGANA VOICED ITERATION MARK", direction="l", linebreak="ns", specials={ "char", 0x309D, 0x3099 }, unicodeslot=0x309E, }, [0x309F]={ category="lo", cjkwd="w", description="HIRAGANA DIGRAPH YORI", direction="l", linebreak="id", specials={ "vertical", 0x3088, 0x308A }, unicodeslot=0x309F, }, [0x30A0]={ category="pd", cjkwd="w", description="KATAKANA-HIRAGANA DOUBLE HYPHEN", direction="on", linebreak="ns", unicodeslot=0x30A0, }, [0x30A1]={ adobename="asmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL A", direction="l", linebreak="cj", unicodeslot=0x30A1, }, [0x30A2]={ adobename="akatakana", category="lo", cjkwd="w", description="KATAKANA LETTER A", direction="l", linebreak="id", unicodeslot=0x30A2, }, [0x30A3]={ adobename="ismallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL I", direction="l", linebreak="cj", unicodeslot=0x30A3, }, [0x30A4]={ adobename="ikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER I", direction="l", linebreak="id", unicodeslot=0x30A4, }, [0x30A5]={ adobename="usmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL U", direction="l", linebreak="cj", unicodeslot=0x30A5, }, [0x30A6]={ adobename="ukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER U", direction="l", linebreak="id", unicodeslot=0x30A6, }, [0x30A7]={ adobename="esmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL E", direction="l", linebreak="cj", unicodeslot=0x30A7, }, [0x30A8]={ adobename="ekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER E", direction="l", linebreak="id", unicodeslot=0x30A8, }, [0x30A9]={ adobename="osmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL O", direction="l", linebreak="cj", unicodeslot=0x30A9, }, [0x30AA]={ adobename="okatakana", category="lo", cjkwd="w", description="KATAKANA LETTER O", direction="l", linebreak="id", unicodeslot=0x30AA, }, [0x30AB]={ adobename="kakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER KA", direction="l", linebreak="id", unicodeslot=0x30AB, }, [0x30AC]={ adobename="gakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER GA", direction="l", linebreak="id", specials={ "char", 0x30AB, 0x3099 }, unicodeslot=0x30AC, }, [0x30AD]={ adobename="kikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER KI", direction="l", linebreak="id", unicodeslot=0x30AD, }, [0x30AE]={ adobename="gikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER GI", direction="l", linebreak="id", specials={ "char", 0x30AD, 0x3099 }, unicodeslot=0x30AE, }, [0x30AF]={ adobename="kukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER KU", direction="l", linebreak="id", unicodeslot=0x30AF, }, [0x30B0]={ adobename="gukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER GU", direction="l", linebreak="id", specials={ "char", 0x30AF, 0x3099 }, unicodeslot=0x30B0, }, [0x30B1]={ adobename="kekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER KE", direction="l", linebreak="id", unicodeslot=0x30B1, }, [0x30B2]={ adobename="gekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER GE", direction="l", linebreak="id", specials={ "char", 0x30B1, 0x3099 }, unicodeslot=0x30B2, }, [0x30B3]={ adobename="kokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER KO", direction="l", linebreak="id", unicodeslot=0x30B3, }, [0x30B4]={ adobename="gokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER GO", direction="l", linebreak="id", specials={ "char", 0x30B3, 0x3099 }, unicodeslot=0x30B4, }, [0x30B5]={ adobename="sakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SA", direction="l", linebreak="id", unicodeslot=0x30B5, }, [0x30B6]={ adobename="zakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER ZA", direction="l", linebreak="id", specials={ "char", 0x30B5, 0x3099 }, unicodeslot=0x30B6, }, [0x30B7]={ adobename="sikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SI", direction="l", linebreak="id", unicodeslot=0x30B7, }, [0x30B8]={ adobename="zikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER ZI", direction="l", linebreak="id", specials={ "char", 0x30B7, 0x3099 }, unicodeslot=0x30B8, }, [0x30B9]={ adobename="sukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SU", direction="l", linebreak="id", unicodeslot=0x30B9, }, [0x30BA]={ adobename="zukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER ZU", direction="l", linebreak="id", specials={ "char", 0x30B9, 0x3099 }, unicodeslot=0x30BA, }, [0x30BB]={ adobename="sekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SE", direction="l", linebreak="id", unicodeslot=0x30BB, }, [0x30BC]={ adobename="zekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER ZE", direction="l", linebreak="id", specials={ "char", 0x30BB, 0x3099 }, unicodeslot=0x30BC, }, [0x30BD]={ adobename="sokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SO", direction="l", linebreak="id", unicodeslot=0x30BD, }, [0x30BE]={ adobename="zokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER ZO", direction="l", linebreak="id", specials={ "char", 0x30BD, 0x3099 }, unicodeslot=0x30BE, }, [0x30BF]={ adobename="takatakana", category="lo", cjkwd="w", description="KATAKANA LETTER TA", direction="l", linebreak="id", unicodeslot=0x30BF, }, [0x30C0]={ adobename="dakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER DA", direction="l", linebreak="id", specials={ "char", 0x30BF, 0x3099 }, unicodeslot=0x30C0, }, [0x30C1]={ adobename="tikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER TI", direction="l", linebreak="id", unicodeslot=0x30C1, }, [0x30C2]={ adobename="dikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER DI", direction="l", linebreak="id", specials={ "char", 0x30C1, 0x3099 }, unicodeslot=0x30C2, }, [0x30C3]={ adobename="tusmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL TU", direction="l", linebreak="cj", unicodeslot=0x30C3, }, [0x30C4]={ adobename="tukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER TU", direction="l", linebreak="id", unicodeslot=0x30C4, }, [0x30C5]={ adobename="dukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER DU", direction="l", linebreak="id", specials={ "char", 0x30C4, 0x3099 }, unicodeslot=0x30C5, }, [0x30C6]={ adobename="tekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER TE", direction="l", linebreak="id", unicodeslot=0x30C6, }, [0x30C7]={ adobename="dekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER DE", direction="l", linebreak="id", specials={ "char", 0x30C6, 0x3099 }, unicodeslot=0x30C7, }, [0x30C8]={ adobename="tokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER TO", direction="l", linebreak="id", unicodeslot=0x30C8, }, [0x30C9]={ adobename="dokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER DO", direction="l", linebreak="id", specials={ "char", 0x30C8, 0x3099 }, unicodeslot=0x30C9, }, [0x30CA]={ adobename="nakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER NA", direction="l", linebreak="id", unicodeslot=0x30CA, }, [0x30CB]={ adobename="nikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER NI", direction="l", linebreak="id", unicodeslot=0x30CB, }, [0x30CC]={ adobename="nukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER NU", direction="l", linebreak="id", unicodeslot=0x30CC, }, [0x30CD]={ adobename="nekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER NE", direction="l", linebreak="id", unicodeslot=0x30CD, }, [0x30CE]={ adobename="nokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER NO", direction="l", linebreak="id", unicodeslot=0x30CE, }, [0x30CF]={ adobename="hakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER HA", direction="l", linebreak="id", unicodeslot=0x30CF, }, [0x30D0]={ adobename="bakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER BA", direction="l", linebreak="id", specials={ "char", 0x30CF, 0x3099 }, unicodeslot=0x30D0, }, [0x30D1]={ adobename="pakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER PA", direction="l", linebreak="id", specials={ "char", 0x30CF, 0x309A }, unicodeslot=0x30D1, }, [0x30D2]={ adobename="hikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER HI", direction="l", linebreak="id", unicodeslot=0x30D2, }, [0x30D3]={ adobename="bikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER BI", direction="l", linebreak="id", specials={ "char", 0x30D2, 0x3099 }, unicodeslot=0x30D3, }, [0x30D4]={ adobename="pikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER PI", direction="l", linebreak="id", specials={ "char", 0x30D2, 0x309A }, unicodeslot=0x30D4, }, [0x30D5]={ adobename="hukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER HU", direction="l", linebreak="id", unicodeslot=0x30D5, }, [0x30D6]={ adobename="bukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER BU", direction="l", linebreak="id", specials={ "char", 0x30D5, 0x3099 }, unicodeslot=0x30D6, }, [0x30D7]={ adobename="pukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER PU", direction="l", linebreak="id", specials={ "char", 0x30D5, 0x309A }, unicodeslot=0x30D7, }, [0x30D8]={ adobename="hekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER HE", direction="l", linebreak="id", unicodeslot=0x30D8, }, [0x30D9]={ adobename="bekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER BE", direction="l", linebreak="id", specials={ "char", 0x30D8, 0x3099 }, unicodeslot=0x30D9, }, [0x30DA]={ adobename="pekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER PE", direction="l", linebreak="id", specials={ "char", 0x30D8, 0x309A }, unicodeslot=0x30DA, }, [0x30DB]={ adobename="hokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER HO", direction="l", linebreak="id", unicodeslot=0x30DB, }, [0x30DC]={ adobename="bokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER BO", direction="l", linebreak="id", specials={ "char", 0x30DB, 0x3099 }, unicodeslot=0x30DC, }, [0x30DD]={ adobename="pokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER PO", direction="l", linebreak="id", specials={ "char", 0x30DB, 0x309A }, unicodeslot=0x30DD, }, [0x30DE]={ adobename="makatakana", category="lo", cjkwd="w", description="KATAKANA LETTER MA", direction="l", linebreak="id", unicodeslot=0x30DE, }, [0x30DF]={ adobename="mikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER MI", direction="l", linebreak="id", unicodeslot=0x30DF, }, [0x30E0]={ adobename="mukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER MU", direction="l", linebreak="id", unicodeslot=0x30E0, }, [0x30E1]={ adobename="mekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER ME", direction="l", linebreak="id", unicodeslot=0x30E1, }, [0x30E2]={ adobename="mokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER MO", direction="l", linebreak="id", unicodeslot=0x30E2, }, [0x30E3]={ adobename="yasmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL YA", direction="l", linebreak="cj", unicodeslot=0x30E3, }, [0x30E4]={ adobename="yakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER YA", direction="l", linebreak="id", unicodeslot=0x30E4, }, [0x30E5]={ adobename="yusmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL YU", direction="l", linebreak="cj", unicodeslot=0x30E5, }, [0x30E6]={ adobename="yukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER YU", direction="l", linebreak="id", unicodeslot=0x30E6, }, [0x30E7]={ adobename="yosmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL YO", direction="l", linebreak="cj", unicodeslot=0x30E7, }, [0x30E8]={ adobename="yokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER YO", direction="l", linebreak="id", unicodeslot=0x30E8, }, [0x30E9]={ adobename="rakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER RA", direction="l", linebreak="id", unicodeslot=0x30E9, }, [0x30EA]={ adobename="rikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER RI", direction="l", linebreak="id", unicodeslot=0x30EA, }, [0x30EB]={ adobename="rukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER RU", direction="l", linebreak="id", unicodeslot=0x30EB, }, [0x30EC]={ adobename="rekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER RE", direction="l", linebreak="id", unicodeslot=0x30EC, }, [0x30ED]={ adobename="rokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER RO", direction="l", linebreak="id", unicodeslot=0x30ED, }, [0x30EE]={ adobename="wasmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL WA", direction="l", linebreak="cj", unicodeslot=0x30EE, }, [0x30EF]={ adobename="wakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER WA", direction="l", linebreak="id", unicodeslot=0x30EF, }, [0x30F0]={ adobename="wikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER WI", direction="l", linebreak="id", unicodeslot=0x30F0, }, [0x30F1]={ adobename="wekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER WE", direction="l", linebreak="id", unicodeslot=0x30F1, }, [0x30F2]={ adobename="wokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER WO", direction="l", linebreak="id", unicodeslot=0x30F2, }, [0x30F3]={ adobename="nkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER N", direction="l", linebreak="id", unicodeslot=0x30F3, }, [0x30F4]={ adobename="vukatakana", category="lo", cjkwd="w", description="KATAKANA LETTER VU", direction="l", linebreak="id", specials={ "char", 0x30A6, 0x3099 }, unicodeslot=0x30F4, }, [0x30F5]={ adobename="kasmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL KA", direction="l", linebreak="cj", unicodeslot=0x30F5, }, [0x30F6]={ adobename="kesmallkatakana", category="lo", cjkwd="w", description="KATAKANA LETTER SMALL KE", direction="l", linebreak="cj", unicodeslot=0x30F6, }, [0x30F7]={ adobename="vakatakana", category="lo", cjkwd="w", description="KATAKANA LETTER VA", direction="l", linebreak="id", specials={ "char", 0x30EF, 0x3099 }, unicodeslot=0x30F7, }, [0x30F8]={ adobename="vikatakana", category="lo", cjkwd="w", description="KATAKANA LETTER VI", direction="l", linebreak="id", specials={ "char", 0x30F0, 0x3099 }, unicodeslot=0x30F8, }, [0x30F9]={ adobename="vekatakana", category="lo", cjkwd="w", description="KATAKANA LETTER VE", direction="l", linebreak="id", specials={ "char", 0x30F1, 0x3099 }, unicodeslot=0x30F9, }, [0x30FA]={ adobename="vokatakana", category="lo", cjkwd="w", description="KATAKANA LETTER VO", direction="l", linebreak="id", specials={ "char", 0x30F2, 0x3099 }, unicodeslot=0x30FA, }, [0x30FB]={ adobename="dotkatakana", category="po", cjkwd="w", description="KATAKANA MIDDLE DOT", direction="on", linebreak="ns", unicodeslot=0x30FB, }, [0x30FC]={ adobename="prolongedkana", category="lm", cjkwd="w", description="KATAKANA-HIRAGANA PROLONGED SOUND MARK", direction="l", linebreak="cj", unicodeslot=0x30FC, }, [0x30FD]={ adobename="iterationkatakana", category="lm", cjkwd="w", description="KATAKANA ITERATION MARK", direction="l", linebreak="ns", unicodeslot=0x30FD, }, [0x30FE]={ adobename="voicediterationkatakana", category="lm", cjkwd="w", description="KATAKANA VOICED ITERATION MARK", direction="l", linebreak="ns", specials={ "char", 0x30FD, 0x3099 }, unicodeslot=0x30FE, }, [0x30FF]={ category="lo", cjkwd="w", description="KATAKANA DIGRAPH KOTO", direction="l", linebreak="id", specials={ "vertical", 0x30B3, 0x30C8 }, unicodeslot=0x30FF, }, [0x3105]={ adobename="bbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER B", direction="l", linebreak="id", unicodeslot=0x3105, }, [0x3106]={ adobename="pbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER P", direction="l", linebreak="id", unicodeslot=0x3106, }, [0x3107]={ adobename="mbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER M", direction="l", linebreak="id", unicodeslot=0x3107, }, [0x3108]={ adobename="fbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER F", direction="l", linebreak="id", unicodeslot=0x3108, }, [0x3109]={ adobename="dbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER D", direction="l", linebreak="id", unicodeslot=0x3109, }, [0x310A]={ adobename="tbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER T", direction="l", linebreak="id", unicodeslot=0x310A, }, [0x310B]={ adobename="nbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER N", direction="l", linebreak="id", unicodeslot=0x310B, }, [0x310C]={ adobename="lbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER L", direction="l", linebreak="id", unicodeslot=0x310C, }, [0x310D]={ adobename="gbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER G", direction="l", linebreak="id", unicodeslot=0x310D, }, [0x310E]={ adobename="kbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER K", direction="l", linebreak="id", unicodeslot=0x310E, }, [0x310F]={ adobename="hbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER H", direction="l", linebreak="id", unicodeslot=0x310F, }, [0x3110]={ adobename="jbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER J", direction="l", linebreak="id", unicodeslot=0x3110, }, [0x3111]={ adobename="qbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER Q", direction="l", linebreak="id", unicodeslot=0x3111, }, [0x3112]={ adobename="xbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER X", direction="l", linebreak="id", unicodeslot=0x3112, }, [0x3113]={ adobename="zhbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER ZH", direction="l", linebreak="id", unicodeslot=0x3113, }, [0x3114]={ adobename="chbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER CH", direction="l", linebreak="id", unicodeslot=0x3114, }, [0x3115]={ adobename="shbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER SH", direction="l", linebreak="id", unicodeslot=0x3115, }, [0x3116]={ adobename="rbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER R", direction="l", linebreak="id", unicodeslot=0x3116, }, [0x3117]={ adobename="zbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER Z", direction="l", linebreak="id", unicodeslot=0x3117, }, [0x3118]={ adobename="cbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER C", direction="l", linebreak="id", unicodeslot=0x3118, }, [0x3119]={ adobename="sbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER S", direction="l", linebreak="id", unicodeslot=0x3119, }, [0x311A]={ adobename="abopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER A", direction="l", linebreak="id", unicodeslot=0x311A, }, [0x311B]={ adobename="obopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER O", direction="l", linebreak="id", unicodeslot=0x311B, }, [0x311C]={ adobename="ebopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER E", direction="l", linebreak="id", unicodeslot=0x311C, }, [0x311D]={ adobename="ehbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER EH", direction="l", linebreak="id", unicodeslot=0x311D, }, [0x311E]={ adobename="aibopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER AI", direction="l", linebreak="id", unicodeslot=0x311E, }, [0x311F]={ adobename="eibopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER EI", direction="l", linebreak="id", unicodeslot=0x311F, }, [0x3120]={ adobename="aubopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER AU", direction="l", linebreak="id", unicodeslot=0x3120, }, [0x3121]={ adobename="oubopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER OU", direction="l", linebreak="id", unicodeslot=0x3121, }, [0x3122]={ adobename="anbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER AN", direction="l", linebreak="id", unicodeslot=0x3122, }, [0x3123]={ adobename="enbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER EN", direction="l", linebreak="id", unicodeslot=0x3123, }, [0x3124]={ adobename="angbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER ANG", direction="l", linebreak="id", unicodeslot=0x3124, }, [0x3125]={ adobename="engbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER ENG", direction="l", linebreak="id", unicodeslot=0x3125, }, [0x3126]={ adobename="erbopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER ER", direction="l", linebreak="id", unicodeslot=0x3126, }, [0x3127]={ adobename="ibopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER I", direction="l", linebreak="id", unicodeslot=0x3127, }, [0x3128]={ adobename="ubopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER U", direction="l", linebreak="id", unicodeslot=0x3128, }, [0x3129]={ adobename="iubopomofo", category="lo", cjkwd="w", description="BOPOMOFO LETTER IU", direction="l", linebreak="id", unicodeslot=0x3129, }, [0x312A]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER V", direction="l", linebreak="id", unicodeslot=0x312A, }, [0x312B]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER NG", direction="l", linebreak="id", unicodeslot=0x312B, }, [0x312C]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER GN", direction="l", linebreak="id", unicodeslot=0x312C, }, [0x312D]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER IH", direction="l", linebreak="id", unicodeslot=0x312D, }, [0x3131]={ adobename="kiyeokkorean", category="lo", cjkwd="w", description="HANGUL LETTER KIYEOK", direction="l", linebreak="id", specials={ "compat", 0x1100 }, unicodeslot=0x3131, }, [0x3132]={ adobename="ssangkiyeokkorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGKIYEOK", direction="l", linebreak="id", specials={ "compat", 0x1101 }, unicodeslot=0x3132, }, [0x3133]={ adobename="kiyeoksioskorean", category="lo", cjkwd="w", description="HANGUL LETTER KIYEOK-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11AA }, unicodeslot=0x3133, }, [0x3134]={ adobename="nieunkorean", category="lo", cjkwd="w", description="HANGUL LETTER NIEUN", direction="l", linebreak="id", specials={ "compat", 0x1102 }, unicodeslot=0x3134, }, [0x3135]={ adobename="nieuncieuckorean", category="lo", cjkwd="w", description="HANGUL LETTER NIEUN-CIEUC", direction="l", linebreak="id", specials={ "compat", 0x11AC }, unicodeslot=0x3135, }, [0x3136]={ adobename="nieunhieuhkorean", category="lo", cjkwd="w", description="HANGUL LETTER NIEUN-HIEUH", direction="l", linebreak="id", specials={ "compat", 0x11AD }, unicodeslot=0x3136, }, [0x3137]={ adobename="tikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x1103 }, unicodeslot=0x3137, }, [0x3138]={ adobename="ssangtikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGTIKEUT", direction="l", linebreak="id", specials={ "compat", 0x1104 }, unicodeslot=0x3138, }, [0x3139]={ adobename="rieulkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL", direction="l", linebreak="id", specials={ "compat", 0x1105 }, unicodeslot=0x3139, }, [0x313A]={ adobename="rieulkiyeokkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-KIYEOK", direction="l", linebreak="id", specials={ "compat", 0x11B0 }, unicodeslot=0x313A, }, [0x313B]={ adobename="rieulmieumkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-MIEUM", direction="l", linebreak="id", specials={ "compat", 0x11B1 }, unicodeslot=0x313B, }, [0x313C]={ adobename="rieulpieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-PIEUP", direction="l", linebreak="id", specials={ "compat", 0x11B2 }, unicodeslot=0x313C, }, [0x313D]={ adobename="rieulsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11B3 }, unicodeslot=0x313D, }, [0x313E]={ adobename="rieulthieuthkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-THIEUTH", direction="l", linebreak="id", specials={ "compat", 0x11B4 }, unicodeslot=0x313E, }, [0x313F]={ adobename="rieulphieuphkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-PHIEUPH", direction="l", linebreak="id", specials={ "compat", 0x11B5 }, unicodeslot=0x313F, }, [0x3140]={ adobename="rieulhieuhkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-HIEUH", direction="l", linebreak="id", specials={ "compat", 0x111A }, unicodeslot=0x3140, }, [0x3141]={ adobename="mieumkorean", category="lo", cjkwd="w", description="HANGUL LETTER MIEUM", direction="l", linebreak="id", specials={ "compat", 0x1106 }, unicodeslot=0x3141, }, [0x3142]={ adobename="pieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP", direction="l", linebreak="id", specials={ "compat", 0x1107 }, unicodeslot=0x3142, }, [0x3143]={ adobename="ssangpieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGPIEUP", direction="l", linebreak="id", specials={ "compat", 0x1108 }, unicodeslot=0x3143, }, [0x3144]={ adobename="pieupsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-SIOS", direction="l", linebreak="id", specials={ "compat", 0x1121 }, unicodeslot=0x3144, }, [0x3145]={ adobename="sioskorean", category="lo", cjkwd="w", description="HANGUL LETTER SIOS", direction="l", linebreak="id", specials={ "compat", 0x1109 }, unicodeslot=0x3145, }, [0x3146]={ adobename="ssangsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGSIOS", direction="l", linebreak="id", specials={ "compat", 0x110A }, unicodeslot=0x3146, }, [0x3147]={ adobename="ieungkorean", category="lo", cjkwd="w", description="HANGUL LETTER IEUNG", direction="l", linebreak="id", specials={ "compat", 0x110B }, unicodeslot=0x3147, }, [0x3148]={ adobename="cieuckorean", category="lo", cjkwd="w", description="HANGUL LETTER CIEUC", direction="l", linebreak="id", specials={ "compat", 0x110C }, unicodeslot=0x3148, }, [0x3149]={ adobename="ssangcieuckorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGCIEUC", direction="l", linebreak="id", specials={ "compat", 0x110D }, unicodeslot=0x3149, }, [0x314A]={ adobename="chieuchkorean", category="lo", cjkwd="w", description="HANGUL LETTER CHIEUCH", direction="l", linebreak="id", specials={ "compat", 0x110E }, unicodeslot=0x314A, }, [0x314B]={ adobename="khieukhkorean", category="lo", cjkwd="w", description="HANGUL LETTER KHIEUKH", direction="l", linebreak="id", specials={ "compat", 0x110F }, unicodeslot=0x314B, }, [0x314C]={ adobename="thieuthkorean", category="lo", cjkwd="w", description="HANGUL LETTER THIEUTH", direction="l", linebreak="id", specials={ "compat", 0x1110 }, unicodeslot=0x314C, }, [0x314D]={ adobename="phieuphkorean", category="lo", cjkwd="w", description="HANGUL LETTER PHIEUPH", direction="l", linebreak="id", specials={ "compat", 0x1111 }, unicodeslot=0x314D, }, [0x314E]={ adobename="hieuhkorean", category="lo", cjkwd="w", description="HANGUL LETTER HIEUH", direction="l", linebreak="id", specials={ "compat", 0x1112 }, unicodeslot=0x314E, }, [0x314F]={ adobename="akorean", category="lo", cjkwd="w", description="HANGUL LETTER A", direction="l", linebreak="id", specials={ "compat", 0x1161 }, unicodeslot=0x314F, }, [0x3150]={ adobename="aekorean", category="lo", cjkwd="w", description="HANGUL LETTER AE", direction="l", linebreak="id", specials={ "compat", 0x1162 }, unicodeslot=0x3150, }, [0x3151]={ adobename="yakorean", category="lo", cjkwd="w", description="HANGUL LETTER YA", direction="l", linebreak="id", specials={ "compat", 0x1163 }, unicodeslot=0x3151, }, [0x3152]={ adobename="yaekorean", category="lo", cjkwd="w", description="HANGUL LETTER YAE", direction="l", linebreak="id", specials={ "compat", 0x1164 }, unicodeslot=0x3152, }, [0x3153]={ adobename="eokorean", category="lo", cjkwd="w", description="HANGUL LETTER EO", direction="l", linebreak="id", specials={ "compat", 0x1165 }, unicodeslot=0x3153, }, [0x3154]={ adobename="ekorean", category="lo", cjkwd="w", description="HANGUL LETTER E", direction="l", linebreak="id", specials={ "compat", 0x1166 }, unicodeslot=0x3154, }, [0x3155]={ adobename="yeokorean", category="lo", cjkwd="w", description="HANGUL LETTER YEO", direction="l", linebreak="id", specials={ "compat", 0x1167 }, unicodeslot=0x3155, }, [0x3156]={ adobename="yekorean", category="lo", cjkwd="w", description="HANGUL LETTER YE", direction="l", linebreak="id", specials={ "compat", 0x1168 }, unicodeslot=0x3156, }, [0x3157]={ adobename="okorean", category="lo", cjkwd="w", description="HANGUL LETTER O", direction="l", linebreak="id", specials={ "compat", 0x1169 }, unicodeslot=0x3157, }, [0x3158]={ adobename="wakorean", category="lo", cjkwd="w", description="HANGUL LETTER WA", direction="l", linebreak="id", specials={ "compat", 0x116A }, unicodeslot=0x3158, }, [0x3159]={ adobename="waekorean", category="lo", cjkwd="w", description="HANGUL LETTER WAE", direction="l", linebreak="id", specials={ "compat", 0x116B }, unicodeslot=0x3159, }, [0x315A]={ adobename="oekorean", category="lo", cjkwd="w", description="HANGUL LETTER OE", direction="l", linebreak="id", specials={ "compat", 0x116C }, unicodeslot=0x315A, }, [0x315B]={ adobename="yokorean", category="lo", cjkwd="w", description="HANGUL LETTER YO", direction="l", linebreak="id", specials={ "compat", 0x116D }, unicodeslot=0x315B, }, [0x315C]={ adobename="ukorean", category="lo", cjkwd="w", description="HANGUL LETTER U", direction="l", linebreak="id", specials={ "compat", 0x116E }, unicodeslot=0x315C, }, [0x315D]={ adobename="weokorean", category="lo", cjkwd="w", description="HANGUL LETTER WEO", direction="l", linebreak="id", specials={ "compat", 0x116F }, unicodeslot=0x315D, }, [0x315E]={ adobename="wekorean", category="lo", cjkwd="w", description="HANGUL LETTER WE", direction="l", linebreak="id", specials={ "compat", 0x1170 }, unicodeslot=0x315E, }, [0x315F]={ adobename="wikorean", category="lo", cjkwd="w", description="HANGUL LETTER WI", direction="l", linebreak="id", specials={ "compat", 0x1171 }, unicodeslot=0x315F, }, [0x3160]={ adobename="yukorean", category="lo", cjkwd="w", description="HANGUL LETTER YU", direction="l", linebreak="id", specials={ "compat", 0x1172 }, unicodeslot=0x3160, }, [0x3161]={ adobename="eukorean", category="lo", cjkwd="w", description="HANGUL LETTER EU", direction="l", linebreak="id", specials={ "compat", 0x1173 }, unicodeslot=0x3161, }, [0x3162]={ adobename="yikorean", category="lo", cjkwd="w", description="HANGUL LETTER YI", direction="l", linebreak="id", specials={ "compat", 0x1174 }, unicodeslot=0x3162, }, [0x3163]={ adobename="ikorean", category="lo", cjkwd="w", description="HANGUL LETTER I", direction="l", linebreak="id", specials={ "compat", 0x1175 }, unicodeslot=0x3163, }, [0x3164]={ adobename="hangulfiller", category="lo", cjkwd="w", description="HANGUL FILLER", direction="l", linebreak="id", specials={ "compat", 0x1160 }, unicodeslot=0x3164, }, [0x3165]={ adobename="ssangnieunkorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGNIEUN", direction="l", linebreak="id", specials={ "compat", 0x1114 }, unicodeslot=0x3165, }, [0x3166]={ adobename="nieuntikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER NIEUN-TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x1115 }, unicodeslot=0x3166, }, [0x3167]={ adobename="nieunsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER NIEUN-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11C7 }, unicodeslot=0x3167, }, [0x3168]={ adobename="nieunpansioskorean", category="lo", cjkwd="w", description="HANGUL LETTER NIEUN-PANSIOS", direction="l", linebreak="id", specials={ "compat", 0x11C8 }, unicodeslot=0x3168, }, [0x3169]={ adobename="rieulkiyeoksioskorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-KIYEOK-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11CC }, unicodeslot=0x3169, }, [0x316A]={ adobename="rieultikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x11CE }, unicodeslot=0x316A, }, [0x316B]={ adobename="rieulpieupsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-PIEUP-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11D3 }, unicodeslot=0x316B, }, [0x316C]={ adobename="rieulpansioskorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-PANSIOS", direction="l", linebreak="id", specials={ "compat", 0x11D7 }, unicodeslot=0x316C, }, [0x316D]={ adobename="rieulyeorinhieuhkorean", category="lo", cjkwd="w", description="HANGUL LETTER RIEUL-YEORINHIEUH", direction="l", linebreak="id", specials={ "compat", 0x11D9 }, unicodeslot=0x316D, }, [0x316E]={ adobename="mieumpieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER MIEUM-PIEUP", direction="l", linebreak="id", specials={ "compat", 0x111C }, unicodeslot=0x316E, }, [0x316F]={ adobename="mieumsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER MIEUM-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11DD }, unicodeslot=0x316F, }, [0x3170]={ adobename="mieumpansioskorean", category="lo", cjkwd="w", description="HANGUL LETTER MIEUM-PANSIOS", direction="l", linebreak="id", specials={ "compat", 0x11DF }, unicodeslot=0x3170, }, [0x3171]={ adobename="kapyeounmieumkorean", category="lo", cjkwd="w", description="HANGUL LETTER KAPYEOUNMIEUM", direction="l", linebreak="id", specials={ "compat", 0x111D }, unicodeslot=0x3171, }, [0x3172]={ adobename="pieupkiyeokkorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-KIYEOK", direction="l", linebreak="id", specials={ "compat", 0x111E }, unicodeslot=0x3172, }, [0x3173]={ adobename="pieuptikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x1120 }, unicodeslot=0x3173, }, [0x3174]={ adobename="pieupsioskiyeokkorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-SIOS-KIYEOK", direction="l", linebreak="id", specials={ "compat", 0x1122 }, unicodeslot=0x3174, }, [0x3175]={ adobename="pieupsiostikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-SIOS-TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x1123 }, unicodeslot=0x3175, }, [0x3176]={ adobename="pieupcieuckorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-CIEUC", direction="l", linebreak="id", specials={ "compat", 0x1127 }, unicodeslot=0x3176, }, [0x3177]={ adobename="pieupthieuthkorean", category="lo", cjkwd="w", description="HANGUL LETTER PIEUP-THIEUTH", direction="l", linebreak="id", specials={ "compat", 0x1129 }, unicodeslot=0x3177, }, [0x3178]={ adobename="kapyeounpieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER KAPYEOUNPIEUP", direction="l", linebreak="id", specials={ "compat", 0x112B }, unicodeslot=0x3178, }, [0x3179]={ adobename="kapyeounssangpieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER KAPYEOUNSSANGPIEUP", direction="l", linebreak="id", specials={ "compat", 0x112C }, unicodeslot=0x3179, }, [0x317A]={ adobename="sioskiyeokkorean", category="lo", cjkwd="w", description="HANGUL LETTER SIOS-KIYEOK", direction="l", linebreak="id", specials={ "compat", 0x112D }, unicodeslot=0x317A, }, [0x317B]={ adobename="siosnieunkorean", category="lo", cjkwd="w", description="HANGUL LETTER SIOS-NIEUN", direction="l", linebreak="id", specials={ "compat", 0x112E }, unicodeslot=0x317B, }, [0x317C]={ adobename="siostikeutkorean", category="lo", cjkwd="w", description="HANGUL LETTER SIOS-TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x112F }, unicodeslot=0x317C, }, [0x317D]={ adobename="siospieupkorean", category="lo", cjkwd="w", description="HANGUL LETTER SIOS-PIEUP", direction="l", linebreak="id", specials={ "compat", 0x1132 }, unicodeslot=0x317D, }, [0x317E]={ adobename="sioscieuckorean", category="lo", cjkwd="w", description="HANGUL LETTER SIOS-CIEUC", direction="l", linebreak="id", specials={ "compat", 0x1136 }, unicodeslot=0x317E, }, [0x317F]={ adobename="pansioskorean", category="lo", cjkwd="w", description="HANGUL LETTER PANSIOS", direction="l", linebreak="id", specials={ "compat", 0x1140 }, unicodeslot=0x317F, }, [0x3180]={ adobename="ssangieungkorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGIEUNG", direction="l", linebreak="id", specials={ "compat", 0x1147 }, unicodeslot=0x3180, }, [0x3181]={ adobename="yesieungkorean", category="lo", cjkwd="w", description="HANGUL LETTER YESIEUNG", direction="l", linebreak="id", specials={ "compat", 0x114C }, unicodeslot=0x3181, }, [0x3182]={ adobename="yesieungsioskorean", category="lo", cjkwd="w", description="HANGUL LETTER YESIEUNG-SIOS", direction="l", linebreak="id", specials={ "compat", 0x11F1 }, unicodeslot=0x3182, }, [0x3183]={ adobename="yesieungpansioskorean", category="lo", cjkwd="w", description="HANGUL LETTER YESIEUNG-PANSIOS", direction="l", linebreak="id", specials={ "compat", 0x11F2 }, unicodeslot=0x3183, }, [0x3184]={ adobename="kapyeounphieuphkorean", category="lo", cjkwd="w", description="HANGUL LETTER KAPYEOUNPHIEUPH", direction="l", linebreak="id", specials={ "compat", 0x1157 }, unicodeslot=0x3184, }, [0x3185]={ adobename="ssanghieuhkorean", category="lo", cjkwd="w", description="HANGUL LETTER SSANGHIEUH", direction="l", linebreak="id", specials={ "compat", 0x1158 }, unicodeslot=0x3185, }, [0x3186]={ adobename="yeorinhieuhkorean", category="lo", cjkwd="w", description="HANGUL LETTER YEORINHIEUH", direction="l", linebreak="id", specials={ "compat", 0x1159 }, unicodeslot=0x3186, }, [0x3187]={ adobename="yoyakorean", category="lo", cjkwd="w", description="HANGUL LETTER YO-YA", direction="l", linebreak="id", specials={ "compat", 0x1184 }, unicodeslot=0x3187, }, [0x3188]={ adobename="yoyaekorean", category="lo", cjkwd="w", description="HANGUL LETTER YO-YAE", direction="l", linebreak="id", specials={ "compat", 0x1185 }, unicodeslot=0x3188, }, [0x3189]={ adobename="yoikorean", category="lo", cjkwd="w", description="HANGUL LETTER YO-I", direction="l", linebreak="id", specials={ "compat", 0x1188 }, unicodeslot=0x3189, }, [0x318A]={ adobename="yuyeokorean", category="lo", cjkwd="w", description="HANGUL LETTER YU-YEO", direction="l", linebreak="id", specials={ "compat", 0x1191 }, unicodeslot=0x318A, }, [0x318B]={ adobename="yuyekorean", category="lo", cjkwd="w", description="HANGUL LETTER YU-YE", direction="l", linebreak="id", specials={ "compat", 0x1192 }, unicodeslot=0x318B, }, [0x318C]={ adobename="yuikorean", category="lo", cjkwd="w", description="HANGUL LETTER YU-I", direction="l", linebreak="id", specials={ "compat", 0x1194 }, unicodeslot=0x318C, }, [0x318D]={ adobename="araeakorean", category="lo", cjkwd="w", description="HANGUL LETTER ARAEA", direction="l", linebreak="id", specials={ "compat", 0x119E }, unicodeslot=0x318D, }, [0x318E]={ adobename="araeaekorean", category="lo", cjkwd="w", description="HANGUL LETTER ARAEAE", direction="l", linebreak="id", specials={ "compat", 0x11A1 }, unicodeslot=0x318E, }, [0x3190]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION LINKING MARK", direction="l", linebreak="id", unicodeslot=0x3190, }, [0x3191]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION REVERSE MARK", direction="l", linebreak="id", unicodeslot=0x3191, }, [0x3192]={ category="no", cjkwd="w", description="IDEOGRAPHIC ANNOTATION ONE MARK", direction="l", linebreak="id", specials={ "super", 0x4E00 }, unicodeslot=0x3192, }, [0x3193]={ category="no", cjkwd="w", description="IDEOGRAPHIC ANNOTATION TWO MARK", direction="l", linebreak="id", specials={ "super", 0x4E8C }, unicodeslot=0x3193, }, [0x3194]={ category="no", cjkwd="w", description="IDEOGRAPHIC ANNOTATION THREE MARK", direction="l", linebreak="id", specials={ "super", 0x4E09 }, unicodeslot=0x3194, }, [0x3195]={ category="no", cjkwd="w", description="IDEOGRAPHIC ANNOTATION FOUR MARK", direction="l", linebreak="id", specials={ "super", 0x56DB }, unicodeslot=0x3195, }, [0x3196]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION TOP MARK", direction="l", linebreak="id", specials={ "super", 0x4E0A }, unicodeslot=0x3196, }, [0x3197]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION MIDDLE MARK", direction="l", linebreak="id", specials={ "super", 0x4E2D }, unicodeslot=0x3197, }, [0x3198]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION BOTTOM MARK", direction="l", linebreak="id", specials={ "super", 0x4E0B }, unicodeslot=0x3198, }, [0x3199]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION FIRST MARK", direction="l", linebreak="id", specials={ "super", 0x7532 }, unicodeslot=0x3199, }, [0x319A]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION SECOND MARK", direction="l", linebreak="id", specials={ "super", 0x4E59 }, unicodeslot=0x319A, }, [0x319B]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION THIRD MARK", direction="l", linebreak="id", specials={ "super", 0x4E19 }, unicodeslot=0x319B, }, [0x319C]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION FOURTH MARK", direction="l", linebreak="id", specials={ "super", 0x4E01 }, unicodeslot=0x319C, }, [0x319D]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION HEAVEN MARK", direction="l", linebreak="id", specials={ "super", 0x5929 }, unicodeslot=0x319D, }, [0x319E]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION EARTH MARK", direction="l", linebreak="id", specials={ "super", 0x5730 }, unicodeslot=0x319E, }, [0x319F]={ category="so", cjkwd="w", description="IDEOGRAPHIC ANNOTATION MAN MARK", direction="l", linebreak="id", specials={ "super", 0x4EBA }, unicodeslot=0x319F, }, [0x31A0]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER BU", direction="l", linebreak="id", unicodeslot=0x31A0, }, [0x31A1]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER ZI", direction="l", linebreak="id", unicodeslot=0x31A1, }, [0x31A2]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER JI", direction="l", linebreak="id", unicodeslot=0x31A2, }, [0x31A3]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER GU", direction="l", linebreak="id", unicodeslot=0x31A3, }, [0x31A4]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER EE", direction="l", linebreak="id", unicodeslot=0x31A4, }, [0x31A5]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER ENN", direction="l", linebreak="id", unicodeslot=0x31A5, }, [0x31A6]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER OO", direction="l", linebreak="id", unicodeslot=0x31A6, }, [0x31A7]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER ONN", direction="l", linebreak="id", unicodeslot=0x31A7, }, [0x31A8]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER IR", direction="l", linebreak="id", unicodeslot=0x31A8, }, [0x31A9]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER ANN", direction="l", linebreak="id", unicodeslot=0x31A9, }, [0x31AA]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER INN", direction="l", linebreak="id", unicodeslot=0x31AA, }, [0x31AB]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER UNN", direction="l", linebreak="id", unicodeslot=0x31AB, }, [0x31AC]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER IM", direction="l", linebreak="id", unicodeslot=0x31AC, }, [0x31AD]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER NGG", direction="l", linebreak="id", unicodeslot=0x31AD, }, [0x31AE]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER AINN", direction="l", linebreak="id", unicodeslot=0x31AE, }, [0x31AF]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER AUNN", direction="l", linebreak="id", unicodeslot=0x31AF, }, [0x31B0]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER AM", direction="l", linebreak="id", unicodeslot=0x31B0, }, [0x31B1]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER OM", direction="l", linebreak="id", unicodeslot=0x31B1, }, [0x31B2]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER ONG", direction="l", linebreak="id", unicodeslot=0x31B2, }, [0x31B3]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER INNN", direction="l", linebreak="id", unicodeslot=0x31B3, }, [0x31B4]={ category="lo", cjkwd="w", description="BOPOMOFO FINAL LETTER P", direction="l", linebreak="id", unicodeslot=0x31B4, }, [0x31B5]={ category="lo", cjkwd="w", description="BOPOMOFO FINAL LETTER T", direction="l", linebreak="id", unicodeslot=0x31B5, }, [0x31B6]={ category="lo", cjkwd="w", description="BOPOMOFO FINAL LETTER K", direction="l", linebreak="id", unicodeslot=0x31B6, }, [0x31B7]={ category="lo", cjkwd="w", description="BOPOMOFO FINAL LETTER H", direction="l", linebreak="id", unicodeslot=0x31B7, }, [0x31B8]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER GH", direction="l", linebreak="id", unicodeslot=0x31B8, }, [0x31B9]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER LH", direction="l", linebreak="id", unicodeslot=0x31B9, }, [0x31BA]={ category="lo", cjkwd="w", description="BOPOMOFO LETTER ZY", direction="l", linebreak="id", unicodeslot=0x31BA, }, [0x31C0]={ category="so", cjkwd="w", description="CJK STROKE T", direction="on", linebreak="id", unicodeslot=0x31C0, }, [0x31C1]={ category="so", cjkwd="w", description="CJK STROKE WG", direction="on", linebreak="id", unicodeslot=0x31C1, }, [0x31C2]={ category="so", cjkwd="w", description="CJK STROKE XG", direction="on", linebreak="id", unicodeslot=0x31C2, }, [0x31C3]={ category="so", cjkwd="w", description="CJK STROKE BXG", direction="on", linebreak="id", unicodeslot=0x31C3, }, [0x31C4]={ category="so", cjkwd="w", description="CJK STROKE SW", direction="on", linebreak="id", unicodeslot=0x31C4, }, [0x31C5]={ category="so", cjkwd="w", description="CJK STROKE HZZ", direction="on", linebreak="id", unicodeslot=0x31C5, }, [0x31C6]={ category="so", cjkwd="w", description="CJK STROKE HZG", direction="on", linebreak="id", unicodeslot=0x31C6, }, [0x31C7]={ category="so", cjkwd="w", description="CJK STROKE HP", direction="on", linebreak="id", unicodeslot=0x31C7, }, [0x31C8]={ category="so", cjkwd="w", description="CJK STROKE HZWG", direction="on", linebreak="id", unicodeslot=0x31C8, }, [0x31C9]={ category="so", cjkwd="w", description="CJK STROKE SZWG", direction="on", linebreak="id", unicodeslot=0x31C9, }, [0x31CA]={ category="so", cjkwd="w", description="CJK STROKE HZT", direction="on", linebreak="id", unicodeslot=0x31CA, }, [0x31CB]={ category="so", cjkwd="w", description="CJK STROKE HZZP", direction="on", linebreak="id", unicodeslot=0x31CB, }, [0x31CC]={ category="so", cjkwd="w", description="CJK STROKE HPWG", direction="on", linebreak="id", unicodeslot=0x31CC, }, [0x31CD]={ category="so", cjkwd="w", description="CJK STROKE HZW", direction="on", linebreak="id", unicodeslot=0x31CD, }, [0x31CE]={ category="so", cjkwd="w", description="CJK STROKE HZZZ", direction="on", linebreak="id", unicodeslot=0x31CE, }, [0x31CF]={ category="so", cjkwd="w", description="CJK STROKE N", direction="on", linebreak="id", unicodeslot=0x31CF, }, [0x31D0]={ category="so", cjkwd="w", description="CJK STROKE H", direction="on", linebreak="id", unicodeslot=0x31D0, }, [0x31D1]={ category="so", cjkwd="w", description="CJK STROKE S", direction="on", linebreak="id", unicodeslot=0x31D1, }, [0x31D2]={ category="so", cjkwd="w", description="CJK STROKE P", direction="on", linebreak="id", unicodeslot=0x31D2, }, [0x31D3]={ category="so", cjkwd="w", description="CJK STROKE SP", direction="on", linebreak="id", unicodeslot=0x31D3, }, [0x31D4]={ category="so", cjkwd="w", description="CJK STROKE D", direction="on", linebreak="id", unicodeslot=0x31D4, }, [0x31D5]={ category="so", cjkwd="w", description="CJK STROKE HZ", direction="on", linebreak="id", unicodeslot=0x31D5, }, [0x31D6]={ category="so", cjkwd="w", description="CJK STROKE HG", direction="on", linebreak="id", unicodeslot=0x31D6, }, [0x31D7]={ category="so", cjkwd="w", description="CJK STROKE SZ", direction="on", linebreak="id", unicodeslot=0x31D7, }, [0x31D8]={ category="so", cjkwd="w", description="CJK STROKE SWZ", direction="on", linebreak="id", unicodeslot=0x31D8, }, [0x31D9]={ category="so", cjkwd="w", description="CJK STROKE ST", direction="on", linebreak="id", unicodeslot=0x31D9, }, [0x31DA]={ category="so", cjkwd="w", description="CJK STROKE SG", direction="on", linebreak="id", unicodeslot=0x31DA, }, [0x31DB]={ category="so", cjkwd="w", description="CJK STROKE PD", direction="on", linebreak="id", unicodeslot=0x31DB, }, [0x31DC]={ category="so", cjkwd="w", description="CJK STROKE PZ", direction="on", linebreak="id", unicodeslot=0x31DC, }, [0x31DD]={ category="so", cjkwd="w", description="CJK STROKE TN", direction="on", linebreak="id", unicodeslot=0x31DD, }, [0x31DE]={ category="so", cjkwd="w", description="CJK STROKE SZZ", direction="on", linebreak="id", unicodeslot=0x31DE, }, [0x31DF]={ category="so", cjkwd="w", description="CJK STROKE SWG", direction="on", linebreak="id", unicodeslot=0x31DF, }, [0x31E0]={ category="so", cjkwd="w", description="CJK STROKE HXWG", direction="on", linebreak="id", unicodeslot=0x31E0, }, [0x31E1]={ category="so", cjkwd="w", description="CJK STROKE HZZZG", direction="on", linebreak="id", unicodeslot=0x31E1, }, [0x31E2]={ category="so", cjkwd="w", description="CJK STROKE PG", direction="on", linebreak="id", unicodeslot=0x31E2, }, [0x31E3]={ category="so", cjkwd="w", description="CJK STROKE Q", direction="on", linebreak="id", unicodeslot=0x31E3, }, [0x31F0]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL KU", direction="l", linebreak="cj", unicodeslot=0x31F0, }, [0x31F1]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL SI", direction="l", linebreak="cj", unicodeslot=0x31F1, }, [0x31F2]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL SU", direction="l", linebreak="cj", unicodeslot=0x31F2, }, [0x31F3]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL TO", direction="l", linebreak="cj", unicodeslot=0x31F3, }, [0x31F4]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL NU", direction="l", linebreak="cj", unicodeslot=0x31F4, }, [0x31F5]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL HA", direction="l", linebreak="cj", unicodeslot=0x31F5, }, [0x31F6]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL HI", direction="l", linebreak="cj", unicodeslot=0x31F6, }, [0x31F7]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL HU", direction="l", linebreak="cj", unicodeslot=0x31F7, }, [0x31F8]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL HE", direction="l", linebreak="cj", unicodeslot=0x31F8, }, [0x31F9]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL HO", direction="l", linebreak="cj", unicodeslot=0x31F9, }, [0x31FA]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL MU", direction="l", linebreak="cj", unicodeslot=0x31FA, }, [0x31FB]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL RA", direction="l", linebreak="cj", unicodeslot=0x31FB, }, [0x31FC]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL RI", direction="l", linebreak="cj", unicodeslot=0x31FC, }, [0x31FD]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL RU", direction="l", linebreak="cj", unicodeslot=0x31FD, }, [0x31FE]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL RE", direction="l", linebreak="cj", unicodeslot=0x31FE, }, [0x31FF]={ category="lo", cjkwd="w", description="KATAKANA LETTER SMALL RO", direction="l", linebreak="cj", unicodeslot=0x31FF, }, [0x3200]={ adobename="kiyeokparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL KIYEOK", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1100, 0x0029 }, unicodeslot=0x3200, }, [0x3201]={ adobename="nieunparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL NIEUN", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1102, 0x0029 }, unicodeslot=0x3201, }, [0x3202]={ adobename="tikeutparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL TIKEUT", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1103, 0x0029 }, unicodeslot=0x3202, }, [0x3203]={ adobename="rieulparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL RIEUL", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1105, 0x0029 }, unicodeslot=0x3203, }, [0x3204]={ adobename="mieumparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL MIEUM", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1106, 0x0029 }, unicodeslot=0x3204, }, [0x3205]={ adobename="pieupparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL PIEUP", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1107, 0x0029 }, unicodeslot=0x3205, }, [0x3206]={ adobename="siosparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL SIOS", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1109, 0x0029 }, unicodeslot=0x3206, }, [0x3207]={ adobename="ieungparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL IEUNG", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110B, 0x0029 }, unicodeslot=0x3207, }, [0x3208]={ adobename="cieucparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL CIEUC", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110C, 0x0029 }, unicodeslot=0x3208, }, [0x3209]={ adobename="chieuchparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL CHIEUCH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110E, 0x0029 }, unicodeslot=0x3209, }, [0x320A]={ adobename="khieukhparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL KHIEUKH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110F, 0x0029 }, unicodeslot=0x320A, }, [0x320B]={ adobename="thieuthparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL THIEUTH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1110, 0x0029 }, unicodeslot=0x320B, }, [0x320C]={ adobename="phieuphparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL PHIEUPH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1111, 0x0029 }, unicodeslot=0x320C, }, [0x320D]={ adobename="hieuhparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL HIEUH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1112, 0x0029 }, unicodeslot=0x320D, }, [0x320E]={ adobename="kiyeokaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL KIYEOK A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1100, 0x1161, 0x0029 }, unicodeslot=0x320E, }, [0x320F]={ adobename="nieunaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL NIEUN A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1102, 0x1161, 0x0029 }, unicodeslot=0x320F, }, [0x3210]={ adobename="tikeutaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL TIKEUT A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1103, 0x1161, 0x0029 }, unicodeslot=0x3210, }, [0x3211]={ adobename="rieulaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL RIEUL A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1105, 0x1161, 0x0029 }, unicodeslot=0x3211, }, [0x3212]={ adobename="mieumaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL MIEUM A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1106, 0x1161, 0x0029 }, unicodeslot=0x3212, }, [0x3213]={ adobename="pieupaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL PIEUP A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1107, 0x1161, 0x0029 }, unicodeslot=0x3213, }, [0x3214]={ adobename="siosaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL SIOS A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1109, 0x1161, 0x0029 }, unicodeslot=0x3214, }, [0x3215]={ adobename="ieungaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL IEUNG A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110B, 0x1161, 0x0029 }, unicodeslot=0x3215, }, [0x3216]={ adobename="cieucaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL CIEUC A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110C, 0x1161, 0x0029 }, unicodeslot=0x3216, }, [0x3217]={ adobename="chieuchaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL CHIEUCH A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110E, 0x1161, 0x0029 }, unicodeslot=0x3217, }, [0x3218]={ adobename="khieukhaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL KHIEUKH A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110F, 0x1161, 0x0029 }, unicodeslot=0x3218, }, [0x3219]={ adobename="thieuthaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL THIEUTH A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1110, 0x1161, 0x0029 }, unicodeslot=0x3219, }, [0x321A]={ adobename="phieuphaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL PHIEUPH A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1111, 0x1161, 0x0029 }, unicodeslot=0x321A, }, [0x321B]={ adobename="hieuhaparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL HIEUH A", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x1112, 0x1161, 0x0029 }, unicodeslot=0x321B, }, [0x321C]={ adobename="cieucuparenkorean", category="so", cjkwd="w", description="PARENTHESIZED HANGUL CIEUC U", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x110C, 0x116E, 0x0029 }, unicodeslot=0x321C, }, [0x321D]={ category="so", cjkwd="w", description="PARENTHESIZED KOREAN CHARACTER OJEON", direction="on", linebreak="id", specials={ "compat", 0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB, 0x0029 }, unicodeslot=0x321D, }, [0x321E]={ category="so", cjkwd="w", description="PARENTHESIZED KOREAN CHARACTER O HU", direction="on", linebreak="id", specials={ "compat", 0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029 }, unicodeslot=0x321E, }, [0x3220]={ adobename="oneideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH ONE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4E00, 0x0029 }, unicodeslot=0x3220, }, [0x3221]={ adobename="twoideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH TWO", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4E8C, 0x0029 }, unicodeslot=0x3221, }, [0x3222]={ adobename="threeideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH THREE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4E09, 0x0029 }, unicodeslot=0x3222, }, [0x3223]={ adobename="fourideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH FOUR", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x56DB, 0x0029 }, unicodeslot=0x3223, }, [0x3224]={ adobename="fiveideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH FIVE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4E94, 0x0029 }, unicodeslot=0x3224, }, [0x3225]={ adobename="sixideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SIX", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x516D, 0x0029 }, unicodeslot=0x3225, }, [0x3226]={ adobename="sevenideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SEVEN", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4E03, 0x0029 }, unicodeslot=0x3226, }, [0x3227]={ adobename="eightideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH EIGHT", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x516B, 0x0029 }, unicodeslot=0x3227, }, [0x3228]={ adobename="nineideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH NINE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4E5D, 0x0029 }, unicodeslot=0x3228, }, [0x3229]={ adobename="tenideographicparen", category="no", cjkwd="w", description="PARENTHESIZED IDEOGRAPH TEN", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x5341, 0x0029 }, unicodeslot=0x3229, }, [0x322A]={ adobename="ideographicmoonparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH MOON", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x6708, 0x0029 }, unicodeslot=0x322A, }, [0x322B]={ adobename="ideographicfireparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH FIRE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x706B, 0x0029 }, unicodeslot=0x322B, }, [0x322C]={ adobename="ideographicwaterparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH WATER", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x6C34, 0x0029 }, unicodeslot=0x322C, }, [0x322D]={ adobename="ideographicwoodparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH WOOD", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x6728, 0x0029 }, unicodeslot=0x322D, }, [0x322E]={ adobename="ideographicmetalparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH METAL", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x91D1, 0x0029 }, unicodeslot=0x322E, }, [0x322F]={ adobename="ideographicearthparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH EARTH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x571F, 0x0029 }, unicodeslot=0x322F, }, [0x3230]={ adobename="ideographicsunparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SUN", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x65E5, 0x0029 }, unicodeslot=0x3230, }, [0x3231]={ adobename="ideographicstockparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH STOCK", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x682A, 0x0029 }, unicodeslot=0x3231, }, [0x3232]={ adobename="ideographichaveparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH HAVE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x6709, 0x0029 }, unicodeslot=0x3232, }, [0x3233]={ adobename="ideographicsocietyparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SOCIETY", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x793E, 0x0029 }, unicodeslot=0x3233, }, [0x3234]={ adobename="ideographicnameparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH NAME", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x540D, 0x0029 }, unicodeslot=0x3234, }, [0x3235]={ adobename="ideographicspecialparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SPECIAL", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x7279, 0x0029 }, unicodeslot=0x3235, }, [0x3236]={ adobename="ideographicfinancialparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH FINANCIAL", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x8CA1, 0x0029 }, unicodeslot=0x3236, }, [0x3237]={ adobename="ideographiccongratulationparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH CONGRATULATION", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x795D, 0x0029 }, unicodeslot=0x3237, }, [0x3238]={ adobename="ideographiclaborparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH LABOR", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x52B4, 0x0029 }, unicodeslot=0x3238, }, [0x3239]={ adobename="ideographicrepresentparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH REPRESENT", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4EE3, 0x0029 }, unicodeslot=0x3239, }, [0x323A]={ adobename="ideographiccallparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH CALL", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x547C, 0x0029 }, unicodeslot=0x323A, }, [0x323B]={ adobename="ideographicstudyparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH STUDY", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x5B66, 0x0029 }, unicodeslot=0x323B, }, [0x323C]={ adobename="ideographicsuperviseparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SUPERVISE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x76E3, 0x0029 }, unicodeslot=0x323C, }, [0x323D]={ adobename="ideographicenterpriseparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH ENTERPRISE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4F01, 0x0029 }, unicodeslot=0x323D, }, [0x323E]={ adobename="ideographicresourceparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH RESOURCE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x8CC7, 0x0029 }, unicodeslot=0x323E, }, [0x323F]={ adobename="ideographicallianceparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH ALLIANCE", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x5354, 0x0029 }, unicodeslot=0x323F, }, [0x3240]={ adobename="ideographicfestivalparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH FESTIVAL", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x796D, 0x0029 }, unicodeslot=0x3240, }, [0x3241]={ category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH REST", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x4F11, 0x0029 }, unicodeslot=0x3241, }, [0x3242]={ adobename="ideographicselfparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH SELF", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x81EA, 0x0029 }, unicodeslot=0x3242, }, [0x3243]={ adobename="ideographicreachparen", category="so", cjkwd="w", description="PARENTHESIZED IDEOGRAPH REACH", direction="l", linebreak="id", specials={ "compat", 0x0028, 0x81F3, 0x0029 }, unicodeslot=0x3243, }, [0x3244]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH QUESTION", direction="l", linebreak="id", specials={ "circle", 0x554F }, unicodeslot=0x3244, }, [0x3245]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH KINDERGARTEN", direction="l", linebreak="id", specials={ "circle", 0x5E7C }, unicodeslot=0x3245, }, [0x3246]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SCHOOL", direction="l", linebreak="id", specials={ "circle", 0x6587 }, unicodeslot=0x3246, }, [0x3247]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH KOTO", direction="l", linebreak="id", specials={ "circle", 0x7B8F }, unicodeslot=0x3247, }, [0x3248]={ category="so", cjkwd="a", description="CIRCLED NUMBER TEN ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x3248, }, [0x3249]={ category="so", cjkwd="a", description="CIRCLED NUMBER TWENTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x3249, }, [0x324A]={ category="so", cjkwd="a", description="CIRCLED NUMBER THIRTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x324A, }, [0x324B]={ category="so", cjkwd="a", description="CIRCLED NUMBER FORTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x324B, }, [0x324C]={ category="so", cjkwd="a", description="CIRCLED NUMBER FIFTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x324C, }, [0x324D]={ category="so", cjkwd="a", description="CIRCLED NUMBER SIXTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x324D, }, [0x324E]={ category="so", cjkwd="a", description="CIRCLED NUMBER SEVENTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x324E, }, [0x324F]={ category="so", cjkwd="a", description="CIRCLED NUMBER EIGHTY ON BLACK SQUARE", direction="l", linebreak="ai", unicodeslot=0x324F, }, [0x3250]={ category="so", cjkwd="w", description="PARTNERSHIP SIGN", direction="on", linebreak="id", specials={ "square", 0x0050, 0x0054, 0x0045 }, unicodeslot=0x3250, }, [0x3251]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY ONE", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0031 }, unicodeslot=0x3251, }, [0x3252]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY TWO", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0032 }, unicodeslot=0x3252, }, [0x3253]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY THREE", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0033 }, unicodeslot=0x3253, }, [0x3254]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY FOUR", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0034 }, unicodeslot=0x3254, }, [0x3255]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY FIVE", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0035 }, unicodeslot=0x3255, }, [0x3256]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY SIX", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0036 }, unicodeslot=0x3256, }, [0x3257]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY SEVEN", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0037 }, unicodeslot=0x3257, }, [0x3258]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY EIGHT", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0038 }, unicodeslot=0x3258, }, [0x3259]={ category="no", cjkwd="w", description="CIRCLED NUMBER TWENTY NINE", direction="on", linebreak="id", specials={ "circle", 0x0032, 0x0039 }, unicodeslot=0x3259, }, [0x325A]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0030 }, unicodeslot=0x325A, }, [0x325B]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY ONE", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0031 }, unicodeslot=0x325B, }, [0x325C]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY TWO", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0032 }, unicodeslot=0x325C, }, [0x325D]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY THREE", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0033 }, unicodeslot=0x325D, }, [0x325E]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY FOUR", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0034 }, unicodeslot=0x325E, }, [0x325F]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY FIVE", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0035 }, unicodeslot=0x325F, }, [0x3260]={ adobename="kiyeokcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL KIYEOK", direction="l", linebreak="id", specials={ "circle", 0x1100 }, unicodeslot=0x3260, }, [0x3261]={ adobename="nieuncirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL NIEUN", direction="l", linebreak="id", specials={ "circle", 0x1102 }, unicodeslot=0x3261, }, [0x3262]={ adobename="tikeutcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL TIKEUT", direction="l", linebreak="id", specials={ "circle", 0x1103 }, unicodeslot=0x3262, }, [0x3263]={ adobename="rieulcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL RIEUL", direction="l", linebreak="id", specials={ "circle", 0x1105 }, unicodeslot=0x3263, }, [0x3264]={ adobename="mieumcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL MIEUM", direction="l", linebreak="id", specials={ "circle", 0x1106 }, unicodeslot=0x3264, }, [0x3265]={ adobename="pieupcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL PIEUP", direction="l", linebreak="id", specials={ "circle", 0x1107 }, unicodeslot=0x3265, }, [0x3266]={ adobename="sioscirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL SIOS", direction="l", linebreak="id", specials={ "circle", 0x1109 }, unicodeslot=0x3266, }, [0x3267]={ adobename="ieungcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL IEUNG", direction="l", linebreak="id", specials={ "circle", 0x110B }, unicodeslot=0x3267, }, [0x3268]={ adobename="cieuccirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL CIEUC", direction="l", linebreak="id", specials={ "circle", 0x110C }, unicodeslot=0x3268, }, [0x3269]={ adobename="chieuchcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL CHIEUCH", direction="l", linebreak="id", specials={ "circle", 0x110E }, unicodeslot=0x3269, }, [0x326A]={ adobename="khieukhcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL KHIEUKH", direction="l", linebreak="id", specials={ "circle", 0x110F }, unicodeslot=0x326A, }, [0x326B]={ adobename="thieuthcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL THIEUTH", direction="l", linebreak="id", specials={ "circle", 0x1110 }, unicodeslot=0x326B, }, [0x326C]={ adobename="phieuphcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL PHIEUPH", direction="l", linebreak="id", specials={ "circle", 0x1111 }, unicodeslot=0x326C, }, [0x326D]={ adobename="hieuhcirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL HIEUH", direction="l", linebreak="id", specials={ "circle", 0x1112 }, unicodeslot=0x326D, }, [0x326E]={ adobename="kiyeokacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL KIYEOK A", direction="l", linebreak="id", specials={ "circle", 0x1100, 0x1161 }, unicodeslot=0x326E, }, [0x326F]={ adobename="nieunacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL NIEUN A", direction="l", linebreak="id", specials={ "circle", 0x1102, 0x1161 }, unicodeslot=0x326F, }, [0x3270]={ adobename="tikeutacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL TIKEUT A", direction="l", linebreak="id", specials={ "circle", 0x1103, 0x1161 }, unicodeslot=0x3270, }, [0x3271]={ adobename="rieulacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL RIEUL A", direction="l", linebreak="id", specials={ "circle", 0x1105, 0x1161 }, unicodeslot=0x3271, }, [0x3272]={ adobename="mieumacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL MIEUM A", direction="l", linebreak="id", specials={ "circle", 0x1106, 0x1161 }, unicodeslot=0x3272, }, [0x3273]={ adobename="pieupacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL PIEUP A", direction="l", linebreak="id", specials={ "circle", 0x1107, 0x1161 }, unicodeslot=0x3273, }, [0x3274]={ adobename="siosacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL SIOS A", direction="l", linebreak="id", specials={ "circle", 0x1109, 0x1161 }, unicodeslot=0x3274, }, [0x3275]={ adobename="ieungacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL IEUNG A", direction="l", linebreak="id", specials={ "circle", 0x110B, 0x1161 }, unicodeslot=0x3275, }, [0x3276]={ adobename="cieucacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL CIEUC A", direction="l", linebreak="id", specials={ "circle", 0x110C, 0x1161 }, unicodeslot=0x3276, }, [0x3277]={ adobename="chieuchacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL CHIEUCH A", direction="l", linebreak="id", specials={ "circle", 0x110E, 0x1161 }, unicodeslot=0x3277, }, [0x3278]={ adobename="khieukhacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL KHIEUKH A", direction="l", linebreak="id", specials={ "circle", 0x110F, 0x1161 }, unicodeslot=0x3278, }, [0x3279]={ adobename="thieuthacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL THIEUTH A", direction="l", linebreak="id", specials={ "circle", 0x1110, 0x1161 }, unicodeslot=0x3279, }, [0x327A]={ adobename="phieuphacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL PHIEUPH A", direction="l", linebreak="id", specials={ "circle", 0x1111, 0x1161 }, unicodeslot=0x327A, }, [0x327B]={ adobename="hieuhacirclekorean", category="so", cjkwd="w", description="CIRCLED HANGUL HIEUH A", direction="l", linebreak="id", specials={ "circle", 0x1112, 0x1161 }, unicodeslot=0x327B, }, [0x327C]={ category="so", cjkwd="w", description="CIRCLED KOREAN CHARACTER CHAMKO", direction="on", linebreak="id", specials={ "circle", 0x110E, 0x1161, 0x11B7, 0x1100, 0x1169 }, unicodeslot=0x327C, }, [0x327D]={ category="so", cjkwd="w", description="CIRCLED KOREAN CHARACTER JUEUI", direction="on", linebreak="id", specials={ "circle", 0x110C, 0x116E, 0x110B, 0x1174 }, unicodeslot=0x327D, }, [0x327E]={ category="so", cjkwd="w", description="CIRCLED HANGUL IEUNG U", direction="on", linebreak="id", specials={ "circle", 0x110B, 0x116E }, unicodeslot=0x327E, }, [0x327F]={ adobename="koreanstandardsymbol", category="so", cjkwd="w", description="KOREAN STANDARD SYMBOL", direction="l", linebreak="id", unicodeslot=0x327F, }, [0x3280]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH ONE", direction="l", linebreak="id", specials={ "circle", 0x4E00 }, unicodeslot=0x3280, }, [0x3281]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH TWO", direction="l", linebreak="id", specials={ "circle", 0x4E8C }, unicodeslot=0x3281, }, [0x3282]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH THREE", direction="l", linebreak="id", specials={ "circle", 0x4E09 }, unicodeslot=0x3282, }, [0x3283]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH FOUR", direction="l", linebreak="id", specials={ "circle", 0x56DB }, unicodeslot=0x3283, }, [0x3284]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH FIVE", direction="l", linebreak="id", specials={ "circle", 0x4E94 }, unicodeslot=0x3284, }, [0x3285]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH SIX", direction="l", linebreak="id", specials={ "circle", 0x516D }, unicodeslot=0x3285, }, [0x3286]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH SEVEN", direction="l", linebreak="id", specials={ "circle", 0x4E03 }, unicodeslot=0x3286, }, [0x3287]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH EIGHT", direction="l", linebreak="id", specials={ "circle", 0x516B }, unicodeslot=0x3287, }, [0x3288]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH NINE", direction="l", linebreak="id", specials={ "circle", 0x4E5D }, unicodeslot=0x3288, }, [0x3289]={ category="no", cjkwd="w", description="CIRCLED IDEOGRAPH TEN", direction="l", linebreak="id", specials={ "circle", 0x5341 }, unicodeslot=0x3289, }, [0x328A]={ adobename="ideographmooncircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH MOON", direction="l", linebreak="id", specials={ "circle", 0x6708 }, unicodeslot=0x328A, }, [0x328B]={ adobename="ideographfirecircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH FIRE", direction="l", linebreak="id", specials={ "circle", 0x706B }, unicodeslot=0x328B, }, [0x328C]={ adobename="ideographwatercircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH WATER", direction="l", linebreak="id", specials={ "circle", 0x6C34 }, unicodeslot=0x328C, }, [0x328D]={ adobename="ideographwoodcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH WOOD", direction="l", linebreak="id", specials={ "circle", 0x6728 }, unicodeslot=0x328D, }, [0x328E]={ adobename="ideographmetalcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH METAL", direction="l", linebreak="id", specials={ "circle", 0x91D1 }, unicodeslot=0x328E, }, [0x328F]={ adobename="ideographearthcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH EARTH", direction="l", linebreak="id", specials={ "circle", 0x571F }, unicodeslot=0x328F, }, [0x3290]={ adobename="ideographsuncircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SUN", direction="l", linebreak="id", specials={ "circle", 0x65E5 }, unicodeslot=0x3290, }, [0x3291]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH STOCK", direction="l", linebreak="id", specials={ "circle", 0x682A }, unicodeslot=0x3291, }, [0x3292]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH HAVE", direction="l", linebreak="id", specials={ "circle", 0x6709 }, unicodeslot=0x3292, }, [0x3293]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SOCIETY", direction="l", linebreak="id", specials={ "circle", 0x793E }, unicodeslot=0x3293, }, [0x3294]={ adobename="ideographnamecircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH NAME", direction="l", linebreak="id", specials={ "circle", 0x540D }, unicodeslot=0x3294, }, [0x3295]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SPECIAL", direction="l", linebreak="id", specials={ "circle", 0x7279 }, unicodeslot=0x3295, }, [0x3296]={ adobename="ideographicfinancialcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH FINANCIAL", direction="l", linebreak="id", specials={ "circle", 0x8CA1 }, unicodeslot=0x3296, }, [0x3297]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH CONGRATULATION", direction="l", linebreak="id", specials={ "circle", 0x795D }, unicodeslot=0x3297, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x3298]={ adobename="ideographiclaborcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH LABOR", direction="l", linebreak="id", specials={ "circle", 0x52B4 }, unicodeslot=0x3298, }, [0x3299]={ adobename="ideographicsecretcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SECRET", direction="l", linebreak="id", specials={ "circle", 0x79D8 }, unicodeslot=0x3299, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x329A]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH MALE", direction="l", linebreak="id", specials={ "circle", 0x7537 }, unicodeslot=0x329A, }, [0x329B]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH FEMALE", direction="l", linebreak="id", specials={ "circle", 0x5973 }, unicodeslot=0x329B, }, [0x329C]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SUITABLE", direction="l", linebreak="id", specials={ "circle", 0x9069 }, unicodeslot=0x329C, }, [0x329D]={ adobename="ideographicexcellentcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH EXCELLENT", direction="l", linebreak="id", specials={ "circle", 0x512A }, unicodeslot=0x329D, }, [0x329E]={ adobename="ideographicprintcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH PRINT", direction="l", linebreak="id", specials={ "circle", 0x5370 }, unicodeslot=0x329E, }, [0x329F]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH ATTENTION", direction="l", linebreak="id", specials={ "circle", 0x6CE8 }, unicodeslot=0x329F, }, [0x32A0]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH ITEM", direction="l", linebreak="id", specials={ "circle", 0x9805 }, unicodeslot=0x32A0, }, [0x32A1]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH REST", direction="l", linebreak="id", specials={ "circle", 0x4F11 }, unicodeslot=0x32A1, }, [0x32A2]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH COPY", direction="l", linebreak="id", specials={ "circle", 0x5199 }, unicodeslot=0x32A2, }, [0x32A3]={ adobename="ideographiccorrectcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH CORRECT", direction="l", linebreak="id", specials={ "circle", 0x6B63 }, unicodeslot=0x32A3, }, [0x32A4]={ adobename="ideographichighcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH HIGH", direction="l", linebreak="id", specials={ "circle", 0x4E0A }, unicodeslot=0x32A4, }, [0x32A5]={ adobename="ideographiccentrecircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH CENTRE", direction="l", linebreak="id", specials={ "circle", 0x4E2D }, unicodeslot=0x32A5, }, [0x32A6]={ adobename="ideographiclowcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH LOW", direction="l", linebreak="id", specials={ "circle", 0x4E0B }, unicodeslot=0x32A6, }, [0x32A7]={ adobename="ideographicleftcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH LEFT", direction="l", linebreak="id", specials={ "circle", 0x5DE6 }, unicodeslot=0x32A7, }, [0x32A8]={ adobename="ideographicrightcircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH RIGHT", direction="l", linebreak="id", specials={ "circle", 0x53F3 }, unicodeslot=0x32A8, }, [0x32A9]={ adobename="ideographicmedicinecircle", category="so", cjkwd="w", description="CIRCLED IDEOGRAPH MEDICINE", direction="l", linebreak="id", specials={ "circle", 0x533B }, unicodeslot=0x32A9, }, [0x32AA]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH RELIGION", direction="l", linebreak="id", specials={ "circle", 0x5B97 }, unicodeslot=0x32AA, }, [0x32AB]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH STUDY", direction="l", linebreak="id", specials={ "circle", 0x5B66 }, unicodeslot=0x32AB, }, [0x32AC]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH SUPERVISE", direction="l", linebreak="id", specials={ "circle", 0x76E3 }, unicodeslot=0x32AC, }, [0x32AD]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH ENTERPRISE", direction="l", linebreak="id", specials={ "circle", 0x4F01 }, unicodeslot=0x32AD, }, [0x32AE]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH RESOURCE", direction="l", linebreak="id", specials={ "circle", 0x8CC7 }, unicodeslot=0x32AE, }, [0x32AF]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH ALLIANCE", direction="l", linebreak="id", specials={ "circle", 0x5354 }, unicodeslot=0x32AF, }, [0x32B0]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH NIGHT", direction="l", linebreak="id", specials={ "circle", 0x591C }, unicodeslot=0x32B0, }, [0x32B1]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY SIX", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0036 }, unicodeslot=0x32B1, }, [0x32B2]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY SEVEN", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0037 }, unicodeslot=0x32B2, }, [0x32B3]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY EIGHT", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0038 }, unicodeslot=0x32B3, }, [0x32B4]={ category="no", cjkwd="w", description="CIRCLED NUMBER THIRTY NINE", direction="on", linebreak="id", specials={ "circle", 0x0033, 0x0039 }, unicodeslot=0x32B4, }, [0x32B5]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0030 }, unicodeslot=0x32B5, }, [0x32B6]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY ONE", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0031 }, unicodeslot=0x32B6, }, [0x32B7]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY TWO", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0032 }, unicodeslot=0x32B7, }, [0x32B8]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY THREE", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0033 }, unicodeslot=0x32B8, }, [0x32B9]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY FOUR", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0034 }, unicodeslot=0x32B9, }, [0x32BA]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY FIVE", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0035 }, unicodeslot=0x32BA, }, [0x32BB]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY SIX", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0036 }, unicodeslot=0x32BB, }, [0x32BC]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY SEVEN", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0037 }, unicodeslot=0x32BC, }, [0x32BD]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY EIGHT", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0038 }, unicodeslot=0x32BD, }, [0x32BE]={ category="no", cjkwd="w", description="CIRCLED NUMBER FORTY NINE", direction="on", linebreak="id", specials={ "circle", 0x0034, 0x0039 }, unicodeslot=0x32BE, }, [0x32BF]={ category="no", cjkwd="w", description="CIRCLED NUMBER FIFTY", direction="on", linebreak="id", specials={ "circle", 0x0035, 0x0030 }, unicodeslot=0x32BF, }, [0x32C0]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x6708 }, unicodeslot=0x32C0, }, [0x32C1]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x6708 }, unicodeslot=0x32C1, }, [0x32C2]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH", direction="l", linebreak="id", specials={ "compat", 0x0033, 0x6708 }, unicodeslot=0x32C2, }, [0x32C3]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL", direction="l", linebreak="id", specials={ "compat", 0x0034, 0x6708 }, unicodeslot=0x32C3, }, [0x32C4]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY", direction="l", linebreak="id", specials={ "compat", 0x0035, 0x6708 }, unicodeslot=0x32C4, }, [0x32C5]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE", direction="l", linebreak="id", specials={ "compat", 0x0036, 0x6708 }, unicodeslot=0x32C5, }, [0x32C6]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY", direction="l", linebreak="id", specials={ "compat", 0x0037, 0x6708 }, unicodeslot=0x32C6, }, [0x32C7]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST", direction="l", linebreak="id", specials={ "compat", 0x0038, 0x6708 }, unicodeslot=0x32C7, }, [0x32C8]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER", direction="l", linebreak="id", specials={ "compat", 0x0039, 0x6708 }, unicodeslot=0x32C8, }, [0x32C9]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0030, 0x6708 }, unicodeslot=0x32C9, }, [0x32CA]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0031, 0x6708 }, unicodeslot=0x32CA, }, [0x32CB]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0032, 0x6708 }, unicodeslot=0x32CB, }, [0x32CC]={ category="so", cjkwd="w", description="SQUARE HG", direction="on", linebreak="id", specials={ "square", 0x0048, 0x0067 }, unicodeslot=0x32CC, }, [0x32CD]={ category="so", cjkwd="w", description="SQUARE ERG", direction="on", linebreak="id", specials={ "square", 0x0065, 0x0072, 0x0067 }, unicodeslot=0x32CD, }, [0x32CE]={ category="so", cjkwd="w", description="SQUARE EV", direction="on", linebreak="id", specials={ "square", 0x0065, 0x0056 }, unicodeslot=0x32CE, }, [0x32CF]={ category="so", cjkwd="w", description="LIMITED LIABILITY SIGN", direction="on", linebreak="id", specials={ "square", 0x004C, 0x0054, 0x0044 }, unicodeslot=0x32CF, }, [0x32D0]={ category="so", cjkwd="w", description="CIRCLED KATAKANA A", direction="l", linebreak="id", specials={ "circle", 0x30A2 }, unicodeslot=0x32D0, }, [0x32D1]={ category="so", cjkwd="w", description="CIRCLED KATAKANA I", direction="l", linebreak="id", specials={ "circle", 0x30A4 }, unicodeslot=0x32D1, }, [0x32D2]={ category="so", cjkwd="w", description="CIRCLED KATAKANA U", direction="l", linebreak="id", specials={ "circle", 0x30A6 }, unicodeslot=0x32D2, }, [0x32D3]={ category="so", cjkwd="w", description="CIRCLED KATAKANA E", direction="l", linebreak="id", specials={ "circle", 0x30A8 }, unicodeslot=0x32D3, }, [0x32D4]={ category="so", cjkwd="w", description="CIRCLED KATAKANA O", direction="l", linebreak="id", specials={ "circle", 0x30AA }, unicodeslot=0x32D4, }, [0x32D5]={ category="so", cjkwd="w", description="CIRCLED KATAKANA KA", direction="l", linebreak="id", specials={ "circle", 0x30AB }, unicodeslot=0x32D5, }, [0x32D6]={ category="so", cjkwd="w", description="CIRCLED KATAKANA KI", direction="l", linebreak="id", specials={ "circle", 0x30AD }, unicodeslot=0x32D6, }, [0x32D7]={ category="so", cjkwd="w", description="CIRCLED KATAKANA KU", direction="l", linebreak="id", specials={ "circle", 0x30AF }, unicodeslot=0x32D7, }, [0x32D8]={ category="so", cjkwd="w", description="CIRCLED KATAKANA KE", direction="l", linebreak="id", specials={ "circle", 0x30B1 }, unicodeslot=0x32D8, }, [0x32D9]={ category="so", cjkwd="w", description="CIRCLED KATAKANA KO", direction="l", linebreak="id", specials={ "circle", 0x30B3 }, unicodeslot=0x32D9, }, [0x32DA]={ category="so", cjkwd="w", description="CIRCLED KATAKANA SA", direction="l", linebreak="id", specials={ "circle", 0x30B5 }, unicodeslot=0x32DA, }, [0x32DB]={ category="so", cjkwd="w", description="CIRCLED KATAKANA SI", direction="l", linebreak="id", specials={ "circle", 0x30B7 }, unicodeslot=0x32DB, }, [0x32DC]={ category="so", cjkwd="w", description="CIRCLED KATAKANA SU", direction="l", linebreak="id", specials={ "circle", 0x30B9 }, unicodeslot=0x32DC, }, [0x32DD]={ category="so", cjkwd="w", description="CIRCLED KATAKANA SE", direction="l", linebreak="id", specials={ "circle", 0x30BB }, unicodeslot=0x32DD, }, [0x32DE]={ category="so", cjkwd="w", description="CIRCLED KATAKANA SO", direction="l", linebreak="id", specials={ "circle", 0x30BD }, unicodeslot=0x32DE, }, [0x32DF]={ category="so", cjkwd="w", description="CIRCLED KATAKANA TA", direction="l", linebreak="id", specials={ "circle", 0x30BF }, unicodeslot=0x32DF, }, [0x32E0]={ category="so", cjkwd="w", description="CIRCLED KATAKANA TI", direction="l", linebreak="id", specials={ "circle", 0x30C1 }, unicodeslot=0x32E0, }, [0x32E1]={ category="so", cjkwd="w", description="CIRCLED KATAKANA TU", direction="l", linebreak="id", specials={ "circle", 0x30C4 }, unicodeslot=0x32E1, }, [0x32E2]={ category="so", cjkwd="w", description="CIRCLED KATAKANA TE", direction="l", linebreak="id", specials={ "circle", 0x30C6 }, unicodeslot=0x32E2, }, [0x32E3]={ category="so", cjkwd="w", description="CIRCLED KATAKANA TO", direction="l", linebreak="id", specials={ "circle", 0x30C8 }, unicodeslot=0x32E3, }, [0x32E4]={ category="so", cjkwd="w", description="CIRCLED KATAKANA NA", direction="l", linebreak="id", specials={ "circle", 0x30CA }, unicodeslot=0x32E4, }, [0x32E5]={ category="so", cjkwd="w", description="CIRCLED KATAKANA NI", direction="l", linebreak="id", specials={ "circle", 0x30CB }, unicodeslot=0x32E5, }, [0x32E6]={ category="so", cjkwd="w", description="CIRCLED KATAKANA NU", direction="l", linebreak="id", specials={ "circle", 0x30CC }, unicodeslot=0x32E6, }, [0x32E7]={ category="so", cjkwd="w", description="CIRCLED KATAKANA NE", direction="l", linebreak="id", specials={ "circle", 0x30CD }, unicodeslot=0x32E7, }, [0x32E8]={ category="so", cjkwd="w", description="CIRCLED KATAKANA NO", direction="l", linebreak="id", specials={ "circle", 0x30CE }, unicodeslot=0x32E8, }, [0x32E9]={ category="so", cjkwd="w", description="CIRCLED KATAKANA HA", direction="l", linebreak="id", specials={ "circle", 0x30CF }, unicodeslot=0x32E9, }, [0x32EA]={ category="so", cjkwd="w", description="CIRCLED KATAKANA HI", direction="l", linebreak="id", specials={ "circle", 0x30D2 }, unicodeslot=0x32EA, }, [0x32EB]={ category="so", cjkwd="w", description="CIRCLED KATAKANA HU", direction="l", linebreak="id", specials={ "circle", 0x30D5 }, unicodeslot=0x32EB, }, [0x32EC]={ category="so", cjkwd="w", description="CIRCLED KATAKANA HE", direction="l", linebreak="id", specials={ "circle", 0x30D8 }, unicodeslot=0x32EC, }, [0x32ED]={ category="so", cjkwd="w", description="CIRCLED KATAKANA HO", direction="l", linebreak="id", specials={ "circle", 0x30DB }, unicodeslot=0x32ED, }, [0x32EE]={ category="so", cjkwd="w", description="CIRCLED KATAKANA MA", direction="l", linebreak="id", specials={ "circle", 0x30DE }, unicodeslot=0x32EE, }, [0x32EF]={ category="so", cjkwd="w", description="CIRCLED KATAKANA MI", direction="l", linebreak="id", specials={ "circle", 0x30DF }, unicodeslot=0x32EF, }, [0x32F0]={ category="so", cjkwd="w", description="CIRCLED KATAKANA MU", direction="l", linebreak="id", specials={ "circle", 0x30E0 }, unicodeslot=0x32F0, }, [0x32F1]={ category="so", cjkwd="w", description="CIRCLED KATAKANA ME", direction="l", linebreak="id", specials={ "circle", 0x30E1 }, unicodeslot=0x32F1, }, [0x32F2]={ category="so", cjkwd="w", description="CIRCLED KATAKANA MO", direction="l", linebreak="id", specials={ "circle", 0x30E2 }, unicodeslot=0x32F2, }, [0x32F3]={ category="so", cjkwd="w", description="CIRCLED KATAKANA YA", direction="l", linebreak="id", specials={ "circle", 0x30E4 }, unicodeslot=0x32F3, }, [0x32F4]={ category="so", cjkwd="w", description="CIRCLED KATAKANA YU", direction="l", linebreak="id", specials={ "circle", 0x30E6 }, unicodeslot=0x32F4, }, [0x32F5]={ category="so", cjkwd="w", description="CIRCLED KATAKANA YO", direction="l", linebreak="id", specials={ "circle", 0x30E8 }, unicodeslot=0x32F5, }, [0x32F6]={ category="so", cjkwd="w", description="CIRCLED KATAKANA RA", direction="l", linebreak="id", specials={ "circle", 0x30E9 }, unicodeslot=0x32F6, }, [0x32F7]={ category="so", cjkwd="w", description="CIRCLED KATAKANA RI", direction="l", linebreak="id", specials={ "circle", 0x30EA }, unicodeslot=0x32F7, }, [0x32F8]={ category="so", cjkwd="w", description="CIRCLED KATAKANA RU", direction="l", linebreak="id", specials={ "circle", 0x30EB }, unicodeslot=0x32F8, }, [0x32F9]={ category="so", cjkwd="w", description="CIRCLED KATAKANA RE", direction="l", linebreak="id", specials={ "circle", 0x30EC }, unicodeslot=0x32F9, }, [0x32FA]={ category="so", cjkwd="w", description="CIRCLED KATAKANA RO", direction="l", linebreak="id", specials={ "circle", 0x30ED }, unicodeslot=0x32FA, }, [0x32FB]={ category="so", cjkwd="w", description="CIRCLED KATAKANA WA", direction="l", linebreak="id", specials={ "circle", 0x30EF }, unicodeslot=0x32FB, }, [0x32FC]={ category="so", cjkwd="w", description="CIRCLED KATAKANA WI", direction="l", linebreak="id", specials={ "circle", 0x30F0 }, unicodeslot=0x32FC, }, [0x32FD]={ category="so", cjkwd="w", description="CIRCLED KATAKANA WE", direction="l", linebreak="id", specials={ "circle", 0x30F1 }, unicodeslot=0x32FD, }, [0x32FE]={ category="so", cjkwd="w", description="CIRCLED KATAKANA WO", direction="l", linebreak="id", specials={ "circle", 0x30F2 }, unicodeslot=0x32FE, }, [0x3300]={ adobename="apaatosquare", category="so", cjkwd="w", description="SQUARE APAATO", direction="l", linebreak="id", specials={ "square", 0x30A2, 0x30D1, 0x30FC, 0x30C8 }, unicodeslot=0x3300, }, [0x3301]={ category="so", cjkwd="w", description="SQUARE ARUHUA", direction="l", linebreak="id", specials={ "square", 0x30A2, 0x30EB, 0x30D5, 0x30A1 }, unicodeslot=0x3301, }, [0x3302]={ category="so", cjkwd="w", description="SQUARE ANPEA", direction="l", linebreak="id", specials={ "square", 0x30A2, 0x30F3, 0x30DA, 0x30A2 }, unicodeslot=0x3302, }, [0x3303]={ adobename="aarusquare", category="so", cjkwd="w", description="SQUARE AARU", direction="l", linebreak="id", specials={ "square", 0x30A2, 0x30FC, 0x30EB }, unicodeslot=0x3303, }, [0x3304]={ category="so", cjkwd="w", description="SQUARE ININGU", direction="l", linebreak="id", specials={ "square", 0x30A4, 0x30CB, 0x30F3, 0x30B0 }, unicodeslot=0x3304, }, [0x3305]={ adobename="intisquare", category="so", cjkwd="w", description="SQUARE INTI", direction="l", linebreak="id", specials={ "square", 0x30A4, 0x30F3, 0x30C1 }, unicodeslot=0x3305, }, [0x3306]={ category="so", cjkwd="w", description="SQUARE UON", direction="l", linebreak="id", specials={ "square", 0x30A6, 0x30A9, 0x30F3 }, unicodeslot=0x3306, }, [0x3307]={ category="so", cjkwd="w", description="SQUARE ESUKUUDO", direction="l", linebreak="id", specials={ "square", 0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9 }, unicodeslot=0x3307, }, [0x3308]={ category="so", cjkwd="w", description="SQUARE EEKAA", direction="l", linebreak="id", specials={ "square", 0x30A8, 0x30FC, 0x30AB, 0x30FC }, unicodeslot=0x3308, }, [0x3309]={ category="so", cjkwd="w", description="SQUARE ONSU", direction="l", linebreak="id", specials={ "square", 0x30AA, 0x30F3, 0x30B9 }, unicodeslot=0x3309, }, [0x330A]={ category="so", cjkwd="w", description="SQUARE OOMU", direction="l", linebreak="id", specials={ "square", 0x30AA, 0x30FC, 0x30E0 }, unicodeslot=0x330A, }, [0x330B]={ category="so", cjkwd="w", description="SQUARE KAIRI", direction="l", linebreak="id", specials={ "square", 0x30AB, 0x30A4, 0x30EA }, unicodeslot=0x330B, }, [0x330C]={ category="so", cjkwd="w", description="SQUARE KARATTO", direction="l", linebreak="id", specials={ "square", 0x30AB, 0x30E9, 0x30C3, 0x30C8 }, unicodeslot=0x330C, }, [0x330D]={ adobename="karoriisquare", category="so", cjkwd="w", description="SQUARE KARORII", direction="l", linebreak="id", specials={ "square", 0x30AB, 0x30ED, 0x30EA, 0x30FC }, unicodeslot=0x330D, }, [0x330E]={ category="so", cjkwd="w", description="SQUARE GARON", direction="l", linebreak="id", specials={ "square", 0x30AC, 0x30ED, 0x30F3 }, unicodeslot=0x330E, }, [0x330F]={ category="so", cjkwd="w", description="SQUARE GANMA", direction="l", linebreak="id", specials={ "square", 0x30AC, 0x30F3, 0x30DE }, unicodeslot=0x330F, }, [0x3310]={ category="so", cjkwd="w", description="SQUARE GIGA", direction="l", linebreak="id", specials={ "square", 0x30AE, 0x30AC }, unicodeslot=0x3310, }, [0x3311]={ category="so", cjkwd="w", description="SQUARE GINII", direction="l", linebreak="id", specials={ "square", 0x30AE, 0x30CB, 0x30FC }, unicodeslot=0x3311, }, [0x3312]={ category="so", cjkwd="w", description="SQUARE KYURII", direction="l", linebreak="id", specials={ "square", 0x30AD, 0x30E5, 0x30EA, 0x30FC }, unicodeslot=0x3312, }, [0x3313]={ category="so", cjkwd="w", description="SQUARE GIRUDAA", direction="l", linebreak="id", specials={ "square", 0x30AE, 0x30EB, 0x30C0, 0x30FC }, unicodeslot=0x3313, }, [0x3314]={ adobename="kirosquare", category="so", cjkwd="w", description="SQUARE KIRO", direction="l", linebreak="id", specials={ "square", 0x30AD, 0x30ED }, unicodeslot=0x3314, }, [0x3315]={ adobename="kiroguramusquare", category="so", cjkwd="w", description="SQUARE KIROGURAMU", direction="l", linebreak="id", specials={ "square", 0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0 }, unicodeslot=0x3315, }, [0x3316]={ adobename="kiromeetorusquare", category="so", cjkwd="w", description="SQUARE KIROMEETORU", direction="l", linebreak="id", specials={ "square", 0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB }, unicodeslot=0x3316, }, [0x3317]={ category="so", cjkwd="w", description="SQUARE KIROWATTO", direction="l", linebreak="id", specials={ "square", 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8 }, unicodeslot=0x3317, }, [0x3318]={ adobename="guramusquare", category="so", cjkwd="w", description="SQUARE GURAMU", direction="l", linebreak="id", specials={ "square", 0x30B0, 0x30E9, 0x30E0 }, unicodeslot=0x3318, }, [0x3319]={ category="so", cjkwd="w", description="SQUARE GURAMUTON", direction="l", linebreak="id", specials={ "square", 0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3 }, unicodeslot=0x3319, }, [0x331A]={ category="so", cjkwd="w", description="SQUARE KURUZEIRO", direction="l", linebreak="id", specials={ "square", 0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED }, unicodeslot=0x331A, }, [0x331B]={ category="so", cjkwd="w", description="SQUARE KUROONE", direction="l", linebreak="id", specials={ "square", 0x30AF, 0x30ED, 0x30FC, 0x30CD }, unicodeslot=0x331B, }, [0x331C]={ category="so", cjkwd="w", description="SQUARE KEESU", direction="l", linebreak="id", specials={ "square", 0x30B1, 0x30FC, 0x30B9 }, unicodeslot=0x331C, }, [0x331D]={ category="so", cjkwd="w", description="SQUARE KORUNA", direction="l", linebreak="id", specials={ "square", 0x30B3, 0x30EB, 0x30CA }, unicodeslot=0x331D, }, [0x331E]={ adobename="kooposquare", category="so", cjkwd="w", description="SQUARE KOOPO", direction="l", linebreak="id", specials={ "square", 0x30B3, 0x30FC, 0x30DD }, unicodeslot=0x331E, }, [0x331F]={ category="so", cjkwd="w", description="SQUARE SAIKURU", direction="l", linebreak="id", specials={ "square", 0x30B5, 0x30A4, 0x30AF, 0x30EB }, unicodeslot=0x331F, }, [0x3320]={ category="so", cjkwd="w", description="SQUARE SANTIIMU", direction="l", linebreak="id", specials={ "square", 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0 }, unicodeslot=0x3320, }, [0x3321]={ category="so", cjkwd="w", description="SQUARE SIRINGU", direction="l", linebreak="id", specials={ "square", 0x30B7, 0x30EA, 0x30F3, 0x30B0 }, unicodeslot=0x3321, }, [0x3322]={ adobename="sentisquare", category="so", cjkwd="w", description="SQUARE SENTI", direction="l", linebreak="id", specials={ "square", 0x30BB, 0x30F3, 0x30C1 }, unicodeslot=0x3322, }, [0x3323]={ adobename="sentosquare", category="so", cjkwd="w", description="SQUARE SENTO", direction="l", linebreak="id", specials={ "square", 0x30BB, 0x30F3, 0x30C8 }, unicodeslot=0x3323, }, [0x3324]={ category="so", cjkwd="w", description="SQUARE DAASU", direction="l", linebreak="id", specials={ "square", 0x30C0, 0x30FC, 0x30B9 }, unicodeslot=0x3324, }, [0x3325]={ category="so", cjkwd="w", description="SQUARE DESI", direction="l", linebreak="id", specials={ "square", 0x30C7, 0x30B7 }, unicodeslot=0x3325, }, [0x3326]={ adobename="dorusquare", category="so", cjkwd="w", description="SQUARE DORU", direction="l", linebreak="id", specials={ "square", 0x30C9, 0x30EB }, unicodeslot=0x3326, }, [0x3327]={ adobename="tonsquare", category="so", cjkwd="w", description="SQUARE TON", direction="l", linebreak="id", specials={ "square", 0x30C8, 0x30F3 }, unicodeslot=0x3327, }, [0x3328]={ category="so", cjkwd="w", description="SQUARE NANO", direction="l", linebreak="id", specials={ "square", 0x30CA, 0x30CE }, unicodeslot=0x3328, }, [0x3329]={ category="so", cjkwd="w", description="SQUARE NOTTO", direction="l", linebreak="id", specials={ "square", 0x30CE, 0x30C3, 0x30C8 }, unicodeslot=0x3329, }, [0x332A]={ adobename="haitusquare", category="so", cjkwd="w", description="SQUARE HAITU", direction="l", linebreak="id", specials={ "square", 0x30CF, 0x30A4, 0x30C4 }, unicodeslot=0x332A, }, [0x332B]={ adobename="paasentosquare", category="so", cjkwd="w", description="SQUARE PAASENTO", direction="l", linebreak="id", specials={ "square", 0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8 }, unicodeslot=0x332B, }, [0x332C]={ category="so", cjkwd="w", description="SQUARE PAATU", direction="l", linebreak="id", specials={ "square", 0x30D1, 0x30FC, 0x30C4 }, unicodeslot=0x332C, }, [0x332D]={ category="so", cjkwd="w", description="SQUARE BAARERU", direction="l", linebreak="id", specials={ "square", 0x30D0, 0x30FC, 0x30EC, 0x30EB }, unicodeslot=0x332D, }, [0x332E]={ category="so", cjkwd="w", description="SQUARE PIASUTORU", direction="l", linebreak="id", specials={ "square", 0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB }, unicodeslot=0x332E, }, [0x332F]={ category="so", cjkwd="w", description="SQUARE PIKURU", direction="l", linebreak="id", specials={ "square", 0x30D4, 0x30AF, 0x30EB }, unicodeslot=0x332F, }, [0x3330]={ category="so", cjkwd="w", description="SQUARE PIKO", direction="l", linebreak="id", specials={ "square", 0x30D4, 0x30B3 }, unicodeslot=0x3330, }, [0x3331]={ adobename="birusquare", category="so", cjkwd="w", description="SQUARE BIRU", direction="l", linebreak="id", specials={ "square", 0x30D3, 0x30EB }, unicodeslot=0x3331, }, [0x3332]={ category="so", cjkwd="w", description="SQUARE HUARADDO", direction="l", linebreak="id", specials={ "square", 0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9 }, unicodeslot=0x3332, }, [0x3333]={ adobename="huiitosquare", category="so", cjkwd="w", description="SQUARE HUIITO", direction="l", linebreak="id", specials={ "square", 0x30D5, 0x30A3, 0x30FC, 0x30C8 }, unicodeslot=0x3333, }, [0x3334]={ category="so", cjkwd="w", description="SQUARE BUSSYERU", direction="l", linebreak="id", specials={ "square", 0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB }, unicodeslot=0x3334, }, [0x3335]={ category="so", cjkwd="w", description="SQUARE HURAN", direction="l", linebreak="id", specials={ "square", 0x30D5, 0x30E9, 0x30F3 }, unicodeslot=0x3335, }, [0x3336]={ adobename="hekutaarusquare", category="so", cjkwd="w", description="SQUARE HEKUTAARU", direction="l", linebreak="id", specials={ "square", 0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB }, unicodeslot=0x3336, }, [0x3337]={ category="so", cjkwd="w", description="SQUARE PESO", direction="l", linebreak="id", specials={ "square", 0x30DA, 0x30BD }, unicodeslot=0x3337, }, [0x3338]={ category="so", cjkwd="w", description="SQUARE PENIHI", direction="l", linebreak="id", specials={ "square", 0x30DA, 0x30CB, 0x30D2 }, unicodeslot=0x3338, }, [0x3339]={ adobename="herutusquare", category="so", cjkwd="w", description="SQUARE HERUTU", direction="l", linebreak="id", specials={ "square", 0x30D8, 0x30EB, 0x30C4 }, unicodeslot=0x3339, }, [0x333A]={ category="so", cjkwd="w", description="SQUARE PENSU", direction="l", linebreak="id", specials={ "square", 0x30DA, 0x30F3, 0x30B9 }, unicodeslot=0x333A, }, [0x333B]={ adobename="peezisquare", category="so", cjkwd="w", description="SQUARE PEEZI", direction="l", linebreak="id", specials={ "square", 0x30DA, 0x30FC, 0x30B8 }, unicodeslot=0x333B, }, [0x333C]={ category="so", cjkwd="w", description="SQUARE BEETA", direction="l", linebreak="id", specials={ "square", 0x30D9, 0x30FC, 0x30BF }, unicodeslot=0x333C, }, [0x333D]={ category="so", cjkwd="w", description="SQUARE POINTO", direction="l", linebreak="id", specials={ "square", 0x30DD, 0x30A4, 0x30F3, 0x30C8 }, unicodeslot=0x333D, }, [0x333E]={ category="so", cjkwd="w", description="SQUARE BORUTO", direction="l", linebreak="id", specials={ "square", 0x30DC, 0x30EB, 0x30C8 }, unicodeslot=0x333E, }, [0x333F]={ category="so", cjkwd="w", description="SQUARE HON", direction="l", linebreak="id", specials={ "square", 0x30DB, 0x30F3 }, unicodeslot=0x333F, }, [0x3340]={ category="so", cjkwd="w", description="SQUARE PONDO", direction="l", linebreak="id", specials={ "square", 0x30DD, 0x30F3, 0x30C9 }, unicodeslot=0x3340, }, [0x3341]={ category="so", cjkwd="w", description="SQUARE HOORU", direction="l", linebreak="id", specials={ "square", 0x30DB, 0x30FC, 0x30EB }, unicodeslot=0x3341, }, [0x3342]={ adobename="hoonsquare", category="so", cjkwd="w", description="SQUARE HOON", direction="l", linebreak="id", specials={ "square", 0x30DB, 0x30FC, 0x30F3 }, unicodeslot=0x3342, }, [0x3343]={ category="so", cjkwd="w", description="SQUARE MAIKURO", direction="l", linebreak="id", specials={ "square", 0x30DE, 0x30A4, 0x30AF, 0x30ED }, unicodeslot=0x3343, }, [0x3344]={ category="so", cjkwd="w", description="SQUARE MAIRU", direction="l", linebreak="id", specials={ "square", 0x30DE, 0x30A4, 0x30EB }, unicodeslot=0x3344, }, [0x3345]={ category="so", cjkwd="w", description="SQUARE MAHHA", direction="l", linebreak="id", specials={ "square", 0x30DE, 0x30C3, 0x30CF }, unicodeslot=0x3345, }, [0x3346]={ category="so", cjkwd="w", description="SQUARE MARUKU", direction="l", linebreak="id", specials={ "square", 0x30DE, 0x30EB, 0x30AF }, unicodeslot=0x3346, }, [0x3347]={ adobename="mansyonsquare", category="so", cjkwd="w", description="SQUARE MANSYON", direction="l", linebreak="id", specials={ "square", 0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3 }, unicodeslot=0x3347, }, [0x3348]={ category="so", cjkwd="w", description="SQUARE MIKURON", direction="l", linebreak="id", specials={ "square", 0x30DF, 0x30AF, 0x30ED, 0x30F3 }, unicodeslot=0x3348, }, [0x3349]={ adobename="mirisquare", category="so", cjkwd="w", description="SQUARE MIRI", direction="l", linebreak="id", specials={ "square", 0x30DF, 0x30EA }, unicodeslot=0x3349, }, [0x334A]={ adobename="miribaarusquare", category="so", cjkwd="w", description="SQUARE MIRIBAARU", direction="l", linebreak="id", specials={ "square", 0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB }, unicodeslot=0x334A, }, [0x334B]={ category="so", cjkwd="w", description="SQUARE MEGA", direction="l", linebreak="id", specials={ "square", 0x30E1, 0x30AC }, unicodeslot=0x334B, }, [0x334C]={ category="so", cjkwd="w", description="SQUARE MEGATON", direction="l", linebreak="id", specials={ "square", 0x30E1, 0x30AC, 0x30C8, 0x30F3 }, unicodeslot=0x334C, }, [0x334D]={ adobename="meetorusquare", category="so", cjkwd="w", description="SQUARE MEETORU", direction="l", linebreak="id", specials={ "square", 0x30E1, 0x30FC, 0x30C8, 0x30EB }, unicodeslot=0x334D, }, [0x334E]={ adobename="yaadosquare", category="so", cjkwd="w", description="SQUARE YAADO", direction="l", linebreak="id", specials={ "square", 0x30E4, 0x30FC, 0x30C9 }, unicodeslot=0x334E, }, [0x334F]={ category="so", cjkwd="w", description="SQUARE YAARU", direction="l", linebreak="id", specials={ "square", 0x30E4, 0x30FC, 0x30EB }, unicodeslot=0x334F, }, [0x3350]={ category="so", cjkwd="w", description="SQUARE YUAN", direction="l", linebreak="id", specials={ "square", 0x30E6, 0x30A2, 0x30F3 }, unicodeslot=0x3350, }, [0x3351]={ adobename="rittorusquare", category="so", cjkwd="w", description="SQUARE RITTORU", direction="l", linebreak="id", specials={ "square", 0x30EA, 0x30C3, 0x30C8, 0x30EB }, unicodeslot=0x3351, }, [0x3352]={ category="so", cjkwd="w", description="SQUARE RIRA", direction="l", linebreak="id", specials={ "square", 0x30EA, 0x30E9 }, unicodeslot=0x3352, }, [0x3353]={ category="so", cjkwd="w", description="SQUARE RUPII", direction="l", linebreak="id", specials={ "square", 0x30EB, 0x30D4, 0x30FC }, unicodeslot=0x3353, }, [0x3354]={ category="so", cjkwd="w", description="SQUARE RUUBURU", direction="l", linebreak="id", specials={ "square", 0x30EB, 0x30FC, 0x30D6, 0x30EB }, unicodeslot=0x3354, }, [0x3355]={ category="so", cjkwd="w", description="SQUARE REMU", direction="l", linebreak="id", specials={ "square", 0x30EC, 0x30E0 }, unicodeslot=0x3355, }, [0x3356]={ category="so", cjkwd="w", description="SQUARE RENTOGEN", direction="l", linebreak="id", specials={ "square", 0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3 }, unicodeslot=0x3356, }, [0x3357]={ adobename="wattosquare", category="so", cjkwd="w", description="SQUARE WATTO", direction="l", linebreak="id", specials={ "square", 0x30EF, 0x30C3, 0x30C8 }, unicodeslot=0x3357, }, [0x3358]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO", direction="l", linebreak="id", specials={ "compat", 0x0030, 0x70B9 }, unicodeslot=0x3358, }, [0x3359]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x70B9 }, unicodeslot=0x3359, }, [0x335A]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x70B9 }, unicodeslot=0x335A, }, [0x335B]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE", direction="l", linebreak="id", specials={ "compat", 0x0033, 0x70B9 }, unicodeslot=0x335B, }, [0x335C]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR", direction="l", linebreak="id", specials={ "compat", 0x0034, 0x70B9 }, unicodeslot=0x335C, }, [0x335D]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE", direction="l", linebreak="id", specials={ "compat", 0x0035, 0x70B9 }, unicodeslot=0x335D, }, [0x335E]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX", direction="l", linebreak="id", specials={ "compat", 0x0036, 0x70B9 }, unicodeslot=0x335E, }, [0x335F]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN", direction="l", linebreak="id", specials={ "compat", 0x0037, 0x70B9 }, unicodeslot=0x335F, }, [0x3360]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT", direction="l", linebreak="id", specials={ "compat", 0x0038, 0x70B9 }, unicodeslot=0x3360, }, [0x3361]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE", direction="l", linebreak="id", specials={ "compat", 0x0039, 0x70B9 }, unicodeslot=0x3361, }, [0x3362]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0030, 0x70B9 }, unicodeslot=0x3362, }, [0x3363]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0031, 0x70B9 }, unicodeslot=0x3363, }, [0x3364]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0032, 0x70B9 }, unicodeslot=0x3364, }, [0x3365]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0033, 0x70B9 }, unicodeslot=0x3365, }, [0x3366]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0034, 0x70B9 }, unicodeslot=0x3366, }, [0x3367]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0035, 0x70B9 }, unicodeslot=0x3367, }, [0x3368]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0036, 0x70B9 }, unicodeslot=0x3368, }, [0x3369]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0037, 0x70B9 }, unicodeslot=0x3369, }, [0x336A]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0038, 0x70B9 }, unicodeslot=0x336A, }, [0x336B]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0039, 0x70B9 }, unicodeslot=0x336B, }, [0x336C]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0030, 0x70B9 }, unicodeslot=0x336C, }, [0x336D]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0031, 0x70B9 }, unicodeslot=0x336D, }, [0x336E]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0032, 0x70B9 }, unicodeslot=0x336E, }, [0x336F]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0033, 0x70B9 }, unicodeslot=0x336F, }, [0x3370]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0034, 0x70B9 }, unicodeslot=0x3370, }, [0x3371]={ category="so", cjkwd="w", description="SQUARE HPA", direction="l", linebreak="id", specials={ "square", 0x0068, 0x0050, 0x0061 }, unicodeslot=0x3371, }, [0x3372]={ category="so", cjkwd="w", description="SQUARE DA", direction="l", linebreak="id", specials={ "square", 0x0064, 0x0061 }, unicodeslot=0x3372, }, [0x3373]={ category="so", cjkwd="w", description="SQUARE AU", direction="l", linebreak="id", specials={ "square", 0x0041, 0x0055 }, unicodeslot=0x3373, }, [0x3374]={ category="so", cjkwd="w", description="SQUARE BAR", direction="l", linebreak="id", specials={ "square", 0x0062, 0x0061, 0x0072 }, unicodeslot=0x3374, }, [0x3375]={ category="so", cjkwd="w", description="SQUARE OV", direction="l", linebreak="id", specials={ "square", 0x006F, 0x0056 }, unicodeslot=0x3375, }, [0x3376]={ category="so", cjkwd="w", description="SQUARE PC", direction="l", linebreak="id", specials={ "square", 0x0070, 0x0063 }, unicodeslot=0x3376, }, [0x3377]={ category="so", cjkwd="w", description="SQUARE DM", direction="on", linebreak="id", specials={ "square", 0x0064, 0x006D }, unicodeslot=0x3377, }, [0x3378]={ category="so", cjkwd="w", description="SQUARE DM SQUARED", direction="on", linebreak="id", specials={ "square", 0x0064, 0x006D, 0x00B2 }, unicodeslot=0x3378, }, [0x3379]={ category="so", cjkwd="w", description="SQUARE DM CUBED", direction="on", linebreak="id", specials={ "square", 0x0064, 0x006D, 0x00B3 }, unicodeslot=0x3379, }, [0x337A]={ category="so", cjkwd="w", description="SQUARE IU", direction="on", linebreak="id", specials={ "square", 0x0049, 0x0055 }, unicodeslot=0x337A, }, [0x337B]={ adobename="heiseierasquare", category="so", cjkwd="w", description="SQUARE ERA NAME HEISEI", direction="l", linebreak="id", specials={ "square", 0x5E73, 0x6210 }, unicodeslot=0x337B, }, [0x337C]={ adobename="syouwaerasquare", category="so", cjkwd="w", description="SQUARE ERA NAME SYOUWA", direction="l", linebreak="id", specials={ "square", 0x662D, 0x548C }, unicodeslot=0x337C, }, [0x337D]={ adobename="taisyouerasquare", category="so", cjkwd="w", description="SQUARE ERA NAME TAISYOU", direction="l", linebreak="id", specials={ "square", 0x5927, 0x6B63 }, unicodeslot=0x337D, }, [0x337E]={ adobename="meizierasquare", category="so", cjkwd="w", description="SQUARE ERA NAME MEIZI", direction="l", linebreak="id", specials={ "square", 0x660E, 0x6CBB }, unicodeslot=0x337E, }, [0x337F]={ adobename="corporationsquare", category="so", cjkwd="w", description="SQUARE CORPORATION", direction="l", linebreak="id", specials={ "square", 0x682A, 0x5F0F, 0x4F1A, 0x793E }, unicodeslot=0x337F, }, [0x3380]={ adobename="paampssquare", category="so", cjkwd="w", description="SQUARE PA AMPS", direction="l", linebreak="id", specials={ "square", 0x0070, 0x0041 }, unicodeslot=0x3380, }, [0x3381]={ adobename="nasquare", category="so", cjkwd="w", description="SQUARE NA", direction="l", linebreak="id", specials={ "square", 0x006E, 0x0041 }, unicodeslot=0x3381, }, [0x3382]={ adobename="muasquare", category="so", cjkwd="w", description="SQUARE MU A", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x0041 }, unicodeslot=0x3382, }, [0x3383]={ adobename="masquare", category="so", cjkwd="w", description="SQUARE MA", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0041 }, unicodeslot=0x3383, }, [0x3384]={ adobename="kasquare", category="so", cjkwd="w", description="SQUARE KA", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0041 }, unicodeslot=0x3384, }, [0x3385]={ adobename="KBsquare", category="so", cjkwd="w", description="SQUARE KB", direction="l", linebreak="id", specials={ "square", 0x004B, 0x0042 }, unicodeslot=0x3385, }, [0x3386]={ adobename="MBsquare", category="so", cjkwd="w", description="SQUARE MB", direction="l", linebreak="id", specials={ "square", 0x004D, 0x0042 }, unicodeslot=0x3386, }, [0x3387]={ adobename="GBsquare", category="so", cjkwd="w", description="SQUARE GB", direction="l", linebreak="id", specials={ "square", 0x0047, 0x0042 }, unicodeslot=0x3387, }, [0x3388]={ adobename="calsquare", category="so", cjkwd="w", description="SQUARE CAL", direction="l", linebreak="id", specials={ "square", 0x0063, 0x0061, 0x006C }, unicodeslot=0x3388, }, [0x3389]={ adobename="kcalsquare", category="so", cjkwd="w", description="SQUARE KCAL", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0063, 0x0061, 0x006C }, unicodeslot=0x3389, }, [0x338A]={ adobename="pfsquare", category="so", cjkwd="w", description="SQUARE PF", direction="l", linebreak="id", specials={ "square", 0x0070, 0x0046 }, unicodeslot=0x338A, }, [0x338B]={ adobename="nfsquare", category="so", cjkwd="w", description="SQUARE NF", direction="l", linebreak="id", specials={ "square", 0x006E, 0x0046 }, unicodeslot=0x338B, }, [0x338C]={ adobename="mufsquare", category="so", cjkwd="w", description="SQUARE MU F", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x0046 }, unicodeslot=0x338C, }, [0x338D]={ adobename="mugsquare", category="so", cjkwd="w", description="SQUARE MU G", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x0067 }, unicodeslot=0x338D, }, [0x338E]={ adobename="squaremg", category="so", cjkwd="w", description="SQUARE MG", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0067 }, unicodeslot=0x338E, }, [0x338F]={ adobename="squarekg", category="so", cjkwd="w", description="SQUARE KG", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0067 }, unicodeslot=0x338F, }, [0x3390]={ adobename="Hzsquare", category="so", cjkwd="w", description="SQUARE HZ", direction="l", linebreak="id", specials={ "square", 0x0048, 0x007A }, unicodeslot=0x3390, }, [0x3391]={ adobename="khzsquare", category="so", cjkwd="w", description="SQUARE KHZ", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0048, 0x007A }, unicodeslot=0x3391, }, [0x3392]={ adobename="mhzsquare", category="so", cjkwd="w", description="SQUARE MHZ", direction="l", linebreak="id", specials={ "square", 0x004D, 0x0048, 0x007A }, unicodeslot=0x3392, }, [0x3393]={ adobename="ghzsquare", category="so", cjkwd="w", description="SQUARE GHZ", direction="l", linebreak="id", specials={ "square", 0x0047, 0x0048, 0x007A }, unicodeslot=0x3393, }, [0x3394]={ adobename="thzsquare", category="so", cjkwd="w", description="SQUARE THZ", direction="l", linebreak="id", specials={ "square", 0x0054, 0x0048, 0x007A }, unicodeslot=0x3394, }, [0x3395]={ adobename="mulsquare", category="so", cjkwd="w", description="SQUARE MU L", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x2113 }, unicodeslot=0x3395, }, [0x3396]={ adobename="mlsquare", category="so", cjkwd="w", description="SQUARE ML", direction="l", linebreak="id", specials={ "square", 0x006D, 0x2113 }, unicodeslot=0x3396, }, [0x3397]={ adobename="dlsquare", category="so", cjkwd="w", description="SQUARE DL", direction="l", linebreak="id", specials={ "square", 0x0064, 0x2113 }, unicodeslot=0x3397, }, [0x3398]={ adobename="klsquare", category="so", cjkwd="w", description="SQUARE KL", direction="l", linebreak="id", specials={ "square", 0x006B, 0x2113 }, unicodeslot=0x3398, }, [0x3399]={ adobename="fmsquare", category="so", cjkwd="w", description="SQUARE FM", direction="l", linebreak="id", specials={ "square", 0x0066, 0x006D }, unicodeslot=0x3399, }, [0x339A]={ adobename="nmsquare", category="so", cjkwd="w", description="SQUARE NM", direction="l", linebreak="id", specials={ "square", 0x006E, 0x006D }, unicodeslot=0x339A, }, [0x339B]={ adobename="mumsquare", category="so", cjkwd="w", description="SQUARE MU M", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x006D }, unicodeslot=0x339B, }, [0x339C]={ adobename="squaremm", category="so", cjkwd="w", description="SQUARE MM", direction="l", linebreak="id", specials={ "square", 0x006D, 0x006D }, unicodeslot=0x339C, }, [0x339D]={ adobename="squarecm", category="so", cjkwd="w", description="SQUARE CM", direction="l", linebreak="id", specials={ "square", 0x0063, 0x006D }, unicodeslot=0x339D, }, [0x339E]={ adobename="squarekm", category="so", cjkwd="w", description="SQUARE KM", direction="l", linebreak="id", specials={ "square", 0x006B, 0x006D }, unicodeslot=0x339E, }, [0x339F]={ adobename="mmsquaredsquare", category="so", cjkwd="w", description="SQUARE MM SQUARED", direction="l", linebreak="id", specials={ "square", 0x006D, 0x006D, 0x00B2 }, unicodeslot=0x339F, }, [0x33A0]={ adobename="cmsquaredsquare", category="so", cjkwd="w", description="SQUARE CM SQUARED", direction="l", linebreak="id", specials={ "square", 0x0063, 0x006D, 0x00B2 }, unicodeslot=0x33A0, }, [0x33A1]={ adobename="squaremsquared", category="so", cjkwd="w", description="SQUARE M SQUARED", direction="l", linebreak="id", specials={ "square", 0x006D, 0x00B2 }, unicodeslot=0x33A1, }, [0x33A2]={ adobename="kmsquaredsquare", category="so", cjkwd="w", description="SQUARE KM SQUARED", direction="l", linebreak="id", specials={ "square", 0x006B, 0x006D, 0x00B2 }, unicodeslot=0x33A2, }, [0x33A3]={ adobename="mmcubedsquare", category="so", cjkwd="w", description="SQUARE MM CUBED", direction="l", linebreak="id", specials={ "square", 0x006D, 0x006D, 0x00B3 }, unicodeslot=0x33A3, }, [0x33A4]={ adobename="cmcubedsquare", category="so", cjkwd="w", description="SQUARE CM CUBED", direction="l", linebreak="id", specials={ "square", 0x0063, 0x006D, 0x00B3 }, unicodeslot=0x33A4, }, [0x33A5]={ adobename="mcubedsquare", category="so", cjkwd="w", description="SQUARE M CUBED", direction="l", linebreak="id", specials={ "square", 0x006D, 0x00B3 }, unicodeslot=0x33A5, }, [0x33A6]={ adobename="kmcubedsquare", category="so", cjkwd="w", description="SQUARE KM CUBED", direction="l", linebreak="id", specials={ "square", 0x006B, 0x006D, 0x00B3 }, unicodeslot=0x33A6, }, [0x33A7]={ adobename="moverssquare", category="so", cjkwd="w", description="SQUARE M OVER S", direction="l", linebreak="id", specials={ "square", 0x006D, 0x2215, 0x0073 }, unicodeslot=0x33A7, }, [0x33A8]={ adobename="moverssquaredsquare", category="so", cjkwd="w", description="SQUARE M OVER S SQUARED", direction="l", linebreak="id", specials={ "square", 0x006D, 0x2215, 0x0073, 0x00B2 }, unicodeslot=0x33A8, }, [0x33A9]={ adobename="pasquare", category="so", cjkwd="w", description="SQUARE PA", direction="l", linebreak="id", specials={ "square", 0x0050, 0x0061 }, unicodeslot=0x33A9, }, [0x33AA]={ adobename="kpasquare", category="so", cjkwd="w", description="SQUARE KPA", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0050, 0x0061 }, unicodeslot=0x33AA, }, [0x33AB]={ adobename="mpasquare", category="so", cjkwd="w", description="SQUARE MPA", direction="l", linebreak="id", specials={ "square", 0x004D, 0x0050, 0x0061 }, unicodeslot=0x33AB, }, [0x33AC]={ adobename="gpasquare", category="so", cjkwd="w", description="SQUARE GPA", direction="l", linebreak="id", specials={ "square", 0x0047, 0x0050, 0x0061 }, unicodeslot=0x33AC, }, [0x33AD]={ adobename="radsquare", category="so", cjkwd="w", description="SQUARE RAD", direction="l", linebreak="id", specials={ "square", 0x0072, 0x0061, 0x0064 }, unicodeslot=0x33AD, }, [0x33AE]={ adobename="radoverssquare", category="so", cjkwd="w", description="SQUARE RAD OVER S", direction="l", linebreak="id", specials={ "square", 0x0072, 0x0061, 0x0064, 0x2215, 0x0073 }, unicodeslot=0x33AE, }, [0x33AF]={ adobename="radoverssquaredsquare", category="so", cjkwd="w", description="SQUARE RAD OVER S SQUARED", direction="l", linebreak="id", specials={ "square", 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00B2 }, unicodeslot=0x33AF, }, [0x33B0]={ adobename="pssquare", category="so", cjkwd="w", description="SQUARE PS", direction="l", linebreak="id", specials={ "square", 0x0070, 0x0073 }, unicodeslot=0x33B0, }, [0x33B1]={ adobename="nssquare", category="so", cjkwd="w", description="SQUARE NS", direction="l", linebreak="id", specials={ "square", 0x006E, 0x0073 }, unicodeslot=0x33B1, }, [0x33B2]={ adobename="mussquare", category="so", cjkwd="w", description="SQUARE MU S", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x0073 }, unicodeslot=0x33B2, }, [0x33B3]={ adobename="mssquare", category="so", cjkwd="w", description="SQUARE MS", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0073 }, unicodeslot=0x33B3, }, [0x33B4]={ adobename="pvsquare", category="so", cjkwd="w", description="SQUARE PV", direction="l", linebreak="id", specials={ "square", 0x0070, 0x0056 }, unicodeslot=0x33B4, }, [0x33B5]={ adobename="nvsquare", category="so", cjkwd="w", description="SQUARE NV", direction="l", linebreak="id", specials={ "square", 0x006E, 0x0056 }, unicodeslot=0x33B5, }, [0x33B6]={ adobename="muvsquare", category="so", cjkwd="w", description="SQUARE MU V", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x0056 }, unicodeslot=0x33B6, }, [0x33B7]={ adobename="mvsquare", category="so", cjkwd="w", description="SQUARE MV", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0056 }, unicodeslot=0x33B7, }, [0x33B8]={ adobename="kvsquare", category="so", cjkwd="w", description="SQUARE KV", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0056 }, unicodeslot=0x33B8, }, [0x33B9]={ adobename="mvmegasquare", category="so", cjkwd="w", description="SQUARE MV MEGA", direction="l", linebreak="id", specials={ "square", 0x004D, 0x0056 }, unicodeslot=0x33B9, }, [0x33BA]={ adobename="pwsquare", category="so", cjkwd="w", description="SQUARE PW", direction="l", linebreak="id", specials={ "square", 0x0070, 0x0057 }, unicodeslot=0x33BA, }, [0x33BB]={ adobename="nwsquare", category="so", cjkwd="w", description="SQUARE NW", direction="l", linebreak="id", specials={ "square", 0x006E, 0x0057 }, unicodeslot=0x33BB, }, [0x33BC]={ adobename="muwsquare", category="so", cjkwd="w", description="SQUARE MU W", direction="l", linebreak="id", specials={ "square", 0x03BC, 0x0057 }, unicodeslot=0x33BC, }, [0x33BD]={ adobename="mwsquare", category="so", cjkwd="w", description="SQUARE MW", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0057 }, unicodeslot=0x33BD, }, [0x33BE]={ adobename="kwsquare", category="so", cjkwd="w", description="SQUARE KW", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0057 }, unicodeslot=0x33BE, }, [0x33BF]={ adobename="mwmegasquare", category="so", cjkwd="w", description="SQUARE MW MEGA", direction="l", linebreak="id", specials={ "square", 0x004D, 0x0057 }, unicodeslot=0x33BF, }, [0x33C0]={ adobename="kohmsquare", category="so", cjkwd="w", description="SQUARE K OHM", direction="l", linebreak="id", specials={ "square", 0x006B, 0x03A9 }, unicodeslot=0x33C0, }, [0x33C1]={ adobename="mohmsquare", category="so", cjkwd="w", description="SQUARE M OHM", direction="l", linebreak="id", specials={ "square", 0x004D, 0x03A9 }, unicodeslot=0x33C1, }, [0x33C2]={ adobename="amsquare", category="so", cjkwd="w", description="SQUARE AM", direction="l", linebreak="id", specials={ "square", 0x0061, 0x002E, 0x006D, 0x002E }, unicodeslot=0x33C2, }, [0x33C3]={ adobename="bqsquare", category="so", cjkwd="w", description="SQUARE BQ", direction="l", linebreak="id", specials={ "square", 0x0042, 0x0071 }, unicodeslot=0x33C3, }, [0x33C4]={ adobename="squarecc", category="so", cjkwd="w", description="SQUARE CC", direction="l", linebreak="id", specials={ "square", 0x0063, 0x0063 }, unicodeslot=0x33C4, }, [0x33C5]={ adobename="cdsquare", category="so", cjkwd="w", description="SQUARE CD", direction="l", linebreak="id", specials={ "square", 0x0063, 0x0064 }, unicodeslot=0x33C5, }, [0x33C6]={ adobename="coverkgsquare", category="so", cjkwd="w", description="SQUARE C OVER KG", direction="l", linebreak="id", specials={ "square", 0x0043, 0x2215, 0x006B, 0x0067 }, unicodeslot=0x33C6, }, [0x33C7]={ adobename="cosquare", category="so", cjkwd="w", description="SQUARE CO", direction="l", linebreak="id", specials={ "square", 0x0043, 0x006F, 0x002E }, unicodeslot=0x33C7, }, [0x33C8]={ adobename="dbsquare", category="so", cjkwd="w", description="SQUARE DB", direction="l", linebreak="id", specials={ "square", 0x0064, 0x0042 }, unicodeslot=0x33C8, }, [0x33C9]={ adobename="gysquare", category="so", cjkwd="w", description="SQUARE GY", direction="l", linebreak="id", specials={ "square", 0x0047, 0x0079 }, unicodeslot=0x33C9, }, [0x33CA]={ adobename="hasquare", category="so", cjkwd="w", description="SQUARE HA", direction="l", linebreak="id", specials={ "square", 0x0068, 0x0061 }, unicodeslot=0x33CA, }, [0x33CB]={ adobename="HPsquare", category="so", cjkwd="w", description="SQUARE HP", direction="l", linebreak="id", specials={ "square", 0x0048, 0x0050 }, unicodeslot=0x33CB, }, [0x33CC]={ category="so", cjkwd="w", description="SQUARE IN", direction="l", linebreak="id", specials={ "square", 0x0069, 0x006E }, unicodeslot=0x33CC, }, [0x33CD]={ adobename="KKsquare", category="so", cjkwd="w", description="SQUARE KK", direction="l", linebreak="id", specials={ "square", 0x004B, 0x004B }, unicodeslot=0x33CD, }, [0x33CE]={ adobename="squarekmcapital", category="so", cjkwd="w", description="SQUARE KM CAPITAL", direction="l", linebreak="id", specials={ "square", 0x004B, 0x004D }, unicodeslot=0x33CE, }, [0x33CF]={ adobename="ktsquare", category="so", cjkwd="w", description="SQUARE KT", direction="l", linebreak="id", specials={ "square", 0x006B, 0x0074 }, unicodeslot=0x33CF, }, [0x33D0]={ adobename="lmsquare", category="so", cjkwd="w", description="SQUARE LM", direction="l", linebreak="id", specials={ "square", 0x006C, 0x006D }, unicodeslot=0x33D0, }, [0x33D1]={ adobename="squareln", category="so", cjkwd="w", description="SQUARE LN", direction="l", linebreak="id", specials={ "square", 0x006C, 0x006E }, unicodeslot=0x33D1, }, [0x33D2]={ adobename="squarelog", category="so", cjkwd="w", description="SQUARE LOG", direction="l", linebreak="id", specials={ "square", 0x006C, 0x006F, 0x0067 }, unicodeslot=0x33D2, }, [0x33D3]={ adobename="lxsquare", category="so", cjkwd="w", description="SQUARE LX", direction="l", linebreak="id", specials={ "square", 0x006C, 0x0078 }, unicodeslot=0x33D3, }, [0x33D4]={ adobename="mbsquare", category="so", cjkwd="w", description="SQUARE MB SMALL", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0062 }, unicodeslot=0x33D4, }, [0x33D5]={ adobename="squaremil", category="so", cjkwd="w", description="SQUARE MIL", direction="l", linebreak="id", specials={ "square", 0x006D, 0x0069, 0x006C }, unicodeslot=0x33D5, }, [0x33D6]={ adobename="molsquare", category="so", cjkwd="w", description="SQUARE MOL", direction="l", linebreak="id", specials={ "square", 0x006D, 0x006F, 0x006C }, unicodeslot=0x33D6, }, [0x33D7]={ category="so", cjkwd="w", description="SQUARE PH", direction="l", linebreak="id", specials={ "square", 0x0050, 0x0048 }, unicodeslot=0x33D7, }, [0x33D8]={ adobename="pmsquare", category="so", cjkwd="w", description="SQUARE PM", direction="l", linebreak="id", specials={ "square", 0x0070, 0x002E, 0x006D, 0x002E }, unicodeslot=0x33D8, }, [0x33D9]={ category="so", cjkwd="w", description="SQUARE PPM", direction="l", linebreak="id", specials={ "square", 0x0050, 0x0050, 0x004D }, unicodeslot=0x33D9, }, [0x33DA]={ category="so", cjkwd="w", description="SQUARE PR", direction="l", linebreak="id", specials={ "square", 0x0050, 0x0052 }, unicodeslot=0x33DA, }, [0x33DB]={ adobename="srsquare", category="so", cjkwd="w", description="SQUARE SR", direction="l", linebreak="id", specials={ "square", 0x0073, 0x0072 }, unicodeslot=0x33DB, }, [0x33DC]={ adobename="svsquare", category="so", cjkwd="w", description="SQUARE SV", direction="l", linebreak="id", specials={ "square", 0x0053, 0x0076 }, unicodeslot=0x33DC, }, [0x33DD]={ adobename="wbsquare", category="so", cjkwd="w", description="SQUARE WB", direction="l", linebreak="id", specials={ "square", 0x0057, 0x0062 }, unicodeslot=0x33DD, }, [0x33DE]={ category="so", cjkwd="w", description="SQUARE V OVER M", direction="on", linebreak="id", specials={ "square", 0x0056, 0x2215, 0x006D }, unicodeslot=0x33DE, }, [0x33DF]={ category="so", cjkwd="w", description="SQUARE A OVER M", direction="on", linebreak="id", specials={ "square", 0x0041, 0x2215, 0x006D }, unicodeslot=0x33DF, }, [0x33E0]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x65E5 }, unicodeslot=0x33E0, }, [0x33E1]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x65E5 }, unicodeslot=0x33E1, }, [0x33E2]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE", direction="l", linebreak="id", specials={ "compat", 0x0033, 0x65E5 }, unicodeslot=0x33E2, }, [0x33E3]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR", direction="l", linebreak="id", specials={ "compat", 0x0034, 0x65E5 }, unicodeslot=0x33E3, }, [0x33E4]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE", direction="l", linebreak="id", specials={ "compat", 0x0035, 0x65E5 }, unicodeslot=0x33E4, }, [0x33E5]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX", direction="l", linebreak="id", specials={ "compat", 0x0036, 0x65E5 }, unicodeslot=0x33E5, }, [0x33E6]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN", direction="l", linebreak="id", specials={ "compat", 0x0037, 0x65E5 }, unicodeslot=0x33E6, }, [0x33E7]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT", direction="l", linebreak="id", specials={ "compat", 0x0038, 0x65E5 }, unicodeslot=0x33E7, }, [0x33E8]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE", direction="l", linebreak="id", specials={ "compat", 0x0039, 0x65E5 }, unicodeslot=0x33E8, }, [0x33E9]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0030, 0x65E5 }, unicodeslot=0x33E9, }, [0x33EA]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0031, 0x65E5 }, unicodeslot=0x33EA, }, [0x33EB]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0032, 0x65E5 }, unicodeslot=0x33EB, }, [0x33EC]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0033, 0x65E5 }, unicodeslot=0x33EC, }, [0x33ED]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0034, 0x65E5 }, unicodeslot=0x33ED, }, [0x33EE]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0035, 0x65E5 }, unicodeslot=0x33EE, }, [0x33EF]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0036, 0x65E5 }, unicodeslot=0x33EF, }, [0x33F0]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0037, 0x65E5 }, unicodeslot=0x33F0, }, [0x33F1]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0038, 0x65E5 }, unicodeslot=0x33F1, }, [0x33F2]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN", direction="l", linebreak="id", specials={ "compat", 0x0031, 0x0039, 0x65E5 }, unicodeslot=0x33F2, }, [0x33F3]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0030, 0x65E5 }, unicodeslot=0x33F3, }, [0x33F4]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0031, 0x65E5 }, unicodeslot=0x33F4, }, [0x33F5]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0032, 0x65E5 }, unicodeslot=0x33F5, }, [0x33F6]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0033, 0x65E5 }, unicodeslot=0x33F6, }, [0x33F7]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0034, 0x65E5 }, unicodeslot=0x33F7, }, [0x33F8]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0035, 0x65E5 }, unicodeslot=0x33F8, }, [0x33F9]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0036, 0x65E5 }, unicodeslot=0x33F9, }, [0x33FA]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0037, 0x65E5 }, unicodeslot=0x33FA, }, [0x33FB]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0038, 0x65E5 }, unicodeslot=0x33FB, }, [0x33FC]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE", direction="l", linebreak="id", specials={ "compat", 0x0032, 0x0039, 0x65E5 }, unicodeslot=0x33FC, }, [0x33FD]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY", direction="l", linebreak="id", specials={ "compat", 0x0033, 0x0030, 0x65E5 }, unicodeslot=0x33FD, }, [0x33FE]={ category="so", cjkwd="w", description="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE", direction="l", linebreak="id", specials={ "compat", 0x0033, 0x0031, 0x65E5 }, unicodeslot=0x33FE, }, [0x33FF]={ category="so", cjkwd="w", description="SQUARE GAL", direction="on", linebreak="id", specials={ "square", 0x0067, 0x0061, 0x006C }, unicodeslot=0x33FF, }, [0x4DC0]={ category="so", description="HEXAGRAM FOR THE CREATIVE HEAVEN", direction="on", linebreak="al", unicodeslot=0x4DC0, }, [0x4DC1]={ category="so", description="HEXAGRAM FOR THE RECEPTIVE EARTH", direction="on", linebreak="al", unicodeslot=0x4DC1, }, [0x4DC2]={ category="so", description="HEXAGRAM FOR DIFFICULTY AT THE BEGINNING", direction="on", linebreak="al", unicodeslot=0x4DC2, }, [0x4DC3]={ category="so", description="HEXAGRAM FOR YOUTHFUL FOLLY", direction="on", linebreak="al", unicodeslot=0x4DC3, }, [0x4DC4]={ category="so", description="HEXAGRAM FOR WAITING", direction="on", linebreak="al", unicodeslot=0x4DC4, }, [0x4DC5]={ category="so", description="HEXAGRAM FOR CONFLICT", direction="on", linebreak="al", unicodeslot=0x4DC5, }, [0x4DC6]={ category="so", description="HEXAGRAM FOR THE ARMY", direction="on", linebreak="al", unicodeslot=0x4DC6, }, [0x4DC7]={ category="so", description="HEXAGRAM FOR HOLDING TOGETHER", direction="on", linebreak="al", unicodeslot=0x4DC7, }, [0x4DC8]={ category="so", description="HEXAGRAM FOR SMALL TAMING", direction="on", linebreak="al", unicodeslot=0x4DC8, }, [0x4DC9]={ category="so", description="HEXAGRAM FOR TREADING", direction="on", linebreak="al", unicodeslot=0x4DC9, }, [0x4DCA]={ category="so", description="HEXAGRAM FOR PEACE", direction="on", linebreak="al", unicodeslot=0x4DCA, }, [0x4DCB]={ category="so", description="HEXAGRAM FOR STANDSTILL", direction="on", linebreak="al", unicodeslot=0x4DCB, }, [0x4DCC]={ category="so", description="HEXAGRAM FOR FELLOWSHIP", direction="on", linebreak="al", unicodeslot=0x4DCC, }, [0x4DCD]={ category="so", description="HEXAGRAM FOR GREAT POSSESSION", direction="on", linebreak="al", unicodeslot=0x4DCD, }, [0x4DCE]={ category="so", description="HEXAGRAM FOR MODESTY", direction="on", linebreak="al", unicodeslot=0x4DCE, }, [0x4DCF]={ category="so", description="HEXAGRAM FOR ENTHUSIASM", direction="on", linebreak="al", unicodeslot=0x4DCF, }, [0x4DD0]={ category="so", description="HEXAGRAM FOR FOLLOWING", direction="on", linebreak="al", unicodeslot=0x4DD0, }, [0x4DD1]={ category="so", description="HEXAGRAM FOR WORK ON THE DECAYED", direction="on", linebreak="al", unicodeslot=0x4DD1, }, [0x4DD2]={ category="so", description="HEXAGRAM FOR APPROACH", direction="on", linebreak="al", unicodeslot=0x4DD2, }, [0x4DD3]={ category="so", description="HEXAGRAM FOR CONTEMPLATION", direction="on", linebreak="al", unicodeslot=0x4DD3, }, [0x4DD4]={ category="so", description="HEXAGRAM FOR BITING THROUGH", direction="on", linebreak="al", unicodeslot=0x4DD4, }, [0x4DD5]={ category="so", description="HEXAGRAM FOR GRACE", direction="on", linebreak="al", unicodeslot=0x4DD5, }, [0x4DD6]={ category="so", description="HEXAGRAM FOR SPLITTING APART", direction="on", linebreak="al", unicodeslot=0x4DD6, }, [0x4DD7]={ category="so", description="HEXAGRAM FOR RETURN", direction="on", linebreak="al", unicodeslot=0x4DD7, }, [0x4DD8]={ category="so", description="HEXAGRAM FOR INNOCENCE", direction="on", linebreak="al", unicodeslot=0x4DD8, }, [0x4DD9]={ category="so", description="HEXAGRAM FOR GREAT TAMING", direction="on", linebreak="al", unicodeslot=0x4DD9, }, [0x4DDA]={ category="so", description="HEXAGRAM FOR MOUTH CORNERS", direction="on", linebreak="al", unicodeslot=0x4DDA, }, [0x4DDB]={ category="so", description="HEXAGRAM FOR GREAT PREPONDERANCE", direction="on", linebreak="al", unicodeslot=0x4DDB, }, [0x4DDC]={ category="so", description="HEXAGRAM FOR THE ABYSMAL WATER", direction="on", linebreak="al", unicodeslot=0x4DDC, }, [0x4DDD]={ category="so", description="HEXAGRAM FOR THE CLINGING FIRE", direction="on", linebreak="al", unicodeslot=0x4DDD, }, [0x4DDE]={ category="so", description="HEXAGRAM FOR INFLUENCE", direction="on", linebreak="al", unicodeslot=0x4DDE, }, [0x4DDF]={ category="so", description="HEXAGRAM FOR DURATION", direction="on", linebreak="al", unicodeslot=0x4DDF, }, [0x4DE0]={ category="so", description="HEXAGRAM FOR RETREAT", direction="on", linebreak="al", unicodeslot=0x4DE0, }, [0x4DE1]={ category="so", description="HEXAGRAM FOR GREAT POWER", direction="on", linebreak="al", unicodeslot=0x4DE1, }, [0x4DE2]={ category="so", description="HEXAGRAM FOR PROGRESS", direction="on", linebreak="al", unicodeslot=0x4DE2, }, [0x4DE3]={ category="so", description="HEXAGRAM FOR DARKENING OF THE LIGHT", direction="on", linebreak="al", unicodeslot=0x4DE3, }, [0x4DE4]={ category="so", description="HEXAGRAM FOR THE FAMILY", direction="on", linebreak="al", unicodeslot=0x4DE4, }, [0x4DE5]={ category="so", description="HEXAGRAM FOR OPPOSITION", direction="on", linebreak="al", unicodeslot=0x4DE5, }, [0x4DE6]={ category="so", description="HEXAGRAM FOR OBSTRUCTION", direction="on", linebreak="al", unicodeslot=0x4DE6, }, [0x4DE7]={ category="so", description="HEXAGRAM FOR DELIVERANCE", direction="on", linebreak="al", unicodeslot=0x4DE7, }, [0x4DE8]={ category="so", description="HEXAGRAM FOR DECREASE", direction="on", linebreak="al", unicodeslot=0x4DE8, }, [0x4DE9]={ category="so", description="HEXAGRAM FOR INCREASE", direction="on", linebreak="al", unicodeslot=0x4DE9, }, [0x4DEA]={ category="so", description="HEXAGRAM FOR BREAKTHROUGH", direction="on", linebreak="al", unicodeslot=0x4DEA, }, [0x4DEB]={ category="so", description="HEXAGRAM FOR COMING TO MEET", direction="on", linebreak="al", unicodeslot=0x4DEB, }, [0x4DEC]={ category="so", description="HEXAGRAM FOR GATHERING TOGETHER", direction="on", linebreak="al", unicodeslot=0x4DEC, }, [0x4DED]={ category="so", description="HEXAGRAM FOR PUSHING UPWARD", direction="on", linebreak="al", unicodeslot=0x4DED, }, [0x4DEE]={ category="so", description="HEXAGRAM FOR OPPRESSION", direction="on", linebreak="al", unicodeslot=0x4DEE, }, [0x4DEF]={ category="so", description="HEXAGRAM FOR THE WELL", direction="on", linebreak="al", unicodeslot=0x4DEF, }, [0x4DF0]={ category="so", description="HEXAGRAM FOR REVOLUTION", direction="on", linebreak="al", unicodeslot=0x4DF0, }, [0x4DF1]={ category="so", description="HEXAGRAM FOR THE CAULDRON", direction="on", linebreak="al", unicodeslot=0x4DF1, }, [0x4DF2]={ category="so", description="HEXAGRAM FOR THE AROUSING THUNDER", direction="on", linebreak="al", unicodeslot=0x4DF2, }, [0x4DF3]={ category="so", description="HEXAGRAM FOR THE KEEPING STILL MOUNTAIN", direction="on", linebreak="al", unicodeslot=0x4DF3, }, [0x4DF4]={ category="so", description="HEXAGRAM FOR DEVELOPMENT", direction="on", linebreak="al", unicodeslot=0x4DF4, }, [0x4DF5]={ category="so", description="HEXAGRAM FOR THE MARRYING MAIDEN", direction="on", linebreak="al", unicodeslot=0x4DF5, }, [0x4DF6]={ category="so", description="HEXAGRAM FOR ABUNDANCE", direction="on", linebreak="al", unicodeslot=0x4DF6, }, [0x4DF7]={ category="so", description="HEXAGRAM FOR THE WANDERER", direction="on", linebreak="al", unicodeslot=0x4DF7, }, [0x4DF8]={ category="so", description="HEXAGRAM FOR THE GENTLE WIND", direction="on", linebreak="al", unicodeslot=0x4DF8, }, [0x4DF9]={ category="so", description="HEXAGRAM FOR THE JOYOUS LAKE", direction="on", linebreak="al", unicodeslot=0x4DF9, }, [0x4DFA]={ category="so", description="HEXAGRAM FOR DISPERSION", direction="on", linebreak="al", unicodeslot=0x4DFA, }, [0x4DFB]={ category="so", description="HEXAGRAM FOR LIMITATION", direction="on", linebreak="al", unicodeslot=0x4DFB, }, [0x4DFC]={ category="so", description="HEXAGRAM FOR INNER TRUTH", direction="on", linebreak="al", unicodeslot=0x4DFC, }, [0x4DFD]={ category="so", description="HEXAGRAM FOR SMALL PREPONDERANCE", direction="on", linebreak="al", unicodeslot=0x4DFD, }, [0x4DFE]={ category="so", description="HEXAGRAM FOR AFTER COMPLETION", direction="on", linebreak="al", unicodeslot=0x4DFE, }, [0x4DFF]={ category="so", description="HEXAGRAM FOR BEFORE COMPLETION", direction="on", linebreak="al", unicodeslot=0x4DFF, }, [0xA000]={ category="lo", cjkwd="w", description="YI SYLLABLE IT", direction="l", linebreak="id", unicodeslot=0xA000, }, [0xA001]={ category="lo", cjkwd="w", description="YI SYLLABLE IX", direction="l", linebreak="id", unicodeslot=0xA001, }, [0xA002]={ category="lo", cjkwd="w", description="YI SYLLABLE I", direction="l", linebreak="id", unicodeslot=0xA002, }, [0xA003]={ category="lo", cjkwd="w", description="YI SYLLABLE IP", direction="l", linebreak="id", unicodeslot=0xA003, }, [0xA004]={ category="lo", cjkwd="w", description="YI SYLLABLE IET", direction="l", linebreak="id", unicodeslot=0xA004, }, [0xA005]={ category="lo", cjkwd="w", description="YI SYLLABLE IEX", direction="l", linebreak="id", unicodeslot=0xA005, }, [0xA006]={ category="lo", cjkwd="w", description="YI SYLLABLE IE", direction="l", linebreak="id", unicodeslot=0xA006, }, [0xA007]={ category="lo", cjkwd="w", description="YI SYLLABLE IEP", direction="l", linebreak="id", unicodeslot=0xA007, }, [0xA008]={ category="lo", cjkwd="w", description="YI SYLLABLE AT", direction="l", linebreak="id", unicodeslot=0xA008, }, [0xA009]={ category="lo", cjkwd="w", description="YI SYLLABLE AX", direction="l", linebreak="id", unicodeslot=0xA009, }, [0xA00A]={ category="lo", cjkwd="w", description="YI SYLLABLE A", direction="l", linebreak="id", unicodeslot=0xA00A, }, [0xA00B]={ category="lo", cjkwd="w", description="YI SYLLABLE AP", direction="l", linebreak="id", unicodeslot=0xA00B, }, [0xA00C]={ category="lo", cjkwd="w", description="YI SYLLABLE UOX", direction="l", linebreak="id", unicodeslot=0xA00C, }, [0xA00D]={ category="lo", cjkwd="w", description="YI SYLLABLE UO", direction="l", linebreak="id", unicodeslot=0xA00D, }, [0xA00E]={ category="lo", cjkwd="w", description="YI SYLLABLE UOP", direction="l", linebreak="id", unicodeslot=0xA00E, }, [0xA00F]={ category="lo", cjkwd="w", description="YI SYLLABLE OT", direction="l", linebreak="id", unicodeslot=0xA00F, }, [0xA010]={ category="lo", cjkwd="w", description="YI SYLLABLE OX", direction="l", linebreak="id", unicodeslot=0xA010, }, [0xA011]={ category="lo", cjkwd="w", description="YI SYLLABLE O", direction="l", linebreak="id", unicodeslot=0xA011, }, [0xA012]={ category="lo", cjkwd="w", description="YI SYLLABLE OP", direction="l", linebreak="id", unicodeslot=0xA012, }, [0xA013]={ category="lo", cjkwd="w", description="YI SYLLABLE EX", direction="l", linebreak="id", unicodeslot=0xA013, }, [0xA014]={ category="lo", cjkwd="w", description="YI SYLLABLE E", direction="l", linebreak="id", unicodeslot=0xA014, }, [0xA015]={ category="lm", cjkwd="w", description="YI SYLLABLE WU", direction="l", linebreak="ns", unicodeslot=0xA015, }, [0xA016]={ category="lo", cjkwd="w", description="YI SYLLABLE BIT", direction="l", linebreak="id", unicodeslot=0xA016, }, [0xA017]={ category="lo", cjkwd="w", description="YI SYLLABLE BIX", direction="l", linebreak="id", unicodeslot=0xA017, }, [0xA018]={ category="lo", cjkwd="w", description="YI SYLLABLE BI", direction="l", linebreak="id", unicodeslot=0xA018, }, [0xA019]={ category="lo", cjkwd="w", description="YI SYLLABLE BIP", direction="l", linebreak="id", unicodeslot=0xA019, }, [0xA01A]={ category="lo", cjkwd="w", description="YI SYLLABLE BIET", direction="l", linebreak="id", unicodeslot=0xA01A, }, [0xA01B]={ category="lo", cjkwd="w", description="YI SYLLABLE BIEX", direction="l", linebreak="id", unicodeslot=0xA01B, }, [0xA01C]={ category="lo", cjkwd="w", description="YI SYLLABLE BIE", direction="l", linebreak="id", unicodeslot=0xA01C, }, [0xA01D]={ category="lo", cjkwd="w", description="YI SYLLABLE BIEP", direction="l", linebreak="id", unicodeslot=0xA01D, }, [0xA01E]={ category="lo", cjkwd="w", description="YI SYLLABLE BAT", direction="l", linebreak="id", unicodeslot=0xA01E, }, [0xA01F]={ category="lo", cjkwd="w", description="YI SYLLABLE BAX", direction="l", linebreak="id", unicodeslot=0xA01F, }, [0xA020]={ category="lo", cjkwd="w", description="YI SYLLABLE BA", direction="l", linebreak="id", unicodeslot=0xA020, }, [0xA021]={ category="lo", cjkwd="w", description="YI SYLLABLE BAP", direction="l", linebreak="id", unicodeslot=0xA021, }, [0xA022]={ category="lo", cjkwd="w", description="YI SYLLABLE BUOX", direction="l", linebreak="id", unicodeslot=0xA022, }, [0xA023]={ category="lo", cjkwd="w", description="YI SYLLABLE BUO", direction="l", linebreak="id", unicodeslot=0xA023, }, [0xA024]={ category="lo", cjkwd="w", description="YI SYLLABLE BUOP", direction="l", linebreak="id", unicodeslot=0xA024, }, [0xA025]={ category="lo", cjkwd="w", description="YI SYLLABLE BOT", direction="l", linebreak="id", unicodeslot=0xA025, }, [0xA026]={ category="lo", cjkwd="w", description="YI SYLLABLE BOX", direction="l", linebreak="id", unicodeslot=0xA026, }, [0xA027]={ category="lo", cjkwd="w", description="YI SYLLABLE BO", direction="l", linebreak="id", unicodeslot=0xA027, }, [0xA028]={ category="lo", cjkwd="w", description="YI SYLLABLE BOP", direction="l", linebreak="id", unicodeslot=0xA028, }, [0xA029]={ category="lo", cjkwd="w", description="YI SYLLABLE BEX", direction="l", linebreak="id", unicodeslot=0xA029, }, [0xA02A]={ category="lo", cjkwd="w", description="YI SYLLABLE BE", direction="l", linebreak="id", unicodeslot=0xA02A, }, [0xA02B]={ category="lo", cjkwd="w", description="YI SYLLABLE BEP", direction="l", linebreak="id", unicodeslot=0xA02B, }, [0xA02C]={ category="lo", cjkwd="w", description="YI SYLLABLE BUT", direction="l", linebreak="id", unicodeslot=0xA02C, }, [0xA02D]={ category="lo", cjkwd="w", description="YI SYLLABLE BUX", direction="l", linebreak="id", unicodeslot=0xA02D, }, [0xA02E]={ category="lo", cjkwd="w", description="YI SYLLABLE BU", direction="l", linebreak="id", unicodeslot=0xA02E, }, [0xA02F]={ category="lo", cjkwd="w", description="YI SYLLABLE BUP", direction="l", linebreak="id", unicodeslot=0xA02F, }, [0xA030]={ category="lo", cjkwd="w", description="YI SYLLABLE BURX", direction="l", linebreak="id", unicodeslot=0xA030, }, [0xA031]={ category="lo", cjkwd="w", description="YI SYLLABLE BUR", direction="l", linebreak="id", unicodeslot=0xA031, }, [0xA032]={ category="lo", cjkwd="w", description="YI SYLLABLE BYT", direction="l", linebreak="id", unicodeslot=0xA032, }, [0xA033]={ category="lo", cjkwd="w", description="YI SYLLABLE BYX", direction="l", linebreak="id", unicodeslot=0xA033, }, [0xA034]={ category="lo", cjkwd="w", description="YI SYLLABLE BY", direction="l", linebreak="id", unicodeslot=0xA034, }, [0xA035]={ category="lo", cjkwd="w", description="YI SYLLABLE BYP", direction="l", linebreak="id", unicodeslot=0xA035, }, [0xA036]={ category="lo", cjkwd="w", description="YI SYLLABLE BYRX", direction="l", linebreak="id", unicodeslot=0xA036, }, [0xA037]={ category="lo", cjkwd="w", description="YI SYLLABLE BYR", direction="l", linebreak="id", unicodeslot=0xA037, }, [0xA038]={ category="lo", cjkwd="w", description="YI SYLLABLE PIT", direction="l", linebreak="id", unicodeslot=0xA038, }, [0xA039]={ category="lo", cjkwd="w", description="YI SYLLABLE PIX", direction="l", linebreak="id", unicodeslot=0xA039, }, [0xA03A]={ category="lo", cjkwd="w", description="YI SYLLABLE PI", direction="l", linebreak="id", unicodeslot=0xA03A, }, [0xA03B]={ category="lo", cjkwd="w", description="YI SYLLABLE PIP", direction="l", linebreak="id", unicodeslot=0xA03B, }, [0xA03C]={ category="lo", cjkwd="w", description="YI SYLLABLE PIEX", direction="l", linebreak="id", unicodeslot=0xA03C, }, [0xA03D]={ category="lo", cjkwd="w", description="YI SYLLABLE PIE", direction="l", linebreak="id", unicodeslot=0xA03D, }, [0xA03E]={ category="lo", cjkwd="w", description="YI SYLLABLE PIEP", direction="l", linebreak="id", unicodeslot=0xA03E, }, [0xA03F]={ category="lo", cjkwd="w", description="YI SYLLABLE PAT", direction="l", linebreak="id", unicodeslot=0xA03F, }, [0xA040]={ category="lo", cjkwd="w", description="YI SYLLABLE PAX", direction="l", linebreak="id", unicodeslot=0xA040, }, [0xA041]={ category="lo", cjkwd="w", description="YI SYLLABLE PA", direction="l", linebreak="id", unicodeslot=0xA041, }, [0xA042]={ category="lo", cjkwd="w", description="YI SYLLABLE PAP", direction="l", linebreak="id", unicodeslot=0xA042, }, [0xA043]={ category="lo", cjkwd="w", description="YI SYLLABLE PUOX", direction="l", linebreak="id", unicodeslot=0xA043, }, [0xA044]={ category="lo", cjkwd="w", description="YI SYLLABLE PUO", direction="l", linebreak="id", unicodeslot=0xA044, }, [0xA045]={ category="lo", cjkwd="w", description="YI SYLLABLE PUOP", direction="l", linebreak="id", unicodeslot=0xA045, }, [0xA046]={ category="lo", cjkwd="w", description="YI SYLLABLE POT", direction="l", linebreak="id", unicodeslot=0xA046, }, [0xA047]={ category="lo", cjkwd="w", description="YI SYLLABLE POX", direction="l", linebreak="id", unicodeslot=0xA047, }, [0xA048]={ category="lo", cjkwd="w", description="YI SYLLABLE PO", direction="l", linebreak="id", unicodeslot=0xA048, }, [0xA049]={ category="lo", cjkwd="w", description="YI SYLLABLE POP", direction="l", linebreak="id", unicodeslot=0xA049, }, [0xA04A]={ category="lo", cjkwd="w", description="YI SYLLABLE PUT", direction="l", linebreak="id", unicodeslot=0xA04A, }, [0xA04B]={ category="lo", cjkwd="w", description="YI SYLLABLE PUX", direction="l", linebreak="id", unicodeslot=0xA04B, }, [0xA04C]={ category="lo", cjkwd="w", description="YI SYLLABLE PU", direction="l", linebreak="id", unicodeslot=0xA04C, }, [0xA04D]={ category="lo", cjkwd="w", description="YI SYLLABLE PUP", direction="l", linebreak="id", unicodeslot=0xA04D, }, [0xA04E]={ category="lo", cjkwd="w", description="YI SYLLABLE PURX", direction="l", linebreak="id", unicodeslot=0xA04E, }, [0xA04F]={ category="lo", cjkwd="w", description="YI SYLLABLE PUR", direction="l", linebreak="id", unicodeslot=0xA04F, }, [0xA050]={ category="lo", cjkwd="w", description="YI SYLLABLE PYT", direction="l", linebreak="id", unicodeslot=0xA050, }, [0xA051]={ category="lo", cjkwd="w", description="YI SYLLABLE PYX", direction="l", linebreak="id", unicodeslot=0xA051, }, [0xA052]={ category="lo", cjkwd="w", description="YI SYLLABLE PY", direction="l", linebreak="id", unicodeslot=0xA052, }, [0xA053]={ category="lo", cjkwd="w", description="YI SYLLABLE PYP", direction="l", linebreak="id", unicodeslot=0xA053, }, [0xA054]={ category="lo", cjkwd="w", description="YI SYLLABLE PYRX", direction="l", linebreak="id", unicodeslot=0xA054, }, [0xA055]={ category="lo", cjkwd="w", description="YI SYLLABLE PYR", direction="l", linebreak="id", unicodeslot=0xA055, }, [0xA056]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIT", direction="l", linebreak="id", unicodeslot=0xA056, }, [0xA057]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIX", direction="l", linebreak="id", unicodeslot=0xA057, }, [0xA058]={ category="lo", cjkwd="w", description="YI SYLLABLE BBI", direction="l", linebreak="id", unicodeslot=0xA058, }, [0xA059]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIP", direction="l", linebreak="id", unicodeslot=0xA059, }, [0xA05A]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIET", direction="l", linebreak="id", unicodeslot=0xA05A, }, [0xA05B]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIEX", direction="l", linebreak="id", unicodeslot=0xA05B, }, [0xA05C]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIE", direction="l", linebreak="id", unicodeslot=0xA05C, }, [0xA05D]={ category="lo", cjkwd="w", description="YI SYLLABLE BBIEP", direction="l", linebreak="id", unicodeslot=0xA05D, }, [0xA05E]={ category="lo", cjkwd="w", description="YI SYLLABLE BBAT", direction="l", linebreak="id", unicodeslot=0xA05E, }, [0xA05F]={ category="lo", cjkwd="w", description="YI SYLLABLE BBAX", direction="l", linebreak="id", unicodeslot=0xA05F, }, [0xA060]={ category="lo", cjkwd="w", description="YI SYLLABLE BBA", direction="l", linebreak="id", unicodeslot=0xA060, }, [0xA061]={ category="lo", cjkwd="w", description="YI SYLLABLE BBAP", direction="l", linebreak="id", unicodeslot=0xA061, }, [0xA062]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUOX", direction="l", linebreak="id", unicodeslot=0xA062, }, [0xA063]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUO", direction="l", linebreak="id", unicodeslot=0xA063, }, [0xA064]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUOP", direction="l", linebreak="id", unicodeslot=0xA064, }, [0xA065]={ category="lo", cjkwd="w", description="YI SYLLABLE BBOT", direction="l", linebreak="id", unicodeslot=0xA065, }, [0xA066]={ category="lo", cjkwd="w", description="YI SYLLABLE BBOX", direction="l", linebreak="id", unicodeslot=0xA066, }, [0xA067]={ category="lo", cjkwd="w", description="YI SYLLABLE BBO", direction="l", linebreak="id", unicodeslot=0xA067, }, [0xA068]={ category="lo", cjkwd="w", description="YI SYLLABLE BBOP", direction="l", linebreak="id", unicodeslot=0xA068, }, [0xA069]={ category="lo", cjkwd="w", description="YI SYLLABLE BBEX", direction="l", linebreak="id", unicodeslot=0xA069, }, [0xA06A]={ category="lo", cjkwd="w", description="YI SYLLABLE BBE", direction="l", linebreak="id", unicodeslot=0xA06A, }, [0xA06B]={ category="lo", cjkwd="w", description="YI SYLLABLE BBEP", direction="l", linebreak="id", unicodeslot=0xA06B, }, [0xA06C]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUT", direction="l", linebreak="id", unicodeslot=0xA06C, }, [0xA06D]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUX", direction="l", linebreak="id", unicodeslot=0xA06D, }, [0xA06E]={ category="lo", cjkwd="w", description="YI SYLLABLE BBU", direction="l", linebreak="id", unicodeslot=0xA06E, }, [0xA06F]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUP", direction="l", linebreak="id", unicodeslot=0xA06F, }, [0xA070]={ category="lo", cjkwd="w", description="YI SYLLABLE BBURX", direction="l", linebreak="id", unicodeslot=0xA070, }, [0xA071]={ category="lo", cjkwd="w", description="YI SYLLABLE BBUR", direction="l", linebreak="id", unicodeslot=0xA071, }, [0xA072]={ category="lo", cjkwd="w", description="YI SYLLABLE BBYT", direction="l", linebreak="id", unicodeslot=0xA072, }, [0xA073]={ category="lo", cjkwd="w", description="YI SYLLABLE BBYX", direction="l", linebreak="id", unicodeslot=0xA073, }, [0xA074]={ category="lo", cjkwd="w", description="YI SYLLABLE BBY", direction="l", linebreak="id", unicodeslot=0xA074, }, [0xA075]={ category="lo", cjkwd="w", description="YI SYLLABLE BBYP", direction="l", linebreak="id", unicodeslot=0xA075, }, [0xA076]={ category="lo", cjkwd="w", description="YI SYLLABLE NBIT", direction="l", linebreak="id", unicodeslot=0xA076, }, [0xA077]={ category="lo", cjkwd="w", description="YI SYLLABLE NBIX", direction="l", linebreak="id", unicodeslot=0xA077, }, [0xA078]={ category="lo", cjkwd="w", description="YI SYLLABLE NBI", direction="l", linebreak="id", unicodeslot=0xA078, }, [0xA079]={ category="lo", cjkwd="w", description="YI SYLLABLE NBIP", direction="l", linebreak="id", unicodeslot=0xA079, }, [0xA07A]={ category="lo", cjkwd="w", description="YI SYLLABLE NBIEX", direction="l", linebreak="id", unicodeslot=0xA07A, }, [0xA07B]={ category="lo", cjkwd="w", description="YI SYLLABLE NBIE", direction="l", linebreak="id", unicodeslot=0xA07B, }, [0xA07C]={ category="lo", cjkwd="w", description="YI SYLLABLE NBIEP", direction="l", linebreak="id", unicodeslot=0xA07C, }, [0xA07D]={ category="lo", cjkwd="w", description="YI SYLLABLE NBAT", direction="l", linebreak="id", unicodeslot=0xA07D, }, [0xA07E]={ category="lo", cjkwd="w", description="YI SYLLABLE NBAX", direction="l", linebreak="id", unicodeslot=0xA07E, }, [0xA07F]={ category="lo", cjkwd="w", description="YI SYLLABLE NBA", direction="l", linebreak="id", unicodeslot=0xA07F, }, [0xA080]={ category="lo", cjkwd="w", description="YI SYLLABLE NBAP", direction="l", linebreak="id", unicodeslot=0xA080, }, [0xA081]={ category="lo", cjkwd="w", description="YI SYLLABLE NBOT", direction="l", linebreak="id", unicodeslot=0xA081, }, [0xA082]={ category="lo", cjkwd="w", description="YI SYLLABLE NBOX", direction="l", linebreak="id", unicodeslot=0xA082, }, [0xA083]={ category="lo", cjkwd="w", description="YI SYLLABLE NBO", direction="l", linebreak="id", unicodeslot=0xA083, }, [0xA084]={ category="lo", cjkwd="w", description="YI SYLLABLE NBOP", direction="l", linebreak="id", unicodeslot=0xA084, }, [0xA085]={ category="lo", cjkwd="w", description="YI SYLLABLE NBUT", direction="l", linebreak="id", unicodeslot=0xA085, }, [0xA086]={ category="lo", cjkwd="w", description="YI SYLLABLE NBUX", direction="l", linebreak="id", unicodeslot=0xA086, }, [0xA087]={ category="lo", cjkwd="w", description="YI SYLLABLE NBU", direction="l", linebreak="id", unicodeslot=0xA087, }, [0xA088]={ category="lo", cjkwd="w", description="YI SYLLABLE NBUP", direction="l", linebreak="id", unicodeslot=0xA088, }, [0xA089]={ category="lo", cjkwd="w", description="YI SYLLABLE NBURX", direction="l", linebreak="id", unicodeslot=0xA089, }, [0xA08A]={ category="lo", cjkwd="w", description="YI SYLLABLE NBUR", direction="l", linebreak="id", unicodeslot=0xA08A, }, [0xA08B]={ category="lo", cjkwd="w", description="YI SYLLABLE NBYT", direction="l", linebreak="id", unicodeslot=0xA08B, }, [0xA08C]={ category="lo", cjkwd="w", description="YI SYLLABLE NBYX", direction="l", linebreak="id", unicodeslot=0xA08C, }, [0xA08D]={ category="lo", cjkwd="w", description="YI SYLLABLE NBY", direction="l", linebreak="id", unicodeslot=0xA08D, }, [0xA08E]={ category="lo", cjkwd="w", description="YI SYLLABLE NBYP", direction="l", linebreak="id", unicodeslot=0xA08E, }, [0xA08F]={ category="lo", cjkwd="w", description="YI SYLLABLE NBYRX", direction="l", linebreak="id", unicodeslot=0xA08F, }, [0xA090]={ category="lo", cjkwd="w", description="YI SYLLABLE NBYR", direction="l", linebreak="id", unicodeslot=0xA090, }, [0xA091]={ category="lo", cjkwd="w", description="YI SYLLABLE HMIT", direction="l", linebreak="id", unicodeslot=0xA091, }, [0xA092]={ category="lo", cjkwd="w", description="YI SYLLABLE HMIX", direction="l", linebreak="id", unicodeslot=0xA092, }, [0xA093]={ category="lo", cjkwd="w", description="YI SYLLABLE HMI", direction="l", linebreak="id", unicodeslot=0xA093, }, [0xA094]={ category="lo", cjkwd="w", description="YI SYLLABLE HMIP", direction="l", linebreak="id", unicodeslot=0xA094, }, [0xA095]={ category="lo", cjkwd="w", description="YI SYLLABLE HMIEX", direction="l", linebreak="id", unicodeslot=0xA095, }, [0xA096]={ category="lo", cjkwd="w", description="YI SYLLABLE HMIE", direction="l", linebreak="id", unicodeslot=0xA096, }, [0xA097]={ category="lo", cjkwd="w", description="YI SYLLABLE HMIEP", direction="l", linebreak="id", unicodeslot=0xA097, }, [0xA098]={ category="lo", cjkwd="w", description="YI SYLLABLE HMAT", direction="l", linebreak="id", unicodeslot=0xA098, }, [0xA099]={ category="lo", cjkwd="w", description="YI SYLLABLE HMAX", direction="l", linebreak="id", unicodeslot=0xA099, }, [0xA09A]={ category="lo", cjkwd="w", description="YI SYLLABLE HMA", direction="l", linebreak="id", unicodeslot=0xA09A, }, [0xA09B]={ category="lo", cjkwd="w", description="YI SYLLABLE HMAP", direction="l", linebreak="id", unicodeslot=0xA09B, }, [0xA09C]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUOX", direction="l", linebreak="id", unicodeslot=0xA09C, }, [0xA09D]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUO", direction="l", linebreak="id", unicodeslot=0xA09D, }, [0xA09E]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUOP", direction="l", linebreak="id", unicodeslot=0xA09E, }, [0xA09F]={ category="lo", cjkwd="w", description="YI SYLLABLE HMOT", direction="l", linebreak="id", unicodeslot=0xA09F, }, [0xA0A0]={ category="lo", cjkwd="w", description="YI SYLLABLE HMOX", direction="l", linebreak="id", unicodeslot=0xA0A0, }, [0xA0A1]={ category="lo", cjkwd="w", description="YI SYLLABLE HMO", direction="l", linebreak="id", unicodeslot=0xA0A1, }, [0xA0A2]={ category="lo", cjkwd="w", description="YI SYLLABLE HMOP", direction="l", linebreak="id", unicodeslot=0xA0A2, }, [0xA0A3]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUT", direction="l", linebreak="id", unicodeslot=0xA0A3, }, [0xA0A4]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUX", direction="l", linebreak="id", unicodeslot=0xA0A4, }, [0xA0A5]={ category="lo", cjkwd="w", description="YI SYLLABLE HMU", direction="l", linebreak="id", unicodeslot=0xA0A5, }, [0xA0A6]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUP", direction="l", linebreak="id", unicodeslot=0xA0A6, }, [0xA0A7]={ category="lo", cjkwd="w", description="YI SYLLABLE HMURX", direction="l", linebreak="id", unicodeslot=0xA0A7, }, [0xA0A8]={ category="lo", cjkwd="w", description="YI SYLLABLE HMUR", direction="l", linebreak="id", unicodeslot=0xA0A8, }, [0xA0A9]={ category="lo", cjkwd="w", description="YI SYLLABLE HMYX", direction="l", linebreak="id", unicodeslot=0xA0A9, }, [0xA0AA]={ category="lo", cjkwd="w", description="YI SYLLABLE HMY", direction="l", linebreak="id", unicodeslot=0xA0AA, }, [0xA0AB]={ category="lo", cjkwd="w", description="YI SYLLABLE HMYP", direction="l", linebreak="id", unicodeslot=0xA0AB, }, [0xA0AC]={ category="lo", cjkwd="w", description="YI SYLLABLE HMYRX", direction="l", linebreak="id", unicodeslot=0xA0AC, }, [0xA0AD]={ category="lo", cjkwd="w", description="YI SYLLABLE HMYR", direction="l", linebreak="id", unicodeslot=0xA0AD, }, [0xA0AE]={ category="lo", cjkwd="w", description="YI SYLLABLE MIT", direction="l", linebreak="id", unicodeslot=0xA0AE, }, [0xA0AF]={ category="lo", cjkwd="w", description="YI SYLLABLE MIX", direction="l", linebreak="id", unicodeslot=0xA0AF, }, [0xA0B0]={ category="lo", cjkwd="w", description="YI SYLLABLE MI", direction="l", linebreak="id", unicodeslot=0xA0B0, }, [0xA0B1]={ category="lo", cjkwd="w", description="YI SYLLABLE MIP", direction="l", linebreak="id", unicodeslot=0xA0B1, }, [0xA0B2]={ category="lo", cjkwd="w", description="YI SYLLABLE MIEX", direction="l", linebreak="id", unicodeslot=0xA0B2, }, [0xA0B3]={ category="lo", cjkwd="w", description="YI SYLLABLE MIE", direction="l", linebreak="id", unicodeslot=0xA0B3, }, [0xA0B4]={ category="lo", cjkwd="w", description="YI SYLLABLE MIEP", direction="l", linebreak="id", unicodeslot=0xA0B4, }, [0xA0B5]={ category="lo", cjkwd="w", description="YI SYLLABLE MAT", direction="l", linebreak="id", unicodeslot=0xA0B5, }, [0xA0B6]={ category="lo", cjkwd="w", description="YI SYLLABLE MAX", direction="l", linebreak="id", unicodeslot=0xA0B6, }, [0xA0B7]={ category="lo", cjkwd="w", description="YI SYLLABLE MA", direction="l", linebreak="id", unicodeslot=0xA0B7, }, [0xA0B8]={ category="lo", cjkwd="w", description="YI SYLLABLE MAP", direction="l", linebreak="id", unicodeslot=0xA0B8, }, [0xA0B9]={ category="lo", cjkwd="w", description="YI SYLLABLE MUOT", direction="l", linebreak="id", unicodeslot=0xA0B9, }, [0xA0BA]={ category="lo", cjkwd="w", description="YI SYLLABLE MUOX", direction="l", linebreak="id", unicodeslot=0xA0BA, }, [0xA0BB]={ category="lo", cjkwd="w", description="YI SYLLABLE MUO", direction="l", linebreak="id", unicodeslot=0xA0BB, }, [0xA0BC]={ category="lo", cjkwd="w", description="YI SYLLABLE MUOP", direction="l", linebreak="id", unicodeslot=0xA0BC, }, [0xA0BD]={ category="lo", cjkwd="w", description="YI SYLLABLE MOT", direction="l", linebreak="id", unicodeslot=0xA0BD, }, [0xA0BE]={ category="lo", cjkwd="w", description="YI SYLLABLE MOX", direction="l", linebreak="id", unicodeslot=0xA0BE, }, [0xA0BF]={ category="lo", cjkwd="w", description="YI SYLLABLE MO", direction="l", linebreak="id", unicodeslot=0xA0BF, }, [0xA0C0]={ category="lo", cjkwd="w", description="YI SYLLABLE MOP", direction="l", linebreak="id", unicodeslot=0xA0C0, }, [0xA0C1]={ category="lo", cjkwd="w", description="YI SYLLABLE MEX", direction="l", linebreak="id", unicodeslot=0xA0C1, }, [0xA0C2]={ category="lo", cjkwd="w", description="YI SYLLABLE ME", direction="l", linebreak="id", unicodeslot=0xA0C2, }, [0xA0C3]={ category="lo", cjkwd="w", description="YI SYLLABLE MUT", direction="l", linebreak="id", unicodeslot=0xA0C3, }, [0xA0C4]={ category="lo", cjkwd="w", description="YI SYLLABLE MUX", direction="l", linebreak="id", unicodeslot=0xA0C4, }, [0xA0C5]={ category="lo", cjkwd="w", description="YI SYLLABLE MU", direction="l", linebreak="id", unicodeslot=0xA0C5, }, [0xA0C6]={ category="lo", cjkwd="w", description="YI SYLLABLE MUP", direction="l", linebreak="id", unicodeslot=0xA0C6, }, [0xA0C7]={ category="lo", cjkwd="w", description="YI SYLLABLE MURX", direction="l", linebreak="id", unicodeslot=0xA0C7, }, [0xA0C8]={ category="lo", cjkwd="w", description="YI SYLLABLE MUR", direction="l", linebreak="id", unicodeslot=0xA0C8, }, [0xA0C9]={ category="lo", cjkwd="w", description="YI SYLLABLE MYT", direction="l", linebreak="id", unicodeslot=0xA0C9, }, [0xA0CA]={ category="lo", cjkwd="w", description="YI SYLLABLE MYX", direction="l", linebreak="id", unicodeslot=0xA0CA, }, [0xA0CB]={ category="lo", cjkwd="w", description="YI SYLLABLE MY", direction="l", linebreak="id", unicodeslot=0xA0CB, }, [0xA0CC]={ category="lo", cjkwd="w", description="YI SYLLABLE MYP", direction="l", linebreak="id", unicodeslot=0xA0CC, }, [0xA0CD]={ category="lo", cjkwd="w", description="YI SYLLABLE FIT", direction="l", linebreak="id", unicodeslot=0xA0CD, }, [0xA0CE]={ category="lo", cjkwd="w", description="YI SYLLABLE FIX", direction="l", linebreak="id", unicodeslot=0xA0CE, }, [0xA0CF]={ category="lo", cjkwd="w", description="YI SYLLABLE FI", direction="l", linebreak="id", unicodeslot=0xA0CF, }, [0xA0D0]={ category="lo", cjkwd="w", description="YI SYLLABLE FIP", direction="l", linebreak="id", unicodeslot=0xA0D0, }, [0xA0D1]={ category="lo", cjkwd="w", description="YI SYLLABLE FAT", direction="l", linebreak="id", unicodeslot=0xA0D1, }, [0xA0D2]={ category="lo", cjkwd="w", description="YI SYLLABLE FAX", direction="l", linebreak="id", unicodeslot=0xA0D2, }, [0xA0D3]={ category="lo", cjkwd="w", description="YI SYLLABLE FA", direction="l", linebreak="id", unicodeslot=0xA0D3, }, [0xA0D4]={ category="lo", cjkwd="w", description="YI SYLLABLE FAP", direction="l", linebreak="id", unicodeslot=0xA0D4, }, [0xA0D5]={ category="lo", cjkwd="w", description="YI SYLLABLE FOX", direction="l", linebreak="id", unicodeslot=0xA0D5, }, [0xA0D6]={ category="lo", cjkwd="w", description="YI SYLLABLE FO", direction="l", linebreak="id", unicodeslot=0xA0D6, }, [0xA0D7]={ category="lo", cjkwd="w", description="YI SYLLABLE FOP", direction="l", linebreak="id", unicodeslot=0xA0D7, }, [0xA0D8]={ category="lo", cjkwd="w", description="YI SYLLABLE FUT", direction="l", linebreak="id", unicodeslot=0xA0D8, }, [0xA0D9]={ category="lo", cjkwd="w", description="YI SYLLABLE FUX", direction="l", linebreak="id", unicodeslot=0xA0D9, }, [0xA0DA]={ category="lo", cjkwd="w", description="YI SYLLABLE FU", direction="l", linebreak="id", unicodeslot=0xA0DA, }, [0xA0DB]={ category="lo", cjkwd="w", description="YI SYLLABLE FUP", direction="l", linebreak="id", unicodeslot=0xA0DB, }, [0xA0DC]={ category="lo", cjkwd="w", description="YI SYLLABLE FURX", direction="l", linebreak="id", unicodeslot=0xA0DC, }, [0xA0DD]={ category="lo", cjkwd="w", description="YI SYLLABLE FUR", direction="l", linebreak="id", unicodeslot=0xA0DD, }, [0xA0DE]={ category="lo", cjkwd="w", description="YI SYLLABLE FYT", direction="l", linebreak="id", unicodeslot=0xA0DE, }, [0xA0DF]={ category="lo", cjkwd="w", description="YI SYLLABLE FYX", direction="l", linebreak="id", unicodeslot=0xA0DF, }, [0xA0E0]={ category="lo", cjkwd="w", description="YI SYLLABLE FY", direction="l", linebreak="id", unicodeslot=0xA0E0, }, [0xA0E1]={ category="lo", cjkwd="w", description="YI SYLLABLE FYP", direction="l", linebreak="id", unicodeslot=0xA0E1, }, [0xA0E2]={ category="lo", cjkwd="w", description="YI SYLLABLE VIT", direction="l", linebreak="id", unicodeslot=0xA0E2, }, [0xA0E3]={ category="lo", cjkwd="w", description="YI SYLLABLE VIX", direction="l", linebreak="id", unicodeslot=0xA0E3, }, [0xA0E4]={ category="lo", cjkwd="w", description="YI SYLLABLE VI", direction="l", linebreak="id", unicodeslot=0xA0E4, }, [0xA0E5]={ category="lo", cjkwd="w", description="YI SYLLABLE VIP", direction="l", linebreak="id", unicodeslot=0xA0E5, }, [0xA0E6]={ category="lo", cjkwd="w", description="YI SYLLABLE VIET", direction="l", linebreak="id", unicodeslot=0xA0E6, }, [0xA0E7]={ category="lo", cjkwd="w", description="YI SYLLABLE VIEX", direction="l", linebreak="id", unicodeslot=0xA0E7, }, [0xA0E8]={ category="lo", cjkwd="w", description="YI SYLLABLE VIE", direction="l", linebreak="id", unicodeslot=0xA0E8, }, [0xA0E9]={ category="lo", cjkwd="w", description="YI SYLLABLE VIEP", direction="l", linebreak="id", unicodeslot=0xA0E9, }, [0xA0EA]={ category="lo", cjkwd="w", description="YI SYLLABLE VAT", direction="l", linebreak="id", unicodeslot=0xA0EA, }, [0xA0EB]={ category="lo", cjkwd="w", description="YI SYLLABLE VAX", direction="l", linebreak="id", unicodeslot=0xA0EB, }, [0xA0EC]={ category="lo", cjkwd="w", description="YI SYLLABLE VA", direction="l", linebreak="id", unicodeslot=0xA0EC, }, [0xA0ED]={ category="lo", cjkwd="w", description="YI SYLLABLE VAP", direction="l", linebreak="id", unicodeslot=0xA0ED, }, [0xA0EE]={ category="lo", cjkwd="w", description="YI SYLLABLE VOT", direction="l", linebreak="id", unicodeslot=0xA0EE, }, [0xA0EF]={ category="lo", cjkwd="w", description="YI SYLLABLE VOX", direction="l", linebreak="id", unicodeslot=0xA0EF, }, [0xA0F0]={ category="lo", cjkwd="w", description="YI SYLLABLE VO", direction="l", linebreak="id", unicodeslot=0xA0F0, }, [0xA0F1]={ category="lo", cjkwd="w", description="YI SYLLABLE VOP", direction="l", linebreak="id", unicodeslot=0xA0F1, }, [0xA0F2]={ category="lo", cjkwd="w", description="YI SYLLABLE VEX", direction="l", linebreak="id", unicodeslot=0xA0F2, }, [0xA0F3]={ category="lo", cjkwd="w", description="YI SYLLABLE VEP", direction="l", linebreak="id", unicodeslot=0xA0F3, }, [0xA0F4]={ category="lo", cjkwd="w", description="YI SYLLABLE VUT", direction="l", linebreak="id", unicodeslot=0xA0F4, }, [0xA0F5]={ category="lo", cjkwd="w", description="YI SYLLABLE VUX", direction="l", linebreak="id", unicodeslot=0xA0F5, }, [0xA0F6]={ category="lo", cjkwd="w", description="YI SYLLABLE VU", direction="l", linebreak="id", unicodeslot=0xA0F6, }, [0xA0F7]={ category="lo", cjkwd="w", description="YI SYLLABLE VUP", direction="l", linebreak="id", unicodeslot=0xA0F7, }, [0xA0F8]={ category="lo", cjkwd="w", description="YI SYLLABLE VURX", direction="l", linebreak="id", unicodeslot=0xA0F8, }, [0xA0F9]={ category="lo", cjkwd="w", description="YI SYLLABLE VUR", direction="l", linebreak="id", unicodeslot=0xA0F9, }, [0xA0FA]={ category="lo", cjkwd="w", description="YI SYLLABLE VYT", direction="l", linebreak="id", unicodeslot=0xA0FA, }, [0xA0FB]={ category="lo", cjkwd="w", description="YI SYLLABLE VYX", direction="l", linebreak="id", unicodeslot=0xA0FB, }, [0xA0FC]={ category="lo", cjkwd="w", description="YI SYLLABLE VY", direction="l", linebreak="id", unicodeslot=0xA0FC, }, [0xA0FD]={ category="lo", cjkwd="w", description="YI SYLLABLE VYP", direction="l", linebreak="id", unicodeslot=0xA0FD, }, [0xA0FE]={ category="lo", cjkwd="w", description="YI SYLLABLE VYRX", direction="l", linebreak="id", unicodeslot=0xA0FE, }, [0xA0FF]={ category="lo", cjkwd="w", description="YI SYLLABLE VYR", direction="l", linebreak="id", unicodeslot=0xA0FF, }, [0xA100]={ category="lo", cjkwd="w", description="YI SYLLABLE DIT", direction="l", linebreak="id", unicodeslot=0xA100, }, [0xA101]={ category="lo", cjkwd="w", description="YI SYLLABLE DIX", direction="l", linebreak="id", unicodeslot=0xA101, }, [0xA102]={ category="lo", cjkwd="w", description="YI SYLLABLE DI", direction="l", linebreak="id", unicodeslot=0xA102, }, [0xA103]={ category="lo", cjkwd="w", description="YI SYLLABLE DIP", direction="l", linebreak="id", unicodeslot=0xA103, }, [0xA104]={ category="lo", cjkwd="w", description="YI SYLLABLE DIEX", direction="l", linebreak="id", unicodeslot=0xA104, }, [0xA105]={ category="lo", cjkwd="w", description="YI SYLLABLE DIE", direction="l", linebreak="id", unicodeslot=0xA105, }, [0xA106]={ category="lo", cjkwd="w", description="YI SYLLABLE DIEP", direction="l", linebreak="id", unicodeslot=0xA106, }, [0xA107]={ category="lo", cjkwd="w", description="YI SYLLABLE DAT", direction="l", linebreak="id", unicodeslot=0xA107, }, [0xA108]={ category="lo", cjkwd="w", description="YI SYLLABLE DAX", direction="l", linebreak="id", unicodeslot=0xA108, }, [0xA109]={ category="lo", cjkwd="w", description="YI SYLLABLE DA", direction="l", linebreak="id", unicodeslot=0xA109, }, [0xA10A]={ category="lo", cjkwd="w", description="YI SYLLABLE DAP", direction="l", linebreak="id", unicodeslot=0xA10A, }, [0xA10B]={ category="lo", cjkwd="w", description="YI SYLLABLE DUOX", direction="l", linebreak="id", unicodeslot=0xA10B, }, [0xA10C]={ category="lo", cjkwd="w", description="YI SYLLABLE DUO", direction="l", linebreak="id", unicodeslot=0xA10C, }, [0xA10D]={ category="lo", cjkwd="w", description="YI SYLLABLE DOT", direction="l", linebreak="id", unicodeslot=0xA10D, }, [0xA10E]={ category="lo", cjkwd="w", description="YI SYLLABLE DOX", direction="l", linebreak="id", unicodeslot=0xA10E, }, [0xA10F]={ category="lo", cjkwd="w", description="YI SYLLABLE DO", direction="l", linebreak="id", unicodeslot=0xA10F, }, [0xA110]={ category="lo", cjkwd="w", description="YI SYLLABLE DOP", direction="l", linebreak="id", unicodeslot=0xA110, }, [0xA111]={ category="lo", cjkwd="w", description="YI SYLLABLE DEX", direction="l", linebreak="id", unicodeslot=0xA111, }, [0xA112]={ category="lo", cjkwd="w", description="YI SYLLABLE DE", direction="l", linebreak="id", unicodeslot=0xA112, }, [0xA113]={ category="lo", cjkwd="w", description="YI SYLLABLE DEP", direction="l", linebreak="id", unicodeslot=0xA113, }, [0xA114]={ category="lo", cjkwd="w", description="YI SYLLABLE DUT", direction="l", linebreak="id", unicodeslot=0xA114, }, [0xA115]={ category="lo", cjkwd="w", description="YI SYLLABLE DUX", direction="l", linebreak="id", unicodeslot=0xA115, }, [0xA116]={ category="lo", cjkwd="w", description="YI SYLLABLE DU", direction="l", linebreak="id", unicodeslot=0xA116, }, [0xA117]={ category="lo", cjkwd="w", description="YI SYLLABLE DUP", direction="l", linebreak="id", unicodeslot=0xA117, }, [0xA118]={ category="lo", cjkwd="w", description="YI SYLLABLE DURX", direction="l", linebreak="id", unicodeslot=0xA118, }, [0xA119]={ category="lo", cjkwd="w", description="YI SYLLABLE DUR", direction="l", linebreak="id", unicodeslot=0xA119, }, [0xA11A]={ category="lo", cjkwd="w", description="YI SYLLABLE TIT", direction="l", linebreak="id", unicodeslot=0xA11A, }, [0xA11B]={ category="lo", cjkwd="w", description="YI SYLLABLE TIX", direction="l", linebreak="id", unicodeslot=0xA11B, }, [0xA11C]={ category="lo", cjkwd="w", description="YI SYLLABLE TI", direction="l", linebreak="id", unicodeslot=0xA11C, }, [0xA11D]={ category="lo", cjkwd="w", description="YI SYLLABLE TIP", direction="l", linebreak="id", unicodeslot=0xA11D, }, [0xA11E]={ category="lo", cjkwd="w", description="YI SYLLABLE TIEX", direction="l", linebreak="id", unicodeslot=0xA11E, }, [0xA11F]={ category="lo", cjkwd="w", description="YI SYLLABLE TIE", direction="l", linebreak="id", unicodeslot=0xA11F, }, [0xA120]={ category="lo", cjkwd="w", description="YI SYLLABLE TIEP", direction="l", linebreak="id", unicodeslot=0xA120, }, [0xA121]={ category="lo", cjkwd="w", description="YI SYLLABLE TAT", direction="l", linebreak="id", unicodeslot=0xA121, }, [0xA122]={ category="lo", cjkwd="w", description="YI SYLLABLE TAX", direction="l", linebreak="id", unicodeslot=0xA122, }, [0xA123]={ category="lo", cjkwd="w", description="YI SYLLABLE TA", direction="l", linebreak="id", unicodeslot=0xA123, }, [0xA124]={ category="lo", cjkwd="w", description="YI SYLLABLE TAP", direction="l", linebreak="id", unicodeslot=0xA124, }, [0xA125]={ category="lo", cjkwd="w", description="YI SYLLABLE TUOT", direction="l", linebreak="id", unicodeslot=0xA125, }, [0xA126]={ category="lo", cjkwd="w", description="YI SYLLABLE TUOX", direction="l", linebreak="id", unicodeslot=0xA126, }, [0xA127]={ category="lo", cjkwd="w", description="YI SYLLABLE TUO", direction="l", linebreak="id", unicodeslot=0xA127, }, [0xA128]={ category="lo", cjkwd="w", description="YI SYLLABLE TUOP", direction="l", linebreak="id", unicodeslot=0xA128, }, [0xA129]={ category="lo", cjkwd="w", description="YI SYLLABLE TOT", direction="l", linebreak="id", unicodeslot=0xA129, }, [0xA12A]={ category="lo", cjkwd="w", description="YI SYLLABLE TOX", direction="l", linebreak="id", unicodeslot=0xA12A, }, [0xA12B]={ category="lo", cjkwd="w", description="YI SYLLABLE TO", direction="l", linebreak="id", unicodeslot=0xA12B, }, [0xA12C]={ category="lo", cjkwd="w", description="YI SYLLABLE TOP", direction="l", linebreak="id", unicodeslot=0xA12C, }, [0xA12D]={ category="lo", cjkwd="w", description="YI SYLLABLE TEX", direction="l", linebreak="id", unicodeslot=0xA12D, }, [0xA12E]={ category="lo", cjkwd="w", description="YI SYLLABLE TE", direction="l", linebreak="id", unicodeslot=0xA12E, }, [0xA12F]={ category="lo", cjkwd="w", description="YI SYLLABLE TEP", direction="l", linebreak="id", unicodeslot=0xA12F, }, [0xA130]={ category="lo", cjkwd="w", description="YI SYLLABLE TUT", direction="l", linebreak="id", unicodeslot=0xA130, }, [0xA131]={ category="lo", cjkwd="w", description="YI SYLLABLE TUX", direction="l", linebreak="id", unicodeslot=0xA131, }, [0xA132]={ category="lo", cjkwd="w", description="YI SYLLABLE TU", direction="l", linebreak="id", unicodeslot=0xA132, }, [0xA133]={ category="lo", cjkwd="w", description="YI SYLLABLE TUP", direction="l", linebreak="id", unicodeslot=0xA133, }, [0xA134]={ category="lo", cjkwd="w", description="YI SYLLABLE TURX", direction="l", linebreak="id", unicodeslot=0xA134, }, [0xA135]={ category="lo", cjkwd="w", description="YI SYLLABLE TUR", direction="l", linebreak="id", unicodeslot=0xA135, }, [0xA136]={ category="lo", cjkwd="w", description="YI SYLLABLE DDIT", direction="l", linebreak="id", unicodeslot=0xA136, }, [0xA137]={ category="lo", cjkwd="w", description="YI SYLLABLE DDIX", direction="l", linebreak="id", unicodeslot=0xA137, }, [0xA138]={ category="lo", cjkwd="w", description="YI SYLLABLE DDI", direction="l", linebreak="id", unicodeslot=0xA138, }, [0xA139]={ category="lo", cjkwd="w", description="YI SYLLABLE DDIP", direction="l", linebreak="id", unicodeslot=0xA139, }, [0xA13A]={ category="lo", cjkwd="w", description="YI SYLLABLE DDIEX", direction="l", linebreak="id", unicodeslot=0xA13A, }, [0xA13B]={ category="lo", cjkwd="w", description="YI SYLLABLE DDIE", direction="l", linebreak="id", unicodeslot=0xA13B, }, [0xA13C]={ category="lo", cjkwd="w", description="YI SYLLABLE DDIEP", direction="l", linebreak="id", unicodeslot=0xA13C, }, [0xA13D]={ category="lo", cjkwd="w", description="YI SYLLABLE DDAT", direction="l", linebreak="id", unicodeslot=0xA13D, }, [0xA13E]={ category="lo", cjkwd="w", description="YI SYLLABLE DDAX", direction="l", linebreak="id", unicodeslot=0xA13E, }, [0xA13F]={ category="lo", cjkwd="w", description="YI SYLLABLE DDA", direction="l", linebreak="id", unicodeslot=0xA13F, }, [0xA140]={ category="lo", cjkwd="w", description="YI SYLLABLE DDAP", direction="l", linebreak="id", unicodeslot=0xA140, }, [0xA141]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUOX", direction="l", linebreak="id", unicodeslot=0xA141, }, [0xA142]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUO", direction="l", linebreak="id", unicodeslot=0xA142, }, [0xA143]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUOP", direction="l", linebreak="id", unicodeslot=0xA143, }, [0xA144]={ category="lo", cjkwd="w", description="YI SYLLABLE DDOT", direction="l", linebreak="id", unicodeslot=0xA144, }, [0xA145]={ category="lo", cjkwd="w", description="YI SYLLABLE DDOX", direction="l", linebreak="id", unicodeslot=0xA145, }, [0xA146]={ category="lo", cjkwd="w", description="YI SYLLABLE DDO", direction="l", linebreak="id", unicodeslot=0xA146, }, [0xA147]={ category="lo", cjkwd="w", description="YI SYLLABLE DDOP", direction="l", linebreak="id", unicodeslot=0xA147, }, [0xA148]={ category="lo", cjkwd="w", description="YI SYLLABLE DDEX", direction="l", linebreak="id", unicodeslot=0xA148, }, [0xA149]={ category="lo", cjkwd="w", description="YI SYLLABLE DDE", direction="l", linebreak="id", unicodeslot=0xA149, }, [0xA14A]={ category="lo", cjkwd="w", description="YI SYLLABLE DDEP", direction="l", linebreak="id", unicodeslot=0xA14A, }, [0xA14B]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUT", direction="l", linebreak="id", unicodeslot=0xA14B, }, [0xA14C]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUX", direction="l", linebreak="id", unicodeslot=0xA14C, }, [0xA14D]={ category="lo", cjkwd="w", description="YI SYLLABLE DDU", direction="l", linebreak="id", unicodeslot=0xA14D, }, [0xA14E]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUP", direction="l", linebreak="id", unicodeslot=0xA14E, }, [0xA14F]={ category="lo", cjkwd="w", description="YI SYLLABLE DDURX", direction="l", linebreak="id", unicodeslot=0xA14F, }, [0xA150]={ category="lo", cjkwd="w", description="YI SYLLABLE DDUR", direction="l", linebreak="id", unicodeslot=0xA150, }, [0xA151]={ category="lo", cjkwd="w", description="YI SYLLABLE NDIT", direction="l", linebreak="id", unicodeslot=0xA151, }, [0xA152]={ category="lo", cjkwd="w", description="YI SYLLABLE NDIX", direction="l", linebreak="id", unicodeslot=0xA152, }, [0xA153]={ category="lo", cjkwd="w", description="YI SYLLABLE NDI", direction="l", linebreak="id", unicodeslot=0xA153, }, [0xA154]={ category="lo", cjkwd="w", description="YI SYLLABLE NDIP", direction="l", linebreak="id", unicodeslot=0xA154, }, [0xA155]={ category="lo", cjkwd="w", description="YI SYLLABLE NDIEX", direction="l", linebreak="id", unicodeslot=0xA155, }, [0xA156]={ category="lo", cjkwd="w", description="YI SYLLABLE NDIE", direction="l", linebreak="id", unicodeslot=0xA156, }, [0xA157]={ category="lo", cjkwd="w", description="YI SYLLABLE NDAT", direction="l", linebreak="id", unicodeslot=0xA157, }, [0xA158]={ category="lo", cjkwd="w", description="YI SYLLABLE NDAX", direction="l", linebreak="id", unicodeslot=0xA158, }, [0xA159]={ category="lo", cjkwd="w", description="YI SYLLABLE NDA", direction="l", linebreak="id", unicodeslot=0xA159, }, [0xA15A]={ category="lo", cjkwd="w", description="YI SYLLABLE NDAP", direction="l", linebreak="id", unicodeslot=0xA15A, }, [0xA15B]={ category="lo", cjkwd="w", description="YI SYLLABLE NDOT", direction="l", linebreak="id", unicodeslot=0xA15B, }, [0xA15C]={ category="lo", cjkwd="w", description="YI SYLLABLE NDOX", direction="l", linebreak="id", unicodeslot=0xA15C, }, [0xA15D]={ category="lo", cjkwd="w", description="YI SYLLABLE NDO", direction="l", linebreak="id", unicodeslot=0xA15D, }, [0xA15E]={ category="lo", cjkwd="w", description="YI SYLLABLE NDOP", direction="l", linebreak="id", unicodeslot=0xA15E, }, [0xA15F]={ category="lo", cjkwd="w", description="YI SYLLABLE NDEX", direction="l", linebreak="id", unicodeslot=0xA15F, }, [0xA160]={ category="lo", cjkwd="w", description="YI SYLLABLE NDE", direction="l", linebreak="id", unicodeslot=0xA160, }, [0xA161]={ category="lo", cjkwd="w", description="YI SYLLABLE NDEP", direction="l", linebreak="id", unicodeslot=0xA161, }, [0xA162]={ category="lo", cjkwd="w", description="YI SYLLABLE NDUT", direction="l", linebreak="id", unicodeslot=0xA162, }, [0xA163]={ category="lo", cjkwd="w", description="YI SYLLABLE NDUX", direction="l", linebreak="id", unicodeslot=0xA163, }, [0xA164]={ category="lo", cjkwd="w", description="YI SYLLABLE NDU", direction="l", linebreak="id", unicodeslot=0xA164, }, [0xA165]={ category="lo", cjkwd="w", description="YI SYLLABLE NDUP", direction="l", linebreak="id", unicodeslot=0xA165, }, [0xA166]={ category="lo", cjkwd="w", description="YI SYLLABLE NDURX", direction="l", linebreak="id", unicodeslot=0xA166, }, [0xA167]={ category="lo", cjkwd="w", description="YI SYLLABLE NDUR", direction="l", linebreak="id", unicodeslot=0xA167, }, [0xA168]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIT", direction="l", linebreak="id", unicodeslot=0xA168, }, [0xA169]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIX", direction="l", linebreak="id", unicodeslot=0xA169, }, [0xA16A]={ category="lo", cjkwd="w", description="YI SYLLABLE HNI", direction="l", linebreak="id", unicodeslot=0xA16A, }, [0xA16B]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIP", direction="l", linebreak="id", unicodeslot=0xA16B, }, [0xA16C]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIET", direction="l", linebreak="id", unicodeslot=0xA16C, }, [0xA16D]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIEX", direction="l", linebreak="id", unicodeslot=0xA16D, }, [0xA16E]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIE", direction="l", linebreak="id", unicodeslot=0xA16E, }, [0xA16F]={ category="lo", cjkwd="w", description="YI SYLLABLE HNIEP", direction="l", linebreak="id", unicodeslot=0xA16F, }, [0xA170]={ category="lo", cjkwd="w", description="YI SYLLABLE HNAT", direction="l", linebreak="id", unicodeslot=0xA170, }, [0xA171]={ category="lo", cjkwd="w", description="YI SYLLABLE HNAX", direction="l", linebreak="id", unicodeslot=0xA171, }, [0xA172]={ category="lo", cjkwd="w", description="YI SYLLABLE HNA", direction="l", linebreak="id", unicodeslot=0xA172, }, [0xA173]={ category="lo", cjkwd="w", description="YI SYLLABLE HNAP", direction="l", linebreak="id", unicodeslot=0xA173, }, [0xA174]={ category="lo", cjkwd="w", description="YI SYLLABLE HNUOX", direction="l", linebreak="id", unicodeslot=0xA174, }, [0xA175]={ category="lo", cjkwd="w", description="YI SYLLABLE HNUO", direction="l", linebreak="id", unicodeslot=0xA175, }, [0xA176]={ category="lo", cjkwd="w", description="YI SYLLABLE HNOT", direction="l", linebreak="id", unicodeslot=0xA176, }, [0xA177]={ category="lo", cjkwd="w", description="YI SYLLABLE HNOX", direction="l", linebreak="id", unicodeslot=0xA177, }, [0xA178]={ category="lo", cjkwd="w", description="YI SYLLABLE HNOP", direction="l", linebreak="id", unicodeslot=0xA178, }, [0xA179]={ category="lo", cjkwd="w", description="YI SYLLABLE HNEX", direction="l", linebreak="id", unicodeslot=0xA179, }, [0xA17A]={ category="lo", cjkwd="w", description="YI SYLLABLE HNE", direction="l", linebreak="id", unicodeslot=0xA17A, }, [0xA17B]={ category="lo", cjkwd="w", description="YI SYLLABLE HNEP", direction="l", linebreak="id", unicodeslot=0xA17B, }, [0xA17C]={ category="lo", cjkwd="w", description="YI SYLLABLE HNUT", direction="l", linebreak="id", unicodeslot=0xA17C, }, [0xA17D]={ category="lo", cjkwd="w", description="YI SYLLABLE NIT", direction="l", linebreak="id", unicodeslot=0xA17D, }, [0xA17E]={ category="lo", cjkwd="w", description="YI SYLLABLE NIX", direction="l", linebreak="id", unicodeslot=0xA17E, }, [0xA17F]={ category="lo", cjkwd="w", description="YI SYLLABLE NI", direction="l", linebreak="id", unicodeslot=0xA17F, }, [0xA180]={ category="lo", cjkwd="w", description="YI SYLLABLE NIP", direction="l", linebreak="id", unicodeslot=0xA180, }, [0xA181]={ category="lo", cjkwd="w", description="YI SYLLABLE NIEX", direction="l", linebreak="id", unicodeslot=0xA181, }, [0xA182]={ category="lo", cjkwd="w", description="YI SYLLABLE NIE", direction="l", linebreak="id", unicodeslot=0xA182, }, [0xA183]={ category="lo", cjkwd="w", description="YI SYLLABLE NIEP", direction="l", linebreak="id", unicodeslot=0xA183, }, [0xA184]={ category="lo", cjkwd="w", description="YI SYLLABLE NAX", direction="l", linebreak="id", unicodeslot=0xA184, }, [0xA185]={ category="lo", cjkwd="w", description="YI SYLLABLE NA", direction="l", linebreak="id", unicodeslot=0xA185, }, [0xA186]={ category="lo", cjkwd="w", description="YI SYLLABLE NAP", direction="l", linebreak="id", unicodeslot=0xA186, }, [0xA187]={ category="lo", cjkwd="w", description="YI SYLLABLE NUOX", direction="l", linebreak="id", unicodeslot=0xA187, }, [0xA188]={ category="lo", cjkwd="w", description="YI SYLLABLE NUO", direction="l", linebreak="id", unicodeslot=0xA188, }, [0xA189]={ category="lo", cjkwd="w", description="YI SYLLABLE NUOP", direction="l", linebreak="id", unicodeslot=0xA189, }, [0xA18A]={ category="lo", cjkwd="w", description="YI SYLLABLE NOT", direction="l", linebreak="id", unicodeslot=0xA18A, }, [0xA18B]={ category="lo", cjkwd="w", description="YI SYLLABLE NOX", direction="l", linebreak="id", unicodeslot=0xA18B, }, [0xA18C]={ category="lo", cjkwd="w", description="YI SYLLABLE NO", direction="l", linebreak="id", unicodeslot=0xA18C, }, [0xA18D]={ category="lo", cjkwd="w", description="YI SYLLABLE NOP", direction="l", linebreak="id", unicodeslot=0xA18D, }, [0xA18E]={ category="lo", cjkwd="w", description="YI SYLLABLE NEX", direction="l", linebreak="id", unicodeslot=0xA18E, }, [0xA18F]={ category="lo", cjkwd="w", description="YI SYLLABLE NE", direction="l", linebreak="id", unicodeslot=0xA18F, }, [0xA190]={ category="lo", cjkwd="w", description="YI SYLLABLE NEP", direction="l", linebreak="id", unicodeslot=0xA190, }, [0xA191]={ category="lo", cjkwd="w", description="YI SYLLABLE NUT", direction="l", linebreak="id", unicodeslot=0xA191, }, [0xA192]={ category="lo", cjkwd="w", description="YI SYLLABLE NUX", direction="l", linebreak="id", unicodeslot=0xA192, }, [0xA193]={ category="lo", cjkwd="w", description="YI SYLLABLE NU", direction="l", linebreak="id", unicodeslot=0xA193, }, [0xA194]={ category="lo", cjkwd="w", description="YI SYLLABLE NUP", direction="l", linebreak="id", unicodeslot=0xA194, }, [0xA195]={ category="lo", cjkwd="w", description="YI SYLLABLE NURX", direction="l", linebreak="id", unicodeslot=0xA195, }, [0xA196]={ category="lo", cjkwd="w", description="YI SYLLABLE NUR", direction="l", linebreak="id", unicodeslot=0xA196, }, [0xA197]={ category="lo", cjkwd="w", description="YI SYLLABLE HLIT", direction="l", linebreak="id", unicodeslot=0xA197, }, [0xA198]={ category="lo", cjkwd="w", description="YI SYLLABLE HLIX", direction="l", linebreak="id", unicodeslot=0xA198, }, [0xA199]={ category="lo", cjkwd="w", description="YI SYLLABLE HLI", direction="l", linebreak="id", unicodeslot=0xA199, }, [0xA19A]={ category="lo", cjkwd="w", description="YI SYLLABLE HLIP", direction="l", linebreak="id", unicodeslot=0xA19A, }, [0xA19B]={ category="lo", cjkwd="w", description="YI SYLLABLE HLIEX", direction="l", linebreak="id", unicodeslot=0xA19B, }, [0xA19C]={ category="lo", cjkwd="w", description="YI SYLLABLE HLIE", direction="l", linebreak="id", unicodeslot=0xA19C, }, [0xA19D]={ category="lo", cjkwd="w", description="YI SYLLABLE HLIEP", direction="l", linebreak="id", unicodeslot=0xA19D, }, [0xA19E]={ category="lo", cjkwd="w", description="YI SYLLABLE HLAT", direction="l", linebreak="id", unicodeslot=0xA19E, }, [0xA19F]={ category="lo", cjkwd="w", description="YI SYLLABLE HLAX", direction="l", linebreak="id", unicodeslot=0xA19F, }, [0xA1A0]={ category="lo", cjkwd="w", description="YI SYLLABLE HLA", direction="l", linebreak="id", unicodeslot=0xA1A0, }, [0xA1A1]={ category="lo", cjkwd="w", description="YI SYLLABLE HLAP", direction="l", linebreak="id", unicodeslot=0xA1A1, }, [0xA1A2]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUOX", direction="l", linebreak="id", unicodeslot=0xA1A2, }, [0xA1A3]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUO", direction="l", linebreak="id", unicodeslot=0xA1A3, }, [0xA1A4]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUOP", direction="l", linebreak="id", unicodeslot=0xA1A4, }, [0xA1A5]={ category="lo", cjkwd="w", description="YI SYLLABLE HLOX", direction="l", linebreak="id", unicodeslot=0xA1A5, }, [0xA1A6]={ category="lo", cjkwd="w", description="YI SYLLABLE HLO", direction="l", linebreak="id", unicodeslot=0xA1A6, }, [0xA1A7]={ category="lo", cjkwd="w", description="YI SYLLABLE HLOP", direction="l", linebreak="id", unicodeslot=0xA1A7, }, [0xA1A8]={ category="lo", cjkwd="w", description="YI SYLLABLE HLEX", direction="l", linebreak="id", unicodeslot=0xA1A8, }, [0xA1A9]={ category="lo", cjkwd="w", description="YI SYLLABLE HLE", direction="l", linebreak="id", unicodeslot=0xA1A9, }, [0xA1AA]={ category="lo", cjkwd="w", description="YI SYLLABLE HLEP", direction="l", linebreak="id", unicodeslot=0xA1AA, }, [0xA1AB]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUT", direction="l", linebreak="id", unicodeslot=0xA1AB, }, [0xA1AC]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUX", direction="l", linebreak="id", unicodeslot=0xA1AC, }, [0xA1AD]={ category="lo", cjkwd="w", description="YI SYLLABLE HLU", direction="l", linebreak="id", unicodeslot=0xA1AD, }, [0xA1AE]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUP", direction="l", linebreak="id", unicodeslot=0xA1AE, }, [0xA1AF]={ category="lo", cjkwd="w", description="YI SYLLABLE HLURX", direction="l", linebreak="id", unicodeslot=0xA1AF, }, [0xA1B0]={ category="lo", cjkwd="w", description="YI SYLLABLE HLUR", direction="l", linebreak="id", unicodeslot=0xA1B0, }, [0xA1B1]={ category="lo", cjkwd="w", description="YI SYLLABLE HLYT", direction="l", linebreak="id", unicodeslot=0xA1B1, }, [0xA1B2]={ category="lo", cjkwd="w", description="YI SYLLABLE HLYX", direction="l", linebreak="id", unicodeslot=0xA1B2, }, [0xA1B3]={ category="lo", cjkwd="w", description="YI SYLLABLE HLY", direction="l", linebreak="id", unicodeslot=0xA1B3, }, [0xA1B4]={ category="lo", cjkwd="w", description="YI SYLLABLE HLYP", direction="l", linebreak="id", unicodeslot=0xA1B4, }, [0xA1B5]={ category="lo", cjkwd="w", description="YI SYLLABLE HLYRX", direction="l", linebreak="id", unicodeslot=0xA1B5, }, [0xA1B6]={ category="lo", cjkwd="w", description="YI SYLLABLE HLYR", direction="l", linebreak="id", unicodeslot=0xA1B6, }, [0xA1B7]={ category="lo", cjkwd="w", description="YI SYLLABLE LIT", direction="l", linebreak="id", unicodeslot=0xA1B7, }, [0xA1B8]={ category="lo", cjkwd="w", description="YI SYLLABLE LIX", direction="l", linebreak="id", unicodeslot=0xA1B8, }, [0xA1B9]={ category="lo", cjkwd="w", description="YI SYLLABLE LI", direction="l", linebreak="id", unicodeslot=0xA1B9, }, [0xA1BA]={ category="lo", cjkwd="w", description="YI SYLLABLE LIP", direction="l", linebreak="id", unicodeslot=0xA1BA, }, [0xA1BB]={ category="lo", cjkwd="w", description="YI SYLLABLE LIET", direction="l", linebreak="id", unicodeslot=0xA1BB, }, [0xA1BC]={ category="lo", cjkwd="w", description="YI SYLLABLE LIEX", direction="l", linebreak="id", unicodeslot=0xA1BC, }, [0xA1BD]={ category="lo", cjkwd="w", description="YI SYLLABLE LIE", direction="l", linebreak="id", unicodeslot=0xA1BD, }, [0xA1BE]={ category="lo", cjkwd="w", description="YI SYLLABLE LIEP", direction="l", linebreak="id", unicodeslot=0xA1BE, }, [0xA1BF]={ category="lo", cjkwd="w", description="YI SYLLABLE LAT", direction="l", linebreak="id", unicodeslot=0xA1BF, }, [0xA1C0]={ category="lo", cjkwd="w", description="YI SYLLABLE LAX", direction="l", linebreak="id", unicodeslot=0xA1C0, }, [0xA1C1]={ category="lo", cjkwd="w", description="YI SYLLABLE LA", direction="l", linebreak="id", unicodeslot=0xA1C1, }, [0xA1C2]={ category="lo", cjkwd="w", description="YI SYLLABLE LAP", direction="l", linebreak="id", unicodeslot=0xA1C2, }, [0xA1C3]={ category="lo", cjkwd="w", description="YI SYLLABLE LUOT", direction="l", linebreak="id", unicodeslot=0xA1C3, }, [0xA1C4]={ category="lo", cjkwd="w", description="YI SYLLABLE LUOX", direction="l", linebreak="id", unicodeslot=0xA1C4, }, [0xA1C5]={ category="lo", cjkwd="w", description="YI SYLLABLE LUO", direction="l", linebreak="id", unicodeslot=0xA1C5, }, [0xA1C6]={ category="lo", cjkwd="w", description="YI SYLLABLE LUOP", direction="l", linebreak="id", unicodeslot=0xA1C6, }, [0xA1C7]={ category="lo", cjkwd="w", description="YI SYLLABLE LOT", direction="l", linebreak="id", unicodeslot=0xA1C7, }, [0xA1C8]={ category="lo", cjkwd="w", description="YI SYLLABLE LOX", direction="l", linebreak="id", unicodeslot=0xA1C8, }, [0xA1C9]={ category="lo", cjkwd="w", description="YI SYLLABLE LO", direction="l", linebreak="id", unicodeslot=0xA1C9, }, [0xA1CA]={ category="lo", cjkwd="w", description="YI SYLLABLE LOP", direction="l", linebreak="id", unicodeslot=0xA1CA, }, [0xA1CB]={ category="lo", cjkwd="w", description="YI SYLLABLE LEX", direction="l", linebreak="id", unicodeslot=0xA1CB, }, [0xA1CC]={ category="lo", cjkwd="w", description="YI SYLLABLE LE", direction="l", linebreak="id", unicodeslot=0xA1CC, }, [0xA1CD]={ category="lo", cjkwd="w", description="YI SYLLABLE LEP", direction="l", linebreak="id", unicodeslot=0xA1CD, }, [0xA1CE]={ category="lo", cjkwd="w", description="YI SYLLABLE LUT", direction="l", linebreak="id", unicodeslot=0xA1CE, }, [0xA1CF]={ category="lo", cjkwd="w", description="YI SYLLABLE LUX", direction="l", linebreak="id", unicodeslot=0xA1CF, }, [0xA1D0]={ category="lo", cjkwd="w", description="YI SYLLABLE LU", direction="l", linebreak="id", unicodeslot=0xA1D0, }, [0xA1D1]={ category="lo", cjkwd="w", description="YI SYLLABLE LUP", direction="l", linebreak="id", unicodeslot=0xA1D1, }, [0xA1D2]={ category="lo", cjkwd="w", description="YI SYLLABLE LURX", direction="l", linebreak="id", unicodeslot=0xA1D2, }, [0xA1D3]={ category="lo", cjkwd="w", description="YI SYLLABLE LUR", direction="l", linebreak="id", unicodeslot=0xA1D3, }, [0xA1D4]={ category="lo", cjkwd="w", description="YI SYLLABLE LYT", direction="l", linebreak="id", unicodeslot=0xA1D4, }, [0xA1D5]={ category="lo", cjkwd="w", description="YI SYLLABLE LYX", direction="l", linebreak="id", unicodeslot=0xA1D5, }, [0xA1D6]={ category="lo", cjkwd="w", description="YI SYLLABLE LY", direction="l", linebreak="id", unicodeslot=0xA1D6, }, [0xA1D7]={ category="lo", cjkwd="w", description="YI SYLLABLE LYP", direction="l", linebreak="id", unicodeslot=0xA1D7, }, [0xA1D8]={ category="lo", cjkwd="w", description="YI SYLLABLE LYRX", direction="l", linebreak="id", unicodeslot=0xA1D8, }, [0xA1D9]={ category="lo", cjkwd="w", description="YI SYLLABLE LYR", direction="l", linebreak="id", unicodeslot=0xA1D9, }, [0xA1DA]={ category="lo", cjkwd="w", description="YI SYLLABLE GIT", direction="l", linebreak="id", unicodeslot=0xA1DA, }, [0xA1DB]={ category="lo", cjkwd="w", description="YI SYLLABLE GIX", direction="l", linebreak="id", unicodeslot=0xA1DB, }, [0xA1DC]={ category="lo", cjkwd="w", description="YI SYLLABLE GI", direction="l", linebreak="id", unicodeslot=0xA1DC, }, [0xA1DD]={ category="lo", cjkwd="w", description="YI SYLLABLE GIP", direction="l", linebreak="id", unicodeslot=0xA1DD, }, [0xA1DE]={ category="lo", cjkwd="w", description="YI SYLLABLE GIET", direction="l", linebreak="id", unicodeslot=0xA1DE, }, [0xA1DF]={ category="lo", cjkwd="w", description="YI SYLLABLE GIEX", direction="l", linebreak="id", unicodeslot=0xA1DF, }, [0xA1E0]={ category="lo", cjkwd="w", description="YI SYLLABLE GIE", direction="l", linebreak="id", unicodeslot=0xA1E0, }, [0xA1E1]={ category="lo", cjkwd="w", description="YI SYLLABLE GIEP", direction="l", linebreak="id", unicodeslot=0xA1E1, }, [0xA1E2]={ category="lo", cjkwd="w", description="YI SYLLABLE GAT", direction="l", linebreak="id", unicodeslot=0xA1E2, }, [0xA1E3]={ category="lo", cjkwd="w", description="YI SYLLABLE GAX", direction="l", linebreak="id", unicodeslot=0xA1E3, }, [0xA1E4]={ category="lo", cjkwd="w", description="YI SYLLABLE GA", direction="l", linebreak="id", unicodeslot=0xA1E4, }, [0xA1E5]={ category="lo", cjkwd="w", description="YI SYLLABLE GAP", direction="l", linebreak="id", unicodeslot=0xA1E5, }, [0xA1E6]={ category="lo", cjkwd="w", description="YI SYLLABLE GUOT", direction="l", linebreak="id", unicodeslot=0xA1E6, }, [0xA1E7]={ category="lo", cjkwd="w", description="YI SYLLABLE GUOX", direction="l", linebreak="id", unicodeslot=0xA1E7, }, [0xA1E8]={ category="lo", cjkwd="w", description="YI SYLLABLE GUO", direction="l", linebreak="id", unicodeslot=0xA1E8, }, [0xA1E9]={ category="lo", cjkwd="w", description="YI SYLLABLE GUOP", direction="l", linebreak="id", unicodeslot=0xA1E9, }, [0xA1EA]={ category="lo", cjkwd="w", description="YI SYLLABLE GOT", direction="l", linebreak="id", unicodeslot=0xA1EA, }, [0xA1EB]={ category="lo", cjkwd="w", description="YI SYLLABLE GOX", direction="l", linebreak="id", unicodeslot=0xA1EB, }, [0xA1EC]={ category="lo", cjkwd="w", description="YI SYLLABLE GO", direction="l", linebreak="id", unicodeslot=0xA1EC, }, [0xA1ED]={ category="lo", cjkwd="w", description="YI SYLLABLE GOP", direction="l", linebreak="id", unicodeslot=0xA1ED, }, [0xA1EE]={ category="lo", cjkwd="w", description="YI SYLLABLE GET", direction="l", linebreak="id", unicodeslot=0xA1EE, }, [0xA1EF]={ category="lo", cjkwd="w", description="YI SYLLABLE GEX", direction="l", linebreak="id", unicodeslot=0xA1EF, }, [0xA1F0]={ category="lo", cjkwd="w", description="YI SYLLABLE GE", direction="l", linebreak="id", unicodeslot=0xA1F0, }, [0xA1F1]={ category="lo", cjkwd="w", description="YI SYLLABLE GEP", direction="l", linebreak="id", unicodeslot=0xA1F1, }, [0xA1F2]={ category="lo", cjkwd="w", description="YI SYLLABLE GUT", direction="l", linebreak="id", unicodeslot=0xA1F2, }, [0xA1F3]={ category="lo", cjkwd="w", description="YI SYLLABLE GUX", direction="l", linebreak="id", unicodeslot=0xA1F3, }, [0xA1F4]={ category="lo", cjkwd="w", description="YI SYLLABLE GU", direction="l", linebreak="id", unicodeslot=0xA1F4, }, [0xA1F5]={ category="lo", cjkwd="w", description="YI SYLLABLE GUP", direction="l", linebreak="id", unicodeslot=0xA1F5, }, [0xA1F6]={ category="lo", cjkwd="w", description="YI SYLLABLE GURX", direction="l", linebreak="id", unicodeslot=0xA1F6, }, [0xA1F7]={ category="lo", cjkwd="w", description="YI SYLLABLE GUR", direction="l", linebreak="id", unicodeslot=0xA1F7, }, [0xA1F8]={ category="lo", cjkwd="w", description="YI SYLLABLE KIT", direction="l", linebreak="id", unicodeslot=0xA1F8, }, [0xA1F9]={ category="lo", cjkwd="w", description="YI SYLLABLE KIX", direction="l", linebreak="id", unicodeslot=0xA1F9, }, [0xA1FA]={ category="lo", cjkwd="w", description="YI SYLLABLE KI", direction="l", linebreak="id", unicodeslot=0xA1FA, }, [0xA1FB]={ category="lo", cjkwd="w", description="YI SYLLABLE KIP", direction="l", linebreak="id", unicodeslot=0xA1FB, }, [0xA1FC]={ category="lo", cjkwd="w", description="YI SYLLABLE KIEX", direction="l", linebreak="id", unicodeslot=0xA1FC, }, [0xA1FD]={ category="lo", cjkwd="w", description="YI SYLLABLE KIE", direction="l", linebreak="id", unicodeslot=0xA1FD, }, [0xA1FE]={ category="lo", cjkwd="w", description="YI SYLLABLE KIEP", direction="l", linebreak="id", unicodeslot=0xA1FE, }, [0xA1FF]={ category="lo", cjkwd="w", description="YI SYLLABLE KAT", direction="l", linebreak="id", unicodeslot=0xA1FF, }, [0xA200]={ category="lo", cjkwd="w", description="YI SYLLABLE KAX", direction="l", linebreak="id", unicodeslot=0xA200, }, [0xA201]={ category="lo", cjkwd="w", description="YI SYLLABLE KA", direction="l", linebreak="id", unicodeslot=0xA201, }, [0xA202]={ category="lo", cjkwd="w", description="YI SYLLABLE KAP", direction="l", linebreak="id", unicodeslot=0xA202, }, [0xA203]={ category="lo", cjkwd="w", description="YI SYLLABLE KUOX", direction="l", linebreak="id", unicodeslot=0xA203, }, [0xA204]={ category="lo", cjkwd="w", description="YI SYLLABLE KUO", direction="l", linebreak="id", unicodeslot=0xA204, }, [0xA205]={ category="lo", cjkwd="w", description="YI SYLLABLE KUOP", direction="l", linebreak="id", unicodeslot=0xA205, }, [0xA206]={ category="lo", cjkwd="w", description="YI SYLLABLE KOT", direction="l", linebreak="id", unicodeslot=0xA206, }, [0xA207]={ category="lo", cjkwd="w", description="YI SYLLABLE KOX", direction="l", linebreak="id", unicodeslot=0xA207, }, [0xA208]={ category="lo", cjkwd="w", description="YI SYLLABLE KO", direction="l", linebreak="id", unicodeslot=0xA208, }, [0xA209]={ category="lo", cjkwd="w", description="YI SYLLABLE KOP", direction="l", linebreak="id", unicodeslot=0xA209, }, [0xA20A]={ category="lo", cjkwd="w", description="YI SYLLABLE KET", direction="l", linebreak="id", unicodeslot=0xA20A, }, [0xA20B]={ category="lo", cjkwd="w", description="YI SYLLABLE KEX", direction="l", linebreak="id", unicodeslot=0xA20B, }, [0xA20C]={ category="lo", cjkwd="w", description="YI SYLLABLE KE", direction="l", linebreak="id", unicodeslot=0xA20C, }, [0xA20D]={ category="lo", cjkwd="w", description="YI SYLLABLE KEP", direction="l", linebreak="id", unicodeslot=0xA20D, }, [0xA20E]={ category="lo", cjkwd="w", description="YI SYLLABLE KUT", direction="l", linebreak="id", unicodeslot=0xA20E, }, [0xA20F]={ category="lo", cjkwd="w", description="YI SYLLABLE KUX", direction="l", linebreak="id", unicodeslot=0xA20F, }, [0xA210]={ category="lo", cjkwd="w", description="YI SYLLABLE KU", direction="l", linebreak="id", unicodeslot=0xA210, }, [0xA211]={ category="lo", cjkwd="w", description="YI SYLLABLE KUP", direction="l", linebreak="id", unicodeslot=0xA211, }, [0xA212]={ category="lo", cjkwd="w", description="YI SYLLABLE KURX", direction="l", linebreak="id", unicodeslot=0xA212, }, [0xA213]={ category="lo", cjkwd="w", description="YI SYLLABLE KUR", direction="l", linebreak="id", unicodeslot=0xA213, }, [0xA214]={ category="lo", cjkwd="w", description="YI SYLLABLE GGIT", direction="l", linebreak="id", unicodeslot=0xA214, }, [0xA215]={ category="lo", cjkwd="w", description="YI SYLLABLE GGIX", direction="l", linebreak="id", unicodeslot=0xA215, }, [0xA216]={ category="lo", cjkwd="w", description="YI SYLLABLE GGI", direction="l", linebreak="id", unicodeslot=0xA216, }, [0xA217]={ category="lo", cjkwd="w", description="YI SYLLABLE GGIEX", direction="l", linebreak="id", unicodeslot=0xA217, }, [0xA218]={ category="lo", cjkwd="w", description="YI SYLLABLE GGIE", direction="l", linebreak="id", unicodeslot=0xA218, }, [0xA219]={ category="lo", cjkwd="w", description="YI SYLLABLE GGIEP", direction="l", linebreak="id", unicodeslot=0xA219, }, [0xA21A]={ category="lo", cjkwd="w", description="YI SYLLABLE GGAT", direction="l", linebreak="id", unicodeslot=0xA21A, }, [0xA21B]={ category="lo", cjkwd="w", description="YI SYLLABLE GGAX", direction="l", linebreak="id", unicodeslot=0xA21B, }, [0xA21C]={ category="lo", cjkwd="w", description="YI SYLLABLE GGA", direction="l", linebreak="id", unicodeslot=0xA21C, }, [0xA21D]={ category="lo", cjkwd="w", description="YI SYLLABLE GGAP", direction="l", linebreak="id", unicodeslot=0xA21D, }, [0xA21E]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUOT", direction="l", linebreak="id", unicodeslot=0xA21E, }, [0xA21F]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUOX", direction="l", linebreak="id", unicodeslot=0xA21F, }, [0xA220]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUO", direction="l", linebreak="id", unicodeslot=0xA220, }, [0xA221]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUOP", direction="l", linebreak="id", unicodeslot=0xA221, }, [0xA222]={ category="lo", cjkwd="w", description="YI SYLLABLE GGOT", direction="l", linebreak="id", unicodeslot=0xA222, }, [0xA223]={ category="lo", cjkwd="w", description="YI SYLLABLE GGOX", direction="l", linebreak="id", unicodeslot=0xA223, }, [0xA224]={ category="lo", cjkwd="w", description="YI SYLLABLE GGO", direction="l", linebreak="id", unicodeslot=0xA224, }, [0xA225]={ category="lo", cjkwd="w", description="YI SYLLABLE GGOP", direction="l", linebreak="id", unicodeslot=0xA225, }, [0xA226]={ category="lo", cjkwd="w", description="YI SYLLABLE GGET", direction="l", linebreak="id", unicodeslot=0xA226, }, [0xA227]={ category="lo", cjkwd="w", description="YI SYLLABLE GGEX", direction="l", linebreak="id", unicodeslot=0xA227, }, [0xA228]={ category="lo", cjkwd="w", description="YI SYLLABLE GGE", direction="l", linebreak="id", unicodeslot=0xA228, }, [0xA229]={ category="lo", cjkwd="w", description="YI SYLLABLE GGEP", direction="l", linebreak="id", unicodeslot=0xA229, }, [0xA22A]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUT", direction="l", linebreak="id", unicodeslot=0xA22A, }, [0xA22B]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUX", direction="l", linebreak="id", unicodeslot=0xA22B, }, [0xA22C]={ category="lo", cjkwd="w", description="YI SYLLABLE GGU", direction="l", linebreak="id", unicodeslot=0xA22C, }, [0xA22D]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUP", direction="l", linebreak="id", unicodeslot=0xA22D, }, [0xA22E]={ category="lo", cjkwd="w", description="YI SYLLABLE GGURX", direction="l", linebreak="id", unicodeslot=0xA22E, }, [0xA22F]={ category="lo", cjkwd="w", description="YI SYLLABLE GGUR", direction="l", linebreak="id", unicodeslot=0xA22F, }, [0xA230]={ category="lo", cjkwd="w", description="YI SYLLABLE MGIEX", direction="l", linebreak="id", unicodeslot=0xA230, }, [0xA231]={ category="lo", cjkwd="w", description="YI SYLLABLE MGIE", direction="l", linebreak="id", unicodeslot=0xA231, }, [0xA232]={ category="lo", cjkwd="w", description="YI SYLLABLE MGAT", direction="l", linebreak="id", unicodeslot=0xA232, }, [0xA233]={ category="lo", cjkwd="w", description="YI SYLLABLE MGAX", direction="l", linebreak="id", unicodeslot=0xA233, }, [0xA234]={ category="lo", cjkwd="w", description="YI SYLLABLE MGA", direction="l", linebreak="id", unicodeslot=0xA234, }, [0xA235]={ category="lo", cjkwd="w", description="YI SYLLABLE MGAP", direction="l", linebreak="id", unicodeslot=0xA235, }, [0xA236]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUOX", direction="l", linebreak="id", unicodeslot=0xA236, }, [0xA237]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUO", direction="l", linebreak="id", unicodeslot=0xA237, }, [0xA238]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUOP", direction="l", linebreak="id", unicodeslot=0xA238, }, [0xA239]={ category="lo", cjkwd="w", description="YI SYLLABLE MGOT", direction="l", linebreak="id", unicodeslot=0xA239, }, [0xA23A]={ category="lo", cjkwd="w", description="YI SYLLABLE MGOX", direction="l", linebreak="id", unicodeslot=0xA23A, }, [0xA23B]={ category="lo", cjkwd="w", description="YI SYLLABLE MGO", direction="l", linebreak="id", unicodeslot=0xA23B, }, [0xA23C]={ category="lo", cjkwd="w", description="YI SYLLABLE MGOP", direction="l", linebreak="id", unicodeslot=0xA23C, }, [0xA23D]={ category="lo", cjkwd="w", description="YI SYLLABLE MGEX", direction="l", linebreak="id", unicodeslot=0xA23D, }, [0xA23E]={ category="lo", cjkwd="w", description="YI SYLLABLE MGE", direction="l", linebreak="id", unicodeslot=0xA23E, }, [0xA23F]={ category="lo", cjkwd="w", description="YI SYLLABLE MGEP", direction="l", linebreak="id", unicodeslot=0xA23F, }, [0xA240]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUT", direction="l", linebreak="id", unicodeslot=0xA240, }, [0xA241]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUX", direction="l", linebreak="id", unicodeslot=0xA241, }, [0xA242]={ category="lo", cjkwd="w", description="YI SYLLABLE MGU", direction="l", linebreak="id", unicodeslot=0xA242, }, [0xA243]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUP", direction="l", linebreak="id", unicodeslot=0xA243, }, [0xA244]={ category="lo", cjkwd="w", description="YI SYLLABLE MGURX", direction="l", linebreak="id", unicodeslot=0xA244, }, [0xA245]={ category="lo", cjkwd="w", description="YI SYLLABLE MGUR", direction="l", linebreak="id", unicodeslot=0xA245, }, [0xA246]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIT", direction="l", linebreak="id", unicodeslot=0xA246, }, [0xA247]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIX", direction="l", linebreak="id", unicodeslot=0xA247, }, [0xA248]={ category="lo", cjkwd="w", description="YI SYLLABLE HXI", direction="l", linebreak="id", unicodeslot=0xA248, }, [0xA249]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIP", direction="l", linebreak="id", unicodeslot=0xA249, }, [0xA24A]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIET", direction="l", linebreak="id", unicodeslot=0xA24A, }, [0xA24B]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIEX", direction="l", linebreak="id", unicodeslot=0xA24B, }, [0xA24C]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIE", direction="l", linebreak="id", unicodeslot=0xA24C, }, [0xA24D]={ category="lo", cjkwd="w", description="YI SYLLABLE HXIEP", direction="l", linebreak="id", unicodeslot=0xA24D, }, [0xA24E]={ category="lo", cjkwd="w", description="YI SYLLABLE HXAT", direction="l", linebreak="id", unicodeslot=0xA24E, }, [0xA24F]={ category="lo", cjkwd="w", description="YI SYLLABLE HXAX", direction="l", linebreak="id", unicodeslot=0xA24F, }, [0xA250]={ category="lo", cjkwd="w", description="YI SYLLABLE HXA", direction="l", linebreak="id", unicodeslot=0xA250, }, [0xA251]={ category="lo", cjkwd="w", description="YI SYLLABLE HXAP", direction="l", linebreak="id", unicodeslot=0xA251, }, [0xA252]={ category="lo", cjkwd="w", description="YI SYLLABLE HXUOT", direction="l", linebreak="id", unicodeslot=0xA252, }, [0xA253]={ category="lo", cjkwd="w", description="YI SYLLABLE HXUOX", direction="l", linebreak="id", unicodeslot=0xA253, }, [0xA254]={ category="lo", cjkwd="w", description="YI SYLLABLE HXUO", direction="l", linebreak="id", unicodeslot=0xA254, }, [0xA255]={ category="lo", cjkwd="w", description="YI SYLLABLE HXUOP", direction="l", linebreak="id", unicodeslot=0xA255, }, [0xA256]={ category="lo", cjkwd="w", description="YI SYLLABLE HXOT", direction="l", linebreak="id", unicodeslot=0xA256, }, [0xA257]={ category="lo", cjkwd="w", description="YI SYLLABLE HXOX", direction="l", linebreak="id", unicodeslot=0xA257, }, [0xA258]={ category="lo", cjkwd="w", description="YI SYLLABLE HXO", direction="l", linebreak="id", unicodeslot=0xA258, }, [0xA259]={ category="lo", cjkwd="w", description="YI SYLLABLE HXOP", direction="l", linebreak="id", unicodeslot=0xA259, }, [0xA25A]={ category="lo", cjkwd="w", description="YI SYLLABLE HXEX", direction="l", linebreak="id", unicodeslot=0xA25A, }, [0xA25B]={ category="lo", cjkwd="w", description="YI SYLLABLE HXE", direction="l", linebreak="id", unicodeslot=0xA25B, }, [0xA25C]={ category="lo", cjkwd="w", description="YI SYLLABLE HXEP", direction="l", linebreak="id", unicodeslot=0xA25C, }, [0xA25D]={ category="lo", cjkwd="w", description="YI SYLLABLE NGIEX", direction="l", linebreak="id", unicodeslot=0xA25D, }, [0xA25E]={ category="lo", cjkwd="w", description="YI SYLLABLE NGIE", direction="l", linebreak="id", unicodeslot=0xA25E, }, [0xA25F]={ category="lo", cjkwd="w", description="YI SYLLABLE NGIEP", direction="l", linebreak="id", unicodeslot=0xA25F, }, [0xA260]={ category="lo", cjkwd="w", description="YI SYLLABLE NGAT", direction="l", linebreak="id", unicodeslot=0xA260, }, [0xA261]={ category="lo", cjkwd="w", description="YI SYLLABLE NGAX", direction="l", linebreak="id", unicodeslot=0xA261, }, [0xA262]={ category="lo", cjkwd="w", description="YI SYLLABLE NGA", direction="l", linebreak="id", unicodeslot=0xA262, }, [0xA263]={ category="lo", cjkwd="w", description="YI SYLLABLE NGAP", direction="l", linebreak="id", unicodeslot=0xA263, }, [0xA264]={ category="lo", cjkwd="w", description="YI SYLLABLE NGUOT", direction="l", linebreak="id", unicodeslot=0xA264, }, [0xA265]={ category="lo", cjkwd="w", description="YI SYLLABLE NGUOX", direction="l", linebreak="id", unicodeslot=0xA265, }, [0xA266]={ category="lo", cjkwd="w", description="YI SYLLABLE NGUO", direction="l", linebreak="id", unicodeslot=0xA266, }, [0xA267]={ category="lo", cjkwd="w", description="YI SYLLABLE NGOT", direction="l", linebreak="id", unicodeslot=0xA267, }, [0xA268]={ category="lo", cjkwd="w", description="YI SYLLABLE NGOX", direction="l", linebreak="id", unicodeslot=0xA268, }, [0xA269]={ category="lo", cjkwd="w", description="YI SYLLABLE NGO", direction="l", linebreak="id", unicodeslot=0xA269, }, [0xA26A]={ category="lo", cjkwd="w", description="YI SYLLABLE NGOP", direction="l", linebreak="id", unicodeslot=0xA26A, }, [0xA26B]={ category="lo", cjkwd="w", description="YI SYLLABLE NGEX", direction="l", linebreak="id", unicodeslot=0xA26B, }, [0xA26C]={ category="lo", cjkwd="w", description="YI SYLLABLE NGE", direction="l", linebreak="id", unicodeslot=0xA26C, }, [0xA26D]={ category="lo", cjkwd="w", description="YI SYLLABLE NGEP", direction="l", linebreak="id", unicodeslot=0xA26D, }, [0xA26E]={ category="lo", cjkwd="w", description="YI SYLLABLE HIT", direction="l", linebreak="id", unicodeslot=0xA26E, }, [0xA26F]={ category="lo", cjkwd="w", description="YI SYLLABLE HIEX", direction="l", linebreak="id", unicodeslot=0xA26F, }, [0xA270]={ category="lo", cjkwd="w", description="YI SYLLABLE HIE", direction="l", linebreak="id", unicodeslot=0xA270, }, [0xA271]={ category="lo", cjkwd="w", description="YI SYLLABLE HAT", direction="l", linebreak="id", unicodeslot=0xA271, }, [0xA272]={ category="lo", cjkwd="w", description="YI SYLLABLE HAX", direction="l", linebreak="id", unicodeslot=0xA272, }, [0xA273]={ category="lo", cjkwd="w", description="YI SYLLABLE HA", direction="l", linebreak="id", unicodeslot=0xA273, }, [0xA274]={ category="lo", cjkwd="w", description="YI SYLLABLE HAP", direction="l", linebreak="id", unicodeslot=0xA274, }, [0xA275]={ category="lo", cjkwd="w", description="YI SYLLABLE HUOT", direction="l", linebreak="id", unicodeslot=0xA275, }, [0xA276]={ category="lo", cjkwd="w", description="YI SYLLABLE HUOX", direction="l", linebreak="id", unicodeslot=0xA276, }, [0xA277]={ category="lo", cjkwd="w", description="YI SYLLABLE HUO", direction="l", linebreak="id", unicodeslot=0xA277, }, [0xA278]={ category="lo", cjkwd="w", description="YI SYLLABLE HUOP", direction="l", linebreak="id", unicodeslot=0xA278, }, [0xA279]={ category="lo", cjkwd="w", description="YI SYLLABLE HOT", direction="l", linebreak="id", unicodeslot=0xA279, }, [0xA27A]={ category="lo", cjkwd="w", description="YI SYLLABLE HOX", direction="l", linebreak="id", unicodeslot=0xA27A, }, [0xA27B]={ category="lo", cjkwd="w", description="YI SYLLABLE HO", direction="l", linebreak="id", unicodeslot=0xA27B, }, [0xA27C]={ category="lo", cjkwd="w", description="YI SYLLABLE HOP", direction="l", linebreak="id", unicodeslot=0xA27C, }, [0xA27D]={ category="lo", cjkwd="w", description="YI SYLLABLE HEX", direction="l", linebreak="id", unicodeslot=0xA27D, }, [0xA27E]={ category="lo", cjkwd="w", description="YI SYLLABLE HE", direction="l", linebreak="id", unicodeslot=0xA27E, }, [0xA27F]={ category="lo", cjkwd="w", description="YI SYLLABLE HEP", direction="l", linebreak="id", unicodeslot=0xA27F, }, [0xA280]={ category="lo", cjkwd="w", description="YI SYLLABLE WAT", direction="l", linebreak="id", unicodeslot=0xA280, }, [0xA281]={ category="lo", cjkwd="w", description="YI SYLLABLE WAX", direction="l", linebreak="id", unicodeslot=0xA281, }, [0xA282]={ category="lo", cjkwd="w", description="YI SYLLABLE WA", direction="l", linebreak="id", unicodeslot=0xA282, }, [0xA283]={ category="lo", cjkwd="w", description="YI SYLLABLE WAP", direction="l", linebreak="id", unicodeslot=0xA283, }, [0xA284]={ category="lo", cjkwd="w", description="YI SYLLABLE WUOX", direction="l", linebreak="id", unicodeslot=0xA284, }, [0xA285]={ category="lo", cjkwd="w", description="YI SYLLABLE WUO", direction="l", linebreak="id", unicodeslot=0xA285, }, [0xA286]={ category="lo", cjkwd="w", description="YI SYLLABLE WUOP", direction="l", linebreak="id", unicodeslot=0xA286, }, [0xA287]={ category="lo", cjkwd="w", description="YI SYLLABLE WOX", direction="l", linebreak="id", unicodeslot=0xA287, }, [0xA288]={ category="lo", cjkwd="w", description="YI SYLLABLE WO", direction="l", linebreak="id", unicodeslot=0xA288, }, [0xA289]={ category="lo", cjkwd="w", description="YI SYLLABLE WOP", direction="l", linebreak="id", unicodeslot=0xA289, }, [0xA28A]={ category="lo", cjkwd="w", description="YI SYLLABLE WEX", direction="l", linebreak="id", unicodeslot=0xA28A, }, [0xA28B]={ category="lo", cjkwd="w", description="YI SYLLABLE WE", direction="l", linebreak="id", unicodeslot=0xA28B, }, [0xA28C]={ category="lo", cjkwd="w", description="YI SYLLABLE WEP", direction="l", linebreak="id", unicodeslot=0xA28C, }, [0xA28D]={ category="lo", cjkwd="w", description="YI SYLLABLE ZIT", direction="l", linebreak="id", unicodeslot=0xA28D, }, [0xA28E]={ category="lo", cjkwd="w", description="YI SYLLABLE ZIX", direction="l", linebreak="id", unicodeslot=0xA28E, }, [0xA28F]={ category="lo", cjkwd="w", description="YI SYLLABLE ZI", direction="l", linebreak="id", unicodeslot=0xA28F, }, [0xA290]={ category="lo", cjkwd="w", description="YI SYLLABLE ZIP", direction="l", linebreak="id", unicodeslot=0xA290, }, [0xA291]={ category="lo", cjkwd="w", description="YI SYLLABLE ZIEX", direction="l", linebreak="id", unicodeslot=0xA291, }, [0xA292]={ category="lo", cjkwd="w", description="YI SYLLABLE ZIE", direction="l", linebreak="id", unicodeslot=0xA292, }, [0xA293]={ category="lo", cjkwd="w", description="YI SYLLABLE ZIEP", direction="l", linebreak="id", unicodeslot=0xA293, }, [0xA294]={ category="lo", cjkwd="w", description="YI SYLLABLE ZAT", direction="l", linebreak="id", unicodeslot=0xA294, }, [0xA295]={ category="lo", cjkwd="w", description="YI SYLLABLE ZAX", direction="l", linebreak="id", unicodeslot=0xA295, }, [0xA296]={ category="lo", cjkwd="w", description="YI SYLLABLE ZA", direction="l", linebreak="id", unicodeslot=0xA296, }, [0xA297]={ category="lo", cjkwd="w", description="YI SYLLABLE ZAP", direction="l", linebreak="id", unicodeslot=0xA297, }, [0xA298]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUOX", direction="l", linebreak="id", unicodeslot=0xA298, }, [0xA299]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUO", direction="l", linebreak="id", unicodeslot=0xA299, }, [0xA29A]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUOP", direction="l", linebreak="id", unicodeslot=0xA29A, }, [0xA29B]={ category="lo", cjkwd="w", description="YI SYLLABLE ZOT", direction="l", linebreak="id", unicodeslot=0xA29B, }, [0xA29C]={ category="lo", cjkwd="w", description="YI SYLLABLE ZOX", direction="l", linebreak="id", unicodeslot=0xA29C, }, [0xA29D]={ category="lo", cjkwd="w", description="YI SYLLABLE ZO", direction="l", linebreak="id", unicodeslot=0xA29D, }, [0xA29E]={ category="lo", cjkwd="w", description="YI SYLLABLE ZOP", direction="l", linebreak="id", unicodeslot=0xA29E, }, [0xA29F]={ category="lo", cjkwd="w", description="YI SYLLABLE ZEX", direction="l", linebreak="id", unicodeslot=0xA29F, }, [0xA2A0]={ category="lo", cjkwd="w", description="YI SYLLABLE ZE", direction="l", linebreak="id", unicodeslot=0xA2A0, }, [0xA2A1]={ category="lo", cjkwd="w", description="YI SYLLABLE ZEP", direction="l", linebreak="id", unicodeslot=0xA2A1, }, [0xA2A2]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUT", direction="l", linebreak="id", unicodeslot=0xA2A2, }, [0xA2A3]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUX", direction="l", linebreak="id", unicodeslot=0xA2A3, }, [0xA2A4]={ category="lo", cjkwd="w", description="YI SYLLABLE ZU", direction="l", linebreak="id", unicodeslot=0xA2A4, }, [0xA2A5]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUP", direction="l", linebreak="id", unicodeslot=0xA2A5, }, [0xA2A6]={ category="lo", cjkwd="w", description="YI SYLLABLE ZURX", direction="l", linebreak="id", unicodeslot=0xA2A6, }, [0xA2A7]={ category="lo", cjkwd="w", description="YI SYLLABLE ZUR", direction="l", linebreak="id", unicodeslot=0xA2A7, }, [0xA2A8]={ category="lo", cjkwd="w", description="YI SYLLABLE ZYT", direction="l", linebreak="id", unicodeslot=0xA2A8, }, [0xA2A9]={ category="lo", cjkwd="w", description="YI SYLLABLE ZYX", direction="l", linebreak="id", unicodeslot=0xA2A9, }, [0xA2AA]={ category="lo", cjkwd="w", description="YI SYLLABLE ZY", direction="l", linebreak="id", unicodeslot=0xA2AA, }, [0xA2AB]={ category="lo", cjkwd="w", description="YI SYLLABLE ZYP", direction="l", linebreak="id", unicodeslot=0xA2AB, }, [0xA2AC]={ category="lo", cjkwd="w", description="YI SYLLABLE ZYRX", direction="l", linebreak="id", unicodeslot=0xA2AC, }, [0xA2AD]={ category="lo", cjkwd="w", description="YI SYLLABLE ZYR", direction="l", linebreak="id", unicodeslot=0xA2AD, }, [0xA2AE]={ category="lo", cjkwd="w", description="YI SYLLABLE CIT", direction="l", linebreak="id", unicodeslot=0xA2AE, }, [0xA2AF]={ category="lo", cjkwd="w", description="YI SYLLABLE CIX", direction="l", linebreak="id", unicodeslot=0xA2AF, }, [0xA2B0]={ category="lo", cjkwd="w", description="YI SYLLABLE CI", direction="l", linebreak="id", unicodeslot=0xA2B0, }, [0xA2B1]={ category="lo", cjkwd="w", description="YI SYLLABLE CIP", direction="l", linebreak="id", unicodeslot=0xA2B1, }, [0xA2B2]={ category="lo", cjkwd="w", description="YI SYLLABLE CIET", direction="l", linebreak="id", unicodeslot=0xA2B2, }, [0xA2B3]={ category="lo", cjkwd="w", description="YI SYLLABLE CIEX", direction="l", linebreak="id", unicodeslot=0xA2B3, }, [0xA2B4]={ category="lo", cjkwd="w", description="YI SYLLABLE CIE", direction="l", linebreak="id", unicodeslot=0xA2B4, }, [0xA2B5]={ category="lo", cjkwd="w", description="YI SYLLABLE CIEP", direction="l", linebreak="id", unicodeslot=0xA2B5, }, [0xA2B6]={ category="lo", cjkwd="w", description="YI SYLLABLE CAT", direction="l", linebreak="id", unicodeslot=0xA2B6, }, [0xA2B7]={ category="lo", cjkwd="w", description="YI SYLLABLE CAX", direction="l", linebreak="id", unicodeslot=0xA2B7, }, [0xA2B8]={ category="lo", cjkwd="w", description="YI SYLLABLE CA", direction="l", linebreak="id", unicodeslot=0xA2B8, }, [0xA2B9]={ category="lo", cjkwd="w", description="YI SYLLABLE CAP", direction="l", linebreak="id", unicodeslot=0xA2B9, }, [0xA2BA]={ category="lo", cjkwd="w", description="YI SYLLABLE CUOX", direction="l", linebreak="id", unicodeslot=0xA2BA, }, [0xA2BB]={ category="lo", cjkwd="w", description="YI SYLLABLE CUO", direction="l", linebreak="id", unicodeslot=0xA2BB, }, [0xA2BC]={ category="lo", cjkwd="w", description="YI SYLLABLE CUOP", direction="l", linebreak="id", unicodeslot=0xA2BC, }, [0xA2BD]={ category="lo", cjkwd="w", description="YI SYLLABLE COT", direction="l", linebreak="id", unicodeslot=0xA2BD, }, [0xA2BE]={ category="lo", cjkwd="w", description="YI SYLLABLE COX", direction="l", linebreak="id", unicodeslot=0xA2BE, }, [0xA2BF]={ category="lo", cjkwd="w", description="YI SYLLABLE CO", direction="l", linebreak="id", unicodeslot=0xA2BF, }, [0xA2C0]={ category="lo", cjkwd="w", description="YI SYLLABLE COP", direction="l", linebreak="id", unicodeslot=0xA2C0, }, [0xA2C1]={ category="lo", cjkwd="w", description="YI SYLLABLE CEX", direction="l", linebreak="id", unicodeslot=0xA2C1, }, [0xA2C2]={ category="lo", cjkwd="w", description="YI SYLLABLE CE", direction="l", linebreak="id", unicodeslot=0xA2C2, }, [0xA2C3]={ category="lo", cjkwd="w", description="YI SYLLABLE CEP", direction="l", linebreak="id", unicodeslot=0xA2C3, }, [0xA2C4]={ category="lo", cjkwd="w", description="YI SYLLABLE CUT", direction="l", linebreak="id", unicodeslot=0xA2C4, }, [0xA2C5]={ category="lo", cjkwd="w", description="YI SYLLABLE CUX", direction="l", linebreak="id", unicodeslot=0xA2C5, }, [0xA2C6]={ category="lo", cjkwd="w", description="YI SYLLABLE CU", direction="l", linebreak="id", unicodeslot=0xA2C6, }, [0xA2C7]={ category="lo", cjkwd="w", description="YI SYLLABLE CUP", direction="l", linebreak="id", unicodeslot=0xA2C7, }, [0xA2C8]={ category="lo", cjkwd="w", description="YI SYLLABLE CURX", direction="l", linebreak="id", unicodeslot=0xA2C8, }, [0xA2C9]={ category="lo", cjkwd="w", description="YI SYLLABLE CUR", direction="l", linebreak="id", unicodeslot=0xA2C9, }, [0xA2CA]={ category="lo", cjkwd="w", description="YI SYLLABLE CYT", direction="l", linebreak="id", unicodeslot=0xA2CA, }, [0xA2CB]={ category="lo", cjkwd="w", description="YI SYLLABLE CYX", direction="l", linebreak="id", unicodeslot=0xA2CB, }, [0xA2CC]={ category="lo", cjkwd="w", description="YI SYLLABLE CY", direction="l", linebreak="id", unicodeslot=0xA2CC, }, [0xA2CD]={ category="lo", cjkwd="w", description="YI SYLLABLE CYP", direction="l", linebreak="id", unicodeslot=0xA2CD, }, [0xA2CE]={ category="lo", cjkwd="w", description="YI SYLLABLE CYRX", direction="l", linebreak="id", unicodeslot=0xA2CE, }, [0xA2CF]={ category="lo", cjkwd="w", description="YI SYLLABLE CYR", direction="l", linebreak="id", unicodeslot=0xA2CF, }, [0xA2D0]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIT", direction="l", linebreak="id", unicodeslot=0xA2D0, }, [0xA2D1]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIX", direction="l", linebreak="id", unicodeslot=0xA2D1, }, [0xA2D2]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZI", direction="l", linebreak="id", unicodeslot=0xA2D2, }, [0xA2D3]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIP", direction="l", linebreak="id", unicodeslot=0xA2D3, }, [0xA2D4]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIET", direction="l", linebreak="id", unicodeslot=0xA2D4, }, [0xA2D5]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIEX", direction="l", linebreak="id", unicodeslot=0xA2D5, }, [0xA2D6]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIE", direction="l", linebreak="id", unicodeslot=0xA2D6, }, [0xA2D7]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZIEP", direction="l", linebreak="id", unicodeslot=0xA2D7, }, [0xA2D8]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZAT", direction="l", linebreak="id", unicodeslot=0xA2D8, }, [0xA2D9]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZAX", direction="l", linebreak="id", unicodeslot=0xA2D9, }, [0xA2DA]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZA", direction="l", linebreak="id", unicodeslot=0xA2DA, }, [0xA2DB]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZAP", direction="l", linebreak="id", unicodeslot=0xA2DB, }, [0xA2DC]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZOX", direction="l", linebreak="id", unicodeslot=0xA2DC, }, [0xA2DD]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZO", direction="l", linebreak="id", unicodeslot=0xA2DD, }, [0xA2DE]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZOP", direction="l", linebreak="id", unicodeslot=0xA2DE, }, [0xA2DF]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZEX", direction="l", linebreak="id", unicodeslot=0xA2DF, }, [0xA2E0]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZE", direction="l", linebreak="id", unicodeslot=0xA2E0, }, [0xA2E1]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZEP", direction="l", linebreak="id", unicodeslot=0xA2E1, }, [0xA2E2]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZUX", direction="l", linebreak="id", unicodeslot=0xA2E2, }, [0xA2E3]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZU", direction="l", linebreak="id", unicodeslot=0xA2E3, }, [0xA2E4]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZUP", direction="l", linebreak="id", unicodeslot=0xA2E4, }, [0xA2E5]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZURX", direction="l", linebreak="id", unicodeslot=0xA2E5, }, [0xA2E6]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZUR", direction="l", linebreak="id", unicodeslot=0xA2E6, }, [0xA2E7]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZYT", direction="l", linebreak="id", unicodeslot=0xA2E7, }, [0xA2E8]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZYX", direction="l", linebreak="id", unicodeslot=0xA2E8, }, [0xA2E9]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZY", direction="l", linebreak="id", unicodeslot=0xA2E9, }, [0xA2EA]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZYP", direction="l", linebreak="id", unicodeslot=0xA2EA, }, [0xA2EB]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZYRX", direction="l", linebreak="id", unicodeslot=0xA2EB, }, [0xA2EC]={ category="lo", cjkwd="w", description="YI SYLLABLE ZZYR", direction="l", linebreak="id", unicodeslot=0xA2EC, }, [0xA2ED]={ category="lo", cjkwd="w", description="YI SYLLABLE NZIT", direction="l", linebreak="id", unicodeslot=0xA2ED, }, [0xA2EE]={ category="lo", cjkwd="w", description="YI SYLLABLE NZIX", direction="l", linebreak="id", unicodeslot=0xA2EE, }, [0xA2EF]={ category="lo", cjkwd="w", description="YI SYLLABLE NZI", direction="l", linebreak="id", unicodeslot=0xA2EF, }, [0xA2F0]={ category="lo", cjkwd="w", description="YI SYLLABLE NZIP", direction="l", linebreak="id", unicodeslot=0xA2F0, }, [0xA2F1]={ category="lo", cjkwd="w", description="YI SYLLABLE NZIEX", direction="l", linebreak="id", unicodeslot=0xA2F1, }, [0xA2F2]={ category="lo", cjkwd="w", description="YI SYLLABLE NZIE", direction="l", linebreak="id", unicodeslot=0xA2F2, }, [0xA2F3]={ category="lo", cjkwd="w", description="YI SYLLABLE NZIEP", direction="l", linebreak="id", unicodeslot=0xA2F3, }, [0xA2F4]={ category="lo", cjkwd="w", description="YI SYLLABLE NZAT", direction="l", linebreak="id", unicodeslot=0xA2F4, }, [0xA2F5]={ category="lo", cjkwd="w", description="YI SYLLABLE NZAX", direction="l", linebreak="id", unicodeslot=0xA2F5, }, [0xA2F6]={ category="lo", cjkwd="w", description="YI SYLLABLE NZA", direction="l", linebreak="id", unicodeslot=0xA2F6, }, [0xA2F7]={ category="lo", cjkwd="w", description="YI SYLLABLE NZAP", direction="l", linebreak="id", unicodeslot=0xA2F7, }, [0xA2F8]={ category="lo", cjkwd="w", description="YI SYLLABLE NZUOX", direction="l", linebreak="id", unicodeslot=0xA2F8, }, [0xA2F9]={ category="lo", cjkwd="w", description="YI SYLLABLE NZUO", direction="l", linebreak="id", unicodeslot=0xA2F9, }, [0xA2FA]={ category="lo", cjkwd="w", description="YI SYLLABLE NZOX", direction="l", linebreak="id", unicodeslot=0xA2FA, }, [0xA2FB]={ category="lo", cjkwd="w", description="YI SYLLABLE NZOP", direction="l", linebreak="id", unicodeslot=0xA2FB, }, [0xA2FC]={ category="lo", cjkwd="w", description="YI SYLLABLE NZEX", direction="l", linebreak="id", unicodeslot=0xA2FC, }, [0xA2FD]={ category="lo", cjkwd="w", description="YI SYLLABLE NZE", direction="l", linebreak="id", unicodeslot=0xA2FD, }, [0xA2FE]={ category="lo", cjkwd="w", description="YI SYLLABLE NZUX", direction="l", linebreak="id", unicodeslot=0xA2FE, }, [0xA2FF]={ category="lo", cjkwd="w", description="YI SYLLABLE NZU", direction="l", linebreak="id", unicodeslot=0xA2FF, }, [0xA300]={ category="lo", cjkwd="w", description="YI SYLLABLE NZUP", direction="l", linebreak="id", unicodeslot=0xA300, }, [0xA301]={ category="lo", cjkwd="w", description="YI SYLLABLE NZURX", direction="l", linebreak="id", unicodeslot=0xA301, }, [0xA302]={ category="lo", cjkwd="w", description="YI SYLLABLE NZUR", direction="l", linebreak="id", unicodeslot=0xA302, }, [0xA303]={ category="lo", cjkwd="w", description="YI SYLLABLE NZYT", direction="l", linebreak="id", unicodeslot=0xA303, }, [0xA304]={ category="lo", cjkwd="w", description="YI SYLLABLE NZYX", direction="l", linebreak="id", unicodeslot=0xA304, }, [0xA305]={ category="lo", cjkwd="w", description="YI SYLLABLE NZY", direction="l", linebreak="id", unicodeslot=0xA305, }, [0xA306]={ category="lo", cjkwd="w", description="YI SYLLABLE NZYP", direction="l", linebreak="id", unicodeslot=0xA306, }, [0xA307]={ category="lo", cjkwd="w", description="YI SYLLABLE NZYRX", direction="l", linebreak="id", unicodeslot=0xA307, }, [0xA308]={ category="lo", cjkwd="w", description="YI SYLLABLE NZYR", direction="l", linebreak="id", unicodeslot=0xA308, }, [0xA309]={ category="lo", cjkwd="w", description="YI SYLLABLE SIT", direction="l", linebreak="id", unicodeslot=0xA309, }, [0xA30A]={ category="lo", cjkwd="w", description="YI SYLLABLE SIX", direction="l", linebreak="id", unicodeslot=0xA30A, }, [0xA30B]={ category="lo", cjkwd="w", description="YI SYLLABLE SI", direction="l", linebreak="id", unicodeslot=0xA30B, }, [0xA30C]={ category="lo", cjkwd="w", description="YI SYLLABLE SIP", direction="l", linebreak="id", unicodeslot=0xA30C, }, [0xA30D]={ category="lo", cjkwd="w", description="YI SYLLABLE SIEX", direction="l", linebreak="id", unicodeslot=0xA30D, }, [0xA30E]={ category="lo", cjkwd="w", description="YI SYLLABLE SIE", direction="l", linebreak="id", unicodeslot=0xA30E, }, [0xA30F]={ category="lo", cjkwd="w", description="YI SYLLABLE SIEP", direction="l", linebreak="id", unicodeslot=0xA30F, }, [0xA310]={ category="lo", cjkwd="w", description="YI SYLLABLE SAT", direction="l", linebreak="id", unicodeslot=0xA310, }, [0xA311]={ category="lo", cjkwd="w", description="YI SYLLABLE SAX", direction="l", linebreak="id", unicodeslot=0xA311, }, [0xA312]={ category="lo", cjkwd="w", description="YI SYLLABLE SA", direction="l", linebreak="id", unicodeslot=0xA312, }, [0xA313]={ category="lo", cjkwd="w", description="YI SYLLABLE SAP", direction="l", linebreak="id", unicodeslot=0xA313, }, [0xA314]={ category="lo", cjkwd="w", description="YI SYLLABLE SUOX", direction="l", linebreak="id", unicodeslot=0xA314, }, [0xA315]={ category="lo", cjkwd="w", description="YI SYLLABLE SUO", direction="l", linebreak="id", unicodeslot=0xA315, }, [0xA316]={ category="lo", cjkwd="w", description="YI SYLLABLE SUOP", direction="l", linebreak="id", unicodeslot=0xA316, }, [0xA317]={ category="lo", cjkwd="w", description="YI SYLLABLE SOT", direction="l", linebreak="id", unicodeslot=0xA317, }, [0xA318]={ category="lo", cjkwd="w", description="YI SYLLABLE SOX", direction="l", linebreak="id", unicodeslot=0xA318, }, [0xA319]={ category="lo", cjkwd="w", description="YI SYLLABLE SO", direction="l", linebreak="id", unicodeslot=0xA319, }, [0xA31A]={ category="lo", cjkwd="w", description="YI SYLLABLE SOP", direction="l", linebreak="id", unicodeslot=0xA31A, }, [0xA31B]={ category="lo", cjkwd="w", description="YI SYLLABLE SEX", direction="l", linebreak="id", unicodeslot=0xA31B, }, [0xA31C]={ category="lo", cjkwd="w", description="YI SYLLABLE SE", direction="l", linebreak="id", unicodeslot=0xA31C, }, [0xA31D]={ category="lo", cjkwd="w", description="YI SYLLABLE SEP", direction="l", linebreak="id", unicodeslot=0xA31D, }, [0xA31E]={ category="lo", cjkwd="w", description="YI SYLLABLE SUT", direction="l", linebreak="id", unicodeslot=0xA31E, }, [0xA31F]={ category="lo", cjkwd="w", description="YI SYLLABLE SUX", direction="l", linebreak="id", unicodeslot=0xA31F, }, [0xA320]={ category="lo", cjkwd="w", description="YI SYLLABLE SU", direction="l", linebreak="id", unicodeslot=0xA320, }, [0xA321]={ category="lo", cjkwd="w", description="YI SYLLABLE SUP", direction="l", linebreak="id", unicodeslot=0xA321, }, [0xA322]={ category="lo", cjkwd="w", description="YI SYLLABLE SURX", direction="l", linebreak="id", unicodeslot=0xA322, }, [0xA323]={ category="lo", cjkwd="w", description="YI SYLLABLE SUR", direction="l", linebreak="id", unicodeslot=0xA323, }, [0xA324]={ category="lo", cjkwd="w", description="YI SYLLABLE SYT", direction="l", linebreak="id", unicodeslot=0xA324, }, [0xA325]={ category="lo", cjkwd="w", description="YI SYLLABLE SYX", direction="l", linebreak="id", unicodeslot=0xA325, }, [0xA326]={ category="lo", cjkwd="w", description="YI SYLLABLE SY", direction="l", linebreak="id", unicodeslot=0xA326, }, [0xA327]={ category="lo", cjkwd="w", description="YI SYLLABLE SYP", direction="l", linebreak="id", unicodeslot=0xA327, }, [0xA328]={ category="lo", cjkwd="w", description="YI SYLLABLE SYRX", direction="l", linebreak="id", unicodeslot=0xA328, }, [0xA329]={ category="lo", cjkwd="w", description="YI SYLLABLE SYR", direction="l", linebreak="id", unicodeslot=0xA329, }, [0xA32A]={ category="lo", cjkwd="w", description="YI SYLLABLE SSIT", direction="l", linebreak="id", unicodeslot=0xA32A, }, [0xA32B]={ category="lo", cjkwd="w", description="YI SYLLABLE SSIX", direction="l", linebreak="id", unicodeslot=0xA32B, }, [0xA32C]={ category="lo", cjkwd="w", description="YI SYLLABLE SSI", direction="l", linebreak="id", unicodeslot=0xA32C, }, [0xA32D]={ category="lo", cjkwd="w", description="YI SYLLABLE SSIP", direction="l", linebreak="id", unicodeslot=0xA32D, }, [0xA32E]={ category="lo", cjkwd="w", description="YI SYLLABLE SSIEX", direction="l", linebreak="id", unicodeslot=0xA32E, }, [0xA32F]={ category="lo", cjkwd="w", description="YI SYLLABLE SSIE", direction="l", linebreak="id", unicodeslot=0xA32F, }, [0xA330]={ category="lo", cjkwd="w", description="YI SYLLABLE SSIEP", direction="l", linebreak="id", unicodeslot=0xA330, }, [0xA331]={ category="lo", cjkwd="w", description="YI SYLLABLE SSAT", direction="l", linebreak="id", unicodeslot=0xA331, }, [0xA332]={ category="lo", cjkwd="w", description="YI SYLLABLE SSAX", direction="l", linebreak="id", unicodeslot=0xA332, }, [0xA333]={ category="lo", cjkwd="w", description="YI SYLLABLE SSA", direction="l", linebreak="id", unicodeslot=0xA333, }, [0xA334]={ category="lo", cjkwd="w", description="YI SYLLABLE SSAP", direction="l", linebreak="id", unicodeslot=0xA334, }, [0xA335]={ category="lo", cjkwd="w", description="YI SYLLABLE SSOT", direction="l", linebreak="id", unicodeslot=0xA335, }, [0xA336]={ category="lo", cjkwd="w", description="YI SYLLABLE SSOX", direction="l", linebreak="id", unicodeslot=0xA336, }, [0xA337]={ category="lo", cjkwd="w", description="YI SYLLABLE SSO", direction="l", linebreak="id", unicodeslot=0xA337, }, [0xA338]={ category="lo", cjkwd="w", description="YI SYLLABLE SSOP", direction="l", linebreak="id", unicodeslot=0xA338, }, [0xA339]={ category="lo", cjkwd="w", description="YI SYLLABLE SSEX", direction="l", linebreak="id", unicodeslot=0xA339, }, [0xA33A]={ category="lo", cjkwd="w", description="YI SYLLABLE SSE", direction="l", linebreak="id", unicodeslot=0xA33A, }, [0xA33B]={ category="lo", cjkwd="w", description="YI SYLLABLE SSEP", direction="l", linebreak="id", unicodeslot=0xA33B, }, [0xA33C]={ category="lo", cjkwd="w", description="YI SYLLABLE SSUT", direction="l", linebreak="id", unicodeslot=0xA33C, }, [0xA33D]={ category="lo", cjkwd="w", description="YI SYLLABLE SSUX", direction="l", linebreak="id", unicodeslot=0xA33D, }, [0xA33E]={ category="lo", cjkwd="w", description="YI SYLLABLE SSU", direction="l", linebreak="id", unicodeslot=0xA33E, }, [0xA33F]={ category="lo", cjkwd="w", description="YI SYLLABLE SSUP", direction="l", linebreak="id", unicodeslot=0xA33F, }, [0xA340]={ category="lo", cjkwd="w", description="YI SYLLABLE SSYT", direction="l", linebreak="id", unicodeslot=0xA340, }, [0xA341]={ category="lo", cjkwd="w", description="YI SYLLABLE SSYX", direction="l", linebreak="id", unicodeslot=0xA341, }, [0xA342]={ category="lo", cjkwd="w", description="YI SYLLABLE SSY", direction="l", linebreak="id", unicodeslot=0xA342, }, [0xA343]={ category="lo", cjkwd="w", description="YI SYLLABLE SSYP", direction="l", linebreak="id", unicodeslot=0xA343, }, [0xA344]={ category="lo", cjkwd="w", description="YI SYLLABLE SSYRX", direction="l", linebreak="id", unicodeslot=0xA344, }, [0xA345]={ category="lo", cjkwd="w", description="YI SYLLABLE SSYR", direction="l", linebreak="id", unicodeslot=0xA345, }, [0xA346]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHAT", direction="l", linebreak="id", unicodeslot=0xA346, }, [0xA347]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHAX", direction="l", linebreak="id", unicodeslot=0xA347, }, [0xA348]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHA", direction="l", linebreak="id", unicodeslot=0xA348, }, [0xA349]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHAP", direction="l", linebreak="id", unicodeslot=0xA349, }, [0xA34A]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUOX", direction="l", linebreak="id", unicodeslot=0xA34A, }, [0xA34B]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUO", direction="l", linebreak="id", unicodeslot=0xA34B, }, [0xA34C]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUOP", direction="l", linebreak="id", unicodeslot=0xA34C, }, [0xA34D]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHOT", direction="l", linebreak="id", unicodeslot=0xA34D, }, [0xA34E]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHOX", direction="l", linebreak="id", unicodeslot=0xA34E, }, [0xA34F]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHO", direction="l", linebreak="id", unicodeslot=0xA34F, }, [0xA350]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHOP", direction="l", linebreak="id", unicodeslot=0xA350, }, [0xA351]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHET", direction="l", linebreak="id", unicodeslot=0xA351, }, [0xA352]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHEX", direction="l", linebreak="id", unicodeslot=0xA352, }, [0xA353]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHE", direction="l", linebreak="id", unicodeslot=0xA353, }, [0xA354]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHEP", direction="l", linebreak="id", unicodeslot=0xA354, }, [0xA355]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUT", direction="l", linebreak="id", unicodeslot=0xA355, }, [0xA356]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUX", direction="l", linebreak="id", unicodeslot=0xA356, }, [0xA357]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHU", direction="l", linebreak="id", unicodeslot=0xA357, }, [0xA358]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUP", direction="l", linebreak="id", unicodeslot=0xA358, }, [0xA359]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHURX", direction="l", linebreak="id", unicodeslot=0xA359, }, [0xA35A]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHUR", direction="l", linebreak="id", unicodeslot=0xA35A, }, [0xA35B]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHYT", direction="l", linebreak="id", unicodeslot=0xA35B, }, [0xA35C]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHYX", direction="l", linebreak="id", unicodeslot=0xA35C, }, [0xA35D]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHY", direction="l", linebreak="id", unicodeslot=0xA35D, }, [0xA35E]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHYP", direction="l", linebreak="id", unicodeslot=0xA35E, }, [0xA35F]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHYRX", direction="l", linebreak="id", unicodeslot=0xA35F, }, [0xA360]={ category="lo", cjkwd="w", description="YI SYLLABLE ZHYR", direction="l", linebreak="id", unicodeslot=0xA360, }, [0xA361]={ category="lo", cjkwd="w", description="YI SYLLABLE CHAT", direction="l", linebreak="id", unicodeslot=0xA361, }, [0xA362]={ category="lo", cjkwd="w", description="YI SYLLABLE CHAX", direction="l", linebreak="id", unicodeslot=0xA362, }, [0xA363]={ category="lo", cjkwd="w", description="YI SYLLABLE CHA", direction="l", linebreak="id", unicodeslot=0xA363, }, [0xA364]={ category="lo", cjkwd="w", description="YI SYLLABLE CHAP", direction="l", linebreak="id", unicodeslot=0xA364, }, [0xA365]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUOT", direction="l", linebreak="id", unicodeslot=0xA365, }, [0xA366]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUOX", direction="l", linebreak="id", unicodeslot=0xA366, }, [0xA367]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUO", direction="l", linebreak="id", unicodeslot=0xA367, }, [0xA368]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUOP", direction="l", linebreak="id", unicodeslot=0xA368, }, [0xA369]={ category="lo", cjkwd="w", description="YI SYLLABLE CHOT", direction="l", linebreak="id", unicodeslot=0xA369, }, [0xA36A]={ category="lo", cjkwd="w", description="YI SYLLABLE CHOX", direction="l", linebreak="id", unicodeslot=0xA36A, }, [0xA36B]={ category="lo", cjkwd="w", description="YI SYLLABLE CHO", direction="l", linebreak="id", unicodeslot=0xA36B, }, [0xA36C]={ category="lo", cjkwd="w", description="YI SYLLABLE CHOP", direction="l", linebreak="id", unicodeslot=0xA36C, }, [0xA36D]={ category="lo", cjkwd="w", description="YI SYLLABLE CHET", direction="l", linebreak="id", unicodeslot=0xA36D, }, [0xA36E]={ category="lo", cjkwd="w", description="YI SYLLABLE CHEX", direction="l", linebreak="id", unicodeslot=0xA36E, }, [0xA36F]={ category="lo", cjkwd="w", description="YI SYLLABLE CHE", direction="l", linebreak="id", unicodeslot=0xA36F, }, [0xA370]={ category="lo", cjkwd="w", description="YI SYLLABLE CHEP", direction="l", linebreak="id", unicodeslot=0xA370, }, [0xA371]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUX", direction="l", linebreak="id", unicodeslot=0xA371, }, [0xA372]={ category="lo", cjkwd="w", description="YI SYLLABLE CHU", direction="l", linebreak="id", unicodeslot=0xA372, }, [0xA373]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUP", direction="l", linebreak="id", unicodeslot=0xA373, }, [0xA374]={ category="lo", cjkwd="w", description="YI SYLLABLE CHURX", direction="l", linebreak="id", unicodeslot=0xA374, }, [0xA375]={ category="lo", cjkwd="w", description="YI SYLLABLE CHUR", direction="l", linebreak="id", unicodeslot=0xA375, }, [0xA376]={ category="lo", cjkwd="w", description="YI SYLLABLE CHYT", direction="l", linebreak="id", unicodeslot=0xA376, }, [0xA377]={ category="lo", cjkwd="w", description="YI SYLLABLE CHYX", direction="l", linebreak="id", unicodeslot=0xA377, }, [0xA378]={ category="lo", cjkwd="w", description="YI SYLLABLE CHY", direction="l", linebreak="id", unicodeslot=0xA378, }, [0xA379]={ category="lo", cjkwd="w", description="YI SYLLABLE CHYP", direction="l", linebreak="id", unicodeslot=0xA379, }, [0xA37A]={ category="lo", cjkwd="w", description="YI SYLLABLE CHYRX", direction="l", linebreak="id", unicodeslot=0xA37A, }, [0xA37B]={ category="lo", cjkwd="w", description="YI SYLLABLE CHYR", direction="l", linebreak="id", unicodeslot=0xA37B, }, [0xA37C]={ category="lo", cjkwd="w", description="YI SYLLABLE RRAX", direction="l", linebreak="id", unicodeslot=0xA37C, }, [0xA37D]={ category="lo", cjkwd="w", description="YI SYLLABLE RRA", direction="l", linebreak="id", unicodeslot=0xA37D, }, [0xA37E]={ category="lo", cjkwd="w", description="YI SYLLABLE RRUOX", direction="l", linebreak="id", unicodeslot=0xA37E, }, [0xA37F]={ category="lo", cjkwd="w", description="YI SYLLABLE RRUO", direction="l", linebreak="id", unicodeslot=0xA37F, }, [0xA380]={ category="lo", cjkwd="w", description="YI SYLLABLE RROT", direction="l", linebreak="id", unicodeslot=0xA380, }, [0xA381]={ category="lo", cjkwd="w", description="YI SYLLABLE RROX", direction="l", linebreak="id", unicodeslot=0xA381, }, [0xA382]={ category="lo", cjkwd="w", description="YI SYLLABLE RRO", direction="l", linebreak="id", unicodeslot=0xA382, }, [0xA383]={ category="lo", cjkwd="w", description="YI SYLLABLE RROP", direction="l", linebreak="id", unicodeslot=0xA383, }, [0xA384]={ category="lo", cjkwd="w", description="YI SYLLABLE RRET", direction="l", linebreak="id", unicodeslot=0xA384, }, [0xA385]={ category="lo", cjkwd="w", description="YI SYLLABLE RREX", direction="l", linebreak="id", unicodeslot=0xA385, }, [0xA386]={ category="lo", cjkwd="w", description="YI SYLLABLE RRE", direction="l", linebreak="id", unicodeslot=0xA386, }, [0xA387]={ category="lo", cjkwd="w", description="YI SYLLABLE RREP", direction="l", linebreak="id", unicodeslot=0xA387, }, [0xA388]={ category="lo", cjkwd="w", description="YI SYLLABLE RRUT", direction="l", linebreak="id", unicodeslot=0xA388, }, [0xA389]={ category="lo", cjkwd="w", description="YI SYLLABLE RRUX", direction="l", linebreak="id", unicodeslot=0xA389, }, [0xA38A]={ category="lo", cjkwd="w", description="YI SYLLABLE RRU", direction="l", linebreak="id", unicodeslot=0xA38A, }, [0xA38B]={ category="lo", cjkwd="w", description="YI SYLLABLE RRUP", direction="l", linebreak="id", unicodeslot=0xA38B, }, [0xA38C]={ category="lo", cjkwd="w", description="YI SYLLABLE RRURX", direction="l", linebreak="id", unicodeslot=0xA38C, }, [0xA38D]={ category="lo", cjkwd="w", description="YI SYLLABLE RRUR", direction="l", linebreak="id", unicodeslot=0xA38D, }, [0xA38E]={ category="lo", cjkwd="w", description="YI SYLLABLE RRYT", direction="l", linebreak="id", unicodeslot=0xA38E, }, [0xA38F]={ category="lo", cjkwd="w", description="YI SYLLABLE RRYX", direction="l", linebreak="id", unicodeslot=0xA38F, }, [0xA390]={ category="lo", cjkwd="w", description="YI SYLLABLE RRY", direction="l", linebreak="id", unicodeslot=0xA390, }, [0xA391]={ category="lo", cjkwd="w", description="YI SYLLABLE RRYP", direction="l", linebreak="id", unicodeslot=0xA391, }, [0xA392]={ category="lo", cjkwd="w", description="YI SYLLABLE RRYRX", direction="l", linebreak="id", unicodeslot=0xA392, }, [0xA393]={ category="lo", cjkwd="w", description="YI SYLLABLE RRYR", direction="l", linebreak="id", unicodeslot=0xA393, }, [0xA394]={ category="lo", cjkwd="w", description="YI SYLLABLE NRAT", direction="l", linebreak="id", unicodeslot=0xA394, }, [0xA395]={ category="lo", cjkwd="w", description="YI SYLLABLE NRAX", direction="l", linebreak="id", unicodeslot=0xA395, }, [0xA396]={ category="lo", cjkwd="w", description="YI SYLLABLE NRA", direction="l", linebreak="id", unicodeslot=0xA396, }, [0xA397]={ category="lo", cjkwd="w", description="YI SYLLABLE NRAP", direction="l", linebreak="id", unicodeslot=0xA397, }, [0xA398]={ category="lo", cjkwd="w", description="YI SYLLABLE NROX", direction="l", linebreak="id", unicodeslot=0xA398, }, [0xA399]={ category="lo", cjkwd="w", description="YI SYLLABLE NRO", direction="l", linebreak="id", unicodeslot=0xA399, }, [0xA39A]={ category="lo", cjkwd="w", description="YI SYLLABLE NROP", direction="l", linebreak="id", unicodeslot=0xA39A, }, [0xA39B]={ category="lo", cjkwd="w", description="YI SYLLABLE NRET", direction="l", linebreak="id", unicodeslot=0xA39B, }, [0xA39C]={ category="lo", cjkwd="w", description="YI SYLLABLE NREX", direction="l", linebreak="id", unicodeslot=0xA39C, }, [0xA39D]={ category="lo", cjkwd="w", description="YI SYLLABLE NRE", direction="l", linebreak="id", unicodeslot=0xA39D, }, [0xA39E]={ category="lo", cjkwd="w", description="YI SYLLABLE NREP", direction="l", linebreak="id", unicodeslot=0xA39E, }, [0xA39F]={ category="lo", cjkwd="w", description="YI SYLLABLE NRUT", direction="l", linebreak="id", unicodeslot=0xA39F, }, [0xA3A0]={ category="lo", cjkwd="w", description="YI SYLLABLE NRUX", direction="l", linebreak="id", unicodeslot=0xA3A0, }, [0xA3A1]={ category="lo", cjkwd="w", description="YI SYLLABLE NRU", direction="l", linebreak="id", unicodeslot=0xA3A1, }, [0xA3A2]={ category="lo", cjkwd="w", description="YI SYLLABLE NRUP", direction="l", linebreak="id", unicodeslot=0xA3A2, }, [0xA3A3]={ category="lo", cjkwd="w", description="YI SYLLABLE NRURX", direction="l", linebreak="id", unicodeslot=0xA3A3, }, [0xA3A4]={ category="lo", cjkwd="w", description="YI SYLLABLE NRUR", direction="l", linebreak="id", unicodeslot=0xA3A4, }, [0xA3A5]={ category="lo", cjkwd="w", description="YI SYLLABLE NRYT", direction="l", linebreak="id", unicodeslot=0xA3A5, }, [0xA3A6]={ category="lo", cjkwd="w", description="YI SYLLABLE NRYX", direction="l", linebreak="id", unicodeslot=0xA3A6, }, [0xA3A7]={ category="lo", cjkwd="w", description="YI SYLLABLE NRY", direction="l", linebreak="id", unicodeslot=0xA3A7, }, [0xA3A8]={ category="lo", cjkwd="w", description="YI SYLLABLE NRYP", direction="l", linebreak="id", unicodeslot=0xA3A8, }, [0xA3A9]={ category="lo", cjkwd="w", description="YI SYLLABLE NRYRX", direction="l", linebreak="id", unicodeslot=0xA3A9, }, [0xA3AA]={ category="lo", cjkwd="w", description="YI SYLLABLE NRYR", direction="l", linebreak="id", unicodeslot=0xA3AA, }, [0xA3AB]={ category="lo", cjkwd="w", description="YI SYLLABLE SHAT", direction="l", linebreak="id", unicodeslot=0xA3AB, }, [0xA3AC]={ category="lo", cjkwd="w", description="YI SYLLABLE SHAX", direction="l", linebreak="id", unicodeslot=0xA3AC, }, [0xA3AD]={ category="lo", cjkwd="w", description="YI SYLLABLE SHA", direction="l", linebreak="id", unicodeslot=0xA3AD, }, [0xA3AE]={ category="lo", cjkwd="w", description="YI SYLLABLE SHAP", direction="l", linebreak="id", unicodeslot=0xA3AE, }, [0xA3AF]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUOX", direction="l", linebreak="id", unicodeslot=0xA3AF, }, [0xA3B0]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUO", direction="l", linebreak="id", unicodeslot=0xA3B0, }, [0xA3B1]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUOP", direction="l", linebreak="id", unicodeslot=0xA3B1, }, [0xA3B2]={ category="lo", cjkwd="w", description="YI SYLLABLE SHOT", direction="l", linebreak="id", unicodeslot=0xA3B2, }, [0xA3B3]={ category="lo", cjkwd="w", description="YI SYLLABLE SHOX", direction="l", linebreak="id", unicodeslot=0xA3B3, }, [0xA3B4]={ category="lo", cjkwd="w", description="YI SYLLABLE SHO", direction="l", linebreak="id", unicodeslot=0xA3B4, }, [0xA3B5]={ category="lo", cjkwd="w", description="YI SYLLABLE SHOP", direction="l", linebreak="id", unicodeslot=0xA3B5, }, [0xA3B6]={ category="lo", cjkwd="w", description="YI SYLLABLE SHET", direction="l", linebreak="id", unicodeslot=0xA3B6, }, [0xA3B7]={ category="lo", cjkwd="w", description="YI SYLLABLE SHEX", direction="l", linebreak="id", unicodeslot=0xA3B7, }, [0xA3B8]={ category="lo", cjkwd="w", description="YI SYLLABLE SHE", direction="l", linebreak="id", unicodeslot=0xA3B8, }, [0xA3B9]={ category="lo", cjkwd="w", description="YI SYLLABLE SHEP", direction="l", linebreak="id", unicodeslot=0xA3B9, }, [0xA3BA]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUT", direction="l", linebreak="id", unicodeslot=0xA3BA, }, [0xA3BB]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUX", direction="l", linebreak="id", unicodeslot=0xA3BB, }, [0xA3BC]={ category="lo", cjkwd="w", description="YI SYLLABLE SHU", direction="l", linebreak="id", unicodeslot=0xA3BC, }, [0xA3BD]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUP", direction="l", linebreak="id", unicodeslot=0xA3BD, }, [0xA3BE]={ category="lo", cjkwd="w", description="YI SYLLABLE SHURX", direction="l", linebreak="id", unicodeslot=0xA3BE, }, [0xA3BF]={ category="lo", cjkwd="w", description="YI SYLLABLE SHUR", direction="l", linebreak="id", unicodeslot=0xA3BF, }, [0xA3C0]={ category="lo", cjkwd="w", description="YI SYLLABLE SHYT", direction="l", linebreak="id", unicodeslot=0xA3C0, }, [0xA3C1]={ category="lo", cjkwd="w", description="YI SYLLABLE SHYX", direction="l", linebreak="id", unicodeslot=0xA3C1, }, [0xA3C2]={ category="lo", cjkwd="w", description="YI SYLLABLE SHY", direction="l", linebreak="id", unicodeslot=0xA3C2, }, [0xA3C3]={ category="lo", cjkwd="w", description="YI SYLLABLE SHYP", direction="l", linebreak="id", unicodeslot=0xA3C3, }, [0xA3C4]={ category="lo", cjkwd="w", description="YI SYLLABLE SHYRX", direction="l", linebreak="id", unicodeslot=0xA3C4, }, [0xA3C5]={ category="lo", cjkwd="w", description="YI SYLLABLE SHYR", direction="l", linebreak="id", unicodeslot=0xA3C5, }, [0xA3C6]={ category="lo", cjkwd="w", description="YI SYLLABLE RAT", direction="l", linebreak="id", unicodeslot=0xA3C6, }, [0xA3C7]={ category="lo", cjkwd="w", description="YI SYLLABLE RAX", direction="l", linebreak="id", unicodeslot=0xA3C7, }, [0xA3C8]={ category="lo", cjkwd="w", description="YI SYLLABLE RA", direction="l", linebreak="id", unicodeslot=0xA3C8, }, [0xA3C9]={ category="lo", cjkwd="w", description="YI SYLLABLE RAP", direction="l", linebreak="id", unicodeslot=0xA3C9, }, [0xA3CA]={ category="lo", cjkwd="w", description="YI SYLLABLE RUOX", direction="l", linebreak="id", unicodeslot=0xA3CA, }, [0xA3CB]={ category="lo", cjkwd="w", description="YI SYLLABLE RUO", direction="l", linebreak="id", unicodeslot=0xA3CB, }, [0xA3CC]={ category="lo", cjkwd="w", description="YI SYLLABLE RUOP", direction="l", linebreak="id", unicodeslot=0xA3CC, }, [0xA3CD]={ category="lo", cjkwd="w", description="YI SYLLABLE ROT", direction="l", linebreak="id", unicodeslot=0xA3CD, }, [0xA3CE]={ category="lo", cjkwd="w", description="YI SYLLABLE ROX", direction="l", linebreak="id", unicodeslot=0xA3CE, }, [0xA3CF]={ category="lo", cjkwd="w", description="YI SYLLABLE RO", direction="l", linebreak="id", unicodeslot=0xA3CF, }, [0xA3D0]={ category="lo", cjkwd="w", description="YI SYLLABLE ROP", direction="l", linebreak="id", unicodeslot=0xA3D0, }, [0xA3D1]={ category="lo", cjkwd="w", description="YI SYLLABLE REX", direction="l", linebreak="id", unicodeslot=0xA3D1, }, [0xA3D2]={ category="lo", cjkwd="w", description="YI SYLLABLE RE", direction="l", linebreak="id", unicodeslot=0xA3D2, }, [0xA3D3]={ category="lo", cjkwd="w", description="YI SYLLABLE REP", direction="l", linebreak="id", unicodeslot=0xA3D3, }, [0xA3D4]={ category="lo", cjkwd="w", description="YI SYLLABLE RUT", direction="l", linebreak="id", unicodeslot=0xA3D4, }, [0xA3D5]={ category="lo", cjkwd="w", description="YI SYLLABLE RUX", direction="l", linebreak="id", unicodeslot=0xA3D5, }, [0xA3D6]={ category="lo", cjkwd="w", description="YI SYLLABLE RU", direction="l", linebreak="id", unicodeslot=0xA3D6, }, [0xA3D7]={ category="lo", cjkwd="w", description="YI SYLLABLE RUP", direction="l", linebreak="id", unicodeslot=0xA3D7, }, [0xA3D8]={ category="lo", cjkwd="w", description="YI SYLLABLE RURX", direction="l", linebreak="id", unicodeslot=0xA3D8, }, [0xA3D9]={ category="lo", cjkwd="w", description="YI SYLLABLE RUR", direction="l", linebreak="id", unicodeslot=0xA3D9, }, [0xA3DA]={ category="lo", cjkwd="w", description="YI SYLLABLE RYT", direction="l", linebreak="id", unicodeslot=0xA3DA, }, [0xA3DB]={ category="lo", cjkwd="w", description="YI SYLLABLE RYX", direction="l", linebreak="id", unicodeslot=0xA3DB, }, [0xA3DC]={ category="lo", cjkwd="w", description="YI SYLLABLE RY", direction="l", linebreak="id", unicodeslot=0xA3DC, }, [0xA3DD]={ category="lo", cjkwd="w", description="YI SYLLABLE RYP", direction="l", linebreak="id", unicodeslot=0xA3DD, }, [0xA3DE]={ category="lo", cjkwd="w", description="YI SYLLABLE RYRX", direction="l", linebreak="id", unicodeslot=0xA3DE, }, [0xA3DF]={ category="lo", cjkwd="w", description="YI SYLLABLE RYR", direction="l", linebreak="id", unicodeslot=0xA3DF, }, [0xA3E0]={ category="lo", cjkwd="w", description="YI SYLLABLE JIT", direction="l", linebreak="id", unicodeslot=0xA3E0, }, [0xA3E1]={ category="lo", cjkwd="w", description="YI SYLLABLE JIX", direction="l", linebreak="id", unicodeslot=0xA3E1, }, [0xA3E2]={ category="lo", cjkwd="w", description="YI SYLLABLE JI", direction="l", linebreak="id", unicodeslot=0xA3E2, }, [0xA3E3]={ category="lo", cjkwd="w", description="YI SYLLABLE JIP", direction="l", linebreak="id", unicodeslot=0xA3E3, }, [0xA3E4]={ category="lo", cjkwd="w", description="YI SYLLABLE JIET", direction="l", linebreak="id", unicodeslot=0xA3E4, }, [0xA3E5]={ category="lo", cjkwd="w", description="YI SYLLABLE JIEX", direction="l", linebreak="id", unicodeslot=0xA3E5, }, [0xA3E6]={ category="lo", cjkwd="w", description="YI SYLLABLE JIE", direction="l", linebreak="id", unicodeslot=0xA3E6, }, [0xA3E7]={ category="lo", cjkwd="w", description="YI SYLLABLE JIEP", direction="l", linebreak="id", unicodeslot=0xA3E7, }, [0xA3E8]={ category="lo", cjkwd="w", description="YI SYLLABLE JUOT", direction="l", linebreak="id", unicodeslot=0xA3E8, }, [0xA3E9]={ category="lo", cjkwd="w", description="YI SYLLABLE JUOX", direction="l", linebreak="id", unicodeslot=0xA3E9, }, [0xA3EA]={ category="lo", cjkwd="w", description="YI SYLLABLE JUO", direction="l", linebreak="id", unicodeslot=0xA3EA, }, [0xA3EB]={ category="lo", cjkwd="w", description="YI SYLLABLE JUOP", direction="l", linebreak="id", unicodeslot=0xA3EB, }, [0xA3EC]={ category="lo", cjkwd="w", description="YI SYLLABLE JOT", direction="l", linebreak="id", unicodeslot=0xA3EC, }, [0xA3ED]={ category="lo", cjkwd="w", description="YI SYLLABLE JOX", direction="l", linebreak="id", unicodeslot=0xA3ED, }, [0xA3EE]={ category="lo", cjkwd="w", description="YI SYLLABLE JO", direction="l", linebreak="id", unicodeslot=0xA3EE, }, [0xA3EF]={ category="lo", cjkwd="w", description="YI SYLLABLE JOP", direction="l", linebreak="id", unicodeslot=0xA3EF, }, [0xA3F0]={ category="lo", cjkwd="w", description="YI SYLLABLE JUT", direction="l", linebreak="id", unicodeslot=0xA3F0, }, [0xA3F1]={ category="lo", cjkwd="w", description="YI SYLLABLE JUX", direction="l", linebreak="id", unicodeslot=0xA3F1, }, [0xA3F2]={ category="lo", cjkwd="w", description="YI SYLLABLE JU", direction="l", linebreak="id", unicodeslot=0xA3F2, }, [0xA3F3]={ category="lo", cjkwd="w", description="YI SYLLABLE JUP", direction="l", linebreak="id", unicodeslot=0xA3F3, }, [0xA3F4]={ category="lo", cjkwd="w", description="YI SYLLABLE JURX", direction="l", linebreak="id", unicodeslot=0xA3F4, }, [0xA3F5]={ category="lo", cjkwd="w", description="YI SYLLABLE JUR", direction="l", linebreak="id", unicodeslot=0xA3F5, }, [0xA3F6]={ category="lo", cjkwd="w", description="YI SYLLABLE JYT", direction="l", linebreak="id", unicodeslot=0xA3F6, }, [0xA3F7]={ category="lo", cjkwd="w", description="YI SYLLABLE JYX", direction="l", linebreak="id", unicodeslot=0xA3F7, }, [0xA3F8]={ category="lo", cjkwd="w", description="YI SYLLABLE JY", direction="l", linebreak="id", unicodeslot=0xA3F8, }, [0xA3F9]={ category="lo", cjkwd="w", description="YI SYLLABLE JYP", direction="l", linebreak="id", unicodeslot=0xA3F9, }, [0xA3FA]={ category="lo", cjkwd="w", description="YI SYLLABLE JYRX", direction="l", linebreak="id", unicodeslot=0xA3FA, }, [0xA3FB]={ category="lo", cjkwd="w", description="YI SYLLABLE JYR", direction="l", linebreak="id", unicodeslot=0xA3FB, }, [0xA3FC]={ category="lo", cjkwd="w", description="YI SYLLABLE QIT", direction="l", linebreak="id", unicodeslot=0xA3FC, }, [0xA3FD]={ category="lo", cjkwd="w", description="YI SYLLABLE QIX", direction="l", linebreak="id", unicodeslot=0xA3FD, }, [0xA3FE]={ category="lo", cjkwd="w", description="YI SYLLABLE QI", direction="l", linebreak="id", unicodeslot=0xA3FE, }, [0xA3FF]={ category="lo", cjkwd="w", description="YI SYLLABLE QIP", direction="l", linebreak="id", unicodeslot=0xA3FF, }, [0xA400]={ category="lo", cjkwd="w", description="YI SYLLABLE QIET", direction="l", linebreak="id", unicodeslot=0xA400, }, [0xA401]={ category="lo", cjkwd="w", description="YI SYLLABLE QIEX", direction="l", linebreak="id", unicodeslot=0xA401, }, [0xA402]={ category="lo", cjkwd="w", description="YI SYLLABLE QIE", direction="l", linebreak="id", unicodeslot=0xA402, }, [0xA403]={ category="lo", cjkwd="w", description="YI SYLLABLE QIEP", direction="l", linebreak="id", unicodeslot=0xA403, }, [0xA404]={ category="lo", cjkwd="w", description="YI SYLLABLE QUOT", direction="l", linebreak="id", unicodeslot=0xA404, }, [0xA405]={ category="lo", cjkwd="w", description="YI SYLLABLE QUOX", direction="l", linebreak="id", unicodeslot=0xA405, }, [0xA406]={ category="lo", cjkwd="w", description="YI SYLLABLE QUO", direction="l", linebreak="id", unicodeslot=0xA406, }, [0xA407]={ category="lo", cjkwd="w", description="YI SYLLABLE QUOP", direction="l", linebreak="id", unicodeslot=0xA407, }, [0xA408]={ category="lo", cjkwd="w", description="YI SYLLABLE QOT", direction="l", linebreak="id", unicodeslot=0xA408, }, [0xA409]={ category="lo", cjkwd="w", description="YI SYLLABLE QOX", direction="l", linebreak="id", unicodeslot=0xA409, }, [0xA40A]={ category="lo", cjkwd="w", description="YI SYLLABLE QO", direction="l", linebreak="id", unicodeslot=0xA40A, }, [0xA40B]={ category="lo", cjkwd="w", description="YI SYLLABLE QOP", direction="l", linebreak="id", unicodeslot=0xA40B, }, [0xA40C]={ category="lo", cjkwd="w", description="YI SYLLABLE QUT", direction="l", linebreak="id", unicodeslot=0xA40C, }, [0xA40D]={ category="lo", cjkwd="w", description="YI SYLLABLE QUX", direction="l", linebreak="id", unicodeslot=0xA40D, }, [0xA40E]={ category="lo", cjkwd="w", description="YI SYLLABLE QU", direction="l", linebreak="id", unicodeslot=0xA40E, }, [0xA40F]={ category="lo", cjkwd="w", description="YI SYLLABLE QUP", direction="l", linebreak="id", unicodeslot=0xA40F, }, [0xA410]={ category="lo", cjkwd="w", description="YI SYLLABLE QURX", direction="l", linebreak="id", unicodeslot=0xA410, }, [0xA411]={ category="lo", cjkwd="w", description="YI SYLLABLE QUR", direction="l", linebreak="id", unicodeslot=0xA411, }, [0xA412]={ category="lo", cjkwd="w", description="YI SYLLABLE QYT", direction="l", linebreak="id", unicodeslot=0xA412, }, [0xA413]={ category="lo", cjkwd="w", description="YI SYLLABLE QYX", direction="l", linebreak="id", unicodeslot=0xA413, }, [0xA414]={ category="lo", cjkwd="w", description="YI SYLLABLE QY", direction="l", linebreak="id", unicodeslot=0xA414, }, [0xA415]={ category="lo", cjkwd="w", description="YI SYLLABLE QYP", direction="l", linebreak="id", unicodeslot=0xA415, }, [0xA416]={ category="lo", cjkwd="w", description="YI SYLLABLE QYRX", direction="l", linebreak="id", unicodeslot=0xA416, }, [0xA417]={ category="lo", cjkwd="w", description="YI SYLLABLE QYR", direction="l", linebreak="id", unicodeslot=0xA417, }, [0xA418]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIT", direction="l", linebreak="id", unicodeslot=0xA418, }, [0xA419]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIX", direction="l", linebreak="id", unicodeslot=0xA419, }, [0xA41A]={ category="lo", cjkwd="w", description="YI SYLLABLE JJI", direction="l", linebreak="id", unicodeslot=0xA41A, }, [0xA41B]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIP", direction="l", linebreak="id", unicodeslot=0xA41B, }, [0xA41C]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIET", direction="l", linebreak="id", unicodeslot=0xA41C, }, [0xA41D]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIEX", direction="l", linebreak="id", unicodeslot=0xA41D, }, [0xA41E]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIE", direction="l", linebreak="id", unicodeslot=0xA41E, }, [0xA41F]={ category="lo", cjkwd="w", description="YI SYLLABLE JJIEP", direction="l", linebreak="id", unicodeslot=0xA41F, }, [0xA420]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUOX", direction="l", linebreak="id", unicodeslot=0xA420, }, [0xA421]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUO", direction="l", linebreak="id", unicodeslot=0xA421, }, [0xA422]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUOP", direction="l", linebreak="id", unicodeslot=0xA422, }, [0xA423]={ category="lo", cjkwd="w", description="YI SYLLABLE JJOT", direction="l", linebreak="id", unicodeslot=0xA423, }, [0xA424]={ category="lo", cjkwd="w", description="YI SYLLABLE JJOX", direction="l", linebreak="id", unicodeslot=0xA424, }, [0xA425]={ category="lo", cjkwd="w", description="YI SYLLABLE JJO", direction="l", linebreak="id", unicodeslot=0xA425, }, [0xA426]={ category="lo", cjkwd="w", description="YI SYLLABLE JJOP", direction="l", linebreak="id", unicodeslot=0xA426, }, [0xA427]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUT", direction="l", linebreak="id", unicodeslot=0xA427, }, [0xA428]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUX", direction="l", linebreak="id", unicodeslot=0xA428, }, [0xA429]={ category="lo", cjkwd="w", description="YI SYLLABLE JJU", direction="l", linebreak="id", unicodeslot=0xA429, }, [0xA42A]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUP", direction="l", linebreak="id", unicodeslot=0xA42A, }, [0xA42B]={ category="lo", cjkwd="w", description="YI SYLLABLE JJURX", direction="l", linebreak="id", unicodeslot=0xA42B, }, [0xA42C]={ category="lo", cjkwd="w", description="YI SYLLABLE JJUR", direction="l", linebreak="id", unicodeslot=0xA42C, }, [0xA42D]={ category="lo", cjkwd="w", description="YI SYLLABLE JJYT", direction="l", linebreak="id", unicodeslot=0xA42D, }, [0xA42E]={ category="lo", cjkwd="w", description="YI SYLLABLE JJYX", direction="l", linebreak="id", unicodeslot=0xA42E, }, [0xA42F]={ category="lo", cjkwd="w", description="YI SYLLABLE JJY", direction="l", linebreak="id", unicodeslot=0xA42F, }, [0xA430]={ category="lo", cjkwd="w", description="YI SYLLABLE JJYP", direction="l", linebreak="id", unicodeslot=0xA430, }, [0xA431]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIT", direction="l", linebreak="id", unicodeslot=0xA431, }, [0xA432]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIX", direction="l", linebreak="id", unicodeslot=0xA432, }, [0xA433]={ category="lo", cjkwd="w", description="YI SYLLABLE NJI", direction="l", linebreak="id", unicodeslot=0xA433, }, [0xA434]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIP", direction="l", linebreak="id", unicodeslot=0xA434, }, [0xA435]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIET", direction="l", linebreak="id", unicodeslot=0xA435, }, [0xA436]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIEX", direction="l", linebreak="id", unicodeslot=0xA436, }, [0xA437]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIE", direction="l", linebreak="id", unicodeslot=0xA437, }, [0xA438]={ category="lo", cjkwd="w", description="YI SYLLABLE NJIEP", direction="l", linebreak="id", unicodeslot=0xA438, }, [0xA439]={ category="lo", cjkwd="w", description="YI SYLLABLE NJUOX", direction="l", linebreak="id", unicodeslot=0xA439, }, [0xA43A]={ category="lo", cjkwd="w", description="YI SYLLABLE NJUO", direction="l", linebreak="id", unicodeslot=0xA43A, }, [0xA43B]={ category="lo", cjkwd="w", description="YI SYLLABLE NJOT", direction="l", linebreak="id", unicodeslot=0xA43B, }, [0xA43C]={ category="lo", cjkwd="w", description="YI SYLLABLE NJOX", direction="l", linebreak="id", unicodeslot=0xA43C, }, [0xA43D]={ category="lo", cjkwd="w", description="YI SYLLABLE NJO", direction="l", linebreak="id", unicodeslot=0xA43D, }, [0xA43E]={ category="lo", cjkwd="w", description="YI SYLLABLE NJOP", direction="l", linebreak="id", unicodeslot=0xA43E, }, [0xA43F]={ category="lo", cjkwd="w", description="YI SYLLABLE NJUX", direction="l", linebreak="id", unicodeslot=0xA43F, }, [0xA440]={ category="lo", cjkwd="w", description="YI SYLLABLE NJU", direction="l", linebreak="id", unicodeslot=0xA440, }, [0xA441]={ category="lo", cjkwd="w", description="YI SYLLABLE NJUP", direction="l", linebreak="id", unicodeslot=0xA441, }, [0xA442]={ category="lo", cjkwd="w", description="YI SYLLABLE NJURX", direction="l", linebreak="id", unicodeslot=0xA442, }, [0xA443]={ category="lo", cjkwd="w", description="YI SYLLABLE NJUR", direction="l", linebreak="id", unicodeslot=0xA443, }, [0xA444]={ category="lo", cjkwd="w", description="YI SYLLABLE NJYT", direction="l", linebreak="id", unicodeslot=0xA444, }, [0xA445]={ category="lo", cjkwd="w", description="YI SYLLABLE NJYX", direction="l", linebreak="id", unicodeslot=0xA445, }, [0xA446]={ category="lo", cjkwd="w", description="YI SYLLABLE NJY", direction="l", linebreak="id", unicodeslot=0xA446, }, [0xA447]={ category="lo", cjkwd="w", description="YI SYLLABLE NJYP", direction="l", linebreak="id", unicodeslot=0xA447, }, [0xA448]={ category="lo", cjkwd="w", description="YI SYLLABLE NJYRX", direction="l", linebreak="id", unicodeslot=0xA448, }, [0xA449]={ category="lo", cjkwd="w", description="YI SYLLABLE NJYR", direction="l", linebreak="id", unicodeslot=0xA449, }, [0xA44A]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIT", direction="l", linebreak="id", unicodeslot=0xA44A, }, [0xA44B]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIX", direction="l", linebreak="id", unicodeslot=0xA44B, }, [0xA44C]={ category="lo", cjkwd="w", description="YI SYLLABLE NYI", direction="l", linebreak="id", unicodeslot=0xA44C, }, [0xA44D]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIP", direction="l", linebreak="id", unicodeslot=0xA44D, }, [0xA44E]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIET", direction="l", linebreak="id", unicodeslot=0xA44E, }, [0xA44F]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIEX", direction="l", linebreak="id", unicodeslot=0xA44F, }, [0xA450]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIE", direction="l", linebreak="id", unicodeslot=0xA450, }, [0xA451]={ category="lo", cjkwd="w", description="YI SYLLABLE NYIEP", direction="l", linebreak="id", unicodeslot=0xA451, }, [0xA452]={ category="lo", cjkwd="w", description="YI SYLLABLE NYUOX", direction="l", linebreak="id", unicodeslot=0xA452, }, [0xA453]={ category="lo", cjkwd="w", description="YI SYLLABLE NYUO", direction="l", linebreak="id", unicodeslot=0xA453, }, [0xA454]={ category="lo", cjkwd="w", description="YI SYLLABLE NYUOP", direction="l", linebreak="id", unicodeslot=0xA454, }, [0xA455]={ category="lo", cjkwd="w", description="YI SYLLABLE NYOT", direction="l", linebreak="id", unicodeslot=0xA455, }, [0xA456]={ category="lo", cjkwd="w", description="YI SYLLABLE NYOX", direction="l", linebreak="id", unicodeslot=0xA456, }, [0xA457]={ category="lo", cjkwd="w", description="YI SYLLABLE NYO", direction="l", linebreak="id", unicodeslot=0xA457, }, [0xA458]={ category="lo", cjkwd="w", description="YI SYLLABLE NYOP", direction="l", linebreak="id", unicodeslot=0xA458, }, [0xA459]={ category="lo", cjkwd="w", description="YI SYLLABLE NYUT", direction="l", linebreak="id", unicodeslot=0xA459, }, [0xA45A]={ category="lo", cjkwd="w", description="YI SYLLABLE NYUX", direction="l", linebreak="id", unicodeslot=0xA45A, }, [0xA45B]={ category="lo", cjkwd="w", description="YI SYLLABLE NYU", direction="l", linebreak="id", unicodeslot=0xA45B, }, [0xA45C]={ category="lo", cjkwd="w", description="YI SYLLABLE NYUP", direction="l", linebreak="id", unicodeslot=0xA45C, }, [0xA45D]={ category="lo", cjkwd="w", description="YI SYLLABLE XIT", direction="l", linebreak="id", unicodeslot=0xA45D, }, [0xA45E]={ category="lo", cjkwd="w", description="YI SYLLABLE XIX", direction="l", linebreak="id", unicodeslot=0xA45E, }, [0xA45F]={ category="lo", cjkwd="w", description="YI SYLLABLE XI", direction="l", linebreak="id", unicodeslot=0xA45F, }, [0xA460]={ category="lo", cjkwd="w", description="YI SYLLABLE XIP", direction="l", linebreak="id", unicodeslot=0xA460, }, [0xA461]={ category="lo", cjkwd="w", description="YI SYLLABLE XIET", direction="l", linebreak="id", unicodeslot=0xA461, }, [0xA462]={ category="lo", cjkwd="w", description="YI SYLLABLE XIEX", direction="l", linebreak="id", unicodeslot=0xA462, }, [0xA463]={ category="lo", cjkwd="w", description="YI SYLLABLE XIE", direction="l", linebreak="id", unicodeslot=0xA463, }, [0xA464]={ category="lo", cjkwd="w", description="YI SYLLABLE XIEP", direction="l", linebreak="id", unicodeslot=0xA464, }, [0xA465]={ category="lo", cjkwd="w", description="YI SYLLABLE XUOX", direction="l", linebreak="id", unicodeslot=0xA465, }, [0xA466]={ category="lo", cjkwd="w", description="YI SYLLABLE XUO", direction="l", linebreak="id", unicodeslot=0xA466, }, [0xA467]={ category="lo", cjkwd="w", description="YI SYLLABLE XOT", direction="l", linebreak="id", unicodeslot=0xA467, }, [0xA468]={ category="lo", cjkwd="w", description="YI SYLLABLE XOX", direction="l", linebreak="id", unicodeslot=0xA468, }, [0xA469]={ category="lo", cjkwd="w", description="YI SYLLABLE XO", direction="l", linebreak="id", unicodeslot=0xA469, }, [0xA46A]={ category="lo", cjkwd="w", description="YI SYLLABLE XOP", direction="l", linebreak="id", unicodeslot=0xA46A, }, [0xA46B]={ category="lo", cjkwd="w", description="YI SYLLABLE XYT", direction="l", linebreak="id", unicodeslot=0xA46B, }, [0xA46C]={ category="lo", cjkwd="w", description="YI SYLLABLE XYX", direction="l", linebreak="id", unicodeslot=0xA46C, }, [0xA46D]={ category="lo", cjkwd="w", description="YI SYLLABLE XY", direction="l", linebreak="id", unicodeslot=0xA46D, }, [0xA46E]={ category="lo", cjkwd="w", description="YI SYLLABLE XYP", direction="l", linebreak="id", unicodeslot=0xA46E, }, [0xA46F]={ category="lo", cjkwd="w", description="YI SYLLABLE XYRX", direction="l", linebreak="id", unicodeslot=0xA46F, }, [0xA470]={ category="lo", cjkwd="w", description="YI SYLLABLE XYR", direction="l", linebreak="id", unicodeslot=0xA470, }, [0xA471]={ category="lo", cjkwd="w", description="YI SYLLABLE YIT", direction="l", linebreak="id", unicodeslot=0xA471, }, [0xA472]={ category="lo", cjkwd="w", description="YI SYLLABLE YIX", direction="l", linebreak="id", unicodeslot=0xA472, }, [0xA473]={ category="lo", cjkwd="w", description="YI SYLLABLE YI", direction="l", linebreak="id", unicodeslot=0xA473, }, [0xA474]={ category="lo", cjkwd="w", description="YI SYLLABLE YIP", direction="l", linebreak="id", unicodeslot=0xA474, }, [0xA475]={ category="lo", cjkwd="w", description="YI SYLLABLE YIET", direction="l", linebreak="id", unicodeslot=0xA475, }, [0xA476]={ category="lo", cjkwd="w", description="YI SYLLABLE YIEX", direction="l", linebreak="id", unicodeslot=0xA476, }, [0xA477]={ category="lo", cjkwd="w", description="YI SYLLABLE YIE", direction="l", linebreak="id", unicodeslot=0xA477, }, [0xA478]={ category="lo", cjkwd="w", description="YI SYLLABLE YIEP", direction="l", linebreak="id", unicodeslot=0xA478, }, [0xA479]={ category="lo", cjkwd="w", description="YI SYLLABLE YUOT", direction="l", linebreak="id", unicodeslot=0xA479, }, [0xA47A]={ category="lo", cjkwd="w", description="YI SYLLABLE YUOX", direction="l", linebreak="id", unicodeslot=0xA47A, }, [0xA47B]={ category="lo", cjkwd="w", description="YI SYLLABLE YUO", direction="l", linebreak="id", unicodeslot=0xA47B, }, [0xA47C]={ category="lo", cjkwd="w", description="YI SYLLABLE YUOP", direction="l", linebreak="id", unicodeslot=0xA47C, }, [0xA47D]={ category="lo", cjkwd="w", description="YI SYLLABLE YOT", direction="l", linebreak="id", unicodeslot=0xA47D, }, [0xA47E]={ category="lo", cjkwd="w", description="YI SYLLABLE YOX", direction="l", linebreak="id", unicodeslot=0xA47E, }, [0xA47F]={ category="lo", cjkwd="w", description="YI SYLLABLE YO", direction="l", linebreak="id", unicodeslot=0xA47F, }, [0xA480]={ category="lo", cjkwd="w", description="YI SYLLABLE YOP", direction="l", linebreak="id", unicodeslot=0xA480, }, [0xA481]={ category="lo", cjkwd="w", description="YI SYLLABLE YUT", direction="l", linebreak="id", unicodeslot=0xA481, }, [0xA482]={ category="lo", cjkwd="w", description="YI SYLLABLE YUX", direction="l", linebreak="id", unicodeslot=0xA482, }, [0xA483]={ category="lo", cjkwd="w", description="YI SYLLABLE YU", direction="l", linebreak="id", unicodeslot=0xA483, }, [0xA484]={ category="lo", cjkwd="w", description="YI SYLLABLE YUP", direction="l", linebreak="id", unicodeslot=0xA484, }, [0xA485]={ category="lo", cjkwd="w", description="YI SYLLABLE YURX", direction="l", linebreak="id", unicodeslot=0xA485, }, [0xA486]={ category="lo", cjkwd="w", description="YI SYLLABLE YUR", direction="l", linebreak="id", unicodeslot=0xA486, }, [0xA487]={ category="lo", cjkwd="w", description="YI SYLLABLE YYT", direction="l", linebreak="id", unicodeslot=0xA487, }, [0xA488]={ category="lo", cjkwd="w", description="YI SYLLABLE YYX", direction="l", linebreak="id", unicodeslot=0xA488, }, [0xA489]={ category="lo", cjkwd="w", description="YI SYLLABLE YY", direction="l", linebreak="id", unicodeslot=0xA489, }, [0xA48A]={ category="lo", cjkwd="w", description="YI SYLLABLE YYP", direction="l", linebreak="id", unicodeslot=0xA48A, }, [0xA48B]={ category="lo", cjkwd="w", description="YI SYLLABLE YYRX", direction="l", linebreak="id", unicodeslot=0xA48B, }, [0xA48C]={ category="lo", cjkwd="w", description="YI SYLLABLE YYR", direction="l", linebreak="id", unicodeslot=0xA48C, }, [0xA490]={ category="so", cjkwd="w", description="YI RADICAL QOT", direction="on", linebreak="id", unicodeslot=0xA490, }, [0xA491]={ category="so", cjkwd="w", description="YI RADICAL LI", direction="on", linebreak="id", unicodeslot=0xA491, }, [0xA492]={ category="so", cjkwd="w", description="YI RADICAL KIT", direction="on", linebreak="id", unicodeslot=0xA492, }, [0xA493]={ category="so", cjkwd="w", description="YI RADICAL NYIP", direction="on", linebreak="id", unicodeslot=0xA493, }, [0xA494]={ category="so", cjkwd="w", description="YI RADICAL CYP", direction="on", linebreak="id", unicodeslot=0xA494, }, [0xA495]={ category="so", cjkwd="w", description="YI RADICAL SSI", direction="on", linebreak="id", unicodeslot=0xA495, }, [0xA496]={ category="so", cjkwd="w", description="YI RADICAL GGOP", direction="on", linebreak="id", unicodeslot=0xA496, }, [0xA497]={ category="so", cjkwd="w", description="YI RADICAL GEP", direction="on", linebreak="id", unicodeslot=0xA497, }, [0xA498]={ category="so", cjkwd="w", description="YI RADICAL MI", direction="on", linebreak="id", unicodeslot=0xA498, }, [0xA499]={ category="so", cjkwd="w", description="YI RADICAL HXIT", direction="on", linebreak="id", unicodeslot=0xA499, }, [0xA49A]={ category="so", cjkwd="w", description="YI RADICAL LYR", direction="on", linebreak="id", unicodeslot=0xA49A, }, [0xA49B]={ category="so", cjkwd="w", description="YI RADICAL BBUT", direction="on", linebreak="id", unicodeslot=0xA49B, }, [0xA49C]={ category="so", cjkwd="w", description="YI RADICAL MOP", direction="on", linebreak="id", unicodeslot=0xA49C, }, [0xA49D]={ category="so", cjkwd="w", description="YI RADICAL YO", direction="on", linebreak="id", unicodeslot=0xA49D, }, [0xA49E]={ category="so", cjkwd="w", description="YI RADICAL PUT", direction="on", linebreak="id", unicodeslot=0xA49E, }, [0xA49F]={ category="so", cjkwd="w", description="YI RADICAL HXUO", direction="on", linebreak="id", unicodeslot=0xA49F, }, [0xA4A0]={ category="so", cjkwd="w", description="YI RADICAL TAT", direction="on", linebreak="id", unicodeslot=0xA4A0, }, [0xA4A1]={ category="so", cjkwd="w", description="YI RADICAL GA", direction="on", linebreak="id", unicodeslot=0xA4A1, }, [0xA4A2]={ category="so", cjkwd="w", description="YI RADICAL ZUP", direction="on", linebreak="id", unicodeslot=0xA4A2, }, [0xA4A3]={ category="so", cjkwd="w", description="YI RADICAL CYT", direction="on", linebreak="id", unicodeslot=0xA4A3, }, [0xA4A4]={ category="so", cjkwd="w", description="YI RADICAL DDUR", direction="on", linebreak="id", unicodeslot=0xA4A4, }, [0xA4A5]={ category="so", cjkwd="w", description="YI RADICAL BUR", direction="on", linebreak="id", unicodeslot=0xA4A5, }, [0xA4A6]={ category="so", cjkwd="w", description="YI RADICAL GGUO", direction="on", linebreak="id", unicodeslot=0xA4A6, }, [0xA4A7]={ category="so", cjkwd="w", description="YI RADICAL NYOP", direction="on", linebreak="id", unicodeslot=0xA4A7, }, [0xA4A8]={ category="so", cjkwd="w", description="YI RADICAL TU", direction="on", linebreak="id", unicodeslot=0xA4A8, }, [0xA4A9]={ category="so", cjkwd="w", description="YI RADICAL OP", direction="on", linebreak="id", unicodeslot=0xA4A9, }, [0xA4AA]={ category="so", cjkwd="w", description="YI RADICAL JJUT", direction="on", linebreak="id", unicodeslot=0xA4AA, }, [0xA4AB]={ category="so", cjkwd="w", description="YI RADICAL ZOT", direction="on", linebreak="id", unicodeslot=0xA4AB, }, [0xA4AC]={ category="so", cjkwd="w", description="YI RADICAL PYT", direction="on", linebreak="id", unicodeslot=0xA4AC, }, [0xA4AD]={ category="so", cjkwd="w", description="YI RADICAL HMO", direction="on", linebreak="id", unicodeslot=0xA4AD, }, [0xA4AE]={ category="so", cjkwd="w", description="YI RADICAL YIT", direction="on", linebreak="id", unicodeslot=0xA4AE, }, [0xA4AF]={ category="so", cjkwd="w", description="YI RADICAL VUR", direction="on", linebreak="id", unicodeslot=0xA4AF, }, [0xA4B0]={ category="so", cjkwd="w", description="YI RADICAL SHY", direction="on", linebreak="id", unicodeslot=0xA4B0, }, [0xA4B1]={ category="so", cjkwd="w", description="YI RADICAL VEP", direction="on", linebreak="id", unicodeslot=0xA4B1, }, [0xA4B2]={ category="so", cjkwd="w", description="YI RADICAL ZA", direction="on", linebreak="id", unicodeslot=0xA4B2, }, [0xA4B3]={ category="so", cjkwd="w", description="YI RADICAL JO", direction="on", linebreak="id", unicodeslot=0xA4B3, }, [0xA4B4]={ category="so", cjkwd="w", description="YI RADICAL NZUP", direction="on", linebreak="id", unicodeslot=0xA4B4, }, [0xA4B5]={ category="so", cjkwd="w", description="YI RADICAL JJY", direction="on", linebreak="id", unicodeslot=0xA4B5, }, [0xA4B6]={ category="so", cjkwd="w", description="YI RADICAL GOT", direction="on", linebreak="id", unicodeslot=0xA4B6, }, [0xA4B7]={ category="so", cjkwd="w", description="YI RADICAL JJIE", direction="on", linebreak="id", unicodeslot=0xA4B7, }, [0xA4B8]={ category="so", cjkwd="w", description="YI RADICAL WO", direction="on", linebreak="id", unicodeslot=0xA4B8, }, [0xA4B9]={ category="so", cjkwd="w", description="YI RADICAL DU", direction="on", linebreak="id", unicodeslot=0xA4B9, }, [0xA4BA]={ category="so", cjkwd="w", description="YI RADICAL SHUR", direction="on", linebreak="id", unicodeslot=0xA4BA, }, [0xA4BB]={ category="so", cjkwd="w", description="YI RADICAL LIE", direction="on", linebreak="id", unicodeslot=0xA4BB, }, [0xA4BC]={ category="so", cjkwd="w", description="YI RADICAL CY", direction="on", linebreak="id", unicodeslot=0xA4BC, }, [0xA4BD]={ category="so", cjkwd="w", description="YI RADICAL CUOP", direction="on", linebreak="id", unicodeslot=0xA4BD, }, [0xA4BE]={ category="so", cjkwd="w", description="YI RADICAL CIP", direction="on", linebreak="id", unicodeslot=0xA4BE, }, [0xA4BF]={ category="so", cjkwd="w", description="YI RADICAL HXOP", direction="on", linebreak="id", unicodeslot=0xA4BF, }, [0xA4C0]={ category="so", cjkwd="w", description="YI RADICAL SHAT", direction="on", linebreak="id", unicodeslot=0xA4C0, }, [0xA4C1]={ category="so", cjkwd="w", description="YI RADICAL ZUR", direction="on", linebreak="id", unicodeslot=0xA4C1, }, [0xA4C2]={ category="so", cjkwd="w", description="YI RADICAL SHOP", direction="on", linebreak="id", unicodeslot=0xA4C2, }, [0xA4C3]={ category="so", cjkwd="w", description="YI RADICAL CHE", direction="on", linebreak="id", unicodeslot=0xA4C3, }, [0xA4C4]={ category="so", cjkwd="w", description="YI RADICAL ZZIET", direction="on", linebreak="id", unicodeslot=0xA4C4, }, [0xA4C5]={ category="so", cjkwd="w", description="YI RADICAL NBIE", direction="on", linebreak="id", unicodeslot=0xA4C5, }, [0xA4C6]={ category="so", cjkwd="w", description="YI RADICAL KE", direction="on", linebreak="id", unicodeslot=0xA4C6, }, [0xA4D0]={ category="lo", description="LISU LETTER BA", direction="l", linebreak="al", unicodeslot=0xA4D0, }, [0xA4D1]={ category="lo", description="LISU LETTER PA", direction="l", linebreak="al", unicodeslot=0xA4D1, }, [0xA4D2]={ category="lo", description="LISU LETTER PHA", direction="l", linebreak="al", unicodeslot=0xA4D2, }, [0xA4D3]={ category="lo", description="LISU LETTER DA", direction="l", linebreak="al", unicodeslot=0xA4D3, }, [0xA4D4]={ category="lo", description="LISU LETTER TA", direction="l", linebreak="al", unicodeslot=0xA4D4, }, [0xA4D5]={ category="lo", description="LISU LETTER THA", direction="l", linebreak="al", unicodeslot=0xA4D5, }, [0xA4D6]={ category="lo", description="LISU LETTER GA", direction="l", linebreak="al", unicodeslot=0xA4D6, }, [0xA4D7]={ category="lo", description="LISU LETTER KA", direction="l", linebreak="al", unicodeslot=0xA4D7, }, [0xA4D8]={ category="lo", description="LISU LETTER KHA", direction="l", linebreak="al", unicodeslot=0xA4D8, }, [0xA4D9]={ category="lo", description="LISU LETTER JA", direction="l", linebreak="al", unicodeslot=0xA4D9, }, [0xA4DA]={ category="lo", description="LISU LETTER CA", direction="l", linebreak="al", unicodeslot=0xA4DA, }, [0xA4DB]={ category="lo", description="LISU LETTER CHA", direction="l", linebreak="al", unicodeslot=0xA4DB, }, [0xA4DC]={ category="lo", description="LISU LETTER DZA", direction="l", linebreak="al", unicodeslot=0xA4DC, }, [0xA4DD]={ category="lo", description="LISU LETTER TSA", direction="l", linebreak="al", unicodeslot=0xA4DD, }, [0xA4DE]={ category="lo", description="LISU LETTER TSHA", direction="l", linebreak="al", unicodeslot=0xA4DE, }, [0xA4DF]={ category="lo", description="LISU LETTER MA", direction="l", linebreak="al", unicodeslot=0xA4DF, }, [0xA4E0]={ category="lo", description="LISU LETTER NA", direction="l", linebreak="al", unicodeslot=0xA4E0, }, [0xA4E1]={ category="lo", description="LISU LETTER LA", direction="l", linebreak="al", unicodeslot=0xA4E1, }, [0xA4E2]={ category="lo", description="LISU LETTER SA", direction="l", linebreak="al", unicodeslot=0xA4E2, }, [0xA4E3]={ category="lo", description="LISU LETTER ZHA", direction="l", linebreak="al", unicodeslot=0xA4E3, }, [0xA4E4]={ category="lo", description="LISU LETTER ZA", direction="l", linebreak="al", unicodeslot=0xA4E4, }, [0xA4E5]={ category="lo", description="LISU LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA4E5, }, [0xA4E6]={ category="lo", description="LISU LETTER HA", direction="l", linebreak="al", unicodeslot=0xA4E6, }, [0xA4E7]={ category="lo", description="LISU LETTER XA", direction="l", linebreak="al", unicodeslot=0xA4E7, }, [0xA4E8]={ category="lo", description="LISU LETTER HHA", direction="l", linebreak="al", unicodeslot=0xA4E8, }, [0xA4E9]={ category="lo", description="LISU LETTER FA", direction="l", linebreak="al", unicodeslot=0xA4E9, }, [0xA4EA]={ category="lo", description="LISU LETTER WA", direction="l", linebreak="al", unicodeslot=0xA4EA, }, [0xA4EB]={ category="lo", description="LISU LETTER SHA", direction="l", linebreak="al", unicodeslot=0xA4EB, }, [0xA4EC]={ category="lo", description="LISU LETTER YA", direction="l", linebreak="al", unicodeslot=0xA4EC, }, [0xA4ED]={ category="lo", description="LISU LETTER GHA", direction="l", linebreak="al", unicodeslot=0xA4ED, }, [0xA4EE]={ category="lo", description="LISU LETTER A", direction="l", linebreak="al", unicodeslot=0xA4EE, }, [0xA4EF]={ category="lo", description="LISU LETTER AE", direction="l", linebreak="al", unicodeslot=0xA4EF, }, [0xA4F0]={ category="lo", description="LISU LETTER E", direction="l", linebreak="al", unicodeslot=0xA4F0, }, [0xA4F1]={ category="lo", description="LISU LETTER EU", direction="l", linebreak="al", unicodeslot=0xA4F1, }, [0xA4F2]={ category="lo", description="LISU LETTER I", direction="l", linebreak="al", unicodeslot=0xA4F2, }, [0xA4F3]={ category="lo", description="LISU LETTER O", direction="l", linebreak="al", unicodeslot=0xA4F3, }, [0xA4F4]={ category="lo", description="LISU LETTER U", direction="l", linebreak="al", unicodeslot=0xA4F4, }, [0xA4F5]={ category="lo", description="LISU LETTER UE", direction="l", linebreak="al", unicodeslot=0xA4F5, }, [0xA4F6]={ category="lo", description="LISU LETTER UH", direction="l", linebreak="al", unicodeslot=0xA4F6, }, [0xA4F7]={ category="lo", description="LISU LETTER OE", direction="l", linebreak="al", unicodeslot=0xA4F7, }, [0xA4F8]={ category="lm", description="LISU LETTER TONE MYA TI", direction="l", linebreak="al", unicodeslot=0xA4F8, }, [0xA4F9]={ category="lm", description="LISU LETTER TONE NA PO", direction="l", linebreak="al", unicodeslot=0xA4F9, }, [0xA4FA]={ category="lm", description="LISU LETTER TONE MYA CYA", direction="l", linebreak="al", unicodeslot=0xA4FA, }, [0xA4FB]={ category="lm", description="LISU LETTER TONE MYA BO", direction="l", linebreak="al", unicodeslot=0xA4FB, }, [0xA4FC]={ category="lm", description="LISU LETTER TONE MYA NA", direction="l", linebreak="al", unicodeslot=0xA4FC, }, [0xA4FD]={ category="lm", description="LISU LETTER TONE MYA JEU", direction="l", linebreak="al", unicodeslot=0xA4FD, }, [0xA4FE]={ category="po", description="LISU PUNCTUATION COMMA", direction="l", linebreak="ba", unicodeslot=0xA4FE, }, [0xA4FF]={ category="po", description="LISU PUNCTUATION FULL STOP", direction="l", linebreak="ba", unicodeslot=0xA4FF, }, [0xA500]={ category="lo", description="VAI SYLLABLE EE", direction="l", linebreak="al", unicodeslot=0xA500, }, [0xA501]={ category="lo", description="VAI SYLLABLE EEN", direction="l", linebreak="al", unicodeslot=0xA501, }, [0xA502]={ category="lo", description="VAI SYLLABLE HEE", direction="l", linebreak="al", unicodeslot=0xA502, }, [0xA503]={ category="lo", description="VAI SYLLABLE WEE", direction="l", linebreak="al", unicodeslot=0xA503, }, [0xA504]={ category="lo", description="VAI SYLLABLE WEEN", direction="l", linebreak="al", unicodeslot=0xA504, }, [0xA505]={ category="lo", description="VAI SYLLABLE PEE", direction="l", linebreak="al", unicodeslot=0xA505, }, [0xA506]={ category="lo", description="VAI SYLLABLE BHEE", direction="l", linebreak="al", unicodeslot=0xA506, }, [0xA507]={ category="lo", description="VAI SYLLABLE BEE", direction="l", linebreak="al", unicodeslot=0xA507, }, [0xA508]={ category="lo", description="VAI SYLLABLE MBEE", direction="l", linebreak="al", unicodeslot=0xA508, }, [0xA509]={ category="lo", description="VAI SYLLABLE KPEE", direction="l", linebreak="al", unicodeslot=0xA509, }, [0xA50A]={ category="lo", description="VAI SYLLABLE MGBEE", direction="l", linebreak="al", unicodeslot=0xA50A, }, [0xA50B]={ category="lo", description="VAI SYLLABLE GBEE", direction="l", linebreak="al", unicodeslot=0xA50B, }, [0xA50C]={ category="lo", description="VAI SYLLABLE FEE", direction="l", linebreak="al", unicodeslot=0xA50C, }, [0xA50D]={ category="lo", description="VAI SYLLABLE VEE", direction="l", linebreak="al", unicodeslot=0xA50D, }, [0xA50E]={ category="lo", description="VAI SYLLABLE TEE", direction="l", linebreak="al", unicodeslot=0xA50E, }, [0xA50F]={ category="lo", description="VAI SYLLABLE THEE", direction="l", linebreak="al", unicodeslot=0xA50F, }, [0xA510]={ category="lo", description="VAI SYLLABLE DHEE", direction="l", linebreak="al", unicodeslot=0xA510, }, [0xA511]={ category="lo", description="VAI SYLLABLE DHHEE", direction="l", linebreak="al", unicodeslot=0xA511, }, [0xA512]={ category="lo", description="VAI SYLLABLE LEE", direction="l", linebreak="al", unicodeslot=0xA512, }, [0xA513]={ category="lo", description="VAI SYLLABLE REE", direction="l", linebreak="al", unicodeslot=0xA513, }, [0xA514]={ category="lo", description="VAI SYLLABLE DEE", direction="l", linebreak="al", unicodeslot=0xA514, }, [0xA515]={ category="lo", description="VAI SYLLABLE NDEE", direction="l", linebreak="al", unicodeslot=0xA515, }, [0xA516]={ category="lo", description="VAI SYLLABLE SEE", direction="l", linebreak="al", unicodeslot=0xA516, }, [0xA517]={ category="lo", description="VAI SYLLABLE SHEE", direction="l", linebreak="al", unicodeslot=0xA517, }, [0xA518]={ category="lo", description="VAI SYLLABLE ZEE", direction="l", linebreak="al", unicodeslot=0xA518, }, [0xA519]={ category="lo", description="VAI SYLLABLE ZHEE", direction="l", linebreak="al", unicodeslot=0xA519, }, [0xA51A]={ category="lo", description="VAI SYLLABLE CEE", direction="l", linebreak="al", unicodeslot=0xA51A, }, [0xA51B]={ category="lo", description="VAI SYLLABLE JEE", direction="l", linebreak="al", unicodeslot=0xA51B, }, [0xA51C]={ category="lo", description="VAI SYLLABLE NJEE", direction="l", linebreak="al", unicodeslot=0xA51C, }, [0xA51D]={ category="lo", description="VAI SYLLABLE YEE", direction="l", linebreak="al", unicodeslot=0xA51D, }, [0xA51E]={ category="lo", description="VAI SYLLABLE KEE", direction="l", linebreak="al", unicodeslot=0xA51E, }, [0xA51F]={ category="lo", description="VAI SYLLABLE NGGEE", direction="l", linebreak="al", unicodeslot=0xA51F, }, [0xA520]={ category="lo", description="VAI SYLLABLE GEE", direction="l", linebreak="al", unicodeslot=0xA520, }, [0xA521]={ category="lo", description="VAI SYLLABLE MEE", direction="l", linebreak="al", unicodeslot=0xA521, }, [0xA522]={ category="lo", description="VAI SYLLABLE NEE", direction="l", linebreak="al", unicodeslot=0xA522, }, [0xA523]={ category="lo", description="VAI SYLLABLE NYEE", direction="l", linebreak="al", unicodeslot=0xA523, }, [0xA524]={ category="lo", description="VAI SYLLABLE I", direction="l", linebreak="al", unicodeslot=0xA524, }, [0xA525]={ category="lo", description="VAI SYLLABLE IN", direction="l", linebreak="al", unicodeslot=0xA525, }, [0xA526]={ category="lo", description="VAI SYLLABLE HI", direction="l", linebreak="al", unicodeslot=0xA526, }, [0xA527]={ category="lo", description="VAI SYLLABLE HIN", direction="l", linebreak="al", unicodeslot=0xA527, }, [0xA528]={ category="lo", description="VAI SYLLABLE WI", direction="l", linebreak="al", unicodeslot=0xA528, }, [0xA529]={ category="lo", description="VAI SYLLABLE WIN", direction="l", linebreak="al", unicodeslot=0xA529, }, [0xA52A]={ category="lo", description="VAI SYLLABLE PI", direction="l", linebreak="al", unicodeslot=0xA52A, }, [0xA52B]={ category="lo", description="VAI SYLLABLE BHI", direction="l", linebreak="al", unicodeslot=0xA52B, }, [0xA52C]={ category="lo", description="VAI SYLLABLE BI", direction="l", linebreak="al", unicodeslot=0xA52C, }, [0xA52D]={ category="lo", description="VAI SYLLABLE MBI", direction="l", linebreak="al", unicodeslot=0xA52D, }, [0xA52E]={ category="lo", description="VAI SYLLABLE KPI", direction="l", linebreak="al", unicodeslot=0xA52E, }, [0xA52F]={ category="lo", description="VAI SYLLABLE MGBI", direction="l", linebreak="al", unicodeslot=0xA52F, }, [0xA530]={ category="lo", description="VAI SYLLABLE GBI", direction="l", linebreak="al", unicodeslot=0xA530, }, [0xA531]={ category="lo", description="VAI SYLLABLE FI", direction="l", linebreak="al", unicodeslot=0xA531, }, [0xA532]={ category="lo", description="VAI SYLLABLE VI", direction="l", linebreak="al", unicodeslot=0xA532, }, [0xA533]={ category="lo", description="VAI SYLLABLE TI", direction="l", linebreak="al", unicodeslot=0xA533, }, [0xA534]={ category="lo", description="VAI SYLLABLE THI", direction="l", linebreak="al", unicodeslot=0xA534, }, [0xA535]={ category="lo", description="VAI SYLLABLE DHI", direction="l", linebreak="al", unicodeslot=0xA535, }, [0xA536]={ category="lo", description="VAI SYLLABLE DHHI", direction="l", linebreak="al", unicodeslot=0xA536, }, [0xA537]={ category="lo", description="VAI SYLLABLE LI", direction="l", linebreak="al", unicodeslot=0xA537, }, [0xA538]={ category="lo", description="VAI SYLLABLE RI", direction="l", linebreak="al", unicodeslot=0xA538, }, [0xA539]={ category="lo", description="VAI SYLLABLE DI", direction="l", linebreak="al", unicodeslot=0xA539, }, [0xA53A]={ category="lo", description="VAI SYLLABLE NDI", direction="l", linebreak="al", unicodeslot=0xA53A, }, [0xA53B]={ category="lo", description="VAI SYLLABLE SI", direction="l", linebreak="al", unicodeslot=0xA53B, }, [0xA53C]={ category="lo", description="VAI SYLLABLE SHI", direction="l", linebreak="al", unicodeslot=0xA53C, }, [0xA53D]={ category="lo", description="VAI SYLLABLE ZI", direction="l", linebreak="al", unicodeslot=0xA53D, }, [0xA53E]={ category="lo", description="VAI SYLLABLE ZHI", direction="l", linebreak="al", unicodeslot=0xA53E, }, [0xA53F]={ category="lo", description="VAI SYLLABLE CI", direction="l", linebreak="al", unicodeslot=0xA53F, }, [0xA540]={ category="lo", description="VAI SYLLABLE JI", direction="l", linebreak="al", unicodeslot=0xA540, }, [0xA541]={ category="lo", description="VAI SYLLABLE NJI", direction="l", linebreak="al", unicodeslot=0xA541, }, [0xA542]={ category="lo", description="VAI SYLLABLE YI", direction="l", linebreak="al", unicodeslot=0xA542, }, [0xA543]={ category="lo", description="VAI SYLLABLE KI", direction="l", linebreak="al", unicodeslot=0xA543, }, [0xA544]={ category="lo", description="VAI SYLLABLE NGGI", direction="l", linebreak="al", unicodeslot=0xA544, }, [0xA545]={ category="lo", description="VAI SYLLABLE GI", direction="l", linebreak="al", unicodeslot=0xA545, }, [0xA546]={ category="lo", description="VAI SYLLABLE MI", direction="l", linebreak="al", unicodeslot=0xA546, }, [0xA547]={ category="lo", description="VAI SYLLABLE NI", direction="l", linebreak="al", unicodeslot=0xA547, }, [0xA548]={ category="lo", description="VAI SYLLABLE NYI", direction="l", linebreak="al", unicodeslot=0xA548, }, [0xA549]={ category="lo", description="VAI SYLLABLE A", direction="l", linebreak="al", unicodeslot=0xA549, }, [0xA54A]={ category="lo", description="VAI SYLLABLE AN", direction="l", linebreak="al", unicodeslot=0xA54A, }, [0xA54B]={ category="lo", description="VAI SYLLABLE NGAN", direction="l", linebreak="al", unicodeslot=0xA54B, }, [0xA54C]={ category="lo", description="VAI SYLLABLE HA", direction="l", linebreak="al", unicodeslot=0xA54C, }, [0xA54D]={ category="lo", description="VAI SYLLABLE HAN", direction="l", linebreak="al", unicodeslot=0xA54D, }, [0xA54E]={ category="lo", description="VAI SYLLABLE WA", direction="l", linebreak="al", unicodeslot=0xA54E, }, [0xA54F]={ category="lo", description="VAI SYLLABLE WAN", direction="l", linebreak="al", unicodeslot=0xA54F, }, [0xA550]={ category="lo", description="VAI SYLLABLE PA", direction="l", linebreak="al", unicodeslot=0xA550, }, [0xA551]={ category="lo", description="VAI SYLLABLE BHA", direction="l", linebreak="al", unicodeslot=0xA551, }, [0xA552]={ category="lo", description="VAI SYLLABLE BA", direction="l", linebreak="al", unicodeslot=0xA552, }, [0xA553]={ category="lo", description="VAI SYLLABLE MBA", direction="l", linebreak="al", unicodeslot=0xA553, }, [0xA554]={ category="lo", description="VAI SYLLABLE KPA", direction="l", linebreak="al", unicodeslot=0xA554, }, [0xA555]={ category="lo", description="VAI SYLLABLE KPAN", direction="l", linebreak="al", unicodeslot=0xA555, }, [0xA556]={ category="lo", description="VAI SYLLABLE MGBA", direction="l", linebreak="al", unicodeslot=0xA556, }, [0xA557]={ category="lo", description="VAI SYLLABLE GBA", direction="l", linebreak="al", unicodeslot=0xA557, }, [0xA558]={ category="lo", description="VAI SYLLABLE FA", direction="l", linebreak="al", unicodeslot=0xA558, }, [0xA559]={ category="lo", description="VAI SYLLABLE VA", direction="l", linebreak="al", unicodeslot=0xA559, }, [0xA55A]={ category="lo", description="VAI SYLLABLE TA", direction="l", linebreak="al", unicodeslot=0xA55A, }, [0xA55B]={ category="lo", description="VAI SYLLABLE THA", direction="l", linebreak="al", unicodeslot=0xA55B, }, [0xA55C]={ category="lo", description="VAI SYLLABLE DHA", direction="l", linebreak="al", unicodeslot=0xA55C, }, [0xA55D]={ category="lo", description="VAI SYLLABLE DHHA", direction="l", linebreak="al", unicodeslot=0xA55D, }, [0xA55E]={ category="lo", description="VAI SYLLABLE LA", direction="l", linebreak="al", unicodeslot=0xA55E, }, [0xA55F]={ category="lo", description="VAI SYLLABLE RA", direction="l", linebreak="al", unicodeslot=0xA55F, }, [0xA560]={ category="lo", description="VAI SYLLABLE DA", direction="l", linebreak="al", unicodeslot=0xA560, }, [0xA561]={ category="lo", description="VAI SYLLABLE NDA", direction="l", linebreak="al", unicodeslot=0xA561, }, [0xA562]={ category="lo", description="VAI SYLLABLE SA", direction="l", linebreak="al", unicodeslot=0xA562, }, [0xA563]={ category="lo", description="VAI SYLLABLE SHA", direction="l", linebreak="al", unicodeslot=0xA563, }, [0xA564]={ category="lo", description="VAI SYLLABLE ZA", direction="l", linebreak="al", unicodeslot=0xA564, }, [0xA565]={ category="lo", description="VAI SYLLABLE ZHA", direction="l", linebreak="al", unicodeslot=0xA565, }, [0xA566]={ category="lo", description="VAI SYLLABLE CA", direction="l", linebreak="al", unicodeslot=0xA566, }, [0xA567]={ category="lo", description="VAI SYLLABLE JA", direction="l", linebreak="al", unicodeslot=0xA567, }, [0xA568]={ category="lo", description="VAI SYLLABLE NJA", direction="l", linebreak="al", unicodeslot=0xA568, }, [0xA569]={ category="lo", description="VAI SYLLABLE YA", direction="l", linebreak="al", unicodeslot=0xA569, }, [0xA56A]={ category="lo", description="VAI SYLLABLE KA", direction="l", linebreak="al", unicodeslot=0xA56A, }, [0xA56B]={ category="lo", description="VAI SYLLABLE KAN", direction="l", linebreak="al", unicodeslot=0xA56B, }, [0xA56C]={ category="lo", description="VAI SYLLABLE NGGA", direction="l", linebreak="al", unicodeslot=0xA56C, }, [0xA56D]={ category="lo", description="VAI SYLLABLE GA", direction="l", linebreak="al", unicodeslot=0xA56D, }, [0xA56E]={ category="lo", description="VAI SYLLABLE MA", direction="l", linebreak="al", unicodeslot=0xA56E, }, [0xA56F]={ category="lo", description="VAI SYLLABLE NA", direction="l", linebreak="al", unicodeslot=0xA56F, }, [0xA570]={ category="lo", description="VAI SYLLABLE NYA", direction="l", linebreak="al", unicodeslot=0xA570, }, [0xA571]={ category="lo", description="VAI SYLLABLE OO", direction="l", linebreak="al", unicodeslot=0xA571, }, [0xA572]={ category="lo", description="VAI SYLLABLE OON", direction="l", linebreak="al", unicodeslot=0xA572, }, [0xA573]={ category="lo", description="VAI SYLLABLE HOO", direction="l", linebreak="al", unicodeslot=0xA573, }, [0xA574]={ category="lo", description="VAI SYLLABLE WOO", direction="l", linebreak="al", unicodeslot=0xA574, }, [0xA575]={ category="lo", description="VAI SYLLABLE WOON", direction="l", linebreak="al", unicodeslot=0xA575, }, [0xA576]={ category="lo", description="VAI SYLLABLE POO", direction="l", linebreak="al", unicodeslot=0xA576, }, [0xA577]={ category="lo", description="VAI SYLLABLE BHOO", direction="l", linebreak="al", unicodeslot=0xA577, }, [0xA578]={ category="lo", description="VAI SYLLABLE BOO", direction="l", linebreak="al", unicodeslot=0xA578, }, [0xA579]={ category="lo", description="VAI SYLLABLE MBOO", direction="l", linebreak="al", unicodeslot=0xA579, }, [0xA57A]={ category="lo", description="VAI SYLLABLE KPOO", direction="l", linebreak="al", unicodeslot=0xA57A, }, [0xA57B]={ category="lo", description="VAI SYLLABLE MGBOO", direction="l", linebreak="al", unicodeslot=0xA57B, }, [0xA57C]={ category="lo", description="VAI SYLLABLE GBOO", direction="l", linebreak="al", unicodeslot=0xA57C, }, [0xA57D]={ category="lo", description="VAI SYLLABLE FOO", direction="l", linebreak="al", unicodeslot=0xA57D, }, [0xA57E]={ category="lo", description="VAI SYLLABLE VOO", direction="l", linebreak="al", unicodeslot=0xA57E, }, [0xA57F]={ category="lo", description="VAI SYLLABLE TOO", direction="l", linebreak="al", unicodeslot=0xA57F, }, [0xA580]={ category="lo", description="VAI SYLLABLE THOO", direction="l", linebreak="al", unicodeslot=0xA580, }, [0xA581]={ category="lo", description="VAI SYLLABLE DHOO", direction="l", linebreak="al", unicodeslot=0xA581, }, [0xA582]={ category="lo", description="VAI SYLLABLE DHHOO", direction="l", linebreak="al", unicodeslot=0xA582, }, [0xA583]={ category="lo", description="VAI SYLLABLE LOO", direction="l", linebreak="al", unicodeslot=0xA583, }, [0xA584]={ category="lo", description="VAI SYLLABLE ROO", direction="l", linebreak="al", unicodeslot=0xA584, }, [0xA585]={ category="lo", description="VAI SYLLABLE DOO", direction="l", linebreak="al", unicodeslot=0xA585, }, [0xA586]={ category="lo", description="VAI SYLLABLE NDOO", direction="l", linebreak="al", unicodeslot=0xA586, }, [0xA587]={ category="lo", description="VAI SYLLABLE SOO", direction="l", linebreak="al", unicodeslot=0xA587, }, [0xA588]={ category="lo", description="VAI SYLLABLE SHOO", direction="l", linebreak="al", unicodeslot=0xA588, }, [0xA589]={ category="lo", description="VAI SYLLABLE ZOO", direction="l", linebreak="al", unicodeslot=0xA589, }, [0xA58A]={ category="lo", description="VAI SYLLABLE ZHOO", direction="l", linebreak="al", unicodeslot=0xA58A, }, [0xA58B]={ category="lo", description="VAI SYLLABLE COO", direction="l", linebreak="al", unicodeslot=0xA58B, }, [0xA58C]={ category="lo", description="VAI SYLLABLE JOO", direction="l", linebreak="al", unicodeslot=0xA58C, }, [0xA58D]={ category="lo", description="VAI SYLLABLE NJOO", direction="l", linebreak="al", unicodeslot=0xA58D, }, [0xA58E]={ category="lo", description="VAI SYLLABLE YOO", direction="l", linebreak="al", unicodeslot=0xA58E, }, [0xA58F]={ category="lo", description="VAI SYLLABLE KOO", direction="l", linebreak="al", unicodeslot=0xA58F, }, [0xA590]={ category="lo", description="VAI SYLLABLE NGGOO", direction="l", linebreak="al", unicodeslot=0xA590, }, [0xA591]={ category="lo", description="VAI SYLLABLE GOO", direction="l", linebreak="al", unicodeslot=0xA591, }, [0xA592]={ category="lo", description="VAI SYLLABLE MOO", direction="l", linebreak="al", unicodeslot=0xA592, }, [0xA593]={ category="lo", description="VAI SYLLABLE NOO", direction="l", linebreak="al", unicodeslot=0xA593, }, [0xA594]={ category="lo", description="VAI SYLLABLE NYOO", direction="l", linebreak="al", unicodeslot=0xA594, }, [0xA595]={ category="lo", description="VAI SYLLABLE U", direction="l", linebreak="al", unicodeslot=0xA595, }, [0xA596]={ category="lo", description="VAI SYLLABLE UN", direction="l", linebreak="al", unicodeslot=0xA596, }, [0xA597]={ category="lo", description="VAI SYLLABLE HU", direction="l", linebreak="al", unicodeslot=0xA597, }, [0xA598]={ category="lo", description="VAI SYLLABLE HUN", direction="l", linebreak="al", unicodeslot=0xA598, }, [0xA599]={ category="lo", description="VAI SYLLABLE WU", direction="l", linebreak="al", unicodeslot=0xA599, }, [0xA59A]={ category="lo", description="VAI SYLLABLE WUN", direction="l", linebreak="al", unicodeslot=0xA59A, }, [0xA59B]={ category="lo", description="VAI SYLLABLE PU", direction="l", linebreak="al", unicodeslot=0xA59B, }, [0xA59C]={ category="lo", description="VAI SYLLABLE BHU", direction="l", linebreak="al", unicodeslot=0xA59C, }, [0xA59D]={ category="lo", description="VAI SYLLABLE BU", direction="l", linebreak="al", unicodeslot=0xA59D, }, [0xA59E]={ category="lo", description="VAI SYLLABLE MBU", direction="l", linebreak="al", unicodeslot=0xA59E, }, [0xA59F]={ category="lo", description="VAI SYLLABLE KPU", direction="l", linebreak="al", unicodeslot=0xA59F, }, [0xA5A0]={ category="lo", description="VAI SYLLABLE MGBU", direction="l", linebreak="al", unicodeslot=0xA5A0, }, [0xA5A1]={ category="lo", description="VAI SYLLABLE GBU", direction="l", linebreak="al", unicodeslot=0xA5A1, }, [0xA5A2]={ category="lo", description="VAI SYLLABLE FU", direction="l", linebreak="al", unicodeslot=0xA5A2, }, [0xA5A3]={ category="lo", description="VAI SYLLABLE VU", direction="l", linebreak="al", unicodeslot=0xA5A3, }, [0xA5A4]={ category="lo", description="VAI SYLLABLE TU", direction="l", linebreak="al", unicodeslot=0xA5A4, }, [0xA5A5]={ category="lo", description="VAI SYLLABLE THU", direction="l", linebreak="al", unicodeslot=0xA5A5, }, [0xA5A6]={ category="lo", description="VAI SYLLABLE DHU", direction="l", linebreak="al", unicodeslot=0xA5A6, }, [0xA5A7]={ category="lo", description="VAI SYLLABLE DHHU", direction="l", linebreak="al", unicodeslot=0xA5A7, }, [0xA5A8]={ category="lo", description="VAI SYLLABLE LU", direction="l", linebreak="al", unicodeslot=0xA5A8, }, [0xA5A9]={ category="lo", description="VAI SYLLABLE RU", direction="l", linebreak="al", unicodeslot=0xA5A9, }, [0xA5AA]={ category="lo", description="VAI SYLLABLE DU", direction="l", linebreak="al", unicodeslot=0xA5AA, }, [0xA5AB]={ category="lo", description="VAI SYLLABLE NDU", direction="l", linebreak="al", unicodeslot=0xA5AB, }, [0xA5AC]={ category="lo", description="VAI SYLLABLE SU", direction="l", linebreak="al", unicodeslot=0xA5AC, }, [0xA5AD]={ category="lo", description="VAI SYLLABLE SHU", direction="l", linebreak="al", unicodeslot=0xA5AD, }, [0xA5AE]={ category="lo", description="VAI SYLLABLE ZU", direction="l", linebreak="al", unicodeslot=0xA5AE, }, [0xA5AF]={ category="lo", description="VAI SYLLABLE ZHU", direction="l", linebreak="al", unicodeslot=0xA5AF, }, [0xA5B0]={ category="lo", description="VAI SYLLABLE CU", direction="l", linebreak="al", unicodeslot=0xA5B0, }, [0xA5B1]={ category="lo", description="VAI SYLLABLE JU", direction="l", linebreak="al", unicodeslot=0xA5B1, }, [0xA5B2]={ category="lo", description="VAI SYLLABLE NJU", direction="l", linebreak="al", unicodeslot=0xA5B2, }, [0xA5B3]={ category="lo", description="VAI SYLLABLE YU", direction="l", linebreak="al", unicodeslot=0xA5B3, }, [0xA5B4]={ category="lo", description="VAI SYLLABLE KU", direction="l", linebreak="al", unicodeslot=0xA5B4, }, [0xA5B5]={ category="lo", description="VAI SYLLABLE NGGU", direction="l", linebreak="al", unicodeslot=0xA5B5, }, [0xA5B6]={ category="lo", description="VAI SYLLABLE GU", direction="l", linebreak="al", unicodeslot=0xA5B6, }, [0xA5B7]={ category="lo", description="VAI SYLLABLE MU", direction="l", linebreak="al", unicodeslot=0xA5B7, }, [0xA5B8]={ category="lo", description="VAI SYLLABLE NU", direction="l", linebreak="al", unicodeslot=0xA5B8, }, [0xA5B9]={ category="lo", description="VAI SYLLABLE NYU", direction="l", linebreak="al", unicodeslot=0xA5B9, }, [0xA5BA]={ category="lo", description="VAI SYLLABLE O", direction="l", linebreak="al", unicodeslot=0xA5BA, }, [0xA5BB]={ category="lo", description="VAI SYLLABLE ON", direction="l", linebreak="al", unicodeslot=0xA5BB, }, [0xA5BC]={ category="lo", description="VAI SYLLABLE NGON", direction="l", linebreak="al", unicodeslot=0xA5BC, }, [0xA5BD]={ category="lo", description="VAI SYLLABLE HO", direction="l", linebreak="al", unicodeslot=0xA5BD, }, [0xA5BE]={ category="lo", description="VAI SYLLABLE HON", direction="l", linebreak="al", unicodeslot=0xA5BE, }, [0xA5BF]={ category="lo", description="VAI SYLLABLE WO", direction="l", linebreak="al", unicodeslot=0xA5BF, }, [0xA5C0]={ category="lo", description="VAI SYLLABLE WON", direction="l", linebreak="al", unicodeslot=0xA5C0, }, [0xA5C1]={ category="lo", description="VAI SYLLABLE PO", direction="l", linebreak="al", unicodeslot=0xA5C1, }, [0xA5C2]={ category="lo", description="VAI SYLLABLE BHO", direction="l", linebreak="al", unicodeslot=0xA5C2, }, [0xA5C3]={ category="lo", description="VAI SYLLABLE BO", direction="l", linebreak="al", unicodeslot=0xA5C3, }, [0xA5C4]={ category="lo", description="VAI SYLLABLE MBO", direction="l", linebreak="al", unicodeslot=0xA5C4, }, [0xA5C5]={ category="lo", description="VAI SYLLABLE KPO", direction="l", linebreak="al", unicodeslot=0xA5C5, }, [0xA5C6]={ category="lo", description="VAI SYLLABLE MGBO", direction="l", linebreak="al", unicodeslot=0xA5C6, }, [0xA5C7]={ category="lo", description="VAI SYLLABLE GBO", direction="l", linebreak="al", unicodeslot=0xA5C7, }, [0xA5C8]={ category="lo", description="VAI SYLLABLE GBON", direction="l", linebreak="al", unicodeslot=0xA5C8, }, [0xA5C9]={ category="lo", description="VAI SYLLABLE FO", direction="l", linebreak="al", unicodeslot=0xA5C9, }, [0xA5CA]={ category="lo", description="VAI SYLLABLE VO", direction="l", linebreak="al", unicodeslot=0xA5CA, }, [0xA5CB]={ category="lo", description="VAI SYLLABLE TO", direction="l", linebreak="al", unicodeslot=0xA5CB, }, [0xA5CC]={ category="lo", description="VAI SYLLABLE THO", direction="l", linebreak="al", unicodeslot=0xA5CC, }, [0xA5CD]={ category="lo", description="VAI SYLLABLE DHO", direction="l", linebreak="al", unicodeslot=0xA5CD, }, [0xA5CE]={ category="lo", description="VAI SYLLABLE DHHO", direction="l", linebreak="al", unicodeslot=0xA5CE, }, [0xA5CF]={ category="lo", description="VAI SYLLABLE LO", direction="l", linebreak="al", unicodeslot=0xA5CF, }, [0xA5D0]={ category="lo", description="VAI SYLLABLE RO", direction="l", linebreak="al", unicodeslot=0xA5D0, }, [0xA5D1]={ category="lo", description="VAI SYLLABLE DO", direction="l", linebreak="al", unicodeslot=0xA5D1, }, [0xA5D2]={ category="lo", description="VAI SYLLABLE NDO", direction="l", linebreak="al", unicodeslot=0xA5D2, }, [0xA5D3]={ category="lo", description="VAI SYLLABLE SO", direction="l", linebreak="al", unicodeslot=0xA5D3, }, [0xA5D4]={ category="lo", description="VAI SYLLABLE SHO", direction="l", linebreak="al", unicodeslot=0xA5D4, }, [0xA5D5]={ category="lo", description="VAI SYLLABLE ZO", direction="l", linebreak="al", unicodeslot=0xA5D5, }, [0xA5D6]={ category="lo", description="VAI SYLLABLE ZHO", direction="l", linebreak="al", unicodeslot=0xA5D6, }, [0xA5D7]={ category="lo", description="VAI SYLLABLE CO", direction="l", linebreak="al", unicodeslot=0xA5D7, }, [0xA5D8]={ category="lo", description="VAI SYLLABLE JO", direction="l", linebreak="al", unicodeslot=0xA5D8, }, [0xA5D9]={ category="lo", description="VAI SYLLABLE NJO", direction="l", linebreak="al", unicodeslot=0xA5D9, }, [0xA5DA]={ category="lo", description="VAI SYLLABLE YO", direction="l", linebreak="al", unicodeslot=0xA5DA, }, [0xA5DB]={ category="lo", description="VAI SYLLABLE KO", direction="l", linebreak="al", unicodeslot=0xA5DB, }, [0xA5DC]={ category="lo", description="VAI SYLLABLE NGGO", direction="l", linebreak="al", unicodeslot=0xA5DC, }, [0xA5DD]={ category="lo", description="VAI SYLLABLE GO", direction="l", linebreak="al", unicodeslot=0xA5DD, }, [0xA5DE]={ category="lo", description="VAI SYLLABLE MO", direction="l", linebreak="al", unicodeslot=0xA5DE, }, [0xA5DF]={ category="lo", description="VAI SYLLABLE NO", direction="l", linebreak="al", unicodeslot=0xA5DF, }, [0xA5E0]={ category="lo", description="VAI SYLLABLE NYO", direction="l", linebreak="al", unicodeslot=0xA5E0, }, [0xA5E1]={ category="lo", description="VAI SYLLABLE E", direction="l", linebreak="al", unicodeslot=0xA5E1, }, [0xA5E2]={ category="lo", description="VAI SYLLABLE EN", direction="l", linebreak="al", unicodeslot=0xA5E2, }, [0xA5E3]={ category="lo", description="VAI SYLLABLE NGEN", direction="l", linebreak="al", unicodeslot=0xA5E3, }, [0xA5E4]={ category="lo", description="VAI SYLLABLE HE", direction="l", linebreak="al", unicodeslot=0xA5E4, }, [0xA5E5]={ category="lo", description="VAI SYLLABLE HEN", direction="l", linebreak="al", unicodeslot=0xA5E5, }, [0xA5E6]={ category="lo", description="VAI SYLLABLE WE", direction="l", linebreak="al", unicodeslot=0xA5E6, }, [0xA5E7]={ category="lo", description="VAI SYLLABLE WEN", direction="l", linebreak="al", unicodeslot=0xA5E7, }, [0xA5E8]={ category="lo", description="VAI SYLLABLE PE", direction="l", linebreak="al", unicodeslot=0xA5E8, }, [0xA5E9]={ category="lo", description="VAI SYLLABLE BHE", direction="l", linebreak="al", unicodeslot=0xA5E9, }, [0xA5EA]={ category="lo", description="VAI SYLLABLE BE", direction="l", linebreak="al", unicodeslot=0xA5EA, }, [0xA5EB]={ category="lo", description="VAI SYLLABLE MBE", direction="l", linebreak="al", unicodeslot=0xA5EB, }, [0xA5EC]={ category="lo", description="VAI SYLLABLE KPE", direction="l", linebreak="al", unicodeslot=0xA5EC, }, [0xA5ED]={ category="lo", description="VAI SYLLABLE KPEN", direction="l", linebreak="al", unicodeslot=0xA5ED, }, [0xA5EE]={ category="lo", description="VAI SYLLABLE MGBE", direction="l", linebreak="al", unicodeslot=0xA5EE, }, [0xA5EF]={ category="lo", description="VAI SYLLABLE GBE", direction="l", linebreak="al", unicodeslot=0xA5EF, }, [0xA5F0]={ category="lo", description="VAI SYLLABLE GBEN", direction="l", linebreak="al", unicodeslot=0xA5F0, }, [0xA5F1]={ category="lo", description="VAI SYLLABLE FE", direction="l", linebreak="al", unicodeslot=0xA5F1, }, [0xA5F2]={ category="lo", description="VAI SYLLABLE VE", direction="l", linebreak="al", unicodeslot=0xA5F2, }, [0xA5F3]={ category="lo", description="VAI SYLLABLE TE", direction="l", linebreak="al", unicodeslot=0xA5F3, }, [0xA5F4]={ category="lo", description="VAI SYLLABLE THE", direction="l", linebreak="al", unicodeslot=0xA5F4, }, [0xA5F5]={ category="lo", description="VAI SYLLABLE DHE", direction="l", linebreak="al", unicodeslot=0xA5F5, }, [0xA5F6]={ category="lo", description="VAI SYLLABLE DHHE", direction="l", linebreak="al", unicodeslot=0xA5F6, }, [0xA5F7]={ category="lo", description="VAI SYLLABLE LE", direction="l", linebreak="al", unicodeslot=0xA5F7, }, [0xA5F8]={ category="lo", description="VAI SYLLABLE RE", direction="l", linebreak="al", unicodeslot=0xA5F8, }, [0xA5F9]={ category="lo", description="VAI SYLLABLE DE", direction="l", linebreak="al", unicodeslot=0xA5F9, }, [0xA5FA]={ category="lo", description="VAI SYLLABLE NDE", direction="l", linebreak="al", unicodeslot=0xA5FA, }, [0xA5FB]={ category="lo", description="VAI SYLLABLE SE", direction="l", linebreak="al", unicodeslot=0xA5FB, }, [0xA5FC]={ category="lo", description="VAI SYLLABLE SHE", direction="l", linebreak="al", unicodeslot=0xA5FC, }, [0xA5FD]={ category="lo", description="VAI SYLLABLE ZE", direction="l", linebreak="al", unicodeslot=0xA5FD, }, [0xA5FE]={ category="lo", description="VAI SYLLABLE ZHE", direction="l", linebreak="al", unicodeslot=0xA5FE, }, [0xA5FF]={ category="lo", description="VAI SYLLABLE CE", direction="l", linebreak="al", unicodeslot=0xA5FF, }, [0xA600]={ category="lo", description="VAI SYLLABLE JE", direction="l", linebreak="al", unicodeslot=0xA600, }, [0xA601]={ category="lo", description="VAI SYLLABLE NJE", direction="l", linebreak="al", unicodeslot=0xA601, }, [0xA602]={ category="lo", description="VAI SYLLABLE YE", direction="l", linebreak="al", unicodeslot=0xA602, }, [0xA603]={ category="lo", description="VAI SYLLABLE KE", direction="l", linebreak="al", unicodeslot=0xA603, }, [0xA604]={ category="lo", description="VAI SYLLABLE NGGE", direction="l", linebreak="al", unicodeslot=0xA604, }, [0xA605]={ category="lo", description="VAI SYLLABLE NGGEN", direction="l", linebreak="al", unicodeslot=0xA605, }, [0xA606]={ category="lo", description="VAI SYLLABLE GE", direction="l", linebreak="al", unicodeslot=0xA606, }, [0xA607]={ category="lo", description="VAI SYLLABLE GEN", direction="l", linebreak="al", unicodeslot=0xA607, }, [0xA608]={ category="lo", description="VAI SYLLABLE ME", direction="l", linebreak="al", unicodeslot=0xA608, }, [0xA609]={ category="lo", description="VAI SYLLABLE NE", direction="l", linebreak="al", unicodeslot=0xA609, }, [0xA60A]={ category="lo", description="VAI SYLLABLE NYE", direction="l", linebreak="al", unicodeslot=0xA60A, }, [0xA60B]={ category="lo", description="VAI SYLLABLE NG", direction="l", linebreak="al", unicodeslot=0xA60B, }, [0xA60C]={ category="lm", description="VAI SYLLABLE LENGTHENER", direction="l", linebreak="al", unicodeslot=0xA60C, }, [0xA60D]={ category="po", description="VAI COMMA", direction="on", linebreak="ba", unicodeslot=0xA60D, }, [0xA60E]={ category="po", description="VAI FULL STOP", direction="on", linebreak="ex", unicodeslot=0xA60E, }, [0xA60F]={ category="po", description="VAI QUESTION MARK", direction="on", linebreak="ba", unicodeslot=0xA60F, }, [0xA610]={ category="lo", description="VAI SYLLABLE NDOLE FA", direction="l", linebreak="al", unicodeslot=0xA610, }, [0xA611]={ category="lo", description="VAI SYLLABLE NDOLE KA", direction="l", linebreak="al", unicodeslot=0xA611, }, [0xA612]={ category="lo", description="VAI SYLLABLE NDOLE SOO", direction="l", linebreak="al", unicodeslot=0xA612, }, [0xA613]={ category="lo", description="VAI SYMBOL FEENG", direction="l", linebreak="al", unicodeslot=0xA613, }, [0xA614]={ category="lo", description="VAI SYMBOL KEENG", direction="l", linebreak="al", unicodeslot=0xA614, }, [0xA615]={ category="lo", description="VAI SYMBOL TING", direction="l", linebreak="al", unicodeslot=0xA615, }, [0xA616]={ category="lo", description="VAI SYMBOL NII", direction="l", linebreak="al", unicodeslot=0xA616, }, [0xA617]={ category="lo", description="VAI SYMBOL BANG", direction="l", linebreak="al", unicodeslot=0xA617, }, [0xA618]={ category="lo", description="VAI SYMBOL FAA", direction="l", linebreak="al", unicodeslot=0xA618, }, [0xA619]={ category="lo", description="VAI SYMBOL TAA", direction="l", linebreak="al", unicodeslot=0xA619, }, [0xA61A]={ category="lo", description="VAI SYMBOL DANG", direction="l", linebreak="al", unicodeslot=0xA61A, }, [0xA61B]={ category="lo", description="VAI SYMBOL DOONG", direction="l", linebreak="al", unicodeslot=0xA61B, }, [0xA61C]={ category="lo", description="VAI SYMBOL KUNG", direction="l", linebreak="al", unicodeslot=0xA61C, }, [0xA61D]={ category="lo", description="VAI SYMBOL TONG", direction="l", linebreak="al", unicodeslot=0xA61D, }, [0xA61E]={ category="lo", description="VAI SYMBOL DO-O", direction="l", linebreak="al", unicodeslot=0xA61E, }, [0xA61F]={ category="lo", description="VAI SYMBOL JONG", direction="l", linebreak="al", unicodeslot=0xA61F, }, [0xA620]={ category="nd", description="VAI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0xA620, }, [0xA621]={ category="nd", description="VAI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0xA621, }, [0xA622]={ category="nd", description="VAI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0xA622, }, [0xA623]={ category="nd", description="VAI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0xA623, }, [0xA624]={ category="nd", description="VAI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0xA624, }, [0xA625]={ category="nd", description="VAI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0xA625, }, [0xA626]={ category="nd", description="VAI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0xA626, }, [0xA627]={ category="nd", description="VAI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0xA627, }, [0xA628]={ category="nd", description="VAI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0xA628, }, [0xA629]={ category="nd", description="VAI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0xA629, }, [0xA62A]={ category="lo", description="VAI SYLLABLE NDOLE MA", direction="l", linebreak="al", unicodeslot=0xA62A, }, [0xA62B]={ category="lo", description="VAI SYLLABLE NDOLE DO", direction="l", linebreak="al", unicodeslot=0xA62B, }, [0xA640]={ category="lu", description="CYRILLIC CAPITAL LETTER ZEMLYA", direction="l", linebreak="al", unicodeslot=0xA640, }, [0xA641]={ category="ll", description="CYRILLIC SMALL LETTER ZEMLYA", direction="l", linebreak="al", unicodeslot=0xA641, }, [0xA642]={ category="lu", description="CYRILLIC CAPITAL LETTER DZELO", direction="l", linebreak="al", unicodeslot=0xA642, }, [0xA643]={ category="ll", description="CYRILLIC SMALL LETTER DZELO", direction="l", linebreak="al", unicodeslot=0xA643, }, [0xA644]={ category="lu", description="CYRILLIC CAPITAL LETTER REVERSED DZE", direction="l", linebreak="al", unicodeslot=0xA644, }, [0xA645]={ category="ll", description="CYRILLIC SMALL LETTER REVERSED DZE", direction="l", linebreak="al", unicodeslot=0xA645, }, [0xA646]={ category="lu", description="CYRILLIC CAPITAL LETTER IOTA", direction="l", linebreak="al", unicodeslot=0xA646, }, [0xA647]={ category="ll", description="CYRILLIC SMALL LETTER IOTA", direction="l", linebreak="al", unicodeslot=0xA647, }, [0xA648]={ category="lu", description="CYRILLIC CAPITAL LETTER DJERV", direction="l", linebreak="al", unicodeslot=0xA648, }, [0xA649]={ category="ll", description="CYRILLIC SMALL LETTER DJERV", direction="l", linebreak="al", unicodeslot=0xA649, }, [0xA64A]={ category="lu", description="CYRILLIC CAPITAL LETTER MONOGRAPH UK", direction="l", linebreak="al", unicodeslot=0xA64A, }, [0xA64B]={ category="ll", description="CYRILLIC SMALL LETTER MONOGRAPH UK", direction="l", linebreak="al", unicodeslot=0xA64B, }, [0xA64C]={ category="lu", description="CYRILLIC CAPITAL LETTER BROAD OMEGA", direction="l", linebreak="al", unicodeslot=0xA64C, }, [0xA64D]={ category="ll", description="CYRILLIC SMALL LETTER BROAD OMEGA", direction="l", linebreak="al", unicodeslot=0xA64D, }, [0xA64E]={ category="lu", description="CYRILLIC CAPITAL LETTER NEUTRAL YER", direction="l", linebreak="al", unicodeslot=0xA64E, }, [0xA64F]={ category="ll", description="CYRILLIC SMALL LETTER NEUTRAL YER", direction="l", linebreak="al", unicodeslot=0xA64F, }, [0xA650]={ category="lu", description="CYRILLIC CAPITAL LETTER YERU WITH BACK YER", direction="l", linebreak="al", unicodeslot=0xA650, }, [0xA651]={ category="ll", description="CYRILLIC SMALL LETTER YERU WITH BACK YER", direction="l", linebreak="al", unicodeslot=0xA651, }, [0xA652]={ category="lu", description="CYRILLIC CAPITAL LETTER IOTIFIED YAT", direction="l", linebreak="al", unicodeslot=0xA652, }, [0xA653]={ category="ll", description="CYRILLIC SMALL LETTER IOTIFIED YAT", direction="l", linebreak="al", unicodeslot=0xA653, }, [0xA654]={ category="lu", description="CYRILLIC CAPITAL LETTER REVERSED YU", direction="l", linebreak="al", unicodeslot=0xA654, }, [0xA655]={ category="ll", description="CYRILLIC SMALL LETTER REVERSED YU", direction="l", linebreak="al", unicodeslot=0xA655, }, [0xA656]={ category="lu", description="CYRILLIC CAPITAL LETTER IOTIFIED A", direction="l", linebreak="al", unicodeslot=0xA656, }, [0xA657]={ category="ll", description="CYRILLIC SMALL LETTER IOTIFIED A", direction="l", linebreak="al", unicodeslot=0xA657, }, [0xA658]={ category="lu", description="CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS", direction="l", linebreak="al", unicodeslot=0xA658, }, [0xA659]={ category="ll", description="CYRILLIC SMALL LETTER CLOSED LITTLE YUS", direction="l", linebreak="al", unicodeslot=0xA659, }, [0xA65A]={ category="lu", description="CYRILLIC CAPITAL LETTER BLENDED YUS", direction="l", linebreak="al", unicodeslot=0xA65A, }, [0xA65B]={ category="ll", description="CYRILLIC SMALL LETTER BLENDED YUS", direction="l", linebreak="al", unicodeslot=0xA65B, }, [0xA65C]={ category="lu", description="CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS", direction="l", linebreak="al", unicodeslot=0xA65C, }, [0xA65D]={ category="ll", description="CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS", direction="l", linebreak="al", unicodeslot=0xA65D, }, [0xA65E]={ category="lu", description="CYRILLIC CAPITAL LETTER YN", direction="l", linebreak="al", unicodeslot=0xA65E, }, [0xA65F]={ category="ll", description="CYRILLIC SMALL LETTER YN", direction="l", linebreak="al", unicodeslot=0xA65F, }, [0xA660]={ category="lu", description="CYRILLIC CAPITAL LETTER REVERSED TSE", direction="l", linebreak="al", unicodeslot=0xA660, }, [0xA661]={ category="ll", description="CYRILLIC SMALL LETTER REVERSED TSE", direction="l", linebreak="al", unicodeslot=0xA661, }, [0xA662]={ category="lu", description="CYRILLIC CAPITAL LETTER SOFT DE", direction="l", linebreak="al", unicodeslot=0xA662, }, [0xA663]={ category="ll", description="CYRILLIC SMALL LETTER SOFT DE", direction="l", linebreak="al", unicodeslot=0xA663, }, [0xA664]={ category="lu", description="CYRILLIC CAPITAL LETTER SOFT EL", direction="l", linebreak="al", unicodeslot=0xA664, }, [0xA665]={ category="ll", description="CYRILLIC SMALL LETTER SOFT EL", direction="l", linebreak="al", unicodeslot=0xA665, }, [0xA666]={ category="lu", description="CYRILLIC CAPITAL LETTER SOFT EM", direction="l", linebreak="al", unicodeslot=0xA666, }, [0xA667]={ category="ll", description="CYRILLIC SMALL LETTER SOFT EM", direction="l", linebreak="al", unicodeslot=0xA667, }, [0xA668]={ category="lu", description="CYRILLIC CAPITAL LETTER MONOCULAR O", direction="l", linebreak="al", unicodeslot=0xA668, }, [0xA669]={ category="ll", description="CYRILLIC SMALL LETTER MONOCULAR O", direction="l", linebreak="al", unicodeslot=0xA669, }, [0xA66A]={ category="lu", description="CYRILLIC CAPITAL LETTER BINOCULAR O", direction="l", linebreak="al", unicodeslot=0xA66A, }, [0xA66B]={ category="ll", description="CYRILLIC SMALL LETTER BINOCULAR O", direction="l", linebreak="al", unicodeslot=0xA66B, }, [0xA66C]={ category="lu", description="CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O", direction="l", linebreak="al", unicodeslot=0xA66C, }, [0xA66D]={ category="ll", description="CYRILLIC SMALL LETTER DOUBLE MONOCULAR O", direction="l", linebreak="al", unicodeslot=0xA66D, }, [0xA66E]={ category="lo", description="CYRILLIC LETTER MULTIOCULAR O", direction="l", linebreak="al", unicodeslot=0xA66E, }, [0xA66F]={ category="mn", description="COMBINING CYRILLIC VZMET", direction="nsm", linebreak="cm", unicodeslot=0xA66F, }, [0xA670]={ category="me", description="COMBINING CYRILLIC TEN MILLIONS SIGN", direction="nsm", linebreak="cm", unicodeslot=0xA670, }, [0xA671]={ category="me", description="COMBINING CYRILLIC HUNDRED MILLIONS SIGN", direction="nsm", linebreak="cm", unicodeslot=0xA671, }, [0xA672]={ category="me", description="COMBINING CYRILLIC THOUSAND MILLIONS SIGN", direction="nsm", linebreak="cm", unicodeslot=0xA672, }, [0xA673]={ category="po", description="SLAVONIC ASTERISK", direction="on", linebreak="al", unicodeslot=0xA673, }, [0xA674]={ category="mn", description="COMBINING CYRILLIC LETTER UKRAINIAN IE", direction="nsm", linebreak="cm", unicodeslot=0xA674, }, [0xA675]={ category="mn", description="COMBINING CYRILLIC LETTER I", direction="nsm", linebreak="cm", unicodeslot=0xA675, }, [0xA676]={ category="mn", description="COMBINING CYRILLIC LETTER YI", direction="nsm", linebreak="cm", unicodeslot=0xA676, }, [0xA677]={ category="mn", description="COMBINING CYRILLIC LETTER U", direction="nsm", linebreak="cm", unicodeslot=0xA677, }, [0xA678]={ category="mn", description="COMBINING CYRILLIC LETTER HARD SIGN", direction="nsm", linebreak="cm", unicodeslot=0xA678, }, [0xA679]={ category="mn", description="COMBINING CYRILLIC LETTER YERU", direction="nsm", linebreak="cm", unicodeslot=0xA679, }, [0xA67A]={ category="mn", description="COMBINING CYRILLIC LETTER SOFT SIGN", direction="nsm", linebreak="cm", unicodeslot=0xA67A, }, [0xA67B]={ category="mn", description="COMBINING CYRILLIC LETTER OMEGA", direction="nsm", linebreak="cm", unicodeslot=0xA67B, }, [0xA67C]={ category="mn", description="COMBINING CYRILLIC KAVYKA", direction="nsm", linebreak="cm", unicodeslot=0xA67C, }, [0xA67D]={ category="mn", description="COMBINING CYRILLIC PAYEROK", direction="nsm", linebreak="cm", unicodeslot=0xA67D, }, [0xA67E]={ category="po", description="CYRILLIC KAVYKA", direction="on", linebreak="al", unicodeslot=0xA67E, }, [0xA67F]={ category="lm", description="CYRILLIC PAYEROK", direction="on", linebreak="al", unicodeslot=0xA67F, }, [0xA680]={ category="lu", description="CYRILLIC CAPITAL LETTER DWE", direction="l", linebreak="al", unicodeslot=0xA680, }, [0xA681]={ category="ll", description="CYRILLIC SMALL LETTER DWE", direction="l", linebreak="al", unicodeslot=0xA681, }, [0xA682]={ category="lu", description="CYRILLIC CAPITAL LETTER DZWE", direction="l", linebreak="al", unicodeslot=0xA682, }, [0xA683]={ category="ll", description="CYRILLIC SMALL LETTER DZWE", direction="l", linebreak="al", unicodeslot=0xA683, }, [0xA684]={ category="lu", description="CYRILLIC CAPITAL LETTER ZHWE", direction="l", linebreak="al", unicodeslot=0xA684, }, [0xA685]={ category="ll", description="CYRILLIC SMALL LETTER ZHWE", direction="l", linebreak="al", unicodeslot=0xA685, }, [0xA686]={ category="lu", description="CYRILLIC CAPITAL LETTER CCHE", direction="l", linebreak="al", unicodeslot=0xA686, }, [0xA687]={ category="ll", description="CYRILLIC SMALL LETTER CCHE", direction="l", linebreak="al", unicodeslot=0xA687, }, [0xA688]={ category="lu", description="CYRILLIC CAPITAL LETTER DZZE", direction="l", linebreak="al", unicodeslot=0xA688, }, [0xA689]={ category="ll", description="CYRILLIC SMALL LETTER DZZE", direction="l", linebreak="al", unicodeslot=0xA689, }, [0xA68A]={ category="lu", description="CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK", direction="l", linebreak="al", unicodeslot=0xA68A, }, [0xA68B]={ category="ll", description="CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK", direction="l", linebreak="al", unicodeslot=0xA68B, }, [0xA68C]={ category="lu", description="CYRILLIC CAPITAL LETTER TWE", direction="l", linebreak="al", unicodeslot=0xA68C, }, [0xA68D]={ category="ll", description="CYRILLIC SMALL LETTER TWE", direction="l", linebreak="al", unicodeslot=0xA68D, }, [0xA68E]={ category="lu", description="CYRILLIC CAPITAL LETTER TSWE", direction="l", linebreak="al", unicodeslot=0xA68E, }, [0xA68F]={ category="ll", description="CYRILLIC SMALL LETTER TSWE", direction="l", linebreak="al", unicodeslot=0xA68F, }, [0xA690]={ category="lu", description="CYRILLIC CAPITAL LETTER TSSE", direction="l", linebreak="al", unicodeslot=0xA690, }, [0xA691]={ category="ll", description="CYRILLIC SMALL LETTER TSSE", direction="l", linebreak="al", unicodeslot=0xA691, }, [0xA692]={ category="lu", description="CYRILLIC CAPITAL LETTER TCHE", direction="l", linebreak="al", unicodeslot=0xA692, }, [0xA693]={ category="ll", description="CYRILLIC SMALL LETTER TCHE", direction="l", linebreak="al", unicodeslot=0xA693, }, [0xA694]={ category="lu", description="CYRILLIC CAPITAL LETTER HWE", direction="l", linebreak="al", unicodeslot=0xA694, }, [0xA695]={ category="ll", description="CYRILLIC SMALL LETTER HWE", direction="l", linebreak="al", unicodeslot=0xA695, }, [0xA696]={ category="lu", description="CYRILLIC CAPITAL LETTER SHWE", direction="l", linebreak="al", unicodeslot=0xA696, }, [0xA697]={ category="ll", description="CYRILLIC SMALL LETTER SHWE", direction="l", linebreak="al", unicodeslot=0xA697, }, [0xA69F]={ category="mn", description="COMBINING CYRILLIC LETTER IOTIFIED E", direction="nsm", linebreak="cm", unicodeslot=0xA69F, }, [0xA6A0]={ category="lo", description="BAMUM LETTER A", direction="l", linebreak="al", unicodeslot=0xA6A0, }, [0xA6A1]={ category="lo", description="BAMUM LETTER KA", direction="l", linebreak="al", unicodeslot=0xA6A1, }, [0xA6A2]={ category="lo", description="BAMUM LETTER U", direction="l", linebreak="al", unicodeslot=0xA6A2, }, [0xA6A3]={ category="lo", description="BAMUM LETTER KU", direction="l", linebreak="al", unicodeslot=0xA6A3, }, [0xA6A4]={ category="lo", description="BAMUM LETTER EE", direction="l", linebreak="al", unicodeslot=0xA6A4, }, [0xA6A5]={ category="lo", description="BAMUM LETTER REE", direction="l", linebreak="al", unicodeslot=0xA6A5, }, [0xA6A6]={ category="lo", description="BAMUM LETTER TAE", direction="l", linebreak="al", unicodeslot=0xA6A6, }, [0xA6A7]={ category="lo", description="BAMUM LETTER O", direction="l", linebreak="al", unicodeslot=0xA6A7, }, [0xA6A8]={ category="lo", description="BAMUM LETTER NYI", direction="l", linebreak="al", unicodeslot=0xA6A8, }, [0xA6A9]={ category="lo", description="BAMUM LETTER I", direction="l", linebreak="al", unicodeslot=0xA6A9, }, [0xA6AA]={ category="lo", description="BAMUM LETTER LA", direction="l", linebreak="al", unicodeslot=0xA6AA, }, [0xA6AB]={ category="lo", description="BAMUM LETTER PA", direction="l", linebreak="al", unicodeslot=0xA6AB, }, [0xA6AC]={ category="lo", description="BAMUM LETTER RII", direction="l", linebreak="al", unicodeslot=0xA6AC, }, [0xA6AD]={ category="lo", description="BAMUM LETTER RIEE", direction="l", linebreak="al", unicodeslot=0xA6AD, }, [0xA6AE]={ category="lo", description="BAMUM LETTER LEEEE", direction="l", linebreak="al", unicodeslot=0xA6AE, }, [0xA6AF]={ category="lo", description="BAMUM LETTER MEEEE", direction="l", linebreak="al", unicodeslot=0xA6AF, }, [0xA6B0]={ category="lo", description="BAMUM LETTER TAA", direction="l", linebreak="al", unicodeslot=0xA6B0, }, [0xA6B1]={ category="lo", description="BAMUM LETTER NDAA", direction="l", linebreak="al", unicodeslot=0xA6B1, }, [0xA6B2]={ category="lo", description="BAMUM LETTER NJAEM", direction="l", linebreak="al", unicodeslot=0xA6B2, }, [0xA6B3]={ category="lo", description="BAMUM LETTER M", direction="l", linebreak="al", unicodeslot=0xA6B3, }, [0xA6B4]={ category="lo", description="BAMUM LETTER SUU", direction="l", linebreak="al", unicodeslot=0xA6B4, }, [0xA6B5]={ category="lo", description="BAMUM LETTER MU", direction="l", linebreak="al", unicodeslot=0xA6B5, }, [0xA6B6]={ category="lo", description="BAMUM LETTER SHII", direction="l", linebreak="al", unicodeslot=0xA6B6, }, [0xA6B7]={ category="lo", description="BAMUM LETTER SI", direction="l", linebreak="al", unicodeslot=0xA6B7, }, [0xA6B8]={ category="lo", description="BAMUM LETTER SHEUX", direction="l", linebreak="al", unicodeslot=0xA6B8, }, [0xA6B9]={ category="lo", description="BAMUM LETTER SEUX", direction="l", linebreak="al", unicodeslot=0xA6B9, }, [0xA6BA]={ category="lo", description="BAMUM LETTER KYEE", direction="l", linebreak="al", unicodeslot=0xA6BA, }, [0xA6BB]={ category="lo", description="BAMUM LETTER KET", direction="l", linebreak="al", unicodeslot=0xA6BB, }, [0xA6BC]={ category="lo", description="BAMUM LETTER NUAE", direction="l", linebreak="al", unicodeslot=0xA6BC, }, [0xA6BD]={ category="lo", description="BAMUM LETTER NU", direction="l", linebreak="al", unicodeslot=0xA6BD, }, [0xA6BE]={ category="lo", description="BAMUM LETTER NJUAE", direction="l", linebreak="al", unicodeslot=0xA6BE, }, [0xA6BF]={ category="lo", description="BAMUM LETTER YOQ", direction="l", linebreak="al", unicodeslot=0xA6BF, }, [0xA6C0]={ category="lo", description="BAMUM LETTER SHU", direction="l", linebreak="al", unicodeslot=0xA6C0, }, [0xA6C1]={ category="lo", description="BAMUM LETTER YUQ", direction="l", linebreak="al", unicodeslot=0xA6C1, }, [0xA6C2]={ category="lo", description="BAMUM LETTER YA", direction="l", linebreak="al", unicodeslot=0xA6C2, }, [0xA6C3]={ category="lo", description="BAMUM LETTER NSHA", direction="l", linebreak="al", unicodeslot=0xA6C3, }, [0xA6C4]={ category="lo", description="BAMUM LETTER KEUX", direction="l", linebreak="al", unicodeslot=0xA6C4, }, [0xA6C5]={ category="lo", description="BAMUM LETTER PEUX", direction="l", linebreak="al", unicodeslot=0xA6C5, }, [0xA6C6]={ category="lo", description="BAMUM LETTER NJEE", direction="l", linebreak="al", unicodeslot=0xA6C6, }, [0xA6C7]={ category="lo", description="BAMUM LETTER NTEE", direction="l", linebreak="al", unicodeslot=0xA6C7, }, [0xA6C8]={ category="lo", description="BAMUM LETTER PUE", direction="l", linebreak="al", unicodeslot=0xA6C8, }, [0xA6C9]={ category="lo", description="BAMUM LETTER WUE", direction="l", linebreak="al", unicodeslot=0xA6C9, }, [0xA6CA]={ category="lo", description="BAMUM LETTER PEE", direction="l", linebreak="al", unicodeslot=0xA6CA, }, [0xA6CB]={ category="lo", description="BAMUM LETTER FEE", direction="l", linebreak="al", unicodeslot=0xA6CB, }, [0xA6CC]={ category="lo", description="BAMUM LETTER RU", direction="l", linebreak="al", unicodeslot=0xA6CC, }, [0xA6CD]={ category="lo", description="BAMUM LETTER LU", direction="l", linebreak="al", unicodeslot=0xA6CD, }, [0xA6CE]={ category="lo", description="BAMUM LETTER MI", direction="l", linebreak="al", unicodeslot=0xA6CE, }, [0xA6CF]={ category="lo", description="BAMUM LETTER NI", direction="l", linebreak="al", unicodeslot=0xA6CF, }, [0xA6D0]={ category="lo", description="BAMUM LETTER REUX", direction="l", linebreak="al", unicodeslot=0xA6D0, }, [0xA6D1]={ category="lo", description="BAMUM LETTER RAE", direction="l", linebreak="al", unicodeslot=0xA6D1, }, [0xA6D2]={ category="lo", description="BAMUM LETTER KEN", direction="l", linebreak="al", unicodeslot=0xA6D2, }, [0xA6D3]={ category="lo", description="BAMUM LETTER NGKWAEN", direction="l", linebreak="al", unicodeslot=0xA6D3, }, [0xA6D4]={ category="lo", description="BAMUM LETTER NGGA", direction="l", linebreak="al", unicodeslot=0xA6D4, }, [0xA6D5]={ category="lo", description="BAMUM LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA6D5, }, [0xA6D6]={ category="lo", description="BAMUM LETTER SHO", direction="l", linebreak="al", unicodeslot=0xA6D6, }, [0xA6D7]={ category="lo", description="BAMUM LETTER PUAE", direction="l", linebreak="al", unicodeslot=0xA6D7, }, [0xA6D8]={ category="lo", description="BAMUM LETTER FU", direction="l", linebreak="al", unicodeslot=0xA6D8, }, [0xA6D9]={ category="lo", description="BAMUM LETTER FOM", direction="l", linebreak="al", unicodeslot=0xA6D9, }, [0xA6DA]={ category="lo", description="BAMUM LETTER WA", direction="l", linebreak="al", unicodeslot=0xA6DA, }, [0xA6DB]={ category="lo", description="BAMUM LETTER NA", direction="l", linebreak="al", unicodeslot=0xA6DB, }, [0xA6DC]={ category="lo", description="BAMUM LETTER LI", direction="l", linebreak="al", unicodeslot=0xA6DC, }, [0xA6DD]={ category="lo", description="BAMUM LETTER PI", direction="l", linebreak="al", unicodeslot=0xA6DD, }, [0xA6DE]={ category="lo", description="BAMUM LETTER LOQ", direction="l", linebreak="al", unicodeslot=0xA6DE, }, [0xA6DF]={ category="lo", description="BAMUM LETTER KO", direction="l", linebreak="al", unicodeslot=0xA6DF, }, [0xA6E0]={ category="lo", description="BAMUM LETTER MBEN", direction="l", linebreak="al", unicodeslot=0xA6E0, }, [0xA6E1]={ category="lo", description="BAMUM LETTER REN", direction="l", linebreak="al", unicodeslot=0xA6E1, }, [0xA6E2]={ category="lo", description="BAMUM LETTER MEN", direction="l", linebreak="al", unicodeslot=0xA6E2, }, [0xA6E3]={ category="lo", description="BAMUM LETTER MA", direction="l", linebreak="al", unicodeslot=0xA6E3, }, [0xA6E4]={ category="lo", description="BAMUM LETTER TI", direction="l", linebreak="al", unicodeslot=0xA6E4, }, [0xA6E5]={ category="lo", description="BAMUM LETTER KI", direction="l", linebreak="al", unicodeslot=0xA6E5, }, [0xA6E6]={ category="nl", description="BAMUM LETTER MO", direction="l", linebreak="al", unicodeslot=0xA6E6, }, [0xA6E7]={ category="nl", description="BAMUM LETTER MBAA", direction="l", linebreak="al", unicodeslot=0xA6E7, }, [0xA6E8]={ category="nl", description="BAMUM LETTER TET", direction="l", linebreak="al", unicodeslot=0xA6E8, }, [0xA6E9]={ category="nl", description="BAMUM LETTER KPA", direction="l", linebreak="al", unicodeslot=0xA6E9, }, [0xA6EA]={ category="nl", description="BAMUM LETTER TEN", direction="l", linebreak="al", unicodeslot=0xA6EA, }, [0xA6EB]={ category="nl", description="BAMUM LETTER NTUU", direction="l", linebreak="al", unicodeslot=0xA6EB, }, [0xA6EC]={ category="nl", description="BAMUM LETTER SAMBA", direction="l", linebreak="al", unicodeslot=0xA6EC, }, [0xA6ED]={ category="nl", description="BAMUM LETTER FAAMAE", direction="l", linebreak="al", unicodeslot=0xA6ED, }, [0xA6EE]={ category="nl", description="BAMUM LETTER KOVUU", direction="l", linebreak="al", unicodeslot=0xA6EE, }, [0xA6EF]={ category="nl", description="BAMUM LETTER KOGHOM", direction="l", linebreak="al", unicodeslot=0xA6EF, }, [0xA6F0]={ category="mn", description="BAMUM COMBINING MARK KOQNDON", direction="nsm", linebreak="cm", unicodeslot=0xA6F0, }, [0xA6F1]={ category="mn", description="BAMUM COMBINING MARK TUKWENTIS", direction="nsm", linebreak="cm", unicodeslot=0xA6F1, }, [0xA6F2]={ category="po", description="BAMUM NJAEMLI", direction="l", linebreak="al", unicodeslot=0xA6F2, }, [0xA6F3]={ category="po", description="BAMUM FULL STOP", direction="l", linebreak="ba", unicodeslot=0xA6F3, }, [0xA6F4]={ category="po", description="BAMUM COLON", direction="l", linebreak="ba", unicodeslot=0xA6F4, }, [0xA6F5]={ category="po", description="BAMUM COMMA", direction="l", linebreak="ba", unicodeslot=0xA6F5, }, [0xA6F6]={ category="po", description="BAMUM SEMICOLON", direction="l", linebreak="ba", unicodeslot=0xA6F6, }, [0xA6F7]={ category="po", description="BAMUM QUESTION MARK", direction="l", linebreak="ba", unicodeslot=0xA6F7, }, [0xA700]={ category="sk", description="MODIFIER LETTER CHINESE TONE YIN PING", direction="on", linebreak="al", unicodeslot=0xA700, }, [0xA701]={ category="sk", description="MODIFIER LETTER CHINESE TONE YANG PING", direction="on", linebreak="al", unicodeslot=0xA701, }, [0xA702]={ category="sk", description="MODIFIER LETTER CHINESE TONE YIN SHANG", direction="on", linebreak="al", unicodeslot=0xA702, }, [0xA703]={ category="sk", description="MODIFIER LETTER CHINESE TONE YANG SHANG", direction="on", linebreak="al", unicodeslot=0xA703, }, [0xA704]={ category="sk", description="MODIFIER LETTER CHINESE TONE YIN QU", direction="on", linebreak="al", unicodeslot=0xA704, }, [0xA705]={ category="sk", description="MODIFIER LETTER CHINESE TONE YANG QU", direction="on", linebreak="al", unicodeslot=0xA705, }, [0xA706]={ category="sk", description="MODIFIER LETTER CHINESE TONE YIN RU", direction="on", linebreak="al", unicodeslot=0xA706, }, [0xA707]={ category="sk", description="MODIFIER LETTER CHINESE TONE YANG RU", direction="on", linebreak="al", unicodeslot=0xA707, }, [0xA708]={ category="sk", description="MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR", direction="on", linebreak="al", unicodeslot=0xA708, }, [0xA709]={ category="sk", description="MODIFIER LETTER HIGH DOTTED TONE BAR", direction="on", linebreak="al", unicodeslot=0xA709, }, [0xA70A]={ category="sk", description="MODIFIER LETTER MID DOTTED TONE BAR", direction="on", linebreak="al", unicodeslot=0xA70A, }, [0xA70B]={ category="sk", description="MODIFIER LETTER LOW DOTTED TONE BAR", direction="on", linebreak="al", unicodeslot=0xA70B, }, [0xA70C]={ category="sk", description="MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR", direction="on", linebreak="al", unicodeslot=0xA70C, }, [0xA70D]={ category="sk", description="MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA70D, }, [0xA70E]={ category="sk", description="MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA70E, }, [0xA70F]={ category="sk", description="MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA70F, }, [0xA710]={ category="sk", description="MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA710, }, [0xA711]={ category="sk", description="MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA711, }, [0xA712]={ category="sk", description="MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA712, }, [0xA713]={ category="sk", description="MODIFIER LETTER HIGH LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA713, }, [0xA714]={ category="sk", description="MODIFIER LETTER MID LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA714, }, [0xA715]={ category="sk", description="MODIFIER LETTER LOW LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA715, }, [0xA716]={ category="sk", description="MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR", direction="on", linebreak="al", unicodeslot=0xA716, }, [0xA717]={ category="lm", description="MODIFIER LETTER DOT VERTICAL BAR", direction="on", linebreak="al", unicodeslot=0xA717, }, [0xA718]={ category="lm", description="MODIFIER LETTER DOT SLASH", direction="on", linebreak="al", unicodeslot=0xA718, }, [0xA719]={ category="lm", description="MODIFIER LETTER DOT HORIZONTAL BAR", direction="on", linebreak="al", unicodeslot=0xA719, }, [0xA71A]={ category="lm", description="MODIFIER LETTER LOWER RIGHT CORNER ANGLE", direction="on", linebreak="al", unicodeslot=0xA71A, }, [0xA71B]={ category="lm", description="MODIFIER LETTER RAISED UP ARROW", direction="on", linebreak="al", unicodeslot=0xA71B, }, [0xA71C]={ category="lm", description="MODIFIER LETTER RAISED DOWN ARROW", direction="on", linebreak="al", unicodeslot=0xA71C, }, [0xA71D]={ category="lm", description="MODIFIER LETTER RAISED EXCLAMATION MARK", direction="on", linebreak="al", unicodeslot=0xA71D, }, [0xA71E]={ category="lm", description="MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK", direction="on", linebreak="al", unicodeslot=0xA71E, }, [0xA71F]={ category="lm", description="MODIFIER LETTER LOW INVERTED EXCLAMATION MARK", direction="on", linebreak="al", unicodeslot=0xA71F, }, [0xA720]={ category="sk", description="MODIFIER LETTER STRESS AND HIGH TONE", direction="on", linebreak="al", unicodeslot=0xA720, }, [0xA721]={ category="sk", description="MODIFIER LETTER STRESS AND LOW TONE", direction="on", linebreak="al", unicodeslot=0xA721, }, [0xA722]={ category="lu", description="LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF", direction="l", linebreak="al", unicodeslot=0xA722, }, [0xA723]={ category="ll", description="LATIN SMALL LETTER EGYPTOLOGICAL ALEF", direction="l", linebreak="al", unicodeslot=0xA723, }, [0xA724]={ category="lu", description="LATIN CAPITAL LETTER EGYPTOLOGICAL AIN", direction="l", linebreak="al", unicodeslot=0xA724, }, [0xA725]={ category="ll", description="LATIN SMALL LETTER EGYPTOLOGICAL AIN", direction="l", linebreak="al", unicodeslot=0xA725, }, [0xA726]={ category="lu", description="LATIN CAPITAL LETTER HENG", direction="l", linebreak="al", unicodeslot=0xA726, }, [0xA727]={ category="ll", description="LATIN SMALL LETTER HENG", direction="l", linebreak="al", unicodeslot=0xA727, }, [0xA728]={ category="lu", description="LATIN CAPITAL LETTER TZ", direction="l", linebreak="al", unicodeslot=0xA728, }, [0xA729]={ category="ll", description="LATIN SMALL LETTER TZ", direction="l", linebreak="al", unicodeslot=0xA729, }, [0xA72A]={ category="lu", description="LATIN CAPITAL LETTER TRESILLO", direction="l", linebreak="al", unicodeslot=0xA72A, }, [0xA72B]={ category="ll", description="LATIN SMALL LETTER TRESILLO", direction="l", linebreak="al", unicodeslot=0xA72B, }, [0xA72C]={ category="lu", description="LATIN CAPITAL LETTER CUATRILLO", direction="l", linebreak="al", unicodeslot=0xA72C, }, [0xA72D]={ category="ll", description="LATIN SMALL LETTER CUATRILLO", direction="l", linebreak="al", unicodeslot=0xA72D, }, [0xA72E]={ category="lu", description="LATIN CAPITAL LETTER CUATRILLO WITH COMMA", direction="l", linebreak="al", unicodeslot=0xA72E, }, [0xA72F]={ category="ll", description="LATIN SMALL LETTER CUATRILLO WITH COMMA", direction="l", linebreak="al", unicodeslot=0xA72F, }, [0xA730]={ category="ll", description="LATIN LETTER SMALL CAPITAL F", direction="l", linebreak="al", unicodeslot=0xA730, }, [0xA731]={ category="ll", description="LATIN LETTER SMALL CAPITAL S", direction="l", linebreak="al", unicodeslot=0xA731, }, [0xA732]={ category="lu", description="LATIN CAPITAL LETTER AA", direction="l", linebreak="al", unicodeslot=0xA732, }, [0xA733]={ category="ll", description="LATIN SMALL LETTER AA", direction="l", linebreak="al", unicodeslot=0xA733, }, [0xA734]={ category="lu", description="LATIN CAPITAL LETTER AO", direction="l", linebreak="al", unicodeslot=0xA734, }, [0xA735]={ category="ll", description="LATIN SMALL LETTER AO", direction="l", linebreak="al", unicodeslot=0xA735, }, [0xA736]={ category="lu", description="LATIN CAPITAL LETTER AU", direction="l", linebreak="al", unicodeslot=0xA736, }, [0xA737]={ category="ll", description="LATIN SMALL LETTER AU", direction="l", linebreak="al", unicodeslot=0xA737, }, [0xA738]={ category="lu", description="LATIN CAPITAL LETTER AV", direction="l", linebreak="al", unicodeslot=0xA738, }, [0xA739]={ category="ll", description="LATIN SMALL LETTER AV", direction="l", linebreak="al", unicodeslot=0xA739, }, [0xA73A]={ category="lu", description="LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR", direction="l", linebreak="al", unicodeslot=0xA73A, }, [0xA73B]={ category="ll", description="LATIN SMALL LETTER AV WITH HORIZONTAL BAR", direction="l", linebreak="al", unicodeslot=0xA73B, }, [0xA73C]={ category="lu", description="LATIN CAPITAL LETTER AY", direction="l", linebreak="al", unicodeslot=0xA73C, }, [0xA73D]={ category="ll", description="LATIN SMALL LETTER AY", direction="l", linebreak="al", unicodeslot=0xA73D, }, [0xA73E]={ category="lu", description="LATIN CAPITAL LETTER REVERSED C WITH DOT", direction="l", linebreak="al", unicodeslot=0xA73E, }, [0xA73F]={ category="ll", description="LATIN SMALL LETTER REVERSED C WITH DOT", direction="l", linebreak="al", unicodeslot=0xA73F, }, [0xA740]={ category="lu", description="LATIN CAPITAL LETTER K WITH STROKE", direction="l", linebreak="al", unicodeslot=0xA740, }, [0xA741]={ category="ll", description="LATIN SMALL LETTER K WITH STROKE", direction="l", linebreak="al", unicodeslot=0xA741, }, [0xA742]={ category="lu", description="LATIN CAPITAL LETTER K WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA742, }, [0xA743]={ category="ll", description="LATIN SMALL LETTER K WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA743, }, [0xA744]={ category="lu", description="LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA744, }, [0xA745]={ category="ll", description="LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA745, }, [0xA746]={ category="lu", description="LATIN CAPITAL LETTER BROKEN L", direction="l", linebreak="al", unicodeslot=0xA746, }, [0xA747]={ category="ll", description="LATIN SMALL LETTER BROKEN L", direction="l", linebreak="al", unicodeslot=0xA747, }, [0xA748]={ category="lu", description="LATIN CAPITAL LETTER L WITH HIGH STROKE", direction="l", linebreak="al", unicodeslot=0xA748, }, [0xA749]={ category="ll", description="LATIN SMALL LETTER L WITH HIGH STROKE", direction="l", linebreak="al", unicodeslot=0xA749, }, [0xA74A]={ category="lu", description="LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY", direction="l", linebreak="al", unicodeslot=0xA74A, }, [0xA74B]={ category="ll", description="LATIN SMALL LETTER O WITH LONG STROKE OVERLAY", direction="l", linebreak="al", unicodeslot=0xA74B, }, [0xA74C]={ category="lu", description="LATIN CAPITAL LETTER O WITH LOOP", direction="l", linebreak="al", unicodeslot=0xA74C, }, [0xA74D]={ category="ll", description="LATIN SMALL LETTER O WITH LOOP", direction="l", linebreak="al", unicodeslot=0xA74D, }, [0xA74E]={ category="lu", description="LATIN CAPITAL LETTER OO", direction="l", linebreak="al", unicodeslot=0xA74E, }, [0xA74F]={ category="ll", description="LATIN SMALL LETTER OO", direction="l", linebreak="al", unicodeslot=0xA74F, }, [0xA750]={ category="lu", description="LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA750, }, [0xA751]={ category="ll", description="LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA751, }, [0xA752]={ category="lu", description="LATIN CAPITAL LETTER P WITH FLOURISH", direction="l", linebreak="al", unicodeslot=0xA752, }, [0xA753]={ category="ll", description="LATIN SMALL LETTER P WITH FLOURISH", direction="l", linebreak="al", unicodeslot=0xA753, }, [0xA754]={ category="lu", description="LATIN CAPITAL LETTER P WITH SQUIRREL TAIL", direction="l", linebreak="al", unicodeslot=0xA754, }, [0xA755]={ category="ll", description="LATIN SMALL LETTER P WITH SQUIRREL TAIL", direction="l", linebreak="al", unicodeslot=0xA755, }, [0xA756]={ category="lu", description="LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA756, }, [0xA757]={ category="ll", description="LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA757, }, [0xA758]={ category="lu", description="LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA758, }, [0xA759]={ category="ll", description="LATIN SMALL LETTER Q WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA759, }, [0xA75A]={ category="lu", description="LATIN CAPITAL LETTER R ROTUNDA", direction="l", linebreak="al", unicodeslot=0xA75A, }, [0xA75B]={ category="ll", description="LATIN SMALL LETTER R ROTUNDA", direction="l", linebreak="al", unicodeslot=0xA75B, }, [0xA75C]={ category="lu", description="LATIN CAPITAL LETTER RUM ROTUNDA", direction="l", linebreak="al", unicodeslot=0xA75C, }, [0xA75D]={ category="ll", description="LATIN SMALL LETTER RUM ROTUNDA", direction="l", linebreak="al", unicodeslot=0xA75D, }, [0xA75E]={ category="lu", description="LATIN CAPITAL LETTER V WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA75E, }, [0xA75F]={ category="ll", description="LATIN SMALL LETTER V WITH DIAGONAL STROKE", direction="l", linebreak="al", unicodeslot=0xA75F, }, [0xA760]={ category="lu", description="LATIN CAPITAL LETTER VY", direction="l", linebreak="al", unicodeslot=0xA760, }, [0xA761]={ category="ll", description="LATIN SMALL LETTER VY", direction="l", linebreak="al", unicodeslot=0xA761, }, [0xA762]={ category="lu", description="LATIN CAPITAL LETTER VISIGOTHIC Z", direction="l", linebreak="al", unicodeslot=0xA762, }, [0xA763]={ category="ll", description="LATIN SMALL LETTER VISIGOTHIC Z", direction="l", linebreak="al", unicodeslot=0xA763, }, [0xA764]={ category="lu", description="LATIN CAPITAL LETTER THORN WITH STROKE", direction="l", linebreak="al", unicodeslot=0xA764, }, [0xA765]={ category="ll", description="LATIN SMALL LETTER THORN WITH STROKE", direction="l", linebreak="al", unicodeslot=0xA765, }, [0xA766]={ category="lu", description="LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA766, }, [0xA767]={ category="ll", description="LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA767, }, [0xA768]={ category="lu", description="LATIN CAPITAL LETTER VEND", direction="l", linebreak="al", unicodeslot=0xA768, }, [0xA769]={ category="ll", description="LATIN SMALL LETTER VEND", direction="l", linebreak="al", unicodeslot=0xA769, }, [0xA76A]={ category="lu", description="LATIN CAPITAL LETTER ET", direction="l", linebreak="al", unicodeslot=0xA76A, }, [0xA76B]={ category="ll", description="LATIN SMALL LETTER ET", direction="l", linebreak="al", unicodeslot=0xA76B, }, [0xA76C]={ category="lu", description="LATIN CAPITAL LETTER IS", direction="l", linebreak="al", unicodeslot=0xA76C, }, [0xA76D]={ category="ll", description="LATIN SMALL LETTER IS", direction="l", linebreak="al", unicodeslot=0xA76D, }, [0xA76E]={ category="lu", description="LATIN CAPITAL LETTER CON", direction="l", linebreak="al", unicodeslot=0xA76E, }, [0xA76F]={ category="ll", description="LATIN SMALL LETTER CON", direction="l", linebreak="al", unicodeslot=0xA76F, }, [0xA770]={ category="lm", description="MODIFIER LETTER US", direction="l", linebreak="al", specials={ "super", 0xA76F }, unicodeslot=0xA770, }, [0xA771]={ category="ll", description="LATIN SMALL LETTER DUM", direction="l", linebreak="al", unicodeslot=0xA771, }, [0xA772]={ category="ll", description="LATIN SMALL LETTER LUM", direction="l", linebreak="al", unicodeslot=0xA772, }, [0xA773]={ category="ll", description="LATIN SMALL LETTER MUM", direction="l", linebreak="al", unicodeslot=0xA773, }, [0xA774]={ category="ll", description="LATIN SMALL LETTER NUM", direction="l", linebreak="al", unicodeslot=0xA774, }, [0xA775]={ category="ll", description="LATIN SMALL LETTER RUM", direction="l", linebreak="al", unicodeslot=0xA775, }, [0xA776]={ category="ll", description="LATIN LETTER SMALL CAPITAL RUM", direction="l", linebreak="al", unicodeslot=0xA776, }, [0xA777]={ category="ll", description="LATIN SMALL LETTER TUM", direction="l", linebreak="al", unicodeslot=0xA777, }, [0xA778]={ category="ll", description="LATIN SMALL LETTER UM", direction="l", linebreak="al", unicodeslot=0xA778, }, [0xA779]={ category="lu", description="LATIN CAPITAL LETTER INSULAR D", direction="l", linebreak="al", unicodeslot=0xA779, }, [0xA77A]={ category="ll", description="LATIN SMALL LETTER INSULAR D", direction="l", linebreak="al", unicodeslot=0xA77A, }, [0xA77B]={ category="lu", description="LATIN CAPITAL LETTER INSULAR F", direction="l", linebreak="al", unicodeslot=0xA77B, }, [0xA77C]={ category="ll", description="LATIN SMALL LETTER INSULAR F", direction="l", linebreak="al", unicodeslot=0xA77C, }, [0xA77D]={ category="lu", description="LATIN CAPITAL LETTER INSULAR G", direction="l", linebreak="al", unicodeslot=0xA77D, }, [0xA77E]={ category="lu", description="LATIN CAPITAL LETTER TURNED INSULAR G", direction="l", linebreak="al", unicodeslot=0xA77E, }, [0xA77F]={ category="ll", description="LATIN SMALL LETTER TURNED INSULAR G", direction="l", linebreak="al", unicodeslot=0xA77F, }, [0xA780]={ category="lu", description="LATIN CAPITAL LETTER TURNED L", direction="l", linebreak="al", unicodeslot=0xA780, }, [0xA781]={ category="ll", description="LATIN SMALL LETTER TURNED L", direction="l", linebreak="al", unicodeslot=0xA781, }, [0xA782]={ category="lu", description="LATIN CAPITAL LETTER INSULAR R", direction="l", linebreak="al", unicodeslot=0xA782, }, [0xA783]={ category="ll", description="LATIN SMALL LETTER INSULAR R", direction="l", linebreak="al", unicodeslot=0xA783, }, [0xA784]={ category="lu", description="LATIN CAPITAL LETTER INSULAR S", direction="l", linebreak="al", unicodeslot=0xA784, }, [0xA785]={ category="ll", description="LATIN SMALL LETTER INSULAR S", direction="l", linebreak="al", unicodeslot=0xA785, }, [0xA786]={ category="lu", description="LATIN CAPITAL LETTER INSULAR T", direction="l", linebreak="al", unicodeslot=0xA786, }, [0xA787]={ category="ll", description="LATIN SMALL LETTER INSULAR T", direction="l", linebreak="al", unicodeslot=0xA787, }, [0xA788]={ category="lm", description="MODIFIER LETTER LOW CIRCUMFLEX ACCENT", direction="on", linebreak="al", unicodeslot=0xA788, }, [0xA789]={ category="sk", description="MODIFIER LETTER COLON", direction="l", linebreak="al", unicodeslot=0xA789, }, [0xA78A]={ category="sk", description="MODIFIER LETTER SHORT EQUALS SIGN", direction="l", linebreak="al", unicodeslot=0xA78A, }, [0xA78B]={ category="lu", description="LATIN CAPITAL LETTER SALTILLO", direction="l", linebreak="al", unicodeslot=0xA78B, }, [0xA78C]={ category="ll", description="LATIN SMALL LETTER SALTILLO", direction="l", linebreak="al", unicodeslot=0xA78C, }, [0xA78D]={ category="lu", description="LATIN CAPITAL LETTER TURNED H", direction="l", linebreak="al", unicodeslot=0xA78D, }, [0xA78E]={ category="ll", description="LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT", direction="l", linebreak="al", unicodeslot=0xA78E, }, [0xA790]={ category="lu", description="LATIN CAPITAL LETTER N WITH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA790, }, [0xA791]={ category="ll", description="LATIN SMALL LETTER N WITH DESCENDER", direction="l", linebreak="al", unicodeslot=0xA791, }, [0xA792]={ category="lu", description="LATIN CAPITAL LETTER C WITH BAR", direction="l", linebreak="al", unicodeslot=0xA792, }, [0xA793]={ category="ll", description="LATIN SMALL LETTER C WITH BAR", direction="l", linebreak="al", unicodeslot=0xA793, }, [0xA7A0]={ category="lu", description="LATIN CAPITAL LETTER G WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A0, }, [0xA7A1]={ category="ll", description="LATIN SMALL LETTER G WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A1, }, [0xA7A2]={ category="lu", description="LATIN CAPITAL LETTER K WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A2, }, [0xA7A3]={ category="ll", description="LATIN SMALL LETTER K WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A3, }, [0xA7A4]={ category="lu", description="LATIN CAPITAL LETTER N WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A4, }, [0xA7A5]={ category="ll", description="LATIN SMALL LETTER N WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A5, }, [0xA7A6]={ category="lu", description="LATIN CAPITAL LETTER R WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A6, }, [0xA7A7]={ category="ll", description="LATIN SMALL LETTER R WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A7, }, [0xA7A8]={ category="lu", description="LATIN CAPITAL LETTER S WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A8, }, [0xA7A9]={ category="ll", description="LATIN SMALL LETTER S WITH OBLIQUE STROKE", direction="l", linebreak="al", unicodeslot=0xA7A9, }, [0xA7AA]={ category="lu", description="LATIN CAPITAL LETTER H WITH HOOK", direction="l", linebreak="al", unicodeslot=0xA7AA, }, [0xA7F8]={ category="lm", description="MODIFIER LETTER CAPITAL H WITH STROKE", direction="l", linebreak="al", specials={ "super", 0x0126 }, unicodeslot=0xA7F8, }, [0xA7F9]={ category="lm", description="MODIFIER LETTER SMALL LIGATURE OE", direction="l", linebreak="al", specials={ "super", 0x0153 }, unicodeslot=0xA7F9, }, [0xA7FA]={ category="ll", description="LATIN LETTER SMALL CAPITAL TURNED M", direction="l", linebreak="al", unicodeslot=0xA7FA, }, [0xA7FB]={ category="lo", description="LATIN EPIGRAPHIC LETTER REVERSED F", direction="l", linebreak="al", unicodeslot=0xA7FB, }, [0xA7FC]={ category="lo", description="LATIN EPIGRAPHIC LETTER REVERSED P", direction="l", linebreak="al", unicodeslot=0xA7FC, }, [0xA7FD]={ category="lo", description="LATIN EPIGRAPHIC LETTER INVERTED M", direction="l", linebreak="al", unicodeslot=0xA7FD, }, [0xA7FE]={ category="lo", description="LATIN EPIGRAPHIC LETTER I LONGA", direction="l", linebreak="al", unicodeslot=0xA7FE, }, [0xA7FF]={ category="lo", description="LATIN EPIGRAPHIC LETTER ARCHAIC M", direction="l", linebreak="al", unicodeslot=0xA7FF, }, [0xA800]={ category="lo", description="SYLOTI NAGRI LETTER A", direction="l", linebreak="al", unicodeslot=0xA800, }, [0xA801]={ category="lo", description="SYLOTI NAGRI LETTER I", direction="l", linebreak="al", unicodeslot=0xA801, }, [0xA802]={ category="mc", description="SYLOTI NAGRI SIGN DVISVARA", direction="nsm", linebreak="cm", unicodeslot=0xA802, }, [0xA803]={ category="lo", description="SYLOTI NAGRI LETTER U", direction="l", linebreak="al", unicodeslot=0xA803, }, [0xA804]={ category="lo", description="SYLOTI NAGRI LETTER E", direction="l", linebreak="al", unicodeslot=0xA804, }, [0xA805]={ category="lo", description="SYLOTI NAGRI LETTER O", direction="l", linebreak="al", unicodeslot=0xA805, }, [0xA806]={ category="mn", description="SYLOTI NAGRI SIGN HASANTA", direction="nsm", linebreak="cm", unicodeslot=0xA806, }, [0xA807]={ category="lo", description="SYLOTI NAGRI LETTER KO", direction="l", linebreak="al", unicodeslot=0xA807, }, [0xA808]={ category="lo", description="SYLOTI NAGRI LETTER KHO", direction="l", linebreak="al", unicodeslot=0xA808, }, [0xA809]={ category="lo", description="SYLOTI NAGRI LETTER GO", direction="l", linebreak="al", unicodeslot=0xA809, }, [0xA80A]={ category="lo", description="SYLOTI NAGRI LETTER GHO", direction="l", linebreak="al", unicodeslot=0xA80A, }, [0xA80B]={ category="mn", description="SYLOTI NAGRI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0xA80B, }, [0xA80C]={ category="lo", description="SYLOTI NAGRI LETTER CO", direction="l", linebreak="al", unicodeslot=0xA80C, }, [0xA80D]={ category="lo", description="SYLOTI NAGRI LETTER CHO", direction="l", linebreak="al", unicodeslot=0xA80D, }, [0xA80E]={ category="lo", description="SYLOTI NAGRI LETTER JO", direction="l", linebreak="al", unicodeslot=0xA80E, }, [0xA80F]={ category="lo", description="SYLOTI NAGRI LETTER JHO", direction="l", linebreak="al", unicodeslot=0xA80F, }, [0xA810]={ category="lo", description="SYLOTI NAGRI LETTER TTO", direction="l", linebreak="al", unicodeslot=0xA810, }, [0xA811]={ category="lo", description="SYLOTI NAGRI LETTER TTHO", direction="l", linebreak="al", unicodeslot=0xA811, }, [0xA812]={ category="lo", description="SYLOTI NAGRI LETTER DDO", direction="l", linebreak="al", unicodeslot=0xA812, }, [0xA813]={ category="lo", description="SYLOTI NAGRI LETTER DDHO", direction="l", linebreak="al", unicodeslot=0xA813, }, [0xA814]={ category="lo", description="SYLOTI NAGRI LETTER TO", direction="l", linebreak="al", unicodeslot=0xA814, }, [0xA815]={ category="lo", description="SYLOTI NAGRI LETTER THO", direction="l", linebreak="al", unicodeslot=0xA815, }, [0xA816]={ category="lo", description="SYLOTI NAGRI LETTER DO", direction="l", linebreak="al", unicodeslot=0xA816, }, [0xA817]={ category="lo", description="SYLOTI NAGRI LETTER DHO", direction="l", linebreak="al", unicodeslot=0xA817, }, [0xA818]={ category="lo", description="SYLOTI NAGRI LETTER NO", direction="l", linebreak="al", unicodeslot=0xA818, }, [0xA819]={ category="lo", description="SYLOTI NAGRI LETTER PO", direction="l", linebreak="al", unicodeslot=0xA819, }, [0xA81A]={ category="lo", description="SYLOTI NAGRI LETTER PHO", direction="l", linebreak="al", unicodeslot=0xA81A, }, [0xA81B]={ category="lo", description="SYLOTI NAGRI LETTER BO", direction="l", linebreak="al", unicodeslot=0xA81B, }, [0xA81C]={ category="lo", description="SYLOTI NAGRI LETTER BHO", direction="l", linebreak="al", unicodeslot=0xA81C, }, [0xA81D]={ category="lo", description="SYLOTI NAGRI LETTER MO", direction="l", linebreak="al", unicodeslot=0xA81D, }, [0xA81E]={ category="lo", description="SYLOTI NAGRI LETTER RO", direction="l", linebreak="al", unicodeslot=0xA81E, }, [0xA81F]={ category="lo", description="SYLOTI NAGRI LETTER LO", direction="l", linebreak="al", unicodeslot=0xA81F, }, [0xA820]={ category="lo", description="SYLOTI NAGRI LETTER RRO", direction="l", linebreak="al", unicodeslot=0xA820, }, [0xA821]={ category="lo", description="SYLOTI NAGRI LETTER SO", direction="l", linebreak="al", unicodeslot=0xA821, }, [0xA822]={ category="lo", description="SYLOTI NAGRI LETTER HO", direction="l", linebreak="al", unicodeslot=0xA822, }, [0xA823]={ category="mc", description="SYLOTI NAGRI VOWEL SIGN A", direction="l", linebreak="cm", unicodeslot=0xA823, }, [0xA824]={ category="mc", description="SYLOTI NAGRI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0xA824, }, [0xA825]={ category="mn", description="SYLOTI NAGRI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0xA825, }, [0xA826]={ category="mn", description="SYLOTI NAGRI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0xA826, }, [0xA827]={ category="mc", description="SYLOTI NAGRI VOWEL SIGN OO", direction="l", linebreak="cm", unicodeslot=0xA827, }, [0xA828]={ category="so", description="SYLOTI NAGRI POETRY MARK-0x0001", direction="on", linebreak="al", unicodeslot=0xA828, }, [0xA829]={ category="so", description="SYLOTI NAGRI POETRY MARK-0x0002", direction="on", linebreak="al", unicodeslot=0xA829, }, [0xA82A]={ category="so", description="SYLOTI NAGRI POETRY MARK-0x0003", direction="on", linebreak="al", unicodeslot=0xA82A, }, [0xA82B]={ category="so", description="SYLOTI NAGRI POETRY MARK-0x0004", direction="on", linebreak="al", unicodeslot=0xA82B, }, [0xA830]={ category="no", description="NORTH INDIC FRACTION ONE QUARTER", direction="l", linebreak="al", unicodeslot=0xA830, }, [0xA831]={ category="no", description="NORTH INDIC FRACTION ONE HALF", direction="l", linebreak="al", unicodeslot=0xA831, }, [0xA832]={ category="no", description="NORTH INDIC FRACTION THREE QUARTERS", direction="l", linebreak="al", unicodeslot=0xA832, }, [0xA833]={ category="no", description="NORTH INDIC FRACTION ONE SIXTEENTH", direction="l", linebreak="al", unicodeslot=0xA833, }, [0xA834]={ category="no", description="NORTH INDIC FRACTION ONE EIGHTH", direction="l", linebreak="al", unicodeslot=0xA834, }, [0xA835]={ category="no", description="NORTH INDIC FRACTION THREE SIXTEENTHS", direction="l", linebreak="al", unicodeslot=0xA835, }, [0xA836]={ category="so", description="NORTH INDIC QUARTER MARK", direction="l", linebreak="al", unicodeslot=0xA836, }, [0xA837]={ category="so", description="NORTH INDIC PLACEHOLDER MARK", direction="l", linebreak="al", unicodeslot=0xA837, }, [0xA838]={ category="sc", description="NORTH INDIC RUPEE MARK", direction="et", linebreak="po", unicodeslot=0xA838, }, [0xA839]={ category="so", description="NORTH INDIC QUANTITY MARK", direction="et", linebreak="al", unicodeslot=0xA839, }, [0xA840]={ category="lo", description="PHAGS-PA LETTER KA", direction="l", linebreak="al", unicodeslot=0xA840, }, [0xA841]={ category="lo", description="PHAGS-PA LETTER KHA", direction="l", linebreak="al", unicodeslot=0xA841, }, [0xA842]={ category="lo", description="PHAGS-PA LETTER GA", direction="l", linebreak="al", unicodeslot=0xA842, }, [0xA843]={ category="lo", description="PHAGS-PA LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA843, }, [0xA844]={ category="lo", description="PHAGS-PA LETTER CA", direction="l", linebreak="al", unicodeslot=0xA844, }, [0xA845]={ category="lo", description="PHAGS-PA LETTER CHA", direction="l", linebreak="al", unicodeslot=0xA845, }, [0xA846]={ category="lo", description="PHAGS-PA LETTER JA", direction="l", linebreak="al", unicodeslot=0xA846, }, [0xA847]={ category="lo", description="PHAGS-PA LETTER NYA", direction="l", linebreak="al", unicodeslot=0xA847, }, [0xA848]={ category="lo", description="PHAGS-PA LETTER TA", direction="l", linebreak="al", unicodeslot=0xA848, }, [0xA849]={ category="lo", description="PHAGS-PA LETTER THA", direction="l", linebreak="al", unicodeslot=0xA849, }, [0xA84A]={ category="lo", description="PHAGS-PA LETTER DA", direction="l", linebreak="al", unicodeslot=0xA84A, }, [0xA84B]={ category="lo", description="PHAGS-PA LETTER NA", direction="l", linebreak="al", unicodeslot=0xA84B, }, [0xA84C]={ category="lo", description="PHAGS-PA LETTER PA", direction="l", linebreak="al", unicodeslot=0xA84C, }, [0xA84D]={ category="lo", description="PHAGS-PA LETTER PHA", direction="l", linebreak="al", unicodeslot=0xA84D, }, [0xA84E]={ category="lo", description="PHAGS-PA LETTER BA", direction="l", linebreak="al", unicodeslot=0xA84E, }, [0xA84F]={ category="lo", description="PHAGS-PA LETTER MA", direction="l", linebreak="al", unicodeslot=0xA84F, }, [0xA850]={ category="lo", description="PHAGS-PA LETTER TSA", direction="l", linebreak="al", unicodeslot=0xA850, }, [0xA851]={ category="lo", description="PHAGS-PA LETTER TSHA", direction="l", linebreak="al", unicodeslot=0xA851, }, [0xA852]={ category="lo", description="PHAGS-PA LETTER DZA", direction="l", linebreak="al", unicodeslot=0xA852, }, [0xA853]={ category="lo", description="PHAGS-PA LETTER WA", direction="l", linebreak="al", unicodeslot=0xA853, }, [0xA854]={ category="lo", description="PHAGS-PA LETTER ZHA", direction="l", linebreak="al", unicodeslot=0xA854, }, [0xA855]={ category="lo", description="PHAGS-PA LETTER ZA", direction="l", linebreak="al", unicodeslot=0xA855, }, [0xA856]={ category="lo", description="PHAGS-PA LETTER SMALL A", direction="l", linebreak="al", unicodeslot=0xA856, variants={ [0xFE00]="phags-pa letter reversed shaping small a", }, }, [0xA857]={ category="lo", description="PHAGS-PA LETTER YA", direction="l", linebreak="al", unicodeslot=0xA857, }, [0xA858]={ category="lo", description="PHAGS-PA LETTER RA", direction="l", linebreak="al", unicodeslot=0xA858, }, [0xA859]={ category="lo", description="PHAGS-PA LETTER LA", direction="l", linebreak="al", unicodeslot=0xA859, }, [0xA85A]={ category="lo", description="PHAGS-PA LETTER SHA", direction="l", linebreak="al", unicodeslot=0xA85A, }, [0xA85B]={ category="lo", description="PHAGS-PA LETTER SA", direction="l", linebreak="al", unicodeslot=0xA85B, }, [0xA85C]={ category="lo", description="PHAGS-PA LETTER HA", direction="l", linebreak="al", unicodeslot=0xA85C, variants={ [0xFE00]="phags-pa letter reversed shaping ha", }, }, [0xA85D]={ category="lo", description="PHAGS-PA LETTER A", direction="l", linebreak="al", unicodeslot=0xA85D, }, [0xA85E]={ category="lo", description="PHAGS-PA LETTER I", direction="l", linebreak="al", unicodeslot=0xA85E, variants={ [0xFE00]="phags-pa letter reversed shaping i", }, }, [0xA85F]={ category="lo", description="PHAGS-PA LETTER U", direction="l", linebreak="al", unicodeslot=0xA85F, variants={ [0xFE00]="phags-pa letter reversed shaping u", }, }, [0xA860]={ category="lo", description="PHAGS-PA LETTER E", direction="l", linebreak="al", unicodeslot=0xA860, variants={ [0xFE00]="phags-pa letter reversed shaping e", }, }, [0xA861]={ category="lo", description="PHAGS-PA LETTER O", direction="l", linebreak="al", unicodeslot=0xA861, }, [0xA862]={ category="lo", description="PHAGS-PA LETTER QA", direction="l", linebreak="al", unicodeslot=0xA862, }, [0xA863]={ category="lo", description="PHAGS-PA LETTER XA", direction="l", linebreak="al", unicodeslot=0xA863, }, [0xA864]={ category="lo", description="PHAGS-PA LETTER FA", direction="l", linebreak="al", unicodeslot=0xA864, }, [0xA865]={ category="lo", description="PHAGS-PA LETTER GGA", direction="l", linebreak="al", unicodeslot=0xA865, }, [0xA866]={ category="lo", description="PHAGS-PA LETTER EE", direction="l", linebreak="al", unicodeslot=0xA866, }, [0xA867]={ category="lo", description="PHAGS-PA SUBJOINED LETTER WA", direction="l", linebreak="al", unicodeslot=0xA867, }, [0xA868]={ category="lo", description="PHAGS-PA SUBJOINED LETTER YA", direction="l", linebreak="al", unicodeslot=0xA868, variants={ [0xFE00]="phags-pa letter reversed shaping subjoined ya", }, }, [0xA869]={ category="lo", description="PHAGS-PA LETTER TTA", direction="l", linebreak="al", unicodeslot=0xA869, }, [0xA86A]={ category="lo", description="PHAGS-PA LETTER TTHA", direction="l", linebreak="al", unicodeslot=0xA86A, }, [0xA86B]={ category="lo", description="PHAGS-PA LETTER DDA", direction="l", linebreak="al", unicodeslot=0xA86B, }, [0xA86C]={ category="lo", description="PHAGS-PA LETTER NNA", direction="l", linebreak="al", unicodeslot=0xA86C, }, [0xA86D]={ category="lo", description="PHAGS-PA LETTER ALTERNATE YA", direction="l", linebreak="al", unicodeslot=0xA86D, }, [0xA86E]={ category="lo", description="PHAGS-PA LETTER VOICELESS SHA", direction="l", linebreak="al", unicodeslot=0xA86E, }, [0xA86F]={ category="lo", description="PHAGS-PA LETTER VOICED HA", direction="l", linebreak="al", unicodeslot=0xA86F, }, [0xA870]={ category="lo", description="PHAGS-PA LETTER ASPIRATED FA", direction="l", linebreak="al", unicodeslot=0xA870, }, [0xA871]={ category="lo", description="PHAGS-PA SUBJOINED LETTER RA", direction="l", linebreak="al", unicodeslot=0xA871, }, [0xA872]={ category="lo", description="PHAGS-PA SUPERFIXED LETTER RA", direction="l", linebreak="al", unicodeslot=0xA872, }, [0xA873]={ category="lo", description="PHAGS-PA LETTER CANDRABINDU", direction="l", linebreak="al", unicodeslot=0xA873, }, [0xA874]={ category="po", description="PHAGS-PA SINGLE HEAD MARK", direction="on", linebreak="bb", unicodeslot=0xA874, }, [0xA875]={ category="po", description="PHAGS-PA DOUBLE HEAD MARK", direction="on", linebreak="bb", unicodeslot=0xA875, }, [0xA876]={ category="po", description="PHAGS-PA MARK SHAD", direction="on", linebreak="ex", unicodeslot=0xA876, }, [0xA877]={ category="po", description="PHAGS-PA MARK DOUBLE SHAD", direction="on", linebreak="ex", unicodeslot=0xA877, }, [0xA880]={ category="mc", description="SAURASHTRA SIGN ANUSVARA", direction="l", linebreak="cm", unicodeslot=0xA880, }, [0xA881]={ category="mc", description="SAURASHTRA SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0xA881, }, [0xA882]={ category="lo", description="SAURASHTRA LETTER A", direction="l", linebreak="al", unicodeslot=0xA882, }, [0xA883]={ category="lo", description="SAURASHTRA LETTER AA", direction="l", linebreak="al", unicodeslot=0xA883, }, [0xA884]={ category="lo", description="SAURASHTRA LETTER I", direction="l", linebreak="al", unicodeslot=0xA884, }, [0xA885]={ category="lo", description="SAURASHTRA LETTER II", direction="l", linebreak="al", unicodeslot=0xA885, }, [0xA886]={ category="lo", description="SAURASHTRA LETTER U", direction="l", linebreak="al", unicodeslot=0xA886, }, [0xA887]={ category="lo", description="SAURASHTRA LETTER UU", direction="l", linebreak="al", unicodeslot=0xA887, }, [0xA888]={ category="lo", description="SAURASHTRA LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0xA888, }, [0xA889]={ category="lo", description="SAURASHTRA LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0xA889, }, [0xA88A]={ category="lo", description="SAURASHTRA LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0xA88A, }, [0xA88B]={ category="lo", description="SAURASHTRA LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0xA88B, }, [0xA88C]={ category="lo", description="SAURASHTRA LETTER E", direction="l", linebreak="al", unicodeslot=0xA88C, }, [0xA88D]={ category="lo", description="SAURASHTRA LETTER EE", direction="l", linebreak="al", unicodeslot=0xA88D, }, [0xA88E]={ category="lo", description="SAURASHTRA LETTER AI", direction="l", linebreak="al", unicodeslot=0xA88E, }, [0xA88F]={ category="lo", description="SAURASHTRA LETTER O", direction="l", linebreak="al", unicodeslot=0xA88F, }, [0xA890]={ category="lo", description="SAURASHTRA LETTER OO", direction="l", linebreak="al", unicodeslot=0xA890, }, [0xA891]={ category="lo", description="SAURASHTRA LETTER AU", direction="l", linebreak="al", unicodeslot=0xA891, }, [0xA892]={ category="lo", description="SAURASHTRA LETTER KA", direction="l", linebreak="al", unicodeslot=0xA892, }, [0xA893]={ category="lo", description="SAURASHTRA LETTER KHA", direction="l", linebreak="al", unicodeslot=0xA893, }, [0xA894]={ category="lo", description="SAURASHTRA LETTER GA", direction="l", linebreak="al", unicodeslot=0xA894, }, [0xA895]={ category="lo", description="SAURASHTRA LETTER GHA", direction="l", linebreak="al", unicodeslot=0xA895, }, [0xA896]={ category="lo", description="SAURASHTRA LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA896, }, [0xA897]={ category="lo", description="SAURASHTRA LETTER CA", direction="l", linebreak="al", unicodeslot=0xA897, }, [0xA898]={ category="lo", description="SAURASHTRA LETTER CHA", direction="l", linebreak="al", unicodeslot=0xA898, }, [0xA899]={ category="lo", description="SAURASHTRA LETTER JA", direction="l", linebreak="al", unicodeslot=0xA899, }, [0xA89A]={ category="lo", description="SAURASHTRA LETTER JHA", direction="l", linebreak="al", unicodeslot=0xA89A, }, [0xA89B]={ category="lo", description="SAURASHTRA LETTER NYA", direction="l", linebreak="al", unicodeslot=0xA89B, }, [0xA89C]={ category="lo", description="SAURASHTRA LETTER TTA", direction="l", linebreak="al", unicodeslot=0xA89C, }, [0xA89D]={ category="lo", description="SAURASHTRA LETTER TTHA", direction="l", linebreak="al", unicodeslot=0xA89D, }, [0xA89E]={ category="lo", description="SAURASHTRA LETTER DDA", direction="l", linebreak="al", unicodeslot=0xA89E, }, [0xA89F]={ category="lo", description="SAURASHTRA LETTER DDHA", direction="l", linebreak="al", unicodeslot=0xA89F, }, [0xA8A0]={ category="lo", description="SAURASHTRA LETTER NNA", direction="l", linebreak="al", unicodeslot=0xA8A0, }, [0xA8A1]={ category="lo", description="SAURASHTRA LETTER TA", direction="l", linebreak="al", unicodeslot=0xA8A1, }, [0xA8A2]={ category="lo", description="SAURASHTRA LETTER THA", direction="l", linebreak="al", unicodeslot=0xA8A2, }, [0xA8A3]={ category="lo", description="SAURASHTRA LETTER DA", direction="l", linebreak="al", unicodeslot=0xA8A3, }, [0xA8A4]={ category="lo", description="SAURASHTRA LETTER DHA", direction="l", linebreak="al", unicodeslot=0xA8A4, }, [0xA8A5]={ category="lo", description="SAURASHTRA LETTER NA", direction="l", linebreak="al", unicodeslot=0xA8A5, }, [0xA8A6]={ category="lo", description="SAURASHTRA LETTER PA", direction="l", linebreak="al", unicodeslot=0xA8A6, }, [0xA8A7]={ category="lo", description="SAURASHTRA LETTER PHA", direction="l", linebreak="al", unicodeslot=0xA8A7, }, [0xA8A8]={ category="lo", description="SAURASHTRA LETTER BA", direction="l", linebreak="al", unicodeslot=0xA8A8, }, [0xA8A9]={ category="lo", description="SAURASHTRA LETTER BHA", direction="l", linebreak="al", unicodeslot=0xA8A9, }, [0xA8AA]={ category="lo", description="SAURASHTRA LETTER MA", direction="l", linebreak="al", unicodeslot=0xA8AA, }, [0xA8AB]={ category="lo", description="SAURASHTRA LETTER YA", direction="l", linebreak="al", unicodeslot=0xA8AB, }, [0xA8AC]={ category="lo", description="SAURASHTRA LETTER RA", direction="l", linebreak="al", unicodeslot=0xA8AC, }, [0xA8AD]={ category="lo", description="SAURASHTRA LETTER LA", direction="l", linebreak="al", unicodeslot=0xA8AD, }, [0xA8AE]={ category="lo", description="SAURASHTRA LETTER VA", direction="l", linebreak="al", unicodeslot=0xA8AE, }, [0xA8AF]={ category="lo", description="SAURASHTRA LETTER SHA", direction="l", linebreak="al", unicodeslot=0xA8AF, }, [0xA8B0]={ category="lo", description="SAURASHTRA LETTER SSA", direction="l", linebreak="al", unicodeslot=0xA8B0, }, [0xA8B1]={ category="lo", description="SAURASHTRA LETTER SA", direction="l", linebreak="al", unicodeslot=0xA8B1, }, [0xA8B2]={ category="lo", description="SAURASHTRA LETTER HA", direction="l", linebreak="al", unicodeslot=0xA8B2, }, [0xA8B3]={ category="lo", description="SAURASHTRA LETTER LLA", direction="l", linebreak="al", unicodeslot=0xA8B3, }, [0xA8B4]={ category="mc", description="SAURASHTRA CONSONANT SIGN HAARU", direction="l", linebreak="cm", unicodeslot=0xA8B4, }, [0xA8B5]={ category="mc", description="SAURASHTRA VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0xA8B5, }, [0xA8B6]={ category="mc", description="SAURASHTRA VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0xA8B6, }, [0xA8B7]={ category="mc", description="SAURASHTRA VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0xA8B7, }, [0xA8B8]={ category="mc", description="SAURASHTRA VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0xA8B8, }, [0xA8B9]={ category="mc", description="SAURASHTRA VOWEL SIGN UU", direction="l", linebreak="cm", unicodeslot=0xA8B9, }, [0xA8BA]={ category="mc", description="SAURASHTRA VOWEL SIGN VOCALIC R", direction="l", linebreak="cm", unicodeslot=0xA8BA, }, [0xA8BB]={ category="mc", description="SAURASHTRA VOWEL SIGN VOCALIC RR", direction="l", linebreak="cm", unicodeslot=0xA8BB, }, [0xA8BC]={ category="mc", description="SAURASHTRA VOWEL SIGN VOCALIC L", direction="l", linebreak="cm", unicodeslot=0xA8BC, }, [0xA8BD]={ category="mc", description="SAURASHTRA VOWEL SIGN VOCALIC LL", direction="l", linebreak="cm", unicodeslot=0xA8BD, }, [0xA8BE]={ category="mc", description="SAURASHTRA VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0xA8BE, }, [0xA8BF]={ category="mc", description="SAURASHTRA VOWEL SIGN EE", direction="l", linebreak="cm", unicodeslot=0xA8BF, }, [0xA8C0]={ category="mc", description="SAURASHTRA VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0xA8C0, }, [0xA8C1]={ category="mc", description="SAURASHTRA VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0xA8C1, }, [0xA8C2]={ category="mc", description="SAURASHTRA VOWEL SIGN OO", direction="l", linebreak="cm", unicodeslot=0xA8C2, }, [0xA8C3]={ category="mc", description="SAURASHTRA VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0xA8C3, }, [0xA8C4]={ category="mn", description="SAURASHTRA SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0xA8C4, }, [0xA8CE]={ category="po", description="SAURASHTRA DANDA", direction="l", linebreak="ba", unicodeslot=0xA8CE, }, [0xA8CF]={ category="po", description="SAURASHTRA DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0xA8CF, }, [0xA8D0]={ category="nd", description="SAURASHTRA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0xA8D0, }, [0xA8D1]={ category="nd", description="SAURASHTRA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0xA8D1, }, [0xA8D2]={ category="nd", description="SAURASHTRA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0xA8D2, }, [0xA8D3]={ category="nd", description="SAURASHTRA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0xA8D3, }, [0xA8D4]={ category="nd", description="SAURASHTRA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0xA8D4, }, [0xA8D5]={ category="nd", description="SAURASHTRA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0xA8D5, }, [0xA8D6]={ category="nd", description="SAURASHTRA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0xA8D6, }, [0xA8D7]={ category="nd", description="SAURASHTRA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0xA8D7, }, [0xA8D8]={ category="nd", description="SAURASHTRA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0xA8D8, }, [0xA8D9]={ category="nd", description="SAURASHTRA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0xA8D9, }, [0xA8E0]={ category="mn", description="COMBINING DEVANAGARI DIGIT ZERO", direction="nsm", linebreak="cm", unicodeslot=0xA8E0, }, [0xA8E1]={ category="mn", description="COMBINING DEVANAGARI DIGIT ONE", direction="nsm", linebreak="cm", unicodeslot=0xA8E1, }, [0xA8E2]={ category="mn", description="COMBINING DEVANAGARI DIGIT TWO", direction="nsm", linebreak="cm", unicodeslot=0xA8E2, }, [0xA8E3]={ category="mn", description="COMBINING DEVANAGARI DIGIT THREE", direction="nsm", linebreak="cm", unicodeslot=0xA8E3, }, [0xA8E4]={ category="mn", description="COMBINING DEVANAGARI DIGIT FOUR", direction="nsm", linebreak="cm", unicodeslot=0xA8E4, }, [0xA8E5]={ category="mn", description="COMBINING DEVANAGARI DIGIT FIVE", direction="nsm", linebreak="cm", unicodeslot=0xA8E5, }, [0xA8E6]={ category="mn", description="COMBINING DEVANAGARI DIGIT SIX", direction="nsm", linebreak="cm", unicodeslot=0xA8E6, }, [0xA8E7]={ category="mn", description="COMBINING DEVANAGARI DIGIT SEVEN", direction="nsm", linebreak="cm", unicodeslot=0xA8E7, }, [0xA8E8]={ category="mn", description="COMBINING DEVANAGARI DIGIT EIGHT", direction="nsm", linebreak="cm", unicodeslot=0xA8E8, }, [0xA8E9]={ category="mn", description="COMBINING DEVANAGARI DIGIT NINE", direction="nsm", linebreak="cm", unicodeslot=0xA8E9, }, [0xA8EA]={ category="mn", description="COMBINING DEVANAGARI LETTER A", direction="nsm", linebreak="cm", unicodeslot=0xA8EA, }, [0xA8EB]={ category="mn", description="COMBINING DEVANAGARI LETTER U", direction="nsm", linebreak="cm", unicodeslot=0xA8EB, }, [0xA8EC]={ category="mn", description="COMBINING DEVANAGARI LETTER KA", direction="nsm", linebreak="cm", unicodeslot=0xA8EC, }, [0xA8ED]={ category="mn", description="COMBINING DEVANAGARI LETTER NA", direction="nsm", linebreak="cm", unicodeslot=0xA8ED, }, [0xA8EE]={ category="mn", description="COMBINING DEVANAGARI LETTER PA", direction="nsm", linebreak="cm", unicodeslot=0xA8EE, }, [0xA8EF]={ category="mn", description="COMBINING DEVANAGARI LETTER RA", direction="nsm", linebreak="cm", unicodeslot=0xA8EF, }, [0xA8F0]={ category="mn", description="COMBINING DEVANAGARI LETTER VI", direction="nsm", linebreak="cm", unicodeslot=0xA8F0, }, [0xA8F1]={ category="mn", description="COMBINING DEVANAGARI SIGN AVAGRAHA", direction="nsm", linebreak="cm", unicodeslot=0xA8F1, }, [0xA8F2]={ category="lo", description="DEVANAGARI SIGN SPACING CANDRABINDU", direction="l", linebreak="al", unicodeslot=0xA8F2, }, [0xA8F3]={ category="lo", description="DEVANAGARI SIGN CANDRABINDU VIRAMA", direction="l", linebreak="al", unicodeslot=0xA8F3, }, [0xA8F4]={ category="lo", description="DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA", direction="l", linebreak="al", unicodeslot=0xA8F4, }, [0xA8F5]={ category="lo", description="DEVANAGARI SIGN CANDRABINDU TWO", direction="l", linebreak="al", unicodeslot=0xA8F5, }, [0xA8F6]={ category="lo", description="DEVANAGARI SIGN CANDRABINDU THREE", direction="l", linebreak="al", unicodeslot=0xA8F6, }, [0xA8F7]={ category="lo", description="DEVANAGARI SIGN CANDRABINDU AVAGRAHA", direction="l", linebreak="al", unicodeslot=0xA8F7, }, [0xA8F8]={ category="po", description="DEVANAGARI SIGN PUSHPIKA", direction="l", linebreak="al", unicodeslot=0xA8F8, }, [0xA8F9]={ category="po", description="DEVANAGARI GAP FILLER", direction="l", linebreak="al", unicodeslot=0xA8F9, }, [0xA8FA]={ category="po", description="DEVANAGARI CARET", direction="l", linebreak="al", unicodeslot=0xA8FA, }, [0xA8FB]={ category="lo", description="DEVANAGARI HEADSTROKE", direction="l", linebreak="al", unicodeslot=0xA8FB, }, [0xA900]={ category="nd", description="KAYAH LI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0xA900, }, [0xA901]={ category="nd", description="KAYAH LI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0xA901, }, [0xA902]={ category="nd", description="KAYAH LI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0xA902, }, [0xA903]={ category="nd", description="KAYAH LI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0xA903, }, [0xA904]={ category="nd", description="KAYAH LI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0xA904, }, [0xA905]={ category="nd", description="KAYAH LI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0xA905, }, [0xA906]={ category="nd", description="KAYAH LI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0xA906, }, [0xA907]={ category="nd", description="KAYAH LI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0xA907, }, [0xA908]={ category="nd", description="KAYAH LI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0xA908, }, [0xA909]={ category="nd", description="KAYAH LI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0xA909, }, [0xA90A]={ category="lo", description="KAYAH LI LETTER KA", direction="l", linebreak="al", unicodeslot=0xA90A, }, [0xA90B]={ category="lo", description="KAYAH LI LETTER KHA", direction="l", linebreak="al", unicodeslot=0xA90B, }, [0xA90C]={ category="lo", description="KAYAH LI LETTER GA", direction="l", linebreak="al", unicodeslot=0xA90C, }, [0xA90D]={ category="lo", description="KAYAH LI LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA90D, }, [0xA90E]={ category="lo", description="KAYAH LI LETTER SA", direction="l", linebreak="al", unicodeslot=0xA90E, }, [0xA90F]={ category="lo", description="KAYAH LI LETTER SHA", direction="l", linebreak="al", unicodeslot=0xA90F, }, [0xA910]={ category="lo", description="KAYAH LI LETTER ZA", direction="l", linebreak="al", unicodeslot=0xA910, }, [0xA911]={ category="lo", description="KAYAH LI LETTER NYA", direction="l", linebreak="al", unicodeslot=0xA911, }, [0xA912]={ category="lo", description="KAYAH LI LETTER TA", direction="l", linebreak="al", unicodeslot=0xA912, }, [0xA913]={ category="lo", description="KAYAH LI LETTER HTA", direction="l", linebreak="al", unicodeslot=0xA913, }, [0xA914]={ category="lo", description="KAYAH LI LETTER NA", direction="l", linebreak="al", unicodeslot=0xA914, }, [0xA915]={ category="lo", description="KAYAH LI LETTER PA", direction="l", linebreak="al", unicodeslot=0xA915, }, [0xA916]={ category="lo", description="KAYAH LI LETTER PHA", direction="l", linebreak="al", unicodeslot=0xA916, }, [0xA917]={ category="lo", description="KAYAH LI LETTER MA", direction="l", linebreak="al", unicodeslot=0xA917, }, [0xA918]={ category="lo", description="KAYAH LI LETTER DA", direction="l", linebreak="al", unicodeslot=0xA918, }, [0xA919]={ category="lo", description="KAYAH LI LETTER BA", direction="l", linebreak="al", unicodeslot=0xA919, }, [0xA91A]={ category="lo", description="KAYAH LI LETTER RA", direction="l", linebreak="al", unicodeslot=0xA91A, }, [0xA91B]={ category="lo", description="KAYAH LI LETTER YA", direction="l", linebreak="al", unicodeslot=0xA91B, }, [0xA91C]={ category="lo", description="KAYAH LI LETTER LA", direction="l", linebreak="al", unicodeslot=0xA91C, }, [0xA91D]={ category="lo", description="KAYAH LI LETTER WA", direction="l", linebreak="al", unicodeslot=0xA91D, }, [0xA91E]={ category="lo", description="KAYAH LI LETTER THA", direction="l", linebreak="al", unicodeslot=0xA91E, }, [0xA91F]={ category="lo", description="KAYAH LI LETTER HA", direction="l", linebreak="al", unicodeslot=0xA91F, }, [0xA920]={ category="lo", description="KAYAH LI LETTER VA", direction="l", linebreak="al", unicodeslot=0xA920, }, [0xA921]={ category="lo", description="KAYAH LI LETTER CA", direction="l", linebreak="al", unicodeslot=0xA921, }, [0xA922]={ category="lo", description="KAYAH LI LETTER A", direction="l", linebreak="al", unicodeslot=0xA922, }, [0xA923]={ category="lo", description="KAYAH LI LETTER OE", direction="l", linebreak="al", unicodeslot=0xA923, }, [0xA924]={ category="lo", description="KAYAH LI LETTER I", direction="l", linebreak="al", unicodeslot=0xA924, }, [0xA925]={ category="lo", description="KAYAH LI LETTER OO", direction="l", linebreak="al", unicodeslot=0xA925, }, [0xA926]={ category="mn", description="KAYAH LI VOWEL UE", direction="nsm", linebreak="cm", unicodeslot=0xA926, }, [0xA927]={ category="mn", description="KAYAH LI VOWEL E", direction="nsm", linebreak="cm", unicodeslot=0xA927, }, [0xA928]={ category="mn", description="KAYAH LI VOWEL U", direction="nsm", linebreak="cm", unicodeslot=0xA928, }, [0xA929]={ category="mn", description="KAYAH LI VOWEL EE", direction="nsm", linebreak="cm", unicodeslot=0xA929, }, [0xA92A]={ category="mn", description="KAYAH LI VOWEL O", direction="nsm", linebreak="cm", unicodeslot=0xA92A, }, [0xA92B]={ category="mn", description="KAYAH LI TONE PLOPHU", direction="nsm", linebreak="cm", unicodeslot=0xA92B, }, [0xA92C]={ category="mn", description="KAYAH LI TONE CALYA", direction="nsm", linebreak="cm", unicodeslot=0xA92C, }, [0xA92D]={ category="mn", description="KAYAH LI TONE CALYA PLOPHU", direction="nsm", linebreak="cm", unicodeslot=0xA92D, }, [0xA92E]={ category="po", description="KAYAH LI SIGN CWI", direction="l", linebreak="ba", unicodeslot=0xA92E, }, [0xA92F]={ category="po", description="KAYAH LI SIGN SHYA", direction="l", linebreak="ba", unicodeslot=0xA92F, }, [0xA930]={ category="lo", description="REJANG LETTER KA", direction="l", linebreak="al", unicodeslot=0xA930, }, [0xA931]={ category="lo", description="REJANG LETTER GA", direction="l", linebreak="al", unicodeslot=0xA931, }, [0xA932]={ category="lo", description="REJANG LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA932, }, [0xA933]={ category="lo", description="REJANG LETTER TA", direction="l", linebreak="al", unicodeslot=0xA933, }, [0xA934]={ category="lo", description="REJANG LETTER DA", direction="l", linebreak="al", unicodeslot=0xA934, }, [0xA935]={ category="lo", description="REJANG LETTER NA", direction="l", linebreak="al", unicodeslot=0xA935, }, [0xA936]={ category="lo", description="REJANG LETTER PA", direction="l", linebreak="al", unicodeslot=0xA936, }, [0xA937]={ category="lo", description="REJANG LETTER BA", direction="l", linebreak="al", unicodeslot=0xA937, }, [0xA938]={ category="lo", description="REJANG LETTER MA", direction="l", linebreak="al", unicodeslot=0xA938, }, [0xA939]={ category="lo", description="REJANG LETTER CA", direction="l", linebreak="al", unicodeslot=0xA939, }, [0xA93A]={ category="lo", description="REJANG LETTER JA", direction="l", linebreak="al", unicodeslot=0xA93A, }, [0xA93B]={ category="lo", description="REJANG LETTER NYA", direction="l", linebreak="al", unicodeslot=0xA93B, }, [0xA93C]={ category="lo", description="REJANG LETTER SA", direction="l", linebreak="al", unicodeslot=0xA93C, }, [0xA93D]={ category="lo", description="REJANG LETTER RA", direction="l", linebreak="al", unicodeslot=0xA93D, }, [0xA93E]={ category="lo", description="REJANG LETTER LA", direction="l", linebreak="al", unicodeslot=0xA93E, }, [0xA93F]={ category="lo", description="REJANG LETTER YA", direction="l", linebreak="al", unicodeslot=0xA93F, }, [0xA940]={ category="lo", description="REJANG LETTER WA", direction="l", linebreak="al", unicodeslot=0xA940, }, [0xA941]={ category="lo", description="REJANG LETTER HA", direction="l", linebreak="al", unicodeslot=0xA941, }, [0xA942]={ category="lo", description="REJANG LETTER MBA", direction="l", linebreak="al", unicodeslot=0xA942, }, [0xA943]={ category="lo", description="REJANG LETTER NGGA", direction="l", linebreak="al", unicodeslot=0xA943, }, [0xA944]={ category="lo", description="REJANG LETTER NDA", direction="l", linebreak="al", unicodeslot=0xA944, }, [0xA945]={ category="lo", description="REJANG LETTER NYJA", direction="l", linebreak="al", unicodeslot=0xA945, }, [0xA946]={ category="lo", description="REJANG LETTER A", direction="l", linebreak="al", unicodeslot=0xA946, }, [0xA947]={ category="mn", description="REJANG VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0xA947, }, [0xA948]={ category="mn", description="REJANG VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0xA948, }, [0xA949]={ category="mn", description="REJANG VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0xA949, }, [0xA94A]={ category="mn", description="REJANG VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0xA94A, }, [0xA94B]={ category="mn", description="REJANG VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0xA94B, }, [0xA94C]={ category="mn", description="REJANG VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0xA94C, }, [0xA94D]={ category="mn", description="REJANG VOWEL SIGN EU", direction="nsm", linebreak="cm", unicodeslot=0xA94D, }, [0xA94E]={ category="mn", description="REJANG VOWEL SIGN EA", direction="nsm", linebreak="cm", unicodeslot=0xA94E, }, [0xA94F]={ category="mn", description="REJANG CONSONANT SIGN NG", direction="nsm", linebreak="cm", unicodeslot=0xA94F, }, [0xA950]={ category="mn", description="REJANG CONSONANT SIGN N", direction="nsm", linebreak="cm", unicodeslot=0xA950, }, [0xA951]={ category="mn", description="REJANG CONSONANT SIGN R", direction="nsm", linebreak="cm", unicodeslot=0xA951, }, [0xA952]={ category="mc", description="REJANG CONSONANT SIGN H", direction="l", linebreak="cm", unicodeslot=0xA952, }, [0xA953]={ category="mc", description="REJANG VIRAMA", direction="l", linebreak="cm", unicodeslot=0xA953, }, [0xA95F]={ category="po", description="REJANG SECTION MARK", direction="l", linebreak="al", unicodeslot=0xA95F, }, [0xA960]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT-MIEUM", direction="l", linebreak="jl", unicodeslot=0xA960, }, [0xA961]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT-PIEUP", direction="l", linebreak="jl", unicodeslot=0xA961, }, [0xA962]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT-SIOS", direction="l", linebreak="jl", unicodeslot=0xA962, }, [0xA963]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG TIKEUT-CIEUC", direction="l", linebreak="jl", unicodeslot=0xA963, }, [0xA964]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-KIYEOK", direction="l", linebreak="jl", unicodeslot=0xA964, }, [0xA965]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-SSANGKIYEOK", direction="l", linebreak="jl", unicodeslot=0xA965, }, [0xA966]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-TIKEUT", direction="l", linebreak="jl", unicodeslot=0xA966, }, [0xA967]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-SSANGTIKEUT", direction="l", linebreak="jl", unicodeslot=0xA967, }, [0xA968]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-MIEUM", direction="l", linebreak="jl", unicodeslot=0xA968, }, [0xA969]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-PIEUP", direction="l", linebreak="jl", unicodeslot=0xA969, }, [0xA96A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-SSANGPIEUP", direction="l", linebreak="jl", unicodeslot=0xA96A, }, [0xA96B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP", direction="l", linebreak="jl", unicodeslot=0xA96B, }, [0xA96C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-SIOS", direction="l", linebreak="jl", unicodeslot=0xA96C, }, [0xA96D]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-CIEUC", direction="l", linebreak="jl", unicodeslot=0xA96D, }, [0xA96E]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG RIEUL-KHIEUKH", direction="l", linebreak="jl", unicodeslot=0xA96E, }, [0xA96F]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG MIEUM-KIYEOK", direction="l", linebreak="jl", unicodeslot=0xA96F, }, [0xA970]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG MIEUM-TIKEUT", direction="l", linebreak="jl", unicodeslot=0xA970, }, [0xA971]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG MIEUM-SIOS", direction="l", linebreak="jl", unicodeslot=0xA971, }, [0xA972]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-SIOS-THIEUTH", direction="l", linebreak="jl", unicodeslot=0xA972, }, [0xA973]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-KHIEUKH", direction="l", linebreak="jl", unicodeslot=0xA973, }, [0xA974]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PIEUP-HIEUH", direction="l", linebreak="jl", unicodeslot=0xA974, }, [0xA975]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGSIOS-PIEUP", direction="l", linebreak="jl", unicodeslot=0xA975, }, [0xA976]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-RIEUL", direction="l", linebreak="jl", unicodeslot=0xA976, }, [0xA977]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG IEUNG-HIEUH", direction="l", linebreak="jl", unicodeslot=0xA977, }, [0xA978]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGCIEUC-HIEUH", direction="l", linebreak="jl", unicodeslot=0xA978, }, [0xA979]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGTHIEUTH", direction="l", linebreak="jl", unicodeslot=0xA979, }, [0xA97A]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG PHIEUPH-HIEUH", direction="l", linebreak="jl", unicodeslot=0xA97A, }, [0xA97B]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG HIEUH-SIOS", direction="l", linebreak="jl", unicodeslot=0xA97B, }, [0xA97C]={ category="lo", cjkwd="w", description="HANGUL CHOSEONG SSANGYEORINHIEUH", direction="l", linebreak="jl", unicodeslot=0xA97C, }, [0xA980]={ category="mn", description="JAVANESE SIGN PANYANGGA", direction="nsm", linebreak="cm", unicodeslot=0xA980, }, [0xA981]={ category="mn", description="JAVANESE SIGN CECAK", direction="nsm", linebreak="cm", unicodeslot=0xA981, }, [0xA982]={ category="mn", description="JAVANESE SIGN LAYAR", direction="nsm", linebreak="cm", unicodeslot=0xA982, }, [0xA983]={ category="mc", description="JAVANESE SIGN WIGNYAN", direction="l", linebreak="cm", unicodeslot=0xA983, }, [0xA984]={ category="lo", description="JAVANESE LETTER A", direction="l", linebreak="al", unicodeslot=0xA984, }, [0xA985]={ category="lo", description="JAVANESE LETTER I KAWI", direction="l", linebreak="al", unicodeslot=0xA985, }, [0xA986]={ category="lo", description="JAVANESE LETTER I", direction="l", linebreak="al", unicodeslot=0xA986, }, [0xA987]={ category="lo", description="JAVANESE LETTER II", direction="l", linebreak="al", unicodeslot=0xA987, }, [0xA988]={ category="lo", description="JAVANESE LETTER U", direction="l", linebreak="al", unicodeslot=0xA988, }, [0xA989]={ category="lo", description="JAVANESE LETTER PA CEREK", direction="l", linebreak="al", unicodeslot=0xA989, }, [0xA98A]={ category="lo", description="JAVANESE LETTER NGA LELET", direction="l", linebreak="al", unicodeslot=0xA98A, }, [0xA98B]={ category="lo", description="JAVANESE LETTER NGA LELET RASWADI", direction="l", linebreak="al", unicodeslot=0xA98B, }, [0xA98C]={ category="lo", description="JAVANESE LETTER E", direction="l", linebreak="al", unicodeslot=0xA98C, }, [0xA98D]={ category="lo", description="JAVANESE LETTER AI", direction="l", linebreak="al", unicodeslot=0xA98D, }, [0xA98E]={ category="lo", description="JAVANESE LETTER O", direction="l", linebreak="al", unicodeslot=0xA98E, }, [0xA98F]={ category="lo", description="JAVANESE LETTER KA", direction="l", linebreak="al", unicodeslot=0xA98F, }, [0xA990]={ category="lo", description="JAVANESE LETTER KA SASAK", direction="l", linebreak="al", unicodeslot=0xA990, }, [0xA991]={ category="lo", description="JAVANESE LETTER KA MURDA", direction="l", linebreak="al", unicodeslot=0xA991, }, [0xA992]={ category="lo", description="JAVANESE LETTER GA", direction="l", linebreak="al", unicodeslot=0xA992, }, [0xA993]={ category="lo", description="JAVANESE LETTER GA MURDA", direction="l", linebreak="al", unicodeslot=0xA993, }, [0xA994]={ category="lo", description="JAVANESE LETTER NGA", direction="l", linebreak="al", unicodeslot=0xA994, }, [0xA995]={ category="lo", description="JAVANESE LETTER CA", direction="l", linebreak="al", unicodeslot=0xA995, }, [0xA996]={ category="lo", description="JAVANESE LETTER CA MURDA", direction="l", linebreak="al", unicodeslot=0xA996, }, [0xA997]={ category="lo", description="JAVANESE LETTER JA", direction="l", linebreak="al", unicodeslot=0xA997, }, [0xA998]={ category="lo", description="JAVANESE LETTER NYA MURDA", direction="l", linebreak="al", unicodeslot=0xA998, }, [0xA999]={ category="lo", description="JAVANESE LETTER JA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0xA999, }, [0xA99A]={ category="lo", description="JAVANESE LETTER NYA", direction="l", linebreak="al", unicodeslot=0xA99A, }, [0xA99B]={ category="lo", description="JAVANESE LETTER TTA", direction="l", linebreak="al", unicodeslot=0xA99B, }, [0xA99C]={ category="lo", description="JAVANESE LETTER TTA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0xA99C, }, [0xA99D]={ category="lo", description="JAVANESE LETTER DDA", direction="l", linebreak="al", unicodeslot=0xA99D, }, [0xA99E]={ category="lo", description="JAVANESE LETTER DDA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0xA99E, }, [0xA99F]={ category="lo", description="JAVANESE LETTER NA MURDA", direction="l", linebreak="al", unicodeslot=0xA99F, }, [0xA9A0]={ category="lo", description="JAVANESE LETTER TA", direction="l", linebreak="al", unicodeslot=0xA9A0, }, [0xA9A1]={ category="lo", description="JAVANESE LETTER TA MURDA", direction="l", linebreak="al", unicodeslot=0xA9A1, }, [0xA9A2]={ category="lo", description="JAVANESE LETTER DA", direction="l", linebreak="al", unicodeslot=0xA9A2, }, [0xA9A3]={ category="lo", description="JAVANESE LETTER DA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0xA9A3, }, [0xA9A4]={ category="lo", description="JAVANESE LETTER NA", direction="l", linebreak="al", unicodeslot=0xA9A4, }, [0xA9A5]={ category="lo", description="JAVANESE LETTER PA", direction="l", linebreak="al", unicodeslot=0xA9A5, }, [0xA9A6]={ category="lo", description="JAVANESE LETTER PA MURDA", direction="l", linebreak="al", unicodeslot=0xA9A6, }, [0xA9A7]={ category="lo", description="JAVANESE LETTER BA", direction="l", linebreak="al", unicodeslot=0xA9A7, }, [0xA9A8]={ category="lo", description="JAVANESE LETTER BA MURDA", direction="l", linebreak="al", unicodeslot=0xA9A8, }, [0xA9A9]={ category="lo", description="JAVANESE LETTER MA", direction="l", linebreak="al", unicodeslot=0xA9A9, }, [0xA9AA]={ category="lo", description="JAVANESE LETTER YA", direction="l", linebreak="al", unicodeslot=0xA9AA, }, [0xA9AB]={ category="lo", description="JAVANESE LETTER RA", direction="l", linebreak="al", unicodeslot=0xA9AB, }, [0xA9AC]={ category="lo", description="JAVANESE LETTER RA AGUNG", direction="l", linebreak="al", unicodeslot=0xA9AC, }, [0xA9AD]={ category="lo", description="JAVANESE LETTER LA", direction="l", linebreak="al", unicodeslot=0xA9AD, }, [0xA9AE]={ category="lo", description="JAVANESE LETTER WA", direction="l", linebreak="al", unicodeslot=0xA9AE, }, [0xA9AF]={ category="lo", description="JAVANESE LETTER SA MURDA", direction="l", linebreak="al", unicodeslot=0xA9AF, }, [0xA9B0]={ category="lo", description="JAVANESE LETTER SA MAHAPRANA", direction="l", linebreak="al", unicodeslot=0xA9B0, }, [0xA9B1]={ category="lo", description="JAVANESE LETTER SA", direction="l", linebreak="al", unicodeslot=0xA9B1, }, [0xA9B2]={ category="lo", description="JAVANESE LETTER HA", direction="l", linebreak="al", unicodeslot=0xA9B2, }, [0xA9B3]={ category="mn", description="JAVANESE SIGN CECAK TELU", direction="nsm", linebreak="cm", unicodeslot=0xA9B3, }, [0xA9B4]={ category="mc", description="JAVANESE VOWEL SIGN TARUNG", direction="l", linebreak="cm", unicodeslot=0xA9B4, }, [0xA9B5]={ category="mc", description="JAVANESE VOWEL SIGN TOLONG", direction="l", linebreak="cm", unicodeslot=0xA9B5, }, [0xA9B6]={ category="mn", description="JAVANESE VOWEL SIGN WULU", direction="nsm", linebreak="cm", unicodeslot=0xA9B6, }, [0xA9B7]={ category="mn", description="JAVANESE VOWEL SIGN WULU MELIK", direction="nsm", linebreak="cm", unicodeslot=0xA9B7, }, [0xA9B8]={ category="mn", description="JAVANESE VOWEL SIGN SUKU", direction="nsm", linebreak="cm", unicodeslot=0xA9B8, }, [0xA9B9]={ category="mn", description="JAVANESE VOWEL SIGN SUKU MENDUT", direction="nsm", linebreak="cm", unicodeslot=0xA9B9, }, [0xA9BA]={ category="mc", description="JAVANESE VOWEL SIGN TALING", direction="l", linebreak="cm", unicodeslot=0xA9BA, }, [0xA9BB]={ category="mc", description="JAVANESE VOWEL SIGN DIRGA MURE", direction="l", linebreak="cm", unicodeslot=0xA9BB, }, [0xA9BC]={ category="mn", description="JAVANESE VOWEL SIGN PEPET", direction="nsm", linebreak="cm", unicodeslot=0xA9BC, }, [0xA9BD]={ category="mc", description="JAVANESE CONSONANT SIGN KERET", direction="l", linebreak="cm", unicodeslot=0xA9BD, }, [0xA9BE]={ category="mc", description="JAVANESE CONSONANT SIGN PENGKAL", direction="l", linebreak="cm", unicodeslot=0xA9BE, }, [0xA9BF]={ category="mc", description="JAVANESE CONSONANT SIGN CAKRA", direction="l", linebreak="cm", unicodeslot=0xA9BF, }, [0xA9C0]={ category="mc", description="JAVANESE PANGKON", direction="l", linebreak="cm", unicodeslot=0xA9C0, }, [0xA9C1]={ category="po", description="JAVANESE LEFT RERENGGAN", direction="l", linebreak="al", unicodeslot=0xA9C1, }, [0xA9C2]={ category="po", description="JAVANESE RIGHT RERENGGAN", direction="l", linebreak="al", unicodeslot=0xA9C2, }, [0xA9C3]={ category="po", description="JAVANESE PADA ANDAP", direction="l", linebreak="al", unicodeslot=0xA9C3, }, [0xA9C4]={ category="po", description="JAVANESE PADA MADYA", direction="l", linebreak="al", unicodeslot=0xA9C4, }, [0xA9C5]={ category="po", description="JAVANESE PADA LUHUR", direction="l", linebreak="al", unicodeslot=0xA9C5, }, [0xA9C6]={ category="po", description="JAVANESE PADA WINDU", direction="l", linebreak="al", unicodeslot=0xA9C6, }, [0xA9C7]={ category="po", description="JAVANESE PADA PANGKAT", direction="l", linebreak="ba", unicodeslot=0xA9C7, }, [0xA9C8]={ category="po", description="JAVANESE PADA LINGSA", direction="l", linebreak="ba", unicodeslot=0xA9C8, }, [0xA9C9]={ category="po", description="JAVANESE PADA LUNGSI", direction="l", linebreak="ba", unicodeslot=0xA9C9, }, [0xA9CA]={ category="po", description="JAVANESE PADA ADEG", direction="l", linebreak="al", unicodeslot=0xA9CA, }, [0xA9CB]={ category="po", description="JAVANESE PADA ADEG ADEG", direction="l", linebreak="al", unicodeslot=0xA9CB, }, [0xA9CC]={ category="po", description="JAVANESE PADA PISELEH", direction="l", linebreak="al", unicodeslot=0xA9CC, }, [0xA9CD]={ category="po", description="JAVANESE TURNED PADA PISELEH", direction="l", linebreak="al", unicodeslot=0xA9CD, }, [0xA9CF]={ category="lm", description="JAVANESE PANGRANGKEP", direction="l", linebreak="al", unicodeslot=0xA9CF, }, [0xA9D0]={ category="nd", description="JAVANESE DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0xA9D0, }, [0xA9D1]={ category="nd", description="JAVANESE DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0xA9D1, }, [0xA9D2]={ category="nd", description="JAVANESE DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0xA9D2, }, [0xA9D3]={ category="nd", description="JAVANESE DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0xA9D3, }, [0xA9D4]={ category="nd", description="JAVANESE DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0xA9D4, }, [0xA9D5]={ category="nd", description="JAVANESE DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0xA9D5, }, [0xA9D6]={ category="nd", description="JAVANESE DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0xA9D6, }, [0xA9D7]={ category="nd", description="JAVANESE DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0xA9D7, }, [0xA9D8]={ category="nd", description="JAVANESE DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0xA9D8, }, [0xA9D9]={ category="nd", description="JAVANESE DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0xA9D9, }, [0xA9DE]={ category="po", description="JAVANESE PADA TIRTA TUMETES", direction="l", linebreak="al", unicodeslot=0xA9DE, }, [0xA9DF]={ category="po", description="JAVANESE PADA ISEN-ISEN", direction="l", linebreak="al", unicodeslot=0xA9DF, }, [0xAA00]={ category="lo", description="CHAM LETTER A", direction="l", linebreak="al", unicodeslot=0xAA00, }, [0xAA01]={ category="lo", description="CHAM LETTER I", direction="l", linebreak="al", unicodeslot=0xAA01, }, [0xAA02]={ category="lo", description="CHAM LETTER U", direction="l", linebreak="al", unicodeslot=0xAA02, }, [0xAA03]={ category="lo", description="CHAM LETTER E", direction="l", linebreak="al", unicodeslot=0xAA03, }, [0xAA04]={ category="lo", description="CHAM LETTER AI", direction="l", linebreak="al", unicodeslot=0xAA04, }, [0xAA05]={ category="lo", description="CHAM LETTER O", direction="l", linebreak="al", unicodeslot=0xAA05, }, [0xAA06]={ category="lo", description="CHAM LETTER KA", direction="l", linebreak="al", unicodeslot=0xAA06, }, [0xAA07]={ category="lo", description="CHAM LETTER KHA", direction="l", linebreak="al", unicodeslot=0xAA07, }, [0xAA08]={ category="lo", description="CHAM LETTER GA", direction="l", linebreak="al", unicodeslot=0xAA08, }, [0xAA09]={ category="lo", description="CHAM LETTER GHA", direction="l", linebreak="al", unicodeslot=0xAA09, }, [0xAA0A]={ category="lo", description="CHAM LETTER NGUE", direction="l", linebreak="al", unicodeslot=0xAA0A, }, [0xAA0B]={ category="lo", description="CHAM LETTER NGA", direction="l", linebreak="al", unicodeslot=0xAA0B, }, [0xAA0C]={ category="lo", description="CHAM LETTER CHA", direction="l", linebreak="al", unicodeslot=0xAA0C, }, [0xAA0D]={ category="lo", description="CHAM LETTER CHHA", direction="l", linebreak="al", unicodeslot=0xAA0D, }, [0xAA0E]={ category="lo", description="CHAM LETTER JA", direction="l", linebreak="al", unicodeslot=0xAA0E, }, [0xAA0F]={ category="lo", description="CHAM LETTER JHA", direction="l", linebreak="al", unicodeslot=0xAA0F, }, [0xAA10]={ category="lo", description="CHAM LETTER NHUE", direction="l", linebreak="al", unicodeslot=0xAA10, }, [0xAA11]={ category="lo", description="CHAM LETTER NHA", direction="l", linebreak="al", unicodeslot=0xAA11, }, [0xAA12]={ category="lo", description="CHAM LETTER NHJA", direction="l", linebreak="al", unicodeslot=0xAA12, }, [0xAA13]={ category="lo", description="CHAM LETTER TA", direction="l", linebreak="al", unicodeslot=0xAA13, }, [0xAA14]={ category="lo", description="CHAM LETTER THA", direction="l", linebreak="al", unicodeslot=0xAA14, }, [0xAA15]={ category="lo", description="CHAM LETTER DA", direction="l", linebreak="al", unicodeslot=0xAA15, }, [0xAA16]={ category="lo", description="CHAM LETTER DHA", direction="l", linebreak="al", unicodeslot=0xAA16, }, [0xAA17]={ category="lo", description="CHAM LETTER NUE", direction="l", linebreak="al", unicodeslot=0xAA17, }, [0xAA18]={ category="lo", description="CHAM LETTER NA", direction="l", linebreak="al", unicodeslot=0xAA18, }, [0xAA19]={ category="lo", description="CHAM LETTER DDA", direction="l", linebreak="al", unicodeslot=0xAA19, }, [0xAA1A]={ category="lo", description="CHAM LETTER PA", direction="l", linebreak="al", unicodeslot=0xAA1A, }, [0xAA1B]={ category="lo", description="CHAM LETTER PPA", direction="l", linebreak="al", unicodeslot=0xAA1B, }, [0xAA1C]={ category="lo", description="CHAM LETTER PHA", direction="l", linebreak="al", unicodeslot=0xAA1C, }, [0xAA1D]={ category="lo", description="CHAM LETTER BA", direction="l", linebreak="al", unicodeslot=0xAA1D, }, [0xAA1E]={ category="lo", description="CHAM LETTER BHA", direction="l", linebreak="al", unicodeslot=0xAA1E, }, [0xAA1F]={ category="lo", description="CHAM LETTER MUE", direction="l", linebreak="al", unicodeslot=0xAA1F, }, [0xAA20]={ category="lo", description="CHAM LETTER MA", direction="l", linebreak="al", unicodeslot=0xAA20, }, [0xAA21]={ category="lo", description="CHAM LETTER BBA", direction="l", linebreak="al", unicodeslot=0xAA21, }, [0xAA22]={ category="lo", description="CHAM LETTER YA", direction="l", linebreak="al", unicodeslot=0xAA22, }, [0xAA23]={ category="lo", description="CHAM LETTER RA", direction="l", linebreak="al", unicodeslot=0xAA23, }, [0xAA24]={ category="lo", description="CHAM LETTER LA", direction="l", linebreak="al", unicodeslot=0xAA24, }, [0xAA25]={ category="lo", description="CHAM LETTER VA", direction="l", linebreak="al", unicodeslot=0xAA25, }, [0xAA26]={ category="lo", description="CHAM LETTER SSA", direction="l", linebreak="al", unicodeslot=0xAA26, }, [0xAA27]={ category="lo", description="CHAM LETTER SA", direction="l", linebreak="al", unicodeslot=0xAA27, }, [0xAA28]={ category="lo", description="CHAM LETTER HA", direction="l", linebreak="al", unicodeslot=0xAA28, }, [0xAA29]={ category="mn", description="CHAM VOWEL SIGN AA", direction="nsm", linebreak="cm", unicodeslot=0xAA29, }, [0xAA2A]={ category="mn", description="CHAM VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0xAA2A, }, [0xAA2B]={ category="mn", description="CHAM VOWEL SIGN II", direction="nsm", linebreak="cm", unicodeslot=0xAA2B, }, [0xAA2C]={ category="mn", description="CHAM VOWEL SIGN EI", direction="nsm", linebreak="cm", unicodeslot=0xAA2C, }, [0xAA2D]={ category="mn", description="CHAM VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0xAA2D, }, [0xAA2E]={ category="mn", description="CHAM VOWEL SIGN OE", direction="nsm", linebreak="cm", unicodeslot=0xAA2E, }, [0xAA2F]={ category="mc", description="CHAM VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0xAA2F, }, [0xAA30]={ category="mc", description="CHAM VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0xAA30, }, [0xAA31]={ category="mn", description="CHAM VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0xAA31, }, [0xAA32]={ category="mn", description="CHAM VOWEL SIGN UE", direction="nsm", linebreak="cm", unicodeslot=0xAA32, }, [0xAA33]={ category="mc", description="CHAM CONSONANT SIGN YA", direction="l", linebreak="cm", unicodeslot=0xAA33, }, [0xAA34]={ category="mc", description="CHAM CONSONANT SIGN RA", direction="l", linebreak="cm", unicodeslot=0xAA34, }, [0xAA35]={ category="mn", description="CHAM CONSONANT SIGN LA", direction="nsm", linebreak="cm", unicodeslot=0xAA35, }, [0xAA36]={ category="mn", description="CHAM CONSONANT SIGN WA", direction="nsm", linebreak="cm", unicodeslot=0xAA36, }, [0xAA40]={ category="lo", description="CHAM LETTER FINAL K", direction="l", linebreak="al", unicodeslot=0xAA40, }, [0xAA41]={ category="lo", description="CHAM LETTER FINAL G", direction="l", linebreak="al", unicodeslot=0xAA41, }, [0xAA42]={ category="lo", description="CHAM LETTER FINAL NG", direction="l", linebreak="al", unicodeslot=0xAA42, }, [0xAA43]={ category="mn", description="CHAM CONSONANT SIGN FINAL NG", direction="nsm", linebreak="cm", unicodeslot=0xAA43, }, [0xAA44]={ category="lo", description="CHAM LETTER FINAL CH", direction="l", linebreak="al", unicodeslot=0xAA44, }, [0xAA45]={ category="lo", description="CHAM LETTER FINAL T", direction="l", linebreak="al", unicodeslot=0xAA45, }, [0xAA46]={ category="lo", description="CHAM LETTER FINAL N", direction="l", linebreak="al", unicodeslot=0xAA46, }, [0xAA47]={ category="lo", description="CHAM LETTER FINAL P", direction="l", linebreak="al", unicodeslot=0xAA47, }, [0xAA48]={ category="lo", description="CHAM LETTER FINAL Y", direction="l", linebreak="al", unicodeslot=0xAA48, }, [0xAA49]={ category="lo", description="CHAM LETTER FINAL R", direction="l", linebreak="al", unicodeslot=0xAA49, }, [0xAA4A]={ category="lo", description="CHAM LETTER FINAL L", direction="l", linebreak="al", unicodeslot=0xAA4A, }, [0xAA4B]={ category="lo", description="CHAM LETTER FINAL SS", direction="l", linebreak="al", unicodeslot=0xAA4B, }, [0xAA4C]={ category="mn", description="CHAM CONSONANT SIGN FINAL M", direction="nsm", linebreak="cm", unicodeslot=0xAA4C, }, [0xAA4D]={ category="mc", description="CHAM CONSONANT SIGN FINAL H", direction="l", linebreak="cm", unicodeslot=0xAA4D, }, [0xAA50]={ category="nd", description="CHAM DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0xAA50, }, [0xAA51]={ category="nd", description="CHAM DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0xAA51, }, [0xAA52]={ category="nd", description="CHAM DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0xAA52, }, [0xAA53]={ category="nd", description="CHAM DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0xAA53, }, [0xAA54]={ category="nd", description="CHAM DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0xAA54, }, [0xAA55]={ category="nd", description="CHAM DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0xAA55, }, [0xAA56]={ category="nd", description="CHAM DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0xAA56, }, [0xAA57]={ category="nd", description="CHAM DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0xAA57, }, [0xAA58]={ category="nd", description="CHAM DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0xAA58, }, [0xAA59]={ category="nd", description="CHAM DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0xAA59, }, [0xAA5C]={ category="po", description="CHAM PUNCTUATION SPIRAL", direction="l", linebreak="al", unicodeslot=0xAA5C, }, [0xAA5D]={ category="po", description="CHAM PUNCTUATION DANDA", direction="l", linebreak="ba", unicodeslot=0xAA5D, }, [0xAA5E]={ category="po", description="CHAM PUNCTUATION DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0xAA5E, }, [0xAA5F]={ category="po", description="CHAM PUNCTUATION TRIPLE DANDA", direction="l", linebreak="ba", unicodeslot=0xAA5F, }, [0xAA60]={ category="lo", description="MYANMAR LETTER KHAMTI GA", direction="l", linebreak="sa", unicodeslot=0xAA60, }, [0xAA61]={ category="lo", description="MYANMAR LETTER KHAMTI CA", direction="l", linebreak="sa", unicodeslot=0xAA61, }, [0xAA62]={ category="lo", description="MYANMAR LETTER KHAMTI CHA", direction="l", linebreak="sa", unicodeslot=0xAA62, }, [0xAA63]={ category="lo", description="MYANMAR LETTER KHAMTI JA", direction="l", linebreak="sa", unicodeslot=0xAA63, }, [0xAA64]={ category="lo", description="MYANMAR LETTER KHAMTI JHA", direction="l", linebreak="sa", unicodeslot=0xAA64, }, [0xAA65]={ category="lo", description="MYANMAR LETTER KHAMTI NYA", direction="l", linebreak="sa", unicodeslot=0xAA65, }, [0xAA66]={ category="lo", description="MYANMAR LETTER KHAMTI TTA", direction="l", linebreak="sa", unicodeslot=0xAA66, }, [0xAA67]={ category="lo", description="MYANMAR LETTER KHAMTI TTHA", direction="l", linebreak="sa", unicodeslot=0xAA67, }, [0xAA68]={ category="lo", description="MYANMAR LETTER KHAMTI DDA", direction="l", linebreak="sa", unicodeslot=0xAA68, }, [0xAA69]={ category="lo", description="MYANMAR LETTER KHAMTI DDHA", direction="l", linebreak="sa", unicodeslot=0xAA69, }, [0xAA6A]={ category="lo", description="MYANMAR LETTER KHAMTI DHA", direction="l", linebreak="sa", unicodeslot=0xAA6A, }, [0xAA6B]={ category="lo", description="MYANMAR LETTER KHAMTI NA", direction="l", linebreak="sa", unicodeslot=0xAA6B, }, [0xAA6C]={ category="lo", description="MYANMAR LETTER KHAMTI SA", direction="l", linebreak="sa", unicodeslot=0xAA6C, }, [0xAA6D]={ category="lo", description="MYANMAR LETTER KHAMTI HA", direction="l", linebreak="sa", unicodeslot=0xAA6D, }, [0xAA6E]={ category="lo", description="MYANMAR LETTER KHAMTI HHA", direction="l", linebreak="sa", unicodeslot=0xAA6E, }, [0xAA6F]={ category="lo", description="MYANMAR LETTER KHAMTI FA", direction="l", linebreak="sa", unicodeslot=0xAA6F, }, [0xAA70]={ category="lm", description="MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION", direction="l", linebreak="sa", unicodeslot=0xAA70, }, [0xAA71]={ category="lo", description="MYANMAR LETTER KHAMTI XA", direction="l", linebreak="sa", unicodeslot=0xAA71, }, [0xAA72]={ category="lo", description="MYANMAR LETTER KHAMTI ZA", direction="l", linebreak="sa", unicodeslot=0xAA72, }, [0xAA73]={ category="lo", description="MYANMAR LETTER KHAMTI RA", direction="l", linebreak="sa", unicodeslot=0xAA73, }, [0xAA74]={ category="lo", description="MYANMAR LOGOGRAM KHAMTI OAY", direction="l", linebreak="sa", unicodeslot=0xAA74, }, [0xAA75]={ category="lo", description="MYANMAR LOGOGRAM KHAMTI QN", direction="l", linebreak="sa", unicodeslot=0xAA75, }, [0xAA76]={ category="lo", description="MYANMAR LOGOGRAM KHAMTI HM", direction="l", linebreak="sa", unicodeslot=0xAA76, }, [0xAA77]={ category="so", description="MYANMAR SYMBOL AITON EXCLAMATION", direction="l", linebreak="sa", unicodeslot=0xAA77, }, [0xAA78]={ category="so", description="MYANMAR SYMBOL AITON ONE", direction="l", linebreak="sa", unicodeslot=0xAA78, }, [0xAA79]={ category="so", description="MYANMAR SYMBOL AITON TWO", direction="l", linebreak="sa", unicodeslot=0xAA79, }, [0xAA7A]={ category="lo", description="MYANMAR LETTER AITON RA", direction="l", linebreak="sa", unicodeslot=0xAA7A, }, [0xAA7B]={ category="mc", description="MYANMAR SIGN PAO KAREN TONE", direction="l", linebreak="sa", unicodeslot=0xAA7B, }, [0xAA80]={ category="lo", description="TAI VIET LETTER LOW KO", direction="l", linebreak="sa", unicodeslot=0xAA80, }, [0xAA81]={ category="lo", description="TAI VIET LETTER HIGH KO", direction="l", linebreak="sa", unicodeslot=0xAA81, }, [0xAA82]={ category="lo", description="TAI VIET LETTER LOW KHO", direction="l", linebreak="sa", unicodeslot=0xAA82, }, [0xAA83]={ category="lo", description="TAI VIET LETTER HIGH KHO", direction="l", linebreak="sa", unicodeslot=0xAA83, }, [0xAA84]={ category="lo", description="TAI VIET LETTER LOW KHHO", direction="l", linebreak="sa", unicodeslot=0xAA84, }, [0xAA85]={ category="lo", description="TAI VIET LETTER HIGH KHHO", direction="l", linebreak="sa", unicodeslot=0xAA85, }, [0xAA86]={ category="lo", description="TAI VIET LETTER LOW GO", direction="l", linebreak="sa", unicodeslot=0xAA86, }, [0xAA87]={ category="lo", description="TAI VIET LETTER HIGH GO", direction="l", linebreak="sa", unicodeslot=0xAA87, }, [0xAA88]={ category="lo", description="TAI VIET LETTER LOW NGO", direction="l", linebreak="sa", unicodeslot=0xAA88, }, [0xAA89]={ category="lo", description="TAI VIET LETTER HIGH NGO", direction="l", linebreak="sa", unicodeslot=0xAA89, }, [0xAA8A]={ category="lo", description="TAI VIET LETTER LOW CO", direction="l", linebreak="sa", unicodeslot=0xAA8A, }, [0xAA8B]={ category="lo", description="TAI VIET LETTER HIGH CO", direction="l", linebreak="sa", unicodeslot=0xAA8B, }, [0xAA8C]={ category="lo", description="TAI VIET LETTER LOW CHO", direction="l", linebreak="sa", unicodeslot=0xAA8C, }, [0xAA8D]={ category="lo", description="TAI VIET LETTER HIGH CHO", direction="l", linebreak="sa", unicodeslot=0xAA8D, }, [0xAA8E]={ category="lo", description="TAI VIET LETTER LOW SO", direction="l", linebreak="sa", unicodeslot=0xAA8E, }, [0xAA8F]={ category="lo", description="TAI VIET LETTER HIGH SO", direction="l", linebreak="sa", unicodeslot=0xAA8F, }, [0xAA90]={ category="lo", description="TAI VIET LETTER LOW NYO", direction="l", linebreak="sa", unicodeslot=0xAA90, }, [0xAA91]={ category="lo", description="TAI VIET LETTER HIGH NYO", direction="l", linebreak="sa", unicodeslot=0xAA91, }, [0xAA92]={ category="lo", description="TAI VIET LETTER LOW DO", direction="l", linebreak="sa", unicodeslot=0xAA92, }, [0xAA93]={ category="lo", description="TAI VIET LETTER HIGH DO", direction="l", linebreak="sa", unicodeslot=0xAA93, }, [0xAA94]={ category="lo", description="TAI VIET LETTER LOW TO", direction="l", linebreak="sa", unicodeslot=0xAA94, }, [0xAA95]={ category="lo", description="TAI VIET LETTER HIGH TO", direction="l", linebreak="sa", unicodeslot=0xAA95, }, [0xAA96]={ category="lo", description="TAI VIET LETTER LOW THO", direction="l", linebreak="sa", unicodeslot=0xAA96, }, [0xAA97]={ category="lo", description="TAI VIET LETTER HIGH THO", direction="l", linebreak="sa", unicodeslot=0xAA97, }, [0xAA98]={ category="lo", description="TAI VIET LETTER LOW NO", direction="l", linebreak="sa", unicodeslot=0xAA98, }, [0xAA99]={ category="lo", description="TAI VIET LETTER HIGH NO", direction="l", linebreak="sa", unicodeslot=0xAA99, }, [0xAA9A]={ category="lo", description="TAI VIET LETTER LOW BO", direction="l", linebreak="sa", unicodeslot=0xAA9A, }, [0xAA9B]={ category="lo", description="TAI VIET LETTER HIGH BO", direction="l", linebreak="sa", unicodeslot=0xAA9B, }, [0xAA9C]={ category="lo", description="TAI VIET LETTER LOW PO", direction="l", linebreak="sa", unicodeslot=0xAA9C, }, [0xAA9D]={ category="lo", description="TAI VIET LETTER HIGH PO", direction="l", linebreak="sa", unicodeslot=0xAA9D, }, [0xAA9E]={ category="lo", description="TAI VIET LETTER LOW PHO", direction="l", linebreak="sa", unicodeslot=0xAA9E, }, [0xAA9F]={ category="lo", description="TAI VIET LETTER HIGH PHO", direction="l", linebreak="sa", unicodeslot=0xAA9F, }, [0xAAA0]={ category="lo", description="TAI VIET LETTER LOW FO", direction="l", linebreak="sa", unicodeslot=0xAAA0, }, [0xAAA1]={ category="lo", description="TAI VIET LETTER HIGH FO", direction="l", linebreak="sa", unicodeslot=0xAAA1, }, [0xAAA2]={ category="lo", description="TAI VIET LETTER LOW MO", direction="l", linebreak="sa", unicodeslot=0xAAA2, }, [0xAAA3]={ category="lo", description="TAI VIET LETTER HIGH MO", direction="l", linebreak="sa", unicodeslot=0xAAA3, }, [0xAAA4]={ category="lo", description="TAI VIET LETTER LOW YO", direction="l", linebreak="sa", unicodeslot=0xAAA4, }, [0xAAA5]={ category="lo", description="TAI VIET LETTER HIGH YO", direction="l", linebreak="sa", unicodeslot=0xAAA5, }, [0xAAA6]={ category="lo", description="TAI VIET LETTER LOW RO", direction="l", linebreak="sa", unicodeslot=0xAAA6, }, [0xAAA7]={ category="lo", description="TAI VIET LETTER HIGH RO", direction="l", linebreak="sa", unicodeslot=0xAAA7, }, [0xAAA8]={ category="lo", description="TAI VIET LETTER LOW LO", direction="l", linebreak="sa", unicodeslot=0xAAA8, }, [0xAAA9]={ category="lo", description="TAI VIET LETTER HIGH LO", direction="l", linebreak="sa", unicodeslot=0xAAA9, }, [0xAAAA]={ category="lo", description="TAI VIET LETTER LOW VO", direction="l", linebreak="sa", unicodeslot=0xAAAA, }, [0xAAAB]={ category="lo", description="TAI VIET LETTER HIGH VO", direction="l", linebreak="sa", unicodeslot=0xAAAB, }, [0xAAAC]={ category="lo", description="TAI VIET LETTER LOW HO", direction="l", linebreak="sa", unicodeslot=0xAAAC, }, [0xAAAD]={ category="lo", description="TAI VIET LETTER HIGH HO", direction="l", linebreak="sa", unicodeslot=0xAAAD, }, [0xAAAE]={ category="lo", description="TAI VIET LETTER LOW O", direction="l", linebreak="sa", unicodeslot=0xAAAE, }, [0xAAAF]={ category="lo", description="TAI VIET LETTER HIGH O", direction="l", linebreak="sa", unicodeslot=0xAAAF, }, [0xAAB0]={ category="mn", description="TAI VIET MAI KANG", direction="nsm", linebreak="sa", unicodeslot=0xAAB0, }, [0xAAB1]={ category="lo", description="TAI VIET VOWEL AA", direction="l", linebreak="sa", unicodeslot=0xAAB1, }, [0xAAB2]={ category="mn", description="TAI VIET VOWEL I", direction="nsm", linebreak="sa", unicodeslot=0xAAB2, }, [0xAAB3]={ category="mn", description="TAI VIET VOWEL UE", direction="nsm", linebreak="sa", unicodeslot=0xAAB3, }, [0xAAB4]={ category="mn", description="TAI VIET VOWEL U", direction="nsm", linebreak="sa", unicodeslot=0xAAB4, }, [0xAAB5]={ category="lo", description="TAI VIET VOWEL E", direction="l", linebreak="sa", unicodeslot=0xAAB5, }, [0xAAB6]={ category="lo", description="TAI VIET VOWEL O", direction="l", linebreak="sa", unicodeslot=0xAAB6, }, [0xAAB7]={ category="mn", description="TAI VIET MAI KHIT", direction="nsm", linebreak="sa", unicodeslot=0xAAB7, }, [0xAAB8]={ category="mn", description="TAI VIET VOWEL IA", direction="nsm", linebreak="sa", unicodeslot=0xAAB8, }, [0xAAB9]={ category="lo", description="TAI VIET VOWEL UEA", direction="l", linebreak="sa", unicodeslot=0xAAB9, }, [0xAABA]={ category="lo", description="TAI VIET VOWEL UA", direction="l", linebreak="sa", unicodeslot=0xAABA, }, [0xAABB]={ category="lo", description="TAI VIET VOWEL AUE", direction="l", linebreak="sa", unicodeslot=0xAABB, }, [0xAABC]={ category="lo", description="TAI VIET VOWEL AY", direction="l", linebreak="sa", unicodeslot=0xAABC, }, [0xAABD]={ category="lo", description="TAI VIET VOWEL AN", direction="l", linebreak="sa", unicodeslot=0xAABD, }, [0xAABE]={ category="mn", description="TAI VIET VOWEL AM", direction="nsm", linebreak="sa", unicodeslot=0xAABE, }, [0xAABF]={ category="mn", description="TAI VIET TONE MAI EK", direction="nsm", linebreak="sa", unicodeslot=0xAABF, }, [0xAAC0]={ category="lo", description="TAI VIET TONE MAI NUENG", direction="l", linebreak="sa", unicodeslot=0xAAC0, }, [0xAAC1]={ category="mn", description="TAI VIET TONE MAI THO", direction="nsm", linebreak="sa", unicodeslot=0xAAC1, }, [0xAAC2]={ category="lo", description="TAI VIET TONE MAI SONG", direction="l", linebreak="sa", unicodeslot=0xAAC2, }, [0xAADB]={ category="lo", description="TAI VIET SYMBOL KON", direction="l", linebreak="sa", unicodeslot=0xAADB, }, [0xAADC]={ category="lo", description="TAI VIET SYMBOL NUENG", direction="l", linebreak="sa", unicodeslot=0xAADC, }, [0xAADD]={ category="lm", description="TAI VIET SYMBOL SAM", direction="l", linebreak="sa", unicodeslot=0xAADD, }, [0xAADE]={ category="po", description="TAI VIET SYMBOL HO HOI", direction="l", linebreak="sa", unicodeslot=0xAADE, }, [0xAADF]={ category="po", description="TAI VIET SYMBOL KOI KOI", direction="l", linebreak="sa", unicodeslot=0xAADF, }, [0xAAE0]={ category="lo", description="MEETEI MAYEK LETTER E", direction="l", linebreak="al", unicodeslot=0xAAE0, }, [0xAAE1]={ category="lo", description="MEETEI MAYEK LETTER O", direction="l", linebreak="al", unicodeslot=0xAAE1, }, [0xAAE2]={ category="lo", description="MEETEI MAYEK LETTER CHA", direction="l", linebreak="al", unicodeslot=0xAAE2, }, [0xAAE3]={ category="lo", description="MEETEI MAYEK LETTER NYA", direction="l", linebreak="al", unicodeslot=0xAAE3, }, [0xAAE4]={ category="lo", description="MEETEI MAYEK LETTER TTA", direction="l", linebreak="al", unicodeslot=0xAAE4, }, [0xAAE5]={ category="lo", description="MEETEI MAYEK LETTER TTHA", direction="l", linebreak="al", unicodeslot=0xAAE5, }, [0xAAE6]={ category="lo", description="MEETEI MAYEK LETTER DDA", direction="l", linebreak="al", unicodeslot=0xAAE6, }, [0xAAE7]={ category="lo", description="MEETEI MAYEK LETTER DDHA", direction="l", linebreak="al", unicodeslot=0xAAE7, }, [0xAAE8]={ category="lo", description="MEETEI MAYEK LETTER NNA", direction="l", linebreak="al", unicodeslot=0xAAE8, }, [0xAAE9]={ category="lo", description="MEETEI MAYEK LETTER SHA", direction="l", linebreak="al", unicodeslot=0xAAE9, }, [0xAAEA]={ category="lo", description="MEETEI MAYEK LETTER SSA", direction="l", linebreak="al", unicodeslot=0xAAEA, }, [0xAAEB]={ category="mc", description="MEETEI MAYEK VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0xAAEB, }, [0xAAEC]={ category="mn", description="MEETEI MAYEK VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0xAAEC, }, [0xAAED]={ category="mn", description="MEETEI MAYEK VOWEL SIGN AAI", direction="nsm", linebreak="cm", unicodeslot=0xAAED, }, [0xAAEE]={ category="mc", description="MEETEI MAYEK VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0xAAEE, }, [0xAAEF]={ category="mc", description="MEETEI MAYEK VOWEL SIGN AAU", direction="l", linebreak="cm", unicodeslot=0xAAEF, }, [0xAAF0]={ category="po", description="MEETEI MAYEK CHEIKHAN", direction="l", linebreak="ba", unicodeslot=0xAAF0, }, [0xAAF1]={ category="po", description="MEETEI MAYEK AHANG KHUDAM", direction="l", linebreak="ba", unicodeslot=0xAAF1, }, [0xAAF2]={ category="lo", description="MEETEI MAYEK ANJI", direction="l", linebreak="al", unicodeslot=0xAAF2, }, [0xAAF3]={ category="lm", description="MEETEI MAYEK SYLLABLE REPETITION MARK", direction="l", linebreak="al", unicodeslot=0xAAF3, }, [0xAAF4]={ category="lm", description="MEETEI MAYEK WORD REPETITION MARK", direction="l", linebreak="al", unicodeslot=0xAAF4, }, [0xAAF5]={ category="mc", description="MEETEI MAYEK VOWEL SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0xAAF5, }, [0xAAF6]={ category="mn", description="MEETEI MAYEK VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0xAAF6, }, [0xAB01]={ category="lo", description="ETHIOPIC SYLLABLE TTHU", direction="l", linebreak="al", unicodeslot=0xAB01, }, [0xAB02]={ category="lo", description="ETHIOPIC SYLLABLE TTHI", direction="l", linebreak="al", unicodeslot=0xAB02, }, [0xAB03]={ category="lo", description="ETHIOPIC SYLLABLE TTHAA", direction="l", linebreak="al", unicodeslot=0xAB03, }, [0xAB04]={ category="lo", description="ETHIOPIC SYLLABLE TTHEE", direction="l", linebreak="al", unicodeslot=0xAB04, }, [0xAB05]={ category="lo", description="ETHIOPIC SYLLABLE TTHE", direction="l", linebreak="al", unicodeslot=0xAB05, }, [0xAB06]={ category="lo", description="ETHIOPIC SYLLABLE TTHO", direction="l", linebreak="al", unicodeslot=0xAB06, }, [0xAB09]={ category="lo", description="ETHIOPIC SYLLABLE DDHU", direction="l", linebreak="al", unicodeslot=0xAB09, }, [0xAB0A]={ category="lo", description="ETHIOPIC SYLLABLE DDHI", direction="l", linebreak="al", unicodeslot=0xAB0A, }, [0xAB0B]={ category="lo", description="ETHIOPIC SYLLABLE DDHAA", direction="l", linebreak="al", unicodeslot=0xAB0B, }, [0xAB0C]={ category="lo", description="ETHIOPIC SYLLABLE DDHEE", direction="l", linebreak="al", unicodeslot=0xAB0C, }, [0xAB0D]={ category="lo", description="ETHIOPIC SYLLABLE DDHE", direction="l", linebreak="al", unicodeslot=0xAB0D, }, [0xAB0E]={ category="lo", description="ETHIOPIC SYLLABLE DDHO", direction="l", linebreak="al", unicodeslot=0xAB0E, }, [0xAB11]={ category="lo", description="ETHIOPIC SYLLABLE DZU", direction="l", linebreak="al", unicodeslot=0xAB11, }, [0xAB12]={ category="lo", description="ETHIOPIC SYLLABLE DZI", direction="l", linebreak="al", unicodeslot=0xAB12, }, [0xAB13]={ category="lo", description="ETHIOPIC SYLLABLE DZAA", direction="l", linebreak="al", unicodeslot=0xAB13, }, [0xAB14]={ category="lo", description="ETHIOPIC SYLLABLE DZEE", direction="l", linebreak="al", unicodeslot=0xAB14, }, [0xAB15]={ category="lo", description="ETHIOPIC SYLLABLE DZE", direction="l", linebreak="al", unicodeslot=0xAB15, }, [0xAB16]={ category="lo", description="ETHIOPIC SYLLABLE DZO", direction="l", linebreak="al", unicodeslot=0xAB16, }, [0xAB20]={ category="lo", description="ETHIOPIC SYLLABLE CCHHA", direction="l", linebreak="al", unicodeslot=0xAB20, }, [0xAB21]={ category="lo", description="ETHIOPIC SYLLABLE CCHHU", direction="l", linebreak="al", unicodeslot=0xAB21, }, [0xAB22]={ category="lo", description="ETHIOPIC SYLLABLE CCHHI", direction="l", linebreak="al", unicodeslot=0xAB22, }, [0xAB23]={ category="lo", description="ETHIOPIC SYLLABLE CCHHAA", direction="l", linebreak="al", unicodeslot=0xAB23, }, [0xAB24]={ category="lo", description="ETHIOPIC SYLLABLE CCHHEE", direction="l", linebreak="al", unicodeslot=0xAB24, }, [0xAB25]={ category="lo", description="ETHIOPIC SYLLABLE CCHHE", direction="l", linebreak="al", unicodeslot=0xAB25, }, [0xAB26]={ category="lo", description="ETHIOPIC SYLLABLE CCHHO", direction="l", linebreak="al", unicodeslot=0xAB26, }, [0xAB28]={ category="lo", description="ETHIOPIC SYLLABLE BBA", direction="l", linebreak="al", unicodeslot=0xAB28, }, [0xAB29]={ category="lo", description="ETHIOPIC SYLLABLE BBU", direction="l", linebreak="al", unicodeslot=0xAB29, }, [0xAB2A]={ category="lo", description="ETHIOPIC SYLLABLE BBI", direction="l", linebreak="al", unicodeslot=0xAB2A, }, [0xAB2B]={ category="lo", description="ETHIOPIC SYLLABLE BBAA", direction="l", linebreak="al", unicodeslot=0xAB2B, }, [0xAB2C]={ category="lo", description="ETHIOPIC SYLLABLE BBEE", direction="l", linebreak="al", unicodeslot=0xAB2C, }, [0xAB2D]={ category="lo", description="ETHIOPIC SYLLABLE BBE", direction="l", linebreak="al", unicodeslot=0xAB2D, }, [0xAB2E]={ category="lo", description="ETHIOPIC SYLLABLE BBO", direction="l", linebreak="al", unicodeslot=0xAB2E, }, [0xABC0]={ category="lo", description="MEETEI MAYEK LETTER KOK", direction="l", linebreak="al", unicodeslot=0xABC0, }, [0xABC1]={ category="lo", description="MEETEI MAYEK LETTER SAM", direction="l", linebreak="al", unicodeslot=0xABC1, }, [0xABC2]={ category="lo", description="MEETEI MAYEK LETTER LAI", direction="l", linebreak="al", unicodeslot=0xABC2, }, [0xABC3]={ category="lo", description="MEETEI MAYEK LETTER MIT", direction="l", linebreak="al", unicodeslot=0xABC3, }, [0xABC4]={ category="lo", description="MEETEI MAYEK LETTER PA", direction="l", linebreak="al", unicodeslot=0xABC4, }, [0xABC5]={ category="lo", description="MEETEI MAYEK LETTER NA", direction="l", linebreak="al", unicodeslot=0xABC5, }, [0xABC6]={ category="lo", description="MEETEI MAYEK LETTER CHIL", direction="l", linebreak="al", unicodeslot=0xABC6, }, [0xABC7]={ category="lo", description="MEETEI MAYEK LETTER TIL", direction="l", linebreak="al", unicodeslot=0xABC7, }, [0xABC8]={ category="lo", description="MEETEI MAYEK LETTER KHOU", direction="l", linebreak="al", unicodeslot=0xABC8, }, [0xABC9]={ category="lo", description="MEETEI MAYEK LETTER NGOU", direction="l", linebreak="al", unicodeslot=0xABC9, }, [0xABCA]={ category="lo", description="MEETEI MAYEK LETTER THOU", direction="l", linebreak="al", unicodeslot=0xABCA, }, [0xABCB]={ category="lo", description="MEETEI MAYEK LETTER WAI", direction="l", linebreak="al", unicodeslot=0xABCB, }, [0xABCC]={ category="lo", description="MEETEI MAYEK LETTER YANG", direction="l", linebreak="al", unicodeslot=0xABCC, }, [0xABCD]={ category="lo", description="MEETEI MAYEK LETTER HUK", direction="l", linebreak="al", unicodeslot=0xABCD, }, [0xABCE]={ category="lo", description="MEETEI MAYEK LETTER UN", direction="l", linebreak="al", unicodeslot=0xABCE, }, [0xABCF]={ category="lo", description="MEETEI MAYEK LETTER I", direction="l", linebreak="al", unicodeslot=0xABCF, }, [0xABD0]={ category="lo", description="MEETEI MAYEK LETTER PHAM", direction="l", linebreak="al", unicodeslot=0xABD0, }, [0xABD1]={ category="lo", description="MEETEI MAYEK LETTER ATIYA", direction="l", linebreak="al", unicodeslot=0xABD1, }, [0xABD2]={ category="lo", description="MEETEI MAYEK LETTER GOK", direction="l", linebreak="al", unicodeslot=0xABD2, }, [0xABD3]={ category="lo", description="MEETEI MAYEK LETTER JHAM", direction="l", linebreak="al", unicodeslot=0xABD3, }, [0xABD4]={ category="lo", description="MEETEI MAYEK LETTER RAI", direction="l", linebreak="al", unicodeslot=0xABD4, }, [0xABD5]={ category="lo", description="MEETEI MAYEK LETTER BA", direction="l", linebreak="al", unicodeslot=0xABD5, }, [0xABD6]={ category="lo", description="MEETEI MAYEK LETTER JIL", direction="l", linebreak="al", unicodeslot=0xABD6, }, [0xABD7]={ category="lo", description="MEETEI MAYEK LETTER DIL", direction="l", linebreak="al", unicodeslot=0xABD7, }, [0xABD8]={ category="lo", description="MEETEI MAYEK LETTER GHOU", direction="l", linebreak="al", unicodeslot=0xABD8, }, [0xABD9]={ category="lo", description="MEETEI MAYEK LETTER DHOU", direction="l", linebreak="al", unicodeslot=0xABD9, }, [0xABDA]={ category="lo", description="MEETEI MAYEK LETTER BHAM", direction="l", linebreak="al", unicodeslot=0xABDA, }, [0xABDB]={ category="lo", description="MEETEI MAYEK LETTER KOK LONSUM", direction="l", linebreak="al", unicodeslot=0xABDB, }, [0xABDC]={ category="lo", description="MEETEI MAYEK LETTER LAI LONSUM", direction="l", linebreak="al", unicodeslot=0xABDC, }, [0xABDD]={ category="lo", description="MEETEI MAYEK LETTER MIT LONSUM", direction="l", linebreak="al", unicodeslot=0xABDD, }, [0xABDE]={ category="lo", description="MEETEI MAYEK LETTER PA LONSUM", direction="l", linebreak="al", unicodeslot=0xABDE, }, [0xABDF]={ category="lo", description="MEETEI MAYEK LETTER NA LONSUM", direction="l", linebreak="al", unicodeslot=0xABDF, }, [0xABE0]={ category="lo", description="MEETEI MAYEK LETTER TIL LONSUM", direction="l", linebreak="al", unicodeslot=0xABE0, }, [0xABE1]={ category="lo", description="MEETEI MAYEK LETTER NGOU LONSUM", direction="l", linebreak="al", unicodeslot=0xABE1, }, [0xABE2]={ category="lo", description="MEETEI MAYEK LETTER I LONSUM", direction="l", linebreak="al", unicodeslot=0xABE2, }, [0xABE3]={ category="mc", description="MEETEI MAYEK VOWEL SIGN ONAP", direction="l", linebreak="cm", unicodeslot=0xABE3, }, [0xABE4]={ category="mc", description="MEETEI MAYEK VOWEL SIGN INAP", direction="l", linebreak="cm", unicodeslot=0xABE4, }, [0xABE5]={ category="mn", description="MEETEI MAYEK VOWEL SIGN ANAP", direction="nsm", linebreak="cm", unicodeslot=0xABE5, }, [0xABE6]={ category="mc", description="MEETEI MAYEK VOWEL SIGN YENAP", direction="l", linebreak="cm", unicodeslot=0xABE6, }, [0xABE7]={ category="mc", description="MEETEI MAYEK VOWEL SIGN SOUNAP", direction="l", linebreak="cm", unicodeslot=0xABE7, }, [0xABE8]={ category="mn", description="MEETEI MAYEK VOWEL SIGN UNAP", direction="nsm", linebreak="cm", unicodeslot=0xABE8, }, [0xABE9]={ category="mc", description="MEETEI MAYEK VOWEL SIGN CHEINAP", direction="l", linebreak="cm", unicodeslot=0xABE9, }, [0xABEA]={ category="mc", description="MEETEI MAYEK VOWEL SIGN NUNG", direction="l", linebreak="cm", unicodeslot=0xABEA, }, [0xABEB]={ category="po", description="MEETEI MAYEK CHEIKHEI", direction="l", linebreak="ba", unicodeslot=0xABEB, }, [0xABEC]={ category="mc", description="MEETEI MAYEK LUM IYEK", direction="l", linebreak="cm", unicodeslot=0xABEC, }, [0xABED]={ category="mn", description="MEETEI MAYEK APUN IYEK", direction="nsm", linebreak="cm", unicodeslot=0xABED, }, [0xABF0]={ category="nd", description="MEETEI MAYEK DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0xABF0, }, [0xABF1]={ category="nd", description="MEETEI MAYEK DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0xABF1, }, [0xABF2]={ category="nd", description="MEETEI MAYEK DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0xABF2, }, [0xABF3]={ category="nd", description="MEETEI MAYEK DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0xABF3, }, [0xABF4]={ category="nd", description="MEETEI MAYEK DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0xABF4, }, [0xABF5]={ category="nd", description="MEETEI MAYEK DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0xABF5, }, [0xABF6]={ category="nd", description="MEETEI MAYEK DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0xABF6, }, [0xABF7]={ category="nd", description="MEETEI MAYEK DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0xABF7, }, [0xABF8]={ category="nd", description="MEETEI MAYEK DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0xABF8, }, [0xABF9]={ category="nd", description="MEETEI MAYEK DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0xABF9, }, [0xD7B0]={ category="lo", description="HANGUL JUNGSEONG O-YEO", direction="l", linebreak="jv", unicodeslot=0xD7B0, }, [0xD7B1]={ category="lo", description="HANGUL JUNGSEONG O-O-I", direction="l", linebreak="jv", unicodeslot=0xD7B1, }, [0xD7B2]={ category="lo", description="HANGUL JUNGSEONG YO-A", direction="l", linebreak="jv", unicodeslot=0xD7B2, }, [0xD7B3]={ category="lo", description="HANGUL JUNGSEONG YO-AE", direction="l", linebreak="jv", unicodeslot=0xD7B3, }, [0xD7B4]={ category="lo", description="HANGUL JUNGSEONG YO-EO", direction="l", linebreak="jv", unicodeslot=0xD7B4, }, [0xD7B5]={ category="lo", description="HANGUL JUNGSEONG U-YEO", direction="l", linebreak="jv", unicodeslot=0xD7B5, }, [0xD7B6]={ category="lo", description="HANGUL JUNGSEONG U-I-I", direction="l", linebreak="jv", unicodeslot=0xD7B6, }, [0xD7B7]={ category="lo", description="HANGUL JUNGSEONG YU-AE", direction="l", linebreak="jv", unicodeslot=0xD7B7, }, [0xD7B8]={ category="lo", description="HANGUL JUNGSEONG YU-O", direction="l", linebreak="jv", unicodeslot=0xD7B8, }, [0xD7B9]={ category="lo", description="HANGUL JUNGSEONG EU-A", direction="l", linebreak="jv", unicodeslot=0xD7B9, }, [0xD7BA]={ category="lo", description="HANGUL JUNGSEONG EU-EO", direction="l", linebreak="jv", unicodeslot=0xD7BA, }, [0xD7BB]={ category="lo", description="HANGUL JUNGSEONG EU-E", direction="l", linebreak="jv", unicodeslot=0xD7BB, }, [0xD7BC]={ category="lo", description="HANGUL JUNGSEONG EU-O", direction="l", linebreak="jv", unicodeslot=0xD7BC, }, [0xD7BD]={ category="lo", description="HANGUL JUNGSEONG I-YA-O", direction="l", linebreak="jv", unicodeslot=0xD7BD, }, [0xD7BE]={ category="lo", description="HANGUL JUNGSEONG I-YAE", direction="l", linebreak="jv", unicodeslot=0xD7BE, }, [0xD7BF]={ category="lo", description="HANGUL JUNGSEONG I-YEO", direction="l", linebreak="jv", unicodeslot=0xD7BF, }, [0xD7C0]={ category="lo", description="HANGUL JUNGSEONG I-YE", direction="l", linebreak="jv", unicodeslot=0xD7C0, }, [0xD7C1]={ category="lo", description="HANGUL JUNGSEONG I-O-I", direction="l", linebreak="jv", unicodeslot=0xD7C1, }, [0xD7C2]={ category="lo", description="HANGUL JUNGSEONG I-YO", direction="l", linebreak="jv", unicodeslot=0xD7C2, }, [0xD7C3]={ category="lo", description="HANGUL JUNGSEONG I-YU", direction="l", linebreak="jv", unicodeslot=0xD7C3, }, [0xD7C4]={ category="lo", description="HANGUL JUNGSEONG I-I", direction="l", linebreak="jv", unicodeslot=0xD7C4, }, [0xD7C5]={ category="lo", description="HANGUL JUNGSEONG ARAEA-A", direction="l", linebreak="jv", unicodeslot=0xD7C5, }, [0xD7C6]={ category="lo", description="HANGUL JUNGSEONG ARAEA-E", direction="l", linebreak="jv", unicodeslot=0xD7C6, }, [0xD7CB]={ category="lo", description="HANGUL JONGSEONG NIEUN-RIEUL", direction="l", linebreak="jt", unicodeslot=0xD7CB, }, [0xD7CC]={ category="lo", description="HANGUL JONGSEONG NIEUN-CHIEUCH", direction="l", linebreak="jt", unicodeslot=0xD7CC, }, [0xD7CD]={ category="lo", description="HANGUL JONGSEONG SSANGTIKEUT", direction="l", linebreak="jt", unicodeslot=0xD7CD, }, [0xD7CE]={ category="lo", description="HANGUL JONGSEONG SSANGTIKEUT-PIEUP", direction="l", linebreak="jt", unicodeslot=0xD7CE, }, [0xD7CF]={ category="lo", description="HANGUL JONGSEONG TIKEUT-PIEUP", direction="l", linebreak="jt", unicodeslot=0xD7CF, }, [0xD7D0]={ category="lo", description="HANGUL JONGSEONG TIKEUT-SIOS", direction="l", linebreak="jt", unicodeslot=0xD7D0, }, [0xD7D1]={ category="lo", description="HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK", direction="l", linebreak="jt", unicodeslot=0xD7D1, }, [0xD7D2]={ category="lo", description="HANGUL JONGSEONG TIKEUT-CIEUC", direction="l", linebreak="jt", unicodeslot=0xD7D2, }, [0xD7D3]={ category="lo", description="HANGUL JONGSEONG TIKEUT-CHIEUCH", direction="l", linebreak="jt", unicodeslot=0xD7D3, }, [0xD7D4]={ category="lo", description="HANGUL JONGSEONG TIKEUT-THIEUTH", direction="l", linebreak="jt", unicodeslot=0xD7D4, }, [0xD7D5]={ category="lo", description="HANGUL JONGSEONG RIEUL-SSANGKIYEOK", direction="l", linebreak="jt", unicodeslot=0xD7D5, }, [0xD7D6]={ category="lo", description="HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH", direction="l", linebreak="jt", unicodeslot=0xD7D6, }, [0xD7D7]={ category="lo", description="HANGUL JONGSEONG SSANGRIEUL-KHIEUKH", direction="l", linebreak="jt", unicodeslot=0xD7D7, }, [0xD7D8]={ category="lo", description="HANGUL JONGSEONG RIEUL-MIEUM-HIEUH", direction="l", linebreak="jt", unicodeslot=0xD7D8, }, [0xD7D9]={ category="lo", description="HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT", direction="l", linebreak="jt", unicodeslot=0xD7D9, }, [0xD7DA]={ category="lo", description="HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH", direction="l", linebreak="jt", unicodeslot=0xD7DA, }, [0xD7DB]={ category="lo", description="HANGUL JONGSEONG RIEUL-YESIEUNG", direction="l", linebreak="jt", unicodeslot=0xD7DB, }, [0xD7DC]={ category="lo", description="HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH", direction="l", linebreak="jt", unicodeslot=0xD7DC, }, [0xD7DD]={ category="lo", description="HANGUL JONGSEONG KAPYEOUNRIEUL", direction="l", linebreak="jt", unicodeslot=0xD7DD, }, [0xD7DE]={ category="lo", description="HANGUL JONGSEONG MIEUM-NIEUN", direction="l", linebreak="jt", unicodeslot=0xD7DE, }, [0xD7DF]={ category="lo", description="HANGUL JONGSEONG MIEUM-SSANGNIEUN", direction="l", linebreak="jt", unicodeslot=0xD7DF, }, [0xD7E0]={ category="lo", description="HANGUL JONGSEONG SSANGMIEUM", direction="l", linebreak="jt", unicodeslot=0xD7E0, }, [0xD7E1]={ category="lo", description="HANGUL JONGSEONG MIEUM-PIEUP-SIOS", direction="l", linebreak="jt", unicodeslot=0xD7E1, }, [0xD7E2]={ category="lo", description="HANGUL JONGSEONG MIEUM-CIEUC", direction="l", linebreak="jt", unicodeslot=0xD7E2, }, [0xD7E3]={ category="lo", description="HANGUL JONGSEONG PIEUP-TIKEUT", direction="l", linebreak="jt", unicodeslot=0xD7E3, }, [0xD7E4]={ category="lo", description="HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH", direction="l", linebreak="jt", unicodeslot=0xD7E4, }, [0xD7E5]={ category="lo", description="HANGUL JONGSEONG PIEUP-MIEUM", direction="l", linebreak="jt", unicodeslot=0xD7E5, }, [0xD7E6]={ category="lo", description="HANGUL JONGSEONG SSANGPIEUP", direction="l", linebreak="jt", unicodeslot=0xD7E6, }, [0xD7E7]={ category="lo", description="HANGUL JONGSEONG PIEUP-SIOS-TIKEUT", direction="l", linebreak="jt", unicodeslot=0xD7E7, }, [0xD7E8]={ category="lo", description="HANGUL JONGSEONG PIEUP-CIEUC", direction="l", linebreak="jt", unicodeslot=0xD7E8, }, [0xD7E9]={ category="lo", description="HANGUL JONGSEONG PIEUP-CHIEUCH", direction="l", linebreak="jt", unicodeslot=0xD7E9, }, [0xD7EA]={ category="lo", description="HANGUL JONGSEONG SIOS-MIEUM", direction="l", linebreak="jt", unicodeslot=0xD7EA, }, [0xD7EB]={ category="lo", description="HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP", direction="l", linebreak="jt", unicodeslot=0xD7EB, }, [0xD7EC]={ category="lo", description="HANGUL JONGSEONG SSANGSIOS-KIYEOK", direction="l", linebreak="jt", unicodeslot=0xD7EC, }, [0xD7ED]={ category="lo", description="HANGUL JONGSEONG SSANGSIOS-TIKEUT", direction="l", linebreak="jt", unicodeslot=0xD7ED, }, [0xD7EE]={ category="lo", description="HANGUL JONGSEONG SIOS-PANSIOS", direction="l", linebreak="jt", unicodeslot=0xD7EE, }, [0xD7EF]={ category="lo", description="HANGUL JONGSEONG SIOS-CIEUC", direction="l", linebreak="jt", unicodeslot=0xD7EF, }, [0xD7F0]={ category="lo", description="HANGUL JONGSEONG SIOS-CHIEUCH", direction="l", linebreak="jt", unicodeslot=0xD7F0, }, [0xD7F1]={ category="lo", description="HANGUL JONGSEONG SIOS-THIEUTH", direction="l", linebreak="jt", unicodeslot=0xD7F1, }, [0xD7F2]={ category="lo", description="HANGUL JONGSEONG SIOS-HIEUH", direction="l", linebreak="jt", unicodeslot=0xD7F2, }, [0xD7F3]={ category="lo", description="HANGUL JONGSEONG PANSIOS-PIEUP", direction="l", linebreak="jt", unicodeslot=0xD7F3, }, [0xD7F4]={ category="lo", description="HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP", direction="l", linebreak="jt", unicodeslot=0xD7F4, }, [0xD7F5]={ category="lo", description="HANGUL JONGSEONG YESIEUNG-MIEUM", direction="l", linebreak="jt", unicodeslot=0xD7F5, }, [0xD7F6]={ category="lo", description="HANGUL JONGSEONG YESIEUNG-HIEUH", direction="l", linebreak="jt", unicodeslot=0xD7F6, }, [0xD7F7]={ category="lo", description="HANGUL JONGSEONG CIEUC-PIEUP", direction="l", linebreak="jt", unicodeslot=0xD7F7, }, [0xD7F8]={ category="lo", description="HANGUL JONGSEONG CIEUC-SSANGPIEUP", direction="l", linebreak="jt", unicodeslot=0xD7F8, }, [0xD7F9]={ category="lo", description="HANGUL JONGSEONG SSANGCIEUC", direction="l", linebreak="jt", unicodeslot=0xD7F9, }, [0xD7FA]={ category="lo", description="HANGUL JONGSEONG PHIEUPH-SIOS", direction="l", linebreak="jt", unicodeslot=0xD7FA, }, [0xD7FB]={ category="lo", description="HANGUL JONGSEONG PHIEUPH-THIEUTH", direction="l", linebreak="jt", unicodeslot=0xD7FB, }, [0xD800]={ category="cs", description="", direction="l", linebreak="sg", unicodeslot=0xD800, }, [0xDB7F]={ category="cs", description="", direction="l", linebreak="sg", unicodeslot=0xDB7F, }, [0xDB80]={ category="cs", description="", direction="l", linebreak="sg", unicodeslot=0xDB80, }, [0xDBFF]={ category="cs", description="", direction="l", linebreak="sg", unicodeslot=0xDBFF, }, [0xDC00]={ category="cs", description="", direction="l", linebreak="sg", unicodeslot=0xDC00, }, [0xDFFF]={ category="cs", description="", direction="l", linebreak="sg", unicodeslot=0xDFFF, }, [0xE000]={ category="co", cjkwd="a", description="", direction="l", unicodeslot=0xE000, }, [0xF8FF]={ adobename="apple", category="co", cjkwd="a", description="", direction="l", unicodeslot=0xF8FF, }, [0xF900]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0384", direction="l", linebreak="id", specials={ "char", 0x8C48 }, unicodeslot=0xF900, }, [0xF901]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0385", direction="l", linebreak="id", specials={ "char", 0x66F4 }, unicodeslot=0xF901, }, [0xF902]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0386", direction="l", linebreak="id", specials={ "char", 0x8ECA }, unicodeslot=0xF902, }, [0xF903]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0387", direction="l", linebreak="id", specials={ "char", 0x8CC8 }, unicodeslot=0xF903, }, [0xF904]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0388", direction="l", linebreak="id", specials={ "char", 0x6ED1 }, unicodeslot=0xF904, }, [0xF905]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0389", direction="l", linebreak="id", specials={ "char", 0x4E32 }, unicodeslot=0xF905, }, [0xF906]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x038A", direction="l", linebreak="id", specials={ "char", 0x53E5 }, unicodeslot=0xF906, }, [0xF907]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x038B", direction="l", linebreak="id", specials={ "char", 0x9F9C }, unicodeslot=0xF907, }, [0xF908]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x038C", direction="l", linebreak="id", specials={ "char", 0x9F9C }, unicodeslot=0xF908, }, [0xF909]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x038D", direction="l", linebreak="id", specials={ "char", 0x5951 }, unicodeslot=0xF909, }, [0xF90A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005AA", direction="l", linebreak="id", specials={ "char", 0x91D1 }, unicodeslot=0xF90A, }, [0xF90B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005AB", direction="l", linebreak="id", specials={ "char", 0x5587 }, unicodeslot=0xF90B, }, [0xF90C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005AC", direction="l", linebreak="id", specials={ "char", 0x5948 }, unicodeslot=0xF90C, }, [0xF90D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005AD", direction="l", linebreak="id", specials={ "char", 0x61F6 }, unicodeslot=0xF90D, }, [0xF90E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005AE", direction="l", linebreak="id", specials={ "char", 0x7669 }, unicodeslot=0xF90E, }, [0xF90F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005AF", direction="l", linebreak="id", specials={ "char", 0x7F85 }, unicodeslot=0xF90F, }, [0xF910]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x038E", direction="l", linebreak="id", specials={ "char", 0x863F }, unicodeslot=0xF910, }, [0xF911]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x038F", direction="l", linebreak="id", specials={ "char", 0x87BA }, unicodeslot=0xF911, }, [0xF912]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0390", direction="l", linebreak="id", specials={ "char", 0x88F8 }, unicodeslot=0xF912, }, [0xF913]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0391", direction="l", linebreak="id", specials={ "char", 0x908F }, unicodeslot=0xF913, }, [0xF914]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0392", direction="l", linebreak="id", specials={ "char", 0x6A02 }, unicodeslot=0xF914, }, [0xF915]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0393", direction="l", linebreak="id", specials={ "char", 0x6D1B }, unicodeslot=0xF915, }, [0xF916]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0394", direction="l", linebreak="id", specials={ "char", 0x70D9 }, unicodeslot=0xF916, }, [0xF917]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0395", direction="l", linebreak="id", specials={ "char", 0x73DE }, unicodeslot=0xF917, }, [0xF918]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0396", direction="l", linebreak="id", specials={ "char", 0x843D }, unicodeslot=0xF918, }, [0xF919]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0397", direction="l", linebreak="id", specials={ "char", 0x916A }, unicodeslot=0xF919, }, [0xF91A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005BA", direction="l", linebreak="id", specials={ "char", 0x99F1 }, unicodeslot=0xF91A, }, [0xF91B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005BB", direction="l", linebreak="id", specials={ "char", 0x4E82 }, unicodeslot=0xF91B, }, [0xF91C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005BC", direction="l", linebreak="id", specials={ "char", 0x5375 }, unicodeslot=0xF91C, }, [0xF91D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005BD", direction="l", linebreak="id", specials={ "char", 0x6B04 }, unicodeslot=0xF91D, }, [0xF91E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005BE", direction="l", linebreak="id", specials={ "char", 0x721B }, unicodeslot=0xF91E, }, [0xF91F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005BF", direction="l", linebreak="id", specials={ "char", 0x862D }, unicodeslot=0xF91F, }, [0xF920]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0398", direction="l", linebreak="id", specials={ "char", 0x9E1E }, unicodeslot=0xF920, }, [0xF921]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0399", direction="l", linebreak="id", specials={ "char", 0x5D50 }, unicodeslot=0xF921, }, [0xF922]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x039A", direction="l", linebreak="id", specials={ "char", 0x6FEB }, unicodeslot=0xF922, }, [0xF923]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x039B", direction="l", linebreak="id", specials={ "char", 0x85CD }, unicodeslot=0xF923, }, [0xF924]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x039C", direction="l", linebreak="id", specials={ "char", 0x8964 }, unicodeslot=0xF924, }, [0xF925]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x039D", direction="l", linebreak="id", specials={ "char", 0x62C9 }, unicodeslot=0xF925, }, [0xF926]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x039E", direction="l", linebreak="id", specials={ "char", 0x81D8 }, unicodeslot=0xF926, }, [0xF927]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x039F", direction="l", linebreak="id", specials={ "char", 0x881F }, unicodeslot=0xF927, }, [0xF928]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A0", direction="l", linebreak="id", specials={ "char", 0x5ECA }, unicodeslot=0xF928, }, [0xF929]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A1", direction="l", linebreak="id", specials={ "char", 0x6717 }, unicodeslot=0xF929, }, [0xF92A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005CA", direction="l", linebreak="id", specials={ "char", 0x6D6A }, unicodeslot=0xF92A, }, [0xF92B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005CB", direction="l", linebreak="id", specials={ "char", 0x72FC }, unicodeslot=0xF92B, }, [0xF92C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005CC", direction="l", linebreak="id", specials={ "char", 0x90CE }, unicodeslot=0xF92C, }, [0xF92D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005CD", direction="l", linebreak="id", specials={ "char", 0x4F86 }, unicodeslot=0xF92D, }, [0xF92E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005CE", direction="l", linebreak="id", specials={ "char", 0x51B7 }, unicodeslot=0xF92E, }, [0xF92F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005CF", direction="l", linebreak="id", specials={ "char", 0x52DE }, unicodeslot=0xF92F, }, [0xF930]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A2", direction="l", linebreak="id", specials={ "char", 0x64C4 }, unicodeslot=0xF930, }, [0xF931]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A3", direction="l", linebreak="id", specials={ "char", 0x6AD3 }, unicodeslot=0xF931, }, [0xF932]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A4", direction="l", linebreak="id", specials={ "char", 0x7210 }, unicodeslot=0xF932, }, [0xF933]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A5", direction="l", linebreak="id", specials={ "char", 0x76E7 }, unicodeslot=0xF933, }, [0xF934]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A6", direction="l", linebreak="id", specials={ "char", 0x8001 }, unicodeslot=0xF934, }, [0xF935]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A7", direction="l", linebreak="id", specials={ "char", 0x8606 }, unicodeslot=0xF935, }, [0xF936]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A8", direction="l", linebreak="id", specials={ "char", 0x865C }, unicodeslot=0xF936, }, [0xF937]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03A9", direction="l", linebreak="id", specials={ "char", 0x8DEF }, unicodeslot=0xF937, }, [0xF938]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03AA", direction="l", linebreak="id", specials={ "char", 0x9732 }, unicodeslot=0xF938, }, [0xF939]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03AB", direction="l", linebreak="id", specials={ "char", 0x9B6F }, unicodeslot=0xF939, }, [0xF93A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005DA", direction="l", linebreak="id", specials={ "char", 0x9DFA }, unicodeslot=0xF93A, }, [0xF93B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005DB", direction="l", linebreak="id", specials={ "char", 0x788C }, unicodeslot=0xF93B, }, [0xF93C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005DC", direction="l", linebreak="id", specials={ "char", 0x797F }, unicodeslot=0xF93C, }, [0xF93D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005DD", direction="l", linebreak="id", specials={ "char", 0x7DA0 }, unicodeslot=0xF93D, }, [0xF93E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005DE", direction="l", linebreak="id", specials={ "char", 0x83C9 }, unicodeslot=0xF93E, }, [0xF93F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005DF", direction="l", linebreak="id", specials={ "char", 0x9304 }, unicodeslot=0xF93F, }, [0xF940]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03AC", direction="l", linebreak="id", specials={ "char", 0x9E7F }, unicodeslot=0xF940, }, [0xF941]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03AD", direction="l", linebreak="id", specials={ "char", 0x8AD6 }, unicodeslot=0xF941, }, [0xF942]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03AE", direction="l", linebreak="id", specials={ "char", 0x58DF }, unicodeslot=0xF942, }, [0xF943]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03AF", direction="l", linebreak="id", specials={ "char", 0x5F04 }, unicodeslot=0xF943, }, [0xF944]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B0", direction="l", linebreak="id", specials={ "char", 0x7C60 }, unicodeslot=0xF944, }, [0xF945]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B1", direction="l", linebreak="id", specials={ "char", 0x807E }, unicodeslot=0xF945, }, [0xF946]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B2", direction="l", linebreak="id", specials={ "char", 0x7262 }, unicodeslot=0xF946, }, [0xF947]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B3", direction="l", linebreak="id", specials={ "char", 0x78CA }, unicodeslot=0xF947, }, [0xF948]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B4", direction="l", linebreak="id", specials={ "char", 0x8CC2 }, unicodeslot=0xF948, }, [0xF949]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B5", direction="l", linebreak="id", specials={ "char", 0x96F7 }, unicodeslot=0xF949, }, [0xF94A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005EA", direction="l", linebreak="id", specials={ "char", 0x58D8 }, unicodeslot=0xF94A, }, [0xF94B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005EB", direction="l", linebreak="id", specials={ "char", 0x5C62 }, unicodeslot=0xF94B, }, [0xF94C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005EC", direction="l", linebreak="id", specials={ "char", 0x6A13 }, unicodeslot=0xF94C, }, [0xF94D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005ED", direction="l", linebreak="id", specials={ "char", 0x6DDA }, unicodeslot=0xF94D, }, [0xF94E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005EE", direction="l", linebreak="id", specials={ "char", 0x6F0F }, unicodeslot=0xF94E, }, [0xF94F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005EF", direction="l", linebreak="id", specials={ "char", 0x7D2F }, unicodeslot=0xF94F, }, [0xF950]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B6", direction="l", linebreak="id", specials={ "char", 0x7E37 }, unicodeslot=0xF950, }, [0xF951]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B7", direction="l", linebreak="id", specials={ "char", 0x964B }, unicodeslot=0xF951, }, [0xF952]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B8", direction="l", linebreak="id", specials={ "char", 0x52D2 }, unicodeslot=0xF952, }, [0xF953]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03B9", direction="l", linebreak="id", specials={ "char", 0x808B }, unicodeslot=0xF953, }, [0xF954]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03BA", direction="l", linebreak="id", specials={ "char", 0x51DC }, unicodeslot=0xF954, }, [0xF955]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03BB", direction="l", linebreak="id", specials={ "char", 0x51CC }, unicodeslot=0xF955, }, [0xF956]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03BC", direction="l", linebreak="id", specials={ "char", 0x7A1C }, unicodeslot=0xF956, }, [0xF957]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03BD", direction="l", linebreak="id", specials={ "char", 0x7DBE }, unicodeslot=0xF957, }, [0xF958]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03BE", direction="l", linebreak="id", specials={ "char", 0x83F1 }, unicodeslot=0xF958, }, [0xF959]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03BF", direction="l", linebreak="id", specials={ "char", 0x9675 }, unicodeslot=0xF959, }, [0xF95A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005FA", direction="l", linebreak="id", specials={ "char", 0x8B80 }, unicodeslot=0xF95A, }, [0xF95B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005FB", direction="l", linebreak="id", specials={ "char", 0x62CF }, unicodeslot=0xF95B, }, [0xF95C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005FC", direction="l", linebreak="id", specials={ "char", 0x6A02 }, unicodeslot=0xF95C, }, [0xF95D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005FD", direction="l", linebreak="id", specials={ "char", 0x8AFE }, unicodeslot=0xF95D, }, [0xF95E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005FE", direction="l", linebreak="id", specials={ "char", 0x4E39 }, unicodeslot=0xF95E, }, [0xF95F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x005FF", direction="l", linebreak="id", specials={ "char", 0x5BE7 }, unicodeslot=0xF95F, }, [0xF960]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C0", direction="l", linebreak="id", specials={ "char", 0x6012 }, unicodeslot=0xF960, }, [0xF961]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C1", direction="l", linebreak="id", specials={ "char", 0x7387 }, unicodeslot=0xF961, }, [0xF962]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C2", direction="l", linebreak="id", specials={ "char", 0x7570 }, unicodeslot=0xF962, }, [0xF963]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C3", direction="l", linebreak="id", specials={ "char", 0x5317 }, unicodeslot=0xF963, }, [0xF964]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C4", direction="l", linebreak="id", specials={ "char", 0x78FB }, unicodeslot=0xF964, }, [0xF965]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C5", direction="l", linebreak="id", specials={ "char", 0x4FBF }, unicodeslot=0xF965, }, [0xF966]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C6", direction="l", linebreak="id", specials={ "char", 0x5FA9 }, unicodeslot=0xF966, }, [0xF967]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C7", direction="l", linebreak="id", specials={ "char", 0x4E0D }, unicodeslot=0xF967, }, [0xF968]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C8", direction="l", linebreak="id", specials={ "char", 0x6CCC }, unicodeslot=0xF968, }, [0xF969]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03C9", direction="l", linebreak="id", specials={ "char", 0x6578 }, unicodeslot=0xF969, }, [0xF96A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0060A", direction="l", linebreak="id", specials={ "char", 0x7D22 }, unicodeslot=0xF96A, }, [0xF96B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0060B", direction="l", linebreak="id", specials={ "char", 0x53C3 }, unicodeslot=0xF96B, }, [0xF96C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0060C", direction="l", linebreak="id", specials={ "char", 0x585E }, unicodeslot=0xF96C, }, [0xF96D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0060D", direction="l", linebreak="id", specials={ "char", 0x7701 }, unicodeslot=0xF96D, }, [0xF96E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0060E", direction="l", linebreak="id", specials={ "char", 0x8449 }, unicodeslot=0xF96E, }, [0xF96F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0060F", direction="l", linebreak="id", specials={ "char", 0x8AAA }, unicodeslot=0xF96F, }, [0xF970]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03CA", direction="l", linebreak="id", specials={ "char", 0x6BBA }, unicodeslot=0xF970, }, [0xF971]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03CB", direction="l", linebreak="id", specials={ "char", 0x8FB0 }, unicodeslot=0xF971, }, [0xF972]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03CC", direction="l", linebreak="id", specials={ "char", 0x6C88 }, unicodeslot=0xF972, }, [0xF973]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03CD", direction="l", linebreak="id", specials={ "char", 0x62FE }, unicodeslot=0xF973, }, [0xF974]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03CE", direction="l", linebreak="id", specials={ "char", 0x82E5 }, unicodeslot=0xF974, }, [0xF975]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03CF", direction="l", linebreak="id", specials={ "char", 0x63A0 }, unicodeslot=0xF975, }, [0xF976]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D0", direction="l", linebreak="id", specials={ "char", 0x7565 }, unicodeslot=0xF976, }, [0xF977]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D1", direction="l", linebreak="id", specials={ "char", 0x4EAE }, unicodeslot=0xF977, }, [0xF978]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D2", direction="l", linebreak="id", specials={ "char", 0x5169 }, unicodeslot=0xF978, }, [0xF979]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D3", direction="l", linebreak="id", specials={ "char", 0x51C9 }, unicodeslot=0xF979, }, [0xF97A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0061A", direction="l", linebreak="id", specials={ "char", 0x6881 }, unicodeslot=0xF97A, }, [0xF97B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0061B", direction="l", linebreak="id", specials={ "char", 0x7CE7 }, unicodeslot=0xF97B, }, [0xF97C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0061C", direction="l", linebreak="id", specials={ "char", 0x826F }, unicodeslot=0xF97C, }, [0xF97D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0061D", direction="l", linebreak="id", specials={ "char", 0x8AD2 }, unicodeslot=0xF97D, }, [0xF97E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0061E", direction="l", linebreak="id", specials={ "char", 0x91CF }, unicodeslot=0xF97E, }, [0xF97F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0061F", direction="l", linebreak="id", specials={ "char", 0x52F5 }, unicodeslot=0xF97F, }, [0xF980]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D4", direction="l", linebreak="id", specials={ "char", 0x5442 }, unicodeslot=0xF980, }, [0xF981]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D5", direction="l", linebreak="id", specials={ "char", 0x5973 }, unicodeslot=0xF981, }, [0xF982]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D6", direction="l", linebreak="id", specials={ "char", 0x5EEC }, unicodeslot=0xF982, }, [0xF983]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D7", direction="l", linebreak="id", specials={ "char", 0x65C5 }, unicodeslot=0xF983, }, [0xF984]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D8", direction="l", linebreak="id", specials={ "char", 0x6FFE }, unicodeslot=0xF984, }, [0xF985]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03D9", direction="l", linebreak="id", specials={ "char", 0x792A }, unicodeslot=0xF985, }, [0xF986]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03DA", direction="l", linebreak="id", specials={ "char", 0x95AD }, unicodeslot=0xF986, }, [0xF987]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03DB", direction="l", linebreak="id", specials={ "char", 0x9A6A }, unicodeslot=0xF987, }, [0xF988]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03DC", direction="l", linebreak="id", specials={ "char", 0x9E97 }, unicodeslot=0xF988, }, [0xF989]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03DD", direction="l", linebreak="id", specials={ "char", 0x9ECE }, unicodeslot=0xF989, }, [0xF98A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0062A", direction="l", linebreak="id", specials={ "char", 0x529B }, unicodeslot=0xF98A, }, [0xF98B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0062B", direction="l", linebreak="id", specials={ "char", 0x66C6 }, unicodeslot=0xF98B, }, [0xF98C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0062C", direction="l", linebreak="id", specials={ "char", 0x6B77 }, unicodeslot=0xF98C, }, [0xF98D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0062D", direction="l", linebreak="id", specials={ "char", 0x8F62 }, unicodeslot=0xF98D, }, [0xF98E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0062E", direction="l", linebreak="id", specials={ "char", 0x5E74 }, unicodeslot=0xF98E, }, [0xF98F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0062F", direction="l", linebreak="id", specials={ "char", 0x6190 }, unicodeslot=0xF98F, }, [0xF990]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03DE", direction="l", linebreak="id", specials={ "char", 0x6200 }, unicodeslot=0xF990, }, [0xF991]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03DF", direction="l", linebreak="id", specials={ "char", 0x649A }, unicodeslot=0xF991, }, [0xF992]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E0", direction="l", linebreak="id", specials={ "char", 0x6F23 }, unicodeslot=0xF992, }, [0xF993]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E1", direction="l", linebreak="id", specials={ "char", 0x7149 }, unicodeslot=0xF993, }, [0xF994]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E2", direction="l", linebreak="id", specials={ "char", 0x7489 }, unicodeslot=0xF994, }, [0xF995]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E3", direction="l", linebreak="id", specials={ "char", 0x79CA }, unicodeslot=0xF995, }, [0xF996]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E4", direction="l", linebreak="id", specials={ "char", 0x7DF4 }, unicodeslot=0xF996, }, [0xF997]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E5", direction="l", linebreak="id", specials={ "char", 0x806F }, unicodeslot=0xF997, }, [0xF998]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E6", direction="l", linebreak="id", specials={ "char", 0x8F26 }, unicodeslot=0xF998, }, [0xF999]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x03E7", direction="l", linebreak="id", specials={ "char", 0x84EE }, unicodeslot=0xF999, }, [0xF99A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0063A", direction="l", linebreak="id", specials={ "char", 0x9023 }, unicodeslot=0xF99A, }, [0xF99B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0063B", direction="l", linebreak="id", specials={ "char", 0x934A }, unicodeslot=0xF99B, }, [0xF99C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0063C", direction="l", linebreak="id", specials={ "char", 0x5217 }, unicodeslot=0xF99C, }, [0xF99D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0063D", direction="l", linebreak="id", specials={ "char", 0x52A3 }, unicodeslot=0xF99D, }, [0xF99E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0063E", direction="l", linebreak="id", specials={ "char", 0x54BD }, unicodeslot=0xF99E, }, [0xF99F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0063F", direction="l", linebreak="id", specials={ "char", 0x70C8 }, unicodeslot=0xF99F, }, [0xF9A0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0000", direction="l", linebreak="id", specials={ "char", 0x88C2 }, unicodeslot=0xF9A0, }, [0xF9A1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0001", direction="l", linebreak="id", specials={ "char", 0x8AAA }, unicodeslot=0xF9A1, }, [0xF9A2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0002", direction="l", linebreak="id", specials={ "char", 0x5EC9 }, unicodeslot=0xF9A2, }, [0xF9A3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0003", direction="l", linebreak="id", specials={ "char", 0x5FF5 }, unicodeslot=0xF9A3, }, [0xF9A4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0004", direction="l", linebreak="id", specials={ "char", 0x637B }, unicodeslot=0xF9A4, }, [0xF9A5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0005", direction="l", linebreak="id", specials={ "char", 0x6BAE }, unicodeslot=0xF9A5, }, [0xF9A6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0006", direction="l", linebreak="id", specials={ "char", 0x7C3E }, unicodeslot=0xF9A6, }, [0xF9A7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0007", direction="l", linebreak="id", specials={ "char", 0x7375 }, unicodeslot=0xF9A7, }, [0xF9A8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0008", direction="l", linebreak="id", specials={ "char", 0x4EE4 }, unicodeslot=0xF9A8, }, [0xF9A9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0009", direction="l", linebreak="id", specials={ "char", 0x56F9 }, unicodeslot=0xF9A9, }, [0xF9AA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009AA", direction="l", linebreak="id", specials={ "char", 0x5BE7 }, unicodeslot=0xF9AA, }, [0xF9AB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009AB", direction="l", linebreak="id", specials={ "char", 0x5DBA }, unicodeslot=0xF9AB, }, [0xF9AC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009AC", direction="l", linebreak="id", specials={ "char", 0x601C }, unicodeslot=0xF9AC, }, [0xF9AD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009AD", direction="l", linebreak="id", specials={ "char", 0x73B2 }, unicodeslot=0xF9AD, }, [0xF9AE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009AE", direction="l", linebreak="id", specials={ "char", 0x7469 }, unicodeslot=0xF9AE, }, [0xF9AF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009AF", direction="l", linebreak="id", specials={ "char", 0x7F9A }, unicodeslot=0xF9AF, }, [0xF9B0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0000", direction="l", linebreak="id", specials={ "char", 0x8046 }, unicodeslot=0xF9B0, }, [0xF9B1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0001", direction="l", linebreak="id", specials={ "char", 0x9234 }, unicodeslot=0xF9B1, }, [0xF9B2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0002", direction="l", linebreak="id", specials={ "char", 0x96F6 }, unicodeslot=0xF9B2, }, [0xF9B3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0003", direction="l", linebreak="id", specials={ "char", 0x9748 }, unicodeslot=0xF9B3, }, [0xF9B4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0004", direction="l", linebreak="id", specials={ "char", 0x9818 }, unicodeslot=0xF9B4, }, [0xF9B5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0005", direction="l", linebreak="id", specials={ "char", 0x4F8B }, unicodeslot=0xF9B5, }, [0xF9B6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0006", direction="l", linebreak="id", specials={ "char", 0x79AE }, unicodeslot=0xF9B6, }, [0xF9B7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0007", direction="l", linebreak="id", specials={ "char", 0x91B4 }, unicodeslot=0xF9B7, }, [0xF9B8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0008", direction="l", linebreak="id", specials={ "char", 0x96B8 }, unicodeslot=0xF9B8, }, [0xF9B9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0009", direction="l", linebreak="id", specials={ "char", 0x60E1 }, unicodeslot=0xF9B9, }, [0xF9BA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009BA", direction="l", linebreak="id", specials={ "char", 0x4E86 }, unicodeslot=0xF9BA, }, [0xF9BB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009BB", direction="l", linebreak="id", specials={ "char", 0x50DA }, unicodeslot=0xF9BB, }, [0xF9BC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009BC", direction="l", linebreak="id", specials={ "char", 0x5BEE }, unicodeslot=0xF9BC, }, [0xF9BD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009BD", direction="l", linebreak="id", specials={ "char", 0x5C3F }, unicodeslot=0xF9BD, }, [0xF9BE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009BE", direction="l", linebreak="id", specials={ "char", 0x6599 }, unicodeslot=0xF9BE, }, [0xF9BF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009BF", direction="l", linebreak="id", specials={ "char", 0x6A02 }, unicodeslot=0xF9BF, }, [0xF9C0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0000", direction="l", linebreak="id", specials={ "char", 0x71CE }, unicodeslot=0xF9C0, }, [0xF9C1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0001", direction="l", linebreak="id", specials={ "char", 0x7642 }, unicodeslot=0xF9C1, }, [0xF9C2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0002", direction="l", linebreak="id", specials={ "char", 0x84FC }, unicodeslot=0xF9C2, }, [0xF9C3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0003", direction="l", linebreak="id", specials={ "char", 0x907C }, unicodeslot=0xF9C3, }, [0xF9C4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0004", direction="l", linebreak="id", specials={ "char", 0x9F8D }, unicodeslot=0xF9C4, }, [0xF9C5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0005", direction="l", linebreak="id", specials={ "char", 0x6688 }, unicodeslot=0xF9C5, }, [0xF9C6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0006", direction="l", linebreak="id", specials={ "char", 0x962E }, unicodeslot=0xF9C6, }, [0xF9C7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0007", direction="l", linebreak="id", specials={ "char", 0x5289 }, unicodeslot=0xF9C7, }, [0xF9C8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0008", direction="l", linebreak="id", specials={ "char", 0x677B }, unicodeslot=0xF9C8, }, [0xF9C9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0009", direction="l", linebreak="id", specials={ "char", 0x67F3 }, unicodeslot=0xF9C9, }, [0xF9CA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009CA", direction="l", linebreak="id", specials={ "char", 0x6D41 }, unicodeslot=0xF9CA, }, [0xF9CB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009CB", direction="l", linebreak="id", specials={ "char", 0x6E9C }, unicodeslot=0xF9CB, }, [0xF9CC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009CC", direction="l", linebreak="id", specials={ "char", 0x7409 }, unicodeslot=0xF9CC, }, [0xF9CD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009CD", direction="l", linebreak="id", specials={ "char", 0x7559 }, unicodeslot=0xF9CD, }, [0xF9CE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009CE", direction="l", linebreak="id", specials={ "char", 0x786B }, unicodeslot=0xF9CE, }, [0xF9CF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009CF", direction="l", linebreak="id", specials={ "char", 0x7D10 }, unicodeslot=0xF9CF, }, [0xF9D0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0000", direction="l", linebreak="id", specials={ "char", 0x985E }, unicodeslot=0xF9D0, }, [0xF9D1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0001", direction="l", linebreak="id", specials={ "char", 0x516D }, unicodeslot=0xF9D1, }, [0xF9D2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0002", direction="l", linebreak="id", specials={ "char", 0x622E }, unicodeslot=0xF9D2, }, [0xF9D3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0003", direction="l", linebreak="id", specials={ "char", 0x9678 }, unicodeslot=0xF9D3, }, [0xF9D4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0004", direction="l", linebreak="id", specials={ "char", 0x502B }, unicodeslot=0xF9D4, }, [0xF9D5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0005", direction="l", linebreak="id", specials={ "char", 0x5D19 }, unicodeslot=0xF9D5, }, [0xF9D6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0006", direction="l", linebreak="id", specials={ "char", 0x6DEA }, unicodeslot=0xF9D6, }, [0xF9D7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0007", direction="l", linebreak="id", specials={ "char", 0x8F2A }, unicodeslot=0xF9D7, }, [0xF9D8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0008", direction="l", linebreak="id", specials={ "char", 0x5F8B }, unicodeslot=0xF9D8, }, [0xF9D9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0009", direction="l", linebreak="id", specials={ "char", 0x6144 }, unicodeslot=0xF9D9, }, [0xF9DA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009DA", direction="l", linebreak="id", specials={ "char", 0x6817 }, unicodeslot=0xF9DA, }, [0xF9DB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009DB", direction="l", linebreak="id", specials={ "char", 0x7387 }, unicodeslot=0xF9DB, }, [0xF9DC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009DC", direction="l", linebreak="id", specials={ "char", 0x9686 }, unicodeslot=0xF9DC, }, [0xF9DD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009DD", direction="l", linebreak="id", specials={ "char", 0x5229 }, unicodeslot=0xF9DD, }, [0xF9DE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009DE", direction="l", linebreak="id", specials={ "char", 0x540F }, unicodeslot=0xF9DE, }, [0xF9DF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009DF", direction="l", linebreak="id", specials={ "char", 0x5C65 }, unicodeslot=0xF9DF, }, [0xF9E0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0000", direction="l", linebreak="id", specials={ "char", 0x6613 }, unicodeslot=0xF9E0, }, [0xF9E1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0001", direction="l", linebreak="id", specials={ "char", 0x674E }, unicodeslot=0xF9E1, }, [0xF9E2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0002", direction="l", linebreak="id", specials={ "char", 0x68A8 }, unicodeslot=0xF9E2, }, [0xF9E3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0003", direction="l", linebreak="id", specials={ "char", 0x6CE5 }, unicodeslot=0xF9E3, }, [0xF9E4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0004", direction="l", linebreak="id", specials={ "char", 0x7406 }, unicodeslot=0xF9E4, }, [0xF9E5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0005", direction="l", linebreak="id", specials={ "char", 0x75E2 }, unicodeslot=0xF9E5, }, [0xF9E6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0006", direction="l", linebreak="id", specials={ "char", 0x7F79 }, unicodeslot=0xF9E6, }, [0xF9E7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0007", direction="l", linebreak="id", specials={ "char", 0x88CF }, unicodeslot=0xF9E7, }, [0xF9E8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0008", direction="l", linebreak="id", specials={ "char", 0x88E1 }, unicodeslot=0xF9E8, }, [0xF9E9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0009", direction="l", linebreak="id", specials={ "char", 0x91CC }, unicodeslot=0xF9E9, }, [0xF9EA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009EA", direction="l", linebreak="id", specials={ "char", 0x96E2 }, unicodeslot=0xF9EA, }, [0xF9EB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009EB", direction="l", linebreak="id", specials={ "char", 0x533F }, unicodeslot=0xF9EB, }, [0xF9EC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009EC", direction="l", linebreak="id", specials={ "char", 0x6EBA }, unicodeslot=0xF9EC, }, [0xF9ED]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009ED", direction="l", linebreak="id", specials={ "char", 0x541D }, unicodeslot=0xF9ED, }, [0xF9EE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009EE", direction="l", linebreak="id", specials={ "char", 0x71D0 }, unicodeslot=0xF9EE, }, [0xF9EF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009EF", direction="l", linebreak="id", specials={ "char", 0x7498 }, unicodeslot=0xF9EF, }, [0xF9F0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0000", direction="l", linebreak="id", specials={ "char", 0x85FA }, unicodeslot=0xF9F0, }, [0xF9F1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0001", direction="l", linebreak="id", specials={ "char", 0x96A3 }, unicodeslot=0xF9F1, }, [0xF9F2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0002", direction="l", linebreak="id", specials={ "char", 0x9C57 }, unicodeslot=0xF9F2, }, [0xF9F3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0003", direction="l", linebreak="id", specials={ "char", 0x9E9F }, unicodeslot=0xF9F3, }, [0xF9F4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0004", direction="l", linebreak="id", specials={ "char", 0x6797 }, unicodeslot=0xF9F4, }, [0xF9F5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0005", direction="l", linebreak="id", specials={ "char", 0x6DCB }, unicodeslot=0xF9F5, }, [0xF9F6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0006", direction="l", linebreak="id", specials={ "char", 0x81E8 }, unicodeslot=0xF9F6, }, [0xF9F7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0007", direction="l", linebreak="id", specials={ "char", 0x7ACB }, unicodeslot=0xF9F7, }, [0xF9F8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0008", direction="l", linebreak="id", specials={ "char", 0x7B20 }, unicodeslot=0xF9F8, }, [0xF9F9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0009", direction="l", linebreak="id", specials={ "char", 0x7C92 }, unicodeslot=0xF9F9, }, [0xF9FA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009FA", direction="l", linebreak="id", specials={ "char", 0x72C0 }, unicodeslot=0xF9FA, }, [0xF9FB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009FB", direction="l", linebreak="id", specials={ "char", 0x7099 }, unicodeslot=0xF9FB, }, [0xF9FC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009FC", direction="l", linebreak="id", specials={ "char", 0x8B58 }, unicodeslot=0xF9FC, }, [0xF9FD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009FD", direction="l", linebreak="id", specials={ "char", 0x4EC0 }, unicodeslot=0xF9FD, }, [0xF9FE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009FE", direction="l", linebreak="id", specials={ "char", 0x8336 }, unicodeslot=0xF9FE, }, [0xF9FF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-F0x0009FF", direction="l", linebreak="id", specials={ "char", 0x523A }, unicodeslot=0xF9FF, }, [0xFA00]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000", direction="l", linebreak="id", specials={ "char", 0x5207 }, unicodeslot=0xFA00, }, [0xFA01]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001", direction="l", linebreak="id", specials={ "char", 0x5EA6 }, unicodeslot=0xFA01, }, [0xFA02]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0002", direction="l", linebreak="id", specials={ "char", 0x62D3 }, unicodeslot=0xFA02, }, [0xFA03]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003", direction="l", linebreak="id", specials={ "char", 0x7CD6 }, unicodeslot=0xFA03, }, [0xFA04]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004", direction="l", linebreak="id", specials={ "char", 0x5B85 }, unicodeslot=0xFA04, }, [0xFA05]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005", direction="l", linebreak="id", specials={ "char", 0x6D1E }, unicodeslot=0xFA05, }, [0xFA06]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0006", direction="l", linebreak="id", specials={ "char", 0x66B4 }, unicodeslot=0xFA06, }, [0xFA07]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007", direction="l", linebreak="id", specials={ "char", 0x8F3B }, unicodeslot=0xFA07, }, [0xFA08]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008", direction="l", linebreak="id", specials={ "char", 0x884C }, unicodeslot=0xFA08, }, [0xFA09]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009", direction="l", linebreak="id", specials={ "char", 0x964D }, unicodeslot=0xFA09, }, [0xFA0A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000A", direction="l", linebreak="id", specials={ "char", 0x898B }, unicodeslot=0xFA0A, }, [0xFA0B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000B", direction="l", linebreak="id", specials={ "char", 0x5ED3 }, unicodeslot=0xFA0B, }, [0xFA0C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000C", direction="l", linebreak="id", specials={ "char", 0x5140 }, unicodeslot=0xFA0C, }, [0xFA0D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000D", direction="l", linebreak="id", specials={ "char", 0x55C0 }, unicodeslot=0xFA0D, }, [0xFA0E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000E", direction="l", linebreak="id", unicodeslot=0xFA0E, }, [0xFA0F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0000F", direction="l", linebreak="id", unicodeslot=0xFA0F, }, [0xFA10]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x000A", direction="l", linebreak="id", specials={ "char", 0x585A }, unicodeslot=0xFA10, }, [0xFA11]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x000B", direction="l", linebreak="id", unicodeslot=0xFA11, }, [0xFA12]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x000C", direction="l", linebreak="id", specials={ "char", 0x6674 }, unicodeslot=0xFA12, }, [0xFA13]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x000D", direction="l", linebreak="id", unicodeslot=0xFA13, }, [0xFA14]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x000E", direction="l", linebreak="id", unicodeslot=0xFA14, }, [0xFA15]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x000F", direction="l", linebreak="id", specials={ "char", 0x51DE }, unicodeslot=0xFA15, }, [0xFA16]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0010", direction="l", linebreak="id", specials={ "char", 0x732A }, unicodeslot=0xFA16, }, [0xFA17]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0011", direction="l", linebreak="id", specials={ "char", 0x76CA }, unicodeslot=0xFA17, }, [0xFA18]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0012", direction="l", linebreak="id", specials={ "char", 0x793C }, unicodeslot=0xFA18, }, [0xFA19]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0013", direction="l", linebreak="id", specials={ "char", 0x795E }, unicodeslot=0xFA19, }, [0xFA1A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001A", direction="l", linebreak="id", specials={ "char", 0x7965 }, unicodeslot=0xFA1A, }, [0xFA1B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001B", direction="l", linebreak="id", specials={ "char", 0x798F }, unicodeslot=0xFA1B, }, [0xFA1C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001C", direction="l", linebreak="id", specials={ "char", 0x9756 }, unicodeslot=0xFA1C, }, [0xFA1D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001D", direction="l", linebreak="id", specials={ "char", 0x7CBE }, unicodeslot=0xFA1D, }, [0xFA1E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001E", direction="l", linebreak="id", specials={ "char", 0x7FBD }, unicodeslot=0xFA1E, }, [0xFA1F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0001F", direction="l", linebreak="id", unicodeslot=0xFA1F, }, [0xFA20]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0014", direction="l", linebreak="id", specials={ "char", 0x8612 }, unicodeslot=0xFA20, }, [0xFA21]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0015", direction="l", linebreak="id", unicodeslot=0xFA21, }, [0xFA22]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0016", direction="l", linebreak="id", specials={ "char", 0x8AF8 }, unicodeslot=0xFA22, }, [0xFA23]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0017", direction="l", linebreak="id", unicodeslot=0xFA23, }, [0xFA24]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0018", direction="l", linebreak="id", unicodeslot=0xFA24, }, [0xFA25]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0019", direction="l", linebreak="id", specials={ "char", 0x9038 }, unicodeslot=0xFA25, }, [0xFA26]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x001A", direction="l", linebreak="id", specials={ "char", 0x90FD }, unicodeslot=0xFA26, }, [0xFA27]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x001B", direction="l", linebreak="id", unicodeslot=0xFA27, }, [0xFA28]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x001C", direction="l", linebreak="id", unicodeslot=0xFA28, }, [0xFA29]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x001D", direction="l", linebreak="id", unicodeslot=0xFA29, }, [0xFA2A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0002A", direction="l", linebreak="id", specials={ "char", 0x98EF }, unicodeslot=0xFA2A, }, [0xFA2B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0002B", direction="l", linebreak="id", specials={ "char", 0x98FC }, unicodeslot=0xFA2B, }, [0xFA2C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0002C", direction="l", linebreak="id", specials={ "char", 0x9928 }, unicodeslot=0xFA2C, }, [0xFA2D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0002D", direction="l", linebreak="id", specials={ "char", 0x9DB4 }, unicodeslot=0xFA2D, }, [0xFA2E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA2E", direction="l", linebreak="id", specials={ "char", 0x90DE }, unicodeslot=0xFA2E, }, [0xFA2F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA2F", direction="l", linebreak="id", specials={ "char", 0x96B7 }, unicodeslot=0xFA2F, }, [0xFA30]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x001E", direction="l", linebreak="id", specials={ "char", 0x4FAE }, unicodeslot=0xFA30, }, [0xFA31]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x001F", direction="l", linebreak="id", specials={ "char", 0x50E7 }, unicodeslot=0xFA31, }, [0xFA32]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0020", direction="l", linebreak="id", specials={ "char", 0x514D }, unicodeslot=0xFA32, }, [0xFA33]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0021", direction="l", linebreak="id", specials={ "char", 0x52C9 }, unicodeslot=0xFA33, }, [0xFA34]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0022", direction="l", linebreak="id", specials={ "char", 0x52E4 }, unicodeslot=0xFA34, }, [0xFA35]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0023", direction="l", linebreak="id", specials={ "char", 0x5351 }, unicodeslot=0xFA35, }, [0xFA36]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0024", direction="l", linebreak="id", specials={ "char", 0x559D }, unicodeslot=0xFA36, }, [0xFA37]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0025", direction="l", linebreak="id", specials={ "char", 0x5606 }, unicodeslot=0xFA37, }, [0xFA38]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0026", direction="l", linebreak="id", specials={ "char", 0x5668 }, unicodeslot=0xFA38, }, [0xFA39]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0027", direction="l", linebreak="id", specials={ "char", 0x5840 }, unicodeslot=0xFA39, }, [0xFA3A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003A", direction="l", linebreak="id", specials={ "char", 0x58A8 }, unicodeslot=0xFA3A, }, [0xFA3B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003B", direction="l", linebreak="id", specials={ "char", 0x5C64 }, unicodeslot=0xFA3B, }, [0xFA3C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003C", direction="l", linebreak="id", specials={ "char", 0x5C6E }, unicodeslot=0xFA3C, }, [0xFA3D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003D", direction="l", linebreak="id", specials={ "char", 0x6094 }, unicodeslot=0xFA3D, }, [0xFA3E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003E", direction="l", linebreak="id", specials={ "char", 0x6168 }, unicodeslot=0xFA3E, }, [0xFA3F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0003F", direction="l", linebreak="id", specials={ "char", 0x618E }, unicodeslot=0xFA3F, }, [0xFA40]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0028", direction="l", linebreak="id", specials={ "char", 0x61F2 }, unicodeslot=0xFA40, }, [0xFA41]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0029", direction="l", linebreak="id", specials={ "char", 0x654F }, unicodeslot=0xFA41, }, [0xFA42]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x002A", direction="l", linebreak="id", specials={ "char", 0x65E2 }, unicodeslot=0xFA42, }, [0xFA43]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x002B", direction="l", linebreak="id", specials={ "char", 0x6691 }, unicodeslot=0xFA43, }, [0xFA44]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x002C", direction="l", linebreak="id", specials={ "char", 0x6885 }, unicodeslot=0xFA44, }, [0xFA45]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x002D", direction="l", linebreak="id", specials={ "char", 0x6D77 }, unicodeslot=0xFA45, }, [0xFA46]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x002E", direction="l", linebreak="id", specials={ "char", 0x6E1A }, unicodeslot=0xFA46, }, [0xFA47]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x002F", direction="l", linebreak="id", specials={ "char", 0x6F22 }, unicodeslot=0xFA47, }, [0xFA48]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0030", direction="l", linebreak="id", specials={ "char", 0x716E }, unicodeslot=0xFA48, }, [0xFA49]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0031", direction="l", linebreak="id", specials={ "char", 0x722B }, unicodeslot=0xFA49, }, [0xFA4A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004A", direction="l", linebreak="id", specials={ "char", 0x7422 }, unicodeslot=0xFA4A, }, [0xFA4B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004B", direction="l", linebreak="id", specials={ "char", 0x7891 }, unicodeslot=0xFA4B, }, [0xFA4C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004C", direction="l", linebreak="id", specials={ "char", 0x793E }, unicodeslot=0xFA4C, }, [0xFA4D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004D", direction="l", linebreak="id", specials={ "char", 0x7949 }, unicodeslot=0xFA4D, }, [0xFA4E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004E", direction="l", linebreak="id", specials={ "char", 0x7948 }, unicodeslot=0xFA4E, }, [0xFA4F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0004F", direction="l", linebreak="id", specials={ "char", 0x7950 }, unicodeslot=0xFA4F, }, [0xFA50]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0032", direction="l", linebreak="id", specials={ "char", 0x7956 }, unicodeslot=0xFA50, }, [0xFA51]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0033", direction="l", linebreak="id", specials={ "char", 0x795D }, unicodeslot=0xFA51, }, [0xFA52]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0034", direction="l", linebreak="id", specials={ "char", 0x798D }, unicodeslot=0xFA52, }, [0xFA53]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0035", direction="l", linebreak="id", specials={ "char", 0x798E }, unicodeslot=0xFA53, }, [0xFA54]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0036", direction="l", linebreak="id", specials={ "char", 0x7A40 }, unicodeslot=0xFA54, }, [0xFA55]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0037", direction="l", linebreak="id", specials={ "char", 0x7A81 }, unicodeslot=0xFA55, }, [0xFA56]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0038", direction="l", linebreak="id", specials={ "char", 0x7BC0 }, unicodeslot=0xFA56, }, [0xFA57]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0039", direction="l", linebreak="id", specials={ "char", 0x7DF4 }, unicodeslot=0xFA57, }, [0xFA58]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x003A", direction="l", linebreak="id", specials={ "char", 0x7E09 }, unicodeslot=0xFA58, }, [0xFA59]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x003B", direction="l", linebreak="id", specials={ "char", 0x7E41 }, unicodeslot=0xFA59, }, [0xFA5A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005A", direction="l", linebreak="id", specials={ "char", 0x7F72 }, unicodeslot=0xFA5A, }, [0xFA5B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005B", direction="l", linebreak="id", specials={ "char", 0x8005 }, unicodeslot=0xFA5B, }, [0xFA5C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005C", direction="l", linebreak="id", specials={ "char", 0x81ED }, unicodeslot=0xFA5C, }, [0xFA5D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005D", direction="l", linebreak="id", specials={ "char", 0x8279 }, unicodeslot=0xFA5D, }, [0xFA5E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005E", direction="l", linebreak="id", specials={ "char", 0x8279 }, unicodeslot=0xFA5E, }, [0xFA5F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0005F", direction="l", linebreak="id", specials={ "char", 0x8457 }, unicodeslot=0xFA5F, }, [0xFA60]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x003C", direction="l", linebreak="id", specials={ "char", 0x8910 }, unicodeslot=0xFA60, }, [0xFA61]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x003D", direction="l", linebreak="id", specials={ "char", 0x8996 }, unicodeslot=0xFA61, }, [0xFA62]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x003E", direction="l", linebreak="id", specials={ "char", 0x8B01 }, unicodeslot=0xFA62, }, [0xFA63]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x003F", direction="l", linebreak="id", specials={ "char", 0x8B39 }, unicodeslot=0xFA63, }, [0xFA64]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0040", direction="l", linebreak="id", specials={ "char", 0x8CD3 }, unicodeslot=0xFA64, }, [0xFA65]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0041", direction="l", linebreak="id", specials={ "char", 0x8D08 }, unicodeslot=0xFA65, }, [0xFA66]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0042", direction="l", linebreak="id", specials={ "char", 0x8FB6 }, unicodeslot=0xFA66, }, [0xFA67]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0043", direction="l", linebreak="id", specials={ "char", 0x9038 }, unicodeslot=0xFA67, }, [0xFA68]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0044", direction="l", linebreak="id", specials={ "char", 0x96E3 }, unicodeslot=0xFA68, }, [0xFA69]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0045", direction="l", linebreak="id", specials={ "char", 0x97FF }, unicodeslot=0xFA69, }, [0xFA6A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0006A", direction="l", linebreak="id", specials={ "char", 0x983B }, unicodeslot=0xFA6A, }, [0xFA6B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA6B", direction="l", linebreak="id", specials={ "char", 0x6075 }, unicodeslot=0xFA6B, }, [0xFA6C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA6C", direction="l", linebreak="id", specials={ "char", 0x242EE }, unicodeslot=0xFA6C, }, [0xFA6D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA6D", direction="l", linebreak="id", specials={ "char", 0x8218 }, unicodeslot=0xFA6D, }, [0xFA70]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0046", direction="l", linebreak="id", specials={ "char", 0x4E26 }, unicodeslot=0xFA70, }, [0xFA71]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0047", direction="l", linebreak="id", specials={ "char", 0x51B5 }, unicodeslot=0xFA71, }, [0xFA72]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0048", direction="l", linebreak="id", specials={ "char", 0x5168 }, unicodeslot=0xFA72, }, [0xFA73]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0049", direction="l", linebreak="id", specials={ "char", 0x4F80 }, unicodeslot=0xFA73, }, [0xFA74]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x004A", direction="l", linebreak="id", specials={ "char", 0x5145 }, unicodeslot=0xFA74, }, [0xFA75]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x004B", direction="l", linebreak="id", specials={ "char", 0x5180 }, unicodeslot=0xFA75, }, [0xFA76]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x004C", direction="l", linebreak="id", specials={ "char", 0x52C7 }, unicodeslot=0xFA76, }, [0xFA77]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x004D", direction="l", linebreak="id", specials={ "char", 0x52FA }, unicodeslot=0xFA77, }, [0xFA78]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x004E", direction="l", linebreak="id", specials={ "char", 0x559D }, unicodeslot=0xFA78, }, [0xFA79]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x004F", direction="l", linebreak="id", specials={ "char", 0x5555 }, unicodeslot=0xFA79, }, [0xFA7A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007A", direction="l", linebreak="id", specials={ "char", 0x5599 }, unicodeslot=0xFA7A, }, [0xFA7B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007B", direction="l", linebreak="id", specials={ "char", 0x55E2 }, unicodeslot=0xFA7B, }, [0xFA7C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007C", direction="l", linebreak="id", specials={ "char", 0x585A }, unicodeslot=0xFA7C, }, [0xFA7D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007D", direction="l", linebreak="id", specials={ "char", 0x58B3 }, unicodeslot=0xFA7D, }, [0xFA7E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007E", direction="l", linebreak="id", specials={ "char", 0x5944 }, unicodeslot=0xFA7E, }, [0xFA7F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0007F", direction="l", linebreak="id", specials={ "char", 0x5954 }, unicodeslot=0xFA7F, }, [0xFA80]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0050", direction="l", linebreak="id", specials={ "char", 0x5A62 }, unicodeslot=0xFA80, }, [0xFA81]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0051", direction="l", linebreak="id", specials={ "char", 0x5B28 }, unicodeslot=0xFA81, }, [0xFA82]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0052", direction="l", linebreak="id", specials={ "char", 0x5ED2 }, unicodeslot=0xFA82, }, [0xFA83]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0053", direction="l", linebreak="id", specials={ "char", 0x5ED9 }, unicodeslot=0xFA83, }, [0xFA84]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0054", direction="l", linebreak="id", specials={ "char", 0x5F69 }, unicodeslot=0xFA84, }, [0xFA85]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0055", direction="l", linebreak="id", specials={ "char", 0x5FAD }, unicodeslot=0xFA85, }, [0xFA86]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0056", direction="l", linebreak="id", specials={ "char", 0x60D8 }, unicodeslot=0xFA86, }, [0xFA87]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0057", direction="l", linebreak="id", specials={ "char", 0x614E }, unicodeslot=0xFA87, }, [0xFA88]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0058", direction="l", linebreak="id", specials={ "char", 0x6108 }, unicodeslot=0xFA88, }, [0xFA89]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0059", direction="l", linebreak="id", specials={ "char", 0x618E }, unicodeslot=0xFA89, }, [0xFA8A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008A", direction="l", linebreak="id", specials={ "char", 0x6160 }, unicodeslot=0xFA8A, }, [0xFA8B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008B", direction="l", linebreak="id", specials={ "char", 0x61F2 }, unicodeslot=0xFA8B, }, [0xFA8C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008C", direction="l", linebreak="id", specials={ "char", 0x6234 }, unicodeslot=0xFA8C, }, [0xFA8D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008D", direction="l", linebreak="id", specials={ "char", 0x63C4 }, unicodeslot=0xFA8D, }, [0xFA8E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008E", direction="l", linebreak="id", specials={ "char", 0x641C }, unicodeslot=0xFA8E, }, [0xFA8F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0008F", direction="l", linebreak="id", specials={ "char", 0x6452 }, unicodeslot=0xFA8F, }, [0xFA90]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x005A", direction="l", linebreak="id", specials={ "char", 0x6556 }, unicodeslot=0xFA90, }, [0xFA91]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x005B", direction="l", linebreak="id", specials={ "char", 0x6674 }, unicodeslot=0xFA91, }, [0xFA92]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x005C", direction="l", linebreak="id", specials={ "char", 0x6717 }, unicodeslot=0xFA92, }, [0xFA93]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x005D", direction="l", linebreak="id", specials={ "char", 0x671B }, unicodeslot=0xFA93, }, [0xFA94]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x005E", direction="l", linebreak="id", specials={ "char", 0x6756 }, unicodeslot=0xFA94, }, [0xFA95]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x005F", direction="l", linebreak="id", specials={ "char", 0x6B79 }, unicodeslot=0xFA95, }, [0xFA96]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0060", direction="l", linebreak="id", specials={ "char", 0x6BBA }, unicodeslot=0xFA96, }, [0xFA97]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0061", direction="l", linebreak="id", specials={ "char", 0x6D41 }, unicodeslot=0xFA97, }, [0xFA98]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0062", direction="l", linebreak="id", specials={ "char", 0x6EDB }, unicodeslot=0xFA98, }, [0xFA99]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0063", direction="l", linebreak="id", specials={ "char", 0x6ECB }, unicodeslot=0xFA99, }, [0xFA9A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009A", direction="l", linebreak="id", specials={ "char", 0x6F22 }, unicodeslot=0xFA9A, }, [0xFA9B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009B", direction="l", linebreak="id", specials={ "char", 0x701E }, unicodeslot=0xFA9B, }, [0xFA9C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009C", direction="l", linebreak="id", specials={ "char", 0x716E }, unicodeslot=0xFA9C, }, [0xFA9D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009D", direction="l", linebreak="id", specials={ "char", 0x77A7 }, unicodeslot=0xFA9D, }, [0xFA9E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009E", direction="l", linebreak="id", specials={ "char", 0x7235 }, unicodeslot=0xFA9E, }, [0xFA9F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FA0x0009F", direction="l", linebreak="id", specials={ "char", 0x72AF }, unicodeslot=0xFA9F, }, [0xFAA0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0000", direction="l", linebreak="id", specials={ "char", 0x732A }, unicodeslot=0xFAA0, }, [0xFAA1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0001", direction="l", linebreak="id", specials={ "char", 0x7471 }, unicodeslot=0xFAA1, }, [0xFAA2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0002", direction="l", linebreak="id", specials={ "char", 0x7506 }, unicodeslot=0xFAA2, }, [0xFAA3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0003", direction="l", linebreak="id", specials={ "char", 0x753B }, unicodeslot=0xFAA3, }, [0xFAA4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0004", direction="l", linebreak="id", specials={ "char", 0x761D }, unicodeslot=0xFAA4, }, [0xFAA5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0005", direction="l", linebreak="id", specials={ "char", 0x761F }, unicodeslot=0xFAA5, }, [0xFAA6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0006", direction="l", linebreak="id", specials={ "char", 0x76CA }, unicodeslot=0xFAA6, }, [0xFAA7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0007", direction="l", linebreak="id", specials={ "char", 0x76DB }, unicodeslot=0xFAA7, }, [0xFAA8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0008", direction="l", linebreak="id", specials={ "char", 0x76F4 }, unicodeslot=0xFAA8, }, [0xFAA9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAA0x0009", direction="l", linebreak="id", specials={ "char", 0x774A }, unicodeslot=0xFAA9, }, [0xFAAA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAAA", direction="l", linebreak="id", specials={ "char", 0x7740 }, unicodeslot=0xFAAA, }, [0xFAAB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAAB", direction="l", linebreak="id", specials={ "char", 0x78CC }, unicodeslot=0xFAAB, }, [0xFAAC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAAC", direction="l", linebreak="id", specials={ "char", 0x7AB1 }, unicodeslot=0xFAAC, }, [0xFAAD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAAD", direction="l", linebreak="id", specials={ "char", 0x7BC0 }, unicodeslot=0xFAAD, }, [0xFAAE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAAE", direction="l", linebreak="id", specials={ "char", 0x7C7B }, unicodeslot=0xFAAE, }, [0xFAAF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAAF", direction="l", linebreak="id", specials={ "char", 0x7D5B }, unicodeslot=0xFAAF, }, [0xFAB0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0000", direction="l", linebreak="id", specials={ "char", 0x7DF4 }, unicodeslot=0xFAB0, }, [0xFAB1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0001", direction="l", linebreak="id", specials={ "char", 0x7F3E }, unicodeslot=0xFAB1, }, [0xFAB2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0002", direction="l", linebreak="id", specials={ "char", 0x8005 }, unicodeslot=0xFAB2, }, [0xFAB3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0003", direction="l", linebreak="id", specials={ "char", 0x8352 }, unicodeslot=0xFAB3, }, [0xFAB4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0004", direction="l", linebreak="id", specials={ "char", 0x83EF }, unicodeslot=0xFAB4, }, [0xFAB5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0005", direction="l", linebreak="id", specials={ "char", 0x8779 }, unicodeslot=0xFAB5, }, [0xFAB6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0006", direction="l", linebreak="id", specials={ "char", 0x8941 }, unicodeslot=0xFAB6, }, [0xFAB7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0007", direction="l", linebreak="id", specials={ "char", 0x8986 }, unicodeslot=0xFAB7, }, [0xFAB8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0008", direction="l", linebreak="id", specials={ "char", 0x8996 }, unicodeslot=0xFAB8, }, [0xFAB9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAB0x0009", direction="l", linebreak="id", specials={ "char", 0x8ABF }, unicodeslot=0xFAB9, }, [0xFABA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FABA", direction="l", linebreak="id", specials={ "char", 0x8AF8 }, unicodeslot=0xFABA, }, [0xFABB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FABB", direction="l", linebreak="id", specials={ "char", 0x8ACB }, unicodeslot=0xFABB, }, [0xFABC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FABC", direction="l", linebreak="id", specials={ "char", 0x8B01 }, unicodeslot=0xFABC, }, [0xFABD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FABD", direction="l", linebreak="id", specials={ "char", 0x8AFE }, unicodeslot=0xFABD, }, [0xFABE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FABE", direction="l", linebreak="id", specials={ "char", 0x8AED }, unicodeslot=0xFABE, }, [0xFABF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FABF", direction="l", linebreak="id", specials={ "char", 0x8B39 }, unicodeslot=0xFABF, }, [0xFAC0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0000", direction="l", linebreak="id", specials={ "char", 0x8B8A }, unicodeslot=0xFAC0, }, [0xFAC1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0001", direction="l", linebreak="id", specials={ "char", 0x8D08 }, unicodeslot=0xFAC1, }, [0xFAC2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0002", direction="l", linebreak="id", specials={ "char", 0x8F38 }, unicodeslot=0xFAC2, }, [0xFAC3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0003", direction="l", linebreak="id", specials={ "char", 0x9072 }, unicodeslot=0xFAC3, }, [0xFAC4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0004", direction="l", linebreak="id", specials={ "char", 0x9199 }, unicodeslot=0xFAC4, }, [0xFAC5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0005", direction="l", linebreak="id", specials={ "char", 0x9276 }, unicodeslot=0xFAC5, }, [0xFAC6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0006", direction="l", linebreak="id", specials={ "char", 0x967C }, unicodeslot=0xFAC6, }, [0xFAC7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0007", direction="l", linebreak="id", specials={ "char", 0x96E3 }, unicodeslot=0xFAC7, }, [0xFAC8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0008", direction="l", linebreak="id", specials={ "char", 0x9756 }, unicodeslot=0xFAC8, }, [0xFAC9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAC0x0009", direction="l", linebreak="id", specials={ "char", 0x97DB }, unicodeslot=0xFAC9, }, [0xFACA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FACA", direction="l", linebreak="id", specials={ "char", 0x97FF }, unicodeslot=0xFACA, }, [0xFACB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FACB", direction="l", linebreak="id", specials={ "char", 0x980B }, unicodeslot=0xFACB, }, [0xFACC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FACC", direction="l", linebreak="id", specials={ "char", 0x983B }, unicodeslot=0xFACC, }, [0xFACD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FACD", direction="l", linebreak="id", specials={ "char", 0x9B12 }, unicodeslot=0xFACD, }, [0xFACE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FACE", direction="l", linebreak="id", specials={ "char", 0x9F9C }, unicodeslot=0xFACE, }, [0xFACF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FACF", direction="l", linebreak="id", specials={ "char", 0x2284A }, unicodeslot=0xFACF, }, [0xFAD0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0000", direction="l", linebreak="id", specials={ "char", 0x22844 }, unicodeslot=0xFAD0, }, [0xFAD1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0001", direction="l", linebreak="id", specials={ "char", 0x233D5 }, unicodeslot=0xFAD1, }, [0xFAD2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0002", direction="l", linebreak="id", specials={ "char", 0x3B9D }, unicodeslot=0xFAD2, }, [0xFAD3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0003", direction="l", linebreak="id", specials={ "char", 0x4018 }, unicodeslot=0xFAD3, }, [0xFAD4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0004", direction="l", linebreak="id", specials={ "char", 0x4039 }, unicodeslot=0xFAD4, }, [0xFAD5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0005", direction="l", linebreak="id", specials={ "char", 0x25249 }, unicodeslot=0xFAD5, }, [0xFAD6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0006", direction="l", linebreak="id", specials={ "char", 0x25CD0 }, unicodeslot=0xFAD6, }, [0xFAD7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0007", direction="l", linebreak="id", specials={ "char", 0x27ED3 }, unicodeslot=0xFAD7, }, [0xFAD8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0008", direction="l", linebreak="id", specials={ "char", 0x9F43 }, unicodeslot=0xFAD8, }, [0xFAD9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-FAD0x0009", direction="l", linebreak="id", specials={ "char", 0x9F8E }, unicodeslot=0xFAD9, }, [0xFB00]={ adobename="ff", category="ll", contextname="ffligature", description="LATIN SMALL LIGATURE FF", direction="l", linebreak="al", specials={ "compat", 0x0066, 0x0066 }, unicodeslot=0xFB00, }, [0xFB01]={ adobename="fi", category="ll", contextname="filigature", description="LATIN SMALL LIGATURE FI", direction="l", linebreak="al", shcode={ 0x0066, 0x0069 }, specials={ "compat", 0x0066, 0x0069 }, unicodeslot=0xFB01, }, [0xFB02]={ adobename="fl", category="ll", contextname="flligature", description="LATIN SMALL LIGATURE FL", direction="l", linebreak="al", shcode={ 0x0066, 0x006C }, specials={ "compat", 0x0066, 0x006C }, unicodeslot=0xFB02, }, [0xFB03]={ adobename="ffi", category="ll", contextname="ffiligature", description="LATIN SMALL LIGATURE FFI", direction="l", linebreak="al", shcode={ 0x0066, 0x0069 }, specials={ "compat", 0x0066, 0x0066, 0x0069 }, unicodeslot=0xFB03, }, [0xFB04]={ adobename="ffl", category="ll", contextname="fflligature", description="LATIN SMALL LIGATURE FFL", direction="l", linebreak="al", shcode={ 0x0066, 0x006C }, specials={ "compat", 0x0066, 0x0066, 0x006C }, unicodeslot=0xFB04, }, [0xFB05]={ category="ll", description="LATIN SMALL LIGATURE LONG S T", direction="l", linebreak="al", specials={ "compat", 0x017F, 0x0074 }, unicodeslot=0xFB05, }, [0xFB06]={ category="ll", contextname="stligature", description="LATIN SMALL LIGATURE ST", direction="l", linebreak="al", shcode={ 0x0073, 0x0074 }, specials={ "compat", 0x0073, 0x0074 }, unicodeslot=0xFB06, }, [0xFB13]={ category="ll", description="ARMENIAN SMALL LIGATURE MEN NOW", direction="l", linebreak="al", specials={ "compat", 0x0574, 0x0576 }, unicodeslot=0xFB13, }, [0xFB14]={ category="ll", description="ARMENIAN SMALL LIGATURE MEN ECH", direction="l", linebreak="al", specials={ "compat", 0x0574, 0x0565 }, unicodeslot=0xFB14, }, [0xFB15]={ category="ll", description="ARMENIAN SMALL LIGATURE MEN INI", direction="l", linebreak="al", specials={ "compat", 0x0574, 0x056B }, unicodeslot=0xFB15, }, [0xFB16]={ category="ll", description="ARMENIAN SMALL LIGATURE VEW NOW", direction="l", linebreak="al", specials={ "compat", 0x057E, 0x0576 }, unicodeslot=0xFB16, }, [0xFB17]={ category="ll", description="ARMENIAN SMALL LIGATURE MEN XEH", direction="l", linebreak="al", specials={ "compat", 0x0574, 0x056D }, unicodeslot=0xFB17, }, [0xFB1D]={ category="lo", description="HEBREW LETTER YOD WITH HIRIQ", direction="r", linebreak="hl", shcode=0x05D9, specials={ "char", 0x05D9, 0x05B4 }, unicodeslot=0xFB1D, }, [0xFB1E]={ category="mn", description="HEBREW POINT JUDEO-SPANISH VARIKA", direction="nsm", linebreak="cm", unicodeslot=0xFB1E, }, [0xFB1F]={ adobename="yodyodpatahhebrew", category="lo", description="HEBREW LIGATURE YIDDISH YOD YOD PATAH", direction="r", linebreak="hl", specials={ "char", 0x05F2, 0x05B7 }, unicodeslot=0xFB1F, }, [0xFB20]={ adobename="ayinaltonehebrew", category="lo", description="HEBREW LETTER ALTERNATIVE AYIN", direction="r", linebreak="hl", specials={ "font", 0x05E2 }, unicodeslot=0xFB20, }, [0xFB21]={ category="lo", description="HEBREW LETTER WIDE ALEF", direction="r", linebreak="hl", specials={ "font", 0x05D0 }, unicodeslot=0xFB21, }, [0xFB22]={ category="lo", description="HEBREW LETTER WIDE DALET", direction="r", linebreak="hl", specials={ "font", 0x05D3 }, unicodeslot=0xFB22, }, [0xFB23]={ category="lo", description="HEBREW LETTER WIDE HE", direction="r", linebreak="hl", specials={ "font", 0x05D4 }, unicodeslot=0xFB23, }, [0xFB24]={ category="lo", description="HEBREW LETTER WIDE KAF", direction="r", linebreak="hl", specials={ "font", 0x05DB }, unicodeslot=0xFB24, }, [0xFB25]={ category="lo", description="HEBREW LETTER WIDE LAMED", direction="r", linebreak="hl", specials={ "font", 0x05DC }, unicodeslot=0xFB25, }, [0xFB26]={ category="lo", description="HEBREW LETTER WIDE FINAL MEM", direction="r", linebreak="hl", specials={ "font", 0x05DD }, unicodeslot=0xFB26, }, [0xFB27]={ category="lo", description="HEBREW LETTER WIDE RESH", direction="r", linebreak="hl", specials={ "font", 0x05E8 }, unicodeslot=0xFB27, }, [0xFB28]={ category="lo", description="HEBREW LETTER WIDE TAV", direction="r", linebreak="hl", specials={ "font", 0x05EA }, unicodeslot=0xFB28, }, [0xFB29]={ category="sm", description="HEBREW LETTER ALTERNATIVE PLUS SIGN", direction="es", linebreak="al", specials={ "font", 0x002B }, unicodeslot=0xFB29, }, [0xFB2A]={ adobename="shinshindothebrew", category="lo", description="HEBREW LETTER SHIN WITH SHIN DOT", direction="r", linebreak="hl", shcode=0x05E9, specials={ "char", 0x05E9, 0x05C1 }, unicodeslot=0xFB2A, }, [0xFB2B]={ adobename="shinsindothebrew", category="lo", description="HEBREW LETTER SHIN WITH SIN DOT", direction="r", linebreak="hl", shcode=0x05E9, specials={ "char", 0x05E9, 0x05C2 }, unicodeslot=0xFB2B, }, [0xFB2C]={ adobename="shindageshshindothebrew", category="lo", description="HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT", direction="r", linebreak="hl", shcode=0x05E9, specials={ "char", 0xFB49, 0x05C1 }, unicodeslot=0xFB2C, }, [0xFB2D]={ adobename="shindageshsindothebrew", category="lo", description="HEBREW LETTER SHIN WITH DAGESH AND SIN DOT", direction="r", linebreak="hl", shcode=0x05E9, specials={ "char", 0xFB49, 0x05C2 }, unicodeslot=0xFB2D, }, [0xFB2E]={ adobename="alefpatahhebrew", category="lo", description="HEBREW LETTER ALEF WITH PATAH", direction="r", linebreak="hl", shcode=0x05D0, specials={ "char", 0x05D0, 0x05B7 }, unicodeslot=0xFB2E, }, [0xFB2F]={ adobename="alefqamatshebrew", category="lo", description="HEBREW LETTER ALEF WITH QAMATS", direction="r", linebreak="hl", shcode=0x05D0, specials={ "char", 0x05D0, 0x05B8 }, unicodeslot=0xFB2F, }, [0xFB30]={ adobename="alefdageshhebrew", category="lo", description="HEBREW LETTER ALEF WITH MAPIQ", direction="r", linebreak="hl", shcode=0x05D0, specials={ "char", 0x05D0, 0x05BC }, unicodeslot=0xFB30, }, [0xFB31]={ adobename="betdageshhebrew", category="lo", description="HEBREW LETTER BET WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D1, specials={ "char", 0x05D1, 0x05BC }, unicodeslot=0xFB31, }, [0xFB32]={ adobename="gimeldageshhebrew", category="lo", description="HEBREW LETTER GIMEL WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D2, specials={ "char", 0x05D2, 0x05BC }, unicodeslot=0xFB32, }, [0xFB33]={ adobename="daletdageshhebrew", category="lo", description="HEBREW LETTER DALET WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D3, specials={ "char", 0x05D3, 0x05BC }, unicodeslot=0xFB33, }, [0xFB34]={ adobename="hedageshhebrew", category="lo", description="HEBREW LETTER HE WITH MAPIQ", direction="r", linebreak="hl", shcode=0x05D4, specials={ "char", 0x05D4, 0x05BC }, unicodeslot=0xFB34, }, [0xFB35]={ adobename="vavdageshhebrew", category="lo", description="HEBREW LETTER VAV WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D5, specials={ "char", 0x05D5, 0x05BC }, unicodeslot=0xFB35, }, [0xFB36]={ adobename="zayindageshhebrew", category="lo", description="HEBREW LETTER ZAYIN WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D6, specials={ "char", 0x05D6, 0x05BC }, unicodeslot=0xFB36, }, [0xFB38]={ adobename="tetdageshhebrew", category="lo", description="HEBREW LETTER TET WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D8, specials={ "char", 0x05D8, 0x05BC }, unicodeslot=0xFB38, }, [0xFB39]={ adobename="yoddageshhebrew", category="lo", description="HEBREW LETTER YOD WITH DAGESH", direction="r", linebreak="hl", shcode=0x05D9, specials={ "char", 0x05D9, 0x05BC }, unicodeslot=0xFB39, }, [0xFB3A]={ adobename="finalkafdageshhebrew", category="lo", description="HEBREW LETTER FINAL KAF WITH DAGESH", direction="r", linebreak="hl", specials={ "char", 0x05DA, 0x05BC }, unicodeslot=0xFB3A, }, [0xFB3B]={ adobename="kafdageshhebrew", category="lo", description="HEBREW LETTER KAF WITH DAGESH", direction="r", linebreak="hl", shcode=0x05DB, specials={ "char", 0x05DB, 0x05BC }, unicodeslot=0xFB3B, }, [0xFB3C]={ adobename="lameddageshhebrew", category="lo", description="HEBREW LETTER LAMED WITH DAGESH", direction="r", linebreak="hl", shcode=0x05DC, specials={ "char", 0x05DC, 0x05BC }, unicodeslot=0xFB3C, }, [0xFB3E]={ adobename="memdageshhebrew", category="lo", description="HEBREW LETTER MEM WITH DAGESH", direction="r", linebreak="hl", shcode=0x05DE, specials={ "char", 0x05DE, 0x05BC }, unicodeslot=0xFB3E, }, [0xFB40]={ adobename="nundageshhebrew", category="lo", description="HEBREW LETTER NUN WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E0, specials={ "char", 0x05E0, 0x05BC }, unicodeslot=0xFB40, }, [0xFB41]={ adobename="samekhdageshhebrew", category="lo", description="HEBREW LETTER SAMEKH WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E1, specials={ "char", 0x05E1, 0x05BC }, unicodeslot=0xFB41, }, [0xFB43]={ adobename="pefinaldageshhebrew", category="lo", description="HEBREW LETTER FINAL PE WITH DAGESH", direction="r", linebreak="hl", specials={ "char", 0x05E3, 0x05BC }, unicodeslot=0xFB43, }, [0xFB44]={ adobename="pedageshhebrew", category="lo", description="HEBREW LETTER PE WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E4, specials={ "char", 0x05E4, 0x05BC }, unicodeslot=0xFB44, }, [0xFB46]={ adobename="tsadidageshhebrew", category="lo", description="HEBREW LETTER TSADI WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E6, specials={ "char", 0x05E6, 0x05BC }, unicodeslot=0xFB46, }, [0xFB47]={ adobename="qofdageshhebrew", category="lo", description="HEBREW LETTER QOF WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E7, specials={ "char", 0x05E7, 0x05BC }, unicodeslot=0xFB47, }, [0xFB48]={ adobename="reshdageshhebrew", category="lo", description="HEBREW LETTER RESH WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E8, specials={ "char", 0x05E8, 0x05BC }, unicodeslot=0xFB48, }, [0xFB49]={ adobename="shindageshhebrew", category="lo", description="HEBREW LETTER SHIN WITH DAGESH", direction="r", linebreak="hl", shcode=0x05E9, specials={ "char", 0x05E9, 0x05BC }, unicodeslot=0xFB49, }, [0xFB4A]={ adobename="tavdageshhebrew", category="lo", description="HEBREW LETTER TAV WITH DAGESH", direction="r", linebreak="hl", shcode=0x05EA, specials={ "char", 0x05EA, 0x05BC }, unicodeslot=0xFB4A, }, [0xFB4B]={ adobename="vavholamhebrew", category="lo", description="HEBREW LETTER VAV WITH HOLAM", direction="r", linebreak="hl", shcode=0x05D5, specials={ "char", 0x05D5, 0x05B9 }, unicodeslot=0xFB4B, }, [0xFB4C]={ adobename="betrafehebrew", category="lo", description="HEBREW LETTER BET WITH RAFE", direction="r", linebreak="hl", shcode=0x05D1, specials={ "char", 0x05D1, 0x05BF }, unicodeslot=0xFB4C, }, [0xFB4D]={ adobename="kafrafehebrew", category="lo", description="HEBREW LETTER KAF WITH RAFE", direction="r", linebreak="hl", shcode=0x05DB, specials={ "char", 0x05DB, 0x05BF }, unicodeslot=0xFB4D, }, [0xFB4E]={ adobename="perafehebrew", category="lo", description="HEBREW LETTER PE WITH RAFE", direction="r", linebreak="hl", shcode=0x05E4, specials={ "char", 0x05E4, 0x05BF }, unicodeslot=0xFB4E, }, [0xFB4F]={ adobename="aleflamedhebrew", category="lo", description="HEBREW LIGATURE ALEF LAMED", direction="r", linebreak="hl", specials={ "compat", 0x05D0, 0x05DC }, unicodeslot=0xFB4F, }, [0xFB50]={ category="lo", description="ARABIC LETTER ALEF WASLA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0671 }, unicodeslot=0xFB50, }, [0xFB51]={ category="lo", description="ARABIC LETTER ALEF WASLA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0671 }, unicodeslot=0xFB51, }, [0xFB52]={ category="lo", description="ARABIC LETTER BEEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x067B }, unicodeslot=0xFB52, }, [0xFB53]={ category="lo", description="ARABIC LETTER BEEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x067B }, unicodeslot=0xFB53, }, [0xFB54]={ category="lo", description="ARABIC LETTER BEEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x067B }, unicodeslot=0xFB54, }, [0xFB55]={ category="lo", description="ARABIC LETTER BEEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x067B }, unicodeslot=0xFB55, }, [0xFB56]={ category="lo", description="ARABIC LETTER PEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x067E }, unicodeslot=0xFB56, }, [0xFB57]={ adobename="pehfinalarabic", category="lo", description="ARABIC LETTER PEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x067E }, unicodeslot=0xFB57, }, [0xFB58]={ adobename="pehinitialarabic", category="lo", description="ARABIC LETTER PEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x067E }, unicodeslot=0xFB58, }, [0xFB59]={ adobename="pehmedialarabic", category="lo", description="ARABIC LETTER PEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x067E }, unicodeslot=0xFB59, }, [0xFB5A]={ category="lo", description="ARABIC LETTER BEHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0680 }, unicodeslot=0xFB5A, }, [0xFB5B]={ category="lo", description="ARABIC LETTER BEHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0680 }, unicodeslot=0xFB5B, }, [0xFB5C]={ category="lo", description="ARABIC LETTER BEHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0680 }, unicodeslot=0xFB5C, }, [0xFB5D]={ category="lo", description="ARABIC LETTER BEHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0680 }, unicodeslot=0xFB5D, }, [0xFB5E]={ category="lo", description="ARABIC LETTER TTEHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x067A }, unicodeslot=0xFB5E, }, [0xFB5F]={ category="lo", description="ARABIC LETTER TTEHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x067A }, unicodeslot=0xFB5F, }, [0xFB60]={ category="lo", description="ARABIC LETTER TTEHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x067A }, unicodeslot=0xFB60, }, [0xFB61]={ category="lo", description="ARABIC LETTER TTEHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x067A }, unicodeslot=0xFB61, }, [0xFB62]={ category="lo", description="ARABIC LETTER TEHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x067F }, unicodeslot=0xFB62, }, [0xFB63]={ category="lo", description="ARABIC LETTER TEHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x067F }, unicodeslot=0xFB63, }, [0xFB64]={ category="lo", description="ARABIC LETTER TEHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x067F }, unicodeslot=0xFB64, }, [0xFB65]={ category="lo", description="ARABIC LETTER TEHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x067F }, unicodeslot=0xFB65, }, [0xFB66]={ category="lo", description="ARABIC LETTER TTEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0679 }, unicodeslot=0xFB66, }, [0xFB67]={ adobename="ttehfinalarabic", category="lo", description="ARABIC LETTER TTEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0679 }, unicodeslot=0xFB67, }, [0xFB68]={ adobename="ttehinitialarabic", category="lo", description="ARABIC LETTER TTEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0679 }, unicodeslot=0xFB68, }, [0xFB69]={ adobename="ttehmedialarabic", category="lo", description="ARABIC LETTER TTEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0679 }, unicodeslot=0xFB69, }, [0xFB6A]={ category="lo", description="ARABIC LETTER VEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06A4 }, unicodeslot=0xFB6A, }, [0xFB6B]={ adobename="vehfinalarabic", category="lo", description="ARABIC LETTER VEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06A4 }, unicodeslot=0xFB6B, }, [0xFB6C]={ adobename="vehinitialarabic", category="lo", description="ARABIC LETTER VEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06A4 }, unicodeslot=0xFB6C, }, [0xFB6D]={ adobename="vehmedialarabic", category="lo", description="ARABIC LETTER VEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06A4 }, unicodeslot=0xFB6D, }, [0xFB6E]={ category="lo", description="ARABIC LETTER PEHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06A6 }, unicodeslot=0xFB6E, }, [0xFB6F]={ category="lo", description="ARABIC LETTER PEHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06A6 }, unicodeslot=0xFB6F, }, [0xFB70]={ category="lo", description="ARABIC LETTER PEHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06A6 }, unicodeslot=0xFB70, }, [0xFB71]={ category="lo", description="ARABIC LETTER PEHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06A6 }, unicodeslot=0xFB71, }, [0xFB72]={ category="lo", description="ARABIC LETTER DYEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0684 }, unicodeslot=0xFB72, }, [0xFB73]={ category="lo", description="ARABIC LETTER DYEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0684 }, unicodeslot=0xFB73, }, [0xFB74]={ category="lo", description="ARABIC LETTER DYEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0684 }, unicodeslot=0xFB74, }, [0xFB75]={ category="lo", description="ARABIC LETTER DYEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0684 }, unicodeslot=0xFB75, }, [0xFB76]={ category="lo", description="ARABIC LETTER NYEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0683 }, unicodeslot=0xFB76, }, [0xFB77]={ category="lo", description="ARABIC LETTER NYEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0683 }, unicodeslot=0xFB77, }, [0xFB78]={ category="lo", description="ARABIC LETTER NYEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0683 }, unicodeslot=0xFB78, }, [0xFB79]={ category="lo", description="ARABIC LETTER NYEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0683 }, unicodeslot=0xFB79, }, [0xFB7A]={ category="lo", description="ARABIC LETTER TCHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0686 }, unicodeslot=0xFB7A, }, [0xFB7B]={ adobename="tchehfinalarabic", category="lo", description="ARABIC LETTER TCHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0686 }, unicodeslot=0xFB7B, }, [0xFB7C]={ adobename="tchehmeeminitialarabic", category="lo", description="ARABIC LETTER TCHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0686 }, unicodeslot=0xFB7C, }, [0xFB7D]={ adobename="tchehmedialarabic", category="lo", description="ARABIC LETTER TCHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0686 }, unicodeslot=0xFB7D, }, [0xFB7E]={ category="lo", description="ARABIC LETTER TCHEHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0687 }, unicodeslot=0xFB7E, }, [0xFB7F]={ category="lo", description="ARABIC LETTER TCHEHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0687 }, unicodeslot=0xFB7F, }, [0xFB80]={ category="lo", description="ARABIC LETTER TCHEHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0687 }, unicodeslot=0xFB80, }, [0xFB81]={ category="lo", description="ARABIC LETTER TCHEHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0687 }, unicodeslot=0xFB81, }, [0xFB82]={ category="lo", description="ARABIC LETTER DDAHAL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x068D }, unicodeslot=0xFB82, }, [0xFB83]={ category="lo", description="ARABIC LETTER DDAHAL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x068D }, unicodeslot=0xFB83, }, [0xFB84]={ category="lo", description="ARABIC LETTER DAHAL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x068C }, unicodeslot=0xFB84, }, [0xFB85]={ category="lo", description="ARABIC LETTER DAHAL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x068C }, unicodeslot=0xFB85, }, [0xFB86]={ category="lo", description="ARABIC LETTER DUL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x068E }, unicodeslot=0xFB86, }, [0xFB87]={ category="lo", description="ARABIC LETTER DUL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x068E }, unicodeslot=0xFB87, }, [0xFB88]={ category="lo", description="ARABIC LETTER DDAL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0688 }, unicodeslot=0xFB88, }, [0xFB89]={ adobename="ddalfinalarabic", category="lo", description="ARABIC LETTER DDAL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0688 }, unicodeslot=0xFB89, }, [0xFB8A]={ category="lo", description="ARABIC LETTER JEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0698 }, unicodeslot=0xFB8A, }, [0xFB8B]={ adobename="jehfinalarabic", category="lo", description="ARABIC LETTER JEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0698 }, unicodeslot=0xFB8B, }, [0xFB8C]={ category="lo", description="ARABIC LETTER RREH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0691 }, unicodeslot=0xFB8C, }, [0xFB8D]={ adobename="rrehfinalarabic", category="lo", description="ARABIC LETTER RREH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0691 }, unicodeslot=0xFB8D, }, [0xFB8E]={ category="lo", description="ARABIC LETTER KEHEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06A9 }, unicodeslot=0xFB8E, }, [0xFB8F]={ category="lo", description="ARABIC LETTER KEHEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06A9 }, unicodeslot=0xFB8F, }, [0xFB90]={ category="lo", description="ARABIC LETTER KEHEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06A9 }, unicodeslot=0xFB90, }, [0xFB91]={ category="lo", description="ARABIC LETTER KEHEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06A9 }, unicodeslot=0xFB91, }, [0xFB92]={ category="lo", description="ARABIC LETTER GAF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06AF }, unicodeslot=0xFB92, }, [0xFB93]={ adobename="gaffinalarabic", category="lo", description="ARABIC LETTER GAF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06AF }, unicodeslot=0xFB93, }, [0xFB94]={ adobename="gafinitialarabic", category="lo", description="ARABIC LETTER GAF INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06AF }, unicodeslot=0xFB94, }, [0xFB95]={ adobename="gafmedialarabic", category="lo", description="ARABIC LETTER GAF MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06AF }, unicodeslot=0xFB95, }, [0xFB96]={ category="lo", description="ARABIC LETTER GUEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06B3 }, unicodeslot=0xFB96, }, [0xFB97]={ category="lo", description="ARABIC LETTER GUEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06B3 }, unicodeslot=0xFB97, }, [0xFB98]={ category="lo", description="ARABIC LETTER GUEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06B3 }, unicodeslot=0xFB98, }, [0xFB99]={ category="lo", description="ARABIC LETTER GUEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06B3 }, unicodeslot=0xFB99, }, [0xFB9A]={ category="lo", description="ARABIC LETTER NGOEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06B1 }, unicodeslot=0xFB9A, }, [0xFB9B]={ category="lo", description="ARABIC LETTER NGOEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06B1 }, unicodeslot=0xFB9B, }, [0xFB9C]={ category="lo", description="ARABIC LETTER NGOEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06B1 }, unicodeslot=0xFB9C, }, [0xFB9D]={ category="lo", description="ARABIC LETTER NGOEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06B1 }, unicodeslot=0xFB9D, }, [0xFB9E]={ category="lo", description="ARABIC LETTER NOON GHUNNA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06BA }, unicodeslot=0xFB9E, }, [0xFB9F]={ adobename="noonghunnafinalarabic", category="lo", description="ARABIC LETTER NOON GHUNNA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06BA }, unicodeslot=0xFB9F, }, [0xFBA0]={ category="lo", description="ARABIC LETTER RNOON ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06BB }, unicodeslot=0xFBA0, }, [0xFBA1]={ category="lo", description="ARABIC LETTER RNOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06BB }, unicodeslot=0xFBA1, }, [0xFBA2]={ category="lo", description="ARABIC LETTER RNOON INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06BB }, unicodeslot=0xFBA2, }, [0xFBA3]={ category="lo", description="ARABIC LETTER RNOON MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06BB }, unicodeslot=0xFBA3, }, [0xFBA4]={ adobename="hehhamzaaboveisolatedarabic", category="lo", description="ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM", direction="al", linebreak="al", shcode=0x0647, specials={ "isolated", 0x06C0 }, unicodeslot=0xFBA4, }, [0xFBA5]={ adobename="hehhamzaabovefinalarabic", category="lo", description="ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM", direction="al", linebreak="al", shcode=0x0647, specials={ "final", 0x06C0 }, unicodeslot=0xFBA5, }, [0xFBA6]={ category="lo", description="ARABIC LETTER HEH GOAL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06C1 }, unicodeslot=0xFBA6, }, [0xFBA7]={ adobename="hehfinalaltonearabic", category="lo", description="ARABIC LETTER HEH GOAL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06C1 }, unicodeslot=0xFBA7, }, [0xFBA8]={ adobename="hehinitialaltonearabic", category="lo", description="ARABIC LETTER HEH GOAL INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06C1 }, unicodeslot=0xFBA8, }, [0xFBA9]={ adobename="hehmedialaltonearabic", category="lo", description="ARABIC LETTER HEH GOAL MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06C1 }, unicodeslot=0xFBA9, }, [0xFBAA]={ category="lo", description="ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06BE }, unicodeslot=0xFBAA, }, [0xFBAB]={ category="lo", description="ARABIC LETTER HEH DOACHASHMEE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06BE }, unicodeslot=0xFBAB, }, [0xFBAC]={ category="lo", description="ARABIC LETTER HEH DOACHASHMEE INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06BE }, unicodeslot=0xFBAC, }, [0xFBAD]={ category="lo", description="ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06BE }, unicodeslot=0xFBAD, }, [0xFBAE]={ category="lo", description="ARABIC LETTER YEH BARREE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06D2 }, unicodeslot=0xFBAE, }, [0xFBAF]={ adobename="yehbarreefinalarabic", category="lo", description="ARABIC LETTER YEH BARREE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06D2 }, unicodeslot=0xFBAF, }, [0xFBB0]={ category="lo", description="ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06D3 }, unicodeslot=0xFBB0, }, [0xFBB1]={ category="lo", description="ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06D3 }, unicodeslot=0xFBB1, }, [0xFBB2]={ category="sk", description="ARABIC SYMBOL DOT ABOVE", direction="al", linebreak="al", unicodeslot=0xFBB2, }, [0xFBB3]={ category="sk", description="ARABIC SYMBOL DOT BELOW", direction="al", linebreak="al", unicodeslot=0xFBB3, }, [0xFBB4]={ category="sk", description="ARABIC SYMBOL TWO DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0xFBB4, }, [0xFBB5]={ category="sk", description="ARABIC SYMBOL TWO DOTS BELOW", direction="al", linebreak="al", unicodeslot=0xFBB5, }, [0xFBB6]={ category="sk", description="ARABIC SYMBOL THREE DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0xFBB6, }, [0xFBB7]={ category="sk", description="ARABIC SYMBOL THREE DOTS BELOW", direction="al", linebreak="al", unicodeslot=0xFBB7, }, [0xFBB8]={ category="sk", description="ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE", direction="al", linebreak="al", unicodeslot=0xFBB8, }, [0xFBB9]={ category="sk", description="ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW", direction="al", linebreak="al", unicodeslot=0xFBB9, }, [0xFBBA]={ category="sk", description="ARABIC SYMBOL FOUR DOTS ABOVE", direction="al", linebreak="al", unicodeslot=0xFBBA, }, [0xFBBB]={ category="sk", description="ARABIC SYMBOL FOUR DOTS BELOW", direction="al", linebreak="al", unicodeslot=0xFBBB, }, [0xFBBC]={ category="sk", description="ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW", direction="al", linebreak="al", unicodeslot=0xFBBC, }, [0xFBBD]={ category="sk", description="ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE", direction="al", linebreak="al", unicodeslot=0xFBBD, }, [0xFBBE]={ category="sk", description="ARABIC SYMBOL TWO DOTS VERTICALLY BELOW", direction="al", linebreak="al", unicodeslot=0xFBBE, }, [0xFBBF]={ category="sk", description="ARABIC SYMBOL RING", direction="al", linebreak="al", unicodeslot=0xFBBF, }, [0xFBC0]={ category="sk", description="ARABIC SYMBOL SMALL TAH ABOVE", direction="al", linebreak="al", unicodeslot=0xFBC0, }, [0xFBC1]={ category="sk", description="ARABIC SYMBOL SMALL TAH BELOW", direction="al", linebreak="al", unicodeslot=0xFBC1, }, [0xFBD3]={ category="lo", description="ARABIC LETTER NG ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06AD }, unicodeslot=0xFBD3, }, [0xFBD4]={ category="lo", description="ARABIC LETTER NG FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06AD }, unicodeslot=0xFBD4, }, [0xFBD5]={ category="lo", description="ARABIC LETTER NG INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06AD }, unicodeslot=0xFBD5, }, [0xFBD6]={ category="lo", description="ARABIC LETTER NG MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06AD }, unicodeslot=0xFBD6, }, [0xFBD7]={ category="lo", description="ARABIC LETTER U ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06C7 }, unicodeslot=0xFBD7, }, [0xFBD8]={ category="lo", description="ARABIC LETTER U FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06C7 }, unicodeslot=0xFBD8, }, [0xFBD9]={ category="lo", description="ARABIC LETTER OE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06C6 }, unicodeslot=0xFBD9, }, [0xFBDA]={ category="lo", description="ARABIC LETTER OE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06C6 }, unicodeslot=0xFBDA, }, [0xFBDB]={ category="lo", description="ARABIC LETTER YU ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06C8 }, unicodeslot=0xFBDB, }, [0xFBDC]={ category="lo", description="ARABIC LETTER YU FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06C8 }, unicodeslot=0xFBDC, }, [0xFBDD]={ category="lo", description="ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM", direction="al", linebreak="al", shcode=0x06C7, specials={ "isolated", 0x0677 }, unicodeslot=0xFBDD, }, [0xFBDE]={ category="lo", description="ARABIC LETTER VE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06CB }, unicodeslot=0xFBDE, }, [0xFBDF]={ category="lo", description="ARABIC LETTER VE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06CB }, unicodeslot=0xFBDF, }, [0xFBE0]={ category="lo", description="ARABIC LETTER KIRGHIZ OE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06C5 }, unicodeslot=0xFBE0, }, [0xFBE1]={ category="lo", description="ARABIC LETTER KIRGHIZ OE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06C5 }, unicodeslot=0xFBE1, }, [0xFBE2]={ category="lo", description="ARABIC LETTER KIRGHIZ YU ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06C9 }, unicodeslot=0xFBE2, }, [0xFBE3]={ category="lo", description="ARABIC LETTER KIRGHIZ YU FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06C9 }, unicodeslot=0xFBE3, }, [0xFBE4]={ category="lo", description="ARABIC LETTER E ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06D0 }, unicodeslot=0xFBE4, }, [0xFBE5]={ category="lo", description="ARABIC LETTER E FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06D0 }, unicodeslot=0xFBE5, }, [0xFBE6]={ category="lo", description="ARABIC LETTER E INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06D0 }, unicodeslot=0xFBE6, }, [0xFBE7]={ category="lo", description="ARABIC LETTER E MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06D0 }, unicodeslot=0xFBE7, }, [0xFBE8]={ category="lo", description="ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0649 }, unicodeslot=0xFBE8, }, [0xFBE9]={ category="lo", description="ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0649 }, unicodeslot=0xFBE9, }, [0xFBEA]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x0627 }, unicodeslot=0xFBEA, }, [0xFBEB]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0627 }, unicodeslot=0xFBEB, }, [0xFBEC]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x06D5 }, unicodeslot=0xFBEC, }, [0xFBED]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x06D5 }, unicodeslot=0xFBED, }, [0xFBEE]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x0648 }, unicodeslot=0xFBEE, }, [0xFBEF]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0648 }, unicodeslot=0xFBEF, }, [0xFBF0]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x06C7 }, unicodeslot=0xFBF0, }, [0xFBF1]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x06C7 }, unicodeslot=0xFBF1, }, [0xFBF2]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x06C6 }, unicodeslot=0xFBF2, }, [0xFBF3]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x06C6 }, unicodeslot=0xFBF3, }, [0xFBF4]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x06C8 }, unicodeslot=0xFBF4, }, [0xFBF5]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x06C8 }, unicodeslot=0xFBF5, }, [0xFBF6]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x06D0 }, unicodeslot=0xFBF6, }, [0xFBF7]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x06D0 }, unicodeslot=0xFBF7, }, [0xFBF8]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x06D0 }, unicodeslot=0xFBF8, }, [0xFBF9]={ category="lo", description="ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x0649 }, unicodeslot=0xFBF9, }, [0xFBFA]={ category="lo", description="ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0649 }, unicodeslot=0xFBFA, }, [0xFBFB]={ category="lo", description="ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x0649 }, unicodeslot=0xFBFB, }, [0xFBFC]={ category="lo", description="ARABIC LETTER FARSI YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x06CC }, unicodeslot=0xFBFC, }, [0xFBFD]={ category="lo", description="ARABIC LETTER FARSI YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x06CC }, unicodeslot=0xFBFD, }, [0xFBFE]={ category="lo", description="ARABIC LETTER FARSI YEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x06CC }, unicodeslot=0xFBFE, }, [0xFBFF]={ category="lo", description="ARABIC LETTER FARSI YEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x06CC }, unicodeslot=0xFBFF, }, [0xFC00]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x062C }, unicodeslot=0xFC00, }, [0xFC01]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x062D }, unicodeslot=0xFC01, }, [0xFC02]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x0645 }, unicodeslot=0xFC02, }, [0xFC03]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x0649 }, unicodeslot=0xFC03, }, [0xFC04]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0626, 0x064A }, unicodeslot=0xFC04, }, [0xFC05]={ category="lo", description="ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628, 0x062C }, unicodeslot=0xFC05, }, [0xFC06]={ category="lo", description="ARABIC LIGATURE BEH WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628, 0x062D }, unicodeslot=0xFC06, }, [0xFC07]={ category="lo", description="ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628, 0x062E }, unicodeslot=0xFC07, }, [0xFC08]={ adobename="behmeemisolatedarabic", category="lo", description="ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628, 0x0645 }, unicodeslot=0xFC08, }, [0xFC09]={ category="lo", description="ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628, 0x0649 }, unicodeslot=0xFC09, }, [0xFC0A]={ category="lo", description="ARABIC LIGATURE BEH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628, 0x064A }, unicodeslot=0xFC0A, }, [0xFC0B]={ adobename="tehjeemisolatedarabic", category="lo", description="ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A, 0x062C }, unicodeslot=0xFC0B, }, [0xFC0C]={ adobename="tehhahisolatedarabic", category="lo", description="ARABIC LIGATURE TEH WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A, 0x062D }, unicodeslot=0xFC0C, }, [0xFC0D]={ category="lo", description="ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A, 0x062E }, unicodeslot=0xFC0D, }, [0xFC0E]={ adobename="tehmeemisolatedarabic", category="lo", description="ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A, 0x0645 }, unicodeslot=0xFC0E, }, [0xFC0F]={ category="lo", description="ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A, 0x0649 }, unicodeslot=0xFC0F, }, [0xFC10]={ category="lo", description="ARABIC LIGATURE TEH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A, 0x064A }, unicodeslot=0xFC10, }, [0xFC11]={ category="lo", description="ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062B, 0x062C }, unicodeslot=0xFC11, }, [0xFC12]={ category="lo", description="ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062B, 0x0645 }, unicodeslot=0xFC12, }, [0xFC13]={ category="lo", description="ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062B, 0x0649 }, unicodeslot=0xFC13, }, [0xFC14]={ category="lo", description="ARABIC LIGATURE THEH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062B, 0x064A }, unicodeslot=0xFC14, }, [0xFC15]={ category="lo", description="ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062C, 0x062D }, unicodeslot=0xFC15, }, [0xFC16]={ category="lo", description="ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062C, 0x0645 }, unicodeslot=0xFC16, }, [0xFC17]={ category="lo", description="ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062D, 0x062C }, unicodeslot=0xFC17, }, [0xFC18]={ category="lo", description="ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062D, 0x0645 }, unicodeslot=0xFC18, }, [0xFC19]={ category="lo", description="ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062E, 0x062C }, unicodeslot=0xFC19, }, [0xFC1A]={ category="lo", description="ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062E, 0x062D }, unicodeslot=0xFC1A, }, [0xFC1B]={ category="lo", description="ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062E, 0x0645 }, unicodeslot=0xFC1B, }, [0xFC1C]={ category="lo", description="ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x062C }, unicodeslot=0xFC1C, }, [0xFC1D]={ category="lo", description="ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x062D }, unicodeslot=0xFC1D, }, [0xFC1E]={ category="lo", description="ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x062E }, unicodeslot=0xFC1E, }, [0xFC1F]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x0645 }, unicodeslot=0xFC1F, }, [0xFC20]={ category="lo", description="ARABIC LIGATURE SAD WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x062D }, unicodeslot=0xFC20, }, [0xFC21]={ category="lo", description="ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0645 }, unicodeslot=0xFC21, }, [0xFC22]={ category="lo", description="ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x062C }, unicodeslot=0xFC22, }, [0xFC23]={ category="lo", description="ARABIC LIGATURE DAD WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x062D }, unicodeslot=0xFC23, }, [0xFC24]={ category="lo", description="ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x062E }, unicodeslot=0xFC24, }, [0xFC25]={ category="lo", description="ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x0645 }, unicodeslot=0xFC25, }, [0xFC26]={ category="lo", description="ARABIC LIGATURE TAH WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0637, 0x062D }, unicodeslot=0xFC26, }, [0xFC27]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0637, 0x0645 }, unicodeslot=0xFC27, }, [0xFC28]={ category="lo", description="ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0638, 0x0645 }, unicodeslot=0xFC28, }, [0xFC29]={ category="lo", description="ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0639, 0x062C }, unicodeslot=0xFC29, }, [0xFC2A]={ category="lo", description="ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0639, 0x0645 }, unicodeslot=0xFC2A, }, [0xFC2B]={ category="lo", description="ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x063A, 0x062C }, unicodeslot=0xFC2B, }, [0xFC2C]={ category="lo", description="ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x063A, 0x0645 }, unicodeslot=0xFC2C, }, [0xFC2D]={ category="lo", description="ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641, 0x062C }, unicodeslot=0xFC2D, }, [0xFC2E]={ category="lo", description="ARABIC LIGATURE FEH WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641, 0x062D }, unicodeslot=0xFC2E, }, [0xFC2F]={ category="lo", description="ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641, 0x062E }, unicodeslot=0xFC2F, }, [0xFC30]={ category="lo", description="ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641, 0x0645 }, unicodeslot=0xFC30, }, [0xFC31]={ category="lo", description="ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641, 0x0649 }, unicodeslot=0xFC31, }, [0xFC32]={ category="lo", description="ARABIC LIGATURE FEH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641, 0x064A }, unicodeslot=0xFC32, }, [0xFC33]={ category="lo", description="ARABIC LIGATURE QAF WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0642, 0x062D }, unicodeslot=0xFC33, }, [0xFC34]={ category="lo", description="ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0642, 0x0645 }, unicodeslot=0xFC34, }, [0xFC35]={ category="lo", description="ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0642, 0x0649 }, unicodeslot=0xFC35, }, [0xFC36]={ category="lo", description="ARABIC LIGATURE QAF WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0642, 0x064A }, unicodeslot=0xFC36, }, [0xFC37]={ category="lo", description="ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x0627 }, unicodeslot=0xFC37, }, [0xFC38]={ category="lo", description="ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x062C }, unicodeslot=0xFC38, }, [0xFC39]={ category="lo", description="ARABIC LIGATURE KAF WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x062D }, unicodeslot=0xFC39, }, [0xFC3A]={ category="lo", description="ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x062E }, unicodeslot=0xFC3A, }, [0xFC3B]={ category="lo", description="ARABIC LIGATURE KAF WITH LAM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x0644 }, unicodeslot=0xFC3B, }, [0xFC3C]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x0645 }, unicodeslot=0xFC3C, }, [0xFC3D]={ category="lo", description="ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x0649 }, unicodeslot=0xFC3D, }, [0xFC3E]={ category="lo", description="ARABIC LIGATURE KAF WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643, 0x064A }, unicodeslot=0xFC3E, }, [0xFC3F]={ category="lo", description="ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x062C }, unicodeslot=0xFC3F, }, [0xFC40]={ category="lo", description="ARABIC LIGATURE LAM WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x062D }, unicodeslot=0xFC40, }, [0xFC41]={ category="lo", description="ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x062E }, unicodeslot=0xFC41, }, [0xFC42]={ category="lo", description="ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x0645 }, unicodeslot=0xFC42, }, [0xFC43]={ category="lo", description="ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x0649 }, unicodeslot=0xFC43, }, [0xFC44]={ category="lo", description="ARABIC LIGATURE LAM WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x064A }, unicodeslot=0xFC44, }, [0xFC45]={ category="lo", description="ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x062C }, unicodeslot=0xFC45, }, [0xFC46]={ category="lo", description="ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x062D }, unicodeslot=0xFC46, }, [0xFC47]={ category="lo", description="ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x062E }, unicodeslot=0xFC47, }, [0xFC48]={ adobename="meemmeemisolatedarabic", category="lo", description="ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x0645 }, unicodeslot=0xFC48, }, [0xFC49]={ category="lo", description="ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x0649 }, unicodeslot=0xFC49, }, [0xFC4A]={ category="lo", description="ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x064A }, unicodeslot=0xFC4A, }, [0xFC4B]={ adobename="noonjeemisolatedarabic", category="lo", description="ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646, 0x062C }, unicodeslot=0xFC4B, }, [0xFC4C]={ category="lo", description="ARABIC LIGATURE NOON WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646, 0x062D }, unicodeslot=0xFC4C, }, [0xFC4D]={ category="lo", description="ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646, 0x062E }, unicodeslot=0xFC4D, }, [0xFC4E]={ adobename="noonmeemisolatedarabic", category="lo", description="ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646, 0x0645 }, unicodeslot=0xFC4E, }, [0xFC4F]={ category="lo", description="ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646, 0x0649 }, unicodeslot=0xFC4F, }, [0xFC50]={ category="lo", description="ARABIC LIGATURE NOON WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646, 0x064A }, unicodeslot=0xFC50, }, [0xFC51]={ category="lo", description="ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0647, 0x062C }, unicodeslot=0xFC51, }, [0xFC52]={ category="lo", description="ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0647, 0x0645 }, unicodeslot=0xFC52, }, [0xFC53]={ category="lo", description="ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0647, 0x0649 }, unicodeslot=0xFC53, }, [0xFC54]={ category="lo", description="ARABIC LIGATURE HEH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0647, 0x064A }, unicodeslot=0xFC54, }, [0xFC55]={ category="lo", description="ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A, 0x062C }, unicodeslot=0xFC55, }, [0xFC56]={ category="lo", description="ARABIC LIGATURE YEH WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A, 0x062D }, unicodeslot=0xFC56, }, [0xFC57]={ category="lo", description="ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A, 0x062E }, unicodeslot=0xFC57, }, [0xFC58]={ adobename="yehmeemisolatedarabic", category="lo", description="ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A, 0x0645 }, unicodeslot=0xFC58, }, [0xFC59]={ category="lo", description="ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A, 0x0649 }, unicodeslot=0xFC59, }, [0xFC5A]={ category="lo", description="ARABIC LIGATURE YEH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A, 0x064A }, unicodeslot=0xFC5A, }, [0xFC5B]={ category="lo", description="ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0630, 0x0670 }, unicodeslot=0xFC5B, }, [0xFC5C]={ category="lo", description="ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0631, 0x0670 }, unicodeslot=0xFC5C, }, [0xFC5D]={ category="lo", description="ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0649, 0x0670 }, unicodeslot=0xFC5D, }, [0xFC5E]={ adobename="shaddadammatanarabic", category="lo", description="ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064C, 0x0651 }, unicodeslot=0xFC5E, }, [0xFC5F]={ adobename="shaddakasratanarabic", category="lo", description="ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064D, 0x0651 }, unicodeslot=0xFC5F, }, [0xFC60]={ adobename="shaddafathaarabic", category="lo", description="ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064E, 0x0651 }, unicodeslot=0xFC60, }, [0xFC61]={ adobename="shaddadammaarabic", category="lo", description="ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064F, 0x0651 }, unicodeslot=0xFC61, }, [0xFC62]={ adobename="shaddakasraarabic", category="lo", description="ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x0650, 0x0651 }, unicodeslot=0xFC62, }, [0xFC63]={ category="lo", description="ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x0651, 0x0670 }, unicodeslot=0xFC63, }, [0xFC64]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0631 }, unicodeslot=0xFC64, }, [0xFC65]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0632 }, unicodeslot=0xFC65, }, [0xFC66]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0645 }, unicodeslot=0xFC66, }, [0xFC67]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0646 }, unicodeslot=0xFC67, }, [0xFC68]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x0649 }, unicodeslot=0xFC68, }, [0xFC69]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0626, 0x064A }, unicodeslot=0xFC69, }, [0xFC6A]={ category="lo", description="ARABIC LIGATURE BEH WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x0631 }, unicodeslot=0xFC6A, }, [0xFC6B]={ category="lo", description="ARABIC LIGATURE BEH WITH ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x0632 }, unicodeslot=0xFC6B, }, [0xFC6C]={ category="lo", description="ARABIC LIGATURE BEH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x0645 }, unicodeslot=0xFC6C, }, [0xFC6D]={ adobename="behnoonfinalarabic", category="lo", description="ARABIC LIGATURE BEH WITH NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x0646 }, unicodeslot=0xFC6D, }, [0xFC6E]={ category="lo", description="ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x0649 }, unicodeslot=0xFC6E, }, [0xFC6F]={ category="lo", description="ARABIC LIGATURE BEH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x064A }, unicodeslot=0xFC6F, }, [0xFC70]={ category="lo", description="ARABIC LIGATURE TEH WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0631 }, unicodeslot=0xFC70, }, [0xFC71]={ category="lo", description="ARABIC LIGATURE TEH WITH ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0632 }, unicodeslot=0xFC71, }, [0xFC72]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0645 }, unicodeslot=0xFC72, }, [0xFC73]={ adobename="tehnoonfinalarabic", category="lo", description="ARABIC LIGATURE TEH WITH NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0646 }, unicodeslot=0xFC73, }, [0xFC74]={ category="lo", description="ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0649 }, unicodeslot=0xFC74, }, [0xFC75]={ category="lo", description="ARABIC LIGATURE TEH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x064A }, unicodeslot=0xFC75, }, [0xFC76]={ category="lo", description="ARABIC LIGATURE THEH WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B, 0x0631 }, unicodeslot=0xFC76, }, [0xFC77]={ category="lo", description="ARABIC LIGATURE THEH WITH ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B, 0x0632 }, unicodeslot=0xFC77, }, [0xFC78]={ category="lo", description="ARABIC LIGATURE THEH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B, 0x0645 }, unicodeslot=0xFC78, }, [0xFC79]={ category="lo", description="ARABIC LIGATURE THEH WITH NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B, 0x0646 }, unicodeslot=0xFC79, }, [0xFC7A]={ category="lo", description="ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B, 0x0649 }, unicodeslot=0xFC7A, }, [0xFC7B]={ category="lo", description="ARABIC LIGATURE THEH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B, 0x064A }, unicodeslot=0xFC7B, }, [0xFC7C]={ category="lo", description="ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0641, 0x0649 }, unicodeslot=0xFC7C, }, [0xFC7D]={ category="lo", description="ARABIC LIGATURE FEH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0641, 0x064A }, unicodeslot=0xFC7D, }, [0xFC7E]={ category="lo", description="ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0642, 0x0649 }, unicodeslot=0xFC7E, }, [0xFC7F]={ category="lo", description="ARABIC LIGATURE QAF WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0642, 0x064A }, unicodeslot=0xFC7F, }, [0xFC80]={ category="lo", description="ARABIC LIGATURE KAF WITH ALEF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x0627 }, unicodeslot=0xFC80, }, [0xFC81]={ category="lo", description="ARABIC LIGATURE KAF WITH LAM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x0644 }, unicodeslot=0xFC81, }, [0xFC82]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x0645 }, unicodeslot=0xFC82, }, [0xFC83]={ category="lo", description="ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x0649 }, unicodeslot=0xFC83, }, [0xFC84]={ category="lo", description="ARABIC LIGATURE KAF WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x064A }, unicodeslot=0xFC84, }, [0xFC85]={ category="lo", description="ARABIC LIGATURE LAM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0645 }, unicodeslot=0xFC85, }, [0xFC86]={ category="lo", description="ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0649 }, unicodeslot=0xFC86, }, [0xFC87]={ category="lo", description="ARABIC LIGATURE LAM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x064A }, unicodeslot=0xFC87, }, [0xFC88]={ category="lo", description="ARABIC LIGATURE MEEM WITH ALEF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645, 0x0627 }, unicodeslot=0xFC88, }, [0xFC89]={ category="lo", description="ARABIC LIGATURE MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645, 0x0645 }, unicodeslot=0xFC89, }, [0xFC8A]={ category="lo", description="ARABIC LIGATURE NOON WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0631 }, unicodeslot=0xFC8A, }, [0xFC8B]={ category="lo", description="ARABIC LIGATURE NOON WITH ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0632 }, unicodeslot=0xFC8B, }, [0xFC8C]={ category="lo", description="ARABIC LIGATURE NOON WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0645 }, unicodeslot=0xFC8C, }, [0xFC8D]={ adobename="noonnoonfinalarabic", category="lo", description="ARABIC LIGATURE NOON WITH NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0646 }, unicodeslot=0xFC8D, }, [0xFC8E]={ category="lo", description="ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0649 }, unicodeslot=0xFC8E, }, [0xFC8F]={ category="lo", description="ARABIC LIGATURE NOON WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x064A }, unicodeslot=0xFC8F, }, [0xFC90]={ category="lo", description="ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0649, 0x0670 }, unicodeslot=0xFC90, }, [0xFC91]={ category="lo", description="ARABIC LIGATURE YEH WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0631 }, unicodeslot=0xFC91, }, [0xFC92]={ category="lo", description="ARABIC LIGATURE YEH WITH ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0632 }, unicodeslot=0xFC92, }, [0xFC93]={ category="lo", description="ARABIC LIGATURE YEH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0645 }, unicodeslot=0xFC93, }, [0xFC94]={ adobename="yehnoonfinalarabic", category="lo", description="ARABIC LIGATURE YEH WITH NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0646 }, unicodeslot=0xFC94, }, [0xFC95]={ category="lo", description="ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0649 }, unicodeslot=0xFC95, }, [0xFC96]={ category="lo", description="ARABIC LIGATURE YEH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x064A }, unicodeslot=0xFC96, }, [0xFC97]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x062C }, unicodeslot=0xFC97, }, [0xFC98]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x062D }, unicodeslot=0xFC98, }, [0xFC99]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x062E }, unicodeslot=0xFC99, }, [0xFC9A]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x0645 }, unicodeslot=0xFC9A, }, [0xFC9B]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0626, 0x0647 }, unicodeslot=0xFC9B, }, [0xFC9C]={ category="lo", description="ARABIC LIGATURE BEH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0628, 0x062C }, unicodeslot=0xFC9C, }, [0xFC9D]={ category="lo", description="ARABIC LIGATURE BEH WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0628, 0x062D }, unicodeslot=0xFC9D, }, [0xFC9E]={ category="lo", description="ARABIC LIGATURE BEH WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0628, 0x062E }, unicodeslot=0xFC9E, }, [0xFC9F]={ adobename="behmeeminitialarabic", category="lo", description="ARABIC LIGATURE BEH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0628, 0x0645 }, unicodeslot=0xFC9F, }, [0xFCA0]={ category="lo", description="ARABIC LIGATURE BEH WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0628, 0x0647 }, unicodeslot=0xFCA0, }, [0xFCA1]={ adobename="tehjeeminitialarabic", category="lo", description="ARABIC LIGATURE TEH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062C }, unicodeslot=0xFCA1, }, [0xFCA2]={ adobename="tehhahinitialarabic", category="lo", description="ARABIC LIGATURE TEH WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062D }, unicodeslot=0xFCA2, }, [0xFCA3]={ category="lo", description="ARABIC LIGATURE TEH WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062E }, unicodeslot=0xFCA3, }, [0xFCA4]={ adobename="tehmeeminitialarabic", category="lo", description="ARABIC LIGATURE TEH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x0645 }, unicodeslot=0xFCA4, }, [0xFCA5]={ category="lo", description="ARABIC LIGATURE TEH WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x0647 }, unicodeslot=0xFCA5, }, [0xFCA6]={ category="lo", description="ARABIC LIGATURE THEH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062B, 0x0645 }, unicodeslot=0xFCA6, }, [0xFCA7]={ category="lo", description="ARABIC LIGATURE JEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062C, 0x062D }, unicodeslot=0xFCA7, }, [0xFCA8]={ category="lo", description="ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062C, 0x0645 }, unicodeslot=0xFCA8, }, [0xFCA9]={ category="lo", description="ARABIC LIGATURE HAH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062D, 0x062C }, unicodeslot=0xFCA9, }, [0xFCAA]={ category="lo", description="ARABIC LIGATURE HAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062D, 0x0645 }, unicodeslot=0xFCAA, }, [0xFCAB]={ category="lo", description="ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062E, 0x062C }, unicodeslot=0xFCAB, }, [0xFCAC]={ category="lo", description="ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062E, 0x0645 }, unicodeslot=0xFCAC, }, [0xFCAD]={ category="lo", description="ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x062C }, unicodeslot=0xFCAD, }, [0xFCAE]={ category="lo", description="ARABIC LIGATURE SEEN WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x062D }, unicodeslot=0xFCAE, }, [0xFCAF]={ category="lo", description="ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x062E }, unicodeslot=0xFCAF, }, [0xFCB0]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x0645 }, unicodeslot=0xFCB0, }, [0xFCB1]={ category="lo", description="ARABIC LIGATURE SAD WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0635, 0x062D }, unicodeslot=0xFCB1, }, [0xFCB2]={ category="lo", description="ARABIC LIGATURE SAD WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0635, 0x062E }, unicodeslot=0xFCB2, }, [0xFCB3]={ category="lo", description="ARABIC LIGATURE SAD WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0635, 0x0645 }, unicodeslot=0xFCB3, }, [0xFCB4]={ category="lo", description="ARABIC LIGATURE DAD WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0636, 0x062C }, unicodeslot=0xFCB4, }, [0xFCB5]={ category="lo", description="ARABIC LIGATURE DAD WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0636, 0x062D }, unicodeslot=0xFCB5, }, [0xFCB6]={ category="lo", description="ARABIC LIGATURE DAD WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0636, 0x062E }, unicodeslot=0xFCB6, }, [0xFCB7]={ category="lo", description="ARABIC LIGATURE DAD WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0636, 0x0645 }, unicodeslot=0xFCB7, }, [0xFCB8]={ category="lo", description="ARABIC LIGATURE TAH WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0637, 0x062D }, unicodeslot=0xFCB8, }, [0xFCB9]={ category="lo", description="ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0638, 0x0645 }, unicodeslot=0xFCB9, }, [0xFCBA]={ category="lo", description="ARABIC LIGATURE AIN WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0639, 0x062C }, unicodeslot=0xFCBA, }, [0xFCBB]={ category="lo", description="ARABIC LIGATURE AIN WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0639, 0x0645 }, unicodeslot=0xFCBB, }, [0xFCBC]={ category="lo", description="ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x063A, 0x062C }, unicodeslot=0xFCBC, }, [0xFCBD]={ category="lo", description="ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x063A, 0x0645 }, unicodeslot=0xFCBD, }, [0xFCBE]={ category="lo", description="ARABIC LIGATURE FEH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0641, 0x062C }, unicodeslot=0xFCBE, }, [0xFCBF]={ category="lo", description="ARABIC LIGATURE FEH WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0641, 0x062D }, unicodeslot=0xFCBF, }, [0xFCC0]={ category="lo", description="ARABIC LIGATURE FEH WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0641, 0x062E }, unicodeslot=0xFCC0, }, [0xFCC1]={ category="lo", description="ARABIC LIGATURE FEH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0641, 0x0645 }, unicodeslot=0xFCC1, }, [0xFCC2]={ category="lo", description="ARABIC LIGATURE QAF WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0642, 0x062D }, unicodeslot=0xFCC2, }, [0xFCC3]={ category="lo", description="ARABIC LIGATURE QAF WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0642, 0x0645 }, unicodeslot=0xFCC3, }, [0xFCC4]={ category="lo", description="ARABIC LIGATURE KAF WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643, 0x062C }, unicodeslot=0xFCC4, }, [0xFCC5]={ category="lo", description="ARABIC LIGATURE KAF WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643, 0x062D }, unicodeslot=0xFCC5, }, [0xFCC6]={ category="lo", description="ARABIC LIGATURE KAF WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643, 0x062E }, unicodeslot=0xFCC6, }, [0xFCC7]={ category="lo", description="ARABIC LIGATURE KAF WITH LAM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643, 0x0644 }, unicodeslot=0xFCC7, }, [0xFCC8]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643, 0x0645 }, unicodeslot=0xFCC8, }, [0xFCC9]={ adobename="lamjeeminitialarabic", category="lo", description="ARABIC LIGATURE LAM WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062C }, unicodeslot=0xFCC9, }, [0xFCCA]={ adobename="lamhahinitialarabic", category="lo", description="ARABIC LIGATURE LAM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062D }, unicodeslot=0xFCCA, }, [0xFCCB]={ adobename="lamkhahinitialarabic", category="lo", description="ARABIC LIGATURE LAM WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062E }, unicodeslot=0xFCCB, }, [0xFCCC]={ adobename="lammeeminitialarabic", category="lo", description="ARABIC LIGATURE LAM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x0645 }, unicodeslot=0xFCCC, }, [0xFCCD]={ category="lo", description="ARABIC LIGATURE LAM WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x0647 }, unicodeslot=0xFCCD, }, [0xFCCE]={ category="lo", description="ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062C }, unicodeslot=0xFCCE, }, [0xFCCF]={ category="lo", description="ARABIC LIGATURE MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062D }, unicodeslot=0xFCCF, }, [0xFCD0]={ category="lo", description="ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062E }, unicodeslot=0xFCD0, }, [0xFCD1]={ adobename="meemmeeminitialarabic", category="lo", description="ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x0645 }, unicodeslot=0xFCD1, }, [0xFCD2]={ adobename="noonjeeminitialarabic", category="lo", description="ARABIC LIGATURE NOON WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x062C }, unicodeslot=0xFCD2, }, [0xFCD3]={ category="lo", description="ARABIC LIGATURE NOON WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x062D }, unicodeslot=0xFCD3, }, [0xFCD4]={ category="lo", description="ARABIC LIGATURE NOON WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x062E }, unicodeslot=0xFCD4, }, [0xFCD5]={ adobename="noonmeeminitialarabic", category="lo", description="ARABIC LIGATURE NOON WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x0645 }, unicodeslot=0xFCD5, }, [0xFCD6]={ category="lo", description="ARABIC LIGATURE NOON WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x0647 }, unicodeslot=0xFCD6, }, [0xFCD7]={ category="lo", description="ARABIC LIGATURE HEH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0647, 0x062C }, unicodeslot=0xFCD7, }, [0xFCD8]={ category="lo", description="ARABIC LIGATURE HEH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0647, 0x0645 }, unicodeslot=0xFCD8, }, [0xFCD9]={ category="lo", description="ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0647, 0x0670 }, unicodeslot=0xFCD9, }, [0xFCDA]={ category="lo", description="ARABIC LIGATURE YEH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A, 0x062C }, unicodeslot=0xFCDA, }, [0xFCDB]={ category="lo", description="ARABIC LIGATURE YEH WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A, 0x062D }, unicodeslot=0xFCDB, }, [0xFCDC]={ category="lo", description="ARABIC LIGATURE YEH WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A, 0x062E }, unicodeslot=0xFCDC, }, [0xFCDD]={ adobename="yehmeeminitialarabic", category="lo", description="ARABIC LIGATURE YEH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A, 0x0645 }, unicodeslot=0xFCDD, }, [0xFCDE]={ category="lo", description="ARABIC LIGATURE YEH WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A, 0x0647 }, unicodeslot=0xFCDE, }, [0xFCDF]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0626, 0x0645 }, unicodeslot=0xFCDF, }, [0xFCE0]={ category="lo", description="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0626, 0x0647 }, unicodeslot=0xFCE0, }, [0xFCE1]={ category="lo", description="ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0628, 0x0645 }, unicodeslot=0xFCE1, }, [0xFCE2]={ category="lo", description="ARABIC LIGATURE BEH WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0628, 0x0647 }, unicodeslot=0xFCE2, }, [0xFCE3]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062A, 0x0645 }, unicodeslot=0xFCE3, }, [0xFCE4]={ category="lo", description="ARABIC LIGATURE TEH WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062A, 0x0647 }, unicodeslot=0xFCE4, }, [0xFCE5]={ category="lo", description="ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062B, 0x0645 }, unicodeslot=0xFCE5, }, [0xFCE6]={ category="lo", description="ARABIC LIGATURE THEH WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062B, 0x0647 }, unicodeslot=0xFCE6, }, [0xFCE7]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0633, 0x0645 }, unicodeslot=0xFCE7, }, [0xFCE8]={ category="lo", description="ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0633, 0x0647 }, unicodeslot=0xFCE8, }, [0xFCE9]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0634, 0x0645 }, unicodeslot=0xFCE9, }, [0xFCEA]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0634, 0x0647 }, unicodeslot=0xFCEA, }, [0xFCEB]={ category="lo", description="ARABIC LIGATURE KAF WITH LAM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0643, 0x0644 }, unicodeslot=0xFCEB, }, [0xFCEC]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0643, 0x0645 }, unicodeslot=0xFCEC, }, [0xFCED]={ category="lo", description="ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0644, 0x0645 }, unicodeslot=0xFCED, }, [0xFCEE]={ category="lo", description="ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0646, 0x0645 }, unicodeslot=0xFCEE, }, [0xFCEF]={ category="lo", description="ARABIC LIGATURE NOON WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0646, 0x0647 }, unicodeslot=0xFCEF, }, [0xFCF0]={ category="lo", description="ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x064A, 0x0645 }, unicodeslot=0xFCF0, }, [0xFCF1]={ category="lo", description="ARABIC LIGATURE YEH WITH HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x064A, 0x0647 }, unicodeslot=0xFCF1, }, [0xFCF2]={ category="lo", description="ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x064E, 0x0651 }, unicodeslot=0xFCF2, }, [0xFCF3]={ category="lo", description="ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x064F, 0x0651 }, unicodeslot=0xFCF3, }, [0xFCF4]={ category="lo", description="ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x0650, 0x0651 }, unicodeslot=0xFCF4, }, [0xFCF5]={ category="lo", description="ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0637, 0x0649 }, unicodeslot=0xFCF5, }, [0xFCF6]={ category="lo", description="ARABIC LIGATURE TAH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0637, 0x064A }, unicodeslot=0xFCF6, }, [0xFCF7]={ category="lo", description="ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0639, 0x0649 }, unicodeslot=0xFCF7, }, [0xFCF8]={ category="lo", description="ARABIC LIGATURE AIN WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0639, 0x064A }, unicodeslot=0xFCF8, }, [0xFCF9]={ category="lo", description="ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x063A, 0x0649 }, unicodeslot=0xFCF9, }, [0xFCFA]={ category="lo", description="ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x063A, 0x064A }, unicodeslot=0xFCFA, }, [0xFCFB]={ category="lo", description="ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x0649 }, unicodeslot=0xFCFB, }, [0xFCFC]={ category="lo", description="ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x064A }, unicodeslot=0xFCFC, }, [0xFCFD]={ category="lo", description="ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x0649 }, unicodeslot=0xFCFD, }, [0xFCFE]={ category="lo", description="ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x064A }, unicodeslot=0xFCFE, }, [0xFCFF]={ category="lo", description="ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062D, 0x0649 }, unicodeslot=0xFCFF, }, [0xFD00]={ category="lo", description="ARABIC LIGATURE HAH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062D, 0x064A }, unicodeslot=0xFD00, }, [0xFD01]={ category="lo", description="ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062C, 0x0649 }, unicodeslot=0xFD01, }, [0xFD02]={ category="lo", description="ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062C, 0x064A }, unicodeslot=0xFD02, }, [0xFD03]={ category="lo", description="ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062E, 0x0649 }, unicodeslot=0xFD03, }, [0xFD04]={ category="lo", description="ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062E, 0x064A }, unicodeslot=0xFD04, }, [0xFD05]={ category="lo", description="ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0649 }, unicodeslot=0xFD05, }, [0xFD06]={ category="lo", description="ARABIC LIGATURE SAD WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x064A }, unicodeslot=0xFD06, }, [0xFD07]={ category="lo", description="ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x0649 }, unicodeslot=0xFD07, }, [0xFD08]={ category="lo", description="ARABIC LIGATURE DAD WITH YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x064A }, unicodeslot=0xFD08, }, [0xFD09]={ category="lo", description="ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x062C }, unicodeslot=0xFD09, }, [0xFD0A]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x062D }, unicodeslot=0xFD0A, }, [0xFD0B]={ category="lo", description="ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x062E }, unicodeslot=0xFD0B, }, [0xFD0C]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x0645 }, unicodeslot=0xFD0C, }, [0xFD0D]={ category="lo", description="ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634, 0x0631 }, unicodeslot=0xFD0D, }, [0xFD0E]={ category="lo", description="ARABIC LIGATURE SEEN WITH REH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633, 0x0631 }, unicodeslot=0xFD0E, }, [0xFD0F]={ category="lo", description="ARABIC LIGATURE SAD WITH REH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0631 }, unicodeslot=0xFD0F, }, [0xFD10]={ category="lo", description="ARABIC LIGATURE DAD WITH REH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636, 0x0631 }, unicodeslot=0xFD10, }, [0xFD11]={ category="lo", description="ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0637, 0x0649 }, unicodeslot=0xFD11, }, [0xFD12]={ category="lo", description="ARABIC LIGATURE TAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0637, 0x064A }, unicodeslot=0xFD12, }, [0xFD13]={ category="lo", description="ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639, 0x0649 }, unicodeslot=0xFD13, }, [0xFD14]={ category="lo", description="ARABIC LIGATURE AIN WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639, 0x064A }, unicodeslot=0xFD14, }, [0xFD15]={ category="lo", description="ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x063A, 0x0649 }, unicodeslot=0xFD15, }, [0xFD16]={ category="lo", description="ARABIC LIGATURE GHAIN WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x063A, 0x064A }, unicodeslot=0xFD16, }, [0xFD17]={ category="lo", description="ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x0649 }, unicodeslot=0xFD17, }, [0xFD18]={ category="lo", description="ARABIC LIGATURE SEEN WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x064A }, unicodeslot=0xFD18, }, [0xFD19]={ category="lo", description="ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x0649 }, unicodeslot=0xFD19, }, [0xFD1A]={ category="lo", description="ARABIC LIGATURE SHEEN WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x064A }, unicodeslot=0xFD1A, }, [0xFD1B]={ category="lo", description="ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062D, 0x0649 }, unicodeslot=0xFD1B, }, [0xFD1C]={ category="lo", description="ARABIC LIGATURE HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062D, 0x064A }, unicodeslot=0xFD1C, }, [0xFD1D]={ category="lo", description="ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x0649 }, unicodeslot=0xFD1D, }, [0xFD1E]={ category="lo", description="ARABIC LIGATURE JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x064A }, unicodeslot=0xFD1E, }, [0xFD1F]={ category="lo", description="ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062E, 0x0649 }, unicodeslot=0xFD1F, }, [0xFD20]={ category="lo", description="ARABIC LIGATURE KHAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062E, 0x064A }, unicodeslot=0xFD20, }, [0xFD21]={ category="lo", description="ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635, 0x0649 }, unicodeslot=0xFD21, }, [0xFD22]={ category="lo", description="ARABIC LIGATURE SAD WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635, 0x064A }, unicodeslot=0xFD22, }, [0xFD23]={ category="lo", description="ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636, 0x0649 }, unicodeslot=0xFD23, }, [0xFD24]={ category="lo", description="ARABIC LIGATURE DAD WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636, 0x064A }, unicodeslot=0xFD24, }, [0xFD25]={ category="lo", description="ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x062C }, unicodeslot=0xFD25, }, [0xFD26]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x062D }, unicodeslot=0xFD26, }, [0xFD27]={ category="lo", description="ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x062E }, unicodeslot=0xFD27, }, [0xFD28]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x0645 }, unicodeslot=0xFD28, }, [0xFD29]={ category="lo", description="ARABIC LIGATURE SHEEN WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x0631 }, unicodeslot=0xFD29, }, [0xFD2A]={ category="lo", description="ARABIC LIGATURE SEEN WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x0631 }, unicodeslot=0xFD2A, }, [0xFD2B]={ category="lo", description="ARABIC LIGATURE SAD WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635, 0x0631 }, unicodeslot=0xFD2B, }, [0xFD2C]={ category="lo", description="ARABIC LIGATURE DAD WITH REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636, 0x0631 }, unicodeslot=0xFD2C, }, [0xFD2D]={ category="lo", description="ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x062C }, unicodeslot=0xFD2D, }, [0xFD2E]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x062D }, unicodeslot=0xFD2E, }, [0xFD2F]={ category="lo", description="ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x062E }, unicodeslot=0xFD2F, }, [0xFD30]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x0645 }, unicodeslot=0xFD30, }, [0xFD31]={ category="lo", description="ARABIC LIGATURE SEEN WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x0647 }, unicodeslot=0xFD31, }, [0xFD32]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x0647 }, unicodeslot=0xFD32, }, [0xFD33]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0637, 0x0645 }, unicodeslot=0xFD33, }, [0xFD34]={ category="lo", description="ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0633, 0x062C }, unicodeslot=0xFD34, }, [0xFD35]={ category="lo", description="ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0633, 0x062D }, unicodeslot=0xFD35, }, [0xFD36]={ category="lo", description="ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0633, 0x062E }, unicodeslot=0xFD36, }, [0xFD37]={ category="lo", description="ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0634, 0x062C }, unicodeslot=0xFD37, }, [0xFD38]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0634, 0x062D }, unicodeslot=0xFD38, }, [0xFD39]={ category="lo", description="ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0634, 0x062E }, unicodeslot=0xFD39, }, [0xFD3A]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0637, 0x0645 }, unicodeslot=0xFD3A, }, [0xFD3B]={ category="lo", description="ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0638, 0x0645 }, unicodeslot=0xFD3B, }, [0xFD3C]={ category="lo", description="ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0627, 0x064B }, unicodeslot=0xFD3C, }, [0xFD3D]={ category="lo", description="ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0627, 0x064B }, unicodeslot=0xFD3D, }, [0xFD3E]={ adobename="parenleftaltonearabic", category="ps", description="ORNATE LEFT PARENTHESIS", direction="on", linebreak="op", unicodeslot=0xFD3E, }, [0xFD3F]={ adobename="parenrightaltonearabic", category="pe", description="ORNATE RIGHT PARENTHESIS", direction="on", linebreak="cl", unicodeslot=0xFD3F, }, [0xFD50]={ category="lo", description="ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062C, 0x0645 }, unicodeslot=0xFD50, }, [0xFD51]={ category="lo", description="ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x062D, 0x062C }, unicodeslot=0xFD51, }, [0xFD52]={ category="lo", description="ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062D, 0x062C }, unicodeslot=0xFD52, }, [0xFD53]={ category="lo", description="ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062D, 0x0645 }, unicodeslot=0xFD53, }, [0xFD54]={ category="lo", description="ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x062E, 0x0645 }, unicodeslot=0xFD54, }, [0xFD55]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x0645, 0x062C }, unicodeslot=0xFD55, }, [0xFD56]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x0645, 0x062D }, unicodeslot=0xFD56, }, [0xFD57]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A, 0x0645, 0x062E }, unicodeslot=0xFD57, }, [0xFD58]={ category="lo", description="ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x0645, 0x062D }, unicodeslot=0xFD58, }, [0xFD59]={ category="lo", description="ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062C, 0x0645, 0x062D }, unicodeslot=0xFD59, }, [0xFD5A]={ category="lo", description="ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062D, 0x0645, 0x064A }, unicodeslot=0xFD5A, }, [0xFD5B]={ category="lo", description="ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062D, 0x0645, 0x0649 }, unicodeslot=0xFD5B, }, [0xFD5C]={ category="lo", description="ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x062D, 0x062C }, unicodeslot=0xFD5C, }, [0xFD5D]={ category="lo", description="ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x062C, 0x062D }, unicodeslot=0xFD5D, }, [0xFD5E]={ category="lo", description="ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x062C, 0x0649 }, unicodeslot=0xFD5E, }, [0xFD5F]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x0645, 0x062D }, unicodeslot=0xFD5F, }, [0xFD60]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x0645, 0x062D }, unicodeslot=0xFD60, }, [0xFD61]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x0645, 0x062C }, unicodeslot=0xFD61, }, [0xFD62]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x0645, 0x0645 }, unicodeslot=0xFD62, }, [0xFD63]={ category="lo", description="ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633, 0x0645, 0x0645 }, unicodeslot=0xFD63, }, [0xFD64]={ category="lo", description="ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635, 0x062D, 0x062D }, unicodeslot=0xFD64, }, [0xFD65]={ category="lo", description="ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0635, 0x062D, 0x062D }, unicodeslot=0xFD65, }, [0xFD66]={ category="lo", description="ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635, 0x0645, 0x0645 }, unicodeslot=0xFD66, }, [0xFD67]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x062D, 0x0645 }, unicodeslot=0xFD67, }, [0xFD68]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x062D, 0x0645 }, unicodeslot=0xFD68, }, [0xFD69]={ category="lo", description="ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x062C, 0x064A }, unicodeslot=0xFD69, }, [0xFD6A]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x0645, 0x062E }, unicodeslot=0xFD6A, }, [0xFD6B]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x0645, 0x062E }, unicodeslot=0xFD6B, }, [0xFD6C]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x0645, 0x0645 }, unicodeslot=0xFD6C, }, [0xFD6D]={ category="lo", description="ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634, 0x0645, 0x0645 }, unicodeslot=0xFD6D, }, [0xFD6E]={ category="lo", description="ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636, 0x062D, 0x0649 }, unicodeslot=0xFD6E, }, [0xFD6F]={ category="lo", description="ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636, 0x062E, 0x0645 }, unicodeslot=0xFD6F, }, [0xFD70]={ category="lo", description="ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0636, 0x062E, 0x0645 }, unicodeslot=0xFD70, }, [0xFD71]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0637, 0x0645, 0x062D }, unicodeslot=0xFD71, }, [0xFD72]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0637, 0x0645, 0x062D }, unicodeslot=0xFD72, }, [0xFD73]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0637, 0x0645, 0x0645 }, unicodeslot=0xFD73, }, [0xFD74]={ category="lo", description="ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0637, 0x0645, 0x064A }, unicodeslot=0xFD74, }, [0xFD75]={ category="lo", description="ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639, 0x062C, 0x0645 }, unicodeslot=0xFD75, }, [0xFD76]={ category="lo", description="ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639, 0x0645, 0x0645 }, unicodeslot=0xFD76, }, [0xFD77]={ category="lo", description="ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0639, 0x0645, 0x0645 }, unicodeslot=0xFD77, }, [0xFD78]={ category="lo", description="ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639, 0x0645, 0x0649 }, unicodeslot=0xFD78, }, [0xFD79]={ category="lo", description="ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x063A, 0x0645, 0x0645 }, unicodeslot=0xFD79, }, [0xFD7A]={ category="lo", description="ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x063A, 0x0645, 0x064A }, unicodeslot=0xFD7A, }, [0xFD7B]={ category="lo", description="ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x063A, 0x0645, 0x0649 }, unicodeslot=0xFD7B, }, [0xFD7C]={ category="lo", description="ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0641, 0x062E, 0x0645 }, unicodeslot=0xFD7C, }, [0xFD7D]={ category="lo", description="ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0641, 0x062E, 0x0645 }, unicodeslot=0xFD7D, }, [0xFD7E]={ category="lo", description="ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0642, 0x0645, 0x062D }, unicodeslot=0xFD7E, }, [0xFD7F]={ category="lo", description="ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0642, 0x0645, 0x0645 }, unicodeslot=0xFD7F, }, [0xFD80]={ category="lo", description="ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062D, 0x0645 }, unicodeslot=0xFD80, }, [0xFD81]={ category="lo", description="ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062D, 0x064A }, unicodeslot=0xFD81, }, [0xFD82]={ category="lo", description="ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062D, 0x0649 }, unicodeslot=0xFD82, }, [0xFD83]={ category="lo", description="ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062C, 0x062C }, unicodeslot=0xFD83, }, [0xFD84]={ category="lo", description="ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062C, 0x062C }, unicodeslot=0xFD84, }, [0xFD85]={ category="lo", description="ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062E, 0x0645 }, unicodeslot=0xFD85, }, [0xFD86]={ category="lo", description="ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062E, 0x0645 }, unicodeslot=0xFD86, }, [0xFD87]={ category="lo", description="ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0645, 0x062D }, unicodeslot=0xFD87, }, [0xFD88]={ adobename="lammeemhahinitialarabic", category="lo", description="ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x0645, 0x062D }, unicodeslot=0xFD88, }, [0xFD89]={ category="lo", description="ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062D, 0x062C }, unicodeslot=0xFD89, }, [0xFD8A]={ category="lo", description="ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062D, 0x0645 }, unicodeslot=0xFD8A, }, [0xFD8B]={ category="lo", description="ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645, 0x062D, 0x064A }, unicodeslot=0xFD8B, }, [0xFD8C]={ category="lo", description="ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062C, 0x062D }, unicodeslot=0xFD8C, }, [0xFD8D]={ category="lo", description="ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062C, 0x0645 }, unicodeslot=0xFD8D, }, [0xFD8E]={ category="lo", description="ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062E, 0x062C }, unicodeslot=0xFD8E, }, [0xFD8F]={ category="lo", description="ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062E, 0x0645 }, unicodeslot=0xFD8F, }, [0xFD92]={ category="lo", description="ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645, 0x062C, 0x062E }, unicodeslot=0xFD92, }, [0xFD93]={ category="lo", description="ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0647, 0x0645, 0x062C }, unicodeslot=0xFD93, }, [0xFD94]={ category="lo", description="ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0647, 0x0645, 0x0645 }, unicodeslot=0xFD94, }, [0xFD95]={ category="lo", description="ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x062D, 0x0645 }, unicodeslot=0xFD95, }, [0xFD96]={ category="lo", description="ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x062D, 0x0649 }, unicodeslot=0xFD96, }, [0xFD97]={ category="lo", description="ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x062C, 0x0645 }, unicodeslot=0xFD97, }, [0xFD98]={ category="lo", description="ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x062C, 0x0645 }, unicodeslot=0xFD98, }, [0xFD99]={ category="lo", description="ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x062C, 0x0649 }, unicodeslot=0xFD99, }, [0xFD9A]={ category="lo", description="ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0645, 0x064A }, unicodeslot=0xFD9A, }, [0xFD9B]={ category="lo", description="ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x0645, 0x0649 }, unicodeslot=0xFD9B, }, [0xFD9C]={ category="lo", description="ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0645, 0x0645 }, unicodeslot=0xFD9C, }, [0xFD9D]={ category="lo", description="ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A, 0x0645, 0x0645 }, unicodeslot=0xFD9D, }, [0xFD9E]={ category="lo", description="ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x062E, 0x064A }, unicodeslot=0xFD9E, }, [0xFD9F]={ category="lo", description="ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x062C, 0x064A }, unicodeslot=0xFD9F, }, [0xFDA0]={ category="lo", description="ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x062C, 0x0649 }, unicodeslot=0xFDA0, }, [0xFDA1]={ category="lo", description="ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x062E, 0x064A }, unicodeslot=0xFDA1, }, [0xFDA2]={ category="lo", description="ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x062E, 0x0649 }, unicodeslot=0xFDA2, }, [0xFDA3]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0645, 0x064A }, unicodeslot=0xFDA3, }, [0xFDA4]={ category="lo", description="ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A, 0x0645, 0x0649 }, unicodeslot=0xFDA4, }, [0xFDA5]={ category="lo", description="ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x0645, 0x064A }, unicodeslot=0xFDA5, }, [0xFDA6]={ category="lo", description="ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x062D, 0x0649 }, unicodeslot=0xFDA6, }, [0xFDA7]={ category="lo", description="ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x0645, 0x0649 }, unicodeslot=0xFDA7, }, [0xFDA8]={ category="lo", description="ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x062E, 0x0649 }, unicodeslot=0xFDA8, }, [0xFDA9]={ category="lo", description="ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635, 0x062D, 0x064A }, unicodeslot=0xFDA9, }, [0xFDAA]={ category="lo", description="ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634, 0x062D, 0x064A }, unicodeslot=0xFDAA, }, [0xFDAB]={ category="lo", description="ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636, 0x062D, 0x064A }, unicodeslot=0xFDAB, }, [0xFDAC]={ category="lo", description="ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062C, 0x064A }, unicodeslot=0xFDAC, }, [0xFDAD]={ category="lo", description="ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0645, 0x064A }, unicodeslot=0xFDAD, }, [0xFDAE]={ category="lo", description="ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x062D, 0x064A }, unicodeslot=0xFDAE, }, [0xFDAF]={ category="lo", description="ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x062C, 0x064A }, unicodeslot=0xFDAF, }, [0xFDB0]={ category="lo", description="ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A, 0x0645, 0x064A }, unicodeslot=0xFDB0, }, [0xFDB1]={ category="lo", description="ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645, 0x0645, 0x064A }, unicodeslot=0xFDB1, }, [0xFDB2]={ category="lo", description="ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0642, 0x0645, 0x064A }, unicodeslot=0xFDB2, }, [0xFDB3]={ category="lo", description="ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x062D, 0x064A }, unicodeslot=0xFDB3, }, [0xFDB4]={ category="lo", description="ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0642, 0x0645, 0x062D }, unicodeslot=0xFDB4, }, [0xFDB5]={ category="lo", description="ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062D, 0x0645 }, unicodeslot=0xFDB5, }, [0xFDB6]={ category="lo", description="ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639, 0x0645, 0x064A }, unicodeslot=0xFDB6, }, [0xFDB7]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x0645, 0x064A }, unicodeslot=0xFDB7, }, [0xFDB8]={ category="lo", description="ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646, 0x062C, 0x062D }, unicodeslot=0xFDB8, }, [0xFDB9]={ category="lo", description="ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645, 0x062E, 0x064A }, unicodeslot=0xFDB9, }, [0xFDBA]={ category="lo", description="ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644, 0x062C, 0x0645 }, unicodeslot=0xFDBA, }, [0xFDBB]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643, 0x0645, 0x0645 }, unicodeslot=0xFDBB, }, [0xFDBC]={ category="lo", description="ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x062C, 0x0645 }, unicodeslot=0xFDBC, }, [0xFDBD]={ category="lo", description="ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x062C, 0x062D }, unicodeslot=0xFDBD, }, [0xFDBE]={ category="lo", description="ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C, 0x062D, 0x064A }, unicodeslot=0xFDBE, }, [0xFDBF]={ category="lo", description="ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062D, 0x062C, 0x064A }, unicodeslot=0xFDBF, }, [0xFDC0]={ category="lo", description="ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645, 0x062C, 0x064A }, unicodeslot=0xFDC0, }, [0xFDC1]={ category="lo", description="ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0641, 0x0645, 0x064A }, unicodeslot=0xFDC1, }, [0xFDC2]={ category="lo", description="ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628, 0x062D, 0x064A }, unicodeslot=0xFDC2, }, [0xFDC3]={ category="lo", description="ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643, 0x0645, 0x0645 }, unicodeslot=0xFDC3, }, [0xFDC4]={ category="lo", description="ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0639, 0x062C, 0x0645 }, unicodeslot=0xFDC4, }, [0xFDC5]={ category="lo", description="ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0635, 0x0645, 0x0645 }, unicodeslot=0xFDC5, }, [0xFDC6]={ category="lo", description="ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633, 0x062E, 0x064A }, unicodeslot=0xFDC6, }, [0xFDC7]={ category="lo", description="ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646, 0x062C, 0x064A }, unicodeslot=0xFDC7, }, [0xFDF0]={ category="lo", description="ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0644, 0x06D2 }, unicodeslot=0xFDF0, }, [0xFDF1]={ category="lo", description="ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0642, 0x0644, 0x06D2 }, unicodeslot=0xFDF1, }, [0xFDF2]={ adobename="lamlamhehisolatedarabic", category="lo", description="ARABIC LIGATURE ALLAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0627, 0x0644, 0x0644, 0x0647 }, unicodeslot=0xFDF2, }, [0xFDF3]={ category="lo", description="ARABIC LIGATURE AKBAR ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0627, 0x0643, 0x0628, 0x0631 }, unicodeslot=0xFDF3, }, [0xFDF4]={ category="lo", description="ARABIC LIGATURE MOHAMMAD ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645, 0x062D, 0x0645, 0x062F }, unicodeslot=0xFDF4, }, [0xFDF5]={ category="lo", description="ARABIC LIGATURE SALAM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0644, 0x0639, 0x0645 }, unicodeslot=0xFDF5, }, [0xFDF6]={ category="lo", description="ARABIC LIGATURE RASOUL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0631, 0x0633, 0x0648, 0x0644 }, unicodeslot=0xFDF6, }, [0xFDF7]={ category="lo", description="ARABIC LIGATURE ALAYHE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0639, 0x0644, 0x064A, 0x0647 }, unicodeslot=0xFDF7, }, [0xFDF8]={ category="lo", description="ARABIC LIGATURE WASALLAM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0648, 0x0633, 0x0644, 0x0645 }, unicodeslot=0xFDF8, }, [0xFDF9]={ category="lo", description="ARABIC LIGATURE SALLA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0644, 0x0649 }, unicodeslot=0xFDF9, }, [0xFDFA]={ adobename="sallallahoualayhewasallamarabic", category="lo", description="ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM", direction="al", linebreak="al", specials={ "isolated", 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 }, unicodeslot=0xFDFA, }, [0xFDFB]={ category="lo", description="ARABIC LIGATURE JALLAJALALOUHOU", direction="al", linebreak="al", specials={ "isolated", 0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647 }, unicodeslot=0xFDFB, }, [0xFDFC]={ category="sc", description="RIAL SIGN", direction="al", linebreak="po", specials={ "isolated", 0x0631, 0x06CC, 0x0627, 0x0644 }, unicodeslot=0xFDFC, }, [0xFDFD]={ category="so", description="ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM", direction="on", linebreak="al", unicodeslot=0xFDFD, }, [0xFE00]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0001", direction="nsm", linebreak="cm", unicodeslot=0xFE00, }, [0xFE01]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0002", direction="nsm", linebreak="cm", unicodeslot=0xFE01, }, [0xFE02]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0003", direction="nsm", linebreak="cm", unicodeslot=0xFE02, }, [0xFE03]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0004", direction="nsm", linebreak="cm", unicodeslot=0xFE03, }, [0xFE04]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0005", direction="nsm", linebreak="cm", unicodeslot=0xFE04, }, [0xFE05]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0006", direction="nsm", linebreak="cm", unicodeslot=0xFE05, }, [0xFE06]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0007", direction="nsm", linebreak="cm", unicodeslot=0xFE06, }, [0xFE07]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0008", direction="nsm", linebreak="cm", unicodeslot=0xFE07, }, [0xFE08]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0009", direction="nsm", linebreak="cm", unicodeslot=0xFE08, }, [0xFE09]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x000A", direction="nsm", linebreak="cm", unicodeslot=0xFE09, }, [0xFE0A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x000B", direction="nsm", linebreak="cm", unicodeslot=0xFE0A, }, [0xFE0B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x000C", direction="nsm", linebreak="cm", unicodeslot=0xFE0B, }, [0xFE0C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x000D", direction="nsm", linebreak="cm", unicodeslot=0xFE0C, }, [0xFE0D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x000E", direction="nsm", linebreak="cm", unicodeslot=0xFE0D, }, [0xFE0E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x000F", direction="nsm", linebreak="cm", unicodeslot=0xFE0E, }, [0xFE0F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0010", direction="nsm", linebreak="cm", unicodeslot=0xFE0F, }, [0xFE10]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL COMMA", direction="on", linebreak="is", specials={ "vertical", 0x002C }, unicodeslot=0xFE10, }, [0xFE11]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA", direction="on", linebreak="cl", specials={ "vertical", 0x3001 }, unicodeslot=0xFE11, }, [0xFE12]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP", direction="on", linebreak="cl", specials={ "vertical", 0x3002 }, unicodeslot=0xFE12, }, [0xFE13]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL COLON", direction="on", linebreak="is", specials={ "vertical", 0x003A }, unicodeslot=0xFE13, }, [0xFE14]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL SEMICOLON", direction="on", linebreak="is", specials={ "vertical", 0x003B }, unicodeslot=0xFE14, }, [0xFE15]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK", direction="on", linebreak="ex", specials={ "vertical", 0x0021 }, unicodeslot=0xFE15, }, [0xFE16]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL QUESTION MARK", direction="on", linebreak="ex", specials={ "vertical", 0x003F }, unicodeslot=0xFE16, }, [0xFE17]={ category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x3016 }, unicodeslot=0xFE17, }, [0xFE18]={ category="pe", cjkwd="w", comment="corrected description: brakcet", description="PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x3017 }, unicodeslot=0xFE18, }, [0xFE19]={ category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS", direction="on", linebreak="in", specials={ "vertical", 0x2026 }, unicodeslot=0xFE19, }, [0xFE20]={ category="mn", description="COMBINING LIGATURE LEFT HALF", direction="nsm", linebreak="cm", unicodeslot=0xFE20, }, [0xFE21]={ category="mn", description="COMBINING LIGATURE RIGHT HALF", direction="nsm", linebreak="cm", unicodeslot=0xFE21, }, [0xFE22]={ category="mn", description="COMBINING DOUBLE TILDE LEFT HALF", direction="nsm", linebreak="cm", unicodeslot=0xFE22, }, [0xFE23]={ category="mn", description="COMBINING DOUBLE TILDE RIGHT HALF", direction="nsm", linebreak="cm", unicodeslot=0xFE23, }, [0xFE24]={ category="mn", description="COMBINING MACRON LEFT HALF", direction="nsm", linebreak="cm", unicodeslot=0xFE24, }, [0xFE25]={ category="mn", description="COMBINING MACRON RIGHT HALF", direction="nsm", linebreak="cm", unicodeslot=0xFE25, }, [0xFE26]={ category="mn", description="COMBINING CONJOINING MACRON", direction="nsm", linebreak="cm", unicodeslot=0xFE26, }, [0xFE30]={ adobename="twodotleadervertical", category="po", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL TWO DOT LEADER", direction="on", linebreak="id", specials={ "vertical", 0x2025 }, unicodeslot=0xFE30, }, [0xFE31]={ adobename="emdashvertical", category="pd", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL EM DASH", direction="on", linebreak="id", specials={ "vertical", 0x2014 }, unicodeslot=0xFE31, }, [0xFE32]={ adobename="endashvertical", category="pd", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL EN DASH", direction="on", linebreak="id", specials={ "vertical", 0x2013 }, unicodeslot=0xFE32, }, [0xFE33]={ adobename="underscorevertical", category="pc", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LOW LINE", direction="on", linebreak="id", specials={ "vertical", 0x005F }, unicodeslot=0xFE33, }, [0xFE34]={ adobename="wavyunderscorevertical", category="pc", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL WAVY LOW LINE", direction="on", linebreak="id", specials={ "vertical", 0x005F }, unicodeslot=0xFE34, }, [0xFE35]={ adobename="parenleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS", direction="on", linebreak="op", specials={ "vertical", 0x0028 }, unicodeslot=0xFE35, }, [0xFE36]={ adobename="parenrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS", direction="on", linebreak="cl", specials={ "vertical", 0x0029 }, unicodeslot=0xFE36, }, [0xFE37]={ adobename="braceleftvertical", category="ps", cjkwd="w", comment="weird math needed for mathml", description="PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET", direction="on", linebreak="op", mathfiller="downbracefill", specials={ "vertical", 0x007B }, unicodeslot=0xFE37, }, [0xFE38]={ adobename="bracerightvertical", category="pe", cjkwd="w", comment="weird math needed for mathml", description="PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET", direction="on", linebreak="cl", mathfiller="upbracefill", specials={ "vertical", 0x007D }, unicodeslot=0xFE38, }, [0xFE39]={ adobename="tortoiseshellbracketleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x3014 }, unicodeslot=0xFE39, }, [0xFE3A]={ adobename="tortoiseshellbracketrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x3015 }, unicodeslot=0xFE3A, }, [0xFE3B]={ adobename="blacklenticularbracketleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x3010 }, unicodeslot=0xFE3B, }, [0xFE3C]={ adobename="blacklenticularbracketrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x3011 }, unicodeslot=0xFE3C, }, [0xFE3D]={ adobename="dblanglebracketleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x300A }, unicodeslot=0xFE3D, }, [0xFE3E]={ adobename="dblanglebracketrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x300B }, unicodeslot=0xFE3E, }, [0xFE3F]={ adobename="anglebracketleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x3008 }, unicodeslot=0xFE3F, }, [0xFE40]={ adobename="anglebracketrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x3009 }, unicodeslot=0xFE40, }, [0xFE41]={ adobename="cornerbracketleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x300C }, unicodeslot=0xFE41, }, [0xFE42]={ adobename="cornerbracketrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x300D }, unicodeslot=0xFE42, }, [0xFE43]={ adobename="whitecornerbracketleftvertical", category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x300E }, unicodeslot=0xFE43, }, [0xFE44]={ adobename="whitecornerbracketrightvertical", category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x300F }, unicodeslot=0xFE44, }, [0xFE45]={ category="po", cjkwd="w", description="SESAME DOT", direction="on", linebreak="id", unicodeslot=0xFE45, }, [0xFE46]={ category="po", cjkwd="w", description="WHITE SESAME DOT", direction="on", linebreak="id", unicodeslot=0xFE46, }, [0xFE47]={ category="ps", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET", direction="on", linebreak="op", specials={ "vertical", 0x005B }, unicodeslot=0xFE47, }, [0xFE48]={ category="pe", cjkwd="w", description="PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET", direction="on", linebreak="cl", specials={ "vertical", 0x005D }, unicodeslot=0xFE48, }, [0xFE49]={ adobename="overlinedashed", category="po", cjkwd="w", description="DASHED OVERLINE", direction="on", linebreak="id", specials={ "compat", 0x203E }, unicodeslot=0xFE49, }, [0xFE4A]={ adobename="overlinecenterline", category="po", cjkwd="w", description="CENTRELINE OVERLINE", direction="on", linebreak="id", specials={ "compat", 0x203E }, unicodeslot=0xFE4A, }, [0xFE4B]={ adobename="overlinewavy", category="po", cjkwd="w", description="WAVY OVERLINE", direction="on", linebreak="id", specials={ "compat", 0x203E }, unicodeslot=0xFE4B, }, [0xFE4C]={ adobename="overlinedblwavy", category="po", cjkwd="w", description="DOUBLE WAVY OVERLINE", direction="on", linebreak="id", specials={ "compat", 0x203E }, unicodeslot=0xFE4C, }, [0xFE4D]={ adobename="lowlinedashed", category="pc", cjkwd="w", description="DASHED LOW LINE", direction="on", linebreak="id", specials={ "compat", 0x005F }, unicodeslot=0xFE4D, }, [0xFE4E]={ adobename="lowlinecenterline", category="pc", cjkwd="w", description="CENTRELINE LOW LINE", direction="on", linebreak="id", specials={ "compat", 0x005F }, unicodeslot=0xFE4E, }, [0xFE4F]={ adobename="underscorewavy", category="pc", cjkwd="w", description="WAVY LOW LINE", direction="on", linebreak="id", specials={ "compat", 0x005F }, unicodeslot=0xFE4F, }, [0xFE50]={ adobename="commasmall", category="po", cjkwd="w", description="SMALL COMMA", direction="cs", linebreak="cl", specials={ "small", 0x002C }, unicodeslot=0xFE50, }, [0xFE51]={ category="po", cjkwd="w", description="SMALL IDEOGRAPHIC COMMA", direction="on", linebreak="id", specials={ "small", 0x3001 }, unicodeslot=0xFE51, }, [0xFE52]={ adobename="periodsmall", category="po", cjkwd="w", description="SMALL FULL STOP", direction="cs", linebreak="cl", specials={ "small", 0x002E }, unicodeslot=0xFE52, }, [0xFE54]={ adobename="semicolonsmall", category="po", cjkwd="w", description="SMALL SEMICOLON", direction="on", linebreak="ns", specials={ "small", 0x003B }, unicodeslot=0xFE54, }, [0xFE55]={ adobename="colonsmall", category="po", cjkwd="w", description="SMALL COLON", direction="cs", linebreak="ns", specials={ "small", 0x003A }, unicodeslot=0xFE55, }, [0xFE56]={ category="po", cjkwd="w", description="SMALL QUESTION MARK", direction="on", linebreak="ex", specials={ "small", 0x003F }, unicodeslot=0xFE56, }, [0xFE57]={ category="po", cjkwd="w", description="SMALL EXCLAMATION MARK", direction="on", linebreak="ex", specials={ "small", 0x0021 }, unicodeslot=0xFE57, }, [0xFE58]={ category="pd", cjkwd="w", description="SMALL EM DASH", direction="on", linebreak="id", specials={ "small", 0x2014 }, unicodeslot=0xFE58, }, [0xFE59]={ adobename="parenleftsmall", category="ps", cjkwd="w", description="SMALL LEFT PARENTHESIS", direction="on", linebreak="op", mirror=0xFE5A, specials={ "small", 0x0028 }, unicodeslot=0xFE59, }, [0xFE5A]={ adobename="parenrightsmall", category="pe", cjkwd="w", description="SMALL RIGHT PARENTHESIS", direction="on", linebreak="cl", mirror=0xFE59, specials={ "small", 0x0029 }, unicodeslot=0xFE5A, }, [0xFE5B]={ adobename="braceleftsmall", category="ps", cjkwd="w", description="SMALL LEFT CURLY BRACKET", direction="on", linebreak="op", mirror=0xFE5C, specials={ "small", 0x007B }, unicodeslot=0xFE5B, }, [0xFE5C]={ adobename="bracerightsmall", category="pe", cjkwd="w", description="SMALL RIGHT CURLY BRACKET", direction="on", linebreak="cl", mirror=0xFE5B, specials={ "small", 0x007D }, unicodeslot=0xFE5C, }, [0xFE5D]={ adobename="tortoiseshellbracketleftsmall", category="ps", cjkwd="w", description="SMALL LEFT TORTOISE SHELL BRACKET", direction="on", linebreak="op", mirror=0xFE5E, specials={ "small", 0x3014 }, unicodeslot=0xFE5D, }, [0xFE5E]={ adobename="tortoiseshellbracketrightsmall", category="pe", cjkwd="w", description="SMALL RIGHT TORTOISE SHELL BRACKET", direction="on", linebreak="cl", mirror=0xFE5D, specials={ "small", 0x3015 }, unicodeslot=0xFE5E, }, [0xFE5F]={ adobename="numbersignsmall", category="po", cjkwd="w", description="SMALL NUMBER SIGN", direction="et", linebreak="id", specials={ "small", 0x0023 }, unicodeslot=0xFE5F, }, [0xFE60]={ category="po", cjkwd="w", description="SMALL AMPERSAND", direction="on", linebreak="id", specials={ "small", 0x0026 }, unicodeslot=0xFE60, }, [0xFE61]={ adobename="asterisksmall", category="po", cjkwd="w", description="SMALL ASTERISK", direction="on", linebreak="id", specials={ "small", 0x002A }, unicodeslot=0xFE61, }, [0xFE62]={ adobename="plussmall", category="sm", cjkwd="w", description="SMALL PLUS SIGN", direction="es", linebreak="id", specials={ "small", 0x002B }, unicodeslot=0xFE62, }, [0xFE63]={ adobename="hyphensmall", category="pd", cjkwd="w", description="SMALL HYPHEN-MINUS", direction="es", linebreak="id", specials={ "small", 0x002D }, unicodeslot=0xFE63, }, [0xFE64]={ adobename="lesssmall", category="sm", cjkwd="w", description="SMALL LESS-THAN SIGN", direction="on", linebreak="id", mirror=0xFE65, specials={ "small", 0x003C }, unicodeslot=0xFE64, }, [0xFE65]={ adobename="greatersmall", category="sm", cjkwd="w", description="SMALL GREATER-THAN SIGN", direction="on", linebreak="id", mirror=0xFE64, specials={ "small", 0x003E }, unicodeslot=0xFE65, }, [0xFE66]={ adobename="equalsmall", category="sm", cjkwd="w", description="SMALL EQUALS SIGN", direction="on", linebreak="id", specials={ "small", 0x003D }, unicodeslot=0xFE66, }, [0xFE68]={ category="po", cjkwd="w", description="SMALL REVERSE SOLIDUS", direction="on", linebreak="id", specials={ "small", 0x005C }, unicodeslot=0xFE68, }, [0xFE69]={ adobename="dollarsmall", category="sc", cjkwd="w", description="SMALL DOLLAR SIGN", direction="et", linebreak="pr", specials={ "small", 0x0024 }, unicodeslot=0xFE69, }, [0xFE6A]={ adobename="percentsmall", category="po", cjkwd="w", description="SMALL PERCENT SIGN", direction="et", linebreak="po", specials={ "small", 0x0025 }, unicodeslot=0xFE6A, }, [0xFE6B]={ adobename="atsmall", category="po", cjkwd="w", description="SMALL COMMERCIAL AT", direction="on", linebreak="id", specials={ "small", 0x0040 }, unicodeslot=0xFE6B, }, [0xFE70]={ category="lo", description="ARABIC FATHATAN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064B }, unicodeslot=0xFE70, }, [0xFE71]={ category="lo", description="ARABIC TATWEEL WITH FATHATAN ABOVE", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x064B }, unicodeslot=0xFE71, }, [0xFE72]={ category="lo", description="ARABIC DAMMATAN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064C }, unicodeslot=0xFE72, }, [0xFE73]={ category="lo", description="ARABIC TAIL FRAGMENT", direction="al", linebreak="al", unicodeslot=0xFE73, }, [0xFE74]={ category="lo", description="ARABIC KASRATAN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064D }, unicodeslot=0xFE74, }, [0xFE76]={ category="lo", description="ARABIC FATHA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064E }, unicodeslot=0xFE76, }, [0xFE77]={ category="lo", description="ARABIC FATHA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x064E }, unicodeslot=0xFE77, }, [0xFE78]={ category="lo", description="ARABIC DAMMA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x064F }, unicodeslot=0xFE78, }, [0xFE79]={ category="lo", description="ARABIC DAMMA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x064F }, unicodeslot=0xFE79, }, [0xFE7A]={ category="lo", description="ARABIC KASRA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x0650 }, unicodeslot=0xFE7A, }, [0xFE7B]={ category="lo", description="ARABIC KASRA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x0650 }, unicodeslot=0xFE7B, }, [0xFE7C]={ category="lo", description="ARABIC SHADDA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x0651 }, unicodeslot=0xFE7C, }, [0xFE7D]={ category="lo", description="ARABIC SHADDA MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x0651 }, unicodeslot=0xFE7D, }, [0xFE7E]={ category="lo", description="ARABIC SUKUN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0020, 0x0652 }, unicodeslot=0xFE7E, }, [0xFE7F]={ category="lo", description="ARABIC SUKUN MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0640, 0x0652 }, unicodeslot=0xFE7F, }, [0xFE80]={ category="lo", description="ARABIC LETTER HAMZA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0621 }, unicodeslot=0xFE80, }, [0xFE81]={ category="lo", description="ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM", direction="al", linebreak="al", shcode=0x0627, specials={ "isolated", 0x0622 }, unicodeslot=0xFE81, }, [0xFE82]={ adobename="alefmaddaabovefinalarabic", category="lo", description="ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM", direction="al", linebreak="al", shcode=0x0627, specials={ "final", 0x0622 }, unicodeslot=0xFE82, }, [0xFE83]={ category="lo", description="ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM", direction="al", linebreak="al", shcode=0x0627, specials={ "isolated", 0x0623 }, unicodeslot=0xFE83, }, [0xFE84]={ adobename="alefhamzaabovefinalarabic", category="lo", description="ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM", direction="al", linebreak="al", shcode=0x0627, specials={ "final", 0x0623 }, unicodeslot=0xFE84, }, [0xFE85]={ category="lo", description="ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM", direction="al", linebreak="al", shcode=0x0648, specials={ "isolated", 0x0624 }, unicodeslot=0xFE85, }, [0xFE86]={ adobename="wawhamzaabovefinalarabic", category="lo", description="ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM", direction="al", linebreak="al", shcode=0x0648, specials={ "final", 0x0624 }, unicodeslot=0xFE86, }, [0xFE87]={ category="lo", description="ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM", direction="al", linebreak="al", shcode=0x0627, specials={ "isolated", 0x0625 }, unicodeslot=0xFE87, }, [0xFE88]={ adobename="alefhamzabelowfinalarabic", category="lo", description="ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM", direction="al", linebreak="al", shcode=0x0627, specials={ "final", 0x0625 }, unicodeslot=0xFE88, }, [0xFE89]={ category="lo", description="ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM", direction="al", linebreak="al", shcode=0x064A, specials={ "isolated", 0x0626 }, unicodeslot=0xFE89, }, [0xFE8A]={ adobename="yehhamzaabovefinalarabic", category="lo", description="ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM", direction="al", linebreak="al", shcode=0x064A, specials={ "final", 0x0626 }, unicodeslot=0xFE8A, }, [0xFE8B]={ adobename="yehhamzaaboveinitialarabic", category="lo", description="ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM", direction="al", linebreak="al", shcode=0x064A, specials={ "initial", 0x0626 }, unicodeslot=0xFE8B, }, [0xFE8C]={ adobename="yehhamzaabovemedialarabic", category="lo", description="ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM", direction="al", linebreak="al", shcode=0x064A, specials={ "medial", 0x0626 }, unicodeslot=0xFE8C, }, [0xFE8D]={ category="lo", description="ARABIC LETTER ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0627 }, unicodeslot=0xFE8D, }, [0xFE8E]={ adobename="aleffinalarabic", category="lo", description="ARABIC LETTER ALEF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0627 }, unicodeslot=0xFE8E, }, [0xFE8F]={ category="lo", description="ARABIC LETTER BEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0628 }, unicodeslot=0xFE8F, }, [0xFE90]={ adobename="behfinalarabic", category="lo", description="ARABIC LETTER BEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0628 }, unicodeslot=0xFE90, }, [0xFE91]={ adobename="behinitialarabic", category="lo", description="ARABIC LETTER BEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0628 }, unicodeslot=0xFE91, }, [0xFE92]={ adobename="behmedialarabic", category="lo", description="ARABIC LETTER BEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0628 }, unicodeslot=0xFE92, }, [0xFE93]={ category="lo", description="ARABIC LETTER TEH MARBUTA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0629 }, unicodeslot=0xFE93, }, [0xFE94]={ adobename="tehmarbutafinalarabic", category="lo", description="ARABIC LETTER TEH MARBUTA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0629 }, unicodeslot=0xFE94, }, [0xFE95]={ category="lo", description="ARABIC LETTER TEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062A }, unicodeslot=0xFE95, }, [0xFE96]={ adobename="tehfinalarabic", category="lo", description="ARABIC LETTER TEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062A }, unicodeslot=0xFE96, }, [0xFE97]={ adobename="tehinitialarabic", category="lo", description="ARABIC LETTER TEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062A }, unicodeslot=0xFE97, }, [0xFE98]={ adobename="tehmedialarabic", category="lo", description="ARABIC LETTER TEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062A }, unicodeslot=0xFE98, }, [0xFE99]={ category="lo", description="ARABIC LETTER THEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062B }, unicodeslot=0xFE99, }, [0xFE9A]={ adobename="thehfinalarabic", category="lo", description="ARABIC LETTER THEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062B }, unicodeslot=0xFE9A, }, [0xFE9B]={ adobename="thehinitialarabic", category="lo", description="ARABIC LETTER THEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062B }, unicodeslot=0xFE9B, }, [0xFE9C]={ adobename="thehmedialarabic", category="lo", description="ARABIC LETTER THEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062B }, unicodeslot=0xFE9C, }, [0xFE9D]={ category="lo", description="ARABIC LETTER JEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062C }, unicodeslot=0xFE9D, }, [0xFE9E]={ adobename="jeemfinalarabic", category="lo", description="ARABIC LETTER JEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062C }, unicodeslot=0xFE9E, }, [0xFE9F]={ adobename="jeeminitialarabic", category="lo", description="ARABIC LETTER JEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062C }, unicodeslot=0xFE9F, }, [0xFEA0]={ adobename="jeemmedialarabic", category="lo", description="ARABIC LETTER JEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062C }, unicodeslot=0xFEA0, }, [0xFEA1]={ category="lo", description="ARABIC LETTER HAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062D }, unicodeslot=0xFEA1, }, [0xFEA2]={ adobename="hahfinalarabic", category="lo", description="ARABIC LETTER HAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062D }, unicodeslot=0xFEA2, }, [0xFEA3]={ adobename="hahinitialarabic", category="lo", description="ARABIC LETTER HAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062D }, unicodeslot=0xFEA3, }, [0xFEA4]={ adobename="hahmedialarabic", category="lo", description="ARABIC LETTER HAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062D }, unicodeslot=0xFEA4, }, [0xFEA5]={ category="lo", description="ARABIC LETTER KHAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062E }, unicodeslot=0xFEA5, }, [0xFEA6]={ adobename="khahfinalarabic", category="lo", description="ARABIC LETTER KHAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062E }, unicodeslot=0xFEA6, }, [0xFEA7]={ adobename="khahinitialarabic", category="lo", description="ARABIC LETTER KHAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x062E }, unicodeslot=0xFEA7, }, [0xFEA8]={ adobename="khahmedialarabic", category="lo", description="ARABIC LETTER KHAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x062E }, unicodeslot=0xFEA8, }, [0xFEA9]={ category="lo", description="ARABIC LETTER DAL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x062F }, unicodeslot=0xFEA9, }, [0xFEAA]={ adobename="dalfinalarabic", category="lo", description="ARABIC LETTER DAL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x062F }, unicodeslot=0xFEAA, }, [0xFEAB]={ category="lo", description="ARABIC LETTER THAL ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0630 }, unicodeslot=0xFEAB, }, [0xFEAC]={ adobename="thalfinalarabic", category="lo", description="ARABIC LETTER THAL FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0630 }, unicodeslot=0xFEAC, }, [0xFEAD]={ category="lo", description="ARABIC LETTER REH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0631 }, unicodeslot=0xFEAD, }, [0xFEAE]={ adobename="rehfinalarabic", category="lo", description="ARABIC LETTER REH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0631 }, unicodeslot=0xFEAE, }, [0xFEAF]={ category="lo", description="ARABIC LETTER ZAIN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0632 }, unicodeslot=0xFEAF, }, [0xFEB0]={ adobename="zainfinalarabic", category="lo", description="ARABIC LETTER ZAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0632 }, unicodeslot=0xFEB0, }, [0xFEB1]={ category="lo", description="ARABIC LETTER SEEN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0633 }, unicodeslot=0xFEB1, }, [0xFEB2]={ adobename="seenfinalarabic", category="lo", description="ARABIC LETTER SEEN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0633 }, unicodeslot=0xFEB2, }, [0xFEB3]={ adobename="seeninitialarabic", category="lo", description="ARABIC LETTER SEEN INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0633 }, unicodeslot=0xFEB3, }, [0xFEB4]={ adobename="seenmedialarabic", category="lo", description="ARABIC LETTER SEEN MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0633 }, unicodeslot=0xFEB4, }, [0xFEB5]={ category="lo", description="ARABIC LETTER SHEEN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0634 }, unicodeslot=0xFEB5, }, [0xFEB6]={ adobename="sheenfinalarabic", category="lo", description="ARABIC LETTER SHEEN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0634 }, unicodeslot=0xFEB6, }, [0xFEB7]={ adobename="sheeninitialarabic", category="lo", description="ARABIC LETTER SHEEN INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0634 }, unicodeslot=0xFEB7, }, [0xFEB8]={ adobename="sheenmedialarabic", category="lo", description="ARABIC LETTER SHEEN MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0634 }, unicodeslot=0xFEB8, }, [0xFEB9]={ category="lo", description="ARABIC LETTER SAD ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0635 }, unicodeslot=0xFEB9, }, [0xFEBA]={ adobename="sadfinalarabic", category="lo", description="ARABIC LETTER SAD FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0635 }, unicodeslot=0xFEBA, }, [0xFEBB]={ adobename="sadinitialarabic", category="lo", description="ARABIC LETTER SAD INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0635 }, unicodeslot=0xFEBB, }, [0xFEBC]={ adobename="sadmedialarabic", category="lo", description="ARABIC LETTER SAD MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0635 }, unicodeslot=0xFEBC, }, [0xFEBD]={ category="lo", description="ARABIC LETTER DAD ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0636 }, unicodeslot=0xFEBD, }, [0xFEBE]={ adobename="dadfinalarabic", category="lo", description="ARABIC LETTER DAD FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0636 }, unicodeslot=0xFEBE, }, [0xFEBF]={ adobename="dadinitialarabic", category="lo", description="ARABIC LETTER DAD INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0636 }, unicodeslot=0xFEBF, }, [0xFEC0]={ adobename="dadmedialarabic", category="lo", description="ARABIC LETTER DAD MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0636 }, unicodeslot=0xFEC0, }, [0xFEC1]={ category="lo", description="ARABIC LETTER TAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0637 }, unicodeslot=0xFEC1, }, [0xFEC2]={ adobename="tahfinalarabic", category="lo", description="ARABIC LETTER TAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0637 }, unicodeslot=0xFEC2, }, [0xFEC3]={ adobename="tahinitialarabic", category="lo", description="ARABIC LETTER TAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0637 }, unicodeslot=0xFEC3, }, [0xFEC4]={ adobename="tahmedialarabic", category="lo", description="ARABIC LETTER TAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0637 }, unicodeslot=0xFEC4, }, [0xFEC5]={ category="lo", description="ARABIC LETTER ZAH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0638 }, unicodeslot=0xFEC5, }, [0xFEC6]={ adobename="zahfinalarabic", category="lo", description="ARABIC LETTER ZAH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0638 }, unicodeslot=0xFEC6, }, [0xFEC7]={ adobename="zahinitialarabic", category="lo", description="ARABIC LETTER ZAH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0638 }, unicodeslot=0xFEC7, }, [0xFEC8]={ adobename="zahmedialarabic", category="lo", description="ARABIC LETTER ZAH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0638 }, unicodeslot=0xFEC8, }, [0xFEC9]={ category="lo", description="ARABIC LETTER AIN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0639 }, unicodeslot=0xFEC9, }, [0xFECA]={ adobename="ainfinalarabic", category="lo", description="ARABIC LETTER AIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0639 }, unicodeslot=0xFECA, }, [0xFECB]={ adobename="aininitialarabic", category="lo", description="ARABIC LETTER AIN INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0639 }, unicodeslot=0xFECB, }, [0xFECC]={ adobename="ainmedialarabic", category="lo", description="ARABIC LETTER AIN MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0639 }, unicodeslot=0xFECC, }, [0xFECD]={ category="lo", description="ARABIC LETTER GHAIN ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x063A }, unicodeslot=0xFECD, }, [0xFECE]={ adobename="ghainfinalarabic", category="lo", description="ARABIC LETTER GHAIN FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x063A }, unicodeslot=0xFECE, }, [0xFECF]={ adobename="ghaininitialarabic", category="lo", description="ARABIC LETTER GHAIN INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x063A }, unicodeslot=0xFECF, }, [0xFED0]={ adobename="ghainmedialarabic", category="lo", description="ARABIC LETTER GHAIN MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x063A }, unicodeslot=0xFED0, }, [0xFED1]={ category="lo", description="ARABIC LETTER FEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0641 }, unicodeslot=0xFED1, }, [0xFED2]={ adobename="fehfinalarabic", category="lo", description="ARABIC LETTER FEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0641 }, unicodeslot=0xFED2, }, [0xFED3]={ adobename="fehinitialarabic", category="lo", description="ARABIC LETTER FEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0641 }, unicodeslot=0xFED3, }, [0xFED4]={ adobename="fehmedialarabic", category="lo", description="ARABIC LETTER FEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0641 }, unicodeslot=0xFED4, }, [0xFED5]={ category="lo", description="ARABIC LETTER QAF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0642 }, unicodeslot=0xFED5, }, [0xFED6]={ adobename="qaffinalarabic", category="lo", description="ARABIC LETTER QAF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0642 }, unicodeslot=0xFED6, }, [0xFED7]={ adobename="qafinitialarabic", category="lo", description="ARABIC LETTER QAF INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0642 }, unicodeslot=0xFED7, }, [0xFED8]={ adobename="qafmedialarabic", category="lo", description="ARABIC LETTER QAF MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0642 }, unicodeslot=0xFED8, }, [0xFED9]={ category="lo", description="ARABIC LETTER KAF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0643 }, unicodeslot=0xFED9, }, [0xFEDA]={ adobename="kaffinalarabic", category="lo", description="ARABIC LETTER KAF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0643 }, unicodeslot=0xFEDA, }, [0xFEDB]={ adobename="kafinitialarabic", category="lo", description="ARABIC LETTER KAF INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0643 }, unicodeslot=0xFEDB, }, [0xFEDC]={ adobename="kafmedialarabic", category="lo", description="ARABIC LETTER KAF MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0643 }, unicodeslot=0xFEDC, }, [0xFEDD]={ category="lo", description="ARABIC LETTER LAM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644 }, unicodeslot=0xFEDD, }, [0xFEDE]={ adobename="lamfinalarabic", category="lo", description="ARABIC LETTER LAM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644 }, unicodeslot=0xFEDE, }, [0xFEDF]={ adobename="lammeemkhahinitialarabic", category="lo", description="ARABIC LETTER LAM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0644 }, unicodeslot=0xFEDF, }, [0xFEE0]={ adobename="lammedialarabic", category="lo", description="ARABIC LETTER LAM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0644 }, unicodeslot=0xFEE0, }, [0xFEE1]={ category="lo", description="ARABIC LETTER MEEM ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0645 }, unicodeslot=0xFEE1, }, [0xFEE2]={ adobename="meemfinalarabic", category="lo", description="ARABIC LETTER MEEM FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0645 }, unicodeslot=0xFEE2, }, [0xFEE3]={ adobename="meeminitialarabic", category="lo", description="ARABIC LETTER MEEM INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0645 }, unicodeslot=0xFEE3, }, [0xFEE4]={ adobename="meemmedialarabic", category="lo", description="ARABIC LETTER MEEM MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0645 }, unicodeslot=0xFEE4, }, [0xFEE5]={ category="lo", description="ARABIC LETTER NOON ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0646 }, unicodeslot=0xFEE5, }, [0xFEE6]={ adobename="noonfinalarabic", category="lo", description="ARABIC LETTER NOON FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0646 }, unicodeslot=0xFEE6, }, [0xFEE7]={ adobename="nooninitialarabic", category="lo", description="ARABIC LETTER NOON INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0646 }, unicodeslot=0xFEE7, }, [0xFEE8]={ adobename="noonmedialarabic", category="lo", description="ARABIC LETTER NOON MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0646 }, unicodeslot=0xFEE8, }, [0xFEE9]={ category="lo", description="ARABIC LETTER HEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0647 }, unicodeslot=0xFEE9, }, [0xFEEA]={ adobename="hehfinalarabic", category="lo", description="ARABIC LETTER HEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0647 }, unicodeslot=0xFEEA, }, [0xFEEB]={ adobename="hehinitialarabic", category="lo", description="ARABIC LETTER HEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x0647 }, unicodeslot=0xFEEB, }, [0xFEEC]={ adobename="hehmedialarabic", category="lo", description="ARABIC LETTER HEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x0647 }, unicodeslot=0xFEEC, }, [0xFEED]={ category="lo", description="ARABIC LETTER WAW ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0648 }, unicodeslot=0xFEED, }, [0xFEEE]={ adobename="wawfinalarabic", category="lo", description="ARABIC LETTER WAW FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0648 }, unicodeslot=0xFEEE, }, [0xFEEF]={ category="lo", description="ARABIC LETTER ALEF MAKSURA ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0649 }, unicodeslot=0xFEEF, }, [0xFEF0]={ adobename="alefmaksurafinalarabic", category="lo", description="ARABIC LETTER ALEF MAKSURA FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0649 }, unicodeslot=0xFEF0, }, [0xFEF1]={ category="lo", description="ARABIC LETTER YEH ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x064A }, unicodeslot=0xFEF1, }, [0xFEF2]={ adobename="yehfinalarabic", category="lo", description="ARABIC LETTER YEH FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x064A }, unicodeslot=0xFEF2, }, [0xFEF3]={ adobename="yehinitialarabic", category="lo", description="ARABIC LETTER YEH INITIAL FORM", direction="al", linebreak="al", specials={ "initial", 0x064A }, unicodeslot=0xFEF3, }, [0xFEF4]={ adobename="yehmedialarabic", category="lo", description="ARABIC LETTER YEH MEDIAL FORM", direction="al", linebreak="al", specials={ "medial", 0x064A }, unicodeslot=0xFEF4, }, [0xFEF5]={ adobename="lamalefmaddaaboveisolatedarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x0622 }, unicodeslot=0xFEF5, }, [0xFEF6]={ adobename="lamalefmaddaabovefinalarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0622 }, unicodeslot=0xFEF6, }, [0xFEF7]={ adobename="lamalefhamzaaboveisolatedarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x0623 }, unicodeslot=0xFEF7, }, [0xFEF8]={ adobename="lamalefhamzaabovefinalarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0623 }, unicodeslot=0xFEF8, }, [0xFEF9]={ adobename="lamalefhamzabelowisolatedarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x0625 }, unicodeslot=0xFEF9, }, [0xFEFA]={ adobename="lamalefhamzabelowfinalarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0625 }, unicodeslot=0xFEFA, }, [0xFEFB]={ adobename="lamalefisolatedarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM", direction="al", linebreak="al", specials={ "isolated", 0x0644, 0x0627 }, unicodeslot=0xFEFB, }, [0xFEFC]={ adobename="lamaleffinalarabic", category="lo", description="ARABIC LIGATURE LAM WITH ALEF FINAL FORM", direction="al", linebreak="al", specials={ "final", 0x0644, 0x0627 }, unicodeslot=0xFEFC, }, [0xFEFF]={ adobename="zerowidthjoiner", category="cf", contextname="zerowidthnobreakspace", description="ZERO WIDTH NO-BREAK SPACE", direction="bn", linebreak="wj", unicodeslot=0xFEFF, }, [0xFF01]={ adobename="exclammonospace", category="po", cjkwd="f", description="FULLWIDTH EXCLAMATION MARK", direction="on", linebreak="ex", specials={ "wide", 0x0021 }, unicodeslot=0xFF01, }, [0xFF02]={ adobename="quotedblmonospace", category="po", cjkwd="f", description="FULLWIDTH QUOTATION MARK", direction="on", linebreak="id", specials={ "wide", 0x0022 }, unicodeslot=0xFF02, }, [0xFF03]={ adobename="numbersignmonospace", category="po", cjkwd="f", description="FULLWIDTH NUMBER SIGN", direction="et", linebreak="id", specials={ "wide", 0x0023 }, unicodeslot=0xFF03, }, [0xFF04]={ adobename="dollarmonospace", category="sc", cjkwd="f", description="FULLWIDTH DOLLAR SIGN", direction="et", linebreak="pr", specials={ "wide", 0x0024 }, unicodeslot=0xFF04, }, [0xFF05]={ adobename="percentmonospace", category="po", cjkwd="f", description="FULLWIDTH PERCENT SIGN", direction="et", linebreak="po", specials={ "wide", 0x0025 }, unicodeslot=0xFF05, }, [0xFF06]={ adobename="ampersandmonospace", category="po", cjkwd="f", description="FULLWIDTH AMPERSAND", direction="on", linebreak="id", specials={ "wide", 0x0026 }, unicodeslot=0xFF06, }, [0xFF07]={ adobename="quotesinglemonospace", category="po", cjkwd="f", description="FULLWIDTH APOSTROPHE", direction="on", linebreak="id", specials={ "wide", 0x0027 }, unicodeslot=0xFF07, }, [0xFF08]={ adobename="parenleftmonospace", category="ps", cjkwd="f", description="FULLWIDTH LEFT PARENTHESIS", direction="on", linebreak="op", mirror=0xFF09, specials={ "wide", 0x0028 }, unicodeslot=0xFF08, }, [0xFF09]={ adobename="parenrightmonospace", category="pe", cjkwd="f", description="FULLWIDTH RIGHT PARENTHESIS", direction="on", linebreak="cl", mirror=0xFF08, specials={ "wide", 0x0029 }, unicodeslot=0xFF09, }, [0xFF0A]={ adobename="asteriskmonospace", category="po", cjkwd="f", description="FULLWIDTH ASTERISK", direction="on", linebreak="id", specials={ "wide", 0x002A }, unicodeslot=0xFF0A, }, [0xFF0B]={ adobename="plusmonospace", category="sm", cjkwd="f", description="FULLWIDTH PLUS SIGN", direction="es", linebreak="id", specials={ "wide", 0x002B }, unicodeslot=0xFF0B, }, [0xFF0C]={ adobename="commamonospace", category="po", cjkwd="f", description="FULLWIDTH COMMA", direction="cs", linebreak="cl", specials={ "wide", 0x002C }, unicodeslot=0xFF0C, }, [0xFF0D]={ adobename="hyphenmonospace", category="pd", cjkwd="f", description="FULLWIDTH HYPHEN-MINUS", direction="es", linebreak="id", specials={ "wide", 0x002D }, unicodeslot=0xFF0D, }, [0xFF0E]={ adobename="periodmonospace", category="po", cjkwd="f", description="FULLWIDTH FULL STOP", direction="cs", linebreak="cl", specials={ "wide", 0x002E }, unicodeslot=0xFF0E, }, [0xFF0F]={ adobename="slashmonospace", category="po", cjkwd="f", description="FULLWIDTH SOLIDUS", direction="cs", linebreak="id", specials={ "wide", 0x002F }, unicodeslot=0xFF0F, }, [0xFF10]={ adobename="zeromonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT ZERO", direction="en", linebreak="id", specials={ "wide", 0x0030 }, unicodeslot=0xFF10, }, [0xFF11]={ adobename="onemonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT ONE", direction="en", linebreak="id", specials={ "wide", 0x0031 }, unicodeslot=0xFF11, }, [0xFF12]={ adobename="twomonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT TWO", direction="en", linebreak="id", specials={ "wide", 0x0032 }, unicodeslot=0xFF12, }, [0xFF13]={ adobename="threemonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT THREE", direction="en", linebreak="id", specials={ "wide", 0x0033 }, unicodeslot=0xFF13, }, [0xFF14]={ adobename="fourmonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT FOUR", direction="en", linebreak="id", specials={ "wide", 0x0034 }, unicodeslot=0xFF14, }, [0xFF15]={ adobename="fivemonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT FIVE", direction="en", linebreak="id", specials={ "wide", 0x0035 }, unicodeslot=0xFF15, }, [0xFF16]={ adobename="sixmonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT SIX", direction="en", linebreak="id", specials={ "wide", 0x0036 }, unicodeslot=0xFF16, }, [0xFF17]={ adobename="sevenmonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT SEVEN", direction="en", linebreak="id", specials={ "wide", 0x0037 }, unicodeslot=0xFF17, }, [0xFF18]={ adobename="eightmonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT EIGHT", direction="en", linebreak="id", specials={ "wide", 0x0038 }, unicodeslot=0xFF18, }, [0xFF19]={ adobename="ninemonospace", category="nd", cjkwd="f", description="FULLWIDTH DIGIT NINE", direction="en", linebreak="id", specials={ "wide", 0x0039 }, unicodeslot=0xFF19, }, [0xFF1A]={ adobename="colonmonospace", category="po", cjkwd="f", description="FULLWIDTH COLON", direction="cs", linebreak="ns", specials={ "wide", 0x003A }, unicodeslot=0xFF1A, }, [0xFF1B]={ adobename="semicolonmonospace", category="po", cjkwd="f", description="FULLWIDTH SEMICOLON", direction="on", linebreak="ns", specials={ "wide", 0x003B }, unicodeslot=0xFF1B, }, [0xFF1C]={ adobename="lessmonospace", category="sm", cjkwd="f", description="FULLWIDTH LESS-THAN SIGN", direction="on", linebreak="id", mirror=0xFF1E, specials={ "wide", 0x003C }, unicodeslot=0xFF1C, }, [0xFF1D]={ adobename="equalmonospace", category="sm", cjkwd="f", description="FULLWIDTH EQUALS SIGN", direction="on", linebreak="id", specials={ "wide", 0x003D }, unicodeslot=0xFF1D, }, [0xFF1E]={ adobename="greatermonospace", category="sm", cjkwd="f", description="FULLWIDTH GREATER-THAN SIGN", direction="on", linebreak="id", mirror=0xFF1C, specials={ "wide", 0x003E }, unicodeslot=0xFF1E, }, [0xFF1F]={ adobename="questionmonospace", category="po", cjkwd="f", description="FULLWIDTH QUESTION MARK", direction="on", linebreak="ex", specials={ "wide", 0x003F }, unicodeslot=0xFF1F, }, [0xFF20]={ adobename="atmonospace", category="po", cjkwd="f", description="FULLWIDTH COMMERCIAL AT", direction="on", linebreak="id", specials={ "wide", 0x0040 }, unicodeslot=0xFF20, }, [0xFF21]={ adobename="Amonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER A", direction="l", lccode=0xFF41, linebreak="id", specials={ "wide", 0x0041 }, unicodeslot=0xFF21, }, [0xFF22]={ adobename="Bmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER B", direction="l", lccode=0xFF42, linebreak="id", specials={ "wide", 0x0042 }, unicodeslot=0xFF22, }, [0xFF23]={ adobename="Cmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER C", direction="l", lccode=0xFF43, linebreak="id", specials={ "wide", 0x0043 }, unicodeslot=0xFF23, }, [0xFF24]={ adobename="Dmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER D", direction="l", lccode=0xFF44, linebreak="id", specials={ "wide", 0x0044 }, unicodeslot=0xFF24, }, [0xFF25]={ adobename="Emonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER E", direction="l", lccode=0xFF45, linebreak="id", specials={ "wide", 0x0045 }, unicodeslot=0xFF25, }, [0xFF26]={ adobename="Fmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER F", direction="l", lccode=0xFF46, linebreak="id", specials={ "wide", 0x0046 }, unicodeslot=0xFF26, }, [0xFF27]={ adobename="Gmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER G", direction="l", lccode=0xFF47, linebreak="id", specials={ "wide", 0x0047 }, unicodeslot=0xFF27, }, [0xFF28]={ adobename="Hmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER H", direction="l", lccode=0xFF48, linebreak="id", specials={ "wide", 0x0048 }, unicodeslot=0xFF28, }, [0xFF29]={ adobename="Imonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER I", direction="l", lccode=0xFF49, linebreak="id", specials={ "wide", 0x0049 }, unicodeslot=0xFF29, }, [0xFF2A]={ adobename="Jmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER J", direction="l", lccode=0xFF4A, linebreak="id", specials={ "wide", 0x004A }, unicodeslot=0xFF2A, }, [0xFF2B]={ adobename="Kmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER K", direction="l", lccode=0xFF4B, linebreak="id", specials={ "wide", 0x004B }, unicodeslot=0xFF2B, }, [0xFF2C]={ adobename="Lmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER L", direction="l", lccode=0xFF4C, linebreak="id", specials={ "wide", 0x004C }, unicodeslot=0xFF2C, }, [0xFF2D]={ adobename="Mmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER M", direction="l", lccode=0xFF4D, linebreak="id", specials={ "wide", 0x004D }, unicodeslot=0xFF2D, }, [0xFF2E]={ adobename="Nmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER N", direction="l", lccode=0xFF4E, linebreak="id", specials={ "wide", 0x004E }, unicodeslot=0xFF2E, }, [0xFF2F]={ adobename="Omonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER O", direction="l", lccode=0xFF4F, linebreak="id", specials={ "wide", 0x004F }, unicodeslot=0xFF2F, }, [0xFF30]={ adobename="Pmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER P", direction="l", lccode=0xFF50, linebreak="id", specials={ "wide", 0x0050 }, unicodeslot=0xFF30, }, [0xFF31]={ adobename="Qmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER Q", direction="l", lccode=0xFF51, linebreak="id", specials={ "wide", 0x0051 }, unicodeslot=0xFF31, }, [0xFF32]={ adobename="Rmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER R", direction="l", lccode=0xFF52, linebreak="id", specials={ "wide", 0x0052 }, unicodeslot=0xFF32, }, [0xFF33]={ adobename="Smonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER S", direction="l", lccode=0xFF53, linebreak="id", specials={ "wide", 0x0053 }, unicodeslot=0xFF33, }, [0xFF34]={ adobename="Tmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER T", direction="l", lccode=0xFF54, linebreak="id", specials={ "wide", 0x0054 }, unicodeslot=0xFF34, }, [0xFF35]={ adobename="Umonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER U", direction="l", lccode=0xFF55, linebreak="id", specials={ "wide", 0x0055 }, unicodeslot=0xFF35, }, [0xFF36]={ adobename="Vmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER V", direction="l", lccode=0xFF56, linebreak="id", specials={ "wide", 0x0056 }, unicodeslot=0xFF36, }, [0xFF37]={ adobename="Wmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER W", direction="l", lccode=0xFF57, linebreak="id", specials={ "wide", 0x0057 }, unicodeslot=0xFF37, }, [0xFF38]={ adobename="Xmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER X", direction="l", lccode=0xFF58, linebreak="id", specials={ "wide", 0x0058 }, unicodeslot=0xFF38, }, [0xFF39]={ adobename="Ymonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER Y", direction="l", lccode=0xFF59, linebreak="id", specials={ "wide", 0x0059 }, unicodeslot=0xFF39, }, [0xFF3A]={ adobename="Zmonospace", category="lu", cjkwd="f", description="FULLWIDTH LATIN CAPITAL LETTER Z", direction="l", lccode=0xFF5A, linebreak="id", specials={ "wide", 0x005A }, unicodeslot=0xFF3A, }, [0xFF3B]={ adobename="bracketleftmonospace", category="ps", cjkwd="f", description="FULLWIDTH LEFT SQUARE BRACKET", direction="on", linebreak="op", mirror=0xFF3D, specials={ "wide", 0x005B }, unicodeslot=0xFF3B, }, [0xFF3C]={ adobename="backslashmonospace", category="po", cjkwd="f", description="FULLWIDTH REVERSE SOLIDUS", direction="on", linebreak="id", specials={ "wide", 0x005C }, unicodeslot=0xFF3C, }, [0xFF3D]={ adobename="bracketrightmonospace", category="pe", cjkwd="f", description="FULLWIDTH RIGHT SQUARE BRACKET", direction="on", linebreak="cl", mirror=0xFF3B, specials={ "wide", 0x005D }, unicodeslot=0xFF3D, }, [0xFF3E]={ adobename="asciicircummonospace", category="sk", cjkwd="f", description="FULLWIDTH CIRCUMFLEX ACCENT", direction="on", linebreak="id", specials={ "wide", 0x005E }, unicodeslot=0xFF3E, }, [0xFF3F]={ adobename="underscoremonospace", category="pc", cjkwd="f", description="FULLWIDTH LOW LINE", direction="on", linebreak="id", specials={ "wide", 0x005F }, unicodeslot=0xFF3F, }, [0xFF40]={ adobename="gravemonospace", category="sk", cjkwd="f", description="FULLWIDTH GRAVE ACCENT", direction="on", linebreak="id", specials={ "wide", 0x0060 }, unicodeslot=0xFF40, }, [0xFF41]={ adobename="amonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER A", direction="l", linebreak="id", specials={ "wide", 0x0061 }, uccode=0xFF21, unicodeslot=0xFF41, }, [0xFF42]={ adobename="bmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER B", direction="l", linebreak="id", specials={ "wide", 0x0062 }, uccode=0xFF22, unicodeslot=0xFF42, }, [0xFF43]={ adobename="cmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER C", direction="l", linebreak="id", specials={ "wide", 0x0063 }, uccode=0xFF23, unicodeslot=0xFF43, }, [0xFF44]={ adobename="dmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER D", direction="l", linebreak="id", specials={ "wide", 0x0064 }, uccode=0xFF24, unicodeslot=0xFF44, }, [0xFF45]={ adobename="emonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER E", direction="l", linebreak="id", specials={ "wide", 0x0065 }, uccode=0xFF25, unicodeslot=0xFF45, }, [0xFF46]={ adobename="fmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER F", direction="l", linebreak="id", specials={ "wide", 0x0066 }, uccode=0xFF26, unicodeslot=0xFF46, }, [0xFF47]={ adobename="gmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER G", direction="l", linebreak="id", specials={ "wide", 0x0067 }, uccode=0xFF27, unicodeslot=0xFF47, }, [0xFF48]={ adobename="hmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER H", direction="l", linebreak="id", specials={ "wide", 0x0068 }, uccode=0xFF28, unicodeslot=0xFF48, }, [0xFF49]={ adobename="imonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER I", direction="l", linebreak="id", specials={ "wide", 0x0069 }, uccode=0xFF29, unicodeslot=0xFF49, }, [0xFF4A]={ adobename="jmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER J", direction="l", linebreak="id", specials={ "wide", 0x006A }, uccode=0xFF2A, unicodeslot=0xFF4A, }, [0xFF4B]={ adobename="kmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER K", direction="l", linebreak="id", specials={ "wide", 0x006B }, uccode=0xFF2B, unicodeslot=0xFF4B, }, [0xFF4C]={ adobename="lmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER L", direction="l", linebreak="id", specials={ "wide", 0x006C }, uccode=0xFF2C, unicodeslot=0xFF4C, }, [0xFF4D]={ adobename="mmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER M", direction="l", linebreak="id", specials={ "wide", 0x006D }, uccode=0xFF2D, unicodeslot=0xFF4D, }, [0xFF4E]={ adobename="nmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER N", direction="l", linebreak="id", specials={ "wide", 0x006E }, uccode=0xFF2E, unicodeslot=0xFF4E, }, [0xFF4F]={ adobename="omonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER O", direction="l", linebreak="id", specials={ "wide", 0x006F }, uccode=0xFF2F, unicodeslot=0xFF4F, }, [0xFF50]={ adobename="pmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER P", direction="l", linebreak="id", specials={ "wide", 0x0070 }, uccode=0xFF30, unicodeslot=0xFF50, }, [0xFF51]={ adobename="qmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER Q", direction="l", linebreak="id", specials={ "wide", 0x0071 }, uccode=0xFF31, unicodeslot=0xFF51, }, [0xFF52]={ adobename="rmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER R", direction="l", linebreak="id", specials={ "wide", 0x0072 }, uccode=0xFF32, unicodeslot=0xFF52, }, [0xFF53]={ adobename="smonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER S", direction="l", linebreak="id", specials={ "wide", 0x0073 }, uccode=0xFF33, unicodeslot=0xFF53, }, [0xFF54]={ adobename="tmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER T", direction="l", linebreak="id", specials={ "wide", 0x0074 }, uccode=0xFF34, unicodeslot=0xFF54, }, [0xFF55]={ adobename="umonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER U", direction="l", linebreak="id", specials={ "wide", 0x0075 }, uccode=0xFF35, unicodeslot=0xFF55, }, [0xFF56]={ adobename="vmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER V", direction="l", linebreak="id", specials={ "wide", 0x0076 }, uccode=0xFF36, unicodeslot=0xFF56, }, [0xFF57]={ adobename="wmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER W", direction="l", linebreak="id", specials={ "wide", 0x0077 }, uccode=0xFF37, unicodeslot=0xFF57, }, [0xFF58]={ adobename="xmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER X", direction="l", linebreak="id", specials={ "wide", 0x0078 }, uccode=0xFF38, unicodeslot=0xFF58, }, [0xFF59]={ adobename="ymonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER Y", direction="l", linebreak="id", specials={ "wide", 0x0079 }, uccode=0xFF39, unicodeslot=0xFF59, }, [0xFF5A]={ adobename="zmonospace", category="ll", cjkwd="f", description="FULLWIDTH LATIN SMALL LETTER Z", direction="l", linebreak="id", specials={ "wide", 0x007A }, uccode=0xFF3A, unicodeslot=0xFF5A, }, [0xFF5B]={ adobename="braceleftmonospace", category="ps", cjkwd="f", description="FULLWIDTH LEFT CURLY BRACKET", direction="on", linebreak="op", mirror=0xFF5D, specials={ "wide", 0x007B }, unicodeslot=0xFF5B, }, [0xFF5C]={ adobename="barmonospace", category="sm", cjkwd="f", description="FULLWIDTH VERTICAL LINE", direction="on", linebreak="id", specials={ "wide", 0x007C }, unicodeslot=0xFF5C, }, [0xFF5D]={ adobename="bracerightmonospace", category="pe", cjkwd="f", description="FULLWIDTH RIGHT CURLY BRACKET", direction="on", linebreak="cl", mirror=0xFF5B, specials={ "wide", 0x007D }, unicodeslot=0xFF5D, }, [0xFF5E]={ adobename="asciitildemonospace", category="sm", cjkwd="f", description="FULLWIDTH TILDE", direction="on", linebreak="id", specials={ "wide", 0x007E }, unicodeslot=0xFF5E, }, [0xFF5F]={ category="ps", cjkwd="f", description="FULLWIDTH LEFT WHITE PARENTHESIS", direction="on", linebreak="op", mirror=0xFF60, specials={ "wide", 0x2985 }, unicodeslot=0xFF5F, }, [0xFF60]={ category="pe", cjkwd="f", description="FULLWIDTH RIGHT WHITE PARENTHESIS", direction="on", linebreak="cl", mirror=0xFF5F, specials={ "wide", 0x2986 }, unicodeslot=0xFF60, }, [0xFF61]={ adobename="periodhalfwidth", category="po", cjkwd="h", description="HALFWIDTH IDEOGRAPHIC FULL STOP", direction="on", linebreak="cl", specials={ "narrow", 0x3002 }, unicodeslot=0xFF61, }, [0xFF62]={ adobename="cornerbracketlefthalfwidth", category="ps", cjkwd="h", description="HALFWIDTH LEFT CORNER BRACKET", direction="on", linebreak="op", mirror=0xFF63, specials={ "narrow", 0x300C }, unicodeslot=0xFF62, }, [0xFF63]={ adobename="cornerbracketrighthalfwidth", category="pe", cjkwd="h", description="HALFWIDTH RIGHT CORNER BRACKET", direction="on", linebreak="cl", mirror=0xFF62, specials={ "narrow", 0x300D }, unicodeslot=0xFF63, }, [0xFF64]={ adobename="ideographiccommaleft", category="po", cjkwd="h", description="HALFWIDTH IDEOGRAPHIC COMMA", direction="on", linebreak="cl", specials={ "narrow", 0x3001 }, unicodeslot=0xFF64, }, [0xFF65]={ adobename="middledotkatakanahalfwidth", category="po", cjkwd="h", description="HALFWIDTH KATAKANA MIDDLE DOT", direction="on", linebreak="ns", specials={ "narrow", 0x30FB }, unicodeslot=0xFF65, }, [0xFF66]={ adobename="wokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER WO", direction="l", linebreak="al", specials={ "narrow", 0x30F2 }, unicodeslot=0xFF66, }, [0xFF67]={ adobename="asmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL A", direction="l", linebreak="cj", specials={ "narrow", 0x30A1 }, unicodeslot=0xFF67, }, [0xFF68]={ adobename="ismallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL I", direction="l", linebreak="cj", specials={ "narrow", 0x30A3 }, unicodeslot=0xFF68, }, [0xFF69]={ adobename="usmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL U", direction="l", linebreak="cj", specials={ "narrow", 0x30A5 }, unicodeslot=0xFF69, }, [0xFF6A]={ adobename="esmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL E", direction="l", linebreak="cj", specials={ "narrow", 0x30A7 }, unicodeslot=0xFF6A, }, [0xFF6B]={ adobename="osmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL O", direction="l", linebreak="cj", specials={ "narrow", 0x30A9 }, unicodeslot=0xFF6B, }, [0xFF6C]={ adobename="yasmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL YA", direction="l", linebreak="cj", specials={ "narrow", 0x30E3 }, unicodeslot=0xFF6C, }, [0xFF6D]={ adobename="yusmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL YU", direction="l", linebreak="cj", specials={ "narrow", 0x30E5 }, unicodeslot=0xFF6D, }, [0xFF6E]={ adobename="yosmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL YO", direction="l", linebreak="cj", specials={ "narrow", 0x30E7 }, unicodeslot=0xFF6E, }, [0xFF6F]={ adobename="tusmallkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SMALL TU", direction="l", linebreak="cj", specials={ "narrow", 0x30C3 }, unicodeslot=0xFF6F, }, [0xFF70]={ adobename="katahiraprolongmarkhalfwidth", category="lm", cjkwd="h", description="HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK", direction="l", linebreak="cj", specials={ "narrow", 0x30FC }, unicodeslot=0xFF70, }, [0xFF71]={ adobename="akatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER A", direction="l", linebreak="al", specials={ "narrow", 0x30A2 }, unicodeslot=0xFF71, }, [0xFF72]={ adobename="ikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER I", direction="l", linebreak="al", specials={ "narrow", 0x30A4 }, unicodeslot=0xFF72, }, [0xFF73]={ adobename="ukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER U", direction="l", linebreak="al", specials={ "narrow", 0x30A6 }, unicodeslot=0xFF73, }, [0xFF74]={ adobename="ekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER E", direction="l", linebreak="al", specials={ "narrow", 0x30A8 }, unicodeslot=0xFF74, }, [0xFF75]={ adobename="okatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER O", direction="l", linebreak="al", specials={ "narrow", 0x30AA }, unicodeslot=0xFF75, }, [0xFF76]={ adobename="kakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER KA", direction="l", linebreak="al", specials={ "narrow", 0x30AB }, unicodeslot=0xFF76, }, [0xFF77]={ adobename="kikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER KI", direction="l", linebreak="al", specials={ "narrow", 0x30AD }, unicodeslot=0xFF77, }, [0xFF78]={ adobename="kukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER KU", direction="l", linebreak="al", specials={ "narrow", 0x30AF }, unicodeslot=0xFF78, }, [0xFF79]={ adobename="kekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER KE", direction="l", linebreak="al", specials={ "narrow", 0x30B1 }, unicodeslot=0xFF79, }, [0xFF7A]={ adobename="kokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER KO", direction="l", linebreak="al", specials={ "narrow", 0x30B3 }, unicodeslot=0xFF7A, }, [0xFF7B]={ adobename="sakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SA", direction="l", linebreak="al", specials={ "narrow", 0x30B5 }, unicodeslot=0xFF7B, }, [0xFF7C]={ adobename="sikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SI", direction="l", linebreak="al", specials={ "narrow", 0x30B7 }, unicodeslot=0xFF7C, }, [0xFF7D]={ adobename="sukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SU", direction="l", linebreak="al", specials={ "narrow", 0x30B9 }, unicodeslot=0xFF7D, }, [0xFF7E]={ adobename="sekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SE", direction="l", linebreak="al", specials={ "narrow", 0x30BB }, unicodeslot=0xFF7E, }, [0xFF7F]={ adobename="sokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER SO", direction="l", linebreak="al", specials={ "narrow", 0x30BD }, unicodeslot=0xFF7F, }, [0xFF80]={ adobename="takatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER TA", direction="l", linebreak="al", specials={ "narrow", 0x30BF }, unicodeslot=0xFF80, }, [0xFF81]={ adobename="tikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER TI", direction="l", linebreak="al", specials={ "narrow", 0x30C1 }, unicodeslot=0xFF81, }, [0xFF82]={ adobename="tukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER TU", direction="l", linebreak="al", specials={ "narrow", 0x30C4 }, unicodeslot=0xFF82, }, [0xFF83]={ adobename="tekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER TE", direction="l", linebreak="al", specials={ "narrow", 0x30C6 }, unicodeslot=0xFF83, }, [0xFF84]={ adobename="tokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER TO", direction="l", linebreak="al", specials={ "narrow", 0x30C8 }, unicodeslot=0xFF84, }, [0xFF85]={ adobename="nakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER NA", direction="l", linebreak="al", specials={ "narrow", 0x30CA }, unicodeslot=0xFF85, }, [0xFF86]={ adobename="nikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER NI", direction="l", linebreak="al", specials={ "narrow", 0x30CB }, unicodeslot=0xFF86, }, [0xFF87]={ adobename="nukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER NU", direction="l", linebreak="al", specials={ "narrow", 0x30CC }, unicodeslot=0xFF87, }, [0xFF88]={ adobename="nekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER NE", direction="l", linebreak="al", specials={ "narrow", 0x30CD }, unicodeslot=0xFF88, }, [0xFF89]={ adobename="nokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER NO", direction="l", linebreak="al", specials={ "narrow", 0x30CE }, unicodeslot=0xFF89, }, [0xFF8A]={ adobename="hakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER HA", direction="l", linebreak="al", specials={ "narrow", 0x30CF }, unicodeslot=0xFF8A, }, [0xFF8B]={ adobename="hikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER HI", direction="l", linebreak="al", specials={ "narrow", 0x30D2 }, unicodeslot=0xFF8B, }, [0xFF8C]={ adobename="hukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER HU", direction="l", linebreak="al", specials={ "narrow", 0x30D5 }, unicodeslot=0xFF8C, }, [0xFF8D]={ adobename="hekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER HE", direction="l", linebreak="al", specials={ "narrow", 0x30D8 }, unicodeslot=0xFF8D, }, [0xFF8E]={ adobename="hokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER HO", direction="l", linebreak="al", specials={ "narrow", 0x30DB }, unicodeslot=0xFF8E, }, [0xFF8F]={ adobename="makatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER MA", direction="l", linebreak="al", specials={ "narrow", 0x30DE }, unicodeslot=0xFF8F, }, [0xFF90]={ adobename="mikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER MI", direction="l", linebreak="al", specials={ "narrow", 0x30DF }, unicodeslot=0xFF90, }, [0xFF91]={ adobename="mukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER MU", direction="l", linebreak="al", specials={ "narrow", 0x30E0 }, unicodeslot=0xFF91, }, [0xFF92]={ adobename="mekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER ME", direction="l", linebreak="al", specials={ "narrow", 0x30E1 }, unicodeslot=0xFF92, }, [0xFF93]={ adobename="mokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER MO", direction="l", linebreak="al", specials={ "narrow", 0x30E2 }, unicodeslot=0xFF93, }, [0xFF94]={ adobename="yakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER YA", direction="l", linebreak="al", specials={ "narrow", 0x30E4 }, unicodeslot=0xFF94, }, [0xFF95]={ adobename="yukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER YU", direction="l", linebreak="al", specials={ "narrow", 0x30E6 }, unicodeslot=0xFF95, }, [0xFF96]={ adobename="yokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER YO", direction="l", linebreak="al", specials={ "narrow", 0x30E8 }, unicodeslot=0xFF96, }, [0xFF97]={ adobename="rakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER RA", direction="l", linebreak="al", specials={ "narrow", 0x30E9 }, unicodeslot=0xFF97, }, [0xFF98]={ adobename="rikatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER RI", direction="l", linebreak="al", specials={ "narrow", 0x30EA }, unicodeslot=0xFF98, }, [0xFF99]={ adobename="rukatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER RU", direction="l", linebreak="al", specials={ "narrow", 0x30EB }, unicodeslot=0xFF99, }, [0xFF9A]={ adobename="rekatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER RE", direction="l", linebreak="al", specials={ "narrow", 0x30EC }, unicodeslot=0xFF9A, }, [0xFF9B]={ adobename="rokatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER RO", direction="l", linebreak="al", specials={ "narrow", 0x30ED }, unicodeslot=0xFF9B, }, [0xFF9C]={ adobename="wakatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER WA", direction="l", linebreak="al", specials={ "narrow", 0x30EF }, unicodeslot=0xFF9C, }, [0xFF9D]={ adobename="nkatakanahalfwidth", category="lo", cjkwd="h", description="HALFWIDTH KATAKANA LETTER N", direction="l", linebreak="al", specials={ "narrow", 0x30F3 }, unicodeslot=0xFF9D, }, [0xFF9E]={ adobename="voicedmarkkanahalfwidth", category="lm", cjkwd="h", description="HALFWIDTH KATAKANA VOICED SOUND MARK", direction="l", linebreak="ns", specials={ "narrow", 0x3099 }, unicodeslot=0xFF9E, }, [0xFF9F]={ adobename="semivoicedmarkkanahalfwidth", category="lm", cjkwd="h", description="HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK", direction="l", linebreak="ns", specials={ "narrow", 0x309A }, unicodeslot=0xFF9F, }, [0xFFA0]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL FILLER", direction="l", linebreak="al", specials={ "narrow", 0x3164 }, unicodeslot=0xFFA0, }, [0xFFA1]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER KIYEOK", direction="l", linebreak="al", specials={ "narrow", 0x3131 }, unicodeslot=0xFFA1, }, [0xFFA2]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER SSANGKIYEOK", direction="l", linebreak="al", specials={ "narrow", 0x3132 }, unicodeslot=0xFFA2, }, [0xFFA3]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER KIYEOK-SIOS", direction="l", linebreak="al", specials={ "narrow", 0x3133 }, unicodeslot=0xFFA3, }, [0xFFA4]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER NIEUN", direction="l", linebreak="al", specials={ "narrow", 0x3134 }, unicodeslot=0xFFA4, }, [0xFFA5]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER NIEUN-CIEUC", direction="l", linebreak="al", specials={ "narrow", 0x3135 }, unicodeslot=0xFFA5, }, [0xFFA6]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER NIEUN-HIEUH", direction="l", linebreak="al", specials={ "narrow", 0x3136 }, unicodeslot=0xFFA6, }, [0xFFA7]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER TIKEUT", direction="l", linebreak="al", specials={ "narrow", 0x3137 }, unicodeslot=0xFFA7, }, [0xFFA8]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER SSANGTIKEUT", direction="l", linebreak="al", specials={ "narrow", 0x3138 }, unicodeslot=0xFFA8, }, [0xFFA9]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL", direction="l", linebreak="al", specials={ "narrow", 0x3139 }, unicodeslot=0xFFA9, }, [0xFFAA]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-KIYEOK", direction="l", linebreak="al", specials={ "narrow", 0x313A }, unicodeslot=0xFFAA, }, [0xFFAB]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-MIEUM", direction="l", linebreak="al", specials={ "narrow", 0x313B }, unicodeslot=0xFFAB, }, [0xFFAC]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-PIEUP", direction="l", linebreak="al", specials={ "narrow", 0x313C }, unicodeslot=0xFFAC, }, [0xFFAD]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-SIOS", direction="l", linebreak="al", specials={ "narrow", 0x313D }, unicodeslot=0xFFAD, }, [0xFFAE]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-THIEUTH", direction="l", linebreak="al", specials={ "narrow", 0x313E }, unicodeslot=0xFFAE, }, [0xFFAF]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH", direction="l", linebreak="al", specials={ "narrow", 0x313F }, unicodeslot=0xFFAF, }, [0xFFB0]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER RIEUL-HIEUH", direction="l", linebreak="al", specials={ "narrow", 0x3140 }, unicodeslot=0xFFB0, }, [0xFFB1]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER MIEUM", direction="l", linebreak="al", specials={ "narrow", 0x3141 }, unicodeslot=0xFFB1, }, [0xFFB2]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER PIEUP", direction="l", linebreak="al", specials={ "narrow", 0x3142 }, unicodeslot=0xFFB2, }, [0xFFB3]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER SSANGPIEUP", direction="l", linebreak="al", specials={ "narrow", 0x3143 }, unicodeslot=0xFFB3, }, [0xFFB4]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER PIEUP-SIOS", direction="l", linebreak="al", specials={ "narrow", 0x3144 }, unicodeslot=0xFFB4, }, [0xFFB5]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER SIOS", direction="l", linebreak="al", specials={ "narrow", 0x3145 }, unicodeslot=0xFFB5, }, [0xFFB6]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER SSANGSIOS", direction="l", linebreak="al", specials={ "narrow", 0x3146 }, unicodeslot=0xFFB6, }, [0xFFB7]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER IEUNG", direction="l", linebreak="al", specials={ "narrow", 0x3147 }, unicodeslot=0xFFB7, }, [0xFFB8]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER CIEUC", direction="l", linebreak="al", specials={ "narrow", 0x3148 }, unicodeslot=0xFFB8, }, [0xFFB9]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER SSANGCIEUC", direction="l", linebreak="al", specials={ "narrow", 0x3149 }, unicodeslot=0xFFB9, }, [0xFFBA]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER CHIEUCH", direction="l", linebreak="al", specials={ "narrow", 0x314A }, unicodeslot=0xFFBA, }, [0xFFBB]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER KHIEUKH", direction="l", linebreak="al", specials={ "narrow", 0x314B }, unicodeslot=0xFFBB, }, [0xFFBC]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER THIEUTH", direction="l", linebreak="al", specials={ "narrow", 0x314C }, unicodeslot=0xFFBC, }, [0xFFBD]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER PHIEUPH", direction="l", linebreak="al", specials={ "narrow", 0x314D }, unicodeslot=0xFFBD, }, [0xFFBE]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER HIEUH", direction="l", linebreak="al", specials={ "narrow", 0x314E }, unicodeslot=0xFFBE, }, [0xFFC2]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER A", direction="l", linebreak="al", specials={ "narrow", 0x314F }, unicodeslot=0xFFC2, }, [0xFFC3]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER AE", direction="l", linebreak="al", specials={ "narrow", 0x3150 }, unicodeslot=0xFFC3, }, [0xFFC4]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YA", direction="l", linebreak="al", specials={ "narrow", 0x3151 }, unicodeslot=0xFFC4, }, [0xFFC5]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YAE", direction="l", linebreak="al", specials={ "narrow", 0x3152 }, unicodeslot=0xFFC5, }, [0xFFC6]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER EO", direction="l", linebreak="al", specials={ "narrow", 0x3153 }, unicodeslot=0xFFC6, }, [0xFFC7]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER E", direction="l", linebreak="al", specials={ "narrow", 0x3154 }, unicodeslot=0xFFC7, }, [0xFFCA]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YEO", direction="l", linebreak="al", specials={ "narrow", 0x3155 }, unicodeslot=0xFFCA, }, [0xFFCB]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YE", direction="l", linebreak="al", specials={ "narrow", 0x3156 }, unicodeslot=0xFFCB, }, [0xFFCC]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER O", direction="l", linebreak="al", specials={ "narrow", 0x3157 }, unicodeslot=0xFFCC, }, [0xFFCD]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER WA", direction="l", linebreak="al", specials={ "narrow", 0x3158 }, unicodeslot=0xFFCD, }, [0xFFCE]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER WAE", direction="l", linebreak="al", specials={ "narrow", 0x3159 }, unicodeslot=0xFFCE, }, [0xFFCF]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER OE", direction="l", linebreak="al", specials={ "narrow", 0x315A }, unicodeslot=0xFFCF, }, [0xFFD2]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YO", direction="l", linebreak="al", specials={ "narrow", 0x315B }, unicodeslot=0xFFD2, }, [0xFFD3]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER U", direction="l", linebreak="al", specials={ "narrow", 0x315C }, unicodeslot=0xFFD3, }, [0xFFD4]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER WEO", direction="l", linebreak="al", specials={ "narrow", 0x315D }, unicodeslot=0xFFD4, }, [0xFFD5]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER WE", direction="l", linebreak="al", specials={ "narrow", 0x315E }, unicodeslot=0xFFD5, }, [0xFFD6]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER WI", direction="l", linebreak="al", specials={ "narrow", 0x315F }, unicodeslot=0xFFD6, }, [0xFFD7]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YU", direction="l", linebreak="al", specials={ "narrow", 0x3160 }, unicodeslot=0xFFD7, }, [0xFFDA]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER EU", direction="l", linebreak="al", specials={ "narrow", 0x3161 }, unicodeslot=0xFFDA, }, [0xFFDB]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER YI", direction="l", linebreak="al", specials={ "narrow", 0x3162 }, unicodeslot=0xFFDB, }, [0xFFDC]={ category="lo", cjkwd="h", description="HALFWIDTH HANGUL LETTER I", direction="l", linebreak="al", specials={ "narrow", 0x3163 }, unicodeslot=0xFFDC, }, [0xFFE0]={ adobename="centmonospace", category="sc", cjkwd="f", description="FULLWIDTH CENT SIGN", direction="et", linebreak="po", specials={ "wide", 0x00A2 }, unicodeslot=0xFFE0, }, [0xFFE1]={ adobename="sterlingmonospace", category="sc", cjkwd="f", description="FULLWIDTH POUND SIGN", direction="et", linebreak="pr", specials={ "wide", 0x00A3 }, unicodeslot=0xFFE1, }, [0xFFE2]={ category="sm", cjkwd="f", description="FULLWIDTH NOT SIGN", direction="on", linebreak="id", specials={ "wide", 0x00AC }, unicodeslot=0xFFE2, }, [0xFFE3]={ adobename="macronmonospace", category="sk", cjkwd="f", description="FULLWIDTH MACRON", direction="on", linebreak="id", specials={ "wide", 0x00AF }, unicodeslot=0xFFE3, }, [0xFFE4]={ category="so", cjkwd="f", description="FULLWIDTH BROKEN BAR", direction="on", linebreak="id", specials={ "wide", 0x00A6 }, unicodeslot=0xFFE4, }, [0xFFE5]={ adobename="yenmonospace", category="sc", cjkwd="f", description="FULLWIDTH YEN SIGN", direction="et", linebreak="pr", specials={ "wide", 0x00A5 }, unicodeslot=0xFFE5, }, [0xFFE6]={ adobename="wonmonospace", category="sc", cjkwd="f", description="FULLWIDTH WON SIGN", direction="et", linebreak="pr", specials={ "wide", 0x20A9 }, unicodeslot=0xFFE6, }, [0xFFE8]={ category="so", cjkwd="h", description="HALFWIDTH FORMS LIGHT VERTICAL", direction="on", linebreak="al", specials={ "narrow", 0x2502 }, unicodeslot=0xFFE8, }, [0xFFE9]={ category="sm", cjkwd="h", description="HALFWIDTH LEFTWARDS ARROW", direction="on", linebreak="al", specials={ "narrow", 0x2190 }, unicodeslot=0xFFE9, }, [0xFFEA]={ category="sm", cjkwd="h", description="HALFWIDTH UPWARDS ARROW", direction="on", linebreak="al", specials={ "narrow", 0x2191 }, unicodeslot=0xFFEA, }, [0xFFEB]={ category="sm", cjkwd="h", description="HALFWIDTH RIGHTWARDS ARROW", direction="on", linebreak="al", specials={ "narrow", 0x2192 }, unicodeslot=0xFFEB, }, [0xFFEC]={ category="sm", cjkwd="h", description="HALFWIDTH DOWNWARDS ARROW", direction="on", linebreak="al", specials={ "narrow", 0x2193 }, unicodeslot=0xFFEC, }, [0xFFED]={ category="so", cjkwd="h", description="HALFWIDTH BLACK SQUARE", direction="on", linebreak="al", specials={ "narrow", 0x25A0 }, unicodeslot=0xFFED, }, [0xFFEE]={ category="so", cjkwd="h", description="HALFWIDTH WHITE CIRCLE", direction="on", linebreak="al", specials={ "narrow", 0x25CB }, unicodeslot=0xFFEE, }, [0xFFF9]={ category="cf", description="INTERLINEAR ANNOTATION ANCHOR", direction="on", linebreak="cm", unicodeslot=0xFFF9, visible="yes", }, [0xFFFA]={ category="cf", description="INTERLINEAR ANNOTATION SEPARATOR", direction="on", linebreak="cm", unicodeslot=0xFFFA, visible="yes", }, [0xFFFB]={ category="cf", description="INTERLINEAR ANNOTATION TERMINATOR", direction="on", linebreak="cm", unicodeslot=0xFFFB, visible="yes", }, [0xFFFC]={ category="so", description="OBJECT REPLACEMENT CHARACTER", direction="on", linebreak="cb", unicodeslot=0xFFFC, }, [0xFFFD]={ category="so", cjkwd="a", description="REPLACEMENT CHARACTER", direction="on", linebreak="ai", unicodeslot=0xFFFD, }, [0x10000]={ category="lo", description="LINEAR B SYLLABLE B0x0008 A", direction="l", linebreak="al", unicodeslot=0x10000, }, [0x10001]={ category="lo", description="LINEAR B SYLLABLE B0x0026 E", direction="l", linebreak="al", unicodeslot=0x10001, }, [0x10002]={ category="lo", description="LINEAR B SYLLABLE B0x001C I", direction="l", linebreak="al", unicodeslot=0x10002, }, [0x10003]={ category="lo", description="LINEAR B SYLLABLE B0x003D O", direction="l", linebreak="al", unicodeslot=0x10003, }, [0x10004]={ category="lo", description="LINEAR B SYLLABLE B0x000A U", direction="l", linebreak="al", unicodeslot=0x10004, }, [0x10005]={ category="lo", description="LINEAR B SYLLABLE B0x0001 DA", direction="l", linebreak="al", unicodeslot=0x10005, }, [0x10006]={ category="lo", description="LINEAR B SYLLABLE B0x002D DE", direction="l", linebreak="al", unicodeslot=0x10006, }, [0x10007]={ category="lo", description="LINEAR B SYLLABLE B0x0007 DI", direction="l", linebreak="al", unicodeslot=0x10007, }, [0x10008]={ category="lo", description="LINEAR B SYLLABLE B0x000E DO", direction="l", linebreak="al", unicodeslot=0x10008, }, [0x10009]={ category="lo", description="LINEAR B SYLLABLE B0x0033 DU", direction="l", linebreak="al", unicodeslot=0x10009, }, [0x1000A]={ category="lo", description="LINEAR B SYLLABLE B0x0039 JA", direction="l", linebreak="al", unicodeslot=0x1000A, }, [0x1000B]={ category="lo", description="LINEAR B SYLLABLE B0x002E JE", direction="l", linebreak="al", unicodeslot=0x1000B, }, [0x1000D]={ category="lo", description="LINEAR B SYLLABLE B0x0024 JO", direction="l", linebreak="al", unicodeslot=0x1000D, }, [0x1000E]={ category="lo", description="LINEAR B SYLLABLE B0x0041 JU", direction="l", linebreak="al", unicodeslot=0x1000E, }, [0x1000F]={ category="lo", description="LINEAR B SYLLABLE B0x004D KA", direction="l", linebreak="al", unicodeslot=0x1000F, }, [0x10010]={ category="lo", description="LINEAR B SYLLABLE B0x002C KE", direction="l", linebreak="al", unicodeslot=0x10010, }, [0x10011]={ category="lo", description="LINEAR B SYLLABLE B0x0043 KI", direction="l", linebreak="al", unicodeslot=0x10011, }, [0x10012]={ category="lo", description="LINEAR B SYLLABLE B0x0046 KO", direction="l", linebreak="al", unicodeslot=0x10012, }, [0x10013]={ category="lo", description="LINEAR B SYLLABLE B0x0051 KU", direction="l", linebreak="al", unicodeslot=0x10013, }, [0x10014]={ category="lo", description="LINEAR B SYLLABLE B0x0050 MA", direction="l", linebreak="al", unicodeslot=0x10014, }, [0x10015]={ category="lo", description="LINEAR B SYLLABLE B0x000D ME", direction="l", linebreak="al", unicodeslot=0x10015, }, [0x10016]={ category="lo", description="LINEAR B SYLLABLE B0x0049 MI", direction="l", linebreak="al", unicodeslot=0x10016, }, [0x10017]={ category="lo", description="LINEAR B SYLLABLE B0x000F MO", direction="l", linebreak="al", unicodeslot=0x10017, }, [0x10018]={ category="lo", description="LINEAR B SYLLABLE B0x0017 MU", direction="l", linebreak="al", unicodeslot=0x10018, }, [0x10019]={ category="lo", description="LINEAR B SYLLABLE B0x0006 NA", direction="l", linebreak="al", unicodeslot=0x10019, }, [0x1001A]={ category="lo", description="LINEAR B SYLLABLE B0x0018 NE", direction="l", linebreak="al", unicodeslot=0x1001A, }, [0x1001B]={ category="lo", description="LINEAR B SYLLABLE B0x001E NI", direction="l", linebreak="al", unicodeslot=0x1001B, }, [0x1001C]={ category="lo", description="LINEAR B SYLLABLE B0x0034 NO", direction="l", linebreak="al", unicodeslot=0x1001C, }, [0x1001D]={ category="lo", description="LINEAR B SYLLABLE B0x0037 NU", direction="l", linebreak="al", unicodeslot=0x1001D, }, [0x1001E]={ category="lo", description="LINEAR B SYLLABLE B0x0003 PA", direction="l", linebreak="al", unicodeslot=0x1001E, }, [0x1001F]={ category="lo", description="LINEAR B SYLLABLE B0x0048 PE", direction="l", linebreak="al", unicodeslot=0x1001F, }, [0x10020]={ category="lo", description="LINEAR B SYLLABLE B0x0027 PI", direction="l", linebreak="al", unicodeslot=0x10020, }, [0x10021]={ category="lo", description="LINEAR B SYLLABLE B0x000B PO", direction="l", linebreak="al", unicodeslot=0x10021, }, [0x10022]={ category="lo", description="LINEAR B SYLLABLE B0x0032 PU", direction="l", linebreak="al", unicodeslot=0x10022, }, [0x10023]={ category="lo", description="LINEAR B SYLLABLE B0x0010 QA", direction="l", linebreak="al", unicodeslot=0x10023, }, [0x10024]={ category="lo", description="LINEAR B SYLLABLE B0x004E QE", direction="l", linebreak="al", unicodeslot=0x10024, }, [0x10025]={ category="lo", description="LINEAR B SYLLABLE B0x0015 QI", direction="l", linebreak="al", unicodeslot=0x10025, }, [0x10026]={ category="lo", description="LINEAR B SYLLABLE B0x0020 QO", direction="l", linebreak="al", unicodeslot=0x10026, }, [0x10028]={ category="lo", description="LINEAR B SYLLABLE B0x003C RA", direction="l", linebreak="al", unicodeslot=0x10028, }, [0x10029]={ category="lo", description="LINEAR B SYLLABLE B0x001B RE", direction="l", linebreak="al", unicodeslot=0x10029, }, [0x1002A]={ category="lo", description="LINEAR B SYLLABLE B0x0035 RI", direction="l", linebreak="al", unicodeslot=0x1002A, }, [0x1002B]={ category="lo", description="LINEAR B SYLLABLE B0x0002 RO", direction="l", linebreak="al", unicodeslot=0x1002B, }, [0x1002C]={ category="lo", description="LINEAR B SYLLABLE B0x001A RU", direction="l", linebreak="al", unicodeslot=0x1002C, }, [0x1002D]={ category="lo", description="LINEAR B SYLLABLE B0x001F SA", direction="l", linebreak="al", unicodeslot=0x1002D, }, [0x1002E]={ category="lo", description="LINEAR B SYLLABLE B0x0009 SE", direction="l", linebreak="al", unicodeslot=0x1002E, }, [0x1002F]={ category="lo", description="LINEAR B SYLLABLE B0x0029 SI", direction="l", linebreak="al", unicodeslot=0x1002F, }, [0x10030]={ category="lo", description="LINEAR B SYLLABLE B0x000C SO", direction="l", linebreak="al", unicodeslot=0x10030, }, [0x10031]={ category="lo", description="LINEAR B SYLLABLE B0x003A SU", direction="l", linebreak="al", unicodeslot=0x10031, }, [0x10032]={ category="lo", description="LINEAR B SYLLABLE B0x003B TA", direction="l", linebreak="al", unicodeslot=0x10032, }, [0x10033]={ category="lo", description="LINEAR B SYLLABLE B0x0004 TE", direction="l", linebreak="al", unicodeslot=0x10033, }, [0x10034]={ category="lo", description="LINEAR B SYLLABLE B0x0025 TI", direction="l", linebreak="al", unicodeslot=0x10034, }, [0x10035]={ category="lo", description="LINEAR B SYLLABLE B0x0005 TO", direction="l", linebreak="al", unicodeslot=0x10035, }, [0x10036]={ category="lo", description="LINEAR B SYLLABLE B0x0045 TU", direction="l", linebreak="al", unicodeslot=0x10036, }, [0x10037]={ category="lo", description="LINEAR B SYLLABLE B0x0036 WA", direction="l", linebreak="al", unicodeslot=0x10037, }, [0x10038]={ category="lo", description="LINEAR B SYLLABLE B0x004B WE", direction="l", linebreak="al", unicodeslot=0x10038, }, [0x10039]={ category="lo", description="LINEAR B SYLLABLE B0x0028 WI", direction="l", linebreak="al", unicodeslot=0x10039, }, [0x1003A]={ category="lo", description="LINEAR B SYLLABLE B0x002A WO", direction="l", linebreak="al", unicodeslot=0x1003A, }, [0x1003C]={ category="lo", description="LINEAR B SYLLABLE B0x0011 ZA", direction="l", linebreak="al", unicodeslot=0x1003C, }, [0x1003D]={ category="lo", description="LINEAR B SYLLABLE B0x004A ZE", direction="l", linebreak="al", unicodeslot=0x1003D, }, [0x1003F]={ category="lo", description="LINEAR B SYLLABLE B0x0014 ZO", direction="l", linebreak="al", unicodeslot=0x1003F, }, [0x10040]={ category="lo", description="LINEAR B SYLLABLE B0x0019 A0x0002", direction="l", linebreak="al", unicodeslot=0x10040, }, [0x10041]={ category="lo", description="LINEAR B SYLLABLE B0x002B A0x0003", direction="l", linebreak="al", unicodeslot=0x10041, }, [0x10042]={ category="lo", description="LINEAR B SYLLABLE B0x0055 AU", direction="l", linebreak="al", unicodeslot=0x10042, }, [0x10043]={ category="lo", description="LINEAR B SYLLABLE B0x0047 DWE", direction="l", linebreak="al", unicodeslot=0x10043, }, [0x10044]={ category="lo", description="LINEAR B SYLLABLE B0x005A DWO", direction="l", linebreak="al", unicodeslot=0x10044, }, [0x10045]={ category="lo", description="LINEAR B SYLLABLE B0x0030 NWA", direction="l", linebreak="al", unicodeslot=0x10045, }, [0x10046]={ category="lo", description="LINEAR B SYLLABLE B0x001D PU0x0002", direction="l", linebreak="al", unicodeslot=0x10046, }, [0x10047]={ category="lo", description="LINEAR B SYLLABLE B0x003E PTE", direction="l", linebreak="al", unicodeslot=0x10047, }, [0x10048]={ category="lo", description="LINEAR B SYLLABLE B0x004C RA0x0002", direction="l", linebreak="al", unicodeslot=0x10048, }, [0x10049]={ category="lo", description="LINEAR B SYLLABLE B0x0021 RA0x0003", direction="l", linebreak="al", unicodeslot=0x10049, }, [0x1004A]={ category="lo", description="LINEAR B SYLLABLE B0x0044 RO0x0002", direction="l", linebreak="al", unicodeslot=0x1004A, }, [0x1004B]={ category="lo", description="LINEAR B SYLLABLE B0x0042 TA0x0002", direction="l", linebreak="al", unicodeslot=0x1004B, }, [0x1004C]={ category="lo", description="LINEAR B SYLLABLE B0x0057 TWE", direction="l", linebreak="al", unicodeslot=0x1004C, }, [0x1004D]={ category="lo", description="LINEAR B SYLLABLE B0x005B TWO", direction="l", linebreak="al", unicodeslot=0x1004D, }, [0x10050]={ category="lo", description="LINEAR B SYMBOL B0x0012", direction="l", linebreak="al", unicodeslot=0x10050, }, [0x10051]={ category="lo", description="LINEAR B SYMBOL B0x0013", direction="l", linebreak="al", unicodeslot=0x10051, }, [0x10052]={ category="lo", description="LINEAR B SYMBOL B0x0016", direction="l", linebreak="al", unicodeslot=0x10052, }, [0x10053]={ category="lo", description="LINEAR B SYMBOL B0x0022", direction="l", linebreak="al", unicodeslot=0x10053, }, [0x10054]={ category="lo", description="LINEAR B SYMBOL B0x002F", direction="l", linebreak="al", unicodeslot=0x10054, }, [0x10055]={ category="lo", description="LINEAR B SYMBOL B0x0031", direction="l", linebreak="al", unicodeslot=0x10055, }, [0x10056]={ category="lo", description="LINEAR B SYMBOL B0x0038", direction="l", linebreak="al", unicodeslot=0x10056, }, [0x10057]={ category="lo", description="LINEAR B SYMBOL B0x003F", direction="l", linebreak="al", unicodeslot=0x10057, }, [0x10058]={ category="lo", description="LINEAR B SYMBOL B0x0040", direction="l", linebreak="al", unicodeslot=0x10058, }, [0x10059]={ category="lo", description="LINEAR B SYMBOL B0x004F", direction="l", linebreak="al", unicodeslot=0x10059, }, [0x1005A]={ category="lo", description="LINEAR B SYMBOL B0x0052", direction="l", linebreak="al", unicodeslot=0x1005A, }, [0x1005B]={ category="lo", description="LINEAR B SYMBOL B0x0053", direction="l", linebreak="al", unicodeslot=0x1005B, }, [0x1005C]={ category="lo", description="LINEAR B SYMBOL B0x0056", direction="l", linebreak="al", unicodeslot=0x1005C, }, [0x1005D]={ category="lo", description="LINEAR B SYMBOL B0x0059", direction="l", linebreak="al", unicodeslot=0x1005D, }, [0x10080]={ category="lo", description="LINEAR B IDEOGRAM B0x0064 MAN", direction="l", linebreak="al", unicodeslot=0x10080, }, [0x10081]={ category="lo", description="LINEAR B IDEOGRAM B0x0066 WOMAN", direction="l", linebreak="al", unicodeslot=0x10081, }, [0x10082]={ category="lo", description="LINEAR B IDEOGRAM B0x0068 DEER", direction="l", linebreak="al", unicodeslot=0x10082, }, [0x10083]={ category="lo", description="LINEAR B IDEOGRAM B0x0069 EQUID", direction="l", linebreak="al", unicodeslot=0x10083, }, [0x10084]={ category="lo", description="LINEAR B IDEOGRAM B0x0069F MARE", direction="l", linebreak="al", unicodeslot=0x10084, }, [0x10085]={ category="lo", description="LINEAR B IDEOGRAM B0x0069M STALLION", direction="l", linebreak="al", unicodeslot=0x10085, }, [0x10086]={ category="lo", description="LINEAR B IDEOGRAM B0x006AF EWE", direction="l", linebreak="al", unicodeslot=0x10086, }, [0x10087]={ category="lo", description="LINEAR B IDEOGRAM B0x006AM RAM", direction="l", linebreak="al", unicodeslot=0x10087, }, [0x10088]={ category="lo", description="LINEAR B IDEOGRAM B0x006BF SHE-GOAT", direction="l", linebreak="al", unicodeslot=0x10088, }, [0x10089]={ category="lo", description="LINEAR B IDEOGRAM B0x006BM HE-GOAT", direction="l", linebreak="al", unicodeslot=0x10089, }, [0x1008A]={ category="lo", description="LINEAR B IDEOGRAM B0x006CF SOW", direction="l", linebreak="al", unicodeslot=0x1008A, }, [0x1008B]={ category="lo", description="LINEAR B IDEOGRAM B0x006CM BOAR", direction="l", linebreak="al", unicodeslot=0x1008B, }, [0x1008C]={ category="lo", description="LINEAR B IDEOGRAM B0x006DF COW", direction="l", linebreak="al", unicodeslot=0x1008C, }, [0x1008D]={ category="lo", description="LINEAR B IDEOGRAM B0x006DM BULL", direction="l", linebreak="al", unicodeslot=0x1008D, }, [0x1008E]={ category="lo", description="LINEAR B IDEOGRAM B0x0078 WHEAT", direction="l", linebreak="al", unicodeslot=0x1008E, }, [0x1008F]={ category="lo", description="LINEAR B IDEOGRAM B0x0079 BARLEY", direction="l", linebreak="al", unicodeslot=0x1008F, }, [0x10090]={ category="lo", description="LINEAR B IDEOGRAM B0x007A OLIVE", direction="l", linebreak="al", unicodeslot=0x10090, }, [0x10091]={ category="lo", description="LINEAR B IDEOGRAM B0x007B SPICE", direction="l", linebreak="al", unicodeslot=0x10091, }, [0x10092]={ category="lo", description="LINEAR B IDEOGRAM B0x007D CYPERUS", direction="l", linebreak="al", unicodeslot=0x10092, }, [0x10093]={ category="lo", description="LINEAR B MONOGRAM B0x007F KAPO", direction="l", linebreak="al", unicodeslot=0x10093, }, [0x10094]={ category="lo", description="LINEAR B MONOGRAM B0x0080 KANAKO", direction="l", linebreak="al", unicodeslot=0x10094, }, [0x10095]={ category="lo", description="LINEAR B IDEOGRAM B0x0082 OIL", direction="l", linebreak="al", unicodeslot=0x10095, }, [0x10096]={ category="lo", description="LINEAR B IDEOGRAM B0x0083 WINE", direction="l", linebreak="al", unicodeslot=0x10096, }, [0x10097]={ category="lo", description="LINEAR B IDEOGRAM B0x0084", direction="l", linebreak="al", unicodeslot=0x10097, }, [0x10098]={ category="lo", description="LINEAR B MONOGRAM B0x0085 AREPA", direction="l", linebreak="al", unicodeslot=0x10098, }, [0x10099]={ category="lo", description="LINEAR B MONOGRAM B0x0087 MERI", direction="l", linebreak="al", unicodeslot=0x10099, }, [0x1009A]={ category="lo", description="LINEAR B IDEOGRAM B0x008C BRONZE", direction="l", linebreak="al", unicodeslot=0x1009A, }, [0x1009B]={ category="lo", description="LINEAR B IDEOGRAM B0x008D GOLD", direction="l", linebreak="al", unicodeslot=0x1009B, }, [0x1009C]={ category="lo", description="LINEAR B IDEOGRAM B0x008E", direction="l", linebreak="al", unicodeslot=0x1009C, }, [0x1009D]={ category="lo", description="LINEAR B IDEOGRAM B0x0091 WOOL", direction="l", linebreak="al", unicodeslot=0x1009D, }, [0x1009E]={ category="lo", description="LINEAR B IDEOGRAM B0x0092", direction="l", linebreak="al", unicodeslot=0x1009E, }, [0x1009F]={ category="lo", description="LINEAR B IDEOGRAM B0x0096", direction="l", linebreak="al", unicodeslot=0x1009F, }, [0x100A0]={ category="lo", description="LINEAR B IDEOGRAM B0x0097 HORN", direction="l", linebreak="al", unicodeslot=0x100A0, }, [0x100A1]={ category="lo", description="LINEAR B IDEOGRAM B0x0098", direction="l", linebreak="al", unicodeslot=0x100A1, }, [0x100A2]={ category="lo", description="LINEAR B IDEOGRAM B0x0099", direction="l", linebreak="al", unicodeslot=0x100A2, }, [0x100A3]={ category="lo", description="LINEAR B IDEOGRAM B0x009A", direction="l", linebreak="al", unicodeslot=0x100A3, }, [0x100A4]={ category="lo", description="LINEAR B MONOGRAM B0x009C TURO0x0002", direction="l", linebreak="al", unicodeslot=0x100A4, }, [0x100A5]={ category="lo", description="LINEAR B IDEOGRAM B0x009D", direction="l", linebreak="al", unicodeslot=0x100A5, }, [0x100A6]={ category="lo", description="LINEAR B IDEOGRAM B0x009E", direction="l", linebreak="al", unicodeslot=0x100A6, }, [0x100A7]={ category="lo", description="LINEAR B IDEOGRAM B0x009F CLOTH", direction="l", linebreak="al", unicodeslot=0x100A7, }, [0x100A8]={ category="lo", description="LINEAR B IDEOGRAM B0x00A0", direction="l", linebreak="al", unicodeslot=0x100A8, }, [0x100A9]={ category="lo", description="LINEAR B IDEOGRAM B0x00A1", direction="l", linebreak="al", unicodeslot=0x100A9, }, [0x100AA]={ category="lo", description="LINEAR B IDEOGRAM B0x00A2 GARMENT", direction="l", linebreak="al", unicodeslot=0x100AA, }, [0x100AB]={ category="lo", description="LINEAR B IDEOGRAM B0x00A3 ARMOUR", direction="l", linebreak="al", unicodeslot=0x100AB, }, [0x100AC]={ category="lo", description="LINEAR B IDEOGRAM B0x00A4", direction="l", linebreak="al", unicodeslot=0x100AC, }, [0x100AD]={ category="lo", description="LINEAR B IDEOGRAM B0x00A5", direction="l", linebreak="al", unicodeslot=0x100AD, }, [0x100AE]={ category="lo", description="LINEAR B IDEOGRAM B0x00A6", direction="l", linebreak="al", unicodeslot=0x100AE, }, [0x100AF]={ category="lo", description="LINEAR B IDEOGRAM B0x00A7", direction="l", linebreak="al", unicodeslot=0x100AF, }, [0x100B0]={ category="lo", description="LINEAR B IDEOGRAM B0x00A8", direction="l", linebreak="al", unicodeslot=0x100B0, }, [0x100B1]={ category="lo", description="LINEAR B IDEOGRAM B0x00A9", direction="l", linebreak="al", unicodeslot=0x100B1, }, [0x100B2]={ category="lo", description="LINEAR B IDEOGRAM B0x00AA", direction="l", linebreak="al", unicodeslot=0x100B2, }, [0x100B3]={ category="lo", description="LINEAR B IDEOGRAM B0x00AB", direction="l", linebreak="al", unicodeslot=0x100B3, }, [0x100B4]={ category="lo", description="LINEAR B IDEOGRAM B0x00AC", direction="l", linebreak="al", unicodeslot=0x100B4, }, [0x100B5]={ category="lo", description="LINEAR B IDEOGRAM B0x00AD MONTH", direction="l", linebreak="al", unicodeslot=0x100B5, }, [0x100B6]={ category="lo", description="LINEAR B IDEOGRAM B0x00AE", direction="l", linebreak="al", unicodeslot=0x100B6, }, [0x100B7]={ category="lo", description="LINEAR B IDEOGRAM B0x00B0 TREE", direction="l", linebreak="al", unicodeslot=0x100B7, }, [0x100B8]={ category="lo", description="LINEAR B IDEOGRAM B0x00B1", direction="l", linebreak="al", unicodeslot=0x100B8, }, [0x100B9]={ category="lo", description="LINEAR B IDEOGRAM B0x00B2", direction="l", linebreak="al", unicodeslot=0x100B9, }, [0x100BA]={ category="lo", description="LINEAR B IDEOGRAM B0x00B3", direction="l", linebreak="al", unicodeslot=0x100BA, }, [0x100BB]={ category="lo", description="LINEAR B IDEOGRAM B0x00B4", direction="l", linebreak="al", unicodeslot=0x100BB, }, [0x100BC]={ category="lo", description="LINEAR B IDEOGRAM B0x00B5", direction="l", linebreak="al", unicodeslot=0x100BC, }, [0x100BD]={ category="lo", description="LINEAR B IDEOGRAM B0x00B6", direction="l", linebreak="al", unicodeslot=0x100BD, }, [0x100BE]={ category="lo", description="LINEAR B IDEOGRAM B0x00B7", direction="l", linebreak="al", unicodeslot=0x100BE, }, [0x100BF]={ category="lo", description="LINEAR B IDEOGRAM B0x00B8", direction="l", linebreak="al", unicodeslot=0x100BF, }, [0x100C0]={ category="lo", description="LINEAR B IDEOGRAM B0x00B9", direction="l", linebreak="al", unicodeslot=0x100C0, }, [0x100C1]={ category="lo", description="LINEAR B IDEOGRAM B0x00BD", direction="l", linebreak="al", unicodeslot=0x100C1, }, [0x100C2]={ category="lo", description="LINEAR B IDEOGRAM B0x00BE", direction="l", linebreak="al", unicodeslot=0x100C2, }, [0x100C3]={ category="lo", description="LINEAR B IDEOGRAM B0x00BF HELMET", direction="l", linebreak="al", unicodeslot=0x100C3, }, [0x100C4]={ category="lo", description="LINEAR B IDEOGRAM B0x00DC FOOTSTOOL", direction="l", linebreak="al", unicodeslot=0x100C4, }, [0x100C5]={ category="lo", description="LINEAR B IDEOGRAM B0x00E1 BATHTUB", direction="l", linebreak="al", unicodeslot=0x100C5, }, [0x100C6]={ category="lo", description="LINEAR B IDEOGRAM B0x00E6 SPEAR", direction="l", linebreak="al", unicodeslot=0x100C6, }, [0x100C7]={ category="lo", description="LINEAR B IDEOGRAM B0x00E7 ARROW", direction="l", linebreak="al", unicodeslot=0x100C7, }, [0x100C8]={ category="lo", description="LINEAR B IDEOGRAM B0x00E8", direction="l", linebreak="al", unicodeslot=0x100C8, }, [0x100C9]={ category="lo", description="LINEAR B IDEOGRAM B0x00E9 SWORD", direction="l", linebreak="al", unicodeslot=0x100C9, }, [0x100CA]={ category="lo", description="LINEAR B IDEOGRAM B0x00EA", direction="l", linebreak="al", unicodeslot=0x100CA, }, [0x100CB]={ category="lo", description="LINEAR B IDEOGRAM B0x00EC", direction="l", linebreak="al", unicodeslot=0x100CB, }, [0x100CC]={ category="lo", description="LINEAR B IDEOGRAM B0x00F0 WHEELED CHARIOT", direction="l", linebreak="al", unicodeslot=0x100CC, }, [0x100CD]={ category="lo", description="LINEAR B IDEOGRAM B0x00F1 CHARIOT", direction="l", linebreak="al", unicodeslot=0x100CD, }, [0x100CE]={ category="lo", description="LINEAR B IDEOGRAM B0x00F2 CHARIOT FRAME", direction="l", linebreak="al", unicodeslot=0x100CE, }, [0x100CF]={ category="lo", description="LINEAR B IDEOGRAM B0x00F3 WHEEL", direction="l", linebreak="al", unicodeslot=0x100CF, }, [0x100D0]={ category="lo", description="LINEAR B IDEOGRAM B0x00F5", direction="l", linebreak="al", unicodeslot=0x100D0, }, [0x100D1]={ category="lo", description="LINEAR B IDEOGRAM B0x00F6", direction="l", linebreak="al", unicodeslot=0x100D1, }, [0x100D2]={ category="lo", description="LINEAR B MONOGRAM B0x00F7 DIPTE", direction="l", linebreak="al", unicodeslot=0x100D2, }, [0x100D3]={ category="lo", description="LINEAR B IDEOGRAM B0x00F8", direction="l", linebreak="al", unicodeslot=0x100D3, }, [0x100D4]={ category="lo", description="LINEAR B IDEOGRAM B0x00F9", direction="l", linebreak="al", unicodeslot=0x100D4, }, [0x100D5]={ category="lo", description="LINEAR B IDEOGRAM B0x00FB", direction="l", linebreak="al", unicodeslot=0x100D5, }, [0x100D6]={ category="lo", description="LINEAR B IDEOGRAM B0x00FC", direction="l", linebreak="al", unicodeslot=0x100D6, }, [0x100D7]={ category="lo", description="LINEAR B IDEOGRAM B0x00FD", direction="l", linebreak="al", unicodeslot=0x100D7, }, [0x100D8]={ category="lo", description="LINEAR B IDEOGRAM B0x00FE DART", direction="l", linebreak="al", unicodeslot=0x100D8, }, [0x100D9]={ category="lo", description="LINEAR B IDEOGRAM B0x00FF", direction="l", linebreak="al", unicodeslot=0x100D9, }, [0x100DA]={ category="lo", description="LINEAR B IDEOGRAM B0x0100", direction="l", linebreak="al", unicodeslot=0x100DA, }, [0x100DB]={ category="lo", description="LINEAR B IDEOGRAM B0x0101", direction="l", linebreak="al", unicodeslot=0x100DB, }, [0x100DC]={ category="lo", description="LINEAR B IDEOGRAM B0x0102", direction="l", linebreak="al", unicodeslot=0x100DC, }, [0x100DD]={ category="lo", description="LINEAR B IDEOGRAM B0x0103", direction="l", linebreak="al", unicodeslot=0x100DD, }, [0x100DE]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x009B", direction="l", linebreak="al", unicodeslot=0x100DE, }, [0x100DF]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00C8", direction="l", linebreak="al", unicodeslot=0x100DF, }, [0x100E0]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00C9", direction="l", linebreak="al", unicodeslot=0x100E0, }, [0x100E1]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00CA", direction="l", linebreak="al", unicodeslot=0x100E1, }, [0x100E2]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00CB", direction="l", linebreak="al", unicodeslot=0x100E2, }, [0x100E3]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00CC", direction="l", linebreak="al", unicodeslot=0x100E3, }, [0x100E4]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00CD", direction="l", linebreak="al", unicodeslot=0x100E4, }, [0x100E5]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00CE", direction="l", linebreak="al", unicodeslot=0x100E5, }, [0x100E6]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00CF", direction="l", linebreak="al", unicodeslot=0x100E6, }, [0x100E7]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D0", direction="l", linebreak="al", unicodeslot=0x100E7, }, [0x100E8]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D1", direction="l", linebreak="al", unicodeslot=0x100E8, }, [0x100E9]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D2", direction="l", linebreak="al", unicodeslot=0x100E9, }, [0x100EA]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D3", direction="l", linebreak="al", unicodeslot=0x100EA, }, [0x100EB]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D4", direction="l", linebreak="al", unicodeslot=0x100EB, }, [0x100EC]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D5", direction="l", linebreak="al", unicodeslot=0x100EC, }, [0x100ED]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D6", direction="l", linebreak="al", unicodeslot=0x100ED, }, [0x100EE]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D7", direction="l", linebreak="al", unicodeslot=0x100EE, }, [0x100EF]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D8", direction="l", linebreak="al", unicodeslot=0x100EF, }, [0x100F0]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00D9", direction="l", linebreak="al", unicodeslot=0x100F0, }, [0x100F1]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00DA", direction="l", linebreak="al", unicodeslot=0x100F1, }, [0x100F2]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00DB", direction="l", linebreak="al", unicodeslot=0x100F2, }, [0x100F3]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00DD", direction="l", linebreak="al", unicodeslot=0x100F3, }, [0x100F4]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00DE", direction="l", linebreak="al", unicodeslot=0x100F4, }, [0x100F5]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00E2", direction="l", linebreak="al", unicodeslot=0x100F5, }, [0x100F6]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00E3", direction="l", linebreak="al", unicodeslot=0x100F6, }, [0x100F7]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00E4", direction="l", linebreak="al", unicodeslot=0x100F7, }, [0x100F8]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00E5", direction="l", linebreak="al", unicodeslot=0x100F8, }, [0x100F9]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x00FA", direction="l", linebreak="al", unicodeslot=0x100F9, }, [0x100FA]={ category="lo", description="LINEAR B IDEOGRAM VESSEL B0x0131", direction="l", linebreak="al", unicodeslot=0x100FA, }, [0x10100]={ category="po", description="AEGEAN WORD SEPARATOR LINE", direction="l", linebreak="ba", unicodeslot=0x10100, }, [0x10101]={ category="po", description="AEGEAN WORD SEPARATOR DOT", direction="on", linebreak="ba", unicodeslot=0x10101, }, [0x10102]={ category="so", description="AEGEAN CHECK MARK", direction="l", linebreak="ba", unicodeslot=0x10102, }, [0x10107]={ category="no", description="AEGEAN NUMBER ONE", direction="l", linebreak="al", unicodeslot=0x10107, }, [0x10108]={ category="no", description="AEGEAN NUMBER TWO", direction="l", linebreak="al", unicodeslot=0x10108, }, [0x10109]={ category="no", description="AEGEAN NUMBER THREE", direction="l", linebreak="al", unicodeslot=0x10109, }, [0x1010A]={ category="no", description="AEGEAN NUMBER FOUR", direction="l", linebreak="al", unicodeslot=0x1010A, }, [0x1010B]={ category="no", description="AEGEAN NUMBER FIVE", direction="l", linebreak="al", unicodeslot=0x1010B, }, [0x1010C]={ category="no", description="AEGEAN NUMBER SIX", direction="l", linebreak="al", unicodeslot=0x1010C, }, [0x1010D]={ category="no", description="AEGEAN NUMBER SEVEN", direction="l", linebreak="al", unicodeslot=0x1010D, }, [0x1010E]={ category="no", description="AEGEAN NUMBER EIGHT", direction="l", linebreak="al", unicodeslot=0x1010E, }, [0x1010F]={ category="no", description="AEGEAN NUMBER NINE", direction="l", linebreak="al", unicodeslot=0x1010F, }, [0x10110]={ category="no", description="AEGEAN NUMBER TEN", direction="l", linebreak="al", unicodeslot=0x10110, }, [0x10111]={ category="no", description="AEGEAN NUMBER TWENTY", direction="l", linebreak="al", unicodeslot=0x10111, }, [0x10112]={ category="no", description="AEGEAN NUMBER THIRTY", direction="l", linebreak="al", unicodeslot=0x10112, }, [0x10113]={ category="no", description="AEGEAN NUMBER FORTY", direction="l", linebreak="al", unicodeslot=0x10113, }, [0x10114]={ category="no", description="AEGEAN NUMBER FIFTY", direction="l", linebreak="al", unicodeslot=0x10114, }, [0x10115]={ category="no", description="AEGEAN NUMBER SIXTY", direction="l", linebreak="al", unicodeslot=0x10115, }, [0x10116]={ category="no", description="AEGEAN NUMBER SEVENTY", direction="l", linebreak="al", unicodeslot=0x10116, }, [0x10117]={ category="no", description="AEGEAN NUMBER EIGHTY", direction="l", linebreak="al", unicodeslot=0x10117, }, [0x10118]={ category="no", description="AEGEAN NUMBER NINETY", direction="l", linebreak="al", unicodeslot=0x10118, }, [0x10119]={ category="no", description="AEGEAN NUMBER ONE HUNDRED", direction="l", linebreak="al", unicodeslot=0x10119, }, [0x1011A]={ category="no", description="AEGEAN NUMBER TWO HUNDRED", direction="l", linebreak="al", unicodeslot=0x1011A, }, [0x1011B]={ category="no", description="AEGEAN NUMBER THREE HUNDRED", direction="l", linebreak="al", unicodeslot=0x1011B, }, [0x1011C]={ category="no", description="AEGEAN NUMBER FOUR HUNDRED", direction="l", linebreak="al", unicodeslot=0x1011C, }, [0x1011D]={ category="no", description="AEGEAN NUMBER FIVE HUNDRED", direction="l", linebreak="al", unicodeslot=0x1011D, }, [0x1011E]={ category="no", description="AEGEAN NUMBER SIX HUNDRED", direction="l", linebreak="al", unicodeslot=0x1011E, }, [0x1011F]={ category="no", description="AEGEAN NUMBER SEVEN HUNDRED", direction="l", linebreak="al", unicodeslot=0x1011F, }, [0x10120]={ category="no", description="AEGEAN NUMBER EIGHT HUNDRED", direction="l", linebreak="al", unicodeslot=0x10120, }, [0x10121]={ category="no", description="AEGEAN NUMBER NINE HUNDRED", direction="l", linebreak="al", unicodeslot=0x10121, }, [0x10122]={ category="no", description="AEGEAN NUMBER ONE THOUSAND", direction="l", linebreak="al", unicodeslot=0x10122, }, [0x10123]={ category="no", description="AEGEAN NUMBER TWO THOUSAND", direction="l", linebreak="al", unicodeslot=0x10123, }, [0x10124]={ category="no", description="AEGEAN NUMBER THREE THOUSAND", direction="l", linebreak="al", unicodeslot=0x10124, }, [0x10125]={ category="no", description="AEGEAN NUMBER FOUR THOUSAND", direction="l", linebreak="al", unicodeslot=0x10125, }, [0x10126]={ category="no", description="AEGEAN NUMBER FIVE THOUSAND", direction="l", linebreak="al", unicodeslot=0x10126, }, [0x10127]={ category="no", description="AEGEAN NUMBER SIX THOUSAND", direction="l", linebreak="al", unicodeslot=0x10127, }, [0x10128]={ category="no", description="AEGEAN NUMBER SEVEN THOUSAND", direction="l", linebreak="al", unicodeslot=0x10128, }, [0x10129]={ category="no", description="AEGEAN NUMBER EIGHT THOUSAND", direction="l", linebreak="al", unicodeslot=0x10129, }, [0x1012A]={ category="no", description="AEGEAN NUMBER NINE THOUSAND", direction="l", linebreak="al", unicodeslot=0x1012A, }, [0x1012B]={ category="no", description="AEGEAN NUMBER TEN THOUSAND", direction="l", linebreak="al", unicodeslot=0x1012B, }, [0x1012C]={ category="no", description="AEGEAN NUMBER TWENTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x1012C, }, [0x1012D]={ category="no", description="AEGEAN NUMBER THIRTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x1012D, }, [0x1012E]={ category="no", description="AEGEAN NUMBER FORTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x1012E, }, [0x1012F]={ category="no", description="AEGEAN NUMBER FIFTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x1012F, }, [0x10130]={ category="no", description="AEGEAN NUMBER SIXTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x10130, }, [0x10131]={ category="no", description="AEGEAN NUMBER SEVENTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x10131, }, [0x10132]={ category="no", description="AEGEAN NUMBER EIGHTY THOUSAND", direction="l", linebreak="al", unicodeslot=0x10132, }, [0x10133]={ category="no", description="AEGEAN NUMBER NINETY THOUSAND", direction="l", linebreak="al", unicodeslot=0x10133, }, [0x10137]={ category="so", description="AEGEAN WEIGHT BASE UNIT", direction="l", linebreak="al", unicodeslot=0x10137, }, [0x10138]={ category="so", description="AEGEAN WEIGHT FIRST SUBUNIT", direction="l", linebreak="al", unicodeslot=0x10138, }, [0x10139]={ category="so", description="AEGEAN WEIGHT SECOND SUBUNIT", direction="l", linebreak="al", unicodeslot=0x10139, }, [0x1013A]={ category="so", description="AEGEAN WEIGHT THIRD SUBUNIT", direction="l", linebreak="al", unicodeslot=0x1013A, }, [0x1013B]={ category="so", description="AEGEAN WEIGHT FOURTH SUBUNIT", direction="l", linebreak="al", unicodeslot=0x1013B, }, [0x1013C]={ category="so", description="AEGEAN DRY MEASURE FIRST SUBUNIT", direction="l", linebreak="al", unicodeslot=0x1013C, }, [0x1013D]={ category="so", description="AEGEAN LIQUID MEASURE FIRST SUBUNIT", direction="l", linebreak="al", unicodeslot=0x1013D, }, [0x1013E]={ category="so", description="AEGEAN MEASURE SECOND SUBUNIT", direction="l", linebreak="al", unicodeslot=0x1013E, }, [0x1013F]={ category="so", description="AEGEAN MEASURE THIRD SUBUNIT", direction="l", linebreak="al", unicodeslot=0x1013F, }, [0x10140]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE QUARTER", direction="on", linebreak="al", unicodeslot=0x10140, }, [0x10141]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE HALF", direction="on", linebreak="al", unicodeslot=0x10141, }, [0x10142]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE DRACHMA", direction="on", linebreak="al", unicodeslot=0x10142, }, [0x10143]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE", direction="on", linebreak="al", unicodeslot=0x10143, }, [0x10144]={ category="nl", description="GREEK ACROPHONIC ATTIC FIFTY", direction="on", linebreak="al", unicodeslot=0x10144, }, [0x10145]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE HUNDRED", direction="on", linebreak="al", unicodeslot=0x10145, }, [0x10146]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE THOUSAND", direction="on", linebreak="al", unicodeslot=0x10146, }, [0x10147]={ category="nl", description="GREEK ACROPHONIC ATTIC FIFTY THOUSAND", direction="on", linebreak="al", unicodeslot=0x10147, }, [0x10148]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE TALENTS", direction="on", linebreak="al", unicodeslot=0x10148, }, [0x10149]={ category="nl", description="GREEK ACROPHONIC ATTIC TEN TALENTS", direction="on", linebreak="al", unicodeslot=0x10149, }, [0x1014A]={ category="nl", description="GREEK ACROPHONIC ATTIC FIFTY TALENTS", direction="on", linebreak="al", unicodeslot=0x1014A, }, [0x1014B]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS", direction="on", linebreak="al", unicodeslot=0x1014B, }, [0x1014C]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS", direction="on", linebreak="al", unicodeslot=0x1014C, }, [0x1014D]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS", direction="on", linebreak="al", unicodeslot=0x1014D, }, [0x1014E]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS", direction="on", linebreak="al", unicodeslot=0x1014E, }, [0x1014F]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE STATERS", direction="on", linebreak="al", unicodeslot=0x1014F, }, [0x10150]={ category="nl", description="GREEK ACROPHONIC ATTIC TEN STATERS", direction="on", linebreak="al", unicodeslot=0x10150, }, [0x10151]={ category="nl", description="GREEK ACROPHONIC ATTIC FIFTY STATERS", direction="on", linebreak="al", unicodeslot=0x10151, }, [0x10152]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS", direction="on", linebreak="al", unicodeslot=0x10152, }, [0x10153]={ category="nl", description="GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS", direction="on", linebreak="al", unicodeslot=0x10153, }, [0x10154]={ category="nl", description="GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS", direction="on", linebreak="al", unicodeslot=0x10154, }, [0x10155]={ category="nl", description="GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS", direction="on", linebreak="al", unicodeslot=0x10155, }, [0x10156]={ category="nl", description="GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS", direction="on", linebreak="al", unicodeslot=0x10156, }, [0x10157]={ category="nl", description="GREEK ACROPHONIC ATTIC TEN MNAS", direction="on", linebreak="al", unicodeslot=0x10157, }, [0x10158]={ category="nl", description="GREEK ACROPHONIC HERAEUM ONE PLETHRON", direction="on", linebreak="al", unicodeslot=0x10158, }, [0x10159]={ category="nl", description="GREEK ACROPHONIC THESPIAN ONE", direction="on", linebreak="al", unicodeslot=0x10159, }, [0x1015A]={ category="nl", description="GREEK ACROPHONIC HERMIONIAN ONE", direction="on", linebreak="al", unicodeslot=0x1015A, }, [0x1015B]={ category="nl", description="GREEK ACROPHONIC EPIDAUREAN TWO", direction="on", linebreak="al", unicodeslot=0x1015B, }, [0x1015C]={ category="nl", description="GREEK ACROPHONIC THESPIAN TWO", direction="on", linebreak="al", unicodeslot=0x1015C, }, [0x1015D]={ category="nl", description="GREEK ACROPHONIC CYRENAIC TWO DRACHMAS", direction="on", linebreak="al", unicodeslot=0x1015D, }, [0x1015E]={ category="nl", description="GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS", direction="on", linebreak="al", unicodeslot=0x1015E, }, [0x1015F]={ category="nl", description="GREEK ACROPHONIC TROEZENIAN FIVE", direction="on", linebreak="al", unicodeslot=0x1015F, }, [0x10160]={ category="nl", description="GREEK ACROPHONIC TROEZENIAN TEN", direction="on", linebreak="al", unicodeslot=0x10160, }, [0x10161]={ category="nl", description="GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM", direction="on", linebreak="al", unicodeslot=0x10161, }, [0x10162]={ category="nl", description="GREEK ACROPHONIC HERMIONIAN TEN", direction="on", linebreak="al", unicodeslot=0x10162, }, [0x10163]={ category="nl", description="GREEK ACROPHONIC MESSENIAN TEN", direction="on", linebreak="al", unicodeslot=0x10163, }, [0x10164]={ category="nl", description="GREEK ACROPHONIC THESPIAN TEN", direction="on", linebreak="al", unicodeslot=0x10164, }, [0x10165]={ category="nl", description="GREEK ACROPHONIC THESPIAN THIRTY", direction="on", linebreak="al", unicodeslot=0x10165, }, [0x10166]={ category="nl", description="GREEK ACROPHONIC TROEZENIAN FIFTY", direction="on", linebreak="al", unicodeslot=0x10166, }, [0x10167]={ category="nl", description="GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM", direction="on", linebreak="al", unicodeslot=0x10167, }, [0x10168]={ category="nl", description="GREEK ACROPHONIC HERMIONIAN FIFTY", direction="on", linebreak="al", unicodeslot=0x10168, }, [0x10169]={ category="nl", description="GREEK ACROPHONIC THESPIAN FIFTY", direction="on", linebreak="al", unicodeslot=0x10169, }, [0x1016A]={ category="nl", description="GREEK ACROPHONIC THESPIAN ONE HUNDRED", direction="on", linebreak="al", unicodeslot=0x1016A, }, [0x1016B]={ category="nl", description="GREEK ACROPHONIC THESPIAN THREE HUNDRED", direction="on", linebreak="al", unicodeslot=0x1016B, }, [0x1016C]={ category="nl", description="GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED", direction="on", linebreak="al", unicodeslot=0x1016C, }, [0x1016D]={ category="nl", description="GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED", direction="on", linebreak="al", unicodeslot=0x1016D, }, [0x1016E]={ category="nl", description="GREEK ACROPHONIC THESPIAN FIVE HUNDRED", direction="on", linebreak="al", unicodeslot=0x1016E, }, [0x1016F]={ category="nl", description="GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED", direction="on", linebreak="al", unicodeslot=0x1016F, }, [0x10170]={ category="nl", description="GREEK ACROPHONIC NAXIAN FIVE HUNDRED", direction="on", linebreak="al", unicodeslot=0x10170, }, [0x10171]={ category="nl", description="GREEK ACROPHONIC THESPIAN ONE THOUSAND", direction="on", linebreak="al", unicodeslot=0x10171, }, [0x10172]={ category="nl", description="GREEK ACROPHONIC THESPIAN FIVE THOUSAND", direction="on", linebreak="al", unicodeslot=0x10172, }, [0x10173]={ category="nl", description="GREEK ACROPHONIC DELPHIC FIVE MNAS", direction="on", linebreak="al", unicodeslot=0x10173, }, [0x10174]={ category="nl", description="GREEK ACROPHONIC STRATIAN FIFTY MNAS", direction="on", linebreak="al", unicodeslot=0x10174, }, [0x10175]={ category="no", description="GREEK ONE HALF SIGN", direction="on", linebreak="al", unicodeslot=0x10175, }, [0x10176]={ category="no", description="GREEK ONE HALF SIGN ALTERNATE FORM", direction="on", linebreak="al", unicodeslot=0x10176, }, [0x10177]={ category="no", description="GREEK TWO THIRDS SIGN", direction="on", linebreak="al", unicodeslot=0x10177, }, [0x10178]={ category="no", description="GREEK THREE QUARTERS SIGN", direction="on", linebreak="al", unicodeslot=0x10178, }, [0x10179]={ category="so", description="GREEK YEAR SIGN", direction="on", linebreak="al", unicodeslot=0x10179, }, [0x1017A]={ category="so", description="GREEK TALENT SIGN", direction="on", linebreak="al", unicodeslot=0x1017A, }, [0x1017B]={ category="so", description="GREEK DRACHMA SIGN", direction="on", linebreak="al", unicodeslot=0x1017B, }, [0x1017C]={ category="so", description="GREEK OBOL SIGN", direction="on", linebreak="al", unicodeslot=0x1017C, }, [0x1017D]={ category="so", description="GREEK TWO OBOLS SIGN", direction="on", linebreak="al", unicodeslot=0x1017D, }, [0x1017E]={ category="so", description="GREEK THREE OBOLS SIGN", direction="on", linebreak="al", unicodeslot=0x1017E, }, [0x1017F]={ category="so", description="GREEK FOUR OBOLS SIGN", direction="on", linebreak="al", unicodeslot=0x1017F, }, [0x10180]={ category="so", description="GREEK FIVE OBOLS SIGN", direction="on", linebreak="al", unicodeslot=0x10180, }, [0x10181]={ category="so", description="GREEK METRETES SIGN", direction="on", linebreak="al", unicodeslot=0x10181, }, [0x10182]={ category="so", description="GREEK KYATHOS BASE SIGN", direction="on", linebreak="al", unicodeslot=0x10182, }, [0x10183]={ category="so", description="GREEK LITRA SIGN", direction="on", linebreak="al", unicodeslot=0x10183, }, [0x10184]={ category="so", description="GREEK OUNKIA SIGN", direction="on", linebreak="al", unicodeslot=0x10184, }, [0x10185]={ category="so", description="GREEK XESTES SIGN", direction="on", linebreak="al", unicodeslot=0x10185, }, [0x10186]={ category="so", description="GREEK ARTABE SIGN", direction="on", linebreak="al", unicodeslot=0x10186, }, [0x10187]={ category="so", description="GREEK AROURA SIGN", direction="on", linebreak="al", unicodeslot=0x10187, }, [0x10188]={ category="so", description="GREEK GRAMMA SIGN", direction="on", linebreak="al", unicodeslot=0x10188, }, [0x10189]={ category="so", description="GREEK TRYBLION BASE SIGN", direction="on", linebreak="al", unicodeslot=0x10189, }, [0x1018A]={ category="no", description="GREEK ZERO SIGN", direction="on", linebreak="al", unicodeslot=0x1018A, }, [0x10190]={ category="so", description="ROMAN SEXTANS SIGN", direction="on", linebreak="al", unicodeslot=0x10190, }, [0x10191]={ category="so", description="ROMAN UNCIA SIGN", direction="on", linebreak="al", unicodeslot=0x10191, }, [0x10192]={ category="so", description="ROMAN SEMUNCIA SIGN", direction="on", linebreak="al", unicodeslot=0x10192, }, [0x10193]={ category="so", description="ROMAN SEXTULA SIGN", direction="on", linebreak="al", unicodeslot=0x10193, }, [0x10194]={ category="so", description="ROMAN DIMIDIA SEXTULA SIGN", direction="on", linebreak="al", unicodeslot=0x10194, }, [0x10195]={ category="so", description="ROMAN SILIQUA SIGN", direction="on", linebreak="al", unicodeslot=0x10195, }, [0x10196]={ category="so", description="ROMAN DENARIUS SIGN", direction="on", linebreak="al", unicodeslot=0x10196, }, [0x10197]={ category="so", description="ROMAN QUINARIUS SIGN", direction="on", linebreak="al", unicodeslot=0x10197, }, [0x10198]={ category="so", description="ROMAN SESTERTIUS SIGN", direction="on", linebreak="al", unicodeslot=0x10198, }, [0x10199]={ category="so", description="ROMAN DUPONDIUS SIGN", direction="on", linebreak="al", unicodeslot=0x10199, }, [0x1019A]={ category="so", description="ROMAN AS SIGN", direction="on", linebreak="al", unicodeslot=0x1019A, }, [0x1019B]={ category="so", description="ROMAN CENTURIAL SIGN", direction="on", linebreak="al", unicodeslot=0x1019B, }, [0x101D0]={ category="so", description="PHAISTOS DISC SIGN PEDESTRIAN", direction="l", linebreak="al", unicodeslot=0x101D0, }, [0x101D1]={ category="so", description="PHAISTOS DISC SIGN PLUMED HEAD", direction="l", linebreak="al", unicodeslot=0x101D1, }, [0x101D2]={ category="so", description="PHAISTOS DISC SIGN TATTOOED HEAD", direction="l", linebreak="al", unicodeslot=0x101D2, }, [0x101D3]={ category="so", description="PHAISTOS DISC SIGN CAPTIVE", direction="l", linebreak="al", unicodeslot=0x101D3, }, [0x101D4]={ category="so", description="PHAISTOS DISC SIGN CHILD", direction="l", linebreak="al", unicodeslot=0x101D4, }, [0x101D5]={ category="so", description="PHAISTOS DISC SIGN WOMAN", direction="l", linebreak="al", unicodeslot=0x101D5, }, [0x101D6]={ category="so", description="PHAISTOS DISC SIGN HELMET", direction="l", linebreak="al", unicodeslot=0x101D6, }, [0x101D7]={ category="so", description="PHAISTOS DISC SIGN GAUNTLET", direction="l", linebreak="al", unicodeslot=0x101D7, }, [0x101D8]={ category="so", description="PHAISTOS DISC SIGN TIARA", direction="l", linebreak="al", unicodeslot=0x101D8, }, [0x101D9]={ category="so", description="PHAISTOS DISC SIGN ARROW", direction="l", linebreak="al", unicodeslot=0x101D9, }, [0x101DA]={ category="so", description="PHAISTOS DISC SIGN BOW", direction="l", linebreak="al", unicodeslot=0x101DA, }, [0x101DB]={ category="so", description="PHAISTOS DISC SIGN SHIELD", direction="l", linebreak="al", unicodeslot=0x101DB, }, [0x101DC]={ category="so", description="PHAISTOS DISC SIGN CLUB", direction="l", linebreak="al", unicodeslot=0x101DC, }, [0x101DD]={ category="so", description="PHAISTOS DISC SIGN MANACLES", direction="l", linebreak="al", unicodeslot=0x101DD, }, [0x101DE]={ category="so", description="PHAISTOS DISC SIGN MATTOCK", direction="l", linebreak="al", unicodeslot=0x101DE, }, [0x101DF]={ category="so", description="PHAISTOS DISC SIGN SAW", direction="l", linebreak="al", unicodeslot=0x101DF, }, [0x101E0]={ category="so", description="PHAISTOS DISC SIGN LID", direction="l", linebreak="al", unicodeslot=0x101E0, }, [0x101E1]={ category="so", description="PHAISTOS DISC SIGN BOOMERANG", direction="l", linebreak="al", unicodeslot=0x101E1, }, [0x101E2]={ category="so", description="PHAISTOS DISC SIGN CARPENTRY PLANE", direction="l", linebreak="al", unicodeslot=0x101E2, }, [0x101E3]={ category="so", description="PHAISTOS DISC SIGN DOLIUM", direction="l", linebreak="al", unicodeslot=0x101E3, }, [0x101E4]={ category="so", description="PHAISTOS DISC SIGN COMB", direction="l", linebreak="al", unicodeslot=0x101E4, }, [0x101E5]={ category="so", description="PHAISTOS DISC SIGN SLING", direction="l", linebreak="al", unicodeslot=0x101E5, }, [0x101E6]={ category="so", description="PHAISTOS DISC SIGN COLUMN", direction="l", linebreak="al", unicodeslot=0x101E6, }, [0x101E7]={ category="so", description="PHAISTOS DISC SIGN BEEHIVE", direction="l", linebreak="al", unicodeslot=0x101E7, }, [0x101E8]={ category="so", description="PHAISTOS DISC SIGN SHIP", direction="l", linebreak="al", unicodeslot=0x101E8, }, [0x101E9]={ category="so", description="PHAISTOS DISC SIGN HORN", direction="l", linebreak="al", unicodeslot=0x101E9, }, [0x101EA]={ category="so", description="PHAISTOS DISC SIGN HIDE", direction="l", linebreak="al", unicodeslot=0x101EA, }, [0x101EB]={ category="so", description="PHAISTOS DISC SIGN BULLS LEG", direction="l", linebreak="al", unicodeslot=0x101EB, }, [0x101EC]={ category="so", description="PHAISTOS DISC SIGN CAT", direction="l", linebreak="al", unicodeslot=0x101EC, }, [0x101ED]={ category="so", description="PHAISTOS DISC SIGN RAM", direction="l", linebreak="al", unicodeslot=0x101ED, }, [0x101EE]={ category="so", description="PHAISTOS DISC SIGN EAGLE", direction="l", linebreak="al", unicodeslot=0x101EE, }, [0x101EF]={ category="so", description="PHAISTOS DISC SIGN DOVE", direction="l", linebreak="al", unicodeslot=0x101EF, }, [0x101F0]={ category="so", description="PHAISTOS DISC SIGN TUNNY", direction="l", linebreak="al", unicodeslot=0x101F0, }, [0x101F1]={ category="so", description="PHAISTOS DISC SIGN BEE", direction="l", linebreak="al", unicodeslot=0x101F1, }, [0x101F2]={ category="so", description="PHAISTOS DISC SIGN PLANE TREE", direction="l", linebreak="al", unicodeslot=0x101F2, }, [0x101F3]={ category="so", description="PHAISTOS DISC SIGN VINE", direction="l", linebreak="al", unicodeslot=0x101F3, }, [0x101F4]={ category="so", description="PHAISTOS DISC SIGN PAPYRUS", direction="l", linebreak="al", unicodeslot=0x101F4, }, [0x101F5]={ category="so", description="PHAISTOS DISC SIGN ROSETTE", direction="l", linebreak="al", unicodeslot=0x101F5, }, [0x101F6]={ category="so", description="PHAISTOS DISC SIGN LILY", direction="l", linebreak="al", unicodeslot=0x101F6, }, [0x101F7]={ category="so", description="PHAISTOS DISC SIGN OX BACK", direction="l", linebreak="al", unicodeslot=0x101F7, }, [0x101F8]={ category="so", description="PHAISTOS DISC SIGN FLUTE", direction="l", linebreak="al", unicodeslot=0x101F8, }, [0x101F9]={ category="so", description="PHAISTOS DISC SIGN GRATER", direction="l", linebreak="al", unicodeslot=0x101F9, }, [0x101FA]={ category="so", description="PHAISTOS DISC SIGN STRAINER", direction="l", linebreak="al", unicodeslot=0x101FA, }, [0x101FB]={ category="so", description="PHAISTOS DISC SIGN SMALL AXE", direction="l", linebreak="al", unicodeslot=0x101FB, }, [0x101FC]={ category="so", description="PHAISTOS DISC SIGN WAVY BAND", direction="l", linebreak="al", unicodeslot=0x101FC, }, [0x101FD]={ category="mn", description="PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE", direction="nsm", linebreak="cm", unicodeslot=0x101FD, }, [0x10280]={ category="lo", description="LYCIAN LETTER A", direction="l", linebreak="al", unicodeslot=0x10280, }, [0x10281]={ category="lo", description="LYCIAN LETTER E", direction="l", linebreak="al", unicodeslot=0x10281, }, [0x10282]={ category="lo", description="LYCIAN LETTER B", direction="l", linebreak="al", unicodeslot=0x10282, }, [0x10283]={ category="lo", description="LYCIAN LETTER BH", direction="l", linebreak="al", unicodeslot=0x10283, }, [0x10284]={ category="lo", description="LYCIAN LETTER G", direction="l", linebreak="al", unicodeslot=0x10284, }, [0x10285]={ category="lo", description="LYCIAN LETTER D", direction="l", linebreak="al", unicodeslot=0x10285, }, [0x10286]={ category="lo", description="LYCIAN LETTER I", direction="l", linebreak="al", unicodeslot=0x10286, }, [0x10287]={ category="lo", description="LYCIAN LETTER W", direction="l", linebreak="al", unicodeslot=0x10287, }, [0x10288]={ category="lo", description="LYCIAN LETTER Z", direction="l", linebreak="al", unicodeslot=0x10288, }, [0x10289]={ category="lo", description="LYCIAN LETTER TH", direction="l", linebreak="al", unicodeslot=0x10289, }, [0x1028A]={ category="lo", description="LYCIAN LETTER J", direction="l", linebreak="al", unicodeslot=0x1028A, }, [0x1028B]={ category="lo", description="LYCIAN LETTER K", direction="l", linebreak="al", unicodeslot=0x1028B, }, [0x1028C]={ category="lo", description="LYCIAN LETTER Q", direction="l", linebreak="al", unicodeslot=0x1028C, }, [0x1028D]={ category="lo", description="LYCIAN LETTER L", direction="l", linebreak="al", unicodeslot=0x1028D, }, [0x1028E]={ category="lo", description="LYCIAN LETTER M", direction="l", linebreak="al", unicodeslot=0x1028E, }, [0x1028F]={ category="lo", description="LYCIAN LETTER N", direction="l", linebreak="al", unicodeslot=0x1028F, }, [0x10290]={ category="lo", description="LYCIAN LETTER MM", direction="l", linebreak="al", unicodeslot=0x10290, }, [0x10291]={ category="lo", description="LYCIAN LETTER NN", direction="l", linebreak="al", unicodeslot=0x10291, }, [0x10292]={ category="lo", description="LYCIAN LETTER U", direction="l", linebreak="al", unicodeslot=0x10292, }, [0x10293]={ category="lo", description="LYCIAN LETTER P", direction="l", linebreak="al", unicodeslot=0x10293, }, [0x10294]={ category="lo", description="LYCIAN LETTER KK", direction="l", linebreak="al", unicodeslot=0x10294, }, [0x10295]={ category="lo", description="LYCIAN LETTER R", direction="l", linebreak="al", unicodeslot=0x10295, }, [0x10296]={ category="lo", description="LYCIAN LETTER S", direction="l", linebreak="al", unicodeslot=0x10296, }, [0x10297]={ category="lo", description="LYCIAN LETTER T", direction="l", linebreak="al", unicodeslot=0x10297, }, [0x10298]={ category="lo", description="LYCIAN LETTER TT", direction="l", linebreak="al", unicodeslot=0x10298, }, [0x10299]={ category="lo", description="LYCIAN LETTER AN", direction="l", linebreak="al", unicodeslot=0x10299, }, [0x1029A]={ category="lo", description="LYCIAN LETTER EN", direction="l", linebreak="al", unicodeslot=0x1029A, }, [0x1029B]={ category="lo", description="LYCIAN LETTER H", direction="l", linebreak="al", unicodeslot=0x1029B, }, [0x1029C]={ category="lo", description="LYCIAN LETTER X", direction="l", linebreak="al", unicodeslot=0x1029C, }, [0x102A0]={ category="lo", description="CARIAN LETTER A", direction="l", linebreak="al", unicodeslot=0x102A0, }, [0x102A1]={ category="lo", description="CARIAN LETTER P2", direction="l", linebreak="al", unicodeslot=0x102A1, }, [0x102A2]={ category="lo", description="CARIAN LETTER D", direction="l", linebreak="al", unicodeslot=0x102A2, }, [0x102A3]={ category="lo", description="CARIAN LETTER L", direction="l", linebreak="al", unicodeslot=0x102A3, }, [0x102A4]={ category="lo", description="CARIAN LETTER UUU", direction="l", linebreak="al", unicodeslot=0x102A4, }, [0x102A5]={ category="lo", description="CARIAN LETTER R", direction="l", linebreak="al", unicodeslot=0x102A5, }, [0x102A6]={ category="lo", description="CARIAN LETTER LD", direction="l", linebreak="al", unicodeslot=0x102A6, }, [0x102A7]={ category="lo", description="CARIAN LETTER A2", direction="l", linebreak="al", unicodeslot=0x102A7, }, [0x102A8]={ category="lo", description="CARIAN LETTER Q", direction="l", linebreak="al", unicodeslot=0x102A8, }, [0x102A9]={ category="lo", description="CARIAN LETTER B", direction="l", linebreak="al", unicodeslot=0x102A9, }, [0x102AA]={ category="lo", description="CARIAN LETTER M", direction="l", linebreak="al", unicodeslot=0x102AA, }, [0x102AB]={ category="lo", description="CARIAN LETTER O", direction="l", linebreak="al", unicodeslot=0x102AB, }, [0x102AC]={ category="lo", description="CARIAN LETTER D2", direction="l", linebreak="al", unicodeslot=0x102AC, }, [0x102AD]={ category="lo", description="CARIAN LETTER T", direction="l", linebreak="al", unicodeslot=0x102AD, }, [0x102AE]={ category="lo", description="CARIAN LETTER SH", direction="l", linebreak="al", unicodeslot=0x102AE, }, [0x102AF]={ category="lo", description="CARIAN LETTER SH2", direction="l", linebreak="al", unicodeslot=0x102AF, }, [0x102B0]={ category="lo", description="CARIAN LETTER S", direction="l", linebreak="al", unicodeslot=0x102B0, }, [0x102B1]={ category="lo", description="CARIAN LETTER C-18", direction="l", linebreak="al", unicodeslot=0x102B1, }, [0x102B2]={ category="lo", description="CARIAN LETTER U", direction="l", linebreak="al", unicodeslot=0x102B2, }, [0x102B3]={ category="lo", description="CARIAN LETTER NN", direction="l", linebreak="al", unicodeslot=0x102B3, }, [0x102B4]={ category="lo", description="CARIAN LETTER X", direction="l", linebreak="al", unicodeslot=0x102B4, }, [0x102B5]={ category="lo", description="CARIAN LETTER N", direction="l", linebreak="al", unicodeslot=0x102B5, }, [0x102B6]={ category="lo", description="CARIAN LETTER TT2", direction="l", linebreak="al", unicodeslot=0x102B6, }, [0x102B7]={ category="lo", description="CARIAN LETTER P", direction="l", linebreak="al", unicodeslot=0x102B7, }, [0x102B8]={ category="lo", description="CARIAN LETTER SS", direction="l", linebreak="al", unicodeslot=0x102B8, }, [0x102B9]={ category="lo", description="CARIAN LETTER I", direction="l", linebreak="al", unicodeslot=0x102B9, }, [0x102BA]={ category="lo", description="CARIAN LETTER E", direction="l", linebreak="al", unicodeslot=0x102BA, }, [0x102BB]={ category="lo", description="CARIAN LETTER UUUU", direction="l", linebreak="al", unicodeslot=0x102BB, }, [0x102BC]={ category="lo", description="CARIAN LETTER K", direction="l", linebreak="al", unicodeslot=0x102BC, }, [0x102BD]={ category="lo", description="CARIAN LETTER K2", direction="l", linebreak="al", unicodeslot=0x102BD, }, [0x102BE]={ category="lo", description="CARIAN LETTER ND", direction="l", linebreak="al", unicodeslot=0x102BE, }, [0x102BF]={ category="lo", description="CARIAN LETTER UU", direction="l", linebreak="al", unicodeslot=0x102BF, }, [0x102C0]={ category="lo", description="CARIAN LETTER G", direction="l", linebreak="al", unicodeslot=0x102C0, }, [0x102C1]={ category="lo", description="CARIAN LETTER G2", direction="l", linebreak="al", unicodeslot=0x102C1, }, [0x102C2]={ category="lo", description="CARIAN LETTER ST", direction="l", linebreak="al", unicodeslot=0x102C2, }, [0x102C3]={ category="lo", description="CARIAN LETTER ST2", direction="l", linebreak="al", unicodeslot=0x102C3, }, [0x102C4]={ category="lo", description="CARIAN LETTER NG", direction="l", linebreak="al", unicodeslot=0x102C4, }, [0x102C5]={ category="lo", description="CARIAN LETTER II", direction="l", linebreak="al", unicodeslot=0x102C5, }, [0x102C6]={ category="lo", description="CARIAN LETTER C-39", direction="l", linebreak="al", unicodeslot=0x102C6, }, [0x102C7]={ category="lo", description="CARIAN LETTER TT", direction="l", linebreak="al", unicodeslot=0x102C7, }, [0x102C8]={ category="lo", description="CARIAN LETTER UUU2", direction="l", linebreak="al", unicodeslot=0x102C8, }, [0x102C9]={ category="lo", description="CARIAN LETTER RR", direction="l", linebreak="al", unicodeslot=0x102C9, }, [0x102CA]={ category="lo", description="CARIAN LETTER MB", direction="l", linebreak="al", unicodeslot=0x102CA, }, [0x102CB]={ category="lo", description="CARIAN LETTER MB2", direction="l", linebreak="al", unicodeslot=0x102CB, }, [0x102CC]={ category="lo", description="CARIAN LETTER MB3", direction="l", linebreak="al", unicodeslot=0x102CC, }, [0x102CD]={ category="lo", description="CARIAN LETTER MB4", direction="l", linebreak="al", unicodeslot=0x102CD, }, [0x102CE]={ category="lo", description="CARIAN LETTER LD2", direction="l", linebreak="al", unicodeslot=0x102CE, }, [0x102CF]={ category="lo", description="CARIAN LETTER E2", direction="l", linebreak="al", unicodeslot=0x102CF, }, [0x102D0]={ category="lo", description="CARIAN LETTER UUU3", direction="l", linebreak="al", unicodeslot=0x102D0, }, [0x10300]={ category="lo", description="OLD ITALIC LETTER A", direction="l", linebreak="al", unicodeslot=0x10300, }, [0x10301]={ category="lo", description="OLD ITALIC LETTER BE", direction="l", linebreak="al", unicodeslot=0x10301, }, [0x10302]={ category="lo", description="OLD ITALIC LETTER KE", direction="l", linebreak="al", unicodeslot=0x10302, }, [0x10303]={ category="lo", description="OLD ITALIC LETTER DE", direction="l", linebreak="al", unicodeslot=0x10303, }, [0x10304]={ category="lo", description="OLD ITALIC LETTER E", direction="l", linebreak="al", unicodeslot=0x10304, }, [0x10305]={ category="lo", description="OLD ITALIC LETTER VE", direction="l", linebreak="al", unicodeslot=0x10305, }, [0x10306]={ category="lo", description="OLD ITALIC LETTER ZE", direction="l", linebreak="al", unicodeslot=0x10306, }, [0x10307]={ category="lo", description="OLD ITALIC LETTER HE", direction="l", linebreak="al", unicodeslot=0x10307, }, [0x10308]={ category="lo", description="OLD ITALIC LETTER THE", direction="l", linebreak="al", unicodeslot=0x10308, }, [0x10309]={ category="lo", description="OLD ITALIC LETTER I", direction="l", linebreak="al", unicodeslot=0x10309, }, [0x1030A]={ category="lo", description="OLD ITALIC LETTER KA", direction="l", linebreak="al", unicodeslot=0x1030A, }, [0x1030B]={ category="lo", description="OLD ITALIC LETTER EL", direction="l", linebreak="al", unicodeslot=0x1030B, }, [0x1030C]={ category="lo", description="OLD ITALIC LETTER EM", direction="l", linebreak="al", unicodeslot=0x1030C, }, [0x1030D]={ category="lo", description="OLD ITALIC LETTER EN", direction="l", linebreak="al", unicodeslot=0x1030D, }, [0x1030E]={ category="lo", description="OLD ITALIC LETTER ESH", direction="l", linebreak="al", unicodeslot=0x1030E, }, [0x1030F]={ category="lo", description="OLD ITALIC LETTER O", direction="l", linebreak="al", unicodeslot=0x1030F, }, [0x10310]={ category="lo", description="OLD ITALIC LETTER PE", direction="l", linebreak="al", unicodeslot=0x10310, }, [0x10311]={ category="lo", description="OLD ITALIC LETTER SHE", direction="l", linebreak="al", unicodeslot=0x10311, }, [0x10312]={ category="lo", description="OLD ITALIC LETTER KU", direction="l", linebreak="al", unicodeslot=0x10312, }, [0x10313]={ category="lo", description="OLD ITALIC LETTER ER", direction="l", linebreak="al", unicodeslot=0x10313, }, [0x10314]={ category="lo", description="OLD ITALIC LETTER ES", direction="l", linebreak="al", unicodeslot=0x10314, }, [0x10315]={ category="lo", description="OLD ITALIC LETTER TE", direction="l", linebreak="al", unicodeslot=0x10315, }, [0x10316]={ category="lo", description="OLD ITALIC LETTER U", direction="l", linebreak="al", unicodeslot=0x10316, }, [0x10317]={ category="lo", description="OLD ITALIC LETTER EKS", direction="l", linebreak="al", unicodeslot=0x10317, }, [0x10318]={ category="lo", description="OLD ITALIC LETTER PHE", direction="l", linebreak="al", unicodeslot=0x10318, }, [0x10319]={ category="lo", description="OLD ITALIC LETTER KHE", direction="l", linebreak="al", unicodeslot=0x10319, }, [0x1031A]={ category="lo", description="OLD ITALIC LETTER EF", direction="l", linebreak="al", unicodeslot=0x1031A, }, [0x1031B]={ category="lo", description="OLD ITALIC LETTER ERS", direction="l", linebreak="al", unicodeslot=0x1031B, }, [0x1031C]={ category="lo", description="OLD ITALIC LETTER CHE", direction="l", linebreak="al", unicodeslot=0x1031C, }, [0x1031D]={ category="lo", description="OLD ITALIC LETTER II", direction="l", linebreak="al", unicodeslot=0x1031D, }, [0x1031E]={ category="lo", description="OLD ITALIC LETTER UU", direction="l", linebreak="al", unicodeslot=0x1031E, }, [0x10320]={ category="no", description="OLD ITALIC NUMERAL ONE", direction="l", linebreak="al", unicodeslot=0x10320, }, [0x10321]={ category="no", description="OLD ITALIC NUMERAL FIVE", direction="l", linebreak="al", unicodeslot=0x10321, }, [0x10322]={ category="no", description="OLD ITALIC NUMERAL TEN", direction="l", linebreak="al", unicodeslot=0x10322, }, [0x10323]={ category="no", description="OLD ITALIC NUMERAL FIFTY", direction="l", linebreak="al", unicodeslot=0x10323, }, [0x10330]={ category="lo", description="GOTHIC LETTER AHSA", direction="l", linebreak="al", unicodeslot=0x10330, }, [0x10331]={ category="lo", description="GOTHIC LETTER BAIRKAN", direction="l", linebreak="al", unicodeslot=0x10331, }, [0x10332]={ category="lo", description="GOTHIC LETTER GIBA", direction="l", linebreak="al", unicodeslot=0x10332, }, [0x10333]={ category="lo", description="GOTHIC LETTER DAGS", direction="l", linebreak="al", unicodeslot=0x10333, }, [0x10334]={ category="lo", description="GOTHIC LETTER AIHVUS", direction="l", linebreak="al", unicodeslot=0x10334, }, [0x10335]={ category="lo", description="GOTHIC LETTER QAIRTHRA", direction="l", linebreak="al", unicodeslot=0x10335, }, [0x10336]={ category="lo", description="GOTHIC LETTER IUJA", direction="l", linebreak="al", unicodeslot=0x10336, }, [0x10337]={ category="lo", description="GOTHIC LETTER HAGL", direction="l", linebreak="al", unicodeslot=0x10337, }, [0x10338]={ category="lo", description="GOTHIC LETTER THIUTH", direction="l", linebreak="al", unicodeslot=0x10338, }, [0x10339]={ category="lo", description="GOTHIC LETTER EIS", direction="l", linebreak="al", unicodeslot=0x10339, }, [0x1033A]={ category="lo", description="GOTHIC LETTER KUSMA", direction="l", linebreak="al", unicodeslot=0x1033A, }, [0x1033B]={ category="lo", description="GOTHIC LETTER LAGUS", direction="l", linebreak="al", unicodeslot=0x1033B, }, [0x1033C]={ category="lo", description="GOTHIC LETTER MANNA", direction="l", linebreak="al", unicodeslot=0x1033C, }, [0x1033D]={ category="lo", description="GOTHIC LETTER NAUTHS", direction="l", linebreak="al", unicodeslot=0x1033D, }, [0x1033E]={ category="lo", description="GOTHIC LETTER JER", direction="l", linebreak="al", unicodeslot=0x1033E, }, [0x1033F]={ category="lo", description="GOTHIC LETTER URUS", direction="l", linebreak="al", unicodeslot=0x1033F, }, [0x10340]={ category="lo", description="GOTHIC LETTER PAIRTHRA", direction="l", linebreak="al", unicodeslot=0x10340, }, [0x10341]={ category="nl", description="GOTHIC LETTER NINETY", direction="l", linebreak="al", unicodeslot=0x10341, }, [0x10342]={ category="lo", description="GOTHIC LETTER RAIDA", direction="l", linebreak="al", unicodeslot=0x10342, }, [0x10343]={ category="lo", description="GOTHIC LETTER SAUIL", direction="l", linebreak="al", unicodeslot=0x10343, }, [0x10344]={ category="lo", description="GOTHIC LETTER TEIWS", direction="l", linebreak="al", unicodeslot=0x10344, }, [0x10345]={ category="lo", description="GOTHIC LETTER WINJA", direction="l", linebreak="al", unicodeslot=0x10345, }, [0x10346]={ category="lo", description="GOTHIC LETTER FAIHU", direction="l", linebreak="al", unicodeslot=0x10346, }, [0x10347]={ category="lo", description="GOTHIC LETTER IGGWS", direction="l", linebreak="al", unicodeslot=0x10347, }, [0x10348]={ category="lo", description="GOTHIC LETTER HWAIR", direction="l", linebreak="al", unicodeslot=0x10348, }, [0x10349]={ category="lo", description="GOTHIC LETTER OTHAL", direction="l", linebreak="al", unicodeslot=0x10349, }, [0x1034A]={ category="nl", description="GOTHIC LETTER NINE HUNDRED", direction="l", linebreak="al", unicodeslot=0x1034A, }, [0x10380]={ category="lo", description="UGARITIC LETTER ALPA", direction="l", linebreak="al", unicodeslot=0x10380, }, [0x10381]={ category="lo", description="UGARITIC LETTER BETA", direction="l", linebreak="al", unicodeslot=0x10381, }, [0x10382]={ category="lo", description="UGARITIC LETTER GAMLA", direction="l", linebreak="al", unicodeslot=0x10382, }, [0x10383]={ category="lo", description="UGARITIC LETTER KHA", direction="l", linebreak="al", unicodeslot=0x10383, }, [0x10384]={ category="lo", description="UGARITIC LETTER DELTA", direction="l", linebreak="al", unicodeslot=0x10384, }, [0x10385]={ category="lo", description="UGARITIC LETTER HO", direction="l", linebreak="al", unicodeslot=0x10385, }, [0x10386]={ category="lo", description="UGARITIC LETTER WO", direction="l", linebreak="al", unicodeslot=0x10386, }, [0x10387]={ category="lo", description="UGARITIC LETTER ZETA", direction="l", linebreak="al", unicodeslot=0x10387, }, [0x10388]={ category="lo", description="UGARITIC LETTER HOTA", direction="l", linebreak="al", unicodeslot=0x10388, }, [0x10389]={ category="lo", description="UGARITIC LETTER TET", direction="l", linebreak="al", unicodeslot=0x10389, }, [0x1038A]={ category="lo", description="UGARITIC LETTER YOD", direction="l", linebreak="al", unicodeslot=0x1038A, }, [0x1038B]={ category="lo", description="UGARITIC LETTER KAF", direction="l", linebreak="al", unicodeslot=0x1038B, }, [0x1038C]={ category="lo", description="UGARITIC LETTER SHIN", direction="l", linebreak="al", unicodeslot=0x1038C, }, [0x1038D]={ category="lo", description="UGARITIC LETTER LAMDA", direction="l", linebreak="al", unicodeslot=0x1038D, }, [0x1038E]={ category="lo", description="UGARITIC LETTER MEM", direction="l", linebreak="al", unicodeslot=0x1038E, }, [0x1038F]={ category="lo", description="UGARITIC LETTER DHAL", direction="l", linebreak="al", unicodeslot=0x1038F, }, [0x10390]={ category="lo", description="UGARITIC LETTER NUN", direction="l", linebreak="al", unicodeslot=0x10390, }, [0x10391]={ category="lo", description="UGARITIC LETTER ZU", direction="l", linebreak="al", unicodeslot=0x10391, }, [0x10392]={ category="lo", description="UGARITIC LETTER SAMKA", direction="l", linebreak="al", unicodeslot=0x10392, }, [0x10393]={ category="lo", description="UGARITIC LETTER AIN", direction="l", linebreak="al", unicodeslot=0x10393, }, [0x10394]={ category="lo", description="UGARITIC LETTER PU", direction="l", linebreak="al", unicodeslot=0x10394, }, [0x10395]={ category="lo", description="UGARITIC LETTER SADE", direction="l", linebreak="al", unicodeslot=0x10395, }, [0x10396]={ category="lo", description="UGARITIC LETTER QOPA", direction="l", linebreak="al", unicodeslot=0x10396, }, [0x10397]={ category="lo", description="UGARITIC LETTER RASHA", direction="l", linebreak="al", unicodeslot=0x10397, }, [0x10398]={ category="lo", description="UGARITIC LETTER THANNA", direction="l", linebreak="al", unicodeslot=0x10398, }, [0x10399]={ category="lo", description="UGARITIC LETTER GHAIN", direction="l", linebreak="al", unicodeslot=0x10399, }, [0x1039A]={ category="lo", description="UGARITIC LETTER TO", direction="l", linebreak="al", unicodeslot=0x1039A, }, [0x1039B]={ category="lo", description="UGARITIC LETTER I", direction="l", linebreak="al", unicodeslot=0x1039B, }, [0x1039C]={ category="lo", description="UGARITIC LETTER U", direction="l", linebreak="al", unicodeslot=0x1039C, }, [0x1039D]={ category="lo", description="UGARITIC LETTER SSU", direction="l", linebreak="al", unicodeslot=0x1039D, }, [0x1039F]={ category="po", description="UGARITIC WORD DIVIDER", direction="l", linebreak="ba", unicodeslot=0x1039F, }, [0x103A0]={ category="lo", description="OLD PERSIAN SIGN A", direction="l", linebreak="al", unicodeslot=0x103A0, }, [0x103A1]={ category="lo", description="OLD PERSIAN SIGN I", direction="l", linebreak="al", unicodeslot=0x103A1, }, [0x103A2]={ category="lo", description="OLD PERSIAN SIGN U", direction="l", linebreak="al", unicodeslot=0x103A2, }, [0x103A3]={ category="lo", description="OLD PERSIAN SIGN KA", direction="l", linebreak="al", unicodeslot=0x103A3, }, [0x103A4]={ category="lo", description="OLD PERSIAN SIGN KU", direction="l", linebreak="al", unicodeslot=0x103A4, }, [0x103A5]={ category="lo", description="OLD PERSIAN SIGN GA", direction="l", linebreak="al", unicodeslot=0x103A5, }, [0x103A6]={ category="lo", description="OLD PERSIAN SIGN GU", direction="l", linebreak="al", unicodeslot=0x103A6, }, [0x103A7]={ category="lo", description="OLD PERSIAN SIGN XA", direction="l", linebreak="al", unicodeslot=0x103A7, }, [0x103A8]={ category="lo", description="OLD PERSIAN SIGN CA", direction="l", linebreak="al", unicodeslot=0x103A8, }, [0x103A9]={ category="lo", description="OLD PERSIAN SIGN JA", direction="l", linebreak="al", unicodeslot=0x103A9, }, [0x103AA]={ category="lo", description="OLD PERSIAN SIGN JI", direction="l", linebreak="al", unicodeslot=0x103AA, }, [0x103AB]={ category="lo", description="OLD PERSIAN SIGN TA", direction="l", linebreak="al", unicodeslot=0x103AB, }, [0x103AC]={ category="lo", description="OLD PERSIAN SIGN TU", direction="l", linebreak="al", unicodeslot=0x103AC, }, [0x103AD]={ category="lo", description="OLD PERSIAN SIGN DA", direction="l", linebreak="al", unicodeslot=0x103AD, }, [0x103AE]={ category="lo", description="OLD PERSIAN SIGN DI", direction="l", linebreak="al", unicodeslot=0x103AE, }, [0x103AF]={ category="lo", description="OLD PERSIAN SIGN DU", direction="l", linebreak="al", unicodeslot=0x103AF, }, [0x103B0]={ category="lo", description="OLD PERSIAN SIGN THA", direction="l", linebreak="al", unicodeslot=0x103B0, }, [0x103B1]={ category="lo", description="OLD PERSIAN SIGN PA", direction="l", linebreak="al", unicodeslot=0x103B1, }, [0x103B2]={ category="lo", description="OLD PERSIAN SIGN BA", direction="l", linebreak="al", unicodeslot=0x103B2, }, [0x103B3]={ category="lo", description="OLD PERSIAN SIGN FA", direction="l", linebreak="al", unicodeslot=0x103B3, }, [0x103B4]={ category="lo", description="OLD PERSIAN SIGN NA", direction="l", linebreak="al", unicodeslot=0x103B4, }, [0x103B5]={ category="lo", description="OLD PERSIAN SIGN NU", direction="l", linebreak="al", unicodeslot=0x103B5, }, [0x103B6]={ category="lo", description="OLD PERSIAN SIGN MA", direction="l", linebreak="al", unicodeslot=0x103B6, }, [0x103B7]={ category="lo", description="OLD PERSIAN SIGN MI", direction="l", linebreak="al", unicodeslot=0x103B7, }, [0x103B8]={ category="lo", description="OLD PERSIAN SIGN MU", direction="l", linebreak="al", unicodeslot=0x103B8, }, [0x103B9]={ category="lo", description="OLD PERSIAN SIGN YA", direction="l", linebreak="al", unicodeslot=0x103B9, }, [0x103BA]={ category="lo", description="OLD PERSIAN SIGN VA", direction="l", linebreak="al", unicodeslot=0x103BA, }, [0x103BB]={ category="lo", description="OLD PERSIAN SIGN VI", direction="l", linebreak="al", unicodeslot=0x103BB, }, [0x103BC]={ category="lo", description="OLD PERSIAN SIGN RA", direction="l", linebreak="al", unicodeslot=0x103BC, }, [0x103BD]={ category="lo", description="OLD PERSIAN SIGN RU", direction="l", linebreak="al", unicodeslot=0x103BD, }, [0x103BE]={ category="lo", description="OLD PERSIAN SIGN LA", direction="l", linebreak="al", unicodeslot=0x103BE, }, [0x103BF]={ category="lo", description="OLD PERSIAN SIGN SA", direction="l", linebreak="al", unicodeslot=0x103BF, }, [0x103C0]={ category="lo", description="OLD PERSIAN SIGN ZA", direction="l", linebreak="al", unicodeslot=0x103C0, }, [0x103C1]={ category="lo", description="OLD PERSIAN SIGN SHA", direction="l", linebreak="al", unicodeslot=0x103C1, }, [0x103C2]={ category="lo", description="OLD PERSIAN SIGN SSA", direction="l", linebreak="al", unicodeslot=0x103C2, }, [0x103C3]={ category="lo", description="OLD PERSIAN SIGN HA", direction="l", linebreak="al", unicodeslot=0x103C3, }, [0x103C8]={ category="lo", description="OLD PERSIAN SIGN AURAMAZDAA", direction="l", linebreak="al", unicodeslot=0x103C8, }, [0x103C9]={ category="lo", description="OLD PERSIAN SIGN AURAMAZDAA-0x0002", direction="l", linebreak="al", unicodeslot=0x103C9, }, [0x103CA]={ category="lo", description="OLD PERSIAN SIGN AURAMAZDAAHA", direction="l", linebreak="al", unicodeslot=0x103CA, }, [0x103CB]={ category="lo", description="OLD PERSIAN SIGN XSHAAYATHIYA", direction="l", linebreak="al", unicodeslot=0x103CB, }, [0x103CC]={ category="lo", description="OLD PERSIAN SIGN DAHYAAUSH", direction="l", linebreak="al", unicodeslot=0x103CC, }, [0x103CD]={ category="lo", description="OLD PERSIAN SIGN DAHYAAUSH-0x0002", direction="l", linebreak="al", unicodeslot=0x103CD, }, [0x103CE]={ category="lo", description="OLD PERSIAN SIGN BAGA", direction="l", linebreak="al", unicodeslot=0x103CE, }, [0x103CF]={ category="lo", description="OLD PERSIAN SIGN BUUMISH", direction="l", linebreak="al", unicodeslot=0x103CF, }, [0x103D0]={ category="po", description="OLD PERSIAN WORD DIVIDER", direction="l", linebreak="ba", unicodeslot=0x103D0, }, [0x103D1]={ category="nl", description="OLD PERSIAN NUMBER ONE", direction="l", linebreak="al", unicodeslot=0x103D1, }, [0x103D2]={ category="nl", description="OLD PERSIAN NUMBER TWO", direction="l", linebreak="al", unicodeslot=0x103D2, }, [0x103D3]={ category="nl", description="OLD PERSIAN NUMBER TEN", direction="l", linebreak="al", unicodeslot=0x103D3, }, [0x103D4]={ category="nl", description="OLD PERSIAN NUMBER TWENTY", direction="l", linebreak="al", unicodeslot=0x103D4, }, [0x103D5]={ category="nl", description="OLD PERSIAN NUMBER HUNDRED", direction="l", linebreak="al", unicodeslot=0x103D5, }, [0x10400]={ category="lu", description="DESERET CAPITAL LETTER LONG I", direction="l", lccode=0x10428, linebreak="al", unicodeslot=0x10400, }, [0x10401]={ category="lu", description="DESERET CAPITAL LETTER LONG E", direction="l", lccode=0x10429, linebreak="al", unicodeslot=0x10401, }, [0x10402]={ category="lu", description="DESERET CAPITAL LETTER LONG A", direction="l", lccode=0x1042A, linebreak="al", unicodeslot=0x10402, }, [0x10403]={ category="lu", description="DESERET CAPITAL LETTER LONG AH", direction="l", lccode=0x1042B, linebreak="al", unicodeslot=0x10403, }, [0x10404]={ category="lu", description="DESERET CAPITAL LETTER LONG O", direction="l", lccode=0x1042C, linebreak="al", unicodeslot=0x10404, }, [0x10405]={ category="lu", description="DESERET CAPITAL LETTER LONG OO", direction="l", lccode=0x1042D, linebreak="al", unicodeslot=0x10405, }, [0x10406]={ category="lu", description="DESERET CAPITAL LETTER SHORT I", direction="l", lccode=0x1042E, linebreak="al", unicodeslot=0x10406, }, [0x10407]={ category="lu", description="DESERET CAPITAL LETTER SHORT E", direction="l", lccode=0x1042F, linebreak="al", unicodeslot=0x10407, }, [0x10408]={ category="lu", description="DESERET CAPITAL LETTER SHORT A", direction="l", lccode=0x10430, linebreak="al", unicodeslot=0x10408, }, [0x10409]={ category="lu", description="DESERET CAPITAL LETTER SHORT AH", direction="l", lccode=0x10431, linebreak="al", unicodeslot=0x10409, }, [0x1040A]={ category="lu", description="DESERET CAPITAL LETTER SHORT O", direction="l", lccode=0x10432, linebreak="al", unicodeslot=0x1040A, }, [0x1040B]={ category="lu", description="DESERET CAPITAL LETTER SHORT OO", direction="l", lccode=0x10433, linebreak="al", unicodeslot=0x1040B, }, [0x1040C]={ category="lu", description="DESERET CAPITAL LETTER AY", direction="l", lccode=0x10434, linebreak="al", unicodeslot=0x1040C, }, [0x1040D]={ category="lu", description="DESERET CAPITAL LETTER OW", direction="l", lccode=0x10435, linebreak="al", unicodeslot=0x1040D, }, [0x1040E]={ category="lu", description="DESERET CAPITAL LETTER WU", direction="l", lccode=0x10436, linebreak="al", unicodeslot=0x1040E, }, [0x1040F]={ category="lu", description="DESERET CAPITAL LETTER YEE", direction="l", lccode=0x10437, linebreak="al", unicodeslot=0x1040F, }, [0x10410]={ category="lu", description="DESERET CAPITAL LETTER H", direction="l", lccode=0x10438, linebreak="al", unicodeslot=0x10410, }, [0x10411]={ category="lu", description="DESERET CAPITAL LETTER PEE", direction="l", lccode=0x10439, linebreak="al", unicodeslot=0x10411, }, [0x10412]={ category="lu", description="DESERET CAPITAL LETTER BEE", direction="l", lccode=0x1043A, linebreak="al", unicodeslot=0x10412, }, [0x10413]={ category="lu", description="DESERET CAPITAL LETTER TEE", direction="l", lccode=0x1043B, linebreak="al", unicodeslot=0x10413, }, [0x10414]={ category="lu", description="DESERET CAPITAL LETTER DEE", direction="l", lccode=0x1043C, linebreak="al", unicodeslot=0x10414, }, [0x10415]={ category="lu", description="DESERET CAPITAL LETTER CHEE", direction="l", lccode=0x1043D, linebreak="al", unicodeslot=0x10415, }, [0x10416]={ category="lu", description="DESERET CAPITAL LETTER JEE", direction="l", lccode=0x1043E, linebreak="al", unicodeslot=0x10416, }, [0x10417]={ category="lu", description="DESERET CAPITAL LETTER KAY", direction="l", lccode=0x1043F, linebreak="al", unicodeslot=0x10417, }, [0x10418]={ category="lu", description="DESERET CAPITAL LETTER GAY", direction="l", lccode=0x10440, linebreak="al", unicodeslot=0x10418, }, [0x10419]={ category="lu", description="DESERET CAPITAL LETTER EF", direction="l", lccode=0x10441, linebreak="al", unicodeslot=0x10419, }, [0x1041A]={ category="lu", description="DESERET CAPITAL LETTER VEE", direction="l", lccode=0x10442, linebreak="al", unicodeslot=0x1041A, }, [0x1041B]={ category="lu", description="DESERET CAPITAL LETTER ETH", direction="l", lccode=0x10443, linebreak="al", unicodeslot=0x1041B, }, [0x1041C]={ category="lu", description="DESERET CAPITAL LETTER THEE", direction="l", lccode=0x10444, linebreak="al", unicodeslot=0x1041C, }, [0x1041D]={ category="lu", description="DESERET CAPITAL LETTER ES", direction="l", lccode=0x10445, linebreak="al", unicodeslot=0x1041D, }, [0x1041E]={ category="lu", description="DESERET CAPITAL LETTER ZEE", direction="l", lccode=0x10446, linebreak="al", unicodeslot=0x1041E, }, [0x1041F]={ category="lu", description="DESERET CAPITAL LETTER ESH", direction="l", lccode=0x10447, linebreak="al", unicodeslot=0x1041F, }, [0x10420]={ category="lu", description="DESERET CAPITAL LETTER ZHEE", direction="l", lccode=0x10448, linebreak="al", unicodeslot=0x10420, }, [0x10421]={ category="lu", description="DESERET CAPITAL LETTER ER", direction="l", lccode=0x10449, linebreak="al", unicodeslot=0x10421, }, [0x10422]={ category="lu", description="DESERET CAPITAL LETTER EL", direction="l", lccode=0x1044A, linebreak="al", unicodeslot=0x10422, }, [0x10423]={ category="lu", description="DESERET CAPITAL LETTER EM", direction="l", lccode=0x1044B, linebreak="al", unicodeslot=0x10423, }, [0x10424]={ category="lu", description="DESERET CAPITAL LETTER EN", direction="l", lccode=0x1044C, linebreak="al", unicodeslot=0x10424, }, [0x10425]={ category="lu", description="DESERET CAPITAL LETTER ENG", direction="l", lccode=0x1044D, linebreak="al", unicodeslot=0x10425, }, [0x10426]={ category="lu", description="DESERET CAPITAL LETTER OI", direction="l", lccode=0x1044E, linebreak="al", unicodeslot=0x10426, }, [0x10427]={ category="lu", description="DESERET CAPITAL LETTER EW", direction="l", lccode=0x1044F, linebreak="al", unicodeslot=0x10427, }, [0x10428]={ category="ll", description="DESERET SMALL LETTER LONG I", direction="l", linebreak="al", uccode=0x10400, unicodeslot=0x10428, }, [0x10429]={ category="ll", description="DESERET SMALL LETTER LONG E", direction="l", linebreak="al", uccode=0x10401, unicodeslot=0x10429, }, [0x1042A]={ category="ll", description="DESERET SMALL LETTER LONG A", direction="l", linebreak="al", uccode=0x10402, unicodeslot=0x1042A, }, [0x1042B]={ category="ll", description="DESERET SMALL LETTER LONG AH", direction="l", linebreak="al", uccode=0x10403, unicodeslot=0x1042B, }, [0x1042C]={ category="ll", description="DESERET SMALL LETTER LONG O", direction="l", linebreak="al", uccode=0x10404, unicodeslot=0x1042C, }, [0x1042D]={ category="ll", description="DESERET SMALL LETTER LONG OO", direction="l", linebreak="al", uccode=0x10405, unicodeslot=0x1042D, }, [0x1042E]={ category="ll", description="DESERET SMALL LETTER SHORT I", direction="l", linebreak="al", uccode=0x10406, unicodeslot=0x1042E, }, [0x1042F]={ category="ll", description="DESERET SMALL LETTER SHORT E", direction="l", linebreak="al", uccode=0x10407, unicodeslot=0x1042F, }, [0x10430]={ category="ll", description="DESERET SMALL LETTER SHORT A", direction="l", linebreak="al", uccode=0x10408, unicodeslot=0x10430, }, [0x10431]={ category="ll", description="DESERET SMALL LETTER SHORT AH", direction="l", linebreak="al", uccode=0x10409, unicodeslot=0x10431, }, [0x10432]={ category="ll", description="DESERET SMALL LETTER SHORT O", direction="l", linebreak="al", uccode=0x1040A, unicodeslot=0x10432, }, [0x10433]={ category="ll", description="DESERET SMALL LETTER SHORT OO", direction="l", linebreak="al", uccode=0x1040B, unicodeslot=0x10433, }, [0x10434]={ category="ll", description="DESERET SMALL LETTER AY", direction="l", linebreak="al", uccode=0x1040C, unicodeslot=0x10434, }, [0x10435]={ category="ll", description="DESERET SMALL LETTER OW", direction="l", linebreak="al", uccode=0x1040D, unicodeslot=0x10435, }, [0x10436]={ category="ll", description="DESERET SMALL LETTER WU", direction="l", linebreak="al", uccode=0x1040E, unicodeslot=0x10436, }, [0x10437]={ category="ll", description="DESERET SMALL LETTER YEE", direction="l", linebreak="al", uccode=0x1040F, unicodeslot=0x10437, }, [0x10438]={ category="ll", description="DESERET SMALL LETTER H", direction="l", linebreak="al", uccode=0x10410, unicodeslot=0x10438, }, [0x10439]={ category="ll", description="DESERET SMALL LETTER PEE", direction="l", linebreak="al", uccode=0x10411, unicodeslot=0x10439, }, [0x1043A]={ category="ll", description="DESERET SMALL LETTER BEE", direction="l", linebreak="al", uccode=0x10412, unicodeslot=0x1043A, }, [0x1043B]={ category="ll", description="DESERET SMALL LETTER TEE", direction="l", linebreak="al", uccode=0x10413, unicodeslot=0x1043B, }, [0x1043C]={ category="ll", description="DESERET SMALL LETTER DEE", direction="l", linebreak="al", uccode=0x10414, unicodeslot=0x1043C, }, [0x1043D]={ category="ll", description="DESERET SMALL LETTER CHEE", direction="l", linebreak="al", uccode=0x10415, unicodeslot=0x1043D, }, [0x1043E]={ category="ll", description="DESERET SMALL LETTER JEE", direction="l", linebreak="al", uccode=0x10416, unicodeslot=0x1043E, }, [0x1043F]={ category="ll", description="DESERET SMALL LETTER KAY", direction="l", linebreak="al", uccode=0x10417, unicodeslot=0x1043F, }, [0x10440]={ category="ll", description="DESERET SMALL LETTER GAY", direction="l", linebreak="al", uccode=0x10418, unicodeslot=0x10440, }, [0x10441]={ category="ll", description="DESERET SMALL LETTER EF", direction="l", linebreak="al", uccode=0x10419, unicodeslot=0x10441, }, [0x10442]={ category="ll", description="DESERET SMALL LETTER VEE", direction="l", linebreak="al", uccode=0x1041A, unicodeslot=0x10442, }, [0x10443]={ category="ll", description="DESERET SMALL LETTER ETH", direction="l", linebreak="al", uccode=0x1041B, unicodeslot=0x10443, }, [0x10444]={ category="ll", description="DESERET SMALL LETTER THEE", direction="l", linebreak="al", uccode=0x1041C, unicodeslot=0x10444, }, [0x10445]={ category="ll", description="DESERET SMALL LETTER ES", direction="l", linebreak="al", uccode=0x1041D, unicodeslot=0x10445, }, [0x10446]={ category="ll", description="DESERET SMALL LETTER ZEE", direction="l", linebreak="al", uccode=0x1041E, unicodeslot=0x10446, }, [0x10447]={ category="ll", description="DESERET SMALL LETTER ESH", direction="l", linebreak="al", uccode=0x1041F, unicodeslot=0x10447, }, [0x10448]={ category="ll", description="DESERET SMALL LETTER ZHEE", direction="l", linebreak="al", uccode=0x10420, unicodeslot=0x10448, }, [0x10449]={ category="ll", description="DESERET SMALL LETTER ER", direction="l", linebreak="al", uccode=0x10421, unicodeslot=0x10449, }, [0x1044A]={ category="ll", description="DESERET SMALL LETTER EL", direction="l", linebreak="al", uccode=0x10422, unicodeslot=0x1044A, }, [0x1044B]={ category="ll", description="DESERET SMALL LETTER EM", direction="l", linebreak="al", uccode=0x10423, unicodeslot=0x1044B, }, [0x1044C]={ category="ll", description="DESERET SMALL LETTER EN", direction="l", linebreak="al", uccode=0x10424, unicodeslot=0x1044C, }, [0x1044D]={ category="ll", description="DESERET SMALL LETTER ENG", direction="l", linebreak="al", uccode=0x10425, unicodeslot=0x1044D, }, [0x1044E]={ category="ll", description="DESERET SMALL LETTER OI", direction="l", linebreak="al", uccode=0x10426, unicodeslot=0x1044E, }, [0x1044F]={ category="ll", description="DESERET SMALL LETTER EW", direction="l", linebreak="al", uccode=0x10427, unicodeslot=0x1044F, }, [0x10450]={ category="lo", description="SHAVIAN LETTER PEEP", direction="l", linebreak="al", unicodeslot=0x10450, }, [0x10451]={ category="lo", description="SHAVIAN LETTER TOT", direction="l", linebreak="al", unicodeslot=0x10451, }, [0x10452]={ category="lo", description="SHAVIAN LETTER KICK", direction="l", linebreak="al", unicodeslot=0x10452, }, [0x10453]={ category="lo", description="SHAVIAN LETTER FEE", direction="l", linebreak="al", unicodeslot=0x10453, }, [0x10454]={ category="lo", description="SHAVIAN LETTER THIGH", direction="l", linebreak="al", unicodeslot=0x10454, }, [0x10455]={ category="lo", description="SHAVIAN LETTER SO", direction="l", linebreak="al", unicodeslot=0x10455, }, [0x10456]={ category="lo", description="SHAVIAN LETTER SURE", direction="l", linebreak="al", unicodeslot=0x10456, }, [0x10457]={ category="lo", description="SHAVIAN LETTER CHURCH", direction="l", linebreak="al", unicodeslot=0x10457, }, [0x10458]={ category="lo", description="SHAVIAN LETTER YEA", direction="l", linebreak="al", unicodeslot=0x10458, }, [0x10459]={ category="lo", description="SHAVIAN LETTER HUNG", direction="l", linebreak="al", unicodeslot=0x10459, }, [0x1045A]={ category="lo", description="SHAVIAN LETTER BIB", direction="l", linebreak="al", unicodeslot=0x1045A, }, [0x1045B]={ category="lo", description="SHAVIAN LETTER DEAD", direction="l", linebreak="al", unicodeslot=0x1045B, }, [0x1045C]={ category="lo", description="SHAVIAN LETTER GAG", direction="l", linebreak="al", unicodeslot=0x1045C, }, [0x1045D]={ category="lo", description="SHAVIAN LETTER VOW", direction="l", linebreak="al", unicodeslot=0x1045D, }, [0x1045E]={ category="lo", description="SHAVIAN LETTER THEY", direction="l", linebreak="al", unicodeslot=0x1045E, }, [0x1045F]={ category="lo", description="SHAVIAN LETTER ZOO", direction="l", linebreak="al", unicodeslot=0x1045F, }, [0x10460]={ category="lo", description="SHAVIAN LETTER MEASURE", direction="l", linebreak="al", unicodeslot=0x10460, }, [0x10461]={ category="lo", description="SHAVIAN LETTER JUDGE", direction="l", linebreak="al", unicodeslot=0x10461, }, [0x10462]={ category="lo", description="SHAVIAN LETTER WOE", direction="l", linebreak="al", unicodeslot=0x10462, }, [0x10463]={ category="lo", description="SHAVIAN LETTER HA-HA", direction="l", linebreak="al", unicodeslot=0x10463, }, [0x10464]={ category="lo", description="SHAVIAN LETTER LOLL", direction="l", linebreak="al", unicodeslot=0x10464, }, [0x10465]={ category="lo", description="SHAVIAN LETTER MIME", direction="l", linebreak="al", unicodeslot=0x10465, }, [0x10466]={ category="lo", description="SHAVIAN LETTER IF", direction="l", linebreak="al", unicodeslot=0x10466, }, [0x10467]={ category="lo", description="SHAVIAN LETTER EGG", direction="l", linebreak="al", unicodeslot=0x10467, }, [0x10468]={ category="lo", description="SHAVIAN LETTER ASH", direction="l", linebreak="al", unicodeslot=0x10468, }, [0x10469]={ category="lo", description="SHAVIAN LETTER ADO", direction="l", linebreak="al", unicodeslot=0x10469, }, [0x1046A]={ category="lo", description="SHAVIAN LETTER ON", direction="l", linebreak="al", unicodeslot=0x1046A, }, [0x1046B]={ category="lo", description="SHAVIAN LETTER WOOL", direction="l", linebreak="al", unicodeslot=0x1046B, }, [0x1046C]={ category="lo", description="SHAVIAN LETTER OUT", direction="l", linebreak="al", unicodeslot=0x1046C, }, [0x1046D]={ category="lo", description="SHAVIAN LETTER AH", direction="l", linebreak="al", unicodeslot=0x1046D, }, [0x1046E]={ category="lo", description="SHAVIAN LETTER ROAR", direction="l", linebreak="al", unicodeslot=0x1046E, }, [0x1046F]={ category="lo", description="SHAVIAN LETTER NUN", direction="l", linebreak="al", unicodeslot=0x1046F, }, [0x10470]={ category="lo", description="SHAVIAN LETTER EAT", direction="l", linebreak="al", unicodeslot=0x10470, }, [0x10471]={ category="lo", description="SHAVIAN LETTER AGE", direction="l", linebreak="al", unicodeslot=0x10471, }, [0x10472]={ category="lo", description="SHAVIAN LETTER ICE", direction="l", linebreak="al", unicodeslot=0x10472, }, [0x10473]={ category="lo", description="SHAVIAN LETTER UP", direction="l", linebreak="al", unicodeslot=0x10473, }, [0x10474]={ category="lo", description="SHAVIAN LETTER OAK", direction="l", linebreak="al", unicodeslot=0x10474, }, [0x10475]={ category="lo", description="SHAVIAN LETTER OOZE", direction="l", linebreak="al", unicodeslot=0x10475, }, [0x10476]={ category="lo", description="SHAVIAN LETTER OIL", direction="l", linebreak="al", unicodeslot=0x10476, }, [0x10477]={ category="lo", description="SHAVIAN LETTER AWE", direction="l", linebreak="al", unicodeslot=0x10477, }, [0x10478]={ category="lo", description="SHAVIAN LETTER ARE", direction="l", linebreak="al", unicodeslot=0x10478, }, [0x10479]={ category="lo", description="SHAVIAN LETTER OR", direction="l", linebreak="al", unicodeslot=0x10479, }, [0x1047A]={ category="lo", description="SHAVIAN LETTER AIR", direction="l", linebreak="al", unicodeslot=0x1047A, }, [0x1047B]={ category="lo", description="SHAVIAN LETTER ERR", direction="l", linebreak="al", unicodeslot=0x1047B, }, [0x1047C]={ category="lo", description="SHAVIAN LETTER ARRAY", direction="l", linebreak="al", unicodeslot=0x1047C, }, [0x1047D]={ category="lo", description="SHAVIAN LETTER EAR", direction="l", linebreak="al", unicodeslot=0x1047D, }, [0x1047E]={ category="lo", description="SHAVIAN LETTER IAN", direction="l", linebreak="al", unicodeslot=0x1047E, }, [0x1047F]={ category="lo", description="SHAVIAN LETTER YEW", direction="l", linebreak="al", unicodeslot=0x1047F, }, [0x10480]={ category="lo", description="OSMANYA LETTER ALEF", direction="l", linebreak="al", unicodeslot=0x10480, }, [0x10481]={ category="lo", description="OSMANYA LETTER BA", direction="l", linebreak="al", unicodeslot=0x10481, }, [0x10482]={ category="lo", description="OSMANYA LETTER TA", direction="l", linebreak="al", unicodeslot=0x10482, }, [0x10483]={ category="lo", description="OSMANYA LETTER JA", direction="l", linebreak="al", unicodeslot=0x10483, }, [0x10484]={ category="lo", description="OSMANYA LETTER XA", direction="l", linebreak="al", unicodeslot=0x10484, }, [0x10485]={ category="lo", description="OSMANYA LETTER KHA", direction="l", linebreak="al", unicodeslot=0x10485, }, [0x10486]={ category="lo", description="OSMANYA LETTER DEEL", direction="l", linebreak="al", unicodeslot=0x10486, }, [0x10487]={ category="lo", description="OSMANYA LETTER RA", direction="l", linebreak="al", unicodeslot=0x10487, }, [0x10488]={ category="lo", description="OSMANYA LETTER SA", direction="l", linebreak="al", unicodeslot=0x10488, }, [0x10489]={ category="lo", description="OSMANYA LETTER SHIIN", direction="l", linebreak="al", unicodeslot=0x10489, }, [0x1048A]={ category="lo", description="OSMANYA LETTER DHA", direction="l", linebreak="al", unicodeslot=0x1048A, }, [0x1048B]={ category="lo", description="OSMANYA LETTER CAYN", direction="l", linebreak="al", unicodeslot=0x1048B, }, [0x1048C]={ category="lo", description="OSMANYA LETTER GA", direction="l", linebreak="al", unicodeslot=0x1048C, }, [0x1048D]={ category="lo", description="OSMANYA LETTER FA", direction="l", linebreak="al", unicodeslot=0x1048D, }, [0x1048E]={ category="lo", description="OSMANYA LETTER QAAF", direction="l", linebreak="al", unicodeslot=0x1048E, }, [0x1048F]={ category="lo", description="OSMANYA LETTER KAAF", direction="l", linebreak="al", unicodeslot=0x1048F, }, [0x10490]={ category="lo", description="OSMANYA LETTER LAAN", direction="l", linebreak="al", unicodeslot=0x10490, }, [0x10491]={ category="lo", description="OSMANYA LETTER MIIN", direction="l", linebreak="al", unicodeslot=0x10491, }, [0x10492]={ category="lo", description="OSMANYA LETTER NUUN", direction="l", linebreak="al", unicodeslot=0x10492, }, [0x10493]={ category="lo", description="OSMANYA LETTER WAW", direction="l", linebreak="al", unicodeslot=0x10493, }, [0x10494]={ category="lo", description="OSMANYA LETTER HA", direction="l", linebreak="al", unicodeslot=0x10494, }, [0x10495]={ category="lo", description="OSMANYA LETTER YA", direction="l", linebreak="al", unicodeslot=0x10495, }, [0x10496]={ category="lo", description="OSMANYA LETTER A", direction="l", linebreak="al", unicodeslot=0x10496, }, [0x10497]={ category="lo", description="OSMANYA LETTER E", direction="l", linebreak="al", unicodeslot=0x10497, }, [0x10498]={ category="lo", description="OSMANYA LETTER I", direction="l", linebreak="al", unicodeslot=0x10498, }, [0x10499]={ category="lo", description="OSMANYA LETTER O", direction="l", linebreak="al", unicodeslot=0x10499, }, [0x1049A]={ category="lo", description="OSMANYA LETTER U", direction="l", linebreak="al", unicodeslot=0x1049A, }, [0x1049B]={ category="lo", description="OSMANYA LETTER AA", direction="l", linebreak="al", unicodeslot=0x1049B, }, [0x1049C]={ category="lo", description="OSMANYA LETTER EE", direction="l", linebreak="al", unicodeslot=0x1049C, }, [0x1049D]={ category="lo", description="OSMANYA LETTER OO", direction="l", linebreak="al", unicodeslot=0x1049D, }, [0x104A0]={ category="nd", description="OSMANYA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x104A0, }, [0x104A1]={ category="nd", description="OSMANYA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x104A1, }, [0x104A2]={ category="nd", description="OSMANYA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x104A2, }, [0x104A3]={ category="nd", description="OSMANYA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x104A3, }, [0x104A4]={ category="nd", description="OSMANYA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x104A4, }, [0x104A5]={ category="nd", description="OSMANYA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x104A5, }, [0x104A6]={ category="nd", description="OSMANYA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x104A6, }, [0x104A7]={ category="nd", description="OSMANYA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x104A7, }, [0x104A8]={ category="nd", description="OSMANYA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x104A8, }, [0x104A9]={ category="nd", description="OSMANYA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x104A9, }, [0x10800]={ category="lo", description="CYPRIOT SYLLABLE A", direction="r", linebreak="al", unicodeslot=0x10800, }, [0x10801]={ category="lo", description="CYPRIOT SYLLABLE E", direction="r", linebreak="al", unicodeslot=0x10801, }, [0x10802]={ category="lo", description="CYPRIOT SYLLABLE I", direction="r", linebreak="al", unicodeslot=0x10802, }, [0x10803]={ category="lo", description="CYPRIOT SYLLABLE O", direction="r", linebreak="al", unicodeslot=0x10803, }, [0x10804]={ category="lo", description="CYPRIOT SYLLABLE U", direction="r", linebreak="al", unicodeslot=0x10804, }, [0x10805]={ category="lo", description="CYPRIOT SYLLABLE JA", direction="r", linebreak="al", unicodeslot=0x10805, }, [0x10808]={ category="lo", description="CYPRIOT SYLLABLE JO", direction="r", linebreak="al", unicodeslot=0x10808, }, [0x1080A]={ category="lo", description="CYPRIOT SYLLABLE KA", direction="r", linebreak="al", unicodeslot=0x1080A, }, [0x1080B]={ category="lo", description="CYPRIOT SYLLABLE KE", direction="r", linebreak="al", unicodeslot=0x1080B, }, [0x1080C]={ category="lo", description="CYPRIOT SYLLABLE KI", direction="r", linebreak="al", unicodeslot=0x1080C, }, [0x1080D]={ category="lo", description="CYPRIOT SYLLABLE KO", direction="r", linebreak="al", unicodeslot=0x1080D, }, [0x1080E]={ category="lo", description="CYPRIOT SYLLABLE KU", direction="r", linebreak="al", unicodeslot=0x1080E, }, [0x1080F]={ category="lo", description="CYPRIOT SYLLABLE LA", direction="r", linebreak="al", unicodeslot=0x1080F, }, [0x10810]={ category="lo", description="CYPRIOT SYLLABLE LE", direction="r", linebreak="al", unicodeslot=0x10810, }, [0x10811]={ category="lo", description="CYPRIOT SYLLABLE LI", direction="r", linebreak="al", unicodeslot=0x10811, }, [0x10812]={ category="lo", description="CYPRIOT SYLLABLE LO", direction="r", linebreak="al", unicodeslot=0x10812, }, [0x10813]={ category="lo", description="CYPRIOT SYLLABLE LU", direction="r", linebreak="al", unicodeslot=0x10813, }, [0x10814]={ category="lo", description="CYPRIOT SYLLABLE MA", direction="r", linebreak="al", unicodeslot=0x10814, }, [0x10815]={ category="lo", description="CYPRIOT SYLLABLE ME", direction="r", linebreak="al", unicodeslot=0x10815, }, [0x10816]={ category="lo", description="CYPRIOT SYLLABLE MI", direction="r", linebreak="al", unicodeslot=0x10816, }, [0x10817]={ category="lo", description="CYPRIOT SYLLABLE MO", direction="r", linebreak="al", unicodeslot=0x10817, }, [0x10818]={ category="lo", description="CYPRIOT SYLLABLE MU", direction="r", linebreak="al", unicodeslot=0x10818, }, [0x10819]={ category="lo", description="CYPRIOT SYLLABLE NA", direction="r", linebreak="al", unicodeslot=0x10819, }, [0x1081A]={ category="lo", description="CYPRIOT SYLLABLE NE", direction="r", linebreak="al", unicodeslot=0x1081A, }, [0x1081B]={ category="lo", description="CYPRIOT SYLLABLE NI", direction="r", linebreak="al", unicodeslot=0x1081B, }, [0x1081C]={ category="lo", description="CYPRIOT SYLLABLE NO", direction="r", linebreak="al", unicodeslot=0x1081C, }, [0x1081D]={ category="lo", description="CYPRIOT SYLLABLE NU", direction="r", linebreak="al", unicodeslot=0x1081D, }, [0x1081E]={ category="lo", description="CYPRIOT SYLLABLE PA", direction="r", linebreak="al", unicodeslot=0x1081E, }, [0x1081F]={ category="lo", description="CYPRIOT SYLLABLE PE", direction="r", linebreak="al", unicodeslot=0x1081F, }, [0x10820]={ category="lo", description="CYPRIOT SYLLABLE PI", direction="r", linebreak="al", unicodeslot=0x10820, }, [0x10821]={ category="lo", description="CYPRIOT SYLLABLE PO", direction="r", linebreak="al", unicodeslot=0x10821, }, [0x10822]={ category="lo", description="CYPRIOT SYLLABLE PU", direction="r", linebreak="al", unicodeslot=0x10822, }, [0x10823]={ category="lo", description="CYPRIOT SYLLABLE RA", direction="r", linebreak="al", unicodeslot=0x10823, }, [0x10824]={ category="lo", description="CYPRIOT SYLLABLE RE", direction="r", linebreak="al", unicodeslot=0x10824, }, [0x10825]={ category="lo", description="CYPRIOT SYLLABLE RI", direction="r", linebreak="al", unicodeslot=0x10825, }, [0x10826]={ category="lo", description="CYPRIOT SYLLABLE RO", direction="r", linebreak="al", unicodeslot=0x10826, }, [0x10827]={ category="lo", description="CYPRIOT SYLLABLE RU", direction="r", linebreak="al", unicodeslot=0x10827, }, [0x10828]={ category="lo", description="CYPRIOT SYLLABLE SA", direction="r", linebreak="al", unicodeslot=0x10828, }, [0x10829]={ category="lo", description="CYPRIOT SYLLABLE SE", direction="r", linebreak="al", unicodeslot=0x10829, }, [0x1082A]={ category="lo", description="CYPRIOT SYLLABLE SI", direction="r", linebreak="al", unicodeslot=0x1082A, }, [0x1082B]={ category="lo", description="CYPRIOT SYLLABLE SO", direction="r", linebreak="al", unicodeslot=0x1082B, }, [0x1082C]={ category="lo", description="CYPRIOT SYLLABLE SU", direction="r", linebreak="al", unicodeslot=0x1082C, }, [0x1082D]={ category="lo", description="CYPRIOT SYLLABLE TA", direction="r", linebreak="al", unicodeslot=0x1082D, }, [0x1082E]={ category="lo", description="CYPRIOT SYLLABLE TE", direction="r", linebreak="al", unicodeslot=0x1082E, }, [0x1082F]={ category="lo", description="CYPRIOT SYLLABLE TI", direction="r", linebreak="al", unicodeslot=0x1082F, }, [0x10830]={ category="lo", description="CYPRIOT SYLLABLE TO", direction="r", linebreak="al", unicodeslot=0x10830, }, [0x10831]={ category="lo", description="CYPRIOT SYLLABLE TU", direction="r", linebreak="al", unicodeslot=0x10831, }, [0x10832]={ category="lo", description="CYPRIOT SYLLABLE WA", direction="r", linebreak="al", unicodeslot=0x10832, }, [0x10833]={ category="lo", description="CYPRIOT SYLLABLE WE", direction="r", linebreak="al", unicodeslot=0x10833, }, [0x10834]={ category="lo", description="CYPRIOT SYLLABLE WI", direction="r", linebreak="al", unicodeslot=0x10834, }, [0x10835]={ category="lo", description="CYPRIOT SYLLABLE WO", direction="r", linebreak="al", unicodeslot=0x10835, }, [0x10837]={ category="lo", description="CYPRIOT SYLLABLE XA", direction="r", linebreak="al", unicodeslot=0x10837, }, [0x10838]={ category="lo", description="CYPRIOT SYLLABLE XE", direction="r", linebreak="al", unicodeslot=0x10838, }, [0x1083C]={ category="lo", description="CYPRIOT SYLLABLE ZA", direction="r", linebreak="al", unicodeslot=0x1083C, }, [0x1083F]={ category="lo", description="CYPRIOT SYLLABLE ZO", direction="r", linebreak="al", unicodeslot=0x1083F, }, [0x10840]={ category="lo", description="IMPERIAL ARAMAIC LETTER ALEPH", direction="r", linebreak="al", unicodeslot=0x10840, }, [0x10841]={ category="lo", description="IMPERIAL ARAMAIC LETTER BETH", direction="r", linebreak="al", unicodeslot=0x10841, }, [0x10842]={ category="lo", description="IMPERIAL ARAMAIC LETTER GIMEL", direction="r", linebreak="al", unicodeslot=0x10842, }, [0x10843]={ category="lo", description="IMPERIAL ARAMAIC LETTER DALETH", direction="r", linebreak="al", unicodeslot=0x10843, }, [0x10844]={ category="lo", description="IMPERIAL ARAMAIC LETTER HE", direction="r", linebreak="al", unicodeslot=0x10844, }, [0x10845]={ category="lo", description="IMPERIAL ARAMAIC LETTER WAW", direction="r", linebreak="al", unicodeslot=0x10845, }, [0x10846]={ category="lo", description="IMPERIAL ARAMAIC LETTER ZAYIN", direction="r", linebreak="al", unicodeslot=0x10846, }, [0x10847]={ category="lo", description="IMPERIAL ARAMAIC LETTER HETH", direction="r", linebreak="al", unicodeslot=0x10847, }, [0x10848]={ category="lo", description="IMPERIAL ARAMAIC LETTER TETH", direction="r", linebreak="al", unicodeslot=0x10848, }, [0x10849]={ category="lo", description="IMPERIAL ARAMAIC LETTER YODH", direction="r", linebreak="al", unicodeslot=0x10849, }, [0x1084A]={ category="lo", description="IMPERIAL ARAMAIC LETTER KAPH", direction="r", linebreak="al", unicodeslot=0x1084A, }, [0x1084B]={ category="lo", description="IMPERIAL ARAMAIC LETTER LAMEDH", direction="r", linebreak="al", unicodeslot=0x1084B, }, [0x1084C]={ category="lo", description="IMPERIAL ARAMAIC LETTER MEM", direction="r", linebreak="al", unicodeslot=0x1084C, }, [0x1084D]={ category="lo", description="IMPERIAL ARAMAIC LETTER NUN", direction="r", linebreak="al", unicodeslot=0x1084D, }, [0x1084E]={ category="lo", description="IMPERIAL ARAMAIC LETTER SAMEKH", direction="r", linebreak="al", unicodeslot=0x1084E, }, [0x1084F]={ category="lo", description="IMPERIAL ARAMAIC LETTER AYIN", direction="r", linebreak="al", unicodeslot=0x1084F, }, [0x10850]={ category="lo", description="IMPERIAL ARAMAIC LETTER PE", direction="r", linebreak="al", unicodeslot=0x10850, }, [0x10851]={ category="lo", description="IMPERIAL ARAMAIC LETTER SADHE", direction="r", linebreak="al", unicodeslot=0x10851, }, [0x10852]={ category="lo", description="IMPERIAL ARAMAIC LETTER QOPH", direction="r", linebreak="al", unicodeslot=0x10852, }, [0x10853]={ category="lo", description="IMPERIAL ARAMAIC LETTER RESH", direction="r", linebreak="al", unicodeslot=0x10853, }, [0x10854]={ category="lo", description="IMPERIAL ARAMAIC LETTER SHIN", direction="r", linebreak="al", unicodeslot=0x10854, }, [0x10855]={ category="lo", description="IMPERIAL ARAMAIC LETTER TAW", direction="r", linebreak="al", unicodeslot=0x10855, }, [0x10857]={ category="po", description="IMPERIAL ARAMAIC SECTION SIGN", direction="r", linebreak="ba", unicodeslot=0x10857, }, [0x10858]={ category="no", description="IMPERIAL ARAMAIC NUMBER ONE", direction="r", linebreak="al", unicodeslot=0x10858, }, [0x10859]={ category="no", description="IMPERIAL ARAMAIC NUMBER TWO", direction="r", linebreak="al", unicodeslot=0x10859, }, [0x1085A]={ category="no", description="IMPERIAL ARAMAIC NUMBER THREE", direction="r", linebreak="al", unicodeslot=0x1085A, }, [0x1085B]={ category="no", description="IMPERIAL ARAMAIC NUMBER TEN", direction="r", linebreak="al", unicodeslot=0x1085B, }, [0x1085C]={ category="no", description="IMPERIAL ARAMAIC NUMBER TWENTY", direction="r", linebreak="al", unicodeslot=0x1085C, }, [0x1085D]={ category="no", description="IMPERIAL ARAMAIC NUMBER ONE HUNDRED", direction="r", linebreak="al", unicodeslot=0x1085D, }, [0x1085E]={ category="no", description="IMPERIAL ARAMAIC NUMBER ONE THOUSAND", direction="r", linebreak="al", unicodeslot=0x1085E, }, [0x1085F]={ category="no", description="IMPERIAL ARAMAIC NUMBER TEN THOUSAND", direction="r", linebreak="al", unicodeslot=0x1085F, }, [0x10900]={ category="lo", description="PHOENICIAN LETTER ALF", direction="r", linebreak="al", unicodeslot=0x10900, }, [0x10901]={ category="lo", description="PHOENICIAN LETTER BET", direction="r", linebreak="al", unicodeslot=0x10901, }, [0x10902]={ category="lo", description="PHOENICIAN LETTER GAML", direction="r", linebreak="al", unicodeslot=0x10902, }, [0x10903]={ category="lo", description="PHOENICIAN LETTER DELT", direction="r", linebreak="al", unicodeslot=0x10903, }, [0x10904]={ category="lo", description="PHOENICIAN LETTER HE", direction="r", linebreak="al", unicodeslot=0x10904, }, [0x10905]={ category="lo", description="PHOENICIAN LETTER WAU", direction="r", linebreak="al", unicodeslot=0x10905, }, [0x10906]={ category="lo", description="PHOENICIAN LETTER ZAI", direction="r", linebreak="al", unicodeslot=0x10906, }, [0x10907]={ category="lo", description="PHOENICIAN LETTER HET", direction="r", linebreak="al", unicodeslot=0x10907, }, [0x10908]={ category="lo", description="PHOENICIAN LETTER TET", direction="r", linebreak="al", unicodeslot=0x10908, }, [0x10909]={ category="lo", description="PHOENICIAN LETTER YOD", direction="r", linebreak="al", unicodeslot=0x10909, }, [0x1090A]={ category="lo", description="PHOENICIAN LETTER KAF", direction="r", linebreak="al", unicodeslot=0x1090A, }, [0x1090B]={ category="lo", description="PHOENICIAN LETTER LAMD", direction="r", linebreak="al", unicodeslot=0x1090B, }, [0x1090C]={ category="lo", description="PHOENICIAN LETTER MEM", direction="r", linebreak="al", unicodeslot=0x1090C, }, [0x1090D]={ category="lo", description="PHOENICIAN LETTER NUN", direction="r", linebreak="al", unicodeslot=0x1090D, }, [0x1090E]={ category="lo", description="PHOENICIAN LETTER SEMK", direction="r", linebreak="al", unicodeslot=0x1090E, }, [0x1090F]={ category="lo", description="PHOENICIAN LETTER AIN", direction="r", linebreak="al", unicodeslot=0x1090F, }, [0x10910]={ category="lo", description="PHOENICIAN LETTER PE", direction="r", linebreak="al", unicodeslot=0x10910, }, [0x10911]={ category="lo", description="PHOENICIAN LETTER SADE", direction="r", linebreak="al", unicodeslot=0x10911, }, [0x10912]={ category="lo", description="PHOENICIAN LETTER QOF", direction="r", linebreak="al", unicodeslot=0x10912, }, [0x10913]={ category="lo", description="PHOENICIAN LETTER ROSH", direction="r", linebreak="al", unicodeslot=0x10913, }, [0x10914]={ category="lo", description="PHOENICIAN LETTER SHIN", direction="r", linebreak="al", unicodeslot=0x10914, }, [0x10915]={ category="lo", description="PHOENICIAN LETTER TAU", direction="r", linebreak="al", unicodeslot=0x10915, }, [0x10916]={ category="no", description="PHOENICIAN NUMBER ONE", direction="r", linebreak="al", unicodeslot=0x10916, }, [0x10917]={ category="no", description="PHOENICIAN NUMBER TEN", direction="r", linebreak="al", unicodeslot=0x10917, }, [0x10918]={ category="no", description="PHOENICIAN NUMBER TWENTY", direction="r", linebreak="al", unicodeslot=0x10918, }, [0x10919]={ category="no", description="PHOENICIAN NUMBER ONE HUNDRED", direction="r", linebreak="al", unicodeslot=0x10919, }, [0x1091A]={ category="no", description="PHOENICIAN NUMBER TWO", direction="r", linebreak="al", unicodeslot=0x1091A, }, [0x1091B]={ category="no", description="PHOENICIAN NUMBER THREE", direction="r", linebreak="al", unicodeslot=0x1091B, }, [0x1091F]={ category="po", description="PHOENICIAN WORD SEPARATOR", direction="on", linebreak="ba", unicodeslot=0x1091F, }, [0x10920]={ category="lo", description="LYDIAN LETTER A", direction="r", linebreak="al", unicodeslot=0x10920, }, [0x10921]={ category="lo", description="LYDIAN LETTER B", direction="r", linebreak="al", unicodeslot=0x10921, }, [0x10922]={ category="lo", description="LYDIAN LETTER G", direction="r", linebreak="al", unicodeslot=0x10922, }, [0x10923]={ category="lo", description="LYDIAN LETTER D", direction="r", linebreak="al", unicodeslot=0x10923, }, [0x10924]={ category="lo", description="LYDIAN LETTER E", direction="r", linebreak="al", unicodeslot=0x10924, }, [0x10925]={ category="lo", description="LYDIAN LETTER V", direction="r", linebreak="al", unicodeslot=0x10925, }, [0x10926]={ category="lo", description="LYDIAN LETTER I", direction="r", linebreak="al", unicodeslot=0x10926, }, [0x10927]={ category="lo", description="LYDIAN LETTER Y", direction="r", linebreak="al", unicodeslot=0x10927, }, [0x10928]={ category="lo", description="LYDIAN LETTER K", direction="r", linebreak="al", unicodeslot=0x10928, }, [0x10929]={ category="lo", description="LYDIAN LETTER L", direction="r", linebreak="al", unicodeslot=0x10929, }, [0x1092A]={ category="lo", description="LYDIAN LETTER M", direction="r", linebreak="al", unicodeslot=0x1092A, }, [0x1092B]={ category="lo", description="LYDIAN LETTER N", direction="r", linebreak="al", unicodeslot=0x1092B, }, [0x1092C]={ category="lo", description="LYDIAN LETTER O", direction="r", linebreak="al", unicodeslot=0x1092C, }, [0x1092D]={ category="lo", description="LYDIAN LETTER R", direction="r", linebreak="al", unicodeslot=0x1092D, }, [0x1092E]={ category="lo", description="LYDIAN LETTER SS", direction="r", linebreak="al", unicodeslot=0x1092E, }, [0x1092F]={ category="lo", description="LYDIAN LETTER T", direction="r", linebreak="al", unicodeslot=0x1092F, }, [0x10930]={ category="lo", description="LYDIAN LETTER U", direction="r", linebreak="al", unicodeslot=0x10930, }, [0x10931]={ category="lo", description="LYDIAN LETTER F", direction="r", linebreak="al", unicodeslot=0x10931, }, [0x10932]={ category="lo", description="LYDIAN LETTER Q", direction="r", linebreak="al", unicodeslot=0x10932, }, [0x10933]={ category="lo", description="LYDIAN LETTER S", direction="r", linebreak="al", unicodeslot=0x10933, }, [0x10934]={ category="lo", description="LYDIAN LETTER TT", direction="r", linebreak="al", unicodeslot=0x10934, }, [0x10935]={ category="lo", description="LYDIAN LETTER AN", direction="r", linebreak="al", unicodeslot=0x10935, }, [0x10936]={ category="lo", description="LYDIAN LETTER EN", direction="r", linebreak="al", unicodeslot=0x10936, }, [0x10937]={ category="lo", description="LYDIAN LETTER LY", direction="r", linebreak="al", unicodeslot=0x10937, }, [0x10938]={ category="lo", description="LYDIAN LETTER NN", direction="r", linebreak="al", unicodeslot=0x10938, }, [0x10939]={ category="lo", description="LYDIAN LETTER C", direction="r", linebreak="al", unicodeslot=0x10939, }, [0x1093F]={ category="po", description="LYDIAN TRIANGULAR MARK", direction="r", linebreak="al", unicodeslot=0x1093F, }, [0x10980]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER A", direction="r", linebreak="al", unicodeslot=0x10980, }, [0x10981]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER E", direction="r", linebreak="al", unicodeslot=0x10981, }, [0x10982]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER I", direction="r", linebreak="al", unicodeslot=0x10982, }, [0x10983]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER O", direction="r", linebreak="al", unicodeslot=0x10983, }, [0x10984]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER YA", direction="r", linebreak="al", unicodeslot=0x10984, }, [0x10985]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER WA", direction="r", linebreak="al", unicodeslot=0x10985, }, [0x10986]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER BA", direction="r", linebreak="al", unicodeslot=0x10986, }, [0x10987]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER BA-2", direction="r", linebreak="al", unicodeslot=0x10987, }, [0x10988]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER PA", direction="r", linebreak="al", unicodeslot=0x10988, }, [0x10989]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER MA", direction="r", linebreak="al", unicodeslot=0x10989, }, [0x1098A]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER NA", direction="r", linebreak="al", unicodeslot=0x1098A, }, [0x1098B]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER NA-2", direction="r", linebreak="al", unicodeslot=0x1098B, }, [0x1098C]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER NE", direction="r", linebreak="al", unicodeslot=0x1098C, }, [0x1098D]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER NE-2", direction="r", linebreak="al", unicodeslot=0x1098D, }, [0x1098E]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER RA", direction="r", linebreak="al", unicodeslot=0x1098E, }, [0x1098F]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER RA-2", direction="r", linebreak="al", unicodeslot=0x1098F, }, [0x10990]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER LA", direction="r", linebreak="al", unicodeslot=0x10990, }, [0x10991]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER KHA", direction="r", linebreak="al", unicodeslot=0x10991, }, [0x10992]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER HHA", direction="r", linebreak="al", unicodeslot=0x10992, }, [0x10993]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER SA", direction="r", linebreak="al", unicodeslot=0x10993, }, [0x10994]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER SA-2", direction="r", linebreak="al", unicodeslot=0x10994, }, [0x10995]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER SE", direction="r", linebreak="al", unicodeslot=0x10995, }, [0x10996]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER KA", direction="r", linebreak="al", unicodeslot=0x10996, }, [0x10997]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER QA", direction="r", linebreak="al", unicodeslot=0x10997, }, [0x10998]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER TA", direction="r", linebreak="al", unicodeslot=0x10998, }, [0x10999]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER TA-2", direction="r", linebreak="al", unicodeslot=0x10999, }, [0x1099A]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER TE", direction="r", linebreak="al", unicodeslot=0x1099A, }, [0x1099B]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER TE-2", direction="r", linebreak="al", unicodeslot=0x1099B, }, [0x1099C]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER TO", direction="r", linebreak="al", unicodeslot=0x1099C, }, [0x1099D]={ category="lo", description="MEROITIC HIEROGLYPHIC LETTER DA", direction="r", linebreak="al", unicodeslot=0x1099D, }, [0x1099E]={ category="lo", description="MEROITIC HIEROGLYPHIC SYMBOL VIDJ", direction="r", linebreak="al", unicodeslot=0x1099E, }, [0x1099F]={ category="lo", description="MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2", direction="r", linebreak="al", unicodeslot=0x1099F, }, [0x109A0]={ category="lo", description="MEROITIC CURSIVE LETTER A", direction="r", linebreak="al", unicodeslot=0x109A0, }, [0x109A1]={ category="lo", description="MEROITIC CURSIVE LETTER E", direction="r", linebreak="al", unicodeslot=0x109A1, }, [0x109A2]={ category="lo", description="MEROITIC CURSIVE LETTER I", direction="r", linebreak="al", unicodeslot=0x109A2, }, [0x109A3]={ category="lo", description="MEROITIC CURSIVE LETTER O", direction="r", linebreak="al", unicodeslot=0x109A3, }, [0x109A4]={ category="lo", description="MEROITIC CURSIVE LETTER YA", direction="r", linebreak="al", unicodeslot=0x109A4, }, [0x109A5]={ category="lo", description="MEROITIC CURSIVE LETTER WA", direction="r", linebreak="al", unicodeslot=0x109A5, }, [0x109A6]={ category="lo", description="MEROITIC CURSIVE LETTER BA", direction="r", linebreak="al", unicodeslot=0x109A6, }, [0x109A7]={ category="lo", description="MEROITIC CURSIVE LETTER PA", direction="r", linebreak="al", unicodeslot=0x109A7, }, [0x109A8]={ category="lo", description="MEROITIC CURSIVE LETTER MA", direction="r", linebreak="al", unicodeslot=0x109A8, }, [0x109A9]={ category="lo", description="MEROITIC CURSIVE LETTER NA", direction="r", linebreak="al", unicodeslot=0x109A9, }, [0x109AA]={ category="lo", description="MEROITIC CURSIVE LETTER NE", direction="r", linebreak="al", unicodeslot=0x109AA, }, [0x109AB]={ category="lo", description="MEROITIC CURSIVE LETTER RA", direction="r", linebreak="al", unicodeslot=0x109AB, }, [0x109AC]={ category="lo", description="MEROITIC CURSIVE LETTER LA", direction="r", linebreak="al", unicodeslot=0x109AC, }, [0x109AD]={ category="lo", description="MEROITIC CURSIVE LETTER KHA", direction="r", linebreak="al", unicodeslot=0x109AD, }, [0x109AE]={ category="lo", description="MEROITIC CURSIVE LETTER HHA", direction="r", linebreak="al", unicodeslot=0x109AE, }, [0x109AF]={ category="lo", description="MEROITIC CURSIVE LETTER SA", direction="r", linebreak="al", unicodeslot=0x109AF, }, [0x109B0]={ category="lo", description="MEROITIC CURSIVE LETTER ARCHAIC SA", direction="r", linebreak="al", unicodeslot=0x109B0, }, [0x109B1]={ category="lo", description="MEROITIC CURSIVE LETTER SE", direction="r", linebreak="al", unicodeslot=0x109B1, }, [0x109B2]={ category="lo", description="MEROITIC CURSIVE LETTER KA", direction="r", linebreak="al", unicodeslot=0x109B2, }, [0x109B3]={ category="lo", description="MEROITIC CURSIVE LETTER QA", direction="r", linebreak="al", unicodeslot=0x109B3, }, [0x109B4]={ category="lo", description="MEROITIC CURSIVE LETTER TA", direction="r", linebreak="al", unicodeslot=0x109B4, }, [0x109B5]={ category="lo", description="MEROITIC CURSIVE LETTER TE", direction="r", linebreak="al", unicodeslot=0x109B5, }, [0x109B6]={ category="lo", description="MEROITIC CURSIVE LETTER TO", direction="r", linebreak="al", unicodeslot=0x109B6, }, [0x109B7]={ category="lo", description="MEROITIC CURSIVE LETTER DA", direction="r", linebreak="al", unicodeslot=0x109B7, }, [0x109BE]={ category="lo", description="MEROITIC CURSIVE LOGOGRAM RMT", direction="r", linebreak="al", unicodeslot=0x109BE, }, [0x109BF]={ category="lo", description="MEROITIC CURSIVE LOGOGRAM IMN", direction="r", linebreak="al", unicodeslot=0x109BF, }, [0x10A00]={ category="lo", description="KHAROSHTHI LETTER A", direction="r", linebreak="al", unicodeslot=0x10A00, }, [0x10A01]={ category="mn", description="KHAROSHTHI VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x10A01, }, [0x10A02]={ category="mn", description="KHAROSHTHI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x10A02, }, [0x10A03]={ category="mn", description="KHAROSHTHI VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x10A03, }, [0x10A05]={ category="mn", description="KHAROSHTHI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x10A05, }, [0x10A06]={ category="mn", description="KHAROSHTHI VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x10A06, }, [0x10A0C]={ category="mn", description="KHAROSHTHI VOWEL LENGTH MARK", direction="nsm", linebreak="cm", unicodeslot=0x10A0C, }, [0x10A0D]={ category="mn", description="KHAROSHTHI SIGN DOUBLE RING BELOW", direction="nsm", linebreak="cm", unicodeslot=0x10A0D, }, [0x10A0E]={ category="mn", description="KHAROSHTHI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x10A0E, }, [0x10A0F]={ category="mn", description="KHAROSHTHI SIGN VISARGA", direction="nsm", linebreak="cm", unicodeslot=0x10A0F, }, [0x10A10]={ category="lo", description="KHAROSHTHI LETTER KA", direction="r", linebreak="al", unicodeslot=0x10A10, }, [0x10A11]={ category="lo", description="KHAROSHTHI LETTER KHA", direction="r", linebreak="al", unicodeslot=0x10A11, }, [0x10A12]={ category="lo", description="KHAROSHTHI LETTER GA", direction="r", linebreak="al", unicodeslot=0x10A12, }, [0x10A13]={ category="lo", description="KHAROSHTHI LETTER GHA", direction="r", linebreak="al", unicodeslot=0x10A13, }, [0x10A15]={ category="lo", description="KHAROSHTHI LETTER CA", direction="r", linebreak="al", unicodeslot=0x10A15, }, [0x10A16]={ category="lo", description="KHAROSHTHI LETTER CHA", direction="r", linebreak="al", unicodeslot=0x10A16, }, [0x10A17]={ category="lo", description="KHAROSHTHI LETTER JA", direction="r", linebreak="al", unicodeslot=0x10A17, }, [0x10A19]={ category="lo", description="KHAROSHTHI LETTER NYA", direction="r", linebreak="al", unicodeslot=0x10A19, }, [0x10A1A]={ category="lo", description="KHAROSHTHI LETTER TTA", direction="r", linebreak="al", unicodeslot=0x10A1A, }, [0x10A1B]={ category="lo", description="KHAROSHTHI LETTER TTHA", direction="r", linebreak="al", unicodeslot=0x10A1B, }, [0x10A1C]={ category="lo", description="KHAROSHTHI LETTER DDA", direction="r", linebreak="al", unicodeslot=0x10A1C, }, [0x10A1D]={ category="lo", description="KHAROSHTHI LETTER DDHA", direction="r", linebreak="al", unicodeslot=0x10A1D, }, [0x10A1E]={ category="lo", description="KHAROSHTHI LETTER NNA", direction="r", linebreak="al", unicodeslot=0x10A1E, }, [0x10A1F]={ category="lo", description="KHAROSHTHI LETTER TA", direction="r", linebreak="al", unicodeslot=0x10A1F, }, [0x10A20]={ category="lo", description="KHAROSHTHI LETTER THA", direction="r", linebreak="al", unicodeslot=0x10A20, }, [0x10A21]={ category="lo", description="KHAROSHTHI LETTER DA", direction="r", linebreak="al", unicodeslot=0x10A21, }, [0x10A22]={ category="lo", description="KHAROSHTHI LETTER DHA", direction="r", linebreak="al", unicodeslot=0x10A22, }, [0x10A23]={ category="lo", description="KHAROSHTHI LETTER NA", direction="r", linebreak="al", unicodeslot=0x10A23, }, [0x10A24]={ category="lo", description="KHAROSHTHI LETTER PA", direction="r", linebreak="al", unicodeslot=0x10A24, }, [0x10A25]={ category="lo", description="KHAROSHTHI LETTER PHA", direction="r", linebreak="al", unicodeslot=0x10A25, }, [0x10A26]={ category="lo", description="KHAROSHTHI LETTER BA", direction="r", linebreak="al", unicodeslot=0x10A26, }, [0x10A27]={ category="lo", description="KHAROSHTHI LETTER BHA", direction="r", linebreak="al", unicodeslot=0x10A27, }, [0x10A28]={ category="lo", description="KHAROSHTHI LETTER MA", direction="r", linebreak="al", unicodeslot=0x10A28, }, [0x10A29]={ category="lo", description="KHAROSHTHI LETTER YA", direction="r", linebreak="al", unicodeslot=0x10A29, }, [0x10A2A]={ category="lo", description="KHAROSHTHI LETTER RA", direction="r", linebreak="al", unicodeslot=0x10A2A, }, [0x10A2B]={ category="lo", description="KHAROSHTHI LETTER LA", direction="r", linebreak="al", unicodeslot=0x10A2B, }, [0x10A2C]={ category="lo", description="KHAROSHTHI LETTER VA", direction="r", linebreak="al", unicodeslot=0x10A2C, }, [0x10A2D]={ category="lo", description="KHAROSHTHI LETTER SHA", direction="r", linebreak="al", unicodeslot=0x10A2D, }, [0x10A2E]={ category="lo", description="KHAROSHTHI LETTER SSA", direction="r", linebreak="al", unicodeslot=0x10A2E, }, [0x10A2F]={ category="lo", description="KHAROSHTHI LETTER SA", direction="r", linebreak="al", unicodeslot=0x10A2F, }, [0x10A30]={ category="lo", description="KHAROSHTHI LETTER ZA", direction="r", linebreak="al", unicodeslot=0x10A30, }, [0x10A31]={ category="lo", description="KHAROSHTHI LETTER HA", direction="r", linebreak="al", unicodeslot=0x10A31, }, [0x10A32]={ category="lo", description="KHAROSHTHI LETTER KKA", direction="r", linebreak="al", unicodeslot=0x10A32, }, [0x10A33]={ category="lo", description="KHAROSHTHI LETTER TTTHA", direction="r", linebreak="al", unicodeslot=0x10A33, }, [0x10A38]={ category="mn", description="KHAROSHTHI SIGN BAR ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x10A38, }, [0x10A39]={ category="mn", description="KHAROSHTHI SIGN CAUDA", direction="nsm", linebreak="cm", unicodeslot=0x10A39, }, [0x10A3A]={ category="mn", description="KHAROSHTHI SIGN DOT BELOW", direction="nsm", linebreak="cm", unicodeslot=0x10A3A, }, [0x10A3F]={ category="mn", description="KHAROSHTHI VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x10A3F, }, [0x10A40]={ category="no", description="KHAROSHTHI DIGIT ONE", direction="r", linebreak="al", unicodeslot=0x10A40, }, [0x10A41]={ category="no", description="KHAROSHTHI DIGIT TWO", direction="r", linebreak="al", unicodeslot=0x10A41, }, [0x10A42]={ category="no", description="KHAROSHTHI DIGIT THREE", direction="r", linebreak="al", unicodeslot=0x10A42, }, [0x10A43]={ category="no", description="KHAROSHTHI DIGIT FOUR", direction="r", linebreak="al", unicodeslot=0x10A43, }, [0x10A44]={ category="no", description="KHAROSHTHI NUMBER TEN", direction="r", linebreak="al", unicodeslot=0x10A44, }, [0x10A45]={ category="no", description="KHAROSHTHI NUMBER TWENTY", direction="r", linebreak="al", unicodeslot=0x10A45, }, [0x10A46]={ category="no", description="KHAROSHTHI NUMBER ONE HUNDRED", direction="r", linebreak="al", unicodeslot=0x10A46, }, [0x10A47]={ category="no", description="KHAROSHTHI NUMBER ONE THOUSAND", direction="r", linebreak="al", unicodeslot=0x10A47, }, [0x10A50]={ category="po", description="KHAROSHTHI PUNCTUATION DOT", direction="r", linebreak="ba", unicodeslot=0x10A50, }, [0x10A51]={ category="po", description="KHAROSHTHI PUNCTUATION SMALL CIRCLE", direction="r", linebreak="ba", unicodeslot=0x10A51, }, [0x10A52]={ category="po", description="KHAROSHTHI PUNCTUATION CIRCLE", direction="r", linebreak="ba", unicodeslot=0x10A52, }, [0x10A53]={ category="po", description="KHAROSHTHI PUNCTUATION CRESCENT BAR", direction="r", linebreak="ba", unicodeslot=0x10A53, }, [0x10A54]={ category="po", description="KHAROSHTHI PUNCTUATION MANGALAM", direction="r", linebreak="ba", unicodeslot=0x10A54, }, [0x10A55]={ category="po", description="KHAROSHTHI PUNCTUATION LOTUS", direction="r", linebreak="ba", unicodeslot=0x10A55, }, [0x10A56]={ category="po", description="KHAROSHTHI PUNCTUATION DANDA", direction="r", linebreak="ba", unicodeslot=0x10A56, }, [0x10A57]={ category="po", description="KHAROSHTHI PUNCTUATION DOUBLE DANDA", direction="r", linebreak="ba", unicodeslot=0x10A57, }, [0x10A58]={ category="po", description="KHAROSHTHI PUNCTUATION LINES", direction="r", linebreak="al", unicodeslot=0x10A58, }, [0x10A60]={ category="lo", description="OLD SOUTH ARABIAN LETTER HE", direction="r", linebreak="al", unicodeslot=0x10A60, }, [0x10A61]={ category="lo", description="OLD SOUTH ARABIAN LETTER LAMEDH", direction="r", linebreak="al", unicodeslot=0x10A61, }, [0x10A62]={ category="lo", description="OLD SOUTH ARABIAN LETTER HETH", direction="r", linebreak="al", unicodeslot=0x10A62, }, [0x10A63]={ category="lo", description="OLD SOUTH ARABIAN LETTER MEM", direction="r", linebreak="al", unicodeslot=0x10A63, }, [0x10A64]={ category="lo", description="OLD SOUTH ARABIAN LETTER QOPH", direction="r", linebreak="al", unicodeslot=0x10A64, }, [0x10A65]={ category="lo", description="OLD SOUTH ARABIAN LETTER WAW", direction="r", linebreak="al", unicodeslot=0x10A65, }, [0x10A66]={ category="lo", description="OLD SOUTH ARABIAN LETTER SHIN", direction="r", linebreak="al", unicodeslot=0x10A66, }, [0x10A67]={ category="lo", description="OLD SOUTH ARABIAN LETTER RESH", direction="r", linebreak="al", unicodeslot=0x10A67, }, [0x10A68]={ category="lo", description="OLD SOUTH ARABIAN LETTER BETH", direction="r", linebreak="al", unicodeslot=0x10A68, }, [0x10A69]={ category="lo", description="OLD SOUTH ARABIAN LETTER TAW", direction="r", linebreak="al", unicodeslot=0x10A69, }, [0x10A6A]={ category="lo", description="OLD SOUTH ARABIAN LETTER SAT", direction="r", linebreak="al", unicodeslot=0x10A6A, }, [0x10A6B]={ category="lo", description="OLD SOUTH ARABIAN LETTER KAPH", direction="r", linebreak="al", unicodeslot=0x10A6B, }, [0x10A6C]={ category="lo", description="OLD SOUTH ARABIAN LETTER NUN", direction="r", linebreak="al", unicodeslot=0x10A6C, }, [0x10A6D]={ category="lo", description="OLD SOUTH ARABIAN LETTER KHETH", direction="r", linebreak="al", unicodeslot=0x10A6D, }, [0x10A6E]={ category="lo", description="OLD SOUTH ARABIAN LETTER SADHE", direction="r", linebreak="al", unicodeslot=0x10A6E, }, [0x10A6F]={ category="lo", description="OLD SOUTH ARABIAN LETTER SAMEKH", direction="r", linebreak="al", unicodeslot=0x10A6F, }, [0x10A70]={ category="lo", description="OLD SOUTH ARABIAN LETTER FE", direction="r", linebreak="al", unicodeslot=0x10A70, }, [0x10A71]={ category="lo", description="OLD SOUTH ARABIAN LETTER ALEF", direction="r", linebreak="al", unicodeslot=0x10A71, }, [0x10A72]={ category="lo", description="OLD SOUTH ARABIAN LETTER AYN", direction="r", linebreak="al", unicodeslot=0x10A72, }, [0x10A73]={ category="lo", description="OLD SOUTH ARABIAN LETTER DHADHE", direction="r", linebreak="al", unicodeslot=0x10A73, }, [0x10A74]={ category="lo", description="OLD SOUTH ARABIAN LETTER GIMEL", direction="r", linebreak="al", unicodeslot=0x10A74, }, [0x10A75]={ category="lo", description="OLD SOUTH ARABIAN LETTER DALETH", direction="r", linebreak="al", unicodeslot=0x10A75, }, [0x10A76]={ category="lo", description="OLD SOUTH ARABIAN LETTER GHAYN", direction="r", linebreak="al", unicodeslot=0x10A76, }, [0x10A77]={ category="lo", description="OLD SOUTH ARABIAN LETTER TETH", direction="r", linebreak="al", unicodeslot=0x10A77, }, [0x10A78]={ category="lo", description="OLD SOUTH ARABIAN LETTER ZAYN", direction="r", linebreak="al", unicodeslot=0x10A78, }, [0x10A79]={ category="lo", description="OLD SOUTH ARABIAN LETTER DHALETH", direction="r", linebreak="al", unicodeslot=0x10A79, }, [0x10A7A]={ category="lo", description="OLD SOUTH ARABIAN LETTER YODH", direction="r", linebreak="al", unicodeslot=0x10A7A, }, [0x10A7B]={ category="lo", description="OLD SOUTH ARABIAN LETTER THAW", direction="r", linebreak="al", unicodeslot=0x10A7B, }, [0x10A7C]={ category="lo", description="OLD SOUTH ARABIAN LETTER THETH", direction="r", linebreak="al", unicodeslot=0x10A7C, }, [0x10A7D]={ category="no", description="OLD SOUTH ARABIAN NUMBER ONE", direction="r", linebreak="al", unicodeslot=0x10A7D, }, [0x10A7E]={ category="no", description="OLD SOUTH ARABIAN NUMBER FIFTY", direction="r", linebreak="al", unicodeslot=0x10A7E, }, [0x10A7F]={ category="po", description="OLD SOUTH ARABIAN NUMERIC INDICATOR", direction="r", linebreak="al", unicodeslot=0x10A7F, }, [0x10B00]={ category="lo", description="AVESTAN LETTER A", direction="r", linebreak="al", unicodeslot=0x10B00, }, [0x10B01]={ category="lo", description="AVESTAN LETTER AA", direction="r", linebreak="al", unicodeslot=0x10B01, }, [0x10B02]={ category="lo", description="AVESTAN LETTER AO", direction="r", linebreak="al", unicodeslot=0x10B02, }, [0x10B03]={ category="lo", description="AVESTAN LETTER AAO", direction="r", linebreak="al", unicodeslot=0x10B03, }, [0x10B04]={ category="lo", description="AVESTAN LETTER AN", direction="r", linebreak="al", unicodeslot=0x10B04, }, [0x10B05]={ category="lo", description="AVESTAN LETTER AAN", direction="r", linebreak="al", unicodeslot=0x10B05, }, [0x10B06]={ category="lo", description="AVESTAN LETTER AE", direction="r", linebreak="al", unicodeslot=0x10B06, }, [0x10B07]={ category="lo", description="AVESTAN LETTER AEE", direction="r", linebreak="al", unicodeslot=0x10B07, }, [0x10B08]={ category="lo", description="AVESTAN LETTER E", direction="r", linebreak="al", unicodeslot=0x10B08, }, [0x10B09]={ category="lo", description="AVESTAN LETTER EE", direction="r", linebreak="al", unicodeslot=0x10B09, }, [0x10B0A]={ category="lo", description="AVESTAN LETTER O", direction="r", linebreak="al", unicodeslot=0x10B0A, }, [0x10B0B]={ category="lo", description="AVESTAN LETTER OO", direction="r", linebreak="al", unicodeslot=0x10B0B, }, [0x10B0C]={ category="lo", description="AVESTAN LETTER I", direction="r", linebreak="al", unicodeslot=0x10B0C, }, [0x10B0D]={ category="lo", description="AVESTAN LETTER II", direction="r", linebreak="al", unicodeslot=0x10B0D, }, [0x10B0E]={ category="lo", description="AVESTAN LETTER U", direction="r", linebreak="al", unicodeslot=0x10B0E, }, [0x10B0F]={ category="lo", description="AVESTAN LETTER UU", direction="r", linebreak="al", unicodeslot=0x10B0F, }, [0x10B10]={ category="lo", description="AVESTAN LETTER KE", direction="r", linebreak="al", unicodeslot=0x10B10, }, [0x10B11]={ category="lo", description="AVESTAN LETTER XE", direction="r", linebreak="al", unicodeslot=0x10B11, }, [0x10B12]={ category="lo", description="AVESTAN LETTER XYE", direction="r", linebreak="al", unicodeslot=0x10B12, }, [0x10B13]={ category="lo", description="AVESTAN LETTER XVE", direction="r", linebreak="al", unicodeslot=0x10B13, }, [0x10B14]={ category="lo", description="AVESTAN LETTER GE", direction="r", linebreak="al", unicodeslot=0x10B14, }, [0x10B15]={ category="lo", description="AVESTAN LETTER GGE", direction="r", linebreak="al", unicodeslot=0x10B15, }, [0x10B16]={ category="lo", description="AVESTAN LETTER GHE", direction="r", linebreak="al", unicodeslot=0x10B16, }, [0x10B17]={ category="lo", description="AVESTAN LETTER CE", direction="r", linebreak="al", unicodeslot=0x10B17, }, [0x10B18]={ category="lo", description="AVESTAN LETTER JE", direction="r", linebreak="al", unicodeslot=0x10B18, }, [0x10B19]={ category="lo", description="AVESTAN LETTER TE", direction="r", linebreak="al", unicodeslot=0x10B19, }, [0x10B1A]={ category="lo", description="AVESTAN LETTER THE", direction="r", linebreak="al", unicodeslot=0x10B1A, }, [0x10B1B]={ category="lo", description="AVESTAN LETTER DE", direction="r", linebreak="al", unicodeslot=0x10B1B, }, [0x10B1C]={ category="lo", description="AVESTAN LETTER DHE", direction="r", linebreak="al", unicodeslot=0x10B1C, }, [0x10B1D]={ category="lo", description="AVESTAN LETTER TTE", direction="r", linebreak="al", unicodeslot=0x10B1D, }, [0x10B1E]={ category="lo", description="AVESTAN LETTER PE", direction="r", linebreak="al", unicodeslot=0x10B1E, }, [0x10B1F]={ category="lo", description="AVESTAN LETTER FE", direction="r", linebreak="al", unicodeslot=0x10B1F, }, [0x10B20]={ category="lo", description="AVESTAN LETTER BE", direction="r", linebreak="al", unicodeslot=0x10B20, }, [0x10B21]={ category="lo", description="AVESTAN LETTER BHE", direction="r", linebreak="al", unicodeslot=0x10B21, }, [0x10B22]={ category="lo", description="AVESTAN LETTER NGE", direction="r", linebreak="al", unicodeslot=0x10B22, }, [0x10B23]={ category="lo", description="AVESTAN LETTER NGYE", direction="r", linebreak="al", unicodeslot=0x10B23, }, [0x10B24]={ category="lo", description="AVESTAN LETTER NGVE", direction="r", linebreak="al", unicodeslot=0x10B24, }, [0x10B25]={ category="lo", description="AVESTAN LETTER NE", direction="r", linebreak="al", unicodeslot=0x10B25, }, [0x10B26]={ category="lo", description="AVESTAN LETTER NYE", direction="r", linebreak="al", unicodeslot=0x10B26, }, [0x10B27]={ category="lo", description="AVESTAN LETTER NNE", direction="r", linebreak="al", unicodeslot=0x10B27, }, [0x10B28]={ category="lo", description="AVESTAN LETTER ME", direction="r", linebreak="al", unicodeslot=0x10B28, }, [0x10B29]={ category="lo", description="AVESTAN LETTER HME", direction="r", linebreak="al", unicodeslot=0x10B29, }, [0x10B2A]={ category="lo", description="AVESTAN LETTER YYE", direction="r", linebreak="al", unicodeslot=0x10B2A, }, [0x10B2B]={ category="lo", description="AVESTAN LETTER YE", direction="r", linebreak="al", unicodeslot=0x10B2B, }, [0x10B2C]={ category="lo", description="AVESTAN LETTER VE", direction="r", linebreak="al", unicodeslot=0x10B2C, }, [0x10B2D]={ category="lo", description="AVESTAN LETTER RE", direction="r", linebreak="al", unicodeslot=0x10B2D, }, [0x10B2E]={ category="lo", description="AVESTAN LETTER LE", direction="r", linebreak="al", unicodeslot=0x10B2E, }, [0x10B2F]={ category="lo", description="AVESTAN LETTER SE", direction="r", linebreak="al", unicodeslot=0x10B2F, }, [0x10B30]={ category="lo", description="AVESTAN LETTER ZE", direction="r", linebreak="al", unicodeslot=0x10B30, }, [0x10B31]={ category="lo", description="AVESTAN LETTER SHE", direction="r", linebreak="al", unicodeslot=0x10B31, }, [0x10B32]={ category="lo", description="AVESTAN LETTER ZHE", direction="r", linebreak="al", unicodeslot=0x10B32, }, [0x10B33]={ category="lo", description="AVESTAN LETTER SHYE", direction="r", linebreak="al", unicodeslot=0x10B33, }, [0x10B34]={ category="lo", description="AVESTAN LETTER SSHE", direction="r", linebreak="al", unicodeslot=0x10B34, }, [0x10B35]={ category="lo", description="AVESTAN LETTER HE", direction="r", linebreak="al", unicodeslot=0x10B35, }, [0x10B39]={ category="po", description="AVESTAN ABBREVIATION MARK", direction="on", linebreak="ba", unicodeslot=0x10B39, }, [0x10B3A]={ category="po", description="TINY TWO DOTS OVER ONE DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x10B3A, }, [0x10B3B]={ category="po", description="SMALL TWO DOTS OVER ONE DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x10B3B, }, [0x10B3C]={ category="po", description="LARGE TWO DOTS OVER ONE DOT PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x10B3C, }, [0x10B3D]={ category="po", description="LARGE ONE DOT OVER TWO DOTS PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x10B3D, }, [0x10B3E]={ category="po", description="LARGE TWO RINGS OVER ONE RING PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x10B3E, }, [0x10B3F]={ category="po", description="LARGE ONE RING OVER TWO RINGS PUNCTUATION", direction="on", linebreak="ba", unicodeslot=0x10B3F, }, [0x10B40]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER ALEPH", direction="r", linebreak="al", unicodeslot=0x10B40, }, [0x10B41]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER BETH", direction="r", linebreak="al", unicodeslot=0x10B41, }, [0x10B42]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER GIMEL", direction="r", linebreak="al", unicodeslot=0x10B42, }, [0x10B43]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER DALETH", direction="r", linebreak="al", unicodeslot=0x10B43, }, [0x10B44]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER HE", direction="r", linebreak="al", unicodeslot=0x10B44, }, [0x10B45]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER WAW", direction="r", linebreak="al", unicodeslot=0x10B45, }, [0x10B46]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER ZAYIN", direction="r", linebreak="al", unicodeslot=0x10B46, }, [0x10B47]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER HETH", direction="r", linebreak="al", unicodeslot=0x10B47, }, [0x10B48]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER TETH", direction="r", linebreak="al", unicodeslot=0x10B48, }, [0x10B49]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER YODH", direction="r", linebreak="al", unicodeslot=0x10B49, }, [0x10B4A]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER KAPH", direction="r", linebreak="al", unicodeslot=0x10B4A, }, [0x10B4B]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER LAMEDH", direction="r", linebreak="al", unicodeslot=0x10B4B, }, [0x10B4C]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER MEM", direction="r", linebreak="al", unicodeslot=0x10B4C, }, [0x10B4D]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER NUN", direction="r", linebreak="al", unicodeslot=0x10B4D, }, [0x10B4E]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER SAMEKH", direction="r", linebreak="al", unicodeslot=0x10B4E, }, [0x10B4F]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER AYIN", direction="r", linebreak="al", unicodeslot=0x10B4F, }, [0x10B50]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER PE", direction="r", linebreak="al", unicodeslot=0x10B50, }, [0x10B51]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER SADHE", direction="r", linebreak="al", unicodeslot=0x10B51, }, [0x10B52]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER QOPH", direction="r", linebreak="al", unicodeslot=0x10B52, }, [0x10B53]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER RESH", direction="r", linebreak="al", unicodeslot=0x10B53, }, [0x10B54]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER SHIN", direction="r", linebreak="al", unicodeslot=0x10B54, }, [0x10B55]={ category="lo", description="INSCRIPTIONAL PARTHIAN LETTER TAW", direction="r", linebreak="al", unicodeslot=0x10B55, }, [0x10B58]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER ONE", direction="r", linebreak="al", unicodeslot=0x10B58, }, [0x10B59]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER TWO", direction="r", linebreak="al", unicodeslot=0x10B59, }, [0x10B5A]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER THREE", direction="r", linebreak="al", unicodeslot=0x10B5A, }, [0x10B5B]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER FOUR", direction="r", linebreak="al", unicodeslot=0x10B5B, }, [0x10B5C]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER TEN", direction="r", linebreak="al", unicodeslot=0x10B5C, }, [0x10B5D]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER TWENTY", direction="r", linebreak="al", unicodeslot=0x10B5D, }, [0x10B5E]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED", direction="r", linebreak="al", unicodeslot=0x10B5E, }, [0x10B5F]={ category="no", description="INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND", direction="r", linebreak="al", unicodeslot=0x10B5F, }, [0x10B60]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER ALEPH", direction="r", linebreak="al", unicodeslot=0x10B60, }, [0x10B61]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER BETH", direction="r", linebreak="al", unicodeslot=0x10B61, }, [0x10B62]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER GIMEL", direction="r", linebreak="al", unicodeslot=0x10B62, }, [0x10B63]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER DALETH", direction="r", linebreak="al", unicodeslot=0x10B63, }, [0x10B64]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER HE", direction="r", linebreak="al", unicodeslot=0x10B64, }, [0x10B65]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH", direction="r", linebreak="al", unicodeslot=0x10B65, }, [0x10B66]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER ZAYIN", direction="r", linebreak="al", unicodeslot=0x10B66, }, [0x10B67]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER HETH", direction="r", linebreak="al", unicodeslot=0x10B67, }, [0x10B68]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER TETH", direction="r", linebreak="al", unicodeslot=0x10B68, }, [0x10B69]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER YODH", direction="r", linebreak="al", unicodeslot=0x10B69, }, [0x10B6A]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER KAPH", direction="r", linebreak="al", unicodeslot=0x10B6A, }, [0x10B6B]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER LAMEDH", direction="r", linebreak="al", unicodeslot=0x10B6B, }, [0x10B6C]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH", direction="r", linebreak="al", unicodeslot=0x10B6C, }, [0x10B6D]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER NUN", direction="r", linebreak="al", unicodeslot=0x10B6D, }, [0x10B6E]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER SAMEKH", direction="r", linebreak="al", unicodeslot=0x10B6E, }, [0x10B6F]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER PE", direction="r", linebreak="al", unicodeslot=0x10B6F, }, [0x10B70]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER SADHE", direction="r", linebreak="al", unicodeslot=0x10B70, }, [0x10B71]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER SHIN", direction="r", linebreak="al", unicodeslot=0x10B71, }, [0x10B72]={ category="lo", description="INSCRIPTIONAL PAHLAVI LETTER TAW", direction="r", linebreak="al", unicodeslot=0x10B72, }, [0x10B78]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER ONE", direction="r", linebreak="al", unicodeslot=0x10B78, }, [0x10B79]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER TWO", direction="r", linebreak="al", unicodeslot=0x10B79, }, [0x10B7A]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER THREE", direction="r", linebreak="al", unicodeslot=0x10B7A, }, [0x10B7B]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER FOUR", direction="r", linebreak="al", unicodeslot=0x10B7B, }, [0x10B7C]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER TEN", direction="r", linebreak="al", unicodeslot=0x10B7C, }, [0x10B7D]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER TWENTY", direction="r", linebreak="al", unicodeslot=0x10B7D, }, [0x10B7E]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED", direction="r", linebreak="al", unicodeslot=0x10B7E, }, [0x10B7F]={ category="no", description="INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND", direction="r", linebreak="al", unicodeslot=0x10B7F, }, [0x10C00]={ category="lo", description="OLD TURKIC LETTER ORKHON A", direction="r", linebreak="al", unicodeslot=0x10C00, }, [0x10C01]={ category="lo", description="OLD TURKIC LETTER YENISEI A", direction="r", linebreak="al", unicodeslot=0x10C01, }, [0x10C02]={ category="lo", description="OLD TURKIC LETTER YENISEI AE", direction="r", linebreak="al", unicodeslot=0x10C02, }, [0x10C03]={ category="lo", description="OLD TURKIC LETTER ORKHON I", direction="r", linebreak="al", unicodeslot=0x10C03, }, [0x10C04]={ category="lo", description="OLD TURKIC LETTER YENISEI I", direction="r", linebreak="al", unicodeslot=0x10C04, }, [0x10C05]={ category="lo", description="OLD TURKIC LETTER YENISEI E", direction="r", linebreak="al", unicodeslot=0x10C05, }, [0x10C06]={ category="lo", description="OLD TURKIC LETTER ORKHON O", direction="r", linebreak="al", unicodeslot=0x10C06, }, [0x10C07]={ category="lo", description="OLD TURKIC LETTER ORKHON OE", direction="r", linebreak="al", unicodeslot=0x10C07, }, [0x10C08]={ category="lo", description="OLD TURKIC LETTER YENISEI OE", direction="r", linebreak="al", unicodeslot=0x10C08, }, [0x10C09]={ category="lo", description="OLD TURKIC LETTER ORKHON AB", direction="r", linebreak="al", unicodeslot=0x10C09, }, [0x10C0A]={ category="lo", description="OLD TURKIC LETTER YENISEI AB", direction="r", linebreak="al", unicodeslot=0x10C0A, }, [0x10C0B]={ category="lo", description="OLD TURKIC LETTER ORKHON AEB", direction="r", linebreak="al", unicodeslot=0x10C0B, }, [0x10C0C]={ category="lo", description="OLD TURKIC LETTER YENISEI AEB", direction="r", linebreak="al", unicodeslot=0x10C0C, }, [0x10C0D]={ category="lo", description="OLD TURKIC LETTER ORKHON AG", direction="r", linebreak="al", unicodeslot=0x10C0D, }, [0x10C0E]={ category="lo", description="OLD TURKIC LETTER YENISEI AG", direction="r", linebreak="al", unicodeslot=0x10C0E, }, [0x10C0F]={ category="lo", description="OLD TURKIC LETTER ORKHON AEG", direction="r", linebreak="al", unicodeslot=0x10C0F, }, [0x10C10]={ category="lo", description="OLD TURKIC LETTER YENISEI AEG", direction="r", linebreak="al", unicodeslot=0x10C10, }, [0x10C11]={ category="lo", description="OLD TURKIC LETTER ORKHON AD", direction="r", linebreak="al", unicodeslot=0x10C11, }, [0x10C12]={ category="lo", description="OLD TURKIC LETTER YENISEI AD", direction="r", linebreak="al", unicodeslot=0x10C12, }, [0x10C13]={ category="lo", description="OLD TURKIC LETTER ORKHON AED", direction="r", linebreak="al", unicodeslot=0x10C13, }, [0x10C14]={ category="lo", description="OLD TURKIC LETTER ORKHON EZ", direction="r", linebreak="al", unicodeslot=0x10C14, }, [0x10C15]={ category="lo", description="OLD TURKIC LETTER YENISEI EZ", direction="r", linebreak="al", unicodeslot=0x10C15, }, [0x10C16]={ category="lo", description="OLD TURKIC LETTER ORKHON AY", direction="r", linebreak="al", unicodeslot=0x10C16, }, [0x10C17]={ category="lo", description="OLD TURKIC LETTER YENISEI AY", direction="r", linebreak="al", unicodeslot=0x10C17, }, [0x10C18]={ category="lo", description="OLD TURKIC LETTER ORKHON AEY", direction="r", linebreak="al", unicodeslot=0x10C18, }, [0x10C19]={ category="lo", description="OLD TURKIC LETTER YENISEI AEY", direction="r", linebreak="al", unicodeslot=0x10C19, }, [0x10C1A]={ category="lo", description="OLD TURKIC LETTER ORKHON AEK", direction="r", linebreak="al", unicodeslot=0x10C1A, }, [0x10C1B]={ category="lo", description="OLD TURKIC LETTER YENISEI AEK", direction="r", linebreak="al", unicodeslot=0x10C1B, }, [0x10C1C]={ category="lo", description="OLD TURKIC LETTER ORKHON OEK", direction="r", linebreak="al", unicodeslot=0x10C1C, }, [0x10C1D]={ category="lo", description="OLD TURKIC LETTER YENISEI OEK", direction="r", linebreak="al", unicodeslot=0x10C1D, }, [0x10C1E]={ category="lo", description="OLD TURKIC LETTER ORKHON AL", direction="r", linebreak="al", unicodeslot=0x10C1E, }, [0x10C1F]={ category="lo", description="OLD TURKIC LETTER YENISEI AL", direction="r", linebreak="al", unicodeslot=0x10C1F, }, [0x10C20]={ category="lo", description="OLD TURKIC LETTER ORKHON AEL", direction="r", linebreak="al", unicodeslot=0x10C20, }, [0x10C21]={ category="lo", description="OLD TURKIC LETTER ORKHON ELT", direction="r", linebreak="al", unicodeslot=0x10C21, }, [0x10C22]={ category="lo", description="OLD TURKIC LETTER ORKHON EM", direction="r", linebreak="al", unicodeslot=0x10C22, }, [0x10C23]={ category="lo", description="OLD TURKIC LETTER ORKHON AN", direction="r", linebreak="al", unicodeslot=0x10C23, }, [0x10C24]={ category="lo", description="OLD TURKIC LETTER ORKHON AEN", direction="r", linebreak="al", unicodeslot=0x10C24, }, [0x10C25]={ category="lo", description="OLD TURKIC LETTER YENISEI AEN", direction="r", linebreak="al", unicodeslot=0x10C25, }, [0x10C26]={ category="lo", description="OLD TURKIC LETTER ORKHON ENT", direction="r", linebreak="al", unicodeslot=0x10C26, }, [0x10C27]={ category="lo", description="OLD TURKIC LETTER YENISEI ENT", direction="r", linebreak="al", unicodeslot=0x10C27, }, [0x10C28]={ category="lo", description="OLD TURKIC LETTER ORKHON ENC", direction="r", linebreak="al", unicodeslot=0x10C28, }, [0x10C29]={ category="lo", description="OLD TURKIC LETTER YENISEI ENC", direction="r", linebreak="al", unicodeslot=0x10C29, }, [0x10C2A]={ category="lo", description="OLD TURKIC LETTER ORKHON ENY", direction="r", linebreak="al", unicodeslot=0x10C2A, }, [0x10C2B]={ category="lo", description="OLD TURKIC LETTER YENISEI ENY", direction="r", linebreak="al", unicodeslot=0x10C2B, }, [0x10C2C]={ category="lo", description="OLD TURKIC LETTER YENISEI ANG", direction="r", linebreak="al", unicodeslot=0x10C2C, }, [0x10C2D]={ category="lo", description="OLD TURKIC LETTER ORKHON ENG", direction="r", linebreak="al", unicodeslot=0x10C2D, }, [0x10C2E]={ category="lo", description="OLD TURKIC LETTER YENISEI AENG", direction="r", linebreak="al", unicodeslot=0x10C2E, }, [0x10C2F]={ category="lo", description="OLD TURKIC LETTER ORKHON EP", direction="r", linebreak="al", unicodeslot=0x10C2F, }, [0x10C30]={ category="lo", description="OLD TURKIC LETTER ORKHON OP", direction="r", linebreak="al", unicodeslot=0x10C30, }, [0x10C31]={ category="lo", description="OLD TURKIC LETTER ORKHON IC", direction="r", linebreak="al", unicodeslot=0x10C31, }, [0x10C32]={ category="lo", description="OLD TURKIC LETTER ORKHON EC", direction="r", linebreak="al", unicodeslot=0x10C32, }, [0x10C33]={ category="lo", description="OLD TURKIC LETTER YENISEI EC", direction="r", linebreak="al", unicodeslot=0x10C33, }, [0x10C34]={ category="lo", description="OLD TURKIC LETTER ORKHON AQ", direction="r", linebreak="al", unicodeslot=0x10C34, }, [0x10C35]={ category="lo", description="OLD TURKIC LETTER YENISEI AQ", direction="r", linebreak="al", unicodeslot=0x10C35, }, [0x10C36]={ category="lo", description="OLD TURKIC LETTER ORKHON IQ", direction="r", linebreak="al", unicodeslot=0x10C36, }, [0x10C37]={ category="lo", description="OLD TURKIC LETTER YENISEI IQ", direction="r", linebreak="al", unicodeslot=0x10C37, }, [0x10C38]={ category="lo", description="OLD TURKIC LETTER ORKHON OQ", direction="r", linebreak="al", unicodeslot=0x10C38, }, [0x10C39]={ category="lo", description="OLD TURKIC LETTER YENISEI OQ", direction="r", linebreak="al", unicodeslot=0x10C39, }, [0x10C3A]={ category="lo", description="OLD TURKIC LETTER ORKHON AR", direction="r", linebreak="al", unicodeslot=0x10C3A, }, [0x10C3B]={ category="lo", description="OLD TURKIC LETTER YENISEI AR", direction="r", linebreak="al", unicodeslot=0x10C3B, }, [0x10C3C]={ category="lo", description="OLD TURKIC LETTER ORKHON AER", direction="r", linebreak="al", unicodeslot=0x10C3C, }, [0x10C3D]={ category="lo", description="OLD TURKIC LETTER ORKHON AS", direction="r", linebreak="al", unicodeslot=0x10C3D, }, [0x10C3E]={ category="lo", description="OLD TURKIC LETTER ORKHON AES", direction="r", linebreak="al", unicodeslot=0x10C3E, }, [0x10C3F]={ category="lo", description="OLD TURKIC LETTER ORKHON ASH", direction="r", linebreak="al", unicodeslot=0x10C3F, }, [0x10C40]={ category="lo", description="OLD TURKIC LETTER YENISEI ASH", direction="r", linebreak="al", unicodeslot=0x10C40, }, [0x10C41]={ category="lo", description="OLD TURKIC LETTER ORKHON ESH", direction="r", linebreak="al", unicodeslot=0x10C41, }, [0x10C42]={ category="lo", description="OLD TURKIC LETTER YENISEI ESH", direction="r", linebreak="al", unicodeslot=0x10C42, }, [0x10C43]={ category="lo", description="OLD TURKIC LETTER ORKHON AT", direction="r", linebreak="al", unicodeslot=0x10C43, }, [0x10C44]={ category="lo", description="OLD TURKIC LETTER YENISEI AT", direction="r", linebreak="al", unicodeslot=0x10C44, }, [0x10C45]={ category="lo", description="OLD TURKIC LETTER ORKHON AET", direction="r", linebreak="al", unicodeslot=0x10C45, }, [0x10C46]={ category="lo", description="OLD TURKIC LETTER YENISEI AET", direction="r", linebreak="al", unicodeslot=0x10C46, }, [0x10C47]={ category="lo", description="OLD TURKIC LETTER ORKHON OT", direction="r", linebreak="al", unicodeslot=0x10C47, }, [0x10C48]={ category="lo", description="OLD TURKIC LETTER ORKHON BASH", direction="r", linebreak="al", unicodeslot=0x10C48, }, [0x10E60]={ category="no", description="RUMI DIGIT ONE", direction="an", linebreak="al", unicodeslot=0x10E60, }, [0x10E61]={ category="no", description="RUMI DIGIT TWO", direction="an", linebreak="al", unicodeslot=0x10E61, }, [0x10E62]={ category="no", description="RUMI DIGIT THREE", direction="an", linebreak="al", unicodeslot=0x10E62, }, [0x10E63]={ category="no", description="RUMI DIGIT FOUR", direction="an", linebreak="al", unicodeslot=0x10E63, }, [0x10E64]={ category="no", description="RUMI DIGIT FIVE", direction="an", linebreak="al", unicodeslot=0x10E64, }, [0x10E65]={ category="no", description="RUMI DIGIT SIX", direction="an", linebreak="al", unicodeslot=0x10E65, }, [0x10E66]={ category="no", description="RUMI DIGIT SEVEN", direction="an", linebreak="al", unicodeslot=0x10E66, }, [0x10E67]={ category="no", description="RUMI DIGIT EIGHT", direction="an", linebreak="al", unicodeslot=0x10E67, }, [0x10E68]={ category="no", description="RUMI DIGIT NINE", direction="an", linebreak="al", unicodeslot=0x10E68, }, [0x10E69]={ category="no", description="RUMI NUMBER TEN", direction="an", linebreak="al", unicodeslot=0x10E69, }, [0x10E6A]={ category="no", description="RUMI NUMBER TWENTY", direction="an", linebreak="al", unicodeslot=0x10E6A, }, [0x10E6B]={ category="no", description="RUMI NUMBER THIRTY", direction="an", linebreak="al", unicodeslot=0x10E6B, }, [0x10E6C]={ category="no", description="RUMI NUMBER FORTY", direction="an", linebreak="al", unicodeslot=0x10E6C, }, [0x10E6D]={ category="no", description="RUMI NUMBER FIFTY", direction="an", linebreak="al", unicodeslot=0x10E6D, }, [0x10E6E]={ category="no", description="RUMI NUMBER SIXTY", direction="an", linebreak="al", unicodeslot=0x10E6E, }, [0x10E6F]={ category="no", description="RUMI NUMBER SEVENTY", direction="an", linebreak="al", unicodeslot=0x10E6F, }, [0x10E70]={ category="no", description="RUMI NUMBER EIGHTY", direction="an", linebreak="al", unicodeslot=0x10E70, }, [0x10E71]={ category="no", description="RUMI NUMBER NINETY", direction="an", linebreak="al", unicodeslot=0x10E71, }, [0x10E72]={ category="no", description="RUMI NUMBER ONE HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E72, }, [0x10E73]={ category="no", description="RUMI NUMBER TWO HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E73, }, [0x10E74]={ category="no", description="RUMI NUMBER THREE HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E74, }, [0x10E75]={ category="no", description="RUMI NUMBER FOUR HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E75, }, [0x10E76]={ category="no", description="RUMI NUMBER FIVE HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E76, }, [0x10E77]={ category="no", description="RUMI NUMBER SIX HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E77, }, [0x10E78]={ category="no", description="RUMI NUMBER SEVEN HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E78, }, [0x10E79]={ category="no", description="RUMI NUMBER EIGHT HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E79, }, [0x10E7A]={ category="no", description="RUMI NUMBER NINE HUNDRED", direction="an", linebreak="al", unicodeslot=0x10E7A, }, [0x10E7B]={ category="no", description="RUMI FRACTION ONE HALF", direction="an", linebreak="al", unicodeslot=0x10E7B, }, [0x10E7C]={ category="no", description="RUMI FRACTION ONE QUARTER", direction="an", linebreak="al", unicodeslot=0x10E7C, }, [0x10E7D]={ category="no", description="RUMI FRACTION ONE THIRD", direction="an", linebreak="al", unicodeslot=0x10E7D, }, [0x10E7E]={ category="no", description="RUMI FRACTION TWO THIRDS", direction="an", linebreak="al", unicodeslot=0x10E7E, }, [0x11000]={ category="mc", description="BRAHMI SIGN CANDRABINDU", direction="l", linebreak="cm", unicodeslot=0x11000, }, [0x11001]={ category="mn", description="BRAHMI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x11001, }, [0x11002]={ category="mc", description="BRAHMI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x11002, }, [0x11003]={ category="lo", description="BRAHMI SIGN JIHVAMULIYA", direction="l", linebreak="al", unicodeslot=0x11003, }, [0x11004]={ category="lo", description="BRAHMI SIGN UPADHMANIYA", direction="l", linebreak="al", unicodeslot=0x11004, }, [0x11005]={ category="lo", description="BRAHMI LETTER A", direction="l", linebreak="al", unicodeslot=0x11005, }, [0x11006]={ category="lo", description="BRAHMI LETTER AA", direction="l", linebreak="al", unicodeslot=0x11006, }, [0x11007]={ category="lo", description="BRAHMI LETTER I", direction="l", linebreak="al", unicodeslot=0x11007, }, [0x11008]={ category="lo", description="BRAHMI LETTER II", direction="l", linebreak="al", unicodeslot=0x11008, }, [0x11009]={ category="lo", description="BRAHMI LETTER U", direction="l", linebreak="al", unicodeslot=0x11009, }, [0x1100A]={ category="lo", description="BRAHMI LETTER UU", direction="l", linebreak="al", unicodeslot=0x1100A, }, [0x1100B]={ category="lo", description="BRAHMI LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x1100B, }, [0x1100C]={ category="lo", description="BRAHMI LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x1100C, }, [0x1100D]={ category="lo", description="BRAHMI LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x1100D, }, [0x1100E]={ category="lo", description="BRAHMI LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x1100E, }, [0x1100F]={ category="lo", description="BRAHMI LETTER E", direction="l", linebreak="al", unicodeslot=0x1100F, }, [0x11010]={ category="lo", description="BRAHMI LETTER AI", direction="l", linebreak="al", unicodeslot=0x11010, }, [0x11011]={ category="lo", description="BRAHMI LETTER O", direction="l", linebreak="al", unicodeslot=0x11011, }, [0x11012]={ category="lo", description="BRAHMI LETTER AU", direction="l", linebreak="al", unicodeslot=0x11012, }, [0x11013]={ category="lo", description="BRAHMI LETTER KA", direction="l", linebreak="al", unicodeslot=0x11013, }, [0x11014]={ category="lo", description="BRAHMI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x11014, }, [0x11015]={ category="lo", description="BRAHMI LETTER GA", direction="l", linebreak="al", unicodeslot=0x11015, }, [0x11016]={ category="lo", description="BRAHMI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x11016, }, [0x11017]={ category="lo", description="BRAHMI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x11017, }, [0x11018]={ category="lo", description="BRAHMI LETTER CA", direction="l", linebreak="al", unicodeslot=0x11018, }, [0x11019]={ category="lo", description="BRAHMI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x11019, }, [0x1101A]={ category="lo", description="BRAHMI LETTER JA", direction="l", linebreak="al", unicodeslot=0x1101A, }, [0x1101B]={ category="lo", description="BRAHMI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x1101B, }, [0x1101C]={ category="lo", description="BRAHMI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1101C, }, [0x1101D]={ category="lo", description="BRAHMI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x1101D, }, [0x1101E]={ category="lo", description="BRAHMI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x1101E, }, [0x1101F]={ category="lo", description="BRAHMI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x1101F, }, [0x11020]={ category="lo", description="BRAHMI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x11020, }, [0x11021]={ category="lo", description="BRAHMI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x11021, }, [0x11022]={ category="lo", description="BRAHMI LETTER TA", direction="l", linebreak="al", unicodeslot=0x11022, }, [0x11023]={ category="lo", description="BRAHMI LETTER THA", direction="l", linebreak="al", unicodeslot=0x11023, }, [0x11024]={ category="lo", description="BRAHMI LETTER DA", direction="l", linebreak="al", unicodeslot=0x11024, }, [0x11025]={ category="lo", description="BRAHMI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x11025, }, [0x11026]={ category="lo", description="BRAHMI LETTER NA", direction="l", linebreak="al", unicodeslot=0x11026, }, [0x11027]={ category="lo", description="BRAHMI LETTER PA", direction="l", linebreak="al", unicodeslot=0x11027, }, [0x11028]={ category="lo", description="BRAHMI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x11028, }, [0x11029]={ category="lo", description="BRAHMI LETTER BA", direction="l", linebreak="al", unicodeslot=0x11029, }, [0x1102A]={ category="lo", description="BRAHMI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x1102A, }, [0x1102B]={ category="lo", description="BRAHMI LETTER MA", direction="l", linebreak="al", unicodeslot=0x1102B, }, [0x1102C]={ category="lo", description="BRAHMI LETTER YA", direction="l", linebreak="al", unicodeslot=0x1102C, }, [0x1102D]={ category="lo", description="BRAHMI LETTER RA", direction="l", linebreak="al", unicodeslot=0x1102D, }, [0x1102E]={ category="lo", description="BRAHMI LETTER LA", direction="l", linebreak="al", unicodeslot=0x1102E, }, [0x1102F]={ category="lo", description="BRAHMI LETTER VA", direction="l", linebreak="al", unicodeslot=0x1102F, }, [0x11030]={ category="lo", description="BRAHMI LETTER SHA", direction="l", linebreak="al", unicodeslot=0x11030, }, [0x11031]={ category="lo", description="BRAHMI LETTER SSA", direction="l", linebreak="al", unicodeslot=0x11031, }, [0x11032]={ category="lo", description="BRAHMI LETTER SA", direction="l", linebreak="al", unicodeslot=0x11032, }, [0x11033]={ category="lo", description="BRAHMI LETTER HA", direction="l", linebreak="al", unicodeslot=0x11033, }, [0x11034]={ category="lo", description="BRAHMI LETTER LLA", direction="l", linebreak="al", unicodeslot=0x11034, }, [0x11035]={ category="lo", description="BRAHMI LETTER OLD TAMIL LLLA", direction="l", linebreak="al", unicodeslot=0x11035, }, [0x11036]={ category="lo", description="BRAHMI LETTER OLD TAMIL RRA", direction="l", linebreak="al", unicodeslot=0x11036, }, [0x11037]={ category="lo", description="BRAHMI LETTER OLD TAMIL NNNA", direction="l", linebreak="al", unicodeslot=0x11037, }, [0x11038]={ category="mn", description="BRAHMI VOWEL SIGN AA", direction="nsm", linebreak="cm", unicodeslot=0x11038, }, [0x11039]={ category="mn", description="BRAHMI VOWEL SIGN BHATTIPROLU AA", direction="nsm", linebreak="cm", unicodeslot=0x11039, }, [0x1103A]={ category="mn", description="BRAHMI VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x1103A, }, [0x1103B]={ category="mn", description="BRAHMI VOWEL SIGN II", direction="nsm", linebreak="cm", unicodeslot=0x1103B, }, [0x1103C]={ category="mn", description="BRAHMI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1103C, }, [0x1103D]={ category="mn", description="BRAHMI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x1103D, }, [0x1103E]={ category="mn", description="BRAHMI VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x1103E, }, [0x1103F]={ category="mn", description="BRAHMI VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x1103F, }, [0x11040]={ category="mn", description="BRAHMI VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x11040, }, [0x11041]={ category="mn", description="BRAHMI VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x11041, }, [0x11042]={ category="mn", description="BRAHMI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x11042, }, [0x11043]={ category="mn", description="BRAHMI VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x11043, }, [0x11044]={ category="mn", description="BRAHMI VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x11044, }, [0x11045]={ category="mn", description="BRAHMI VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0x11045, }, [0x11046]={ category="mn", description="BRAHMI VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x11046, }, [0x11047]={ category="po", description="BRAHMI DANDA", direction="l", linebreak="ba", unicodeslot=0x11047, }, [0x11048]={ category="po", description="BRAHMI DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0x11048, }, [0x11049]={ category="po", description="BRAHMI PUNCTUATION DOT", direction="l", linebreak="al", unicodeslot=0x11049, }, [0x1104A]={ category="po", description="BRAHMI PUNCTUATION DOUBLE DOT", direction="l", linebreak="al", unicodeslot=0x1104A, }, [0x1104B]={ category="po", description="BRAHMI PUNCTUATION LINE", direction="l", linebreak="al", unicodeslot=0x1104B, }, [0x1104C]={ category="po", description="BRAHMI PUNCTUATION CRESCENT BAR", direction="l", linebreak="al", unicodeslot=0x1104C, }, [0x1104D]={ category="po", description="BRAHMI PUNCTUATION LOTUS", direction="l", linebreak="al", unicodeslot=0x1104D, }, [0x11052]={ category="no", description="BRAHMI NUMBER ONE", direction="on", linebreak="al", unicodeslot=0x11052, }, [0x11053]={ category="no", description="BRAHMI NUMBER TWO", direction="on", linebreak="al", unicodeslot=0x11053, }, [0x11054]={ category="no", description="BRAHMI NUMBER THREE", direction="on", linebreak="al", unicodeslot=0x11054, }, [0x11055]={ category="no", description="BRAHMI NUMBER FOUR", direction="on", linebreak="al", unicodeslot=0x11055, }, [0x11056]={ category="no", description="BRAHMI NUMBER FIVE", direction="on", linebreak="al", unicodeslot=0x11056, }, [0x11057]={ category="no", description="BRAHMI NUMBER SIX", direction="on", linebreak="al", unicodeslot=0x11057, }, [0x11058]={ category="no", description="BRAHMI NUMBER SEVEN", direction="on", linebreak="al", unicodeslot=0x11058, }, [0x11059]={ category="no", description="BRAHMI NUMBER EIGHT", direction="on", linebreak="al", unicodeslot=0x11059, }, [0x1105A]={ category="no", description="BRAHMI NUMBER NINE", direction="on", linebreak="al", unicodeslot=0x1105A, }, [0x1105B]={ category="no", description="BRAHMI NUMBER TEN", direction="on", linebreak="al", unicodeslot=0x1105B, }, [0x1105C]={ category="no", description="BRAHMI NUMBER TWENTY", direction="on", linebreak="al", unicodeslot=0x1105C, }, [0x1105D]={ category="no", description="BRAHMI NUMBER THIRTY", direction="on", linebreak="al", unicodeslot=0x1105D, }, [0x1105E]={ category="no", description="BRAHMI NUMBER FORTY", direction="on", linebreak="al", unicodeslot=0x1105E, }, [0x1105F]={ category="no", description="BRAHMI NUMBER FIFTY", direction="on", linebreak="al", unicodeslot=0x1105F, }, [0x11060]={ category="no", description="BRAHMI NUMBER SIXTY", direction="on", linebreak="al", unicodeslot=0x11060, }, [0x11061]={ category="no", description="BRAHMI NUMBER SEVENTY", direction="on", linebreak="al", unicodeslot=0x11061, }, [0x11062]={ category="no", description="BRAHMI NUMBER EIGHTY", direction="on", linebreak="al", unicodeslot=0x11062, }, [0x11063]={ category="no", description="BRAHMI NUMBER NINETY", direction="on", linebreak="al", unicodeslot=0x11063, }, [0x11064]={ category="no", description="BRAHMI NUMBER ONE HUNDRED", direction="on", linebreak="al", unicodeslot=0x11064, }, [0x11065]={ category="no", description="BRAHMI NUMBER ONE THOUSAND", direction="on", linebreak="al", unicodeslot=0x11065, }, [0x11066]={ category="nd", description="BRAHMI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x11066, }, [0x11067]={ category="nd", description="BRAHMI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x11067, }, [0x11068]={ category="nd", description="BRAHMI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x11068, }, [0x11069]={ category="nd", description="BRAHMI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x11069, }, [0x1106A]={ category="nd", description="BRAHMI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1106A, }, [0x1106B]={ category="nd", description="BRAHMI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1106B, }, [0x1106C]={ category="nd", description="BRAHMI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1106C, }, [0x1106D]={ category="nd", description="BRAHMI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1106D, }, [0x1106E]={ category="nd", description="BRAHMI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1106E, }, [0x1106F]={ category="nd", description="BRAHMI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1106F, }, [0x11080]={ category="mn", description="KAITHI SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x11080, }, [0x11081]={ category="mn", description="KAITHI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x11081, }, [0x11082]={ category="mc", description="KAITHI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x11082, }, [0x11083]={ category="lo", description="KAITHI LETTER A", direction="l", linebreak="al", unicodeslot=0x11083, }, [0x11084]={ category="lo", description="KAITHI LETTER AA", direction="l", linebreak="al", unicodeslot=0x11084, }, [0x11085]={ category="lo", description="KAITHI LETTER I", direction="l", linebreak="al", unicodeslot=0x11085, }, [0x11086]={ category="lo", description="KAITHI LETTER II", direction="l", linebreak="al", unicodeslot=0x11086, }, [0x11087]={ category="lo", description="KAITHI LETTER U", direction="l", linebreak="al", unicodeslot=0x11087, }, [0x11088]={ category="lo", description="KAITHI LETTER UU", direction="l", linebreak="al", unicodeslot=0x11088, }, [0x11089]={ category="lo", description="KAITHI LETTER E", direction="l", linebreak="al", unicodeslot=0x11089, }, [0x1108A]={ category="lo", description="KAITHI LETTER AI", direction="l", linebreak="al", unicodeslot=0x1108A, }, [0x1108B]={ category="lo", description="KAITHI LETTER O", direction="l", linebreak="al", unicodeslot=0x1108B, }, [0x1108C]={ category="lo", description="KAITHI LETTER AU", direction="l", linebreak="al", unicodeslot=0x1108C, }, [0x1108D]={ category="lo", description="KAITHI LETTER KA", direction="l", linebreak="al", unicodeslot=0x1108D, }, [0x1108E]={ category="lo", description="KAITHI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x1108E, }, [0x1108F]={ category="lo", description="KAITHI LETTER GA", direction="l", linebreak="al", unicodeslot=0x1108F, }, [0x11090]={ category="lo", description="KAITHI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x11090, }, [0x11091]={ category="lo", description="KAITHI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x11091, }, [0x11092]={ category="lo", description="KAITHI LETTER CA", direction="l", linebreak="al", unicodeslot=0x11092, }, [0x11093]={ category="lo", description="KAITHI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x11093, }, [0x11094]={ category="lo", description="KAITHI LETTER JA", direction="l", linebreak="al", unicodeslot=0x11094, }, [0x11095]={ category="lo", description="KAITHI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x11095, }, [0x11096]={ category="lo", description="KAITHI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x11096, }, [0x11097]={ category="lo", description="KAITHI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x11097, }, [0x11098]={ category="lo", description="KAITHI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x11098, }, [0x11099]={ category="lo", description="KAITHI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x11099, }, [0x1109A]={ category="lo", description="KAITHI LETTER DDDHA", direction="l", linebreak="al", specials={ "char", 0x11099, 0x110BA }, unicodeslot=0x1109A, }, [0x1109B]={ category="lo", description="KAITHI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x1109B, }, [0x1109C]={ category="lo", description="KAITHI LETTER RHA", direction="l", linebreak="al", specials={ "char", 0x1109B, 0x110BA }, unicodeslot=0x1109C, }, [0x1109D]={ category="lo", description="KAITHI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x1109D, }, [0x1109E]={ category="lo", description="KAITHI LETTER TA", direction="l", linebreak="al", unicodeslot=0x1109E, }, [0x1109F]={ category="lo", description="KAITHI LETTER THA", direction="l", linebreak="al", unicodeslot=0x1109F, }, [0x110A0]={ category="lo", description="KAITHI LETTER DA", direction="l", linebreak="al", unicodeslot=0x110A0, }, [0x110A1]={ category="lo", description="KAITHI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x110A1, }, [0x110A2]={ category="lo", description="KAITHI LETTER NA", direction="l", linebreak="al", unicodeslot=0x110A2, }, [0x110A3]={ category="lo", description="KAITHI LETTER PA", direction="l", linebreak="al", unicodeslot=0x110A3, }, [0x110A4]={ category="lo", description="KAITHI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x110A4, }, [0x110A5]={ category="lo", description="KAITHI LETTER BA", direction="l", linebreak="al", unicodeslot=0x110A5, }, [0x110A6]={ category="lo", description="KAITHI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x110A6, }, [0x110A7]={ category="lo", description="KAITHI LETTER MA", direction="l", linebreak="al", unicodeslot=0x110A7, }, [0x110A8]={ category="lo", description="KAITHI LETTER YA", direction="l", linebreak="al", unicodeslot=0x110A8, }, [0x110A9]={ category="lo", description="KAITHI LETTER RA", direction="l", linebreak="al", unicodeslot=0x110A9, }, [0x110AA]={ category="lo", description="KAITHI LETTER LA", direction="l", linebreak="al", unicodeslot=0x110AA, }, [0x110AB]={ category="lo", description="KAITHI LETTER VA", direction="l", linebreak="al", specials={ "char", 0x110A5, 0x110BA }, unicodeslot=0x110AB, }, [0x110AC]={ category="lo", description="KAITHI LETTER SHA", direction="l", linebreak="al", unicodeslot=0x110AC, }, [0x110AD]={ category="lo", description="KAITHI LETTER SSA", direction="l", linebreak="al", unicodeslot=0x110AD, }, [0x110AE]={ category="lo", description="KAITHI LETTER SA", direction="l", linebreak="al", unicodeslot=0x110AE, }, [0x110AF]={ category="lo", description="KAITHI LETTER HA", direction="l", linebreak="al", unicodeslot=0x110AF, }, [0x110B0]={ category="mc", description="KAITHI VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x110B0, }, [0x110B1]={ category="mc", description="KAITHI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x110B1, }, [0x110B2]={ category="mc", description="KAITHI VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x110B2, }, [0x110B3]={ category="mn", description="KAITHI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x110B3, }, [0x110B4]={ category="mn", description="KAITHI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x110B4, }, [0x110B5]={ category="mn", description="KAITHI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x110B5, }, [0x110B6]={ category="mn", description="KAITHI VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x110B6, }, [0x110B7]={ category="mc", description="KAITHI VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x110B7, }, [0x110B8]={ category="mc", description="KAITHI VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0x110B8, }, [0x110B9]={ category="mn", description="KAITHI SIGN VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x110B9, }, [0x110BA]={ category="mn", description="KAITHI SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x110BA, }, [0x110BB]={ category="po", description="KAITHI ABBREVIATION SIGN", direction="l", linebreak="al", unicodeslot=0x110BB, }, [0x110BC]={ category="po", description="KAITHI ENUMERATION SIGN", direction="l", linebreak="al", unicodeslot=0x110BC, }, [0x110BD]={ category="cf", description="KAITHI NUMBER SIGN", direction="l", linebreak="al", unicodeslot=0x110BD, }, [0x110BE]={ category="po", description="KAITHI SECTION MARK", direction="l", linebreak="ba", unicodeslot=0x110BE, }, [0x110BF]={ category="po", description="KAITHI DOUBLE SECTION MARK", direction="l", linebreak="ba", unicodeslot=0x110BF, }, [0x110C0]={ category="po", description="KAITHI DANDA", direction="l", linebreak="ba", unicodeslot=0x110C0, }, [0x110C1]={ category="po", description="KAITHI DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0x110C1, }, [0x110D0]={ category="lo", description="SORA SOMPENG LETTER SAH", direction="l", linebreak="al", unicodeslot=0x110D0, }, [0x110D1]={ category="lo", description="SORA SOMPENG LETTER TAH", direction="l", linebreak="al", unicodeslot=0x110D1, }, [0x110D2]={ category="lo", description="SORA SOMPENG LETTER BAH", direction="l", linebreak="al", unicodeslot=0x110D2, }, [0x110D3]={ category="lo", description="SORA SOMPENG LETTER CAH", direction="l", linebreak="al", unicodeslot=0x110D3, }, [0x110D4]={ category="lo", description="SORA SOMPENG LETTER DAH", direction="l", linebreak="al", unicodeslot=0x110D4, }, [0x110D5]={ category="lo", description="SORA SOMPENG LETTER GAH", direction="l", linebreak="al", unicodeslot=0x110D5, }, [0x110D6]={ category="lo", description="SORA SOMPENG LETTER MAH", direction="l", linebreak="al", unicodeslot=0x110D6, }, [0x110D7]={ category="lo", description="SORA SOMPENG LETTER NGAH", direction="l", linebreak="al", unicodeslot=0x110D7, }, [0x110D8]={ category="lo", description="SORA SOMPENG LETTER LAH", direction="l", linebreak="al", unicodeslot=0x110D8, }, [0x110D9]={ category="lo", description="SORA SOMPENG LETTER NAH", direction="l", linebreak="al", unicodeslot=0x110D9, }, [0x110DA]={ category="lo", description="SORA SOMPENG LETTER VAH", direction="l", linebreak="al", unicodeslot=0x110DA, }, [0x110DB]={ category="lo", description="SORA SOMPENG LETTER PAH", direction="l", linebreak="al", unicodeslot=0x110DB, }, [0x110DC]={ category="lo", description="SORA SOMPENG LETTER YAH", direction="l", linebreak="al", unicodeslot=0x110DC, }, [0x110DD]={ category="lo", description="SORA SOMPENG LETTER RAH", direction="l", linebreak="al", unicodeslot=0x110DD, }, [0x110DE]={ category="lo", description="SORA SOMPENG LETTER HAH", direction="l", linebreak="al", unicodeslot=0x110DE, }, [0x110DF]={ category="lo", description="SORA SOMPENG LETTER KAH", direction="l", linebreak="al", unicodeslot=0x110DF, }, [0x110E0]={ category="lo", description="SORA SOMPENG LETTER JAH", direction="l", linebreak="al", unicodeslot=0x110E0, }, [0x110E1]={ category="lo", description="SORA SOMPENG LETTER NYAH", direction="l", linebreak="al", unicodeslot=0x110E1, }, [0x110E2]={ category="lo", description="SORA SOMPENG LETTER AH", direction="l", linebreak="al", unicodeslot=0x110E2, }, [0x110E3]={ category="lo", description="SORA SOMPENG LETTER EEH", direction="l", linebreak="al", unicodeslot=0x110E3, }, [0x110E4]={ category="lo", description="SORA SOMPENG LETTER IH", direction="l", linebreak="al", unicodeslot=0x110E4, }, [0x110E5]={ category="lo", description="SORA SOMPENG LETTER UH", direction="l", linebreak="al", unicodeslot=0x110E5, }, [0x110E6]={ category="lo", description="SORA SOMPENG LETTER OH", direction="l", linebreak="al", unicodeslot=0x110E6, }, [0x110E7]={ category="lo", description="SORA SOMPENG LETTER EH", direction="l", linebreak="al", unicodeslot=0x110E7, }, [0x110E8]={ category="lo", description="SORA SOMPENG LETTER MAE", direction="l", linebreak="al", unicodeslot=0x110E8, }, [0x110F0]={ category="nd", description="SORA SOMPENG DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x110F0, }, [0x110F1]={ category="nd", description="SORA SOMPENG DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x110F1, }, [0x110F2]={ category="nd", description="SORA SOMPENG DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x110F2, }, [0x110F3]={ category="nd", description="SORA SOMPENG DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x110F3, }, [0x110F4]={ category="nd", description="SORA SOMPENG DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x110F4, }, [0x110F5]={ category="nd", description="SORA SOMPENG DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x110F5, }, [0x110F6]={ category="nd", description="SORA SOMPENG DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x110F6, }, [0x110F7]={ category="nd", description="SORA SOMPENG DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x110F7, }, [0x110F8]={ category="nd", description="SORA SOMPENG DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x110F8, }, [0x110F9]={ category="nd", description="SORA SOMPENG DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x110F9, }, [0x11100]={ category="mn", description="CHAKMA SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x11100, }, [0x11101]={ category="mn", description="CHAKMA SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x11101, }, [0x11102]={ category="mn", description="CHAKMA SIGN VISARGA", direction="nsm", linebreak="cm", unicodeslot=0x11102, }, [0x11103]={ category="lo", description="CHAKMA LETTER AA", direction="l", linebreak="al", unicodeslot=0x11103, }, [0x11104]={ category="lo", description="CHAKMA LETTER I", direction="l", linebreak="al", unicodeslot=0x11104, }, [0x11105]={ category="lo", description="CHAKMA LETTER U", direction="l", linebreak="al", unicodeslot=0x11105, }, [0x11106]={ category="lo", description="CHAKMA LETTER E", direction="l", linebreak="al", unicodeslot=0x11106, }, [0x11107]={ category="lo", description="CHAKMA LETTER KAA", direction="l", linebreak="al", unicodeslot=0x11107, }, [0x11108]={ category="lo", description="CHAKMA LETTER KHAA", direction="l", linebreak="al", unicodeslot=0x11108, }, [0x11109]={ category="lo", description="CHAKMA LETTER GAA", direction="l", linebreak="al", unicodeslot=0x11109, }, [0x1110A]={ category="lo", description="CHAKMA LETTER GHAA", direction="l", linebreak="al", unicodeslot=0x1110A, }, [0x1110B]={ category="lo", description="CHAKMA LETTER NGAA", direction="l", linebreak="al", unicodeslot=0x1110B, }, [0x1110C]={ category="lo", description="CHAKMA LETTER CAA", direction="l", linebreak="al", unicodeslot=0x1110C, }, [0x1110D]={ category="lo", description="CHAKMA LETTER CHAA", direction="l", linebreak="al", unicodeslot=0x1110D, }, [0x1110E]={ category="lo", description="CHAKMA LETTER JAA", direction="l", linebreak="al", unicodeslot=0x1110E, }, [0x1110F]={ category="lo", description="CHAKMA LETTER JHAA", direction="l", linebreak="al", unicodeslot=0x1110F, }, [0x11110]={ category="lo", description="CHAKMA LETTER NYAA", direction="l", linebreak="al", unicodeslot=0x11110, }, [0x11111]={ category="lo", description="CHAKMA LETTER TTAA", direction="l", linebreak="al", unicodeslot=0x11111, }, [0x11112]={ category="lo", description="CHAKMA LETTER TTHAA", direction="l", linebreak="al", unicodeslot=0x11112, }, [0x11113]={ category="lo", description="CHAKMA LETTER DDAA", direction="l", linebreak="al", unicodeslot=0x11113, }, [0x11114]={ category="lo", description="CHAKMA LETTER DDHAA", direction="l", linebreak="al", unicodeslot=0x11114, }, [0x11115]={ category="lo", description="CHAKMA LETTER NNAA", direction="l", linebreak="al", unicodeslot=0x11115, }, [0x11116]={ category="lo", description="CHAKMA LETTER TAA", direction="l", linebreak="al", unicodeslot=0x11116, }, [0x11117]={ category="lo", description="CHAKMA LETTER THAA", direction="l", linebreak="al", unicodeslot=0x11117, }, [0x11118]={ category="lo", description="CHAKMA LETTER DAA", direction="l", linebreak="al", unicodeslot=0x11118, }, [0x11119]={ category="lo", description="CHAKMA LETTER DHAA", direction="l", linebreak="al", unicodeslot=0x11119, }, [0x1111A]={ category="lo", description="CHAKMA LETTER NAA", direction="l", linebreak="al", unicodeslot=0x1111A, }, [0x1111B]={ category="lo", description="CHAKMA LETTER PAA", direction="l", linebreak="al", unicodeslot=0x1111B, }, [0x1111C]={ category="lo", description="CHAKMA LETTER PHAA", direction="l", linebreak="al", unicodeslot=0x1111C, }, [0x1111D]={ category="lo", description="CHAKMA LETTER BAA", direction="l", linebreak="al", unicodeslot=0x1111D, }, [0x1111E]={ category="lo", description="CHAKMA LETTER BHAA", direction="l", linebreak="al", unicodeslot=0x1111E, }, [0x1111F]={ category="lo", description="CHAKMA LETTER MAA", direction="l", linebreak="al", unicodeslot=0x1111F, }, [0x11120]={ category="lo", description="CHAKMA LETTER YYAA", direction="l", linebreak="al", unicodeslot=0x11120, }, [0x11121]={ category="lo", description="CHAKMA LETTER YAA", direction="l", linebreak="al", unicodeslot=0x11121, }, [0x11122]={ category="lo", description="CHAKMA LETTER RAA", direction="l", linebreak="al", unicodeslot=0x11122, }, [0x11123]={ category="lo", description="CHAKMA LETTER LAA", direction="l", linebreak="al", unicodeslot=0x11123, }, [0x11124]={ category="lo", description="CHAKMA LETTER WAA", direction="l", linebreak="al", unicodeslot=0x11124, }, [0x11125]={ category="lo", description="CHAKMA LETTER SAA", direction="l", linebreak="al", unicodeslot=0x11125, }, [0x11126]={ category="lo", description="CHAKMA LETTER HAA", direction="l", linebreak="al", unicodeslot=0x11126, }, [0x11127]={ category="mn", description="CHAKMA VOWEL SIGN A", direction="nsm", linebreak="cm", unicodeslot=0x11127, }, [0x11128]={ category="mn", description="CHAKMA VOWEL SIGN I", direction="nsm", linebreak="cm", unicodeslot=0x11128, }, [0x11129]={ category="mn", description="CHAKMA VOWEL SIGN II", direction="nsm", linebreak="cm", unicodeslot=0x11129, }, [0x1112A]={ category="mn", description="CHAKMA VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x1112A, }, [0x1112B]={ category="mn", description="CHAKMA VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x1112B, }, [0x1112C]={ category="mc", description="CHAKMA VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x1112C, }, [0x1112D]={ category="mn", description="CHAKMA VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x1112D, }, [0x1112E]={ category="mn", description="CHAKMA VOWEL SIGN O", direction="nsm", linebreak="cm", specials={ "char", 0x11131, 0x11127 }, unicodeslot=0x1112E, }, [0x1112F]={ category="mn", description="CHAKMA VOWEL SIGN AU", direction="nsm", linebreak="cm", specials={ "char", 0x11132, 0x11127 }, unicodeslot=0x1112F, }, [0x11130]={ category="mn", description="CHAKMA VOWEL SIGN OI", direction="nsm", linebreak="cm", unicodeslot=0x11130, }, [0x11131]={ category="mn", description="CHAKMA O MARK", direction="nsm", linebreak="cm", unicodeslot=0x11131, }, [0x11132]={ category="mn", description="CHAKMA AU MARK", direction="nsm", linebreak="cm", unicodeslot=0x11132, }, [0x11133]={ category="mn", description="CHAKMA VIRAMA", direction="nsm", linebreak="cm", unicodeslot=0x11133, }, [0x11134]={ category="mn", description="CHAKMA MAAYYAA", direction="nsm", linebreak="cm", unicodeslot=0x11134, }, [0x11136]={ category="nd", description="CHAKMA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x11136, }, [0x11137]={ category="nd", description="CHAKMA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x11137, }, [0x11138]={ category="nd", description="CHAKMA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x11138, }, [0x11139]={ category="nd", description="CHAKMA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x11139, }, [0x1113A]={ category="nd", description="CHAKMA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x1113A, }, [0x1113B]={ category="nd", description="CHAKMA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x1113B, }, [0x1113C]={ category="nd", description="CHAKMA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x1113C, }, [0x1113D]={ category="nd", description="CHAKMA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x1113D, }, [0x1113E]={ category="nd", description="CHAKMA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x1113E, }, [0x1113F]={ category="nd", description="CHAKMA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x1113F, }, [0x11140]={ category="po", description="CHAKMA SECTION MARK", direction="l", linebreak="ba", unicodeslot=0x11140, }, [0x11141]={ category="po", description="CHAKMA DANDA", direction="l", linebreak="ba", unicodeslot=0x11141, }, [0x11142]={ category="po", description="CHAKMA DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0x11142, }, [0x11143]={ category="po", description="CHAKMA QUESTION MARK", direction="l", linebreak="ba", unicodeslot=0x11143, }, [0x11180]={ category="mn", description="SHARADA SIGN CANDRABINDU", direction="nsm", linebreak="cm", unicodeslot=0x11180, }, [0x11181]={ category="mn", description="SHARADA SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x11181, }, [0x11182]={ category="mc", description="SHARADA SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x11182, }, [0x11183]={ category="lo", description="SHARADA LETTER A", direction="l", linebreak="al", unicodeslot=0x11183, }, [0x11184]={ category="lo", description="SHARADA LETTER AA", direction="l", linebreak="al", unicodeslot=0x11184, }, [0x11185]={ category="lo", description="SHARADA LETTER I", direction="l", linebreak="al", unicodeslot=0x11185, }, [0x11186]={ category="lo", description="SHARADA LETTER II", direction="l", linebreak="al", unicodeslot=0x11186, }, [0x11187]={ category="lo", description="SHARADA LETTER U", direction="l", linebreak="al", unicodeslot=0x11187, }, [0x11188]={ category="lo", description="SHARADA LETTER UU", direction="l", linebreak="al", unicodeslot=0x11188, }, [0x11189]={ category="lo", description="SHARADA LETTER VOCALIC R", direction="l", linebreak="al", unicodeslot=0x11189, }, [0x1118A]={ category="lo", description="SHARADA LETTER VOCALIC RR", direction="l", linebreak="al", unicodeslot=0x1118A, }, [0x1118B]={ category="lo", description="SHARADA LETTER VOCALIC L", direction="l", linebreak="al", unicodeslot=0x1118B, }, [0x1118C]={ category="lo", description="SHARADA LETTER VOCALIC LL", direction="l", linebreak="al", unicodeslot=0x1118C, }, [0x1118D]={ category="lo", description="SHARADA LETTER E", direction="l", linebreak="al", unicodeslot=0x1118D, }, [0x1118E]={ category="lo", description="SHARADA LETTER AI", direction="l", linebreak="al", unicodeslot=0x1118E, }, [0x1118F]={ category="lo", description="SHARADA LETTER O", direction="l", linebreak="al", unicodeslot=0x1118F, }, [0x11190]={ category="lo", description="SHARADA LETTER AU", direction="l", linebreak="al", unicodeslot=0x11190, }, [0x11191]={ category="lo", description="SHARADA LETTER KA", direction="l", linebreak="al", unicodeslot=0x11191, }, [0x11192]={ category="lo", description="SHARADA LETTER KHA", direction="l", linebreak="al", unicodeslot=0x11192, }, [0x11193]={ category="lo", description="SHARADA LETTER GA", direction="l", linebreak="al", unicodeslot=0x11193, }, [0x11194]={ category="lo", description="SHARADA LETTER GHA", direction="l", linebreak="al", unicodeslot=0x11194, }, [0x11195]={ category="lo", description="SHARADA LETTER NGA", direction="l", linebreak="al", unicodeslot=0x11195, }, [0x11196]={ category="lo", description="SHARADA LETTER CA", direction="l", linebreak="al", unicodeslot=0x11196, }, [0x11197]={ category="lo", description="SHARADA LETTER CHA", direction="l", linebreak="al", unicodeslot=0x11197, }, [0x11198]={ category="lo", description="SHARADA LETTER JA", direction="l", linebreak="al", unicodeslot=0x11198, }, [0x11199]={ category="lo", description="SHARADA LETTER JHA", direction="l", linebreak="al", unicodeslot=0x11199, }, [0x1119A]={ category="lo", description="SHARADA LETTER NYA", direction="l", linebreak="al", unicodeslot=0x1119A, }, [0x1119B]={ category="lo", description="SHARADA LETTER TTA", direction="l", linebreak="al", unicodeslot=0x1119B, }, [0x1119C]={ category="lo", description="SHARADA LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x1119C, }, [0x1119D]={ category="lo", description="SHARADA LETTER DDA", direction="l", linebreak="al", unicodeslot=0x1119D, }, [0x1119E]={ category="lo", description="SHARADA LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x1119E, }, [0x1119F]={ category="lo", description="SHARADA LETTER NNA", direction="l", linebreak="al", unicodeslot=0x1119F, }, [0x111A0]={ category="lo", description="SHARADA LETTER TA", direction="l", linebreak="al", unicodeslot=0x111A0, }, [0x111A1]={ category="lo", description="SHARADA LETTER THA", direction="l", linebreak="al", unicodeslot=0x111A1, }, [0x111A2]={ category="lo", description="SHARADA LETTER DA", direction="l", linebreak="al", unicodeslot=0x111A2, }, [0x111A3]={ category="lo", description="SHARADA LETTER DHA", direction="l", linebreak="al", unicodeslot=0x111A3, }, [0x111A4]={ category="lo", description="SHARADA LETTER NA", direction="l", linebreak="al", unicodeslot=0x111A4, }, [0x111A5]={ category="lo", description="SHARADA LETTER PA", direction="l", linebreak="al", unicodeslot=0x111A5, }, [0x111A6]={ category="lo", description="SHARADA LETTER PHA", direction="l", linebreak="al", unicodeslot=0x111A6, }, [0x111A7]={ category="lo", description="SHARADA LETTER BA", direction="l", linebreak="al", unicodeslot=0x111A7, }, [0x111A8]={ category="lo", description="SHARADA LETTER BHA", direction="l", linebreak="al", unicodeslot=0x111A8, }, [0x111A9]={ category="lo", description="SHARADA LETTER MA", direction="l", linebreak="al", unicodeslot=0x111A9, }, [0x111AA]={ category="lo", description="SHARADA LETTER YA", direction="l", linebreak="al", unicodeslot=0x111AA, }, [0x111AB]={ category="lo", description="SHARADA LETTER RA", direction="l", linebreak="al", unicodeslot=0x111AB, }, [0x111AC]={ category="lo", description="SHARADA LETTER LA", direction="l", linebreak="al", unicodeslot=0x111AC, }, [0x111AD]={ category="lo", description="SHARADA LETTER LLA", direction="l", linebreak="al", unicodeslot=0x111AD, }, [0x111AE]={ category="lo", description="SHARADA LETTER VA", direction="l", linebreak="al", unicodeslot=0x111AE, }, [0x111AF]={ category="lo", description="SHARADA LETTER SHA", direction="l", linebreak="al", unicodeslot=0x111AF, }, [0x111B0]={ category="lo", description="SHARADA LETTER SSA", direction="l", linebreak="al", unicodeslot=0x111B0, }, [0x111B1]={ category="lo", description="SHARADA LETTER SA", direction="l", linebreak="al", unicodeslot=0x111B1, }, [0x111B2]={ category="lo", description="SHARADA LETTER HA", direction="l", linebreak="al", unicodeslot=0x111B2, }, [0x111B3]={ category="mc", description="SHARADA VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x111B3, }, [0x111B4]={ category="mc", description="SHARADA VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x111B4, }, [0x111B5]={ category="mc", description="SHARADA VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x111B5, }, [0x111B6]={ category="mn", description="SHARADA VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x111B6, }, [0x111B7]={ category="mn", description="SHARADA VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x111B7, }, [0x111B8]={ category="mn", description="SHARADA VOWEL SIGN VOCALIC R", direction="nsm", linebreak="cm", unicodeslot=0x111B8, }, [0x111B9]={ category="mn", description="SHARADA VOWEL SIGN VOCALIC RR", direction="nsm", linebreak="cm", unicodeslot=0x111B9, }, [0x111BA]={ category="mn", description="SHARADA VOWEL SIGN VOCALIC L", direction="nsm", linebreak="cm", unicodeslot=0x111BA, }, [0x111BB]={ category="mn", description="SHARADA VOWEL SIGN VOCALIC LL", direction="nsm", linebreak="cm", unicodeslot=0x111BB, }, [0x111BC]={ category="mn", description="SHARADA VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x111BC, }, [0x111BD]={ category="mn", description="SHARADA VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x111BD, }, [0x111BE]={ category="mn", description="SHARADA VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x111BE, }, [0x111BF]={ category="mc", description="SHARADA VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0x111BF, }, [0x111C0]={ category="mc", description="SHARADA SIGN VIRAMA", direction="l", linebreak="cm", unicodeslot=0x111C0, }, [0x111C1]={ category="lo", description="SHARADA SIGN AVAGRAHA", direction="l", linebreak="al", unicodeslot=0x111C1, }, [0x111C2]={ category="lo", description="SHARADA SIGN JIHVAMULIYA", direction="l", linebreak="al", unicodeslot=0x111C2, }, [0x111C3]={ category="lo", description="SHARADA SIGN UPADHMANIYA", direction="l", linebreak="al", unicodeslot=0x111C3, }, [0x111C4]={ category="lo", description="SHARADA OM", direction="l", linebreak="al", unicodeslot=0x111C4, }, [0x111C5]={ category="po", description="SHARADA DANDA", direction="l", linebreak="ba", unicodeslot=0x111C5, }, [0x111C6]={ category="po", description="SHARADA DOUBLE DANDA", direction="l", linebreak="ba", unicodeslot=0x111C6, }, [0x111C7]={ category="po", description="SHARADA ABBREVIATION SIGN", direction="l", linebreak="al", unicodeslot=0x111C7, }, [0x111C8]={ category="po", description="SHARADA SEPARATOR", direction="l", linebreak="ba", unicodeslot=0x111C8, }, [0x111D0]={ category="nd", description="SHARADA DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x111D0, }, [0x111D1]={ category="nd", description="SHARADA DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x111D1, }, [0x111D2]={ category="nd", description="SHARADA DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x111D2, }, [0x111D3]={ category="nd", description="SHARADA DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x111D3, }, [0x111D4]={ category="nd", description="SHARADA DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x111D4, }, [0x111D5]={ category="nd", description="SHARADA DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x111D5, }, [0x111D6]={ category="nd", description="SHARADA DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x111D6, }, [0x111D7]={ category="nd", description="SHARADA DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x111D7, }, [0x111D8]={ category="nd", description="SHARADA DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x111D8, }, [0x111D9]={ category="nd", description="SHARADA DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x111D9, }, [0x11680]={ category="lo", description="TAKRI LETTER A", direction="l", linebreak="al", unicodeslot=0x11680, }, [0x11681]={ category="lo", description="TAKRI LETTER AA", direction="l", linebreak="al", unicodeslot=0x11681, }, [0x11682]={ category="lo", description="TAKRI LETTER I", direction="l", linebreak="al", unicodeslot=0x11682, }, [0x11683]={ category="lo", description="TAKRI LETTER II", direction="l", linebreak="al", unicodeslot=0x11683, }, [0x11684]={ category="lo", description="TAKRI LETTER U", direction="l", linebreak="al", unicodeslot=0x11684, }, [0x11685]={ category="lo", description="TAKRI LETTER UU", direction="l", linebreak="al", unicodeslot=0x11685, }, [0x11686]={ category="lo", description="TAKRI LETTER E", direction="l", linebreak="al", unicodeslot=0x11686, }, [0x11687]={ category="lo", description="TAKRI LETTER AI", direction="l", linebreak="al", unicodeslot=0x11687, }, [0x11688]={ category="lo", description="TAKRI LETTER O", direction="l", linebreak="al", unicodeslot=0x11688, }, [0x11689]={ category="lo", description="TAKRI LETTER AU", direction="l", linebreak="al", unicodeslot=0x11689, }, [0x1168A]={ category="lo", description="TAKRI LETTER KA", direction="l", linebreak="al", unicodeslot=0x1168A, }, [0x1168B]={ category="lo", description="TAKRI LETTER KHA", direction="l", linebreak="al", unicodeslot=0x1168B, }, [0x1168C]={ category="lo", description="TAKRI LETTER GA", direction="l", linebreak="al", unicodeslot=0x1168C, }, [0x1168D]={ category="lo", description="TAKRI LETTER GHA", direction="l", linebreak="al", unicodeslot=0x1168D, }, [0x1168E]={ category="lo", description="TAKRI LETTER NGA", direction="l", linebreak="al", unicodeslot=0x1168E, }, [0x1168F]={ category="lo", description="TAKRI LETTER CA", direction="l", linebreak="al", unicodeslot=0x1168F, }, [0x11690]={ category="lo", description="TAKRI LETTER CHA", direction="l", linebreak="al", unicodeslot=0x11690, }, [0x11691]={ category="lo", description="TAKRI LETTER JA", direction="l", linebreak="al", unicodeslot=0x11691, }, [0x11692]={ category="lo", description="TAKRI LETTER JHA", direction="l", linebreak="al", unicodeslot=0x11692, }, [0x11693]={ category="lo", description="TAKRI LETTER NYA", direction="l", linebreak="al", unicodeslot=0x11693, }, [0x11694]={ category="lo", description="TAKRI LETTER TTA", direction="l", linebreak="al", unicodeslot=0x11694, }, [0x11695]={ category="lo", description="TAKRI LETTER TTHA", direction="l", linebreak="al", unicodeslot=0x11695, }, [0x11696]={ category="lo", description="TAKRI LETTER DDA", direction="l", linebreak="al", unicodeslot=0x11696, }, [0x11697]={ category="lo", description="TAKRI LETTER DDHA", direction="l", linebreak="al", unicodeslot=0x11697, }, [0x11698]={ category="lo", description="TAKRI LETTER NNA", direction="l", linebreak="al", unicodeslot=0x11698, }, [0x11699]={ category="lo", description="TAKRI LETTER TA", direction="l", linebreak="al", unicodeslot=0x11699, }, [0x1169A]={ category="lo", description="TAKRI LETTER THA", direction="l", linebreak="al", unicodeslot=0x1169A, }, [0x1169B]={ category="lo", description="TAKRI LETTER DA", direction="l", linebreak="al", unicodeslot=0x1169B, }, [0x1169C]={ category="lo", description="TAKRI LETTER DHA", direction="l", linebreak="al", unicodeslot=0x1169C, }, [0x1169D]={ category="lo", description="TAKRI LETTER NA", direction="l", linebreak="al", unicodeslot=0x1169D, }, [0x1169E]={ category="lo", description="TAKRI LETTER PA", direction="l", linebreak="al", unicodeslot=0x1169E, }, [0x1169F]={ category="lo", description="TAKRI LETTER PHA", direction="l", linebreak="al", unicodeslot=0x1169F, }, [0x116A0]={ category="lo", description="TAKRI LETTER BA", direction="l", linebreak="al", unicodeslot=0x116A0, }, [0x116A1]={ category="lo", description="TAKRI LETTER BHA", direction="l", linebreak="al", unicodeslot=0x116A1, }, [0x116A2]={ category="lo", description="TAKRI LETTER MA", direction="l", linebreak="al", unicodeslot=0x116A2, }, [0x116A3]={ category="lo", description="TAKRI LETTER YA", direction="l", linebreak="al", unicodeslot=0x116A3, }, [0x116A4]={ category="lo", description="TAKRI LETTER RA", direction="l", linebreak="al", unicodeslot=0x116A4, }, [0x116A5]={ category="lo", description="TAKRI LETTER LA", direction="l", linebreak="al", unicodeslot=0x116A5, }, [0x116A6]={ category="lo", description="TAKRI LETTER VA", direction="l", linebreak="al", unicodeslot=0x116A6, }, [0x116A7]={ category="lo", description="TAKRI LETTER SHA", direction="l", linebreak="al", unicodeslot=0x116A7, }, [0x116A8]={ category="lo", description="TAKRI LETTER SA", direction="l", linebreak="al", unicodeslot=0x116A8, }, [0x116A9]={ category="lo", description="TAKRI LETTER HA", direction="l", linebreak="al", unicodeslot=0x116A9, }, [0x116AA]={ category="lo", description="TAKRI LETTER RRA", direction="l", linebreak="al", unicodeslot=0x116AA, }, [0x116AB]={ category="mn", description="TAKRI SIGN ANUSVARA", direction="nsm", linebreak="cm", unicodeslot=0x116AB, }, [0x116AC]={ category="mc", description="TAKRI SIGN VISARGA", direction="l", linebreak="cm", unicodeslot=0x116AC, }, [0x116AD]={ category="mn", description="TAKRI VOWEL SIGN AA", direction="nsm", linebreak="cm", unicodeslot=0x116AD, }, [0x116AE]={ category="mc", description="TAKRI VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x116AE, }, [0x116AF]={ category="mc", description="TAKRI VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x116AF, }, [0x116B0]={ category="mn", description="TAKRI VOWEL SIGN U", direction="nsm", linebreak="cm", unicodeslot=0x116B0, }, [0x116B1]={ category="mn", description="TAKRI VOWEL SIGN UU", direction="nsm", linebreak="cm", unicodeslot=0x116B1, }, [0x116B2]={ category="mn", description="TAKRI VOWEL SIGN E", direction="nsm", linebreak="cm", unicodeslot=0x116B2, }, [0x116B3]={ category="mn", description="TAKRI VOWEL SIGN AI", direction="nsm", linebreak="cm", unicodeslot=0x116B3, }, [0x116B4]={ category="mn", description="TAKRI VOWEL SIGN O", direction="nsm", linebreak="cm", unicodeslot=0x116B4, }, [0x116B5]={ category="mn", description="TAKRI VOWEL SIGN AU", direction="nsm", linebreak="cm", unicodeslot=0x116B5, }, [0x116B6]={ category="mc", description="TAKRI SIGN VIRAMA", direction="l", linebreak="cm", unicodeslot=0x116B6, }, [0x116B7]={ category="mn", description="TAKRI SIGN NUKTA", direction="nsm", linebreak="cm", unicodeslot=0x116B7, }, [0x116C0]={ category="nd", description="TAKRI DIGIT ZERO", direction="l", linebreak="nu", unicodeslot=0x116C0, }, [0x116C1]={ category="nd", description="TAKRI DIGIT ONE", direction="l", linebreak="nu", unicodeslot=0x116C1, }, [0x116C2]={ category="nd", description="TAKRI DIGIT TWO", direction="l", linebreak="nu", unicodeslot=0x116C2, }, [0x116C3]={ category="nd", description="TAKRI DIGIT THREE", direction="l", linebreak="nu", unicodeslot=0x116C3, }, [0x116C4]={ category="nd", description="TAKRI DIGIT FOUR", direction="l", linebreak="nu", unicodeslot=0x116C4, }, [0x116C5]={ category="nd", description="TAKRI DIGIT FIVE", direction="l", linebreak="nu", unicodeslot=0x116C5, }, [0x116C6]={ category="nd", description="TAKRI DIGIT SIX", direction="l", linebreak="nu", unicodeslot=0x116C6, }, [0x116C7]={ category="nd", description="TAKRI DIGIT SEVEN", direction="l", linebreak="nu", unicodeslot=0x116C7, }, [0x116C8]={ category="nd", description="TAKRI DIGIT EIGHT", direction="l", linebreak="nu", unicodeslot=0x116C8, }, [0x116C9]={ category="nd", description="TAKRI DIGIT NINE", direction="l", linebreak="nu", unicodeslot=0x116C9, }, [0x12000]={ category="lo", description="CUNEIFORM SIGN A", direction="l", linebreak="al", unicodeslot=0x12000, }, [0x12001]={ category="lo", description="CUNEIFORM SIGN A TIMES A", direction="l", linebreak="al", unicodeslot=0x12001, }, [0x12002]={ category="lo", description="CUNEIFORM SIGN A TIMES BAD", direction="l", linebreak="al", unicodeslot=0x12002, }, [0x12003]={ category="lo", description="CUNEIFORM SIGN A TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12003, }, [0x12004]={ category="lo", description="CUNEIFORM SIGN A TIMES HA", direction="l", linebreak="al", unicodeslot=0x12004, }, [0x12005]={ category="lo", description="CUNEIFORM SIGN A TIMES IGI", direction="l", linebreak="al", unicodeslot=0x12005, }, [0x12006]={ category="lo", description="CUNEIFORM SIGN A TIMES LAGAR GUNU", direction="l", linebreak="al", unicodeslot=0x12006, }, [0x12007]={ category="lo", description="CUNEIFORM SIGN A TIMES MUSH", direction="l", linebreak="al", unicodeslot=0x12007, }, [0x12008]={ category="lo", description="CUNEIFORM SIGN A TIMES SAG", direction="l", linebreak="al", unicodeslot=0x12008, }, [0x12009]={ category="lo", description="CUNEIFORM SIGN A0x0002", direction="l", linebreak="al", unicodeslot=0x12009, }, [0x1200A]={ category="lo", description="CUNEIFORM SIGN AB", direction="l", linebreak="al", unicodeslot=0x1200A, }, [0x1200B]={ category="lo", description="CUNEIFORM SIGN AB TIMES ASH0x0002", direction="l", linebreak="al", unicodeslot=0x1200B, }, [0x1200C]={ category="lo", description="CUNEIFORM SIGN AB TIMES DUN0x0003 GUNU", direction="l", linebreak="al", unicodeslot=0x1200C, }, [0x1200D]={ category="lo", description="CUNEIFORM SIGN AB TIMES GAL", direction="l", linebreak="al", unicodeslot=0x1200D, }, [0x1200E]={ category="lo", description="CUNEIFORM SIGN AB TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x1200E, }, [0x1200F]={ category="lo", description="CUNEIFORM SIGN AB TIMES HA", direction="l", linebreak="al", unicodeslot=0x1200F, }, [0x12010]={ category="lo", description="CUNEIFORM SIGN AB TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x12010, }, [0x12011]={ category="lo", description="CUNEIFORM SIGN AB TIMES IMIN", direction="l", linebreak="al", unicodeslot=0x12011, }, [0x12012]={ category="lo", description="CUNEIFORM SIGN AB TIMES LAGAB", direction="l", linebreak="al", unicodeslot=0x12012, }, [0x12013]={ category="lo", description="CUNEIFORM SIGN AB TIMES SHESH", direction="l", linebreak="al", unicodeslot=0x12013, }, [0x12014]={ category="lo", description="CUNEIFORM SIGN AB TIMES U PLUS U PLUS U", direction="l", linebreak="al", unicodeslot=0x12014, }, [0x12015]={ category="lo", description="CUNEIFORM SIGN AB GUNU", direction="l", linebreak="al", unicodeslot=0x12015, }, [0x12016]={ category="lo", description="CUNEIFORM SIGN AB0x0002", direction="l", linebreak="al", unicodeslot=0x12016, }, [0x12017]={ category="lo", description="CUNEIFORM SIGN AB0x0002 TIMES BALAG", direction="l", linebreak="al", unicodeslot=0x12017, }, [0x12018]={ category="lo", description="CUNEIFORM SIGN AB0x0002 TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12018, }, [0x12019]={ category="lo", description="CUNEIFORM SIGN AB0x0002 TIMES ME PLUS EN", direction="l", linebreak="al", unicodeslot=0x12019, }, [0x1201A]={ category="lo", description="CUNEIFORM SIGN AB0x0002 TIMES SHA0x0003", direction="l", linebreak="al", unicodeslot=0x1201A, }, [0x1201B]={ category="lo", description="CUNEIFORM SIGN AB0x0002 TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x1201B, }, [0x1201C]={ category="lo", description="CUNEIFORM SIGN AD", direction="l", linebreak="al", unicodeslot=0x1201C, }, [0x1201D]={ category="lo", description="CUNEIFORM SIGN AK", direction="l", linebreak="al", unicodeslot=0x1201D, }, [0x1201E]={ category="lo", description="CUNEIFORM SIGN AK TIMES ERIN0x0002", direction="l", linebreak="al", unicodeslot=0x1201E, }, [0x1201F]={ category="lo", description="CUNEIFORM SIGN AK TIMES SHITA PLUS GISH", direction="l", linebreak="al", unicodeslot=0x1201F, }, [0x12020]={ category="lo", description="CUNEIFORM SIGN AL", direction="l", linebreak="al", unicodeslot=0x12020, }, [0x12021]={ category="lo", description="CUNEIFORM SIGN AL TIMES AL", direction="l", linebreak="al", unicodeslot=0x12021, }, [0x12022]={ category="lo", description="CUNEIFORM SIGN AL TIMES DIM0x0002", direction="l", linebreak="al", unicodeslot=0x12022, }, [0x12023]={ category="lo", description="CUNEIFORM SIGN AL TIMES GISH", direction="l", linebreak="al", unicodeslot=0x12023, }, [0x12024]={ category="lo", description="CUNEIFORM SIGN AL TIMES HA", direction="l", linebreak="al", unicodeslot=0x12024, }, [0x12025]={ category="lo", description="CUNEIFORM SIGN AL TIMES KAD0x0003", direction="l", linebreak="al", unicodeslot=0x12025, }, [0x12026]={ category="lo", description="CUNEIFORM SIGN AL TIMES KI", direction="l", linebreak="al", unicodeslot=0x12026, }, [0x12027]={ category="lo", description="CUNEIFORM SIGN AL TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12027, }, [0x12028]={ category="lo", description="CUNEIFORM SIGN AL TIMES USH", direction="l", linebreak="al", unicodeslot=0x12028, }, [0x12029]={ category="lo", description="CUNEIFORM SIGN ALAN", direction="l", linebreak="al", unicodeslot=0x12029, }, [0x1202A]={ category="lo", description="CUNEIFORM SIGN ALEPH", direction="l", linebreak="al", unicodeslot=0x1202A, }, [0x1202B]={ category="lo", description="CUNEIFORM SIGN AMAR", direction="l", linebreak="al", unicodeslot=0x1202B, }, [0x1202C]={ category="lo", description="CUNEIFORM SIGN AMAR TIMES SHE", direction="l", linebreak="al", unicodeslot=0x1202C, }, [0x1202D]={ category="lo", description="CUNEIFORM SIGN AN", direction="l", linebreak="al", unicodeslot=0x1202D, }, [0x1202E]={ category="lo", description="CUNEIFORM SIGN AN OVER AN", direction="l", linebreak="al", unicodeslot=0x1202E, }, [0x1202F]={ category="lo", description="CUNEIFORM SIGN AN THREE TIMES", direction="l", linebreak="al", unicodeslot=0x1202F, }, [0x12030]={ category="lo", description="CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA", direction="l", linebreak="al", unicodeslot=0x12030, }, [0x12031]={ category="lo", description="CUNEIFORM SIGN AN PLUS NAGA SQUARED", direction="l", linebreak="al", unicodeslot=0x12031, }, [0x12032]={ category="lo", description="CUNEIFORM SIGN ANSHE", direction="l", linebreak="al", unicodeslot=0x12032, }, [0x12033]={ category="lo", description="CUNEIFORM SIGN APIN", direction="l", linebreak="al", unicodeslot=0x12033, }, [0x12034]={ category="lo", description="CUNEIFORM SIGN ARAD", direction="l", linebreak="al", unicodeslot=0x12034, }, [0x12035]={ category="lo", description="CUNEIFORM SIGN ARAD TIMES KUR", direction="l", linebreak="al", mathclass="ordinary", mathname="backprime", unicodeslot=0x12035, }, [0x12036]={ category="lo", description="CUNEIFORM SIGN ARKAB", direction="l", linebreak="al", unicodeslot=0x12036, }, [0x12037]={ category="lo", description="CUNEIFORM SIGN ASAL0x0002", direction="l", linebreak="al", unicodeslot=0x12037, }, [0x12038]={ category="lo", description="CUNEIFORM SIGN ASH", direction="l", linebreak="al", unicodeslot=0x12038, }, [0x12039]={ category="lo", description="CUNEIFORM SIGN ASH ZIDA TENU", direction="l", linebreak="al", unicodeslot=0x12039, }, [0x1203A]={ category="lo", description="CUNEIFORM SIGN ASH KABA TENU", direction="l", linebreak="al", unicodeslot=0x1203A, }, [0x1203B]={ category="lo", description="CUNEIFORM SIGN ASH OVER ASH TUG0x0002 OVER TUG0x0002 TUG0x0002 OVER TUG0x0002 PAP", direction="l", linebreak="al", unicodeslot=0x1203B, }, [0x1203C]={ category="lo", description="CUNEIFORM SIGN ASH OVER ASH OVER ASH", direction="l", linebreak="al", unicodeslot=0x1203C, }, [0x1203D]={ category="lo", description="CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH", direction="l", linebreak="al", unicodeslot=0x1203D, }, [0x1203E]={ category="lo", description="CUNEIFORM SIGN ASH0x0002", direction="l", linebreak="al", unicodeslot=0x1203E, }, [0x1203F]={ category="lo", description="CUNEIFORM SIGN ASHGAB", direction="l", linebreak="al", unicodeslot=0x1203F, }, [0x12040]={ category="lo", description="CUNEIFORM SIGN BA", direction="l", linebreak="al", unicodeslot=0x12040, }, [0x12041]={ category="lo", description="CUNEIFORM SIGN BAD", direction="l", linebreak="al", unicodeslot=0x12041, }, [0x12042]={ category="lo", description="CUNEIFORM SIGN BAG0x0003", direction="l", linebreak="al", unicodeslot=0x12042, }, [0x12043]={ category="lo", description="CUNEIFORM SIGN BAHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12043, }, [0x12044]={ category="lo", description="CUNEIFORM SIGN BAL", direction="l", linebreak="al", unicodeslot=0x12044, }, [0x12045]={ category="lo", description="CUNEIFORM SIGN BAL OVER BAL", direction="l", linebreak="al", unicodeslot=0x12045, }, [0x12046]={ category="lo", description="CUNEIFORM SIGN BALAG", direction="l", linebreak="al", unicodeslot=0x12046, }, [0x12047]={ category="lo", description="CUNEIFORM SIGN BAR", direction="l", linebreak="al", unicodeslot=0x12047, }, [0x12048]={ category="lo", description="CUNEIFORM SIGN BARA0x0002", direction="l", linebreak="al", unicodeslot=0x12048, }, [0x12049]={ category="lo", description="CUNEIFORM SIGN BI", direction="l", linebreak="al", unicodeslot=0x12049, }, [0x1204A]={ category="lo", description="CUNEIFORM SIGN BI TIMES A", direction="l", linebreak="al", unicodeslot=0x1204A, }, [0x1204B]={ category="lo", description="CUNEIFORM SIGN BI TIMES GAR", direction="l", linebreak="al", unicodeslot=0x1204B, }, [0x1204C]={ category="lo", description="CUNEIFORM SIGN BI TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x1204C, }, [0x1204D]={ category="lo", description="CUNEIFORM SIGN BU", direction="l", linebreak="al", unicodeslot=0x1204D, }, [0x1204E]={ category="lo", description="CUNEIFORM SIGN BU OVER BU AB", direction="l", linebreak="al", unicodeslot=0x1204E, }, [0x1204F]={ category="lo", description="CUNEIFORM SIGN BU OVER BU UN", direction="l", linebreak="al", unicodeslot=0x1204F, }, [0x12050]={ category="lo", description="CUNEIFORM SIGN BU CROSSING BU", direction="l", linebreak="al", unicodeslot=0x12050, }, [0x12051]={ category="lo", description="CUNEIFORM SIGN BULUG", direction="l", linebreak="al", unicodeslot=0x12051, }, [0x12052]={ category="lo", description="CUNEIFORM SIGN BULUG OVER BULUG", direction="l", linebreak="al", unicodeslot=0x12052, }, [0x12053]={ category="lo", description="CUNEIFORM SIGN BUR", direction="l", linebreak="al", unicodeslot=0x12053, }, [0x12054]={ category="lo", description="CUNEIFORM SIGN BUR0x0002", direction="l", linebreak="al", unicodeslot=0x12054, }, [0x12055]={ category="lo", description="CUNEIFORM SIGN DA", direction="l", linebreak="al", unicodeslot=0x12055, }, [0x12056]={ category="lo", description="CUNEIFORM SIGN DAG", direction="l", linebreak="al", unicodeslot=0x12056, }, [0x12057]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES A PLUS MASH", direction="l", linebreak="al", unicodeslot=0x12057, }, [0x12058]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES AMAR", direction="l", linebreak="al", unicodeslot=0x12058, }, [0x12059]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES BALAG", direction="l", linebreak="al", unicodeslot=0x12059, }, [0x1205A]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES BI", direction="l", linebreak="al", unicodeslot=0x1205A, }, [0x1205B]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GA", direction="l", linebreak="al", unicodeslot=0x1205B, }, [0x1205C]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GA PLUS MASH", direction="l", linebreak="al", unicodeslot=0x1205C, }, [0x1205D]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GI", direction="l", linebreak="al", unicodeslot=0x1205D, }, [0x1205E]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GIR0x0002", direction="l", linebreak="al", unicodeslot=0x1205E, }, [0x1205F]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GUD", direction="l", linebreak="al", unicodeslot=0x1205F, }, [0x12060]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES HA", direction="l", linebreak="al", unicodeslot=0x12060, }, [0x12061]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES IR", direction="l", linebreak="al", unicodeslot=0x12061, }, [0x12062]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES IR PLUS LU", direction="l", linebreak="al", unicodeslot=0x12062, }, [0x12063]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES KAK", direction="l", linebreak="al", unicodeslot=0x12063, }, [0x12064]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LA", direction="l", linebreak="al", unicodeslot=0x12064, }, [0x12065]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LU", direction="l", linebreak="al", unicodeslot=0x12065, }, [0x12066]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LU PLUS MASH0x0002", direction="l", linebreak="al", unicodeslot=0x12066, }, [0x12067]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LUM", direction="l", linebreak="al", unicodeslot=0x12067, }, [0x12068]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES NE", direction="l", linebreak="al", unicodeslot=0x12068, }, [0x12069]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES PAP PLUS PAP", direction="l", linebreak="al", unicodeslot=0x12069, }, [0x1206A]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES SI", direction="l", linebreak="al", unicodeslot=0x1206A, }, [0x1206B]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x1206B, }, [0x1206C]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES U0x0002 PLUS GIR0x0002", direction="l", linebreak="al", unicodeslot=0x1206C, }, [0x1206D]={ category="lo", description="CUNEIFORM SIGN DAG KISIM0x0005 TIMES USH", direction="l", linebreak="al", unicodeslot=0x1206D, }, [0x1206E]={ category="lo", description="CUNEIFORM SIGN DAM", direction="l", linebreak="al", unicodeslot=0x1206E, }, [0x1206F]={ category="lo", description="CUNEIFORM SIGN DAR", direction="l", linebreak="al", unicodeslot=0x1206F, }, [0x12070]={ category="lo", description="CUNEIFORM SIGN DARA0x0003", direction="l", linebreak="al", unicodeslot=0x12070, }, [0x12071]={ category="lo", description="CUNEIFORM SIGN DARA0x0004", direction="l", linebreak="al", unicodeslot=0x12071, }, [0x12072]={ category="lo", description="CUNEIFORM SIGN DI", direction="l", linebreak="al", unicodeslot=0x12072, }, [0x12073]={ category="lo", description="CUNEIFORM SIGN DIB", direction="l", linebreak="al", unicodeslot=0x12073, }, [0x12074]={ category="lo", description="CUNEIFORM SIGN DIM", direction="l", linebreak="al", unicodeslot=0x12074, }, [0x12075]={ category="lo", description="CUNEIFORM SIGN DIM TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12075, }, [0x12076]={ category="lo", description="CUNEIFORM SIGN DIM0x0002", direction="l", linebreak="al", unicodeslot=0x12076, }, [0x12077]={ category="lo", description="CUNEIFORM SIGN DIN", direction="l", linebreak="al", unicodeslot=0x12077, }, [0x12078]={ category="lo", description="CUNEIFORM SIGN DIN KASKAL U GUNU DISH", direction="l", linebreak="al", unicodeslot=0x12078, }, [0x12079]={ category="lo", description="CUNEIFORM SIGN DISH", direction="l", linebreak="al", unicodeslot=0x12079, }, [0x1207A]={ category="lo", description="CUNEIFORM SIGN DU", direction="l", linebreak="al", unicodeslot=0x1207A, }, [0x1207B]={ category="lo", description="CUNEIFORM SIGN DU OVER DU", direction="l", linebreak="al", unicodeslot=0x1207B, }, [0x1207C]={ category="lo", description="CUNEIFORM SIGN DU GUNU", direction="l", linebreak="al", unicodeslot=0x1207C, }, [0x1207D]={ category="lo", description="CUNEIFORM SIGN DU SHESHIG", direction="l", linebreak="al", unicodeslot=0x1207D, }, [0x1207E]={ category="lo", description="CUNEIFORM SIGN DUB", direction="l", linebreak="al", unicodeslot=0x1207E, }, [0x1207F]={ category="lo", description="CUNEIFORM SIGN DUB TIMES ESH0x0002", direction="l", linebreak="al", unicodeslot=0x1207F, }, [0x12080]={ category="lo", description="CUNEIFORM SIGN DUB0x0002", direction="l", linebreak="al", unicodeslot=0x12080, }, [0x12081]={ category="lo", description="CUNEIFORM SIGN DUG", direction="l", linebreak="al", unicodeslot=0x12081, }, [0x12082]={ category="lo", description="CUNEIFORM SIGN DUGUD", direction="l", linebreak="al", unicodeslot=0x12082, }, [0x12083]={ category="lo", description="CUNEIFORM SIGN DUH", direction="l", linebreak="al", unicodeslot=0x12083, }, [0x12084]={ category="lo", description="CUNEIFORM SIGN DUN", direction="l", linebreak="al", unicodeslot=0x12084, }, [0x12085]={ category="lo", description="CUNEIFORM SIGN DUN0x0003", direction="l", linebreak="al", unicodeslot=0x12085, }, [0x12086]={ category="lo", description="CUNEIFORM SIGN DUN0x0003 GUNU", direction="l", linebreak="al", unicodeslot=0x12086, }, [0x12087]={ category="lo", description="CUNEIFORM SIGN DUN0x0003 GUNU GUNU", direction="l", linebreak="al", unicodeslot=0x12087, }, [0x12088]={ category="lo", description="CUNEIFORM SIGN DUN0x0004", direction="l", linebreak="al", unicodeslot=0x12088, }, [0x12089]={ category="lo", description="CUNEIFORM SIGN DUR0x0002", direction="l", linebreak="al", unicodeslot=0x12089, }, [0x1208A]={ category="lo", description="CUNEIFORM SIGN E", direction="l", linebreak="al", unicodeslot=0x1208A, }, [0x1208B]={ category="lo", description="CUNEIFORM SIGN E TIMES PAP", direction="l", linebreak="al", unicodeslot=0x1208B, }, [0x1208C]={ category="lo", description="CUNEIFORM SIGN E OVER E NUN OVER NUN", direction="l", linebreak="al", unicodeslot=0x1208C, }, [0x1208D]={ category="lo", description="CUNEIFORM SIGN E0x0002", direction="l", linebreak="al", unicodeslot=0x1208D, }, [0x1208E]={ category="lo", description="CUNEIFORM SIGN E0x0002 TIMES A PLUS HA PLUS DA", direction="l", linebreak="al", unicodeslot=0x1208E, }, [0x1208F]={ category="lo", description="CUNEIFORM SIGN E0x0002 TIMES GAR", direction="l", linebreak="al", unicodeslot=0x1208F, }, [0x12090]={ category="lo", description="CUNEIFORM SIGN E0x0002 TIMES MI", direction="l", linebreak="al", unicodeslot=0x12090, }, [0x12091]={ category="lo", description="CUNEIFORM SIGN E0x0002 TIMES SAL", direction="l", linebreak="al", unicodeslot=0x12091, }, [0x12092]={ category="lo", description="CUNEIFORM SIGN E0x0002 TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12092, }, [0x12093]={ category="lo", description="CUNEIFORM SIGN E0x0002 TIMES U", direction="l", linebreak="al", unicodeslot=0x12093, }, [0x12094]={ category="lo", description="CUNEIFORM SIGN EDIN", direction="l", linebreak="al", unicodeslot=0x12094, }, [0x12095]={ category="lo", description="CUNEIFORM SIGN EGIR", direction="l", linebreak="al", unicodeslot=0x12095, }, [0x12096]={ category="lo", description="CUNEIFORM SIGN EL", direction="l", linebreak="al", unicodeslot=0x12096, }, [0x12097]={ category="lo", description="CUNEIFORM SIGN EN", direction="l", linebreak="al", unicodeslot=0x12097, }, [0x12098]={ category="lo", description="CUNEIFORM SIGN EN TIMES GAN0x0002", direction="l", linebreak="al", unicodeslot=0x12098, }, [0x12099]={ category="lo", description="CUNEIFORM SIGN EN TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12099, }, [0x1209A]={ category="lo", description="CUNEIFORM SIGN EN TIMES ME", direction="l", linebreak="al", unicodeslot=0x1209A, }, [0x1209B]={ category="lo", description="CUNEIFORM SIGN EN CROSSING EN", direction="l", linebreak="al", unicodeslot=0x1209B, }, [0x1209C]={ category="lo", description="CUNEIFORM SIGN EN OPPOSING EN", direction="l", linebreak="al", unicodeslot=0x1209C, }, [0x1209D]={ category="lo", description="CUNEIFORM SIGN EN SQUARED", direction="l", linebreak="al", unicodeslot=0x1209D, }, [0x1209E]={ category="lo", description="CUNEIFORM SIGN EREN", direction="l", linebreak="al", unicodeslot=0x1209E, }, [0x1209F]={ category="lo", description="CUNEIFORM SIGN ERIN0x0002", direction="l", linebreak="al", unicodeslot=0x1209F, }, [0x120A0]={ category="lo", description="CUNEIFORM SIGN ESH0x0002", direction="l", linebreak="al", unicodeslot=0x120A0, }, [0x120A1]={ category="lo", description="CUNEIFORM SIGN EZEN", direction="l", linebreak="al", unicodeslot=0x120A1, }, [0x120A2]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES A", direction="l", linebreak="al", unicodeslot=0x120A2, }, [0x120A3]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES A PLUS LAL", direction="l", linebreak="al", unicodeslot=0x120A3, }, [0x120A4]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL", direction="l", linebreak="al", unicodeslot=0x120A4, }, [0x120A5]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES AN", direction="l", linebreak="al", unicodeslot=0x120A5, }, [0x120A6]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES BAD", direction="l", linebreak="al", unicodeslot=0x120A6, }, [0x120A7]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES DUN0x0003 GUNU", direction="l", linebreak="al", unicodeslot=0x120A7, }, [0x120A8]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES DUN0x0003 GUNU GUNU", direction="l", linebreak="al", unicodeslot=0x120A8, }, [0x120A9]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES HA", direction="l", linebreak="al", unicodeslot=0x120A9, }, [0x120AA]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES HA GUNU", direction="l", linebreak="al", unicodeslot=0x120AA, }, [0x120AB]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x120AB, }, [0x120AC]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES KASKAL", direction="l", linebreak="al", unicodeslot=0x120AC, }, [0x120AD]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED", direction="l", linebreak="al", unicodeslot=0x120AD, }, [0x120AE]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES KU0x0003", direction="l", linebreak="al", unicodeslot=0x120AE, }, [0x120AF]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES LA", direction="l", linebreak="al", unicodeslot=0x120AF, }, [0x120B0]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL", direction="l", linebreak="al", unicodeslot=0x120B0, }, [0x120B1]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES LI", direction="l", linebreak="al", unicodeslot=0x120B1, }, [0x120B2]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES LU", direction="l", linebreak="al", unicodeslot=0x120B2, }, [0x120B3]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES U0x0002", direction="l", linebreak="al", unicodeslot=0x120B3, }, [0x120B4]={ category="lo", description="CUNEIFORM SIGN EZEN TIMES UD", direction="l", linebreak="al", unicodeslot=0x120B4, }, [0x120B5]={ category="lo", description="CUNEIFORM SIGN GA", direction="l", linebreak="al", unicodeslot=0x120B5, }, [0x120B6]={ category="lo", description="CUNEIFORM SIGN GA GUNU", direction="l", linebreak="al", unicodeslot=0x120B6, }, [0x120B7]={ category="lo", description="CUNEIFORM SIGN GA0x0002", direction="l", linebreak="al", unicodeslot=0x120B7, }, [0x120B8]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES A PLUS DA PLUS HA", direction="l", linebreak="al", unicodeslot=0x120B8, }, [0x120B9]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES A PLUS HA", direction="l", linebreak="al", unicodeslot=0x120B9, }, [0x120BA]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES A PLUS IGI", direction="l", linebreak="al", unicodeslot=0x120BA, }, [0x120BB]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES AB0x0002 TENU PLUS TAB", direction="l", linebreak="al", unicodeslot=0x120BB, }, [0x120BC]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES AN", direction="l", linebreak="al", unicodeslot=0x120BC, }, [0x120BD]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES ASH", direction="l", linebreak="al", unicodeslot=0x120BD, }, [0x120BE]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES ASH0x0002 PLUS GAL", direction="l", linebreak="al", unicodeslot=0x120BE, }, [0x120BF]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES BAD", direction="l", linebreak="al", unicodeslot=0x120BF, }, [0x120C0]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES BAR PLUS RA", direction="l", linebreak="al", unicodeslot=0x120C0, }, [0x120C1]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES BUR", direction="l", linebreak="al", unicodeslot=0x120C1, }, [0x120C2]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES BUR PLUS RA", direction="l", linebreak="al", unicodeslot=0x120C2, }, [0x120C3]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES DA", direction="l", linebreak="al", unicodeslot=0x120C3, }, [0x120C4]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES DI", direction="l", linebreak="al", unicodeslot=0x120C4, }, [0x120C5]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES DIM TIMES SHE", direction="l", linebreak="al", unicodeslot=0x120C5, }, [0x120C6]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES DUB", direction="l", linebreak="al", unicodeslot=0x120C6, }, [0x120C7]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES EL", direction="l", linebreak="al", unicodeslot=0x120C7, }, [0x120C8]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES EL PLUS LA", direction="l", linebreak="al", unicodeslot=0x120C8, }, [0x120C9]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES EN", direction="l", linebreak="al", unicodeslot=0x120C9, }, [0x120CA]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES EN TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x120CA, }, [0x120CB]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x120CB, }, [0x120CC]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES GAR", direction="l", linebreak="al", unicodeslot=0x120CC, }, [0x120CD]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES GI", direction="l", linebreak="al", unicodeslot=0x120CD, }, [0x120CE]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES GI0x0004", direction="l", linebreak="al", unicodeslot=0x120CE, }, [0x120CF]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES GI0x0004 PLUS A", direction="l", linebreak="al", unicodeslot=0x120CF, }, [0x120D0]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES GIR0x0002 PLUS SU", direction="l", linebreak="al", unicodeslot=0x120D0, }, [0x120D1]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES HA PLUS LU PLUS ESH0x0002", direction="l", linebreak="al", unicodeslot=0x120D1, }, [0x120D2]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES HAL", direction="l", linebreak="al", unicodeslot=0x120D2, }, [0x120D3]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES HAL PLUS LA", direction="l", linebreak="al", unicodeslot=0x120D3, }, [0x120D4]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES HI PLUS LI", direction="l", linebreak="al", unicodeslot=0x120D4, }, [0x120D5]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES HUB0x0002", direction="l", linebreak="al", unicodeslot=0x120D5, }, [0x120D6]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x120D6, }, [0x120D7]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES ISH PLUS HU PLUS ASH", direction="l", linebreak="al", unicodeslot=0x120D7, }, [0x120D8]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES KAK", direction="l", linebreak="al", unicodeslot=0x120D8, }, [0x120D9]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES KASKAL", direction="l", linebreak="al", unicodeslot=0x120D9, }, [0x120DA]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES KID", direction="l", linebreak="al", unicodeslot=0x120DA, }, [0x120DB]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES KID PLUS LAL", direction="l", linebreak="al", unicodeslot=0x120DB, }, [0x120DC]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES KU0x0003 PLUS AN", direction="l", linebreak="al", unicodeslot=0x120DC, }, [0x120DD]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES LA", direction="l", linebreak="al", unicodeslot=0x120DD, }, [0x120DE]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES ME PLUS EN", direction="l", linebreak="al", unicodeslot=0x120DE, }, [0x120DF]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES MI", direction="l", linebreak="al", unicodeslot=0x120DF, }, [0x120E0]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES NUN", direction="l", linebreak="al", unicodeslot=0x120E0, }, [0x120E1]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES NUN OVER NUN", direction="l", linebreak="al", unicodeslot=0x120E1, }, [0x120E2]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES PA", direction="l", linebreak="al", unicodeslot=0x120E2, }, [0x120E3]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES SAL", direction="l", linebreak="al", unicodeslot=0x120E3, }, [0x120E4]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES SAR", direction="l", linebreak="al", unicodeslot=0x120E4, }, [0x120E5]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES SHE", direction="l", linebreak="al", unicodeslot=0x120E5, }, [0x120E6]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES SHE PLUS TUR", direction="l", linebreak="al", unicodeslot=0x120E6, }, [0x120E7]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES SHID", direction="l", linebreak="al", unicodeslot=0x120E7, }, [0x120E8]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES SUM", direction="l", linebreak="al", unicodeslot=0x120E8, }, [0x120E9]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x120E9, }, [0x120EA]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES U", direction="l", linebreak="al", unicodeslot=0x120EA, }, [0x120EB]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES UD", direction="l", linebreak="al", unicodeslot=0x120EB, }, [0x120EC]={ category="lo", description="CUNEIFORM SIGN GA0x0002 TIMES UD PLUS DU", direction="l", linebreak="al", unicodeslot=0x120EC, }, [0x120ED]={ category="lo", description="CUNEIFORM SIGN GA0x0002 OVER GA0x0002", direction="l", linebreak="al", unicodeslot=0x120ED, }, [0x120EE]={ category="lo", description="CUNEIFORM SIGN GABA", direction="l", linebreak="al", unicodeslot=0x120EE, }, [0x120EF]={ category="lo", description="CUNEIFORM SIGN GABA CROSSING GABA", direction="l", linebreak="al", unicodeslot=0x120EF, }, [0x120F0]={ category="lo", description="CUNEIFORM SIGN GAD", direction="l", linebreak="al", unicodeslot=0x120F0, }, [0x120F1]={ category="lo", description="CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x120F1, }, [0x120F2]={ category="lo", description="CUNEIFORM SIGN GAL", direction="l", linebreak="al", unicodeslot=0x120F2, }, [0x120F3]={ category="lo", description="CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x120F3, }, [0x120F4]={ category="lo", description="CUNEIFORM SIGN GALAM", direction="l", linebreak="al", unicodeslot=0x120F4, }, [0x120F5]={ category="lo", description="CUNEIFORM SIGN GAM", direction="l", linebreak="al", unicodeslot=0x120F5, }, [0x120F6]={ category="lo", description="CUNEIFORM SIGN GAN", direction="l", linebreak="al", unicodeslot=0x120F6, }, [0x120F7]={ category="lo", description="CUNEIFORM SIGN GAN0x0002", direction="l", linebreak="al", unicodeslot=0x120F7, }, [0x120F8]={ category="lo", description="CUNEIFORM SIGN GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x120F8, }, [0x120F9]={ category="lo", description="CUNEIFORM SIGN GAN0x0002 OVER GAN0x0002", direction="l", linebreak="al", unicodeslot=0x120F9, }, [0x120FA]={ category="lo", description="CUNEIFORM SIGN GAN0x0002 CROSSING GAN0x0002", direction="l", linebreak="al", unicodeslot=0x120FA, }, [0x120FB]={ category="lo", description="CUNEIFORM SIGN GAR", direction="l", linebreak="al", unicodeslot=0x120FB, }, [0x120FC]={ category="lo", description="CUNEIFORM SIGN GAR0x0003", direction="l", linebreak="al", unicodeslot=0x120FC, }, [0x120FD]={ category="lo", description="CUNEIFORM SIGN GASHAN", direction="l", linebreak="al", unicodeslot=0x120FD, }, [0x120FE]={ category="lo", description="CUNEIFORM SIGN GESHTIN", direction="l", linebreak="al", unicodeslot=0x120FE, }, [0x120FF]={ category="lo", description="CUNEIFORM SIGN GESHTIN TIMES KUR", direction="l", linebreak="al", unicodeslot=0x120FF, }, [0x12100]={ category="lo", description="CUNEIFORM SIGN GI", direction="l", linebreak="al", unicodeslot=0x12100, }, [0x12101]={ category="lo", description="CUNEIFORM SIGN GI TIMES E", direction="l", linebreak="al", unicodeslot=0x12101, }, [0x12102]={ category="lo", description="CUNEIFORM SIGN GI TIMES U", direction="l", linebreak="al", unicodeslot=0x12102, }, [0x12103]={ category="lo", description="CUNEIFORM SIGN GI CROSSING GI", direction="l", linebreak="al", unicodeslot=0x12103, }, [0x12104]={ category="lo", description="CUNEIFORM SIGN GI0x0004", direction="l", linebreak="al", unicodeslot=0x12104, }, [0x12105]={ category="lo", description="CUNEIFORM SIGN GI0x0004 OVER GI0x0004", direction="l", linebreak="al", unicodeslot=0x12105, }, [0x12106]={ category="lo", description="CUNEIFORM SIGN GI0x0004 CROSSING GI0x0004", direction="l", linebreak="al", unicodeslot=0x12106, }, [0x12107]={ category="lo", description="CUNEIFORM SIGN GIDIM", direction="l", linebreak="al", unicodeslot=0x12107, }, [0x12108]={ category="lo", description="CUNEIFORM SIGN GIR0x0002", direction="l", linebreak="al", unicodeslot=0x12108, }, [0x12109]={ category="lo", description="CUNEIFORM SIGN GIR0x0002 GUNU", direction="l", linebreak="al", unicodeslot=0x12109, }, [0x1210A]={ category="lo", description="CUNEIFORM SIGN GIR0x0003", direction="l", linebreak="al", unicodeslot=0x1210A, }, [0x1210B]={ category="lo", description="CUNEIFORM SIGN GIR0x0003 TIMES A PLUS IGI", direction="l", linebreak="al", unicodeslot=0x1210B, }, [0x1210C]={ category="lo", description="CUNEIFORM SIGN GIR0x0003 TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x1210C, }, [0x1210D]={ category="lo", description="CUNEIFORM SIGN GIR0x0003 TIMES IGI", direction="l", linebreak="al", unicodeslot=0x1210D, }, [0x1210E]={ category="lo", description="CUNEIFORM SIGN GIR0x0003 TIMES LU PLUS IGI", direction="l", linebreak="al", unicodeslot=0x1210E, }, [0x1210F]={ category="lo", description="CUNEIFORM SIGN GIR0x0003 TIMES PA", direction="l", linebreak="al", unicodeslot=0x1210F, }, [0x12110]={ category="lo", description="CUNEIFORM SIGN GISAL", direction="l", linebreak="al", unicodeslot=0x12110, }, [0x12111]={ category="lo", description="CUNEIFORM SIGN GISH", direction="l", linebreak="al", unicodeslot=0x12111, }, [0x12112]={ category="lo", description="CUNEIFORM SIGN GISH CROSSING GISH", direction="l", linebreak="al", unicodeslot=0x12112, }, [0x12113]={ category="lo", description="CUNEIFORM SIGN GISH TIMES BAD", direction="l", linebreak="al", unicodeslot=0x12113, }, [0x12114]={ category="lo", description="CUNEIFORM SIGN GISH TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x12114, }, [0x12115]={ category="lo", description="CUNEIFORM SIGN GISH TENU", direction="l", linebreak="al", unicodeslot=0x12115, }, [0x12116]={ category="lo", description="CUNEIFORM SIGN GU", direction="l", linebreak="al", unicodeslot=0x12116, }, [0x12117]={ category="lo", description="CUNEIFORM SIGN GU CROSSING GU", direction="l", linebreak="al", unicodeslot=0x12117, }, [0x12118]={ category="lo", description="CUNEIFORM SIGN GU0x0002", direction="l", linebreak="al", unicodeslot=0x12118, }, [0x12119]={ category="lo", description="CUNEIFORM SIGN GU0x0002 TIMES KAK", direction="l", linebreak="al", unicodeslot=0x12119, }, [0x1211A]={ category="lo", description="CUNEIFORM SIGN GU0x0002 TIMES KAK TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x1211A, }, [0x1211B]={ category="lo", description="CUNEIFORM SIGN GU0x0002 TIMES NUN", direction="l", linebreak="al", unicodeslot=0x1211B, }, [0x1211C]={ category="lo", description="CUNEIFORM SIGN GU0x0002 TIMES SAL PLUS TUG0x0002", direction="l", linebreak="al", unicodeslot=0x1211C, }, [0x1211D]={ category="lo", description="CUNEIFORM SIGN GU0x0002 GUNU", direction="l", linebreak="al", unicodeslot=0x1211D, }, [0x1211E]={ category="lo", description="CUNEIFORM SIGN GUD", direction="l", linebreak="al", unicodeslot=0x1211E, }, [0x1211F]={ category="lo", description="CUNEIFORM SIGN GUD TIMES A PLUS KUR", direction="l", linebreak="al", unicodeslot=0x1211F, }, [0x12120]={ category="lo", description="CUNEIFORM SIGN GUD TIMES KUR", direction="l", linebreak="al", unicodeslot=0x12120, }, [0x12121]={ category="lo", description="CUNEIFORM SIGN GUD OVER GUD LUGAL", direction="l", linebreak="al", unicodeslot=0x12121, }, [0x12122]={ category="lo", description="CUNEIFORM SIGN GUL", direction="l", linebreak="al", unicodeslot=0x12122, }, [0x12123]={ category="lo", description="CUNEIFORM SIGN GUM", direction="l", linebreak="al", unicodeslot=0x12123, }, [0x12124]={ category="lo", description="CUNEIFORM SIGN GUM TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12124, }, [0x12125]={ category="lo", description="CUNEIFORM SIGN GUR", direction="l", linebreak="al", unicodeslot=0x12125, }, [0x12126]={ category="lo", description="CUNEIFORM SIGN GUR0x0007", direction="l", linebreak="al", unicodeslot=0x12126, }, [0x12127]={ category="lo", description="CUNEIFORM SIGN GURUN", direction="l", linebreak="al", unicodeslot=0x12127, }, [0x12128]={ category="lo", description="CUNEIFORM SIGN GURUSH", direction="l", linebreak="al", unicodeslot=0x12128, }, [0x12129]={ category="lo", description="CUNEIFORM SIGN HA", direction="l", linebreak="al", unicodeslot=0x12129, }, [0x1212A]={ category="lo", description="CUNEIFORM SIGN HA TENU", direction="l", linebreak="al", unicodeslot=0x1212A, }, [0x1212B]={ category="lo", description="CUNEIFORM SIGN HA GUNU", direction="l", linebreak="al", unicodeslot=0x1212B, }, [0x1212C]={ category="lo", description="CUNEIFORM SIGN HAL", direction="l", linebreak="al", unicodeslot=0x1212C, }, [0x1212D]={ category="lo", description="CUNEIFORM SIGN HI", direction="l", linebreak="al", unicodeslot=0x1212D, }, [0x1212E]={ category="lo", description="CUNEIFORM SIGN HI TIMES ASH", direction="l", linebreak="al", unicodeslot=0x1212E, }, [0x1212F]={ category="lo", description="CUNEIFORM SIGN HI TIMES ASH0x0002", direction="l", linebreak="al", unicodeslot=0x1212F, }, [0x12130]={ category="lo", description="CUNEIFORM SIGN HI TIMES BAD", direction="l", linebreak="al", unicodeslot=0x12130, }, [0x12131]={ category="lo", description="CUNEIFORM SIGN HI TIMES DISH", direction="l", linebreak="al", unicodeslot=0x12131, }, [0x12132]={ category="lo", description="CUNEIFORM SIGN HI TIMES GAD", direction="l", linebreak="al", unicodeslot=0x12132, }, [0x12133]={ category="lo", description="CUNEIFORM SIGN HI TIMES KIN", direction="l", linebreak="al", unicodeslot=0x12133, }, [0x12134]={ category="lo", description="CUNEIFORM SIGN HI TIMES NUN", direction="l", linebreak="al", unicodeslot=0x12134, }, [0x12135]={ category="lo", description="CUNEIFORM SIGN HI TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12135, }, [0x12136]={ category="lo", description="CUNEIFORM SIGN HI TIMES U", direction="l", linebreak="al", unicodeslot=0x12136, }, [0x12137]={ category="lo", description="CUNEIFORM SIGN HU", direction="l", linebreak="al", unicodeslot=0x12137, }, [0x12138]={ category="lo", description="CUNEIFORM SIGN HUB0x0002", direction="l", linebreak="al", unicodeslot=0x12138, }, [0x12139]={ category="lo", description="CUNEIFORM SIGN HUB0x0002 TIMES AN", direction="l", linebreak="al", unicodeslot=0x12139, }, [0x1213A]={ category="lo", description="CUNEIFORM SIGN HUB0x0002 TIMES HAL", direction="l", linebreak="al", unicodeslot=0x1213A, }, [0x1213B]={ category="lo", description="CUNEIFORM SIGN HUB0x0002 TIMES KASKAL", direction="l", linebreak="al", unicodeslot=0x1213B, }, [0x1213C]={ category="lo", description="CUNEIFORM SIGN HUB0x0002 TIMES LISH", direction="l", linebreak="al", unicodeslot=0x1213C, }, [0x1213D]={ category="lo", description="CUNEIFORM SIGN HUB0x0002 TIMES UD", direction="l", linebreak="al", unicodeslot=0x1213D, }, [0x1213E]={ category="lo", description="CUNEIFORM SIGN HUL0x0002", direction="l", linebreak="al", unicodeslot=0x1213E, }, [0x1213F]={ category="lo", description="CUNEIFORM SIGN I", direction="l", linebreak="al", unicodeslot=0x1213F, }, [0x12140]={ category="lo", description="CUNEIFORM SIGN I A", direction="l", linebreak="al", unicodeslot=0x12140, }, [0x12141]={ category="lo", description="CUNEIFORM SIGN IB", direction="l", linebreak="al", unicodeslot=0x12141, }, [0x12142]={ category="lo", description="CUNEIFORM SIGN IDIM", direction="l", linebreak="al", unicodeslot=0x12142, }, [0x12143]={ category="lo", description="CUNEIFORM SIGN IDIM OVER IDIM BUR", direction="l", linebreak="al", unicodeslot=0x12143, }, [0x12144]={ category="lo", description="CUNEIFORM SIGN IDIM OVER IDIM SQUARED", direction="l", linebreak="al", unicodeslot=0x12144, }, [0x12145]={ category="lo", description="CUNEIFORM SIGN IG", direction="l", linebreak="al", unicodeslot=0x12145, }, [0x12146]={ category="lo", description="CUNEIFORM SIGN IGI", direction="l", linebreak="al", unicodeslot=0x12146, }, [0x12147]={ category="lo", description="CUNEIFORM SIGN IGI DIB", direction="l", linebreak="al", unicodeslot=0x12147, }, [0x12148]={ category="lo", description="CUNEIFORM SIGN IGI RI", direction="l", linebreak="al", unicodeslot=0x12148, }, [0x12149]={ category="lo", description="CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD", direction="l", linebreak="al", unicodeslot=0x12149, }, [0x1214A]={ category="lo", description="CUNEIFORM SIGN IGI GUNU", direction="l", linebreak="al", unicodeslot=0x1214A, }, [0x1214B]={ category="lo", description="CUNEIFORM SIGN IL", direction="l", linebreak="al", unicodeslot=0x1214B, }, [0x1214C]={ category="lo", description="CUNEIFORM SIGN IL TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x1214C, }, [0x1214D]={ category="lo", description="CUNEIFORM SIGN IL0x0002", direction="l", linebreak="al", unicodeslot=0x1214D, }, [0x1214E]={ category="lo", description="CUNEIFORM SIGN IM", direction="l", linebreak="al", unicodeslot=0x1214E, }, [0x1214F]={ category="lo", description="CUNEIFORM SIGN IM TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x1214F, }, [0x12150]={ category="lo", description="CUNEIFORM SIGN IM CROSSING IM", direction="l", linebreak="al", unicodeslot=0x12150, }, [0x12151]={ category="lo", description="CUNEIFORM SIGN IM OPPOSING IM", direction="l", linebreak="al", unicodeslot=0x12151, }, [0x12152]={ category="lo", description="CUNEIFORM SIGN IM SQUARED", direction="l", linebreak="al", unicodeslot=0x12152, }, [0x12153]={ category="lo", description="CUNEIFORM SIGN IMIN", direction="l", linebreak="al", unicodeslot=0x12153, }, [0x12154]={ category="lo", description="CUNEIFORM SIGN IN", direction="l", linebreak="al", unicodeslot=0x12154, }, [0x12155]={ category="lo", description="CUNEIFORM SIGN IR", direction="l", linebreak="al", unicodeslot=0x12155, }, [0x12156]={ category="lo", description="CUNEIFORM SIGN ISH", direction="l", linebreak="al", unicodeslot=0x12156, }, [0x12157]={ category="lo", description="CUNEIFORM SIGN KA", direction="l", linebreak="al", unicodeslot=0x12157, }, [0x12158]={ category="lo", description="CUNEIFORM SIGN KA TIMES A", direction="l", linebreak="al", unicodeslot=0x12158, }, [0x12159]={ category="lo", description="CUNEIFORM SIGN KA TIMES AD", direction="l", linebreak="al", unicodeslot=0x12159, }, [0x1215A]={ category="lo", description="CUNEIFORM SIGN KA TIMES AD PLUS KU0x0003", direction="l", linebreak="al", unicodeslot=0x1215A, }, [0x1215B]={ category="lo", description="CUNEIFORM SIGN KA TIMES ASH0x0002", direction="l", linebreak="al", unicodeslot=0x1215B, }, [0x1215C]={ category="lo", description="CUNEIFORM SIGN KA TIMES BAD", direction="l", linebreak="al", unicodeslot=0x1215C, }, [0x1215D]={ category="lo", description="CUNEIFORM SIGN KA TIMES BALAG", direction="l", linebreak="al", unicodeslot=0x1215D, }, [0x1215E]={ category="lo", description="CUNEIFORM SIGN KA TIMES BAR", direction="l", linebreak="al", unicodeslot=0x1215E, }, [0x1215F]={ category="lo", description="CUNEIFORM SIGN KA TIMES BI", direction="l", linebreak="al", unicodeslot=0x1215F, }, [0x12160]={ category="lo", description="CUNEIFORM SIGN KA TIMES ERIN0x0002", direction="l", linebreak="al", unicodeslot=0x12160, }, [0x12161]={ category="lo", description="CUNEIFORM SIGN KA TIMES ESH0x0002", direction="l", linebreak="al", unicodeslot=0x12161, }, [0x12162]={ category="lo", description="CUNEIFORM SIGN KA TIMES GA", direction="l", linebreak="al", unicodeslot=0x12162, }, [0x12163]={ category="lo", description="CUNEIFORM SIGN KA TIMES GAL", direction="l", linebreak="al", unicodeslot=0x12163, }, [0x12164]={ category="lo", description="CUNEIFORM SIGN KA TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12164, }, [0x12165]={ category="lo", description="CUNEIFORM SIGN KA TIMES GAR", direction="l", linebreak="al", unicodeslot=0x12165, }, [0x12166]={ category="lo", description="CUNEIFORM SIGN KA TIMES GAR PLUS SHA0x0003 PLUS A", direction="l", linebreak="al", unicodeslot=0x12166, }, [0x12167]={ category="lo", description="CUNEIFORM SIGN KA TIMES GI", direction="l", linebreak="al", unicodeslot=0x12167, }, [0x12168]={ category="lo", description="CUNEIFORM SIGN KA TIMES GIR0x0002", direction="l", linebreak="al", unicodeslot=0x12168, }, [0x12169]={ category="lo", description="CUNEIFORM SIGN KA TIMES GISH PLUS SAR", direction="l", linebreak="al", unicodeslot=0x12169, }, [0x1216A]={ category="lo", description="CUNEIFORM SIGN KA TIMES GISH CROSSING GISH", direction="l", linebreak="al", unicodeslot=0x1216A, }, [0x1216B]={ category="lo", description="CUNEIFORM SIGN KA TIMES GU", direction="l", linebreak="al", unicodeslot=0x1216B, }, [0x1216C]={ category="lo", description="CUNEIFORM SIGN KA TIMES GUR0x0007", direction="l", linebreak="al", unicodeslot=0x1216C, }, [0x1216D]={ category="lo", description="CUNEIFORM SIGN KA TIMES IGI", direction="l", linebreak="al", unicodeslot=0x1216D, }, [0x1216E]={ category="lo", description="CUNEIFORM SIGN KA TIMES IM", direction="l", linebreak="al", unicodeslot=0x1216E, }, [0x1216F]={ category="lo", description="CUNEIFORM SIGN KA TIMES KAK", direction="l", linebreak="al", unicodeslot=0x1216F, }, [0x12170]={ category="lo", description="CUNEIFORM SIGN KA TIMES KI", direction="l", linebreak="al", unicodeslot=0x12170, }, [0x12171]={ category="lo", description="CUNEIFORM SIGN KA TIMES KID", direction="l", linebreak="al", unicodeslot=0x12171, }, [0x12172]={ category="lo", description="CUNEIFORM SIGN KA TIMES LI", direction="l", linebreak="al", unicodeslot=0x12172, }, [0x12173]={ category="lo", description="CUNEIFORM SIGN KA TIMES LU", direction="l", linebreak="al", unicodeslot=0x12173, }, [0x12174]={ category="lo", description="CUNEIFORM SIGN KA TIMES ME", direction="l", linebreak="al", unicodeslot=0x12174, }, [0x12175]={ category="lo", description="CUNEIFORM SIGN KA TIMES ME PLUS DU", direction="l", linebreak="al", unicodeslot=0x12175, }, [0x12176]={ category="lo", description="CUNEIFORM SIGN KA TIMES ME PLUS GI", direction="l", linebreak="al", unicodeslot=0x12176, }, [0x12177]={ category="lo", description="CUNEIFORM SIGN KA TIMES ME PLUS TE", direction="l", linebreak="al", unicodeslot=0x12177, }, [0x12178]={ category="lo", description="CUNEIFORM SIGN KA TIMES MI", direction="l", linebreak="al", unicodeslot=0x12178, }, [0x12179]={ category="lo", description="CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ", direction="l", linebreak="al", unicodeslot=0x12179, }, [0x1217A]={ category="lo", description="CUNEIFORM SIGN KA TIMES NE", direction="l", linebreak="al", unicodeslot=0x1217A, }, [0x1217B]={ category="lo", description="CUNEIFORM SIGN KA TIMES NUN", direction="l", linebreak="al", unicodeslot=0x1217B, }, [0x1217C]={ category="lo", description="CUNEIFORM SIGN KA TIMES PI", direction="l", linebreak="al", unicodeslot=0x1217C, }, [0x1217D]={ category="lo", description="CUNEIFORM SIGN KA TIMES RU", direction="l", linebreak="al", unicodeslot=0x1217D, }, [0x1217E]={ category="lo", description="CUNEIFORM SIGN KA TIMES SA", direction="l", linebreak="al", unicodeslot=0x1217E, }, [0x1217F]={ category="lo", description="CUNEIFORM SIGN KA TIMES SAR", direction="l", linebreak="al", unicodeslot=0x1217F, }, [0x12180]={ category="lo", description="CUNEIFORM SIGN KA TIMES SHA", direction="l", linebreak="al", unicodeslot=0x12180, }, [0x12181]={ category="lo", description="CUNEIFORM SIGN KA TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12181, }, [0x12182]={ category="lo", description="CUNEIFORM SIGN KA TIMES SHID", direction="l", linebreak="al", unicodeslot=0x12182, }, [0x12183]={ category="lo", description="CUNEIFORM SIGN KA TIMES SHU", direction="l", linebreak="al", unicodeslot=0x12183, }, [0x12184]={ category="lo", description="CUNEIFORM SIGN KA TIMES SIG", direction="l", linebreak="al", unicodeslot=0x12184, }, [0x12185]={ category="lo", description="CUNEIFORM SIGN KA TIMES SUHUR", direction="l", linebreak="al", unicodeslot=0x12185, }, [0x12186]={ category="lo", description="CUNEIFORM SIGN KA TIMES TAR", direction="l", linebreak="al", unicodeslot=0x12186, }, [0x12187]={ category="lo", description="CUNEIFORM SIGN KA TIMES U", direction="l", linebreak="al", unicodeslot=0x12187, }, [0x12188]={ category="lo", description="CUNEIFORM SIGN KA TIMES U0x0002", direction="l", linebreak="al", unicodeslot=0x12188, }, [0x12189]={ category="lo", description="CUNEIFORM SIGN KA TIMES UD", direction="l", linebreak="al", unicodeslot=0x12189, }, [0x1218A]={ category="lo", description="CUNEIFORM SIGN KA TIMES UMUM TIMES PA", direction="l", linebreak="al", unicodeslot=0x1218A, }, [0x1218B]={ category="lo", description="CUNEIFORM SIGN KA TIMES USH", direction="l", linebreak="al", unicodeslot=0x1218B, }, [0x1218C]={ category="lo", description="CUNEIFORM SIGN KA TIMES ZI", direction="l", linebreak="al", unicodeslot=0x1218C, }, [0x1218D]={ category="lo", description="CUNEIFORM SIGN KA0x0002", direction="l", linebreak="al", unicodeslot=0x1218D, }, [0x1218E]={ category="lo", description="CUNEIFORM SIGN KA0x0002 CROSSING KA0x0002", direction="l", linebreak="al", unicodeslot=0x1218E, }, [0x1218F]={ category="lo", description="CUNEIFORM SIGN KAB", direction="l", linebreak="al", unicodeslot=0x1218F, }, [0x12190]={ category="lo", description="CUNEIFORM SIGN KAD0x0002", direction="l", linebreak="al", unicodeslot=0x12190, }, [0x12191]={ category="lo", description="CUNEIFORM SIGN KAD0x0003", direction="l", linebreak="al", unicodeslot=0x12191, }, [0x12192]={ category="lo", description="CUNEIFORM SIGN KAD0x0004", direction="l", linebreak="al", unicodeslot=0x12192, }, [0x12193]={ category="lo", description="CUNEIFORM SIGN KAD0x0005", direction="l", linebreak="al", unicodeslot=0x12193, }, [0x12194]={ category="lo", description="CUNEIFORM SIGN KAD0x0005 OVER KAD0x0005", direction="l", linebreak="al", unicodeslot=0x12194, }, [0x12195]={ category="lo", description="CUNEIFORM SIGN KAK", direction="l", linebreak="al", unicodeslot=0x12195, }, [0x12196]={ category="lo", description="CUNEIFORM SIGN KAK TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x12196, }, [0x12197]={ category="lo", description="CUNEIFORM SIGN KAL", direction="l", linebreak="al", unicodeslot=0x12197, }, [0x12198]={ category="lo", description="CUNEIFORM SIGN KAL TIMES BAD", direction="l", linebreak="al", unicodeslot=0x12198, }, [0x12199]={ category="lo", description="CUNEIFORM SIGN KAL CROSSING KAL", direction="l", linebreak="al", unicodeslot=0x12199, }, [0x1219A]={ category="lo", description="CUNEIFORM SIGN KAM0x0002", direction="l", linebreak="al", unicodeslot=0x1219A, }, [0x1219B]={ category="lo", description="CUNEIFORM SIGN KAM0x0004", direction="l", linebreak="al", unicodeslot=0x1219B, }, [0x1219C]={ category="lo", description="CUNEIFORM SIGN KASKAL", direction="l", linebreak="al", unicodeslot=0x1219C, }, [0x1219D]={ category="lo", description="CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U", direction="l", linebreak="al", unicodeslot=0x1219D, }, [0x1219E]={ category="lo", description="CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U", direction="l", linebreak="al", unicodeslot=0x1219E, }, [0x1219F]={ category="lo", description="CUNEIFORM SIGN KESH0x0002", direction="l", linebreak="al", unicodeslot=0x1219F, }, [0x121A0]={ category="lo", description="CUNEIFORM SIGN KI", direction="l", linebreak="al", unicodeslot=0x121A0, }, [0x121A1]={ category="lo", description="CUNEIFORM SIGN KI TIMES BAD", direction="l", linebreak="al", unicodeslot=0x121A1, }, [0x121A2]={ category="lo", description="CUNEIFORM SIGN KI TIMES U", direction="l", linebreak="al", unicodeslot=0x121A2, }, [0x121A3]={ category="lo", description="CUNEIFORM SIGN KI TIMES UD", direction="l", linebreak="al", unicodeslot=0x121A3, }, [0x121A4]={ category="lo", description="CUNEIFORM SIGN KID", direction="l", linebreak="al", unicodeslot=0x121A4, }, [0x121A5]={ category="lo", description="CUNEIFORM SIGN KIN", direction="l", linebreak="al", unicodeslot=0x121A5, }, [0x121A6]={ category="lo", description="CUNEIFORM SIGN KISAL", direction="l", linebreak="al", unicodeslot=0x121A6, }, [0x121A7]={ category="lo", description="CUNEIFORM SIGN KISH", direction="l", linebreak="al", unicodeslot=0x121A7, }, [0x121A8]={ category="lo", description="CUNEIFORM SIGN KISIM0x0005", direction="l", linebreak="al", unicodeslot=0x121A8, }, [0x121A9]={ category="lo", description="CUNEIFORM SIGN KISIM0x0005 OVER KISIM0x0005", direction="l", linebreak="al", unicodeslot=0x121A9, }, [0x121AA]={ category="lo", description="CUNEIFORM SIGN KU", direction="l", linebreak="al", unicodeslot=0x121AA, }, [0x121AB]={ category="lo", description="CUNEIFORM SIGN KU OVER HI TIMES ASH0x0002 KU OVER HI TIMES ASH0x0002", direction="l", linebreak="al", unicodeslot=0x121AB, }, [0x121AC]={ category="lo", description="CUNEIFORM SIGN KU0x0003", direction="l", linebreak="al", unicodeslot=0x121AC, }, [0x121AD]={ category="lo", description="CUNEIFORM SIGN KU0x0004", direction="l", linebreak="al", unicodeslot=0x121AD, }, [0x121AE]={ category="lo", description="CUNEIFORM SIGN KU0x0004 VARIANT FORM", direction="l", linebreak="al", unicodeslot=0x121AE, }, [0x121AF]={ category="lo", description="CUNEIFORM SIGN KU0x0007", direction="l", linebreak="al", unicodeslot=0x121AF, }, [0x121B0]={ category="lo", description="CUNEIFORM SIGN KUL", direction="l", linebreak="al", unicodeslot=0x121B0, }, [0x121B1]={ category="lo", description="CUNEIFORM SIGN KUL GUNU", direction="l", linebreak="al", unicodeslot=0x121B1, }, [0x121B2]={ category="lo", description="CUNEIFORM SIGN KUN", direction="l", linebreak="al", unicodeslot=0x121B2, }, [0x121B3]={ category="lo", description="CUNEIFORM SIGN KUR", direction="l", linebreak="al", unicodeslot=0x121B3, }, [0x121B4]={ category="lo", description="CUNEIFORM SIGN KUR OPPOSING KUR", direction="l", linebreak="al", unicodeslot=0x121B4, }, [0x121B5]={ category="lo", description="CUNEIFORM SIGN KUSHU0x0002", direction="l", linebreak="al", unicodeslot=0x121B5, }, [0x121B6]={ category="lo", description="CUNEIFORM SIGN KWU0x013E", direction="l", linebreak="al", unicodeslot=0x121B6, }, [0x121B7]={ category="lo", description="CUNEIFORM SIGN LA", direction="l", linebreak="al", unicodeslot=0x121B7, }, [0x121B8]={ category="lo", description="CUNEIFORM SIGN LAGAB", direction="l", linebreak="al", unicodeslot=0x121B8, }, [0x121B9]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES A", direction="l", linebreak="al", unicodeslot=0x121B9, }, [0x121BA]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA", direction="l", linebreak="al", unicodeslot=0x121BA, }, [0x121BB]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES A PLUS GAR", direction="l", linebreak="al", unicodeslot=0x121BB, }, [0x121BC]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES A PLUS LAL", direction="l", linebreak="al", unicodeslot=0x121BC, }, [0x121BD]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES AL", direction="l", linebreak="al", unicodeslot=0x121BD, }, [0x121BE]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES AN", direction="l", linebreak="al", unicodeslot=0x121BE, }, [0x121BF]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU", direction="l", linebreak="al", unicodeslot=0x121BF, }, [0x121C0]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES BAD", direction="l", linebreak="al", unicodeslot=0x121C0, }, [0x121C1]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES BI", direction="l", linebreak="al", unicodeslot=0x121C1, }, [0x121C2]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES DAR", direction="l", linebreak="al", unicodeslot=0x121C2, }, [0x121C3]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES EN", direction="l", linebreak="al", unicodeslot=0x121C3, }, [0x121C4]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES GA", direction="l", linebreak="al", unicodeslot=0x121C4, }, [0x121C5]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES GAR", direction="l", linebreak="al", unicodeslot=0x121C5, }, [0x121C6]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES GUD", direction="l", linebreak="al", unicodeslot=0x121C6, }, [0x121C7]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD", direction="l", linebreak="al", unicodeslot=0x121C7, }, [0x121C8]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES HA", direction="l", linebreak="al", unicodeslot=0x121C8, }, [0x121C9]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES HAL", direction="l", linebreak="al", unicodeslot=0x121C9, }, [0x121CA]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN", direction="l", linebreak="al", unicodeslot=0x121CA, }, [0x121CB]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x121CB, }, [0x121CC]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES IM", direction="l", linebreak="al", unicodeslot=0x121CC, }, [0x121CD]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES IM PLUS HA", direction="l", linebreak="al", unicodeslot=0x121CD, }, [0x121CE]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES IM PLUS LU", direction="l", linebreak="al", unicodeslot=0x121CE, }, [0x121CF]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES KI", direction="l", linebreak="al", unicodeslot=0x121CF, }, [0x121D0]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES KIN", direction="l", linebreak="al", unicodeslot=0x121D0, }, [0x121D1]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES KU0x0003", direction="l", linebreak="al", unicodeslot=0x121D1, }, [0x121D2]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES KUL", direction="l", linebreak="al", unicodeslot=0x121D2, }, [0x121D3]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A", direction="l", linebreak="al", unicodeslot=0x121D3, }, [0x121D4]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES LAGAB", direction="l", linebreak="al", unicodeslot=0x121D4, }, [0x121D5]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES LISH", direction="l", linebreak="al", unicodeslot=0x121D5, }, [0x121D6]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES LU", direction="l", linebreak="al", unicodeslot=0x121D6, }, [0x121D7]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES LUL", direction="l", linebreak="al", unicodeslot=0x121D7, }, [0x121D8]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES ME", direction="l", linebreak="al", unicodeslot=0x121D8, }, [0x121D9]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES ME PLUS EN", direction="l", linebreak="al", unicodeslot=0x121D9, }, [0x121DA]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES MUSH", direction="l", linebreak="al", unicodeslot=0x121DA, }, [0x121DB]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES NE", direction="l", linebreak="al", unicodeslot=0x121DB, }, [0x121DC]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM", direction="l", linebreak="al", unicodeslot=0x121DC, }, [0x121DD]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN0x0002", direction="l", linebreak="al", unicodeslot=0x121DD, }, [0x121DE]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU", direction="l", linebreak="al", unicodeslot=0x121DE, }, [0x121DF]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES SHU0x0002", direction="l", linebreak="al", unicodeslot=0x121DF, }, [0x121E0]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES SHU0x0002 PLUS SHU0x0002", direction="l", linebreak="al", unicodeslot=0x121E0, }, [0x121E1]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES SUM", direction="l", linebreak="al", unicodeslot=0x121E1, }, [0x121E2]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES TAG", direction="l", linebreak="al", unicodeslot=0x121E2, }, [0x121E3]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x121E3, }, [0x121E4]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA", direction="l", linebreak="al", unicodeslot=0x121E4, }, [0x121E5]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES U", direction="l", linebreak="al", unicodeslot=0x121E5, }, [0x121E6]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES U PLUS A", direction="l", linebreak="al", unicodeslot=0x121E6, }, [0x121E7]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U", direction="l", linebreak="al", unicodeslot=0x121E7, }, [0x121E8]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES U0x0002 PLUS ASH", direction="l", linebreak="al", unicodeslot=0x121E8, }, [0x121E9]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES UD", direction="l", linebreak="al", unicodeslot=0x121E9, }, [0x121EA]={ category="lo", description="CUNEIFORM SIGN LAGAB TIMES USH", direction="l", linebreak="al", unicodeslot=0x121EA, }, [0x121EB]={ category="lo", description="CUNEIFORM SIGN LAGAB SQUARED", direction="l", linebreak="al", unicodeslot=0x121EB, }, [0x121EC]={ category="lo", description="CUNEIFORM SIGN LAGAR", direction="l", linebreak="al", unicodeslot=0x121EC, }, [0x121ED]={ category="lo", description="CUNEIFORM SIGN LAGAR TIMES SHE", direction="l", linebreak="al", unicodeslot=0x121ED, }, [0x121EE]={ category="lo", description="CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM", direction="l", linebreak="al", unicodeslot=0x121EE, }, [0x121EF]={ category="lo", description="CUNEIFORM SIGN LAGAR GUNU", direction="l", linebreak="al", unicodeslot=0x121EF, }, [0x121F0]={ category="lo", description="CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE", direction="l", linebreak="al", unicodeslot=0x121F0, }, [0x121F1]={ category="lo", description="CUNEIFORM SIGN LAHSHU", direction="l", linebreak="al", unicodeslot=0x121F1, }, [0x121F2]={ category="lo", description="CUNEIFORM SIGN LAL", direction="l", linebreak="al", unicodeslot=0x121F2, }, [0x121F3]={ category="lo", description="CUNEIFORM SIGN LAL TIMES LAL", direction="l", linebreak="al", unicodeslot=0x121F3, }, [0x121F4]={ category="lo", description="CUNEIFORM SIGN LAM", direction="l", linebreak="al", unicodeslot=0x121F4, }, [0x121F5]={ category="lo", description="CUNEIFORM SIGN LAM TIMES KUR", direction="l", linebreak="al", unicodeslot=0x121F5, }, [0x121F6]={ category="lo", description="CUNEIFORM SIGN LAM TIMES KUR PLUS RU", direction="l", linebreak="al", unicodeslot=0x121F6, }, [0x121F7]={ category="lo", description="CUNEIFORM SIGN LI", direction="l", linebreak="al", unicodeslot=0x121F7, }, [0x121F8]={ category="lo", description="CUNEIFORM SIGN LIL", direction="l", linebreak="al", unicodeslot=0x121F8, }, [0x121F9]={ category="lo", description="CUNEIFORM SIGN LIMMU0x0002", direction="l", linebreak="al", unicodeslot=0x121F9, }, [0x121FA]={ category="lo", description="CUNEIFORM SIGN LISH", direction="l", linebreak="al", unicodeslot=0x121FA, }, [0x121FB]={ category="lo", description="CUNEIFORM SIGN LU", direction="l", linebreak="al", unicodeslot=0x121FB, }, [0x121FC]={ category="lo", description="CUNEIFORM SIGN LU TIMES BAD", direction="l", linebreak="al", unicodeslot=0x121FC, }, [0x121FD]={ category="lo", description="CUNEIFORM SIGN LU0x0002", direction="l", linebreak="al", unicodeslot=0x121FD, }, [0x121FE]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES AL", direction="l", linebreak="al", unicodeslot=0x121FE, }, [0x121FF]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES BAD", direction="l", linebreak="al", unicodeslot=0x121FF, }, [0x12200]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES ESH0x0002", direction="l", linebreak="al", unicodeslot=0x12200, }, [0x12201]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES ESH0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12201, }, [0x12202]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12202, }, [0x12203]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES HI TIMES BAD", direction="l", linebreak="al", unicodeslot=0x12203, }, [0x12204]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES IM", direction="l", linebreak="al", unicodeslot=0x12204, }, [0x12205]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES KAD0x0002", direction="l", linebreak="al", unicodeslot=0x12205, }, [0x12206]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES KAD0x0003", direction="l", linebreak="al", unicodeslot=0x12206, }, [0x12207]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES KAD0x0003 PLUS ASH", direction="l", linebreak="al", unicodeslot=0x12207, }, [0x12208]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES KI", direction="l", linebreak="al", unicodeslot=0x12208, }, [0x12209]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES LA PLUS ASH", direction="l", linebreak="al", unicodeslot=0x12209, }, [0x1220A]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES LAGAB", direction="l", linebreak="al", unicodeslot=0x1220A, }, [0x1220B]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES ME PLUS EN", direction="l", linebreak="al", unicodeslot=0x1220B, }, [0x1220C]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES NE", direction="l", linebreak="al", unicodeslot=0x1220C, }, [0x1220D]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES NU", direction="l", linebreak="al", unicodeslot=0x1220D, }, [0x1220E]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES SI PLUS ASH", direction="l", linebreak="al", unicodeslot=0x1220E, }, [0x1220F]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES SIK0x0002 PLUS BU", direction="l", linebreak="al", unicodeslot=0x1220F, }, [0x12210]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TIMES TUG0x0002", direction="l", linebreak="al", unicodeslot=0x12210, }, [0x12211]={ category="lo", description="CUNEIFORM SIGN LU0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12211, }, [0x12212]={ category="lo", description="CUNEIFORM SIGN LU0x0002 CROSSING LU0x0002", direction="l", linebreak="al", unicodeslot=0x12212, }, [0x12213]={ category="lo", description="CUNEIFORM SIGN LU0x0002 OPPOSING LU0x0002", direction="l", linebreak="al", unicodeslot=0x12213, }, [0x12214]={ category="lo", description="CUNEIFORM SIGN LU0x0002 SQUARED", direction="l", linebreak="al", unicodeslot=0x12214, }, [0x12215]={ category="lo", description="CUNEIFORM SIGN LU0x0002 SHESHIG", direction="l", linebreak="al", unicodeslot=0x12215, }, [0x12216]={ category="lo", description="CUNEIFORM SIGN LU0x0003", direction="l", linebreak="al", unicodeslot=0x12216, }, [0x12217]={ category="lo", description="CUNEIFORM SIGN LUGAL", direction="l", linebreak="al", unicodeslot=0x12217, }, [0x12218]={ category="lo", description="CUNEIFORM SIGN LUGAL OVER LUGAL", direction="l", linebreak="al", unicodeslot=0x12218, }, [0x12219]={ category="lo", description="CUNEIFORM SIGN LUGAL OPPOSING LUGAL", direction="l", linebreak="al", unicodeslot=0x12219, }, [0x1221A]={ category="lo", description="CUNEIFORM SIGN LUGAL SHESHIG", direction="l", linebreak="al", unicodeslot=0x1221A, }, [0x1221B]={ category="lo", description="CUNEIFORM SIGN LUH", direction="l", linebreak="al", unicodeslot=0x1221B, }, [0x1221C]={ category="lo", description="CUNEIFORM SIGN LUL", direction="l", linebreak="al", unicodeslot=0x1221C, }, [0x1221D]={ category="lo", description="CUNEIFORM SIGN LUM", direction="l", linebreak="al", unicodeslot=0x1221D, }, [0x1221E]={ category="lo", description="CUNEIFORM SIGN LUM OVER LUM", direction="l", linebreak="al", unicodeslot=0x1221E, }, [0x1221F]={ category="lo", description="CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x1221F, }, [0x12220]={ category="lo", description="CUNEIFORM SIGN MA", direction="l", linebreak="al", unicodeslot=0x12220, }, [0x12221]={ category="lo", description="CUNEIFORM SIGN MA TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x12221, }, [0x12222]={ category="lo", description="CUNEIFORM SIGN MA GUNU", direction="l", linebreak="al", unicodeslot=0x12222, }, [0x12223]={ category="lo", description="CUNEIFORM SIGN MA0x0002", direction="l", linebreak="al", unicodeslot=0x12223, }, [0x12224]={ category="lo", description="CUNEIFORM SIGN MAH", direction="l", linebreak="al", unicodeslot=0x12224, }, [0x12225]={ category="lo", description="CUNEIFORM SIGN MAR", direction="l", linebreak="al", unicodeslot=0x12225, }, [0x12226]={ category="lo", description="CUNEIFORM SIGN MASH", direction="l", linebreak="al", unicodeslot=0x12226, }, [0x12227]={ category="lo", description="CUNEIFORM SIGN MASH0x0002", direction="l", linebreak="al", unicodeslot=0x12227, }, [0x12228]={ category="lo", description="CUNEIFORM SIGN ME", direction="l", linebreak="al", unicodeslot=0x12228, }, [0x12229]={ category="lo", description="CUNEIFORM SIGN MES", direction="l", linebreak="al", unicodeslot=0x12229, }, [0x1222A]={ category="lo", description="CUNEIFORM SIGN MI", direction="l", linebreak="al", unicodeslot=0x1222A, }, [0x1222B]={ category="lo", description="CUNEIFORM SIGN MIN", direction="l", linebreak="al", unicodeslot=0x1222B, }, [0x1222C]={ category="lo", description="CUNEIFORM SIGN MU", direction="l", linebreak="al", unicodeslot=0x1222C, }, [0x1222D]={ category="lo", description="CUNEIFORM SIGN MU OVER MU", direction="l", linebreak="al", unicodeslot=0x1222D, }, [0x1222E]={ category="lo", description="CUNEIFORM SIGN MUG", direction="l", linebreak="al", unicodeslot=0x1222E, }, [0x1222F]={ category="lo", description="CUNEIFORM SIGN MUG GUNU", direction="l", linebreak="al", unicodeslot=0x1222F, }, [0x12230]={ category="lo", description="CUNEIFORM SIGN MUNSUB", direction="l", linebreak="al", unicodeslot=0x12230, }, [0x12231]={ category="lo", description="CUNEIFORM SIGN MURGU0x0002", direction="l", linebreak="al", unicodeslot=0x12231, }, [0x12232]={ category="lo", description="CUNEIFORM SIGN MUSH", direction="l", linebreak="al", unicodeslot=0x12232, }, [0x12233]={ category="lo", description="CUNEIFORM SIGN MUSH TIMES A", direction="l", linebreak="al", unicodeslot=0x12233, }, [0x12234]={ category="lo", description="CUNEIFORM SIGN MUSH TIMES KUR", direction="l", linebreak="al", unicodeslot=0x12234, }, [0x12235]={ category="lo", description="CUNEIFORM SIGN MUSH TIMES ZA", direction="l", linebreak="al", unicodeslot=0x12235, }, [0x12236]={ category="lo", description="CUNEIFORM SIGN MUSH OVER MUSH", direction="l", linebreak="al", unicodeslot=0x12236, }, [0x12237]={ category="lo", description="CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA", direction="l", linebreak="al", unicodeslot=0x12237, }, [0x12238]={ category="lo", description="CUNEIFORM SIGN MUSH CROSSING MUSH", direction="l", linebreak="al", unicodeslot=0x12238, }, [0x12239]={ category="lo", description="CUNEIFORM SIGN MUSH0x0003", direction="l", linebreak="al", unicodeslot=0x12239, }, [0x1223A]={ category="lo", description="CUNEIFORM SIGN MUSH0x0003 TIMES A", direction="l", linebreak="al", unicodeslot=0x1223A, }, [0x1223B]={ category="lo", description="CUNEIFORM SIGN MUSH0x0003 TIMES A PLUS DI", direction="l", linebreak="al", unicodeslot=0x1223B, }, [0x1223C]={ category="lo", description="CUNEIFORM SIGN MUSH0x0003 TIMES DI", direction="l", linebreak="al", unicodeslot=0x1223C, }, [0x1223D]={ category="lo", description="CUNEIFORM SIGN MUSH0x0003 GUNU", direction="l", linebreak="al", unicodeslot=0x1223D, }, [0x1223E]={ category="lo", description="CUNEIFORM SIGN NA", direction="l", linebreak="al", unicodeslot=0x1223E, }, [0x1223F]={ category="lo", description="CUNEIFORM SIGN NA0x0002", direction="l", linebreak="al", unicodeslot=0x1223F, }, [0x12240]={ category="lo", description="CUNEIFORM SIGN NAGA", direction="l", linebreak="al", unicodeslot=0x12240, }, [0x12241]={ category="lo", description="CUNEIFORM SIGN NAGA INVERTED", direction="l", linebreak="al", unicodeslot=0x12241, }, [0x12242]={ category="lo", description="CUNEIFORM SIGN NAGA TIMES SHU TENU", direction="l", linebreak="al", unicodeslot=0x12242, }, [0x12243]={ category="lo", description="CUNEIFORM SIGN NAGA OPPOSING NAGA", direction="l", linebreak="al", unicodeslot=0x12243, }, [0x12244]={ category="lo", description="CUNEIFORM SIGN NAGAR", direction="l", linebreak="al", unicodeslot=0x12244, }, [0x12245]={ category="lo", description="CUNEIFORM SIGN NAM NUTILLU", direction="l", linebreak="al", unicodeslot=0x12245, }, [0x12246]={ category="lo", description="CUNEIFORM SIGN NAM", direction="l", linebreak="al", unicodeslot=0x12246, }, [0x12247]={ category="lo", description="CUNEIFORM SIGN NAM0x0002", direction="l", linebreak="al", unicodeslot=0x12247, }, [0x12248]={ category="lo", description="CUNEIFORM SIGN NE", direction="l", linebreak="al", unicodeslot=0x12248, }, [0x12249]={ category="lo", description="CUNEIFORM SIGN NE TIMES A", direction="l", linebreak="al", unicodeslot=0x12249, }, [0x1224A]={ category="lo", description="CUNEIFORM SIGN NE TIMES UD", direction="l", linebreak="al", unicodeslot=0x1224A, }, [0x1224B]={ category="lo", description="CUNEIFORM SIGN NE SHESHIG", direction="l", linebreak="al", unicodeslot=0x1224B, }, [0x1224C]={ category="lo", description="CUNEIFORM SIGN NI", direction="l", linebreak="al", unicodeslot=0x1224C, }, [0x1224D]={ category="lo", description="CUNEIFORM SIGN NI TIMES E", direction="l", linebreak="al", unicodeslot=0x1224D, }, [0x1224E]={ category="lo", description="CUNEIFORM SIGN NI0x0002", direction="l", linebreak="al", unicodeslot=0x1224E, }, [0x1224F]={ category="lo", description="CUNEIFORM SIGN NIM", direction="l", linebreak="al", unicodeslot=0x1224F, }, [0x12250]={ category="lo", description="CUNEIFORM SIGN NIM TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12250, }, [0x12251]={ category="lo", description="CUNEIFORM SIGN NIM TIMES GAR PLUS GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12251, }, [0x12252]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002", direction="l", linebreak="al", unicodeslot=0x12252, }, [0x12253]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES AN", direction="l", linebreak="al", unicodeslot=0x12253, }, [0x12254]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES ASH", direction="l", linebreak="al", unicodeslot=0x12254, }, [0x12255]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES ASH PLUS ASH", direction="l", linebreak="al", unicodeslot=0x12255, }, [0x12256]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES GUD", direction="l", linebreak="al", unicodeslot=0x12256, }, [0x12257]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES ME PLUS GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x12257, }, [0x12258]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES NE", direction="l", linebreak="al", unicodeslot=0x12258, }, [0x12259]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES NUN", direction="l", linebreak="al", unicodeslot=0x12259, }, [0x1225A]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES SHE", direction="l", linebreak="al", unicodeslot=0x1225A, }, [0x1225B]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES SHE PLUS A AN", direction="l", linebreak="al", unicodeslot=0x1225B, }, [0x1225C]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES SHE PLUS ASH", direction="l", linebreak="al", unicodeslot=0x1225C, }, [0x1225D]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES SHE PLUS ASH PLUS ASH", direction="l", linebreak="al", unicodeslot=0x1225D, }, [0x1225E]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES U0x0002 PLUS ASH", direction="l", linebreak="al", unicodeslot=0x1225E, }, [0x1225F]={ category="lo", description="CUNEIFORM SIGN NINDA0x0002 TIMES USH", direction="l", linebreak="al", unicodeslot=0x1225F, }, [0x12260]={ category="lo", description="CUNEIFORM SIGN NISAG", direction="l", linebreak="al", unicodeslot=0x12260, }, [0x12261]={ category="lo", description="CUNEIFORM SIGN NU", direction="l", linebreak="al", unicodeslot=0x12261, }, [0x12262]={ category="lo", description="CUNEIFORM SIGN NU0x000B", direction="l", linebreak="al", unicodeslot=0x12262, }, [0x12263]={ category="lo", description="CUNEIFORM SIGN NUN", direction="l", linebreak="al", unicodeslot=0x12263, }, [0x12264]={ category="lo", description="CUNEIFORM SIGN NUN LAGAR TIMES GAR", direction="l", linebreak="al", unicodeslot=0x12264, }, [0x12265]={ category="lo", description="CUNEIFORM SIGN NUN LAGAR TIMES MASH", direction="l", linebreak="al", unicodeslot=0x12265, }, [0x12266]={ category="lo", description="CUNEIFORM SIGN NUN LAGAR TIMES SAL", direction="l", linebreak="al", unicodeslot=0x12266, }, [0x12267]={ category="lo", description="CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL", direction="l", linebreak="al", unicodeslot=0x12267, }, [0x12268]={ category="lo", description="CUNEIFORM SIGN NUN LAGAR TIMES USH", direction="l", linebreak="al", unicodeslot=0x12268, }, [0x12269]={ category="lo", description="CUNEIFORM SIGN NUN TENU", direction="l", linebreak="al", unicodeslot=0x12269, }, [0x1226A]={ category="lo", description="CUNEIFORM SIGN NUN OVER NUN", direction="l", linebreak="al", unicodeslot=0x1226A, }, [0x1226B]={ category="lo", description="CUNEIFORM SIGN NUN CROSSING NUN", direction="l", linebreak="al", unicodeslot=0x1226B, }, [0x1226C]={ category="lo", description="CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR", direction="l", linebreak="al", unicodeslot=0x1226C, }, [0x1226D]={ category="lo", description="CUNEIFORM SIGN NUNUZ", direction="l", linebreak="al", unicodeslot=0x1226D, }, [0x1226E]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES ASHGAB", direction="l", linebreak="al", unicodeslot=0x1226E, }, [0x1226F]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES BI", direction="l", linebreak="al", unicodeslot=0x1226F, }, [0x12270]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES DUG", direction="l", linebreak="al", unicodeslot=0x12270, }, [0x12271]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES GUD", direction="l", linebreak="al", unicodeslot=0x12271, }, [0x12272]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x12272, }, [0x12273]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES KAD0x0003", direction="l", linebreak="al", unicodeslot=0x12273, }, [0x12274]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES LA", direction="l", linebreak="al", unicodeslot=0x12274, }, [0x12275]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES NE", direction="l", linebreak="al", unicodeslot=0x12275, }, [0x12276]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES SILA0x0003", direction="l", linebreak="al", unicodeslot=0x12276, }, [0x12277]={ category="lo", description="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES U0x0002", direction="l", linebreak="al", unicodeslot=0x12277, }, [0x12278]={ category="lo", description="CUNEIFORM SIGN NUNUZ KISIM0x0005 TIMES BI", direction="l", linebreak="al", unicodeslot=0x12278, }, [0x12279]={ category="lo", description="CUNEIFORM SIGN NUNUZ KISIM0x0005 TIMES BI U", direction="l", linebreak="al", unicodeslot=0x12279, }, [0x1227A]={ category="lo", description="CUNEIFORM SIGN PA", direction="l", linebreak="al", unicodeslot=0x1227A, }, [0x1227B]={ category="lo", description="CUNEIFORM SIGN PAD", direction="l", linebreak="al", unicodeslot=0x1227B, }, [0x1227C]={ category="lo", description="CUNEIFORM SIGN PAN", direction="l", linebreak="al", unicodeslot=0x1227C, }, [0x1227D]={ category="lo", description="CUNEIFORM SIGN PAP", direction="l", linebreak="al", unicodeslot=0x1227D, }, [0x1227E]={ category="lo", description="CUNEIFORM SIGN PESH0x0002", direction="l", linebreak="al", unicodeslot=0x1227E, }, [0x1227F]={ category="lo", description="CUNEIFORM SIGN PI", direction="l", linebreak="al", unicodeslot=0x1227F, }, [0x12280]={ category="lo", description="CUNEIFORM SIGN PI TIMES A", direction="l", linebreak="al", unicodeslot=0x12280, }, [0x12281]={ category="lo", description="CUNEIFORM SIGN PI TIMES AB", direction="l", linebreak="al", unicodeslot=0x12281, }, [0x12282]={ category="lo", description="CUNEIFORM SIGN PI TIMES BI", direction="l", linebreak="al", unicodeslot=0x12282, }, [0x12283]={ category="lo", description="CUNEIFORM SIGN PI TIMES BU", direction="l", linebreak="al", unicodeslot=0x12283, }, [0x12284]={ category="lo", description="CUNEIFORM SIGN PI TIMES E", direction="l", linebreak="al", unicodeslot=0x12284, }, [0x12285]={ category="lo", description="CUNEIFORM SIGN PI TIMES I", direction="l", linebreak="al", unicodeslot=0x12285, }, [0x12286]={ category="lo", description="CUNEIFORM SIGN PI TIMES IB", direction="l", linebreak="al", unicodeslot=0x12286, }, [0x12287]={ category="lo", description="CUNEIFORM SIGN PI TIMES U", direction="l", linebreak="al", unicodeslot=0x12287, }, [0x12288]={ category="lo", description="CUNEIFORM SIGN PI TIMES U0x0002", direction="l", linebreak="al", unicodeslot=0x12288, }, [0x12289]={ category="lo", description="CUNEIFORM SIGN PI CROSSING PI", direction="l", linebreak="al", unicodeslot=0x12289, }, [0x1228A]={ category="lo", description="CUNEIFORM SIGN PIRIG", direction="l", linebreak="al", unicodeslot=0x1228A, }, [0x1228B]={ category="lo", description="CUNEIFORM SIGN PIRIG TIMES KAL", direction="l", linebreak="al", unicodeslot=0x1228B, }, [0x1228C]={ category="lo", description="CUNEIFORM SIGN PIRIG TIMES UD", direction="l", linebreak="al", unicodeslot=0x1228C, }, [0x1228D]={ category="lo", description="CUNEIFORM SIGN PIRIG TIMES ZA", direction="l", linebreak="al", unicodeslot=0x1228D, }, [0x1228E]={ category="lo", description="CUNEIFORM SIGN PIRIG OPPOSING PIRIG", direction="l", linebreak="al", unicodeslot=0x1228E, }, [0x1228F]={ category="lo", description="CUNEIFORM SIGN RA", direction="l", linebreak="al", unicodeslot=0x1228F, }, [0x12290]={ category="lo", description="CUNEIFORM SIGN RAB", direction="l", linebreak="al", unicodeslot=0x12290, }, [0x12291]={ category="lo", description="CUNEIFORM SIGN RI", direction="l", linebreak="al", unicodeslot=0x12291, }, [0x12292]={ category="lo", description="CUNEIFORM SIGN RU", direction="l", linebreak="al", unicodeslot=0x12292, }, [0x12293]={ category="lo", description="CUNEIFORM SIGN SA", direction="l", linebreak="al", unicodeslot=0x12293, }, [0x12294]={ category="lo", description="CUNEIFORM SIGN SAG NUTILLU", direction="l", linebreak="al", unicodeslot=0x12294, }, [0x12295]={ category="lo", description="CUNEIFORM SIGN SAG", direction="l", linebreak="al", unicodeslot=0x12295, }, [0x12296]={ category="lo", description="CUNEIFORM SIGN SAG TIMES A", direction="l", linebreak="al", unicodeslot=0x12296, }, [0x12297]={ category="lo", description="CUNEIFORM SIGN SAG TIMES DU", direction="l", linebreak="al", unicodeslot=0x12297, }, [0x12298]={ category="lo", description="CUNEIFORM SIGN SAG TIMES DUB", direction="l", linebreak="al", unicodeslot=0x12298, }, [0x12299]={ category="lo", description="CUNEIFORM SIGN SAG TIMES HA", direction="l", linebreak="al", unicodeslot=0x12299, }, [0x1229A]={ category="lo", description="CUNEIFORM SIGN SAG TIMES KAK", direction="l", linebreak="al", unicodeslot=0x1229A, }, [0x1229B]={ category="lo", description="CUNEIFORM SIGN SAG TIMES KUR", direction="l", linebreak="al", unicodeslot=0x1229B, }, [0x1229C]={ category="lo", description="CUNEIFORM SIGN SAG TIMES LUM", direction="l", linebreak="al", unicodeslot=0x1229C, }, [0x1229D]={ category="lo", description="CUNEIFORM SIGN SAG TIMES MI", direction="l", linebreak="al", unicodeslot=0x1229D, }, [0x1229E]={ category="lo", description="CUNEIFORM SIGN SAG TIMES NUN", direction="l", linebreak="al", unicodeslot=0x1229E, }, [0x1229F]={ category="lo", description="CUNEIFORM SIGN SAG TIMES SAL", direction="l", linebreak="al", unicodeslot=0x1229F, }, [0x122A0]={ category="lo", description="CUNEIFORM SIGN SAG TIMES SHID", direction="l", linebreak="al", unicodeslot=0x122A0, }, [0x122A1]={ category="lo", description="CUNEIFORM SIGN SAG TIMES TAB", direction="l", linebreak="al", unicodeslot=0x122A1, }, [0x122A2]={ category="lo", description="CUNEIFORM SIGN SAG TIMES U0x0002", direction="l", linebreak="al", unicodeslot=0x122A2, }, [0x122A3]={ category="lo", description="CUNEIFORM SIGN SAG TIMES UB", direction="l", linebreak="al", unicodeslot=0x122A3, }, [0x122A4]={ category="lo", description="CUNEIFORM SIGN SAG TIMES UM", direction="l", linebreak="al", unicodeslot=0x122A4, }, [0x122A5]={ category="lo", description="CUNEIFORM SIGN SAG TIMES UR", direction="l", linebreak="al", unicodeslot=0x122A5, }, [0x122A6]={ category="lo", description="CUNEIFORM SIGN SAG TIMES USH", direction="l", linebreak="al", unicodeslot=0x122A6, }, [0x122A7]={ category="lo", description="CUNEIFORM SIGN SAG OVER SAG", direction="l", linebreak="al", unicodeslot=0x122A7, }, [0x122A8]={ category="lo", description="CUNEIFORM SIGN SAG GUNU", direction="l", linebreak="al", unicodeslot=0x122A8, }, [0x122A9]={ category="lo", description="CUNEIFORM SIGN SAL", direction="l", linebreak="al", unicodeslot=0x122A9, }, [0x122AA]={ category="lo", description="CUNEIFORM SIGN SAL LAGAB TIMES ASH0x0002", direction="l", linebreak="al", unicodeslot=0x122AA, }, [0x122AB]={ category="lo", description="CUNEIFORM SIGN SANGA0x0002", direction="l", linebreak="al", unicodeslot=0x122AB, }, [0x122AC]={ category="lo", description="CUNEIFORM SIGN SAR", direction="l", linebreak="al", unicodeslot=0x122AC, }, [0x122AD]={ category="lo", description="CUNEIFORM SIGN SHA", direction="l", linebreak="al", unicodeslot=0x122AD, }, [0x122AE]={ category="lo", description="CUNEIFORM SIGN SHA0x0003", direction="l", linebreak="al", unicodeslot=0x122AE, }, [0x122AF]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES A", direction="l", linebreak="al", unicodeslot=0x122AF, }, [0x122B0]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES BAD", direction="l", linebreak="al", unicodeslot=0x122B0, }, [0x122B1]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES GISH", direction="l", linebreak="al", unicodeslot=0x122B1, }, [0x122B2]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES NE", direction="l", linebreak="al", unicodeslot=0x122B2, }, [0x122B3]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES SHU0x0002", direction="l", linebreak="al", unicodeslot=0x122B3, }, [0x122B4]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES TUR", direction="l", linebreak="al", unicodeslot=0x122B4, }, [0x122B5]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES U", direction="l", linebreak="al", unicodeslot=0x122B5, }, [0x122B6]={ category="lo", description="CUNEIFORM SIGN SHA0x0003 TIMES U PLUS A", direction="l", linebreak="al", unicodeslot=0x122B6, }, [0x122B7]={ category="lo", description="CUNEIFORM SIGN SHA0x0006", direction="l", linebreak="al", unicodeslot=0x122B7, }, [0x122B8]={ category="lo", description="CUNEIFORM SIGN SHAB0x0006", direction="l", linebreak="al", unicodeslot=0x122B8, }, [0x122B9]={ category="lo", description="CUNEIFORM SIGN SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x122B9, }, [0x122BA]={ category="lo", description="CUNEIFORM SIGN SHE", direction="l", linebreak="al", unicodeslot=0x122BA, }, [0x122BB]={ category="lo", description="CUNEIFORM SIGN SHE HU", direction="l", linebreak="al", unicodeslot=0x122BB, }, [0x122BC]={ category="lo", description="CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x122BC, }, [0x122BD]={ category="lo", description="CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x122BD, }, [0x122BE]={ category="lo", description="CUNEIFORM SIGN SHEG0x0009", direction="l", linebreak="al", unicodeslot=0x122BE, }, [0x122BF]={ category="lo", description="CUNEIFORM SIGN SHEN", direction="l", linebreak="al", unicodeslot=0x122BF, }, [0x122C0]={ category="lo", description="CUNEIFORM SIGN SHESH", direction="l", linebreak="al", unicodeslot=0x122C0, }, [0x122C1]={ category="lo", description="CUNEIFORM SIGN SHESH0x0002", direction="l", linebreak="al", unicodeslot=0x122C1, }, [0x122C2]={ category="lo", description="CUNEIFORM SIGN SHESHLAM", direction="l", linebreak="al", unicodeslot=0x122C2, }, [0x122C3]={ category="lo", description="CUNEIFORM SIGN SHID", direction="l", linebreak="al", unicodeslot=0x122C3, }, [0x122C4]={ category="lo", description="CUNEIFORM SIGN SHID TIMES A", direction="l", linebreak="al", unicodeslot=0x122C4, }, [0x122C5]={ category="lo", description="CUNEIFORM SIGN SHID TIMES IM", direction="l", linebreak="al", unicodeslot=0x122C5, }, [0x122C6]={ category="lo", description="CUNEIFORM SIGN SHIM", direction="l", linebreak="al", unicodeslot=0x122C6, }, [0x122C7]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES A", direction="l", linebreak="al", unicodeslot=0x122C7, }, [0x122C8]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES BAL", direction="l", linebreak="al", unicodeslot=0x122C8, }, [0x122C9]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES BULUG", direction="l", linebreak="al", unicodeslot=0x122C9, }, [0x122CA]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES DIN", direction="l", linebreak="al", unicodeslot=0x122CA, }, [0x122CB]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES GAR", direction="l", linebreak="al", unicodeslot=0x122CB, }, [0x122CC]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES IGI", direction="l", linebreak="al", unicodeslot=0x122CC, }, [0x122CD]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES IGI GUNU", direction="l", linebreak="al", unicodeslot=0x122CD, }, [0x122CE]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES KUSHU0x0002", direction="l", linebreak="al", unicodeslot=0x122CE, }, [0x122CF]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES LUL", direction="l", linebreak="al", unicodeslot=0x122CF, }, [0x122D0]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES MUG", direction="l", linebreak="al", unicodeslot=0x122D0, }, [0x122D1]={ category="lo", description="CUNEIFORM SIGN SHIM TIMES SAL", direction="l", linebreak="al", unicodeslot=0x122D1, }, [0x122D2]={ category="lo", description="CUNEIFORM SIGN SHINIG", direction="l", linebreak="al", unicodeslot=0x122D2, }, [0x122D3]={ category="lo", description="CUNEIFORM SIGN SHIR", direction="l", linebreak="al", unicodeslot=0x122D3, }, [0x122D4]={ category="lo", description="CUNEIFORM SIGN SHIR TENU", direction="l", linebreak="al", unicodeslot=0x122D4, }, [0x122D5]={ category="lo", description="CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR", direction="l", linebreak="al", unicodeslot=0x122D5, }, [0x122D6]={ category="lo", description="CUNEIFORM SIGN SHITA", direction="l", linebreak="al", unicodeslot=0x122D6, }, [0x122D7]={ category="lo", description="CUNEIFORM SIGN SHU", direction="l", linebreak="al", unicodeslot=0x122D7, }, [0x122D8]={ category="lo", description="CUNEIFORM SIGN SHU OVER INVERTED SHU", direction="l", linebreak="al", unicodeslot=0x122D8, }, [0x122D9]={ category="lo", description="CUNEIFORM SIGN SHU0x0002", direction="l", linebreak="al", unicodeslot=0x122D9, }, [0x122DA]={ category="lo", description="CUNEIFORM SIGN SHUBUR", direction="l", linebreak="al", unicodeslot=0x122DA, }, [0x122DB]={ category="lo", description="CUNEIFORM SIGN SI", direction="l", linebreak="al", unicodeslot=0x122DB, }, [0x122DC]={ category="lo", description="CUNEIFORM SIGN SI GUNU", direction="l", linebreak="al", unicodeslot=0x122DC, }, [0x122DD]={ category="lo", description="CUNEIFORM SIGN SIG", direction="l", linebreak="al", unicodeslot=0x122DD, }, [0x122DE]={ category="lo", description="CUNEIFORM SIGN SIG0x0004", direction="l", linebreak="al", unicodeslot=0x122DE, }, [0x122DF]={ category="lo", description="CUNEIFORM SIGN SIG0x0004 OVER SIG0x0004 SHU0x0002", direction="l", linebreak="al", unicodeslot=0x122DF, }, [0x122E0]={ category="lo", description="CUNEIFORM SIGN SIK0x0002", direction="l", linebreak="al", unicodeslot=0x122E0, }, [0x122E1]={ category="lo", description="CUNEIFORM SIGN SILA0x0003", direction="l", linebreak="al", unicodeslot=0x122E1, }, [0x122E2]={ category="lo", description="CUNEIFORM SIGN SU", direction="l", linebreak="al", unicodeslot=0x122E2, }, [0x122E3]={ category="lo", description="CUNEIFORM SIGN SU OVER SU", direction="l", linebreak="al", unicodeslot=0x122E3, }, [0x122E4]={ category="lo", description="CUNEIFORM SIGN SUD", direction="l", linebreak="al", unicodeslot=0x122E4, }, [0x122E5]={ category="lo", description="CUNEIFORM SIGN SUD0x0002", direction="l", linebreak="al", unicodeslot=0x122E5, }, [0x122E6]={ category="lo", description="CUNEIFORM SIGN SUHUR", direction="l", linebreak="al", unicodeslot=0x122E6, }, [0x122E7]={ category="lo", description="CUNEIFORM SIGN SUM", direction="l", linebreak="al", unicodeslot=0x122E7, }, [0x122E8]={ category="lo", description="CUNEIFORM SIGN SUMASH", direction="l", linebreak="al", unicodeslot=0x122E8, }, [0x122E9]={ category="lo", description="CUNEIFORM SIGN SUR", direction="l", linebreak="al", unicodeslot=0x122E9, }, [0x122EA]={ category="lo", description="CUNEIFORM SIGN SUR0x0009", direction="l", linebreak="al", unicodeslot=0x122EA, }, [0x122EB]={ category="lo", description="CUNEIFORM SIGN TA", direction="l", linebreak="al", unicodeslot=0x122EB, }, [0x122EC]={ category="lo", description="CUNEIFORM SIGN TA ASTERISK", direction="l", linebreak="al", unicodeslot=0x122EC, }, [0x122ED]={ category="lo", description="CUNEIFORM SIGN TA TIMES HI", direction="l", linebreak="al", unicodeslot=0x122ED, }, [0x122EE]={ category="lo", description="CUNEIFORM SIGN TA TIMES MI", direction="l", linebreak="al", unicodeslot=0x122EE, }, [0x122EF]={ category="lo", description="CUNEIFORM SIGN TA GUNU", direction="l", linebreak="al", unicodeslot=0x122EF, }, [0x122F0]={ category="lo", description="CUNEIFORM SIGN TAB", direction="l", linebreak="al", unicodeslot=0x122F0, }, [0x122F1]={ category="lo", description="CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH", direction="l", linebreak="al", unicodeslot=0x122F1, }, [0x122F2]={ category="lo", description="CUNEIFORM SIGN TAB SQUARED", direction="l", linebreak="al", unicodeslot=0x122F2, }, [0x122F3]={ category="lo", description="CUNEIFORM SIGN TAG", direction="l", linebreak="al", unicodeslot=0x122F3, }, [0x122F4]={ category="lo", description="CUNEIFORM SIGN TAG TIMES BI", direction="l", linebreak="al", unicodeslot=0x122F4, }, [0x122F5]={ category="lo", description="CUNEIFORM SIGN TAG TIMES GUD", direction="l", linebreak="al", unicodeslot=0x122F5, }, [0x122F6]={ category="lo", description="CUNEIFORM SIGN TAG TIMES SHE", direction="l", linebreak="al", unicodeslot=0x122F6, }, [0x122F7]={ category="lo", description="CUNEIFORM SIGN TAG TIMES SHU", direction="l", linebreak="al", unicodeslot=0x122F7, }, [0x122F8]={ category="lo", description="CUNEIFORM SIGN TAG TIMES TUG0x0002", direction="l", linebreak="al", unicodeslot=0x122F8, }, [0x122F9]={ category="lo", description="CUNEIFORM SIGN TAG TIMES UD", direction="l", linebreak="al", unicodeslot=0x122F9, }, [0x122FA]={ category="lo", description="CUNEIFORM SIGN TAK0x0004", direction="l", linebreak="al", unicodeslot=0x122FA, }, [0x122FB]={ category="lo", description="CUNEIFORM SIGN TAR", direction="l", linebreak="al", unicodeslot=0x122FB, }, [0x122FC]={ category="lo", description="CUNEIFORM SIGN TE", direction="l", linebreak="al", unicodeslot=0x122FC, }, [0x122FD]={ category="lo", description="CUNEIFORM SIGN TE GUNU", direction="l", linebreak="al", unicodeslot=0x122FD, }, [0x122FE]={ category="lo", description="CUNEIFORM SIGN TI", direction="l", linebreak="al", unicodeslot=0x122FE, }, [0x122FF]={ category="lo", description="CUNEIFORM SIGN TI TENU", direction="l", linebreak="al", unicodeslot=0x122FF, }, [0x12300]={ category="lo", description="CUNEIFORM SIGN TIL", direction="l", linebreak="al", unicodeslot=0x12300, }, [0x12301]={ category="lo", description="CUNEIFORM SIGN TIR", direction="l", linebreak="al", unicodeslot=0x12301, }, [0x12302]={ category="lo", description="CUNEIFORM SIGN TIR TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x12302, }, [0x12303]={ category="lo", description="CUNEIFORM SIGN TIR OVER TIR", direction="l", linebreak="al", unicodeslot=0x12303, }, [0x12304]={ category="lo", description="CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x12304, }, [0x12305]={ category="lo", description="CUNEIFORM SIGN TU", direction="l", linebreak="al", unicodeslot=0x12305, }, [0x12306]={ category="lo", description="CUNEIFORM SIGN TUG0x0002", direction="l", linebreak="al", unicodeslot=0x12306, }, [0x12307]={ category="lo", description="CUNEIFORM SIGN TUK", direction="l", linebreak="al", unicodeslot=0x12307, }, [0x12308]={ category="lo", description="CUNEIFORM SIGN TUM", direction="l", linebreak="al", unicodeslot=0x12308, }, [0x12309]={ category="lo", description="CUNEIFORM SIGN TUR", direction="l", linebreak="al", unicodeslot=0x12309, }, [0x1230A]={ category="lo", description="CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA", direction="l", linebreak="al", unicodeslot=0x1230A, }, [0x1230B]={ category="lo", description="CUNEIFORM SIGN U", direction="l", linebreak="al", unicodeslot=0x1230B, }, [0x1230C]={ category="lo", description="CUNEIFORM SIGN U GUD", direction="l", linebreak="al", unicodeslot=0x1230C, }, [0x1230D]={ category="lo", description="CUNEIFORM SIGN U U U", direction="l", linebreak="al", unicodeslot=0x1230D, }, [0x1230E]={ category="lo", description="CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR", direction="l", linebreak="al", unicodeslot=0x1230E, }, [0x1230F]={ category="lo", description="CUNEIFORM SIGN U OVER U SUR OVER SUR", direction="l", linebreak="al", unicodeslot=0x1230F, }, [0x12310]={ category="lo", description="CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED", direction="l", linebreak="al", unicodeslot=0x12310, }, [0x12311]={ category="lo", description="CUNEIFORM SIGN U0x0002", direction="l", linebreak="al", unicodeslot=0x12311, }, [0x12312]={ category="lo", description="CUNEIFORM SIGN UB", direction="l", linebreak="al", unicodeslot=0x12312, }, [0x12313]={ category="lo", description="CUNEIFORM SIGN UD", direction="l", linebreak="al", unicodeslot=0x12313, }, [0x12314]={ category="lo", description="CUNEIFORM SIGN UD KUSHU0x0002", direction="l", linebreak="al", unicodeslot=0x12314, }, [0x12315]={ category="lo", description="CUNEIFORM SIGN UD TIMES BAD", direction="l", linebreak="al", unicodeslot=0x12315, }, [0x12316]={ category="lo", description="CUNEIFORM SIGN UD TIMES MI", direction="l", linebreak="al", unicodeslot=0x12316, }, [0x12317]={ category="lo", description="CUNEIFORM SIGN UD TIMES U PLUS U PLUS U", direction="l", linebreak="al", unicodeslot=0x12317, }, [0x12318]={ category="lo", description="CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU", direction="l", linebreak="al", unicodeslot=0x12318, }, [0x12319]={ category="lo", description="CUNEIFORM SIGN UD GUNU", direction="l", linebreak="al", unicodeslot=0x12319, }, [0x1231A]={ category="lo", description="CUNEIFORM SIGN UD SHESHIG", direction="l", linebreak="al", unicodeslot=0x1231A, }, [0x1231B]={ category="lo", description="CUNEIFORM SIGN UD SHESHIG TIMES BAD", direction="l", linebreak="al", unicodeslot=0x1231B, }, [0x1231C]={ category="lo", description="CUNEIFORM SIGN UDUG", direction="l", linebreak="al", unicodeslot=0x1231C, }, [0x1231D]={ category="lo", description="CUNEIFORM SIGN UM", direction="l", linebreak="al", unicodeslot=0x1231D, }, [0x1231E]={ category="lo", description="CUNEIFORM SIGN UM TIMES LAGAB", direction="l", linebreak="al", unicodeslot=0x1231E, }, [0x1231F]={ category="lo", description="CUNEIFORM SIGN UM TIMES ME PLUS DA", direction="l", linebreak="al", unicodeslot=0x1231F, }, [0x12320]={ category="lo", description="CUNEIFORM SIGN UM TIMES SHA0x0003", direction="l", linebreak="al", unicodeslot=0x12320, }, [0x12321]={ category="lo", description="CUNEIFORM SIGN UM TIMES U", direction="l", linebreak="al", unicodeslot=0x12321, }, [0x12322]={ category="lo", description="CUNEIFORM SIGN UMBIN", direction="l", linebreak="al", unicodeslot=0x12322, }, [0x12323]={ category="lo", description="CUNEIFORM SIGN UMUM", direction="l", linebreak="al", unicodeslot=0x12323, }, [0x12324]={ category="lo", description="CUNEIFORM SIGN UMUM TIMES KASKAL", direction="l", linebreak="al", unicodeslot=0x12324, }, [0x12325]={ category="lo", description="CUNEIFORM SIGN UMUM TIMES PA", direction="l", linebreak="al", unicodeslot=0x12325, }, [0x12326]={ category="lo", description="CUNEIFORM SIGN UN", direction="l", linebreak="al", unicodeslot=0x12326, }, [0x12327]={ category="lo", description="CUNEIFORM SIGN UN GUNU", direction="l", linebreak="al", unicodeslot=0x12327, }, [0x12328]={ category="lo", description="CUNEIFORM SIGN UR", direction="l", linebreak="al", unicodeslot=0x12328, }, [0x12329]={ category="lo", description="CUNEIFORM SIGN UR CROSSING UR", direction="l", linebreak="al", unicodeslot=0x12329, }, [0x1232A]={ category="lo", description="CUNEIFORM SIGN UR SHESHIG", direction="l", linebreak="al", unicodeslot=0x1232A, }, [0x1232B]={ category="lo", description="CUNEIFORM SIGN UR0x0002", direction="l", linebreak="al", unicodeslot=0x1232B, }, [0x1232C]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES A PLUS HA", direction="l", linebreak="al", unicodeslot=0x1232C, }, [0x1232D]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES A PLUS NA", direction="l", linebreak="al", unicodeslot=0x1232D, }, [0x1232E]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES AL", direction="l", linebreak="al", unicodeslot=0x1232E, }, [0x1232F]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES HA", direction="l", linebreak="al", unicodeslot=0x1232F, }, [0x12330]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES NUN", direction="l", linebreak="al", unicodeslot=0x12330, }, [0x12331]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES U0x0002", direction="l", linebreak="al", unicodeslot=0x12331, }, [0x12332]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES U0x0002 PLUS ASH", direction="l", linebreak="al", unicodeslot=0x12332, }, [0x12333]={ category="lo", description="CUNEIFORM SIGN UR0x0002 TIMES U0x0002 PLUS BI", direction="l", linebreak="al", unicodeslot=0x12333, }, [0x12334]={ category="lo", description="CUNEIFORM SIGN UR0x0004", direction="l", linebreak="al", unicodeslot=0x12334, }, [0x12335]={ category="lo", description="CUNEIFORM SIGN URI", direction="l", linebreak="al", unicodeslot=0x12335, }, [0x12336]={ category="lo", description="CUNEIFORM SIGN URI0x0003", direction="l", linebreak="al", unicodeslot=0x12336, }, [0x12337]={ category="lo", description="CUNEIFORM SIGN URU", direction="l", linebreak="al", unicodeslot=0x12337, }, [0x12338]={ category="lo", description="CUNEIFORM SIGN URU TIMES A", direction="l", linebreak="al", unicodeslot=0x12338, }, [0x12339]={ category="lo", description="CUNEIFORM SIGN URU TIMES ASHGAB", direction="l", linebreak="al", unicodeslot=0x12339, }, [0x1233A]={ category="lo", description="CUNEIFORM SIGN URU TIMES BAR", direction="l", linebreak="al", unicodeslot=0x1233A, }, [0x1233B]={ category="lo", description="CUNEIFORM SIGN URU TIMES DUN", direction="l", linebreak="al", unicodeslot=0x1233B, }, [0x1233C]={ category="lo", description="CUNEIFORM SIGN URU TIMES GA", direction="l", linebreak="al", unicodeslot=0x1233C, }, [0x1233D]={ category="lo", description="CUNEIFORM SIGN URU TIMES GAL", direction="l", linebreak="al", unicodeslot=0x1233D, }, [0x1233E]={ category="lo", description="CUNEIFORM SIGN URU TIMES GAN0x0002 TENU", direction="l", linebreak="al", unicodeslot=0x1233E, }, [0x1233F]={ category="lo", description="CUNEIFORM SIGN URU TIMES GAR", direction="l", linebreak="al", unicodeslot=0x1233F, }, [0x12340]={ category="lo", description="CUNEIFORM SIGN URU TIMES GU", direction="l", linebreak="al", unicodeslot=0x12340, }, [0x12341]={ category="lo", description="CUNEIFORM SIGN URU TIMES HA", direction="l", linebreak="al", unicodeslot=0x12341, }, [0x12342]={ category="lo", description="CUNEIFORM SIGN URU TIMES IGI", direction="l", linebreak="al", unicodeslot=0x12342, }, [0x12343]={ category="lo", description="CUNEIFORM SIGN URU TIMES IM", direction="l", linebreak="al", unicodeslot=0x12343, }, [0x12344]={ category="lo", description="CUNEIFORM SIGN URU TIMES ISH", direction="l", linebreak="al", unicodeslot=0x12344, }, [0x12345]={ category="lo", description="CUNEIFORM SIGN URU TIMES KI", direction="l", linebreak="al", unicodeslot=0x12345, }, [0x12346]={ category="lo", description="CUNEIFORM SIGN URU TIMES LUM", direction="l", linebreak="al", unicodeslot=0x12346, }, [0x12347]={ category="lo", description="CUNEIFORM SIGN URU TIMES MIN", direction="l", linebreak="al", unicodeslot=0x12347, }, [0x12348]={ category="lo", description="CUNEIFORM SIGN URU TIMES PA", direction="l", linebreak="al", unicodeslot=0x12348, }, [0x12349]={ category="lo", description="CUNEIFORM SIGN URU TIMES SHE", direction="l", linebreak="al", unicodeslot=0x12349, }, [0x1234A]={ category="lo", description="CUNEIFORM SIGN URU TIMES SIG0x0004", direction="l", linebreak="al", unicodeslot=0x1234A, }, [0x1234B]={ category="lo", description="CUNEIFORM SIGN URU TIMES TU", direction="l", linebreak="al", unicodeslot=0x1234B, }, [0x1234C]={ category="lo", description="CUNEIFORM SIGN URU TIMES U PLUS GUD", direction="l", linebreak="al", unicodeslot=0x1234C, }, [0x1234D]={ category="lo", description="CUNEIFORM SIGN URU TIMES UD", direction="l", linebreak="al", unicodeslot=0x1234D, }, [0x1234E]={ category="lo", description="CUNEIFORM SIGN URU TIMES URUDA", direction="l", linebreak="al", unicodeslot=0x1234E, }, [0x1234F]={ category="lo", description="CUNEIFORM SIGN URUDA", direction="l", linebreak="al", unicodeslot=0x1234F, }, [0x12350]={ category="lo", description="CUNEIFORM SIGN URUDA TIMES U", direction="l", linebreak="al", unicodeslot=0x12350, }, [0x12351]={ category="lo", description="CUNEIFORM SIGN USH", direction="l", linebreak="al", unicodeslot=0x12351, }, [0x12352]={ category="lo", description="CUNEIFORM SIGN USH TIMES A", direction="l", linebreak="al", unicodeslot=0x12352, }, [0x12353]={ category="lo", description="CUNEIFORM SIGN USH TIMES KU", direction="l", linebreak="al", unicodeslot=0x12353, }, [0x12354]={ category="lo", description="CUNEIFORM SIGN USH TIMES KUR", direction="l", linebreak="al", unicodeslot=0x12354, }, [0x12355]={ category="lo", description="CUNEIFORM SIGN USH TIMES TAK0x0004", direction="l", linebreak="al", unicodeslot=0x12355, }, [0x12356]={ category="lo", description="CUNEIFORM SIGN USHX", direction="l", linebreak="al", unicodeslot=0x12356, }, [0x12357]={ category="lo", description="CUNEIFORM SIGN USH0x0002", direction="l", linebreak="al", unicodeslot=0x12357, }, [0x12358]={ category="lo", description="CUNEIFORM SIGN USHUMX", direction="l", linebreak="al", unicodeslot=0x12358, }, [0x12359]={ category="lo", description="CUNEIFORM SIGN UTUKI", direction="l", linebreak="al", unicodeslot=0x12359, }, [0x1235A]={ category="lo", description="CUNEIFORM SIGN UZ0x0003", direction="l", linebreak="al", unicodeslot=0x1235A, }, [0x1235B]={ category="lo", description="CUNEIFORM SIGN UZ0x0003 TIMES KASKAL", direction="l", linebreak="al", unicodeslot=0x1235B, }, [0x1235C]={ category="lo", description="CUNEIFORM SIGN UZU", direction="l", linebreak="al", unicodeslot=0x1235C, }, [0x1235D]={ category="lo", description="CUNEIFORM SIGN ZA", direction="l", linebreak="al", unicodeslot=0x1235D, }, [0x1235E]={ category="lo", description="CUNEIFORM SIGN ZA TENU", direction="l", linebreak="al", unicodeslot=0x1235E, }, [0x1235F]={ category="lo", description="CUNEIFORM SIGN ZA SQUARED TIMES KUR", direction="l", linebreak="al", unicodeslot=0x1235F, }, [0x12360]={ category="lo", description="CUNEIFORM SIGN ZAG", direction="l", linebreak="al", unicodeslot=0x12360, }, [0x12361]={ category="lo", description="CUNEIFORM SIGN ZAMX", direction="l", linebreak="al", unicodeslot=0x12361, }, [0x12362]={ category="lo", description="CUNEIFORM SIGN ZE0x0002", direction="l", linebreak="al", unicodeslot=0x12362, }, [0x12363]={ category="lo", description="CUNEIFORM SIGN ZI", direction="l", linebreak="al", unicodeslot=0x12363, }, [0x12364]={ category="lo", description="CUNEIFORM SIGN ZI OVER ZI", direction="l", linebreak="al", unicodeslot=0x12364, }, [0x12365]={ category="lo", description="CUNEIFORM SIGN ZI0x0003", direction="l", linebreak="al", unicodeslot=0x12365, }, [0x12366]={ category="lo", description="CUNEIFORM SIGN ZIB", direction="l", linebreak="al", unicodeslot=0x12366, }, [0x12367]={ category="lo", description="CUNEIFORM SIGN ZIB KABA TENU", direction="l", linebreak="al", unicodeslot=0x12367, }, [0x12368]={ category="lo", description="CUNEIFORM SIGN ZIG", direction="l", linebreak="al", unicodeslot=0x12368, }, [0x12369]={ category="lo", description="CUNEIFORM SIGN ZIZ0x0002", direction="l", linebreak="al", unicodeslot=0x12369, }, [0x1236A]={ category="lo", description="CUNEIFORM SIGN ZU", direction="l", linebreak="al", unicodeslot=0x1236A, }, [0x1236B]={ category="lo", description="CUNEIFORM SIGN ZU0x0005", direction="l", linebreak="al", unicodeslot=0x1236B, }, [0x1236C]={ category="lo", description="CUNEIFORM SIGN ZU0x0005 TIMES A", direction="l", linebreak="al", unicodeslot=0x1236C, }, [0x1236D]={ category="lo", description="CUNEIFORM SIGN ZUBUR", direction="l", linebreak="al", unicodeslot=0x1236D, }, [0x1236E]={ category="lo", description="CUNEIFORM SIGN ZUM", direction="l", linebreak="al", unicodeslot=0x1236E, }, [0x12400]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO ASH", direction="l", linebreak="al", unicodeslot=0x12400, }, [0x12401]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE ASH", direction="l", linebreak="al", unicodeslot=0x12401, }, [0x12402]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR ASH", direction="l", linebreak="al", unicodeslot=0x12402, }, [0x12403]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE ASH", direction="l", linebreak="al", unicodeslot=0x12403, }, [0x12404]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX ASH", direction="l", linebreak="al", unicodeslot=0x12404, }, [0x12405]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN ASH", direction="l", linebreak="al", unicodeslot=0x12405, }, [0x12406]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT ASH", direction="l", linebreak="al", unicodeslot=0x12406, }, [0x12407]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE ASH", direction="l", linebreak="al", unicodeslot=0x12407, }, [0x12408]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE DISH", direction="l", linebreak="al", unicodeslot=0x12408, }, [0x12409]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR DISH", direction="l", linebreak="al", unicodeslot=0x12409, }, [0x1240A]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE DISH", direction="l", linebreak="al", unicodeslot=0x1240A, }, [0x1240B]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX DISH", direction="l", linebreak="al", unicodeslot=0x1240B, }, [0x1240C]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN DISH", direction="l", linebreak="al", unicodeslot=0x1240C, }, [0x1240D]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT DISH", direction="l", linebreak="al", unicodeslot=0x1240D, }, [0x1240E]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE DISH", direction="l", linebreak="al", unicodeslot=0x1240E, }, [0x1240F]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR U", direction="l", linebreak="al", unicodeslot=0x1240F, }, [0x12410]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE U", direction="l", linebreak="al", unicodeslot=0x12410, }, [0x12411]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX U", direction="l", linebreak="al", unicodeslot=0x12411, }, [0x12412]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN U", direction="l", linebreak="al", unicodeslot=0x12412, }, [0x12413]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT U", direction="l", linebreak="al", unicodeslot=0x12413, }, [0x12414]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE U", direction="l", linebreak="al", unicodeslot=0x12414, }, [0x12415]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE GESH0x0002", direction="l", linebreak="al", unicodeslot=0x12415, }, [0x12416]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO GESH0x0002", direction="l", linebreak="al", unicodeslot=0x12416, }, [0x12417]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE GESH0x0002", direction="l", linebreak="al", unicodeslot=0x12417, }, [0x12418]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR GESH0x0002", direction="l", linebreak="al", unicodeslot=0x12418, }, [0x12419]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE GESH0x0002", direction="l", linebreak="al", unicodeslot=0x12419, }, [0x1241A]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX GESH0x0002", direction="l", linebreak="al", unicodeslot=0x1241A, }, [0x1241B]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN GESH0x0002", direction="l", linebreak="al", unicodeslot=0x1241B, }, [0x1241C]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT GESH0x0002", direction="l", linebreak="al", unicodeslot=0x1241C, }, [0x1241D]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE GESH0x0002", direction="l", linebreak="al", unicodeslot=0x1241D, }, [0x1241E]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE GESHU", direction="l", linebreak="al", unicodeslot=0x1241E, }, [0x1241F]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO GESHU", direction="l", linebreak="al", unicodeslot=0x1241F, }, [0x12420]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE GESHU", direction="l", linebreak="al", unicodeslot=0x12420, }, [0x12421]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR GESHU", direction="l", linebreak="al", unicodeslot=0x12421, }, [0x12422]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE GESHU", direction="l", linebreak="al", unicodeslot=0x12422, }, [0x12423]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12423, }, [0x12424]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12424, }, [0x12425]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE SHAR0x0002 VARIANT FORM", direction="l", linebreak="al", unicodeslot=0x12425, }, [0x12426]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12426, }, [0x12427]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12427, }, [0x12428]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12428, }, [0x12429]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x12429, }, [0x1242A]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x1242A, }, [0x1242B]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE SHAR0x0002", direction="l", linebreak="al", unicodeslot=0x1242B, }, [0x1242C]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE SHARU", direction="l", linebreak="al", unicodeslot=0x1242C, }, [0x1242D]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO SHARU", direction="l", linebreak="al", unicodeslot=0x1242D, }, [0x1242E]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE SHARU", direction="l", linebreak="al", unicodeslot=0x1242E, }, [0x1242F]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM", direction="l", linebreak="al", unicodeslot=0x1242F, }, [0x12430]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR SHARU", direction="l", linebreak="al", unicodeslot=0x12430, }, [0x12431]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE SHARU", direction="l", linebreak="al", unicodeslot=0x12431, }, [0x12432]={ category="nl", description="CUNEIFORM NUMERIC SIGN SHAR0x0002 TIMES GAL PLUS DISH", direction="l", linebreak="al", unicodeslot=0x12432, }, [0x12433]={ category="nl", description="CUNEIFORM NUMERIC SIGN SHAR0x0002 TIMES GAL PLUS MIN", direction="l", linebreak="al", unicodeslot=0x12433, }, [0x12434]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE BURU", direction="l", linebreak="al", unicodeslot=0x12434, }, [0x12435]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO BURU", direction="l", linebreak="al", unicodeslot=0x12435, }, [0x12436]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE BURU", direction="l", linebreak="al", unicodeslot=0x12436, }, [0x12437]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM", direction="l", linebreak="al", unicodeslot=0x12437, }, [0x12438]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR BURU", direction="l", linebreak="al", unicodeslot=0x12438, }, [0x12439]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE BURU", direction="l", linebreak="al", unicodeslot=0x12439, }, [0x1243A]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH0x0010", direction="l", linebreak="al", unicodeslot=0x1243A, }, [0x1243B]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH0x0015", direction="l", linebreak="al", unicodeslot=0x1243B, }, [0x1243C]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU", direction="l", linebreak="al", unicodeslot=0x1243C, }, [0x1243D]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU0x0004", direction="l", linebreak="al", unicodeslot=0x1243D, }, [0x1243E]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A", direction="l", linebreak="al", unicodeslot=0x1243E, }, [0x1243F]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B", direction="l", linebreak="al", unicodeslot=0x1243F, }, [0x12440]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH0x0009", direction="l", linebreak="al", unicodeslot=0x12440, }, [0x12441]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN0x0003", direction="l", linebreak="al", unicodeslot=0x12441, }, [0x12442]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A", direction="l", linebreak="al", unicodeslot=0x12442, }, [0x12443]={ category="nl", description="CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B", direction="l", linebreak="al", unicodeslot=0x12443, }, [0x12444]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU", direction="l", linebreak="al", unicodeslot=0x12444, }, [0x12445]={ category="nl", description="CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU0x0003", direction="l", linebreak="al", unicodeslot=0x12445, }, [0x12446]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU", direction="l", linebreak="al", unicodeslot=0x12446, }, [0x12447]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU0x0003", direction="l", linebreak="al", unicodeslot=0x12447, }, [0x12448]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU0x0004", direction="l", linebreak="al", unicodeslot=0x12448, }, [0x12449]={ category="nl", description="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A", direction="l", linebreak="al", unicodeslot=0x12449, }, [0x1244A]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO ASH TENU", direction="l", linebreak="al", unicodeslot=0x1244A, }, [0x1244B]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE ASH TENU", direction="l", linebreak="al", unicodeslot=0x1244B, }, [0x1244C]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR ASH TENU", direction="l", linebreak="al", unicodeslot=0x1244C, }, [0x1244D]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE ASH TENU", direction="l", linebreak="al", unicodeslot=0x1244D, }, [0x1244E]={ category="nl", description="CUNEIFORM NUMERIC SIGN SIX ASH TENU", direction="l", linebreak="al", unicodeslot=0x1244E, }, [0x1244F]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE BAN0x0002", direction="l", linebreak="al", unicodeslot=0x1244F, }, [0x12450]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO BAN0x0002", direction="l", linebreak="al", unicodeslot=0x12450, }, [0x12451]={ category="nl", description="CUNEIFORM NUMERIC SIGN THREE BAN0x0002", direction="l", linebreak="al", unicodeslot=0x12451, }, [0x12452]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR BAN0x0002", direction="l", linebreak="al", unicodeslot=0x12452, }, [0x12453]={ category="nl", description="CUNEIFORM NUMERIC SIGN FOUR BAN0x0002 VARIANT FORM", direction="l", linebreak="al", unicodeslot=0x12453, }, [0x12454]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE BAN0x0002", direction="l", linebreak="al", unicodeslot=0x12454, }, [0x12455]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE BAN0x0002 VARIANT FORM", direction="l", linebreak="al", unicodeslot=0x12455, }, [0x12456]={ category="nl", description="CUNEIFORM NUMERIC SIGN NIGIDAMIN", direction="l", linebreak="al", unicodeslot=0x12456, }, [0x12457]={ category="nl", description="CUNEIFORM NUMERIC SIGN NIGIDAESH", direction="l", linebreak="al", unicodeslot=0x12457, }, [0x12458]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE ESHE0x0003", direction="l", linebreak="al", unicodeslot=0x12458, }, [0x12459]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO ESHE0x0003", direction="l", linebreak="al", unicodeslot=0x12459, }, [0x1245A]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE THIRD DISH", direction="l", linebreak="al", unicodeslot=0x1245A, }, [0x1245B]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO THIRDS DISH", direction="l", linebreak="al", unicodeslot=0x1245B, }, [0x1245C]={ category="nl", description="CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH", direction="l", linebreak="al", unicodeslot=0x1245C, }, [0x1245D]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A", direction="l", linebreak="al", unicodeslot=0x1245D, }, [0x1245E]={ category="nl", description="CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A", direction="l", linebreak="al", unicodeslot=0x1245E, }, [0x1245F]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH", direction="l", linebreak="al", unicodeslot=0x1245F, }, [0x12460]={ category="nl", description="CUNEIFORM NUMERIC SIGN ONE QUARTER ASH", direction="l", linebreak="al", unicodeslot=0x12460, }, [0x12461]={ category="nl", description="CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH", direction="l", linebreak="al", unicodeslot=0x12461, }, [0x12462]={ category="nl", description="CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER", direction="l", linebreak="al", unicodeslot=0x12462, }, [0x12470]={ category="po", description="CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER", direction="l", linebreak="ba", unicodeslot=0x12470, }, [0x12471]={ category="po", description="CUNEIFORM PUNCTUATION SIGN VERTICAL COLON", direction="l", linebreak="ba", unicodeslot=0x12471, }, [0x12472]={ category="po", description="CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON", direction="l", linebreak="ba", unicodeslot=0x12472, }, [0x12473]={ category="po", description="CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON", direction="l", linebreak="ba", unicodeslot=0x12473, }, [0x13000]={ category="lo", description="EGYPTIAN HIEROGLYPH A001", direction="l", linebreak="al", unicodeslot=0x13000, }, [0x13001]={ category="lo", description="EGYPTIAN HIEROGLYPH A002", direction="l", linebreak="al", unicodeslot=0x13001, }, [0x13002]={ category="lo", description="EGYPTIAN HIEROGLYPH A003", direction="l", linebreak="al", unicodeslot=0x13002, }, [0x13003]={ category="lo", description="EGYPTIAN HIEROGLYPH A004", direction="l", linebreak="al", unicodeslot=0x13003, }, [0x13004]={ category="lo", description="EGYPTIAN HIEROGLYPH A005", direction="l", linebreak="al", unicodeslot=0x13004, }, [0x13005]={ category="lo", description="EGYPTIAN HIEROGLYPH A005A", direction="l", linebreak="al", unicodeslot=0x13005, }, [0x13006]={ category="lo", description="EGYPTIAN HIEROGLYPH A006", direction="l", linebreak="al", unicodeslot=0x13006, }, [0x13007]={ category="lo", description="EGYPTIAN HIEROGLYPH A006A", direction="l", linebreak="al", unicodeslot=0x13007, }, [0x13008]={ category="lo", description="EGYPTIAN HIEROGLYPH A006B", direction="l", linebreak="al", unicodeslot=0x13008, }, [0x13009]={ category="lo", description="EGYPTIAN HIEROGLYPH A007", direction="l", linebreak="al", unicodeslot=0x13009, }, [0x1300A]={ category="lo", description="EGYPTIAN HIEROGLYPH A008", direction="l", linebreak="al", unicodeslot=0x1300A, }, [0x1300B]={ category="lo", description="EGYPTIAN HIEROGLYPH A009", direction="l", linebreak="al", unicodeslot=0x1300B, }, [0x1300C]={ category="lo", description="EGYPTIAN HIEROGLYPH A010", direction="l", linebreak="al", unicodeslot=0x1300C, }, [0x1300D]={ category="lo", description="EGYPTIAN HIEROGLYPH A011", direction="l", linebreak="al", unicodeslot=0x1300D, }, [0x1300E]={ category="lo", description="EGYPTIAN HIEROGLYPH A012", direction="l", linebreak="al", unicodeslot=0x1300E, }, [0x1300F]={ category="lo", description="EGYPTIAN HIEROGLYPH A013", direction="l", linebreak="al", unicodeslot=0x1300F, }, [0x13010]={ category="lo", description="EGYPTIAN HIEROGLYPH A014", direction="l", linebreak="al", unicodeslot=0x13010, }, [0x13011]={ category="lo", description="EGYPTIAN HIEROGLYPH A014A", direction="l", linebreak="al", unicodeslot=0x13011, }, [0x13012]={ category="lo", description="EGYPTIAN HIEROGLYPH A015", direction="l", linebreak="al", unicodeslot=0x13012, }, [0x13013]={ category="lo", description="EGYPTIAN HIEROGLYPH A016", direction="l", linebreak="al", unicodeslot=0x13013, }, [0x13014]={ category="lo", description="EGYPTIAN HIEROGLYPH A017", direction="l", linebreak="al", unicodeslot=0x13014, }, [0x13015]={ category="lo", description="EGYPTIAN HIEROGLYPH A017A", direction="l", linebreak="al", unicodeslot=0x13015, }, [0x13016]={ category="lo", description="EGYPTIAN HIEROGLYPH A018", direction="l", linebreak="al", unicodeslot=0x13016, }, [0x13017]={ category="lo", description="EGYPTIAN HIEROGLYPH A019", direction="l", linebreak="al", unicodeslot=0x13017, }, [0x13018]={ category="lo", description="EGYPTIAN HIEROGLYPH A020", direction="l", linebreak="al", unicodeslot=0x13018, }, [0x13019]={ category="lo", description="EGYPTIAN HIEROGLYPH A021", direction="l", linebreak="al", unicodeslot=0x13019, }, [0x1301A]={ category="lo", description="EGYPTIAN HIEROGLYPH A022", direction="l", linebreak="al", unicodeslot=0x1301A, }, [0x1301B]={ category="lo", description="EGYPTIAN HIEROGLYPH A023", direction="l", linebreak="al", unicodeslot=0x1301B, }, [0x1301C]={ category="lo", description="EGYPTIAN HIEROGLYPH A024", direction="l", linebreak="al", unicodeslot=0x1301C, }, [0x1301D]={ category="lo", description="EGYPTIAN HIEROGLYPH A025", direction="l", linebreak="al", unicodeslot=0x1301D, }, [0x1301E]={ category="lo", description="EGYPTIAN HIEROGLYPH A026", direction="l", linebreak="al", unicodeslot=0x1301E, }, [0x1301F]={ category="lo", description="EGYPTIAN HIEROGLYPH A027", direction="l", linebreak="al", unicodeslot=0x1301F, }, [0x13020]={ category="lo", description="EGYPTIAN HIEROGLYPH A028", direction="l", linebreak="al", unicodeslot=0x13020, }, [0x13021]={ category="lo", description="EGYPTIAN HIEROGLYPH A029", direction="l", linebreak="al", unicodeslot=0x13021, }, [0x13022]={ category="lo", description="EGYPTIAN HIEROGLYPH A030", direction="l", linebreak="al", unicodeslot=0x13022, }, [0x13023]={ category="lo", description="EGYPTIAN HIEROGLYPH A031", direction="l", linebreak="al", unicodeslot=0x13023, }, [0x13024]={ category="lo", description="EGYPTIAN HIEROGLYPH A032", direction="l", linebreak="al", unicodeslot=0x13024, }, [0x13025]={ category="lo", description="EGYPTIAN HIEROGLYPH A032A", direction="l", linebreak="al", unicodeslot=0x13025, }, [0x13026]={ category="lo", description="EGYPTIAN HIEROGLYPH A033", direction="l", linebreak="al", unicodeslot=0x13026, }, [0x13027]={ category="lo", description="EGYPTIAN HIEROGLYPH A034", direction="l", linebreak="al", unicodeslot=0x13027, }, [0x13028]={ category="lo", description="EGYPTIAN HIEROGLYPH A035", direction="l", linebreak="al", unicodeslot=0x13028, }, [0x13029]={ category="lo", description="EGYPTIAN HIEROGLYPH A036", direction="l", linebreak="al", unicodeslot=0x13029, }, [0x1302A]={ category="lo", description="EGYPTIAN HIEROGLYPH A037", direction="l", linebreak="al", unicodeslot=0x1302A, }, [0x1302B]={ category="lo", description="EGYPTIAN HIEROGLYPH A038", direction="l", linebreak="al", unicodeslot=0x1302B, }, [0x1302C]={ category="lo", description="EGYPTIAN HIEROGLYPH A039", direction="l", linebreak="al", unicodeslot=0x1302C, }, [0x1302D]={ category="lo", description="EGYPTIAN HIEROGLYPH A040", direction="l", linebreak="al", unicodeslot=0x1302D, }, [0x1302E]={ category="lo", description="EGYPTIAN HIEROGLYPH A040A", direction="l", linebreak="al", unicodeslot=0x1302E, }, [0x1302F]={ category="lo", description="EGYPTIAN HIEROGLYPH A041", direction="l", linebreak="al", unicodeslot=0x1302F, }, [0x13030]={ category="lo", description="EGYPTIAN HIEROGLYPH A042", direction="l", linebreak="al", unicodeslot=0x13030, }, [0x13031]={ category="lo", description="EGYPTIAN HIEROGLYPH A042A", direction="l", linebreak="al", unicodeslot=0x13031, }, [0x13032]={ category="lo", description="EGYPTIAN HIEROGLYPH A043", direction="l", linebreak="al", unicodeslot=0x13032, }, [0x13033]={ category="lo", description="EGYPTIAN HIEROGLYPH A043A", direction="l", linebreak="al", unicodeslot=0x13033, }, [0x13034]={ category="lo", description="EGYPTIAN HIEROGLYPH A044", direction="l", linebreak="al", unicodeslot=0x13034, }, [0x13035]={ category="lo", description="EGYPTIAN HIEROGLYPH A045", direction="l", linebreak="al", unicodeslot=0x13035, }, [0x13036]={ category="lo", description="EGYPTIAN HIEROGLYPH A045A", direction="l", linebreak="al", unicodeslot=0x13036, }, [0x13037]={ category="lo", description="EGYPTIAN HIEROGLYPH A046", direction="l", linebreak="al", unicodeslot=0x13037, }, [0x13038]={ category="lo", description="EGYPTIAN HIEROGLYPH A047", direction="l", linebreak="al", unicodeslot=0x13038, }, [0x13039]={ category="lo", description="EGYPTIAN HIEROGLYPH A048", direction="l", linebreak="al", unicodeslot=0x13039, }, [0x1303A]={ category="lo", description="EGYPTIAN HIEROGLYPH A049", direction="l", linebreak="al", unicodeslot=0x1303A, }, [0x1303B]={ category="lo", description="EGYPTIAN HIEROGLYPH A050", direction="l", linebreak="al", unicodeslot=0x1303B, }, [0x1303C]={ category="lo", description="EGYPTIAN HIEROGLYPH A051", direction="l", linebreak="al", unicodeslot=0x1303C, }, [0x1303D]={ category="lo", description="EGYPTIAN HIEROGLYPH A052", direction="l", linebreak="al", unicodeslot=0x1303D, }, [0x1303E]={ category="lo", description="EGYPTIAN HIEROGLYPH A053", direction="l", linebreak="al", unicodeslot=0x1303E, }, [0x1303F]={ category="lo", description="EGYPTIAN HIEROGLYPH A054", direction="l", linebreak="al", unicodeslot=0x1303F, }, [0x13040]={ category="lo", description="EGYPTIAN HIEROGLYPH A055", direction="l", linebreak="al", unicodeslot=0x13040, }, [0x13041]={ category="lo", description="EGYPTIAN HIEROGLYPH A056", direction="l", linebreak="al", unicodeslot=0x13041, }, [0x13042]={ category="lo", description="EGYPTIAN HIEROGLYPH A057", direction="l", linebreak="al", unicodeslot=0x13042, }, [0x13043]={ category="lo", description="EGYPTIAN HIEROGLYPH A058", direction="l", linebreak="al", unicodeslot=0x13043, }, [0x13044]={ category="lo", description="EGYPTIAN HIEROGLYPH A059", direction="l", linebreak="al", unicodeslot=0x13044, }, [0x13045]={ category="lo", description="EGYPTIAN HIEROGLYPH A060", direction="l", linebreak="al", unicodeslot=0x13045, }, [0x13046]={ category="lo", description="EGYPTIAN HIEROGLYPH A061", direction="l", linebreak="al", unicodeslot=0x13046, }, [0x13047]={ category="lo", description="EGYPTIAN HIEROGLYPH A062", direction="l", linebreak="al", unicodeslot=0x13047, }, [0x13048]={ category="lo", description="EGYPTIAN HIEROGLYPH A063", direction="l", linebreak="al", unicodeslot=0x13048, }, [0x13049]={ category="lo", description="EGYPTIAN HIEROGLYPH A064", direction="l", linebreak="al", unicodeslot=0x13049, }, [0x1304A]={ category="lo", description="EGYPTIAN HIEROGLYPH A065", direction="l", linebreak="al", unicodeslot=0x1304A, }, [0x1304B]={ category="lo", description="EGYPTIAN HIEROGLYPH A066", direction="l", linebreak="al", unicodeslot=0x1304B, }, [0x1304C]={ category="lo", description="EGYPTIAN HIEROGLYPH A067", direction="l", linebreak="al", unicodeslot=0x1304C, }, [0x1304D]={ category="lo", description="EGYPTIAN HIEROGLYPH A068", direction="l", linebreak="al", unicodeslot=0x1304D, }, [0x1304E]={ category="lo", description="EGYPTIAN HIEROGLYPH A069", direction="l", linebreak="al", unicodeslot=0x1304E, }, [0x1304F]={ category="lo", description="EGYPTIAN HIEROGLYPH A070", direction="l", linebreak="al", unicodeslot=0x1304F, }, [0x13050]={ category="lo", description="EGYPTIAN HIEROGLYPH B001", direction="l", linebreak="al", unicodeslot=0x13050, }, [0x13051]={ category="lo", description="EGYPTIAN HIEROGLYPH B002", direction="l", linebreak="al", unicodeslot=0x13051, }, [0x13052]={ category="lo", description="EGYPTIAN HIEROGLYPH B003", direction="l", linebreak="al", unicodeslot=0x13052, }, [0x13053]={ category="lo", description="EGYPTIAN HIEROGLYPH B004", direction="l", linebreak="al", unicodeslot=0x13053, }, [0x13054]={ category="lo", description="EGYPTIAN HIEROGLYPH B005", direction="l", linebreak="al", unicodeslot=0x13054, }, [0x13055]={ category="lo", description="EGYPTIAN HIEROGLYPH B005A", direction="l", linebreak="al", unicodeslot=0x13055, }, [0x13056]={ category="lo", description="EGYPTIAN HIEROGLYPH B006", direction="l", linebreak="al", unicodeslot=0x13056, }, [0x13057]={ category="lo", description="EGYPTIAN HIEROGLYPH B007", direction="l", linebreak="al", unicodeslot=0x13057, }, [0x13058]={ category="lo", description="EGYPTIAN HIEROGLYPH B008", direction="l", linebreak="al", unicodeslot=0x13058, }, [0x13059]={ category="lo", description="EGYPTIAN HIEROGLYPH B009", direction="l", linebreak="al", unicodeslot=0x13059, }, [0x1305A]={ category="lo", description="EGYPTIAN HIEROGLYPH C001", direction="l", linebreak="al", unicodeslot=0x1305A, }, [0x1305B]={ category="lo", description="EGYPTIAN HIEROGLYPH C002", direction="l", linebreak="al", unicodeslot=0x1305B, }, [0x1305C]={ category="lo", description="EGYPTIAN HIEROGLYPH C002A", direction="l", linebreak="al", unicodeslot=0x1305C, }, [0x1305D]={ category="lo", description="EGYPTIAN HIEROGLYPH C002B", direction="l", linebreak="al", unicodeslot=0x1305D, }, [0x1305E]={ category="lo", description="EGYPTIAN HIEROGLYPH C002C", direction="l", linebreak="al", unicodeslot=0x1305E, }, [0x1305F]={ category="lo", description="EGYPTIAN HIEROGLYPH C003", direction="l", linebreak="al", unicodeslot=0x1305F, }, [0x13060]={ category="lo", description="EGYPTIAN HIEROGLYPH C004", direction="l", linebreak="al", unicodeslot=0x13060, }, [0x13061]={ category="lo", description="EGYPTIAN HIEROGLYPH C005", direction="l", linebreak="al", unicodeslot=0x13061, }, [0x13062]={ category="lo", description="EGYPTIAN HIEROGLYPH C006", direction="l", linebreak="al", unicodeslot=0x13062, }, [0x13063]={ category="lo", description="EGYPTIAN HIEROGLYPH C007", direction="l", linebreak="al", unicodeslot=0x13063, }, [0x13064]={ category="lo", description="EGYPTIAN HIEROGLYPH C008", direction="l", linebreak="al", unicodeslot=0x13064, }, [0x13065]={ category="lo", description="EGYPTIAN HIEROGLYPH C009", direction="l", linebreak="al", unicodeslot=0x13065, }, [0x13066]={ category="lo", description="EGYPTIAN HIEROGLYPH C010", direction="l", linebreak="al", unicodeslot=0x13066, }, [0x13067]={ category="lo", description="EGYPTIAN HIEROGLYPH C010A", direction="l", linebreak="al", unicodeslot=0x13067, }, [0x13068]={ category="lo", description="EGYPTIAN HIEROGLYPH C011", direction="l", linebreak="al", unicodeslot=0x13068, }, [0x13069]={ category="lo", description="EGYPTIAN HIEROGLYPH C012", direction="l", linebreak="al", unicodeslot=0x13069, }, [0x1306A]={ category="lo", description="EGYPTIAN HIEROGLYPH C013", direction="l", linebreak="al", unicodeslot=0x1306A, }, [0x1306B]={ category="lo", description="EGYPTIAN HIEROGLYPH C014", direction="l", linebreak="al", unicodeslot=0x1306B, }, [0x1306C]={ category="lo", description="EGYPTIAN HIEROGLYPH C015", direction="l", linebreak="al", unicodeslot=0x1306C, }, [0x1306D]={ category="lo", description="EGYPTIAN HIEROGLYPH C016", direction="l", linebreak="al", unicodeslot=0x1306D, }, [0x1306E]={ category="lo", description="EGYPTIAN HIEROGLYPH C017", direction="l", linebreak="al", unicodeslot=0x1306E, }, [0x1306F]={ category="lo", description="EGYPTIAN HIEROGLYPH C018", direction="l", linebreak="al", unicodeslot=0x1306F, }, [0x13070]={ category="lo", description="EGYPTIAN HIEROGLYPH C019", direction="l", linebreak="al", unicodeslot=0x13070, }, [0x13071]={ category="lo", description="EGYPTIAN HIEROGLYPH C020", direction="l", linebreak="al", unicodeslot=0x13071, }, [0x13072]={ category="lo", description="EGYPTIAN HIEROGLYPH C021", direction="l", linebreak="al", unicodeslot=0x13072, }, [0x13073]={ category="lo", description="EGYPTIAN HIEROGLYPH C022", direction="l", linebreak="al", unicodeslot=0x13073, }, [0x13074]={ category="lo", description="EGYPTIAN HIEROGLYPH C023", direction="l", linebreak="al", unicodeslot=0x13074, }, [0x13075]={ category="lo", description="EGYPTIAN HIEROGLYPH C024", direction="l", linebreak="al", unicodeslot=0x13075, }, [0x13076]={ category="lo", description="EGYPTIAN HIEROGLYPH D001", direction="l", linebreak="al", unicodeslot=0x13076, }, [0x13077]={ category="lo", description="EGYPTIAN HIEROGLYPH D002", direction="l", linebreak="al", unicodeslot=0x13077, }, [0x13078]={ category="lo", description="EGYPTIAN HIEROGLYPH D003", direction="l", linebreak="al", unicodeslot=0x13078, }, [0x13079]={ category="lo", description="EGYPTIAN HIEROGLYPH D004", direction="l", linebreak="al", unicodeslot=0x13079, }, [0x1307A]={ category="lo", description="EGYPTIAN HIEROGLYPH D005", direction="l", linebreak="al", unicodeslot=0x1307A, }, [0x1307B]={ category="lo", description="EGYPTIAN HIEROGLYPH D006", direction="l", linebreak="al", unicodeslot=0x1307B, }, [0x1307C]={ category="lo", description="EGYPTIAN HIEROGLYPH D007", direction="l", linebreak="al", unicodeslot=0x1307C, }, [0x1307D]={ category="lo", description="EGYPTIAN HIEROGLYPH D008", direction="l", linebreak="al", unicodeslot=0x1307D, }, [0x1307E]={ category="lo", description="EGYPTIAN HIEROGLYPH D008A", direction="l", linebreak="al", unicodeslot=0x1307E, }, [0x1307F]={ category="lo", description="EGYPTIAN HIEROGLYPH D009", direction="l", linebreak="al", unicodeslot=0x1307F, }, [0x13080]={ category="lo", description="EGYPTIAN HIEROGLYPH D010", direction="l", linebreak="al", unicodeslot=0x13080, }, [0x13081]={ category="lo", description="EGYPTIAN HIEROGLYPH D011", direction="l", linebreak="al", unicodeslot=0x13081, }, [0x13082]={ category="lo", description="EGYPTIAN HIEROGLYPH D012", direction="l", linebreak="al", unicodeslot=0x13082, }, [0x13083]={ category="lo", description="EGYPTIAN HIEROGLYPH D013", direction="l", linebreak="al", unicodeslot=0x13083, }, [0x13084]={ category="lo", description="EGYPTIAN HIEROGLYPH D014", direction="l", linebreak="al", unicodeslot=0x13084, }, [0x13085]={ category="lo", description="EGYPTIAN HIEROGLYPH D015", direction="l", linebreak="al", unicodeslot=0x13085, }, [0x13086]={ category="lo", description="EGYPTIAN HIEROGLYPH D016", direction="l", linebreak="al", unicodeslot=0x13086, }, [0x13087]={ category="lo", description="EGYPTIAN HIEROGLYPH D017", direction="l", linebreak="al", unicodeslot=0x13087, }, [0x13088]={ category="lo", description="EGYPTIAN HIEROGLYPH D018", direction="l", linebreak="al", unicodeslot=0x13088, }, [0x13089]={ category="lo", description="EGYPTIAN HIEROGLYPH D019", direction="l", linebreak="al", unicodeslot=0x13089, }, [0x1308A]={ category="lo", description="EGYPTIAN HIEROGLYPH D020", direction="l", linebreak="al", unicodeslot=0x1308A, }, [0x1308B]={ category="lo", description="EGYPTIAN HIEROGLYPH D021", direction="l", linebreak="al", unicodeslot=0x1308B, }, [0x1308C]={ category="lo", description="EGYPTIAN HIEROGLYPH D022", direction="l", linebreak="al", unicodeslot=0x1308C, }, [0x1308D]={ category="lo", description="EGYPTIAN HIEROGLYPH D023", direction="l", linebreak="al", unicodeslot=0x1308D, }, [0x1308E]={ category="lo", description="EGYPTIAN HIEROGLYPH D024", direction="l", linebreak="al", unicodeslot=0x1308E, }, [0x1308F]={ category="lo", description="EGYPTIAN HIEROGLYPH D025", direction="l", linebreak="al", unicodeslot=0x1308F, }, [0x13090]={ category="lo", description="EGYPTIAN HIEROGLYPH D026", direction="l", linebreak="al", unicodeslot=0x13090, }, [0x13091]={ category="lo", description="EGYPTIAN HIEROGLYPH D027", direction="l", linebreak="al", unicodeslot=0x13091, }, [0x13092]={ category="lo", description="EGYPTIAN HIEROGLYPH D027A", direction="l", linebreak="al", unicodeslot=0x13092, }, [0x13093]={ category="lo", description="EGYPTIAN HIEROGLYPH D028", direction="l", linebreak="al", unicodeslot=0x13093, }, [0x13094]={ category="lo", description="EGYPTIAN HIEROGLYPH D029", direction="l", linebreak="al", unicodeslot=0x13094, }, [0x13095]={ category="lo", description="EGYPTIAN HIEROGLYPH D030", direction="l", linebreak="al", unicodeslot=0x13095, }, [0x13096]={ category="lo", description="EGYPTIAN HIEROGLYPH D031", direction="l", linebreak="al", unicodeslot=0x13096, }, [0x13097]={ category="lo", description="EGYPTIAN HIEROGLYPH D031A", direction="l", linebreak="al", unicodeslot=0x13097, }, [0x13098]={ category="lo", description="EGYPTIAN HIEROGLYPH D032", direction="l", linebreak="al", unicodeslot=0x13098, }, [0x13099]={ category="lo", description="EGYPTIAN HIEROGLYPH D033", direction="l", linebreak="al", unicodeslot=0x13099, }, [0x1309A]={ category="lo", description="EGYPTIAN HIEROGLYPH D034", direction="l", linebreak="al", unicodeslot=0x1309A, }, [0x1309B]={ category="lo", description="EGYPTIAN HIEROGLYPH D034A", direction="l", linebreak="al", unicodeslot=0x1309B, }, [0x1309C]={ category="lo", description="EGYPTIAN HIEROGLYPH D035", direction="l", linebreak="al", unicodeslot=0x1309C, }, [0x1309D]={ category="lo", description="EGYPTIAN HIEROGLYPH D036", direction="l", linebreak="al", unicodeslot=0x1309D, }, [0x1309E]={ category="lo", description="EGYPTIAN HIEROGLYPH D037", direction="l", linebreak="al", unicodeslot=0x1309E, }, [0x1309F]={ category="lo", description="EGYPTIAN HIEROGLYPH D038", direction="l", linebreak="al", unicodeslot=0x1309F, }, [0x130A0]={ category="lo", description="EGYPTIAN HIEROGLYPH D039", direction="l", linebreak="al", unicodeslot=0x130A0, }, [0x130A1]={ category="lo", description="EGYPTIAN HIEROGLYPH D040", direction="l", linebreak="al", unicodeslot=0x130A1, }, [0x130A2]={ category="lo", description="EGYPTIAN HIEROGLYPH D041", direction="l", linebreak="al", unicodeslot=0x130A2, }, [0x130A3]={ category="lo", description="EGYPTIAN HIEROGLYPH D042", direction="l", linebreak="al", unicodeslot=0x130A3, }, [0x130A4]={ category="lo", description="EGYPTIAN HIEROGLYPH D043", direction="l", linebreak="al", unicodeslot=0x130A4, }, [0x130A5]={ category="lo", description="EGYPTIAN HIEROGLYPH D044", direction="l", linebreak="al", unicodeslot=0x130A5, }, [0x130A6]={ category="lo", description="EGYPTIAN HIEROGLYPH D045", direction="l", linebreak="al", unicodeslot=0x130A6, }, [0x130A7]={ category="lo", description="EGYPTIAN HIEROGLYPH D046", direction="l", linebreak="al", unicodeslot=0x130A7, }, [0x130A8]={ category="lo", description="EGYPTIAN HIEROGLYPH D046A", direction="l", linebreak="al", unicodeslot=0x130A8, }, [0x130A9]={ category="lo", description="EGYPTIAN HIEROGLYPH D047", direction="l", linebreak="al", unicodeslot=0x130A9, }, [0x130AA]={ category="lo", description="EGYPTIAN HIEROGLYPH D048", direction="l", linebreak="al", unicodeslot=0x130AA, }, [0x130AB]={ category="lo", description="EGYPTIAN HIEROGLYPH D048A", direction="l", linebreak="al", unicodeslot=0x130AB, }, [0x130AC]={ category="lo", description="EGYPTIAN HIEROGLYPH D049", direction="l", linebreak="al", unicodeslot=0x130AC, }, [0x130AD]={ category="lo", description="EGYPTIAN HIEROGLYPH D050", direction="l", linebreak="al", unicodeslot=0x130AD, }, [0x130AE]={ category="lo", description="EGYPTIAN HIEROGLYPH D050A", direction="l", linebreak="al", unicodeslot=0x130AE, }, [0x130AF]={ category="lo", description="EGYPTIAN HIEROGLYPH D050B", direction="l", linebreak="al", unicodeslot=0x130AF, }, [0x130B0]={ category="lo", description="EGYPTIAN HIEROGLYPH D050C", direction="l", linebreak="al", unicodeslot=0x130B0, }, [0x130B1]={ category="lo", description="EGYPTIAN HIEROGLYPH D050D", direction="l", linebreak="al", unicodeslot=0x130B1, }, [0x130B2]={ category="lo", description="EGYPTIAN HIEROGLYPH D050E", direction="l", linebreak="al", unicodeslot=0x130B2, }, [0x130B3]={ category="lo", description="EGYPTIAN HIEROGLYPH D050F", direction="l", linebreak="al", unicodeslot=0x130B3, }, [0x130B4]={ category="lo", description="EGYPTIAN HIEROGLYPH D050G", direction="l", linebreak="al", unicodeslot=0x130B4, }, [0x130B5]={ category="lo", description="EGYPTIAN HIEROGLYPH D050H", direction="l", linebreak="al", unicodeslot=0x130B5, }, [0x130B6]={ category="lo", description="EGYPTIAN HIEROGLYPH D050I", direction="l", linebreak="al", unicodeslot=0x130B6, }, [0x130B7]={ category="lo", description="EGYPTIAN HIEROGLYPH D051", direction="l", linebreak="al", unicodeslot=0x130B7, }, [0x130B8]={ category="lo", description="EGYPTIAN HIEROGLYPH D052", direction="l", linebreak="al", unicodeslot=0x130B8, }, [0x130B9]={ category="lo", description="EGYPTIAN HIEROGLYPH D052A", direction="l", linebreak="al", unicodeslot=0x130B9, }, [0x130BA]={ category="lo", description="EGYPTIAN HIEROGLYPH D053", direction="l", linebreak="al", unicodeslot=0x130BA, }, [0x130BB]={ category="lo", description="EGYPTIAN HIEROGLYPH D054", direction="l", linebreak="al", unicodeslot=0x130BB, }, [0x130BC]={ category="lo", description="EGYPTIAN HIEROGLYPH D054A", direction="l", linebreak="al", unicodeslot=0x130BC, }, [0x130BD]={ category="lo", description="EGYPTIAN HIEROGLYPH D055", direction="l", linebreak="al", unicodeslot=0x130BD, }, [0x130BE]={ category="lo", description="EGYPTIAN HIEROGLYPH D056", direction="l", linebreak="al", unicodeslot=0x130BE, }, [0x130BF]={ category="lo", description="EGYPTIAN HIEROGLYPH D057", direction="l", linebreak="al", unicodeslot=0x130BF, }, [0x130C0]={ category="lo", description="EGYPTIAN HIEROGLYPH D058", direction="l", linebreak="al", unicodeslot=0x130C0, }, [0x130C1]={ category="lo", description="EGYPTIAN HIEROGLYPH D059", direction="l", linebreak="al", unicodeslot=0x130C1, }, [0x130C2]={ category="lo", description="EGYPTIAN HIEROGLYPH D060", direction="l", linebreak="al", unicodeslot=0x130C2, }, [0x130C3]={ category="lo", description="EGYPTIAN HIEROGLYPH D061", direction="l", linebreak="al", unicodeslot=0x130C3, }, [0x130C4]={ category="lo", description="EGYPTIAN HIEROGLYPH D062", direction="l", linebreak="al", unicodeslot=0x130C4, }, [0x130C5]={ category="lo", description="EGYPTIAN HIEROGLYPH D063", direction="l", linebreak="al", unicodeslot=0x130C5, }, [0x130C6]={ category="lo", description="EGYPTIAN HIEROGLYPH D064", direction="l", linebreak="al", unicodeslot=0x130C6, }, [0x130C7]={ category="lo", description="EGYPTIAN HIEROGLYPH D065", direction="l", linebreak="al", unicodeslot=0x130C7, }, [0x130C8]={ category="lo", description="EGYPTIAN HIEROGLYPH D066", direction="l", linebreak="al", unicodeslot=0x130C8, }, [0x130C9]={ category="lo", description="EGYPTIAN HIEROGLYPH D067", direction="l", linebreak="al", unicodeslot=0x130C9, }, [0x130CA]={ category="lo", description="EGYPTIAN HIEROGLYPH D067A", direction="l", linebreak="al", unicodeslot=0x130CA, }, [0x130CB]={ category="lo", description="EGYPTIAN HIEROGLYPH D067B", direction="l", linebreak="al", unicodeslot=0x130CB, }, [0x130CC]={ category="lo", description="EGYPTIAN HIEROGLYPH D067C", direction="l", linebreak="al", unicodeslot=0x130CC, }, [0x130CD]={ category="lo", description="EGYPTIAN HIEROGLYPH D067D", direction="l", linebreak="al", unicodeslot=0x130CD, }, [0x130CE]={ category="lo", description="EGYPTIAN HIEROGLYPH D067E", direction="l", linebreak="al", unicodeslot=0x130CE, }, [0x130CF]={ category="lo", description="EGYPTIAN HIEROGLYPH D067F", direction="l", linebreak="al", unicodeslot=0x130CF, }, [0x130D0]={ category="lo", description="EGYPTIAN HIEROGLYPH D067G", direction="l", linebreak="al", unicodeslot=0x130D0, }, [0x130D1]={ category="lo", description="EGYPTIAN HIEROGLYPH D067H", direction="l", linebreak="al", unicodeslot=0x130D1, }, [0x130D2]={ category="lo", description="EGYPTIAN HIEROGLYPH E001", direction="l", linebreak="al", unicodeslot=0x130D2, }, [0x130D3]={ category="lo", description="EGYPTIAN HIEROGLYPH E002", direction="l", linebreak="al", unicodeslot=0x130D3, }, [0x130D4]={ category="lo", description="EGYPTIAN HIEROGLYPH E003", direction="l", linebreak="al", unicodeslot=0x130D4, }, [0x130D5]={ category="lo", description="EGYPTIAN HIEROGLYPH E004", direction="l", linebreak="al", unicodeslot=0x130D5, }, [0x130D6]={ category="lo", description="EGYPTIAN HIEROGLYPH E005", direction="l", linebreak="al", unicodeslot=0x130D6, }, [0x130D7]={ category="lo", description="EGYPTIAN HIEROGLYPH E006", direction="l", linebreak="al", unicodeslot=0x130D7, }, [0x130D8]={ category="lo", description="EGYPTIAN HIEROGLYPH E007", direction="l", linebreak="al", unicodeslot=0x130D8, }, [0x130D9]={ category="lo", description="EGYPTIAN HIEROGLYPH E008", direction="l", linebreak="al", unicodeslot=0x130D9, }, [0x130DA]={ category="lo", description="EGYPTIAN HIEROGLYPH E008A", direction="l", linebreak="al", unicodeslot=0x130DA, }, [0x130DB]={ category="lo", description="EGYPTIAN HIEROGLYPH E009", direction="l", linebreak="al", unicodeslot=0x130DB, }, [0x130DC]={ category="lo", description="EGYPTIAN HIEROGLYPH E009A", direction="l", linebreak="al", unicodeslot=0x130DC, }, [0x130DD]={ category="lo", description="EGYPTIAN HIEROGLYPH E010", direction="l", linebreak="al", unicodeslot=0x130DD, }, [0x130DE]={ category="lo", description="EGYPTIAN HIEROGLYPH E011", direction="l", linebreak="al", unicodeslot=0x130DE, }, [0x130DF]={ category="lo", description="EGYPTIAN HIEROGLYPH E012", direction="l", linebreak="al", unicodeslot=0x130DF, }, [0x130E0]={ category="lo", description="EGYPTIAN HIEROGLYPH E013", direction="l", linebreak="al", unicodeslot=0x130E0, }, [0x130E1]={ category="lo", description="EGYPTIAN HIEROGLYPH E014", direction="l", linebreak="al", unicodeslot=0x130E1, }, [0x130E2]={ category="lo", description="EGYPTIAN HIEROGLYPH E015", direction="l", linebreak="al", unicodeslot=0x130E2, }, [0x130E3]={ category="lo", description="EGYPTIAN HIEROGLYPH E016", direction="l", linebreak="al", unicodeslot=0x130E3, }, [0x130E4]={ category="lo", description="EGYPTIAN HIEROGLYPH E016A", direction="l", linebreak="al", unicodeslot=0x130E4, }, [0x130E5]={ category="lo", description="EGYPTIAN HIEROGLYPH E017", direction="l", linebreak="al", unicodeslot=0x130E5, }, [0x130E6]={ category="lo", description="EGYPTIAN HIEROGLYPH E017A", direction="l", linebreak="al", unicodeslot=0x130E6, }, [0x130E7]={ category="lo", description="EGYPTIAN HIEROGLYPH E018", direction="l", linebreak="al", unicodeslot=0x130E7, }, [0x130E8]={ category="lo", description="EGYPTIAN HIEROGLYPH E019", direction="l", linebreak="al", unicodeslot=0x130E8, }, [0x130E9]={ category="lo", description="EGYPTIAN HIEROGLYPH E020", direction="l", linebreak="al", unicodeslot=0x130E9, }, [0x130EA]={ category="lo", description="EGYPTIAN HIEROGLYPH E020A", direction="l", linebreak="al", unicodeslot=0x130EA, }, [0x130EB]={ category="lo", description="EGYPTIAN HIEROGLYPH E021", direction="l", linebreak="al", unicodeslot=0x130EB, }, [0x130EC]={ category="lo", description="EGYPTIAN HIEROGLYPH E022", direction="l", linebreak="al", unicodeslot=0x130EC, }, [0x130ED]={ category="lo", description="EGYPTIAN HIEROGLYPH E023", direction="l", linebreak="al", unicodeslot=0x130ED, }, [0x130EE]={ category="lo", description="EGYPTIAN HIEROGLYPH E024", direction="l", linebreak="al", unicodeslot=0x130EE, }, [0x130EF]={ category="lo", description="EGYPTIAN HIEROGLYPH E025", direction="l", linebreak="al", unicodeslot=0x130EF, }, [0x130F0]={ category="lo", description="EGYPTIAN HIEROGLYPH E026", direction="l", linebreak="al", unicodeslot=0x130F0, }, [0x130F1]={ category="lo", description="EGYPTIAN HIEROGLYPH E027", direction="l", linebreak="al", unicodeslot=0x130F1, }, [0x130F2]={ category="lo", description="EGYPTIAN HIEROGLYPH E028", direction="l", linebreak="al", unicodeslot=0x130F2, }, [0x130F3]={ category="lo", description="EGYPTIAN HIEROGLYPH E028A", direction="l", linebreak="al", unicodeslot=0x130F3, }, [0x130F4]={ category="lo", description="EGYPTIAN HIEROGLYPH E029", direction="l", linebreak="al", unicodeslot=0x130F4, }, [0x130F5]={ category="lo", description="EGYPTIAN HIEROGLYPH E030", direction="l", linebreak="al", unicodeslot=0x130F5, }, [0x130F6]={ category="lo", description="EGYPTIAN HIEROGLYPH E031", direction="l", linebreak="al", unicodeslot=0x130F6, }, [0x130F7]={ category="lo", description="EGYPTIAN HIEROGLYPH E032", direction="l", linebreak="al", unicodeslot=0x130F7, }, [0x130F8]={ category="lo", description="EGYPTIAN HIEROGLYPH E033", direction="l", linebreak="al", unicodeslot=0x130F8, }, [0x130F9]={ category="lo", description="EGYPTIAN HIEROGLYPH E034", direction="l", linebreak="al", unicodeslot=0x130F9, }, [0x130FA]={ category="lo", description="EGYPTIAN HIEROGLYPH E034A", direction="l", linebreak="al", unicodeslot=0x130FA, }, [0x130FB]={ category="lo", description="EGYPTIAN HIEROGLYPH E036", direction="l", linebreak="al", unicodeslot=0x130FB, }, [0x130FC]={ category="lo", description="EGYPTIAN HIEROGLYPH E037", direction="l", linebreak="al", unicodeslot=0x130FC, }, [0x130FD]={ category="lo", description="EGYPTIAN HIEROGLYPH E038", direction="l", linebreak="al", unicodeslot=0x130FD, }, [0x130FE]={ category="lo", description="EGYPTIAN HIEROGLYPH F001", direction="l", linebreak="al", unicodeslot=0x130FE, }, [0x130FF]={ category="lo", description="EGYPTIAN HIEROGLYPH F001A", direction="l", linebreak="al", unicodeslot=0x130FF, }, [0x13100]={ category="lo", description="EGYPTIAN HIEROGLYPH F002", direction="l", linebreak="al", unicodeslot=0x13100, }, [0x13101]={ category="lo", description="EGYPTIAN HIEROGLYPH F003", direction="l", linebreak="al", unicodeslot=0x13101, }, [0x13102]={ category="lo", description="EGYPTIAN HIEROGLYPH F004", direction="l", linebreak="al", unicodeslot=0x13102, }, [0x13103]={ category="lo", description="EGYPTIAN HIEROGLYPH F005", direction="l", linebreak="al", unicodeslot=0x13103, }, [0x13104]={ category="lo", description="EGYPTIAN HIEROGLYPH F006", direction="l", linebreak="al", unicodeslot=0x13104, }, [0x13105]={ category="lo", description="EGYPTIAN HIEROGLYPH F007", direction="l", linebreak="al", unicodeslot=0x13105, }, [0x13106]={ category="lo", description="EGYPTIAN HIEROGLYPH F008", direction="l", linebreak="al", unicodeslot=0x13106, }, [0x13107]={ category="lo", description="EGYPTIAN HIEROGLYPH F009", direction="l", linebreak="al", unicodeslot=0x13107, }, [0x13108]={ category="lo", description="EGYPTIAN HIEROGLYPH F010", direction="l", linebreak="al", unicodeslot=0x13108, }, [0x13109]={ category="lo", description="EGYPTIAN HIEROGLYPH F011", direction="l", linebreak="al", unicodeslot=0x13109, }, [0x1310A]={ category="lo", description="EGYPTIAN HIEROGLYPH F012", direction="l", linebreak="al", unicodeslot=0x1310A, }, [0x1310B]={ category="lo", description="EGYPTIAN HIEROGLYPH F013", direction="l", linebreak="al", unicodeslot=0x1310B, }, [0x1310C]={ category="lo", description="EGYPTIAN HIEROGLYPH F013A", direction="l", linebreak="al", unicodeslot=0x1310C, }, [0x1310D]={ category="lo", description="EGYPTIAN HIEROGLYPH F014", direction="l", linebreak="al", unicodeslot=0x1310D, }, [0x1310E]={ category="lo", description="EGYPTIAN HIEROGLYPH F015", direction="l", linebreak="al", unicodeslot=0x1310E, }, [0x1310F]={ category="lo", description="EGYPTIAN HIEROGLYPH F016", direction="l", linebreak="al", unicodeslot=0x1310F, }, [0x13110]={ category="lo", description="EGYPTIAN HIEROGLYPH F017", direction="l", linebreak="al", unicodeslot=0x13110, }, [0x13111]={ category="lo", description="EGYPTIAN HIEROGLYPH F018", direction="l", linebreak="al", unicodeslot=0x13111, }, [0x13112]={ category="lo", description="EGYPTIAN HIEROGLYPH F019", direction="l", linebreak="al", unicodeslot=0x13112, }, [0x13113]={ category="lo", description="EGYPTIAN HIEROGLYPH F020", direction="l", linebreak="al", unicodeslot=0x13113, }, [0x13114]={ category="lo", description="EGYPTIAN HIEROGLYPH F021", direction="l", linebreak="al", unicodeslot=0x13114, }, [0x13115]={ category="lo", description="EGYPTIAN HIEROGLYPH F021A", direction="l", linebreak="al", unicodeslot=0x13115, }, [0x13116]={ category="lo", description="EGYPTIAN HIEROGLYPH F022", direction="l", linebreak="al", unicodeslot=0x13116, }, [0x13117]={ category="lo", description="EGYPTIAN HIEROGLYPH F023", direction="l", linebreak="al", unicodeslot=0x13117, }, [0x13118]={ category="lo", description="EGYPTIAN HIEROGLYPH F024", direction="l", linebreak="al", unicodeslot=0x13118, }, [0x13119]={ category="lo", description="EGYPTIAN HIEROGLYPH F025", direction="l", linebreak="al", unicodeslot=0x13119, }, [0x1311A]={ category="lo", description="EGYPTIAN HIEROGLYPH F026", direction="l", linebreak="al", unicodeslot=0x1311A, }, [0x1311B]={ category="lo", description="EGYPTIAN HIEROGLYPH F027", direction="l", linebreak="al", unicodeslot=0x1311B, }, [0x1311C]={ category="lo", description="EGYPTIAN HIEROGLYPH F028", direction="l", linebreak="al", unicodeslot=0x1311C, }, [0x1311D]={ category="lo", description="EGYPTIAN HIEROGLYPH F029", direction="l", linebreak="al", unicodeslot=0x1311D, }, [0x1311E]={ category="lo", description="EGYPTIAN HIEROGLYPH F030", direction="l", linebreak="al", unicodeslot=0x1311E, }, [0x1311F]={ category="lo", description="EGYPTIAN HIEROGLYPH F031", direction="l", linebreak="al", unicodeslot=0x1311F, }, [0x13120]={ category="lo", description="EGYPTIAN HIEROGLYPH F031A", direction="l", linebreak="al", unicodeslot=0x13120, }, [0x13121]={ category="lo", description="EGYPTIAN HIEROGLYPH F032", direction="l", linebreak="al", unicodeslot=0x13121, }, [0x13122]={ category="lo", description="EGYPTIAN HIEROGLYPH F033", direction="l", linebreak="al", unicodeslot=0x13122, }, [0x13123]={ category="lo", description="EGYPTIAN HIEROGLYPH F034", direction="l", linebreak="al", unicodeslot=0x13123, }, [0x13124]={ category="lo", description="EGYPTIAN HIEROGLYPH F035", direction="l", linebreak="al", unicodeslot=0x13124, }, [0x13125]={ category="lo", description="EGYPTIAN HIEROGLYPH F036", direction="l", linebreak="al", unicodeslot=0x13125, }, [0x13126]={ category="lo", description="EGYPTIAN HIEROGLYPH F037", direction="l", linebreak="al", unicodeslot=0x13126, }, [0x13127]={ category="lo", description="EGYPTIAN HIEROGLYPH F037A", direction="l", linebreak="al", unicodeslot=0x13127, }, [0x13128]={ category="lo", description="EGYPTIAN HIEROGLYPH F038", direction="l", linebreak="al", unicodeslot=0x13128, }, [0x13129]={ category="lo", description="EGYPTIAN HIEROGLYPH F038A", direction="l", linebreak="al", unicodeslot=0x13129, }, [0x1312A]={ category="lo", description="EGYPTIAN HIEROGLYPH F039", direction="l", linebreak="al", unicodeslot=0x1312A, }, [0x1312B]={ category="lo", description="EGYPTIAN HIEROGLYPH F040", direction="l", linebreak="al", unicodeslot=0x1312B, }, [0x1312C]={ category="lo", description="EGYPTIAN HIEROGLYPH F041", direction="l", linebreak="al", unicodeslot=0x1312C, }, [0x1312D]={ category="lo", description="EGYPTIAN HIEROGLYPH F042", direction="l", linebreak="al", unicodeslot=0x1312D, }, [0x1312E]={ category="lo", description="EGYPTIAN HIEROGLYPH F043", direction="l", linebreak="al", unicodeslot=0x1312E, }, [0x1312F]={ category="lo", description="EGYPTIAN HIEROGLYPH F044", direction="l", linebreak="al", unicodeslot=0x1312F, }, [0x13130]={ category="lo", description="EGYPTIAN HIEROGLYPH F045", direction="l", linebreak="al", unicodeslot=0x13130, }, [0x13131]={ category="lo", description="EGYPTIAN HIEROGLYPH F045A", direction="l", linebreak="al", unicodeslot=0x13131, }, [0x13132]={ category="lo", description="EGYPTIAN HIEROGLYPH F046", direction="l", linebreak="al", unicodeslot=0x13132, }, [0x13133]={ category="lo", description="EGYPTIAN HIEROGLYPH F046A", direction="l", linebreak="al", unicodeslot=0x13133, }, [0x13134]={ category="lo", description="EGYPTIAN HIEROGLYPH F047", direction="l", linebreak="al", unicodeslot=0x13134, }, [0x13135]={ category="lo", description="EGYPTIAN HIEROGLYPH F047A", direction="l", linebreak="al", unicodeslot=0x13135, }, [0x13136]={ category="lo", description="EGYPTIAN HIEROGLYPH F048", direction="l", linebreak="al", unicodeslot=0x13136, }, [0x13137]={ category="lo", description="EGYPTIAN HIEROGLYPH F049", direction="l", linebreak="al", unicodeslot=0x13137, }, [0x13138]={ category="lo", description="EGYPTIAN HIEROGLYPH F050", direction="l", linebreak="al", unicodeslot=0x13138, }, [0x13139]={ category="lo", description="EGYPTIAN HIEROGLYPH F051", direction="l", linebreak="al", unicodeslot=0x13139, }, [0x1313A]={ category="lo", description="EGYPTIAN HIEROGLYPH F051A", direction="l", linebreak="al", unicodeslot=0x1313A, }, [0x1313B]={ category="lo", description="EGYPTIAN HIEROGLYPH F051B", direction="l", linebreak="al", unicodeslot=0x1313B, }, [0x1313C]={ category="lo", description="EGYPTIAN HIEROGLYPH F051C", direction="l", linebreak="al", unicodeslot=0x1313C, }, [0x1313D]={ category="lo", description="EGYPTIAN HIEROGLYPH F052", direction="l", linebreak="al", unicodeslot=0x1313D, }, [0x1313E]={ category="lo", description="EGYPTIAN HIEROGLYPH F053", direction="l", linebreak="al", unicodeslot=0x1313E, }, [0x1313F]={ category="lo", description="EGYPTIAN HIEROGLYPH G001", direction="l", linebreak="al", unicodeslot=0x1313F, }, [0x13140]={ category="lo", description="EGYPTIAN HIEROGLYPH G002", direction="l", linebreak="al", unicodeslot=0x13140, }, [0x13141]={ category="lo", description="EGYPTIAN HIEROGLYPH G003", direction="l", linebreak="al", unicodeslot=0x13141, }, [0x13142]={ category="lo", description="EGYPTIAN HIEROGLYPH G004", direction="l", linebreak="al", unicodeslot=0x13142, }, [0x13143]={ category="lo", description="EGYPTIAN HIEROGLYPH G005", direction="l", linebreak="al", unicodeslot=0x13143, }, [0x13144]={ category="lo", description="EGYPTIAN HIEROGLYPH G006", direction="l", linebreak="al", unicodeslot=0x13144, }, [0x13145]={ category="lo", description="EGYPTIAN HIEROGLYPH G006A", direction="l", linebreak="al", unicodeslot=0x13145, }, [0x13146]={ category="lo", description="EGYPTIAN HIEROGLYPH G007", direction="l", linebreak="al", unicodeslot=0x13146, }, [0x13147]={ category="lo", description="EGYPTIAN HIEROGLYPH G007A", direction="l", linebreak="al", unicodeslot=0x13147, }, [0x13148]={ category="lo", description="EGYPTIAN HIEROGLYPH G007B", direction="l", linebreak="al", unicodeslot=0x13148, }, [0x13149]={ category="lo", description="EGYPTIAN HIEROGLYPH G008", direction="l", linebreak="al", unicodeslot=0x13149, }, [0x1314A]={ category="lo", description="EGYPTIAN HIEROGLYPH G009", direction="l", linebreak="al", unicodeslot=0x1314A, }, [0x1314B]={ category="lo", description="EGYPTIAN HIEROGLYPH G010", direction="l", linebreak="al", unicodeslot=0x1314B, }, [0x1314C]={ category="lo", description="EGYPTIAN HIEROGLYPH G011", direction="l", linebreak="al", unicodeslot=0x1314C, }, [0x1314D]={ category="lo", description="EGYPTIAN HIEROGLYPH G011A", direction="l", linebreak="al", unicodeslot=0x1314D, }, [0x1314E]={ category="lo", description="EGYPTIAN HIEROGLYPH G012", direction="l", linebreak="al", unicodeslot=0x1314E, }, [0x1314F]={ category="lo", description="EGYPTIAN HIEROGLYPH G013", direction="l", linebreak="al", unicodeslot=0x1314F, }, [0x13150]={ category="lo", description="EGYPTIAN HIEROGLYPH G014", direction="l", linebreak="al", unicodeslot=0x13150, }, [0x13151]={ category="lo", description="EGYPTIAN HIEROGLYPH G015", direction="l", linebreak="al", unicodeslot=0x13151, }, [0x13152]={ category="lo", description="EGYPTIAN HIEROGLYPH G016", direction="l", linebreak="al", unicodeslot=0x13152, }, [0x13153]={ category="lo", description="EGYPTIAN HIEROGLYPH G017", direction="l", linebreak="al", unicodeslot=0x13153, }, [0x13154]={ category="lo", description="EGYPTIAN HIEROGLYPH G018", direction="l", linebreak="al", unicodeslot=0x13154, }, [0x13155]={ category="lo", description="EGYPTIAN HIEROGLYPH G019", direction="l", linebreak="al", unicodeslot=0x13155, }, [0x13156]={ category="lo", description="EGYPTIAN HIEROGLYPH G020", direction="l", linebreak="al", unicodeslot=0x13156, }, [0x13157]={ category="lo", description="EGYPTIAN HIEROGLYPH G020A", direction="l", linebreak="al", unicodeslot=0x13157, }, [0x13158]={ category="lo", description="EGYPTIAN HIEROGLYPH G021", direction="l", linebreak="al", unicodeslot=0x13158, }, [0x13159]={ category="lo", description="EGYPTIAN HIEROGLYPH G022", direction="l", linebreak="al", unicodeslot=0x13159, }, [0x1315A]={ category="lo", description="EGYPTIAN HIEROGLYPH G023", direction="l", linebreak="al", unicodeslot=0x1315A, }, [0x1315B]={ category="lo", description="EGYPTIAN HIEROGLYPH G024", direction="l", linebreak="al", unicodeslot=0x1315B, }, [0x1315C]={ category="lo", description="EGYPTIAN HIEROGLYPH G025", direction="l", linebreak="al", unicodeslot=0x1315C, }, [0x1315D]={ category="lo", description="EGYPTIAN HIEROGLYPH G026", direction="l", linebreak="al", unicodeslot=0x1315D, }, [0x1315E]={ category="lo", description="EGYPTIAN HIEROGLYPH G026A", direction="l", linebreak="al", unicodeslot=0x1315E, }, [0x1315F]={ category="lo", description="EGYPTIAN HIEROGLYPH G027", direction="l", linebreak="al", unicodeslot=0x1315F, }, [0x13160]={ category="lo", description="EGYPTIAN HIEROGLYPH G028", direction="l", linebreak="al", unicodeslot=0x13160, }, [0x13161]={ category="lo", description="EGYPTIAN HIEROGLYPH G029", direction="l", linebreak="al", unicodeslot=0x13161, }, [0x13162]={ category="lo", description="EGYPTIAN HIEROGLYPH G030", direction="l", linebreak="al", unicodeslot=0x13162, }, [0x13163]={ category="lo", description="EGYPTIAN HIEROGLYPH G031", direction="l", linebreak="al", unicodeslot=0x13163, }, [0x13164]={ category="lo", description="EGYPTIAN HIEROGLYPH G032", direction="l", linebreak="al", unicodeslot=0x13164, }, [0x13165]={ category="lo", description="EGYPTIAN HIEROGLYPH G033", direction="l", linebreak="al", unicodeslot=0x13165, }, [0x13166]={ category="lo", description="EGYPTIAN HIEROGLYPH G034", direction="l", linebreak="al", unicodeslot=0x13166, }, [0x13167]={ category="lo", description="EGYPTIAN HIEROGLYPH G035", direction="l", linebreak="al", unicodeslot=0x13167, }, [0x13168]={ category="lo", description="EGYPTIAN HIEROGLYPH G036", direction="l", linebreak="al", unicodeslot=0x13168, }, [0x13169]={ category="lo", description="EGYPTIAN HIEROGLYPH G036A", direction="l", linebreak="al", unicodeslot=0x13169, }, [0x1316A]={ category="lo", description="EGYPTIAN HIEROGLYPH G037", direction="l", linebreak="al", unicodeslot=0x1316A, }, [0x1316B]={ category="lo", description="EGYPTIAN HIEROGLYPH G037A", direction="l", linebreak="al", unicodeslot=0x1316B, }, [0x1316C]={ category="lo", description="EGYPTIAN HIEROGLYPH G038", direction="l", linebreak="al", unicodeslot=0x1316C, }, [0x1316D]={ category="lo", description="EGYPTIAN HIEROGLYPH G039", direction="l", linebreak="al", unicodeslot=0x1316D, }, [0x1316E]={ category="lo", description="EGYPTIAN HIEROGLYPH G040", direction="l", linebreak="al", unicodeslot=0x1316E, }, [0x1316F]={ category="lo", description="EGYPTIAN HIEROGLYPH G041", direction="l", linebreak="al", unicodeslot=0x1316F, }, [0x13170]={ category="lo", description="EGYPTIAN HIEROGLYPH G042", direction="l", linebreak="al", unicodeslot=0x13170, }, [0x13171]={ category="lo", description="EGYPTIAN HIEROGLYPH G043", direction="l", linebreak="al", unicodeslot=0x13171, }, [0x13172]={ category="lo", description="EGYPTIAN HIEROGLYPH G043A", direction="l", linebreak="al", unicodeslot=0x13172, }, [0x13173]={ category="lo", description="EGYPTIAN HIEROGLYPH G044", direction="l", linebreak="al", unicodeslot=0x13173, }, [0x13174]={ category="lo", description="EGYPTIAN HIEROGLYPH G045", direction="l", linebreak="al", unicodeslot=0x13174, }, [0x13175]={ category="lo", description="EGYPTIAN HIEROGLYPH G045A", direction="l", linebreak="al", unicodeslot=0x13175, }, [0x13176]={ category="lo", description="EGYPTIAN HIEROGLYPH G046", direction="l", linebreak="al", unicodeslot=0x13176, }, [0x13177]={ category="lo", description="EGYPTIAN HIEROGLYPH G047", direction="l", linebreak="al", unicodeslot=0x13177, }, [0x13178]={ category="lo", description="EGYPTIAN HIEROGLYPH G048", direction="l", linebreak="al", unicodeslot=0x13178, }, [0x13179]={ category="lo", description="EGYPTIAN HIEROGLYPH G049", direction="l", linebreak="al", unicodeslot=0x13179, }, [0x1317A]={ category="lo", description="EGYPTIAN HIEROGLYPH G050", direction="l", linebreak="al", unicodeslot=0x1317A, }, [0x1317B]={ category="lo", description="EGYPTIAN HIEROGLYPH G051", direction="l", linebreak="al", unicodeslot=0x1317B, }, [0x1317C]={ category="lo", description="EGYPTIAN HIEROGLYPH G052", direction="l", linebreak="al", unicodeslot=0x1317C, }, [0x1317D]={ category="lo", description="EGYPTIAN HIEROGLYPH G053", direction="l", linebreak="al", unicodeslot=0x1317D, }, [0x1317E]={ category="lo", description="EGYPTIAN HIEROGLYPH G054", direction="l", linebreak="al", unicodeslot=0x1317E, }, [0x1317F]={ category="lo", description="EGYPTIAN HIEROGLYPH H001", direction="l", linebreak="al", unicodeslot=0x1317F, }, [0x13180]={ category="lo", description="EGYPTIAN HIEROGLYPH H002", direction="l", linebreak="al", unicodeslot=0x13180, }, [0x13181]={ category="lo", description="EGYPTIAN HIEROGLYPH H003", direction="l", linebreak="al", unicodeslot=0x13181, }, [0x13182]={ category="lo", description="EGYPTIAN HIEROGLYPH H004", direction="l", linebreak="al", unicodeslot=0x13182, }, [0x13183]={ category="lo", description="EGYPTIAN HIEROGLYPH H005", direction="l", linebreak="al", unicodeslot=0x13183, }, [0x13184]={ category="lo", description="EGYPTIAN HIEROGLYPH H006", direction="l", linebreak="al", unicodeslot=0x13184, }, [0x13185]={ category="lo", description="EGYPTIAN HIEROGLYPH H006A", direction="l", linebreak="al", unicodeslot=0x13185, }, [0x13186]={ category="lo", description="EGYPTIAN HIEROGLYPH H007", direction="l", linebreak="al", unicodeslot=0x13186, }, [0x13187]={ category="lo", description="EGYPTIAN HIEROGLYPH H008", direction="l", linebreak="al", unicodeslot=0x13187, }, [0x13188]={ category="lo", description="EGYPTIAN HIEROGLYPH I001", direction="l", linebreak="al", unicodeslot=0x13188, }, [0x13189]={ category="lo", description="EGYPTIAN HIEROGLYPH I002", direction="l", linebreak="al", unicodeslot=0x13189, }, [0x1318A]={ category="lo", description="EGYPTIAN HIEROGLYPH I003", direction="l", linebreak="al", unicodeslot=0x1318A, }, [0x1318B]={ category="lo", description="EGYPTIAN HIEROGLYPH I004", direction="l", linebreak="al", unicodeslot=0x1318B, }, [0x1318C]={ category="lo", description="EGYPTIAN HIEROGLYPH I005", direction="l", linebreak="al", unicodeslot=0x1318C, }, [0x1318D]={ category="lo", description="EGYPTIAN HIEROGLYPH I005A", direction="l", linebreak="al", unicodeslot=0x1318D, }, [0x1318E]={ category="lo", description="EGYPTIAN HIEROGLYPH I006", direction="l", linebreak="al", unicodeslot=0x1318E, }, [0x1318F]={ category="lo", description="EGYPTIAN HIEROGLYPH I007", direction="l", linebreak="al", unicodeslot=0x1318F, }, [0x13190]={ category="lo", description="EGYPTIAN HIEROGLYPH I008", direction="l", linebreak="al", unicodeslot=0x13190, }, [0x13191]={ category="lo", description="EGYPTIAN HIEROGLYPH I009", direction="l", linebreak="al", unicodeslot=0x13191, }, [0x13192]={ category="lo", description="EGYPTIAN HIEROGLYPH I009A", direction="l", linebreak="al", unicodeslot=0x13192, }, [0x13193]={ category="lo", description="EGYPTIAN HIEROGLYPH I010", direction="l", linebreak="al", unicodeslot=0x13193, }, [0x13194]={ category="lo", description="EGYPTIAN HIEROGLYPH I010A", direction="l", linebreak="al", unicodeslot=0x13194, }, [0x13195]={ category="lo", description="EGYPTIAN HIEROGLYPH I011", direction="l", linebreak="al", unicodeslot=0x13195, }, [0x13196]={ category="lo", description="EGYPTIAN HIEROGLYPH I011A", direction="l", linebreak="al", unicodeslot=0x13196, }, [0x13197]={ category="lo", description="EGYPTIAN HIEROGLYPH I012", direction="l", linebreak="al", unicodeslot=0x13197, }, [0x13198]={ category="lo", description="EGYPTIAN HIEROGLYPH I013", direction="l", linebreak="al", unicodeslot=0x13198, }, [0x13199]={ category="lo", description="EGYPTIAN HIEROGLYPH I014", direction="l", linebreak="al", unicodeslot=0x13199, }, [0x1319A]={ category="lo", description="EGYPTIAN HIEROGLYPH I015", direction="l", linebreak="al", unicodeslot=0x1319A, }, [0x1319B]={ category="lo", description="EGYPTIAN HIEROGLYPH K001", direction="l", linebreak="al", unicodeslot=0x1319B, }, [0x1319C]={ category="lo", description="EGYPTIAN HIEROGLYPH K002", direction="l", linebreak="al", unicodeslot=0x1319C, }, [0x1319D]={ category="lo", description="EGYPTIAN HIEROGLYPH K003", direction="l", linebreak="al", unicodeslot=0x1319D, }, [0x1319E]={ category="lo", description="EGYPTIAN HIEROGLYPH K004", direction="l", linebreak="al", unicodeslot=0x1319E, }, [0x1319F]={ category="lo", description="EGYPTIAN HIEROGLYPH K005", direction="l", linebreak="al", unicodeslot=0x1319F, }, [0x131A0]={ category="lo", description="EGYPTIAN HIEROGLYPH K006", direction="l", linebreak="al", unicodeslot=0x131A0, }, [0x131A1]={ category="lo", description="EGYPTIAN HIEROGLYPH K007", direction="l", linebreak="al", unicodeslot=0x131A1, }, [0x131A2]={ category="lo", description="EGYPTIAN HIEROGLYPH K008", direction="l", linebreak="al", unicodeslot=0x131A2, }, [0x131A3]={ category="lo", description="EGYPTIAN HIEROGLYPH L001", direction="l", linebreak="al", unicodeslot=0x131A3, }, [0x131A4]={ category="lo", description="EGYPTIAN HIEROGLYPH L002", direction="l", linebreak="al", unicodeslot=0x131A4, }, [0x131A5]={ category="lo", description="EGYPTIAN HIEROGLYPH L002A", direction="l", linebreak="al", unicodeslot=0x131A5, }, [0x131A6]={ category="lo", description="EGYPTIAN HIEROGLYPH L003", direction="l", linebreak="al", unicodeslot=0x131A6, }, [0x131A7]={ category="lo", description="EGYPTIAN HIEROGLYPH L004", direction="l", linebreak="al", unicodeslot=0x131A7, }, [0x131A8]={ category="lo", description="EGYPTIAN HIEROGLYPH L005", direction="l", linebreak="al", unicodeslot=0x131A8, }, [0x131A9]={ category="lo", description="EGYPTIAN HIEROGLYPH L006", direction="l", linebreak="al", unicodeslot=0x131A9, }, [0x131AA]={ category="lo", description="EGYPTIAN HIEROGLYPH L006A", direction="l", linebreak="al", unicodeslot=0x131AA, }, [0x131AB]={ category="lo", description="EGYPTIAN HIEROGLYPH L007", direction="l", linebreak="al", unicodeslot=0x131AB, }, [0x131AC]={ category="lo", description="EGYPTIAN HIEROGLYPH L008", direction="l", linebreak="al", unicodeslot=0x131AC, }, [0x131AD]={ category="lo", description="EGYPTIAN HIEROGLYPH M001", direction="l", linebreak="al", unicodeslot=0x131AD, }, [0x131AE]={ category="lo", description="EGYPTIAN HIEROGLYPH M001A", direction="l", linebreak="al", unicodeslot=0x131AE, }, [0x131AF]={ category="lo", description="EGYPTIAN HIEROGLYPH M001B", direction="l", linebreak="al", unicodeslot=0x131AF, }, [0x131B0]={ category="lo", description="EGYPTIAN HIEROGLYPH M002", direction="l", linebreak="al", unicodeslot=0x131B0, }, [0x131B1]={ category="lo", description="EGYPTIAN HIEROGLYPH M003", direction="l", linebreak="al", unicodeslot=0x131B1, }, [0x131B2]={ category="lo", description="EGYPTIAN HIEROGLYPH M003A", direction="l", linebreak="al", unicodeslot=0x131B2, }, [0x131B3]={ category="lo", description="EGYPTIAN HIEROGLYPH M004", direction="l", linebreak="al", unicodeslot=0x131B3, }, [0x131B4]={ category="lo", description="EGYPTIAN HIEROGLYPH M005", direction="l", linebreak="al", unicodeslot=0x131B4, }, [0x131B5]={ category="lo", description="EGYPTIAN HIEROGLYPH M006", direction="l", linebreak="al", unicodeslot=0x131B5, }, [0x131B6]={ category="lo", description="EGYPTIAN HIEROGLYPH M007", direction="l", linebreak="al", unicodeslot=0x131B6, }, [0x131B7]={ category="lo", description="EGYPTIAN HIEROGLYPH M008", direction="l", linebreak="al", unicodeslot=0x131B7, }, [0x131B8]={ category="lo", description="EGYPTIAN HIEROGLYPH M009", direction="l", linebreak="al", unicodeslot=0x131B8, }, [0x131B9]={ category="lo", description="EGYPTIAN HIEROGLYPH M010", direction="l", linebreak="al", unicodeslot=0x131B9, }, [0x131BA]={ category="lo", description="EGYPTIAN HIEROGLYPH M010A", direction="l", linebreak="al", unicodeslot=0x131BA, }, [0x131BB]={ category="lo", description="EGYPTIAN HIEROGLYPH M011", direction="l", linebreak="al", unicodeslot=0x131BB, }, [0x131BC]={ category="lo", description="EGYPTIAN HIEROGLYPH M012", direction="l", linebreak="al", unicodeslot=0x131BC, }, [0x131BD]={ category="lo", description="EGYPTIAN HIEROGLYPH M012A", direction="l", linebreak="al", unicodeslot=0x131BD, }, [0x131BE]={ category="lo", description="EGYPTIAN HIEROGLYPH M012B", direction="l", linebreak="al", unicodeslot=0x131BE, }, [0x131BF]={ category="lo", description="EGYPTIAN HIEROGLYPH M012C", direction="l", linebreak="al", unicodeslot=0x131BF, }, [0x131C0]={ category="lo", description="EGYPTIAN HIEROGLYPH M012D", direction="l", linebreak="al", unicodeslot=0x131C0, }, [0x131C1]={ category="lo", description="EGYPTIAN HIEROGLYPH M012E", direction="l", linebreak="al", unicodeslot=0x131C1, }, [0x131C2]={ category="lo", description="EGYPTIAN HIEROGLYPH M012F", direction="l", linebreak="al", unicodeslot=0x131C2, }, [0x131C3]={ category="lo", description="EGYPTIAN HIEROGLYPH M012G", direction="l", linebreak="al", unicodeslot=0x131C3, }, [0x131C4]={ category="lo", description="EGYPTIAN HIEROGLYPH M012H", direction="l", linebreak="al", unicodeslot=0x131C4, }, [0x131C5]={ category="lo", description="EGYPTIAN HIEROGLYPH M013", direction="l", linebreak="al", unicodeslot=0x131C5, }, [0x131C6]={ category="lo", description="EGYPTIAN HIEROGLYPH M014", direction="l", linebreak="al", unicodeslot=0x131C6, }, [0x131C7]={ category="lo", description="EGYPTIAN HIEROGLYPH M015", direction="l", linebreak="al", unicodeslot=0x131C7, }, [0x131C8]={ category="lo", description="EGYPTIAN HIEROGLYPH M015A", direction="l", linebreak="al", unicodeslot=0x131C8, }, [0x131C9]={ category="lo", description="EGYPTIAN HIEROGLYPH M016", direction="l", linebreak="al", unicodeslot=0x131C9, }, [0x131CA]={ category="lo", description="EGYPTIAN HIEROGLYPH M016A", direction="l", linebreak="al", unicodeslot=0x131CA, }, [0x131CB]={ category="lo", description="EGYPTIAN HIEROGLYPH M017", direction="l", linebreak="al", unicodeslot=0x131CB, }, [0x131CC]={ category="lo", description="EGYPTIAN HIEROGLYPH M017A", direction="l", linebreak="al", unicodeslot=0x131CC, }, [0x131CD]={ category="lo", description="EGYPTIAN HIEROGLYPH M018", direction="l", linebreak="al", unicodeslot=0x131CD, }, [0x131CE]={ category="lo", description="EGYPTIAN HIEROGLYPH M019", direction="l", linebreak="al", unicodeslot=0x131CE, }, [0x131CF]={ category="lo", description="EGYPTIAN HIEROGLYPH M020", direction="l", linebreak="al", unicodeslot=0x131CF, }, [0x131D0]={ category="lo", description="EGYPTIAN HIEROGLYPH M021", direction="l", linebreak="al", unicodeslot=0x131D0, }, [0x131D1]={ category="lo", description="EGYPTIAN HIEROGLYPH M022", direction="l", linebreak="al", unicodeslot=0x131D1, }, [0x131D2]={ category="lo", description="EGYPTIAN HIEROGLYPH M022A", direction="l", linebreak="al", unicodeslot=0x131D2, }, [0x131D3]={ category="lo", description="EGYPTIAN HIEROGLYPH M023", direction="l", linebreak="al", unicodeslot=0x131D3, }, [0x131D4]={ category="lo", description="EGYPTIAN HIEROGLYPH M024", direction="l", linebreak="al", unicodeslot=0x131D4, }, [0x131D5]={ category="lo", description="EGYPTIAN HIEROGLYPH M024A", direction="l", linebreak="al", unicodeslot=0x131D5, }, [0x131D6]={ category="lo", description="EGYPTIAN HIEROGLYPH M025", direction="l", linebreak="al", unicodeslot=0x131D6, }, [0x131D7]={ category="lo", description="EGYPTIAN HIEROGLYPH M026", direction="l", linebreak="al", unicodeslot=0x131D7, }, [0x131D8]={ category="lo", description="EGYPTIAN HIEROGLYPH M027", direction="l", linebreak="al", unicodeslot=0x131D8, }, [0x131D9]={ category="lo", description="EGYPTIAN HIEROGLYPH M028", direction="l", linebreak="al", unicodeslot=0x131D9, }, [0x131DA]={ category="lo", description="EGYPTIAN HIEROGLYPH M028A", direction="l", linebreak="al", unicodeslot=0x131DA, }, [0x131DB]={ category="lo", description="EGYPTIAN HIEROGLYPH M029", direction="l", linebreak="al", unicodeslot=0x131DB, }, [0x131DC]={ category="lo", description="EGYPTIAN HIEROGLYPH M030", direction="l", linebreak="al", unicodeslot=0x131DC, }, [0x131DD]={ category="lo", description="EGYPTIAN HIEROGLYPH M031", direction="l", linebreak="al", unicodeslot=0x131DD, }, [0x131DE]={ category="lo", description="EGYPTIAN HIEROGLYPH M031A", direction="l", linebreak="al", unicodeslot=0x131DE, }, [0x131DF]={ category="lo", description="EGYPTIAN HIEROGLYPH M032", direction="l", linebreak="al", unicodeslot=0x131DF, }, [0x131E0]={ category="lo", description="EGYPTIAN HIEROGLYPH M033", direction="l", linebreak="al", unicodeslot=0x131E0, }, [0x131E1]={ category="lo", description="EGYPTIAN HIEROGLYPH M033A", direction="l", linebreak="al", unicodeslot=0x131E1, }, [0x131E2]={ category="lo", description="EGYPTIAN HIEROGLYPH M033B", direction="l", linebreak="al", unicodeslot=0x131E2, }, [0x131E3]={ category="lo", description="EGYPTIAN HIEROGLYPH M034", direction="l", linebreak="al", unicodeslot=0x131E3, }, [0x131E4]={ category="lo", description="EGYPTIAN HIEROGLYPH M035", direction="l", linebreak="al", unicodeslot=0x131E4, }, [0x131E5]={ category="lo", description="EGYPTIAN HIEROGLYPH M036", direction="l", linebreak="al", unicodeslot=0x131E5, }, [0x131E6]={ category="lo", description="EGYPTIAN HIEROGLYPH M037", direction="l", linebreak="al", unicodeslot=0x131E6, }, [0x131E7]={ category="lo", description="EGYPTIAN HIEROGLYPH M038", direction="l", linebreak="al", unicodeslot=0x131E7, }, [0x131E8]={ category="lo", description="EGYPTIAN HIEROGLYPH M039", direction="l", linebreak="al", unicodeslot=0x131E8, }, [0x131E9]={ category="lo", description="EGYPTIAN HIEROGLYPH M040", direction="l", linebreak="al", unicodeslot=0x131E9, }, [0x131EA]={ category="lo", description="EGYPTIAN HIEROGLYPH M040A", direction="l", linebreak="al", unicodeslot=0x131EA, }, [0x131EB]={ category="lo", description="EGYPTIAN HIEROGLYPH M041", direction="l", linebreak="al", unicodeslot=0x131EB, }, [0x131EC]={ category="lo", description="EGYPTIAN HIEROGLYPH M042", direction="l", linebreak="al", unicodeslot=0x131EC, }, [0x131ED]={ category="lo", description="EGYPTIAN HIEROGLYPH M043", direction="l", linebreak="al", unicodeslot=0x131ED, }, [0x131EE]={ category="lo", description="EGYPTIAN HIEROGLYPH M044", direction="l", linebreak="al", unicodeslot=0x131EE, }, [0x131EF]={ category="lo", description="EGYPTIAN HIEROGLYPH N001", direction="l", linebreak="al", unicodeslot=0x131EF, }, [0x131F0]={ category="lo", description="EGYPTIAN HIEROGLYPH N002", direction="l", linebreak="al", unicodeslot=0x131F0, }, [0x131F1]={ category="lo", description="EGYPTIAN HIEROGLYPH N003", direction="l", linebreak="al", unicodeslot=0x131F1, }, [0x131F2]={ category="lo", description="EGYPTIAN HIEROGLYPH N004", direction="l", linebreak="al", unicodeslot=0x131F2, }, [0x131F3]={ category="lo", description="EGYPTIAN HIEROGLYPH N005", direction="l", linebreak="al", unicodeslot=0x131F3, }, [0x131F4]={ category="lo", description="EGYPTIAN HIEROGLYPH N006", direction="l", linebreak="al", unicodeslot=0x131F4, }, [0x131F5]={ category="lo", description="EGYPTIAN HIEROGLYPH N007", direction="l", linebreak="al", unicodeslot=0x131F5, }, [0x131F6]={ category="lo", description="EGYPTIAN HIEROGLYPH N008", direction="l", linebreak="al", unicodeslot=0x131F6, }, [0x131F7]={ category="lo", description="EGYPTIAN HIEROGLYPH N009", direction="l", linebreak="al", unicodeslot=0x131F7, }, [0x131F8]={ category="lo", description="EGYPTIAN HIEROGLYPH N010", direction="l", linebreak="al", unicodeslot=0x131F8, }, [0x131F9]={ category="lo", description="EGYPTIAN HIEROGLYPH N011", direction="l", linebreak="al", unicodeslot=0x131F9, }, [0x131FA]={ category="lo", description="EGYPTIAN HIEROGLYPH N012", direction="l", linebreak="al", unicodeslot=0x131FA, }, [0x131FB]={ category="lo", description="EGYPTIAN HIEROGLYPH N013", direction="l", linebreak="al", unicodeslot=0x131FB, }, [0x131FC]={ category="lo", description="EGYPTIAN HIEROGLYPH N014", direction="l", linebreak="al", unicodeslot=0x131FC, }, [0x131FD]={ category="lo", description="EGYPTIAN HIEROGLYPH N015", direction="l", linebreak="al", unicodeslot=0x131FD, }, [0x131FE]={ category="lo", description="EGYPTIAN HIEROGLYPH N016", direction="l", linebreak="al", unicodeslot=0x131FE, }, [0x131FF]={ category="lo", description="EGYPTIAN HIEROGLYPH N017", direction="l", linebreak="al", unicodeslot=0x131FF, }, [0x13200]={ category="lo", description="EGYPTIAN HIEROGLYPH N018", direction="l", linebreak="al", unicodeslot=0x13200, }, [0x13201]={ category="lo", description="EGYPTIAN HIEROGLYPH N018A", direction="l", linebreak="al", unicodeslot=0x13201, }, [0x13202]={ category="lo", description="EGYPTIAN HIEROGLYPH N018B", direction="l", linebreak="al", unicodeslot=0x13202, }, [0x13203]={ category="lo", description="EGYPTIAN HIEROGLYPH N019", direction="l", linebreak="al", unicodeslot=0x13203, }, [0x13204]={ category="lo", description="EGYPTIAN HIEROGLYPH N020", direction="l", linebreak="al", unicodeslot=0x13204, }, [0x13205]={ category="lo", description="EGYPTIAN HIEROGLYPH N021", direction="l", linebreak="al", unicodeslot=0x13205, }, [0x13206]={ category="lo", description="EGYPTIAN HIEROGLYPH N022", direction="l", linebreak="al", unicodeslot=0x13206, }, [0x13207]={ category="lo", description="EGYPTIAN HIEROGLYPH N023", direction="l", linebreak="al", unicodeslot=0x13207, }, [0x13208]={ category="lo", description="EGYPTIAN HIEROGLYPH N024", direction="l", linebreak="al", unicodeslot=0x13208, }, [0x13209]={ category="lo", description="EGYPTIAN HIEROGLYPH N025", direction="l", linebreak="al", unicodeslot=0x13209, }, [0x1320A]={ category="lo", description="EGYPTIAN HIEROGLYPH N025A", direction="l", linebreak="al", unicodeslot=0x1320A, }, [0x1320B]={ category="lo", description="EGYPTIAN HIEROGLYPH N026", direction="l", linebreak="al", unicodeslot=0x1320B, }, [0x1320C]={ category="lo", description="EGYPTIAN HIEROGLYPH N027", direction="l", linebreak="al", unicodeslot=0x1320C, }, [0x1320D]={ category="lo", description="EGYPTIAN HIEROGLYPH N028", direction="l", linebreak="al", unicodeslot=0x1320D, }, [0x1320E]={ category="lo", description="EGYPTIAN HIEROGLYPH N029", direction="l", linebreak="al", unicodeslot=0x1320E, }, [0x1320F]={ category="lo", description="EGYPTIAN HIEROGLYPH N030", direction="l", linebreak="al", unicodeslot=0x1320F, }, [0x13210]={ category="lo", description="EGYPTIAN HIEROGLYPH N031", direction="l", linebreak="al", unicodeslot=0x13210, }, [0x13211]={ category="lo", description="EGYPTIAN HIEROGLYPH N032", direction="l", linebreak="al", unicodeslot=0x13211, }, [0x13212]={ category="lo", description="EGYPTIAN HIEROGLYPH N033", direction="l", linebreak="al", unicodeslot=0x13212, }, [0x13213]={ category="lo", description="EGYPTIAN HIEROGLYPH N033A", direction="l", linebreak="al", unicodeslot=0x13213, }, [0x13214]={ category="lo", description="EGYPTIAN HIEROGLYPH N034", direction="l", linebreak="al", unicodeslot=0x13214, }, [0x13215]={ category="lo", description="EGYPTIAN HIEROGLYPH N034A", direction="l", linebreak="al", unicodeslot=0x13215, }, [0x13216]={ category="lo", description="EGYPTIAN HIEROGLYPH N035", direction="l", linebreak="al", unicodeslot=0x13216, }, [0x13217]={ category="lo", description="EGYPTIAN HIEROGLYPH N035A", direction="l", linebreak="al", unicodeslot=0x13217, }, [0x13218]={ category="lo", description="EGYPTIAN HIEROGLYPH N036", direction="l", linebreak="al", unicodeslot=0x13218, }, [0x13219]={ category="lo", description="EGYPTIAN HIEROGLYPH N037", direction="l", linebreak="al", unicodeslot=0x13219, }, [0x1321A]={ category="lo", description="EGYPTIAN HIEROGLYPH N037A", direction="l", linebreak="al", unicodeslot=0x1321A, }, [0x1321B]={ category="lo", description="EGYPTIAN HIEROGLYPH N038", direction="l", linebreak="al", unicodeslot=0x1321B, }, [0x1321C]={ category="lo", description="EGYPTIAN HIEROGLYPH N039", direction="l", linebreak="al", unicodeslot=0x1321C, }, [0x1321D]={ category="lo", description="EGYPTIAN HIEROGLYPH N040", direction="l", linebreak="al", unicodeslot=0x1321D, }, [0x1321E]={ category="lo", description="EGYPTIAN HIEROGLYPH N041", direction="l", linebreak="al", unicodeslot=0x1321E, }, [0x1321F]={ category="lo", description="EGYPTIAN HIEROGLYPH N042", direction="l", linebreak="al", unicodeslot=0x1321F, }, [0x13220]={ category="lo", description="EGYPTIAN HIEROGLYPH NL001", direction="l", linebreak="al", unicodeslot=0x13220, }, [0x13221]={ category="lo", description="EGYPTIAN HIEROGLYPH NL002", direction="l", linebreak="al", unicodeslot=0x13221, }, [0x13222]={ category="lo", description="EGYPTIAN HIEROGLYPH NL003", direction="l", linebreak="al", unicodeslot=0x13222, }, [0x13223]={ category="lo", description="EGYPTIAN HIEROGLYPH NL004", direction="l", linebreak="al", unicodeslot=0x13223, }, [0x13224]={ category="lo", description="EGYPTIAN HIEROGLYPH NL005", direction="l", linebreak="al", unicodeslot=0x13224, }, [0x13225]={ category="lo", description="EGYPTIAN HIEROGLYPH NL005A", direction="l", linebreak="al", unicodeslot=0x13225, }, [0x13226]={ category="lo", description="EGYPTIAN HIEROGLYPH NL006", direction="l", linebreak="al", unicodeslot=0x13226, }, [0x13227]={ category="lo", description="EGYPTIAN HIEROGLYPH NL007", direction="l", linebreak="al", unicodeslot=0x13227, }, [0x13228]={ category="lo", description="EGYPTIAN HIEROGLYPH NL008", direction="l", linebreak="al", unicodeslot=0x13228, }, [0x13229]={ category="lo", description="EGYPTIAN HIEROGLYPH NL009", direction="l", linebreak="al", unicodeslot=0x13229, }, [0x1322A]={ category="lo", description="EGYPTIAN HIEROGLYPH NL010", direction="l", linebreak="al", unicodeslot=0x1322A, }, [0x1322B]={ category="lo", description="EGYPTIAN HIEROGLYPH NL011", direction="l", linebreak="al", unicodeslot=0x1322B, }, [0x1322C]={ category="lo", description="EGYPTIAN HIEROGLYPH NL012", direction="l", linebreak="al", unicodeslot=0x1322C, }, [0x1322D]={ category="lo", description="EGYPTIAN HIEROGLYPH NL013", direction="l", linebreak="al", unicodeslot=0x1322D, }, [0x1322E]={ category="lo", description="EGYPTIAN HIEROGLYPH NL014", direction="l", linebreak="al", unicodeslot=0x1322E, }, [0x1322F]={ category="lo", description="EGYPTIAN HIEROGLYPH NL015", direction="l", linebreak="al", unicodeslot=0x1322F, }, [0x13230]={ category="lo", description="EGYPTIAN HIEROGLYPH NL016", direction="l", linebreak="al", unicodeslot=0x13230, }, [0x13231]={ category="lo", description="EGYPTIAN HIEROGLYPH NL017", direction="l", linebreak="al", unicodeslot=0x13231, }, [0x13232]={ category="lo", description="EGYPTIAN HIEROGLYPH NL017A", direction="l", linebreak="al", unicodeslot=0x13232, }, [0x13233]={ category="lo", description="EGYPTIAN HIEROGLYPH NL018", direction="l", linebreak="al", unicodeslot=0x13233, }, [0x13234]={ category="lo", description="EGYPTIAN HIEROGLYPH NL019", direction="l", linebreak="al", unicodeslot=0x13234, }, [0x13235]={ category="lo", description="EGYPTIAN HIEROGLYPH NL020", direction="l", linebreak="al", unicodeslot=0x13235, }, [0x13236]={ category="lo", description="EGYPTIAN HIEROGLYPH NU001", direction="l", linebreak="al", unicodeslot=0x13236, }, [0x13237]={ category="lo", description="EGYPTIAN HIEROGLYPH NU002", direction="l", linebreak="al", unicodeslot=0x13237, }, [0x13238]={ category="lo", description="EGYPTIAN HIEROGLYPH NU003", direction="l", linebreak="al", unicodeslot=0x13238, }, [0x13239]={ category="lo", description="EGYPTIAN HIEROGLYPH NU004", direction="l", linebreak="al", unicodeslot=0x13239, }, [0x1323A]={ category="lo", description="EGYPTIAN HIEROGLYPH NU005", direction="l", linebreak="al", unicodeslot=0x1323A, }, [0x1323B]={ category="lo", description="EGYPTIAN HIEROGLYPH NU006", direction="l", linebreak="al", unicodeslot=0x1323B, }, [0x1323C]={ category="lo", description="EGYPTIAN HIEROGLYPH NU007", direction="l", linebreak="al", unicodeslot=0x1323C, }, [0x1323D]={ category="lo", description="EGYPTIAN HIEROGLYPH NU008", direction="l", linebreak="al", unicodeslot=0x1323D, }, [0x1323E]={ category="lo", description="EGYPTIAN HIEROGLYPH NU009", direction="l", linebreak="al", unicodeslot=0x1323E, }, [0x1323F]={ category="lo", description="EGYPTIAN HIEROGLYPH NU010", direction="l", linebreak="al", unicodeslot=0x1323F, }, [0x13240]={ category="lo", description="EGYPTIAN HIEROGLYPH NU010A", direction="l", linebreak="al", unicodeslot=0x13240, }, [0x13241]={ category="lo", description="EGYPTIAN HIEROGLYPH NU011", direction="l", linebreak="al", unicodeslot=0x13241, }, [0x13242]={ category="lo", description="EGYPTIAN HIEROGLYPH NU011A", direction="l", linebreak="al", unicodeslot=0x13242, }, [0x13243]={ category="lo", description="EGYPTIAN HIEROGLYPH NU012", direction="l", linebreak="al", unicodeslot=0x13243, }, [0x13244]={ category="lo", description="EGYPTIAN HIEROGLYPH NU013", direction="l", linebreak="al", unicodeslot=0x13244, }, [0x13245]={ category="lo", description="EGYPTIAN HIEROGLYPH NU014", direction="l", linebreak="al", unicodeslot=0x13245, }, [0x13246]={ category="lo", description="EGYPTIAN HIEROGLYPH NU015", direction="l", linebreak="al", unicodeslot=0x13246, }, [0x13247]={ category="lo", description="EGYPTIAN HIEROGLYPH NU016", direction="l", linebreak="al", unicodeslot=0x13247, }, [0x13248]={ category="lo", description="EGYPTIAN HIEROGLYPH NU017", direction="l", linebreak="al", unicodeslot=0x13248, }, [0x13249]={ category="lo", description="EGYPTIAN HIEROGLYPH NU018", direction="l", linebreak="al", unicodeslot=0x13249, }, [0x1324A]={ category="lo", description="EGYPTIAN HIEROGLYPH NU018A", direction="l", linebreak="al", unicodeslot=0x1324A, }, [0x1324B]={ category="lo", description="EGYPTIAN HIEROGLYPH NU019", direction="l", linebreak="al", unicodeslot=0x1324B, }, [0x1324C]={ category="lo", description="EGYPTIAN HIEROGLYPH NU020", direction="l", linebreak="al", unicodeslot=0x1324C, }, [0x1324D]={ category="lo", description="EGYPTIAN HIEROGLYPH NU021", direction="l", linebreak="al", unicodeslot=0x1324D, }, [0x1324E]={ category="lo", description="EGYPTIAN HIEROGLYPH NU022", direction="l", linebreak="al", unicodeslot=0x1324E, }, [0x1324F]={ category="lo", description="EGYPTIAN HIEROGLYPH NU022A", direction="l", linebreak="al", unicodeslot=0x1324F, }, [0x13250]={ category="lo", description="EGYPTIAN HIEROGLYPH O001", direction="l", linebreak="al", unicodeslot=0x13250, }, [0x13251]={ category="lo", description="EGYPTIAN HIEROGLYPH O001A", direction="l", linebreak="al", unicodeslot=0x13251, }, [0x13252]={ category="lo", description="EGYPTIAN HIEROGLYPH O002", direction="l", linebreak="al", unicodeslot=0x13252, }, [0x13253]={ category="lo", description="EGYPTIAN HIEROGLYPH O003", direction="l", linebreak="al", unicodeslot=0x13253, }, [0x13254]={ category="lo", description="EGYPTIAN HIEROGLYPH O004", direction="l", linebreak="al", unicodeslot=0x13254, }, [0x13255]={ category="lo", description="EGYPTIAN HIEROGLYPH O005", direction="l", linebreak="al", unicodeslot=0x13255, }, [0x13256]={ category="lo", description="EGYPTIAN HIEROGLYPH O005A", direction="l", linebreak="al", unicodeslot=0x13256, }, [0x13257]={ category="lo", description="EGYPTIAN HIEROGLYPH O006", direction="l", linebreak="al", unicodeslot=0x13257, }, [0x13258]={ category="lo", description="EGYPTIAN HIEROGLYPH O006A", direction="l", linebreak="op", unicodeslot=0x13258, }, [0x13259]={ category="lo", description="EGYPTIAN HIEROGLYPH O006B", direction="l", linebreak="op", unicodeslot=0x13259, }, [0x1325A]={ category="lo", description="EGYPTIAN HIEROGLYPH O006C", direction="l", linebreak="op", unicodeslot=0x1325A, }, [0x1325B]={ category="lo", description="EGYPTIAN HIEROGLYPH O006D", direction="l", linebreak="cl", unicodeslot=0x1325B, }, [0x1325C]={ category="lo", description="EGYPTIAN HIEROGLYPH O006E", direction="l", linebreak="cl", unicodeslot=0x1325C, }, [0x1325D]={ category="lo", description="EGYPTIAN HIEROGLYPH O006F", direction="l", linebreak="cl", unicodeslot=0x1325D, }, [0x1325E]={ category="lo", description="EGYPTIAN HIEROGLYPH O007", direction="l", linebreak="al", unicodeslot=0x1325E, }, [0x1325F]={ category="lo", description="EGYPTIAN HIEROGLYPH O008", direction="l", linebreak="al", unicodeslot=0x1325F, }, [0x13260]={ category="lo", description="EGYPTIAN HIEROGLYPH O009", direction="l", linebreak="al", unicodeslot=0x13260, }, [0x13261]={ category="lo", description="EGYPTIAN HIEROGLYPH O010", direction="l", linebreak="al", unicodeslot=0x13261, }, [0x13262]={ category="lo", description="EGYPTIAN HIEROGLYPH O010A", direction="l", linebreak="al", unicodeslot=0x13262, }, [0x13263]={ category="lo", description="EGYPTIAN HIEROGLYPH O010B", direction="l", linebreak="al", unicodeslot=0x13263, }, [0x13264]={ category="lo", description="EGYPTIAN HIEROGLYPH O010C", direction="l", linebreak="al", unicodeslot=0x13264, }, [0x13265]={ category="lo", description="EGYPTIAN HIEROGLYPH O011", direction="l", linebreak="al", unicodeslot=0x13265, }, [0x13266]={ category="lo", description="EGYPTIAN HIEROGLYPH O012", direction="l", linebreak="al", unicodeslot=0x13266, }, [0x13267]={ category="lo", description="EGYPTIAN HIEROGLYPH O013", direction="l", linebreak="al", unicodeslot=0x13267, }, [0x13268]={ category="lo", description="EGYPTIAN HIEROGLYPH O014", direction="l", linebreak="al", unicodeslot=0x13268, }, [0x13269]={ category="lo", description="EGYPTIAN HIEROGLYPH O015", direction="l", linebreak="al", unicodeslot=0x13269, }, [0x1326A]={ category="lo", description="EGYPTIAN HIEROGLYPH O016", direction="l", linebreak="al", unicodeslot=0x1326A, }, [0x1326B]={ category="lo", description="EGYPTIAN HIEROGLYPH O017", direction="l", linebreak="al", unicodeslot=0x1326B, }, [0x1326C]={ category="lo", description="EGYPTIAN HIEROGLYPH O018", direction="l", linebreak="al", unicodeslot=0x1326C, }, [0x1326D]={ category="lo", description="EGYPTIAN HIEROGLYPH O019", direction="l", linebreak="al", unicodeslot=0x1326D, }, [0x1326E]={ category="lo", description="EGYPTIAN HIEROGLYPH O019A", direction="l", linebreak="al", unicodeslot=0x1326E, }, [0x1326F]={ category="lo", description="EGYPTIAN HIEROGLYPH O020", direction="l", linebreak="al", unicodeslot=0x1326F, }, [0x13270]={ category="lo", description="EGYPTIAN HIEROGLYPH O020A", direction="l", linebreak="al", unicodeslot=0x13270, }, [0x13271]={ category="lo", description="EGYPTIAN HIEROGLYPH O021", direction="l", linebreak="al", unicodeslot=0x13271, }, [0x13272]={ category="lo", description="EGYPTIAN HIEROGLYPH O022", direction="l", linebreak="al", unicodeslot=0x13272, }, [0x13273]={ category="lo", description="EGYPTIAN HIEROGLYPH O023", direction="l", linebreak="al", unicodeslot=0x13273, }, [0x13274]={ category="lo", description="EGYPTIAN HIEROGLYPH O024", direction="l", linebreak="al", unicodeslot=0x13274, }, [0x13275]={ category="lo", description="EGYPTIAN HIEROGLYPH O024A", direction="l", linebreak="al", unicodeslot=0x13275, }, [0x13276]={ category="lo", description="EGYPTIAN HIEROGLYPH O025", direction="l", linebreak="al", unicodeslot=0x13276, }, [0x13277]={ category="lo", description="EGYPTIAN HIEROGLYPH O025A", direction="l", linebreak="al", unicodeslot=0x13277, }, [0x13278]={ category="lo", description="EGYPTIAN HIEROGLYPH O026", direction="l", linebreak="al", unicodeslot=0x13278, }, [0x13279]={ category="lo", description="EGYPTIAN HIEROGLYPH O027", direction="l", linebreak="al", unicodeslot=0x13279, }, [0x1327A]={ category="lo", description="EGYPTIAN HIEROGLYPH O028", direction="l", linebreak="al", unicodeslot=0x1327A, }, [0x1327B]={ category="lo", description="EGYPTIAN HIEROGLYPH O029", direction="l", linebreak="al", unicodeslot=0x1327B, }, [0x1327C]={ category="lo", description="EGYPTIAN HIEROGLYPH O029A", direction="l", linebreak="al", unicodeslot=0x1327C, }, [0x1327D]={ category="lo", description="EGYPTIAN HIEROGLYPH O030", direction="l", linebreak="al", unicodeslot=0x1327D, }, [0x1327E]={ category="lo", description="EGYPTIAN HIEROGLYPH O030A", direction="l", linebreak="al", unicodeslot=0x1327E, }, [0x1327F]={ category="lo", description="EGYPTIAN HIEROGLYPH O031", direction="l", linebreak="al", unicodeslot=0x1327F, }, [0x13280]={ category="lo", description="EGYPTIAN HIEROGLYPH O032", direction="l", linebreak="al", unicodeslot=0x13280, }, [0x13281]={ category="lo", description="EGYPTIAN HIEROGLYPH O033", direction="l", linebreak="al", unicodeslot=0x13281, }, [0x13282]={ category="lo", description="EGYPTIAN HIEROGLYPH O033A", direction="l", linebreak="cl", unicodeslot=0x13282, }, [0x13283]={ category="lo", description="EGYPTIAN HIEROGLYPH O034", direction="l", linebreak="al", unicodeslot=0x13283, }, [0x13284]={ category="lo", description="EGYPTIAN HIEROGLYPH O035", direction="l", linebreak="al", unicodeslot=0x13284, }, [0x13285]={ category="lo", description="EGYPTIAN HIEROGLYPH O036", direction="l", linebreak="al", unicodeslot=0x13285, }, [0x13286]={ category="lo", description="EGYPTIAN HIEROGLYPH O036A", direction="l", linebreak="op", unicodeslot=0x13286, }, [0x13287]={ category="lo", description="EGYPTIAN HIEROGLYPH O036B", direction="l", linebreak="cl", unicodeslot=0x13287, }, [0x13288]={ category="lo", description="EGYPTIAN HIEROGLYPH O036C", direction="l", linebreak="op", unicodeslot=0x13288, }, [0x13289]={ category="lo", description="EGYPTIAN HIEROGLYPH O036D", direction="l", linebreak="cl", unicodeslot=0x13289, }, [0x1328A]={ category="lo", description="EGYPTIAN HIEROGLYPH O037", direction="l", linebreak="al", unicodeslot=0x1328A, }, [0x1328B]={ category="lo", description="EGYPTIAN HIEROGLYPH O038", direction="l", linebreak="al", unicodeslot=0x1328B, }, [0x1328C]={ category="lo", description="EGYPTIAN HIEROGLYPH O039", direction="l", linebreak="al", unicodeslot=0x1328C, }, [0x1328D]={ category="lo", description="EGYPTIAN HIEROGLYPH O040", direction="l", linebreak="al", unicodeslot=0x1328D, }, [0x1328E]={ category="lo", description="EGYPTIAN HIEROGLYPH O041", direction="l", linebreak="al", unicodeslot=0x1328E, }, [0x1328F]={ category="lo", description="EGYPTIAN HIEROGLYPH O042", direction="l", linebreak="al", unicodeslot=0x1328F, }, [0x13290]={ category="lo", description="EGYPTIAN HIEROGLYPH O043", direction="l", linebreak="al", unicodeslot=0x13290, }, [0x13291]={ category="lo", description="EGYPTIAN HIEROGLYPH O044", direction="l", linebreak="al", unicodeslot=0x13291, }, [0x13292]={ category="lo", description="EGYPTIAN HIEROGLYPH O045", direction="l", linebreak="al", unicodeslot=0x13292, }, [0x13293]={ category="lo", description="EGYPTIAN HIEROGLYPH O046", direction="l", linebreak="al", unicodeslot=0x13293, }, [0x13294]={ category="lo", description="EGYPTIAN HIEROGLYPH O047", direction="l", linebreak="al", unicodeslot=0x13294, }, [0x13295]={ category="lo", description="EGYPTIAN HIEROGLYPH O048", direction="l", linebreak="al", unicodeslot=0x13295, }, [0x13296]={ category="lo", description="EGYPTIAN HIEROGLYPH O049", direction="l", linebreak="al", unicodeslot=0x13296, }, [0x13297]={ category="lo", description="EGYPTIAN HIEROGLYPH O050", direction="l", linebreak="al", unicodeslot=0x13297, }, [0x13298]={ category="lo", description="EGYPTIAN HIEROGLYPH O050A", direction="l", linebreak="al", unicodeslot=0x13298, }, [0x13299]={ category="lo", description="EGYPTIAN HIEROGLYPH O050B", direction="l", linebreak="al", unicodeslot=0x13299, }, [0x1329A]={ category="lo", description="EGYPTIAN HIEROGLYPH O051", direction="l", linebreak="al", unicodeslot=0x1329A, }, [0x1329B]={ category="lo", description="EGYPTIAN HIEROGLYPH P001", direction="l", linebreak="al", unicodeslot=0x1329B, }, [0x1329C]={ category="lo", description="EGYPTIAN HIEROGLYPH P001A", direction="l", linebreak="al", unicodeslot=0x1329C, }, [0x1329D]={ category="lo", description="EGYPTIAN HIEROGLYPH P002", direction="l", linebreak="al", unicodeslot=0x1329D, }, [0x1329E]={ category="lo", description="EGYPTIAN HIEROGLYPH P003", direction="l", linebreak="al", unicodeslot=0x1329E, }, [0x1329F]={ category="lo", description="EGYPTIAN HIEROGLYPH P003A", direction="l", linebreak="al", unicodeslot=0x1329F, }, [0x132A0]={ category="lo", description="EGYPTIAN HIEROGLYPH P004", direction="l", linebreak="al", unicodeslot=0x132A0, }, [0x132A1]={ category="lo", description="EGYPTIAN HIEROGLYPH P005", direction="l", linebreak="al", unicodeslot=0x132A1, }, [0x132A2]={ category="lo", description="EGYPTIAN HIEROGLYPH P006", direction="l", linebreak="al", unicodeslot=0x132A2, }, [0x132A3]={ category="lo", description="EGYPTIAN HIEROGLYPH P007", direction="l", linebreak="al", unicodeslot=0x132A3, }, [0x132A4]={ category="lo", description="EGYPTIAN HIEROGLYPH P008", direction="l", linebreak="al", unicodeslot=0x132A4, }, [0x132A5]={ category="lo", description="EGYPTIAN HIEROGLYPH P009", direction="l", linebreak="al", unicodeslot=0x132A5, }, [0x132A6]={ category="lo", description="EGYPTIAN HIEROGLYPH P010", direction="l", linebreak="al", unicodeslot=0x132A6, }, [0x132A7]={ category="lo", description="EGYPTIAN HIEROGLYPH P011", direction="l", linebreak="al", unicodeslot=0x132A7, }, [0x132A8]={ category="lo", description="EGYPTIAN HIEROGLYPH Q001", direction="l", linebreak="al", unicodeslot=0x132A8, }, [0x132A9]={ category="lo", description="EGYPTIAN HIEROGLYPH Q002", direction="l", linebreak="al", unicodeslot=0x132A9, }, [0x132AA]={ category="lo", description="EGYPTIAN HIEROGLYPH Q003", direction="l", linebreak="al", unicodeslot=0x132AA, }, [0x132AB]={ category="lo", description="EGYPTIAN HIEROGLYPH Q004", direction="l", linebreak="al", unicodeslot=0x132AB, }, [0x132AC]={ category="lo", description="EGYPTIAN HIEROGLYPH Q005", direction="l", linebreak="al", unicodeslot=0x132AC, }, [0x132AD]={ category="lo", description="EGYPTIAN HIEROGLYPH Q006", direction="l", linebreak="al", unicodeslot=0x132AD, }, [0x132AE]={ category="lo", description="EGYPTIAN HIEROGLYPH Q007", direction="l", linebreak="al", unicodeslot=0x132AE, }, [0x132AF]={ category="lo", description="EGYPTIAN HIEROGLYPH R001", direction="l", linebreak="al", unicodeslot=0x132AF, }, [0x132B0]={ category="lo", description="EGYPTIAN HIEROGLYPH R002", direction="l", linebreak="al", unicodeslot=0x132B0, }, [0x132B1]={ category="lo", description="EGYPTIAN HIEROGLYPH R002A", direction="l", linebreak="al", unicodeslot=0x132B1, }, [0x132B2]={ category="lo", description="EGYPTIAN HIEROGLYPH R003", direction="l", linebreak="al", unicodeslot=0x132B2, }, [0x132B3]={ category="lo", description="EGYPTIAN HIEROGLYPH R003A", direction="l", linebreak="al", unicodeslot=0x132B3, }, [0x132B4]={ category="lo", description="EGYPTIAN HIEROGLYPH R003B", direction="l", linebreak="al", unicodeslot=0x132B4, }, [0x132B5]={ category="lo", description="EGYPTIAN HIEROGLYPH R004", direction="l", linebreak="al", unicodeslot=0x132B5, }, [0x132B6]={ category="lo", description="EGYPTIAN HIEROGLYPH R005", direction="l", linebreak="al", unicodeslot=0x132B6, }, [0x132B7]={ category="lo", description="EGYPTIAN HIEROGLYPH R006", direction="l", linebreak="al", unicodeslot=0x132B7, }, [0x132B8]={ category="lo", description="EGYPTIAN HIEROGLYPH R007", direction="l", linebreak="al", unicodeslot=0x132B8, }, [0x132B9]={ category="lo", description="EGYPTIAN HIEROGLYPH R008", direction="l", linebreak="al", unicodeslot=0x132B9, }, [0x132BA]={ category="lo", description="EGYPTIAN HIEROGLYPH R009", direction="l", linebreak="al", unicodeslot=0x132BA, }, [0x132BB]={ category="lo", description="EGYPTIAN HIEROGLYPH R010", direction="l", linebreak="al", unicodeslot=0x132BB, }, [0x132BC]={ category="lo", description="EGYPTIAN HIEROGLYPH R010A", direction="l", linebreak="al", unicodeslot=0x132BC, }, [0x132BD]={ category="lo", description="EGYPTIAN HIEROGLYPH R011", direction="l", linebreak="al", unicodeslot=0x132BD, }, [0x132BE]={ category="lo", description="EGYPTIAN HIEROGLYPH R012", direction="l", linebreak="al", unicodeslot=0x132BE, }, [0x132BF]={ category="lo", description="EGYPTIAN HIEROGLYPH R013", direction="l", linebreak="al", unicodeslot=0x132BF, }, [0x132C0]={ category="lo", description="EGYPTIAN HIEROGLYPH R014", direction="l", linebreak="al", unicodeslot=0x132C0, }, [0x132C1]={ category="lo", description="EGYPTIAN HIEROGLYPH R015", direction="l", linebreak="al", unicodeslot=0x132C1, }, [0x132C2]={ category="lo", description="EGYPTIAN HIEROGLYPH R016", direction="l", linebreak="al", unicodeslot=0x132C2, }, [0x132C3]={ category="lo", description="EGYPTIAN HIEROGLYPH R016A", direction="l", linebreak="al", unicodeslot=0x132C3, }, [0x132C4]={ category="lo", description="EGYPTIAN HIEROGLYPH R017", direction="l", linebreak="al", unicodeslot=0x132C4, }, [0x132C5]={ category="lo", description="EGYPTIAN HIEROGLYPH R018", direction="l", linebreak="al", unicodeslot=0x132C5, }, [0x132C6]={ category="lo", description="EGYPTIAN HIEROGLYPH R019", direction="l", linebreak="al", unicodeslot=0x132C6, }, [0x132C7]={ category="lo", description="EGYPTIAN HIEROGLYPH R020", direction="l", linebreak="al", unicodeslot=0x132C7, }, [0x132C8]={ category="lo", description="EGYPTIAN HIEROGLYPH R021", direction="l", linebreak="al", unicodeslot=0x132C8, }, [0x132C9]={ category="lo", description="EGYPTIAN HIEROGLYPH R022", direction="l", linebreak="al", unicodeslot=0x132C9, }, [0x132CA]={ category="lo", description="EGYPTIAN HIEROGLYPH R023", direction="l", linebreak="al", unicodeslot=0x132CA, }, [0x132CB]={ category="lo", description="EGYPTIAN HIEROGLYPH R024", direction="l", linebreak="al", unicodeslot=0x132CB, }, [0x132CC]={ category="lo", description="EGYPTIAN HIEROGLYPH R025", direction="l", linebreak="al", unicodeslot=0x132CC, }, [0x132CD]={ category="lo", description="EGYPTIAN HIEROGLYPH R026", direction="l", linebreak="al", unicodeslot=0x132CD, }, [0x132CE]={ category="lo", description="EGYPTIAN HIEROGLYPH R027", direction="l", linebreak="al", unicodeslot=0x132CE, }, [0x132CF]={ category="lo", description="EGYPTIAN HIEROGLYPH R028", direction="l", linebreak="al", unicodeslot=0x132CF, }, [0x132D0]={ category="lo", description="EGYPTIAN HIEROGLYPH R029", direction="l", linebreak="al", unicodeslot=0x132D0, }, [0x132D1]={ category="lo", description="EGYPTIAN HIEROGLYPH S001", direction="l", linebreak="al", unicodeslot=0x132D1, }, [0x132D2]={ category="lo", description="EGYPTIAN HIEROGLYPH S002", direction="l", linebreak="al", unicodeslot=0x132D2, }, [0x132D3]={ category="lo", description="EGYPTIAN HIEROGLYPH S002A", direction="l", linebreak="al", unicodeslot=0x132D3, }, [0x132D4]={ category="lo", description="EGYPTIAN HIEROGLYPH S003", direction="l", linebreak="al", unicodeslot=0x132D4, }, [0x132D5]={ category="lo", description="EGYPTIAN HIEROGLYPH S004", direction="l", linebreak="al", unicodeslot=0x132D5, }, [0x132D6]={ category="lo", description="EGYPTIAN HIEROGLYPH S005", direction="l", linebreak="al", unicodeslot=0x132D6, }, [0x132D7]={ category="lo", description="EGYPTIAN HIEROGLYPH S006", direction="l", linebreak="al", unicodeslot=0x132D7, }, [0x132D8]={ category="lo", description="EGYPTIAN HIEROGLYPH S006A", direction="l", linebreak="al", unicodeslot=0x132D8, }, [0x132D9]={ category="lo", description="EGYPTIAN HIEROGLYPH S007", direction="l", linebreak="al", unicodeslot=0x132D9, }, [0x132DA]={ category="lo", description="EGYPTIAN HIEROGLYPH S008", direction="l", linebreak="al", unicodeslot=0x132DA, }, [0x132DB]={ category="lo", description="EGYPTIAN HIEROGLYPH S009", direction="l", linebreak="al", unicodeslot=0x132DB, }, [0x132DC]={ category="lo", description="EGYPTIAN HIEROGLYPH S010", direction="l", linebreak="al", unicodeslot=0x132DC, }, [0x132DD]={ category="lo", description="EGYPTIAN HIEROGLYPH S011", direction="l", linebreak="al", unicodeslot=0x132DD, }, [0x132DE]={ category="lo", description="EGYPTIAN HIEROGLYPH S012", direction="l", linebreak="al", unicodeslot=0x132DE, }, [0x132DF]={ category="lo", description="EGYPTIAN HIEROGLYPH S013", direction="l", linebreak="al", unicodeslot=0x132DF, }, [0x132E0]={ category="lo", description="EGYPTIAN HIEROGLYPH S014", direction="l", linebreak="al", unicodeslot=0x132E0, }, [0x132E1]={ category="lo", description="EGYPTIAN HIEROGLYPH S014A", direction="l", linebreak="al", unicodeslot=0x132E1, }, [0x132E2]={ category="lo", description="EGYPTIAN HIEROGLYPH S014B", direction="l", linebreak="al", unicodeslot=0x132E2, }, [0x132E3]={ category="lo", description="EGYPTIAN HIEROGLYPH S015", direction="l", linebreak="al", unicodeslot=0x132E3, }, [0x132E4]={ category="lo", description="EGYPTIAN HIEROGLYPH S016", direction="l", linebreak="al", unicodeslot=0x132E4, }, [0x132E5]={ category="lo", description="EGYPTIAN HIEROGLYPH S017", direction="l", linebreak="al", unicodeslot=0x132E5, }, [0x132E6]={ category="lo", description="EGYPTIAN HIEROGLYPH S017A", direction="l", linebreak="al", unicodeslot=0x132E6, }, [0x132E7]={ category="lo", description="EGYPTIAN HIEROGLYPH S018", direction="l", linebreak="al", unicodeslot=0x132E7, }, [0x132E8]={ category="lo", description="EGYPTIAN HIEROGLYPH S019", direction="l", linebreak="al", unicodeslot=0x132E8, }, [0x132E9]={ category="lo", description="EGYPTIAN HIEROGLYPH S020", direction="l", linebreak="al", unicodeslot=0x132E9, }, [0x132EA]={ category="lo", description="EGYPTIAN HIEROGLYPH S021", direction="l", linebreak="al", unicodeslot=0x132EA, }, [0x132EB]={ category="lo", description="EGYPTIAN HIEROGLYPH S022", direction="l", linebreak="al", unicodeslot=0x132EB, }, [0x132EC]={ category="lo", description="EGYPTIAN HIEROGLYPH S023", direction="l", linebreak="al", unicodeslot=0x132EC, }, [0x132ED]={ category="lo", description="EGYPTIAN HIEROGLYPH S024", direction="l", linebreak="al", unicodeslot=0x132ED, }, [0x132EE]={ category="lo", description="EGYPTIAN HIEROGLYPH S025", direction="l", linebreak="al", unicodeslot=0x132EE, }, [0x132EF]={ category="lo", description="EGYPTIAN HIEROGLYPH S026", direction="l", linebreak="al", unicodeslot=0x132EF, }, [0x132F0]={ category="lo", description="EGYPTIAN HIEROGLYPH S026A", direction="l", linebreak="al", unicodeslot=0x132F0, }, [0x132F1]={ category="lo", description="EGYPTIAN HIEROGLYPH S026B", direction="l", linebreak="al", unicodeslot=0x132F1, }, [0x132F2]={ category="lo", description="EGYPTIAN HIEROGLYPH S027", direction="l", linebreak="al", unicodeslot=0x132F2, }, [0x132F3]={ category="lo", description="EGYPTIAN HIEROGLYPH S028", direction="l", linebreak="al", unicodeslot=0x132F3, }, [0x132F4]={ category="lo", description="EGYPTIAN HIEROGLYPH S029", direction="l", linebreak="al", unicodeslot=0x132F4, }, [0x132F5]={ category="lo", description="EGYPTIAN HIEROGLYPH S030", direction="l", linebreak="al", unicodeslot=0x132F5, }, [0x132F6]={ category="lo", description="EGYPTIAN HIEROGLYPH S031", direction="l", linebreak="al", unicodeslot=0x132F6, }, [0x132F7]={ category="lo", description="EGYPTIAN HIEROGLYPH S032", direction="l", linebreak="al", unicodeslot=0x132F7, }, [0x132F8]={ category="lo", description="EGYPTIAN HIEROGLYPH S033", direction="l", linebreak="al", unicodeslot=0x132F8, }, [0x132F9]={ category="lo", description="EGYPTIAN HIEROGLYPH S034", direction="l", linebreak="al", unicodeslot=0x132F9, }, [0x132FA]={ category="lo", description="EGYPTIAN HIEROGLYPH S035", direction="l", linebreak="al", unicodeslot=0x132FA, }, [0x132FB]={ category="lo", description="EGYPTIAN HIEROGLYPH S035A", direction="l", linebreak="al", unicodeslot=0x132FB, }, [0x132FC]={ category="lo", description="EGYPTIAN HIEROGLYPH S036", direction="l", linebreak="al", unicodeslot=0x132FC, }, [0x132FD]={ category="lo", description="EGYPTIAN HIEROGLYPH S037", direction="l", linebreak="al", unicodeslot=0x132FD, }, [0x132FE]={ category="lo", description="EGYPTIAN HIEROGLYPH S038", direction="l", linebreak="al", unicodeslot=0x132FE, }, [0x132FF]={ category="lo", description="EGYPTIAN HIEROGLYPH S039", direction="l", linebreak="al", unicodeslot=0x132FF, }, [0x13300]={ category="lo", description="EGYPTIAN HIEROGLYPH S040", direction="l", linebreak="al", unicodeslot=0x13300, }, [0x13301]={ category="lo", description="EGYPTIAN HIEROGLYPH S041", direction="l", linebreak="al", unicodeslot=0x13301, }, [0x13302]={ category="lo", description="EGYPTIAN HIEROGLYPH S042", direction="l", linebreak="al", unicodeslot=0x13302, }, [0x13303]={ category="lo", description="EGYPTIAN HIEROGLYPH S043", direction="l", linebreak="al", unicodeslot=0x13303, }, [0x13304]={ category="lo", description="EGYPTIAN HIEROGLYPH S044", direction="l", linebreak="al", unicodeslot=0x13304, }, [0x13305]={ category="lo", description="EGYPTIAN HIEROGLYPH S045", direction="l", linebreak="al", unicodeslot=0x13305, }, [0x13306]={ category="lo", description="EGYPTIAN HIEROGLYPH S046", direction="l", linebreak="al", unicodeslot=0x13306, }, [0x13307]={ category="lo", description="EGYPTIAN HIEROGLYPH T001", direction="l", linebreak="al", unicodeslot=0x13307, }, [0x13308]={ category="lo", description="EGYPTIAN HIEROGLYPH T002", direction="l", linebreak="al", unicodeslot=0x13308, }, [0x13309]={ category="lo", description="EGYPTIAN HIEROGLYPH T003", direction="l", linebreak="al", unicodeslot=0x13309, }, [0x1330A]={ category="lo", description="EGYPTIAN HIEROGLYPH T003A", direction="l", linebreak="al", unicodeslot=0x1330A, }, [0x1330B]={ category="lo", description="EGYPTIAN HIEROGLYPH T004", direction="l", linebreak="al", unicodeslot=0x1330B, }, [0x1330C]={ category="lo", description="EGYPTIAN HIEROGLYPH T005", direction="l", linebreak="al", unicodeslot=0x1330C, }, [0x1330D]={ category="lo", description="EGYPTIAN HIEROGLYPH T006", direction="l", linebreak="al", unicodeslot=0x1330D, }, [0x1330E]={ category="lo", description="EGYPTIAN HIEROGLYPH T007", direction="l", linebreak="al", unicodeslot=0x1330E, }, [0x1330F]={ category="lo", description="EGYPTIAN HIEROGLYPH T007A", direction="l", linebreak="al", unicodeslot=0x1330F, }, [0x13310]={ category="lo", description="EGYPTIAN HIEROGLYPH T008", direction="l", linebreak="al", unicodeslot=0x13310, }, [0x13311]={ category="lo", description="EGYPTIAN HIEROGLYPH T008A", direction="l", linebreak="al", unicodeslot=0x13311, }, [0x13312]={ category="lo", description="EGYPTIAN HIEROGLYPH T009", direction="l", linebreak="al", unicodeslot=0x13312, }, [0x13313]={ category="lo", description="EGYPTIAN HIEROGLYPH T009A", direction="l", linebreak="al", unicodeslot=0x13313, }, [0x13314]={ category="lo", description="EGYPTIAN HIEROGLYPH T010", direction="l", linebreak="al", unicodeslot=0x13314, }, [0x13315]={ category="lo", description="EGYPTIAN HIEROGLYPH T011", direction="l", linebreak="al", unicodeslot=0x13315, }, [0x13316]={ category="lo", description="EGYPTIAN HIEROGLYPH T011A", direction="l", linebreak="al", unicodeslot=0x13316, }, [0x13317]={ category="lo", description="EGYPTIAN HIEROGLYPH T012", direction="l", linebreak="al", unicodeslot=0x13317, }, [0x13318]={ category="lo", description="EGYPTIAN HIEROGLYPH T013", direction="l", linebreak="al", unicodeslot=0x13318, }, [0x13319]={ category="lo", description="EGYPTIAN HIEROGLYPH T014", direction="l", linebreak="al", unicodeslot=0x13319, }, [0x1331A]={ category="lo", description="EGYPTIAN HIEROGLYPH T015", direction="l", linebreak="al", unicodeslot=0x1331A, }, [0x1331B]={ category="lo", description="EGYPTIAN HIEROGLYPH T016", direction="l", linebreak="al", unicodeslot=0x1331B, }, [0x1331C]={ category="lo", description="EGYPTIAN HIEROGLYPH T016A", direction="l", linebreak="al", unicodeslot=0x1331C, }, [0x1331D]={ category="lo", description="EGYPTIAN HIEROGLYPH T017", direction="l", linebreak="al", unicodeslot=0x1331D, }, [0x1331E]={ category="lo", description="EGYPTIAN HIEROGLYPH T018", direction="l", linebreak="al", unicodeslot=0x1331E, }, [0x1331F]={ category="lo", description="EGYPTIAN HIEROGLYPH T019", direction="l", linebreak="al", unicodeslot=0x1331F, }, [0x13320]={ category="lo", description="EGYPTIAN HIEROGLYPH T020", direction="l", linebreak="al", unicodeslot=0x13320, }, [0x13321]={ category="lo", description="EGYPTIAN HIEROGLYPH T021", direction="l", linebreak="al", unicodeslot=0x13321, }, [0x13322]={ category="lo", description="EGYPTIAN HIEROGLYPH T022", direction="l", linebreak="al", unicodeslot=0x13322, }, [0x13323]={ category="lo", description="EGYPTIAN HIEROGLYPH T023", direction="l", linebreak="al", unicodeslot=0x13323, }, [0x13324]={ category="lo", description="EGYPTIAN HIEROGLYPH T024", direction="l", linebreak="al", unicodeslot=0x13324, }, [0x13325]={ category="lo", description="EGYPTIAN HIEROGLYPH T025", direction="l", linebreak="al", unicodeslot=0x13325, }, [0x13326]={ category="lo", description="EGYPTIAN HIEROGLYPH T026", direction="l", linebreak="al", unicodeslot=0x13326, }, [0x13327]={ category="lo", description="EGYPTIAN HIEROGLYPH T027", direction="l", linebreak="al", unicodeslot=0x13327, }, [0x13328]={ category="lo", description="EGYPTIAN HIEROGLYPH T028", direction="l", linebreak="al", unicodeslot=0x13328, }, [0x13329]={ category="lo", description="EGYPTIAN HIEROGLYPH T029", direction="l", linebreak="al", unicodeslot=0x13329, }, [0x1332A]={ category="lo", description="EGYPTIAN HIEROGLYPH T030", direction="l", linebreak="al", unicodeslot=0x1332A, }, [0x1332B]={ category="lo", description="EGYPTIAN HIEROGLYPH T031", direction="l", linebreak="al", unicodeslot=0x1332B, }, [0x1332C]={ category="lo", description="EGYPTIAN HIEROGLYPH T032", direction="l", linebreak="al", unicodeslot=0x1332C, }, [0x1332D]={ category="lo", description="EGYPTIAN HIEROGLYPH T032A", direction="l", linebreak="al", unicodeslot=0x1332D, }, [0x1332E]={ category="lo", description="EGYPTIAN HIEROGLYPH T033", direction="l", linebreak="al", unicodeslot=0x1332E, }, [0x1332F]={ category="lo", description="EGYPTIAN HIEROGLYPH T033A", direction="l", linebreak="al", unicodeslot=0x1332F, }, [0x13330]={ category="lo", description="EGYPTIAN HIEROGLYPH T034", direction="l", linebreak="al", unicodeslot=0x13330, }, [0x13331]={ category="lo", description="EGYPTIAN HIEROGLYPH T035", direction="l", linebreak="al", unicodeslot=0x13331, }, [0x13332]={ category="lo", description="EGYPTIAN HIEROGLYPH T036", direction="l", linebreak="al", unicodeslot=0x13332, }, [0x13333]={ category="lo", description="EGYPTIAN HIEROGLYPH U001", direction="l", linebreak="al", unicodeslot=0x13333, }, [0x13334]={ category="lo", description="EGYPTIAN HIEROGLYPH U002", direction="l", linebreak="al", unicodeslot=0x13334, }, [0x13335]={ category="lo", description="EGYPTIAN HIEROGLYPH U003", direction="l", linebreak="al", unicodeslot=0x13335, }, [0x13336]={ category="lo", description="EGYPTIAN HIEROGLYPH U004", direction="l", linebreak="al", unicodeslot=0x13336, }, [0x13337]={ category="lo", description="EGYPTIAN HIEROGLYPH U005", direction="l", linebreak="al", unicodeslot=0x13337, }, [0x13338]={ category="lo", description="EGYPTIAN HIEROGLYPH U006", direction="l", linebreak="al", unicodeslot=0x13338, }, [0x13339]={ category="lo", description="EGYPTIAN HIEROGLYPH U006A", direction="l", linebreak="al", unicodeslot=0x13339, }, [0x1333A]={ category="lo", description="EGYPTIAN HIEROGLYPH U006B", direction="l", linebreak="al", unicodeslot=0x1333A, }, [0x1333B]={ category="lo", description="EGYPTIAN HIEROGLYPH U007", direction="l", linebreak="al", unicodeslot=0x1333B, }, [0x1333C]={ category="lo", description="EGYPTIAN HIEROGLYPH U008", direction="l", linebreak="al", unicodeslot=0x1333C, }, [0x1333D]={ category="lo", description="EGYPTIAN HIEROGLYPH U009", direction="l", linebreak="al", unicodeslot=0x1333D, }, [0x1333E]={ category="lo", description="EGYPTIAN HIEROGLYPH U010", direction="l", linebreak="al", unicodeslot=0x1333E, }, [0x1333F]={ category="lo", description="EGYPTIAN HIEROGLYPH U011", direction="l", linebreak="al", unicodeslot=0x1333F, }, [0x13340]={ category="lo", description="EGYPTIAN HIEROGLYPH U012", direction="l", linebreak="al", unicodeslot=0x13340, }, [0x13341]={ category="lo", description="EGYPTIAN HIEROGLYPH U013", direction="l", linebreak="al", unicodeslot=0x13341, }, [0x13342]={ category="lo", description="EGYPTIAN HIEROGLYPH U014", direction="l", linebreak="al", unicodeslot=0x13342, }, [0x13343]={ category="lo", description="EGYPTIAN HIEROGLYPH U015", direction="l", linebreak="al", unicodeslot=0x13343, }, [0x13344]={ category="lo", description="EGYPTIAN HIEROGLYPH U016", direction="l", linebreak="al", unicodeslot=0x13344, }, [0x13345]={ category="lo", description="EGYPTIAN HIEROGLYPH U017", direction="l", linebreak="al", unicodeslot=0x13345, }, [0x13346]={ category="lo", description="EGYPTIAN HIEROGLYPH U018", direction="l", linebreak="al", unicodeslot=0x13346, }, [0x13347]={ category="lo", description="EGYPTIAN HIEROGLYPH U019", direction="l", linebreak="al", unicodeslot=0x13347, }, [0x13348]={ category="lo", description="EGYPTIAN HIEROGLYPH U020", direction="l", linebreak="al", unicodeslot=0x13348, }, [0x13349]={ category="lo", description="EGYPTIAN HIEROGLYPH U021", direction="l", linebreak="al", unicodeslot=0x13349, }, [0x1334A]={ category="lo", description="EGYPTIAN HIEROGLYPH U022", direction="l", linebreak="al", unicodeslot=0x1334A, }, [0x1334B]={ category="lo", description="EGYPTIAN HIEROGLYPH U023", direction="l", linebreak="al", unicodeslot=0x1334B, }, [0x1334C]={ category="lo", description="EGYPTIAN HIEROGLYPH U023A", direction="l", linebreak="al", unicodeslot=0x1334C, }, [0x1334D]={ category="lo", description="EGYPTIAN HIEROGLYPH U024", direction="l", linebreak="al", unicodeslot=0x1334D, }, [0x1334E]={ category="lo", description="EGYPTIAN HIEROGLYPH U025", direction="l", linebreak="al", unicodeslot=0x1334E, }, [0x1334F]={ category="lo", description="EGYPTIAN HIEROGLYPH U026", direction="l", linebreak="al", unicodeslot=0x1334F, }, [0x13350]={ category="lo", description="EGYPTIAN HIEROGLYPH U027", direction="l", linebreak="al", unicodeslot=0x13350, }, [0x13351]={ category="lo", description="EGYPTIAN HIEROGLYPH U028", direction="l", linebreak="al", unicodeslot=0x13351, }, [0x13352]={ category="lo", description="EGYPTIAN HIEROGLYPH U029", direction="l", linebreak="al", unicodeslot=0x13352, }, [0x13353]={ category="lo", description="EGYPTIAN HIEROGLYPH U029A", direction="l", linebreak="al", unicodeslot=0x13353, }, [0x13354]={ category="lo", description="EGYPTIAN HIEROGLYPH U030", direction="l", linebreak="al", unicodeslot=0x13354, }, [0x13355]={ category="lo", description="EGYPTIAN HIEROGLYPH U031", direction="l", linebreak="al", unicodeslot=0x13355, }, [0x13356]={ category="lo", description="EGYPTIAN HIEROGLYPH U032", direction="l", linebreak="al", unicodeslot=0x13356, }, [0x13357]={ category="lo", description="EGYPTIAN HIEROGLYPH U032A", direction="l", linebreak="al", unicodeslot=0x13357, }, [0x13358]={ category="lo", description="EGYPTIAN HIEROGLYPH U033", direction="l", linebreak="al", unicodeslot=0x13358, }, [0x13359]={ category="lo", description="EGYPTIAN HIEROGLYPH U034", direction="l", linebreak="al", unicodeslot=0x13359, }, [0x1335A]={ category="lo", description="EGYPTIAN HIEROGLYPH U035", direction="l", linebreak="al", unicodeslot=0x1335A, }, [0x1335B]={ category="lo", description="EGYPTIAN HIEROGLYPH U036", direction="l", linebreak="al", unicodeslot=0x1335B, }, [0x1335C]={ category="lo", description="EGYPTIAN HIEROGLYPH U037", direction="l", linebreak="al", unicodeslot=0x1335C, }, [0x1335D]={ category="lo", description="EGYPTIAN HIEROGLYPH U038", direction="l", linebreak="al", unicodeslot=0x1335D, }, [0x1335E]={ category="lo", description="EGYPTIAN HIEROGLYPH U039", direction="l", linebreak="al", unicodeslot=0x1335E, }, [0x1335F]={ category="lo", description="EGYPTIAN HIEROGLYPH U040", direction="l", linebreak="al", unicodeslot=0x1335F, }, [0x13360]={ category="lo", description="EGYPTIAN HIEROGLYPH U041", direction="l", linebreak="al", unicodeslot=0x13360, }, [0x13361]={ category="lo", description="EGYPTIAN HIEROGLYPH U042", direction="l", linebreak="al", unicodeslot=0x13361, }, [0x13362]={ category="lo", description="EGYPTIAN HIEROGLYPH V001", direction="l", linebreak="al", unicodeslot=0x13362, }, [0x13363]={ category="lo", description="EGYPTIAN HIEROGLYPH V001A", direction="l", linebreak="al", unicodeslot=0x13363, }, [0x13364]={ category="lo", description="EGYPTIAN HIEROGLYPH V001B", direction="l", linebreak="al", unicodeslot=0x13364, }, [0x13365]={ category="lo", description="EGYPTIAN HIEROGLYPH V001C", direction="l", linebreak="al", unicodeslot=0x13365, }, [0x13366]={ category="lo", description="EGYPTIAN HIEROGLYPH V001D", direction="l", linebreak="al", unicodeslot=0x13366, }, [0x13367]={ category="lo", description="EGYPTIAN HIEROGLYPH V001E", direction="l", linebreak="al", unicodeslot=0x13367, }, [0x13368]={ category="lo", description="EGYPTIAN HIEROGLYPH V001F", direction="l", linebreak="al", unicodeslot=0x13368, }, [0x13369]={ category="lo", description="EGYPTIAN HIEROGLYPH V001G", direction="l", linebreak="al", unicodeslot=0x13369, }, [0x1336A]={ category="lo", description="EGYPTIAN HIEROGLYPH V001H", direction="l", linebreak="al", unicodeslot=0x1336A, }, [0x1336B]={ category="lo", description="EGYPTIAN HIEROGLYPH V001I", direction="l", linebreak="al", unicodeslot=0x1336B, }, [0x1336C]={ category="lo", description="EGYPTIAN HIEROGLYPH V002", direction="l", linebreak="al", unicodeslot=0x1336C, }, [0x1336D]={ category="lo", description="EGYPTIAN HIEROGLYPH V002A", direction="l", linebreak="al", unicodeslot=0x1336D, }, [0x1336E]={ category="lo", description="EGYPTIAN HIEROGLYPH V003", direction="l", linebreak="al", unicodeslot=0x1336E, }, [0x1336F]={ category="lo", description="EGYPTIAN HIEROGLYPH V004", direction="l", linebreak="al", unicodeslot=0x1336F, }, [0x13370]={ category="lo", description="EGYPTIAN HIEROGLYPH V005", direction="l", linebreak="al", unicodeslot=0x13370, }, [0x13371]={ category="lo", description="EGYPTIAN HIEROGLYPH V006", direction="l", linebreak="al", unicodeslot=0x13371, }, [0x13372]={ category="lo", description="EGYPTIAN HIEROGLYPH V007", direction="l", linebreak="al", unicodeslot=0x13372, }, [0x13373]={ category="lo", description="EGYPTIAN HIEROGLYPH V007A", direction="l", linebreak="al", unicodeslot=0x13373, }, [0x13374]={ category="lo", description="EGYPTIAN HIEROGLYPH V007B", direction="l", linebreak="al", unicodeslot=0x13374, }, [0x13375]={ category="lo", description="EGYPTIAN HIEROGLYPH V008", direction="l", linebreak="al", unicodeslot=0x13375, }, [0x13376]={ category="lo", description="EGYPTIAN HIEROGLYPH V009", direction="l", linebreak="al", unicodeslot=0x13376, }, [0x13377]={ category="lo", description="EGYPTIAN HIEROGLYPH V010", direction="l", linebreak="al", unicodeslot=0x13377, }, [0x13378]={ category="lo", description="EGYPTIAN HIEROGLYPH V011", direction="l", linebreak="al", unicodeslot=0x13378, }, [0x13379]={ category="lo", description="EGYPTIAN HIEROGLYPH V011A", direction="l", linebreak="op", unicodeslot=0x13379, }, [0x1337A]={ category="lo", description="EGYPTIAN HIEROGLYPH V011B", direction="l", linebreak="cl", unicodeslot=0x1337A, }, [0x1337B]={ category="lo", description="EGYPTIAN HIEROGLYPH V011C", direction="l", linebreak="cl", unicodeslot=0x1337B, }, [0x1337C]={ category="lo", description="EGYPTIAN HIEROGLYPH V012", direction="l", linebreak="al", unicodeslot=0x1337C, }, [0x1337D]={ category="lo", description="EGYPTIAN HIEROGLYPH V012A", direction="l", linebreak="al", unicodeslot=0x1337D, }, [0x1337E]={ category="lo", description="EGYPTIAN HIEROGLYPH V012B", direction="l", linebreak="al", unicodeslot=0x1337E, }, [0x1337F]={ category="lo", description="EGYPTIAN HIEROGLYPH V013", direction="l", linebreak="al", unicodeslot=0x1337F, }, [0x13380]={ category="lo", description="EGYPTIAN HIEROGLYPH V014", direction="l", linebreak="al", unicodeslot=0x13380, }, [0x13381]={ category="lo", description="EGYPTIAN HIEROGLYPH V015", direction="l", linebreak="al", unicodeslot=0x13381, }, [0x13382]={ category="lo", description="EGYPTIAN HIEROGLYPH V016", direction="l", linebreak="al", unicodeslot=0x13382, }, [0x13383]={ category="lo", description="EGYPTIAN HIEROGLYPH V017", direction="l", linebreak="al", unicodeslot=0x13383, }, [0x13384]={ category="lo", description="EGYPTIAN HIEROGLYPH V018", direction="l", linebreak="al", unicodeslot=0x13384, }, [0x13385]={ category="lo", description="EGYPTIAN HIEROGLYPH V019", direction="l", linebreak="al", unicodeslot=0x13385, }, [0x13386]={ category="lo", description="EGYPTIAN HIEROGLYPH V020", direction="l", linebreak="al", unicodeslot=0x13386, }, [0x13387]={ category="lo", description="EGYPTIAN HIEROGLYPH V020A", direction="l", linebreak="al", unicodeslot=0x13387, }, [0x13388]={ category="lo", description="EGYPTIAN HIEROGLYPH V020B", direction="l", linebreak="al", unicodeslot=0x13388, }, [0x13389]={ category="lo", description="EGYPTIAN HIEROGLYPH V020C", direction="l", linebreak="al", unicodeslot=0x13389, }, [0x1338A]={ category="lo", description="EGYPTIAN HIEROGLYPH V020D", direction="l", linebreak="al", unicodeslot=0x1338A, }, [0x1338B]={ category="lo", description="EGYPTIAN HIEROGLYPH V020E", direction="l", linebreak="al", unicodeslot=0x1338B, }, [0x1338C]={ category="lo", description="EGYPTIAN HIEROGLYPH V020F", direction="l", linebreak="al", unicodeslot=0x1338C, }, [0x1338D]={ category="lo", description="EGYPTIAN HIEROGLYPH V020G", direction="l", linebreak="al", unicodeslot=0x1338D, }, [0x1338E]={ category="lo", description="EGYPTIAN HIEROGLYPH V020H", direction="l", linebreak="al", unicodeslot=0x1338E, }, [0x1338F]={ category="lo", description="EGYPTIAN HIEROGLYPH V020I", direction="l", linebreak="al", unicodeslot=0x1338F, }, [0x13390]={ category="lo", description="EGYPTIAN HIEROGLYPH V020J", direction="l", linebreak="al", unicodeslot=0x13390, }, [0x13391]={ category="lo", description="EGYPTIAN HIEROGLYPH V020K", direction="l", linebreak="al", unicodeslot=0x13391, }, [0x13392]={ category="lo", description="EGYPTIAN HIEROGLYPH V020L", direction="l", linebreak="al", unicodeslot=0x13392, }, [0x13393]={ category="lo", description="EGYPTIAN HIEROGLYPH V021", direction="l", linebreak="al", unicodeslot=0x13393, }, [0x13394]={ category="lo", description="EGYPTIAN HIEROGLYPH V022", direction="l", linebreak="al", unicodeslot=0x13394, }, [0x13395]={ category="lo", description="EGYPTIAN HIEROGLYPH V023", direction="l", linebreak="al", unicodeslot=0x13395, }, [0x13396]={ category="lo", description="EGYPTIAN HIEROGLYPH V023A", direction="l", linebreak="al", unicodeslot=0x13396, }, [0x13397]={ category="lo", description="EGYPTIAN HIEROGLYPH V024", direction="l", linebreak="al", unicodeslot=0x13397, }, [0x13398]={ category="lo", description="EGYPTIAN HIEROGLYPH V025", direction="l", linebreak="al", unicodeslot=0x13398, }, [0x13399]={ category="lo", description="EGYPTIAN HIEROGLYPH V026", direction="l", linebreak="al", unicodeslot=0x13399, }, [0x1339A]={ category="lo", description="EGYPTIAN HIEROGLYPH V027", direction="l", linebreak="al", unicodeslot=0x1339A, }, [0x1339B]={ category="lo", description="EGYPTIAN HIEROGLYPH V028", direction="l", linebreak="al", unicodeslot=0x1339B, }, [0x1339C]={ category="lo", description="EGYPTIAN HIEROGLYPH V028A", direction="l", linebreak="al", unicodeslot=0x1339C, }, [0x1339D]={ category="lo", description="EGYPTIAN HIEROGLYPH V029", direction="l", linebreak="al", unicodeslot=0x1339D, }, [0x1339E]={ category="lo", description="EGYPTIAN HIEROGLYPH V029A", direction="l", linebreak="al", unicodeslot=0x1339E, }, [0x1339F]={ category="lo", description="EGYPTIAN HIEROGLYPH V030", direction="l", linebreak="al", unicodeslot=0x1339F, }, [0x133A0]={ category="lo", description="EGYPTIAN HIEROGLYPH V030A", direction="l", linebreak="al", unicodeslot=0x133A0, }, [0x133A1]={ category="lo", description="EGYPTIAN HIEROGLYPH V031", direction="l", linebreak="al", unicodeslot=0x133A1, }, [0x133A2]={ category="lo", description="EGYPTIAN HIEROGLYPH V031A", direction="l", linebreak="al", unicodeslot=0x133A2, }, [0x133A3]={ category="lo", description="EGYPTIAN HIEROGLYPH V032", direction="l", linebreak="al", unicodeslot=0x133A3, }, [0x133A4]={ category="lo", description="EGYPTIAN HIEROGLYPH V033", direction="l", linebreak="al", unicodeslot=0x133A4, }, [0x133A5]={ category="lo", description="EGYPTIAN HIEROGLYPH V033A", direction="l", linebreak="al", unicodeslot=0x133A5, }, [0x133A6]={ category="lo", description="EGYPTIAN HIEROGLYPH V034", direction="l", linebreak="al", unicodeslot=0x133A6, }, [0x133A7]={ category="lo", description="EGYPTIAN HIEROGLYPH V035", direction="l", linebreak="al", unicodeslot=0x133A7, }, [0x133A8]={ category="lo", description="EGYPTIAN HIEROGLYPH V036", direction="l", linebreak="al", unicodeslot=0x133A8, }, [0x133A9]={ category="lo", description="EGYPTIAN HIEROGLYPH V037", direction="l", linebreak="al", unicodeslot=0x133A9, }, [0x133AA]={ category="lo", description="EGYPTIAN HIEROGLYPH V037A", direction="l", linebreak="al", unicodeslot=0x133AA, }, [0x133AB]={ category="lo", description="EGYPTIAN HIEROGLYPH V038", direction="l", linebreak="al", unicodeslot=0x133AB, }, [0x133AC]={ category="lo", description="EGYPTIAN HIEROGLYPH V039", direction="l", linebreak="al", unicodeslot=0x133AC, }, [0x133AD]={ category="lo", description="EGYPTIAN HIEROGLYPH V040", direction="l", linebreak="al", unicodeslot=0x133AD, }, [0x133AE]={ category="lo", description="EGYPTIAN HIEROGLYPH V040A", direction="l", linebreak="al", unicodeslot=0x133AE, }, [0x133AF]={ category="lo", description="EGYPTIAN HIEROGLYPH W001", direction="l", linebreak="al", unicodeslot=0x133AF, }, [0x133B0]={ category="lo", description="EGYPTIAN HIEROGLYPH W002", direction="l", linebreak="al", unicodeslot=0x133B0, }, [0x133B1]={ category="lo", description="EGYPTIAN HIEROGLYPH W003", direction="l", linebreak="al", unicodeslot=0x133B1, }, [0x133B2]={ category="lo", description="EGYPTIAN HIEROGLYPH W003A", direction="l", linebreak="al", unicodeslot=0x133B2, }, [0x133B3]={ category="lo", description="EGYPTIAN HIEROGLYPH W004", direction="l", linebreak="al", unicodeslot=0x133B3, }, [0x133B4]={ category="lo", description="EGYPTIAN HIEROGLYPH W005", direction="l", linebreak="al", unicodeslot=0x133B4, }, [0x133B5]={ category="lo", description="EGYPTIAN HIEROGLYPH W006", direction="l", linebreak="al", unicodeslot=0x133B5, }, [0x133B6]={ category="lo", description="EGYPTIAN HIEROGLYPH W007", direction="l", linebreak="al", unicodeslot=0x133B6, }, [0x133B7]={ category="lo", description="EGYPTIAN HIEROGLYPH W008", direction="l", linebreak="al", unicodeslot=0x133B7, }, [0x133B8]={ category="lo", description="EGYPTIAN HIEROGLYPH W009", direction="l", linebreak="al", unicodeslot=0x133B8, }, [0x133B9]={ category="lo", description="EGYPTIAN HIEROGLYPH W009A", direction="l", linebreak="al", unicodeslot=0x133B9, }, [0x133BA]={ category="lo", description="EGYPTIAN HIEROGLYPH W010", direction="l", linebreak="al", unicodeslot=0x133BA, }, [0x133BB]={ category="lo", description="EGYPTIAN HIEROGLYPH W010A", direction="l", linebreak="al", unicodeslot=0x133BB, }, [0x133BC]={ category="lo", description="EGYPTIAN HIEROGLYPH W011", direction="l", linebreak="al", unicodeslot=0x133BC, }, [0x133BD]={ category="lo", description="EGYPTIAN HIEROGLYPH W012", direction="l", linebreak="al", unicodeslot=0x133BD, }, [0x133BE]={ category="lo", description="EGYPTIAN HIEROGLYPH W013", direction="l", linebreak="al", unicodeslot=0x133BE, }, [0x133BF]={ category="lo", description="EGYPTIAN HIEROGLYPH W014", direction="l", linebreak="al", unicodeslot=0x133BF, }, [0x133C0]={ category="lo", description="EGYPTIAN HIEROGLYPH W014A", direction="l", linebreak="al", unicodeslot=0x133C0, }, [0x133C1]={ category="lo", description="EGYPTIAN HIEROGLYPH W015", direction="l", linebreak="al", unicodeslot=0x133C1, }, [0x133C2]={ category="lo", description="EGYPTIAN HIEROGLYPH W016", direction="l", linebreak="al", unicodeslot=0x133C2, }, [0x133C3]={ category="lo", description="EGYPTIAN HIEROGLYPH W017", direction="l", linebreak="al", unicodeslot=0x133C3, }, [0x133C4]={ category="lo", description="EGYPTIAN HIEROGLYPH W017A", direction="l", linebreak="al", unicodeslot=0x133C4, }, [0x133C5]={ category="lo", description="EGYPTIAN HIEROGLYPH W018", direction="l", linebreak="al", unicodeslot=0x133C5, }, [0x133C6]={ category="lo", description="EGYPTIAN HIEROGLYPH W018A", direction="l", linebreak="al", unicodeslot=0x133C6, }, [0x133C7]={ category="lo", description="EGYPTIAN HIEROGLYPH W019", direction="l", linebreak="al", unicodeslot=0x133C7, }, [0x133C8]={ category="lo", description="EGYPTIAN HIEROGLYPH W020", direction="l", linebreak="al", unicodeslot=0x133C8, }, [0x133C9]={ category="lo", description="EGYPTIAN HIEROGLYPH W021", direction="l", linebreak="al", unicodeslot=0x133C9, }, [0x133CA]={ category="lo", description="EGYPTIAN HIEROGLYPH W022", direction="l", linebreak="al", unicodeslot=0x133CA, }, [0x133CB]={ category="lo", description="EGYPTIAN HIEROGLYPH W023", direction="l", linebreak="al", unicodeslot=0x133CB, }, [0x133CC]={ category="lo", description="EGYPTIAN HIEROGLYPH W024", direction="l", linebreak="al", unicodeslot=0x133CC, }, [0x133CD]={ category="lo", description="EGYPTIAN HIEROGLYPH W024A", direction="l", linebreak="al", unicodeslot=0x133CD, }, [0x133CE]={ category="lo", description="EGYPTIAN HIEROGLYPH W025", direction="l", linebreak="al", unicodeslot=0x133CE, }, [0x133CF]={ category="lo", description="EGYPTIAN HIEROGLYPH X001", direction="l", linebreak="al", unicodeslot=0x133CF, }, [0x133D0]={ category="lo", description="EGYPTIAN HIEROGLYPH X002", direction="l", linebreak="al", unicodeslot=0x133D0, }, [0x133D1]={ category="lo", description="EGYPTIAN HIEROGLYPH X003", direction="l", linebreak="al", unicodeslot=0x133D1, }, [0x133D2]={ category="lo", description="EGYPTIAN HIEROGLYPH X004", direction="l", linebreak="al", unicodeslot=0x133D2, }, [0x133D3]={ category="lo", description="EGYPTIAN HIEROGLYPH X004A", direction="l", linebreak="al", unicodeslot=0x133D3, }, [0x133D4]={ category="lo", description="EGYPTIAN HIEROGLYPH X004B", direction="l", linebreak="al", unicodeslot=0x133D4, }, [0x133D5]={ category="lo", description="EGYPTIAN HIEROGLYPH X005", direction="l", linebreak="al", unicodeslot=0x133D5, }, [0x133D6]={ category="lo", description="EGYPTIAN HIEROGLYPH X006", direction="l", linebreak="al", unicodeslot=0x133D6, }, [0x133D7]={ category="lo", description="EGYPTIAN HIEROGLYPH X006A", direction="l", linebreak="al", unicodeslot=0x133D7, }, [0x133D8]={ category="lo", description="EGYPTIAN HIEROGLYPH X007", direction="l", linebreak="al", unicodeslot=0x133D8, }, [0x133D9]={ category="lo", description="EGYPTIAN HIEROGLYPH X008", direction="l", linebreak="al", unicodeslot=0x133D9, }, [0x133DA]={ category="lo", description="EGYPTIAN HIEROGLYPH X008A", direction="l", linebreak="al", unicodeslot=0x133DA, }, [0x133DB]={ category="lo", description="EGYPTIAN HIEROGLYPH Y001", direction="l", linebreak="al", unicodeslot=0x133DB, }, [0x133DC]={ category="lo", description="EGYPTIAN HIEROGLYPH Y001A", direction="l", linebreak="al", unicodeslot=0x133DC, }, [0x133DD]={ category="lo", description="EGYPTIAN HIEROGLYPH Y002", direction="l", linebreak="al", unicodeslot=0x133DD, }, [0x133DE]={ category="lo", description="EGYPTIAN HIEROGLYPH Y003", direction="l", linebreak="al", unicodeslot=0x133DE, }, [0x133DF]={ category="lo", description="EGYPTIAN HIEROGLYPH Y004", direction="l", linebreak="al", unicodeslot=0x133DF, }, [0x133E0]={ category="lo", description="EGYPTIAN HIEROGLYPH Y005", direction="l", linebreak="al", unicodeslot=0x133E0, }, [0x133E1]={ category="lo", description="EGYPTIAN HIEROGLYPH Y006", direction="l", linebreak="al", unicodeslot=0x133E1, }, [0x133E2]={ category="lo", description="EGYPTIAN HIEROGLYPH Y007", direction="l", linebreak="al", unicodeslot=0x133E2, }, [0x133E3]={ category="lo", description="EGYPTIAN HIEROGLYPH Y008", direction="l", linebreak="al", unicodeslot=0x133E3, }, [0x133E4]={ category="lo", description="EGYPTIAN HIEROGLYPH Z001", direction="l", linebreak="al", unicodeslot=0x133E4, }, [0x133E5]={ category="lo", description="EGYPTIAN HIEROGLYPH Z002", direction="l", linebreak="al", unicodeslot=0x133E5, }, [0x133E6]={ category="lo", description="EGYPTIAN HIEROGLYPH Z002A", direction="l", linebreak="al", unicodeslot=0x133E6, }, [0x133E7]={ category="lo", description="EGYPTIAN HIEROGLYPH Z002B", direction="l", linebreak="al", unicodeslot=0x133E7, }, [0x133E8]={ category="lo", description="EGYPTIAN HIEROGLYPH Z002C", direction="l", linebreak="al", unicodeslot=0x133E8, }, [0x133E9]={ category="lo", description="EGYPTIAN HIEROGLYPH Z002D", direction="l", linebreak="al", unicodeslot=0x133E9, }, [0x133EA]={ category="lo", description="EGYPTIAN HIEROGLYPH Z003", direction="l", linebreak="al", unicodeslot=0x133EA, }, [0x133EB]={ category="lo", description="EGYPTIAN HIEROGLYPH Z003A", direction="l", linebreak="al", unicodeslot=0x133EB, }, [0x133EC]={ category="lo", description="EGYPTIAN HIEROGLYPH Z003B", direction="l", linebreak="al", unicodeslot=0x133EC, }, [0x133ED]={ category="lo", description="EGYPTIAN HIEROGLYPH Z004", direction="l", linebreak="al", unicodeslot=0x133ED, }, [0x133EE]={ category="lo", description="EGYPTIAN HIEROGLYPH Z004A", direction="l", linebreak="al", unicodeslot=0x133EE, }, [0x133EF]={ category="lo", description="EGYPTIAN HIEROGLYPH Z005", direction="l", linebreak="al", unicodeslot=0x133EF, }, [0x133F0]={ category="lo", description="EGYPTIAN HIEROGLYPH Z005A", direction="l", linebreak="al", unicodeslot=0x133F0, }, [0x133F1]={ category="lo", description="EGYPTIAN HIEROGLYPH Z006", direction="l", linebreak="al", unicodeslot=0x133F1, }, [0x133F2]={ category="lo", description="EGYPTIAN HIEROGLYPH Z007", direction="l", linebreak="al", unicodeslot=0x133F2, }, [0x133F3]={ category="lo", description="EGYPTIAN HIEROGLYPH Z008", direction="l", linebreak="al", unicodeslot=0x133F3, }, [0x133F4]={ category="lo", description="EGYPTIAN HIEROGLYPH Z009", direction="l", linebreak="al", unicodeslot=0x133F4, }, [0x133F5]={ category="lo", description="EGYPTIAN HIEROGLYPH Z010", direction="l", linebreak="al", unicodeslot=0x133F5, }, [0x133F6]={ category="lo", description="EGYPTIAN HIEROGLYPH Z011", direction="l", linebreak="al", unicodeslot=0x133F6, }, [0x133F7]={ category="lo", description="EGYPTIAN HIEROGLYPH Z012", direction="l", linebreak="al", unicodeslot=0x133F7, }, [0x133F8]={ category="lo", description="EGYPTIAN HIEROGLYPH Z013", direction="l", linebreak="al", unicodeslot=0x133F8, }, [0x133F9]={ category="lo", description="EGYPTIAN HIEROGLYPH Z014", direction="l", linebreak="al", unicodeslot=0x133F9, }, [0x133FA]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015", direction="l", linebreak="al", unicodeslot=0x133FA, }, [0x133FB]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015A", direction="l", linebreak="al", unicodeslot=0x133FB, }, [0x133FC]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015B", direction="l", linebreak="al", unicodeslot=0x133FC, }, [0x133FD]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015C", direction="l", linebreak="al", unicodeslot=0x133FD, }, [0x133FE]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015D", direction="l", linebreak="al", unicodeslot=0x133FE, }, [0x133FF]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015E", direction="l", linebreak="al", unicodeslot=0x133FF, }, [0x13400]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015F", direction="l", linebreak="al", unicodeslot=0x13400, }, [0x13401]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015G", direction="l", linebreak="al", unicodeslot=0x13401, }, [0x13402]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015H", direction="l", linebreak="al", unicodeslot=0x13402, }, [0x13403]={ category="lo", description="EGYPTIAN HIEROGLYPH Z015I", direction="l", linebreak="al", unicodeslot=0x13403, }, [0x13404]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016", direction="l", linebreak="al", unicodeslot=0x13404, }, [0x13405]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016A", direction="l", linebreak="al", unicodeslot=0x13405, }, [0x13406]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016B", direction="l", linebreak="al", unicodeslot=0x13406, }, [0x13407]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016C", direction="l", linebreak="al", unicodeslot=0x13407, }, [0x13408]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016D", direction="l", linebreak="al", unicodeslot=0x13408, }, [0x13409]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016E", direction="l", linebreak="al", unicodeslot=0x13409, }, [0x1340A]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016F", direction="l", linebreak="al", unicodeslot=0x1340A, }, [0x1340B]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016G", direction="l", linebreak="al", unicodeslot=0x1340B, }, [0x1340C]={ category="lo", description="EGYPTIAN HIEROGLYPH Z016H", direction="l", linebreak="al", unicodeslot=0x1340C, }, [0x1340D]={ category="lo", description="EGYPTIAN HIEROGLYPH AA001", direction="l", linebreak="al", unicodeslot=0x1340D, }, [0x1340E]={ category="lo", description="EGYPTIAN HIEROGLYPH AA002", direction="l", linebreak="al", unicodeslot=0x1340E, }, [0x1340F]={ category="lo", description="EGYPTIAN HIEROGLYPH AA003", direction="l", linebreak="al", unicodeslot=0x1340F, }, [0x13410]={ category="lo", description="EGYPTIAN HIEROGLYPH AA004", direction="l", linebreak="al", unicodeslot=0x13410, }, [0x13411]={ category="lo", description="EGYPTIAN HIEROGLYPH AA005", direction="l", linebreak="al", unicodeslot=0x13411, }, [0x13412]={ category="lo", description="EGYPTIAN HIEROGLYPH AA006", direction="l", linebreak="al", unicodeslot=0x13412, }, [0x13413]={ category="lo", description="EGYPTIAN HIEROGLYPH AA007", direction="l", linebreak="al", unicodeslot=0x13413, }, [0x13414]={ category="lo", description="EGYPTIAN HIEROGLYPH AA007A", direction="l", linebreak="al", unicodeslot=0x13414, }, [0x13415]={ category="lo", description="EGYPTIAN HIEROGLYPH AA007B", direction="l", linebreak="al", unicodeslot=0x13415, }, [0x13416]={ category="lo", description="EGYPTIAN HIEROGLYPH AA008", direction="l", linebreak="al", unicodeslot=0x13416, }, [0x13417]={ category="lo", description="EGYPTIAN HIEROGLYPH AA009", direction="l", linebreak="al", unicodeslot=0x13417, }, [0x13418]={ category="lo", description="EGYPTIAN HIEROGLYPH AA010", direction="l", linebreak="al", unicodeslot=0x13418, }, [0x13419]={ category="lo", description="EGYPTIAN HIEROGLYPH AA011", direction="l", linebreak="al", unicodeslot=0x13419, }, [0x1341A]={ category="lo", description="EGYPTIAN HIEROGLYPH AA012", direction="l", linebreak="al", unicodeslot=0x1341A, }, [0x1341B]={ category="lo", description="EGYPTIAN HIEROGLYPH AA013", direction="l", linebreak="al", unicodeslot=0x1341B, }, [0x1341C]={ category="lo", description="EGYPTIAN HIEROGLYPH AA014", direction="l", linebreak="al", unicodeslot=0x1341C, }, [0x1341D]={ category="lo", description="EGYPTIAN HIEROGLYPH AA015", direction="l", linebreak="al", unicodeslot=0x1341D, }, [0x1341E]={ category="lo", description="EGYPTIAN HIEROGLYPH AA016", direction="l", linebreak="al", unicodeslot=0x1341E, }, [0x1341F]={ category="lo", description="EGYPTIAN HIEROGLYPH AA017", direction="l", linebreak="al", unicodeslot=0x1341F, }, [0x13420]={ category="lo", description="EGYPTIAN HIEROGLYPH AA018", direction="l", linebreak="al", unicodeslot=0x13420, }, [0x13421]={ category="lo", description="EGYPTIAN HIEROGLYPH AA019", direction="l", linebreak="al", unicodeslot=0x13421, }, [0x13422]={ category="lo", description="EGYPTIAN HIEROGLYPH AA020", direction="l", linebreak="al", unicodeslot=0x13422, }, [0x13423]={ category="lo", description="EGYPTIAN HIEROGLYPH AA021", direction="l", linebreak="al", unicodeslot=0x13423, }, [0x13424]={ category="lo", description="EGYPTIAN HIEROGLYPH AA022", direction="l", linebreak="al", unicodeslot=0x13424, }, [0x13425]={ category="lo", description="EGYPTIAN HIEROGLYPH AA023", direction="l", linebreak="al", unicodeslot=0x13425, }, [0x13426]={ category="lo", description="EGYPTIAN HIEROGLYPH AA024", direction="l", linebreak="al", unicodeslot=0x13426, }, [0x13427]={ category="lo", description="EGYPTIAN HIEROGLYPH AA025", direction="l", linebreak="al", unicodeslot=0x13427, }, [0x13428]={ category="lo", description="EGYPTIAN HIEROGLYPH AA026", direction="l", linebreak="al", unicodeslot=0x13428, }, [0x13429]={ category="lo", description="EGYPTIAN HIEROGLYPH AA027", direction="l", linebreak="al", unicodeslot=0x13429, }, [0x1342A]={ category="lo", description="EGYPTIAN HIEROGLYPH AA028", direction="l", linebreak="al", unicodeslot=0x1342A, }, [0x1342B]={ category="lo", description="EGYPTIAN HIEROGLYPH AA029", direction="l", linebreak="al", unicodeslot=0x1342B, }, [0x1342C]={ category="lo", description="EGYPTIAN HIEROGLYPH AA030", direction="l", linebreak="al", unicodeslot=0x1342C, }, [0x1342D]={ category="lo", description="EGYPTIAN HIEROGLYPH AA031", direction="l", linebreak="al", unicodeslot=0x1342D, }, [0x1342E]={ category="lo", description="EGYPTIAN HIEROGLYPH AA032", direction="l", linebreak="al", unicodeslot=0x1342E, }, [0x16800]={ category="lo", description="BAMUM LETTER PHASE-A NGKUE MFON", direction="l", linebreak="al", unicodeslot=0x16800, }, [0x16801]={ category="lo", description="BAMUM LETTER PHASE-A GBIEE FON", direction="l", linebreak="al", unicodeslot=0x16801, }, [0x16802]={ category="lo", description="BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE", direction="l", linebreak="al", unicodeslot=0x16802, }, [0x16803]={ category="lo", description="BAMUM LETTER PHASE-A PON MFON PIPAEMBA", direction="l", linebreak="al", unicodeslot=0x16803, }, [0x16804]={ category="lo", description="BAMUM LETTER PHASE-A NAA MFON", direction="l", linebreak="al", unicodeslot=0x16804, }, [0x16805]={ category="lo", description="BAMUM LETTER PHASE-A SHUENSHUET", direction="l", linebreak="al", unicodeslot=0x16805, }, [0x16806]={ category="lo", description="BAMUM LETTER PHASE-A TITA MFON", direction="l", linebreak="al", unicodeslot=0x16806, }, [0x16807]={ category="lo", description="BAMUM LETTER PHASE-A NZA MFON", direction="l", linebreak="al", unicodeslot=0x16807, }, [0x16808]={ category="lo", description="BAMUM LETTER PHASE-A SHINDA PA NJI", direction="l", linebreak="al", unicodeslot=0x16808, }, [0x16809]={ category="lo", description="BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE", direction="l", linebreak="al", unicodeslot=0x16809, }, [0x1680A]={ category="lo", description="BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA", direction="l", linebreak="al", unicodeslot=0x1680A, }, [0x1680B]={ category="lo", description="BAMUM LETTER PHASE-A MAEMBGBIEE", direction="l", linebreak="al", unicodeslot=0x1680B, }, [0x1680C]={ category="lo", description="BAMUM LETTER PHASE-A TU MAEMBA", direction="l", linebreak="al", unicodeslot=0x1680C, }, [0x1680D]={ category="lo", description="BAMUM LETTER PHASE-A NGANGU", direction="l", linebreak="al", unicodeslot=0x1680D, }, [0x1680E]={ category="lo", description="BAMUM LETTER PHASE-A MAEMVEUX", direction="l", linebreak="al", unicodeslot=0x1680E, }, [0x1680F]={ category="lo", description="BAMUM LETTER PHASE-A MANSUAE", direction="l", linebreak="al", unicodeslot=0x1680F, }, [0x16810]={ category="lo", description="BAMUM LETTER PHASE-A MVEUAENGAM", direction="l", linebreak="al", unicodeslot=0x16810, }, [0x16811]={ category="lo", description="BAMUM LETTER PHASE-A SEUNYAM", direction="l", linebreak="al", unicodeslot=0x16811, }, [0x16812]={ category="lo", description="BAMUM LETTER PHASE-A NTOQPEN", direction="l", linebreak="al", unicodeslot=0x16812, }, [0x16813]={ category="lo", description="BAMUM LETTER PHASE-A KEUKEUTNDA", direction="l", linebreak="al", unicodeslot=0x16813, }, [0x16814]={ category="lo", description="BAMUM LETTER PHASE-A NKINDI", direction="l", linebreak="al", unicodeslot=0x16814, }, [0x16815]={ category="lo", description="BAMUM LETTER PHASE-A SUU", direction="l", linebreak="al", unicodeslot=0x16815, }, [0x16816]={ category="lo", description="BAMUM LETTER PHASE-A NGKUENZEUM", direction="l", linebreak="al", unicodeslot=0x16816, }, [0x16817]={ category="lo", description="BAMUM LETTER PHASE-A LAPAQ", direction="l", linebreak="al", unicodeslot=0x16817, }, [0x16818]={ category="lo", description="BAMUM LETTER PHASE-A LET KUT", direction="l", linebreak="al", unicodeslot=0x16818, }, [0x16819]={ category="lo", description="BAMUM LETTER PHASE-A NTAP MFAA", direction="l", linebreak="al", unicodeslot=0x16819, }, [0x1681A]={ category="lo", description="BAMUM LETTER PHASE-A MAEKEUP", direction="l", linebreak="al", unicodeslot=0x1681A, }, [0x1681B]={ category="lo", description="BAMUM LETTER PHASE-A PASHAE", direction="l", linebreak="al", unicodeslot=0x1681B, }, [0x1681C]={ category="lo", description="BAMUM LETTER PHASE-A GHEUAERAE", direction="l", linebreak="al", unicodeslot=0x1681C, }, [0x1681D]={ category="lo", description="BAMUM LETTER PHASE-A PAMSHAE", direction="l", linebreak="al", unicodeslot=0x1681D, }, [0x1681E]={ category="lo", description="BAMUM LETTER PHASE-A MON NGGEUAET", direction="l", linebreak="al", unicodeslot=0x1681E, }, [0x1681F]={ category="lo", description="BAMUM LETTER PHASE-A NZUN MEUT", direction="l", linebreak="al", unicodeslot=0x1681F, }, [0x16820]={ category="lo", description="BAMUM LETTER PHASE-A U YUQ NAE", direction="l", linebreak="al", unicodeslot=0x16820, }, [0x16821]={ category="lo", description="BAMUM LETTER PHASE-A GHEUAEGHEUAE", direction="l", linebreak="al", unicodeslot=0x16821, }, [0x16822]={ category="lo", description="BAMUM LETTER PHASE-A NTAP NTAA", direction="l", linebreak="al", unicodeslot=0x16822, }, [0x16823]={ category="lo", description="BAMUM LETTER PHASE-A SISA", direction="l", linebreak="al", unicodeslot=0x16823, }, [0x16824]={ category="lo", description="BAMUM LETTER PHASE-A MGBASA", direction="l", linebreak="al", unicodeslot=0x16824, }, [0x16825]={ category="lo", description="BAMUM LETTER PHASE-A MEUNJOMNDEUQ", direction="l", linebreak="al", unicodeslot=0x16825, }, [0x16826]={ category="lo", description="BAMUM LETTER PHASE-A MOOMPUQ", direction="l", linebreak="al", unicodeslot=0x16826, }, [0x16827]={ category="lo", description="BAMUM LETTER PHASE-A KAFA", direction="l", linebreak="al", unicodeslot=0x16827, }, [0x16828]={ category="lo", description="BAMUM LETTER PHASE-A PA LEERAEWA", direction="l", linebreak="al", unicodeslot=0x16828, }, [0x16829]={ category="lo", description="BAMUM LETTER PHASE-A NDA LEERAEWA", direction="l", linebreak="al", unicodeslot=0x16829, }, [0x1682A]={ category="lo", description="BAMUM LETTER PHASE-A PET", direction="l", linebreak="al", unicodeslot=0x1682A, }, [0x1682B]={ category="lo", description="BAMUM LETTER PHASE-A MAEMKPEN", direction="l", linebreak="al", unicodeslot=0x1682B, }, [0x1682C]={ category="lo", description="BAMUM LETTER PHASE-A NIKA", direction="l", linebreak="al", unicodeslot=0x1682C, }, [0x1682D]={ category="lo", description="BAMUM LETTER PHASE-A PUP", direction="l", linebreak="al", unicodeslot=0x1682D, }, [0x1682E]={ category="lo", description="BAMUM LETTER PHASE-A TUAEP", direction="l", linebreak="al", unicodeslot=0x1682E, }, [0x1682F]={ category="lo", description="BAMUM LETTER PHASE-A LUAEP", direction="l", linebreak="al", unicodeslot=0x1682F, }, [0x16830]={ category="lo", description="BAMUM LETTER PHASE-A SONJAM", direction="l", linebreak="al", unicodeslot=0x16830, }, [0x16831]={ category="lo", description="BAMUM LETTER PHASE-A TEUTEUWEN", direction="l", linebreak="al", unicodeslot=0x16831, }, [0x16832]={ category="lo", description="BAMUM LETTER PHASE-A MAENYI", direction="l", linebreak="al", unicodeslot=0x16832, }, [0x16833]={ category="lo", description="BAMUM LETTER PHASE-A KET", direction="l", linebreak="al", unicodeslot=0x16833, }, [0x16834]={ category="lo", description="BAMUM LETTER PHASE-A NDAANGGEUAET", direction="l", linebreak="al", unicodeslot=0x16834, }, [0x16835]={ category="lo", description="BAMUM LETTER PHASE-A KUOQ", direction="l", linebreak="al", unicodeslot=0x16835, }, [0x16836]={ category="lo", description="BAMUM LETTER PHASE-A MOOMEUT", direction="l", linebreak="al", unicodeslot=0x16836, }, [0x16837]={ category="lo", description="BAMUM LETTER PHASE-A SHUM", direction="l", linebreak="al", unicodeslot=0x16837, }, [0x16838]={ category="lo", description="BAMUM LETTER PHASE-A LOMMAE", direction="l", linebreak="al", unicodeslot=0x16838, }, [0x16839]={ category="lo", description="BAMUM LETTER PHASE-A FIRI", direction="l", linebreak="al", unicodeslot=0x16839, }, [0x1683A]={ category="lo", description="BAMUM LETTER PHASE-A ROM", direction="l", linebreak="al", unicodeslot=0x1683A, }, [0x1683B]={ category="lo", description="BAMUM LETTER PHASE-A KPOQ", direction="l", linebreak="al", unicodeslot=0x1683B, }, [0x1683C]={ category="lo", description="BAMUM LETTER PHASE-A SOQ", direction="l", linebreak="al", unicodeslot=0x1683C, }, [0x1683D]={ category="lo", description="BAMUM LETTER PHASE-A MAP PIEET", direction="l", linebreak="al", unicodeslot=0x1683D, }, [0x1683E]={ category="lo", description="BAMUM LETTER PHASE-A SHIRAE", direction="l", linebreak="al", unicodeslot=0x1683E, }, [0x1683F]={ category="lo", description="BAMUM LETTER PHASE-A NTAP", direction="l", linebreak="al", unicodeslot=0x1683F, }, [0x16840]={ category="lo", description="BAMUM LETTER PHASE-A SHOQ NSHUT YUM", direction="l", linebreak="al", unicodeslot=0x16840, }, [0x16841]={ category="lo", description="BAMUM LETTER PHASE-A NYIT MONGKEUAEQ", direction="l", linebreak="al", unicodeslot=0x16841, }, [0x16842]={ category="lo", description="BAMUM LETTER PHASE-A PAARAE", direction="l", linebreak="al", unicodeslot=0x16842, }, [0x16843]={ category="lo", description="BAMUM LETTER PHASE-A NKAARAE", direction="l", linebreak="al", unicodeslot=0x16843, }, [0x16844]={ category="lo", description="BAMUM LETTER PHASE-A UNKNOWN", direction="l", linebreak="al", unicodeslot=0x16844, }, [0x16845]={ category="lo", description="BAMUM LETTER PHASE-A NGGEN", direction="l", linebreak="al", unicodeslot=0x16845, }, [0x16846]={ category="lo", description="BAMUM LETTER PHASE-A MAESI", direction="l", linebreak="al", unicodeslot=0x16846, }, [0x16847]={ category="lo", description="BAMUM LETTER PHASE-A NJAM", direction="l", linebreak="al", unicodeslot=0x16847, }, [0x16848]={ category="lo", description="BAMUM LETTER PHASE-A MBANYI", direction="l", linebreak="al", unicodeslot=0x16848, }, [0x16849]={ category="lo", description="BAMUM LETTER PHASE-A NYET", direction="l", linebreak="al", unicodeslot=0x16849, }, [0x1684A]={ category="lo", description="BAMUM LETTER PHASE-A TEUAEN", direction="l", linebreak="al", unicodeslot=0x1684A, }, [0x1684B]={ category="lo", description="BAMUM LETTER PHASE-A SOT", direction="l", linebreak="al", unicodeslot=0x1684B, }, [0x1684C]={ category="lo", description="BAMUM LETTER PHASE-A PAAM", direction="l", linebreak="al", unicodeslot=0x1684C, }, [0x1684D]={ category="lo", description="BAMUM LETTER PHASE-A NSHIEE", direction="l", linebreak="al", unicodeslot=0x1684D, }, [0x1684E]={ category="lo", description="BAMUM LETTER PHASE-A MAEM", direction="l", linebreak="al", unicodeslot=0x1684E, }, [0x1684F]={ category="lo", description="BAMUM LETTER PHASE-A NYI", direction="l", linebreak="al", unicodeslot=0x1684F, }, [0x16850]={ category="lo", description="BAMUM LETTER PHASE-A KAQ", direction="l", linebreak="al", unicodeslot=0x16850, }, [0x16851]={ category="lo", description="BAMUM LETTER PHASE-A NSHA", direction="l", linebreak="al", unicodeslot=0x16851, }, [0x16852]={ category="lo", description="BAMUM LETTER PHASE-A VEE", direction="l", linebreak="al", unicodeslot=0x16852, }, [0x16853]={ category="lo", description="BAMUM LETTER PHASE-A LU", direction="l", linebreak="al", unicodeslot=0x16853, }, [0x16854]={ category="lo", description="BAMUM LETTER PHASE-A NEN", direction="l", linebreak="al", unicodeslot=0x16854, }, [0x16855]={ category="lo", description="BAMUM LETTER PHASE-A NAQ", direction="l", linebreak="al", unicodeslot=0x16855, }, [0x16856]={ category="lo", description="BAMUM LETTER PHASE-A MBAQ", direction="l", linebreak="al", unicodeslot=0x16856, }, [0x16857]={ category="lo", description="BAMUM LETTER PHASE-B NSHUET", direction="l", linebreak="al", unicodeslot=0x16857, }, [0x16858]={ category="lo", description="BAMUM LETTER PHASE-B TU MAEMGBIEE", direction="l", linebreak="al", unicodeslot=0x16858, }, [0x16859]={ category="lo", description="BAMUM LETTER PHASE-B SIEE", direction="l", linebreak="al", unicodeslot=0x16859, }, [0x1685A]={ category="lo", description="BAMUM LETTER PHASE-B SET TU", direction="l", linebreak="al", unicodeslot=0x1685A, }, [0x1685B]={ category="lo", description="BAMUM LETTER PHASE-B LOM NTEUM", direction="l", linebreak="al", unicodeslot=0x1685B, }, [0x1685C]={ category="lo", description="BAMUM LETTER PHASE-B MBA MAELEE", direction="l", linebreak="al", unicodeslot=0x1685C, }, [0x1685D]={ category="lo", description="BAMUM LETTER PHASE-B KIEEM", direction="l", linebreak="al", unicodeslot=0x1685D, }, [0x1685E]={ category="lo", description="BAMUM LETTER PHASE-B YEURAE", direction="l", linebreak="al", unicodeslot=0x1685E, }, [0x1685F]={ category="lo", description="BAMUM LETTER PHASE-B MBAARAE", direction="l", linebreak="al", unicodeslot=0x1685F, }, [0x16860]={ category="lo", description="BAMUM LETTER PHASE-B KAM", direction="l", linebreak="al", unicodeslot=0x16860, }, [0x16861]={ category="lo", description="BAMUM LETTER PHASE-B PEESHI", direction="l", linebreak="al", unicodeslot=0x16861, }, [0x16862]={ category="lo", description="BAMUM LETTER PHASE-B YAFU LEERAEWA", direction="l", linebreak="al", unicodeslot=0x16862, }, [0x16863]={ category="lo", description="BAMUM LETTER PHASE-B LAM NSHUT NYAM", direction="l", linebreak="al", unicodeslot=0x16863, }, [0x16864]={ category="lo", description="BAMUM LETTER PHASE-B NTIEE SHEUOQ", direction="l", linebreak="al", unicodeslot=0x16864, }, [0x16865]={ category="lo", description="BAMUM LETTER PHASE-B NDU NJAA", direction="l", linebreak="al", unicodeslot=0x16865, }, [0x16866]={ category="lo", description="BAMUM LETTER PHASE-B GHEUGHEUAEM", direction="l", linebreak="al", unicodeslot=0x16866, }, [0x16867]={ category="lo", description="BAMUM LETTER PHASE-B PIT", direction="l", linebreak="al", unicodeslot=0x16867, }, [0x16868]={ category="lo", description="BAMUM LETTER PHASE-B TU NSIEE", direction="l", linebreak="al", unicodeslot=0x16868, }, [0x16869]={ category="lo", description="BAMUM LETTER PHASE-B SHET NJAQ", direction="l", linebreak="al", unicodeslot=0x16869, }, [0x1686A]={ category="lo", description="BAMUM LETTER PHASE-B SHEUAEQTU", direction="l", linebreak="al", unicodeslot=0x1686A, }, [0x1686B]={ category="lo", description="BAMUM LETTER PHASE-B MFON TEUAEQ", direction="l", linebreak="al", unicodeslot=0x1686B, }, [0x1686C]={ category="lo", description="BAMUM LETTER PHASE-B MBIT MBAAKET", direction="l", linebreak="al", unicodeslot=0x1686C, }, [0x1686D]={ category="lo", description="BAMUM LETTER PHASE-B NYI NTEUM", direction="l", linebreak="al", unicodeslot=0x1686D, }, [0x1686E]={ category="lo", description="BAMUM LETTER PHASE-B KEUPUQ", direction="l", linebreak="al", unicodeslot=0x1686E, }, [0x1686F]={ category="lo", description="BAMUM LETTER PHASE-B GHEUGHEN", direction="l", linebreak="al", unicodeslot=0x1686F, }, [0x16870]={ category="lo", description="BAMUM LETTER PHASE-B KEUYEUX", direction="l", linebreak="al", unicodeslot=0x16870, }, [0x16871]={ category="lo", description="BAMUM LETTER PHASE-B LAANAE", direction="l", linebreak="al", unicodeslot=0x16871, }, [0x16872]={ category="lo", description="BAMUM LETTER PHASE-B PARUM", direction="l", linebreak="al", unicodeslot=0x16872, }, [0x16873]={ category="lo", description="BAMUM LETTER PHASE-B VEUM", direction="l", linebreak="al", unicodeslot=0x16873, }, [0x16874]={ category="lo", description="BAMUM LETTER PHASE-B NGKINDI MVOP", direction="l", linebreak="al", unicodeslot=0x16874, }, [0x16875]={ category="lo", description="BAMUM LETTER PHASE-B NGGEU MBU", direction="l", linebreak="al", unicodeslot=0x16875, }, [0x16876]={ category="lo", description="BAMUM LETTER PHASE-B WUAET", direction="l", linebreak="al", unicodeslot=0x16876, }, [0x16877]={ category="lo", description="BAMUM LETTER PHASE-B SAKEUAE", direction="l", linebreak="al", unicodeslot=0x16877, }, [0x16878]={ category="lo", description="BAMUM LETTER PHASE-B TAAM", direction="l", linebreak="al", unicodeslot=0x16878, }, [0x16879]={ category="lo", description="BAMUM LETTER PHASE-B MEUQ", direction="l", linebreak="al", unicodeslot=0x16879, }, [0x1687A]={ category="lo", description="BAMUM LETTER PHASE-B NGGUOQ", direction="l", linebreak="al", unicodeslot=0x1687A, }, [0x1687B]={ category="lo", description="BAMUM LETTER PHASE-B NGGUOQ LARGE", direction="l", linebreak="al", unicodeslot=0x1687B, }, [0x1687C]={ category="lo", description="BAMUM LETTER PHASE-B MFIYAQ", direction="l", linebreak="al", unicodeslot=0x1687C, }, [0x1687D]={ category="lo", description="BAMUM LETTER PHASE-B SUE", direction="l", linebreak="al", unicodeslot=0x1687D, }, [0x1687E]={ category="lo", description="BAMUM LETTER PHASE-B MBEURI", direction="l", linebreak="al", unicodeslot=0x1687E, }, [0x1687F]={ category="lo", description="BAMUM LETTER PHASE-B MONTIEEN", direction="l", linebreak="al", unicodeslot=0x1687F, }, [0x16880]={ category="lo", description="BAMUM LETTER PHASE-B NYAEMAE", direction="l", linebreak="al", unicodeslot=0x16880, }, [0x16881]={ category="lo", description="BAMUM LETTER PHASE-B PUNGAAM", direction="l", linebreak="al", unicodeslot=0x16881, }, [0x16882]={ category="lo", description="BAMUM LETTER PHASE-B MEUT NGGEET", direction="l", linebreak="al", unicodeslot=0x16882, }, [0x16883]={ category="lo", description="BAMUM LETTER PHASE-B FEUX", direction="l", linebreak="al", unicodeslot=0x16883, }, [0x16884]={ category="lo", description="BAMUM LETTER PHASE-B MBUOQ", direction="l", linebreak="al", unicodeslot=0x16884, }, [0x16885]={ category="lo", description="BAMUM LETTER PHASE-B FEE", direction="l", linebreak="al", unicodeslot=0x16885, }, [0x16886]={ category="lo", description="BAMUM LETTER PHASE-B KEUAEM", direction="l", linebreak="al", unicodeslot=0x16886, }, [0x16887]={ category="lo", description="BAMUM LETTER PHASE-B MA NJEUAENA", direction="l", linebreak="al", unicodeslot=0x16887, }, [0x16888]={ category="lo", description="BAMUM LETTER PHASE-B MA NJUQA", direction="l", linebreak="al", unicodeslot=0x16888, }, [0x16889]={ category="lo", description="BAMUM LETTER PHASE-B LET", direction="l", linebreak="al", unicodeslot=0x16889, }, [0x1688A]={ category="lo", description="BAMUM LETTER PHASE-B NGGAAM", direction="l", linebreak="al", unicodeslot=0x1688A, }, [0x1688B]={ category="lo", description="BAMUM LETTER PHASE-B NSEN", direction="l", linebreak="al", unicodeslot=0x1688B, }, [0x1688C]={ category="lo", description="BAMUM LETTER PHASE-B MA", direction="l", linebreak="al", unicodeslot=0x1688C, }, [0x1688D]={ category="lo", description="BAMUM LETTER PHASE-B KIQ", direction="l", linebreak="al", unicodeslot=0x1688D, }, [0x1688E]={ category="lo", description="BAMUM LETTER PHASE-B NGOM", direction="l", linebreak="al", unicodeslot=0x1688E, }, [0x1688F]={ category="lo", description="BAMUM LETTER PHASE-C NGKUE MAEMBA", direction="l", linebreak="al", unicodeslot=0x1688F, }, [0x16890]={ category="lo", description="BAMUM LETTER PHASE-C NZA", direction="l", linebreak="al", unicodeslot=0x16890, }, [0x16891]={ category="lo", description="BAMUM LETTER PHASE-C YUM", direction="l", linebreak="al", unicodeslot=0x16891, }, [0x16892]={ category="lo", description="BAMUM LETTER PHASE-C WANGKUOQ", direction="l", linebreak="al", unicodeslot=0x16892, }, [0x16893]={ category="lo", description="BAMUM LETTER PHASE-C NGGEN", direction="l", linebreak="al", unicodeslot=0x16893, }, [0x16894]={ category="lo", description="BAMUM LETTER PHASE-C NDEUAEREE", direction="l", linebreak="al", unicodeslot=0x16894, }, [0x16895]={ category="lo", description="BAMUM LETTER PHASE-C NGKAQ", direction="l", linebreak="al", unicodeslot=0x16895, }, [0x16896]={ category="lo", description="BAMUM LETTER PHASE-C GHARAE", direction="l", linebreak="al", unicodeslot=0x16896, }, [0x16897]={ category="lo", description="BAMUM LETTER PHASE-C MBEEKEET", direction="l", linebreak="al", unicodeslot=0x16897, }, [0x16898]={ category="lo", description="BAMUM LETTER PHASE-C GBAYI", direction="l", linebreak="al", unicodeslot=0x16898, }, [0x16899]={ category="lo", description="BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN", direction="l", linebreak="al", unicodeslot=0x16899, }, [0x1689A]={ category="lo", description="BAMUM LETTER PHASE-C NTU MBIT", direction="l", linebreak="al", unicodeslot=0x1689A, }, [0x1689B]={ category="lo", description="BAMUM LETTER PHASE-C MBEUM", direction="l", linebreak="al", unicodeslot=0x1689B, }, [0x1689C]={ category="lo", description="BAMUM LETTER PHASE-C PIRIEEN", direction="l", linebreak="al", unicodeslot=0x1689C, }, [0x1689D]={ category="lo", description="BAMUM LETTER PHASE-C NDOMBU", direction="l", linebreak="al", unicodeslot=0x1689D, }, [0x1689E]={ category="lo", description="BAMUM LETTER PHASE-C MBAA CABBAGE-TREE", direction="l", linebreak="al", unicodeslot=0x1689E, }, [0x1689F]={ category="lo", description="BAMUM LETTER PHASE-C KEUSHEUAEP", direction="l", linebreak="al", unicodeslot=0x1689F, }, [0x168A0]={ category="lo", description="BAMUM LETTER PHASE-C GHAP", direction="l", linebreak="al", unicodeslot=0x168A0, }, [0x168A1]={ category="lo", description="BAMUM LETTER PHASE-C KEUKAQ", direction="l", linebreak="al", unicodeslot=0x168A1, }, [0x168A2]={ category="lo", description="BAMUM LETTER PHASE-C YU MUOMAE", direction="l", linebreak="al", unicodeslot=0x168A2, }, [0x168A3]={ category="lo", description="BAMUM LETTER PHASE-C NZEUM", direction="l", linebreak="al", unicodeslot=0x168A3, }, [0x168A4]={ category="lo", description="BAMUM LETTER PHASE-C MBUE", direction="l", linebreak="al", unicodeslot=0x168A4, }, [0x168A5]={ category="lo", description="BAMUM LETTER PHASE-C NSEUAEN", direction="l", linebreak="al", unicodeslot=0x168A5, }, [0x168A6]={ category="lo", description="BAMUM LETTER PHASE-C MBIT", direction="l", linebreak="al", unicodeslot=0x168A6, }, [0x168A7]={ category="lo", description="BAMUM LETTER PHASE-C YEUQ", direction="l", linebreak="al", unicodeslot=0x168A7, }, [0x168A8]={ category="lo", description="BAMUM LETTER PHASE-C KPARAQ", direction="l", linebreak="al", unicodeslot=0x168A8, }, [0x168A9]={ category="lo", description="BAMUM LETTER PHASE-C KAA", direction="l", linebreak="al", unicodeslot=0x168A9, }, [0x168AA]={ category="lo", description="BAMUM LETTER PHASE-C SEUX", direction="l", linebreak="al", unicodeslot=0x168AA, }, [0x168AB]={ category="lo", description="BAMUM LETTER PHASE-C NDIDA", direction="l", linebreak="al", unicodeslot=0x168AB, }, [0x168AC]={ category="lo", description="BAMUM LETTER PHASE-C TAASHAE", direction="l", linebreak="al", unicodeslot=0x168AC, }, [0x168AD]={ category="lo", description="BAMUM LETTER PHASE-C NJUEQ", direction="l", linebreak="al", unicodeslot=0x168AD, }, [0x168AE]={ category="lo", description="BAMUM LETTER PHASE-C TITA YUE", direction="l", linebreak="al", unicodeslot=0x168AE, }, [0x168AF]={ category="lo", description="BAMUM LETTER PHASE-C SUAET", direction="l", linebreak="al", unicodeslot=0x168AF, }, [0x168B0]={ category="lo", description="BAMUM LETTER PHASE-C NGGUAEN NYAM", direction="l", linebreak="al", unicodeslot=0x168B0, }, [0x168B1]={ category="lo", description="BAMUM LETTER PHASE-C VEUX", direction="l", linebreak="al", unicodeslot=0x168B1, }, [0x168B2]={ category="lo", description="BAMUM LETTER PHASE-C NANSANAQ", direction="l", linebreak="al", unicodeslot=0x168B2, }, [0x168B3]={ category="lo", description="BAMUM LETTER PHASE-C MA KEUAERI", direction="l", linebreak="al", unicodeslot=0x168B3, }, [0x168B4]={ category="lo", description="BAMUM LETTER PHASE-C NTAA", direction="l", linebreak="al", unicodeslot=0x168B4, }, [0x168B5]={ category="lo", description="BAMUM LETTER PHASE-C NGGUON", direction="l", linebreak="al", unicodeslot=0x168B5, }, [0x168B6]={ category="lo", description="BAMUM LETTER PHASE-C LAP", direction="l", linebreak="al", unicodeslot=0x168B6, }, [0x168B7]={ category="lo", description="BAMUM LETTER PHASE-C MBIRIEEN", direction="l", linebreak="al", unicodeslot=0x168B7, }, [0x168B8]={ category="lo", description="BAMUM LETTER PHASE-C MGBASAQ", direction="l", linebreak="al", unicodeslot=0x168B8, }, [0x168B9]={ category="lo", description="BAMUM LETTER PHASE-C NTEUNGBA", direction="l", linebreak="al", unicodeslot=0x168B9, }, [0x168BA]={ category="lo", description="BAMUM LETTER PHASE-C TEUTEUX", direction="l", linebreak="al", unicodeslot=0x168BA, }, [0x168BB]={ category="lo", description="BAMUM LETTER PHASE-C NGGUM", direction="l", linebreak="al", unicodeslot=0x168BB, }, [0x168BC]={ category="lo", description="BAMUM LETTER PHASE-C FUE", direction="l", linebreak="al", unicodeslot=0x168BC, }, [0x168BD]={ category="lo", description="BAMUM LETTER PHASE-C NDEUT", direction="l", linebreak="al", unicodeslot=0x168BD, }, [0x168BE]={ category="lo", description="BAMUM LETTER PHASE-C NSA", direction="l", linebreak="al", unicodeslot=0x168BE, }, [0x168BF]={ category="lo", description="BAMUM LETTER PHASE-C NSHAQ", direction="l", linebreak="al", unicodeslot=0x168BF, }, [0x168C0]={ category="lo", description="BAMUM LETTER PHASE-C BUNG", direction="l", linebreak="al", unicodeslot=0x168C0, }, [0x168C1]={ category="lo", description="BAMUM LETTER PHASE-C VEUAEPEN", direction="l", linebreak="al", unicodeslot=0x168C1, }, [0x168C2]={ category="lo", description="BAMUM LETTER PHASE-C MBERAE", direction="l", linebreak="al", unicodeslot=0x168C2, }, [0x168C3]={ category="lo", description="BAMUM LETTER PHASE-C RU", direction="l", linebreak="al", unicodeslot=0x168C3, }, [0x168C4]={ category="lo", description="BAMUM LETTER PHASE-C NJAEM", direction="l", linebreak="al", unicodeslot=0x168C4, }, [0x168C5]={ category="lo", description="BAMUM LETTER PHASE-C LAM", direction="l", linebreak="al", unicodeslot=0x168C5, }, [0x168C6]={ category="lo", description="BAMUM LETTER PHASE-C TITUAEP", direction="l", linebreak="al", unicodeslot=0x168C6, }, [0x168C7]={ category="lo", description="BAMUM LETTER PHASE-C NSUOT NGOM", direction="l", linebreak="al", unicodeslot=0x168C7, }, [0x168C8]={ category="lo", description="BAMUM LETTER PHASE-C NJEEEE", direction="l", linebreak="al", unicodeslot=0x168C8, }, [0x168C9]={ category="lo", description="BAMUM LETTER PHASE-C KET", direction="l", linebreak="al", unicodeslot=0x168C9, }, [0x168CA]={ category="lo", description="BAMUM LETTER PHASE-C NGGU", direction="l", linebreak="al", unicodeslot=0x168CA, }, [0x168CB]={ category="lo", description="BAMUM LETTER PHASE-C MAESI", direction="l", linebreak="al", unicodeslot=0x168CB, }, [0x168CC]={ category="lo", description="BAMUM LETTER PHASE-C MBUAEM", direction="l", linebreak="al", unicodeslot=0x168CC, }, [0x168CD]={ category="lo", description="BAMUM LETTER PHASE-C LU", direction="l", linebreak="al", unicodeslot=0x168CD, }, [0x168CE]={ category="lo", description="BAMUM LETTER PHASE-C KUT", direction="l", linebreak="al", unicodeslot=0x168CE, }, [0x168CF]={ category="lo", description="BAMUM LETTER PHASE-C NJAM", direction="l", linebreak="al", unicodeslot=0x168CF, }, [0x168D0]={ category="lo", description="BAMUM LETTER PHASE-C NGOM", direction="l", linebreak="al", unicodeslot=0x168D0, }, [0x168D1]={ category="lo", description="BAMUM LETTER PHASE-C WUP", direction="l", linebreak="al", unicodeslot=0x168D1, }, [0x168D2]={ category="lo", description="BAMUM LETTER PHASE-C NGGUEET", direction="l", linebreak="al", unicodeslot=0x168D2, }, [0x168D3]={ category="lo", description="BAMUM LETTER PHASE-C NSOM", direction="l", linebreak="al", unicodeslot=0x168D3, }, [0x168D4]={ category="lo", description="BAMUM LETTER PHASE-C NTEN", direction="l", linebreak="al", unicodeslot=0x168D4, }, [0x168D5]={ category="lo", description="BAMUM LETTER PHASE-C KUOP NKAARAE", direction="l", linebreak="al", unicodeslot=0x168D5, }, [0x168D6]={ category="lo", description="BAMUM LETTER PHASE-C NSUN", direction="l", linebreak="al", unicodeslot=0x168D6, }, [0x168D7]={ category="lo", description="BAMUM LETTER PHASE-C NDAM", direction="l", linebreak="al", unicodeslot=0x168D7, }, [0x168D8]={ category="lo", description="BAMUM LETTER PHASE-C MA NSIEE", direction="l", linebreak="al", unicodeslot=0x168D8, }, [0x168D9]={ category="lo", description="BAMUM LETTER PHASE-C YAA", direction="l", linebreak="al", unicodeslot=0x168D9, }, [0x168DA]={ category="lo", description="BAMUM LETTER PHASE-C NDAP", direction="l", linebreak="al", unicodeslot=0x168DA, }, [0x168DB]={ category="lo", description="BAMUM LETTER PHASE-C SHUEQ", direction="l", linebreak="al", unicodeslot=0x168DB, }, [0x168DC]={ category="lo", description="BAMUM LETTER PHASE-C SETFON", direction="l", linebreak="al", unicodeslot=0x168DC, }, [0x168DD]={ category="lo", description="BAMUM LETTER PHASE-C MBI", direction="l", linebreak="al", unicodeslot=0x168DD, }, [0x168DE]={ category="lo", description="BAMUM LETTER PHASE-C MAEMBA", direction="l", linebreak="al", unicodeslot=0x168DE, }, [0x168DF]={ category="lo", description="BAMUM LETTER PHASE-C MBANYI", direction="l", linebreak="al", unicodeslot=0x168DF, }, [0x168E0]={ category="lo", description="BAMUM LETTER PHASE-C KEUSEUX", direction="l", linebreak="al", unicodeslot=0x168E0, }, [0x168E1]={ category="lo", description="BAMUM LETTER PHASE-C MBEUX", direction="l", linebreak="al", unicodeslot=0x168E1, }, [0x168E2]={ category="lo", description="BAMUM LETTER PHASE-C KEUM", direction="l", linebreak="al", unicodeslot=0x168E2, }, [0x168E3]={ category="lo", description="BAMUM LETTER PHASE-C MBAA PICKET", direction="l", linebreak="al", unicodeslot=0x168E3, }, [0x168E4]={ category="lo", description="BAMUM LETTER PHASE-C YUWOQ", direction="l", linebreak="al", unicodeslot=0x168E4, }, [0x168E5]={ category="lo", description="BAMUM LETTER PHASE-C NJEUX", direction="l", linebreak="al", unicodeslot=0x168E5, }, [0x168E6]={ category="lo", description="BAMUM LETTER PHASE-C MIEE", direction="l", linebreak="al", unicodeslot=0x168E6, }, [0x168E7]={ category="lo", description="BAMUM LETTER PHASE-C MUAE", direction="l", linebreak="al", unicodeslot=0x168E7, }, [0x168E8]={ category="lo", description="BAMUM LETTER PHASE-C SHIQ", direction="l", linebreak="al", unicodeslot=0x168E8, }, [0x168E9]={ category="lo", description="BAMUM LETTER PHASE-C KEN LAW", direction="l", linebreak="al", unicodeslot=0x168E9, }, [0x168EA]={ category="lo", description="BAMUM LETTER PHASE-C KEN FATIGUE", direction="l", linebreak="al", unicodeslot=0x168EA, }, [0x168EB]={ category="lo", description="BAMUM LETTER PHASE-C NGAQ", direction="l", linebreak="al", unicodeslot=0x168EB, }, [0x168EC]={ category="lo", description="BAMUM LETTER PHASE-C NAQ", direction="l", linebreak="al", unicodeslot=0x168EC, }, [0x168ED]={ category="lo", description="BAMUM LETTER PHASE-C LIQ", direction="l", linebreak="al", unicodeslot=0x168ED, }, [0x168EE]={ category="lo", description="BAMUM LETTER PHASE-C PIN", direction="l", linebreak="al", unicodeslot=0x168EE, }, [0x168EF]={ category="lo", description="BAMUM LETTER PHASE-C PEN", direction="l", linebreak="al", unicodeslot=0x168EF, }, [0x168F0]={ category="lo", description="BAMUM LETTER PHASE-C TET", direction="l", linebreak="al", unicodeslot=0x168F0, }, [0x168F1]={ category="lo", description="BAMUM LETTER PHASE-D MBUO", direction="l", linebreak="al", unicodeslot=0x168F1, }, [0x168F2]={ category="lo", description="BAMUM LETTER PHASE-D WAP", direction="l", linebreak="al", unicodeslot=0x168F2, }, [0x168F3]={ category="lo", description="BAMUM LETTER PHASE-D NJI", direction="l", linebreak="al", unicodeslot=0x168F3, }, [0x168F4]={ category="lo", description="BAMUM LETTER PHASE-D MFON", direction="l", linebreak="al", unicodeslot=0x168F4, }, [0x168F5]={ category="lo", description="BAMUM LETTER PHASE-D NJIEE", direction="l", linebreak="al", unicodeslot=0x168F5, }, [0x168F6]={ category="lo", description="BAMUM LETTER PHASE-D LIEE", direction="l", linebreak="al", unicodeslot=0x168F6, }, [0x168F7]={ category="lo", description="BAMUM LETTER PHASE-D NJEUT", direction="l", linebreak="al", unicodeslot=0x168F7, }, [0x168F8]={ category="lo", description="BAMUM LETTER PHASE-D NSHEE", direction="l", linebreak="al", unicodeslot=0x168F8, }, [0x168F9]={ category="lo", description="BAMUM LETTER PHASE-D NGGAAMAE", direction="l", linebreak="al", unicodeslot=0x168F9, }, [0x168FA]={ category="lo", description="BAMUM LETTER PHASE-D NYAM", direction="l", linebreak="al", unicodeslot=0x168FA, }, [0x168FB]={ category="lo", description="BAMUM LETTER PHASE-D WUAEN", direction="l", linebreak="al", unicodeslot=0x168FB, }, [0x168FC]={ category="lo", description="BAMUM LETTER PHASE-D NGKUN", direction="l", linebreak="al", unicodeslot=0x168FC, }, [0x168FD]={ category="lo", description="BAMUM LETTER PHASE-D SHEE", direction="l", linebreak="al", unicodeslot=0x168FD, }, [0x168FE]={ category="lo", description="BAMUM LETTER PHASE-D NGKAP", direction="l", linebreak="al", unicodeslot=0x168FE, }, [0x168FF]={ category="lo", description="BAMUM LETTER PHASE-D KEUAETMEUN", direction="l", linebreak="al", unicodeslot=0x168FF, }, [0x16900]={ category="lo", description="BAMUM LETTER PHASE-D TEUT", direction="l", linebreak="al", unicodeslot=0x16900, }, [0x16901]={ category="lo", description="BAMUM LETTER PHASE-D SHEUAE", direction="l", linebreak="al", unicodeslot=0x16901, }, [0x16902]={ category="lo", description="BAMUM LETTER PHASE-D NJAP", direction="l", linebreak="al", unicodeslot=0x16902, }, [0x16903]={ category="lo", description="BAMUM LETTER PHASE-D SUE", direction="l", linebreak="al", unicodeslot=0x16903, }, [0x16904]={ category="lo", description="BAMUM LETTER PHASE-D KET", direction="l", linebreak="al", unicodeslot=0x16904, }, [0x16905]={ category="lo", description="BAMUM LETTER PHASE-D YAEMMAE", direction="l", linebreak="al", unicodeslot=0x16905, }, [0x16906]={ category="lo", description="BAMUM LETTER PHASE-D KUOM", direction="l", linebreak="al", unicodeslot=0x16906, }, [0x16907]={ category="lo", description="BAMUM LETTER PHASE-D SAP", direction="l", linebreak="al", unicodeslot=0x16907, }, [0x16908]={ category="lo", description="BAMUM LETTER PHASE-D MFEUT", direction="l", linebreak="al", unicodeslot=0x16908, }, [0x16909]={ category="lo", description="BAMUM LETTER PHASE-D NDEUX", direction="l", linebreak="al", unicodeslot=0x16909, }, [0x1690A]={ category="lo", description="BAMUM LETTER PHASE-D MALEERI", direction="l", linebreak="al", unicodeslot=0x1690A, }, [0x1690B]={ category="lo", description="BAMUM LETTER PHASE-D MEUT", direction="l", linebreak="al", unicodeslot=0x1690B, }, [0x1690C]={ category="lo", description="BAMUM LETTER PHASE-D SEUAEQ", direction="l", linebreak="al", unicodeslot=0x1690C, }, [0x1690D]={ category="lo", description="BAMUM LETTER PHASE-D YEN", direction="l", linebreak="al", unicodeslot=0x1690D, }, [0x1690E]={ category="lo", description="BAMUM LETTER PHASE-D NJEUAEM", direction="l", linebreak="al", unicodeslot=0x1690E, }, [0x1690F]={ category="lo", description="BAMUM LETTER PHASE-D KEUOT MBUAE", direction="l", linebreak="al", unicodeslot=0x1690F, }, [0x16910]={ category="lo", description="BAMUM LETTER PHASE-D NGKEURI", direction="l", linebreak="al", unicodeslot=0x16910, }, [0x16911]={ category="lo", description="BAMUM LETTER PHASE-D TU", direction="l", linebreak="al", unicodeslot=0x16911, }, [0x16912]={ category="lo", description="BAMUM LETTER PHASE-D GHAA", direction="l", linebreak="al", unicodeslot=0x16912, }, [0x16913]={ category="lo", description="BAMUM LETTER PHASE-D NGKYEE", direction="l", linebreak="al", unicodeslot=0x16913, }, [0x16914]={ category="lo", description="BAMUM LETTER PHASE-D FEUFEUAET", direction="l", linebreak="al", unicodeslot=0x16914, }, [0x16915]={ category="lo", description="BAMUM LETTER PHASE-D NDEE", direction="l", linebreak="al", unicodeslot=0x16915, }, [0x16916]={ category="lo", description="BAMUM LETTER PHASE-D MGBOFUM", direction="l", linebreak="al", unicodeslot=0x16916, }, [0x16917]={ category="lo", description="BAMUM LETTER PHASE-D LEUAEP", direction="l", linebreak="al", unicodeslot=0x16917, }, [0x16918]={ category="lo", description="BAMUM LETTER PHASE-D NDON", direction="l", linebreak="al", unicodeslot=0x16918, }, [0x16919]={ category="lo", description="BAMUM LETTER PHASE-D MONI", direction="l", linebreak="al", unicodeslot=0x16919, }, [0x1691A]={ category="lo", description="BAMUM LETTER PHASE-D MGBEUN", direction="l", linebreak="al", unicodeslot=0x1691A, }, [0x1691B]={ category="lo", description="BAMUM LETTER PHASE-D PUUT", direction="l", linebreak="al", unicodeslot=0x1691B, }, [0x1691C]={ category="lo", description="BAMUM LETTER PHASE-D MGBIEE", direction="l", linebreak="al", unicodeslot=0x1691C, }, [0x1691D]={ category="lo", description="BAMUM LETTER PHASE-D MFO", direction="l", linebreak="al", unicodeslot=0x1691D, }, [0x1691E]={ category="lo", description="BAMUM LETTER PHASE-D LUM", direction="l", linebreak="al", unicodeslot=0x1691E, }, [0x1691F]={ category="lo", description="BAMUM LETTER PHASE-D NSIEEP", direction="l", linebreak="al", unicodeslot=0x1691F, }, [0x16920]={ category="lo", description="BAMUM LETTER PHASE-D MBAA", direction="l", linebreak="al", unicodeslot=0x16920, }, [0x16921]={ category="lo", description="BAMUM LETTER PHASE-D KWAET", direction="l", linebreak="al", unicodeslot=0x16921, }, [0x16922]={ category="lo", description="BAMUM LETTER PHASE-D NYET", direction="l", linebreak="al", unicodeslot=0x16922, }, [0x16923]={ category="lo", description="BAMUM LETTER PHASE-D TEUAEN", direction="l", linebreak="al", unicodeslot=0x16923, }, [0x16924]={ category="lo", description="BAMUM LETTER PHASE-D SOT", direction="l", linebreak="al", unicodeslot=0x16924, }, [0x16925]={ category="lo", description="BAMUM LETTER PHASE-D YUWOQ", direction="l", linebreak="al", unicodeslot=0x16925, }, [0x16926]={ category="lo", description="BAMUM LETTER PHASE-D KEUM", direction="l", linebreak="al", unicodeslot=0x16926, }, [0x16927]={ category="lo", description="BAMUM LETTER PHASE-D RAEM", direction="l", linebreak="al", unicodeslot=0x16927, }, [0x16928]={ category="lo", description="BAMUM LETTER PHASE-D TEEEE", direction="l", linebreak="al", unicodeslot=0x16928, }, [0x16929]={ category="lo", description="BAMUM LETTER PHASE-D NGKEUAEQ", direction="l", linebreak="al", unicodeslot=0x16929, }, [0x1692A]={ category="lo", description="BAMUM LETTER PHASE-D MFEUAE", direction="l", linebreak="al", unicodeslot=0x1692A, }, [0x1692B]={ category="lo", description="BAMUM LETTER PHASE-D NSIEET", direction="l", linebreak="al", unicodeslot=0x1692B, }, [0x1692C]={ category="lo", description="BAMUM LETTER PHASE-D KEUP", direction="l", linebreak="al", unicodeslot=0x1692C, }, [0x1692D]={ category="lo", description="BAMUM LETTER PHASE-D PIP", direction="l", linebreak="al", unicodeslot=0x1692D, }, [0x1692E]={ category="lo", description="BAMUM LETTER PHASE-D PEUTAE", direction="l", linebreak="al", unicodeslot=0x1692E, }, [0x1692F]={ category="lo", description="BAMUM LETTER PHASE-D NYUE", direction="l", linebreak="al", unicodeslot=0x1692F, }, [0x16930]={ category="lo", description="BAMUM LETTER PHASE-D LET", direction="l", linebreak="al", unicodeslot=0x16930, }, [0x16931]={ category="lo", description="BAMUM LETTER PHASE-D NGGAAM", direction="l", linebreak="al", unicodeslot=0x16931, }, [0x16932]={ category="lo", description="BAMUM LETTER PHASE-D MFIEE", direction="l", linebreak="al", unicodeslot=0x16932, }, [0x16933]={ category="lo", description="BAMUM LETTER PHASE-D NGGWAEN", direction="l", linebreak="al", unicodeslot=0x16933, }, [0x16934]={ category="lo", description="BAMUM LETTER PHASE-D YUOM", direction="l", linebreak="al", unicodeslot=0x16934, }, [0x16935]={ category="lo", description="BAMUM LETTER PHASE-D PAP", direction="l", linebreak="al", unicodeslot=0x16935, }, [0x16936]={ category="lo", description="BAMUM LETTER PHASE-D YUOP", direction="l", linebreak="al", unicodeslot=0x16936, }, [0x16937]={ category="lo", description="BAMUM LETTER PHASE-D NDAM", direction="l", linebreak="al", unicodeslot=0x16937, }, [0x16938]={ category="lo", description="BAMUM LETTER PHASE-D NTEUM", direction="l", linebreak="al", unicodeslot=0x16938, }, [0x16939]={ category="lo", description="BAMUM LETTER PHASE-D SUAE", direction="l", linebreak="al", unicodeslot=0x16939, }, [0x1693A]={ category="lo", description="BAMUM LETTER PHASE-D KUN", direction="l", linebreak="al", unicodeslot=0x1693A, }, [0x1693B]={ category="lo", description="BAMUM LETTER PHASE-D NGGEUX", direction="l", linebreak="al", unicodeslot=0x1693B, }, [0x1693C]={ category="lo", description="BAMUM LETTER PHASE-D NGKIEE", direction="l", linebreak="al", unicodeslot=0x1693C, }, [0x1693D]={ category="lo", description="BAMUM LETTER PHASE-D TUOT", direction="l", linebreak="al", unicodeslot=0x1693D, }, [0x1693E]={ category="lo", description="BAMUM LETTER PHASE-D MEUN", direction="l", linebreak="al", unicodeslot=0x1693E, }, [0x1693F]={ category="lo", description="BAMUM LETTER PHASE-D KUQ", direction="l", linebreak="al", unicodeslot=0x1693F, }, [0x16940]={ category="lo", description="BAMUM LETTER PHASE-D NSUM", direction="l", linebreak="al", unicodeslot=0x16940, }, [0x16941]={ category="lo", description="BAMUM LETTER PHASE-D TEUN", direction="l", linebreak="al", unicodeslot=0x16941, }, [0x16942]={ category="lo", description="BAMUM LETTER PHASE-D MAENJET", direction="l", linebreak="al", unicodeslot=0x16942, }, [0x16943]={ category="lo", description="BAMUM LETTER PHASE-D NGGAP", direction="l", linebreak="al", unicodeslot=0x16943, }, [0x16944]={ category="lo", description="BAMUM LETTER PHASE-D LEUM", direction="l", linebreak="al", unicodeslot=0x16944, }, [0x16945]={ category="lo", description="BAMUM LETTER PHASE-D NGGUOM", direction="l", linebreak="al", unicodeslot=0x16945, }, [0x16946]={ category="lo", description="BAMUM LETTER PHASE-D NSHUT", direction="l", linebreak="al", unicodeslot=0x16946, }, [0x16947]={ category="lo", description="BAMUM LETTER PHASE-D NJUEQ", direction="l", linebreak="al", unicodeslot=0x16947, }, [0x16948]={ category="lo", description="BAMUM LETTER PHASE-D GHEUAE", direction="l", linebreak="al", unicodeslot=0x16948, }, [0x16949]={ category="lo", description="BAMUM LETTER PHASE-D KU", direction="l", linebreak="al", unicodeslot=0x16949, }, [0x1694A]={ category="lo", description="BAMUM LETTER PHASE-D REN OLD", direction="l", linebreak="al", unicodeslot=0x1694A, }, [0x1694B]={ category="lo", description="BAMUM LETTER PHASE-D TAE", direction="l", linebreak="al", unicodeslot=0x1694B, }, [0x1694C]={ category="lo", description="BAMUM LETTER PHASE-D TOQ", direction="l", linebreak="al", unicodeslot=0x1694C, }, [0x1694D]={ category="lo", description="BAMUM LETTER PHASE-D NYI", direction="l", linebreak="al", unicodeslot=0x1694D, }, [0x1694E]={ category="lo", description="BAMUM LETTER PHASE-D RII", direction="l", linebreak="al", unicodeslot=0x1694E, }, [0x1694F]={ category="lo", description="BAMUM LETTER PHASE-D LEEEE", direction="l", linebreak="al", unicodeslot=0x1694F, }, [0x16950]={ category="lo", description="BAMUM LETTER PHASE-D MEEEE", direction="l", linebreak="al", unicodeslot=0x16950, }, [0x16951]={ category="lo", description="BAMUM LETTER PHASE-D M", direction="l", linebreak="al", unicodeslot=0x16951, }, [0x16952]={ category="lo", description="BAMUM LETTER PHASE-D SUU", direction="l", linebreak="al", unicodeslot=0x16952, }, [0x16953]={ category="lo", description="BAMUM LETTER PHASE-D MU", direction="l", linebreak="al", unicodeslot=0x16953, }, [0x16954]={ category="lo", description="BAMUM LETTER PHASE-D SHII", direction="l", linebreak="al", unicodeslot=0x16954, }, [0x16955]={ category="lo", description="BAMUM LETTER PHASE-D SHEUX", direction="l", linebreak="al", unicodeslot=0x16955, }, [0x16956]={ category="lo", description="BAMUM LETTER PHASE-D KYEE", direction="l", linebreak="al", unicodeslot=0x16956, }, [0x16957]={ category="lo", description="BAMUM LETTER PHASE-D NU", direction="l", linebreak="al", unicodeslot=0x16957, }, [0x16958]={ category="lo", description="BAMUM LETTER PHASE-D SHU", direction="l", linebreak="al", unicodeslot=0x16958, }, [0x16959]={ category="lo", description="BAMUM LETTER PHASE-D NTEE", direction="l", linebreak="al", unicodeslot=0x16959, }, [0x1695A]={ category="lo", description="BAMUM LETTER PHASE-D PEE", direction="l", linebreak="al", unicodeslot=0x1695A, }, [0x1695B]={ category="lo", description="BAMUM LETTER PHASE-D NI", direction="l", linebreak="al", unicodeslot=0x1695B, }, [0x1695C]={ category="lo", description="BAMUM LETTER PHASE-D SHOQ", direction="l", linebreak="al", unicodeslot=0x1695C, }, [0x1695D]={ category="lo", description="BAMUM LETTER PHASE-D PUQ", direction="l", linebreak="al", unicodeslot=0x1695D, }, [0x1695E]={ category="lo", description="BAMUM LETTER PHASE-D MVOP", direction="l", linebreak="al", unicodeslot=0x1695E, }, [0x1695F]={ category="lo", description="BAMUM LETTER PHASE-D LOQ", direction="l", linebreak="al", unicodeslot=0x1695F, }, [0x16960]={ category="lo", description="BAMUM LETTER PHASE-D REN MUCH", direction="l", linebreak="al", unicodeslot=0x16960, }, [0x16961]={ category="lo", description="BAMUM LETTER PHASE-D TI", direction="l", linebreak="al", unicodeslot=0x16961, }, [0x16962]={ category="lo", description="BAMUM LETTER PHASE-D NTUU", direction="l", linebreak="al", unicodeslot=0x16962, }, [0x16963]={ category="lo", description="BAMUM LETTER PHASE-D MBAA SEVEN", direction="l", linebreak="al", unicodeslot=0x16963, }, [0x16964]={ category="lo", description="BAMUM LETTER PHASE-D SAQ", direction="l", linebreak="al", unicodeslot=0x16964, }, [0x16965]={ category="lo", description="BAMUM LETTER PHASE-D FAA", direction="l", linebreak="al", unicodeslot=0x16965, }, [0x16966]={ category="lo", description="BAMUM LETTER PHASE-E NDAP", direction="l", linebreak="al", unicodeslot=0x16966, }, [0x16967]={ category="lo", description="BAMUM LETTER PHASE-E TOON", direction="l", linebreak="al", unicodeslot=0x16967, }, [0x16968]={ category="lo", description="BAMUM LETTER PHASE-E MBEUM", direction="l", linebreak="al", unicodeslot=0x16968, }, [0x16969]={ category="lo", description="BAMUM LETTER PHASE-E LAP", direction="l", linebreak="al", unicodeslot=0x16969, }, [0x1696A]={ category="lo", description="BAMUM LETTER PHASE-E VOM", direction="l", linebreak="al", unicodeslot=0x1696A, }, [0x1696B]={ category="lo", description="BAMUM LETTER PHASE-E LOON", direction="l", linebreak="al", unicodeslot=0x1696B, }, [0x1696C]={ category="lo", description="BAMUM LETTER PHASE-E PAA", direction="l", linebreak="al", unicodeslot=0x1696C, }, [0x1696D]={ category="lo", description="BAMUM LETTER PHASE-E SOM", direction="l", linebreak="al", unicodeslot=0x1696D, }, [0x1696E]={ category="lo", description="BAMUM LETTER PHASE-E RAQ", direction="l", linebreak="al", unicodeslot=0x1696E, }, [0x1696F]={ category="lo", description="BAMUM LETTER PHASE-E NSHUOP", direction="l", linebreak="al", unicodeslot=0x1696F, }, [0x16970]={ category="lo", description="BAMUM LETTER PHASE-E NDUN", direction="l", linebreak="al", unicodeslot=0x16970, }, [0x16971]={ category="lo", description="BAMUM LETTER PHASE-E PUAE", direction="l", linebreak="al", unicodeslot=0x16971, }, [0x16972]={ category="lo", description="BAMUM LETTER PHASE-E TAM", direction="l", linebreak="al", unicodeslot=0x16972, }, [0x16973]={ category="lo", description="BAMUM LETTER PHASE-E NGKA", direction="l", linebreak="al", unicodeslot=0x16973, }, [0x16974]={ category="lo", description="BAMUM LETTER PHASE-E KPEUX", direction="l", linebreak="al", unicodeslot=0x16974, }, [0x16975]={ category="lo", description="BAMUM LETTER PHASE-E WUO", direction="l", linebreak="al", unicodeslot=0x16975, }, [0x16976]={ category="lo", description="BAMUM LETTER PHASE-E SEE", direction="l", linebreak="al", unicodeslot=0x16976, }, [0x16977]={ category="lo", description="BAMUM LETTER PHASE-E NGGEUAET", direction="l", linebreak="al", unicodeslot=0x16977, }, [0x16978]={ category="lo", description="BAMUM LETTER PHASE-E PAAM", direction="l", linebreak="al", unicodeslot=0x16978, }, [0x16979]={ category="lo", description="BAMUM LETTER PHASE-E TOO", direction="l", linebreak="al", unicodeslot=0x16979, }, [0x1697A]={ category="lo", description="BAMUM LETTER PHASE-E KUOP", direction="l", linebreak="al", unicodeslot=0x1697A, }, [0x1697B]={ category="lo", description="BAMUM LETTER PHASE-E LOM", direction="l", linebreak="al", unicodeslot=0x1697B, }, [0x1697C]={ category="lo", description="BAMUM LETTER PHASE-E NSHIEE", direction="l", linebreak="al", unicodeslot=0x1697C, }, [0x1697D]={ category="lo", description="BAMUM LETTER PHASE-E NGOP", direction="l", linebreak="al", unicodeslot=0x1697D, }, [0x1697E]={ category="lo", description="BAMUM LETTER PHASE-E MAEM", direction="l", linebreak="al", unicodeslot=0x1697E, }, [0x1697F]={ category="lo", description="BAMUM LETTER PHASE-E NGKEUX", direction="l", linebreak="al", unicodeslot=0x1697F, }, [0x16980]={ category="lo", description="BAMUM LETTER PHASE-E NGOQ", direction="l", linebreak="al", unicodeslot=0x16980, }, [0x16981]={ category="lo", description="BAMUM LETTER PHASE-E NSHUE", direction="l", linebreak="al", unicodeslot=0x16981, }, [0x16982]={ category="lo", description="BAMUM LETTER PHASE-E RIMGBA", direction="l", linebreak="al", unicodeslot=0x16982, }, [0x16983]={ category="lo", description="BAMUM LETTER PHASE-E NJEUX", direction="l", linebreak="al", unicodeslot=0x16983, }, [0x16984]={ category="lo", description="BAMUM LETTER PHASE-E PEEM", direction="l", linebreak="al", unicodeslot=0x16984, }, [0x16985]={ category="lo", description="BAMUM LETTER PHASE-E SAA", direction="l", linebreak="al", unicodeslot=0x16985, }, [0x16986]={ category="lo", description="BAMUM LETTER PHASE-E NGGURAE", direction="l", linebreak="al", unicodeslot=0x16986, }, [0x16987]={ category="lo", description="BAMUM LETTER PHASE-E MGBA", direction="l", linebreak="al", unicodeslot=0x16987, }, [0x16988]={ category="lo", description="BAMUM LETTER PHASE-E GHEUX", direction="l", linebreak="al", unicodeslot=0x16988, }, [0x16989]={ category="lo", description="BAMUM LETTER PHASE-E NGKEUAEM", direction="l", linebreak="al", unicodeslot=0x16989, }, [0x1698A]={ category="lo", description="BAMUM LETTER PHASE-E NJAEMLI", direction="l", linebreak="al", unicodeslot=0x1698A, }, [0x1698B]={ category="lo", description="BAMUM LETTER PHASE-E MAP", direction="l", linebreak="al", unicodeslot=0x1698B, }, [0x1698C]={ category="lo", description="BAMUM LETTER PHASE-E LOOT", direction="l", linebreak="al", unicodeslot=0x1698C, }, [0x1698D]={ category="lo", description="BAMUM LETTER PHASE-E NGGEEEE", direction="l", linebreak="al", unicodeslot=0x1698D, }, [0x1698E]={ category="lo", description="BAMUM LETTER PHASE-E NDIQ", direction="l", linebreak="al", unicodeslot=0x1698E, }, [0x1698F]={ category="lo", description="BAMUM LETTER PHASE-E TAEN NTEUM", direction="l", linebreak="al", unicodeslot=0x1698F, }, [0x16990]={ category="lo", description="BAMUM LETTER PHASE-E SET", direction="l", linebreak="al", unicodeslot=0x16990, }, [0x16991]={ category="lo", description="BAMUM LETTER PHASE-E PUM", direction="l", linebreak="al", unicodeslot=0x16991, }, [0x16992]={ category="lo", description="BAMUM LETTER PHASE-E NDAA SOFTNESS", direction="l", linebreak="al", unicodeslot=0x16992, }, [0x16993]={ category="lo", description="BAMUM LETTER PHASE-E NGGUAESHAE NYAM", direction="l", linebreak="al", unicodeslot=0x16993, }, [0x16994]={ category="lo", description="BAMUM LETTER PHASE-E YIEE", direction="l", linebreak="al", unicodeslot=0x16994, }, [0x16995]={ category="lo", description="BAMUM LETTER PHASE-E GHEUN", direction="l", linebreak="al", unicodeslot=0x16995, }, [0x16996]={ category="lo", description="BAMUM LETTER PHASE-E TUAE", direction="l", linebreak="al", unicodeslot=0x16996, }, [0x16997]={ category="lo", description="BAMUM LETTER PHASE-E YEUAE", direction="l", linebreak="al", unicodeslot=0x16997, }, [0x16998]={ category="lo", description="BAMUM LETTER PHASE-E PO", direction="l", linebreak="al", unicodeslot=0x16998, }, [0x16999]={ category="lo", description="BAMUM LETTER PHASE-E TUMAE", direction="l", linebreak="al", unicodeslot=0x16999, }, [0x1699A]={ category="lo", description="BAMUM LETTER PHASE-E KEUAE", direction="l", linebreak="al", unicodeslot=0x1699A, }, [0x1699B]={ category="lo", description="BAMUM LETTER PHASE-E SUAEN", direction="l", linebreak="al", unicodeslot=0x1699B, }, [0x1699C]={ category="lo", description="BAMUM LETTER PHASE-E TEUAEQ", direction="l", linebreak="al", unicodeslot=0x1699C, }, [0x1699D]={ category="lo", description="BAMUM LETTER PHASE-E VEUAE", direction="l", linebreak="al", unicodeslot=0x1699D, }, [0x1699E]={ category="lo", description="BAMUM LETTER PHASE-E WEUX", direction="l", linebreak="al", unicodeslot=0x1699E, }, [0x1699F]={ category="lo", description="BAMUM LETTER PHASE-E LAAM", direction="l", linebreak="al", unicodeslot=0x1699F, }, [0x169A0]={ category="lo", description="BAMUM LETTER PHASE-E PU", direction="l", linebreak="al", unicodeslot=0x169A0, }, [0x169A1]={ category="lo", description="BAMUM LETTER PHASE-E TAAQ", direction="l", linebreak="al", unicodeslot=0x169A1, }, [0x169A2]={ category="lo", description="BAMUM LETTER PHASE-E GHAAMAE", direction="l", linebreak="al", unicodeslot=0x169A2, }, [0x169A3]={ category="lo", description="BAMUM LETTER PHASE-E NGEUREUT", direction="l", linebreak="al", unicodeslot=0x169A3, }, [0x169A4]={ category="lo", description="BAMUM LETTER PHASE-E SHEUAEQ", direction="l", linebreak="al", unicodeslot=0x169A4, }, [0x169A5]={ category="lo", description="BAMUM LETTER PHASE-E MGBEN", direction="l", linebreak="al", unicodeslot=0x169A5, }, [0x169A6]={ category="lo", description="BAMUM LETTER PHASE-E MBEE", direction="l", linebreak="al", unicodeslot=0x169A6, }, [0x169A7]={ category="lo", description="BAMUM LETTER PHASE-E NZAQ", direction="l", linebreak="al", unicodeslot=0x169A7, }, [0x169A8]={ category="lo", description="BAMUM LETTER PHASE-E NKOM", direction="l", linebreak="al", unicodeslot=0x169A8, }, [0x169A9]={ category="lo", description="BAMUM LETTER PHASE-E GBET", direction="l", linebreak="al", unicodeslot=0x169A9, }, [0x169AA]={ category="lo", description="BAMUM LETTER PHASE-E TUM", direction="l", linebreak="al", unicodeslot=0x169AA, }, [0x169AB]={ category="lo", description="BAMUM LETTER PHASE-E KUET", direction="l", linebreak="al", unicodeslot=0x169AB, }, [0x169AC]={ category="lo", description="BAMUM LETTER PHASE-E YAP", direction="l", linebreak="al", unicodeslot=0x169AC, }, [0x169AD]={ category="lo", description="BAMUM LETTER PHASE-E NYI CLEAVER", direction="l", linebreak="al", unicodeslot=0x169AD, }, [0x169AE]={ category="lo", description="BAMUM LETTER PHASE-E YIT", direction="l", linebreak="al", unicodeslot=0x169AE, }, [0x169AF]={ category="lo", description="BAMUM LETTER PHASE-E MFEUQ", direction="l", linebreak="al", unicodeslot=0x169AF, }, [0x169B0]={ category="lo", description="BAMUM LETTER PHASE-E NDIAQ", direction="l", linebreak="al", unicodeslot=0x169B0, }, [0x169B1]={ category="lo", description="BAMUM LETTER PHASE-E PIEEQ", direction="l", linebreak="al", unicodeslot=0x169B1, }, [0x169B2]={ category="lo", description="BAMUM LETTER PHASE-E YUEQ", direction="l", linebreak="al", unicodeslot=0x169B2, }, [0x169B3]={ category="lo", description="BAMUM LETTER PHASE-E LEUAEM", direction="l", linebreak="al", unicodeslot=0x169B3, }, [0x169B4]={ category="lo", description="BAMUM LETTER PHASE-E FUE", direction="l", linebreak="al", unicodeslot=0x169B4, }, [0x169B5]={ category="lo", description="BAMUM LETTER PHASE-E GBEUX", direction="l", linebreak="al", unicodeslot=0x169B5, }, [0x169B6]={ category="lo", description="BAMUM LETTER PHASE-E NGKUP", direction="l", linebreak="al", unicodeslot=0x169B6, }, [0x169B7]={ category="lo", description="BAMUM LETTER PHASE-E KET", direction="l", linebreak="al", unicodeslot=0x169B7, }, [0x169B8]={ category="lo", description="BAMUM LETTER PHASE-E MAE", direction="l", linebreak="al", unicodeslot=0x169B8, }, [0x169B9]={ category="lo", description="BAMUM LETTER PHASE-E NGKAAMI", direction="l", linebreak="al", unicodeslot=0x169B9, }, [0x169BA]={ category="lo", description="BAMUM LETTER PHASE-E GHET", direction="l", linebreak="al", unicodeslot=0x169BA, }, [0x169BB]={ category="lo", description="BAMUM LETTER PHASE-E FA", direction="l", linebreak="al", unicodeslot=0x169BB, }, [0x169BC]={ category="lo", description="BAMUM LETTER PHASE-E NTUM", direction="l", linebreak="al", unicodeslot=0x169BC, }, [0x169BD]={ category="lo", description="BAMUM LETTER PHASE-E PEUT", direction="l", linebreak="al", unicodeslot=0x169BD, }, [0x169BE]={ category="lo", description="BAMUM LETTER PHASE-E YEUM", direction="l", linebreak="al", unicodeslot=0x169BE, }, [0x169BF]={ category="lo", description="BAMUM LETTER PHASE-E NGGEUAE", direction="l", linebreak="al", unicodeslot=0x169BF, }, [0x169C0]={ category="lo", description="BAMUM LETTER PHASE-E NYI BETWEEN", direction="l", linebreak="al", unicodeslot=0x169C0, }, [0x169C1]={ category="lo", description="BAMUM LETTER PHASE-E NZUQ", direction="l", linebreak="al", unicodeslot=0x169C1, }, [0x169C2]={ category="lo", description="BAMUM LETTER PHASE-E POON", direction="l", linebreak="al", unicodeslot=0x169C2, }, [0x169C3]={ category="lo", description="BAMUM LETTER PHASE-E MIEE", direction="l", linebreak="al", unicodeslot=0x169C3, }, [0x169C4]={ category="lo", description="BAMUM LETTER PHASE-E FUET", direction="l", linebreak="al", unicodeslot=0x169C4, }, [0x169C5]={ category="lo", description="BAMUM LETTER PHASE-E NAE", direction="l", linebreak="al", unicodeslot=0x169C5, }, [0x169C6]={ category="lo", description="BAMUM LETTER PHASE-E MUAE", direction="l", linebreak="al", unicodeslot=0x169C6, }, [0x169C7]={ category="lo", description="BAMUM LETTER PHASE-E GHEUAE", direction="l", linebreak="al", unicodeslot=0x169C7, }, [0x169C8]={ category="lo", description="BAMUM LETTER PHASE-E FU I", direction="l", linebreak="al", unicodeslot=0x169C8, }, [0x169C9]={ category="lo", description="BAMUM LETTER PHASE-E MVI", direction="l", linebreak="al", unicodeslot=0x169C9, }, [0x169CA]={ category="lo", description="BAMUM LETTER PHASE-E PUAQ", direction="l", linebreak="al", unicodeslot=0x169CA, }, [0x169CB]={ category="lo", description="BAMUM LETTER PHASE-E NGKUM", direction="l", linebreak="al", unicodeslot=0x169CB, }, [0x169CC]={ category="lo", description="BAMUM LETTER PHASE-E KUT", direction="l", linebreak="al", unicodeslot=0x169CC, }, [0x169CD]={ category="lo", description="BAMUM LETTER PHASE-E PIET", direction="l", linebreak="al", unicodeslot=0x169CD, }, [0x169CE]={ category="lo", description="BAMUM LETTER PHASE-E NTAP", direction="l", linebreak="al", unicodeslot=0x169CE, }, [0x169CF]={ category="lo", description="BAMUM LETTER PHASE-E YEUAET", direction="l", linebreak="al", unicodeslot=0x169CF, }, [0x169D0]={ category="lo", description="BAMUM LETTER PHASE-E NGGUP", direction="l", linebreak="al", unicodeslot=0x169D0, }, [0x169D1]={ category="lo", description="BAMUM LETTER PHASE-E PA PEOPLE", direction="l", linebreak="al", unicodeslot=0x169D1, }, [0x169D2]={ category="lo", description="BAMUM LETTER PHASE-E FU CALL", direction="l", linebreak="al", unicodeslot=0x169D2, }, [0x169D3]={ category="lo", description="BAMUM LETTER PHASE-E FOM", direction="l", linebreak="al", unicodeslot=0x169D3, }, [0x169D4]={ category="lo", description="BAMUM LETTER PHASE-E NJEE", direction="l", linebreak="al", unicodeslot=0x169D4, }, [0x169D5]={ category="lo", description="BAMUM LETTER PHASE-E A", direction="l", linebreak="al", unicodeslot=0x169D5, }, [0x169D6]={ category="lo", description="BAMUM LETTER PHASE-E TOQ", direction="l", linebreak="al", unicodeslot=0x169D6, }, [0x169D7]={ category="lo", description="BAMUM LETTER PHASE-E O", direction="l", linebreak="al", unicodeslot=0x169D7, }, [0x169D8]={ category="lo", description="BAMUM LETTER PHASE-E I", direction="l", linebreak="al", unicodeslot=0x169D8, }, [0x169D9]={ category="lo", description="BAMUM LETTER PHASE-E LAQ", direction="l", linebreak="al", unicodeslot=0x169D9, }, [0x169DA]={ category="lo", description="BAMUM LETTER PHASE-E PA PLURAL", direction="l", linebreak="al", unicodeslot=0x169DA, }, [0x169DB]={ category="lo", description="BAMUM LETTER PHASE-E TAA", direction="l", linebreak="al", unicodeslot=0x169DB, }, [0x169DC]={ category="lo", description="BAMUM LETTER PHASE-E TAQ", direction="l", linebreak="al", unicodeslot=0x169DC, }, [0x169DD]={ category="lo", description="BAMUM LETTER PHASE-E NDAA MY HOUSE", direction="l", linebreak="al", unicodeslot=0x169DD, }, [0x169DE]={ category="lo", description="BAMUM LETTER PHASE-E SHIQ", direction="l", linebreak="al", unicodeslot=0x169DE, }, [0x169DF]={ category="lo", description="BAMUM LETTER PHASE-E YEUX", direction="l", linebreak="al", unicodeslot=0x169DF, }, [0x169E0]={ category="lo", description="BAMUM LETTER PHASE-E NGUAE", direction="l", linebreak="al", unicodeslot=0x169E0, }, [0x169E1]={ category="lo", description="BAMUM LETTER PHASE-E YUAEN", direction="l", linebreak="al", unicodeslot=0x169E1, }, [0x169E2]={ category="lo", description="BAMUM LETTER PHASE-E YOQ SWIMMING", direction="l", linebreak="al", unicodeslot=0x169E2, }, [0x169E3]={ category="lo", description="BAMUM LETTER PHASE-E YOQ COVER", direction="l", linebreak="al", unicodeslot=0x169E3, }, [0x169E4]={ category="lo", description="BAMUM LETTER PHASE-E YUQ", direction="l", linebreak="al", unicodeslot=0x169E4, }, [0x169E5]={ category="lo", description="BAMUM LETTER PHASE-E YUN", direction="l", linebreak="al", unicodeslot=0x169E5, }, [0x169E6]={ category="lo", description="BAMUM LETTER PHASE-E KEUX", direction="l", linebreak="al", unicodeslot=0x169E6, }, [0x169E7]={ category="lo", description="BAMUM LETTER PHASE-E PEUX", direction="l", linebreak="al", unicodeslot=0x169E7, }, [0x169E8]={ category="lo", description="BAMUM LETTER PHASE-E NJEE EPOCH", direction="l", linebreak="al", unicodeslot=0x169E8, }, [0x169E9]={ category="lo", description="BAMUM LETTER PHASE-E PUE", direction="l", linebreak="al", unicodeslot=0x169E9, }, [0x169EA]={ category="lo", description="BAMUM LETTER PHASE-E WUE", direction="l", linebreak="al", unicodeslot=0x169EA, }, [0x169EB]={ category="lo", description="BAMUM LETTER PHASE-E FEE", direction="l", linebreak="al", unicodeslot=0x169EB, }, [0x169EC]={ category="lo", description="BAMUM LETTER PHASE-E VEE", direction="l", linebreak="al", unicodeslot=0x169EC, }, [0x169ED]={ category="lo", description="BAMUM LETTER PHASE-E LU", direction="l", linebreak="al", unicodeslot=0x169ED, }, [0x169EE]={ category="lo", description="BAMUM LETTER PHASE-E MI", direction="l", linebreak="al", unicodeslot=0x169EE, }, [0x169EF]={ category="lo", description="BAMUM LETTER PHASE-E REUX", direction="l", linebreak="al", unicodeslot=0x169EF, }, [0x169F0]={ category="lo", description="BAMUM LETTER PHASE-E RAE", direction="l", linebreak="al", unicodeslot=0x169F0, }, [0x169F1]={ category="lo", description="BAMUM LETTER PHASE-E NGUAET", direction="l", linebreak="al", unicodeslot=0x169F1, }, [0x169F2]={ category="lo", description="BAMUM LETTER PHASE-E NGA", direction="l", linebreak="al", unicodeslot=0x169F2, }, [0x169F3]={ category="lo", description="BAMUM LETTER PHASE-E SHO", direction="l", linebreak="al", unicodeslot=0x169F3, }, [0x169F4]={ category="lo", description="BAMUM LETTER PHASE-E SHOQ", direction="l", linebreak="al", unicodeslot=0x169F4, }, [0x169F5]={ category="lo", description="BAMUM LETTER PHASE-E FU REMEDY", direction="l", linebreak="al", unicodeslot=0x169F5, }, [0x169F6]={ category="lo", description="BAMUM LETTER PHASE-E NA", direction="l", linebreak="al", unicodeslot=0x169F6, }, [0x169F7]={ category="lo", description="BAMUM LETTER PHASE-E PI", direction="l", linebreak="al", unicodeslot=0x169F7, }, [0x169F8]={ category="lo", description="BAMUM LETTER PHASE-E LOQ", direction="l", linebreak="al", unicodeslot=0x169F8, }, [0x169F9]={ category="lo", description="BAMUM LETTER PHASE-E KO", direction="l", linebreak="al", unicodeslot=0x169F9, }, [0x169FA]={ category="lo", description="BAMUM LETTER PHASE-E MEN", direction="l", linebreak="al", unicodeslot=0x169FA, }, [0x169FB]={ category="lo", description="BAMUM LETTER PHASE-E MA", direction="l", linebreak="al", unicodeslot=0x169FB, }, [0x169FC]={ category="lo", description="BAMUM LETTER PHASE-E MAQ", direction="l", linebreak="al", unicodeslot=0x169FC, }, [0x169FD]={ category="lo", description="BAMUM LETTER PHASE-E TEU", direction="l", linebreak="al", unicodeslot=0x169FD, }, [0x169FE]={ category="lo", description="BAMUM LETTER PHASE-E KI", direction="l", linebreak="al", unicodeslot=0x169FE, }, [0x169FF]={ category="lo", description="BAMUM LETTER PHASE-E MON", direction="l", linebreak="al", unicodeslot=0x169FF, }, [0x16A00]={ category="lo", description="BAMUM LETTER PHASE-E TEN", direction="l", linebreak="al", unicodeslot=0x16A00, }, [0x16A01]={ category="lo", description="BAMUM LETTER PHASE-E FAQ", direction="l", linebreak="al", unicodeslot=0x16A01, }, [0x16A02]={ category="lo", description="BAMUM LETTER PHASE-E GHOM", direction="l", linebreak="al", unicodeslot=0x16A02, }, [0x16A03]={ category="lo", description="BAMUM LETTER PHASE-F KA", direction="l", linebreak="al", unicodeslot=0x16A03, }, [0x16A04]={ category="lo", description="BAMUM LETTER PHASE-F U", direction="l", linebreak="al", unicodeslot=0x16A04, }, [0x16A05]={ category="lo", description="BAMUM LETTER PHASE-F KU", direction="l", linebreak="al", unicodeslot=0x16A05, }, [0x16A06]={ category="lo", description="BAMUM LETTER PHASE-F EE", direction="l", linebreak="al", unicodeslot=0x16A06, }, [0x16A07]={ category="lo", description="BAMUM LETTER PHASE-F REE", direction="l", linebreak="al", unicodeslot=0x16A07, }, [0x16A08]={ category="lo", description="BAMUM LETTER PHASE-F TAE", direction="l", linebreak="al", unicodeslot=0x16A08, }, [0x16A09]={ category="lo", description="BAMUM LETTER PHASE-F NYI", direction="l", linebreak="al", unicodeslot=0x16A09, }, [0x16A0A]={ category="lo", description="BAMUM LETTER PHASE-F LA", direction="l", linebreak="al", unicodeslot=0x16A0A, }, [0x16A0B]={ category="lo", description="BAMUM LETTER PHASE-F RII", direction="l", linebreak="al", unicodeslot=0x16A0B, }, [0x16A0C]={ category="lo", description="BAMUM LETTER PHASE-F RIEE", direction="l", linebreak="al", unicodeslot=0x16A0C, }, [0x16A0D]={ category="lo", description="BAMUM LETTER PHASE-F MEEEE", direction="l", linebreak="al", unicodeslot=0x16A0D, }, [0x16A0E]={ category="lo", description="BAMUM LETTER PHASE-F TAA", direction="l", linebreak="al", unicodeslot=0x16A0E, }, [0x16A0F]={ category="lo", description="BAMUM LETTER PHASE-F NDAA", direction="l", linebreak="al", unicodeslot=0x16A0F, }, [0x16A10]={ category="lo", description="BAMUM LETTER PHASE-F NJAEM", direction="l", linebreak="al", unicodeslot=0x16A10, }, [0x16A11]={ category="lo", description="BAMUM LETTER PHASE-F M", direction="l", linebreak="al", unicodeslot=0x16A11, }, [0x16A12]={ category="lo", description="BAMUM LETTER PHASE-F SUU", direction="l", linebreak="al", unicodeslot=0x16A12, }, [0x16A13]={ category="lo", description="BAMUM LETTER PHASE-F SHII", direction="l", linebreak="al", unicodeslot=0x16A13, }, [0x16A14]={ category="lo", description="BAMUM LETTER PHASE-F SI", direction="l", linebreak="al", unicodeslot=0x16A14, }, [0x16A15]={ category="lo", description="BAMUM LETTER PHASE-F SEUX", direction="l", linebreak="al", unicodeslot=0x16A15, }, [0x16A16]={ category="lo", description="BAMUM LETTER PHASE-F KYEE", direction="l", linebreak="al", unicodeslot=0x16A16, }, [0x16A17]={ category="lo", description="BAMUM LETTER PHASE-F KET", direction="l", linebreak="al", unicodeslot=0x16A17, }, [0x16A18]={ category="lo", description="BAMUM LETTER PHASE-F NUAE", direction="l", linebreak="al", unicodeslot=0x16A18, }, [0x16A19]={ category="lo", description="BAMUM LETTER PHASE-F NU", direction="l", linebreak="al", unicodeslot=0x16A19, }, [0x16A1A]={ category="lo", description="BAMUM LETTER PHASE-F NJUAE", direction="l", linebreak="al", unicodeslot=0x16A1A, }, [0x16A1B]={ category="lo", description="BAMUM LETTER PHASE-F YOQ", direction="l", linebreak="al", unicodeslot=0x16A1B, }, [0x16A1C]={ category="lo", description="BAMUM LETTER PHASE-F SHU", direction="l", linebreak="al", unicodeslot=0x16A1C, }, [0x16A1D]={ category="lo", description="BAMUM LETTER PHASE-F YA", direction="l", linebreak="al", unicodeslot=0x16A1D, }, [0x16A1E]={ category="lo", description="BAMUM LETTER PHASE-F NSHA", direction="l", linebreak="al", unicodeslot=0x16A1E, }, [0x16A1F]={ category="lo", description="BAMUM LETTER PHASE-F PEUX", direction="l", linebreak="al", unicodeslot=0x16A1F, }, [0x16A20]={ category="lo", description="BAMUM LETTER PHASE-F NTEE", direction="l", linebreak="al", unicodeslot=0x16A20, }, [0x16A21]={ category="lo", description="BAMUM LETTER PHASE-F WUE", direction="l", linebreak="al", unicodeslot=0x16A21, }, [0x16A22]={ category="lo", description="BAMUM LETTER PHASE-F PEE", direction="l", linebreak="al", unicodeslot=0x16A22, }, [0x16A23]={ category="lo", description="BAMUM LETTER PHASE-F RU", direction="l", linebreak="al", unicodeslot=0x16A23, }, [0x16A24]={ category="lo", description="BAMUM LETTER PHASE-F NI", direction="l", linebreak="al", unicodeslot=0x16A24, }, [0x16A25]={ category="lo", description="BAMUM LETTER PHASE-F REUX", direction="l", linebreak="al", unicodeslot=0x16A25, }, [0x16A26]={ category="lo", description="BAMUM LETTER PHASE-F KEN", direction="l", linebreak="al", unicodeslot=0x16A26, }, [0x16A27]={ category="lo", description="BAMUM LETTER PHASE-F NGKWAEN", direction="l", linebreak="al", unicodeslot=0x16A27, }, [0x16A28]={ category="lo", description="BAMUM LETTER PHASE-F NGGA", direction="l", linebreak="al", unicodeslot=0x16A28, }, [0x16A29]={ category="lo", description="BAMUM LETTER PHASE-F SHO", direction="l", linebreak="al", unicodeslot=0x16A29, }, [0x16A2A]={ category="lo", description="BAMUM LETTER PHASE-F PUAE", direction="l", linebreak="al", unicodeslot=0x16A2A, }, [0x16A2B]={ category="lo", description="BAMUM LETTER PHASE-F FOM", direction="l", linebreak="al", unicodeslot=0x16A2B, }, [0x16A2C]={ category="lo", description="BAMUM LETTER PHASE-F WA", direction="l", linebreak="al", unicodeslot=0x16A2C, }, [0x16A2D]={ category="lo", description="BAMUM LETTER PHASE-F LI", direction="l", linebreak="al", unicodeslot=0x16A2D, }, [0x16A2E]={ category="lo", description="BAMUM LETTER PHASE-F LOQ", direction="l", linebreak="al", unicodeslot=0x16A2E, }, [0x16A2F]={ category="lo", description="BAMUM LETTER PHASE-F KO", direction="l", linebreak="al", unicodeslot=0x16A2F, }, [0x16A30]={ category="lo", description="BAMUM LETTER PHASE-F MBEN", direction="l", linebreak="al", unicodeslot=0x16A30, }, [0x16A31]={ category="lo", description="BAMUM LETTER PHASE-F REN", direction="l", linebreak="al", unicodeslot=0x16A31, }, [0x16A32]={ category="lo", description="BAMUM LETTER PHASE-F MA", direction="l", linebreak="al", unicodeslot=0x16A32, }, [0x16A33]={ category="lo", description="BAMUM LETTER PHASE-F MO", direction="l", linebreak="al", unicodeslot=0x16A33, }, [0x16A34]={ category="lo", description="BAMUM LETTER PHASE-F MBAA", direction="l", linebreak="al", unicodeslot=0x16A34, }, [0x16A35]={ category="lo", description="BAMUM LETTER PHASE-F TET", direction="l", linebreak="al", unicodeslot=0x16A35, }, [0x16A36]={ category="lo", description="BAMUM LETTER PHASE-F KPA", direction="l", linebreak="al", unicodeslot=0x16A36, }, [0x16A37]={ category="lo", description="BAMUM LETTER PHASE-F SAMBA", direction="l", linebreak="al", unicodeslot=0x16A37, }, [0x16A38]={ category="lo", description="BAMUM LETTER PHASE-F VUEQ", direction="l", linebreak="al", unicodeslot=0x16A38, }, [0x16F00]={ category="lo", description="MIAO LETTER PA", direction="l", linebreak="al", unicodeslot=0x16F00, }, [0x16F01]={ category="lo", description="MIAO LETTER BA", direction="l", linebreak="al", unicodeslot=0x16F01, }, [0x16F02]={ category="lo", description="MIAO LETTER YI PA", direction="l", linebreak="al", unicodeslot=0x16F02, }, [0x16F03]={ category="lo", description="MIAO LETTER PLA", direction="l", linebreak="al", unicodeslot=0x16F03, }, [0x16F04]={ category="lo", description="MIAO LETTER MA", direction="l", linebreak="al", unicodeslot=0x16F04, }, [0x16F05]={ category="lo", description="MIAO LETTER MHA", direction="l", linebreak="al", unicodeslot=0x16F05, }, [0x16F06]={ category="lo", description="MIAO LETTER ARCHAIC MA", direction="l", linebreak="al", unicodeslot=0x16F06, }, [0x16F07]={ category="lo", description="MIAO LETTER FA", direction="l", linebreak="al", unicodeslot=0x16F07, }, [0x16F08]={ category="lo", description="MIAO LETTER VA", direction="l", linebreak="al", unicodeslot=0x16F08, }, [0x16F09]={ category="lo", description="MIAO LETTER VFA", direction="l", linebreak="al", unicodeslot=0x16F09, }, [0x16F0A]={ category="lo", description="MIAO LETTER TA", direction="l", linebreak="al", unicodeslot=0x16F0A, }, [0x16F0B]={ category="lo", description="MIAO LETTER DA", direction="l", linebreak="al", unicodeslot=0x16F0B, }, [0x16F0C]={ category="lo", description="MIAO LETTER YI TTA", direction="l", linebreak="al", unicodeslot=0x16F0C, }, [0x16F0D]={ category="lo", description="MIAO LETTER YI TA", direction="l", linebreak="al", unicodeslot=0x16F0D, }, [0x16F0E]={ category="lo", description="MIAO LETTER TTA", direction="l", linebreak="al", unicodeslot=0x16F0E, }, [0x16F0F]={ category="lo", description="MIAO LETTER DDA", direction="l", linebreak="al", unicodeslot=0x16F0F, }, [0x16F10]={ category="lo", description="MIAO LETTER NA", direction="l", linebreak="al", unicodeslot=0x16F10, }, [0x16F11]={ category="lo", description="MIAO LETTER NHA", direction="l", linebreak="al", unicodeslot=0x16F11, }, [0x16F12]={ category="lo", description="MIAO LETTER YI NNA", direction="l", linebreak="al", unicodeslot=0x16F12, }, [0x16F13]={ category="lo", description="MIAO LETTER ARCHAIC NA", direction="l", linebreak="al", unicodeslot=0x16F13, }, [0x16F14]={ category="lo", description="MIAO LETTER NNA", direction="l", linebreak="al", unicodeslot=0x16F14, }, [0x16F15]={ category="lo", description="MIAO LETTER NNHA", direction="l", linebreak="al", unicodeslot=0x16F15, }, [0x16F16]={ category="lo", description="MIAO LETTER LA", direction="l", linebreak="al", unicodeslot=0x16F16, }, [0x16F17]={ category="lo", description="MIAO LETTER LYA", direction="l", linebreak="al", unicodeslot=0x16F17, }, [0x16F18]={ category="lo", description="MIAO LETTER LHA", direction="l", linebreak="al", unicodeslot=0x16F18, }, [0x16F19]={ category="lo", description="MIAO LETTER LHYA", direction="l", linebreak="al", unicodeslot=0x16F19, }, [0x16F1A]={ category="lo", description="MIAO LETTER TLHA", direction="l", linebreak="al", unicodeslot=0x16F1A, }, [0x16F1B]={ category="lo", description="MIAO LETTER DLHA", direction="l", linebreak="al", unicodeslot=0x16F1B, }, [0x16F1C]={ category="lo", description="MIAO LETTER TLHYA", direction="l", linebreak="al", unicodeslot=0x16F1C, }, [0x16F1D]={ category="lo", description="MIAO LETTER DLHYA", direction="l", linebreak="al", unicodeslot=0x16F1D, }, [0x16F1E]={ category="lo", description="MIAO LETTER KA", direction="l", linebreak="al", unicodeslot=0x16F1E, }, [0x16F1F]={ category="lo", description="MIAO LETTER GA", direction="l", linebreak="al", unicodeslot=0x16F1F, }, [0x16F20]={ category="lo", description="MIAO LETTER YI KA", direction="l", linebreak="al", unicodeslot=0x16F20, }, [0x16F21]={ category="lo", description="MIAO LETTER QA", direction="l", linebreak="al", unicodeslot=0x16F21, }, [0x16F22]={ category="lo", description="MIAO LETTER QGA", direction="l", linebreak="al", unicodeslot=0x16F22, }, [0x16F23]={ category="lo", description="MIAO LETTER NGA", direction="l", linebreak="al", unicodeslot=0x16F23, }, [0x16F24]={ category="lo", description="MIAO LETTER NGHA", direction="l", linebreak="al", unicodeslot=0x16F24, }, [0x16F25]={ category="lo", description="MIAO LETTER ARCHAIC NGA", direction="l", linebreak="al", unicodeslot=0x16F25, }, [0x16F26]={ category="lo", description="MIAO LETTER HA", direction="l", linebreak="al", unicodeslot=0x16F26, }, [0x16F27]={ category="lo", description="MIAO LETTER XA", direction="l", linebreak="al", unicodeslot=0x16F27, }, [0x16F28]={ category="lo", description="MIAO LETTER GHA", direction="l", linebreak="al", unicodeslot=0x16F28, }, [0x16F29]={ category="lo", description="MIAO LETTER GHHA", direction="l", linebreak="al", unicodeslot=0x16F29, }, [0x16F2A]={ category="lo", description="MIAO LETTER TSSA", direction="l", linebreak="al", unicodeslot=0x16F2A, }, [0x16F2B]={ category="lo", description="MIAO LETTER DZZA", direction="l", linebreak="al", unicodeslot=0x16F2B, }, [0x16F2C]={ category="lo", description="MIAO LETTER NYA", direction="l", linebreak="al", unicodeslot=0x16F2C, }, [0x16F2D]={ category="lo", description="MIAO LETTER NYHA", direction="l", linebreak="al", unicodeslot=0x16F2D, }, [0x16F2E]={ category="lo", description="MIAO LETTER TSHA", direction="l", linebreak="al", unicodeslot=0x16F2E, }, [0x16F2F]={ category="lo", description="MIAO LETTER DZHA", direction="l", linebreak="al", unicodeslot=0x16F2F, }, [0x16F30]={ category="lo", description="MIAO LETTER YI TSHA", direction="l", linebreak="al", unicodeslot=0x16F30, }, [0x16F31]={ category="lo", description="MIAO LETTER YI DZHA", direction="l", linebreak="al", unicodeslot=0x16F31, }, [0x16F32]={ category="lo", description="MIAO LETTER REFORMED TSHA", direction="l", linebreak="al", unicodeslot=0x16F32, }, [0x16F33]={ category="lo", description="MIAO LETTER SHA", direction="l", linebreak="al", unicodeslot=0x16F33, }, [0x16F34]={ category="lo", description="MIAO LETTER SSA", direction="l", linebreak="al", unicodeslot=0x16F34, }, [0x16F35]={ category="lo", description="MIAO LETTER ZHA", direction="l", linebreak="al", unicodeslot=0x16F35, }, [0x16F36]={ category="lo", description="MIAO LETTER ZSHA", direction="l", linebreak="al", unicodeslot=0x16F36, }, [0x16F37]={ category="lo", description="MIAO LETTER TSA", direction="l", linebreak="al", unicodeslot=0x16F37, }, [0x16F38]={ category="lo", description="MIAO LETTER DZA", direction="l", linebreak="al", unicodeslot=0x16F38, }, [0x16F39]={ category="lo", description="MIAO LETTER YI TSA", direction="l", linebreak="al", unicodeslot=0x16F39, }, [0x16F3A]={ category="lo", description="MIAO LETTER SA", direction="l", linebreak="al", unicodeslot=0x16F3A, }, [0x16F3B]={ category="lo", description="MIAO LETTER ZA", direction="l", linebreak="al", unicodeslot=0x16F3B, }, [0x16F3C]={ category="lo", description="MIAO LETTER ZSA", direction="l", linebreak="al", unicodeslot=0x16F3C, }, [0x16F3D]={ category="lo", description="MIAO LETTER ZZA", direction="l", linebreak="al", unicodeslot=0x16F3D, }, [0x16F3E]={ category="lo", description="MIAO LETTER ZZSA", direction="l", linebreak="al", unicodeslot=0x16F3E, }, [0x16F3F]={ category="lo", description="MIAO LETTER ARCHAIC ZZA", direction="l", linebreak="al", unicodeslot=0x16F3F, }, [0x16F40]={ category="lo", description="MIAO LETTER ZZYA", direction="l", linebreak="al", unicodeslot=0x16F40, }, [0x16F41]={ category="lo", description="MIAO LETTER ZZSYA", direction="l", linebreak="al", unicodeslot=0x16F41, }, [0x16F42]={ category="lo", description="MIAO LETTER WA", direction="l", linebreak="al", unicodeslot=0x16F42, }, [0x16F43]={ category="lo", description="MIAO LETTER AH", direction="l", linebreak="al", unicodeslot=0x16F43, }, [0x16F44]={ category="lo", description="MIAO LETTER HHA", direction="l", linebreak="al", unicodeslot=0x16F44, }, [0x16F50]={ category="lo", description="MIAO LETTER NASALIZATION", direction="l", linebreak="al", unicodeslot=0x16F50, }, [0x16F51]={ category="mc", description="MIAO SIGN ASPIRATION", direction="l", linebreak="cm", unicodeslot=0x16F51, }, [0x16F52]={ category="mc", description="MIAO SIGN REFORMED VOICING", direction="l", linebreak="cm", unicodeslot=0x16F52, }, [0x16F53]={ category="mc", description="MIAO SIGN REFORMED ASPIRATION", direction="l", linebreak="cm", unicodeslot=0x16F53, }, [0x16F54]={ category="mc", description="MIAO VOWEL SIGN A", direction="l", linebreak="cm", unicodeslot=0x16F54, }, [0x16F55]={ category="mc", description="MIAO VOWEL SIGN AA", direction="l", linebreak="cm", unicodeslot=0x16F55, }, [0x16F56]={ category="mc", description="MIAO VOWEL SIGN AHH", direction="l", linebreak="cm", unicodeslot=0x16F56, }, [0x16F57]={ category="mc", description="MIAO VOWEL SIGN AN", direction="l", linebreak="cm", unicodeslot=0x16F57, }, [0x16F58]={ category="mc", description="MIAO VOWEL SIGN ANG", direction="l", linebreak="cm", unicodeslot=0x16F58, }, [0x16F59]={ category="mc", description="MIAO VOWEL SIGN O", direction="l", linebreak="cm", unicodeslot=0x16F59, }, [0x16F5A]={ category="mc", description="MIAO VOWEL SIGN OO", direction="l", linebreak="cm", unicodeslot=0x16F5A, }, [0x16F5B]={ category="mc", description="MIAO VOWEL SIGN WO", direction="l", linebreak="cm", unicodeslot=0x16F5B, }, [0x16F5C]={ category="mc", description="MIAO VOWEL SIGN W", direction="l", linebreak="cm", unicodeslot=0x16F5C, }, [0x16F5D]={ category="mc", description="MIAO VOWEL SIGN E", direction="l", linebreak="cm", unicodeslot=0x16F5D, }, [0x16F5E]={ category="mc", description="MIAO VOWEL SIGN EN", direction="l", linebreak="cm", unicodeslot=0x16F5E, }, [0x16F5F]={ category="mc", description="MIAO VOWEL SIGN ENG", direction="l", linebreak="cm", unicodeslot=0x16F5F, }, [0x16F60]={ category="mc", description="MIAO VOWEL SIGN OEY", direction="l", linebreak="cm", unicodeslot=0x16F60, }, [0x16F61]={ category="mc", description="MIAO VOWEL SIGN I", direction="l", linebreak="cm", unicodeslot=0x16F61, }, [0x16F62]={ category="mc", description="MIAO VOWEL SIGN IA", direction="l", linebreak="cm", unicodeslot=0x16F62, }, [0x16F63]={ category="mc", description="MIAO VOWEL SIGN IAN", direction="l", linebreak="cm", unicodeslot=0x16F63, }, [0x16F64]={ category="mc", description="MIAO VOWEL SIGN IANG", direction="l", linebreak="cm", unicodeslot=0x16F64, }, [0x16F65]={ category="mc", description="MIAO VOWEL SIGN IO", direction="l", linebreak="cm", unicodeslot=0x16F65, }, [0x16F66]={ category="mc", description="MIAO VOWEL SIGN IE", direction="l", linebreak="cm", unicodeslot=0x16F66, }, [0x16F67]={ category="mc", description="MIAO VOWEL SIGN II", direction="l", linebreak="cm", unicodeslot=0x16F67, }, [0x16F68]={ category="mc", description="MIAO VOWEL SIGN IU", direction="l", linebreak="cm", unicodeslot=0x16F68, }, [0x16F69]={ category="mc", description="MIAO VOWEL SIGN ING", direction="l", linebreak="cm", unicodeslot=0x16F69, }, [0x16F6A]={ category="mc", description="MIAO VOWEL SIGN U", direction="l", linebreak="cm", unicodeslot=0x16F6A, }, [0x16F6B]={ category="mc", description="MIAO VOWEL SIGN UA", direction="l", linebreak="cm", unicodeslot=0x16F6B, }, [0x16F6C]={ category="mc", description="MIAO VOWEL SIGN UAN", direction="l", linebreak="cm", unicodeslot=0x16F6C, }, [0x16F6D]={ category="mc", description="MIAO VOWEL SIGN UANG", direction="l", linebreak="cm", unicodeslot=0x16F6D, }, [0x16F6E]={ category="mc", description="MIAO VOWEL SIGN UU", direction="l", linebreak="cm", unicodeslot=0x16F6E, }, [0x16F6F]={ category="mc", description="MIAO VOWEL SIGN UEI", direction="l", linebreak="cm", unicodeslot=0x16F6F, }, [0x16F70]={ category="mc", description="MIAO VOWEL SIGN UNG", direction="l", linebreak="cm", unicodeslot=0x16F70, }, [0x16F71]={ category="mc", description="MIAO VOWEL SIGN Y", direction="l", linebreak="cm", unicodeslot=0x16F71, }, [0x16F72]={ category="mc", description="MIAO VOWEL SIGN YI", direction="l", linebreak="cm", unicodeslot=0x16F72, }, [0x16F73]={ category="mc", description="MIAO VOWEL SIGN AE", direction="l", linebreak="cm", unicodeslot=0x16F73, }, [0x16F74]={ category="mc", description="MIAO VOWEL SIGN AEE", direction="l", linebreak="cm", unicodeslot=0x16F74, }, [0x16F75]={ category="mc", description="MIAO VOWEL SIGN ERR", direction="l", linebreak="cm", unicodeslot=0x16F75, }, [0x16F76]={ category="mc", description="MIAO VOWEL SIGN ROUNDED ERR", direction="l", linebreak="cm", unicodeslot=0x16F76, }, [0x16F77]={ category="mc", description="MIAO VOWEL SIGN ER", direction="l", linebreak="cm", unicodeslot=0x16F77, }, [0x16F78]={ category="mc", description="MIAO VOWEL SIGN ROUNDED ER", direction="l", linebreak="cm", unicodeslot=0x16F78, }, [0x16F79]={ category="mc", description="MIAO VOWEL SIGN AI", direction="l", linebreak="cm", unicodeslot=0x16F79, }, [0x16F7A]={ category="mc", description="MIAO VOWEL SIGN EI", direction="l", linebreak="cm", unicodeslot=0x16F7A, }, [0x16F7B]={ category="mc", description="MIAO VOWEL SIGN AU", direction="l", linebreak="cm", unicodeslot=0x16F7B, }, [0x16F7C]={ category="mc", description="MIAO VOWEL SIGN OU", direction="l", linebreak="cm", unicodeslot=0x16F7C, }, [0x16F7D]={ category="mc", description="MIAO VOWEL SIGN N", direction="l", linebreak="cm", unicodeslot=0x16F7D, }, [0x16F7E]={ category="mc", description="MIAO VOWEL SIGN NG", direction="l", linebreak="cm", unicodeslot=0x16F7E, }, [0x16F8F]={ category="mn", description="MIAO TONE RIGHT", direction="nsm", linebreak="cm", unicodeslot=0x16F8F, }, [0x16F90]={ category="mn", description="MIAO TONE TOP RIGHT", direction="nsm", linebreak="cm", unicodeslot=0x16F90, }, [0x16F91]={ category="mn", description="MIAO TONE ABOVE", direction="nsm", linebreak="cm", unicodeslot=0x16F91, }, [0x16F92]={ category="mn", description="MIAO TONE BELOW", direction="nsm", linebreak="cm", unicodeslot=0x16F92, }, [0x16F93]={ category="lm", description="MIAO LETTER TONE-2", direction="l", linebreak="al", unicodeslot=0x16F93, }, [0x16F94]={ category="lm", description="MIAO LETTER TONE-3", direction="l", linebreak="al", unicodeslot=0x16F94, }, [0x16F95]={ category="lm", description="MIAO LETTER TONE-4", direction="l", linebreak="al", unicodeslot=0x16F95, }, [0x16F96]={ category="lm", description="MIAO LETTER TONE-5", direction="l", linebreak="al", unicodeslot=0x16F96, }, [0x16F97]={ category="lm", description="MIAO LETTER TONE-6", direction="l", linebreak="al", unicodeslot=0x16F97, }, [0x16F98]={ category="lm", description="MIAO LETTER TONE-7", direction="l", linebreak="al", unicodeslot=0x16F98, }, [0x16F99]={ category="lm", description="MIAO LETTER TONE-8", direction="l", linebreak="al", unicodeslot=0x16F99, }, [0x16F9A]={ category="lm", description="MIAO LETTER REFORMED TONE-1", direction="l", linebreak="al", unicodeslot=0x16F9A, }, [0x16F9B]={ category="lm", description="MIAO LETTER REFORMED TONE-2", direction="l", linebreak="al", unicodeslot=0x16F9B, }, [0x16F9C]={ category="lm", description="MIAO LETTER REFORMED TONE-4", direction="l", linebreak="al", unicodeslot=0x16F9C, }, [0x16F9D]={ category="lm", description="MIAO LETTER REFORMED TONE-5", direction="l", linebreak="al", unicodeslot=0x16F9D, }, [0x16F9E]={ category="lm", description="MIAO LETTER REFORMED TONE-6", direction="l", linebreak="al", unicodeslot=0x16F9E, }, [0x16F9F]={ category="lm", description="MIAO LETTER REFORMED TONE-8", direction="l", linebreak="al", unicodeslot=0x16F9F, }, [0x1B000]={ category="lo", cjkwd="w", description="KATAKANA LETTER ARCHAIC E", direction="l", linebreak="id", unicodeslot=0x1B000, }, [0x1B001]={ category="lo", cjkwd="w", description="HIRAGANA LETTER ARCHAIC YE", direction="l", linebreak="id", unicodeslot=0x1B001, }, [0x1D000]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSILI", direction="l", linebreak="al", unicodeslot=0x1D000, }, [0x1D001]={ category="so", description="BYZANTINE MUSICAL SYMBOL DASEIA", direction="l", linebreak="al", unicodeslot=0x1D001, }, [0x1D002]={ category="so", description="BYZANTINE MUSICAL SYMBOL PERISPOMENI", direction="l", linebreak="al", unicodeslot=0x1D002, }, [0x1D003]={ category="so", description="BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON", direction="l", linebreak="al", unicodeslot=0x1D003, }, [0x1D004]={ category="so", description="BYZANTINE MUSICAL SYMBOL OXEIA DIPLI", direction="l", linebreak="al", unicodeslot=0x1D004, }, [0x1D005]={ category="so", description="BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON", direction="l", linebreak="al", unicodeslot=0x1D005, }, [0x1D006]={ category="so", description="BYZANTINE MUSICAL SYMBOL VAREIA DIPLI", direction="l", linebreak="al", unicodeslot=0x1D006, }, [0x1D007]={ category="so", description="BYZANTINE MUSICAL SYMBOL KATHISTI", direction="l", linebreak="al", unicodeslot=0x1D007, }, [0x1D008]={ category="so", description="BYZANTINE MUSICAL SYMBOL SYRMATIKI", direction="l", linebreak="al", unicodeslot=0x1D008, }, [0x1D009]={ category="so", description="BYZANTINE MUSICAL SYMBOL PARAKLITIKI", direction="l", linebreak="al", unicodeslot=0x1D009, }, [0x1D00A]={ category="so", description="BYZANTINE MUSICAL SYMBOL YPOKRISIS", direction="l", linebreak="al", unicodeslot=0x1D00A, }, [0x1D00B]={ category="so", description="BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI", direction="l", linebreak="al", unicodeslot=0x1D00B, }, [0x1D00C]={ category="so", description="BYZANTINE MUSICAL SYMBOL KREMASTI", direction="l", linebreak="al", unicodeslot=0x1D00C, }, [0x1D00D]={ category="so", description="BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON", direction="l", linebreak="al", unicodeslot=0x1D00D, }, [0x1D00E]={ category="so", description="BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON", direction="l", linebreak="al", unicodeslot=0x1D00E, }, [0x1D00F]={ category="so", description="BYZANTINE MUSICAL SYMBOL TELEIA", direction="l", linebreak="al", unicodeslot=0x1D00F, }, [0x1D010]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMATA", direction="l", linebreak="al", unicodeslot=0x1D010, }, [0x1D011]={ category="so", description="BYZANTINE MUSICAL SYMBOL APOSTROFOS", direction="l", linebreak="al", unicodeslot=0x1D011, }, [0x1D012]={ category="so", description="BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI", direction="l", linebreak="al", unicodeslot=0x1D012, }, [0x1D013]={ category="so", description="BYZANTINE MUSICAL SYMBOL SYNEVMA", direction="l", linebreak="al", unicodeslot=0x1D013, }, [0x1D014]={ category="so", description="BYZANTINE MUSICAL SYMBOL THITA", direction="l", linebreak="al", unicodeslot=0x1D014, }, [0x1D015]={ category="so", description="BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D015, }, [0x1D016]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORGON ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D016, }, [0x1D017]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSILON", direction="l", linebreak="al", unicodeslot=0x1D017, }, [0x1D018]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHAMILON", direction="l", linebreak="al", unicodeslot=0x1D018, }, [0x1D019]={ category="so", description="BYZANTINE MUSICAL SYMBOL VATHY", direction="l", linebreak="al", unicodeslot=0x1D019, }, [0x1D01A]={ category="so", description="BYZANTINE MUSICAL SYMBOL ISON ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D01A, }, [0x1D01B]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D01B, }, [0x1D01C]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D01C, }, [0x1D01D]={ category="so", description="BYZANTINE MUSICAL SYMBOL SAXIMATA", direction="l", linebreak="al", unicodeslot=0x1D01D, }, [0x1D01E]={ category="so", description="BYZANTINE MUSICAL SYMBOL PARICHON", direction="l", linebreak="al", unicodeslot=0x1D01E, }, [0x1D01F]={ category="so", description="BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA", direction="l", linebreak="al", unicodeslot=0x1D01F, }, [0x1D020]={ category="so", description="BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D020, }, [0x1D021]={ category="so", description="BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D021, }, [0x1D022]={ category="so", description="BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D022, }, [0x1D023]={ category="so", description="BYZANTINE MUSICAL SYMBOL APOTHEMA", direction="l", linebreak="al", unicodeslot=0x1D023, }, [0x1D024]={ category="so", description="BYZANTINE MUSICAL SYMBOL KLASMA", direction="l", linebreak="al", unicodeslot=0x1D024, }, [0x1D025]={ category="so", description="BYZANTINE MUSICAL SYMBOL REVMA", direction="l", linebreak="al", unicodeslot=0x1D025, }, [0x1D026]={ category="so", description="BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D026, }, [0x1D027]={ category="so", description="BYZANTINE MUSICAL SYMBOL TINAGMA", direction="l", linebreak="al", unicodeslot=0x1D027, }, [0x1D028]={ category="so", description="BYZANTINE MUSICAL SYMBOL ANATRICHISMA", direction="l", linebreak="al", unicodeslot=0x1D028, }, [0x1D029]={ category="so", description="BYZANTINE MUSICAL SYMBOL SEISMA", direction="l", linebreak="al", unicodeslot=0x1D029, }, [0x1D02A]={ category="so", description="BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D02A, }, [0x1D02B]={ category="so", description="BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU", direction="l", linebreak="al", unicodeslot=0x1D02B, }, [0x1D02C]={ category="so", description="BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D02C, }, [0x1D02D]={ category="so", description="BYZANTINE MUSICAL SYMBOL THEMA", direction="l", linebreak="al", unicodeslot=0x1D02D, }, [0x1D02E]={ category="so", description="BYZANTINE MUSICAL SYMBOL LEMOI", direction="l", linebreak="al", unicodeslot=0x1D02E, }, [0x1D02F]={ category="so", description="BYZANTINE MUSICAL SYMBOL DYO", direction="l", linebreak="al", unicodeslot=0x1D02F, }, [0x1D030]={ category="so", description="BYZANTINE MUSICAL SYMBOL TRIA", direction="l", linebreak="al", unicodeslot=0x1D030, }, [0x1D031]={ category="so", description="BYZANTINE MUSICAL SYMBOL TESSERA", direction="l", linebreak="al", unicodeslot=0x1D031, }, [0x1D032]={ category="so", description="BYZANTINE MUSICAL SYMBOL KRATIMATA", direction="l", linebreak="al", unicodeslot=0x1D032, }, [0x1D033]={ category="so", description="BYZANTINE MUSICAL SYMBOL APESO EXO NEO", direction="l", linebreak="al", unicodeslot=0x1D033, }, [0x1D034]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D034, }, [0x1D035]={ category="so", description="BYZANTINE MUSICAL SYMBOL IMIFTHORA", direction="l", linebreak="al", unicodeslot=0x1D035, }, [0x1D036]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D036, }, [0x1D037]={ category="so", description="BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON", direction="l", linebreak="al", unicodeslot=0x1D037, }, [0x1D038]={ category="so", description="BYZANTINE MUSICAL SYMBOL PELASTON", direction="l", linebreak="al", unicodeslot=0x1D038, }, [0x1D039]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSIFISTON", direction="l", linebreak="al", unicodeslot=0x1D039, }, [0x1D03A]={ category="so", description="BYZANTINE MUSICAL SYMBOL KONTEVMA", direction="l", linebreak="al", unicodeslot=0x1D03A, }, [0x1D03B]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D03B, }, [0x1D03C]={ category="so", description="BYZANTINE MUSICAL SYMBOL RAPISMA", direction="l", linebreak="al", unicodeslot=0x1D03C, }, [0x1D03D]={ category="so", description="BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D03D, }, [0x1D03E]={ category="so", description="BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D03E, }, [0x1D03F]={ category="so", description="BYZANTINE MUSICAL SYMBOL ICHADIN", direction="l", linebreak="al", unicodeslot=0x1D03F, }, [0x1D040]={ category="so", description="BYZANTINE MUSICAL SYMBOL NANA", direction="l", linebreak="al", unicodeslot=0x1D040, }, [0x1D041]={ category="so", description="BYZANTINE MUSICAL SYMBOL PETASMA", direction="l", linebreak="al", unicodeslot=0x1D041, }, [0x1D042]={ category="so", description="BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO", direction="l", linebreak="al", unicodeslot=0x1D042, }, [0x1D043]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKON ALLO", direction="l", linebreak="al", unicodeslot=0x1D043, }, [0x1D044]={ category="so", description="BYZANTINE MUSICAL SYMBOL STRAGGISMATA", direction="l", linebreak="al", unicodeslot=0x1D044, }, [0x1D045]={ category="so", description="BYZANTINE MUSICAL SYMBOL GRONTHISMATA", direction="l", linebreak="al", unicodeslot=0x1D045, }, [0x1D046]={ category="so", description="BYZANTINE MUSICAL SYMBOL ISON NEO", direction="l", linebreak="al", unicodeslot=0x1D046, }, [0x1D047]={ category="so", description="BYZANTINE MUSICAL SYMBOL OLIGON NEO", direction="l", linebreak="al", unicodeslot=0x1D047, }, [0x1D048]={ category="so", description="BYZANTINE MUSICAL SYMBOL OXEIA NEO", direction="l", linebreak="al", unicodeslot=0x1D048, }, [0x1D049]={ category="so", description="BYZANTINE MUSICAL SYMBOL PETASTI", direction="l", linebreak="al", unicodeslot=0x1D049, }, [0x1D04A]={ category="so", description="BYZANTINE MUSICAL SYMBOL KOUFISMA", direction="l", linebreak="al", unicodeslot=0x1D04A, }, [0x1D04B]={ category="so", description="BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA", direction="l", linebreak="al", unicodeslot=0x1D04B, }, [0x1D04C]={ category="so", description="BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA", direction="l", linebreak="al", unicodeslot=0x1D04C, }, [0x1D04D]={ category="so", description="BYZANTINE MUSICAL SYMBOL PELASTON NEO", direction="l", linebreak="al", unicodeslot=0x1D04D, }, [0x1D04E]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO", direction="l", linebreak="al", unicodeslot=0x1D04E, }, [0x1D04F]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO", direction="l", linebreak="al", unicodeslot=0x1D04F, }, [0x1D050]={ category="so", description="BYZANTINE MUSICAL SYMBOL YPSILI", direction="l", linebreak="al", unicodeslot=0x1D050, }, [0x1D051]={ category="so", description="BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO", direction="l", linebreak="al", unicodeslot=0x1D051, }, [0x1D052]={ category="so", description="BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO", direction="l", linebreak="al", unicodeslot=0x1D052, }, [0x1D053]={ category="so", description="BYZANTINE MUSICAL SYMBOL YPORROI", direction="l", linebreak="al", unicodeslot=0x1D053, }, [0x1D054]={ category="so", description="BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON", direction="l", linebreak="al", unicodeslot=0x1D054, }, [0x1D055]={ category="so", description="BYZANTINE MUSICAL SYMBOL ELAFRON", direction="l", linebreak="al", unicodeslot=0x1D055, }, [0x1D056]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHAMILI", direction="l", linebreak="al", unicodeslot=0x1D056, }, [0x1D057]={ category="so", description="BYZANTINE MUSICAL SYMBOL MIKRON ISON", direction="l", linebreak="al", unicodeslot=0x1D057, }, [0x1D058]={ category="so", description="BYZANTINE MUSICAL SYMBOL VAREIA NEO", direction="l", linebreak="al", unicodeslot=0x1D058, }, [0x1D059]={ category="so", description="BYZANTINE MUSICAL SYMBOL PIASMA NEO", direction="l", linebreak="al", unicodeslot=0x1D059, }, [0x1D05A]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSIFISTON NEO", direction="l", linebreak="al", unicodeslot=0x1D05A, }, [0x1D05B]={ category="so", description="BYZANTINE MUSICAL SYMBOL OMALON", direction="l", linebreak="al", unicodeslot=0x1D05B, }, [0x1D05C]={ category="so", description="BYZANTINE MUSICAL SYMBOL ANTIKENOMA", direction="l", linebreak="al", unicodeslot=0x1D05C, }, [0x1D05D]={ category="so", description="BYZANTINE MUSICAL SYMBOL LYGISMA", direction="l", linebreak="al", unicodeslot=0x1D05D, }, [0x1D05E]={ category="so", description="BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO", direction="l", linebreak="al", unicodeslot=0x1D05E, }, [0x1D05F]={ category="so", description="BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO", direction="l", linebreak="al", unicodeslot=0x1D05F, }, [0x1D060]={ category="so", description="BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA", direction="l", linebreak="al", unicodeslot=0x1D060, }, [0x1D061]={ category="so", description="BYZANTINE MUSICAL SYMBOL KYLISMA", direction="l", linebreak="al", unicodeslot=0x1D061, }, [0x1D062]={ category="so", description="BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA", direction="l", linebreak="al", unicodeslot=0x1D062, }, [0x1D063]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKON NEO", direction="l", linebreak="al", unicodeslot=0x1D063, }, [0x1D064]={ category="so", description="BYZANTINE MUSICAL SYMBOL EKSTREPTON", direction="l", linebreak="al", unicodeslot=0x1D064, }, [0x1D065]={ category="so", description="BYZANTINE MUSICAL SYMBOL SYNAGMA NEO", direction="l", linebreak="al", unicodeslot=0x1D065, }, [0x1D066]={ category="so", description="BYZANTINE MUSICAL SYMBOL SYRMA", direction="l", linebreak="al", unicodeslot=0x1D066, }, [0x1D067]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHOREVMA NEO", direction="l", linebreak="al", unicodeslot=0x1D067, }, [0x1D068]={ category="so", description="BYZANTINE MUSICAL SYMBOL EPEGERMA", direction="l", linebreak="al", unicodeslot=0x1D068, }, [0x1D069]={ category="so", description="BYZANTINE MUSICAL SYMBOL SEISMA NEO", direction="l", linebreak="al", unicodeslot=0x1D069, }, [0x1D06A]={ category="so", description="BYZANTINE MUSICAL SYMBOL XIRON KLASMA", direction="l", linebreak="al", unicodeslot=0x1D06A, }, [0x1D06B]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON", direction="l", linebreak="al", unicodeslot=0x1D06B, }, [0x1D06C]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA", direction="l", linebreak="al", unicodeslot=0x1D06C, }, [0x1D06D]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA", direction="l", linebreak="al", unicodeslot=0x1D06D, }, [0x1D06E]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA", direction="l", linebreak="al", unicodeslot=0x1D06E, }, [0x1D06F]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA", direction="l", linebreak="al", unicodeslot=0x1D06F, }, [0x1D070]={ category="so", description="BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA", direction="l", linebreak="al", unicodeslot=0x1D070, }, [0x1D071]={ category="so", description="BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA", direction="l", linebreak="al", unicodeslot=0x1D071, }, [0x1D072]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON", direction="l", linebreak="al", unicodeslot=0x1D072, }, [0x1D073]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON", direction="l", linebreak="al", unicodeslot=0x1D073, }, [0x1D074]={ category="so", description="BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON", direction="l", linebreak="al", unicodeslot=0x1D074, }, [0x1D075]={ category="so", description="BYZANTINE MUSICAL SYMBOL OYRANISMA NEO", direction="l", linebreak="al", unicodeslot=0x1D075, }, [0x1D076]={ category="so", description="BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO", direction="l", linebreak="al", unicodeslot=0x1D076, }, [0x1D077]={ category="so", description="BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO", direction="l", linebreak="al", unicodeslot=0x1D077, }, [0x1D078]={ category="so", description="BYZANTINE MUSICAL SYMBOL THEMA APLOUN", direction="l", linebreak="al", unicodeslot=0x1D078, }, [0x1D079]={ category="so", description="BYZANTINE MUSICAL SYMBOL THES KAI APOTHES", direction="l", linebreak="al", unicodeslot=0x1D079, }, [0x1D07A]={ category="so", description="BYZANTINE MUSICAL SYMBOL KATAVASMA", direction="l", linebreak="al", unicodeslot=0x1D07A, }, [0x1D07B]={ category="so", description="BYZANTINE MUSICAL SYMBOL ENDOFONON", direction="l", linebreak="al", unicodeslot=0x1D07B, }, [0x1D07C]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFEN KATO", direction="l", linebreak="al", unicodeslot=0x1D07C, }, [0x1D07D]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFEN ANO", direction="l", linebreak="al", unicodeslot=0x1D07D, }, [0x1D07E]={ category="so", description="BYZANTINE MUSICAL SYMBOL STAVROS", direction="l", linebreak="al", unicodeslot=0x1D07E, }, [0x1D07F]={ category="so", description="BYZANTINE MUSICAL SYMBOL KLASMA ANO", direction="l", linebreak="al", unicodeslot=0x1D07F, }, [0x1D080]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D080, }, [0x1D081]={ category="so", description="BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION", direction="l", linebreak="al", unicodeslot=0x1D081, }, [0x1D082]={ category="so", description="BYZANTINE MUSICAL SYMBOL KRATIMA ALLO", direction="l", linebreak="al", unicodeslot=0x1D082, }, [0x1D083]={ category="so", description="BYZANTINE MUSICAL SYMBOL KRATIMA NEO", direction="l", linebreak="al", unicodeslot=0x1D083, }, [0x1D084]={ category="so", description="BYZANTINE MUSICAL SYMBOL APODERMA NEO", direction="l", linebreak="al", unicodeslot=0x1D084, }, [0x1D085]={ category="so", description="BYZANTINE MUSICAL SYMBOL APLI", direction="l", linebreak="al", unicodeslot=0x1D085, }, [0x1D086]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIPLI", direction="l", linebreak="al", unicodeslot=0x1D086, }, [0x1D087]={ category="so", description="BYZANTINE MUSICAL SYMBOL TRIPLI", direction="l", linebreak="al", unicodeslot=0x1D087, }, [0x1D088]={ category="so", description="BYZANTINE MUSICAL SYMBOL TETRAPLI", direction="l", linebreak="al", unicodeslot=0x1D088, }, [0x1D089]={ category="so", description="BYZANTINE MUSICAL SYMBOL KORONIS", direction="l", linebreak="al", unicodeslot=0x1D089, }, [0x1D08A]={ category="so", description="BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU", direction="l", linebreak="al", unicodeslot=0x1D08A, }, [0x1D08B]={ category="so", description="BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON", direction="l", linebreak="al", unicodeslot=0x1D08B, }, [0x1D08C]={ category="so", description="BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON", direction="l", linebreak="al", unicodeslot=0x1D08C, }, [0x1D08D]={ category="so", description="BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON", direction="l", linebreak="al", unicodeslot=0x1D08D, }, [0x1D08E]={ category="so", description="BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU", direction="l", linebreak="al", unicodeslot=0x1D08E, }, [0x1D08F]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORGON NEO ANO", direction="l", linebreak="al", unicodeslot=0x1D08F, }, [0x1D090]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA", direction="l", linebreak="al", unicodeslot=0x1D090, }, [0x1D091]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA", direction="l", linebreak="al", unicodeslot=0x1D091, }, [0x1D092]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIGORGON", direction="l", linebreak="al", unicodeslot=0x1D092, }, [0x1D093]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO", direction="l", linebreak="al", unicodeslot=0x1D093, }, [0x1D094]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO", direction="l", linebreak="al", unicodeslot=0x1D094, }, [0x1D095]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA", direction="l", linebreak="al", unicodeslot=0x1D095, }, [0x1D096]={ category="so", description="BYZANTINE MUSICAL SYMBOL TRIGORGON", direction="l", linebreak="al", unicodeslot=0x1D096, }, [0x1D097]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARGON", direction="l", linebreak="al", unicodeslot=0x1D097, }, [0x1D098]={ category="so", description="BYZANTINE MUSICAL SYMBOL IMIDIARGON", direction="l", linebreak="al", unicodeslot=0x1D098, }, [0x1D099]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIARGON", direction="l", linebreak="al", unicodeslot=0x1D099, }, [0x1D09A]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI", direction="l", linebreak="al", unicodeslot=0x1D09A, }, [0x1D09B]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI", direction="l", linebreak="al", unicodeslot=0x1D09B, }, [0x1D09C]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI ARGI", direction="l", linebreak="al", unicodeslot=0x1D09C, }, [0x1D09D]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI METRIA", direction="l", linebreak="al", unicodeslot=0x1D09D, }, [0x1D09E]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI MESI", direction="l", linebreak="al", unicodeslot=0x1D09E, }, [0x1D09F]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI GORGI", direction="l", linebreak="al", unicodeslot=0x1D09F, }, [0x1D0A0]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI", direction="l", linebreak="al", unicodeslot=0x1D0A0, }, [0x1D0A1]={ category="so", description="BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI", direction="l", linebreak="al", unicodeslot=0x1D0A1, }, [0x1D0A2]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A2, }, [0x1D0A3]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A3, }, [0x1D0A4]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A4, }, [0x1D0A5]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A5, }, [0x1D0A6]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A6, }, [0x1D0A7]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS", direction="l", linebreak="al", unicodeslot=0x1D0A7, }, [0x1D0A8]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A8, }, [0x1D0A9]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0A9, }, [0x1D0AA]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0AA, }, [0x1D0AB]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0AB, }, [0x1D0AC]={ category="so", description="BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS", direction="l", linebreak="al", unicodeslot=0x1D0AC, }, [0x1D0AD]={ category="so", description="BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS", direction="l", linebreak="al", unicodeslot=0x1D0AD, }, [0x1D0AE]={ category="so", description="BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS", direction="l", linebreak="al", unicodeslot=0x1D0AE, }, [0x1D0AF]={ category="so", description="BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS", direction="l", linebreak="al", unicodeslot=0x1D0AF, }, [0x1D0B0]={ category="so", description="BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS", direction="l", linebreak="al", unicodeslot=0x1D0B0, }, [0x1D0B1]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0B1, }, [0x1D0B2]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0B2, }, [0x1D0B3]={ category="so", description="BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0B3, }, [0x1D0B4]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN", direction="l", linebreak="al", unicodeslot=0x1D0B4, }, [0x1D0B5]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN", direction="l", linebreak="al", unicodeslot=0x1D0B5, }, [0x1D0B6]={ category="so", description="BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU", direction="l", linebreak="al", unicodeslot=0x1D0B6, }, [0x1D0B7]={ category="so", description="BYZANTINE MUSICAL SYMBOL IMIFONON", direction="l", linebreak="al", unicodeslot=0x1D0B7, }, [0x1D0B8]={ category="so", description="BYZANTINE MUSICAL SYMBOL IMIFTHORON", direction="l", linebreak="al", unicodeslot=0x1D0B8, }, [0x1D0B9]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU", direction="l", linebreak="al", unicodeslot=0x1D0B9, }, [0x1D0BA]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA", direction="l", linebreak="al", unicodeslot=0x1D0BA, }, [0x1D0BB]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA", direction="l", linebreak="al", unicodeslot=0x1D0BB, }, [0x1D0BC]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS", direction="l", linebreak="al", unicodeslot=0x1D0BC, }, [0x1D0BD]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI", direction="l", linebreak="al", unicodeslot=0x1D0BD, }, [0x1D0BE]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI", direction="l", linebreak="al", unicodeslot=0x1D0BE, }, [0x1D0BF]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE", direction="l", linebreak="al", unicodeslot=0x1D0BF, }, [0x1D0C0]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO", direction="l", linebreak="al", unicodeslot=0x1D0C0, }, [0x1D0C1]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO", direction="l", linebreak="al", unicodeslot=0x1D0C1, }, [0x1D0C2]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO", direction="l", linebreak="al", unicodeslot=0x1D0C2, }, [0x1D0C3]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS", direction="l", linebreak="al", unicodeslot=0x1D0C3, }, [0x1D0C4]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS", direction="l", linebreak="al", unicodeslot=0x1D0C4, }, [0x1D0C5]={ category="so", description="BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS", direction="l", linebreak="al", unicodeslot=0x1D0C5, }, [0x1D0C6]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI", direction="l", linebreak="al", unicodeslot=0x1D0C6, }, [0x1D0C7]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA NENANO", direction="l", linebreak="al", unicodeslot=0x1D0C7, }, [0x1D0C8]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHROA ZYGOS", direction="l", linebreak="al", unicodeslot=0x1D0C8, }, [0x1D0C9]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHROA KLITON", direction="l", linebreak="al", unicodeslot=0x1D0C9, }, [0x1D0CA]={ category="so", description="BYZANTINE MUSICAL SYMBOL CHROA SPATHI", direction="l", linebreak="al", unicodeslot=0x1D0CA, }, [0x1D0CB]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION", direction="l", linebreak="al", unicodeslot=0x1D0CB, }, [0x1D0CC]={ category="so", description="BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA", direction="l", linebreak="al", unicodeslot=0x1D0CC, }, [0x1D0CD]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION", direction="l", linebreak="al", unicodeslot=0x1D0CD, }, [0x1D0CE]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION", direction="l", linebreak="al", unicodeslot=0x1D0CE, }, [0x1D0CF]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION", direction="l", linebreak="al", unicodeslot=0x1D0CF, }, [0x1D0D0]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D0, }, [0x1D0D1]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D1, }, [0x1D0D2]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D2, }, [0x1D0D3]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D3, }, [0x1D0D4]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D4, }, [0x1D0D5]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D5, }, [0x1D0D6]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D6, }, [0x1D0D7]={ category="so", description="BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA", direction="l", linebreak="al", unicodeslot=0x1D0D7, }, [0x1D0D8]={ category="so", description="BYZANTINE MUSICAL SYMBOL GENIKI DIESIS", direction="l", linebreak="al", unicodeslot=0x1D0D8, }, [0x1D0D9]={ category="so", description="BYZANTINE MUSICAL SYMBOL GENIKI YFESIS", direction="l", linebreak="al", unicodeslot=0x1D0D9, }, [0x1D0DA]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI", direction="l", linebreak="al", unicodeslot=0x1D0DA, }, [0x1D0DB]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI", direction="l", linebreak="al", unicodeslot=0x1D0DB, }, [0x1D0DC]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI", direction="l", linebreak="al", unicodeslot=0x1D0DC, }, [0x1D0DD]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS", direction="l", linebreak="al", unicodeslot=0x1D0DD, }, [0x1D0DE]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS", direction="l", linebreak="al", unicodeslot=0x1D0DE, }, [0x1D0DF]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU", direction="l", linebreak="al", unicodeslot=0x1D0DF, }, [0x1D0E0]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU", direction="l", linebreak="al", unicodeslot=0x1D0E0, }, [0x1D0E1]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU", direction="l", linebreak="al", unicodeslot=0x1D0E1, }, [0x1D0E2]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS", direction="l", linebreak="al", unicodeslot=0x1D0E2, }, [0x1D0E3]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU", direction="l", linebreak="al", unicodeslot=0x1D0E3, }, [0x1D0E4]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU", direction="l", linebreak="al", unicodeslot=0x1D0E4, }, [0x1D0E5]={ category="so", description="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU", direction="l", linebreak="al", unicodeslot=0x1D0E5, }, [0x1D0E6]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIGRAMMA GG", direction="l", linebreak="al", unicodeslot=0x1D0E6, }, [0x1D0E7]={ category="so", description="BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU", direction="l", linebreak="al", unicodeslot=0x1D0E7, }, [0x1D0E8]={ category="so", description="BYZANTINE MUSICAL SYMBOL STIGMA", direction="l", linebreak="al", unicodeslot=0x1D0E8, }, [0x1D0E9]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO PA", direction="l", linebreak="al", unicodeslot=0x1D0E9, }, [0x1D0EA]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO VOU", direction="l", linebreak="al", unicodeslot=0x1D0EA, }, [0x1D0EB]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO GA", direction="l", linebreak="al", unicodeslot=0x1D0EB, }, [0x1D0EC]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO DI", direction="l", linebreak="al", unicodeslot=0x1D0EC, }, [0x1D0ED]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO KE", direction="l", linebreak="al", unicodeslot=0x1D0ED, }, [0x1D0EE]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO ZO", direction="l", linebreak="al", unicodeslot=0x1D0EE, }, [0x1D0EF]={ category="so", description="BYZANTINE MUSICAL SYMBOL ARKTIKO NI", direction="l", linebreak="al", unicodeslot=0x1D0EF, }, [0x1D0F0]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO", direction="l", linebreak="al", unicodeslot=0x1D0F0, }, [0x1D0F1]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO", direction="l", linebreak="al", unicodeslot=0x1D0F1, }, [0x1D0F2]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO", direction="l", linebreak="al", unicodeslot=0x1D0F2, }, [0x1D0F3]={ category="so", description="BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO", direction="l", linebreak="al", unicodeslot=0x1D0F3, }, [0x1D0F4]={ category="so", description="BYZANTINE MUSICAL SYMBOL KLASMA KATO", direction="l", linebreak="al", unicodeslot=0x1D0F4, }, [0x1D0F5]={ category="so", description="BYZANTINE MUSICAL SYMBOL GORGON NEO KATO", direction="l", linebreak="al", unicodeslot=0x1D0F5, }, [0x1D100]={ category="so", description="MUSICAL SYMBOL SINGLE BARLINE", direction="l", linebreak="al", unicodeslot=0x1D100, }, [0x1D101]={ category="so", description="MUSICAL SYMBOL DOUBLE BARLINE", direction="l", linebreak="al", unicodeslot=0x1D101, }, [0x1D102]={ category="so", description="MUSICAL SYMBOL FINAL BARLINE", direction="l", linebreak="al", unicodeslot=0x1D102, }, [0x1D103]={ category="so", description="MUSICAL SYMBOL REVERSE FINAL BARLINE", direction="l", linebreak="al", unicodeslot=0x1D103, }, [0x1D104]={ category="so", description="MUSICAL SYMBOL DASHED BARLINE", direction="l", linebreak="al", unicodeslot=0x1D104, }, [0x1D105]={ category="so", description="MUSICAL SYMBOL SHORT BARLINE", direction="l", linebreak="al", unicodeslot=0x1D105, }, [0x1D106]={ category="so", description="MUSICAL SYMBOL LEFT REPEAT SIGN", direction="l", linebreak="al", unicodeslot=0x1D106, }, [0x1D107]={ category="so", description="MUSICAL SYMBOL RIGHT REPEAT SIGN", direction="l", linebreak="al", unicodeslot=0x1D107, }, [0x1D108]={ category="so", description="MUSICAL SYMBOL REPEAT DOTS", direction="l", linebreak="al", unicodeslot=0x1D108, }, [0x1D109]={ category="so", description="MUSICAL SYMBOL DAL SEGNO", direction="l", linebreak="al", unicodeslot=0x1D109, }, [0x1D10A]={ category="so", description="MUSICAL SYMBOL DA CAPO", direction="l", linebreak="al", unicodeslot=0x1D10A, }, [0x1D10B]={ category="so", description="MUSICAL SYMBOL SEGNO", direction="l", linebreak="al", unicodeslot=0x1D10B, }, [0x1D10C]={ category="so", description="MUSICAL SYMBOL CODA", direction="l", linebreak="al", unicodeslot=0x1D10C, }, [0x1D10D]={ category="so", description="MUSICAL SYMBOL REPEATED FIGURE-0x0001", direction="l", linebreak="al", unicodeslot=0x1D10D, }, [0x1D10E]={ category="so", description="MUSICAL SYMBOL REPEATED FIGURE-0x0002", direction="l", linebreak="al", unicodeslot=0x1D10E, }, [0x1D10F]={ category="so", description="MUSICAL SYMBOL REPEATED FIGURE-0x0003", direction="l", linebreak="al", unicodeslot=0x1D10F, }, [0x1D110]={ category="so", description="MUSICAL SYMBOL FERMATA", direction="l", linebreak="al", unicodeslot=0x1D110, }, [0x1D111]={ category="so", description="MUSICAL SYMBOL FERMATA BELOW", direction="l", linebreak="al", unicodeslot=0x1D111, }, [0x1D112]={ category="so", description="MUSICAL SYMBOL BREATH MARK", direction="l", linebreak="al", unicodeslot=0x1D112, }, [0x1D113]={ category="so", description="MUSICAL SYMBOL CAESURA", direction="l", linebreak="al", unicodeslot=0x1D113, }, [0x1D114]={ category="so", description="MUSICAL SYMBOL BRACE", direction="l", linebreak="al", unicodeslot=0x1D114, }, [0x1D115]={ category="so", description="MUSICAL SYMBOL BRACKET", direction="l", linebreak="al", unicodeslot=0x1D115, }, [0x1D116]={ category="so", description="MUSICAL SYMBOL ONE-LINE STAFF", direction="l", linebreak="al", unicodeslot=0x1D116, }, [0x1D117]={ category="so", description="MUSICAL SYMBOL TWO-LINE STAFF", direction="l", linebreak="al", unicodeslot=0x1D117, }, [0x1D118]={ category="so", description="MUSICAL SYMBOL THREE-LINE STAFF", direction="l", linebreak="al", unicodeslot=0x1D118, }, [0x1D119]={ category="so", description="MUSICAL SYMBOL FOUR-LINE STAFF", direction="l", linebreak="al", unicodeslot=0x1D119, }, [0x1D11A]={ category="so", description="MUSICAL SYMBOL FIVE-LINE STAFF", direction="l", linebreak="al", unicodeslot=0x1D11A, }, [0x1D11B]={ category="so", description="MUSICAL SYMBOL SIX-LINE STAFF", direction="l", linebreak="al", unicodeslot=0x1D11B, }, [0x1D11C]={ category="so", description="MUSICAL SYMBOL SIX-STRING FRETBOARD", direction="l", linebreak="al", unicodeslot=0x1D11C, }, [0x1D11D]={ category="so", description="MUSICAL SYMBOL FOUR-STRING FRETBOARD", direction="l", linebreak="al", unicodeslot=0x1D11D, }, [0x1D11E]={ category="so", description="MUSICAL SYMBOL G CLEF", direction="l", linebreak="al", unicodeslot=0x1D11E, }, [0x1D11F]={ category="so", description="MUSICAL SYMBOL G CLEF OTTAVA ALTA", direction="l", linebreak="al", unicodeslot=0x1D11F, }, [0x1D120]={ category="so", description="MUSICAL SYMBOL G CLEF OTTAVA BASSA", direction="l", linebreak="al", unicodeslot=0x1D120, }, [0x1D121]={ category="so", description="MUSICAL SYMBOL C CLEF", direction="l", linebreak="al", unicodeslot=0x1D121, }, [0x1D122]={ category="so", description="MUSICAL SYMBOL F CLEF", direction="l", linebreak="al", unicodeslot=0x1D122, }, [0x1D123]={ category="so", description="MUSICAL SYMBOL F CLEF OTTAVA ALTA", direction="l", linebreak="al", unicodeslot=0x1D123, }, [0x1D124]={ category="so", description="MUSICAL SYMBOL F CLEF OTTAVA BASSA", direction="l", linebreak="al", unicodeslot=0x1D124, }, [0x1D125]={ category="so", description="MUSICAL SYMBOL DRUM CLEF-0x0001", direction="l", linebreak="al", unicodeslot=0x1D125, }, [0x1D126]={ category="so", description="MUSICAL SYMBOL DRUM CLEF-0x0002", direction="l", linebreak="al", unicodeslot=0x1D126, }, [0x1D129]={ category="so", description="MUSICAL SYMBOL MULTIPLE MEASURE REST", direction="l", linebreak="al", unicodeslot=0x1D129, }, [0x1D12A]={ category="so", description="MUSICAL SYMBOL DOUBLE SHARP", direction="l", linebreak="al", unicodeslot=0x1D12A, }, [0x1D12B]={ category="so", description="MUSICAL SYMBOL DOUBLE FLAT", direction="l", linebreak="al", unicodeslot=0x1D12B, }, [0x1D12C]={ category="so", description="MUSICAL SYMBOL FLAT UP", direction="l", linebreak="al", unicodeslot=0x1D12C, }, [0x1D12D]={ category="so", description="MUSICAL SYMBOL FLAT DOWN", direction="l", linebreak="al", unicodeslot=0x1D12D, }, [0x1D12E]={ category="so", description="MUSICAL SYMBOL NATURAL UP", direction="l", linebreak="al", unicodeslot=0x1D12E, }, [0x1D12F]={ category="so", description="MUSICAL SYMBOL NATURAL DOWN", direction="l", linebreak="al", unicodeslot=0x1D12F, }, [0x1D130]={ category="so", description="MUSICAL SYMBOL SHARP UP", direction="l", linebreak="al", unicodeslot=0x1D130, }, [0x1D131]={ category="so", description="MUSICAL SYMBOL SHARP DOWN", direction="l", linebreak="al", unicodeslot=0x1D131, }, [0x1D132]={ category="so", description="MUSICAL SYMBOL QUARTER TONE SHARP", direction="l", linebreak="al", unicodeslot=0x1D132, }, [0x1D133]={ category="so", description="MUSICAL SYMBOL QUARTER TONE FLAT", direction="l", linebreak="al", unicodeslot=0x1D133, }, [0x1D134]={ category="so", description="MUSICAL SYMBOL COMMON TIME", direction="l", linebreak="al", unicodeslot=0x1D134, }, [0x1D135]={ category="so", description="MUSICAL SYMBOL CUT TIME", direction="l", linebreak="al", unicodeslot=0x1D135, }, [0x1D136]={ category="so", description="MUSICAL SYMBOL OTTAVA ALTA", direction="l", linebreak="al", unicodeslot=0x1D136, }, [0x1D137]={ category="so", description="MUSICAL SYMBOL OTTAVA BASSA", direction="l", linebreak="al", unicodeslot=0x1D137, }, [0x1D138]={ category="so", description="MUSICAL SYMBOL QUINDICESIMA ALTA", direction="l", linebreak="al", unicodeslot=0x1D138, }, [0x1D139]={ category="so", description="MUSICAL SYMBOL QUINDICESIMA BASSA", direction="l", linebreak="al", unicodeslot=0x1D139, }, [0x1D13A]={ category="so", description="MUSICAL SYMBOL MULTI REST", direction="l", linebreak="al", unicodeslot=0x1D13A, }, [0x1D13B]={ category="so", description="MUSICAL SYMBOL WHOLE REST", direction="l", linebreak="al", unicodeslot=0x1D13B, }, [0x1D13C]={ category="so", description="MUSICAL SYMBOL HALF REST", direction="l", linebreak="al", unicodeslot=0x1D13C, }, [0x1D13D]={ category="so", description="MUSICAL SYMBOL QUARTER REST", direction="l", linebreak="al", unicodeslot=0x1D13D, }, [0x1D13E]={ category="so", description="MUSICAL SYMBOL EIGHTH REST", direction="l", linebreak="al", unicodeslot=0x1D13E, }, [0x1D13F]={ category="so", description="MUSICAL SYMBOL SIXTEENTH REST", direction="l", linebreak="al", unicodeslot=0x1D13F, }, [0x1D140]={ category="so", description="MUSICAL SYMBOL THIRTY-SECOND REST", direction="l", linebreak="al", unicodeslot=0x1D140, }, [0x1D141]={ category="so", description="MUSICAL SYMBOL SIXTY-FOURTH REST", direction="l", linebreak="al", unicodeslot=0x1D141, }, [0x1D142]={ category="so", description="MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST", direction="l", linebreak="al", unicodeslot=0x1D142, }, [0x1D143]={ category="so", description="MUSICAL SYMBOL X NOTEHEAD", direction="l", linebreak="al", unicodeslot=0x1D143, }, [0x1D144]={ category="so", description="MUSICAL SYMBOL PLUS NOTEHEAD", direction="l", linebreak="al", unicodeslot=0x1D144, }, [0x1D145]={ category="so", description="MUSICAL SYMBOL CIRCLE X NOTEHEAD", direction="l", linebreak="al", unicodeslot=0x1D145, }, [0x1D146]={ category="so", description="MUSICAL SYMBOL SQUARE NOTEHEAD WHITE", direction="l", linebreak="al", unicodeslot=0x1D146, }, [0x1D147]={ category="so", description="MUSICAL SYMBOL SQUARE NOTEHEAD BLACK", direction="l", linebreak="al", unicodeslot=0x1D147, }, [0x1D148]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE", direction="l", linebreak="al", unicodeslot=0x1D148, }, [0x1D149]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK", direction="l", linebreak="al", unicodeslot=0x1D149, }, [0x1D14A]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE", direction="l", linebreak="al", unicodeslot=0x1D14A, }, [0x1D14B]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK", direction="l", linebreak="al", unicodeslot=0x1D14B, }, [0x1D14C]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE", direction="l", linebreak="al", unicodeslot=0x1D14C, }, [0x1D14D]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK", direction="l", linebreak="al", unicodeslot=0x1D14D, }, [0x1D14E]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE", direction="l", linebreak="al", unicodeslot=0x1D14E, }, [0x1D14F]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK", direction="l", linebreak="al", unicodeslot=0x1D14F, }, [0x1D150]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE", direction="l", linebreak="al", unicodeslot=0x1D150, }, [0x1D151]={ category="so", description="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK", direction="l", linebreak="al", unicodeslot=0x1D151, }, [0x1D152]={ category="so", description="MUSICAL SYMBOL MOON NOTEHEAD WHITE", direction="l", linebreak="al", unicodeslot=0x1D152, }, [0x1D153]={ category="so", description="MUSICAL SYMBOL MOON NOTEHEAD BLACK", direction="l", linebreak="al", unicodeslot=0x1D153, }, [0x1D154]={ category="so", description="MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE", direction="l", linebreak="al", unicodeslot=0x1D154, }, [0x1D155]={ category="so", description="MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK", direction="l", linebreak="al", unicodeslot=0x1D155, }, [0x1D156]={ category="so", description="MUSICAL SYMBOL PARENTHESIS NOTEHEAD", direction="l", linebreak="al", unicodeslot=0x1D156, }, [0x1D157]={ category="so", description="MUSICAL SYMBOL VOID NOTEHEAD", direction="l", linebreak="al", unicodeslot=0x1D157, }, [0x1D158]={ category="so", description="MUSICAL SYMBOL NOTEHEAD BLACK", direction="l", linebreak="al", unicodeslot=0x1D158, }, [0x1D159]={ category="so", description="MUSICAL SYMBOL NULL NOTEHEAD", direction="l", linebreak="al", unicodeslot=0x1D159, }, [0x1D15A]={ category="so", description="MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE", direction="l", linebreak="al", unicodeslot=0x1D15A, }, [0x1D15B]={ category="so", description="MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK", direction="l", linebreak="al", unicodeslot=0x1D15B, }, [0x1D15C]={ category="so", description="MUSICAL SYMBOL BREVE", direction="l", linebreak="al", unicodeslot=0x1D15C, }, [0x1D15D]={ category="so", description="MUSICAL SYMBOL WHOLE NOTE", direction="l", linebreak="al", unicodeslot=0x1D15D, }, [0x1D15E]={ category="so", description="MUSICAL SYMBOL HALF NOTE", direction="l", linebreak="al", specials={ "char", 0x1D157, 0x1D165 }, unicodeslot=0x1D15E, }, [0x1D15F]={ category="so", description="MUSICAL SYMBOL QUARTER NOTE", direction="l", linebreak="al", specials={ "char", 0x1D158, 0x1D165 }, unicodeslot=0x1D15F, }, [0x1D160]={ category="so", description="MUSICAL SYMBOL EIGHTH NOTE", direction="l", linebreak="al", specials={ "char", 0x1D15F, 0x1D16E }, unicodeslot=0x1D160, }, [0x1D161]={ category="so", description="MUSICAL SYMBOL SIXTEENTH NOTE", direction="l", linebreak="al", specials={ "char", 0x1D15F, 0x1D16F }, unicodeslot=0x1D161, }, [0x1D162]={ category="so", description="MUSICAL SYMBOL THIRTY-SECOND NOTE", direction="l", linebreak="al", specials={ "char", 0x1D15F, 0x1D170 }, unicodeslot=0x1D162, }, [0x1D163]={ category="so", description="MUSICAL SYMBOL SIXTY-FOURTH NOTE", direction="l", linebreak="al", specials={ "char", 0x1D15F, 0x1D171 }, unicodeslot=0x1D163, }, [0x1D164]={ category="so", description="MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE", direction="l", linebreak="al", specials={ "char", 0x1D15F, 0x1D172 }, unicodeslot=0x1D164, }, [0x1D165]={ category="mc", description="MUSICAL SYMBOL COMBINING STEM", direction="l", linebreak="cm", unicodeslot=0x1D165, }, [0x1D166]={ category="mc", description="MUSICAL SYMBOL COMBINING SPRECHGESANG STEM", direction="l", linebreak="cm", unicodeslot=0x1D166, }, [0x1D167]={ category="mn", description="MUSICAL SYMBOL COMBINING TREMOLO-0x0001", direction="nsm", linebreak="cm", unicodeslot=0x1D167, }, [0x1D168]={ category="mn", description="MUSICAL SYMBOL COMBINING TREMOLO-0x0002", direction="nsm", linebreak="cm", unicodeslot=0x1D168, }, [0x1D169]={ category="mn", description="MUSICAL SYMBOL COMBINING TREMOLO-0x0003", direction="nsm", linebreak="cm", unicodeslot=0x1D169, }, [0x1D16A]={ category="so", description="MUSICAL SYMBOL FINGERED TREMOLO-0x0001", direction="l", linebreak="al", unicodeslot=0x1D16A, }, [0x1D16B]={ category="so", description="MUSICAL SYMBOL FINGERED TREMOLO-0x0002", direction="l", linebreak="al", unicodeslot=0x1D16B, }, [0x1D16C]={ category="so", description="MUSICAL SYMBOL FINGERED TREMOLO-0x0003", direction="l", linebreak="al", unicodeslot=0x1D16C, }, [0x1D16D]={ category="mc", description="MUSICAL SYMBOL COMBINING AUGMENTATION DOT", direction="l", linebreak="cm", unicodeslot=0x1D16D, }, [0x1D16E]={ category="mc", description="MUSICAL SYMBOL COMBINING FLAG-0x0001", direction="l", linebreak="cm", unicodeslot=0x1D16E, }, [0x1D16F]={ category="mc", description="MUSICAL SYMBOL COMBINING FLAG-0x0002", direction="l", linebreak="cm", unicodeslot=0x1D16F, }, [0x1D170]={ category="mc", description="MUSICAL SYMBOL COMBINING FLAG-0x0003", direction="l", linebreak="cm", unicodeslot=0x1D170, }, [0x1D171]={ category="mc", description="MUSICAL SYMBOL COMBINING FLAG-0x0004", direction="l", linebreak="cm", unicodeslot=0x1D171, }, [0x1D172]={ category="mc", description="MUSICAL SYMBOL COMBINING FLAG-0x0005", direction="l", linebreak="cm", unicodeslot=0x1D172, }, [0x1D173]={ category="cf", description="MUSICAL SYMBOL BEGIN BEAM", direction="bn", linebreak="cm", unicodeslot=0x1D173, }, [0x1D174]={ category="cf", description="MUSICAL SYMBOL END BEAM", direction="bn", linebreak="cm", unicodeslot=0x1D174, }, [0x1D175]={ category="cf", description="MUSICAL SYMBOL BEGIN TIE", direction="bn", linebreak="cm", unicodeslot=0x1D175, }, [0x1D176]={ category="cf", description="MUSICAL SYMBOL END TIE", direction="bn", linebreak="cm", unicodeslot=0x1D176, }, [0x1D177]={ category="cf", description="MUSICAL SYMBOL BEGIN SLUR", direction="bn", linebreak="cm", unicodeslot=0x1D177, }, [0x1D178]={ category="cf", description="MUSICAL SYMBOL END SLUR", direction="bn", linebreak="cm", unicodeslot=0x1D178, }, [0x1D179]={ category="cf", description="MUSICAL SYMBOL BEGIN PHRASE", direction="bn", linebreak="cm", unicodeslot=0x1D179, }, [0x1D17A]={ category="cf", description="MUSICAL SYMBOL END PHRASE", direction="bn", linebreak="cm", unicodeslot=0x1D17A, }, [0x1D17B]={ category="mn", description="MUSICAL SYMBOL COMBINING ACCENT", direction="nsm", linebreak="cm", unicodeslot=0x1D17B, }, [0x1D17C]={ category="mn", description="MUSICAL SYMBOL COMBINING STACCATO", direction="nsm", linebreak="cm", unicodeslot=0x1D17C, }, [0x1D17D]={ category="mn", description="MUSICAL SYMBOL COMBINING TENUTO", direction="nsm", linebreak="cm", unicodeslot=0x1D17D, }, [0x1D17E]={ category="mn", description="MUSICAL SYMBOL COMBINING STACCATISSIMO", direction="nsm", linebreak="cm", unicodeslot=0x1D17E, }, [0x1D17F]={ category="mn", description="MUSICAL SYMBOL COMBINING MARCATO", direction="nsm", linebreak="cm", unicodeslot=0x1D17F, }, [0x1D180]={ category="mn", description="MUSICAL SYMBOL COMBINING MARCATO-STACCATO", direction="nsm", linebreak="cm", unicodeslot=0x1D180, }, [0x1D181]={ category="mn", description="MUSICAL SYMBOL COMBINING ACCENT-STACCATO", direction="nsm", linebreak="cm", unicodeslot=0x1D181, }, [0x1D182]={ category="mn", description="MUSICAL SYMBOL COMBINING LOURE", direction="nsm", linebreak="cm", unicodeslot=0x1D182, }, [0x1D183]={ category="so", description="MUSICAL SYMBOL ARPEGGIATO UP", direction="l", linebreak="al", unicodeslot=0x1D183, }, [0x1D184]={ category="so", description="MUSICAL SYMBOL ARPEGGIATO DOWN", direction="l", linebreak="al", unicodeslot=0x1D184, }, [0x1D185]={ category="mn", description="MUSICAL SYMBOL COMBINING DOIT", direction="nsm", linebreak="cm", unicodeslot=0x1D185, }, [0x1D186]={ category="mn", description="MUSICAL SYMBOL COMBINING RIP", direction="nsm", linebreak="cm", unicodeslot=0x1D186, }, [0x1D187]={ category="mn", description="MUSICAL SYMBOL COMBINING FLIP", direction="nsm", linebreak="cm", unicodeslot=0x1D187, }, [0x1D188]={ category="mn", description="MUSICAL SYMBOL COMBINING SMEAR", direction="nsm", linebreak="cm", unicodeslot=0x1D188, }, [0x1D189]={ category="mn", description="MUSICAL SYMBOL COMBINING BEND", direction="nsm", linebreak="cm", unicodeslot=0x1D189, }, [0x1D18A]={ category="mn", description="MUSICAL SYMBOL COMBINING DOUBLE TONGUE", direction="nsm", linebreak="cm", unicodeslot=0x1D18A, }, [0x1D18B]={ category="mn", description="MUSICAL SYMBOL COMBINING TRIPLE TONGUE", direction="nsm", linebreak="cm", unicodeslot=0x1D18B, }, [0x1D18C]={ category="so", description="MUSICAL SYMBOL RINFORZANDO", direction="l", linebreak="al", unicodeslot=0x1D18C, }, [0x1D18D]={ category="so", description="MUSICAL SYMBOL SUBITO", direction="l", linebreak="al", unicodeslot=0x1D18D, }, [0x1D18E]={ category="so", description="MUSICAL SYMBOL Z", direction="l", linebreak="al", unicodeslot=0x1D18E, }, [0x1D18F]={ category="so", description="MUSICAL SYMBOL PIANO", direction="l", linebreak="al", unicodeslot=0x1D18F, }, [0x1D190]={ category="so", description="MUSICAL SYMBOL MEZZO", direction="l", linebreak="al", unicodeslot=0x1D190, }, [0x1D191]={ category="so", description="MUSICAL SYMBOL FORTE", direction="l", linebreak="al", unicodeslot=0x1D191, }, [0x1D192]={ category="so", description="MUSICAL SYMBOL CRESCENDO", direction="l", linebreak="al", unicodeslot=0x1D192, }, [0x1D193]={ category="so", description="MUSICAL SYMBOL DECRESCENDO", direction="l", linebreak="al", unicodeslot=0x1D193, }, [0x1D194]={ category="so", description="MUSICAL SYMBOL GRACE NOTE SLASH", direction="l", linebreak="al", unicodeslot=0x1D194, }, [0x1D195]={ category="so", description="MUSICAL SYMBOL GRACE NOTE NO SLASH", direction="l", linebreak="al", unicodeslot=0x1D195, }, [0x1D196]={ category="so", description="MUSICAL SYMBOL TR", direction="l", linebreak="al", unicodeslot=0x1D196, }, [0x1D197]={ category="so", description="MUSICAL SYMBOL TURN", direction="l", linebreak="al", unicodeslot=0x1D197, }, [0x1D198]={ category="so", description="MUSICAL SYMBOL INVERTED TURN", direction="l", linebreak="al", unicodeslot=0x1D198, }, [0x1D199]={ category="so", description="MUSICAL SYMBOL TURN SLASH", direction="l", linebreak="al", unicodeslot=0x1D199, }, [0x1D19A]={ category="so", description="MUSICAL SYMBOL TURN UP", direction="l", linebreak="al", unicodeslot=0x1D19A, }, [0x1D19B]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0001", direction="l", linebreak="al", unicodeslot=0x1D19B, }, [0x1D19C]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0002", direction="l", linebreak="al", unicodeslot=0x1D19C, }, [0x1D19D]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0003", direction="l", linebreak="al", unicodeslot=0x1D19D, }, [0x1D19E]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0004", direction="l", linebreak="al", unicodeslot=0x1D19E, }, [0x1D19F]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0005", direction="l", linebreak="al", unicodeslot=0x1D19F, }, [0x1D1A0]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0006", direction="l", linebreak="al", unicodeslot=0x1D1A0, }, [0x1D1A1]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0007", direction="l", linebreak="al", unicodeslot=0x1D1A1, }, [0x1D1A2]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0008", direction="l", linebreak="al", unicodeslot=0x1D1A2, }, [0x1D1A3]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x0009", direction="l", linebreak="al", unicodeslot=0x1D1A3, }, [0x1D1A4]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x000A", direction="l", linebreak="al", unicodeslot=0x1D1A4, }, [0x1D1A5]={ category="so", description="MUSICAL SYMBOL ORNAMENT STROKE-0x000B", direction="l", linebreak="al", unicodeslot=0x1D1A5, }, [0x1D1A6]={ category="so", description="MUSICAL SYMBOL HAUPTSTIMME", direction="l", linebreak="al", unicodeslot=0x1D1A6, }, [0x1D1A7]={ category="so", description="MUSICAL SYMBOL NEBENSTIMME", direction="l", linebreak="al", unicodeslot=0x1D1A7, }, [0x1D1A8]={ category="so", description="MUSICAL SYMBOL END OF STIMME", direction="l", linebreak="al", unicodeslot=0x1D1A8, }, [0x1D1A9]={ category="so", description="MUSICAL SYMBOL DEGREE SLASH", direction="l", linebreak="al", unicodeslot=0x1D1A9, }, [0x1D1AA]={ category="mn", description="MUSICAL SYMBOL COMBINING DOWN BOW", direction="nsm", linebreak="cm", unicodeslot=0x1D1AA, }, [0x1D1AB]={ category="mn", description="MUSICAL SYMBOL COMBINING UP BOW", direction="nsm", linebreak="cm", unicodeslot=0x1D1AB, }, [0x1D1AC]={ category="mn", description="MUSICAL SYMBOL COMBINING HARMONIC", direction="nsm", linebreak="cm", unicodeslot=0x1D1AC, }, [0x1D1AD]={ category="mn", description="MUSICAL SYMBOL COMBINING SNAP PIZZICATO", direction="nsm", linebreak="cm", unicodeslot=0x1D1AD, }, [0x1D1AE]={ category="so", description="MUSICAL SYMBOL PEDAL MARK", direction="l", linebreak="al", unicodeslot=0x1D1AE, }, [0x1D1AF]={ category="so", description="MUSICAL SYMBOL PEDAL UP MARK", direction="l", linebreak="al", unicodeslot=0x1D1AF, }, [0x1D1B0]={ category="so", description="MUSICAL SYMBOL HALF PEDAL MARK", direction="l", linebreak="al", unicodeslot=0x1D1B0, }, [0x1D1B1]={ category="so", description="MUSICAL SYMBOL GLISSANDO UP", direction="l", linebreak="al", unicodeslot=0x1D1B1, }, [0x1D1B2]={ category="so", description="MUSICAL SYMBOL GLISSANDO DOWN", direction="l", linebreak="al", unicodeslot=0x1D1B2, }, [0x1D1B3]={ category="so", description="MUSICAL SYMBOL WITH FINGERNAILS", direction="l", linebreak="al", unicodeslot=0x1D1B3, }, [0x1D1B4]={ category="so", description="MUSICAL SYMBOL DAMP", direction="l", linebreak="al", unicodeslot=0x1D1B4, }, [0x1D1B5]={ category="so", description="MUSICAL SYMBOL DAMP ALL", direction="l", linebreak="al", unicodeslot=0x1D1B5, }, [0x1D1B6]={ category="so", description="MUSICAL SYMBOL MAXIMA", direction="l", linebreak="al", unicodeslot=0x1D1B6, }, [0x1D1B7]={ category="so", description="MUSICAL SYMBOL LONGA", direction="l", linebreak="al", unicodeslot=0x1D1B7, }, [0x1D1B8]={ category="so", description="MUSICAL SYMBOL BREVIS", direction="l", linebreak="al", unicodeslot=0x1D1B8, }, [0x1D1B9]={ category="so", description="MUSICAL SYMBOL SEMIBREVIS WHITE", direction="l", linebreak="al", unicodeslot=0x1D1B9, }, [0x1D1BA]={ category="so", description="MUSICAL SYMBOL SEMIBREVIS BLACK", direction="l", linebreak="al", unicodeslot=0x1D1BA, }, [0x1D1BB]={ category="so", description="MUSICAL SYMBOL MINIMA", direction="l", linebreak="al", specials={ "char", 0x1D1B9, 0x1D165 }, unicodeslot=0x1D1BB, }, [0x1D1BC]={ category="so", description="MUSICAL SYMBOL MINIMA BLACK", direction="l", linebreak="al", specials={ "char", 0x1D1BA, 0x1D165 }, unicodeslot=0x1D1BC, }, [0x1D1BD]={ category="so", description="MUSICAL SYMBOL SEMIMINIMA WHITE", direction="l", linebreak="al", specials={ "char", 0x1D1BB, 0x1D16E }, unicodeslot=0x1D1BD, }, [0x1D1BE]={ category="so", description="MUSICAL SYMBOL SEMIMINIMA BLACK", direction="l", linebreak="al", specials={ "char", 0x1D1BC, 0x1D16E }, unicodeslot=0x1D1BE, }, [0x1D1BF]={ category="so", description="MUSICAL SYMBOL FUSA WHITE", direction="l", linebreak="al", specials={ "char", 0x1D1BB, 0x1D16F }, unicodeslot=0x1D1BF, }, [0x1D1C0]={ category="so", description="MUSICAL SYMBOL FUSA BLACK", direction="l", linebreak="al", specials={ "char", 0x1D1BC, 0x1D16F }, unicodeslot=0x1D1C0, }, [0x1D1C1]={ category="so", description="MUSICAL SYMBOL LONGA PERFECTA REST", direction="l", linebreak="al", unicodeslot=0x1D1C1, }, [0x1D1C2]={ category="so", description="MUSICAL SYMBOL LONGA IMPERFECTA REST", direction="l", linebreak="al", unicodeslot=0x1D1C2, }, [0x1D1C3]={ category="so", description="MUSICAL SYMBOL BREVIS REST", direction="l", linebreak="al", unicodeslot=0x1D1C3, }, [0x1D1C4]={ category="so", description="MUSICAL SYMBOL SEMIBREVIS REST", direction="l", linebreak="al", unicodeslot=0x1D1C4, }, [0x1D1C5]={ category="so", description="MUSICAL SYMBOL MINIMA REST", direction="l", linebreak="al", unicodeslot=0x1D1C5, }, [0x1D1C6]={ category="so", description="MUSICAL SYMBOL SEMIMINIMA REST", direction="l", linebreak="al", unicodeslot=0x1D1C6, }, [0x1D1C7]={ category="so", description="MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA", direction="l", linebreak="al", unicodeslot=0x1D1C7, }, [0x1D1C8]={ category="so", description="MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA", direction="l", linebreak="al", unicodeslot=0x1D1C8, }, [0x1D1C9]={ category="so", description="MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-0x0001", direction="l", linebreak="al", unicodeslot=0x1D1C9, }, [0x1D1CA]={ category="so", description="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA", direction="l", linebreak="al", unicodeslot=0x1D1CA, }, [0x1D1CB]={ category="so", description="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA", direction="l", linebreak="al", unicodeslot=0x1D1CB, }, [0x1D1CC]={ category="so", description="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-0x0001", direction="l", linebreak="al", unicodeslot=0x1D1CC, }, [0x1D1CD]={ category="so", description="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-0x0002", direction="l", linebreak="al", unicodeslot=0x1D1CD, }, [0x1D1CE]={ category="so", description="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-0x0003", direction="l", linebreak="al", unicodeslot=0x1D1CE, }, [0x1D1CF]={ category="so", description="MUSICAL SYMBOL CROIX", direction="l", linebreak="al", unicodeslot=0x1D1CF, }, [0x1D1D0]={ category="so", description="MUSICAL SYMBOL GREGORIAN C CLEF", direction="l", linebreak="al", unicodeslot=0x1D1D0, }, [0x1D1D1]={ category="so", description="MUSICAL SYMBOL GREGORIAN F CLEF", direction="l", linebreak="al", unicodeslot=0x1D1D1, }, [0x1D1D2]={ category="so", description="MUSICAL SYMBOL SQUARE B", direction="l", linebreak="al", unicodeslot=0x1D1D2, }, [0x1D1D3]={ category="so", description="MUSICAL SYMBOL VIRGA", direction="l", linebreak="al", unicodeslot=0x1D1D3, }, [0x1D1D4]={ category="so", description="MUSICAL SYMBOL PODATUS", direction="l", linebreak="al", unicodeslot=0x1D1D4, }, [0x1D1D5]={ category="so", description="MUSICAL SYMBOL CLIVIS", direction="l", linebreak="al", unicodeslot=0x1D1D5, }, [0x1D1D6]={ category="so", description="MUSICAL SYMBOL SCANDICUS", direction="l", linebreak="al", unicodeslot=0x1D1D6, }, [0x1D1D7]={ category="so", description="MUSICAL SYMBOL CLIMACUS", direction="l", linebreak="al", unicodeslot=0x1D1D7, }, [0x1D1D8]={ category="so", description="MUSICAL SYMBOL TORCULUS", direction="l", linebreak="al", unicodeslot=0x1D1D8, }, [0x1D1D9]={ category="so", description="MUSICAL SYMBOL PORRECTUS", direction="l", linebreak="al", unicodeslot=0x1D1D9, }, [0x1D1DA]={ category="so", description="MUSICAL SYMBOL PORRECTUS FLEXUS", direction="l", linebreak="al", unicodeslot=0x1D1DA, }, [0x1D1DB]={ category="so", description="MUSICAL SYMBOL SCANDICUS FLEXUS", direction="l", linebreak="al", unicodeslot=0x1D1DB, }, [0x1D1DC]={ category="so", description="MUSICAL SYMBOL TORCULUS RESUPINUS", direction="l", linebreak="al", unicodeslot=0x1D1DC, }, [0x1D1DD]={ category="so", description="MUSICAL SYMBOL PES SUBPUNCTIS", direction="l", linebreak="al", unicodeslot=0x1D1DD, }, [0x1D200]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0001", direction="on", linebreak="al", unicodeslot=0x1D200, }, [0x1D201]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0002", direction="on", linebreak="al", unicodeslot=0x1D201, }, [0x1D202]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0003", direction="on", linebreak="al", unicodeslot=0x1D202, }, [0x1D203]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0004", direction="on", linebreak="al", unicodeslot=0x1D203, }, [0x1D204]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0005", direction="on", linebreak="al", unicodeslot=0x1D204, }, [0x1D205]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0006", direction="on", linebreak="al", unicodeslot=0x1D205, }, [0x1D206]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0007", direction="on", linebreak="al", unicodeslot=0x1D206, }, [0x1D207]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0008", direction="on", linebreak="al", unicodeslot=0x1D207, }, [0x1D208]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0009", direction="on", linebreak="al", unicodeslot=0x1D208, }, [0x1D209]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x000A", direction="on", linebreak="al", unicodeslot=0x1D209, }, [0x1D20A]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x000B", direction="on", linebreak="al", unicodeslot=0x1D20A, }, [0x1D20B]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x000C", direction="on", linebreak="al", unicodeslot=0x1D20B, }, [0x1D20C]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x000D", direction="on", linebreak="al", unicodeslot=0x1D20C, }, [0x1D20D]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x000E", direction="on", linebreak="al", unicodeslot=0x1D20D, }, [0x1D20E]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x000F", direction="on", linebreak="al", unicodeslot=0x1D20E, }, [0x1D20F]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0010", direction="on", linebreak="al", unicodeslot=0x1D20F, }, [0x1D210]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0011", direction="on", linebreak="al", unicodeslot=0x1D210, }, [0x1D211]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0012", direction="on", linebreak="al", unicodeslot=0x1D211, }, [0x1D212]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0013", direction="on", linebreak="al", unicodeslot=0x1D212, }, [0x1D213]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0014", direction="on", linebreak="al", unicodeslot=0x1D213, }, [0x1D214]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0015", direction="on", linebreak="al", unicodeslot=0x1D214, }, [0x1D215]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0016", direction="on", linebreak="al", unicodeslot=0x1D215, }, [0x1D216]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0017", direction="on", linebreak="al", unicodeslot=0x1D216, }, [0x1D217]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0018", direction="on", linebreak="al", unicodeslot=0x1D217, }, [0x1D218]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0032", direction="on", linebreak="al", unicodeslot=0x1D218, }, [0x1D219]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0033", direction="on", linebreak="al", unicodeslot=0x1D219, }, [0x1D21A]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0034", direction="on", linebreak="al", unicodeslot=0x1D21A, }, [0x1D21B]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0035", direction="on", linebreak="al", unicodeslot=0x1D21B, }, [0x1D21C]={ category="so", description="GREEK VOCAL NOTATION SYMBOL-0x0036", direction="on", linebreak="al", unicodeslot=0x1D21C, }, [0x1D21D]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0001", direction="on", linebreak="al", unicodeslot=0x1D21D, }, [0x1D21E]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0002", direction="on", linebreak="al", unicodeslot=0x1D21E, }, [0x1D21F]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0004", direction="on", linebreak="al", unicodeslot=0x1D21F, }, [0x1D220]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0005", direction="on", linebreak="al", unicodeslot=0x1D220, }, [0x1D221]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0007", direction="on", linebreak="al", unicodeslot=0x1D221, }, [0x1D222]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0008", direction="on", linebreak="al", unicodeslot=0x1D222, }, [0x1D223]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000B", direction="on", linebreak="al", unicodeslot=0x1D223, }, [0x1D224]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000C", direction="on", linebreak="al", unicodeslot=0x1D224, }, [0x1D225]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000D", direction="on", linebreak="al", unicodeslot=0x1D225, }, [0x1D226]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000E", direction="on", linebreak="al", unicodeslot=0x1D226, }, [0x1D227]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0011", direction="on", linebreak="al", unicodeslot=0x1D227, }, [0x1D228]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0012", direction="on", linebreak="al", unicodeslot=0x1D228, }, [0x1D229]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0013", direction="on", linebreak="al", unicodeslot=0x1D229, }, [0x1D22A]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0017", direction="on", linebreak="al", unicodeslot=0x1D22A, }, [0x1D22B]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0018", direction="on", linebreak="al", unicodeslot=0x1D22B, }, [0x1D22C]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0019", direction="on", linebreak="al", unicodeslot=0x1D22C, }, [0x1D22D]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001A", direction="on", linebreak="al", unicodeslot=0x1D22D, }, [0x1D22E]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001B", direction="on", linebreak="al", unicodeslot=0x1D22E, }, [0x1D22F]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001D", direction="on", linebreak="al", unicodeslot=0x1D22F, }, [0x1D230]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001E", direction="on", linebreak="al", unicodeslot=0x1D230, }, [0x1D231]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0020", direction="on", linebreak="al", unicodeslot=0x1D231, }, [0x1D232]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0024", direction="on", linebreak="al", unicodeslot=0x1D232, }, [0x1D233]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0025", direction="on", linebreak="al", unicodeslot=0x1D233, }, [0x1D234]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0026", direction="on", linebreak="al", unicodeslot=0x1D234, }, [0x1D235]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0027", direction="on", linebreak="al", unicodeslot=0x1D235, }, [0x1D236]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0028", direction="on", linebreak="al", unicodeslot=0x1D236, }, [0x1D237]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002A", direction="on", linebreak="al", unicodeslot=0x1D237, }, [0x1D238]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002B", direction="on", linebreak="al", unicodeslot=0x1D238, }, [0x1D239]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002D", direction="on", linebreak="al", unicodeslot=0x1D239, }, [0x1D23A]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002F", direction="on", linebreak="al", unicodeslot=0x1D23A, }, [0x1D23B]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0030", direction="on", linebreak="al", unicodeslot=0x1D23B, }, [0x1D23C]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0031", direction="on", linebreak="al", unicodeslot=0x1D23C, }, [0x1D23D]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0032", direction="on", linebreak="al", unicodeslot=0x1D23D, }, [0x1D23E]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0033", direction="on", linebreak="al", unicodeslot=0x1D23E, }, [0x1D23F]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0034", direction="on", linebreak="al", unicodeslot=0x1D23F, }, [0x1D240]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0035", direction="on", linebreak="al", unicodeslot=0x1D240, }, [0x1D241]={ category="so", description="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0036", direction="on", linebreak="al", unicodeslot=0x1D241, }, [0x1D242]={ category="mn", description="COMBINING GREEK MUSICAL TRISEME", direction="nsm", linebreak="cm", unicodeslot=0x1D242, }, [0x1D243]={ category="mn", description="COMBINING GREEK MUSICAL TETRASEME", direction="nsm", linebreak="cm", unicodeslot=0x1D243, }, [0x1D244]={ category="mn", description="COMBINING GREEK MUSICAL PENTASEME", direction="nsm", linebreak="cm", unicodeslot=0x1D244, }, [0x1D245]={ category="so", description="GREEK MUSICAL LEIMMA", direction="on", linebreak="al", unicodeslot=0x1D245, }, [0x1D300]={ category="so", description="MONOGRAM FOR EARTH", direction="on", linebreak="al", unicodeslot=0x1D300, }, [0x1D301]={ category="so", description="DIGRAM FOR HEAVENLY EARTH", direction="on", linebreak="al", unicodeslot=0x1D301, }, [0x1D302]={ category="so", description="DIGRAM FOR HUMAN EARTH", direction="on", linebreak="al", unicodeslot=0x1D302, }, [0x1D303]={ category="so", description="DIGRAM FOR EARTHLY HEAVEN", direction="on", linebreak="al", unicodeslot=0x1D303, }, [0x1D304]={ category="so", description="DIGRAM FOR EARTHLY HUMAN", direction="on", linebreak="al", unicodeslot=0x1D304, }, [0x1D305]={ category="so", description="DIGRAM FOR EARTH", direction="on", linebreak="al", unicodeslot=0x1D305, }, [0x1D306]={ category="so", description="TETRAGRAM FOR CENTRE", direction="on", linebreak="al", unicodeslot=0x1D306, }, [0x1D307]={ category="so", description="TETRAGRAM FOR FULL CIRCLE", direction="on", linebreak="al", unicodeslot=0x1D307, }, [0x1D308]={ category="so", description="TETRAGRAM FOR MIRED", direction="on", linebreak="al", unicodeslot=0x1D308, }, [0x1D309]={ category="so", description="TETRAGRAM FOR BARRIER", direction="on", linebreak="al", unicodeslot=0x1D309, }, [0x1D30A]={ category="so", description="TETRAGRAM FOR KEEPING SMALL", direction="on", linebreak="al", unicodeslot=0x1D30A, }, [0x1D30B]={ category="so", description="TETRAGRAM FOR CONTRARIETY", direction="on", linebreak="al", unicodeslot=0x1D30B, }, [0x1D30C]={ category="so", description="TETRAGRAM FOR ASCENT", direction="on", linebreak="al", unicodeslot=0x1D30C, }, [0x1D30D]={ category="so", description="TETRAGRAM FOR OPPOSITION", direction="on", linebreak="al", unicodeslot=0x1D30D, }, [0x1D30E]={ category="so", description="TETRAGRAM FOR BRANCHING OUT", direction="on", linebreak="al", unicodeslot=0x1D30E, }, [0x1D30F]={ category="so", description="TETRAGRAM FOR DEFECTIVENESS OR DISTORTION", direction="on", linebreak="al", unicodeslot=0x1D30F, }, [0x1D310]={ category="so", description="TETRAGRAM FOR DIVERGENCE", direction="on", linebreak="al", unicodeslot=0x1D310, }, [0x1D311]={ category="so", description="TETRAGRAM FOR YOUTHFULNESS", direction="on", linebreak="al", unicodeslot=0x1D311, }, [0x1D312]={ category="so", description="TETRAGRAM FOR INCREASE", direction="on", linebreak="al", unicodeslot=0x1D312, }, [0x1D313]={ category="so", description="TETRAGRAM FOR PENETRATION", direction="on", linebreak="al", unicodeslot=0x1D313, }, [0x1D314]={ category="so", description="TETRAGRAM FOR REACH", direction="on", linebreak="al", unicodeslot=0x1D314, }, [0x1D315]={ category="so", description="TETRAGRAM FOR CONTACT", direction="on", linebreak="al", unicodeslot=0x1D315, }, [0x1D316]={ category="so", description="TETRAGRAM FOR HOLDING BACK", direction="on", linebreak="al", unicodeslot=0x1D316, }, [0x1D317]={ category="so", description="TETRAGRAM FOR WAITING", direction="on", linebreak="al", unicodeslot=0x1D317, }, [0x1D318]={ category="so", description="TETRAGRAM FOR FOLLOWING", direction="on", linebreak="al", unicodeslot=0x1D318, }, [0x1D319]={ category="so", description="TETRAGRAM FOR ADVANCE", direction="on", linebreak="al", unicodeslot=0x1D319, }, [0x1D31A]={ category="so", description="TETRAGRAM FOR RELEASE", direction="on", linebreak="al", unicodeslot=0x1D31A, }, [0x1D31B]={ category="so", description="TETRAGRAM FOR RESISTANCE", direction="on", linebreak="al", unicodeslot=0x1D31B, }, [0x1D31C]={ category="so", description="TETRAGRAM FOR EASE", direction="on", linebreak="al", unicodeslot=0x1D31C, }, [0x1D31D]={ category="so", description="TETRAGRAM FOR JOY", direction="on", linebreak="al", unicodeslot=0x1D31D, }, [0x1D31E]={ category="so", description="TETRAGRAM FOR CONTENTION", direction="on", linebreak="al", unicodeslot=0x1D31E, }, [0x1D31F]={ category="so", description="TETRAGRAM FOR ENDEAVOUR", direction="on", linebreak="al", unicodeslot=0x1D31F, }, [0x1D320]={ category="so", description="TETRAGRAM FOR DUTIES", direction="on", linebreak="al", unicodeslot=0x1D320, }, [0x1D321]={ category="so", description="TETRAGRAM FOR CHANGE", direction="on", linebreak="al", unicodeslot=0x1D321, }, [0x1D322]={ category="so", description="TETRAGRAM FOR DECISIVENESS", direction="on", linebreak="al", unicodeslot=0x1D322, }, [0x1D323]={ category="so", description="TETRAGRAM FOR BOLD RESOLUTION", direction="on", linebreak="al", unicodeslot=0x1D323, }, [0x1D324]={ category="so", description="TETRAGRAM FOR PACKING", direction="on", linebreak="al", unicodeslot=0x1D324, }, [0x1D325]={ category="so", description="TETRAGRAM FOR LEGION", direction="on", linebreak="al", unicodeslot=0x1D325, }, [0x1D326]={ category="so", description="TETRAGRAM FOR CLOSENESS", direction="on", linebreak="al", unicodeslot=0x1D326, }, [0x1D327]={ category="so", description="TETRAGRAM FOR KINSHIP", direction="on", linebreak="al", unicodeslot=0x1D327, }, [0x1D328]={ category="so", description="TETRAGRAM FOR GATHERING", direction="on", linebreak="al", unicodeslot=0x1D328, }, [0x1D329]={ category="so", description="TETRAGRAM FOR STRENGTH", direction="on", linebreak="al", unicodeslot=0x1D329, }, [0x1D32A]={ category="so", description="TETRAGRAM FOR PURITY", direction="on", linebreak="al", unicodeslot=0x1D32A, }, [0x1D32B]={ category="so", description="TETRAGRAM FOR FULLNESS", direction="on", linebreak="al", unicodeslot=0x1D32B, }, [0x1D32C]={ category="so", description="TETRAGRAM FOR RESIDENCE", direction="on", linebreak="al", unicodeslot=0x1D32C, }, [0x1D32D]={ category="so", description="TETRAGRAM FOR LAW OR MODEL", direction="on", linebreak="al", unicodeslot=0x1D32D, }, [0x1D32E]={ category="so", description="TETRAGRAM FOR RESPONSE", direction="on", linebreak="al", unicodeslot=0x1D32E, }, [0x1D32F]={ category="so", description="TETRAGRAM FOR GOING TO MEET", direction="on", linebreak="al", unicodeslot=0x1D32F, }, [0x1D330]={ category="so", description="TETRAGRAM FOR ENCOUNTERS", direction="on", linebreak="al", unicodeslot=0x1D330, }, [0x1D331]={ category="so", description="TETRAGRAM FOR STOVE", direction="on", linebreak="al", unicodeslot=0x1D331, }, [0x1D332]={ category="so", description="TETRAGRAM FOR GREATNESS", direction="on", linebreak="al", unicodeslot=0x1D332, }, [0x1D333]={ category="so", description="TETRAGRAM FOR ENLARGEMENT", direction="on", linebreak="al", unicodeslot=0x1D333, }, [0x1D334]={ category="so", description="TETRAGRAM FOR PATTERN", direction="on", linebreak="al", unicodeslot=0x1D334, }, [0x1D335]={ category="so", description="TETRAGRAM FOR RITUAL", direction="on", linebreak="al", unicodeslot=0x1D335, }, [0x1D336]={ category="so", description="TETRAGRAM FOR FLIGHT", direction="on", linebreak="al", unicodeslot=0x1D336, }, [0x1D337]={ category="so", description="TETRAGRAM FOR VASTNESS OR WASTING", direction="on", linebreak="al", unicodeslot=0x1D337, }, [0x1D338]={ category="so", description="TETRAGRAM FOR CONSTANCY", direction="on", linebreak="al", unicodeslot=0x1D338, }, [0x1D339]={ category="so", description="TETRAGRAM FOR MEASURE", direction="on", linebreak="al", unicodeslot=0x1D339, }, [0x1D33A]={ category="so", description="TETRAGRAM FOR ETERNITY", direction="on", linebreak="al", unicodeslot=0x1D33A, }, [0x1D33B]={ category="so", description="TETRAGRAM FOR UNITY", direction="on", linebreak="al", unicodeslot=0x1D33B, }, [0x1D33C]={ category="so", description="TETRAGRAM FOR DIMINISHMENT", direction="on", linebreak="al", unicodeslot=0x1D33C, }, [0x1D33D]={ category="so", description="TETRAGRAM FOR CLOSED MOUTH", direction="on", linebreak="al", unicodeslot=0x1D33D, }, [0x1D33E]={ category="so", description="TETRAGRAM FOR GUARDEDNESS", direction="on", linebreak="al", unicodeslot=0x1D33E, }, [0x1D33F]={ category="so", description="TETRAGRAM FOR GATHERING IN", direction="on", linebreak="al", unicodeslot=0x1D33F, }, [0x1D340]={ category="so", description="TETRAGRAM FOR MASSING", direction="on", linebreak="al", unicodeslot=0x1D340, }, [0x1D341]={ category="so", description="TETRAGRAM FOR ACCUMULATION", direction="on", linebreak="al", unicodeslot=0x1D341, }, [0x1D342]={ category="so", description="TETRAGRAM FOR EMBELLISHMENT", direction="on", linebreak="al", unicodeslot=0x1D342, }, [0x1D343]={ category="so", description="TETRAGRAM FOR DOUBT", direction="on", linebreak="al", unicodeslot=0x1D343, }, [0x1D344]={ category="so", description="TETRAGRAM FOR WATCH", direction="on", linebreak="al", unicodeslot=0x1D344, }, [0x1D345]={ category="so", description="TETRAGRAM FOR SINKING", direction="on", linebreak="al", unicodeslot=0x1D345, }, [0x1D346]={ category="so", description="TETRAGRAM FOR INNER", direction="on", linebreak="al", unicodeslot=0x1D346, }, [0x1D347]={ category="so", description="TETRAGRAM FOR DEPARTURE", direction="on", linebreak="al", unicodeslot=0x1D347, }, [0x1D348]={ category="so", description="TETRAGRAM FOR DARKENING", direction="on", linebreak="al", unicodeslot=0x1D348, }, [0x1D349]={ category="so", description="TETRAGRAM FOR DIMMING", direction="on", linebreak="al", unicodeslot=0x1D349, }, [0x1D34A]={ category="so", description="TETRAGRAM FOR EXHAUSTION", direction="on", linebreak="al", unicodeslot=0x1D34A, }, [0x1D34B]={ category="so", description="TETRAGRAM FOR SEVERANCE", direction="on", linebreak="al", unicodeslot=0x1D34B, }, [0x1D34C]={ category="so", description="TETRAGRAM FOR STOPPAGE", direction="on", linebreak="al", unicodeslot=0x1D34C, }, [0x1D34D]={ category="so", description="TETRAGRAM FOR HARDNESS", direction="on", linebreak="al", unicodeslot=0x1D34D, }, [0x1D34E]={ category="so", description="TETRAGRAM FOR COMPLETION", direction="on", linebreak="al", unicodeslot=0x1D34E, }, [0x1D34F]={ category="so", description="TETRAGRAM FOR CLOSURE", direction="on", linebreak="al", unicodeslot=0x1D34F, }, [0x1D350]={ category="so", description="TETRAGRAM FOR FAILURE", direction="on", linebreak="al", unicodeslot=0x1D350, }, [0x1D351]={ category="so", description="TETRAGRAM FOR AGGRAVATION", direction="on", linebreak="al", unicodeslot=0x1D351, }, [0x1D352]={ category="so", description="TETRAGRAM FOR COMPLIANCE", direction="on", linebreak="al", unicodeslot=0x1D352, }, [0x1D353]={ category="so", description="TETRAGRAM FOR ON THE VERGE", direction="on", linebreak="al", unicodeslot=0x1D353, }, [0x1D354]={ category="so", description="TETRAGRAM FOR DIFFICULTIES", direction="on", linebreak="al", unicodeslot=0x1D354, }, [0x1D355]={ category="so", description="TETRAGRAM FOR LABOURING", direction="on", linebreak="al", unicodeslot=0x1D355, }, [0x1D356]={ category="so", description="TETRAGRAM FOR FOSTERING", direction="on", linebreak="al", unicodeslot=0x1D356, }, [0x1D360]={ category="no", description="COUNTING ROD UNIT DIGIT ONE", direction="l", linebreak="al", unicodeslot=0x1D360, }, [0x1D361]={ category="no", description="COUNTING ROD UNIT DIGIT TWO", direction="l", linebreak="al", unicodeslot=0x1D361, }, [0x1D362]={ category="no", description="COUNTING ROD UNIT DIGIT THREE", direction="l", linebreak="al", unicodeslot=0x1D362, }, [0x1D363]={ category="no", description="COUNTING ROD UNIT DIGIT FOUR", direction="l", linebreak="al", unicodeslot=0x1D363, }, [0x1D364]={ category="no", description="COUNTING ROD UNIT DIGIT FIVE", direction="l", linebreak="al", unicodeslot=0x1D364, }, [0x1D365]={ category="no", description="COUNTING ROD UNIT DIGIT SIX", direction="l", linebreak="al", unicodeslot=0x1D365, }, [0x1D366]={ category="no", description="COUNTING ROD UNIT DIGIT SEVEN", direction="l", linebreak="al", unicodeslot=0x1D366, }, [0x1D367]={ category="no", description="COUNTING ROD UNIT DIGIT EIGHT", direction="l", linebreak="al", unicodeslot=0x1D367, }, [0x1D368]={ category="no", description="COUNTING ROD UNIT DIGIT NINE", direction="l", linebreak="al", unicodeslot=0x1D368, }, [0x1D369]={ category="no", description="COUNTING ROD TENS DIGIT ONE", direction="l", linebreak="al", unicodeslot=0x1D369, }, [0x1D36A]={ category="no", description="COUNTING ROD TENS DIGIT TWO", direction="l", linebreak="al", unicodeslot=0x1D36A, }, [0x1D36B]={ category="no", description="COUNTING ROD TENS DIGIT THREE", direction="l", linebreak="al", unicodeslot=0x1D36B, }, [0x1D36C]={ category="no", description="COUNTING ROD TENS DIGIT FOUR", direction="l", linebreak="al", unicodeslot=0x1D36C, }, [0x1D36D]={ category="no", description="COUNTING ROD TENS DIGIT FIVE", direction="l", linebreak="al", unicodeslot=0x1D36D, }, [0x1D36E]={ category="no", description="COUNTING ROD TENS DIGIT SIX", direction="l", linebreak="al", unicodeslot=0x1D36E, }, [0x1D36F]={ category="no", description="COUNTING ROD TENS DIGIT SEVEN", direction="l", linebreak="al", unicodeslot=0x1D36F, }, [0x1D370]={ category="no", description="COUNTING ROD TENS DIGIT EIGHT", direction="l", linebreak="al", unicodeslot=0x1D370, }, [0x1D371]={ category="no", description="COUNTING ROD TENS DIGIT NINE", direction="l", linebreak="al", unicodeslot=0x1D371, }, [0x1D400]={ category="lu", description="MATHEMATICAL BOLD CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D400, visual="bf", }, [0x1D401]={ category="lu", description="MATHEMATICAL BOLD CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D401, visual="bf", }, [0x1D402]={ category="lu", description="MATHEMATICAL BOLD CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D402, visual="bf", }, [0x1D403]={ category="lu", description="MATHEMATICAL BOLD CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D403, visual="bf", }, [0x1D404]={ category="lu", description="MATHEMATICAL BOLD CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D404, visual="bf", }, [0x1D405]={ category="lu", description="MATHEMATICAL BOLD CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D405, visual="bf", }, [0x1D406]={ category="lu", description="MATHEMATICAL BOLD CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D406, visual="bf", }, [0x1D407]={ category="lu", description="MATHEMATICAL BOLD CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D407, visual="bf", }, [0x1D408]={ category="lu", description="MATHEMATICAL BOLD CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D408, visual="bf", }, [0x1D409]={ category="lu", description="MATHEMATICAL BOLD CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D409, visual="bf", }, [0x1D40A]={ category="lu", description="MATHEMATICAL BOLD CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D40A, visual="bf", }, [0x1D40B]={ category="lu", description="MATHEMATICAL BOLD CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D40B, visual="bf", }, [0x1D40C]={ category="lu", description="MATHEMATICAL BOLD CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D40C, visual="bf", }, [0x1D40D]={ category="lu", description="MATHEMATICAL BOLD CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D40D, visual="bf", }, [0x1D40E]={ category="lu", description="MATHEMATICAL BOLD CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D40E, visual="bf", }, [0x1D40F]={ category="lu", description="MATHEMATICAL BOLD CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D40F, visual="bf", }, [0x1D410]={ category="lu", description="MATHEMATICAL BOLD CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D410, visual="bf", }, [0x1D411]={ category="lu", description="MATHEMATICAL BOLD CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D411, visual="bf", }, [0x1D412]={ category="lu", description="MATHEMATICAL BOLD CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D412, visual="bf", }, [0x1D413]={ category="lu", description="MATHEMATICAL BOLD CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D413, visual="bf", }, [0x1D414]={ category="lu", description="MATHEMATICAL BOLD CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D414, visual="bf", }, [0x1D415]={ category="lu", description="MATHEMATICAL BOLD CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D415, visual="bf", }, [0x1D416]={ category="lu", description="MATHEMATICAL BOLD CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D416, visual="bf", }, [0x1D417]={ category="lu", description="MATHEMATICAL BOLD CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D417, visual="bf", }, [0x1D418]={ category="lu", description="MATHEMATICAL BOLD CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D418, visual="bf", }, [0x1D419]={ category="lu", description="MATHEMATICAL BOLD CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D419, visual="bf", }, [0x1D41A]={ category="ll", description="MATHEMATICAL BOLD SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D41A, visual="bf", }, [0x1D41B]={ category="ll", description="MATHEMATICAL BOLD SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D41B, visual="bf", }, [0x1D41C]={ category="ll", description="MATHEMATICAL BOLD SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D41C, visual="bf", }, [0x1D41D]={ category="ll", description="MATHEMATICAL BOLD SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D41D, visual="bf", }, [0x1D41E]={ category="ll", description="MATHEMATICAL BOLD SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D41E, visual="bf", }, [0x1D41F]={ category="ll", description="MATHEMATICAL BOLD SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D41F, visual="bf", }, [0x1D420]={ category="ll", description="MATHEMATICAL BOLD SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D420, visual="bf", }, [0x1D421]={ category="ll", description="MATHEMATICAL BOLD SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D421, visual="bf", }, [0x1D422]={ category="ll", description="MATHEMATICAL BOLD SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D422, visual="bf", }, [0x1D423]={ category="ll", description="MATHEMATICAL BOLD SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D423, visual="bf", }, [0x1D424]={ category="ll", description="MATHEMATICAL BOLD SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D424, visual="bf", }, [0x1D425]={ category="ll", description="MATHEMATICAL BOLD SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D425, visual="bf", }, [0x1D426]={ category="ll", description="MATHEMATICAL BOLD SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D426, visual="bf", }, [0x1D427]={ category="ll", description="MATHEMATICAL BOLD SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D427, visual="bf", }, [0x1D428]={ category="ll", description="MATHEMATICAL BOLD SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D428, visual="bf", }, [0x1D429]={ category="ll", description="MATHEMATICAL BOLD SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D429, visual="bf", }, [0x1D42A]={ category="ll", description="MATHEMATICAL BOLD SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D42A, visual="bf", }, [0x1D42B]={ category="ll", description="MATHEMATICAL BOLD SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D42B, visual="bf", }, [0x1D42C]={ category="ll", description="MATHEMATICAL BOLD SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D42C, visual="bf", }, [0x1D42D]={ category="ll", description="MATHEMATICAL BOLD SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D42D, visual="bf", }, [0x1D42E]={ category="ll", description="MATHEMATICAL BOLD SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D42E, visual="bf", }, [0x1D42F]={ category="ll", description="MATHEMATICAL BOLD SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D42F, visual="bf", }, [0x1D430]={ category="ll", description="MATHEMATICAL BOLD SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D430, visual="bf", }, [0x1D431]={ category="ll", description="MATHEMATICAL BOLD SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D431, visual="bf", }, [0x1D432]={ category="ll", description="MATHEMATICAL BOLD SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D432, visual="bf", }, [0x1D433]={ category="ll", description="MATHEMATICAL BOLD SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D433, visual="bf", }, [0x1D434]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D434, visual="it", }, [0x1D435]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D435, visual="it", }, [0x1D436]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D436, visual="it", }, [0x1D437]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D437, visual="it", }, [0x1D438]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D438, visual="it", }, [0x1D439]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D439, visual="it", }, [0x1D43A]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D43A, visual="it", }, [0x1D43B]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D43B, visual="it", }, [0x1D43C]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D43C, visual="it", }, [0x1D43D]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D43D, visual="it", }, [0x1D43E]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D43E, visual="it", }, [0x1D43F]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D43F, visual="it", }, [0x1D440]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D440, visual="it", }, [0x1D441]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D441, visual="it", }, [0x1D442]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D442, visual="it", }, [0x1D443]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D443, visual="it", }, [0x1D444]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D444, visual="it", }, [0x1D445]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D445, visual="it", }, [0x1D446]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D446, visual="it", }, [0x1D447]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D447, visual="it", }, [0x1D448]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D448, visual="it", }, [0x1D449]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D449, visual="it", }, [0x1D44A]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D44A, visual="it", }, [0x1D44B]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D44B, visual="it", }, [0x1D44C]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D44C, visual="it", }, [0x1D44D]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D44D, visual="it", }, [0x1D44E]={ category="ll", description="MATHEMATICAL ITALIC SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D44E, visual="it", }, [0x1D44F]={ category="ll", description="MATHEMATICAL ITALIC SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D44F, visual="it", }, [0x1D450]={ category="ll", description="MATHEMATICAL ITALIC SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D450, visual="it", }, [0x1D451]={ category="ll", description="MATHEMATICAL ITALIC SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D451, visual="it", }, [0x1D452]={ category="ll", description="MATHEMATICAL ITALIC SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D452, visual="it", }, [0x1D453]={ category="ll", description="MATHEMATICAL ITALIC SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D453, visual="it", }, [0x1D454]={ category="ll", description="MATHEMATICAL ITALIC SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D454, visual="it", }, [0x1D456]={ category="ll", description="MATHEMATICAL ITALIC SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D456, visual="it", }, [0x1D457]={ category="ll", description="MATHEMATICAL ITALIC SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D457, visual="it", }, [0x1D458]={ category="ll", description="MATHEMATICAL ITALIC SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D458, visual="it", }, [0x1D459]={ category="ll", description="MATHEMATICAL ITALIC SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D459, visual="it", }, [0x1D45A]={ category="ll", description="MATHEMATICAL ITALIC SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D45A, visual="it", }, [0x1D45B]={ category="ll", description="MATHEMATICAL ITALIC SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D45B, visual="it", }, [0x1D45C]={ category="ll", description="MATHEMATICAL ITALIC SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D45C, visual="it", }, [0x1D45D]={ category="ll", description="MATHEMATICAL ITALIC SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D45D, visual="it", }, [0x1D45E]={ category="ll", description="MATHEMATICAL ITALIC SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D45E, visual="it", }, [0x1D45F]={ category="ll", description="MATHEMATICAL ITALIC SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D45F, visual="it", }, [0x1D460]={ category="ll", description="MATHEMATICAL ITALIC SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D460, visual="it", }, [0x1D461]={ category="ll", description="MATHEMATICAL ITALIC SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D461, visual="it", }, [0x1D462]={ category="ll", description="MATHEMATICAL ITALIC SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D462, visual="it", }, [0x1D463]={ category="ll", description="MATHEMATICAL ITALIC SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D463, visual="it", }, [0x1D464]={ category="ll", description="MATHEMATICAL ITALIC SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D464, visual="it", }, [0x1D465]={ category="ll", description="MATHEMATICAL ITALIC SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D465, visual="it", }, [0x1D466]={ category="ll", description="MATHEMATICAL ITALIC SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D466, visual="it", }, [0x1D467]={ category="ll", description="MATHEMATICAL ITALIC SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D467, visual="it", }, [0x1D468]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D468, visual="bi", }, [0x1D469]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D469, visual="bi", }, [0x1D46A]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D46A, visual="bi", }, [0x1D46B]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D46B, visual="bi", }, [0x1D46C]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D46C, visual="bi", }, [0x1D46D]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D46D, visual="bi", }, [0x1D46E]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D46E, visual="bi", }, [0x1D46F]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D46F, visual="bi", }, [0x1D470]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D470, visual="bi", }, [0x1D471]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D471, visual="bi", }, [0x1D472]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D472, visual="bi", }, [0x1D473]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D473, visual="bi", }, [0x1D474]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D474, visual="bi", }, [0x1D475]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D475, visual="bi", }, [0x1D476]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D476, visual="bi", }, [0x1D477]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D477, visual="bi", }, [0x1D478]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D478, visual="bi", }, [0x1D479]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D479, visual="bi", }, [0x1D47A]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D47A, visual="bi", }, [0x1D47B]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D47B, visual="bi", }, [0x1D47C]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D47C, visual="bi", }, [0x1D47D]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D47D, visual="bi", }, [0x1D47E]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D47E, visual="bi", }, [0x1D47F]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D47F, visual="bi", }, [0x1D480]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D480, visual="bi", }, [0x1D481]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D481, visual="bi", }, [0x1D482]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D482, visual="bi", }, [0x1D483]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D483, visual="bi", }, [0x1D484]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D484, visual="bi", }, [0x1D485]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D485, visual="bi", }, [0x1D486]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D486, visual="bi", }, [0x1D487]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D487, visual="bi", }, [0x1D488]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D488, visual="bi", }, [0x1D489]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D489, visual="bi", }, [0x1D48A]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D48A, visual="bi", }, [0x1D48B]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D48B, visual="bi", }, [0x1D48C]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D48C, visual="bi", }, [0x1D48D]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D48D, visual="bi", }, [0x1D48E]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D48E, visual="bi", }, [0x1D48F]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D48F, visual="bi", }, [0x1D490]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D490, visual="bi", }, [0x1D491]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D491, visual="bi", }, [0x1D492]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D492, visual="bi", }, [0x1D493]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D493, visual="bi", }, [0x1D494]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D494, visual="bi", }, [0x1D495]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D495, visual="bi", }, [0x1D496]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D496, visual="bi", }, [0x1D497]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D497, visual="bi", }, [0x1D498]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D498, visual="bi", }, [0x1D499]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D499, visual="bi", }, [0x1D49A]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D49A, visual="bi", }, [0x1D49B]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D49B, visual="bi", }, [0x1D49C]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D49C, }, [0x1D49E]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D49E, }, [0x1D49F]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D49F, }, [0x1D4A2]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D4A2, }, [0x1D4A5]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D4A5, }, [0x1D4A6]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D4A6, }, [0x1D4A9]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D4A9, }, [0x1D4AA]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D4AA, }, [0x1D4AB]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D4AB, }, [0x1D4AC]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D4AC, }, [0x1D4AE]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D4AE, }, [0x1D4AF]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D4AF, }, [0x1D4B0]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D4B0, }, [0x1D4B1]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D4B1, }, [0x1D4B2]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D4B2, }, [0x1D4B3]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D4B3, }, [0x1D4B4]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D4B4, }, [0x1D4B5]={ category="lu", description="MATHEMATICAL SCRIPT CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D4B5, }, [0x1D4B6]={ category="ll", description="MATHEMATICAL SCRIPT SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D4B6, }, [0x1D4B7]={ category="ll", description="MATHEMATICAL SCRIPT SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D4B7, }, [0x1D4B8]={ category="ll", description="MATHEMATICAL SCRIPT SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D4B8, }, [0x1D4B9]={ category="ll", description="MATHEMATICAL SCRIPT SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D4B9, }, [0x1D4BB]={ category="ll", description="MATHEMATICAL SCRIPT SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D4BB, }, [0x1D4BD]={ category="ll", description="MATHEMATICAL SCRIPT SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D4BD, }, [0x1D4BE]={ category="ll", description="MATHEMATICAL SCRIPT SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D4BE, }, [0x1D4BF]={ category="ll", description="MATHEMATICAL SCRIPT SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D4BF, }, [0x1D4C0]={ category="ll", description="MATHEMATICAL SCRIPT SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D4C0, }, [0x1D4C1]={ category="ll", description="MATHEMATICAL SCRIPT SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D4C1, }, [0x1D4C2]={ category="ll", description="MATHEMATICAL SCRIPT SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D4C2, }, [0x1D4C3]={ category="ll", description="MATHEMATICAL SCRIPT SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D4C3, }, [0x1D4C5]={ category="ll", description="MATHEMATICAL SCRIPT SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D4C5, }, [0x1D4C6]={ category="ll", description="MATHEMATICAL SCRIPT SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D4C6, }, [0x1D4C7]={ category="ll", description="MATHEMATICAL SCRIPT SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D4C7, }, [0x1D4C8]={ category="ll", description="MATHEMATICAL SCRIPT SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D4C8, }, [0x1D4C9]={ category="ll", description="MATHEMATICAL SCRIPT SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D4C9, }, [0x1D4CA]={ category="ll", description="MATHEMATICAL SCRIPT SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D4CA, }, [0x1D4CB]={ category="ll", description="MATHEMATICAL SCRIPT SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D4CB, }, [0x1D4CC]={ category="ll", description="MATHEMATICAL SCRIPT SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D4CC, }, [0x1D4CD]={ category="ll", description="MATHEMATICAL SCRIPT SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D4CD, }, [0x1D4CE]={ category="ll", description="MATHEMATICAL SCRIPT SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D4CE, }, [0x1D4CF]={ category="ll", description="MATHEMATICAL SCRIPT SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D4CF, }, [0x1D4D0]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D4D0, visual="bf", }, [0x1D4D1]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D4D1, visual="bf", }, [0x1D4D2]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D4D2, visual="bf", }, [0x1D4D3]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D4D3, visual="bf", }, [0x1D4D4]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D4D4, visual="bf", }, [0x1D4D5]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D4D5, visual="bf", }, [0x1D4D6]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D4D6, visual="bf", }, [0x1D4D7]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D4D7, visual="bf", }, [0x1D4D8]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D4D8, visual="bf", }, [0x1D4D9]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D4D9, visual="bf", }, [0x1D4DA]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D4DA, visual="bf", }, [0x1D4DB]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D4DB, visual="bf", }, [0x1D4DC]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D4DC, visual="bf", }, [0x1D4DD]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D4DD, visual="bf", }, [0x1D4DE]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D4DE, visual="bf", }, [0x1D4DF]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D4DF, visual="bf", }, [0x1D4E0]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D4E0, visual="bf", }, [0x1D4E1]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D4E1, visual="bf", }, [0x1D4E2]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D4E2, visual="bf", }, [0x1D4E3]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D4E3, visual="bf", }, [0x1D4E4]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D4E4, visual="bf", }, [0x1D4E5]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D4E5, visual="bf", }, [0x1D4E6]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D4E6, visual="bf", }, [0x1D4E7]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D4E7, visual="bf", }, [0x1D4E8]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D4E8, visual="bf", }, [0x1D4E9]={ category="lu", description="MATHEMATICAL BOLD SCRIPT CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D4E9, visual="bf", }, [0x1D4EA]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D4EA, visual="bf", }, [0x1D4EB]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D4EB, visual="bf", }, [0x1D4EC]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D4EC, visual="bf", }, [0x1D4ED]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D4ED, visual="bf", }, [0x1D4EE]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D4EE, visual="bf", }, [0x1D4EF]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D4EF, visual="bf", }, [0x1D4F0]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D4F0, visual="bf", }, [0x1D4F1]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D4F1, visual="bf", }, [0x1D4F2]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D4F2, visual="bf", }, [0x1D4F3]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D4F3, visual="bf", }, [0x1D4F4]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D4F4, visual="bf", }, [0x1D4F5]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D4F5, visual="bf", }, [0x1D4F6]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D4F6, visual="bf", }, [0x1D4F7]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D4F7, visual="bf", }, [0x1D4F8]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D4F8, visual="bf", }, [0x1D4F9]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D4F9, visual="bf", }, [0x1D4FA]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D4FA, visual="bf", }, [0x1D4FB]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D4FB, visual="bf", }, [0x1D4FC]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D4FC, visual="bf", }, [0x1D4FD]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D4FD, visual="bf", }, [0x1D4FE]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D4FE, visual="bf", }, [0x1D4FF]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D4FF, visual="bf", }, [0x1D500]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D500, visual="bf", }, [0x1D501]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D501, visual="bf", }, [0x1D502]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D502, visual="bf", }, [0x1D503]={ category="ll", description="MATHEMATICAL BOLD SCRIPT SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D503, visual="bf", }, [0x1D504]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D504, }, [0x1D505]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D505, }, [0x1D507]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D507, }, [0x1D508]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D508, }, [0x1D509]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D509, }, [0x1D50A]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D50A, }, [0x1D50D]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D50D, }, [0x1D50E]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D50E, }, [0x1D50F]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D50F, }, [0x1D510]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D510, }, [0x1D511]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D511, }, [0x1D512]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D512, }, [0x1D513]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D513, }, [0x1D514]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D514, }, [0x1D516]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D516, }, [0x1D517]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D517, }, [0x1D518]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D518, }, [0x1D519]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D519, }, [0x1D51A]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D51A, }, [0x1D51B]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D51B, }, [0x1D51C]={ category="lu", description="MATHEMATICAL FRAKTUR CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D51C, }, [0x1D51E]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D51E, }, [0x1D51F]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D51F, }, [0x1D520]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D520, }, [0x1D521]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D521, }, [0x1D522]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D522, }, [0x1D523]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D523, }, [0x1D524]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D524, }, [0x1D525]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D525, }, [0x1D526]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D526, }, [0x1D527]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D527, }, [0x1D528]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D528, }, [0x1D529]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D529, }, [0x1D52A]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D52A, }, [0x1D52B]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D52B, }, [0x1D52C]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D52C, }, [0x1D52D]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D52D, }, [0x1D52E]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D52E, }, [0x1D52F]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D52F, }, [0x1D530]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D530, }, [0x1D531]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D531, }, [0x1D532]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D532, }, [0x1D533]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D533, }, [0x1D534]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D534, }, [0x1D535]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D535, }, [0x1D536]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D536, }, [0x1D537]={ category="ll", description="MATHEMATICAL FRAKTUR SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D537, }, [0x1D538]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D538, }, [0x1D539]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D539, }, [0x1D53B]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D53B, }, [0x1D53C]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D53C, }, [0x1D53D]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D53D, }, [0x1D53E]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D53E, }, [0x1D540]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D540, }, [0x1D541]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D541, }, [0x1D542]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D542, }, [0x1D543]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D543, }, [0x1D544]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D544, }, [0x1D546]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D546, }, [0x1D54A]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D54A, }, [0x1D54B]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D54B, }, [0x1D54C]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D54C, }, [0x1D54D]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D54D, }, [0x1D54E]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D54E, }, [0x1D54F]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D54F, }, [0x1D550]={ category="lu", description="MATHEMATICAL DOUBLE-STRUCK CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D550, }, [0x1D552]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D552, }, [0x1D553]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D553, }, [0x1D554]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D554, }, [0x1D555]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D555, }, [0x1D556]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D556, }, [0x1D557]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D557, }, [0x1D558]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D558, }, [0x1D559]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D559, }, [0x1D55A]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D55A, }, [0x1D55B]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D55B, }, [0x1D55C]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D55C, }, [0x1D55D]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D55D, }, [0x1D55E]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D55E, }, [0x1D55F]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D55F, }, [0x1D560]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D560, }, [0x1D561]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D561, }, [0x1D562]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D562, }, [0x1D563]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D563, }, [0x1D564]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D564, }, [0x1D565]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D565, }, [0x1D566]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D566, }, [0x1D567]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D567, }, [0x1D568]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D568, }, [0x1D569]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D569, }, [0x1D56A]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D56A, }, [0x1D56B]={ category="ll", description="MATHEMATICAL DOUBLE-STRUCK SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D56B, }, [0x1D56C]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D56C, visual="bf", }, [0x1D56D]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D56D, visual="bf", }, [0x1D56E]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D56E, visual="bf", }, [0x1D56F]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D56F, visual="bf", }, [0x1D570]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D570, visual="bf", }, [0x1D571]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D571, visual="bf", }, [0x1D572]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D572, visual="bf", }, [0x1D573]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D573, visual="bf", }, [0x1D574]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D574, visual="bf", }, [0x1D575]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D575, visual="bf", }, [0x1D576]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D576, visual="bf", }, [0x1D577]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D577, visual="bf", }, [0x1D578]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D578, visual="bf", }, [0x1D579]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D579, visual="bf", }, [0x1D57A]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D57A, visual="bf", }, [0x1D57B]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D57B, visual="bf", }, [0x1D57C]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D57C, visual="bf", }, [0x1D57D]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D57D, visual="bf", }, [0x1D57E]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D57E, visual="bf", }, [0x1D57F]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D57F, visual="bf", }, [0x1D580]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D580, visual="bf", }, [0x1D581]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D581, visual="bf", }, [0x1D582]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D582, visual="bf", }, [0x1D583]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D583, visual="bf", }, [0x1D584]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D584, visual="bf", }, [0x1D585]={ category="lu", description="MATHEMATICAL BOLD FRAKTUR CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D585, visual="bf", }, [0x1D586]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D586, visual="bf", }, [0x1D587]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D587, visual="bf", }, [0x1D588]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D588, visual="bf", }, [0x1D589]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D589, visual="bf", }, [0x1D58A]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D58A, visual="bf", }, [0x1D58B]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D58B, visual="bf", }, [0x1D58C]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D58C, visual="bf", }, [0x1D58D]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D58D, visual="bf", }, [0x1D58E]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D58E, visual="bf", }, [0x1D58F]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D58F, visual="bf", }, [0x1D590]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D590, visual="bf", }, [0x1D591]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D591, visual="bf", }, [0x1D592]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D592, visual="bf", }, [0x1D593]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D593, visual="bf", }, [0x1D594]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D594, visual="bf", }, [0x1D595]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D595, visual="bf", }, [0x1D596]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D596, visual="bf", }, [0x1D597]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D597, visual="bf", }, [0x1D598]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D598, visual="bf", }, [0x1D599]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D599, visual="bf", }, [0x1D59A]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D59A, visual="bf", }, [0x1D59B]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D59B, visual="bf", }, [0x1D59C]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D59C, visual="bf", }, [0x1D59D]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D59D, visual="bf", }, [0x1D59E]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D59E, visual="bf", }, [0x1D59F]={ category="ll", description="MATHEMATICAL BOLD FRAKTUR SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D59F, visual="bf", }, [0x1D5A0]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D5A0, }, [0x1D5A1]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D5A1, }, [0x1D5A2]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D5A2, }, [0x1D5A3]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D5A3, }, [0x1D5A4]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D5A4, }, [0x1D5A5]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D5A5, }, [0x1D5A6]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D5A6, }, [0x1D5A7]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D5A7, }, [0x1D5A8]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D5A8, }, [0x1D5A9]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D5A9, }, [0x1D5AA]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D5AA, }, [0x1D5AB]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D5AB, }, [0x1D5AC]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D5AC, }, [0x1D5AD]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D5AD, }, [0x1D5AE]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D5AE, }, [0x1D5AF]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D5AF, }, [0x1D5B0]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D5B0, }, [0x1D5B1]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D5B1, }, [0x1D5B2]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D5B2, }, [0x1D5B3]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D5B3, }, [0x1D5B4]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D5B4, }, [0x1D5B5]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D5B5, }, [0x1D5B6]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D5B6, }, [0x1D5B7]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D5B7, }, [0x1D5B8]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D5B8, }, [0x1D5B9]={ category="lu", description="MATHEMATICAL SANS-SERIF CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D5B9, }, [0x1D5BA]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D5BA, }, [0x1D5BB]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D5BB, }, [0x1D5BC]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D5BC, }, [0x1D5BD]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D5BD, }, [0x1D5BE]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D5BE, }, [0x1D5BF]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D5BF, }, [0x1D5C0]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D5C0, }, [0x1D5C1]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D5C1, }, [0x1D5C2]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D5C2, }, [0x1D5C3]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D5C3, }, [0x1D5C4]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D5C4, }, [0x1D5C5]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D5C5, }, [0x1D5C6]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D5C6, }, [0x1D5C7]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D5C7, }, [0x1D5C8]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D5C8, }, [0x1D5C9]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D5C9, }, [0x1D5CA]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D5CA, }, [0x1D5CB]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D5CB, }, [0x1D5CC]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D5CC, }, [0x1D5CD]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D5CD, }, [0x1D5CE]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D5CE, }, [0x1D5CF]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D5CF, }, [0x1D5D0]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D5D0, }, [0x1D5D1]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D5D1, }, [0x1D5D2]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D5D2, }, [0x1D5D3]={ category="ll", description="MATHEMATICAL SANS-SERIF SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D5D3, }, [0x1D5D4]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D5D4, visual="bf", }, [0x1D5D5]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D5D5, visual="bf", }, [0x1D5D6]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D5D6, visual="bf", }, [0x1D5D7]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D5D7, visual="bf", }, [0x1D5D8]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D5D8, visual="bf", }, [0x1D5D9]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D5D9, visual="bf", }, [0x1D5DA]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D5DA, visual="bf", }, [0x1D5DB]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D5DB, visual="bf", }, [0x1D5DC]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D5DC, visual="bf", }, [0x1D5DD]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D5DD, visual="bf", }, [0x1D5DE]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D5DE, visual="bf", }, [0x1D5DF]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D5DF, visual="bf", }, [0x1D5E0]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D5E0, visual="bf", }, [0x1D5E1]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D5E1, visual="bf", }, [0x1D5E2]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D5E2, visual="bf", }, [0x1D5E3]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D5E3, visual="bf", }, [0x1D5E4]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D5E4, visual="bf", }, [0x1D5E5]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D5E5, visual="bf", }, [0x1D5E6]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D5E6, visual="bf", }, [0x1D5E7]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D5E7, visual="bf", }, [0x1D5E8]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D5E8, visual="bf", }, [0x1D5E9]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D5E9, visual="bf", }, [0x1D5EA]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D5EA, visual="bf", }, [0x1D5EB]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D5EB, visual="bf", }, [0x1D5EC]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D5EC, visual="bf", }, [0x1D5ED]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D5ED, visual="bf", }, [0x1D5EE]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D5EE, visual="bf", }, [0x1D5EF]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D5EF, visual="bf", }, [0x1D5F0]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D5F0, visual="bf", }, [0x1D5F1]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D5F1, visual="bf", }, [0x1D5F2]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D5F2, visual="bf", }, [0x1D5F3]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D5F3, visual="bf", }, [0x1D5F4]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D5F4, visual="bf", }, [0x1D5F5]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D5F5, visual="bf", }, [0x1D5F6]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D5F6, visual="bf", }, [0x1D5F7]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D5F7, visual="bf", }, [0x1D5F8]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D5F8, visual="bf", }, [0x1D5F9]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D5F9, visual="bf", }, [0x1D5FA]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D5FA, visual="bf", }, [0x1D5FB]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D5FB, visual="bf", }, [0x1D5FC]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D5FC, visual="bf", }, [0x1D5FD]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D5FD, visual="bf", }, [0x1D5FE]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D5FE, visual="bf", }, [0x1D5FF]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D5FF, visual="bf", }, [0x1D600]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D600, visual="bf", }, [0x1D601]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D601, visual="bf", }, [0x1D602]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D602, visual="bf", }, [0x1D603]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D603, visual="bf", }, [0x1D604]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D604, visual="bf", }, [0x1D605]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D605, visual="bf", }, [0x1D606]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D606, visual="bf", }, [0x1D607]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D607, visual="bf", }, [0x1D608]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D608, visual="it", }, [0x1D609]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D609, visual="it", }, [0x1D60A]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D60A, visual="it", }, [0x1D60B]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D60B, visual="it", }, [0x1D60C]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D60C, visual="it", }, [0x1D60D]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D60D, visual="it", }, [0x1D60E]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D60E, visual="it", }, [0x1D60F]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D60F, visual="it", }, [0x1D610]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D610, visual="it", }, [0x1D611]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D611, visual="it", }, [0x1D612]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D612, visual="it", }, [0x1D613]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D613, visual="it", }, [0x1D614]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D614, visual="it", }, [0x1D615]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D615, visual="it", }, [0x1D616]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D616, visual="it", }, [0x1D617]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D617, visual="it", }, [0x1D618]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D618, visual="it", }, [0x1D619]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D619, visual="it", }, [0x1D61A]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D61A, visual="it", }, [0x1D61B]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D61B, visual="it", }, [0x1D61C]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D61C, visual="it", }, [0x1D61D]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D61D, visual="it", }, [0x1D61E]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D61E, visual="it", }, [0x1D61F]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D61F, visual="it", }, [0x1D620]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D620, visual="it", }, [0x1D621]={ category="lu", description="MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D621, visual="it", }, [0x1D622]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D622, visual="it", }, [0x1D623]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D623, visual="it", }, [0x1D624]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D624, visual="it", }, [0x1D625]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D625, visual="it", }, [0x1D626]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D626, visual="it", }, [0x1D627]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D627, visual="it", }, [0x1D628]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D628, visual="it", }, [0x1D629]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D629, visual="it", }, [0x1D62A]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D62A, visual="it", }, [0x1D62B]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D62B, visual="it", }, [0x1D62C]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D62C, visual="it", }, [0x1D62D]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D62D, visual="it", }, [0x1D62E]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D62E, visual="it", }, [0x1D62F]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D62F, visual="it", }, [0x1D630]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D630, visual="it", }, [0x1D631]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D631, visual="it", }, [0x1D632]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D632, visual="it", }, [0x1D633]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D633, visual="it", }, [0x1D634]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D634, visual="it", }, [0x1D635]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D635, visual="it", }, [0x1D636]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D636, visual="it", }, [0x1D637]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D637, visual="it", }, [0x1D638]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D638, visual="it", }, [0x1D639]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D639, visual="it", }, [0x1D63A]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D63A, visual="it", }, [0x1D63B]={ category="ll", description="MATHEMATICAL SANS-SERIF ITALIC SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D63B, visual="it", }, [0x1D63C]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D63C, visual="bi", }, [0x1D63D]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D63D, visual="bi", }, [0x1D63E]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D63E, visual="bi", }, [0x1D63F]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D63F, visual="bi", }, [0x1D640]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D640, visual="bi", }, [0x1D641]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D641, visual="bi", }, [0x1D642]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D642, visual="bi", }, [0x1D643]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D643, visual="bi", }, [0x1D644]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D644, visual="bi", }, [0x1D645]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D645, visual="bi", }, [0x1D646]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D646, visual="bi", }, [0x1D647]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D647, visual="bi", }, [0x1D648]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D648, visual="bi", }, [0x1D649]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D649, visual="bi", }, [0x1D64A]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D64A, visual="bi", }, [0x1D64B]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D64B, visual="bi", }, [0x1D64C]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D64C, visual="bi", }, [0x1D64D]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D64D, visual="bi", }, [0x1D64E]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D64E, visual="bi", }, [0x1D64F]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D64F, visual="bi", }, [0x1D650]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D650, visual="bi", }, [0x1D651]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D651, visual="bi", }, [0x1D652]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D652, visual="bi", }, [0x1D653]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D653, visual="bi", }, [0x1D654]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D654, visual="bi", }, [0x1D655]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D655, visual="bi", }, [0x1D656]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D656, visual="bi", }, [0x1D657]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D657, visual="bi", }, [0x1D658]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D658, visual="bi", }, [0x1D659]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D659, visual="bi", }, [0x1D65A]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D65A, visual="bi", }, [0x1D65B]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D65B, visual="bi", }, [0x1D65C]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D65C, visual="bi", }, [0x1D65D]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D65D, visual="bi", }, [0x1D65E]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D65E, visual="bi", }, [0x1D65F]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D65F, visual="bi", }, [0x1D660]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D660, visual="bi", }, [0x1D661]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D661, visual="bi", }, [0x1D662]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D662, visual="bi", }, [0x1D663]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D663, visual="bi", }, [0x1D664]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D664, visual="bi", }, [0x1D665]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D665, visual="bi", }, [0x1D666]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D666, visual="bi", }, [0x1D667]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D667, visual="bi", }, [0x1D668]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D668, visual="bi", }, [0x1D669]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D669, visual="bi", }, [0x1D66A]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D66A, visual="bi", }, [0x1D66B]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D66B, visual="bi", }, [0x1D66C]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D66C, visual="bi", }, [0x1D66D]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D66D, visual="bi", }, [0x1D66E]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D66E, visual="bi", }, [0x1D66F]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D66F, visual="bi", }, [0x1D670]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL A", direction="l", linebreak="al", specials={ "font", 0x0041 }, unicodeslot=0x1D670, }, [0x1D671]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL B", direction="l", linebreak="al", specials={ "font", 0x0042 }, unicodeslot=0x1D671, }, [0x1D672]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL C", direction="l", linebreak="al", specials={ "font", 0x0043 }, unicodeslot=0x1D672, }, [0x1D673]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL D", direction="l", linebreak="al", specials={ "font", 0x0044 }, unicodeslot=0x1D673, }, [0x1D674]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL E", direction="l", linebreak="al", specials={ "font", 0x0045 }, unicodeslot=0x1D674, }, [0x1D675]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL F", direction="l", linebreak="al", specials={ "font", 0x0046 }, unicodeslot=0x1D675, }, [0x1D676]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL G", direction="l", linebreak="al", specials={ "font", 0x0047 }, unicodeslot=0x1D676, }, [0x1D677]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL H", direction="l", linebreak="al", specials={ "font", 0x0048 }, unicodeslot=0x1D677, }, [0x1D678]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL I", direction="l", linebreak="al", specials={ "font", 0x0049 }, unicodeslot=0x1D678, }, [0x1D679]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL J", direction="l", linebreak="al", specials={ "font", 0x004A }, unicodeslot=0x1D679, }, [0x1D67A]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL K", direction="l", linebreak="al", specials={ "font", 0x004B }, unicodeslot=0x1D67A, }, [0x1D67B]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL L", direction="l", linebreak="al", specials={ "font", 0x004C }, unicodeslot=0x1D67B, }, [0x1D67C]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL M", direction="l", linebreak="al", specials={ "font", 0x004D }, unicodeslot=0x1D67C, }, [0x1D67D]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL N", direction="l", linebreak="al", specials={ "font", 0x004E }, unicodeslot=0x1D67D, }, [0x1D67E]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL O", direction="l", linebreak="al", specials={ "font", 0x004F }, unicodeslot=0x1D67E, }, [0x1D67F]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL P", direction="l", linebreak="al", specials={ "font", 0x0050 }, unicodeslot=0x1D67F, }, [0x1D680]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL Q", direction="l", linebreak="al", specials={ "font", 0x0051 }, unicodeslot=0x1D680, }, [0x1D681]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL R", direction="l", linebreak="al", specials={ "font", 0x0052 }, unicodeslot=0x1D681, }, [0x1D682]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL S", direction="l", linebreak="al", specials={ "font", 0x0053 }, unicodeslot=0x1D682, }, [0x1D683]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL T", direction="l", linebreak="al", specials={ "font", 0x0054 }, unicodeslot=0x1D683, }, [0x1D684]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL U", direction="l", linebreak="al", specials={ "font", 0x0055 }, unicodeslot=0x1D684, }, [0x1D685]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL V", direction="l", linebreak="al", specials={ "font", 0x0056 }, unicodeslot=0x1D685, }, [0x1D686]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL W", direction="l", linebreak="al", specials={ "font", 0x0057 }, unicodeslot=0x1D686, }, [0x1D687]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL X", direction="l", linebreak="al", specials={ "font", 0x0058 }, unicodeslot=0x1D687, }, [0x1D688]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL Y", direction="l", linebreak="al", specials={ "font", 0x0059 }, unicodeslot=0x1D688, }, [0x1D689]={ category="lu", description="MATHEMATICAL MONOSPACE CAPITAL Z", direction="l", linebreak="al", specials={ "font", 0x005A }, unicodeslot=0x1D689, }, [0x1D68A]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL A", direction="l", linebreak="al", specials={ "font", 0x0061 }, unicodeslot=0x1D68A, }, [0x1D68B]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL B", direction="l", linebreak="al", specials={ "font", 0x0062 }, unicodeslot=0x1D68B, }, [0x1D68C]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL C", direction="l", linebreak="al", specials={ "font", 0x0063 }, unicodeslot=0x1D68C, }, [0x1D68D]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL D", direction="l", linebreak="al", specials={ "font", 0x0064 }, unicodeslot=0x1D68D, }, [0x1D68E]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL E", direction="l", linebreak="al", specials={ "font", 0x0065 }, unicodeslot=0x1D68E, }, [0x1D68F]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL F", direction="l", linebreak="al", specials={ "font", 0x0066 }, unicodeslot=0x1D68F, }, [0x1D690]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL G", direction="l", linebreak="al", specials={ "font", 0x0067 }, unicodeslot=0x1D690, }, [0x1D691]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL H", direction="l", linebreak="al", specials={ "font", 0x0068 }, unicodeslot=0x1D691, }, [0x1D692]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL I", direction="l", linebreak="al", specials={ "font", 0x0069 }, unicodeslot=0x1D692, }, [0x1D693]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL J", direction="l", linebreak="al", specials={ "font", 0x006A }, unicodeslot=0x1D693, }, [0x1D694]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL K", direction="l", linebreak="al", specials={ "font", 0x006B }, unicodeslot=0x1D694, }, [0x1D695]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL L", direction="l", linebreak="al", specials={ "font", 0x006C }, unicodeslot=0x1D695, }, [0x1D696]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL M", direction="l", linebreak="al", specials={ "font", 0x006D }, unicodeslot=0x1D696, }, [0x1D697]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL N", direction="l", linebreak="al", specials={ "font", 0x006E }, unicodeslot=0x1D697, }, [0x1D698]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL O", direction="l", linebreak="al", specials={ "font", 0x006F }, unicodeslot=0x1D698, }, [0x1D699]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL P", direction="l", linebreak="al", specials={ "font", 0x0070 }, unicodeslot=0x1D699, }, [0x1D69A]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL Q", direction="l", linebreak="al", specials={ "font", 0x0071 }, unicodeslot=0x1D69A, }, [0x1D69B]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL R", direction="l", linebreak="al", specials={ "font", 0x0072 }, unicodeslot=0x1D69B, }, [0x1D69C]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL S", direction="l", linebreak="al", specials={ "font", 0x0073 }, unicodeslot=0x1D69C, }, [0x1D69D]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL T", direction="l", linebreak="al", specials={ "font", 0x0074 }, unicodeslot=0x1D69D, }, [0x1D69E]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL U", direction="l", linebreak="al", specials={ "font", 0x0075 }, unicodeslot=0x1D69E, }, [0x1D69F]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL V", direction="l", linebreak="al", specials={ "font", 0x0076 }, unicodeslot=0x1D69F, }, [0x1D6A0]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL W", direction="l", linebreak="al", specials={ "font", 0x0077 }, unicodeslot=0x1D6A0, }, [0x1D6A1]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL X", direction="l", linebreak="al", specials={ "font", 0x0078 }, unicodeslot=0x1D6A1, }, [0x1D6A2]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL Y", direction="l", linebreak="al", specials={ "font", 0x0079 }, unicodeslot=0x1D6A2, }, [0x1D6A3]={ category="ll", description="MATHEMATICAL MONOSPACE SMALL Z", direction="l", linebreak="al", specials={ "font", 0x007A }, unicodeslot=0x1D6A3, }, [0x1D6A4]={ category="ll", description="MATHEMATICAL ITALIC SMALL DOTLESS I", direction="l", linebreak="al", mathclass="default", mathname="imath", specials={ "font", 0x0131 }, unicodeslot=0x1D6A4, visual="it", }, [0x1D6A5]={ category="ll", description="MATHEMATICAL ITALIC SMALL DOTLESS J", direction="l", linebreak="al", mathclass="default", mathname="jmath", specials={ "font", 0x0237 }, unicodeslot=0x1D6A5, visual="it", }, [0x1D6A8]={ category="lu", description="MATHEMATICAL BOLD CAPITAL ALPHA", direction="l", linebreak="al", specials={ "font", 0x0391 }, unicodeslot=0x1D6A8, visual="bf", }, [0x1D6A9]={ category="lu", description="MATHEMATICAL BOLD CAPITAL BETA", direction="l", linebreak="al", specials={ "font", 0x0392 }, unicodeslot=0x1D6A9, visual="bf", }, [0x1D6AA]={ category="lu", description="MATHEMATICAL BOLD CAPITAL GAMMA", direction="l", linebreak="al", specials={ "font", 0x0393 }, unicodeslot=0x1D6AA, visual="bf", }, [0x1D6AB]={ category="lu", description="MATHEMATICAL BOLD CAPITAL DELTA", direction="l", linebreak="al", specials={ "font", 0x0394 }, unicodeslot=0x1D6AB, visual="bf", }, [0x1D6AC]={ category="lu", description="MATHEMATICAL BOLD CAPITAL EPSILON", direction="l", linebreak="al", specials={ "font", 0x0395 }, unicodeslot=0x1D6AC, visual="bf", }, [0x1D6AD]={ category="lu", description="MATHEMATICAL BOLD CAPITAL ZETA", direction="l", linebreak="al", specials={ "font", 0x0396 }, unicodeslot=0x1D6AD, visual="bf", }, [0x1D6AE]={ category="lu", description="MATHEMATICAL BOLD CAPITAL ETA", direction="l", linebreak="al", specials={ "font", 0x0397 }, unicodeslot=0x1D6AE, visual="bf", }, [0x1D6AF]={ category="lu", description="MATHEMATICAL BOLD CAPITAL THETA", direction="l", linebreak="al", specials={ "font", 0x0398 }, unicodeslot=0x1D6AF, visual="bf", }, [0x1D6B0]={ category="lu", description="MATHEMATICAL BOLD CAPITAL IOTA", direction="l", linebreak="al", specials={ "font", 0x0399 }, unicodeslot=0x1D6B0, visual="bf", }, [0x1D6B1]={ category="lu", description="MATHEMATICAL BOLD CAPITAL KAPPA", direction="l", linebreak="al", specials={ "font", 0x039A }, unicodeslot=0x1D6B1, visual="bf", }, [0x1D6B2]={ category="lu", description="MATHEMATICAL BOLD CAPITAL LAMDA", direction="l", linebreak="al", specials={ "font", 0x039B }, unicodeslot=0x1D6B2, visual="bf", }, [0x1D6B3]={ category="lu", description="MATHEMATICAL BOLD CAPITAL MU", direction="l", linebreak="al", specials={ "font", 0x039C }, unicodeslot=0x1D6B3, visual="bf", }, [0x1D6B4]={ category="lu", description="MATHEMATICAL BOLD CAPITAL NU", direction="l", linebreak="al", specials={ "font", 0x039D }, unicodeslot=0x1D6B4, visual="bf", }, [0x1D6B5]={ category="lu", description="MATHEMATICAL BOLD CAPITAL XI", direction="l", linebreak="al", specials={ "font", 0x039E }, unicodeslot=0x1D6B5, visual="bf", }, [0x1D6B6]={ category="lu", description="MATHEMATICAL BOLD CAPITAL OMICRON", direction="l", linebreak="al", specials={ "font", 0x039F }, unicodeslot=0x1D6B6, visual="bf", }, [0x1D6B7]={ category="lu", description="MATHEMATICAL BOLD CAPITAL PI", direction="l", linebreak="al", specials={ "font", 0x03A0 }, unicodeslot=0x1D6B7, visual="bf", }, [0x1D6B8]={ category="lu", description="MATHEMATICAL BOLD CAPITAL RHO", direction="l", linebreak="al", specials={ "font", 0x03A1 }, unicodeslot=0x1D6B8, visual="bf", }, [0x1D6B9]={ category="lu", description="MATHEMATICAL BOLD CAPITAL THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F4 }, unicodeslot=0x1D6B9, visual="bf", }, [0x1D6BA]={ category="lu", description="MATHEMATICAL BOLD CAPITAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03A3 }, unicodeslot=0x1D6BA, visual="bf", }, [0x1D6BB]={ category="lu", description="MATHEMATICAL BOLD CAPITAL TAU", direction="l", linebreak="al", specials={ "font", 0x03A4 }, unicodeslot=0x1D6BB, visual="bf", }, [0x1D6BC]={ category="lu", description="MATHEMATICAL BOLD CAPITAL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03A5 }, unicodeslot=0x1D6BC, visual="bf", }, [0x1D6BD]={ category="lu", description="MATHEMATICAL BOLD CAPITAL PHI", direction="l", linebreak="al", specials={ "font", 0x03A6 }, unicodeslot=0x1D6BD, visual="bf", }, [0x1D6BE]={ category="lu", description="MATHEMATICAL BOLD CAPITAL CHI", direction="l", linebreak="al", specials={ "font", 0x03A7 }, unicodeslot=0x1D6BE, visual="bf", }, [0x1D6BF]={ category="lu", description="MATHEMATICAL BOLD CAPITAL PSI", direction="l", linebreak="al", specials={ "font", 0x03A8 }, unicodeslot=0x1D6BF, visual="bf", }, [0x1D6C0]={ category="lu", description="MATHEMATICAL BOLD CAPITAL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03A9 }, unicodeslot=0x1D6C0, visual="bf", }, [0x1D6C1]={ category="sm", description="MATHEMATICAL BOLD NABLA", direction="l", linebreak="al", specials={ "font", 0x2207 }, unicodeslot=0x1D6C1, visual="bf", }, [0x1D6C2]={ category="ll", description="MATHEMATICAL BOLD SMALL ALPHA", direction="l", linebreak="al", specials={ "font", 0x03B1 }, unicodeslot=0x1D6C2, visual="bf", }, [0x1D6C3]={ category="ll", description="MATHEMATICAL BOLD SMALL BETA", direction="l", linebreak="al", specials={ "font", 0x03B2 }, unicodeslot=0x1D6C3, visual="bf", }, [0x1D6C4]={ category="ll", description="MATHEMATICAL BOLD SMALL GAMMA", direction="l", linebreak="al", specials={ "font", 0x03B3 }, unicodeslot=0x1D6C4, visual="bf", }, [0x1D6C5]={ category="ll", description="MATHEMATICAL BOLD SMALL DELTA", direction="l", linebreak="al", specials={ "font", 0x03B4 }, unicodeslot=0x1D6C5, visual="bf", }, [0x1D6C6]={ category="ll", description="MATHEMATICAL BOLD SMALL EPSILON", direction="l", linebreak="al", specials={ "font", 0x03B5 }, unicodeslot=0x1D6C6, visual="bf", }, [0x1D6C7]={ category="ll", description="MATHEMATICAL BOLD SMALL ZETA", direction="l", linebreak="al", specials={ "font", 0x03B6 }, unicodeslot=0x1D6C7, visual="bf", }, [0x1D6C8]={ category="ll", description="MATHEMATICAL BOLD SMALL ETA", direction="l", linebreak="al", specials={ "font", 0x03B7 }, unicodeslot=0x1D6C8, visual="bf", }, [0x1D6C9]={ category="ll", description="MATHEMATICAL BOLD SMALL THETA", direction="l", linebreak="al", specials={ "font", 0x03B8 }, unicodeslot=0x1D6C9, visual="bf", }, [0x1D6CA]={ category="ll", description="MATHEMATICAL BOLD SMALL IOTA", direction="l", linebreak="al", specials={ "font", 0x03B9 }, unicodeslot=0x1D6CA, visual="bf", }, [0x1D6CB]={ category="ll", description="MATHEMATICAL BOLD SMALL KAPPA", direction="l", linebreak="al", specials={ "font", 0x03BA }, unicodeslot=0x1D6CB, visual="bf", }, [0x1D6CC]={ category="ll", description="MATHEMATICAL BOLD SMALL LAMDA", direction="l", linebreak="al", specials={ "font", 0x03BB }, unicodeslot=0x1D6CC, visual="bf", }, [0x1D6CD]={ category="ll", description="MATHEMATICAL BOLD SMALL MU", direction="l", linebreak="al", specials={ "font", 0x03BC }, unicodeslot=0x1D6CD, visual="bf", }, [0x1D6CE]={ category="ll", description="MATHEMATICAL BOLD SMALL NU", direction="l", linebreak="al", specials={ "font", 0x03BD }, unicodeslot=0x1D6CE, visual="bf", }, [0x1D6CF]={ category="ll", description="MATHEMATICAL BOLD SMALL XI", direction="l", linebreak="al", specials={ "font", 0x03BE }, unicodeslot=0x1D6CF, visual="bf", }, [0x1D6D0]={ category="ll", description="MATHEMATICAL BOLD SMALL OMICRON", direction="l", linebreak="al", specials={ "font", 0x03BF }, unicodeslot=0x1D6D0, visual="bf", }, [0x1D6D1]={ category="ll", description="MATHEMATICAL BOLD SMALL PI", direction="l", linebreak="al", specials={ "font", 0x03C0 }, unicodeslot=0x1D6D1, visual="bf", }, [0x1D6D2]={ category="ll", description="MATHEMATICAL BOLD SMALL RHO", direction="l", linebreak="al", specials={ "font", 0x03C1 }, unicodeslot=0x1D6D2, visual="bf", }, [0x1D6D3]={ category="ll", description="MATHEMATICAL BOLD SMALL FINAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C2 }, unicodeslot=0x1D6D3, visual="bf", }, [0x1D6D4]={ category="ll", description="MATHEMATICAL BOLD SMALL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C3 }, unicodeslot=0x1D6D4, visual="bf", }, [0x1D6D5]={ category="ll", description="MATHEMATICAL BOLD SMALL TAU", direction="l", linebreak="al", specials={ "font", 0x03C4 }, unicodeslot=0x1D6D5, visual="bf", }, [0x1D6D6]={ category="ll", description="MATHEMATICAL BOLD SMALL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03C5 }, unicodeslot=0x1D6D6, visual="bf", }, [0x1D6D7]={ category="ll", description="MATHEMATICAL BOLD SMALL PHI", direction="l", linebreak="al", specials={ "font", 0x03C6 }, unicodeslot=0x1D6D7, visual="bf", }, [0x1D6D8]={ category="ll", description="MATHEMATICAL BOLD SMALL CHI", direction="l", linebreak="al", specials={ "font", 0x03C7 }, unicodeslot=0x1D6D8, visual="bf", }, [0x1D6D9]={ category="ll", description="MATHEMATICAL BOLD SMALL PSI", direction="l", linebreak="al", specials={ "font", 0x03C8 }, unicodeslot=0x1D6D9, visual="bf", }, [0x1D6DA]={ category="ll", description="MATHEMATICAL BOLD SMALL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03C9 }, unicodeslot=0x1D6DA, visual="bf", }, [0x1D6DB]={ category="sm", description="MATHEMATICAL BOLD PARTIAL DIFFERENTIAL", direction="on", linebreak="al", specials={ "font", 0x2202 }, unicodeslot=0x1D6DB, visual="bf", }, [0x1D6DC]={ category="ll", description="MATHEMATICAL BOLD EPSILON SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F5 }, unicodeslot=0x1D6DC, visual="bf", }, [0x1D6DD]={ category="ll", description="MATHEMATICAL BOLD THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D1 }, unicodeslot=0x1D6DD, visual="bf", }, [0x1D6DE]={ category="ll", description="MATHEMATICAL BOLD KAPPA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F0 }, unicodeslot=0x1D6DE, visual="bf", }, [0x1D6DF]={ category="ll", description="MATHEMATICAL BOLD PHI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D5 }, unicodeslot=0x1D6DF, visual="bf", }, [0x1D6E0]={ category="ll", description="MATHEMATICAL BOLD RHO SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F1 }, unicodeslot=0x1D6E0, visual="bf", }, [0x1D6E1]={ category="ll", description="MATHEMATICAL BOLD PI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D6 }, unicodeslot=0x1D6E1, visual="bf", }, [0x1D6E2]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL ALPHA", direction="l", linebreak="al", specials={ "font", 0x0391 }, unicodeslot=0x1D6E2, visual="it", }, [0x1D6E3]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL BETA", direction="l", linebreak="al", specials={ "font", 0x0392 }, unicodeslot=0x1D6E3, visual="it", }, [0x1D6E4]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL GAMMA", direction="l", linebreak="al", specials={ "font", 0x0393 }, unicodeslot=0x1D6E4, visual="it", }, [0x1D6E5]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL DELTA", direction="l", linebreak="al", specials={ "font", 0x0394 }, unicodeslot=0x1D6E5, visual="it", }, [0x1D6E6]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL EPSILON", direction="l", linebreak="al", specials={ "font", 0x0395 }, unicodeslot=0x1D6E6, visual="it", }, [0x1D6E7]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL ZETA", direction="l", linebreak="al", specials={ "font", 0x0396 }, unicodeslot=0x1D6E7, visual="it", }, [0x1D6E8]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL ETA", direction="l", linebreak="al", specials={ "font", 0x0397 }, unicodeslot=0x1D6E8, visual="it", }, [0x1D6E9]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL THETA", direction="l", linebreak="al", specials={ "font", 0x0398 }, unicodeslot=0x1D6E9, visual="it", }, [0x1D6EA]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL IOTA", direction="l", linebreak="al", specials={ "font", 0x0399 }, unicodeslot=0x1D6EA, visual="it", }, [0x1D6EB]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL KAPPA", direction="l", linebreak="al", specials={ "font", 0x039A }, unicodeslot=0x1D6EB, visual="it", }, [0x1D6EC]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL LAMDA", direction="l", linebreak="al", specials={ "font", 0x039B }, unicodeslot=0x1D6EC, visual="it", }, [0x1D6ED]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL MU", direction="l", linebreak="al", specials={ "font", 0x039C }, unicodeslot=0x1D6ED, visual="it", }, [0x1D6EE]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL NU", direction="l", linebreak="al", specials={ "font", 0x039D }, unicodeslot=0x1D6EE, visual="it", }, [0x1D6EF]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL XI", direction="l", linebreak="al", specials={ "font", 0x039E }, unicodeslot=0x1D6EF, visual="it", }, [0x1D6F0]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL OMICRON", direction="l", linebreak="al", specials={ "font", 0x039F }, unicodeslot=0x1D6F0, visual="it", }, [0x1D6F1]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL PI", direction="l", linebreak="al", specials={ "font", 0x03A0 }, unicodeslot=0x1D6F1, visual="it", }, [0x1D6F2]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL RHO", direction="l", linebreak="al", specials={ "font", 0x03A1 }, unicodeslot=0x1D6F2, visual="it", }, [0x1D6F3]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F4 }, unicodeslot=0x1D6F3, visual="it", }, [0x1D6F4]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03A3 }, unicodeslot=0x1D6F4, visual="it", }, [0x1D6F5]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL TAU", direction="l", linebreak="al", specials={ "font", 0x03A4 }, unicodeslot=0x1D6F5, visual="it", }, [0x1D6F6]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03A5 }, unicodeslot=0x1D6F6, visual="it", }, [0x1D6F7]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL PHI", direction="l", linebreak="al", specials={ "font", 0x03A6 }, unicodeslot=0x1D6F7, visual="it", }, [0x1D6F8]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL CHI", direction="l", linebreak="al", specials={ "font", 0x03A7 }, unicodeslot=0x1D6F8, visual="it", }, [0x1D6F9]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL PSI", direction="l", linebreak="al", specials={ "font", 0x03A8 }, unicodeslot=0x1D6F9, visual="it", }, [0x1D6FA]={ category="lu", description="MATHEMATICAL ITALIC CAPITAL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03A9 }, unicodeslot=0x1D6FA, visual="it", }, [0x1D6FB]={ category="sm", comment="mathname='nabla'", description="MATHEMATICAL ITALIC NABLA", direction="l", linebreak="al", mathclass="default", specials={ "font", 0x2207 }, unicodeslot=0x1D6FB, visual="it", }, [0x1D6FC]={ category="ll", description="MATHEMATICAL ITALIC SMALL ALPHA", direction="l", linebreak="al", specials={ "font", 0x03B1 }, unicodeslot=0x1D6FC, visual="it", }, [0x1D6FD]={ category="ll", description="MATHEMATICAL ITALIC SMALL BETA", direction="l", linebreak="al", specials={ "font", 0x03B2 }, unicodeslot=0x1D6FD, visual="it", }, [0x1D6FE]={ category="ll", description="MATHEMATICAL ITALIC SMALL GAMMA", direction="l", linebreak="al", specials={ "font", 0x03B3 }, unicodeslot=0x1D6FE, visual="it", }, [0x1D6FF]={ category="ll", description="MATHEMATICAL ITALIC SMALL DELTA", direction="l", linebreak="al", specials={ "font", 0x03B4 }, unicodeslot=0x1D6FF, visual="it", }, [0x1D700]={ category="ll", description="MATHEMATICAL ITALIC SMALL EPSILON", direction="l", linebreak="al", specials={ "font", 0x03B5 }, unicodeslot=0x1D700, visual="it", }, [0x1D701]={ category="ll", description="MATHEMATICAL ITALIC SMALL ZETA", direction="l", linebreak="al", specials={ "font", 0x03B6 }, unicodeslot=0x1D701, visual="it", }, [0x1D702]={ category="ll", description="MATHEMATICAL ITALIC SMALL ETA", direction="l", linebreak="al", specials={ "font", 0x03B7 }, unicodeslot=0x1D702, visual="it", }, [0x1D703]={ category="ll", description="MATHEMATICAL ITALIC SMALL THETA", direction="l", linebreak="al", specials={ "font", 0x03B8 }, unicodeslot=0x1D703, visual="it", }, [0x1D704]={ category="ll", description="MATHEMATICAL ITALIC SMALL IOTA", direction="l", linebreak="al", specials={ "font", 0x03B9 }, unicodeslot=0x1D704, visual="it", }, [0x1D705]={ category="ll", description="MATHEMATICAL ITALIC SMALL KAPPA", direction="l", linebreak="al", specials={ "font", 0x03BA }, unicodeslot=0x1D705, visual="it", }, [0x1D706]={ category="ll", description="MATHEMATICAL ITALIC SMALL LAMDA", direction="l", linebreak="al", specials={ "font", 0x03BB }, unicodeslot=0x1D706, visual="it", }, [0x1D707]={ category="ll", description="MATHEMATICAL ITALIC SMALL MU", direction="l", linebreak="al", specials={ "font", 0x03BC }, unicodeslot=0x1D707, visual="it", }, [0x1D708]={ category="ll", description="MATHEMATICAL ITALIC SMALL NU", direction="l", linebreak="al", specials={ "font", 0x03BD }, unicodeslot=0x1D708, visual="it", }, [0x1D709]={ category="ll", description="MATHEMATICAL ITALIC SMALL XI", direction="l", linebreak="al", specials={ "font", 0x03BE }, unicodeslot=0x1D709, visual="it", }, [0x1D70A]={ category="ll", description="MATHEMATICAL ITALIC SMALL OMICRON", direction="l", linebreak="al", specials={ "font", 0x03BF }, unicodeslot=0x1D70A, visual="it", }, [0x1D70B]={ category="ll", description="MATHEMATICAL ITALIC SMALL PI", direction="l", linebreak="al", specials={ "font", 0x03C0 }, unicodeslot=0x1D70B, visual="it", }, [0x1D70C]={ category="ll", description="MATHEMATICAL ITALIC SMALL RHO", direction="l", linebreak="al", specials={ "font", 0x03C1 }, unicodeslot=0x1D70C, visual="it", }, [0x1D70D]={ category="ll", description="MATHEMATICAL ITALIC SMALL FINAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C2 }, unicodeslot=0x1D70D, visual="it", }, [0x1D70E]={ category="ll", description="MATHEMATICAL ITALIC SMALL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C3 }, unicodeslot=0x1D70E, visual="it", }, [0x1D70F]={ category="ll", description="MATHEMATICAL ITALIC SMALL TAU", direction="l", linebreak="al", specials={ "font", 0x03C4 }, unicodeslot=0x1D70F, visual="it", }, [0x1D710]={ category="ll", description="MATHEMATICAL ITALIC SMALL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03C5 }, unicodeslot=0x1D710, visual="it", }, [0x1D711]={ category="ll", description="MATHEMATICAL ITALIC SMALL PHI", direction="l", linebreak="al", specials={ "font", 0x03C6 }, unicodeslot=0x1D711, visual="it", }, [0x1D712]={ category="ll", description="MATHEMATICAL ITALIC SMALL CHI", direction="l", linebreak="al", specials={ "font", 0x03C7 }, unicodeslot=0x1D712, visual="it", }, [0x1D713]={ category="ll", description="MATHEMATICAL ITALIC SMALL PSI", direction="l", linebreak="al", specials={ "font", 0x03C8 }, unicodeslot=0x1D713, visual="it", }, [0x1D714]={ category="ll", description="MATHEMATICAL ITALIC SMALL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03C9 }, unicodeslot=0x1D714, visual="it", }, [0x1D715]={ category="sm", description="MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL", direction="on", linebreak="al", specials={ "font", 0x2202 }, unicodeslot=0x1D715, visual="it", }, [0x1D716]={ category="ll", description="MATHEMATICAL ITALIC EPSILON SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F5 }, unicodeslot=0x1D716, visual="it", }, [0x1D717]={ category="ll", description="MATHEMATICAL ITALIC THETA SYMBOL", direction="l", linebreak="al", mathclass="default", mathname="vartheta", specials={ "font", 0x03D1 }, unicodeslot=0x1D717, visual="it", }, [0x1D718]={ category="ll", description="MATHEMATICAL ITALIC KAPPA SYMBOL", direction="l", linebreak="al", mathclass="default", mathname="varkappa", specials={ "font", 0x03F0 }, unicodeslot=0x1D718, visual="it", }, [0x1D719]={ category="ll", description="MATHEMATICAL ITALIC PHI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D5 }, unicodeslot=0x1D719, visual="it", }, [0x1D71A]={ category="ll", description="MATHEMATICAL ITALIC RHO SYMBOL", direction="l", linebreak="al", mathclass="variable", mathname="varrho", specials={ "font", 0x03F1 }, unicodeslot=0x1D71A, visual="it", }, [0x1D71B]={ category="ll", description="MATHEMATICAL ITALIC PI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D6 }, unicodeslot=0x1D71B, visual="it", }, [0x1D71C]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL ALPHA", direction="l", linebreak="al", specials={ "font", 0x0391 }, unicodeslot=0x1D71C, visual="bi", }, [0x1D71D]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL BETA", direction="l", linebreak="al", specials={ "font", 0x0392 }, unicodeslot=0x1D71D, visual="bi", }, [0x1D71E]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL GAMMA", direction="l", linebreak="al", specials={ "font", 0x0393 }, unicodeslot=0x1D71E, visual="bi", }, [0x1D71F]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL DELTA", direction="l", linebreak="al", specials={ "font", 0x0394 }, unicodeslot=0x1D71F, visual="bi", }, [0x1D720]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL EPSILON", direction="l", linebreak="al", specials={ "font", 0x0395 }, unicodeslot=0x1D720, visual="bi", }, [0x1D721]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL ZETA", direction="l", linebreak="al", specials={ "font", 0x0396 }, unicodeslot=0x1D721, visual="bi", }, [0x1D722]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL ETA", direction="l", linebreak="al", specials={ "font", 0x0397 }, unicodeslot=0x1D722, visual="bi", }, [0x1D723]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL THETA", direction="l", linebreak="al", specials={ "font", 0x0398 }, unicodeslot=0x1D723, visual="bi", }, [0x1D724]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL IOTA", direction="l", linebreak="al", specials={ "font", 0x0399 }, unicodeslot=0x1D724, visual="bi", }, [0x1D725]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL KAPPA", direction="l", linebreak="al", specials={ "font", 0x039A }, unicodeslot=0x1D725, visual="bi", }, [0x1D726]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL LAMDA", direction="l", linebreak="al", specials={ "font", 0x039B }, unicodeslot=0x1D726, visual="bi", }, [0x1D727]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL MU", direction="l", linebreak="al", specials={ "font", 0x039C }, unicodeslot=0x1D727, visual="bi", }, [0x1D728]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL NU", direction="l", linebreak="al", specials={ "font", 0x039D }, unicodeslot=0x1D728, visual="bi", }, [0x1D729]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL XI", direction="l", linebreak="al", specials={ "font", 0x039E }, unicodeslot=0x1D729, visual="bi", }, [0x1D72A]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL OMICRON", direction="l", linebreak="al", specials={ "font", 0x039F }, unicodeslot=0x1D72A, visual="bi", }, [0x1D72B]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL PI", direction="l", linebreak="al", specials={ "font", 0x03A0 }, unicodeslot=0x1D72B, visual="bi", }, [0x1D72C]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL RHO", direction="l", linebreak="al", specials={ "font", 0x03A1 }, unicodeslot=0x1D72C, visual="bi", }, [0x1D72D]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F4 }, unicodeslot=0x1D72D, visual="bi", }, [0x1D72E]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03A3 }, unicodeslot=0x1D72E, visual="bi", }, [0x1D72F]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL TAU", direction="l", linebreak="al", specials={ "font", 0x03A4 }, unicodeslot=0x1D72F, visual="bi", }, [0x1D730]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03A5 }, unicodeslot=0x1D730, visual="bi", }, [0x1D731]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL PHI", direction="l", linebreak="al", specials={ "font", 0x03A6 }, unicodeslot=0x1D731, visual="bi", }, [0x1D732]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL CHI", direction="l", linebreak="al", specials={ "font", 0x03A7 }, unicodeslot=0x1D732, visual="bi", }, [0x1D733]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL PSI", direction="l", linebreak="al", specials={ "font", 0x03A8 }, unicodeslot=0x1D733, visual="bi", }, [0x1D734]={ category="lu", description="MATHEMATICAL BOLD ITALIC CAPITAL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03A9 }, unicodeslot=0x1D734, visual="bi", }, [0x1D735]={ category="sm", description="MATHEMATICAL BOLD ITALIC NABLA", direction="l", linebreak="al", specials={ "font", 0x2207 }, unicodeslot=0x1D735, visual="bi", }, [0x1D736]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL ALPHA", direction="l", linebreak="al", specials={ "font", 0x03B1 }, unicodeslot=0x1D736, visual="bi", }, [0x1D737]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL BETA", direction="l", linebreak="al", specials={ "font", 0x03B2 }, unicodeslot=0x1D737, visual="bi", }, [0x1D738]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL GAMMA", direction="l", linebreak="al", specials={ "font", 0x03B3 }, unicodeslot=0x1D738, visual="bi", }, [0x1D739]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL DELTA", direction="l", linebreak="al", specials={ "font", 0x03B4 }, unicodeslot=0x1D739, visual="bi", }, [0x1D73A]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL EPSILON", direction="l", linebreak="al", specials={ "font", 0x03B5 }, unicodeslot=0x1D73A, visual="bi", }, [0x1D73B]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL ZETA", direction="l", linebreak="al", specials={ "font", 0x03B6 }, unicodeslot=0x1D73B, visual="bi", }, [0x1D73C]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL ETA", direction="l", linebreak="al", specials={ "font", 0x03B7 }, unicodeslot=0x1D73C, visual="bi", }, [0x1D73D]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL THETA", direction="l", linebreak="al", specials={ "font", 0x03B8 }, unicodeslot=0x1D73D, visual="bi", }, [0x1D73E]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL IOTA", direction="l", linebreak="al", specials={ "font", 0x03B9 }, unicodeslot=0x1D73E, visual="bi", }, [0x1D73F]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL KAPPA", direction="l", linebreak="al", specials={ "font", 0x03BA }, unicodeslot=0x1D73F, visual="bi", }, [0x1D740]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL LAMDA", direction="l", linebreak="al", specials={ "font", 0x03BB }, unicodeslot=0x1D740, visual="bi", }, [0x1D741]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL MU", direction="l", linebreak="al", specials={ "font", 0x03BC }, unicodeslot=0x1D741, visual="bi", }, [0x1D742]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL NU", direction="l", linebreak="al", specials={ "font", 0x03BD }, unicodeslot=0x1D742, visual="bi", }, [0x1D743]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL XI", direction="l", linebreak="al", specials={ "font", 0x03BE }, unicodeslot=0x1D743, visual="bi", }, [0x1D744]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL OMICRON", direction="l", linebreak="al", specials={ "font", 0x03BF }, unicodeslot=0x1D744, visual="bi", }, [0x1D745]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL PI", direction="l", linebreak="al", specials={ "font", 0x03C0 }, unicodeslot=0x1D745, visual="bi", }, [0x1D746]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL RHO", direction="l", linebreak="al", specials={ "font", 0x03C1 }, unicodeslot=0x1D746, visual="bi", }, [0x1D747]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C2 }, unicodeslot=0x1D747, visual="bi", }, [0x1D748]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C3 }, unicodeslot=0x1D748, visual="bi", }, [0x1D749]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL TAU", direction="l", linebreak="al", specials={ "font", 0x03C4 }, unicodeslot=0x1D749, visual="bi", }, [0x1D74A]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03C5 }, unicodeslot=0x1D74A, visual="bi", }, [0x1D74B]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL PHI", direction="l", linebreak="al", specials={ "font", 0x03C6 }, unicodeslot=0x1D74B, visual="bi", }, [0x1D74C]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL CHI", direction="l", linebreak="al", specials={ "font", 0x03C7 }, unicodeslot=0x1D74C, visual="bi", }, [0x1D74D]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL PSI", direction="l", linebreak="al", specials={ "font", 0x03C8 }, unicodeslot=0x1D74D, visual="bi", }, [0x1D74E]={ category="ll", description="MATHEMATICAL BOLD ITALIC SMALL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03C9 }, unicodeslot=0x1D74E, visual="bi", }, [0x1D74F]={ category="sm", description="MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL", direction="on", linebreak="al", specials={ "font", 0x2202 }, unicodeslot=0x1D74F, visual="bi", }, [0x1D750]={ category="ll", description="MATHEMATICAL BOLD ITALIC EPSILON SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F5 }, unicodeslot=0x1D750, visual="bi", }, [0x1D751]={ category="ll", description="MATHEMATICAL BOLD ITALIC THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D1 }, unicodeslot=0x1D751, visual="bi", }, [0x1D752]={ category="ll", description="MATHEMATICAL BOLD ITALIC KAPPA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F0 }, unicodeslot=0x1D752, visual="bi", }, [0x1D753]={ category="ll", description="MATHEMATICAL BOLD ITALIC PHI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D5 }, unicodeslot=0x1D753, visual="bi", }, [0x1D754]={ category="ll", description="MATHEMATICAL BOLD ITALIC RHO SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F1 }, unicodeslot=0x1D754, visual="bi", }, [0x1D755]={ category="ll", description="MATHEMATICAL BOLD ITALIC PI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D6 }, unicodeslot=0x1D755, visual="bi", }, [0x1D756]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA", direction="l", linebreak="al", specials={ "font", 0x0391 }, unicodeslot=0x1D756, visual="bf", }, [0x1D757]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA", direction="l", linebreak="al", specials={ "font", 0x0392 }, unicodeslot=0x1D757, visual="bf", }, [0x1D758]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA", direction="l", linebreak="al", specials={ "font", 0x0393 }, unicodeslot=0x1D758, visual="bf", }, [0x1D759]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA", direction="l", linebreak="al", specials={ "font", 0x0394 }, unicodeslot=0x1D759, visual="bf", }, [0x1D75A]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON", direction="l", linebreak="al", specials={ "font", 0x0395 }, unicodeslot=0x1D75A, visual="bf", }, [0x1D75B]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA", direction="l", linebreak="al", specials={ "font", 0x0396 }, unicodeslot=0x1D75B, visual="bf", }, [0x1D75C]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA", direction="l", linebreak="al", specials={ "font", 0x0397 }, unicodeslot=0x1D75C, visual="bf", }, [0x1D75D]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA", direction="l", linebreak="al", specials={ "font", 0x0398 }, unicodeslot=0x1D75D, visual="bf", }, [0x1D75E]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA", direction="l", linebreak="al", specials={ "font", 0x0399 }, unicodeslot=0x1D75E, visual="bf", }, [0x1D75F]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA", direction="l", linebreak="al", specials={ "font", 0x039A }, unicodeslot=0x1D75F, visual="bf", }, [0x1D760]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA", direction="l", linebreak="al", specials={ "font", 0x039B }, unicodeslot=0x1D760, visual="bf", }, [0x1D761]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL MU", direction="l", linebreak="al", specials={ "font", 0x039C }, unicodeslot=0x1D761, visual="bf", }, [0x1D762]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL NU", direction="l", linebreak="al", specials={ "font", 0x039D }, unicodeslot=0x1D762, visual="bf", }, [0x1D763]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL XI", direction="l", linebreak="al", specials={ "font", 0x039E }, unicodeslot=0x1D763, visual="bf", }, [0x1D764]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON", direction="l", linebreak="al", specials={ "font", 0x039F }, unicodeslot=0x1D764, visual="bf", }, [0x1D765]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL PI", direction="l", linebreak="al", specials={ "font", 0x03A0 }, unicodeslot=0x1D765, visual="bf", }, [0x1D766]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO", direction="l", linebreak="al", specials={ "font", 0x03A1 }, unicodeslot=0x1D766, visual="bf", }, [0x1D767]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F4 }, unicodeslot=0x1D767, visual="bf", }, [0x1D768]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03A3 }, unicodeslot=0x1D768, visual="bf", }, [0x1D769]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU", direction="l", linebreak="al", specials={ "font", 0x03A4 }, unicodeslot=0x1D769, visual="bf", }, [0x1D76A]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03A5 }, unicodeslot=0x1D76A, visual="bf", }, [0x1D76B]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI", direction="l", linebreak="al", specials={ "font", 0x03A6 }, unicodeslot=0x1D76B, visual="bf", }, [0x1D76C]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI", direction="l", linebreak="al", specials={ "font", 0x03A7 }, unicodeslot=0x1D76C, visual="bf", }, [0x1D76D]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI", direction="l", linebreak="al", specials={ "font", 0x03A8 }, unicodeslot=0x1D76D, visual="bf", }, [0x1D76E]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03A9 }, unicodeslot=0x1D76E, visual="bf", }, [0x1D76F]={ category="sm", description="MATHEMATICAL SANS-SERIF BOLD NABLA", direction="l", linebreak="al", specials={ "font", 0x2207 }, unicodeslot=0x1D76F, visual="bf", }, [0x1D770]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA", direction="l", linebreak="al", specials={ "font", 0x03B1 }, unicodeslot=0x1D770, visual="bf", }, [0x1D771]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL BETA", direction="l", linebreak="al", specials={ "font", 0x03B2 }, unicodeslot=0x1D771, visual="bf", }, [0x1D772]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA", direction="l", linebreak="al", specials={ "font", 0x03B3 }, unicodeslot=0x1D772, visual="bf", }, [0x1D773]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL DELTA", direction="l", linebreak="al", specials={ "font", 0x03B4 }, unicodeslot=0x1D773, visual="bf", }, [0x1D774]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON", direction="l", linebreak="al", specials={ "font", 0x03B5 }, unicodeslot=0x1D774, visual="bf", }, [0x1D775]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL ZETA", direction="l", linebreak="al", specials={ "font", 0x03B6 }, unicodeslot=0x1D775, visual="bf", }, [0x1D776]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL ETA", direction="l", linebreak="al", specials={ "font", 0x03B7 }, unicodeslot=0x1D776, visual="bf", }, [0x1D777]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL THETA", direction="l", linebreak="al", specials={ "font", 0x03B8 }, unicodeslot=0x1D777, visual="bf", }, [0x1D778]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL IOTA", direction="l", linebreak="al", specials={ "font", 0x03B9 }, unicodeslot=0x1D778, visual="bf", }, [0x1D779]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA", direction="l", linebreak="al", specials={ "font", 0x03BA }, unicodeslot=0x1D779, visual="bf", }, [0x1D77A]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA", direction="l", linebreak="al", specials={ "font", 0x03BB }, unicodeslot=0x1D77A, visual="bf", }, [0x1D77B]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL MU", direction="l", linebreak="al", specials={ "font", 0x03BC }, unicodeslot=0x1D77B, visual="bf", }, [0x1D77C]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL NU", direction="l", linebreak="al", specials={ "font", 0x03BD }, unicodeslot=0x1D77C, visual="bf", }, [0x1D77D]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL XI", direction="l", linebreak="al", specials={ "font", 0x03BE }, unicodeslot=0x1D77D, visual="bf", }, [0x1D77E]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON", direction="l", linebreak="al", specials={ "font", 0x03BF }, unicodeslot=0x1D77E, visual="bf", }, [0x1D77F]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL PI", direction="l", linebreak="al", specials={ "font", 0x03C0 }, unicodeslot=0x1D77F, visual="bf", }, [0x1D780]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL RHO", direction="l", linebreak="al", specials={ "font", 0x03C1 }, unicodeslot=0x1D780, visual="bf", }, [0x1D781]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C2 }, unicodeslot=0x1D781, visual="bf", }, [0x1D782]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C3 }, unicodeslot=0x1D782, visual="bf", }, [0x1D783]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL TAU", direction="l", linebreak="al", specials={ "font", 0x03C4 }, unicodeslot=0x1D783, visual="bf", }, [0x1D784]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03C5 }, unicodeslot=0x1D784, visual="bf", }, [0x1D785]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL PHI", direction="l", linebreak="al", specials={ "font", 0x03C6 }, unicodeslot=0x1D785, visual="bf", }, [0x1D786]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL CHI", direction="l", linebreak="al", specials={ "font", 0x03C7 }, unicodeslot=0x1D786, visual="bf", }, [0x1D787]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL PSI", direction="l", linebreak="al", specials={ "font", 0x03C8 }, unicodeslot=0x1D787, visual="bf", }, [0x1D788]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03C9 }, unicodeslot=0x1D788, visual="bf", }, [0x1D789]={ category="sm", description="MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL", direction="on", linebreak="al", specials={ "font", 0x2202 }, unicodeslot=0x1D789, visual="bf", }, [0x1D78A]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F5 }, unicodeslot=0x1D78A, visual="bf", }, [0x1D78B]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D1 }, unicodeslot=0x1D78B, visual="bf", }, [0x1D78C]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F0 }, unicodeslot=0x1D78C, visual="bf", }, [0x1D78D]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D5 }, unicodeslot=0x1D78D, visual="bf", }, [0x1D78E]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F1 }, unicodeslot=0x1D78E, visual="bf", }, [0x1D78F]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD PI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D6 }, unicodeslot=0x1D78F, visual="bf", }, [0x1D790]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA", direction="l", linebreak="al", specials={ "font", 0x0391 }, unicodeslot=0x1D790, visual="bi", }, [0x1D791]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA", direction="l", linebreak="al", specials={ "font", 0x0392 }, unicodeslot=0x1D791, visual="bi", }, [0x1D792]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA", direction="l", linebreak="al", specials={ "font", 0x0393 }, unicodeslot=0x1D792, visual="bi", }, [0x1D793]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA", direction="l", linebreak="al", specials={ "font", 0x0394 }, unicodeslot=0x1D793, visual="bi", }, [0x1D794]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON", direction="l", linebreak="al", specials={ "font", 0x0395 }, unicodeslot=0x1D794, visual="bi", }, [0x1D795]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA", direction="l", linebreak="al", specials={ "font", 0x0396 }, unicodeslot=0x1D795, visual="bi", }, [0x1D796]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA", direction="l", linebreak="al", specials={ "font", 0x0397 }, unicodeslot=0x1D796, visual="bi", }, [0x1D797]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA", direction="l", linebreak="al", specials={ "font", 0x0398 }, unicodeslot=0x1D797, visual="bi", }, [0x1D798]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA", direction="l", linebreak="al", specials={ "font", 0x0399 }, unicodeslot=0x1D798, visual="bi", }, [0x1D799]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA", direction="l", linebreak="al", specials={ "font", 0x039A }, unicodeslot=0x1D799, visual="bi", }, [0x1D79A]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA", direction="l", linebreak="al", specials={ "font", 0x039B }, unicodeslot=0x1D79A, visual="bi", }, [0x1D79B]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU", direction="l", linebreak="al", specials={ "font", 0x039C }, unicodeslot=0x1D79B, visual="bi", }, [0x1D79C]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU", direction="l", linebreak="al", specials={ "font", 0x039D }, unicodeslot=0x1D79C, visual="bi", }, [0x1D79D]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI", direction="l", linebreak="al", specials={ "font", 0x039E }, unicodeslot=0x1D79D, visual="bi", }, [0x1D79E]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON", direction="l", linebreak="al", specials={ "font", 0x039F }, unicodeslot=0x1D79E, visual="bi", }, [0x1D79F]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI", direction="l", linebreak="al", specials={ "font", 0x03A0 }, unicodeslot=0x1D79F, visual="bi", }, [0x1D7A0]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO", direction="l", linebreak="al", specials={ "font", 0x03A1 }, unicodeslot=0x1D7A0, visual="bi", }, [0x1D7A1]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F4 }, unicodeslot=0x1D7A1, visual="bi", }, [0x1D7A2]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03A3 }, unicodeslot=0x1D7A2, visual="bi", }, [0x1D7A3]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU", direction="l", linebreak="al", specials={ "font", 0x03A4 }, unicodeslot=0x1D7A3, visual="bi", }, [0x1D7A4]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03A5 }, unicodeslot=0x1D7A4, visual="bi", }, [0x1D7A5]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI", direction="l", linebreak="al", specials={ "font", 0x03A6 }, unicodeslot=0x1D7A5, visual="bi", }, [0x1D7A6]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI", direction="l", linebreak="al", specials={ "font", 0x03A7 }, unicodeslot=0x1D7A6, visual="bi", }, [0x1D7A7]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI", direction="l", linebreak="al", specials={ "font", 0x03A8 }, unicodeslot=0x1D7A7, visual="bi", }, [0x1D7A8]={ category="lu", description="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03A9 }, unicodeslot=0x1D7A8, visual="bi", }, [0x1D7A9]={ category="sm", description="MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA", direction="l", linebreak="al", specials={ "font", 0x2207 }, unicodeslot=0x1D7A9, visual="bi", }, [0x1D7AA]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA", direction="l", linebreak="al", specials={ "font", 0x03B1 }, unicodeslot=0x1D7AA, visual="bi", }, [0x1D7AB]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA", direction="l", linebreak="al", specials={ "font", 0x03B2 }, unicodeslot=0x1D7AB, visual="bi", }, [0x1D7AC]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA", direction="l", linebreak="al", specials={ "font", 0x03B3 }, unicodeslot=0x1D7AC, visual="bi", }, [0x1D7AD]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA", direction="l", linebreak="al", specials={ "font", 0x03B4 }, unicodeslot=0x1D7AD, visual="bi", }, [0x1D7AE]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON", direction="l", linebreak="al", specials={ "font", 0x03B5 }, unicodeslot=0x1D7AE, visual="bi", }, [0x1D7AF]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA", direction="l", linebreak="al", specials={ "font", 0x03B6 }, unicodeslot=0x1D7AF, visual="bi", }, [0x1D7B0]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA", direction="l", linebreak="al", specials={ "font", 0x03B7 }, unicodeslot=0x1D7B0, visual="bi", }, [0x1D7B1]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA", direction="l", linebreak="al", specials={ "font", 0x03B8 }, unicodeslot=0x1D7B1, visual="bi", }, [0x1D7B2]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA", direction="l", linebreak="al", specials={ "font", 0x03B9 }, unicodeslot=0x1D7B2, visual="bi", }, [0x1D7B3]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA", direction="l", linebreak="al", specials={ "font", 0x03BA }, unicodeslot=0x1D7B3, visual="bi", }, [0x1D7B4]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA", direction="l", linebreak="al", specials={ "font", 0x03BB }, unicodeslot=0x1D7B4, visual="bi", }, [0x1D7B5]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU", direction="l", linebreak="al", specials={ "font", 0x03BC }, unicodeslot=0x1D7B5, visual="bi", }, [0x1D7B6]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU", direction="l", linebreak="al", specials={ "font", 0x03BD }, unicodeslot=0x1D7B6, visual="bi", }, [0x1D7B7]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI", direction="l", linebreak="al", specials={ "font", 0x03BE }, unicodeslot=0x1D7B7, visual="bi", }, [0x1D7B8]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON", direction="l", linebreak="al", specials={ "font", 0x03BF }, unicodeslot=0x1D7B8, visual="bi", }, [0x1D7B9]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI", direction="l", linebreak="al", specials={ "font", 0x03C0 }, unicodeslot=0x1D7B9, visual="bi", }, [0x1D7BA]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO", direction="l", linebreak="al", specials={ "font", 0x03C1 }, unicodeslot=0x1D7BA, visual="bi", }, [0x1D7BB]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C2 }, unicodeslot=0x1D7BB, visual="bi", }, [0x1D7BC]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA", direction="l", linebreak="al", specials={ "font", 0x03C3 }, unicodeslot=0x1D7BC, visual="bi", }, [0x1D7BD]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU", direction="l", linebreak="al", specials={ "font", 0x03C4 }, unicodeslot=0x1D7BD, visual="bi", }, [0x1D7BE]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON", direction="l", linebreak="al", specials={ "font", 0x03C5 }, unicodeslot=0x1D7BE, visual="bi", }, [0x1D7BF]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI", direction="l", linebreak="al", specials={ "font", 0x03C6 }, unicodeslot=0x1D7BF, visual="bi", }, [0x1D7C0]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI", direction="l", linebreak="al", specials={ "font", 0x03C7 }, unicodeslot=0x1D7C0, visual="bi", }, [0x1D7C1]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI", direction="l", linebreak="al", specials={ "font", 0x03C8 }, unicodeslot=0x1D7C1, visual="bi", }, [0x1D7C2]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA", direction="l", linebreak="al", specials={ "font", 0x03C9 }, unicodeslot=0x1D7C2, visual="bi", }, [0x1D7C3]={ category="sm", description="MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL", direction="on", linebreak="al", specials={ "font", 0x2202 }, unicodeslot=0x1D7C3, visual="bi", }, [0x1D7C4]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F5 }, unicodeslot=0x1D7C4, visual="bi", }, [0x1D7C5]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D1 }, unicodeslot=0x1D7C5, visual="bi", }, [0x1D7C6]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F0 }, unicodeslot=0x1D7C6, visual="bi", }, [0x1D7C7]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D5 }, unicodeslot=0x1D7C7, visual="bi", }, [0x1D7C8]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03F1 }, unicodeslot=0x1D7C8, visual="bi", }, [0x1D7C9]={ category="ll", description="MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL", direction="l", linebreak="al", specials={ "font", 0x03D6 }, unicodeslot=0x1D7C9, visual="bi", }, [0x1D7CA]={ category="lu", description="MATHEMATICAL BOLD CAPITAL DIGAMMA", direction="l", linebreak="al", specials={ "font", 0x03DC }, unicodeslot=0x1D7CA, visual="bf", }, [0x1D7CB]={ category="ll", description="MATHEMATICAL BOLD SMALL DIGAMMA", direction="l", linebreak="al", specials={ "font", 0x03DD }, unicodeslot=0x1D7CB, visual="bf", }, [0x1D7CE]={ category="nd", description="MATHEMATICAL BOLD DIGIT ZERO", direction="en", linebreak="nu", specials={ "font", 0x0030 }, unicodeslot=0x1D7CE, visual="bf", }, [0x1D7CF]={ category="nd", description="MATHEMATICAL BOLD DIGIT ONE", direction="en", linebreak="nu", specials={ "font", 0x0031 }, unicodeslot=0x1D7CF, visual="bf", }, [0x1D7D0]={ category="nd", description="MATHEMATICAL BOLD DIGIT TWO", direction="en", linebreak="nu", specials={ "font", 0x0032 }, unicodeslot=0x1D7D0, visual="bf", }, [0x1D7D1]={ category="nd", description="MATHEMATICAL BOLD DIGIT THREE", direction="en", linebreak="nu", specials={ "font", 0x0033 }, unicodeslot=0x1D7D1, visual="bf", }, [0x1D7D2]={ category="nd", description="MATHEMATICAL BOLD DIGIT FOUR", direction="en", linebreak="nu", specials={ "font", 0x0034 }, unicodeslot=0x1D7D2, visual="bf", }, [0x1D7D3]={ category="nd", description="MATHEMATICAL BOLD DIGIT FIVE", direction="en", linebreak="nu", specials={ "font", 0x0035 }, unicodeslot=0x1D7D3, visual="bf", }, [0x1D7D4]={ category="nd", description="MATHEMATICAL BOLD DIGIT SIX", direction="en", linebreak="nu", specials={ "font", 0x0036 }, unicodeslot=0x1D7D4, visual="bf", }, [0x1D7D5]={ category="nd", description="MATHEMATICAL BOLD DIGIT SEVEN", direction="en", linebreak="nu", specials={ "font", 0x0037 }, unicodeslot=0x1D7D5, visual="bf", }, [0x1D7D6]={ category="nd", description="MATHEMATICAL BOLD DIGIT EIGHT", direction="en", linebreak="nu", specials={ "font", 0x0038 }, unicodeslot=0x1D7D6, visual="bf", }, [0x1D7D7]={ category="nd", description="MATHEMATICAL BOLD DIGIT NINE", direction="en", linebreak="nu", specials={ "font", 0x0039 }, unicodeslot=0x1D7D7, visual="bf", }, [0x1D7D8]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO", direction="en", linebreak="nu", specials={ "font", 0x0030 }, unicodeslot=0x1D7D8, }, [0x1D7D9]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT ONE", direction="en", linebreak="nu", specials={ "font", 0x0031 }, unicodeslot=0x1D7D9, }, [0x1D7DA]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT TWO", direction="en", linebreak="nu", specials={ "font", 0x0032 }, unicodeslot=0x1D7DA, }, [0x1D7DB]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT THREE", direction="en", linebreak="nu", specials={ "font", 0x0033 }, unicodeslot=0x1D7DB, }, [0x1D7DC]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR", direction="en", linebreak="nu", specials={ "font", 0x0034 }, unicodeslot=0x1D7DC, }, [0x1D7DD]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE", direction="en", linebreak="nu", specials={ "font", 0x0035 }, unicodeslot=0x1D7DD, }, [0x1D7DE]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT SIX", direction="en", linebreak="nu", specials={ "font", 0x0036 }, unicodeslot=0x1D7DE, }, [0x1D7DF]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN", direction="en", linebreak="nu", specials={ "font", 0x0037 }, unicodeslot=0x1D7DF, }, [0x1D7E0]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT", direction="en", linebreak="nu", specials={ "font", 0x0038 }, unicodeslot=0x1D7E0, }, [0x1D7E1]={ category="nd", description="MATHEMATICAL DOUBLE-STRUCK DIGIT NINE", direction="en", linebreak="nu", specials={ "font", 0x0039 }, unicodeslot=0x1D7E1, }, [0x1D7E2]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT ZERO", direction="en", linebreak="nu", specials={ "font", 0x0030 }, unicodeslot=0x1D7E2, }, [0x1D7E3]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT ONE", direction="en", linebreak="nu", specials={ "font", 0x0031 }, unicodeslot=0x1D7E3, }, [0x1D7E4]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT TWO", direction="en", linebreak="nu", specials={ "font", 0x0032 }, unicodeslot=0x1D7E4, }, [0x1D7E5]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT THREE", direction="en", linebreak="nu", specials={ "font", 0x0033 }, unicodeslot=0x1D7E5, }, [0x1D7E6]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT FOUR", direction="en", linebreak="nu", specials={ "font", 0x0034 }, unicodeslot=0x1D7E6, }, [0x1D7E7]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT FIVE", direction="en", linebreak="nu", specials={ "font", 0x0035 }, unicodeslot=0x1D7E7, }, [0x1D7E8]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT SIX", direction="en", linebreak="nu", specials={ "font", 0x0036 }, unicodeslot=0x1D7E8, }, [0x1D7E9]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT SEVEN", direction="en", linebreak="nu", specials={ "font", 0x0037 }, unicodeslot=0x1D7E9, }, [0x1D7EA]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT EIGHT", direction="en", linebreak="nu", specials={ "font", 0x0038 }, unicodeslot=0x1D7EA, }, [0x1D7EB]={ category="nd", description="MATHEMATICAL SANS-SERIF DIGIT NINE", direction="en", linebreak="nu", specials={ "font", 0x0039 }, unicodeslot=0x1D7EB, }, [0x1D7EC]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO", direction="en", linebreak="nu", specials={ "font", 0x0030 }, unicodeslot=0x1D7EC, visual="bf", }, [0x1D7ED]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT ONE", direction="en", linebreak="nu", specials={ "font", 0x0031 }, unicodeslot=0x1D7ED, visual="bf", }, [0x1D7EE]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT TWO", direction="en", linebreak="nu", specials={ "font", 0x0032 }, unicodeslot=0x1D7EE, visual="bf", }, [0x1D7EF]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT THREE", direction="en", linebreak="nu", specials={ "font", 0x0033 }, unicodeslot=0x1D7EF, visual="bf", }, [0x1D7F0]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR", direction="en", linebreak="nu", specials={ "font", 0x0034 }, unicodeslot=0x1D7F0, visual="bf", }, [0x1D7F1]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE", direction="en", linebreak="nu", specials={ "font", 0x0035 }, unicodeslot=0x1D7F1, visual="bf", }, [0x1D7F2]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT SIX", direction="en", linebreak="nu", specials={ "font", 0x0036 }, unicodeslot=0x1D7F2, visual="bf", }, [0x1D7F3]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN", direction="en", linebreak="nu", specials={ "font", 0x0037 }, unicodeslot=0x1D7F3, visual="bf", }, [0x1D7F4]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT", direction="en", linebreak="nu", specials={ "font", 0x0038 }, unicodeslot=0x1D7F4, visual="bf", }, [0x1D7F5]={ category="nd", description="MATHEMATICAL SANS-SERIF BOLD DIGIT NINE", direction="en", linebreak="nu", specials={ "font", 0x0039 }, unicodeslot=0x1D7F5, visual="bf", }, [0x1D7F6]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT ZERO", direction="en", linebreak="nu", specials={ "font", 0x0030 }, unicodeslot=0x1D7F6, }, [0x1D7F7]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT ONE", direction="en", linebreak="nu", specials={ "font", 0x0031 }, unicodeslot=0x1D7F7, }, [0x1D7F8]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT TWO", direction="en", linebreak="nu", specials={ "font", 0x0032 }, unicodeslot=0x1D7F8, }, [0x1D7F9]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT THREE", direction="en", linebreak="nu", specials={ "font", 0x0033 }, unicodeslot=0x1D7F9, }, [0x1D7FA]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT FOUR", direction="en", linebreak="nu", specials={ "font", 0x0034 }, unicodeslot=0x1D7FA, }, [0x1D7FB]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT FIVE", direction="en", linebreak="nu", specials={ "font", 0x0035 }, unicodeslot=0x1D7FB, }, [0x1D7FC]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT SIX", direction="en", linebreak="nu", specials={ "font", 0x0036 }, unicodeslot=0x1D7FC, }, [0x1D7FD]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT SEVEN", direction="en", linebreak="nu", specials={ "font", 0x0037 }, unicodeslot=0x1D7FD, }, [0x1D7FE]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT EIGHT", direction="en", linebreak="nu", specials={ "font", 0x0038 }, unicodeslot=0x1D7FE, }, [0x1D7FF]={ category="nd", description="MATHEMATICAL MONOSPACE DIGIT NINE", direction="en", linebreak="nu", specials={ "font", 0x0039 }, unicodeslot=0x1D7FF, }, [0x1EE00]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL ALEF", direction="al", linebreak="al", specials={ "font", 0x0627 }, unicodeslot=0x1EE00, }, [0x1EE01]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL BEH", direction="al", linebreak="al", specials={ "font", 0x0628 }, unicodeslot=0x1EE01, }, [0x1EE02]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL JEEM", direction="al", linebreak="al", specials={ "font", 0x062C }, unicodeslot=0x1EE02, }, [0x1EE03]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DAL", direction="al", linebreak="al", specials={ "font", 0x062F }, unicodeslot=0x1EE03, }, [0x1EE05]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL WAW", direction="al", linebreak="al", specials={ "font", 0x0648 }, unicodeslot=0x1EE05, }, [0x1EE06]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL ZAIN", direction="al", linebreak="al", specials={ "font", 0x0632 }, unicodeslot=0x1EE06, }, [0x1EE07]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL HAH", direction="al", linebreak="al", specials={ "font", 0x062D }, unicodeslot=0x1EE07, }, [0x1EE08]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAH", direction="al", linebreak="al", specials={ "font", 0x0637 }, unicodeslot=0x1EE08, }, [0x1EE09]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL YEH", direction="al", linebreak="al", specials={ "font", 0x064A }, unicodeslot=0x1EE09, }, [0x1EE0A]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL KAF", direction="al", linebreak="al", specials={ "font", 0x0643 }, unicodeslot=0x1EE0A, }, [0x1EE0B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LAM", direction="al", linebreak="al", specials={ "font", 0x0644 }, unicodeslot=0x1EE0B, }, [0x1EE0C]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL MEEM", direction="al", linebreak="al", specials={ "font", 0x0645 }, unicodeslot=0x1EE0C, }, [0x1EE0D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL NOON", direction="al", linebreak="al", specials={ "font", 0x0646 }, unicodeslot=0x1EE0D, }, [0x1EE0E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL SEEN", direction="al", linebreak="al", specials={ "font", 0x0633 }, unicodeslot=0x1EE0E, }, [0x1EE0F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL AIN", direction="al", linebreak="al", specials={ "font", 0x0639 }, unicodeslot=0x1EE0F, }, [0x1EE10]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL FEH", direction="al", linebreak="al", specials={ "font", 0x0641 }, unicodeslot=0x1EE10, }, [0x1EE11]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL SAD", direction="al", linebreak="al", specials={ "font", 0x0635 }, unicodeslot=0x1EE11, }, [0x1EE12]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL QAF", direction="al", linebreak="al", specials={ "font", 0x0642 }, unicodeslot=0x1EE12, }, [0x1EE13]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL REH", direction="al", linebreak="al", specials={ "font", 0x0631 }, unicodeslot=0x1EE13, }, [0x1EE14]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL SHEEN", direction="al", linebreak="al", specials={ "font", 0x0634 }, unicodeslot=0x1EE14, }, [0x1EE15]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TEH", direction="al", linebreak="al", specials={ "font", 0x062A }, unicodeslot=0x1EE15, }, [0x1EE16]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL THEH", direction="al", linebreak="al", specials={ "font", 0x062B }, unicodeslot=0x1EE16, }, [0x1EE17]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL KHAH", direction="al", linebreak="al", specials={ "font", 0x062E }, unicodeslot=0x1EE17, }, [0x1EE18]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL THAL", direction="al", linebreak="al", specials={ "font", 0x0630 }, unicodeslot=0x1EE18, }, [0x1EE19]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DAD", direction="al", linebreak="al", specials={ "font", 0x0636 }, unicodeslot=0x1EE19, }, [0x1EE1A]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL ZAH", direction="al", linebreak="al", specials={ "font", 0x0638 }, unicodeslot=0x1EE1A, }, [0x1EE1B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL GHAIN", direction="al", linebreak="al", specials={ "font", 0x063A }, unicodeslot=0x1EE1B, }, [0x1EE1C]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOTLESS BEH", direction="al", linebreak="al", specials={ "font", 0x066E }, unicodeslot=0x1EE1C, }, [0x1EE1D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOTLESS NOON", direction="al", linebreak="al", specials={ "font", 0x06BA }, unicodeslot=0x1EE1D, }, [0x1EE1E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOTLESS FEH", direction="al", linebreak="al", specials={ "font", 0x06A1 }, unicodeslot=0x1EE1E, }, [0x1EE1F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOTLESS QAF", direction="al", linebreak="al", specials={ "font", 0x066F }, unicodeslot=0x1EE1F, }, [0x1EE21]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL BEH", direction="al", linebreak="al", specials={ "font", 0x0628 }, unicodeslot=0x1EE21, }, [0x1EE22]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL JEEM", direction="al", linebreak="al", specials={ "font", 0x062C }, unicodeslot=0x1EE22, }, [0x1EE24]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL HEH", direction="al", linebreak="al", specials={ "font", 0x0647 }, unicodeslot=0x1EE24, }, [0x1EE27]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL HAH", direction="al", linebreak="al", specials={ "font", 0x062D }, unicodeslot=0x1EE27, }, [0x1EE29]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL YEH", direction="al", linebreak="al", specials={ "font", 0x064A }, unicodeslot=0x1EE29, }, [0x1EE2A]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL KAF", direction="al", linebreak="al", specials={ "font", 0x0643 }, unicodeslot=0x1EE2A, }, [0x1EE2B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL LAM", direction="al", linebreak="al", specials={ "font", 0x0644 }, unicodeslot=0x1EE2B, }, [0x1EE2C]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL MEEM", direction="al", linebreak="al", specials={ "font", 0x0645 }, unicodeslot=0x1EE2C, }, [0x1EE2D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL NOON", direction="al", linebreak="al", specials={ "font", 0x0646 }, unicodeslot=0x1EE2D, }, [0x1EE2E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL SEEN", direction="al", linebreak="al", specials={ "font", 0x0633 }, unicodeslot=0x1EE2E, }, [0x1EE2F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL AIN", direction="al", linebreak="al", specials={ "font", 0x0639 }, unicodeslot=0x1EE2F, }, [0x1EE30]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL FEH", direction="al", linebreak="al", specials={ "font", 0x0641 }, unicodeslot=0x1EE30, }, [0x1EE31]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL SAD", direction="al", linebreak="al", specials={ "font", 0x0635 }, unicodeslot=0x1EE31, }, [0x1EE32]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL QAF", direction="al", linebreak="al", specials={ "font", 0x0642 }, unicodeslot=0x1EE32, }, [0x1EE34]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL SHEEN", direction="al", linebreak="al", specials={ "font", 0x0634 }, unicodeslot=0x1EE34, }, [0x1EE35]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL TEH", direction="al", linebreak="al", specials={ "font", 0x062A }, unicodeslot=0x1EE35, }, [0x1EE36]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL THEH", direction="al", linebreak="al", specials={ "font", 0x062B }, unicodeslot=0x1EE36, }, [0x1EE37]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL KHAH", direction="al", linebreak="al", specials={ "font", 0x062E }, unicodeslot=0x1EE37, }, [0x1EE39]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL DAD", direction="al", linebreak="al", specials={ "font", 0x0636 }, unicodeslot=0x1EE39, }, [0x1EE3B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL INITIAL GHAIN", direction="al", linebreak="al", specials={ "font", 0x063A }, unicodeslot=0x1EE3B, }, [0x1EE42]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED JEEM", direction="al", linebreak="al", specials={ "font", 0x062C }, unicodeslot=0x1EE42, }, [0x1EE47]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED HAH", direction="al", linebreak="al", specials={ "font", 0x062D }, unicodeslot=0x1EE47, }, [0x1EE49]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED YEH", direction="al", linebreak="al", specials={ "font", 0x064A }, unicodeslot=0x1EE49, }, [0x1EE4B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED LAM", direction="al", linebreak="al", specials={ "font", 0x0644 }, unicodeslot=0x1EE4B, }, [0x1EE4D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED NOON", direction="al", linebreak="al", specials={ "font", 0x0646 }, unicodeslot=0x1EE4D, }, [0x1EE4E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED SEEN", direction="al", linebreak="al", specials={ "font", 0x0633 }, unicodeslot=0x1EE4E, }, [0x1EE4F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED AIN", direction="al", linebreak="al", specials={ "font", 0x0639 }, unicodeslot=0x1EE4F, }, [0x1EE51]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED SAD", direction="al", linebreak="al", specials={ "font", 0x0635 }, unicodeslot=0x1EE51, }, [0x1EE52]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED QAF", direction="al", linebreak="al", specials={ "font", 0x0642 }, unicodeslot=0x1EE52, }, [0x1EE54]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED SHEEN", direction="al", linebreak="al", specials={ "font", 0x0634 }, unicodeslot=0x1EE54, }, [0x1EE57]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED KHAH", direction="al", linebreak="al", specials={ "font", 0x062E }, unicodeslot=0x1EE57, }, [0x1EE59]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED DAD", direction="al", linebreak="al", specials={ "font", 0x0636 }, unicodeslot=0x1EE59, }, [0x1EE5B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED GHAIN", direction="al", linebreak="al", specials={ "font", 0x063A }, unicodeslot=0x1EE5B, }, [0x1EE5D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED DOTLESS NOON", direction="al", linebreak="al", specials={ "font", 0x06BA }, unicodeslot=0x1EE5D, }, [0x1EE5F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL TAILED DOTLESS QAF", direction="al", linebreak="al", specials={ "font", 0x066F }, unicodeslot=0x1EE5F, }, [0x1EE61]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED BEH", direction="al", linebreak="al", specials={ "font", 0x0628 }, unicodeslot=0x1EE61, }, [0x1EE62]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED JEEM", direction="al", linebreak="al", specials={ "font", 0x062C }, unicodeslot=0x1EE62, }, [0x1EE64]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED HEH", direction="al", linebreak="al", specials={ "font", 0x0647 }, unicodeslot=0x1EE64, }, [0x1EE67]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED HAH", direction="al", linebreak="al", specials={ "font", 0x062D }, unicodeslot=0x1EE67, }, [0x1EE68]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED TAH", direction="al", linebreak="al", specials={ "font", 0x0637 }, unicodeslot=0x1EE68, }, [0x1EE69]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED YEH", direction="al", linebreak="al", specials={ "font", 0x064A }, unicodeslot=0x1EE69, }, [0x1EE6A]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED KAF", direction="al", linebreak="al", specials={ "font", 0x0643 }, unicodeslot=0x1EE6A, }, [0x1EE6C]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED MEEM", direction="al", linebreak="al", specials={ "font", 0x0645 }, unicodeslot=0x1EE6C, }, [0x1EE6D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED NOON", direction="al", linebreak="al", specials={ "font", 0x0646 }, unicodeslot=0x1EE6D, }, [0x1EE6E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED SEEN", direction="al", linebreak="al", specials={ "font", 0x0633 }, unicodeslot=0x1EE6E, }, [0x1EE6F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED AIN", direction="al", linebreak="al", specials={ "font", 0x0639 }, unicodeslot=0x1EE6F, }, [0x1EE70]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED FEH", direction="al", linebreak="al", specials={ "font", 0x0641 }, unicodeslot=0x1EE70, }, [0x1EE71]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED SAD", direction="al", linebreak="al", specials={ "font", 0x0635 }, unicodeslot=0x1EE71, }, [0x1EE72]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED QAF", direction="al", linebreak="al", specials={ "font", 0x0642 }, unicodeslot=0x1EE72, }, [0x1EE74]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED SHEEN", direction="al", linebreak="al", specials={ "font", 0x0634 }, unicodeslot=0x1EE74, }, [0x1EE75]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED TEH", direction="al", linebreak="al", specials={ "font", 0x062A }, unicodeslot=0x1EE75, }, [0x1EE76]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED THEH", direction="al", linebreak="al", specials={ "font", 0x062B }, unicodeslot=0x1EE76, }, [0x1EE77]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED KHAH", direction="al", linebreak="al", specials={ "font", 0x062E }, unicodeslot=0x1EE77, }, [0x1EE79]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED DAD", direction="al", linebreak="al", specials={ "font", 0x0636 }, unicodeslot=0x1EE79, }, [0x1EE7A]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED ZAH", direction="al", linebreak="al", specials={ "font", 0x0638 }, unicodeslot=0x1EE7A, }, [0x1EE7B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED GHAIN", direction="al", linebreak="al", specials={ "font", 0x063A }, unicodeslot=0x1EE7B, }, [0x1EE7C]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED DOTLESS BEH", direction="al", linebreak="al", specials={ "font", 0x066E }, unicodeslot=0x1EE7C, }, [0x1EE7E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL STRETCHED DOTLESS FEH", direction="al", linebreak="al", specials={ "font", 0x06A1 }, unicodeslot=0x1EE7E, }, [0x1EE80]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED ALEF", direction="al", linebreak="al", specials={ "font", 0x0627 }, unicodeslot=0x1EE80, }, [0x1EE81]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED BEH", direction="al", linebreak="al", specials={ "font", 0x0628 }, unicodeslot=0x1EE81, }, [0x1EE82]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED JEEM", direction="al", linebreak="al", specials={ "font", 0x062C }, unicodeslot=0x1EE82, }, [0x1EE83]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED DAL", direction="al", linebreak="al", specials={ "font", 0x062F }, unicodeslot=0x1EE83, }, [0x1EE84]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED HEH", direction="al", linebreak="al", specials={ "font", 0x0647 }, unicodeslot=0x1EE84, }, [0x1EE85]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED WAW", direction="al", linebreak="al", specials={ "font", 0x0648 }, unicodeslot=0x1EE85, }, [0x1EE86]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED ZAIN", direction="al", linebreak="al", specials={ "font", 0x0632 }, unicodeslot=0x1EE86, }, [0x1EE87]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED HAH", direction="al", linebreak="al", specials={ "font", 0x062D }, unicodeslot=0x1EE87, }, [0x1EE88]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED TAH", direction="al", linebreak="al", specials={ "font", 0x0637 }, unicodeslot=0x1EE88, }, [0x1EE89]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED YEH", direction="al", linebreak="al", specials={ "font", 0x064A }, unicodeslot=0x1EE89, }, [0x1EE8B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED LAM", direction="al", linebreak="al", specials={ "font", 0x0644 }, unicodeslot=0x1EE8B, }, [0x1EE8C]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED MEEM", direction="al", linebreak="al", specials={ "font", 0x0645 }, unicodeslot=0x1EE8C, }, [0x1EE8D]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED NOON", direction="al", linebreak="al", specials={ "font", 0x0646 }, unicodeslot=0x1EE8D, }, [0x1EE8E]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED SEEN", direction="al", linebreak="al", specials={ "font", 0x0633 }, unicodeslot=0x1EE8E, }, [0x1EE8F]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED AIN", direction="al", linebreak="al", specials={ "font", 0x0639 }, unicodeslot=0x1EE8F, }, [0x1EE90]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED FEH", direction="al", linebreak="al", specials={ "font", 0x0641 }, unicodeslot=0x1EE90, }, [0x1EE91]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED SAD", direction="al", linebreak="al", specials={ "font", 0x0635 }, unicodeslot=0x1EE91, }, [0x1EE92]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED QAF", direction="al", linebreak="al", specials={ "font", 0x0642 }, unicodeslot=0x1EE92, }, [0x1EE93]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED REH", direction="al", linebreak="al", specials={ "font", 0x0631 }, unicodeslot=0x1EE93, }, [0x1EE94]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED SHEEN", direction="al", linebreak="al", specials={ "font", 0x0634 }, unicodeslot=0x1EE94, }, [0x1EE95]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED TEH", direction="al", linebreak="al", specials={ "font", 0x062A }, unicodeslot=0x1EE95, }, [0x1EE96]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED THEH", direction="al", linebreak="al", specials={ "font", 0x062B }, unicodeslot=0x1EE96, }, [0x1EE97]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED KHAH", direction="al", linebreak="al", specials={ "font", 0x062E }, unicodeslot=0x1EE97, }, [0x1EE98]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED THAL", direction="al", linebreak="al", specials={ "font", 0x0630 }, unicodeslot=0x1EE98, }, [0x1EE99]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED DAD", direction="al", linebreak="al", specials={ "font", 0x0636 }, unicodeslot=0x1EE99, }, [0x1EE9A]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED ZAH", direction="al", linebreak="al", specials={ "font", 0x0638 }, unicodeslot=0x1EE9A, }, [0x1EE9B]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL LOOPED GHAIN", direction="al", linebreak="al", specials={ "font", 0x063A }, unicodeslot=0x1EE9B, }, [0x1EEA1]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK BEH", direction="al", linebreak="al", specials={ "font", 0x0628 }, unicodeslot=0x1EEA1, }, [0x1EEA2]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM", direction="al", linebreak="al", specials={ "font", 0x062C }, unicodeslot=0x1EEA2, }, [0x1EEA3]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK DAL", direction="al", linebreak="al", specials={ "font", 0x062F }, unicodeslot=0x1EEA3, }, [0x1EEA5]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK WAW", direction="al", linebreak="al", specials={ "font", 0x0648 }, unicodeslot=0x1EEA5, }, [0x1EEA6]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN", direction="al", linebreak="al", specials={ "font", 0x0632 }, unicodeslot=0x1EEA6, }, [0x1EEA7]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK HAH", direction="al", linebreak="al", specials={ "font", 0x062D }, unicodeslot=0x1EEA7, }, [0x1EEA8]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK TAH", direction="al", linebreak="al", specials={ "font", 0x0637 }, unicodeslot=0x1EEA8, }, [0x1EEA9]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK YEH", direction="al", linebreak="al", specials={ "font", 0x064A }, unicodeslot=0x1EEA9, }, [0x1EEAB]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK LAM", direction="al", linebreak="al", specials={ "font", 0x0644 }, unicodeslot=0x1EEAB, }, [0x1EEAC]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM", direction="al", linebreak="al", specials={ "font", 0x0645 }, unicodeslot=0x1EEAC, }, [0x1EEAD]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK NOON", direction="al", linebreak="al", specials={ "font", 0x0646 }, unicodeslot=0x1EEAD, }, [0x1EEAE]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN", direction="al", linebreak="al", specials={ "font", 0x0633 }, unicodeslot=0x1EEAE, }, [0x1EEAF]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK AIN", direction="al", linebreak="al", specials={ "font", 0x0639 }, unicodeslot=0x1EEAF, }, [0x1EEB0]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK FEH", direction="al", linebreak="al", specials={ "font", 0x0641 }, unicodeslot=0x1EEB0, }, [0x1EEB1]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK SAD", direction="al", linebreak="al", specials={ "font", 0x0635 }, unicodeslot=0x1EEB1, }, [0x1EEB2]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK QAF", direction="al", linebreak="al", specials={ "font", 0x0642 }, unicodeslot=0x1EEB2, }, [0x1EEB3]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK REH", direction="al", linebreak="al", specials={ "font", 0x0631 }, unicodeslot=0x1EEB3, }, [0x1EEB4]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN", direction="al", linebreak="al", specials={ "font", 0x0634 }, unicodeslot=0x1EEB4, }, [0x1EEB5]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK TEH", direction="al", linebreak="al", specials={ "font", 0x062A }, unicodeslot=0x1EEB5, }, [0x1EEB6]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK THEH", direction="al", linebreak="al", specials={ "font", 0x062B }, unicodeslot=0x1EEB6, }, [0x1EEB7]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH", direction="al", linebreak="al", specials={ "font", 0x062E }, unicodeslot=0x1EEB7, }, [0x1EEB8]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK THAL", direction="al", linebreak="al", specials={ "font", 0x0630 }, unicodeslot=0x1EEB8, }, [0x1EEB9]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK DAD", direction="al", linebreak="al", specials={ "font", 0x0636 }, unicodeslot=0x1EEB9, }, [0x1EEBA]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH", direction="al", linebreak="al", specials={ "font", 0x0638 }, unicodeslot=0x1EEBA, }, [0x1EEBB]={ category="lo", comment="check math properties", description="ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN", direction="al", linebreak="al", specials={ "font", 0x063A }, unicodeslot=0x1EEBB, }, [0x1EEF0]={ category="sm", comment="check math properties", description="ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL", direction="on", linebreak="al", unicodeslot=0x1EEF0, }, [0x1EEF1]={ category="sm", comment="check math properties", description="ARABIC MATHEMATICAL OPERATOR HAH WITH DAL", direction="on", linebreak="al", unicodeslot=0x1EEF1, }, [0x1F000]={ category="so", description="MAHJONG TILE EAST WIND", direction="on", linebreak="id", unicodeslot=0x1F000, }, [0x1F001]={ category="so", description="MAHJONG TILE SOUTH WIND", direction="on", linebreak="id", unicodeslot=0x1F001, }, [0x1F002]={ category="so", description="MAHJONG TILE WEST WIND", direction="on", linebreak="id", unicodeslot=0x1F002, }, [0x1F003]={ category="so", description="MAHJONG TILE NORTH WIND", direction="on", linebreak="id", unicodeslot=0x1F003, }, [0x1F004]={ category="so", description="MAHJONG TILE RED DRAGON", direction="on", linebreak="id", unicodeslot=0x1F004, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x1F005]={ category="so", description="MAHJONG TILE GREEN DRAGON", direction="on", linebreak="id", unicodeslot=0x1F005, }, [0x1F006]={ category="so", description="MAHJONG TILE WHITE DRAGON", direction="on", linebreak="id", unicodeslot=0x1F006, }, [0x1F007]={ category="so", description="MAHJONG TILE ONE OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F007, }, [0x1F008]={ category="so", description="MAHJONG TILE TWO OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F008, }, [0x1F009]={ category="so", description="MAHJONG TILE THREE OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F009, }, [0x1F00A]={ category="so", description="MAHJONG TILE FOUR OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F00A, }, [0x1F00B]={ category="so", description="MAHJONG TILE FIVE OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F00B, }, [0x1F00C]={ category="so", description="MAHJONG TILE SIX OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F00C, }, [0x1F00D]={ category="so", description="MAHJONG TILE SEVEN OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F00D, }, [0x1F00E]={ category="so", description="MAHJONG TILE EIGHT OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F00E, }, [0x1F00F]={ category="so", description="MAHJONG TILE NINE OF CHARACTERS", direction="on", linebreak="id", unicodeslot=0x1F00F, }, [0x1F010]={ category="so", description="MAHJONG TILE ONE OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F010, }, [0x1F011]={ category="so", description="MAHJONG TILE TWO OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F011, }, [0x1F012]={ category="so", description="MAHJONG TILE THREE OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F012, }, [0x1F013]={ category="so", description="MAHJONG TILE FOUR OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F013, }, [0x1F014]={ category="so", description="MAHJONG TILE FIVE OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F014, }, [0x1F015]={ category="so", description="MAHJONG TILE SIX OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F015, }, [0x1F016]={ category="so", description="MAHJONG TILE SEVEN OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F016, }, [0x1F017]={ category="so", description="MAHJONG TILE EIGHT OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F017, }, [0x1F018]={ category="so", description="MAHJONG TILE NINE OF BAMBOOS", direction="on", linebreak="id", unicodeslot=0x1F018, }, [0x1F019]={ category="so", description="MAHJONG TILE ONE OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F019, }, [0x1F01A]={ category="so", description="MAHJONG TILE TWO OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F01A, }, [0x1F01B]={ category="so", description="MAHJONG TILE THREE OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F01B, }, [0x1F01C]={ category="so", description="MAHJONG TILE FOUR OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F01C, }, [0x1F01D]={ category="so", description="MAHJONG TILE FIVE OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F01D, }, [0x1F01E]={ category="so", description="MAHJONG TILE SIX OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F01E, }, [0x1F01F]={ category="so", description="MAHJONG TILE SEVEN OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F01F, }, [0x1F020]={ category="so", description="MAHJONG TILE EIGHT OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F020, }, [0x1F021]={ category="so", description="MAHJONG TILE NINE OF CIRCLES", direction="on", linebreak="id", unicodeslot=0x1F021, }, [0x1F022]={ category="so", description="MAHJONG TILE PLUM", direction="on", linebreak="id", unicodeslot=0x1F022, }, [0x1F023]={ category="so", description="MAHJONG TILE ORCHID", direction="on", linebreak="id", unicodeslot=0x1F023, }, [0x1F024]={ category="so", description="MAHJONG TILE BAMBOO", direction="on", linebreak="id", unicodeslot=0x1F024, }, [0x1F025]={ category="so", description="MAHJONG TILE CHRYSANTHEMUM", direction="on", linebreak="id", unicodeslot=0x1F025, }, [0x1F026]={ category="so", description="MAHJONG TILE SPRING", direction="on", linebreak="id", unicodeslot=0x1F026, }, [0x1F027]={ category="so", description="MAHJONG TILE SUMMER", direction="on", linebreak="id", unicodeslot=0x1F027, }, [0x1F028]={ category="so", description="MAHJONG TILE AUTUMN", direction="on", linebreak="id", unicodeslot=0x1F028, }, [0x1F029]={ category="so", description="MAHJONG TILE WINTER", direction="on", linebreak="id", unicodeslot=0x1F029, }, [0x1F02A]={ category="so", description="MAHJONG TILE JOKER", direction="on", linebreak="id", unicodeslot=0x1F02A, }, [0x1F02B]={ category="so", description="MAHJONG TILE BACK", direction="on", linebreak="id", unicodeslot=0x1F02B, }, [0x1F030]={ category="so", description="DOMINO TILE HORIZONTAL BACK", direction="on", linebreak="id", unicodeslot=0x1F030, }, [0x1F031]={ category="so", description="DOMINO TILE HORIZONTAL-00-00", direction="on", linebreak="id", unicodeslot=0x1F031, }, [0x1F032]={ category="so", description="DOMINO TILE HORIZONTAL-00-01", direction="on", linebreak="id", unicodeslot=0x1F032, }, [0x1F033]={ category="so", description="DOMINO TILE HORIZONTAL-00-02", direction="on", linebreak="id", unicodeslot=0x1F033, }, [0x1F034]={ category="so", description="DOMINO TILE HORIZONTAL-00-03", direction="on", linebreak="id", unicodeslot=0x1F034, }, [0x1F035]={ category="so", description="DOMINO TILE HORIZONTAL-00-04", direction="on", linebreak="id", unicodeslot=0x1F035, }, [0x1F036]={ category="so", description="DOMINO TILE HORIZONTAL-00-05", direction="on", linebreak="id", unicodeslot=0x1F036, }, [0x1F037]={ category="so", description="DOMINO TILE HORIZONTAL-00-06", direction="on", linebreak="id", unicodeslot=0x1F037, }, [0x1F038]={ category="so", description="DOMINO TILE HORIZONTAL-01-00", direction="on", linebreak="id", unicodeslot=0x1F038, }, [0x1F039]={ category="so", description="DOMINO TILE HORIZONTAL-01-01", direction="on", linebreak="id", unicodeslot=0x1F039, }, [0x1F03A]={ category="so", description="DOMINO TILE HORIZONTAL-01-02", direction="on", linebreak="id", unicodeslot=0x1F03A, }, [0x1F03B]={ category="so", description="DOMINO TILE HORIZONTAL-01-03", direction="on", linebreak="id", unicodeslot=0x1F03B, }, [0x1F03C]={ category="so", description="DOMINO TILE HORIZONTAL-01-04", direction="on", linebreak="id", unicodeslot=0x1F03C, }, [0x1F03D]={ category="so", description="DOMINO TILE HORIZONTAL-01-05", direction="on", linebreak="id", unicodeslot=0x1F03D, }, [0x1F03E]={ category="so", description="DOMINO TILE HORIZONTAL-01-06", direction="on", linebreak="id", unicodeslot=0x1F03E, }, [0x1F03F]={ category="so", description="DOMINO TILE HORIZONTAL-02-00", direction="on", linebreak="id", unicodeslot=0x1F03F, }, [0x1F040]={ category="so", description="DOMINO TILE HORIZONTAL-02-01", direction="on", linebreak="id", unicodeslot=0x1F040, }, [0x1F041]={ category="so", description="DOMINO TILE HORIZONTAL-02-02", direction="on", linebreak="id", unicodeslot=0x1F041, }, [0x1F042]={ category="so", description="DOMINO TILE HORIZONTAL-02-03", direction="on", linebreak="id", unicodeslot=0x1F042, }, [0x1F043]={ category="so", description="DOMINO TILE HORIZONTAL-02-04", direction="on", linebreak="id", unicodeslot=0x1F043, }, [0x1F044]={ category="so", description="DOMINO TILE HORIZONTAL-02-05", direction="on", linebreak="id", unicodeslot=0x1F044, }, [0x1F045]={ category="so", description="DOMINO TILE HORIZONTAL-02-06", direction="on", linebreak="id", unicodeslot=0x1F045, }, [0x1F046]={ category="so", description="DOMINO TILE HORIZONTAL-03-00", direction="on", linebreak="id", unicodeslot=0x1F046, }, [0x1F047]={ category="so", description="DOMINO TILE HORIZONTAL-03-01", direction="on", linebreak="id", unicodeslot=0x1F047, }, [0x1F048]={ category="so", description="DOMINO TILE HORIZONTAL-03-02", direction="on", linebreak="id", unicodeslot=0x1F048, }, [0x1F049]={ category="so", description="DOMINO TILE HORIZONTAL-03-03", direction="on", linebreak="id", unicodeslot=0x1F049, }, [0x1F04A]={ category="so", description="DOMINO TILE HORIZONTAL-03-04", direction="on", linebreak="id", unicodeslot=0x1F04A, }, [0x1F04B]={ category="so", description="DOMINO TILE HORIZONTAL-03-05", direction="on", linebreak="id", unicodeslot=0x1F04B, }, [0x1F04C]={ category="so", description="DOMINO TILE HORIZONTAL-03-06", direction="on", linebreak="id", unicodeslot=0x1F04C, }, [0x1F04D]={ category="so", description="DOMINO TILE HORIZONTAL-04-00", direction="on", linebreak="id", unicodeslot=0x1F04D, }, [0x1F04E]={ category="so", description="DOMINO TILE HORIZONTAL-04-01", direction="on", linebreak="id", unicodeslot=0x1F04E, }, [0x1F04F]={ category="so", description="DOMINO TILE HORIZONTAL-04-02", direction="on", linebreak="id", unicodeslot=0x1F04F, }, [0x1F050]={ category="so", description="DOMINO TILE HORIZONTAL-04-03", direction="on", linebreak="id", unicodeslot=0x1F050, }, [0x1F051]={ category="so", description="DOMINO TILE HORIZONTAL-04-04", direction="on", linebreak="id", unicodeslot=0x1F051, }, [0x1F052]={ category="so", description="DOMINO TILE HORIZONTAL-04-05", direction="on", linebreak="id", unicodeslot=0x1F052, }, [0x1F053]={ category="so", description="DOMINO TILE HORIZONTAL-04-06", direction="on", linebreak="id", unicodeslot=0x1F053, }, [0x1F054]={ category="so", description="DOMINO TILE HORIZONTAL-05-00", direction="on", linebreak="id", unicodeslot=0x1F054, }, [0x1F055]={ category="so", description="DOMINO TILE HORIZONTAL-05-01", direction="on", linebreak="id", unicodeslot=0x1F055, }, [0x1F056]={ category="so", description="DOMINO TILE HORIZONTAL-05-02", direction="on", linebreak="id", unicodeslot=0x1F056, }, [0x1F057]={ category="so", description="DOMINO TILE HORIZONTAL-05-03", direction="on", linebreak="id", unicodeslot=0x1F057, }, [0x1F058]={ category="so", description="DOMINO TILE HORIZONTAL-05-04", direction="on", linebreak="id", unicodeslot=0x1F058, }, [0x1F059]={ category="so", description="DOMINO TILE HORIZONTAL-05-05", direction="on", linebreak="id", unicodeslot=0x1F059, }, [0x1F05A]={ category="so", description="DOMINO TILE HORIZONTAL-05-06", direction="on", linebreak="id", unicodeslot=0x1F05A, }, [0x1F05B]={ category="so", description="DOMINO TILE HORIZONTAL-06-00", direction="on", linebreak="id", unicodeslot=0x1F05B, }, [0x1F05C]={ category="so", description="DOMINO TILE HORIZONTAL-06-01", direction="on", linebreak="id", unicodeslot=0x1F05C, }, [0x1F05D]={ category="so", description="DOMINO TILE HORIZONTAL-06-02", direction="on", linebreak="id", unicodeslot=0x1F05D, }, [0x1F05E]={ category="so", description="DOMINO TILE HORIZONTAL-06-03", direction="on", linebreak="id", unicodeslot=0x1F05E, }, [0x1F05F]={ category="so", description="DOMINO TILE HORIZONTAL-06-04", direction="on", linebreak="id", unicodeslot=0x1F05F, }, [0x1F060]={ category="so", description="DOMINO TILE HORIZONTAL-06-05", direction="on", linebreak="id", unicodeslot=0x1F060, }, [0x1F061]={ category="so", description="DOMINO TILE HORIZONTAL-06-06", direction="on", linebreak="id", unicodeslot=0x1F061, }, [0x1F062]={ category="so", description="DOMINO TILE VERTICAL BACK", direction="on", linebreak="id", unicodeslot=0x1F062, }, [0x1F063]={ category="so", description="DOMINO TILE VERTICAL-00-00", direction="on", linebreak="id", unicodeslot=0x1F063, }, [0x1F064]={ category="so", description="DOMINO TILE VERTICAL-00-01", direction="on", linebreak="id", unicodeslot=0x1F064, }, [0x1F065]={ category="so", description="DOMINO TILE VERTICAL-00-02", direction="on", linebreak="id", unicodeslot=0x1F065, }, [0x1F066]={ category="so", description="DOMINO TILE VERTICAL-00-03", direction="on", linebreak="id", unicodeslot=0x1F066, }, [0x1F067]={ category="so", description="DOMINO TILE VERTICAL-00-04", direction="on", linebreak="id", unicodeslot=0x1F067, }, [0x1F068]={ category="so", description="DOMINO TILE VERTICAL-00-05", direction="on", linebreak="id", unicodeslot=0x1F068, }, [0x1F069]={ category="so", description="DOMINO TILE VERTICAL-00-06", direction="on", linebreak="id", unicodeslot=0x1F069, }, [0x1F06A]={ category="so", description="DOMINO TILE VERTICAL-01-00", direction="on", linebreak="id", unicodeslot=0x1F06A, }, [0x1F06B]={ category="so", description="DOMINO TILE VERTICAL-01-01", direction="on", linebreak="id", unicodeslot=0x1F06B, }, [0x1F06C]={ category="so", description="DOMINO TILE VERTICAL-01-02", direction="on", linebreak="id", unicodeslot=0x1F06C, }, [0x1F06D]={ category="so", description="DOMINO TILE VERTICAL-01-03", direction="on", linebreak="id", unicodeslot=0x1F06D, }, [0x1F06E]={ category="so", description="DOMINO TILE VERTICAL-01-04", direction="on", linebreak="id", unicodeslot=0x1F06E, }, [0x1F06F]={ category="so", description="DOMINO TILE VERTICAL-01-05", direction="on", linebreak="id", unicodeslot=0x1F06F, }, [0x1F070]={ category="so", description="DOMINO TILE VERTICAL-01-06", direction="on", linebreak="id", unicodeslot=0x1F070, }, [0x1F071]={ category="so", description="DOMINO TILE VERTICAL-02-00", direction="on", linebreak="id", unicodeslot=0x1F071, }, [0x1F072]={ category="so", description="DOMINO TILE VERTICAL-02-01", direction="on", linebreak="id", unicodeslot=0x1F072, }, [0x1F073]={ category="so", description="DOMINO TILE VERTICAL-02-02", direction="on", linebreak="id", unicodeslot=0x1F073, }, [0x1F074]={ category="so", description="DOMINO TILE VERTICAL-02-03", direction="on", linebreak="id", unicodeslot=0x1F074, }, [0x1F075]={ category="so", description="DOMINO TILE VERTICAL-02-04", direction="on", linebreak="id", unicodeslot=0x1F075, }, [0x1F076]={ category="so", description="DOMINO TILE VERTICAL-02-05", direction="on", linebreak="id", unicodeslot=0x1F076, }, [0x1F077]={ category="so", description="DOMINO TILE VERTICAL-02-06", direction="on", linebreak="id", unicodeslot=0x1F077, }, [0x1F078]={ category="so", description="DOMINO TILE VERTICAL-03-00", direction="on", linebreak="id", unicodeslot=0x1F078, }, [0x1F079]={ category="so", description="DOMINO TILE VERTICAL-03-01", direction="on", linebreak="id", unicodeslot=0x1F079, }, [0x1F07A]={ category="so", description="DOMINO TILE VERTICAL-03-02", direction="on", linebreak="id", unicodeslot=0x1F07A, }, [0x1F07B]={ category="so", description="DOMINO TILE VERTICAL-03-03", direction="on", linebreak="id", unicodeslot=0x1F07B, }, [0x1F07C]={ category="so", description="DOMINO TILE VERTICAL-03-04", direction="on", linebreak="id", unicodeslot=0x1F07C, }, [0x1F07D]={ category="so", description="DOMINO TILE VERTICAL-03-05", direction="on", linebreak="id", unicodeslot=0x1F07D, }, [0x1F07E]={ category="so", description="DOMINO TILE VERTICAL-03-06", direction="on", linebreak="id", unicodeslot=0x1F07E, }, [0x1F07F]={ category="so", description="DOMINO TILE VERTICAL-04-00", direction="on", linebreak="id", unicodeslot=0x1F07F, }, [0x1F080]={ category="so", description="DOMINO TILE VERTICAL-04-01", direction="on", linebreak="id", unicodeslot=0x1F080, }, [0x1F081]={ category="so", description="DOMINO TILE VERTICAL-04-02", direction="on", linebreak="id", unicodeslot=0x1F081, }, [0x1F082]={ category="so", description="DOMINO TILE VERTICAL-04-03", direction="on", linebreak="id", unicodeslot=0x1F082, }, [0x1F083]={ category="so", description="DOMINO TILE VERTICAL-04-04", direction="on", linebreak="id", unicodeslot=0x1F083, }, [0x1F084]={ category="so", description="DOMINO TILE VERTICAL-04-05", direction="on", linebreak="id", unicodeslot=0x1F084, }, [0x1F085]={ category="so", description="DOMINO TILE VERTICAL-04-06", direction="on", linebreak="id", unicodeslot=0x1F085, }, [0x1F086]={ category="so", description="DOMINO TILE VERTICAL-05-00", direction="on", linebreak="id", unicodeslot=0x1F086, }, [0x1F087]={ category="so", description="DOMINO TILE VERTICAL-05-01", direction="on", linebreak="id", unicodeslot=0x1F087, }, [0x1F088]={ category="so", description="DOMINO TILE VERTICAL-05-02", direction="on", linebreak="id", unicodeslot=0x1F088, }, [0x1F089]={ category="so", description="DOMINO TILE VERTICAL-05-03", direction="on", linebreak="id", unicodeslot=0x1F089, }, [0x1F08A]={ category="so", description="DOMINO TILE VERTICAL-05-04", direction="on", linebreak="id", unicodeslot=0x1F08A, }, [0x1F08B]={ category="so", description="DOMINO TILE VERTICAL-05-05", direction="on", linebreak="id", unicodeslot=0x1F08B, }, [0x1F08C]={ category="so", description="DOMINO TILE VERTICAL-05-06", direction="on", linebreak="id", unicodeslot=0x1F08C, }, [0x1F08D]={ category="so", description="DOMINO TILE VERTICAL-06-00", direction="on", linebreak="id", unicodeslot=0x1F08D, }, [0x1F08E]={ category="so", description="DOMINO TILE VERTICAL-06-01", direction="on", linebreak="id", unicodeslot=0x1F08E, }, [0x1F08F]={ category="so", description="DOMINO TILE VERTICAL-06-02", direction="on", linebreak="id", unicodeslot=0x1F08F, }, [0x1F090]={ category="so", description="DOMINO TILE VERTICAL-06-03", direction="on", linebreak="id", unicodeslot=0x1F090, }, [0x1F091]={ category="so", description="DOMINO TILE VERTICAL-06-04", direction="on", linebreak="id", unicodeslot=0x1F091, }, [0x1F092]={ category="so", description="DOMINO TILE VERTICAL-06-05", direction="on", linebreak="id", unicodeslot=0x1F092, }, [0x1F093]={ category="so", description="DOMINO TILE VERTICAL-06-06", direction="on", linebreak="id", unicodeslot=0x1F093, }, [0x1F0A0]={ category="so", description="PLAYING CARD BACK", direction="on", linebreak="id", unicodeslot=0x1F0A0, }, [0x1F0A1]={ category="so", description="PLAYING CARD ACE OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A1, }, [0x1F0A2]={ category="so", description="PLAYING CARD TWO OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A2, }, [0x1F0A3]={ category="so", description="PLAYING CARD THREE OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A3, }, [0x1F0A4]={ category="so", description="PLAYING CARD FOUR OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A4, }, [0x1F0A5]={ category="so", description="PLAYING CARD FIVE OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A5, }, [0x1F0A6]={ category="so", description="PLAYING CARD SIX OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A6, }, [0x1F0A7]={ category="so", description="PLAYING CARD SEVEN OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A7, }, [0x1F0A8]={ category="so", description="PLAYING CARD EIGHT OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A8, }, [0x1F0A9]={ category="so", description="PLAYING CARD NINE OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0A9, }, [0x1F0AA]={ category="so", description="PLAYING CARD TEN OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0AA, }, [0x1F0AB]={ category="so", description="PLAYING CARD JACK OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0AB, }, [0x1F0AC]={ category="so", description="PLAYING CARD KNIGHT OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0AC, }, [0x1F0AD]={ category="so", description="PLAYING CARD QUEEN OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0AD, }, [0x1F0AE]={ category="so", description="PLAYING CARD KING OF SPADES", direction="on", linebreak="id", unicodeslot=0x1F0AE, }, [0x1F0B1]={ category="so", description="PLAYING CARD ACE OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B1, }, [0x1F0B2]={ category="so", description="PLAYING CARD TWO OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B2, }, [0x1F0B3]={ category="so", description="PLAYING CARD THREE OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B3, }, [0x1F0B4]={ category="so", description="PLAYING CARD FOUR OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B4, }, [0x1F0B5]={ category="so", description="PLAYING CARD FIVE OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B5, }, [0x1F0B6]={ category="so", description="PLAYING CARD SIX OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B6, }, [0x1F0B7]={ category="so", description="PLAYING CARD SEVEN OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B7, }, [0x1F0B8]={ category="so", description="PLAYING CARD EIGHT OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B8, }, [0x1F0B9]={ category="so", description="PLAYING CARD NINE OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0B9, }, [0x1F0BA]={ category="so", description="PLAYING CARD TEN OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0BA, }, [0x1F0BB]={ category="so", description="PLAYING CARD JACK OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0BB, }, [0x1F0BC]={ category="so", description="PLAYING CARD KNIGHT OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0BC, }, [0x1F0BD]={ category="so", description="PLAYING CARD QUEEN OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0BD, }, [0x1F0BE]={ category="so", description="PLAYING CARD KING OF HEARTS", direction="on", linebreak="id", unicodeslot=0x1F0BE, }, [0x1F0C1]={ category="so", description="PLAYING CARD ACE OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C1, }, [0x1F0C2]={ category="so", description="PLAYING CARD TWO OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C2, }, [0x1F0C3]={ category="so", description="PLAYING CARD THREE OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C3, }, [0x1F0C4]={ category="so", description="PLAYING CARD FOUR OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C4, }, [0x1F0C5]={ category="so", description="PLAYING CARD FIVE OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C5, }, [0x1F0C6]={ category="so", description="PLAYING CARD SIX OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C6, }, [0x1F0C7]={ category="so", description="PLAYING CARD SEVEN OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C7, }, [0x1F0C8]={ category="so", description="PLAYING CARD EIGHT OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C8, }, [0x1F0C9]={ category="so", description="PLAYING CARD NINE OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0C9, }, [0x1F0CA]={ category="so", description="PLAYING CARD TEN OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0CA, }, [0x1F0CB]={ category="so", description="PLAYING CARD JACK OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0CB, }, [0x1F0CC]={ category="so", description="PLAYING CARD KNIGHT OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0CC, }, [0x1F0CD]={ category="so", description="PLAYING CARD QUEEN OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0CD, }, [0x1F0CE]={ category="so", description="PLAYING CARD KING OF DIAMONDS", direction="on", linebreak="id", unicodeslot=0x1F0CE, }, [0x1F0CF]={ category="so", description="PLAYING CARD BLACK JOKER", direction="on", linebreak="id", unicodeslot=0x1F0CF, }, [0x1F0D1]={ category="so", description="PLAYING CARD ACE OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D1, }, [0x1F0D2]={ category="so", description="PLAYING CARD TWO OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D2, }, [0x1F0D3]={ category="so", description="PLAYING CARD THREE OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D3, }, [0x1F0D4]={ category="so", description="PLAYING CARD FOUR OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D4, }, [0x1F0D5]={ category="so", description="PLAYING CARD FIVE OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D5, }, [0x1F0D6]={ category="so", description="PLAYING CARD SIX OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D6, }, [0x1F0D7]={ category="so", description="PLAYING CARD SEVEN OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D7, }, [0x1F0D8]={ category="so", description="PLAYING CARD EIGHT OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D8, }, [0x1F0D9]={ category="so", description="PLAYING CARD NINE OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0D9, }, [0x1F0DA]={ category="so", description="PLAYING CARD TEN OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0DA, }, [0x1F0DB]={ category="so", description="PLAYING CARD JACK OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0DB, }, [0x1F0DC]={ category="so", description="PLAYING CARD KNIGHT OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0DC, }, [0x1F0DD]={ category="so", description="PLAYING CARD QUEEN OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0DD, }, [0x1F0DE]={ category="so", description="PLAYING CARD KING OF CLUBS", direction="on", linebreak="id", unicodeslot=0x1F0DE, }, [0x1F0DF]={ category="so", description="PLAYING CARD WHITE JOKER", direction="on", linebreak="id", unicodeslot=0x1F0DF, }, [0x1F100]={ category="no", cjkwd="a", description="DIGIT ZERO FULL STOP", direction="en", linebreak="ai", specials={ "compat", 0x0030, 0x002E }, unicodeslot=0x1F100, }, [0x1F101]={ category="no", cjkwd="a", description="DIGIT ZERO COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0030, 0x002C }, unicodeslot=0x1F101, }, [0x1F102]={ category="no", cjkwd="a", description="DIGIT ONE COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0031, 0x002C }, unicodeslot=0x1F102, }, [0x1F103]={ category="no", cjkwd="a", description="DIGIT TWO COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0032, 0x002C }, unicodeslot=0x1F103, }, [0x1F104]={ category="no", cjkwd="a", description="DIGIT THREE COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0033, 0x002C }, unicodeslot=0x1F104, }, [0x1F105]={ category="no", cjkwd="a", description="DIGIT FOUR COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0034, 0x002C }, unicodeslot=0x1F105, }, [0x1F106]={ category="no", cjkwd="a", description="DIGIT FIVE COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0035, 0x002C }, unicodeslot=0x1F106, }, [0x1F107]={ category="no", cjkwd="a", description="DIGIT SIX COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0036, 0x002C }, unicodeslot=0x1F107, }, [0x1F108]={ category="no", cjkwd="a", description="DIGIT SEVEN COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0037, 0x002C }, unicodeslot=0x1F108, }, [0x1F109]={ category="no", cjkwd="a", description="DIGIT EIGHT COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0038, 0x002C }, unicodeslot=0x1F109, }, [0x1F10A]={ category="no", cjkwd="a", description="DIGIT NINE COMMA", direction="en", linebreak="ai", specials={ "compat", 0x0039, 0x002C }, unicodeslot=0x1F10A, }, [0x1F110]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER A", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0041, 0x0029 }, unicodeslot=0x1F110, }, [0x1F111]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER B", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0042, 0x0029 }, unicodeslot=0x1F111, }, [0x1F112]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER C", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0043, 0x0029 }, unicodeslot=0x1F112, }, [0x1F113]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER D", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0044, 0x0029 }, unicodeslot=0x1F113, }, [0x1F114]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER E", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0045, 0x0029 }, unicodeslot=0x1F114, }, [0x1F115]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER F", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0046, 0x0029 }, unicodeslot=0x1F115, }, [0x1F116]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER G", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0047, 0x0029 }, unicodeslot=0x1F116, }, [0x1F117]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER H", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0048, 0x0029 }, unicodeslot=0x1F117, }, [0x1F118]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER I", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0049, 0x0029 }, unicodeslot=0x1F118, }, [0x1F119]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER J", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x004A, 0x0029 }, unicodeslot=0x1F119, }, [0x1F11A]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER K", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x004B, 0x0029 }, unicodeslot=0x1F11A, }, [0x1F11B]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER L", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x004C, 0x0029 }, unicodeslot=0x1F11B, }, [0x1F11C]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER M", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x004D, 0x0029 }, unicodeslot=0x1F11C, }, [0x1F11D]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER N", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x004E, 0x0029 }, unicodeslot=0x1F11D, }, [0x1F11E]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER O", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x004F, 0x0029 }, unicodeslot=0x1F11E, }, [0x1F11F]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER P", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0050, 0x0029 }, unicodeslot=0x1F11F, }, [0x1F120]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER Q", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0051, 0x0029 }, unicodeslot=0x1F120, }, [0x1F121]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER R", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0052, 0x0029 }, unicodeslot=0x1F121, }, [0x1F122]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER S", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0053, 0x0029 }, unicodeslot=0x1F122, }, [0x1F123]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER T", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0054, 0x0029 }, unicodeslot=0x1F123, }, [0x1F124]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER U", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0055, 0x0029 }, unicodeslot=0x1F124, }, [0x1F125]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER V", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0056, 0x0029 }, unicodeslot=0x1F125, }, [0x1F126]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER W", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0057, 0x0029 }, unicodeslot=0x1F126, }, [0x1F127]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER X", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0058, 0x0029 }, unicodeslot=0x1F127, }, [0x1F128]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER Y", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x0059, 0x0029 }, unicodeslot=0x1F128, }, [0x1F129]={ category="so", cjkwd="a", description="PARENTHESIZED LATIN CAPITAL LETTER Z", direction="l", linebreak="ai", specials={ "compat", 0x0028, 0x005A, 0x0029 }, unicodeslot=0x1F129, }, [0x1F12A]={ category="so", cjkwd="a", description="TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S", direction="l", linebreak="ai", specials={ "compat", 0x3014, 0x0053, 0x3015 }, unicodeslot=0x1F12A, }, [0x1F12B]={ category="so", cjkwd="a", description="CIRCLED ITALIC LATIN CAPITAL LETTER C", direction="l", linebreak="ai", specials={ "circle", 0x0043 }, unicodeslot=0x1F12B, }, [0x1F12C]={ category="so", cjkwd="a", description="CIRCLED ITALIC LATIN CAPITAL LETTER R", direction="l", linebreak="ai", specials={ "circle", 0x0052 }, unicodeslot=0x1F12C, }, [0x1F12D]={ category="so", cjkwd="a", description="CIRCLED CD", direction="l", linebreak="ai", specials={ "circle", 0x0043, 0x0044 }, unicodeslot=0x1F12D, }, [0x1F12E]={ category="so", description="CIRCLED WZ", direction="l", linebreak="al", specials={ "circle", 0x0057, 0x005A }, unicodeslot=0x1F12E, }, [0x1F130]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER A", direction="l", linebreak="ai", specials={ "square", 0x0041 }, unicodeslot=0x1F130, }, [0x1F131]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER B", direction="l", linebreak="ai", specials={ "square", 0x0042 }, unicodeslot=0x1F131, }, [0x1F132]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER C", direction="l", linebreak="ai", specials={ "square", 0x0043 }, unicodeslot=0x1F132, }, [0x1F133]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER D", direction="l", linebreak="ai", specials={ "square", 0x0044 }, unicodeslot=0x1F133, }, [0x1F134]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER E", direction="l", linebreak="ai", specials={ "square", 0x0045 }, unicodeslot=0x1F134, }, [0x1F135]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER F", direction="l", linebreak="ai", specials={ "square", 0x0046 }, unicodeslot=0x1F135, }, [0x1F136]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER G", direction="l", linebreak="ai", specials={ "square", 0x0047 }, unicodeslot=0x1F136, }, [0x1F137]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER H", direction="l", linebreak="ai", specials={ "square", 0x0048 }, unicodeslot=0x1F137, }, [0x1F138]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER I", direction="l", linebreak="ai", specials={ "square", 0x0049 }, unicodeslot=0x1F138, }, [0x1F139]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER J", direction="l", linebreak="ai", specials={ "square", 0x004A }, unicodeslot=0x1F139, }, [0x1F13A]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER K", direction="l", linebreak="ai", specials={ "square", 0x004B }, unicodeslot=0x1F13A, }, [0x1F13B]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER L", direction="l", linebreak="ai", specials={ "square", 0x004C }, unicodeslot=0x1F13B, }, [0x1F13C]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER M", direction="l", linebreak="ai", specials={ "square", 0x004D }, unicodeslot=0x1F13C, }, [0x1F13D]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER N", direction="l", linebreak="ai", specials={ "square", 0x004E }, unicodeslot=0x1F13D, }, [0x1F13E]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER O", direction="l", linebreak="ai", specials={ "square", 0x004F }, unicodeslot=0x1F13E, }, [0x1F13F]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER P", direction="l", linebreak="ai", specials={ "square", 0x0050 }, unicodeslot=0x1F13F, }, [0x1F140]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER Q", direction="l", linebreak="ai", specials={ "square", 0x0051 }, unicodeslot=0x1F140, }, [0x1F141]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER R", direction="l", linebreak="ai", specials={ "square", 0x0052 }, unicodeslot=0x1F141, }, [0x1F142]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER S", direction="l", linebreak="ai", specials={ "square", 0x0053 }, unicodeslot=0x1F142, }, [0x1F143]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER T", direction="l", linebreak="ai", specials={ "square", 0x0054 }, unicodeslot=0x1F143, }, [0x1F144]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER U", direction="l", linebreak="ai", specials={ "square", 0x0055 }, unicodeslot=0x1F144, }, [0x1F145]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER V", direction="l", linebreak="ai", specials={ "square", 0x0056 }, unicodeslot=0x1F145, }, [0x1F146]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER W", direction="l", linebreak="ai", specials={ "square", 0x0057 }, unicodeslot=0x1F146, }, [0x1F147]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER X", direction="l", linebreak="ai", specials={ "square", 0x0058 }, unicodeslot=0x1F147, }, [0x1F148]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER Y", direction="l", linebreak="ai", specials={ "square", 0x0059 }, unicodeslot=0x1F148, }, [0x1F149]={ category="so", cjkwd="a", description="SQUARED LATIN CAPITAL LETTER Z", direction="l", linebreak="ai", specials={ "square", 0x005A }, unicodeslot=0x1F149, }, [0x1F14A]={ category="so", cjkwd="a", description="SQUARED HV", direction="l", linebreak="ai", specials={ "square", 0x0048, 0x0056 }, unicodeslot=0x1F14A, }, [0x1F14B]={ category="so", cjkwd="a", description="SQUARED MV", direction="l", linebreak="ai", specials={ "square", 0x004D, 0x0056 }, unicodeslot=0x1F14B, }, [0x1F14C]={ category="so", cjkwd="a", description="SQUARED SD", direction="l", linebreak="ai", specials={ "square", 0x0053, 0x0044 }, unicodeslot=0x1F14C, }, [0x1F14D]={ category="so", cjkwd="a", description="SQUARED SS", direction="l", linebreak="ai", specials={ "square", 0x0053, 0x0053 }, unicodeslot=0x1F14D, }, [0x1F14E]={ category="so", cjkwd="a", description="SQUARED PPV", direction="l", linebreak="ai", specials={ "square", 0x0050, 0x0050, 0x0056 }, unicodeslot=0x1F14E, }, [0x1F14F]={ category="so", cjkwd="a", description="SQUARED WC", direction="l", linebreak="ai", specials={ "square", 0x0057, 0x0043 }, unicodeslot=0x1F14F, }, [0x1F150]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER A", direction="l", linebreak="ai", unicodeslot=0x1F150, }, [0x1F151]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER B", direction="l", linebreak="ai", unicodeslot=0x1F151, }, [0x1F152]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER C", direction="l", linebreak="ai", unicodeslot=0x1F152, }, [0x1F153]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER D", direction="l", linebreak="ai", unicodeslot=0x1F153, }, [0x1F154]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER E", direction="l", linebreak="ai", unicodeslot=0x1F154, }, [0x1F155]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER F", direction="l", linebreak="ai", unicodeslot=0x1F155, }, [0x1F156]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER G", direction="l", linebreak="ai", unicodeslot=0x1F156, }, [0x1F157]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER H", direction="l", linebreak="ai", unicodeslot=0x1F157, }, [0x1F158]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER I", direction="l", linebreak="ai", unicodeslot=0x1F158, }, [0x1F159]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER J", direction="l", linebreak="ai", unicodeslot=0x1F159, }, [0x1F15A]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER K", direction="l", linebreak="ai", unicodeslot=0x1F15A, }, [0x1F15B]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER L", direction="l", linebreak="ai", unicodeslot=0x1F15B, }, [0x1F15C]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER M", direction="l", linebreak="ai", unicodeslot=0x1F15C, }, [0x1F15D]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER N", direction="l", linebreak="ai", unicodeslot=0x1F15D, }, [0x1F15E]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER O", direction="l", linebreak="ai", unicodeslot=0x1F15E, }, [0x1F15F]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER P", direction="l", linebreak="ai", unicodeslot=0x1F15F, }, [0x1F160]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER Q", direction="l", linebreak="ai", unicodeslot=0x1F160, }, [0x1F161]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER R", direction="l", linebreak="ai", unicodeslot=0x1F161, }, [0x1F162]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER S", direction="l", linebreak="ai", unicodeslot=0x1F162, }, [0x1F163]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER T", direction="l", linebreak="ai", unicodeslot=0x1F163, }, [0x1F164]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER U", direction="l", linebreak="ai", unicodeslot=0x1F164, }, [0x1F165]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER V", direction="l", linebreak="ai", unicodeslot=0x1F165, }, [0x1F166]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER W", direction="l", linebreak="ai", unicodeslot=0x1F166, }, [0x1F167]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER X", direction="l", linebreak="ai", unicodeslot=0x1F167, }, [0x1F168]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER Y", direction="l", linebreak="ai", unicodeslot=0x1F168, }, [0x1F169]={ category="so", cjkwd="a", description="NEGATIVE CIRCLED LATIN CAPITAL LETTER Z", direction="l", linebreak="ai", unicodeslot=0x1F169, }, [0x1F16A]={ category="so", description="RAISED MC SIGN", direction="on", linebreak="al", specials={ "super", 0x004D, 0x0043 }, unicodeslot=0x1F16A, }, [0x1F16B]={ category="so", description="RAISED MD SIGN", direction="on", linebreak="al", specials={ "super", 0x004D, 0x0044 }, unicodeslot=0x1F16B, }, [0x1F170]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER A", direction="l", linebreak="ai", unicodeslot=0x1F170, }, [0x1F171]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER B", direction="l", linebreak="ai", unicodeslot=0x1F171, }, [0x1F172]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER C", direction="l", linebreak="ai", unicodeslot=0x1F172, }, [0x1F173]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER D", direction="l", linebreak="ai", unicodeslot=0x1F173, }, [0x1F174]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER E", direction="l", linebreak="ai", unicodeslot=0x1F174, }, [0x1F175]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER F", direction="l", linebreak="ai", unicodeslot=0x1F175, }, [0x1F176]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER G", direction="l", linebreak="ai", unicodeslot=0x1F176, }, [0x1F177]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER H", direction="l", linebreak="ai", unicodeslot=0x1F177, }, [0x1F178]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER I", direction="l", linebreak="ai", unicodeslot=0x1F178, }, [0x1F179]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER J", direction="l", linebreak="ai", unicodeslot=0x1F179, }, [0x1F17A]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER K", direction="l", linebreak="ai", unicodeslot=0x1F17A, }, [0x1F17B]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER L", direction="l", linebreak="ai", unicodeslot=0x1F17B, }, [0x1F17C]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER M", direction="l", linebreak="ai", unicodeslot=0x1F17C, }, [0x1F17D]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER N", direction="l", linebreak="ai", unicodeslot=0x1F17D, }, [0x1F17E]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER O", direction="l", linebreak="ai", unicodeslot=0x1F17E, }, [0x1F17F]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER P", direction="l", linebreak="ai", unicodeslot=0x1F17F, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x1F180]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER Q", direction="l", linebreak="ai", unicodeslot=0x1F180, }, [0x1F181]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER R", direction="l", linebreak="ai", unicodeslot=0x1F181, }, [0x1F182]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER S", direction="l", linebreak="ai", unicodeslot=0x1F182, }, [0x1F183]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER T", direction="l", linebreak="ai", unicodeslot=0x1F183, }, [0x1F184]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER U", direction="l", linebreak="ai", unicodeslot=0x1F184, }, [0x1F185]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER V", direction="l", linebreak="ai", unicodeslot=0x1F185, }, [0x1F186]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER W", direction="l", linebreak="ai", unicodeslot=0x1F186, }, [0x1F187]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER X", direction="l", linebreak="ai", unicodeslot=0x1F187, }, [0x1F188]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER Y", direction="l", linebreak="ai", unicodeslot=0x1F188, }, [0x1F189]={ category="so", cjkwd="a", description="NEGATIVE SQUARED LATIN CAPITAL LETTER Z", direction="l", linebreak="ai", unicodeslot=0x1F189, }, [0x1F18A]={ category="so", cjkwd="a", description="CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P", direction="l", linebreak="ai", unicodeslot=0x1F18A, }, [0x1F18B]={ category="so", cjkwd="a", description="NEGATIVE SQUARED IC", direction="l", linebreak="ai", unicodeslot=0x1F18B, }, [0x1F18C]={ category="so", cjkwd="a", description="NEGATIVE SQUARED PA", direction="l", linebreak="ai", unicodeslot=0x1F18C, }, [0x1F18D]={ category="so", cjkwd="a", description="NEGATIVE SQUARED SA", direction="l", linebreak="ai", unicodeslot=0x1F18D, }, [0x1F18E]={ category="so", cjkwd="a", description="NEGATIVE SQUARED AB", direction="l", linebreak="ai", unicodeslot=0x1F18E, }, [0x1F18F]={ category="so", cjkwd="a", description="NEGATIVE SQUARED WC", direction="l", linebreak="ai", unicodeslot=0x1F18F, }, [0x1F190]={ category="so", cjkwd="a", description="SQUARE DJ", direction="l", linebreak="ai", specials={ "square", 0x0044, 0x004A }, unicodeslot=0x1F190, }, [0x1F191]={ category="so", cjkwd="a", description="SQUARED CL", direction="l", linebreak="ai", unicodeslot=0x1F191, }, [0x1F192]={ category="so", cjkwd="a", description="SQUARED COOL", direction="l", linebreak="ai", unicodeslot=0x1F192, }, [0x1F193]={ category="so", cjkwd="a", description="SQUARED FREE", direction="l", linebreak="ai", unicodeslot=0x1F193, }, [0x1F194]={ category="so", cjkwd="a", description="SQUARED ID", direction="l", linebreak="ai", unicodeslot=0x1F194, }, [0x1F195]={ category="so", cjkwd="a", description="SQUARED NEW", direction="l", linebreak="ai", unicodeslot=0x1F195, }, [0x1F196]={ category="so", cjkwd="a", description="SQUARED NG", direction="l", linebreak="ai", unicodeslot=0x1F196, }, [0x1F197]={ category="so", cjkwd="a", description="SQUARED OK", direction="l", linebreak="ai", unicodeslot=0x1F197, }, [0x1F198]={ category="so", cjkwd="a", description="SQUARED SOS", direction="l", linebreak="ai", unicodeslot=0x1F198, }, [0x1F199]={ category="so", cjkwd="a", description="SQUARED UP WITH EXCLAMATION MARK", direction="l", linebreak="ai", unicodeslot=0x1F199, }, [0x1F19A]={ category="so", cjkwd="a", description="SQUARED VS", direction="l", linebreak="ai", unicodeslot=0x1F19A, }, [0x1F1E6]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER A", direction="l", linebreak="ri", unicodeslot=0x1F1E6, }, [0x1F1E7]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER B", direction="l", linebreak="ri", unicodeslot=0x1F1E7, }, [0x1F1E8]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER C", direction="l", linebreak="ri", unicodeslot=0x1F1E8, }, [0x1F1E9]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER D", direction="l", linebreak="ri", unicodeslot=0x1F1E9, }, [0x1F1EA]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER E", direction="l", linebreak="ri", unicodeslot=0x1F1EA, }, [0x1F1EB]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER F", direction="l", linebreak="ri", unicodeslot=0x1F1EB, }, [0x1F1EC]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER G", direction="l", linebreak="ri", unicodeslot=0x1F1EC, }, [0x1F1ED]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER H", direction="l", linebreak="ri", unicodeslot=0x1F1ED, }, [0x1F1EE]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER I", direction="l", linebreak="ri", unicodeslot=0x1F1EE, }, [0x1F1EF]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER J", direction="l", linebreak="ri", unicodeslot=0x1F1EF, }, [0x1F1F0]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER K", direction="l", linebreak="ri", unicodeslot=0x1F1F0, }, [0x1F1F1]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER L", direction="l", linebreak="ri", unicodeslot=0x1F1F1, }, [0x1F1F2]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER M", direction="l", linebreak="ri", unicodeslot=0x1F1F2, }, [0x1F1F3]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER N", direction="l", linebreak="ri", unicodeslot=0x1F1F3, }, [0x1F1F4]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER O", direction="l", linebreak="ri", unicodeslot=0x1F1F4, }, [0x1F1F5]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER P", direction="l", linebreak="ri", unicodeslot=0x1F1F5, }, [0x1F1F6]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER Q", direction="l", linebreak="ri", unicodeslot=0x1F1F6, }, [0x1F1F7]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER R", direction="l", linebreak="ri", unicodeslot=0x1F1F7, }, [0x1F1F8]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER S", direction="l", linebreak="ri", unicodeslot=0x1F1F8, }, [0x1F1F9]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER T", direction="l", linebreak="ri", unicodeslot=0x1F1F9, }, [0x1F1FA]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER U", direction="l", linebreak="ri", unicodeslot=0x1F1FA, }, [0x1F1FB]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER V", direction="l", linebreak="ri", unicodeslot=0x1F1FB, }, [0x1F1FC]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER W", direction="l", linebreak="ri", unicodeslot=0x1F1FC, }, [0x1F1FD]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER X", direction="l", linebreak="ri", unicodeslot=0x1F1FD, }, [0x1F1FE]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER Y", direction="l", linebreak="ri", unicodeslot=0x1F1FE, }, [0x1F1FF]={ category="so", description="REGIONAL INDICATOR SYMBOL LETTER Z", direction="l", linebreak="ri", unicodeslot=0x1F1FF, }, [0x1F200]={ category="so", cjkwd="w", description="SQUARE HIRAGANA HOKA", direction="l", linebreak="id", specials={ "square", 0x307B, 0x304B }, unicodeslot=0x1F200, }, [0x1F201]={ category="so", cjkwd="w", description="SQUARED KATAKANA KOKO", direction="l", linebreak="id", specials={ "square", 0x30B3, 0x30B3 }, unicodeslot=0x1F201, }, [0x1F202]={ category="so", cjkwd="w", description="SQUARED KATAKANA SA", direction="l", linebreak="id", specials={ "square", 0x30B5 }, unicodeslot=0x1F202, }, [0x1F210]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-624B", direction="l", linebreak="id", specials={ "square", 0x624B }, unicodeslot=0x1F210, }, [0x1F211]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5B57", direction="l", linebreak="id", specials={ "square", 0x5B57 }, unicodeslot=0x1F211, }, [0x1F212]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-53CC", direction="l", linebreak="id", specials={ "square", 0x53CC }, unicodeslot=0x1F212, }, [0x1F213]={ category="so", cjkwd="w", description="SQUARED KATAKANA DE", direction="l", linebreak="id", specials={ "square", 0x30C7 }, unicodeslot=0x1F213, }, [0x1F214]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-4E8C", direction="l", linebreak="id", specials={ "square", 0x4E8C }, unicodeslot=0x1F214, }, [0x1F215]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-591A", direction="l", linebreak="id", specials={ "square", 0x591A }, unicodeslot=0x1F215, }, [0x1F216]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-89E3", direction="l", linebreak="id", specials={ "square", 0x89E3 }, unicodeslot=0x1F216, }, [0x1F217]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5929", direction="l", linebreak="id", specials={ "square", 0x5929 }, unicodeslot=0x1F217, }, [0x1F218]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-4EA4", direction="l", linebreak="id", specials={ "square", 0x4EA4 }, unicodeslot=0x1F218, }, [0x1F219]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6620", direction="l", linebreak="id", specials={ "square", 0x6620 }, unicodeslot=0x1F219, }, [0x1F21A]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-7121", direction="l", linebreak="id", specials={ "square", 0x7121 }, unicodeslot=0x1F21A, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x1F21B]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6599", direction="l", linebreak="id", specials={ "square", 0x6599 }, unicodeslot=0x1F21B, }, [0x1F21C]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-524D", direction="l", linebreak="id", specials={ "square", 0x524D }, unicodeslot=0x1F21C, }, [0x1F21D]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5F8C", direction="l", linebreak="id", specials={ "square", 0x5F8C }, unicodeslot=0x1F21D, }, [0x1F21E]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-518D", direction="l", linebreak="id", specials={ "square", 0x518D }, unicodeslot=0x1F21E, }, [0x1F21F]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-65B0", direction="l", linebreak="id", specials={ "square", 0x65B0 }, unicodeslot=0x1F21F, }, [0x1F220]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-521D", direction="l", linebreak="id", specials={ "square", 0x521D }, unicodeslot=0x1F220, }, [0x1F221]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-7D42", direction="l", linebreak="id", specials={ "square", 0x7D42 }, unicodeslot=0x1F221, }, [0x1F222]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-751F", direction="l", linebreak="id", specials={ "square", 0x751F }, unicodeslot=0x1F222, }, [0x1F223]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-8CA9", direction="l", linebreak="id", specials={ "square", 0x8CA9 }, unicodeslot=0x1F223, }, [0x1F224]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-58F0", direction="l", linebreak="id", specials={ "square", 0x58F0 }, unicodeslot=0x1F224, }, [0x1F225]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5439", direction="l", linebreak="id", specials={ "square", 0x5439 }, unicodeslot=0x1F225, }, [0x1F226]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6F14", direction="l", linebreak="id", specials={ "square", 0x6F14 }, unicodeslot=0x1F226, }, [0x1F227]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6295", direction="l", linebreak="id", specials={ "square", 0x6295 }, unicodeslot=0x1F227, }, [0x1F228]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6355", direction="l", linebreak="id", specials={ "square", 0x6355 }, unicodeslot=0x1F228, }, [0x1F229]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-4E00", direction="l", linebreak="id", specials={ "square", 0x4E00 }, unicodeslot=0x1F229, }, [0x1F22A]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-4E09", direction="l", linebreak="id", specials={ "square", 0x4E09 }, unicodeslot=0x1F22A, }, [0x1F22B]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-904A", direction="l", linebreak="id", specials={ "square", 0x904A }, unicodeslot=0x1F22B, }, [0x1F22C]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5DE6", direction="l", linebreak="id", specials={ "square", 0x5DE6 }, unicodeslot=0x1F22C, }, [0x1F22D]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-4E2D", direction="l", linebreak="id", specials={ "square", 0x4E2D }, unicodeslot=0x1F22D, }, [0x1F22E]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-53F3", direction="l", linebreak="id", specials={ "square", 0x53F3 }, unicodeslot=0x1F22E, }, [0x1F22F]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6307", direction="l", linebreak="id", specials={ "square", 0x6307 }, unicodeslot=0x1F22F, variants={ [0xFE0E]="text style", [0xFE0F]="emoji style", }, }, [0x1F230]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-8D70", direction="l", linebreak="id", specials={ "square", 0x8D70 }, unicodeslot=0x1F230, }, [0x1F231]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6253", direction="l", linebreak="id", specials={ "square", 0x6253 }, unicodeslot=0x1F231, }, [0x1F232]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-7981", direction="l", linebreak="id", specials={ "square", 0x7981 }, unicodeslot=0x1F232, }, [0x1F233]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-7A7A", direction="l", linebreak="id", specials={ "square", 0x7A7A }, unicodeslot=0x1F233, }, [0x1F234]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5408", direction="l", linebreak="id", specials={ "square", 0x5408 }, unicodeslot=0x1F234, }, [0x1F235]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6E80", direction="l", linebreak="id", specials={ "square", 0x6E80 }, unicodeslot=0x1F235, }, [0x1F236]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6709", direction="l", linebreak="id", specials={ "square", 0x6709 }, unicodeslot=0x1F236, }, [0x1F237]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-6708", direction="l", linebreak="id", specials={ "square", 0x6708 }, unicodeslot=0x1F237, }, [0x1F238]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-7533", direction="l", linebreak="id", specials={ "square", 0x7533 }, unicodeslot=0x1F238, }, [0x1F239]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-5272", direction="l", linebreak="id", specials={ "square", 0x5272 }, unicodeslot=0x1F239, }, [0x1F23A]={ category="so", cjkwd="w", description="SQUARED CJK UNIFIED IDEOGRAPH-55B6", direction="l", linebreak="id", specials={ "square", 0x55B6 }, unicodeslot=0x1F23A, }, [0x1F240]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x672C, 0x3015 }, unicodeslot=0x1F240, }, [0x1F241]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x4E09, 0x3015 }, unicodeslot=0x1F241, }, [0x1F242]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x4E8C, 0x3015 }, unicodeslot=0x1F242, }, [0x1F243]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x5B89, 0x3015 }, unicodeslot=0x1F243, }, [0x1F244]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x70B9, 0x3015 }, unicodeslot=0x1F244, }, [0x1F245]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x6253, 0x3015 }, unicodeslot=0x1F245, }, [0x1F246]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x76D7, 0x3015 }, unicodeslot=0x1F246, }, [0x1F247]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x52DD, 0x3015 }, unicodeslot=0x1F247, }, [0x1F248]={ category="so", cjkwd="w", description="TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557", direction="l", linebreak="id", specials={ "compat", 0x3014, 0x6557, 0x3015 }, unicodeslot=0x1F248, }, [0x1F250]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH ADVANTAGE", direction="l", linebreak="id", specials={ "circle", 0x5F97 }, unicodeslot=0x1F250, }, [0x1F251]={ category="so", cjkwd="w", description="CIRCLED IDEOGRAPH ACCEPT", direction="l", linebreak="id", specials={ "circle", 0x53EF }, unicodeslot=0x1F251, }, [0x1F300]={ category="so", description="CYCLONE", direction="on", linebreak="id", unicodeslot=0x1F300, }, [0x1F301]={ category="so", description="FOGGY", direction="on", linebreak="id", unicodeslot=0x1F301, }, [0x1F302]={ category="so", description="CLOSED UMBRELLA", direction="on", linebreak="id", unicodeslot=0x1F302, }, [0x1F303]={ category="so", description="NIGHT WITH STARS", direction="on", linebreak="id", unicodeslot=0x1F303, }, [0x1F304]={ category="so", description="SUNRISE OVER MOUNTAINS", direction="on", linebreak="id", unicodeslot=0x1F304, }, [0x1F305]={ category="so", description="SUNRISE", direction="on", linebreak="id", unicodeslot=0x1F305, }, [0x1F306]={ category="so", description="CITYSCAPE AT DUSK", direction="on", linebreak="id", unicodeslot=0x1F306, }, [0x1F307]={ category="so", description="SUNSET OVER BUILDINGS", direction="on", linebreak="id", unicodeslot=0x1F307, }, [0x1F308]={ category="so", description="RAINBOW", direction="on", linebreak="id", unicodeslot=0x1F308, }, [0x1F309]={ category="so", description="BRIDGE AT NIGHT", direction="on", linebreak="id", unicodeslot=0x1F309, }, [0x1F30A]={ category="so", description="WATER WAVE", direction="on", linebreak="id", unicodeslot=0x1F30A, }, [0x1F30B]={ category="so", description="VOLCANO", direction="on", linebreak="id", unicodeslot=0x1F30B, }, [0x1F30C]={ category="so", description="MILKY WAY", direction="on", linebreak="id", unicodeslot=0x1F30C, }, [0x1F30D]={ category="so", description="EARTH GLOBE EUROPE-AFRICA", direction="on", linebreak="id", unicodeslot=0x1F30D, }, [0x1F30E]={ category="so", description="EARTH GLOBE AMERICAS", direction="on", linebreak="id", unicodeslot=0x1F30E, }, [0x1F30F]={ category="so", description="EARTH GLOBE ASIA-AUSTRALIA", direction="on", linebreak="id", unicodeslot=0x1F30F, }, [0x1F310]={ category="so", description="GLOBE WITH MERIDIANS", direction="on", linebreak="id", unicodeslot=0x1F310, }, [0x1F311]={ category="so", description="NEW MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F311, }, [0x1F312]={ category="so", description="WAXING CRESCENT MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F312, }, [0x1F313]={ category="so", description="FIRST QUARTER MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F313, }, [0x1F314]={ category="so", description="WAXING GIBBOUS MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F314, }, [0x1F315]={ category="so", description="FULL MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F315, }, [0x1F316]={ category="so", description="WANING GIBBOUS MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F316, }, [0x1F317]={ category="so", description="LAST QUARTER MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F317, }, [0x1F318]={ category="so", description="WANING CRESCENT MOON SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F318, }, [0x1F319]={ category="so", description="CRESCENT MOON", direction="on", linebreak="id", unicodeslot=0x1F319, }, [0x1F31A]={ category="so", description="NEW MOON WITH FACE", direction="on", linebreak="id", unicodeslot=0x1F31A, }, [0x1F31B]={ category="so", description="FIRST QUARTER MOON WITH FACE", direction="on", linebreak="id", unicodeslot=0x1F31B, }, [0x1F31C]={ category="so", description="LAST QUARTER MOON WITH FACE", direction="on", linebreak="id", unicodeslot=0x1F31C, }, [0x1F31D]={ category="so", description="FULL MOON WITH FACE", direction="on", linebreak="id", unicodeslot=0x1F31D, }, [0x1F31E]={ category="so", description="SUN WITH FACE", direction="on", linebreak="id", unicodeslot=0x1F31E, }, [0x1F31F]={ category="so", description="GLOWING STAR", direction="on", linebreak="id", unicodeslot=0x1F31F, }, [0x1F320]={ category="so", description="SHOOTING STAR", direction="on", linebreak="id", unicodeslot=0x1F320, }, [0x1F330]={ category="so", description="CHESTNUT", direction="on", linebreak="id", unicodeslot=0x1F330, }, [0x1F331]={ category="so", description="SEEDLING", direction="on", linebreak="id", unicodeslot=0x1F331, }, [0x1F332]={ category="so", description="EVERGREEN TREE", direction="on", linebreak="id", unicodeslot=0x1F332, }, [0x1F333]={ category="so", description="DECIDUOUS TREE", direction="on", linebreak="id", unicodeslot=0x1F333, }, [0x1F334]={ category="so", description="PALM TREE", direction="on", linebreak="id", unicodeslot=0x1F334, }, [0x1F335]={ category="so", description="CACTUS", direction="on", linebreak="id", unicodeslot=0x1F335, }, [0x1F337]={ category="so", description="TULIP", direction="on", linebreak="id", unicodeslot=0x1F337, }, [0x1F338]={ category="so", description="CHERRY BLOSSOM", direction="on", linebreak="id", unicodeslot=0x1F338, }, [0x1F339]={ category="so", description="ROSE", direction="on", linebreak="id", unicodeslot=0x1F339, }, [0x1F33A]={ category="so", description="HIBISCUS", direction="on", linebreak="id", unicodeslot=0x1F33A, }, [0x1F33B]={ category="so", description="SUNFLOWER", direction="on", linebreak="id", unicodeslot=0x1F33B, }, [0x1F33C]={ category="so", description="BLOSSOM", direction="on", linebreak="id", unicodeslot=0x1F33C, }, [0x1F33D]={ category="so", description="EAR OF MAIZE", direction="on", linebreak="id", unicodeslot=0x1F33D, }, [0x1F33E]={ category="so", description="EAR OF RICE", direction="on", linebreak="id", unicodeslot=0x1F33E, }, [0x1F33F]={ category="so", description="HERB", direction="on", linebreak="id", unicodeslot=0x1F33F, }, [0x1F340]={ category="so", description="FOUR LEAF CLOVER", direction="on", linebreak="id", unicodeslot=0x1F340, }, [0x1F341]={ category="so", description="MAPLE LEAF", direction="on", linebreak="id", unicodeslot=0x1F341, }, [0x1F342]={ category="so", description="FALLEN LEAF", direction="on", linebreak="id", unicodeslot=0x1F342, }, [0x1F343]={ category="so", description="LEAF FLUTTERING IN WIND", direction="on", linebreak="id", unicodeslot=0x1F343, }, [0x1F344]={ category="so", description="MUSHROOM", direction="on", linebreak="id", unicodeslot=0x1F344, }, [0x1F345]={ category="so", description="TOMATO", direction="on", linebreak="id", unicodeslot=0x1F345, }, [0x1F346]={ category="so", description="AUBERGINE", direction="on", linebreak="id", unicodeslot=0x1F346, }, [0x1F347]={ category="so", description="GRAPES", direction="on", linebreak="id", unicodeslot=0x1F347, }, [0x1F348]={ category="so", description="MELON", direction="on", linebreak="id", unicodeslot=0x1F348, }, [0x1F349]={ category="so", description="WATERMELON", direction="on", linebreak="id", unicodeslot=0x1F349, }, [0x1F34A]={ category="so", description="TANGERINE", direction="on", linebreak="id", unicodeslot=0x1F34A, }, [0x1F34B]={ category="so", description="LEMON", direction="on", linebreak="id", unicodeslot=0x1F34B, }, [0x1F34C]={ category="so", description="BANANA", direction="on", linebreak="id", unicodeslot=0x1F34C, }, [0x1F34D]={ category="so", description="PINEAPPLE", direction="on", linebreak="id", unicodeslot=0x1F34D, }, [0x1F34E]={ category="so", description="RED APPLE", direction="on", linebreak="id", unicodeslot=0x1F34E, }, [0x1F34F]={ category="so", description="GREEN APPLE", direction="on", linebreak="id", unicodeslot=0x1F34F, }, [0x1F350]={ category="so", description="PEAR", direction="on", linebreak="id", unicodeslot=0x1F350, }, [0x1F351]={ category="so", description="PEACH", direction="on", linebreak="id", unicodeslot=0x1F351, }, [0x1F352]={ category="so", description="CHERRIES", direction="on", linebreak="id", unicodeslot=0x1F352, }, [0x1F353]={ category="so", description="STRAWBERRY", direction="on", linebreak="id", unicodeslot=0x1F353, }, [0x1F354]={ category="so", description="HAMBURGER", direction="on", linebreak="id", unicodeslot=0x1F354, }, [0x1F355]={ category="so", description="SLICE OF PIZZA", direction="on", linebreak="id", unicodeslot=0x1F355, }, [0x1F356]={ category="so", description="MEAT ON BONE", direction="on", linebreak="id", unicodeslot=0x1F356, }, [0x1F357]={ category="so", description="POULTRY LEG", direction="on", linebreak="id", unicodeslot=0x1F357, }, [0x1F358]={ category="so", description="RICE CRACKER", direction="on", linebreak="id", unicodeslot=0x1F358, }, [0x1F359]={ category="so", description="RICE BALL", direction="on", linebreak="id", unicodeslot=0x1F359, }, [0x1F35A]={ category="so", description="COOKED RICE", direction="on", linebreak="id", unicodeslot=0x1F35A, }, [0x1F35B]={ category="so", description="CURRY AND RICE", direction="on", linebreak="id", unicodeslot=0x1F35B, }, [0x1F35C]={ category="so", description="STEAMING BOWL", direction="on", linebreak="id", unicodeslot=0x1F35C, }, [0x1F35D]={ category="so", description="SPAGHETTI", direction="on", linebreak="id", unicodeslot=0x1F35D, }, [0x1F35E]={ category="so", description="BREAD", direction="on", linebreak="id", unicodeslot=0x1F35E, }, [0x1F35F]={ category="so", description="FRENCH FRIES", direction="on", linebreak="id", unicodeslot=0x1F35F, }, [0x1F360]={ category="so", description="ROASTED SWEET POTATO", direction="on", linebreak="id", unicodeslot=0x1F360, }, [0x1F361]={ category="so", description="DANGO", direction="on", linebreak="id", unicodeslot=0x1F361, }, [0x1F362]={ category="so", description="ODEN", direction="on", linebreak="id", unicodeslot=0x1F362, }, [0x1F363]={ category="so", description="SUSHI", direction="on", linebreak="id", unicodeslot=0x1F363, }, [0x1F364]={ category="so", description="FRIED SHRIMP", direction="on", linebreak="id", unicodeslot=0x1F364, }, [0x1F365]={ category="so", description="FISH CAKE WITH SWIRL DESIGN", direction="on", linebreak="id", unicodeslot=0x1F365, }, [0x1F366]={ category="so", description="SOFT ICE CREAM", direction="on", linebreak="id", unicodeslot=0x1F366, }, [0x1F367]={ category="so", description="SHAVED ICE", direction="on", linebreak="id", unicodeslot=0x1F367, }, [0x1F368]={ category="so", description="ICE CREAM", direction="on", linebreak="id", unicodeslot=0x1F368, }, [0x1F369]={ category="so", description="DOUGHNUT", direction="on", linebreak="id", unicodeslot=0x1F369, }, [0x1F36A]={ category="so", description="COOKIE", direction="on", linebreak="id", unicodeslot=0x1F36A, }, [0x1F36B]={ category="so", description="CHOCOLATE BAR", direction="on", linebreak="id", unicodeslot=0x1F36B, }, [0x1F36C]={ category="so", description="CANDY", direction="on", linebreak="id", unicodeslot=0x1F36C, }, [0x1F36D]={ category="so", description="LOLLIPOP", direction="on", linebreak="id", unicodeslot=0x1F36D, }, [0x1F36E]={ category="so", description="CUSTARD", direction="on", linebreak="id", unicodeslot=0x1F36E, }, [0x1F36F]={ category="so", description="HONEY POT", direction="on", linebreak="id", unicodeslot=0x1F36F, }, [0x1F370]={ category="so", description="SHORTCAKE", direction="on", linebreak="id", unicodeslot=0x1F370, }, [0x1F371]={ category="so", description="BENTO BOX", direction="on", linebreak="id", unicodeslot=0x1F371, }, [0x1F372]={ category="so", description="POT OF FOOD", direction="on", linebreak="id", unicodeslot=0x1F372, }, [0x1F373]={ category="so", description="COOKING", direction="on", linebreak="id", unicodeslot=0x1F373, }, [0x1F374]={ category="so", description="FORK AND KNIFE", direction="on", linebreak="id", unicodeslot=0x1F374, }, [0x1F375]={ category="so", description="TEACUP WITHOUT HANDLE", direction="on", linebreak="id", unicodeslot=0x1F375, }, [0x1F376]={ category="so", description="SAKE BOTTLE AND CUP", direction="on", linebreak="id", unicodeslot=0x1F376, }, [0x1F377]={ category="so", description="WINE GLASS", direction="on", linebreak="id", unicodeslot=0x1F377, }, [0x1F378]={ category="so", description="COCKTAIL GLASS", direction="on", linebreak="id", unicodeslot=0x1F378, }, [0x1F379]={ category="so", description="TROPICAL DRINK", direction="on", linebreak="id", unicodeslot=0x1F379, }, [0x1F37A]={ category="so", description="BEER MUG", direction="on", linebreak="id", unicodeslot=0x1F37A, }, [0x1F37B]={ category="so", description="CLINKING BEER MUGS", direction="on", linebreak="id", unicodeslot=0x1F37B, }, [0x1F37C]={ category="so", description="BABY BOTTLE", direction="on", linebreak="id", unicodeslot=0x1F37C, }, [0x1F380]={ category="so", description="RIBBON", direction="on", linebreak="id", unicodeslot=0x1F380, }, [0x1F381]={ category="so", description="WRAPPED PRESENT", direction="on", linebreak="id", unicodeslot=0x1F381, }, [0x1F382]={ category="so", description="BIRTHDAY CAKE", direction="on", linebreak="id", unicodeslot=0x1F382, }, [0x1F383]={ category="so", description="JACK-O-LANTERN", direction="on", linebreak="id", unicodeslot=0x1F383, }, [0x1F384]={ category="so", description="CHRISTMAS TREE", direction="on", linebreak="id", unicodeslot=0x1F384, }, [0x1F385]={ category="so", description="FATHER CHRISTMAS", direction="on", linebreak="id", unicodeslot=0x1F385, }, [0x1F386]={ category="so", description="FIREWORKS", direction="on", linebreak="id", unicodeslot=0x1F386, }, [0x1F387]={ category="so", description="FIREWORK SPARKLER", direction="on", linebreak="id", unicodeslot=0x1F387, }, [0x1F388]={ category="so", description="BALLOON", direction="on", linebreak="id", unicodeslot=0x1F388, }, [0x1F389]={ category="so", description="PARTY POPPER", direction="on", linebreak="id", unicodeslot=0x1F389, }, [0x1F38A]={ category="so", description="CONFETTI BALL", direction="on", linebreak="id", unicodeslot=0x1F38A, }, [0x1F38B]={ category="so", description="TANABATA TREE", direction="on", linebreak="id", unicodeslot=0x1F38B, }, [0x1F38C]={ category="so", description="CROSSED FLAGS", direction="on", linebreak="id", unicodeslot=0x1F38C, }, [0x1F38D]={ category="so", description="PINE DECORATION", direction="on", linebreak="id", unicodeslot=0x1F38D, }, [0x1F38E]={ category="so", description="JAPANESE DOLLS", direction="on", linebreak="id", unicodeslot=0x1F38E, }, [0x1F38F]={ category="so", description="CARP STREAMER", direction="on", linebreak="id", unicodeslot=0x1F38F, }, [0x1F390]={ category="so", description="WIND CHIME", direction="on", linebreak="id", unicodeslot=0x1F390, }, [0x1F391]={ category="so", description="MOON VIEWING CEREMONY", direction="on", linebreak="id", unicodeslot=0x1F391, }, [0x1F392]={ category="so", description="SCHOOL SATCHEL", direction="on", linebreak="id", unicodeslot=0x1F392, }, [0x1F393]={ category="so", description="GRADUATION CAP", direction="on", linebreak="id", unicodeslot=0x1F393, }, [0x1F3A0]={ category="so", description="CAROUSEL HORSE", direction="on", linebreak="id", unicodeslot=0x1F3A0, }, [0x1F3A1]={ category="so", description="FERRIS WHEEL", direction="on", linebreak="id", unicodeslot=0x1F3A1, }, [0x1F3A2]={ category="so", description="ROLLER COASTER", direction="on", linebreak="id", unicodeslot=0x1F3A2, }, [0x1F3A3]={ category="so", description="FISHING POLE AND FISH", direction="on", linebreak="id", unicodeslot=0x1F3A3, }, [0x1F3A4]={ category="so", description="MICROPHONE", direction="on", linebreak="id", unicodeslot=0x1F3A4, }, [0x1F3A5]={ category="so", description="MOVIE CAMERA", direction="on", linebreak="id", unicodeslot=0x1F3A5, }, [0x1F3A6]={ category="so", description="CINEMA", direction="on", linebreak="id", unicodeslot=0x1F3A6, }, [0x1F3A7]={ category="so", description="HEADPHONE", direction="on", linebreak="id", unicodeslot=0x1F3A7, }, [0x1F3A8]={ category="so", description="ARTIST PALETTE", direction="on", linebreak="id", unicodeslot=0x1F3A8, }, [0x1F3A9]={ category="so", description="TOP HAT", direction="on", linebreak="id", unicodeslot=0x1F3A9, }, [0x1F3AA]={ category="so", description="CIRCUS TENT", direction="on", linebreak="id", unicodeslot=0x1F3AA, }, [0x1F3AB]={ category="so", description="TICKET", direction="on", linebreak="id", unicodeslot=0x1F3AB, }, [0x1F3AC]={ category="so", description="CLAPPER BOARD", direction="on", linebreak="id", unicodeslot=0x1F3AC, }, [0x1F3AD]={ category="so", description="PERFORMING ARTS", direction="on", linebreak="id", unicodeslot=0x1F3AD, }, [0x1F3AE]={ category="so", description="VIDEO GAME", direction="on", linebreak="id", unicodeslot=0x1F3AE, }, [0x1F3AF]={ category="so", description="DIRECT HIT", direction="on", linebreak="id", unicodeslot=0x1F3AF, }, [0x1F3B0]={ category="so", description="SLOT MACHINE", direction="on", linebreak="id", unicodeslot=0x1F3B0, }, [0x1F3B1]={ category="so", description="BILLIARDS", direction="on", linebreak="id", unicodeslot=0x1F3B1, }, [0x1F3B2]={ category="so", description="GAME DIE", direction="on", linebreak="id", unicodeslot=0x1F3B2, }, [0x1F3B3]={ category="so", description="BOWLING", direction="on", linebreak="id", unicodeslot=0x1F3B3, }, [0x1F3B4]={ category="so", description="FLOWER PLAYING CARDS", direction="on", linebreak="id", unicodeslot=0x1F3B4, }, [0x1F3B5]={ category="so", description="MUSICAL NOTE", direction="on", linebreak="al", unicodeslot=0x1F3B5, }, [0x1F3B6]={ category="so", description="MULTIPLE MUSICAL NOTES", direction="on", linebreak="al", unicodeslot=0x1F3B6, }, [0x1F3B7]={ category="so", description="SAXOPHONE", direction="on", linebreak="id", unicodeslot=0x1F3B7, }, [0x1F3B8]={ category="so", description="GUITAR", direction="on", linebreak="id", unicodeslot=0x1F3B8, }, [0x1F3B9]={ category="so", description="MUSICAL KEYBOARD", direction="on", linebreak="id", unicodeslot=0x1F3B9, }, [0x1F3BA]={ category="so", description="TRUMPET", direction="on", linebreak="id", unicodeslot=0x1F3BA, }, [0x1F3BB]={ category="so", description="VIOLIN", direction="on", linebreak="id", unicodeslot=0x1F3BB, }, [0x1F3BC]={ category="so", description="MUSICAL SCORE", direction="on", linebreak="al", unicodeslot=0x1F3BC, }, [0x1F3BD]={ category="so", description="RUNNING SHIRT WITH SASH", direction="on", linebreak="id", unicodeslot=0x1F3BD, }, [0x1F3BE]={ category="so", description="TENNIS RACQUET AND BALL", direction="on", linebreak="id", unicodeslot=0x1F3BE, }, [0x1F3BF]={ category="so", description="SKI AND SKI BOOT", direction="on", linebreak="id", unicodeslot=0x1F3BF, }, [0x1F3C0]={ category="so", description="BASKETBALL AND HOOP", direction="on", linebreak="id", unicodeslot=0x1F3C0, }, [0x1F3C1]={ category="so", description="CHEQUERED FLAG", direction="on", linebreak="id", unicodeslot=0x1F3C1, }, [0x1F3C2]={ category="so", description="SNOWBOARDER", direction="on", linebreak="id", unicodeslot=0x1F3C2, }, [0x1F3C3]={ category="so", description="RUNNER", direction="on", linebreak="id", unicodeslot=0x1F3C3, }, [0x1F3C4]={ category="so", description="SURFER", direction="on", linebreak="id", unicodeslot=0x1F3C4, }, [0x1F3C6]={ category="so", description="TROPHY", direction="on", linebreak="id", unicodeslot=0x1F3C6, }, [0x1F3C7]={ category="so", description="HORSE RACING", direction="on", linebreak="id", unicodeslot=0x1F3C7, }, [0x1F3C8]={ category="so", description="AMERICAN FOOTBALL", direction="on", linebreak="id", unicodeslot=0x1F3C8, }, [0x1F3C9]={ category="so", description="RUGBY FOOTBALL", direction="on", linebreak="id", unicodeslot=0x1F3C9, }, [0x1F3CA]={ category="so", description="SWIMMER", direction="on", linebreak="id", unicodeslot=0x1F3CA, }, [0x1F3E0]={ category="so", description="HOUSE BUILDING", direction="on", linebreak="id", unicodeslot=0x1F3E0, }, [0x1F3E1]={ category="so", description="HOUSE WITH GARDEN", direction="on", linebreak="id", unicodeslot=0x1F3E1, }, [0x1F3E2]={ category="so", description="OFFICE BUILDING", direction="on", linebreak="id", unicodeslot=0x1F3E2, }, [0x1F3E3]={ category="so", description="JAPANESE POST OFFICE", direction="on", linebreak="id", unicodeslot=0x1F3E3, }, [0x1F3E4]={ category="so", description="EUROPEAN POST OFFICE", direction="on", linebreak="id", unicodeslot=0x1F3E4, }, [0x1F3E5]={ category="so", description="HOSPITAL", direction="on", linebreak="id", unicodeslot=0x1F3E5, }, [0x1F3E6]={ category="so", description="BANK", direction="on", linebreak="id", unicodeslot=0x1F3E6, }, [0x1F3E7]={ category="so", description="AUTOMATED TELLER MACHINE", direction="on", linebreak="id", unicodeslot=0x1F3E7, }, [0x1F3E8]={ category="so", description="HOTEL", direction="on", linebreak="id", unicodeslot=0x1F3E8, }, [0x1F3E9]={ category="so", description="LOVE HOTEL", direction="on", linebreak="id", unicodeslot=0x1F3E9, }, [0x1F3EA]={ category="so", description="CONVENIENCE STORE", direction="on", linebreak="id", unicodeslot=0x1F3EA, }, [0x1F3EB]={ category="so", description="SCHOOL", direction="on", linebreak="id", unicodeslot=0x1F3EB, }, [0x1F3EC]={ category="so", description="DEPARTMENT STORE", direction="on", linebreak="id", unicodeslot=0x1F3EC, }, [0x1F3ED]={ category="so", description="FACTORY", direction="on", linebreak="id", unicodeslot=0x1F3ED, }, [0x1F3EE]={ category="so", description="IZAKAYA LANTERN", direction="on", linebreak="id", unicodeslot=0x1F3EE, }, [0x1F3EF]={ category="so", description="JAPANESE CASTLE", direction="on", linebreak="id", unicodeslot=0x1F3EF, }, [0x1F3F0]={ category="so", description="EUROPEAN CASTLE", direction="on", linebreak="id", unicodeslot=0x1F3F0, }, [0x1F400]={ category="so", description="RAT", direction="on", linebreak="id", unicodeslot=0x1F400, }, [0x1F401]={ category="so", description="MOUSE", direction="on", linebreak="id", unicodeslot=0x1F401, }, [0x1F402]={ category="so", description="OX", direction="on", linebreak="id", unicodeslot=0x1F402, }, [0x1F403]={ category="so", description="WATER BUFFALO", direction="on", linebreak="id", unicodeslot=0x1F403, }, [0x1F404]={ category="so", description="COW", direction="on", linebreak="id", unicodeslot=0x1F404, }, [0x1F405]={ category="so", description="TIGER", direction="on", linebreak="id", unicodeslot=0x1F405, }, [0x1F406]={ category="so", description="LEOPARD", direction="on", linebreak="id", unicodeslot=0x1F406, }, [0x1F407]={ category="so", description="RABBIT", direction="on", linebreak="id", unicodeslot=0x1F407, }, [0x1F408]={ category="so", description="CAT", direction="on", linebreak="id", unicodeslot=0x1F408, }, [0x1F409]={ category="so", description="DRAGON", direction="on", linebreak="id", unicodeslot=0x1F409, }, [0x1F40A]={ category="so", description="CROCODILE", direction="on", linebreak="id", unicodeslot=0x1F40A, }, [0x1F40B]={ category="so", description="WHALE", direction="on", linebreak="id", unicodeslot=0x1F40B, }, [0x1F40C]={ category="so", description="SNAIL", direction="on", linebreak="id", unicodeslot=0x1F40C, }, [0x1F40D]={ category="so", description="SNAKE", direction="on", linebreak="id", unicodeslot=0x1F40D, }, [0x1F40E]={ category="so", description="HORSE", direction="on", linebreak="id", unicodeslot=0x1F40E, }, [0x1F40F]={ category="so", description="RAM", direction="on", linebreak="id", unicodeslot=0x1F40F, }, [0x1F410]={ category="so", description="GOAT", direction="on", linebreak="id", unicodeslot=0x1F410, }, [0x1F411]={ category="so", description="SHEEP", direction="on", linebreak="id", unicodeslot=0x1F411, }, [0x1F412]={ category="so", description="MONKEY", direction="on", linebreak="id", unicodeslot=0x1F412, }, [0x1F413]={ category="so", description="ROOSTER", direction="on", linebreak="id", unicodeslot=0x1F413, }, [0x1F414]={ category="so", description="CHICKEN", direction="on", linebreak="id", unicodeslot=0x1F414, }, [0x1F415]={ category="so", description="DOG", direction="on", linebreak="id", unicodeslot=0x1F415, }, [0x1F416]={ category="so", description="PIG", direction="on", linebreak="id", unicodeslot=0x1F416, }, [0x1F417]={ category="so", description="BOAR", direction="on", linebreak="id", unicodeslot=0x1F417, }, [0x1F418]={ category="so", description="ELEPHANT", direction="on", linebreak="id", unicodeslot=0x1F418, }, [0x1F419]={ category="so", description="OCTOPUS", direction="on", linebreak="id", unicodeslot=0x1F419, }, [0x1F41A]={ category="so", description="SPIRAL SHELL", direction="on", linebreak="id", unicodeslot=0x1F41A, }, [0x1F41B]={ category="so", description="BUG", direction="on", linebreak="id", unicodeslot=0x1F41B, }, [0x1F41C]={ category="so", description="ANT", direction="on", linebreak="id", unicodeslot=0x1F41C, }, [0x1F41D]={ category="so", description="HONEYBEE", direction="on", linebreak="id", unicodeslot=0x1F41D, }, [0x1F41E]={ category="so", description="LADY BEETLE", direction="on", linebreak="id", unicodeslot=0x1F41E, }, [0x1F41F]={ category="so", description="FISH", direction="on", linebreak="id", unicodeslot=0x1F41F, }, [0x1F420]={ category="so", description="TROPICAL FISH", direction="on", linebreak="id", unicodeslot=0x1F420, }, [0x1F421]={ category="so", description="BLOWFISH", direction="on", linebreak="id", unicodeslot=0x1F421, }, [0x1F422]={ category="so", description="TURTLE", direction="on", linebreak="id", unicodeslot=0x1F422, }, [0x1F423]={ category="so", description="HATCHING CHICK", direction="on", linebreak="id", unicodeslot=0x1F423, }, [0x1F424]={ category="so", description="BABY CHICK", direction="on", linebreak="id", unicodeslot=0x1F424, }, [0x1F425]={ category="so", description="FRONT-FACING BABY CHICK", direction="on", linebreak="id", unicodeslot=0x1F425, }, [0x1F426]={ category="so", description="BIRD", direction="on", linebreak="id", unicodeslot=0x1F426, }, [0x1F427]={ category="so", description="PENGUIN", direction="on", linebreak="id", unicodeslot=0x1F427, }, [0x1F428]={ category="so", description="KOALA", direction="on", linebreak="id", unicodeslot=0x1F428, }, [0x1F429]={ category="so", description="POODLE", direction="on", linebreak="id", unicodeslot=0x1F429, }, [0x1F42A]={ category="so", description="DROMEDARY CAMEL", direction="on", linebreak="id", unicodeslot=0x1F42A, }, [0x1F42B]={ category="so", description="BACTRIAN CAMEL", direction="on", linebreak="id", unicodeslot=0x1F42B, }, [0x1F42C]={ category="so", description="DOLPHIN", direction="on", linebreak="id", unicodeslot=0x1F42C, }, [0x1F42D]={ category="so", description="MOUSE FACE", direction="on", linebreak="id", unicodeslot=0x1F42D, }, [0x1F42E]={ category="so", description="COW FACE", direction="on", linebreak="id", unicodeslot=0x1F42E, }, [0x1F42F]={ category="so", description="TIGER FACE", direction="on", linebreak="id", unicodeslot=0x1F42F, }, [0x1F430]={ category="so", description="RABBIT FACE", direction="on", linebreak="id", unicodeslot=0x1F430, }, [0x1F431]={ category="so", description="CAT FACE", direction="on", linebreak="id", unicodeslot=0x1F431, }, [0x1F432]={ category="so", description="DRAGON FACE", direction="on", linebreak="id", unicodeslot=0x1F432, }, [0x1F433]={ category="so", description="SPOUTING WHALE", direction="on", linebreak="id", unicodeslot=0x1F433, }, [0x1F434]={ category="so", description="HORSE FACE", direction="on", linebreak="id", unicodeslot=0x1F434, }, [0x1F435]={ category="so", description="MONKEY FACE", direction="on", linebreak="id", unicodeslot=0x1F435, }, [0x1F436]={ category="so", description="DOG FACE", direction="on", linebreak="id", unicodeslot=0x1F436, }, [0x1F437]={ category="so", description="PIG FACE", direction="on", linebreak="id", unicodeslot=0x1F437, }, [0x1F438]={ category="so", description="FROG FACE", direction="on", linebreak="id", unicodeslot=0x1F438, }, [0x1F439]={ category="so", description="HAMSTER FACE", direction="on", linebreak="id", unicodeslot=0x1F439, }, [0x1F43A]={ category="so", description="WOLF FACE", direction="on", linebreak="id", unicodeslot=0x1F43A, }, [0x1F43B]={ category="so", description="BEAR FACE", direction="on", linebreak="id", unicodeslot=0x1F43B, }, [0x1F43C]={ category="so", description="PANDA FACE", direction="on", linebreak="id", unicodeslot=0x1F43C, }, [0x1F43D]={ category="so", description="PIG NOSE", direction="on", linebreak="id", unicodeslot=0x1F43D, }, [0x1F43E]={ category="so", description="PAW PRINTS", direction="on", linebreak="id", unicodeslot=0x1F43E, }, [0x1F440]={ category="so", description="EYES", direction="on", linebreak="id", unicodeslot=0x1F440, }, [0x1F442]={ category="so", description="EAR", direction="on", linebreak="id", unicodeslot=0x1F442, }, [0x1F443]={ category="so", description="NOSE", direction="on", linebreak="id", unicodeslot=0x1F443, }, [0x1F444]={ category="so", description="MOUTH", direction="on", linebreak="id", unicodeslot=0x1F444, }, [0x1F445]={ category="so", description="TONGUE", direction="on", linebreak="id", unicodeslot=0x1F445, }, [0x1F446]={ category="so", description="WHITE UP POINTING BACKHAND INDEX", direction="on", linebreak="id", unicodeslot=0x1F446, }, [0x1F447]={ category="so", description="WHITE DOWN POINTING BACKHAND INDEX", direction="on", linebreak="id", unicodeslot=0x1F447, }, [0x1F448]={ category="so", description="WHITE LEFT POINTING BACKHAND INDEX", direction="on", linebreak="id", unicodeslot=0x1F448, }, [0x1F449]={ category="so", description="WHITE RIGHT POINTING BACKHAND INDEX", direction="on", linebreak="id", unicodeslot=0x1F449, }, [0x1F44A]={ category="so", description="FISTED HAND SIGN", direction="on", linebreak="id", unicodeslot=0x1F44A, }, [0x1F44B]={ category="so", description="WAVING HAND SIGN", direction="on", linebreak="id", unicodeslot=0x1F44B, }, [0x1F44C]={ category="so", description="OK HAND SIGN", direction="on", linebreak="id", unicodeslot=0x1F44C, }, [0x1F44D]={ category="so", description="THUMBS UP SIGN", direction="on", linebreak="id", unicodeslot=0x1F44D, }, [0x1F44E]={ category="so", description="THUMBS DOWN SIGN", direction="on", linebreak="id", unicodeslot=0x1F44E, }, [0x1F44F]={ category="so", description="CLAPPING HANDS SIGN", direction="on", linebreak="id", unicodeslot=0x1F44F, }, [0x1F450]={ category="so", description="OPEN HANDS SIGN", direction="on", linebreak="id", unicodeslot=0x1F450, }, [0x1F451]={ category="so", description="CROWN", direction="on", linebreak="id", unicodeslot=0x1F451, }, [0x1F452]={ category="so", description="WOMANS HAT", direction="on", linebreak="id", unicodeslot=0x1F452, }, [0x1F453]={ category="so", description="EYEGLASSES", direction="on", linebreak="id", unicodeslot=0x1F453, }, [0x1F454]={ category="so", description="NECKTIE", direction="on", linebreak="id", unicodeslot=0x1F454, }, [0x1F455]={ category="so", description="T-SHIRT", direction="on", linebreak="id", unicodeslot=0x1F455, }, [0x1F456]={ category="so", description="JEANS", direction="on", linebreak="id", unicodeslot=0x1F456, }, [0x1F457]={ category="so", description="DRESS", direction="on", linebreak="id", unicodeslot=0x1F457, }, [0x1F458]={ category="so", description="KIMONO", direction="on", linebreak="id", unicodeslot=0x1F458, }, [0x1F459]={ category="so", description="BIKINI", direction="on", linebreak="id", unicodeslot=0x1F459, }, [0x1F45A]={ category="so", description="WOMANS CLOTHES", direction="on", linebreak="id", unicodeslot=0x1F45A, }, [0x1F45B]={ category="so", description="PURSE", direction="on", linebreak="id", unicodeslot=0x1F45B, }, [0x1F45C]={ category="so", description="HANDBAG", direction="on", linebreak="id", unicodeslot=0x1F45C, }, [0x1F45D]={ category="so", description="POUCH", direction="on", linebreak="id", unicodeslot=0x1F45D, }, [0x1F45E]={ category="so", description="MANS SHOE", direction="on", linebreak="id", unicodeslot=0x1F45E, }, [0x1F45F]={ category="so", description="ATHLETIC SHOE", direction="on", linebreak="id", unicodeslot=0x1F45F, }, [0x1F460]={ category="so", description="HIGH-HEELED SHOE", direction="on", linebreak="id", unicodeslot=0x1F460, }, [0x1F461]={ category="so", description="WOMANS SANDAL", direction="on", linebreak="id", unicodeslot=0x1F461, }, [0x1F462]={ category="so", description="WOMANS BOOTS", direction="on", linebreak="id", unicodeslot=0x1F462, }, [0x1F463]={ category="so", description="FOOTPRINTS", direction="on", linebreak="id", unicodeslot=0x1F463, }, [0x1F464]={ category="so", description="BUST IN SILHOUETTE", direction="on", linebreak="id", unicodeslot=0x1F464, }, [0x1F465]={ category="so", description="BUSTS IN SILHOUETTE", direction="on", linebreak="id", unicodeslot=0x1F465, }, [0x1F466]={ category="so", description="BOY", direction="on", linebreak="id", unicodeslot=0x1F466, }, [0x1F467]={ category="so", description="GIRL", direction="on", linebreak="id", unicodeslot=0x1F467, }, [0x1F468]={ category="so", description="MAN", direction="on", linebreak="id", unicodeslot=0x1F468, }, [0x1F469]={ category="so", description="WOMAN", direction="on", linebreak="id", unicodeslot=0x1F469, }, [0x1F46A]={ category="so", description="FAMILY", direction="on", linebreak="id", unicodeslot=0x1F46A, }, [0x1F46B]={ category="so", description="MAN AND WOMAN HOLDING HANDS", direction="on", linebreak="id", unicodeslot=0x1F46B, }, [0x1F46C]={ category="so", description="TWO MEN HOLDING HANDS", direction="on", linebreak="id", unicodeslot=0x1F46C, }, [0x1F46D]={ category="so", description="TWO WOMEN HOLDING HANDS", direction="on", linebreak="id", unicodeslot=0x1F46D, }, [0x1F46E]={ category="so", description="POLICE OFFICER", direction="on", linebreak="id", unicodeslot=0x1F46E, }, [0x1F46F]={ category="so", description="WOMAN WITH BUNNY EARS", direction="on", linebreak="id", unicodeslot=0x1F46F, }, [0x1F470]={ category="so", description="BRIDE WITH VEIL", direction="on", linebreak="id", unicodeslot=0x1F470, }, [0x1F471]={ category="so", description="PERSON WITH BLOND HAIR", direction="on", linebreak="id", unicodeslot=0x1F471, }, [0x1F472]={ category="so", description="MAN WITH GUA PI MAO", direction="on", linebreak="id", unicodeslot=0x1F472, }, [0x1F473]={ category="so", description="MAN WITH TURBAN", direction="on", linebreak="id", unicodeslot=0x1F473, }, [0x1F474]={ category="so", description="OLDER MAN", direction="on", linebreak="id", unicodeslot=0x1F474, }, [0x1F475]={ category="so", description="OLDER WOMAN", direction="on", linebreak="id", unicodeslot=0x1F475, }, [0x1F476]={ category="so", description="BABY", direction="on", linebreak="id", unicodeslot=0x1F476, }, [0x1F477]={ category="so", description="CONSTRUCTION WORKER", direction="on", linebreak="id", unicodeslot=0x1F477, }, [0x1F478]={ category="so", description="PRINCESS", direction="on", linebreak="id", unicodeslot=0x1F478, }, [0x1F479]={ category="so", description="JAPANESE OGRE", direction="on", linebreak="id", unicodeslot=0x1F479, }, [0x1F47A]={ category="so", description="JAPANESE GOBLIN", direction="on", linebreak="id", unicodeslot=0x1F47A, }, [0x1F47B]={ category="so", description="GHOST", direction="on", linebreak="id", unicodeslot=0x1F47B, }, [0x1F47C]={ category="so", description="BABY ANGEL", direction="on", linebreak="id", unicodeslot=0x1F47C, }, [0x1F47D]={ category="so", description="EXTRATERRESTRIAL ALIEN", direction="on", linebreak="id", unicodeslot=0x1F47D, }, [0x1F47E]={ category="so", description="ALIEN MONSTER", direction="on", linebreak="id", unicodeslot=0x1F47E, }, [0x1F47F]={ category="so", description="IMP", direction="on", linebreak="id", unicodeslot=0x1F47F, }, [0x1F480]={ category="so", description="SKULL", direction="on", linebreak="id", unicodeslot=0x1F480, }, [0x1F481]={ category="so", description="INFORMATION DESK PERSON", direction="on", linebreak="id", unicodeslot=0x1F481, }, [0x1F482]={ category="so", description="GUARDSMAN", direction="on", linebreak="id", unicodeslot=0x1F482, }, [0x1F483]={ category="so", description="DANCER", direction="on", linebreak="id", unicodeslot=0x1F483, }, [0x1F484]={ category="so", description="LIPSTICK", direction="on", linebreak="id", unicodeslot=0x1F484, }, [0x1F485]={ category="so", description="NAIL POLISH", direction="on", linebreak="id", unicodeslot=0x1F485, }, [0x1F486]={ category="so", description="FACE MASSAGE", direction="on", linebreak="id", unicodeslot=0x1F486, }, [0x1F487]={ category="so", description="HAIRCUT", direction="on", linebreak="id", unicodeslot=0x1F487, }, [0x1F488]={ category="so", description="BARBER POLE", direction="on", linebreak="id", unicodeslot=0x1F488, }, [0x1F489]={ category="so", description="SYRINGE", direction="on", linebreak="id", unicodeslot=0x1F489, }, [0x1F48A]={ category="so", description="PILL", direction="on", linebreak="id", unicodeslot=0x1F48A, }, [0x1F48B]={ category="so", description="KISS MARK", direction="on", linebreak="id", unicodeslot=0x1F48B, }, [0x1F48C]={ category="so", description="LOVE LETTER", direction="on", linebreak="id", unicodeslot=0x1F48C, }, [0x1F48D]={ category="so", description="RING", direction="on", linebreak="id", unicodeslot=0x1F48D, }, [0x1F48E]={ category="so", description="GEM STONE", direction="on", linebreak="id", unicodeslot=0x1F48E, }, [0x1F48F]={ category="so", description="KISS", direction="on", linebreak="id", unicodeslot=0x1F48F, }, [0x1F490]={ category="so", description="BOUQUET", direction="on", linebreak="id", unicodeslot=0x1F490, }, [0x1F491]={ category="so", description="COUPLE WITH HEART", direction="on", linebreak="id", unicodeslot=0x1F491, }, [0x1F492]={ category="so", description="WEDDING", direction="on", linebreak="id", unicodeslot=0x1F492, }, [0x1F493]={ category="so", description="BEATING HEART", direction="on", linebreak="id", unicodeslot=0x1F493, }, [0x1F494]={ category="so", description="BROKEN HEART", direction="on", linebreak="id", unicodeslot=0x1F494, }, [0x1F495]={ category="so", description="TWO HEARTS", direction="on", linebreak="id", unicodeslot=0x1F495, }, [0x1F496]={ category="so", description="SPARKLING HEART", direction="on", linebreak="id", unicodeslot=0x1F496, }, [0x1F497]={ category="so", description="GROWING HEART", direction="on", linebreak="id", unicodeslot=0x1F497, }, [0x1F498]={ category="so", description="HEART WITH ARROW", direction="on", linebreak="id", unicodeslot=0x1F498, }, [0x1F499]={ category="so", description="BLUE HEART", direction="on", linebreak="id", unicodeslot=0x1F499, }, [0x1F49A]={ category="so", description="GREEN HEART", direction="on", linebreak="id", unicodeslot=0x1F49A, }, [0x1F49B]={ category="so", description="YELLOW HEART", direction="on", linebreak="id", unicodeslot=0x1F49B, }, [0x1F49C]={ category="so", description="PURPLE HEART", direction="on", linebreak="id", unicodeslot=0x1F49C, }, [0x1F49D]={ category="so", description="HEART WITH RIBBON", direction="on", linebreak="id", unicodeslot=0x1F49D, }, [0x1F49E]={ category="so", description="REVOLVING HEARTS", direction="on", linebreak="id", unicodeslot=0x1F49E, }, [0x1F49F]={ category="so", description="HEART DECORATION", direction="on", linebreak="id", unicodeslot=0x1F49F, }, [0x1F4A0]={ category="so", description="DIAMOND SHAPE WITH A DOT INSIDE", direction="on", linebreak="al", unicodeslot=0x1F4A0, }, [0x1F4A1]={ category="so", description="ELECTRIC LIGHT BULB", direction="on", linebreak="id", unicodeslot=0x1F4A1, }, [0x1F4A2]={ category="so", description="ANGER SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F4A2, }, [0x1F4A3]={ category="so", description="BOMB", direction="on", linebreak="id", unicodeslot=0x1F4A3, }, [0x1F4A4]={ category="so", description="SLEEPING SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F4A4, }, [0x1F4A5]={ category="so", description="COLLISION SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F4A5, }, [0x1F4A6]={ category="so", description="SPLASHING SWEAT SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F4A6, }, [0x1F4A7]={ category="so", description="DROPLET", direction="on", linebreak="id", unicodeslot=0x1F4A7, }, [0x1F4A8]={ category="so", description="DASH SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F4A8, }, [0x1F4A9]={ category="so", description="PILE OF POO", direction="on", linebreak="id", unicodeslot=0x1F4A9, }, [0x1F4AA]={ category="so", description="FLEXED BICEPS", direction="on", linebreak="id", unicodeslot=0x1F4AA, }, [0x1F4AB]={ category="so", description="DIZZY SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F4AB, }, [0x1F4AC]={ category="so", description="SPEECH BALLOON", direction="on", linebreak="id", unicodeslot=0x1F4AC, }, [0x1F4AD]={ category="so", description="THOUGHT BALLOON", direction="on", linebreak="id", unicodeslot=0x1F4AD, }, [0x1F4AE]={ category="so", description="WHITE FLOWER", direction="on", linebreak="id", unicodeslot=0x1F4AE, }, [0x1F4AF]={ category="so", description="HUNDRED POINTS SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F4AF, }, [0x1F4B0]={ category="so", description="MONEY BAG", direction="on", linebreak="id", unicodeslot=0x1F4B0, }, [0x1F4B1]={ category="so", description="CURRENCY EXCHANGE", direction="on", linebreak="al", unicodeslot=0x1F4B1, }, [0x1F4B2]={ category="so", description="HEAVY DOLLAR SIGN", direction="on", linebreak="al", unicodeslot=0x1F4B2, }, [0x1F4B3]={ category="so", description="CREDIT CARD", direction="on", linebreak="id", unicodeslot=0x1F4B3, }, [0x1F4B4]={ category="so", description="BANKNOTE WITH YEN SIGN", direction="on", linebreak="id", unicodeslot=0x1F4B4, }, [0x1F4B5]={ category="so", description="BANKNOTE WITH DOLLAR SIGN", direction="on", linebreak="id", unicodeslot=0x1F4B5, }, [0x1F4B6]={ category="so", description="BANKNOTE WITH EURO SIGN", direction="on", linebreak="id", unicodeslot=0x1F4B6, }, [0x1F4B7]={ category="so", description="BANKNOTE WITH POUND SIGN", direction="on", linebreak="id", unicodeslot=0x1F4B7, }, [0x1F4B8]={ category="so", description="MONEY WITH WINGS", direction="on", linebreak="id", unicodeslot=0x1F4B8, }, [0x1F4B9]={ category="so", description="CHART WITH UPWARDS TREND AND YEN SIGN", direction="on", linebreak="id", unicodeslot=0x1F4B9, }, [0x1F4BA]={ category="so", description="SEAT", direction="on", linebreak="id", unicodeslot=0x1F4BA, }, [0x1F4BB]={ category="so", description="PERSONAL COMPUTER", direction="on", linebreak="id", unicodeslot=0x1F4BB, }, [0x1F4BC]={ category="so", description="BRIEFCASE", direction="on", linebreak="id", unicodeslot=0x1F4BC, }, [0x1F4BD]={ category="so", description="MINIDISC", direction="on", linebreak="id", unicodeslot=0x1F4BD, }, [0x1F4BE]={ category="so", description="FLOPPY DISK", direction="on", linebreak="id", unicodeslot=0x1F4BE, }, [0x1F4BF]={ category="so", description="OPTICAL DISC", direction="on", linebreak="id", unicodeslot=0x1F4BF, }, [0x1F4C0]={ category="so", description="DVD", direction="on", linebreak="id", unicodeslot=0x1F4C0, }, [0x1F4C1]={ category="so", description="FILE FOLDER", direction="on", linebreak="id", unicodeslot=0x1F4C1, }, [0x1F4C2]={ category="so", description="OPEN FILE FOLDER", direction="on", linebreak="id", unicodeslot=0x1F4C2, }, [0x1F4C3]={ category="so", description="PAGE WITH CURL", direction="on", linebreak="id", unicodeslot=0x1F4C3, }, [0x1F4C4]={ category="so", description="PAGE FACING UP", direction="on", linebreak="id", unicodeslot=0x1F4C4, }, [0x1F4C5]={ category="so", description="CALENDAR", direction="on", linebreak="id", unicodeslot=0x1F4C5, }, [0x1F4C6]={ category="so", description="TEAR-OFF CALENDAR", direction="on", linebreak="id", unicodeslot=0x1F4C6, }, [0x1F4C7]={ category="so", description="CARD INDEX", direction="on", linebreak="id", unicodeslot=0x1F4C7, }, [0x1F4C8]={ category="so", description="CHART WITH UPWARDS TREND", direction="on", linebreak="id", unicodeslot=0x1F4C8, }, [0x1F4C9]={ category="so", description="CHART WITH DOWNWARDS TREND", direction="on", linebreak="id", unicodeslot=0x1F4C9, }, [0x1F4CA]={ category="so", description="BAR CHART", direction="on", linebreak="id", unicodeslot=0x1F4CA, }, [0x1F4CB]={ category="so", description="CLIPBOARD", direction="on", linebreak="id", unicodeslot=0x1F4CB, }, [0x1F4CC]={ category="so", description="PUSHPIN", direction="on", linebreak="id", unicodeslot=0x1F4CC, }, [0x1F4CD]={ category="so", description="ROUND PUSHPIN", direction="on", linebreak="id", unicodeslot=0x1F4CD, }, [0x1F4CE]={ category="so", description="PAPERCLIP", direction="on", linebreak="id", unicodeslot=0x1F4CE, }, [0x1F4CF]={ category="so", description="STRAIGHT RULER", direction="on", linebreak="id", unicodeslot=0x1F4CF, }, [0x1F4D0]={ category="so", description="TRIANGULAR RULER", direction="on", linebreak="id", unicodeslot=0x1F4D0, }, [0x1F4D1]={ category="so", description="BOOKMARK TABS", direction="on", linebreak="id", unicodeslot=0x1F4D1, }, [0x1F4D2]={ category="so", description="LEDGER", direction="on", linebreak="id", unicodeslot=0x1F4D2, }, [0x1F4D3]={ category="so", description="NOTEBOOK", direction="on", linebreak="id", unicodeslot=0x1F4D3, }, [0x1F4D4]={ category="so", description="NOTEBOOK WITH DECORATIVE COVER", direction="on", linebreak="id", unicodeslot=0x1F4D4, }, [0x1F4D5]={ category="so", description="CLOSED BOOK", direction="on", linebreak="id", unicodeslot=0x1F4D5, }, [0x1F4D6]={ category="so", description="OPEN BOOK", direction="on", linebreak="id", unicodeslot=0x1F4D6, }, [0x1F4D7]={ category="so", description="GREEN BOOK", direction="on", linebreak="id", unicodeslot=0x1F4D7, }, [0x1F4D8]={ category="so", description="BLUE BOOK", direction="on", linebreak="id", unicodeslot=0x1F4D8, }, [0x1F4D9]={ category="so", description="ORANGE BOOK", direction="on", linebreak="id", unicodeslot=0x1F4D9, }, [0x1F4DA]={ category="so", description="BOOKS", direction="on", linebreak="id", unicodeslot=0x1F4DA, }, [0x1F4DB]={ category="so", description="NAME BADGE", direction="on", linebreak="id", unicodeslot=0x1F4DB, }, [0x1F4DC]={ category="so", description="SCROLL", direction="on", linebreak="id", unicodeslot=0x1F4DC, }, [0x1F4DD]={ category="so", description="MEMO", direction="on", linebreak="id", unicodeslot=0x1F4DD, }, [0x1F4DE]={ category="so", description="TELEPHONE RECEIVER", direction="on", linebreak="id", unicodeslot=0x1F4DE, }, [0x1F4DF]={ category="so", description="PAGER", direction="on", linebreak="id", unicodeslot=0x1F4DF, }, [0x1F4E0]={ category="so", description="FAX MACHINE", direction="on", linebreak="id", unicodeslot=0x1F4E0, }, [0x1F4E1]={ category="so", description="SATELLITE ANTENNA", direction="on", linebreak="id", unicodeslot=0x1F4E1, }, [0x1F4E2]={ category="so", description="PUBLIC ADDRESS LOUDSPEAKER", direction="on", linebreak="id", unicodeslot=0x1F4E2, }, [0x1F4E3]={ category="so", description="CHEERING MEGAPHONE", direction="on", linebreak="id", unicodeslot=0x1F4E3, }, [0x1F4E4]={ category="so", description="OUTBOX TRAY", direction="on", linebreak="id", unicodeslot=0x1F4E4, }, [0x1F4E5]={ category="so", description="INBOX TRAY", direction="on", linebreak="id", unicodeslot=0x1F4E5, }, [0x1F4E6]={ category="so", description="PACKAGE", direction="on", linebreak="id", unicodeslot=0x1F4E6, }, [0x1F4E7]={ category="so", description="E-MAIL SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F4E7, }, [0x1F4E8]={ category="so", description="INCOMING ENVELOPE", direction="on", linebreak="id", unicodeslot=0x1F4E8, }, [0x1F4E9]={ category="so", description="ENVELOPE WITH DOWNWARDS ARROW ABOVE", direction="on", linebreak="id", unicodeslot=0x1F4E9, }, [0x1F4EA]={ category="so", description="CLOSED MAILBOX WITH LOWERED FLAG", direction="on", linebreak="id", unicodeslot=0x1F4EA, }, [0x1F4EB]={ category="so", description="CLOSED MAILBOX WITH RAISED FLAG", direction="on", linebreak="id", unicodeslot=0x1F4EB, }, [0x1F4EC]={ category="so", description="OPEN MAILBOX WITH RAISED FLAG", direction="on", linebreak="id", unicodeslot=0x1F4EC, }, [0x1F4ED]={ category="so", description="OPEN MAILBOX WITH LOWERED FLAG", direction="on", linebreak="id", unicodeslot=0x1F4ED, }, [0x1F4EE]={ category="so", description="POSTBOX", direction="on", linebreak="id", unicodeslot=0x1F4EE, }, [0x1F4EF]={ category="so", description="POSTAL HORN", direction="on", linebreak="id", unicodeslot=0x1F4EF, }, [0x1F4F0]={ category="so", description="NEWSPAPER", direction="on", linebreak="id", unicodeslot=0x1F4F0, }, [0x1F4F1]={ category="so", description="MOBILE PHONE", direction="on", linebreak="id", unicodeslot=0x1F4F1, }, [0x1F4F2]={ category="so", description="MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT", direction="on", linebreak="id", unicodeslot=0x1F4F2, }, [0x1F4F3]={ category="so", description="VIBRATION MODE", direction="on", linebreak="id", unicodeslot=0x1F4F3, }, [0x1F4F4]={ category="so", description="MOBILE PHONE OFF", direction="on", linebreak="id", unicodeslot=0x1F4F4, }, [0x1F4F5]={ category="so", description="NO MOBILE PHONES", direction="on", linebreak="id", unicodeslot=0x1F4F5, }, [0x1F4F6]={ category="so", description="ANTENNA WITH BARS", direction="on", linebreak="id", unicodeslot=0x1F4F6, }, [0x1F4F7]={ category="so", description="CAMERA", direction="on", linebreak="id", unicodeslot=0x1F4F7, }, [0x1F4F9]={ category="so", description="VIDEO CAMERA", direction="on", linebreak="id", unicodeslot=0x1F4F9, }, [0x1F4FA]={ category="so", description="TELEVISION", direction="on", linebreak="id", unicodeslot=0x1F4FA, }, [0x1F4FB]={ category="so", description="RADIO", direction="on", linebreak="id", unicodeslot=0x1F4FB, }, [0x1F4FC]={ category="so", description="VIDEOCASSETTE", direction="on", linebreak="id", unicodeslot=0x1F4FC, }, [0x1F500]={ category="so", description="TWISTED RIGHTWARDS ARROWS", direction="on", linebreak="al", unicodeslot=0x1F500, }, [0x1F501]={ category="so", description="CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS", direction="on", linebreak="al", unicodeslot=0x1F501, }, [0x1F502]={ category="so", description="CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY", direction="on", linebreak="al", unicodeslot=0x1F502, }, [0x1F503]={ category="so", description="CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", direction="on", linebreak="al", unicodeslot=0x1F503, }, [0x1F504]={ category="so", description="ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", direction="on", linebreak="al", unicodeslot=0x1F504, }, [0x1F505]={ category="so", description="LOW BRIGHTNESS SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F505, }, [0x1F506]={ category="so", description="HIGH BRIGHTNESS SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F506, }, [0x1F507]={ category="so", description="SPEAKER WITH CANCELLATION STROKE", direction="on", linebreak="id", unicodeslot=0x1F507, }, [0x1F508]={ category="so", description="SPEAKER", direction="on", linebreak="id", unicodeslot=0x1F508, }, [0x1F509]={ category="so", description="SPEAKER WITH ONE SOUND WAVE", direction="on", linebreak="id", unicodeslot=0x1F509, }, [0x1F50A]={ category="so", description="SPEAKER WITH THREE SOUND WAVES", direction="on", linebreak="id", unicodeslot=0x1F50A, }, [0x1F50B]={ category="so", description="BATTERY", direction="on", linebreak="id", unicodeslot=0x1F50B, }, [0x1F50C]={ category="so", description="ELECTRIC PLUG", direction="on", linebreak="id", unicodeslot=0x1F50C, }, [0x1F50D]={ category="so", description="LEFT-POINTING MAGNIFYING GLASS", direction="on", linebreak="id", unicodeslot=0x1F50D, }, [0x1F50E]={ category="so", description="RIGHT-POINTING MAGNIFYING GLASS", direction="on", linebreak="id", unicodeslot=0x1F50E, }, [0x1F50F]={ category="so", description="LOCK WITH INK PEN", direction="on", linebreak="id", unicodeslot=0x1F50F, }, [0x1F510]={ category="so", description="CLOSED LOCK WITH KEY", direction="on", linebreak="id", unicodeslot=0x1F510, }, [0x1F511]={ category="so", description="KEY", direction="on", linebreak="id", unicodeslot=0x1F511, }, [0x1F512]={ category="so", description="LOCK", direction="on", linebreak="id", unicodeslot=0x1F512, }, [0x1F513]={ category="so", description="OPEN LOCK", direction="on", linebreak="id", unicodeslot=0x1F513, }, [0x1F514]={ category="so", description="BELL", direction="on", linebreak="id", unicodeslot=0x1F514, }, [0x1F515]={ category="so", description="BELL WITH CANCELLATION STROKE", direction="on", linebreak="id", unicodeslot=0x1F515, }, [0x1F516]={ category="so", description="BOOKMARK", direction="on", linebreak="id", unicodeslot=0x1F516, }, [0x1F517]={ category="so", description="LINK SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F517, }, [0x1F518]={ category="so", description="RADIO BUTTON", direction="on", linebreak="al", unicodeslot=0x1F518, }, [0x1F519]={ category="so", description="BACK WITH LEFTWARDS ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x1F519, }, [0x1F51A]={ category="so", description="END WITH LEFTWARDS ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x1F51A, }, [0x1F51B]={ category="so", description="ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x1F51B, }, [0x1F51C]={ category="so", description="SOON WITH RIGHTWARDS ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x1F51C, }, [0x1F51D]={ category="so", description="TOP WITH UPWARDS ARROW ABOVE", direction="on", linebreak="al", unicodeslot=0x1F51D, }, [0x1F51E]={ category="so", description="NO ONE UNDER EIGHTEEN SYMBOL", direction="on", linebreak="al", unicodeslot=0x1F51E, }, [0x1F51F]={ category="so", description="KEYCAP TEN", direction="on", linebreak="al", unicodeslot=0x1F51F, }, [0x1F520]={ category="so", description="INPUT SYMBOL FOR LATIN CAPITAL LETTERS", direction="on", linebreak="al", unicodeslot=0x1F520, }, [0x1F521]={ category="so", description="INPUT SYMBOL FOR LATIN SMALL LETTERS", direction="on", linebreak="al", unicodeslot=0x1F521, }, [0x1F522]={ category="so", description="INPUT SYMBOL FOR NUMBERS", direction="on", linebreak="al", unicodeslot=0x1F522, }, [0x1F523]={ category="so", description="INPUT SYMBOL FOR SYMBOLS", direction="on", linebreak="al", unicodeslot=0x1F523, }, [0x1F524]={ category="so", description="INPUT SYMBOL FOR LATIN LETTERS", direction="on", linebreak="al", unicodeslot=0x1F524, }, [0x1F525]={ category="so", description="FIRE", direction="on", linebreak="id", unicodeslot=0x1F525, }, [0x1F526]={ category="so", description="ELECTRIC TORCH", direction="on", linebreak="id", unicodeslot=0x1F526, }, [0x1F527]={ category="so", description="WRENCH", direction="on", linebreak="id", unicodeslot=0x1F527, }, [0x1F528]={ category="so", description="HAMMER", direction="on", linebreak="id", unicodeslot=0x1F528, }, [0x1F529]={ category="so", description="NUT AND BOLT", direction="on", linebreak="id", unicodeslot=0x1F529, }, [0x1F52A]={ category="so", description="HOCHO", direction="on", linebreak="id", unicodeslot=0x1F52A, }, [0x1F52B]={ category="so", description="PISTOL", direction="on", linebreak="id", unicodeslot=0x1F52B, }, [0x1F52C]={ category="so", description="MICROSCOPE", direction="on", linebreak="id", unicodeslot=0x1F52C, }, [0x1F52D]={ category="so", description="TELESCOPE", direction="on", linebreak="id", unicodeslot=0x1F52D, }, [0x1F52E]={ category="so", description="CRYSTAL BALL", direction="on", linebreak="id", unicodeslot=0x1F52E, }, [0x1F52F]={ category="so", description="SIX POINTED STAR WITH MIDDLE DOT", direction="on", linebreak="id", unicodeslot=0x1F52F, }, [0x1F530]={ category="so", description="JAPANESE SYMBOL FOR BEGINNER", direction="on", linebreak="id", unicodeslot=0x1F530, }, [0x1F531]={ category="so", description="TRIDENT EMBLEM", direction="on", linebreak="id", unicodeslot=0x1F531, }, [0x1F532]={ category="so", description="BLACK SQUARE BUTTON", direction="on", linebreak="al", unicodeslot=0x1F532, }, [0x1F533]={ category="so", description="WHITE SQUARE BUTTON", direction="on", linebreak="al", unicodeslot=0x1F533, }, [0x1F534]={ category="so", description="LARGE RED CIRCLE", direction="on", linebreak="al", unicodeslot=0x1F534, }, [0x1F535]={ category="so", description="LARGE BLUE CIRCLE", direction="on", linebreak="al", unicodeslot=0x1F535, }, [0x1F536]={ category="so", description="LARGE ORANGE DIAMOND", direction="on", linebreak="al", unicodeslot=0x1F536, }, [0x1F537]={ category="so", description="LARGE BLUE DIAMOND", direction="on", linebreak="al", unicodeslot=0x1F537, }, [0x1F538]={ category="so", description="SMALL ORANGE DIAMOND", direction="on", linebreak="al", unicodeslot=0x1F538, }, [0x1F539]={ category="so", description="SMALL BLUE DIAMOND", direction="on", linebreak="al", unicodeslot=0x1F539, }, [0x1F53A]={ category="so", description="UP-POINTING RED TRIANGLE", direction="on", linebreak="al", unicodeslot=0x1F53A, }, [0x1F53B]={ category="so", description="DOWN-POINTING RED TRIANGLE", direction="on", linebreak="al", unicodeslot=0x1F53B, }, [0x1F53C]={ category="so", description="UP-POINTING SMALL RED TRIANGLE", direction="on", linebreak="al", unicodeslot=0x1F53C, }, [0x1F53D]={ category="so", description="DOWN-POINTING SMALL RED TRIANGLE", direction="on", linebreak="al", unicodeslot=0x1F53D, }, [0x1F540]={ category="so", description="CIRCLED CROSS POMMEE", direction="on", linebreak="al", unicodeslot=0x1F540, }, [0x1F541]={ category="so", description="CROSS POMMEE WITH HALF-CIRCLE BELOW", direction="on", linebreak="al", unicodeslot=0x1F541, }, [0x1F542]={ category="so", description="CROSS POMMEE", direction="on", linebreak="al", unicodeslot=0x1F542, }, [0x1F543]={ category="so", description="NOTCHED LEFT SEMICIRCLE WITH THREE DOTS", direction="on", linebreak="al", unicodeslot=0x1F543, }, [0x1F550]={ category="so", description="CLOCK FACE ONE OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F550, }, [0x1F551]={ category="so", description="CLOCK FACE TWO OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F551, }, [0x1F552]={ category="so", description="CLOCK FACE THREE OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F552, }, [0x1F553]={ category="so", description="CLOCK FACE FOUR OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F553, }, [0x1F554]={ category="so", description="CLOCK FACE FIVE OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F554, }, [0x1F555]={ category="so", description="CLOCK FACE SIX OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F555, }, [0x1F556]={ category="so", description="CLOCK FACE SEVEN OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F556, }, [0x1F557]={ category="so", description="CLOCK FACE EIGHT OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F557, }, [0x1F558]={ category="so", description="CLOCK FACE NINE OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F558, }, [0x1F559]={ category="so", description="CLOCK FACE TEN OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F559, }, [0x1F55A]={ category="so", description="CLOCK FACE ELEVEN OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F55A, }, [0x1F55B]={ category="so", description="CLOCK FACE TWELVE OCLOCK", direction="on", linebreak="id", unicodeslot=0x1F55B, }, [0x1F55C]={ category="so", description="CLOCK FACE ONE-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F55C, }, [0x1F55D]={ category="so", description="CLOCK FACE TWO-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F55D, }, [0x1F55E]={ category="so", description="CLOCK FACE THREE-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F55E, }, [0x1F55F]={ category="so", description="CLOCK FACE FOUR-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F55F, }, [0x1F560]={ category="so", description="CLOCK FACE FIVE-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F560, }, [0x1F561]={ category="so", description="CLOCK FACE SIX-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F561, }, [0x1F562]={ category="so", description="CLOCK FACE SEVEN-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F562, }, [0x1F563]={ category="so", description="CLOCK FACE EIGHT-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F563, }, [0x1F564]={ category="so", description="CLOCK FACE NINE-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F564, }, [0x1F565]={ category="so", description="CLOCK FACE TEN-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F565, }, [0x1F566]={ category="so", description="CLOCK FACE ELEVEN-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F566, }, [0x1F567]={ category="so", description="CLOCK FACE TWELVE-THIRTY", direction="on", linebreak="id", unicodeslot=0x1F567, }, [0x1F5FB]={ category="so", description="MOUNT FUJI", direction="on", linebreak="id", unicodeslot=0x1F5FB, }, [0x1F5FC]={ category="so", description="TOKYO TOWER", direction="on", linebreak="id", unicodeslot=0x1F5FC, }, [0x1F5FD]={ category="so", description="STATUE OF LIBERTY", direction="on", linebreak="id", unicodeslot=0x1F5FD, }, [0x1F5FE]={ category="so", description="SILHOUETTE OF JAPAN", direction="on", linebreak="id", unicodeslot=0x1F5FE, }, [0x1F5FF]={ category="so", description="MOYAI", direction="on", linebreak="id", unicodeslot=0x1F5FF, }, [0x1F600]={ category="so", description="GRINNING FACE", direction="on", linebreak="id", unicodeslot=0x1F600, }, [0x1F601]={ category="so", description="GRINNING FACE WITH SMILING EYES", direction="on", linebreak="id", unicodeslot=0x1F601, }, [0x1F602]={ category="so", description="FACE WITH TEARS OF JOY", direction="on", linebreak="id", unicodeslot=0x1F602, }, [0x1F603]={ category="so", description="SMILING FACE WITH OPEN MOUTH", direction="on", linebreak="id", unicodeslot=0x1F603, }, [0x1F604]={ category="so", description="SMILING FACE WITH OPEN MOUTH AND SMILING EYES", direction="on", linebreak="id", unicodeslot=0x1F604, }, [0x1F605]={ category="so", description="SMILING FACE WITH OPEN MOUTH AND COLD SWEAT", direction="on", linebreak="id", unicodeslot=0x1F605, }, [0x1F606]={ category="so", description="SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES", direction="on", linebreak="id", unicodeslot=0x1F606, }, [0x1F607]={ category="so", description="SMILING FACE WITH HALO", direction="on", linebreak="id", unicodeslot=0x1F607, }, [0x1F608]={ category="so", description="SMILING FACE WITH HORNS", direction="on", linebreak="id", unicodeslot=0x1F608, }, [0x1F609]={ category="so", description="WINKING FACE", direction="on", linebreak="id", unicodeslot=0x1F609, }, [0x1F60A]={ category="so", description="SMILING FACE WITH SMILING EYES", direction="on", linebreak="id", unicodeslot=0x1F60A, }, [0x1F60B]={ category="so", description="FACE SAVOURING DELICIOUS FOOD", direction="on", linebreak="id", unicodeslot=0x1F60B, }, [0x1F60C]={ category="so", description="RELIEVED FACE", direction="on", linebreak="id", unicodeslot=0x1F60C, }, [0x1F60D]={ category="so", description="SMILING FACE WITH HEART-SHAPED EYES", direction="on", linebreak="id", unicodeslot=0x1F60D, }, [0x1F60E]={ category="so", description="SMILING FACE WITH SUNGLASSES", direction="on", linebreak="id", unicodeslot=0x1F60E, }, [0x1F60F]={ category="so", description="SMIRKING FACE", direction="on", linebreak="id", unicodeslot=0x1F60F, }, [0x1F610]={ category="so", description="NEUTRAL FACE", direction="on", linebreak="id", unicodeslot=0x1F610, }, [0x1F611]={ category="so", description="EXPRESSIONLESS FACE", direction="on", linebreak="id", unicodeslot=0x1F611, }, [0x1F612]={ category="so", description="UNAMUSED FACE", direction="on", linebreak="id", unicodeslot=0x1F612, }, [0x1F613]={ category="so", description="FACE WITH COLD SWEAT", direction="on", linebreak="id", unicodeslot=0x1F613, }, [0x1F614]={ category="so", description="PENSIVE FACE", direction="on", linebreak="id", unicodeslot=0x1F614, }, [0x1F615]={ category="so", description="CONFUSED FACE", direction="on", linebreak="id", unicodeslot=0x1F615, }, [0x1F616]={ category="so", description="CONFOUNDED FACE", direction="on", linebreak="id", unicodeslot=0x1F616, }, [0x1F617]={ category="so", description="KISSING FACE", direction="on", linebreak="id", unicodeslot=0x1F617, }, [0x1F618]={ category="so", description="FACE THROWING A KISS", direction="on", linebreak="id", unicodeslot=0x1F618, }, [0x1F619]={ category="so", description="KISSING FACE WITH SMILING EYES", direction="on", linebreak="id", unicodeslot=0x1F619, }, [0x1F61A]={ category="so", description="KISSING FACE WITH CLOSED EYES", direction="on", linebreak="id", unicodeslot=0x1F61A, }, [0x1F61B]={ category="so", description="FACE WITH STUCK-OUT TONGUE", direction="on", linebreak="id", unicodeslot=0x1F61B, }, [0x1F61C]={ category="so", description="FACE WITH STUCK-OUT TONGUE AND WINKING EYE", direction="on", linebreak="id", unicodeslot=0x1F61C, }, [0x1F61D]={ category="so", description="FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES", direction="on", linebreak="id", unicodeslot=0x1F61D, }, [0x1F61E]={ category="so", description="DISAPPOINTED FACE", direction="on", linebreak="id", unicodeslot=0x1F61E, }, [0x1F61F]={ category="so", description="WORRIED FACE", direction="on", linebreak="id", unicodeslot=0x1F61F, }, [0x1F620]={ category="so", description="ANGRY FACE", direction="on", linebreak="id", unicodeslot=0x1F620, }, [0x1F621]={ category="so", description="POUTING FACE", direction="on", linebreak="id", unicodeslot=0x1F621, }, [0x1F622]={ category="so", description="CRYING FACE", direction="on", linebreak="id", unicodeslot=0x1F622, }, [0x1F623]={ category="so", description="PERSEVERING FACE", direction="on", linebreak="id", unicodeslot=0x1F623, }, [0x1F624]={ category="so", description="FACE WITH LOOK OF TRIUMPH", direction="on", linebreak="id", unicodeslot=0x1F624, }, [0x1F625]={ category="so", description="DISAPPOINTED BUT RELIEVED FACE", direction="on", linebreak="id", unicodeslot=0x1F625, }, [0x1F626]={ category="so", description="FROWNING FACE WITH OPEN MOUTH", direction="on", linebreak="id", unicodeslot=0x1F626, }, [0x1F627]={ category="so", description="ANGUISHED FACE", direction="on", linebreak="id", unicodeslot=0x1F627, }, [0x1F628]={ category="so", description="FEARFUL FACE", direction="on", linebreak="id", unicodeslot=0x1F628, }, [0x1F629]={ category="so", description="WEARY FACE", direction="on", linebreak="id", unicodeslot=0x1F629, }, [0x1F62A]={ category="so", description="SLEEPY FACE", direction="on", linebreak="id", unicodeslot=0x1F62A, }, [0x1F62B]={ category="so", description="TIRED FACE", direction="on", linebreak="id", unicodeslot=0x1F62B, }, [0x1F62C]={ category="so", description="GRIMACING FACE", direction="on", linebreak="id", unicodeslot=0x1F62C, }, [0x1F62D]={ category="so", description="LOUDLY CRYING FACE", direction="on", linebreak="id", unicodeslot=0x1F62D, }, [0x1F62E]={ category="so", description="FACE WITH OPEN MOUTH", direction="on", linebreak="id", unicodeslot=0x1F62E, }, [0x1F62F]={ category="so", description="HUSHED FACE", direction="on", linebreak="id", unicodeslot=0x1F62F, }, [0x1F630]={ category="so", description="FACE WITH OPEN MOUTH AND COLD SWEAT", direction="on", linebreak="id", unicodeslot=0x1F630, }, [0x1F631]={ category="so", description="FACE SCREAMING IN FEAR", direction="on", linebreak="id", unicodeslot=0x1F631, }, [0x1F632]={ category="so", description="ASTONISHED FACE", direction="on", linebreak="id", unicodeslot=0x1F632, }, [0x1F633]={ category="so", description="FLUSHED FACE", direction="on", linebreak="id", unicodeslot=0x1F633, }, [0x1F634]={ category="so", description="SLEEPING FACE", direction="on", linebreak="id", unicodeslot=0x1F634, }, [0x1F635]={ category="so", description="DIZZY FACE", direction="on", linebreak="id", unicodeslot=0x1F635, }, [0x1F636]={ category="so", description="FACE WITHOUT MOUTH", direction="on", linebreak="id", unicodeslot=0x1F636, }, [0x1F637]={ category="so", description="FACE WITH MEDICAL MASK", direction="on", linebreak="id", unicodeslot=0x1F637, }, [0x1F638]={ category="so", description="GRINNING CAT FACE WITH SMILING EYES", direction="on", linebreak="id", unicodeslot=0x1F638, }, [0x1F639]={ category="so", description="CAT FACE WITH TEARS OF JOY", direction="on", linebreak="id", unicodeslot=0x1F639, }, [0x1F63A]={ category="so", description="SMILING CAT FACE WITH OPEN MOUTH", direction="on", linebreak="id", unicodeslot=0x1F63A, }, [0x1F63B]={ category="so", description="SMILING CAT FACE WITH HEART-SHAPED EYES", direction="on", linebreak="id", unicodeslot=0x1F63B, }, [0x1F63C]={ category="so", description="CAT FACE WITH WRY SMILE", direction="on", linebreak="id", unicodeslot=0x1F63C, }, [0x1F63D]={ category="so", description="KISSING CAT FACE WITH CLOSED EYES", direction="on", linebreak="id", unicodeslot=0x1F63D, }, [0x1F63E]={ category="so", description="POUTING CAT FACE", direction="on", linebreak="id", unicodeslot=0x1F63E, }, [0x1F63F]={ category="so", description="CRYING CAT FACE", direction="on", linebreak="id", unicodeslot=0x1F63F, }, [0x1F640]={ category="so", description="WEARY CAT FACE", direction="on", linebreak="id", unicodeslot=0x1F640, }, [0x1F645]={ category="so", description="FACE WITH NO GOOD GESTURE", direction="on", linebreak="id", unicodeslot=0x1F645, }, [0x1F646]={ category="so", description="FACE WITH OK GESTURE", direction="on", linebreak="id", unicodeslot=0x1F646, }, [0x1F647]={ category="so", description="PERSON BOWING DEEPLY", direction="on", linebreak="id", unicodeslot=0x1F647, }, [0x1F648]={ category="so", description="SEE-NO-EVIL MONKEY", direction="on", linebreak="id", unicodeslot=0x1F648, }, [0x1F649]={ category="so", description="HEAR-NO-EVIL MONKEY", direction="on", linebreak="id", unicodeslot=0x1F649, }, [0x1F64A]={ category="so", description="SPEAK-NO-EVIL MONKEY", direction="on", linebreak="id", unicodeslot=0x1F64A, }, [0x1F64B]={ category="so", description="HAPPY PERSON RAISING ONE HAND", direction="on", linebreak="id", unicodeslot=0x1F64B, }, [0x1F64C]={ category="so", description="PERSON RAISING BOTH HANDS IN CELEBRATION", direction="on", linebreak="id", unicodeslot=0x1F64C, }, [0x1F64D]={ category="so", description="PERSON FROWNING", direction="on", linebreak="id", unicodeslot=0x1F64D, }, [0x1F64E]={ category="so", description="PERSON WITH POUTING FACE", direction="on", linebreak="id", unicodeslot=0x1F64E, }, [0x1F64F]={ category="so", description="PERSON WITH FOLDED HANDS", direction="on", linebreak="id", unicodeslot=0x1F64F, }, [0x1F680]={ category="so", description="ROCKET", direction="on", linebreak="id", unicodeslot=0x1F680, }, [0x1F681]={ category="so", description="HELICOPTER", direction="on", linebreak="id", unicodeslot=0x1F681, }, [0x1F682]={ category="so", description="STEAM LOCOMOTIVE", direction="on", linebreak="id", unicodeslot=0x1F682, }, [0x1F683]={ category="so", description="RAILWAY CAR", direction="on", linebreak="id", unicodeslot=0x1F683, }, [0x1F684]={ category="so", description="HIGH-SPEED TRAIN", direction="on", linebreak="id", unicodeslot=0x1F684, }, [0x1F685]={ category="so", description="HIGH-SPEED TRAIN WITH BULLET NOSE", direction="on", linebreak="id", unicodeslot=0x1F685, }, [0x1F686]={ category="so", description="TRAIN", direction="on", linebreak="id", unicodeslot=0x1F686, }, [0x1F687]={ category="so", description="METRO", direction="on", linebreak="id", unicodeslot=0x1F687, }, [0x1F688]={ category="so", description="LIGHT RAIL", direction="on", linebreak="id", unicodeslot=0x1F688, }, [0x1F689]={ category="so", description="STATION", direction="on", linebreak="id", unicodeslot=0x1F689, }, [0x1F68A]={ category="so", description="TRAM", direction="on", linebreak="id", unicodeslot=0x1F68A, }, [0x1F68B]={ category="so", description="TRAM CAR", direction="on", linebreak="id", unicodeslot=0x1F68B, }, [0x1F68C]={ category="so", description="BUS", direction="on", linebreak="id", unicodeslot=0x1F68C, }, [0x1F68D]={ category="so", description="ONCOMING BUS", direction="on", linebreak="id", unicodeslot=0x1F68D, }, [0x1F68E]={ category="so", description="TROLLEYBUS", direction="on", linebreak="id", unicodeslot=0x1F68E, }, [0x1F68F]={ category="so", description="BUS STOP", direction="on", linebreak="id", unicodeslot=0x1F68F, }, [0x1F690]={ category="so", description="MINIBUS", direction="on", linebreak="id", unicodeslot=0x1F690, }, [0x1F691]={ category="so", description="AMBULANCE", direction="on", linebreak="id", unicodeslot=0x1F691, }, [0x1F692]={ category="so", description="FIRE ENGINE", direction="on", linebreak="id", unicodeslot=0x1F692, }, [0x1F693]={ category="so", description="POLICE CAR", direction="on", linebreak="id", unicodeslot=0x1F693, }, [0x1F694]={ category="so", description="ONCOMING POLICE CAR", direction="on", linebreak="id", unicodeslot=0x1F694, }, [0x1F695]={ category="so", description="TAXI", direction="on", linebreak="id", unicodeslot=0x1F695, }, [0x1F696]={ category="so", description="ONCOMING TAXI", direction="on", linebreak="id", unicodeslot=0x1F696, }, [0x1F697]={ category="so", description="AUTOMOBILE", direction="on", linebreak="id", unicodeslot=0x1F697, }, [0x1F698]={ category="so", description="ONCOMING AUTOMOBILE", direction="on", linebreak="id", unicodeslot=0x1F698, }, [0x1F699]={ category="so", description="RECREATIONAL VEHICLE", direction="on", linebreak="id", unicodeslot=0x1F699, }, [0x1F69A]={ category="so", description="DELIVERY TRUCK", direction="on", linebreak="id", unicodeslot=0x1F69A, }, [0x1F69B]={ category="so", description="ARTICULATED LORRY", direction="on", linebreak="id", unicodeslot=0x1F69B, }, [0x1F69C]={ category="so", description="TRACTOR", direction="on", linebreak="id", unicodeslot=0x1F69C, }, [0x1F69D]={ category="so", description="MONORAIL", direction="on", linebreak="id", unicodeslot=0x1F69D, }, [0x1F69E]={ category="so", description="MOUNTAIN RAILWAY", direction="on", linebreak="id", unicodeslot=0x1F69E, }, [0x1F69F]={ category="so", description="SUSPENSION RAILWAY", direction="on", linebreak="id", unicodeslot=0x1F69F, }, [0x1F6A0]={ category="so", description="MOUNTAIN CABLEWAY", direction="on", linebreak="id", unicodeslot=0x1F6A0, }, [0x1F6A1]={ category="so", description="AERIAL TRAMWAY", direction="on", linebreak="id", unicodeslot=0x1F6A1, }, [0x1F6A2]={ category="so", description="SHIP", direction="on", linebreak="id", unicodeslot=0x1F6A2, }, [0x1F6A3]={ category="so", description="ROWBOAT", direction="on", linebreak="id", unicodeslot=0x1F6A3, }, [0x1F6A4]={ category="so", description="SPEEDBOAT", direction="on", linebreak="id", unicodeslot=0x1F6A4, }, [0x1F6A5]={ category="so", description="HORIZONTAL TRAFFIC LIGHT", direction="on", linebreak="id", unicodeslot=0x1F6A5, }, [0x1F6A6]={ category="so", description="VERTICAL TRAFFIC LIGHT", direction="on", linebreak="id", unicodeslot=0x1F6A6, }, [0x1F6A7]={ category="so", description="CONSTRUCTION SIGN", direction="on", linebreak="id", unicodeslot=0x1F6A7, }, [0x1F6A8]={ category="so", description="POLICE CARS REVOLVING LIGHT", direction="on", linebreak="id", unicodeslot=0x1F6A8, }, [0x1F6A9]={ category="so", description="TRIANGULAR FLAG ON POST", direction="on", linebreak="id", unicodeslot=0x1F6A9, }, [0x1F6AA]={ category="so", description="DOOR", direction="on", linebreak="id", unicodeslot=0x1F6AA, }, [0x1F6AB]={ category="so", description="NO ENTRY SIGN", direction="on", linebreak="id", unicodeslot=0x1F6AB, }, [0x1F6AC]={ category="so", description="SMOKING SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6AC, }, [0x1F6AD]={ category="so", description="NO SMOKING SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6AD, }, [0x1F6AE]={ category="so", description="PUT LITTER IN ITS PLACE SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6AE, }, [0x1F6AF]={ category="so", description="DO NOT LITTER SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6AF, }, [0x1F6B0]={ category="so", description="POTABLE WATER SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6B0, }, [0x1F6B1]={ category="so", description="NON-POTABLE WATER SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6B1, }, [0x1F6B2]={ category="so", description="BICYCLE", direction="on", linebreak="id", unicodeslot=0x1F6B2, }, [0x1F6B3]={ category="so", description="NO BICYCLES", direction="on", linebreak="id", unicodeslot=0x1F6B3, }, [0x1F6B4]={ category="so", description="BICYCLIST", direction="on", linebreak="id", unicodeslot=0x1F6B4, }, [0x1F6B5]={ category="so", description="MOUNTAIN BICYCLIST", direction="on", linebreak="id", unicodeslot=0x1F6B5, }, [0x1F6B6]={ category="so", description="PEDESTRIAN", direction="on", linebreak="id", unicodeslot=0x1F6B6, }, [0x1F6B7]={ category="so", description="NO PEDESTRIANS", direction="on", linebreak="id", unicodeslot=0x1F6B7, }, [0x1F6B8]={ category="so", description="CHILDREN CROSSING", direction="on", linebreak="id", unicodeslot=0x1F6B8, }, [0x1F6B9]={ category="so", description="MENS SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6B9, }, [0x1F6BA]={ category="so", description="WOMENS SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6BA, }, [0x1F6BB]={ category="so", description="RESTROOM", direction="on", linebreak="id", unicodeslot=0x1F6BB, }, [0x1F6BC]={ category="so", description="BABY SYMBOL", direction="on", linebreak="id", unicodeslot=0x1F6BC, }, [0x1F6BD]={ category="so", description="TOILET", direction="on", linebreak="id", unicodeslot=0x1F6BD, }, [0x1F6BE]={ category="so", description="WATER CLOSET", direction="on", linebreak="id", unicodeslot=0x1F6BE, }, [0x1F6BF]={ category="so", description="SHOWER", direction="on", linebreak="id", unicodeslot=0x1F6BF, }, [0x1F6C0]={ category="so", description="BATH", direction="on", linebreak="id", unicodeslot=0x1F6C0, }, [0x1F6C1]={ category="so", description="BATHTUB", direction="on", linebreak="id", unicodeslot=0x1F6C1, }, [0x1F6C2]={ category="so", description="PASSPORT CONTROL", direction="on", linebreak="id", unicodeslot=0x1F6C2, }, [0x1F6C3]={ category="so", description="CUSTOMS", direction="on", linebreak="id", unicodeslot=0x1F6C3, }, [0x1F6C4]={ category="so", description="BAGGAGE CLAIM", direction="on", linebreak="id", unicodeslot=0x1F6C4, }, [0x1F6C5]={ category="so", description="LEFT LUGGAGE", direction="on", linebreak="id", unicodeslot=0x1F6C5, }, [0x1F700]={ category="so", description="ALCHEMICAL SYMBOL FOR QUINTESSENCE", direction="on", linebreak="al", unicodeslot=0x1F700, }, [0x1F701]={ category="so", description="ALCHEMICAL SYMBOL FOR AIR", direction="on", linebreak="al", unicodeslot=0x1F701, }, [0x1F702]={ category="so", description="ALCHEMICAL SYMBOL FOR FIRE", direction="on", linebreak="al", unicodeslot=0x1F702, }, [0x1F703]={ category="so", description="ALCHEMICAL SYMBOL FOR EARTH", direction="on", linebreak="al", unicodeslot=0x1F703, }, [0x1F704]={ category="so", description="ALCHEMICAL SYMBOL FOR WATER", direction="on", linebreak="al", unicodeslot=0x1F704, }, [0x1F705]={ category="so", description="ALCHEMICAL SYMBOL FOR AQUAFORTIS", direction="on", linebreak="al", unicodeslot=0x1F705, }, [0x1F706]={ category="so", description="ALCHEMICAL SYMBOL FOR AQUA REGIA", direction="on", linebreak="al", unicodeslot=0x1F706, }, [0x1F707]={ category="so", description="ALCHEMICAL SYMBOL FOR AQUA REGIA-2", direction="on", linebreak="al", unicodeslot=0x1F707, }, [0x1F708]={ category="so", description="ALCHEMICAL SYMBOL FOR AQUA VITAE", direction="on", linebreak="al", unicodeslot=0x1F708, }, [0x1F709]={ category="so", description="ALCHEMICAL SYMBOL FOR AQUA VITAE-2", direction="on", linebreak="al", unicodeslot=0x1F709, }, [0x1F70A]={ category="so", description="ALCHEMICAL SYMBOL FOR VINEGAR", direction="on", linebreak="al", unicodeslot=0x1F70A, }, [0x1F70B]={ category="so", description="ALCHEMICAL SYMBOL FOR VINEGAR-2", direction="on", linebreak="al", unicodeslot=0x1F70B, }, [0x1F70C]={ category="so", description="ALCHEMICAL SYMBOL FOR VINEGAR-3", direction="on", linebreak="al", unicodeslot=0x1F70C, }, [0x1F70D]={ category="so", description="ALCHEMICAL SYMBOL FOR SULFUR", direction="on", linebreak="al", unicodeslot=0x1F70D, }, [0x1F70E]={ category="so", description="ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR", direction="on", linebreak="al", unicodeslot=0x1F70E, }, [0x1F70F]={ category="so", description="ALCHEMICAL SYMBOL FOR BLACK SULFUR", direction="on", linebreak="al", unicodeslot=0x1F70F, }, [0x1F710]={ category="so", description="ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE", direction="on", linebreak="al", unicodeslot=0x1F710, }, [0x1F711]={ category="so", description="ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2", direction="on", linebreak="al", unicodeslot=0x1F711, }, [0x1F712]={ category="so", description="ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3", direction="on", linebreak="al", unicodeslot=0x1F712, }, [0x1F713]={ category="so", description="ALCHEMICAL SYMBOL FOR CINNABAR", direction="on", linebreak="al", unicodeslot=0x1F713, }, [0x1F714]={ category="so", description="ALCHEMICAL SYMBOL FOR SALT", direction="on", linebreak="al", unicodeslot=0x1F714, }, [0x1F715]={ category="so", description="ALCHEMICAL SYMBOL FOR NITRE", direction="on", linebreak="al", unicodeslot=0x1F715, }, [0x1F716]={ category="so", description="ALCHEMICAL SYMBOL FOR VITRIOL", direction="on", linebreak="al", unicodeslot=0x1F716, }, [0x1F717]={ category="so", description="ALCHEMICAL SYMBOL FOR VITRIOL-2", direction="on", linebreak="al", unicodeslot=0x1F717, }, [0x1F718]={ category="so", description="ALCHEMICAL SYMBOL FOR ROCK SALT", direction="on", linebreak="al", unicodeslot=0x1F718, }, [0x1F719]={ category="so", description="ALCHEMICAL SYMBOL FOR ROCK SALT-2", direction="on", linebreak="al", unicodeslot=0x1F719, }, [0x1F71A]={ category="so", description="ALCHEMICAL SYMBOL FOR GOLD", direction="on", linebreak="al", unicodeslot=0x1F71A, }, [0x1F71B]={ category="so", description="ALCHEMICAL SYMBOL FOR SILVER", direction="on", linebreak="al", unicodeslot=0x1F71B, }, [0x1F71C]={ category="so", description="ALCHEMICAL SYMBOL FOR IRON ORE", direction="on", linebreak="al", unicodeslot=0x1F71C, }, [0x1F71D]={ category="so", description="ALCHEMICAL SYMBOL FOR IRON ORE-2", direction="on", linebreak="al", unicodeslot=0x1F71D, }, [0x1F71E]={ category="so", description="ALCHEMICAL SYMBOL FOR CROCUS OF IRON", direction="on", linebreak="al", unicodeslot=0x1F71E, }, [0x1F71F]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS OF IRON", direction="on", linebreak="al", unicodeslot=0x1F71F, }, [0x1F720]={ category="so", description="ALCHEMICAL SYMBOL FOR COPPER ORE", direction="on", linebreak="al", unicodeslot=0x1F720, }, [0x1F721]={ category="so", description="ALCHEMICAL SYMBOL FOR IRON-COPPER ORE", direction="on", linebreak="al", unicodeslot=0x1F721, }, [0x1F722]={ category="so", description="ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER", direction="on", linebreak="al", unicodeslot=0x1F722, }, [0x1F723]={ category="so", description="ALCHEMICAL SYMBOL FOR CROCUS OF COPPER", direction="on", linebreak="al", unicodeslot=0x1F723, }, [0x1F724]={ category="so", description="ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2", direction="on", linebreak="al", unicodeslot=0x1F724, }, [0x1F725]={ category="so", description="ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE", direction="on", linebreak="al", unicodeslot=0x1F725, }, [0x1F726]={ category="so", description="ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE", direction="on", linebreak="al", unicodeslot=0x1F726, }, [0x1F727]={ category="so", description="ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER", direction="on", linebreak="al", unicodeslot=0x1F727, }, [0x1F728]={ category="so", description="ALCHEMICAL SYMBOL FOR VERDIGRIS", direction="on", linebreak="al", unicodeslot=0x1F728, }, [0x1F729]={ category="so", description="ALCHEMICAL SYMBOL FOR TIN ORE", direction="on", linebreak="al", unicodeslot=0x1F729, }, [0x1F72A]={ category="so", description="ALCHEMICAL SYMBOL FOR LEAD ORE", direction="on", linebreak="al", unicodeslot=0x1F72A, }, [0x1F72B]={ category="so", description="ALCHEMICAL SYMBOL FOR ANTIMONY ORE", direction="on", linebreak="al", unicodeslot=0x1F72B, }, [0x1F72C]={ category="so", description="ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY", direction="on", linebreak="al", unicodeslot=0x1F72C, }, [0x1F72D]={ category="so", description="ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY", direction="on", linebreak="al", unicodeslot=0x1F72D, }, [0x1F72E]={ category="so", description="ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY", direction="on", linebreak="al", unicodeslot=0x1F72E, }, [0x1F72F]={ category="so", description="ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY", direction="on", linebreak="al", unicodeslot=0x1F72F, }, [0x1F730]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY", direction="on", linebreak="al", unicodeslot=0x1F730, }, [0x1F731]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2", direction="on", linebreak="al", unicodeslot=0x1F731, }, [0x1F732]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS", direction="on", linebreak="al", unicodeslot=0x1F732, }, [0x1F733]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS-2", direction="on", linebreak="al", unicodeslot=0x1F733, }, [0x1F734]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS-3", direction="on", linebreak="al", unicodeslot=0x1F734, }, [0x1F735]={ category="so", description="ALCHEMICAL SYMBOL FOR REGULUS-4", direction="on", linebreak="al", unicodeslot=0x1F735, }, [0x1F736]={ category="so", description="ALCHEMICAL SYMBOL FOR ALKALI", direction="on", linebreak="al", unicodeslot=0x1F736, }, [0x1F737]={ category="so", description="ALCHEMICAL SYMBOL FOR ALKALI-2", direction="on", linebreak="al", unicodeslot=0x1F737, }, [0x1F738]={ category="so", description="ALCHEMICAL SYMBOL FOR MARCASITE", direction="on", linebreak="al", unicodeslot=0x1F738, }, [0x1F739]={ category="so", description="ALCHEMICAL SYMBOL FOR SAL-AMMONIAC", direction="on", linebreak="al", unicodeslot=0x1F739, }, [0x1F73A]={ category="so", description="ALCHEMICAL SYMBOL FOR ARSENIC", direction="on", linebreak="al", unicodeslot=0x1F73A, }, [0x1F73B]={ category="so", description="ALCHEMICAL SYMBOL FOR REALGAR", direction="on", linebreak="al", unicodeslot=0x1F73B, }, [0x1F73C]={ category="so", description="ALCHEMICAL SYMBOL FOR REALGAR-2", direction="on", linebreak="al", unicodeslot=0x1F73C, }, [0x1F73D]={ category="so", description="ALCHEMICAL SYMBOL FOR AURIPIGMENT", direction="on", linebreak="al", unicodeslot=0x1F73D, }, [0x1F73E]={ category="so", description="ALCHEMICAL SYMBOL FOR BISMUTH ORE", direction="on", linebreak="al", unicodeslot=0x1F73E, }, [0x1F73F]={ category="so", description="ALCHEMICAL SYMBOL FOR TARTAR", direction="on", linebreak="al", unicodeslot=0x1F73F, }, [0x1F740]={ category="so", description="ALCHEMICAL SYMBOL FOR TARTAR-2", direction="on", linebreak="al", unicodeslot=0x1F740, }, [0x1F741]={ category="so", description="ALCHEMICAL SYMBOL FOR QUICK LIME", direction="on", linebreak="al", unicodeslot=0x1F741, }, [0x1F742]={ category="so", description="ALCHEMICAL SYMBOL FOR BORAX", direction="on", linebreak="al", unicodeslot=0x1F742, }, [0x1F743]={ category="so", description="ALCHEMICAL SYMBOL FOR BORAX-2", direction="on", linebreak="al", unicodeslot=0x1F743, }, [0x1F744]={ category="so", description="ALCHEMICAL SYMBOL FOR BORAX-3", direction="on", linebreak="al", unicodeslot=0x1F744, }, [0x1F745]={ category="so", description="ALCHEMICAL SYMBOL FOR ALUM", direction="on", linebreak="al", unicodeslot=0x1F745, }, [0x1F746]={ category="so", description="ALCHEMICAL SYMBOL FOR OIL", direction="on", linebreak="al", unicodeslot=0x1F746, }, [0x1F747]={ category="so", description="ALCHEMICAL SYMBOL FOR SPIRIT", direction="on", linebreak="al", unicodeslot=0x1F747, }, [0x1F748]={ category="so", description="ALCHEMICAL SYMBOL FOR TINCTURE", direction="on", linebreak="al", unicodeslot=0x1F748, }, [0x1F749]={ category="so", description="ALCHEMICAL SYMBOL FOR GUM", direction="on", linebreak="al", unicodeslot=0x1F749, }, [0x1F74A]={ category="so", description="ALCHEMICAL SYMBOL FOR WAX", direction="on", linebreak="al", unicodeslot=0x1F74A, }, [0x1F74B]={ category="so", description="ALCHEMICAL SYMBOL FOR POWDER", direction="on", linebreak="al", unicodeslot=0x1F74B, }, [0x1F74C]={ category="so", description="ALCHEMICAL SYMBOL FOR CALX", direction="on", linebreak="al", unicodeslot=0x1F74C, }, [0x1F74D]={ category="so", description="ALCHEMICAL SYMBOL FOR TUTTY", direction="on", linebreak="al", unicodeslot=0x1F74D, }, [0x1F74E]={ category="so", description="ALCHEMICAL SYMBOL FOR CAPUT MORTUUM", direction="on", linebreak="al", unicodeslot=0x1F74E, }, [0x1F74F]={ category="so", description="ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE", direction="on", linebreak="al", unicodeslot=0x1F74F, }, [0x1F750]={ category="so", description="ALCHEMICAL SYMBOL FOR CADUCEUS", direction="on", linebreak="al", unicodeslot=0x1F750, }, [0x1F751]={ category="so", description="ALCHEMICAL SYMBOL FOR TRIDENT", direction="on", linebreak="al", unicodeslot=0x1F751, }, [0x1F752]={ category="so", description="ALCHEMICAL SYMBOL FOR STARRED TRIDENT", direction="on", linebreak="al", unicodeslot=0x1F752, }, [0x1F753]={ category="so", description="ALCHEMICAL SYMBOL FOR LODESTONE", direction="on", linebreak="al", unicodeslot=0x1F753, }, [0x1F754]={ category="so", description="ALCHEMICAL SYMBOL FOR SOAP", direction="on", linebreak="al", unicodeslot=0x1F754, }, [0x1F755]={ category="so", description="ALCHEMICAL SYMBOL FOR URINE", direction="on", linebreak="al", unicodeslot=0x1F755, }, [0x1F756]={ category="so", description="ALCHEMICAL SYMBOL FOR HORSE DUNG", direction="on", linebreak="al", unicodeslot=0x1F756, }, [0x1F757]={ category="so", description="ALCHEMICAL SYMBOL FOR ASHES", direction="on", linebreak="al", unicodeslot=0x1F757, }, [0x1F758]={ category="so", description="ALCHEMICAL SYMBOL FOR POT ASHES", direction="on", linebreak="al", unicodeslot=0x1F758, }, [0x1F759]={ category="so", description="ALCHEMICAL SYMBOL FOR BRICK", direction="on", linebreak="al", unicodeslot=0x1F759, }, [0x1F75A]={ category="so", description="ALCHEMICAL SYMBOL FOR POWDERED BRICK", direction="on", linebreak="al", unicodeslot=0x1F75A, }, [0x1F75B]={ category="so", description="ALCHEMICAL SYMBOL FOR AMALGAM", direction="on", linebreak="al", unicodeslot=0x1F75B, }, [0x1F75C]={ category="so", description="ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM", direction="on", linebreak="al", unicodeslot=0x1F75C, }, [0x1F75D]={ category="so", description="ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2", direction="on", linebreak="al", unicodeslot=0x1F75D, }, [0x1F75E]={ category="so", description="ALCHEMICAL SYMBOL FOR SUBLIMATION", direction="on", linebreak="al", unicodeslot=0x1F75E, }, [0x1F75F]={ category="so", description="ALCHEMICAL SYMBOL FOR PRECIPITATE", direction="on", linebreak="al", unicodeslot=0x1F75F, }, [0x1F760]={ category="so", description="ALCHEMICAL SYMBOL FOR DISTILL", direction="on", linebreak="al", unicodeslot=0x1F760, }, [0x1F761]={ category="so", description="ALCHEMICAL SYMBOL FOR DISSOLVE", direction="on", linebreak="al", unicodeslot=0x1F761, }, [0x1F762]={ category="so", description="ALCHEMICAL SYMBOL FOR DISSOLVE-2", direction="on", linebreak="al", unicodeslot=0x1F762, }, [0x1F763]={ category="so", description="ALCHEMICAL SYMBOL FOR PURIFY", direction="on", linebreak="al", unicodeslot=0x1F763, }, [0x1F764]={ category="so", description="ALCHEMICAL SYMBOL FOR PUTREFACTION", direction="on", linebreak="al", unicodeslot=0x1F764, }, [0x1F765]={ category="so", description="ALCHEMICAL SYMBOL FOR CRUCIBLE", direction="on", linebreak="al", unicodeslot=0x1F765, }, [0x1F766]={ category="so", description="ALCHEMICAL SYMBOL FOR CRUCIBLE-2", direction="on", linebreak="al", unicodeslot=0x1F766, }, [0x1F767]={ category="so", description="ALCHEMICAL SYMBOL FOR CRUCIBLE-3", direction="on", linebreak="al", unicodeslot=0x1F767, }, [0x1F768]={ category="so", description="ALCHEMICAL SYMBOL FOR CRUCIBLE-4", direction="on", linebreak="al", unicodeslot=0x1F768, }, [0x1F769]={ category="so", description="ALCHEMICAL SYMBOL FOR CRUCIBLE-5", direction="on", linebreak="al", unicodeslot=0x1F769, }, [0x1F76A]={ category="so", description="ALCHEMICAL SYMBOL FOR ALEMBIC", direction="on", linebreak="al", unicodeslot=0x1F76A, }, [0x1F76B]={ category="so", description="ALCHEMICAL SYMBOL FOR BATH OF MARY", direction="on", linebreak="al", unicodeslot=0x1F76B, }, [0x1F76C]={ category="so", description="ALCHEMICAL SYMBOL FOR BATH OF VAPOURS", direction="on", linebreak="al", unicodeslot=0x1F76C, }, [0x1F76D]={ category="so", description="ALCHEMICAL SYMBOL FOR RETORT", direction="on", linebreak="al", unicodeslot=0x1F76D, }, [0x1F76E]={ category="so", description="ALCHEMICAL SYMBOL FOR HOUR", direction="on", linebreak="al", unicodeslot=0x1F76E, }, [0x1F76F]={ category="so", description="ALCHEMICAL SYMBOL FOR NIGHT", direction="on", linebreak="al", unicodeslot=0x1F76F, }, [0x1F770]={ category="so", description="ALCHEMICAL SYMBOL FOR DAY-NIGHT", direction="on", linebreak="al", unicodeslot=0x1F770, }, [0x1F771]={ category="so", description="ALCHEMICAL SYMBOL FOR MONTH", direction="on", linebreak="al", unicodeslot=0x1F771, }, [0x1F772]={ category="so", description="ALCHEMICAL SYMBOL FOR HALF DRAM", direction="on", linebreak="al", unicodeslot=0x1F772, }, [0x1F773]={ category="so", description="ALCHEMICAL SYMBOL FOR HALF OUNCE", direction="on", linebreak="al", unicodeslot=0x1F773, }, [0x2F800]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0320", direction="l", linebreak="id", specials={ "char", 0x4E3D }, unicodeslot=0x2F800, }, [0x2F801]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0321", direction="l", linebreak="id", specials={ "char", 0x4E38 }, unicodeslot=0x2F801, }, [0x2F802]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0322", direction="l", linebreak="id", specials={ "char", 0x4E41 }, unicodeslot=0x2F802, }, [0x2F803]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0323", direction="l", linebreak="id", specials={ "char", 0x20122 }, unicodeslot=0x2F803, }, [0x2F804]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0324", direction="l", linebreak="id", specials={ "char", 0x4F60 }, unicodeslot=0x2F804, }, [0x2F805]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0325", direction="l", linebreak="id", specials={ "char", 0x4FAE }, unicodeslot=0x2F805, }, [0x2F806]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0326", direction="l", linebreak="id", specials={ "char", 0x4FBB }, unicodeslot=0x2F806, }, [0x2F807]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0327", direction="l", linebreak="id", specials={ "char", 0x5002 }, unicodeslot=0x2F807, }, [0x2F808]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0328", direction="l", linebreak="id", specials={ "char", 0x507A }, unicodeslot=0x2F808, }, [0x2F809]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0329", direction="l", linebreak="id", specials={ "char", 0x5099 }, unicodeslot=0x2F809, }, [0x2F80A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050A", direction="l", linebreak="id", specials={ "char", 0x50E7 }, unicodeslot=0x2F80A, }, [0x2F80B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050B", direction="l", linebreak="id", specials={ "char", 0x50CF }, unicodeslot=0x2F80B, }, [0x2F80C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050C", direction="l", linebreak="id", specials={ "char", 0x349E }, unicodeslot=0x2F80C, }, [0x2F80D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050D", direction="l", linebreak="id", specials={ "char", 0x2063A }, unicodeslot=0x2F80D, }, [0x2F80E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050E", direction="l", linebreak="id", specials={ "char", 0x514D }, unicodeslot=0x2F80E, }, [0x2F80F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050F", direction="l", linebreak="id", specials={ "char", 0x5154 }, unicodeslot=0x2F80F, }, [0x2F810]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032A", direction="l", linebreak="id", specials={ "char", 0x5164 }, unicodeslot=0x2F810, }, [0x2F811]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032B", direction="l", linebreak="id", specials={ "char", 0x5177 }, unicodeslot=0x2F811, }, [0x2F812]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032C", direction="l", linebreak="id", specials={ "char", 0x2051C }, unicodeslot=0x2F812, }, [0x2F813]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032D", direction="l", linebreak="id", specials={ "char", 0x34B9 }, unicodeslot=0x2F813, }, [0x2F814]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032E", direction="l", linebreak="id", specials={ "char", 0x5167 }, unicodeslot=0x2F814, }, [0x2F815]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032F", direction="l", linebreak="id", specials={ "char", 0x518D }, unicodeslot=0x2F815, }, [0x2F816]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0330", direction="l", linebreak="id", specials={ "char", 0x2054B }, unicodeslot=0x2F816, }, [0x2F817]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0331", direction="l", linebreak="id", specials={ "char", 0x5197 }, unicodeslot=0x2F817, }, [0x2F818]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0332", direction="l", linebreak="id", specials={ "char", 0x51A4 }, unicodeslot=0x2F818, }, [0x2F819]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0333", direction="l", linebreak="id", specials={ "char", 0x4ECC }, unicodeslot=0x2F819, }, [0x2F81A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051A", direction="l", linebreak="id", specials={ "char", 0x51AC }, unicodeslot=0x2F81A, }, [0x2F81B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051B", direction="l", linebreak="id", specials={ "char", 0x51B5 }, unicodeslot=0x2F81B, }, [0x2F81C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051C", direction="l", linebreak="id", specials={ "char", 0x291DF }, unicodeslot=0x2F81C, }, [0x2F81D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051D", direction="l", linebreak="id", specials={ "char", 0x51F5 }, unicodeslot=0x2F81D, }, [0x2F81E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051E", direction="l", linebreak="id", specials={ "char", 0x5203 }, unicodeslot=0x2F81E, }, [0x2F81F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051F", direction="l", linebreak="id", specials={ "char", 0x34DF }, unicodeslot=0x2F81F, }, [0x2F820]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0334", direction="l", linebreak="id", specials={ "char", 0x523B }, unicodeslot=0x2F820, }, [0x2F821]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0335", direction="l", linebreak="id", specials={ "char", 0x5246 }, unicodeslot=0x2F821, }, [0x2F822]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0336", direction="l", linebreak="id", specials={ "char", 0x5272 }, unicodeslot=0x2F822, }, [0x2F823]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0337", direction="l", linebreak="id", specials={ "char", 0x5277 }, unicodeslot=0x2F823, }, [0x2F824]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0338", direction="l", linebreak="id", specials={ "char", 0x3515 }, unicodeslot=0x2F824, }, [0x2F825]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0339", direction="l", linebreak="id", specials={ "char", 0x52C7 }, unicodeslot=0x2F825, }, [0x2F826]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033A", direction="l", linebreak="id", specials={ "char", 0x52C9 }, unicodeslot=0x2F826, }, [0x2F827]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033B", direction="l", linebreak="id", specials={ "char", 0x52E4 }, unicodeslot=0x2F827, }, [0x2F828]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033C", direction="l", linebreak="id", specials={ "char", 0x52FA }, unicodeslot=0x2F828, }, [0x2F829]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033D", direction="l", linebreak="id", specials={ "char", 0x5305 }, unicodeslot=0x2F829, }, [0x2F82A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052A", direction="l", linebreak="id", specials={ "char", 0x5306 }, unicodeslot=0x2F82A, }, [0x2F82B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052B", direction="l", linebreak="id", specials={ "char", 0x5317 }, unicodeslot=0x2F82B, }, [0x2F82C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052C", direction="l", linebreak="id", specials={ "char", 0x5349 }, unicodeslot=0x2F82C, }, [0x2F82D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052D", direction="l", linebreak="id", specials={ "char", 0x5351 }, unicodeslot=0x2F82D, }, [0x2F82E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052E", direction="l", linebreak="id", specials={ "char", 0x535A }, unicodeslot=0x2F82E, }, [0x2F82F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052F", direction="l", linebreak="id", specials={ "char", 0x5373 }, unicodeslot=0x2F82F, }, [0x2F830]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033E", direction="l", linebreak="id", specials={ "char", 0x537D }, unicodeslot=0x2F830, }, [0x2F831]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033F", direction="l", linebreak="id", specials={ "char", 0x537F }, unicodeslot=0x2F831, }, [0x2F832]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0340", direction="l", linebreak="id", specials={ "char", 0x537F }, unicodeslot=0x2F832, }, [0x2F833]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0341", direction="l", linebreak="id", specials={ "char", 0x537F }, unicodeslot=0x2F833, }, [0x2F834]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0342", direction="l", linebreak="id", specials={ "char", 0x20A2C }, unicodeslot=0x2F834, }, [0x2F835]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0343", direction="l", linebreak="id", specials={ "char", 0x7070 }, unicodeslot=0x2F835, }, [0x2F836]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0344", direction="l", linebreak="id", specials={ "char", 0x53CA }, unicodeslot=0x2F836, }, [0x2F837]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0345", direction="l", linebreak="id", specials={ "char", 0x53DF }, unicodeslot=0x2F837, }, [0x2F838]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0346", direction="l", linebreak="id", specials={ "char", 0x20B63 }, unicodeslot=0x2F838, }, [0x2F839]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0347", direction="l", linebreak="id", specials={ "char", 0x53EB }, unicodeslot=0x2F839, }, [0x2F83A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053A", direction="l", linebreak="id", specials={ "char", 0x53F1 }, unicodeslot=0x2F83A, }, [0x2F83B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053B", direction="l", linebreak="id", specials={ "char", 0x5406 }, unicodeslot=0x2F83B, }, [0x2F83C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053C", direction="l", linebreak="id", specials={ "char", 0x549E }, unicodeslot=0x2F83C, }, [0x2F83D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053D", direction="l", linebreak="id", specials={ "char", 0x5438 }, unicodeslot=0x2F83D, }, [0x2F83E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053E", direction="l", linebreak="id", specials={ "char", 0x5448 }, unicodeslot=0x2F83E, }, [0x2F83F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053F", direction="l", linebreak="id", specials={ "char", 0x5468 }, unicodeslot=0x2F83F, }, [0x2F840]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0348", direction="l", linebreak="id", specials={ "char", 0x54A2 }, unicodeslot=0x2F840, }, [0x2F841]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0349", direction="l", linebreak="id", specials={ "char", 0x54F6 }, unicodeslot=0x2F841, }, [0x2F842]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034A", direction="l", linebreak="id", specials={ "char", 0x5510 }, unicodeslot=0x2F842, }, [0x2F843]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034B", direction="l", linebreak="id", specials={ "char", 0x5553 }, unicodeslot=0x2F843, }, [0x2F844]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034C", direction="l", linebreak="id", specials={ "char", 0x5563 }, unicodeslot=0x2F844, }, [0x2F845]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034D", direction="l", linebreak="id", specials={ "char", 0x5584 }, unicodeslot=0x2F845, }, [0x2F846]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034E", direction="l", linebreak="id", specials={ "char", 0x5584 }, unicodeslot=0x2F846, }, [0x2F847]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034F", direction="l", linebreak="id", specials={ "char", 0x5599 }, unicodeslot=0x2F847, }, [0x2F848]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0350", direction="l", linebreak="id", specials={ "char", 0x55AB }, unicodeslot=0x2F848, }, [0x2F849]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0351", direction="l", linebreak="id", specials={ "char", 0x55B3 }, unicodeslot=0x2F849, }, [0x2F84A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054A", direction="l", linebreak="id", specials={ "char", 0x55C2 }, unicodeslot=0x2F84A, }, [0x2F84B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054B", direction="l", linebreak="id", specials={ "char", 0x5716 }, unicodeslot=0x2F84B, }, [0x2F84C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054C", direction="l", linebreak="id", specials={ "char", 0x5606 }, unicodeslot=0x2F84C, }, [0x2F84D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054D", direction="l", linebreak="id", specials={ "char", 0x5717 }, unicodeslot=0x2F84D, }, [0x2F84E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054E", direction="l", linebreak="id", specials={ "char", 0x5651 }, unicodeslot=0x2F84E, }, [0x2F84F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054F", direction="l", linebreak="id", specials={ "char", 0x5674 }, unicodeslot=0x2F84F, }, [0x2F850]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0352", direction="l", linebreak="id", specials={ "char", 0x5207 }, unicodeslot=0x2F850, }, [0x2F851]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0353", direction="l", linebreak="id", specials={ "char", 0x58EE }, unicodeslot=0x2F851, }, [0x2F852]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0354", direction="l", linebreak="id", specials={ "char", 0x57CE }, unicodeslot=0x2F852, }, [0x2F853]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0355", direction="l", linebreak="id", specials={ "char", 0x57F4 }, unicodeslot=0x2F853, }, [0x2F854]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0356", direction="l", linebreak="id", specials={ "char", 0x580D }, unicodeslot=0x2F854, }, [0x2F855]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0357", direction="l", linebreak="id", specials={ "char", 0x578B }, unicodeslot=0x2F855, }, [0x2F856]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0358", direction="l", linebreak="id", specials={ "char", 0x5832 }, unicodeslot=0x2F856, }, [0x2F857]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0359", direction="l", linebreak="id", specials={ "char", 0x5831 }, unicodeslot=0x2F857, }, [0x2F858]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035A", direction="l", linebreak="id", specials={ "char", 0x58AC }, unicodeslot=0x2F858, }, [0x2F859]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035B", direction="l", linebreak="id", specials={ "char", 0x214E4 }, unicodeslot=0x2F859, }, [0x2F85A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055A", direction="l", linebreak="id", specials={ "char", 0x58F2 }, unicodeslot=0x2F85A, }, [0x2F85B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055B", direction="l", linebreak="id", specials={ "char", 0x58F7 }, unicodeslot=0x2F85B, }, [0x2F85C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055C", direction="l", linebreak="id", specials={ "char", 0x5906 }, unicodeslot=0x2F85C, }, [0x2F85D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055D", direction="l", linebreak="id", specials={ "char", 0x591A }, unicodeslot=0x2F85D, }, [0x2F85E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055E", direction="l", linebreak="id", specials={ "char", 0x5922 }, unicodeslot=0x2F85E, }, [0x2F85F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055F", direction="l", linebreak="id", specials={ "char", 0x5962 }, unicodeslot=0x2F85F, }, [0x2F860]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035C", direction="l", linebreak="id", specials={ "char", 0x216A8 }, unicodeslot=0x2F860, }, [0x2F861]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035D", direction="l", linebreak="id", specials={ "char", 0x216EA }, unicodeslot=0x2F861, }, [0x2F862]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035E", direction="l", linebreak="id", specials={ "char", 0x59EC }, unicodeslot=0x2F862, }, [0x2F863]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035F", direction="l", linebreak="id", specials={ "char", 0x5A1B }, unicodeslot=0x2F863, }, [0x2F864]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0360", direction="l", linebreak="id", specials={ "char", 0x5A27 }, unicodeslot=0x2F864, }, [0x2F865]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0361", direction="l", linebreak="id", specials={ "char", 0x59D8 }, unicodeslot=0x2F865, }, [0x2F866]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0362", direction="l", linebreak="id", specials={ "char", 0x5A66 }, unicodeslot=0x2F866, }, [0x2F867]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0363", direction="l", linebreak="id", specials={ "char", 0x36EE }, unicodeslot=0x2F867, }, [0x2F868]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0364", direction="l", linebreak="id", specials={ "char", 0x36FC }, unicodeslot=0x2F868, }, [0x2F869]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0365", direction="l", linebreak="id", specials={ "char", 0x5B08 }, unicodeslot=0x2F869, }, [0x2F86A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056A", direction="l", linebreak="id", specials={ "char", 0x5B3E }, unicodeslot=0x2F86A, }, [0x2F86B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056B", direction="l", linebreak="id", specials={ "char", 0x5B3E }, unicodeslot=0x2F86B, }, [0x2F86C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056C", direction="l", linebreak="id", specials={ "char", 0x219C8 }, unicodeslot=0x2F86C, }, [0x2F86D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056D", direction="l", linebreak="id", specials={ "char", 0x5BC3 }, unicodeslot=0x2F86D, }, [0x2F86E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056E", direction="l", linebreak="id", specials={ "char", 0x5BD8 }, unicodeslot=0x2F86E, }, [0x2F86F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056F", direction="l", linebreak="id", specials={ "char", 0x5BE7 }, unicodeslot=0x2F86F, }, [0x2F870]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0366", direction="l", linebreak="id", specials={ "char", 0x5BF3 }, unicodeslot=0x2F870, }, [0x2F871]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0367", direction="l", linebreak="id", specials={ "char", 0x21B18 }, unicodeslot=0x2F871, }, [0x2F872]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0368", direction="l", linebreak="id", specials={ "char", 0x5BFF }, unicodeslot=0x2F872, }, [0x2F873]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0369", direction="l", linebreak="id", specials={ "char", 0x5C06 }, unicodeslot=0x2F873, }, [0x2F874]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036A", direction="l", linebreak="id", specials={ "char", 0x5F53 }, unicodeslot=0x2F874, }, [0x2F875]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036B", direction="l", linebreak="id", specials={ "char", 0x5C22 }, unicodeslot=0x2F875, }, [0x2F876]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036C", direction="l", linebreak="id", specials={ "char", 0x3781 }, unicodeslot=0x2F876, }, [0x2F877]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036D", direction="l", linebreak="id", specials={ "char", 0x5C60 }, unicodeslot=0x2F877, }, [0x2F878]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036E", direction="l", linebreak="id", specials={ "char", 0x5C6E }, unicodeslot=0x2F878, }, [0x2F879]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036F", direction="l", linebreak="id", specials={ "char", 0x5CC0 }, unicodeslot=0x2F879, }, [0x2F87A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057A", direction="l", linebreak="id", specials={ "char", 0x5C8D }, unicodeslot=0x2F87A, }, [0x2F87B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057B", direction="l", linebreak="id", specials={ "char", 0x21DE4 }, unicodeslot=0x2F87B, }, [0x2F87C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057C", direction="l", linebreak="id", specials={ "char", 0x5D43 }, unicodeslot=0x2F87C, }, [0x2F87D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057D", direction="l", linebreak="id", specials={ "char", 0x21DE6 }, unicodeslot=0x2F87D, }, [0x2F87E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057E", direction="l", linebreak="id", specials={ "char", 0x5D6E }, unicodeslot=0x2F87E, }, [0x2F87F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057F", direction="l", linebreak="id", specials={ "char", 0x5D6B }, unicodeslot=0x2F87F, }, [0x2F880]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0370", direction="l", linebreak="id", specials={ "char", 0x5D7C }, unicodeslot=0x2F880, }, [0x2F881]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0371", direction="l", linebreak="id", specials={ "char", 0x5DE1 }, unicodeslot=0x2F881, }, [0x2F882]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0372", direction="l", linebreak="id", specials={ "char", 0x5DE2 }, unicodeslot=0x2F882, }, [0x2F883]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0373", direction="l", linebreak="id", specials={ "char", 0x382F }, unicodeslot=0x2F883, }, [0x2F884]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0374", direction="l", linebreak="id", specials={ "char", 0x5DFD }, unicodeslot=0x2F884, }, [0x2F885]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0375", direction="l", linebreak="id", specials={ "char", 0x5E28 }, unicodeslot=0x2F885, }, [0x2F886]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0376", direction="l", linebreak="id", specials={ "char", 0x5E3D }, unicodeslot=0x2F886, }, [0x2F887]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0377", direction="l", linebreak="id", specials={ "char", 0x5E69 }, unicodeslot=0x2F887, }, [0x2F888]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0378", direction="l", linebreak="id", specials={ "char", 0x3862 }, unicodeslot=0x2F888, }, [0x2F889]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0379", direction="l", linebreak="id", specials={ "char", 0x22183 }, unicodeslot=0x2F889, }, [0x2F88A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058A", direction="l", linebreak="id", specials={ "char", 0x387C }, unicodeslot=0x2F88A, }, [0x2F88B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058B", direction="l", linebreak="id", specials={ "char", 0x5EB0 }, unicodeslot=0x2F88B, }, [0x2F88C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058C", direction="l", linebreak="id", specials={ "char", 0x5EB3 }, unicodeslot=0x2F88C, }, [0x2F88D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058D", direction="l", linebreak="id", specials={ "char", 0x5EB6 }, unicodeslot=0x2F88D, }, [0x2F88E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058E", direction="l", linebreak="id", specials={ "char", 0x5ECA }, unicodeslot=0x2F88E, }, [0x2F88F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058F", direction="l", linebreak="id", specials={ "char", 0x2A392 }, unicodeslot=0x2F88F, }, [0x2F890]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037A", direction="l", linebreak="id", specials={ "char", 0x5EFE }, unicodeslot=0x2F890, }, [0x2F891]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037B", direction="l", linebreak="id", specials={ "char", 0x22331 }, unicodeslot=0x2F891, }, [0x2F892]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037C", direction="l", linebreak="id", specials={ "char", 0x22331 }, unicodeslot=0x2F892, }, [0x2F893]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037D", direction="l", linebreak="id", specials={ "char", 0x8201 }, unicodeslot=0x2F893, }, [0x2F894]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037E", direction="l", linebreak="id", specials={ "char", 0x5F22 }, unicodeslot=0x2F894, }, [0x2F895]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037F", direction="l", linebreak="id", specials={ "char", 0x5F22 }, unicodeslot=0x2F895, }, [0x2F896]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0380", direction="l", linebreak="id", specials={ "char", 0x38C7 }, unicodeslot=0x2F896, }, [0x2F897]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0381", direction="l", linebreak="id", specials={ "char", 0x232B8 }, unicodeslot=0x2F897, }, [0x2F898]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0382", direction="l", linebreak="id", specials={ "char", 0x261DA }, unicodeslot=0x2F898, }, [0x2F899]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0383", direction="l", linebreak="id", specials={ "char", 0x5F62 }, unicodeslot=0x2F899, }, [0x2F89A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059A", direction="l", linebreak="id", specials={ "char", 0x5F6B }, unicodeslot=0x2F89A, }, [0x2F89B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059B", direction="l", linebreak="id", specials={ "char", 0x38E3 }, unicodeslot=0x2F89B, }, [0x2F89C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059C", direction="l", linebreak="id", specials={ "char", 0x5F9A }, unicodeslot=0x2F89C, }, [0x2F89D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059D", direction="l", linebreak="id", specials={ "char", 0x5FCD }, unicodeslot=0x2F89D, }, [0x2F89E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059E", direction="l", linebreak="id", specials={ "char", 0x5FD7 }, unicodeslot=0x2F89E, }, [0x2F89F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059F", direction="l", linebreak="id", specials={ "char", 0x5FF9 }, unicodeslot=0x2F89F, }, [0x2F8A0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0000", direction="l", linebreak="id", specials={ "char", 0x6081 }, unicodeslot=0x2F8A0, }, [0x2F8A1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0001", direction="l", linebreak="id", specials={ "char", 0x393A }, unicodeslot=0x2F8A1, }, [0x2F8A2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0002", direction="l", linebreak="id", specials={ "char", 0x391C }, unicodeslot=0x2F8A2, }, [0x2F8A3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0003", direction="l", linebreak="id", specials={ "char", 0x6094 }, unicodeslot=0x2F8A3, }, [0x2F8A4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0004", direction="l", linebreak="id", specials={ "char", 0x226D4 }, unicodeslot=0x2F8A4, }, [0x2F8A5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0005", direction="l", linebreak="id", specials={ "char", 0x60C7 }, unicodeslot=0x2F8A5, }, [0x2F8A6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0006", direction="l", linebreak="id", specials={ "char", 0x6148 }, unicodeslot=0x2F8A6, }, [0x2F8A7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0007", direction="l", linebreak="id", specials={ "char", 0x614C }, unicodeslot=0x2F8A7, }, [0x2F8A8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0008", direction="l", linebreak="id", specials={ "char", 0x614E }, unicodeslot=0x2F8A8, }, [0x2F8A9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0009", direction="l", linebreak="id", specials={ "char", 0x614C }, unicodeslot=0x2F8A9, }, [0x2F8AA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AA", direction="l", linebreak="id", specials={ "char", 0x617A }, unicodeslot=0x2F8AA, }, [0x2F8AB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AB", direction="l", linebreak="id", specials={ "char", 0x618E }, unicodeslot=0x2F8AB, }, [0x2F8AC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AC", direction="l", linebreak="id", specials={ "char", 0x61B2 }, unicodeslot=0x2F8AC, }, [0x2F8AD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AD", direction="l", linebreak="id", specials={ "char", 0x61A4 }, unicodeslot=0x2F8AD, }, [0x2F8AE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AE", direction="l", linebreak="id", specials={ "char", 0x61AF }, unicodeslot=0x2F8AE, }, [0x2F8AF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AF", direction="l", linebreak="id", specials={ "char", 0x61DE }, unicodeslot=0x2F8AF, }, [0x2F8B0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0000", direction="l", linebreak="id", specials={ "char", 0x61F2 }, unicodeslot=0x2F8B0, }, [0x2F8B1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0001", direction="l", linebreak="id", specials={ "char", 0x61F6 }, unicodeslot=0x2F8B1, }, [0x2F8B2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0002", direction="l", linebreak="id", specials={ "char", 0x6210 }, unicodeslot=0x2F8B2, }, [0x2F8B3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0003", direction="l", linebreak="id", specials={ "char", 0x621B }, unicodeslot=0x2F8B3, }, [0x2F8B4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0004", direction="l", linebreak="id", specials={ "char", 0x625D }, unicodeslot=0x2F8B4, }, [0x2F8B5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0005", direction="l", linebreak="id", specials={ "char", 0x62B1 }, unicodeslot=0x2F8B5, }, [0x2F8B6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0006", direction="l", linebreak="id", specials={ "char", 0x62D4 }, unicodeslot=0x2F8B6, }, [0x2F8B7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0007", direction="l", linebreak="id", specials={ "char", 0x6350 }, unicodeslot=0x2F8B7, }, [0x2F8B8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0008", direction="l", linebreak="id", specials={ "char", 0x22B0C }, unicodeslot=0x2F8B8, }, [0x2F8B9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0009", direction="l", linebreak="id", specials={ "char", 0x633D }, unicodeslot=0x2F8B9, }, [0x2F8BA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BA", direction="l", linebreak="id", specials={ "char", 0x62FC }, unicodeslot=0x2F8BA, }, [0x2F8BB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BB", direction="l", linebreak="id", specials={ "char", 0x6368 }, unicodeslot=0x2F8BB, }, [0x2F8BC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BC", direction="l", linebreak="id", specials={ "char", 0x6383 }, unicodeslot=0x2F8BC, }, [0x2F8BD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BD", direction="l", linebreak="id", specials={ "char", 0x63E4 }, unicodeslot=0x2F8BD, }, [0x2F8BE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BE", direction="l", linebreak="id", specials={ "char", 0x22BF1 }, unicodeslot=0x2F8BE, }, [0x2F8BF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BF", direction="l", linebreak="id", specials={ "char", 0x6422 }, unicodeslot=0x2F8BF, }, [0x2F8C0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0000", direction="l", linebreak="id", specials={ "char", 0x63C5 }, unicodeslot=0x2F8C0, }, [0x2F8C1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0001", direction="l", linebreak="id", specials={ "char", 0x63A9 }, unicodeslot=0x2F8C1, }, [0x2F8C2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0002", direction="l", linebreak="id", specials={ "char", 0x3A2E }, unicodeslot=0x2F8C2, }, [0x2F8C3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0003", direction="l", linebreak="id", specials={ "char", 0x6469 }, unicodeslot=0x2F8C3, }, [0x2F8C4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0004", direction="l", linebreak="id", specials={ "char", 0x647E }, unicodeslot=0x2F8C4, }, [0x2F8C5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0005", direction="l", linebreak="id", specials={ "char", 0x649D }, unicodeslot=0x2F8C5, }, [0x2F8C6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0006", direction="l", linebreak="id", specials={ "char", 0x6477 }, unicodeslot=0x2F8C6, }, [0x2F8C7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0007", direction="l", linebreak="id", specials={ "char", 0x3A6C }, unicodeslot=0x2F8C7, }, [0x2F8C8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0008", direction="l", linebreak="id", specials={ "char", 0x654F }, unicodeslot=0x2F8C8, }, [0x2F8C9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0009", direction="l", linebreak="id", specials={ "char", 0x656C }, unicodeslot=0x2F8C9, }, [0x2F8CA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CA", direction="l", linebreak="id", specials={ "char", 0x2300A }, unicodeslot=0x2F8CA, }, [0x2F8CB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CB", direction="l", linebreak="id", specials={ "char", 0x65E3 }, unicodeslot=0x2F8CB, }, [0x2F8CC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CC", direction="l", linebreak="id", specials={ "char", 0x66F8 }, unicodeslot=0x2F8CC, }, [0x2F8CD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CD", direction="l", linebreak="id", specials={ "char", 0x6649 }, unicodeslot=0x2F8CD, }, [0x2F8CE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CE", direction="l", linebreak="id", specials={ "char", 0x3B19 }, unicodeslot=0x2F8CE, }, [0x2F8CF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CF", direction="l", linebreak="id", specials={ "char", 0x6691 }, unicodeslot=0x2F8CF, }, [0x2F8D0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0000", direction="l", linebreak="id", specials={ "char", 0x3B08 }, unicodeslot=0x2F8D0, }, [0x2F8D1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0001", direction="l", linebreak="id", specials={ "char", 0x3AE4 }, unicodeslot=0x2F8D1, }, [0x2F8D2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0002", direction="l", linebreak="id", specials={ "char", 0x5192 }, unicodeslot=0x2F8D2, }, [0x2F8D3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0003", direction="l", linebreak="id", specials={ "char", 0x5195 }, unicodeslot=0x2F8D3, }, [0x2F8D4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0004", direction="l", linebreak="id", specials={ "char", 0x6700 }, unicodeslot=0x2F8D4, }, [0x2F8D5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0005", direction="l", linebreak="id", specials={ "char", 0x669C }, unicodeslot=0x2F8D5, }, [0x2F8D6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0006", direction="l", linebreak="id", specials={ "char", 0x80AD }, unicodeslot=0x2F8D6, }, [0x2F8D7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0007", direction="l", linebreak="id", specials={ "char", 0x43D9 }, unicodeslot=0x2F8D7, }, [0x2F8D8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0008", direction="l", linebreak="id", specials={ "char", 0x6717 }, unicodeslot=0x2F8D8, }, [0x2F8D9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0009", direction="l", linebreak="id", specials={ "char", 0x671B }, unicodeslot=0x2F8D9, }, [0x2F8DA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DA", direction="l", linebreak="id", specials={ "char", 0x6721 }, unicodeslot=0x2F8DA, }, [0x2F8DB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DB", direction="l", linebreak="id", specials={ "char", 0x675E }, unicodeslot=0x2F8DB, }, [0x2F8DC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DC", direction="l", linebreak="id", specials={ "char", 0x6753 }, unicodeslot=0x2F8DC, }, [0x2F8DD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DD", direction="l", linebreak="id", specials={ "char", 0x233C3 }, unicodeslot=0x2F8DD, }, [0x2F8DE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DE", direction="l", linebreak="id", specials={ "char", 0x3B49 }, unicodeslot=0x2F8DE, }, [0x2F8DF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DF", direction="l", linebreak="id", specials={ "char", 0x67FA }, unicodeslot=0x2F8DF, }, [0x2F8E0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0000", direction="l", linebreak="id", specials={ "char", 0x6785 }, unicodeslot=0x2F8E0, }, [0x2F8E1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0001", direction="l", linebreak="id", specials={ "char", 0x6852 }, unicodeslot=0x2F8E1, }, [0x2F8E2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0002", direction="l", linebreak="id", specials={ "char", 0x6885 }, unicodeslot=0x2F8E2, }, [0x2F8E3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0003", direction="l", linebreak="id", specials={ "char", 0x2346D }, unicodeslot=0x2F8E3, }, [0x2F8E4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0004", direction="l", linebreak="id", specials={ "char", 0x688E }, unicodeslot=0x2F8E4, }, [0x2F8E5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0005", direction="l", linebreak="id", specials={ "char", 0x681F }, unicodeslot=0x2F8E5, }, [0x2F8E6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0006", direction="l", linebreak="id", specials={ "char", 0x6914 }, unicodeslot=0x2F8E6, }, [0x2F8E7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0007", direction="l", linebreak="id", specials={ "char", 0x3B9D }, unicodeslot=0x2F8E7, }, [0x2F8E8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0008", direction="l", linebreak="id", specials={ "char", 0x6942 }, unicodeslot=0x2F8E8, }, [0x2F8E9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0009", direction="l", linebreak="id", specials={ "char", 0x69A3 }, unicodeslot=0x2F8E9, }, [0x2F8EA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EA", direction="l", linebreak="id", specials={ "char", 0x69EA }, unicodeslot=0x2F8EA, }, [0x2F8EB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EB", direction="l", linebreak="id", specials={ "char", 0x6AA8 }, unicodeslot=0x2F8EB, }, [0x2F8EC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EC", direction="l", linebreak="id", specials={ "char", 0x236A3 }, unicodeslot=0x2F8EC, }, [0x2F8ED]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008ED", direction="l", linebreak="id", specials={ "char", 0x6ADB }, unicodeslot=0x2F8ED, }, [0x2F8EE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EE", direction="l", linebreak="id", specials={ "char", 0x3C18 }, unicodeslot=0x2F8EE, }, [0x2F8EF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EF", direction="l", linebreak="id", specials={ "char", 0x6B21 }, unicodeslot=0x2F8EF, }, [0x2F8F0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0000", direction="l", linebreak="id", specials={ "char", 0x238A7 }, unicodeslot=0x2F8F0, }, [0x2F8F1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0001", direction="l", linebreak="id", specials={ "char", 0x6B54 }, unicodeslot=0x2F8F1, }, [0x2F8F2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0002", direction="l", linebreak="id", specials={ "char", 0x3C4E }, unicodeslot=0x2F8F2, }, [0x2F8F3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0003", direction="l", linebreak="id", specials={ "char", 0x6B72 }, unicodeslot=0x2F8F3, }, [0x2F8F4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0004", direction="l", linebreak="id", specials={ "char", 0x6B9F }, unicodeslot=0x2F8F4, }, [0x2F8F5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0005", direction="l", linebreak="id", specials={ "char", 0x6BBA }, unicodeslot=0x2F8F5, }, [0x2F8F6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0006", direction="l", linebreak="id", specials={ "char", 0x6BBB }, unicodeslot=0x2F8F6, }, [0x2F8F7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0007", direction="l", linebreak="id", specials={ "char", 0x23A8D }, unicodeslot=0x2F8F7, }, [0x2F8F8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0008", direction="l", linebreak="id", specials={ "char", 0x21D0B }, unicodeslot=0x2F8F8, }, [0x2F8F9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0009", direction="l", linebreak="id", specials={ "char", 0x23AFA }, unicodeslot=0x2F8F9, }, [0x2F8FA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FA", direction="l", linebreak="id", specials={ "char", 0x6C4E }, unicodeslot=0x2F8FA, }, [0x2F8FB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FB", direction="l", linebreak="id", specials={ "char", 0x23CBC }, unicodeslot=0x2F8FB, }, [0x2F8FC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FC", direction="l", linebreak="id", specials={ "char", 0x6CBF }, unicodeslot=0x2F8FC, }, [0x2F8FD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FD", direction="l", linebreak="id", specials={ "char", 0x6CCD }, unicodeslot=0x2F8FD, }, [0x2F8FE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FE", direction="l", linebreak="id", specials={ "char", 0x6C67 }, unicodeslot=0x2F8FE, }, [0x2F8FF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FF", direction="l", linebreak="id", specials={ "char", 0x6D16 }, unicodeslot=0x2F8FF, }, [0x2F900]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0384", direction="l", linebreak="id", specials={ "char", 0x6D3E }, unicodeslot=0x2F900, }, [0x2F901]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0385", direction="l", linebreak="id", specials={ "char", 0x6D77 }, unicodeslot=0x2F901, }, [0x2F902]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0386", direction="l", linebreak="id", specials={ "char", 0x6D41 }, unicodeslot=0x2F902, }, [0x2F903]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0387", direction="l", linebreak="id", specials={ "char", 0x6D69 }, unicodeslot=0x2F903, }, [0x2F904]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0388", direction="l", linebreak="id", specials={ "char", 0x6D78 }, unicodeslot=0x2F904, }, [0x2F905]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0389", direction="l", linebreak="id", specials={ "char", 0x6D85 }, unicodeslot=0x2F905, }, [0x2F906]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038A", direction="l", linebreak="id", specials={ "char", 0x23D1E }, unicodeslot=0x2F906, }, [0x2F907]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038B", direction="l", linebreak="id", specials={ "char", 0x6D34 }, unicodeslot=0x2F907, }, [0x2F908]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038C", direction="l", linebreak="id", specials={ "char", 0x6E2F }, unicodeslot=0x2F908, }, [0x2F909]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038D", direction="l", linebreak="id", specials={ "char", 0x6E6E }, unicodeslot=0x2F909, }, [0x2F90A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AA", direction="l", linebreak="id", specials={ "char", 0x3D33 }, unicodeslot=0x2F90A, }, [0x2F90B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AB", direction="l", linebreak="id", specials={ "char", 0x6ECB }, unicodeslot=0x2F90B, }, [0x2F90C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AC", direction="l", linebreak="id", specials={ "char", 0x6EC7 }, unicodeslot=0x2F90C, }, [0x2F90D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AD", direction="l", linebreak="id", specials={ "char", 0x23ED1 }, unicodeslot=0x2F90D, }, [0x2F90E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AE", direction="l", linebreak="id", specials={ "char", 0x6DF9 }, unicodeslot=0x2F90E, }, [0x2F90F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AF", direction="l", linebreak="id", specials={ "char", 0x6F6E }, unicodeslot=0x2F90F, }, [0x2F910]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038E", direction="l", linebreak="id", specials={ "char", 0x23F5E }, unicodeslot=0x2F910, }, [0x2F911]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038F", direction="l", linebreak="id", specials={ "char", 0x23F8E }, unicodeslot=0x2F911, }, [0x2F912]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0390", direction="l", linebreak="id", specials={ "char", 0x6FC6 }, unicodeslot=0x2F912, }, [0x2F913]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0391", direction="l", linebreak="id", specials={ "char", 0x7039 }, unicodeslot=0x2F913, }, [0x2F914]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0392", direction="l", linebreak="id", specials={ "char", 0x701E }, unicodeslot=0x2F914, }, [0x2F915]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0393", direction="l", linebreak="id", specials={ "char", 0x701B }, unicodeslot=0x2F915, }, [0x2F916]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0394", direction="l", linebreak="id", specials={ "char", 0x3D96 }, unicodeslot=0x2F916, }, [0x2F917]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0395", direction="l", linebreak="id", specials={ "char", 0x704A }, unicodeslot=0x2F917, }, [0x2F918]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0396", direction="l", linebreak="id", specials={ "char", 0x707D }, unicodeslot=0x2F918, }, [0x2F919]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0397", direction="l", linebreak="id", specials={ "char", 0x7077 }, unicodeslot=0x2F919, }, [0x2F91A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BA", direction="l", linebreak="id", specials={ "char", 0x70AD }, unicodeslot=0x2F91A, }, [0x2F91B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BB", direction="l", linebreak="id", specials={ "char", 0x20525 }, unicodeslot=0x2F91B, }, [0x2F91C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BC", direction="l", linebreak="id", specials={ "char", 0x7145 }, unicodeslot=0x2F91C, }, [0x2F91D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BD", direction="l", linebreak="id", specials={ "char", 0x24263 }, unicodeslot=0x2F91D, }, [0x2F91E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BE", direction="l", linebreak="id", specials={ "char", 0x719C }, unicodeslot=0x2F91E, }, [0x2F91F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BF", direction="l", linebreak="id", specials={ "char", 0x243AB }, unicodeslot=0x2F91F, }, [0x2F920]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0398", direction="l", linebreak="id", specials={ "char", 0x7228 }, unicodeslot=0x2F920, }, [0x2F921]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0399", direction="l", linebreak="id", specials={ "char", 0x7235 }, unicodeslot=0x2F921, }, [0x2F922]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039A", direction="l", linebreak="id", specials={ "char", 0x7250 }, unicodeslot=0x2F922, }, [0x2F923]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039B", direction="l", linebreak="id", specials={ "char", 0x24608 }, unicodeslot=0x2F923, }, [0x2F924]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039C", direction="l", linebreak="id", specials={ "char", 0x7280 }, unicodeslot=0x2F924, }, [0x2F925]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039D", direction="l", linebreak="id", specials={ "char", 0x7295 }, unicodeslot=0x2F925, }, [0x2F926]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039E", direction="l", linebreak="id", specials={ "char", 0x24735 }, unicodeslot=0x2F926, }, [0x2F927]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039F", direction="l", linebreak="id", specials={ "char", 0x24814 }, unicodeslot=0x2F927, }, [0x2F928]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A0", direction="l", linebreak="id", specials={ "char", 0x737A }, unicodeslot=0x2F928, }, [0x2F929]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A1", direction="l", linebreak="id", specials={ "char", 0x738B }, unicodeslot=0x2F929, }, [0x2F92A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CA", direction="l", linebreak="id", specials={ "char", 0x3EAC }, unicodeslot=0x2F92A, }, [0x2F92B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CB", direction="l", linebreak="id", specials={ "char", 0x73A5 }, unicodeslot=0x2F92B, }, [0x2F92C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CC", direction="l", linebreak="id", specials={ "char", 0x3EB8 }, unicodeslot=0x2F92C, }, [0x2F92D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CD", direction="l", linebreak="id", specials={ "char", 0x3EB8 }, unicodeslot=0x2F92D, }, [0x2F92E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CE", direction="l", linebreak="id", specials={ "char", 0x7447 }, unicodeslot=0x2F92E, }, [0x2F92F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CF", direction="l", linebreak="id", specials={ "char", 0x745C }, unicodeslot=0x2F92F, }, [0x2F930]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A2", direction="l", linebreak="id", specials={ "char", 0x7471 }, unicodeslot=0x2F930, }, [0x2F931]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A3", direction="l", linebreak="id", specials={ "char", 0x7485 }, unicodeslot=0x2F931, }, [0x2F932]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A4", direction="l", linebreak="id", specials={ "char", 0x74CA }, unicodeslot=0x2F932, }, [0x2F933]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A5", direction="l", linebreak="id", specials={ "char", 0x3F1B }, unicodeslot=0x2F933, }, [0x2F934]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A6", direction="l", linebreak="id", specials={ "char", 0x7524 }, unicodeslot=0x2F934, }, [0x2F935]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A7", direction="l", linebreak="id", specials={ "char", 0x24C36 }, unicodeslot=0x2F935, }, [0x2F936]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A8", direction="l", linebreak="id", specials={ "char", 0x753E }, unicodeslot=0x2F936, }, [0x2F937]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A9", direction="l", linebreak="id", specials={ "char", 0x24C92 }, unicodeslot=0x2F937, }, [0x2F938]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AA", direction="l", linebreak="id", specials={ "char", 0x7570 }, unicodeslot=0x2F938, }, [0x2F939]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AB", direction="l", linebreak="id", specials={ "char", 0x2219F }, unicodeslot=0x2F939, }, [0x2F93A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DA", direction="l", linebreak="id", specials={ "char", 0x7610 }, unicodeslot=0x2F93A, }, [0x2F93B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DB", direction="l", linebreak="id", specials={ "char", 0x24FA1 }, unicodeslot=0x2F93B, }, [0x2F93C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DC", direction="l", linebreak="id", specials={ "char", 0x24FB8 }, unicodeslot=0x2F93C, }, [0x2F93D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DD", direction="l", linebreak="id", specials={ "char", 0x25044 }, unicodeslot=0x2F93D, }, [0x2F93E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DE", direction="l", linebreak="id", specials={ "char", 0x3FFC }, unicodeslot=0x2F93E, }, [0x2F93F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DF", direction="l", linebreak="id", specials={ "char", 0x4008 }, unicodeslot=0x2F93F, }, [0x2F940]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AC", direction="l", linebreak="id", specials={ "char", 0x76F4 }, unicodeslot=0x2F940, }, [0x2F941]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AD", direction="l", linebreak="id", specials={ "char", 0x250F3 }, unicodeslot=0x2F941, }, [0x2F942]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AE", direction="l", linebreak="id", specials={ "char", 0x250F2 }, unicodeslot=0x2F942, }, [0x2F943]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AF", direction="l", linebreak="id", specials={ "char", 0x25119 }, unicodeslot=0x2F943, }, [0x2F944]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B0", direction="l", linebreak="id", specials={ "char", 0x25133 }, unicodeslot=0x2F944, }, [0x2F945]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B1", direction="l", linebreak="id", specials={ "char", 0x771E }, unicodeslot=0x2F945, }, [0x2F946]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B2", direction="l", linebreak="id", specials={ "char", 0x771F }, unicodeslot=0x2F946, }, [0x2F947]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B3", direction="l", linebreak="id", specials={ "char", 0x771F }, unicodeslot=0x2F947, }, [0x2F948]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B4", direction="l", linebreak="id", specials={ "char", 0x774A }, unicodeslot=0x2F948, }, [0x2F949]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B5", direction="l", linebreak="id", specials={ "char", 0x4039 }, unicodeslot=0x2F949, }, [0x2F94A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EA", direction="l", linebreak="id", specials={ "char", 0x778B }, unicodeslot=0x2F94A, }, [0x2F94B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EB", direction="l", linebreak="id", specials={ "char", 0x4046 }, unicodeslot=0x2F94B, }, [0x2F94C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EC", direction="l", linebreak="id", specials={ "char", 0x4096 }, unicodeslot=0x2F94C, }, [0x2F94D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005ED", direction="l", linebreak="id", specials={ "char", 0x2541D }, unicodeslot=0x2F94D, }, [0x2F94E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EE", direction="l", linebreak="id", specials={ "char", 0x784E }, unicodeslot=0x2F94E, }, [0x2F94F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EF", direction="l", linebreak="id", specials={ "char", 0x788C }, unicodeslot=0x2F94F, }, [0x2F950]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B6", direction="l", linebreak="id", specials={ "char", 0x78CC }, unicodeslot=0x2F950, }, [0x2F951]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B7", direction="l", linebreak="id", specials={ "char", 0x40E3 }, unicodeslot=0x2F951, }, [0x2F952]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B8", direction="l", linebreak="id", specials={ "char", 0x25626 }, unicodeslot=0x2F952, }, [0x2F953]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B9", direction="l", linebreak="id", specials={ "char", 0x7956 }, unicodeslot=0x2F953, }, [0x2F954]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BA", direction="l", linebreak="id", specials={ "char", 0x2569A }, unicodeslot=0x2F954, }, [0x2F955]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BB", direction="l", linebreak="id", specials={ "char", 0x256C5 }, unicodeslot=0x2F955, }, [0x2F956]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BC", direction="l", linebreak="id", specials={ "char", 0x798F }, unicodeslot=0x2F956, }, [0x2F957]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BD", direction="l", linebreak="id", specials={ "char", 0x79EB }, unicodeslot=0x2F957, }, [0x2F958]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BE", direction="l", linebreak="id", specials={ "char", 0x412F }, unicodeslot=0x2F958, }, [0x2F959]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BF", direction="l", linebreak="id", specials={ "char", 0x7A40 }, unicodeslot=0x2F959, }, [0x2F95A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FA", direction="l", linebreak="id", specials={ "char", 0x7A4A }, unicodeslot=0x2F95A, }, [0x2F95B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FB", direction="l", linebreak="id", specials={ "char", 0x7A4F }, unicodeslot=0x2F95B, }, [0x2F95C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FC", direction="l", linebreak="id", specials={ "char", 0x2597C }, unicodeslot=0x2F95C, }, [0x2F95D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FD", direction="l", linebreak="id", specials={ "char", 0x25AA7 }, unicodeslot=0x2F95D, }, [0x2F95E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FE", direction="l", linebreak="id", specials={ "char", 0x25AA7 }, unicodeslot=0x2F95E, }, [0x2F95F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FF", direction="l", linebreak="id", specials={ "char", 0x7AEE }, unicodeslot=0x2F95F, }, [0x2F960]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C0", direction="l", linebreak="id", specials={ "char", 0x4202 }, unicodeslot=0x2F960, }, [0x2F961]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C1", direction="l", linebreak="id", specials={ "char", 0x25BAB }, unicodeslot=0x2F961, }, [0x2F962]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C2", direction="l", linebreak="id", specials={ "char", 0x7BC6 }, unicodeslot=0x2F962, }, [0x2F963]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C3", direction="l", linebreak="id", specials={ "char", 0x7BC9 }, unicodeslot=0x2F963, }, [0x2F964]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C4", direction="l", linebreak="id", specials={ "char", 0x4227 }, unicodeslot=0x2F964, }, [0x2F965]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C5", direction="l", linebreak="id", specials={ "char", 0x25C80 }, unicodeslot=0x2F965, }, [0x2F966]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C6", direction="l", linebreak="id", specials={ "char", 0x7CD2 }, unicodeslot=0x2F966, }, [0x2F967]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C7", direction="l", linebreak="id", specials={ "char", 0x42A0 }, unicodeslot=0x2F967, }, [0x2F968]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C8", direction="l", linebreak="id", specials={ "char", 0x7CE8 }, unicodeslot=0x2F968, }, [0x2F969]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C9", direction="l", linebreak="id", specials={ "char", 0x7CE3 }, unicodeslot=0x2F969, }, [0x2F96A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060A", direction="l", linebreak="id", specials={ "char", 0x7D00 }, unicodeslot=0x2F96A, }, [0x2F96B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060B", direction="l", linebreak="id", specials={ "char", 0x25F86 }, unicodeslot=0x2F96B, }, [0x2F96C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060C", direction="l", linebreak="id", specials={ "char", 0x7D63 }, unicodeslot=0x2F96C, }, [0x2F96D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060D", direction="l", linebreak="id", specials={ "char", 0x4301 }, unicodeslot=0x2F96D, }, [0x2F96E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060E", direction="l", linebreak="id", specials={ "char", 0x7DC7 }, unicodeslot=0x2F96E, }, [0x2F96F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060F", direction="l", linebreak="id", specials={ "char", 0x7E02 }, unicodeslot=0x2F96F, }, [0x2F970]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CA", direction="l", linebreak="id", specials={ "char", 0x7E45 }, unicodeslot=0x2F970, }, [0x2F971]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CB", direction="l", linebreak="id", specials={ "char", 0x4334 }, unicodeslot=0x2F971, }, [0x2F972]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CC", direction="l", linebreak="id", specials={ "char", 0x26228 }, unicodeslot=0x2F972, }, [0x2F973]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CD", direction="l", linebreak="id", specials={ "char", 0x26247 }, unicodeslot=0x2F973, }, [0x2F974]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CE", direction="l", linebreak="id", specials={ "char", 0x4359 }, unicodeslot=0x2F974, }, [0x2F975]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CF", direction="l", linebreak="id", specials={ "char", 0x262D9 }, unicodeslot=0x2F975, }, [0x2F976]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D0", direction="l", linebreak="id", specials={ "char", 0x7F7A }, unicodeslot=0x2F976, }, [0x2F977]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D1", direction="l", linebreak="id", specials={ "char", 0x2633E }, unicodeslot=0x2F977, }, [0x2F978]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D2", direction="l", linebreak="id", specials={ "char", 0x7F95 }, unicodeslot=0x2F978, }, [0x2F979]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D3", direction="l", linebreak="id", specials={ "char", 0x7FFA }, unicodeslot=0x2F979, }, [0x2F97A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061A", direction="l", linebreak="id", specials={ "char", 0x8005 }, unicodeslot=0x2F97A, }, [0x2F97B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061B", direction="l", linebreak="id", specials={ "char", 0x264DA }, unicodeslot=0x2F97B, }, [0x2F97C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061C", direction="l", linebreak="id", specials={ "char", 0x26523 }, unicodeslot=0x2F97C, }, [0x2F97D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061D", direction="l", linebreak="id", specials={ "char", 0x8060 }, unicodeslot=0x2F97D, }, [0x2F97E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061E", direction="l", linebreak="id", specials={ "char", 0x265A8 }, unicodeslot=0x2F97E, }, [0x2F97F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061F", direction="l", linebreak="id", specials={ "char", 0x8070 }, unicodeslot=0x2F97F, }, [0x2F980]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D4", direction="l", linebreak="id", specials={ "char", 0x2335F }, unicodeslot=0x2F980, }, [0x2F981]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D5", direction="l", linebreak="id", specials={ "char", 0x43D5 }, unicodeslot=0x2F981, }, [0x2F982]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D6", direction="l", linebreak="id", specials={ "char", 0x80B2 }, unicodeslot=0x2F982, }, [0x2F983]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D7", direction="l", linebreak="id", specials={ "char", 0x8103 }, unicodeslot=0x2F983, }, [0x2F984]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D8", direction="l", linebreak="id", specials={ "char", 0x440B }, unicodeslot=0x2F984, }, [0x2F985]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D9", direction="l", linebreak="id", specials={ "char", 0x813E }, unicodeslot=0x2F985, }, [0x2F986]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DA", direction="l", linebreak="id", specials={ "char", 0x5AB5 }, unicodeslot=0x2F986, }, [0x2F987]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DB", direction="l", linebreak="id", specials={ "char", 0x267A7 }, unicodeslot=0x2F987, }, [0x2F988]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DC", direction="l", linebreak="id", specials={ "char", 0x267B5 }, unicodeslot=0x2F988, }, [0x2F989]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DD", direction="l", linebreak="id", specials={ "char", 0x23393 }, unicodeslot=0x2F989, }, [0x2F98A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062A", direction="l", linebreak="id", specials={ "char", 0x2339C }, unicodeslot=0x2F98A, }, [0x2F98B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062B", direction="l", linebreak="id", specials={ "char", 0x8201 }, unicodeslot=0x2F98B, }, [0x2F98C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062C", direction="l", linebreak="id", specials={ "char", 0x8204 }, unicodeslot=0x2F98C, }, [0x2F98D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062D", direction="l", linebreak="id", specials={ "char", 0x8F9E }, unicodeslot=0x2F98D, }, [0x2F98E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062E", direction="l", linebreak="id", specials={ "char", 0x446B }, unicodeslot=0x2F98E, }, [0x2F98F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062F", direction="l", linebreak="id", specials={ "char", 0x8291 }, unicodeslot=0x2F98F, }, [0x2F990]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DE", direction="l", linebreak="id", specials={ "char", 0x828B }, unicodeslot=0x2F990, }, [0x2F991]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DF", direction="l", linebreak="id", specials={ "char", 0x829D }, unicodeslot=0x2F991, }, [0x2F992]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E0", direction="l", linebreak="id", specials={ "char", 0x52B3 }, unicodeslot=0x2F992, }, [0x2F993]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E1", direction="l", linebreak="id", specials={ "char", 0x82B1 }, unicodeslot=0x2F993, }, [0x2F994]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E2", direction="l", linebreak="id", specials={ "char", 0x82B3 }, unicodeslot=0x2F994, }, [0x2F995]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E3", direction="l", linebreak="id", specials={ "char", 0x82BD }, unicodeslot=0x2F995, }, [0x2F996]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E4", direction="l", linebreak="id", specials={ "char", 0x82E6 }, unicodeslot=0x2F996, }, [0x2F997]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E5", direction="l", linebreak="id", specials={ "char", 0x26B3C }, unicodeslot=0x2F997, }, [0x2F998]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E6", direction="l", linebreak="id", specials={ "char", 0x82E5 }, unicodeslot=0x2F998, }, [0x2F999]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E7", direction="l", linebreak="id", specials={ "char", 0x831D }, unicodeslot=0x2F999, }, [0x2F99A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063A", direction="l", linebreak="id", specials={ "char", 0x8363 }, unicodeslot=0x2F99A, }, [0x2F99B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063B", direction="l", linebreak="id", specials={ "char", 0x83AD }, unicodeslot=0x2F99B, }, [0x2F99C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063C", direction="l", linebreak="id", specials={ "char", 0x8323 }, unicodeslot=0x2F99C, }, [0x2F99D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063D", direction="l", linebreak="id", specials={ "char", 0x83BD }, unicodeslot=0x2F99D, }, [0x2F99E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063E", direction="l", linebreak="id", specials={ "char", 0x83E7 }, unicodeslot=0x2F99E, }, [0x2F99F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063F", direction="l", linebreak="id", specials={ "char", 0x8457 }, unicodeslot=0x2F99F, }, [0x2F9A0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0000", direction="l", linebreak="id", specials={ "char", 0x8353 }, unicodeslot=0x2F9A0, }, [0x2F9A1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0001", direction="l", linebreak="id", specials={ "char", 0x83CA }, unicodeslot=0x2F9A1, }, [0x2F9A2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0002", direction="l", linebreak="id", specials={ "char", 0x83CC }, unicodeslot=0x2F9A2, }, [0x2F9A3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0003", direction="l", linebreak="id", specials={ "char", 0x83DC }, unicodeslot=0x2F9A3, }, [0x2F9A4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0004", direction="l", linebreak="id", specials={ "char", 0x26C36 }, unicodeslot=0x2F9A4, }, [0x2F9A5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0005", direction="l", linebreak="id", specials={ "char", 0x26D6B }, unicodeslot=0x2F9A5, }, [0x2F9A6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0006", direction="l", linebreak="id", specials={ "char", 0x26CD5 }, unicodeslot=0x2F9A6, }, [0x2F9A7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0007", direction="l", linebreak="id", specials={ "char", 0x452B }, unicodeslot=0x2F9A7, }, [0x2F9A8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0008", direction="l", linebreak="id", specials={ "char", 0x84F1 }, unicodeslot=0x2F9A8, }, [0x2F9A9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0009", direction="l", linebreak="id", specials={ "char", 0x84F3 }, unicodeslot=0x2F9A9, }, [0x2F9AA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AA", direction="l", linebreak="id", specials={ "char", 0x8516 }, unicodeslot=0x2F9AA, }, [0x2F9AB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AB", direction="l", linebreak="id", specials={ "char", 0x273CA }, unicodeslot=0x2F9AB, }, [0x2F9AC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AC", direction="l", linebreak="id", specials={ "char", 0x8564 }, unicodeslot=0x2F9AC, }, [0x2F9AD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AD", direction="l", linebreak="id", specials={ "char", 0x26F2C }, unicodeslot=0x2F9AD, }, [0x2F9AE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AE", direction="l", linebreak="id", specials={ "char", 0x455D }, unicodeslot=0x2F9AE, }, [0x2F9AF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AF", direction="l", linebreak="id", specials={ "char", 0x4561 }, unicodeslot=0x2F9AF, }, [0x2F9B0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0000", direction="l", linebreak="id", specials={ "char", 0x26FB1 }, unicodeslot=0x2F9B0, }, [0x2F9B1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0001", direction="l", linebreak="id", specials={ "char", 0x270D2 }, unicodeslot=0x2F9B1, }, [0x2F9B2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0002", direction="l", linebreak="id", specials={ "char", 0x456B }, unicodeslot=0x2F9B2, }, [0x2F9B3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0003", direction="l", linebreak="id", specials={ "char", 0x8650 }, unicodeslot=0x2F9B3, }, [0x2F9B4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0004", direction="l", linebreak="id", specials={ "char", 0x865C }, unicodeslot=0x2F9B4, }, [0x2F9B5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0005", direction="l", linebreak="id", specials={ "char", 0x8667 }, unicodeslot=0x2F9B5, }, [0x2F9B6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0006", direction="l", linebreak="id", specials={ "char", 0x8669 }, unicodeslot=0x2F9B6, }, [0x2F9B7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0007", direction="l", linebreak="id", specials={ "char", 0x86A9 }, unicodeslot=0x2F9B7, }, [0x2F9B8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0008", direction="l", linebreak="id", specials={ "char", 0x8688 }, unicodeslot=0x2F9B8, }, [0x2F9B9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0009", direction="l", linebreak="id", specials={ "char", 0x870E }, unicodeslot=0x2F9B9, }, [0x2F9BA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BA", direction="l", linebreak="id", specials={ "char", 0x86E2 }, unicodeslot=0x2F9BA, }, [0x2F9BB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BB", direction="l", linebreak="id", specials={ "char", 0x8779 }, unicodeslot=0x2F9BB, }, [0x2F9BC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BC", direction="l", linebreak="id", specials={ "char", 0x8728 }, unicodeslot=0x2F9BC, }, [0x2F9BD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BD", direction="l", linebreak="id", specials={ "char", 0x876B }, unicodeslot=0x2F9BD, }, [0x2F9BE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BE", direction="l", linebreak="id", specials={ "char", 0x8786 }, unicodeslot=0x2F9BE, }, [0x2F9BF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BF", direction="l", linebreak="id", specials={ "char", 0x45D7 }, unicodeslot=0x2F9BF, }, [0x2F9C0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0000", direction="l", linebreak="id", specials={ "char", 0x87E1 }, unicodeslot=0x2F9C0, }, [0x2F9C1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0001", direction="l", linebreak="id", specials={ "char", 0x8801 }, unicodeslot=0x2F9C1, }, [0x2F9C2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0002", direction="l", linebreak="id", specials={ "char", 0x45F9 }, unicodeslot=0x2F9C2, }, [0x2F9C3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0003", direction="l", linebreak="id", specials={ "char", 0x8860 }, unicodeslot=0x2F9C3, }, [0x2F9C4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0004", direction="l", linebreak="id", specials={ "char", 0x8863 }, unicodeslot=0x2F9C4, }, [0x2F9C5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0005", direction="l", linebreak="id", specials={ "char", 0x27667 }, unicodeslot=0x2F9C5, }, [0x2F9C6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0006", direction="l", linebreak="id", specials={ "char", 0x88D7 }, unicodeslot=0x2F9C6, }, [0x2F9C7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0007", direction="l", linebreak="id", specials={ "char", 0x88DE }, unicodeslot=0x2F9C7, }, [0x2F9C8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0008", direction="l", linebreak="id", specials={ "char", 0x4635 }, unicodeslot=0x2F9C8, }, [0x2F9C9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0009", direction="l", linebreak="id", specials={ "char", 0x88FA }, unicodeslot=0x2F9C9, }, [0x2F9CA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CA", direction="l", linebreak="id", specials={ "char", 0x34BB }, unicodeslot=0x2F9CA, }, [0x2F9CB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CB", direction="l", linebreak="id", specials={ "char", 0x278AE }, unicodeslot=0x2F9CB, }, [0x2F9CC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CC", direction="l", linebreak="id", specials={ "char", 0x27966 }, unicodeslot=0x2F9CC, }, [0x2F9CD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CD", direction="l", linebreak="id", specials={ "char", 0x46BE }, unicodeslot=0x2F9CD, }, [0x2F9CE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CE", direction="l", linebreak="id", specials={ "char", 0x46C7 }, unicodeslot=0x2F9CE, }, [0x2F9CF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CF", direction="l", linebreak="id", specials={ "char", 0x8AA0 }, unicodeslot=0x2F9CF, }, [0x2F9D0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0000", direction="l", linebreak="id", specials={ "char", 0x8AED }, unicodeslot=0x2F9D0, }, [0x2F9D1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0001", direction="l", linebreak="id", specials={ "char", 0x8B8A }, unicodeslot=0x2F9D1, }, [0x2F9D2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0002", direction="l", linebreak="id", specials={ "char", 0x8C55 }, unicodeslot=0x2F9D2, }, [0x2F9D3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0003", direction="l", linebreak="id", specials={ "char", 0x27CA8 }, unicodeslot=0x2F9D3, }, [0x2F9D4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0004", direction="l", linebreak="id", specials={ "char", 0x8CAB }, unicodeslot=0x2F9D4, }, [0x2F9D5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0005", direction="l", linebreak="id", specials={ "char", 0x8CC1 }, unicodeslot=0x2F9D5, }, [0x2F9D6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0006", direction="l", linebreak="id", specials={ "char", 0x8D1B }, unicodeslot=0x2F9D6, }, [0x2F9D7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0007", direction="l", linebreak="id", specials={ "char", 0x8D77 }, unicodeslot=0x2F9D7, }, [0x2F9D8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0008", direction="l", linebreak="id", specials={ "char", 0x27F2F }, unicodeslot=0x2F9D8, }, [0x2F9D9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0009", direction="l", linebreak="id", specials={ "char", 0x20804 }, unicodeslot=0x2F9D9, }, [0x2F9DA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DA", direction="l", linebreak="id", specials={ "char", 0x8DCB }, unicodeslot=0x2F9DA, }, [0x2F9DB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DB", direction="l", linebreak="id", specials={ "char", 0x8DBC }, unicodeslot=0x2F9DB, }, [0x2F9DC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DC", direction="l", linebreak="id", specials={ "char", 0x8DF0 }, unicodeslot=0x2F9DC, }, [0x2F9DD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DD", direction="l", linebreak="id", specials={ "char", 0x208DE }, unicodeslot=0x2F9DD, }, [0x2F9DE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DE", direction="l", linebreak="id", specials={ "char", 0x8ED4 }, unicodeslot=0x2F9DE, }, [0x2F9DF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DF", direction="l", linebreak="id", specials={ "char", 0x8F38 }, unicodeslot=0x2F9DF, }, [0x2F9E0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0000", direction="l", linebreak="id", specials={ "char", 0x285D2 }, unicodeslot=0x2F9E0, }, [0x2F9E1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0001", direction="l", linebreak="id", specials={ "char", 0x285ED }, unicodeslot=0x2F9E1, }, [0x2F9E2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0002", direction="l", linebreak="id", specials={ "char", 0x9094 }, unicodeslot=0x2F9E2, }, [0x2F9E3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0003", direction="l", linebreak="id", specials={ "char", 0x90F1 }, unicodeslot=0x2F9E3, }, [0x2F9E4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0004", direction="l", linebreak="id", specials={ "char", 0x9111 }, unicodeslot=0x2F9E4, }, [0x2F9E5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0005", direction="l", linebreak="id", specials={ "char", 0x2872E }, unicodeslot=0x2F9E5, }, [0x2F9E6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0006", direction="l", linebreak="id", specials={ "char", 0x911B }, unicodeslot=0x2F9E6, }, [0x2F9E7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0007", direction="l", linebreak="id", specials={ "char", 0x9238 }, unicodeslot=0x2F9E7, }, [0x2F9E8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0008", direction="l", linebreak="id", specials={ "char", 0x92D7 }, unicodeslot=0x2F9E8, }, [0x2F9E9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0009", direction="l", linebreak="id", specials={ "char", 0x92D8 }, unicodeslot=0x2F9E9, }, [0x2F9EA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EA", direction="l", linebreak="id", specials={ "char", 0x927C }, unicodeslot=0x2F9EA, }, [0x2F9EB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EB", direction="l", linebreak="id", specials={ "char", 0x93F9 }, unicodeslot=0x2F9EB, }, [0x2F9EC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EC", direction="l", linebreak="id", specials={ "char", 0x9415 }, unicodeslot=0x2F9EC, }, [0x2F9ED]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009ED", direction="l", linebreak="id", specials={ "char", 0x28BFA }, unicodeslot=0x2F9ED, }, [0x2F9EE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EE", direction="l", linebreak="id", specials={ "char", 0x958B }, unicodeslot=0x2F9EE, }, [0x2F9EF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EF", direction="l", linebreak="id", specials={ "char", 0x4995 }, unicodeslot=0x2F9EF, }, [0x2F9F0]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0000", direction="l", linebreak="id", specials={ "char", 0x95B7 }, unicodeslot=0x2F9F0, }, [0x2F9F1]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0001", direction="l", linebreak="id", specials={ "char", 0x28D77 }, unicodeslot=0x2F9F1, }, [0x2F9F2]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0002", direction="l", linebreak="id", specials={ "char", 0x49E6 }, unicodeslot=0x2F9F2, }, [0x2F9F3]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0003", direction="l", linebreak="id", specials={ "char", 0x96C3 }, unicodeslot=0x2F9F3, }, [0x2F9F4]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0004", direction="l", linebreak="id", specials={ "char", 0x5DB2 }, unicodeslot=0x2F9F4, }, [0x2F9F5]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0005", direction="l", linebreak="id", specials={ "char", 0x9723 }, unicodeslot=0x2F9F5, }, [0x2F9F6]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0006", direction="l", linebreak="id", specials={ "char", 0x29145 }, unicodeslot=0x2F9F6, }, [0x2F9F7]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0007", direction="l", linebreak="id", specials={ "char", 0x2921A }, unicodeslot=0x2F9F7, }, [0x2F9F8]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0008", direction="l", linebreak="id", specials={ "char", 0x4A6E }, unicodeslot=0x2F9F8, }, [0x2F9F9]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0009", direction="l", linebreak="id", specials={ "char", 0x4A76 }, unicodeslot=0x2F9F9, }, [0x2F9FA]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FA", direction="l", linebreak="id", specials={ "char", 0x97E0 }, unicodeslot=0x2F9FA, }, [0x2F9FB]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FB", direction="l", linebreak="id", specials={ "char", 0x2940A }, unicodeslot=0x2F9FB, }, [0x2F9FC]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FC", direction="l", linebreak="id", specials={ "char", 0x4AB2 }, unicodeslot=0x2F9FC, }, [0x2F9FD]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FD", direction="l", linebreak="id", specials={ "char", 0x29496 }, unicodeslot=0x2F9FD, }, [0x2F9FE]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FE", direction="l", linebreak="id", specials={ "char", 0x980B }, unicodeslot=0x2F9FE, }, [0x2F9FF]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FF", direction="l", linebreak="id", specials={ "char", 0x980B }, unicodeslot=0x2F9FF, }, [0x2FA00]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000", direction="l", linebreak="id", specials={ "char", 0x9829 }, unicodeslot=0x2FA00, }, [0x2FA01]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001", direction="l", linebreak="id", specials={ "char", 0x295B6 }, unicodeslot=0x2FA01, }, [0x2FA02]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0002", direction="l", linebreak="id", specials={ "char", 0x98E2 }, unicodeslot=0x2FA02, }, [0x2FA03]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0003", direction="l", linebreak="id", specials={ "char", 0x4B33 }, unicodeslot=0x2FA03, }, [0x2FA04]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0004", direction="l", linebreak="id", specials={ "char", 0x9929 }, unicodeslot=0x2FA04, }, [0x2FA05]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0005", direction="l", linebreak="id", specials={ "char", 0x99A7 }, unicodeslot=0x2FA05, }, [0x2FA06]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0006", direction="l", linebreak="id", specials={ "char", 0x99C2 }, unicodeslot=0x2FA06, }, [0x2FA07]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0007", direction="l", linebreak="id", specials={ "char", 0x99FE }, unicodeslot=0x2FA07, }, [0x2FA08]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0008", direction="l", linebreak="id", specials={ "char", 0x4BCE }, unicodeslot=0x2FA08, }, [0x2FA09]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0009", direction="l", linebreak="id", specials={ "char", 0x29B30 }, unicodeslot=0x2FA09, }, [0x2FA0A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000A", direction="l", linebreak="id", specials={ "char", 0x9B12 }, unicodeslot=0x2FA0A, }, [0x2FA0B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000B", direction="l", linebreak="id", specials={ "char", 0x9C40 }, unicodeslot=0x2FA0B, }, [0x2FA0C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000C", direction="l", linebreak="id", specials={ "char", 0x9CFD }, unicodeslot=0x2FA0C, }, [0x2FA0D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000D", direction="l", linebreak="id", specials={ "char", 0x4CCE }, unicodeslot=0x2FA0D, }, [0x2FA0E]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000E", direction="l", linebreak="id", specials={ "char", 0x4CED }, unicodeslot=0x2FA0E, }, [0x2FA0F]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000F", direction="l", linebreak="id", specials={ "char", 0x9D67 }, unicodeslot=0x2FA0F, }, [0x2FA10]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000A", direction="l", linebreak="id", specials={ "char", 0x2A0CE }, unicodeslot=0x2FA10, }, [0x2FA11]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000B", direction="l", linebreak="id", specials={ "char", 0x4CF8 }, unicodeslot=0x2FA11, }, [0x2FA12]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000C", direction="l", linebreak="id", specials={ "char", 0x2A105 }, unicodeslot=0x2FA12, }, [0x2FA13]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000D", direction="l", linebreak="id", specials={ "char", 0x2A20E }, unicodeslot=0x2FA13, }, [0x2FA14]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000E", direction="l", linebreak="id", specials={ "char", 0x2A291 }, unicodeslot=0x2FA14, }, [0x2FA15]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000F", direction="l", linebreak="id", specials={ "char", 0x9EBB }, unicodeslot=0x2FA15, }, [0x2FA16]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0010", direction="l", linebreak="id", specials={ "char", 0x4D56 }, unicodeslot=0x2FA16, }, [0x2FA17]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0011", direction="l", linebreak="id", specials={ "char", 0x9EF9 }, unicodeslot=0x2FA17, }, [0x2FA18]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0012", direction="l", linebreak="id", specials={ "char", 0x9EFE }, unicodeslot=0x2FA18, }, [0x2FA19]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0013", direction="l", linebreak="id", specials={ "char", 0x9F05 }, unicodeslot=0x2FA19, }, [0x2FA1A]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001A", direction="l", linebreak="id", specials={ "char", 0x9F0F }, unicodeslot=0x2FA1A, }, [0x2FA1B]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001B", direction="l", linebreak="id", specials={ "char", 0x9F16 }, unicodeslot=0x2FA1B, }, [0x2FA1C]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001C", direction="l", linebreak="id", specials={ "char", 0x9F3B }, unicodeslot=0x2FA1C, }, [0x2FA1D]={ category="lo", cjkwd="w", description="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001D", direction="l", linebreak="id", specials={ "char", 0x2A600 }, unicodeslot=0x2FA1D, }, [0xE0001]={ category="cf", description="LANGUAGE TAG", direction="bn", linebreak="cm", unicodeslot=0xE0001, }, [0xE0020]={ category="cf", description="TAG SPACE", direction="bn", linebreak="cm", unicodeslot=0xE0020, }, [0xE0021]={ category="cf", description="TAG EXCLAMATION MARK", direction="bn", linebreak="cm", unicodeslot=0xE0021, }, [0xE0022]={ category="cf", description="TAG QUOTATION MARK", direction="bn", linebreak="cm", unicodeslot=0xE0022, }, [0xE0023]={ category="cf", description="TAG NUMBER SIGN", direction="bn", linebreak="cm", unicodeslot=0xE0023, }, [0xE0024]={ category="cf", description="TAG DOLLAR SIGN", direction="bn", linebreak="cm", unicodeslot=0xE0024, }, [0xE0025]={ category="cf", description="TAG PERCENT SIGN", direction="bn", linebreak="cm", unicodeslot=0xE0025, }, [0xE0026]={ category="cf", description="TAG AMPERSAND", direction="bn", linebreak="cm", unicodeslot=0xE0026, }, [0xE0027]={ category="cf", description="TAG APOSTROPHE", direction="bn", linebreak="cm", unicodeslot=0xE0027, }, [0xE0028]={ category="cf", description="TAG LEFT PARENTHESIS", direction="bn", linebreak="cm", unicodeslot=0xE0028, }, [0xE0029]={ category="cf", description="TAG RIGHT PARENTHESIS", direction="bn", linebreak="cm", unicodeslot=0xE0029, }, [0xE002A]={ category="cf", description="TAG ASTERISK", direction="bn", linebreak="cm", unicodeslot=0xE002A, }, [0xE002B]={ category="cf", description="TAG PLUS SIGN", direction="bn", linebreak="cm", unicodeslot=0xE002B, }, [0xE002C]={ category="cf", description="TAG COMMA", direction="bn", linebreak="cm", unicodeslot=0xE002C, }, [0xE002D]={ category="cf", description="TAG HYPHEN-MINUS", direction="bn", linebreak="cm", unicodeslot=0xE002D, }, [0xE002E]={ category="cf", description="TAG FULL STOP", direction="bn", linebreak="cm", unicodeslot=0xE002E, }, [0xE002F]={ category="cf", description="TAG SOLIDUS", direction="bn", linebreak="cm", unicodeslot=0xE002F, }, [0xE0030]={ category="cf", description="TAG DIGIT ZERO", direction="bn", linebreak="cm", unicodeslot=0xE0030, }, [0xE0031]={ category="cf", description="TAG DIGIT ONE", direction="bn", linebreak="cm", unicodeslot=0xE0031, }, [0xE0032]={ category="cf", description="TAG DIGIT TWO", direction="bn", linebreak="cm", unicodeslot=0xE0032, }, [0xE0033]={ category="cf", description="TAG DIGIT THREE", direction="bn", linebreak="cm", unicodeslot=0xE0033, }, [0xE0034]={ category="cf", description="TAG DIGIT FOUR", direction="bn", linebreak="cm", unicodeslot=0xE0034, }, [0xE0035]={ category="cf", description="TAG DIGIT FIVE", direction="bn", linebreak="cm", unicodeslot=0xE0035, }, [0xE0036]={ category="cf", description="TAG DIGIT SIX", direction="bn", linebreak="cm", unicodeslot=0xE0036, }, [0xE0037]={ category="cf", description="TAG DIGIT SEVEN", direction="bn", linebreak="cm", unicodeslot=0xE0037, }, [0xE0038]={ category="cf", description="TAG DIGIT EIGHT", direction="bn", linebreak="cm", unicodeslot=0xE0038, }, [0xE0039]={ category="cf", description="TAG DIGIT NINE", direction="bn", linebreak="cm", unicodeslot=0xE0039, }, [0xE003A]={ category="cf", description="TAG COLON", direction="bn", linebreak="cm", unicodeslot=0xE003A, }, [0xE003B]={ category="cf", description="TAG SEMICOLON", direction="bn", linebreak="cm", unicodeslot=0xE003B, }, [0xE003C]={ category="cf", description="TAG LESS-THAN SIGN", direction="bn", linebreak="cm", unicodeslot=0xE003C, }, [0xE003D]={ category="cf", description="TAG EQUALS SIGN", direction="bn", linebreak="cm", unicodeslot=0xE003D, }, [0xE003E]={ category="cf", description="TAG GREATER-THAN SIGN", direction="bn", linebreak="cm", unicodeslot=0xE003E, }, [0xE003F]={ category="cf", description="TAG QUESTION MARK", direction="bn", linebreak="cm", unicodeslot=0xE003F, }, [0xE0040]={ category="cf", description="TAG COMMERCIAL AT", direction="bn", linebreak="cm", unicodeslot=0xE0040, }, [0xE0041]={ category="cf", description="TAG LATIN CAPITAL LETTER A", direction="bn", linebreak="cm", unicodeslot=0xE0041, }, [0xE0042]={ category="cf", description="TAG LATIN CAPITAL LETTER B", direction="bn", linebreak="cm", unicodeslot=0xE0042, }, [0xE0043]={ category="cf", description="TAG LATIN CAPITAL LETTER C", direction="bn", linebreak="cm", unicodeslot=0xE0043, }, [0xE0044]={ category="cf", description="TAG LATIN CAPITAL LETTER D", direction="bn", linebreak="cm", unicodeslot=0xE0044, }, [0xE0045]={ category="cf", description="TAG LATIN CAPITAL LETTER E", direction="bn", linebreak="cm", unicodeslot=0xE0045, }, [0xE0046]={ category="cf", description="TAG LATIN CAPITAL LETTER F", direction="bn", linebreak="cm", unicodeslot=0xE0046, }, [0xE0047]={ category="cf", description="TAG LATIN CAPITAL LETTER G", direction="bn", linebreak="cm", unicodeslot=0xE0047, }, [0xE0048]={ category="cf", description="TAG LATIN CAPITAL LETTER H", direction="bn", linebreak="cm", unicodeslot=0xE0048, }, [0xE0049]={ category="cf", description="TAG LATIN CAPITAL LETTER I", direction="bn", linebreak="cm", unicodeslot=0xE0049, }, [0xE004A]={ category="cf", description="TAG LATIN CAPITAL LETTER J", direction="bn", linebreak="cm", unicodeslot=0xE004A, }, [0xE004B]={ category="cf", description="TAG LATIN CAPITAL LETTER K", direction="bn", linebreak="cm", unicodeslot=0xE004B, }, [0xE004C]={ category="cf", description="TAG LATIN CAPITAL LETTER L", direction="bn", linebreak="cm", unicodeslot=0xE004C, }, [0xE004D]={ category="cf", description="TAG LATIN CAPITAL LETTER M", direction="bn", linebreak="cm", unicodeslot=0xE004D, }, [0xE004E]={ category="cf", description="TAG LATIN CAPITAL LETTER N", direction="bn", linebreak="cm", unicodeslot=0xE004E, }, [0xE004F]={ category="cf", description="TAG LATIN CAPITAL LETTER O", direction="bn", linebreak="cm", unicodeslot=0xE004F, }, [0xE0050]={ category="cf", description="TAG LATIN CAPITAL LETTER P", direction="bn", linebreak="cm", unicodeslot=0xE0050, }, [0xE0051]={ category="cf", description="TAG LATIN CAPITAL LETTER Q", direction="bn", linebreak="cm", unicodeslot=0xE0051, }, [0xE0052]={ category="cf", description="TAG LATIN CAPITAL LETTER R", direction="bn", linebreak="cm", unicodeslot=0xE0052, }, [0xE0053]={ category="cf", description="TAG LATIN CAPITAL LETTER S", direction="bn", linebreak="cm", unicodeslot=0xE0053, }, [0xE0054]={ category="cf", description="TAG LATIN CAPITAL LETTER T", direction="bn", linebreak="cm", unicodeslot=0xE0054, }, [0xE0055]={ category="cf", description="TAG LATIN CAPITAL LETTER U", direction="bn", linebreak="cm", unicodeslot=0xE0055, }, [0xE0056]={ category="cf", description="TAG LATIN CAPITAL LETTER V", direction="bn", linebreak="cm", unicodeslot=0xE0056, }, [0xE0057]={ category="cf", description="TAG LATIN CAPITAL LETTER W", direction="bn", linebreak="cm", unicodeslot=0xE0057, }, [0xE0058]={ category="cf", description="TAG LATIN CAPITAL LETTER X", direction="bn", linebreak="cm", unicodeslot=0xE0058, }, [0xE0059]={ category="cf", description="TAG LATIN CAPITAL LETTER Y", direction="bn", linebreak="cm", unicodeslot=0xE0059, }, [0xE005A]={ category="cf", description="TAG LATIN CAPITAL LETTER Z", direction="bn", linebreak="cm", unicodeslot=0xE005A, }, [0xE005B]={ category="cf", description="TAG LEFT SQUARE BRACKET", direction="bn", linebreak="cm", unicodeslot=0xE005B, }, [0xE005C]={ category="cf", description="TAG REVERSE SOLIDUS", direction="bn", linebreak="cm", unicodeslot=0xE005C, }, [0xE005D]={ category="cf", description="TAG RIGHT SQUARE BRACKET", direction="bn", linebreak="cm", unicodeslot=0xE005D, }, [0xE005E]={ category="cf", description="TAG CIRCUMFLEX ACCENT", direction="bn", linebreak="cm", unicodeslot=0xE005E, }, [0xE005F]={ category="cf", description="TAG LOW LINE", direction="bn", linebreak="cm", unicodeslot=0xE005F, }, [0xE0060]={ category="cf", description="TAG GRAVE ACCENT", direction="bn", linebreak="cm", unicodeslot=0xE0060, }, [0xE0061]={ category="cf", description="TAG LATIN SMALL LETTER A", direction="bn", linebreak="cm", unicodeslot=0xE0061, }, [0xE0062]={ category="cf", description="TAG LATIN SMALL LETTER B", direction="bn", linebreak="cm", unicodeslot=0xE0062, }, [0xE0063]={ category="cf", description="TAG LATIN SMALL LETTER C", direction="bn", linebreak="cm", unicodeslot=0xE0063, }, [0xE0064]={ category="cf", description="TAG LATIN SMALL LETTER D", direction="bn", linebreak="cm", unicodeslot=0xE0064, }, [0xE0065]={ category="cf", description="TAG LATIN SMALL LETTER E", direction="bn", linebreak="cm", unicodeslot=0xE0065, }, [0xE0066]={ category="cf", description="TAG LATIN SMALL LETTER F", direction="bn", linebreak="cm", unicodeslot=0xE0066, }, [0xE0067]={ category="cf", description="TAG LATIN SMALL LETTER G", direction="bn", linebreak="cm", unicodeslot=0xE0067, }, [0xE0068]={ category="cf", description="TAG LATIN SMALL LETTER H", direction="bn", linebreak="cm", unicodeslot=0xE0068, }, [0xE0069]={ category="cf", description="TAG LATIN SMALL LETTER I", direction="bn", linebreak="cm", unicodeslot=0xE0069, }, [0xE006A]={ category="cf", description="TAG LATIN SMALL LETTER J", direction="bn", linebreak="cm", unicodeslot=0xE006A, }, [0xE006B]={ category="cf", description="TAG LATIN SMALL LETTER K", direction="bn", linebreak="cm", unicodeslot=0xE006B, }, [0xE006C]={ category="cf", description="TAG LATIN SMALL LETTER L", direction="bn", linebreak="cm", unicodeslot=0xE006C, }, [0xE006D]={ category="cf", description="TAG LATIN SMALL LETTER M", direction="bn", linebreak="cm", unicodeslot=0xE006D, }, [0xE006E]={ category="cf", description="TAG LATIN SMALL LETTER N", direction="bn", linebreak="cm", unicodeslot=0xE006E, }, [0xE006F]={ category="cf", description="TAG LATIN SMALL LETTER O", direction="bn", linebreak="cm", unicodeslot=0xE006F, }, [0xE0070]={ category="cf", description="TAG LATIN SMALL LETTER P", direction="bn", linebreak="cm", unicodeslot=0xE0070, }, [0xE0071]={ category="cf", description="TAG LATIN SMALL LETTER Q", direction="bn", linebreak="cm", unicodeslot=0xE0071, }, [0xE0072]={ category="cf", description="TAG LATIN SMALL LETTER R", direction="bn", linebreak="cm", unicodeslot=0xE0072, }, [0xE0073]={ category="cf", description="TAG LATIN SMALL LETTER S", direction="bn", linebreak="cm", unicodeslot=0xE0073, }, [0xE0074]={ category="cf", description="TAG LATIN SMALL LETTER T", direction="bn", linebreak="cm", unicodeslot=0xE0074, }, [0xE0075]={ category="cf", description="TAG LATIN SMALL LETTER U", direction="bn", linebreak="cm", unicodeslot=0xE0075, }, [0xE0076]={ category="cf", description="TAG LATIN SMALL LETTER V", direction="bn", linebreak="cm", unicodeslot=0xE0076, }, [0xE0077]={ category="cf", description="TAG LATIN SMALL LETTER W", direction="bn", linebreak="cm", unicodeslot=0xE0077, }, [0xE0078]={ category="cf", description="TAG LATIN SMALL LETTER X", direction="bn", linebreak="cm", unicodeslot=0xE0078, }, [0xE0079]={ category="cf", description="TAG LATIN SMALL LETTER Y", direction="bn", linebreak="cm", unicodeslot=0xE0079, }, [0xE007A]={ category="cf", description="TAG LATIN SMALL LETTER Z", direction="bn", linebreak="cm", unicodeslot=0xE007A, }, [0xE007B]={ category="cf", description="TAG LEFT CURLY BRACKET", direction="bn", linebreak="cm", unicodeslot=0xE007B, }, [0xE007C]={ category="cf", description="TAG VERTICAL LINE", direction="bn", linebreak="cm", unicodeslot=0xE007C, }, [0xE007D]={ category="cf", description="TAG RIGHT CURLY BRACKET", direction="bn", linebreak="cm", unicodeslot=0xE007D, }, [0xE007E]={ category="cf", description="TAG TILDE", direction="bn", linebreak="cm", unicodeslot=0xE007E, }, [0xE007F]={ category="cf", description="CANCEL TAG", direction="bn", linebreak="cm", unicodeslot=0xE007F, }, [0xE0100]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0011", direction="nsm", linebreak="cm", unicodeslot=0xE0100, }, [0xE0101]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0012", direction="nsm", linebreak="cm", unicodeslot=0xE0101, }, [0xE0102]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0013", direction="nsm", linebreak="cm", unicodeslot=0xE0102, }, [0xE0103]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0014", direction="nsm", linebreak="cm", unicodeslot=0xE0103, }, [0xE0104]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0015", direction="nsm", linebreak="cm", unicodeslot=0xE0104, }, [0xE0105]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0016", direction="nsm", linebreak="cm", unicodeslot=0xE0105, }, [0xE0106]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0017", direction="nsm", linebreak="cm", unicodeslot=0xE0106, }, [0xE0107]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0018", direction="nsm", linebreak="cm", unicodeslot=0xE0107, }, [0xE0108]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0019", direction="nsm", linebreak="cm", unicodeslot=0xE0108, }, [0xE0109]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x001A", direction="nsm", linebreak="cm", unicodeslot=0xE0109, }, [0xE010A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x001B", direction="nsm", linebreak="cm", unicodeslot=0xE010A, }, [0xE010B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x001C", direction="nsm", linebreak="cm", unicodeslot=0xE010B, }, [0xE010C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x001D", direction="nsm", linebreak="cm", unicodeslot=0xE010C, }, [0xE010D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x001E", direction="nsm", linebreak="cm", unicodeslot=0xE010D, }, [0xE010E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x001F", direction="nsm", linebreak="cm", unicodeslot=0xE010E, }, [0xE010F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0020", direction="nsm", linebreak="cm", unicodeslot=0xE010F, }, [0xE0110]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0021", direction="nsm", linebreak="cm", unicodeslot=0xE0110, }, [0xE0111]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0022", direction="nsm", linebreak="cm", unicodeslot=0xE0111, }, [0xE0112]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0023", direction="nsm", linebreak="cm", unicodeslot=0xE0112, }, [0xE0113]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0024", direction="nsm", linebreak="cm", unicodeslot=0xE0113, }, [0xE0114]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0025", direction="nsm", linebreak="cm", unicodeslot=0xE0114, }, [0xE0115]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0026", direction="nsm", linebreak="cm", unicodeslot=0xE0115, }, [0xE0116]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0027", direction="nsm", linebreak="cm", unicodeslot=0xE0116, }, [0xE0117]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0028", direction="nsm", linebreak="cm", unicodeslot=0xE0117, }, [0xE0118]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0029", direction="nsm", linebreak="cm", unicodeslot=0xE0118, }, [0xE0119]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x002A", direction="nsm", linebreak="cm", unicodeslot=0xE0119, }, [0xE011A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x002B", direction="nsm", linebreak="cm", unicodeslot=0xE011A, }, [0xE011B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x002C", direction="nsm", linebreak="cm", unicodeslot=0xE011B, }, [0xE011C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x002D", direction="nsm", linebreak="cm", unicodeslot=0xE011C, }, [0xE011D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x002E", direction="nsm", linebreak="cm", unicodeslot=0xE011D, }, [0xE011E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x002F", direction="nsm", linebreak="cm", unicodeslot=0xE011E, }, [0xE011F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0030", direction="nsm", linebreak="cm", unicodeslot=0xE011F, }, [0xE0120]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0031", direction="nsm", linebreak="cm", unicodeslot=0xE0120, }, [0xE0121]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0032", direction="nsm", linebreak="cm", unicodeslot=0xE0121, }, [0xE0122]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0033", direction="nsm", linebreak="cm", unicodeslot=0xE0122, }, [0xE0123]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0034", direction="nsm", linebreak="cm", unicodeslot=0xE0123, }, [0xE0124]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0035", direction="nsm", linebreak="cm", unicodeslot=0xE0124, }, [0xE0125]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0036", direction="nsm", linebreak="cm", unicodeslot=0xE0125, }, [0xE0126]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0037", direction="nsm", linebreak="cm", unicodeslot=0xE0126, }, [0xE0127]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0038", direction="nsm", linebreak="cm", unicodeslot=0xE0127, }, [0xE0128]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0039", direction="nsm", linebreak="cm", unicodeslot=0xE0128, }, [0xE0129]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x003A", direction="nsm", linebreak="cm", unicodeslot=0xE0129, }, [0xE012A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x003B", direction="nsm", linebreak="cm", unicodeslot=0xE012A, }, [0xE012B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x003C", direction="nsm", linebreak="cm", unicodeslot=0xE012B, }, [0xE012C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x003D", direction="nsm", linebreak="cm", unicodeslot=0xE012C, }, [0xE012D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x003E", direction="nsm", linebreak="cm", unicodeslot=0xE012D, }, [0xE012E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x003F", direction="nsm", linebreak="cm", unicodeslot=0xE012E, }, [0xE012F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0040", direction="nsm", linebreak="cm", unicodeslot=0xE012F, }, [0xE0130]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0041", direction="nsm", linebreak="cm", unicodeslot=0xE0130, }, [0xE0131]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0042", direction="nsm", linebreak="cm", unicodeslot=0xE0131, }, [0xE0132]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0043", direction="nsm", linebreak="cm", unicodeslot=0xE0132, }, [0xE0133]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0044", direction="nsm", linebreak="cm", unicodeslot=0xE0133, }, [0xE0134]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0045", direction="nsm", linebreak="cm", unicodeslot=0xE0134, }, [0xE0135]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0046", direction="nsm", linebreak="cm", unicodeslot=0xE0135, }, [0xE0136]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0047", direction="nsm", linebreak="cm", unicodeslot=0xE0136, }, [0xE0137]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0048", direction="nsm", linebreak="cm", unicodeslot=0xE0137, }, [0xE0138]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0049", direction="nsm", linebreak="cm", unicodeslot=0xE0138, }, [0xE0139]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x004A", direction="nsm", linebreak="cm", unicodeslot=0xE0139, }, [0xE013A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x004B", direction="nsm", linebreak="cm", unicodeslot=0xE013A, }, [0xE013B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x004C", direction="nsm", linebreak="cm", unicodeslot=0xE013B, }, [0xE013C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x004D", direction="nsm", linebreak="cm", unicodeslot=0xE013C, }, [0xE013D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x004E", direction="nsm", linebreak="cm", unicodeslot=0xE013D, }, [0xE013E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x004F", direction="nsm", linebreak="cm", unicodeslot=0xE013E, }, [0xE013F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0050", direction="nsm", linebreak="cm", unicodeslot=0xE013F, }, [0xE0140]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0051", direction="nsm", linebreak="cm", unicodeslot=0xE0140, }, [0xE0141]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0052", direction="nsm", linebreak="cm", unicodeslot=0xE0141, }, [0xE0142]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0053", direction="nsm", linebreak="cm", unicodeslot=0xE0142, }, [0xE0143]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0054", direction="nsm", linebreak="cm", unicodeslot=0xE0143, }, [0xE0144]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0055", direction="nsm", linebreak="cm", unicodeslot=0xE0144, }, [0xE0145]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0056", direction="nsm", linebreak="cm", unicodeslot=0xE0145, }, [0xE0146]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0057", direction="nsm", linebreak="cm", unicodeslot=0xE0146, }, [0xE0147]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0058", direction="nsm", linebreak="cm", unicodeslot=0xE0147, }, [0xE0148]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0059", direction="nsm", linebreak="cm", unicodeslot=0xE0148, }, [0xE0149]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x005A", direction="nsm", linebreak="cm", unicodeslot=0xE0149, }, [0xE014A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x005B", direction="nsm", linebreak="cm", unicodeslot=0xE014A, }, [0xE014B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x005C", direction="nsm", linebreak="cm", unicodeslot=0xE014B, }, [0xE014C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x005D", direction="nsm", linebreak="cm", unicodeslot=0xE014C, }, [0xE014D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x005E", direction="nsm", linebreak="cm", unicodeslot=0xE014D, }, [0xE014E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x005F", direction="nsm", linebreak="cm", unicodeslot=0xE014E, }, [0xE014F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0060", direction="nsm", linebreak="cm", unicodeslot=0xE014F, }, [0xE0150]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0061", direction="nsm", linebreak="cm", unicodeslot=0xE0150, }, [0xE0151]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0062", direction="nsm", linebreak="cm", unicodeslot=0xE0151, }, [0xE0152]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0063", direction="nsm", linebreak="cm", unicodeslot=0xE0152, }, [0xE0153]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0064", direction="nsm", linebreak="cm", unicodeslot=0xE0153, }, [0xE0154]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0065", direction="nsm", linebreak="cm", unicodeslot=0xE0154, }, [0xE0155]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0066", direction="nsm", linebreak="cm", unicodeslot=0xE0155, }, [0xE0156]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0067", direction="nsm", linebreak="cm", unicodeslot=0xE0156, }, [0xE0157]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0068", direction="nsm", linebreak="cm", unicodeslot=0xE0157, }, [0xE0158]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0069", direction="nsm", linebreak="cm", unicodeslot=0xE0158, }, [0xE0159]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x006A", direction="nsm", linebreak="cm", unicodeslot=0xE0159, }, [0xE015A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x006B", direction="nsm", linebreak="cm", unicodeslot=0xE015A, }, [0xE015B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x006C", direction="nsm", linebreak="cm", unicodeslot=0xE015B, }, [0xE015C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x006D", direction="nsm", linebreak="cm", unicodeslot=0xE015C, }, [0xE015D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x006E", direction="nsm", linebreak="cm", unicodeslot=0xE015D, }, [0xE015E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x006F", direction="nsm", linebreak="cm", unicodeslot=0xE015E, }, [0xE015F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0070", direction="nsm", linebreak="cm", unicodeslot=0xE015F, }, [0xE0160]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0071", direction="nsm", linebreak="cm", unicodeslot=0xE0160, }, [0xE0161]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0072", direction="nsm", linebreak="cm", unicodeslot=0xE0161, }, [0xE0162]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0073", direction="nsm", linebreak="cm", unicodeslot=0xE0162, }, [0xE0163]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0074", direction="nsm", linebreak="cm", unicodeslot=0xE0163, }, [0xE0164]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0075", direction="nsm", linebreak="cm", unicodeslot=0xE0164, }, [0xE0165]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0076", direction="nsm", linebreak="cm", unicodeslot=0xE0165, }, [0xE0166]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0077", direction="nsm", linebreak="cm", unicodeslot=0xE0166, }, [0xE0167]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0078", direction="nsm", linebreak="cm", unicodeslot=0xE0167, }, [0xE0168]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0079", direction="nsm", linebreak="cm", unicodeslot=0xE0168, }, [0xE0169]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x007A", direction="nsm", linebreak="cm", unicodeslot=0xE0169, }, [0xE016A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x007B", direction="nsm", linebreak="cm", unicodeslot=0xE016A, }, [0xE016B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x007C", direction="nsm", linebreak="cm", unicodeslot=0xE016B, }, [0xE016C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x007D", direction="nsm", linebreak="cm", unicodeslot=0xE016C, }, [0xE016D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x007E", direction="nsm", linebreak="cm", unicodeslot=0xE016D, }, [0xE016E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x007F", direction="nsm", linebreak="cm", unicodeslot=0xE016E, }, [0xE016F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0080", direction="nsm", linebreak="cm", unicodeslot=0xE016F, }, [0xE0170]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0081", direction="nsm", linebreak="cm", unicodeslot=0xE0170, }, [0xE0171]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0082", direction="nsm", linebreak="cm", unicodeslot=0xE0171, }, [0xE0172]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0083", direction="nsm", linebreak="cm", unicodeslot=0xE0172, }, [0xE0173]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0084", direction="nsm", linebreak="cm", unicodeslot=0xE0173, }, [0xE0174]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0085", direction="nsm", linebreak="cm", unicodeslot=0xE0174, }, [0xE0175]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0086", direction="nsm", linebreak="cm", unicodeslot=0xE0175, }, [0xE0176]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0087", direction="nsm", linebreak="cm", unicodeslot=0xE0176, }, [0xE0177]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0088", direction="nsm", linebreak="cm", unicodeslot=0xE0177, }, [0xE0178]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0089", direction="nsm", linebreak="cm", unicodeslot=0xE0178, }, [0xE0179]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x008A", direction="nsm", linebreak="cm", unicodeslot=0xE0179, }, [0xE017A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x008B", direction="nsm", linebreak="cm", unicodeslot=0xE017A, }, [0xE017B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x008C", direction="nsm", linebreak="cm", unicodeslot=0xE017B, }, [0xE017C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x008D", direction="nsm", linebreak="cm", unicodeslot=0xE017C, }, [0xE017D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x008E", direction="nsm", linebreak="cm", unicodeslot=0xE017D, }, [0xE017E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x008F", direction="nsm", linebreak="cm", unicodeslot=0xE017E, }, [0xE017F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0090", direction="nsm", linebreak="cm", unicodeslot=0xE017F, }, [0xE0180]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0091", direction="nsm", linebreak="cm", unicodeslot=0xE0180, }, [0xE0181]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0092", direction="nsm", linebreak="cm", unicodeslot=0xE0181, }, [0xE0182]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0093", direction="nsm", linebreak="cm", unicodeslot=0xE0182, }, [0xE0183]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0094", direction="nsm", linebreak="cm", unicodeslot=0xE0183, }, [0xE0184]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0095", direction="nsm", linebreak="cm", unicodeslot=0xE0184, }, [0xE0185]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0096", direction="nsm", linebreak="cm", unicodeslot=0xE0185, }, [0xE0186]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0097", direction="nsm", linebreak="cm", unicodeslot=0xE0186, }, [0xE0187]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0098", direction="nsm", linebreak="cm", unicodeslot=0xE0187, }, [0xE0188]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0099", direction="nsm", linebreak="cm", unicodeslot=0xE0188, }, [0xE0189]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x009A", direction="nsm", linebreak="cm", unicodeslot=0xE0189, }, [0xE018A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x009B", direction="nsm", linebreak="cm", unicodeslot=0xE018A, }, [0xE018B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x009C", direction="nsm", linebreak="cm", unicodeslot=0xE018B, }, [0xE018C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x009D", direction="nsm", linebreak="cm", unicodeslot=0xE018C, }, [0xE018D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x009E", direction="nsm", linebreak="cm", unicodeslot=0xE018D, }, [0xE018E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x009F", direction="nsm", linebreak="cm", unicodeslot=0xE018E, }, [0xE018F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A0", direction="nsm", linebreak="cm", unicodeslot=0xE018F, }, [0xE0190]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A1", direction="nsm", linebreak="cm", unicodeslot=0xE0190, }, [0xE0191]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A2", direction="nsm", linebreak="cm", unicodeslot=0xE0191, }, [0xE0192]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A3", direction="nsm", linebreak="cm", unicodeslot=0xE0192, }, [0xE0193]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A4", direction="nsm", linebreak="cm", unicodeslot=0xE0193, }, [0xE0194]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A5", direction="nsm", linebreak="cm", unicodeslot=0xE0194, }, [0xE0195]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A6", direction="nsm", linebreak="cm", unicodeslot=0xE0195, }, [0xE0196]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A7", direction="nsm", linebreak="cm", unicodeslot=0xE0196, }, [0xE0197]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A8", direction="nsm", linebreak="cm", unicodeslot=0xE0197, }, [0xE0198]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00A9", direction="nsm", linebreak="cm", unicodeslot=0xE0198, }, [0xE0199]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00AA", direction="nsm", linebreak="cm", unicodeslot=0xE0199, }, [0xE019A]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00AB", direction="nsm", linebreak="cm", unicodeslot=0xE019A, }, [0xE019B]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00AC", direction="nsm", linebreak="cm", unicodeslot=0xE019B, }, [0xE019C]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00AD", direction="nsm", linebreak="cm", unicodeslot=0xE019C, }, [0xE019D]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00AE", direction="nsm", linebreak="cm", unicodeslot=0xE019D, }, [0xE019E]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00AF", direction="nsm", linebreak="cm", unicodeslot=0xE019E, }, [0xE019F]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B0", direction="nsm", linebreak="cm", unicodeslot=0xE019F, }, [0xE01A0]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B1", direction="nsm", linebreak="cm", unicodeslot=0xE01A0, }, [0xE01A1]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B2", direction="nsm", linebreak="cm", unicodeslot=0xE01A1, }, [0xE01A2]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B3", direction="nsm", linebreak="cm", unicodeslot=0xE01A2, }, [0xE01A3]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B4", direction="nsm", linebreak="cm", unicodeslot=0xE01A3, }, [0xE01A4]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B5", direction="nsm", linebreak="cm", unicodeslot=0xE01A4, }, [0xE01A5]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B6", direction="nsm", linebreak="cm", unicodeslot=0xE01A5, }, [0xE01A6]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B7", direction="nsm", linebreak="cm", unicodeslot=0xE01A6, }, [0xE01A7]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B8", direction="nsm", linebreak="cm", unicodeslot=0xE01A7, }, [0xE01A8]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00B9", direction="nsm", linebreak="cm", unicodeslot=0xE01A8, }, [0xE01A9]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00BA", direction="nsm", linebreak="cm", unicodeslot=0xE01A9, }, [0xE01AA]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00BB", direction="nsm", linebreak="cm", unicodeslot=0xE01AA, }, [0xE01AB]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00BC", direction="nsm", linebreak="cm", unicodeslot=0xE01AB, }, [0xE01AC]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00BD", direction="nsm", linebreak="cm", unicodeslot=0xE01AC, }, [0xE01AD]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00BE", direction="nsm", linebreak="cm", unicodeslot=0xE01AD, }, [0xE01AE]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00BF", direction="nsm", linebreak="cm", unicodeslot=0xE01AE, }, [0xE01AF]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C0", direction="nsm", linebreak="cm", unicodeslot=0xE01AF, }, [0xE01B0]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C1", direction="nsm", linebreak="cm", unicodeslot=0xE01B0, }, [0xE01B1]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C2", direction="nsm", linebreak="cm", unicodeslot=0xE01B1, }, [0xE01B2]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C3", direction="nsm", linebreak="cm", unicodeslot=0xE01B2, }, [0xE01B3]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C4", direction="nsm", linebreak="cm", unicodeslot=0xE01B3, }, [0xE01B4]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C5", direction="nsm", linebreak="cm", unicodeslot=0xE01B4, }, [0xE01B5]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C6", direction="nsm", linebreak="cm", unicodeslot=0xE01B5, }, [0xE01B6]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C7", direction="nsm", linebreak="cm", unicodeslot=0xE01B6, }, [0xE01B7]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C8", direction="nsm", linebreak="cm", unicodeslot=0xE01B7, }, [0xE01B8]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00C9", direction="nsm", linebreak="cm", unicodeslot=0xE01B8, }, [0xE01B9]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00CA", direction="nsm", linebreak="cm", unicodeslot=0xE01B9, }, [0xE01BA]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00CB", direction="nsm", linebreak="cm", unicodeslot=0xE01BA, }, [0xE01BB]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00CC", direction="nsm", linebreak="cm", unicodeslot=0xE01BB, }, [0xE01BC]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00CD", direction="nsm", linebreak="cm", unicodeslot=0xE01BC, }, [0xE01BD]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00CE", direction="nsm", linebreak="cm", unicodeslot=0xE01BD, }, [0xE01BE]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00CF", direction="nsm", linebreak="cm", unicodeslot=0xE01BE, }, [0xE01BF]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D0", direction="nsm", linebreak="cm", unicodeslot=0xE01BF, }, [0xE01C0]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D1", direction="nsm", linebreak="cm", unicodeslot=0xE01C0, }, [0xE01C1]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D2", direction="nsm", linebreak="cm", unicodeslot=0xE01C1, }, [0xE01C2]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D3", direction="nsm", linebreak="cm", unicodeslot=0xE01C2, }, [0xE01C3]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D4", direction="nsm", linebreak="cm", unicodeslot=0xE01C3, }, [0xE01C4]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D5", direction="nsm", linebreak="cm", unicodeslot=0xE01C4, }, [0xE01C5]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D6", direction="nsm", linebreak="cm", unicodeslot=0xE01C5, }, [0xE01C6]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D7", direction="nsm", linebreak="cm", unicodeslot=0xE01C6, }, [0xE01C7]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D8", direction="nsm", linebreak="cm", unicodeslot=0xE01C7, }, [0xE01C8]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00D9", direction="nsm", linebreak="cm", unicodeslot=0xE01C8, }, [0xE01C9]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00DA", direction="nsm", linebreak="cm", unicodeslot=0xE01C9, }, [0xE01CA]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00DB", direction="nsm", linebreak="cm", unicodeslot=0xE01CA, }, [0xE01CB]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00DC", direction="nsm", linebreak="cm", unicodeslot=0xE01CB, }, [0xE01CC]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00DD", direction="nsm", linebreak="cm", unicodeslot=0xE01CC, }, [0xE01CD]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00DE", direction="nsm", linebreak="cm", unicodeslot=0xE01CD, }, [0xE01CE]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00DF", direction="nsm", linebreak="cm", unicodeslot=0xE01CE, }, [0xE01CF]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E0", direction="nsm", linebreak="cm", unicodeslot=0xE01CF, }, [0xE01D0]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E1", direction="nsm", linebreak="cm", unicodeslot=0xE01D0, }, [0xE01D1]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E2", direction="nsm", linebreak="cm", unicodeslot=0xE01D1, }, [0xE01D2]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E3", direction="nsm", linebreak="cm", unicodeslot=0xE01D2, }, [0xE01D3]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E4", direction="nsm", linebreak="cm", unicodeslot=0xE01D3, }, [0xE01D4]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E5", direction="nsm", linebreak="cm", unicodeslot=0xE01D4, }, [0xE01D5]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E6", direction="nsm", linebreak="cm", unicodeslot=0xE01D5, }, [0xE01D6]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E7", direction="nsm", linebreak="cm", unicodeslot=0xE01D6, }, [0xE01D7]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E8", direction="nsm", linebreak="cm", unicodeslot=0xE01D7, }, [0xE01D8]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00E9", direction="nsm", linebreak="cm", unicodeslot=0xE01D8, }, [0xE01D9]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00EA", direction="nsm", linebreak="cm", unicodeslot=0xE01D9, }, [0xE01DA]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00EB", direction="nsm", linebreak="cm", unicodeslot=0xE01DA, }, [0xE01DB]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00EC", direction="nsm", linebreak="cm", unicodeslot=0xE01DB, }, [0xE01DC]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00ED", direction="nsm", linebreak="cm", unicodeslot=0xE01DC, }, [0xE01DD]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00EE", direction="nsm", linebreak="cm", unicodeslot=0xE01DD, }, [0xE01DE]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00EF", direction="nsm", linebreak="cm", unicodeslot=0xE01DE, }, [0xE01DF]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F0", direction="nsm", linebreak="cm", unicodeslot=0xE01DF, }, [0xE01E0]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F1", direction="nsm", linebreak="cm", unicodeslot=0xE01E0, }, [0xE01E1]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F2", direction="nsm", linebreak="cm", unicodeslot=0xE01E1, }, [0xE01E2]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F3", direction="nsm", linebreak="cm", unicodeslot=0xE01E2, }, [0xE01E3]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F4", direction="nsm", linebreak="cm", unicodeslot=0xE01E3, }, [0xE01E4]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F5", direction="nsm", linebreak="cm", unicodeslot=0xE01E4, }, [0xE01E5]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F6", direction="nsm", linebreak="cm", unicodeslot=0xE01E5, }, [0xE01E6]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F7", direction="nsm", linebreak="cm", unicodeslot=0xE01E6, }, [0xE01E7]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F8", direction="nsm", linebreak="cm", unicodeslot=0xE01E7, }, [0xE01E8]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00F9", direction="nsm", linebreak="cm", unicodeslot=0xE01E8, }, [0xE01E9]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00FA", direction="nsm", linebreak="cm", unicodeslot=0xE01E9, }, [0xE01EA]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00FB", direction="nsm", linebreak="cm", unicodeslot=0xE01EA, }, [0xE01EB]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00FC", direction="nsm", linebreak="cm", unicodeslot=0xE01EB, }, [0xE01EC]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00FD", direction="nsm", linebreak="cm", unicodeslot=0xE01EC, }, [0xE01ED]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00FE", direction="nsm", linebreak="cm", unicodeslot=0xE01ED, }, [0xE01EE]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x00FF", direction="nsm", linebreak="cm", unicodeslot=0xE01EE, }, [0xE01EF]={ category="mn", cjkwd="a", description="VARIATION SELECTOR-0x0100", direction="nsm", linebreak="cm", unicodeslot=0xE01EF, }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fe.mkii0000644000175000017500000000622411754241457023421 0ustar norbertnorbert%D \module %D [ file=x-fe, %D version=2004.03.12, % based on earlier experiments %D title=\FOXET, %D subtitle=Simple Extensions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Extensions: fe:definecolor % menus % extra areas % protruding and hz % compound % title container % more float placements \unprotect % \XMLattributes{aural}, \defineXMLnested [fe:table-next] [id=, \XMLattributes{accessibility}, \XMLattributes{border-padding-background}, \XMLattributes{relative-position}, border-after-precedence=, border-before-precedence=, border-end-precedence=, border-start-precedence=, visibility=] {\bTABLEnext} {\eTABLEnext} % definitions \defineXMLcommand [fe:definecolor] [name=,r=,g=,b=,c=,m=,y=,k=,s=,p=,a=,t=] {\expanded{\definecolor[\XMLop{name}] [r=\XMLop r,g=\XMLop g,b=\XMLop b, c=\XMLop c,m=\XMLop m,y=\XMLop y,k=\XMLop k, s=\XMLop s,p=\XMLop p,a=\XMLop a,t=\XMLop t]}} \defineXMLcommand [fe:definefontsynonym] [name=,file=,encoding=] {\doifelsenothing{\XMLop{encoding}} {\expanded{\definefontsynonym[\XMLop{name}][\XMLop{file}][encoding=\XMLop{encoding}]}} {\expanded{\definefontsynonym[\XMLop{name}][\XMLop{file}]}}} %D Extensions: fe:include \defineXMLsingular [fe:include] [url=,n=1] {\doifelse{\XMLop{n}}{1} {\readfile{\XMLpar{fe:include}{url}{}}{}{}} {\dorecurse{\XMLop{n}}{\readfile{\XMLpar{fe:include}{url}{}}{}{}\endgraf}}} %D Extensions: fe:sample \defineXMLenvironment [fe:sample] [origin=unknown] {\removeunwantedspaces\ignorespaces} {\removeunwantedspaces} %D Extensions: fe: % \defineXMLenvironmentsave % [fe:loop] % [n=1] % {} % {\dorecurse{\XMLop{n}}{\XMLflush{fe:loop}}} \defineXMLargument [fe:loop] [n=1] {\dorecurse{\XMLop{n}}} %D Extensions: fe:compound \defineXMLsingular [fe:compound] [character=-] {\prewordbreak\XMLop{character}\prewordbreak} %D Extensions: fe:message \defineXMLargument [fe:message] [category=XML-FO] {\expanded{\writestatus{\XMLop{category}}}} %D Handy \defineXMLargument [fe:trace] [attribute=,option=] {\showXMLinh[\XMLop{attribute}]% \XMLval{fe:trace}{\XMLop{option}}{}} \mapXMLvalue {fe:trace} {font} {\hbox\bgroup\infofont[% \xFOfont/\xFOfontsize/\xFOfontsizeadjust/\xFOfontfamily/\xFOfontweight/\xFOfontstyle/\xFOfontvariant:\FOfontdefinition ]\egroup} %D Extensions: \startsetups fe:page:option:fit:start \startTEXpage[margin=page] \stopsetups \startsetups fe:page:option:fit:stop \stopTEXpage \stopsetups \useMPlibrary[pre] \mapXMLvalue {fe:tracing} {true} {\tracingFOtrue} \mapXMLvalue {fe:tracing} {false} {\tracingFOfalse} \mapXMLvalue {fe:testgrid} {true} {\setupbackgrounds[page][background=pagegrid]} \startsetups fe:setup \XMLval{fe:tracing} {\XMLop{fe:tracing}} {} \XMLval{fe:testgrid}{\XMLop{fe:testgrid}}{} \stopsetups %D Private (testing) \defineXMLcommand[fe:synchronizeoutput]{\synchronizeoutput} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-pln.mkiv0000644000175000017500000000740511754241457024372 0ustar norbertnorbert%D \module %D [ file=syst-pln, %D version=2001.11.16, % 1999.03.17, % an oldie: 1995.10.10 %D title=\CONTEXT\ System Macros, %D subtitle=Efficient \PLAIN\ \TEX\ loading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This module set a couple of variables to the plain \TEX\ %D values. Later they might be overloaded. There is not much %D difference between \MKII\ and \MKIV\ but at some point they %D might diverge. %D Build||in numeric variables. \adjdemerits = 10000 \binoppenalty = 700 \brokenpenalty = 100 \clubpenalty = 150 %day = 0 \defaulthyphenchar = `\- \defaultskewchar = -1 \delimiterfactor = 901 \displaywidowpenalty = 50 \doublehyphendemerits = 10000 %endlinechar = `\^^M \errorcontextlines = 5 %escapechar = `\\ \exhyphenpenalty = 50 %fam = 0 \finalhyphendemerits = 5000 %floatingpenalty = 0 %globaldefs = 0 \hangafter = 1 % automatically set to 1 (no zero assignment) \hbadness = 1000 %holdinginserts = 0 \hyphenpenalty = 50 %interlinepenalty = 0 %language = 0 \lefthyphenmin = 2 \linepenalty = 10 %looseness = 0 %mag = 1000 %maxdeadcycles = 25 %month = 0 %newlinechar = -1 % commented i.e. no plain value %outputpenalty = 0 %pausing = 0 %postdisplaypenalty = 0 \predisplaypenalty = 10000 \pretolerance = 100 \relpenalty = 500 \righthyphenmin = 3 \showboxbreadth = 5 \showboxdepth = 3 %time = 0 \tolerance = 200 %tracingcommands = 0 \tracinglostchars = 1 %tracingmacros = 0 %tracingonline = 0 %tracingoutput = 0 %tracingpages = 0 %tracingparagraphs = 0 %tracingrestores = 0 %tracingstats = 0 \uchyph = 1 \vbadness = 1000 \widowpenalty = 150 %year = 0 %D Build in dimension variables. \abovedisplayshortskip = 0pt plus 3pt \abovedisplayskip = 12pt plus 3pt minus 9pt %baselineskip = 0pt \belowdisplayshortskip = 7pt plus 3pt minus 4pt \belowdisplayskip = 12pt plus 3pt minus 9pt \boxmaxdepth = \maxdimen \delimitershortfall = 5pt %displayindent = 0pt %displaywidth = 0pt %hangindent = 0pt \hfuzz = 0.1pt %hoffset = 0pt \hsize = 6.5in %leftskip = 0pt %lineskip = 0pt %lineskiplimit = 0pt %mathsurround = 0pt \maxdepth = 4pt \medmuskip = 4mu plus 2mu minus 4mu \nulldelimiterspace = 1.2pt \overfullrule = 5pt \parfillskip = 0pt plus 1fil \parindent = 20pt \parskip = 0pt plus 1pt %predisplaysize = 0pt %rightskip = 0pt \scriptspace = 0.5pt %spaceskip = 0pt \splitmaxdepth = \maxdimen \splittopskip = 10pt %tabskip = 0pt \thickmuskip = 5mu plus 5mu \thinmuskip = 3mu \topskip = 10pt \vfuzz = 0.1pt %voffset = 0pt \vsize = 8.9in %xspaceskip = 0pt \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-counters.lua0000644000175000017500000000277312161703335026454 0ustar norbertnorbertif not modules then modules = { } end modules ['s-languages-counters'] = { version = 1.001, comment = "companion to s-languages-counters.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.languages = moduledata.languages or { } moduledata.languages.counters = moduledata.languages.counters or { } local data = converters.verbose.data function moduledata.languages.counters.showverbose(specification) specification = interfaces.checkedspecification(specification) local list = utilities.parsers.settings_to_array(specification.language or "") if #list == 0then return end local used = { } local words = { } for i=1,#list do local ai = list[i] local di = data[ai] if di and di.words then used[#used+1] = ai table.merge(words,di.words) end end context.starttabulate { string.rep("|l",#used) .. "|r|" } context.HL() context.NC() for i=1,#used do context.bold(used[i]) context.NC() end context.bold("number") context.NC() context.NR() context.HL() for k, v in table.sortedhash(words) do context.NC() for i=1,#used do context(data[used[i]].words[k] or "") context.NC() end context(k) context.NC() context.NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-tag.lua0000644000175000017500000003164412130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-tag'] = { version = 1.001, comment = "companion to strc-tag.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is rather experimental code. local insert, remove, unpack, concat = table.insert, table.remove, table.unpack, table.concat local gsub, find, topattern, format = string.gsub, string.find, string.topattern, string.format local lpegmatch = lpeg.match local texattribute = tex.attribute local allocate = utilities.storage.allocate local settings_to_hash = utilities.parsers.settings_to_hash local trace_tags = false trackers.register("structures.tags", function(v) trace_tags = v end) local report_tags = logs.reporter("structure","tags") local attributes, structures = attributes, structures local a_tagged = attributes.private('tagged') local unsetvalue = attributes.unsetvalue local codeinjections = backends.codeinjections local taglist = allocate() local properties = allocate() local labels = allocate() local stack = { } local chain = { } local ids = { } local enabled = false local tagdata = { } -- used in export local tagmetadata = { } -- used in export local tags = structures.tags tags.taglist = taglist -- can best be hidden tags.labels = labels tags.data = tagdata tags.metadata = tagmetadata local properties = allocate { document = { pdf = "Div", nature = "display" }, division = { pdf = "Div", nature = "display" }, paragraph = { pdf = "P", nature = "mixed" }, p = { pdf = "P", nature = "mixed" }, construct = { pdf = "Span", nature = "inline" }, highlight = { pdf = "Span", nature = "inline" }, section = { pdf = "Sect", nature = "display" }, sectiontitle = { pdf = "H", nature = "mixed" }, sectionnumber = { pdf = "H", nature = "mixed" }, sectioncontent = { pdf = "Div", nature = "display" }, itemgroup = { pdf = "L", nature = "display" }, item = { pdf = "Li", nature = "display" }, itemtag = { pdf = "Lbl", nature = "mixed" }, itemcontent = { pdf = "LBody", nature = "mixed" }, description = { pdf = "Div", nature = "display" }, descriptiontag = { pdf = "Div", nature = "mixed" }, descriptioncontent = { pdf = "Div", nature = "mixed" }, descriptionsymbol = { pdf = "Span", nature = "inline" }, -- note reference verbatimblock = { pdf = "Code", nature = "display" }, verbatimlines = { pdf = "Code", nature = "display" }, verbatimline = { pdf = "Code", nature = "mixed" }, verbatim = { pdf = "Code", nature = "inline" }, lines = { pdf = "Code", nature = "display" }, line = { pdf = "Code", nature = "mixed" }, synonym = { pdf = "Span", nature = "inline" }, sorting = { pdf = "Span", nature = "inline" }, register = { pdf = "Div", nature = "display" }, registersection = { pdf = "Div", nature = "display" }, registertag = { pdf = "Span", nature = "mixed" }, registerentries = { pdf = "Div", nature = "display" }, registerentry = { pdf = "Span", nature = "mixed" }, registersee = { pdf = "Span", nature = "mixed" }, registerpages = { pdf = "Span", nature = "mixed" }, registerpage = { pdf = "Span", nature = "inline" }, registerpagerange = { pdf = "Span", nature = "mixed" }, table = { pdf = "Table", nature = "display" }, tablerow = { pdf = "TR", nature = "display" }, tablecell = { pdf = "TD", nature = "mixed" }, tabulate = { pdf = "Table", nature = "display" }, tabulaterow = { pdf = "TR", nature = "display" }, tabulatecell = { pdf = "TD", nature = "mixed" }, list = { pdf = "TOC", nature = "display" }, listitem = { pdf = "TOCI", nature = "display" }, listtag = { pdf = "Lbl", nature = "mixed" }, listcontent = { pdf = "P", nature = "mixed" }, listdata = { pdf = "P", nature = "mixed" }, listpage = { pdf = "Reference", nature = "mixed" }, delimitedblock = { pdf = "BlockQuote", nature = "display" }, delimited = { pdf = "Quote", nature = "inline" }, subsentence = { pdf = "Span", nature = "inline" }, label = { pdf = "Span", nature = "mixed" }, number = { pdf = "Span", nature = "mixed" }, float = { pdf = "Div", nature = "display" }, -- Figure floatcaption = { pdf = "Caption", nature = "mixed" }, floatlabel = { pdf = "Span", nature = "inline" }, floatnumber = { pdf = "Span", nature = "inline" }, floattext = { pdf = "Span", nature = "mixed" }, floatcontent = { pdf = "P", nature = "mixed" }, image = { pdf = "P", nature = "mixed" }, mpgraphic = { pdf = "P", nature = "mixed" }, formulaset = { pdf = "Div", nature = "display" }, formula = { pdf = "Div", nature = "display" }, -- Formula formulacaption = { pdf = "Span", nature = "mixed" }, formulalabel = { pdf = "Span", nature = "mixed" }, formulanumber = { pdf = "Span", nature = "mixed" }, formulacontent = { pdf = "P", nature = "display" }, subformula = { pdf = "Div", nature = "display" }, link = { pdf = "Link", nature = "inline" }, margintextblock = { pdf = "Span", nature = "inline" }, margintext = { pdf = "Span", nature = "inline" }, math = { pdf = "Div", nature = "inline" }, -- no display mn = { pdf = "Span", nature = "mixed" }, mi = { pdf = "Span", nature = "mixed" }, mo = { pdf = "Span", nature = "mixed" }, ms = { pdf = "Span", nature = "mixed" }, mrow = { pdf = "Span", nature = "display" }, msubsup = { pdf = "Span", nature = "display" }, msub = { pdf = "Span", nature = "display" }, msup = { pdf = "Span", nature = "display" }, merror = { pdf = "Span", nature = "mixed" }, munderover = { pdf = "Span", nature = "display" }, munder = { pdf = "Span", nature = "display" }, mover = { pdf = "Span", nature = "display" }, mtext = { pdf = "Span", nature = "mixed" }, mfrac = { pdf = "Span", nature = "display" }, mroot = { pdf = "Span", nature = "display" }, msqrt = { pdf = "Span", nature = "display" }, mfenced = { pdf = "Span", nature = "display" }, maction = { pdf = "Span", nature = "display" }, mtable = { pdf = "Table", nature = "display" }, -- might change mtr = { pdf = "TR", nature = "display" }, -- might change mtd = { pdf = "TD", nature = "display" }, -- might change ignore = { pdf = "Span", nature = "mixed" }, metadata = { pdf = "Div", nature = "display" }, metavariable = { pdf = "Span", nature = "mixed" }, mid = { pdf = "Span", nature = "inline" }, sub = { pdf = "Span", nature = "inline" }, sup = { pdf = "Span", nature = "inline" }, subsup = { pdf = "Span", nature = "inline" }, combination = { pdf = "Span", nature = "display" }, combinationpair = { pdf = "Span", nature = "display" }, combinationcontent = { pdf = "Span", nature = "mixed" }, combinationcaption = { pdf = "Span", nature = "mixed" }, } function tags.detailedtag(tag,detail,attribute) if not attribute then attribute = texattribute[a_tagged] end if attribute >= 0 then local tl = taglist[attribute] if tl then local pattern if detail and detail ~= "" then pattern = "^" .. tag .. ":".. detail .. "%-" else pattern = "^" .. tag .. "%-" end for i=#tl,1,-1 do local tli = tl[i] if find(tli,pattern) then return tli end end end else -- enabled but not auto end return false -- handy as bogus index end tags.properties = properties local lasttags = { } local userdata = { } tags.userdata = userdata function tags.setproperty(tag,key,value) local p = properties[tag] if p then p[key] = value else properties[tag] = { [key] = value } end end function tags.registerdata(data) local fulltag = chain[nstack] if fulltag then tagdata[fulltag] = data end end local metadata function tags.registermetadata(data) local d = settings_to_hash(data) if metadata then table.merge(metadata,d) else metadata = d end end local nstack = 0 function tags.start(tag,specification) local label, detail, user if specification then label, detail, user = specification.label, specification.detail, specification.userdata end if not enabled then codeinjections.enabletags() enabled = true end -- --~ labels[tag] = label ~= "" and label or tag --~ local fulltag --~ if detail and detail ~= "" then --~ fulltag = tag .. ":" .. detail --~ else --~ fulltag = tag --~ end -- local fulltag = label ~= "" and label or tag labels[tag] = fulltag if detail and detail ~= "" then fulltag = fulltag .. ":" .. detail end -- local t = #taglist + 1 local n = (ids[fulltag] or 0) + 1 ids[fulltag] = n lasttags[tag] = n local completetag = fulltag .. "-" .. n nstack = nstack + 1 chain[nstack] = completetag stack[nstack] = t -- a copy as we can add key values for alt and actualtext if needed: taglist[t] = { unpack(chain,1,nstack) } -- if user and user ~= "" then -- maybe we should merge this into taglist or whatever ... anyway there is room to optimize -- taglist.userdata = settings_to_hash(user) userdata[completetag] = settings_to_hash(user) end if metadata then tagmetadata[completetag] = metadata metadata = nil end texattribute[a_tagged] = t return t end function tags.restart(completetag) local t = #taglist + 1 nstack = nstack + 1 chain[nstack] = completetag stack[nstack] = t taglist[t] = { unpack(chain,1,nstack) } texattribute[a_tagged] = t return t end function tags.stop() if nstack > 0 then nstack = nstack -1 end local t = stack[nstack] if not t then if trace_tags then report_tags("ignoring end tag, previous chain: %s",nstack > 0 and concat(chain[nstack],"",1,nstack) or "none") end t = unsetvalue end texattribute[a_tagged] = t return t end function tags.getid(tag,detail) if detail and detail ~= "" then return ids[tag .. ":" .. detail] or "?" else return ids[tag] or "?" end end function tags.last(tag) return lasttags[tag] -- or false end function tags.lastinchain() return chain[nstack] end function structures.atlocation(str) local location = gsub(concat(taglist[texattribute[a_tagged]],"-"),"%-%d+","") return find(location,topattern(str)) ~= nil end function tags.handler(head) -- we need a dummy return head, false end statistics.register("structure elements", function() if enabled then if nstack > 0 then return format("%s element chains identified, open chain: %s ",#taglist,concat(chain," => ",1,nstack)) else return format("%s element chains identified",#taglist) end end end) directives.register("backend.addtags", function(v) if not enabled then codeinjections.enabletags() enabled = true end end) commands.starttag = tags.start commands.stoptag = tags.stop commands.settagproperty = tags.setproperty context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fnt-21.mkiv0000644000175000017500000000325312130411274024026 0ustar norbertnorbert%D \module %D [ file=s-fnt-20, %D version=2009.01.10, %D title=\CONTEXT\ Style File, %D subtitle=Tracing Feature Application (2), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is related to: \usemodule[fnt-20] \setvariables [otftracker] [set=\setups{araball}] \startsetups araball \begingroup \setupcolors[state=start]% \enabletrackers[otf.analyzing]% beware, kind of global \ruledhbox \bgroup \definedfont[\getvariable{otftracker}{font}*\getvariable{otftracker}{features} at \getvariable{otftracker}{size}]% \ifnum\getvariable{otftracker}{direction}<0 \textdir TRT\else\ifnum\getvariable{otftracker}{direction}>0 \textdir TLT\fi\fi\relax \getvariable{otftracker}{sample}% \egroup \disabletrackers[otf.analyzing]% \endgroup \stopsetups \unexpanded\def\ShowOtfTrackerSample#1% {\doiffile{#1} {\blank \startlinecorrection \vbox \bgroup \forgetall \setbox\scratchbox\hbox{\component #1 \relax} \hbox{\copy\scratchbox\quad\lower\dp\scratchbox\hbox{\ruledhbox{\externalfigure[#1-volt.pdf][height=\htdp\scratchbox]}}} \hbox{\strut\tttf#1}% \egroup \stoplinecorrection \blank}} \endinput % \usemodule[fnt-20] % % \starttext % % \setvariables % [otftracker] % [direction=-1, % sample=لا, % title=Test, % font=file:arabtype, % % font=file:husayni, % % font=file:scheherazaderegot, % features=arabic] % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-etx.mkii0000644000175000017500000000665611754241457024344 0ustar norbertnorbert%D \module %D [ file=norm-etx, %D version=2009.03.19, %D title=\CONTEXT\ Norm Macros, %D subtitle=\ETEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % etex primitives \let \normalbotmarks = \botmarks \let \normalclubpenalties = \clubpenalties \let \normalcurrentgrouplevel = \currentgrouplevel \let \normalcurrentgrouptype = \currentgrouptype \let \normalcurrentifbranch = \currentifbranch \let \normalcurrentiflevel = \currentiflevel \let \normalcurrentiftype = \currentiftype \let \normaldetokenize = \detokenize \let \normaldimexpr = \dimexpr \let \normaldisplaywidowpenalties = \displaywidowpenalties \let \normaleTeXVersion = \eTeXVersion \let \normaleTeXminorversion = \eTeXminorversion \let \normaleTeXrevision = \eTeXrevision \let \normaleTeXversion = \eTeXversion \let \normaleveryeof = \everyeof \let \normalfirstmarks = \firstmarks \let \normalfontchardp = \fontchardp \let \normalfontcharht = \fontcharht \let \normalfontcharic = \fontcharic \let \normalfontcharwd = \fontcharwd \let \normalglueexpr = \glueexpr \let \normalglueshrink = \glueshrink \let \normalglueshrinkorder = \glueshrinkorder \let \normalgluestretch = \gluestretch \let \normalgluestretchorder = \gluestretchorder \let \normalgluetomu = \gluetomu \let \normalifcsname = \ifcsname \let \normalifdefined = \ifdefined \let \normaliffontchar = \iffontchar \let \normalinteractionmode = \interactionmode \let \normalinterlinepenalties = \interlinepenalties \let \normallastlinefit = \lastlinefit \let \normallastnodetype = \lastnodetype \let \normalmarks = \marks \let \normalmuexpr = \muexpr \let \normalmutoglue = \mutoglue \let \normalnumexpr = \numexpr \let \normalpagediscards = \pagediscards \let \normalparshapedimen = \parshapedimen \let \normalparshapeindent = \parshapeindent \let \normalparshapelength = \parshapelength \let \normalpredisplaydirection = \predisplaydirection \let \normalprotected = \protected \let \normalreadline = \readline \let \normalsavinghyphcodes = \savinghyphcodes \let \normalsavingvdiscards = \savingvdiscards \let \normalscantokens = \scantokens \let \normalshowgroups = \showgroups \let \normalshowifs = \showifs \let \normalshowtokens = \showtokens \let \normalsplitbotmarks = \splitbotmarks \let \normalsplitdiscards = \splitdiscards \let \normalsplitfirstmarks = \splitfirstmarks \let \normaltopmarks = \topmarks \let \normaltracingassigns = \tracingassigns \let \normaltracinggroups = \tracinggroups \let \normaltracingifs = \tracingifs \let \normaltracingnesting = \tracingnesting \let \normaltracingscantokens = \tracingscantokens \let \normalunexpanded = \unexpanded \let \normalunless = \unless \let \normalwidowpenalties = \widowpenalties \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-ini.mkiv0000644000175000017500000003142112130411274024244 0ustar norbertnorbert%D \module %D [ file=catc-ini, %D version=2006.09.18, %D title=\CONTEXT\ System Macros, %D subtitle=Catcode Handling, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We've split the functionality of syst-cat.* over more files %D now so that we can load more selectively. \registerctxluafile{catc-ini}{1.001} \unprotect %D A long standing wish has been the availability of catcode %D arrays. Because traditional \TEX\ does not provide this we %D implement a fake method in the \MKII\ file. There is some %D overlap in code with \MKII\ but we take that for granted. \setnewconstant\escapecatcode 0 \setnewconstant\begingroupcatcode 1 \setnewconstant\endgroupcatcode 2 \setnewconstant\mathshiftcatcode 3 \setnewconstant\alignmentcatcode 4 \setnewconstant\endoflinecatcode 5 \setnewconstant\parametercatcode 6 \setnewconstant\superscriptcatcode 7 \setnewconstant\subscriptcatcode 8 \setnewconstant\ignorecatcode 9 \setnewconstant\spacecatcode 10 \setnewconstant\lettercatcode 11 \setnewconstant\othercatcode 12 % finally obsolete: \let\other \othercatcode \setnewconstant\activecatcode 13 % finally obsolete: \let\active\activecatcode \setnewconstant\commentcatcode 14 \setnewconstant\invalidcatcode 15 \setnewconstant\tabasciicode 9 \setnewconstant\newlineasciicode 10 % don't confuse this one with \endoflineasciicode \setnewconstant\formfeedasciicode 12 \setnewconstant\endoflineasciicode 13 % somewhat messy but this can be the active \par \setnewconstant\endoffileasciicode 26 \setnewconstant\spaceasciicode 32 \setnewconstant\exclamationmarkasciicode 33 % ! used in namespace protection \setnewconstant\doublequoteasciicode 34 % " \setnewconstant\hashasciicode 35 \setnewconstant\dollarasciicode 36 \setnewconstant\commentasciicode 37 \setnewconstant\ampersandasciicode 38 \setnewconstant\singlequoteasciicode 39 % ' \setnewconstant\primeasciicode 39 % ' \setnewconstant\forwardslashasciicode 47 % / \setnewconstant\colonasciicode 58 \setnewconstant\lessthanasciicode 60 % < used as alternative verbatim { \setnewconstant\morethanasciicode 62 % > used as alternative verbatim } \setnewconstant\questionmarkasciicode 63 % ? used in namespace protection \setnewconstant\atsignasciicode 64 % @ used in namespace protection \setnewconstant\backslashasciicode 92 % `\\ \setnewconstant\circumflexasciicode 94 \setnewconstant\underscoreasciicode 95 \setnewconstant\leftbraceasciicode 123 % `\{ \setnewconstant\barasciicode 124 % `\| \setnewconstant\rightbraceasciicode 125 % `\} \setnewconstant\tildeasciicode 126 % `\~ \setnewconstant\delasciicode 127 \begingroup \catcode \tabasciicode \activecatcode \gdef\activetabtoken {^^I} \gdef\outputnewlinechar {^^J} \catcode \formfeedasciicode \activecatcode \gdef\activeformfeedtoken {^^L} \catcode \endoflineasciicode \activecatcode \gdef\activeendoflinetoken{^^M} \endgroup % \endlinechar = \endoflineasciicode % appended to input lines % \newlinechar = \newlineasciicode % can be used in write % rather special and used in writing to file: \let\par\outputnewlinechar \def\initializenewlinechar % operating system dependent {\begingroup \newlinechar\newlineasciicode \xdef\outputnewlinechar{^^J}% \endgroup} %D We predefine some prefixes ahead of syst-aux and mult-sys. We reserve 8 slots %D for catcodes. \def\??catcodelet {1>>} % let : \let \def\??catcodedef {2>>} % def : \def \def\??catcodeued {3>>} % ued : \unexpanded\def \def\??catcodeget {4>>} % \meaning \def\??catcodetablet{5>>} \def\??catcodetablen{6>>} \newcount\c_syst_catcodes_n \c_syst_catcodes_n\zerocount % 0 = signal, so advance before allocate \newcount\c_syst_catcodes_a \newcount\c_syst_catcodes_b \newcount\c_syst_catcodes_c \normalprotected\def\newcatcodetable#1% we could move the cctdefcounter to lua {\global\advance\c_syst_catcodes_n\plusone \expandafter\xdef\csname\??catcodetablen\number\c_syst_catcodes_n\endcsname{\string#1}% logging \newconstant#1% #1\c_syst_catcodes_n \ctxlua{catcodes.register("\expandafter\gobbleoneargument\string#1",\number#1)}} \newtoks \everysetdefaultcatcodes \everysetdefaultcatcodes % this might get dropped {\catcode\backslashasciicode\othercatcode \catcode\endoflineasciicode\othercatcode \catcode\spaceasciicode \othercatcode \catcode\commentasciicode \othercatcode \catcode\delasciicode \othercatcode} \long\normalprotected\def\startcatcodetable#1#2\stopcatcodetable {\begingroup \catcodetable\inicatcodes \the\everysetdefaultcatcodes #2% \savecatcodetable#1\relax \endgroup} \let\stopcatcodetable\relax \long\normalprotected\def\startextendcatcodetable#1#2\stopextendcatcodetable {\begingroup \catcodetable#1\relax \globaldefs\plusone #2% \globaldefs\zerocount \endgroup} \let\stopextendcatcodetable\relax \normalprotected\def\permitcircumflexescape % to be used grouped {\catcode\circumflexasciicode\superscriptcatcode} \let\permitcaretescape\permitcircumflexescape % == % % \long\normalprotected\def\startextendcatcodetable#1#2\stopextendcatcodetable % {\bgroup % \scratchcounter\the\catcodetable % \catcodetable #1 #2 % \catcodetable\scratchcounter % \egroup} %D The next command can be defined in a cleaner way in the %D Mk IV file but we want to have a fast one with a minimal %D chance for interference. Do we still need this complex %D mechanism? Future versions of \MKIV\ might only use %D active characters for very special cases. \setnewconstant\c_syst_catcodes_hack\tildeasciicode %D Once a catcode is assigned, the next assignments will happen %D faster. \def\letcatcodecommand{\afterassignment\syst_catcodes_let_a\c_syst_catcodes_a} \def\defcatcodecommand{\afterassignment\syst_catcodes_def_a\c_syst_catcodes_a} \def\uedcatcodecommand{\afterassignment\syst_catcodes_ued_a\c_syst_catcodes_a} \def\syst_catcodes_let_a{\afterassignment\syst_catcodes_let_b\c_syst_catcodes_b} \def\syst_catcodes_def_a{\afterassignment\syst_catcodes_def_b\c_syst_catcodes_b} \def\syst_catcodes_ued_a{\afterassignment\syst_catcodes_ued_b\c_syst_catcodes_b} \def\syst_catcodes_let_b % each time {\ifcsname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname \csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname \else \expandafter\syst_catcodes_let_c \fi} \def\syst_catcodes_def_b % each time {\ifcsname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname \csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname \else \expandafter\syst_catcodes_def_c \fi} \def\syst_catcodes_ued_b % each time {\ifcsname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname \csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname \else \expandafter\syst_catcodes_ued_c \fi} \def\syst_catcodes_let_c % only first time {\expandafter\gdef\csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname\expandafter {\expandafter\let\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}% \syst_catcodes_reinstate_unexpanded \csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} \def\syst_catcodes_def_c % only first time (we could use \normalexpanded here) {\expandafter\gdef\csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname \expandafter##\expandafter1\expandafter {\expandafter\def\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}% \syst_catcodes_reinstate_normal \csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} \def\syst_catcodes_ued_c % only first time {\expandafter\gdef\csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname \expandafter##\expandafter1\expandafter {\expandafter\normalprotected\expandafter\def\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}% \syst_catcodes_reinstate_unexpanded \csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} \def\reinstatecatcodecommand{\afterassignment\syst_catcodes_reinstate_normal\c_syst_catcodes_b} \def\syst_catcodes_reinstate_normal % can be used when a direct definition has been done {\begingroup % and the selector has been lost \uccode\c_syst_catcodes_hack\c_syst_catcodes_b \catcode\uccode\c_syst_catcodes_hack\activecatcode \uppercase{\xdef~{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}}% \endgroup} \def\syst_catcodes_reinstate_unexpanded % can be used when a direct definition has been done {\begingroup % and the selector has been lost \uccode\c_syst_catcodes_hack\c_syst_catcodes_b \catcode\uccode\c_syst_catcodes_hack\activecatcode \uppercase{\normalprotected\xdef~{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}}% \endgroup} \newconstant\defaultcatcodetable \def\catcodecommand#1% {\csname\??catcodeget\number \ifcsname\??catcodeget\number\currentcatcodetable:\number#1\endcsname \currentcatcodetable \else \defaultcatcodetable \fi :\number#1\endcsname} %D \macros %D {restorecatcodes,pushcatcodetable,popcatcodetable} %D %D We're not finished dealing \CATCODES\ yet. In \CONTEXT\ we %D use only one auxiliary file, which deals with tables of %D contents, registers, two pass tracking, references etc. This %D file, as well as files concerning graphics, is processed when %D needed, which can be in the mid of typesetting verbatim. %D However, when reading in data in verbatim mode, we should %D temporary restore the normal \CATCODES, and that's exactly %D what the next macros do. Saving the catcodes can be %D disabled by saying \type{\localcatcodestrue}. \newcount\c_syst_catcodes_level \normalprotected\def\pushcatcodetable {\advance\c_syst_catcodes_level\plusone \syst_catcodes_trace_push \expandafter\chardef\csname\??catcodetablet\number\c_syst_catcodes_level\endcsname\currentcatcodetable} \normalprotected\def\popcatcodetable {\ifcase\c_syst_catcodes_level \syst_catcodes_trace_nesting_error \else \expandafter\catcodetable\csname\??catcodetablet\number\c_syst_catcodes_level\endcsname \syst_catcodes_trace_pop \advance\c_syst_catcodes_level\minusone \fi} \normalprotected\def\syst_catcodes_trace_nesting_error {\immediate\write16{}% \immediate\write16{Fatal error: catcode push/pop mismatch. Fix this! (restore level: \number\c_syst_catcodes_level)}\wait\end \immediate\write16{}} \normalprotected\def\restorecatcodes % takes previous level {\ifnum\c_syst_catcodes_level>\plusone \expandafter\catcodetable\csname\??catcodetablet\number\numexpr\c_syst_catcodes_level-1\relax\endcsname \fi} % \newtoks\everycatcodetable \normalprotected\def\setcatcodetable#1% {\catcodetable#1% % \the\everycatcodetable \syst_catcodes_trace_set} %D Handy for debugging: %D %D \starttyping %D \tracecatcodetables %D \stoptyping \normalprotected\def\tracecatcodetables {\def\syst_catcodes_trace_set {\syst_catcodes_trace{set \catcodetablename\space at \number\c_syst_catcodes_level}}% \def\syst_catcodes_trace_push{\syst_catcodes_trace{push \catcodetablename\space from \syst_catcodes_prev\space at \number\c_syst_catcodes_level}}% \def\syst_catcodes_trace_pop {\syst_catcodes_trace{pop \catcodetablename\space to \syst_catcodes_prev\space at \number\c_syst_catcodes_level}}} \def\syst_catcodes_trace#1{\immediate\write16{[#1]}} \def\syst_catcodes_prev {\ifnum\numexpr\c_syst_catcodes_level-1\relax>\zerocount \csname\??catcodetablen\number\csname\??catcodetablet\number\numexpr\c_syst_catcodes_level-1\relax\endcsname\endcsname \else -% \fi} \def\catcodetablename {\ifnum\currentcatcodetable>\zerocount \csname\??catcodetablen\number\currentcatcodetable\endcsname \else -% \fi} \let\syst_catcodes_trace_set \empty \let\syst_catcodes_trace_push\empty \let\syst_catcodes_trace_pop \empty % \tracecatcodetables \protect %D We still have to define these so let's do that now: \newcatcodetable \inicatcodes \initcatcodetable\inicatcodes \let\currentcatcodetable\catcodetable \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-shapes.mkiv0000644000175000017500000000722312161703335025440 0ustar norbertnorbert%D \module %D [ file=s-fonts-shapes, % s-fnt-29, %D version=2010.09.27, %D title=\CONTEXT\ Style File, %D subtitle=Tracing Shapes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[s-fonts-shapes] \registerctxluafile{s-fonts-shapes}{} \installmodulecommandluasingle \showfontshapes {moduledata.fonts.shapes.showlist} \installmodulecommandluasingle \showglyphshape {moduledata.fonts.shapes.showglypshape} \installmodulecommandluatwo \showlastglyphshapefield {moduledata.fonts.shapes.showlastglyphshapefield} \installmodulecommandluasingle \showallglyphshapes {moduledata.fonts.shapes.showallglypshapes} \let\modulefontsstartshowglyphshape\relax \let\modulefontsstopshowglyphshape \relax \unprotect \startsetups module:showallglyphshapes:start \def\modulefontsstartshowglyphshape##1##2{ \startTEXpage[\c!offset=\exheight] \edef\lastshownglyphshapefieldunicode{##1}% \edef\lastshownglyphshapefieldname {##2}% \raggedcenter } \def\modulefontsstopshowglyphshape { \par \doifsomething {\lastshownglyphshapefieldunicode} { \begingroup \dontleavehmode \tttf \setstrut \strut 0x\uchexnumbers\lastshownglyphshapefieldunicode :\space \lastshownglyphshapefieldname \par \endgroup } \stopTEXpage } \stopsetups \protect % downward compatibility: \unexpanded\def\ShowGlyphShape#1#2#3% name size glyph {\ctxlua{moduledata.fonts.shapes.showglyphshape { name = "#1", size = "#2", character = "#3" } }} \stopmodule \continueifinputfile{s-fonts-shapes.mkiv} \setupbodyfont[dejavu,9pt] \setuplayout [backspace=1cm, topspace=1cm, footer=1cm, header=0cm, height=middle, width=middle] \setupfootertexts [] [\saveddefinedfontname\quad\pagenumber] \starttext \savedefinedfont[Bold*default] \showfontshapes[number=\saveddefinedfontid] \page \showfontshapes[name=BoldItalic*default] \page % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x62A} \stopTEXpage % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x2004} \stopTEXpage % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D43F}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D444}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D447}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x02112}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D432}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D43D}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D44A}\stopTEXpage \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage \page % \showallglyphshapes[name=name:cambria-math,size=100bp] % \showallglyphshapes[name=name:dejavuserif,size=100bp] \stoptext \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/core-ctx.mkii0000644000175000017500000001633611754241457024313 0ustar norbertnorbert%D \module %D [ file=core-ctx, %D version=2006.08.16, % old stuff %D title=\CONTEXT\ Core Macros, %D subtitle=Job Control, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Job Control} \unprotect \chardef\preprocessmethod 2 % 0=no check 1=present_check 2=log_check \chardef\preprocessstate 0 % 1=found 2=not_present (skip) \chardef\preprocesslocal 0 % 0=no 1=yes \def \preprocesssuffix {.prep} \def\loadctxpreplist {\begingroup \chardef\XMLtokensreduction\plusone \ifcase\preprocessmethod % no checking \or % simple checking \or \doiffileexistselse{./\jobname.ctl} {\bgroup \defineXMLenvironment[ctx:preplist][local=no] {\doifelse{\XMLop{local}}{yes} {\global\chardef\preprocesslocal\plusone \writestatus\m!systems{loading ctx log file (local)}}% {\writestatus\m!systems{loading ctx log file (specified)}}} \donothing \defineXMLenvironmentsave[ctx:prepfile][done=no] \donothing {\edef\readfilename{\XMLflush{ctx:prepfile}}% \ifcase\preprocesslocal\else \splitfilename\readfilename \let\readfilename\splitoffbase \fi \writestatus\m!systems{registering \readfilename\space -> \XMLop{done}}% \setxvalue{fp..\readfilename}{\XMLop{done}}}% \processXMLfile{./\jobname.ctl}% \egroup}% {\global\chardef\preprocessmode\plusone}% \fi \global\let\loadctxpreplist\relax \endgroup} \appendtoks\loadctxpreplist\to\everystarttext % will become: \prependtoks\loadctxpreplist\to\everyjob \def\docheckprepfile {\ifcase\preprocessmethod \iftracefiles\writestatus\m!systems{preprocessing - not needed}\fi % no preprocessing \or % only check for existence \iftracefiles\writestatus\m!systems{preprocessing - check existence of \readfilename\preprocesssuffix}\fi \doiffileexistselse{\readfilename\preprocesssuffix} {\chardef\preprocessstate\plusone} \donothing \or % check when in list, otherwise assume normal file \bgroup \splitfilename\readfilename \ifx\splitofftype\empty % saveguard and speed up \iftracefiles\writestatus\m!systems{preprocessing - no suffix}\fi \egroup \else\ifcase\preprocesslocal % also ./ strippen \iftracefiles\writestatus\m!systems{preprocessing - check presence of \readfilename\preprocesssuffix}\fi \doifdefinedelse{fp..\readfilename} {\egroup \doiffileexistselse{\readfilename\preprocesssuffix} {\chardef\preprocessstate\plusone} {\chardef\preprocessstate\plustwo}}% {\doifdefinedelse{fp.../\readfilename} {\egroup \edef\readfilename{./\readfilename}% \doiffileexistselse{\readfilename\preprocesssuffix} {\chardef\preprocessstate\plusone} {\chardef\preprocessstate\plustwo}}% {\doifdefinedelse{fp..\splitoffbase}% {\egroup \doiffileexistselse{\readfilename\preprocesssuffix} {\chardef\preprocessstate\plusone} {\chardef\preprocessstate\plustwo}}% {\egroup}}}% \else % maybe just filecheck, why ctl \iftracefiles\writestatus\m!systems{preprocessing - check local presence of \readfilename\preprocesssuffix}\fi \doifdefinedelse{fp..\readfilename} {\egroup \doiffileexistselse{\readfilename\preprocesssuffix} {\chardef\preprocessstate\plusone} {\chardef\preprocessstate\plustwo}}% {\egroup}% \fi \fi\fi} % beware, \readfilename keeps the original one, but we load and store the % suffixed with .prep file (if present) \def\doreadfile#1#2#3#4% beware, this one already works at format generation time! {\sanitizefilename#2\to\readfilename \ifx\readfilename\empty % silently ignore \else \let\trackedfilename\readfilename \chardef\preprocessstate\zerocount \ifconditional\trackfilenames \doifundefinedelse{fn..\trackedfilename}\donetrue\donefalse \else \donetrue \fi \ifdone \checkfilename\readfilename \ifcase\kindoffile % not a full path or url, check for existence \doifelsenothing{#1} {\iftracefiles\writestatus\m!systems{searching for \readfilename\space on tex path}\fi \def\next{\redoreadfile\readfilename{#3}{#4}}}% {\iftracefiles\writestatus\m!systems{searching for \readfilename\space on #1}\fi \def\next{\redoreadfile{\pathplusfile{#1}{\readfilename}}{#3}{#4}}}% \else % a full path or url, no further checking done \docheckprepfile \ifcase\preprocessstate \doiffileexistselse\readfilename {\iftracefiles\writestatus\m!systems{located \readfilename}\fi \def\next{#3\dodoreadfile}}% {\iftracefiles\writestatus\m!systems{not found \readfilename}\fi \def\next{#4}}% \or \iftracefiles\writestatus\m!systems{located \readfilename\preprocesssuffix}\fi \def\next{#3\dodoreadfile}% \or \iftracefiles\writestatus\m!systems{not found \readfilename\preprocesssuffix}\fi \def\next{#4}% \fi \fi \else \edef\readfilename{\getvalue{fn..\readfilename}}% ??? is done ! \iftracefiles\writestatus\m!systems{already located \readfilename}\fi \def\next{#3\dodoreadfile}% \fi \expandafter\next \fi} \def\redoreadfile#1#2#3% {\docheckprepfile \ifcase\preprocessstate \doiffileexistselse{#1}% {\edef\readfilename{#1}% \iftracefiles\writestatus\m!systems{#1 located}\fi \def\next{#2\dodoreadfile}}% {\iftracefiles\writestatus\m!systems{cannot locate #1}\fi \advance\readlevel\minusone \ifnum\readlevel>\zerocount \edef\readfilename{\pathplusfile{\f!parentpath}{\readfilename}}% \def\next{\redoreadfile\readfilename{#2}{#3}}% \else \def\next{#3}% \fi}% \or \ifcase\preprocesslocal \edef\readfilename{#1}% nor found \else % no path prepending \fi \iftracefiles\writestatus\m!systems{#1\preprocesssuffix\space located}\fi \def\next{#2\dodoreadfile}% \or \def\next{#3}% \fi \next} \def\dodoreadfile % we provide hooks, for instance for \enableXML {\ifconditional\trackfilenames \setxvalue{fn..\trackedfilename}{\readfilename\ifcase\preprocessstate\or\preprocesssuffix\fi}% \fi \the\everybeforereadfile \ifcase\preprocessstate % no checking or not found when using method 1 \def\dodoreadfileindeed{\inputgivenfile\readfilename}% \or % found when using method 1 or 2 \def\dodoreadfileindeed{\inputgivenfile{\readfilename\preprocesssuffix}}% \or % not found when using method 2 \let\dodoreadfileindeed\relax \fi \dodoreadfileindeed \relax \the\everyafterreadfile} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-04.mkii0000644000175000017500000002263311754241457024043 0ustar norbertnorbert%D \module %D [ file=x-fig-04, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Loading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % hele base laden \setXMLfallbackmode3 % icon : preview % caption : \figurebasevariable{caption} % background : rgb cmyk gray name % dimensions : width height offset (l,r,t,b) area % alternative : tag label / evt list % % movie % sound % applet % application \usemodule[res-00] % basic element definitions %D This module implements an interface to a figure database %D and file. The database is formatted in \XML\ conforming %D the following \DTD: %D %D \typefile{x-fig-00.dtd} %D %D A figure base coded this way looks like: %D %D \starttyping %D %D %D %D %D %D %D %D PRAGMA Advanced Document Engineering %D Manuals %D Beginners Manual %D A bunch of figures. %D %D %D %D koe.pdf %D a dutch cow %D Corel Draw Suite %D I bet that you've seen this cow before. %D %D %D %D non existent %D a european cow %D Nobody %D When will we talk about European cows? %D %D %D %D \stoptyping %D %D You can convert this base into a \PDF\ file using %D \TEXEXEC\ and another module in this suite. %D %D \starttyping %D texexec --pdf --use=fig-make yourfile.xml %D \stoptyping %D %D You can now select a graphic from this file using the %D %D \starttyping %D \externalfigure[a dutch cow][width=4cm] %D \stoptyping %D %D This module overloads this command so that a figure is %D it first searched in the list of databases. %D %D \starttyping %D \usemodule [fig-base] %D \usefigurebases[yourfile] %D \stoptyping %D %D The special keyword \type {reset} can be used to reset %D this list. \startcommands dutch english german czech italian romanian usefigurebase: gebruikfiguurbestand usefigurebase usefigurebase usefigurebase usefigurebase usefigurebase \stopcommands \unprotect \consultutilityfilefalse % 0 = no loading % 1 = selective loading % 2 = full loading \chardef\figurebasemode=1 % 2 \newcounter\figurefilepage % loading a complete figure base \startXMLmapping[rl:load] \defineXMLenvironmentsave [rl:figure] {\bgroup} {\XMLflush{rl:figure} \doglobal\increment\figurefilepage \figbase@savedata{\XMLflush{rl:label}}\figurefilepage \egroup} \stopXMLmapping \def\loadfigurebase#1% {\doifnotflagged{rl:#1} {\writestatus{figbase}{loading #1 into memory}% \startnointerference \autoXMLnamespace[rl] \startXMLmapping[rl:load] \doglobal\newcounter\figurefilepage \processXMLfilegrouped{#1.xml} \stopXMLmapping \doglobal\setflag{rl:#1} \stopnointerference}} \def\figbase@savedata#1#2% {%\writestatus{figbase}{data of #1 loaded}% \doglobal\saveXMLdatastructure{rl:rl:#1}{record}{page="#2"}{}{rl:figure}{}} % locating and if needed loading one figure record \startXMLmapping[rl:find] \defineXMLenvironment[rl:instance] {\bgroup} {\doif\askedlabel{\XMLflush{rl:label}} {\doglobal\saveXMLdata{rl:g:manipulation}{rl:manipulation}% \doifXMLdata{rl:original} {\xdef\askedlabel{\XMLflush{rl:original}}}}% \egroup} \defineXMLenvironmentsave [rl:figure] {\bgroup} {\XMLflush{rl:figure} \doglobal\increment\figurefilepage %\doshowfigurestate{base : comparing \askedlabel\space with \XMLflush{rl:label}}% \doif\askedlabel{\XMLflush{rl:label}} {\doshowfigurestate{base label : found \askedlabel}% \ifnum\figurebasemode=\plusone % load used ones \figbase@savedata\askedlabel\figurefilepage \fi \doglobal\saveXMLdata{rl:l:manipulation}{rl:manipulation}% \xdef\figurefilelabel {\XMLflush{rl:label}}% \xdef\figurefilefile {\XMLflush{rl:file}}% \xdef\figurefileoriginal{\XMLflush{rl:original}}% \xdef\figurefilename {\XMLflush{rl:file}} \endinput}% \egroup} \defineXMLenvironment [rl:record] {} {\xdef\figurefilename{\XMLpop{rl:file}} \xdef\figurefilepage{\XMLop {page}}} \stopXMLmapping \def\getfigurefilename#1#2% {\ifnum\figurebasemode=\plustwo \loadfigurebase{#1} \fi \startnointerference \traceXMLelementsfalse \resetfigurefilebase \doglobal\newcounter\figurefilepage \autoXMLnamespace[rl] \startXMLmapping[rl:find] \xdef\figurefilebase{#1}% \def\askedlabel{#2}% \doifelseXMLelement{rl:rl:\askedlabel} {\enableXMLelements\flushXMLelement{rl:rl:\askedlabel}} {\doshowfigurestate{base path : \figurepathlist}% \processcommacommand[\figurepathlist]\dogetfigurefilename}% \stopXMLmapping \stopnointerference} % todo: niet toegekende naam doorgeven aan calculate en pad % in padstring \def\dogetfigurefilename#1% {\ifx\figurefilename\empty \bgroup \doglobal\newcounter\figurefilepage \globalletempty\figurefilelabel \globalletempty\figurefileoriginal \globalletempty\figurefilefile \xdef\figurefilebasepath{#1}% \assignfullfilename{#1}{\figurefilebase}\to\filename \doiffileelse{\filename.xml} {\doshowfigurestate{base file : \filename}% \expanded{\processXMLfilegrouped{\filename.xml}}} \donothing \ifx\figurefilename\empty \else % \global\let\figurefilebase\figurefilebase \globallet\figurefilebase\filename % hm, bad omen that this is needed \fi \egroup \fi} \newtoks\figurebaseresets \appendtoks \globalletempty\figurefilebase \globalletempty\figurefilename \globalletempty\figurefilebasepath \globalletempty\figurefilepage \globalletempty\figurefilelabel %\globalletempty\figurefileoriginal %\globalletempty\figurefilefile \to\figurebaseresets \def\resetfigurefilebase {\the\figurebaseresets} \ifx\doshowfigurestate\undefined \let\doshowfigurestate\gobbleoneargument \fi \def\doanalyzefiguredimensionsfromfile {\ifcase\figurestatus \ifx\figurebaselist\empty \else \resetfigurefilebase \doshowfigurestate{base list : \figurebaselist}% \processcommacommand[\figurebaselist]\dodoanalyzefiguredimensionsfromfile \ifx\figurefilename\empty \doshowfigurestate{base warning : no matching name found}% \else \doiffileelse{\figurefilebase.pdf} {\doshowfigurestate{base file : \figurefilebase.pdf}% \doshowfigurestate{base page : \figurefilepage}% \let\figurepathlist\figurefilebasepath \analyzefigurefilename{\figurefilebase.pdf}\wantedfigurelabel \let\wantedfigurepage\figurefilepage} {\doshowfigurestate{base missing : \figurefilebase.pdf}} \fi \ifcase\figurestatus \analyzefigurefilename\expandedfigurename\wantedfigurelabel \fi \fi \fi} \def\dodoanalyzefiguredimensionsfromfile#1% {\doshowfigurestate{base check : \wantedfigurename\space in #1}% \getfigurefilename{#1}\wantedfigurename \ifx\figurefilename\empty\else \quitcommalist \fi} % management % will become \useresourcelibrary \def\usefigurebase[#1]% {\doifelse{#1}\v!reset {\let\figurebaselist\empty} {\addtocommalist{#1}\figurebaselist}} \let\figurebaselist\empty \resetfigurefilebase % manipulations / todo: fixed order \defineXMLsave [rl:manipulation] \defineXMLsingular [rl:background] [r=0,g=0,b=0,s=0,c=0,m=0,y=0,k=0] {\global\setbox\foundexternalfigure\vbox {\definecolor [XMLRLcolor] [r=\XMLop{r},g=\XMLop{g},b=\XMLop{b},s=\XMLop{s},% c=\XMLop{c},m=\XMLop{m},y=\XMLop{y},k=\XMLop{k}]% \framed [\c!frame=\v!off,\c!offset=\v!overlay, \c!background=\v!color,\c!backgroundcolor=XMLRLcolor] {\box\foundexternalfigure}}} \defineXMLsingular [rl:viewport] [\??cp] % [] {\global\setbox\foundexternalfigure\vbox {\expandXMLta \getXMLta \clip [\XMLta] {\box\foundexternalfigure}}% \global\setbox\foundexternalfigure\vbox {\scale [\c!width=\figurewidth,\c!height=\figureheight] {\box\foundexternalfigure}}} \defineXMLsingular [rl:dimensions] [width=,height=] {} \defineXMLsingular [rl:position] [offset=,width=,height=,hoffset=,voffset=] {} \appendtoks \doglobal\eraseXMLelement{rl:l:manipulation}% \doglobal\eraseXMLelement{rl:g:manipulation}% \to \figurebaseresets \appendtoks \startnointerference \processXMLelement{rl:l:manipulation}% \processXMLelement{rl:g:manipulation}% \stopnointerference \to \externalfigurepostprocessors \protect \doifnotmode{demo}{\endinput} \starttext \setupcolors[state=start] \usefigurebase[d-fig-01] \externalfigure[part of a dutch cow][width=3cm,frame=on] \externalfigure[a simple dutch cow][width=5cm,frame=on] \externalfigure[another simple dutch cow][width=5cm,frame=on] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-oti.lua0000644000175000017500000000442512130411274024133 0ustar norbertnorbertif not modules then modules = { } end modules ['font-oti'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lower = string.lower local fonts = fonts local constructors = fonts.constructors local otf = constructors.newhandler("otf") local otffeatures = constructors.newfeatures("otf") local otftables = otf.tables local registerotffeature = otffeatures.register local allocate = utilities.storage.allocate registerotffeature { name = "features", description = "initialization of feature handler", default = true, } -- these are later hooked into node and base initializaters local function setmode(tfmdata,value) if value then tfmdata.properties.mode = lower(value) end end local function setlanguage(tfmdata,value) if value then local cleanvalue = lower(value) local languages = otftables and otftables.languages local properties = tfmdata.properties if not languages then properties.language = cleanvalue elseif languages[value] then properties.language = cleanvalue else properties.language = "dflt" end end end local function setscript(tfmdata,value) if value then local cleanvalue = lower(value) local scripts = otftables and otftables.scripts local properties = tfmdata.properties if not scripts then properties.script = cleanvalue elseif scripts[value] then properties.script = cleanvalue else properties.script = "dflt" end end end registerotffeature { name = "mode", description = "mode", initializers = { base = setmode, node = setmode, } } registerotffeature { name = "language", description = "language", initializers = { base = setlanguage, node = setlanguage, } } registerotffeature { name = "script", description = "script", initializers = { base = setscript, node = setscript, } } context-2013.05.28.20130704/texmf-dist/tex/context/base/sort-lan.lua0000644000175000017500000011444712130411274024141 0ustar norbertnorbertif not modules then modules = { } end modules ['sort-lan'] = { version = 1.001, comment = "companion to sort-lan.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } -- todo: look into uts#10 (2012) ... some experiments ... something -- to finish in winter. -- Many vectors were supplied by Wolfgang Schuster and Philipp -- Gesang. However this is a quite adapted and reformatted variant -- so it needs some checking. Other users provides tables and -- corrections as well. local utfchar, utfbyte = utf.char, utf.byte local sorters = sorters local definitions = sorters.definitions local replacementoffset = sorters.constants.replacementoffset local variables = interfaces.variables definitions["default"] = { method = variables.before, replacements = { -- no replacements }, entries = { ["a"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", }, orders = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", }, lower = { -- no replacements }, upper = { -- no replacements } } sorters.setlanguage("default") -- english definitions["en"] = { parent = "default" } -- dutch definitions['nl'] = { parent = 'default', replacements = { { "ij", 'y' }, { "IJ", 'Y' }, }, } -- French definitions['fr'] = { parent = 'default' } -- German (by Wolfgang Schuster) -- DIN 5007-1 definitions['DIN 5007-1'] = { parent = 'default' } -- DIN 5007-2 definitions['DIN 5007-2'] = { parent = 'default', replacements = { { "ä", 'ae' }, { "Ä", 'Ae' }, { "ö", 'oe' }, { "Ö", 'Oe' }, { "ü", 'ue' }, { "Ü", 'Ue' }, }, } -- Duden definitions['Duden'] = { parent = 'default', replacements = { { "ß", 's' } }, } -- definitions['de'] = { parent = 'default' } -- new german definitions['de'] = { parent = 'default', replacements = { { "ä", 'ae' }, { "Ä", 'Ae' }, { "ö", 'oe' }, { "Ö", 'Oe' }, { "ü", 'ue' }, { "Ü", 'Ue' }, { "ß", 's' }, }, } definitions['deo'] = { parent = 'de' } -- old german definitions['de-DE'] = { parent = 'de' } -- german - Germany definitions['de-CH'] = { parent = 'de' } -- german - Swiss -- german - Austria definitions['de-AT'] = { entries = { ["a"] = "a", ["ä"] = "ä", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["ö"] = "ö", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["ü"] = "ü", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", }, orders = { "a", "ä", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "q", "r", "s", "t", "u", "ü", "v", "w", "x", "y", "z", }, } -- finish (by Wolfgang Schuster) definitions['fi'] = { entries = { ["a"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", ["å"] = "å", ["ä"] = "ä", ["ö"] = "ö", }, orders = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "å", "ä", "ö", } } -- slovenian by MM: this will change since we need to add accented vowels definitions['sl'] = { entries = { ["a"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č", ["ć"] = "ć", ["d"] = "d", ["đ"] = "đ", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["š"] = "š", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", ["ž"] = "ž", }, orders = { "a", "b", "c", "č", "ć", "d", "đ", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "š", "t", "u", "v", "w", "x", "y", "z", "ž", } } -- The following data was provided by Philipp Gesang. definitions["ru"] = { entries = { ["а"] = "а", ["б"] = "б", ["в"] = "в", ["г"] = "г", ["д"] = "д", ["е"] = "е", ["ё"] = "е", ["ж"] = "ж", ["з"] = "з", ["и"] = "и", ["і"] = "и", ["й"] = "й", ["к"] = "к", ["л"] = "л", ["м"] = "м", ["н"] = "н", ["о"] = "о", ["п"] = "п", ["р"] = "р", ["с"] = "с", ["т"] = "т", ["у"] = "у", ["ф"] = "ф", ["х"] = "х", ["ц"] = "ц", ["ч"] = "ч", ["ш"] = "ш", ["щ"] = "щ", ["ъ"] = "ъ", ["ы"] = "ы", ["ь"] = "ь", ["ѣ"] = "ѣ", ["э"] = "э", ["ю"] = "ю", ["я"] = "я", ["ѳ"] = "ѳ", ["ѵ"] = "ѵ", }, orders = { "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "і", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "ѣ", "э", "ю", "я", "ѳ", "ѵ", } } --- Basic Ukrainian definitions["uk"] = { entries = { ["а"] = "а", ["б"] = "б", ["в"] = "в", ["г"] = "г", ["ґ"] = "ґ", ["д"] = "д", ["е"] = "е", ["є"] = "є", ["ж"] = "ж", ["з"] = "з", ["и"] = "и", ["і"] = "і", ["ї"] = "ї", ["й"] = "й", ["к"] = "к", ["л"] = "л", ["м"] = "м", ["н"] = "н", ["о"] = "о", ["п"] = "п", ["р"] = "р", ["с"] = "с", ["т"] = "т", ["у"] = "у", ["ф"] = "ф", ["х"] = "х", ["ц"] = "ц", ["ч"] = "ч", ["ш"] = "ш", ["щ"] = "щ", ["ь"] = "ь", ["ю"] = "ю", ["я"] = "я", }, orders = { "а", "б", "в", "г", "ґ", "д", "е", "є", "ж", "з", "и", "і", "ї", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ь", "ю", "я", } } --- Belarusian definitions["be"] = { entries = { ["а"] = "а", ["б"] = "б", ["в"] = "в", ["г"] = "г", ["д"] = "д", ["е"] = "е", ["ё"] = "е", ["ж"] = "ж", ["з"] = "з", ["і"] = "і", ["й"] = "й", ["к"] = "к", ["л"] = "л", ["м"] = "м", ["н"] = "н", ["о"] = "о", ["п"] = "п", ["р"] = "р", ["с"] = "с", ["т"] = "т", ["у"] = "у", ["ў"] = "ў", ["ф"] = "ф", ["х"] = "х", ["ц"] = "ц", ["ч"] = "ч", ["ш"] = "ш", ["ы"] = "ы", ["ь"] = "ь", ["э"] = "э", ["ю"] = "ю", ["я"] = "я", }, orders = { "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "і", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ў", "ф", "х", "ц", "ч", "ш", "ы", "ь", "э", "ю", "я", } } --- Bulgarian definitions["bg"] = { entries = { ["а"] = "а", ["б"] = "б", ["в"] = "в", ["г"] = "г", ["д"] = "д", ["е"] = "е", ["ж"] = "ж", ["з"] = "з", ["и"] = "и", ["й"] = "й", ["к"] = "к", ["a"] = "a", ["л"] = "л", ["a"] = "a", ["м"] = "м", ["н"] = "н", ["о"] = "о", ["п"] = "п", ["р"] = "р", ["с"] = "с", ["т"] = "т", ["у"] = "у", ["ф"] = "ф", ["х"] = "х", ["ц"] = "ц", ["ч"] = "ч", ["ш"] = "ш", ["щ"] = "щ", ["ъ"] = "ъ", ["ь"] = "ь", ["ю"] = "ю", ["я"] = "я", }, orders = { "а", "б", "в", "г", "д", "е", "ж", "з","и", "й", "к", "a", "л", "a", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ь", "ю", "я", } } --- Old Church Slavonic -- The language symbol “cu” is taken from the Wikipedia subdomain -- cu.wikipedia.org. local uk, UK = utfchar(replacementoffset + 1), utfchar(replacementoffset + 11) definitions["cu"] = { replacements = { { "оу", uk }, { "ОУ", UK }, }, entries = { ["а"] = "а", ["б"] = "б", ["в"] = "в", ["г"] = "г", ["д"] = "д", ["є"] = "є", ["ж"] = "ж", ["ѕ"] = "ѕ", ["ꙃ"] = "ѕ", ["з"] = "з", ["ꙁ"] = "з", ["и"] = "и", ["і"] = "и", ["ї"] = "и", ["ћ"] = "ћ", ["к"] = "к", ["л"] = "л", ["м"] = "м", ["н"] = "н", ["о"] = "о", ["п"] = "п", ["р"] = "р", ["с"] = "с", ["т"] = "т", ["у"] = "у", ["ѹ"] = "у", ["ꙋ"] = "у", [uk] = "у", ["ф"] = "ф", ["х"] = "х", ["ѡ"] = "ѡ", ["ѿ"] = "ѡ", ["ѽ"] = "ѡ", ["ꙍ"] = "ѡ", ["ц"] = "ц", ["ч"] = "ч", ["ш"] = "ш", ["щ"] = "щ", ["ъ"] = "ъ", ["ы"] = "ы", ["ꙑ"] = "ы", ["ь"] = "ь", ["ѣ"] = "ѣ", ["ю"] = "ю", ["ꙗ"] = "ꙗ", ["ѥ"] = "ѥ", ["ѧ"] = "ѧ", ["ѩ"] = "ѩ", ["ѫ"] = "ѫ", ["ѭ"] = "ѭ", ["ѯ"] = "ѯ", ["ѱ"] = "ѱ", ["ѳ"] = "ѳ", ["ѵ"] = "ѵ", ["ѷ"] = "ѵ", }, orders = { "а", "б", "в", "г", "д", "є", "ж", "ѕ", "ꙃ", "з", -- Dzělo, U+0292, alternative: dz U+01f3 "ꙁ", "и", "і", "ї", "ћ", "к", "л", "м", "н", "о", -- Zemlja "п", "р", "с", "т", "у", "ѹ", "ꙋ", uk, "ф", "х", -- U+0478 uk, horizontal ligature, U+0479 uk, vertical ligature "ѡ", "ѿ", "ѽ", "ꙍ", "ц", "ч", "ш", "щ", "ъ", "ы", -- "ō", U+047f \, U+047d > Omega variants, U+064D / "ꙑ", "ь", "ѣ", "ю", "ꙗ", "ѥ", "ѧ", "ѩ", "ѫ", "ѭ", -- Old jery (U+a651) as used e.g. by the OCS Wikipedia. IOTIFIED A "ѯ", "ѱ", "ѳ", "ѵ", "ѷ", }, upper = { uk = UK, }, lower = { UK = uk, } } --- Polish (including the letters q, v, x) Cf. ftp://ftp.gust.org.pl/pub/GUST/bulletin/03/02-bl.pdf. definitions["pl"] = { entries = { ["a"] = "a", ["ą"] = "ą", ["b"] = "b", ["c"] = "c", ["ć"] = "ć", ["d"] = "d", ["e"] = "e", ["ę"] = "ę", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["ł"] = "ł", ["m"] = "m", ["n"] = "n", ["ń"] = "ń", ["o"] = "o", ["ó"] = "ó", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["ś"] = "ś", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", ["ź"] = "ź", ["ż"] = "ż", }, orders = { "a", "ą", "b", "c", "ć", "d", "e", "ę", "f", "g", "h", "i", "j", "k", "l", "ł", "m", "n", "ń", "o", "ó", "p", "q", "r", "s", "ś", "t", "u", "v", "w", "x", "y", "z", "ź", "ż", }, } -- Czech, modified to treat quantities and other secondary characteristics indifferently. Cf. -- http://racek.vlada.cz/usneseni/usneseni_webtest.nsf/WebGovRes/0AD8FEF4CC04B7A4C12571B6006D69D0?OpenDocument -- (2.4.3; via ) local ch, CH = utfchar(replacementoffset + 1), utfchar(replacementoffset + 11) definitions["cz"] = { replacements = { { "ch", ch }, { "CH", CH } }, entries = { ["a"] = "a", ["á"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č", ["d"] = "d", ["ď"] = "d", ["e"] = "e", ["é"] = "e", ["ě"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", [ch] = "ch", ["i"] = "i", ["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["ň"] = "n", ["o"] = "o", ["ó"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["ř"] = "ř", ["s"] = "s", ["š"] = "š", ["t"] = "t", ["ť"] = "t", ["u"] = "u", ["ú"] = "u", ["ů"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["ý"] = "y", ["z"] = "z", ["ž"] = "ž", }, orders = { "a", "á", "b", "c", "č", "d", "ď", "e", "é", "ě", "f", "g", "h", ch, "i", "í", "j", "k", "l", "m", "n", "ň", "o", "ó", "p", "q", "r", "ř", "s", "š", "t", "ť", "u", "ú", "ů", "v", "w", "x", "y", "ý", "z", "ž", }, upper = { ch = CH, }, lower = { CH = ch, } } definitions["cs"] = { parent = "cz" } --- Slovak. -- Vowel and consonant quantities, "ď", "ľ", "ň", "ť", "ô", and "ä" are treated -- indifferently as their base character, as in my dictionary. If you prefer them -- to affect collation order, then use the values given in the comments. We could -- define an additional vector for that. local dz, DZ = utfchar(replacementoffset + 1), utfchar(replacementoffset + 11) local dzh, DZH = utfchar(replacementoffset + 2), utfchar(replacementoffset + 12) local ch, CH = utfchar(replacementoffset + 3), utfchar(replacementoffset + 13) definitions["sk"] = { replacements = { { "dz", dz }, { "dz", DZ }, { "dž", dzh }, { "dž", DZH }, { "ch", ch }, { "ch", CH }, }, entries = { ["a"] = "a", ["á"] = "a", ["ä"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č", ["d"] = "d", ["ď"] = "d", [dz] = "dz", [dzh] = "dž", ["e"] = "e", ["é"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", [ch] = "ch", ["i"] = "i", ["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["ĺ"] = "l", ["ľ"] = "l", ["m"] = "m", ["n"] = "n", ["ň"] = "n", ["o"] = "o", ["ó"] = "o", ["ô"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["ŕ"] = "r", ["s"] = "s", ["š"] = "š", ["t"] = "t", ["ť"] = "t", ["u"] = "u", ["ú"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["ý"] = "y", ["z"] = "z", ["ž"] = "ž", }, orders = { "a", "á", "ä", "b", "c", "č", "d", "ď", dz, dzh, "e", "é", "f", "g", "h", ch, "i", "í", "j", "k", "l", "ĺ", "ľ", "m", "n", "ň", "o", "ó", "ô", "p", "q", "r", "ŕ", "s", "š", "t", "ť", "u", "ú", "v", "w", "x", "y", "ý", "z", "ž", }, upper = { dz = DZ, dzh = DZH, ch = CH, }, lower = { DZ = dz, DZH = dzh, CH = ch, } } --- Croatian local dzh, DZH = utfchar(replacementoffset + 1), utfchar(replacementoffset + 11) local lj, LJ = utfchar(replacementoffset + 2), utfchar(replacementoffset + 12) local nj, NJ = utfchar(replacementoffset + 3), utfchar(replacementoffset + 13) definitions["hr"] = { replacements = { { "dž", dzh }, { "DŽ", DZH }, { "lj", lj }, { "LJ", LJ }, { "nj", nj }, { "NJ", NJ }, }, entries = { ["a"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č", ["ć"] = "ć", ["d"] = "d", [dzh] = "dž", ["đ"] = "đ", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", [lj] = "lj", ["m"] = "m", ["n"] = "n", [nj] = "nj", ["o"] = "o", ["p"] = "p", ["r"] = "r", ["s"] = "s", ["š"] = "š", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["z"] = "z", ["ž"] = "ž", }, orders = { "a", "b", "c", "č", "ć", "d", dzh, "đ", "e", "f", "g", "h", "i", "j", "k", "l", lj, "m", "n", nj, "o", "p", "r", "s", "š", "t", "u", "v", "z", "ž", }, upper = { dzh = DZH, lj = LJ, nj = NJ, }, lower = { DZH = dzh, LJ = lj, NJ = nj, } } --- Serbian definitions["sr"] = { entries = { ["а"] = "а", ["б"] = "б", ["в"] = "в", ["г"] = "г", ["д"] = "д", ["ђ"] = "ђ", ["е"] = "е", ["ж"] = "ж", ["з"] = "з", ["и"] = "и", ["ј"] = "ј", ["к"] = "к", ["л"] = "л", ["љ"] = "љ", ["м"] = "м", ["н"] = "н", ["њ"] = "њ", ["о"] = "о", ["п"] = "п", ["р"] = "р", ["с"] = "с", ["т"] = "т", ["ћ"] = "ћ", ["у"] = "у", ["ф"] = "ф", ["х"] = "х", ["ц"] = "ц", ["ч"] = "ч", ["џ"] = "џ", ["ш"] = "ш", }, orders = { "а", "б", "в", "г", "д", "ђ", "е", "ж", "з", "и", "ј", "к", "л", "љ", "м", "н", "њ", "о", "п", "р", "с", "т", "ћ", "у", "ф", "х", "ц", "ч", "џ", "ш", } } --- Transliteration: Russian|ISO9-1995 -- Keeping the same collation order as Russian (v.s.). -- Matches the tables from: -- http://bitbucket.org/phg/transliterator/src/tip/tex/context/third/transliterator/trans_tables_iso9.lua local yer = utfchar(replacementoffset + 1) definitions["ru-iso9"] = { replacements = { { "''", yer }, }, entries = { ["a"] = "a", ["b"] = "b", ["v"] = "v", ["g"] = "g", ["d"] = "d", ["e"] = "e", ["ë"] = "ë", ["ž"] = "ž", ["z"] = "z", ["i"] = "i", ["ì"] = "ì", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["f"] = "f", ["h"] = "h", ["c"] = "c", ["č"] = "č", ["š"] = "š", ["ŝ"] = "ŝ", ["ʺ"] = "ʺ", [yer] = "ʺ", ["y"] = "y", ["ʹ"] = "ʹ", ["'"] = "ʹ", ["ě"] = "ě", ["è"] = "è", ["û"] = "û", ["â"] = "â", ["û"] = "û", ["â"] = "â", }, orders = { "a", "b", "v", "g", "d", "e", "ë", "ž", "z", "i", "ì", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "č", "š", "ŝ", "ʺ", yer, "y", "ʹ", "'", "ě", "è", "û", "â", "û", "â", } } --- Transliteration: Old Slavonic|scientific -- Matches the tables from: -- http://bitbucket.org/phg/transliterator/src/tip/tex/context/third/transliterator/trans_tables_scntfc.lua local uk, UK = utfchar(replacementoffset + 1), utfchar(replacementoffset + 21) local tshe, TSHE = utfchar(replacementoffset + 2), utfchar(replacementoffset + 22) local sht, SHT = utfchar(replacementoffset + 3), utfchar(replacementoffset + 23) local ju, JU = utfchar(replacementoffset + 4), utfchar(replacementoffset + 24) local ja, JA = utfchar(replacementoffset + 5), utfchar(replacementoffset + 25) local je, JE = utfchar(replacementoffset + 6), utfchar(replacementoffset + 26) local ijus, IJUS = utfchar(replacementoffset + 7), utfchar(replacementoffset + 27) local ibigjus, IBIGJUS = utfchar(replacementoffset + 8), utfchar(replacementoffset + 28) local xi, XI = utfchar(replacementoffset + 9), utfchar(replacementoffset + 29) local psi, PSI = utfchar(replacementoffset + 10), utfchar(replacementoffset + 30) local theta, THETA = utfchar(replacementoffset + 11), utfchar(replacementoffset + 31) local shch, SHCH = utfchar(replacementoffset + 12), utfchar(replacementoffset + 32) definitions["ocs-scn"] = { replacements = { { "ou", uk }, { "OU", UK }, { "g’", tshe }, { "G’", TSHE }, { "št", sht }, { "ŠT", SHT }, { "ju", ju }, { "JU", JU }, { "ja", ja }, { "JA", JA }, { "je", je }, { "JE", JE }, { "ję", ijus }, { "JĘ", IJUS }, { "jǫ", ibigjus }, { "JǪ", IBIGJUS }, { "ks", xi }, { "KS", XI }, { "ps", psi }, { "PS", PSI }, { "th", theta }, { "TH", THETA }, { "šč", shch }, { "ŠČ", SHCH }, }, entries = { ["a"] = "a", ["b"] = "b", ["v"] = "v", ["g"] = "g", ["d"] = "d", ["e"] = "e", ["ž"] = "ž", ["ʒ"] = "ʒ", ["z"] = "z", ["i"] = "i", ["ï"] = "ï", [tshe] = "g’", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["f"] = "f", ["x"] = "x", ["o"] = "o", ["c"] = "c", ["č"] = "č", ["š"] = "š", [sht] = "št", [shch] = "šč", ["ъ"] = "ъ", ["y"] = "y", [uk] = "y", ["ь"] = "ь", ["ě"] = "ě", [ju] = "ju", [ja] = "ja", [je] = "je", ["ę"] = "ę", [ijus] = "ję", ["ǫ"] = "ǫ", [ibigjus] = "jǫ", [xi] = "ks", [psi] = "ps", [theta] = "th", ["ü"] = "ü", }, orders = { "a", "b", "v", "g", "d", "e", "ž", "ʒ", "z", "i", "ï", tshe, "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "x", "o", "c", "č", "š", sht, shch, "ъ", "y", uk, "ь", "ě", ju, ja, je, "ę", ijus, "ǫ", ibigjus, xi, psi, theta, "ü", }, upper = { uk = UK, tshe = TSHE, sht = SHT, ju = JU, ja = JA, je = JE, ijus = IJUS, ibigjus = IBIGJUS, xi = XI, psi = PSI, theta = THETA, shch = SHCH, }, lower = { UK = uk, TSHE = tshe, SHT = sht, JU = ju, JA = ja, JE = je, IJUS = ijus, IBIGJUS = ibigjus, XI = xi, PSI = psi, THETA = theta, SHCH = shch, }, } --- Norwegian (bokmål). definitions["no"] = { entries = { ["a"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", ["æ"] = "æ", ["ø"] = "ø", ["å"] = "å", }, orders = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å", } } --- Danish (-> Norwegian). definitions["da"] = { parent = "no" } --- Swedish definitions["sv"] = { entries = { ["a"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", ["å"] = "å", ["ä"] = "ä", ["ö"] = "ö", }, orders = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "å", "ä", "ö", } } --- Icelandic -- Treating quantities as allographs. definitions["is"] = { entries = { ["a"] = "a", ["á"] = "a", ["b"] = "b", ["d"] = "d", ["ð"] = "ð", ["e"] = "e", ["é"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["ó"] = "o", ["p"] = "p", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["ú"] = "u", ["v"] = "v", ["x"] = "x", ["y"] = "y", ["ý"] = "y", ["þ"] = "þ", ["æ"] = "æ", ["ö"] = "ö", }, orders = { "a", "á", "b", "d", "ð", "e", "é", "f", "g", "h", "i", "í", "j", "k", "l", "m", "n", "o", "ó", "p", "r", "s", "t", "u", "ú", "v", "x", "y", "ý", "þ", "æ", "ö", }, } --- Greek definitions["gr"] = { entries = { ["α"] = "α", ["ά"] = "α", ["ὰ"] = "α", ["ᾶ"] = "α", ["ᾳ"] = "α", ["ἀ"] = "α", ["ἁ"] = "α", ["ἄ"] = "α", ["ἂ"] = "α", ["ἆ"] = "α", ["ἁ"] = "α", ["ἅ"] = "α", ["ἃ"] = "α", ["ἇ"] = "α", ["ᾁ"] = "α", ["ᾴ"] = "α", ["ᾲ"] = "α", ["ᾷ"] = "α", ["ᾄ"] = "α", ["ᾂ"] = "α", ["ᾅ"] = "α", ["ᾃ"] = "α", ["ᾆ"] = "α", ["ᾇ"] = "α", ["β"] = "β", ["γ"] = "γ", ["δ"] = "δ", ["ε"] = "ε", ["έ"] = "ε", ["ὲ"] = "ε", ["ἐ"] = "ε", ["ἔ"] = "ε", ["ἒ"] = "ε", ["ἑ"] = "ε", ["ἕ"] = "ε", ["ἓ"] = "ε", ["ζ"] = "ζ", ["η"] = "η", ["η"] = "η", ["ή"] = "η", ["ὴ"] = "η", ["ῆ"] = "η", ["ῃ"] = "η", ["ἠ"] = "η", ["ἤ"] = "η", ["ἢ"] = "η", ["ἦ"] = "η", ["ᾐ"] = "η", ["ἡ"] = "η", ["ἥ"] = "η", ["ἣ"] = "η", ["ἧ"] = "η", ["ᾑ"] = "η", ["ῄ"] = "η", ["ῂ"] = "η", ["ῇ"] = "η", ["ᾔ"] = "η", ["ᾒ"] = "η", ["ᾕ"] = "η", ["ᾓ"] = "η", ["ᾖ"] = "η", ["ᾗ"] = "η", ["θ"] = "θ", ["ι"] = "ι", ["ί"] = "ι", ["ὶ"] = "ι", ["ῖ"] = "ι", ["ἰ"] = "ι", ["ἴ"] = "ι", ["ἲ"] = "ι", ["ἶ"] = "ι", ["ἱ"] = "ι", ["ἵ"] = "ι", ["ἳ"] = "ι", ["ἷ"] = "ι", ["ϊ"] = "ι", ["ΐ"] = "ι", ["ῒ"] = "ι", ["ῗ"] = "ι", ["κ"] = "κ", ["λ"] = "λ", ["μ"] = "μ", ["ν"] = "ν", ["ξ"] = "ξ", ["ο"] = "ο", ["ό"] = "ο", ["ὸ"] = "ο", ["ὀ"] = "ο", ["ὄ"] = "ο", ["ὂ"] = "ο", ["ὁ"] = "ο", ["ὅ"] = "ο", ["ὃ"] = "ο", ["π"] = "π", ["ρ"] = "ρ", ["ῤ"] = "ῤ", ["ῥ"] = "ῥ", ["σ"] = "σ", ["ς"] = "ς", ["τ"] = "τ", ["υ"] = "υ", ["ύ"] = "υ", ["ὺ"] = "υ", ["ῦ"] = "υ", ["ὐ"] = "υ", ["ὔ"] = "υ", ["ὒ"] = "υ", ["ὖ"] = "υ", ["ὑ"] = "υ", ["ὕ"] = "υ", ["ὓ"] = "υ", ["ὗ"] = "υ", ["ϋ"] = "υ", ["ΰ"] = "υ", ["ῢ"] = "υ", ["ῧ"] = "υ", ["φ"] = "φ", ["χ"] = "χ", ["ψ"] = "ω", ["ω"] = "ω", ["ώ"] = "ω", ["ὼ"] = "ω", ["ῶ"] = "ω", ["ῳ"] = "ω", ["ὠ"] = "ω", ["ὤ"] = "ω", ["ὢ"] = "ω", ["ὦ"] = "ω", ["ᾠ"] = "ω", ["ὡ"] = "ω", ["ὥ"] = "ω", ["ὣ"] = "ω", ["ὧ"] = "ω", ["ᾡ"] = "ω", ["ῴ"] = "ω", ["ῲ"] = "ω", ["ῷ"] = "ω", ["ᾤ"] = "ω", ["ᾢ"] = "ω", ["ᾥ"] = "ω", ["ᾣ"] = "ω", ["ᾦ"] = "ω", ["ᾧ"] = "ω", }, orders = { "α", "ά", "ὰ", "ᾶ", "ᾳ", "ἀ", "ἁ", "ἄ", "ἂ", "ἆ", "ἁ", "ἅ", "ἃ", "ἇ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾂ", "ᾅ", "ᾃ", "ᾆ", "ᾇ", "β", "γ", "δ", "ε", "έ", "ὲ", "ἐ", "ἔ", "ἒ", "ἑ", "ἕ", "ἓ", "ζ", "η", "η", "ή", "ὴ", "ῆ", "ῃ", "ἠ", "ἤ", "ἢ", "ἦ", "ᾐ", "ἡ", "ἥ", "ἣ", "ἧ", "ᾑ", "ῄ", "ῂ", "ῇ", "ᾔ", "ᾒ", "ᾕ", "ᾓ", "ᾖ", "ᾗ", "θ", "ι", "ί", "ὶ", "ῖ", "ἰ", "ἴ", "ἲ", "ἶ", "ἱ", "ἵ", "ἳ", "ἷ", "ϊ", "ΐ", "ῒ", "ῗ", "κ", "λ", "μ", "ν", "ξ", "ο", "ό", "ὸ", "ὀ", "ὄ", "ὂ", "ὁ", "ὅ", "ὃ", "π", "ρ", "ῤ", "ῥ", "σ", "ς", "τ", "υ", "ύ", "ὺ", "ῦ", "ὐ", "ὔ", "ὒ", "ὖ", "ὑ", "ὕ", "ὓ", "ὗ", "ϋ", "ΰ", "ῢ", "ῧ", "φ", "χ", "ψ", "ω", "ώ", "ὼ", "ῶ", "ῳ", "ὠ", "ὤ", "ὢ", "ὦ", "ᾠ", "ὡ", "ὥ", "ὣ", "ὧ", "ᾡ", "ῴ", "ῲ", "ῷ", "ᾤ", "ᾢ", "ᾥ", "ᾣ", "ᾦ", "ᾧ", }, } --- Latin -- Treating the post-classical fricatives “j” and “v” as “i” and “u” -- respectively. definitions["la"] = { replacements = { { "æ", "ae" }, { "Æ", "AE" }, }, entries = { ["a"] = "a", ["ā"] = "a", ["ă"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["ē"] = "e", ["ĕ"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["ī"] = "i", ["ĭ"] = "i", ["j"] = "i", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["ō"] = "o", ["ŏ"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["ū"] = "u", ["ŭ"] = "u", ["v"] = "u", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["ȳ"] = "y", ["y̆"] = "y", ["z"] = "z", }, orders = { "a", "ā", "ă", "b", "c", "d", "e", "ē", "ĕ", "f", "g", "h", "i", "ī", "ĭ", "j", "k", "l", "m", "n", "o", "ō", "ŏ", "p", "q", "r", "s", "t", "u", "ū", "ŭ", "v", "w", "x", "y", "ȳ", "y̆", "z", } } --- Italian definitions["it"] = { entries = { ["a"] = "a", ["á"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["é"] = "e", ["è"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["í"] = "i", ["ì"] = "i", ["j"] = "i", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["ó"] = "o", ["ò"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["ú"] = "u", ["ù"] = "u", ["v"] = "u", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", }, orders = { "a", "á", "b", "c", "d", "e", "é", "è", "f", "g", "h", "i", "í", "ì", "j", "k", "l", "m", "n", "o", "ó", "ò", "p", "q", "r", "s", "t", "u", "ú", "ù", "v", "w", "x", "y", "z", } } --- Romanian definitions["ro"] = { entries = { ["a"] = "a", ["ă"] = "ă", ["â"] = "â", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["î"] = "î", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["ș"] = "ș", ["t"] = "t", ["ț"] = "ț", ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", }, orders = { "a", "ă", "â", "b", "c", "d", "e", "f", "g", "h", "i", "î", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "ș", "t", "ț", "u", "v", "w", "x", "y", "z", } } --- Spanish definitions["es"] = { entries = { ["a"] = "a", ["á"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e", ["é"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["ñ"] = "ñ", ["o"] = "o", ["ó"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["ú"] = "u", ["ü"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", }, orders = { "a", "á", "b", "c", "d", "e", "é", "f", "g", "h", "i", "í", "j", "k", "l", "m", "n", "ñ", "o", "ó", "p", "q", "r", "s", "t", "u", "ú", "ü", "v", "w", "x", "y", "z", } } --- Portuguese definitions["pt"] = { entries = { ["a"] = "a", ["á"] = "a", ["â"] = "a", ["ã"] = "a", ["à"] = "a", ["b"] = "b", ["c"] = "c", ["ç"] = "c", ["d"] = "d", ["e"] = "e", ["é"] = "e", ["ê"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["ó"] = "o", ["ô"] = "o", ["õ"] = "o", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t", ["u"] = "u", ["ú"] = "u", ["ü"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", }, orders = { "a", "á", "â", "ã", "à", "b", "c", "ç", "d", "e", "é", "ê", "f", "g", "h", "i", "í", "j", "k", "l", "m", "n", "o", "ó", "ô", "õ", "p", "q", "r", "s", "t", "u", "ú", "ü", "v", "w", "x", "y", "z", } } --- Lithuanian local ch, CH = utfchar(replacementoffset + 1), utfchar(replacementoffset + 11) definitions["lt"] = { replacements = { { "ch", ch }, { "CH", CH} }, entries = { ["a"] = "a", ["ą"] = "a", ["b"] = "b", ["c"] = "c", [ch ] = "c", ["č"] = "č", ["d"] = "d", ["e"] = "e", ["ę"] = "e", ["ė"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["į"] = "i", ["y"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["r"] = "r", ["s"] = "s", ["š"] = "š", ["t"] = "t", ["u"] = "u", ["ų"] = "u", ["ū"] = "u", ["v"] = "v", ["z"] = "z", ["ž"] = "ž", }, orders = { "a", "ą", "b", "c", ch, "č", "d", "e", "ę", "ė", "f", "g", "h", "i", "į", "y", "j", "k", "l", "m", "n", "o", "p", "r", "s", "š", "t", "u", "ų", "ū", "v", "z", "ž", }, lower = { ch = CH, }, upper = { CH = ch, }, } --- Latvian definitions["lv"] = { entries = { ["a"] = "a", ["ā"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č", ["d"] = "d", ["e"] = "e", ["ē"] = "e", ["f"] = "f", ["g"] = "g", ["ģ"] = "ģ", ["h"] = "h", ["i"] = "i", ["ī"] = "i", ["j"] = "j", ["k"] = "k", ["ķ"] = "ķ", ["l"] = "l", ["ļ"] = "ļ", ["m"] = "m", ["n"] = "n", ["ņ"] = "ņ", ["o"] = "o", ["ō"] = "o", ["p"] = "p", ["r"] = "r", ["ŗ"] = "ŗ", ["s"] = "s", ["š"] = "š", ["t"] = "t", ["u"] = "u", ["ū"] = "u", ["v"] = "v", ["z"] = "z", ["ž"] = "ž", }, orders = { "a", "ā", "b", "c", "č", "d", "e", "ē", "f", "g", "ģ", "h", "i", "ī", "j", "k", "ķ", "l", "ļ", "m", "n", "ņ", "o", "ō", "p", "r", "ŗ", "s", "š", "t", "u", "ū", "v", "z", "ž", } } --- Hungarian -- Helpful but disturbing: -- http://en.wikipedia.org/wiki/Hungarian_alphabet#Alphabetical_ordering_.28collation.29 -- (In short: you'd have to analyse word-compounds to realize a correct order -- for sequences like “nny”, “ssz”, and “zsz”. This is left as an exercise to -- the reader…) local cs, CS = utfchar(replacementoffset + 1), utfchar(replacementoffset + 11) local dz, DZ = utfchar(replacementoffset + 2), utfchar(replacementoffset + 12) local dzs, DZS = utfchar(replacementoffset + 3), utfchar(replacementoffset + 13) local gy, GY = utfchar(replacementoffset + 4), utfchar(replacementoffset + 14) local ly, LY = utfchar(replacementoffset + 5), utfchar(replacementoffset + 15) local ny, NY = utfchar(replacementoffset + 6), utfchar(replacementoffset + 16) local sz, SZ = utfchar(replacementoffset + 7), utfchar(replacementoffset + 17) local ty, TY = utfchar(replacementoffset + 8), utfchar(replacementoffset + 18) local zs, ZS = utfchar(replacementoffset + 9), utfchar(replacementoffset + 19) definitions["hu"] = { replacements = { { "cs", cs }, { "CS", CS }, { "dz", dz }, { "DZ", DZ }, { "dzs", dzs }, { "DZS", DZS }, { "gy", gy }, { "GY", GY }, { "ly", ly }, { "LY", LY }, { "ny", ny }, { "NY", NY }, { "sz", sz }, { "SZ", SZ }, { "ty", ty }, { "TY", TY }, { "zs", zs }, { "ZS", ZS }, }, entries = { ["a"] = "a", ["á"] = "a", ["b"] = "b", ["c"] = "c", [cs ] = "cs", ["d"] = "d", [dz ] = "dz", [dzs] = "dzs", ["e"] = "e", ["é"] = "e", ["f"] = "f", ["g"] = "g", [gy ] = "gy", ["h"] = "h", ["i"] = "i", ["í"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", [ly ] = "ly", ["m"] = "m", ["n"] = "n", [ny ] = "ny", ["o"] = "o", ["ó"] = "o", ["ö"] = "ö", ["ő"] = "ö", ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", [sz ] = "sz", ["t"] = "t", [ty ] = "ty", ["u"] = "u", ["ú"] = "u", ["ü"] = "ü", ["ű"] = "ü", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z", [zs ] = "zs", }, orders = { "a", "á", "b", "c", cs, "d", dz, dzs, "e", "é", "f", "g", gy, "h", "i", "í", "j", "k", "l", ly, "m", "n", ny, "o", "ó", "ö", "ő", "p", "q", "r", "s", sz, "t", ty, "u", "ú", "ü", "ű", "v", "w", "x", "y", "z", zs, }, lower = { CS = cs, DZ = dz, DZS = dzs, GY = gy, LY = ly, NY = ny, SZ = sz, TY = ty, ZS = zs, }, upper = { cs = CS, dz = DZ, dzs = DZS, gy = GY, ly = LY, ny = NY, sz = SZ, ty = TY, zs = ZS, }, } --- Estonian definitions["et"] = { entries = { -- w x y are used for foreign words only ["a"] = "a", ["b"] = "b", ["d"] = "d", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o", ["p"] = "p", ["r"] = "r", ["s"] = "s", ["š"] = "š", ["z"] = "z", ["ž"] = "ž", ["t"] = "t", ["u"] = "u", ["v"] = "v", ["w"] = "v", ["õ"] = "õ", ["ä"] = "ä", ["ö"] = "ö", ["ü"] = "ü", ["x"] = "x", ["y"] = "y", }, orders = { "a", "b", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "š", "z", "ž", "t", "u", "v", "w", "õ", "ä", "ö", "ü", "x", "y", } } --- Korean local fschars = characters.fschars local function firstofsplit(first) local fs = fschars[first] or first -- leadconsonant return fs, fs -- entry, tag end definitions["kr"] = { firstofsplit = firstofsplit, orders = { "ㄱ", "ㄴ", "ㄷ", "ㄹ", "ㅁ", "ㅂ", "ㅅ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", } } -- Japanese definitions["jp"] = { replacements = { { "ぁ", "あ" }, { "ぃ", "い" }, { "ぅ", "う" }, { "ぇ", "え" }, { "ぉ", "お" }, { "っ", "つ" }, { "ゃ", "や" }, { "ゅ", "ゆ" }, { "ょ", "よ" }, }, entries = { ["あ"] = "あ", ["い"] = "い", ["う"] = "う", ["え"] = "え", ["お"] = "お", ["か"] = "か", ["き"] = "き", ["く"] = "く", ["け"] = "け", ["こ"] = "こ", ["さ"] = "さ", ["し"] = "し", ["す"] = "す", ["せ"] = "せ", ["そ"] = "そ", ["た"] = "た", ["ち"] = "ち", ["つ"] = "つ", ["て"] = "て", ["と"] = "と", ["な"] = "な", ["に"] = "に", ["ぬ"] = "ぬ", ["ね"] = "ね", ["の"] = "の", ["は"] = "は", ["ひ"] = "ひ", ["ふ"] = "ふ", ["へ"] = "へ", ["ほ"] = "ほ", ["ま"] = "ま", ["み"] = "み", ["む"] = "む", ["め"] = "め", ["も"] = "も", ["や"] = "や", ["ゆ"] = "ゆ", ["よ"] = "よ", ["ら"] = "ら", ["り"] = "り", ["る"] = "る", ["れ"] = "れ", ["ろ"] = "ろ", ["わ"] = "わ", ["ゐ"] = "ゐ", ["ゑ"] = "ゑ", ["を"] = "を", ["ん"] = "ん", }, orders = { "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り", "る", "れ", "ろ", "わ", "ゐ", "ゑ", "を", "ん", } } context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-03.mkii0000644000175000017500000000227511754241457024042 0ustar norbertnorbert%D \module %D [ file=x-fig-03, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Inclusion (II), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifx \undefined \convertMPtoPDF \input supp-pdf.tex \fi \ifx \undefined \includefigurefile \else \expandafter \endinput \fi \gdef\getfigurefile#1% {\expandafter\ifx\csname x-fig-f-#1\endcsname\relax \currentfigurefile \else \csname x-fig-f-#1\endcsname \fi} \gdef\getfigurepage#1% {\expandafter\ifx\csname x-fig-p-#1\endcsname\relax 1% \else \csname x-fig-p-#1\endcsname \fi} \gdef\setfiguredata#1#2#3% {\gdef\currentfigurefile{#2}% \expandafter\gdef\csname x-fig-f-#1\endcsname{#2}% \expandafter\gdef\csname x-fig-p-#1\endcsname{#3}} \def\includefigurefile#1#% {\doincludefigurefile{#1}} \def\doincludefigurefile#1#2% {\edef\next{\noexpand\pdfimage #1 page \getfigurepage{#2} {\getfigurefile{#2}.pdf}}% \next} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-scr.mkiv0000644000175000017500000000375511754241457024323 0ustar norbertnorbert%D \module %D [ file=math-scr, %D version=2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Scripts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Scripts} \unprotect %D These macros were first needed by Frits (Gajes) Spijker %D (of the Math4All project that we participate in), and used %D for typesetting the minus sign that is keyed into scientific %D calculators. We use the monospaced signs, that we also define %D as symbol, so that they can be overloaded. \def\math_scripts_raised_symbol#1% {\mathchoice {\math_scripts_raised_symbol_indeed5\tf {#1}}% {\math_scripts_raised_symbol_indeed5\tf {#1}}% {\math_scripts_raised_symbol_indeed4\tx {#1}}% {\math_scripts_raised_symbol_indeed3\txx{#1}}} \def\math_scripts_raised_symbol_indeed#1#2#3% {\mathord{{#2\raise.#1ex\hbox{#2\symbol[#3]}}}} \def\math_scripts_raised_number#1% {\mathchoice {\math_scripts_raised_number_indeed\tf {#1}}% {\math_scripts_raised_number_indeed\tf {#1}}% {\math_scripts_raised_number_indeed\tx {#1}}% {\math_scripts_raised_number_indeed\txx{#1}}} \def\math_scripts_raised_number_indeed#1#2% {\setbox\scratchbox\hbox{0}% \mathord{\hbox to \wd\scratchbox{\hss#1\symbol[#2]\hss}}} \definesymbol[positive] [\getglyph{Mono}{+}] \definesymbol[negative] [\getglyph{Mono}{-}] \definesymbol[zeroamount][\getglyph{Mono}{-}] \unexpanded\def\negative {\math_scripts_raised_symbol{negative}} \unexpanded\def\positive {\math_scripts_raised_symbol{positive}} \unexpanded\def\zeroamount{\math_scripts_raised_number{zeroamount}} %D How negative such a symbol looks is demonstrated in: %D $\negative 10^{\negative 10^{\negative 10}}$. % \setuptextformulas % why here % [\c!size=\v!normal] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mod.ctx0000644000175000017500000000131412130411274023422 0ustar norbertnorbert TeX Documentation Generator mtxrun --script modules --convert --prep global prep purge mod-01 context-2013.05.28.20130704/texmf-dist/tex/context/base/math-ams.mkii0000644000175000017500000004110411754241457024265 0ustar norbertnorbert%D \module %D [ file=math-ams, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, %D subtitle=AMS Specials, %D author={Hans Hagen \& Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % maybe we should just include these into the default tex one \definefamilysynonym [default] [blackboard] [mb] \startmathcollection [default] \definemathsymbol [varGamma] [ord] [letters] ["00] \definemathsymbol [varDelta] [ord] [letters] ["01] \definemathsymbol [varTheta] [ord] [letters] ["02] \definemathsymbol [varLambda] [ord] [letters] ["03] \definemathsymbol [varXi] [ord] [letters] ["04] \definemathsymbol [varPi] [ord] [letters] ["05] \definemathsymbol [varSigma] [ord] [letters] ["06] \definemathsymbol [varUpsilon] [ord] [letters] ["07] \definemathsymbol [varPhi] [ord] [letters] ["08] \definemathsymbol [varPsi] [ord] [letters] ["09] \definemathsymbol [varOmega] [ord] [letters] ["0A] \stopmathcollection \startmathcollection[default] \definemathsymbol [internalAnd] [rel] [operators] ["26] \stopmathcollection \startmathcollection [default] \definemathsymbol [boxdot] [bin] [ma] ["00] \definemathsymbol [boxplus] [bin] [ma] ["01] \definemathsymbol [boxtimes] [bin] [ma] ["02] \definemathsymbol [square] [ord] [ma] ["03] \definemathsymbol [Box] [ord] [ma] ["03] % square \definemathsymbol [blacksquare] [ord] [ma] ["04] \definemathsymbol [centerdot] [bin] [ma] ["05] \definemathsymbol [Diamond] [ord] [ma] ["06] \definemathsymbol [lozenge] [ord] [ma] ["06] % Diamond \definemathsymbol [blacklozenge] [ord] [ma] ["07] \definemathsymbol [circlearrowright] [rel] [ma] ["08] \definemathsymbol [circlearrowleft] [rel] [ma] ["09] \definemathsymbol [rightleftharpoons] [rel] [ma] ["0A] \definemathsymbol [leftrightharpoons] [rel] [ma] ["0B] \definemathsymbol [boxminus] [bin] [ma] ["0C] \definemathsymbol [Vdash] [rel] [ma] ["0D] \definemathsymbol [Vvdash] [rel] [ma] ["0E] \definemathsymbol [vDash] [rel] [ma] ["0F] \definemathsymbol [twoheadrightarrow] [rel] [ma] ["10] \definemathsymbol [twoheadleftarrow] [rel] [ma] ["11] \definemathsymbol [leftleftarrows] [rel] [ma] ["12] \definemathsymbol [rightrightarrows] [rel] [ma] ["13] \definemathsymbol [upuparrows] [rel] [ma] ["14] \definemathsymbol [downdownarrows] [rel] [ma] ["15] \definemathsymbol [upharpoonright] [rel] [ma] ["16] \definemathsymbol [restriction] [rel] [ma] ["16] \definemathsymbol [downharpoonright] [rel] [ma] ["17] \definemathsymbol [upharpoonleft] [rel] [ma] ["18] \definemathsymbol [downharpoonleft] [rel] [ma] ["19] \definemathsymbol [rightarrowtail] [rel] [ma] ["1A] \definemathsymbol [leftarrowtail] [rel] [ma] ["1B] \definemathsymbol [leftrightarrows] [rel] [ma] ["1C] \definemathsymbol [rightleftarrows] [rel] [ma] ["1D] \definemathsymbol [Lsh] [rel] [ma] ["1E] \definemathsymbol [Rsh] [rel] [ma] ["1F] \definemathsymbol [rightsquigarrow] [rel] [ma] ["20] \definemathsymbol [leadsto] [rel] [ma] ["20] % rightsquigarrow \definemathsymbol [leftrightsquigarrow] [rel] [ma] ["21] \definemathsymbol [looparrowleft] [rel] [ma] ["22] \definemathsymbol [looparrowright] [rel] [ma] ["23] \definemathsymbol [circeq] [rel] [ma] ["24] \definemathsymbol [succsim] [rel] [ma] ["25] \definemathsymbol [gtrsim] [rel] [ma] ["26] \definemathsymbol [gtrapprox] [rel] [ma] ["27] \definemathsymbol [multimap] [rel] [ma] ["28] \definemathsymbol [therefore] [rel] [ma] ["29] \definemathsymbol [because] [rel] [ma] ["2A] \definemathsymbol [doteqdot] [rel] [ma] ["2B] \definemathsymbol [Doteq] [rel] [ma] ["2B] % doteqdot \definemathsymbol [triangleq] [rel] [ma] ["2C] \definemathsymbol [precsim] [rel] [ma] ["2D] \definemathsymbol [lesssim] [rel] [ma] ["2E] \definemathsymbol [lessapprox] [rel] [ma] ["2F] \definemathsymbol [eqslantless] [rel] [ma] ["30] \definemathsymbol [eqslantgtr] [rel] [ma] ["31] \definemathsymbol [curlyeqprec] [rel] [ma] ["32] \definemathsymbol [curlyeqsucc] [rel] [ma] ["33] \definemathsymbol [preccurlyeq] [rel] [ma] ["34] \definemathsymbol [leqq] [rel] [ma] ["35] \definemathsymbol [leqslant] [rel] [ma] ["36] \definemathsymbol [lessgtr] [rel] [ma] ["37] \definemathsymbol [backprime] [ord] [ma] ["38] \definemathsymbol [dabar@] [ord] [ma] ["39] % @ \definemathsymbol [risingdotseq] [rel] [ma] ["3A] \definemathsymbol [fallingdotseq] [rel] [ma] ["3B] \definemathsymbol [succcurlyeq] [rel] [ma] ["3C] \definemathsymbol [geqq] [rel] [ma] ["3D] \definemathsymbol [geqslant] [rel] [ma] ["3E] \definemathsymbol [gtrless] [rel] [ma] ["3F] \definemathsymbol [sqsubset] [rel] [ma] ["40] \definemathsymbol [sqsupset] [rel] [ma] ["41] \definemathsymbol [vartriangleright] [rel] [ma] ["42] \definemathsymbol [rhd] [bin] [ma] ["42] \definemathsymbol [lhd] [bin] [ma] ["43] \definemathsymbol [vartriangleleft] [rel] [ma] ["43] \definemathsymbol [trianglerighteq] [rel] [ma] ["44] \definemathsymbol [unrhd] [bin] [ma] ["44] % trianglerighteq \definemathsymbol [trianglelefteq] [rel] [ma] ["45] \definemathsymbol [unlhd] [bin] [ma] ["45] % trianglelefteq \definemathsymbol [bigstar] [ord] [ma] ["46] \definemathsymbol [between] [rel] [ma] ["47] \definemathsymbol [blacktriangledown] [ord] [ma] ["48] \definemathsymbol [blacktriangleright] [rel] [ma] ["49] \definemathsymbol [blacktriangleleft] [rel] [ma] ["4A] \definemathsymbol [vartriangle] [rel] [ma] ["4D] \definemathsymbol [triangleup] [ord] [ma] ["4D] % vartriangle \definemathsymbol [blacktriangle] [ord] [ma] ["4E] \definemathsymbol [triangledown] [ord] [ma] ["4F] \definemathsymbol [eqcirc] [rel] [ma] ["50] \definemathsymbol [lesseqgtr] [rel] [ma] ["51] \definemathsymbol [gtreqless] [rel] [ma] ["52] \definemathsymbol [lesseqqgtr] [rel] [ma] ["53] \definemathsymbol [gtreqqless] [rel] [ma] ["54] \definemathsymbol [Rrightarrow] [rel] [ma] ["56] \definemathsymbol [Lleftarrow] [rel] [ma] ["57] \definemathsymbol [veebar] [bin] [ma] ["59] \definemathsymbol [barwedge] [bin] [ma] ["5A] \definemathsymbol [doublebarwedge] [bin] [ma] ["5B] \definemathsymbol [angle] [ord] [ma] ["5C] \definemathsymbol [measuredangle] [ord] [ma] ["5D] \definemathsymbol [sphericalangle] [ord] [ma] ["5E] \definemathsymbol [varpropto] [rel] [ma] ["5F] \definemathsymbol [smallsmile] [rel] [ma] ["60] \definemathsymbol [smallfrown] [rel] [ma] ["61] \definemathsymbol [Subset] [rel] [ma] ["62] \definemathsymbol [Supset] [rel] [ma] ["63] \definemathsymbol [Cup] [bin] [ma] ["64] \definemathsymbol [doublecup] [bin] [ma] ["64] % Cup \definemathsymbol [Cap] [bin] [ma] ["65] \definemathsymbol [doublecap] [bin] [ma] ["65] \definemathsymbol [curlywedge] [bin] [ma] ["66] \definemathsymbol [curlyvee] [bin] [ma] ["67] \definemathsymbol [leftthreetimes] [bin] [ma] ["68] \definemathsymbol [rightthreetimes] [bin] [ma] ["69] \definemathsymbol [subseteqq] [rel] [ma] ["6A] \definemathsymbol [supseteqq] [rel] [ma] ["6B] \definemathsymbol [bumpeq] [rel] [ma] ["6C] \definemathsymbol [Bumpeq] [rel] [ma] ["6D] \definemathsymbol [llless] [rel] [ma] ["6E] \definemathsymbol [lll] [rel] [ma] ["6E] % llless \definemathsymbol [gggtr] [rel] [ma] ["6F] \definemathsymbol [ggg] [rel] [ma] ["6F] % gggtr \definemathsymbol [ulcorner] [open] [ma] ["70] [ma] ["70] \definemathsymbol [urcorner] [close] [ma] ["71] [ma] ["71] \definemathsymbol [circledS] [ord] [ma] ["73] \definemathsymbol [pitchfork] [rel] [ma] ["74] \definemathsymbol [dotplus] [bin] [ma] ["75] \definemathsymbol [backsim] [rel] [ma] ["76] \definemathsymbol [backsimeq] [rel] [ma] ["77] \definemathsymbol [llcorner] [open] [ma] ["78] [ma] ["78] \definemathsymbol [lrcorner] [close] [ma] ["79] [ma] ["79] \definemathsymbol [complement] [ord] [ma] ["7B] \definemathsymbol [intercal] [bin] [ma] ["7C] \definemathsymbol [circledcirc] [bin] [ma] ["7D] \definemathsymbol [circledast] [bin] [ma] ["7E] \definemathsymbol [circleddash] [bin] [ma] ["7F] \stopmathcollection \startmathcollection [default] \definemathcommand [integers] {\blackboard{Z}} \definemathcommand [reals] {\blackboard{R}} \definemathcommand [rationals] {\blackboard{Q}} \definemathcommand [naturalnumbers] {\blackboard{N}} \definemathcommand [complexes] {\blackboard{C}} \definemathcommand [primes] {\blackboard{P}} \stopmathcollection \startmathcollection [default] \definemathsymbol [lvertneqq] [rel] [mb] ["00] \definemathsymbol [gvertneqq] [rel] [mb] ["01] \definemathsymbol [nleq] [rel] [mb] ["02] \definemathsymbol [ngeq] [rel] [mb] ["03] \definemathsymbol [nless] [rel] [mb] ["04] \definemathsymbol [ngtr] [rel] [mb] ["05] \definemathsymbol [nprec] [rel] [mb] ["06] \definemathsymbol [nsucc] [rel] [mb] ["07] \definemathsymbol [lneqq] [rel] [mb] ["08] \definemathsymbol [gneqq] [rel] [mb] ["09] \definemathsymbol [nleqslant] [rel] [mb] ["0A] \definemathsymbol [ngeqslant] [rel] [mb] ["0B] \definemathsymbol [lneq] [rel] [mb] ["0C] \definemathsymbol [gneq] [rel] [mb] ["0D] \definemathsymbol [npreceq] [rel] [mb] ["0E] \definemathsymbol [nsucceq] [rel] [mb] ["0F] \definemathsymbol [precnsim] [rel] [mb] ["10] \definemathsymbol [succnsim] [rel] [mb] ["11] \definemathsymbol [lnsim] [rel] [mb] ["12] \definemathsymbol [gnsim] [rel] [mb] ["13] \definemathsymbol [nleqq] [rel] [mb] ["14] \definemathsymbol [ngeqq] [rel] [mb] ["15] \definemathsymbol [precneqq] [rel] [mb] ["16] \definemathsymbol [succneqq] [rel] [mb] ["17] \definemathsymbol [precnapprox] [rel] [mb] ["18] \definemathsymbol [succnapprox] [rel] [mb] ["19] \definemathsymbol [lnapprox] [rel] [mb] ["1A] \definemathsymbol [gnapprox] [rel] [mb] ["1B] \definemathsymbol [nsim] [rel] [mb] ["1C] \definemathsymbol [ncong] [rel] [mb] ["1D] \definemathsymbol [diagup] [ord] [mb] ["1E] \definemathsymbol [diagdown] [ord] [mb] ["1F] \definemathsymbol [varsubsetneq] [rel] [mb] ["20] \definemathsymbol [varsupsetneq] [rel] [mb] ["21] \definemathsymbol [nsubseteqq] [rel] [mb] ["22] \definemathsymbol [nsupseteqq] [rel] [mb] ["23] \definemathsymbol [subsetneqq] [rel] [mb] ["24] \definemathsymbol [supsetneqq] [rel] [mb] ["25] \definemathsymbol [varsubsetneqq] [rel] [mb] ["26] \definemathsymbol [varsupsetneqq] [rel] [mb] ["27] \definemathsymbol [subsetneq] [rel] [mb] ["28] \definemathsymbol [supsetneq] [rel] [mb] ["29] \definemathsymbol [nsubseteq] [rel] [mb] ["2A] \definemathsymbol [nsupseteq] [rel] [mb] ["2B] \definemathsymbol [nparallel] [rel] [mb] ["2C] \definemathsymbol [nmid] [rel] [mb] ["2D] \definemathsymbol [nshortmid] [rel] [mb] ["2E] \definemathsymbol [nshortparallel] [rel] [mb] ["2F] \definemathsymbol [nvdash] [rel] [mb] ["30] \definemathsymbol [nVdash] [rel] [mb] ["31] \definemathsymbol [nvDash] [rel] [mb] ["32] \definemathsymbol [nVDash] [rel] [mb] ["33] \definemathsymbol [ntrianglerighteq] [rel] [mb] ["34] \definemathsymbol [ntrianglelefteq] [rel] [mb] ["35] \definemathsymbol [ntriangleleft] [rel] [mb] ["36] \definemathsymbol [ntriangleright] [rel] [mb] ["37] \definemathsymbol [nleftarrow] [rel] [mb] ["38] \definemathsymbol [nrightarrow] [rel] [mb] ["39] \definemathsymbol [nLeftarrow] [rel] [mb] ["3A] \definemathsymbol [nRightarrow] [rel] [mb] ["3B] \definemathsymbol [nLeftrightarrow] [rel] [mb] ["3C] \definemathsymbol [nleftrightarrow] [rel] [mb] ["3D] \definemathsymbol [divideontimes] [bin] [mb] ["3E] \definemathsymbol [varnothing] [ord] [mb] ["3F] \definemathsymbol [nexists] [ord] [mb] ["40] \definemathsymbol [Finv] [ord] [mb] ["60] \definemathsymbol [Game] [ord] [mb] ["61] \definemathsymbol [mho] [ord] [mb] ["66] \definemathsymbol [eth] [ord] [mb] ["67] \definemathsymbol [eqsim] [rel] [mb] ["68] \definemathsymbol [beth] [ord] [mb] ["69] \definemathsymbol [gimel] [ord] [mb] ["6A] \definemathsymbol [daleth] [ord] [mb] ["6B] \definemathsymbol [lessdot] [bin] [mb] ["6C] \definemathsymbol [gtrdot] [bin] [mb] ["6D] \definemathsymbol [ltimes] [bin] [mb] ["6E] \definemathsymbol [rtimes] [bin] [mb] ["6F] \definemathsymbol [shortmid] [rel] [mb] ["70] \definemathsymbol [shortparallel] [rel] [mb] ["71] \definemathsymbol [smallsetminus] [bin] [mb] ["72] \definemathsymbol [thicksim] [rel] [mb] ["73] \definemathsymbol [thickapprox] [rel] [mb] ["74] \definemathsymbol [approxeq] [rel] [mb] ["75] \definemathsymbol [succapprox] [rel] [mb] ["76] \definemathsymbol [precapprox] [rel] [mb] ["77] \definemathsymbol [curvearrowleft] [rel] [mb] ["78] \definemathsymbol [curvearrowright] [rel] [mb] ["79] \definemathsymbol [digamma] [ord] [mb] ["7A] \definemathsymbol [varkappa] [ord] [mb] ["7B] \definemathsymbol [Bbbk] [ord] [mb] ["7C] \definemathsymbol [hslash] [ord] [mb] ["7D] \definemathsymbol [hbar] [ord] [mb] ["7E] \definemathsymbol [backepsilon] [rel] [mb] ["7F] \stopmathcollection \startmathcollection [default] \definemathcommand [yen] [nothing] {\mathhexbox{\hexmafam}55} \definemathcommand [checkmark] [nothing] {\mathhexbox{\hexmafam}58} \definemathcommand [circledR] [nothing] {\mathhexbox{\hexmafam}72} \definemathcommand [maltese] [nothing] {\mathhexbox{\hexmafam}7A} \stopmathcollection \startmathcollection [default] \definemathcommand [dashrightarrow] [rel] {\dabar@\dabar@ \mathchar"0C4B} \definemathcommand [dashleftarrow] [rel] {\mathchar"0C4C\dabar@ \dabar@} \definemathcommand [dasharrow] [rel] {\dabar@\dabar@ \mathchar"0C4B} \definemathcommand [Join] [rel] {\mathchar"0D6F\mkern-13.8mu\mathchar"0D6E} \definemathcommand [implies] [rel] {\;\Longrightarrow\;} \definemathcommand [impliedby] [rel] {\;\Longleftarrow\;} \definemathcommand [And] [rel] {\;\internalAnd\;} \stopmathcollection \def\AMSwidehat#1% {\setbox\scratchbox\hbox{$\mathsurround\zeropoint#1$}% \ifdim\wd\scratchbox>2em \mathaccent"0\purefamilyhex{mb}5B{#1}% \else \mathaccent"0\purefamilyhex{ex}62{#1}% \fi} \def\AMSwidetilde#1% {\setbox\scratchbox\hbox{$\mathsurround\zeropoint#1$}% \ifdim\wd\scratchbox>2em \mathaccent"0\purefamilyhex{mb}5D{#1}% \else \mathaccent"0\purefamilyhex{ex}65{#1}% \fi} \startmathcollection [default] \definemathcommand [widehat] {\AMSwidehat} \definemathcommand [widetilde] {\AMSwidetilde} \stopmathcollection \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-odk.lua0000644000175000017500000014301212130411274024111 0ustar norbertnorbert-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- We keep the original around for a while so that we can check it -- -- when the above code does it wrong (data tables are not included). -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- author : Kai Eigner, TAT Zetwerk -- copyright : TAT Zetwerk -- comment : see font-odv.lua for current implementation -- local state = attributes.private('state') -- local sylnr = attributes.private('syllabe') -- -- local function install_dev(tfmdata) -- local features = tfmdata.resources.features -- local sequences = tfmdata.resources.sequences -- -- local insertpos = 1 -- for s=1,#sequences do -- classify chars -- for k in pairs(basic_shaping_forms) do -- if sequences[s].features and ( sequences[s].features[k] or sequences[s].features.locl ) then insertpos = s + 1 end -- end -- end -- -- features.gsub["dev2_reorder_matras"] = { ["dev2"] = { ["dflt"] = true } } -- features.gsub["dev2_reorder_reph"] = { ["dev2"] = { ["dflt"] = true } } -- features.gsub["dev2_reorder_pre_base_reordering_consonants"] = { ["dev2"] = { ["dflt"] = true } } -- features.gsub["remove_joiners"] = { ["deva"] = { ["dflt"] = true }, ["dev2"] = { ["dflt"] = true } } -- -- local sequence_dev2_reorder_matras = { -- chain = 0, -- features = { dev2_reorder_matras = { dev2 = { dflt = true } } }, -- flags = { false, false, false, false }, -- name = "dev2_reorder_matras", -- subtables = { "dev2_reorder_matras" }, -- type = "dev2_reorder_matras", -- } -- local sequence_dev2_reorder_reph = { -- chain = 0, -- features = { dev2_reorder_reph = { dev2 = { dflt = true } } }, -- flags = { false, false, false, false }, -- name = "dev2_reorder_reph", -- subtables = { "dev2_reorder_reph" }, -- type = "dev2_reorder_reph", -- } -- local sequence_dev2_reorder_pre_base_reordering_consonants = { -- chain = 0, -- features = { dev2_reorder_pre_base_reordering_consonants = { dev2 = { dflt = true } } }, -- flags = { false, false, false, false }, -- name = "dev2_reorder_pre_base_reordering_consonants", -- subtables = { "dev2_reorder_pre_base_reordering_consonants" }, -- type = "dev2_reorder_pre_base_reordering_consonants", -- } -- local sequence_remove_joiners = { -- chain = 0, -- features = { remove_joiners = { deva = { dflt = true }, dev2 = { dflt = true } } }, -- flags = { false, false, false, false }, -- name = "remove_joiners", -- subtables = { "remove_joiners" }, -- type = "remove_joiners", -- } -- table.insert(sequences, insertpos, sequence_dev2_reorder_pre_base_reordering_consonants) -- table.insert(sequences, insertpos, sequence_dev2_reorder_reph) -- table.insert(sequences, insertpos, sequence_dev2_reorder_matras) -- table.insert(sequences, insertpos, sequence_remove_joiners) -- end -- -- local function deva_reorder(head,start,stop,font,attr) -- local tfmdata = fontdata[font] -- local lookuphash = tfmdata.resources.lookuphash -- local sequences = tfmdata.resources.sequences -- -- if not lookuphash["remove_joiners"] then install_dev(tfmdata) end --install Devanagari-features -- -- local sharedfeatures = tfmdata.shared.features -- sharedfeatures["remove_joiners"] = true -- local datasets = otf.dataset(tfmdata,font,attr) -- -- lookuphash["remove_joiners"] = { [0x200C] = true, [0x200D] = true } -- -- local current, n, base, firstcons, lastcons, basefound = start, start.next, nil, nil, nil, false -- local reph, vattu = false, false -- for s=1,#sequences do -- local dataset = datasets[s] -- featurevalue = dataset and dataset[1] -- if featurevalue and dataset[4] == "rphf" then reph = true end -- if featurevalue and dataset[4] == "blwf" then vattu = true end -- end -- if ra[start.char] and halant[n.char] and reph then -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants -- if n == stop then return head, stop end -- if zwj[n.next.char] then -- current = start -- else -- current = n.next -- set_attribute(start,state,5) -- rphf -- end -- end -- -- if nbsp[current.char] then --Stand Alone cluster -- if current == stop then -- stop = stop.prev -- head = node.remove(head, current) -- node.free(current) -- return head, stop -- else -- base, firstcons, lastcons = current, current, current -- current = current.next -- if current ~= stop then -- if nukta[current.char] then current = current.next end -- if zwj[current.char] then -- if current ~= stop and current.next ~= stop and halant[current.next.char] then -- current = current.next -- local tmp = current.next.next -- local changestop = current.next == stop -- local tempcurrent = node.copy(current.next) -- tempcurrent.next = node.copy(current) -- tempcurrent.next.prev = tempcurrent -- set_attribute(tempcurrent,state,8) --blwf -- tempcurrent = nodes.handlers.characters(tempcurrent) -- unset_attribute(tempcurrent,state) -- if current.next.char == tempcurrent.char then -- node.flush_list(tempcurrent) -- local n = node.copy(current) -- current.char = dotted_circle -- head = node.insert_after(head, current, n) -- else -- current.char = tempcurrent.char -- (assumes that result of blwf consists of one node) -- local freenode = current.next -- current.next = tmp -- tmp.prev = current -- node.free(freenode) -- node.flush_list(tempcurrent) -- if changestop then stop = current end -- end -- end -- end -- end -- end -- end -- -- while not basefound do -- find base consonant -- if consonant[current.char] then -- set_attribute(current, state, 6) -- half -- if not firstcons then firstcons = current end -- lastcons = current -- if not base then -- base = current -- else --check whether consonant has below-base (or post-base) form -- local baseform = true -- for s=1,#sequences do -- local sequence = sequences[s] -- local dataset = datasets[s] -- featurevalue = dataset and dataset[1] -- if featurevalue and dataset[4] == "blwf" then -- local subtables = sequence.subtables -- for i=1,#subtables do -- local lookupname = subtables[i] -- local lookupcache = lookuphash[lookupname] -- if lookupcache then -- local lookupmatch = lookupcache[current.char] -- if lookupmatch then -- set_attribute(current, state, 8) -- blwf -- baseform = false -- end -- end -- end -- end -- end -- if baseform then base = current end -- end -- end -- basefound = current == stop -- current = current.next -- end -- if base ~= lastcons then -- if base consonant is not last one then move halant from base consonant to last one -- n = base.next -- if nukta[n.char] then n = n.next end -- if halant[n.char] then -- if lastcons ~= stop then -- local ln = lastcons.next -- if nukta[ln.char] then lastcons = ln end -- end -- local np, nn, ln = n.prev, n.next, lastcons.next -- np.next = n.next -- nn.prev = n.prev -- lastcons.next = n -- if ln then ln.prev = n end -- n.next = ln -- n.prev = lastcons -- if lastcons == stop then stop = n end -- end -- end -- -- n = start.next -- if ra[start.char] and halant[n.char] and not ( n ~= stop and ( zwj[n.next.char] or zwnj[n.next.char] ) ) then -- if syllable starts with Ra + H then move this combination so that it follows either: the post-base 'matra' (if any) or the base consonant -- local matra = base -- if base ~= stop and dependent_vowel[base.next.char] then matra = base.next end -- local sp, nn, mn = start.prev, n.next, matra.next -- if sp then sp.next = nn end -- nn.prev = sp -- matra.next = start -- start.prev = matra -- n.next = mn -- if mn then mn.prev = n end -- if head == start then head = nn end -- start = nn -- if matra == stop then stop = n end -- end -- -- local current = start -- while current ~= stop do -- if halant[current.next.char] and current.next ~= stop and zwnj[current.next.next.char] then unset_attribute(current, state) end -- current = current.next -- end -- -- if has_attribute(base, state) and base ~= stop and halant[base.next.char] and not ( base.next ~= stop and zwj[base.next.next.char] ) then unset_attribute(base, state) end -- -- local current, allreordered, moved = start, false, { [base] = true } -- local a, b, p, bn = base, base, base, base.next -- if base ~= stop and nukta[bn.char] then a, b, p = bn, bn, bn end -- while not allreordered do -- local c, n, l = current, current.next, nil --current is always consonant -- if c ~= stop and nukta[n.char] then c = n n = n.next end -- if c ~= stop and halant[n.char] then c = n n = n.next end -- while c ~= stop and dependent_vowel[n.char] do c = n n = n.next end -- if c ~= stop and vowel_modifier[n.char] then c = n n = n.next end -- if c ~= stop and stress_tone_mark[n.char] then c = n n = n.next end -- local bp, cn = firstcons.prev, current.next -- while cn ~= c.next do -- move pre-base matras... -- if pre_mark[cn.char] then -- if bp then bp.next = cn end -- cn.prev.next = cn.next -- if cn.next then cn.next.prev = cn.prev end -- if cn == stop then stop = cn.prev end -- cn.prev = bp -- cn.next = firstcons -- firstcons.prev = cn -- if firstcons == start then -- if head == start then head = cn end -- start = cn -- end -- break -- end -- cn = cn.next -- end -- allreordered = c == stop -- current = c.next -- end -- -- if reph or vattu then -- local current, cns = start, nil -- while current ~= stop do -- local c, n = current, current.next -- if ra[current.char] and halant[n.char] then -- c, n = n, n.next -- local b, bn = base, base -- while bn ~= stop do -- if dependent_vowel[bn.next.char] then b = bn.next end -- bn = bn.next -- end -- if has_attribute(current,state,attribute) == 5 then -- position Reph (Ra + H) after post-base 'matra' (if any) since these become marks on the 'matra', not on the base glyph -- if b ~= current then -- if current == start then -- if head == start then head = n end -- start = n -- end -- if b == stop then stop = c end -- if current.prev then current.prev.next = n end -- if n then n.prev = current.prev end -- c.next = b.next -- if b.next then b.next.prev = c end -- b.next = current -- current.prev = b -- end -- elseif cns and cns.next ~= current then -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants) -- local cp, cnsn = current.prev, cns.next -- if cp then cp.next = n end -- if n then n.prev = cp end -- cns.next = current -- current.prev = cns -- c.next = cnsn -- if cnsn then cnsn.prev = c end -- if c == stop then stop = cp break end -- current = n.prev -- end -- elseif consonant[current.char] or nbsp[current.char] then -- cns = current -- if halant[cns.next.char] then cns = cns.next end -- end -- current = current.next -- end -- end -- -- if nbsp[base.char] then -- head = node.remove(head, base) -- node.free(base) -- end -- -- return head, stop -- end -- -- function dev2_reorder_matras(start,kind,lookupname,replacement) -- local current = start -- while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do -- if halant[current.char] and not has_attribute(current, state) then -- if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end -- local sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- if current.next then current.next.prev = start end -- start.next = current.next -- current.next = start -- start.prev = current -- start = sn -- break -- end -- current = current.next -- end -- return start, true -- end -- -- function dev2_reorder_reph(start,kind,lookupname,replacement) -- local current, sn = start.next, nil -- while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do --step 2 -- if halant[current.char] and not has_attribute(current, state) then -- if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end -- sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- if current.next then current.next.prev = start end -- start.next = current.next -- current.next = start -- start.prev = current -- start = sn -- break -- end -- current = current.next -- end -- if not sn then -- current = start.next -- while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do --step 4 -- if has_attribute(current, state) == 9 then --post-base -- sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- start.prev = current.prev -- current.prev.next = start -- start.next = current -- current.prev = start -- start = sn -- break -- end -- current = current.next -- end -- end -- if not sn then -- current = start.next -- local c = nil -- while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do --step 5 -- if not c and ( above_mark[current.char] or below_mark[current.char] or post_mark[current.char] ) and ReorderClass[current.char] ~= "after subscript" then c = current end -- current = current.next -- end -- if c then -- sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- start.prev = c.prev -- c.prev.next = start -- start.next = c -- c.prev = start -- start = sn -- end -- end -- if not sn then -- current = start -- while current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) do --step 6 -- current = current.next -- end -- if start ~= current then -- sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- if current.next then current.next.prev = start end -- start.next = current.next -- current.next = start -- start.prev = current -- start = sn -- end -- end -- return start, true -- end -- -- function dev2_reorder_pre_base_reordering_consonants(start,kind,lookupname,replacement) -- local current, sn = start, nil -- while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do -- if halant[current.char] and not has_attribute(current, state) then -- if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end -- sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- if current.next then current.next.prev = start end -- start.next = current.next -- current.next = start -- start.prev = current -- start = sn -- break -- end -- current = current.next -- end -- if not sn then -- current = start.next -- while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do -- if not consonant[current.char] and has_attribute(current, state) then --main -- sn = start.next -- start.next.prev = start.prev -- if start.prev then start.prev.next = start.next end -- start.prev = current.prev -- current.prev.next = start -- start.next = current -- current.prev = start -- start = sn -- break -- end -- current = current.next -- end -- end -- return start, true -- end -- -- function remove_joiners(start,kind,lookupname,replacement) -- local stop = start.next -- while stop and stop.id == glyph and stop.subtype<256 and stop.font == start.font and (zwj[stop.char] or zwnj[stop.char]) do stop = stop.next end -- if stop then stop.prev.next = nil stop.prev = start.prev end -- if start.prev then start.prev.next = stop end -- node.flush_list(start) -- return stop, true -- end -- -- local function dev2_reorder(head,start,stop,font,attr) -- local tfmdata = fontdata[font] -- local lookuphash = tfmdata.resources.lookuphash -- local sequences = tfmdata.resources.sequences -- -- if not lookuphash["remove_joiners"] then install_dev(tfmdata) end --install Devanagari-features -- -- local sharedfeatures = tfmdata.shared.features -- sharedfeatures["dev2_reorder_matras"] = true -- sharedfeatures["dev2_reorder_reph"] = true -- sharedfeatures["dev2_reorder_pre_base_reordering_consonants"] = true -- sharedfeatures["remove_joiners"] = true -- local datasets = otf.dataset(tfmdata,font,attr) -- -- local reph, pre_base_reordering_consonants = false, nil -- local halfpos, basepos, subpos, postpos = nil, nil, nil, nil -- local locl = { } -- -- for s=1,#sequences do -- classify chars -- local sequence = sequences[s] -- local dataset = datasets[s] -- featurevalue = dataset and dataset[1] -- if featurevalue and dataset[4] then -- local subtables = sequence.subtables -- for i=1,#subtables do -- local lookupname = subtables[i] -- local lookupcache = lookuphash[lookupname] -- if lookupcache then -- if dataset[4] == "rphf" then -- if dataset[3] ~= 0 then --rphf is result of of chain -- else -- reph = lookupcache[0x0930] and lookupcache[0x0930][0x094D] and lookupcache[0x0930][0x094D]["ligature"] -- end -- end -- if dataset[4] == "pref" and not pre_base_reordering_consonants then -- for k, v in pairs(lookupcache[0x094D]) do -- pre_base_reordering_consonants[k] = v and v["ligature"] --ToDo: reph might also be result of chain -- end -- end -- local current = start -- while current ~= stop.next do -- if dataset[4] == "locl" then locl[current] = lookupcache[current.char] end --ToDo: locl might also be result of chain -- if current ~= stop then -- local c, n = locl[current] or current.char, locl[current.next] or current.next.char -- if dataset[4] == "rphf" and lookupcache[c] and lookupcache[c][n] then --above-base: rphf Consonant + Halant -- if current.next ~= stop and ( zwj[current.next.next.char] or zwnj[current.next.next.char] ) then --ZWJ and ZWNJ prevent creation of reph -- current = current.next -- elseif current == start then -- set_attribute(current,state,5) -- end -- current = current.next -- end -- if dataset[4] == "half" and lookupcache[c] and lookupcache[c][n] then --half forms: half Consonant + Halant -- if current.next ~= stop and zwnj[current.next.next.char] then --ZWNJ prevent creation of half -- current = current.next -- else -- set_attribute(current,state,6) -- if not halfpos then halfpos = current end -- end -- current = current.next -- end -- if dataset[4] == "pref" and lookupcache[c] and lookupcache[c][n] then --pre-base: pref Halant + Consonant -- set_attribute(current,state,7) -- set_attribute(current.next,state,7) -- current = current.next -- end -- if dataset[4] == "blwf" and lookupcache[c] and lookupcache[c][n] then --below-base: blwf Halant + Consonant -- set_attribute(current,state,8) -- set_attribute(current.next,state,8) -- current = current.next -- subpos = current -- end -- if dataset[4] == "pstf" and lookupcache[c] and lookupcache[c][n] then --post-base: pstf Halant + Consonant -- set_attribute(current,state,9) -- set_attribute(current.next,state,9) -- current = current.next -- postpos = current -- end -- end -- current = current.next -- end -- end -- end -- end -- end -- -- lookuphash["dev2_reorder_matras"] = pre_mark -- lookuphash["dev2_reorder_reph"] = { [reph] = true } -- lookuphash["dev2_reorder_pre_base_reordering_consonants"] = pre_base_reordering_consonants or { } -- lookuphash["remove_joiners"] = { [0x200C] = true, [0x200D] = true } -- -- local current, base, firstcons = start, nil, nil -- if has_attribute(start,state) == 5 then current = start.next.next end -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants -- -- if current ~= stop.next and nbsp[current.char] then --Stand Alone cluster -- if current == stop then -- stop = stop.prev -- head = node.remove(head, current) -- node.free(current) -- return head, stop -- else -- base = current -- current = current.next -- if current ~= stop then -- if nukta[current.char] then current = current.next end -- if zwj[current.char] then -- if current ~= stop and current.next ~= stop and halant[current.next.char] then -- current = current.next -- local tmp = current.next.next -- local changestop = current.next == stop -- current.next.next = nil -- set_attribute(current,state,7) --pref -- current = nodes.handlers.characters(current) -- set_attribute(current,state,8) --blwf -- current = nodes.handlers.characters(current) -- set_attribute(current,state,9) --pstf -- current = nodes.handlers.characters(current) -- unset_attribute(current,state) -- if halant[current.char] then -- current.next.next = tmp -- local nc = node.copy(current) -- current.char = dotted_circle -- head = node.insert_after(head, current, nc) -- else -- current.next = tmp -- (assumes that result of pref, blwf, or pstf consists of one node) -- if changestop then stop = current end -- end -- end -- end -- end -- end -- else --not Stand Alone cluster -- while current ~= stop.next do -- find base consonant -- if consonant[current.char] and not ( current ~= stop and halant[current.next.char] and current.next ~= stop and zwj[current.next.next.char] ) then -- if not firstcons then firstcons = current end -- if not ( has_attribute(current, state) == 7 or has_attribute(current, state) == 8 or has_attribute(current, state) == 9 ) then base = current end --check whether consonant has below-base or post-base form or is pre-base reordering Ra -- end -- current = current.next -- end -- if not base then -- base = firstcons -- end -- end -- -- if not base then -- if has_attribute(start, state) == 5 then unset_attribute(start, state) end -- return head, stop -- else -- if has_attribute(base, state) then unset_attribute(base, state) end -- basepos = base -- end -- if not halfpos then halfpos = base end -- if not subpos then subpos = base end -- if not postpos then postpos = subpos or base end -- -- --Matra characters are classified and reordered by which consonant in a conjunct they have affinity for -- local moved = { } -- current = start -- while current ~= stop.next do -- local char, target, cn = locl[current] or current.char, nil, current.next -- if not moved[current] and dependent_vowel[char] then -- if pre_mark[char] then -- Before first half form in the syllable -- moved[current] = true -- if current.prev then current.prev.next = current.next end -- if current.next then current.next.prev = current.prev end -- if current == stop then stop = current.prev end -- if halfpos == start then -- if head == start then head = current end -- start = current -- end -- if halfpos.prev then halfpos.prev.next = current end -- current.prev = halfpos.prev -- halfpos.prev = current -- current.next = halfpos -- halfpos = current -- elseif above_mark[char] then -- After main consonant -- target = basepos -- if subpos == basepos then subpos = current end -- if postpos == basepos then postpos = current end -- basepos = current -- elseif below_mark[char] then -- After subjoined consonants -- target = subpos -- if postpos == subpos then postpos = current end -- subpos = current -- elseif post_mark[char] then -- After post-form consonant -- target = postpos -- postpos = current -- end -- if ( above_mark[char] or below_mark[char] or post_mark[char] ) and current.prev ~= target then -- if current.prev then current.prev.next = current.next end -- if current.next then current.next.prev = current.prev end -- if current == stop then stop = current.prev end -- if target.next then target.next.prev = current end -- current.next = target.next -- target.next = current -- current.prev = target -- end -- end -- current = cn -- end -- -- --Reorder marks to canonical order: Adjacent nukta and halant or nukta and vedic sign are always repositioned if necessary, so that the nukta is first. -- local current, c = start, nil -- while current ~= stop do -- if halant[current.char] or stress_tone_mark[current.char] then -- if not c then c = current end -- else -- c = nil -- end -- if c and nukta[current.next.char] then -- if head == c then head = current.next end -- if stop == current.next then stop = current end -- if c.prev then c.prev.next = current.next end -- current.next.prev = c.prev -- current.next = current.next.next -- if current.next.next then current.next.next.prev = current end -- c.prev = current.next -- current.next.next = c -- end -- if stop == current then break end -- current = current.next -- end -- -- if nbsp[base.char] then -- head = node.remove(head, base) -- node.free(base) -- end -- -- return head, stop -- end -- -- function fonts.analyzers.methods.deva(head,font,attr) -- local orighead = head -- local current, start, done = head, true, false -- while current do -- if current.id == glyph and current.subtype<256 and current.font == font then -- done = true -- local syllablestart, syllableend = current, nil -- -- local c = current --Checking Stand Alone cluster (this behavior is copied from dev2) -- if ra[c.char] and c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] and c.next.next and c.next.next.id == glyph and c.next.next.subtype<256 and c.next.next.font == font then c = c.next.next end -- if nbsp[c.char] and ( not current.prev or current.prev.id ~= glyph or current.prev.subtype>=256 or current.prev.font ~= font or -- ( not consonant[current.prev.char] and not independent_vowel[current.prev.char] and not dependent_vowel[current.prev.char] and -- not vowel_modifier[current.prev.char] and not stress_tone_mark[current.prev.char] and not nukta[current.prev.char] and not halant[current.prev.char] ) -- ) then --Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- local n = c.next -- if n and n.id == glyph and n.subtype<256 and n.font == font then -- local ni = n.next -- if ( zwj[n.char] or zwnj[n.char] ) and ni and ni.id == glyph and ni.subtype<256 and ni.font == font then n = ni ni = ni.next end -- if halant[n.char] and ni and ni.id == glyph and ni.subtype<256 and ni.font == font and consonant[ni.char] then c = ni end -- end -- while c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] do c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- current = c.next -- syllableend = c -- if syllablestart ~= syllableend then -- head, current = deva_reorder(head, syllablestart,syllableend,font,attr) -- current = current.next -- end -- elseif consonant[current.char] then -- syllable containing consonant -- prevc = true -- while prevc do -- prevc = false -- local n = current.next -- if n and n.id == glyph and n.subtype<256 and n.font == font and nukta[n.char] then n = n.next end -- if n and n.id == glyph and n.subtype<256 and n.font == font and halant[n.char] then -- local n = n.next -- if n and n.id == glyph and n.subtype<256 and n.font == font and ( zwj[n.char] or zwnj[n.char] ) then n = n.next end -- if n and n.id == glyph and n.subtype<256 and n.font == font and consonant[n.char] then -- prevc = true -- current = n -- end -- end -- end -- if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == font and nukta[current.next.char] then current = current.next end -- nukta (not specified in Microsft Devanagari OpenType specification) -- syllableend = current -- current = current.next -- if current and current.id == glyph and current.subtype<256 and current.font == font and halant[current.char] then -- syllable containing consonant without vowels: {C + [Nukta] + H} + C + H -- if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == font and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end -- syllableend = current -- current = current.next -- else -- syllable containing consonant with vowels: {C + [Nukta] + H} + C + [M] + [VM] + [SM] -- if current and current.id == glyph and current.subtype<256 and current.font == font and dependent_vowel[current.char] then -- syllableend = current -- current = current.next -- end -- if current and current.id == glyph and current.subtype<256 and current.font == font and vowel_modifier[current.char] then -- syllableend = current -- current = current.next -- end -- if current and current.id == glyph and current.subtype<256 and current.font == font and stress_tone_mark[current.char] then -- syllableend = current -- current = current.next -- end -- end -- if syllablestart ~= syllableend then -- head, current = deva_reorder(head,syllablestart,syllableend,font,attr) -- current = current.next -- end -- elseif current.id == glyph and current.subtype<256 and current.font == font and independent_vowel[current.char] then -- syllable without consonants: VO + [VM] + [SM] -- syllableend = current -- current = current.next -- if current and current.id == glyph and current.subtype<256 and current.font == font and vowel_modifier[current.char] then -- syllableend = current -- current = current.next -- end -- if current and current.id == glyph and current.subtype<256 and current.font == font and stress_tone_mark[current.char] then -- syllableend = current -- current = current.next -- end -- else -- Syntax error -- if pre_mark[current.char] or above_mark[current.char] or below_mark[current.char] or post_mark[current.char] then -- local n = node.copy(current) -- if pre_mark[current.char] then -- n.char = dotted_circle -- else -- current.char = dotted_circle -- end -- head, current = node.insert_after(head, current, n) -- end -- current = current.next -- end -- else -- current = current.next -- end -- start = false -- end -- -- return head, done -- end -- -- function fonts.analyzers.methods.dev2(head,font,attr) -- local current, start, done, syl_nr = head, true, false, 0 -- while current do -- local syllablestart, syllableend = nil, nil -- if current.id == glyph and current.subtype<256 and current.font == font then -- syllablestart = current -- done = true -- local c, n = current, current.next -- if ra[current.char] and n and n.id == glyph and n.subtype<256 and n.font == font and halant[n.char] and n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font then c = n.next end -- if independent_vowel[c.char] then --Vowel-based syllable: [Ra+H]+V+[N]+[<[]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] -- n = c.next -- local ni, nii = nil, nil -- if n and n.id == glyph and n.subtype<256 and n.font == font and nukta[n.char] then n = n.next end -- if n and n.id == glyph and n.subtype<256 and n.font == font then local ni = n.next end -- if ni and ni.id == glyph and ni.subtype<256 and ni.font == font and ni.next and ni.next.id == glyph and ni.next.subtype<256 and ni.next.font == font then -- nii = ni.next -- if zwj[ni.char] and consonant[nii.char] then -- c = nii -- elseif (zwj[ni.char] or zwnj[ni.char]) and halant[nii.char] and nii.next and nii.next.id == glyph and nii.next.subtype<256 and nii.next.font == font and consonant[nii.next.char] then -- c = nii.next -- end -- end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- current = c -- syllableend = c -- elseif nbsp[c.char] and ( not current.prev or current.prev.id ~= glyph or current.prev.subtype>=256 or current.prev.font ~= font or -- ( not consonant[current.prev.char] and not independent_vowel[current.prev.char] and not dependent_vowel[current.prev.char] and -- not vowel_modifier[current.prev.char] and not stress_tone_mark[current.prev.char] and not nukta[current.prev.char] and not halant[current.prev.char] ) -- ) then --Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- n = c.next -- if n and n.id == glyph and n.subtype<256 and n.font == font then -- local ni = n.next -- if ( zwj[n.char] or zwnj[n.char] ) and ni and ni.id == glyph and ni.subtype<256 and ni.font == font then n = ni ni = ni.next end -- if halant[n.char] and ni and ni.id == glyph and ni.subtype<256 and ni.font == font and consonant[ni.char] then c = ni end -- end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- current = c -- syllableend = c -- elseif consonant[current.char] then --Consonant syllable: {C+[N]+]|+H>} + C+[N]+[A] + [< H+[] | {M}+[N]+[H]>]+[SM]+[(VD)] -- c = current -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- n = c -- while n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and ( halant[n.next.char] or zwnj[n.next.char] or zwj[n.next.char] ) do -- if halant[n.next.char] then -- n = n.next -- if n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and ( zwnj[n.next.char] or zwj[n.next.char] ) then n = n.next end -- else -- if n.next.next and n.next.next.id == glyph and n.next.next.subtype<256 and n.next.next.font == font and halant[n.next.next.char] then n = n.next.next end -- end -- if n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and consonant[n.next.char] then -- n = n.next -- if n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and nukta[n.next.char] then n = n.next end -- c = n -- else -- break -- end -- end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and anudatta[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then -- c = c.next -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and ( zwnj[c.next.char] or zwj[c.next.char] ) then c = c.next end -- else -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end -- end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end -- current = c -- syllableend = c -- end -- end -- -- if syllableend then -- syl_nr = syl_nr + 1 -- c = syllablestart -- while c ~= syllableend.next do -- set_attribute(c,sylnr,syl_nr) -- c = c.next -- end -- end -- if syllableend and syllablestart ~= syllableend then -- head, current = dev2_reorder(head,syllablestart,syllableend,font,attr) -- end -- -- if not syllableend and not has_attribute(current, state) and current.id == glyph and current.subtype<256 and current.font == font then -- Syntax error -- if pre_mark[current.char] or above_mark[current.char] or below_mark[current.char] or post_mark[current.char] then -- local n = node.copy(current) -- if pre_mark[current.char] then -- n.char = dotted_circle -- else -- current.char = dotted_circle -- end -- head, current = node.insert_after(head, current, n) -- end -- end -- -- start = false -- current = current.next -- end -- -- return head, done -- end -- -- function otf.handlers.dev2_reorder_matras(start,kind,lookupname,replacement) -- return dev2_reorder_matras(start,kind,lookupname,replacement) -- end -- -- function otf.handlers.dev2_reorder_reph(start,kind,lookupname,replacement) -- return dev2_reorder_reph(start,kind,lookupname,replacement) -- end -- -- function otf.handlers.dev2_reorder_pre_base_reordering_consonants(start,kind,lookupname,replacement) -- return dev2_reorder_pre_base_reordering_consonants(start,kind,lookupname,replacement) -- end -- -- function otf.handlers.remove_joiners(start,kind,lookupname,replacement) -- return remove_joiners(start,kind,lookupname,replacement) -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-cals.mkiv0000644000175000017500000000240712161703335023754 0ustar norbertnorbert%D \module %D [ file=x-cals, %D version=2007.09.05, %D title=\CONTEXT\ XML Modules, %D subtitle=Cals table renderer, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Cals Tables} \startmodule [cals] \registerctxluafile{x-cals}{} % \startxmlsetups xml:cals:process % \xmlsetsetup {#1} {cals:table} {*} % \stopxmlsetups % \startxmlsetups cals:table % \ctxlua{moduledata.cals.table("#1")} % \stopxmlsetups % \xmlregistersetup{xml:cals:process} \startxmlsetups xml:cals:process % \xmlsetfunction {\xmldocument} {cals:table} {moduledata.cals.table} \xmlsetfunction {#1} {cals:table} {moduledata.cals.table} \stopxmlsetups \startxmlsetups xml:cals:nonamespace % \xmlsetfunction {\xmldocument} {table} {moduledata.cals.table} \xmlsetfunction {#1} {table} {moduledata.cals.table} \stopxmlsetups \xmlregistersetup{xml:cals:process} \xmlregisterns{cals}{cals} %D One can register the nonamespace variant for cases where the cals %D model is embedded in the parent DTD. \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-flt.mkii0000644000175000017500000022315711754241457024326 0ustar norbertnorbert%D \module %D [ file=strc-flt, %D version=2000.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Floating Bodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Float Numbering} %D Some of the sidefloat settings should move to page-sid; now it's quite %D fuzzy the way the variables are set/reset. \unprotect \ifx\addlocalbackgroundtobox\undefined \def\addlocalbackgroundtobox{\resetglobal\gobbleoneargument} \fi \def\placefloats{\doflushfloats} % keep this one \def\floatparameter #1{\csname\??fl\currentfloat#1\endcsname} \def\floatcaptionparameter#1{\csname\??kj\currentfloat#1\endcsname} % \def\floatparameter #1{\csname \ifcsname\??fl\currentfloat#1\endcsname\??fl\currentfloat\else\??bk\fi#1\endcsname} % \def\floatcaptionparameter#1{\csname\??kj\ifcsname\??kj\currentfloat#1\endcsname \currentfloat \fi#1\endcsname} % for the moment we need to define the parameters anyway, first we need to implement a % proper parent chain (also for framed); no problem now that machines are fast (tests % show that this may save 20 k or more in the format) % % \def\floatparameter #1{\executeifdefined{\??fl\currentfloat#1}{\csname\??fl#1\endcsname}} % \def\floatcaptionparameter#1{\executeifdefined{\??kj\currentfloat#1}{\csname\??bk#1\endcsname}} \def\setupfloats {\dodoubleargument\getparameters[\??bk]} % funny, why not \??fl, must be a reason \def\setupcaptions {\dodoubleargument\getparameters[\??kj]} \def\dosetupfloat[#1][#2]% {\def\docommand##1{\getparameters[\??fl##1][#2]}% \processcommalist[#1]\docommand} \def\setupfloat {\dodoubleargument\dosetupfloat} \def\dosetupcaption[#1][#2]% {\def\docommand##1{\getparameters[\??kj##1][#2]}% \processcommalist[#1]\docommand} \def\setupcaption {\dodoubleargument\dosetupcaption} \def\doemptyblock#1% {\localframed [\??fl#1] [\c!frame=\v!on, \c!width=\@@bkwidth, \c!height=\@@bkheight, \c!location=\v!normal, \c!offset=\@@bkoffset]% {\getmessage\m!floatblocks{12}\empty}} % A complication is that we may have to handle a pagebreak % first, which in turn may issue a (postponed) float. % Therefore we may not trust on variable assignments before % we're realy dealing with the float. Some day I'll root out % the global settings. \def\docomplexplacefloat[#1][#2]% [#3]#4% {\edef\currentfloat{#1}% \doifelsenothing\currentfloat {\let\currentfloat\v!figure} {}% {\doifundefined{\??fl#1\c!default}{\let\currentfloat\v!figure}}% \doifelsenothing{#2} {\edef\floatlocation{\floatparameter\c!default}} {\edef\floatlocation{#2}}% \doifinsetelse\v!split{#2} {\expanded{\dodocomplexsplitfloat[\currentfloat][\floatlocation]}} {\expanded{\dodocomplexplacefloat[\currentfloat][\floatlocation]}}} \long\def\dodocomplexsplitfloat[#1][#2][#3]#4% {\splitfloat{\dodocomplexplacefloat[#1][#2][#3]{#4}}} \def\flushfloatslist {\v!left,\v!right,\v!inner,\v!outer,% \v!backspace,\v!cutspace,% \v!inleft,\v!inright,\v!inmargin,% \v!leftmargin,\v!rightmargin,\v!leftedge,\v!rightedge,% \v!innermargin,\v!outermargin,\v!inneredge,\v!outeredge,% \v!text,\v!opposite}% \v!page \long\def\dodocomplexplacefloat[#1][#2][#3]#4% {\flushnotes \flushsidefloats % here ! \ifsomefloatwaiting % this was \checkwaitingfloats spread all over \doifinsetelse\v!always{#2} {\showmessage\m!floatblocks5\empty} {\expanded{\doifcommonelse{#2}{\flushfloatslist}}\doflushfloats\donothing}% % but which should be done before using box \floatbox \fi \ifmargeblokken \doifinset\v!margin{#2}\endgraf \fi \global\insidefloattrue \begingroup % ** \ifmargeblokken \doifinset\v!margin{#2}{\hsize\@@mbwidth}% \fi \the\everyinsidefloat \let\@@extrafloat\empty \presetmorefloatvariables{#2}% \dowithnextboxcontent % better a \the\everyfloattoks {\setlocalfloathsize \floatparameter\c!inner \fuzzysnappingfalse \postponenotes} % new {\doifsomething{\floatparameter\c!criterium} {\ifdim\wd\nextbox>\floatparameter\c!criterium\relax \edef\forcedfloatmethod{\executeifdefined{\??fl\currentfloat\c!fallback}\v!here}% \fi}% \xdocompletefloat{#1}{#3}{#1}{#2}{#1}{#4}% ** not yet done % we need to carry over the par because of side floats \doifnotinset\v!text{#2}{\carryoverpar\endgroup}% \global\sidefloatdownshift \zeropoint \global\sidefloatextrashift\zeropoint \ifparfloat \doifinset\v!reset{#2}\forgetsidefloats \doinhibitblank \fi}% better move this to side floats \vbox} \def\xxdocompletefloat#1#2% {\rightorleftpageaction{\let\@@extrafloat#1}{\let\@@extrafloat#2}} \chardef\textfloatmethod=0 % 0=raw 1=safe (.99) 2=tight (-1pt) \chardef\sidefloatmethod=1 % 0=raw 1=safe (.99) 2=tight (-1pt) \let\floatrotation\!!zerocount \long\def\presetfloatvariables#1#2#3#4% {\doifcommonelse {#2} {\v!left,\v!right,\v!inner,\v!outer,% \v!inleft,\v!inright,\v!inmargin,% \v!backspace,\v!cutspace,% \v!innermargin,\v!outermargin,\v!inneredge,\v!outeredge,% \v!leftmargin,\v!leftedge,\v!rightmargin,\v!rightedge} {\global\parfloattrue} {\global\parfloatfalse}% \ifinsidecolumns \global\parfloatfalse \fi \global\sidefloatshift\zeropoint \global\sidefloatmaximum\zeropoint \global\chardef\sidefloatmethod\floatparameter\c!sidemethod \global\chardef\textfloatmethod\floatparameter\c!textmethod \global\chardef\sidefloatalign\zerocount \globallet\floatrotation\!!zerocount \calculatefloatskips \ifparfloat \processaction [\floatparameter\c!sidealign] [\v!height=>\global\chardef\sidefloatalign\plusone,% \v!line=>\global\chardef\sidefloatalign\plustwo,% (***) \v!depth=>\global\chardef\sidefloatalign\plusthree,% \v!grid=>\global\chardef\sidefloatalign4,% \v!halfline=>\global\chardef\sidefloatalign5]% % todo (test first): \doifinset\v!lokaal{#2}{\chardef\sidefloatalign\zerocount}% \ifcase\sidefloatalign\relax % todo: optie v!lokaal => \else \doifinset\v!height {#2}{\global\chardef\sidefloatalign\plusone}% \doifinset\v!line {#2}{\global\chardef\sidefloatalign\plustwo}% \doifinset\v!depth {#2}{\global\chardef\sidefloatalign\plusthree}% \doifinset\v!grid {#2}{\global\chardef\sidefloatalign4}% \doifinset\v!halfline{#2}{\global\chardef\sidefloatalign5}% meant for 'none' \fi \doifinset\v!high{#2}{\global\sidefloattopskip \zeropoint}% \doifinset\v!low {#2}{\global\sidefloatbottomskip\zeropoint}% \doifinset\v!fit {#2} {\global\sidefloattopskip \zeropoint \global\sidefloatbottomskip\zeropoint \global\floatsideskip \zeropoint}% \else \processallactionsinset [#2] [ 90=>\globallet\floatrotation\commalistelement,% 180=>\globallet\floatrotation\commalistelement,% 270=>\globallet\floatrotation\commalistelement]% \fi \doifinsetelse\v!nonumber{#2} {\global\nofloatnumbertrue} {\doifelse{\floatcaptionparameter\c!number}\v!yes {\global\nofloatnumberfalse} {\global\nofloatnumbertrue}}% \ConvertToConstant\doifelse{#4}{} {\global\emptyfloatcaptiontrue} {\global\emptyfloatcaptionfalse}% \doifinsetelse\v!none{#2} {\global\nofloatcaptiontrue} {\ConvertToConstant\doifelse{#4}\v!none {\global\nofloatcaptiontrue} {\global\nofloatcaptionfalse}}% \doif{\floatcaptionparameter\c!number}\v!none % new {\global\nofloatcaptiontrue}% \ifemptyfloatcaption \ifnofloatnumber \global\nofloatcaptiontrue \fi \fi} % documenteren in details \def\presetmorefloatvariables#1% {\doifelse\@@bklocal\v!yes % fout keyword \globalcenterfloatboxtrue \globalcenterfloatboxfalse \ifglobalcenterfloatbox \localcenterfloatboxtrue \else \doifinsetelse\v!local{#1} \localcenterfloatboxtrue \localcenterfloatboxfalse \fi \doifnotcommon{\v!always,\v!here,\v!force}{#1} % ! ! ! ! ! ! {\globalcenterfloatboxfalse \localcenterfloatboxfalse}} \def\setlocalfloathsize {\iflocalcenterfloatbox \seteffectivehsize \hsize\localhsize \fi} \appendtoks \everyinsidefloat\emptytoks % in case it's called earlier \dogetfloatdata \to \everyinsidefloat %\appendtoks % \fuzzysnappingfalse %\to \everyinsidefloat \def\doifrightpagefloatelse {\ifdoublesided \ifsinglesided \@EAEAEA\firstoftwoarguments \else \@EAEAEA\doifoddfloatpageelse \fi \else \@EA\firstoftwoarguments \fi} \def\doifoddfloatpageelse {\ifodd\purenumber\twopassfloatdata\space \@EA\firstoftwoarguments \else \@EA\secondoftwoarguments \fi} \appendtoks \let\rightorleftpageaction\doifrightpagefloatelse \to \everyinsidefloat \newif\ifextrafloatactions \extrafloatactionstrue % \let\movesidefloat\gobbleoneargument % new : \place...[leftmargin,-2*line]; we need to catch fxtb:2*3 % watch out: line alone aligns on the line ! ! ! \def\movesidefloat[#1]% (-)n*line|x=,y= {\global\sidefloatdownshift \zeropoint \global\sidefloatextrashift\zeropoint \doifassignmentelse{#1}% {\bgroup \getparameters[\??fl][\c!x=\zeropoint,\c!y=\zeropoint,#1]% \ifgridsnapping \getnoflines\@@fly \global\sidefloatdownshift\noflines\lineheight \else \global\sidefloatdownshift\@@fly \fi \global\sidefloatextrashift\@@flx \egroup} {\movedownsidefloat[#1]}} \def\movedownsidefloat[#1]% already in core {\bgroup \cleanupfeatures \doifinstringelse{:}{#1} \donothing {\def\docommand##1% {\processaction [##1]% [ \v!line=>\dodocommand+,% +\v!line=>\dodocommand+,% -\v!line=>\dodocommand-]}% \def\dodocommand##1% {\ifdone\else\global\sidefloatdownshift\zeropoint\donetrue\fi \global\advance\sidefloatdownshift##1\lineheight}% \donefalse\expanded{\dorepeatwithcommand[#1]}\docommand \def\docommand##1% {\processaction [##1]% [ \v!hang=>\dodocommand+,% +\v!hang=>\dodocommand+,% -\v!hang=>\dodocommand-]}% \def\dodocommand##1% inefficient but who cares {\ifdone\else\global\sidefloatsidelines\zeropoint\donetrue\fi \global\advance\sidefloatsidelines\plusone\relax}% \donefalse\expanded{\dorepeatwithcommand[#1]}\docommand}% \egroup} \def\hangsidefloat[#1]% {\global\sidefloatsidelines#1\relax} \long\def\xdocompletefloat#1#2#3#4#5#6% {\ifextrafloatactions \doifinsetelse\v!text{#4} {% fuzzy, text overloads left, since then it's a directive \docompletefloat{#1}{#2}{#3}{#4}{#5}{#6}\nextbox} {\let\@@extrafloat\empty % \sidefloatdownshift will be reset afterwards, and can % already be set at this point \processallactionsinset [#4] % ininner/inouter : for old times sake [ \v!inner=>\xxdocompletefloat\v!left \v!right, \v!outer=>\xxdocompletefloat\v!right \v!left, \v!innermargin=>\xxdocompletefloat\v!leftmargin \v!rightmargin, \v!outermargin=>\xxdocompletefloat\v!rightmargin\v!leftmargin, \v!inneredge=>\xxdocompletefloat\v!leftedge \v!rightedge, \v!outeredge=>\xxdocompletefloat\v!rightedge \v!leftedge, \v!backspace=>\xxdocompletefloat\v!backspace \v!cutspace, \v!cutspace=>\xxdocompletefloat\v!cutspace \v!backspace, % \v!margin=>\xxdocompletefloat\v!cutspace \v!backspace, \v!left=>\xxdocompletefloat\v!left \v!left, \v!right=>\xxdocompletefloat\v!right \v!right, \v!line=>, % only -n*line is handled (see ***) \s!unknown=>{\movedownsidefloat[\commalistelement]}]% \ifx\@@extrafloat\empty \docompletefloat{#1}{#2}{#3}{#4}{#5}{#6}\nextbox \else \docompletefloat{#1}{#2}{#3}{\@@extrafloat,#4}{#5}{#6}\nextbox \fi}% \else % downward compatible \docompletefloat{#1}{#2}{#3}{#4}{#5}{#6}\nextbox \fi} % pas op, maxbreedte niet instellen als plaats=links/rechts \def\setlocalfloatdimensions#1% {\global\sidefloatshift \zeropoint % duplicate \global\sidefloatmaximum\zeropoint\relax % duplicate \ifextrafloatactions \ifdim\sidefloatdownshift=\zeropoint\else \global\setbox\floatbox\vbox {\vskip\sidefloatdownshift\nointerlineskip\box\floatbox}% \fi \doifsomething{\floatparameter\c!minwidth} {\scratchdimen\floatparameter\c!minwidth\relax \ifdim\wd\floatbox<\scratchdimen \global\setbox\floatbox\hbox to \scratchdimen {\doifnot{\floatparameter\c!location}\v!left \hss \box\floatbox% \doifnot{\floatparameter\c!location}\v!right\hss}% \fi}% % todo: rand / rug \doifinset\v!hanging{#1} {\doifcommonelse{\v!inleft,\v!leftmargin}{#1} {\letvalue{\??fl\currentfloat\c!maxwidth}\leftmarginwidth}% {\doifcommon{\v!inright,\v!rightmargin}{#1} {\letvalue{\??fl\currentfloat\c!maxwidth}\rightmarginwidth}}}% \doifsomething{\floatparameter\c!maxwidth} {\scratchdimen\floatparameter\c!maxwidth\relax \ifdim\wd\floatbox>\scratchdimen \doifcommonelse{\v!inright,\v!rightmargin,\v!rightedge \v!inleft,\v!leftmargin,\v!leftedge}{#1} {\global\sidefloatmaximum\scratchdimen} {\global\setbox\floatbox\hbox to \scratchdimen {\doifcommonelse{\v!right,\v!left}{#1} {\doifnotinset\v!right{#1}\hss \box\floatbox \doifnotinset\v!left{#1}\hss}% {\doifnot{\floatparameter\c!location}\v!left\hss \box\floatbox \doifnot{\floatparameter\c!location}\v!right\hss}}}% \fi}% \fi} \def\docomplexstarttextblock[#1][#2][#3]% {\flushnotes \flushsidefloats % hoort eigenlijk niet hier \docomplexplacefloat[#1][\v!text,#2,\v!left][#3]} \long\def\docomplexreserveblock[#1][#2][#3][#4]#5% {\getvalue{\e!place#1}[#3][#4]{#5}{\localframed[\??fl#1][#2]{#1}}} \def\docomplexstartreservetextblock[#1][#2][#3][#4]% {\flushsidefloats % hoort eigenlijk niet hier \docomplexreserveblock[#1][#2][\v!text,#3,\v!left][#4]} \def\definefloat {\dotripleempty\dodefinefloat} \def\dodefinefloat[#1][#2][#3]% #1=naam #2=meervoud #3=parent {\ifthirdargument \redodefinefloat[#1][#2][#3]% \else\ifsecondargument \dododefinefloat[#1][#2]% \else \dododefinefloat[#1][#1]% \fi\fi} % todo: \floatparameter + \currentfloat - saves many hash entries \def\dododefinefloat[#1][#2]% inherits from kj and not from parent {\def\currentfloat{#1}% \presetlocalframed[\??fl#1]% \setupfloat [#1] [%\c!width=8\lineheight, % 15\bodyfontsize, %\c!height=6\lineheight, % 10\bodyfontsize, \c!offset=\v!overlay, \c!width=\v!fit, \c!height=\v!fit, \c!minwidth=, \c!maxwidth=, \c!maxheight=, \c!criterium=, % inherited \c!sidespacebefore=\@@bksidespacebefore, \c!sidespaceafter=\@@bksidespaceafter, \c!sidealign=\@@bksidealign, % \v!line \c!margin=\@@bkmargin, \c!leftmargin=\@@bkleftmargin, \c!rightmargin=\@@bkrightmargin, \c!innermargin=\@@bkinnermargin, \c!outermargin=\@@bkoutermargin, \c!leftmargindistance=\@@bkleftmargindistance, \c!rightmargindistance=\@@bkrightmargindistance, \c!frame=\@@bkframe, \c!radius=\@@bkradius, \c!corner=\@@bkcorner, \c!location=\@@bklocation, \c!background=\@@bkbackground, \c!backgroundscreen=\@@bkbackgroundscreen, \c!backgroundcolor=\@@bkbackgroundcolor, \c!backgroundoffset=\@@bkbackgroundoffset, \c!topframe=\@@bktopframe, \c!bottomframe=\@@bkbottomframe, \c!leftframe=\@@bkleftframe, \c!rightframe=\@@bkrightframe, \c!frameoffset=\@@bkframeoffset, \c!framecolor=\@@bkframecolor, %\c!local=\@@bklocal, \c!textmethod=\@@bktextmethod, \c!sidemethod=\@@bksidemethod, \c!method=\@@bkmethod, \c!pageboundaries=, \c!default=]% \setupcaption [#1] [\c!headstyle=\@@kjheadstyle, \c!headcolor=\@@kjheadcolor, \c!textstyle=\@@kjtextstyle, \c!textcolor=\@@kjtextcolor, \c!style=\@@kjstyle, \c!color=\@@kjcolor, \c!location=\@@kjlocation, \c!grid=\@@kjgrid, %\c!before=\@@kjbefore, \c!inbetween=\@@kjinbetween, %\c!after=\@@kjafter, \c!spacebefore=\@@kjspacebefore, \c!spaceinbetween=\@@kjspaceinbetween, \c!spaceafter=\@@kjspaceafter, \c!width=\@@kjwidth, \c!minwidth=\@@kjminwidth, \c!align=\@@kjalign, \c!number=\@@kjnumber, \c!way=\@@kjway, \c!blockway=\@@kjblockway, \c!sectionnumber=\@@kjsectionnumber, \c!distance=\@@kjdistance, \c!separator=\@@kjseparator, \c!stopper=\@@kjstopper, \c!suffix=\@@kjsuffix, % hook \c!command=\@@kjcommand, \c!conversion=\@@kjconversion, \c!leftmargin=\@@kjleftmargin, \c!rightmargin=\@@kjrightmargin, \c!outermargin=\@@kjoutermargin, \c!innermargin=\@@kjinnermargin, \c!setups=\@@kjsetups, ]% \definenumber % \definelabel [#1] [\c!text=#1, \c!location=\v!intext, \c!way=\floatcaptionparameter\c!way, \c!blockway=\floatcaptionparameter\c!blockway, \c!sectionnumber=\floatcaptionparameter\c!sectionnumber, \c!conversion=\floatcaptionparameter\c!conversion]% \presetlabeltext[#1=\Word{#1}~]% \newnodelocation{\v!float\@@thenumber{#1}}% \dodefinefloatcommands[#1][#2]} \def\dodefinefloatcommands[#1][#2]% {\definelist[#1]% \presetheadtext[#2=\Word{#2}]% \setvalue {\e!place\e!listof#2}{\dodoubleempty\doplacelist[#1]}% \setvalue {\e!complete\e!listof#2}{\dotripleempty\dodocompletelist[#1][#2]}% \setvalue {\e!place#1}{\dotripleempty\docomplexplacefloat[#1]}% \setvalue {\e!reserve#1}{\doquadrupleempty\docomplexreserveblock[#1]}% \setvalue {\e!start#1\e!text}{\dotripleempty\docomplexstarttextblock[#1]}% \setvalue {\e!stop#1\e!text}{\dostoptextfloat}% \setvalue{\e!start\e!reserve#1\e!text}{\doquadrupleempty\docomplexstartreservetextblock[#1]}% \setvalue {\e!stop\e!reserve#1\e!text}{\dostoptextfloat}} % \setupfloat[...][leftmargindistance=1cm,default={left,none}] \def\redodefinefloat[#1][#2][#3]% same label/number {\presetlocalframed[\??fl#1]% \copylocalframed[\??fl#1][\??fl#3]% \copyparameters[\??fl#1][\??fl#3] [\c!width,\c!height,%\c!local, \c!maxwidth,\c!maxheight,\c!minwidth, \c!margin,\c!sidespacebefore,\c!sidespaceafter,\c!sidealign, \c!leftmargindistance,\c!rightmargindistance,\c!criterium, \c!leftmargin,\c!rightmargin,\c!innermargin,\c!outermargin, \c!frame,\c!radius,\c!corner,\c!location,\c!background,\c!framecolor, \c!backgroundscreen,\c!backgroundcolor,\c!backgroundoffset, \c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe, \c!frameoffset,\c!pageboundaries,\c!default, \c!textmethod,\c!sidemethod,\c!method]% \copyparameters[\??kj#1][\??kj#3] [\c!location,\c!before,\c!inbetween,\c!after, \c!spacebefore,\c!spaceinbetween,\c!spaceafter, \c!width,\c!headstyle,\c!headcolor,\c!style,\c!color, \c!textstyle,\c!textcolor,\c!minwidth, \c!leftmargin,\c!rightmargin,\c!innermargin,\c!outermargin, \c!align,\c!number,\c!way,\c!blockway,\c!setups, \c!sectionnumber,\c!separator,\c!stopper,\c!suffix,\c!distance,\c!conversion]% \definenumber[#1][#3]% \presetlabeltext[#1=\labeltext{#3}]% \dodefinefloatcommands[#1][#2]} \def\placefloat {\dotripleempty\docomplexplacefloat} \installinsertion\topins \installinsertion\botins \newdimen\botinserted \newdimen\topinserted %D Extra float registers. \newif\ifsomefloatwaiting \somefloatwaitingfalse \newif\ifroomforfloat \roomforfloattrue \newif\ifnofloatpermitted \nofloatpermittedfalse \newcount\totalnoffloats \totalnoffloats =0 \newcount\savednoffloats \savednoffloats =0 \newcount\noffloatinserts \noffloatinserts=0 \newbox\floatlist \newbox\savedfloatlist \newif\ifflushingfloats \flushingfloatsfalse \newbox\floattext \newdimen\floattextwidth \newdimen\floattextheight \newbox\floatbox \newbox\savedfloatbox \newdimen\floatwidth \newdimen\floatheight % the tricky part of getting float related two pass data is % that we should fetch is early but can only save it with % the composed float box; this determines the order: get it % before saving it \definetwopasslist{\s!float\s!data} \newcounter\noffloatdata \let\twopassfloatdata\realpageno \def\dosavefloatdata % \expanded {\doglobal\increment\noffloatdata \lazysavetaggedtwopassdata{\s!float\s!data}{\noffloatdata}{\noffloatpages}{\noexpand\realfolio}}% later {}{}{}{} and \getfirst... \def\dogetfloatdata % precedes save ! {\doglobal\increment\noffloatpages \findtwopassdata{\s!float\s!data}{\noffloatpages}% \iftwopassdatafound \globallet\twopassfloatdata\twopassdata \else \globallet\twopassfloatdata\realpageno % \realfolio \fi} \def\tracefloatnumber#1% {\doifnot\@@bknumbering\v!nocheck{\tagnodelocation{\v!float\@@thenumber{#1}}}} \newconditional\retainfloatnumber \def\preparefloatnumber#1% {\xdef\floatcaptionnumber{#1}% \doifelsenodelocation{\v!float\@@thenumber{#1}} \donothing {\chardef\nodelocationmode\zerocount}% \doifelse\@@bknumbering\v!nocheck {\incrementnumber[#1]% \makesectionnumber[#1]% \ifconditional\retainfloatnumber\decrementnumber[#1]\fi} {\ifinsidecolumns \chardef\nodelocationmode\zerocount % to be perfected: % \chardef\nodelocationmode\plustwo \fi \ifcase\nodelocationmode \incrementnumber[#1]% \makesectionnumber[#1]% \ifconditional\retainfloatnumber\decrementnumber[#1]\fi \else % force check, so that we get a proper way-sync and % can use the accumulated number % \checknumber[#1]% \incrementnumber does this \incrementnumber[#1]% \savenumber[#1]% % the real work is done here \nextnodelocation{\v!float\@@thenumber{#1}}% better \nextfloatnumber \analyzenodelocation{\v!float\@@thenumber{#1}}% \scratchcounter\getnodelocationo{\v!float\@@thenumber{#1}}% \advance\scratchcounter\minusone % here we correct for 'per whatever handling' \advance\scratchcounter-\accumulatednumber[#1]% \setnumber[#1]\scratchcounter \incrementnumber[#1]% \makesectionnumber[#1]% \restorenumber[#1]% % now we're back to normal numbering \fi}} %D test case: %D %D \starttyping %D \setupfloat[figure][criterium=\marginwidth,fallback=bottom] %D \dorecurse{3}{ %D \chapter{test} %D \placefigure[bottom]{1}{\framed{bottom}} %D test %D \placetable[bottom]{1}{\framed{table}} %D test %D \placetable{2}{\framed{table}} %D test %D \placefigure[left]{2}{\framed{left but way too wide}} %D \input tufte %D \placefigure[left]{3}{\framed{left but ok}} %D \input tufte } %D \stoptyping % In \dofloatinfomessage wordt {{ }} gebruikt omdat anders % binnen \startpostponing...\stoppostponing geen goede % melding in de marge volgt: \ifinner is dan namelijk true. \def\dofloatinfomessage#1#2#3% {\bgroup \showmessage\m!floatblocks{#2}{#3}% \setmessagetext\m!floatblocks{#2}% \@EA\floatinfo\@EA#1\@EA{\currentmessagetext}% \egroup} \def\dosavefloatinfo {\dofloatinfomessage>2{\the\totalnoffloats}} \def\dofloatflushedinfo {\bgroup \!!counta\totalnoffloats \advance\!!counta -\savednoffloats \dofloatinfomessage<3{\the\!!counta}% \egroup} \def\doinsertfloatinfo {\dofloatinfomessage<4{\the\totalnoffloats}} \def\dogetfloat {\ifsomefloatwaiting \global\setbox\floatlist\vbox {\unvbox\floatlist \global\setbox\globalscratchbox\lastbox}% \ifcenterfloatbox \ifdim\wd\globalscratchbox<\hsize \setbox\floatbox\hbox to \hsize{\hss\box\globalscratchbox\hss}% \else \setbox\floatbox\box\globalscratchbox % local ! % retain special alignments \ifinsidecolumns \ifdim\wd\floatbox>\makeupwidth \wd\floatbox\makeupwidth \fi \fi \fi \else \setbox\floatbox\box\globalscratchbox % local ! \fi \global\advance\savednoffloats \minusone \ifcase\savednoffloats \global\somefloatwaitingfalse \fi \else \global\savednoffloats\zerocount \global\setbox\floatbox\emptybox \fi} \def\uncenteredfloatbox {\ifcenterfloatbox \ifhbox\floatbox\relax % remove centering \ifdim\wd\floatbox=\hsize \ifhbox\floatbox \setbox\scratchbox\hbox {\unhbox\floatbox \unskip\unskip \global\setbox\globalscratchbox\lastbox}% \box\globalscratchbox \else \box\floatbox \fi \else \box\floatbox \fi \else \box\floatbox \fi \else \box\floatbox \fi} \def\dosavefloat {\global\setbox\floatlist\vbox {\nointerlineskip \uncenteredfloatbox \unvbox\floatlist}% \global\advance\savednoffloats \plusone \global\somefloatwaitingtrue \dosavefloatinfo \nonoindentation} \def\doresavefloat {\global\setbox\floatlist\vbox {\nointerlineskip \unvbox\floatlist \uncenteredfloatbox}% \global\advance\savednoffloats \plusone \global\somefloatwaitingtrue} \def\doreversesavefloat {\global\setbox\floatlist\vbox {\nointerlineskip \unvbox\floatlist \uncenteredfloatbox}% \global\advance\savednoffloats \plusone \global\somefloatwaitingtrue \dosavefloatinfo} % better (todo): \savednofsavedfloats \def\dosavefloatstatus {\global\setbox\savedfloatlist\copy\floatlist \global\setbox\savedfloatbox \copy\floatbox \xdef\dorestorefloatstatus {\global\setbox\floatlist\box\savedfloatlist \global\setbox\floatbox \box\savedfloatbox \global\savednoffloats\the\savednoffloats}} \let\dorestorefloatstatus\relax \ifx\doflushfloats\undefined \let\doflushfloats\relax \fi \ifx\flushfloatbox\undefined \let\flushfloatbox\relax \fi % needed in the splitter: \newcount\savedsavednoffloats \let\dopopsavedfloats\relax \def\dopushsavedfloats {\global\setbox\savedfloatlist\box\floatlist \global\savedsavednoffloats\savednoffloats \global\savednoffloats\savednoffloats \global\somefloatwaitingfalse \gdef\dopopsavedfloats {\global\advance\savednoffloats\savedsavednoffloats \global\setbox\floatlist\vbox\bgroup \ifvoid\floatlist \else\unvbox\floatlist \fi \ifvoid\savedfloatlist\else\unvbox\savedfloatlist\fi \egroup \global\ifcase\savednoffloats \somefloatwaitingfalse\else\somefloatwaitingtrue\fi \globallet\dopopsavedfloats\relax}} \def\doflushsavedfloats % simplified \OTRONEdodoflushfloats {\doloop {\ifsomefloatwaiting \dogetfloat \dofloatflushedinfo \docheckiffloatfits \ifroomforfloat \doplacefloatbox \else \doreversesavefloat \exitloop \fi \else \exitloop \fi}} % top and bottom \newif\iftopofinsert \newif\iftestfloatbox \newif\ifcenterfloatbox \centerfloatboxtrue \newif\iflocalcenterfloatbox \localcenterfloatboxfalse \newif\ifglobalcenterfloatbox \globalcenterfloatboxfalse % beter de laatste skip buiten de \insert uitvoeren, % bovendien bij volle flush onder baseline. \def\betweenfloatblanko% assumes that \@@bkspaceafter is present {\bgroup \setbox0\vbox{\strut\blank[\@@bkspacebefore]\strut}% \setbox2\vbox{\strut\blank[\@@bkspaceafter ]\strut}% \ifdim\ht0>\ht2 \blank[-\@@bkspaceafter,\@@bkspacebefore]% \fi \egroup} \def\doplacefloatbox {%\forgetall % NJET! \whitespace \blank[\@@bkspacebefore] \flushfloatbox \blank[\@@bkspaceafter]} \ifx\someherefloat\undefined \let\someherefloat\doplacefloatbox \fi \ifx\somefixdfloat\undefined \let\somefixdfloat\doplacefloatbox \fi \ifx\somepagefloat\undefined \let\somepagefloat\doplacefloatbox \fi \ifx\sometopsfloat\undefined \let\sometopsfloat\doplacefloatbox \fi \ifx\somebotsfloat\undefined \let\somebotsfloat\doplacefloatbox \fi \ifx\somesidefloat\undefined \let\somesidefloat\doplacefloatbox \fi \ifx\somefacefloat\undefined \let\somefacefloat\doplacefloatbox \fi \ifx\sometextfloat\undefined \let\sometextfloat\doplacefloatbox \fi % brr, wordt deze niet overladen in page-one? weg er mee % \def\somepagefloat[#1]% links, rechts, midden, hoog, midden, laag % {%\checkwaitingfloats{#1}% % \global\setbox\collectedpagefloats\vbox % {\unvbox\collectedpagefloats % \vbox to \textheight % {\doifnotinset\v!high{#1}\vfill % \box\floatbox % \doifnotinset\v!low{#1}\vfill}% % \goodbreak}% % \doinsertfloatinfo} % \def\OTRONEsomepagefloat[#1]% % {%\checkwaitingfloats{#1}% % \global\setbox\collectedpagefloats\vbox % {\ifvoid\collectedpagefloats\else\unvbox\collectedpagefloats\fi % \vbox to \textheight % vss and unvbox catch too high and limited floats % {\vss % \doifnotinset\v!high{#1}\vfill % \unvbox\floatbox % \doifnotinset\v!low{#1}\vfill % \vss}% % \goodbreak}% % \doinsertfloatinfo} % test case: % % \placefigure[page,none]{}{\blackrule[width=\textwidth,height=0.9\textheight,color=green]} % \placefigure[page,none]{}{\blackrule[width=\textwidth,height=1.0\textheight,color=green]} % \placefigure[page,none]{}{\blackrule[width=\textwidth,height=1.1\textheight,color=green]} \def\sometextfloat[#1]% lang, links, rechts, hoog, midden, laag, offset {%\checkwaitingfloats{#1}% \gdef\dostoptextfloat{\dodostoptextfloat[#1]}% brr global \global\floattextwidth\hsize \global\floatwidth\wd\floatbox \global\floatheight\ht\floatbox % forget about the depth \global\advance\floattextwidth -\floatwidth \global\advance\floattextwidth -\@@bkmargin\relax % was \tfskipsize \doifinsetelse\v!tall{#1} {\floattextheight\pagegoal \advance\floattextheight -\pagetotal \advance\floattextheight -\bigskipamount % lelijk \ifdim\floattextheight>\textheight \floattextheight\textheight \fi \boxmaxdepth\zeropoint \relax % toegevoegd \ifdim\floattextheight<\floatheight \floattextheight\floatheight \fi \setbox\floattext\vbox to \floattextheight} {\setbox\floattext\vbox}% \bgroup \forgetall \setupblank \setupwhitespace % new, also needed for footnotes \blank[\v!disable] \hsize\floattextwidth \ignorespaces} \def\dodostoptextfloat[#1]% % de tekst kan beter in een soort {\egroup % kadertekst zonder kader, is flexibeler \doifnotinset\v!tall{#1}% en beter {\ifdim\ht\floattext<\floatheight \floattextheight\floatheight \else \floattextheight\ht\floattext \fi}% \setbox\floatbox\vbox to \floattextheight {\hsize\floatwidth \doifinsetelse\v!both{#1}% {\doifinsetelse\v!low{#1} {\vfill\box\floatbox} {\doifinsetelse\v!middle{#1} {\vfill\box\floatbox\vfill} {\box\floatbox\vfill}}} {\box\floatbox\vfill}}% \setbox\floattext\vbox to \floattextheight {\hsize\floattextwidth \doifinsetelse\v!low{#1} {\vfill \box\floattext \doifinset\c!offset{#1}{\whitespace\blank}} {\doifinsetelse\v!middle{#1} {\vfill \box\floattext \vfill} {\doifinset\v!offset{#1}{\whitespace\blank}% \box\floattext \vfill}}}% \doifinsetelse\v!right{#1}% \floatmethod {\setbox\floatbox\hbox to \hsize {\box\floattext \hfill \box\floatbox}} {\setbox\floatbox\hbox to \hsize {\box\floatbox \hfill \box\floattext}}% \baselinecorrection \whitespace \blank[\@@bkspacebefore]% \doifnotinset\v!tall{#1}% {\dp\floatbox\openstrutdepth}% dp\strutbox}% % toegevoegd \box\floatbox \blank[\@@bkspaceafter]% \endgroup % ** \doinsertfloatinfo} \def\somefacefloat[#1]% links, rechts, midden, hoog, midden, laag {%\checkwaitingfloats{#1}% \startopposite\box\floatbox\stopopposite \doinsertfloatinfo} \def\someelsefloat[#1]% {\doifinsetelse\v!here{#1} {\doifinsetelse\v!always{#1} {\page[\v!preference]% \docheckiffloatfits \ifroomforfloat \placesomeherefloat[#1]% \else \showmessage\m!floatblocks9\empty \doreversesavefloat \fi} {\ifsomefloatwaiting \dosavefloat \else \page[\v!preference]% \docheckiffloatfits \ifroomforfloat \placesomeherefloat[#1]% \else \dosavefloat \fi \fi}} {\doifinsetelse\v!always{#1} {\docheckiffloatfits \ifroomforfloat \sometopbottomfloat[#1] \else \showmessage\m!floatblocks9\empty \doreversesavefloat \fi} {\docheckiffloatfits \ifroomforfloat \sometopbottomfloat[#1] \else \dosavefloat \fi}}} \def\floatautofactor{.5} \def\sometopbottomfloat[#1]% {\doifelse\floatmethod\v!auto {\ifdim\pagetotal<\floatautofactor\pagegoal % when empty page, maxdimen \placesometopsfloat[#1]% \else \placesomebotsfloat[#1]% \fi} {\doifelse\floatmethod\v!top {\placesometopsfloat[#1]} {\doifelse\floatmethod\v!bottom {\placesomebotsfloat[#1]} {\placesomeherefloat[#1]}}}} % De onderstaande macro wordt gebruikt bij de macros % voor het plaatsen van tabellen en figuren (klopt niet % meer). % % \dofloat {plaats} {label1} {label2} % % \docompletefloat {nummer} {referentie} {lijst} % {plaats} {label1} {label2} {inhoud} % % \box\floatbox inhoud+referentie % % \do???float#1 #1 = boxnummer \newdimen\floatsideskip \floatsideskip =12pt \newdimen\floattopskip \floattopskip =\floattopskip \newdimen\floatbottomskip \floatbottomskip=\floattopskip \newdimen\sidefloattopskip \sidefloattopskip =\floattopskip \newdimen\sidefloatbottomskip \sidefloatbottomskip=\floatbottomskip \newskip\sidefloatdownshift \newskip\sidefloatleftshift \newskip\sidefloatrightshift \def\sidefloattopoffset {\openstrutdepth} % {\strutdp} \newcount\noftopfloats \noftopfloats=2 \newcount\nofbotfloats \nofbotfloats=0 \newif\ifnofloatcaption \newif\ifnofloatnumber \newif\ifemptyfloatcaption \def\docalculatefloatskip#1#2% {\doifelsenothing{#2} {\global#1\zeropoint} {\doifelse{#2}\v!none {\global#1\zeropoint} {\setbox0\vbox{\whitespace\expanded{\blank[#2]}}% \global#1\ht0}}} \def\calculatefloatskips {{\docalculatefloatskip\floattopskip \@@bkspacebefore \docalculatefloatskip\floatbottomskip \@@bkspaceafter \docalculatefloatskip\sidefloattopskip {\floatparameter\c!sidespacebefore}% \docalculatefloatskip\sidefloatbottomskip{\floatparameter\c!sidespaceafter }% \gdef \sidefloattopoffset{\openstrutdepth}% was \def \global\floatsideskip \floatparameter\c!margin \global\sidefloatleftshift \floatparameter\c!leftmargindistance \global\sidefloatrightshift\floatparameter\c!rightmargindistance \global\noftopfloats \@@bkntop \relax \global\nofbotfloats \@@bknbottom\relax}} \let\floatcaptionsuffix\empty % an optional suffix \let\floatcaptionnumber\empty % a logical counter % Quite experimental ! % the split is needed when for instance the float goes into % a multi page field and the list of figs becomes larger than % one page: cycle between 'only flush when object ref ok' % and 'one/many page fig list'; see "uguide finometer" % % potential sync bug with sectionblocks, see uguide.tex \def\placefloatcaption {\dodoubleempty\doplacefloatcaption} \long\def\doplacefloatcaption[#1][#2]#3% {\setfloatcaption[#1][#2]{#3}% \placefloatcaptiontext[#1]% \placefloatcaptionreference[#1]} \def\setfloatcaption % \dosetfloatcaption already in use {\dodoubleempty\dodosetfloatcaption} % beware, name clash \long\def\dodosetfloatcaption[#1][#2]#3% to do namespace for number/ascii {\ifnofloatnumber % also handle trialtypesetting \letgvalue{@fl@r@#1}\relax \letgvalue{@fl@t@#1}\relax \else \preparefloatnumber{#1}% \letgvalue{@fl@n@#1}\composedsectionnumber % indirect macro can be more efficient \setgvalue{@fl@r@#1}% {\tracefloatnumber{#1}% \ifconditional\retainfloatnumber\else \dowritetolist{#1}{\getvalue{@fl@n@#1}}{#3}{#1}% \gdefconvertedargument\flasciititle{#3}% \asciititle is global \doifsomething{#2}{\rawreference\s!flt{#2}{{\getvalue{@fl@n@#1}}{\flasciititle}}}% \fi \letgvalue{@fl@r@#1}\relax}% nils \setgvalue{@fl@t@#1}% {\preparefullnumber{\??kj#1}{\getvalue{@fl@n@#1}}\preparednumber \doattributes{\??kj#1}\c!style\c!color {\doattributes{\??kj#1}\c!headstyle\c!headcolor {\labeltexts{#1}{\preparednumber}}% \doattributes{\??kj#1}\c!textstyle\c!textcolor {\dotfskip{\floatcaptionparameter\c!distance}#3}}}% \fi} \def\placefloatcaptiontext [#1]{\getvalue{@fl@t@#1}} \def\placefloatcaptionnumber [#1]{\getvalue{@fl@n@#1}} \def\placefloatcaptionreference[#1]{\getvalue{@fl@r@#1}} % still needed for uguide \let\placefloatlabel \placefloatcaption \let\placefloatlabeltext \placefloatcaptiontext \let\placefloatlabelreference \placefloatcaptionreference \def\borderedfloatbox {\localframed[\??fl\currentfloat][\c!location=\v!normal]{\box\floatbox}} \newbox\captionbox \long\def\putcompletecaption#1#2% {\doifsomething{\floatcaptionparameter\c!spacebefore}{\blank[\floatcaptionparameter\c!spacebefore]}% % \floatcaptionparameter\c!before % test for side effects first \noindent \xdef\lastcaptiontag{\strut#1}% \dostartattributes{\??kj\currentfloat}\c!style\c!color\empty \ifnofloatnumber \else \hbox{\doattributes{\??kj\currentfloat}\c!headstyle\c!headcolor{\strut#1}}% \ifnofloatcaption \else \ifemptyfloatcaption \else \doifelsenothing{\floatcaptionparameter\c!spaceinbetween} {\scratchskip\floatcaptionparameter\c!distance\relax \dotfskip\scratchskip\emergencystretch.5\scratchskip} {\blank[\floatcaptionparameter\c!spaceinbetween]}% \fi \fi \fi \ifnofloatcaption \globallet\lastcaptionht\!!zeropoint \globallet\lastcaptiondp\!!zeropoint \else \doattributes{\??kj\currentfloat}\c!textstyle\c!textcolor {\xdef\lastcaptionht{\strutheight}% \xdef\lastcaptiondp{\strutdepth}% \begstrut#2\endstrut\endgraf}% \fi \dostopattributes % \floatcaptionparameter\c!after % test for side effects first \doifsomething{\floatcaptionparameter\c!spaceafter}{\blank[\floatcaptionparameter\c!spaceafter]}} \let\lastcaptionht\!!zeropoint \let\lastcaptiondp\!!zeropoint % new \newbox\tempfloatbox \newbox\tempcaptionbox \newif\iftracecaptions \def\settracedcaptionbox {\iftracecaptions\setbox\tempcaptionbox\ruledhbox{\box\tempcaptionbox}\fi} %\stelblokkopjesin[\c!width=5cm] %\stelblokkopjesin[\c!align=\v!left] %\stelblokkopjesin[\c!align=\v!right] % \definefloat [figure-1] [figure] % \definefloat [figure-2] [figure] % \setupfloat [figure-1] [location=left,leftmargin=10mm] % \setupfloat [figure-2] [location=left,leftmargin=-5mm] % \setupcaption [figure-1] [align=flushleft] % \setupcaption [figure-2] [align=flushleft,leftmargin=15mm] % % \startsetups somefigure % \ifdim\wd\nextbox>\textwidth % \placefloat[figure-2][][]{}{\box\nextbox} % \else % \placefloat[figure-1][][]{}{\box\nextbox} % \fi % \stopsetups % % \def\setupswithbox[#1]{\dowithnextbox{\setups[#1]}\vbox} % % test \setupswithbox[somefigure]{\framed[width=3cm] {}} test % test \setupswithbox[somefigure]{\framed[width=\dimexpr\textwidth+3cm\relax]{}} test \def\dosetcaptionthings {\setups[\floatcaptionparameter\c!setups]% expanded ? % \advance\leftskip \floatcaptionparameter\c!leftmargin % \advance\rightskip\floatcaptionparameter\c!rightmargin \relax} \def\dofakecaptionthings {\hbox{\dosetcaptionthings\hskip\leftskip\hskip\rightskip}} \long\def\docheckcaptioncontent#1#2% {\ifnofloatcaption \else \setbox\tempcaptionbox\hbox {\trialtypesettingtrue \notesenabledfalse \putcompletecaption{#1}{#2}}% % new, \placefigure{\XMLflush{somecaption}}{} passes earlier empty check % so here we misuse the scratch box; actually this means that the previous % test can go away (some day, when i redo this module) \ifdim\wd\tempcaptionbox=\zeropoint \global\emptyfloatcaptiontrue \ifnofloatnumber \global\nofloatcaptiontrue \fi \else \setbox\tempcaptionbox\hbox{\dosetcaptionthings\hskip\leftskip\box\tempcaptionbox}% yet incomplete \fi \fi} % minwidth=fit,width=max : no overshoot, as wide as graphic \ifx\moveboxontogrid\undefined \let\movecaptionontogrid\gobblethreearguments \fi \def\locatefloatbox {\chardef\alignstrutmode\zerocount \shiftalignedline {\floatparameter\c!leftmargin }{\floatparameter\c!rightmargin}% {\floatparameter\c!innermargin}{\floatparameter\c!outermargin}% \alignedline{\floatparameter\c!location}\v!middle} \def\locatecaptionbox {\chardef\alignstrutmode\zerocount \shiftalignedline {\floatcaptionparameter\c!leftmargin }{\floatcaptionparameter\c!rightmargin}% {\floatcaptionparameter\c!innermargin}{\floatcaptionparameter\c!outermargin}% \alignedline{\floatparameter\c!location}\v!middle} \long\def\dosetpagfloat#1#2#3% \copy wegwerken {\bgroup \setlocalfloathsize \ifnum\floatrotation>0 \swapdimens\hsize\vsize \fi \forgetall \postponenotes \dontcomplain \setbox\tempfloatbox\vbox{\borderedfloatbox}% \let\locatefloat \locatefloatbox \let\locatecaption\locatecaptionbox \docheckcaptioncontent{#2}{#3}% \ifcase\floatparameter\c!method \or % automatic \ifnofloatcaption \dopreparenocaption{#1}{#2}{#3}% \edef\width{\the\wd\floatbox}% \doglobal\addlocalbackgroundtobox\floatbox \else % todo: installable maken, variant/method=auto vs macro \dopreparedocaption{#1}{#2}{#3}% \settracedcaptionbox \edef\width{\the\wd\tempfloatbox}% \addlocalbackgroundtobox\tempfloatbox \setbox\tempcaptionbox\hbox {\dosetcaptionthings \floatcaptionparameter\c!command{\box\tempcaptionbox}}% \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht \addlocalbackgroundtobox\tempcaptionbox \buildfloatbox \fi \or % semi automatic \or % manual \fi \ifnum\floatrotation>0 \global\setbox\floatbox\vbox {\rotate[\c!rotation=\floatrotation]{\box\floatbox}}% \edef\width{\the\wd\tempfloatbox}% \else \postcenterfloatbox\width \fi \egroup} \def\captionminwidth {15\bodyfontsize} \def\captionovershoot {2em} \def\dopreparenocaption#1#2#3% {\global\setbox\floatbox\vbox % pas op als wd groter dan hsize {\ifinsidecolumns\ifdim\wd\tempfloatbox>\hsize \let\locatefloat\relax \fi\fi \locatefloat{\copy\tempfloatbox}}} \def\dopreparedocaption#1#2#3% {\doifinsetelse{\floatcaptionparameter\c!location}{\v!top,\v!bottom} {\doifinsetelse{\floatcaptionparameter\c!width}{\v!fit,\v!max} {\doifelse{\floatcaptionparameter\c!minwidth}\v!fit {\doifelse{\floatcaptionparameter\c!width}\v!max {\dopreparestackcaptionmax{#1}{#2}{#3}} {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption \doifelse{\floatcaptionparameter\c!width}\v!fit {\dopreparestackcaptionaut{#1}{#2}{#3}} {\dopreparestackcaptionwid{#1}{#2}{#3}}% \else \dopreparestackcaptionmin{#1}{#2}{#3}% \fi}} {\dopreparestackcaptionfix{#1}{#2}{#3}}}% {\dopreparesidewidthcaption{#1}{#2}{#3}}}% new, special effects (see icare) {\doifinsetelse{\floatcaptionparameter\c!width}{\v!fit,\v!max} {\dopreparesideautocaption{#1}{#2}{#3}} {\dopreparesidewidthcaption{#1}{#2}{#3}}}} % \def\dosettempcaptionbox % {\dosetraggedvbox{\floatcaptionparameter\c!align}% % \setbox\tempcaptionbox\raggedbox} \def\dosettempcaptionbox {\setbox\tempcaptionbox\vbox\bgroup %expanded{\setupalign[\v!new,\v!reset,\floatcaptionparameter\c!align,\v!old]}% wrong! see icare \expanded{\setupalign[\v!reset,\floatcaptionparameter\c!align]}% i need to check what reset does \dosetcaptionthings \let\next} \def\dopreparesideautocaption#1#2#3% {\scratchdimen\dimexpr\hsize-\wd\tempfloatbox-\@@bkmargin\relax % was \tfskipsize\relax \ifdim\wd\tempcaptionbox>\scratchdimen \ifdim\wd\tempcaptionbox<1.3\scratchdimen \scratchdimen0.8\scratchdimen \fi \fi \dosettempcaptionbox {\hsize\scratchdimen \putcompletecaption{#2}{#3}}} \def\dopreparesidewidthcaption#1#2#3% {\dosettempcaptionbox {\hsize\floatcaptionparameter\c!width \putcompletecaption{#2}{#3}}} \def\dopreparestackcaptionfix#1#2#3% {\dosettempcaptionbox {\hsize\floatcaptionparameter\c!minwidth % special effects \putcompletecaption{#2}{#3}}} \def\dopreparestackcaptionmax#1#2#3% {\dosettempcaptionbox {\hsize\wd\tempfloatbox \putcompletecaption{#2}{#3}}} \def\dopreparestackcaptionwid#1#2#3% {\dosettempcaptionbox {\hsize\floatcaptionparameter\c!width \putcompletecaption{#2}{#3}}} \def\dopreparestackcaptionmin#1#2#3% {\dosettempcaptionbox {\hsize\wd\tempfloatbox \doifnothing{\floatcaptionparameter\c!align}\raggedcenter % on purpose overloads align ! \putcompletecaption{#2}{#3}}} \def\dopreparestackcaptionaut#1#2#3% {\doifsomething{\floatcaptionparameter\c!align} {\doifnotinset{\v!middle}{\floatcaptionparameter\c!align}% {\let\captionovershoot\!!zeropoint}}% \edef\captionhsize{\the\wd\tempfloatbox}% \ifdim\captionhsize>\hsize % float is wider than \hsize \dosettempcaptionbox {\trialtypesettingtrue \hsize\captionhsize \notesenabledfalse \putcompletecaption{#2}{#3}}% \ifdim\ht\scratchbox>\lineheight % more lines \dosettempcaptionbox {\hsize\captionhsize \advance\hsize -\captionovershoot\relax \ifdim\hsize<\captionminwidth\relax \hsize\captionhsize \fi \putcompletecaption{#2}{#3}}% \else \dosettempcaptionbox {\hsize\captionhsize \putcompletecaption{#2}{#3}}% \fi \else % float is smaller of equal to \hsize \ifdim\captionhsize<\captionminwidth\relax \scratchdimen\captionminwidth % float smaller than min width \edef\captionhsize{\the\scratchdimen}% \fi \setbox\scratchbox\vbox % test with overshoot {\trialtypesettingtrue \scratchdimen\captionhsize \advance\scratchdimen \captionovershoot \advance\scratchdimen 3em % an average word length \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi \notesenabledfalse \putcompletecaption{#2}{#3}}% \ifdim\ht\scratchbox>\lineheight % at least an average word longer than a line \dosettempcaptionbox {\scratchdimen\captionhsize \advance\scratchdimen \captionovershoot \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi \putcompletecaption{#2}{#3}}% \else % just over a line, don't use an overshoot % % % todo: outer/inner and such \doifcommonelse{\floatcaptionparameter\c!align}{\v!left,\v!right,\v!flushleft,\v!flushright} {\dosettempcaptionbox {\hsize\captionhsize % strange : \raggedcenter \putcompletecaption{#2}{#3}}} {% nicer \dosettempcaptionbox {\hsize\captionhsize \doifnothing{\floatcaptionparameter\c!align}\raggedcenter% overloads \putcompletecaption{#2}{#3}}}% \fi \fi} \newdimen\tempfloatheight \newdimen\tempfloatwidth \def\dofloatboxbetweenstack {\endgraf\nointerlineskip\floatcaptionparameter\c!inbetween\endgraf} \def\dofloatboxdefaultbuilder % done {\locatefloat{\box\tempfloatbox}} \def\dofloatboxnextrightbuilder#1% {\ifparfloat \hbox \else \expandafter \locatefloat \fi {\tempfloatheight\ht\tempfloatbox \box\tempfloatbox \expanded{\doifnotinset{\v!hang}{\floatcaptionparameter\c!location}}{\dotfskip{\floatcaptionparameter\c!distance}}% \vbox to\tempfloatheight{#1}}} \def\dofloatboxnextleftbuilder#1% {\ifparfloat \hbox \else \expandafter \locatefloat \fi {\tempfloatheight\ht\tempfloatbox \vbox to\tempfloatheight{#1}% \expanded{\doifnotinset{\v!hang}{\floatcaptionparameter\c!location}}{\dotfskip{\floatcaptionparameter\c!distance}}% \box\tempfloatbox}} \def\dofloatboxnextouterbuilder {\doifrightpagefloatelse\dofloatboxnextrightbuilder\dofloatboxnextleftbuilder} \def\dofloatboxnextinnerbuilder {\doifrightpagefloatelse\dofloatboxnextleftbuilder\dofloatboxnextrightbuilder} \def\dofloatboxnextrighthangbuilder#1% {\ifparfloat \hbox \else \expandafter \locatefloat \fi {\tempfloatheight\ht\tempfloatbox \box\tempfloatbox \vbox to\tempfloatheight{#1}}} \def\dofloatboxnextlefthangbuilder#1% {\ifparfloat \hbox \else \expandafter \locatefloat \fi {\tempfloatheight\ht\tempfloatbox \vbox to\tempfloatheight{#1}% \box\tempfloatbox}} \def\dodofloatboxnextrightmarginbuilder#1#2% {\ifparfloat \hbox\bgroup \tempfloatheight\ht\tempfloatbox \box\tempfloatbox \hsmash{\hskip#1\vbox to\tempfloatheight{#2}}% \egroup \else \begingroup \tempfloatheight\ht\tempfloatbox \everyrightofalignedline{\hsmash{\hskip#1\vbox to\tempfloatheight{#2}}}% \locatefloat{\box\tempfloatbox}% \endgroup \fi} \def\dodofloatboxnextleftmarginbuilder#1#2% {\ifparfloat \hbox\bgroup \tempfloatheight\ht\tempfloatbox \hsmash{\hskip-\dimexpr#1+\wd\tempcaptionbox\relax\vbox to\tempfloatheight{#2}}% \box\tempfloatbox \egroup \else \begingroup \tempfloatheight\ht\tempfloatbox \everyleftofalignedline{\hsmash{\hskip-\dimexpr#1+\wd\tempcaptionbox\relax\vbox to\tempfloatheight{#2}}}% \locatefloat{\box\tempfloatbox}% \endgroup \fi} \def\dofloatboxnextrightmarginbuilder{\dodofloatboxnextrightmarginbuilder\rightmargindistance} \def\dofloatboxnextleftmarginbuilder {\dodofloatboxnextleftmarginbuilder \leftmargindistance } \def\dofloatboxnextoutermarginbuilder {\doifrightpagefloatelse {\dodofloatboxnextrightmarginbuilder\rightmargindistance} {\dodofloatboxnextleftmarginbuilder \rightmargindistance}} \def\dofloatboxnextinnermarginbuilder {\doifrightpagefloatelse {\dodofloatboxnextleftmarginbuilder \leftmargindistance} {\dodofloatboxnextrightmarginbuilder\leftmargindistance}} \def\dofloatboxnextbuilder % beware, we first check on left/rightmargin because there can be left/right also {\let\next\dofloatboxnextleftbuilder \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} [ \v!outermargin=>\let\next\dofloatboxnextoutermarginbuilder, \v!innermargin=>\let\next\dofloatboxnextinnermarginbuilder, \v!leftmargin=>\let\next\dofloatboxnextleftmarginbuilder, \v!rightmargin=>\let\next\dofloatboxnextrightmarginbuilder, \v!lefthanging=>\let\next\dofloatboxnextlefthangbuilder, \v!righthanging=>\let\next\dofloatboxnextrighthangbuilder, \v!outer=>\let\next\dofloatboxnextouterbuilder, \v!inner=>\let\next\dofloatboxnextinnerbuilder, \v!left=>\let\next\dofloatboxnextleftbuilder, \v!right=>\let\next\dofloatboxnextrightbuilder]% \next} \def\dofloatboxsidebuilder {\ifparfloat \let\next\dofloatboxhighbuilder \else \let\next\dofloatboxmiddlebuilder \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} [ \v!low=>\let\next\dofloatboxlowbuilder, \v!middle=>\let\next\dofloatboxmiddlebuilder, \v!high=>\let\next\dofloatboxhighbuilder]% \fi \next} \def\doflushfloatleftcaptionhang {\hsmash{\llap{\box\tempcaptionbox\dotfskip{\floatcaptionparameter\c!distance}}}} \def\doflushfloatrightcaptionhang {\hsmash{\rlap{\dotfskip{\floatcaptionparameter\c!distance}\box\tempcaptionbox}}} \def\doflushfloatcaptionhang {\expanded{\doifinsetelse{\v!righthanging}{\floatcaptionparameter\c!location}} {\doflushfloatrightcaptionhang} {\expanded{\doifinsetelse{\v!lefthanging}{\floatcaptionparameter\c!location}} {\doflushfloatleftcaptionhang} {\expanded{\doifinsetelse{\v!hang}{\floatcaptionparameter\c!location}} {\expanded{\doifinsetelse{\v!outer}{\floatcaptionparameter\c!location}} {\doifrightpagefloatelse{\doflushfloatrightcaptionhang}{\doflushfloatleftcaptionhang}} {\expanded{\doifinsetelse{\v!right}{\floatcaptiondirectives}} {\doflushfloatrightcaptionhang} {\doflushfloatleftcaptionhang}}} {\box\tempcaptionbox}}}} \def\dofloatboxhighbuilder {\dofloatboxnextbuilder{\dofloatboxbetweenstack\doflushfloatcaptionhang\vfill}} \def\dofloatboxlowbuilder {\dofloatboxnextbuilder{\vfill\doflushfloatcaptionhang\dofloatboxbetweenstack}} \def\dofloatboxmiddlebuilder {\dofloatboxnextbuilder{\vfill\box\tempcaptionbox\vfill}} % \definefloat % [lefty][lefties][figure] % \setupfloat % [lefty] % [default=left, % rightmargindistance=-2cm, % leftmargindistance=-2cm] % \setupcaption % [lefty] % [location={bottom,overlay}] % % \starttext % \placelefty{}{} \input tufte \input tufte % \placelefty{}{} \input tufte \input tufte % \stoptext \def\bothangfloat#1{\ruledvbox to \ht\tempfloatbox{#1\vss}} \def\tophangfloat#1{\ruledvbox to \ht\tempfloatbox{\vss#1}} \def\dofloatboxnormaltopstackbuilder {\expanded{\doifinset{\v!overlay}{\floatcaptionparameter\c!location}}\tophangfloat {\tempfloatwidth\wd\tempfloatbox \ifparfloat \hbox{\locatesidefloat{\box\tempcaptionbox}}% \dofloatboxbetweenstack \hbox{\hbox {\box\tempfloatbox }}% \else \hbox{\locatetextfloat{\box\tempcaptionbox}} \dofloatboxbetweenstack \hbox{\locatefloat {\box\tempfloatbox }}% \fi}} \def\dofloatboxnormalbotstackbuilder {\expanded{\doifinset{\v!overlay}{\floatcaptionparameter\c!location}}\bothangfloat {\tempfloatwidth\wd\tempfloatbox \ifparfloat \hbox{\hbox {\box\tempfloatbox }}% \dofloatboxbetweenstack \hbox{\locatesidefloat{\box\tempcaptionbox}}% \else \hbox{\locatefloat {\box\tempfloatbox }}% \dofloatboxbetweenstack \hbox{\locatetextfloat{\box\tempcaptionbox}}% \fi}} \def\dofloatboxgridtopstackbuilder {\dp\tempcaptionbox\strutdepth \setbox\scratchbox\vbox {\tempfloatwidth\wd\tempfloatbox \ifparfloat \locatesidefloat{\box\tempcaptionbox}% \vss\dofloatboxbetweenstack \hbox {\box\tempfloatbox }% \else \locatetextfloat{\box\tempcaptionbox}% \vss\dofloatboxbetweenstack \locatefloat {\box\tempfloatbox }% \fi}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight{\unvbox\scratchbox}} \def\dofloatboxgridbotstackbuilder {\dp\tempcaptionbox\strutdepth \setbox\scratchbox\vbox {\tempfloatwidth\wd\tempfloatbox \ifparfloat \hbox {\box\tempfloatbox }% \vss\dofloatboxbetweenstack \locatesidefloat{\box\tempcaptionbox}% \else \locatefloat {\box\tempfloatbox }% \vss\dofloatboxbetweenstack \locatetextfloat{\box\tempcaptionbox}% \fi}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight{\unvbox\scratchbox}} \def\dofloatboxstretchtopstackbuilder {\dp\tempcaptionbox\strutdepth \setbox\scratchbox\vbox {\locatecaption{\copy\tempcaptionbox}% \locatefloat {\copy\tempfloatbox }}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight {\tempfloatwidth\wd\tempfloatbox \ifparfloat \locatesidefloat{\box\tempcaptionbox}% \vss\dofloatboxbetweenstack\vss \hbox {\box\tempfloatbox }% \else \locatetextfloat{\box\tempcaptionbox}% \vss\dofloatboxbetweenstack\vss \locatefloat {\box\tempfloatbox }% \fi}} \def\dofloatboxstretchbotstackbuilder {\dp\tempcaptionbox\strutdepth \setbox\scratchbox\vbox {\locatefloat {\copy\tempfloatbox }% \locatecaption{\copy\tempcaptionbox}}% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy \vbox to \noflines\lineheight {\tempfloatwidth\wd\tempfloatbox \ifparfloat \hbox {\box\tempfloatbox }% \vss\dofloatboxbetweenstack\vss \locatesidefloat{\box\tempcaptionbox} \else \locatefloat {\box\tempfloatbox }% \vss\dofloatboxbetweenstack\vss \locatetextfloat{\box\tempcaptionbox}% \fi}} \def\dofloatboxtopbuilder {\let\next\dofloatboxnormaltopstackbuilder \expanded{\processfirstactioninset[\floatcaptionparameter\c!location]} [ \v!grid=>\let\next\dofloatboxgridstackbuilder, \v!stretch=>\let\next\dofloatboxstretchstackbuilder]% \next} \def\dofloatboxbottombuilder {\let\next\dofloatboxnormalbotstackbuilder \expanded{\processfirstactioninset[\floatcaptionparameter\c!location]} [ \v!grid=>\let\next\dofloatboxgridstackbuilder, \v!stretch=>\let\next\dofloatboxstretchstackbuilder]% \next} \def\relocatecaptionright#1{\locatecaption{\hbox to \tempfloatwidth{\hss#1}}} \def\relocatecaptionleft #1{\locatecaption{\hbox to \tempfloatwidth{#1\hss}}} \long\def\installfloatboxbuilder#1#2{\setvalue{\??kj:#1}{#2}} \def\buildfloatbox {\global\setbox\floatbox\vbox {\setlocalfloathsize \forgetall \let\floatcaptionarrangement\s!default \def\docommand##1% {\doifdefined{\??kj:##1}{\def\floatcaptionarrangement{##1}\quitcommalist}}% \processcommacommand[\floatcaptionparameter\c!location]\docommand \executeifdefined{\??kj:\floatcaptionarrangement}{\getvalue{\??kj:\s!default}}}} \def\locatetextfloat {\let\next\locatecaption \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} [ \v!left=>\let\next\relocatecaptionleft, \v!right=>\let\next\relocatecaptionright, \v!inner=>\doifrightpagefloatelse{\let\next\relocatecaptionleft }{\let\next\relocatecaptionright}, \v!outer=>\doifrightpagefloatelse{\let\next\relocatecaptionright}{\let\next\relocatecaptionleft }]% \next} \installfloatboxbuilder \v!none \dofloatboxdefaultbuilder \installfloatboxbuilder \s!default \dofloatboxdefaultbuilder \installfloatboxbuilder \v!high \dofloatboxhighbuilder \installfloatboxbuilder \v!low \dofloatboxlowbuilder \installfloatboxbuilder \v!middle \dofloatboxmiddlebuilder \installfloatboxbuilder \v!left \dofloatboxsidebuilder \installfloatboxbuilder \v!right \dofloatboxsidebuilder \installfloatboxbuilder \v!top \dofloatboxtopbuilder \installfloatboxbuilder \v!bottom \dofloatboxbottombuilder % \setuplayout[grid=yes] \showgrid \setupcaptions[style=smallbodyfont,location=grid,inbetween=] % % \starttext % test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=yes]} test \page % test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=yes]} test \page % test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=depth]} test \page % test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=depth]} test \page % \stoptext \newif\ifpostponecolumnfloats \postponecolumnfloatsfalse % don't change \chardef\postcenterfloatmethod\plusone \def\postcenterfloatbox#1% {\scratchdimen \ifcase\postcenterfloatmethod #1% \wd\floatbox \or\ifinsidecolumns \ifpostponecolumnfloats\makeupwidth\else#1\fi \else\ifdim#1>\hsize \hsize \else \wd\floatbox \fi\fi\fi \global\setbox\floatbox\hbox to \scratchdimen % {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen ! % {\hss \box\floatbox\hss }} % wel \hss, anders mis in colset {\ifglobalcenterfloatbox \donetrue \else\iflocalcenterfloatbox \donetrue \else \donefalse \fi\fi \ifdim\scratchdimen>\effectivehsize \donefalse \fi \hss\ifdone\hskip\effectiveleftskip\fi \box\floatbox \ifdone\hskip\effectiverightskip\fi\hss}} \long\def\dosetparfloat#1#2#3% {\bgroup \forgetall \postponenotes \dontcomplain %\showcomposition \setbox\tempfloatbox\vbox{\borderedfloatbox}% \addlocalbackgroundtobox\tempfloatbox % no \doglobal \docheckcaptioncontent{#2}{#3}% \ifnofloatcaption \global\setbox\floatbox\vbox{\box\tempfloatbox}% \else \dopreparedosidecaption{#1}{#2}{#3}% \settracedcaptionbox \setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}% \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht \addlocalbackgroundtobox\tempcaptionbox % no \doglobal \buildsidefloatbox \fi \egroup} \def\dopreparedosidecaption#1#2#3% will be enhanced {\doifelse{\floatcaptionparameter\c!width}\v!max {\dosettempcaptionbox {\hsize\wd\tempfloatbox \putcompletecaption{#2}{#3}}}% {\doifelse{\floatcaptionparameter\c!width}\v!fit {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox\relax \setbox\tempcaptionbox\vbox {\forgetall % needed? \hsize\wd\tempfloatbox \dosetcaptionthings \putcompletecaption{#2}{#3}}% \else \setbox\tempcaptionbox\hbox to \wd\tempfloatbox {\hss\box\tempcaptionbox\hss}% \fi} {\dosettempcaptionbox {\hsize\floatcaptionparameter\c!width % \wd\tempfloatbox \putcompletecaption{#2}{#3}}}}} \def\buildsidefloatbox {\let\locatefloat \relax \let\locatecaption\relax \def\locatesidefloat##1% {\begingroup \chardef\alignstrutmode\zerocount \hsize\tempfloatwidth \forgetall \alignedline{\floatparameter\c!location}\v!middle{##1}% \endgroup}% \buildfloatbox} \newif\ifparfloat \long\def\dosetfloatbox#1#2#3% todo : \global\setbox {\ifvisible \par \edef\floatcaptiondirectives{\floatparameter\c!location,\floatcaptionparameter\c!location}% \ifparfloat\@EA\dosetparfloat\else\@EA\dosetpagfloat\fi{#1}{#2}{#3}% \setlocalfloatdimensions{#1}% \setbox\floatbox\hbox {\dosavefloatdata\restoretextcolor{\box\floatbox}}% \global\floatheight\ht\floatbox \global\advance\floatheight \dp\floatbox \global\floatwidth\wd\floatbox \global\advance\totalnoffloats \plusone \doifnotinset\v!margin{#1} % gaat namelijk nog fout {\setbox\floatbox\vbox {\parindent\zeropoint \doifconcepttracing{\inleftmargin{\framed{\infofont\the\totalnoffloats}}}% \box\floatbox}}% \wd\floatbox\floatwidth \dimen0=\floatheight \advance\dimen0 \lineheight \ifdim\dimen0<\textheight \else \global\floatheight\textheight \global\advance\floatheight -\lineheight \ht\floatbox\floatheight \dp\floatbox\zeropoint \showmessage\m!floatblocks{10}{\the\totalnoffloats}% \fi \fi} \newcounter\noxfloatlocations \long\def\dofloat#1#2#3% {\dosetfloatbox{#1}{#2}{#3}% \dogetfloatbox{#1}\empty} \let\naturalfloatheight\!!zeropoint \let\naturalfloatwidth \!!zeropoint \let\naturalfloatdepth \!!zeropoint \def\setnaturalfloatdimensions#1% {\xdef\naturalfloatheight{\the\ht#1}% \xdef\naturalfloatwidth {\the\wd#1}% \xdef\naturalfloatdepth {\the\dp#1}} \long\def\doifelsemainfloatbody#1#2% {\ifinsidesplitfloat\ifconditional\splitfloatfirstdone#2\else#1\fi\else#1\fi} \long\def\docompletefloat#1#2#3#4#5#6#7% #7 = box number {%\flushsidefloats % moved \presetfloatvariables{#1}{#4}{#2}{#6}% \bgroup \setnaturalfloatdimensions#7% \global\setbox\floatbox\vbox {\executeifdefined{\??fl#1\c!command}\firstofoneargument{\box#7}}% \setnaturalfloatdimensions\floatbox \dimen0 \ht\floatbox \advance\dimen0 \dp\floatbox \ifdim\dimen0=\zeropoint \showmessage\m!floatblocks{11}\empty \global\setbox\floatbox\vbox{\doemptyblock{#3}}% \fi \ifnofloatcaption \global\setbox\floatbox\vbox {\unvbox\floatbox \doifelsemainfloatbody{\rawpagereference\s!flt{#2}}\donothing \vss}% gets rid of the depth (unless tabulate) \egroup \dofloat{#4}{}{#6}% \else \gdefconvertedargument\asciititle{#6}% \asciititle is global \ifnofloatnumber \global\setbox\floatbox\vbox {\unvbox\floatbox % no \vss, keep the depth \doifelsemainfloatbody{\rawreference\s!flt{#2}{{}{\asciititle}}}\donothing}% \egroup \dofloat{#4}{}{#6}% \else \preparefloatnumber{#1}% \global\setbox\floatbox\vbox {\unvbox\floatbox % no \vss, keep the depth \doifelsemainfloatbody {\tracefloatnumber{#1}% \rawreference\s!flt{#2}{{\composedsectionnumber}{\asciititle}}% \dowritetolist{#3}{\composedsectionnumber}{#6}{#3}} \donothing }% \egroup \preparefullnumber{\??kj#1}\composedsectionnumber\preparednumber \dofloat{#4}{\labeltexts{#5}{\preparednumber}}{#6}% \fi \fi \global\insidefloatfalse} \def\dooutput{\sidefloatoutput} % redefinition of \dooutput \definefloat [\v!figure] [\v!figures] \definefloat [\v!table] [\v!tables] \setupfloat [\v!table] [\c!frame=\v!off] \definefloat [\v!intermezzo] [\v!intermezzi] \definefloat [\v!graphic] [\v!graphics] \setupcaptions [\c!location=\v!bottom, \c!grid=, \c!before=, % not used (yet) \c!inbetween={\blank[\v!medium]}, \c!after=, % not used (yet) \c!spacebefore=, \c!spaceinbetween=, % replaces fuzzy inbetween dual usage \c!spaceafter=, \c!width=\v!fit, \c!minwidth=\v!fit, % id est: the width of the floatbox in some cases \c!headstyle=\v!bold, \c!headcolor=, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!outermargin=\zeropoint, \c!innermargin=\zeropoint, \c!setups=, \c!style=\v!normal, \c!color=, \c!textstyle=, \c!textcolor=, \c!align=, \c!number=\v!yes, \c!way=\@@nrway, \c!blockway=\@@nrblockway, \c!sectionnumber=\@@nrsectionnumber, \c!separator=\@@koseparator, \c!stopper=\@@kostopper, \c!suffix=\floatcaptionsuffix, % hook \c!distance=1em, \c!command=, \c!conversion=\v!numbers] \setupfloats [\c!location=\v!middle, \c!width=8\lineheight, \c!height=6\lineheight, \c!offset=\v!overlay, \c!frame=\v!off, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!background=, \c!backgroundscreen=\@@rsscreen, \c!backgroundcolor=, \c!backgroundoffset=\!!zeropoint, \c!topframe=, \c!bottomframe=, \c!leftframe=, \c!rightframe=, \c!framecolor=, \c!frameoffset=\!!zeropoint, \c!before=, \c!after=, \c!spacebefore=\v!big, \c!spaceafter=\v!big, \c!sidespacebefore=\@@bkspacebefore, \c!sidespaceafter=\@@bkspaceafter, \c!sidealign=\v!normal, \c!textmethod=\ifgridsnapping2\else0\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) \c!sidemethod=\ifgridsnapping2\else1\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) \c!indentnext=\v!no, \c!margin=1em, \c!method=1, \c!cache=\v!yes, % when no, then intermediate flush \c!leftmargin=\zeropoint, % displacement in 'normal floats' \c!rightmargin=\zeropoint, % idem \c!innermargin=\zeropoint, % idem \c!outermargin=\zeropoint, % idem \c!leftmargindistance=\zeropoint, \c!rightmargindistance=\@@bkleftmargindistance, \c!ntop=2, \c!nbottom=0, \c!nlines=4, \c!local=, \c!default=, % was \v!figure but this is the location \c!numbering=\v!yes] % float strategy, replaces some of the above macros \let\floatmethod \empty \let\floatcolumn \empty \let\floatrow \empty \let\forcedfloatmethod\empty \def\dogetfloatbox#1#2% {\ifvisible \doifelsenothing{#2} {\getfromcommalist[#1][1]% \@EA\beforesplitstring\commalistelement\at:\to\floatmethod \@EA\aftersplitstring \commalistelement\at:\to\floatcolumn \@EA\aftersplitstring \floatcolumn\at*\to\floatrow \@EA\beforesplitstring\floatcolumn\at*\to\floatcolumn % todo: nog algemeen otr \ifx\OTRSETsetpreferedcolumnslot\undefined\else \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow \fi} {\let\floatcolumn\empty \let\floatrow\empty \edef\floatmethod{#2}}% \doifundefined{\string\floatmethod\floatmethod} {\let\floatmethod\v!here}% \doifsomething\forcedfloatmethod {\edef\floatmethod{\forcedfloatmethod}}% %\getvalue{\string\floatmethod\floatmethod}[#1]% \getvalue{\string\floatmethod\floatmethod}[\floatmethod,#1]% \fi} \def\installfloathandler#1#2% #1=keyword #2=handler {\setvalue{\string\floatmethod#1}{#2}} \installfloathandler \v!here \someherefloat \installfloathandler \v!force \somefixdfloat \installfloathandler \v!left \someleftsidefloat \installfloathandler \v!right \somerightsidefloat \installfloathandler \v!text \sometextfloat \installfloathandler \v!top \sometopfloat \installfloathandler \v!bottom \somebottomfloat \installfloathandler \v!auto \someautofloat \installfloathandler \v!margin \somemarginfloat \installfloathandler \v!opposite \somefacefloat \installfloathandler \v!page \somepagefloat \installfloathandler \v!leftpage \someleftpagefloat \installfloathandler \v!rightpage \somerightpagefloat \installfloathandler \v!inmargin \someinmarginfloat \installfloathandler \v!inleft \someinleftmarginfloat \installfloathandler \v!inright \someinrightmarginfloat \installfloathandler \v!leftmargin \someinleftmarginfloat \installfloathandler \v!rightmargin \someinrightmarginfloat \installfloathandler \v!leftedge \someinleftedgefloat \installfloathandler \v!rightedge \someinrightedgefloat \installfloathandler \v!backspace \somebackspacefloat \installfloathandler \v!cutspace \somecutspacefloat \installfloathandler {tblr} \someslotfloat \installfloathandler {lrtb} \someslotfloat \installfloathandler {tbrl} \someslotfloat \installfloathandler {rltb} \someslotfloat \installfloathandler {btlr} \someslotfloat \installfloathandler {lrbt} \someslotfloat \installfloathandler {btrl} \someslotfloat \installfloathandler {rlbt} \someslotfloat \installfloathandler {fxtb} \someslotfloat \installfloathandler {fxbt} \someslotfloat \def\placesomeslotfloat {\OTRcommand\someslotfloat} \def\placesomeherefloat {\OTRcommand\someherefloat} \def\placesomefixdfloat {\OTRcommand\somefixdfloat} \def\placesomepagefloat {\OTRcommand\somepagefloat} \def\placesomeleftpagefloat {\OTRcommand\someleftpagefloat} \def\placesomerightpagefloat{\OTRcommand\somerightpagefloat} \def\placesometopsfloat {\OTRcommand\sometopsfloat} \def\placesomebotsfloat {\OTRcommand\somebotsfloat} \def\placesomesidefloat {\OTRcommand\somesidefloat} \def\placesomefacefloat {\OTRcommand\somefacefloat} \def\someleftsidefloat [#1]{\somesidefloat[#1]\presetindentation} \def\somerightsidefloat [#1]{\somesidefloat[#1]} \def\sometopfloat [#1]{\someelsefloat[#1]\nonoindentation} \def\somebottomfloat [#1]{\someelsefloat[#1]} \def\someautofloat [#1]{\someelsefloat[#1]} \def\somemarginfloat [#1]{\somenextfloat[#1]\nonoindentation} \def\someinleftmarginfloat [#1]{\somesidefloat[#1]} \def\someinrightmarginfloat[#1]{\somesidefloat[#1]} \def\someinleftedgefloat [#1]{\somesidefloat[#1]} \def\someinrightedgefloat [#1]{\somesidefloat[#1]} \def\someinmarginfloat [#1]{\somesidefloat[#1]} \def\someherefloat [#1]{\someelsefloat[\v!here,#1]} \def\somebackspacefloat [#1]{\somesidefloat[#1]} \def\somecutspacefloat [#1]{\somesidefloat[#1]} \def\somefixdfloat {\placesomefixdfloat} \def\somepagefloat {\placesomepagefloat} \def\someleftpagefloat {\placesomeleftpagefloat} \def\somerightpagefloat{\placesomerightpagefloat} \def\somefacefloat {\placesomefacefloat} \def\someslotfloat {\placesomeslotfloat} %D Local floats. \def\setuplocalfloats {\getparameters[\??lf]} \setuplocalfloats [%\c!before=\blank, %\c!after=\blank, \c!inbetween=\blank] \installfloathandler \v!local \somelocalfloat \initializeboxstack{localfloats} \newcounter\noflocalfloats \def\resetlocalfloats {\doglobal\newcounter\noflocalfloats \initializeboxstack{localfloats}} \def\somelocalfloat[#1]% {\doglobal\increment\noflocalfloats \savebox{localfloats}{\noflocalfloats}{\box\floatbox}} \def\getlocalfloats {\dorecurse\noflocalfloats {\ifnum\recurselevel=\plusone % 1\relax \getvalue{\??lf\c!before}% \else \getvalue{\??lf\c!inbetween}% \fi \dontleavehmode\hbox{\foundbox{localfloats}\recurselevel}% \ifnum\recurselevel=\noflocalfloats\relax \getvalue{\??lf\c!after}% \fi}} \def\flushlocalfloats {\getlocalfloats \resetlocalfloats} \def\getlocalfloat#1{\expanded{\foundbox{localfloats}{\number#1}}} \def\forcelocalfloats{\let\forcedfloatmethod\v!local} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-prc.lua0000644000175000017500000000636112130411274024152 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-prc'] = { version = 1.001, comment = "companion to typo-prc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- moved from strc-ini.lua local formatters = string.formatters local lpegmatch, patterns, P, C, Cs = lpeg.match, lpeg.patterns, lpeg.P, lpeg.C, lpeg.Cs -- processors: syntax: processor->data ... not ok yet typesetters.processors = typesetters.processors or { } local processors = typesetters.processors local trace_processors = false local report_processors = logs.reporter("processors") local registered = { } trackers.register("typesetters.processors", function(v) trace_processors = v end) function processors.register(p) registered[p] = true end function processors.reset(p) registered[p] = nil end --~ local splitter = lpeg.splitat("->",true) -- also support => local becomes = P('->') local processor = (1-becomes)^1 local splitter = C(processor) * becomes * Cs(patterns.argument + patterns.content) function processors.split(str) local p, s = lpegmatch(splitter,str) if registered[p] then return p, s else return false, str end end function processors.apply(p,s) local str = p if s == nil then p, s = lpegmatch(splitter,p) end if p and registered[p] then if trace_processors then report_processors("applying %s processor %a, argument: %s","known",p,s) end context.applyprocessor(p,s) elseif s then if trace_processors then report_processors("applying %s processor %a, argument: %s","unknown",p,s) end context(s) elseif str then if trace_processors then report_processors("applying %s processor, data: %s","ignored",str) end context(str) end end function processors.startapply(p,s) local str = p if s == nil then p, s = lpegmatch(splitter,p) end if p and registered[p] then if trace_processors then report_processors("start applying %s processor %a","known",p) end context.applyprocessor(p) context("{") return s elseif p then if trace_processors then report_processors("start applying %s processor %a","unknown",p) end context.firstofoneargument() context("{") return s else if trace_processors then report_processors("start applying %s processor","ignored") end context.firstofoneargument() context("{") return str end end function processors.stopapply() context("}") if trace_processors then report_processors("stop applying processor") end end function processors.tostring(str) local p, s = lpegmatch(splitter,str) if registered[p] then return formatters["\\applyprocessor{%s}{%s}"](p,s) else return str end end function processors.stripped(str) local p, s = lpegmatch(splitter,str) return s or str end -- interface commands.registerstructureprocessor = processors.register commands.resetstructureprocessor = processors.reset context-2013.05.28.20130704/texmf-dist/tex/context/base/s-inf-03.mkiv0000644000175000017500000002421212130411274024011 0ustar norbertnorbert% \nopdfcompression % \starttext % There is a loop somewhere ... todo. % \stoptext \enablemode[tablet] % whatever that means \setupbodyfont[dejavu] \doifmodeelse {tablet} { \setuppapersize [S6,landscape] [S6,landscape] \definefont [TitlePageFont] [MonoBold at 16pt] \setupbodyfont [tt,8pt] } { \definefont [TitlePageFont] [MonoBold at 20pt] \setupbodyfont [tt] } \setuplayout [header=0cm, footer=1cm, backspace=.5cm, topspace=.5cm, width=middle, height=middle] \setuphead [title] [style=\ttc, interaction=reference] \definehead [xtitle] [title] \setuphead [xtitle] [color=darkgreen] \setupfootertexts [\llap{\goto{\hbox to 5cm{\hss previous}}[previouspage]}% \quad\pagenumber\quad \rlap{\goto{\hbox to 5cm{next\hss}}[nextpage]}] \setupinteraction [state=start, style=, color=, title={ConTeXt MkIV}, subtitle={Lua modules and functions}, author={Hans Hagen - automatically generated}, contrastcolor=] \setupinteractionscreen [option=bookmark] \placebookmarks [title,xtitle] [force=yes] \definecolor[darkyellow][r=.5,g=.5,b=0] \definecolor[darkgray] [s=.15] \nonknuthmode \starttext \startbuffer \startluacode local basiclua = libraries.basiclua local basictex = libraries.basictex local extratex = libraries.extratex local extralua = libraries.extralua local obsolete = libraries.obsolete local find = string.find local color, gotolocation = context.color, context["goto"] for k, v in table.sortedpairs(_G) do if obsolete[k] or find(k,"_") or k == "arg" or k == "utf" then -- elseif basiclua[k] then gotolocation(function() color( { "darkred" }, k) end, { k } ) elseif extralua[k] then gotolocation(function() color( { "darkgreen" }, k) end, { k } ) elseif basictex[k] then gotolocation(function() color( { "darkblue" }, k) end, { k } ) elseif extratex[k] then gotolocation(function() color( { "darkyellow" }, k) end, { k } ) elseif type(v) == "table" then gotolocation(function() color( { "white" }, k) end, { k } ) end context(" ") end \stopluacode \stopbuffer \setupbackgrounds [page] [background=color, backgroundcolor=darkgray, backgroundoffset=2mm] \startpagemakeup \vfill \pagereference[global] \startnarrower[10mm] \setupalign[nothyhenated,middle,broad] \TitlePageFont \setupinterlinespace \getbuffer % luabuffer \par \stopnarrower \vfill \vfill \hskip10mm\scale[width=\dimexpr\paperwidth-20mm\relax]{\ttbf\white\ConTeXt\ MkIV} \par % \hskip10mm\scale[width=\dimexpr\paperwidth-20mm\relax]{\white \strut Lua infrastructure \emdash\ \currentdate} \vfill \stoppagemakeup \setupbackgrounds [page] [background=] \startluacode local builtin = libraries.builtin local globals = libraries.globals local basiclua = libraries.basiclua local basictex = libraries.basictex local extratex = libraries.extratex local extralua = libraries.extralua local obsolete = libraries.obsolete local sortedkeys = table.sortedkeys local mark = storage.mark local marked = storage.marked local gsub = string.gsub local sub = string.sub local byte = string.byte local upper = string.upper local skipglobal = table.tohash { "_G", "_M", "_ENV", "", "context", "modules", "global", "arg", "utf", 1, "_ptbs_", "_pcol_", "_plib_", "_clib_", "_tlib_", "kpse", } local skipkeys = table.tohash { "_pcol_", "_plib_", "_clib_", "_tlib_", "_bpnf_", "_ptbs_", "_cldf_", "_cldn_", "_clmb_", "_clme_", "_clmm_", "_clmn_", "_clma_", "_clmh_", "_G", "_M", "_ENV", "", "_VERSION", "_COPYRIGHT", "_DESCRIPTION", "_NAME", "_PACKAGE", "__unload", } local sameglobal = { ["global"] = "_G", -- ["commands"] = "cs", -- already gone } -- -- -- -- -- -- -- -- -- -- -- -- -- -- this should be done internally -- -- -- -- -- -- -- -- -- -- -- -- -- for k,v in next, modules do mark(v) end mark(document.arguments) mark(environment.arguments) mark(environment.engineflags) mark(characters.data) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- local variant = 1 -- all parents local variant = 2 -- parent name too local variant = 3 -- no parents local function childtables(key,tab,handler,depth) depth = depth or 1 local keys = sortedkeys(tab) -- no sorted_pairs for i=1,#keys do local k = keys[i] -- if k ~= "_G" and k ~= "_M" and type(k) == "string" then if not skipkeys[k] and type(k) == "string" then local v = tab[k] local t = type(v) local s = k if variant ~= 3 then s = key and (key .. "." .. s) or s end if t == "table" then if marked(v) then t = "data" handler(s,t,depth) else handler(s,t,depth) if variant == 3 then childtables(false,v,handler,depth+1) elseif variant == 2 then childtables(k,v,handler,depth+1) else childtables(s,v,handler,depth+1) end end else handler(s,t,depth) end end end end local NC, NR = context.NC, context.NR local overstrike, rlap, bf = context.overstrike, context.rlap, context.bf local color, gotolocation = context.color, context["goto"] local function cleanup(s) return "\\char" ..byte(s) .. " " end local function handler(k,t,depth) k = gsub(k,"([~#$%%^&{}\\|])",cleanup) NC() rlap("\\quad\\tx\\kern" .. (depth or 0).. "em" .. upper(sub(t,1,1)) .. " ".. k) NC() NC() NR() end local function show(title,subtitle,alias,builtin,t,lib,libcolor,glo,glocolor,mark,obsolete) -- todo: table as argument local keys = sortedkeys(t) -- no sorted_pairs if #keys > 0 then local fulltitle = title if subtitle and subtitle ~= "" then fulltitle = fulltitle .. " (" .. subtitle .. ")" end if alias and alias ~= "" then fulltitle = fulltitle .. " (alias: " .. alias .. ")" end if builtin then context.startxtitle { reference = title, title = fulltitle, backreference = "global" } else context.starttitle { reference = title, title = fulltitle, backreference = "global" } end context.startcolumns { n = 2 } context.starttabulate { "|||" } local t_obsolete = t.obsolete if type(t_obsolete) ~= "table" then t_obsolete = nil end for i=1,#keys do local k = keys[i] local v = t[k] if k and k ~= "obsolete" and not skipkeys[k] and (not obsolete or not obsolete[k]) then local inlib = lib and lib[k] local inglo = glo and glo[k] local t = type(v) local kstr, tstr = k, t local obs = t_obsolete and t_obsolete[k] if obs then tstr = function() overstrike(t) end kstr = function() overstrike(k) end end local marked = marked(v) if marked then tstr = "data table" end if t == "table" then local m = getmetatable(v) if m and m.__call then tstr = "function" end end if not mark then -- elseif inlib and tostring(inlib) ~= tostring(v) then tstr = "overloaded ".. tstr elseif inglo and tostring(inglo) ~= tostring(v) then tstr = "overloaded ".. tstr end NC() bf() if inlib then if not mark and t == "table" then gotolocation(function() color( { libcolor }, kstr) end, { k } ) else color( { libcolor }, kstr) end elseif inglo then if not mark and t == "table" then gotolocation(function() color( { glocolor }, kstr) end, { k } ) else color( { glocolor }, kstr) end else if not mark and t == "table" then gotolocation(k, { kstr } ) else context(kstr) end end NC() if inlib then color( { libcolor }, tstr) elseif inglo then color( { glocolor }, tstr) else context(tstr) end NC() NR() if mark and t == "table" and title ~= "libraries" and title ~= "package" and not marked then childtables(false,v,handler) -- (k,v,handler) end end end context.stoptabulate() context.stopcolumns() if builtin then context.stopxtitle() else context.stoptitle() end end end show("global","",sameglobal.global,false,_G,builtin,"darkgreen",globals,"darkblue",false,obsolete) for k, v in table.sortedpairs(_G) do if not skipglobal[k] and not obsolete[k] and type(v) == "table" and not marked(v) then if basiclua[k] then show(k,"basic lua",sameglobal[k],basiclua[k],v,builtin[k],"darkred", false,false,true) elseif extralua[k] then show(k,"extra lua",sameglobal[k],extralua[k],v,builtin[k],"darkred", false,false,true) elseif basictex[k] then show(k,"basic tex",sameglobal[k],basictex[k],v,builtin[k],"darkred", false,false,true) elseif extratex[k] then show(k,"extra tex",sameglobal[k],extratex[k],v,builtin[k],"darkred", false,false,true) else show(k,"context", sameglobal[k],false, v,builtin[k],"darkyellow",false,false,true) end end end \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-physml.mkiv0000644000175000017500000000065511754241457024362 0ustar norbertnorbert%D \module %D [ file=m-physml, %D version=2001.09.04, %D title=\CONTEXT\ XML Modules, %D subtitle=Loading PHYSML Filters, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-chk.mkii0000644000175000017500000000164011754241457024303 0ustar norbertnorbert%D \module %D [ file=mult-chk, %D version=2009.04.13, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Multilingual Macros / Checking} %D No checking in \MKII. \def\gobbleparameters{\doquadrupleempty\dogobbleparameters} % todo: 1,2,3,4 case \def\dogobbleparameters[#1][#2][#3][#4]{} \def\setvalidparameterkeys{\gobbleparameters} % forward reference, so no \let \def\addvalidparameterkeys{\gobbleparameters} % forward reference, so no \let \let\enablecheckparameters \relax \let\disablecheckparameters\relax \def\getcheckedparameters[#1]{\getparameters} % just ignore the checking \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-ini.lua0000644000175000017500000002562012161703335024140 0ustar norbertnorbertif not modules then modules = { } end modules ['mult-ini'] = { version = 1.001, comment = "companion to mult-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, gmatch, match = string.format, string.gmatch, string.match local lpegmatch = lpeg.match local serialize = table.serialize local allocate = utilities.storage.allocate local mark = utilities.storage.mark local prtcatcodes = catcodes.numbers.prtcatcodes local contextsprint = context.sprint local setmetatableindex = table.setmetatableindex local formatters = string.formatters local report_interface = logs.reporter("interface","initialization") interfaces = interfaces or { } interfaces.constants = mark(interfaces.constants or { }) interfaces.variables = mark(interfaces.variables or { }) interfaces.elements = mark(interfaces.elements or { }) interfaces.formats = mark(interfaces.formats or { }) interfaces.translations = mark(interfaces.translations or { }) interfaces.corenamespaces = mark(interfaces.corenamespaces or { }) local registerstorage = storage.register local sharedstorage = storage.shared local constants = interfaces.constants local variables = interfaces.variables local elements = interfaces.elements local formats = interfaces.formats local translations = interfaces.translations local corenamespaces = interfaces.corenamespaces local reporters = { } -- just an optimization registerstorage("interfaces/constants", constants, "interfaces.constants") registerstorage("interfaces/variables", variables, "interfaces.variables") registerstorage("interfaces/elements", elements, "interfaces.elements") registerstorage("interfaces/formats", formats, "interfaces.formats") registerstorage("interfaces/translations", translations, "interfaces.translations") registerstorage("interfaces/corenamespaces", corenamespaces, "interfaces.corenamespaces") interfaces.interfaces = { "cs", "de", "en", "fr", "it", "nl", "ro", "pe", } sharedstorage.currentinterface = sharedstorage.currentinterface or "en" sharedstorage.currentresponse = sharedstorage.currentresponse or "en" local currentinterface = sharedstorage.currentinterface local currentresponse = sharedstorage.currentresponse local complete = allocate() interfaces.complete = complete local function resolve(t,k) -- one access needed to get loaded (not stored!) report_interface("loading interface definitions from 'mult-def.lua'") complete = dofile(resolvers.findfile("mult-def.lua")) report_interface("loading interface messages from 'mult-mes.lua'") complete.messages = dofile(resolvers.findfile("mult-mes.lua")) interfaces.complete = complete return rawget(complete,k) end setmetatableindex(complete, resolve) local function valueiskey(t,k) -- will be helper t[k] = k return k end setmetatableindex(variables, valueiskey) setmetatableindex(constants, valueiskey) setmetatableindex(elements, valueiskey) setmetatableindex(formats, valueiskey) setmetatableindex(translations, valueiskey) function interfaces.registernamespace(n,namespace) corenamespaces[n] = namespace end local function resolve(t,k) local v = logs.reporter(k) t[k] = v return v end setmetatableindex(reporters,resolve) for category, _ in next, translations do -- We pre-create reporters for already defined messages -- because otherwise listing is incomplete and we want -- to use that for checking so delaying makes not much -- sense there. local r = reporters[category] end -- adding messages local function add(target,tag,values) local t = target[tag] if not f then target[tag] = values else for k, v in next, values do if f[k] then -- error else f[k] = v end end end end function interfaces.settranslation(tag,values) add(translations,tag,values) end function interfaces.setformat(tag,values) add(formats,tag,values) end -- the old method: local replacer = lpeg.replacer { { "--", "%%a" } } local function fulltag(category,tag) return formatters["%s:%s"](category,lpegmatch(replacer,tag)) end function interfaces.setmessages(category,str) for tag, message in gmatch(str,"(%S+) *: *(.-) *[\n\r]") do if tag == "title" then translations[tag] = translations[tag] or tag else formats[fulltag(category,tag)] = lpegmatch(replacer,message) end end end function interfaces.setmessage(category,tag,message) formats[fulltag(category,tag)] = lpegmatch(replacer,message) end function interfaces.getmessage(category,tag,default) return formats[fulltag(category,tag)] or default or "unknown message" end function interfaces.doifelsemessage(category,tag) return formats[fulltag(category,tag)] end local splitter = lpeg.splitat(",") function interfaces.showmessage(category,tag,arguments) local r = reporters[category] local f = formats[fulltag(category,tag)] local t = type(arguments) if t == "string" and #arguments > 0 then r(f,lpegmatch(splitter,arguments)) elseif t == "table" then r(f,unpack(arguments)) elseif arguments then r(f,arguments) else r(f) end end -- till here function interfaces.setvariable(variable,given) variables[given] = variable end function interfaces.setconstant(constant,given) constants[given] = constant end function interfaces.setelement(element,given) elements[given] = element end -- the real thing: logs.setmessenger(context.verbatim.ctxreport) -- initialization function interfaces.setuserinterface(interface,response) sharedstorage.currentinterface, currentinterface = interface, interface sharedstorage.currentresponse, currentresponse = response, response if environment.initex then local nofconstants = 0 for given, constant in next, complete.constants do constant = constant[interface] or constant.en or given constants[constant] = given -- breedte -> width contextsprint(prtcatcodes,"\\ui_c{",given,"}{",constant,"}") -- user interface constant nofconstants = nofconstants + 1 end local nofvariables = 0 for given, variable in next, complete.variables do variable = variable[interface] or variable.en or given variables[given] = variable -- ja -> yes contextsprint(prtcatcodes,"\\ui_v{",given,"}{",variable,"}") -- user interface variable nofvariables = nofvariables + 1 end local nofelements = 0 for given, element in next, complete.elements do element = element[interface] or element.en or given elements[element] = given contextsprint(prtcatcodes,"\\ui_e{",given,"}{",element,"}") -- user interface element nofelements = nofelements + 1 end local nofcommands = 0 for given, command in next, complete.commands do command = command[interface] or command.en or given if command ~= given then contextsprint(prtcatcodes,"\\ui_m{",given,"}{",command,"}") -- user interface macro end nofcommands = nofcommands + 1 end local nofformats = 0 for given, format in next, complete.messages.formats do formats[given] = format[interface] or format.en or given nofformats = nofformats + 1 end local noftranslations = 0 for given, translation in next, complete.messages.translations do translations[given] = translation[interface] or translation.en or given noftranslations = noftranslations + 1 end report_interface("definitions: %a constants, %a variables, %a elements, %a commands, %a formats, %a translations", nofconstants,nofvariables,nofelements,nofcommands,nofformats,noftranslations) end end interfaces.cachedsetups = interfaces.cachedsetups or { } interfaces.hashedsetups = interfaces.hashedsetups or { } local cachedsetups = interfaces.cachedsetups local hashedsetups = interfaces.hashedsetups storage.register("interfaces/cachedsetups", cachedsetups, "interfaces.cachedsetups") storage.register("interfaces/hashedsetups", hashedsetups, "interfaces.hashedsetups") function interfaces.cachesetup(t) local hash = serialize(t) local done = hashedsetups[hash] if done then return cachedsetups[done] else done = #cachedsetups + 1 cachedsetups[done] = t hashedsetups[hash] = done return t end end function interfaces.is_command(str) return (str and str ~= "" and token.csname_name(token.create(str)) ~= "") or false -- there will be a proper function for this end function interfaces.interfacedcommand(name) local command = complete.commands[name] return command and command[currentinterface] or name end -- interface function commands.writestatus(category,message,...) local r = reporters[category] if r then r(message,...) end end commands.registernamespace = interfaces.registernamespace commands.setinterfaceconstant = interfaces.setconstant commands.setinterfacevariable = interfaces.setvariable commands.setinterfaceelement = interfaces.setelement commands.setinterfacemessage = interfaces.setmessage commands.setinterfacemessages = interfaces.setmessages commands.showmessage = interfaces.showmessage function commands.doifelsemessage(category,tag) commands.doifelse(interfaces.doifelsemessage(category,tag)) end function commands.getmessage(category,tag,default) context(interfaces.getmessage(category,tag,default)) end function commands.showassignerror(namespace,key,value,line) local ns, instance = match(namespace,"^(%d+)[^%a]+(%a+)") if ns then namespace = corenamespaces[tonumber(ns)] or ns end if instance then context.writestatus("setup",formatters["error in line %a, namespace %a, instance %a, key %a"](line,namespace,instance,key)) else context.writestatus("setup",formatters["error in line %a, namespace %a, key %a"](line,namespace,key)) end end -- a simple helper local settings_to_hash = utilities.parsers.settings_to_hash local makesparse = function(t) for k, v in next, t do if not v or v == "" then t[k] = nil end end return t end function interfaces.checkedspecification(specification) local kind = type(specification) if kind == "table" then return makesparse(specification) elseif kind == "string" and specification ~= "" then return makesparse(settings_to_hash(specification)) else return { } end end context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-ntb.mkii0000644000175000017500000015200111754241457024260 0ustar norbertnorbert%D \module %D [ file=core-ntb, %D version=2000.04.18, %D title=\CONTEXT\ Table Macros, %D subtitle=Natural Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is an unfinished, preliminary module. At least two %D runs are needed to get the table fixed. Ugly code. % todo: special parsetb for argless variant % todo: protect \tbl... % todo: tblnx also count % todo: get rid of recurse % todo: fast if % todo: avoid halign (just do it manual) and thereby globals % optie=rek beschrijven \writestatus{loading}{ConTeXt Table Macros / Natural Tables} %D As always, this is the nth version. Much time went in %D trying to speed up the many cell calculations, some %D optimizations were rejected in order not to complicate this %D module too much (and in order to prevail extensibility). % shapebox fails here in mkii % % \setupcolors[state=start] % \bTABLE % \bTR [align=middle]\bTH Range\eTH{}\bTH Value\eTH{}\eTR % \bTR \bTD \type{<} 12\eTD{}\bTD 3\eTD{}\eTR % \bTR \bTD 12--16\eTD{}\bTD 2\eTD{}\eTR % \bTR \bTD \type{>}16\eTD{}\bTD 1\eTD{}\eTR % \eTABLE % \starttext % \placefigure[left]{}{} % \startlinecorrection \dontleavehmode \bTABLE % \bTR \bTD oeps \eTD \eTR % \eTABLE % \stoplinecorrection % \placefigure[right]{}{} % \startlinecorrection \dontleavehmode \bTABLE % \bTR \bTD oeps \eTD \eTR % \eTABLE % \stoplinecorrection % \stoptext %D To Do: %D %D \starttyping %D splitsen = ja | herhaal => als nofTH>1 then ja als herhaal %D \stoptyping %D To Do: %D %D \starttyping %D break over pagina %D kop herhalen %D reset settings %D %D \setupTABLE [c|column|x] [nx|odd|even|first|last][a=b] %D \setupTABLE [r|row |y] [nx|odd|even|first|last][a=b] %D \setupTABLE [nx|odd|even|first|last][ny|odd|even|first|last][a=b] %D \setupTABLE [nx|odd|even|first|last] [a=b] %D \setupTABLE [a=b] %D %D \bTH \eTH %D \stoptyping % the section setup does not work yet, data needs to be stored, % i.e.each row should know if it's a head/body/foot, and there % should be \setupTABLE[head]... and alike \unprotect %D A simple way to force equal line spacing is to say: %D %D \starttyping %D \def\bTBLCELL{\begstrut} %D \def\eTBLCELL{\endstrut} %D \stoptyping %D However, the next alternative also takes care of preceding %D and following white space. % \def\bTBLCELL % why not \doinhibitblank % {\inhibitblank\doconvertfont\tbltblstyle\empty\everypar{\delayedbegstrut}} % \def\eTBLCELL % {\ifhmode % \delayedendstrut % \par % added 13/4/2006 % \else % \par % \ifdim\prevdepth<\zeropoint % =-1000pt ? % \vskip-\strutdp % \else % \removebottomthings % \fi % \fi} %D \startbuffer %D \bTABLE[left={(},right={)},top=\startnarrower,bottom=\stopnarrower] %D \bTR \bTD something \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer \def\bTBLCELL % why not \doinhibitblank {\inhibitblank \doconvertfont\tbltblstyle\empty \everypar{\tbltblleft\delayedbegstrut}} \def\eTBLCELL {\ifhmode \delayedendstrut \tbltblright \par % added 13/4/2006 \else % not sure yet:\tbltblright \par \ifdim\prevdepth<\zeropoint % =-1000pt ? \vskip-\strutdp \else \removebottomthings \fi \fi} \newcount\currenttbl \def\@@tbl{tbl} \def\tblcell{1} \def\tblnone{2} \def\@@tblprefix{tbl:} \let\@@rawtblprefix\@@tblprefix %D This should be done more efficient: soon % \let as well as \expandafter\edef's \newcounter\TBLlevel \def\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi} % \def\tblsetprefix % not yet used, figure out when .. may interfere with setup % {\edef\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi}} \def\settblnob#1{\expandafter\let\csname\@@tblprefix\number#1:b\endcsname\plusone} \def\gettblnob#1{\ifcsname\@@tblprefix\number#1:b\endcsname\plusone\else\zerocount\fi} \def\settbltag#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:s\endcsname} \def\settblcol#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:c\endcsname} \def\settblrow#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:r\endcsname} \def\lettbltag#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:s\endcsname} \def\lettblcol#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:c\endcsname} \def\lettblrow#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:r\endcsname} \def\settblwd#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:wd\endcsname} % global ! \def\settblht#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:ht\endcsname} % global ! \def\lettblwd#1#2{\global\expandafter\let\csname\@@tblprefix\number#1:\number#2:wd\endcsname} % global ! \def\lettblht#1#2{\global\expandafter\let\csname\@@tblprefix\number#1:\number#2:ht\endcsname} % global ! \def\gettbltag#1#2{\csname\@@tblprefix\number#1:\number#2:s\endcsname} \def\gettblcol#1#2{\csname\@@tblprefix\number#1:\number#2:c\endcsname} \def\gettblrow#1#2{\csname\@@tblprefix\number#1:\number#2:r\endcsname} \def\gettblwd #1#2{\csname\@@tblprefix\number#1:\number#2:wd\endcsname} \def\gettblht #1#2{\csname\@@tblprefix\number#1:\number#2:ht\endcsname} \def\settblwid#1{\expandafter\xdef\csname\@@tblprefix\number#1:w\endcsname} % {#2} global ! \def\settblhei#1{\expandafter\xdef\csname\@@tblprefix\number#1:h\endcsname} % {#2} global ! \def\settbldis#1{\expandafter\xdef\csname\@@tblprefix\number#1:d\endcsname} % {#2} global ! \def\settblaut#1{\expandafter\xdef\csname\@@tblprefix\number#1:a\endcsname} % {#2} global ! \def\lettblwid#1{\global\expandafter\let\csname\@@tblprefix\number#1:w\endcsname} % {#2} global ! \def\lettblhei#1{\global\expandafter\let\csname\@@tblprefix\number#1:h\endcsname} % {#2} global ! \def\lettbldis#1{\global\expandafter\let\csname\@@tblprefix\number#1:d\endcsname} % {#2} global ! \def\lettblaut#1{\global\expandafter\let\csname\@@tblprefix\number#1:a\endcsname} % {#2} global ! \def\gettblwid#1{\ifcsname\@@tblprefix\number#1:w\endcsname\csname\@@tblprefix\number#1:w\endcsname\else\zeropoint\fi} \def\gettblhei#1{\ifcsname\@@tblprefix\number#1:h\endcsname\csname\@@tblprefix\number#1:h\endcsname\else\zeropoint\fi} \def\gettbldis#1{\ifcsname\@@tblprefix\number#1:d\endcsname\csname\@@tblprefix\number#1:d\endcsname\else\zeropoint\fi} \def\gettblaut#1{\csname \@@tblprefix\number#1:a\endcsname} \def\doiftbltag #1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi} \def\doifnottbltag #1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\gobbleoneargument \else\@EA\firstofoneargument \fi} \def\doifelsetbltag#1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi} \def\doiftblrow #1#2{\ifcsname\@@tblprefix\number#1:\number#2:r\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi} \def\doiftblcol #1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi} \def\doifnottblcol #1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\@EA\gobbleoneargument \else\@EA\firstofoneargument \fi} \def\tbltagstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\zerocount\else\plusone\fi} \def\tblrowstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:r\endcsname\zerocount\else\plusone\fi} \def\tblcolstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\zerocount\else\plusone\fi} \def\settblspn #1{\expandafter\let\csname\@@tblprefix\number#1:s\endcsname \!!plusone} \def\doifelsetblspn#1{\doifelse {\csname\@@tblprefix\number#1:s\endcsname}\!!plusone} % \def\doifelsetblspn#1{\@EA\ifx\csname\@@tblprefix\number#1:s\endcsname\plusone\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi} \def\settblspn #1{\setvalue {\@@tblprefix\number#1:s}{1}} \def\doifelsetblspn#1{\doifelsevalue{\@@tblprefix\number#1:s}{1}} % \long\def\settbltxt#1#2#3% % {\setxvalue{\@@tblprefix#1:#2:l}{\TBLlevel}% % \long\setvalue{\@@tblprefix#1:#2:t}% % {\doifdefined{\@@tblprefix#1:#2:l} % {\edef\TBLlevel{\getvalue{\@@tblprefix#1:#2:l}}}% % #3}} \long\def\settbltxt#1#2#3% {\long\@EA\def\csname\@@tblprefix\number#1:\number#2:t\@EA\endcsname\@EA{\@EA\def\@EA\TBLlevel\@EA{\TBLlevel}#3}} \def\gettbltxt#1#2% {\csname\@@tblprefix\number#1:\number#2:t\endcsname} \newtoks\tbltoks \newtoks\tblrowtoks \let\pushTBLparameters\relax \let\popTBLparameters \relax \newif\ifsqueezeTBLspan \squeezeTBLspantrue % spans one column cell over multi column par cells \newif\ifautosqueezeTBLspan \autosqueezeTBLspantrue % unless explicit widths are given \newif\ifautoTBLspread \autoTBLspreadfalse \newif\ifautoTBLhsize \autoTBLhsizetrue \newif\ifautoTBLrowspan \autoTBLrowspantrue \newif\ifautoTBLemptycell \autoTBLemptycelltrue \newif\ifautoTBLcheckwidth \autoTBLcheckwidthtrue \newif\ifappendTBLsetups \appendTBLsetupstrue \newif\ifenableTBLbreak \enableTBLbreakfalse \newif\ifmultipleTBLheads \multipleTBLheadsfalse \newif\iftraceTABLE \traceTABLEfalse \def\noftblheadlines{0} \def\noftblnextlines{0} \def\noftblhdnxlines{0} \presetlocalframed[\@@tbl\@@tbl] \long\def\handleTBLcell#1#2[#3]{} \long\def\bTC#1\eTC{\bTD#1\eTD} \long\def\bTX#1\eTX{\bTD#1\eTD} \long\def\bTY#1\eTY{\bTR#1\eTR} \let\getTABLEparameters\getparameters \unexpanded\def\setupTABLE {\dotripleempty\dosetupTABLE} \def\dosetupTABLE[#1][#2][#3]% {\ifthirdargument \processaction [#1] [ \v!row=>{\dosetupTABLExy[\c!y][#2][#3]},% \v!column=>{\dosetupTABLExy[\c!x][#2][#3]},% r=>{\dosetupTABLExy[\c!y][#2][#3]},% c=>{\dosetupTABLExy[\c!x][#2][#3]},% y=>{\dosetupTABLExy[\c!y][#2][#3]},% x=>{\dosetupTABLExy[\c!x][#2][#3]},% \v!start=>{\dosetupTABLExy[#1][#2][#3]},% \v!header=>{\dosetupTABLExy[#1][#2][#3]},% \s!unknown=>{\dosetupTABLEzz[#1][#2][#3]}]% \else\ifsecondargument \processaction [#1] [ \v!row=>{\dosetupTABLExy[\c!y][\v!each][#2]},% \v!column=>{\dosetupTABLExy[\c!x][\v!each][#2]},% r=>{\dosetupTABLExy[\c!y][\v!each][#2]},% c=>{\dosetupTABLExy[\c!x][\v!each][#2]},% y=>{\dosetupTABLExy[\c!y][\v!each][#2]},% x=>{\dosetupTABLExy[\c!x][\v!each][#2]},% \v!start=>{\dosetupTABLExy[#1][\v!each][#2]},% \v!header=>{\dosetupTABLExy[#1][\v!each][#2]},% \s!unknown=>{\dosetupTABLEzz[\c!x][#1][#2]}]% \else \getparameters[\@@tbl\@@tbl][#1]% \fi\fi} \def\dosetupTABLExy[#1][#2][#3]% {\def\dodosetupTABLE##1{\setTABLEparameters[#1##1][#3]}% \processcommalist[#2]\dodosetupTABLE} \def\dosetupTABLEzz[#1][#2][#3]% {\def\dodosetupTABLE##1% {\def\dododosetupTABLE####1{\setTABLEparameters[\c!x##1\c!y####1][#3]}% \processcommalist[#2]\dododosetupTABLE}% \processcommalist[#1]\dodosetupTABLE} \def\nopTABLEparameters[#1][#2]% {\letvalue{\@@tblprefix#1}\empty} \def\setTABLEparameters[#1][#2]% {\pushTBLparameters \ifappendTBLsetups \doifdefinedelse{\@@tblprefix#1} {\def\getTABLEparameters[##1][##2]% {\setvalue{\@@tblprefix#1}{\getTABLEparameters[\@@tbl\@@tbl][##2,#2]}}% \getvalue{\@@tblprefix#1}% \let\getTABLEparameters\getparameters} {\setvalue{\@@tblprefix#1}{\getTABLEparameters[\@@tbl\@@tbl][#2]}}% \else \setvalue{\@@tblprefix#1}{\getTABLEparameters[\@@tbl\@@tbl][#2]}% \fi \popTBLparameters} \let\setupTBLsection\relax % % \setupTABLE [y] [first][background=color,backgroundcolor=blue,frame=off,bottomframe=on,topframe=on,framecolor=white] % \setupTABLE [first][first][backgroundcorner=2,corner=10,frame=on] % \setupTABLE [last] [first][backgroundcorner=4,corner=12,frame=on] % % \setupTABLE [row] [each] [background=color,backgroundcolor=blue,frame=on,framecolor=white] % \setupTABLE [first][2] [corner=8] % \setupTABLE [last] [2] [corner=5] % \setupTABLE [first][last] [corner=7] % \setupTABLE [last] [last] [corner=6] % % \startTEXpage % \bTABLE[frame=off,align=middle] % \bTR \bTD one \eTD \bTD two \eTD \bTD three \eTD \eTR % \bTR \bTD first \eTD \bTD second \eTD \bTD third \eTD \eTR % \bTR \bTD alpha \eTD \bTD beta \eTD \bTD gamma \eTD \eTR % \eTABLE % \stopTEXpage % % \setupTABLE [first] [two][corner=2] % special case % \setupTABLE [last] [two][corner=4] % special case % % % % \setupTABLE [one] [first] ... special case of span % % \startTEXpage % \bTABLE[frame=off,align=middle] % \bTR \bTD one \eTD \bTD two \eTD \bTD three \eTD \eTR % \bTR \bTD first \eTD \bTD second \eTD \bTD third \eTD \eTR % \eTABLE % \stopTEXpage \def\setupTBLcell#1#2% cell over col over row {\setupTBLsection % already forgotten \edef\positiverow{\number#1}% \edef\positivecol{\number#2}% \edef\negativerow{\the\numexpr-\maximumrow+#1+\minusone\relax}% \edef\negativecol{\the\numexpr-\maximumcol+#2+\minusone\relax}% % each each \csname\@@tblprefix\c!x\v!each\c!y\v!each\endcsname \csname\@@tblprefix\c!y\v!each\endcsname \csname\@@tblprefix\c!x\v!each\endcsname % odd even \csname\@@tblprefix\c!y\v!oddeven\positiverow\endcsname \csname\@@tblprefix\c!x\v!oddeven\positivecol\endcsname \csname\@@tblprefix\c!x\v!oddeven\positivecol\c!y\v!oddeven\positiverow\endcsname % row/col number combinations \ifcsname\@@tblprefix\c!y\positiverow\endcsname\csname\@@tblprefix\c!y\positiverow\endcsname\fi \ifcsname\@@tblprefix\c!y\negativerow\endcsname\csname\@@tblprefix\c!y\negativerow\endcsname\fi \csname\@@tbl\@@tbl\c!extras\endcsname \@EA\let\csname\@@tbl\@@tbl\c!extras\endcsname\relax % new, see x-fo \ifcsname\@@tblprefix\c!x\positivecol\endcsname\csname\@@tblprefix\c!x\positivecol\endcsname\fi \ifcsname\@@tblprefix\c!x\negativecol\endcsname\csname\@@tblprefix\c!x\negativecol\endcsname\fi \csname\@@tbl\@@tbl\c!extras\endcsname \@EA\let\csname\@@tbl\@@tbl\c!extras\endcsname\relax % new, see x-fo % first/last combinations \ifnum\positiverow=\plusone \csname\@@tblprefix\c!y\v!first\endcsname \ifcsname\@@tblprefix\c!x\positivecol\c!y\v!first\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\v!first\endcsname\fi \fi \ifnum\positivecol=\plusone \csname\@@tblprefix\c!x\v!first\endcsname \ifcsname\@@tblprefix\c!x\v!first\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\v!first\c!y\positiverow\endcsname\fi \fi \ifnum\positiverow=\maximumrow\relax \csname\@@tblprefix\c!y\v!last\endcsname \ifcsname\@@tblprefix\c!x\positivecol\c!y\v!last\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\v!last\endcsname\fi \fi \ifnum\positivecol=\maximumcol\relax \csname\@@tblprefix\c!x\v!last\endcsname \ifcsname\@@tblprefix\c!x\v!last\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\v!last\c!y\positiverow\endcsname\fi \fi \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax \csname\@@tblprefix\c!x\v!last\c!y\v!last\endcsname \fi\fi \ifnum\positiverow=\plusone \ifnum\positivecol=\plusone \csname\@@tblprefix\c!x\v!first\c!y\v!first\endcsname \fi\fi \ifnum\positiverow=\plusone \ifnum\positivecol=\maximumcol\relax \csname\@@tblprefix\c!x\v!last\c!y\v!first\endcsname \fi\fi \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\plusone \csname\@@tblprefix\c!x\v!first\c!y\v!last\endcsname \fi\fi % special case: two rows and last row : two&first and two&last (round corners) \ifnum\maximumrow=\plustwo\relax \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\plusone \csname\@@tblprefix\c!x\v!first\c!y\v!two\endcsname \fi\fi \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax \csname\@@tblprefix\c!x\v!last\c!y\v!two\endcsname \fi\fi \fi \ifnum\gettblcol\positiverow\positivecol=\maximumcol\relax % top span over whole width \ifnum\positiverow=\plusone \csname\@@tblprefix\c!x\v!one\c!y\v!first\endcsname \fi \ifnum\positiverow=\maximumrow\relax \csname\@@tblprefix\c!x\v!one\c!y\v!last\endcsname \fi \fi % header things \ifnum#1>\noftblhdnxlines\else \ifcsname\@@tblprefix\v!header\v!each \endcsname\csname\@@tblprefix\v!header\v!each \endcsname\fi \ifcsname\@@tblprefix\v!header\positivecol\endcsname\csname\@@tblprefix\v!header\positivecol\endcsname\fi \fi % explicit cells \ifcsname\@@tblprefix\c!x\positivecol\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\positiverow\endcsname\fi \ifcsname\@@tblprefix\c!x\negativecol\c!y\negativerow\endcsname\csname\@@tblprefix\c!x\negativecol\c!y\negativerow\endcsname\fi % done \global\letcscsname\@@tblsplitafter\csname\@@tbl\@@tbl\c!after\endcsname \relax} % we cannot use +n (checking on number/last/first would slow down too much) % % \setupTABLE[r] [2][color=red] % \setupTABLE[r] [-2][color=red] % \setupTABLE[c] [2][color=green] % \setupTABLE[c] [-2][color=green] % \setupTABLE[4] [4][color=blue] % \setupTABLE[-4][-4][color=blue] % % \bTABLE % \dorecurse{10}{\bTR \dorecurse{6}{\bTD xxx \eTD} \eTR} % \eTABLE \globallet\@@tblsplitafter\relax % split + page: % % \bTABLE[split=yes] % \bTR \bTD left \eTD\bTD right \eTD\eTR % \bTR[after=\page] \bTD left \eTD\bTD right \eTD\eTR % \bTR \bTD left \eTD\bTD right \eTD\eTR % \eTABLE % todo: protect counters \newcount\row \newcount\col \newcount\xrow \newcount\xcol \newcount\xxrow \newcount\xxcol \newcount\maximumrow \newcount\maximumcol \newcount\maximumrowspan \newcount\currentcol \newcount\tblspn \def\parseTR[#1][#2]% [#2] is dummy that kills spaces / no #3 argument {\currentcol\zerocount \advance\maximumrow\plusone \iffirstargument\setTABLEparameters[\c!y\number\maximumrow][#1]\fi} \def\settblref#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:x\endcsname} \def\gettblref#1#2{\ifcsname\@@tblprefix\number#1:\number#2:x\endcsname\csname\@@tblprefix\number#1:\number#2:x\endcsname\fi} \long\def\parseTD[#1][#2]#3\eTD % [#2] is dummy that kills spaces {\def\tblny{\tblnr}% \def\tblnx{\tblnc}% \let\tblnc\plusone \let\tblnr\plusone \let\tbln\currentcol \let\tblm\empty \iffirstargument \getparameters[\@@tbl][#1]% \fi % goto first cell % NEW, n/m=cellnumber \edef\@@tblnindeed{\csname\@@tbl\c!n\endcsname}% \ifx\@@tblnindeed\empty \global\advance\tblspn\tblnx\relax \else\ifnum\@@tblnindeed=\currentcol\else \scratchcounter\numexpr\@@tblnindeed-\currentcol+\minusone-\tblspn\relax \ifnum\scratchcounter>\zerocount \expanded{\parseTD[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no][]}\eTD \fi % can also be made faster \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]% \fi\fi \edef\@@tblmindeed{\csname\@@tbl\c!m\endcsname}% \ifx\@@tblmindeed\empty \else \ifnum\@@tblmindeed=\currentcol \else \scratchcounter\numexpr\@@tblmindeed-\currentcol+\minusone-\tblspn\relax \dorecurse\scratchcounter{\expanded{\parseTD[\c!n=,\c!m=][]}\eTD}% % can be sped up \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]% \fi \fi \doloop % skip over columns that result from earlier span {\advance\currentcol\plusone \doifnottbltag\maximumrow\currentcol\exitloop}% % == \def\next{\advance\currentcol\plusone\doiftbltag\maximumrow\currentcol\next}\next % fill r*c cells and set span \ifnum\tblnx=\plusone \ifnum\tblny=\plusone \ifnum\currentcol>\maximumcol\relax \maximumcol\currentcol \fi \else \presetTBLcell \fi \else \presetTBLcell \fi % set values \lettbltag\maximumrow\currentcol\tblcell \settblcol\maximumrow\currentcol{\number\tblnx}% \settblrow\maximumrow\currentcol{\number\tblny}% \settblref\maximumrow\currentcol{\ifcsname\@@tbl\c!action\endcsname\csname\@@tbl\c!action\endcsname\fi}% % save text \edef\celltag{{\number\maximumrow}{\number\currentcol}}% \@EA\settbltxt\@EA\maximumrow\@EA\currentcol\@EA{\@EA\handleTBLcell\celltag[#1]{#3}}} \def\presetTBLcell {\row\maximumrow \col\currentcol \dorecurse\tblny {\col\currentcol \settblcol\row\col{\number\tblnx}% \ifnum\tblnx>\maximumrowspan\relax \maximumrowspan\tblnx \fi \dorecurse\tblnx {\lettbltag\row\col\tblnone \advance\col\plusone}% \advance\row\plusone}% % check max column \advance\col\minusone \ifnum\col>\maximumcol\relax \maximumcol\col \fi} %D The usage of n and m: %D %D \startbuffer %D \bTABLE[width=3em] %D \bTR\bTD d1 \eTD\bTD[n=2] d2 \eTD\bTD[n=5] d5 \eTD\bTD[n=7] d7 \eTD\eTR %D \bTR\bTD f1 \eTD\bTD[n=4] f4 \eTD\bTD[n=5] f5 \eTD\bTD[n=7] f7 \eTD\eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \bTABLE[width=3em] %D \bTR\bTD d1 \eTD\bTD[m=2] d2 \eTD\bTD[m=5] d5 \eTD\bTD[m=7] d7 \eTD\eTR %D \bTR\bTD f1 \eTD\bTD[m=4] f4 \eTD\bTD[m=5] f5 \eTD\bTD[m=7] f7 \eTD\eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \bTABLE[frame=on] %D \bTR \bTH[nc=3] One \eTH \bTH[m=4] Four \eTH\eTR %D \bTR \bTD a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR %D \eTABLE %D %D \bTABLE[frame=on] %D \bTR \bTH[nr=2] One \eTH \bTH[m=3] Three \eTH\eTR %D \bTR \bTD[m=3] a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR %D \bTR \bTD[m=3] a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer \long\def\parseTH[#1]#2\eTH {\parseTD[#1,\c!color=\tbltblheadcolor,\c!style=\tbltblheadstyle,\c!aligncharacter=\v!no]#2\eTD} %D new \long\def\parseTN[#1]#2\eTN {\parseTD[#1]\digits#2\relax\eTD} %D Vit Zyka needed the option to create a distance between columns, so I %D added support for individual column distances. %D %D \startbuffer %D % \setupTABLE[c][each][distance=2em] %D \setupTABLE[c][1][distance=2em] %D \setupTABLE[c][2][distance=3em] %D %D \bTABLE %D \bTR \bTD test \eTD \bTD test \eTD \bTD test \eTD \eTR %D \bTR \bTD[nx=2] test \eTD \bTD test \eTD \eTR %D \bTR \bTD test \eTD \bTD[nx=2] test \eTD \eTR %D \eTABLE %D %D \bTABLE[option=stretch] %D \bTR \bTD test \eTD \bTD test \eTD \bTD test \eTD \eTR %D \bTR \bTD[nx=2] test \eTD \bTD test \eTD \eTR %D \bTR \bTD test \eTD \bTD[nx=2] test \eTD \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection %D %D and he provided patches for the global left and right margin distances %D as well as the columndistance (although i changed the names -). Here %D is his testcase: %D %D \startbuffer %D \framed[offset=overlay]\bgroup %D \setupTABLE[column][2][align=left]% %D \setupTABLE[column][3][align=right]% %D \bTABLE[columndistance=2cm,leftmargindistance=.3cm,rightmargindistance=.5cm] %D \bTR \bTH[nc=3] Table head\eTH \eTR %D \bTR \bTD[nc=2] AB\eTD \bTD C\eTD \eTR %D \bTR \bTD[nc=2,align=left] AB\eTD \bTD C\eTD \eTR %D \bTR \bTD[nc=2,align=middle] AB\eTD \bTD C\eTD \eTR %D \bTR \bTD A\eTD \bTD B\eTD \bTD C\eTD \eTR %D \bTR \bTD Aa\eTD \bTD Bb\eTD \bTD Cccc\eTD \eTR %D \bTR \bTD[nc=3,align=middle] ABC\eTD \eTR %D \eTABLE %D \egroup %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection \newtoks\TBLhead \newtoks\TBLnext \newtoks\TBLbody \newtoks\TBLfoot % to be done: head foot, dus state var \unexpanded\def\bTABLEhead{\dosingleempty\doTABLEhead} \let\eTABLEhead\relax \unexpanded\def\bTABLEnext{\dosingleempty\doTABLEnext} \let\eTABLEnext\relax \unexpanded\def\bTABLEbody{\dosingleempty\doTABLEbody} \let\eTABLEbody\relax \unexpanded\def\bTABLEfoot{\dosingleempty\doTABLEfoot} \let\eTABLEfoot\relax \long\def\doTABLEhead[#1]#2\eTABLEhead{\appendtoks\doTABLEsection[#1]{#2}\to\TBLhead} \long\def\doTABLEnext[#1]#2\eTABLEnext{\appendtoks\doTABLEsection[#1]{#2}\to\TBLnext} \long\def\doTABLEbody[#1]#2\eTABLEbody{\appendtoks\doTABLEsection[#1]{#2}\to\TBLbody} \long\def\doTABLEfoot[#1]#2\eTABLEfoot{\appendtoks\doTABLEsection[#1]{#2}\to\TBLfoot} \long\def\doTABLEsection[#1]#2% {\def\setupTBLsection{\getparameters[\@@tbl\@@tbl][#1]}% #2% \let\setupTBLsection\relax} \let\pushTBL\relax \let\popTBL \relax \chardef\tblpass=0 \def\presetallTABLEparameters% each odd|even level / can be sped up but only once per table {\executeifdefined{\@@rawtblprefix\v!start\v!each}\relax \executeifdefined{\@@rawtblprefix\v!start\v!oddeven\TBLlevel}\relax \executeifdefined{\@@rawtblprefix\v!start\number\TBLlevel}\relax} \def\bTABLE {\dosingleempty\dobTABLE} \def\dobTABLE[#1]% {\pushTBL % box not here \bgroup \TBLhead\emptytoks \TBLnext\emptytoks \TBLbody\emptytoks \TBLfoot\emptytoks \ifhmode\kern\zeropoint\fi % blocks \removeunwantedspaces: check this on icare handelingsschema \resetcharacteralign % new \getparameters [\@@tbl\@@tbl] [\c!align={\v!right,\v!broad,\v!high},#1]% \hsize\tbltbltextwidth \processaction [\tbltblsplit] [ \v!yes=>\enableTBLbreaktrue, \v!repeat=>\enableTBLbreaktrue\multipleTBLheadstrue, \v!auto=>\ifinsidesplitfloat\enableTBLbreaktrue\fi] \processaction [\tbltblheader] [\v!repeat=>\multipleTBLheadstrue]% \localcolortrue \presetallTABLEparameters \ExpandFirstAfter\processallactionsinset [\tbltbloption] [\v!stretch=>\autoTBLspreadtrue]% \linewidth\tbltblrulethickness % needs to be frozen \dontcomplain \currentcol\zerocount \maximumrowspan\plusone \maximumcol\zerocount \maximumrow\zerocount \let\bTR\dobTR \let\bTD\dobTD \let\bTH\dobTH \let\bTN\dobTN} \unexpanded\def\dobTR{\dodoubleempty\parseTR} \unexpanded\def\dobTD{\dodoubleempty\parseTD} \unexpanded\def\dobTH{\dodoubleempty\parseTH} \unexpanded\def\dobTN{\dodoubleempty\parseTN} % permits \expanded{\bTD ... \eTD} \unexpanded\def\eTR{\ignorespaces} \unexpanded\def\eTD{\ignorespaces} \unexpanded\def\eTH{\ignorespaces} \unexpanded\def\eTN{\ignorespaces} \def\eTABLE % beware, we need to get rid of spurious spaces when in hmode {% tricky and dirty order -) \doifsometokselse\TBLhead % slow, better a flag {\the\TBLhead \edef\noftblheadlines{\number\maximumrow}% \doifsometokselse\TBLnext {\the\TBLnext \edef\noftblnextlines{\number\numexpr\maximumrow-\noftblheadlines\relax}}% {\let\noftblnextlines\zerocount}% was 1 \edef\noftblhdnxlines{\number\maximumrow}} {\let\noftblheadlines\zerocount % was 1 \let\noftblnextlines\zerocount \let\noftblhdnxlines\zerocount}% \the\TBLbody \the\TBLfoot \removeunwantedspaces % only if hmode % finish cells \dorecurse\maximumrow {\row\recurselevel\relax \dorecurse\maximumcol {\col\recurselevel\relax \doifnottbltag\row\col {\xxcol\col \xxrow\row \xrow\row \doloop {\xcol\col \doloop {\doifelsetbltag\xrow\xcol \exitloop {\advance\xcol\plusone \ifnum\xcol>\maximumcol\relax \exitloop \fi}}% \doifelsetbltag\xrow\xcol \exitloop {\xxrow\xrow \xxcol\xcol \advance\xrow\plusone \ifnum\xrow>\maximumrow \exitloop \fi}}% \ifnum\xxrow>\maximumrow\xxrow\maximumrow\fi \ifnum\xxcol>\maximumcol\xxcol\maximumcol\fi \xxrow\numexpr\xxrow-\row+\plusone\relax \xxcol\numexpr\xxcol-\col+\plusone\relax \xrow\row \dorecurse\xxrow {\xcol\col \settblcol\xrow\xcol{\number\xxcol}% \dorecurse\xxcol {\lettbltag\xrow\xcol\tblnone \advance\xcol\plusone}% \advance\xrow\plusone}% \lettbltag\row\col\tblcell \settblcol\row\col{\the\xxcol}% \settblrow\row\col{\the\xxrow}% \ifautoTBLemptycell \edef\celltag{{\number\row}{\number\col}}% \@EA\settbltxt\@EA\row\@EA\col\@EA{\@EA\handleTBLcell\celltag[]{\strut}}% \fi}}}% % to be sure \dorecurse\maximumrow {\row\recurselevel\relax \dorecurse\maximumcol {\col\recurselevel\relax \doiftblrow\row\col {\scratchcounter\numexpr\maximumrow-\row+\plusone\relax \ifnum\gettblrow\row\col>\scratchcounter \settblrow\row\col{\the\scratchcounter}% \fi}% \lettblht\row\col\zeropoint \lettblwd\row\col\zeropoint \doifnottblcol\row\col{\lettblcol\row\col\zerocount}% \doifnottbltag\row\col{\lettbltag\row\col\tblnone}}}% % check and do \ifcase\maximumcol\else \startTBLprocessing \begTBL \dorecurse\maximumrow {\bTBL \row\recurselevel\relax \dorecurse\maximumcol {\col\recurselevel\relax \expanded{\doTBL{\number\row}{\number\col}}}% \eTBL}% \removeunwantedspaces % only if hmode \endTBL \stopTBLprocessing % wrong ! ! ! better to have an auto-offset-overlay % \ifnum\TBLlevel>1 % \vskip-\strutdp % \fi \fi \egroup \popTBL} \let\startTBLprocessing\relax \let\stopTBLprocessing \relax \newcount\prelocatedTBLrows % \prelocateTBLrows{1000} may speed up large tables \def\bTBL{\tblrowtoks\emptytoks} \def\eTBL{\tbltoks\@EA\@EA\@EA{\@EA\the\@EA\tbltoks\@EA\begintblrow\the\tblrowtoks\endtblrow}}% \def\prelocateTBLerror {\writestatus\m!systems{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \number\prelocatedTBLrows)}} \def\prelocateTBLrows#1% we start at zero so we have one to much, better play safe anyway {\dostepwiserecurse\prelocatedTBLrows{#1}\plusone{\expandafter\newtoks\csname tbl:\recurselevel\endcsname}% \def\bTBL {\ifnum\tblrow<\prelocatedTBLrows\relax \@EA\let\@EA\tblrowtoks\csname tbl:\the\tblrow\endcsname\tblrowtoks\emptytoks \else \prelocateTBLerror \fi}% \def\eTBL {\tbltoks\@EA\@EA\@EA{\@EA\the\@EA\tbltoks\@EA\begintblrow\@EA\the\csname tbl:\the\tblrow\endcsname\endtblrow}}% \global\prelocatedTBLrows#1\relax} % \prelocateTBLrows{1000} % may speed up large tables % We use aligments to handle the empty (skipped) columns, so % that we don't have to (re|)|calculate these. \def\skiptblcol {\global\advance\tblcol\plusone} \def\nexttblcol {\global\advance\tblcol\plusone \kern\tbltblcolumndistance &} \def\spantblcol {\span} \newcount\tblrow \newcount\tblcol \let\savedtblrow\!!zerocount \let\savedtblcol\!!zerocount \def\begintblrow {\noalign {\global\advance\tblrow\plusone \global\tblcol\zerocount \global\tblspn\zerocount}% \nexttblcol \kern\dimexpr\tbltblleftmargindistance-\tbltblcolumndistance\relax} \def\endtblrow {\kern\dimexpr\tbltblrightmargindistance-\tbltblcolumndistance\relax \crcr \noalign {\nointerlineskip \ifnum\tblrow>\noftblheadlines \ifnum\gettblnob\tblrow=\zerocount \allowbreak \fi \else \allowbreak % else no proper head split off \fi \bgroup % protect local vars \@@tblsplitafter \egroup \bgroup % protect local vars \scratchcounter\numexpr\tblrow+\plusone\relax \ifnum\scratchcounter>\noftblhdnxlines\relax \ifnum\scratchcounter<\maximumrow\relax \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}% \fi \fi \egroup}} \def\begintbl {\global\tblspn\zerocount \global\tblcol\zerocount \global\tblrow\zerocount \global\advance\tblrow\minusone \tabskip\zeropoint \halign\bgroup \registerparoptions % new \ignorespaces##\unskip&&\ignorespaces##\unskip\cr} \def\endtbl {\egroup} \setvalue{\tblnone TBL}#1#2% {\spanTBL{#1}{#2}} \setvalue{\tblcell TBL}#1#2% {\tblrowtoks\expandafter{\the\tblrowtoks\makeTBL #1 #2 }% space delimited -> less tokens \spanTBL{#1}{#2}} \def\spanTBL#1#2% {\scratchcounter\gettblcol{#1}{#2}\relax \ifnum\scratchcounter>\zerocount \advance\scratchcounter \minusone \dorecurse\scratchcounter{\tblrowtoks\expandafter{\the\tblrowtoks\spantblcol}}% \dorecurse\scratchcounter{\tblrowtoks\expandafter{\the\tblrowtoks\skiptblcol}}% \tblrowtoks\expandafter{\the\tblrowtoks\nexttblcol}% \fi} \def\doTBL#1#2% {\csname\gettbltag{#1}{#2}TBL\endcsname{#1}{#2}} \def\begTBL {\global\tblspn\zerocount \global\tblrow\zerocount \global\tblcol\zerocount \chardef\tblpass\zerocount \tbltoks\emptytoks} \def\flushtbltoks{\begintbl\the\tbltoks\endtbl} \def\domakeTBLone#1 #2 % {\gettbltxt{#1}{#2}}% \def\domakeTBLtwo#1 #2 % meer in cellD {\scratchdimen\zeropoint \scratchcounter\tblcol \!!counta\gettblcol{#1}{#2}\relax \dorecurse\!!counta {\advance\scratchdimen\dimexpr\gettblwid\scratchcounter+\tbltblcolumndistance\relax \ifnum\recurselevel<\!!counta \advance\scratchdimen \gettbldis\scratchcounter\fi \advance\scratchcounter\plusone}% \edef\widthTBL{\the\dimexpr\scratchdimen-\tbltblcolumndistance\relax}% \setbox\scratchbox\hbox{\gettbltxt{#1}{#2}}% \settblht{#1}{#2}{\the\ht\scratchbox}% \settblwd{#1}{#2}{\the\wd\scratchbox}% \ifdim\ht\scratchbox>\gettblhei{#1}\relax \settblhei{#1}{\the\ht\scratchbox}% \fi}% \def\domakeTBLthree#1 #2 % {% height \!!counta \gettblcol{#1}{#2}\relax \!!countb \gettblrow{#1}{#2}\relax \!!heighta\gettblht {#1}{#2}\relax \scratchdimen\zeropoint \ifnum\!!counta=\maximumcol\relax % case: nc=maxcolumns \else \scratchcounter#1\relax \dorecurse\!!countb {\advance\scratchdimen \gettblhei\scratchcounter \advance\scratchcounter\plusone}% \ifdim\scratchdimen<\!!heighta\relax \scratchdimen\!!heighta \fi \fi \edef\heightTBL{\the\scratchdimen}% % width \scratchdimen\zeropoint \scratchcounter\tblcol \dorecurse\!!counta {\advance\scratchdimen\dimexpr\gettblwid\scratchcounter+\tbltblcolumndistance\relax \ifnum\recurselevel<\!!counta \advance\scratchdimen \gettbldis\scratchcounter\fi \advance\scratchcounter\plusone}% \edef\widthTBL{\the\dimexpr\scratchdimen-\tbltblcolumndistance\relax}% % cell \setbox\scratchbox\hbox{\gettbltxt{#1}{#2}}% \ifnum\!!counta=\maximumcol\relax % case: nc=maxcolumns \else \scratchdimen\gettblhei{#1}% \setbox\scratchbox\hbox {\lower\ht\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}}% \ht\scratchbox\scratchdimen \fi \dp\scratchbox\zeropoint \edef\!!stringa{\gettblref{#1}{#2}}% \ifx\!!stringa\empty \box\scratchbox \else \expanded{\gotobox{\box\scratchbox}[\!!stringa]}% \fi \box\scratchbox} \def\inTBLcell#1#2% hm, do we need #1 #2 ? we use tblcol anyway {\ExpandBothAfter\doifinsetelse\localwidth{\v!fit,\v!broad} % user set {} {\scratchdimen\gettblaut\tblcol\relax \ifdim\localwidth>\scratchdimen \settblaut\tblcol{\the\dimexpr\localwidth\relax}% \fi}}% \def\endTBL {\setbox\scratchbox\hbox {\localframed [\@@tbl\@@tbl] [\c!frame=\v!off,\c!background=,\c!align=\v!no] {\strut}}% \edef\minimalcellheight{\the\ht\scratchbox}% \dorecurse\maximumcol {\lettblaut\recurselevel\zeropoint % new \xcol\recurselevel\relax \dorecurse\maximumrow {\lettblwd\recurselevel\xcol\zeropoint \lettblht\recurselevel\xcol\zeropoint}% % till here \lettblwid\recurselevel\zeropoint \lettbldis\recurselevel\zeropoint}% \dorecurse\maximumrow {\lettblhei\recurselevel\maxdimen}% \chardef\tblpass\plusone \let\makeTBL\domakeTBLone \let\handleTBLcell\dohandleTBLcellA \setbox0\vbox{\trialtypesettingtrue \flushtbltoks}% % \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}% \lettbldis\maximumcol\zeropoint \ifautoTBLspread % experimental, stretch non fixed cells to \hsize \checktblwidthsone % trial run \checktblwidthstwo % real run \stretchtblwidths \let\handleTBLcell\dohandleTBLcellB \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}% \else\ifdim\wd0>\hsize \ifautoTBLhsize \checktblwidthsone % trial run \checktblwidthstwo % real run \let\handleTBLcell\dohandleTBLcellB \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}% \fi \else\ifautoTBLrowspan\ifnum\maximumrowspan>1 % max ? % added jan 2002 because nx=* did no longer work \edef\savedhsize{\the\hsize}% \hsize\wd0\relax % new per 17/04/2006 \checktblwidthsone % trial run \checktblwidthstwo % real run \hsize\savedhsize % \let\handleTBLcell\dohandleTBLcellC \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}% \fi\fi\fi\fi \let\handleTBLcell\dohandleTBLcellD \chardef\tblpass\plustwo \let\makeTBL\domakeTBLtwo \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}% \checktblheightsone \checktblheightstwo \let\handleTBLcell\dohandleTBLcellE \chardef\tblpass\plusthree \let\makeTBL\domakeTBLthree \ifnum\TBLlevel>\plusone \@EA\notsplittblbox \else\ifenableTBLbreak \@EAEAEA\splittblbox \else \@EAEAEA\notsplittblbox \fi\fi{\flushtbltoks}} \def\stretchtblwidths % more variants, e.g. a max to \dimend {\ifcase\maximumcol\else % else division by zero \!!dimend\zeropoint \!!dimene\hsize \dorecurse\maximumcol {\advance\!!dimend\dimexpr\gettblwid\recurselevel+\tbltblcolumndistance\relax \advance\!!dimene-\gettbldis\recurselevel}% \advance\!!dimend\dimexpr-\tbltblcolumndistance+\tbltblleftmargindistance+\tbltblrightmargindistance\relax % distribute width (stretch) \ifdim\!!dimend<\!!dimene \advance\!!dimend-\!!dimene \!!dimend-\!!dimend \divide\!!dimend\maximumcol \dorecurse\maximumcol {\settblwid\recurselevel{\the\dimexpr\gettblwid\recurselevel+\!!dimend\relax}}% \fi \fi} \newbox\finaltblbox \def\notsplittblbox#1% {\setbox\finaltblbox\vbox{#1}% \postprocessTABLEbox\finaltblbox \beforeTABLEbox \box\finaltblbox \afterTABLEbox} \def\splittblbox#1% {\ifinsidesplitfloat \donetrue \else\ifinsidefloat \donefalse \else \donetrue \fi\fi \ifdone \executeifdefined{dosplittblbox\tbltblsplitmethod}\dosplittblbox{#1}% \else \notsplittblbox{#1}% \fi} \newbox\TABLEsplitbox % public, don't change \let\extratblsplitheight\zeropoint % additional space taken by before/afterTABLEsplitbox \def\dosplittblbox#1% {\resettsplit \def\tsplitminimumfreelines{2}% \def\tsplitminimumfreespace{\dimexpr\extratblsplitheight+\tbltblsplitoffset\relax}% \def\tsplitbeforeresult {\beforeTABLEsplitbox}% \def\tsplitafterresult {\afterTABLEsplitbox}% \def\tsplitafter {\@@tblsplitafter}% \setbox\tsplitcontent\vbox{#1}% \ifmultipleTBLheads \dorecurse\noftblheadlines {\setbox\scratchbox\vsplit\tsplitcontent to \lineheight \setbox\tsplithead\vbox{\unvcopy\tsplithead\unvcopy\scratchbox}}% \dorecurse\noftblnextlines {\setbox\scratchbox\vsplit\tsplitcontent to \lineheight \setbox\tsplitnext\vbox{\unvcopy\tsplitnext\unvcopy\scratchbox}}% \fi \doifsomething\tbltblspaceinbetween {\def\tsplitinbetween{\blank[\tbltblspaceinbetween]}}% \def\postprocesstsplit{\postprocessTABLEsplitbox{\box\tsplitresult}}% \handletsplit} % ! ! ! ! TODO: naast \postprocessTABLEsplitbox ook evt \postprocessTABLEbox voor niet split \let\postprocessTABLEsplitbox\gobbleoneargument \let\postprocessTABLEbox \gobbleoneargument \let\beforeTABLEsplitbox\relax \let\afterTABLEsplitbox \relax \let\beforeTABLEbox \relax \let\afterTABLEbox \relax \def\checktblwidthsone{\dochecktblwidths0} % 0 = trial run \def\checktblwidthstwo{\dochecktblwidths1} % 1 = real run \def\dochecktblwidths#1% {\iftraceTABLE\showtblwids{B#1}\fi \!!counta\zerocount \!!dimena\dimexpr\hsize-\tbltblleftmargindistance-\tbltblrightmargindistance-\tbltblcolumndistance\relax \dorecurse\maximumcol {\scratchdimen\gettblaut\recurselevel\relax \advance\!!dimena-\gettbldis\recurselevel\relax \ifdim\scratchdimen>\zeropoint\relax \advance\!!dimena -\scratchdimen \else \scratchdimen\gettblwid\recurselevel\relax \ifdim\scratchdimen>\tbltblmaxwidth\relax \ifcase#1\else\lettblwid\recurselevel\zeropoint\fi \advance\!!counta \plusone \else \ifdim\scratchdimen>\zeropoint\relax \advance\!!dimena -\scratchdimen \else % eigenlijk moet dit alleen als de kolom wordt overspannen door een % vorige, maw extra dubbele loop en status var \advance\!!counta \plusone \fi \fi \fi}% \ifcase\!!counta \else \divide\!!dimena \!!counta \fi \dorecurse\maximumcol {\scratchdimen\gettblwid\recurselevel\relax \ifcase#1\relax \ifdim\scratchdimen<\!!dimena % take natural width \settblaut\recurselevel{\the\scratchdimen}% \fi \else \ifdim\scratchdimen=\zeropoint % auto set width \settblwid\recurselevel{\the\!!dimena}% \fi \fi}% \iftraceTABLE\showtblwids{E#1}\fi} \newcount\xrowTBL \newcount\xcolTBL \newcount\xxrowTBL % dikke arg naar recurse wegwerken \def\dochecktblheightsone {\!!countb\gettblrow\xrowTBL\xcolTBL\relax % check row span \ifnum\!!countb>\plusone % current height in row \dimen0=\gettblht\xrowTBL\xcolTBL % find nearest height in row \dimen2=\zeropoint \dorecurse\maximumcol {\ifnum\recurselevel=\xcolTBL\else \doiftblrow\xrowTBL\recurselevel {\!!countc=\gettblrow\xrowTBL\recurselevel\relax \ifnum\!!countc=\plusone \dimen4=\gettblht\xrowTBL\recurselevel\relax \ifdim\dimen2<\dimen4 \dimen2=\dimen4 \fi \fi}% \fi}% \xxrowTBL\xrowTBL % calculate cummulative height \dimen4=\dimen2 \!!countc\xrowTBL \advance\!!countc\minusone \dorecurse\!!countb {\ifnum\xxrowTBL=\xrowTBL\else \advance\dimen4 \gettblhei\xxrowTBL \fi \ifnum\recurselevel=\!!countb\else \settblnob\!!countc \advance\!!countc\plusone \fi \advance\xxrowTBL\plusone}% % distribute overshoot equally \ifdim\dimen2>\zeropoint % see natural-003 \ifdim\dimen4<\dimen0 \advance\dimen0 -\dimen4 \divide\dimen0 \!!countb \xxrowTBL\xrowTBL \settblhei\xrowTBL{\the\dimen2}% \dorecurse\!!countb {\dorecurse\maximumcol {\ifnum\recurselevel=\xcolTBL\else \scratchdimen\dimexpr\gettblht\xxrowTBL\recurselevel+\dimen0\relax \settblht\xxrowTBL\recurselevel{\the\scratchdimen}% \ifdim\gettblhei\xxrowTBL<\scratchdimen \settblhei\xxrowTBL{\the\scratchdimen}% \fi \fi}% \advance\xxrowTBL\plusone}% \else\ifdim\dimen4>\dimen0 \settblhei\xrowTBL{\the\dimen2}% \fi\fi \fi \fi} \def\checktblheightsone {\dorecurse\maximumrow {\xrowTBL\recurselevel\relax \dorecurse\maximumcol {\xcolTBL\recurselevel\relax \doiftblrow\xrowTBL\xcolTBL\dochecktblheightsone}}} \def\checktblheightstwo {} \def\showtblwids#1% {\vbox {\forgetall\tttf[#1]\dorecurse\maximumcol {\scratchdimen\gettblwid\recurselevel\relax [\recurselevel:\the\scratchdimen]}}} \def\TBLcharalign {\doifelse\tbltblaligncharacter\v!yes \doTBLcharalign\gobbleoneargument} \long\def\doTBLcharalign#1#2% column data {\edef\alignmentclass{#1}% \edef\alignmentcharacter{\tbltblalignmentcharacter}% \ifcase\tblpass\or \setfirstpasscharacteralign\checkalignment{#2}% {\strut#2\unskip}% \fi % force hsize, so always a second \setsecondpasscharacteralign \checkalignment{#2}% {\strut#2\unskip}% \ignorespaces} % new, needed for icare first col of 'doeltabel', experimental \long\def\dohandleTBLcellA#1#2[#3]#4% grouping added ! ! ! {\bgroup \setupTBLcell{#1}{#2}% \setbox\scratchbox\hbox {\scratchdimen\tbltbldistance\relax \ifdim\scratchdimen>\gettbldis{#2}\relax \settbldis{#2}{\the\scratchdimen}% \fi \localframed [\@@tbl\@@tbl] [#3,\c!background=,\c!frame=\v!off]% 25% faster {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL\inTBLcell{#1}{#2}}}% \scratchdimen\gettblwid\tblcol\relax \ifdim\wd\scratchbox>\scratchdimen \ifsqueezeTBLspan \ifautosqueezeTBLspan \doifinsetelse\tbltblwidth{\v!fit,\v!fixed,\v!broad,\v!local} \donetrue \donefalse \else \donetrue \fi \ifdone % brr, 0 \ifnum\number\gettblcol{#1}{#2}>\plusone \settblspn\tblcol\fi \fi \fi \doifelsetblspn\tblcol \donothing {\ifdim\gettblwid\tblcol<\wd\scratchbox \settblwid\tblcol{\the\wd\scratchbox}% \fi}% auto set \fi \scratchcounter\numexpr\tblrow+\plusone\relax \scratchdimen\gettblhei\scratchcounter\relax \ifdim\ht\scratchbox<\scratchdimen \settblhei\scratchcounter{\the\ht\scratchbox}% auto set \fi \settblht{#1}{#2}{\the\ht\scratchbox}% \settblwd{#1}{#2}{\the\wd\scratchbox}% \ifautoTBLcheckwidth \ifdim\wd\scratchbox<.75\hsize \ifdim\ht\scratchbox>2\openlineheight % honor width since this \scratchdimen\gettblaut\tblcol\relax % can be a figure or so \ifdim\scratchdimen=\zeropoint % side effect: when width is set to 0pt, % we can force a span that fits the sum of spans widths \settblaut\tblcol{\the\scratchdimen}% \else\ifdim\wd\scratchbox>\scratchdimen % unless span \settblaut\tblcol{\the\wd\scratchbox}% % to be translated \writestatus\m!TABLE {no auto width in (\number#1,\number#2)\space\the\wd\scratchbox/\the\hsize}% \fi\fi \fi \fi \fi \setbox2\null \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox \box2 \egroup} \long\def\dohandleTBLcellBC#1#2#3[#4]#5% {\setbox\scratchbox\hbox {\setupTBLcell{#2}{#3}% \localframed [\@@tbl\@@tbl] [#4,#1,\c!frame=\v!off,\c!background=] {\bTBLCELL#5\eTBLCELL}}% \setbox2\null \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox \ifautoTBLrowspan \scratchcounter\numexpr\tblrow+\plusone\relax \doiftblrow\scratchcounter\tblcol {\scratchdimen\gettblhei\scratchcounter\relax % moved inside test \ifnum\gettblrow\scratchcounter\tblcol>\plusone \ifdim\ht\scratchbox>\scratchdimen \scratchdimen-\scratchdimen \advance\scratchdimen -\ht\scratchbox \ht2\scratchdimen \fi \fi}% \fi \box2 } \long\def\dohandleTBLcellB#1#2[#3]#4% {\scratchdimen\gettblaut\tblcol\relax \ifdim\scratchdimen>\zeropoint\relax \let\tblwidthkey\c!width \edef\tblwidth{\the\scratchdimen}% \else \scratchdimen\gettblwid\tblcol\relax \ifdim\scratchdimen>\zeropoint\relax \ifnum\gettblcol{#1}{#2}=\maximumcol\relax \scratchdimen\hsize \fi \let\tblwidthkey\c!width \edef\tblwidth{\the\scratchdimen}% \else \let\tblwidthkey\s!unknown \let\tblwidth\zeropoint \fi \fi \dohandleTBLcellBC{\tblwidthkey=\tblwidth}{#1}{#2}[#3]{\TBLcharalign{#2}{#4}}} \long\def\dohandleTBLcellC {\dohandleTBLcellBC{}} \long\def\dohandleTBLcellD#1#2[#3]#4% {\setupTBLcell{#1}{#2}% \bgroup \localframed [\@@tbl\@@tbl] [#3,\c!width=\widthTBL,\c!background=,\c!frame=\v!off]% 25% faster {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}% \egroup} \long\def\dohandleTBLcellE#1#2[#3]#4% {\setupTBLcell{#1}{#2}% \getparameters[\@@tbl\@@tbl][#3]% to get the color right, the way we \color % handle color here prevents interference due to whatsit nodes [\tbltblcolor] % as well as permits local colors to take precedence {\ifdim\heightTBL=\zeropoint\relax % case: nc=maxcolumns \localframed [\@@tbl\@@tbl] [\c!color=,\c!width=\widthTBL] {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}% \else \localframed [\@@tbl\@@tbl] [\c!color=,\c!width=\widthTBL,\c!height=\heightTBL] {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}% \fi}% \hskip\gettbldis{#2}} \setupTABLE [\c!frameoffset=.5\linewidth, \c!backgroundoffset=\v!frame, \c!framecolor=\s!black, \c!color=, \c!style=, \c!headstyle=\v!bold, \c!headcolor=, \c!strut=\v!yes, \c!autostrut=\v!no, \c!aligncharacter=\v!no, \c!alignmentcharacter={,}, \c!option=, % \v!stretch \c!header=, \c!spaceinbetween=, \c!maxwidth=8em, \c!textwidth=\hsize, \c!split=\v!auto, \c!splitoffset=0pt, \c!distance=\zeropoint, % individual column \c!columndistance=\zeropoint, % each column (whole table) \c!leftmargindistance=\zeropoint, % whole table \c!rightmargindistance=\zeropoint,% whole table \c!left=, \c!right=, \c!splitmethod=a] %D We have already prepared the previous macros for nesting, %D so we only have to pop in the right ones: %D New: \def\pushTBLparameters {\globalpushmacro\TBLlevel \ifcase\tblpass % we're just after \bTABLE \else\ifnum\TBLlevel>\zerocount \doglobal\increment\TBLlevel\relax \fi\fi} \def\popTBLparameters {\globalpopmacro\TBLlevel} \def\pushTBL {\ifnum\TBLlevel=\zerocount \global\advance\currenttbl\plusone \fi \doglobal\increment\TBLlevel\relax \ifnum\TBLlevel>\plusone \resetallTABLEparameters % we need a proper count push/pop \xdef\savedtblrow{\the\tblrow}\globalpushmacro\savedtblrow \xdef\savedtblcol{\the\tblcol}\globalpushmacro\savedtblcol \else \global\intabletrue \fi} \def\popTBL {\ifnum\TBLlevel>\plusone \globalpopmacro\savedtblrow\global\tblrow\savedtblrow \globalpopmacro\savedtblcol\global\tblcol\savedtblcol \else \global\intablefalse \fi \doglobal\decrement\TBLlevel\relax} % \bgroup % \setupTABLE[column][1][aligncharacter=yes, alignmentcharacter={,}] % \bTABLE % \bTR \bTD 1,2 \eTD \bTD 2 \eTD \eTR % \bTR \bTD 11,2 \eTD \bTD % {\setupTABLE[column][1][aligncharacter=yes, alignmentcharacter={,}] % \bTABLE % \bTR \bTD 1,2 \eTD \bTD 2 \eTD \eTR % \bTR \bTD 11,22 \eTD \bTD 2 \eTD \eTR % \bTR \bTD 11,2 \eTD \bTD 2 \eTD \eTR \eTABLE} \eTD \eTR % \bTR \bTD 11,22 \eTD \bTD 2 \eTD \eTR % \eTABLE % \egroup \newconditional\resetTABLEmode \settrue\resetTABLEmode \def\resetallTABLEparameters% moet genest wel werken {\ifnum\TBLlevel>\plusone % in ieder geval \ifconditional\resetTABLEmode \presetlocalframed % breedte hoogte diepte offset [\@@tbl\@@tbl]% % achtergrond, achtergrondraster, achtergrondkleur % not ok yet \setupTABLE [% \c!frameoffset=.5\linewidth, \c!backgroundoffset=\v!frame, \c!framecolor=\s!black, \c!width=fit, \c!height=fit, \c!autowidth=\v!yes, % \c!rulethickness=\linewidth, % \c!strut=\v!no, \c!strut=\v!yes, % needed for mathml, but ... maybe we need another resetTABLEmode \c!autostrut=\v!no, \c!color=, \c!style=, \c!headstyle=, \c!headcolor=, \c!aligncharacter=\v!no, \c!alignmentcharacter={,}, \c!maxwidth=8em]% \else \setupTABLE [\c!width=\v!fit, \c!height=\v!fit]% \fi \fi} %D Spacing: % % \starttabulate % \NC text \NC text \NC \NR % \TB[small] % \NC text \NC text \NC \NR % \TB[4*big] % \NC text \NC text \NC \NR % \stoptabulate % % \starttable[|||] % \VL text \VL text \VL \AR % \TB[small] % \VL text \VL text \VL \AR % \TB[4*big] % \VL text \VL text \VL \AR % \stoptable \def\complexTableTB[#1]{\TABLEnoalign{\blank[#1]}} \def\simpleTableTB {\TABLEnoalign{\blank}} \def\TabulateTB {\complexorsimpleTable{TB}} \def\doTableinterline% #1 {\ifnum\currentTABLEcolumn>\maxTABLEcolumn \chuckTABLEautorow \else\ifnum\currentTABLEcolumn=\zerocount \TABLEnoalign {\globalletempty\checkTABLEautorow \globalletempty\chuckTABLEautorow}% \else \setTABLEerror\TABLEmissingcolumn \handleTABLEerror \fi\fi \complexorsimpleTable} % {#1} \def\TableHL{\doTableinterline{HL}} \def\TableTB{\doTableinterline{TB}} \appendtoks\let\TB\TableTB \to\everytable \appendtoks\let\TB\TabulateTB\to\everytabulate % strange place \appendtoks \chardef\recodeverbatimmode\plustwo \to \everytable % new (for Olivier Turlier) % % \defineTABLEsetup [xx] [foregroundcolor=red] % % \bTABLE % \bTR \bTD oeps \eTD \bTD oeps \eTD \eTR % \bTR \bTDs[xx] oeps \eTDs \bTD oeps \eTD \eTR % \bTRs[xx] \bTD oeps \eTD \bTD oeps \eTD \eTRs % \eTABLE \def\defineTABLEsetup {\dodoubleargument\dodefineTABLEsetup} \def\dodefineTABLEsetup[#1][#2]% {\setvalue{\@@tbl:set:#1}{#2}} \long\def\bTDs[#1]#2\eTDs {\doifdefinedelse{\@@tbl:set:#1} {\@EA\@EA\@EA\bTD\@EA\@EA\@EA[\csname\@@tbl:set:#1\endcsname]#2\eTD} {\bTD[]#2\eTD}} \long\def\bTRs[#1]#2\eTRs {\doifdefinedelse{\@@tbl:set:#1} {\@EA\@EA\@EA\bTR\@EA\@EA\@EA[\csname\@@tbl:set:#1\endcsname]#2\eTR} {\bTR[]#2\eTR}} \protect \endinput % todo: mode: first|next (of niets) context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mmc.mkii0000644000175000017500000011651711754241457024306 0ustar norbertnorbert%D \module %D [ file=xtag-mmc, %D version=2000.12.20, %D title=\CONTEXT\ XML Macros, %D subtitle=Content MathML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Content MathML} % this is the first, experimental, shabby implementation, as % always, the third will do -) % okay, now this is the second one, with a more kid based % approach, which we needed for proper nesting, but the % code is still too ugly \startXMLmapping[mml] \unprotect \def\MMLccomma{{,}} \def\getmmlarguments#1#2#3#4#5#6% {class} {defaults} mmlargs {\getXMLarguments{#1}{#2 #5}}% \def\doifMMLoperatorelse#1#2#3% temp hack {\pushmacro\xmlrent \let\xmlrent\firstofoneargument \edef\mmloperator{#1}% \@EA\unspaceargument\mmloperator\to\mmloperator \popmacro\xmlrent \doifXMLentityelse\mmloperator {\doifdefinedelse{doMMLcFN\mmloperator}{#2}{#3}} {#3}} \remapXMLsequence [ci] [CPA] \MMLcCI \remapXMLsequence [cn] [CPA] \MMLcCN \remapXMLsequence [csymbol] [CPA] \MMLcCSYMBOL \setupMMLappearance[polar][\c!alternative=\v!a] % a|b|c \def\MMLcpolar#1% {\doifdefinedelse{MMLcdopolar\@@MMLpolaralternative} {\getvalue{MMLcdopolar\@@MMLpolaralternative}{#1}} {#1}} \def\MMLcdopolara#1% {\def\MMLcsep{\MMLccomma}\getXMLentity{polar}\left(#1\right)} \def\MMLcdopolarb#1% {\def\MMLcsep##1\empty% {\getXMLentity{exponentiale}^{##1\mskip2mu\getXMLentity{imaginaryi}}}#1} \def\MMLcdopolarc#1% {\def\MMLcsep##1\empty% {\getXMLentity{exp}\left(##1\mskip2mu\getXMLentity{imaginaryi}\right)}#1} \def\MMLccartesian#1% {\def\MMLcsep{+}#1\getXMLentity{imaginaryi}} % float will be obsolete, an is replace by e-notation \setupMMLappearance[float][\c!symbol=\v!no] % \v!yes|dot \def\MMLcfloat#1% {\doifelse\@@MMLfloatsymbol\v!no {{\rm#1}} % make sure that e shows up ok {% we should ignore \entities ! \beforesplitstring#1\at e\to\first \aftersplitstring #1\at e\to\last \ifx\first\empty #1\else \ifx\last \empty #1\else \first \doifelse\@@MMLfloatsymbol{dot}\cdot\times 10^{\last}% \fi\fi}} % we now have: \setupMMLappearance[enotation][\c!symbol=\v!no] % \v!yes|dot \def\MMLcenotation#1% {\doifelse\@@MMLenotationsymbol\v!no {\def\MMLcsep {\unskip{\rm e}\ignorespaces}} {\def\MMLcsep##1\empty{\doifelse\@@MMLenotationsymbol{dot}\cdot\times10^{##1}}}% #1\empty} \def\MMLcCI#1% #2% can be sped up with \doifundefined ... {\getXMLarguments{ci}{type="" #1}% \doifXMLparelse{ci}{type} {\processaction [\XMLpar{ci}{type}{}] [ set=>\let\next\MMLcCIset, vector=>\let\next\MMLcCIvector, matrix=>\let\next\MMLcCImatrix, function=>\let\next\MMLcCIfunction, complex-cartesian=>\let\next\MMLccartesian, complex=>\let\next\MMLccartesian, complex-polar=>\let\next\MMLcpolar, polar=>\let\next\MMLcpolar, fn=>\let\next\MMLcCIfunction, unknown=>\let\next\firstofoneargument]} % integer constant real float {\let\next\firstofoneargument}% \next} \def\MMLcCIset#1% {{\bbd#1}} \def\widevec#1% {\vbox{\mathsurround\zeropoint\ialign{##\crcr \rightarrowfill\crcr\noalign{\nointerlineskip}% $\hfil\displaystyle{#1}\hfil$\crcr}}} \def\MMLcCIvector#1% {\widevec{#1}} \def\MMLcCImatrix#1% {{\bi#1}} \def\MMLcCIfunction#1% {\doifMMLoperatorelse{#1}\MMLcCIdefault\MMLcFNdefault{}{#1}} \def\MMLcCIdefault#1#2% #1=dummy {#2%\!% \getXMLentity{NegThinSpace}% looks bad in A(x) \doifnextcharelse\xmlr {\encapsulatenextXMLRelements{\left(}{\MMLccomma}{\right)}} {}} % \def\MMLcFNdefault#1#2% neg space needed because of \left % {#2\!% \getXMLentity{NegThinSpace}% % \MMLcreset\encapsulatenextXMLRelements{\left(}{\MMLccomma}{\right)}} \def\MMLcCN#1% #2% can be sped up with \doifundefined ... {\getXMLarguments{cn}{type="" #1}% \doifXMLparelse{cn}{type} {\processaction [\XMLpar{cn}{type}{}] [ integer=>\let\next\MMLcCNinteger, logical=>\let\next\MMLcCNlogical, rational=>\let\next\MMLcCNrational, complex-cartesian=>\let\next\MMLccartesian, complex=>\let\next\MMLccartesian, complex-polar=>\let\next\MMLcpolar, polar=>\let\next\MMLcpolar, e-notation=>\let\next\MMLcenotation, % new float=>\let\next\MMLcfloat, % obsolete real=>\let\next\MMLcfloat, % ? unknown=>\let\next\firstofoneargument]} {\let\next\firstofoneargument} \next} \setupMMLappearance[base][\c!symbol=\v!numbers] % cijfers|letters|tekst|nee \def\MMLcCNinteger#1% {\doifXMLparelse{cn}{base} {\def\MMLcCNbase{\XMLpar{cn}{base}{}}% \doifelse\@@MMLbasesymbol\v!no {\MMLcCNbasedata{#1}} {\MMLcCNbasedata{#1}_{\hbox{$\rm\scriptscriptstyle \processaction [\@@MMLbasesymbol] [\v!characters=>\MMLcCNbasestring BODH, \v!text=>\MMLcCNbasestring{BIN}{OCT}{DEC}{HEX}, \s!unknown=>\MMLcCNbase]$}}}} {#1}} \def\MMLcCNbasedata#1% {\ifnum\MMLcCNbase>10{\rm#1}\else#1\fi} \def\MMLcCNbasestring#1#2#3#4% {\ifnum\MMLcCNbase= 2 #1\else \ifnum\MMLcCNbase= 8 #2\else \ifnum\MMLcCNbase=10 #3\else \ifnum\MMLcCNbase=16 #4\else \MMLcCNbase \fi\fi\fi\fi} \def\MMLcCNlogical#1% {{\rm#1}} \def\MMLcCNrational#1% {\ConvertConstantAfter\doifinstringelse{sep}{#1} {\doMMLcCNrational#1\empty} {#1}} \def\doMMLcCNrational#1\xmlr#2#3#4#5\empty {\hbox{$\frac{#1}{#5}$}} \def\MMLcCSYMBOL#1#2% TO DO {\getXMLarguments{csymbol}{encoding="text" #1}% \doifelse{\XMLpar{csymbol}{encoding}{}}{text} {{\rm#2}}{#2}} %%% basic content elements \remapXMLsequence [apply] [CPA] \MMLcAPPLY \newcount\@MMLlevel \def\MMLcreset{\@MMLlevel=0 } \let\MMLctempresetlist\empty \def\setMMLcreset{\edef\MMLctempresetlist} \def\MMLcmainresetlist% {times/,divide/,power/,% lt/,gt/,eq/,leq/,geq/,% in/,inverse/,% fn,% floor/,ceiling/,% mean/,% selector/,% abs/,int/,limit/,sum/,product/,% outerproduct/,innerproduct/,scalarproduct/} \def\MMLcfunctionlist {sin/,arcsin/,sinh/,arcsinh/,% cos/,arccos/,cosh/,arccosh/,% tan/,arctan/,tanh/,arctanh/,% cot/,arccot/,coth/,arccoth/,% csc/,arccsc/,csch/,arccsch/,% sec/,arcsec/,sech/,arcsech/,% ln/,exp/,log/,% abs/,int/,limit/,sum/,product/,% fn} % ? \def\MMLcconstructlist {diff/,partialdiff/,root/} % apply goes wrong on 1/2 * (a_2 + b_3) % better: no () here but explicitly when needed, which is in % less cases \def\MMLcAPPLY#1#2% {\mathinner{\begingroup % new, else 1/2(1+2) problem / inner: ask taco \pushmacro\xmlr \@EA\@EA\@EA\doifXMLRchild\@EA\@EA\@EA{\@EA\MMLcmainresetlist\@EA,\MMLctempresetlist}{#2} {\MMLcreset}% \ifcase\@MMLlevel \getXMLarguments{apply}{open="" close="" #1}% \else \getXMLarguments{apply}{open="(" close=")" #1}% \fi \doifXMLparelse{apply}{open}{\left\XMLpar{apply}{open}{}}{}% \advance\@MMLlevel+1 \begingroup \let\MMLctempresetlist\empty \let\xmlr\naturalxmlr % beter een \pushmacro\xmlr #2\empty \endgroup % ook level push \advance\@MMLlevel-1 \doifXMLparelse{apply}{close}{\right\XMLpar{apply}{close}{}}{}% \popmacro\xmlr \endgroup}} \remapXMLsequence [reln] [CPA] \MMLcRELN \def\MMLcRELN% {\writestatus{XML}{MathML element "reln" is obsolete}\MMLcAPPLY} \remapXMLsequence [fn] [CPA] \MMLcFN \def\MMLcFN#1#2% neg space needed because of \left {\doifXMLRchildelse{ci}{#2} {\collectXMLRchild{ci}{#2}% \@EA\doifMMLoperatorelse\@EA{\the\XMLRtoks} \MMLcFNoperator\MMLcFNdefault} {\MMLcFNdefault}% {#1}{#2}} \def\MMLcFNdefault#1#2% neg space needed because of \left {#2\!% \getXMLentity{NegThinSpace}% \MMLcreset\encapsulatenextXMLRelements{\left(}{\MMLccomma}{\right)}} % special function handlers \def\MMLcFNoperator {\getvalue{doMMLcFN\mmloperator}} % \def\doMMLcFNplusminus#1#2#3\empty % {\countXMLRchildren{#3}% % \ifcase\nofXMLRchildren\or % #2#3% % \else % suboptimal for instance under root % \encapsulateXMLR{\left(}{#2}{\right)}{\MMLcreset#3}% % \fi} \def\doMMLcFNplusminus#1#2#3\empty {\countXMLRchildren{#3}% \ifcase\nofXMLRchildren\or \def\next{#2#3}% \else \def\next {\doifnextcharelse\xmlr {\encapsulateXMLR{\left(}{#2}{\right)}{\MMLcreset#3}}% {\encapsulateXMLR{}{#2}{}{\MMLcreset#3}}}% \fi \next} \let\doMMLcFNminusplus\doMMLcFNplusminus \def\doMMLcFNcontinued#1#2#3\empty {#3\getXMLentity{continued}} % so far for the special handlers \remapXMLsequence [interval] [CPA] \MMLcINTERVAL \def\MMLcINTERVAL#1#2% {\withnexttwoXMLRelements {\getXMLarguments{interval}{closure="closed" #1}% \processaction [\XMLpar{interval}{closure}{closed}] [ closed=>{[\firstXMLRelement,\secondXMLRelement]}, open-closed=>{(\firstXMLRelement,\secondXMLRelement]}, closed-open=>{[\firstXMLRelement,\secondXMLRelement)}, open=>{(\firstXMLRelement,\secondXMLRelement)}, \s!unknown=>{[\firstXMLRelement,\secondXMLRelement]}]}% #2\empty} \remapXMLsingular [inverse] [CPA] \MMLcINVERSE \def\MMLcINVERSE#1#2% {\withnextXMLRelement {\nextXMLRelement\empty^{-1}% \empty kills MMLcfunction lookahead \withnextXMLRelement {\ifx\nextXMLRelement\empty \else \left[\nextXMLRelement\right]% \fi}}} \remapXMLsingular [sep] [CPA] \MMLcSEP \def\MMLcSEP#1#2{\MMLcsep} \def\MMLcsep{\,} \remapXMLsequence [condition] [CPA] \MMLcCONDITION \def\MMLcCONDITION#1#2% {\pushmacro\MMLcBVAR \doifXMLRchild{bvar}{#2}{\processXMLRchild{bvar}{#2}\mid}% \let\MMLcBVAR\ignoreXMLRelement \processXMLRchildren{#2}% \popmacro\MMLcBVAR} \remapXMLsequence [declare] [CPA] \MMLcDECLARE \setupMMLappearance[declare][\c!state=\v!start] \def\MMLcDECLARE#1#2% {\doif\@@MMLdeclarestate\v!start {\withnextXMLRelement {\getXMLentity{declare}\nextXMLRelement \countXMLRchildren{#2}% \ifnum\nofXMLRchildren>1 \;% \getXMLentity{ThickSpace}% \getXMLentity{as}% \;% \getXMLentity{ThickSpace}% \fi}% #2\empty}} \remapXMLsequence [lambda] [CPA] \MMLcLAMBDA \setupMMLappearance[lambda][\c!alternative=b] \def\MMLcLAMBDA#1#2% {\doifelse\@@MMLlambdaalternative\v!a {\encapsulateXMLR{\getXMLentity{lambda}(}{\MMLccomma}{)}{#2}} {\countXMLRchild{bvar}{#2}% \ifnum\nofXMLRchildren>1 \collectXMLRchild{bvar}{#2}% \encapsulateXMLR{\left(}{\MMLccomma}{\right)}{\the\XMLRtoks}% \else \processXMLRchild{bvar}{#2}% \fi \getXMLentity{mapsto}% \processXMLRchild{apply,reln,ci,cn}{#2}}} \remapXMLsingular [compose] [CPA] \MMLcCOMPOSE \def\MMLcCOMPOSE#1#2#3\empty {\doifMMLfunctionelse{#3} {\encapsulateXMLR{\left(}{\circ}{\right)}{#3}} {\encapsulateXMLR{}{\circ}{}{#3}}} \remapXMLsingular [ident] [CPA] \MMLcIDENT \def\MMLcIDENT#1#2{\getXMLentity{identity}} \remapXMLsingular [domain] [CPA] \MMLcDOMAIN \remapXMLsingular [codomain] [CPA] \MMLcCODOMAIN \def\MMLcDOMAIN #1#2#3\empty {\getXMLentity{domain}(\MMLcreset\processXMLRchildren{#3})} \def\MMLcCODOMAIN#1#2#3\empty {\getXMLentity{codomain}(\MMLcreset\processXMLRchildren{#3})} \remapXMLsingular [image] [CPA] \MMLcIMAGE \def\MMLcIMAGE#1#2% {\withnextXMLRelement{\getXMLentity{image}(\nextXMLRelement)}} \remapXMLsequence [domainofapplication] [CPA] \MMLcDOMAINOFAPPLICATION \def\MMLcDOMAINOFAPPLICATION#1#2{#2} \remapXMLsequence [piecewise] [CPA] \MMLcPIECEWISE \remapXMLsequence [piece] [CPA] \MMLcPIECE \remapXMLsequence [otherwise] [CPA] \MMLcOTHERWISE \setupMMLappearance[piece][\c!separator=] \def\MMLcPIECEWISE#1#2% {\cases{#2}} \def\MMLcPIECEseparator{\doif\@@MMLpieceseparator\v!yes,} \def\MMLcPIECE#1#2% {\withnexttwoXMLRelements {\@EA\XMLRtoks\@EA{\firstXMLRelement\MMLcPIECEseparator\@col@amp@}% \@EA\appendtoks\@EA\mathematics\@EA{\secondXMLRelement}\to\XMLRtoks \the\XMLRtoks\crcr}% #2} \def\MMLcOTHERWISE#1#2% {#2\MMLcPIECEseparator\@col@amp@\mathematics{\getXMLentity{otherwise}}\crcr} %%% arithmic, algebra and logic \remapXMLsingular [quotient] [CPA] \MMLcQUOTIENT \def\MMLcQUOTIENT#1#2% {\withnexttwoXMLRelements{\lfloor\firstXMLRelement/\secondXMLRelement\rfloor}} \remapXMLsingular [factorial] [CPA] \MMLcFACTORIAL \def\MMLcFACTORIAL#1#2% {\withnextXMLRelement{\nextXMLRelement !}} \remapXMLsingular [divide] [CPA] \MMLcDIVIDE \setupMMLappearance [divide] [\c!level=\!!maxcard] \def\MMLcDIVIDE#1#2% {\withnexttwoXMLRelements {\increment\MMLcDIVIDElevel \ifnum\MMLcDIVIDElevel>\@@MMLdividelevel\space \firstXMLRelement/\secondXMLRelement \else \frac{\MMLcreset\firstXMLRelement}{\MMLcreset\secondXMLRelement}% \fi \decrement\MMLcDIVIDElevel}} \remapXMLsingular [min] [CPA] \MMLcMIN \remapXMLsingular [max] [CPA] \MMLcMAX \def\MMLcMIN#1#2#3\empty {\encapsulateXMLR {\min\doifXMLRchild{bvar}{#3}{_{\processXMLRchild{bvar}{#3}}}\left\{} {\MMLccomma}{\right\}}{#3}} \def\MMLcMAX#1#2#3\empty {\encapsulateXMLR {\max\doifXMLRchild{bvar}{#3}{_{\processXMLRchild{bvar}{#3}}}\left\{} {\MMLccomma}{\right\}}{#3}} \remapXMLsingular [minus] [CPA] \MMLcMINUS \remapXMLsingular [plus] [CPA] \MMLcPLUS \setupMMLappearance[sign][\c!reduction=\v!yes] \def\MMLcMINUS % expandafter needed ? {\doifelse\@@MMLsignreduction\v!yes {\expandafter\MMLcMINUSyes}{\expandafter\MMLcMINUSno}} \def\MMLcPLUS % expandafter needed ? {\doifelse\@@MMLsignreduction\v!yes {\expandafter\MMLcPLUSyes}{\expandafter\MMLcPLUSno}} \def\MMLcMINUSno#1#2#3\empty {\countXMLRchildren{#3}% \encapsulateXMLR{\ifcase\nofXMLRchildren\or-\fi}{-}{}{#3}} \def\MMLcPLUSno#1#2#3\empty {\countXMLRchildren{#3}% \encapsulateXMLR{\ifcase\nofXMLRchildren\or+\fi}{+}{}{#3}} \def\MMLcMINUSyes#1#2#3\empty {\setMMLcreset{\MMLcfunctionlist}% \countXMLRchildren{#3}% \encapsulateXMLR{\ifcase\nofXMLRchildren\or-\fi}{-}{}{#3}} \def\MMLcPLUSyes#1#2#3\empty {\setMMLcreset{plus/,minus/,\MMLcfunctionlist,\MMLcconstructlist}% \encapsulatenextXMLRelements {} {\doifXMLRchildelse{apply}{\nextXMLRelement}% {\collectXMLRchild{apply}{\nextXMLRelement}% \doifXMLRchildelse{minus/}{\the\XMLRtoks} {\countXMLRchildren{\the\XMLRtoks} \ifnum\nofXMLRchildren>2 +\else\fi}{+}} {+}} {} {#3\empty}} \remapXMLsingular [power] [CPA] \MMLcPOWER \setupMMLappearance[power][\c!reduction=\v!yes] \let\MMLpowerelement\empty \def\MMLcPOWER#1#2% {\withnexttwoXMLRelements {\doifXMLRchildelse{apply}{\firstXMLRelement} {\doifelse\@@MMLpowerreduction\v!yes {\collectXMLRchild{apply}{\firstXMLRelement}% \@EA\doifXMLRchildelse\@EA{\MMLcfunctionlist}{\the\XMLRtoks} {\let\MMLpowerelement\secondXMLRelement \MMLcreset\firstXMLRelement\empty} {\left(\MMLcreset\firstXMLRelement\empty\right)^{\MMLcreset\secondXMLRelement}}} {\left(\MMLcreset\firstXMLRelement\empty\right)^{\MMLcreset\secondXMLRelement}}} {\firstXMLRelement^{\MMLcreset\secondXMLRelement}}}} \remapXMLsingular [rem] [CPA] \MMLcREM \def\MMLcREM#1#2% {\withnexttwoXMLRelements {\firstXMLRelement\getXMLentity{mod}\secondXMLRelement}} \remapXMLsingular [times] [CPA] \MMLcTIMES \setupMMLappearance[times][\c!symbol=\v!no] % \setupMMLappearance[times][\c!auto=\v!yes] % new, auto catches cn cn cn \def\MMLcTIMES#1#2#3\empty {\setMMLcreset{\MMLcfunctionlist,\MMLcconstructlist}% \doifelse\@@MMLtimesauto\v!no {\let\@@MMLtimes@@symbol\@@MMLtimessymbol} {\doifelseXMLRneighbors{cn}{#3} {\let\@@MMLtimes@@symbol\v!yes} {\let\@@MMLtimes@@symbol\@@MMLtimessymbol}}% \doifelse\@@MMLtimes@@symbol\v!yes {\encapsulateXMLR{}{\times}{}{#3\empty}} {\doifelse\@@MMLtimes@@symbol{dot} {\encapsulateXMLR{}{\cdot}{}{#3\empty}} {#3\empty}}} \remapXMLsingular [root] [CPA] \MMLcROOT \setupMMLappearance[root][\c!symbol=\v!yes] \def\MMLcROOT#1#2#3\empty {\doifXMLRchildelse{degree}{#3}\donetrue\donefalse \doif\@@MMLrootsymbol\v!no\donefalse \ifdone \root\processXMLRchild{degree}{#3}\of {\let\MMLcDEGREE\ignoreXMLRelement \MMLcreset\processXMLRchildren{#3}}% \else \sqrt {\MMLcreset\processXMLRchildren{#3}}% \fi} \remapXMLsingular [gcd] [CPA] \MMLcGCD \def\MMLcGCD#1#2#3\empty{\encapsulateXMLR{\gcd(}{\MMLccomma}{)}{#3}} \remapXMLsingular [and] [CPA] \MMLcAND \remapXMLsingular [or] [CPA] \MMLcOR \remapXMLsingular [xor] [CPA] \MMLcXOR \remapXMLsingular [implies] [CPA] \MMLcIMPLIES \def\MMLcAND #1#2#3\empty{\encapsulateXMLR{}{\getXMLentity{and}}{}{#3}} \def\MMLcOR #1#2#3\empty{\encapsulateXMLR{}{\getXMLentity{or}}{}{#3}} \def\MMLcXOR #1#2#3\empty{\encapsulateXMLR{}{\getXMLentity{xor}}{}{#3}} \def\MMLcIMPLIES#1#2#3\empty{\encapsulateXMLR{}{\getXMLentity{implies}}{}{#3}} \remapXMLsingular [not] [CPA] \MMLcNOT \def\MMLcNOT#1#2#3\empty{\getXMLentity{not}\processXMLRchildren{#3}} \remapXMLsingular [forall] [CPA] \MMLcFORALL \remapXMLsingular [exists] [CPA] \MMLcEXISTS \def\MMLcFORALL% {\getXMLentity{forall}% \!% \getXMLentity{NegThinSpace}% \MMLcFORALLandEXISTS} \def\MMLcEXISTS% {\getXMLentity{exists}% \MMLcFORALLandEXISTS} \def\MMLcFORALLandEXISTS#1#2#3\empty {\MMLcreset _{\encapsulateXMLRchildren{bvar}{}{\MMLccomma}{}{#3}}% \doifXMLRchildelse{condition}{#3} {\;% \getXMLentity{ThickSpace}% \processXMLRchild{condition}{#3} \doifXMLRchildelse{apply,reln,ci,cn}{#3} {\countXMLRchild{apply,reln,ci,cn}{#3}% \ifcase\nofXMLRchildren\or % == snelle volgende \encapsulateXMLRchildren{apply,reln,ci,cn} {\left\vert}% {} {\right.} {#3\empty}% \else % special case \pushmacro\MMLcCONDITION \let\MMLcCONDITION\gobbletwoarguments \collectbetweenXMLRchild{apply,reln,ci,cn}{\hfill\crcr}{#3}% \left\vert\matrix{\the\XMLRtoks}\right.% \popmacro\MMLcCONDITION \fi} {}} {:\processXMLRchild{apply,reln,ci,cn}{#3\empty}}} \remapXMLsingular [abs] [CPA] \MMLcABS \def\MMLcABS#1#2#3\empty {\left\vert\MMLcreset\processXMLRchildren{#3}\right\vert} \remapXMLsingular [conjugate] [CPA] \MMLcCONJUGATE \def\MMLcCONJUGATE#1#2#3\empty% {\overline{\MMLcreset\processXMLRchildren{#3}}} \remapXMLsingular [arg] [CPA] \MMLcARG \def\MMLcARG#1#2#3\empty {\getXMLentity{arg}(\MMLcreset\processXMLRchildren{#3})} \remapXMLsingular [real] [CPA] \MMLcREAL \remapXMLsingular [imaginary] [CPA] \MMLcIMAGINARY \def\MMLcREAL#1#2#3\empty {\getXMLentity{real}(\MMLcreset\processXMLRchildren{#3})} \def\MMLcIMAGINARY#1#2#3\empty {\getXMLentity{imaginary}(\MMLcreset\processXMLRchildren{#3})} \remapXMLsingular [lcm] [CPA] \MMLcLCM \def\MMLcLCM#1#2#3\empty {\encapsulateXMLR{\getXMLentity{lcm}(}{\MMLccomma}{)}{#3}} \remapXMLsingular [floor] [CPA] \MMLcFLOOR \remapXMLsingular [ceiling] [CPA] \MMLcCEILING \def\MMLcFLOOR#1#2#3\empty {\getXMLentity{lfloor}\processXMLRchildren{#3}\getXMLentity{rfloor}} \def\MMLcCEILING#1#2#3\empty {\getXMLentity{lceiling}\processXMLRchildren{#3}\getXMLentity{rceiling}} %%% relations \remapXMLsingular [eq] [CPA] \MMLcEQ \remapXMLsingular [neq] [CPA] \MMLcNEQ \remapXMLsingular [gt] [CPA] \MMLcGT \remapXMLsingular [lt] [CPA] \MMLcLT \remapXMLsingular [geq] [CPA] \MMLcGEQ \remapXMLsingular [leq] [CPA] \MMLcLEQ \remapXMLsingular [equivalent] [CPA] \MMLcEQUIVALENT \remapXMLsingular [approx] [CPA] \MMLcAPPROX \remapXMLsingular [factorof] [CPA] \MMLcFACTOROF \setupMMLappearance[relation][\c!align=\v!no] \def\noMMLcrelation#1#2% {\encapsulatenextXMLRelements{}{#1}{}#2\empty} \def\lastMMLcrelation#1#2% {\countXMLRchildren{#2}% \rawcollectbetweenXMLR {\advance\nofXMLRchildren -1 \ifnum\nofXMLRchildren>1 \appendtoks\@col@amp@#1\crcr\to\XMLRtoks \else \appendtoks\@col@amp@#1\to\XMLRtoks \fi} {#2}% \eqalign{\the\XMLRtoks\crcr}} \def\firstMMLcrelation#1#2% {\nofXMLRchildren=0 \rawcollectbetweenXMLR {\advance\nofXMLRchildren 1 \ifnum\nofXMLRchildren=1 \appendtoks\@col@amp@#1\to\XMLRtoks \else \appendtoks\crcr\@col@amp@#1\to\XMLRtoks \fi} {#2}% \eqalign{\the\XMLRtoks\crcr}} \def\leftMMLcrelation#1#2% {\collectbetweenXMLR{\@col@amp@#1\crcr}{#2}% \eqalign{\the\XMLRtoks}} \def\rightMMLcrelation#1#2% {\collectbetweenXMLR{\crcr#1{}\@col@amp@}{#2}% watch the {} \prependtoks\@col@amp@\to\XMLRtoks \eqalign{\the\XMLRtoks\crcr}} \def\MMLcrelation#1#2\empty {\MMLcreset \processaction [\@@MMLrelationalign] [\v!last=>\let\next\lastMMLcrelation , \v!first=>\let\next\firstMMLcrelation, \v!yes=>\let\next\leftMMLcrelation , \v!left=>\let\next\leftMMLcrelation , \v!right=>\let\next\rightMMLcrelation, \s!default=>\let\next\noMMLcrelation , \s!unknown=>\let\next\noMMLcrelation ] \next{#1}{#2}} \def\MMLcEQ #1#2{\MMLcrelation=} \def\MMLcNEQ #1#2{\MMLcrelation\neq} \def\MMLcGT #1#2{\MMLcrelation>} \def\MMLcLT #1#2{\MMLcrelation<} \def\MMLcGEQ #1#2{\MMLcrelation\geq} \def\MMLcLEQ #1#2{\MMLcrelation\leq} \def\MMLcEQUIVALENT#1#2{\MMLcrelation\equiv} \def\MMLcAPPROX #1#2{\MMLcrelation\approx} \def\MMLcFACTOROF #1#2{\MMLcrelation\mid} %%% introduced when making an example for Thorsten Bahne: \remapXMLsingular [becomes] [CPA] \MMLcBECOMES \def\MMLcBECOMES#1#2{\MMLcrelation{:=}} \addtocommalist{becomes/}\MMLcmainresetlist %%% calculus and vector calculus \setupMMLappearance[int][\c!location=\v!top] \remapXMLsingular [int] [CPA] \MMLcINT \def\doMMLlimits#1% {\doifelsevalue{@@MML#1\c!location}\v!top\limits\nolimits} \def\MMLcINT#1#2#3\empty {\pushmacro\xmlr \MMLcreset \doifXMLRchildelse{domainofapplication}{#3} {\int\doMMLlimits{int}_{\processXMLRchild{domainofapplication}{#3}}} {\doifXMLRchildelse{condition}{#3} {\int\doMMLlimits{int}_{\processXMLRchild{condition}{#3}}} {\doifXMLRchildelse{lowlimit}{#3} {\int\doMMLlimits{int} _{\processXMLRchild{lowlimit}{#3}} ^{\processXMLRchild {uplimit}{#3}}} {\int}}}% \doifXMLRchildelse{apply}{#3} {\doifMMLfunctionelse{#3}% {\MMLcreset % TEST \processXMLRchild{apply}{#3}} {\left(\MMLcreset % TEST \processXMLRchild{apply}{#3}\right)}} {\MMLcreset % TEST \processXMLRchild{ci}{#3}}% \doifXMLRchild{bvar}{#3} {\,% \getXMLentity{ThinSpace}% {\rm\getXMLentity{mathematicald}}\processXMLRchild{bvar}{#3}}% \popmacro\xmlr} \remapXMLsingular [diff] [CPA] \MMLcDIFF \setupMMLappearance[diff][\c!location=\v!top] \def\MMLcDIFF#1#2#3\empty {\pushmacro\xmlr \MMLcreset \doifXMLRchildelse{bvar}{#3} {\frac {{\rm \getXMLentity{mathematicald}}% \collectXMLRchild{bvar}{#3}% \let\MMLcDEGREE\superMMLcelement \expanded{\processXMLRchild{degree}{\the\XMLRtoks}}% \doif\@@MMLdifflocation\v!top {\doifXMLRchildelse{ci}{#3} {\processXMLRchild{ci}{#3}} {\doifMMLfunctionelse{#3} {\MMLcreset\processXMLRchild{apply}{#3}} {\left(\MMLcreset\processXMLRchild{apply}{#3}\right)}}}} {\let\MMLcDEGREE\superMMLcelement \begingroup\rm\getXMLentity{mathematicald}\endgroup \processXMLRchild{bvar}{#3}}% \doifnot\@@MMLdifflocation\v!top {\left(\MMLcreset\processXMLRchild{apply,ci}{#3}\right)}} {\processXMLRchildren{#3}^\prime}% \popmacro\xmlr} \remapXMLsingular [partialdiff] [CPA] \MMLcPARTIALDIFF \def\MMLcBVARpartialdiff#1#2% {\getXMLentity{differentiald}\processXMLRchild{apply,reln,ci,cn}{#2} \doifXMLRchild{degree}{#2}{^{\processXMLRchild{degree}{#2}}}} \def\MMLcPARTIALDIFF#1#2#3\empty {\pushmacro\xmlr \doifXMLRchildelse{list}{#3} {\getXMLentity{capitaldifferentiald}_{\encapsulateXMLRchild{list}{}{\MMLccomma}{}{#3}}% \processXMLRchild{apply,reln,ci,cn}{#3}} {\countXMLRchild{bvar}{#3}% \ifnum\nofXMLRchildren>0 \pushmacro\MMLcDEGREE \pushmacro\MMLcBVAR \frac {\doifXMLRchildelse{degree}{#3} {\collectXMLRchild{degree}{#3}} {\collectXMLRchild{bvar}{#3}% \expanded{\collectXMLRchild{degree}{\the\XMLRtoks}}}% \getXMLentity{differentiald}^{\encapsulateXMLR{}{+}{}{\the\XMLRtoks}}% \let\MMLcDEGREE\gobbletwoarguments \doifMMLfunctionelse{#3}{\MMLcreset}{}% \processXMLRchild{apply,reln,ci,cn}{#3}} {\let\MMLcBVAR\MMLcBVARpartialdiff \processXMLRchild{bvar}{#3}}% \popmacro\MMLcBVAR \popmacro\MMLcDEGREE \else \processXMLRchild{apply,reln,ci,cn}{#3}% \fi}% \popmacro\xmlr} \def\doifMMLfunctionelse#1#2#3% {\collectXMLRchild{apply}{#1}% \doifXMLRchildelse{fn}{\the\XMLRtoks#1} {#2} {\doifXMLRchildelse{ci}{\the\XMLRtoks#1} {\pushmacro\xmlr \getXMLarguments{dummy}{type=""}% \def\xmlr{\getmmlarguments{dummy}{}}% \the\XMLRtoks % what if more than one ? \popmacro\xmlr \doif{\XMLpar{dummy}{type}{}}{fn}{#2}{#3}} {#2}}} \def\subMMLcelement #1#2{_{#2}} \def\superMMLcelement#1#2{^{#2}} \remapXMLsequence [lowlimit][CPA] \MMLcLOWLIMIT \remapXMLsequence [uplimit] [CPA] \MMLcUPLIMIT \remapXMLsequence [bvar] [CPA] \MMLcBVAR \remapXMLsequence [degree] [CPA] \MMLcDEGREE \def\MMLcLOWLIMIT#1#2{#2} \def\MMLcUPLIMIT #1#2{#2} \def\MMLcBVAR #1#2{#2} \def\MMLcDEGREE #1#2{#2} \remapXMLsingular [divergence] [CPA] \MMLcDIVERGENCE \remapXMLsingular [grad] [CPA] \MMLcGRAD \remapXMLsingular [curl] [CPA] \MMLcCURL \remapXMLsingular [laplacian] [CPA] \MMLcLAPLACIAN \def\MMLcDIVERGENCE#1#2#3\empty{\getXMLentity{divergence}\processXMLRchildren{#3}} \def\MMLcGRAD #1#2#3\empty{\getXMLentity{grad}\processXMLRchildren{#3}} \def\MMLcCURL #1#2#3\empty{\getXMLentity{curl}\processXMLRchildren{#3}} \def\MMLcLAPLACIAN #1#2#3\empty{\getXMLentity{laplacian}\processXMLRchildren{#3}} %%% theory of sets \remapXMLsequence [set] [CPA] \MMLcSET \def\MMLcSET#1#2% {\doifXMLRchildelse{condition}{#2} {\{\processXMLRchild{bvar}{#2}\,\vert\,\processXMLRchild{condition}{#2}\}} {\encapsulateXMLR{\{}{\MMLccomma}{\}}{#2}}} \remapXMLsequence [list] [CPA] \MMLcLIST \def\MMLcLIST#1#2{\encapsulateXMLR{[}{\MMLccomma}{]}{#2}} \remapXMLsingular [union] [CPA] \MMLcUNION \remapXMLsingular [intersect] [CPA] \MMLcINTERSECT \remapXMLsingular [in] [CPA] \MMLcIN \remapXMLsingular [notin] [CPA] \MMLcNOTIN \remapXMLsingular [subset] [CPA] \MMLcSUBSET \remapXMLsingular [prsubset] [CPA] \MMLcPRSUBSET \remapXMLsingular [notsubset] [CPA] \MMLcNOTSUBSET \remapXMLsingular [notprsubset] [CPA] \MMLcNOTPRSUBSET \remapXMLsingular [setdiff] [CPA] \MMLcSETDIFF \def\MMLcset#1{\withnexttwoXMLRelements{\firstXMLRelement#1\secondXMLRelement}} \def\MMLcUNION #1#2{\MMLcset\cup} \def\MMLcINTERSECT #1#2{\MMLcset\cap} \def\MMLcIN #1#2{\MMLcset\in} \def\MMLcNOTIN #1#2{\MMLcset{\not\in}} \def\MMLcSUBSET #1#2{\MMLcset\subset} \def\MMLcPRSUBSET #1#2{\MMLcset\subseteq} \def\MMLcNOTSUBSET #1#2{\MMLcset{\not\subset}} \def\MMLcNOTPRSUBSET #1#2{\MMLcset{\not\subseteq}} \def\MMLcSETDIFF #1#2{\MMLcset\setminus} \remapXMLsingular [card] [CPA] \MMLcCARD \def\MMLcCARD#1#2#3\empty{\encapsulateXMLR{\vert}{}{\vert}{#3}} \remapXMLsingular [cartesianproduct] [CPA] \MMLcCARTESIANPRODUCT \def\MMLcCARTESIANPRODUCT#1#2#3\empty{\encapsulateXMLR{}{\times}{}{#3}} %%% sequences and series \remapXMLsingular [sum] [CPA] \MMLcSUM \remapXMLsingular [product] [CPA] \MMLcPRODUCT \def\MMLcSUM {\MMLcSUMandPRODUCT{sum}\sum} \def\MMLcPRODUCT{\MMLcSUMandPRODUCT{product}\prod} \setupMMLappearance[sum][\c!location=\v!top] \setupMMLappearance[product][\c!location=\v!top] \def\stackMMLsubscripts#1% {\vbox {\baselineskip\zeropoint % hack, taco vragen \halign{$\scriptstyle\hss##\hss$\cr#1\crcr}}} \def\MMLcSUMandPRODUCT#1#2#3#4\empty {\pushmacro\xmlr \doifXMLRchildelse{condition,bvar,lowlimit}{#4} {\def\MMLcSUMlow {_{\doifXMLRchildelse{condition}{#4} {\collectXMLRchild{condition}{#4}% \expanded{\collectbetweenXMLR{\crcr}{\the\XMLRtoks}}% \stackMMLsubscripts{\the\XMLRtoks}} {\doifXMLRchild{bvar}{#4} {\processXMLRchild{bvar}{#4}% \doifXMLRchild{lowlimit}{#4}{=}}% \processXMLRchild{lowlimit}{#4}}}}} {\let\MMLcSUMlow\empty}% \doifXMLRchildelse{uplimit}{#4} {\def\MMLcSUMup{^{\processXMLRchild{uplimit}{#4}}}} {\let\MMLcSUMup\empty}% \MMLcreset#2\doMMLlimits{#1}\MMLcSUMup\MMLcSUMlow \MMLcreset \processXMLRchild{apply,ci}{#4}% \popmacro\xmlr} \remapXMLsingular [limit] [CPA] \MMLcLIMIT \setupMMLappearance[limit][\c!location=\v!top] \def\MMLcLIMIT#1#2#3\empty {\pushmacro\xmlr \MMLcreset \lim\doMMLlimits{limit}_ {\MMLcreset \doifXMLRchildelse{condition}{#3} {\processXMLRchild{condition}{#3}} {\doifXMLRchild{bvar}{#3} {\processXMLRchild{bvar}{#3}\rightarrow}% \processXMLRchild{lowlimit}{#3}}}% \processXMLRchild{apply}{#3}% \popmacro\xmlr} \remapXMLsingular [tendsto] [CPA] \MMLcTENDSTO \def\MMLcTENDSTO#1#2% {\getXMLarguments{tendsto}{type="default" #1}% \withnexttwoXMLRelements {\MMLcreset\firstXMLRelement \processaction [\XMLpar{tendsto}{type}{default}] [ above=>\downarrow, below=>\uparrow, unknown=>\rightarrow]% \MMLcreset\secondXMLRelement}} %%% elementary classical functions \remapXMLsingular [exp] [CPA] \MMLcEXP \def\MMLcEXP#1#2#3\empty {\getXMLentity{exponentiale}^{\MMLcreset#3}} \remapXMLsingular [ln] [CPA] \MMLcLN %\def\MMLcLN#1#2#3\empty % {\ln\left(\MMLcreset#3\right)} \def\MMLcLN#1#2% {\doMMLcfunction{ln}} \remapXMLsingular [log] [CPA] \MMLcLOG \setupMMLappearance[log][\c!location=\v!right] \def\MMLcLOG#1#2#3\empty {\pushmacro\MMLcLOGBASE \let\MMLcLOGBASE\secondoftwoarguments \doifXMLRchildelse{logbase}{#3} {\doifelse\@@MMLloglocation\v!left {\mathop{{}^{\processXMLRchild{logbase}{#3}}\!\getXMLentity{log}}} {\getXMLentity{log}_{\processXMLRchild{logbase}{#3}}}} {\getXMLentity{log}}% \let\MMLcLOGBASE\ignoreXMLRelement \nodoMMLcfunction#3\empty \popmacro\MMLcLOGBASE} \remapXMLsequence [logbase] [CPA] \MMLcLOGBASE \def\MMLcLOGBASE#1#2{#2} \remapXMLsingular [sin] [CPA] \MMLcSIN \remapXMLsingular [arcsin] [CPA] \MMLcARCSIN \remapXMLsingular [sinh] [CPA] \MMLcSINH \remapXMLsingular [arcsinh] [CPA] \MMLcARCSINH \remapXMLsingular [cos] [CPA] \MMLcCOS \remapXMLsingular [arccos] [CPA] \MMLcARCCOS \remapXMLsingular [cosh] [CPA] \MMLcCOSH \remapXMLsingular [arccosh] [CPA] \MMLcARCCOSH \remapXMLsingular [tan] [CPA] \MMLcTAN \remapXMLsingular [arctan] [CPA] \MMLcARCTAN \remapXMLsingular [tanh] [CPA] \MMLcTANH \remapXMLsingular [arctanh] [CPA] \MMLcARCTANH \remapXMLsingular [cot] [CPA] \MMLcCOT \remapXMLsingular [arccot] [CPA] \MMLcARCCOT \remapXMLsingular [coth] [CPA] \MMLcCOTH \remapXMLsingular [arccoth] [CPA] \MMLcARCCOTH \remapXMLsingular [csc] [CPA] \MMLcCSC \remapXMLsingular [arccsc] [CPA] \MMLcARCCSC \remapXMLsingular [csch] [CPA] \MMLcCSCH \remapXMLsingular [arccsch] [CPA] \MMLcARCCSCH \remapXMLsingular [sec] [CPA] \MMLcSEC \remapXMLsingular [arcsec] [CPA] \MMLcARCSEC \remapXMLsingular [sech] [CPA] \MMLcSECH \remapXMLsingular [arcsech] [CPA] \MMLcARCSECH \setupMMLappearance[function][\c!reduction=\v!yes] \def\doMMLcfunction#1% {\doifnextcharelse\xmlr{\dodoMMLcfunction{#1}}{\getXMLentity{#1}}} \def\dodoMMLcfunction#1% {\getXMLentity{#1}% \nodoMMLcfunction} \def\nodoMMLcfunction#1\empty {\ifx\MMLpowerelement\empty\else ^{\MMLcreset\MMLpowerelement\empty}\!\let\MMLpowerelement\empty \fi \doifelse\@@MMLfunctionreduction\v!yes {\doifXMLRchildelse{apply}{#1} {\collectXMLRchild{apply}{#1}% \@EA\doifXMLRchildelse\@EA{\MMLcfunctionlist}{\the\XMLRtoks} {\MMLcreset#1\empty} {\left(\MMLcreset#1\empty\right)}} {\MMLcreset#1\empty}} {\left(\MMLcreset#1\empty\right)}} \def\MMLcSIN #1#2{\doMMLcfunction{sin}} \def\MMLcARCSIN #1#2{\doMMLcfunction{arcsin}} \def\MMLcSINH #1#2{\doMMLcfunction{sinh}} \def\MMLcARCSINH#1#2{\doMMLcfunction{arcsinh}} \def\MMLcCOS #1#2{\doMMLcfunction{cos}} \def\MMLcARCCOS #1#2{\doMMLcfunction{arccos}} \def\MMLcCOSH #1#2{\doMMLcfunction{cosh}} \def\MMLcARCCOSH#1#2{\doMMLcfunction{arccosh}} \def\MMLcTAN #1#2{\doMMLcfunction{tan}} \def\MMLcARCTAN #1#2{\doMMLcfunction{arctan}} \def\MMLcTANH #1#2{\doMMLcfunction{tanh}} \def\MMLcARCTANH#1#2{\doMMLcfunction{arctanh}} \def\MMLcCOT #1#2{\doMMLcfunction{cot}} \def\MMLcARCCOT #1#2{\doMMLcfunction{arccot}} \def\MMLcCOTH #1#2{\doMMLcfunction{coth}} \def\MMLcARCCOTH#1#2{\doMMLcfunction{arccoth}} \def\MMLcCSC #1#2{\doMMLcfunction{csc}} \def\MMLcARCCSC #1#2{\doMMLcfunction{arccsc}} \def\MMLcCSCH #1#2{\doMMLcfunction{csch}} \def\MMLcARCCSCH#1#2{\doMMLcfunction{arccsch}} \def\MMLcSEC #1#2{\doMMLcfunction{sec}} \def\MMLcARCSEC #1#2{\doMMLcfunction{arcsec}} \def\MMLcSECH #1#2{\doMMLcfunction{sech}} \def\MMLcARCSECH#1#2{\doMMLcfunction{arcsech}} %%% statistics \remapXMLsingular [mean] [CPA] \MMLcMEAN \remapXMLsingular [sdev] [CPA] \MMLcSDEV \remapXMLsingular [variance] [CPA] \MMLcVARIANCE \remapXMLsingular [median] [CPA] \MMLcMEDIAN \remapXMLsingular [mode] [CPA] \MMLcMODE \def\MMLcMEAN #1#2{\withnextXMLRelement{\overline{\nextXMLRelement}}} \def\MMLcSDEV #1#2{\withnextXMLRelement{\sigma(\MMLcreset\nextXMLRelement)}} \def\MMLcVARIANCE#1#2{\withnextXMLRelement{\sigma(\MMLcreset\nextXMLRelement)^2}} \def\MMLcMEDIAN #1#2{\withnextXMLRelement{\getXMLentity{median}(\MMLcreset\nextXMLRelement)}} \def\MMLcMODE #1#2{\withnextXMLRelement{\getXMLentity{mode}(\MMLcreset\nextXMLRelement)}} \remapXMLsingular [moment] [CPA] \MMLcMOMENT \remapXMLsequence [momentabout] [CPA] \MMLcMOMENTABOUT \def\MMLcMOMENT#1#2#3\empty {\left\langle\processXMLRchild{apply,reln,ci,cn}{#3}% ^{\processXMLRchild{degree}{#3}}\right\rangle} \def\MMLcMOMENTABOUT#1#2{} %%% linear algebra \remapXMLsequence [vector] [CPA] \MMLcVECTOR \setupMMLappearance[vector][\c!direction=\v!horizontal] % \v!vertical \def\MMLcVECTOR#1#2% {\countXMLRchildren{#2}% \ifnum\nofXMLRchildren>1 \doifelse\@@MMLvectordirection\v!horizontal {\encapsulateXMLR{\left(}{\MMLccomma}{\right)}{#2}} {\collectbetweenXMLR{\crcr}{#2}% \MMLcreset\left(\matrix{\the\XMLRtoks}\right)}% \else \overrightarrow{#2}% \fi} \remapXMLsequence [matrix] [CPA] \MMLcMATRIX \remapXMLsequence [matrixrow] [CPA] \MMLcMATRIXROW \unexpanded\def\@col@amp@{&} \def\doMMLcMATRIX#1#2#3% {\pushmacro\MMLcMATRIXROW \let\MMLcMATRIXROW\normalMMLcMATRIXROW \MMLcreset \ifcase#1\matrix{#3}\else\left(\matrix{#3}\right)\fi \popmacro\MMLcMATRIXROW} \def\MMLcMATRIX#1#2% {\doMMLcMATRIX1{#1}{#2}} \def\MMLcMATRIXROW#1#2% {\collectbetweenXMLR{\@col@amp@}{#2}\the\XMLRtoks\crcr} \let\normalMMLcMATRIXROW\MMLcMATRIXROW \def\MMLcMATRIXROW#1#2% {\collectbetweenXMLR{\@col@amp@}{#2}% \left(\matrix{\the\XMLRtoks\crcr}\right)} \remapXMLsingular [determinant] [CPA] \MMLcDETERMINANT % \def\MMLcDETERMINANT#1#2{\getXMLentity{determinant}} % optie \def\MMLcDETERMINANT#1#2\empty {\pushmacro\MMLcMATRIX \def\MMLcMATRIX##1##2{\doMMLcMATRIX0{##1}{##2}}% \left|#2\empty\right|% \popmacro\MMLcMATRIX} \remapXMLsingular [transpose] [CPA] \MMLcTRANSPOSE \def\MMLcTRANSPOSE#1#2{\withnextXMLRelement{\nextXMLRelement^{\rm T}}} \remapXMLsingular [selector] [CPA] \MMLcSELECTOR \def\MMLcSELECTOR#1#2#3\empty {\pushmacro\xmlr \withnextXMLRelement {\mathinner{\nextXMLRelement}% hm, assumes a matrix or so \doMMLcSELECTOR}% #3\empty \popmacro\xmlr} \def\doMMLcSELECTOR#1\empty {_{\MMLcreset\encapsulateXMLR{}{\MMLccomma}{}{#1\empty}}} \remapXMLsingular [vectorproduct] [CPA] \MMLcVECTORPRODUCT \remapXMLsingular [scalarproduct] [CPA] \MMLcSCALARPRODUCT \remapXMLsingular [outerproduct] [CPA] \MMLcOUTERPRODUCT \def\MMLcvector#1% {\withnexttwoXMLRelements{\firstXMLRelement#1\secondXMLRelement}} \def\MMLcVECTORPRODUCT#1#2{\MMLcvector{\getXMLentity{vectorproduct}}#2}% #2?% \def\MMLcSCALARPRODUCT#1#2{\MMLcvector{\getXMLentity{scalarproduct}}#2} \def\MMLcOUTERPRODUCT #1#2{\MMLcvector{\getXMLentity{outerproduct}}#2} %%% semantic mapping elements \remapXMLsequence [semantics] [CPA] \MMLcSEMANTICS \def\MMLcSEMANTICS#1#2% {\doifXMLRchildelse{annotation}{#2} {\processXMLRchild{annotation}{#2}} {#2}} \remapXMLsequence [annotation] [CPA] \MMLcANNOTATION \def\MMLcANNOTATION#1#2% we need a better unmapper {\getXMLarguments{annotation}{encoding="" #1}% \doif{\XMLpar{annotation}{encoding}{}}{TeX}% {\begingroup \setnormalXMLentities % better: \simplifyXMLentities ; test first \let\xmlrent\expandedXMLentity \edef\mmlascii{#2}% \setnormalcatcodes \ifx\mmlascii\empty \donefalse \else \def\do##1##2\end % hack {\edef\!!stringa{\string##1}% \edef\!!stringb{\letterdollar}% \ifx\!!stringa\!!stringb \donetrue \else \donefalse \fi}% \expandafter\do\mmlascii\end \fi \ifdone \hbox{\scantokens\@EA{\mmlascii}}% \else \scantokens\@EA{\mmlascii}% \fi \endgroup}} \remapXMLsequence [annotation-xml] [CPA] \MMLcANNOTATIONXML \def\MMLcANNOTATIONXML#1#2{} %%% constant and symbol elements \remapXMLsingular [integers] [CPA] \MMLcINTEGERS \remapXMLsingular [reals] [CPA] \MMLcREALS \remapXMLsingular [rationals] [CPA] \MMLcRATIONALS \remapXMLsingular [naturalnumbers] [CPA] \MMLcNATURALNUMBERS \remapXMLsingular [complexes] [CPA] \MMLcCOMPLEXES \remapXMLsingular [primes] [CPA] \MMLcPRIMES \remapXMLsingular [exponentiale] [CPA] \MMLcEXPONENTIALE \remapXMLsingular [imaginaryi] [CPA] \MMLcIMAGINARYI \remapXMLsingular [notanumber] [CPA] \MMLcNOTANUMBER \remapXMLsingular [true] [CPA] \MMLcTRUE \remapXMLsingular [false] [CPA] \MMLcFALSE \remapXMLsingular [emptyset] [CPA] \MMLcEMPTYSET \remapXMLsingular [pi] [CPA] \MMLcPI \remapXMLsingular [eulergamma] [CPA] \MMLcEULERGAMMA \remapXMLsingular [infinity] [CPA] \MMLcINFINITY \def\MMLcINTEGERS #1#2{\getXMLentity{integers}} \def\MMLcREALS #1#2{\getXMLentity{reals}} \def\MMLcRATIONALS #1#2{\getXMLentity{rationals}} \def\MMLcNATURALNUMBERS#1#2{\getXMLentity{naturalnumbers}} \def\MMLcCOMPLEXES #1#2{\getXMLentity{complexes}} \def\MMLcPRIMES #1#2{\getXMLentity{primes}} \def\MMLcEXPONENTIALE #1#2{\getXMLentity{ExponentialE}} \def\MMLcIMAGINARYI #1#2{\getXMLentity{ImaginaryI}} \def\MMLcNOTANUMBER #1#2{\mathop{\rm NaN}} \def\MMLcTRUE #1#2{\mathop{\rm true}} \def\MMLcFALSE #1#2{\mathop{\rm false}} \def\MMLcEMPTYSET #1#2{\mathop{\hbox{\O}}} \def\MMLcPI #1#2{\pi} \def\MMLcEULERGAMMA #1#2{\gamma} \def\MMLcINFINITY #1#2{\infty} \stopXMLmapping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-tbl.lua0000644000175000017500000000300012130411274024061 0ustar norbertnorbertif not modules then modules = { } end modules ['tabl-tbl'] = { version = 1.001, comment = "companion to tabl-tbl.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- A couple of hacks ... easier to do in Lua than in regular TeX. More will -- follow. local context, commands = context, commands local tonumber = tonumber local gsub, rep, sub, find = string.gsub, string.rep, string.sub, string.find local P, C, Cc, Ct, lpegmatch = lpeg.P, lpeg.C, lpeg.Cc, lpeg.Ct, lpeg.match local settexcount = tex.setcount local separator = P("|") local nested = lpeg.patterns.nested local pattern = Ct((separator * (C(nested) + Cc("")) * C((1-separator)^0))^0) function commands.presettabulate(preamble) preamble = gsub(preamble,"~","d") -- let's get rid of ~ mess here if find(preamble,"%*") then -- todo: lpeg but not now preamble = gsub(preamble, "%*(%b{})(%b{})", function(n,p) return rep(sub(p,2,-2),tonumber(sub(n,2,-2)) or 1) end) end local t = lpegmatch(pattern,preamble) local m = #t - 2 settexcount("global","c_tabl_tabulate_nofcolumns", m/2) settexcount("global","c_tabl_tabulate_has_rule_spec_first", t[1] == "" and 0 or 1) settexcount("global","c_tabl_tabulate_has_rule_spec_last", t[m+1] == "" and 0 or 1) for i=1,m,2 do context.settabulateentry(t[i],t[i+1]) end context.settabulatelastentry(t[m+1]) end context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-com.mkii0000644000175000017500000000213211754241457024311 0ustar norbertnorbert%D \module %D [ file=mult-com, %D version=1996.06.01, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See licen-en.pdf for %C details. %D This file has been replaced by \type {mult-def.lua} from which we %D generate separate interface definition files. % obsolete: % % \startcommands dutch english % german czech % italian romanian % french % % language: taal language % sprache jazyk % lingua limba % langue % % \stopcommands \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-inf-04.mkiv0000644000175000017500000000216411757516105024031 0ustar norbertnorbert\usemodule[art-01] \setupbodyfont[10pt] \starttext \startluacode context.subject("Configuration files") local configurations = resolvers.instance.specification context.starttabulate { "|Tl|Tl|" } for i=1,#configurations do context.NC() context(i) context.NC() context.verbatim(resolvers.resolve(configurations[i])) context.NC() context.NR() end context.stoptabulate() local list = resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.luacnfspec)) context.subject("Configuration paths") -- context.verbatim(resolvers.luacnfspec) context.starttabulate { "|Tl|Tl|" } for i=1,#list do local li = resolvers.resolve(list[i]) context.NC() if lfs.isdir(li) then context("-") else context("+") end context.NC() context.verbatim(li) context.NC() context.NR() end context.stoptabulate() \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-ldx.mkiv0000644000175000017500000001050212130411274023606 0ustar norbertnorbert%D \module %D [ file=x-ldx, %D version=2008.06.03, %D title=\CONTEXT\ Modules, %D subtitle=Lua Source Pretty Printing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % this will become an extra \setupxml[default=hidden] \usemodule[x][mathml] \usemodule[abr-02] \xmlregistersetup{xml:mml:define} \xmlregistersetup{xml:ldx:define} \xmlregisterns{ldx}{ldx} \startxmlsetups xml:ldx:define \xmlsetsetup {#1} {ldx:*} {ldx:*} \stopxmlsetups % % % \startxmlsetups ldx:p \xmlflush{#1}\par \stopxmlsetups \startxmlsetups ldx:source \source{\xmlflush{#1}} \stopxmlsetups \startxmlsetups ldx:key \dontleavehmode{\bf\xmlflush{#1}} \stopxmlsetups \startxmlsetups ldx:variable \xmlflush{#1} % \expanded{\variable{\xmlflush{#1}}} \stopxmlsetups \startxmlsetups ldx:function \dontleavehmode{\bf function}\space\xmlflush{#1} % \expanded{\function{\xmlflush{#1}}} \stopxmlsetups \startxmlsetups ldx:com \dontleavehmode{\tt--\xmlflush{#1}} \stopxmlsetups \startxmlsetups ldx:document \page \xmlflush{#1} \determineregistercharacteristics[function] \startmode[*register] \testpage[4] \extra{Functions} \placeregister[function] \stopmode \determineregistercharacteristics[variable] \startmode[*register] \testpage[4] \extra{Variables} \placeregister[variable] \stopmode \stopxmlsetups \newcounter\CommentCounter \startxmlsetups ldx:comment \blank \doglobal\increment\CommentCounter \margintitle{\bf\CommentCounter} \xmlflush{#1} \blank \stopxmlsetups \startxmlsetups ldx:dqs \dontleavehmode\bgroup\tt"\xmlflush{#1}"\egroup \stopxmlsetups \startxmlsetups ldx:sqs \dontleavehmode\bgroup\tt'\xmlflush{#1}'\egroup \stopxmlsetups \startxmlsetups ldx:code \startpacked \xmlflush{#1}\relax \stoppacked \stopxmlsetups \startxmlsetups ldx:lines \startpacked \xmlflush{#1} \stoppacked \stopxmlsetups \startxmlsetups ldx:line \doifelsenothing {\xmlflush{#1}} { \xmlflush{#1}\crlf } { \dontleavehmode \hbox to \hsize \bgroup \strut \hskip.25\dimexpr\xmlattdef{#1}{n}{0}em\relax\relax % extra relax needed ! \doif {\xmlatt{#1}{comment}} {yes} {\tt} \xmlflush{#1} \hss \egroup \endgraf } \stopxmlsetups \startxmlsetups ldx:logo \uppercasestring\xmlatt{#1}{label}\xmlatt{#1}{name}\to\ascii \ifx\ascii\empty\else\getvalue{\ascii}\fi \stopxmlsetups \startxmlsetups ldx:l \uppercasestring\xmlatt{#1}{l}\xmlatt{#1}{n}\to\ascii \ifx\ascii\empty\else\getvalue{\ascii}\fi \stopxmlsetups \startxmlsetups ldx:typing \blank \startpacked \tt \xmlverbatim{#1} \stoppacked \blank \stopxmlsetups \startxmlsetups ldx:type \dontleavehmode{\tt\xmlflush{#1}} \stopxmlsetups \startxmlsetups ldx:t \dontleavehmode{\tt\xmlflush{#1}} \stopxmlsetups % key -> kw % dqs -> dq % sqs -> sq % line -> ln % code -> cd % comment -> tx (text) \definetypeface[mainfacenormal] [ss][sans] [iwona] [default] \definetypeface[mainfacenormal] [rm][serif][palatino] [default] \definetypeface[mainfacenormal] [tt][mono] [modern] [default][rscale=1] % 1.1 \definetypeface[mainfacenormal] [mm][math] [iwona] [default][encoding=default] \definetypeface[mainfacemedium] [ss][sans] [iwona-medium][default] \definetypeface[mainfacenormal] [rm][serif][palatino] [default] \definetypeface[mainfacemedium] [tt][mono] [modern] [default][rscale=1] % 1.1 \definetypeface[mainfacemedium] [mm][math] [iwona-medium][default][encoding=default] \definetypeface[mainfacenarrowtt][tt][mono] [modern-cond] [default][rscale=1] % 1.1 \setupbodyfont [mainfacenormal,11pt] \setupwhitespace [big] \defineregister[function][functions] \defineregister[variable][variables] \definehead[source][subject] \definehead[extra] [subsubject] \definehead[topic] [subsubsubject] \setuphead [source] [style=\bfb] \setuphead [extra] [style=\bfa] \setuphead [topic] [style=\bf] \setuplayout [width=middle, height=middle, backspace=2cm, topspace=2cm] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pdf.lua0000644000175000017500000004502512164700067024102 0ustar norbertnorbertif not modules then modules = { } end modules ['meta-pdf'] = { version = 1.001, comment = "companion to meta-pdf.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Finally we used an optimized version. The test code can be found in -- meta-pdh.lua but since we no longer want to overload functione we use -- more locals now. This module keeps changing as it is also a testbed. -- -- We can make it even more efficient if needed, but as we don't use this -- code often in \MKIV\ it makes no sense. local concat, unpack = table.concat, table.unpack local gsub, find, byte, gmatch, match = string.gsub, string.find, string.byte, string.gmatch, string.match local lpegmatch = lpeg.match local round = math.round local formatters, format = string.formatters, string.format local report_mptopdf = logs.reporter("graphics","mptopdf") local mplib, metapost, lpdf, context = mplib, metapost, lpdf, context local pdfrgbcode = lpdf.rgbcode local pdfcmykcode = lpdf.cmykcode local pdfgraycode = lpdf.graycode local pdfspotcode = lpdf.spotcode local pdftransparencycode = lpdf.transparencycode local pdffinishtransparencycode = lpdf.finishtransparencycode local pdfliteral = nodes.pool.pdfliteral metapost.mptopdf = metapost.mptopdf or { } local mptopdf = metapost.mptopdf mptopdf.nofconverted = 0 local f_translate = formatters["1 0 0 0 1 %f %f cm"] -- no %s due to 1e-035 issues local f_concat = formatters["%f %f %f %f %f %f cm"] -- no %s due to 1e-035 issues local m_path, m_stack, m_texts, m_version, m_date, m_shortcuts = { }, { }, { }, 0, 0, false local m_stack_close, m_stack_path, m_stack_concat = false, { }, nil local extra_path_code, ignore_path = nil, false local specials = { } local function resetpath() m_stack_close, m_stack_path, m_stack_concat = false, { }, nil end local function resetall() m_path, m_stack, m_texts, m_version, m_shortcuts = { }, { }, { }, 0, false extra_path_code, ignore_path = nil, false specials = { } resetpath() end resetall() -- -- this does not work as expected (displacement of text) beware, needs another -- -- comment hack -- -- local function pdfcode(str) -- context(pdfliteral(str)) -- end local pdfcode = context.pdfliteral local function mpscode(str) if ignore_path then pdfcode("h W n") if extra_path_code then pdfcode(extra_path_code) extra_path_code = nil end ignore_path = false else pdfcode(str) end end -- auxiliary functions local function flushconcat() if m_stack_concat then mpscode(f_concat(unpack(m_stack_concat))) m_stack_concat = nil end end local function flushpath(cmd) if #m_stack_path > 0 then local path = { } if m_stack_concat then local sx, sy = m_stack_concat[1], m_stack_concat[4] local rx, ry = m_stack_concat[2], m_stack_concat[3] local tx, ty = m_stack_concat[5], m_stack_concat[6] local d = (sx*sy) - (rx*ry) for k=1,#m_stack_path do local v = m_stack_path[k] local px, py = v[1], v[2] ; v[1], v[2] = (sy*(px-tx)-ry*(py-ty))/d, (sx*(py-ty)-rx*(px-tx))/d -- mpconcat(v[1],v[2]) if #v == 7 then local px, py = v[3], v[4] ; v[3], v[4] = (sy*(px-tx)-ry*(py-ty))/d, (sx*(py-ty)-rx*(px-tx))/d -- mpconcat(v[3],v[4]) local px, py = v[5], v[6] ; v[5], v[6] = (sy*(px-tx)-ry*(py-ty))/d, (sx*(py-ty)-rx*(px-tx))/d -- mpconcat(v[5],v[6]) end path[k] = concat(v," ") end else for k=1,#m_stack_path do path[k] = concat(m_stack_path[k]," ") end end flushconcat() pdfcode(concat(path," ")) if m_stack_close then mpscode("h " .. cmd) else mpscode(cmd) end end resetpath() end -- mp interface local mps = { } function mps.creator(a, b, c) m_version = tonumber(b) end function mps.creationdate(a) m_date = a end function mps.newpath() m_stack_path = { } end function mps.boundingbox(llx, lly, urx, ury) context.setMPboundingbox(llx,lly,urx,ury) end function mps.moveto(x,y) m_stack_path[#m_stack_path+1] = { x, y, "m" } end function mps.curveto(ax, ay, bx, by, cx, cy) m_stack_path[#m_stack_path+1] = { ax, ay, bx, by, cx, cy, "c" } end function mps.lineto(x,y) m_stack_path[#m_stack_path+1] = { x, y, "l" } end function mps.rlineto(x,y) local dx, dy = 0, 0 local topofstack = #m_stack_path if topofstack > 0 then local msp = m_stack_path[topofstack] dx = msp[1] dy = msp[2] end m_stack_path[topofstack+1] = { dx, dy, "l" } end function mps.translate(tx,ty) mpscode(f_translate(tx,ty)) end function mps.scale(sx,sy) m_stack_concat = { sx, 0, 0, sy, 0, 0 } end function mps.concat(sx, rx, ry, sy, tx, ty) m_stack_concat = { sx, rx, ry, sy, tx, ty } end function mps.setlinejoin(d) mpscode(d .. " j") end function mps.setlinecap(d) mpscode(d .. " J") end function mps.setmiterlimit(d) mpscode(d .. " M") end function mps.gsave() mpscode("q") end function mps.grestore() mpscode("Q") end function mps.setdash(...) -- can be made faster, operate on t = { ... } local n = select("#",...) mpscode("[" .. concat({...}," ",1,n-1) .. "] " .. select(n,...) .. " d") -- mpscode("[" .. concat({select(1,n-1)}," ") .. "] " .. select(n,...) .. " d") end function mps.resetdash() mpscode("[ ] 0 d") end function mps.setlinewidth(d) mpscode(d .. " w") end function mps.closepath() m_stack_close = true end function mps.fill() flushpath('f') end function mps.stroke() flushpath('S') end function mps.both() flushpath('B') end function mps.clip() flushpath('W n') end function mps.textext(font, scale, str) -- old parser local dx, dy = 0, 0 if #m_stack_path > 0 then dx, dy = m_stack_path[1][1], m_stack_path[1][2] end flushconcat() context.MPtextext(font,scale,str,dx,dy) resetpath() end local handlers = { } handlers[1] = function(s) pdfcode(pdffinishtransparencycode()) pdfcode(pdfcmykcode(mps.colormodel,s[3],s[4],s[5],s[6])) end handlers[2] = function(s) pdfcode(pdffinishtransparencycode()) pdfcode(pdfspotcode(mps.colormodel,s[3],s[4],s[5],s[6])) end handlers[3] = function(s) pdfcode(pdfrgbcode(mps.colormodel,s[4],s[5],s[6])) pdfcode(pdftransparencycode(s[2],s[3])) end handlers[4] = function(s) pdfcode(pdfcmykcode(mps.colormodel,s[4],s[5],s[6],s[7])) pdfcode(pdftransparencycode(s[2],s[3])) end handlers[5] = function(s) pdfcode(pdfspotcode(mps.colormodel,s[4],s[5],s[6],s[7])) pdfcode(pdftransparencycode(s[2],s[3])) end -- todo: color conversion local nofshades, tn = 0, tonumber local function linearshade(colorspace,domain,ca,cb,coordinates) pdfcode(pdffinishtransparencycode()) nofshades = nofshades + 1 local name = formatters["MpsSh%s"](nofshades) lpdf.linearshade(name,domain,ca,cb,1,colorspace,coordinates) extra_path_code, ignore_path = formatters["/%s sh Q"](name), true pdfcode("q /Pattern cs") end local function circularshade(colorspace,domain,ca,cb,coordinates) pdfcode(pdffinishtransparencycode()) nofshades = nofshades + 1 local name = formatters["MpsSh%s"](nofshades) lpdf.circularshade(name,domain,ca,cb,1,colorspace,coordinates) extra_path_code, ignore_path = formatters["/%s sh Q"](name), true pdfcode("q /Pattern cs") end handlers[30] = function(s) linearshade("DeviceRGB", { tn(s[ 2]), tn(s[ 3]) }, { tn(s[ 5]), tn(s[ 6]), tn(s[ 7]) }, { tn(s[10]), tn(s[11]), tn(s[12]) }, { tn(s[ 8]), tn(s[ 9]), tn(s[13]), tn(s[14]) } ) end handlers[31] = function(s) circularshade("DeviceRGB", { tn(s[ 2]), tn(s[ 3]) }, { tn(s[ 5]), tn(s[ 6]), tn(s[ 7]) }, { tn(s[11]), tn(s[12]), tn(s[13]) }, { tn(s[ 8]), tn(s[ 9]), tn(s[10]), tn(s[14]), tn(s[15]), tn(s[16]) } ) end handlers[32] = function(s) linearshade("DeviceCMYK", { tn(s[ 2]), tn(s[ 3]) }, { tn(s[ 5]), tn(s[ 6]), tn(s[ 7]), tn(s[ 8]) }, { tn(s[11]), tn(s[12]), tn(s[13]), tn(s[14]) }, { tn(s[ 9]), tn(s[10]), tn(s[15]), tn(s[16]) } ) end handlers[33] = function(s) circularshade("DeviceCMYK", { tn(s[ 2]), tn(s[ 3]) }, { tn(s[ 5]), tn(s[ 6]), tn(s[ 7]), tn(s[ 8]) }, { tn(s[12]), tn(s[13]), tn(s[14]), tn(s[15]) }, { tn(s[ 9]), tn(s[10]), tn(s[11]), tn(s[16]), tn(s[17]), tn(s[18]) } ) end handlers[34] = function(s) -- todo (after further cleanup) linearshade("DeviceGray", { tn(s[ 2]), tn(s[ 3]) }, { 0 }, { 1 }, { tn(s[9]), tn(s[10]), tn(s[15]), tn(s[16]) } ) end handlers[35] = function(s) -- todo (after further cleanup) circularshade("DeviceGray", { tn(s[ 2]), tn(s[ 3]) }, { 0 }, { 1 }, { tn(s[9]), tn(s[10]), tn(s[15]), tn(s[16]) } ) end -- not supported in mkiv , use mplib instead handlers[10] = function() report_mptopdf("skipping special %s",10) end handlers[20] = function() report_mptopdf("skipping special %s",20) end handlers[50] = function() report_mptopdf("skipping special %s",50) end --end of not supported function mps.setrgbcolor(r,g,b) -- extra check r, g = tonumber(r), tonumber(g) -- needed when we use lpeg if r == 0.0123 and g < 0.1 then g, b = round(g*10000), round(b*10000) local s = specials[b] local h = round(s[#s]) local handler = handlers[h] if handler then handler(s) else report_mptopdf("unknown special handler %s (1)",h) end elseif r == 0.123 and g < 0.1 then g, b = round(g*1000), round(b*1000) local s = specials[b] local h = round(s[#s]) local handler = handlers[h] if handler then handler(s) else report_mptopdf("unknown special handler %s (2)",h) end else pdfcode(pdffinishtransparencycode()) pdfcode(pdfrgbcode(mps.colormodel,r,g,b)) end end function mps.setcmykcolor(c,m,y,k) pdfcode(pdffinishtransparencycode()) pdfcode(pdfcmykcode(mps.colormodel,c,m,y,k)) end function mps.setgray(s) pdfcode(pdffinishtransparencycode()) pdfcode(pdfgraycode(mps.colormodel,s)) end function mps.specials(version,signal,factor) -- 2.0 123 1000 end function mps.special(...) -- 7 1 0.5 1 0 0 1 3 local t = { ... } local n = tonumber(t[#t-1]) specials[n] = t end function mps.begindata() end function mps.enddata() end function mps.showpage() end -- lpeg parser -- The lpeg based parser is rather optimized for the kind of output -- that MetaPost produces. It's my first real lpeg code, which may -- show. Because the parser binds to functions, we define it last. local lpegP, lpegR, lpegS, lpegC, lpegCc, lpegCs = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cs local digit = lpegR("09") local eol = lpegS('\r\n')^1 local sp = lpegP(' ')^1 local space = lpegS(' \r\n')^1 local number = lpegS('0123456789.-+')^1 local nonspace = lpegP(1-lpegS(' \r\n'))^1 local spec = digit^2 * lpegP("::::") * digit^2 local text = lpegCc("{") * ( lpegP("\\") * ( (digit * digit * digit) / function(n) return "c" .. tonumber(n,8) end) + lpegP(" ") / function(n) return "\\c32" end + -- never in new mp lpegP(1) / function(n) return "\\c" .. byte(n) end ) * lpegCc("}") local package = lpegCs(spec + text^0) function mps.fshow(str,font,scale) -- lpeg parser mps.textext(font,scale,lpegmatch(package,str)) end local cnumber = lpegC(number) local cstring = lpegC(nonspace) local specials = (lpegP("%%MetaPostSpecials:") * sp * (cstring * sp^0)^0 * eol) / mps.specials local special = (lpegP("%%MetaPostSpecial:") * sp * (cstring * sp^0)^0 * eol) / mps.special local boundingbox = (lpegP("%%BoundingBox:") * sp * (cnumber * sp^0)^4 * eol) / mps.boundingbox local highresboundingbox = (lpegP("%%HiResBoundingBox:") * sp * (cnumber * sp^0)^4 * eol) / mps.boundingbox local setup = lpegP("%%BeginSetup") * (1 - lpegP("%%EndSetup") )^1 local prolog = lpegP("%%BeginProlog") * (1 - lpegP("%%EndProlog"))^1 local comment = lpegP('%')^1 * (1 - eol)^1 local curveto = ((cnumber * sp)^6 * lpegP("curveto") ) / mps.curveto local lineto = ((cnumber * sp)^2 * lpegP("lineto") ) / mps.lineto local rlineto = ((cnumber * sp)^2 * lpegP("rlineto") ) / mps.rlineto local moveto = ((cnumber * sp)^2 * lpegP("moveto") ) / mps.moveto local setrgbcolor = ((cnumber * sp)^3 * lpegP("setrgbcolor") ) / mps.setrgbcolor local setcmykcolor = ((cnumber * sp)^4 * lpegP("setcmykcolor") ) / mps.setcmykcolor local setgray = ((cnumber * sp)^1 * lpegP("setgray") ) / mps.setgray local newpath = ( lpegP("newpath") ) / mps.newpath local closepath = ( lpegP("closepath") ) / mps.closepath local fill = ( lpegP("fill") ) / mps.fill local stroke = ( lpegP("stroke") ) / mps.stroke local clip = ( lpegP("clip") ) / mps.clip local both = ( lpegP("gsave fill grestore")) / mps.both local showpage = ( lpegP("showpage") ) local setlinejoin = ((cnumber * sp)^1 * lpegP("setlinejoin") ) / mps.setlinejoin local setlinecap = ((cnumber * sp)^1 * lpegP("setlinecap") ) / mps.setlinecap local setmiterlimit = ((cnumber * sp)^1 * lpegP("setmiterlimit") ) / mps.setmiterlimit local gsave = ( lpegP("gsave") ) / mps.gsave local grestore = ( lpegP("grestore") ) / mps.grestore local setdash = (lpegP("[") * (cnumber * sp^0)^0 * lpegP("]") * sp * cnumber * sp * lpegP("setdash")) / mps.setdash local concat = (lpegP("[") * (cnumber * sp^0)^6 * lpegP("]") * sp * lpegP("concat") ) / mps.concat local scale = ( (cnumber * sp^0)^6 * sp * lpegP("concat") ) / mps.concat local fshow = (lpegP("(") * lpegC((1-lpegP(")"))^1) * lpegP(")") * space * cstring * space * cnumber * space * lpegP("fshow")) / mps.fshow local fshow = (lpegP("(") * lpegCs( ( lpegP("\\(")/"\\050" + lpegP("\\)")/"\\051" + (1-lpegP(")")) )^1 ) * lpegP(")") * space * cstring * space * cnumber * space * lpegP("fshow")) / mps.fshow local setlinewidth_x = (lpegP("0") * sp * cnumber * sp * lpegP("dtransform truncate idtransform setlinewidth pop")) / mps.setlinewidth local setlinewidth_y = (cnumber * sp * lpegP("0 dtransform exch truncate exch idtransform pop setlinewidth") ) / mps.setlinewidth local c = ((cnumber * sp)^6 * lpegP("c") ) / mps.curveto -- ^6 very inefficient, ^1 ok too local l = ((cnumber * sp)^2 * lpegP("l") ) / mps.lineto local r = ((cnumber * sp)^2 * lpegP("r") ) / mps.rlineto local m = ((cnumber * sp)^2 * lpegP("m") ) / mps.moveto local vlw = ((cnumber * sp)^1 * lpegP("vlw")) / mps.setlinewidth local hlw = ((cnumber * sp)^1 * lpegP("hlw")) / mps.setlinewidth local R = ((cnumber * sp)^3 * lpegP("R") ) / mps.setrgbcolor local C = ((cnumber * sp)^4 * lpegP("C") ) / mps.setcmykcolor local G = ((cnumber * sp)^1 * lpegP("G") ) / mps.setgray local lj = ((cnumber * sp)^1 * lpegP("lj") ) / mps.setlinejoin local ml = ((cnumber * sp)^1 * lpegP("ml") ) / mps.setmiterlimit local lc = ((cnumber * sp)^1 * lpegP("lc") ) / mps.setlinecap local n = lpegP("n") / mps.newpath local p = lpegP("p") / mps.closepath local S = lpegP("S") / mps.stroke local F = lpegP("F") / mps.fill local B = lpegP("B") / mps.both local W = lpegP("W") / mps.clip local P = lpegP("P") / mps.showpage local q = lpegP("q") / mps.gsave local Q = lpegP("Q") / mps.grestore local sd = (lpegP("[") * (cnumber * sp^0)^0 * lpegP("]") * sp * cnumber * sp * lpegP("sd")) / mps.setdash local rd = ( lpegP("rd")) / mps.resetdash local s = ( (cnumber * sp^0)^2 * lpegP("s") ) / mps.scale local t = (lpegP("[") * (cnumber * sp^0)^6 * lpegP("]") * sp * lpegP("t") ) / mps.concat -- experimental local preamble = ( prolog + setup + boundingbox + highresboundingbox + specials + special + comment ) local procset = ( lj + ml + lc + c + l + m + n + p + r + R + C + G + S + F + B + W + vlw + hlw + Q + q + sd + rd + t + s + fshow + P ) local verbose = ( curveto + lineto + moveto + newpath + closepath + rlineto + setrgbcolor + setcmykcolor + setgray + setlinejoin + setmiterlimit + setlinecap + stroke + fill + clip + both + setlinewidth_x + setlinewidth_y + gsave + grestore + concat + scale + fshow + setdash + -- no resetdash showpage ) -- order matters in terms of speed / we could check for procset first local captures_old = ( space + verbose + preamble )^0 local captures_new = ( space + verbose + procset + preamble )^0 local function parse(m_data) if find(m_data,"%%%%BeginResource: procset mpost") then lpegmatch(captures_new,m_data) else lpegmatch(captures_old,m_data) end end -- main converter local a_colorspace = attributes.private('colormodel') function mptopdf.convertmpstopdf(name) resetall() local ok, m_data, n = resolvers.loadbinfile(name, 'tex') -- we need a binary load ! if ok then mps.colormodel = tex.attribute[a_colorspace] statistics.starttiming(mptopdf) mptopdf.nofconverted = mptopdf.nofconverted + 1 pdfcode(formatters["\\letterpercent\\space mptopdf begin: n=%s, file=%s"](mptopdf.nofconverted,file.basename(name))) pdfcode("q 1 0 0 1 0 0 cm") parse(m_data) pdfcode(pdffinishtransparencycode()) pdfcode("Q") pdfcode("\\letterpercent\\space mptopdf end") resetall() statistics.stoptiming(mptopdf) else report_mptopdf("file %a not found",name) end end -- status info statistics.register("mps conversion time",function() local n = mptopdf.nofconverted if n > 0 then return format("%s seconds, %s conversions", statistics.elapsedtime(mptopdf),n) else return nil end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sql-imp-client.lua0000644000175000017500000001751112130411274026205 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sql-client'] = { version = 1.001, comment = "companion to util-sql.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: make a converter local rawset, setmetatable = rawset, setmetatable local P, S, V, C, Cs, Ct, Cc, Cg, Cf, patterns, lpegmatch = lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.Cc, lpeg.Cg, lpeg.Cf, lpeg.patterns, lpeg.match local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end) local trace_queries = false trackers.register("sql.queries",function(v) trace_queries = v end) local report_state = logs.reporter("sql","client") local sql = utilities.sql local helpers = sql.helpers local methods = sql.methods local validspecification = helpers.validspecification local preparetemplate = helpers.preparetemplate local splitdata = helpers.splitdata local replacetemplate = utilities.templates.replace local serialize = sql.serialize local deserialize = sql.deserialize -- Experiments with an p/action demonstrated that there is not much gain. We could do a runtime -- capture but creating all the small tables is not faster and it doesn't work well anyway. local separator = P("\t") local newline = patterns.newline local empty = Cc("") local entry = C((1-separator-newline)^0) -- C 10% faster than Cs local unescaped = P("\\n") / "\n" + P("\\t") / "\t" + P("\\0") / "\000" + P("\\\\") / "\\" local entry = Cs((unescaped + (1-separator-newline))^0) -- C 10% faster than Cs but Cs needed due to nesting local getfirst = Ct( entry * (separator * (entry+empty))^0) + newline local skipfirst = (1-newline)^1 * newline local getfirstline = C((1-newline)^0) local cache = { } local function splitdata(data) -- todo: hash on first line ... maybe move to client module if data == "" then if trace_sql then report_state("no data") end return { }, { } end local first = lpegmatch(getfirstline,data) if not first then if trace_sql then report_state("no data") end return { }, { } end local p = cache[first] if p then -- report_state("reusing: %s",first) local entries = lpegmatch(p.parser,data) return entries or { }, p.keys elseif p == false then return { }, { } elseif p == nil then local keys = lpegmatch(getfirst,first) or { } if #keys == 0 then if trace_sql then report_state("no banner") end cache[first] = false return { }, { } end -- quite generic, could be a helper local n = #keys if n == 0 then report_state("no fields") cache[first] = false return { }, { } end if n == 1 then local key = keys[1] if trace_sql then report_state("one field with name %a",key) end p = Cg(Cc(key) * entry) else for i=1,n do local key = keys[i] if trace_sql then report_state("field %s has name %a",i,key) end local s = Cg(Cc(key) * entry) if p then p = p * separator * s else p = s end end end p = Cf(Ct("") * p,rawset) * newline^1 p = skipfirst * Ct(p^0) cache[first] = { parser = p, keys = keys } local entries = lpegmatch(p,data) return entries or { }, keys end end local splitter = skipfirst * Ct((Ct(entry * (separator * entry)^0) * newline^1)^0) local function getdata(data) return lpegmatch(splitter,data) end helpers.splitdata = splitdata helpers.getdata = getdata local function dataprepared(specification) local query = preparetemplate(specification) if query then io.savedata(specification.queryfile,query) os.remove(specification.resultfile) if trace_queries then report_state("query: %s",query) end return true else -- maybe push an error os.remove(specification.queryfile) os.remove(specification.resultfile) end end local function datafetched(specification,runner) local command = replacetemplate(runner,specification) if trace_sql then local t = osclock() report_state("command: %s",command) local okay = os.execute(command) report_state("fetchtime: %.3f sec",osclock()-t) -- not okay under linux return okay == 0 else return os.execute(command) == 0 end end local function dataloaded(specification) if trace_sql then local t = osclock() local data = io.loaddata(specification.resultfile) or "" report_state("datasize: %.3f MB",#data/1024/1024) report_state("loadtime: %.3f sec",osclock()-t) return data else return io.loaddata(specification.resultfile) or "" end end local function dataconverted(data,converter) if converter then local data = getdata(data) if data then data = converter.client(data) end return data elseif trace_sql then local t = osclock() local data, keys = splitdata(data,target) report_state("converttime: %.3f",osclock()-t) report_state("keys: %s ",#keys) report_state("entries: %s ",#data) return data, keys else return splitdata(data) end end -- todo: new, etc local function execute(specification) if trace_sql then report_state("executing client") end if not validspecification(specification) then report_state("error in specification") return end if not dataprepared(specification) then report_state("error in preparation") return end if not datafetched(specification,methods.client.runner) then report_state("error in fetching, query: %s",string.collapsespaces(io.loaddata(specification.queryfile))) return end local data = dataloaded(specification) if not data then report_state("error in loading") return end local data, keys = dataconverted(data,specification.converter) if not data then report_state("error in converting or no data") return end local one = data[1] if one then setmetatable(data,{ __index = one } ) end return data, keys end -- The following is not that (memory) efficient but normally we will use -- the lib anyway. Of course we could make a dedicated converter and/or -- hook into the splitter code but ... it makes not much sense because then -- we can as well move the builder to the library modules. -- -- Here we reuse data as the indexes are the same, unless we hash. local wraptemplate = [[ local converters = utilities.sql.converters local deserialize = utilities.sql.deserialize local tostring = tostring local tonumber = tonumber local booleanstring = string.booleanstring %s return function(data) local target = %s -- data or { } for i=1,#data do local cells = data[i] target[%s] = { %s } end return target end ]] local celltemplate = "cells[%s]" methods.client = { runner = [[mysql --batch --user="%username%" --password="%password%" --host="%host%" --port=%port% --database="%database%" --default-character-set=utf8 < "%queryfile%" > "%resultfile%"]], execute = execute, usesfiles = true, wraptemplate = wraptemplate, celltemplate = celltemplate, } context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-tsp.mkiv0000644000175000017500000004017612130411274024312 0ustar norbertnorbert%D \module %D [ file=tabl-tsp, %D version=2000.10.20, %D title=\CONTEXT\ Table Macros, %D subtitle=Splitting, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Splitting} %D The code in this file is moved here from other places and needs %D a mkiv cleanup. As it mostly targets at tables the code lives in %D the tabl and page namespaces. % work in progress \unprotect %D Although the name resembles floats, and therefore this should be %D a page module, we decided to make it core functionality because the %D table code depends on it. Othrwise there would be too much %D overloading afterwards involved. Actually, the float part is rather %D generic and not that related to floats. % \splitfloat [settings] {\placetable[optional args]{test}} {content} %D When \type {inbetween} is made empty instead of the %D default \type {\page}, we will get delayed flushing %D and text may continue below the graphic. %D %D \starttyping %D \dorecurse{2}{\input tufte } %D %D \splitfloat[lines=auto,inbetween=] %D {\placetable{\dorecurse{5}{test\recurselevel\endgraf}}} %D {\bTABLE[split=yes] %D \bTR \bTD 11 \eTD \bTD \input tufte \eTD \eTR %D \bTR \bTD 12 \eTD \bTD \input zapf \eTD \eTR %D \bTR \bTD 13 \eTD \bTD \input bryson \eTD \eTR %D \bTR \bTD 14 \eTD \bTD test \eTD \eTR %D \bTR \bTD 21 \eTD \bTD \input tufte \eTD \eTR %D \bTR \bTD 22 \eTD \bTD \input zapf \eTD \eTR %D \bTR \bTD 23 \eTD \bTD \input bryson \eTD \eTR %D \bTR \bTD 24 \eTD \bTD test \eTD \eTR %D \bTR \bTD 31 \eTD \bTD \input tufte \eTD \eTR %D \bTR \bTD 32 \eTD \bTD \input zapf \eTD \eTR %D \bTR \bTD 33 \eTD \bTD \input bryson \eTD \eTR %D \bTR \bTD 34 \eTD \bTD test \eTD \eTR %D \eTABLE} %D %D \dorecurse{10}{\input tufte } %D \stoptyping \installcorenamespace{floatsplitting} \installdirectcommandhandler \??floatsplitting {floatsplitting} % \??floatsplitting \setupfloatsplitting [\c!conversion=\v!character, % \v!romannumerals \c!lines=3, \c!before=, \c!inbetween=\page, \c!after=] \newconditional\splitfloatfirstdone \newconditional\somenextsplitofffloat \newconditional\splitfloatdone \newconditional\onlyonesplitofffloat \settrue\onlyonesplitofffloat \newif \ifinsidesplitfloat % will become conditional \newcount \noffloatssplits \newtoks \everysplitfloatsetup \let \extrasplitfloatlines \!!zerocount \let \splitfloatfinalizer \relax \let \floatcaptionsuffix \empty \unexpanded\def\splitfloat {\dosingleempty\page_split_float} \def\page_split_float[#1]#2% nog dubbele refs {\bgroup \global\setfalse\splitfloatdone \aftergroup\page_split_float_check \insidefloattrue \insidesplitfloattrue \setupcurrentfloatsplitting[#1]% \global\noffloatssplits\zerocount \let\floatcaptionsuffix\page_split_float_suffix \edef\extrasplitfloatlines{\floatsplittingparameter\c!lines}% \the\everysplitfloatsetup \def\splitfloatcommand{#2}% \global\settrue \onlyonesplitofffloat \global\setfalse\somenextsplitofffloat \page_floats_push_saved \floatsplittingparameter\c!before \let\next} % \bgroup \unexpanded\def\page_split_float_suffix {\begingroup \usefloatsplittingstyleandcolor\c!style\c!color % only the suffix \convertnumber{\floatsplittingparameter\c!conversion}\noffloatssplits \endgroup} \unexpanded\def\page_split_float_check {\ifconditional\splitfloatdone \splitfloatfinalizer % a weird place (could interfere with flushing) \else \blank \begingroup \tttf \dontleavehmode \getmessage\m!floatblocks{13}\empty \endgroup \blank \showmessage\m!floatblocks{13}\empty \fi} \def\page_split_float_process % nextbox {\ifinsidesplitfloat \expandafter\page_split_float_process_yes \else \expandafter\page_split_float_process_nop \fi} \def\page_split_float_process_yes {\dowithnextboxcs\page_split_float_process_finish\vbox} \def\page_split_float_process_finish {\forgetall \dontcomplain \global\settrue\splitfloatdone % \nodelocationmode\zerocount % bypass auto-renumbering \global\advance\noffloatssplits\plusone \ifcase\noffloatssplits\relax \or \ifconditional\onlyonesplitofffloat \let\floatcaptionsuffix\empty \fi \fi \bgroup \ifconditional\somenextsplitofffloat \notesenabledfalse % best here, experimental, brrr; test with note in caption \fi \splitfloatcommand{\box\nextbox}% \egroup \ifconditional\somenextsplitofffloat \edef\p_inbetween{\floatsplittingparameter\c!inbetween}% \ifx\p_inbetween\empty \ifconditional\splitfloatfirstdone\else\page\fi \else \p_inbetween \fi \else \floatsplittingparameter\c!after \page_floats_pop_saved \page_floats_flush_saved \fi \global\settrue\splitfloatfirstdone} \def\page_split_float_process_nop {\dowithnextboxcs\page_split_float_process_nop_finish\vbox} \def\page_split_float_process_nop_finish {\forgetall \dontcomplain \box\nextbox % maybe an option to unvbox \global\settrue\splitfloatfirstdone} \def\page_split_float_check_content#1% box {\ifinsidesplitfloat % \ifdim\ht#1=\zeropoint % funny: \ifcase does not check for overflow \ifcase\ht#1\relax \global\setfalse\somenextsplitofffloat \else \global\settrue \somenextsplitofffloat \global\setfalse\onlyonesplitofffloat \fi \fi} \def\page_split_float_check_caption#1% depends on page-flt .. pretty messy {\edef\extrasplitfloatlines{\extrasplitfloatlines}% \ifx\extrasplitfloatlines\v!auto \bgroup \forcelocalfloats \setuplocalfloats[\c!before=,\c!after=,\c!inbetween=]% \splitfloatcommand{\hbox to #1{\strut}}% dummy line \setbox\scratchbox\vbox{\flushlocalfloats}% \getnoflines{\ht\scratchbox}% \resetlocalfloats \advance\noflines\minusone % compensate dummy line \normalexpanded{\egroup\noexpand\edef\noexpand\extrasplitfloatlines{\the\noflines}}% \global\settrue\usesamefloatnumber \else \doifnumberelse\extrasplitfloatlines\donothing{\def\extrasplitfloatlines{1}}% \fi} \unexpanded\def\doifnotinsidesplitfloat {\ifinsidesplitfloat \expandafter\gobbleoneargument \fi} %D Table splitter, on top of previous code: % todo: keep tail to rest, so we need a lookahead \newbox\tsplitcontent \newbox\tsplitresult \newbox\tsplithead \newbox\tsplitnext \newbox\tsplittail \newtoks\everyresettsplit \appendtoks \let \tsplitminimumfreelines\!!zerocount \let \tsplitminimumfreespace\!!zeropoint \setbox\tsplitcontent \emptyvbox \setbox\tsplitresult \emptyvbox \setbox\tsplithead \emptyvbox \setbox\tsplitnext \emptyvbox \setbox\tsplittail \emptyvbox \let \tsplitbeforeresult \donothing \let \tsplitafterresult \donothing \let \tsplitinbetween \donothing \let \tsplitbefore \donothing \let \tsplitafter \donothing \let \postprocesstsplit \donothing \to \everyresettsplit \unexpanded\def\resettsplit {\the\everyresettsplit} \resettsplit \def\tsplitdirectwidth{\hsize} \newconditional\c_tabl_split_done \newconditional\c_tabl_split_head \newconditional\c_tabl_split_full \newdimen \d_tabl_split_available \unexpanded\def\handletsplit {\page_split_float_check_caption{\wd\tsplitcontent}% \global\setfalse\splitfloatfirstdone \testpagesync % new, sync, but still tricky [\tsplitminimumfreelines] [\dimexpr\tsplitminimumfreespace+\extrasplitfloatlines\lineheight\relax]% \setbox\scratchbox\vbox{\tsplitinbetween}% \edef\tsplitinbetweenheight{\the\htdp\scratchbox}% etex \setfalse\c_tabl_split_done \doloop\tabl_split_loop_body \global\setfalse\usesamefloatnumber % new, prevent next increment \global\setfalse\splitfloatfirstdone} % we can use this one for tests \def\tabl_split_loop_body {\ifinsidecolumns % brrr, assumes empty columns \global\setfalse\splitfloatfirstdone \d_tabl_split_available\textheight \settrue\c_tabl_split_full \else \ifconditional\splitfloatfirstdone \d_tabl_split_available\textheight \settrue\c_tabl_split_full \else\ifdim\pagegoal<\maxdimen \d_tabl_split_available\dimexpr\pagegoal-\pagetotal\relax \setfalse\c_tabl_split_full \else \d_tabl_split_available\textheight \settrue\c_tabl_split_full \fi\fi \fi \d_tabl_split_available \dimexpr \d_tabl_split_available -\tsplitinbetweenheight -\tsplitminimumfreespace -\extrasplitfloatlines\lineheight \relax \ifdim\htdp\tsplittail>\zeropoint \advance\d_tabl_split_available-\htdp\tsplittail \fi \setbox\tsplitresult\vbox {\ifdim\ht\tsplithead>\zeropoint \unvcopy\tsplithead \tsplitinbetween \fi}% \ifconditional\c_tabl_split_done \else \ifdim\ht\tsplitnext>\zeropoint \setbox\tsplithead\box\tsplitnext \fi \fi \settrue\c_tabl_split_done \ifdim\ht\tsplitresult>\zeropoint \settrue\c_tabl_split_head % table head \else \setfalse\c_tabl_split_head % no tablehead \fi \splittopskip\zeropoint \doloop % inner loop {\setbox\scratchbox\vsplit\tsplitcontent to \onepoint % \lineheight \setbox\scratchbox\vbox{\unvbox\scratchbox}% \ifdim\dimexpr\d_tabl_split_available-\htdp\scratchbox-\htdp\tsplitresult\relax>\zeropoint \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvbox\scratchbox}% \ifvoid\tsplitcontent \exitloop \fi \else\ifconditional\c_tabl_split_head % we only have a tablehead so far \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvbox\scratchbox}% \exitloop \else\ifconditional\c_tabl_split_full % we have text height available, but the (one) cell is too % large to fit, so, in order to avoid loops/deadcycles we do: \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvbox\scratchbox}% \exitloop \else \setbox\tsplitcontent\vbox {\unvbox\scratchbox \tsplitinbetween \ifvoid\tsplitcontent\else\unvbox\tsplitcontent\fi}% \exitloop \fi\fi\fi \setfalse\c_tabl_split_head \setfalse\c_tabl_split_full}% \postprocesstsplit \page_split_float_check_content\tsplitcontent \ifvoid\tsplitcontent \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvcopy\tsplittail}% \page_split_float_process{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}% \doifnotinsidesplitfloat\tsplitafter \endgraf \exitloop \else % hack \ifdim\pagegoal<\maxdimen \pagegoal\dimexpr\pagegoal+\lineheight\relax % etex \fi % brrr \ifdim\ht\tsplitresult>\zeropoint \setbox\tsplitresult\vbox {\unvbox\tsplitresult \tsplitinbetween \unvcopy\tsplittail}% \page_split_float_process{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}% \doifnotinsidesplitfloat\tsplitafter \endgraf \fi \ifinsidecolumns \goodbreak % was \doifnotinsidesplitfloat\goodbreak \else \page % was \doifnotinsidesplitfloat\page \fi \global\settrue\usesamefloatnumber % new, prevent next increment \fi} %D The next one assumes that the split takes place elsewhere. This is %D used in xtables. \let\resetdirecttsplit\resettsplit \unexpanded\def\handledirecttsplit {\page_split_float_check_caption{\tsplitdirectwidth}% \global\setfalse\splitfloatfirstdone \testpagesync % new, sync, but still tricky [\tsplitminimumfreelines] [\dimexpr\tsplitminimumfreespace+\extrasplitfloatlines\lineheight\relax]% \doloop\tabl_split_direct_loop_body \global\setfalse\usesamefloatnumber % new, prevent next increment \global\setfalse\splitfloatfirstdone} % we can use this one for tests \def\tabl_split_direct_loop_body {\ifinsidecolumns \global\setfalse\splitfloatfirstdone \d_tabl_split_available\textheight \else\ifconditional\splitfloatfirstdone \d_tabl_split_available\textheight \else\ifdim\pagegoal<\maxdimen \d_tabl_split_available\dimexpr\pagegoal-\pagetotal\relax \else \d_tabl_split_available\textheight \fi\fi\fi \d_tabl_split_available\dimexpr \d_tabl_split_available -\tsplitminimumfreespace -\extrasplitfloatlines\lineheight \relax \tsplitdirectsplitter\d_tabl_split_available % also sets state \ifdim\ht\tsplitresult>\zeropoint \ifconditional\somenextsplitofffloat \global\setfalse\onlyonesplitofffloat \fi \ifdim\pagegoal<\maxdimen \pagegoal\dimexpr\pagegoal+\lineheight\relax % etex \fi \page_split_float_process{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}% \global\settrue\usesamefloatnumber % new, prevent next increment \endgraf \ifconditional\somenextsplitofffloat \ifinsidecolumns \goodbreak \else \page \fi \fi \global\settrue\splitfloatfirstdone \else\ifconditional\somenextsplitofffloat \ifinsidecolumns \goodbreak \else \page % no room \fi \else \exitloop \fi\fi} \protect \endinput % test cases % \setupTABLE[split=repeat] % % \input tufte \endgraf % \splitfloat[lines=11] % {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}} % {\bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE} % \input tufte \page % % \input tufte \endgraf % \splitfloat[lines=0] % {} % {\bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE} % \input tufte \endgraf \page % % \input tufte \endgraf % \bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE % \input tufte \page % \setuptabulate[split=yes] % % \input tufte \endgraf % \splitfloat[lines=11] % {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}} % {\starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate} % \input tufte \page % % \input tufte \endgraf % \splitfloat[lines=0] % {} % {\starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate} % \input tufte \page % % \input tufte \endgraf % \starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate % \input tufte \page % \setuptables[split=yes] % % \newtoks\TestToks % % \TestToks\emptytoks % \appendtoks\starttablehead\to\TestToks % \dorecurse{3}{\appendtoks\VL head \VL head \VL \SR\to\TestToks} % \appendtoks\stoptablehead\to\TestToks % \appendtoks\starttabletail\to\TestToks % \dorecurse{3}{\appendtoks\VL tail \VL tail \VL \SR\to\TestToks} % \appendtoks\stoptabletail\to\TestToks % \appendtoks\starttables[|c|c|]\to\TestToks % \dorecurse{100}{\appendtoks\VL test \VL test \VL \SR\to\TestToks} % \appendtoks\stoptables\to\TestToks % % \input tufte \endgraf % \splitfloat[lines=auto] % [lines=11] % {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}} % {\the\TestToks} % \input tufte \page % % \input tufte \endgraf % \splitfloat[lines=0] % {} % {\the\TestToks} % \input tufte \page % % \input tufte \endgraf % \the\TestToks % \input tufte \page % % multiple floats % % \starttext % \dorecurse{3}{\input tufte } \endgraf % \dorecurse{5}{\placefigure{}{\framed[height=.5\textheight]{}}} % \splitfloat[lines=auto,inbetween=] % {\placetable{\dorecurse{5}{test\recurselevel\endgraf}}} % {\bTABLE[split=yes] % \bTR \bTD 11 \eTD \bTD \input tufte \eTD \eTR % \bTR \bTD 12 \eTD \bTD \input zapf \eTD \eTR % \bTR \bTD 13 \eTD \bTD \input bryson \eTD \eTR % \bTR \bTD 14 \eTD \bTD test \eTD \eTR % \bTR \bTD 21 \eTD \bTD \input tufte \eTD \eTR % \bTR \bTD 22 \eTD \bTD \input zapf \eTD \eTR % \bTR \bTD 23 \eTD \bTD \input bryson \eTD \eTR % \bTR \bTD 24 \eTD \bTD test \eTD \eTR % \bTR \bTD 31 \eTD \bTD \input tufte \eTD \eTR % \bTR \bTD 32 \eTD \bTD \input zapf \eTD \eTR % \bTR \bTD 33 \eTD \bTD \input bryson \eTD \eTR % \bTR \bTD 34 \eTD \bTD test \eTD \eTR % \eTABLE} % \dorecurse{10}{\input tufte } % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/l-table.lua0000644000175000017500000012712212161703335023722 0ustar norbertnorbertif not modules then modules = { } end modules ['l-table'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, next, tostring, tonumber, ipairs, select = type, next, tostring, tonumber, ipairs, select local table, string = table, string local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove local format, lower, dump = string.format, string.lower, string.dump local getmetatable, setmetatable = getmetatable, setmetatable local getinfo = debug.getinfo local lpegmatch, patterns = lpeg.match, lpeg.patterns local floor = math.floor -- extra functions, some might go (when not used) local stripper = patterns.stripper function table.strip(tab) local lst, l = { }, 0 for i=1,#tab do local s = lpegmatch(stripper,tab[i]) or "" if s == "" then -- skip this one else l = l + 1 lst[l] = s end end return lst end function table.keys(t) if t then local keys, k = { }, 0 for key, _ in next, t do k = k + 1 keys[k] = key end return keys else return { } end end local function compare(a,b) local ta, tb = type(a), type(b) -- needed, else 11 < 2 if ta == tb then return a < b else return tostring(a) < tostring(b) end end local function sortedkeys(tab) if tab then local srt, category, s = { }, 0, 0 -- 0=unknown 1=string, 2=number 3=mixed for key,_ in next, tab do s = s + 1 srt[s] = key if category == 3 then -- no further check else local tkey = type(key) if tkey == "string" then category = (category == 2 and 3) or 1 elseif tkey == "number" then category = (category == 1 and 3) or 2 else category = 3 end end end if category == 0 or category == 3 then sort(srt,compare) else sort(srt) end return srt else return { } end end local function sortedhashkeys(tab,cmp) -- fast one if tab then local srt, s = { }, 0 for key,_ in next, tab do if key then s= s + 1 srt[s] = key end end sort(srt,cmp) return srt else return { } end end function table.allkeys(t) local keys = { } for k, v in next, t do for k, v in next, v do keys[k] = true end end return sortedkeys(keys) end table.sortedkeys = sortedkeys table.sortedhashkeys = sortedhashkeys local function nothing() end local function sortedhash(t,cmp) if t then local s if cmp then -- it would be nice if the sort function would accept a third argument (or nicer, an optional first) s = sortedhashkeys(t,function(a,b) return cmp(t,a,b) end) else s = sortedkeys(t) -- the robust one end local n = 0 local function kv(s) n = n + 1 local k = s[n] return k, t[k] end return kv, s else return nothing end end table.sortedhash = sortedhash table.sortedpairs = sortedhash -- obsolete function table.append(t,list) local n = #t for i=1,#list do n = n + 1 t[n] = list[i] end return t end function table.prepend(t, list) local nl = #list local nt = nl + #t for i=#t,1,-1 do t[nt] = t[i] nt = nt - 1 end for i=1,#list do t[i] = list[i] end return t end -- function table.merge(t, ...) -- first one is target -- t = t or { } -- local lst = { ... } -- for i=1,#lst do -- for k, v in next, lst[i] do -- t[k] = v -- end -- end -- return t -- end function table.merge(t, ...) -- first one is target t = t or { } for i=1,select("#",...) do for k, v in next, (select(i,...)) do t[k] = v end end return t end -- function table.merged(...) -- local tmp, lst = { }, { ... } -- for i=1,#lst do -- for k, v in next, lst[i] do -- tmp[k] = v -- end -- end -- return tmp -- end function table.merged(...) local t = { } for i=1,select("#",...) do for k, v in next, (select(i,...)) do t[k] = v end end return t end -- function table.imerge(t, ...) -- local lst, nt = { ... }, #t -- for i=1,#lst do -- local nst = lst[i] -- for j=1,#nst do -- nt = nt + 1 -- t[nt] = nst[j] -- end -- end -- return t -- end function table.imerge(t, ...) local nt = #t for i=1,select("#",...) do local nst = select(i,...) for j=1,#nst do nt = nt + 1 t[nt] = nst[j] end end return t end -- function table.imerged(...) -- local tmp, ntmp, lst = { }, 0, {...} -- for i=1,#lst do -- local nst = lst[i] -- for j=1,#nst do -- ntmp = ntmp + 1 -- tmp[ntmp] = nst[j] -- end -- end -- return tmp -- end function table.imerged(...) local tmp, ntmp = { }, 0 for i=1,select("#",...) do local nst = select(i,...) for j=1,#nst do ntmp = ntmp + 1 tmp[ntmp] = nst[j] end end return tmp end local function fastcopy(old,metatabletoo) -- fast one if old then local new = { } for k, v in next, old do if type(v) == "table" then new[k] = fastcopy(v,metatabletoo) -- was just table.copy else new[k] = v end end if metatabletoo then -- optional second arg local mt = getmetatable(old) if mt then setmetatable(new,mt) end end return new else return { } end end -- todo : copy without metatable local function copy(t, tables) -- taken from lua wiki, slightly adapted tables = tables or { } local tcopy = {} if not tables[t] then tables[t] = tcopy end for i,v in next, t do -- brrr, what happens with sparse indexed if type(i) == "table" then if tables[i] then i = tables[i] else i = copy(i, tables) end end if type(v) ~= "table" then tcopy[i] = v elseif tables[v] then tcopy[i] = tables[v] else tcopy[i] = copy(v, tables) end end local mt = getmetatable(t) if mt then setmetatable(tcopy,mt) end return tcopy end table.fastcopy = fastcopy table.copy = copy function table.derive(parent) -- for the moment not public local child = { } if parent then setmetatable(child,{ __index = parent }) end return child end function table.tohash(t,value) local h = { } if t then if value == nil then value = true end for _, v in next, t do -- no ipairs here h[v] = value end end return h end function table.fromhash(t) local hsh, h = { }, 0 for k, v in next, t do -- no ipairs here if v then h = h + 1 hsh[h] = k end end return hsh end local noquotes, hexify, handle, reduce, compact, inline, functions local reserved = table.tohash { -- intercept a language inconvenience: no reserved words as key 'and', 'break', 'do', 'else', 'elseif', 'end', 'false', 'for', 'function', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat', 'return', 'then', 'true', 'until', 'while', } local function simple_table(t) if #t > 0 then local n = 0 for _,v in next, t do n = n + 1 end if n == #t then local tt, nt = { }, 0 for i=1,#t do local v = t[i] local tv = type(v) if tv == "number" then nt = nt + 1 if hexify then tt[nt] = format("0x%04X",v) else tt[nt] = tostring(v) -- tostring not needed end elseif tv == "boolean" then nt = nt + 1 tt[nt] = tostring(v) elseif tv == "string" then nt = nt + 1 tt[nt] = format("%q",v) else tt = nil break end end return tt end end return nil end -- Because this is a core function of mkiv I moved some function calls -- inline. -- -- twice as fast in a test: -- -- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) ) -- problem: there no good number_to_string converter with the best resolution -- probably using .. is faster than format -- maybe split in a few cases (yes/no hexify) -- todo: %g faster on numbers than %s -- we can speed this up with repeaters and formatters (is indeed faster) local propername = patterns.propername -- was find(name,"^%a[%w%_]*$") local function dummy() end local function do_serialize(root,name,depth,level,indexed) if level > 0 then depth = depth .. " " if indexed then handle(format("%s{",depth)) else local tn = type(name) if tn == "number" then if hexify then handle(format("%s[0x%04X]={",depth,name)) else handle(format("%s[%s]={",depth,name)) end elseif tn == "string" then if noquotes and not reserved[name] and lpegmatch(propername,name) then handle(format("%s%s={",depth,name)) else handle(format("%s[%q]={",depth,name)) end elseif tn == "boolean" then handle(format("%s[%s]={",depth,tostring(name))) else handle(format("%s{",depth)) end end end -- we could check for k (index) being number (cardinal) if root and next(root) then -- local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone) -- if compact then -- -- NOT: for k=1,#root do (we need to quit at nil) -- for k,v in ipairs(root) do -- can we use next? -- if not first then first = k end -- last = last + 1 -- end -- end local first, last = nil, 0 if compact then last = #root for k=1,last do if root[k] == nil then last = k - 1 break end end if last > 0 then first = 1 end end local sk = sortedkeys(root) for i=1,#sk do local k = sk[i] local v = root[k] --~ if v == root then -- circular --~ else local t, tk = type(v), type(k) if compact and first and tk == "number" and k >= first and k <= last then if t == "number" then if hexify then handle(format("%s 0x%04X,",depth,v)) else handle(format("%s %s,",depth,v)) -- %.99g end elseif t == "string" then if reduce and tonumber(v) then handle(format("%s %s,",depth,v)) else handle(format("%s %q,",depth,v)) end elseif t == "table" then if not next(v) then handle(format("%s {},",depth)) elseif inline then -- and #t > 0 local st = simple_table(v) if st then handle(format("%s { %s },",depth,concat(st,", "))) else do_serialize(v,k,depth,level+1,true) end else do_serialize(v,k,depth,level+1,true) end elseif t == "boolean" then handle(format("%s %s,",depth,tostring(v))) elseif t == "function" then if functions then handle(format('%s load(%q),',depth,dump(v))) else handle(format('%s "function",',depth)) end else handle(format("%s %q,",depth,tostring(v))) end elseif k == "__p__" then -- parent if false then handle(format("%s __p__=nil,",depth)) end elseif t == "number" then if tk == "number" then if hexify then handle(format("%s [0x%04X]=0x%04X,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g end elseif tk == "boolean" then if hexify then handle(format("%s [%s]=0x%04X,",depth,tostring(k),v)) else handle(format("%s [%s]=%s,",depth,tostring(k),v)) -- %.99g end elseif noquotes and not reserved[k] and lpegmatch(propername,k) then if hexify then handle(format("%s %s=0x%04X,",depth,k,v)) else handle(format("%s %s=%s,",depth,k,v)) -- %.99g end else if hexify then handle(format("%s [%q]=0x%04X,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g end end elseif t == "string" then if reduce and tonumber(v) then if tk == "number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,v)) else handle(format("%s [%s]=%s,",depth,k,v)) end elseif tk == "boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,v)) else handle(format("%s [%q]=%s,",depth,k,v)) end else if tk == "number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,v)) else handle(format("%s [%s]=%q,",depth,k,v)) end elseif tk == "boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),v)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,v)) else handle(format("%s [%q]=%q,",depth,k,v)) end end elseif t == "table" then if not next(v) then if tk == "number" then if hexify then handle(format("%s [0x%04X]={},",depth,k)) else handle(format("%s [%s]={},",depth,k)) end elseif tk == "boolean" then handle(format("%s [%s]={},",depth,tostring(k))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={},",depth,k)) else handle(format("%s [%q]={},",depth,k)) end elseif inline then local st = simple_table(v) if st then if tk == "number" then if hexify then handle(format("%s [0x%04X]={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%s]={ %s },",depth,k,concat(st,", "))) end elseif tk == "boolean" then handle(format("%s [%s]={ %s },",depth,tostring(k),concat(st,", "))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s={ %s },",depth,k,concat(st,", "))) else handle(format("%s [%q]={ %s },",depth,k,concat(st,", "))) end else do_serialize(v,k,depth,level+1) end else do_serialize(v,k,depth,level+1) end elseif t == "boolean" then if tk == "number" then if hexify then handle(format("%s [0x%04X]=%s,",depth,k,tostring(v))) else handle(format("%s [%s]=%s,",depth,k,tostring(v))) end elseif tk == "boolean" then handle(format("%s [%s]=%s,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%s,",depth,k,tostring(v))) else handle(format("%s [%q]=%s,",depth,k,tostring(v))) end elseif t == "function" then if functions then local f = getinfo(v).what == "C" and dump(dummy) or dump(v) -- local f = getinfo(v).what == "C" and dump(function(...) return v(...) end) or dump(v) if tk == "number" then if hexify then handle(format("%s [0x%04X]=load(%q),",depth,k,f)) else handle(format("%s [%s]=load(%q),",depth,k,f)) end elseif tk == "boolean" then handle(format("%s [%s]=load(%q),",depth,tostring(k),f)) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=load(%q),",depth,k,f)) else handle(format("%s [%q]=load(%q),",depth,k,f)) end end else if tk == "number" then if hexify then handle(format("%s [0x%04X]=%q,",depth,k,tostring(v))) else handle(format("%s [%s]=%q,",depth,k,tostring(v))) end elseif tk == "boolean" then handle(format("%s [%s]=%q,",depth,tostring(k),tostring(v))) elseif noquotes and not reserved[k] and lpegmatch(propername,k) then handle(format("%s %s=%q,",depth,k,tostring(v))) else handle(format("%s [%q]=%q,",depth,k,tostring(v))) end end --~ end end end if level > 0 then handle(format("%s},",depth)) end end -- replacing handle by a direct t[#t+1] = ... (plus test) is not much -- faster (0.03 on 1.00 for zapfino.tma) local function serialize(_handle,root,name,specification) -- handle wins local tname = type(name) if type(specification) == "table" then noquotes = specification.noquotes hexify = specification.hexify handle = _handle or specification.handle or print reduce = specification.reduce or false functions = specification.functions compact = specification.compact inline = specification.inline and compact if functions == nil then functions = true end if compact == nil then compact = true end if inline == nil then inline = compact end else noquotes = false hexify = false handle = _handle or print reduce = false compact = true inline = true functions = true end if tname == "string" then if name == "return" then handle("return {") else handle(name .. "={") end elseif tname == "number" then if hexify then handle(format("[0x%04X]={",name)) else handle("[" .. name .. "]={") end elseif tname == "boolean" then if name then handle("return {") else handle("{") end else handle("t={") end if root then -- The dummy access will initialize a table that has a delayed initialization -- using a metatable. (maybe explicitly test for metatable) if getmetatable(root) then -- todo: make this an option, maybe even per subtable local dummy = root._w_h_a_t_e_v_e_r_ root._w_h_a_t_e_v_e_r_ = nil end -- Let's forget about empty tables. if next(root) then do_serialize(root,name,"",0) end end handle("}") end -- -- This is some 20% faster than using format (because formatters are much faster) but -- -- of course, inlining the format using .. is then again faster .. anyway, as we do -- -- some pretty printing as well there is not that much to gain unless we make a 'fast' -- -- ugly variant as well. But, we would have to move the formatter to l-string then. -- local formatters = string.formatters -- local function do_serialize(root,name,level,indexed) -- if level > 0 then -- if indexed then -- handle(formatters["%w{"](level)) -- else -- local tn = type(name) -- if tn == "number" then -- if hexify then -- handle(formatters["%w[%04H]={"](level,name)) -- else -- handle(formatters["%w[%s]={"](level,name)) -- end -- elseif tn == "string" then -- if noquotes and not reserved[name] and lpegmatch(propername,name) then -- handle(formatters["%w%s={"](level,name)) -- else -- handle(formatters["%w[%q]={"](level,name)) -- end -- elseif tn == "boolean" then -- handle(formatters["%w[%S]={"](level,name)) -- else -- handle(formatters["%w{"](level)) -- end -- end -- end -- -- we could check for k (index) being number (cardinal) -- if root and next(root) then -- -- local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone) -- -- if compact then -- -- -- NOT: for k=1,#root do (we need to quit at nil) -- -- for k,v in ipairs(root) do -- can we use next? -- -- if not first then first = k end -- -- last = last + 1 -- -- end -- -- end -- local first, last = nil, 0 -- if compact then -- last = #root -- for k=1,last do -- if root[k] == nil then -- last = k - 1 -- break -- end -- end -- if last > 0 then -- first = 1 -- end -- end -- local sk = sortedkeys(root) -- for i=1,#sk do -- local k = sk[i] -- local v = root[k] -- --~ if v == root then -- -- circular -- --~ else -- local t, tk = type(v), type(k) -- if compact and first and tk == "number" and k >= first and k <= last then -- if t == "number" then -- if hexify then -- handle(formatters["%w %04H,"](level,v)) -- else -- handle(formatters["%w %s,"](level,v)) -- %.99g -- end -- elseif t == "string" then -- if reduce and tonumber(v) then -- handle(formatters["%w %s,"](level,v)) -- else -- handle(formatters["%w %q,"](level,v)) -- end -- elseif t == "table" then -- if not next(v) then -- handle(formatters["%w {},"](level)) -- elseif inline then -- and #t > 0 -- local st = simple_table(v) -- if st then -- handle(formatters["%w { %, t },"](level,st)) -- else -- do_serialize(v,k,level+1,true) -- end -- else -- do_serialize(v,k,level+1,true) -- end -- elseif t == "boolean" then -- handle(formatters["%w %S,"](level,v)) -- elseif t == "function" then -- if functions then -- handle(formatters['%w load(%q),'](level,dump(v))) -- else -- handle(formatters['%w "function",'](level)) -- end -- else -- handle(formatters["%w %Q,"](level,v)) -- end -- elseif k == "__p__" then -- parent -- if false then -- handle(formatters["%w __p__=nil,"](level)) -- end -- elseif t == "number" then -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]=%04H,"](level,k,v)) -- else -- handle(formatters["%w [%s]=%s,"](level,k,v)) -- %.99g -- end -- elseif tk == "boolean" then -- if hexify then -- handle(formatters["%w [%S]=%04H,"](level,k,v)) -- else -- handle(formatters["%w [%S]=%s,"](level,k,v)) -- %.99g -- end -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- if hexify then -- handle(formatters["%w %s=%04H,"](level,k,v)) -- else -- handle(formatters["%w %s=%s,"](level,k,v)) -- %.99g -- end -- else -- if hexify then -- handle(formatters["%w [%q]=%04H,"](level,k,v)) -- else -- handle(formatters["%w [%q]=%s,"](level,k,v)) -- %.99g -- end -- end -- elseif t == "string" then -- if reduce and tonumber(v) then -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]=%s,"](level,k,v)) -- else -- handle(formatters["%w [%s]=%s,"](level,k,v)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]=%s,"](level,k,v)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s=%s,"](level,k,v)) -- else -- handle(formatters["%w [%q]=%s,"](level,k,v)) -- end -- else -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]=%q,"](level,k,v)) -- else -- handle(formatters["%w [%s]=%q,"](level,k,v)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]=%q,"](level,k,v)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s=%q,"](level,k,v)) -- else -- handle(formatters["%w [%q]=%q,"](level,k,v)) -- end -- end -- elseif t == "table" then -- if not next(v) then -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]={},"](level,k)) -- else -- handle(formatters["%w [%s]={},"](level,k)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]={},"](level,k)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s={},"](level,k)) -- else -- handle(formatters["%w [%q]={},"](level,k)) -- end -- elseif inline then -- local st = simple_table(v) -- if st then -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]={ %, t },"](level,k,st)) -- else -- handle(formatters["%w [%s]={ %, t },"](level,k,st)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]={ %, t },"](level,k,st)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s={ %, t },"](level,k,st)) -- else -- handle(formatters["%w [%q]={ %, t },"](level,k,st)) -- end -- else -- do_serialize(v,k,level+1) -- end -- else -- do_serialize(v,k,level+1) -- end -- elseif t == "boolean" then -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]=%S,"](level,k,v)) -- else -- handle(formatters["%w [%s]=%S,"](level,k,v)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]=%S,"](level,k,v)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s=%S,"](level,k,v)) -- else -- handle(formatters["%w [%q]=%S,"](level,k,v)) -- end -- elseif t == "function" then -- if functions then -- local f = getinfo(v).what == "C" and dump(dummy) or dump(v) -- -- local f = getinfo(v).what == "C" and dump(function(...) return v(...) end) or dump(v) -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]=load(%q),"](level,k,f)) -- else -- handle(formatters["%w [%s]=load(%q),"](level,k,f)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]=load(%q),"](level,k,f)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s=load(%q),"](level,k,f)) -- else -- handle(formatters["%w [%q]=load(%q),"](level,k,f)) -- end -- end -- else -- if tk == "number" then -- if hexify then -- handle(formatters["%w [%04H]=%Q,"](level,k,v)) -- else -- handle(formatters["%w [%s]=%Q,"](level,k,v)) -- end -- elseif tk == "boolean" then -- handle(formatters["%w [%S]=%Q,"](level,k,v)) -- elseif noquotes and not reserved[k] and lpegmatch(propername,k) then -- handle(formatters["%w %s=%Q,"](level,k,v)) -- else -- handle(formatters["%w [%q]=%Q,"](level,k,v)) -- end -- end -- --~ end -- end -- end -- if level > 0 then -- handle(formatters["%w}"](level)) -- end -- end -- local function serialize(_handle,root,name,specification) -- handle wins -- local tname = type(name) -- if type(specification) == "table" then -- noquotes = specification.noquotes -- hexify = specification.hexify -- handle = _handle or specification.handle or print -- reduce = specification.reduce or false -- functions = specification.functions -- compact = specification.compact -- inline = specification.inline and compact -- if functions == nil then -- functions = true -- end -- if compact == nil then -- compact = true -- end -- if inline == nil then -- inline = compact -- end -- else -- noquotes = false -- hexify = false -- handle = _handle or print -- reduce = false -- compact = true -- inline = true -- functions = true -- end -- if tname == "string" then -- if name == "return" then -- handle("return {") -- else -- handle(name .. "={") -- end -- elseif tname == "number" then -- if hexify then -- handle(format("[0x%04X]={",name)) -- else -- handle("[" .. name .. "]={") -- end -- elseif tname == "boolean" then -- if name then -- handle("return {") -- else -- handle("{") -- end -- else -- handle("t={") -- end -- if root then -- -- The dummy access will initialize a table that has a delayed initialization -- -- using a metatable. (maybe explicitly test for metatable) -- if getmetatable(root) then -- todo: make this an option, maybe even per subtable -- local dummy = root._w_h_a_t_e_v_e_r_ -- root._w_h_a_t_e_v_e_r_ = nil -- end -- -- Let's forget about empty tables. -- if next(root) then -- do_serialize(root,name,0) -- end -- end -- handle("}") -- end -- name: -- -- true : return { } -- false : { } -- nil : t = { } -- string : string = { } -- "return" : return { } -- number : [number] = { } function table.serialize(root,name,specification) local t, n = { }, 0 local function flush(s) n = n + 1 t[n] = s end serialize(flush,root,name,specification) return concat(t,"\n") end -- local a = { e = { 1,2,3,4,5,6}, a = 1, b = 2, c = "ccc", d = { a = 1, b = 2, c = "ccc", d = { a = 1, b = 2, c = "ccc" } } } -- local t = os.clock() -- for i=1,10000 do -- table.serialize(a) -- end -- print(os.clock()-t,table.serialize(a)) table.tohandle = serialize -- sometimes tables are real use (zapfino extra pro is some 85M) in which -- case a stepwise serialization is nice; actually, we could consider: -- -- for line in table.serializer(root,name,reduce,noquotes) do -- ...(line) -- end -- -- so this is on the todo list local maxtab = 2*1024 function table.tofile(filename,root,name,specification) local f = io.open(filename,'w') if f then if maxtab > 1 then local t, n = { }, 0 local function flush(s) n = n + 1 t[n] = s if n > maxtab then f:write(concat(t,"\n"),"\n") -- hm, write(sometable) should be nice t, n = { }, 0 -- we could recycle t if needed end end serialize(flush,root,name,specification) f:write(concat(t,"\n"),"\n") else local function flush(s) f:write(s,"\n") end serialize(flush,root,name,specification) end f:close() io.flush() end end local function flattened(t,f,depth) -- also handles { nil, 1, nil, 2 } if f == nil then f = { } depth = 0xFFFF elseif tonumber(f) then -- assume that only two arguments are given depth = f f = { } elseif not depth then depth = 0xFFFF end for k, v in next, t do if type(k) ~= "number" then if depth > 0 and type(v) == "table" then flattened(v,f,depth-1) else f[#f+1] = v end end end for k=1,#t do local v = t[k] if depth > 0 and type(v) == "table" then flattened(v,f,depth-1) else f[#f+1] = v end end return f end table.flattened = flattened local function unnest(t,f) -- only used in mk, for old times sake if not f then -- and only relevant for token lists f = { } -- this one can become obsolete end for i=1,#t do local v = t[i] if type(v) == "table" then if type(v[1]) == "table" then unnest(v,f) else f[#f+1] = v end else f[#f+1] = v end end return f end function table.unnest(t) -- bad name return unnest(t) end local function are_equal(a,b,n,m) -- indexed if a and b and #a == #b then n = n or 1 m = m or #a for i=n,m do local ai, bi = a[i], b[i] if ai==bi then -- same elseif type(ai) == "table" and type(bi) == "table" then if not are_equal(ai,bi) then return false end else return false end end return true else return false end end local function identical(a,b) -- assumes same structure for ka, va in next, a do local vb = b[ka] if va == vb then -- same elseif type(va) == "table" and type(vb) == "table" then if not identical(va,vb) then return false end else return false end end return true end table.identical = identical table.are_equal = are_equal -- maybe also make a combined one function table.compact(t) -- remove empty tables, assumes subtables if t then for k, v in next, t do if not next(v) then -- no type checking t[k] = nil end end end end function table.contains(t, v) if t then for i=1, #t do if t[i] == v then return i end end end return false end function table.count(t) local n = 0 for k, v in next, t do n = n + 1 end return n end function table.swapped(t,s) -- hash local n = { } if s then for k, v in next, s do n[k] = v end end for k, v in next, t do n[v] = k end return n end function table.mirrored(t) -- hash local n = { } for k, v in next, t do n[v] = k n[k] = v end return n end function table.reversed(t) if t then local tt, tn = { }, #t if tn > 0 then local ttn = 0 for i=tn,1,-1 do ttn = ttn + 1 tt[ttn] = t[i] end end return tt end end function table.reverse(t) if t then local n = #t for i=1,floor(n/2) do local j = n - i + 1 t[i], t[j] = t[j], t[i] end return t end end function table.sequenced(t,sep,simple) -- hash only if not t then return "" end local n = #t local s = { } if n > 0 then -- indexed for i=1,n do s[i] = tostring(t[i]) end else -- hashed n = 0 for k, v in sortedhash(t) do if simple then if v == true then n = n + 1 s[n] = k elseif v and v~= "" then n = n + 1 s[n] = k .. "=" .. tostring(v) end else n = n + 1 s[n] = k .. "=" .. tostring(v) end end end return concat(s,sep or " | ") end function table.print(t,...) if type(t) ~= "table" then print(tostring(t)) else serialize(print,t,...) end end setinspector(function(v) if type(v) == "table" then serialize(print,v,"table") return true end end) -- -- -- obsolete but we keep them for a while and might comment them later -- -- -- -- roughly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack) function table.sub(t,i,j) return { unpack(t,i,j) } end -- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice) function table.is_empty(t) return not t or not next(t) end function table.has_one_entry(t) return t and not next(t,next(t)) end -- new function table.loweredkeys(t) -- maybe utf local l = { } for k, v in next, t do l[lower(k)] = v end return l end -- new, might move (maybe duplicate) function table.unique(old) local hash = { } local new = { } local n = 0 for i=1,#old do local oi = old[i] if not hash[oi] then n = n + 1 new[n] = oi hash[oi] = true end end return new end function table.sorted(t,...) sort(t,...) return t -- still sorts in-place end context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1250.lua0000644000175000017500000000457411571377075024261 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1250'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A, 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B, 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C, 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 } context-2013.05.28.20130704/texmf-dist/tex/context/base/page-flw.mkii0000644000175000017500000000655211754241457024270 0ustar norbertnorbert%D \module %D [ file=page-flw, %D version=2003.04.19, % from test-002 (1997) profile experiment %D title=\CONTEXT\ Page Macros, %D subtitle=Text Flows, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Text Flows} %D This is high experimental and especially flushing may change (proper %D spacing is the driving force here). \unprotect \def\definetextflow {\dodoubleempty\dodefinetextflow} \def\dodefinetextflow[#1][#2]% flow settings {\iffirstargument \doiftextflowcollectorelse{#1} {\setbox\textflowcollector{#1}\emptybox} {\@EA\newbox\csname\??tx:c:#1\endcsname}% \getparameters[\??tx:p:#1] [\c!width=\hsize,\c!style=,#2]% \fi} \def\textflowparameter#1#2{\csname\??tx:p:#1#2\endcsname} \def\textflowcollector #1{\csname\??tx:c:#1\endcsname} \def\doiftextflowcollectorelse#1{\doifdefinedelse{\??tx:c:#1}} \def\doiftextflowelse#1% {\doiftextflowcollectorelse{#1} {\ifvoid\textflowcollector{#1}% \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} {\secondoftwoarguments}} \def\doiftextflow#1% {\doiftextflowelse{#1}\firstofoneargument\gobbleoneargument} \def\starttextflow[#1]% {\doiftextflowcollectorelse{#1} {\global\setbox\textflowcollector{#1}\vbox \bgroup \unvbox\textflowcollector{#1}% \hsize\textflowparameter{#1}\c!width \doifsomething{\textflowparameter{#1}\c!style}% {\doconvertfont{\textflowparameter{#1}\c!style}}% \def\stoptextflow{\endgraf\egroup}} {\let\stoptextflow\relax}} \def\flushtextflow#1% {\doiftextflow{#1} {\ifdim\ht\textflowcollector{#1}>\vsize \setbox\scratchbox\vsplit\textflowcollector{#1} to \vsize \unvbox\scratchbox \else \unvbox\textflowcollector{#1}% \fi}} \protect \endinput % Example (dutch) % % \stelpapierformaatin [S6] % \steltolerantiein [soepel,rek] % \stelkleurenin [status=start] % \stelvoetin [strut=nee] % \stelwitruimtein [groot] % % \stellayoutin % [rechterrand=5cm,breedte=passend,marge=0pt,randafstand=1cm, % voet=4cm,voetafstand=1cm,hoofd=0cm] % % \stelteksttekstenin[rand][][\vbox{\flushtextflow{alpha}}] % \stelvoettekstenin [rand][][\vbox{\flushtextflow{beta}}] % \stelvoettekstenin [\vbox{\flushtextflow{gamma}}][] % % \definetextflow [alfa] [breedte=\rechterrandbreedte] % \definetextflow [beta] [breedte=\rechterrandbreedte] % \definetextflow [gamma] [breedte=\voethoogte] % % \starttekst % % \dorecurse{50} % {\getrandomnumber{\funny}{0}{8} % \ifcase\funny \starttextflow[alfa] \input tufte.tex \stoptextflow % \or \starttextflow[beta] \input knuth.tex \stoptextflow % \or \starttextflow[gamma] \input materie.tex \stoptextflow % \or {\bf TUFTE}\quad \input tufte \par % \or {\bf TUFTE}\quad \input tufte \par % \or {\bf KNUTH}\quad \input knuth \par % \or {\bf KNUTH}\quad \input knuth \par % \or {\bf MATERIE}\quad \input materie \par % \else {\bf MATERIE}\quad \input materie \par % \fi} % % \stoptekst context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-pgr.mkii0000644000175000017500000015376411754241457024275 0ustar norbertnorbert%D \module %D [ file=anch-pgr, % split off core-pos %D version=1999.08.01, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Positioning Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Grapics} %D Before we come to graphics support, we have to make sure of %D the reference point on the page. The next macro does so and %D is hooked into the page building routine. \unprotect % in the future, the depth of tail will reflect page depth \ifx\textheight\undefined \def\textheight{\vsize} \fi %D The next macros so some housekeeping. \def\pageanchor{page:0} % for the moment only one pagesize \def\textanchor{text:\realfolio} \def\headanchor{head:\realfolio} % virtual position \def\tailanchor{tail:\realfolio} % virtual position %D Anchors: \def\dopresetpositionanchors % also mkii {\bgroup \!!dimena\ifdim\topskip>\strutht\topskip\else\strutht\fi \!!dimenb\dimexpr\MPy\textanchor+\MPh\textanchor-\!!dimena\relax \!!dimenc\dimexpr\MPy\textanchor+\strutdp\relax \!!dimend\MPx\textanchor \!!dimene\MPw\textanchor \replacepospxywhd\headanchor\realfolio\!!dimend\!!dimenb\!!dimene\!!dimena\strutdp \replacepospxywhd\tailanchor\realfolio\!!dimend\!!dimenc\!!dimene\strutht \strutdp \egroup} \def\presetpositionanchors% compatibility hack (still needed?) {\ifpositioning \dopresetpositionanchors \fi} %D The first version of this module implemented head and tail %D anchors. Currently we stick to just one anchor and derive %D the head and tail anchors from this one. \def\showanchor#1% {\expanded{\writestatus{#1} {\MPp{#1}\string|\MPx{#1}\string|\MPy{#1}\string|% \MPw{#1}\string|\MPh{#1}\string|\MPd{#1}}}} %D We set these anchors before and after each page. \appendtoks \presetpositionanchors \to \beforeeverypage \appendtoks \presetpositionanchors \to \aftereverypage % todo: change with each page size change \def\registerpageposition#1% this one is flushed first ! {\ifpositioning\ifcase\realpageno\or \ifdim\printpaperheight=\paperheight \ifdim\printpaperwidth=\paperwidth % not needed, \else \setbox#1\hbox{\hpos\pageanchor{\box#1}}% \fi \else \setbox#1\ruledhbox{\hpos\pageanchor{\box#1}}% \fi \fi\fi} \def\placepositionanchors % todo : depth pagebox {\ifpositioning \setbox\scratchbox\vbox to \textheight {\simpletopskipcorrection \hbox{\strut\dopositionaction\headanchor}% \vfill \hbox{\strut\dopositionaction\tailanchor}}% \dp\scratchbox\zeropoint \wd\scratchbox\makeupwidth % not \zeropoint, else wrong text backgrounds \hpos\textanchor{\box\scratchbox}% \else \vskip\textheight \fi} %D \macros %D {positionoverlay,startpositionoverlay} %D %D As long as we're dealing with graphics it makes much sense %D to use the available overlay mechanism. For this purpose, we %D define some dedicated overlay extensions. %D %D \startbuffer[sample] %D \defineoverlay [sample] [\positionoverlay{sample}] %D %D \startpositionoverlay{sample} %D \setMPpositiongraphic{A-1}{connectcenter}{from=A-1,to=A-2} %D \stoppositionoverlay %D \stopbuffer %D %D \typebuffer[sample] %D %D \startbuffer[graphic] %D \startMPpositiongraphic{connectcenter} %D path pa, pb ; pair ca, cb ; %D initialize_box(\MPpos{\MPvar{from}}) ; pa := pxy ; ca := cxy ; %D initialize_box(\MPpos{\MPvar{to}}) ; pb := pxy ; cb := cxy ; %D draw pa withcolor red ; %D draw pb withcolor red ; %D draw ca -- cb withcolor blue ; %D anchor_box(\MPanchor{\MPvar{from}}) ; %D \stopMPpositiongraphic %D \stopbuffer %D %D We can best demonstrate this in an example, say: %D %D \startbuffer[text] %D \framed %D [backgroundachtergrond=sample,align=middle,width=7cm] %D {We want to connect \hpos {A-1} {this} word with its %D grammatical cousin \hpos {A-2} {that}.} %D \stopbuffer %D %D \typebuffer[text] %D %D \startlinecorrection %D %\getbuffer[graphic,sample,text] %D \stoplinecorrection %D %D The graphic is defined in the following way, using some %D macros defined in an auxiliary \METAPOST\ module that is %D preloaded. %D %D \typebuffer[graphic] \def\MPanchoridentifier{mpa} % {mp-anchor} \def\MPoverlayposprefix{MO::} % obsolete and wrong anyway % % \long\def\defineMPpositiongraphic#1% % {\long\setvalue{\MPoverlayposprefix#1}} %D The rest of the definitions concerning such overlays may %D look complicated, \let\currentpositionoverlay\empty %D Position actions are automatically executed when a position %D is set. \let\MPanchornumber\realfolio \def\positionoverlay#1% the test prevents too many redundant positions {\ifpositioning % in (not used) text* position layers \vbox to \overlayheight {\doifpositionactionelse{#1::\MPanchoridentifier}% {\edef\MPanchorid{#1::\MPanchoridentifier:\MPanchornumber}% \edef\MPanchor##1{\MPpos{\MPanchorid}}% \the\everyinsertpositionaction \copyposition{#1::\MPanchoridentifier}{#1::\MPanchoridentifier:\MPanchornumber}% \hpos {#1::\MPanchoridentifier:\MPanchornumber}% % this is ok %{\hbox to \overlaywidth{\dopositionaction{#1::\MPanchoridentifier}\hss}}}% % but this one prevents cyclic runs due to % rounding errors {\setbox\scratchbox\hbox to \overlaywidth{\dopositionaction{#1::\MPanchoridentifier}\hss}% \ht\scratchbox\overlayheight \dp\scratchbox\zeropoint \box\scratchbox}}% {\hbox to \overlaywidth{\hss}}% \vfill}% \fi} \def\startpositionoverlay#1% {\iftrialtypesetting % we don't want redundant entries in the list \@EA\gobbleuntil\@EA\stoppositionoverlay \else \def\currentpositionoverlay{#1}% \fi} \def\stoppositionoverlay {\let\currentpositionoverlay\empty} \def\resetpositionoverlay#1% {\dosetpositionaction{#1::\MPanchoridentifier::}{}} %D Here the complication has to do with collecting actions %D for later execution. This collection is especially handy %D when we want to move actions to a specific layer. %D Such series of actions are stored in a macro (the one %D with the funny \type {++}) which is cleaned up after each %D invocation. \newtoks\everycleanpositionaction \newtoks\everyinsertpositionaction \def\cleanuppositionaction#1% not in trialtypesetting {\ifcsname\POSactionprefix#1++\endcsname % \ifundefined{\POSactionprefix#1++}\else \the\everycleanpositionaction \iflocalpositioning \letgvalue{\POSactionprefix#1++}\empty \else \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}% \fi \fi} % \def\cleanuppositionaction#1% not in trialtypesetting % {\ifcsname\POSactionprefix#1++\endcsname % \the\everycleanpositionaction % \iflocalpositioning % \global\expandafter\let\csname\POSactionprefix#1++\endcsname\empty % \else % \global\expandafter\let\csname\POSactionprefix#1++\expandafter\endcsname\csname\POSactionprefix#1++\endcsname % \fi % \fi} \def\handlepositionaction#1\with#2\on#3% {\bgroup \ifx\currentpositionoverlay\empty \edef\!!stringa{#3}% no layer, just pos itself as anchor \else \edef\!!stringa{\currentpositionoverlay::\MPanchoridentifier}% \fi \edef\!!stringc{\POSactionprefix\!!stringa++}% \expanded{\dosetpositionaction{\!!stringa}{\noexpand\getvalue{\!!stringc}}}% \global\let#1\relax \edef\!!stringb{\executeifdefined\!!stringc\empty}% \setxvalue\!!stringc{\!!stringb#1#2}% \egroup} %D The indirectness enables us redefine macros for special %D purposes, like a cleanup. \def\handlepositionboxes#1#2#3% {\handlepositionaction\dohandlepositionboxes\with{#1}{#2}{#3}\on{#2}} \def\doinsertpositionboxes#1#2#3% pos tag setups {\ifnum\MPp{#1}=\realpageno\relax % can be sped up \executeifdefined{\MPoverlayposprefix#1}\gobblethreearguments{#1}{#2}{#3}% \fi} \appendtoks \let\dohandlepositionboxes\doinsertpositionboxes % was handle ? \to \everyinsertpositionaction \def\docleanpositionboxes#1#2#3% pos tag setups {\ifnum\MPp{#1}<\realpageno \else \noexpand \dohandlepositionboxes{#1}{#2}{#3}% reinsert \fi} \appendtoks \let\dohandlepositionboxes\docleanpositionboxes \to \everycleanpositionaction %D A position graphic is a normal (non||reused) \METAPOST\ %D graphic, used immediately, with zero dimensions, so that a %D sequence of them does not harm. \newbox\positiongraphicbox \def\startMPpositiongraphic % id setups {\dodoublegroupempty\dostartMPpositiongraphic} \long\def\dostartMPpositiongraphic#1#2#3\stopMPpositiongraphic {\long\setgvalue{MPG:#1}% tag list mpcode {\useMPpositiongraphic{#1}{#2}{#3}}} \let\stopMPpositiongraphic\relax % \def\prepareMPpositionvariables % {\ifundefined{\@@meta self}\setvalue{\@@meta self}{\currentposition}\fi % \ifundefined{\@@meta from}\setvalue{\@@meta from}{\currentposition}\fi} \def\prepareMPpositionvariables {\ifcsname\@@meta self\endcsname\else\setvalue{\@@meta self}{\currentposition}\fi \ifcsname\@@meta from\endcsname\else\setvalue{\@@meta from}{\currentposition}\fi} \newif\ifcollectMPpositiongraphics \collectMPpositiongraphicstrue \long\def\useMPpositiongraphic#1#2#3% {\bgroup \prepareMPvariables{#2}% \prepareMPpositionvariables \enableincludeMPgraphics \ifcollectMPpositiongraphics % no longer needed in mkiv \expanded{\startMPdrawing#3\noexpand\stopMPdrawing}% \global\MPdrawingdonetrue \else\ifx\startMPgraphic\undefined \startMPcode#3\stopMPcode \else \startMPgraphic#3\stopMPgraphic \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}% \deallocateMPslot\currentMPgraphic \placeMPgraphic \fi\fi \egroup} % Now we need a adapted action handler: \def\dopositionaction#1% test saves hash entry in etex {\ifundefined{\POSactionprefix#1::}\else \ifnum\MPp{#1}>\zerocount % new \bgroup \setbox\scratchbox\hbox \bgroup \traceposstring\clap\red{<#1>}% \the\everyinsertpositionaction \the\everypositionaction \ifcollectMPpositiongraphics % can save a lot of run time \pushMPdrawing \MPshiftdrawingtrue \resetMPdrawing \getvalue{\POSactionprefix#1::}% \ifMPdrawingdone \getMPdrawing \fi \resetMPdrawing \popMPdrawing \else \getvalue{\POSactionprefix#1::}% \fi \cleanuppositionaction{#1}% \egroup % smashed is really needed else \smashedbox\scratchbox % we get problems with too big \egroup % overlays (s-pre-0x.tex) \else % shouldn't happen too often \traceposstring\clap\cyan{<#1>}% \fi \fi} \def\MPpositiongraphic {\dodoublegroupempty\doMPpositiongraphic} \def\doMPpositiongraphic#1#2% tag setups {\bgroup \def\@@meta{#1:}% \setupMPvariables[#2]% \prepareMPpositionvariables \MPshiftdrawingtrue \def\doMPpositiongraphic##1##2% {{% new, see (techniek) \def\@@meta{##1:}% \setupMPvariables[#2,##2]% \prepareMPpositionvariables % and needed \getvalue{MPG:##1}}}% temp hack \setbox\positiongraphicbox\hbox {\ignorespaces \executeifdefined{MPM:#1}{\executeifdefined{MPG:#1}\donothing}% \removelastspace}% \smashbox\positiongraphicbox \box\positiongraphicbox \egroup} \long\def\startMPpositionmethod#1#2\stopMPpositionmethod {\long\setgvalue{MPM:#1}{#2}} % todo: var list here \let\stopMPpositionmethod\relax %D Simple one position graphics. \def\setMPpositiongraphic {\dotriplegroupempty\dosetMPpositiongraphic} \def\dosetMPpositiongraphic#1#2#3% pos tag vars {\ifx\currentpositionoverlay\empty \dosetpositionaction{#1}{\MPpositiongraphic{#2}{#3}}% \else % silly can be one \handlepositiongraphics{#1}{#2}{#3}% \fi} \def\handlepositiongraphics#1#2#3% combine with boxes {\handlepositionaction\dohandleMPpositiongraphic\with{#1}{#2}{#3}\on{#2}} \def\doinsertMPpositiongraphic#1#2#3% pos tag setups {\ifnum\MPp{#1}=\realpageno\relax % extra saveguard \def\currentposition{#1}\MPpositiongraphic{#2}{#3}% \fi} \appendtoks \let\dohandleMPpositiongraphic\doinsertMPpositiongraphic \to \everyinsertpositionaction \def\docleanMPpositiongraphic#1#2#3% pos tag setups {\ifnum\MPp{#1}<\realpageno \else \noexpand \dohandleMPpositiongraphic{#1}{#2}{#3}% \fi} \appendtoks \let\dohandleMPpositiongraphic\docleanMPpositiongraphic \to \everycleanpositionaction %D Graphics that span two positions. \def\setMPpositiongraphicrange {\doquadruplegroupempty\dosetMPpositiongraphicrange} \def\dosetMPpositiongraphicrange#1#2#3#4% bpos epos tag vars {\ifx\currentpositionoverlay\empty \dosetpositionaction{#1}{\MPpositiongraphic{#3}{#4}}% \else \handlepositiongraphicsrange{#1}{#2}{#3}{#4}% \fi} \def\handlepositiongraphicsrange#1#2#3#4% {\handlepositionaction\dohandleMPpositiongraphicrange\with{#1}{#2}{#3}{#4}\on{#2}} \def\doinsertMPpositiongraphicrange#1#2#3#4% pos pos tag setups {\ifnum\MPp{#1}\MPp{#2}>\zerocount \iflocalpositioning \donetrue \else \donefalse \ifnum\MPp{#1}=\realpageno \donetrue \else\ifnum\MPp{#2}=\realpageno \donetrue \else\ifnum\MPp{#1}<\realpageno\relax\ifnum\MPp{#2}>\realpageno \donetrue \fi\fi\fi\fi \fi \ifdone \def\currentposition{#1}\MPpositiongraphic{#3}{#4}% \fi \fi} \appendtoks \let\dohandleMPpositiongraphicrange\doinsertMPpositiongraphicrange \to \everyinsertpositionaction \def\docleanMPpositiongraphicrange#1#2#3#4% pos tag setups {\ifnum\MPp{#2}<\realpageno \else \noexpand \dohandleMPpositiongraphicrange{#1}{#2}{#3}{#4}% \fi} \appendtoks \let\dohandleMPpositiongraphicrange\docleanMPpositiongraphicrange \to \everycleanpositionaction % will be overloaded, and/or code below moved to core-box \defineoverlay[\v!text-2][\positionoverlay{\v!text-2}] \defineoverlay[\v!text-1][\positionoverlay{\v!text-1}] \defineoverlay[\v!text+1][\positionoverlay{\v!text+1}] \defineoverlay[\v!text+2][\positionoverlay{\v!text+2}] %D Some of these macros are pretty clever but too complicated %D to be nice. When things are kind of stable I'll clean up %D this mess. %D THIS NEEDS A CLEANUP \setupMPvariables [mpos:box] [linecolor=blue, linewidth=\linewidth, fillcolor=lightgray, filloffset=\!!zeropoint] \startMPpositiongraphic{mpos:box}{fillcolor,linecolor,linewidth} initialize_box(\MPpos{\MPvar{self}}) ; boxfillcolor := \MPvar{fillcolor} ; boxlinecolor := \MPvar{linecolor} ; boxlinewidth := \MPvar{linewidth} ; boxfilloffset := \MPvar{filloffset} ; draw_box ; anchor_box(\MPanchor{\MPvar{self}}) ; \stopMPpositiongraphic \setupMPvariables [mpos:area] [linecolor=blue, linewidth=\linewidth, fillcolor=lightgray, filloffset=\!!zeropoint] \startMPpositiongraphic{mpos:area}{fillcolor,linecolor,linewidth} initialize_area(\MPpos{b:\MPvar{self}},\MPpos{e:\MPvar{self}}) ; boxfillcolor := \MPvar{fillcolor} ; boxlinecolor := \MPvar{linecolor} ; boxlinewidth := \MPvar{linewidth} ; boxfilloffset := \MPvar{filloffset} ; draw_area ; anchor_area(\MPanchor{b:\MPvar{self}}) ; \stopMPpositiongraphic %D This is already cleaned up. % gridtype = 1 => baseline % gridtype = 2 => betweenline \setupMPvariables [mpos:par] [mp=mpos:par:shape, gridtype=0, linetype=1, filltype=1, dashtype=0, % 1 = dashed, 2 = dashed with background %snaptops=true, % not that nice: true/false gridcolor=red, linecolor=blue, fillcolor=lightgray, filloffset=\!!zeropoint, linewidth=\linewidth, gridwidth=\linewidth, gridshift=\!!zeropoint, lineradius=.5\bodyfontsize, dashtype=1] \startuseMPgraphic{mpos:par:shape} \iftracepositions show_par \else draw_par \fi ; \stopuseMPgraphic \startuseMPgraphic{mpos:par:setup} boxgridtype := \MPvar{gridtype} ; boxlinetype := \MPvar{linetype} ; boxfilltype := \MPvar{filltype} ; boxdashtype := \MPvar{dashtype} ; boxgridcolor := \MPvar{gridcolor} ; boxlinecolor := \MPvar{linecolor} ; boxfillcolor := \MPvar{fillcolor} ; boxfilloffset := \MPvar{filloffset} ; boxlinewidth := \MPvar{linewidth} ; boxgridwidth := \MPvar{gridwidth} ; boxgridshift := \MPvar{gridshift} ; boxlineradius := \MPvar{lineradius} ; %snap_multi_par_tops := \MPvar{snaptops} ; \stopuseMPgraphic \startuseMPgraphic{mpos:par:extra} % user stuff, like: % snap_multi_par_tops := false ; \stopuseMPgraphic \ifx\MPparcounter\undefined \newcounter\MPparcounter \fi \def\MPself {\MPvar{self}} \def\MPbself {b:\MPself} \def\MPeself {e:\MPself} \def\MPwself {w:\MPself} \def\MPparanchor{p:\MPparcounter} \def\MPl#1{\MPplus{#1}20} \def\MPr#1{\MPplus{#1}30} \startMPpositionmethod{mpos:par} %%%%%%%%%%% will become obsolete \edef\MPparcounter{\MPv\MPbself{1}{0}}% \doifpositionelse\MPwself {\startMPpositiongraphic{mpos:par}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius} initialize_area_par(\MPpos\MPbself, \MPpos\MPeself, \MPpos\MPwself) ; \includeMPgraphic{mpos:par:setup} ; \includeMPgraphic{mpos:par:extra} ; \includeMPgraphic{\MPvar{mp}} ; anchor_par(\MPanchor\MPbself) ; \stopMPpositiongraphic} {\startMPpositiongraphic{mpos:par}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius} initialize_par(\MPpos\MPbself, \MPpos\MPeself, \MPpos\textanchor, \MPpos\MPparanchor, \MPvv \MPparanchor{0pt,0pt,0pt,0pt,0,0pt}) ; \includeMPgraphic{mpos:par:setup} ; \includeMPgraphic{mpos:par:extra} ; \includeMPgraphic{\MPvar{mp}} ; anchor_par(\MPanchor\MPbself) ; \stopMPpositiongraphic}% \MPpositiongraphic{mpos:par}{}% \stopMPpositionmethod %D The next alternative works in columnsets : % \iftracepositions show\else draw\fi_multi_pars ; \startuseMPgraphic{mpos:par:columnset} \iftracepositions show_multi_pars \else draw_multi_pars \fi ; \stopuseMPgraphic \startuseMPgraphic{mpos:par:sideline}{linecolor,lineoffset} for i=1 upto nofmultipars : fill leftboundary multipars[i] shifted (-\MPvar{lineoffset},0) rightenlarged 1mm withcolor \MPvar{linecolor} ; endfor ; \stopuseMPgraphic \startMPpositionmethod{mpos:par:columnset} \edef\MPparcounter{\MPv\MPbself{1}{0}}% \startMPpositiongraphic{mpos:par}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius} \includeMPgraphic{mpos:par:setup} ; \includeMPgraphic{mpos:par:extra} ; prepare_multi_pars(\MPpos\MPbself,\MPpos\MPeself,\MPpos\MPwself, \MPpos\MPparanchor,\MPvv\MPparanchor{0pt,0pt,0pt,0pt,0,0pt}) ; relocate_multipars(-\MPxy\MPanchorid) ; % inside layerpos \includeMPgraphic{\MPvar{mp}} ; \stopMPpositiongraphic \MPpositiongraphic{mpos:par}{}% \stopMPpositionmethod %D \starttyping %D \setupbackground %D [test] %D [mp=mpos:par:columnset, %D method=mpos:par:columnset] %D \stoptyping %D We need to treat floats in a special way. \startMPinitializations local_multi_par_area:=\iflocalpositioning true\else false\fi; \stopMPinitializations \def\textbackgroundoverlay#1% {\iflocalpositioning\v!local\else\v!text\fi#1} \newcounter\localpositionnumber \def\MPanchornumber {\iflocalpositioning\localpositionnumber\else\realfolio\fi} %D So far for the trickery. \newcount\textbackgrounddepth \appendtoks \expanded{\savecurrentvalue\noexpand\totalnofparbackgrounds{\number\nofparbackgrounds}}% \to \everybye \appendtoks \initializeparbackgrounds \to \everystarttext \ifx\totalnofparbackgrounds\undefined \newcounter\totalnofparbackgrounds \fi \ifx\nofparbackgrounds \undefined \newcount \nofparbackgrounds \fi \def\initializeparbackgrounds {\ifcase\totalnofparbackgrounds\else \enableparpositions \fi} \unexpanded\def\starttextbackground {\bgroup \advance\textbackgrounddepth\plusone \dodoubleempty\dostarttextbackground} \let\dodostarttextbackground\relax \let\dodostoptextbackground \relax \def\currentparbackground{pbg:0} \def\nextparbackground {pbg:1} \def\btbanchor{b:\currentparbackground} \def\etbanchor{e:\currentparbackground} \def\nextbtbanchor{b:\nextparbackground} \def\nextetbanchor{e:\nextparbackground} \def\textbackgroundparameter#1% {\csname\??td\currenttextbackground#1\endcsname} \let\backgroundvariable\textbackgroundparameter % will become obsolete % \definetextbackground[more][state=start,backgroundcolor=red] % location=paragraph % \definetextbackground[test][state=start,backgroundcolor=green] % % \page \placefigure[left]{}{} % % \starttextbackground[test] % \readfile{ward}{}{} % \starttextbackground[more] % \readfile{ward}{}{} % \stoptextbackground % \readfile{ward}{}{} % \stoptextbackground % % \page \placefigure[right]{}{} % % \starttextbackground[test] % \readfile{ward}{}{} % \starttextbackground[more] % \readfile{ward}{}{} % \stoptextbackground % \readfile{ward}{}{} % \stoptextbackground \def\dostarttextbackground[#1][#2]% {\checktextbackgrounds \def\currenttextbackground{#1}% \global\advance\nofparbackgrounds\plusone \edef\currentparbackground{pbg:\number\nofparbackgrounds}% % \bgroup % \advance\nofparbackgrounds\plusone % \xdef\nextparbackground{pbg:\number\nofparbackgrounds}% % \egroup \xdef\nextparbackground{pbg:\number\numexpr\nofparbackgrounds+\plusone\relax}% still xdef ? % todo : \synchonizepositionpage{b:\currentparbackground}{s:\currentparbackground}% \setuptextbackground[#1][#2]% \let\dodostarttextbackground\relax \let\dodostoptextbackground \relax \doif{\textbackgroundparameter\c!state}\v!start{\dopresettextbackground{#1}}% \dodostarttextbackground} % todo \backgroundvariable\c!variant \def\dopresettextbackground#1% todo: \backgroundparameter {\ExpandFirstAfter\processaction % \EFA niet echt nodig [\textbackgroundparameter\c!location] [ \v!text=>\let\dodostarttextbackground\dostarttextbackgroundtxt \let\dodostoptextbackground \dostoptextbackgroundtxt, \v!paragraph=>\let\dodostarttextbackground\dostarttextbackgroundpar \let\dodostoptextbackground \dostoptextbackgroundpar, \v!none=>\let\dodostarttextbackground\relax \let\dodostoptextbackground \relax]% \ifx\dodostarttextbackground\dostarttextbackgroundpar % untested \ifnum\textbackgrounddepth>\plusone % new \let\dodostarttextbackground\dostarttextbackgroundtxt \let\dodostoptextbackground \dostoptextbackgroundtxt \fi \fi \doifelse{\textbackgroundparameter\c!frame}\v!on {\doifelse{\textbackgroundparameter\c!corner}\v!round {\setvalue{\??td#1\c!frame}{2}} {\setvalue{\??td#1\c!frame}{1}}} {\setvalue{\??td#1\c!frame}{0}}% \doifelse{\textbackgroundparameter\c!background}\v!color {\setvalue{\??td#1\c!background}{1}} {\setvalue{\??td#1\c!background}{0}}% %\startpositionoverlay{\v!text\getvalue{\??td#1\c!level}}% \startpositionoverlay{\textbackgroundoverlay{\textbackgroundparameter\c!level}}% \expanded {\setMPpositiongraphicrange % moet veel efficienter {\btbanchor}% {b:\currentparbackground}% {\etbanchor}% {e:\currentparbackground}% {\textbackgroundparameter\c!method}% {self=\currentparbackground, mp=\textbackgroundparameter\c!mp, gridtype=\textbackgroundparameter\c!alternative, filltype=\textbackgroundparameter\c!background, linetype=\textbackgroundparameter\c!frame, dashtype=\textbackgroundparameter{dash}, % to be internationalized gridcolor=\textbackgroundparameter\c!framecolor, linecolor=\textbackgroundparameter\c!framecolor, lineoffset=\textbackgroundparameter\c!frameoffset, fillcolor=\textbackgroundparameter\c!backgroundcolor, filloffset=\textbackgroundparameter\c!backgroundoffset, gridwidth=\textbackgroundparameter\c!rulethickness, gridshift=\textbackgroundparameter\c!voffset, linewidth=\textbackgroundparameter\c!rulethickness, lineradius=\textbackgroundparameter\c!radius}}% \stoppositionoverlay} \def\stoptextbackground {\dodostoptextbackground \carryoverpar\egroup} \def\starttextbackgroundmanual {\dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty \fpos\currentparbackground\ignorespaces} \def\stoptextbackgroundmanual {\tpos\currentparbackground \dostopattributes} \def\dostarttextbackgroundtxt {\ifvmode \dontleavehmode \fi % was leavevmode, brrr \dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty \fpos\currentparbackground\ignorespaces} \def\dostoptextbackgroundtxt {\tpos\currentparbackground \dostopattributes} % keep this simple one, it's used in prikkels and alike % % \def\dostarttextbackgroundpar % {\endgraf % new % \getvalue{\??td\currenttextbackground\c!before}% % \noindent\fpos\currentparbackground\ignorespaces % \bgroup % \nobreak \vskip-\lineheight \nobreak % \doassignsomeskip\getvalue{\??td\currenttextbackground\c!topoffset}\to\scratchskip % \kern\scratchskip\nobreak % \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!leftoffset}}% % \advance\leftskip\leftskipadaption % \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!rightoffset}}% % \advance\rightskip\leftskipadaption % \dostartattributes{\??td\currenttextbackground}\c!style\c!color{}% % \nowhitespace % \seteffectivehsize % \par} % % \def\dostoptextbackgroundpar % {\par % \dostopattributes % \doassignsomeskip\getvalue{\??td\currenttextbackground\c!bottomoffset}\to\scratchskip % \kern\scratchskip\nobreak % \nobreak \vskip-\lineheight \nobreak % \nowhitespace % \egroup % \nobreak \noindent \strut \hfill \kern\zeropoint \tpos\currentparbackground % \endgraf % new % \getvalue{\??td\currenttextbackground\c!after}} \newskip\textbackgroundskip \def\dostarttextbackgroundpar {\endgraf % new \textbackgroundparameter\c!before \noindent \ifgridsnapping \doassignsomeskip\textbackgroundparameter\c!topoffset\to\textbackgroundskip \ifdim\textbackgroundskip>\zeropoint \struttedbox{\hbox{\raise\textbackgroundskip\hbox{\fpos\currentparbackground}}}% \else \fpos\currentparbackground \fi \else \fpos\currentparbackground \fi \bgroup \endgraf % we need a vertical nobreak - 29/06/2004 \nobreak \vskip-\lineheight \nobreak \ifgridsnapping \else \doassignsomeskip\textbackgroundparameter\c!topoffset\to\textbackgroundskip \ifdim\textbackgroundskip>\zeropoint \kern\textbackgroundskip\nobreak \fi \fi \dosetleftskipadaption{\textbackgroundparameter\c!leftoffset}% \advance\leftskip\leftskipadaption \dosetleftskipadaption{\textbackgroundparameter\c!rightoffset}% \advance\rightskip\leftskipadaption % new \dosetraggedcommand{\textbackgroundparameter\c!align}% \raggedcommand % \dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty \nowhitespace \nobreak % new per 23/04/2006 (else potential break when whitespace) \seteffectivehsize \doinhibitblank % \blank[\v!disable]% new \par} \def\dostoptextbackgroundpar {\par \removelastskip % new \dostopattributes \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip \ifdim\lastskip>\zeropoint \advance\textbackgroundskip-\lastskip \fi \ifgridsnapping \else \ifdim\textbackgroundskip>\zeropoint \kern\textbackgroundskip\nobreak \fi \fi \nobreak \vskip-\lineheight \nobreak \nowhitespace \egroup \bgroup \forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM \nobreak \noindent \strut \hfill \kern\zeropoint \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip \ifgridsnapping % experimental, pascal (todo: topoffset in same way) \ifdim\textbackgroundskip>\zeropoint \struttedbox{\hbox{\lower\textbackgroundskip\hbox{\tpos\currentparbackground}}}% \else \tpos\currentparbackground \fi \else \tpos\currentparbackground \fi \egroup \endgraf % new \textbackgroundparameter\c!after} \let\textparpages \!!zeropoint \let\textparheight\!!zeropoint \let\textparwidth \!!zeropoint \def\calculatetextpardimensions {\docalculatetextpardimensions\btbanchor \etbanchor \MPparanchor} \def\calculatenexttextpardimensions {\docalculatetextpardimensions\nextbtbanchor\nextetbanchor\relax} \def\docalculatetextpardimensions#1#2#3% todo: dimexpr {\scratchcounter\MPp#2%\etbanchor \advance\scratchcounter-\MPp#1%\btanchor \edef\textparpages{\the\scratchcounter}% \ifcase\scratchcounter % one page \scratchdimen \MPy#1%\btanchor \advance\scratchdimen-\MPy#2%\etbanchor \else % two or more pages \scratchdimen \MPy#1%\btanchor \advance\scratchdimen-\MPy#2%\etbanchor \advance\scratchdimen-\MPy\textanchor \advance\scratchdimen \MPy\textanchor % - and then + ? \advance\scratchdimen \MPh\textanchor\relax \ifcase\scratchcounter>2 \ifnum\scratchcounter<5 % more pages \scratchdimen\textheight \advance\scratchcounter \minusone \multiply\scratchdimen \scratchcounter \else % keep'm small \scratchdimen5\textheight \fi \fi \fi \edef\textparheight{\the\scratchdimen}% \ifcase\scratchcounter % one page \scratchdimen \MPx#2%\etbanchor \advance\scratchdimen-\MPx#1%\btanchor \else % two or more pages / maybe also hang \ifx#3\relax \scratchdimen\makeupwidth % \textwidth \else \scratchdimen\MPw\MPparanchor \advance\scratchdimen-\MPl\MPparanchor \advance\scratchdimen-\MPr\MPparanchor \fi \fi \edef\textparwidth{\the\scratchdimen}} \def\mintextparheight{4\lineheight} \def\dontsplitnexttextbackground % dangerous but useful {\ifdim\pagetotal>\textheight \else \ifdim\pagegoal=\maxdimen \else \calculatenexttextpardimensions % too tricky % \scratchdimen=\textparheight % \advance\scratchdimen\pagetotal\relax % \ifdim\scratchdimen>\pagegoal % \page % \fi \ifdim\textparheight>\zeropoint \ifdim\textparheight>\mintextparheight\else \page % option \fi \fi \fi \fi} \def\definetextbackground {\dodoubleempty\dodefinetextbackground} \def\dodefinetextbackground[#1][#2]% {\ifsecondargument % why ? \copyparameters[\??td#1][\??td] [\c!state,\c!location,\c!alternative,\c!mp,\c!method, \c!background,\c!backgroundcolor,\c!corner,\c!level, \c!backgroundoffset,\c!before,\c!after,\c!align,dash, % dash not yet internationalized \c!radius,\c!frame,\c!framecolor,\c!rulethickness,\c!voffset,\c!frameoffset, \c!leftoffset,\c!rightoffset,\c!topoffset,\c!bottomoffset]% \getparameters[\??td#1][#2]% \doifvalue{\??td#1\c!state}\v!start\checktextbackgrounds \unexpanded\setvalue{#1}% {\groupedcommand{\starttextbackground[#1]}{\stoptextbackground}}% \setvalue{\e!start#1}{\starttextbackground[#1]}% \setvalue{\e!stop #1}{\stoptextbackground}% \fi} \def\setuptextbackground {\dodoubleargument\dosetuptextbackground} \def\dosetuptextbackground[#1][#2]% {\ifsecondargument \doifelsenothing{#1} {\dodosetuptextbackground{#2}\empty} {\processcommalist[#1]{\dodosetuptextbackground{#2}}}% \else \dodosetuptextbackground{#1}\empty \fi} \def\dodosetuptextbackground#1#2% {\getparameters[\??td#2][#1]% \def\currenttextbackground{#2}% \doifvalue{\??td#2\c!state}\v!start\checktextbackgrounds} \let\currenttextbackground\empty \def\checktextbackgrounds {\ifproductionrun \enabletextarearegistration \enablehiddenbackground \fi} \setuptextbackground [\c!mp=mpos:par:columnset, % buggy: mpos:par:shape \c!method=mpos:par:columnset, % \c!state=\v!start, \c!location=\v!text, \c!leftoffset=\!!zeropoint, % 1em, \c!rightoffset=\textbackgroundparameter\c!leftoffset, \c!topoffset=\!!zeropoint, % \v!medium, \c!bottomoffset=\textbackgroundparameter\c!topoffset, \c!level=-1, \c!alternative=0, \c!align=, dash=0, % to be internationalized \c!background=\v!color, \c!backgroundcolor=lightgray, \c!backgroundoffset=\!!zeropoint, \c!corner=\v!rectangular, \c!radius=.5\bodyfontsize, \c!voffset=\!!zeropoint, \c!frame=\v!on, \c!framecolor=blue, \c!rulethickness=\linewidth] %D As an example we define a grid background: \definetextbackground [\v!grid] [\c!state=\v!stop, \c!location=\v!paragraph, \c!frame=\v!off, \c!framecolor=red, \c!background=, \c!alternative=1] \ifx\basegrid\undefined \else \letvalue\v!grid=\basegrid \fi % lelijk, aanpassen, opties \setupMPvariables [mpos:connect] [linecolor=red, linewidth=1pt] \setupMPvariables [mpos:encircle] [fillcolor=lightgray, filloffset=\!!zeropoint, linecolor=blue, linewidth=1pt] \startuseMPgraphic{mpos:common:ec} path pa ; pair ca ; color lc ; numeric lw ; lw := \MPvar{linewidth} ; lc := \MPvar{linecolor} ; initialize_box(\MPpos{\MPvar{self}}) ; pa := pxy ; ca := cxy ; pa := boundingbox pa enlarged 2lw ; pa := llcorner pa...lrcorner pa...urcorner pa...ulcorner pa...cycle ; drawoptions (withpen pencircle scaled lw withcolor lc) ; \stopuseMPgraphic \startMPpositiongraphic{mpos:encircle}{linecolor,fillcolor,linewidth} \includeMPgraphic{mpos:common:ec} fill pa withcolor \MPvar{fillcolor} ; draw pa ; anchor_box(\MPanchor{\MPvar{self}}) ; \stopMPpositiongraphic \startMPpositiongraphic{mpos:connect}{linecolor,linewidth} path pb, pc ; pair cb, cc ; \includeMPgraphic{mpos:common:ec} initialize_box(\MPpos{\MPvar{to}}) ; pb := pxy ; cb := cxy ; pb := boundingbox pb enlarged 2lw ; pb := llcorner pb...lrcorner pb...urcorner pb...ulcorner pb...cycle ; pc := ca {up} .. {down} cb ; cc := (pc intersection_point pa) ; if intersection_found : pc := pc cutbefore cc ; cc := (pc intersection_point pb) ; if intersection_found : pc := pc cutafter cc ; drawarrow pc ; drawarrow reverse pc ; fi ; fi ; anchor_box(\MPanchor{\MPvar{self}}) ; \stopMPpositiongraphic %D \macros %D {stackposdown, stackposup, stackposleft,stackposright} %D %D A non graphic example of the use of positioning, is to stack %D text in for instance the margin. %D %D \stackposdown \inleft {some text}The text \type {some text} %D goes into the left margin, and \stackposdown \inleft {some %D more}\type {some more} as well. When they overlap, they %D will not touch. %D %D Here we said \type {\stackposdown \inleft{some text}}. Instead %D of \stackposleft \inleft {one}stacking \stackposleft \inleft %D {two}vertically, one can stack horizontally by \stackposleft %D \inleft {three}using \type {\stackposleft}. %D %D We can go in all four directions, using \type {\stackposdown}, %D \type {\stackposup}, \type {\stackposleft} and \type %D {\stackposright}. \def\stackposdistance{.5em} \newcount\currentautopos \newcount\previousautopos \def\POSstackprefix{stack:} \def\dostackposbox#1#2% {\dowithnextbox {#2{\previousautopos\currentautopos \global\advance\currentautopos\plusone \edef\currentposition {\POSstackprefix\number\currentautopos}% \edef\previousposition{\POSstackprefix\number\previousautopos}% \hpos\currentposition{\doifoverlappingelse\currentposition\previousposition{#1}{\flushnextbox}}}}% \hbox} \def\stackposup {\dostackposbox{\raise\lineheight\flushnextbox}} \def\stackposdown {\dostackposbox{\lower\lineheight\flushnextbox}} \def\stackposleft {\dostackposbox{\copy\nextbox\hskip\nextboxwd\hskip\stackposdistance}} \def\stackposright{\dostackposbox{\hskip\stackposdistance\hskip\nextboxwd\flushnextbox}} %D \macros %D {stackeddown} %D %D However, a better implementation is possible with the %D following macro. We now have an extra key \type {stack} for %D margin settings. When set to \type {yes}, this macro comes %D into action. % Because there can be many stacked items in a line and successive lines, we % play dirty and adapt the position and height of the current node so that % this becomes visible to a next pass. % % \startbuffer % \inleft {test 1} test 1 \inleft {test 2} test 2 \endgraf % \inleft {test 3} test 3 % \stopbuffer % \getbuffer \typebuffer \flushstatus \page % % \startbuffer % \inleft {test 1} test 1 \inleft {test 2} test 2 \inleft {test 3} test 3 \endgraf % \inleft {test 4} test 4 % \stopbuffer % \getbuffer \typebuffer \flushstatus \page % % \startbuffer % \inleft {test 1} test 1 \endgraf % \inleft {test 2} test 2 \endgraf % \inleft {test 3} test 3 % \stopbuffer % \getbuffer \typebuffer \flushstatus \page % % \startbuffer % \inleft {test 1\\test 1} test 1 \inleft {test 2} test 2 \endgraf % \inleft {test 3} test 3 % \stopbuffer % \getbuffer \typebuffer \flushstatus \page % % \startbuffer % \inleft {test 1\\test 1\\test 1\\test 1\\test 1} test 1 \endgraf % test 2 \endgraf % \inleft {test 3} test 3 % \stopbuffer % \getbuffer \typebuffer \flushstatus \page % % \startbuffer % \inleft{test 1} test \inleft{test 2} test \inleft{test 3\\test 3} test % \stopbuffer % \getbuffer \typebuffer \flushstatus \page % % \startbuffer % \inleft{test 1\\test 1\\test 1} test \inleft{test 2\\test 2} test \inleft{test 3\\test 3\\test 3} test \endgraf % \inleft{test 1\\test 1\\test 1} test \inleft{test 2\\test 2} test \inleft{test 3\\test 3\\test 3} test % \stopbuffer % \getbuffer \typebuffer \flushstatus \page \newdimen\laststackvmove % use \scratchdimenone instead of skip \def\stackeddown {\bgroup % this macro assumes a few things and is meant to work for margin notes \dowithnextbox {\global\advance\currentautopos\plusone \global\laststackvmove\zeropoint \hpos{\POSstackprefix\number\currentautopos} {\edef\next {\nextboxht\the\nextboxht \nextboxdp\the\nextboxdp \nextboxwd\the\nextboxwd}% \previousautopos\currentautopos \scratchdimen\zeropoint \scratchcounter\zerocount \doloop {\advance\previousautopos\minusone \edef\currentposition {\POSstackprefix\number\currentautopos}% \edef\previousposition{\POSstackprefix\number\previousautopos}% \ifnum\MPp\currentposition=\MPp\previousposition\relax %\registerstatus{doing \number\currentautopos/\number\previousautopos}% \doifoverlappingelse\currentposition\previousposition {\scratchskip\dimexpr \MPy\currentposition -\MPy\previousposition -\MPd\currentposition % untested +\MPd\previousposition % untested +\MPh\currentposition \relax\relax % second relax realy needed, forgotten while dimexpressing % todo: also take depth into account \ifdim\scratchskip<\scratchdimen %\registerstatus{no \the\scratchskip}% \else %\registerstatus{yes \the\scratchskip}% \scratchdimen\scratchskip \fi}% \donothing % {\registerstatus{next}}% \ifnum\previousautopos<\zerocount\exitloop\fi \else \exitloop \fi}% \ifdim\scratchdimen=\zeropoint \else \bgroup \edef\currentposition{\POSstackprefix\number\currentautopos}% \scratchskip\scratchdimen \advance\scratchskip\MPh\currentposition \scratchdimen-\scratchdimen \advance\scratchdimen\MPy\currentposition %\registerstatus{old \number\currentautopos: \MPy\currentposition/\MPh\currentposition}% \expanded{\replacepospxywhd {\currentposition}{\MPp\currentposition}{\MPx\currentposition}{\the\scratchdimen}% {\MPw\currentposition}{\the\scratchskip}{\MPd\currentposition}}% %\registerstatus{new \number\currentautopos: \MPy\currentposition/\MPh\currentposition}% \egroup \global\laststackvmove\scratchdimen % new \setbox\nextbox\iftracepositions\@EA\ruledhbox\else\@EA\hbox\fi {\lower\scratchdimen\flushnextbox}% \next %\registerstatus{\strut}% \fi \flushnextbox}% \egroup}} %D The next hack make sure that margin texts near faulty %D strutted lines are handled ok. \newif\ifrepositionmarginbox \repositionmarginboxtrue \newcount\currentmarginpos \def\dopositionmarginbox#1% {\bgroup \ifrepositionmarginbox \global\advance\currentmarginpos\plusone %\setposition{\s!margin:\number\currentmarginpos}% not always \ifcase\marginrepositionmethod % nothing \or % nothing \or % stack / page check yet untested \setposition{\s!margin:\number\currentmarginpos}% \scratchdimen\MPy{\s!margin:\number\currentmarginpos}% \global\advance\currentmarginpos\plusone \advance\scratchdimen -\MPy{\s!margin:\number\currentmarginpos}% \advance\scratchdimen -\strutdp % new but bugged % \setbox#1\hbox % {\hskip-\MPx{\s!margin:\number\currentmarginpos}% % \hskip\MPx{head:\realfolio}% % \box#1}% % so far \setbox#1\hbox {\setposition{\s!margin:\number\currentmarginpos}% \raise\scratchdimen\box#1}% \or % move up \setposition{\s!margin:\number\currentmarginpos}% \ifnum\MPp{p:\number\parposcounter}=\MPp{\s!margin:\number\currentmarginpos}\relax \scratchdimen\dimexpr\MPy{p:\number\parposcounter}-\MPy{\s!margin:\number\currentmarginpos}\relax \expanded{\setbox#1\hbox{\raise\scratchdimen\box#1}\ht#1\the\ht#1\dp#1\the\dp#1}% \fi \or % move up, assume end of par \setposition{\s!margin:\number\currentmarginpos}% \ifnum\MPp{p:\number\parposcounter}=\MPp{\s!margin:\number\currentmarginpos}\relax \getnoflines\margincontentheight \advance\noflines\minusone \scratchdimen\noflines\lineheight \else \scratchdimen\dimexpr\MPy{p:\number\parposcounter}-\MPy{\s!margin:\number\currentmarginpos}\relax \fi \expanded{\setbox#1\hbox{\raise\scratchdimen\box#1}\ht#1\the\ht#1\dp#1\the\dp#1}% \fi \dp#1\zeropoint \ht#1\zeropoint \fi \graphicvadjust{\box#1}% \egroup} \chardef\marginrepositionmethod\plusone % sidemethod \chardef\margincontentmethod \plusthree % textmethod % beware: 1 = old method \chardef\marginpagecheckmethod \plusone % splitmethod %D For a right menu, a sequence of calls to \type %D {right_menu_button} is generated. %D %D \starttyping %D right_menu_button (n, p, s=0/1/2, x, y, w, h, d) ; %D \stoptyping %D %D Here, n is the number of the button, s a status variable, %D while the rest is positional info. The status variable is %D 0, 1 or~2: not found, found and found but current page. % 0=not found 1=found 2=current page % geen leeg \newtoks\MPmenutoks \def\MPmenubuttons#1{\the\MPmenutoks} \appendtoks \global\MPmenutoks\emptytoks \to \everyshipout % 0=notfound 1=found 2=currentpage \def\do@@amposition#1#2#3% {\doifelsevalue{\??am#1\c!position}\v!yes {\doglobal\increment\currentamposition \doifnumberelse{#2} {\docheckrealreferencepage{#2}% \global\chardef\currentamrealpage\ifrealreferencepage2\else1\fi} {\doifreferencefoundelse{#2} {\global\chardef\currentamrealpage\ifrealreferencepage2\else1\fi} {\global\chardef\currentamrealpage0}}% % not found \expanded {\doglobal\noexpand\appendtoks #1_menu_button(\currentamposition,\the\currentamrealpage,\MPpos{#1:\currentamposition}) ; \to \MPmenutoks}% \hpos{#1:\currentamposition}{#3}} {#3}} \def\do@@ammenuposition#1% {\ifnum\currentamposition>0 \dowithnextbox{\hpos{menu:#1:\realfolio}{\flushnextbox}}\hbox % \hpos{menu:#1:\realfolio} % also ok if we skip over fi \fi} %D \macros %D {GFC, GTC, GSC} %D %D The next macros extend tables and tabulation with %D backgrounds and position related features. Areas are %D specified with symbolic names, and symbolic references to %D the graphics involved. Each table has its own namespace. \newcount\noftabpositions \newtoks \posXCtoks \def\tbPOSprefix {tbp:\number\noftabpositions:} \def\tablepos {\scratchtoks\posXCtoks \global\posXCtoks\emptytoks \the\scratchtoks} \let\tabulatepos\tablepos \def\dodododoGSC[#1:#2]% {\remappositionframed{#2}{\tbPOSprefix#1}% \bpos{\tbPOSprefix#1}% \doglobal\appendtoks\@EA\epos\@EA{\tbPOSprefix#1}\to\posXCtoks} \def\dododoGSC[#1:#2:#3]% {\doglobal\appendtoks\dodododoGSC[#1:#2]\to\posXCtoks\NC} \def\dodoGSC[#1]% {\def\docommand##1{\dododoGSC[##1:##1]}% \processcommalist[#1]\docommand} \def\dodododoGFC[#1:#2:#3]% {\remappositionframed{#2}{\tbPOSprefix#1}% \bpos{\tbPOSprefix#1}} \def\dododoGFC[#1]% {\def\docommand##1{\dodododoGFC[##1:##1]}% \processcommalist[#1]\docommand} \def\dodoGFC[#1]% {\doglobal\appendtoks\dododoGFC[#1]\to\posXCtoks\NC} \def\dododododoGTC[#1:#2]% {\epos{\tbPOSprefix#1}} \def\dodododoGTC[#1]% {\def\docommand##1{\dododododoGTC[##1:##1]}% \processcommalist[#1]\docommand} \def\dododoGTC[#1]% {\doglobal\appendtoks\dodododoGTC[#1]\to\posXCtoks} \def\dodoGTC[#1]% {\doglobal\appendtoks\dododoGTC[#1]\to\posXCtoks\NC} \def\dodododoXC[#1#2]% {\if#1>\dodoGFC [#2:#2]\else \if#1+\dodoGFC [#2:#2]\else \if#1<\dodoGTC [#2:#2]\else \if#1-\dodoGTC [#2:#2]\else \if#1=\dodoGSC [#2:#2]\else \dodoGSC[#1#2:#1#2]\fi\fi\fi\fi\fi} \def\dododoXC#1% {\dodododoXC[#1]} \def\dodoXC[#1]% {{\let\NC\relax\processcommalist[#1]\dododoXC}} \def\doGSC[#1]{\iffirstargument\dodoGSC[#1]\else\expandafter\NC\fi} \def\doGFC[#1]{\iffirstargument\dodoGFC[#1]\else\expandafter\NC\fi} \def\doGTC[#1]{\iffirstargument\dodoGTC[#1]\else\expandafter\NC\fi} \def\doXC [#1]{\iffirstargument\dodoXC [#1]\else\expandafter\fi\NC} \def\tbGSC{\dosingleempty\doGSC} \def\tbGFC{\dosingleempty\doGFC} \def\tbGTC{\dosingleempty\doGTC} \def\tbXC {\dosingleempty\doXC } %D The amount of code to support tables and tabulation is %D rather minimalistic. \let\tabulatepos\tablepos \def\tabulatenormalpos {\hss\tabulatepos\hss} \def\tabulateequalpos {\setbox\scratchbox\hbox{\tabulateEQ}% \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}% \hskip-\wd\scratchbox \box\scratchbox} \def\tabulatenormalcolumn#1% overloaded {&\iftabulateequal\tabulateequalpos\else\tabulatenormalpos\fi &\global\chardef\tabulatetype#1&} \def\tabulateequalcolumn#1% overloaded {&\tabulateequalpos &\global\chardef\tabulatetype#1&} \appendtoks \global\advance\noftabpositions\plusone \to \everytabulate %D In order to prevent potential clashes with abbreviations, %D postpone the mapping. \appendtoks \let\GSC\tbGSC \let\GFC\tbGFC \let\GTC\tbGTC \let\XC\tbXC \to \everytabulate %D \macros %D {definepositionframed} %D %D The next example show how to provide backgrounds to table %D cells. First we define some framed backgrounds. %D %D \startbuffer %D \definepositionframed[x][background=color,backgroundcolor=red] %D \definepositionframed[y][background=color,backgroundcolor=green] %D \definepositionframed[z][background=color,backgroundcolor=blue] %D \stopbuffer %D %D \typebuffer %D %D % \getbuffer %D %D \startbuffer %D \starttabulate[|c|c|c|] %D \GFC[f:x] this is a small \NC table \NC in which we \NC \FR %D \NC will demonstrate \GFC[g:z] that this \GTC[g] positioning \NC \MR %D \GSC[e:y] mechanism also \GTC[f] works quite well \NC in tables \NC \LR %D \stoptabulate %D \stopbuffer %D %D The table itself defines three areas (a, b and~c) using %D these frames. %D %D \typebuffer %D % \getbuffer %D %D Tables (based on \TABLE) are supported by: \def\normalTABLEsimplebar {\unskip\!ttRightGlue&\tablepos&} % | \def\normalTABLEcomplexbar{\unskip\!ttRightGlue&\omit\tablepos\!ttAlternateVrule} % \| \def\normalTABLEquote {\unskip\!ttRightGlue&\omit\tablepos&} % " \appendtoks \global\advance\noftabpositions\plusone \to \everytable %D Since we don't want nameclashes: \appendtoks \let\GSC\tbGSC \let\GFC\tbGFC \let\GTC\tbGTC \let\XC\tbXC \to \everytable %D In the previous example, we could have provided an overlay to %D the framed definition. A more direct approach is demonstrated %D below: %D %D \startbuffer %D \def\cw#1{\color[white]{#1}} %D %D \startMPpositiongraphic{tableshade} %D initialize_area(\MPpos{\MPvar{from}},\MPpos{\MPvar{to}}) ; %D color c ; c := \MPvar{color} ; %D linear_shade(pxy,0,.4c,.9c) ; %D anchor_area(\MPanchor{\MPvar{from}}) ; %D \stopMPpositiongraphic %D %D \setMPpositiongraphic{b:x}{tableshade}{from=b:x,to=e:x,color=red} %D \setMPpositiongraphic{b:y}{tableshade}{from=b:y,to=e:y,color=green} %D \setMPpositiongraphic{b:z}{tableshade}{from=b:z,to=e:z,color=blue} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D The definition of the table looks about the same as the %D previous one: %D %D \startbuffer %D \starttable[|c|c|c|] %D \GFC[b:z] \cw{this is a small} \NC \cw{table} \NC in which we \NC \FR %D \NC \cw{will demonstrate} \GFC[c:y] \cw{that this} \GTC[c] \cw{positioning} \NC \MR %D \GSC[a:x] \cw{mechanism also} \GTC[b] \cw{works quite well} \NC in tables \NC \LR %D \stoptable %D \stopbuffer %D %D \typebuffer %D %D \getbuffer % \definepositionframed[w][background=color,backgroundcolor=yellow] % \definepositionframed[x][background=color,backgroundcolor=red] % \definepositionframed[y][background=color,backgroundcolor=green] % \definepositionframed[z][background=color,backgroundcolor=blue] % % \starttabulate[|c|c|c|] % \NC this is a small \NC table \NC in which we \NC \FR % \NC will demonstrate \NC that this \NC positioning \NC \MR % \NC mechanism also \NC works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \GFC[f:x] this is a small \GTC table \NC in which we \NC \FR % \NC will demonstrate \GFC[g:z] that this \GTC[g] positioning \NC \MR % \GSC[e:y] mechanism also \GTC[f] works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \GFC[f:x,d:w] this is a small \GTC[d] table \NC in which we \NC \FR % \NC will demonstrate \GFC[g:z] that this \GTC[g] positioning \NC \MR % \GSC[e:y] mechanism also \GTC[f] works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \XC[+f:x] this is a small \XC table \NC in which we \NC \FR % \NC will demonstrate \XC[+g:z] that this \XC[-g] positioning \NC \MR % \XC[=e:y] mechanism also \XC[-f] works quite well \NC in tables \NC \LR % \stoptabulate % % \starttabulate[|c|c|c|] % \XC[+f:x,+d:w] this is a small \XC[-d] table \NC in which we \NC \FR % \NC will demonstrate \XC[+g:z] that this \XC[-g] positioning \NC \MR % \XC[=e:y] mechanism also \XC[-f] works quite well \NC in tables \NC \LR % \stoptabulate % evt [b:x] % % \definepositionframed[x][background=color,fillcolor=red] % \definepositionframed[y][background=color,fillcolor=green] % \definepositionframed[z][background=color,fillcolor=blue] \def\remappositionframed#1#2% from to {\copyposition{b:#1}{b:#2}% \copyposition{e:#1}{e:#2}% \dosetpositionaction{b:#2}{\dopositionaction{b:#1}}} \def\definepositionframed {\dodoubleargument\dodefinepositionframed} \def\dodefinepositionframed[#1][#2]% {\dosetpositionaction{b:#1}{\dopositionframed[#1][#2]}} \def\positionframed {\dodoubleempty\dopositionframed} \def\dopositionframed[#1][#2]% {\bgroup \setbox\scratchbox\hbox {\dimen0=\MPx{e:#1}% \advance\dimen0 -\MPx{b:#1}% \dimen2=\MPy{b:#1}% \advance\dimen2 -\MPy{e:#1}% \advance\dimen2 \MPd{e:#1}% \lower\dimen2\hbox {\advance\dimen2 \MPh{b:#1}% \framed [\c!width=\dimen0,\c!height=\dimen2, \c!offset=\v!overlay,#2]{}}}% \smashedbox\scratchbox \egroup} % \def\sethdistances#1% % {\hbox{\lpos{ml:#1}\hpos{mh:#1}{\strut}\rpos{mr:#1}}} % % \def\gethdistances#1% % {\scratchdimen\MPx{mh:#1}% % \advance\scratchdimen -\MPx{ml#1}% % \edef\lefthdistance{\the\scratchdimen}% % \scratchdimen\MPx{mr:#1}% % \advance\scratchdimen -\MPx{mh:#1}% % \edef\righthdistance{\the\scratchdimen}} \protect \endinput % todo 1: shift down option % \startuseMPgraphic{mpos:par:columnset} % \iftracepositions show_multi_pars \else draw_multi_pars \fi ; % path p ; p := boundingbox currentpicture ; % currentpicture := currentpicture shifted (0,-StrutDepth/2) ; % setbounds currentpicture to p ; % \stopuseMPgraphic \definetextbackground[underline] [location=text,alternative=1,background=,frame=off] \definetextbackground[overstrike] [location=text,alternative=2,background=,frame=off] \definetextbackground[exlines] [location=text,alternative=3,background=,frame=off] \definetextbackground[strikethrough][location=text,alternative=4,background=,frame=off] \definestartstop [underline] [before={\starttextbackground[underline]}, after=\stoptextbackground] \definestartstop [overstrike] [before={\starttextbackground[overstrike]}, after=\stoptextbackground] \definestartstop [exlines] [before={\starttextbackground[exlines]}, after=\stoptextbackground] \definestartstop [strikethrough] [before={\starttextbackground[strikethrough]}, after=\stoptextbackground] \definetextbackground [sideline] [mp=mpos:par:sideline, location=paragraph, framecolor=red, frameoffset=5mm] \definestartstop [sideline] [before={\starttextbackground[sideline]}, after=\stoptextbackground] \starttext \startunderline \input tufte \stopunderline \blank \startoverstrike \input tufte \stopoverstrike \blank \startexlines \input tufte \stopexlines \blank \startstrikethrough \input tufte \stopstrikethrough \blank \startsideline \input tufte \stopsideline \blank \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-mathml.mkii0000644000175000017500000000130011754241457024277 0ustar norbertnorbert%D \module %D [ file=x-mathml, %D version=1999.12.20, %D title=\CONTEXT\ XML Modules, %D subtitle=Loading \MATHML\ Filters, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We have to make sure that some basic entities are %D loaded: \useXMLfilter[ent] %D Then we load the math: \useXMLfilter[mml,mmp,mmc] %D And we also load the whole bunch of entities: % \useXMLfilter[mea,meb,mec,meh,men,meo,mer] % \useXMLfilter[mxa,mxb,mxc,mxh,mxn,mxo,mxr] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/util-lua.lua0000644000175000017500000003043712130411274024132 0ustar norbertnorbertif not modules then modules = { } end modules ['util-lua'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", comment = "the strip code is written by Peter Cawley", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- we will remove the 5.1 code some day soon local rep, sub, byte, dump, format = string.rep, string.sub, string.byte, string.dump, string.format local load, loadfile, type = load, loadfile, type utilities = utilities or {} utilities.lua = utilities.lua or { } local luautilities = utilities.lua local report_lua = logs.reporter("system","lua") local tracestripping = false local forcestupidcompile = true -- use internal bytecode compiler luautilities.stripcode = true -- support stripping when asked for luautilities.alwaysstripcode = false -- saves 1 meg on 7 meg compressed format file (2012.08.12) luautilities.nofstrippedchunks = 0 luautilities.nofstrippedbytes = 0 local strippedchunks = { } -- allocate() luautilities.strippedchunks = strippedchunks luautilities.suffixes = { tma = "tma", tmc = jit and "tmb" or "tmc", lua = "lua", luc = jit and "lub" or "luc", lui = "lui", luv = "luv", luj = "luj", tua = "tua", tuc = "tuc", } -- environment.loadpreprocessedfile can be set to a preprocessor if jit or status.luatex_version >= 74 then local function register(name) if tracestripping then report_lua("stripped bytecode from %a",name or "unknown") end strippedchunks[#strippedchunks+1] = name luautilities.nofstrippedchunks = luautilities.nofstrippedchunks + 1 end local function stupidcompile(luafile,lucfile,strip) local code = io.loaddata(luafile) if code and code ~= "" then code = load(code) if code then code = dump(code,strip and luautilities.stripcode or luautilities.alwaysstripcode) if code and code ~= "" then register(name) io.savedata(lucfile,code) return true, 0 end else report_lua("fatal error %a in file %a",1,luafile) end else report_lua("fatal error %a in file %a",2,luafile) end return false, 0 end -- quite subtle ... doing this wrong incidentally can give more bytes function luautilities.loadedluacode(fullname,forcestrip,name) -- quite subtle ... doing this wrong incidentally can give more bytes name = name or fullname local code = environment.loadpreprocessedfile and environment.loadpreprocessedfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip) == "function" then forcestrip = forcestrip(fullname) end if forcestrip or luautilities.alwaysstripcode then register(name) return load(dump(code,true)), 0 else return code, 0 end elseif luautilities.alwaysstripcode then register(name) return load(dump(code,true)), 0 else return code, 0 end end function luautilities.strippedloadstring(code,forcestrip,name) -- not executed if forcestrip and luautilities.stripcode or luautilities.alwaysstripcode then code = load(code) if not code then report_lua("fatal error %a in file %a",3,name) end register(name) code = dump(code,true) end return load(code), 0 end function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) -- defaults: cleanup=false strip=true report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done = stupidcompile(luafile,lucfile,strip ~= false) if done then report_lua("dumping %a into %a stripped",luafile,lucfile) if cleanup == true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end end return done end function luautilities.loadstripped(...) local l = load(...) if l then return load(dump(l,true)) end end else -- The next function was posted by Peter Cawley on the lua list and strips line -- number information etc. from the bytecode data blob. We only apply this trick -- when we store data tables. Stripping makes the compressed format file about -- 1MB smaller (and uncompressed we save at least 6MB). -- -- You can consider this feature an experiment, so it might disappear. There is -- no noticeable gain in runtime although the memory footprint should be somewhat -- smaller (and the file system has a bit less to deal with). -- -- Begin of borrowed code ... works for Lua 5.1 which LuaTeX currently uses ... local function register(name,before,after) local delta = before - after if tracestripping then report_lua("bytecodes stripped from %a, # before %s, # after %s, delta %s",name,before,after,delta) end strippedchunks[#strippedchunks+1] = name luautilities.nofstrippedchunks = luautilities.nofstrippedchunks + 1 luautilities.nofstrippedbytes = luautilities.nofstrippedbytes + delta return delta end local strip_code_pc if _MAJORVERSION == 5 and _MINORVERSION == 1 then strip_code_pc = function(dump,name) local before = #dump local version, format, endian, int, size, ins, num = byte(dump,5,11) local subint if endian == 1 then subint = function(dump, i, l) local val = 0 for n = l, 1, -1 do val = val * 256 + byte(dump,i + n - 1) end return val, i + l end else subint = function(dump, i, l) local val = 0 for n = 1, l, 1 do val = val * 256 + byte(dump,i + n - 1) end return val, i + l end end local strip_function strip_function = function(dump) local count, offset = subint(dump, 1, size) local stripped, dirty = rep("\0", size), offset + count offset = offset + count + int * 2 + 4 offset = offset + int + subint(dump, offset, int) * ins count, offset = subint(dump, offset, int) for n = 1, count do local t t, offset = subint(dump, offset, 1) if t == 1 then offset = offset + 1 elseif t == 4 then offset = offset + size + subint(dump, offset, size) elseif t == 3 then offset = offset + num end end count, offset = subint(dump, offset, int) stripped = stripped .. sub(dump,dirty, offset - 1) for n = 1, count do local proto, off = strip_function(sub(dump,offset, -1)) stripped, offset = stripped .. proto, offset + off - 1 end offset = offset + subint(dump, offset, int) * int + int count, offset = subint(dump, offset, int) for n = 1, count do offset = offset + subint(dump, offset, size) + size + int * 2 end count, offset = subint(dump, offset, int) for n = 1, count do offset = offset + subint(dump, offset, size) + size end stripped = stripped .. rep("\0", int * 3) return stripped, offset end dump = sub(dump,1,12) .. strip_function(sub(dump,13,-1)) local after = #dump local delta = register(name,before,after) return dump, delta end else strip_code_pc = function(dump,name) return dump, 0 end end -- ... end of borrowed code. -- quite subtle ... doing this wrong incidentally can give more bytes function luautilities.loadedluacode(fullname,forcestrip,name) -- quite subtle ... doing this wrong incidentally can give more bytes local code = environment.loadpreprocessedfile and environment.preprocessedloadfile(fullname) or loadfile(fullname) if code then code() end if forcestrip and luautilities.stripcode then if type(forcestrip) == "function" then forcestrip = forcestrip(fullname) end if forcestrip then local code, n = strip_code_pc(dump(code),name) return load(code), n elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code, 0 end elseif luautilities.alwaysstripcode then return load(strip_code_pc(dump(code),name)) else return code, 0 end end function luautilities.strippedloadstring(code,forcestrip,name) -- not executed local n = 0 if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then code = load(code) if not code then report_lua("fatal error in file %a",name) end code, n = strip_code_pc(dump(code),name) end return load(code), n end local function stupidcompile(luafile,lucfile,strip) local code = io.loaddata(luafile) local n = 0 if code and code ~= "" then code = load(code) if not code then report_lua("fatal error in file %a",luafile) end code = dump(code) if strip then code, n = strip_code_pc(code,luautilities.stripcode or luautilities.alwaysstripcode,luafile) -- last one is reported end if code and code ~= "" then io.savedata(lucfile,code) end end return n end local luac_normal = "texluac -o %q %q" local luac_strip = "texluac -s -o %q %q" function luautilities.compile(luafile,lucfile,cleanup,strip,fallback) -- defaults: cleanup=false strip=true report_lua("compiling %a into %a",luafile,lucfile) os.remove(lucfile) local done = false if strip ~= false then strip = true end if forcestupidcompile then fallback = true elseif strip then done = os.spawn(format(luac_strip, lucfile,luafile)) == 0 else done = os.spawn(format(luac_normal,lucfile,luafile)) == 0 end if not done and fallback then local n = stupidcompile(luafile,lucfile,strip) if n > 0 then report_lua("%a dumped into %a (%i bytes stripped)",luafile,lucfile,n) else report_lua("%a dumped into %a (unstripped)",luafile,lucfile) end cleanup = false -- better see how bad it is done = true -- hm end if done and cleanup == true and lfs.isfile(lucfile) and lfs.isfile(luafile) then report_lua("removing %a",luafile) os.remove(luafile) end return done end luautilities.loadstripped = loadstring end -- local getmetatable, type = getmetatable, type -- -- local types = { } -- -- function luautilities.registerdatatype(d,name) -- types[getmetatable(d)] = name -- end -- -- function luautilities.datatype(d) -- local t = type(d) -- if t == "userdata" then -- local m = getmetatable(d) -- return m and types[m] or "userdata" -- else -- return t -- end -- end -- -- luautilities.registerdatatype(lpeg.P("!"),"lpeg") -- -- print(luautilities.datatype(lpeg.P("oeps"))) context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-low.lua0000644000175000017500000004410612161703335024162 0ustar norbertnorbertif not modules then modules = { } end modules ['mult-low'] = { version = 1.001, comment = "companion to mult-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- for syntax highlighters, only the ones that are for users (boring to collect them) return { ["constants"] = { -- "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", "plushundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", -- -- "endoflinetoken", "outputnewlinechar", -- "emptytoks", "empty", "undefined", -- "voidbox", "emptybox", "emptyvbox", "emptyhbox", -- "bigskipamount", "medskipamount", "smallskipamount", -- "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "etexversion", "pdftexversion", "xetexversion", "xetexrevision", -- "activecatcode", -- "bgroup", "egroup", "endline", -- "conditionaltrue", "conditionalfalse", -- "attributeunsetvalue", -- "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", -- "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", -- "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", -- "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", -- "activemathcharcode", -- "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", -- "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", -- "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vcentergroupcode", "mathchoicegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "vadjustgroupcode", -- "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", -- "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", -- "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathsupdisplay", "mathsupnormal", "mathsupcramped", "mathsubnormal", "mathsubcombined", "mathaxisheight", -- -- maybe a different class -- "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifmodeelse", "doifnotmode", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext","startdocument", "stopdocument", "documentvariable", "setupdocument", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", -- "startTEXpage", "stopTEXpage", -- "startMPpage", "stopMPpage", -- already catched by nested lexer -- "enablemode", "disablemode", "preventmode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", -- "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", -- "mathordcode", "mathopcode", "mathbincode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctcode", "mathalphacode", "mathinnercode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "mathboxcode", "mathchoicecode", "mathaccentcode", "mathradicalcode", -- "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", -- "continueifinputfile", -- "luastringsep", "!!bs", "!!es", }, ["helpers"] = { -- "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "startcontextcode", "stopcontextcode", -- "doifsetupselse", "doifsetups", "doifnotsetups", "setup", "setups", "texsetup", "xmlsetup", "luasetup", "directsetup", "doifelsecommandhandler","doifnotcommandhandler","doifcommandhandler", -- "newmode", "setmode", "resetmode", "newsystemmode", "setsystemmode", "resetsystemmode", "pushsystemmode", "popsystemmode", "booleanmodevalue", -- "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", -- not used -- "then", "begcsname", -- "strippedcsname", -- "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthsargumenttrue", "sixthargumentfalse", "sixtsargumenttrue", -- "doglobal", "dodoglobal", "redoglobal", "resetglobal", -- "donothing", "dontcomplain", "forgetall", -- "donetrue", "donefalse", -- "htdp", "unvoidbox", "hfilll", "vfilll", -- "mathbox", "mathlimop", "mathnolop", "mathnothing", "mathalpha", -- "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", -- "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", -- "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", -- "filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk", -- "scratchcounter", "globalscratchcounter", "scratchdimen", "globalscratchdimen", "scratchskip", "globalscratchskip", "scratchmuskip", "globalscratchmuskip", "scratchtoks", "globalscratchtoks", "scratchbox", "globalscratchbox", -- "availablehsize", "localhsize", "setlocalhsize", -- "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", -- "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", "scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset", -- "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchnx", "scratchny", "scratchmx", "scratchmy", "scratchunicode", -- "scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip", -- "doif", "doifnot", "doifelse", "doifinset", "doifnotinset", "doifinsetelse", "doifnextcharelse", "doifnextoptionalelse", "doifnextbgroupelse", "doifnextparenthesiselse", "doiffastoptionalcheckelse", "doifundefinedelse", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifdimensionelse", "doifnumberelse", "doifnumber", "doifnotnumber", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifinstringelse", "doifassignmentelse", "docheckassignment", -- "tracingall", "tracingnone", "loggingall", -- "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", -- "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "normalspace", -- "executeifdefined", -- "singleexpandafter", "doubleexpandafter", "tripleexpandafter", -- "dontleavehmode", "removelastspace", "removeunwantedspaces", "keepunwantedspaces", -- "wait", "writestatus", "define", "defineexpandable", "redefine", -- "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured", -- "installcorenamespace", -- "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", -- "globallet", "glet", "udef", "ugdef", "uedef", "uxdef", "checked", "unique", -- "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters", -- "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter", -- "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", -- "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect", -- "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", -- "firstofoneunexpanded", -- "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", -- "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "dowith", -- "newconstant", "setnewconstant", "newconditional", "settrue", "setfalse", "setconstant", "newmacro", "setnewmacro", "newfraction", "newsignal", -- "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument", "doquintupleargument", "dosixtupleargument", "doseventupleargument", "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty", "permitspacesbetweengroups", "dontpermitspacesbetweengroups", -- "nopdfcompression", "maximumpdfcompression", "normalpdfcompression", -- "modulonumber", "dividenumber", -- "getfirstcharacter", "doiffirstcharelse", -- "startnointerference", "stopnointerference", -- "twodigits","threedigits", -- "strut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "begstrut", "endstrut", "lineheight", -- "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", -- "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", -- "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", -- "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", -- "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", -- "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", -- "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", -- "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", -- "normalreqno", -- "startimath", "stopimath", "normalstartimath", "normalstopimath", "startdmath", "stopdmath", "normalstartdmath", "normalstopdmath", -- "uncramped", "cramped", "triggermathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette", "mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox", "mathtext", "setmathsmalltextbox", "setmathtextbox", -- "triggerdisplaystyle", "triggertextstyle", "triggerscriptstyle", "triggerscriptscriptstyle", "triggeruncrampedstyle", "triggercrampedstyle", "triggersmallstyle", "triggeruncrampedsmallstyle", "triggercrampedsmallstyle", "triggerbigstyle", "triggeruncrampedbigstyle", "triggercrampedbigstyle", -- "luaexpr", "expdoifelse", "expdoif", "expdoifnot", "expdoifcommonelse", "expdoifinsetelse", -- "ctxdirectlua", "ctxlatelua", "ctxsprint", "ctxwrite", "ctxcommand", "ctxdirectcommand", "ctxlatecommand", "ctxreport", "ctxlua", "luacode", "lateluacode", "directluacode", "registerctxluafile", "ctxloadluafile", "luaversion", "luamajorversion", "luaminorversion", "ctxluacode", "luaconditional", "luaexpanded", "startluaparameterset", "stopluaparameterset", "luaparameterset", "definenamedlua", "obeylualines", "obeyluatokens", "startluacode", "stopluacode", "startlua", "stoplua", -- "carryoverpar", -- "Umathbotaccent", } } context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-imp-ema.mkiv0000644000175000017500000010233511754241457025056 0ustar norbertnorbert%D \module %D [ file=colo-ema, %D version=2003.03.20, %D title=\CONTEXT\ Color Macros, %D subtitle=Emacs Colors, %D author=Peter Rolf, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % author : Peter Rolf % last change : 17 march 2003 % origin : /emacs/etc/rgb.txt % % USAGE: % % - select emacs menu: Edit -> Text Properties -> Display % Colors, if you don't know what I'm talking about % - copy this file to your /texmf/tex/context/user directory % and add "\input colo-emacs" to your tex-file % % IMPORTANT NOTES: % % - all color names are written as ONE word in lowercase % letters (no redundancy as in rgb.txt) so if you want to % use the color "Light Sky Blue"/"light sky blue" it's new % name is lightskyblue % - the grayX values [X=0..100] can only be used with \color % [grayX] % - use it at your own risk :) % % HINT: % % I only include this file (\showcolor [ema]) until I've % found the colors I want. Copy and paste the color % definitions to a seperate file, to decrease compilation % time (540 color definitions). \definecolor [snow] [r=1,g=.980392,b=.980392] \definecolor [ghostwhite] [r=.972549,g=.972549,b=1] \definecolor [whitesmoke] [s=.960784] \definecolor [gainsboro] [s=.862745] \definecolor [floralwhite] [r=1,g=.980392,b=.941176] \definecolor [oldlace] [r=.992157,g=.960784,b=.901961] \definecolor [linen] [r=.980392,g=.941176,b=.901961] \definecolor [antiquewhite] [r=.980392,g=.921569,b=.843137] \definecolor [papayawhip] [r=1,g=.937255,b=.835294] \definecolor [blanchedalmond] [r=1,g=.921569,b=.803922] \definecolor [bisque] [r=1,g=.894118,b=.768627] \definecolor [peachpuff] [r=1,g=.854902,b=.72549] \definecolor [navajowhite] [r=1,g=.870588,b=.678431] \definecolor [moccasin] [r=1,g=.894118,b=.709804] \definecolor [cornsilk] [r=1,g=.972549,b=.862745] \definecolor [ivory] [r=1,g=1,b=.941176] \definecolor [lemonchiffon] [r=1,g=.980392,b=.803922] \definecolor [seashell] [r=1,g=.960784,b=.933333] \definecolor [honeydew] [r=.941176,g=1,b=.941176] \definecolor [mintcream] [r=.960784,g=1,b=.980392] \definecolor [azure] [r=.941176,g=1,b=1] \definecolor [aliceblue] [r=.941176,g=.972549,b=1] \definecolor [lavender] [r=.901961,g=.901961,b=.980392] \definecolor [lavenderblush] [r=1,g=.941176,b=.960784] \definecolor [mistyrose] [r=1,g=.894118,b=.882353] %definecolor[white] [s=1] %definecolor[black] [s=0] \definecolor [darkslategray] [r=.184314,g=.309804,b=.309804] \definecolor [dimgray] [s=.411765] \definecolor [slategray] [r=.439216,g=.501961,b=.564706] \definecolor [lightslategray] [r=.466667,g=.533333,b=.6] \definecolor [gray] [s=.745098] \definecolor [lightgray] [s=.827451] \definecolor [midnightblue] [r=.098039,g=.098039,b=.439216] \definecolor [navy] [b=.501961] \definecolor [navyblue] [navy] \definecolor [cornflowerblue] [r=.392157,g=.584314,b=.929412] \definecolor [darkslateblue] [r=.282353,g=.239216,b=.545098] \definecolor [slateblue] [r=.415686,g=.352941,b=.803922] \definecolor [mediumslateblue] [r=.482353,g=.407843,b=.933333] \definecolor [lightslateblue] [r=.517647,g=.439216,b=1] \definecolor [mediumblue] [b=.803922] \definecolor [royalblue] [r=.254902,g=.411765,b=.882353] %definecolor[blue] [b=1] \definecolor [dodgerblue] [r=.117647,g=.564706,b=1] \definecolor [deepskyblue] [g=.74902,b=1] \definecolor [skyblue] [r=.529412,g=.807843,b=.921569] \definecolor [lightskyblue] [r=.529412,g=.807843,b=.980392] \definecolor [steelblue] [r=.27451,g=.509804,b=.705882] \definecolor [lightsteelblue] [r=.690196,g=.768627,b=.870588] \definecolor [lightblue] [r=.678431,g=.847059,b=.901961] \definecolor [powderblue] [r=.690196,g=.878431,b=.901961] \definecolor [paleturquoise] [r=.686275,g=.933333,b=.933333] \definecolor [darkturquoise] [g=.807843,b=.819608] \definecolor [mediumturquoise] [r=.282353,g=.819608,b=.8] \definecolor [turquoise] [r=.25098,g=.878431,b=.815686] %definecolor[cyan] [g=1,b=1] \definecolor [lightcyan] [r=.878431,g=1,b=1] \definecolor [cadetblue] [r=.372549,g=.619608,b=.627451] \definecolor [mediumaquamarine] [r=.4,g=.803922,b=.666667] \definecolor [aquamarine] [r=.498039,g=1,b=.831373] \definecolor [darkgreen] [g=.392157] \definecolor [darkolivegreen] [r=.333333,g=.419608,b=.184314] \definecolor [darkseagreen] [r=.560784,g=.737255,b=.560784] \definecolor [seagreen] [r=.180392,g=.545098,b=.341176] \definecolor [mediumseagreen] [r=.235294,g=.701961,b=.443137] \definecolor [lightseagreen] [r=.12549,g=.698039,b=.666667] \definecolor [palegreen] [r=.596078,g=.984314,b=.596078] \definecolor [springgreen] [g=1,b=.498039] \definecolor [lawngreen] [r=.486275,g=.988235] %definecolor[green] [g=1] \definecolor [chartreuse] [r=.498039,g=1] \definecolor [mediumspringgreen] [g=.980392,b=.603922] \definecolor [greenyellow] [r=.678431,g=1,b=.184314] \definecolor [limegreen] [r=.196078,g=.803922,b=.196078] \definecolor [yellowgreen] [r=.603922,g=.803922,b=.196078] \definecolor [forestgreen] [r=.133333,g=.545098,b=.133333] \definecolor [olivedrab] [r=.419608,g=.556863,b=.137255] \definecolor [darkkhaki] [r=.741176,g=.717647,b=.419608] \definecolor [khaki] [r=.941176,g=.901961,b=.54902] \definecolor [palegoldenrod] [r=.933333,g=.909804,b=.666667] \definecolor [lightgoldenrodyellow] [r=.980392,g=.980392,b=.823529] \definecolor [lightyellow] [r=1,g=1,b=.878431] %definecolor[yellow] [r=1,g=1] \definecolor [gold] [r=1,g=.843137] \definecolor [lightgoldenrod] [r=.933333,g=.866667,b=.509804] \definecolor [goldenrod] [r=.854902,g=.647059,b=.12549] \definecolor [darkgoldenrod] [r=.721569,g=.52549,b=.043137] \definecolor [rosybrown] [r=.737255,g=.560784,b=.560784] \definecolor [indianred] [r=.803922,g=.360784,b=.360784] \definecolor [saddlebrown] [r=.545098,g=.270588,b=.07451] \definecolor [sienna] [r=.627451,g=.321569,b=.176471] \definecolor [peru] [r=.803922,g=.521569,b=.247059] \definecolor [burlywood] [r=.870588,g=.721569,b=.529412] \definecolor [beige] [r=.960784,g=.960784,b=.862745] \definecolor [wheat] [r=.960784,g=.870588,b=.701961] \definecolor [sandybrown] [r=.956863,g=.643137,b=.376471] \definecolor [tan] [r=.823529,g=.705882,b=.54902] \definecolor [chocolate] [r=.823529,g=.411765,b=.117647] \definecolor [firebrick] [r=.698039,g=.133333,b=.133333] \definecolor [brown] [r=.647059,g=.164706,b=.164706] \definecolor [darksalmon] [r=.913725,g=.588235,b=.478431] \definecolor [salmon] [r=.980392,g=.501961,b=.447059] \definecolor [lightsalmon] [r=1,g=.627451,b=.478431] \definecolor [orange] [r=1,g=.647059] \definecolor [darkorange] [r=1,g=.54902] \definecolor [coral] [r=1,g=.498039,b=.313725] \definecolor [lightcoral] [r=.941176,g=.501961,b=.501961] \definecolor [tomato] [r=1,g=.388235,b=.278431] \definecolor [orangered] [r=1,g=.270588] %definecolor[red] [r=1] \definecolor [hotpink] [r=1,g=.411765,b=.705882] \definecolor [deeppink] [r=1,g=.078431,b=.576471] \definecolor [pink] [r=1,g=.752941,b=.796078] \definecolor [lightpink] [r=1,g=.713725,b=.756863] \definecolor [palevioletred] [r=.858824,g=.439216,b=.576471] \definecolor [maroon] [r=.690196,g=.188235,b=.376471] \definecolor [mediumvioletred] [r=.780392,g=.082353,b=.521569] \definecolor [violetred] [r=.815686,g=.12549,b=.564706] %definecolor[magenta] [r=1,b=1] \definecolor [violet] [r=.933333,g=.509804,b=.933333] \definecolor [plum] [r=.866667,g=.627451,b=.866667] \definecolor [orchid] [r=.854902,g=.439216,b=.839216] \definecolor [mediumorchid] [r=.729412,g=.333333,b=.827451] \definecolor [darkorchid] [r=.6,g=.196078,b=.8] \definecolor [darkviolet] [r=.580392,b=.827451] \definecolor [blueviolet] [r=.541176,g=.168627,b=.886275] \definecolor [purple] [r=.627451,g=.12549,b=.941176] \definecolor [mediumpurple] [r=.576471,g=.439216,b=.858824] \definecolor [thistle] [r=.847059,g=.74902,b=.847059] \definecolor [snow1] [r=1,g=.980392,b=.980392] \definecolor [snow2] [r=.933333,g=.913725,b=.913725] \definecolor [snow3] [r=.803922,g=.788235,b=.788235] \definecolor [snow4] [r=.545098,g=.537255,b=.537255] \definecolor [seashell1] [r=1,g=.960784,b=.933333] \definecolor [seashell2] [r=.933333,g=.898039,b=.870588] \definecolor [seashell3] [r=.803922,g=.772549,b=.74902] \definecolor [seashell4] [r=.545098,g=.52549,b=.509804] \definecolor [antiquewhite1] [r=1,g=.937255,b=.858824] \definecolor [antiquewhite2] [r=.933333,g=.87451,b=.8] \definecolor [antiquewhite3] [r=.803922,g=.752941,b=.690196] \definecolor [antiquewhite4] [r=.545098,g=.513725,b=.470588] \definecolor [bisque1] [r=1,g=.894118,b=.768627] \definecolor [bisque2] [r=.933333,g=.835294,b=.717647] \definecolor [bisque3] [r=.803922,g=.717647,b=.619608] \definecolor [bisque4] [r=.545098,g=.490196,b=.419608] \definecolor [peachpuff1] [r=1,g=.854902,b=.72549] \definecolor [peachpuff2] [r=.933333,g=.796078,b=.678431] \definecolor [peachpuff3] [r=.803922,g=.686275,b=.584314] \definecolor [peachpuff4] [r=.545098,g=.466667,b=.396078] \definecolor [navajowhite1] [r=1,g=.870588,b=.678431] \definecolor [navajowhite2] [r=.933333,g=.811765,b=.631373] \definecolor [navajowhite3] [r=.803922,g=.701961,b=.545098] \definecolor [navajowhite4] [r=.545098,g=.47451,b=.368627] \definecolor [lemonchiffon1] [r=1,g=.980392,b=.803922] \definecolor [lemonchiffon2] [r=.933333,g=.913725,b=.74902] \definecolor [lemonchiffon3] [r=.803922,g=.788235,b=.647059] \definecolor [lemonchiffon4] [r=.545098,g=.537255,b=.439216] \definecolor [cornsilk1] [r=1,g=.972549,b=.862745] \definecolor [cornsilk2] [r=.933333,g=.909804,b=.803922] \definecolor [cornsilk3] [r=.803922,g=.784314,b=.694118] \definecolor [cornsilk4] [r=.545098,g=.533333,b=.470588] \definecolor [ivory1] [r=1,g=1,b=.941176] \definecolor [ivory2] [r=.933333,g=.933333,b=.878431] \definecolor [ivory3] [r=.803922,g=.803922,b=.756863] \definecolor [ivory4] [r=.545098,g=.545098,b=.513725] \definecolor [honeydew1] [r=.941176,g=1,b=.941176] \definecolor [honeydew2] [r=.878431,g=.933333,b=.878431] \definecolor [honeydew3] [r=.756863,g=.803922,b=.756863] \definecolor [honeydew4] [r=.513725,g=.545098,b=.513725] \definecolor [lavenderblush1] [r=1,g=.941176,b=.960784] \definecolor [lavenderblush2] [r=.933333,g=.878431,b=.898039] \definecolor [lavenderblush3] [r=.803922,g=.756863,b=.772549] \definecolor [lavenderblush4] [r=.545098,g=.513725,b=.52549] \definecolor [mistyrose1] [r=1,g=.894118,b=.882353] \definecolor [mistyrose2] [r=.933333,g=.835294,b=.823529] \definecolor [mistyrose3] [r=.803922,g=.717647,b=.709804] \definecolor [mistyrose4] [r=.545098,g=.490196,b=.482353] \definecolor [azure1] [r=.941176,g=1,b=1] \definecolor [azure2] [r=.878431,g=.933333,b=.933333] \definecolor [azure3] [r=.756863,g=.803922,b=.803922] \definecolor [azure4] [r=.513725,g=.545098,b=.545098] \definecolor [slateblue1] [r=.513725,g=.435294,b=1] \definecolor [slateblue2] [r=.478431,g=.403922,b=.933333] \definecolor [slateblue3] [r=.411765,g=.34902,b=.803922] \definecolor [slateblue4] [r=.278431,g=.235294,b=.545098] \definecolor [royalblue1] [r=.282353,g=.462745,b=1] \definecolor [royalblue2] [r=.262745,g=.431373,b=.933333] \definecolor [royalblue3] [r=.227451,g=.372549,b=.803922] \definecolor [royalblue4] [r=.152941,g=.25098,b=.545098] \definecolor [blue1] [blue] \definecolor [blue2] [b=.933333] \definecolor [blue3] [b=.803922] \definecolor [blue4] [b=.545098] \definecolor [dodgerblue1] [r=.117647,g=.564706,b=1] \definecolor [dodgerblue2] [r=.109804,g=.52549,b=.933333] \definecolor [dodgerblue3] [r=.094118,g=.454902,b=.803922] \definecolor [dodgerblue4] [r=.062745,g=.305882,b=.545098] \definecolor [steelblue1] [r=.388235,g=.721569,b=1] \definecolor [steelblue2] [r=.360784,g=.67451,b=.933333] \definecolor [steelblue3] [r=.309804,g=.580392,b=.803922] \definecolor [steelblue4] [r=.211765,g=.392157,b=.545098] \definecolor [deepskyblue1] [g=.74902,b=1] \definecolor [deepskyblue2] [g=.698039,b=.933333] \definecolor [deepskyblue3] [g=.603922,b=.803922] \definecolor [deepskyblue4] [g=.407843,b=.545098] \definecolor [skyblue1] [r=.529412,g=.807843,b=1] \definecolor [skyblue2] [r=.494118,g=.752941,b=.933333] \definecolor [skyblue3] [r=.423529,g=.65098,b=.803922] \definecolor [skyblue4] [r=.290196,g=.439216,b=.545098] \definecolor [lightskyblue1] [r=.690196,g=.886275,b=1] \definecolor [lightskyblue2] [r=.643137,g=.827451,b=.933333] \definecolor [lightskyblue3] [r=.552941,g=.713725,b=.803922] \definecolor [lightskyblue4] [r=.376471,g=.482353,b=.545098] \definecolor [slategray1] [r=.776471,g=.886275,b=1] \definecolor [slategray2] [r=.72549,g=.827451,b=.933333] \definecolor [slategray3] [r=.623529,g=.713725,b=.803922] \definecolor [slategray4] [r=.423529,g=.482353,b=.545098] \definecolor [lightsteelblue1] [r=.792157,g=.882353,b=1] \definecolor [lightsteelblue2] [r=.737255,g=.823529,b=.933333] \definecolor [lightsteelblue3] [r=.635294,g=.709804,b=.803922] \definecolor [lightsteelblue4] [r=.431373,g=.482353,b=.545098] \definecolor [lightblue1] [r=.74902,g=.937255,b=1] \definecolor [lightblue2] [r=.698039,g=.87451,b=.933333] \definecolor [lightblue3] [r=.603922,g=.752941,b=.803922] \definecolor [lightblue4] [r=.407843,g=.513725,b=.545098] \definecolor [lightcyan1] [r=.878431,g=1,b=1] \definecolor [lightcyan2] [r=.819608,g=.933333,b=.933333] \definecolor [lightcyan3] [r=.705882,g=.803922,b=.803922] \definecolor [lightcyan4] [r=.478431,g=.545098,b=.545098] \definecolor [paleturquoise1] [r=.733333,g=1,b=1] \definecolor [paleturquoise2] [r=.682353,g=.933333,b=.933333] \definecolor [paleturquoise3] [r=.588235,g=.803922,b=.803922] \definecolor [paleturquoise4] [r=.4,g=.545098,b=.545098] \definecolor [cadetblue1] [r=.596078,g=.960784,b=1] \definecolor [cadetblue2] [r=.556863,g=.898039,b=.933333] \definecolor [cadetblue3] [r=.478431,g=.772549,b=.803922] \definecolor [cadetblue4] [r=.32549,g=.52549,b=.545098] \definecolor [turquoise1] [g=.960784,b=1] \definecolor [turquoise2] [g=.898039,b=.933333] \definecolor [turquoise3] [g=.772549,b=.803922] \definecolor [turquoise4] [g=.52549,b=.545098] \definecolor [cyan1] [cyan] \definecolor [cyan2] [g=.933333,b=.933333] \definecolor [cyan3] [g=.803922,b=.803922] \definecolor [cyan4] [g=.545098,b=.545098] \definecolor [darkslategray1] [r=.592157,g=1,b=1] \definecolor [darkslategray2] [r=.552941,g=.933333,b=.933333] \definecolor [darkslategray3] [r=.47451,g=.803922,b=.803922] \definecolor [darkslategray4] [r=.321569,g=.545098,b=.545098] \definecolor [aquamarine1] [r=.498039,g=1,b=.831373] \definecolor [aquamarine2] [r=.462745,g=.933333,b=.776471] \definecolor [aquamarine3] [r=.4,g=.803922,b=.666667] \definecolor [aquamarine4] [r=.270588,g=.545098,b=.454902] \definecolor [darkseagreen1] [r=.756863,g=1,b=.756863] \definecolor [darkseagreen2] [r=.705882,g=.933333,b=.705882] \definecolor [darkseagreen3] [r=.607843,g=.803922,b=.607843] \definecolor [darkseagreen4] [r=.411765,g=.545098,b=.411765] \definecolor [seagreen1] [r=.329412,g=1,b=.623529] \definecolor [seagreen2] [r=.305882,g=.933333,b=.580392] \definecolor [seagreen3] [r=.262745,g=.803922,b=.501961] \definecolor [seagreen4] [r=.180392,g=.545098,b=.341176] \definecolor [palegreen1] [r=.603922,g=1,b=.603922] \definecolor [palegreen2] [r=.564706,g=.933333,b=.564706] \definecolor [palegreen3] [r=.486275,g=.803922,b=.486275] \definecolor [palegreen4] [r=.329412,g=.545098,b=.329412] \definecolor [springgreen1] [g=1,b=.498039] \definecolor [springgreen2] [g=.933333,b=.462745] \definecolor [springgreen3] [g=.803922,b=.4] \definecolor [springgreen4] [g=.545098,b=.270588] \definecolor [green1] [green] \definecolor [green2] [g=.933333] \definecolor [green3] [g=.803922] \definecolor [green4] [g=.545098] \definecolor [chartreuse1] [r=.498039,g=1] \definecolor [chartreuse2] [r=.462745,g=.933333] \definecolor [chartreuse3] [r=.4,g=.803922] \definecolor [chartreuse4] [r=.270588,g=.545098] \definecolor [olivedrab1] [r=.752941,g=1,b=.243137] \definecolor [olivedrab2] [r=.701961,g=.933333,b=.227451] \definecolor [olivedrab3] [r=.603922,g=.803922,b=.196078] \definecolor [olivedrab4] [r=.411765,g=.545098,b=.133333] \definecolor [darkolivegreen1] [r=.792157,g=1,b=.439216] \definecolor [darkolivegreen2] [r=.737255,g=.933333,b=.407843] \definecolor [darkolivegreen3] [r=.635294,g=.803922,b=.352941] \definecolor [darkolivegreen4] [r=.431373,g=.545098,b=.239216] \definecolor [khaki1] [r=1,g=.964706,b=.560784] \definecolor [khaki2] [r=.933333,g=.901961,b=.521569] \definecolor [khaki3] [r=.803922,g=.776471,b=.45098] \definecolor [khaki4] [r=.545098,g=.52549,b=.305882] \definecolor [lightgoldenrod1] [r=1,g=.92549,b=.545098] \definecolor [lightgoldenrod2] [r=.933333,g=.862745,b=.509804] \definecolor [lightgoldenrod3] [r=.803922,g=.745098,b=.439216] \definecolor [lightgoldenrod4] [r=.545098,g=.505882,b=.298039] \definecolor [lightyellow1] [r=1,g=1,b=.878431] \definecolor [lightyellow2] [r=.933333,g=.933333,b=.819608] \definecolor [lightyellow3] [r=.803922,g=.803922,b=.705882] \definecolor [lightyellow4] [r=.545098,g=.545098,b=.478431] \definecolor [yellow1] [yellow] \definecolor [yellow2] [r=.933333,g=.933333] \definecolor [yellow3] [r=.803922,g=.803922] \definecolor [yellow4] [r=.545098,g=.545098] \definecolor [gold1] [r=1,g=.843137] \definecolor [gold2] [r=.933333,g=.788235] \definecolor [gold3] [r=.803922,g=.678431] \definecolor [gold4] [r=.545098,g=.458824] \definecolor [goldenrod1] [r=1,g=.756863,b=.145098] \definecolor [goldenrod2] [r=.933333,g=.705882,b=.133333] \definecolor [goldenrod3] [r=.803922,g=.607843,b=.113725] \definecolor [goldenrod4] [r=.545098,g=.411765,b=.078431] \definecolor [darkgoldenrod1] [r=1,g=.72549,b=.058824] \definecolor [darkgoldenrod2] [r=.933333,g=.678431,b=.054902] \definecolor [darkgoldenrod3] [r=.803922,g=.584314,b=.047059] \definecolor [darkgoldenrod4] [r=.545098,g=.396078,b=.031373] \definecolor [rosybrown1] [r=1,g=.756863,b=.756863] \definecolor [rosybrown2] [r=.933333,g=.705882,b=.705882] \definecolor [rosybrown3] [r=.803922,g=.607843,b=.607843] \definecolor [rosybrown4] [r=.545098,g=.411765,b=.411765] \definecolor [indianred1] [r=1,g=.415686,b=.415686] \definecolor [indianred2] [r=.933333,g=.388235,b=.388235] \definecolor [indianred3] [r=.803922,g=.333333,b=.333333] \definecolor [indianred4] [r=.545098,g=.227451,b=.227451] \definecolor [sienna1] [r=1,g=.509804,b=.278431] \definecolor [sienna2] [r=.933333,g=.47451,b=.258824] \definecolor [sienna3] [r=.803922,g=.407843,b=.223529] \definecolor [sienna4] [r=.545098,g=.278431,b=.14902] \definecolor [burlywood1] [r=1,g=.827451,b=.607843] \definecolor [burlywood2] [r=.933333,g=.772549,b=.568627] \definecolor [burlywood3] [r=.803922,g=.666667,b=.490196] \definecolor [burlywood4] [r=.545098,g=.45098,b=.333333] \definecolor [wheat1] [r=1,g=.905882,b=.729412] \definecolor [wheat2] [r=.933333,g=.847059,b=.682353] \definecolor [wheat3] [r=.803922,g=.729412,b=.588235] \definecolor [wheat4] [r=.545098,g=.494118,b=.4] \definecolor [tan1] [r=1,g=.647059,b=.309804] \definecolor [tan2] [r=.933333,g=.603922,b=.286275] \definecolor [tan3] [r=.803922,g=.521569,b=.247059] \definecolor [tan4] [r=.545098,g=.352941,b=.168627] \definecolor [chocolate1] [r=1,g=.498039,b=.141176] \definecolor [chocolate2] [r=.933333,g=.462745,b=.129412] \definecolor [chocolate3] [r=.803922,g=.4,b=.113725] \definecolor [chocolate4] [r=.545098,g=.270588,b=.07451] \definecolor [firebrick1] [r=1,g=.188235,b=.188235] \definecolor [firebrick2] [r=.933333,g=.172549,b=.172549] \definecolor [firebrick3] [r=.803922,g=.14902,b=.14902] \definecolor [firebrick4] [r=.545098,g=.101961,b=.101961] \definecolor [brown1] [r=1,g=.25098,b=.25098] \definecolor [brown2] [r=.933333,g=.231373,b=.231373] \definecolor [brown3] [r=.803922,g=.2,b=.2] \definecolor [brown4] [r=.545098,g=.137255,b=.137255] \definecolor [salmon1] [r=1,g=.54902,b=.411765] \definecolor [salmon2] [r=.933333,g=.509804,b=.384314] \definecolor [salmon3] [r=.803922,g=.439216,b=.329412] \definecolor [salmon4] [r=.545098,g=.298039,b=.223529] \definecolor [lightsalmon1] [r=1,g=.627451,b=.478431] \definecolor [lightsalmon2] [r=.933333,g=.584314,b=.447059] \definecolor [lightsalmon3] [r=.803922,g=.505882,b=.384314] \definecolor [lightsalmon4] [r=.545098,g=.341176,b=.258824] \definecolor [orange1] [r=1,g=.647059] \definecolor [orange2] [r=.933333,g=.603922] \definecolor [orange3] [r=.803922,g=.521569] \definecolor [orange4] [r=.545098,g=.352941] \definecolor [darkorange1] [r=1,g=.498039] \definecolor [darkorange2] [r=.933333,g=.462745] \definecolor [darkorange3] [r=.803922,g=.4] \definecolor [darkorange4] [r=.545098,g=.270588] \definecolor [coral1] [r=1,g=.447059,b=.337255] \definecolor [coral2] [r=.933333,g=.415686,b=.313725] \definecolor [coral3] [r=.803922,g=.356863,b=.270588] \definecolor [coral4] [r=.545098,g=.243137,b=.184314] \definecolor [tomato1] [r=1,g=.388235,b=.278431] \definecolor [tomato2] [r=.933333,g=.360784,b=.258824] \definecolor [tomato3] [r=.803922,g=.309804,b=.223529] \definecolor [tomato4] [r=.545098,g=.211765,b=.14902] \definecolor [orangered1] [r=1,g=.270588] \definecolor [orangered2] [r=.933333,g=.25098] \definecolor [orangered3] [r=.803922,g=.215686] \definecolor [orangered4] [r=.545098,g=.145098] \definecolor [red1] [red] \definecolor [red2] [r=.933333] \definecolor [red3] [r=.803922] \definecolor [red4] [r=.545098] \definecolor [deeppink1] [r=1,g=.078431,b=.576471] \definecolor [deeppink2] [r=.933333,g=.070588,b=.537255] \definecolor [deeppink3] [r=.803922,g=.062745,b=.462745] \definecolor [deeppink4] [r=.545098,g=.039216,b=.313725] \definecolor [hotpink1] [r=1,g=.431373,b=.705882] \definecolor [hotpink2] [r=.933333,g=.415686,b=.654902] \definecolor [hotpink3] [r=.803922,g=.376471,b=.564706] \definecolor [hotpink4] [r=.545098,g=.227451,b=.384314] \definecolor [pink1] [r=1,g=.709804,b=.772549] \definecolor [pink2] [r=.933333,g=.662745,b=.721569] \definecolor [pink3] [r=.803922,g=.568627,b=.619608] \definecolor [pink4] [r=.545098,g=.388235,b=.423529] \definecolor [lightpink1] [r=1,g=.682353,b=.72549] \definecolor [lightpink2] [r=.933333,g=.635294,b=.678431] \definecolor [lightpink3] [r=.803922,g=.54902,b=.584314] \definecolor [lightpink4] [r=.545098,g=.372549,b=.396078] \definecolor [palevioletred1] [r=1,g=.509804,b=.670588] \definecolor [palevioletred2] [r=.933333,g=.47451,b=.623529] \definecolor [palevioletred3] [r=.803922,g=.407843,b=.537255] \definecolor [palevioletred4] [r=.545098,g=.278431,b=.364706] \definecolor [maroon1] [r=1,g=.203922,b=.701961] \definecolor [maroon2] [r=.933333,g=.188235,b=.654902] \definecolor [maroon3] [r=.803922,g=.160784,b=.564706] \definecolor [maroon4] [r=.545098,g=.109804,b=.384314] \definecolor [violetred1] [r=1,g=.243137,b=.588235] \definecolor [violetred2] [r=.933333,g=.227451,b=.54902] \definecolor [violetred3] [r=.803922,g=.196078,b=.470588] \definecolor [violetred4] [r=.545098,g=.133333,b=.321569] \definecolor [magenta1] [magenta] \definecolor [magenta2] [r=.933333,b=.933333] \definecolor [magenta3] [r=.803922,b=.803922] \definecolor [magenta4] [r=.545098,b=.545098] \definecolor [orchid1] [r=1,g=.513725,b=.980392] \definecolor [orchid2] [r=.933333,g=.478431,b=.913725] \definecolor [orchid3] [r=.803922,g=.411765,b=.788235] \definecolor [orchid4] [r=.545098,g=.278431,b=.537255] \definecolor [plum1] [r=1,g=.733333,b=1] \definecolor [plum2] [r=.933333,g=.682353,b=.933333] \definecolor [plum3] [r=.803922,g=.588235,b=.803922] \definecolor [plum4] [r=.545098,g=.4,b=.545098] \definecolor [mediumorchid1] [r=.878431,g=.4,b=1] \definecolor [mediumorchid2] [r=.819608,g=.372549,b=.933333] \definecolor [mediumorchid3] [r=.705882,g=.321569,b=.803922] \definecolor [mediumorchid4] [r=.478431,g=.215686,b=.545098] \definecolor [darkorchid1] [r=.74902,g=.243137,b=1] \definecolor [darkorchid2] [r=.698039,g=.227451,b=.933333] \definecolor [darkorchid3] [r=.603922,g=.196078,b=.803922] \definecolor [darkorchid4] [r=.407843,g=.133333,b=.545098] \definecolor [purple1] [r=.607843,g=.188235,b=1] \definecolor [purple2] [r=.568627,g=.172549,b=.933333] \definecolor [purple3] [r=.490196,g=.14902,b=.803922] \definecolor [purple4] [r=.333333,g=.101961,b=.545098] \definecolor [mediumpurple1] [r=.670588,g=.509804,b=1] \definecolor [mediumpurple2] [r=.623529,g=.47451,b=.933333] \definecolor [mediumpurple3] [r=.537255,g=.407843,b=.803922] \definecolor [mediumpurple4] [r=.364706,g=.278431,b=.545098] \definecolor [thistle1] [r=1,g=.882353,b=1] \definecolor [thistle2] [r=.933333,g=.823529,b=.933333] \definecolor [thistle3] [r=.803922,g=.709804,b=.803922] \definecolor [thistle4] [r=.545098,g=.482353,b=.545098] \definecolor [gray0] [black] \definecolor [gray1] [s=.01] \definecolor [gray2] [s=.02] \definecolor [gray3] [s=.03] \definecolor [gray4] [s=.04] \definecolor [gray5] [s=.05] \definecolor [gray6] [s=.06] \definecolor [gray7] [s=.07] \definecolor [gray8] [s=.08] \definecolor [gray9] [s=.09] \definecolor [gray10] [s=.1] \definecolor [gray11] [s=.11] \definecolor [gray12] [s=.12] \definecolor [gray13] [s=.13] \definecolor [gray14] [s=.14] \definecolor [gray15] [s=.15] \definecolor [gray16] [s=.16] \definecolor [gray17] [s=.17] \definecolor [gray18] [s=.18] \definecolor [gray19] [s=.19] \definecolor [gray20] [s=.2] \definecolor [gray21] [s=.21] \definecolor [gray22] [s=.22] \definecolor [gray23] [s=.23] \definecolor [gray24] [s=.24] \definecolor [gray25] [s=.25] \definecolor [gray26] [s=.26] \definecolor [gray27] [s=.27] \definecolor [gray28] [s=.28] \definecolor [gray29] [s=.29] \definecolor [gray30] [s=.3] \definecolor [gray31] [s=.31] \definecolor [gray32] [s=.32] \definecolor [gray33] [s=.33] \definecolor [gray34] [s=.34] \definecolor [gray35] [s=.35] \definecolor [gray36] [s=.36] \definecolor [gray37] [s=.37] \definecolor [gray38] [s=.38] \definecolor [gray39] [s=.39] \definecolor [gray40] [s=.4] \definecolor [gray41] [s=.41] \definecolor [gray42] [s=.42] \definecolor [gray43] [s=.43] \definecolor [gray44] [s=.44] \definecolor [gray45] [s=.45] \definecolor [gray46] [s=.46] \definecolor [gray47] [s=.47] \definecolor [gray48] [s=.48] \definecolor [gray49] [s=.49] \definecolor [gray50] [s=.5] \definecolor [gray51] [s=.51] \definecolor [gray52] [s=.52] \definecolor [gray53] [s=.53] \definecolor [gray54] [s=.54] \definecolor [gray55] [s=.55] \definecolor [gray56] [s=.56] \definecolor [gray57] [s=.57] \definecolor [gray58] [s=.58] \definecolor [gray59] [s=.59] \definecolor [gray60] [s=.6] \definecolor [gray61] [s=.61] \definecolor [gray62] [s=.62] \definecolor [gray63] [s=.63] \definecolor [gray64] [s=.64] \definecolor [gray65] [s=.65] \definecolor [gray66] [s=.66] \definecolor [gray67] [s=.67] \definecolor [gray68] [s=.68] \definecolor [gray69] [s=.69] \definecolor [gray70] [s=.7] \definecolor [gray71] [s=.71] \definecolor [gray72] [s=.72] \definecolor [gray73] [s=.73] \definecolor [gray74] [s=.74] \definecolor [gray75] [s=.75] \definecolor [gray76] [s=.76] \definecolor [gray77] [s=.77] \definecolor [gray78] [s=.78] \definecolor [gray79] [s=.79] \definecolor [gray80] [s=.8] \definecolor [gray81] [s=.81] \definecolor [gray82] [s=.82] \definecolor [gray83] [s=.83] \definecolor [gray84] [s=.84] \definecolor [gray85] [s=.85] \definecolor [gray86] [s=.86] \definecolor [gray87] [s=.87] \definecolor [gray88] [s=.88] \definecolor [gray89] [s=.89] \definecolor [gray90] [s=.9] \definecolor [gray91] [s=.91] \definecolor [gray92] [s=.92] \definecolor [gray93] [s=.93] \definecolor [gray94] [s=.94] \definecolor [gray95] [s=.95] \definecolor [gray96] [s=.96] \definecolor [gray97] [s=.97] \definecolor [gray98] [s=.98] \definecolor [gray99] [s=.99] \definecolor [gray100] [white] \definecolor [darkgray] [s=.662745] \definecolor [darkblue] [b=.545098] \definecolor [darkcyan] [g=.545098,b=.545098] \definecolor [darkmagenta] [r=.545098,b=.545098] \definecolor [darkred] [r=.545098] \definecolor [lightgreen] [r=.564706,g=.933333,b=.564706] context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-act.mkiv0000644000175000017500000000507711754241457024263 0ustar norbertnorbert%D \module %D [ file=catc-act, %D version=2006.09.18, %D title=\CONTEXT\ Catcode Macros, %D subtitle=Default Catcode Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 deals with some active character handling. Use %D with care. \unprotect %D \macros %D {installactivecharacter} \let\m_syst_catcodes_temp\empty \normalprotected\def\installactivecharacter#1 % {\edef\m_syst_catcodes_temp{\detokenize{#1}}% \c_syst_catcodes_c\expandafter`\m_syst_catcodes_temp\relax % relax needed \expandafter\startextendcatcodetable \expandafter\ctxcatcodes\expandafter\catcode\the\c_syst_catcodes_c\activecatcode \stopextendcatcodetable \letcatcodecommand \ctxcatcodes \c_syst_catcodes_c \m_syst_catcodes_temp \relax \ifnum\currentcatcodetable=\ctxcatcodes \setcatcodetable\ctxcatcodes \fi \let\m_syst_catcodes_temp\empty} %D \macros %D {defineactivecharacter} %D %D Use this one with care, esp in combination with catcode %D vectors. There are better ways now. \setnewconstant\c_syst_catcodes_hack\tildeasciicode % also defined in catc-ini.mkiv \normalprotected\def\defineactivecharacter #1#2 #3% uses \doifnumberelse which is not yet defined {\c_syst_catcodes_c\uccode\c_syst_catcodes_hack \if#1"\uccode\c_syst_catcodes_hack\expandafter\doifnumberelse\expandafter{\string#1#2}\empty #1#2\else \uccode\c_syst_catcodes_hack\expandafter\doifnumberelse\expandafter{\string#1#2}\empty`#1#2\fi \catcode\uccode\c_syst_catcodes_hack\activecatcode \uppercase{\def\m_syst_catcodes_temp{~}}% brrr \uccode\c_syst_catcodes_hack\c_syst_catcodes_c \expandafter\expandafter\expandafter\def\expandafter\m_syst_catcodes_temp\expandafter {\expandafter\syst_catcodes_handle\m_syst_catcodes_temp{#3}}% \let\m_syst_catcodes_temp\empty} \chardef\activecharactermode\plusone % overloading still backward compatible \def\syst_catcodes_handle {\ifcase\activecharactermode \expandafter\syst_catcodes_handle_nop \else \expandafter\syst_catcodes_handle_yes \fi} \def\syst_catcodes_handle_yes#1#2{#2} \def\syst_catcodes_handle_nop#1#2{\noexpand#1} \normalprotected\def\makecharacteractive #1 % {\catcode`#1\activecatcode} \normalprotected\def\installanddefineactivecharacter #1 % #2% {\normalexpanded{\noexpand\installactivecharacter \utfchar{#1} }% \defineactivecharacter #1 }% {#2}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-entities.mkiv0000644000175000017500000000100311754241457024656 0ustar norbertnorbert%D \module %D [ file=x-entities, %D version=2008.05.29, %D title=\CONTEXT\ XML Modules, %D subtitle=\HTML\ entities, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / HTML entities} \ctxlua{characters.registerentities()} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-031.mkii0000644000175000017500000002041211754241457024014 0ustar norbertnorbert%D \module %D [ file=unic-031, %D version=2005.02.20, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 31, %D author=Thomas A. Schmitz, %D date=\currentdate, %D copyright={Thomas A. Schmitz}] \unprotect \startunicodevector 31 \expandafter\strippedcsname \ifcase\numexpr#1\relax \greekalphapsili \or %1f00 \greekalphadasia \or \greekalphapsilivaria \or \greekalphadasiavaria \or \greekalphapsilitonos \or \greekalphadasiatonos \or \greekalphapsiliperispomeni \or \greekalphadasiaperispomeni \or \greekAlphapsili \or \greekAlphadasia \or \greekAlphapsilivaria \or \greekAlphadasiavaria \or \greekAlphapsilitonos \or \greekAlphadasiatonos \or \greekAlphapsiliperispomeni \or \greekAlphadasiaperispomeni \or \greekepsilonpsili \or %1f10 \greekepsilondasia \or \greekepsilonpsilivaria \or \greekepsilondasiavaria \or \greekepsilonpsilitonos \or \greekepsilondasiatonos \or \unknownchar \or \unknownchar \or \greekEpsilonpsili \or \greekEpsilondasia \or \greekEpsilonpsilivaria \or \greekEpsilondasiavaria \or \greekEpsilonpsilitonos \or \greekEpsilondasiatonos \or \unknownchar \or \unknownchar \or \greeketapsili \or %1f20 \greeketadasia \or \greeketapsilivaria \or \greeketadasiavaria \or \greeketapsilitonos \or \greeketadasiatonos \or \greeketapsiliperispomeni \or \greeketadasiaperispomeni \or \greekEtapsili \or \greekEtadasia \or \greekEtapsilivaria \or \greekEtadasiavaria \or \greekEtapsilitonos \or \greekEtadasiatonos \or \greekEtapsiliperispomeni \or \greekEtadasiaperispomeni \or \greekiotapsili \or %1f30 \greekiotadasia \or \greekiotapsilivaria \or \greekiotadasiavaria \or \greekiotapsilitonos \or \greekiotadasiatonos \or \greekiotapsiliperispomeni \or \greekiotadasiaperispomeni \or \greekIotapsili \or \greekIotadasia \or \greekIotapsilivaria \or \greekIotadasiavaria \or \greekIotapsilitonos \or \greekIotadasiatonos \or \greekIotapsiliperispomeni \or \greekIotadasiaperispomeni \or \greekomicronpsili \or %1f40 \greekomicrondasia \or \greekomicronpsilivaria \or \greekomicrondasiavaria \or \greekomicronpsilitonos \or \greekomicrondasiatonos \or \unknownchar \or \unknownchar \or \greekOmicronpsili \or \greekOmicrondasia \or \greekOmicronpsilivaria \or \greekOmicrondasiavaria \or \greekOmicronpsilitonos \or \greekOmicrondasiatonos \or \unknownchar \or \unknownchar \or \greekupsilonpsili \or %1f50 \greekupsilondasia \or \greekupsilonpsilivaria \or \greekupsilondasiavaria \or \greekupsilonpsilitonos \or \greekupsilondasiatonos \or \greekupsilonpsiliperispomeni \or \greekupsilondasiaperispomeni \or \unknownchar \or \greekUpsilondasia \or \unknownchar \or \greekUpsilondasiavaria \or \unknownchar \or \greekUpsilondasiatonos \or \unknownchar \or \greekUpsilondasiaperispomeni \or \greekomegapsili \or %1f60 \greekomegadasia \or \greekomegapsilivaria \or \greekomegadasiavaria \or \greekomegapsilitonos \or \greekomegadasiatonos \or \greekomegapsiliperispomeni \or \greekomegadasiaperispomeni \or \greekOmegapsili \or \greekOmegadasia \or \greekOmegapsilivaria \or \greekOmegadasiavaria \or \greekOmegapsilitonos \or \greekOmegadasiatonos \or \greekOmegapsiliperispomeni \or \greekOmegadasiaperispomeni \or \greekalphavaria \or %1f70 \greekalphaoxia \or \greekepsilonvaria \or \greekepsilonoxia \or \greeketavaria \or \greeketaoxia \or \greekiotavaria \or \greekiotaoxia \or \greekomicronvaria \or \greekomicronoxia \or \greekupsilonvaria \or \greekupsilonoxia \or \greekomegavaria \or \greekomegaoxia \or \unknownchar \or \unknownchar \or \greekalphaiotasubpsili \or %1f80 \greekalphaiotasubdasia \or \greekalphaiotasubpsilivaria \or \greekalphaiotasubdasiavaria \or \greekalphaiotasubpsilitonos \or \greekalphaiotasubdasiatonos \or \greekalphaiotasubpsiliperispomeni \or \greekalphaiotasubdasiaperispomeni \or \greekAlphaiotasubpsili \or \greekAlphaiotasubdasia \or \greekAlphaiotasubpsilivaria \or \greekAlphaiotasubdasiavaria \or \greekAlphaiotasubpsilitonos \or \greekAlphaiotasubdasiatonos \or \greekAlphaiotasubpsiliperispomeni \or \greekAlphaiotasubdasiaperispomeni \or \greeketaiotasubpsili \or %1f90 \greeketaiotasubdasia \or \greeketaiotasubpsilivaria \or \greeketaiotasubdasiavaria \or \greeketaiotasubpsilitonos \or \greeketaiotasubdasiatonos \or \greeketaiotasubpsiliperispomeni \or \greeketaiotasubdasiaperispomeni \or \greekEtaiotasubpsili \or \greekEtaiotasubdasia \or \greekEtaiotasubpsilivaria \or \greekEtaiotasubdasiavaria \or \greekEtaiotasubpsilitonos \or \greekEtaiotasubdasiatonos \or \greekEtaiotasubpsiliperispomeni \or \greekEtaiotasubdasiaperispomeni \or \greekomegaiotasubpsili \or %1fa0 \greekomegaiotasubdasia \or \greekomegaiotasubpsilivaria \or \greekomegaiotasubdasiavaria \or \greekomegaiotasubpsilitonos \or \greekomegaiotasubdasiatonos \or \greekomegaiotasubpsiliperispomeni \or \greekomegaiotasubdasiaperispomeni \or \greekOmegaiotasubpsili \or \greekOmegaiotasubdasia \or \greekOmegaiotasubpsilivaria \or \greekOmegaiotasubdasiavaria \or \greekOmegaiotasubpsilitonos \or \greekOmegaiotasubdasiatonos \or \greekOmegaiotasubpsiliperispomeni \or \greekOmegaiotasubdasiaperispomeni \or \greekalphavrachy \or %1fb0 \greekalphamacron \or \greekalphaiotasubvaria \or \greekalphaiotasub \or \greekalphaiotasubtonos \or \unknownchar \or \greekalphaperispomeni \or \greekalphaiotasubperispomeni \or \greekAlphavrachy \or \greekAlphamacron \or \greekAlphavaria \or \greekAlphaoxia \or \greekAlphaiotasub \or \greekCoronis \or \greekprosgegrammeni \or \greekpsili \or \greekperispomeni \or %1fc0 \greekdialytikaperispomeni \or \greeketaiotasubvaria \or \greeketaiotasub \or \greeketaiotasubtonos \or \unknownchar \or \greeketaperispomeni \or \greeketaiotasubperispomeni \or \greekEpsilonvaria \or \greekEpsilonoxia \or \greekEtavaria \or \greekEtaoxia \or \greekEtaiotasub \or \greekpsilivaria \or \greekpsilitonos \or \greekpsiliperispomeni \or \greekiotavrachy \or %1fd0 \greekiotamacron \or \greekiotadialytikavaria \or \greekiotadialytikatonos \or \unknownchar \or \unknownchar \or \greekiotaperispomeni \or \greekiotadialytikaperispomeni \or \greekIotavrachy \or \greekIotamacron \or \greekIotavaria \or \greekIotaoxia \or \unknownchar \or \greekdasiavaria \or \greekdasiatonos \or \greekdasiaperispomeni \or \greekupsilonvrachy \or %1fe0 \greekupsilonmacron \or \greekupsilondialytikavaria \or \greekupsilondialytikatonos \or \greekrhopsili \or \greekrhodasia \or \greekupsilonperispomeni \or \greekupsilondialytikaperispomeni \or \greekUpsilonvrachy \or \greekUpsilonmacron \or \greekUpsilonvaria \or \greekUpsilonoxia \or \greekRhodasia \or \greekdialytikavaria \or \greekdialytikaoxia \or \greekvaria \or \unknownchar \or %1ff0 \unknownchar \or \greekomegaiotasubvaria \or \greekomegaiotasub \or \greekomegaiotasubtonos \or \unknownchar \or \greekomegaperispomeni \or \greekomegaiotasubperispomeni \or \greekOmicronvaria \or \greekOmicronoxia \or \greekOmegavaria \or \greekOmegaoxia \or \greekOmegaiotasub \or \greekoxia \or \greekdasia \else \unknownchar \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-steps.mkiv0000644000175000017500000000617012130411274024163 0ustar norbertnorbert%D \module %D [ file=m-steps, %D version=2001.05.28, %D title=\CONTEXT\ Modules, %D subtitle=Step Charts \& Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The \XML\ interface. This module can be made way more efficient %D in \MKIV\ using textext but it makes only sense to do this when %D I really need it in a demanding application. Probably half of the %D code in m-steps.tex can go. \usemodule[m][steps] \unprotect \installcorenamespace {xmlstepchart} \installcorenamespace {xmlsteptable} \def\xmlstepchartdirective#1{\executeifdefined{\??xmlstepchart#1}\gobbletwoarguments} % {#2}{#3} \def\xmlsteptabledirective#1{\executeifdefined{\??xmlsteptable#1}\gobbletwoarguments} % {#2}{#3} \setvalue{\??xmlstepchart charts}{\setsomevalue\@@STPC} \setvalue{\??xmlstepchart cells}{\setsomevalue\@@STEC} \setvalue{\??xmlstepchart texts}{\setsomevalue\@@STET} \setvalue{\??xmlstepchart lines}{\setsomevalue\@@STEL} \setvalue{\??xmlsteptable tables}{\setsomevalue\@@STPT} \setvalue{\??xmlsteptable cells}{\setsomevalue\@@STEC} \setvalue{\??xmlsteptable texts}{\setsomevalue\@@STET} \setvalue{\??xmlsteptable lines}{\setsomevalue\@@STEL} \startxmlsetups xml:ct:define \xmlsetsetup {#1} {ct:*} {xml:ct:*} % \xmlsetsetup {#1} {ct:stepaligntable/cells} {xml:ct:stepaligntable:cells} % \xmlsetsetup {#1} {ct:stepaligntable/lines} {xml:ct:stepaligntable:lines} \stopxmlsetups \xmlregisterns{ct}{stepcharts} \xmlregistersetup{xml:ct:define} \startxmlsetups xml:ct:prep \expanded{\prep[\xmltoparameters{#1}]}{\xmlflush{#1}} \stopxmlsetups \startxmlsetups xml:ct:text \expanded{\text[\xmltoparameters{#1}]}{\xmlflush{#1}} \stopxmlsetups \startxmlsetups xml:ct:texts \expanded{\texts[\xmltoparameters{#1}]}{\xmltext{#1}{/top}} {\xmltext{#1}{/bot}} \stopxmlsetups \startxmlsetups xml:ct:cell \expanded{\cell[\xmltoparameters{#1}]}{\xmlflush{#1}} \stopxmlsetups \startxmlsetups xml:ct:cells \expanded{\cells[\xmltoparameters{#1}]}{\xmltext{#1}{/top}} {\xmltext{#1}{/bot}} \stopxmlsetups \startxmlsetups xml:ct:lines \expanded{\startlines[\xmltoparameters{#1}]} \xmlflush{#1} \stoplines \stopxmlsetups \startxmlsetups xml:ct:steptable \expanded{\startSTEPtable[\xmltoparameters{#1}]} \xmlflush{#1} \stopSTEPtable \stopxmlsetups \startxmlsetups xml:ct:stepchart \expanded{\startSTEPchart[\xmltoparameters{#1}]} \xmlflush{#1} \stopSTEPchart \stopxmlsetups % \startxmlsetups xml:ct:stepaligntable % \expanded{\startSTEPaligntable[\xmltoparameters{#1}]} % \xmlflush{#1} % \stopSTEPaligntable % \stopxmlsetups % % \startxmlsetups xml:ct:stepaligntable:cells % \expanded{\cells[\xmltoparameters{#1}]} {\xmltext{#1}{/ct:c1}} {\xmltext{#1}{/ct:c2}} {\xmltext{#1}{/ct:c3}} % \stopxmlsetups % % \startxmlsetups xml:ct:stepaligntable:lines % \expanded{\setupSTEPlines[\xmltoparameters{#1}]} % \xmlflush{#1} % \stopxmlsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-col.mkiv0000644000175000017500000001474412130411274024255 0ustar norbertnorbert%D \module %D [ file=page-col, % moved from page-ini %D version=2011.12.07, % 2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Column Helpers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Column Helpers} %D Here we implement a couple of helpers for dealing with columns. For %D the moment we keep the names. When the mul and set modules are redone %D these can be adapted or disappear. \unprotect %D We reserve a counter for the number of columns as well as the current %D column. Both are not to be changed by users! \newcount\nofcolumns \nofcolumns\plusone \newcount\mofcolumns \mofcolumns\plusone \newconstant\columndirection % 0:lr 1:rl \setnewconstant\maxnofcolumns 50 \setnewconstant\allocatednofcolumns 0 %D During initialization the temporary boxes are allocated. This enables us to %D use as much columns as we want, without exhausting the pool of boxes too %D fast. We could have packed them in one box, but we've got enough boxes. %D %D Two sets of boxes are declared, the txtboxes are used for the text, the %D topboxes are for moved column floats. \installcorenamespace{columntext} \installcorenamespace{columnfooter} \installcorenamespace{columntop} \installcorenamespace{columnbottom} \unexpanded\def\initializecolumns#1% {\ifnum#1>\maxnofcolumns \showmessage\m!columns1\maxnofcolumns \nofcolumns\maxnofcolumns \else \nofcolumns#1\relax \fi \ifnum\nofcolumns>\allocatednofcolumns \page_columns_allocate \fi} \def\page_columns_allocate {\dorecurse\nofcolumns {\ifnum\recurselevel>\allocatednofcolumns\relax \ifcsname\??columntext\recurselevel\endcsname \else \expandafter\newbox\csname\??columntext \recurselevel\endcsname % text \expandafter\newbox\csname\??columnfooter\recurselevel\endcsname % footer \expandafter\newbox\csname\??columntop \recurselevel\endcsname % top insert \expandafter\newbox\csname\??columnbottom\recurselevel\endcsname % bottom insert \fi \fi}% \global\allocatednofcolumns\nofcolumns} \def\currentcolumn {1} \def\firstcolumnbox {\columntextbox\plusone} \def\currentcolumnbox {\columntextbox\mofcolumns} \def\lastcolumnbox {\columntextbox\nofcolumns} \def\firsttopcolumnbox {\columntopbox \plusone} \def\currenttopcolumnbox {\columntopbox \mofcolumns} \def\lasttopcolumnbox {\columntopbox \nofcolumns} \def\columntextbox #1{\csname\??columntext \number#1\endcsname} \def\columnfootbox #1{\csname\??columnfooter\number#1\endcsname} \def\columntopbox #1{\csname\??columntop \number#1\endcsname} \def\columnbotbox #1{\csname\??columnbottom\number#1\endcsname} \unexpanded\def\columnsettextbox {\global\setbox\columntextbox} \unexpanded\def\columnsetfootbox {\global\setbox\columnfootbox} \unexpanded\def\columnsettopbox {\global\setbox\columntopbox} \unexpanded\def\columnsetbotbox {\global\setbox\columnbotbox} \unexpanded\def\columngettextbox {\copy\columntextbox} \unexpanded\def\columngetfootbox {\copy\columnfootbox} \unexpanded\def\columngettopbox {\copy\columntopbox} \unexpanded\def\columngetbotbox {\copy\columnbotbox} \unexpanded\def\columnerasetextboxes{\dorecurse\allocatednofcolumns{\columnsettextbox\recurselevel\emptybox}} \unexpanded\def\columnerasefootboxes{\dorecurse\allocatednofcolumns{\columnsetfootbox\recurselevel\emptybox}} \unexpanded\def\columnerasetopboxes {\dorecurse\allocatednofcolumns{\columnsettopbox \recurselevel\emptybox}} \unexpanded\def\columnerasebotboxes {\dorecurse\allocatednofcolumns{\columnsetbotbox \recurselevel\emptybox}} %D Without going in details we present two macro's which handle the columns. The %D action which is transfered by the the first and only parameter can do something %D with \type {\currentcolumnbox}. In case of the mid columns, \type %D {\firstcolumnbox} and \type {\lastcolumnbox} are handled outside these macro's. % \unexpanded\def\dohandlecolumn#1% % {\mofcolumns\recurselevel % \let\currentcolumn\recurselevel % #1\relax} % % \unexpanded\def\dohandleallcolumns#1% % {\dorecurse\nofcolumns{\dohandlecolumn{#1}}} % % \unexpanded\def\dohandlerevcolumns#1% % {\dostepwiserecurse\nofcolumns\plusone\minusone{\dohandlecolumn{#1}}} % % \unexpanded\def\dohandlemidcolumns#1% % {\dohandleallcolumns % {\ifnum\recurselevel>\plusone % \ifnum\recurselevel<\nofcolumns % \dohandlecolumn{#1}% % \fi % \fi}} % % As we don't nest we can use a fast variant: \unexpanded\def\dohandleallcolumnscs#1{\let\page_columns_action #1\page_columns_all_indeed} \unexpanded\def\dohandleallcolumns #1{\def\page_columns_action{#1}\page_columns_all_indeed} \unexpanded\def\dohandlerevcolumnscs#1{\let\page_columns_action #1\page_columns_rev_indeed} \unexpanded\def\dohandlerevcolumns #1{\def\page_columns_action{#1}\page_columns_rev_indeed} \unexpanded\def\dohandlemidcolumnscs#1{\let\page_columns_action #1\page_columns_mid_indeed} \unexpanded\def\dohandlemidcolumns #1{\def\page_columns_action{#1}\page_columns_mid_indeed} \unexpanded\def\page_columns_all_indeed {\mofcolumns\plusone \edef\currentcolumn{\the\mofcolumns}% \page_columns_action\relax \ifnum\mofcolumns<\nofcolumns \expandafter\page_columns_all_next \fi} \unexpanded\def\page_columns_all_next {\advance\mofcolumns\plusone \edef\currentcolumn{\the\mofcolumns}% \page_columns_action\relax \ifnum\mofcolumns<\nofcolumns \expandafter\page_columns_all_next \fi} \unexpanded\def\page_columns_rev_indeed {\mofcolumns\nofcolumns \edef\currentcolumn{\the\mofcolumns}% \page_columns_action\relax \ifnum\mofcolumns>\plusone \expandafter\page_columns_rev_prev \fi} \unexpanded\def\page_columns_rev_prev {\advance\mofcolumns\minusone \edef\currentcolumn{\the\mofcolumns}% \page_columns_action\relax \ifnum\mofcolumns>\plusone \expandafter\page_columns_rev_prev \fi} \unexpanded\def\page_columns_mid_indeed {\mofcolumns\plustwo \ifnum\mofcolumns<\nofcolumns \expandafter\page_columns_mid_next \fi} \unexpanded\def\page_columns_mid_next {\edef\currentcolumn{\the\mofcolumns}% \page_columns_action\relax \advance\mofcolumns\plusone \ifnum\mofcolumns<\nofcolumns \expandafter\page_columns_mid_next \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-vis.mkiv0000644000175000017500000014311612130411274024350 0ustar norbertnorbert%D \module %D [ file=supp-vis, %D version=1996.10.21, %D title=\CONTEXT\ Support Macros, %D subtitle=Visualization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is no longer generic \unknown\ but who cares. Maybe %D the code will be moved out of the core (apart from ruled boxes). %D \gdef\ShowBufferedExample% private typeseting macro %D {\startlinecorrection %D \bgroup %D \setuptyping[margin=0pt,option=color] %D \showmakeup %D \centeredvcuetrue %D \dontinterfere %D \baselinerulefalse %D \normalvbox %D {\normalhbox to \hsize %D {$\hsize=.5\hsize %D \advance\hsize by -.5em %D \normalvcenter{\vbox{\getbuffer}}\normalhss %D \normalvcenter{\vbox{\dontshowcomposition\typebuffer}}$}} %D \egroup %D \stoplinecorrection} %D %D \gdef\ShowBufferedExampleBox% private typeseting macro %D {\startlinecorrection %D \bgroup %D \setuptyping[margin=0pt,option=color] %D \showmakeup %D \centeredvcuetrue %D \dontinterfere %D \baselinerulefalse %D \normalvbox %D {\normalhbox to \hsize %D {$\hsize=.5\hsize %D \advance\hsize by -.5em %D \normalvcenter{\baselineruletrue\vbox{\getbuffer}}\normalhss %D \normalvcenter{\vbox{\dontshowcomposition\typebuffer}}$}} %D \egroup %D \stoplinecorrection} %D Depending on my personal needs and those of whoever uses it, %D the macros will be improved in terms of visualization, %D efficiency and compatibility. These rather low level %D visualization macros are supplemented by ones that can %D visualize baselines, the page layout and whatever deserves %D attention. Most of those macros can be found in \type %D {core-vis} and other core modules. Their integration in %D \CONTEXT\ prohibits generic applications. %D %D We no longer assume usage outside context so we no longer %D load support modules. %D %D One of the strong points of \TEX\ is abstraction of textual %D input. When macros are defined well and do what we %D want them to do, we will seldom need the tools present in %D What You See Is What You Get systems. For instance, when %D entering text we don't need rulers, because no manual %D shifting and/or alignment of text is needed. On the other %D hand, when we are designing macros or specifying layout %D elements, some insight in \TEX's advanced spacing, kerning, %D filling, boxing and punishment abilities will be handy. %D That's why we've implemented a mechanism that shows some of %D the inner secrets of \TEX. \writestatus{loading}{ConTeXt Support Macros / Visualization} %D In this module we are going to redefine some \TEX\ %D primitives and \PLAIN\ macro's. Their original meaning is %D saved in macros with corresponding names, preceded by %D \type{normal}. These original macros are (1)~used to %D temporary restore the old values when needed and %D (2)~used to prevent recursive calls in the macros that %D replace them. \unprotect \let\visualvrule\vrule \let\visualhrule\hrule %D \macros %D {dontinterfere} %D %D Indentation, left and/or right skips, redefinition of %D \type{\par} and assignments to \type{\everypar} can lead to %D unwanted results. We can therefore turn all those things %D off with \type{\dontinterfere}. \unexpanded\def\dontinterfere % or maybe just forgetall {\reseteverypar \parindent\zeropoint \parskip \zeropoint \leftskip \zeropoint \rightskip\zeropoint \relax} %D \macros %D {dontcomplain} %D %D In this module we do a lot of box manipulations. Because we %D don't want to be confronted with to many over- and underfull %D messages we introduce \type{\dontcomplain}. \ifdefined\dontcomplain \else \unexpanded\def\dontcomplain {\hbadness\plustenthousand \vbadness\plustenthousand \hfuzz \maxdimen \vfuzz \maxdimen} \fi %D \macros %D {normaloffinterlineskip} %D %D The next hack is needed because in \CONTEXT\ we redefine %D \type{\offinterlineskip}. \ifdefined\normaloffinterlineskip \else \let\normaloffinterlineskip\offinterlineskip \fi %D \macros %D {normalhbox, %D normalvbox,normalvtop} %D %D There are three types of boxes, one horizontal and two %D vertical in nature. As we will see later on, all three types %D are to be handled according to their orientation and %D baseline behavior. Especially \type{\vtop}'s need our %D special attention. %D \macros %D {normalhskip, %D normalvskip} %D %D Next come the flexible skips, which come in two flavors %D too. Like boxes these are handled with \TEX\ primitives. %D \macros %D {normalpenalty, %D normalkern} %D %D Both penalties and kerns are taken care of by mode sensitive %D primitives. This means that when making them visible, we %D have to take the current mode into account. %D \macros %D {normalhglue, %D normalvglue} %D %D Glues on the other hand are macro's defined in \PLAIN\ \TEX. %D As we will see, their definitions make the implementation of %D their visible counterparts a bit more \TeX{}nical. \let\normalhglue\hglue \let\normalvglue\vglue %D \macros %D {normalmkern, %D normalmskip} %D %D Math mode has its own spacing primitives, preceded by %D \type{m}. Due to the relation with the current font and the %D way math is typeset, their unit \type{mu} is not compatible %D with other dimensions. As a result, the visual appearance %D of these primitives is kept primitive too. %D \macros %D {hfilneg, %D vfilneg} %D %D Fills can be made visible quite easy. We only need some %D additional negation macros. Because \PLAIN\ \TEX\ only %D offers \type{\hfilneg} and \type{\vfilneg}, we define our %D own alternative double \type{ll}'ed ones. \def\hfilneg {\normalhskip\zeropoint\s!plus-1\s!fil\relax} \def\vfilneg {\normalvskip\zeropoint\s!plus-1\s!fil\relax} \def\hfillneg {\normalhskip\zeropoint\s!plus-1\s!fill\relax} \def\vfillneg {\normalvskip\zeropoint\s!plus-1\s!fill\relax} \def\hfilllneg{\normalhskip\zeropoint\s!plus-1\s!filll\relax} \def\vfilllneg{\normalvskip\zeropoint\s!plus-1\s!filll\relax} %D \macros %D {normalhss,normalhfil,normalhfill, %D normalvss,normalvfil,normalvfill} %D %D The positive stretch primitives are used independant and in %D combination with \type{\leaders}. % already saved %D \macros %D {normalhfilneg,normalhfillneg, %D normalvfilneg,normalvfillneg} %D %D Keep in mind that both \type{\hfillneg} and \type{\vfillneg} %D are not part of \PLAIN\ \TEX\ and therefore not documented %D in standard \TEX\ documentation. They can nevertheless be %D used at will. \let\normalhfillneg\hfillneg \let\normalvfillneg\vfillneg %D Visualization is not always wanted. Instead of turning this %D option off in those (unpredictable) situations, we just %D redefine a few \PLAIN\ macros. % \ifx\tlap\undefined % % \def\rlap#1{\normalhbox to \zeropoint{#1\normalhss}} % \def\llap#1{\normalhbox to \zeropoint{\normalhss#1}} % \def\blap#1{\normalvbox to \zeropoint{#1\normalvss}} % \def\tlap#1{\normalvbox to \zeropoint{\normalvss#1}} % % \fi %D \macros %D {makeruledbox} %D %D Ruled boxes can be typeset is many ways. Here we present %D just one alternative. This implementation may be a little %D complicated, but it supports all three kind of boxes. The %D next command expects a \BOX\ specification, like: %D %D \starttyping %D \makeruledbox0 %D \stoptyping %D \macros %D {baselinerule,baselinefill} %D %D We can make the baseline of a box visible, both dashed and %D as a rule. The line is drawn on top of the baseline. All %D we have to say is: %D %D \starttyping %D \baselineruletrue %D \baselinefilltrue %D \stoptyping %D %D At the cost of some overhead these alternatives are %D implemented using \type{\if}'s: \newif\ifbaselinerule\baselineruletrue \newif\ifbaselinefill\baselinefillfalse %D \macros %D {iftoprule,ifbottomrule,ifleftrule,ifrightrule} %D %D Rules can be turned on and off, but by default we have: %D %D \starttyping %D \topruletrue %D \bottomruletrue %D \leftruletrue %D \rightruletrue %D \stoptyping %D %D As we see below: \newif\iftoprule \topruletrue \newif\ifbottomrule\bottomruletrue \newif\ifleftrule \leftruletrue \newif\ifrightrule \rightruletrue %D \macros %D {boxrulewidth} %D %D The width in the surrounding rules can be specified by %D assigning an apropriate value to the dimension used. This %D module defaults the width to: %D %D \starttyping %D \boxrulewidth=.2pt %D \stoptyping \newdimen \boxrulewidth \boxrulewidth=.2pt \newdimen \boxruleht \newdimen \boxruledp \newdimen \boxrulewd \newbox \boxrulescratchbox %D The core macro \type{\makeruledbox} looks a bit hefty. The %D manipulation at the end is needed because we want to %D preserve both the mode and the baseline. This means that %D \type{\vtop}'s and \type{\vbox}'es behave the way we expect %D them to do. %D %D \startlinecorrection %D \hbox %D {\ruledhbox to 5em{\strut test\normalhss}\hskip1em %D \ruledvbox{\hsize 5em\strut test \par test\strut}\hskip1em %D \ruledvtop{\hsize 5em\strut test \par test\strut}} %D \stoplinecorrection %D %D The \type{\cleaders} part of the macro is responsible for %D the visual baseline. The \type{\normalhfill} belongs to this %D primitive too. By storing and restoring the height and depth %D of box \type{#1}, we preserve the mode. \let\dowithruledbox\relax % hook \unexpanded\def\makeruledbox#1% {\boxruleht\ht#1% \boxruledp\dp#1% \boxrulewd\wd#1% \setbox\boxrulescratchbox\normalvbox {\dontcomplain \normaloffinterlineskip \visualhrule \s!height\boxrulewidth \iftoprule\else\s!width\zeropoint\fi \normalvskip-\boxrulewidth \normalhbox to \boxrulewd {\visualvrule \s!height\boxruleht \s!depth \boxruledp \s!width \ifleftrule\boxrulewidth\else\zeropoint\fi \ifdim\boxruleht>\zeropoint \else \baselinerulefalse \fi \ifdim\boxruledp>\zeropoint \else \baselinerulefalse \fi \ifbaselinerule \ifdim\boxrulewd<20\boxrulewidth \baselinefilltrue \fi \cleaders \ifbaselinefill \visualhrule \s!height\boxrulewidth \else \normalhbox {\normalhskip2.5\boxrulewidth \visualvrule \s!height\boxrulewidth \s!width5\boxrulewidth \normalhskip2.5\boxrulewidth}% \fi \fi \normalhfill \visualvrule \s!width\ifrightrule\boxrulewidth\else\zeropoint\fi}% \normalvskip-\boxrulewidth \visualhrule \s!height\boxrulewidth \ifbottomrule\else\s!width\zeropoint\fi}% \wd#1\zeropoint \setbox#1=\ifhbox#1\normalhbox\else\normalvbox\fi {\normalhbox {\box#1% \lower\boxruledp\normalhbox{\dowithruledbox{\box\boxrulescratchbox}}}}% \ht#1\boxruleht \wd#1\boxrulewd \dp#1\boxruledp} %D Just in case one didn't notice: the rules are in fact layed %D over the box. This way the contents of a box cannot %D visually interfere with the rules around (upon) it. A more %D advanced version of ruled boxes can be found in one of the %D core modules of \CONTEXT. There we take offsets, color, %D rounded corners, backgrounds and alignment into account too. %D \macros %D {ruledhbox, %D ruledvbox,ruledvtop, %D ruledvcenter} %D %D These macro's can be used instead of \type{\hbox}, %D \type{\vbox}, \type{\vtop} and, when in math mode, %D \type{\vcenter}. They just do what their names state. Using %D an auxiliary macro would save us a few words of memory, but %D it would make their appearance even more obscure. %D %D \startbuffer %D \hbox %D {\strut %D one %D two %D \hbox{three} %D four %D five} %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledhbox {\normalhbox\bgroup \dowithnextboxcs\supp_visualizers_hbox_finish\normalhbox} \def\supp_visualizers_hbox_finish {\makeruledbox\nextbox \box\nextbox \egroup} %D \startbuffer %D \vbox %D {\strut %D first line \par %D second line \par %D third line \par %D fourth line \par %D fifth line %D \strut } %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledvbox {\normalvbox\bgroup \dowithnextboxcs\supp_visualizers_vbox_finish\normalvbox} \def\supp_visualizers_vbox_finish {\makeruledbox\nextbox \box\nextbox \egroup} %D \startbuffer %D \vtop %D {\strut %D first line \par %D second line \par %D third line \par %D fourth line \par %D fifth line %D \strut } %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledvtop {\normalvtop\bgroup \dowithnextboxcs\supp_visualizers_vtop_finish\normalvtop} \def\supp_visualizers_vtop_finish {\makeruledbox\nextbox \box\nextbox \egroup} %D \startbuffer %D \hbox %D {$\vcenter{\hsize.2\hsize %D alfa \par beta}$ %D $\vcenter to 3cm{\hsize.2\hsize %D alfa \par beta \par gamma}$ %D $\vcenter{\hsize.2\hsize %D alfa \par beta}$} %D \stopbuffer %D %D \ShowBufferedExampleBox \unexpanded\def\ruledvcenter {\normalvbox\bgroup \dontinterfere \dowithnextboxcs\supp_visualizers_vcenter_finish\normalvbox} \def\supp_visualizers_vcenter_finish {\scratchdimen.5\dimexpr\ht\nextbox+\dp\nextbox\relax \ht\nextbox\scratchdimen \dp\nextbox\scratchdimen %\ruledhbox{\box\nextbox}% \makeruledbox\nextbox \box\nextbox \egroup} %D \macros %D {ruledbox, %D setruledbox} %D %D Of the next two macros the first can be used to precede a %D box of ones own choice. One can for instance prefix boxes %D with \type{\ruledbox} and afterwards --- when the macro %D satisfy the needs --- let it to \type{\relax}. %D %D \starttyping %D \ruledbox\hbox{What rules do you mean?} %D \stoptyping %D %D The macro \type{\setruledbox} can be used to directly %D rule a box. %D %D \starttyping %D \setruledbox12=\hbox{Who's talking about rules here?} %D \stoptyping %D %D At the cost of some extra macros we can implement a %D variant that does not need the~\type{=}, but we stick to: \unexpanded\def\ruledbox {\dowithnextboxcs\supp_visualizers_box_finish} \def\supp_visualizers_box_finish {\makeruledbox\nextbox\box\nextbox} % \def\setruledbox#1=% % {\dowithnextbox{\makeruledbox\nextbox\setbox#1\nextbox}} \def\setruledbox#1=% not nice, better {\afterassignment\supp_visualizers_setruledbox_indeed\scratchcounter} \def\supp_visualizers_setruledbox_indeed {\dowithnextboxcs\supp_visualizers_setruledbox_finish} \def\supp_visualizers_setruledbox_finish {\makeruledbox\nextbox \setbox\scratchcounter\nextbox} %D \macros %D {investigateskip, %D investigatecount, %D investigatemuskip} %D %D Before we meet the visualizing macro's, we first implement %D ourselves some handy utility ones. Just for the sake of %D efficiency and readability, we introduce some status %D variables, that tell us a bit more about the registers we %D use: %D %D \starttyping %D \ifflexible %D \ifzero %D \ifnegative %D \ifpositive %D \stoptyping %D %D These status variables are set when we call for one of the %D investigation macros, e.g. %D %D \starttyping %D \investigateskip\scratchskip %D \stoptyping %D %D We use some dirty trick to check stretchability of \SKIPS. %D Users of these macros are invited to study their exact %D behavior first. The positive and negative states both %D include zero and are in fact non-negative ($\geq0$) and %D non-positive ($\leq0$). Well, no dirty trick is needed %D any longer as we have \ETEX\ functionality. \newif\ifflexible \newif\ifzero \newif\ifnegative \newif\ifpositive \def\investigateskip#1% {\relax \ifdim#1=\zeropoint \ifdim\gluestretch#1=\zeropoint \ifdim\glueshrink#1=\zeropoint \flexiblefalse \else \flexibletrue \fi \else \flexibletrue \fi \else \flexibletrue \fi \ifdim#1=\zeropoint\relax \zerotrue \else \zerofalse \fi \ifdim#1<\zeropoint\relax \positivefalse \else \positivetrue \fi \ifdim#1>\zeropoint\relax \negativefalse \else \negativetrue \fi} \def\investigatecount#1% {\relax \flexiblefalse \ifnum#1=\zerocount \zerotrue \else \zerofalse \fi \ifnum#1<\zerocount \positivefalse \else \positivetrue \fi \ifnum#1>\zerocount \negativefalse \else \negativetrue \fi} \def\investigatemuskip#1% etex ? {\relax \edef\!!stringa{\the#1}% \edef\!!stringb{0mu}% \def\!!stringc##1##2\\{##1}% \expandafter\edef\expandafter\!!stringc\expandafter {\expandafter\!!stringc\!!stringa\\}% \edef\!!stringd{-}% \flexiblefalse \ifx\!!stringa\!!stringb \zerotrue \negativefalse \positivefalse \else \zerofalse \ifx\!!stringc\!!stringd \positivefalse \negativetrue \else \positivetrue \negativefalse \fi \fi} %D Now the neccessary utility macros are defined, we can make a %D start with the visualizing ones. The implementation of these %D macros is a compromise between readability, efficiency of %D coding and processing speed. Sometimes we do in steps what %D could have been done in combination, sometimes we use a few %D boxes more or less then actually needed, and more than once %D one can find the same piece of rule drawing code twice. %D \macros %D {ifcenteredvcue,normalvcue} %D %D Depending on the context, one can force visual vertical cues %D being centered along \type{\hsize} or being put at the %D current position. Although centering often looks better, %D we've chosen the second alternative as default. The main %D reason for doing so is that often when we don't set the %D \type{\hsize} ourselves, \TEX\ takes the value of the %D surrounding box. As a result the visual cues can migrate %D outside the current context. %D %D This behavior is accomplished by a small but effective %D auxiliary macro, which behavior can be influenced by the %D boolean \type{\centeredvcue}. By saying %D %D \starttyping %D \centeredvcuetrue %D \stoptyping %D %D one turns centering on. As said, we turn it off. \newif\ifcenteredvcue \centeredvcuefalse \def\normalvcue#1% {\normalhbox \ifcenteredvcue to \hsize \fi {\normalhss#1\normalhss}} %D We could have used the more robust version %D %D \starttyping %D \def\normalvcue% %D {\normalhbox \ifcenteredvcue to \hsize \fi %D \bgroup\bgroup\normalhss %D \aftergroup\normalhss\aftergroup\egroup %D \let\next=} %D \stoptyping %D %D or the probably best one: %D %D \starttyping %D \def\normalvcue% %D {\hbox \ifcenteredvcue to \hsize %D \bgroup\bgroup\normalhss %D \aftergroup\normalhss\aftergroup\egroup %D \else %D \bgroup %D \fi %D \let\next=} %D \stoptyping %D %D Because we don't have to preserve \CATCODES\ and only use %D small arguments, we stick to the first alternative. %D \macros %D {testrulewidth} %D %D We build our visual cues out of rules. At the cost of a much %D bigger \DVI\ file, this is to be prefered over using %D characters (1)~because we cannot be sure of their %D availability and (2)~because their dimensions are fixed. %D %D As with ruled boxes, we use a \DIMENSION\ to specify the %D width of the ruled elements. This dimension defaults to: %D %D \starttyping %D \testrulewidth=\boxrulewidth %D \stoptyping %D %D Because we prefer whole numbers for specifying the %D dimensions, we often use even multiples of %D \type{\testrulewidth}. %D \macros %D {visiblestretch} %D %D A second variable is introduced because of the stretch %D components of \SKIPS. At the cost of some accuracy we can %D make this stretch visible. %D %D \starttyping %D \visiblestretchtrue %D \stoptyping \newdimen\testrulewidth \testrulewidth=\boxrulewidth \newif\ifvisiblestretch \visiblestretchfalse %D \macros %D {ruledhss, %D ruledhfil,ruledhfilneg, %D ruledhfill,ruledhfillneg} %D %D We start with the easiest part, the fills. The scheme we %D follow is {\em visual filling -- going back -- normal %D filling}. Visualizing is implemented using \type{\cleaders}. %D Because the \BOX\ that follows this command is constructed %D only once, the \type{\copy} is not really a prerequisite. We %D prefer using a \type{\normalhbox} here instead of a %D \type{\hbox}. \def\setvisiblehfilbox#1\to#2#3#4% {\setbox#1\normalhbox {\visualvrule \s!width #2\testrulewidth \s!height#3\testrulewidth \s!depth #4\testrulewidth}% \smashbox#1} \def\doruledhfiller#1#2#3#4% {#1#2% \bgroup \dontinterfere \dontcomplain \setvisiblehfilbox0\to{4}{#3}{#4}% \setvisiblehfilbox2\to422% \copy0\copy2 \bgroup \setvisiblehfilbox0\to422% \cleaders \normalhbox to 12\testrulewidth {\normalhss\copy0\normalhss}% #1% \egroup \setbox0\normalhbox {\normalhskip-4\testrulewidth\copy0\copy2}% \smashbox0% \box0 \egroup} %D The horizontal fillers differ in their boundary %D visualization. Watch the small dots. Fillers can be %D combined within reasonable margins. %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hss}\ruledhss test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfil}\ruledhfil test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfill}\ruledhfill test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut %D \type{\hfil}\type{\hfil}\ruledhfil\ruledhfil %D test% %D \ruledhfil\type{\hfil}} %D \stoplinecorrection %D %D The negative counterparts are visualizes, but seldom %D become visible, apart from their boundaries. %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfilneg}\ruledhfilneg test} %D \stoplinecorrection %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\type{\hfillneg}\ruledhfillneg test} %D \stoplinecorrection %D %D Although leaders are used for visualizing, they are %D visualized themselves correctly as the next example shows. %D %D \startlinecorrection %D \baselinerulefalse %D \ruledhbox to \hsize %D {\strut\cleaders\normalhbox to 2em{\normalhss$\circ$\normalhss}\ruledhfill} %D \stoplinecorrection %D %D All five substitutions use the same auxiliary macro. Watch %D the positive first -- negative next approach. \unexpanded\def\ruledhss {\doruledhfiller\normalhss \normalhfilneg {0}{0}} \unexpanded\def\ruledhfil {\doruledhfiller\normalhfil \normalhfilneg {10}{-6}} \unexpanded\def\ruledhfill {\doruledhfiller\normalhfill \normalhfillneg{18}{-14}} \unexpanded\def\ruledhfilneg {\doruledhfiller\normalhfilneg \normalhfil {-6}{10}} \unexpanded\def\ruledhfillneg{\doruledhfiller\normalhfillneg\normalhfill {-14}{18}} %D \macros %D {ruledvss, %D ruledvfil,ruledvfilneg, %D ruledvfill,ruledvfillneg} %D %D The vertical mode commands adopt the same visualization %D scheme, but are implemented in a slightly different way. \def\setvisiblevfilbox#1\to#2#3#4% {\setbox#1\normalhbox {\visualvrule \s!width #2\testrulewidth \s!height#3\testrulewidth \s!depth #4\testrulewidth}% \smashbox#1}% \def\doruledvfiller#1#2#3% {#1#2% \bgroup \dontinterfere \dontcomplain \normaloffinterlineskip \setvisiblevfilbox0\to422% \setbox2\normalvcue {\normalhskip -#3\testrulewidth\copy0}% \smashbox2% \copy2 \bgroup \setbox2\normalvcue {\normalhskip -2\testrulewidth\copy0}% \smashbox2% \copy2 \cleaders \normalvbox to 12\testrulewidth {\normalvss\copy2\normalvss}% #1% \setbox2\normalvbox {\normalvskip-2\testrulewidth\copy2}% \smashbox2% \box2 \egroup \box2 \egroup} %D Because they act the same as their horizontal counterparts %D we only show a few examples. %D %D \startlinecorrection %D \hbox to \hsize %D {\dontinterfere %D \baselinerulefalse %D \centeredvcuetrue %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vss}\ruledvss last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfil}\ruledvfil last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfill}\ruledvfill last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfilneg}\ruledvfilneg last line}\normalhss %D \ruledvbox to 10ex %D {\hsize.18\hsize %D \type{\vfillneg}\ruledvfillneg last line}} %D \stoplinecorrection %D %D Keep in mind that \type{\vfillneg} is not part of \PLAIN\ %D \TEX, but are mimmicked by a macro. \unexpanded\def\ruledvss {\doruledvfiller\normalvss \normalvfilneg {2}} \unexpanded\def\ruledvfil {\doruledvfiller\normalvfil \normalvfilneg {-4}} \unexpanded\def\ruledvfill {\doruledvfiller\normalvfill \normalvfillneg{-12}} \unexpanded\def\ruledvfilneg {\doruledvfiller\normalvfilneg \normalvfil {8}} \unexpanded\def\ruledvfillneg{\doruledvfiller\normalvfillneg\normalvfill {16}} %D \macros %D {ruledhskip} %D %D Skips differ from kerns in two important aspects: %D %D \startitemize[packed] %D \item line and pagebreaks are allowed at a skip %D \item skips can have a positive and/or negative %D stretchcomponent %D \stopitemize %D %D Stated a bit different: kerns are fixed skips at which no %D line or pagebreak can occur. Because skips have a more open %D character, they are visualized in a open way. %D %D \startbuffer %D one %D \hskip +30pt plus 5pt %D two %D \hskip +30pt %D \hskip -10pt plus 5pt %D three %D \hskip 0pt %D four %D \hskip +30pt %D five %D \stopbuffer %D %D \ShowBufferedExample %D %D When skips have a stretch component, this is visualized by %D means of a dashed line. Positive skips are on top of the %D baseline, negative ones are below it. This way we can show %D the combined results. An alternative visualization of %D stretch could be drawing the mid line over a length of the %D stretch, in positive or negative direction. \def\supp_visualizers_hskip_indeed {\relax \dontinterfere \dontcomplain \investigateskip\scratchskip \ifzero \setbox0\normalhbox {\normalhskip-\testrulewidth \visualvrule \s!width4\testrulewidth \s!height16\testrulewidth \s!depth16\testrulewidth}% \else \setbox0\normalhbox to \ifnegative-\fi\scratchskip {\visualvrule \s!width2\testrulewidth \ifnegative\s!depth\else\s!height\fi16\testrulewidth \cleaders \visualhrule \ifnegative \s!depth2\testrulewidth \s!height\zeropoint \else \s!height2\testrulewidth \s!depth\zeropoint \fi \normalhfill \ifflexible \normalhskip\ifnegative\else-\fi\scratchskip \normalhskip2\testrulewidth \cleaders \normalhbox {\normalhskip 2\testrulewidth \visualvrule \s!width2\testrulewidth \s!height\ifnegative-7\else9\fi\testrulewidth \s!depth\ifnegative9\else-7\fi\testrulewidth \normalhskip 2\testrulewidth}% \normalhfill \fi \visualvrule \s!width2\testrulewidth \ifnegative\s!depth\else\s!height\fi16\testrulewidth}% \setbox0\normalhbox {\ifnegative\else\normalhskip-\scratchskip\fi \box0}% \fi \smashbox0% \ifvisiblestretch \else \flexiblefalse \fi \ifflexible % breaks ok but small displacements can occur \skip2\scratchskip \advance\skip2 -1\scratchskip \divide\skip2 2 \advance\scratchskip -\skip2 \normalhskip\scratchskip \normalpenalty\plustenthousand \box0 \normalhskip\skip2 \else \normalhskip\scratchskip \box0 \fi \egroup} \unexpanded\def\ruledhskip {\bgroup \afterassignment\supp_visualizers_hskip_indeed \scratchskip=} %D The visual skip is located at a feasible point. Normally %D this does not interfere with the normaltypesetting process. %D The next examples show (1)~the default behavior, (2)~the %D (not entirely correct) distributed stretch and (3)~the way %D the text is typeset without cues. %D %D \startbuffer %D \dorecurse %D {15} %D {test\hskip1em plus .5em minus .5em %D test\hskip2em %D test} %D \stopbuffer %D %D \startlinecorrection %D \showmakeup %D \getbuffer %D \stoplinecorrection %D %D \startlinecorrection %D \showmakeup %D \visiblestretchtrue %D \getbuffer %D \stoplinecorrection %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection %D \macros %D {ruledvskip} %D %D We are less fortunate when implementing the vertical skips. %D This is a direct result of interference between the boxes that %D visualize the skip and skip removal at a pagebreak. Normally %D skips disappear at the top of a page, but not of course when %D visualized in a \type{\vbox}. A quite perfect simulation %D could have been built if we would have had available two %D more primitives: \type{\hnop} and \type{\vnop}. These new %D primitives could stand for boxes that are visible but are %D not taken into account in any way. They are there for us, %D but not for \TEX. %D %D \startbuffer %D first line %D \vskip +30pt plus 5pt %D second line %D \vskip +30pt %D \vskip -10pt plus 5pt %D third line %D \par %D fourth line %D \vskip +30pt %D fifth line %D \vskip 0pt %D sixth line %D \stopbuffer %D %D \ShowBufferedExample %D %D We have to postpone \type{\prevdepth}. Although this %D precaution probably is not completely waterproof, it works %D quite well. \def\dodoruledvskip {\nextdepth\prevdepth \dontinterfere \dontcomplain \normaloffinterlineskip \investigateskip\scratchskip \ifzero \setbox0\normalvcue {\visualvrule \s!width32\testrulewidth \s!height2\testrulewidth \s!depth2\testrulewidth}% \else \setbox0\normalvbox to \ifnegative-\fi\scratchskip {\visualhrule \s!width16\testrulewidth \s!height2\testrulewidth \ifflexible \cleaders \normalhbox to 16\testrulewidth {\normalhss \normalvbox {\normalvskip 2\testrulewidth \visualhrule \s!width2\testrulewidth \s!height2\testrulewidth \normalvskip 2\testrulewidth}% \normalhss}% \normalvfill \else \normalvfill \fi \visualhrule \s!width16\testrulewidth \s!height2\testrulewidth}% \setbox2\normalvbox to \ht0 {\visualhrule \s!width2\testrulewidth \s!height\ht0}% \ifnegative \ht0\zeropoint \setbox0\normalhbox {\normalhskip2\testrulewidth % will be improved \normalhskip-\wd0\box0}% \fi \smashbox0% \smashbox2% \setbox0\normalvcue {\box2\box0}% \setbox0\normalvbox {\ifnegative\normalvskip\scratchskip\fi\box0}% \smashbox0% \fi \ifvisiblestretch \ifflexible \skip2\scratchskip \advance\skip2 -1\scratchskip \divide\skip2 2 \advance\scratchskip -\skip2 \normalvskip\skip2 \fi \fi \normalpenalty\plustenthousand \box0 \prevdepth\nextdepth % not \dp0=\nextdepth \normalvskip\scratchskip} %D We try to avoid interfering at the top of a page. Of course %D we only do so when we are in the main vertical list. \def\doruledvskip {\endgraf % \par \ifdim\pagegoal=\maxdimen \ifinner \dodoruledvskip \fi \else \dodoruledvskip \fi \egroup} \unexpanded\def\ruledvskip {\bgroup \afterassignment\doruledvskip \scratchskip=} %D \macros %D {ruledkern} %D %D The macros that implement the kerns are a bit more %D complicated than needed, because they also serve the %D visualization of glue, our \PLAIN\ defined kerns with %D stretch or shrink. We've implemented both horizontal and %D vertical kerns as ruled boxes. %D %D \startbuffer %D one %D \kern +30pt %D two %D \kern +30pt %D \kern -10pt %D three %D \kern 0pt %D four %D \kern +30pt %D five %D \stopbuffer %D %D \ShowBufferedExample %D %D Positive and negative kerns are placed on top or below the %D baseline, so we are able to track their added result. We %D didn't mention spacings of 0~pt yet. Zero values are %D visualized a bit different, because we want to see them %D anyhow. \def\supp_visualizers_hkern_indeed {\dontinterfere \dontcomplain \baselinerulefalse \investigateskip\scratchskip \boxrulewidth2\testrulewidth \ifzero \setbox0\ruledhbox to 8\testrulewidth {\visualvrule \s!width\zeropoint \s!height16\testrulewidth \s!depth16\testrulewidth}% \setbox0\normalhbox {\normalhskip-4\testrulewidth\box0}% \else \setbox0\ruledhbox to \ifnegative-\fi\scratchskip {\visualvrule \s!width\zeropoint \ifnegative\s!depth\else\s!height\fi16\testrulewidth \ifflexible \normalhskip2\testrulewidth \cleaders \normalhbox {\normalhskip 2\testrulewidth \visualvrule \s!width2\testrulewidth \s!height\ifnegative-7\else9\fi\testrulewidth \s!depth\ifnegative9\else-7\fi\testrulewidth \normalhskip 2\testrulewidth}% \normalhfill \else \normalhfill \fi}% \testrulewidth2\testrulewidth \setbox0\ruledhbox{\box0}% \make... \fi \smashbox0% \normalpenalty\plustenthousand \normalhbox to \zeropoint {\ifnegative\normalhskip1\scratchskip\fi \box0}% \afterwards\scratchskip \egroup} \unexpanded\def\ruledhkern#1% {\bgroup \let\afterwards#1% \afterassignment\supp_visualizers_hkern_indeed \scratchskip=} %D After having seen the horizontal ones, the vertical kerns %D will not surprise us. In this example we use \type{\par} to %D switch to vertical mode. %D %D \startbuffer %D first line %D \par \kern +30pt %D second line %D \par \kern +30pt %D \par \kern -10pt %D third line %D \par %D fourth line %D \par \kern +30pt %D fifth line %D \par \kern 0pt %D sixth line %D \stopbuffer %D %D \ShowBufferedExample %D %D Like before, we have to postpone \type{\prevdepth}. If we %D leave out this trick, we got ourselves some wrong spacing. \def\supp_visualizers_vkern_finish {\nextdepth\prevdepth \dontinterfere \dontcomplain \baselinerulefalse \normaloffinterlineskip \investigateskip\scratchskip \boxrulewidth2\testrulewidth \ifzero \setbox0\ruledhbox to 32\testrulewidth {\visualvrule \s!width\zeropoint \s!height4\testrulewidth \s!depth4\testrulewidth}% \else \setbox0\ruledvbox to \ifnegative-\fi\scratchskip {\hsize16\testrulewidth \ifflexible \cleaders \normalhbox to 16\testrulewidth {\normalhss \normalvbox {\normalvskip 2\testrulewidth \visualhrule \s!width2\testrulewidth \s!height2\testrulewidth \normalvskip 2\testrulewidth}% \normalhss}% \normalvfill \else \visualvrule \s!width\zeropoint \s!height\ifnegative-\fi\scratchskip \normalhfill \fi} \fi \testrulewidth2\testrulewidth \setbox0\ruledvbox{\box0}% \make... \smashbox0% \setbox0\normalvbox {\ifnegative\normalvskip\scratchskip\fi \normalvcue {\ifnegative\normalhskip-16\testrulewidth\fi\box0}}% \smashbox0% \normalpenalty\plustenthousand \box0 \prevdepth\nextdepth} % not \dp0=\nextdepth \def\supp_visualizers_vkern_indeed {\ifdim\pagegoal=\maxdimen \ifinner \supp_visualizers_vkern_finish \fi \else \supp_visualizers_vkern_finish \fi \afterwards\scratchskip \egroup} \unexpanded\def\ruledvkern#1% {\bgroup \let\afterwards#1\relax \afterassignment\supp_visualizers_vkern_indeed \scratchskip=} \unexpanded\def\ruledkern {\ifvmode \expandafter\ruledvkern \else \expandafter\ruledhkern \fi \normalkern} %D A a bit more \TEX nice solution is: %D %D \starttyping %D \unexpanded\def\ruledkern% %D {\csname ruled\ifvmode v\else h\fi kern\endcsname\normalkern} %D \stoptyping %D \macros %D {ruledhglue,ruledvglue} %D %D The non-primitive glue commands are treated as kerns with %D stretch. This stretch is presented as a dashed line. I %D have to admit that until now, I've never used these glue %D commands. %D %D \startbuffer %D one %D \hglue +30pt plus 5pt %D two %D \hglue +30pt %D \hglue -10pt plus 5pt %D three %D \hglue 0pt %D four %D \hglue +30pt %D five %D \stopbuffer %D %D \ShowBufferedExample \def\supp_visualizers_hglue_indeed {\leavevmode \scratchcounter\spacefactor \visualvrule\s!width\zeropoint \normalpenalty\plustenthousand \ruledhkern\normalhskip\scratchskip \spacefactor\scratchcounter \egroup} \unexpanded\def\ruledhglue {\bgroup \afterassignment\supp_visualizers_hglue_indeed\scratchskip=} %D \startbuffer %D first line %D \vglue +30pt plus 5pt %D second line %D \vglue +30pt %D \vglue -10pt plus 5pt %D third line %D \par %D fourth line %D \vglue +30pt %D fifth line %D \vglue 0pt %D sixth line %D \stopbuffer %D %D \ShowBufferedExample \def\supp_visualizers_vglue_indeed {\endgraf % \par \nextdepth\prevdepth \visualhrule\s!height\zeropoint \normalpenalty\plustenthousand \ruledvkern\normalvskip\scratchskip \prevdepth\nextdepth \egroup} \unexpanded\def\ruledvglue {\bgroup \afterassignment\supp_visualizers_vglue_indeed\scratchskip=} %D \macros %D {ruledmkern,ruledmskip} %D %D Mathematical kerns and skips are specified in mu. This %D font related unit is incompatible with those of \DIMENSIONS\ %D and \SKIPS. Because in math mode spacing is often a very %D subtle matter, we've used a very simple, not overloaded way %D to show them. \def\supp_visualizers_mkern_finish#1% {\dontinterfere \dontcomplain \setbox\boxrulescratchbox\normalhbox {$\normalmkern\ifnegative-\fi\scratchskip$}% \setbox\boxrulescratchbox\normalhbox to \wd\boxrulescratchbox {\visualvrule \s!height16\testrulewidth \s!depth 16\testrulewidth \s!width \testrulewidth \leaders \visualhrule \s!height\ifpositive 16\else-14\fi\testrulewidth \s!depth \ifpositive-14\else 16\fi\testrulewidth \normalhfill \ifflexible \normalhskip-\wd\boxrulescratchbox \leaders \visualhrule \s!height\testrulewidth \s!depth \testrulewidth \normalhfill \fi \visualvrule \s!height16\testrulewidth \s!depth 16\testrulewidth \s!width \testrulewidth}% \smashbox0% \ifnegative #1\scratchskip \box\boxrulescratchbox \else \box\boxrulescratchbox #1\scratchskip \fi \egroup} %D \startbuffer %D $a \mkern3mu = \mkern3mu %D b \quad %D \mkern-2mu + \mkern-2mu %D \quad c$ %D \stopbuffer %D %D \ShowBufferedExample \unexpanded\def\ruledmkern {\bgroup \afterassignment\supp_visualizers_mkern_indeed \scratchmuskip=} \def\supp_visualizers_mkern_indeed {\investigatemuskip\scratchmuskip \flexiblefalse \supp_visualizers_mkern_finish\normalmkern} %D \startbuffer %D $a \mskip3mu = \mskip3mu %D b \quad %D \mskip-2mu + \mskip-2mu %D \quad c$ %D \stopbuffer %D %D \ShowBufferedExample \def\supp_visualizers_mskip_indeed {\investigatemuskip\scratchmuskip \flexibletrue \supp_visualizers_mkern_finish\normalmskip} \unexpanded\def\ruledmskip {\bgroup \afterassignment\supp_visualizers_mskip_indeed \scratchmuskip=} %D \macros %D {penalty} %D %D After presenting fills, skip, kerns and glue we've come to %D see penalties. In the first implementation --- most of the %D time needed to develop this set of macros went into testing %D different types of visualization --- penalties were mere %D small blocks with one black half, depending on the sign. %D This most recent version also gives an indication of the %D amount of penalty. Penalties can go from less than $-10000$ %D to over $+10000$, and their behavior is somewhat %D non-lineair, with some values having special meanings. We %D therefore decided not to use its value for a lineair %D indicator. %D %D \startbuffer %D one %D \penalty +100 %D two %D \penalty +100 %D \penalty -100 %D three %D \penalty 0 %D four %D \penalty +100 %D five %D \stopbuffer %D %D \ShowBufferedExample %D %D The small sticks at the side of the penalty indicate it %D size. The next example shows the positive and negative %D penalties of 0, 1, 10, 100, 1000 and 10000. %D %D \startlinecorrection %D \hbox %D {test \ruledhpenalty0 %D test \ruledhpenalty1 %D test \ruledhpenalty10 %D test \ruledhpenalty100 %D test \ruledhpenalty1000 %D test \ruledhpenalty10000 %D test} %D \stoplinecorrection %D %D \blank %D %D \startlinecorrection %D \hbox %D {test \ruledhpenalty0 %D test \ruledhpenalty-1 %D test \ruledhpenalty-10 %D test \ruledhpenalty-100 %D test \ruledhpenalty-1000 %D test \ruledhpenalty-10000 %D test} %D \stoplinecorrection %D %D \blank %D %D This way stacked penalties of different severance can be %D shown in combination. %D %D test \ruledhpenalty10 \ruledhpenalty100 %D test %D test \ruledhpenalty1000 \ruledhpenalty-1000 %D test \def\supp_visualizers_penalty_box#1#2#3#4#5#6% {\setbox#1\normalhbox {\ifnum#2=\zerocount \else \edef\sign{\ifnum#2>\zerocount +\else-\fi}% \scratchdimen \ifnum\sign#2>9999 28\else \ifnum\sign#2>999 22\else \ifnum\sign#2>99 16\else \ifnum\sign#2>9 10\else 4\fi\fi\fi\fi \testrulewidth \ifnum#2<\zerocount \normalhskip-\scratchdimen \normalhskip-2\testrulewidth \visualvrule \s!width 2\testrulewidth \s!height#3\testrulewidth \s!depth #4\testrulewidth \fi \visualvrule \s!width \scratchdimen \s!height#5\testrulewidth \s!depth #6\testrulewidth \ifnum#2>\zerocount \visualvrule \s!width 2\testrulewidth \s!height#3\testrulewidth \s!depth #4\testrulewidth \fi \fi}% \smashbox#1} \unexpanded\def\ruledhpenalty {\bgroup \afterassignment\supp_visualizers_hpenalty_indeed \scratchcounter=} \def\supp_visualizers_hpenalty_indeed {\dontinterfere \dontcomplain \investigatecount\scratchcounter \testrulewidth2\testrulewidth \boxrulewidth\testrulewidth \setbox0\ruledhbox to 8\testrulewidth {\ifnegative\else\normalhss\fi \visualvrule \s!depth8\testrulewidth \s!width\ifzero\zeropoint\else4\testrulewidth\fi \ifpositive\else\normalhss\fi}% \supp_visualizers_penalty_box{2}{\scratchcounter}{0}{8}{-3.5}{4.5}% \normalpenalty\plustenthousand \setbox0\normalhbox {\normalhskip-4\testrulewidth \ifnegative \box2\box0 \else \box0\box2 \fi}% \smashbox0% \box0 \normalpenalty\scratchcounter \egroup} %D The size of a vertical penalty is also shown on the %D horizontal axis. This way there is less interference with %D the often preceding or following skips and kerns. %D %D \startbuffer %D first line %D \par \penalty +100 %D second line %D \par \penalty +100 %D \par \penalty -100 %D third line %D \par \penalty 0 %D fourth line %D \par \penalty +100 %D fifth line %D \stopbuffer %D %D \ShowBufferedExample \unexpanded\def\ruledvpenalty {\bgroup \afterassignment\supp_visualizers_vpenalty_indeed \scratchcounter=} \def\supp_visualizers_vpenalty_indeed {\ifdim\pagegoal=\maxdimen \else \nextdepth\prevdepth \dontinterfere \dontcomplain \investigatecount\scratchcounter \testrulewidth2\testrulewidth \boxrulewidth\testrulewidth \setbox0\ruledhbox {\visualvrule \s!height4\testrulewidth \s!depth 4\testrulewidth \s!width \zeropoint \visualvrule \s!height\ifnegative.5\else4\fi\testrulewidth \!!dept \ifpositive.5\else4\fi\testrulewidth \s!width 8\testrulewidth}% \supp_visualizers_penalty_box{2}{\scratchcounter}{4}{4}{.5}{.5}% \setbox0\normalhbox {\normalhskip-4\testrulewidth \ifnegative \box2\box0 \else \box0\box2 \fi \normalhss}% \smashbox0% \normalpenalty\plustenthousand \nointerlineskip \dp0\nextdepth % not \prevdepth=\nextdepth \normalvbox {\normalvcue{\box0}}% \fi \normalpenalty\scratchcounter \egroup} %D This comes together in: \unexpanded\def\ruledpenalty {\ifvmode \expandafter\ruledvpenalty \else \expandafter\ruledhpenalty \fi} %D \macros %D {showfils,dontshowfils, %D showboxes,dontshowboxes, %D showskips,dontshowskips, %D showpenalties,dontshowpenalties} %D %D For those who want to manipulate the visual cues in detail, %D we have grouped them. \newif\ifshowingcomposition % see later why we need this \unexpanded\def\showfils {\showingcompositiontrue \let\hss \ruledhss \let\hfil \ruledhfil \let\hfill \ruledhfill \let\hfilneg \ruledhfilneg \let\hfillneg \ruledhfillneg \let\vss \ruledvss \let\vfil \ruledvfil \let\vfill \ruledvfill \let\vfilneg \ruledvfilneg \let\vfillneg \ruledvfillneg} \unexpanded\def\dontshowfils {\let\hss \normalhss \let\hfil \normalhfil \let\hfill \normalhfill \let\hfilneg \normalhfilneg \let\hfillneg \normalhfillneg \let\vss \normalvss \let\vfil \normalvfil \let\vfill \normalvfill \let\vfilneg \normalvfilneg \let\vfillneg \normalvfillneg} \unexpanded\def\showboxes {\showingcompositiontrue \baselineruletrue \let\hbox \ruledhbox \let\vbox \ruledvbox \let\vtop \ruledvtop \let\vcenter \ruledvcenter} \unexpanded\def\dontshowboxes {\let\hbox \normalhbox \let\vbox \normalvbox \let\vtop \normalvtop \let\vcenter \normalvcenter} \unexpanded\def\showskips {\showingcompositiontrue \let\hskip \ruledhskip \let\vskip \ruledvskip \let\kern \ruledkern \let\mskip \ruledmskip \let\mkern \ruledmkern \let\hglue \ruledhglue \let\vglue \ruledvglue} \unexpanded\def\dontshowskips {\let\hskip \normalhskip \let\vskip \normalvskip \let\kern \normalkern \let\mskip \normalmskip \let\mkern \normalmkern \let\hglue \normalhglue \let\vglue \normalvglue} \unexpanded\def\showpenalties {\showingcompositiontrue \let\penalty \ruledpenalty} \unexpanded\def\dontshowpenalties {\let\penalty \normalpenalty} %D \macros %D {showcomposition,dontshowcomposition, %D showingcomposition} %D %D All these nice options come together in three macros. One %D for turning the options on, one for turning them off, and a %D boolean for enabling the mechanism outside the scope of the %D user. The first two macros only do their job when we are %D actually showing the composition. %D %D \starttyping %D \showingcompositiontrue %D \showcomposition %D \stoptyping %D %D Because the output routine can do tricky things, like %D multiple column typesetting and manipulation of the %D pagebody, shifting things around and so on, the macro %D \type{\dontshowcomposition} best can be called when we enter %D this routine. Too much visual cues just don't make sense. In %D \CONTEXT\ this has been taken care of. \newif\ifshowingcomposition \unexpanded\def\showcomposition {\ifshowingcomposition \showfils \showboxes \showskips \showpenalties \fi} \unexpanded\def\dontshowcomposition {\ifshowingcomposition \dontshowfils \dontshowboxes \dontshowskips \dontshowpenalties \fi} %D \macros %D {showmakeup, %D defaulttestrulewidth} %D %D Just to make things even more easy, we have defined: %D %D \starttyping %D \showmakeup %D \stoptyping %D %D For the sake of those who don't (yet) use \CONTEXT\ we %D preset \type{\defaulttestrulewidth} to the already set %D value. Otherwise we default to a bodyfontsize related value. %D %D \starttyping %D \def\defaulttestrulewidth{.2pt} %D \stoptyping %D %D Beware, it's a macro not a \DIMENSION. \ifx\bodyfontsize\undefined \edef\defaulttestrulewidth{\the\testrulewidth} \else \def\defaulttestrulewidth{.02\bodyfontsize} \fi \unexpanded\def\showmakeup {\testrulewidth\defaulttestrulewidth \showingcompositiontrue \showcomposition} \protect %D Lets end with some more advanced examples. %D Definitions and enumerations come in many flavors. The %D next one for instance is defined as: %D %D \starttyping %D \definedescription[test][place=left,hang=3,width=6em] %D \stoptyping %D %D When applied to some text, this would look like: %D %D \bgroup %D \showmakeup %D \definedescription[test][location=left,hang=3,width=6em] %D %D \test{visual\\debugger} I would be very pleased if \TEX\ %D had two more primitives: \type{\vnop} and \type{\hnop}. Both %D should act and show up as normal boxes, but stay invisible %D for \TEX\ when it's doing calculations. The \type{\vnop} %D for instance should not interact with the internal mechanism %D responsible for the disappearing skips, kerns and penalties %D at a pagebreak. As long as we don't have these two boxtypes, %D visual debugging will never be perfect. %D %D \egroup %D %D The index to this section looks like: %D %D {\setupreferencing[prefixprefix=dummy]\showmakeup\placeindex[criterium=local]} %D %D Although not impressive examples or typesetting, both %D show us how and where things happen. When somehow the last %D lines in this two column index don't allign, then this is %D due to some still unknown interference. \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/status-mkiv.tex0000644000175000017500000002752112130411274024704 0ustar norbertnorbert\usemodule[abr-02] \setupbodyfont [dejavu,9pt] \setuppapersize [A4,landscape] \setuplayout [width=middle, height=middle, backspace=.5cm, topspace=.5cm, footer=0pt, header=1.25cm] \setuphead [title] [style=\bfa, page=yes, after={\blank[line]}] \setuppagenumbering [location=] \setupheadertexts [\currentdate] [MkIV Status / Page \pagenumber] % \showmakeup % \showallmakeup \starttext % logs.report (immediate) versus logs.messenger (in flow) \starttitle[title=Todo] \startitemize[packed] \startitem currently the new namespace prefixes are not consistent but this will be done when we're satisfied with one scheme \stopitem \startitem there will be additional columns in the table, like for namespace so we need another round of checking then \stopitem \startitem the lua code will be cleaned up upgraded as some is quite old and experimental \stopitem \startitem we need a proper dependency tree and better defined loading order \stopitem \startitem all dotag.. will be moved to the tags_.. namespace \stopitem \startitem we need to check what messages are gone (i.e.\ clean up mult-mes) \stopitem \startitem some commands can go from mult-def (and the xml file) \stopitem \startitem check for setuphandler vs simplesetuphandler \stopitem \startitem for the moment we will go for \type {xxxx_} namespaces that (mostly) match the filename but later we can replace these by longer names (via a script) so module writers should {\bf not} use the core commands with \type{_} in the name \stopitem \startitem the message system will be unified \stopitem \startitem maybe rename dowhatevertexcommand to fromluawhatevertexcommand \stopitem \startitem consider moving setups directly to lua end (e.g. in characterspacing, breakpoint, bitmaps etc.) \stopitem \startitem more local temporary \type {\temp...} will become \type {\p_...} \stopitem \startitem check all ctxlua calls for ctxcommand \stopitem \startitem rename all those \type {\current}s in strc \stopitem \startitem check \type {option} vs \type {options} \stopitem \startitem check \type {type} vs \type {kind} \stopitem \startitem check \type {label} vs \type {name} vs \type {tag} \stopitem \startitem check \type {limop}, different limops should should be classes \stopitem \startitem too many positions in simple files (itemize etc) \stopitem \startitem math domains/dictionaries \stopitem \startitem xtables don't span vertically with multilines (yet) \stopitem \startitem notes in mixed columns \stopitem \startitem floats in mixed columns \stopitem \startitem check return values \type {os.execute} \stopitem \startitem more r, d, k in xml code \stopitem \startitem mathml, more in \LUA \stopitem \startitem style: font-size, font, color handling in \HTML\ (lxml-css) \stopitem \startitem a \type {\name {A.B.C DEF}} auto-nobreakspace \stopitem \startitem redo \CWEB\ module with \LUA \stopitem \startitem maybe move characters.blocks to its own file \stopitem \startitem more local context = context in \LUA\ files \stopitem \startitem check and optimize all storage.register and locals (cosmetics) \stopitem \startitem check all used modules in \LUA\ (and local them) \stopitem \startitem environment and basic lua helpers are now spread over too many files \stopitem \startitem isolate tracers and showers \stopitem \startitem check all possible usage of ctxcommand \stopitem \startitem there are more s-* modules, like s-fnt-41 \stopitem \startitem check (un)marked tables \stopitem \stopitemize \stoptitle \starttitle[title=To keep an eye on] \startitemize[packed] \startitem Currently lpeg replacements interpret the percent sign so we need to escape it. \stopitem \startitem Currently numbers and strings are cast in comparisons bu tthat might change in the future. \stopitem \stopitemize \stoptitle \definehighlight[notabenered] [color=darkred, style=bold] \definehighlight[notabeneblue] [color=darkblue, style=bold] \definehighlight[notabeneyellow] [color=darkyellow, style=bold] \definehighlight[notabenemagenta][color=darkmagenta,style=bold] \startluacode local coremodules = dofile("status-mkiv.lua") local valid = table.tohash { "toks", "attr", "page", "buff", "font", "colo", "phys", "supp", "typo", "strc", "syst", "tabl", "spac", "scrn", "lang", "lxml", "mlib", "java", "pack", "math", "symb", "grph", "anch", "luat", "mult", "back", "node", "meta", "norm", "catc", "cldf", "file", "char", "core", "layo", "trac", "cont", "regi", "enco", "hand", "unic", "sort", "blob", "type", "scrp", "prop", "chem", "bibl", "task", "whatever", "mp", "s", "x", "m", "mtx", } local specialcategories = { mkvi = true, } local what = { "main", "core", "lua", "optional", "implementations", "extra", "extras", "metafun", "modules", "resources" } local totaltodo = 0 local totalpending = 0 local totalobsolete = 0 local totalloaded = 0 local function summary(nofloaded,noftodo,nofpending,nofobsolete) local nofdone = nofloaded - noftodo - nofpending - nofobsolete context.starttabulate { "|B|r|" } context.HL() context.NC() context("done") context.NC() context(nofdone) context.NC() context.NR() context.NC() context("todo") context.NC() context(noftodo) context.NC() context.NR() context.NC() context("pending") context.NC() context(nofpending) context.NC() context.NR() context.NC() context("obsolete") context.NC() context(nofobsolete) context.NC() context.NR() context.HL() context.NC() context("loaded") context.NC() context(nofloaded) context.NC() context.NR() context.HL() context.stoptabulate() end if coremodules then local function tabelize(loaded,what) if loaded then local noftodo = 0 local nofpending = 0 local nofobsolete = 0 local nofloaded = #loaded local categories = { } for k, v in next, valid do categories[k] = { } end for i=1,nofloaded do local l = loaded[i] l.order = i local category = string.match(l.filename,"([^%-]+)%-") or "whatever" local c = categories[category] if c then c[#c+1] = l end end for k, loaded in table.sortedhash(categories) do local nofloaded = #loaded if nofloaded > 0 then table.sort(loaded,function(a,b) return a.filename < b.filename end) -- in place context.starttitle { title = string.format("%s: %s",what,k) } context.starttabulate { "|Tr|Tlw(3em)|Tlw(12em)|Tlw(12em)|Tlw(4em)|Tl|Tl|Tl|Tp|" } context.NC() context.bold("order") context.NC() context.bold("kind") context.NC() context.bold("file") context.NC() context.bold("loading") context.NC() context.bold("status") context.NC() context.bold("reference") context.NC() context.bold("manual") context.NC() context.bold("wiki") context.NC() context.bold("comment") context.NC() context.NR() context.HL() for i=1,nofloaded do local module = loaded[i] local status = module.status local category = module.category local filename = module.filename context.NC() context(module.order) context.NC() if specialcategories[category] then context.notabeneblue(category) else context(category) end context.NC() if #filename>20 then context(string.sub(filename,1,18) .. "..") else context(filename) end context.NC() context(module.loading) context.NC() if status == "todo" then context.notabenered(status) noftodo = noftodo + 1 elseif status == "pending" then context.notabeneyellow(status) nofpending = nofpending + 1 elseif status == "obsolete" then context.notabenemagenta(status) nofobsolete = nofobsolete + 1 else context(status) end context.NC() context(module.reference) context.NC() context(module.manual) context.NC() context(module.wiki) context.NC() context(module.comment) context.NC() context.NR() end context.stoptabulate() context.stoptitle() end end context.starttitle { title = string.format("summary of %s modules",what) } summary(nofloaded,noftodo,nofpending,nofobsolete) context.stoptitle() totaltodo = totaltodo + noftodo totalpending = totalpending + nofpending totalobsolete = totalobsolete + nofobsolete totalloaded = totalloaded + nofloaded end end for i=1,#what do tabelize(coremodules[what[i]],what[i]) end end -- context.starttitle { title = "Valid prefixes" } -- -- for namespace, data in table.sortedhash(namespaces) do -- if valid[namespace] then -- context.type(namespace) -- end -- context.par() -- end -- -- context.stoptitle() context.starttitle { title = string.format("summary of all",what) } summary(totalloaded,totaltodo,totalpending,totalobsolete) context.stoptitle() if io.exists("status-namespaces.lua") then context.starttitle { title = "messy namespaces" } local namespaces = dofile("status-namespaces.lua") for namespace, data in table.sortedhash(namespaces) do if valid[namespace] then else context(namespace) end context.par() end context.stoptitle() end if io.exists("status-registers.lua") then context.starttitle { title = "messy registers" } local registers = dofile("status-registers.lua") for register, data in table.sortedhash(registers) do context(register) context.par() for name in table.sortedhash(data) do context.quad() context.type(name) context.par() end context.par() end context.stoptitle() end context.starttitle { title = "callbacks" } commands.showcallbacks() context.stoptitle() \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/chem-str.lua0000644000175000017500000007571012131045160024121 0ustar norbertnorbertif not modules then modules = { } end modules ['chem-str'] = { version = 1.001, comment = "companion to chem-str.mkiv", author = "Hans Hagen and Alan Braslau", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The original \PPCHTEX\ code was written in pure \TEX\, although later we made -- the move from \PICTEX\ to \METAPOST\. The current implementation is a mix between -- \TEX\, \LUA\ and \METAPOST. Although the first objective is to get a compatible -- but better implementation, later versions might provide more. -- -- Well, the later version has arrived as Alan took it upon him to make the code -- deviate even further from the original implementation. The original (early \MKII) -- variant operated within the boundaries of \PICTEX\ and as it supported MetaPost as -- alternative output. As a consequence it still used a stepwise graphic construction -- approach. As we used \TEX\ for parsing, the syntax was more rigid than it is now. -- This new variant uses a more mathematical and metapostisch approach. In the process -- more rendering variants have been added and alignment has been automated. As a result -- the current user interface is slightly different from the old one but hopefully users -- will like the added value. -- directive_strictorder: one might set this to off when associated texts are disordered too local trace_structure = false trackers .register("chemistry.structure", function(v) trace_structure = v end) local trace_metapost = false trackers .register("chemistry.metapost", function(v) trace_metapost = v end) local trace_boundingbox = false trackers .register("chemistry.boundingbox", function(v) trace_boundingbox = v end) local trace_textstack = false trackers .register("chemistry.textstack", function(v) trace_textstack = v end) local directive_strictorder = true directives.register("chemistry.strictorder", function(v) directive_strictorder = v end) local directive_strictindex = false directives.register("chemistry.strictindex", function(v) directive_strictindex = v end) local report_chemistry = logs.reporter("chemistry") local format, gmatch, match, lower, gsub = string.format, string.gmatch, string.match, string.lower, string.gsub local concat, insert, remove, unique, sorted = table.concat, table.insert, table.remove, table.unique, table.sorted local processor_tostring = typesetters and typesetters.processors.tostring local settings_to_array = utilities.parsers.settings_to_array local settings_to_array_with_repeat = utilities.parsers.settings_to_array_with_repeat local formatters = string.formatters local lpegmatch = lpeg.match local P, R, S, C, Cs, Ct, Cc, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.Cc, lpeg.Cmt local variables = interfaces and interfaces.variables local context = context local formatters = string.formatters local texcount = tex.count local v_default = variables.default local v_small = variables.small local v_medium = variables.medium local v_big = variables.big local v_normal = variables.normal local v_fit = variables.fit local v_on = variables.on local v_none = variables.none local mpnamedcolor = attributes.colors.mpnamedcolor local topoints = number.topoints local todimen = string.todimen chemistry = chemistry or { } local chemistry = chemistry chemistry.instance = "chemistry" chemistry.format = "metafun" chemistry.structures = 0 local common_keys = { b = "line", r = "line", sb = "line", sr = "line", rd = "line", rh = "line", rb = "line", rbd = "line", cc = "line", ccd = "line", line = "line", dash = "line", arrow = "line", c = "fixed", cd = "fixed", z = "text", zt = "text", zlt = "text", zrt = "text", rz = "text", rt = "text", lrt = "text", rrt = "text", label = "text", zln = "number", zrn = "number", rn = "number", lrn = "number", rrn = "number", zn = "number", number = "number", mov = "transform", mark = "transform", move = "transform", diff = "transform", off = "transform", adj = "transform", sub = "transform", } local front_keys = { bb = "line", eb = "line", rr = "line", lr = "line", lsr = "line", rsr = "line", lrd = "line", rrd = "line", lrh = "line", rrh = "line", lrbd = "line", rrbd = "line", lrb = "line", rrb = "line", lrz = "text", rrz = "text", lsub = "transform", rsub = "transform", } local one_keys = { db = "line", tb = "line", bb = "line", dr = "line", hb = "line", bd = "line", bw = "line", oe = "line", sd = "line", rdb = "line", ldb = "line", ldd = "line", rdd = "line", ep = "line", es = "line", ed = "line", et = "line", cz = "text", rot = "transform", dir = "transform", rm = "transform", mir = "transform", } local ring_keys = { db = "line", br = "line", lr = "line", rr = "line", lsr = "line", rsr = "line", lrd = "line", rrd = "line", lrb = "line", rrb = "line", lrh = "line", rrh = "line", lrbd = "line", rrbd = "line", dr = "line", eb = "line", er = "line", ed = "line", au = "line", ad = "line", s = "line", ss = "line", mid = "line", mids = "line", midz = "text", lrz = "text", rrz = "text", crz = "text", rot = "transform", mir = "transform", adj = "transform", lsub = "transform", rsub = "transform", rm = "transform", } -- table.setmetatableindex(front_keys,common_keys) -- table.setmetatableindex(one_keys,common_keys) -- table.setmetatableindex(ring_keys,common_keys) -- or (faster but not needed here): front_keys = table.merged(front_keys,common_keys) one_keys = table.merged(one_keys,common_keys) ring_keys = table.merged(ring_keys,common_keys) local syntax = { carbon = { max = 4, keys = one_keys, }, alkyl = { max = 4, keys = one_keys, }, newmanstagger = { max = 6, keys = one_keys, }, newmaneclipsed = { max = 6, keys = one_keys, }, one = { max = 8, keys = one_keys, }, three = { max = 3, keys = ring_keys, }, four = { max = 4, keys = ring_keys, }, five = { max = 5, keys = ring_keys, }, six = { max = 6, keys = ring_keys, }, seven = { max = 7, keys = ring_keys, }, eight = { max = 8, keys = ring_keys, }, nine = { max = 9, keys = ring_keys, }, fivefront = { max = 5, keys = front_keys, }, sixfront = { max = 6, keys = front_keys, }, chair = { max = 6, keys = front_keys, }, boat = { max = 6, keys = front_keys, }, pb = { direct = 'chem_pb;' }, pe = { direct = 'chem_pe;' }, save = { direct = 'chem_save;' }, restore = { direct = 'chem_restore;' }, chem = { direct = formatters['chem_symbol("\\chemicaltext{%s}");'], arguments = 1 }, space = { direct = 'chem_symbol("\\chemicalsymbol[space]");' }, plus = { direct = 'chem_symbol("\\chemicalsymbol[plus]");' }, minus = { direct = 'chem_symbol("\\chemicalsymbol[minus]");' }, gives = { direct = formatters['chem_symbol("\\chemicalsymbol[gives]{%s}{%s}");'], arguments = 2 }, equilibrium = { direct = formatters['chem_symbol("\\chemicalsymbol[equilibrium]{%s}{%s}");'], arguments = 2 }, mesomeric = { direct = formatters['chem_symbol("\\chemicalsymbol[mesomeric]{%s}{%s}");'], arguments = 2 }, opencomplex = { direct = 'chem_symbol("\\chemicalsymbol[opencomplex]");' }, closecomplex = { direct = 'chem_symbol("\\chemicalsymbol[closecomplex]");' }, reset = { direct = 'chem_reset;' }, mp = { direct = formatters['%s'], arguments = 1 }, -- backdoor MP code - dangerous! } chemistry.definitions = chemistry.definitions or { } local definitions = chemistry.definitions storage.register("chemistry/definitions",definitions,"chemistry.definitions") function chemistry.undefine(name) definitions[lower(name)] = nil end function chemistry.define(name,spec,text) name = lower(name) local dn = definitions[name] if not dn then dn = { } definitions[name] = dn end dn[#dn+1] = { spec = settings_to_array_with_repeat(spec,true), text = settings_to_array_with_repeat(text,true), } end local metacode, variant, keys, max, txt, pstack, sstack, align local molecule = chemistry.molecule -- or use lpegmatch(chemistry.moleculeparser,...) local function fetch(txt) local st = stack[txt] local t = st.text[st.n] while not t and txt > 1 do txt = txt - 1 st = stack[txt] t = st.text[st.n] end if t then if trace_textstack then report_chemistry("fetching from stack %a, slot %a, data %a",txt,st.n,t) end st.n = st.n + 1 end return txt, t end local remapper = { ["+"] = "p", ["-"] = "m", } local dchrs = R("09") local sign = S("+-") local digit = dchrs / tonumber local amount = (sign^-1 * (dchrs^0 * P('.'))^-1 * dchrs^1) / tonumber local single = digit local range = digit * P("..") * digit local set = Ct(digit^2) local colon = P(":") local equal = P("=") local other = 1 - digit - colon - equal local remapped = sign / remapper local operation = Cs(other^1) local special = (colon * C(other^1)) + Cc("") local text = (equal * C(P(1)^0)) + Cc(false) local pattern = (amount + Cc(1)) * (remapped + Cc("")) * Cs(operation/lower) * Cs(special/lower) * ( range * Cc(false) * text + Cc(false) * Cc(false) * set * text + single * Cc(false) * Cc(false) * text + Cc(false) * Cc(false) * Cc(false) * text ) -- local n, operation, index, upto, set, text = lpegmatch(pattern,"RZ1357") -- print(lpegmatch(pattern,"RZ=x")) -- 1 RZ false false false x -- print(lpegmatch(pattern,"RZ1=x")) -- 1 RZ 1 false false x -- print(lpegmatch(pattern,"RZ1..3=x")) -- 1 RZ 1 3 false x -- print(lpegmatch(pattern,"RZ13=x")) -- 1 RZ false false table x local f_initialize = 'if unknown context_chem : input mp-chem.mpiv ; fi ;' local f_start_structure = formatters['chem_start_structure(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'] local f_set_trace_bounds = formatters['chem_trace_boundingbox := %l ;'] local f_stop_structure = 'chem_stop_structure;' local f_start_component = 'chem_start_component;' local f_stop_component = 'chem_stop_component;' local f_line = formatters['chem_%s%s(%s,%s,%s,%s,%s);'] local f_set = formatters['chem_set(%s);'] local f_number = formatters['chem_%s%s(%s,%s,"\\chemicaltext{%s}");'] local f_text = f_number local f_empty_normal = formatters['chem_%s(%s,%s,"");'] local f_empty_center = formatters['chem_c%s(%s,%s,"");'] local f_transform = formatters['chem_%s(%s,%s,%s);'] local prepareMPvariable = commands and commands.prepareMPvariable local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_variant) insert(stack,{ spec = spec, text = text, n = n }) local txt = #stack local m = #metacode local saved_rulethickness = rulethickness local saved_rulecolor = rulecolor local saved_align = align local current_variant = default_variant or "six" for i=1,#spec do local step = spec[i] local s = lower(step) local n = current_variant .. ":" .. s local d = definitions[n] if not d then n = s d = definitions[n] end if d then if trace_structure then report_chemistry("level %a, step %a, definition %a, snippets %a",level,step,n,#d) end for i=1,#d do local di = d[i] current_variant = process(level+1,di.spec,di.text,1,rulethickness,rulecolor,offset,current_variant) -- offset? end else local factor, osign, operation, special, index, upto, set, text = lpegmatch(pattern,step) if trace_structure then local set = set and concat(set," ") or "-" report_chemistry("level %a, step %a, factor %a, osign %a, operation %a, special %a, index %a, upto %a, set %a, text %a", level,step,factor,osign,operation,special,index,upto,set,text) end if operation == "rulecolor" then local t = text if not t then txt, t = fetch(txt) end if t == v_default or t == v_normal or t == "" then rulecolor = saved_rulecolor elseif t then rulecolor = mpnamedcolor(t) end elseif operation == "rulethickness" then local t = text if not t then txt, t = fetch(txt) end if t == v_default or t == v_normal or t == t_medium or t == "" then rulethickness = saved_rulethickness elseif t == v_small then rulethickness = topoints(1/1.2 * todimen(saved_rulethickness)) elseif t == v_big then rulethickness = topoints(1.2 * todimen(saved_rulethickness)) elseif t then -- rulethickness = topoints(todimen(t)) -- mp can't handle sp rulethickness = topoints(tonumber(t) * todimen(saved_rulethickness)) end elseif operation == "symalign" then local t = text if not t then txt, t = fetch(txt) end if t == v_default or t == v_normal then align = saved_align elseif t and t ~= "" then align = "." .. t end elseif operation == "pb" then insert(pstack,variant) m = m + 1 ; metacode[m] = syntax.pb.direct if keys[special] == "text" and index then if keys["c"..special] == "text" then -- can be option: auto ... m = m + 1 ; metacode[m] = f_empty_center(special,variant,index) else m = m + 1 ; metacode[m] = f_empty_normal(special,variant,index) end end elseif operation == "pe" then variant = remove(pstack) local ss = syntax[variant] keys, max = ss.keys, ss.max m = m + 1 ; metacode[m] = syntax.pe.direct m = m + 1 ; metacode[m] = f_set(variant) current_variant = variant elseif operation == "save" then insert(sstack,variant) m = m + 1 ; metacode[m] = syntax.save.direct elseif operation == "restore" then variant = remove(sstack) local ss = syntax[variant] keys, max = ss.keys, ss.max m = m + 1 ; metacode[m] = syntax.restore.direct m = m + 1 ; metacode[m] = f_set(variant) current_variant = variant elseif operation then local ss = syntax[operation] local what = keys[operation] local ns = 0 if set then local sv = syntax[current_variant] local ms = sv and sv.max set = unique(set) ns = #set if directive_strictorder then if what == "line" then set = sorted(set) end if directive_strictindex and ms then for i=ns,1,-1 do local si = set[i] if si > ms then report_chemistry("level %a, operation %a, max nofsteps %a, ignoring %a",level,operation,ms,si) set[i] = nil ns = ns - 1 else break end end end else if directive_strictindex and ms then local t, nt = { }, 0 for i=1,ns do local si = set[i] if si > ms then report_chemistry("level %a, operation %a, max nofsteps %a, ignoring %a",level,operation,ms,si) set[i] = nil else nt = nt + 1 t[nt] = si end end ns = nt set = t end end end if ss then local ds = ss.direct if ds then local sa = ss.arguments if sa == 1 then local one ; txt, one = fetch(txt) m = m + 1 ; metacode[m] = ds(one or "") elseif sa == 2 then local one ; txt, one = fetch(txt) local two ; txt, two = fetch(txt) m = m + 1 ; metacode[m] = ds(one or "",two or "") else m = m + 1 ; metacode[m] = ds end elseif ss.keys then variant, keys, max = s, ss.keys, ss.max m = m + 1 ; metacode[m] = f_set(variant) current_variant = variant end elseif what == "line" then local s = osign if s ~= "" then s = "." .. s end if set then -- condense consecutive numbers in a set to a range local sf, st = set[1] for i=1,ns do if i > 1 and set[i] ~= set[i-1]+1 then m = m + 1 ; metacode[m] = f_line(operation,s,variant,sf,st,rulethickness,rulecolor) sf = set[i] end st = set[i] end m = m + 1 ; metacode[m] = f_line(operation,s,variant,sf,st,rulethickness,rulecolor) elseif upto then m = m + 1 ; metacode[m] = f_line(operation,s,variant,index,upto,rulethickness,rulecolor) elseif index then m = m + 1 ; metacode[m] = f_line(operation,s,variant,index,index,rulethickness,rulecolor) else m = m + 1 ; metacode[m] = f_line(operation,s,variant,1,max,rulethickness,rulecolor) end elseif what == "number" then if set then for i=1,ns do local si = set[i] m = m + 1 ; metacode[m] = f_number(operation,align,variant,si,si) end elseif upto then for i=index,upto do local si = set[i] m = m + 1 ; metacode[m] = f_number(operation,align,variant,si,si) end elseif index then m = m + 1 ; metacode[m] = f_number(operation,align,variant,index,index) else for i=1,max do m = m + 1 ; metacode[m] = f_number(operation,align,variant,i,i) end end elseif what == "text" then if set then for i=1,ns do local si = set[i] local t = text if not t then txt, t = fetch(txt) end if t then t = molecule(processor_tostring(t)) m = m + 1 ; metacode[m] = f_text(operation,align,variant,si,t) end end elseif upto then for i=index,upto do local t = text if not t then txt, t = fetch(txt) end if t then t = molecule(processor_tostring(t)) m = m + 1 ; metacode[m] = f_text(operation,align,variant,i,t) end end elseif index == 0 then local t = text if not t then txt, t = fetch(txt) end if t then t = molecule(processor_tostring(t)) m = m + 1 ; metacode[m] = f_text(operation,align,variant,index,t) end elseif index then local t = text if not t then txt, t = fetch(txt) end if t then t = molecule(processor_tostring(t)) m = m + 1 ; metacode[m] = f_text(operation,align,variant,index,t) end else for i=1,max do local t = text if not t then txt, t = fetch(txt) end if t then t = molecule(processor_tostring(t)) m = m + 1 ; metacode[m] = f_text(operation,align,variant,i,t) end end end elseif what == "transform" then if osign == "m" then factor = -factor end if set then for i=1,ns do local si = set[i] m = m + 1 ; metacode[m] = f_transform(operation,variant,si,factor) end elseif upto then for i=index,upto do m = m + 1 ; metacode[m] = f_transform(operation,variant,i,factor) end else m = m + 1 ; metacode[m] = f_transform(operation,variant,index or 1,factor) end elseif what == "fixed" then m = m + 1 ; metacode[m] = f_transform(operation,variant,rulethickness,rulecolor) elseif trace_structure then report_chemistry("level %a, ignoring undefined operation %s",level,operation) end end end end remove(stack) return current_variant end -- the size related values are somewhat special but we want to be -- compatible -- -- rulethickness in points local function checked(d,factor,unit,scale) if d == v_none then return 0 end local n = tonumber(d) if not n then -- assume dimen elseif n >= 10 or n <= -10 then return factor * unit * n / 1000 else return factor * unit * n end local n = todimen(d) if n then return scale * n else return v_fit end end local function calculated(height,bottom,top,factor,unit,scale) local scaled = 0 if height == v_none then -- this always wins height = "0pt" bottom = "0pt" top = "0pt" elseif height == v_fit then height = "true" bottom = bottom == v_fit and "true" or topoints(checked(bottom,factor,unit,scale)) top = top == v_fit and "true" or topoints(checked(top, factor,unit,scale)) else height = checked(height,factor,unit,scale) if bottom == v_fit then if top == v_fit then bottom = height / 2 top = bottom else top = checked(top,factor,unit,scale) bottom = height - top end elseif top == v_fit then bottom = checked(bottom,factor,unit,scale) top = height - bottom else bottom = checked(bottom,factor,unit,scale) top = checked(top, factor,unit,scale) local ratio = height / (bottom+top) bottom = bottom * ratio top = top * ratio end scaled = height top = topoints(top) bottom = topoints(bottom) height = topoints(height) end return height, bottom, top, scaled end function chemistry.start(settings) -- local width = settings.width or v_fit local height = settings.height or v_fit local unit = settings.unit or 655360 local factor = settings.factor or 3 local rulethickness = settings.rulethickness or 65536 local rulecolor = settings.rulecolor or "" local axiscolor = settings.framecolor or "" local scale = settings.scale or "normal" local rotation = settings.rotation or 0 local offset = settings.offset or 0 local left = settings.left or v_fit local right = settings.right or v_fit local top = settings.top or v_fit local bottom = settings.bottom or v_fit -- align = settings.symalign or "auto" if trace_structure then report_chemistry("unit %p, factor %s, symalign %s",unit,factor,align) end if align ~= "" then align = "." .. align end if trace_structure then report_chemistry("%s scale %a, rotation %a, width %s, height %s, left %s, right %s, top %s, bottom %s","asked",scale,rotation,width,height,left,right,top,bottom) end if scale == v_small then scale = 1/1.2 elseif scale == v_normal or scale == v_medium or scale == 0 then scale = 1 elseif scale == v_big then scale = 1.2 else scale = tonumber(scale) if not scale or scale == 0 then scale = 1 elseif scale >= 10 then scale = scale / 1000 elseif scale < .01 then scale = .01 end end -- unit = scale * unit -- local sp_width = 0 local sp_height = 0 -- width, left, right, sp_width = calculated(width, left, right,factor,unit,scale) height, bottom, top, sp_height = calculated(height,bottom,top, factor,unit,scale) -- if width ~= "true" and height ~= "true" and texcount["@@trialtypesetting"] ~= 0 then if trace_structure then report_chemistry("skipping trial run") end context.hrule(sp_width,sp_height,0) -- maybe depth return end -- chemistry.structures = chemistry.structures + 1 -- rotation = tonumber(rotation) or 0 -- metacode = { } -- if trace_structure then report_chemistry("%s scale %a, rotation %a, width %s, height %s, left %s, right %s, top %s, bottom %s","used",scale,rotation,width,height,left,right,top,bottom) end metacode[#metacode+1] = f_start_structure( chemistry.structures, left, right, top, bottom, rotation, topoints(unit), factor, topoints(offset), tostring(settings.axis == v_on), topoints(rulethickness), tostring(axiscolor) ) metacode[#metacode+1] = f_set_trace_bounds(trace_boundingbox) ; -- variant, keys, stack, pstack, sstack = "one", { }, { }, { }, { } end function chemistry.stop() if metacode then metacode[#metacode+1] = f_stop_structure local mpcode = concat(metacode,"\n") if trace_metapost then report_chemistry("metapost code:\n%s", mpcode) end if metapost.instance(chemistry.instance) then f_initialize = nil end metapost.graphic { instance = chemistry.instance, format = chemistry.format, data = mpcode, definitions = f_initialize, } t_initialize = "" metacode = nil end end function chemistry.component(spec,text,settings) if metacode then rulethickness, rulecolor, offset = settings.rulethickness, settings.rulecolor local spec = settings_to_array_with_repeat(spec,true) -- no lower? local text = settings_to_array_with_repeat(text,true) -- inspect(spec) metacode[#metacode+1] = f_start_component process(1,spec,text,1,rulethickness,rulecolor) -- offset? metacode[#metacode+1] = f_stop_component end end statistics.register("chemical formulas", function() if chemistry.structures > 0 then return format("%s chemical structure formulas",chemistry.structures) -- no timing needed, part of metapost end end) -- interfaces commands.undefinechemical = chemistry.undefine commands.definechemical = chemistry.define commands.startchemical = chemistry.start commands.stopchemical = chemistry.stop commands.chemicalcomponent = chemistry.component -- todo: top / bottom -- maybe add "=" for double and "≡" for triple? local inline = { ["single"] = "\\chemicalsinglebond", ["-"] = "\\chemicalsinglebond", ["double"] = "\\chemicaldoublebond", ["--"] = "\\chemicaldoublebond", ["triple"] = "\\chemicaltriplebond", ["---"] = "\\chemicaltriplebond", ["gives"] = "\\chemicalgives", ["->"] = "\\chemicalgives", ["equilibrium"] = "\\chemicalequilibrium", ["<->"] = "\\chemicalequilibrium", ["mesomeric"] = "\\chemicalmesomeric", ["<>"] = "\\chemicalmesomeric", ["plus"] = "\\chemicalplus", ["+"] = "\\chemicalplus", ["minus"] = "\\chemicalminus", ["space"] = "\\chemicalspace", } function commands.inlinechemical(spec) local spec = settings_to_array_with_repeat(spec,true) for i=1,#spec do local s = spec[i] local inl = inline[lower(s)] if inl then context(inl) -- could be a fast context.sprint else context.chemicalinline(molecule(s)) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/l-io.lua0000644000175000017500000002113712130411274023233 0ustar norbertnorbertif not modules then modules = { } end modules ['l-io'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local io = io local byte, find, gsub, format = string.byte, string.find, string.gsub, string.format local concat = table.concat local floor = math.floor local type = type if string.find(os.getenv("PATH"),";") then io.fileseparator, io.pathseparator = "\\", ";" else io.fileseparator, io.pathseparator = "/" , ":" end local function readall(f) return f:read("*all") end -- The next one is upto 50% faster on large files and less memory consumption due -- to less intermediate large allocations. This phenomena was discussed on the -- luatex dev list. local function readall(f) local size = f:seek("end") if size == 0 then return "" elseif size < 1024*1024 then f:seek("set",0) return f:read('*all') else local done = f:seek("set",0) if size < 1024*1024 then step = 1024 * 1024 elseif size > 16*1024*1024 then step = 16*1024*1024 else step = floor(size/(1024*1024)) * 1024 * 1024 / 8 end local data = { } while true do local r = f:read(step) if not r then return concat(data) else data[#data+1] = r end end end end io.readall = readall function io.loaddata(filename,textmode) -- return nil if empty local f = io.open(filename,(textmode and 'r') or 'rb') if f then -- local data = f:read('*all') local data = readall(f) f:close() if #data > 0 then return data end end end function io.savedata(filename,data,joiner) local f = io.open(filename,"wb") if f then if type(data) == "table" then f:write(concat(data,joiner or "")) elseif type(data) == "function" then data(f) else f:write(data or "") end f:close() io.flush() return true else return false end end -- we can also chunk this one if needed: io.lines(filename,chunksize,"*l") function io.loadlines(filename,n) -- return nil if empty local f = io.open(filename,'r') if not f then -- no file elseif n then local lines = { } for i=1,n do local line = f:read("*lines") if line then lines[#lines+1] = line else break end end f:close() lines = concat(lines,"\n") if #lines > 0 then return lines end else local line = f:read("*line") or "" f:close() if #line > 0 then return line end end end function io.loadchunk(filename,n) local f = io.open(filename,'rb') if f then local data = f:read(n or 1024) f:close() if #data > 0 then return data end end end function io.exists(filename) local f = io.open(filename) if f == nil then return false else f:close() return true end end function io.size(filename) local f = io.open(filename) if f == nil then return 0 else local s = f:seek("end") f:close() return s end end function io.noflines(f) if type(f) == "string" then local f = io.open(filename) if f then local n = f and io.noflines(f) or 0 f:close() return n else return 0 end else local n = 0 for _ in f:lines() do n = n + 1 end f:seek('set',0) return n end end local nextchar = { [ 4] = function(f) return f:read(1,1,1,1) end, [ 2] = function(f) return f:read(1,1) end, [ 1] = function(f) return f:read(1) end, [-2] = function(f) local a, b = f:read(1,1) return b, a end, [-4] = function(f) local a, b, c, d = f:read(1,1,1,1) return d, c, b, a end } function io.characters(f,n) if f then return nextchar[n or 1], f end end local nextbyte = { [4] = function(f) local a, b, c, d = f:read(1,1,1,1) if d then return byte(a), byte(b), byte(c), byte(d) end end, [3] = function(f) local a, b, c = f:read(1,1,1) if b then return byte(a), byte(b), byte(c) end end, [2] = function(f) local a, b = f:read(1,1) if b then return byte(a), byte(b) end end, [1] = function (f) local a = f:read(1) if a then return byte(a) end end, [-2] = function (f) local a, b = f:read(1,1) if b then return byte(b), byte(a) end end, [-3] = function(f) local a, b, c = f:read(1,1,1) if b then return byte(c), byte(b), byte(a) end end, [-4] = function(f) local a, b, c, d = f:read(1,1,1,1) if d then return byte(d), byte(c), byte(b), byte(a) end end } function io.bytes(f,n) if f then return nextbyte[n or 1], f else return nil, nil end end function io.ask(question,default,options) while true do io.write(question) if options then io.write(format(" [%s]",concat(options,"|"))) end if default then io.write(format(" [%s]",default)) end io.write(format(" ")) io.flush() local answer = io.read() answer = gsub(answer,"^%s*(.*)%s*$","%1") if answer == "" and default then return default elseif not options then return answer else for k=1,#options do if options[k] == answer then return answer end end local pattern = "^" .. answer for k=1,#options do local v = options[k] if find(v,pattern) then return v end end end end end local function readnumber(f,n,m) if m then f:seek("set",n) n = m end if n == 1 then return byte(f:read(1)) elseif n == 2 then local a, b = byte(f:read(2),1,2) return 256 * a + b elseif n == 3 then local a, b, c = byte(f:read(3),1,3) return 256*256 * a + 256 * b + c elseif n == 4 then local a, b, c, d = byte(f:read(4),1,4) return 256*256*256 * a + 256*256 * b + 256 * c + d elseif n == 8 then local a, b = readnumber(f,4), readnumber(f,4) return 256 * a + b elseif n == 12 then local a, b, c = readnumber(f,4), readnumber(f,4), readnumber(f,4) return 256*256 * a + 256 * b + c elseif n == -2 then local b, a = byte(f:read(2),1,2) return 256*a + b elseif n == -3 then local c, b, a = byte(f:read(3),1,3) return 256*256 * a + 256 * b + c elseif n == -4 then local d, c, b, a = byte(f:read(4),1,4) return 256*256*256 * a + 256*256 * b + 256*c + d elseif n == -8 then local h, g, f, e, d, c, b, a = byte(f:read(8),1,8) return 256*256*256*256*256*256*256 * a + 256*256*256*256*256*256 * b + 256*256*256*256*256 * c + 256*256*256*256 * d + 256*256*256 * e + 256*256 * f + 256 * g + h else return 0 end end io.readnumber = readnumber function io.readstring(f,n,m) if m then f:seek("set",n) n = m end local str = gsub(f:read(n),"\000","") return str end -- if not io.i_limiter then function io.i_limiter() end end -- dummy so we can test safely if not io.o_limiter then function io.o_limiter() end end -- dummy so we can test safely -- This works quite ok: -- -- function io.piped(command,writer) -- local pipe = io.popen(command) -- -- for line in pipe:lines() do -- -- print(line) -- -- end -- while true do -- local line = pipe:read(1) -- if not line then -- break -- elseif line ~= "\n" then -- writer(line) -- end -- end -- return pipe:close() -- ok, status, (error)code -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-swf.lua0000644000175000017500000002417712130411274024124 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-swf'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- The following code is based on tests by Luigi Scarso. His prototype -- was using tex code. This is the official implementation. local format, gsub = string.format, string.gsub local backends, lpdf = backends, lpdf local pdfconstant = lpdf.constant local pdfboolean = lpdf.boolean local pdfstring = lpdf.string local pdfunicode = lpdf.unicode local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfnull = lpdf.null local pdfreference = lpdf.reference local pdfflushobject = lpdf.flushobject local checkedkey = lpdf.checkedkey local codeinjections = backends.pdf.codeinjections local nodeinjections = backends.pdf.nodeinjections local pdfannotation_node = nodes.pool.pdfannotation local trace_swf = false trackers.register("backend.swf", function(v) trace_swf = v end) local report_swf = logs.reporter("backend","swf") local activations = { click = "XA", page = "PO", focus = "PV", } local deactivations = { click = "XD", page = "PI", focus = "PC", } table.setmetatableindex(activations, function() return activations .click end) table.setmetatableindex(deactivations,function() return deactivations.focus end) local function insertswf(spec) local width = spec.width local height = spec.height local filename = spec.foundname local resources = spec.resources local display = spec.display local controls = spec.controls local resources = resources and parametersets[resources] local display = display and parametersets[display] local controls = controls and parametersets[controls] -- not yet used local preview = checkedkey(display,"preview","string") local toolbar = checkedkey(display,"toolbar","boolean") local embeddedreference = codeinjections.embedfile { file = filename } local flash = pdfdictionary { Subtype = pdfconstant("Flash"), Instances = pdfarray { pdfdictionary { Asset = embeddedreference, Params = pdfdictionary { Binding = pdfconstant("Background") -- Foreground makes swf behave erratic } }, }, } local flashreference = pdfreference(pdfflushobject(flash)) local configuration = pdfdictionary { Configurations = pdfarray { flashreference }, Assets = pdfdictionary { Names = pdfarray { pdfstring(filename), embeddedreference, } }, } -- todo: check op subpath figuur (relatief) -- filename : ./test.swf (graphic) -- root : . -- prefix : ^%./ -- fullname : ./assets/whatever.xml -- usedname : assets/whatever.xml -- filename : assets/whatever.xml local root = file.dirname(filename) local relativepaths = nil local paths = nil if resources then local names = configuration.Assets.Names local prefix = false if root ~= "" and root ~= "." then prefix = format("^%s/",string.topattern(root)) end if prefix and trace_swf then report_swf("using strip pattern %a",prefix) end local function add(fullname,strip) local filename = gsub(fullname,"^%./","") local usedname = strip and prefix and gsub(filename,prefix,"") or filename local embeddedreference = codeinjections.embedfile { file = fullname, usedname = usedname, keepdir = true, } names[#names+1] = pdfstring(filename) names[#names+1] = embeddedreference if trace_swf then report_swf("embedding file %a as %a",fullname,usedname) end end relativepaths = resources.relativepaths if relativepaths then if trace_swf then report_swf("checking %s relative paths",#relativepaths) end for i=1,#relativepaths do local relativepath = relativepaths[i] if trace_swf then report_swf("checking path %a relative to %a",relativepath,root) end local path = file.join(root == "" and "." or root,relativepath) local files = dir.glob(path .. "/**") for i=1,#files do add(files[i],true) end end end paths = resources.paths if paths then if trace_swf then report_swf("checking absolute %s paths",#paths) end for i=1,#paths do local path = paths[i] if trace_swf then report_swf("checking path %a",path) end local files = dir.glob(path .. "/**") for i=1,#files do add(files[i],false) end end end local relativefiles = resources.relativefiles if relativefiles then if trace_swf then report_swf("checking %s relative files",#relativefiles) end for i=1,#relativefiles do add(relativefiles[i],true) end end local files = resources.files if files then if trace_swf then report_swf("checking absolute %s files",#files) end for i=1,#files do add(files[i],false) end end end local opendisplay = display and display.open or false local closedisplay = display and display.close or false local configurationreference = pdfreference(pdfflushobject(configuration)) local activation = pdfdictionary { Type = pdfconstant("RichMediaActivation"), Condition = pdfconstant(activations[opendisplay]), Configuration = flashreference, Animation = pdfdictionary { Subtype = pdfconstant("Linear"), Speed = 1, Playcount = 1, }, Presentation = pdfdictionary { PassContextClick = false, Style = pdfconstant("Embedded"), Toolbar = toolbar, NavigationPane = false, Transparent = true, Window = pdfdictionary { Type = pdfconstant("RichMediaWindow"), Width = pdfdictionary { Default = 100, Min = 100, Max = 100, }, Height = pdfdictionary { Default = 100, Min = 100, Max = 100, }, Position = pdfdictionary { Type = pdfconstant("RichMediaPosition"), HAlign = pdfconstant("Near"), VAlign = pdfconstant("Near"), HOffset = 0, VOffset = 0, } } }, -- View -- Scripts } local deactivation = pdfdictionary { Type = pdfconstant("RichMediaDeactivation"), Condition = pdfconstant(deactivations[closedisplay]), } local richmediasettings = pdfdictionary { Type = pdfconstant("RichMediaSettings"), Activation = activation, Deactivation = deactivation, } local settingsreference = pdfreference(pdfflushobject(richmediasettings)) local appearance if preview then preview = gsub(preview,"%*",file.nameonly(filename)) local figure = codeinjections.getpreviewfigure { name = preview, width = width, height = height } if relativepaths and not figure then for i=1,#relativepaths do local path = file.join(root == "" and "." or root,relativepaths[i]) if trace_swf then report_swf("checking preview on relative path %s",path) end local p = file.join(path,preview) figure = codeinjections.getpreviewfigure { name = p, width = width, height = height } if figure then preview = p break end end end if paths and not figure then for i=1,#paths do local path = paths[i] if trace_swf then report_swf("checking preview on absolute path %s",path) end local p = file.join(path,preview) figure = codeinjections.getpreviewfigure { name = p, width = width, height = height } if figure then preview = p break end end end if figure then local image = img.package(figure.status.private) appearance = pdfdictionary { N = pdfreference(image.objnum) } if trace_swf then report_swf("using preview %s",preview) end end end local annotation = pdfdictionary { Subtype = pdfconstant("RichMedia"), RichMediaContent = configurationreference, RichMediaSettings = settingsreference, AP = appearance, } return annotation, nil, nil end function backends.pdf.nodeinjections.insertswf(spec) local annotation, preview, ref = insertswf { foundname = spec.foundname, width = spec.width, height = spec.height, display = spec.display, controls = spec.controls, resources = spec.resources, -- factor = spec.factor, -- label = spec.label, } context(pdfannotation_node(spec.width,spec.height,0,annotation())) -- the context wrap is probably also needed elsewhere end context-2013.05.28.20130704/texmf-dist/tex/context/base/phys-dim.mkiv0000644000175000017500000006466412161703335024334 0ustar norbertnorbert%D \module %D [ file=phys-dim, %D version=2011-06-13, % was digits and units 1997.03.19, %D title=\CONTEXT\ Physics, %D subtitle=Digits and Units, %D author={Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{phys-dim}{} % TAGGING NEEDS CHECKING ... WILL DO WHEN PARSER IS OK \unprotect %D \macros %D {digits, setdigitmode, setdigitsign} %D %D This is an update of the \MKII\ digits mechanism. Beware, %D space delimited mode is now resticted! %D %D Depending on the digit mode the command \type {\digits} %D normalizes number patterns depending on the language set. %D %D \starttyping %D This will never be a \digits{1.000.000} seller. %D \stoptyping %D %D We still support the space delimited case but this is only for special %D purposes. When used in the text, you'd better use the argument variant. %D %D \startbuffer %D 1 \setdigitmode {1} \setdigitorder{0} \digits {12.345,90} %D 2 \setdigitmode {2} \setdigitorder{0} \digits {12.345,90} %D 3 \setdigitmode {3} \setdigitorder{0} \digits {12.345,90} %D 4 \setdigitmode {4} \setdigitorder{0} \digits {12.345,90} %D 5 \setdigitmode {5} \setdigitorder{0} \digits {12.345,90} %D 6 \setdigitmode {6} \setdigitorder{0} \digits {12.345,90} %D 1 \setdigitmode {1} \setdigitorder{1} \digits {12.345,90} %D 2 \setdigitmode {2} \setdigitorder{1} \digits {12.345,90} %D 3 \setdigitmode {3} \setdigitorder{1} \digits {12.345,90} %D 4 \setdigitmode {4} \setdigitorder{1} \digits {12.345,90} %D 5 \setdigitmode {5} \setdigitorder{1} \digits {12.345,90} %D 6 \setdigitmode {6} \setdigitorder{1} \digits {12.345,90} %D \stopbuffer %D %D \typebuffer %D %D This is typeset as: %D %D \startlines \getbuffer \stoplines %D %D The sign can be typeset as is or within the space of a %D digit. %D %D \startbuffer %D \setdigitsign 0 \digits {+12.345,90} %D \setdigitsign 1 \digits {+12.345,90} %D \stopbuffer %D %D \typebuffer %D %D This is typset as: %D %D \startlines %D \getbuffer %D \stoplines %D %D The digit modes are: %D %D \startitemize[n,packed] %D \item periods/comma %D \item commas/period %D \item thinmuskips/comma %D \item thinmuskips/period %D \item thickmuskips/comma %D \item thickmuskips/period %D \stopitemize %D %D The digit parser handles a bunch of special characters as %D well as different formats. We strongly suggest you to use %D the grouped call. %D %D \starttabulate[|l|l|l|] %D \starttabulate[|l|l|l|] %D \NC \type{.} \NC , . \NC comma or period \NC \NR %D \NC \type{,} \NC , . \NC comma or period \NC \NR %D \NC \type{:} \NC \NC invisible period \NC \NR %D \NC \type{;} \NC \NC invisible comma \NC \NR %D \NC \type{_} \NC \NC invisible space \NC \NR %D \NC \type{/} \NC \NC invisible sign \NC \NR %D \NC \type{-} \NC $-$ \NC minus sign \NC \NR %D \NC \type{+} \NC $+$ \NC plus sign \NC \NR %D \NC \type{//} \NC \NC invisible high sign \NC \NR %D \NC \type{--} \NC $\negative$ \NC high minus sign \NC \NR %D \NC \type{++} \NC $\positive$ \NC high plus sign \NC \NR %D \NC \type{=} \NC $\zeroamount$ \NC zero padding \NC \NR %D \stoptabulate %D \stoptabulate %D %D These triggers are used in the following examples. %D %D \starttabulate[|l|r|] %D \NC \type{1} \NC \ruledhbox{\strut\digits{1}} \NC \NR %D \NC \type{12} \NC \ruledhbox{\strut\digits{12}} \NC \NR %D \NC \type{12.34} \NC \ruledhbox{\strut\digits{12.34}} \NC \NR %D \NC \type{123,456} \NC \ruledhbox{\strut\digits{123,456}} \NC \NR %D \NC \type{123,456.78} \NC \ruledhbox{\strut\digits{123,456.78}} \NC \NR %D \NC \type{12,34} \NC \ruledhbox{\strut\digits{12,34}} \NC \NR %D \NC \type{.1234} \NC \ruledhbox{\strut\digits{.1234}} \NC \NR %D \NC \type{1234} \NC \ruledhbox{\strut\digits{1234}} \NC \NR %D \NC \type{123,456.78^9} \NC \ruledhbox{\strut\digits{123,456.78^9}} \NC \NR %D \NC \type{123,456.78e9} \NC \ruledhbox{\strut\digits{123,456.78e9}} \NC \NR %D \NC \type{/123,456.78e-9} \NC \ruledhbox{\strut\digits{/123,456.78e-9}} \NC \NR %D \NC \type{-123,456.78e-9} \NC \ruledhbox{\strut\digits{-123,456.78e-9}} \NC \NR %D \NC \type{+123,456.78e-9} \NC \ruledhbox{\strut\digits{+123,456.78e-9}} \NC \NR %D \NC \type{//123,456.78e-9} \NC \ruledhbox{\strut\digits{//123,456.78e-9}} \NC \NR %D \NC \type{--123,456.78e-9} \NC \ruledhbox{\strut\digits{--123,456.78e-9}} \NC \NR %D \NC \type{++123,456.78e-9} \NC \ruledhbox{\strut\digits{++123,456.78e-9}} \NC \NR %D \NC \type{___,___,123,456,789.00} \NC \ruledhbox{\strut\digits{___,___,123,456,789.00}} \NC \NR %D \NC \type{___,___,_12,345,678.==} \NC \ruledhbox{\strut\digits{___,___,_12,345,678.==}} \NC \NR %D \stoptabulate \newconstant\c_phys_digits_order \newconstant\c_phys_digits_method \newconstant\c_phys_digits_sign % we has sized (text script scriptscript) \unexpanded\def\setdigitmethod#1{\c_phys_digits_method #1\relax} \unexpanded\def\setdigitsign #1{\c_phys_digits_sign #1\relax} \unexpanded\def\setdigitorder #1{\c_phys_digits_order #1\relax} \let\setdigitmode\setdigitmethod % compatibility \def\phys_digits_normalized % we could calculate once and remember {\ifcase\c_phys_digits_sign \expandafter\secondoftwoarguments \else\ifmmode \expandafter\expandafter\expandafter\phys_digits_normalized_math \else \expandafter\expandafter\expandafter\phys_digits_normalized_text \fi\fi} \def\phys_digits_normalized_math#1#2% {\setbox\scratchbox\hbox{$\Ustack{#1}$}% \hbox to \wd\scratchbox{\hss{$\Ustack{#2}$}\hss}} \def\phys_digits_normalized_text#1#2% {\setbox\scratchbox\hbox{#1}% \hbox to \wd\scratchbox{\hss#2\hss}} \def\phys_digits_raised {\ifmmode \expandafter\normalsuperscript \else \expandafter\high \fi} % we could use a symbolset but how many symbols are there ? % \definesymbol[units][times][\times] % \definesymbol[units][times][\cdots] % \def\digitstimessymbol{\symbol[units][times]} % \definesymbol[units][times][\times] % \definesymbol[units][times][\cdots] % \definesymbol[units][times][\ifmmode\cdot\else\kern.2\emwidth\cdot\kern.2\emwidth\fi] \def\digitstimessymbol{\times} % \def\digitstimessymbol{\cdot} % \def\digitstimessymbol{\ifmmode\cdot\else\kern.2\emwidth\cdot\kern.2\emwidth\fi} \unexpanded\def\digitszeropadding {\hphantom{0}} \unexpanded\def\digitsnegative {\phys_digits_normalized{0}{\phys_digits_raised{\textminus}}} \unexpanded\def\digitspositive {\phys_digits_normalized{0}{\phys_digits_raised{\textplus}}} \unexpanded\def\digitsnegative {\phys_digits_normalized{0}{\mathematics{\negative}}} \unexpanded\def\digitspositive {\phys_digits_normalized{0}{\mathematics{\positive}}} \unexpanded\def\digitsminus {\phys_digits_normalized{0}{\mathematics{-}}} \unexpanded\def\digitsplus {\phys_digits_normalized{0}{\mathematics{+}}} \unexpanded\def\digitsspace {\hphantom{0}} \unexpanded\def\digitsseparatorspace{\hphantom{.}} \unexpanded\def\digitssignspace {\hphantom{\digitsminus}} \unexpanded\def\digitshighspace {\hphantom{\digitspositive}} \unexpanded\def\digitspower #1{\digitstimessymbol10\phys_digits_raised{#1}} \unexpanded\def\digitspowerplus #1{\digitstimessymbol10\phys_digits_raised{\digitsplus#1}} \unexpanded\def\digitspowerminus #1{\digitstimessymbol10\phys_digits_raised{\digitsminus#1}} \unexpanded\def\digitsdigit #1{#1} \unexpanded\def\normaldigitscommasymbol {,} \unexpanded\def\normaldigitsperiodsymbol{.} \let\normaldigitsseparatorspace\digitsseparatorspace \installcorenamespace{digitscomma} \installcorenamespace{digitsperiod} \installcorenamespace{digitsspace} \letvalue{\??digitscomma 0}\normaldigitscommasymbol \letvalue{\??digitsperiod0}\normaldigitsperiodsymbol \letvalue{\??digitsspace 0}\normaldigitsseparatorspace \letvalue{\??digitscomma 1}\normaldigitsperiodsymbol \letvalue{\??digitsperiod1}\normaldigitscommasymbol \letvalue{\??digitsspace 1}\normaldigitsseparatorspace \letvalue{\??digitscomma 2}\normaldigitscommasymbol \letvalue{\??digitsperiod2}\normaldigitsperiodsymbol \letvalue{\??digitsspace 2}\normaldigitsseparatorspace \letvalue{\??digitscomma 3}\thinspace \letvalue{\??digitsperiod3}\normaldigitscommasymbol \letvalue{\??digitsspace 3}\thinspace \letvalue{\??digitscomma 4}\thinspace \letvalue{\??digitsperiod4}\normaldigitsperiodsymbol \letvalue{\??digitsspace 4}\thinspace \letvalue{\??digitscomma 5}\thickspace \letvalue{\??digitsperiod5}\normaldigitscommasymbol \letvalue{\??digitsspace 5}\thickspace \letvalue{\??digitscomma 6}\thickspace \letvalue{\??digitsperiod6}\normaldigitsperiodsymbol \letvalue{\??digitsspace 6}\thickspace \unexpanded\def\digitscommasymbol {\csname\??digitscomma \number\c_phys_digits_method\endcsname} \unexpanded\def\digitsperiodsymbol {\csname\??digitsperiod\number\c_phys_digits_method\endcsname} \unexpanded\def\digitsseparatorspace {\csname\??digitsspace \number\c_phys_digits_method\endcsname} % \unexpanded\def\digitsfinalcomma {\digitscommasymbol } % more for tracing % \unexpanded\def\digitsfinalperiod {\digitsperiodsymbol} % more for tracing % \unexpanded\def\digitsintermediatecomma {\digitscommasymbol } % more for tracing % \unexpanded\def\digitsintermediateperiod {\digitsperiodsymbol} % more for tracing \unexpanded\def\digitsfinalcomma {\digitsperiodsymbol} % more for tracing \unexpanded\def\digitsfinalperiod {\digitsperiodsymbol} % more for tracing \unexpanded\def\digitsintermediatecomma {\digitscommasymbol } % more for tracing \unexpanded\def\digitsintermediateperiod {\digitscommasymbol } % more for tracing %D The user macro: \unexpanded\def\phys_digits_indeed#1% {\dontleavehmode \begingroup \ctxcommand{digits(\!!bs\detokenize{#1}\!!es,"\ifcase\c_phys_digits_order \v!normal\else\v!reverse\fi")}% \endgroup \settrue\c_phys_units_dospace} \unexpanded\def\digits {\doifnextbgroupelse\phys_digits_argument\phys_digits_spaced} \def\phys_digits_argument#1% {\phys_digits_indeed{#1}} \def\phys_digits_spaced#1 % space delimited {\phys_digits_indeed{#1}} %D \macros %D {unit} %D %D We have been using the units module (and its predecessor) for over a decade %D now but when we moved on to \LUATEX\ a variant was prototyped that permits a %D less texie coding. I finally picked up that thread and cleaned up the code a %D bit so users can now play with it. (The main reason was that I wanted to %D test exporting.) %D %D \startbuffer %D 01: $10\unit{km/h}$ %D 02: $\unit{10 km/h}$ %D 03: \unit{km/h} %D 04: \unit{10 km/h} %D 05: \unit{10 km/h} %D 06: \unit{~1 km/h} %D 07: 10\unit{km/h} %D 08: 10 \unit{km/h} %D 09: $10 \unit{km/h}$ %D 10: 10 \unit{KiloMeter/Hour} %D 11: 10 \unit{kilometer/hour} %D 12: 10 \unit{km/h} %D 13: 10 \unit{kilometer per hour} %D 14: 10 \unit{km / h} %D 15: 10 \unit{ km / h } %D 16: 10 \unit{km/ms2} %D 17: 10 \unit{meter per second} %D 18: 10 \unit{cubic meter} %D 19: 10 \unit{cubic meter per second} %D 21: 10 \unit{cubic meter / second} %D 22: $10 \unit{cubic meter / second}$ %D 23: 30 \unit{kilo pascal } %D 24: 30 \unit{kilo pascal square meter / second} %D 25: 30 \unit{kilo pascal square meter / kelvin second} %D 26: \unit{30 kilo pascal square meter / kelvin second} %D 27: $30 \unit{kilo pascal square meter / kelvin second }$ %D 28: 30 \unit{crap} %D 29: 30 \unit{AC} %D 30: $\frac{10 \unit{m/s}}{20 \unit{m/s}} $ %D 31: {\ss 30 \unit{kilo pascal square meter / second kelvin}} %D 32: \unit{123.22^-3 km/s} %D 33: \unit{123.22e-3 km/s} %D \stopbuffer %D %D \typebuffer %D %D Result: \startlines \getbuffer \stoplines %D %D Depending on needs we can add more tweaks (also depends on to what %D extent we need to be compatible with \MKII. %D %D Formatting is supported too: %D %D \startbuffer %D \starttabulate[|l|l|l|] %D \HL %D \NC \unit{10 kilo gram} \NC \digits{10} \NC \unit{10} \NC \NR %D \NC \unit{1 kilogram} \NC \digits{1} \NC \unit{1} \NC \NR %D \NC \unit{0.1 kilogram} \NC \digits{0.1} \NC \unit{0.1} \NC \NR %D \NC \unit{1.1 kilogram} \NC \digits{1.1} \NC \unit{1.1} \NC \NR %D \NC \unit{11 kilogram} \NC \digits{11} \NC \unit{11} \NC \NR %D \HL %D \NC \unit{00,000.10 kilogram} \NC \digits{00,000.10} \NC \unit{00,000.10} \NC \NR %D \NC \unit{@@,@@0.10 kilogram} \NC \digits{@@,@@0.10} \NC \unit{@@,@@0.10} \NC \NR %D \NC \unit{__,___.10 kilogram} \NC \digits{__,___.10} \NC \unit{__,___.10} \NC \NR %D \NC \unit{__,__0:10 kilogram} \NC \digits{__,__0:10} \NC \unit{__,__0:10} \NC \NR %D \NC \unit{__,___:10 kilogram} \NC \digits{__,___:10} \NC \unit{__,___:10} \NC \NR %D \HL %D \stoptabulate %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Punctuation can be configures usiing \type {method}: %D %D \startbuffer %D \starttabulate[|l|l|l|] %D \HL %D \NC \NC \setupunits[method=0]\unit{00,000.10 kilogram} \NC \setupunits[method=0]\unit{@@,@@0.10 kilogram} \NC \NR %D \NC 1 \NC \setupunits[method=1]\unit{00,000.10 kilogram} \NC \setupunits[method=1]\unit{@@,@@0.10 kilogram} \NC \NR %D \NC 2 \NC \setupunits[method=2]\unit{00,000.10 kilogram} \NC \setupunits[method=2]\unit{@@,@@0.10 kilogram} \NC \NR %D \NC 3 \NC \setupunits[method=3]\unit{00,000.10 kilogram} \NC \setupunits[method=3]\unit{@@,@@0.10 kilogram} \NC \NR %D \NC 4 \NC \setupunits[method=4]\unit{00,000.10 kilogram} \NC \setupunits[method=4]\unit{@@,@@0.10 kilogram} \NC \NR %D \NC 5 \NC \setupunits[method=5]\unit{00,000.10 kilogram} \NC \setupunits[method=5]\unit{@@,@@0.10 kilogram} \NC \NR %D \NC 6 \NC \setupunits[method=6]\unit{00,000.10 kilogram} \NC \setupunits[method=6]\unit{@@,@@0.10 kilogram} \NC \NR %D \HL %D \stoptabulate %D \stopbuffer %D %D \typebuffer \getbuffer % only a space when a number is part of the unit \installcorenamespace {unit} \installcorenamespace {unitseparator} \installcorenamespace {unitspace} \installcommandhandler \??unit {unit} \??unit \setupunit [\c!alternative=, % done: text \c!separator=\v!normal, % done: cdot|big|medium|space \s!language=\currentlanguage, % done: (no interface yet) \c!order=\v!normal, % ,. (reverse: .,) \c!method=0, %\c!grid=\v!yes, % (maybe) %\c!style=..., % done %\c!color=..., % done %\c!space=..., % (maybe) small medium big ] \let\setupunits\setupunit \newconstant \c_phys_units_mode % 0=text 1=math 2=textinmath 3=mathintext \newconstant \c_phys_units_state % 0=start 1=suffix 2=operator 3=unit 4=prefix 5=number \newconditional\c_phys_units_quantity \newconditional\c_phys_units_number \newconditional\c_phys_units_dospace % [\unit {micro ohm}]\par % no space before unit % [10\unit {micro ohm}]\par % no space before unit % [10 \unit{micro ohm}]\par % space before unit % [ \unit {micro ohm}]\par % space before unit % [\unit{10 micro ohm}]\par % space before unit \unexpanded\def\unitssmallspace {\thinspace} \unexpanded\def\unitsmediumspace{\medspace} \unexpanded\def\unitsbigspace {\thickspace} \unexpanded\def\unitsbackspace {\negthinspace} \unexpanded\def\installunitsseparator#1#2% {\setvalue{\??unitseparator#1}{#2}} \unexpanded\def\phys_units_separator {\edef\currentunitsseparator{\unitparameter\c!separator}% \csname\??unitseparator \ifcsname\??unitseparator\currentunitsseparator\endcsname\currentunitsseparator\else\v!normal\fi \endcsname} \installunitsseparator\v!normal {\cdot} \installunitsseparator\v!big {\unitsbigspace} \installunitsseparator\v!medium {\unitsmediumspace} \installunitsseparator\v!small {\unitssmallspace} \installunitsseparator\v!none {} \unexpanded\def\installunitsspace#1#2% {\setvalue{\??unitspace#1}{#2}} \unexpanded\def\phys_units_space {\unskip % weird, why is unskip needed \edef\currentunitsspace{\unitparameter\c!space}% \csname\??unitspace \ifcsname\??unitspace\currentunitsspace\endcsname\currentunitsspace\else\v!normal\fi \endcsname} \installunitsspace\v!normal {\unitsmediumspace} \installunitsspace\v!big {\unitsbigspace} \installunitsspace\v!medium {\unitsmediumspace} \installunitsspace\v!small {\unitssmallspace} \installunitsspace\v!none {} \newtoks \everyunits % we keep the old \units command so we need a longer one \appendtoks \disablemathpunctuation \to \everyunits \appendtoks \setuevalue\currentunit{\phys_units_direct{\currentunit}} \to \everydefineunit \unexpanded\def\phys_units_direct#1% {\begingroup \ifdim\lastskip>\zeropoint \settrue\c_phys_units_dospace \removelastskip \fi \c_phys_digits_method\unitparameter\c!method\relax \ifmmode\else\dontleavehmode\fi \edef\currentunit{#1}% \edef\unitlanguage{\unitparameter\s!language}% \let\prefixlanguage\unitlanguage \let\operatorlanguage\unitlanguage \the\everyunits %\removeunwantedspaces % not ok yet \useunitstyleandcolor\c!style\c!color \edef\currentunitsalternative{\unitparameter\c!alternative}% \ifmmode \ifx\currentunitsalternative\v!text \expandafter\expandafter\expandafter\phys_units_direct_text_in_math \else \expandafter\expandafter\expandafter\phys_units_direct_math \fi \else \ifx\currentunitsalternative\v!mathematics \expandafter\expandafter\expandafter\phys_units_direct_math_in_text \else \expandafter\expandafter\expandafter\phys_units_direct_text \fi \fi} \unexpanded\def\phys_units_direct_text_in_math#1% {\mathtext{% \c_phys_units_mode\plustwo \phys_units_indeed{#1}% \phys_units_finish }% \endgroup} \unexpanded\def\phys_units_direct_math#1% {\c_phys_units_mode\plusone \rm\tf % slow \mathtf \phys_units_indeed{#1}% \phys_units_finish \endgroup} \unexpanded\def\phys_units_direct_text#1% {\phys_units_indeed{#1}% \phys_units_finish \endgroup} \unexpanded\def\phys_units_direct_math_in_text#1% {\removeunwantedspaces % brr \startimath \c_phys_units_mode\plusthree \rm\tf \mathtf \phys_units_indeed{#1}% \phys_units_finish \stopimath \endgroup} \unexpanded\def\phys_units_direct_nested#1#2% {\phys_units_indeed{#2}} \appendtoks \let\phys_units_direct\phys_units_direct_nested \to \everyunits \unexpanded\def\phys_units_indeed#1% {\ctxcommand{unit(\!!bs\detokenize{#1}\!!es,"\unitparameter\c!order")}} \unexpanded\def\unitsPUS#1#2#3{\phys_units_next\prefixtext{#1}\unittext{#2}\unitsraise{\suffixtext{#3}}\c_phys_units_state\plusone} % suffix \unexpanded\def\unitsPU #1#2{\phys_units_next\prefixtext{#1}\unittext{#2}\c_phys_units_state\plusthree} % unit \unexpanded\def\unitsPS #1#2{\phys_units_next\prefixtext{#1}\unitsraise{\suffixtext{#2}}\c_phys_units_state\plusone} % suffix \unexpanded\def\unitsUS #1#2{\phys_units_next\unittext{#1}\unitsraise{\suffixtext{#2}}\c_phys_units_state\plusone} % suffix \unexpanded\def\unitsP #1{\phys_units_next\prefixtext{#1}1\c_phys_units_state\plusfour} % prefix \unexpanded\def\unitsU #1{\phys_units_next\unittext{#1}\c_phys_units_state\plusthree} % unit \unexpanded\def\unitsS #1{\phys_units_start{}\unitsraise{\suffixtext{#1}}\c_phys_units_state\plusone} % suffix \unexpanded\def\unitsO #1{\phys_units_start\operatortext{#1}\c_phys_units_state\plustwo} % operator \unexpanded\def\unitsN #1{\phys_units_start#1\c_phys_units_state\plusfive} % number \unexpanded\def\unitsC #1{\removeunwantedspaces\unittext{#1}\c_phys_units_state\plussix} % connected \unexpanded\def\unitsQ #1{\removeunwantedspaces\unitslower{#1}\c_phys_units_state\zerocount} % % Fonts can have a celsius and lack a fahrenheit symbol and as we want % to be consistent so we check for the counterparts as well. It's slow % but ok. Of course we could go virtual instead. \def\phys_units_text_prime {\textacute} \def\phys_units_text_doubleprime{\textacute\kern-.25em\textacute} \def\phys_units_text_celsius {°C} \def\phys_units_text_fahrenheit {°F} \unexpanded\def\checkedtextprime {\iffontchar\font"2032\relax\iffontchar\font"2033\relax ′\else\phys_units_text_prime\fi\else\phys_units_text_prime \fi} \unexpanded\def\checkedtextdoubleprime {\iffontchar\font"2033\relax\iffontchar\font"2032\relax ″\else\phys_units_text_doubleprime\fi\else\phys_units_text_doubleprime \fi} % \unexpanded\def\checkedtextcelsius % {\ifmmode % \phys_units_text_celsius % \else\iffontchar\font"2103\relax % ℃\else\phys_units_text_celsius % \fi\fi} % % \unexpanded\def\checkedtextfahrenheit % {\ifmmode % \phys_units_text_fahrenheit % \else\iffontchar\font"2109\relax % ℉\else\phys_units_text_fahrenheit % \fi\fi} % % % but, as users don't like this ... \let\checkedtextcelsius \phys_units_text_celsius \let\checkedtextfahrenheit\phys_units_text_fahrenheit \setelementnature[unit] [mixed] \setelementnature[quantity][mixed] \let\phys_units_finish\relax \unexpanded\def\unitsNstart {\ifmmode \else \settrue\c_phys_units_quantity \dostarttagged\t!quantity\empty \settrue\c_phys_units_number \dostarttagged\t!number\empty \fi} \unexpanded\def\unitsNstop {\ifconditional\c_phys_units_number \setfalse\c_phys_units_number \dostoptagged \fi \c_phys_units_state\plusfive} % This is a hack: for some reason \unit{micro meter} like patterns give % \unitsNstart\unitsNstop so there is a buglet in the parser \let\unitsNstartindeed\unitsNstart \unexpanded\def\unitsNstart {\doifnextcharelse\unitsNstop\gobbleoneargument\unitsNstartindeed} % End of hack. \unexpanded\def\unitsNspace {\space} \unexpanded\def\unitsN#1% {\unitsNstart#1\unitsNstop} \def\phys_units_start {\ifmmode \dostarttagged\t!mathaction\t!unit \bgroup % make an mrow \else \dostarttagged\t!unit\empty \fi \let\phys_units_finish\phys_units_stop \let\phys_units_start\relax} \def\phys_units_stop {\ifconditional\c_phys_units_number \setfalse\c_phys_units_number \dostoptagged \fi \ifconditional\c_phys_units_quantity \setfalse\c_phys_units_quantity \dostoptagged \fi \dostoptagged \ifmmode \egroup \fi} \def\unitsraise {\ifcase\c_phys_units_mode \expandafter\high \or \expandafter\normalsuperscript \or \expandafter\high \or \expandafter\normalsuperscript \fi} \def\unitslower {\ifcase\c_phys_units_mode \expandafter\low \or \expandafter\normalsubscript \or \expandafter\low \or \expandafter\normalsubscript \fi} \unexpanded\def\phys_units_next {\ifcase\c_phys_units_state % start \ifconditional\c_phys_units_dospace % \ifdim\lastskip=\zeropoint \phys_units_space % \else % % too tricky ... we could remove and add % \fi \fi \or % 1: suffix {\phys_units_separator}% \or % 2: operator \or % 3: unit {\phys_units_separator}% \or % 4: prefix \or % 5: number \phys_units_space \or % 6: symbol (connected) \fi \setfalse\c_phys_units_dospace \phys_units_start} \unexpanded\def\unitsTIMES {\ifnum\c_phys_units_state=\plusone % suffix \else \unitssmallspace \fi \cdot} % or \times \unexpanded\def\unitsOUTOF {\ifnum\c_phys_units_state=\plusone % suffix \else \unitssmallspace \fi :} \unexpanded\def\unitsSOLIDUS {\ifnum\c_phys_units_state=\plusone % suffix \unitsbackspace \fi {/}% }%\unitsbackspace} \definelabelclass [unit] [2] \definelabelclass [operator] [2] \definelabelclass [prefix] [2] \definelabelclass [suffix] [2] % This is only a label because we want to show them in a table. \ctxcommand{definelabels("prefix", "prefixes" )} \ctxcommand{definelabels("unit", "units" )} \ctxcommand{definelabels("operator","operators")} \ctxcommand{definelabels("suffix", "suffixes" )} %D You can define additional units: %D %D \starttyping %D \registerunit %D [unit] %D [point=point, %D basepoint=basepoint, %D scaledpoint=scaledpoint, %D didot=didot, %D cicero=cicero] %D \stoptyping %D %D Possible categories are: \type {prefix}, \type {unit}, \type {operator}, %D \type {suffix}, \type {symbol},\type {packaged}. You also need to define %D labels: %D %D \starttyping %D \setupunittext %D [point=pt, %D basepoint=bp, %D scaledpoint=sp, %D didot=dd, %D cicero=cc] %D \stoptyping \unexpanded\def\registerunit {\dodoubleempty\phys_units_register} \def\phys_units_register[#1][#2]% {\ctxcommand{registerunit(\!!bs#1\!!es,\!!bs#2\!!es)}} %D You can generate a list as follows: %D %D \starttyping %D \usemodule[phy-01] %D %D \ShowUnitsTable % [prefixes] %D \stoptyping %D Now we define the standard units command: \defineunit [unit] %D Example: %D %D \startbuffer[definitions] %D \startluacode %D languages.data.labels.prefixes.whatever = { %D Kilo = "olik" %D } %D %D languages.data.labels.units.whatever = { %D Meter = "retem", %D Second = "dnoces", %D } %D %D languages.data.labels.operators.whatever = { %D Solidus = " rep " %D } %D \stopluacode %D \stopbuffer %D %D \startbuffer[sample] %D \startlines %D \lunit{10 km/s} %D \lunit{10 Kilo Meter/s} %D \lunit{10 kilo Meter/s} %D \lunit{10 Kilo m/s} %D \lunit{10 k Meter/s} %D \stoplines %D \stopbuffer %D %D \typebuffer[definitions] \getbuffer[definitions] %D %D \startbuffer %D \typebuffer[sample] %D %D \defineunits[lunit] \getbuffer[sample] %D \defineunits[lunit][label=test] \getbuffer[sample] %D \defineunits[lunit][label=whatever] \getbuffer[sample] %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Another example: %D %D \starttyping %D \startluacode %D languages.data.labels.units.foo = { %D Liter = "l" %D } %D languages.data.labels.units.bar = { %D Liter = "L" %D } %D \stopluacode %D %D \defineunits[lunit] \lunit{10 l/s}\par %D \defineunits[funit][label=foo] \funit{10 l/s}\par %D \defineunits[bunit][label=bar] \bunit{10 l/s}\par %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ini.mkiv0000644000175000017500000005054712161703335024273 0ustar norbertnorbert%D \module %D [ file=lang-ini, %D version=1996.01.25, %D title=\CONTEXT\ Language Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 needs a further cleanup (real split between ii/iv). % \cldcontext{languages.numbers[tex.count.mainlanguagenumber]} %D This module implements the (for the moment still simple) %D multi||language support of \CONTEXT, which should not be %D confused with the multi||lingual interface. This support %D will be extended when needed. \writestatus{loading}{ConTeXt Language Macros / Initialization} \registerctxluafile{lang-ini}{1.001} \registerctxluafile{lang-def}{1.001} \unprotect % \def\testlanguage[#1]% % {\start % \language[#1] % \number\normallanguage/\the\lefthyphenmin/\the\righthyphenmin: % \input tufte % \hyphenatedword{effetestenofditwerkt} % \par % \stop} % % \testlanguage[de] \testlanguage[de-de] \testlanguage[de-at] \testlanguage[de-ch] \page % \testlanguage[en] \testlanguage[us] \testlanguage[en-us] \testlanguage[uk] \testlanguage[en-gb] \page \ifdefined\nonfrenchspacing\else \let\nonfrenchspacing\relax \fi \ifdefined\frenchspacing \else \let\frenchspacing \relax \fi %D When loading hyphenation patterns, \TEX\ assign a number to %D each loaded table, starting with~0. Switching to a specific %D table is done by assigning the relevant number to the %D predefined \COUNTER\ \type{\language}. %D We keep track of the last loaded patterns by means of a %D pseudo \COUNTER. This just one of those situations in which %D we don't want to spent a real one. Language zero has no %D patterns, first of all because I like to start numbering %D at one. It may come in handy for special purposes as well. \normallanguage\zerocount \def\loadedlanguage{1} %D \macros %D {currentlanguage, setupcurrentlanguage} %D %D Instead of numbers,we are going to use symbolic names for %D the languages. The current langage is saved in the macro %D \type {\currentlanguage}. The setup macro is mainly used %D for cosmetic purposes. %D %D \starttyping %D \dorecurse{3} %D {\language[nl] %D \startmode[*en] english \stopmode %D \startmode[*nl] dutch \stopmode %D \language[en] %D \startmode[*en] english \stopmode %D \startmode[*nl] dutch \stopmode} %D \stoptyping \let\currentlanguage \empty \let\currentmainlanguage\empty %D \macros %D {defaultlanguage,languageparameter,specificlanguageparameter} %D We don't use the commandhandler here (yet) because we have %D a rather special fallback mechanism so quite some compatibility %D testing is needed. \installcorenamespace{language} \installcorenamespace{languagelinked} \def\defaultlanguage#1% {\ifcsname\??language#1\s!default\endcsname \expandafter\defaultlanguage\csname\??language#1\s!default\endcsname \else #1% \fi} \def\languageparameter#1% {\ifcsname\??language\currentlanguage#1\endcsname \csname\??language\currentlanguage#1\endcsname \else\ifcsname\??language\currentlanguage\s!default\endcsname \expandafter\specificlanguageparameter\csname\??language\currentlanguage\s!default\endcsname{#1}% \else\ifcsname\??language\s!default#1\endcsname \csname\??language\s!default#1\endcsname \fi\fi\fi} \def\specificlanguageparameter#1#2% {\ifcsname\??language#1#2\endcsname \csname\??language#1#2\endcsname \else\ifcsname\??language#1\s!default\endcsname \expandafter\specificlanguageparameter\csname\??language#1\s!default\endcsname{#2}% \else\ifcsname\??language\s!default#2\endcsname \csname\??language\s!default#2\endcsname \fi\fi\fi} \unexpanded\def\setupcurrentlanguage[#1]% {\setcurrentlanguage\currentmainlanguage{#1}} \unexpanded\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) {\edef\xaskedlanguage{#1}% otherwise clash with \askedlanguage \ifx\xaskedlanguage\empty \else \ifx\currentmainlanguage\empty\else\resetsystemmode{\systemmodeprefix\currentmainlanguage}\fi \let\currentmainlanguage\xaskedlanguage \setsystemmode{\systemmodeprefix\currentmainlanguage}% \fi \edef\xaskedlanguage{#2}% \ifx\xaskedlanguage\empty \else \ifx\currentlanguage\empty\else\resetsystemmode\currentlanguage\fi \let\currentlanguage\xaskedlanguage \setsystemmode\currentlanguage \fi} %D The internal macros will be defined later. %D \macros %D {installlanguage} %D %D Hyphenation patterns can only be loaded when the format file %D is prepared. The next macro takes care of this loading. A %D language is specified with %D %D \showsetup{installlanguage} %D %D When \type {state} equals \type {start}, both patterns %D and additional hyphenation specifications are loaded. These %D files are seached for on the system path and are to be %D named: %D %D \starttyping %D \f!languageprefix-identifier.\f!patternsextension %D \f!languageprefix-identifier.\f!hyhensextension %D \stoptyping %D %D The \type{spacing} variable specifies how the spaces after %D punctuation has to be handled. English is by tradition more %D tolerant to inter||sentence spacing than other languages. %D %D This macro also defines \type {\identifier} as a shortcut %D switch to the language. Furthermore the command defined as %D being language specific, are executed. With %D \type {default} we can default to another language %D (patterns) at format generation time. This default language %D is overruled when the appropriate patterns are loaded (some %D implementations support run time addition of patterns to a %D preloaded format). %D \macros %D {preloadlanguages} %D %D We first try to load the files defined as file synonym %D for \type {lang-*.pat} and \type {lang-*.hyp}. After that we %D fall back on those files. The macro \type {\preloadpatterns} %D reports which patterns are loaded and what hyphenmin %D values are set. \newtoks \everysetuplanguage \def\installedlanguages{\ctxcommand{installedlanguages()}} \unexpanded\def\doiflanguageelse#1% {\ifcsname\??language#1\c!state\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\reallanguagetag#1% {\ifcsname\??languagelinked#1\endcsname\csname\??languagelinked#1\endcsname\else#1\fi} % \language[#1] gave unwanted side effect of loading language specifics \unexpanded\def\installlanguage {\dodoubleargument\lang_basics_install} \def\lang_basics_install[#1][#2]% {\doifassignmentelse{#2} {\doiflanguageelse{#1} {\getparameters[\??language#1][#2]} {\setvalue{\??languagelinked#1}{#1}% \lang_basics_install_indeed{#1}{#1}% \getparameters[\??language#1][\c!state=\v!start,#2]}% \edef\currentsetuplanguage{#1}% \ctxcommand{definelanguage("#1","\specificlanguageparameter{#1}\s!default")}% \the\everysetuplanguage} {\setvalue{\??languagelinked#1}{#2}% \ctxcommand{setlanguagesynonym("#1","#2")}% \lang_basics_install_indeed{#1}{#2}}} \def\lang_basics_install_indeed#1#2% {\ifcsname#1\endcsname\else\setuvalue{#1}{\lang_basics_set_current[#2]}\fi} %D When the second argument is a language identifier, a %D synonym is created. This feature is present because we %D used dutch mnemonics in the dutch version, but nowadays %D conform a standard. \unexpanded\def\doifpatternselse#1% {\begingroup % will change \lang_basics_set_current[#1]% \ifnum\normallanguage>\zerocount \endgroup\expandafter\firstoftwoarguments \else \endgroup\expandafter\secondoftwoarguments \fi} %D \macros %D {setuplanguage} %D %D Quick and dirty, but useful: %D %D \showsetup{setuplanguage} %D %D Beware, this command can only be used when a language is installed. \unexpanded\def\setuplanguage {\dodoubleempty\lang_basics_setup} \ifdefined\lang_basics_synchronize \else \let\lang_basics_synchronize\relax % be nice for setups till we have one \fi \def\lang_basics_setup[#1][#2]% {\ifsecondargument \pushmacro\currentlanguage % can be default \edef\currentsetuplanguage{\reallanguagetag{#1}}% \getparameters[\??language\currentsetuplanguage][#2]% \the\everysetuplanguage \popmacro\currentlanguage %\doif\currentsetuplanguage\currentlanguage we can have influenced inheritance (default) \else \let\currentsetuplanguage\currentlanguage \getparameters[\??language\currentsetuplanguage][#1]% \the\everysetuplanguage \fi \lang_basics_synchronize} \appendtoks \ctxcommand{unloadlanguage("\currentsetuplanguage")}% \to \everysetuplanguage \setuplanguage [\s!default] [\s!patterns=, \s!lefthyphenmin=2, \s!righthyphenmin=2, \s!lefthyphenchar=-1, \s!righthyphenchar=45, % used in compound i.e. interfaced with c! and can be anything so no numbers \c!lefthyphen=, \c!righthyphen=-, \c!hyphen=-, \c!spacing=\v!packed, \c!compoundhyphen=\compoundhyphen, \c!rightcompoundhyphen=\compoundhyphen, \c!leftcompoundhyphen=, \c!midsentence=---, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!leftspeech=\languageparameter\c!leftquotation, \c!middlespeech=, \c!rightspeech=\languageparameter\c!rightquotation, \c!limittext=\unknown, \c!date={\v!year,\ ,\v!month,\ ,\v!day}, \c!text=Ag, \s!font=] % \v!auto : experimental ! % to be tested: % % \setuplanguage % [\s!default] % [\c!righthyphenchar="AD] %D The values \type {leftsentence} and \type %D {rightsentence} can be (and are) used to implement %D automatic subsentence boundary glyphs, like in {\fr %D |<|french guillemots|>|} or {\de |<|german guillemots|>|} or %D {\nl |<|dutch dashes|>|} like situations. Furthermore \type %D {leftquotation} and \type {leftquote} come into view %D \quotation {when we quote} or \quote {quote} something. %D \macros %D {currentdatespecification} %D %D Just to make things easy we can ask for the current date %D specification by saying: \def\currentdatespecification{\languageparameter\c!date} %D This command is not meant for users. %D Carefull reading of these macros shows that it's legal to %D say %D %D \starttyping %D \installlanguage [du] [de] %D \stoptyping %D \macros %D {language,mainlanguage} %D %D Switching to another language (actually another hyphenation %D pattern) is done with: %D %D \starttyping %D \language[identifier] %D \stoptyping %D %D or with \type{\identifier}. Just to be compatible with %D \PLAIN\ \TEX, we still support the original meaning, so %D %D \starttyping %D \language=1 %D \stoptyping %D %D is a valid operation, where the relation between number %D and language depends on the order in installing languages. %D %D \showsetup{language} %D \showsetup{mainlanguage} %D %D Both commands take a predefined language identifier as %D argument. We can use \type{\mainlanguage[identifier]} for %D setting the (indeed) main language. This is the language %D used for translating labels like {\em figure} and {\em %D table}. The main language defaults to the current language. %D %D We take care of local as well as standardized language %D switching (fr and fa, de and du, but nl and nl). \newtoks \everylanguage \def\lang_basics_synchronize% assumes that \currentlanguage is set % % % use different name as complex {\normallanguage\ctxcommand{languagenumber(% "\currentlanguage",% "\defaultlanguage\currentlanguage",% "\languageparameter\s!patterns"% )}\relax \the\everylanguage\relax} \newcount\hyphenminoffset \unexpanded\def\lesshyphens {\advance\hyphenminoffset\plusone \lang_basics_synchronize_min_max} \unexpanded\def\morehyphens {\ifcase\hyphenminoffset \else \advance\hyphenminoffset\minusone \fi \lang_basics_synchronize_min_max} \unexpanded\def\nohyphens % % % % % not clever, we still hyphenate but supress application {\ifx\dohyphens\relax \unexpanded\edef\dohyphens {\hyphenpenalty \the\hyphenpenalty \exhyphenpenalty\the\exhyphenpenalty \relax}% \fi \hyphenpenalty \plustenthousand \exhyphenpenalty\plustenthousand} \let\dohyphens\relax \unexpanded\def\lang_basics_synchronize_min_max {% these values are stored along with glyph nodes \lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax \righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax % these values are stored with the language (global!) \prehyphenchar \languageparameter\s!righthyphenchar\relax \posthyphenchar\languageparameter\s!lefthyphenchar \relax} \appendtoks \lang_basics_synchronize_min_max \to \everylanguage \unexpanded\def\unhyphenated {\groupedcommand{\lefthyphenmin\maxdimen}\donothing} % \appendtoks % \setups[\languageparameter\c!setups]% % \to \everylanguage %D You can setup the 'default' language to reset settings. \appendtoks \edef\currentlanguagesetups{\languageparameter\c!setups}% \ifx\currentlanguagesetups\empty \else \setups[\currentlanguagesetups]% \fi \to \everylanguage % this will move to core-spa ! \appendtoks \doifelse{\languageparameter\c!spacing}\v!broad\nonfrenchspacing\frenchspacing \to \everylanguage % \mainlanguage[nl] \setuplanguage[nl][lefthyphen=,righthyphen=?] % % \dorecurse{100}{dit is toch wel een heel\normalhyphendiscretionary lang\normalhyphendiscretionary woord \recurselevel\ } % \dorecurse{100}{dit is toch wel een heellangwoord \recurselevel\ } % new experimental feature \unexpanded\def\setuplanguages {\setuplanguage[\s!default]} % \setuplanguages[\s!font=\v!auto] % \setuplanguage[\s!default][\s!font=\v!auto] % \setuplanguage[nl][\s!font=\v!auto] \ifdefined\feature \else \let\feature\gobbleoneargument \fi \appendtoks \edef\p_language_font{\languageparameter\s!font}% \ifx\p_language_font\v!auto \feature\currentlanguage \fi \to \everylanguage % The following may be a solution for the fact that one cannot % change catcodes of characters like : and ; inside an environment. % we will also permit access by the other names %D Fast switcher \def\lang_basics_switch_asked {\ifx\askedlanguage\empty \else \ifcsname\??languagelinked\askedlanguage\endcsname \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}% \ifx\currentlanguage\askedlanguage \else \setcurrentlanguage\currentmainlanguage\askedlanguage \lang_basics_synchronize \fi \fi \fi} \unexpanded\def\uselanguageparameter#1% {\edef\askedlanguage{#1\c!language}% \lang_basics_switch_asked} \unexpanded\def\lang_basics_set_current[#1]% {\edef\askedlanguage{#1}% \lang_basics_switch_asked} \unexpanded\def\language {\doifnextoptionalelse\lang_basics_set_current\normallanguage} \newcount\mainlanguagenumber \unexpanded\def\mainlanguage[#1]% {\edef\askedlanguage{#1}% \ifx\askedlanguage\empty \else \ifcsname\??languagelinked\askedlanguage\endcsname \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}% \ifx\currentlanguage\askedlanguage \ifx\currentmainlanguage\askedlanguage \else \setcurrentlanguage\askedlanguage\askedlanguage \lang_basics_synchronize \fi \else \setcurrentlanguage\askedlanguage\askedlanguage \lang_basics_synchronize \fi \fi \fi \mainlanguagenumber\normallanguage} %D New (see nomarking and nolist): \def\splitsequence#1#2% {\doifelse{#1}\v!no{#2}{\doifelse{#1}\v!yes{\languageparameter\c!limittext}{#1}}} \def\splitsymbol#1% {\splitsequence{#1}{\languageparameter\c!limittext}} %D Just like with subsentence boundary symbols, quotes %D placement depends on the current language, therefore we show %D the defaults here. %D %D \def\ShowLanguageValues [#1] [#2] #3 #4 %D {\blank %D \startlinecorrection %D \vbox\bgroup %D \language[#1] %D \midaligned{\bf#2 subsentence symbol and quotes} %D \framed[width=\hsize,frame=off,topframe=on,bottomframe=on,offset=.5ex] %D {\hfil\quotation{#3 #4}\hfil\quote{#2}\hfil %D \startsubsentence\startsubsentence#3\stopsubsentence#4\stopsubsentence\hfil} %D \egroup %D \stoplinecorrection %D \blank} %D %D \ShowLanguageValues [af] [afrikaans] afrikaanse ... %D \ShowLanguageValues [ca] [catalan] catalan ... %D \ShowLanguageValues [cs] [czech] tjechisch tex %D \ShowLanguageValues [cs] [slovak] slowaakse ... %D \ShowLanguageValues [da] [danish] deense ... %D \ShowLanguageValues [de] [german] duitse degelijkheid %D \ShowLanguageValues [en] [english] engelse humor %D \ShowLanguageValues [fi] [finnish] finse ... %D \ShowLanguageValues [fr] [french] franse slag %D \ShowLanguageValues [it] [italian] italiaanse ... %D \ShowLanguageValues [la] [latin] latijnse missen %D \ShowLanguageValues [nl] [dutch] nederlandse zuinigheid %D \ShowLanguageValues [nb] [bokmal] noorse zalm %D \ShowLanguageValues [nn] [nnynorsk] noorse zalm %D \ShowLanguageValues [pl] [polish] poolse vlag %D \ShowLanguageValues [pt] [portuguese] portugese ... %D \ShowLanguageValues [es] [spanish] spaans benauwd %D \ShowLanguageValues [sv] [swedish] zweedse ... %D \ShowLanguageValues [tr] [turkish] turks fruit %D We support a lot of languages. These are specified and %D loaded in separate files, according to their roots. Here %D we only take care of (postponed) setting of the current %D language. %D %D \unprotect %D \placetable{The germanic languages (\type{lang-ger})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!nl \NC dutch \NC germanic \NC\FR %D \NC \s!en \NC english \NC germanic \NC\MR %D \NC \s!de \NC german \NC germanic \NC\MR %D \NC \s!da \NC danish \NC germanic \NC\MR %D \NC \s!sv \NC swedish \NC germanic \NC\MR %D \NC \s!af \NC afrikaans \NC germanic \NC\MR %D \NC \s!nb \NC bokmal \NC germanic \NC\LR %D \NC \s!nn \NC nynorsk \NC germanic \NC\LR %D \HL %D \stoptable %D \protect %D %D \unprotect %D \placetable{The italic languages (\type{lang-ita})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!fr \NC french \NC italic \NC\FR %D \NC \s!ca \NC catalan \NC italic \NC\MR %D \NC \s!es \NC spanish \NC italic \NC\MR %D \NC \s!it \NC italian \NC italic \NC\MR %D \NC \s!la \NC latin \NC italic \NC\MR %D \NC \s!pt \NC portuguese \NC italic \NC\LR %D \HL %D \stoptable %D \protect %D %D \unprotect %D \placetable{The slavic languages (\type{lang-sla})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!pl \NC polish \NC slavic \NC\FR %D \NC \s!cs \NC czech \NC slavic \NC\MR %D \NC \s!sk \NC slavik \NC slavic \NC\LR %D \HL %D \stoptable %D \protect %D \unprotect %D %D \placetable{The altaic languages (\type{lang-alt})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!tr \NC turkish \NC altaic \NC\SR %D \HL %D \stoptable %D %D \placetable{The uralic languages (\type{lang-ura})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!fi \NC finnish \NC uralic \NC\SR %D \HL %D \stoptable %D \protect \unexpanded\def\nopatterns{\normallanguage\minusone} %D We default to the language belonging to the interface. This %D is one of the few places outside the interface modules where %D \type{\startinterface} is used. \setupcurrentlanguage[\s!en] \unexpanded\def\initializemainlanguage {\mainlanguage[\currentlanguage]% \showmessage\m!languages9\currentlanguage} %D New: \let\stopexceptions\relax \unexpanded\def\startexceptions {\dosingleempty\lang_basics_start_exceptions} \def\lang_basics_start_exceptions[#1]#2\stopexceptions % multilingual or not? {\begingroup \edef\askedlanguage{\reallanguagetag{#1}}% \ifx\askedlanguage\empty \let\askedlanguage\currentlanguage \fi \ctxcommand{setlanguageexceptions("\askedlanguage",\!!bs#2\!!es)}% \endgroup} %D For the moment here: \uchyph 1 % also treat uppercase \exhyphenchar 45 % to permit breaking at explicit hyphens \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-osx.mkiv0000644000175000017500000006270011754241457025153 0ustar norbertnorbert%D \module %D [ file=type-mac, %D version=2009.03.10, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Mac OS X Definitions, %D author=Wolfgang Schuster, %D date=\currentdate, %D copyright={Wolfgang Schuster}] %C %C This module is part of the \CONTEXT\ macro||package. See %C mreadme.pdf for details. \starttypescriptcollection [macosx] % American Typewriter \starttypescript [serif] [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter] \definefontsynonym [AmericanTypewriter-Light] [name:americantypewriterlight] [features=default] \definefontsynonym [AmericanTypewriter-Regular] [name:americantypewriter] [features=default] \definefontsynonym [AmericanTypewriter-Bold] [name:americantypewriterbold] [features=default] \definefontsynonym [AmericanTypewriter-LightCond] [name:americantypewritercondensedlight] [features=default] \definefontsynonym [AmericanTypewriter-Condensed] [name:americantypewritercondensed] [features=default] \definefontsynonym [AmericanTypewriter-BoldCond] [name:americantypewritercondensedbold] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter-light-condensed] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-LightCond] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-Condensed] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter-condensed] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-Condensed] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-BoldCond] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter-light] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-Light] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-Regular] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-Regular] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-Bold] [features=default] \stoptypescript \starttypescript [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Arial / Arial Narrow / Arial Rounded / Arial Unicode \starttypescript [sans] [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode] \definefontsynonym [Arial-Condensed] [name:arialnarrow] [features=default] \definefontsynonym [Arial-ItalicCond] [name:arialnarrowitalic] [features=default] \definefontsynonym [Arial-BoldCond] [name:arialnarrowbold] [features=default] \definefontsynonym [Arial-BoldItalicCond] [name:arialnarrowbolditalic] [features=default] \definefontsynonym [Arial-Regular] [name:arial] [features=default] \definefontsynonym [Arial-Italic] [name:arialitalic] [features=default] \definefontsynonym [Arial-Bold] [name:arialbold] [features=default] \definefontsynonym [Arial-BoldItalic] [name:arialbolditalic] [features=default] \definefontsynonym [Arial-Black] [name:arialblack] [features=default] \definefontsynonym [Arial-Unicode] [name:arialunicodems] [features=default] \definefontsynonym [Arial-Rounded] [name:arialroundedmtbold] [features=default] \stoptypescript \starttypescript [sans] [arial-narrow,arial-condensed] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Condensed] [features=default] \definefontsynonym [SansItalic] [Arial-ItalicCond] [features=default] \definefontsynonym [SansBold] [Arial-BoldCond] [features=default] \definefontsynonym [SansBoldItalic] [Arial-BoldItalicCond] [features=default] \stoptypescript \starttypescript [sans] [arial] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Regular] [features=default] \definefontsynonym [SansItalic] [Arial-Italic] [features=default] \definefontsynonym [SansBold] [Arial-Bold] [features=default] \definefontsynonym [SansBoldItalic] [Arial-BoldItalic] [features=default] \stoptypescript \starttypescript [sans] [arial-rounded] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Rounded] [features=default] \stoptypescript \starttypescript [sans] [arial-unicode] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Unicode] [features=default] \stoptypescript \starttypescript [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Baskerville \starttypescript [serif] [baskerville] \definefontsynonym [Baskerville-Regular] [name:baskerville] [features=default] \definefontsynonym [Baskerville-Italic] [name:baskervilleitalic] [features=default] \definefontsynonym [Baskerville-Medium] [name:baskervillesemibold] [features=default] \definefontsynonym [Baskerville-MediumItalic] [name:baskervillesemibolditalic] [features=default] \definefontsynonym [Baskerville-Bold] [name:baskervillebold] [features=default] \definefontsynonym [Baskerville-BoldItalic] [name:baskervillebolditalic] [features=default] \stoptypescript \starttypescript [serif] [baskerville] \setups[font:fallback:serif] \definefontsynonym [Serif] [Baskerville-Regular] [features=default] \definefontsynonym [SerifItalic] [Baskerville-Italic] [features=default] \definefontsynonym [SerifBold] [Baskerville-Medium] [features=default] \definefontsynonym [SerifBoldItalic] [Baskerville-MediumItalic] [features=default] \stoptypescript \starttypescript [baskerville] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Big Caslon \starttypescript [serif] [caslon,bigcaslon] \definefontsynonym [BigCaslon-Medium] [name:bigcaslonmedium] [features=default] \stoptypescript \starttypescript [serif] [caslon,bigcaslon] \setups[font:fallback:serif] \definefontsynonym [Serif] [BigCaslon-Medium] [features=default] \stoptypescript \starttypescript [caslon,bigcaslon] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Copperplate \starttypescript [sans] [copperplate-light,copperplate] \definefontsynonym [Copperplate-Light] [name:copperplatelight] [features=default] \definefontsynonym [Copperplate-Regular] [name:copperplate] [features=default] \definefontsynonym [Copperplate-Bold] [name:copperplatebold] [features=default] \stoptypescript \starttypescript [sans] [copperplate-light] \setups[font:fallback:sans] \definefontsynonym [Sans] [Copperplate-Light] [features=default] \definefontsynonym [SansBold] [Copperplate-Regular] [features=default] \stoptypescript \starttypescript [sans] [copperplate] \setups[font:fallback:sans] \definefontsynonym [Sans] [Copperplate-Regular] [features=default] \definefontsynonym [SansBold] [Copperplate-Bold] [features=default] \stoptypescript \starttypescript [copperplate-light,copperplate] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Futura \starttypescript [sans] [futura-condensed,futura] \definefontsynonym [Futura-MediumCond] [name:futuracondensedmedium] [features=default] \definefontsynonym [Futura-Medium] [name:futuramedium] [features=default] \definefontsynonym [Futura-MediumItalic] [name:futuramediumitalic] [features=default] \definefontsynonym [Futura-BoldCond] [name:futuracondensedextrabold] [features=default] \stoptypescript \starttypescript [sans] [futura-condensed] \setups[font:fallback:sans] \definefontsynonym [Sans] [Futura-MediumCond] [features=default] \definefontsynonym [SansBold] [Futura-BoldCond] [features=default] \stoptypescript \starttypescript [sans] [futura] \setups[font:fallback:sans] \definefontsynonym [Sans] [Futura-Medium] [features=default] \definefontsynonym [SansItalic] [Futura-MediumItalic] [features=default] \stoptypescript \starttypescript [futura-condensed,futura] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Gill Sans \starttypescript [sans] [gillsans-light,gillsans] \definefontsynonym [GillSans-Light] [name:gillsanslight] [features=default] \definefontsynonym [GillSans-LightItalic] [name:gillsanslightitalic] [features=default] \definefontsynonym [GillSans-Regular] [name:gillsans] [features=default] \definefontsynonym [GillSans-Italic] [name:gillsansitalic] [features=default] \definefontsynonym [GillSans-Bold] [name:gillsansbold] [features=default] \definefontsynonym [GillSans-BoldItalic] [name:gillsansbolditalic] [features=default] \stoptypescript \starttypescript [sans] [gillsans-light] \setups[font:fallback:sans] \definefontsynonym [Sans] [GillSans-Light] [features=default] \definefontsynonym [SansItalic] [GillSans-LightItalic] [features=default] \definefontsynonym [SansBold] [GillSans-Regular] [features=default] \definefontsynonym [SansBoldItalic] [GillSans-Italic] [features=default] \stoptypescript \starttypescript [sans] [gillsans] \setups[font:fallback:sans] \definefontsynonym [Sans] [GillSans-Regular] [features=default] \definefontsynonym [SansItalic] [GillSans-Italic] [features=default] \definefontsynonym [SansBold] [GillSans-Bold] [features=default] \definefontsynonym [SansBoldItalic] [GillSans-BoldItalic] [features=default] \stoptypescript \starttypescript [gillsans-light,gillsans] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Helvetica Neuse \starttypescript [sans] [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed] \definefontsynonym [HelveticaNeue-UltraLight] [name:helveticaneueultralight] [features=default] \definefontsynonym [HelveticaNeue-UltraLightItalic] [name:helveticaneueultralightitalic] [features=default] \definefontsynonym [HelveticaNeue-Light] [name:helveticaneuelight] [features=default] \definefontsynonym [HelveticaNeue-LightItalic] [name:helveticaneuelightitalic] [features=default] \definefontsynonym [HelveticaNeue-Regular] [name:helveticaneue] [features=default] \definefontsynonym [HelveticaNeue-Italic] [name:helveticaneueitalic] [features=default] \definefontsynonym [HelveticaNeue-Bold] [name:helveticaneuebold] [features=default] \definefontsynonym [HelveticaNeue-BoldItalic] [name:helveticaneuebolditalic] [features=default] \definefontsynonym [HelveticaNeue-BoldCond] [name:helveticaneuecondensedbold] [features=default] \definefontsynonym [HelveticaNeue-BlackCond] [name:helveticaneuecondensedblack] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue-ultralight] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-UltraLight] [features=default] \definefontsynonym [SansItalic] [HelveticaNeue-UltraLightItalic] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-Light] [features=default] \definefontsynonym [SansBoldItalic] [HelveticaNeue-LightItalic] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue-light] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-Light] [features=default] \definefontsynonym [SansItalic] [HelveticaNeue-LightItalic] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-Regular] [features=default] \definefontsynonym [SansBoldItalic] [HelveticaNeue-Italic] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-Regular] [features=default] \definefontsynonym [SansItalic] [HelveticaNeue-Italic] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-Bold] [features=default] \definefontsynonym [SansBoldItalic] [HelveticaNeue-BoldItalic] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue-boldcondensed] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-BoldCond] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-BlackCond] [features=default] \stoptypescript \starttypescript [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Hiragino Mincho \starttypescript [serif] [hiragino-mincho] \definefontsynonym [HiraginoMinchoPro-Regular] [name:hiraminprow3] [features=japanese] \definefontsynonym [HiraginoMinchoPro-Bold] [name:hiraminprow6] [features=japanese] \definefontsynonym [HiraginoMinchoProN-Regular] [name:hiraminpronw3] [features=japanese] \definefontsynonym [HiraginoMinchoProN-Bold] [name:hiraminpronw6] [features=japanese] \stoptypescript \starttypescript [serif] [hiragino-mincho] \setups[font:fallback:serif] \definefontsynonym [Serif] [HiraginoMinchoPro-Regular] [features=japanese] \definefontsynonym [SerifBold] [HiraginoMinchoPro-Bold] [features=japanese] \stoptypescript % \starttypescript [serif] [hiragino-mincho] % \setups[font:fallback:serif] % \definefontsynonym [Serif] [HiraginoMinchoProN-Regular] [features=japanese] % \definefontsynonym [SerifBold] [HiraginoMinchoProN-Bold] [features=japanese] % \stoptypescript \starttypescript [hiragino-mincho] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Hiragino Maru \starttypescript [sans] [hiragino-maru] \definefontsynonym [HiraginoMaruGothicPro-Regular] [name:hiramaruprow4] [features=japanese] \definefontsynonym [HiraginoMaruGothicProN-Regular] [name:hiramarupronw4] [features=japanese] \stoptypescript \starttypescript [sans] [hiragino-maru] \setups[font:fallback:sans] \definefontsynonym [Sans] [HiraginoMaruGothicPro-Regular] [features=japanese] \stoptypescript % \starttypescript [sans] [hiragino-maru] % \setups[font:fallback:sans] % \definefontsynonym [Sans] [HiraginoMaruGothicProN-Regular] [features=japanese] % \stoptypescript \starttypescript [hiragino-maru] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Hiragino Kaku \starttypescript [sans] [hiragino-kaku] \definefontsynonym [HiraginoKakuGothicPro-Regular] [name:hirakakuprow3] [features=japanese] \definefontsynonym [HiraginoKakuGothicPro-Bold] [name:hirakakuprow6] [features=japanese] \definefontsynonym [HiraginoKakuGothicStd-Black] [name:hirakakustdw8] [features=japanese] \definefontsynonym [HiraginoKakuGothicProN-Regular] [name:hirakakupronw3] [features=japanese] \definefontsynonym [HiraginoKakuGothicProN-Bold] [name:hirakakupronw6] [features=japanese] \definefontsynonym [HiraginoKakuGothicStdN-Black] [name:hirakakustdnw8] [features=japanese] \stoptypescript \starttypescript [sans] [hiragino-kaku] \setups[font:fallback:sans] \definefontsynonym [Sans] [HiraginoKakuGothicPro-Regular] [features=japanese] \definefontsynonym [SansBold] [HiraginoKakuGothicPro-Bold] [features=japanese] \stoptypescript % \starttypescript [sans] [hiragino-kaku] % \setups[font:fallback:sans] % \definefontsynonym [Sans] [HiraginoKakuGothicProN-Regular] [features=japanese] % \definefontsynonym [SansBold] [HiraginoKakuGothicProN-Bold] [features=japanese] % \stoptypescript \starttypescript [hiragino-kaku] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Hoefler Text \starttypescript [serif] [hoefler] \definefontsynonym [HoeflerText-Regular] [name:hoeflertext] [features=default] \definefontsynonym [HoeflerText-Italic] [name:hoeflertextitalic] [features=default] \definefontsynonym [HoeflerText-Black] [name:hoeflertextblack] [features=default] \definefontsynonym [HoeflerText-BlackItalic] [name:hoeflertextblackitalic] [features=default] \definefontsynonym [HoeflerText-Ornaments] [name:hoeflertextornaments] [features=default] \stoptypescript \starttypescript [serif] [hoefler] \setups[font:fallback:serif] \definefontsynonym [Serif] [HoeflerText-Regular] [features=default] \definefontsynonym [SerifItalic] [HoeflerText-Italic] [features=default] \definefontsynonym [SerifBold] [HoeflerText-Black] [features=default] \definefontsynonym [SerifBoldItalic] [HoeflerText-BlackItalic] [features=default] \stoptypescript \starttypescript [hoefler] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Impact \starttypescript [sans] [impact] \definefontsynonym [Impact-Regular] [name:impact] [features=default] \stoptypescript \starttypescript [sans] [impact] \setups[font:fallback:sans] \definefontsynonym [Sans] [Impact-Regular] [features=default] \stoptypescript \starttypescript [impact] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Andale Mono / Monaco \starttypescript [mono] [andalemono,monaco] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default] \stoptypescript \starttypescript [mono] [andalemono,monaco] \setups[font:fallback:mono] \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] \stoptypescript \starttypescript [andalemono,monaco] \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] \stoptypescript % Optima \starttypescript [sans] [optima,optima-bold] \definefontsynonym [Optima-Regular] [name:optimaregular] [features=default] \definefontsynonym [Optima-Italic] [name:optimaitalic] [features=default] \definefontsynonym [Optima-Bold] [name:optimabold] [features=default] \definefontsynonym [Optima-BoldItalic] [name:optimabolditalic] [features=default] \definefontsynonym [Optima-Black] [name:optimaextrablack] [features=default] \stoptypescript \starttypescript [sans] [optima] \setups[font:fallback:sans] \definefontsynonym [Sans] [Optima-Regular] [features=default] \definefontsynonym [SansItalic] [Optima-Italic] [features=default] \definefontsynonym [SansBold] [Optima-Bold] [features=default] \definefontsynonym [SansBoldItalic] [Optima-BoldItalic] [features=default] \stoptypescript \starttypescript [sans] [optima-bold] \setups[font:fallback:sans] \definefontsynonym [Sans] [Optima-Bold] [features=default] \definefontsynonym [SansItalic] [Optima-BoldItalic] [features=default] \definefontsynonym [SansBold] [Optima-Black] [features=default] \stoptypescript \starttypescript [optima,optima-bold] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Papyrus \starttypescript [sans] [papyrus] \definefontsynonym [Papyrus-Regular] [name:papyrus] [features=default] \definefontsynonym [Papyrus-Condensed] [name:papyruscondensed] [features=default] \stoptypescript \starttypescript [sans] [papyrus] \setups[font:fallback:sans] \definefontsynonym [Sans] [Papyrus-Regular] [features=default] \stoptypescript \starttypescript [papyrus] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % STFangsong \starttypescript [serif] [stfangsong] \definefontsynonym [STFangsong-Regular] [name:stfangsong] [features=chinese] \stoptypescript \starttypescript [serif] [stfangsong] \setups[font:fallback:sans] \definefontsynonym [Serif] [STFangsong-Regular] [features=chinese] \stoptypescript \starttypescript [stfangsong] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % STHeiti \starttypescript [sans] [stheiti] \definefontsynonym [STXihei-Light] [name:stxihei] [features=chinese] \definefontsynonym [STHeiti-Regular] [name:stheiti] [features=chinese] \stoptypescript \starttypescript [sans] [stheiti] \setups[font:fallback:sans] \definefontsynonym [Sans] [STXihei-Light] [features=chinese] \definefontsynonym [SansBold] [STKaiti-Regular] [features=chinese] \stoptypescript \starttypescript [stheiti] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % STKaiti \starttypescript [serif] [stkaiti] \definefontsynonym [STKaiti-Regular] [name:stkaiti] [features=chinese] \stoptypescript \starttypescript [serif] [stkaiti] \setups[font:fallback:sans] \definefontsynonym [Serif] [STKaiti-Regular] [features=chinese] \stoptypescript \starttypescript [stkaiti] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % STSong \starttypescript [serif] [stsong] \definefontsynonym [STSong-Regular] [name:stsong] [features=chinese] \stoptypescript \starttypescript [serif] [stsong] \setups[font:fallback:sans] \definefontsynonym [Serif] [STSong-Regular] [features=chinese] \stoptypescript \starttypescript [stsong] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Chalkboard / Comic Sans / Tahoma \starttypescript [sans] [chalkboard,comicsans,tahoma] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [name:\typescriptprefix{f:\typescripttwo}bold] [features=default] \stoptypescript \starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma] \setups[font:fallback:sans] \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] \stoptypescript \starttypescript [chalkboard,comicsans,tahoma] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Cochin / Courier New / Georgia / Times New Roman / Trebuchet / Verdana \starttypescript [serif,sans,mono] [cochin,georgia,timesnewroman,trebuchet,verdana,couriernew] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [name:\typescriptprefix{f:\typescripttwo}italic] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [name:\typescriptprefix{f:\typescripttwo}bold] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [name:\typescriptprefix{f:\typescripttwo}bolditalic] [features=default] \stoptypescript \starttypescript [serif] [cochin,georgia,timesnewroman] \setups[font:fallback:serif] \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default] \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default] \stoptypescript \starttypescript [cochin,georgia,timesnewroman] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Courier New % \starttypescript [mono] [couriernew] % \setups[font:fallback:mono] % \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] % \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default] % \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] % \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default] % \stoptypescript % \starttypescript [couriernew] % \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] % \stoptypescript % Trebuchet / Verdana % \starttypescript [sans] [trebuchet,verdana] % \setups[font:fallback:sans] % \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] % \definefontsynonym [SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default] % \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] % \definefontsynonym [SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default] % \stoptypescript % \starttypescript [trebuchet,verdana] % \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] % \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-mrk.mkii0000644000175000017500000004557211754241457024351 0ustar norbertnorbert%D \module %D [ file=supp-mrk, %D version=1995.10.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Marks, %D author=Jim Fox / Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Remark: due to the lack of \type {\clearmark}, the \ETEX\ %D dedicated mechanism is not yet operational. %D This module has deverted so much from the original that I %D can probably rewrite it to a more efficient one now and %D I will do so. %D There are 256 \COUNTERS, \DIMENSIONS, \SKIPS, \MUSKIPS\ and %D \BOXES, 16~in- and output buffers, but there is only one %D \MARK. In TugBoat~8 (1987, no~1) Jim Fox presents a set of %D macros that can be used to mimmick multiple marks. We %D gladly adopt them here. I may rewrite this module from %D scratch some day, since some low level \CONTEXT\ commands %D can be used. %D %D This module was changed on behalf of \ETEX. The main %D extension is that \type{\get..} and alike is used instead of %D direct calls. The \TEX\ based multiple marks needs to store %D the mark data but \ETEX\ uses a different approach. \writestatus{loading}{ConTeXt Support Macros / Marks} \unprotect %D We start with the presetting the interface macros. %D %D \starttabulate[|||] %D \NC \type{\getmarks} \NC sets the marks to their values \NC \NR %D \NC \type{\getallmarks} \NC sets all marks to their values \NC \NR %D \NC \type{\getsplitmarks} \NC sets the splitmarks to their values\NC \NR %D \NC \type{\getallsplitmarks} \NC sets all splitmarks to their values\NC \NR %D \NC \type{\setmarks} \NC synchronizes topmarks (\ETEX) \NC \NR %D \stoptabulate %D %D Later we will overload these, dependent of the brand of %D \TEX\ that we use. \let \getmarks \gobbleoneargument \let \getallmarks \relax \let \getsplitmarks \gobbleoneargument \let \getallsplitmarks \relax \let \setallmarks \relax \let \newmark \gobbleoneargument \let \newpersistentmark \gobbleoneargument \let \resetmark \gobbleoneargument \let \setmark \gobbletwoargument %D \macros %D {expandmarks} %D %D We can force expansion of marks with the following switch. \newif\ifexpandmarks \expandmarkstrue % hm, true indeed ? \beginTEX %D This implementation is more or less compatible with the %D other \type {\new} macros in \PLAIN\ \TEX. A mark is %D defined by: %D %D \starttyping %D \newmark\name %D \stoptyping %D %D and can be called upon with: %D %D \starttyping %D \gettopmark \name % or \topname %D \getbotmark \name % or \botname %D \getfirstmark\name % or \firstname %D \stoptyping %D %D The only drawback of his approach is that the marks must be %D preloaded in the output routine. This is accomplished by %D means of: %D %D \starttyping %D \getmarks\name %D \stoptyping %D %D The macros presented here are in most aspects copies of %D those presented by Jim Fox. We've taken the freedom to %D change a few things for more or less obvious reasons: %D %D \startitemize %D \item Because the original macros look quite complicated, %D which is mainly due to extensive use of %D \type{\expandafter}'s and \type{\csname}'s, we changed %D those in favor of \type{\getvalue}. %D \item To be more in line with the rest of \CONTEXT, we've %D changed some of the names of macros. %D \item Because we are already short on \COUNTERS\ we use %D macros when possible. %D \item We maintain a list of defined marks and use one %D call for getting them all at once. %D \item We have extended the mechanism to splitmarks (not %D perfected yet). %D \item We've introduced optional expansion of the contents %D of marks. %D \stopitemize %D %D Whatever changes we've made, the credits still go to Jim, %D whatever goes wrong is due to me. The method is described %D in the TugBoat mentioned before, so we won't go into %D details. All marks belonging to a group are packed in a %D list. In this list they are preceded by a macro that can %D be defined at will and a number concerning the position at %D which it was defined. %D %D \starttyping %D \def\somelist{... \domark5{this} ... \domark31{that} ...} %D \stoptyping %D %D The original \type{\mark} keeps track of the number and %D \type{\topmark} and \type{\botmark} are used to extract the %D actual marks from the list. The counting is done by %D %D \starttyping %D \currentmarker %D \stoptyping %D %D In \CONTEXT\ we use the mark mechanism to keep track of %D colors. In a complicated documents with many colors per %D page, \type{\currentmarker} can therefore get pretty high. %D (Well, this is not completely true, because we don't %D always have to use marks.) \newcount\currentmarker %D The original implementation used a few more \COUNTERS. Two %D have been substituted by macros, one has been replaced by %D our scratch counter. %D %D \starttyping %D \newcount\topmarker %D \newcount\botmarker %D \newcount\foundmarker %D \stoptyping %D %D We've also introduced some constants, one for the lists and %D three for composing the mark commands. \def\@@marklist@@ {*m*} % {marklist} \def\@@marktop@@ {*t*} % {top} \def\@@markbot@@ {*b*} % {bot} \def\@@markfirst@@ {*f*} % {first} \def\@@markcurrent@@ {*c*} % {current} %D The next one is new too. All defined marks are packed in a %D comma seperated list. This could of course have been a token %D list but \CONTEXT\ has some preference for comma lists. \let\allmarks=\empty %D The next macro replaces the multiple step expansion and %D command name constructors of Jim. This alternative leads to %D a more readable source (we hope). \def\makemarknames#1% kan genest werken {\bgroup \escapechar=-1 \xdef\markname{\string#1}% \xdef\marklist{\@@marklist@@\markname}% \egroup} %D \macros %D {newmark,resetmark} %D %D A mark is defined by \type{\newmark}. At the same time, %D the name of the mark is added to a commalist. The %D three initializations were not in the original design, but %D make calls from outside the output routine a bit more %D robust. \let\domark\relax % saves a restore on the stack \def\definenewmark#1#2% {\bgroup \makemarknames{#1}% #2% \letgvalueempty{\@@markcurrent@@\markname}% \letgvalueempty{\@@marktop@@ \markname}% \letgvalueempty{\@@markfirst@@ \markname}% \letgvalueempty{\@@markbot@@ \markname}% \setgvalue{\marklist}{\domark0{}}% beware of halfway definitions \long\gdef#1{\addmarker#1}% \egroup} \def\newmark#1% {\definenewmark#1{\doglobal\addtocommalist\markname\allmarks}} %D Don't ask me, but sometimes we need more control over %D updating the marks, thereby we have: \def\newpersistentmark#1% for an example see core-grd.tex {\definenewmark#1\relax} \let\setmark \empty \let\resetmark\newmark %D Some more natural interfacing macros: \def\getcurrentmark #1{\getvalue{\@@markcurrent@@\strippedcsname#1}} \def\gettopmark #1{\getvalue{\@@marktop@@ \strippedcsname#1}} \def\getbottommark #1{\getvalue{\@@markbot@@ \strippedcsname#1}} \def\getfirstmark #1{\getvalue{\@@markfirst@@ \strippedcsname#1}} \def\getsplitbottommark#1{\getvalue{\@@markbot@@ \strippedcsname#1}} \def\getsplitfirstmark #1{\getvalue{\@@markfirst@@ \strippedcsname#1}} %D \macros %D {setmark} %D %D Setting a new mark and adding a mark to the designated %D list is done by \type{\addmarker}. This is an internal %D command, the user set a marks bij calling it's name: %D %D \starttyping %D \setmark\mymark{some text} % or \mymark{some text} %D \stoptyping %D %D Where \type{\mymark} is previously defined by %D \type{\newmark}. \long\def\addmarker#1#2% {\bgroup \makemarknames{#1}% \setgvalue{\@@markcurrent@@\markname}{#2}% \global\advance\currentmarker \plusone \normalmark{\the\currentmarker}% \!!toksa\@EA\@EA\@EA{\csname\marklist\endcsname}% \ifexpandmarks \setxvalue\marklist {\the\!!toksa \noexpand\domark \the\currentmarker{#2}}% \else \!!toksb\@EA{#2}% one level, why ? handy for cs \setxvalue\marklist {\the\!!toksa \noexpand\domark \the\currentmarker{\the\!!toksb}}% \fi \egroup} %D \macros %D {getmarks,getallmarks, %D getsplitmarks,getallsplitmarks} %D %D In fact, marks make only sense in the output routine. Marks %D are derived from their list by means of \type{\getmarks}. %D Only one call per mark is permitted in the output routine. %D Therefore, it's far more easy to get them all at once, by %D means of \type{\getallmarks}, which is not part of the %D original design. %D %D This grabbing is done by processing the list using the %D embedded \type{\domark} macros. When a relevant mark is %D found, this macro is reassigned and from then on serves %D in building the new list. % Hm, resetting \!!toksa got lost and took me a half a day to % trace down ([] showed up in the pagebody); I really have % to clean up this messy module (write it from scratch). \newif\ifnofirstmarker % an auxiliary switch \def\getmarks#1% {\bgroup \makemarknames{#1}% \edef\topmarker{0\normaltopmark}% \edef\botmarker{0\normalbotmark}% \!!toksa\emptytoks \!!toksb\emptytoks \nofirstmarkertrue % does more worse than good \let\fi\relax \let\or\relax \let\else\relax % \let\domark\doscanmarks \getvalue\marklist\lastmark %\message{markstatus : [\the\!!toksa\the\!!toksb\the\!!toksc]}% \long\setxvalue\marklist{\the\!!toksa\the\!!toksb\the\!!toksc}% \egroup} \def\getsplitmarks#1% {\bgroup \makemarknames{#1}% % \@EA\let\@EA\savedmarklist\@EA\csname\marklist\endcsname \edef\topmarker{0\normalsplitfirstmark}% \edef\botmarker{0\normalsplitbotmark}% \!!toksa\emptytoks \!!toksb\emptytoks \nofirstmarkertrue % does more worse than good \let\fi\relax \let\or\relax \let\else\relax % \let\domark\doscanmarks \getvalue\marklist\lastmark % \global\@EA\let\csname\marklist\endcsname\savedmarklist \egroup} \def\getallmarks {\processcommacommand[\allmarks]\getmarks} \def\getallsplitmarks{\processcommacommand[\allmarks]\getsplitmarks} \def\getallmarks {\@EA\processcommalist\@EA[\allmarks]\getmarks} \def\getallsplitmarks{\@EA\processcommalist\@EA[\allmarks]\getsplitmarks} \long\def\dodoscanmarks#1% {\ifnum\scratchcounter>\topmarker\relax \normalelse \long\setgvalue{\@@marktop@@\markname}{#1}% \normalfi \ifnum\scratchcounter>\botmarker\relax \let\domark\dorecovermarks \!!toksb\@EA{\@EA\domark\the\scratchcounter{#1}}% \normalelse \ifnofirstmarker \long\setgvalue{\@@markfirst@@\markname}{#1}% \ifnum\scratchcounter>\topmarker\relax \nofirstmarkerfalse \normalfi \normalfi \long\setgvalue{\@@markbot@@\markname}{#1}% \!!toksa\@EA{\@EA\domark\the\scratchcounter{#1}}% \normalfi} \def\doscanmarks {\afterassignment\dodoscanmarks\scratchcounter=} \long\def\dorecovermarks#1\lastmark% nice trick {\!!toksc{\domark#1}} \def\lastmark% rest of trick {\!!toksc\emptytoks} \endTEX %D The \ETEX\ way of doing things \unknown \beginETEX \marks cum suis \newtoks \listofmarks \def\@@prk{prk:} \def\@@mrk{mrk:} \def\@@trk{trk:} \def\@@frk{frk:} \def\@@brk{brk:} \def\@@crk{crk:} %D We will use two state variables per mark, one to signal %D that a new mark value is set, and one to trigger (on the %D next page) the setting of the top mark. \def\checkedtopmarks #1{\csname\@@trk\string#1\endcsname} \def\checkedfirstmarks#1{\csname\@@frk\string#1\endcsname} \def\checkedbotmarks #1{\csname\@@brk\string#1\endcsname} \def\thecurrentmarks #1{\csname\@@crk\string#1\endcsname} \long\def\setmark#1% {%\writestatus{marks}{setting \string#1}\wait \global\@EA\chardef\csname\@@mrk\string#1\endcsname\plusone %\@EA\normalmarks\csname\@@prk\string#1\endcsname{1}% \@EA\normalmarks\csname\@@prk\string#1\endcsname{\realfolio}% \ifexpandmarks\@EA\setexpandedmark\else\@EA\setnormalmark\fi#1} \def\setexpandedmark#1#2% % marks expand anyway {\@EA\xdef\csname\@@crk\string#1\endcsname{#2}% \normalmarks#1{#2}} \def\setnormalmark#1#2% using a tok prevents unwanted expansion in mark {\begingroup % don't ask why, but grouping is needed \scratchtoks{#2}% in order to to mess up scratchtoks \@EA\xdef\csname\@@crk\string#1\endcsname{\the\scratchtoks}% \normalmarks#1{\the\scratchtoks}% one level expansion \endgroup} \def\checktopmark#1% {%\writestatus{marks}{checking \string#1}\wait \ifcase\csname\@@mrk\string#1\endcsname\else\dochecktopmark#1\fi} %\def\dochecktopmark#1% % {\ifcase0\@EA\normalfirstmarks\csname\@@prk\string#1\endcsname\else % \@EA\ifx\csname\@@frk\string#1\endcsname\empty % \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}% % \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}% % \else % \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}% % \global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount % \fi % \fi} \def\dochecktopmark#1% {\ifx*\@EA\normalfirstmarks\csname\@@prk\string#1\endcsname*\else \@EA\ifx\csname\@@frk\string#1\endcsname\empty \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}% \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}% \else \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}% \global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount \fi \fi} %\def\resetmark#1% we cannot use \normalmarks#1{} % {\global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount % \@EA\normalmarks\csname\@@prk\string#1\endcsname{0}% % \global\@EA\let\csname\@@trk\string#1\endcsname\empty % \global\@EA\let\csname\@@frk\string#1\endcsname\empty % \global\@EA\let\csname\@@brk\string#1\endcsname\empty % \global\@EA\let\csname\@@crk\string#1\endcsname\empty} \def\resetmark#1% we cannot use \normalmarks#1{} {\global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount \@EA\normalmarks\csname\@@prk\string#1\endcsname{}% {0}% \global\@EA\let\csname\@@trk\string#1\endcsname\empty \global\@EA\let\csname\@@frk\string#1\endcsname\empty \global\@EA\let\csname\@@brk\string#1\endcsname\empty \global\@EA\let\csname\@@crk\string#1\endcsname\empty} \def\definenewmark#1% {\ifcsname\@@prk\string#1\endcsname\else % this is etex -) \newmarks#1\doglobal\appendtoks\checktopmark#1\to\listofmarks \@EA\newmarks\csname\@@prk\string#1\endcsname % status mark \fi \global\@EA\mathchardef\csname\@@mrk\string#1\endcsname\zerocount \global\@EA\let\csname\@@crk\string#1\endcsname\empty \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}% \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}% \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}} \let \newmark \definenewmark \let \newpersistentmark \newmarks % \definenewmark \let \normalsetmark \setmark \def\getallmarks{\the\listofmarks} % \def\setallmarks{\the\listofmarks} %D In \type {page-ini} or \type {core-mar} we should say: %D %D \starttyping %D \appendtoks \getallmarks \to \everybeforepagebody %D \appendtoks \setallmarks \to \everyafterpagebody %D \stoptyping \let\getcurrentmark \thecurrentmarks \let\gettopmark \checkedtopmarks \let\getbottommark \checkedbotmarks % \normalbotmarks \let\getfirstmark \checkedfirstmarks % \normalfirstmarks \let\getsplitbottommark \normalsplitbotmarks \let\getsplitfirstmark \normalsplitfirstmarks \let\getbotmark \getbottommark \let\getsplitbotmark \normalsplitbotmarks \let\getsplittopmark \normalsplitfirstmarks \endETEX %D A couple of goodies: \let\getbotmark \getbottommark \let\getsplitbotmark\getsplitbottommark \let\getsplittopmark\getsplitfirstmark %D \macros %D {noninterferingmarks} %D %D Marks can interfere badly with for instance postprocessing %D paragraphs, for instance when we want to grab the last box %D using \type {\lastbox}, when at the same time using colors. \let\normalsetmark\setmark \def\noninterferingsetmark#1#2% {\ifhmode\prewordbreak\hbox\fi{\normalsetmark{#1}{#2}}} \def\noninterferingmarks {\let\noninterferingmarks\relax \let\setmark\noninterferingsetmark} %D This macro is for instance used in the inline headings %D postprocessing, as needed when we want to make those %D clickable. %D Right from the beginning, \CONTEXT\ supported more than one %D mark, using an extended version of Jim Fox multiple mark %D mechanism. In \ETEX\ we can however directly access more %D marks than we will ever need. %D Resetting marks in not compatible with the old method. %D Here a node is inserted, which can interfere badly. In %D fact, a real \type {\clearmarks\name} is needed. %D %D \starttyping %D \def\resetmark#1{\marks#1{}} %D \stoptyping %D %D A possible macro solution is presented here. When discussing %D \type {\clearmarks} on the \ETEX\ discussion list, Chris %D Rowley suggested to use a reset flag. Unfortunately this %D is not enough since we need to keep track of both set and %D reset state then. This means that we must postpone resetting %D to the page following the set, and as a result we need %D another auxiliary macro. The current solution is the best %D I could come up with so far, especially given that we %D need a fast mechanism. %D For those who want to know the story behind resetting %D marks, here are some examples of interference %D %D \startbuffer %D \setbox0=\vbox{test} %D \unvbox0\setbox0=\lastbox %D \ruledhbox{\unhbox0} %D \stopbuffer %D %D \typebuffer\blank\getbuffer\blank %D %D \startbuffer %D \setbox0=\vbox{test\normalmark{}} %D \unvbox0\setbox0=\lastbox %D \ruledhbox{\unhbox0} %D \stopbuffer %D %D \typebuffer\blank\getbuffer\blank %D %D \startbuffer %D \setbox0=\vbox{test\hbox{\normalmark{}}} %D \unvbox0\setbox0=\lastbox %D \ruledhbox{\unhbox0} %D \stopbuffer %D %D \typebuffer\blank\getbuffer\blank %D %D \startbuffer %D \setbox0=\vbox{test\vbox{\normalmark{}}} %D \unvbox0\setbox0=\lastbox %D \ruledhbox{\unhbox0} %D \stopbuffer %D %D \typebuffer\blank\getbuffer\blank %D One final advice. Use marks with care. When used in globally %D assigned boxes, the list can grow quite big, and processing %D can slow down considerably. This drawback is removed in %D \ETEX\ mode. \beginTEX \let\rawnewmark \newmark \let\rawdefinemark \newmark \let\rawsetmark \setmark \let\rawgettopmark \gettopmark \let\rawgetfirstmark \getfirstmark \let\rawgetbotmark \getbotmark \let\rawgetsplitbotmark \normalsplitbotmark \let\rawgetsplitfirstmark\normalsplitfirstmark \let\rawgetsplittopmark \normalsplitfirstmark \endTEX \beginETEX \let\rawnewmark \newmarks \let\rawdefinemark \newmarks \let\rawsetmark \normalmarks \let\rawgettopmark \normaltopmarks \let\rawgetfirstmark \normalfirstmarks \let\rawgetbotmark \normalbotmarks \let\rawgetsplitbotmark \normalsplitbotmarks \let\rawgetsplitfirstmark\normalsplitfirstmarks \let\rawgetsplittopmark \normalsplitfirstmarks \endETEX \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-lua.lua0000644000175000017500000000265112130411274024120 0ustar norbertnorbertif not modules then modules = { } end modules ['font-lua'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local report_lua = logs.reporter("fonts","lua loading") local fonts = fonts local readers = fonts.readers fonts.formats.lua = "lua" -- we could add support for features here local function check_lua(specification,fullname) -- standard tex file lookup local fullname = resolvers.findfile(fullname) or "" if fullname ~= "" then local loader = loadfile(fullname) loader = loader and loader() return loader and loader(specification) end end readers.check_lua = check_lua function readers.lua(specification) local original = specification.specification if trace_defining then report_lua("using lua reader for %a",original) end local fullname = specification.filename or "" if fullname == "" then local forced = specification.forced or "" if forced ~= "" then fullname = specification.name .. "." .. forced else fullname = specification.name end end return check_lua(specification,fullname) end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-goodies.mkiv0000644000175000017500000000244612161703335025610 0ustar norbertnorbert%D \module %D [ file=s-fonts-goodies, % s-fnt-26, s-fnt-28 %D version=2009.10.26, %D title=\CONTEXT\ Style File, %D subtitle=Goodies Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 More tables will follow here as we have many more goodies by now. \startmodule[s-fonts-goodies] \registerctxluafile{s-fonts-goodies}{} \installmodulecommandluasingle \showfontgoodiesstylistics {moduledata.fonts.goodies.showstylistics} \installmodulecommandluasingle \showfontgoodiesfeaturesets {moduledata.fonts.goodies.showfeaturesets} \installmodulecommandluasingle \showfontgoodiescolorschemes {moduledata.fonts.goodies.showcolorschemes} \installmodulecommandluasingle \showfontgoodiesfiles {moduledata.fonts.goodies.showfiles} \stopmodule \continueifinputfile{s-fonts-goodies.mkiv} \starttext \showfontgoodiesstylistics [name=husayni] \page \showfontgoodiesfeaturesets [name=husayni] \page \showfontgoodiescolorschemes[name=husayni] \page \showfontgoodiesfiles [name=antykwapoltawskiego] \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-pat.mkii0000644000175000017500000001015311754241457024327 0ustar norbertnorbert%D \module %D [ file=supp-pat, %D version=2005.02.12, %D title=\CONTEXT\ Support Macros, %D subtitle=Patterns, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We support: %D %D \starttyping %D \patterns { %D ...[namedglyphs]... %D } %D \stoptyping %D %D as well as: %D %D \starttyping %D %D ...&namedglyphs;... %D %D \stoptyping %D %D The \XML\ variant has very limited \XML\ parsing capabilities and %D is meant as an experiment. \ifx\writestatus\undefined \else \writestatus{loading}{ConTeXt Support Macros / Patterns} \fi %D \CONTEXT: \ifx\startmapping\undefined \else \ifx\startencoding\undefined \else \def\fetchpatterntoken#1{\csname#1\endcsname} \fi \fi %D First we define the \ETEX\ variant. We cannot do that inside %D the if statement because normal \TEX\ gets confused over the %D csname test (which it does not see as if but it does see the %D else's and fi's). \def\etexfetchpatterntoken#1% {\csname \ifcsname @pattok@#1\endcsname @pattok@#1% \else\ifcsname#1\endcsname #1% \else @pattok@default% \fi\fi \endcsname} \ifx \fetchpatterntoken \undefined \ifx \eTeXversion \undefined \def\fetchpatterntoken#1% {\csname \expandafter\ifx\csname @pattok@#1\endcsname\relax \expandafter\ifx\csname#1\endcsname\relax @pattok@default% \else #1% \fi \else @pattok@#1% \fi \endcsname} \else \let\fetchpatterntoken\etexfetchpatterntoken \fi \fi \def\definepatterntoken #1 #2 % {\expandafter\def\csname @pattok@#1\endcsname{#2}} %D \TEX\ based: \bgroup \catcode`\[=\active \gdef\enablepatterntokens {\catcode`\[=\active \let[\handlepatterntoken} \egroup \def\handlepatterntoken#1]% {\fetchpatterntoken{#1}} %D \XML\ based: \bgroup \catcode`\<=\active \catcode`\&=\active \gdef\enablepatternxml {\catcode`\<=\active \catcode`\&=\active \let&\handlepatternentity \let<\handlepatternxml} \egroup \def\handlepatternentity#1;% {\fetchpatterntoken{#1}} %D We use a very simple \XML\ parser, and we only trigger on the first %D two characters of the tag name. Consider this feature a playground %D (and a bit of a joke). \def\handlepatternxml#1#2% we only distinguish the first two chars {\csname @patxml@\ifcsname @patxml@#1#2\endcsname#1#2\else de\fi\endcsname} \def\definepatternxml #1#2#3 #4% {\expandafter\def\csname @patxml@#1#2\endcsname{#4}} \def\fetchpatternxml#1#2>% {\bgroup \long\def\next##1>{\egroup}% \catcode`\<=2 % \@@endgroup \afterassignment\next #1\bgroup} \def\gobblepatternxml {\bgroup \catcode`\%=11 \dogobblepatternxml} \long\def\dogobblepatternxml#1>% {\egroup} %D Here are the default definitions. We don't catch empty elements. \definepatternxml patterns {\fetchpatternxml\patterns} \definepatternxml hyphenations {\fetchpatternxml\hyphenation} \definepatternxml pattern {\fetchpatternxml\patterns} \definepatternxml hyphenation {\fetchpatternxml\hyphenation} \definepatternxml default {\gobblepatternxml} \definepatterntoken default x \ifx\pattern \undefined \let\pattern \patterns \fi \ifx\hyphenations\undefined \let\hyphenations\hyphenation \fi %D An example of usage in another format than \CONTEXT: %D %D \starttyping %D \bgroup %D %D \lccode"E4="E4 \definepatterntoken adiaeresis ^^e4 %D \lccode"F6="F6 \definepatterntoken odiaeresis ^^f6 %D \lccode"FC="FC \definepatterntoken ediaeresis ^^fc %D \lccode"FF="FF \definepatterntoken ssharp ^^ff %D %D \enablepatterntokens %D \enablepatternxml %D %D \input lang-de.pat %D \input lang-de.hyp %D %D \egroup %D \stoptyping %D %D This is a minimal example for EC encoding, and of course %D a couple of more language related settings need to take %D place (like uc mappings). \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-xtb.mkvi0000644000175000017500000006052712161703335024311 0ustar norbertnorbert% macros=mkvi %D \module %D [ file=tabl-xtb, %D version=2011.10.26, %D title=\CONTEXT\ Table Macros, %D subtitle=Xtreme, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Xtreme} \registerctxluafile{tabl-xtb}{1.001} % todo: % % - yes or no: foregroundstyle/color <- style/color % - template alignment % - maybe split horizontal (a la linetables) % - before/after and wrapping (linecorrection) % - maybe also some before/after commands % - maybe correction when non float usage % - tagging needs to be checked % - maybe only tag the box % - scale to fit % %D This module started as an afternoon experiment and surprisingly could be %D mostly finished the same evening. Of course it builds upon existing %D functionality. The main reason for writing it is that we occasionally %D run into pretty large tables that take tens of pages and need to be split %D into floats. Speed is one issue there, avoiding to use vsplit is another. %D %D \starttyping %D \definextable [tag] | [tag][parent] %D \setupxtable [settings] | [tag][settings] %D %D \startxtable[tag|settings] %D \startxtablehead|\startxtablenext|\startxtablebody|\startxtablefoot %D \startxrowgroup[tag|settings] %D \startxrow[settings] %D \startxcellgroup[tag|settings] %D \startxcell[settings] ... \stopxcell %D \stopxcellgroup %D \stopxrow %D \startxrowgroup %D \stopxtablehead|\stopxtablenext|\stopxtablebody|\stopxtablefoot %D \stopxtable %D \stoptyping %D %D See xtables-001.tex etc for some examples. % We can avoid some checking by using the fastoptionalcheckcs helpers % instead of dosingleempty but the speed gain is neglectable. \unprotect % option=stretch : equal distribution % option={stretch,width} : proportional distribution % option={max} : prefer max over forced width/height % % cells: option=fixed : nils autostretch (not yet complete) % \setbox\scratchbox\hbox attr \taggedattribute \attribute\taggedattribute {...} % % \let\tsplitbeforeresult\donothing % \let\tsplitafterresult \donothing % \let\tsplitinbetween \donothing % \let\tsplitbefore \donothing % \let\tsplitafter \donothing % \let\postprocesstsplit \donothing \let\dotagxtablecell \relax % names will change \let\dotagxtablesignal\relax % names will change \appendtoks \def\dotagxtablecell {\taggedctxcommand{settagtablecell(\number\tablecellrows,\number\tablecellcolumns,\number\raggedstatus)}}% \def\dotagxtablesignal{\char\zerocount}% not used \to \everyenableelements \newdimen\d_tabl_x_width \newdimen\d_tabl_x_height \newdimen\d_tabl_x_depth % not used \newdimen\d_tabl_x_distance \newcount\c_tabl_x_nx \newcount\c_tabl_x_ny \newcount\c_tabl_x_mode \newbox \b_tabl_x \newcount\c_tabl_x_state % 0=empty 1=content 3=splitleft \newdimen\d_tabl_x_final_width \newcount\c_tabl_x_nesting \newcount\c_tabl_x_skip_mode % 1 = skip \newdimen\d_tabl_x_textwidth % \setupxtable[one][parent][a=b,c=d] % \setupxtable[one] [a=b,c=d] % \setupxtable [a=b,c=d] \installcorenamespace{xtable} \installcorenamespace{xtablecheck} \installframedautocommandhandler \??xtable {xtable} \??xtable \appendtoks \checkxtableparent % so we can deal with undefined settings, not that it's efficient \to \everysetupxtable \setupxtable[% \c!nr=\plusone, \c!nc=\plusone, \c!nx=\plusone, % slow \c!ny=\plusone, % slow \c!align=\v!table, % {\v!flushleft,\v!broad,\v!high}, % just as \bTABLE .. \eTABLE \c!frameoffset=.5\linewidth, \c!backgroundoffset=\v!frame, % \c!framecolor=\s!black, % \c!foregroundstyle=\xtableparameter\c!style, % not clean, better capture elsewhere % \c!foregroundcolor=\xtableparameter\c!color, % not clean, better capture elsewhere % \c!bodyfont=, \c!width=\v!fit, \c!height=\v!fit, \c!maxwidth=8\emwidth, \c!autowidth=\v!yes, % controls framed \c!rulethickness=\linewidth, \c!strut=\v!yes, \c!autostrut=\v!no, \c!split=\v!auto, % a number will take that many lines \c!splitoffset=\zeropoint, % extra space taken % \c!aligncharacter=\v!no, % \c!alignmentcharacter={,}, % \c!option=, % \v!stretch {\v!stretch,\v!width} % \c!footer=, % \c!header=, \c!spaceinbetween=, \c!textwidth=\v!local, % was \hsize, \c!textheight=\vsize, % used for vertical spread \c!distance=\zeropoint, % individual column \c!columndistance=\zeropoint, % each column (whole table) \c!leftmargindistance=\zeropoint, % whole table \c!rightmargindistance=\zeropoint,% whole table ] \unexpanded\def\startxtable {\dosingleempty\tabl_x_start_table} \let\stopxtable\relax \def\tabl_x_default_buffer{x_table_\number\c_tabl_x_nesting} \unexpanded\def\tabl_x_start_table[#settings]% maybe two arguments: [tag][settings] | [tag] | [settings] {\bgroup \tabl_x_prepare{#settings}% \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% \buff_pickup{\tabl_x_current_buffer}{startxtable}{stopxtable}\relax\tabl_x_process} \unexpanded\def\processxtablebuffer {\dosingleempty\tabl_x_process_buffer_directly} % These direct buffers can be somewhat faster but it's probably neglectable. % Anyway, no nesting is supported as we then need to catch (e.g.) rows and % keep track of nesting and have a more complex redefinition of nested % instanced \unknown\ it's not worth the trouble. Only use them when you % really need them and use the embeddedxtable command when nesting them. % Implementing nesting would be slower than not using direct buffers. \unexpanded\def\tabl_x_process_buffer_directly[#name]% {\bgroup \let\tabl_x_start_table\tabl_x_process_buffer \edef\tabl_x_current_buffer{#name}% \tabl_x_get_buffer % pickup settings \tabl_x_process} \unexpanded\def\tabl_x_start_ignore[#settings]% {} \unexpanded\def\tabl_x_process_buffer[#settings]% {\tabl_x_prepare{#settings}% \let\tabl_x_start_table\tabl_x_start_ignore \gobbleuntil\stopxtable} % nested xtables are not supported, %D A bonus: you have to use the following construct inside a macro or %D direct buffer. \unexpanded\def\startembeddedxtable {\dosingleempty\tabl_x_embedded_start} \unexpanded\def\tabl_x_embedded_start[#settings]#content\stopembeddedxtable {\tabl_x_prepare{#settings}% \ctxcommand{assignbuffer("embedded_x_table",\!!bs\detokenize{#content}\!!es)}% \bgroup \let\tabl_x_start_table\tabl_x_process_buffer \edef\tabl_x_current_buffer{embedded_x_table}% \tabl_x_process} \let\stopembeddedxtable\relax %D We can also define xtables. \appendtoks \setuevalue{\e!start\currentxtable}{\tabl_x_start_named{\currentxtable}}% \setuevalue{\e!stop \currentxtable}{\tabl_x_stop_named}% \to \everydefinextable \unexpanded\def\tabl_x_start_named#tag% {\bgroup \edef\currentxtable{#tag}% \dosingleempty\tabl_x_start_named_indeed} \unexpanded\def\tabl_x_start_named_indeed[#settings]% {\advance\c_tabl_x_nesting\plusone \dostarttagged\t!table\empty \iffirstargument \setupcurrentxtable[#settings]% \fi \tabl_x_check_textwidth \forgetall \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% \normalexpanded{\buff_pickup{\tabl_x_current_buffer}{\e!start\currentxtable}{\e!stop\currentxtable}\relax\tabl_x_process}} \unexpanded\def\tabl_x_stop_named {} %D Now we come to processing: \unexpanded\def\tabl_x_check_textwidth {\edef\p_textwidth{\xtableparameter\c!textwidth}% \ifx\p_textwidth\v!local \d_tabl_x_textwidth\availablehsize \else \d_tabl_x_textwidth\p_textwidth \fi} \unexpanded\def\tabl_x_prepare#settings% assumes \iffirstargument to be set {\advance\c_tabl_x_nesting\plusone \dostarttagged\t!table\empty \iffirstargument \tabl_x_set_checked{#settings}% \fi \tabl_x_check_textwidth \forgetall} \def\tabl_x_get_buffer {\ctxcommand{gettexbuffer("\tabl_x_current_buffer")}} \let\tabl_x_start_row_yes \relax \let\tabl_x_start_row_nop \relax \let\tabl_x_stop_row \relax \let\tabl_x_start_cell_yes\relax \let\tabl_x_start_cell_nop\relax \let\tabl_x_stop_cell \relax \unexpanded\def\tabl_x_process {\begingroup % * \doifsomething{\xtableparameter\c!bodyfont} {\setupbodyfont[\xtableparameter\c!bodyfont]}% \setbox\scratchbox\vbox {\xtableparameter\c!spaceinbetween}% \ctxcommand{x_table_create { option = "\xtableparameter\c!option", textwidth = \number\d_tabl_x_textwidth, textheight = \number\dimexpr\xtableparameter\c!textheight, maxwidth = \number\dimexpr\xtableparameter\c!maxwidth, lineheight = \number\openlineheight, columndistance = \number\dimexpr\xtableparameter\c!columndistance, leftmargindistance = \number\dimexpr\xtableparameter\c!leftmargindistance, rightmargindistance = \number\dimexpr\xtableparameter\c!rightmargindistance, rowdistance = \number\ht\scratchbox, header = "\xtableparameter\c!header", footer = "\xtableparameter\c!footer", } }% % \letxtableparameter\c!option\empty % not so nice but needed as we use this in the setup \linewidth\xtableparameter\c!rulethickness\relax % so we freeze it \begingroup \let\tabl_x_start_row_yes \tabl_x_start_row_reflow_width_yes \let\tabl_x_start_row_nop \tabl_x_start_row_reflow_width_nop \let\tabl_x_stop_row \tabl_x_stop_row_reflow_width \let\tabl_x_start_cell_yes\tabl_x_start_cell_reflow_width_yes \let\tabl_x_start_cell_nop\tabl_x_start_cell_reflow_width_nop \let\tabl_x_stop_cell \tabl_x_stop_cell_reflow_width \settrialtypesetting \tabl_x_get_buffer \ctxcommand{x_table_reflow_width()}\relax \endgroup \begingroup \let\tabl_x_start_row_yes \tabl_x_start_row_reflow_height_yes \let\tabl_x_start_row_nop \tabl_x_start_row_reflow_height_nop \let\tabl_x_stop_row \tabl_x_stop_row_reflow_height \let\tabl_x_start_cell_yes\tabl_x_start_cell_reflow_height_yes \let\tabl_x_start_cell_nop\tabl_x_start_cell_reflow_height_nop \let\tabl_x_stop_cell \tabl_x_stop_cell_reflow_height \settrialtypesetting \tabl_x_get_buffer \ctxcommand{x_table_reflow_height()}\relax \endgroup \begingroup \let\tabl_x_start_row_yes \tabl_x_start_row_construct_yes \let\tabl_x_start_row_nop \tabl_x_start_row_construct_nop \let\tabl_x_stop_row \tabl_x_stop_row_construct \let\tabl_x_start_cell_yes\tabl_x_start_cell_construct_yes \let\tabl_x_start_cell_nop\tabl_x_start_cell_construct_nop \let\tabl_x_stop_cell \tabl_x_stop_cell_construct \tabl_x_get_buffer \ctxcommand{x_table_construct()}\relax \endgroup \endgroup % * \ifinsidesplitfloat \tabl_x_flush_float_split \else\ifinsidefloat \tabl_x_flush_float_normal \else \tabl_x_flush_text_checked \fi\fi \ctxcommand{x_table_cleanup()}% \dostoptagged \resetbuffer[\tabl_x_current_buffer]% \egroup} % text flow split modes \installcorenamespace{xtableflushsplit} \unexpanded\def\tabl_x_flush_text_checked {\expandnamespaceparameter\??xtableflushsplit\xtableparameter\c!split\v!no} % in text flow: headers and footers only once \setvalue{\??xtableflushsplit\v!yes}% {\ctxcommand{x_table_flush{ method = "\v!split" }}} % in text flow: headers and footers only once \setvalue{\??xtableflushsplit\v!no}% {\dontleavehmode % else no leftskip etc \ctxcommand{x_table_flush{ method = "\v!normal" }}} % in text flow: headers and footers get repeated \setvalue{\??xtableflushsplit\v!repeat}% {\doloop {\ctxcommand{x_table_flush{ method = "\v!split", vsize = \number\ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi }}% \ifcase\c_tabl_x_state \exitloop \else \page \fi}} % \setvalue{\??xtableflushsplit\v!setups}% % {\directsetup{xtable:split:user}} % % \startsetups[xtable:split:user] % \doloop { % \xtablesplitflush % uses \xtablesplitvsize (a macro) % \ifcase\xtablesplitstate % \exitloop % \else % \page % \fi % } % \stopsetups % % \unexpanded\def\xtablesplitflush % {\ctxcommand{x_table_flush{ method = "\v!split", vsize = \number\dimexpr\xtablesplitvsize\relax}}\relax} % % \def\xtablesplitvsize % {\ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi} % % \let\xtablesplitstate\c_tabl_x_state \let\extratxtablesplitheight\zeropoint % might disappear so don't depend on it \unexpanded\def\tabl_x_flush_float_normal {\ctxcommand{x_table_flush{ method = "\v!normal" }}} \unexpanded\def\tabl_x_flush_float_split {\resetdirecttsplit \edef\extrasplitfloatlines {\xtableparameter\c!split}% \edef\tsplitminimumfreespace{\the\dimexpr\extratxtablesplitheight+\xtableparameter\c!splitoffset\relax}% % \edef\tsplitminimumfreelines{2}% not needed here as we're precise enough \let\tsplitdirectsplitter\tabl_x_split_splitter \let\tsplitdirectwidth \d_tabl_x_final_width \handledirecttsplit} \unexpanded\def\tabl_x_split_splitter#vsize% {\setbox\tsplitresult\vbox {\ctxcommand{x_table_flush{ method = "\v!split", vsize = \number\dimexpr#vsize }}}% \ifcase\c_tabl_x_state \global\setfalse\somenextsplitofffloat \else \global\settrue \somenextsplitofffloat \fi} \unexpanded\def\startxrow {\begingroup \doifnextoptionalelse\tabl_x_start_row_yes\tabl_x_start_row_nop} \unexpanded\def\tabl_x_start_row_reflow_width_yes[#settings]% {\setupcurrentxtable[#settings]% \ctxcommand{x_table_next_row()}} \unexpanded\def\tabl_x_start_row_reflow_width_nop {\ctxcommand{x_table_next_row()}} \unexpanded\def\tabl_x_stop_row_reflow_width {} \let\tabl_x_start_row_reflow_height_yes\tabl_x_start_row_reflow_width_yes \let\tabl_x_start_row_reflow_height_nop\tabl_x_start_row_reflow_width_nop \let\tabl_x_stop_row_reflow_height \tabl_x_stop_row_reflow_width \unexpanded\def\tabl_x_start_row_construct_yes[#settings]% {\setupcurrentxtable[#settings]% \dostarttagged\t!tablerow\empty \ctxcommand{x_table_next_row()}} \unexpanded\def\tabl_x_start_row_construct_nop {\dostarttagged\t!tablerow\empty \ctxcommand{x_table_next_row()}} \unexpanded\def\tabl_x_stop_row_construct {\dostoptagged} \unexpanded\def\stopxrow {\tabl_x_stop_row \endgroup} \unexpanded\def\startxcell {\doifnextoptionalelse\tabl_x_start_cell_yes\tabl_x_start_cell_nop} \unexpanded\def\stopxcell {\tabl_x_stop_cell} \unexpanded\def\tabl_x_begin_of_cell {\inhibitblank \everypar{\delayedbegstrut}} \unexpanded\def\tabl_x_end_of_cell {\ifhmode \delayedendstrut \par \else \par \ifdim\prevdepth<\zeropoint % =-1000pt ? \vskip-\strutdp \else \removebottomthings \fi \fi} % For historic reasons we support both nx/nc and ny/nr : maybe nx/ny becomes % obsolete some day. The let as well as the direct speed things up a bit. We % could also consider a \defaultxtableparameter. % % \c_tabl_x_nx\defaultxtableparameter\c!nc{\defaultxtableparameter\c!nx\plusone} % \c_tabl_x_ny\defaultxtableparameter\c!nr{\defaultxtableparameter\c!ny\plusone} % % Although this becomes kind of messy. It saves already time that we only check % for it when we have settings. \def\tabl_x_set_hsize {\hsize.25\maxdimen} % let's be reasonable \unexpanded\def\tabl_x_start_cell_reflow_width_yes[#settings]% {\setbox\b_tabl_x\hbox\bgroup \ifnum\c_tabl_x_nesting>\plusone \letxtableparameter\c!width \v!fit % overloads given width \letxtableparameter\c!height\v!fit % overloads given height \fi % \letxtableparameter\c!nx\plusone \letxtableparameter\c!ny\plusone \letxtableparameter\c!nc\plusone \letxtableparameter\c!nr\plusone % \setupcurrentxtable[#settings]% % \c_tabl_x_nx\directxtableparameter\c!nc\relax \c_tabl_x_ny\directxtableparameter\c!nr\relax \ifnum\c_tabl_x_nx=\plusone \c_tabl_x_nx\directxtableparameter\c!nx\relax \fi \ifnum\c_tabl_x_ny=\plusone \c_tabl_x_ny\directxtableparameter\c!ny\relax \fi % \d_tabl_x_distance\xtableparameter\c!distance\relax \ctxcommand{x_table_init_reflow_width("\xtableparameter\c!option")}% \inheritedxtableframed\bgroup \tabl_x_begin_of_cell \tabl_x_set_hsize} \unexpanded\def\tabl_x_start_cell_reflow_width_nop {\setbox\b_tabl_x\hbox\bgroup \ifnum\c_tabl_x_nesting>\plusone \letxtableparameter\c!width \v!fit % overloads given width \letxtableparameter\c!height\v!fit % overloads given height \fi \c_tabl_x_nx\plusone \c_tabl_x_ny\plusone \d_tabl_x_distance\xtableparameter\c!distance\relax \ctxcommand{x_table_init_reflow_width()}% \inheritedxtableframed\bgroup \tabl_x_begin_of_cell \tabl_x_set_hsize} \unexpanded\def\tabl_x_stop_cell_reflow_width {\tabl_x_end_of_cell \egroup \egroup \ctxcommand{x_table_set_reflow_width()}} \unexpanded\def\tabl_x_start_cell_reflow_height_yes[#settings]% {\setbox\b_tabl_x\hbox\bgroup \ctxcommand{x_table_init_reflow_height()}% \ifcase\c_tabl_x_skip_mode % can be sped up \ifnum\c_tabl_x_nesting>\plusone \letxtableparameter\c!height\v!fit % overloads given height \fi \setupcurrentxtable[#settings]% \relax \letxtableparameter\c!width\d_tabl_x_width % overloads given width \inheritedxtableframed\bgroup \tabl_x_begin_of_cell \fi} \unexpanded\def\tabl_x_start_cell_reflow_height_nop {\setbox\b_tabl_x\hbox\bgroup \ctxcommand{x_table_init_reflow_height()}% \ifcase\c_tabl_x_skip_mode % can be sped up \ifnum\c_tabl_x_nesting>\plusone \letxtableparameter\c!height\v!fit % overloads given height \fi \relax \letxtableparameter\c!width\d_tabl_x_width % overloads given width \inheritedxtableframed\bgroup \tabl_x_begin_of_cell \fi} \unexpanded\def\tabl_x_stop_cell_reflow_height {\ifcase\c_tabl_x_skip_mode \tabl_x_end_of_cell \egroup \fi \egroup \ctxcommand{x_table_set_reflow_height()}} \unexpanded\def\tabl_x_start_cell_construct_yes[#settings]% {\dostarttagged\t!tablecell\empty % can't we just tag the box \setbox\b_tabl_x\hbox\bgroup \setupcurrentxtable[#settings]% \letxtableparameter\c!width \d_tabl_x_width % overloads given width \letxtableparameter\c!height\d_tabl_x_height % overloads given height \ctxcommand{x_table_init_construct()}% \inheritedxtableframed\bgroup \tabl_x_begin_of_cell \dotagxtablecell} \unexpanded\def\tabl_x_start_cell_construct_nop {\dostarttagged\t!tablecell\empty % can't we just tag the box \setbox\b_tabl_x\hbox\bgroup \letxtableparameter\c!width \d_tabl_x_width % overloads given width \letxtableparameter\c!height\d_tabl_x_height % overloads given height \ctxcommand{x_table_init_construct()}% \inheritedxtableframed\bgroup \tabl_x_begin_of_cell \dotagxtablecell} \unexpanded\def\tabl_x_stop_cell_construct {\tabl_x_end_of_cell \egroup \dotagxtablesignal % harmless spot \egroup \ctxcommand{x_table_set_construct()}% \dostoptagged} \unexpanded\def\startxcellgroup {\begingroup \dosingleempty\tabl_x_start_cell_group} \unexpanded\def\stopxcellgroup {\endgroup} \unexpanded\def\tabl_x_start_cell_group[#settings]% {\iffirstargument \tabl_x_set_checked{#settings}% \fi} \unexpanded\def\startxrowgroup {\begingroup \dosingleempty\tabl_x_start_row_group} \unexpanded\def\stopxrowgroup {\dostoptagged \endgroup} \unexpanded\def\tabl_x_start_row_group[#settings]% {\iffirstargument \tabl_x_set_checked{#settings}% \fi} % \def\tabl_x_set_checked#settings % {\doifassignmentelse{#settings} % {\setupcurrentxtable[#settings]} % {\ifcsname\namedxtablehash{#settings}\s!parent\endcsname % \edef\currentxtable{#settings}% % \fi}} \unexpanded\def\tabl_x_set_checked#settings% {\ifcsname\namedxtablehash{#settings}\s!parent\endcsname \edef\currentxtable{#settings}% \else \setupcurrentxtable[#settings]% \fi} \unexpanded\def\startxtablehead{\begingroup\c_tabl_x_mode\plusone \dosingleempty\tabl_x_start_partition} \unexpanded\def\startxtablefoot{\begingroup\c_tabl_x_mode\plustwo \dosingleempty\tabl_x_start_partition} \unexpanded\def\startxtablenext{\begingroup\c_tabl_x_mode\plusthree\dosingleempty\tabl_x_start_partition} \unexpanded\def\startxtablebody{\begingroup\c_tabl_x_mode\plusfour \dosingleempty\tabl_x_start_partition} \unexpanded\def\tabl_x_start_partition[#settings]% {\iffirstargument \tabl_x_set_checked{#settings}% \fi} \unexpanded\def\tabl_x_stop_partition {\endgroup} \let\stopxtablehead\tabl_x_stop_partition \let\stopxtablefoot\tabl_x_stop_partition \let\stopxtablenext\tabl_x_stop_partition \let\stopxtablebody\tabl_x_stop_partition %D This is an experiment! Beware: you can create loops by using nested %D references to already chained settings. %D %D \startbuffer %D \setupxtable[suffix][align=middle,foregroundcolor=red] %D \setupxtable[blabla][foregroundstyle=slanted] %D \setupxtable[crap] [foregroundcolor=blue] %D \setupxtable[bold] [crap][foregroundstyle=bold] %D %D \startxtable[frame=off] %D \startxtablehead %D \startxrow[bold] %D \startxcell[suffix] a 0 \stopxcell %D \startxcell[blabla] a 1 \stopxcell %D \startxcell a 2 \stopxcell %D \stopxrow %D \stopxtablehead %D \startxtablebody %D \startxrow \startxcell[suffix][ny=2] a 1 \stopxcell \startxcell b 1 \stopxcell \startxcell c 1 \stopxcell \stopxrow %D \startxrow \startxcell b 2 \stopxcell \startxcell c 2 \stopxcell \stopxrow %D \startxrow \startxcell[suffix] a 3 \stopxcell \startxcell b 3 \stopxcell \startxcell c 3 \stopxcell \stopxrow %D \startxrow \startxcell[suffix] a 4 \stopxcell \startxcell b 4 \stopxcell \startxcell c 4 \stopxcell \stopxrow %D \startxrow \startxcell[suffix] a 5 \stopxcell \startxcell b 5 \stopxcell \startxcell c 5 \stopxcell \stopxrow %D \stopxtablebody %D \stopxtable %D \stopbuffer %D %D \typebuffer \placetable{}{\getbuffer} \appendtoks \letvalue{\??xtablecheck\currentxtable}\relax % faster than checking parent \to \everysetupxtable % groups \unexpanded\def\startxgroup {\begingroup \doifnextoptionalelse\tabl_x_start_group_delayed_one\relax} \unexpanded\def\stopxgroup {\endgroup} \unexpanded\def\tabl_x_start_group_delayed_one[#tag]% % {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname {\ifcsname\??xtablecheck#tag\endcsname \expandafter\tabl_x_start_group_delayed_two \else \expandafter\setupcurrentxtable \fi[#tag]} \unexpanded\def\tabl_x_start_group_delayed_two[#tag]% {\ifx\currentxtable\empty \else \chaintocurrentxtable{#tag}% \fi \edef\currentxtable{#tag}% \doifnextoptionalelse\setupcurrentxtable\relax} \let\startxrowgroup \startxgroup \let\stopxrowgroup \stopxgroup \let\startxcellgroup\startxgroup \let\stopxcellgroup \stopxgroup % cells (maybe also check for 1 etc but it becomes messy) \unexpanded\def\startxcell {\begingroup \doifnextoptionalelse\tabl_x_start_cell_delayed_one\tabl_x_start_cell_nop} \unexpanded\def\tabl_x_start_cell_delayed_one[#tag]% % {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname {\ifcsname\??xtablecheck#tag\endcsname \expandafter\tabl_x_start_cell_delayed_two \else \expandafter\tabl_x_start_cell_yes \fi[#tag]} \unexpanded\def\tabl_x_start_cell_delayed_two[#tag]% {\ifx\currentxtable\empty \else \chaintocurrentxtable{#tag}% \fi \edef\currentxtable{#tag}% \doifnextoptionalelse\tabl_x_start_cell_yes\tabl_x_start_cell_nop} \unexpanded\def\stopxcell {\tabl_x_stop_cell \endgroup} % rows \unexpanded\def\startxrow {\begingroup \doifnextoptionalelse\tabl_x_start_row_delayed_one\tabl_x_start_row_nop} \unexpanded\def\tabl_x_start_row_delayed_one[#tag]% % {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname {\ifcsname\??xtablecheck#tag\endcsname \expandafter\tabl_x_start_row_delayed_two \else \expandafter\tabl_x_start_row_yes \fi[#tag]} \unexpanded\def\tabl_x_start_row_delayed_two[#tag]% {\ifx\currentxtable\empty \else \chaintocurrentxtable{#tag}% \fi \edef\currentxtable{#tag}% \doifnextoptionalelse\tabl_x_start_row_yes\tabl_x_start_row_nop} \unexpanded\def\stopxrow {\tabl_x_stop_row \endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/prop-mis.mkii0000644000175000017500000001267211754241457024334 0ustar norbertnorbert%D \module %D [ file=prop-mis, %D version=2004.05.29, % some code moved from private modules %D title=\CONTEXT\ Property Macros, %D subtitle=Miscelaneous, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Property Macros / Miscelaneous} %D This module contains some code that has been in use in some %D private modules (p-*). These features depend on the fact %D that pdftex writes the page content as one stream. %D EXPERIMENTAL \unprotect %D Stream based overprint and knockout: \defineproperty[\v!overprint][\s!overprint] [\c!method=\v!command] \defineproperty[\v!knockout] [\s!overprint] [\c!method=\v!command] %D Negation. \defineproperty [\v!negative] [\s!negative] [\c!method=\v!command] \defineproperty [\v!positive] [\s!negative] [\c!method=\v!command] %D Special font effects. \setupproperty [\s!effect] [\c!rulethickness=\zeropoint, \c!stretch=0] \defineproperty [\v!inner] [\s!effect] [\c!rulethickness=.25pt] \defineproperty [\v!outer] [\s!effect] [\c!rulethickness=.25pt] \defineproperty [\v!both] [\s!effect] [\c!rulethickness=.25pt] \defineproperty [\v!normal] [\s!effect] \defineproperty [\v!hidden] [\s!effect] \defineproperty [\v!stretch] [\s!effect] [\c!stretch=1] %D Overprint cum suis. \definepropertyhandler \v!overprint {\dostartoverprint} \definepropertyhandler \v!knockout {\dostopoverprint } \def\startoverprintproperty {\ifincolor \propertyhandler\currentproperty \dooverprintmark\currentproperty \fi} \def\stopoverprintproperty {\ifincolor \ifcase\currentpropertylevel\or \dostopoverprint \dooverprintmark\empty \else \propertyhandler\previousproperty \dooverprintmark\previousproperty \fi \fi} \rawnewmark\overprintmark \def\dooverprintmark#1% {\ifinpagebody \else \ifinframed \else \expanded{\rawsetmark\noexpand\overprintmark{#1}}% \fi \fi} \def\pushoverprintproperty {\doifsomething{\rawgetbotmark\overprintmark}\dostopoverprint} \def\popoverprintproperty {\doifsomething{\rawgetbotmark\overprintmark}% {\propertyhandler{\rawgetbotmark\overprintmark}}} \def\popsplitoverprintproperty {\getsplitmarks\overprintmark % hier wel \doifsomething{\rawgetsplitbotmark\overprintmark}% {\propertyhandler{\rawgetsplitbotmark\overprintmark}}} \appendtoks \pushoverprintproperty \to \everypushproperties \appendtoks \popoverprintproperty \to \everypopproperties \appendtoks \popsplitoverprintproperty \to \everypopsplitproperties %D Negative cum suis. \definepropertyhandler \v!negative {\dostartnegative} \definepropertyhandler \v!positive {\dostopnegative } \def\startnegativeproperty {\ifincolor \propertyhandler\currentproperty \donegativemark\currentproperty \fi} \def\stopnegativeproperty {\ifincolor \ifcase\currentpropertylevel\or \dostopnegative \donegativemark\empty \else \propertyhandler\previousproperty \donegativemark\previousproperty \fi \fi} \rawnewmark\negativemark \def\donegativemark#1% {\ifinpagebody \else \ifinframed \else \expanded{\rawsetmark\noexpand\negativemark{#1}}% \fi \fi} \def\pushnegativeproperty {\doifsomething{\rawgetbotmark\negativemark}\dostopnegative} \def\popnegativeproperty {\doifsomething{\rawgetbotmark\overprintmark}% {\propertyhandler{\rawgetbotmark\negativemark}}} \def\popsplitnegativeproperty {\getsplitmarks\negativemark % hier wel \doifsomething{\rawgetsplitbotmark\negativemark}% {\propertyhandler{\rawgetsplitbotmark\negativemark}}} \appendtoks \pushnegativeproperty \to \everypushproperties \appendtoks \popnegativeproperty \to \everypopproperties \appendtoks \popsplitnegativeproperty \to \everypopsplitproperties %D Effects. \definepropertyhandler \v!normal {0} \definepropertyhandler \v!inner {0} \definepropertyhandler \v!outer {1} \definepropertyhandler \v!both {2} \definepropertyhandler \v!hidden {3} \definepropertyhandler \v!stretch{0} \def\effectpropertydata#1% {{\propertyhandler{#1}}% {\propertyparameter{#1}\c!rulethickness}% {\propertyparameter{#1}\c!stretch}} \def\starteffectproperty {\expanded{\dostartfonteffect\effectpropertydata\currentproperty}% \doeffectmark{\effectpropertydata\currentproperty}} \def\stopeffectproperty {\dostopfonteffect \ifcase\currentpropertylevel\or \doeffectmark\empty \else \expanded{\dostartfonteffect\effectpropertydata\previousproperty}% \doeffectmark{\effectpropertydata\previousproperty}% \fi} \rawnewmark\effectmark \def\doeffectmark#1% {\ifinpagebody \else \ifinframed \else \expanded{\rawsetmark\noexpand\effectmark{#1}}% could be number \fi \fi} \def\pusheffectproperty {\doifsomething{\rawgetbotmark\effectmark}\dostopfonteffect} \def\popeffectproperty {\doifsomething{\rawgetbotmark\effectmark}% {\expanded{\dostartfonteffect\rawgetbotmark\effectmark}}} \def\popspliteffectproperty {\getsplitmarks\effectmark \doifsomething{\rawgetsplitbotmark\effectmark}% {\expanded{\dostartfonteffect\rawgetsplitbotmark\effectmark}}} \appendtoks \pusheffectproperty \to \everypushproperties \appendtoks \popeffectproperty \to \everypopproperties \appendtoks \popspliteffectproperty \to \everypopsplitproperties \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-tag.lua0000644000175000017500000002374212130411274024075 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-tag'] = { version = 1.001, comment = "companion to lpdf-tag.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, match, concat = string.format, string.match, table.concat local lpegmatch = lpeg.match local utfchar = utf.char local trace_tags = false trackers.register("structures.tags", function(v) trace_tags = v end) local report_tags = logs.reporter("backend","tags") local backends, lpdf, nodes = backends, lpdf, nodes local nodeinjections = backends.pdf.nodeinjections local codeinjections = backends.pdf.codeinjections local tasks = nodes.tasks local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfboolean = lpdf.boolean local pdfconstant = lpdf.constant local pdfreference = lpdf.reference local pdfunicode = lpdf.unicode local pdfstring = lpdf.string local pdfflushobject = lpdf.flushobject local pdfreserveobject = lpdf.reserveobject local pdfpagereference = lpdf.pagereference local nodepool = nodes.pool local pdfliteral = nodepool.pdfliteral local nodecodes = nodes.nodecodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glyph_code = nodecodes.glyph local a_tagged = attributes.private('tagged') local a_image = attributes.private('image') local traverse_nodes = node.traverse local traverse_id = node.traverse_id local tosequence = nodes.tosequence local copy_node = node.copy local slide_nodelist = node.slide local structure_stack = { } local structure_kids = pdfarray() local structure_ref = pdfreserveobject() local parent_ref = pdfreserveobject() local root = { pref = pdfreference(structure_ref), kids = structure_kids } local tree = { } local elements = { } local names = pdfarray() local taglist = structures.tags.taglist local usedlabels = structures.tags.labels local properties = structures.tags.properties local usedmapping = { } local colonsplitter = lpeg.splitat(":") local dashsplitter = lpeg.splitat("-") local add_ids = false -- true --~ function codeinjections.maptag(original,target,kind) --~ mapping[original] = { target, kind or "inline" } --~ end local function finishstructure() if #structure_kids > 0 then local nums, n = pdfarray(), 0 for i=1,#tree do n = n + 1 ; nums[n] = i-1 n = n + 1 ; nums[n] = pdfreference(pdfflushobject(tree[i])) end local parenttree = pdfdictionary { Nums = nums } -- we need to split names into smaller parts (e.g. alphabetic or so) if add_ids then local kids = pdfdictionary { Limits = pdfarray { names[1], names[#names-1] }, Names = names, } local idtree = pdfdictionary { Kids = pdfarray { pdfreference(pdfflushobject(kids)) }, } end -- local rolemap = pdfdictionary() for k, v in next, usedmapping do k = usedlabels[k] or k local p = properties[k] rolemap[k] = pdfconstant(p and p.pdf or "Span") -- or "Div" end local structuretree = pdfdictionary { Type = pdfconstant("StructTreeRoot"), K = pdfreference(pdfflushobject(structure_kids)), ParentTree = pdfreference(pdfflushobject(parent_ref,parenttree)), IDTree = (add_ids and pdfreference(pdfflushobject(idtree))) or nil, RoleMap = rolemap, } pdfflushobject(structure_ref,structuretree) lpdf.addtocatalog("StructTreeRoot",pdfreference(structure_ref)) -- local markinfo = pdfdictionary { Marked = pdfboolean(true), -- UserProperties = pdfboolean(true), -- Suspects = pdfboolean(true), } lpdf.addtocatalog("MarkInfo",pdfreference(pdfflushobject(markinfo))) -- for fulltag, element in next, elements do pdfflushobject(element.knum,element.kids) end end end lpdf.registerdocumentfinalizer(finishstructure,"document structure") local index, pageref, pagenum, list = 0, nil, 0, nil local pdf_mcr = pdfconstant("MCR") local pdf_struct_element = pdfconstant("StructElem") local function initializepage() index = 0 pagenum = tex.count.realpageno pageref = pdfreference(pdfpagereference(pagenum)) list = pdfarray() tree[pagenum] = list -- we can flush after done, todo end local function finishpage() -- flush what can be flushed lpdf.addtopageattributes("StructParents",pagenum-1) end -- here we can flush and free elements that are finished local function makeelement(fulltag,parent) local tag, n = lpegmatch(dashsplitter,fulltag) local tg, detail = lpegmatch(colonsplitter,tag) local k, r = pdfarray(), pdfreserveobject() usedmapping[tg] = true tg = usedlabels[tg] or tg local d = pdfdictionary { Type = pdf_struct_element, S = pdfconstant(tg), ID = (add_ids and fulltag) or nil, T = detail and detail or nil, P = parent.pref, Pg = pageref, K = pdfreference(r), -- Alt = " Who cares ", -- ActualText = " Hi Hans ", } local s = pdfreference(pdfflushobject(d)) if add_ids then names[#names+1] = fulltag names[#names+1] = s end local kids = parent.kids kids[#kids+1] = s elements[fulltag] = { tag = tag, pref = s, kids = k, knum = r, pnum = pagenum } end local function makecontent(parent,start,stop,slist,id) local tag, kids = parent.tag, parent.kids local last = index if id == "image" then local d = pdfdictionary { Type = pdf_mcr, Pg = pageref, MCID = last, Alt = "image", } kids[#kids+1] = d elseif pagenum == parent.pnum then kids[#kids+1] = last else local d = pdfdictionary { Type = pdf_mcr, Pg = pageref, MCID = last, } -- kids[#kids+1] = pdfreference(pdfflushobject(d)) kids[#kids+1] = d end -- local bliteral = pdfliteral(format("/%s <>BDC",tag,last)) local prev = start.prev if prev then prev.next, bliteral.prev = bliteral, prev end start.prev, bliteral.next = bliteral, start if slist and slist.list == start then slist.list = bliteral elseif not prev then report_tags("this can't happen: injection in front of nothing") end -- local eliteral = pdfliteral("EMC") local next = stop.next if next then next.prev, eliteral.next = eliteral, next end stop.next, eliteral.prev = eliteral, stop -- index = index + 1 list[index] = parent.pref return bliteral, eliteral end -- -- -- local level, last, ranges, range = 0, nil, { }, nil local function collectranges(head,list) for n in traverse_nodes(head) do local id = n.id -- 14: image, 8: literal (mp) if id == glyph_code then local at = n[a_tagged] if not at then range = nil elseif last ~= at then range = { at, "glyph", n, n, list } -- attr id start stop list ranges[#ranges+1] = range last = at elseif range then range[4] = n -- stop end elseif id == hlist_code or id == vlist_code then local at = n[a_image] if at then local at = n[a_tagged] if not at then range = nil else ranges[#ranges+1] = { at, "image", n, n, list } -- attr id start stop list end last = nil else local nl = n.list slide_nodelist(nl) -- temporary hack till math gets slided (tracker item) collectranges(nl,n) end end end end function nodeinjections.addtags(head) -- no need to adapt head, as we always operate on lists level, last, ranges, range = 0, nil, { }, nil initializepage() collectranges(head) if trace_tags then for i=1,#ranges do local range = ranges[i] local attr, id, start, stop = range[1], range[2], range[3], range[4] local tags = taglist[attr] if tags then -- not ok ... only first lines report_tags("%s => %s : %05i % t",tosequence(start,start),tosequence(stop,stop),attr,tags) end end end for i=1,#ranges do local range = ranges[i] local attr, id, start, stop, list = range[1], range[2], range[3], range[4], range[5] local tags = taglist[attr] local prev = root local noftags, tag = #tags, nil for j=1,noftags do local tag = tags[j] if not elements[tag] then makeelement(tag,prev) end prev = elements[tag] end local b, e = makecontent(prev,start,stop,list,id) if start == head then report_tags("this can't happen: parent list gets tagged") head = b end end finishpage() -- can be separate feature -- -- injectspans(head) -- does to work yet -- return head, true end -- this belongs elsewhere (export is not pdf related) function codeinjections.enabletags(tg,lb) structures.tags.handler = nodeinjections.addtags tasks.enableaction("shipouts","structures.tags.handler") tasks.enableaction("shipouts","nodes.handlers.accessibility") tasks.enableaction("math","noads.handlers.tags") -- maybe also textblock if trace_tags then report_tags("enabling structure tags") end end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-uni.mkii0000644000175000017500000003444411754241457024326 0ustar norbertnorbert%D \module %D [ file=font-uni, %D version=1999.10.10, %D title=\CONTEXT\ Font Macros, %D subtitle=\UNICODE, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Unicode} %D In \XETEX, unicode support is straightforward, so we %D simply output a \type {\char} with a 16||bit number. \ifnum\texengine=\xetexengine \unexpanded\def\uchar#1#2{\char\numexpr#2+#1*\pluscclvi\relax} \let\uc\uchar \expandafter \endinput \fi %D Now comes the more traditional 8 bit \TEX\ hackery. %D I wrote this module when Wang Lei asked me how to use %D Chinese in \CONTEXT. From the samples he sent me, I deduced %D that some mixture of one and two byte encoding was used, %D which he confirmed. Since \TEX\ normally does not use the %D characters $>127$, so as long as the two byte characters %D have a first character with code $>127$, we can use active %D characters to handle them. In an optimistic mood, I called %D this module the \UNICODE\ font module. In the module that %D handles Chinese, we will see that some more interpretation %D is involved, which is why the macros handling those %D characters look ahead. \unprotect %D \macros %D {handleunicodeflowglyph, uchar, %D handleunicodeglyph, insertunicodeglyph, %D unicodeposition, unicodeone, unicodetwo} %D %D For the moment \UNICODE\ support is rather primitive but %D nevertheless effective. The reference to \UNICODE\ is not %D entirely correct, since in many cases one will use \quote %D {older} mappings, but in principle, \UNICODE\ can be %D supported. %D %D We expect each character to come as two eight bit %D characters. Those doubles are handled by making all %D characters in the range $>127$ active, so that they can %D pick up the next one, and act upon both their values. %D Internally only numbers are used. A first implementation %D simply internally prefixed the second part of the \UNICODE\ %D pair with \type {\string} or \type {\char}, but this was %D not that handy when it came to testing those values. %D Because in principle we are dealing with an encoding, the %D making active is handled in \type {enco-uni}. %D %D There are two commands to handle unicode characters: %D %D \starttyping %D \handleunicodeflowglyph{number}{character} %D \uchar{number}{number} %D \stoptyping %D %D The first one can be assigned to an active character, the %D second one can be used to directly access a glyph. Both %D command call \type {\handleunicodeglyph} that in turn %D calls \type {\insertunicodeglyph}. Both can be overruled %D in specialized modules. The low level command \type %D {\unicodeglyph} can best be left untouched, which is not %D so much a problem because there is a hook into this macro: %D \type {\unicodecharcommand}. %D %D In most cases one will redefine \type {\handleunicodeglyph} %D in such a way that it identifies special situations first, %D takes some actions next, calls \type {\insertunicodeglyph}, %D if needed with \type {\unicodecharcommand} changed, and %D finally does some finishing: %D %D \starttyping %D \def\handleunicodeglyph %D {take actions based on \unicodeone-two-position cq. \nextutoken %D redefine \unicodecharcommand if needed %D expand \insertunicodeglyph %D take some final actions} %D \stoptyping \newcount\unicodeposition %D The multistep approach is needed to pick up the second %D token, since this token can have any value and any %D catcode. % the \relax trick prevents eating up the space (needed for % korean \def\handleunicodeflowglyph#1#2% {\begingroup \edef\unicodeone{#1}% \@EA\afterassignment\@EA\dohandleunicodeflowglyph % two redundant ea's \@EA\chardef\@EA\nexttoken\@EA`\string#2\relax} \def\dohandleunicodeflowglyph\relax {\futurelet\nextutoken\dodohandleunicodeflowglyph} \def\dodohandleunicodeflowglyph % todo tex (or maybe no longer) {\edef\unicodetwo{\the\nexttoken}% \unicodeposition\numexpr\unicodeone*256+\unicodetwo\relax \handleunicodeglyph \endgroup} \unexpanded\def\uchar#1#2% use as standalone glyph {\begingroup \edef\unicodeone{#1}% \edef\unicodetwo{#2}% \unicodeposition\numexpr\unicodeone*256+\unicodetwo\relax \handleunicodeglyph \endgroup} \let\nextutoken\relax \unexpanded\def\lookaheaduchar#1#2% {\def\dolookaheaduchar{\uchar{#1}{#2}\let\nextutoken\relax}% \futurelet\nextutoken\dolookaheaduchar} \def\dohandleucflowglyph {\unicodeposition\numexpr\unicodeone*256+\unicodetwo\relax \handleunicodeglyph \endgroup} \unexpanded\def\uc#1#2% used in tricky situations {\begingroup \edef\unicodeone{#1}% \edef\unicodetwo{#2}% \futurelet\nextutoken\dohandleucflowglyph} \def\insertunicodeglyph {\unicodeglyph\unicodeone\unicodetwo} \let\handleunicodeglyph\insertunicodeglyph %D One can use the \type {\unicodeposition} in the macros %D that handle pre and post material. %D \macros %D {unicodestyle, unicodecharcommand} %D %D Each character pair will become one glyph. Because \TEX\ %D cannot handle fonts with more that 256 characters, we use %D \TFM\ files for each range. The first character of the pair %D is appended to the name of a font, and the second is used to %D access the glyph in that font. This means that a particular %D font is split up in subfonts with names in the range: %D %D \starttyping %D 80 ... ff %D \stoptyping %D %D The \type {} as well as the composed name are %D mapped ones. The next macros take care of this mapping. %D Let us assume that the next mapping has taken place, %D %D \starttyping %D \definefontsynonym [UnicodeRegular] [gbsong] %D \stoptyping %D %D Let us also assume that we are dealing with the range \type %D {b1}. Given that a font name results from: %D %D \starttyping %D \truefontname{\truefontname{UnicodeRegular}b1} %D \stoptyping %D %D we get \type {gbsongb1}. The outer \type {\truefontname} %D takes care of additional mapping, so when we say: %D %D \starttyping %D \definefontsynonym [gbsongb1] [gbsong-b1] %D \stoptyping %D %D the filename used will be \type {gbsong-b1}. From the next %D definition it will be clear that other fontshapes are also %D supported. The prefix \type {Unicode} is mapped! %D %D The command \type {\unicodecharcommand} can be used to %D handle special cases. At that moment \type {1em} is known. \def\unicodestyle {\truefontname\s!Unicode\fontstylesuffix} \let\unicodecharcommand\firstofoneargument \unexpanded\def\unicodeglyph#1#2% watch the double mapping {\begingroup \getvalue{@@\currentucharmapping\strippedcsname\uchar}{#1}{#2}% map to a to hex font range \bodyfontsize\unicodescale\bodyfontsize % readable: % \doifelsefontsynonym{\unicodestyle\unicodeone} % {\font\unicodefont=\truefontname{\unicodestyle\unicodeone} % at \currentfontscale\bodyfontsize} % {\font\unicodefont=\truefontname{\truefontname\unicodestyle\unicodeone} % at \currentfontscale\bodyfontsize}% % unreadable but more efficient: \font\unicodefont=\truefontname{\doifelsefontsynonym{\unicodestyle \unicodeone}\empty\truefontname\unicodestyle\unicodeone} at \currentfontscale\bodyfontsize \unicodestrut % off by default \unicodefont\unicodecharcommand{\char\unicodetwo\relax}% \endgroup} %D This handler is used by default, for instance in: %D %D \starttyping %D \defineunicodefont [MySwitch] [MyFont] % [strut=no,command=\insertunicodeglyph] %D %D \definefontsynonym [MyFontRegular40] [Sans] %D \definefontsynonym [MyFontBold40] [SansBold] %D %D {\MySwitch \uchar{"40}{`a}} %D {\MySwitch \bf \uchar{"40}{`a}} %D \stoptyping %D %D \starttyping %D \definefontsynonym [MyFontRegular] [Sans] %D \definefontsynonym [MyFontBold] [SansBold] %D \stoptyping %D %D Is also possible, but in that case the number is appended to the raw font %D name! %D \macros %D {currentucharmapping,defineucharmapping} %D %D A (plane,char) pair can be remapped using a uchar mapping %D function. The default mapping is to convert the plane to a %D lowercase hexadecimal number, and leave the number %D untouched. The current remapping is kept in a macro. \let\currentucharmapping\s!default \def\defineucharmapping#1% {\setvalue{@@#1\strippedcsname\uchar}} \defineucharmapping{\s!default}#1#2% {\edef\unicodeone{\lchexnumbers{#1}}\edef\unicodetwo{#2}} %D An example of a remapping is the following: %D %D \starttyping %D \defineucharmapping{GBK}#1#2% %D {\unicodeposition=#1 %D \advance\unicodeposition -129 %D \multiply\unicodeposition 190 %D \advance\unicodeposition #2 %D \advance\unicodeposition-\ifnum#2>127 65\else64\fi %D \dorepositionunicode} %D \stoptyping %D %D This maps the GBK vector onto a compact GBK one. The %D auxiliary macro is defined here as a goody. \def\dorepositionunicode {\dosetdivision\unicodeposition{256}\scratchcounter \advance\scratchcounter \plusone \edef\unicodeone{\ifnum\scratchcounter<10 0\fi\the\scratchcounter}% \dosetmodulo\unicodeposition{256}\scratchcounter \edef\unicodetwo{\the\scratchcounter}} %D \macros %D {setunicodestrut, setunicodescale, nextutoken, %D handleunicodeglyph, insertunicodeglyph} %D %D A careful analysis of the previous macros, learns that the %D process of mapping comes down to: %D %D \startitemize[packed,n] %D \item taking care of preceding material (and spacing) %D \item defining the font at \type {\currentfontscale} $\times$ %D \type {\unicodescale} $\times$ \type {\bodyfontsize} %D \item inserting a \type {\unicodestrut} %D \item inserting the character (glyph) %D \item executing some actions afterwards %D \stopitemize %D %D The actions before and after placing the glyph, is up to %D the user supplied handler. This handler (\type %D {\handleunicodeglpyh}) must, at a certain moment, insert %D the glyph using \type {\insertunicodeglyph} \def\setunicodescale#1% {\def\unicodescale{#1}} \def\dosetunicodestrut#1#2% height depth {\def\unicodestrut {\vrule \!!width \zeropoint \!!height#1\strutht \!!depth #2\strutdp \relax}} \def\setunicodestrut#1#2% height depth {\ifdim#1\strutht>\zeropoint \dosetunicodestrut{#1}{#2}% \else\ifdim#1\strutdp>\zeropoint \dosetunicodestrut{#1}{#2}% \else \let\unicodestrut\empty \fi\fi} \def\resetunicodestrut {\let\unicodestrut\empty} %D The additional scaling and strut default to: \setunicodescale{1} \setunicodestrut{1}{1} %D But better is not to have a strut added by default: \resetunicodestrut %D The actual code for the additional actions as well as %D specific spacing is handled outside these routines. The %D character after the two that are under treatment is %D available in \type {\nextutoken}. %D \macros %D {defineunicodefont, setupunicodefont} %D %D Apart from this rather low level implementation, we also %D provide a more user friendly alternative. Given that one %D has defined: %D %D \starttyping %D \defineunicodefont %D [SimChi] [SimplifiedChinese] %D [\c!scale=0.85, %D \c!height=1.25, %D \c!depth=1.00, %D \c!interlinespaceinterlinie=yes, %D \c!conversion=\chinesenumber, %D \c!command=\handlechineseunicodeglyph] %D \stoptyping %D %D Together with: %D %D \starttyping %D \definefontsynonym [SimplifiedChineseRegular] [gbsong] %D \definefontsynonym [SimplifiedChineseSlanted] [gbsongsl] %D \stoptyping %D %D we can now switch to Simplified Chinese by saying \type %D {SimChi}. Some values can be changed afterwards with %D %D \starttyping %D \setupunicodefont[SimChi][...=...] %D \stoptyping %D %D Specific initializations can be assigned to \type %D {commands}. \def\defineunicodefont {\dotripleempty\dodefineunicodefont} \def\dodefineunicodefont[#1][#2][#3]% {\doifassignmentelse{#3} {\setupunicodefont[#1][#3]} {\doifelsenothing{#3} {\setupunicodefont[#1][#3]} {\copyparameters [\??uc#1][\??uc#3] [\c!height,\c!depth,\c!scale,\c!commands,\c!strut, \c!interlinespace,\c!command,\c!conversion]}}% \doifelsenothing{#2} {\setvalue{#1}{[uc font #1 undefined]}} {\setvalue{\??uc#1\c!file}{#2}% \doifundefined{\??ff#2\s!Bold} {\definefontsynonym[#2\s!Bold] [#2\s!Regular]% \definefontsynonym[#2\s!Slanted] [#2\s!Regular]% \definefontsynonym[#2\s!Italic] [#2\s!Regular]% \definefontsynonym[#2\s!BoldSlanted][#2\s!Slanted]% \definefontsynonym[#2\s!BoldItalic] [#2\s!Italic]}% \unexpanded\setvalue{#1}{\enableunicodefont{#1}}}} \def\setupunicodefont {\dodoubleempty\dosetupunicodefont} \def\dosetupunicodefont[#1][#2]% also predefines {\doifundefined{\??uc#1\c!command} {\copyparameters [\??uc#1][\??uc\s!default] [\c!height,\c!depth,\c!scale,\c!commands,\v!strut, \c!interlinespace,\c!command,\c!conversion]}% \getparameters[\??uc#1][#2]} \def\enableunicodefont#1% {\definefontsynonym[\s!Unicode][\getvalue{\??uc#1\c!file}]% \def\unicodescale {\getvalue{\??uc#1\c!scale}}% \def\unicodeheight {\getvalue{\??uc#1\c!height}}% \def\unicodedepth {\getvalue{\??uc#1\c!depth}}% \def\unicodedigits {\getvalue{\??uc#1\c!conversion}}% \def\handleunicodeglyph {\getvalue{\??uc#1\c!command}}% \doifnot\currentregime{utf}{\enableregime[unicode]}% % the following \relax's are realy needed \doifvalue{\??uc#1\c!interlinespace}\v!yes \setupinterlinespace\relax \doifelsevalue{\??uc#1\c!strut}\v!yes {\setunicodestrut\unicodeheight\unicodedepth} {\resetunicodestrut}% \getvalue{\??uc#1\c!commands}\relax} %D \macros %D {unicodedigits} %D %D For convenience we also predefine a number conversion %D macro: \let\unicodedigits\number %D Because we cannot be sure of the pressence of all font %D styles, we remap some by default. \definefontsynonym [\s!Unicode\s!Bold] [\s!Unicode\s!Regular] \definefontsynonym [\s!Unicode\s!Slanted] [\s!Unicode\s!Regular] \definefontsynonym [\s!Unicode\s!Italic] [\s!Unicode\s!Regular] \definefontsynonym [\s!Unicode\s!BoldSlanted] [\s!Unicode\s!Slanted] \definefontsynonym [\s!Unicode\s!BoldItalic] [\s!Unicode\s!Italic] \setupunicodefont [\s!default] [\c!height=1, \c!depth=1, \c!scale=1, \c!strut=\v!no, \c!interlinespace=\v!no, \c!command=\insertunicodeglyph, \c!conversion=\number] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/chem-ini.mkiv0000644000175000017500000000175211757516105024267 0ustar norbertnorbert%D \module %D [ file=chem-ini, %D version=2008.03.06, %D subtitle=Chemistry, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Chemistry Macros / Initialization} % might become Inline \registerctxluafile{chem-ini}{1.001} \unprotect %D \macros %D {molecule} %D %D Quick and dirty: %D %D \starttyping %D \unexpanded\def\molecule#1% %D {$\enablesupersub\tf#1$} %D \stoptyping %D %D Using \LUA: %D %D \startbuffer %D \molecule{H_2SO_4^-2} %D \molecule{H_2SO_4^{-2}} %D \molecule{H_2SO_4^{-2{x}}} %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\molecule#1% {\ctxcommand{molecule(\!!bs#1\!!es)}} %D For old times sake: \unexpanded\def\chem#1#2#3% {\dontleavehmode\begingroup#1\lohi{#2}{#3}\endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-cha.mkiv0000644000175000017500000001414512130411274024240 0ustar norbertnorbert%D \module %D [ file=spac-cha, % was supp-ali, %D version=2012.06.08, % 2000.04.17, %D title=\CONTEXT\ Spacing Macros, %D subtitle=Character Alignment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Yet undocumented but nevertheless used. % 0 = centered % 1 = left in before % 2 = right in before % 3 = left in after % 4 = right in after \unprotect % \starttabulate[|cg{.}|cg{,}|cg{,}|] % \NC period \NC comma \NC comma \NC\NR % \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR % \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 10\\ \NG 10\\ \NG 0,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \stoptabulate % We gain not much by luafication and actually make things worse. \chardef\characteralignmentmode\plusfour \chardef\characteralignmentslot\plusone \let\afterassignwidth \!!zeropoint \let\beforeassignwidth\!!zeropoint \def\alignmentcharacter{.} \newdimen\d_supp_charalign_width \newtoks \t_supp_charalign_list \let\alignmentclass\s!default % can be used to handle multiple mixed ones \installcorenamespace{characteralign} \unexpanded\def\supp_charalign_push {\ifcsname\??characteralign\alignmentclass\endcsname\else \normalexpanded{\global\t_supp_charalign_list{\the\t_supp_charalign_list\supp_charalign_do{\alignmentclass}}}% \fi \setxvalue{\??characteralign\alignmentclass}{\supp_charalign_do {\afterassignwidth}{\beforeassignwidth}{\alignmentcharacter}}} \unexpanded\def\supp_charalign_pop_do#1#2#3% {\def\afterassignwidth {#1}% \def\beforeassignwidth {#2}% \def\alignmentcharacter{#3}} \unexpanded\def\supp_charalign_pop {\let\supp_charalign_do\supp_charalign_pop_do \executeifdefined{\??characteralign\alignmentclass}\donothing} \unexpanded\def\supp_charalign_reset_do#1% {\global\letbeundefined{\??characteralign#1}} % global ! \unexpanded\def\resetcharacteralign {\let\supp_charalign_do\supp_charalign_reset_do \the\t_supp_charalign_list \global\t_supp_charalign_list\emptytoks} \unexpanded\def\supp_charalign_firstpass_one#1#2% {\supp_charalign_pop \let\\\empty \setbox\scratchbox\hbox{#1}% \d_supp_charalign_width\wd\scratchbox \setbox\scratchbox\emptyhbox \supp_charalign_check#2#1\relax\relax \scratchdimen-\wd\scratchbox \setbox\scratchbox\hbox{\ignorespaces#2\unskip}% \advance\scratchdimen \wd\scratchbox \ifdim\scratchdimen>\beforeassignwidth\relax \edef\beforeassignwidth{\the\scratchdimen}% \fi \ifdim\scratchdimen=\zeropoint \setbox\scratchbox\hbox{\ignorespaces#2\unskip}% \scratchdimen\wd\scratchbox \ifcase\characteralignmentmode % do nothing \else\ifnum\characteralignmentmode<\plusthree \advance\scratchdimen\d_supp_charalign_width\relax \ifdim\scratchdimen>\beforeassignwidth\relax \edef\beforeassignwidth{\the\scratchdimen}% \fi \else \ifdim\scratchdimen>\afterassignwidth\relax \edef\afterassignwidth{\the\scratchdimen}% \fi \fi\fi \fi \supp_charalign_push} \unexpanded\def\supp_charalign_firstpass_two#1#2#3% {\ifx#2\relax \setbox\scratchbox\hbox{\ignorespaces#1\unskip}% \ifdim\wd\scratchbox>\afterassignwidth \edef\afterassignwidth{\the\wd\scratchbox}% \fi \else \supp_charalign_check#2#3\relax\relax \fi} \unexpanded\def\supp_charalign_secondpass_one#1#2% {\supp_charalign_pop \let\\\empty % beware, no grouping \setbox\scratchbox\hbox{#1}% \d_supp_charalign_width\wd\scratchbox \setbox\scratchbox\emptyhbox % new 12,34 vs 10\\ where 10 aligns on 12 if #1 = , \ifcase\characteralignmentslot \supp_charalign_check#2#1\relax\relax \scratchdimen\wd\scratchbox \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \else \def\\{#1}% \normalexpanded{\supp_charalign_check#2#1\relax\relax}% \scratchdimen\wd\scratchbox \setbox\scratchbox\hbox{\def\\{\hphantom{#1}}\ignorespaces#2\unskip}% \fi \noindent \ifdim\scratchdimen=\wd\scratchbox \ifcase\characteralignmentmode \box\scratchbox \else \hbox {\dontcomplain \hbox to \beforeassignwidth {\ifcase\characteralignmentmode\or \box\scratchbox\hss \or \hss\box\scratchbox\hskip\d_supp_charalign_width \or \hss\rlap{\box\scratchbox}% \or \hss\rlap{\hbox to \afterassignwidth{\hss\box\scratchbox}}% \fi}% \hskip\afterassignwidth}% \fi \else \hbox {\hbox to \beforeassignwidth {\hss\box\scratchbox\hskip-\scratchdimen}% \hskip\afterassignwidth}% \fi} \unexpanded\def\supp_charalign_secondpass_two#1#2#3% {\ifx#2\relax \setbox\scratchbox\hbox{\ignorespaces#1\unskip}% \else \supp_charalign_check#2#3\relax\relax \fi} \unexpanded\def\supp_charalign_firstpass#1% {\unexpanded\def\checkalignment ##1{\supp_charalign_firstpass_one{#1}{##1}}% \unexpanded\def\supp_charalign_check##1#1##2##3\relax{\supp_charalign_firstpass_two{##1}{##2}{##3}}} \unexpanded\def\supp_charalign_secondpass#1% {\unexpanded\def\checkalignment ##1{\supp_charalign_secondpass_one{#1}{##1}}% \unexpanded\def\supp_charalign_check##1#1##2##3\relax{\supp_charalign_secondpass_two{##1}{##2}{##3}}} \unexpanded\def\setfirstpasscharacteralign {\supp_charalign_pop \normalexpanded{\supp_charalign_firstpass{\alignmentcharacter}}} \unexpanded\def\setsecondpasscharacteralign {\supp_charalign_pop \normalexpanded{\supp_charalign_secondpass{\alignmentcharacter}}} \unexpanded\def\startcharacteralign#1\stopcharacteralign {\bgroup \setfirstpasscharacteralign #1% \setsecondpasscharacteralign#1% \egroup} \let\stopcharacteralign\relax \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-ran.lua0000644000175000017500000000325112130411274024135 0ustar norbertnorbertif not modules then modules = { } end modules ['supp-ran'] = { version = 1.001, comment = "companion to supp-ran.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We cannot ask for the current seed, so we need some messy hack here. local report_system = logs.reporter("system","randomizer") local math = math local context, commands = context, commands local random, randomseed, round, seed, last = math.random, math.randomseed, math.round, false, 1 local maxcount = 2^30-1 -- 1073741823 local function setrandomseedi(n,comment) if not n then -- n = 0.5 -- hack end if n <= 1 then n = n * maxcount end n = round(n) if false then report_system("setting seed to %s (%s)",n,comment or "normal") end randomseed(n) last = random(0,maxcount) -- we need an initial value end math.setrandomseedi = setrandomseedi function commands.getrandomcounta(min,max) last = random(min,max) context(last) end function commands.getrandomcountb(min,max) last = random(min,max)/65536 context(last) end function commands.setrandomseed(n) last = n setrandomseedi(n) end function commands.getrandomseed(n) context(last) end -- maybe stack function commands.freezerandomseed(n) if seed == false or seed == nil then seed = last setrandomseedi(seed,"freeze",seed) end if n then randomseed(n) end end function commands.defrostrandomseed() if seed ~= false then setrandomseedi(seed,"defrost",seed) -- was last (bug) seed = false end end context-2013.05.28.20130704/texmf-dist/tex/context/base/bxml-apa.mkiv0000644000175000017500000004644311754241457024307 0ustar norbertnorbert%D \module %D [ file=bxml-apa, %D version=2010.05.14, % based on bibl-apa.tex %D title=APA bibliography style, %D subtitle=Publications, %D author={Taco Hoekwater \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % helpers (todo) \let\maybeyear\firstofoneargument \let\etalchar \firstofoneargument \setupbibtexcitationvariants [author,year] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupbibtexcitationvariants [authoryear] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={ }, \c!left={(}, \c!right={)}] \setupbibtexcitationvariants [authoryears] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={, }, \c!left={(}, \c!right={)}] \setupbibtexcitationvariants [key,serial,authornum,page,short,type,doi,url] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!no, \c!inbetween={ }, \c!left={[}, \c!right={]}] \setupbibtexcitationvariants [num] [\c!andtext={ and }, \c!otherstext={ et al.}, \c!pubsep={, }, \c!lastpubsep={ and }, \c!compress=\v!yes, \c!inbetween={--}, \c!left={[}, \c!right={]}] \setupbibtexpublications [\c!sorttype=, \c!criterium=, \c!refcommand=authoryears, \c!numbering=\v!no, \c!autohang=\v!no] \setupbibtexpublications [\c!width=2em, % 24pt, \c!artauthor=invertedshort, \c!editor=invertedshort, \c!author=invertedshort, \c!namesep={, }, \c!lastnamesep={ and }, \c!finalnamesep={ and }, \c!firstnamesep={, }, \c!juniorsep={ }, \c!vonsep={ }, \c!surnamesep={, }, \c!authoretallimit=5, \c!editoretallimit=5, \c!artauthoretallimit=5, \c!authoretaldisplay=5, \c!editoretaldisplay=5, \c!artauthoretaldisplay=5, \c!authoretaltext={ et al.}, \c!editoretaltext={ et al.}, \c!artauthoretaltext={ et al.}] % common \startxmlsetups bibtex:apa:common:wherefrom \bibxmldoifelse {address} { \getvariable{bibtex:temp}{left} \bibxmldoifelse {country} { \bibxmldoifelse {\getvariable{bibtex:temp}{label}} { \bibxmlflush{address}\bibtexcomma\bibxmlflush{country}: \bibxmlflush{\getvariable{bibtex:temp}{label}} } { \bibxmlflush{address}\bibtexcomma\bibxmlflush{country} } } { \bibxmldoifelse {\getvariable{bibtex:temp}{label}} { \bibxmlflush{address}\bibtexcomma\bibxmlflush{\getvariable{bibtex:temp}{label}} } { \bibxmlflush{address} } } \getvariable{bibtex:temp}{right} } { \bibxmldoifelse {country} { \getvariable{bibtex:temp}{left} \bibxmldoifelse {\getvariable{bibtex:temp}{label}} { \bibxmlflush{country}: \bibxmlflush{\getvariable{bibtex:temp}{label}} } { \bibxmlflush{country} } \getvariable{bibtex:temp}{right} } { \bibxmldoifelse {\getvariable{bibtex:temp}{label}} { \getvariable{bibtex:temp}{left} \bibxmlflush{\getvariable{bibtex:temp}{label}} \getvariable{bibtex:temp}{right} } { \getvariable{bibtex:temp}{otherwise} } } } \stopxmlsetups \startxmlsetups bibtex:apa:common:publisher \setvariables[bibtex:temp][label=publisher,left=,right=,otherwise=]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:organization \setvariables[bibtex:temp][label=organization,left=,right=,otherwise=]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:school \setvariables[bibtex:temp][label=school,left=,right=,otherwise=]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:institution \setvariables[bibtex:temp][label=institution,left=,right=,otherwise=]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:school:subsentence \setvariables[bibtex:temp][label=school,left=\bibtexcomma,right=\bibtexperiod,otherwise=\bibtexperiod]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:institution:subsentence \setvariables[bibtex:temp][label=institution,left=\bibtexcomma,right=\bibtexperiod,otherwise=\bibtexperiod]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:publisher:sentence \setvariables[bibtex:temp][label=publisher,left=\bibtexspace,right=\bibtexperiod,otherwise=]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:organization:sentence \setvariables[bibtex:temp][label=organization,left=\bibtexspace,right=\bibtexperiod,otherwise=]\relax \bibxmlsetup{bibtex:apa:common:wherefrom} \stopxmlsetups \startxmlsetups bibtex:apa:common:title-and-series \bibxmldoif {title} { \bibxmlflush{title} \bibxmldoif {series} { \bibtexlparent\bibxmlflush{series}\bibtexrparent } \bibtexperiod } \stopxmlsetups \startxmlsetups bibtex:apa:common:title-it-and-series \bibxmldoif {title} { \bgroup\it\bibxmlflush{title}\/\egroup \bibxmldoif {series} { \bibtexlparent\bibxmlflush{series}\bibtexrparent } \bibtexperiod } \stopxmlsetups \disablemode[bibtex:apa:edited-book] \startxmlsetups bibtex:apa:common:author-and-year \bibxmldoif {author} { \bibxmlsetup{bibtex:format:author} } \bibxmldoif {year} { \bibtexlparent\bibxmlflush{year}\bibtexrparent } \bibtexperiod \stopxmlsetups \startxmlsetups bibtex:apa:common:author-or-key-and-year \bibxmldoifelse {author} { \bibxmlsetup{bibtex:format:author} } { \bibxmldoif {key} { \bibtexlbracket\bibxmlsetup{bibtex:format:key}\bibtexrbracket } } \bibxmldoif {year} { \bibtexlparent\bibxmlflush{year}\bibtexrparent } \bibtexperiod \stopxmlsetups \startxmlsetups bibtex:apa:common:author-editors-crossref-year \bibxmldoif {author} { \bibxmlsetup{bibtex:format:author} } { \bibxmldoifelse {editor} { \enablemode[bibtex:apa:edited-book] \xmlsetup{#1}{bibtex:format:editor} \bibtexcomma\bibtexsingularplural{editor}{editors} } { % weird period \bibxmldoif {crossref} { \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket\bibtexperiod } } } \bibxmldoif {year} { \bibtexlparent\bibxmlflush{year}\bibtexrparent } \bibtexperiod \stopxmlsetups \startxmlsetups bibtex:apa:common:editor-or-key-and-year \bibxmldoifelse {editor} { \enablemode[bibtex:apa:edited-book] \xmlsetup{#1}{bibtex:format:editor} \bibtexcomma\bibtexsingularplural{editor}{editors} } { \bibxmldoif {key} { \bibtexlbracket\bibxmlsetup{bibtex:format:key}\bibtexrbracket } } \bibtexspace \bibxmldoif {year} { \bibtexlparent\bibxmlflush{year}\bibtexrparent } \bibtexperiod \stopxmlsetups \startxmlsetups bibtex:apa:common:note \bibxmldoif {note} { \bibtexspace\bibxmlflush{note}\bibtexperiod } \stopxmlsetups \startxmlsetups bibtex:apa:common:comment \bibxmldoif {comment} { \bibtexspace\bibxmlflush{comment}\bibtexperiod } \stopxmlsetups \startxmlsetups bibtex:apa:common:pages:p \bibxmldoif {pages} { \bibtexspace\bibxmlflush{pages}\bibtexspace p\bibtexperiod } \stopxmlsetups \startxmlsetups bibtex:apa:common:pages:pp \bibxmldoif {pages} { \bibtexspace\bibxmlflush{pages}\bibtexspace pp\bibtexperiod } \stopxmlsetups \startxmlsetups bibtex:apa:common:pages:pages \bibxmldoif {pages} { \bibtexcomma pages~\bibxmlflush{pages} } \stopxmlsetups \startxmlsetups bibtex:apa:common:edition:sentense \bibxmldoif {edition} { \bibtexspace\bibxmlflush{edition}\bibtexspace edition\bibtexperiod } \stopxmlsetups % check ewhen the next is used (no period) % \startxmlsetups bibtex:apa:common:edition % \bibxmldoif {edition} { % \bibtexspace\bibxmlflush{edition}\bibtexspace edition % } % \stopxmlsetups % we can share more, todo % specific \startxmlsetups bibtex:apa:article \bibxmlsetup{bibtex:apa:common:author-or-key-and-year} \bibxmldoif {title} { \bibxmlflush{title}\bibtexperiod } \bibxmldoifelse {journal} { \bgroup\it\bibxmlflush{journal}\/\egroup } { \bibxmldoif {crossref} { In\bibtexspace\bibxmlflush{crossref} } } \bibxmldoifelse {volume} { \bibtexcomma\bgroup\it\bibxmlflush{volume}\/\egroup \bibxmldoif {issue} { \bibtexlparent\bibxmlflush{issue}\bibtexlparent } \bibxmldoif {pages} { \bibtexcomma\bibxmlflush{pages} } \bibtexperiod } { \bibxmlsetup{bibtex:apa:common:pages:pp} } \bibxmlsetup{bibtex:apa:common:note} \bibxmlsetup{bibtex:apa:common:comment} \stopxmlsetups \startxmlsetups bibtex:apa:book \bibxmlsetup{bibtex:apa:common:author-editors-crossref-year} \bibxmldoif {title} { \bgroup\it\bibxmlflush{title}\/\egroup \doifmodeelse {bibtex:apa:edited-book} { \bibxmldoifelse {volume} { \bibtexspace Number\nonbreakablespace\bibxmlflush{volume} \bibxmldoifelse {series} { \bibtexspace in\nonbreakablespace\bibxmlflush{series}\bibtexperiod } { \bibxmldoifelse {crossref} { \bibtexspace in\bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket } { \bibtexperiod } } } { \bibxmldoif {series} { \bibtexspace\bibxmlflush{series} } \bibtexperiod } } { \bibxmldoifelse {crossref} { \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter} } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibtexperiod \bibxmldoif {volume} { Volume\nonbreakablespace\bibxmlflush{volume}\bibtexspace of\nonbreakablespace } } { \bibxmldoif {volume} { \bibtexcomma volume\nonbreakablespace\bibxmlflush{volume} \bibxmldoif {series} { \bibtexspace of\nonbreakablespace\bgroup\it\bibxmlflush{series}\/\egroup } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter} } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibtexperiod } } } } \bibxmlsetup{bibtex:apa:common:edition:sentence} \bibxmlsetup{bibtex:apa:common:publisher:sentence} \bibxmlsetup{bibtex:apa:common:pages:p}% twice? \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:inbook \bibxmlsetup{bibtex:apa:common:author-editors-crossref-year} \bibxmldoifelse {title} { \bgroup\it\bibxmlflush{title}\/\egroup } { \doifmodeelse {bibtex:apa:edited-book} { \bibxmldoifelse {volume} { \bibtexspace number\nonbreakablespace\bibxmlflush{volume} \bibxmldoifelse {series} { \bibtexspace in\nonbreakablespace\bibxmlflush{series}\bibtexperiod } { \bibxmldoifelse {crossref} { \bibtexspace in\bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket } { \bibtexperiod } } } { \bibxmldoif {series} { \bibtexspace\bibxmlflush{series}\bibtexperiod } } } { \bibxmldoifelse {crossref} { \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter} } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibxmldoif {volume} { Volume\nonbreakablespace\bibxmlflush{volume}\bibtexspace of\nonbreakablespace } \bibxmldoif {crossref} { \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket } } { \bibxmldoif {volume} { \bibtexcomma volume\nonbreakablespace\bibxmlflush{volume} \bibxmldoif {series} { \bibtexspace of\nonbreakablespace\bgroup\it\bibxmlflush{series}\/\egroup } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter} } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibtexperiod } } } } \bibtexspace \bibxmlsetup{bibtex:apa:common:edition:sentence} \bibxmlsetup{bibtex:apa:common:publisher} \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:booklet \bibxmlsetup{bibtex:apa:common:author-or-key-and-year} \bibxmlsetup{bibtex:apa:common:title-it-and-series} \bibxmlsetup{bibtex:apa:common:edition:sentence} \bibxmlsetup{bibtex:apa:common:publication:sentence} \bibxmlsetup{bibtex:apa:common:pages:p} \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:manual \bibxmlsetup{bibtex:apa:common:author-or-key-and-year} \bibxmlsetup{bibtex:apa:common:title-it-and-series} \bibxmlsetup{bibtex:apa:common:edition:sentence} \bibxmlsetup{bibtex:apa:common:organization:sentence} \bibxmlsetup{bibtex:apa:common:pages:p} \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:incollection \bibxmlsetup{bibtex:apa:common:author-and-year} \bibxmldoif {arttitle} { \bibxmlflush{arttitle}\bibtexperiod } In\bibtexspace \bibxmldoifelse {title} { \bibxmlsetup{bibtex:format:editors}\bibtexcomma \bgroup\it\bibxmlflush{title}\/\egroup \bibxmldoif {series} { \bibxmldoif {volume} { \bibtexcomma number\bibtexspace\bibxmlflush{volume}\bibtexspace in } \bibtexspace\bibxmlflush{series} } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter}\bibtexspace } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibxmldoif {edition} { \bibtexspace\bibxmlflush{edition}\bibtexspace edition } \bibxmlsetup{bibtex:apa:common:publisher:sentence} } { \bibxmldoif {crossref} { \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter} } \bibtexspace \bibxmlsetup{bibtex:apa:common:pages:pages} } \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:inproceedings \bibxmlsetup{bibtex:apa:common:author-and-year} \bibxmldoif {arttitle} { \bibxmlflush{arttitle}\bibtexperiod } In\bibtexspace \bibxmldoifelse {title} { \bibxmldoif {editors} { \bibxmlflush{bibtex:apa:format:editors} \bibtexcomma\bibtexsingularplural{editor}{editors}\bibtexcomma } \bgroup\it\bibxmlflush{title}\/\egroup \bibxmldoif {series} { \bibxmldoif {volume} { \bibtexcomma number~\bibxmlflush{volume} in } \bibtexspace \bibxmlflush{series} } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter}\bibtexspace } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibtexperiod \bibxmlsetup{bibtex:apa:common:organization:sentence} } { \bibxmldoif {crossref} { \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter}\bibtexspace } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibtexperiod } \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:proceedings \bibxmlsetup{bibtex:apa:common:editor-or-key-and-year} \bibxmldoif {title} { \bgroup\it\bibxmlflush{title}\/\egroup \bibxmldoif {volume} { \bibtexcomma number\bibtexspace\bibxmlflush{volume}\bibtexspace in\bibtexspace } \bibxmldoif {chapter} { \bibtexcomma\bibxmlflush{chapter}\bibtexspace } \bibxmlsetup{bibtex:apa:common:pages:pages} \bibtexperiod \bibxmlsetup{bibtex:apa:common:organization:sentence} } \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:common:thesis \bibxmlsetup{bibtex:apa:common:author-and-year} \bibxmlsetup{bibtex:apa:common:title-it-and-series} \bibxmldoifelse {type} { \bibxmlflush{type} } { \getvariable{bibtex:temp}{label} } \bibxmlsetup{bibtex:apa:common:school:subsentence} \bibxmlsetup{bibtex:apa:common:pages:p} \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:mastersthesis \setvariables[bibtex:temp][label=Master's thesis] \bibxmlsetup{bibtex:apa:common:thesis} \stopxmlsetups \startxmlsetups bibtex:apa:phdthesis \setvariables[bibtex:temp][label=PhD thesis] \bibxmlsetup{bibtex:apa:common:thesis} \stopxmlsetups \startxmlsetups bibtex:apa:techreport \bibxmlsetup{bibtex:apa:common:author-and-year} \bibxmlsetup{bibtex:apa:common:title-and-series} \bibxmldoifelse {type} { \bibxmlflush{type} \bibxmldoif {volume} { \bibtexspace\bibxmlflush{volume} } } { \bibtexspace Technical Report } \bibxmlsetup{bibtex:apa:common:institution:subsentence} \bibxmlsetup{bibtex:apa:common:pages:p} \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:misc \bibxmlsetup{bibtex:apa:common:author-and-year} \bibxmlsetup{bibtex:apa:common:title-and-series} \bibxmlsetup{bibtex:apa:common:publisher:sentence} \bibxmlsetup{bibtex:apa:common:pages:p} \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \startxmlsetups bibtex:apa:unpublished \bibxmlsetup{bibtex:apa:common:author-and-year} \bibxmlsetup{bibtex:apa:common:title-and-series} \bibxmlsetup{bibtex:apa:common:pages:p} \bibxmldoif {type} { \bibtexlparent\bibxmlflush{type}\bibtexrparent } \bibxmlsetup{bibtex:apa:common:note} \stopxmlsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-fpl.mkii0000644000175000017500000000545511754241457024272 0ustar norbertnorbert%D \module %D [ file=enco-fpl, %D version=2000.08.20, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Polish Input Filter, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 These definitions used to be part of lang-sla.tex. \unprotect % todo : named glyphs \installactivecharacter / \startlanguagespecifics[\s!pl] % \appendtoks \makecharacteractive / \to \everynormalcatcodes % obsolete \installcompoundcharacter /a {\aogonek} \installcompoundcharacter /c {\cacute} \installcompoundcharacter /e {\eogonek} \installcompoundcharacter /l {\lstroke} \installcompoundcharacter /n {\nacute} \installcompoundcharacter /o {\oacute} \installcompoundcharacter /s {\sacute} \installcompoundcharacter /x {\zacute} \installcompoundcharacter /z {\zdotaccent} \installcompoundcharacter /A {\Aogonek} \installcompoundcharacter /C {\Cacute} \installcompoundcharacter /E {\Eogonek} \installcompoundcharacter /L {\Lstroke} \installcompoundcharacter /N {\Nacute} \installcompoundcharacter /O {\Oacute} \installcompoundcharacter /S {\Sacute} \installcompoundcharacter /X {\Zacute} \installcompoundcharacter /Z {\Zdotaccent} \stoplanguagespecifics \startlanguagespecifics[\s!pl] \installcompoundcharacter /, {\handlequotation\c!leftquotation} \installcompoundcharacter /' {\handlequotation\c!rightquotation} \def\setupPLlanguage% {\setuplanguage [\s!pl] [\c!leftsentence=\leftguillemot, \c!rightsentence=\rightguillemot, \c!leftsubsentence=\leftsubguillemot, \c!rightsubsentence=\rightsubguillemot]} \installcompoundcharacter /< {{\setupPLlanguage|<|}} \installcompoundcharacter /> {{\setupPLlanguage|>|}} \installcompoundcharacter /- {|-|} \stoplanguagespecifics % obsolete % % \startlanguagespecifics[\s!pl] % % \definesortkey {/a}{a}{a}{\k a} % \definesortkey {/A}{a}{a}{\k a} % \definesortkey {/c}{c}{a}{\'c} % \definesortkey {/C}{c}{a}{\'c} % \definesortkey {/e}{e}{a}{\k e} % \definesortkey {/E}{e}{a}{\k e} % \definesortkey {/l}{l}{a}{\l } % \definesortkey {/L}{l}{a}{\l } % \definesortkey {/n}{n}{a}{\'n} % \definesortkey {/N}{n}{a}{\'n} % \definesortkey {/o}{o}{a}{\'o} % \definesortkey {/O}{o}{a}{\'o} % \definesortkey {/s}{s}{a}{\'s} % \definesortkey {/S}{s}{a}{\'s} % \definesortkey {/x}{z}{a}{\'x} % \definesortkey {/X}{z}{a}{\'x} % \definesortkey {/z}{z}{b}{\.z} % \definesortkey {/Z}{z}{b}{\.z} % % \stoplanguagespecifics \startencoding[pdfdoc] \startlanguagespecifics[pl]% hm \defineactivecharacter / {\simplifiedcompoundcharacter/} \stoplanguagespecifics \stopencoding \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-url.lua0000644000175000017500000002703612130411274023432 0ustar norbertnorbertif not modules then modules = { } end modules ['l-url'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local char, format, byte = string.char, string.format, string.byte local concat = table.concat local tonumber, type = tonumber, type local P, C, R, S, Cs, Cc, Ct, Cf, Cg, V = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Cf, lpeg.Cg, lpeg.V local lpegmatch, lpegpatterns, replacer = lpeg.match, lpeg.patterns, lpeg.replacer -- from wikipedia: -- -- foo://username:password@example.com:8042/over/there/index.dtb?type=animal;name=narwhal#nose -- \_/ \_______________/ \_________/ \__/ \___/ \_/ \______________________/ \__/ -- | | | | | | | | -- | userinfo hostname port | | query fragment -- | \________________________________/\_____________|____|/ -- scheme | | | | -- | authority path | | -- | | | -- | path interpretable as filename -- | ___________|____________ | -- / \ / \ | -- urn:example:animal:ferret:nose interpretable as extension url = url or { } local url = url local tochar = function(s) return char(tonumber(s,16)) end local colon = P(":") local qmark = P("?") local hash = P("#") local slash = P("/") local percent = P("%") local endofstring = P(-1) local hexdigit = R("09","AF","af") local plus = P("+") local nothing = Cc("") local escapedchar = (percent * C(hexdigit * hexdigit)) / tochar local escaped = (plus / " ") + escapedchar local noslash = P("/") / "" -- we assume schemes with more than 1 character (in order to avoid problems with windows disks) -- we also assume that when we have a scheme, we also have an authority -- -- maybe we should already split the query (better for unescaping as = & can be part of a value local schemestr = Cs((escaped+(1-colon-slash-qmark-hash))^2) local authoritystr = Cs((escaped+(1- slash-qmark-hash))^0) local pathstr = Cs((escaped+(1- qmark-hash))^0) ----- querystr = Cs((escaped+(1- hash))^0) local querystr = Cs(( (1- hash))^0) local fragmentstr = Cs((escaped+(1- endofstring))^0) local scheme = schemestr * colon + nothing local authority = slash * slash * authoritystr + nothing local path = slash * pathstr + nothing local query = qmark * querystr + nothing local fragment = hash * fragmentstr + nothing local validurl = scheme * authority * path * query * fragment local parser = Ct(validurl) lpegpatterns.url = validurl lpegpatterns.urlsplitter = parser local escapes = { } setmetatable(escapes, { __index = function(t,k) local v = format("%%%02X",byte(k)) t[k] = v return v end }) local escaper = Cs((R("09","AZ","az")^1 + P(" ")/"%%20" + S("-./_")^1 + P(1) / escapes)^0) -- space happens most local unescaper = Cs((escapedchar + 1)^0) lpegpatterns.urlunescaped = escapedchar lpegpatterns.urlescaper = escaper lpegpatterns.urlunescaper = unescaper -- todo: reconsider Ct as we can as well have five return values (saves a table) -- so we can have two parsers, one with and one without local function split(str) return (type(str) == "string" and lpegmatch(parser,str)) or str end local isscheme = schemestr * colon * slash * slash -- this test also assumes authority local function hasscheme(str) if str then local scheme = lpegmatch(isscheme,str) -- at least one character return scheme ~= "" and scheme or false else return false end end --~ print(hasscheme("home:")) --~ print(hasscheme("home://")) -- todo: cache them local rootletter = R("az","AZ") + S("_-+") local separator = P("://") local qualified = P(".")^0 * P("/") + rootletter * P(":") + rootletter^1 * separator + rootletter^1 * P("/") local rootbased = P("/") + rootletter * P(":") local barswapper = replacer("|",":") local backslashswapper = replacer("\\","/") -- queries: local equal = P("=") local amp = P("&") local key = Cs(((escapedchar+1)-equal )^0) local value = Cs(((escapedchar+1)-amp -endofstring)^0) local splitquery = Cf ( Ct("") * P { "sequence", sequence = V("pair") * (amp * V("pair"))^0, pair = Cg(key * equal * value), }, rawset) -- hasher local function hashed(str) -- not yet ok (/test?test) if str == "" then return { scheme = "invalid", original = str, } end local s = split(str) local rawscheme = s[1] local rawquery = s[4] local somescheme = rawscheme ~= "" local somequery = rawquery ~= "" if not somescheme and not somequery then s = { scheme = "file", authority = "", path = str, query = "", fragment = "", original = str, noscheme = true, filename = str, } else -- not always a filename but handy anyway local authority, path, filename = s[2], s[3] if authority == "" then filename = path elseif path == "" then filename = "" else filename = authority .. "/" .. path end s = { scheme = rawscheme, authority = authority, path = path, query = lpegmatch(unescaper,rawquery), -- unescaped, but possible conflict with & and = queries = lpegmatch(splitquery,rawquery), -- split first and then unescaped fragment = s[5], original = str, noscheme = false, filename = filename, } end return s end -- inspect(hashed("template://test")) -- Here we assume: -- -- files: /// = relative -- files: //// = absolute (!) --~ table.print(hashed("file://c:/opt/tex/texmf-local")) -- c:/opt/tex/texmf-local --~ table.print(hashed("file://opt/tex/texmf-local" )) -- opt/tex/texmf-local --~ table.print(hashed("file:///opt/tex/texmf-local" )) -- opt/tex/texmf-local --~ table.print(hashed("file:////opt/tex/texmf-local" )) -- /opt/tex/texmf-local --~ table.print(hashed("file:///./opt/tex/texmf-local" )) -- ./opt/tex/texmf-local --~ table.print(hashed("c:/opt/tex/texmf-local" )) -- c:/opt/tex/texmf-local --~ table.print(hashed("opt/tex/texmf-local" )) -- opt/tex/texmf-local --~ table.print(hashed("/opt/tex/texmf-local" )) -- /opt/tex/texmf-local url.split = split url.hasscheme = hasscheme url.hashed = hashed function url.addscheme(str,scheme) -- no authority if hasscheme(str) then return str elseif not scheme then return "file:///" .. str else return scheme .. ":///" .. str end end function url.construct(hash) -- dodo: we need to escape ! local fullurl, f = { }, 0 local scheme, authority, path, query, fragment = hash.scheme, hash.authority, hash.path, hash.query, hash.fragment if scheme and scheme ~= "" then f = f + 1 ; fullurl[f] = scheme .. "://" end if authority and authority ~= "" then f = f + 1 ; fullurl[f] = authority end if path and path ~= "" then f = f + 1 ; fullurl[f] = "/" .. path end if query and query ~= "" then f = f + 1 ; fullurl[f] = "?".. query end if fragment and fragment ~= "" then f = f + 1 ; fullurl[f] = "#".. fragment end return lpegmatch(escaper,concat(fullurl)) end local pattern = Cs(noslash * R("az","AZ") * (S(":|")/":") * noslash * P(1)^0) function url.filename(filename) local spec = hashed(filename) local path = spec.path return (spec.scheme == "file" and path and lpegmatch(pattern,path)) or filename end -- print(url.filename("/c|/test")) -- print(url.filename("/c/test")) local function escapestring(str) return lpegmatch(escaper,str) end url.escape = escapestring function url.query(str) if type(str) == "string" then return lpegmatch(splitquery,str) or "" else return str end end function url.toquery(data) local td = type(data) if td == "string" then return #str and escape(data) or nil -- beware of double escaping elseif td == "table" then if next(data) then local t = { } for k, v in next, data do t[#t+1] = format("%s=%s",k,escapestring(v)) end return concat(t,"&") end else -- nil is a signal that no query end end -- /test/ | /test | test/ | test => test local pattern = Cs(noslash^0 * (1 - noslash * P(-1))^0) function url.barepath(path) if not path or path == "" then return "" else return lpegmatch(pattern,path) end end -- print(url.barepath("/test"),url.barepath("test/"),url.barepath("/test/"),url.barepath("test")) -- print(url.barepath("/x/yz"),url.barepath("x/yz/"),url.barepath("/x/yz/"),url.barepath("x/yz")) --~ print(url.filename("file:///c:/oeps.txt")) --~ print(url.filename("c:/oeps.txt")) --~ print(url.filename("file:///oeps.txt")) --~ print(url.filename("file:///etc/test.txt")) --~ print(url.filename("/oeps.txt")) --~ from the spec on the web (sort of): --~ local function test(str) --~ local t = url.hashed(str) --~ t.constructed = url.construct(t) --~ print(table.serialize(t)) --~ end --~ inspect(url.hashed("http://www.pragma-ade.com/test%20test?test=test%20test&x=123%3d45")) --~ inspect(url.hashed("http://www.pragma-ade.com/test%20test?test=test%20test&x=123%3d45")) --~ test("sys:///./colo-rgb") --~ test("/data/site/output/q2p-develop/resources/ecaboperception4_res/topicresources/58313733/figuur-cow.jpg") --~ test("file:///M:/q2p/develop/output/q2p-develop/resources/ecaboperception4_res/topicresources/58313733") --~ test("M:/q2p/develop/output/q2p-develop/resources/ecaboperception4_res/topicresources/58313733") --~ test("file:///q2p/develop/output/q2p-develop/resources/ecaboperception4_res/topicresources/58313733") --~ test("/q2p/develop/output/q2p-develop/resources/ecaboperception4_res/topicresources/58313733") --~ test("file:///cow%20with%20spaces") --~ test("file:///cow%20with%20spaces.pdf") --~ test("cow%20with%20spaces.pdf") --~ test("some%20file") --~ test("/etc/passwords") --~ test("http://www.myself.com/some%20words.html") --~ test("file:///c:/oeps.txt") --~ test("file:///c|/oeps.txt") --~ test("file:///etc/oeps.txt") --~ test("file://./etc/oeps.txt") --~ test("file:////etc/oeps.txt") --~ test("ftp://ftp.is.co.za/rfc/rfc1808.txt") --~ test("http://www.ietf.org/rfc/rfc2396.txt") --~ test("ldap://[2001:db8::7]/c=GB?objectClass?one#what") --~ test("mailto:John.Doe@example.com") --~ test("news:comp.infosystems.www.servers.unix") --~ test("tel:+1-816-555-1212") --~ test("telnet://192.0.2.16:80/") --~ test("urn:oasis:names:specification:docbook:dtd:xml:4.1.2") --~ test("http://www.pragma-ade.com/spaced%20name") --~ test("zip:///oeps/oeps.zip#bla/bla.tex") --~ test("zip:///oeps/oeps.zip?bla/bla.tex") --~ table.print(url.hashed("/test?test")) context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-asana.mkiv0000644000175000017500000000244311754241457025423 0ustar norbertnorbert%D \module %D [ file=type-imp-asana, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Asana, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \loadtypescriptfile[texgyre] \starttypescriptcollection [asanamath] \starttypescript [\s!math] [asana] \definefontsynonym [AsanaMath] [\s!name:asanamath] \stoptypescript \starttypescript [\s!math] [asana] [\s!name] \loadfontgoodies[asana-math] \definefontsynonym [MathRoman] [AsanaMath] [\s!features=\s!math\mathsizesuffix,\s!goodies=asana-math] \stoptypescript \starttypescript[asana] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [palatino] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] [\s!rscale=1.075] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.075] \definetypeface [\typescriptone] [\s!mm] [\s!math] [\typescriptone] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-cel.mkii0000644000175000017500000000150611754241457024242 0ustar norbertnorbert%D \module %D [ file=lang-cel, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Celtic Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Celtic Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. % Breton, Welsh, Irish, Manx, Scottish Gaelic \unprotect \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xetx-chr.mkii0000644000175000017500000032557011244221744024323 0ustar norbertnorbert% filename : xetx-chr.tex % comment : generated by mtxrun --script chars --xtx % author : Hans Hagen, PRAGMA-ADE, Hasselt NL % copyright: PRAGMA ADE / ConTeXt Development Team % license : see context related readme files % named characters mapped onto utf (\\char is needed for accents) \def\textbackslash {\char"0005C } % REVERSE SOLIDUS: \ \def\textasciicircum {\char"0005E } % CIRCUMFLEX ACCENT: ^ \def\textunderscore {\char"0005F } % LOW LINE: _ \def\textgrave {\char"00060 } % GRAVE ACCENT: ` \def\idotaccent {\char"00069 } % LATIN SMALL LETTER I: i \def\textbraceleft {\char"0007B } % LEFT CURLY BRACKET: { \def\textbar {\char"0007C } % VERTICAL LINE: | \def\textbraceright {\char"0007D } % RIGHT CURLY BRACKET: } \def\textasciitilde {\char"0007E } % TILDE: ~ \def\nobreakspace {\char"000A0 } % NO-BREAK SPACE:   \def\exclamdown {\char"000A1 } % INVERTED EXCLAMATION MARK: ¡ \def\textcent {\char"000A2 } % CENT SIGN: ¢ \def\textsterling {\char"000A3 } % POUND SIGN: £ \def\textcurrency {\char"000A4 } % CURRENCY SIGN: ¤ \def\textyen {\char"000A5 } % YEN SIGN: ¥ \def\textbrokenbar {\char"000A6 } % BROKEN BAR: ¦ \def\sectionmark {\char"000A7 } % SECTION SIGN: § \def\textdiaeresis {\char"000A8 } % DIAERESIS: ¨ \def\copyright {\char"000A9 } % COPYRIGHT SIGN: © \def\ordfeminine {\char"000AA } % FEMININE ORDINAL INDICATOR: ª \def\leftguillemot {\char"000AB } % LEFT-POINTING DOUBLE ANGLE QUOTATION MARK: « \def\textlognot {\char"000AC } % NOT SIGN: ¬ \def\softhyphen {\char"000AD } % SOFT HYPHEN: ­ \def\registered {\char"000AE } % REGISTERED SIGN: ® \def\textmacron {\char"000AF } % MACRON: ¯ \def\textdegree {\char"000B0 } % DEGREE SIGN: ° \def\textpm {\char"000B1 } % PLUS-MINUS SIGN: ± \def\twosuperior {\char"000B2 } % SUPERSCRIPT TWO: ² \def\threesuperior {\char"000B3 } % SUPERSCRIPT THREE: ³ \def\textacute {\char"000B4 } % ACUTE ACCENT: ´ \def\textmu {\char"000B5 } % MICRO SIGN: µ \def\paragraphmark {\char"000B6 } % PILCROW SIGN: ¶ \def\periodcentered {\char"000B7 } % MIDDLE DOT: · \def\textcedilla {\char"000B8 } % CEDILLA: ¸ \def\onesuperior {\char"000B9 } % SUPERSCRIPT ONE: ¹ \def\ordmasculine {\char"000BA } % MASCULINE ORDINAL INDICATOR: º \def\rightguillemot {\char"000BB } % RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK: » \def\onequarter {\char"000BC } % VULGAR FRACTION ONE QUARTER: ¼ \def\onehalf {\char"000BD } % VULGAR FRACTION ONE HALF: ½ \def\threequarter {\char"000BE } % VULGAR FRACTION THREE QUARTERS: ¾ \def\questiondown {\char"000BF } % INVERTED QUESTION MARK: ¿ \def\Agrave {\char"000C0 } % LATIN CAPITAL LETTER A WITH GRAVE: À \def\Aacute {\char"000C1 } % LATIN CAPITAL LETTER A WITH ACUTE: Á \def\Acircumflex {\char"000C2 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX:  \def\Atilde {\char"000C3 } % LATIN CAPITAL LETTER A WITH TILDE: à \def\Adiaeresis {\char"000C4 } % LATIN CAPITAL LETTER A WITH DIAERESIS: Ä \def\Aring {\char"000C5 } % LATIN CAPITAL LETTER A WITH RING ABOVE: Å \def\AEligature {\char"000C6 } % LATIN CAPITAL LETTER AE: Æ \def\Ccedilla {\char"000C7 } % LATIN CAPITAL LETTER C WITH CEDILLA: Ç \def\Egrave {\char"000C8 } % LATIN CAPITAL LETTER E WITH GRAVE: È \def\Eacute {\char"000C9 } % LATIN CAPITAL LETTER E WITH ACUTE: É \def\Ecircumflex {\char"000CA } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX: Ê \def\Ediaeresis {\char"000CB } % LATIN CAPITAL LETTER E WITH DIAERESIS: Ë \def\Igrave {\char"000CC } % LATIN CAPITAL LETTER I WITH GRAVE: Ì \def\Iacute {\char"000CD } % LATIN CAPITAL LETTER I WITH ACUTE: Í \def\Icircumflex {\char"000CE } % LATIN CAPITAL LETTER I WITH CIRCUMFLEX: Î \def\Idiaeresis {\char"000CF } % LATIN CAPITAL LETTER I WITH DIAERESIS: Ï \def\Eth {\char"000D0 } % LATIN CAPITAL LETTER ETH: Ð \def\Ntilde {\char"000D1 } % LATIN CAPITAL LETTER N WITH TILDE: Ñ \def\Ograve {\char"000D2 } % LATIN CAPITAL LETTER O WITH GRAVE: Ò \def\Oacute {\char"000D3 } % LATIN CAPITAL LETTER O WITH ACUTE: Ó \def\Ocircumflex {\char"000D4 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX: Ô \def\Otilde {\char"000D5 } % LATIN CAPITAL LETTER O WITH TILDE: Õ \def\Odiaeresis {\char"000D6 } % LATIN CAPITAL LETTER O WITH DIAERESIS: Ö \def\textmultiply {\char"000D7 } % MULTIPLICATION SIGN: × \def\Ostroke {\char"000D8 } % LATIN CAPITAL LETTER O WITH STROKE: Ø \def\Ugrave {\char"000D9 } % LATIN CAPITAL LETTER U WITH GRAVE: Ù \def\Uacute {\char"000DA } % LATIN CAPITAL LETTER U WITH ACUTE: Ú \def\Ucircumflex {\char"000DB } % LATIN CAPITAL LETTER U WITH CIRCUMFLEX: Û \def\Udiaeresis {\char"000DC } % LATIN CAPITAL LETTER U WITH DIAERESIS: Ü \def\Yacute {\char"000DD } % LATIN CAPITAL LETTER Y WITH ACUTE: Ý \def\Thorn {\char"000DE } % LATIN CAPITAL LETTER THORN: Þ \def\ssharp {\char"000DF } % LATIN SMALL LETTER SHARP S: ß \def\agrave {\char"000E0 } % LATIN SMALL LETTER A WITH GRAVE: à \def\aacute {\char"000E1 } % LATIN SMALL LETTER A WITH ACUTE: á \def\acircumflex {\char"000E2 } % LATIN SMALL LETTER A WITH CIRCUMFLEX: â \def\atilde {\char"000E3 } % LATIN SMALL LETTER A WITH TILDE: ã \def\adiaeresis {\char"000E4 } % LATIN SMALL LETTER A WITH DIAERESIS: ä \def\aring {\char"000E5 } % LATIN SMALL LETTER A WITH RING ABOVE: å \def\aeligature {\char"000E6 } % LATIN SMALL LETTER AE: æ \def\ccedilla {\char"000E7 } % LATIN SMALL LETTER C WITH CEDILLA: ç \def\egrave {\char"000E8 } % LATIN SMALL LETTER E WITH GRAVE: è \def\eacute {\char"000E9 } % LATIN SMALL LETTER E WITH ACUTE: é \def\ecircumflex {\char"000EA } % LATIN SMALL LETTER E WITH CIRCUMFLEX: ê \def\ediaeresis {\char"000EB } % LATIN SMALL LETTER E WITH DIAERESIS: ë \def\igrave {\char"000EC } % LATIN SMALL LETTER I WITH GRAVE: ì \def\iacute {\char"000ED } % LATIN SMALL LETTER I WITH ACUTE: í \def\icircumflex {\char"000EE } % LATIN SMALL LETTER I WITH CIRCUMFLEX: î \def\idiaeresis {\char"000EF } % LATIN SMALL LETTER I WITH DIAERESIS: ï \def\ntilde {\char"000F1 } % LATIN SMALL LETTER N WITH TILDE: ñ \def\ograve {\char"000F2 } % LATIN SMALL LETTER O WITH GRAVE: ò \def\oacute {\char"000F3 } % LATIN SMALL LETTER O WITH ACUTE: ó \def\ocircumflex {\char"000F4 } % LATIN SMALL LETTER O WITH CIRCUMFLEX: ô \def\otilde {\char"000F5 } % LATIN SMALL LETTER O WITH TILDE: õ \def\odiaeresis {\char"000F6 } % LATIN SMALL LETTER O WITH DIAERESIS: ö \def\textdiv {\char"000F7 } % DIVISION SIGN: ÷ \def\ostroke {\char"000F8 } % LATIN SMALL LETTER O WITH STROKE: ø \def\ugrave {\char"000F9 } % LATIN SMALL LETTER U WITH GRAVE: ù \def\uacute {\char"000FA } % LATIN SMALL LETTER U WITH ACUTE: ú \def\ucircumflex {\char"000FB } % LATIN SMALL LETTER U WITH CIRCUMFLEX: û \def\udiaeresis {\char"000FC } % LATIN SMALL LETTER U WITH DIAERESIS: ü \def\yacute {\char"000FD } % LATIN SMALL LETTER Y WITH ACUTE: ý \def\thorn {\char"000FE } % LATIN SMALL LETTER THORN: þ \def\ydiaeresis {\char"000FF } % LATIN SMALL LETTER Y WITH DIAERESIS: ÿ \def\Amacron {\char"00100 } % LATIN CAPITAL LETTER A WITH MACRON: Ā \def\amacron {\char"00101 } % LATIN SMALL LETTER A WITH MACRON: ā \def\Abreve {\char"00102 } % LATIN CAPITAL LETTER A WITH BREVE: Ă \def\abreve {\char"00103 } % LATIN SMALL LETTER A WITH BREVE: ă \def\Aogonek {\char"00104 } % LATIN CAPITAL LETTER A WITH OGONEK: Ą \def\aogonek {\char"00105 } % LATIN SMALL LETTER A WITH OGONEK: ą \def\Cacute {\char"00106 } % LATIN CAPITAL LETTER C WITH ACUTE: Ć \def\cacute {\char"00107 } % LATIN SMALL LETTER C WITH ACUTE: ć \def\Ccircumflex {\char"00108 } % LATIN CAPITAL LETTER C WITH CIRCUMFLEX: Ĉ \def\ccircumflex {\char"00109 } % LATIN SMALL LETTER C WITH CIRCUMFLEX: ĉ \def\Cdotaccent {\char"0010A } % LATIN CAPITAL LETTER C WITH DOT ABOVE: Ċ \def\cdotaccent {\char"0010B } % LATIN SMALL LETTER C WITH DOT ABOVE: ċ \def\Ccaron {\char"0010C } % LATIN CAPITAL LETTER C WITH CARON: Č \def\ccaron {\char"0010D } % LATIN SMALL LETTER C WITH CARON: č \def\Dcaron {\char"0010E } % LATIN CAPITAL LETTER D WITH CARON: Ď \def\dcaron {\char"0010F } % LATIN SMALL LETTER D WITH CARON: ď \def\Dstroke {\char"00110 } % LATIN CAPITAL LETTER D WITH STROKE: Đ \def\dstroke {\char"00111 } % LATIN SMALL LETTER D WITH STROKE: đ \def\Emacron {\char"00112 } % LATIN CAPITAL LETTER E WITH MACRON: Ē \def\emacron {\char"00113 } % LATIN SMALL LETTER E WITH MACRON: ē \def\Ebreve {\char"00114 } % LATIN CAPITAL LETTER E WITH BREVE: Ĕ \def\ebreve {\char"00115 } % LATIN SMALL LETTER E WITH BREVE: ĕ \def\Edotaccent {\char"00116 } % LATIN CAPITAL LETTER E WITH DOT ABOVE: Ė \def\edotaccent {\char"00117 } % LATIN SMALL LETTER E WITH DOT ABOVE: ė \def\Eogonek {\char"00118 } % LATIN CAPITAL LETTER E WITH OGONEK: Ę \def\eogonek {\char"00119 } % LATIN SMALL LETTER E WITH OGONEK: ę \def\Ecaron {\char"0011A } % LATIN CAPITAL LETTER E WITH CARON: Ě \def\ecaron {\char"0011B } % LATIN SMALL LETTER E WITH CARON: ě \def\Gcircumflex {\char"0011C } % LATIN CAPITAL LETTER G WITH CIRCUMFLEX: Ĝ \def\gcircumflex {\char"0011D } % LATIN SMALL LETTER G WITH CIRCUMFLEX: ĝ \def\Gbreve {\char"0011E } % LATIN CAPITAL LETTER G WITH BREVE: Ğ \def\gbreve {\char"0011F } % LATIN SMALL LETTER G WITH BREVE: ğ \def\Gdotaccent {\char"00120 } % LATIN CAPITAL LETTER G WITH DOT ABOVE: Ġ \def\gdotaccent {\char"00121 } % LATIN SMALL LETTER G WITH DOT ABOVE: ġ \def\Gcommaaccent {\char"00122 } % LATIN CAPITAL LETTER G WITH CEDILLA: Ģ \def\gcommaaccent {\char"00123 } % LATIN SMALL LETTER G WITH CEDILLA: ģ \def\Hcircumflex {\char"00124 } % LATIN CAPITAL LETTER H WITH CIRCUMFLEX: Ĥ \def\hcircumflex {\char"00125 } % LATIN SMALL LETTER H WITH CIRCUMFLEX: ĥ \def\Hstroke {\char"00126 } % LATIN CAPITAL LETTER H WITH STROKE: Ħ \def\hstroke {\char"00127 } % LATIN SMALL LETTER H WITH STROKE: ħ \def\Itilde {\char"00128 } % LATIN CAPITAL LETTER I WITH TILDE: Ĩ \def\itilde {\char"00129 } % LATIN SMALL LETTER I WITH TILDE: ĩ \def\Imacron {\char"0012A } % LATIN CAPITAL LETTER I WITH MACRON: Ī \def\imacron {\char"0012B } % LATIN SMALL LETTER I WITH MACRON: ī \def\Ibreve {\char"0012C } % LATIN CAPITAL LETTER I WITH BREVE: Ĭ \def\ibreve {\char"0012D } % LATIN SMALL LETTER I WITH BREVE: ĭ \def\Iogonek {\char"0012E } % LATIN CAPITAL LETTER I WITH OGONEK: Į \def\iogonek {\char"0012F } % LATIN SMALL LETTER I WITH OGONEK: į \def\Idotaccent {\char"00130 } % LATIN CAPITAL LETTER I WITH DOT ABOVE: İ \def\dotlessi {\char"00131 } % LATIN SMALL LETTER DOTLESS I: ı \def\IJligature {\char"00132 } % LATIN CAPITAL LIGATURE IJ: IJ \def\ijligature {\char"00133 } % LATIN SMALL LIGATURE IJ: ij \def\Jcircumflex {\char"00134 } % LATIN CAPITAL LETTER J WITH CIRCUMFLEX: Ĵ \def\jcircumflex {\char"00135 } % LATIN SMALL LETTER J WITH CIRCUMFLEX: ĵ \def\Kcommaaccent {\char"00136 } % LATIN CAPITAL LETTER K WITH CEDILLA: Ķ \def\kcommaaccent {\char"00137 } % LATIN SMALL LETTER K WITH CEDILLA: ķ \def\kkra {\char"00138 } % LATIN SMALL LETTER KRA: ĸ \def\Lacute {\char"00139 } % LATIN CAPITAL LETTER L WITH ACUTE: Ĺ \def\lacute {\char"0013A } % LATIN SMALL LETTER L WITH ACUTE: ĺ \def\Lcommaaccent {\char"0013B } % LATIN CAPITAL LETTER L WITH CEDILLA: Ļ \def\lcommaaccent {\char"0013C } % LATIN SMALL LETTER L WITH CEDILLA: ļ \def\Lcaron {\char"0013D } % LATIN CAPITAL LETTER L WITH CARON: Ľ \def\lcaron {\char"0013E } % LATIN SMALL LETTER L WITH CARON: ľ \def\Ldotmiddle {\char"0013F } % LATIN CAPITAL LETTER L WITH MIDDLE DOT: Ŀ \def\ldotmiddle {\char"00140 } % LATIN SMALL LETTER L WITH MIDDLE DOT: ŀ \def\Lstroke {\char"00141 } % LATIN CAPITAL LETTER L WITH STROKE: Ł \def\lstroke {\char"00142 } % LATIN SMALL LETTER L WITH STROKE: ł \def\Nacute {\char"00143 } % LATIN CAPITAL LETTER N WITH ACUTE: Ń \def\nacute {\char"00144 } % LATIN SMALL LETTER N WITH ACUTE: ń \def\Ncommaaccent {\char"00145 } % LATIN CAPITAL LETTER N WITH CEDILLA: Ņ \def\ncommaaccent {\char"00146 } % LATIN SMALL LETTER N WITH CEDILLA: ņ \def\Ncaron {\char"00147 } % LATIN CAPITAL LETTER N WITH CARON: Ň \def\ncaron {\char"00148 } % LATIN SMALL LETTER N WITH CARON: ň \def\napostrophe {\char"00149 } % LATIN SMALL LETTER N PRECEDED BY APOSTROPHE: ʼn \def\Neng {\char"0014A } % LATIN CAPITAL LETTER ENG: Ŋ \def\neng {\char"0014B } % LATIN SMALL LETTER ENG: ŋ \def\Omacron {\char"0014C } % LATIN CAPITAL LETTER O WITH MACRON: Ō \def\omacron {\char"0014D } % LATIN SMALL LETTER O WITH MACRON: ō \def\Obreve {\char"0014E } % LATIN CAPITAL LETTER O WITH BREVE: Ŏ \def\obreve {\char"0014F } % LATIN SMALL LETTER O WITH BREVE: ŏ \def\Ohungarumlaut {\char"00150 } % LATIN CAPITAL LETTER O WITH DOUBLE ACUTE: Ő \def\ohungarumlaut {\char"00151 } % LATIN SMALL LETTER O WITH DOUBLE ACUTE: ő \def\OEligature {\char"00152 } % LATIN CAPITAL LIGATURE OE: Œ \def\oeligature {\char"00153 } % LATIN SMALL LIGATURE OE: œ \def\Racute {\char"00154 } % LATIN CAPITAL LETTER R WITH ACUTE: Ŕ \def\racute {\char"00155 } % LATIN SMALL LETTER R WITH ACUTE: ŕ \def\Rcommaaccent {\char"00156 } % LATIN CAPITAL LETTER R WITH CEDILLA: Ŗ \def\rcommaaccent {\char"00157 } % LATIN SMALL LETTER R WITH CEDILLA: ŗ \def\Rcaron {\char"00158 } % LATIN CAPITAL LETTER R WITH CARON: Ř \def\rcaron {\char"00159 } % LATIN SMALL LETTER R WITH CARON: ř \def\Sacute {\char"0015A } % LATIN CAPITAL LETTER S WITH ACUTE: Ś \def\sacute {\char"0015B } % LATIN SMALL LETTER S WITH ACUTE: ś \def\Scircumflex {\char"0015C } % LATIN CAPITAL LETTER S WITH CIRCUMFLEX: Ŝ \def\scircumflex {\char"0015D } % LATIN SMALL LETTER S WITH CIRCUMFLEX: ŝ \def\Scedilla {\char"0015E } % LATIN CAPITAL LETTER S WITH CEDILLA: Ş \def\scedilla {\char"0015F } % LATIN SMALL LETTER S WITH CEDILLA: ş \def\Scaron {\char"00160 } % LATIN CAPITAL LETTER S WITH CARON: Š \def\scaron {\char"00161 } % LATIN SMALL LETTER S WITH CARON: š \def\Tcedilla {\char"00162 } % LATIN CAPITAL LETTER T WITH CEDILLA: Ţ \def\tcedilla {\char"00163 } % LATIN SMALL LETTER T WITH CEDILLA: ţ \def\Tcaron {\char"00164 } % LATIN CAPITAL LETTER T WITH CARON: Ť \def\tcaron {\char"00165 } % LATIN SMALL LETTER T WITH CARON: ť \def\Tstroke {\char"00166 } % LATIN CAPITAL LETTER T WITH STROKE: Ŧ \def\tstroke {\char"00167 } % LATIN SMALL LETTER T WITH STROKE: ŧ \def\Utilde {\char"00168 } % LATIN CAPITAL LETTER U WITH TILDE: Ũ \def\utilde {\char"00169 } % LATIN SMALL LETTER U WITH TILDE: ũ \def\Umacron {\char"0016A } % LATIN CAPITAL LETTER U WITH MACRON: Ū \def\umacron {\char"0016B } % LATIN SMALL LETTER U WITH MACRON: ū \def\Ubreve {\char"0016C } % LATIN CAPITAL LETTER U WITH BREVE: Ŭ \def\ubreve {\char"0016D } % LATIN SMALL LETTER U WITH BREVE: ŭ \def\Uring {\char"0016E } % LATIN CAPITAL LETTER U WITH RING ABOVE: Ů \def\uring {\char"0016F } % LATIN SMALL LETTER U WITH RING ABOVE: ů \def\Uhungarumlaut {\char"00170 } % LATIN CAPITAL LETTER U WITH DOUBLE ACUTE: Ű \def\uhungarumlaut {\char"00171 } % LATIN SMALL LETTER U WITH DOUBLE ACUTE: ű \def\Uogonek {\char"00172 } % LATIN CAPITAL LETTER U WITH OGONEK: Ų \def\uogonek {\char"00173 } % LATIN SMALL LETTER U WITH OGONEK: ų \def\Wcircumflex {\char"00174 } % LATIN CAPITAL LETTER W WITH CIRCUMFLEX: Ŵ \def\wcircumflex {\char"00175 } % LATIN SMALL LETTER W WITH CIRCUMFLEX: ŵ \def\Ycircumflex {\char"00176 } % LATIN CAPITAL LETTER Y WITH CIRCUMFLEX: Ŷ \def\ycircumflex {\char"00177 } % LATIN SMALL LETTER Y WITH CIRCUMFLEX: ŷ \def\Ydiaeresis {\char"00178 } % LATIN CAPITAL LETTER Y WITH DIAERESIS: Ÿ \def\Zacute {\char"00179 } % LATIN CAPITAL LETTER Z WITH ACUTE: Ź \def\zacute {\char"0017A } % LATIN SMALL LETTER Z WITH ACUTE: ź \def\Zdotaccent {\char"0017B } % LATIN CAPITAL LETTER Z WITH DOT ABOVE: Ż \def\zdotaccent {\char"0017C } % LATIN SMALL LETTER Z WITH DOT ABOVE: ż \def\Zcaron {\char"0017D } % LATIN CAPITAL LETTER Z WITH CARON: Ž \def\zcaron {\char"0017E } % LATIN SMALL LETTER Z WITH CARON: ž \def\slong {\char"0017F } % LATIN SMALL LETTER LONG S: ſ \def\bstroke {\char"00180 } % LATIN SMALL LETTER B WITH STROKE: ƀ \def\Bhook {\char"00181 } % LATIN CAPITAL LETTER B WITH HOOK: Ɓ \def\Chook {\char"00187 } % LATIN CAPITAL LETTER C WITH HOOK: Ƈ \def\chook {\char"00188 } % LATIN SMALL LETTER C WITH HOOK: ƈ \def\Dafrican {\char"00189 } % LATIN CAPITAL LETTER AFRICAN D: Ɖ \def\Dhook {\char"0018A } % LATIN CAPITAL LETTER D WITH HOOK: Ɗ \def\Schwa {\char"0018F } % LATIN CAPITAL LETTER SCHWA: Ə \def\Fhook {\char"00191 } % LATIN CAPITAL LETTER F WITH HOOK: Ƒ \def\fhook {\char"00192 } % LATIN SMALL LETTER F WITH HOOK: ƒ \def\Ghook {\char"00193 } % LATIN CAPITAL LETTER G WITH HOOK: Ɠ \def\Istroke {\char"00197 } % LATIN CAPITAL LETTER I WITH STROKE: Ɨ \def\Khook {\char"00198 } % LATIN CAPITAL LETTER K WITH HOOK: Ƙ \def\khook {\char"00199 } % LATIN SMALL LETTER K WITH HOOK: ƙ \def\lbar {\char"0019A } % LATIN SMALL LETTER L WITH BAR: ƚ \def\Ohorn {\char"001A0 } % LATIN CAPITAL LETTER O WITH HORN: Ơ \def\ohorn {\char"001A1 } % LATIN SMALL LETTER O WITH HORN: ơ \def\Phook {\char"001A4 } % LATIN CAPITAL LETTER P WITH HOOK: Ƥ \def\phook {\char"001A5 } % LATIN SMALL LETTER P WITH HOOK: ƥ \def\Thook {\char"001AC } % LATIN CAPITAL LETTER T WITH HOOK: Ƭ \def\thook {\char"001AD } % LATIN SMALL LETTER T WITH HOOK: ƭ \def\Uhorn {\char"001AF } % LATIN CAPITAL LETTER U WITH HORN: Ư \def\uhorn {\char"001B0 } % LATIN SMALL LETTER U WITH HORN: ư \def\Uhook {\char"001B2 } % LATIN CAPITAL LETTER V WITH HOOK: Ʋ \def\Yhook {\char"001B3 } % LATIN CAPITAL LETTER Y WITH HOOK: Ƴ \def\yhook {\char"001B4 } % LATIN SMALL LETTER Y WITH HOOK: ƴ \def\Zstroke {\char"001B5 } % LATIN CAPITAL LETTER Z WITH STROKE: Ƶ \def\zstroke {\char"001B6 } % LATIN SMALL LETTER Z WITH STROKE: ƶ \def\DZcaronligature {\char"001C4 } % LATIN CAPITAL LETTER DZ WITH CARON: DŽ \def\Dzcaronligature {\char"001C5 } % LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON: Dž \def\dzcaronligature {\char"001C6 } % LATIN SMALL LETTER DZ WITH CARON: dž \def\LJligature {\char"001C7 } % LATIN CAPITAL LETTER LJ: LJ \def\Ljligature {\char"001C8 } % LATIN CAPITAL LETTER L WITH SMALL LETTER J: Lj \def\ljligature {\char"001C9 } % LATIN SMALL LETTER LJ: lj \def\NJligature {\char"001CA } % LATIN CAPITAL LETTER NJ: NJ \def\Njligature {\char"001CB } % LATIN CAPITAL LETTER N WITH SMALL LETTER J: Nj \def\njligature {\char"001CC } % LATIN SMALL LETTER NJ: nj \def\Acaron {\char"001CD } % LATIN CAPITAL LETTER A WITH CARON: Ǎ \def\acaron {\char"001CE } % LATIN SMALL LETTER A WITH CARON: ǎ \def\Icaron {\char"001CF } % LATIN CAPITAL LETTER I WITH CARON: Ǐ \def\icaron {\char"001D0 } % LATIN SMALL LETTER I WITH CARON: ǐ \def\Ocaron {\char"001D1 } % LATIN CAPITAL LETTER O WITH CARON: Ǒ \def\ocaron {\char"001D2 } % LATIN SMALL LETTER O WITH CARON: ǒ \def\Ucaron {\char"001D3 } % LATIN CAPITAL LETTER U WITH CARON: Ǔ \def\ucaron {\char"001D4 } % LATIN SMALL LETTER U WITH CARON: ǔ \def\Udiaeresismacron {\char"001D5 } % LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON: Ǖ \def\udiaeresismacron {\char"001D6 } % LATIN SMALL LETTER U WITH DIAERESIS AND MACRON: ǖ \def\Udiaeresisacute {\char"001D7 } % LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE: Ǘ \def\udiaeresisacute {\char"001D8 } % LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE: ǘ \def\Udiaeresiscaron {\char"001D9 } % LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON: Ǚ \def\udiaeresiscaron {\char"001DA } % LATIN SMALL LETTER U WITH DIAERESIS AND CARON: ǚ \def\Udiaeresisgrave {\char"001DB } % LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE: Ǜ \def\udiaeresisgrave {\char"001DC } % LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE: ǜ \def\Adiaeresismacron {\char"001DE } % LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON: Ǟ \def\adiaeresismacron {\char"001DF } % LATIN SMALL LETTER A WITH DIAERESIS AND MACRON: ǟ \def\Adotaccentmacron {\char"001E0 } % LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON: Ǡ \def\adotaccentmacron {\char"001E1 } % LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON: ǡ \def\AEmacron {\char"001E2 } % LATIN CAPITAL LETTER AE WITH MACRON: Ǣ \def\aemacron {\char"001E3 } % LATIN SMALL LETTER AE WITH MACRON: ǣ \def\Gstroke {\char"001E4 } % LATIN CAPITAL LETTER G WITH STROKE: Ǥ \def\gstroke {\char"001E5 } % LATIN SMALL LETTER G WITH STROKE: ǥ \def\Gcaron {\char"001E6 } % LATIN CAPITAL LETTER G WITH CARON: Ǧ \def\gcaron {\char"001E7 } % LATIN SMALL LETTER G WITH CARON: ǧ \def\Kcaron {\char"001E8 } % LATIN CAPITAL LETTER K WITH CARON: Ǩ \def\kcaron {\char"001E9 } % LATIN SMALL LETTER K WITH CARON: ǩ \def\Oogonek {\char"001EA } % LATIN CAPITAL LETTER O WITH OGONEK: Ǫ \def\oogonek {\char"001EB } % LATIN SMALL LETTER O WITH OGONEK: ǫ \def\Oogonekmacron {\char"001EC } % LATIN CAPITAL LETTER O WITH OGONEK AND MACRON: Ǭ \def\oogonekmacron {\char"001ED } % LATIN SMALL LETTER O WITH OGONEK AND MACRON: ǭ \def\jcaron {\char"001F0 } % LATIN SMALL LETTER J WITH CARON: ǰ \def\DZligature {\char"001F1 } % LATIN CAPITAL LETTER DZ: DZ \def\Dzligature {\char"001F2 } % LATIN CAPITAL LETTER D WITH SMALL LETTER Z: Dz \def\dzligature {\char"001F3 } % LATIN SMALL LETTER DZ: dz \def\Gacute {\char"001F4 } % LATIN CAPITAL LETTER G WITH ACUTE: Ǵ \def\gacute {\char"001F5 } % LATIN SMALL LETTER G WITH ACUTE: ǵ \def\Ngrave {\char"001F8 } % LATIN CAPITAL LETTER N WITH GRAVE: Ǹ \def\ngrave {\char"001F9 } % LATIN SMALL LETTER N WITH GRAVE: ǹ \def\Aringacute {\char"001FA } % LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE: Ǻ \def\aringacute {\char"001FB } % LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE: ǻ \def\AEacute {\char"001FC } % LATIN CAPITAL LETTER AE WITH ACUTE: Ǽ \def\aeacute {\char"001FD } % LATIN SMALL LETTER AE WITH ACUTE: ǽ \def\Ostrokeacute {\char"001FE } % LATIN CAPITAL LETTER O WITH STROKE AND ACUTE: Ǿ \def\ostrokeacute {\char"001FF } % LATIN SMALL LETTER O WITH STROKE AND ACUTE: ǿ \def\Adoublegrave {\char"00200 } % LATIN CAPITAL LETTER A WITH DOUBLE GRAVE: Ȁ \def\adoublegrave {\char"00201 } % LATIN SMALL LETTER A WITH DOUBLE GRAVE: ȁ \def\Ainvertedbreve {\char"00202 } % LATIN CAPITAL LETTER A WITH INVERTED BREVE: Ȃ \def\ainvertedbreve {\char"00203 } % LATIN SMALL LETTER A WITH INVERTED BREVE: ȃ \def\Edoublegrave {\char"00204 } % LATIN CAPITAL LETTER E WITH DOUBLE GRAVE: Ȅ \def\edoublegrave {\char"00205 } % LATIN SMALL LETTER E WITH DOUBLE GRAVE: ȅ \def\Einvertedbreve {\char"00206 } % LATIN CAPITAL LETTER E WITH INVERTED BREVE: Ȇ \def\einvertedbreve {\char"00207 } % LATIN SMALL LETTER E WITH INVERTED BREVE: ȇ \def\Idoublegrave {\char"00208 } % LATIN CAPITAL LETTER I WITH DOUBLE GRAVE: Ȉ \def\idoublegrave {\char"00209 } % LATIN SMALL LETTER I WITH DOUBLE GRAVE: ȉ \def\Iinvertedbreve {\char"0020A } % LATIN CAPITAL LETTER I WITH INVERTED BREVE: Ȋ \def\iinvertedbreve {\char"0020B } % LATIN SMALL LETTER I WITH INVERTED BREVE: ȋ \def\Odoublegrave {\char"0020C } % LATIN CAPITAL LETTER O WITH DOUBLE GRAVE: Ȍ \def\odoublegrave {\char"0020D } % LATIN SMALL LETTER O WITH DOUBLE GRAVE: ȍ \def\Oinvertedbreve {\char"0020E } % LATIN CAPITAL LETTER O WITH INVERTED BREVE: Ȏ \def\oinvertedbreve {\char"0020F } % LATIN SMALL LETTER O WITH INVERTED BREVE: ȏ \def\Rdoublegrave {\char"00210 } % LATIN CAPITAL LETTER R WITH DOUBLE GRAVE: Ȑ \def\rdoublegrave {\char"00211 } % LATIN SMALL LETTER R WITH DOUBLE GRAVE: ȑ \def\Rinvertedbreve {\char"00212 } % LATIN CAPITAL LETTER R WITH INVERTED BREVE: Ȓ \def\rinvertedbreve {\char"00213 } % LATIN SMALL LETTER R WITH INVERTED BREVE: ȓ \def\Udoublegrave {\char"00214 } % LATIN CAPITAL LETTER U WITH DOUBLE GRAVE: Ȕ \def\udoublegrave {\char"00215 } % LATIN SMALL LETTER U WITH DOUBLE GRAVE: ȕ \def\Uinvertedbreve {\char"00216 } % LATIN CAPITAL LETTER U WITH INVERTED BREVE: Ȗ \def\uinvertedbreve {\char"00217 } % LATIN SMALL LETTER U WITH INVERTED BREVE: ȗ \def\Scommaaccent {\char"00218 } % LATIN CAPITAL LETTER S WITH COMMA BELOW: Ș \def\scommaaccent {\char"00219 } % LATIN SMALL LETTER S WITH COMMA BELOW: ș \def\Tcommaaccent {\char"0021A } % LATIN CAPITAL LETTER T WITH COMMA BELOW: Ț \def\tcommaaccent {\char"0021B } % LATIN SMALL LETTER T WITH COMMA BELOW: ț \def\Hcaron {\char"0021E } % LATIN CAPITAL LETTER H WITH CARON: Ȟ \def\hcaron {\char"0021F } % LATIN SMALL LETTER H WITH CARON: ȟ \def\dcurl {\char"00221 } % LATIN SMALL LETTER D WITH CURL: ȡ \def\Zhook {\char"00224 } % LATIN CAPITAL LETTER Z WITH HOOK: Ȥ \def\zhook {\char"00225 } % LATIN SMALL LETTER Z WITH HOOK: ȥ \def\Adotaccent {\char"00226 } % LATIN CAPITAL LETTER A WITH DOT ABOVE: Ȧ \def\adotaccent {\char"00227 } % LATIN SMALL LETTER A WITH DOT ABOVE: ȧ \def\Ecedilla {\char"00228 } % LATIN CAPITAL LETTER E WITH CEDILLA: Ȩ \def\ecedilla {\char"00229 } % LATIN SMALL LETTER E WITH CEDILLA: ȩ \def\Odiaeresismacron {\char"0022A } % LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON: Ȫ \def\odiaeresismacron {\char"0022B } % LATIN SMALL LETTER O WITH DIAERESIS AND MACRON: ȫ \def\Otildemacron {\char"0022C } % LATIN CAPITAL LETTER O WITH TILDE AND MACRON: Ȭ \def\otildemacron {\char"0022D } % LATIN SMALL LETTER O WITH TILDE AND MACRON: ȭ \def\Odotaccent {\char"0022E } % LATIN CAPITAL LETTER O WITH DOT ABOVE: Ȯ \def\odotaccent {\char"0022F } % LATIN SMALL LETTER O WITH DOT ABOVE: ȯ \def\Odotaccentmacron {\char"00230 } % LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON: Ȱ \def\odotaccentmacron {\char"00231 } % LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON: ȱ \def\Ymacron {\char"00232 } % LATIN CAPITAL LETTER Y WITH MACRON: Ȳ \def\ymacron {\char"00233 } % LATIN SMALL LETTER Y WITH MACRON: ȳ \def\lcurl {\char"00234 } % LATIN SMALL LETTER L WITH CURL: ȴ \def\ncurl {\char"00235 } % LATIN SMALL LETTER N WITH CURL: ȵ \def\tcurl {\char"00236 } % LATIN SMALL LETTER T WITH CURL: ȶ \def\dotlessj {\char"00237 } % LATIN SMALL LETTER DOTLESS J: ȷ \def\Astroke {\char"0023A } % LATIN CAPITAL LETTER A WITH STROKE: Ⱥ \def\Cstroke {\char"0023B } % LATIN CAPITAL LETTER C WITH STROKE: Ȼ \def\cstroke {\char"0023C } % LATIN SMALL LETTER C WITH STROKE: ȼ \def\Lbar {\char"0023D } % LATIN CAPITAL LETTER L WITH BAR: Ƚ \def\bhook {\char"00253 } % LATIN SMALL LETTER B WITH HOOK: ɓ \def\ccurl {\char"00255 } % LATIN SMALL LETTER C WITH CURL: ɕ \def\dtail {\char"00256 } % LATIN SMALL LETTER D WITH TAIL: ɖ \def\dhook {\char"00257 } % LATIN SMALL LETTER D WITH HOOK: ɗ \def\schwa {\char"00259 } % LATIN SMALL LETTER SCHWA: ə \def\schwahook {\char"0025A } % LATIN SMALL LETTER SCHWA WITH HOOK: ɚ \def\dotlessjstroke {\char"0025F } % LATIN SMALL LETTER DOTLESS J WITH STROKE: ɟ \def\textcircumflex {\char"002C6 } % MODIFIER LETTER CIRCUMFLEX ACCENT: ˆ \def\textcaron {\char"002C7 } % CARON: ˇ \def\textbreve {\char"002D8 } % BREVE: ˘ \def\textdotaccent {\char"002D9 } % DOT ABOVE: ˙ \def\textring {\char"002DA } % RING ABOVE: ˚ \def\textogonek {\char"002DB } % OGONEK: ˛ \def\texttilde {\char"002DC } % SMALL TILDE: ˜ \def\texthungarumlaut {\char"002DD } % DOUBLE ACUTE ACCENT: ˝ \def\textbottomdot {\char"00323 } % COMBINING DOT BELOW: ̣ \def\textbottomcomma {\char"00326 } % COMBINING COMMA BELOW: ̦ \def\greektonos {\char"00384 } % GREEK TONOS: ΄ \def\greekdialytikatonos {\char"00385 } % GREEK DIALYTIKA TONOS: ΅ \def\greekAlphatonos {\char"00386 } % GREEK CAPITAL LETTER ALPHA WITH TONOS: Ά \def\greekEpsilontonos {\char"00388 } % GREEK CAPITAL LETTER EPSILON WITH TONOS: Έ \def\greekEtatonos {\char"00389 } % GREEK CAPITAL LETTER ETA WITH TONOS: Ή \def\greekIotatonos {\char"0038A } % GREEK CAPITAL LETTER IOTA WITH TONOS: Ί \def\greekOmicrontonos {\char"0038C } % GREEK CAPITAL LETTER OMICRON WITH TONOS: Ό \def\greekUpsilontonos {\char"0038E } % GREEK CAPITAL LETTER UPSILON WITH TONOS: Ύ \def\greekOmegatonos {\char"0038F } % GREEK CAPITAL LETTER OMEGA WITH TONOS: Ώ \def\greekiotadialytikatonos {\char"00390 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS: ΐ \def\greekAlpha {\char"00391 } % GREEK CAPITAL LETTER ALPHA: Α \def\greekBeta {\char"00392 } % GREEK CAPITAL LETTER BETA: Β \def\greekGamma {\char"00393 } % GREEK CAPITAL LETTER GAMMA: Γ \def\greekDelta {\char"00394 } % GREEK CAPITAL LETTER DELTA: Δ \def\greekEpsilon {\char"00395 } % GREEK CAPITAL LETTER EPSILON: Ε \def\greekZeta {\char"00396 } % GREEK CAPITAL LETTER ZETA: Ζ \def\greekEta {\char"00397 } % GREEK CAPITAL LETTER ETA: Η \def\greekTheta {\char"00398 } % GREEK CAPITAL LETTER THETA: Θ \def\greekIota {\char"00399 } % GREEK CAPITAL LETTER IOTA: Ι \def\greekKappa {\char"0039A } % GREEK CAPITAL LETTER KAPPA: Κ \def\greekLambda {\char"0039B } % GREEK CAPITAL LETTER LAMDA: Λ \def\greekMu {\char"0039C } % GREEK CAPITAL LETTER MU: Μ \def\greekNu {\char"0039D } % GREEK CAPITAL LETTER NU: Ν \def\greekXi {\char"0039E } % GREEK CAPITAL LETTER XI: Ξ \def\greekOmicron {\char"0039F } % GREEK CAPITAL LETTER OMICRON: Ο \def\greekPi {\char"003A0 } % GREEK CAPITAL LETTER PI: Π \def\greekRho {\char"003A1 } % GREEK CAPITAL LETTER RHO: Ρ \def\greekSigma {\char"003A3 } % GREEK CAPITAL LETTER SIGMA: Σ \def\greekTau {\char"003A4 } % GREEK CAPITAL LETTER TAU: Τ \def\greekUpsilon {\char"003A5 } % GREEK CAPITAL LETTER UPSILON: Υ \def\greekPhi {\char"003A6 } % GREEK CAPITAL LETTER PHI: Φ \def\greekChi {\char"003A7 } % GREEK CAPITAL LETTER CHI: Χ \def\greekPsi {\char"003A8 } % GREEK CAPITAL LETTER PSI: Ψ \def\greekOmega {\char"003A9 } % GREEK CAPITAL LETTER OMEGA: Ω \def\greekIotadialytika {\char"003AA } % GREEK CAPITAL LETTER IOTA WITH DIALYTIKA: Ϊ \def\greekUpsilondialytika {\char"003AB } % GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA: Ϋ \def\greekalphatonos {\char"003AC } % GREEK SMALL LETTER ALPHA WITH TONOS: ά \def\greekepsilontonos {\char"003AD } % GREEK SMALL LETTER EPSILON WITH TONOS: έ \def\greeketatonos {\char"003AE } % GREEK SMALL LETTER ETA WITH TONOS: ή \def\greekiotatonos {\char"003AF } % GREEK SMALL LETTER IOTA WITH TONOS: ί \def\greekupsilondialytikatonos {\char"003B0 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS: ΰ \def\greekalpha {\char"003B1 } % GREEK SMALL LETTER ALPHA: α \def\greekbeta {\char"003B2 } % GREEK SMALL LETTER BETA: β \def\greekgamma {\char"003B3 } % GREEK SMALL LETTER GAMMA: γ \def\greekdelta {\char"003B4 } % GREEK SMALL LETTER DELTA: δ \def\greekepsilon {\char"003B5 } % GREEK SMALL LETTER EPSILON: ε \def\greekzeta {\char"003B6 } % GREEK SMALL LETTER ZETA: ζ \def\greeketa {\char"003B7 } % GREEK SMALL LETTER ETA: η \def\greektheta {\char"003B8 } % GREEK SMALL LETTER THETA: θ \def\greekiota {\char"003B9 } % GREEK SMALL LETTER IOTA: ι \def\greekkappa {\char"003BA } % GREEK SMALL LETTER KAPPA: κ \def\greeklambda {\char"003BB } % GREEK SMALL LETTER LAMDA: λ \def\greekmu {\char"003BC } % GREEK SMALL LETTER MU: μ \def\greeknu {\char"003BD } % GREEK SMALL LETTER NU: ν \def\greekxi {\char"003BE } % GREEK SMALL LETTER XI: ξ \def\greekomicron {\char"003BF } % GREEK SMALL LETTER OMICRON: ο \def\greekpi {\char"003C0 } % GREEK SMALL LETTER PI: π \def\greekrho {\char"003C1 } % GREEK SMALL LETTER RHO: ρ \def\greekfinalsigma {\char"003C2 } % GREEK SMALL LETTER FINAL SIGMA: ς \def\greeksigma {\char"003C3 } % GREEK SMALL LETTER SIGMA: σ \def\greektau {\char"003C4 } % GREEK SMALL LETTER TAU: τ \def\greekupsilon {\char"003C5 } % GREEK SMALL LETTER UPSILON: υ \def\greekphi {\char"003C6 } % GREEK SMALL LETTER PHI: φ \def\greekchi {\char"003C7 } % GREEK SMALL LETTER CHI: χ \def\greekpsi {\char"003C8 } % GREEK SMALL LETTER PSI: ψ \def\greekomega {\char"003C9 } % GREEK SMALL LETTER OMEGA: ω \def\greekiotadialytika {\char"003CA } % GREEK SMALL LETTER IOTA WITH DIALYTIKA: ϊ \def\greekupsilondiaeresis {\char"003CB } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA: ϋ \def\greekomicrontonos {\char"003CC } % GREEK SMALL LETTER OMICRON WITH TONOS: ό \def\greekupsilontonos {\char"003CD } % GREEK SMALL LETTER UPSILON WITH TONOS: ύ \def\greekomegatonos {\char"003CE } % GREEK SMALL LETTER OMEGA WITH TONOS: ώ \def\greekthetaalt {\char"003D1 } % GREEK THETA SYMBOL: ϑ \def\greekphialt {\char"003D5 } % GREEK PHI SYMBOL: ϕ \def\greekpialt {\char"003D6 } % GREEK PI SYMBOL: ϖ \def\greekkoppa {\char"003D9 } % GREEK SMALL LETTER ARCHAIC KOPPA: ϙ \def\greekstigma {\char"003DB } % GREEK SMALL LETTER STIGMA: ϛ \def\greekdigamma {\char"003DD } % GREEK SMALL LETTER DIGAMMA: ϝ \def\greeknumkoppa {\char"003DF } % GREEK SMALL LETTER KOPPA: ϟ \def\greeksampi {\char"003E1 } % GREEK SMALL LETTER SAMPI: ϡ \def\greekrhoalt {\char"003F1 } % GREEK RHO SYMBOL: ϱ \def\greeksigmalunate {\char"003F2 } % GREEK LUNATE SIGMA SYMBOL: ϲ \def\greekepsilonalt {\char"003F5 } % GREEK LUNATE EPSILON SYMBOL: ϵ \def\greekSigmalunate {\char"003F9 } % GREEK CAPITAL LUNATE SIGMA SYMBOL: Ϲ \def\cyrillicEgrave {\char"00400 } % CYRILLIC CAPITAL LETTER IE WITH GRAVE: Ѐ \def\cyrillicYO {\char"00401 } % CYRILLIC CAPITAL LETTER IO: Ё \def\cyrillicDJE {\char"00402 } % CYRILLIC CAPITAL LETTER DJE: Ђ \def\cyrillicGJE {\char"00403 } % CYRILLIC CAPITAL LETTER GJE: Ѓ \def\cyrillicIE {\char"00404 } % CYRILLIC CAPITAL LETTER UKRAINIAN IE: Є \def\cyrillicDZE {\char"00405 } % CYRILLIC CAPITAL LETTER DZE: Ѕ \def\cyrillicII {\char"00406 } % CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І \def\cyrillicYI {\char"00407 } % CYRILLIC CAPITAL LETTER YI: Ї \def\cyrillicJE {\char"00408 } % CYRILLIC CAPITAL LETTER JE: Ј \def\cyrillicLJE {\char"00409 } % CYRILLIC CAPITAL LETTER LJE: Љ \def\cyrillicNJE {\char"0040A } % CYRILLIC CAPITAL LETTER NJE: Њ \def\cyrillicTSHE {\char"0040B } % CYRILLIC CAPITAL LETTER TSHE: Ћ \def\cyrillicKJE {\char"0040C } % CYRILLIC CAPITAL LETTER KJE: Ќ \def\cyrillicIgrave {\char"0040D } % CYRILLIC CAPITAL LETTER I WITH GRAVE: Ѝ \def\cyrillicUSHRT {\char"0040E } % CYRILLIC CAPITAL LETTER SHORT U: Ў \def\cyrillicDZHE {\char"0040F } % CYRILLIC CAPITAL LETTER DZHE: Џ \def\cyrillicA {\char"00410 } % CYRILLIC CAPITAL LETTER A: А \def\cyrillicB {\char"00411 } % CYRILLIC CAPITAL LETTER BE: Б \def\cyrillicV {\char"00412 } % CYRILLIC CAPITAL LETTER VE: В \def\cyrillicG {\char"00413 } % CYRILLIC CAPITAL LETTER GHE: Г \def\cyrillicD {\char"00414 } % CYRILLIC CAPITAL LETTER DE: Д \def\cyrillicE {\char"00415 } % CYRILLIC CAPITAL LETTER IE: Е \def\cyrillicZH {\char"00416 } % CYRILLIC CAPITAL LETTER ZHE: Ж \def\cyrillicZ {\char"00417 } % CYRILLIC CAPITAL LETTER ZE: З \def\cyrillicI {\char"00418 } % CYRILLIC CAPITAL LETTER I: И \def\cyrillicISHRT {\char"00419 } % CYRILLIC CAPITAL LETTER SHORT I: Й \def\cyrillicK {\char"0041A } % CYRILLIC CAPITAL LETTER KA: К \def\cyrillicL {\char"0041B } % CYRILLIC CAPITAL LETTER EL: Л \def\cyrillicM {\char"0041C } % CYRILLIC CAPITAL LETTER EM: М \def\cyrillicN {\char"0041D } % CYRILLIC CAPITAL LETTER EN: Н \def\cyrillicO {\char"0041E } % CYRILLIC CAPITAL LETTER O: О \def\cyrillicP {\char"0041F } % CYRILLIC CAPITAL LETTER PE: П \def\cyrillicR {\char"00420 } % CYRILLIC CAPITAL LETTER ER: Р \def\cyrillicS {\char"00421 } % CYRILLIC CAPITAL LETTER ES: С \def\cyrillicT {\char"00422 } % CYRILLIC CAPITAL LETTER TE: Т \def\cyrillicU {\char"00423 } % CYRILLIC CAPITAL LETTER U: У \def\cyrillicF {\char"00424 } % CYRILLIC CAPITAL LETTER EF: Ф \def\cyrillicH {\char"00425 } % CYRILLIC CAPITAL LETTER HA: Х \def\cyrillicC {\char"00426 } % CYRILLIC CAPITAL LETTER TSE: Ц \def\cyrillicCH {\char"00427 } % CYRILLIC CAPITAL LETTER CHE: Ч \def\cyrillicSH {\char"00428 } % CYRILLIC CAPITAL LETTER SHA: Ш \def\cyrillicSHCH {\char"00429 } % CYRILLIC CAPITAL LETTER SHCHA: Щ \def\cyrillicHRDSN {\char"0042A } % CYRILLIC CAPITAL LETTER HARD SIGN: Ъ \def\cyrillicERY {\char"0042B } % CYRILLIC CAPITAL LETTER YERU: Ы \def\cyrillicSFTSN {\char"0042C } % CYRILLIC CAPITAL LETTER SOFT SIGN: Ь \def\cyrillicEREV {\char"0042D } % CYRILLIC CAPITAL LETTER E: Э \def\cyrillicYU {\char"0042E } % CYRILLIC CAPITAL LETTER YU: Ю \def\cyrillicYA {\char"0042F } % CYRILLIC CAPITAL LETTER YA: Я \def\cyrillica {\char"00430 } % CYRILLIC SMALL LETTER A: а \def\cyrillicb {\char"00431 } % CYRILLIC SMALL LETTER BE: б \def\cyrillicv {\char"00432 } % CYRILLIC SMALL LETTER VE: в \def\cyrillicg {\char"00433 } % CYRILLIC SMALL LETTER GHE: г \def\cyrillicd {\char"00434 } % CYRILLIC SMALL LETTER DE: д \def\cyrillice {\char"00435 } % CYRILLIC SMALL LETTER IE: е \def\cyrilliczh {\char"00436 } % CYRILLIC SMALL LETTER ZHE: ж \def\cyrillicz {\char"00437 } % CYRILLIC SMALL LETTER ZE: з \def\cyrillici {\char"00438 } % CYRILLIC SMALL LETTER I: и \def\cyrillicishrt {\char"00439 } % CYRILLIC SMALL LETTER SHORT I: й \def\cyrillick {\char"0043A } % CYRILLIC SMALL LETTER KA: к \def\cyrillicl {\char"0043B } % CYRILLIC SMALL LETTER EL: л \def\cyrillicm {\char"0043C } % CYRILLIC SMALL LETTER EM: м \def\cyrillicn {\char"0043D } % CYRILLIC SMALL LETTER EN: н \def\cyrillico {\char"0043E } % CYRILLIC SMALL LETTER O: о \def\cyrillicp {\char"0043F } % CYRILLIC SMALL LETTER PE: п \def\cyrillicr {\char"00440 } % CYRILLIC SMALL LETTER ER: р \def\cyrillics {\char"00441 } % CYRILLIC SMALL LETTER ES: с \def\cyrillict {\char"00442 } % CYRILLIC SMALL LETTER TE: т \def\cyrillicu {\char"00443 } % CYRILLIC SMALL LETTER U: у \def\cyrillicf {\char"00444 } % CYRILLIC SMALL LETTER EF: ф \def\cyrillich {\char"00445 } % CYRILLIC SMALL LETTER HA: х \def\cyrillicc {\char"00446 } % CYRILLIC SMALL LETTER TSE: ц \def\cyrillicch {\char"00447 } % CYRILLIC SMALL LETTER CHE: ч \def\cyrillicsh {\char"00448 } % CYRILLIC SMALL LETTER SHA: ш \def\cyrillicshch {\char"00449 } % CYRILLIC SMALL LETTER SHCHA: щ \def\cyrillichrdsn {\char"0044A } % CYRILLIC SMALL LETTER HARD SIGN: ъ \def\cyrillicery {\char"0044B } % CYRILLIC SMALL LETTER YERU: ы \def\cyrillicsftsn {\char"0044C } % CYRILLIC SMALL LETTER SOFT SIGN: ь \def\cyrillicerev {\char"0044D } % CYRILLIC SMALL LETTER E: э \def\cyrillicyu {\char"0044E } % CYRILLIC SMALL LETTER YU: ю \def\cyrillicya {\char"0044F } % CYRILLIC SMALL LETTER YA: я \def\cyrillicegrave {\char"00450 } % CYRILLIC SMALL LETTER IE WITH GRAVE: ѐ \def\cyrillicyo {\char"00451 } % CYRILLIC SMALL LETTER IO: ё \def\cyrillicdje {\char"00452 } % CYRILLIC SMALL LETTER DJE: ђ \def\cyrillicgje {\char"00453 } % CYRILLIC SMALL LETTER GJE: ѓ \def\cyrillicie {\char"00454 } % CYRILLIC SMALL LETTER UKRAINIAN IE: є \def\cyrillicdze {\char"00455 } % CYRILLIC SMALL LETTER DZE: ѕ \def\cyrillicii {\char"00456 } % CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і \def\cyrillicyi {\char"00457 } % CYRILLIC SMALL LETTER YI: ї \def\cyrillicje {\char"00458 } % CYRILLIC SMALL LETTER JE: ј \def\cyrilliclje {\char"00459 } % CYRILLIC SMALL LETTER LJE: љ \def\cyrillicnje {\char"0045A } % CYRILLIC SMALL LETTER NJE: њ \def\cyrillictshe {\char"0045B } % CYRILLIC SMALL LETTER TSHE: ћ \def\cyrillickje {\char"0045C } % CYRILLIC SMALL LETTER KJE: ќ \def\cyrillicigrave {\char"0045D } % CYRILLIC SMALL LETTER I WITH GRAVE: ѝ \def\cyrillicushrt {\char"0045E } % CYRILLIC SMALL LETTER SHORT U: ў \def\cyrillicdzhe {\char"0045F } % CYRILLIC SMALL LETTER DZHE: џ \def\cyrillicOMEGA {\char"00460 } % CYRILLIC CAPITAL LETTER OMEGA: Ѡ \def\cyrillicomega {\char"00461 } % CYRILLIC SMALL LETTER OMEGA: ѡ \def\cyrillicYAT {\char"00462 } % CYRILLIC CAPITAL LETTER YAT: Ѣ \def\cyrillicyat {\char"00463 } % CYRILLIC SMALL LETTER YAT: ѣ \def\cyrillicEiotified {\char"00464 } % CYRILLIC CAPITAL LETTER IOTIFIED E: Ѥ \def\cyrilliceiotified {\char"00465 } % CYRILLIC SMALL LETTER IOTIFIED E: ѥ \def\cyrillicLITTLEYUS {\char"00466 } % CYRILLIC CAPITAL LETTER LITTLE YUS: Ѧ \def\cyrilliclittleyus {\char"00467 } % CYRILLIC SMALL LETTER LITTLE YUS: ѧ \def\cyrillicLITTLEYUSiotified {\char"00468 } % CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS: Ѩ \def\cyrilliclittleyusiotified {\char"00469 } % CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS: ѩ \def\cyrillicBIGYUS {\char"0046A } % CYRILLIC CAPITAL LETTER BIG YUS: Ѫ \def\cyrillicbigyus {\char"0046B } % CYRILLIC SMALL LETTER BIG YUS: ѫ \def\cyrillicBIGYUSiotified {\char"0046C } % CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS: Ѭ \def\cyrillicbigyusiotified {\char"0046D } % CYRILLIC SMALL LETTER IOTIFIED BIG YUS: ѭ \def\cyrillicKSI {\char"0046E } % CYRILLIC CAPITAL LETTER KSI: Ѯ \def\cyrillicksi {\char"0046F } % CYRILLIC SMALL LETTER KSI: ѯ \def\cyrillicPSI {\char"00470 } % CYRILLIC CAPITAL LETTER PSI: Ѱ \def\cyrillicpsi {\char"00471 } % CYRILLIC SMALL LETTER PSI: ѱ \def\cyrillicFITA {\char"00472 } % CYRILLIC CAPITAL LETTER FITA: Ѳ \def\cyrillicfita {\char"00473 } % CYRILLIC SMALL LETTER FITA: ѳ \def\cyrillicIZHITSA {\char"00474 } % CYRILLIC CAPITAL LETTER IZHITSA: Ѵ \def\cyrillicizhitsa {\char"00475 } % CYRILLIC SMALL LETTER IZHITSA: ѵ \def\cyrillicIZHITSAdoublegrave {\char"00476 } % CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT: Ѷ \def\cyrillicizhitsadoublegrave {\char"00477 } % CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT: ѷ \def\cyrillicUK {\char"00478 } % CYRILLIC CAPITAL LETTER UK: Ѹ \def\cyrillicuk {\char"00479 } % CYRILLIC SMALL LETTER UK: ѹ \def\cyrillicOMEGAround {\char"0047A } % CYRILLIC CAPITAL LETTER ROUND OMEGA: Ѻ \def\cyrillicomegaround {\char"0047B } % CYRILLIC SMALL LETTER ROUND OMEGA: ѻ \def\cyrillicOMEGAtitlo {\char"0047C } % CYRILLIC CAPITAL LETTER OMEGA WITH TITLO: Ѽ \def\cyrillicomegatitlo {\char"0047D } % CYRILLIC SMALL LETTER OMEGA WITH TITLO: ѽ \def\cyrillicOT {\char"0047E } % CYRILLIC CAPITAL LETTER OT: Ѿ \def\cyrillicot {\char"0047F } % CYRILLIC SMALL LETTER OT: ѿ \def\cyrillicKOPPA {\char"00480 } % CYRILLIC CAPITAL LETTER KOPPA: Ҁ \def\cyrillickoppa {\char"00481 } % CYRILLIC SMALL LETTER KOPPA: ҁ \def\cyrillicTITLO {\char"00483 } % COMBINING CYRILLIC TITLO: ҃ \def\cyrillicPALATALIZATION {\char"00484 } % COMBINING CYRILLIC PALATALIZATION: ҄ \def\cyrillicDASIAPNEUMATA {\char"00485 } % COMBINING CYRILLIC DASIA PNEUMATA: ҅ \def\cyrillicPSILIPNEUMATA {\char"00486 } % COMBINING CYRILLIC PSILI PNEUMATA: ҆ \def\cyrillicISHRTtail {\char"0048A } % CYRILLIC CAPITAL LETTER SHORT I WITH TAIL: Ҋ \def\cyrillicishrttail {\char"0048B } % CYRILLIC SMALL LETTER SHORT I WITH TAIL: ҋ \def\cyrillicSEMISOFT {\char"0048C } % CYRILLIC CAPITAL LETTER SEMISOFT SIGN: Ҍ \def\cyrillicsemisoft {\char"0048D } % CYRILLIC SMALL LETTER SEMISOFT SIGN: ҍ \def\cyrillicERtick {\char"0048E } % CYRILLIC CAPITAL LETTER ER WITH TICK: Ҏ \def\cyrillicertick {\char"0048F } % CYRILLIC SMALL LETTER ER WITH TICK: ҏ \def\cyrillicGHEupturn {\char"00490 } % CYRILLIC CAPITAL LETTER GHE WITH UPTURN: Ґ \def\cyrillicgheupturn {\char"00491 } % CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ \def\cyrillicGHEstroke {\char"00492 } % CYRILLIC CAPITAL LETTER GHE WITH STROKE: Ғ \def\cyrillicghestroke {\char"00493 } % CYRILLIC SMALL LETTER GHE WITH STROKE: ғ \def\cyrillicGHEmidhook {\char"00494 } % CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK: Ҕ \def\cyrillicghemidhook {\char"00495 } % CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK: ҕ \def\cyrillicZHEdescender {\char"00496 } % CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER: Җ \def\cyrilliczhedescender {\char"00497 } % CYRILLIC SMALL LETTER ZHE WITH DESCENDER: җ \def\cyrillicZDSC {\char"00498 } % CYRILLIC CAPITAL LETTER ZE WITH DESCENDER: Ҙ \def\cyrilliczdsc {\char"00499 } % CYRILLIC SMALL LETTER ZE WITH DESCENDER: ҙ \def\cyrillicKADC {\char"0049A } % CYRILLIC CAPITAL LETTER KA WITH DESCENDER: Қ \def\cyrillickadc {\char"0049B } % CYRILLIC SMALL LETTER KA WITH DESCENDER: қ \def\cyrillicKAvertstroke {\char"0049C } % CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE: Ҝ \def\cyrillickavertstroke {\char"0049D } % CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE: ҝ \def\cyrillicKAstroke {\char"0049E } % CYRILLIC CAPITAL LETTER KA WITH STROKE: Ҟ \def\cyrillickastroke {\char"0049F } % CYRILLIC SMALL LETTER KA WITH STROKE: ҟ \def\cyrillicKAbashkir {\char"004A0 } % CYRILLIC CAPITAL LETTER BASHKIR KA: Ҡ \def\cyrillickabashkir {\char"004A1 } % CYRILLIC SMALL LETTER BASHKIR KA: ҡ \def\cyrillicENDC {\char"004A2 } % CYRILLIC CAPITAL LETTER EN WITH DESCENDER: Ң \def\cyrillicendc {\char"004A3 } % CYRILLIC SMALL LETTER EN WITH DESCENDER: ң \def\cyrillicENGHE {\char"004A4 } % CYRILLIC CAPITAL LIGATURE EN GHE: Ҥ \def\cyrillicenghe {\char"004A5 } % CYRILLIC SMALL LIGATURE EN GHE: ҥ \def\cyrillicPEmidhook {\char"004A6 } % CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK: Ҧ \def\cyrillicpemidhook {\char"004A7 } % CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK: ҧ \def\cyrillicHA {\char"004A8 } % CYRILLIC CAPITAL LETTER ABKHASIAN HA: Ҩ \def\cyrillicha {\char"004A9 } % CYRILLIC SMALL LETTER ABKHASIAN HA: ҩ \def\cyrillicSDSC {\char"004AA } % CYRILLIC CAPITAL LETTER ES WITH DESCENDER: Ҫ \def\cyrillicsdsc {\char"004AB } % CYRILLIC SMALL LETTER ES WITH DESCENDER: ҫ \def\cyrillicTEDC {\char"004AC } % CYRILLIC CAPITAL LETTER TE WITH DESCENDER: Ҭ \def\cyrillictedc {\char"004AD } % CYRILLIC SMALL LETTER TE WITH DESCENDER: ҭ \def\cyrillicYstr {\char"004AE } % CYRILLIC CAPITAL LETTER STRAIGHT U: Ү \def\cyrillicystr {\char"004AF } % CYRILLIC SMALL LETTER STRAIGHT U: ү \def\cyrillicYstrstroke {\char"004B0 } % CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE: Ұ \def\cyrillicystrstroke {\char"004B1 } % CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE: ұ \def\cyrillicHADC {\char"004B2 } % CYRILLIC CAPITAL LETTER HA WITH DESCENDER: Ҳ \def\cyrillichadc {\char"004B3 } % CYRILLIC SMALL LETTER HA WITH DESCENDER: ҳ \def\cyrillicTETSE {\char"004B4 } % CYRILLIC CAPITAL LIGATURE TE TSE: Ҵ \def\cyrillictetse {\char"004B5 } % CYRILLIC SMALL LIGATURE TE TSE: ҵ \def\cyrillicCHEDC {\char"004B6 } % CYRILLIC CAPITAL LETTER CHE WITH DESCENDER: Ҷ \def\cyrillicchedc {\char"004B7 } % CYRILLIC SMALL LETTER CHE WITH DESCENDER: ҷ \def\cyrillicCHEvertstroke {\char"004B8 } % CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE: Ҹ \def\cyrillicchevertstroke {\char"004B9 } % CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE: ҹ \def\cyrillicSHHA {\char"004BA } % CYRILLIC CAPITAL LETTER SHHA: Һ \def\cyrillicshha {\char"004BB } % CYRILLIC SMALL LETTER SHHA: һ \def\cyrillicCHEabkhasian {\char"004BC } % CYRILLIC CAPITAL LETTER ABKHASIAN CHE: Ҽ \def\cyrilliccheabkhasian {\char"004BD } % CYRILLIC SMALL LETTER ABKHASIAN CHE: ҽ \def\cyrillicCHEDCabkhasian {\char"004BE } % CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER: Ҿ \def\cyrillicchedcabkhasian {\char"004BF } % CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER: ҿ \def\cyrillicPALOCHKA {\char"004C0 } % CYRILLIC LETTER PALOCHKA: Ӏ \def\cyrillicZHEbreve {\char"004C1 } % CYRILLIC CAPITAL LETTER ZHE WITH BREVE: Ӂ \def\cyrilliczhebreve {\char"004C2 } % CYRILLIC SMALL LETTER ZHE WITH BREVE: ӂ \def\cyrillicKAhook {\char"004C3 } % CYRILLIC CAPITAL LETTER KA WITH HOOK: Ӄ \def\cyrillickahook {\char"004C4 } % CYRILLIC SMALL LETTER KA WITH HOOK: ӄ \def\cyrillicELtail {\char"004C5 } % CYRILLIC CAPITAL LETTER EL WITH TAIL: Ӆ \def\cyrilliceltail {\char"004C6 } % CYRILLIC SMALL LETTER EL WITH TAIL: ӆ \def\cyrillicENhook {\char"004C7 } % CYRILLIC CAPITAL LETTER EN WITH HOOK: Ӈ \def\cyrillicenhook {\char"004C8 } % CYRILLIC SMALL LETTER EN WITH HOOK: ӈ \def\cyrillicENtail {\char"004C9 } % CYRILLIC CAPITAL LETTER EN WITH TAIL: Ӊ \def\cyrillicentail {\char"004CA } % CYRILLIC SMALL LETTER EN WITH TAIL: ӊ \def\cyrillicCHEkhakassian {\char"004CB } % CYRILLIC CAPITAL LETTER KHAKASSIAN CHE: Ӌ \def\cyrillicchekhakassian {\char"004CC } % CYRILLIC SMALL LETTER KHAKASSIAN CHE: ӌ \def\cyrillicEMtail {\char"004CD } % CYRILLIC CAPITAL LETTER EM WITH TAIL: Ӎ \def\cyrillicemtail {\char"004CE } % CYRILLIC SMALL LETTER EM WITH TAIL: ӎ \def\cyrillicAbreve {\char"004D0 } % CYRILLIC CAPITAL LETTER A WITH BREVE: Ӑ \def\cyrillicabreve {\char"004D1 } % CYRILLIC SMALL LETTER A WITH BREVE: ӑ \def\cyrillicAdiaeresis {\char"004D2 } % CYRILLIC CAPITAL LETTER A WITH DIAERESIS: Ӓ \def\cyrillicadiaeresis {\char"004D3 } % CYRILLIC SMALL LETTER A WITH DIAERESIS: ӓ \def\cyrillicAE {\char"004D4 } % CYRILLIC CAPITAL LIGATURE A IE: Ӕ \def\cyrillicae {\char"004D5 } % CYRILLIC SMALL LIGATURE A IE: ӕ \def\cyrillicEbreve {\char"004D6 } % CYRILLIC CAPITAL LETTER IE WITH BREVE: Ӗ \def\cyrillicebreve {\char"004D7 } % CYRILLIC SMALL LETTER IE WITH BREVE: ӗ \def\cyrillicSCHWA {\char"004D8 } % CYRILLIC CAPITAL LETTER SCHWA: Ә \def\cyrillicschwa {\char"004D9 } % CYRILLIC SMALL LETTER SCHWA: ә \def\cyrillicSCHWAdiaeresis {\char"004DA } % CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS: Ӛ \def\cyrillicschwadiaeresis {\char"004DB } % CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS: ӛ \def\cyrillicZHEdiaeresis {\char"004DC } % CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS: Ӝ \def\cyrilliczhediaeresis {\char"004DD } % CYRILLIC SMALL LETTER ZHE WITH DIAERESIS: ӝ \def\cyrillicZEdiaeresis {\char"004DE } % CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS: Ӟ \def\cyrilliczediaeresis {\char"004DF } % CYRILLIC SMALL LETTER ZE WITH DIAERESIS: ӟ \def\cyrillicDZEabkhasian {\char"004E0 } % CYRILLIC CAPITAL LETTER ABKHASIAN DZE: Ӡ \def\cyrillicdzeabkhasian {\char"004E1 } % CYRILLIC SMALL LETTER ABKHASIAN DZE: ӡ \def\cyrillicImacron {\char"004E2 } % CYRILLIC CAPITAL LETTER I WITH MACRON: Ӣ \def\cyrillicimacron {\char"004E3 } % CYRILLIC SMALL LETTER I WITH MACRON: ӣ \def\cyrillicIdiaeresis {\char"004E4 } % CYRILLIC CAPITAL LETTER I WITH DIAERESIS: Ӥ \def\cyrillicidiaeresis {\char"004E5 } % CYRILLIC SMALL LETTER I WITH DIAERESIS: ӥ \def\cyrillicOdiaeresis {\char"004E6 } % CYRILLIC CAPITAL LETTER O WITH DIAERESIS: Ӧ \def\cyrillicodiaeresis {\char"004E7 } % CYRILLIC SMALL LETTER O WITH DIAERESIS: ӧ \def\cyrillicObarred {\char"004E8 } % CYRILLIC CAPITAL LETTER BARRED O: Ө \def\cyrillicobarred {\char"004E9 } % CYRILLIC SMALL LETTER BARRED O: ө \def\cyrillicObarreddiaeresis {\char"004EA } % CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS: Ӫ \def\cyrillicobarreddiaeresis {\char"004EB } % CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS: ӫ \def\cyrillicEdiaeresis {\char"004EC } % CYRILLIC CAPITAL LETTER E WITH DIAERESIS: Ӭ \def\cyrillicediaeresis {\char"004ED } % CYRILLIC SMALL LETTER E WITH DIAERESIS: ӭ \def\cyrillicUmacron {\char"004EE } % CYRILLIC CAPITAL LETTER U WITH MACRON: Ӯ \def\cyrillicumacron {\char"004EF } % CYRILLIC SMALL LETTER U WITH MACRON: ӯ \def\cyrillicUdiaeresis {\char"004F0 } % CYRILLIC CAPITAL LETTER U WITH DIAERESIS: Ӱ \def\cyrillicudiaeresis {\char"004F1 } % CYRILLIC SMALL LETTER U WITH DIAERESIS: ӱ \def\cyrillicUdoubleacute {\char"004F2 } % CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE: Ӳ \def\cyrillicudoubleacute {\char"004F3 } % CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE: ӳ \def\cyrillicCHEdiaeresis {\char"004F4 } % CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS: Ӵ \def\cyrillicchediaeresis {\char"004F5 } % CYRILLIC SMALL LETTER CHE WITH DIAERESIS: ӵ \def\cyrillicYERUdiaeresis {\char"004F8 } % CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS: Ӹ \def\cyrillicyerudiaeresis {\char"004F9 } % CYRILLIC SMALL LETTER YERU WITH DIAERESIS: ӹ \def\hebrewAlef {\char"005D0 } % HEBREW LETTER ALEF: א \def\hebrewBet {\char"005D1 } % HEBREW LETTER BET: ב \def\hebrewGimel {\char"005D2 } % HEBREW LETTER GIMEL: ג \def\hebrewDalet {\char"005D3 } % HEBREW LETTER DALET: ד \def\hebrewHe {\char"005D4 } % HEBREW LETTER HE: ה \def\hebrewVav {\char"005D5 } % HEBREW LETTER VAV: ו \def\hebrewZayin {\char"005D6 } % HEBREW LETTER ZAYIN: ז \def\hebrewHet {\char"005D7 } % HEBREW LETTER HET: ח \def\hebrewTet {\char"005D8 } % HEBREW LETTER TET: ט \def\hebrewYod {\char"005D9 } % HEBREW LETTER YOD: י \def\hebrewKaffinal {\char"005DA } % HEBREW LETTER FINAL KAF: ך \def\hebrewKaf {\char"005DB } % HEBREW LETTER KAF: כ \def\hebrewLamed {\char"005DC } % HEBREW LETTER LAMED: ל \def\hebrewMemfinal {\char"005DD } % HEBREW LETTER FINAL MEM: ם \def\hebrewMem {\char"005DE } % HEBREW LETTER MEM: מ \def\hebrewNunfinal {\char"005DF } % HEBREW LETTER FINAL NUN: ן \def\hebrewNun {\char"005E0 } % HEBREW LETTER NUN: נ \def\hebrewSamekh {\char"005E1 } % HEBREW LETTER SAMEKH: ס \def\hebrewAyin {\char"005E2 } % HEBREW LETTER AYIN: ע \def\hebrewPefinal {\char"005E3 } % HEBREW LETTER FINAL PE: ף \def\hebrewPe {\char"005E4 } % HEBREW LETTER PE: פ \def\hebrewTsadifinal {\char"005E5 } % HEBREW LETTER FINAL TSADI: ץ \def\hebrewTsadi {\char"005E6 } % HEBREW LETTER TSADI: צ \def\hebrewQof {\char"005E7 } % HEBREW LETTER QOF: ק \def\hebrewResh {\char"005E8 } % HEBREW LETTER RESH: ר \def\hebrewShin {\char"005E9 } % HEBREW LETTER SHIN: ש \def\hebrewTav {\char"005EA } % HEBREW LETTER TAV: ת \def\Adotbelow {\char"01EA0 } % LATIN CAPITAL LETTER A WITH DOT BELOW: Ạ \def\adotbelow {\char"01EA1 } % LATIN SMALL LETTER A WITH DOT BELOW: ạ \def\Ahook {\char"01EA2 } % LATIN CAPITAL LETTER A WITH HOOK ABOVE: Ả \def\ahook {\char"01EA3 } % LATIN SMALL LETTER A WITH HOOK ABOVE: ả \def\Acircumflexacute {\char"01EA4 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE: Ấ \def\acircumflexacute {\char"01EA5 } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE: ấ \def\Acircumflexgrave {\char"01EA6 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE: Ầ \def\acircumflexgrave {\char"01EA7 } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE: ầ \def\Acircumflexhook {\char"01EA8 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE: Ẩ \def\acircumflexhook {\char"01EA9 } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE: ẩ \def\Acircumflextilde {\char"01EAA } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE: Ẫ \def\acircumflextilde {\char"01EAB } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE: ẫ \def\Acircumflexdotbelow {\char"01EAC } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW: Ậ \def\acircumflexdotbelow {\char"01EAD } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW: ậ \def\Abreveacute {\char"01EAE } % LATIN CAPITAL LETTER A WITH BREVE AND ACUTE: Ắ \def\abreveacute {\char"01EAF } % LATIN SMALL LETTER A WITH BREVE AND ACUTE: ắ \def\Abrevegrave {\char"01EB0 } % LATIN CAPITAL LETTER A WITH BREVE AND GRAVE: Ằ \def\abrevegrave {\char"01EB1 } % LATIN SMALL LETTER A WITH BREVE AND GRAVE: ằ \def\Abrevehook {\char"01EB2 } % LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE: Ẳ \def\abrevehook {\char"01EB3 } % LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE: ẳ \def\Abrevetilde {\char"01EB4 } % LATIN CAPITAL LETTER A WITH BREVE AND TILDE: Ẵ \def\abrevetilde {\char"01EB5 } % LATIN SMALL LETTER A WITH BREVE AND TILDE: ẵ \def\Abrevedotbelow {\char"01EB6 } % LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW: Ặ \def\abrevedotbelow {\char"01EB7 } % LATIN SMALL LETTER A WITH BREVE AND DOT BELOW: ặ \def\Edotbelow {\char"01EB8 } % LATIN CAPITAL LETTER E WITH DOT BELOW: Ẹ \def\edotbelow {\char"01EB9 } % LATIN SMALL LETTER E WITH DOT BELOW: ẹ \def\Ehook {\char"01EBA } % LATIN CAPITAL LETTER E WITH HOOK ABOVE: Ẻ \def\ehook {\char"01EBB } % LATIN SMALL LETTER E WITH HOOK ABOVE: ẻ \def\Etilde {\char"01EBC } % LATIN CAPITAL LETTER E WITH TILDE: Ẽ \def\etilde {\char"01EBD } % LATIN SMALL LETTER E WITH TILDE: ẽ \def\Ecircumflexacute {\char"01EBE } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE: Ế \def\ecircumflexacute {\char"01EBF } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE: ế \def\Ecircumflexgrave {\char"01EC0 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE: Ề \def\ecircumflexgrave {\char"01EC1 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE: ề \def\Ecircumflexhook {\char"01EC2 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE: Ể \def\ecircumflexhook {\char"01EC3 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE: ể \def\Ecircumflextilde {\char"01EC4 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE: Ễ \def\ecircumflextilde {\char"01EC5 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE: ễ \def\Ecircumflexdotbelow {\char"01EC6 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW: Ệ \def\ecircumflexdotbelow {\char"01EC7 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW: ệ \def\Ihook {\char"01EC8 } % LATIN CAPITAL LETTER I WITH HOOK ABOVE: Ỉ \def\ihook {\char"01EC9 } % LATIN SMALL LETTER I WITH HOOK ABOVE: ỉ \def\Idotbelow {\char"01ECA } % LATIN CAPITAL LETTER I WITH DOT BELOW: Ị \def\idotbelow {\char"01ECB } % LATIN SMALL LETTER I WITH DOT BELOW: ị \def\Odotbelow {\char"01ECC } % LATIN CAPITAL LETTER O WITH DOT BELOW: Ọ \def\odotbelow {\char"01ECD } % LATIN SMALL LETTER O WITH DOT BELOW: ọ \def\Ohook {\char"01ECE } % LATIN CAPITAL LETTER O WITH HOOK ABOVE: Ỏ \def\ohook {\char"01ECF } % LATIN SMALL LETTER O WITH HOOK ABOVE: ỏ \def\Ocircumflexacute {\char"01ED0 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE: Ố \def\ocircumflexacute {\char"01ED1 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE: ố \def\Ocircumflexgrave {\char"01ED2 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE: Ồ \def\ocircumflexgrave {\char"01ED3 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE: ồ \def\Ocircumflexhook {\char"01ED4 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE: Ổ \def\ocircumflexhook {\char"01ED5 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE: ổ \def\Ocircumflextilde {\char"01ED6 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE: Ỗ \def\ocircumflextilde {\char"01ED7 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE: ỗ \def\Ocircumflexdotbelow {\char"01ED8 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW: Ộ \def\ocircumflexdotbelow {\char"01ED9 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW: ộ \def\Ohornacute {\char"01EDA } % LATIN CAPITAL LETTER O WITH HORN AND ACUTE: Ớ \def\ohornacute {\char"01EDB } % LATIN SMALL LETTER O WITH HORN AND ACUTE: ớ \def\Ohorngrave {\char"01EDC } % LATIN CAPITAL LETTER O WITH HORN AND GRAVE: Ờ \def\ohorngrave {\char"01EDD } % LATIN SMALL LETTER O WITH HORN AND GRAVE: ờ \def\Ohornhook {\char"01EDE } % LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE: Ở \def\ohornhook {\char"01EDF } % LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE: ở \def\Ohorntilde {\char"01EE0 } % LATIN CAPITAL LETTER O WITH HORN AND TILDE: Ỡ \def\ohorntilde {\char"01EE1 } % LATIN SMALL LETTER O WITH HORN AND TILDE: ỡ \def\Ohorndotbelow {\char"01EE2 } % LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW: Ợ \def\ohorndotbelow {\char"01EE3 } % LATIN SMALL LETTER O WITH HORN AND DOT BELOW: ợ \def\Udotbelow {\char"01EE4 } % LATIN CAPITAL LETTER U WITH DOT BELOW: Ụ \def\udotbelow {\char"01EE5 } % LATIN SMALL LETTER U WITH DOT BELOW: ụ \def\Uhook {\char"01EE6 } % LATIN CAPITAL LETTER U WITH HOOK ABOVE: Ủ \def\uhook {\char"01EE7 } % LATIN SMALL LETTER U WITH HOOK ABOVE: ủ \def\Uhornacute {\char"01EE8 } % LATIN CAPITAL LETTER U WITH HORN AND ACUTE: Ứ \def\uhornacute {\char"01EE9 } % LATIN SMALL LETTER U WITH HORN AND ACUTE: ứ \def\Uhorngrave {\char"01EEA } % LATIN CAPITAL LETTER U WITH HORN AND GRAVE: Ừ \def\uhorngrave {\char"01EEB } % LATIN SMALL LETTER U WITH HORN AND GRAVE: ừ \def\Uhornhook {\char"01EEC } % LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE: Ử \def\uhornhook {\char"01EED } % LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE: ử \def\Uhorntilde {\char"01EEE } % LATIN CAPITAL LETTER U WITH HORN AND TILDE: Ữ \def\uhorntilde {\char"01EEF } % LATIN SMALL LETTER U WITH HORN AND TILDE: ữ \def\Uhorndotbelow {\char"01EF0 } % LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW: Ự \def\uhorndotbelow {\char"01EF1 } % LATIN SMALL LETTER U WITH HORN AND DOT BELOW: ự \def\Ygrave {\char"01EF2 } % LATIN CAPITAL LETTER Y WITH GRAVE: Ỳ \def\ygrave {\char"01EF3 } % LATIN SMALL LETTER Y WITH GRAVE: ỳ \def\Ydotbelow {\char"01EF4 } % LATIN CAPITAL LETTER Y WITH DOT BELOW: Ỵ \def\ydotbelow {\char"01EF5 } % LATIN SMALL LETTER Y WITH DOT BELOW: ỵ \def\Yhook {\char"01EF6 } % LATIN CAPITAL LETTER Y WITH HOOK ABOVE: Ỷ \def\yhook {\char"01EF7 } % LATIN SMALL LETTER Y WITH HOOK ABOVE: ỷ \def\Ytilde {\char"01EF8 } % LATIN CAPITAL LETTER Y WITH TILDE: Ỹ \def\ytilde {\char"01EF9 } % LATIN SMALL LETTER Y WITH TILDE: ỹ \def\greekalphapsili {\char"01F00 } % GREEK SMALL LETTER ALPHA WITH PSILI: ἀ \def\greekalphadasia {\char"01F01 } % GREEK SMALL LETTER ALPHA WITH DASIA: ἁ \def\greekalphapsilivaria {\char"01F02 } % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA: ἂ \def\greekalphadasiavaria {\char"01F03 } % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA: ἃ \def\greekalphapsilitonos {\char"01F04 } % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA: ἄ \def\greekalphadasiatonos {\char"01F05 } % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA: ἅ \def\greekalphapsiliperispomeni {\char"01F06 } % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI: ἆ \def\greekalphadasiaperispomeni {\char"01F07 } % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI: ἇ \def\greekAlphapsili {\char"01F08 } % GREEK CAPITAL LETTER ALPHA WITH PSILI: Ἀ \def\greekAlphadasia {\char"01F09 } % GREEK CAPITAL LETTER ALPHA WITH DASIA: Ἁ \def\greekAlphapsilivaria {\char"01F0A } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA: Ἂ \def\greekAlphadasiavaria {\char"01F0B } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA: Ἃ \def\greekAlphapsilitonos {\char"01F0C } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA: Ἄ \def\greekAlphadasiatonos {\char"01F0D } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA: Ἅ \def\greekAlphapsiliperispomeni {\char"01F0E } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI: Ἆ \def\greekAlphadasiaperispomeni {\char"01F0F } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI: Ἇ \def\greekepsilonpsili {\char"01F10 } % GREEK SMALL LETTER EPSILON WITH PSILI: ἐ \def\greekepsilondasia {\char"01F11 } % GREEK SMALL LETTER EPSILON WITH DASIA: ἑ \def\greekepsilonpsilivaria {\char"01F12 } % GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA: ἒ \def\greekepsilondasiavaria {\char"01F13 } % GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA: ἓ \def\greekepsilonpsilitonos {\char"01F14 } % GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA: ἔ \def\greekepsilondasiatonos {\char"01F15 } % GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA: ἕ \def\greekEpsilonpsili {\char"01F18 } % GREEK CAPITAL LETTER EPSILON WITH PSILI: Ἐ \def\greekEpsilondasia {\char"01F19 } % GREEK CAPITAL LETTER EPSILON WITH DASIA: Ἑ \def\greekEpsilonpsilivaria {\char"01F1A } % GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA: Ἒ \def\greekEpsilondasiavaria {\char"01F1B } % GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA: Ἓ \def\greekEpsilonpsilitonos {\char"01F1C } % GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA: Ἔ \def\greekEpsilondasiatonos {\char"01F1D } % GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA: Ἕ \def\greeketapsili {\char"01F20 } % GREEK SMALL LETTER ETA WITH PSILI: ἠ \def\greeketadasia {\char"01F21 } % GREEK SMALL LETTER ETA WITH DASIA: ἡ \def\greeketapsilivaria {\char"01F22 } % GREEK SMALL LETTER ETA WITH PSILI AND VARIA: ἢ \def\greeketadasiavaria {\char"01F23 } % GREEK SMALL LETTER ETA WITH DASIA AND VARIA: ἣ \def\greeketapsilitonos {\char"01F24 } % GREEK SMALL LETTER ETA WITH PSILI AND OXIA: ἤ \def\greeketadasiatonos {\char"01F25 } % GREEK SMALL LETTER ETA WITH DASIA AND OXIA: ἥ \def\greeketapsiliperispomeni {\char"01F26 } % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI: ἦ \def\greeketadasiaperispomeni {\char"01F27 } % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI: ἧ \def\greekEtapsili {\char"01F28 } % GREEK CAPITAL LETTER ETA WITH PSILI: Ἠ \def\greekEtadasia {\char"01F29 } % GREEK CAPITAL LETTER ETA WITH DASIA: Ἡ \def\greekEtapsilivaria {\char"01F2A } % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA: Ἢ \def\greekEtadasiavaria {\char"01F2B } % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA: Ἣ \def\greekEtapsilitonos {\char"01F2C } % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA: Ἤ \def\greekEtadasiatonos {\char"01F2D } % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA: Ἥ \def\greekEtapsiliperispomeni {\char"01F2E } % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI: Ἦ \def\greekEtadasiaperispomeni {\char"01F2F } % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI: Ἧ \def\greekiotapsili {\char"01F30 } % GREEK SMALL LETTER IOTA WITH PSILI: ἰ \def\greekiotadasia {\char"01F31 } % GREEK SMALL LETTER IOTA WITH DASIA: ἱ \def\greekiotapsilivaria {\char"01F32 } % GREEK SMALL LETTER IOTA WITH PSILI AND VARIA: ἲ \def\greekiotadasiavaria {\char"01F33 } % GREEK SMALL LETTER IOTA WITH DASIA AND VARIA: ἳ \def\greekiotapsilitonos {\char"01F34 } % GREEK SMALL LETTER IOTA WITH PSILI AND OXIA: ἴ \def\greekiotadasiatonos {\char"01F35 } % GREEK SMALL LETTER IOTA WITH DASIA AND OXIA: ἵ \def\greekiotapsiliperispomeni {\char"01F36 } % GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI: ἶ \def\greekiotadasiaperispomeni {\char"01F37 } % GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI: ἷ \def\greekIotapsili {\char"01F38 } % GREEK CAPITAL LETTER IOTA WITH PSILI: Ἰ \def\greekIotadasia {\char"01F39 } % GREEK CAPITAL LETTER IOTA WITH DASIA: Ἱ \def\greekIotapsilivaria {\char"01F3A } % GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA: Ἲ \def\greekIotadasiavaria {\char"01F3B } % GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA: Ἳ \def\greekIotapsilitonos {\char"01F3C } % GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA: Ἴ \def\greekIotadasiatonos {\char"01F3D } % GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA: Ἵ \def\greekIotapsiliperispomeni {\char"01F3E } % GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI: Ἶ \def\greekIotadasiaperispomeni {\char"01F3F } % GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI: Ἷ \def\greekomicronpsili {\char"01F40 } % GREEK SMALL LETTER OMICRON WITH PSILI: ὀ \def\greekomicrondasia {\char"01F41 } % GREEK SMALL LETTER OMICRON WITH DASIA: ὁ \def\greekomicronpsilivaria {\char"01F42 } % GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA: ὂ \def\greekomicrondasiavaria {\char"01F43 } % GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA: ὃ \def\greekomicronpsilitonos {\char"01F44 } % GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA: ὄ \def\greekomicrondasiatonos {\char"01F45 } % GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA: ὅ \def\greekOmicronpsili {\char"01F48 } % GREEK CAPITAL LETTER OMICRON WITH PSILI: Ὀ \def\greekOmicrondasia {\char"01F49 } % GREEK CAPITAL LETTER OMICRON WITH DASIA: Ὁ \def\greekOmicronpsilivaria {\char"01F4A } % GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA: Ὂ \def\greekOmicrondasiavaria {\char"01F4B } % GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA: Ὃ \def\greekOmicronpsilitonos {\char"01F4C } % GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA: Ὄ \def\greekOmicrondasiatonos {\char"01F4D } % GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA: Ὅ \def\greekupsilonpsili {\char"01F50 } % GREEK SMALL LETTER UPSILON WITH PSILI: ὐ \def\greekupsilondasia {\char"01F51 } % GREEK SMALL LETTER UPSILON WITH DASIA: ὑ \def\greekupsilonpsilivaria {\char"01F52 } % GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA: ὒ \def\greekupsilondasiavaria {\char"01F53 } % GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA: ὓ \def\greekupsilonpsilitonos {\char"01F54 } % GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA: ὔ \def\greekupsilondasiatonos {\char"01F55 } % GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA: ὕ \def\greekupsilonpsiliperispomeni {\char"01F56 } % GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI: ὖ \def\greekupsilondasiaperispomeni {\char"01F57 } % GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI: ὗ \def\greekUpsilondasia {\char"01F59 } % GREEK CAPITAL LETTER UPSILON WITH DASIA: Ὑ \def\greekUpsilondasiavaria {\char"01F5B } % GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA: Ὓ \def\greekUpsilondasiatonos {\char"01F5D } % GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA: Ὕ \def\greekUpsilondasiaperispomeni {\char"01F5F } % GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI: Ὗ \def\greekomegapsili {\char"01F60 } % GREEK SMALL LETTER OMEGA WITH PSILI: ὠ \def\greekomegadasia {\char"01F61 } % GREEK SMALL LETTER OMEGA WITH DASIA: ὡ \def\greekomegapsilivaria {\char"01F62 } % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA: ὢ \def\greekomegadasiavaria {\char"01F63 } % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA: ὣ \def\greekomegapsilitonos {\char"01F64 } % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA: ὤ \def\greekomegadasiatonos {\char"01F65 } % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA: ὥ \def\greekomegapsiliperispomeni {\char"01F66 } % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI: ὦ \def\greekomegadasiaperispomeni {\char"01F67 } % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI: ὧ \def\greekOmegapsili {\char"01F68 } % GREEK CAPITAL LETTER OMEGA WITH PSILI: Ὠ \def\greekOmegadasia {\char"01F69 } % GREEK CAPITAL LETTER OMEGA WITH DASIA: Ὡ \def\greekOmegapsilivaria {\char"01F6A } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA: Ὢ \def\greekOmegadasiavaria {\char"01F6B } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA: Ὣ \def\greekOmegapsilitonos {\char"01F6C } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA: Ὤ \def\greekOmegadasiatonos {\char"01F6D } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA: Ὥ \def\greekOmegapsiliperispomeni {\char"01F6E } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI: Ὦ \def\greekOmegadasiaperispomeni {\char"01F6F } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI: Ὧ \def\greekalphavaria {\char"01F70 } % GREEK SMALL LETTER ALPHA WITH VARIA: ὰ \def\greekalphaoxia {\char"01F71 } % GREEK SMALL LETTER ALPHA WITH OXIA: ά \def\greekepsilonvaria {\char"01F72 } % GREEK SMALL LETTER EPSILON WITH VARIA: ὲ \def\greekepsilonoxia {\char"01F73 } % GREEK SMALL LETTER EPSILON WITH OXIA: έ \def\greeketavaria {\char"01F74 } % GREEK SMALL LETTER ETA WITH VARIA: ὴ \def\greeketaoxia {\char"01F75 } % GREEK SMALL LETTER ETA WITH OXIA: ή \def\greekiotavaria {\char"01F76 } % GREEK SMALL LETTER IOTA WITH VARIA: ὶ \def\greekiotaoxia {\char"01F77 } % GREEK SMALL LETTER IOTA WITH OXIA: ί \def\greekomicronvaria {\char"01F78 } % GREEK SMALL LETTER OMICRON WITH VARIA: ὸ \def\greekomicronoxia {\char"01F79 } % GREEK SMALL LETTER OMICRON WITH OXIA: ό \def\greekupsilonvaria {\char"01F7A } % GREEK SMALL LETTER UPSILON WITH VARIA: ὺ \def\greekupsilonoxia {\char"01F7B } % GREEK SMALL LETTER UPSILON WITH OXIA: ύ \def\greekomegavaria {\char"01F7C } % GREEK SMALL LETTER OMEGA WITH VARIA: ὼ \def\greekomegaoxia {\char"01F7D } % GREEK SMALL LETTER OMEGA WITH OXIA: ώ \def\greekalphaiotasubpsili {\char"01F80 } % GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI: ᾀ \def\greekalphaiotasubdasia {\char"01F81 } % GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI: ᾁ \def\greekalphaiotasubpsilivaria {\char"01F82 } % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI: ᾂ \def\greekalphaiotasubdasiavaria {\char"01F83 } % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI: ᾃ \def\greekalphaiotasubpsilitonos {\char"01F84 } % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI: ᾄ \def\greekalphaiotasubdasiatonos {\char"01F85 } % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI: ᾅ \def\greekalphaiotasubpsiliperispomeni{\char"01F86 } % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI: ᾆ \def\greekalphaiotasubdasiaperispomeni{\char"01F87 } % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI: ᾇ \def\greekAlphaiotasubpsili {\char"01F88 } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI: ᾈ \def\greekAlphaiotasubdasia {\char"01F89 } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI: ᾉ \def\greekAlphaiotasubpsilivaria {\char"01F8A } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI: ᾊ \def\greekAlphaiotasubdasiavaria {\char"01F8B } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI: ᾋ \def\greekAlphaiotasubpsilitonos {\char"01F8C } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI: ᾌ \def\greekAlphaiotasubdasiatonos {\char"01F8D } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI: ᾍ \def\greekAlphaiotasubpsiliperispomeni{\char"01F8E } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI: ᾎ \def\greekAlphaiotasubdasiaperispomeni{\char"01F8F } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI: ᾏ \def\greeketaiotasubpsili {\char"01F90 } % GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI: ᾐ \def\greeketaiotasubdasia {\char"01F91 } % GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI: ᾑ \def\greeketaiotasubpsilivaria {\char"01F92 } % GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI: ᾒ \def\greeketaiotasubdasiavaria {\char"01F93 } % GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI: ᾓ \def\greeketaiotasubpsilitonos {\char"01F94 } % GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI: ᾔ \def\greeketaiotasubdasiatonos {\char"01F95 } % GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI: ᾕ \def\greeketaiotasubpsiliperispomeni {\char"01F96 } % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI: ᾖ \def\greeketaiotasubdasiaperispomeni {\char"01F97 } % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI: ᾗ \def\greekEtaiotasubpsili {\char"01F98 } % GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI: ᾘ \def\greekEtaiotasubdasia {\char"01F99 } % GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI: ᾙ \def\greekEtaiotasubpsilivaria {\char"01F9A } % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI: ᾚ \def\greekEtaiotasubdasiavaria {\char"01F9B } % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI: ᾛ \def\greekEtaiotasubpsilitonos {\char"01F9C } % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI: ᾜ \def\greekEtaiotasubdasiatonos {\char"01F9D } % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI: ᾝ \def\greekEtaiotasubpsiliperispomeni {\char"01F9E } % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI: ᾞ \def\greekEtaiotasubdasiaperispomeni {\char"01F9F } % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI: ᾟ \def\greekomegaiotasubpsili {\char"01FA0 } % GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI: ᾠ \def\greekomegaiotasubdasia {\char"01FA1 } % GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI: ᾡ \def\greekomegaiotasubpsilivaria {\char"01FA2 } % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI: ᾢ \def\greekomegaiotasubdasiavaria {\char"01FA3 } % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI: ᾣ \def\greekomegaiotasubpsilitonos {\char"01FA4 } % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI: ᾤ \def\greekomegaiotasubdasiatonos {\char"01FA5 } % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI: ᾥ \def\greekomegaiotasubpsiliperispomeni{\char"01FA6 } % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI: ᾦ \def\greekomegaiotasubdasiaperispomeni{\char"01FA7 } % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI: ᾧ \def\greekOmegaiotasubpsili {\char"01FA8 } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI: ᾨ \def\greekOmegaiotasubdasia {\char"01FA9 } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI: ᾩ \def\greekOmegaiotasubpsilivaria {\char"01FAA } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI: ᾪ \def\greekOmegaiotasubdasiavaria {\char"01FAB } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI: ᾫ \def\greekOmegaiotasubpsilitonos {\char"01FAC } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI: ᾬ \def\greekOmegaiotasubdasiatonos {\char"01FAD } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI: ᾭ \def\greekOmegaiotasubpsiliperispomeni{\char"01FAE } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI: ᾮ \def\greekOmegaiotasubdasiaperispomeni{\char"01FAF } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI: ᾯ \def\greekalphavrachy {\char"01FB0 } % GREEK SMALL LETTER ALPHA WITH VRACHY: ᾰ \def\greekalphamacron {\char"01FB1 } % GREEK SMALL LETTER ALPHA WITH MACRON: ᾱ \def\greekalphaiotasubvaria {\char"01FB2 } % GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI: ᾲ \def\greekalphaiotasub {\char"01FB3 } % GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI: ᾳ \def\greekalphaiotasubtonos {\char"01FB4 } % GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI: ᾴ \def\greekalphaperispomeni {\char"01FB6 } % GREEK SMALL LETTER ALPHA WITH PERISPOMENI: ᾶ \def\greekalphaiotasubperispomeni {\char"01FB7 } % GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI: ᾷ \def\greekAlphavrachy {\char"01FB8 } % GREEK CAPITAL LETTER ALPHA WITH VRACHY: Ᾰ \def\greekAlphamacron {\char"01FB9 } % GREEK CAPITAL LETTER ALPHA WITH MACRON: Ᾱ \def\greekAlphavaria {\char"01FBA } % GREEK CAPITAL LETTER ALPHA WITH VARIA: Ὰ \def\greekAlphatonos {\char"01FBB } % GREEK CAPITAL LETTER ALPHA WITH OXIA: Ά \def\greekAlphaiotasub {\char"01FBC } % GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI: ᾼ \def\greekCoronis {\char"01FBD } % GREEK KORONIS: ᾽ \def\greekprosgegrammeni {\char"01FBE } % GREEK PROSGEGRAMMENI: ι \def\greekpsili {\char"01FBF } % GREEK PSILI: ᾿ \def\greekperispomeni {\char"01FC0 } % GREEK PERISPOMENI: ῀ \def\greekdialytikaperispomeni {\char"01FC1 } % GREEK DIALYTIKA AND PERISPOMENI: ῁ \def\greeketaiotasubvaria {\char"01FC2 } % GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI: ῂ \def\greeketaiotasub {\char"01FC3 } % GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI: ῃ \def\greeketaiotasubtonos {\char"01FC4 } % GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI: ῄ \def\greeketaperispomeni {\char"01FC6 } % GREEK SMALL LETTER ETA WITH PERISPOMENI: ῆ \def\greeketaiotasubperispomeni {\char"01FC7 } % GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI: ῇ \def\greekEpsilonvaria {\char"01FC8 } % GREEK CAPITAL LETTER EPSILON WITH VARIA: Ὲ \def\greekEpsilontonos {\char"01FC9 } % GREEK CAPITAL LETTER EPSILON WITH OXIA: Έ \def\greekEtavaria {\char"01FCA } % GREEK CAPITAL LETTER ETA WITH VARIA: Ὴ \def\greekEtatonos {\char"01FCB } % GREEK CAPITAL LETTER ETA WITH OXIA: Ή \def\greekEtaiotasub {\char"01FCC } % GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI: ῌ \def\greekpsilivaria {\char"01FCD } % GREEK PSILI AND VARIA: ῍ \def\greekpsilitonos {\char"01FCE } % GREEK PSILI AND OXIA: ῎ \def\greekpsiliperispomeni {\char"01FCF } % GREEK PSILI AND PERISPOMENI: ῏ \def\greekiotavrachy {\char"01FD0 } % GREEK SMALL LETTER IOTA WITH VRACHY: ῐ \def\greekiotamacron {\char"01FD1 } % GREEK SMALL LETTER IOTA WITH MACRON: ῑ \def\greekiotadialytikavaria {\char"01FD2 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA: ῒ \def\greekiotadialytikatonos {\char"01FD3 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA: ΐ \def\greekiotaperispomeni {\char"01FD6 } % GREEK SMALL LETTER IOTA WITH PERISPOMENI: ῖ \def\greekiotadialytikaperispomeni {\char"01FD7 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI: ῗ \def\greekIotavrachy {\char"01FD8 } % GREEK CAPITAL LETTER IOTA WITH VRACHY: Ῐ \def\greekIotamacron {\char"01FD9 } % GREEK CAPITAL LETTER IOTA WITH MACRON: Ῑ \def\greekIotavaria {\char"01FDA } % GREEK CAPITAL LETTER IOTA WITH VARIA: Ὶ \def\greekIotatonos {\char"01FDB } % GREEK CAPITAL LETTER IOTA WITH OXIA: Ί \def\greekdasiavaria {\char"01FDD } % GREEK DASIA AND VARIA: ῝ \def\greekdasiatonos {\char"01FDE } % GREEK DASIA AND OXIA: ῞ \def\greekdasiaperispomeni {\char"01FDF } % GREEK DASIA AND PERISPOMENI: ῟ \def\greekupsilonvrachy {\char"01FE0 } % GREEK SMALL LETTER UPSILON WITH VRACHY: ῠ \def\greekupsilonmacron {\char"01FE1 } % GREEK SMALL LETTER UPSILON WITH MACRON: ῡ \def\greekupsilondialytikavaria {\char"01FE2 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA: ῢ \def\greekupsilondialytikatonos {\char"01FE3 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA: ΰ \def\greekrhopsili {\char"01FE4 } % GREEK SMALL LETTER RHO WITH PSILI: ῤ \def\greekrhodasia {\char"01FE5 } % GREEK SMALL LETTER RHO WITH DASIA: ῥ \def\greekupsilonperispomeni {\char"01FE6 } % GREEK SMALL LETTER UPSILON WITH PERISPOMENI: ῦ \def\greekupsilondialytikaperispomeni {\char"01FE7 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI: ῧ \def\greekUpsilonvrachy {\char"01FE8 } % GREEK CAPITAL LETTER UPSILON WITH VRACHY: Ῠ \def\greekUpsilonmacron {\char"01FE9 } % GREEK CAPITAL LETTER UPSILON WITH MACRON: Ῡ \def\greekUpsilonvaria {\char"01FEA } % GREEK CAPITAL LETTER UPSILON WITH VARIA: Ὺ \def\greekUpsilontonos {\char"01FEB } % GREEK CAPITAL LETTER UPSILON WITH OXIA: Ύ \def\greekRhodasia {\char"01FEC } % GREEK CAPITAL LETTER RHO WITH DASIA: Ῥ \def\greekdialytikavaria {\char"01FED } % GREEK DIALYTIKA AND VARIA: ῭ \def\greekdialytikatonos {\char"01FEE } % GREEK DIALYTIKA AND OXIA: ΅ \def\greekvaria {\char"01FEF } % GREEK VARIA: ` \def\greekomegaiotasubvaria {\char"01FF2 } % GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI: ῲ \def\greekomegaiotasub {\char"01FF3 } % GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI: ῳ \def\greekomegaiotasubtonos {\char"01FF4 } % GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI: ῴ \def\greekomegaperispomeni {\char"01FF6 } % GREEK SMALL LETTER OMEGA WITH PERISPOMENI: ῶ \def\greekomegaiotasubperispomeni {\char"01FF7 } % GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI: ῷ \def\greekOmicronvaria {\char"01FF8 } % GREEK CAPITAL LETTER OMICRON WITH VARIA: Ὸ \def\greekOmicrontonos {\char"01FF9 } % GREEK CAPITAL LETTER OMICRON WITH OXIA: Ό \def\greekOmegavaria {\char"01FFA } % GREEK CAPITAL LETTER OMEGA WITH VARIA: Ὼ \def\greekOmegatonos {\char"01FFB } % GREEK CAPITAL LETTER OMEGA WITH OXIA: Ώ \def\greekOmegaiotasub {\char"01FFC } % GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI: ῼ \def\greekoxia {\char"01FFD } % GREEK OXIA: ´ \def\greekdasia {\char"01FFE } % GREEK DASIA: ῾ \def\enspace {\char"02002 } % EN SPACE:   \def\emspace {\char"02003 } % EM SPACE:   \def\threeperemspace {\char"02004 } % THREE-PER-EM SPACE:   \def\fourperemspace {\char"02005 } % FOUR-PER-EM SPACE:   \def\sixperemspace {\char"02006 } % SIX-PER-EM SPACE:   \def\figurespace {\char"02007 } % FIGURE SPACE:   \def\punctuationspace {\char"02008 } % PUNCTUATION SPACE:   \def\thinspace {\char"02009 } % THIN SPACE:   \def\figurespace {\char"0200A } % HAIR SPACE:   \def\zerowidthspace {\char"0200B } % ZERO WIDTH SPACE: ​ \def\textminus {\char"02012 } % FIGURE DASH: ‒ \def\endash {\char"02013 } % EN DASH: – \def\emdash {\char"02014 } % EM DASH: — \def\texthorizontalbar {\char"02015 } % HORIZONTAL BAR: ― \def\quoteleft {\char"02018 } % LEFT SINGLE QUOTATION MARK: ‘ \def\quoteright {\char"02019 } % RIGHT SINGLE QUOTATION MARK: ’ \def\quotesinglebase {\char"0201A } % SINGLE LOW-0x0009 QUOTATION MARK: ‚ \def\quotedblleft {\char"0201C } % LEFT DOUBLE QUOTATION MARK: “ \def\quotedblright {\char"0201D } % RIGHT DOUBLE QUOTATION MARK: ” \def\quotedblbase {\char"0201E } % DOUBLE LOW-0x0009 QUOTATION MARK: „ \def\textdag {\char"02020 } % DAGGER: † \def\textddag {\char"02021 } % DOUBLE DAGGER: ‡ \def\textbullet {\char"02022 } % BULLET: • \def\textellipsis {\char"02026 } % HORIZONTAL ELLIPSIS: … \def\narrownobreakspace {\char"0202F } % NARROW NO-BREAK SPACE:   \def\perthousand {\char"02030 } % PER MILLE SIGN: ‰ \def\guilsingleleft {\char"02039 } % SINGLE LEFT-POINTING ANGLE QUOTATION MARK: ‹ \def\guilsingleright {\char"0203A } % SINGLE RIGHT-POINTING ANGLE QUOTATION MARK: › \def\textfraction {\char"02044 } % FRACTION SLASH: ⁄ \def\medspace {\char"0205F } % MEDIUM MATHEMATICAL SPACE:   \def\textdong {\char"020AB } % DONG SIGN: ₫ \def\texteuro {\char"020AC } % EURO SIGN: € \def\textcelsius {\char"02103 } % DEGREE CELSIUS: ℃ \def\textnumero {\char"02116 } % NUMERO SIGN: № \def\textcircledP {\char"02117 } % SOUND RECORDING COPYRIGHT: ℗ \def\trademark {\char"02122 } % TRADE MARK SIGN: ™ \def\textounce {\char"02125 } % OUNCE SIGN: ℥ \def\textohm {\char"02126 } % OHM SIGN: Ω \def\textmho {\char"02127 } % INVERTED OHM SIGN: ℧ \def\textkelvin {\char"0212A } % KELVIN SIGN: K \def\textAngstrom {\char"0212B } % ANGSTROM SIGN: Å \def\onethird {\char"02153 } % VULGAR FRACTION ONE THIRD: ⅓ \def\twothirds {\char"02154 } % VULGAR FRACTION TWO THIRDS: ⅔ \def\onefifth {\char"02155 } % VULGAR FRACTION ONE FIFTH: ⅕ \def\twofifths {\char"02156 } % VULGAR FRACTION TWO FIFTHS: ⅖ \def\threefifths {\char"02157 } % VULGAR FRACTION THREE FIFTHS: ⅗ \def\fourfifths {\char"02158 } % VULGAR FRACTION FOUR FIFTHS: ⅘ \def\onesixth {\char"02159 } % VULGAR FRACTION ONE SIXTH: ⅙ \def\fivesixths {\char"0215A } % VULGAR FRACTION FIVE SIXTHS: ⅚ \def\oneeighth {\char"0215B } % VULGAR FRACTION ONE EIGHTH: ⅛ \def\threeeighths {\char"0215C } % VULGAR FRACTION THREE EIGHTHS: ⅜ \def\fiveeighths {\char"0215D } % VULGAR FRACTION FIVE EIGHTHS: ⅝ \def\seveneighths {\char"0215E } % VULGAR FRACTION SEVEN EIGHTHS: ⅞ \def\romanI {\char"02160 } % ROMAN NUMERAL ONE: Ⅰ \def\romanII {\char"02161 } % ROMAN NUMERAL TWO: Ⅱ \def\romanIII {\char"02162 } % ROMAN NUMERAL THREE: Ⅲ \def\romanIV {\char"02163 } % ROMAN NUMERAL FOUR: Ⅳ \def\romanV {\char"02164 } % ROMAN NUMERAL FIVE: Ⅴ \def\romanVI {\char"02165 } % ROMAN NUMERAL SIX: Ⅵ \def\romanVII {\char"02166 } % ROMAN NUMERAL SEVEN: Ⅶ \def\romanVIII {\char"02167 } % ROMAN NUMERAL EIGHT: Ⅷ \def\romanIX {\char"02168 } % ROMAN NUMERAL NINE: Ⅸ \def\romanX {\char"02169 } % ROMAN NUMERAL TEN: Ⅹ \def\romanXI {\char"0216A } % ROMAN NUMERAL ELEVEN: Ⅺ \def\romanXII {\char"0216B } % ROMAN NUMERAL TWELVE: Ⅻ \def\romanL {\char"0216C } % ROMAN NUMERAL FIFTY: Ⅼ \def\romanC {\char"0216D } % ROMAN NUMERAL ONE HUNDRED: Ⅽ \def\romanD {\char"0216E } % ROMAN NUMERAL FIVE HUNDRED: Ⅾ \def\romanM {\char"0216F } % ROMAN NUMERAL ONE THOUSAND: Ⅿ \def\romani {\char"02170 } % SMALL ROMAN NUMERAL ONE: ⅰ \def\romanii {\char"02171 } % SMALL ROMAN NUMERAL TWO: ⅱ \def\romaniii {\char"02172 } % SMALL ROMAN NUMERAL THREE: ⅲ \def\romaniv {\char"02173 } % SMALL ROMAN NUMERAL FOUR: ⅳ \def\romanv {\char"02174 } % SMALL ROMAN NUMERAL FIVE: ⅴ \def\romanvi {\char"02175 } % SMALL ROMAN NUMERAL SIX: ⅵ \def\romanvii {\char"02176 } % SMALL ROMAN NUMERAL SEVEN: ⅶ \def\romanviii {\char"02177 } % SMALL ROMAN NUMERAL EIGHT: ⅷ \def\romanix {\char"02178 } % SMALL ROMAN NUMERAL NINE: ⅸ \def\romanx {\char"02179 } % SMALL ROMAN NUMERAL TEN: ⅹ \def\romanxi {\char"0217A } % SMALL ROMAN NUMERAL ELEVEN: ⅺ \def\romanxii {\char"0217B } % SMALL ROMAN NUMERAL TWELVE: ⅻ \def\romanl {\char"0217C } % SMALL ROMAN NUMERAL FIFTY: ⅼ \def\romanc {\char"0217D } % SMALL ROMAN NUMERAL ONE HUNDRED: ⅽ \def\romand {\char"0217E } % SMALL ROMAN NUMERAL FIVE HUNDRED: ⅾ \def\romanm {\char"0217F } % SMALL ROMAN NUMERAL ONE THOUSAND: ⅿ \def\carriagereturn {\char"021B5 } % DOWNWARDS ARROW WITH CORNER LEFTWARDS: ↵ \def\ideographicspace {\char"03000 } % IDEOGRAPHIC SPACE:   \def\ideographichalffillspace {\char"0303F } % IDEOGRAPHIC HALF FILL SPACE: 〿 \def\ffligature {\char"0FB00 } % LATIN SMALL LIGATURE FF: ff \def\filigature {\char"0FB01 } % LATIN SMALL LIGATURE FI: fi \def\flligature {\char"0FB02 } % LATIN SMALL LIGATURE FL: fl \def\ffiligature {\char"0FB03 } % LATIN SMALL LIGATURE FFI: ffi \def\fflligature {\char"0FB04 } % LATIN SMALL LIGATURE FFL: ffl \def\stligature {\char"0FB06 } % LATIN SMALL LIGATURE ST: st \def\zerowidthnobreakspace {\char"0FEFF } % ZERO WIDTH NO-BREAK SPACE:  \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-lucida-typeone.mkiv0000644000175000017500000001475011754241457027266 0ustar norbertnorbert%D \module %D [ file=type-imp-lucida-typeone, %D version=2010.06.21, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Lucida, %D author=Mojca Miklavec \& Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[lucida-typeone] \starttypescript [\s!serif] [lucida] \definefontsynonym [LucidaBright] [\s!name:LucidaBright] \definefontsynonym [LucidaBright-Demi] [\s!name:LucidaBright-Demi] \definefontsynonym [LucidaBright-Italic] [\s!name:LucidaBright-Italic] \definefontsynonym [LucidaBright-DemiItalic] [\s!name:LucidaBright-DemiItalic] \definefontsynonym [LucidaBright-Oblique] [\s!name:LucidaBright-Oblique] \definefontsynonym [LucidaBrightSmallcaps] [\s!name:LucidaBrightSmallcaps] \definefontsynonym [LucidaBrightSmallcaps-Demi] [\s!name:LucidaBrightSmallcaps-Demi] \stoptypescript \starttypescript [\s!sans] [lucida] \definefontsynonym [LucidaSans] [\s!name:LucidaSans] \definefontsynonym [LucidaSans-Demi] [\s!name:LucidaSans-Demi] \definefontsynonym [LucidaSans-Bold] [\s!name:LucidaSans-Bold] \definefontsynonym [LucidaSans-Italic] [\s!name:LucidaSans-Italic] \definefontsynonym [LucidaSans-DemiItalic] [\s!name:LucidaSans-DemiItalic] \definefontsynonym [LucidaSans-BoldItalic] [\s!name:LucidaSans-BoldItalic] \stoptypescript \starttypescript [\s!mono] [lucida] \definefontsynonym [LucidaTypewriter] [\s!name:LucidaTypewriter] \definefontsynonym [LucidaTypewriterBold] [\s!name:LucidaTypewriterBold] \definefontsynonym [LucidaTypewriterOblique] [\s!name:LucidaTypewriterOblique] \definefontsynonym [LucidaTypewriterBoldOblique] [\s!name:LucidaTypewriterBoldOblique] \stoptypescript \starttypescript [\s!mono] [lucida] \definefontsynonym [LucidaSans-Typewriter] [\s!name:LucidaSans-Typewriter] \definefontsynonym [LucidaSans-TypewriterBold] [\s!name:LucidaSans-TypewriterBold] \definefontsynonym [LucidaSans-TypewriterOblique] [\s!name:LucidaSans-TypewriterOblique] \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\s!name:LucidaSans-TypewriterBoldOblique] \stoptypescript \starttypescript [calligraphy] [lucida] \definefontsynonym [LucidaCalligraphy-Italic] [\s!name:LucidaCalligraphy-Italic] \stoptypescript \starttypescript [casual] [lucida] \definefontsynonym [LucidaCasual] [\s!name:LucidaCasual] \definefontsynonym [LucidaCasual-Italic] [\s!name:LucidaCasual-Italic] \stoptypescript \starttypescript [handwriting] [lucida] \definefontsynonym [LucidaHandwriting-Italic] [\s!name:LucidaHandwriting-Italic] \stoptypescript \starttypescript [fax] [lucida] \definefontsynonym [LucidaFax] [\s!name:LucidaFax] \definefontsynonym [LucidaFax-Demi] [\s!name:LucidaFax-Demi] \definefontsynonym [LucidaFax-Italic] [\s!name:LucidaFax-Italic] \definefontsynonym [LucidaFax-DemiItalic] [\s!name:LucidaFax-DemiItalic] \stoptypescript \starttypescript [blackletter] [lucida] \definefontsynonym [LucidaBlackletter] [\s!name:LucidaBlackletter] \stoptypescript \starttypescript [\s!math] [lucida] \loadfontgoodies[lucida-typeone-math] \definefontsynonym[\s!MathRoman][lucidamath@lucida-math] \stoptypescript \starttypescript [\s!serif] [lucida] [\s!name] \definefontsynonym [\s!Serif] [LucidaBright] \definefontsynonym [\s!SerifBold] [LucidaBright-Demi] \definefontsynonym [\s!SerifItalic] [LucidaBright-Italic] \definefontsynonym [\s!SerifBoldItalic] [LucidaBright-DemiItalic] \definefontsynonym [\s!SerifSlanted] [LucidaBright-Oblique] \definefontsynonym [\s!SerifBoldSlanted] [LucidaBright-DemiItalic] \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps] \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi] \stoptypescript % Lucida Bright Sans \starttypescript [\s!sans] [lucida] [\s!name] \definefontsynonym [\s!Sans] [LucidaSans] \definefontsynonym [\s!SansBold] [LucidaSans-Demi] \definefontsynonym [\s!SansItalic] [LucidaSans-Italic] \definefontsynonym [\s!SansBoldItalic] [LucidaSans-DemiItalic] \definefontsynonym [\s!SansSlanted] [LucidaSans-Italic] \definefontsynonym [\s!SansBoldSlanted] [LucidaSans-DemiItalic] \definefontsynonym [SansCaps] [LucidaSans] \stoptypescript % Lucida Bright Sans Typewriter \starttypescript [\s!mono] [lucida] [\s!name] \definefontsynonym [\s!Mono] [LucidaSans-Typewriter] \definefontsynonym [\s!MonoBold] [LucidaSans-TypewriterBold] \definefontsynonym [\s!MonoItalic] [LucidaSans-TypewriterOblique] \definefontsynonym [\s!MonoBoldItalic] [LucidaSans-TypewriterBoldOblique] \definefontsynonym [\s!MonoSlanted] [LucidaSans-TypewriterOblique] \definefontsynonym [\s!MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique] \definefontsynonym [MonoCaps] [LucidaSans-Typewriter] \stoptypescript % Lucida Calligraphy \starttypescript [calligraphy] [lucida] [\s!name] \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic] \stoptypescript % Lucida Handwriting \starttypescript [handwriting] [lucida] [\s!name] \definefontsynonym [Handwriting] [LucidaHandwriting-Italic] \stoptypescript \starttypescript [lucida] \definetypeface [lucida] [\s!rm] [\s!serif] [lucida] [\s!default] [\s!features=\s!default] \definetypeface [lucida] [\s!ss] [\s!sans] [lucida] [\s!default] [\s!features=\s!default] \definetypeface [lucida] [\s!tt] [\s!mono] [lucida] [\s!default] [\s!features=\s!none] \definetypeface [lucida] [\s!hw] [\s!handwriting] [lucida] [\s!default] [\s!features=\s!default] \definetypeface [lucida] [\s!cg] [\s!calligraphy] [lucida] [\s!default] [\s!features=\s!default] \definetypeface [lucida] [\s!mm] [\s!math] [lucida] [\s!default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-sto.lua0000644000175000017500000001313112130411274024136 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-sto'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- we could nil some function in the productionrun local type, next, setmetatable, getmetatable, collectgarbage = type, next, setmetatable, getmetatable, collectgarbage local gmatch, format = string.gmatch, string.format local serialize, concat, sortedhash = table.serialize, table.concat, table.sortedhash local bytecode = lua.bytecode local strippedloadstring = utilities.lua.strippedloadstring local trace_storage = false local report_storage = logs.reporter("system","storage") storage = storage or { } local storage = storage local data = { } storage.data = data storage.min = 0 -- 500 storage.max = storage.min - 1 storage.noftables = storage.noftables or 0 storage.nofmodules = storage.nofmodules or 0 storage.mark = utilities.storage.mark storage.allocate = utilities.storage.allocate storage.marked = utilities.storage.marked storage.strip = false directives.register("system.compile.strip", function(v) storage.strip = v end) function storage.register(...) local t = { ... } local d = t[2] if d then storage.mark(d) else report_storage("fatal error: invalid storage %a",t[1]) os.exit() end data[#data+1] = t return t end local n = 0 local function dump() local max = storage.max for i=1,#data do local d = data[i] local message, original, target = d[1], d[2] ,d[3] local c, code, name = 0, { }, nil -- we have a nice definer for this for str in gmatch(target,"([^%.]+)") do if name then name = name .. "." .. str else name = str end c = c + 1 ; code[c] = format("%s = %s or { }",name,name) end max = max + 1 if trace_storage then c = c + 1 ; code[c] = format("print('restoring %s from slot %s')",message,max) end c = c + 1 ; code[c] = serialize(original,name) if trace_storage then report_storage('saving %a in slot %a, size %s',message,max,#code[c]) end -- we don't need tracing in such tables bytecode[max] = strippedloadstring(concat(code,"\n"),storage.strip,format("slot %s (%s)",max,name)) collectgarbage("step") end storage.max = max end lua.registerfinalizer(dump,"dump storage") -- to be tested with otf caching: function lua.collectgarbage(threshold) local current = collectgarbage("count") local threshold = threshold or 256 * 1024 while true do collectgarbage("collect") local previous = collectgarbage("count") if current - previous < threshold then break else current = previous end end end -- -- we also need to count at generation time (nicer for message) -- -- if lua.bytecode then -- from 0 upwards -- local i, b = storage.min, lua.bytecode -- while b[i] do -- storage.noftables = i -- b[i]() -- b[i] = nil -- i = i + 1 -- end -- end statistics.register("stored bytecode data", function() local nofmodules = (storage.nofmodules > 0 and storage.nofmodules) or (status.luabytecodes - lua.firstbytecode - 1) local nofdumps = (storage.noftables > 0 and storage.noftables ) or storage.max-storage.min + 1 local tofmodules = storage.tofmodules or 0 local tofdumps = storage.toftables or 0 if environment.initex then local luautilities = utilities.lua local nofstrippedbytes = luautilities.nofstrippedbytes local nofstrippedchunks = luautilities.nofstrippedchunks if nofstrippedbytes > 0 then return format("%s modules, %s tables, %s chunks, %s chunks stripped (%s bytes)", nofmodules, nofdumps, nofmodules + nofdumps, nofstrippedchunks, nofstrippedbytes ) elseif nofstrippedchunks > 0 then return format("%s modules, %s tables, %s chunks, %s chunks stripped", nofmodules, nofdumps, nofmodules + nofdumps, nofstrippedchunks ) else return format("%s modules, %s tables, %s chunks", nofmodules, nofdumps, nofmodules + nofdumps ) end else return format("%s modules (%0.3f sec), %s tables (%0.3f sec), %s chunks (%0.3f sec)", nofmodules, tofmodules, nofdumps, tofdumps, nofmodules + nofdumps, tofmodules + tofdumps ) end end) if lua.bytedata then storage.register("lua/bytedata",lua.bytedata,"lua.bytedata") end -- Because the storage mechanism assumes tables, we define a table for storing -- (non table) values. storage.shared = storage.shared or { } storage.register("storage/shared", storage.shared, "storage.shared") local mark = storage.mark if string.patterns then mark(string.patterns) end if lpeg.patterns then mark(lpeg.patterns) end if os.env then mark(os.env) end if number.dimenfactors then mark(number.dimenfactors) end if libraries then for k,v in next, libraries do mark(v) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-mis.mkii0000644000175000017500000000471611754241457024302 0ustar norbertnorbert%D \module %D [ file=meta-mis, %D version=2006.06.06, %D title=\METAPOST\ Graphics, %D subtitle=Misc Test Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % p/s 1/false 1/true 2/false 2/true % % MKII 8.5 8.0 8.8 8.5 % MKIV 16.1 7.2 16.3 7.4 \startuseMPgraphic{mptopdf-test} prologues := 2; mpprocset := 1 ; fill fullcircle scaled 3cm withcolor red ; fill fullcircle scaled 2cm withcolor green ; fill fullcircle scaled 1cm withcolor blue ; currentpicture := currentpicture shifted (-4cm,0) ; fill fullcircle scaled 3cm withcolor cmyk(0,0,1,0) ; fill fullcircle scaled 2cm withcolor cmyk(0,1,0,0) ; fill fullcircle scaled 1cm withcolor cmyk(1,0,0,0) ; currentpicture := currentpicture shifted (-4cm,0) ; draw fullcircle scaled 3cm dashed evenly ; draw fullcircle scaled 2cm dashed withdots ; draw origin withpen pencircle scaled 3mm; currentpicture := currentpicture shifted (-4cm,0) ; fill fullcircle scaled 2cm shifted (-.5cm,+.5cm) withcolor transparent(1,.5,red); fill fullcircle scaled 2cm shifted (-.5cm,-.5cm) withcolor transparent(1,.5,red); fill fullcircle scaled 2cm shifted (+.5cm,+.5cm) withcolor transparent(1,.5,green); fill fullcircle scaled 2cm shifted (+.5cm,-.5cm) withcolor transparent(1,.5,cmyk(1,0,1,.5)); currentpicture := currentpicture shifted (12cm,-4cm) ; draw "o e p s" infont defaultfont scaled 2 shifted (-1cm,0) ; currentpicture := currentpicture shifted (-4cm,0) ; % bug: shift draw fullcircle scaled 3cm withpen pencircle yscaled 3mm xscaled 2mm rotated 30 ; draw fullcircle scaled 2cm withpen pencircle yscaled 3mm xscaled 2mm rotated 20 withcolor red ; filldraw fullcircle scaled 1cm withpen pencircle yscaled 3mm xscaled 2mm rotated 10 withcolor green ; currentpicture := currentpicture shifted (-4cm,0) ; % shade cannot handle shift circular_shade(fullcircle scaled 3cm,0,.2red,.9green) ; circular_shade(fullcircle scaled 3cm shifted(+4cm,0),0,cmyk(1,0,0,0),cmyk(0,1,0,0)) ; filldraw boundingbox currentpicture enlarged (-bbheight(currentpicture)/2+2.5mm) withpen pencircle scaled 1pt withcolor .5white ; \stopuseMPgraphic \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-mvs.mkii0000644000175000017500000002105111754241457024332 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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] [umvs] \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 context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-jmn.mkii0000644000175000017500000001632111754241457024315 0ustar norbertnorbert%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 \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-nav.mkii0000644000175000017500000000343711754241457024275 0ustar norbertnorbert%D \module %D [ file=meta-nav, %D version=2003.03.28, %D title=\METAPOST\ Graphics, %D subtitle=Navigational Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startuniqueMPgraphic{navplus}{size,color,type,mode} color c ; numeric s, t ; path p ; t := \MPvar{type} ; c := \MPvar{color} ; s := \MPvar{size} ; if \MPvar{mode} = 1 : c := .5[c,white] fi ; if t = 1 : p := ((0,0)--(1/2,0)--(1,1/3)--(1,1)--(0,1)--(0,0)--cycle) xyscaled (3,4) ; elseif t = 2 : p := ((0,0)--(1,0)--(1,1)--(0,1)--(1/2,2/5)--(1,1)--(0,1)--cycle) xyscaled (4,3) ; else : p := fullsquare xyscaled (3,3) ; fi ; draw p withpen pencircle scaled (1/2) withcolor .75white ; fill p withcolor c ; draw p withpen pencircle scaled (1/3) withcolor .5c ; currentpicture := currentpicture scaled s ; currentpicture := currentpicture shifted -center currentpicture ; \stopuniqueMPgraphic \setupMPvariables [navplus] [size=1ex, color=black, type=1, mode=0] \definepalet [navplus] [attach=darkred, comment=darkblue] \definesymbol [comment-normal] [\uniqueMPgraphic{navplus}{type=1,color=navplus:comment}] \definesymbol [comment-down] [\uniqueMPgraphic{navplus}{type=1,color=navplus:comment,mode=1}] \definesymbol [attach-normal] [\uniqueMPgraphic{navplus}{type=2,color=navplus:attach}] \definesymbol [attach-down] [\uniqueMPgraphic{navplus}{type=2,color=navplus:attach,mode=1}] \unprotect \setupcomment [\c!symbol={comment-normal,comment-down}] \setupattachments[\c!symbol={attach-normal,attach-down}] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-unk.mkii0000644000175000017500000001520111754241457024316 0ustar norbertnorbert%D \module %D [ file=font-unk, %D version=1998.09.10, %D title=\CONTEXT\ Font Macros, %D subtitle=Unknown Defaults, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is rather important, because it enables us to %D define and call for not yet defined fonts in a way %D completely independant of real font names. First we map %D some meaningful names onto unknown filenames. \unprotect \definefontsynonym [Serif] [unknown] \definefontsynonym [SerifBold] [unknown] \definefontsynonym [SerifItalic] [unknown] \definefontsynonym [SerifSlanted] [unknown] \definefontsynonym [SerifBoldItalic] [unknown] \definefontsynonym [SerifBoldSlanted] [unknown] \definefontsynonym [SerifCaps] [unknown] \definefontsynonym [Sans] [unknown] \definefontsynonym [SansBold] [unknown] \definefontsynonym [SansItalic] [unknown] \definefontsynonym [SansSlanted] [unknown] \definefontsynonym [SansBoldItalic] [unknown] \definefontsynonym [SansBoldSlanted] [unknown] \definefontsynonym [SansCaps] [unknown] \definefontsynonym [Mono] [unknown] \definefontsynonym [MonoBold] [unknown] \definefontsynonym [MonoItalic] [unknown] \definefontsynonym [MonoSlanted] [unknown] \definefontsynonym [MonoBoldItalic] [unknown] \definefontsynonym [MonoBoldSlanted] [unknown] \definefontsynonym [MonoCaps] [unknown] \definefontsynonym [MathRoman] [unknown] \definefontsynonym [MathExtension] [unknown] \definefontsynonym [MathItalic] [unknown] \definefontsynonym [MathSymbol] [unknown] \definefontsynonym [MathNoName] [unknown] \definefontsynonym [MathAlpha] [unknown] \definefontsynonym [MathBeta] [unknown] \definefontsynonym [MathGamma] [unknown] \definefontsynonym [MathDelta] [unknown] \definefontsynonym [MathRomanBold] [MathRoman] \definefontsynonym [MathExtensionBold] [MathExtension] \definefontsynonym [MathItalicBold] [MathItalic] \definefontsynonym [MathSymbolBold] [MathSymbol] \definefontsynonym [MathAlphaBold] [MathAlpha] \definefontsynonym [MathBetaBold] [MathBeta] \definefontsynonym [MathGammaBold] [MathGamma] \definefontsynonym [MathDeltaBold] [MathDelta] \definefontsynonym [Handwriting] [unknown] \definefontsynonym [Calligraphic] [unknown] %D This permit us to define (use) fonts that refer to the default %D style (so, Bold may expand to SansBold or SerifBold, depending %D on the default style in the typeface). % \def\setfontsynonym[#1]#2[#3]{\setvalue{\??ff\fontclass#1}{#3}} % % \setfontsynonym[\s!Normal] [\fontstringD] % \setfontsynonym[\s!Bold] [\fontstringD\s!Bold] % \setfontsynonym[\s!Italic] [\fontstringD\s!Italic] % \setfontsynonym[\s!Slanted] [\fontstringD\s!Slanted] % \setfontsynonym[\s!BoldItalic] [\fontstringD\s!BoldItalic] % \setfontsynonym[\s!BoldSlanted][\fontstringD\s!BoldSlanted] % \setfontsynonym[\s!Caps] [\fontstringD\s!Caps] \definefontsynonym[\s!Normal] [\noexpand\fontstringD] \definefontsynonym[\s!Bold] [\noexpand\fontstringD\noexpand\s!Bold] \definefontsynonym[\s!Italic] [\noexpand\fontstringD\noexpand\s!Italic] \definefontsynonym[\s!Slanted] [\noexpand\fontstringD\noexpand\s!Slanted] \definefontsynonym[\s!BoldItalic] [\noexpand\fontstringD\noexpand\s!BoldItalic] \definefontsynonym[\s!BoldSlanted][\noexpand\fontstringD\noexpand\s!BoldSlanted] \definefontsynonym[\s!Caps] [\noexpand\fontstringD\noexpand\s!Caps] %D Also handy: \definefontsynonym [Regular] [Serif] \definefontsynonym [RegularBold] [SerifBold] \definefontsynonym [RegularItalic] [SerifItalic] \definefontsynonym [RegularSlanted] [SerifSlanted] \definefontsynonym [RegularBoldItalic] [SerifBoldItalic] \definefontsynonym [RegularBoldSlanted] [SerifBoldSlanted] \definefontsynonym [RegularCaps] [SerifCaps] \definefontsynonym [Support] [Sans] \definefontsynonym [SupportBold] [SansBold] \definefontsynonym [SupportItalic] [SansItalic] \definefontsynonym [SupportSlanted] [SansSlanted] \definefontsynonym [SupportBoldItalic] [SansBoldItalic] \definefontsynonym [SupportBoldSlanted] [SansBoldSlanted] \definefontsynonym [SupportCaps] [SansCaps] %D Well, not that good an idea: \definefontsynonym [Roman] [Serif] \definefontsynonym [RomanBold] [SerifBold] \definefontsynonym [RomanItalic] [SerifItalic] \definefontsynonym [RomanSlanted] [SerifSlanted] \definefontsynonym [RomanBoldItalic] [SerifBoldItalic] \definefontsynonym [RomanBoldSlanted] [SerifBoldSlanted] \definefontsynonym [RomanCaps] [SerifCaps] \definefontsynonym [Type] [Mono] \definefontsynonym [TypeBold] [MonoBold] \definefontsynonym [TypeItalic] [MonoItalic] \definefontsynonym [TypeSlanted] [MonoSlanted] \definefontsynonym [TypeBoldItalic] [MonoBoldItalic] \definefontsynonym [TypeBoldSlanted] [MonoBoldSlanted] \definefontsynonym [TypeCaps] [MonoCaps] %D Next we define roman, sans and monospaced font sets. \definebodyfont [default] [rm] [tf=Serif sa 1, bf=SerifBold sa 1, it=SerifItalic sa 1, sl=SerifSlanted sa 1, bi=SerifBoldItalic sa 1, bs=SerifBoldSlanted sa 1, sc=SerifCaps sa 1] \definebodyfont [default] [ss] [tf=Sans sa 1, bf=SansBold sa 1, it=SansItalic sa 1, sl=SansSlanted sa 1, bi=SansBoldItalic sa 1, bs=SansBoldSlanted sa 1, sc=SansCaps sa 1] \definebodyfont [default] [tt] [tf=Mono sa 1, bf=MonoBold sa 1, it=MonoItalic sa 1, sl=MonoSlanted sa 1, bi=MonoBoldItalic sa 1, bs=MonoBoldSlanted sa 1, sc=MonoCaps sa 1] \definebodyfont [default] [mm] [mr=MathRoman mo 1, ex=MathExtension mo 1, mi=MathItalic mo 1, sy=MathSymbol mo 1, nn=MathNoName mo 1, ma=MathAlpha mo 1, mb=MathBeta mo 1, mc=MathGamma mo 1, md=MathDelta mo 1] \definebodyfont [bfmath] [mm] [mrbf=MathRomanBold mo 1, exbf=MathExtensionBold mo 1, mibf=MathItalicBold mo 1, sybf=MathSymbolBold mo 1, mabf=MathAlphaBold mo 1, mbbf=MathBetaBold mo 1, mcbf=MathGammaBold mo 1, mdbf=MathDeltaBold mo 1] \definebodyfont [default] [hw] [tf=Handwriting sa 1] \definebodyfont [default] [cg] [tf=Calligraphy sa 1] %D These definitions come into action as soon as names are %D mapped onto real file names (or names that themselves are %D mapped). \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-asciimath.lua0000644000175000017500000002062511754241457024622 0ustar norbertnorbertif not modules then modules = { } end modules ['x-asciimath'] = { version = 1.001, comment = "companion to x-asciimath.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

Some backgrounds are discussed in x-asciimath.mkiv.

--ldx]]-- local trace_mapping = false if trackers then trackers.register("modules.asciimath.mapping", function(v) trace_mapping = v end) end local asciimath = { } local moduledata = moduledata or { } moduledata.asciimath = asciimath local report_asciimath = logs.reporter("mathematics","asciimath") local format = string.format local lpegmatch = lpeg.match local S, P, R, C, V, Cc, Ct, Cs = lpeg.S, lpeg.P, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Ct, lpeg.Cs local letter = lpeg.patterns.utf8 local space = S(" \n\r\t") local spaces = space^0/"" local integer = P("-")^-1 * R("09")^1 local realpart = P("-")^-1 * R("09")^1 * S(".")^1 * R("09")^1 local number = integer -- so we can support nice formatting if needed local real = realpart -- so we can support nice formatting if needed local float = realpart * P("E") * integer -- so we can support nice formatting if needed local texnic = P("\\") * (R("az","AZ")^1) local premapper = Cs ( ( P("@") / "\\degrees " + P("O/") / "\\varnothing " + P("o+") / "\\oplus " + P("o.") / "\\ocirc " + P("!in") / "\\not\\in " + P("!=") / "\\neq " + P("**") / "\\star " + P("*") / "\\cdot " + P("//") / "\\slash " + P("/_") / "\\angle " + P("\\\\") / "\\backslash " + P("^^^") / "\\wedge " + P("^^") / "\\wedge " + P("<<") / "\\left\\langle " + P(">>") / "\\right\\rangle " + P("<=") / "\\leq " + P(">=") / "\\geq " + P("-<") / "\\precc " + P(">-") / "\\succ " + P("~=") / "\\cong " + P("~~") / "\\approx " + P("=>") / "\\Rightarrow " + P("(:") / "\\left\\langle " + P(":)") / "\\right\\rangle " + P(":.") / "\\therefore " + P("~|") / "\\right\\rceil " + P("_|_") / "\\bot " + P("_|") / "\\right\\rfloor " + P("+-") / "\\pm " + P("|--") / "\\vdash " + P("|==") / "\\models " + P("|_") / "\\left\\lfloor " + P("|~") / "\\left\\lceil " + P("-:") / "\\div " + P("_=") / "\\equiv " + P("|") / "\\middle\\| " + P("dx") / "(dx)" + P("dy") / "(dy)" + P("dz") / "(dz)" + letter + P(1) )^0 ) local reserved = { ["aleph"] = "\\aleph ", ["vdots"] = "\\vdots ", ["ddots"] = "\\ddots ", ["oint"] = "\\oint ", ["grad"] = "\\nabla ", ["prod"] = "\\prod ", ["prop"] = "\\propto ", ["sube"] = "\\subseteq ", ["supe"] = "\\supseteq ", ["sinh"] = "\\sinh ", ["cosh"] = "\\cosh ", ["tanh"] = "\\tanh ", ["sum"] = "\\sum ", ["vvv"] = "\\vee ", ["nnn"] = "\\cap ", ["uuu"] = "\\cup ", ["sub"] = "\\subset ", ["sup"] = "\\supset ", ["not"] = "\\lnot ", ["iff"] = "\\Leftrightarrow ", ["int"] = "\\int ", ["del"] = "\\partial ", ["and"] = "\\and ", ["not"] = "\\not ", ["sin"] = "\\sin ", ["cos"] = "\\cos ", ["tan"] = "\\tan ", ["csc"] = "\\csc ", ["sec"] = "\\sec ", ["cot"] = "\\cot ", ["log"] = "\\log ", ["det"] = "\\det ", ["lim"] = "\\lim ", ["mod"] = "\\mod ", ["gcd"] = "\\gcd ", ["lcm"] = "\\lcm ", ["min"] = "\\min ", ["max"] = "\\max ", ["xx"] = "\\times ", ["in"] = "\\in ", ["ox"] = "\\otimes ", ["vv"] = "\\vee ", ["nn"] = "\\cap ", ["uu"] = "\\cup ", ["oo"] = "\\infty ", ["ln"] = "\\ln ", ["or"] = "\\or ", ["AA"] = "\\forall ", ["EE"] = "\\exists ", ["TT"] = "\\top ", ["CC"] = "\\Bbb{C}", ["NN"] = "\\Bbb{N}", ["QQ"] = "\\Bbb{Q}", ["RR"] = "\\Bbb{R}", ["ZZ"] = "\\Bbb{Z}", } local postmapper = Cs ( ( P("\\mathoptext ") * spaces * (P("\\bgroup ")/"{") * (1-P("\\egroup "))^1 * (P("\\egroup ")/"}") + (P("\\bgroup ")) / "{" + (P("\\egroup ")) / "}" + P("\\") * (R("az","AZ")^2) + (R("AZ","az")^2) / reserved + P("{:") / "\\left." + P(":}") / "\\right." + P("(") / "\\left(" + P(")") / "\\right)" + P("[") / "\\left[" + P("]") / "\\right]" + P("{") / "\\left\\{" + P("}") / "\\right\\}" + letter + P(1) )^0 ) local parser local function converted(original,totex) local ok, result if trace_mapping then report_asciimath("original : %s",original) end local premapped = lpegmatch(premapper,original) if premapped then if trace_mapping then report_asciimath("prepared : %s",premapped) end local parsed = lpegmatch(parser,premapped) if parsed then if trace_mapping then report_asciimath("parsed : %s",parsed) end local postmapped = lpegmatch(postmapper,parsed) if postmapped then if trace_mapping then report_asciimath("finalized: %s",postmapped) end result, ok = postmapped, true else result = "error in postmapping" end else result = "error in mapping" end else result = "error in premapping" end if totex then if ok then context.mathematics(result) else context.type(result) -- some day monospaced end else return result end end local function onlyconverted(str) local parsed = lpegmatch(parser,str) return parsed or str end local sqrt = P("sqrt") / "\\rootradical \\bgroup \\egroup " local root = P("root") / "\\rootradical " local frac = P("frac") / "\\frac " local stackrel = P("stackrel") / "\\stackrel " local text = P("text") / "\\mathoptext " local hat = P("hat") / "\\widehat " local overbar = P("bar") / "\\overbar " local underline = P("ul") / "\\underline " local vec = P("vec") / "\\overrightarrow " local dot = P("dot") / "\\dot " local ddot = P("ddot") / "\\ddot " local left = P("(:") + P("{:") + P("(") + P("[") + P("{") local right = P(":)") + P(":}") + P(")") + P("]") + P("}") local leftnorright = 1 - left - right local singles = sqrt + text + hat + underline + overbar + vec + ddot + dot local doubles = root + frac + stackrel local ignoreleft = (left/"") * spaces * spaces local ignoreright = spaces * (right/"") * spaces local ignoreslash = spaces * (P("/")/"") * spaces local comma = P(",") local nocomma = 1-comma local anychar = P(1) local openmatrix = left * spaces * Cc("\\matrix\\bgroup ") local closematrix = Cc("\\egroup ") * spaces * right local nextcolumn = spaces * (comma/"&") * spaces local nextrow = spaces * (comma/"\\cr ") * spaces local finishrow = Cc("\\cr ") local opengroup = left/"\\bgroup " local closegroup = right/"\\egroup " local somescript = S("^_") * spaces local beginargument = Cc("\\bgroup ") local endargument = Cc("\\egroup ") parser = Cs { "main", scripts = somescript * V("argument"), division = Cc("\\frac") * V("argument") * spaces * ignoreslash * spaces * V("argument"), double = doubles * spaces * V("argument") * spaces * V("argument"), single = singles * spaces * V("argument"), balanced = opengroup * (C((leftnorright + V("balanced"))^0)/onlyconverted) * closegroup, argument = V("balanced") + V("token"), element = (V("step") + (V("argument") + V("step")) - ignoreright - nextcolumn - comma)^1, commalist = ignoreleft * V("element") * (nextcolumn * spaces * V("element"))^0 * ignoreright, matrix = openmatrix * spaces * (V("commalist") * (nextrow * V("commalist"))^0) * finishrow * closematrix, token = beginargument * (texnic + float + real + number + letter) * endargument, step = V("scripts") + V("division") + V("single") + V("double"), main = (V("matrix") + V("step") + anychar)^0, } asciimath.reserved = reserved asciimath.convert = converted context-2013.05.28.20130704/texmf-dist/tex/context/base/m-oldfun.mkiv0000644000175000017500000005027612130411274024307 0ustar norbertnorbert%D \module %D [ file=m-oldfun, % was: supp-fun %D version=1995.10.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Fun Stuff, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Beware, these macros wil be replaced and at some point this %D module will not be preloaded any more. %D This module implements some typographics tricks that can %D be fun when designing document layouts. The examples use %D macros that are typical to \CONTEXT, but non \CONTEXT\ %D users can use the drop caps and first line treatment %D macros without problems. This module will be extended %D when the need for more of such tricks arises. \writestatus{loading}{ConTeXt Support Macros / Fun Stuff} %D \macros %D {DroppedCaps, DroppedString, DroppedIndent, DroppedLines} %D %D \startbuffer %D \DroppedCaps %D {\color[green]} {SerifBold} %D {\the\dimexpr2.2\baselineskip} {2pt} {\the\baselineskip} {2} %D Let's start %D \stopbuffer %D %D \getbuffer with dropped caps, those blown up first %D characters of a paragraph. It's hard to implement a general %D mechanism that suits all situations, but dropped caps are so %D seldomly used that we can permit ourselves a rather user %D unfriendly implementation. %D %D \typebuffer %D %D As we will see, there are 7 different settings involved. The %D first argument takes a command that is used to do whatever %D fancy things we want to do, but normally this one will be %D empty. The second argument takes the font. Because we're %D dealing with something very typographic, there is no real %D reason to adopt complicated font switching schemes, a mere %D name will do. Font encodings can bring no harm, because the %D alphanumeric characters are nearly always located at their %D natural position in the encoding vector. %D %D \startbuffer %D \DroppedCaps %D {\color[red]} {SerifBold} %D {\the\baselineskip} {0pt} {0pt} {1} %D This simple %D \stopbuffer %D %D \getbuffer case shows us what happens when we apply minimal %D values. Here we used: %D %D \typebuffer %D %D \startbuffer %D \DroppedCaps %D {\color[red]} {SerifBold} %D {\the\dimexpr2\baselineskip} {0pt} {\the\baselineskip} {2} %D Is this ugly %D \stopbuffer %D %D \getbuffer example the third argument tells %D this macro that we want a dropped capital scaled to the %D baseline distance. The two zero point arguments are the %D horizontal and vertical offsets and the last arguments %D determines the hanging indentation. In this paragraph we %D set the height to two times the baselinedistance and use %D two hanging lines: %D %D \typebuffer %D %D Here, the first character is moved down one baseline. Here %D we also see why the horizontal offset is important. The %D first example (showing the~L) sets this to a few points and %D also used a slightly larger height. %D %D Of course common users (typist) are not supposed to see this %D kind of fuzzy definitions, but fortunately \TEX\ permits us %D to hide them in macros. Using a macro also enables us to %D garantee consistency throughout the document: %D %D \startbuffer %D \def\MyDroppedCaps% %D {\DroppedCaps %D {\color[green]} {SerifBold} %D {\the\dimexpr5\baselineskip} {3pt} {\the\dimexpr3\baselineskip} {4}} %D %D \MyDroppedCaps The implementation %D \stopbuffer %D %D \typebuffer %D %D \getbuffer of the general macro is rather simple and only %D depends on the arguments given and the dimensions of the %D strut box. We explicitly load the font, which is no problem %D because \TEX\ does not load a font twice. We could have %D combined some arguments, like the height, vertical offset %D and the number of lines, but the current implementation %D proved to be the most flexible. One should be aware of the %D fact that the offsets depend on the design of the glyphs %D used. \let\DroppedIndent\!!zeropoint \def\DroppedLines{0} \def\DroppedString{ABCDEFGHIJKLMNOPQRSTUVWXYZ} \let\globaldropcaps\global % will be an option, but on by default \unexpanded\def\localdropcaps{\let\globaldropcaps\relax} \chardef\DroppedStatus = 0 % 0=done 1=starting 2=doing 3=error \chardef\DropMode = 0 % 1 == marginhang \ifx\keeplinestogether\undefined \let\keeplinestogether\gobbleoneargument \fi \unexpanded\def\DroppedCaps#1#2#3#4#5#6#7% does not yet handle accented chars {\defconvertedargument\asciia{#7}% \defconvertedcommand \asciib{\DroppedString}% \doifinstringelse\asciia\asciib {\noindentation \dontleavehmode \checkindentation % redo this one %\ifhmode\hskip-\parindent\fi % sensitive for context mechanism \keeplinestogether{#6}% \setbox0\hbox{\definedfont[#2 at #3]#1{#7}\hskip#4}% \ifdim\dp0>\strutdp % one of those Q's , will be option \setbox2\hbox{\raise\dp0\hbox{\lower\strutdp\copy0}}% \ht2\ht0 \dp0\strutdp \setbox0\box2 \fi \setbox0\hbox {\ifnum\DropMode=\plusone \hskip-\wd0\wd0\zeropoint \fi \lower#5\box0}% \ht0\strutht \dp0\strutdp \ifnum\DropMode=\plusone \globaldropcaps\let\DroppedIndent\!!zeropoint \globaldropcaps\edef\DroppedLines{\number\maxdimen}% \globaldropcaps\chardef\DroppedStatus\plusthree \else \globaldropcaps\edef\DroppedIndent{\the\wd0}% \globaldropcaps\edef\DroppedLines {\number#6}% \globaldropcaps\chardef\DroppedStatus\plustwo \globaldropcaps\hangindent\DroppedIndent \globaldropcaps\hangafter-\DroppedLines % \noindent \noindentation \checkindentation % redo this one \hskip-\DroppedIndent \fi \vbox{\forgetall\box0}% \nobreak \let\next\ignorespaces} % Could be a one character word ! {\globaldropcaps\let\DroppedIndent\!!zeropoint \globaldropcaps\edef\DroppedLines{\number\maxdimen}% \globaldropcaps\chardef\DroppedStatus\plusthree \def\next{#7}}% \let\globaldropcaps\global \next} %D Before we go to the next topic, we summarize this command: %D %D \starttyping %D \DroppedCaps %D {command} {font} %D {height} {hoffset} {voffset} {lines} %D \stoptyping %D %D Sometimes you need to make sure that the global settings are %D kept local, as in: %D % %D \startbuffer % %D \defineparagraphs[SomePar][n=2,rule=on] % %D \setupparagraphs [SomePar][1][width=.5\textwidth] % %D \setupparagraphs [SomePar][2][width=.5\textwidth] %D \startbuffer %D \defineparagraphs[SomePar][n=2,rule=on] %D \setupparagraphs [SomePar][1][width=.5\textwidth] %D \setupparagraphs [SomePar][2][width=.5\textwidth] %D %D \startSomePar %D \localdropcaps\NiceDroppedCaps{}{cmr12}{0pt}{2}Here we need %D to explicitly keep the hanging indentation local, like it or %D not. %D \SomePar %D \localdropcaps\NiceDroppedCaps{}{cmr12}{0pt}{2}Here we need %D to explicitly keep the hanging indentation local, like it or %D not. %D \stopSomePar %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {AutoDroppedCaps, CheckDroppedCaps} %D %D {\em To be documented.} % example usage % % \def\bpar{\ifvmode\CheckDroppedCaps\fi} % \def\epar{\ifhmode\par\fi\CheckDroppedCaps} \newcount\lastprevgraf \newcount\droppedlines \unexpanded\def\CheckDroppedCaps {\global\lastprevgraf\prevgraf} \unexpanded\def\AutoDroppedCaps % will be proper core stuff since it {\globaldropcaps\chardef\DroppedStatus\plusone \global\lastprevgraf\zerocount \global\droppedlines\zerocount \EveryPar{\doAutoDroppedCaps}} \let\AutoDroppedNext\relax \ifx\AutoDroppedCapsCommand\undefined \unexpanded\def\AutoDroppedCapsCommand{\NiceDroppedCaps{}{SerifBold}{.125em}{3}} \fi \unexpanded\def\doAutoDroppedCaps {\ifcase\DroppedStatus % done \let\next\relax \or % starting % \ifnum\lastprevgraf>0 % tricky, probably a wrong par % \globaldropcaps\chardef\DroppedStatus=3 % and inhibits dropped % \let\next\relax % caps after titles and more than once % \else % so let's nill this rubishly code fragment \let\next\AutoDroppedCapsCommand % \fi % and hope for the best \or % doing \global\advance\droppedlines \lastprevgraf \ifnum\droppedlines=\zerocount \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \else\ifnum\droppedlines>\zerocount \ifnum\droppedlines<\DroppedLines\relax \globaldropcaps\hangindent\DroppedIndent \globaldropcaps\hangafter-\DroppedLines \globaldropcaps\advance\hangafter \droppedlines \hskip-\parindent % brrr \let\next\AutoDroppedNext \else \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \fi \else \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \fi\fi \or % error \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \fi \next} %D \macros %D {LineDroppedCaps, NiceDroppedCaps} %D %D To save definitions, we also provide: %D %D \starttyping %D \LineDroppedCaps {command} {font} {hoffset} {lines} %D \NiceDroppedCaps {command} {font} {hoffset} {lines} %D \stoptyping %D %D The first command scales the font to the exact height, while %D the second command scales the font to a nice 2.5 times the %D line height, a value that gives a pleasant grayness. \unexpanded\def\DoLineDroppedCaps#1#2#3#4#5% compensation command font offset lines {\scratchcounter#5% \advance\scratchcounter \minusone \scratchdimen\scratchcounter\baselineskip \advance\scratchdimen #1% \NormalizeFontHeight\DummyFont{W}\scratchdimen{#3}% \DroppedCaps{#2}{#3}\TheNormalizedFontSize{#4} {\scratchcounter\baselineskip}{#5}} \unexpanded\def\LineDroppedCaps% command font offset lines {\DoLineDroppedCaps{\strutht}} \unexpanded\def\NiceDroppedCaps% command font offset lines {\DoLineDroppedCaps{.5\baselineskip}} %D \macros %D {TreatFirstLine} %D %D \startbuffer %D \TreatFirstLine {\sc} {} {} {} %D Instead of limiting its action to one token, the next macro %D treats the whole first line. This paragraph was typeset by %D saying: %D \stopbuffer %D %D \getbuffer %D %D \typebuffer %D %D \startbuffer %D \TreatFirstLine {\startcolor[red]\bf} {\stopcolor} {} {} %D The combined color and font effect is also possible, %D although one must be careful in using macros that accumulate %D grouping, but the commands used here are pretty save in that %D respect. %D \stopbuffer %D %D \getbuffer %D %D \typebuffer %D %D Before we explain the third and fourth argument, we show the %D implementation. Those who know a bit about the way \TEX\ %D treats tokens, will probably see in one glance that this %D alternative works all right for most text||only situations %D in which there is enough text available for the first line, %D but that more complicated things will blow. One has to live %D with that. A workaround is rather trivial but obscures the %D principles used. \unexpanded\def\TreatFirstLine#1#2#3#4% before, after, first, next {\leavevmode \bgroup \forgetall \bgroup #1% \setbox0\emptybox \setbox2\emptybox \def\grabfirstline##1 % {\setbox2\hbox {\ifvoid0 {#3{\ignorespaces##1}}% \else \unhcopy0\ {#4{##1}}% \fi}% \ifdim\wd2=\zeropoint \setbox0\emptybox \setbox2\emptybox \@EA\grabfirstline \else\ifdim\wd2>\hsize \hbox to \hsize{\strut\unhbox0}#2\egroup \break##1\ \egroup \else \setbox0\box2 \@EAEAEA\grabfirstline \fi\fi}% \grabfirstline} %D \startbuffer %D \gdef\FunnyCommand %D {\getrandomfloat\FunnyR{0}{1}% %D \getrandomfloat\FunnyG{0}{1}% %D \getrandomfloat\FunnyB{0}{1}% %D \definecolor[FunnyColor][r=\FunnyR,g=\FunnyG,b=\FunnyB]% %D \color[FunnyColor]} %D %D %\TreatFirstLine {\bf} {} {\FunnyCommand} {\FunnyCommand} %D The third and fourth argument can be used to gain special %D effects on the individual words. Of course one needs ... %D \stopbuffer %D %D \getbuffer %D to know a bit more about the macro package used to get real %D nice effects, but this example probably demonstrates the %D principles well. %D %D \typebuffer %D %D Like in dropped caps case, one can hide such treatments in a %D macro, like: %D %D \starttyping %D \def\MyTreatFirstLine% %D {\TreatFirstLine{\bf}{}{\FunnyCommand}{\FunnyCommand}} %D \stoptyping %D \macros %D {reshapebox} %D %D \startbuffer %D \beginofshapebox %D When using \CONTEXT, one can also apply this funny command %D to whole lines by using the reshape mechanism. Describing %D this interesting mechanism falls outside the scope of this %D module, so we only show the trick. This is an example of %D low level \CONTEXT\ functionality: it's all there, and it's %D stable, but not entirely meant for novice users. %D \endofshapebox %D %D \reshapebox{\FunnyCommand{\box\shapebox}} \flushshapebox %D \stopbuffer %D %D \getbuffer %D %D \typebuffer %D %D This mechanism permits hyphenation and therefore gives %D better results than the previously discussed macro %D \type{\TreatFirstLine}. %D \macros %D {TreatFirstCharacter} %D %D \startbuffer %D \TreatFirstCharacter{\bf\color[green]} Just to be %D \stopbuffer %D %D \getbuffer complete we also offer a very simple one %D character alternative, that is not that hard to understand: \unexpanded\def\TreatFirstCharacter#1#2% command, character {{#1{#2}}} %D A previous paragraph started with: %D %D \typebuffer %D \macros %D {StackCharacters} %D %D The next hack deals with vertical stacking. \unexpanded\def\StackCharacters#1#2#3#4% sequence vsize vskip command {\vbox #2 {\forgetall \baselineskip\zeropoint \def\StackCharacter##1{#4{##1}\cr\noalign{#3}}% \halign {\hss##\hss&##\cr \handletokens#1\with\StackCharacter\cr}}} %D \startbuffer %D \StackCharacters{CONTEXT}{}{\vskip.2ex}{\FunnyCommand} %D \stopbuffer %D %D Such a stack looks like: %D %D \startlinecorrection %D \hbox to \hsize %D {$\hss\bfd %D \vcenter{\StackCharacters{TEX} {}{\vskip.2ex}{\FunnyCommand}}% %D \hss %D \vcenter{\StackCharacters{CON} {}{\vskip.2ex}{\FunnyCommand}} %D \hss %D \vcenter{\StackCharacters{TEXT} {}{\vskip.2ex}{\FunnyCommand}} %D \hss %D \vcenter{\StackCharacters{CONTEXT}{}{\vskip.2ex}{\FunnyCommand}} %D \hss$} %D \stoplinecorrection %D %D and is typeset by saying: %D %D \typebuffer %D %D An alternative would have been %D %D \starttyping %D \StackCharacters {CONTEXT} {to 5cm} {\vfill} {\FunnyCommand} %D \stoptyping %D \macros %D {processtokens} %D %D At a lower level horizontal and vertical manipulations are %D already supported by: %D %D \starttyping %D \processtokens {begin} {between} {end} {space} {text} %D \stoptyping %D %D \startbuffer[a] %D \processtokens %D {\hbox to .5\hsize\bgroup} {\hfill} %D {\egroup} {\space} {LET'S HAVE} %D \stopbuffer %D %D \startbuffer[b] %D \processtokens %D {\vbox\bgroup\raggedcenter\hsize1em} %D {\vskip.25ex} {\egroup} {\strut} {FUN} %D \stopbuffer %D %D This macro is able to typeset: %D %D \leavevmode\hbox to \hsize %D {$\hfil\hfil %D \vcenter{\bf\getbuffer[a]}% %D \hfil %D \vcenter{\bfd\getbuffer[b]}% %D \hfil\hfil$} %D %D which was specified as: %D %D \typebuffer[a] %D \typebuffer[b] %D \macros %D {NormalizeFontHeight, NormalizeFontWidth, %D TheNormalizedFontSize} %D %D Next we introduce some font manipulation macros. When we %D want to typeset some text spread in a well defined area, it %D can be considered bad practice to manipulate character and %D word spacing. In such situations the next few macros can be %D of help: %D %D \starttyping %D \NormalizeFontHeight \name {sample text} {height} {font} %D \NormalizeFontWidth \name {sample text} {width} {font} %D \stoptyping %D %D These are implemented using an auxilliary macro: \unexpanded\def\NormalizeFontHeight{\NormalizeFontSize\ht} \unexpanded\def\NormalizeFontWidth {\NormalizeFontSize\wd} \unexpanded\def\NormalizeFontSize#1#2#3#4#5% {\bgroup \dimen0=#4% #4 can be \ht0 or so \setbox0\hbox{\definedfont[#5 at 5pt]#3}% 10pt \ifdim\wd0>\zeropoint \dimen2=#10 % #1 is \wd or \ht \dimen4=\maxdimen % 10000pt \divide\dimen4 \dimen2 \divide\dimen0 1638 % 1000 \dimen0=\number\dimen4\dimen0 \divide \dimen0 \plustwo % ... \xdef\TheNormalizedFontSize{\the\dimen0}% \else \dimen0\bodyfontsize \fi \normalexpanded{\egroup\def\noexpand#2{\definedfont[#5 at \the\dimen0]}}} %D Afterwards, we have access to the calculated size by: \let\TheNormalizedFontSize\!!zeropoint %D Extra: \unexpanded\def\WidthSpanningText#1#2#3% text width font {\hbox{\NormalizeFontWidth\temp{#1}{#2}{#3}\temp\the\everydefinedfont#1}} %D Consider for instance: %D %D \startbuffer %D \NormalizeFontHeight \tmp {X} {2\baselineskip} {cmr10} %D %D {\tmp To Be Or Not To Be} %D \stopbuffer %D %D \typebuffer %D %D This shows up as (we also show the baselines): %D %D {\showbaselines\getbuffer} %D %D The horizontal counterpart is: %D %D \startbuffer %D \NormalizeFontWidth \tmp {This Line Fits} {\hsize} {cmr10} %D %D \hbox{\tmp This Line Fits} %D \stopbuffer %D %D \typebuffer %D %D The calculated font scale is avaliable in the macro %D \type{\NormalizedFontSize}. %D %D \startlinecorrection %D \ruledhbox{\getbuffer} %D \stoplinecorrection %D %D One can of course combine these macros with the ones %D described earlier, like in: %D %D \starttyping %D \NormalizeFontHeight {text} \DroppedFont {2\baselineskip} {cmbx12} %D %D \def\NicelyDroppedCaps %D {\DroppedCaps %D {\color[green]} %D {\DroppedFont} %D {2pt} %D {\baselineskip} %D {2}} %D \stoptyping %D %D It's up to the reader to test this one. \unexpanded\def\FirstNCharacters#1#2% \FirstNCharacters{3}{fr{\"o}beln} {\bgroup \scratchcounter\zerocount \def\docommand##1% {\ifnum\scratchcounter=#1\else ##1\relax % catches ##1 = \"e and alike \advance\scratchcounter\plusone \fi} \handletokens#2\with\docommand \egroup} %D \macros %D {FittingText} %D %D First used in Pascal (demo-bbv): %D %D \startbuffer %D \ruledvbox{\FittingText{3cm}{1cm}{Serif}{24pt}{1pt}{1} %D {\veryraggedright %D \hangindent1em\hangafter1\relax %D \begstrut \dorecurse{8}{Bram Marta }\unskip \endstrut}} %D %D \ruledvbox{\FittingText{3cm}{1cm}{Serif}{24pt}{1pt}{1} %D {\raggedleft\begstrut Bram\\Marta \unskip\endstrut}} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection % #1 width #2 height #3 font #4 size #5 step #6 interlinie #7 text \unexpanded\def\FittingText#1#2#3#4#5#6#7% {\bgroup \forgetall \dontcomplain \setuptolerance[\v!verytolerant]% == \tolerance4500 \hsize#1% \def\\{\softbreak}% \!!heighta#4% \!!heightb#2% \doloop {\ifdim\!!heighta>\onepoint \expanded{\definefont[\s!dummy][#3 at \the\!!heighta][\c!interlinespace=#6]}% \getvalue\s!dummy \setbox\scratchbox\vbox{#7\endgraf}% \ifdim\ht\scratchbox>\!!heightb \advance\!!heighta-#5% \else \beginshapebox \unvcopy\scratchbox \endshapebox \global\dimen1\hsize \reshapebox {\setbox\shapebox\hbox{\unhbox\shapebox}% \ifdim\wd\shapebox>\dimen1 \global\dimen1\wd\shapebox \fi}% \ifdim\dimen1>\hsize \advance\!!heighta-#5% \else \exitloop \fi \fi \else \exitloop \fi}% %\writestatus{\strippedcsname\FittingText}{height: \the\!!heighta}% \unvbox\scratchbox \egroup} % \font width gap font spec text \unexpanded\def\NormalizeFontWidthSpread#1#2#3#4#5#6% {\global\setfalse\NFSpread \scratchdimen#3% \scratchdimen-.5\scratchdimen \advance\scratchdimen#2\relax \NormalizeFontWidth #1% {\def\+{\global\settrue\NFSpread\gobbleuntil\relax}% \def\\{\gobbleuntil\relax}% newline \setupspacing #6\relax}% {\scratchdimen}% {#4}% \ifconditional\NFSpread % de gap valt in de binding \else \definefont[\strippedcsname#1][#4 #5]% \fi} \unexpanded\def\SpreadGapText#1#2% {{\def\+{\kern#1}#2}} \unexpanded\def\GapText#1#2#3#4#5% width distance font spec title {\bgroup \NormalizeFontWidthSpread\DummyFont{#1}{#2}{#3}{#4}{#5}% \DummyFont\setupspacing\SpreadGapText{#2}{#5}\endgraf \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-set-12.mkii0000644000175000017500000002007311754241457024040 0ustar norbertnorbert%D \module %D [ file=x-set-12, %D version=2004.10.31, %D remark=setupx.tex: 1998.07.20 and later, %D title=\CONTEXT\ Setup Definitions, %D subtitle=Macro Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[set-11] \unprotect % \starttext % \setup{installlanguage} % \placesetup % \stoptext \definecolor[TitleColor][r=.375,g=.125,b=.125] \definecolor[TitleColor][r=.125,g=.375,b=.125] \definecolor[TitleColor][r=.125,g=.125,b=.375] \definecolor[TitleColor][r=.375,g=.375,b=.125] \definecolor[TitleColor][r=.375,g=.125,b=.375] \definecolor[TitleColor][r=.125,g=.375,b=.375] \definecolor[TitleColor][r=.25,g=.20,b=.15] \definecolor[TitleColor][r=.25,g=.15,b=.20] \definecolor[TitleColor][r=.20,g=.15,b=.25] \definecolor[TitleColor][r=.20,g=.25,b=.15] \definecolor[TitleColor][r=.15,g=.20,b=.25] \definecolor[TitleColor][r=.15,g=.25,b=.20] \startinterface english \loadsetups[cont-en.xml] \stopinterface \startinterface dutch \loadsetups[cont-nl.xml] \stopinterface \startinterface german \loadsetups[cont-de.xml] \stopinterface \startinterface french \loadsetups[cont-fr.xml] \stopinterface \startinterface italian \loadsetups[cont-it.xml] \stopinterface \startinterface czech \loadsetups[cont-cs.xml] \stopinterface \startinterface romanian \loadsetups[cont-ro.xml] \stopinterface \startinterface dutch \definecolor[LocalColor][r=.75,g=.25,b=.25] \stopinterface \startinterface english \definecolor[LocalColor][r=.25,g=.75,b=.25] \stopinterface \startinterface german \definecolor[LocalColor][r=.25,g=.25,b=.75] \stopinterface \startinterface french \definecolor[LocalColor][r=.75,g=.75,b=.25] \stopinterface \startinterface czech \definecolor[LocalColor][r=.75,g=.25,b=.75] \stopinterface \startinterface italian \definecolor[LocalColor][r=.25,g=.75,b=.75] \stopinterface \startinterface romanian \definecolor[LocalColor][r=.5,g=.4,b=.3] \stopinterface % \definecolor[LocalColor][r=.5,g=.3,b=.4] % \definecolor[LocalColor][r=.4,g=.3,b=.5] % \definecolor[LocalColor][r=.4,g=.5,b=.3] % \definecolor[LocalColor][r=.3,g=.4,b=.5] % \definecolor[LocalColor][r=.3,g=.5,b=.4] \startinterface english \definecolor[TitleColor][r=.375,g=.125,b=.125] \stopinterface \startinterface dutch \definecolor[TitleColor][r=.125,g=.375,b=.125] \stopinterface \startinterface german \definecolor[TitleColor][r=.125,g=.125,b=.375] \stopinterface \startinterface french \definecolor[TitleColor][r=.375,g=.375,b=.125] \stopinterface \startinterface italian \definecolor[TitleColor][r=.375,g=.125,b=.375] \stopinterface \startinterface czech \definecolor[TitleColor][r=.125,g=.375,b=.375] \stopinterface \startinterface romanian \definecolor[TitleColor][r=.25,g=.20,b=.15] \stopinterface % \definecolor[TitleColor][r=.25,g=.15,b=.20] % \definecolor[TitleColor][r=.20,g=.15,b=.25] % \definecolor[TitleColor][r=.20,g=.25,b=.15] % \definecolor[TitleColor][r=.15,g=.20,b=.25] % \definecolor[TitleColor][r=.15,g=.25,b=.20] \definecolor [lightgray] [s=.9] \definecolor [darkgray] [s=.1] \usetypescript[palatino] \setupbodyfont[palatino,9pt] \setupcolors [\c!state=\v!start] \defineoverlay [cover] [\hbox to \paperwidth{\hss\reuseMPgraphic{cover+back}}] \defineoverlay [back] [\hbox to \paperwidth{\reuseMPgraphic{cover+back}\hss}] \startreusableMPgraphic{cover+back} numeric h, w ; path p, q, r ; color f, d ; pair s ; h := OverlayHeight ; w := 2*OverlayWidth ; r := unitsquare xyscaled (w,h) ; fill r withcolor \MPcolor{lightgray} ; set_grid(w,h,w/8,w/16) ; forever : s := center r randomized (w,h) ; if new_on_grid(xpart s, ypart s) : s := (dx,dy) ; p := fullsquare xyscaled(w/4,w/8) ; q := (-4w,ypart ulcorner p) -- .5[ulcorner p, urcorner p] -- (4w,ypart urcorner p) ; q := q shifted (0,-w/24) ; p := p randomized (w/40,w/40) ; q := q randomized (0,w/100) ; q := q cutafter (p cutafter point 3 of p) ; q := q cutbefore (p cutbefore point 3 of p) ; d := .5[\MPcolor{LocalColor},\MPcolor{lightgray}] randomized (.5,.9) ; f := \MPcolor{lightgray} randomized (.5,.9) ; pickup pencircle scaled (w/100) ; fill p shifted s withcolor f ; draw p shifted s withcolor d ; draw q shifted s withcolor d ; fi ; exitif grid_full ; endfor ; setbounds currentpicture to r ; \stopreusableMPgraphic \definelayout [titlepage] [\c!backspace=1cm, \c!topspace=1cm, \c!width=\v!middle, \c!height=\v!middle, \c!header=0pt, \c!footer=0pt] \setuplayout [\c!backspace=2cm, \c!topspace=1.5cm, \c!header=0cm, \c!footer=0cm, \c!width=\v!middle, \c!height=\v!middle] \setuppagenumbering [\c!alternative=\v!doublesided] \setupsetup [\c!criterium=\v!all, \c!reference=0] \setupframedtexts [setuptext] [\c!frame=\v!on, \c!rulethickness=1pt, \c!framecolor=TitleColor] \setupunderbar [\c!rulethickness=1pt, \c!rulecolor=TitleColor] \starttext \setupbackgrounds [\v!rightpage] [\c!background=cover] \setuplayout [titlepage] \startsetups text:commands \startinterface dutch \strut commando's \par \stopinterface \startinterface english \strut commands \par \stopinterface \startinterface german \strut befehle \par \stopinterface \startinterface french \strut commandes \par \stopinterface \startinterface czech \strut p\v{r}ikazy \par \stopinterface \startinterface italian \strut comandi \par \stopinterface \startinterface romanian \strut comenzile \par \stopinterface \stopsetups \startsetups text:uppercase \startinterface dutch NL\stopinterface \startinterface english EN\stopinterface \startinterface german DE\stopinterface \startinterface french FR\stopinterface \startinterface czech CS\stopinterface \startinterface italian IT\stopinterface \startinterface romanian RO\stopinterface \stopsetups \startsetups text:lowercase \startinterface dutch \strut nl / nederlands \par \stopinterface \startinterface english \strut en / english \par \stopinterface \startinterface german \strut de / deutsch \par \stopinterface \startinterface french \strut fr / fran\c{c}ais \par \stopinterface \startinterface czech \strut cs / \v{c}esk\'y \par \stopinterface \startinterface italian \strut it / italiano \par \stopinterface \startinterface romanian \strut ro / rom\^{a}n\u{a} \par \stopinterface \stopsetups \startmakeup[\v!standard] \dontcomplain \setupalign[\v!left] \startcolor[TitleColor] \definedfont[RegularBold at 100pt]\setstrut \strut Con\TeX t \par \definedfont[RegularBold at 50pt]\setstrut \setups[text:commands] \vfill \definedfont[RegularBold at 150pt]\setstrut \setups[text:uppercase] \stopcolor \stopmakeup \setuplayout % needed ? \setupbackgrounds [\v!rightpage] [\c!background=] \startmakeup[\v!standard] \dontcomplain \startcolor[TitleColor] \definedfont[RegularBold at 100pt]\setstrut \setupalign[\v!left] \strut Con\TeX t \par \definedfont[RegularBold at 50pt]\setstrut \setups[text:commands] \vfill \definedfont[RegularBold at 24pt]\setupinterlinespace \setups[text:lowercase] \par \strut \currentdate \par \stopcolor \stopmakeup \protect \placeeverysetup \unprotect \page[\v!yes,\v!blank,\v!right,\v!left] \setuplayout [titlepage] \setupbackgrounds [\v!leftpage] [\c!background=back] \startmakeup[\v!standard][\c!page=] \dontcomplain \startcolor[TitleColor] \definedfont[RegularBold at 24pt]\setupinterlinespace \setupalign[\v!left] \vfill PRAGMA ADE \par Ridderstraat 27 \par 8061GH Hasselt NL \par www.pragma-ade.com \par \stopcolor \stopmakeup \protect \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-wid.lua0000644000175000017500000005431512130411274024105 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-wid'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local gmatch, gsub, find, lower, format = string.gmatch, string.gsub, string.find, string.lower, string.format local stripstring = string.strip local texbox, texcount = tex.box, tex.count local settings_to_array = utilities.parsers.settings_to_array local settings_to_hash = utilities.parsers.settings_to_hash local report_media = logs.reporter("backend","media") local report_attachment = logs.reporter("backend","attachment") local backends, lpdf, nodes = backends, lpdf, nodes local nodeinjections = backends.pdf.nodeinjections local codeinjections = backends.pdf.codeinjections local registrations = backends.pdf.registrations local executers = structures.references.executers local variables = interfaces.variables local v_hidden = variables.hidden local v_normal = variables.normal local v_auto = variables.auto local v_embed = variables.embed local v_unknown = variables.unknown local v_max = variables.max local pdfconstant = lpdf.constant local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local pdfreference = lpdf.reference local pdfunicode = lpdf.unicode local pdfstring = lpdf.string local pdfboolean = lpdf.boolean local pdfcolorspec = lpdf.colorspec local pdfflushobject = lpdf.flushobject local pdfflushstreamobject = lpdf.flushstreamobject local pdfflushstreamfileobject = lpdf.flushstreamfileobject local pdfreserveannotation = lpdf.reserveannotation local pdfreserveobject = lpdf.reserveobject local pdfpagereference = lpdf.pagereference local pdfshareobjectreference = lpdf.shareobjectreference local nodepool = nodes.pool local pdfannotation_node = nodepool.pdfannotation local hpack_node = node.hpack local write_node = node.write -- test context(...) instead local pdf_border = pdfarray { 0, 0, 0 } -- can be shared -- symbols local presets = { } -- xforms local function registersymbol(name,n) presets[name] = pdfreference(n) end local function registeredsymbol(name) return presets[name] end local function presetsymbol(symbol) if not presets[symbol] then context.predefinesymbol { symbol } end end local function presetsymbollist(list) if list then for symbol in gmatch(list,"[^, ]+") do presetsymbol(symbol) end end end codeinjections.registersymbol = registersymbol codeinjections.registeredsymbol = registeredsymbol codeinjections.presetsymbol = presetsymbol codeinjections.presetsymbollist = presetsymbollist -- comments -- local symbols = { -- Addition = pdfconstant("NewParagraph"), -- Attachment = pdfconstant("Attachment"), -- Balloon = pdfconstant("Comment"), -- Check = pdfconstant("Check Mark"), -- CheckMark = pdfconstant("Check Mark"), -- Circle = pdfconstant("Circle"), -- Cross = pdfconstant("Cross"), -- CrossHairs = pdfconstant("Cross Hairs"), -- Graph = pdfconstant("Graph"), -- InsertText = pdfconstant("Insert Text"), -- New = pdfconstant("Insert"), -- Paperclip = pdfconstant("Paperclip"), -- RightArrow = pdfconstant("Right Arrow"), -- RightPointer = pdfconstant("Right Pointer"), -- Star = pdfconstant("Star"), -- Tag = pdfconstant("Tag"), -- Text = pdfconstant("Note"), -- TextNote = pdfconstant("Text Note"), -- UpArrow = pdfconstant("Up Arrow"), -- UpLeftArrow = pdfconstant("Up-Left Arrow"), -- } local attachment_symbols = { Graph = pdfconstant("GraphPushPin"), Paperclip = pdfconstant("PaperclipTag"), Pushpin = pdfconstant("PushPin"), } attachment_symbols.PushPin = attachment_symbols.Pushpin attachment_symbols.Default = attachment_symbols.Pushpin local comment_symbols = { Comment = pdfconstant("Comment"), Help = pdfconstant("Help"), Insert = pdfconstant("Insert"), Key = pdfconstant("Key"), Newparagraph = pdfconstant("NewParagraph"), Note = pdfconstant("Note"), Paragraph = pdfconstant("Paragraph"), } comment_symbols.NewParagraph = Newparagraph comment_symbols.Default = Note local function analyzesymbol(symbol,collection) if not symbol or symbol == "" then return collection.Default, nil elseif collection[symbol] then return collection[symbol], nil else local setn, setr, setd local set = settings_to_array(symbol) if #set == 1 then setn, setr, setd = set[1], set[1], set[1] elseif #set == 2 then setn, setr, setd = set[1], set[1], set[2] else setn, setr, setd = set[1], set[2], set[3] end local appearance = pdfdictionary { N = setn and registeredsymbol(setn), R = setr and registeredsymbol(setr), D = setd and registeredsymbol(setd), } local appearanceref = pdfshareobjectreference(appearance) return nil, appearanceref end end local function analyzelayer(layer) -- todo: (specification.layer ~= "" and pdfreference(specification.layer)) or nil, -- todo: ref to layer end local function analyzecolor(colorvalue,colormodel) local cvalue = colorvalue and tonumber(colorvalue) local cmodel = colormodel and tonumber(colormodel) or 3 return cvalue and pdfarray { lpdf.colorvalues(cmodel,cvalue) } or nil end local function analyzetransparency(transparencyvalue) local tvalue = transparencyvalue and tonumber(transparencyvalue) return tvalue and lpdf.transparencyvalue(tvalue) or nil end -- Attachments local nofattachments, attachments, filestreams, referenced = 0, { }, { }, { } local ignorereferenced = true -- fuzzy pdf spec .. twice in attachment list, can become an option local function flushembeddedfiles() if next(filestreams) then local e = pdfarray() for tag, reference in next, filestreams do if not reference then report_attachment("unreferenced file, tag %a",tag) elseif referenced[tag] == "hidden" then e[#e+1] = pdfstring(tag) e[#e+1] = reference -- already a reference else -- messy spec ... when annot not in named else twice in menu list acrobat end end lpdf.addtonames("EmbeddedFiles",pdfreference(pdfflushobject(pdfdictionary{ Names = e }))) end end lpdf.registerdocumentfinalizer(flushembeddedfiles,"embeddedfiles") function codeinjections.embedfile(specification) local data = specification.data local filename = specification.file local name = specification.name or "" local title = specification.title or "" local hash = specification.hash or filename local keepdir = specification.keepdir -- can change local usedname = specification.usedname if filename == "" then filename = nil end if data then local r = filestreams[hash] if r == false then return nil elseif r then return r elseif not filename then filename = specification.tag if not filename or filename == "" then filename = specification.registered end if not filename or filename == "" then filename = hash end end else if not filename then return nil end local r = filestreams[hash] if r == false then return nil elseif r then return r else local foundname = resolvers.findbinfile(filename) or "" if foundname == "" or not lfs.isfile(foundname) then filestreams[filename] = false return nil else specification.foundname = foundname end end end usedname = usedname ~= "" and usedname or filename local basename = keepdir == true and usedname or file.basename(usedname) local basename = gsub(basename,"%./","") local savename = file.addsuffix(name ~= "" and name or basename,"txt") -- else no valid file local a = pdfdictionary { Type = pdfconstant("EmbeddedFile") } local f if data then f = pdfflushstreamobject(data,a) specification.data = true -- signal that still data but already flushed else local foundname = specification.foundname or filename f = pdfflushstreamfileobject(foundname,a) end local d = pdfdictionary { Type = pdfconstant("Filespec"), F = pdfstring(savename), UF = pdfstring(savename), EF = pdfdictionary { F = pdfreference(f) }, Desc = title ~= "" and pdfunicode(title) or nil, } local r = pdfreference(pdfflushobject(d)) filestreams[hash] = r return r end function nodeinjections.attachfile(specification) local registered = specification.registered or "" local data = specification.data local hash local filename if data then hash = md5.HEX(data) else filename = specification.file if not filename or filename == "" then report_attachment("no file specified, using registered %a instead",registered) filename = registered specification.file = registered end local foundname = resolvers.findbinfile(filename) or "" if foundname == "" or not lfs.isfile(foundname) then report_attachment("invalid filename %a, ignoring registered %a",filename,registered) return nil else specification.foundname = foundname end hash = filename end specification.hash = hash nofattachments = nofattachments + 1 local registered = specification.registered or "" local title = specification.title or "" local subtitle = specification.subtitle or "" local author = specification.author or "" if registered == "" then registered = filename end if author == "" then author = title title = "" end if author == "" then author = filename or "" end if title == "" then title = registered end local aref = attachments[registered] if not aref then aref = codeinjections.embedfile(specification) attachments[registered] = aref end if not aref then report_attachment("skipping attachment, registered %a",registered) -- already reported elseif specification.method == v_hidden then referenced[hash] = "hidden" else referenced[hash] = "annotation" local name, appearance = analyzesymbol(specification.symbol,attachment_symbols) local d = pdfdictionary { Subtype = pdfconstant("FileAttachment"), FS = aref, Contents = pdfunicode(title), Name = name, NM = pdfstring(format("attachment:%s",nofattachments)), T = author ~= "" and pdfunicode(author) or nil, Subj = subtitle ~= "" and pdfunicode(subtitle) or nil, C = analyzecolor(specification.colorvalue,specification.colormodel), CA = analyzetransparency(specification.transparencyvalue), AP = appearance, OC = analyzelayer(specification.layer), } local width, height, depth = specification.width or 0, specification.height or 0, specification.depth local box = hpack_node(pdfannotation_node(width,height,depth,d())) box.width, box.height, box.depth = width, height, depth return box end end function codeinjections.attachmentid(filename) -- not used in context return filestreams[filename] end local nofcomments, usepopupcomments, stripleading = 0, false, true local defaultattributes = { ["xmlns"] = "http://www.w3.org/1999/xhtml", ["xmlns:xfa"] = "http://www.xfa.org/schema/xfa-data/1.0/", ["xfa:contentType"] = "text/html", ["xfa:APIVersion"] = "Acrobat:8.0.0", ["xfa:spec"] = "2.4", } local function checkcontent(text,option) if option and option.xml then local root = xml.convert(text) if root and not root.er then xml.checkbom(root) local body = xml.first(root,"/body") if body then local at = body.at for k, v in next, defaultattributes do if not at[k] then at[k] = v end end -- local content = xml.textonly(root) local richcontent = xml.tostring(root) return nil, pdfunicode(richcontent) end end end return pdfunicode(text) end function nodeinjections.comment(specification) -- brrr: seems to be done twice nofcomments = nofcomments + 1 local text = stripstring(specification.data or "") if stripleading then text = gsub(text,"[\n\r] *","\n") end local name, appearance = analyzesymbol(specification.symbol,comment_symbols) local tag = specification.tag or "" -- this is somewhat messy as recent local title = specification.title or "" -- versions of acrobat see the title local subtitle = specification.subtitle or "" -- as author local author = specification.author or "" local option = settings_to_hash(specification.option or "") if author == "" then if title == "" then title = tag end else if subtitle == "" then subtitle = title elseif title ~= "" then subtitle = subtitle .. ", " .. title end title = author end local content, richcontent = checkcontent(text,option) local d = pdfdictionary { Subtype = pdfconstant("Text"), Open = option[v_max] and pdfboolean(true) or nil, Contents = content, RC = richcontent, T = title ~= "" and pdfunicode(title) or nil, Subj = subtitle ~= "" and pdfunicode(subtitle) or nil, C = analyzecolor(specification.colorvalue,specification.colormodel), CA = analyzetransparency(specification.transparencyvalue), OC = analyzelayer(specification.layer), Name = name, NM = pdfstring(format("comment:%s",nofcomments)), AP = appearance, } local width, height, depth = specification.width or 0, specification.height or 0, specification.depth local box if usepopupcomments then -- rather useless as we can hide/vide local nd = pdfreserveannotation() local nc = pdfreserveannotation() local c = pdfdictionary { Subtype = pdfconstant("Popup"), Parent = pdfreference(nd), } d.Popup = pdfreference(nc) box = hpack_node( pdfannotation_node(0,0,0,d(),nd), pdfannotation_node(width,height,depth,c(),nc) ) else box = hpack_node(pdfannotation_node(width,height,depth,d())) end box.width, box.height, box.depth = width, height, depth -- redundant return box end -- rendering stuff -- -- object_1 -> <> >> -- object_2 -> <> >> -- rendering -> <> -- -- we only work foreward here (currently) -- annotation is to be packed at the tex end -- aiff audio/aiff -- au audio/basic -- avi video/avi -- mid audio/midi -- mov video/quicktime -- mp3 audio/x-mp3 (mpeg) -- mp4 audio/mp4 -- mp4 video/mp4 -- mpeg video/mpeg -- smil application/smil -- swf application/x-shockwave-flash -- P media play parameters (evt /BE for controls etc -- A boolean (audio) -- C boolean (captions) -- O boolean (overdubs) -- S boolean (subtitles) -- PL pdfconstant("ADBE_MCI"), -- F = flags, -- T = title, -- Contents = rubish, -- AP = irrelevant, -- sound is different, no window (or zero) so we need to collect them and -- force them if not set local ms, mu, mf = { }, { }, { } local function delayed(label) local a = pdfreserveannotation() mu[label] = a return pdfreference(a) end local function insertrenderingwindow(specification) local label = specification.label --~ local openpage = specification.openpage --~ local closepage = specification.closepage if specification.option == v_auto then if openpageaction then -- \handlereferenceactions{\v!StartRendering{#2}} end if closepageaction then -- \handlereferenceactions{\v!StopRendering {#2}} end end local actions = nil if openpage or closepage then actions = pdfdictionary { PO = (openpage and lpdf.action(openpage )) or nil, PC = (closepage and lpdf.action(closepage)) or nil, } end local page = tonumber(specification.page) or texcount.realpageno -- todo local r = mu[label] or pdfreserveannotation() -- why the reserve here? local a = pdfdictionary { S = pdfconstant("Rendition"), R = mf[label], OP = 0, AN = pdfreference(r), } local d = pdfdictionary { Subtype = pdfconstant("Screen"), P = pdfreference(pdfpagereference(page)), A = a, -- needed in order to make the annotation clickable (i.e. don't bark) Border = pdf_border, AA = actions, } local width = specification.width or 0 local height = specification.height or 0 if height == 0 or width == 0 then -- todo: sound needs no window end write_node(pdfannotation_node(width,height,0,d(),r)) -- save ref return pdfreference(r) end -- some dictionaries can have a MH (must honor) or BE (best effort) capsule local function insertrendering(specification) local label = specification.label local option = settings_to_hash(specification.option) if not mf[label] then local filename = specification.filename local isurl = find(filename,"://") --~ local start = pdfdictionary { --~ Type = pdfconstant("MediaOffset"), --~ S = pdfconstant("T"), -- time --~ T = pdfdictionary { -- time --~ Type = pdfconstant("Timespan"), --~ S = pdfconstant("S"), --~ V = 3, -- time in seconds --~ }, --~ } --~ local start = pdfdictionary { --~ Type = pdfconstant("MediaOffset"), --~ S = pdfconstant("F"), -- frame --~ F = 100 -- framenumber --~ } --~ local start = pdfdictionary { --~ Type = pdfconstant("MediaOffset"), --~ S = pdfconstant("M"), -- mark --~ M = "somemark", --~ } --~ local parameters = pdfdictionary { --~ BE = pdfdictionary { --~ B = start, --~ } --~ } --~ local parameters = pdfdictionary { --~ Type = pdfconstant(MediaPermissions), --~ TF = pdfstring("TEMPALWAYS") }, -- TEMPNEVER TEMPEXTRACT TEMPACCESS TEMPALWAYS --~ } local descriptor = pdfdictionary { Type = pdfconstant("Filespec"), F = filename, } if isurl then descriptor.FS = pdfconstant("URL") elseif option[v_embed] then descriptor.EF = codeinjections.embedfile { file = filename } end local clip = pdfdictionary { Type = pdfconstant("MediaClip"), S = pdfconstant("MCD"), N = label, CT = specification.mime, Alt = pdfarray { "", "file not found" }, -- language id + message D = pdfreference(pdfflushobject(descriptor)), -- P = pdfreference(pdfflushobject(parameters)), } local rendition = pdfdictionary { Type = pdfconstant("Rendition"), S = pdfconstant("MR"), N = label, C = pdfreference(pdfflushobject(clip)), } mf[label] = pdfreference(pdfflushobject(rendition)) end end local function insertrenderingobject(specification) -- todo local label = specification.label if not mf[label] then report_media("unknown medium, label %a",label) local clip = pdfdictionary { -- does not work that well one level up Type = pdfconstant("MediaClip"), S = pdfconstant("MCD"), N = label, D = pdfreference(unknown), -- not label but objectname, hm .. todo? } local rendition = pdfdictionary { Type = pdfconstant("Rendition"), S = pdfconstant("MR"), N = label, C = pdfreference(pdfflushobject(clip)), } mf[label] = pdfreference(pdfflushobject(rendition)) end end function codeinjections.processrendering(label) local specification = interactions.renderings.rendering(label) if not specification then -- error elseif specification.type == "external" then insertrendering(specification) else insertrenderingobject(specification) end end function codeinjections.insertrenderingwindow(specification) local label = specification.label codeinjections.processrendering(label) ms[label] = insertrenderingwindow(specification) end local function set(operation,arguments) codeinjections.processrendering(arguments) return pdfdictionary { S = pdfconstant("Rendition"), OP = operation, R = mf[arguments], AN = ms[arguments] or delayed(arguments), } end function executers.startrendering (arguments) return set(0,arguments) end function executers.stoprendering (arguments) return set(1,arguments) end function executers.pauserendering (arguments) return set(2,arguments) end function executers.resumerendering(arguments) return set(3,arguments) end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mul.mkii0000644000175000017500000015736111754241457024302 0ustar norbertnorbert%D \module %D [ file=page-mul, % was: core-mul %D version=1998.03.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Multi Column Output, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Simple Multi Column} %D This module is mostly a copy from the original multi column %D routine as implemented in \type {core-mul}. When the main %D OTR macro's were isolated in modules and column sets were %D introduced, this module became part of the OTR modules. As %D a result this module is no longer generic. It also needs %D an overhaul. \unprotect % TO DO ! \let\OTRMULsetvsize \OTRONEsetvsize \let\OTRMULsethsize \OTRONEsethsize \let\OTRMULdopagecontents \OTRONEdopagecontents \let\OTRMULfinalsidefloatoutput\OTRONEfinalsidefloatoutput % ??? \let\OTRMULflushfloatbox \OTRONEflushfloatbox \let\OTRMULdosettopinserts \relax \let\OTRMULdosetbotinserts \relax \let\OTRMULdotopinsertions \relax \let\OTRMULdobotinsertions \relax \let\OTRMULdosetbothinserts \relax \let\OTRMULflushsavedfloats \relax \let\OTRMULflushsidefloats \forgetsidefloats % \relax \let\OTRMULsynchronizesidefloats\forgetsidefloats % \relax \newtoks \OTRMULoutput \def\OTRMULgotonextpage {\ejectpage} \def\OTRMULgotonextpageX % will become obsolete {\superejectpage} % check \count multiplications % some day try this in balancing routine % % \ifdim\pagetotal>\pagegoal % \eject % \else % \goodbreak % \fi %D The following macro's implement a multi||column output %D routine. The original implementation was based on Donald %D Knuth's implementation, which was adapted by Craig Platt to %D support balancing of the last page. I gradually adapted %D Platt's version to our needs but under certain %D circumstances things still went wrong. I considered all %D calls to Platt's \type{\balancingerror} as undesirable. %D This completely new implementation can handle enough %D situations for everyday documents, but is still far from %D perfect. While at the moment the routine doesn't support %D all kind of floats, it does support: %D %D \startitemize[packed] %D \item an unlimitted number of columns %D \item ragged or not ragged bottoms %D \item optional balancing without \type{\balancingerrors} %D \item different \type{\baselineskips}, \type{\spacing}, %D \type{\topskip} and \type{\maxdepth} %D \item left- and right indentation, e.g. within lists %D \item moving columns floats to the next column or page %D \item handling of floats that are to wide for a columns %D \stopitemize %D %D One could wonder why single and multi||columns modes are %D still separated. One reason for this is that \TeX\ is not %D suited well for handling multi||columns. As a result, the %D single columns routines are more robust. Handling one %D column as a special case of multi||columns is posible but at %D the cost of worse float handling, worse page breaking, %D worse etc. Complicated multi||column page handling should %D be done in \cap{DTP}||systems anyway. %D %D There are three commands provided for entering and leaving %D multi||column mode and for going to the next column: %D %D \interface \type{\beginmulticolumns} \\ \\ %D \interface \type{\endmulticolumns} \\ \\ %D \interface \type{\ejectcolumn} \\ \\ %D %D This routines are sort of stand||alone. They communicate %D with the rest of \CONTEXT\ by means of some interface %D macro's, which we only mention. %D %D \interface \type{\nofcolumns} \\ %D the number of columns \\ %D \interface \type{\minbalancetoplines} \\ %D the minimum number op balanced top lines \\ %D \interface \type{\betweencolumns} \\ %D the stuff between columns \\ %D \interface \type{\finaloutput{action}{box}} \\ %D some kind of \type{\pagebody} and \type{\shipout} \\ %D %D \interface \type{\ifbalancecolumns} \\ %D balancing the colums or not \\ %D \interface \type{\ifstretchcolumns} \\ %D ragging the bottom or not \\ %D %D \interface \type{\ifheightencolumns} \\ %D fix the heigh tor not \\ %D \interface \type{\fixedcolumnheight} \\ %D the optional fixed height \\ %D %D \interface \type{\ifinheritcolumns} \\ %D handle ragging or not \\ %D \interface \type{\ifr@ggedbottom} \\ %D use ragged bottoms \\ %D \interface \type{\ifb@selinebottom} \\ %D put the bottom line on the baseline \\ %D \interface \type{\ifnormalbottom} \\ %D put the bottom line at the baseline \\ %D %D \interface \type{\ifreversecolumns} \\ %D reverse the order in wich columns are flushed \\ %D %D \interface \type{\usercolumnwidth} \\ %D the calculated width of a column \\ %D \interface \type{\columntextwidth} \\ %D the maximum width of a column \\ %D \interface \type{\columntextheight} \\ %D the minimum width of a column \\ %D %D \interface \type{\spacingfactor} \\ %D the spacing factor \\ %D \interface \type{\bodyfontsize} \\ %D the (local) bodyfontsize \\ %D \interface \type{\openlineheight} \\ %D the lineheight (including \type{\spacing}) \\ %D %D \interface \type{\EveryBodyFont} \\ %D communication channel to font switching routines \\ %D %D \interface \type{\global\settopskip} \\ %D set \type{\topskip} \\ %D \interface \type{\setvsize} \\ %D set \type{\vsize} and \type{\pagegoal} \\ %D \interface \type{\sethsize} \\ %D set \type{\hsize} \\ %D %D \interface \type{\flushcolumnfloats} \\ %D push saved column floats (next page) \\ %D \interface \type{\flushcolumnfloat} \\ %D push saved column floats (next column) \\ %D \interface \type{\setcolumnfloats} \\ %D initialize column floats \\ %D %D \interface \type{\finishcolumnbox} \\ %D do something special (a hook) \\ %D \interface \type{\postprocesscolumnpagebox} \\ %D do something with each columnbox (also a hook) \\ %D \interface \type{\postprocesscolumnbox} \\ %D do something with each columnbox (also a hook) \\ %D \interface \type{\postprocesscolumnline} \\ %D do something with each columnline (also a hook) \\ %D \interface \type{\currentcolumn} \\ %D the current column \\ %D %D These interface macro's are called upon or initialized %D by the multi||column macro's. %D A lot of footnote stuff added! \def\finalcolumntextwidth {\makeupwidth} \def\finalcolumntextheight {\textheight} \def\columntextwidth {\makeupwidth} \def\columntextheight {\textheight} \def\usercolumnwidth {\textwidth} \def\columntextoffset {\!!zeropoint} \def\fixedcolumnheight {\textheight} \def\betweencolumns {\hskip\bodyfontsize} \let\setcolumnfloats \relax % in CONTEXT used for floats \let\flushcolumnfloats \relax % in CONTEXT used for floats \let\flushcolumnfloat \relax % in CONTEXT used for floats \let\finishcolumnbox \relax % in CONTEXT used for backgrounds % %D In fact, the column height and width are set by means of % %D two macro's. One can change their meaning if needed: % % \def\setcolumntextheight % {\def\columntextheight{\teksthoogte}} % % \def\setcolumntextwidth % {\def\columntextwidth{\zetbreedte}} %D Both macros are redefined in \CONTEXT\ when backgrounds %D are applied to columns. The final values are used when %D flushing the columns. \newtoks\singlecolumnout % remove that one %D It's more convenient to use \type {\columnwidth} instead %D of messing around with boxes each time. \newdimen\columnwidth \newdimen\gutterwidth \def\determinecolumnwidth {\bgroup \setbox\scratchbox\hbox {\setcolumnhsize \global\columnwidth\usercolumnwidth \global\gutterwidth\intercolumnwidth}% \egroup} %D Going to a new columns is done by means of a %D \type{\ejectcolumn}. The following definition does not %D always work. \def\ejectcolumn {\goodbreak\showmessage\m!columns2\empty} %D The next macro should never be called so let's deal with it. %D There were several solutions to these kind of errors. First %D we check for a good breakpoint before firing up the %D multi||column routine (\type{\break} or \type{\allowbreak}). %D We do the same at the end of the routine %D (\type{\allowbreak}). These allowances are definitely %D needed! %D %D Some on first sight redundant calls to for instance %D \type{\setvsize} in the flushing, splitting and balancing %D macro's can definitely not be omitted! Some are just there %D to handle situations that only few times arise. One of %D those can be that the output routine is invoked before %D everything is taken care of. This happens when we %D flush (part of) the current page with an \type{\unvbox} %D with a \type{\pagetotal}~$\approx$ \type{\pagegoal}. One %D simply cannot balance columns that are just balanced. %D %D I hope one never sees the following message. Because it %D took me a lot of time to develop the multi||columns %D routines, every (although seldom) warning gives me the %D creeps! \def\balancingerror {\showmessage\m!columns3\empty \finaloutput\unvbox\normalpagebox} \def\OTRMULsometopsfloat{\showmessage\m!columns4\empty \someherefloat} \def\OTRMULsomebotsfloat{\showmessage\m!columns5\empty \someherefloat} \def\OTRMULsomeherefloat{\OTRONEsomeherefloat} %D The local column width is available in the dimension %D register \type{\localcolumnwidth}, which is calculated as: \def\setcolumnhsize % beware, this one is available for use in macros {\setbox\scratchbox\hbox{\parindent\zeropoint\betweencolumns}% \intercolumnwidth\wd\scratchbox \localcolumnwidth\columntextwidth \advance\localcolumnwidth -\leftskip \advance\localcolumnwidth -\rightskip % new \advance\localcolumnwidth -\colleftskip \advance\localcolumnwidth -\colrightskip % \advance\localcolumnwidth -\nofcolumns\intercolumnwidth \advance\localcolumnwidth \intercolumnwidth \divide \localcolumnwidth \nofcolumns \scratchdimen\columntextoffset \multiply\scratchdimen \plustwo \advance\localcolumnwidth -\scratchdimen \usercolumnwidth\localcolumnwidth \hsize\localcolumnwidth} % we don't do it \global %D Torture test: %D %D \startbuffer %D \startbuffer[b] %D \startcolumns %D \input tufte %D \stopcolumns %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower %D \input tufte %D \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startcolumns \startnarrower %D \input tufte %D \stopnarrower \stopcolumns %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower \startcolumns %D \input tufte %D \stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startcolumns \startnarrower[left] %D \input tufte %D \stopnarrower \stopcolumns %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower[left] \startcolumns %D \input tufte %D \stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower \startcolumns \startnarrower %D \input tufte %D \stopnarrower\stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D %D \startbuffer[b] %D \startnarrower[left] \startcolumns \startnarrower %D \input tufte %D \stopnarrower\stopcolumns \stopnarrower %D \stopbuffer %D \typebuffer[b] \getbuffer[b] %D \stopbuffer %D %D \start %D \def\postprocesscolumnline#1{\ruledhbox{\strut\box#1}\hss} %D \getbuffer %D \stop %D One should be aware that when font related dimensions are %D used in typesetting the in||between material, these %D dimensions are influenced by bodyfont switches inside %D multi||column mode. \newdimen\mcscratchdimen \newcount\nofcolumnlines \chardef\multicolumnlinemethod\zerocount % 0: overshoot (old default), 1: tight % \chardef\multicolumnlinemethod\plusone \def\getmulticolumnlines {\mcscratchdimen-\columntextoffset \multiply\mcscratchdimen \plustwo \advance\mcscratchdimen \columntextheight \ifdim\precolumnboxheight>\zeropoint \advance\mcscratchdimen -\precolumnboxheight \fi \settotalinsertionheight \advance\mcscratchdimen -\totalinsertionheight \ifcase\multicolumnlinemethod \getnoflines\mcscratchdimen \or \getrawnoflines\mcscratchdimen \else \getrawnoflines\mcscratchdimen \fi % added 30/7/2004 \ifnum\layoutlines>\zerocount \ifnum\noflines>\layoutlines \noflines\layoutlines \fi \fi \nofcolumnlines\noflines} \def\multicolumnovershootratio{.5} % {\ifgridsnapping0\else.5\fi} \def\setcolumnvsize {\getmulticolumnlines \mcscratchdimen\nofcolumnlines\openlineheight \advance\mcscratchdimen \multicolumnovershootratio\openlineheight % collect enough data \global\vsize\nofcolumns\mcscratchdimen \global\pagegoal\vsize} % let's do it only here %D It really starts here. After some checks and initializations %D we change the output routine to continous multi||column %D mode. This mode handles columns that fill the current and %D next full pages. The method used is (more or less) %D multiplying \type{\vsize} and dividing \type{\hsize} by %D \type{\nofcolumns}. More on this can be found in the %D \TeX book. We save the top of the current page in box %D \type{\precolumnbox}. %D %D We manipulate \type{\topskip} a bit, just to be shure that %D is has no flexibility. This has te be done every time a %D font switch takles place, because \type{\topskip} can depend %D on this. %D %D Watch the trick with the \type{\vbox}. This way we get the %D right interlining and white space. \def\beginmulticolumns {\par \flushnotes \xdef\precolumndepth{\the\prevdepth}% \begingroup % new \leftskip1\leftskip \rightskip1\rightskip \edef\colleftskip {\the\leftskip}% \edef\colrightskip{\the\rightskip}% \leftskip\zeropoint \rightskip\zeropoint % \dontshowcomposition %\setcolumntextwidth\relax %\setcolumntextheight\relax \widowpenalty\zerocount % is gewoon beter \clubpenalty \zerocount % zeker bij grids \ifsomefloatwaiting \showmessage\m!columns6{\the\savednoffloats}% \global\setbox\savedfloatlist\box\floatlist \xdef\restoresavedfloats {\global\savednoffloats\the\savednoffloats \global\setbox\floatlist\box\savedfloatlist \global\noexpand\somefloatwaitingtrue}% \global\savednoffloats\zerocount \global\somefloatwaitingfalse \else \global\let\restoresavedfloats\relax \fi \dimen0\pagetotal \advance\dimen0 \parskip \advance\dimen0 \openlineheight \ifdim\dimen0<\pagegoal \allowbreak \else \break % Sometimes fails \fi \appendtoks\topskip1\topskip\to\everybodyfont \the\everybodyfont % ugly here \saveinterlinespace % ugly here \initializecolumns\nofcolumns \hangafter\zerocount \hangindent\zeropoint \everypar\emptytoks \ifdim\pagetotal=\zeropoint \else \verticalstrut \vskip-\struttotal \fi \global\savedpagetotal\pagetotal \global\singlecolumnout\output %\global\output{\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}}% \global\output{\global\setbox\precolumnbox\vbox{\dotopinsertions\unvbox\normalpagebox}}% \eject % no \holdinginserts=1, can make footnote disappear ! \global\precolumnboxheight\ht\precolumnbox \global\output{\continuousmulticolumnsout}% \setcolumnfloats \dohandleallcolumns {\global\setbox\currenttopcolumnbox\emptybox}% \checkbegincolumnfootnotes \activateotr{MUL}{ONE}% todo ! ! ! ! \let\sethsize\setcolumnhsize \let\setvsize\setcolumnvsize \sethsize \setvsize \showcomposition} %D When we leave the multi||column mode, we have to process the %D not yet shipped out part of the columns. When we don't %D balance, we simply force a continuous output, but a balanced %D output is more tricky. %D First we try to fill up the page and when all or something %D is left we try to balance things. This is another useful %D adaption of the ancesters of these macro's. It takes some %D reasoning to find out what happens and maybe I'm making %D some mistake, but it works. %D %D Voiding box \type{\precolumnbox} is sometimes necessary, %D e.g. when there is no text given between \type{\begin..} %D and \type{\end..}. The \type{\par} is needed! \chardef\multicolumnendsyncmethod\plusone % 1: old sync 2: new sync (cont-loc/project) / may fail ! ! ! ! \def\endmulticolumns {%\par \ifnum\multicolumnendsyncmethod=\plustwo \synchronizeoutput \else % don't combine these \vskip\lineheight \vskip-\lineheight % take footnotes into account \fi \dontshowcomposition \doflushcolumnfloat % added recently %\doflushcolumnfloats % no, since it results in wrong top floats \flushnotes % before start of columns \par \ifbalancecolumns \ifnum\multicolumnendsyncmethod=\plusone \global\output{\continuousmulticolumnsout}% \goodbreak \fi \global\output{\balancedmulticolumnsout}% \else \goodbreak \fi \eject % the prevdepth is important, try e.g. toclist in \prevdepth\zeropoint % columns before some noncolumned text text \global\output\singlecolumnout \global\output{\the\mainoutput}% % % % % todo \ifvoid\precolumnbox\else \unvbox\precolumnbox \fi \global\precolumnboxheight\zeropoint \endgroup % here \nofcolumns\plusone \setvsize % the outer one! \synchronizeoutput % new may 2004 / we need to: \pagegoal\vsize \checkendcolumnfootnotes \dosomebreak\allowbreak \restoresavedfloats} %D Because some initializations happen three times, we %D defined a macro for them. Erasing \type{\everypar} is %D needed because we don't want anything to interfere. \def\setmulticolumnsout {\everypar\emptytoks \dontcomplain \settopskip \setmaxdepth \topskip1\topskip \splittopskip\topskip \splitmaxdepth\maxdepth \boxmaxdepth\maxdepth % dangerous \emergencystretch\zeropoint\relax} % sometimes needed ! %D Flushing the page comes to pasting the columns together and %D appending the result to box \type{\precolumnbox}, if not %D void. I've seen a lot of implementations in which some skip %D was put between normal text and multi||column text. When we %D don't want this, the baselines can be messed up. I hope the %D seemingly complicated calculation of a correction %D \type{\kern} is adequate to overcome this. Although not %D watertight, spacing is taken into account and even multiple %D mode changes on one page go well. But cross your fingers and %D don't blame me. %D %D One of the complications of flushing out the boxes is that %D \type{\precolumnbox} needs to be \type{\unvbox}'ed, otherwise %D there is too less flexibility in the page when using %D \type{\r@ggedbottom}. It took a lot of time before these %D kind of problems were overcome. Using \type{\unvbox} at the %D wrong moment can generate \type{\balancingerror}'s. %D %D One can use the macros \type {\maxcolumnheight} and \type %D {\maxcolumndepth} when generating material between columns %D as well as postprocessing column lines. \let\maxcolumnheight=\zeropoint \let\maxcolumndepth =\zeropoint \newbox\columnpagebox \def\setmaxcolumndimensions {\let\maxcolumnheight\!!zeropoint \let\maxcolumndepth \!!zeropoint \dohandleallcolumns {\ifdim\ht\currentcolumnbox>\maxcolumnheight \edef\maxcolumnheight{\the\ht\currentcolumnbox}% \fi \ifdim\dp\currentcolumnbox>\maxcolumndepth \edef\maxcolumndepth{\the\dp\currentcolumnbox}% \fi}} \chardef\multicolumntopflushmethod\plusone % 0: no correction, 1: correction when topstuff, 2: correction, 3: correction++ \chardef\multicolumntopalignmethod\plustwo % 0: nothing, 1: force grid, 2: follow grid \def\flushprecolumnboxnogrid {\unvbox\precolumnbox} \def\flushprecolumnboxongrid {\scratchdimen\savedpagetotal \advance\scratchdimen -\ht\precolumnbox \advance\scratchdimen -\dp\precolumnbox \advance\scratchdimen -\topskip \box\precolumnbox \kern\scratchdimen} \newconditional\someprecolumncontent \def\flushcolumnedpage#1% {\bgroup \ifvoid\precolumnbox \setfalse\someprecolumncontent % will be set elsewhere \else \settrue\someprecolumncontent \mkprocessboxcontents\precolumnbox \fi \forgetall \setmulticolumnsout \showcomposition \setmaxcolumndimensions \dohandleallcolumns {\mkprocesscolumncontents\currentcolumnbox}% \postprocesscolumns \dohandleallcolumns % \hbox i.v.m. \showcomposition {\global\setbox\currentcolumnbox\hbox to \localcolumnwidth {\box\currentcolumnbox}% \wd\currentcolumnbox\localcolumnwidth \ifheightencolumns \ht\currentcolumnbox\fixedcolumnheight \fi}% \setmaxcolumndimensions \overlaycolumnfootnotes \setbox\columnpagebox\vbox {\hbox to \finalcolumntextwidth {\hskip\colleftskip\relax % new, \relax needed \ifreversecolumns \popsplitproperties % else wrong color stack \@EA\dohandlerevcolumns \else \@EA\dohandleallcolumns \fi {\finishcolumnbox{\hbox {\ifx\finishcolumnbox\relax\else\strut\fi \box\currentcolumnbox}}% \hfil}% \unskip \hskip\colrightskip}}% new \scratchdimen\zeropoint \dohandleallcolumns {\ifdim-\ht\currenttopcolumnbox<\scratchdimen \scratchdimen-\ht\currenttopcolumnbox \fi \global\setbox\currenttopcolumnbox\emptybox}% \advance\scratchdimen \ht\columnpagebox \setbox\scratchbox\hbox to \columntextwidth {\vrule \!!width\zeropoint \!!height\scratchdimen \!!depth\dp\columnpagebox \dostepwiserecurse2\nofcolumns1{\hfil\betweencolumns}\hfil}% \setbox\columnpagebox\hbox {\box\columnpagebox \hskip-\columntextwidth \restoretextcolor{\box\scratchbox}}% \postprocesscolumnpagebox % new, acts upon \box\columnpagebox \ifconditional\someprecolumncontent \settrue\someprecolumncontent % next some incredible crappy code \ifcase\multicolumntopalignmethod \flushprecolumnboxnogrid % not on grid \or \flushprecolumnboxongrid % force on grid \else\ifgridsnapping % somehow this junk fails in pascal \flushprecolumnboxongrid % obey grid settings, force on grid \else \flushprecolumnboxnogrid % ignore grid settings, not on grid \fi \fi \fi \global\precolumnboxheight\zeropoint \setvsize \dosomebreak\nobreak % hm, only needed when topstuff \ifgridsnapping \else \ifcase\multicolumntopflushmethod % sometimes method 1 goes wrong, so we need a way out; best sort this out % when we run into it again \or % \input tufte \startcolumns \showbaselines \input tufte \stopcolumns \input tufte \ifconditional\someprecolumncontent % \scratchdimen\topskip % \advance\scratchdimen -\openstrutheight % \nointerlineskip % \vskip-\scratchdimen \nointerlineskip \vskip\dimexpr\openstrutheight-\topskip\relax \fi \or % \scratchdimen\topskip % \advance\scratchdimen -\openstrutheight % \nointerlineskip % \vskip-\scratchdimen \nointerlineskip \vskip\dimexpr\openstrutheight-\topskip\relax \or % untested but maybe handy % \scratchdimen\topskip % \advance\scratchdimen -\openstrutheight % \nointerlineskip % \vskip-\scratchdimen % \vskip-\lineheight % \vbox{\strut}% \nointerlineskip \vskip\dimexpr\openstrutheight-\topskip-\lineheight\relax \vbox{\strut}% \fi \fi \prevdepth\openstrutdepth \nointerlineskip \dp\columnpagebox\zeropoint \global\finalcolumnheights\ht\columnpagebox \getnoflines\finalcolumnheights \global\finalcolumnlines\noflines \ifcase#1\else % messy correction, we need to rewrite this module (newcolumns) \setbox\columnpagebox\vbox {\offinterlineskip \scratchdimen\ht\columnpagebox \advance\scratchdimen\dp\columnpagebox % we probably lost that one already \box\columnpagebox \vskip-\scratchdimen}% \scratchdimen\noflines\openlineheight \advance\scratchdimen-\openstrutdepth \advance\scratchdimen-\openlineheight \advance\scratchdimen\topskip \ht\columnpagebox\scratchdimen \dp\columnpagebox\openstrutdepth % end of mess \fi \box\columnpagebox \egroup} %D In case one didn't notice, finaly \type{\finishcolumnbox} is %D applied to all boxes. One can use these hooks for special %D purposes. %D %D Once upon a time I wanted to manipulate the individual lines %D in a column. This feature is demonstrated in the two examples %D below. %D %D \startbuffer %D \def\postprocesscolumnline#1% or \postprocesscolumnbox %D {\ruledhbox{\box#1}\hss} %D %D \startcolumns[n=4] %D \dorecurse{25}{line: \recurselevel\par} %D \stopcolumns %D \stopbuffer %D %D \typebuffer %D %D Here we show the natural width of the lines: %D %D {\getbuffer} %D %D The next example does a bit more advanced manipulation: %D %D \startbuffer %D \def\postprocesscolumnline#1% %D {\ifodd\currentcolumn %D \hfill\unhbox#1\relax %D \else %D \relax\unhbox#1\hfill %D \fi} %D %D \startcolumns[n=4] %D \dorecurse{25}{line \recurselevel\par} %D \stopcolumns %D \stopbuffer %D %D \typebuffer %D %D Here we also see an application of \type{\currentcolumn}: %D %D {\getbuffer} %D %D This feature is implemented using the reshape macros %D presented in \type{supp-box}. \def\postprocesscolumns {\ifx\postprocesscolumnline\undefined \else \dohandleallcolumns {\global\setbox\currentcolumnbox\vtop {\beginofshapebox \unvbox\currentcolumnbox \unskip\unskip \endofshapebox \reshapebox {\dimen0\ht\shapebox \dimen2\dp\shapebox \setbox\shapebox\hbox to \hsize {\postprocesscolumnline\shapebox}% \ht\shapebox\dimen0 \dp\shapebox\dimen2 \box\shapebox}% \flushshapebox \everypar\emptytoks \parskip\zeropoint % = \forgetall \verticalstrut \vskip-\struttotal \vfil}}% \fi \ifx\postprocesscolumnbox\undefined \else \dohandleallcolumns {\global\setbox\currentcolumnbox\hbox {\postprocesscolumnbox\currentcolumnbox}} \fi} %D We default to doing nothing! \let\postprocesscolumnline =\undefined \let\postprocesscolumnbox =\undefined \let\postprocesscolumnpagebox=\relax %D \macros %D {reversecolumnstrue} %D %D We can force the macro that takes care of combining %D the columns, to flush them in the revere order. Of %D course, by default we don't reverse. \newif\ifreversecolumns %D Here comes the simple splitting routine. It's a bit %D longer than expected because of ragging bottoms or not. %D This part can be a bit shorter but I suppose that I will %D forget what happens. The splitting takes some already %D present material (think of floats) into account! %D %D First we present some auxiliary routines. Any material, %D like for instance floats, that is already present in the %D boxes is preserved. \def\splitcolumn#1from \box#2to \dimen#3 top \box#4% {\bgroup \ifdim\ht#4>\zeropoint \dimen0\dimen#3\relax \dimen2\dimen0 \advance\dimen0 -\ht#4% \columnfootnotecorrection{#1}{\dimen0}% \setbox0\vsplit#2 to \dimen0 \global\setbox#1\vbox to \dimen2 {\ifgridsnapping \dimen0-\openstrutheight \advance\dimen0 \topskip \vskip\dimen0\copy#4\vskip-\dimen0 \else \unvcopy#4% \fi \fuzzysnappedbox\unvbox0 \fakecolumnfootnotes{#1}}% \else \ifcase\clevernotes \global\setbox#1\vsplit#2 to \dimen#3% \global\setbox#1\vbox {\fuzzysnappedbox\unvbox{#1}}% % or \box ? \else \columnfootnotecorrection{#1}{\dimen#3}% \setbox0\vsplit#2 to \dimen#3% \global\setbox#1\vbox to \dimen#3% {\fuzzysnappedbox\unvbox0 \fakecolumnfootnotes{#1}}% \fi \fi \egroup} \def\splitcurrentcolumn from \box#1to \dimen#2% {\splitcolumn\currentcolumnbox from \box#1 to \dimen#2 top \box\currenttopcolumnbox} \def\splitfirstcolumn from \box#1to \dimen#2% {\splitcolumn\firstcolumnbox from \box#1 to \dimen#2 top \box\firsttopcolumnbox} \def\splitlastcolumn from \box#1to \dimen#2% {\global\setbox\lastcolumnbox\vbox {\unvcopy\lasttopcolumnbox \fuzzysnappedbox\unvbox{#1}% \fakecolumnfootnotes\lastcolumnbox}} %D NEW: still to be documented. \def\fakecolumnfootnotes#1% {\relax \ifcase\clevernotes\else \ifnum#1=\lastcolumnbox \fakenotes \fi \fi} \def\columnfootnotecorrection#1#2% {\relax \ifcase\clevernotes % page notes \or \ifnum#1=\firstcolumnbox\relax \calculatetotalclevernoteheight \advance#2 -\totalnoteheight \fi \else \ifnum#1=\lastcolumnbox\relax \calculatetotalclevernoteheight \advance#2 -\totalnoteheight \fi \fi} \def\overlaycolumnfootnotes {\relax \ifcase\clevernotes % page notes \else \checknotepresence \ifnotespresent % the note box has the depth of the notefont % because a column (i.e. first column has no depth, % we need to anchor top down) \bgroup \ifcase\clevernotes\or \getmulticolumnlines \advance\nofcolumnlines \minustwo \scratchdimen\nofcolumnlines\lineheight \advance\scratchdimen \topskip \setbox0\hbox {\lower\scratchdimen\vbox{\placenoteinserts}}% \ht0=\openstrutheight % \strutht \dp0=\openstrutdepth % \strutdp \scratchdimen\ht\firstcolumnbox \global\setbox\firstcolumnbox\vbox to \scratchdimen {\box\firstcolumnbox \vskip-\scratchdimen \restoretextcolor{\box0}}% \else % maybe here also \getmulticolumnlines \scratchdimen\ht\firstcolumnbox \advance\scratchdimen -\openstrutdepth % \strutdp \getnoflines\scratchdimen \advance\noflines \minustwo \scratchdimen\noflines\lineheight \advance\scratchdimen \topskip \setbox0\hbox {\lower\scratchdimen\vbox{\placenoteinserts}}% \ht0=\openstrutheight % \strutht \dp0=\openstrutdepth % \strutdp \scratchdimen\ht\lastcolumnbox \global\setbox\lastcolumnbox\vbox to \scratchdimen {\box\lastcolumnbox \vskip-\scratchdimen \restoretextcolor{\box0}}% \fi \egroup \fi \fi} %D Here comes the routine that splits the long box in columns. %D The macro \type{\flushcolumnfloats} can be used to flush %D either floats that were present before the multi||column %D mode was entered, or floats that migrate to next columns. %D Flushing floats is a delicate process. \def\continuousmulticolumnsout {\bgroup \forgetall \setmulticolumnsout \dontshowcomposition % \dimen0=\columntextheight % \advance\dimen0 -\precolumnboxheight % \settotalinsertionheight % \advance\dimen0 -\totalinsertionheight % \ifgridsnapping % evt altijd, nog testen % \getnoflines{\dimen0} % \dimen0=\noflines\openlineheight % \fi \getmulticolumnlines \dimen0=\nofcolumnlines\openlineheight \dohandleallcolumns {\splitcurrentcolumn from \box\normalpagebox to \dimen0}% \setbox\restofpage\vbox{\unvbox\normalpagebox}% \ifinheritcolumns \ifr@ggedbottom % vreemd \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox {\dimen0\dp\currentcolumnbox \unvbox\currentcolumnbox \vskip-\dimen0 \vskip\openstrutdepth % \strutdp \prevdepth\openstrutdepth % \strutdp \vfill}}% \ifbottomnotes \else \dimen0\ht\firstcolumnbox \fi \fi \ifn@rmalbottom \advance\dimen0 \maxdepth \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \dimen0 {\unvbox\currentcolumnbox}}% \fi \ifb@selinebottom % the columns are on top of the baseline \fi \else \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \dimen0 {\ifstretchcolumns \unvbox\currentcolumnbox \else \unvbox\currentcolumnbox % wel of niet \unvbox ? \vfill \fi}}% \dohandleallcolumns {\ht\currentcolumnbox\dimen0}% redundant \fi \setbox\precolumnbox\vbox{\flushcolumnedpage\zerocount}% \finaloutput\box\precolumnbox \sethsize \setvsize \flushcolumnfloats \unvbox\restofpage % \penalty\outputpenalty % gaat gruwelijk mis in opsommingen \egroup} %D And this is the balancing stuff. Again, part of the routine %D is dedicated to handling ragged bottoms, but here we also %D see some handling concerning the stretching of columns. %D We set \type{\widowpenalty} at~0, which enables us to %D balance columns with few lines. The use of \type{\box2} and %D \type{\box4} garantees a more robust check when skips are %D used. \def\multicolumnsbalancemax{250} % 100 is too small when floats are involved \def\balancedmulticolumnsout {\bgroup \setmulticolumnsout \dontshowcomposition \widowpenalty\zerocount \setbox0\vbox{\unvbox\normalpagebox}% \ifdim\ht0>\openlineheight % at least one line \ifnum\minbalancetoplines<2 % balance anyway \donetrue \else % check criterium to available lines \getnoflines{\ht0}% \divide\noflines \nofcolumns \relax \ifnum\noflines<\minbalancetoplines \relax \dimen0\ht0 \advance\dimen0 \ht\firsttopcolumnbox \advance\dimen0 \openlineheight \relax % let's play safe \ifdim\dimen0>\columntextheight % column exceeding text height \donetrue \else % it seems to fit \donefalse \fi \else % balance indeed \donetrue \fi \fi \else % balancing does not make sense \donefalse \fi \ifdone % start balancing %\ifdim\ht0>\openlineheight \dimen0\ht0 \advance\dimen0 \topskip \advance\dimen0 -\baselineskip \dohandleallcolumns {\advance\dimen0 \ht\currenttopcolumnbox}% \divide\dimen0 \nofcolumns \vbadness\!!tenthousand\relax \count255=\zerocount \bgroup \ifgridsnapping \dimen2\lineheight \else \dimen2=\onepoint % RUBISH \dimen2=\spacingfactor\dimen2 \fi \doloop {\advance\count255 \plusone \global\setbox\restofpage\copy0\relax \splitfirstcolumn from \box\restofpage to \dimen0 \dohandlemidcolumns {\splitcurrentcolumn from \box\restofpage to \dimen0}% \splitlastcolumn from \box\restofpage to \dimen0 \setbox2\vbox{\unvcopy\firstcolumnbox}% \dimen4\zeropoint \dohandleallcolumns {\setbox4\vbox {\unvcopy\currentcolumnbox %rather new, test this on pdftex-z.tex \unpenalty\unskip\unpenalty\unskip}% maybe better in main splitter %\writestatus{balance}{\the\currentcolumnbox: \the\ht4}% % \dimen6\ht4 \ifdim\dimen6>\dimen4 \dimen4=\dimen6 \fi}% \ifdim\ht4>\dimen4 \dimen4=\ht4 \fi}% \advance\dimen4 -.0005pt % get rid of accurracy problem, pretty new \ifnum\count255>\multicolumnsbalancemax\relax \exitloop \else\ifdim\dimen4>\ht2 \advance\dimen0 \dimen2\relax \else \exitloop \fi\fi}% \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox{\unvcopy\currentcolumnbox}}% NIEUW \ifnum\count255>\multicolumnsbalancemax\relax \showmessage\m!columns7\empty \else \showmessage\m!columns8{\the\count255\space}% \fi \egroup \ifinheritcolumns % We cannot assume that the first column is the tallest, if % only because we may have an aborted balance (one line in the % first column and a graphic in the second one). % % \dimen0\ht\firstcolumnbox % \dimen2\ht\firstcolumnbox % \dimen0=\zeropoint \dohandleallcolumns {\ifdim\ht\currentcolumnbox>\dimen0 \dimen0=\ht\currentcolumnbox \fi}% \dimen2\dimen0 % so far \advance\dimen2 -\openlineheight \dohandleallcolumns {\dimen4\ht\currentcolumnbox \dimen6=10\openlineheight % funny value \global\setbox\currentcolumnbox\vbox to \dimen0 {\unvbox\currentcolumnbox \ifdim\dimen4>\dimen6 \ifdim\dimen4<\dimen0 \ifdim\dimen4>\dimen2 \vskip\zeropoint % !! \else \vskip\openlineheight \vfill \fi \else \vskip\zeropoint \fi \else \vskip\openlineheight \vfill \fi}}% \else \bgroup \ifstretchcolumns \dimen0\ht\firstcolumnbox \dimen2=\bottomtolerance\ht\firstcolumnbox \setbox0\vbox{\unvcopy\lastcolumnbox}% \advance\dimen0 -\ht0\relax \advance\dimen0 -\dp0\relax \ifdim\dimen0>\openlineheight\relax \ifdim\dimen0>\dimen2\relax % \stretchcolumnsfalse % beter goed slecht dan slecht goed \showmessage\m!columns9\empty \fi \fi \fi \dohandleallcolumns {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox {\ifstretchcolumns \unvbox\currentcolumnbox \else \box\currentcolumnbox \vfill \fi}}% \egroup \fi \else % a one liner is not properly handled here, so best rewrite the text then \showmessage\m!columns{10}\empty \global\setbox\firstcolumnbox\vbox{\unvbox0}% \fi \global\output{\balancingerror}% \b@selinebottomtrue % forces depth in separation rule \flushcolumnedpage\plusone \multicolumnseject \egroup} \def\multicolumnseject {%\ifdim\pagetotal>\textheight % \eject % new, but wrong as fails on mixed-001.tex (wrong pagetotal at this point) %\else \allowbreak }%\fi} %D The multicolumn mechanism is incorporated in a \CONTEXT\ %D interface, which acts like: %D %D \starttyping %D \startcolumns[n=4,balance=no] %D some text %D \stopcolumns %D \stoptyping %D %D The setup is optional. The default behaviour of columns %D can be set up with: %D %D \starttyping %D \setupcolumns %D [n=2, %D balance=yes] %D \stoptyping %D %D In this case, stretching is according to the way it's %D done outside columns (\type{\inheritcolumnstrue}). Also %D we can setup the \type{tolerance} within a column, the %D \type{distance} between columns and the fixed %D \type{height} of a column. %D Multi||column output: the float routines %D %D Here come the routines that handle the placement of column %D floats. Floats that are to big migrate to the next %D column. Floats that are too wide, migrate to the top of the %D next page, where they span as much columns as needed. %D Floats that are left over from outside the multi||column %D mode are flushed first. In macro \type{\finaloutput} the %D topfloats that are left from previous text should be set. %D %D When there are some floats in the queue, we inhibit the %D flushing of floats on top of columns. The number of %D waiting floats is preswent in \type{\savednoftopfloats} and %D is saved. As long as there are floats waiting, the topfloats %D are places as if we are outside multi||column mode. This is %D neccessary for e.g. multicolumn lists. %D %D When all those floats are flushed, we switch to the local %D flushing routine. \def\setcolumnfloats {\xdef\globalsavednoffloats{\the\savednoffloats}% \ifnum\globalsavednoffloats>\zerocount \setglobalcolumnfloats \else \setlocalcolumnfloats \fi} \def\setglobalcolumnfloats {\everypar\emptytoks \let\flushcolumnfloat\relax %\let\doroomfloat\relax \let\docheckiffloatfits\relax \let\flushcolumnfloats\noflushcolumnfloats} \def\setlocalcolumnfloats {\everypar{\flushnotes\flushcolumnfloat\flushmargincontents\checkindentation}% \let\flushcolumnfloat\doflushcolumnfloat %\let\doroomfloat\docolumnroomfloat \let\docheckiffloatfits\docolumnroomfloat \let\flushcolumnfloats\doflushcolumnfloats \let\doflushfloats\doflushcolumnfloats % new \let\dosetbothinserts\relax \let\dotopinsertions\relax} \def\noflushcolumnfloats {\bgroup \xdef\localsavednoffloats{\the\savednoffloats}% \global\savednoffloats\globalsavednoffloats \dotopinsertions \xdef\globalsavenoffloats{\the\savednoffloats}% \ifnum\globalsavednoffloats=\zerocount \setlocalcolumnfloats \fi \global\savednoffloats\localsavednoffloats \egroup} %D We need to calculate the amount of free space in a columns. %D When there is not enough room, we migrate the float to the %D next column. These macro's are alternatives (and %D look||alikes) of \type{\doroomfloat}. When a float is to %D wide, for one column, it is moved to the top of the next %D page. Of course such moved floats have to be taken into %D account when we calculate the available space. It's a pitty %D that such things are no integral part of \TEX. \def\getcolumnstatus\column#1\total#2\goal#3\\% {\dimen0=\ifdim\pagegoal<\maxdimen \pagetotal \else \zeropoint \fi \dimen2=\zeropoint \count255=\zerocount \dimen8=\columntextheight \advance\dimen8 -\precolumnboxheight \def\dogetcolumnstatus {\advance\count255 \plusone \advance\dimen2 \ht\currenttopcolumnbox \advance\dimen2 \dp\currenttopcolumnbox \dimen4\dimen2 \advance\dimen4 \dimen0 \dimen6=\count255\dimen8 \ifdim\dimen4>\dimen6 \else \let\dogetcolumnstatus\relax \fi}% \dohandleallcolumns{\dogetcolumnstatus}% \ifnum\count255=0 \count255=1 \fi #1=\count255 #2=\dimen4 #3=\dimen6 } \def\getinsertionheight {\ifdim\pagegoal<\maxdimen \bgroup \dimen0=\columntextheight \advance\dimen0 -\pagegoal \xdef\insertionheight{\the\dimen0}% \egroup \else \global\let\insertionheight\zeropoint \fi} \def\docolumnroomfloat {\ifpostponecolumnfloats \global\roomforfloatfalse \else\ifnofloatpermitted \global\roomforfloatfalse \else \bgroup \getcolumnstatus\column\count255\total\dimen0\goal\dimen2\\% \advance\dimen0 2\openlineheight % nog nodig ? %\ifnum\count255=\nofcolumns % \getinsertionheight % %\message{\insertionheight}\wait % \advance\dimen0 \insertionheight %\fi \setbox\scratchbox\vbox % tricky met objecten ? {\blank[\@@bkspacebefore] \snaptogrid\vbox{\copy\floatbox}}% \advance\dimen0 \ht\scratchbox \advance\dimen0 .5\lineheight % needed because goal a bit higher %\message{column: \the\count255; total: \the\dimen0; goal: \the\dimen2}\wait \ifdim\dimen0>\dimen2 \global\roomforfloatfalse \else \global\roomforfloattrue \fi \ifdim\wd\floatbox>\hsize \showmessage\m!columns{11}\empty \global\roomforfloatfalse \fi \egroup \fi\fi} %D Flushing one float is done as soon as possible, i.e. %D \type{\everypar}. This means that (at the moment) %D sidefloats are not supported (overulled)! \newif\ifflushingcolumnfloats \flushingcolumnfloatstrue \def\doflushcolumnfloat {\ifpostponecolumnfloats\else\ifflushingcolumnfloats\ifprocessingverbatim\else\ifsomefloatwaiting \bgroup \forgetall \let\doflushcolumnfloat\relax \getcolumnstatus\column\mofcolumns\total\dimen0\goal\dimen2\\% \ifdim\dimen0>\zeropoint \dogetfloat \ifdim\wd\floatbox>\hsize \doresavefloat \else %\setbox2=\vbox % {\blank[\@@bkspacebefore] % \snaptogrid\vbox{\copy\floatbox}% % \blank[\@@bkspaceafter] \setbox2=\vbox {\blank[\@@bkspacebefore] \snaptogrid\vbox{\copy\floatbox}}% \advance\dimen0 \ht2 \ifdim\dimen0>\dimen2 \ifnum\mofcolumns<\nofcolumns \advance\mofcolumns \plusone %% bug %% \edef\currenttopcolumnbox{\getvalue{\@@topcol\the\count255}}% \ifdim\ht\currenttopcolumnbox=\zeropoint \global\setbox\currenttopcolumnbox\vbox {\snaptogrid\vbox{\copy\floatbox} \whitespace % nodig ? \blank[\@@bkspaceafter]}% \dimen4=\ht\currenttopcolumnbox \advance\dimen4 \dp\currenttopcolumnbox \global\advance\vsize -\dimen4 \advance\dimen4 -\pagegoal \global\pagegoal-\dimen4 \showmessage\m!columns{12}a% \else \showmessage\m!columns{12}b% \doresavefloat \fi \else \showmessage\m!columns{12}c% \doresavefloat \fi \else \ifhmode{\setbox0\lastbox}\fi% waar is die er in geslopen \par \ifdim\prevdepth<\zeropoint \else % anders bovenaan kolom witruimte \nobreak \blank[\@@bkspacebefore] \nobreak \fi \flushfloatbox \blank[\@@bkspaceafter] \fi \fi \fi \egroup \fi\fi\fi\fi} %D This one looks complicated. Upto \type{\nofcolumns} floats %D are placed, taking the width of a float into account. This %D routine can be improved on different ways: %D %D \startitemize[intro,packed] %D \item taking into account some imaginary baseline, just to %D get the captions in line %D \item multipass flushing until as many floats are displaced %D as possible %D \stopitemize %D %D When handling lots of (small) floats spacing can get worse %D because of lining out the columns. \def\doflushcolumnfloats {\ifpostponecolumnfloats\else \bgroup \forgetall \ifsomefloatwaiting \dimen8\zeropoint \dimen4\zeropoint \count0\zerocount % count0 can be used local \count2\nofcolumns % count2 can be used local \dohandleallcolumns {\ifnum\count0>\zerocount % the wide one's reserved space \global\setbox\currenttopcolumnbox\vbox {\snaptogrid\vbox {\copy\currenttopcolumnbox \hbox{\vphantom{\copy\floatbox}}} \whitespace % nodig ? \blank[\@@bkspaceafter]}% \else \dogetfloat \ifdim\wd\floatbox>\finalcolumntextwidth % better somewhere else too \global\setbox\floatbox\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}% \fi % otherwise the graphic may disappear \ifdim\wd\floatbox>\hsize \dimen0\wd\floatbox \advance\dimen0 \intercolumnwidth \dimen2\hsize \advance\dimen2 \intercolumnwidth \advance\dimen0 .5pt % hm, why 1 \advance\dimen2 .5pt % hm, why 2 \divide\dimen0 \dimen2 \count0\dimen0 \advance\count0 \plusone \ifnum\count0>\count2 \doresavefloat \count0\zerocount \else \dimen0=\count0\hsize \advance\dimen0 \count0\intercolumnwidth \advance\dimen0 -\intercolumnwidth \global\setbox\floatbox\hbox to \dimen0 %{\hss\hbox{\copy\floatbox}\hss}% {\processaction[\@@bklocation] % how easy to forget [ \v!left=>\copy\floatbox\hss, \v!right=>\hss\copy\floatbox, \s!default=>\hss\copy\floatbox\hss, \s!unknown=>\hss\copy\floatbox\hss]}% \fi \showmessage\m!columns{13}\empty \else % \showmessage\m!columns{13}\empty \fi \ifdim\ht\floatbox>\zeropoint\relax \global\setbox\currenttopcolumnbox\vbox {\snaptogrid\vbox {\copy\currenttopcolumnbox \copy\floatbox} \whitespace % nodig ? \blank[\@@bkspaceafter]}% \fi \dimen6\ht\currenttopcolumnbox \advance\dimen6 \dp\currenttopcolumnbox \fi \ifdim\dimen4<\ht\currenttopcolumnbox \dimen4\ht\currenttopcolumnbox \fi \advance\dimen8 \dimen6 \advance\count2 \minusone \advance\count0 \minusone }% \setvsize \global\advance\vsize -\dimen8 \global\pagegoal\vsize \else %\doflushfloats % does not snap! \fi \egroup \fi} %D The next macro can be used to flush floats in the current %D stream. No width checking is (yet) done. \def\insertcolumnfloats {\doloop {\ifsomefloatwaiting \bgroup \forgetall % no check for width \dogetfloat \blank[\@@bkspacebefore] \snaptogrid\vbox{\copy\floatbox} \blank[\@@bkspaceafter] \egroup \else \exitloop \fi}} %D This were the multi||column routines. They can and need to %D be improved but at the moment their behaviour is acceptable. %D %D One inprovement can be to normalize the height of floats %D to $n\times$\type{\lineheight} with a macro like: %D %D \starttyping %D \normalizevbox{...} %D \stoptyping % border case, should fit on one page % % \startcolumns % % 1 \input tufte \par \plaatsfiguur{}{\omlijnd[breedte=\hsize,hoogte=3cm]{1}} % 2 \input tufte \par \plaatsfiguur{}{\omlijnd[breedte=\hsize,hoogte=3cm]{2}} % 3 \input tufte \par \plaatsfiguur{}{\omlijnd[breedte=\hsize,hoogte=3cm]{3}} % % \stopcolumns \def\setupcolumns {\dosingleempty\dosetupcolumns} \def\dosetupcolumns[#1]% {\getparameters[\??kl][#1]% \nofcolumns\@@kln\relax \processaction [\@@klrule] [ \v!on=>\let\betweencolumns\linebetweencolumns, \v!off=>\let\betweencolumns\spacebetweencolumns, \s!default=>\let\betweencolumns\spacebetweencolumns, \s!unknown=>\let\betweencolumns\@@klrule]} \def\linebetweencolumns {\bgroup \starttextproperties \ifdim\@@kldistance>\zeropoint \dimen0=\@@kldistance \else \dimen0=\linewidth \fi \advance\dimen0 -\linewidth \hskip.5\dimen0 \vrule \!!width\linewidth \ifb@selinebottom\!!depth\strutdepth\fi \hskip.5\dimen0\relax \stoptextproperties \egroup} \def\spacebetweencolumns {\hskip\@@kldistance} \presetlocalframed[\??kl] \def\backgroundfinishcolumnbox {\doifinsetelse\@@kloffset{\v!none,\v!overlay} {\let\@@kloffset\!!zeropoint} {\scratchdimen\@@kloffset \advance\scratchdimen -\@@klrulethickness \edef\@@kloffset{\the\scratchdimen}}% \localframed [\??kl] [\c!strut=\v!no, \c!width=\v!fit, \c!height=\v!fit, \c!align=]} \let\restorecolumnsettings\relax \definecomplexorsimpleempty\startcolumns \def\complexstartcolumns[#1]% %% \startcolumns {\bgroup \let\stopcolumns\egroup \ifinsidecolumns \else \setupcolumns[#1]% \ifnum\@@kln>1\relax \whitespace \begingroup \doif\@@kloption\v!background {\let\finishcolumnbox\backgroundfinishcolumnbox \let\columntextoffset\@@kloffset}% \ifx\@@klcommand\empty\else \let\postprocesscolumnline\@@klcommand \fi \doifelsenothing\@@klheight \heightencolumnsfalse \heightencolumnstrue \doifelse\@@kldirection\v!right \reversecolumnsfalse \reversecolumnstrue \doifelse\@@klbalance\v!yes \balancecolumnstrue \balancecolumnsfalse \installalign\v!yes {\stretchcolumnstrue \inheritcolumnsfalse}% todo: new key \installalign\v!no {\stretchcolumnsfalse\inheritcolumnsfalse}% todo: new key \installalign\v!text{\stretchcolumnsfalse\inheritcolumnstrue }% \stretchcolumnsfalse \inheritcolumnstrue \doifsomething\@@klalign{\expanded{\setupalign[\@@klalign]}}% % \processaction % [\@@klalign] % [ \v!yes=>\stretchcolumnstrue % \inheritcolumnsfalse, % \v!no=>\stretchcolumnsfalse % \inheritcolumnsfalse, % \v!text=>\stretchcolumnsfalse % \inheritcolumnstrue]% \nofcolumns=\@@kln % % probably more is needed, and how about nesting save's % \savecurrentblank \savecurrentwhitespace \def\restorecolumnsettings {\boxmaxdepth\maxdimen % done elsewhere \restorecurrentblank \restorecurrentwhitespace}% % \edef\fixedcolumnheight{\@@klheight}% \edef\minbalancetoplines{\@@klntop}% \setuptolerance[\@@kltolerance]% %% \startcolumns \setupblank[\@@klblank]% \ifdim\ctxparskip>\zeropoint\relax \setupwhitespace[\@@klblank]% \fi \def\stopcolumns {\endmulticolumns \global\insidecolumnsfalse \endgroup \egroup}% \global\insidecolumnstrue \beginmulticolumns \fi \fi} \installcolumnbreakhandler {MUL} \v!preference {\goodbreak} \installcolumnbreakhandler {MUL} \v!yes {\par % todo: since {\testrulewidth\zeropoint\ruledvskip\textheight} % we misuse a \penalty-200 % side effect \vskip-\textheight }% bugged : \prevdepth-\thousandpoint} % signals top of column to \blank %D New: only at start of columns; may change ! Rather %D interwoven and therefore to be integrated when the multi %D column modules are merged. (moved from cont-new.tex) \def\setupcolumnspan[#1]% {\getparameters[\??ks][#1]} \presetlocalframed [\??ks] \setupcolumnspan [\c!n=2, \c!offset=\v!overlay, \c!frame=\v!off] \newbox\columnspanbox \let\postprocesscolumnspanbox\gobbleoneargument \def\dostartcolumnspan[#1]% {\bgroup \setupcolumnspan[#1]% \forgetall \ifinsidecolumns \advance\hsize \intercolumnwidth \hsize\@@ksn\hsize \advance\hsize -\intercolumnwidth \fi \dowithnextbox {\setbox\columnspanbox\flushnextbox \ifinsidecolumns\wd\columnspanbox\hsize\fi \postprocesscolumnspanbox\columnspanbox \scratchdimen\ht\columnspanbox \setbox\columnspanbox\hbox % depth to be checked, probably option! {\localframed[\??ks][\c!offset=\v!overlay]{\box\columnspanbox}}% \ht\columnspanbox\scratchdimen \dp\columnspanbox\strutdp \wd\columnspanbox\hsize \ifinsidecolumns \ifnum\@@ksn>1 \setvsize \dohandleallcolumns {\ifnum\currentcolumn>\@@ksn\else \global\setbox\currenttopcolumnbox=\vbox {\ifnum\currentcolumn=1 \snaptogrid\vbox{\copy\columnspanbox} \else \snaptogrid\vbox{\vphantom{\copy\columnspanbox}} \fi}% \wd\currenttopcolumnbox\hsize \global\advance\vsize -\ht\currenttopcolumnbox \fi} \global\pagegoal\vsize \else \snaptogrid\vbox{\box\columnspanbox} \fi \else \snaptogrid\vbox{\box\columnspanbox} \fi \endgraf \ifvmode\prevdepth\strutdp\fi \egroup} \vbox\bgroup %\topskipcorrection % becomes an option ! \EveryPar{\begstrut\EveryPar{}}} % also ! \def\startcolumnspan {\dosingleempty\dostartcolumnspan} \def\stopcolumnspan {\egroup} \setupcolumns [\c!n=2, \c!ntop=1, \c!command=, \c!direction=\v!right, \c!rule=\v!off, \c!tolerance=\v!tolerant, \c!distance=1.5\bodyfontsize, % influenced by switching \c!height=, \c!balance=\v!yes, \c!align=\v!text, \c!blank={\v!line,\v!fixed}, \c!option=, \c!rulethickness=\linewidth, \c!offset=.5\bodyfontsize] %D Undocumented and still under development. \def\startsimplecolumns {\dosingleempty\dostartsimplecolumns} \def\dostartsimplecolumns[#1]% {\bgroup \nopenalties \getparameters[\??kl] [\c!width=\hsize,\c!distance=1.5\bodyfontsize,% \c!n=2,\c!lines=0,#1]% \let\rigidcolumnlines\@@kllines \setrigidcolumnhsize\@@klwidth\@@kldistance\@@kln \setbox\scratchbox\vbox\bgroup \forgetall} % \blank[\v!disable] \def\stopsimplecolumns {\removebottomthings \egroup \rigidcolumnbalance\scratchbox \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-spreadsheet.mkiv0000644000175000017500000001367612130411274025332 0ustar norbertnorbert%D \module %D [ file=m-spreadsheet, %D version=2011.02.21, %D title=\CONTEXT\ Extra Modules, %D subtitle=Spreadsheets, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is an experimental follow up on discussion on the mailing list. \registerctxluafile{m-spreadsheet}{1.001} \unprotect % todo: get(...) set(..) ctx(...) \installcorenamespace{spreadsheet} \installcommandhandler \??spreadsheet {spreadsheet} \??spreadsheet \appendtoks \ctxlua{moduledata.spreadsheets.setup{ % global ! period = \!!bs\spreadsheetparameter\c!period\!!es, comma = \!!bs\spreadsheetparameter\c!comma\!!es, split = \!!bs\spreadsheetparameter\c!split\!!es, }}% \to \everysetupspreadsheet \setupspreadsheet [%\c!comma=, %\c!period=, \c!split=\v!no] \unexpanded\def\resetspreadsheet {\dosingleempty\module_spreadsheet_reset} \unexpanded\def\module_spreadsheet_reset[#1]% {\ctxlua{moduledata.spreadsheets.reset("#1")}} \unexpanded\def\startspreadsheet {\dosingleempty\module_spreadsheet_start} \unexpanded\def\module_spreadsheet_start[#1]% {\pushmacro\currentspreadsheet \edef\currentspreadsheet{#1}% \checkspreadsheetparent \edef\m_spreadsheet_period{\spreadsheetparameter\c!period}% \edef\m_spreadsheet_comma {\spreadsheetparameter\c!comma}% \ctxlua{moduledata.spreadsheets.start("#1", { period = \!!bs\detokenize\expandafter{\m_spreadsheet_period}\!!es, comma = \!!bs\detokenize\expandafter{\m_spreadsheet_comma}\!!es, split = \!!bs\spreadsheetparameter\c!split\!!es, })}} \unexpanded\def\stopspreadsheet {\ctxlua{moduledata.spreadsheets.stop()}% \popmacro\currentspreadsheet} \unexpanded\def\showspreadsheet {\dosingleempty\module_spreadsheet_show} \unexpanded\def\module_spreadsheet_show[#1]% {\ctxlua{moduledata.spreadsheets.tocontext("#1")}} \unexpanded\def\inspectspreadsheet {\dosingleempty\module_spreadsheet_inspect} \unexpanded\def\module_spreadsheet_inspect[#1]% {\ctxlua{moduledata.spreadsheets.inspect("#1")}} \unexpanded\def\setspreadsheet {\dosingleempty\module_spreadsheet_set} \unexpanded\def\module_spreadsheet_set[#1]#2#3#4% {\ctxlua{moduledata.spreadsheets.set("#1",\number#2,\number#3,"#4")}} \unexpanded\def\getspreadsheet {\dosingleempty\module_spreadsheet_get} \unexpanded\def\module_spreadsheet_get[#1]#2#3#4% {\ctxlua{moduledata.spreadsheets.get("#1",\number#2,\number#3,"#4")}} \unexpanded\def\doifelsespreadsheetcell {\dosingleempty\module_spreadsheet_doifelse_cell} \unexpanded\def\module_spreadsheet_doifelse_cell[#1]#2#3% {\ctxlua{moduledata.spreadsheets.doifelsecell("#1",\number#2,\number#3)}} \ifdefined\tblrow \def\TABLEsetspreadsheet#1{\ctxlua{moduledata.spreadsheets.set("",\number\tblrow+1,\number\tblcol,\!!bs#1\!!es)}} \def\TABLEgetspreadsheet#1{\ctxlua{moduledata.spreadsheets.get("",\number\tblrow+1,\number\tblcol,\!!bs#1\!!es)}} \else \def\TABLEsetspreadsheet#1{\ctxlua{moduledata.spreadsheets.set("",\number\c_tabl_ntb_row+1,\number\c_tabl_ntb_col,\!!bs#1\!!es)}} \def\TABLEgetspreadsheet#1{\ctxlua{moduledata.spreadsheets.get("",\number\c_tabl_ntb_row+1,\number\c_tabl_ntb_col,\!!bs#1\!!es)}} \fi \appendtoks \module_spreadsheet_reset[\currentspreadsheet]% \let\setspr\TABLEsetspreadsheet \let\getspr\TABLEgetspreadsheet \to \everyTABLEpass \unexpanded\def\startspreadsheettable % quick and dirty {\dodoubleempty\module_spreadsheet_start_table} \unexpanded\def\module_spreadsheet_start_table[#1][#2]% {\bgroup \let\startrow \module_spreadsheet_row_start \let\stoprow \module_spreadsheet_row_stop \let\startcell\module_spreadsheet_cell_start \let\stopcell \module_spreadsheet_cell_stop \doifassignmentelse{#1} {\module_spreadsheet_start \bTABLE[\c!align=\v!flushright,#1]} {\module_spreadsheet_start[#1]% \bTABLE[\c!align=\v!flushright,#2]}} \unexpanded\def\stopspreadsheettable {\eTABLE \stopspreadsheet \egroup} \unexpanded\def\module_spreadsheet_row_start{\bTR} \unexpanded\def\module_spreadsheet_row_stop {\eTR} \unexpanded\def\module_spreadsheet_cell_start {\doifnextoptionalelse\module_spreadsheet_cell_start_yes\module_spreadsheet_cell_start_nop} \unexpanded\def\module_spreadsheet_cell_start_yes[#1]#2\stopcell {\bTD[#1]\getspr{#2}\eTD} \unexpanded\def\module_spreadsheet_cell_start_nop#1\stopcell {\bTD\getspr{#1}\eTD} \let\module_spreadsheet_cell_stop\relax \protect \continueifinputfile{m-spreadsheet.mkiv} \starttext \bTABLE[align=middle] \bTR \bTD \getspr{100} \eTD \bTD test \setspr{30} \eTD \eTR \bTR \bTD \getspr{20} \eTD \bTD \getspr{4+3} \eTD \eTR \bTR \bTD \getspr{A[1] + A[2]} \eTD \bTD \getspr{B1 + B2} \eTD \eTR \bTR \bTD[nx=2] \bf \getspr{(A[3] + B[3]) /100} \eTD \eTR \bTR \bTD[nx=2] \bf \getspr{string.format("\letterpercent0.3f",(A[3] + B[3]) /100)} \eTD \eTR \bTR \bTD[nx=2] \bf \getspr{fmt("@0.3f",(sum(A,1,2)) / 10)} \eTD \eTR \eTABLE \setupspreadsheet[mysheet] \startspreadsheet[mysheet] \bTABLE[align=middle] \bTR \bTD \getspr{100} \eTD \bTD test \setspr{30} \eTD \eTR \bTR \bTD \getspr{20} \eTD \bTD \getspr{4+3.5} \eTD \eTR \bTR \bTD \getspr{A[1] + A[2]} \eTD \bTD \getspr{B[1] + B[2]} \eTD \eTR \bTR \bTD[nx=2] \bf \getspr{A[3] + B[3]} \eTD \eTR \eTABLE \stopspreadsheet \blank \setupspreadsheet[test][period={{\bf\middlered .}},comma={{\bf\middlegreen ,}},split=yes] \startspreadsheettable[test] \startrow \startcell 123456.78 \stopcell \startcell 1234567.89 \stopcell \startcell A[1] + B[1] \stopcell \stoprow \stopspreadsheettable \blank % \showspreadsheet % \showspreadsheet[mysheet] \doifelsespreadsheetcell[mysheet]{1}{2}{YES}{NOP} \doifelsespreadsheetcell[myshoot]{1}{2}{YES}{NOP} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/data-zip.lua0000644000175000017500000002045112130411274024102 0ustar norbertnorbertif not modules then modules = { } end modules ['data-zip'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- partly redone .. needs testing local format, find, match = string.format, string.find, string.match local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local report_zip = logs.reporter("resolvers","zip") --[[ldx--

We use a url syntax for accessing the zip file itself and file in it:

zip:///oeps.zip?name=bla/bla.tex zip:///oeps.zip?tree=tex/texmf-local zip:///texmf.zip?tree=/tex/texmf zip:///texmf.zip?tree=/tex/texmf-local zip:///texmf-mine.zip?tree=/tex/texmf-projects --ldx]]-- local resolvers = resolvers zip = zip or { } local zip = zip zip.archives = zip.archives or { } local archives = zip.archives zip.registeredfiles = zip.registeredfiles or { } local registeredfiles = zip.registeredfiles local limited = false directives.register("system.inputmode", function(v) if not limited then local i_limiter = io.i_limiter(v) if i_limiter then zip.open = i_limiter.protect(zip.open) limited = true end end end) local function validzip(str) -- todo: use url splitter if not find(str,"^zip://") then return "zip:///" .. str else return str end end function zip.openarchive(name) if not name or name == "" then return nil else local arch = archives[name] if not arch then local full = resolvers.findfile(name) or "" arch = (full ~= "" and zip.open(full)) or false archives[name] = arch end return arch end end function zip.closearchive(name) if not name or (name == "" and archives[name]) then zip.close(archives[name]) archives[name] = nil end end function resolvers.locators.zip(specification) local archive = specification.filename local zipfile = archive and archive ~= "" and zip.openarchive(archive) -- tricky, could be in to be initialized tree if trace_locating then if zipfile then report_zip("locator: archive %a found",archive) else report_zip("locator: archive %a not found",archive) end end end function resolvers.hashers.zip(specification) local archive = specification.filename if trace_locating then report_zip("loading file %a",archive) end resolvers.usezipfile(specification.original) end function resolvers.concatinators.zip(zipfile,path,name) -- ok ? if not path or path == "" then return format('%s?name=%s',zipfile,name) else return format('%s?name=%s/%s',zipfile,path,name) end end function resolvers.finders.zip(specification) local original = specification.original local archive = specification.filename if archive then local query = url.query(specification.query) local queryname = query.name if queryname then local zfile = zip.openarchive(archive) if zfile then if trace_locating then report_zip("finder: archive %a found",archive) end local dfile = zfile:open(queryname) if dfile then dfile = zfile:close() if trace_locating then report_zip("finder: file %a found",queryname) end return specification.original elseif trace_locating then report_zip("finder: file %a not found",queryname) end elseif trace_locating then report_zip("finder: unknown archive %a",archive) end end end if trace_locating then report_zip("finder: %a not found",original) end return resolvers.finders.notfound() end function resolvers.openers.zip(specification) local original = specification.original local archive = specification.filename if archive then local query = url.query(specification.query) local queryname = query.name if queryname then local zfile = zip.openarchive(archive) if zfile then if trace_locating then report_zip("opener; archive %a opened",archive) end local dfile = zfile:open(queryname) if dfile then if trace_locating then report_zip("opener: file %a found",queryname) end return resolvers.openers.helpers.textopener('zip',original,dfile) elseif trace_locating then report_zip("opener: file %a not found",queryname) end elseif trace_locating then report_zip("opener: unknown archive %a",archive) end end end if trace_locating then report_zip("opener: %a not found",original) end return resolvers.openers.notfound() end function resolvers.loaders.zip(specification) local original = specification.original local archive = specification.filename if archive then local query = url.query(specification.query) local queryname = query.name if queryname then local zfile = zip.openarchive(archive) if zfile then if trace_locating then report_zip("loader: archive %a opened",archive) end local dfile = zfile:open(queryname) if dfile then logs.show_load(original) if trace_locating then report_zip("loader; file %a loaded",original) end local s = dfile:read("*all") dfile:close() return true, s, #s elseif trace_locating then report_zip("loader: file %a not found",queryname) end elseif trace_locating then report_zip("loader; unknown archive %a",archive) end end end if trace_locating then report_zip("loader: %a not found",original) end return resolvers.openers.notfound() end -- zip:///somefile.zip -- zip:///somefile.zip?tree=texmf-local -> mount function resolvers.usezipfile(archive) local specification = resolvers.splitmethod(archive) -- to be sure local archive = specification.filename if archive and not registeredfiles[archive] then local z = zip.openarchive(archive) if z then local instance = resolvers.instance local tree = url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end statistics.starttiming(instance) resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) -- resets hashes too registeredfiles[archive] = z instance.files[archive] = resolvers.registerzipfile(z,tree) statistics.stoptiming(instance) elseif trace_locating then report_zip("registering: unknown archive %a",archive) end elseif trace_locating then report_zip("registering: archive %a not found",archive) end end function resolvers.registerzipfile(z,tree) local files, filter = { }, "" if tree == "" then filter = "^(.+)/(.-)$" else filter = format("^%s/(.+)/(.-)$",tree) end if trace_locating then report_zip("registering: using filter %a",filter) end local register, n = resolvers.registerfile, 0 for i in z:files() do local path, name = match(i.filename,filter) if path then if name and name ~= '' then register(files, name, path) n = n + 1 else -- directory end else register(files, i.filename, '') n = n + 1 end end report_zip("registering: %s files registered",n) return files end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-lin.lua0000644000175000017500000002104012130411274024060 0ustar norbertnorbertif not modules then modules = { } end modules ['page-lin'] = { version = 1.001, comment = "companion to page-lin.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- experimental -> will become builders local trace_numbers = false trackers.register("lines.numbers", function(v) trace_numbers = v end) local report_lines = logs.reporter("lines") local texbox = tex.box local attributes, nodes, node, context = attributes, nodes, node, context nodes.lines = nodes.lines or { } local lines = nodes.lines lines.data = lines.data or { } -- start step tag local data = lines.data local last = #data lines.scratchbox = lines.scratchbox or 0 local leftmarginwidth = nodes.leftmarginwidth storage.register("lines/data", lines.data, "nodes.lines.data") -- if there is demand for it, we can support multiple numbering streams -- and use more than one attibute local variables = interfaces.variables local nodecodes = nodes.nodecodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local whatsit_code = nodecodes.whatsit local a_displaymath = attributes.private('displaymath') local a_linenumber = attributes.private('linenumber') local a_linereference = attributes.private('linereference') local a_verbatimline = attributes.private('verbatimline') local current_list = { } local cross_references = { } local chunksize = 250 -- not used in boxed local traverse_id = node.traverse_id local traverse = node.traverse local copy_node = node.copy local hpack_node = node.hpack local insert_node_after = node.insert_after local insert_node_before = node.insert_before -- cross referencing function lines.number(n) n = tonumber(n) local cr = cross_references[n] or 0 cross_references[n] = nil return cr end local function resolve(n,m) -- we can now check the 'line' flag (todo) while n do local id = n.id if id == whatsit_code then -- why whatsit local a = n[a_linereference] if a then cross_references[a] = m end elseif id == hlist_code or id == vlist_code then resolve(n.list,m) end n = n.next end end function lines.finalize(t) local getnumber = lines.number for _,p in next, t do for _,r in next, p do local m = r.metadata if m and m.kind == "line" then local e = r.entries local u = r.userdata e.linenumber = getnumber(e.text or 0) -- we can nil e.text e.conversion = u and u.conversion r.userdata = nil -- hack end end end end local filters = structures.references.filters local helpers = structures.helpers structures.references.registerfinalizer(lines.finalize) filters.line = filters.line or { } function filters.line.default(data) -- helpers.title(data.entries.linenumber or "?",data.metadata) context.convertnumber(data.entries.conversion or "numbers",data.entries.linenumber or "0") end function filters.line.page(data,prefixspec,pagespec) -- redundant helpers.prefixpage(data,prefixspec,pagespec) end function filters.line.linenumber(data) -- raw context(data.entries.linenumber or "0") end -- boxed variant, todo: use number mechanism lines.boxed = { } local boxed = lines.boxed -- todo: cache setups, and free id no longer used -- use interfaces.cachesetup(t) function boxed.register(configuration) last = last + 1 data[last] = configuration if trace_numbers then report_lines("registering setup %a",last) end return last end function commands.registerlinenumbering(configuration) context(boxed.register(configuration)) end function boxed.setup(n,configuration) local d = data[n] if d then if trace_numbers then report_lines("updating setup %a",n) end for k,v in next, configuration do d[k] = v end else if trace_numbers then report_lines("registering setup %a (br)",n) end data[n] = configuration end return n end commands.setuplinenumbering = boxed.setup local function check_number(n,a,skip,sameline) local d = data[a] if d then local tag, skipflag, s = d.tag or "", 0, d.start or 1 current_list[#current_list+1] = { n, s } if sameline then skipflag = 0 if trace_numbers then report_lines("skipping broken line number %s for setup %a: %s (%s)",#current_list,a,s,d.continue or "no") end elseif not skip and s % d.step == 0 then skipflag, d.start = 1, s + 1 -- (d.step or 1) if trace_numbers then report_lines("making number %s for setup %a: %s (%s)",#current_list,a,s,d.continue or "no") end else skipflag, d.start = 0, s + 1 -- (d.step or 1) if trace_numbers then report_lines("skipping line number %s for setup %a: %s (%s)",#current_list,a,s,d.continue or "no") end end context.makelinenumber(tag,skipflag,s,n.shift,n.width,leftmarginwidth(n.list),n.dir) end end -- xlist -- xlist -- hlist local function identify(list) if list then for n in traverse_id(hlist_code,list) do if n[a_linenumber] then return list end end local n = list while n do local id = n.id if id == hlist_code or id == vlist_code then local ok = identify(n.list) if ok then return ok end end n = n.next end end end function boxed.stage_zero(n) return identify(texbox[n].list) end -- reset ranges per page -- store first and last per page -- maybe just set marks directly function boxed.stage_one(n,nested) current_list = { } local head = texbox[n] if head then local list = head.list if nested then list = identify(list) end local last_a, last_v, skip = nil, -1, false for n in traverse_id(hlist_code,list) do -- attr test here and quit as soon as zero found if n.height == 0 and n.depth == 0 then -- skip funny hlists -- todo: check line subtype else local list = n.list local a = list[a_linenumber] if a and a > 0 then if last_a ~= a then local da = data[a] local ma = da.method if ma == variables.next then skip = true elseif ma == variables.page then da.start = 1 -- eventually we will have a normal counter end last_a = a if trace_numbers then report_lines("starting line number range %s: start %s, continue",a,da.start,da.continue or "no") end end if n[a_displaymath] then if nodes.is_display_math(n) then check_number(n,a,skip) end else local v = list[a_verbatimline] if not v or v ~= last_v then last_v = v check_number(n,a,skip) else check_number(n,a,skip,true) end end skip = false end end end end end function boxed.stage_two(n,m) if #current_list > 0 then m = m or lines.scratchbox local t, tn = { }, 0 for l in traverse_id(hlist_code,texbox[m].list) do tn = tn + 1 t[tn] = copy_node(l) end for i=1,#current_list do local li = current_list[i] local n, m, ti = li[1], li[2], t[i] if ti then ti.next, n.list = n.list, ti resolve(n,m) else report_lines("error in linenumbering (1)") return end end end end commands.linenumbersstageone = boxed.stage_one commands.linenumbersstagetwo = boxed.stage_two context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-nav.mkii0000644000175000017500000002551711754241457024317 0ustar norbertnorbert%D \module %D [ file=scrn-nav, %D version=1998.01.15, %D title=\CONTEXT\ Core Macros, %D subtitle=Navigation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Screen Macros / Navigation} \unprotect %D Support for interactive document is very present in %D \CONTEXT\ and interwoven in many modules. This means that in %D this module, where we deal with some common navigational %D features, there will be quite some forward references. %D %D When I started implementing hypertext support, the macros %D were mostly dealing with things related to locations, that %D is click in this location and goto that one. The %D functionality of many macro depends on the output medium: %D paper or screen. The next boolean holds the state: \newif\iflocation \def\ifinteractief{\iflocation} % upw comp %D We also allocate a scratchbox: \newbox\locationbox %D There is no interaction at all unless enabled by saying: %D %D \starttyping %D \setupinteraction[state=start] %D \stoptyping %D %D The other settings are: %D %D \showsetup{setupinteraction} %D %D In the special driver modules we introduced a switch that %D forces page destinations (instead of named ones). We set %D this switch here. \def\setinteractionparameter#1#2% use with case, no checking done {\setvalue{\??ia#1}{#2}} % pass #2, can be \blabla \def\resetinteractionparameter#1% use with case, no checking done {\letvalue{\??ia#1}\empty} % \def\interactionparameter#1% % {\csname\??ia#1\endcsname} \newtoks\everysetupinteraction \def\setupinteraction {\dosingleargument\dodosetupinteraction} \def\dodosetupinteraction[#1]% % \dosetupinteraction == special {\getparameters[\??ia][#1]% \the\everysetupinteraction} % todo, move partial append to where the action happens \appendtoks \doifelse\@@iastate\v!start {\iflocation\else \showmessage\m!interactions2{\ifusepagedestinations\space(PAGE)\fi}% \global\locationtrue \fi} {\iflocation \showmessage\m!interactions3{\ifusepagedestinations\space(PAGE)\fi}% \global\locationfalse \fi}% \iflocation \setsystemmode \v!interaction \else \resetsystemmode\v!interaction \fi \dosetuppageview\@@iafocus \doifsomething\@@iacalculate {\doregistercalculationset\@@iacalculate}% \doifelse\@@iastrut\v!yes \locationstruttrue \locationstrutfalse \doifelse\@@iaclick\v!yes \highlighthyperlinkstrue \highlighthyperlinksfalse \doifelse\@@iasplit\v!yes \locationsplittrue \locationsplitfalse \doifelse\@@iadisplay\v!new \gotonewwindowtrue \gotonewwindowfalse \doifelse\@@iapage\v!yes {\global\usepagedestinationstrue} {\global\usepagedestinationsfalse}% \to \everysetupinteraction %D We have to make sure of some settings: \def\dolocationstartup {\iflocation \dosetupinteraction \handlereferenceactions\@@iaopenaction \dosetupopenaction \handlereferenceactions\@@iacloseaction\dosetupcloseaction \setupinteractionscreens \global\let\dolocationstartup\relax \fi} \appendtoks \dolocationstartup \to \everyshipout \def\dolocationpagecheck % brr pdf dependent {\iflocation \handlereferenceactions\@@iaopenpageaction \dosetupopenpageaction \handlereferenceactions\@@iaclosepageaction\dosetupclosepageaction \fi} \appendtoks \dolocationpagecheck \to \everyshipout %D The next few macros are really horrible. For proper %D navigation a in||line hypertext fragment must have %D comfortable properties, so we must force some minimal %D dimensions. On the other hand button, and here I mean those %D pieces of text with fancy outlines and/or backgrounds, often %D have fixed, preset dimensions. %D %D To make things even worse, if we choose to let the optimal %D dimensions depend on the height and depth of a strut, a not %D too uncommon practice in \TEX, we have to deal with the fact %D that such a strut, set inside a box, is unknown too the %D outside world. %D %D The solution lays in passing the strut characteristics in %D a proper way, in our case by applying \type{\presetgoto}: %D %D \starttyping %D {some piece of text \presetgoto} %D \stoptyping %D %D This macro stores the current strut values. \newif\iflocationstrut \newif\iflocationsplit \def\resetgoto {\globallet\@@ia@@hoogte\!!zeropoint \globallet\@@ia@@diepte\!!zeropoint} \resetgoto \def\presetgoto {\iflocationstrut \setstrut %\xdef\@@ia@@hoogte{\the\strutht}% %\xdef\@@ia@@diepte{\the\strutdp}% \globallet\@@ia@@hoogte\strutheight \globallet\@@ia@@diepte\strutdepth \else \globallet\@@ia@@hoogte\@@iaheight \globallet\@@ia@@diepte\@@iadepth \fi} %D In the macros that deal with making areas into hyperlinks, %D we use: \newbox\driverresources \def\collectdriverresource#1% {\global\setbox\driverresources\hbox{\box\driverresources#1}} \def\flushdriverresources {\ifvoid\driverresources\else\box\driverresources\fi} \def\dohandlegoto#1#2#3% {\ifsecondaryreference \bgroup\setbox0\hbox{#2#3}\egroup \else \hbox {\setbox0\hbox{#1}% \ifdim\wd0<\@@iawidth\relax \buttonwidth\@@iawidth\relax \else \buttonwidth\wd0 \fi \ifdim\ht0<\@@ia@@hoogte\relax \buttonheight\@@ia@@hoogte\relax \else \buttonheight\ht0 \fi \ifdim\dp0<\@@ia@@diepte\relax \dimen0=\@@ia@@diepte\relax % = ! \else \dimen0\dp0 \fi \advance\buttonheight \dimen0 \setbox2\hbox {\lower\dimen0\hbox {\dontcomplain \dimen0=.5\wd0 % direct skipping is faster of course \advance\dimen0 -.5\buttonwidth % buts this is nicer \hskip\dimen0#2#3}}% when visualizing things \naturalhbox % needed for omega / moved from plus-omg {\ifreversegoto \dimen0\wd0\box0\kern-\dimen0\smashbox2\box2\kern\dimen0 \else \smashbox2\box2\box0 \fi \flushdriverresources}% \resetgoto}% \fi} %D The secondary references are processed but not typeset. The %D special driver must collect the data needed. %D The width of the active area depends on the dimensions %D preset, the actual dimens and/or the height and depth of the %D strut. %D %D Normally the hyper active area is laid on top of the text. %D This enables stacking hyperlinks on top of each other. When, %D for some reason the opposite is prefered, one can use the %D next boolean to signal this wish. \newif\ifreversegoto \reversegotofalse %D As long as there a natural feeling of what can be considered %D hyper active or not, we have to tell users where they can %D possibly click. We've already seen a few macros that deal %D with this visualization, something we definitely do not let %D up to the viewer. One way of telling is using a distinctive %D typeface, another way is using color. %D %D There are two colors involved: one for normal hyperlinks, %D and one for those that point to the currentpage, the %D contrast color. \definecolor [interactioncolor] [r=0, g=.6, b=0] \definecolor [interactioncontrastcolor] [r=.8, g=0, b=0] \definecolor [interactiekleur] [interactioncolor] \definecolor [interactiecontrastkleur] [interactioncontrastcolor] %D The next few macros are responsible for highlighting hyper %D links. The first one, \type{\showlocation}, is used in those %D situations where the typeface is handled by the calling %D macro. \def\interactioncolor % todo \??ia as argument {\iflocation \ifrealreferencepage \@@iacontrastcolor \else \@@iacolor \fi \fi} %D CHECK WHERE USED / CONSISTENCY \def\showlocation#1% {\iflocation\color[\@@iacolor]{#1\presetgoto}\else#1\fi} %D When local color settings are to be used, we can use the %D next macro, where \type{#1} is a tag like \type{\??tg} and %D \type{#2} some text. \def\showcoloredlocation#1#2% {\iflocation \color[\getvalue{#1\c!color}]{#2\presetgoto}% \else #2% \fi} %D When we're dealing with pure page references, contrast %D colors are used when we are already at the page mentioned. \def\showcontrastlocation#1#2#3% the \@EA is needed {\iflocation \ifnum#2=\realpageno\relax \doifelsevaluenothing{#1\c!color} {#3\presetgoto} {\color[\getvalue{#1\c!contrastcolor}]{#3\presetgoto}}% \else \color[\getvalue{#1\c!color}]{#3\presetgoto}% \fi \else #3% \fi} %D The next simple macro can be used in color specifications, %D like \type{\color[\locationcolor{green}]}. \def\locationcolor#1% {\iflocation#1\fi} %D More tokens are spend when we want both typeface and color %D highlighting. \def\dolocationattributes#1#2#3#4% {\bgroup \let\fontattribute\empty \let\colorattribute\empty \doifdefined{#1#2}{\def\fontattribute{\getvalue{#1#2}}}% \iflocation \doifdefined{#1#3}{\def\colorattribute{\getvalue{#1#3}}}% \fi \startcolor[\colorattribute]% \@EA\doconvertfont\@EA{\fontattribute}{#4}% no \edef, but \@EA here \stopcolor \egroup} \def\navigating {\dolocationattributes\??ia\c!style\c!color} %D Although not decently supported in current viewers, a %D provisory hiding mechanims is implemented. Areas marked as %D such, are visible on screen, but invisible on paper. Don't %D trust this mechanism yet! \def\dostartinteraction {\bgroup \let\stopinteraction\egroup \dowithnextbox{\dostarthide\flushnextbox\dostophide\egroup}\hbox} \let\startinteraction = \relax \let\stopinteraction = \relax % in the future: % % eerst boolean invoeren bij menu, achtergrond, balk, button % enz; verder startinteractie een argument meegeven {#1} -> % \getvalue{#1\c!print}=={\v!ja} enz. Consequent menubutton % gebruiken! \def\@@iatimestamp {\the\normalyear \ifnum\normalmonth<10 0\fi\the\normalmonth \ifnum\normalday <10 0\fi\the\normalday} % happens in core-fld % % \definereference [AtOpenInitializeForm] [\v!geen] \setupinteraction % start fit page and reset form [\c!state=\v!stop, \c!page=\v!no, \c!click=\v!yes, \c!display=, %\c!openaction={\v!firstpage,AtOpenInitializeForm}, %\c!openaction={\v!firstpage,\v!ResetForm}, %\c!openaction=\v!ResetForm, % too buggy in reader 4.05 \c!openaction=, \c!closeaction=, \c!openpageaction=, \c!closepageaction=, \c!display=\v!normal, \c!focus=\v!fit, \c!menu=\v!off, \c!style=\v!bold, \c!calculate=, \c!strut=\v!yes, \c!split=\v!yes, \c!color=interactioncolor, \c!contrastcolor=interactioncontrastcolor, \c!symbolset=, \c!width=1em, \c!height=\!!zeropoint, \c!depth=\!!zeropoint, \c!title=\jobname, % needed for fdf/x \c!subtitle=, \c!author=, \c!keyword=, \c!date=\@@iatimestamp] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-dir.lua0000644000175000017500000000744612130411274024132 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-dir'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local gsub = string.gsub local formatters = string.formatters -- -- -- -- -- -- -- local lxml, context = lxml, context local getid = lxml.getid lxml.directives = lxml.directives or { } local directives = lxml.directives local report_lxml = logs.reporter("xml","tex") local data = { setup = { }, before = { }, after = { } } local function load_setup(filename) local fullname = resolvers.findtexfile(filename) or "" if fullname ~= "" then filename = fullname end local collection = xml.applylpath({ getid(xml.load(filename)) },"directive") -- is { } needed ? if collection then local valid = 0 for i=1,#collection do local at = collection[i].at local attribute, value, element = at.attribute or "", at.value or "", at.element or '*' local setup, before, after = at.setup or "", at.before or "", at.after or "" if attribute ~= "" and value ~= "" then local key = formatters["%s::%s::%s"](element,attribute,value) local t = data[key] or { } if setup ~= "" then t.setup = setup end if before ~= "" then t.before = before end if after ~= "" then t.after = after end data[key] = t valid = valid + 1 end end report_lxml("%s directives found in %a, valid %s",#collection,filename,valid) else report_lxml("no directives found in %a",filename) end end local function handle_setup(category,root,attribute,element) root = getid(root) if attribute then local value = root.at[attribute] if value then if not element then local ns, tg = root.rn or root.ns, root.tg if ns == "" then element = tg else element = ns .. ':' .. tg end end local setup = data[formatters["%s::%s::%s"](element,attribute,value)] if setup then setup = setup[category] end if setup then context.directsetup(setup) else setup = data[formatters["%s::%s::*"](element,attribute)] if setup then setup = setup[category] end if setup then setup = gsub(setup,'%*',value) context.directsetup(setup) end end end end end directives.load = load_setup directives.handle = handle_setup function directives.setup(root,attribute,element) handle_setup('setup',root,attribute,element) end function directives.before(root,attribute,element) handle_setup('before',root,attribute,element) end function directives.after(root,attribute,element) handle_setup('after',root,attribute,element) end context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-lua.lua0000644000175000017500000000603412130411274024153 0ustar norbertnorbertif not modules then modules = { } end modules ['syst-lua'] = { version = 1.001, comment = "companion to syst-lua.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, find, match, rep = string.format, string.find, string.match, string.rep local tonumber = tonumber local S, lpegmatch, lpegtsplitat = lpeg.S, lpeg.match, lpeg.tsplitat local context = context commands = commands or { } function commands.writestatus(...) logs.status(...) end -- overloaded later local firstoftwoarguments = context.firstoftwoarguments -- context.constructcsonly("firstoftwoarguments" ) local secondoftwoarguments = context.secondoftwoarguments -- context.constructcsonly("secondoftwoarguments") local firstofoneargument = context.firstofoneargument -- context.constructcsonly("firstofoneargument" ) local gobbleoneargument = context.gobbleoneargument -- context.constructcsonly("gobbleoneargument" ) -- contextsprint(prtcatcodes,[[\ui_fo]]) -- firstofonearguments -- contextsprint(prtcatcodes,[[\ui_go]]) -- gobbleonearguments -- contextsprint(prtcatcodes,[[\ui_ft]]) -- firstoftwoarguments -- contextsprint(prtcatcodes,[[\ui_st]]) -- secondoftwoarguments function commands.doifelse(b) if b then firstoftwoarguments() else secondoftwoarguments() end end function commands.doif(b) if b then firstofoneargument() else gobbleoneargument() end end function commands.doifnot(b) if b then gobbleoneargument() else firstofoneargument() end end commands.testcase = commands.doifelse -- obsolete function commands.boolcase(b) context(b and 1 or 0) end function commands.doifelsespaces(str) if find(str,"^ +$") then firstoftwoarguments() else secondoftwoarguments() end end local s = lpegtsplitat(",") local h = { } function commands.doifcommonelse(a,b) -- often the same test local ha = h[a] local hb = h[b] if not ha then ha = lpegmatch(s,a) h[a] = ha end if not hb then hb = lpegmatch(s,b) h[b] = hb end local na = #ha local nb = #hb for i=1,na do for j=1,nb do if ha[i] == hb[j] then firstoftwoarguments() return end end end secondoftwoarguments() end function commands.doifinsetelse(a,b) local hb = h[b] if not hb then hb = lpegmatch(s,b) h[b] = hb end for i=1,#hb do if a == hb[i] then firstoftwoarguments() return end end secondoftwoarguments() end local pattern = lpeg.patterns.validdimen function commands.doifdimenstringelse(str) if lpegmatch(pattern,str) then firstoftwoarguments() else secondoftwoarguments() end end function commands.firstinset(str) local first = match(str,"^([^,]+),") context(first or str) end function commands.ntimes(str,n) context(rep(str,n or 1)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-com.mkiv0000644000175000017500000007071012134352503024256 0ustar norbertnorbert%D \module %D [ file=pack-com, % used to be in core-mis, %D version=20120111, %D title=\CONTEXT\ Packing Macros, %D subtitle=Combinations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Combinations} \unprotect % \startfloatcombination will be redone ... we can decouple the floatcontent % and caption and pass them to combinations so that we get better fit when the % caption is wider than the float, testcase: % % \startfloatcombination [2*2] % \placefigure[local]{alpha}{\externalfigure[cow.pdf][width=1cm]}% % \placefigure[local]{beta} {\externalfigure[cow.pdf][width=2cm]}% % \placefigure[local]{gamma}{\externalfigure[cow.pdf][width=3cm]} % \placefigure[local]{delta}{\externalfigure[cow.pdf][width=4cm]} % \stopfloatcombination %D We could of course map combinations onto one of the table %D mechanisms but as it has served us well for ages we keep %D this one. The code has been cleaned up a bit and mkiv'd. %D %D Okay ... I might luafy this one eventually. % \startcombination {alpha} {a} {beta} {b} \stopcombination % \startcombination[2*1] {alpha} {a} {beta} {b} \stopcombination % \startcombination[1*2] {alpha} {a} {beta} {b} \stopcombination % \startcombination[2] {alpha} {a} {beta} {b} \stopcombination % \startcombination[2] \combination {alpha} {a} \combination{beta} {b} \stopcombination %D We do support some structure but the order matters and currently it's %D only window dressing: %D %D \starttyping %D \let\startcontent\bgroup %D \let\stopcontent \egroup %D \let\startcaption\bgroup %D \let\stopcaption \egroup %D \stoptyping %D %D Of course we should have started with more structure as it would %D simply the code. %D %D \starttyping %D \startcombination %D \startcontent %D \externalfigure[cow] %D \stopcontent %D \startcaption %D Some cow. %D \stopcaption %D \startcontent %D \externalfigure[cow] %D \stopcontent %D \startcaption %D The same cow. %D \stopcaption %D \stopcombination %D \stoptyping \ifdefined\dotagcombination \else \let\dotagcombination\relax \fi \newsystemmode{combination} \appendtoks \global\resetsystemmode{combination}% \to \everyinsidefloat \newcount\c_pack_combinations_x \newcount\c_pack_combinations_n \newcount\c_pack_combinations_max \newbox \b_pack_combinations_captions \newbox \b_pack_combinations_content \newbox \b_pack_combinations_caption \newbox \b_pack_combinations_temp % global \installcorenamespace{combination} \installcommandhandler \??combination {combination} \??combination \setfalse\c_strc_constructions_define_commands \definelabel [\v!combination] % handy for configuring [\c!numberconversion=\v!character, \c!text=] \settrue\c_strc_constructions_define_commands \setupcombination [\c!width=\v!fit, \c!height=\v!fit, \c!distance=\emwidth, \c!location=\v!bottom, % can be something {top,left} \c!before=\blank, \c!after=, \c!inbetween={\blank[\v!medium]}, %\c!style=, %\c!color=, \c!nx=2, % new \c!ny=1, % new \c!align=\v!middle] \let\setupcombinations\setupcombination % for the moment (we might distinguish) \installcorenamespace{combinationlocation} \installcorenamespace{combinationalternative} \appendtoks \setfalse\c_strc_constructions_define_commands \normalexpanded {\definelabel [\v!combination:\currentcombination]% [\v!combination\ifx\currentcombinationparent\empty\else:\currentcombinationparent\fi]}% [\s!counter=\currentcombination,\c!levels=1]% \settrue\c_strc_constructions_define_commands \to \everydefinecombination \setvalue{\??combinationlocation\v!left }{\let\m_pack_combinations_leftfiller\relax} \setvalue{\??combinationlocation\v!right }{\let\m_pack_combinations_rightfiller\relax} \setvalue{\??combinationlocation\v!top }{\let\m_pack_combinations_valigner\depthonlybox} \setvalue{\??combinationlocation\v!middle}{\let\m_pack_combinations_valigner\halfwaybox} \def\pack_combinations_location_reset {\let\m_pack_combinations_rightfiller\hfil \let\m_pack_combinations_leftfiller \hfil \let\m_pack_combinations_valigner \firstofoneargument} \pack_combinations_location_reset \def\pack_combinations_location_step#1% {\csname\??combinationlocation#1\endcsname} \unexpanded\def\startcombination {\bgroup % so we can grab a group \dodoubleempty\pack_combinations_start} % formally ok: % % \unexpanded\def\stopcombination % {\egroup % \egroup} % % more robust: % % \unexpanded\def\stopcombination % {{}{}{}{}{}{}{}{}% catches (at most 4) missing entries % \egroup % \egroup} % % even better: % % \unexpanded\def\stopcombination % {\bgroup % \scratchtoks{{}}% % \dorecurse\c_pack_combinations_n % {\scratchtoks\expandafter{\the\scratchtoks{}{}}}% % \expandafter\egroup\the\scratchtoks % \egroup % \dostoptagged % \egroup} % % faster \unexpanded\def\pack_common_content_start{\bgroup\ignorespaces} \unexpanded\def\pack_common_content_stop {\removeunwantedspaces\egroup} \unexpanded\def\pack_common_caption_start{\bgroup\ignorespaces} \unexpanded\def\pack_common_caption_stop {\removeunwantedspaces\egroup} \unexpanded\def\stopcombination {\bgroup\normalexpanded{\egroup{}\ctxcommand{ntimes("{}{}",\number\c_pack_combinations_n)}}% brr \dostoptagged \egroup \egroup} \newtoks\everycombination \def\pack_combinations_start[#1][#2]% needs a cleanup, also nx ny (pretty old, this one) {\global\setsystemmode{combination}% % \edef\currentcombination{#1}% \edef\currentcombinationspec{#2}% \ifx\currentcombinationspec\empty \doifassignmentelse{#1}% {\let\currentcombination\empty \setupcurrentcombination[#1]% \edef\currentcombinationspec{\combinationparameter\c!nx*\combinationparameter\c!ny*}} {\doifinstringelse{*}\currentcombination {\edef\currentcombinationspec{\currentcombination*\plusone*}% \let\currentcombination\empty} {\doifnumberelse\currentcombination {\edef\currentcombinationspec{\currentcombination*\plusone*}% \let\currentcombination\empty} {\edef\currentcombinationspec{\combinationparameter\c!nx*\combinationparameter\c!ny*}}}}% \else \doifassignmentelse{#2}% {\setupcurrentcombination[#2]% \edef\currentcombinationspec{\combinationparameter\c!nx*\combinationparameter\c!ny*}} {\edef\currentcombinationspec{\currentcombinationspec*\plusone*}}% \fi % \forgetall % \the\everycombination % \let\startcontent\pack_common_content_start \let\stopcontent \pack_common_content_stop \let\startcaption\pack_common_caption_start \let\stopcaption \pack_common_caption_stop % \edef\p_height {\combinationparameter\c!height}% \edef\p_width {\combinationparameter\c!width}% \edef\p_location{\combinationparameter\c!location}% \edef\p_align {\combinationparameter\c!align}% \edef\p_distance{\combinationparameter\c!distance}% % \pack_combinations_location_reset \rawprocesscommacommand[\p_location]\pack_combinations_location_step % \dostarttagged\t!combination\currentcombination \vbox \ifx\p_height\v!fit\else to \p_height \fi \bgroup \let\combination\empty % permits \combination{}{} handy for cld \normalexpanded{\pack_combinations_start_indeed[\currentcombinationspec]}} \unexpanded\def\pack_combinations_start_indeed[#1*#2*#3]% {\global\c_pack_combinations_x#1\relax \global\c_pack_combinations_n#2\relax \dotagcombination \global\setbox\b_pack_combinations_captions\emptybox \global\c_pack_combinations_max\c_pack_combinations_x \multiply\c_pack_combinations_n\c_pack_combinations_x \tabskip\zeropoint \halign \ifx\p_width\v!fit\else to \p_width \fi \bgroup \aligntab \m_pack_combinations_leftfiller \alignmark\alignmark \m_pack_combinations_rightfiller \aligntab \tabskip\zeropoint \s!plus 1fill \alignmark\alignmark \cr \pack_combinations_pickup} % \def\pack_combinations_pickup_content % we want to add struts but still ignore an empty box % {\dostoptagged % \setbox\b_pack_combinations_content\box\nextbox % \dostarttagged\t!combinationcaption\empty % \dowithnextboxcs\pack_combinations_pickup_caption\vtop\bgroup % \afterassignment\pack_combinations_caption_first % \let\nexttoken=} % I've first considered using a constructor directly but it's more overhead % and some settings conflict with already used combination settings so instead % we plug in labels. This also permits extensions later on. \appendtoks \edef\p_pack_combinations_alternative{\combinationparameter\c!alternative}% \to \everydefinecombination \def\pack_combinations_pickup % we want to add struts but still ignore an empty box {\dostarttagged\t!combinationpair\empty \dostarttagged\t!combinationcontent\empty \dowithnextboxcs\pack_combinations_pickup_content\hbox} \def\pack_combinations_pickup_content % we want to add struts but still ignore an empty box {\dostoptagged \setbox\b_pack_combinations_content\box\nextbox \dostarttagged\t!combinationcaption\empty \expandnamespacemacro\??combinationalternative\p_pack_combinations_alternative\v!text} \setvalue{\??combinationalternative\v!text}% {\dowithnextboxcs\pack_combinations_pickup_caption\vtop\bgroup \afterassignment\pack_combinations_caption_first \let\nexttoken=} \setvalue{\??combinationalternative\v!label}% {\dowithnextboxcs\pack_combinations_pickup_caption\vtop\bgroup \hsize\wd\b_pack_combinations_content \ifx\p_align\empty\else\setupalign[\p_align]\fi \usecombinationstyleandcolor\c!style\c!color % but label style wins, so independent configuration \begstrut \normalexpanded{\strc_labels_command{\v!combination\ifx\currentcombination\empty\else:\currentcombination\fi}}% \endstrut \egroup} \appendtoks \edef\p_pack_combinations_alternative{\combinationparameter\c!alternative}% \ifx\p_pack_combinations_alternative\v!label \edef\p_continue{\combinationparameter\c!continue}% \ifx\p_continue\v!yes \else \normalexpanded{\strc_labels_reset{\v!combination\ifx\currentcombination\empty\else:\currentcombination\fi}{1}}% \fi \fi \to \everycombination \def\pack_combinations_pickup_caption {\dostoptagged \dostoptagged \setbox\b_pack_combinations_caption\box\nextbox \pack_combinations_pickup_package_pair} \def\pack_combinations_caption_first {\futurelet\nexttoken\pack_combinations_caption_second} \def\pack_combinations_caption_second {\ifx\nexttoken\egroup % the caption is empty \else \hsize\wd\b_pack_combinations_content \ifx\p_align\empty\else\setupalign[\p_align]\fi \usecombinationstyleandcolor\c!style\c!color \bgroup \aftergroup\endstrut \aftergroup\egroup \begstrut \fi} \def\pack_combinations_pickup_package_pair % we need to store the caption row {\vbox {\forgetall \m_pack_combinations_valigner{\copy\b_pack_combinations_content}% % we need to save the caption for a next alignment line \pack_combinations_save_caption}% \ifnum\c_pack_combinations_n>\plusone \global\advance\c_pack_combinations_n\minusone \global\advance\c_pack_combinations_x\minusone \ifcase\c_pack_combinations_x \doubleexpandafter\pack_combinations_pickup_package_pair_a \else \doubleexpandafter\pack_combinations_pickup_package_pair_b \fi \else \singleexpandafter\pack_combinations_pickup_package_pair_c \fi} \def\pack_combinations_pickup_package_pair_a {\cr \pack_combinations_flush_captions \noalign {\forgetall \global\setbox\b_pack_combinations_captions\emptybox \nointerlineskip \combinationparameter\c!after \combinationparameter\c!before \vss \nointerlineskip}% \global\c_pack_combinations_x\c_pack_combinations_max \pack_combinations_pickup} \def\pack_combinations_pickup_package_pair_b {\aligntab \aligntab \aligntab \kern\p_distance \aligntab \pack_combinations_pickup} \def\pack_combinations_pickup_package_pair_c {\cr \pack_combinations_flush_captions \egroup} \def\pack_combinations_save_caption {\global\setbox\b_pack_combinations_captions\hbox {\hbox{\box\b_pack_combinations_caption}% \unhbox\b_pack_combinations_captions}} \def\pack_combinations_flush_captions {\noalign {\ifdim\ht\b_pack_combinations_captions>\zeropoint \nointerlineskip % indeed \combinationparameter\c!inbetween \global\c_pack_combinations_x\c_pack_combinations_max \globallet\pack_combinations_flush_captions_indeed\pack_combinations_flush_captions_yes \else \global\setbox\b_pack_combinations_captions\emptybox \globallet\pack_combinations_flush_captions_indeed\pack_combinations_flush_captions_nop \fi}% \pack_combinations_flush_captions_indeed \crcr} \def\pack_combinations_flush_captions_yes {\global\setbox\b_pack_combinations_captions\hbox {\unhbox\b_pack_combinations_captions \global\setbox\b_pack_combinations_temp\lastbox}% \box\b_pack_combinations_temp \global\advance\c_pack_combinations_x\minusone\relax \ifnum\c_pack_combinations_x>\zerocount \expandafter\pack_combinations_flush_captions_yes_followup \else \global\setbox\b_pack_combinations_captions\emptybox \fi} \let\pack_combinations_flush_captions_nop\donothing \def\pack_combinations_flush_captions_yes_followup {\aligntab \aligntab \aligntab \aligntab \pack_combinations_flush_captions_indeed} %D \macros %D {startfloatcombination} %D %D \setupexternalfigures[directory={../sample}] %D \startbuffer %D \placefigure %D [left,none] %D {} %D {\startfloatcombination[2*2] %D \placefigure{alpha}{\externalfigure[cow.pdf][width=1cm]} %D \placefigure{beta} {\externalfigure[cow.pdf][width=2cm]} %D \placefigure{gamma}{\externalfigure[cow.pdf][width=3cm]} %D \placefigure{delta}{\externalfigure[cow.pdf][width=4cm]} %D \stopfloatcombination} %D %D \input tufte %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\startfloatcombination {\dodoubleempty\pack_combinations_start_float} \let\stopfloatcombination\relax \def\pack_combinations_start_float[#1][#2]% {\vbox\bgroup %\insidecolumnstrue % trick, forces no centering, todo: proper switch/feature \postcenterfloatmethod\zerocount \forcelocalfloats \unexpanded\def\stopfloatcombination{\pack_combinations_stop_float{#1}}} \def\pack_combinations_stop_float#1% {\scratchtoks\emptytoks \dorecurse\noflocalfloats {\appendetoks{\noexpand\getlocalfloat{\recurselevel}}{}\to\scratchtoks}% brrr \expanded{\startcombination[#1]\the\scratchtoks}\stopcombination \resetlocalfloats \egroup} %D \macros %D {definepairedbox, setuppairedbox, placepairedbox} %D %D Paired boxes, formally called legends, but from now on a %D legend is just an instance, are primarily meant for %D typesetting some text alongside an illustration. Although %D there is quite some variation possible, the functionality is %D kept simple, if only because in most cases such pairs are %D typeset sober. %D %D The location specification accepts a pair, where the first %D keyword specifies the arrangement, and the second one the %D alignment. The first key of the location pair is one of %D \type {left}, \type {right}, \type {top} or \type {bottom}, %D while the second key can also be \type {middle}. %D %D The first box is just collected in an horizontal box, but %D the second one is a vertical box that gets passed the %D bodyfont and alignment settings. %D In many cases the table builders can be used instead, but as %D this mechanism is a traditional \CONTEXT\ one we keep it %D around. %D \macros %D {setuplegend, placelegend} %D %D It makes sense to typeset a legend to a figure in \TEX\ %D and not in a drawing package. The macro \type {\placelegend} %D combines a figure (or something else) and its legend. This %D command is just a paired box. %D %D The legend is placed according to \type {location}, being %D \type {bottom} or \type {right}. The macro macro is used as %D follows. %D %D \starttyping %D \placefigure %D {whow} %D {\placelegend %D {\externalfigure[cow]} %D {\starttabulate %D \NC 1 \NC head \NC \NR %D \NC 2 \NC legs \NC \NR %D \NC 3 \NC tail \NC \NR %D \stoptabulate}} %D %D \placefigure %D {whow} %D {\placelegend %D {\externalfigure[cow]} %D {\starttabulate[|l|l|l|l|] %D \NC 1 \NC head \NC 3 \NC tail \NC \NR %D \NC 2 \NC legs \NC \NC \NC \NR %D \stoptabulate}} %D %D \placefigure %D {whow} %D {\placelegend[n=2] %D {\externalfigure[cow]} %D {\starttabulate %D \NC 1 \NC head \NC \NR %D \NC 2 \NC legs \NC \NR %D \NC 3 \NC tail \NC \NR %D \stoptabulate}} %D %D \placefigure %D {whow} %D {\placelegend[n=2] %D {\externalfigure[cow]} %D {head \par legs \par tail}} %D %D \placefigure %D {whow} %D {\placelegend[n=2] %D {\externalfigure[cow]} %D {\startitemize[packed] %D \item head \item legs \item tail \item belly \item horns %D \stopitemize}} %D %D \placefigure %D {whow} %D {\placelegend[n=2,width=.8\hsize] %D {\externalfigure[cow]} %D {\startitemize[packed] %D \item head \item legs \item tail \item belly \item horns %D \stopitemize}} %D %D \def\MytTestTwo#1#2% %D {\placefigure %D {whow} %D {\placelegend[location={#1,#2}] %D {\externalfigure[cow]} %D {\starttabulate %D \NC 1 \NC head \NC \NR %D \NC 2 \NC legs \NC \NR %D \NC 3 \NC tail \NC \NR %D \stoptabulate}}} %D %D \def\MytTestOne#1{\processcommalist[left,right,top,bottom]{\MytTestTwo{#1}}} %D %D \processcommalist[left,right,top,bottom,middle]\MytTestOne %D \stoptyping %D %D More structure is also possible (the order matters!): %D %D \starttyping %D \startplacefigure[title=whow] %D \startplacelegend[location={bottom,middle},color=red] %D \startcontent %D \externalfigure[cow] %D \stopcontent %D \startcaption %D \starttabulate[|l|l|] %D \NC 1 \NC head \NC \NR %D \NC 2 \NC legs \NC \NR %D \NC 3 \NC tail \NC \NR %D \stoptabulate %D \stopcaption %D \stopplacelegend %D \stopplacefigure %D \stoptyping % todo: natural size \newsystemmode{pairedbox} \appendtoks \global\resetsystemmode{pairedbox}% \to \everyinsidefloat \installcorenamespace {pairedbox} \installcommandhandler \??pairedbox {pairedbox} \??pairedbox \setuppairedbox [\c!n=1, \c!distance=\bodyfontsize, %\c!before=, %\c!after=, %\c!color=, %\c!style=, \c!inbetween={\blank[\v!medium]}, \c!width=\hsize, \c!height=\vsize, \c!maxwidth=\textwidth, % \makeupwidth, \c!maxheight=\textheight, % \makeupheight, %\c!bodyfont=, %\c!align=, \c!location=\v!bottom] % watch the hsize/vsize tricks \newbox \b_pack_pairedboxes_first \newbox \b_pack_pairedboxes_second \newdimen\s_pack_pairedboxes_size \appendtoks \setuevalue{\e!setup\currentpairedbox\e!endsetup}{\setuppairedbox [\currentpairedbox]}% \setuevalue{\e!place\currentpairedbox }{\placepairedbox [\currentpairedbox]}% one argument is mandate anyway \setuevalue{\e!start\e!place\currentpairedbox }{\startplacepairedbox[\currentpairedbox]}% one argument is mandate anyway \setuevalue{\e!stop\e!place \currentpairedbox }{\stopplacepairedbox }% \to \everydefinepairedbox \unexpanded\def\placepairedbox[#1]% {\bgroup \edef\currentpairedbox{#1}% \doifnextoptionalelse\pack_pairedboxes_place\pack_pairedboxes_place_indeed} \unexpanded\def\startplacepairedbox[#1]% {\bgroup \edef\currentpairedbox{#1}% \doifnextoptionalelse\pack_pairedboxes_place\pack_pairedboxes_place_indeed} \unexpanded\def\stopplacepairedbox {} \def\pack_pairedboxes_place[#1]% {\setupcurrentpairedbox[#1]% \pack_pairedboxes_place_indeed} \def\pack_pairedboxes_place_indeed {\pairedboxparameter\c!before \bgroup \edef\p_location{\pairedboxparameter\c!location}% \edef\p_n {\pairedboxparameter\c!n}% % \let\startcontent\pack_common_content_start \let\stopcontent \pack_common_content_stop \let\startcaption\pack_common_caption_start \let\stopcaption \pack_common_caption_stop % \global\setsystemmode{pairedbox}% \pack_pairedboxes_before \dogotopar\pack_pairedboxes_first_pickup} \def\pack_pairedboxes_first_pickup {\dowithnextboxcs\pack_pairedboxes_first\hbox \bgroup \let\next=} \def\pack_pairedboxes_first {\pack_pairedboxes_between \dogotopar\pack_pairedboxes_second_pickup} \def\pack_pairedboxes_second_pickup {\dowithnextboxcs\pack_pairedboxes_second\vbox \bgroup \pack_pairedboxes_inside_second \let\next=} \def\pack_pairedboxes_second {\pack_pairedboxes_after \egroup \pairedboxparameter\c!after \egroup} \newconditional\c_pack_pairedboxes_horizontal \settrue\c_pack_pairedboxes_horizontal \installcorenamespace{pairedboxnature} \installcorenamespace{pairedboxalign} \let\pack_pairedboxes_fill_top \relax \let\pack_pairedboxes_fill_bottom\relax \setvalue{\??pairedboxnature\v!left}% {\settrue\c_pack_pairedboxes_horizontal \let\pack_pairedboxes_flush\pack_pairedboxes_flush_left} \setvalue{\??pairedboxnature\v!right}% {\settrue\c_pack_pairedboxes_horizontal \let\pack_pairedboxes_flush\pack_pairedboxes_flush_right} \setvalue{\??pairedboxnature\v!top}% {\setfalse\c_pack_pairedboxes_horizontal \let\pack_pairedboxes_fill_top\relax \let\pack_pairedboxes_fill_bottom\vss \let\pack_pairedboxes_flush\pack_pairedboxes_flush_top} \setvalue{\??pairedboxnature\v!bottom}% {\setfalse\c_pack_pairedboxes_horizontal \let\pack_pairedboxes_fill_top\vss \let\pack_pairedboxes_fill_bottom\relax \let\pack_pairedboxes_flush\pack_pairedboxes_flush_bottom} \def\pack_pairedboxes_flush_left {\box\b_pack_pairedboxes_second \kern\pairedboxparameter\c!distance \box\b_pack_pairedboxes_first} \def\pack_pairedboxes_flush_right {\box\b_pack_pairedboxes_first \kern\pairedboxparameter\c!distance \box\b_pack_pairedboxes_second} \def\pack_pairedboxes_flush_top {\box\b_pack_pairedboxes_second \endgraf \nointerlineskip \pairedboxparameter\c!inbetween \box\b_pack_pairedboxes_first} \def\pack_pairedboxes_flush_bottom {\box\b_pack_pairedboxes_first \endgraf \nointerlineskip \pairedboxparameter\c!inbetween \box\b_pack_pairedboxes_second} \setvalue{\??pairedboxalign \v!left}% 0 {\let\pack_pairedboxes_align_l\relax \let\pack_pairedboxes_align_r\hss \let\pack_pairedboxes_align_t\relax \let\pack_pairedboxes_align_b\relax} \setvalue{\??pairedboxalign \v!right}% 1 {\let\pack_pairedboxes_align_l\hss \let\pack_pairedboxes_align_r\relax \let\pack_pairedboxes_align_t\relax \let\pack_pairedboxes_align_b\relax} \setvalue{\??pairedboxalign \v!high}% 2 {\let\pack_pairedboxes_align_l\relax \let\pack_pairedboxes_align_r\relax \let\pack_pairedboxes_align_t\relax \let\pack_pairedboxes_align_b\vss} \setvalue{\??pairedboxalign \v!low}% 3 {\let\pack_pairedboxes_align_l\relax \let\pack_pairedboxes_align_r\relax \let\pack_pairedboxes_align_t\vss \let\pack_pairedboxes_align_b\relax} \setvalue{\??pairedboxalign\v!middle}% 4 {\let\pack_pairedboxes_align_l\hss \let\pack_pairedboxes_align_r\hss \let\pack_pairedboxes_align_t\vss \let\pack_pairedboxes_align_b\vss} \setvalue{\??pairedboxalign\v!bottom}{\getvalue{\??pairedboxalign\v!low }} \setvalue{\??pairedboxalign \v!top}{\getvalue{\??pairedboxalign\v!high}} \def\pack_pairedbox_valign#1{\setbox#1\vbox to \s_pack_pairedboxes_size{\pack_pairedboxes_align_t\box#1\pack_pairedboxes_align_b}} \def\pack_pairedbox_halign#1{\setbox#1\hbox to \s_pack_pairedboxes_size{\pack_pairedboxes_align_l\box#1\pack_pairedboxes_align_r}} \def\pack_pairedboxes_before {\ifx\p_location\empty \csname\??pairedboxnature\v!left \endcsname \csname\??pairedboxalign \v!middle\endcsname \else \getfromcommacommand[\p_location][1]% \csname\??pairedboxnature \ifcsname\??pairedboxnature\commalistelement\endcsname\commalistelement\else\v!left\fi \endcsname \getfromcommacommand[\p_location][2]% \csname\??pairedboxalign \ifcsname\??pairedboxalign\commalistelement\endcsname\commalistelement\else\v!middle\fi \endcsname \fi} \def\pack_pairedboxes_between {\switchtobodyfont[\pairedboxparameter\c!bodyfont]% split under same regime \setbox\b_pack_pairedboxes_first\box\nextbox \ifconditional\c_pack_pairedboxes_horizontal \pack_pairedboxes_between_horizontal \else \pack_pairedboxes_between_vertical \fi \ifnum\p_n>\plusone \setrigidcolumnhsize\hsize{\pairedboxparameter\c!distance}\p_n \fi} \def\pack_pairedboxes_between_horizontal {\hsize\wd\b_pack_pairedboxes_first % trick \hsize\pairedboxparameter\c!width % can be \hsize \scratchdimen\dimexpr\wd\b_pack_pairedboxes_first+\pairedboxparameter\c!distance\relax \ifdim\dimexpr\hsize+\scratchdimen\relax>\pairedboxparameter\c!maxwidth\relax \hsize\dimexpr\pairedboxparameter\c!maxwidth-\scratchdimen\relax \fi} \def\pack_pairedboxes_between_vertical {\hsize\wd\b_pack_pairedboxes_first \hsize\pairedboxparameter\c!width % can be \hsize \ifdim\hsize>\pairedboxparameter\c!maxwidth\relax \hsize\pairedboxparameter\c!maxwidth % can be \hsize \fi} \def\pack_pairedboxes_after {\setbox\b_pack_pairedboxes_second\vbox {\ifnum\p_n>\plusone \rigidcolumnbalance\nextbox \else \box\nextbox \fi}% \ifconditional\c_pack_pairedboxes_horizontal \pack_pairedboxes_pack_horizontal \else \pack_pairedboxes_pack_vertical \fi} \def\pack_pairedboxes_pack_horizontal {\hbox\bgroup \forgetall \s_pack_pairedboxes_size\ht \ifdim\ht\b_pack_pairedboxes_first>\ht\b_pack_pairedboxes_second \b_pack_pairedboxes_first \else \b_pack_pairedboxes_second \fi \vsize\s_pack_pairedboxes_size \ifdim\s_pack_pairedboxes_size<\pairedboxparameter\c!height\relax % can be \vsize \s_pack_pairedboxes_size\pairedboxparameter\c!height \fi \ifdim\s_pack_pairedboxes_size>\pairedboxparameter\c!maxheight\relax \s_pack_pairedboxes_size\pairedboxparameter\c!maxheight \fi \pack_pairedbox_valign\b_pack_pairedboxes_first \pack_pairedbox_valign\b_pack_pairedboxes_second \pack_pairedboxes_flush \egroup} \def\pack_pairedboxes_pack_vertical {\vbox\bgroup \forgetall \s_pack_pairedboxes_size\wd \ifdim\wd\b_pack_pairedboxes_first>\wd\b_pack_pairedboxes_second \b_pack_pairedboxes_first \else \b_pack_pairedboxes_second \fi \pack_pairedbox_halign\b_pack_pairedboxes_first \pack_pairedbox_halign\b_pack_pairedboxes_second \s_pack_pairedboxes_size\ht\b_pack_pairedboxes_second \vsize\s_pack_pairedboxes_size \ifdim\ht\b_pack_pairedboxes_second<\pairedboxparameter\c!height\relax % can be \vsize \s_pack_pairedboxes_size\pairedboxparameter\c!height\relax % \relax needed \fi \ifdim\s_pack_pairedboxes_size>\pairedboxparameter\c!maxheight\relax % todo: totale hoogte \s_pack_pairedboxes_size\pairedboxparameter\c!maxheight\relax % \relax needed \fi \ifdim\s_pack_pairedboxes_size>\ht\b_pack_pairedboxes_second \setbox\b_pack_pairedboxes_second\vbox to \s_pack_pairedboxes_size {\pack_pairedboxes_fill_top \box\b_pack_pairedboxes_second \pack_pairedboxes_fill_bottom}% \kern\zeropoint \fi \pack_pairedboxes_flush \egroup} \def\pack_pairedboxes_inside_second {\forgetall \setupalign[\pairedboxparameter\c!align]% \usepairedboxstyleandcolor\c!style\c!color \tolerantTABLEbreaktrue % hm. \blank[\v!disable]% use fast one \everypar{\begstrut}} % also flushers here (see bTABLE) \definepairedbox[\v!legend] \unexpanded\def\placeontopofeachother{\bgroup\dowithnextboxcs\pack_topofeachother_one\hbox} \unexpanded\def\placesidebyside {\bgroup\dowithnextboxcs\pack_sidebyside_one \hbox} \def\pack_topofeachother_one{\bgroup\setbox0\box\nextbox\dowithnextboxcs\pack_topofeachother_two\hbox} \def\pack_sidebyside_one {\bgroup\setbox0\box\nextbox\dowithnextboxcs\pack_sidebyside_two \hbox} \def\pack_topofeachother_two{\setbox2\box\nextbox\halign{\hss##\hss\cr\box0\cr\box2\cr}\egroup\egroup} \def\pack_sidebyside_two {\setbox2\box\nextbox\valign{\vss##\vss\cr\box0\cr\box2\cr}\egroup\egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-01.mkii0000644000175000017500000003301111754241457024030 0ustar norbertnorbert%D \module %D [ file=x-fig-01, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 See \type {x-fig-00.tex} and \type {x-fig-04.tex} for more %D information on how to use and generate figure databases. %D This file loads the file named \type {\jobfilename} %D (\TEXEXEC\ will set this variable). You can apply this %D style to a database by saying: %D %D \starttyping %D texexec --pdf --use=fig-make yourfile.xml %D \stoptyping %D %D The following modes are supported: %D %D \starttabulate[|lT|l|] %D \NC letter \NC map the preview on letter size \NC \NR %D \NC compact \NC use an alternative presentation \NC \NR %D \NC clipgrid-distance \NC add a copy with grid overlayed \NC \NR %D \NC clipgrid-steps \NC add a copy with grid overlayed \NC \NR %D \NC previewpage-A4 \NC show graphic relative to A4 \NC \NR %D \NC previewpage-letter \NC show graphic relative to letter \NC \NR %D \NC previewpage-S6 \NC show graphic relative to S6 \NC \NR %D \stoptabulate %D %D The resulting file has the following characteristics: %D %D \startitemize[packed] %D \item the document is split into three sections: first each %D figure is shown at its own page, then an overview of %D figures is shown with some data alongside, and %D finally an index and table of contents shows up %D \item there is no title page, which means that one can %D access a figure by page number without offset %D \item the document is opened at the first overview page, %D that is, when the viewer supports it %D \item the graphic is shown 3~times: on a page of its own, %D scaled to a fixed dimension, and relative to a4 or %D letter paper size %D \item the labels can be accessed in an index and list at %D the end of the document %D \stopitemize %D %D We use named destinations, which means that one can %D access a figure by name from an external application. \usemodule[res-00] \autoXMLnamespace[rl] \setupoutput[pdftex] \overcomePDFspacefalse \setjobfullname {xml} % default suffix \doifnothing {\jobfullname} {\end} \doiffileelse {\jobfullname} {} {\end} \definesymbol [attachment] [{\bf\color[darkred]{\jobname.xml}}] \setupattachments [symbol=attachment] \useattachment [datafile] [\jobname.xml] \def\StartDescription {\bgroup} \def\StopDescription {\subject {Figure collection} \starttabulate[|lBe|p|] \doifXMLdataelse{rl:organization} {\NC organization \NC \XMLflush{rl:organization} \NC \NR}{} \doifXMLdataelse{rl:project} {\NC project \NC \XMLflush{rl:project} \NC \NR}{} \doifXMLdataelse{rl:product} {\NC product \NC \XMLflush{rl:product} \NC \NR}{} \doifXMLdataelse{rl:comment} {\NC comment \NC \XMLflush{rl:comment} \NC \NR}{} \NC specification \NC \attachment[datafile] \NC \NR \stoptabulate \blank[2*big] \egroup} \def\localexternalfigurereplacement#1#2#3% hack, no reuse of dummies (yet), todo: pass objname {\doifelsenothing{\XMLflush{rl:label}} {\edef\FigureName{\XMLflush{rl:label}}} {\edef\FigureName{\XMLflush{rl:file}}}% \doifobjectfoundelse{rl}\FigureName {} {\setobject{rl}\FigureName\vbox{\normalexternalfigurereplacement{#1}{#2}{#3}}}% \getobject{rl}\FigureName} \startmode[dummy] \useMPlibrary[dum] \def\StartFigureA {\bgroup \XMLassign{rl:file}{dummy}} \let\normalexternalfigurereplacement\externalfigurereplacement \let\externalfigurereplacement \localexternalfigurereplacement \stopmode \startnotmode[dummy] \def\StartFigureA {\bgroup \XMLassign{rl:file}{unknown}} \stopnotmode \startbuffer[unknown] \framed [width=\XMLpar{rl:dummy}{width}{12cm}, height=\XMLpar{rl:dummy}{height}{8cm}, background=color, backgroundcolor=gray, foregroundcolor=darkred, align={lohi,middle}, % normal, frame=off] {\bf \XMLflush{rl:dummy}} \stopbuffer \useexternalfigure[unknown][unknown][type=buffer,object=no] \defineoverlay[page][\overlaybutton{Description}] % \def\externalfigurereplacement#1#2#3% % {\getbuffer[rl-unknown]} \def\StopFigureA {\doglobal\increment\CurrentPage \setupbackgrounds[page][background=page] \doifelsenothing{\XMLflush{rl:label}} {\expanded{\definereference[Description][about:\XMLflush{rl:file}]}% \expanded{\pagereference[\XMLflush{rl:file}]}} {\expanded{\definereference[Description][about:\XMLflush{rl:label}]}% \expanded{\pagereference[\XMLflush{rl:label}]}} \pagefigure[\XMLflush{rl:file}] \setupbackgrounds[page][background=] \egroup} \def\StartFigureB {\StartFigureA} \defineregister [figureindex] [figureindices] \setupregister [figureindex] [ownnumber=yes, criterium=text, interaction=text, indicator=no] \definelist [figurelist] \setuplist [figurelist] [criterium=text, pagenumber=no, width=2em, interaction=all] \setupcolors [state=start] \setuptolerance [verytolerant] % Ulgy: \startmode[letter] % downward compatible \enablemode[previewpage-letter] \stopmode \startnotmode[previewpage-letter,previewpage-S6] \enablemode[previewpage-A4] \stopnotmode \startsetups[paper] \startmode[previewpage-A4] \framed [width=210mm,height=297mm,offset=overlay,frame=off, background=color,backgroundcolor=white] {\externalfigure[\XMLflush{rl:file}][reset=yes]} \stopmode \startmode[previewpage-letter] \framed [width=8.5in,height=11in,offset=overlay,frame=off, background=color,backgroundcolor=white] {\externalfigure[\XMLflush{rl:file}][reset=yes]} \stopmode \startmode[previewpage-S6] \framed [width=600pt,height=450pt,offset=overlay,frame=off, background=color,backgroundcolor=white] {\externalfigure[\XMLflush{rl:file}][reset=yes]} \stopmode \stopsetups \setupbuttons [offset=10pt, width=broad, strut=no, rulethickness=1pt, framecolor=darkred] \definecolor[XMLRLcolor][white] \def\StopFigureB {\doglobal\increment\CurrentPage \doifelsenothing{\XMLflush{rl:label}} {\expanded{\definereference[Figure][\XMLflush{rl:file}]}% \expanded{\definereference[GridPg][grid:\XMLflush{rl:file}]}} {\expanded{\definereference[Figure][\XMLflush{rl:label}]}% \expanded{\definereference[GridPg][grid:\XMLflush{rl:label}]}}% \button {\hbox to \hsize {\forgetall \dontcomplain \doifelsenothing{\XMLflush{rl:label}} {\expanded{\pagereference[about:\XMLflush{rl:file}]}} {\expanded{\pagereference[about:\XMLflush{rl:label}]}}% % moved here, because descriptions may be absent \ifnum\CurrentPage=1 \pagereference[begin]\fi % \expanded{\writetolist[figurelist]{\CurrentPage}{\XMLflush{rl:label}}}% \expanded{\figureindex{\CurrentPage}{\XMLflush{rl:label}}}% \startnotmode[compact]% \vbox to 100pt {\hsize30pt \vskip5pt \hbox to \hsize{\hss\strut\bf\CurrentPage\hss}% \vfill}% \advance\hsize by -30pt \stopnotmode \startmode[compact]% \advance\hsize by -10pt \hskip10pt \stopmode \button % \framed [width=150pt,height=100pt,offset=10pt,frame=off, background=color,backgroundcolor=white,color=] {\externalfigure [\XMLflush{rl:file}] %[maxheight=80pt,frame=off,maxwidth=130pt,factor=max]}% [factor=max]}% [GridPg]% \let\FigWid\figurenaturalwidth \let\FigHei\figurenaturalheight \advance\hsize by -150pt \hskip10pt \advance\hsize by -10pt \vbox to 100pt {\hsize40pt %\externalfigure % [paper] % [type=buffer,frame=on, % framecolor=darkred,rulethickness=.5pt, % width=40pt,object=no] \framed [offset=overlay, framecolor=darkred, rulethickness=.5pt] {\scale[width=40pt]{\setups[paper]}}% \startmode[compact]% \vfill \hbox to \hsize{\hss\strut\bf\CurrentPage\hss}% \stopmode \vfill}% \advance\hsize by -40pt \hskip10pt \advance\hsize by -10pt \vbox to 100pt {\blank[disable] \starttabulate[|Bel|p|] \NC file \NC \XMLflush{rl:file} \NC \NR \doifXMLdata{rl:label} {\NC label \NC \XMLflush{rl:label} \NC \NR} \NC w$\times$h \NC \FigWid$\times$\FigHei \NC \NR \doifXMLdata{rl:copyright} {\NC copyright \NC \XMLflush{rl:copyright} \NC \NR} \doifXMLdata{rl:status} {\doifelse{\XMLflush{rl:status}}{obsolete} {\NC status \NC \dontleavehmode \color[darkred]{\bf\XMLflush{rl:status}} \NC \NR} {\NC status \NC \XMLflush{rl:status} \NC \NR}} \doifXMLdata{rl:comment} {\NC comment \NC \XMLflush{rl:comment} \NC \NR} \stoptabulate \vfill}}}% [Figure] \vskip10pt \egroup} \def\StartFigureC {\StartFigureA} \def\StopFigureC {\doglobal\increment\NumberOfFigures \egroup} \setuplayout [topspace=15pt,backspace=15pt, header=0pt,footer=0pt,bottom=20pt,bottomdistance=10pt, width=middle,height=fit] \setupbackgrounds [page] [background=, backgroundcolor=gray] \setupinteractionscreen [width=max, height=max] \setupcolors [state=start] \setupinteraction [style=, color=, contrastcolor=, state=start] \setuphead [section] [style=bfb] % \setupbodyfont % [pos] \setupinteractionmenu [bottom] [left=\hfill, middle=\hskip10pt, frame=off, style=bold, background=color, backgroundcolor=darkred, foregroundcolor=white] \startinteractionmenu[bottom] \but [begin] begin \\ \but [index] index \\ \but [list] list \\ \but [CloseDocument] close \\ \but [PreviousJump] go back \\ \stopinteractionmenu \setupinteraction [openaction=begin] \defineXMLenvironment [rl:figurelibrary] \StartLibrary \StopLibrary \defineXMLenvironment [rl:library] \StartLibrary \StopLibrary \starttext \def\StartLibrary{\mainlanguage[\XMLpar{rl:library}{language}{en}]} \def\StopLibrary {} \defineXMLignore [rl:description] \defineXMLenvironment [rl:figure] \StartFigureC \StopFigureC \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfullname} \increment\NumberOfFigures \defineXMLignore [rl:description] \defineXMLenvironment [rl:figure] \StartFigureA \StopFigureA \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfullname} \setuppapersize [S6][S6] \setupbackgrounds [page] [background=color] \setupinteraction [menu=on] \defineXMLenvironment [rl:description] \StartDescription \StopDescription \defineXMLenvironment [rl:figure] \StartFigureB \StopFigureB \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfullname} \page \subject [list] {List of figures} \placelist[figurelist] \page \subject [index] {Index of figures} \startcolumns \placeregister[figureindex] \stopcolumns \doifmodeelse{clipgrid-distance,clipgrid-steps}{\page}{\stoptext} \startuniqueMPgraphic{clipgrid}{dx,dy,nx,ny,type} numeric gdx, gdy, lbx, lby ; if \MPvar{type}=1 : gdx := \MPvar{dy} ; gdy := \MPvar{dx} ; else : gdx := OverlayWidth /\MPvar{nx} ; gdy := OverlayHeight/\MPvar{ny} ; fi ; lbx := gdx ; lby := gdy ; defaultfont := "\truefontname{Mono}" ; defaultscale := .5 ; numeric pen ; pen := .25pt ; def MyGrid text t = draw vlingrid (0,OverlayWidth ,gdy,OverlayWidth ,OverlayHeight) t ; draw hlingrid (0,OverlayHeight,gdx,OverlayHeight,OverlayWidth ) t ; enddef ; pickup pencircle scaled pen ; MyGrid withcolor white ; MyGrid dashed evenly scaled pen ; draw OverlayBox withcolor white ; draw OverlayBox dashed evenly scaled pen ; draw vlinlabel.bot(0,eps+OverlayWidth /lby,2,OverlayWidth ) ; draw hlinlabel.lft(0,eps+OverlayHeight/lbx,2,OverlayHeight) ; setbounds currentpicture to OverlayBox enlarged (2*EmWidth) ; \stopuniqueMPgraphic \presetMPvariable[clipgrid][dx=10pt] \presetMPvariable[clipgrid][dy=10pt] \presetMPvariable[clipgrid][nx=10] \presetMPvariable[clipgrid][ny=10] \startmode[clipgrid-distance] \defineoverlay[grid][\uniqueMPgraphic{clipgrid}{type=1}] \stopmode \startmode[clipgrid-steps] \defineoverlay[grid][\uniqueMPgraphic{clipgrid}{type=2}] \stopmode \setupexternalfigures [background={color,foreground,grid}, backgroundcolor=white] \def\StartFigureD {\StartFigureA} \def\StopFigureD {\doglobal\increment\CurrentPage \setupbackgrounds[page][background=page] \startpagefigure[\XMLflush{rl:file}][offset=20pt]% \doifelsenothing{\XMLflush{rl:label}} {\expanded{\definereference[Description][about:\XMLflush{rl:file}]}% \expanded{\pagereference[grid:\XMLflush{rl:file}]}} {\expanded{\definereference[Description][about:\XMLflush{rl:label}]}% \expanded{\pagereference[grid:\XMLflush{rl:label}]}} \stoppagefigure %\pagefigure[\XMLflush{rl:file}][offset=20pt] \setupbackgrounds[page][background=] \egroup} \defineXMLignore [rl:description] \defineXMLenvironment [rl:figure] \StartFigureD \StopFigureD \doglobal\newcounter\CurrentPage \processXMLfilegrouped{\jobfullname} \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-fea.mkvi0000644000175000017500000003240412130411274024256 0ustar norbertnorbert%D \module %D [ file=font-sty, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=features, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Features} \unprotect %D Feature management. %D %D \starttyping %D \definefontfeature[smallcaps][smcp=yes,script=latn] %D \definefontfeature[smallcaps][SmallCapitals=yes,script=latn] %D \definefontfeature[smallcaps][Small Capitals=yes,script=latn] %D \definefontfeature[smallcaps][small capitals=yes,script=latn] %D \definefontfeature[smallcaps][smallcapitals=yes,script=latn] %D %D \definedfont[cambria*smallcaps] test %D %D \starttext %D \definefontfeature[basekerned][default][mode=base] %D \definefontfeature[nodekerned][default][mode=node] %D \definefontfeature[nonekerned][default][mode=base,kern=no] %D \setupcolors[state=start] %D \startoverlay %D {\vbox{\red \definedfont[Serif*nonekerned at 12pt]\input tufte }} %D {\vbox{\blue \definedfont[Serif*basekerned at 12pt]\input tufte }} %D {\vbox{\green\definedfont[Serif*nodekerned at 12pt]\input tufte }} %D \stopoverlay %D \stoptext %D %D \enabletrackers[otf.kerns] %D %D \definefontfeature[withkern][default][mode=node] %D \definefontfeature[nokern] [default][mode=node,kern=no] %D \definefontfeature[single] [default][mode=node,cpsp=yes] %D \definefontfeature[simple] [default][mode=node,cpsp=yes,kern=no] %D %D {\definedfont[Serif*default] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} %D {\definedfont[Serif*nokern] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} %D {\definedfont[Serif*single] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} %D {\definedfont[Serif*simple] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} %D \stoptyping % \definefontfeature[slanted] [default][slant=.25] % \definefontfeature[stretched][default][stretch=2] % % \start \definedfont[SerifBold*slanted at 20pt] \ruledhbox{Test!} \stop % \start \definedfont[SerifBold*stretched at 20pt] \ruledhbox{Test!} \stop % % \definefontfeature[default] [liga=yes,texligatures=yes,texquotes=yes] % \definefontfeature[default-caps][liga=yes,texligatures=yes,texquotes=yes,smcp=yes,script=latn] % % \starttypescript [serif] [palatino-nova-regular] [name] % \definefontsynonym[Serif] [palatinonova-regular][features=default] % \definefontsynonym[SerifCaps][palatinonova-regular][features=default-caps] % also sets Serif % \stoptypescript % % \starttypescript [serif] [palatino-nova-regular] [name] % \definefontsynonym[Serif] [palatinonova-regular*default] % \definefontsynonym[SerifCaps] [palatinonova-regular*default-caps] % \stoptypescript % % \definetypeface[mainface][rm][serif][palatino-nova-regular][default] \setupbodyfont[mainface] % % \starttext % ``Test'' -- --- ff fi fl \sc ``Test'' -- --- ff fi fl % \stoptext % % \definefontfeature % [default-base] % [script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes] % \definefontfeature % [default-node] % [script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes,mode=node] % \definefontfeature % [default-none] % [script=latn,language=dflt,liga=yes,kern=no, tlig=yes,trep=yes] % % \startoverlay % {\vtop{\color[red] {\font\test=name:lmroman12regular*default-node \test \input ward \input zapf \input linden }}} % {\vtop{\color[green]{\font\test=name:lmroman12regular*default-base \test \input ward \input zapf \input linden }}} % {\vtop{\color[blue] {\font\test=name:lmroman12regular*default-none \test \input ward \input zapf \input linden }}} % \stopoverlay % % \blank % % \startoverlay % {\vtop{\color[red] {\font\test=name:texgyrepagella*default-node \test \input ward \input zapf \input linden }}} % {\vtop{\color[green]{\font\test=name:texgyrepagella*default-base \test \input ward \input zapf \input linden }}} % {\vtop{\color[blue] {\font\test=name:texgyrepagella*default-none \test \input ward \input zapf \input linden }}} % \stopoverlay % % \blank % % \startoverlay % {\vtop{\color[red] {\font\test=name:palatinonovaregular*default-node \test \input ward \input zapf \input linden }}} % {\vtop{\color[green]{\font\test=name:palatinonovaregular*default-base \test \input ward \input zapf \input linden }}} % {\vtop{\color[blue] {\font\test=name:palatinonovaregular*default-none \test \input ward \input zapf \input linden }}} % \stopoverlay % % \startoverlay % {\vtop{\color[red] {\font\test=name:OfficinaSerifBookITC*default-node \test \input ward \input zapf \input linden }}} % {\vtop{\color[green]{\font\test=name:OfficinaSerifBookITC*default-base \test \input ward \input zapf \input linden }}} % {\vtop{\color[blue] {\font\test=name:OfficinaSerifBookITC*default-none \test \input ward \input zapf \input linden }}} % \stopoverlay % % \definefontfeature[superdefault][default][compose=yes] % % {\font\oeps=name:lmroman10regular*default at 30pt \oeps test \char7683} % {\font\oeps=name:lmroman10regular*superdefault at 30pt \oeps test \char7683} \unexpanded\def\definefontfeature {\dotripleargument\font_basics_define_font_feature} \def\font_basics_define_font_feature[#featureset][#parent][#settings]% {\ctxcommand{definefontfeature("#featureset","#parent","#settings")}} \unexpanded\def\fontfeatureslist {\dodoubleargument\font_basics_features_list} \def\font_basics_features_list[#name][#separator]% todo: arg voor type {\cldcommand{featurelist("#name","otf","\luaescapestring{#separator}","yes","no",true,{"number"})}} \attribute\zerocount\zerocount % first in list, so fast match % beware: these are global features on top of existing font features \let\currentfeature \s!current \let\m_font_feature_list \s!current \let\m_font_feature_asked\empty \newconstant\c_font_feature_state % hashing at this end is slower \unexpanded\def\addfeature {\doifnextoptionalelse\font_feature_add_yes \font_feature_add_nop } \unexpanded\def\subtractfeature {\doifnextoptionalelse\font_feature_subtract_yes \font_feature_subtract_nop } \unexpanded\def\replacefeature {\doifnextoptionalelse\font_feature_replace_yes \font_feature_replace_nop } \unexpanded\def\resetandaddfeature{\doifnextoptionalelse\font_feature_reset_add_yes\font_feature_reset_add_nop} \unexpanded\def\feature {\doifnextoptionalelse\font_feature_yes \font_feature_nop } \unexpanded\def\font_feature_add_yes [#feature]{\edef\m_font_feature_asked{#feature}\font_feature_add} \unexpanded\def\font_feature_add_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_add} \unexpanded\def\font_feature_subtract_yes [#feature]{\edef\m_font_feature_asked{#feature}\font_feature_subtract} \unexpanded\def\font_feature_subtract_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_subtract} \unexpanded\def\font_feature_replace_yes [#feature]{\edef\m_font_feature_asked{#feature}\font_feature_replace} \unexpanded\def\font_feature_replace_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_replace} \unexpanded\def\font_feature_reset_add_yes[#feature]{\edef\m_font_feature_asked{#feature}\font_feature_reset_add} \unexpanded\def\font_feature_reset_add_nop #feature{\edef\m_font_feature_asked{#feature}\font_feature_reset_add} \let\doaddfeature \font_feature_add_nop % low level faster ones \let\dosubtractfeature \font_feature_subtract_nop \let\doreplacefeature \font_feature_replace_nop \let\doreserandaddfeature\font_feature_reset_add_nop \unexpanded\def\font_feature_add {\ifnum\c_font_feature_state=\plusone \ifx\m_font_feature_asked\currentfeature\else \font_feature_add_indeed \fi \else \font_feature_add_indeed \fi} \unexpanded\def\font_feature_add_indeed {\ctxcommand{feature("+","\m_font_feature_list","\m_font_feature_asked")}% \edef\m_font_feature_list{\m_font_feature_list+\m_font_feature_asked}% also + at the lua end \c_font_feature_state\plusone \let\currentfeature\m_font_feature_asked} \unexpanded\def\font_feature_subtract {\ifnum\c_font_feature_state=\minusone \ifx\m_font_feature_asked\currentfeature\else \font_feature_subtract_indeed \fi \else \font_feature_subtract_indeed \fi} \unexpanded\def\font_feature_subtract_indeed {\ctxcommand{feature("-","\m_font_feature_list","\m_font_feature_asked")}% \edef\m_font_feature_list{\m_font_feature_list-\m_font_feature_asked}% also - at the lua end \c_font_feature_state\minusone \let\currentfeature\m_font_feature_asked} \unexpanded\def\font_feature_replace {\ifnum\c_font_feature_state=\zerocount \ifx\m_font_feature_asked\currentfeature\else \font_feature_replace_indeed \fi \else \font_feature_replace_indeed \fi} \unexpanded\def\font_feature_replace_indeed {\ctxcommand{feature("=","\m_font_feature_list","\m_font_feature_asked")}% \edef\m_font_feature_list{\m_font_feature_list=\m_font_feature_asked}% also = at the lua end \c_font_feature_state\zerocount \let\currentfeature\m_font_feature_asked} \unexpanded\def\resetfeature {\ifx\currentfeature\s!current \else \font_feature_reset_indeed \fi} \unexpanded\def\font_feature_reset_indeed {\let\m_font_feature_asked\empty \let\currentfeature \s!current \let\m_font_feature_list \s!current \ctxcommand{feature(false)}} \unexpanded\def\revivefeature {\ifx\currentfeature\s!current \else \font_feature_revive_indeed \fi} \unexpanded\def\font_feature_revive_indeed {\ctxcommand{feature(true,"\m_font_feature_list")}} \unexpanded\def\font_feature_reset_add {\ifnum\c_font_feature_state=\plusone \ifx\m_font_feature_asked\currentfeature\else \font_feature_reset_add_indeed \fi \else \font_feature_reset_add_indeed \fi} \unexpanded\def\font_feature_reset_add_indeed {\ctxcommand{feature("+","\s!current","\m_font_feature_asked")}% \edef\m_font_feature_list{\s!current+\m_font_feature_asked}% also + at the lua end \c_font_feature_state\plusone \let\currentfeature\m_font_feature_asked} \installcorenamespace{featureyes} \installcorenamespace{featurenop} \unexpanded\def\font_feature_yes[#method]{\csname\??featureyes\ifcsname\??featureyes#1\endcsname#1\else\s!unknown\fi\endcsname} \unexpanded\def\font_feature_nop #method{\csname\??featurenop\ifcsname\??featurenop#1\endcsname#1\else\s!unknown\fi\endcsname} \letvalue{\??featureyes +}\addfeature \letvalue{\??featurenop +}\addfeature \letvalue{\??featureyes -}\subtractfeature \letvalue{\??featurenop -}\subtractfeature \letvalue{\??featureyes =}\replacefeature \letvalue{\??featurenop =}\replacefeature \letvalue{\??featureyes !}\resetandaddfeature \letvalue{\??featurenop !}\resetandaddfeature \letvalue{\??featureyes >}\revivefeature \letvalue{\??featurenop >}\revivefeature \letvalue{\??featureyes <}\resetfeature \letvalue{\??featurenop <}\resetfeature \letvalue{\??featureyes\v!more }\addfeature % add set to previous set and combine with font set \letvalue{\??featurenop\v!more }\addfeature \letvalue{\??featureyes\v!less }\subtractfeature % subtract set from previous set and combine with font set \letvalue{\??featurenop\v!less }\subtractfeature \letvalue{\??featureyes\v!new }\replacefeature % replace font set \letvalue{\??featurenop\v!new }\replacefeature \letvalue{\??featureyes\v!reset }\resetfeature % forget sets and revert to font set \letvalue{\??featurenop\v!reset }\resetfeature \letvalue{\??featureyes\v!default}\revivefeature % make sure the current set is used on top of the font set \letvalue{\??featurenop\v!default}\revivefeature \letvalue{\??featureyes\v!old }\revivefeature \letvalue{\??featurenop\v!old }\revivefeature \letvalue{\??featureyes\v!local }\resetandaddfeature \letvalue{\??featurenop\v!local }\resetandaddfeature \letvalue{\??featureyes\s!unknown}\empty \letvalue{\??featurenop\s!unknown}\empty % just for old times sake: \unexpanded\def\featureattribute#feature% {\ctxcommand{featureattribute("#feature")}} \unexpanded\def\setfontfeature #feature% {\edef\currentfeature{#feature}% \let\m_font_feature_list\currentfeature \ctxcommand{setfontfeature("\currentfeature")}} \let\resetfontfeature\resetfeature % these are obsolete (don't use them any longer) \let\addfontfeaturetoset \font_feature_add_nop \let\subtractfontfeaturefromset \font_feature_subtract_nop \let\addfontfeaturetofont \font_feature_add_nop \let\subtractfontfeaturefromfont\font_feature_subtract_nop \let\setff\setfontfeature \let\addfs\addfontfeaturetoset \let\subfs\subtractfontfeaturefromset \let\addff\addfontfeaturetofont \let\subff\subtractfontfeaturefromfont %D \macros %D {os} %D %D In good old \TEX, the old style numerals were often taken %D from the math fonts. No longer. \definefontfeature [just-os] [mode=node,onum=yes] %unexpanded\def\sc{\setfontfeature{smallcaps}} \unexpanded\def\os{\setfontfeature{just-os}} % \doifelsecurrentfonthasfeature{smcp}{YES}{NO} % \doifelsecurrentfonthasfeature{crap}{YES}{NO} % \doifelsecurrentfonthasfeature{kern}{YES}{NO} \def\doifelsecurrentfonthasfeature#feature% {\ctxcommand{doifelsecurrentfonthasfeature("#feature")}} % new: \ctxcommand{registerlanguagefeatures()} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-ini.mkii0000644000175000017500000002320211754241457024244 0ustar norbertnorbert%D \module %D [ file=catc-ini, %D version=2006.09.18, %D title=\CONTEXT\ System Macros, %D subtitle=Catcode Handling, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We've split the functionality of syst-cat.* over more files %D now so that we can load more selectively. %D A long standing wish has been the availability of catcode %D arrays. Because traditional \TEX\ does ot provide this we %D implement a fake method in the Mark II file. \ifx\zerocount\undefined \chardef \zerocount= 0 \fi \ifx\plusone \undefined \chardef \plusone = 1 \fi \ifx\minusone \undefined \newcount\minusone \minusone =-1 \fi \chardef\escapecatcode = 0 \chardef\begingroupcatcode = 1 \chardef\endgroupcatcode = 2 \chardef\mathshiftcatcode = 3 \chardef\alignmentcatcode = 4 \chardef\endoflinecatcode = 5 \chardef\parametercatcode = 6 \chardef\superscriptcatcode = 7 \chardef\subscriptcatcode = 8 \chardef\ignorecatcode = 9 \chardef\spacecatcode = 10 \chardef\lettercatcode = 11 \chardef\othercatcode = 12 \chardef\other = 12 \chardef\activecatcode = 13 \chardef\active = 13 \chardef\commentcatcode = 14 \chardef\invalidcatcode = 15 \chardef\tabasciicode = 9 % ^^I \chardef\newlineasciicode = 10 % ^^J don't confuse this one with \endoflineasciicode \chardef\formfeedasciicode = 12 % ^^L \chardef\endoflineasciicode = 13 % ^^M somewhat messy but this can be the active \par \chardef\endoffileasciicode = 26 % ^^Z \chardef\spaceasciicode = 32 \chardef\hashasciicode = 35 \chardef\dollarasciicode = 36 \chardef\commentasciicode = 37 \chardef\ampersandasciicode = 38 \chardef\backslashasciicode = 92 % `\\ \chardef\circumflexasciicode = 94 \chardef\underscoreasciicode = 95 \chardef\leftbraceasciicode = 123 % `\{ \chardef\barasciicode = 124 % `\| \chardef\rightbraceasciicode = 125 % `\} \chardef\tildeasciicode = 126 % `\~ \chardef\delasciicode = 127 \newif \ifrecatcodeuppercharacters % only used in good old tex % \newcount\cctdefcounter \cctdefcounter\plusone % 0 = signal \newcount\cctdefcounter \cctdefcounter\zerocount % 0 = signal, so advance before allocate \newcount\cctcountera \newcount\cctcounterb \newcount\cctcounterc \def\newcatcodetable#1% {\global\advance\cctdefcounter\plusone \global\mathchardef#1\cctdefcounter \expandafter\xdef\csname @@ccn:\number\cctdefcounter\endcsname{\string#1}% logging \expandafter\newtoks\csname @@cct:\number\cctdefcounter\endcsname} \mathchardef\currentcatcodetable\zerocount \newtoks \setdefaultlowercatcodes \newtoks \setdefaultuppercatcodes \def\next#1% we don't have a proper loop defined yet {\edef\nextnext{#1{\the#1\catcode\the\cctcountera\space \ifnum\catcode\cctcountera=\lettercatcode \lettercatcode\else\othercatcode\fi}}% \nextnext\ifnum\cctcountera<\cctcounterb \advance\cctcountera\plusone \expandafter\next\expandafter#1\fi} \cctcountera 0 \cctcounterb 127 \next\setdefaultlowercatcodes \cctcountera 128 \cctcounterb 255 \next\setdefaultuppercatcodes \recatcodeuppercharactersfalse \def\catcodetable#1% {\mathchardef\currentcatcodetable#1% \the\setdefaultlowercatcodes \ifrecatcodeuppercharacters\the\setdefaultuppercatcodes\fi \the\csname @@cct:\number#1\endcsname} \long\def\startcatcodetable#1#2\stopcatcodetable {\global\csname @@cct:\number#1\endcsname{#2}} \long\def\startextendcatcodetable#1#2\stopextendcatcodetable {\global\csname @@cct:\number#1\endcsname\expandafter{\the\csname @@cct:\number#1\endcsname#2}} %D The next command can be defined in a cleaner way in the %D Mk IV file but we want to have a fast one with a minimal %D chance for interference. \chardef\activehackcode=`\~ %D Once a catcode is assigned, the next assignments will happen faster. % (expandable) let \def\letcatcodecommand {\afterassignment\letcatcodecommanda\cctcountera} \def\letcatcodecommanda{\afterassignment\letcatcodecommandb\cctcounterb} \def\letcatcodecommandb % each time {\ifcsname CCL:\number\cctcountera:\number\cctcounterb\endcsname \csname CCL:\number\cctcountera:\number\cctcounterb\expandafter\endcsname \else \expandafter\letcatcodecommandc \fi} \def\letcatcodecommandc % only first time {\expandafter\gdef\csname CCL:\number\cctcountera:\number\cctcounterb\expandafter\endcsname\expandafter {\expandafter\let\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname}% \reinstatecatcodecommanda \csname CCL:\number\cctcountera:\number\cctcounterb\endcsname} % expandable def \def\defcatcodecommand {\afterassignment\defcatcodecommanda\cctcountera} \def\defcatcodecommanda{\afterassignment\defcatcodecommandb\cctcounterb} \def\defcatcodecommandb % each time {\ifcsname CCD:\number\cctcountera:\number\cctcounterb\endcsname \csname CCD:\number\cctcountera:\number\cctcounterb\expandafter\endcsname \else \expandafter\defcatcodecommandc \fi} \def\defcatcodecommandc % only first time {\expandafter\gdef\csname CCD:\number\cctcountera:\number\cctcounterb\expandafter\endcsname \expandafter##\expandafter1\expandafter {\expandafter\def\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname{##1}}% \reinstatecatcodecommanda \csname CCD:\number\cctcountera:\number\cctcounterb\endcsname} % un expandable def (e.g. used for discretionaries) \def\uedcatcodecommand {\afterassignment\uedcatcodecommanda\cctcountera} \def\uedcatcodecommanda{\afterassignment\uedcatcodecommandb\cctcounterb} \def\uedcatcodecommandb % each time {\ifcsname CCU:\number\cctcountera:\number\cctcounterb\endcsname \csname CCU:\number\cctcountera:\number\cctcounterb\expandafter\endcsname \else \expandafter\uedcatcodecommandc \fi} \def\uedcatcodecommandc % only first time {\expandafter\gdef\csname CCU:\number\cctcountera:\number\cctcounterb\expandafter\endcsname \expandafter##\expandafter1\expandafter {\expandafter\unexpanded\expandafter\def\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname{##1}}% \reinstatecatcodecommanda \csname CCU:\number\cctcountera:\number\cctcounterb\endcsname} \def\reinstatecatcodecommand{\afterassignment\reinstatecatcodecommanda\cctcounterb} \def\reinstatecatcodecommanda % can be used when a direct definition has been done {\bgroup % and the selector has been lost \uccode\activehackcode\cctcounterb \catcode\uccode\activehackcode\activecatcode \uppercase{\xdef~{\noexpand\catcodecommand{\number\cctcounterb}}}% \egroup} \chardef\defaultcatcodetable\zerocount \def\catcodecommand#1% {\csname CCC:\number \ifcsname CCC:\number\currentcatcodetable:\number#1\endcsname \currentcatcodetable \else \defaultcatcodetable \fi :\number#1\endcsname} %D \macros %D {restorecatcodes, %D beginrestorecatcodes,endrestorecatcodes} %D %D We're not finished dealing \CATCODES\ yet. In \CONTEXT\ we %D use only one auxiliary file, which deals with tables of %D contents, registers, two pass tracking, references etc. This %D file, as well as files concerning graphics, is processed when %D needed, which can be in the mid of typesetting verbatim. %D However, when reading in data in verbatim mode, we should %D temporary restore the normal \CATCODES, and that's exactly %D what the next macros do. Saving the catcodes can be %D disabled by saying \type{\localcatcodestrue}. \let\savedcatcodetable\relax \newcount\catcoderestorelevel \def\pushcatcodetable {\advance\catcoderestorelevel\plusone \tracepushcatcodetable \expandafter\mathchardef\csname scct:\number\catcoderestorelevel\endcsname\currentcatcodetable} \def\popcatcodetable {\ifcase\catcoderestorelevel \showcatcodenestingerror \else \expandafter\catcodetable\csname scct:\number\catcoderestorelevel\endcsname \tracepopcatcodetable \advance\catcoderestorelevel\minusone \fi} \def\showcatcodenestingerror % can be overloaded {\immediate\write16{}% \immediate\write16{Fatal error: catcode push/pop mismatch. Fix this!}\wait\end \immediate\write16{}} \def\restorecatcodes % takes previous level {\ifnum\catcoderestorelevel>\plusone \expandafter\catcodetable\csname scct:\number\numexpr\catcoderestorelevel-1\relax\endcsname \fi} \newtoks\everycatcodetable \def\setcatcodetable#1% {\catcodetable#1% \the\everycatcodetable \tracesetcatcodetable} \def\dotracecatcodetable#1{\immediate\write16{[#1]}} \def\tracecatcodetables {\def\tracesetcatcodetable {\dotracecatcodetable{set \catcodetablename\space at \number\catcoderestorelevel}}% \def\tracepushcatcodetable{\dotracecatcodetable{push \catcodetablename\space from \catcodetableprev\space at \number\catcoderestorelevel}}% \def\tracepopcatcodetable {\dotracecatcodetable{pop \catcodetablename\space to \catcodetableprev\space at \number\catcoderestorelevel}}} \def\catcodetableprev {\ifnum\numexpr\catcoderestorelevel-1\relax>\zerocount \csname @@ccn:\number\csname scct:\number\numexpr\catcoderestorelevel-1\relax\endcsname\endcsname \else -% \fi} \def\catcodetablename {\ifnum\currentcatcodetable>\zerocount \csname @@ccn:\number\currentcatcodetable\endcsname \else -% \fi} \ifx\empty\undefined \def\empty{} \fi \let\tracesetcatcodetable \empty \let\tracepushcatcodetable\empty \let\tracepopcatcodetable \empty \def\beginrestorecatcodes{\pushcatcodetable} \def\endrestorecatcodes {\popcatcodetable} %D Handy for debugging: % \tracecatcodetables \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-jap.mkii0000644000175000017500000003466511754241457024265 0ustar norbertnorbert%D \module %D [ file=lang-jap, %D version=2006.01.13, %D title=\CONTEXT\ Language Macros, %D subtitle=Japanese, %D author={Richard Gabriel}, %D date=\currentdate, %D copyright={Richard Gabriel \& Hans Hagen}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % rgabriel@kerio.com \writestatus{loading}{ConTeXt Language Macros / Japanese} \unprotect \definesystemconstant {japanese} \definesystemconstant {ja} \installlanguage [\s!ja] [\c!leftsentence=\jaencoding\jaleftsentence, \c!rightsentence=\jaencoding\jarightsentence, \c!leftsubsentence=\jaencoding\jaleftsubsentence, \c!rightsubsentence=\jaencoding\jarightsubsentence, \c!leftquote=\jaencoding\jaencodedsinglestartquote, \c!rightquote=\jaencoding\jaencodedsingleendquote, \c!leftquotation=\jaencoding\jaencodedstartquote, \c!rightquotation=\jaencoding\jaencodedendquote, \c!date={\jaencodedchristiandate,\v!year,\jaencodedyear,\v!month,\jaencodedmonth,\v!day,\jaencodedday}] \setupheadtext [\s!ja] [\v!content={\jaencoding\jaencodedtableofcontents}] \setupheadtext [\s!ja] [\v!tables={\jaencoding\jaencodedtables}] \setupheadtext [\s!ja] [\v!figures={\jaencoding\jaencodedfigures}] \setupheadtext [\s!ja] [\v!graphics={\jaencoding\jaencodedgraphics}] \setupheadtext [\s!ja] [\v!intermezzi={\jaencoding\jaencodedintermezzos}] \setupheadtext [\s!ja] [\v!index={\jaencoding\jaencodedindex}] \setupheadtext [\s!ja] [\v!abbreviations={\jaencoding\jaencodedabbreviations}] \setupheadtext [\s!ja] [\v!logos={\jaencoding\jaencodedlogos}] \setupheadtext [\s!ja] [\v!units={\jaencoding\jaencodedunits}] \setuplabeltext [\s!ja] [\v!table={\jaencoding\jaencodedtable}] \setuplabeltext [\s!ja] [\v!figure={\jaencoding\jaencodedfigure}] \setuplabeltext [\s!ja] [\v!intermezzo={\jaencoding\jaencodedintermezzo}] \setuplabeltext [\s!ja] [\v!graphic={\jaencoding\jaencodedillustration}] \setuplabeltext [\s!ja] [\v!appendix={\jaencoding\jaencodedappendix}] \setuplabeltext [\s!ja] [\v!part={\jaencoding\jaencodedintro,\jaencoding\jaencodedpart}] \setuplabeltext [\s!ja] [\v!chapter={\jaencoding\jaencodedintro,\jaencoding\jaencodedchapter}] \setuplabeltext [\s!ja] [\v!section={\jaencoding\jaencodedintro,\jaencoding\jaencodedsection}] \setuplabeltext [\s!ja] [\v!line={\jaencoding\jaencodedline}] \setuplabeltext [\s!ja] [\v!lines={\jaencoding\jaencodedline}] \setuplabeltext [\s!ja] [\v!subsection=] \setuplabeltext [\s!ja] [\v!subsubsection=] \setuplabeltext [\s!ja] [\v!subsubsubsection=] %D Why are these languagespecifics ? \setuplabeltext [\s!ja] [\v!january=1] \setuplabeltext [\s!ja] [\v!february=2] \setuplabeltext [\s!ja] [\v!march=3] \setuplabeltext [\s!ja] [\v!april=4] \setuplabeltext [\s!ja] [\v!may=5] \setuplabeltext [\s!ja] [\v!june=6] \setuplabeltext [\s!ja] [\v!july=7] \setuplabeltext [\s!ja] [\v!august=8] \setuplabeltext [\s!ja] [\v!september=9] \setuplabeltext [\s!ja] [\v!october=10] \setuplabeltext [\s!ja] [\v!november=11] \setuplabeltext [\s!ja] [\v!december=12] \setuplabeltext [\s!ja] [\v!sunday=\jaencoding\jaencodedsunday ] \setuplabeltext [\s!ja] [\v!monday=\jaencoding\jaencodedmonday ] \setuplabeltext [\s!ja] [\v!tuesday=\jaencoding\jaencodedtuesday ] \setuplabeltext [\s!ja] [\v!wednesday=\jaencoding\jaencodedwednesday] \setuplabeltext [\s!ja] [\v!thursday=\jaencoding\jaencodedthursday ] \setuplabeltext [\s!ja] [\v!friday=\jaencoding\jaencodedfriday ] \setuplabeltext [\s!ja] [\v!saturday=\jaencoding\jaencodedsaturday ] % Hardcoded - \japaneseencoding should be defined similarly to \chineseencoding \unexpanded\def\jaencoding{\enableencoding[cjk-uni]} %D This list is taken from DocBook XSL stylesheets (http://docbook.sourceforge.net/). \startencoding[cjk-uni] \definecommand jaencodedabstract {\uchar{105}{130}\uchar{137}{129}} \definecommand jaencodedand {\uchar{48}{1}} \definecommand jaencodedanswer {\uchar{123}{84}\uchar{255}{26}} \definecommand jaencodedappendix {\uchar{78}{216}\uchar{147}{50}} \definecommand jaencodedarticle {\uchar{152}{5}\uchar{118}{238}} \definecommand jaencodedbibliography {\uchar{83}{194}\uchar{128}{3}\uchar{101}{135}\uchar{115}{46}} \definecommand jaencodedbook {\uchar{48}{214}\uchar{48}{195}\uchar{48}{175}} \definecommand jaencodedbridgehead {\uchar{152}{5}} \definecommand jaencodedbullet {\uchar{37}{207}} \definecommand jaencodedby {\uchar{255}{26}} \definecommand jaencodedcaution {\uchar{108}{232}\uchar{97}{15}} \definecommand jaencodedcolophon {\uchar{89}{101}\uchar{78}{216}} \definecommand jaencodedcopyright {\uchar{136}{253}\uchar{79}{92}\uchar{132}{87}\uchar{79}{92}} \definecommand jaencodeddedication {\uchar{139}{29}\uchar{143}{158}} \definecommand jaencodededited {\uchar{125}{232}\uchar{128}{5}} \definecommand jaencodededitedby {\uchar{125}{232}\uchar{128}{5}\uchar{255}{26}} \definecommand jaencodededition {\uchar{125}{232}\uchar{150}{198}} \definecommand jaencodedendquote {\uchar{48}{13}} \definecommand jaencodedequation {\uchar{95}{15}} \definecommand jaencodedexample {\uchar{79}{139}} \definecommand jaencodedfigure {\uchar{86}{243}} \definecommand jaencodedglossary {\uchar{117}{40}\uchar{138}{158}\uchar{150}{198}} \definecommand jaencodedglosssee {\uchar{83}{194}\uchar{113}{103}} \definecommand jaencodedglossseealso {\uchar{83}{194}\uchar{113}{103}} \definecommand jaencodedchapter {\uchar{122}{224}} \definecommand jaencodedimportant {\uchar{145}{205}\uchar{137}{129}\uchar{152}{5}\uchar{118}{238}} \definecommand jaencodedindex {\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedindexsymbols {\uchar{48}{183}\uchar{48}{243}\uchar{48}{220}\uchar{48}{235}} \definecommand jaencodedintro {\uchar{123}{44}} \definecommand jaencodedlistofequations {\uchar{95}{15}\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedlistofexamples {\uchar{79}{139}\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedlistoffigures {\uchar{86}{243}\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedlistoftables {\uchar{136}{104}\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedlistofunknown {\uchar{78}{13}\uchar{102}{14}\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedmsgaud {\uchar{91}{254}\uchar{140}{97}\uchar{128}{5}} \definecommand jaencodedmsglevel {\uchar{48}{236}\uchar{48}{217}\uchar{48}{235}} \definecommand jaencodedmsgorig {\uchar{118}{122}\uchar{79}{225}\uchar{81}{67}} \definecommand jaencodednavhome {\uchar{48}{219}\uchar{48}{252}\uchar{48}{224}} \definecommand jaencodednavnext {\uchar{107}{33}\uchar{48}{110}\uchar{48}{218}\uchar{48}{252}\uchar{48}{184}} \definecommand jaencodednavnextsibling {\uchar{101}{233}\uchar{144}{1}\uchar{48}{138}} \definecommand jaencodednavprev {\uchar{82}{77}\uchar{48}{110}\uchar{48}{218}\uchar{48}{252}\uchar{48}{184}} \definecommand jaencodednavprevsibling {\uchar{93}{251}\uchar{98}{59}\uchar{48}{87}} \definecommand jaencodednavup {\uchar{78}{10}\uchar{48}{107}\uchar{98}{59}\uchar{48}{139}} \definecommand jaencodednestedendquote {\uchar{48}{15}} \definecommand jaencodednestedstartquote {\uchar{48}{14}} \definecommand jaencodednonexistantelement {\uchar{137}{129}\uchar{125}{32}\uchar{48}{76}\uchar{91}{88}\uchar{87}{40}\uchar{48}{87}\uchar{48}{126}\uchar{48}{91}\uchar{48}{147}} \definecommand jaencodednote {\uchar{108}{232}\uchar{97}{15}} \definecommand jaencodednotes {\uchar{108}{232}\uchar{97}{15}} \definecommand jaencodedpages {\uchar{80}{103}\uchar{115}{46}} \definecommand jaencodedpart {\uchar{48}{209}\uchar{48}{252}\uchar{48}{200}} \definecommand jaencodedpreface {\uchar{94}{143}\uchar{101}{135}} \definecommand jaencodedprocedure {\uchar{98}{75}\uchar{152}{6}} \definecommand jaencodedprocedureformal {\uchar{98}{75}\uchar{152}{6}} \definecommand jaencodedproductionset {\uchar{48}{215}\uchar{48}{237}\uchar{48}{192}\uchar{48}{175}\uchar{48}{183}\uchar{48}{231}\uchar{48}{243}} \definecommand jaencodedproductionsetformal {\uchar{48}{215}\uchar{48}{237}\uchar{48}{192}\uchar{48}{175}\uchar{48}{183}\uchar{48}{231}\uchar{48}{243}} \definecommand jaencodedpublished {\uchar{118}{122}\uchar{136}{76}} \definecommand jaencodedqandadiv {\uchar{85}{79}\uchar{255}{26}\uchar{48}{1}\uchar{123}{84}\uchar{255}{26}} \definecommand jaencodedqandaentry {\uchar{85}{79}\uchar{255}{26}} \definecommand jaencodedquestion {\uchar{85}{79}\uchar{255}{26}} \definecommand jaencodedreference {\uchar{83}{194}\uchar{113}{103}} \definecommand jaencodedrefname {\uchar{84}{13}\uchar{82}{77}} \definecommand jaencodedrefsection {\uchar{152}{5}} \definecommand jaencodedrefsynopsisdiv {\uchar{105}{130}\uchar{137}{129}} \definecommand jaencodedrevhistory {\uchar{101}{57}\uchar{138}{2}\uchar{92}{101}\uchar{107}{116}} \definecommand jaencodedrevision {\uchar{101}{57}\uchar{138}{2}} \definecommand jaencodedsection {\uchar{152}{5}} \definecommand jaencodedsee {\uchar{83}{194}\uchar{113}{103}} \definecommand jaencodedseealso {\uchar{83}{194}\uchar{113}{103}} \definecommand jaencodedseparator {\uchar{48}{1}} \definecommand jaencodedset {\uchar{138}{45}\uchar{91}{154}} \definecommand jaencodedsetindex {\uchar{118}{238}\uchar{107}{33}\uchar{138}{45}\uchar{91}{154}} \definecommand jaencodedsidebar {\uchar{48}{181}\uchar{48}{164}\uchar{48}{201}\uchar{48}{208}\uchar{48}{252}} \definecommand jaencodedsimplesect {\uchar{152}{5}} \definecommand jaencodedsingleendquote {\uchar{32}{25}} \definecommand jaencodedsinglestartquote {\uchar{32}{24}} \definecommand jaencodedstartquote {\uchar{48}{12}} \definecommand jaencodedstep {\uchar{48}{185}\uchar{48}{198}\uchar{48}{195}\uchar{48}{215}} \definecommand jaencodedtable {\uchar{136}{104}} \definecommand jaencodedtablenotes {\uchar{108}{232}\uchar{97}{15}} \definecommand jaencodedtableofcontents {\uchar{118}{238}\uchar{107}{33}} \definecommand jaencodedtip {\uchar{48}{198}\uchar{48}{163}\uchar{48}{195}\uchar{48}{215}} \definecommand jaencodedunexpectedelementname {\uchar{78}{13}\uchar{102}{14}\uchar{48}{106}\uchar{137}{129}\uchar{125}{32}\uchar{84}{13}} \definecommand jaencodedunsupported {\uchar{48}{181}\uchar{48}{221}\uchar{48}{252}\uchar{48}{200}\uchar{48}{87}\uchar{48}{126}\uchar{48}{91}\uchar{48}{147}} \definecommand jaencodedwarning {\uchar{139}{102}\uchar{84}{74}} \definecommand jaencodedyear {\uchar{94}{116}} \definecommand jaencodedmonth {\uchar{103}{8}} \definecommand jaencodedday {\uchar{101}{229}} \stopencoding %D Taken from Chinese (will be investigated yet...) \startencoding[cjk-uni] \definecommand jaencodedleftsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand jaencodedrightsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand jaencodedleftsubsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand jaencodedrightsubsentence {\uchar{32}{20}\uchar{32}{20}} \stopencoding %D Special thanxx to Eizo Tsuchihashi (eizo@arcbrain.jp) for the following stuff \startencoding[cjk-uni] \definecommand jaencodedchristiandate {\uchar{137}{127}\uchar{102}{166}} \definecommand jaencodedtables {\uchar{103}{58}} \definecommand jaencodedfigures {\uchar{86}{243}} \definecommand jaencodedabbreviations {\uchar{117}{101}\uchar{138}{158}} \definecommand jaencodedlogos {\uchar{116}{6}\uchar{96}{39}} \definecommand jaencodedunits {\uchar{48}{230}\uchar{48}{203}\uchar{48}{195}\uchar{48}{196}} \definecommand jaencodedgraphics {\uchar{48}{176}\uchar{48}{233}\uchar{48}{213}} \definecommand jaencodedintermezzo {\uchar{149}{147}\uchar{89}{79}\uchar{102}{242}} \definecommand jaencodedintermezzos {\uchar{149}{147}\uchar{89}{79}\uchar{102}{242}} \definecommand jaencodedillustration {\uchar{48}{164}\uchar{48}{233}\uchar{48}{185}\uchar{48}{200}} \definecommand jaencodedline {\uchar{125}{218}} \definecommand jaencodedlines {\uchar{125}{218}} \definecommand jaencodedjanuary {\uchar{78}{0}\uchar{103}{8}} \definecommand jaencodedfebruary {\uchar{78}{140}\uchar{103}{8}} \definecommand jaencodedmarch {\uchar{78}{9}\uchar{103}{8}} \definecommand jaencodedapril {\uchar{86}{219}\uchar{103}{8}} \definecommand jaencodedmay {\uchar{78}{148}\uchar{103}{8}} \definecommand jaencodedjune {\uchar{81}{109}\uchar{103}{8}} \definecommand jaencodedjuly {\uchar{78}{3}\uchar{103}{8}} \definecommand jaencodedaugust {\uchar{81}{107}\uchar{103}{8}} \definecommand jaencodedseptember {\uchar{78}{93}\uchar{103}{8}} \definecommand jaencodedoctober {\uchar{83}{65}\uchar{103}{8}} \definecommand jaencodednovember {\uchar{83}{65}\uchar{78}{0}\uchar{103}{8}} \definecommand jaencodeddecember {\uchar{83}{65}\uchar{78}{140}\uchar{103}{8}} \definecommand jaencodedsunday {\uchar{103}{8}\uchar{102}{220}\uchar{101}{229}} \definecommand jaencodedmonday {\uchar{112}{107}\uchar{102}{220}\uchar{101}{229}} \definecommand jaencodedtuesday {\uchar{108}{52}\uchar{102}{220}\uchar{101}{229}} \definecommand jaencodedwednesday {\uchar{103}{40}\uchar{102}{220}\uchar{101}{229}} \definecommand jaencodedthursday {\uchar{145}{209}\uchar{102}{220}\uchar{101}{229}} \definecommand jaencodedfriday {\uchar{87}{31}\uchar{102}{220}\uchar{101}{229}} \definecommand jaencodedsaturday {\uchar{101}{229}\uchar{102}{220}\uchar{101}{229}} \stopencoding \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-rul.lua0000644000175000017500000001041612134352503024112 0ustar norbertnorbertif not modules then modules = { } end modules ['pack-rul'] = { version = 1.001, comment = "companion to pack-rul.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

An explanation is given in the history document mk.

--ldx]]-- local texsetdimen, texsetcount, texbox = tex.setdimen, tex.setcount, tex.box local hpack, free, copy, traverse_id = node.hpack, node.free, node.copy_list, node.traverse_id local texdimen, texcount = tex.dimen, tex.count local hlist_code = nodes.nodecodes.hlist local box_code = nodes.listcodes.box local node_dimensions = node.dimensions function commands.doreshapeframedbox(n) local box = texbox[n] local noflines = 0 local firstheight = nil local lastdepth = nil local lastlinelength = 0 local minwidth = 0 local maxwidth = 0 local totalwidth = 0 if box.width ~= 0 then local list = box.list if list then for h in traverse_id(hlist_code,list) do -- no dir etc needed if not firstheight then firstheight = h.height end lastdepth = h.depth noflines = noflines + 1 local l = h.list if l then if h.subtype == box_code then -- maybe more lastlinelength = h.width else lastlinelength = node_dimensions(l) -- used to be: hpack(copy(l)).width end if lastlinelength > maxwidth then maxwidth = lastlinelength end if lastlinelength < minwidth or minwidth == 0 then minwidth = lastlinelength end totalwidth = totalwidth + lastlinelength end end if firstheight then if maxwidth ~= 0 then for h in traverse_id(hlist_code,list) do local l = h.list if l then if h.subtype == box_code then -- explicit box, no 'line' else -- if h.width ~= maxwidth then -- else no display math handling (uses shift) -- challenge: adapt glue_set -- h.glue_set = h.glue_set * h.width/maxwidth -- interesting ... doesn't matter much -- h.width = maxwidth h.list = hpack(l,maxwidth,'exactly',h.dir) h.shift = 0 -- needed for display math h.width = maxwidth -- end end end end end box.width = maxwidth end end end -- print("reshape", noflines, firstheight or 0, lastdepth or 0) texsetcount("global","framednoflines", noflines) texsetdimen("global","framedfirstheight", firstheight or 0) texsetdimen("global","framedlastdepth", lastdepth or 0) texsetdimen("global","framedminwidth", minwidth) texsetdimen("global","framedmaxwidth", maxwidth) texsetdimen("global","framedaveragewidth", noflines > 0 and totalwidth/noflines or 0) end function commands.doanalyzeframedbox(n) local box = texbox[n] local noflines = 0 local firstheight = nil local lastdepth = nil if box.width ~= 0 then local list = box.list if list then for h in traverse_id(hlist_code,list) do if not firstheight then firstheight = h.height end lastdepth = h.depth noflines = noflines + 1 end end end -- print("analyze", noflines, firstheight or 0, lastdepth or 0) texsetcount("global","framednoflines", noflines) texsetdimen("global","framedfirstheight", firstheight or 0) texsetdimen("global","framedlastdepth", lastdepth or 0) end context-2013.05.28.20130704/texmf-dist/tex/context/base/node-tst.lua0000644000175000017500000000637511571377075024161 0ustar norbertnorbertif not modules then modules = { } end modules ['node-tst'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local nodes, node = nodes, node local chardata = characters.data local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local glue_code = nodecodes.glue local penalty_code = nodecodes.penalty local kern_code = nodecodes.kern local glyph_code = nodecodes.glyph local whatsit_code = nodecodes.whatsit local hlist_code = nodecodes.hlist local leftskip_code = skipcodes.leftskip local rightskip_code = skipcodes.rightskip local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip local find_node_tail = node.tail or node.slide function nodes.leftmarginwidth(n) -- todo: three values while n do local id = n.id if id == glue_code then return n.subtype == leftskip_code and n.spec.width or 0 elseif id == whatsit_code then n = n.next elseif id == hlist_code then return n.width else break end end return 0 end function nodes.rightmarginwidth(n) if n then n = find_node_tail(n) while n do local id = n.id if id == glue_code then return n.subtype == rightskip_code and n.spec.width or 0 elseif id == whatsit_code then n = n.prev else break end end end return false end function nodes.somespace(n,all) if n then local id = n.id if id == glue_code then return (all or (n.spec.width ~= 0)) and glue_code elseif id == kern_code then return (all or (n.kern ~= 0)) and kern elseif id == glyph_code then local category = chardata[n.char].category -- maybe more category checks are needed return (category == "zs") and glyph_code end end return false end function nodes.somepenalty(n,value) if n then local id = n.id if id == penalty_code then if value then return n.penalty == value else return true end end end return false end function nodes.is_display_math(head) local n = head.prev while n do local id = n.id if id == penalty_code then elseif id == glue_code then if n.subtype == abovedisplayshortskip_code then return true end else break end n = n.prev end n = head.next while n do local id = n.id if id == penalty_code then elseif id == glue_code then if n.subtype == belowdisplayshortskip_code then return true end else break end n = n.next end return false end context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-ema.mkii0000644000175000017500000010233511754241457024256 0ustar norbertnorbert%D \module %D [ file=colo-ema, %D version=2003.03.20, %D title=\CONTEXT\ Color Macros, %D subtitle=Emacs Colors, %D author=Peter Rolf, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % author : Peter Rolf % last change : 17 march 2003 % origin : /emacs/etc/rgb.txt % % USAGE: % % - select emacs menu: Edit -> Text Properties -> Display % Colors, if you don't know what I'm talking about % - copy this file to your /texmf/tex/context/user directory % and add "\input colo-emacs" to your tex-file % % IMPORTANT NOTES: % % - all color names are written as ONE word in lowercase % letters (no redundancy as in rgb.txt) so if you want to % use the color "Light Sky Blue"/"light sky blue" it's new % name is lightskyblue % - the grayX values [X=0..100] can only be used with \color % [grayX] % - use it at your own risk :) % % HINT: % % I only include this file (\showcolor [ema]) until I've % found the colors I want. Copy and paste the color % definitions to a seperate file, to decrease compilation % time (540 color definitions). \definecolor [snow] [r=1,g=.980392,b=.980392] \definecolor [ghostwhite] [r=.972549,g=.972549,b=1] \definecolor [whitesmoke] [s=.960784] \definecolor [gainsboro] [s=.862745] \definecolor [floralwhite] [r=1,g=.980392,b=.941176] \definecolor [oldlace] [r=.992157,g=.960784,b=.901961] \definecolor [linen] [r=.980392,g=.941176,b=.901961] \definecolor [antiquewhite] [r=.980392,g=.921569,b=.843137] \definecolor [papayawhip] [r=1,g=.937255,b=.835294] \definecolor [blanchedalmond] [r=1,g=.921569,b=.803922] \definecolor [bisque] [r=1,g=.894118,b=.768627] \definecolor [peachpuff] [r=1,g=.854902,b=.72549] \definecolor [navajowhite] [r=1,g=.870588,b=.678431] \definecolor [moccasin] [r=1,g=.894118,b=.709804] \definecolor [cornsilk] [r=1,g=.972549,b=.862745] \definecolor [ivory] [r=1,g=1,b=.941176] \definecolor [lemonchiffon] [r=1,g=.980392,b=.803922] \definecolor [seashell] [r=1,g=.960784,b=.933333] \definecolor [honeydew] [r=.941176,g=1,b=.941176] \definecolor [mintcream] [r=.960784,g=1,b=.980392] \definecolor [azure] [r=.941176,g=1,b=1] \definecolor [aliceblue] [r=.941176,g=.972549,b=1] \definecolor [lavender] [r=.901961,g=.901961,b=.980392] \definecolor [lavenderblush] [r=1,g=.941176,b=.960784] \definecolor [mistyrose] [r=1,g=.894118,b=.882353] %definecolor[white] [s=1] %definecolor[black] [s=0] \definecolor [darkslategray] [r=.184314,g=.309804,b=.309804] \definecolor [dimgray] [s=.411765] \definecolor [slategray] [r=.439216,g=.501961,b=.564706] \definecolor [lightslategray] [r=.466667,g=.533333,b=.6] \definecolor [gray] [s=.745098] \definecolor [lightgray] [s=.827451] \definecolor [midnightblue] [r=.098039,g=.098039,b=.439216] \definecolor [navy] [b=.501961] \definecolor [navyblue] [navy] \definecolor [cornflowerblue] [r=.392157,g=.584314,b=.929412] \definecolor [darkslateblue] [r=.282353,g=.239216,b=.545098] \definecolor [slateblue] [r=.415686,g=.352941,b=.803922] \definecolor [mediumslateblue] [r=.482353,g=.407843,b=.933333] \definecolor [lightslateblue] [r=.517647,g=.439216,b=1] \definecolor [mediumblue] [b=.803922] \definecolor [royalblue] [r=.254902,g=.411765,b=.882353] %definecolor[blue] [b=1] \definecolor [dodgerblue] [r=.117647,g=.564706,b=1] \definecolor [deepskyblue] [g=.74902,b=1] \definecolor [skyblue] [r=.529412,g=.807843,b=.921569] \definecolor [lightskyblue] [r=.529412,g=.807843,b=.980392] \definecolor [steelblue] [r=.27451,g=.509804,b=.705882] \definecolor [lightsteelblue] [r=.690196,g=.768627,b=.870588] \definecolor [lightblue] [r=.678431,g=.847059,b=.901961] \definecolor [powderblue] [r=.690196,g=.878431,b=.901961] \definecolor [paleturquoise] [r=.686275,g=.933333,b=.933333] \definecolor [darkturquoise] [g=.807843,b=.819608] \definecolor [mediumturquoise] [r=.282353,g=.819608,b=.8] \definecolor [turquoise] [r=.25098,g=.878431,b=.815686] %definecolor[cyan] [g=1,b=1] \definecolor [lightcyan] [r=.878431,g=1,b=1] \definecolor [cadetblue] [r=.372549,g=.619608,b=.627451] \definecolor [mediumaquamarine] [r=.4,g=.803922,b=.666667] \definecolor [aquamarine] [r=.498039,g=1,b=.831373] \definecolor [darkgreen] [g=.392157] \definecolor [darkolivegreen] [r=.333333,g=.419608,b=.184314] \definecolor [darkseagreen] [r=.560784,g=.737255,b=.560784] \definecolor [seagreen] [r=.180392,g=.545098,b=.341176] \definecolor [mediumseagreen] [r=.235294,g=.701961,b=.443137] \definecolor [lightseagreen] [r=.12549,g=.698039,b=.666667] \definecolor [palegreen] [r=.596078,g=.984314,b=.596078] \definecolor [springgreen] [g=1,b=.498039] \definecolor [lawngreen] [r=.486275,g=.988235] %definecolor[green] [g=1] \definecolor [chartreuse] [r=.498039,g=1] \definecolor [mediumspringgreen] [g=.980392,b=.603922] \definecolor [greenyellow] [r=.678431,g=1,b=.184314] \definecolor [limegreen] [r=.196078,g=.803922,b=.196078] \definecolor [yellowgreen] [r=.603922,g=.803922,b=.196078] \definecolor [forestgreen] [r=.133333,g=.545098,b=.133333] \definecolor [olivedrab] [r=.419608,g=.556863,b=.137255] \definecolor [darkkhaki] [r=.741176,g=.717647,b=.419608] \definecolor [khaki] [r=.941176,g=.901961,b=.54902] \definecolor [palegoldenrod] [r=.933333,g=.909804,b=.666667] \definecolor [lightgoldenrodyellow] [r=.980392,g=.980392,b=.823529] \definecolor [lightyellow] [r=1,g=1,b=.878431] %definecolor[yellow] [r=1,g=1] \definecolor [gold] [r=1,g=.843137] \definecolor [lightgoldenrod] [r=.933333,g=.866667,b=.509804] \definecolor [goldenrod] [r=.854902,g=.647059,b=.12549] \definecolor [darkgoldenrod] [r=.721569,g=.52549,b=.043137] \definecolor [rosybrown] [r=.737255,g=.560784,b=.560784] \definecolor [indianred] [r=.803922,g=.360784,b=.360784] \definecolor [saddlebrown] [r=.545098,g=.270588,b=.07451] \definecolor [sienna] [r=.627451,g=.321569,b=.176471] \definecolor [peru] [r=.803922,g=.521569,b=.247059] \definecolor [burlywood] [r=.870588,g=.721569,b=.529412] \definecolor [beige] [r=.960784,g=.960784,b=.862745] \definecolor [wheat] [r=.960784,g=.870588,b=.701961] \definecolor [sandybrown] [r=.956863,g=.643137,b=.376471] \definecolor [tan] [r=.823529,g=.705882,b=.54902] \definecolor [chocolate] [r=.823529,g=.411765,b=.117647] \definecolor [firebrick] [r=.698039,g=.133333,b=.133333] \definecolor [brown] [r=.647059,g=.164706,b=.164706] \definecolor [darksalmon] [r=.913725,g=.588235,b=.478431] \definecolor [salmon] [r=.980392,g=.501961,b=.447059] \definecolor [lightsalmon] [r=1,g=.627451,b=.478431] \definecolor [orange] [r=1,g=.647059] \definecolor [darkorange] [r=1,g=.54902] \definecolor [coral] [r=1,g=.498039,b=.313725] \definecolor [lightcoral] [r=.941176,g=.501961,b=.501961] \definecolor [tomato] [r=1,g=.388235,b=.278431] \definecolor [orangered] [r=1,g=.270588] %definecolor[red] [r=1] \definecolor [hotpink] [r=1,g=.411765,b=.705882] \definecolor [deeppink] [r=1,g=.078431,b=.576471] \definecolor [pink] [r=1,g=.752941,b=.796078] \definecolor [lightpink] [r=1,g=.713725,b=.756863] \definecolor [palevioletred] [r=.858824,g=.439216,b=.576471] \definecolor [maroon] [r=.690196,g=.188235,b=.376471] \definecolor [mediumvioletred] [r=.780392,g=.082353,b=.521569] \definecolor [violetred] [r=.815686,g=.12549,b=.564706] %definecolor[magenta] [r=1,b=1] \definecolor [violet] [r=.933333,g=.509804,b=.933333] \definecolor [plum] [r=.866667,g=.627451,b=.866667] \definecolor [orchid] [r=.854902,g=.439216,b=.839216] \definecolor [mediumorchid] [r=.729412,g=.333333,b=.827451] \definecolor [darkorchid] [r=.6,g=.196078,b=.8] \definecolor [darkviolet] [r=.580392,b=.827451] \definecolor [blueviolet] [r=.541176,g=.168627,b=.886275] \definecolor [purple] [r=.627451,g=.12549,b=.941176] \definecolor [mediumpurple] [r=.576471,g=.439216,b=.858824] \definecolor [thistle] [r=.847059,g=.74902,b=.847059] \definecolor [snow1] [r=1,g=.980392,b=.980392] \definecolor [snow2] [r=.933333,g=.913725,b=.913725] \definecolor [snow3] [r=.803922,g=.788235,b=.788235] \definecolor [snow4] [r=.545098,g=.537255,b=.537255] \definecolor [seashell1] [r=1,g=.960784,b=.933333] \definecolor [seashell2] [r=.933333,g=.898039,b=.870588] \definecolor [seashell3] [r=.803922,g=.772549,b=.74902] \definecolor [seashell4] [r=.545098,g=.52549,b=.509804] \definecolor [antiquewhite1] [r=1,g=.937255,b=.858824] \definecolor [antiquewhite2] [r=.933333,g=.87451,b=.8] \definecolor [antiquewhite3] [r=.803922,g=.752941,b=.690196] \definecolor [antiquewhite4] [r=.545098,g=.513725,b=.470588] \definecolor [bisque1] [r=1,g=.894118,b=.768627] \definecolor [bisque2] [r=.933333,g=.835294,b=.717647] \definecolor [bisque3] [r=.803922,g=.717647,b=.619608] \definecolor [bisque4] [r=.545098,g=.490196,b=.419608] \definecolor [peachpuff1] [r=1,g=.854902,b=.72549] \definecolor [peachpuff2] [r=.933333,g=.796078,b=.678431] \definecolor [peachpuff3] [r=.803922,g=.686275,b=.584314] \definecolor [peachpuff4] [r=.545098,g=.466667,b=.396078] \definecolor [navajowhite1] [r=1,g=.870588,b=.678431] \definecolor [navajowhite2] [r=.933333,g=.811765,b=.631373] \definecolor [navajowhite3] [r=.803922,g=.701961,b=.545098] \definecolor [navajowhite4] [r=.545098,g=.47451,b=.368627] \definecolor [lemonchiffon1] [r=1,g=.980392,b=.803922] \definecolor [lemonchiffon2] [r=.933333,g=.913725,b=.74902] \definecolor [lemonchiffon3] [r=.803922,g=.788235,b=.647059] \definecolor [lemonchiffon4] [r=.545098,g=.537255,b=.439216] \definecolor [cornsilk1] [r=1,g=.972549,b=.862745] \definecolor [cornsilk2] [r=.933333,g=.909804,b=.803922] \definecolor [cornsilk3] [r=.803922,g=.784314,b=.694118] \definecolor [cornsilk4] [r=.545098,g=.533333,b=.470588] \definecolor [ivory1] [r=1,g=1,b=.941176] \definecolor [ivory2] [r=.933333,g=.933333,b=.878431] \definecolor [ivory3] [r=.803922,g=.803922,b=.756863] \definecolor [ivory4] [r=.545098,g=.545098,b=.513725] \definecolor [honeydew1] [r=.941176,g=1,b=.941176] \definecolor [honeydew2] [r=.878431,g=.933333,b=.878431] \definecolor [honeydew3] [r=.756863,g=.803922,b=.756863] \definecolor [honeydew4] [r=.513725,g=.545098,b=.513725] \definecolor [lavenderblush1] [r=1,g=.941176,b=.960784] \definecolor [lavenderblush2] [r=.933333,g=.878431,b=.898039] \definecolor [lavenderblush3] [r=.803922,g=.756863,b=.772549] \definecolor [lavenderblush4] [r=.545098,g=.513725,b=.52549] \definecolor [mistyrose1] [r=1,g=.894118,b=.882353] \definecolor [mistyrose2] [r=.933333,g=.835294,b=.823529] \definecolor [mistyrose3] [r=.803922,g=.717647,b=.709804] \definecolor [mistyrose4] [r=.545098,g=.490196,b=.482353] \definecolor [azure1] [r=.941176,g=1,b=1] \definecolor [azure2] [r=.878431,g=.933333,b=.933333] \definecolor [azure3] [r=.756863,g=.803922,b=.803922] \definecolor [azure4] [r=.513725,g=.545098,b=.545098] \definecolor [slateblue1] [r=.513725,g=.435294,b=1] \definecolor [slateblue2] [r=.478431,g=.403922,b=.933333] \definecolor [slateblue3] [r=.411765,g=.34902,b=.803922] \definecolor [slateblue4] [r=.278431,g=.235294,b=.545098] \definecolor [royalblue1] [r=.282353,g=.462745,b=1] \definecolor [royalblue2] [r=.262745,g=.431373,b=.933333] \definecolor [royalblue3] [r=.227451,g=.372549,b=.803922] \definecolor [royalblue4] [r=.152941,g=.25098,b=.545098] \definecolor [blue1] [blue] \definecolor [blue2] [b=.933333] \definecolor [blue3] [b=.803922] \definecolor [blue4] [b=.545098] \definecolor [dodgerblue1] [r=.117647,g=.564706,b=1] \definecolor [dodgerblue2] [r=.109804,g=.52549,b=.933333] \definecolor [dodgerblue3] [r=.094118,g=.454902,b=.803922] \definecolor [dodgerblue4] [r=.062745,g=.305882,b=.545098] \definecolor [steelblue1] [r=.388235,g=.721569,b=1] \definecolor [steelblue2] [r=.360784,g=.67451,b=.933333] \definecolor [steelblue3] [r=.309804,g=.580392,b=.803922] \definecolor [steelblue4] [r=.211765,g=.392157,b=.545098] \definecolor [deepskyblue1] [g=.74902,b=1] \definecolor [deepskyblue2] [g=.698039,b=.933333] \definecolor [deepskyblue3] [g=.603922,b=.803922] \definecolor [deepskyblue4] [g=.407843,b=.545098] \definecolor [skyblue1] [r=.529412,g=.807843,b=1] \definecolor [skyblue2] [r=.494118,g=.752941,b=.933333] \definecolor [skyblue3] [r=.423529,g=.65098,b=.803922] \definecolor [skyblue4] [r=.290196,g=.439216,b=.545098] \definecolor [lightskyblue1] [r=.690196,g=.886275,b=1] \definecolor [lightskyblue2] [r=.643137,g=.827451,b=.933333] \definecolor [lightskyblue3] [r=.552941,g=.713725,b=.803922] \definecolor [lightskyblue4] [r=.376471,g=.482353,b=.545098] \definecolor [slategray1] [r=.776471,g=.886275,b=1] \definecolor [slategray2] [r=.72549,g=.827451,b=.933333] \definecolor [slategray3] [r=.623529,g=.713725,b=.803922] \definecolor [slategray4] [r=.423529,g=.482353,b=.545098] \definecolor [lightsteelblue1] [r=.792157,g=.882353,b=1] \definecolor [lightsteelblue2] [r=.737255,g=.823529,b=.933333] \definecolor [lightsteelblue3] [r=.635294,g=.709804,b=.803922] \definecolor [lightsteelblue4] [r=.431373,g=.482353,b=.545098] \definecolor [lightblue1] [r=.74902,g=.937255,b=1] \definecolor [lightblue2] [r=.698039,g=.87451,b=.933333] \definecolor [lightblue3] [r=.603922,g=.752941,b=.803922] \definecolor [lightblue4] [r=.407843,g=.513725,b=.545098] \definecolor [lightcyan1] [r=.878431,g=1,b=1] \definecolor [lightcyan2] [r=.819608,g=.933333,b=.933333] \definecolor [lightcyan3] [r=.705882,g=.803922,b=.803922] \definecolor [lightcyan4] [r=.478431,g=.545098,b=.545098] \definecolor [paleturquoise1] [r=.733333,g=1,b=1] \definecolor [paleturquoise2] [r=.682353,g=.933333,b=.933333] \definecolor [paleturquoise3] [r=.588235,g=.803922,b=.803922] \definecolor [paleturquoise4] [r=.4,g=.545098,b=.545098] \definecolor [cadetblue1] [r=.596078,g=.960784,b=1] \definecolor [cadetblue2] [r=.556863,g=.898039,b=.933333] \definecolor [cadetblue3] [r=.478431,g=.772549,b=.803922] \definecolor [cadetblue4] [r=.32549,g=.52549,b=.545098] \definecolor [turquoise1] [g=.960784,b=1] \definecolor [turquoise2] [g=.898039,b=.933333] \definecolor [turquoise3] [g=.772549,b=.803922] \definecolor [turquoise4] [g=.52549,b=.545098] \definecolor [cyan1] [cyan] \definecolor [cyan2] [g=.933333,b=.933333] \definecolor [cyan3] [g=.803922,b=.803922] \definecolor [cyan4] [g=.545098,b=.545098] \definecolor [darkslategray1] [r=.592157,g=1,b=1] \definecolor [darkslategray2] [r=.552941,g=.933333,b=.933333] \definecolor [darkslategray3] [r=.47451,g=.803922,b=.803922] \definecolor [darkslategray4] [r=.321569,g=.545098,b=.545098] \definecolor [aquamarine1] [r=.498039,g=1,b=.831373] \definecolor [aquamarine2] [r=.462745,g=.933333,b=.776471] \definecolor [aquamarine3] [r=.4,g=.803922,b=.666667] \definecolor [aquamarine4] [r=.270588,g=.545098,b=.454902] \definecolor [darkseagreen1] [r=.756863,g=1,b=.756863] \definecolor [darkseagreen2] [r=.705882,g=.933333,b=.705882] \definecolor [darkseagreen3] [r=.607843,g=.803922,b=.607843] \definecolor [darkseagreen4] [r=.411765,g=.545098,b=.411765] \definecolor [seagreen1] [r=.329412,g=1,b=.623529] \definecolor [seagreen2] [r=.305882,g=.933333,b=.580392] \definecolor [seagreen3] [r=.262745,g=.803922,b=.501961] \definecolor [seagreen4] [r=.180392,g=.545098,b=.341176] \definecolor [palegreen1] [r=.603922,g=1,b=.603922] \definecolor [palegreen2] [r=.564706,g=.933333,b=.564706] \definecolor [palegreen3] [r=.486275,g=.803922,b=.486275] \definecolor [palegreen4] [r=.329412,g=.545098,b=.329412] \definecolor [springgreen1] [g=1,b=.498039] \definecolor [springgreen2] [g=.933333,b=.462745] \definecolor [springgreen3] [g=.803922,b=.4] \definecolor [springgreen4] [g=.545098,b=.270588] \definecolor [green1] [green] \definecolor [green2] [g=.933333] \definecolor [green3] [g=.803922] \definecolor [green4] [g=.545098] \definecolor [chartreuse1] [r=.498039,g=1] \definecolor [chartreuse2] [r=.462745,g=.933333] \definecolor [chartreuse3] [r=.4,g=.803922] \definecolor [chartreuse4] [r=.270588,g=.545098] \definecolor [olivedrab1] [r=.752941,g=1,b=.243137] \definecolor [olivedrab2] [r=.701961,g=.933333,b=.227451] \definecolor [olivedrab3] [r=.603922,g=.803922,b=.196078] \definecolor [olivedrab4] [r=.411765,g=.545098,b=.133333] \definecolor [darkolivegreen1] [r=.792157,g=1,b=.439216] \definecolor [darkolivegreen2] [r=.737255,g=.933333,b=.407843] \definecolor [darkolivegreen3] [r=.635294,g=.803922,b=.352941] \definecolor [darkolivegreen4] [r=.431373,g=.545098,b=.239216] \definecolor [khaki1] [r=1,g=.964706,b=.560784] \definecolor [khaki2] [r=.933333,g=.901961,b=.521569] \definecolor [khaki3] [r=.803922,g=.776471,b=.45098] \definecolor [khaki4] [r=.545098,g=.52549,b=.305882] \definecolor [lightgoldenrod1] [r=1,g=.92549,b=.545098] \definecolor [lightgoldenrod2] [r=.933333,g=.862745,b=.509804] \definecolor [lightgoldenrod3] [r=.803922,g=.745098,b=.439216] \definecolor [lightgoldenrod4] [r=.545098,g=.505882,b=.298039] \definecolor [lightyellow1] [r=1,g=1,b=.878431] \definecolor [lightyellow2] [r=.933333,g=.933333,b=.819608] \definecolor [lightyellow3] [r=.803922,g=.803922,b=.705882] \definecolor [lightyellow4] [r=.545098,g=.545098,b=.478431] \definecolor [yellow1] [yellow] \definecolor [yellow2] [r=.933333,g=.933333] \definecolor [yellow3] [r=.803922,g=.803922] \definecolor [yellow4] [r=.545098,g=.545098] \definecolor [gold1] [r=1,g=.843137] \definecolor [gold2] [r=.933333,g=.788235] \definecolor [gold3] [r=.803922,g=.678431] \definecolor [gold4] [r=.545098,g=.458824] \definecolor [goldenrod1] [r=1,g=.756863,b=.145098] \definecolor [goldenrod2] [r=.933333,g=.705882,b=.133333] \definecolor [goldenrod3] [r=.803922,g=.607843,b=.113725] \definecolor [goldenrod4] [r=.545098,g=.411765,b=.078431] \definecolor [darkgoldenrod1] [r=1,g=.72549,b=.058824] \definecolor [darkgoldenrod2] [r=.933333,g=.678431,b=.054902] \definecolor [darkgoldenrod3] [r=.803922,g=.584314,b=.047059] \definecolor [darkgoldenrod4] [r=.545098,g=.396078,b=.031373] \definecolor [rosybrown1] [r=1,g=.756863,b=.756863] \definecolor [rosybrown2] [r=.933333,g=.705882,b=.705882] \definecolor [rosybrown3] [r=.803922,g=.607843,b=.607843] \definecolor [rosybrown4] [r=.545098,g=.411765,b=.411765] \definecolor [indianred1] [r=1,g=.415686,b=.415686] \definecolor [indianred2] [r=.933333,g=.388235,b=.388235] \definecolor [indianred3] [r=.803922,g=.333333,b=.333333] \definecolor [indianred4] [r=.545098,g=.227451,b=.227451] \definecolor [sienna1] [r=1,g=.509804,b=.278431] \definecolor [sienna2] [r=.933333,g=.47451,b=.258824] \definecolor [sienna3] [r=.803922,g=.407843,b=.223529] \definecolor [sienna4] [r=.545098,g=.278431,b=.14902] \definecolor [burlywood1] [r=1,g=.827451,b=.607843] \definecolor [burlywood2] [r=.933333,g=.772549,b=.568627] \definecolor [burlywood3] [r=.803922,g=.666667,b=.490196] \definecolor [burlywood4] [r=.545098,g=.45098,b=.333333] \definecolor [wheat1] [r=1,g=.905882,b=.729412] \definecolor [wheat2] [r=.933333,g=.847059,b=.682353] \definecolor [wheat3] [r=.803922,g=.729412,b=.588235] \definecolor [wheat4] [r=.545098,g=.494118,b=.4] \definecolor [tan1] [r=1,g=.647059,b=.309804] \definecolor [tan2] [r=.933333,g=.603922,b=.286275] \definecolor [tan3] [r=.803922,g=.521569,b=.247059] \definecolor [tan4] [r=.545098,g=.352941,b=.168627] \definecolor [chocolate1] [r=1,g=.498039,b=.141176] \definecolor [chocolate2] [r=.933333,g=.462745,b=.129412] \definecolor [chocolate3] [r=.803922,g=.4,b=.113725] \definecolor [chocolate4] [r=.545098,g=.270588,b=.07451] \definecolor [firebrick1] [r=1,g=.188235,b=.188235] \definecolor [firebrick2] [r=.933333,g=.172549,b=.172549] \definecolor [firebrick3] [r=.803922,g=.14902,b=.14902] \definecolor [firebrick4] [r=.545098,g=.101961,b=.101961] \definecolor [brown1] [r=1,g=.25098,b=.25098] \definecolor [brown2] [r=.933333,g=.231373,b=.231373] \definecolor [brown3] [r=.803922,g=.2,b=.2] \definecolor [brown4] [r=.545098,g=.137255,b=.137255] \definecolor [salmon1] [r=1,g=.54902,b=.411765] \definecolor [salmon2] [r=.933333,g=.509804,b=.384314] \definecolor [salmon3] [r=.803922,g=.439216,b=.329412] \definecolor [salmon4] [r=.545098,g=.298039,b=.223529] \definecolor [lightsalmon1] [r=1,g=.627451,b=.478431] \definecolor [lightsalmon2] [r=.933333,g=.584314,b=.447059] \definecolor [lightsalmon3] [r=.803922,g=.505882,b=.384314] \definecolor [lightsalmon4] [r=.545098,g=.341176,b=.258824] \definecolor [orange1] [r=1,g=.647059] \definecolor [orange2] [r=.933333,g=.603922] \definecolor [orange3] [r=.803922,g=.521569] \definecolor [orange4] [r=.545098,g=.352941] \definecolor [darkorange1] [r=1,g=.498039] \definecolor [darkorange2] [r=.933333,g=.462745] \definecolor [darkorange3] [r=.803922,g=.4] \definecolor [darkorange4] [r=.545098,g=.270588] \definecolor [coral1] [r=1,g=.447059,b=.337255] \definecolor [coral2] [r=.933333,g=.415686,b=.313725] \definecolor [coral3] [r=.803922,g=.356863,b=.270588] \definecolor [coral4] [r=.545098,g=.243137,b=.184314] \definecolor [tomato1] [r=1,g=.388235,b=.278431] \definecolor [tomato2] [r=.933333,g=.360784,b=.258824] \definecolor [tomato3] [r=.803922,g=.309804,b=.223529] \definecolor [tomato4] [r=.545098,g=.211765,b=.14902] \definecolor [orangered1] [r=1,g=.270588] \definecolor [orangered2] [r=.933333,g=.25098] \definecolor [orangered3] [r=.803922,g=.215686] \definecolor [orangered4] [r=.545098,g=.145098] \definecolor [red1] [red] \definecolor [red2] [r=.933333] \definecolor [red3] [r=.803922] \definecolor [red4] [r=.545098] \definecolor [deeppink1] [r=1,g=.078431,b=.576471] \definecolor [deeppink2] [r=.933333,g=.070588,b=.537255] \definecolor [deeppink3] [r=.803922,g=.062745,b=.462745] \definecolor [deeppink4] [r=.545098,g=.039216,b=.313725] \definecolor [hotpink1] [r=1,g=.431373,b=.705882] \definecolor [hotpink2] [r=.933333,g=.415686,b=.654902] \definecolor [hotpink3] [r=.803922,g=.376471,b=.564706] \definecolor [hotpink4] [r=.545098,g=.227451,b=.384314] \definecolor [pink1] [r=1,g=.709804,b=.772549] \definecolor [pink2] [r=.933333,g=.662745,b=.721569] \definecolor [pink3] [r=.803922,g=.568627,b=.619608] \definecolor [pink4] [r=.545098,g=.388235,b=.423529] \definecolor [lightpink1] [r=1,g=.682353,b=.72549] \definecolor [lightpink2] [r=.933333,g=.635294,b=.678431] \definecolor [lightpink3] [r=.803922,g=.54902,b=.584314] \definecolor [lightpink4] [r=.545098,g=.372549,b=.396078] \definecolor [palevioletred1] [r=1,g=.509804,b=.670588] \definecolor [palevioletred2] [r=.933333,g=.47451,b=.623529] \definecolor [palevioletred3] [r=.803922,g=.407843,b=.537255] \definecolor [palevioletred4] [r=.545098,g=.278431,b=.364706] \definecolor [maroon1] [r=1,g=.203922,b=.701961] \definecolor [maroon2] [r=.933333,g=.188235,b=.654902] \definecolor [maroon3] [r=.803922,g=.160784,b=.564706] \definecolor [maroon4] [r=.545098,g=.109804,b=.384314] \definecolor [violetred1] [r=1,g=.243137,b=.588235] \definecolor [violetred2] [r=.933333,g=.227451,b=.54902] \definecolor [violetred3] [r=.803922,g=.196078,b=.470588] \definecolor [violetred4] [r=.545098,g=.133333,b=.321569] \definecolor [magenta1] [magenta] \definecolor [magenta2] [r=.933333,b=.933333] \definecolor [magenta3] [r=.803922,b=.803922] \definecolor [magenta4] [r=.545098,b=.545098] \definecolor [orchid1] [r=1,g=.513725,b=.980392] \definecolor [orchid2] [r=.933333,g=.478431,b=.913725] \definecolor [orchid3] [r=.803922,g=.411765,b=.788235] \definecolor [orchid4] [r=.545098,g=.278431,b=.537255] \definecolor [plum1] [r=1,g=.733333,b=1] \definecolor [plum2] [r=.933333,g=.682353,b=.933333] \definecolor [plum3] [r=.803922,g=.588235,b=.803922] \definecolor [plum4] [r=.545098,g=.4,b=.545098] \definecolor [mediumorchid1] [r=.878431,g=.4,b=1] \definecolor [mediumorchid2] [r=.819608,g=.372549,b=.933333] \definecolor [mediumorchid3] [r=.705882,g=.321569,b=.803922] \definecolor [mediumorchid4] [r=.478431,g=.215686,b=.545098] \definecolor [darkorchid1] [r=.74902,g=.243137,b=1] \definecolor [darkorchid2] [r=.698039,g=.227451,b=.933333] \definecolor [darkorchid3] [r=.603922,g=.196078,b=.803922] \definecolor [darkorchid4] [r=.407843,g=.133333,b=.545098] \definecolor [purple1] [r=.607843,g=.188235,b=1] \definecolor [purple2] [r=.568627,g=.172549,b=.933333] \definecolor [purple3] [r=.490196,g=.14902,b=.803922] \definecolor [purple4] [r=.333333,g=.101961,b=.545098] \definecolor [mediumpurple1] [r=.670588,g=.509804,b=1] \definecolor [mediumpurple2] [r=.623529,g=.47451,b=.933333] \definecolor [mediumpurple3] [r=.537255,g=.407843,b=.803922] \definecolor [mediumpurple4] [r=.364706,g=.278431,b=.545098] \definecolor [thistle1] [r=1,g=.882353,b=1] \definecolor [thistle2] [r=.933333,g=.823529,b=.933333] \definecolor [thistle3] [r=.803922,g=.709804,b=.803922] \definecolor [thistle4] [r=.545098,g=.482353,b=.545098] \definecolor [gray0] [black] \definecolor [gray1] [s=.01] \definecolor [gray2] [s=.02] \definecolor [gray3] [s=.03] \definecolor [gray4] [s=.04] \definecolor [gray5] [s=.05] \definecolor [gray6] [s=.06] \definecolor [gray7] [s=.07] \definecolor [gray8] [s=.08] \definecolor [gray9] [s=.09] \definecolor [gray10] [s=.1] \definecolor [gray11] [s=.11] \definecolor [gray12] [s=.12] \definecolor [gray13] [s=.13] \definecolor [gray14] [s=.14] \definecolor [gray15] [s=.15] \definecolor [gray16] [s=.16] \definecolor [gray17] [s=.17] \definecolor [gray18] [s=.18] \definecolor [gray19] [s=.19] \definecolor [gray20] [s=.2] \definecolor [gray21] [s=.21] \definecolor [gray22] [s=.22] \definecolor [gray23] [s=.23] \definecolor [gray24] [s=.24] \definecolor [gray25] [s=.25] \definecolor [gray26] [s=.26] \definecolor [gray27] [s=.27] \definecolor [gray28] [s=.28] \definecolor [gray29] [s=.29] \definecolor [gray30] [s=.3] \definecolor [gray31] [s=.31] \definecolor [gray32] [s=.32] \definecolor [gray33] [s=.33] \definecolor [gray34] [s=.34] \definecolor [gray35] [s=.35] \definecolor [gray36] [s=.36] \definecolor [gray37] [s=.37] \definecolor [gray38] [s=.38] \definecolor [gray39] [s=.39] \definecolor [gray40] [s=.4] \definecolor [gray41] [s=.41] \definecolor [gray42] [s=.42] \definecolor [gray43] [s=.43] \definecolor [gray44] [s=.44] \definecolor [gray45] [s=.45] \definecolor [gray46] [s=.46] \definecolor [gray47] [s=.47] \definecolor [gray48] [s=.48] \definecolor [gray49] [s=.49] \definecolor [gray50] [s=.5] \definecolor [gray51] [s=.51] \definecolor [gray52] [s=.52] \definecolor [gray53] [s=.53] \definecolor [gray54] [s=.54] \definecolor [gray55] [s=.55] \definecolor [gray56] [s=.56] \definecolor [gray57] [s=.57] \definecolor [gray58] [s=.58] \definecolor [gray59] [s=.59] \definecolor [gray60] [s=.6] \definecolor [gray61] [s=.61] \definecolor [gray62] [s=.62] \definecolor [gray63] [s=.63] \definecolor [gray64] [s=.64] \definecolor [gray65] [s=.65] \definecolor [gray66] [s=.66] \definecolor [gray67] [s=.67] \definecolor [gray68] [s=.68] \definecolor [gray69] [s=.69] \definecolor [gray70] [s=.7] \definecolor [gray71] [s=.71] \definecolor [gray72] [s=.72] \definecolor [gray73] [s=.73] \definecolor [gray74] [s=.74] \definecolor [gray75] [s=.75] \definecolor [gray76] [s=.76] \definecolor [gray77] [s=.77] \definecolor [gray78] [s=.78] \definecolor [gray79] [s=.79] \definecolor [gray80] [s=.8] \definecolor [gray81] [s=.81] \definecolor [gray82] [s=.82] \definecolor [gray83] [s=.83] \definecolor [gray84] [s=.84] \definecolor [gray85] [s=.85] \definecolor [gray86] [s=.86] \definecolor [gray87] [s=.87] \definecolor [gray88] [s=.88] \definecolor [gray89] [s=.89] \definecolor [gray90] [s=.9] \definecolor [gray91] [s=.91] \definecolor [gray92] [s=.92] \definecolor [gray93] [s=.93] \definecolor [gray94] [s=.94] \definecolor [gray95] [s=.95] \definecolor [gray96] [s=.96] \definecolor [gray97] [s=.97] \definecolor [gray98] [s=.98] \definecolor [gray99] [s=.99] \definecolor [gray100] [white] \definecolor [darkgray] [s=.662745] \definecolor [darkblue] [b=.545098] \definecolor [darkcyan] [g=.545098,b=.545098] \definecolor [darkmagenta] [r=.545098,b=.545098] \definecolor [darkred] [r=.545098] \definecolor [lightgreen] [r=.564706,g=.933333,b=.564706] context-2013.05.28.20130704/texmf-dist/tex/context/base/bibl-tst.lua0000644000175000017500000000115511376503616024126 0ustar norbertnorbertdofile("bibl-bib.lua") local session = bibtex.new() bibtex.load(session,"gut.bib") bibtex.load(session,"komoedie.bib") bibtex.load(session,"texbook1.bib") bibtex.load(session,"texbook2.bib") bibtex.load(session,"texbook3.bib") bibtex.load(session,"texgraph.bib") bibtex.load(session,"texjourn.bib") bibtex.load(session,"texnique.bib") bibtex.load(session,"tugboat.bib") print(bibtex.size,statistics.elapsedtime(bibtex)) bibtex.toxml(session) print(bibtex.size,statistics.elapsedtime(bibtex)) --~ print(table.serialize(session.data)) --~ print(table.serialize(session.shortcuts)) --~ print(xml.serialize(session.xml)) context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-il2.mkii0000644000175000017500000001040711754241457024170 0ustar norbertnorbert%D \module %D [ file=enco-il2, %D version=2000.05.07, % 1998.12.01, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Czech and Slovak ISO Latin 2 Encoding, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This encoding will go but the regime will remain. %D This Czech/Slovak encoding is dedicated to Han The Thanh. %D The numbers are derived from some files he sent me. This %D definition file is (still) sort of beta. \startmapping[il2] \resetcaserange 127 to 255 % we map them all to themselves \definecaseswap 184 152 \definecaseswap 181 165 \definecaseswap 185 169 \definecaseswap 187 171 \definecaseswap 190 174 \definecaseswap 224 192 \definecaseswap 225 193 \definecaseswap 228 196 \definecaseswap 229 197 \definecaseswap 232 200 \definecaseswap 233 201 \definecaseswap 236 204 \definecaseswap 237 205 \definecaseswap 239 207 \definecaseswap 242 210 \definecaseswap 243 211 \definecaseswap 244 212 \definecaseswap 246 214 \definecaseswap 248 216 \definecaseswap 249 217 \definecaseswap 250 218 \definecaseswap 252 220 \definecaseswap 253 221 \stopmapping \startencoding[il2][il2] \definecharacter textgrave 18 \definecharacter textacute 19 \definecharacter textcaron 20 \definecharacter textbreve 21 \definecharacter textmacron 22 \definecharacter textring 23 \definecharacter textcedilla 24 \definecharacter textcircumflex 94 \definecharacter textdotaccent 95 \definecharacter texthungarumlaut 125 \definecharacter texttilde 126 \definecharacter textdiaeresis 127 \definecharacter dotlessi 16 \definecharacter dotlessj 17 \definecharacter aeligature 26 \definecharacter AEligature 29 \definecharacter oeligature 27 \definecharacter OEligature 30 \definecharacter ssharp 25 \definecharacter Racute 192 \definecharacter Aacute 193 \definecharacter Lacute 197 \definecharacter Eacute 201 \definecharacter Iacute 205 \definecharacter Oacute 211 \definecharacter Uacute 218 \definecharacter Yacute 221 \definecharacter racute 224 \definecharacter aacute 225 \definecharacter lacute 229 \definecharacter eacute 233 \definecharacter iacute 237 \definecharacter oacute 243 \definecharacter uacute 250 \definecharacter yacute 253 \definecharacter Lcaron 165 \definecharacter Scaron 169 \definecharacter Tcaron 171 \definecharacter Zcaron 174 \definecharacter lcaron 181 \definecharacter scaron 185 \definecharacter tcaron 187 \definecharacter zcaron 190 \definecharacter Ccaron 200 \definecharacter Ecaron 204 \definecharacter Dcaron 207 \definecharacter Ncaron 210 \definecharacter Rcaron 216 \definecharacter ccaron 232 \definecharacter ecaron 236 \definecharacter dcaron 239 \definecharacter ncaron 242 \definecharacter rcaron 248 \definecharacter Ocircumflex 212 \definecharacter ocircumflex 244 \definecharacter Adiaeresis 196 \definecharacter Odiaeresis 214 \definecharacter Udiaeresis 220 \definecharacter adiaeresis 228 \definecharacter odiaeresis 246 \definecharacter udiaeresis 252 \definecharacter Agrave 152 \definecharacter agrave 184 \definecharacter Ohungarumlaut 213 \definecharacter Uhungarumlaut 219 \definecharacter ohungarumlaut 245 \definecharacter uhungarumlaut 251 \definecharacter Uring 217 \definecharacter uring 249 \definecharacter Aring {\ilencodedrA} \definecharacter ostroke 28 \definecharacter Ostroke 31 \definecharacter Lstroke {\ilencodedL} \definecharacter lstroke {\ilencodedl} \def\ilencodedrA {\dontleavehmode\hbox\bgroup \setbox0\hbox{h}% \dimen0=\ht0 \advance\dimen0 by -1ex \rlap{\raise.67\dimen0\hbox{\char'27}}A% \egroup} \def\ilencodedl {\dontleavehmode{\char32l}} \def\ilencodedL {\dontleavehmode\hbox\bgroup \setbox0\hbox{L}% \hbox to\wd0{\hss\char32L}% \egroup} \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fnt-01.mkii0000644000175000017500000000270311754241457024025 0ustar norbertnorbert%D \module %D [ file=s-fnt-01, %D version=2001.08.22, %D title=\CONTEXT\ Style File, %D subtitle=Font Environment 1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is used by the \type {texfont.pl} installation %D script. It is of no use for \MKIV. %D Modes: compact \dontcomplain \setupbodyfont [10pt] \setuplayout [backspace=30pt, topspace=30pt, footer=0pt, header=36pt, width=middle, height=middle] \setupcolors [state=start] \def\ShowFont {\dotripleempty\doShowFont} \def\doShowFont[#1][#2][#3]% {\doifsomething{#1} {\bgroup \ifthirdargument \definefontsynonym[WhateverName][#2][encoding=#3] \definefont[WhateverFont][WhateverName] \setupheadertexts[\tttf#2\quad#1\quad#3] \WhateverFont \setupinterlinespace \showfont[WhateverName] \showligatures[WhateverName] \doifnotmode{compact}{\showaccents\showcharacters} \else \definefontsynonym[WhateverName][#2] \definefont[WhateverFont][WhateverName] \setupheadertexts[\tttf#2\quad#1\quad(special font)] \WhateverFont \setupinterlinespace \showfont[WhateverName] \fi \page \egroup}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-xwi.mkii0000644000175000017500000001723411754241457024326 0ustar norbertnorbert%D \module %D [ file=colo-xwi, %D version=1995.01.01, %D title=\CONTEXT\ Color Macros, %D subtitle=X Windows, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I've forgotten where I got these definitions from, but maybe %D they can be of use. \definecolor [aliceblue] [r=0.94,g=0.97,b=1.00] \definecolor [antiquewhite] [r=0.98,g=0.92,b=0.84] \definecolor [aquamarine] [r=0.50,g=1.00,b=0.83] \definecolor [azure] [r=0.94,g=1.00,b=1.00] \definecolor [beige] [r=0.96,g=0.96,b=0.86] \definecolor [bisque] [r=1.00,g=0.89,b=0.77] \definecolor [black] [s=0] % [r=0.00,g=0.00,b=0.00] \definecolor [blanchedalmond] [r=1.00,g=0.92,b=0.80] \definecolor [blue] [r=0.00,g=0.00,b=1.00] \definecolor [blueviolet] [r=0.54,g=0.17,b=0.89] \definecolor [brown] [r=0.65,g=0.16,b=0.16] \definecolor [burlywood] [r=0.87,g=0.72,b=0.53] \definecolor [cadetblue] [r=0.37,g=0.62,b=0.63] \definecolor [chartreuse] [r=0.50,g=1.00,b=0.00] \definecolor [chocolate] [r=0.82,g=0.41,b=0.12] \definecolor [coral] [r=1.00,g=0.50,b=0.31] \definecolor [cornflowerblue] [r=0.39,g=0.58,b=0.93] \definecolor [cornsilk] [r=1.00,g=0.97,b=0.86] \definecolor [cyan] [r=0.00,g=1.00,b=1.00] \definecolor [darkgoldenrod] [r=0.72,g=0.53,b=0.04] \definecolor [darkgreen] [r=0.00,g=0.39,b=0.00] \definecolor [darkkhaki] [r=0.74,g=0.72,b=0.42] \definecolor [darkolivegreen] [r=0.33,g=0.42,b=0.18] \definecolor [darkorange] [r=1.00,g=0.55,b=0.00] \definecolor [darkorchid] [r=0.60,g=0.20,b=0.80] \definecolor [darksalmon] [r=0.91,g=0.59,b=0.48] \definecolor [darkseagreen] [r=0.56,g=0.74,b=0.56] \definecolor [darkslateblue] [r=0.28,g=0.24,b=0.55] \definecolor [darkturquoise] [r=0.00,g=0.81,b=0.82] \definecolor [darkviolet] [r=0.58,g=0.00,b=0.83] \definecolor [deeppink] [r=1.00,g=0.08,b=0.58] \definecolor [deepskyblue] [r=0.00,g=0.75,b=1.00] \definecolor [dodgerblue] [r=0.12,g=0.56,b=1.00] \definecolor [firebrick] [r=0.70,g=0.13,b=0.13] \definecolor [floralwhite] [r=1.00,g=0.98,b=0.94] \definecolor [forestgreen] [r=0.13,g=0.55,b=0.13] \definecolor [gainsboro] [r=0.86,g=0.86,b=0.86] \definecolor [ghostwhite] [r=0.97,g=0.97,b=1.00] \definecolor [gold] [r=1.00,g=0.84,b=0.00] \definecolor [goldenrod] [r=0.85,g=0.65,b=0.13] \definecolor [green] [r=0.00,g=1.00,b=0.00] \definecolor [greenyellow] [r=0.68,g=1.00,b=0.18] \definecolor [honeydew] [r=0.94,g=1.00,b=0.94] \definecolor [hotpink] [r=1.00,g=0.41,b=0.71] \definecolor [indianred] [r=0.80,g=0.36,b=0.36] \definecolor [ivory] [r=1.00,g=1.00,b=0.94] \definecolor [khaki] [r=0.94,g=0.90,b=0.55] \definecolor [lavender] [r=0.90,g=0.90,b=0.98] \definecolor [lavenderblush] [r=1.00,g=0.94,b=0.96] \definecolor [lawngreen] [r=0.49,g=0.99,b=0.00] \definecolor [lemonchiffon] [r=1.00,g=0.98,b=0.80] \definecolor [lightblue] [r=0.68,g=0.85,b=0.90] \definecolor [lightcoral] [r=0.94,g=0.50,b=0.50] \definecolor [lightcyan] [r=0.88,g=1.00,b=1.00] \definecolor [lightgoldenrod] [r=0.93,g=0.87,b=0.51] \definecolor [lightgoldenrodyellow] [r=0.98,g=0.98,b=0.82] \definecolor [lightpink] [r=1.00,g=0.71,b=0.76] \definecolor [lightsalmon] [r=1.00,g=0.63,b=0.48] \definecolor [lightseagreen] [r=0.13,g=0.70,b=0.67] \definecolor [lightskyblue] [r=0.53,g=0.81,b=0.98] \definecolor [lightslateblue] [r=0.52,g=0.44,b=1.00] \definecolor [lightsteelblue] [r=0.69,g=0.77,b=0.87] \definecolor [lightyellow] [r=1.00,g=1.00,b=0.88] \definecolor [limegreen] [r=0.20,g=0.80,b=0.20] \definecolor [linen] [r=0.98,g=0.94,b=0.90] \definecolor [magenta] [r=1.00,g=0.00,b=1.00] \definecolor [maroon] [r=0.69,g=0.19,b=0.38] \definecolor [mediumaquamarine] [r=0.40,g=0.80,b=0.67] \definecolor [mediumblue] [r=0.00,g=0.00,b=0.80] \definecolor [mediumorchid] [r=0.73,g=0.33,b=0.83] \definecolor [mediumpurple] [r=0.58,g=0.44,b=0.86] \definecolor [mediumseagreen] [r=0.24,g=0.70,b=0.44] \definecolor [mediumslateblue] [r=0.48,g=0.41,b=0.93] \definecolor [mediumspringgreen] [r=0.00,g=0.98,b=0.60] \definecolor [mediumturquoise] [r=0.28,g=0.82,b=0.80] \definecolor [mediumvioletred] [r=0.78,g=0.08,b=0.52] \definecolor [midnightblue] [r=0.10,g=0.10,b=0.44] \definecolor [mintcream] [r=0.96,g=1.00,b=0.98] \definecolor [mistyrose] [r=1.00,g=0.89,b=0.88] \definecolor [moccasin] [r=1.00,g=0.89,b=0.71] \definecolor [navajowhite] [r=1.00,g=0.87,b=0.68] \definecolor [navy] [r=0.00,g=0.00,b=0.50] \definecolor [navyblue] [r=0.00,g=0.00,b=0.50] \definecolor [oldlace] [r=0.99,g=0.96,b=0.90] \definecolor [olivedrab] [r=0.42,g=0.56,b=0.14] \definecolor [orange] [r=1.00,g=0.65,b=0.00] \definecolor [orangered] [r=1.00,g=0.27,b=0.00] \definecolor [orchid] [r=0.85,g=0.44,b=0.84] \definecolor [palegoldenrod] [r=0.93,g=0.91,b=0.67] \definecolor [palegreen] [r=0.60,g=0.98,b=0.60] \definecolor [paleturquoise] [r=0.69,g=0.93,b=0.93] \definecolor [palevioletred] [r=0.86,g=0.44,b=0.58] \definecolor [papayawhip] [r=1.00,g=0.94,b=0.84] \definecolor [peachpuff] [r=1.00,g=0.85,b=0.73] \definecolor [peru] [r=0.80,g=0.52,b=0.25] \definecolor [pink] [r=1.00,g=0.75,b=0.80] \definecolor [plum] [r=0.87,g=0.63,b=0.87] \definecolor [powderblue] [r=0.69,g=0.88,b=0.90] \definecolor [purple] [r=0.63,g=0.13,b=0.94] \definecolor [red ] [r=1.00,g=0.00,b=0.00] \definecolor [rosybrown] [r=0.74,g=0.56,b=0.56] \definecolor [royalblue] [r=0.25,g=0.41,b=0.88] \definecolor [saddlebrown] [r=0.55,g=0.27,b=0.07] \definecolor [salmon] [r=0.98,g=0.50,b=0.45] \definecolor [sandybrown] [r=0.96,g=0.64,b=0.38] \definecolor [seagreen] [r=0.18,g=0.55,b=0.34] \definecolor [seashell] [r=1.00,g=0.96,b=0.93] \definecolor [sienna] [r=0.63,g=0.32,b=0.18] \definecolor [skyblue] [r=0.53,g=0.81,b=0.92] \definecolor [slateblue] [r=0.42,g=0.35,b=0.80] \definecolor [snow] [r=1.00,g=0.98,b=0.98] \definecolor [springgreen] [r=0.00,g=1.00,b=0.50] \definecolor [steelblue] [r=0.27,g=0.51,b=0.71] \definecolor [tan ] [r=0.82,g=0.71,b=0.55] \definecolor [thistle] [r=0.85,g=0.75,b=0.85] \definecolor [tomato] [r=1.00,g=0.39,b=0.28] \definecolor [turquoise] [r=0.25,g=0.88,b=0.82] \definecolor [violet] [r=0.93,g=0.51,b=0.93] \definecolor [violetred] [r=0.82,g=0.13,b=0.56] \definecolor [wheat] [r=0.96,g=0.87,b=0.70] \definecolor [white] [r=1.00,g=1.00,b=1.00] \definecolor [whitesmoke] [s=0.96] % [r=0.96,g=0.96,b=0.96] \definecolor [yellow] [r=1.00,g=1.00,b=0.00] \definecolor [yellowgreen] [r=0.60,g=0.80,b=0.20] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-common.tex0000644000175000017500000000246011754241457026207 0ustar norbertnorbert%D \module %D [ file=mtx-context-common, %D version=2009.03.21, %D title=\CONTEXT\ Extra Trickry, %D subtitle=Common Stuff, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 local combination = document.arguments['combination'] or '2*2' local nx, ny = string.match(combination,"^(%d+)%s*[%*x]%s*(%d+)$") if not nx then nx, ny = 2, 2 elseif not ny then nx = tonumber(combination) or 2 ny = nx else nx = tonumber(nx) or 2 ny = tonumber(ny) or nx or 2 end document.setargument("combination_nx",nx) document.setargument("combination_ny",ny) \stopluacode \startluacode local paperformat = document.arguments['paperformat'] or 'A4*A4' -- paperformat = string.upper(paperformat) -- no, as we don't want to uppercase 'landscape' local f, t = string.match(paperformat,"^(.-)%s*[%*xX]%s*(.-)$") if not f then f, t = "A4", "A4" elseif not t then t = f end document.setargument("paperformat_paper",f) document.setargument("paperformat_print",t) \stopluacode \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-chk.mkiv0000644000175000017500000000137512130411274024273 0ustar norbertnorbert%D \module %D [ file=font-chk, %D version=2009.01.02, % moved from font-tra %D title=\CONTEXT\ Font Macros, %D subtitle=Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Checking} \registerctxluafile{font-chk}{1.001} \unexpanded\def\checkcharactersinfont {\ctxcommand{checkcharactersinfont()}} \unexpanded\def\removemissingcharacters {\ctxcommand{removemissingcharacters()}} \unexpanded\def\replacemissingcharacters{\ctxcommand{replacemissingcharacters()}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pre.mkii0000644000175000017500000000431311754241457024271 0ustar norbertnorbert%D \module %D [ file=meta-pre, %D version=2001.03.21, %D title=\METAPOST\ Graphics, %D subtitle=Predefined Goodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this library, we define a couple of handy graphics. % todo: use the predefine grid macros, mp code will move to % mp-* file \startuseMPgraphic{pagegrid} StartPage ; drawoptions(withcolor .8white) ; fill Field[Text][Text] ; drawoptions(withcolor .65white) ; fill Field[Footer][Text] ; fill Field[Header][Text] ; fill Field[LeftMargin][Text] ; fill Field[RightMargin][Text] ; drawoptions(withcolor .65yellow) ; fill Field[LeftEdge][Text] ; fill Field[RightEdge][Text] ; fill Field[Bottom][Text] ; fill Field[Top][Text] ; drawoptions(withpen pencircle scaled .3pt withcolor .65white) ; for i=-3cm step 1cm until PaperWidth+3cm : draw (i,-3cm)--(i,PaperHeight+3cm) ; endfor ; for i=PaperHeight+3cm step -1cm until -3cm : draw (-3cm,i)--(PaperWidth+3cm,i) ; endfor ; drawoptions(withpen pencircle scaled .15pt) ; for i=.5cm-3cm step 1cm until PaperWidth+3cm : draw (i,-3cm)--(i,PaperHeight+3cm) ; endfor ; for i=PaperHeight-.5cm+3cm step -1cm until -3cm : draw (-3cm,i)--(PaperWidth+3cm,i) ; endfor ; drawoptions(withpen pencircle scaled .3pt withcolor .65red) ; for i=0 step 1cm until PaperWidth : draw (i,0)--(i,PaperHeight) ; endfor ; for i=PaperHeight step -1cm until 0 : draw (0,i)--(PaperWidth,i) ; endfor ; drawoptions(withpen pencircle scaled .15pt withcolor .65red) ; for i=.5cm step 1cm until PaperWidth : draw (i,0)--(i,PaperHeight) ; endfor ; for i=PaperHeight-.5cm step -1cm until 0 : draw (0,i)--(PaperWidth,i) ; endfor ; drawoptions(withpen pencircle scaled 5pt withcolor .65red) ; draw ulcorner Page ; StopPage ; \stopuseMPgraphic \defineoverlay[pagegrid][\useMPgraphic{pagegrid}] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-eur.mkii0000644000175000017500000000457111754241457024330 0ustar norbertnorbert%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 ADE \& \CONTEXT\ Development Team}] %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 context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-lat.mkii0000644000175000017500000000015511244221744024250 0ustar norbertnorbert% temporary module, needed for downward compatibility \input regi-lat.tex \enableregime[latin2] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1257.lua0000644000175000017500000000457411571377075024270 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1257'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000, 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7, 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9 } context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-clp.mkii0000644000175000017500000001212411754241457024260 0ustar norbertnorbert%D \module %D [ file=meta-clp, %D version=2000.07.06, %D title=\METAPOST\ Graphics, %D subtitle=Clipping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In this library, we define a bunch of clipping paths that %D can be fed to \type {\clip}. \startMPclip{ellipse} clip currentpicture to unitcircle xscaled \width yscaled \height ; \stopMPclip \startMPclip{negellipse} clip currentpicture to (unitcircle peepholed unitsquare) xscaled \width yscaled \height ; \stopMPclip \startMPclip{urellipse} clip currentpicture to urcircle scaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{ulellipse} clip currentpicture to ulcircle scaled 2 shifted (1,0) xscaled \width yscaled \height ; \stopMPclip \startMPclip{llellipse} clip currentpicture to llcircle scaled 2 shifted (1,1) xscaled \width yscaled \height ; \stopMPclip \startMPclip{lrellipse} clip currentpicture to lrcircle scaled 2 shifted (0,1) xscaled \width yscaled \height ; \stopMPclip \startMPclip{tellipse} clip currentpicture to tcircle shifted (.5,0) yscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{bellipse} clip currentpicture to bcircle shifted (.5,.5) yscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{lellipse} clip currentpicture to lcircle shifted (.5,.5) xscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{rellipse} clip currentpicture to rcircle shifted (0,.5) xscaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{diamond} clip currentpicture to unitdiamond xscaled \width yscaled \height ; \stopMPclip \startMPclip{negdiamond} clip currentpicture to (unitdiamond peepholed unitsquare) xscaled \width yscaled \height ; \stopMPclip \startMPclip{urtriangle} clip currentpicture to urtriangle scaled 2 xscaled \width yscaled \height ; \stopMPclip \startMPclip{ultriangle} clip currentpicture to ultriangle scaled 2 shifted (1,0) xscaled \width yscaled \height ; \stopMPclip \startMPclip{lltriangle} clip currentpicture to lltriangle scaled 2 shifted (1,1) xscaled \width yscaled \height ; \stopMPclip \startMPclip{lrtriangle} clip currentpicture to lrtriangle scaled 2 shifted (0,1) xscaled \width yscaled \height ; \stopMPclip % More efficient: % % \def\dosimpleMPclip#1 % {clip currentpicture to (#1) xscaled \width yscaled \height ;} % % \def\simpleMPclip#1#2% % {\startMPclip{#1}\dosimpleMPclip{#2}\stopMPclip} % % \simpleMPclip {ellipse} {unitcircle} % \simpleMPclip {diamond} {unitdiamond} % % \simpleMPclip {negellipse} {unitcircle peepholed unitsquare} % \simpleMPclip {negdiamond} {unitdiamond peepholed unitsquare} % % \simpleMPclip {urellipse} {urcircle scaled 2 shifted (0,0)} % \simpleMPclip {ulellipse} {ulcircle scaled 2 shifted (1,0)} % \simpleMPclip {llellipse} {llcircle scaled 2 shifted (1,1)} % \simpleMPclip {lrellipse} {lrcircle scaled 2 shifted (0,1)} % % \simpleMPclip {tellipse} {tcircle shifted (.5,0) yscaled 2} % \simpleMPclip {bellipse} {bcircle shifted (.5,.5) yscaled 2} % \simpleMPclip {lellipse} {lcircle shifted (.5,.5) xscaled 2} % \simpleMPclip {rellipse} {rcircle shifted (0,.5) xscaled 2} % % \simpleMPclip {urtriangle} {urtriangle scaled 2 shifted (0,0)} % \simpleMPclip {ultriangle} {ultriangle scaled 2 shifted (1,0)} % \simpleMPclip {lltriangle} {lltriangle scaled 2 shifted (1,1)} % \simpleMPclip {lrtriangle} {lrtriangle scaled 2 shifted (0,1)} %D \in {Figure} [fig:clipping paths] shows which paths are %D predefined. When applied to a whole picture, their usage %D is: %D %D \starttyping %D \clip[nx=1,ny=1,mp=ellipse]{some clippable content} %D \stoptyping %D %D \startbuffer %D \setupclipping [nx=1,ny=1,x=1,y=1] %D \setupblackrules[width=2cm,height=1cm] %D \startcombination[6*3] % \startcombination[6*3] %D {\clip[mp=urellipse] {\blackrule}} {urellipse} %D {\clip[mp=ulellipse] {\blackrule}} {ulellipse} %D {\clip[mp=llellipse] {\blackrule}} {llellipse} %D {\clip[mp=lrellipse] {\blackrule}} {lrellipse} %D {\clip[mp=ellipse] {\blackrule}} {ellipse} %D {\clip[mp=negellipse]{\blackrule}} {negellipse} %D {\clip[mp=tellipse] {\blackrule}} {tellipse} %D {\clip[mp=bellipse] {\blackrule}} {bellipse} %D {\clip[mp=lellipse] {\blackrule}} {lellipse} %D {\clip[mp=rellipse] {\blackrule}} {rellipse} %D {} {} %D {} {} %D {\clip[mp=urtriangle]{\blackrule}} {urtriangle} %D {\clip[mp=ultriangle]{\blackrule}} {ultriangle} %D {\clip[mp=lltriangle]{\blackrule}} {lltriangle} %D {\clip[mp=lrtriangle]{\blackrule}} {lrtriangle} %D {\clip[mp=diamond] {\blackrule}} {diamond} %D {\clip[mp=negdiamond]{\blackrule}} {negdiamond} %D \stopcombination % \stopcombination %D \stopbuffer %D %D \placefigure % \placefigure %D [here][fig:clipping paths] %D {The predefined clipping paths.} %D {\getbuffer} % {\getbuffer} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-cjk.lua0000644000175000017500000002424112130411274024054 0ustar norbertnorbertif not modules then modules = { } end modules ['char-cjk'] = { version = 1.001, comment = "companion to char-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local setmetatable = setmetatable local insert = table.insert local floor = math.floor local format = string.format local utfchar = utf.char local ranges = characters.ranges local allocate = utilities.storage.allocate -- Hangul Syllable -- The following conversion is taken from unicode.org/reports/tr15/tr15-23.html#Hangul -- but adapted to our needs. -- local SBase = 0xAC00 -- -- local LBase, LCount = 0x1100, 19 -- local VBase, VCount = 0x1161, 21 -- local TBase, TCount = 0x11A7, 28 -- -- local NCount = VCount * TCount -- local SCount = LCount * NCount -- -- local function decomposed(unicode) -- local SIndex = unicode - SBase -- if SIndex >= 0 and SIndex < SCount then -- local lead_consonant = LBase + floor( SIndex / NCount) -- local medial_vowel = VBase + floor((SIndex % NCount) / TCount) -- local tail_consonant = TBase + SIndex % TCount -- if tail_consonant ~= TBase then -- return lead_consonant, medial_vowel, tail_consonant -- else -- return lead_consonant, medial_vowel -- end -- end -- end -- -- Lua will optimize the inline constants so the next variant is -- 10% faster. In practice this will go unnoticed, but it's also less -- code, so let's do it. Pushing the constant section into the -- function body saves 5%. local function decomposed(unicode) local index = unicode - 0xAC00 if index >= 0 and index < 19 * 21 * 28 then local lead_consonant = 0x1100 + floor( index / (21 * 28)) local medial_vowel = 0x1161 + floor((index % (21 * 28)) / 28) local tail_consonant = 0x11A7 + index % 28 if tail_consonant ~= 0x11A7 then return lead_consonant, medial_vowel, tail_consonant else return lead_consonant, medial_vowel end end end local lead_consonants = { [0] = "G", "GG", "N", "D", "DD", "R", "M", "B", "BB", "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H" } local medial_vowels = { [0] = "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O", "WA", "WAE", "OE", "YO", "U", "WEO", "WE", "WI", "YU", "EU", "YI", "I" } local tail_consonants = { [0] = "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L", "LG", "LM", "LB", "LS", "LT", "LP", "LH", "M", "B", "BS", "S", "SS", "NG", "J", "C", "K", "T", "P", "H" } -- local function description(unicode) -- local index = unicode - 0xAC00 -- if index >= 0 and index < 19 * 21 * 28 then -- local lead_consonant = floor( index / NCount) -- local medial_vowel = floor((index % NCount) / TCount) -- local tail_consonant = index % TCount -- return format( -- "HANGUL SYLLABLE %s%s%s", -- lead_consonants[lead_consonant], -- medial_vowels [medial_vowel ], -- tail_consonants[tail_consonant] -- ) -- end -- end local function description(unicode) local index = unicode - 0xAC00 if index >= 0 and index < 19 * 21 * 28 then local lead_consonant = floor( index / (21 * 28)) local medial_vowel = floor((index % (21 * 28)) / 28) local tail_consonant = index % 28 return format( "HANGUL SYLLABLE %s%s%s", lead_consonants[lead_consonant], medial_vowels [medial_vowel ], tail_consonants[tail_consonant] ) end end -- so far -- We have a [lead consonant,medial vowel,tail consonant] where the last one -- is optional. For sort ranges we need the first one but some are collapsed. -- Beware, we map to modern so the font should support it. local function leadconsonant(unicode) return -- unicode < 0xAC00 and nil -- original -- unicode > 0xD7AF and nil or -- original unicode >= 0xD558 and 0x314E or -- 하 => ㅎ unicode >= 0xD30C and 0x314D or -- 파 => ㅍ unicode >= 0xD0C0 and 0x314C or -- 타 => ㅌ unicode >= 0xCE74 and 0x314B or -- 카 => ㅋ unicode >= 0xCC28 and 0x314A or -- 차 => ㅊ unicode >= 0xC790 and 0x3148 or -- 자 => ㅈ unicode >= 0xC544 and 0x3147 or -- 아 => ㅇ unicode >= 0xC0AC and 0x3145 or -- 사 => ㅅ unicode >= 0xBC14 and 0x3142 or -- 바 => ㅂ unicode >= 0xB9C8 and 0x3141 or -- 마 => ㅁ unicode >= 0xB77C and 0x3139 or -- 라 => ㄹ unicode >= 0xB2E4 and 0x3137 or -- 다 => ㄷ unicode >= 0xB098 and 0x3134 or -- 나 => ㄴ unicode >= 0xAC00 and 0x3131 or -- 가 => ㄱ nil -- can't happen end local remapped = { -- this might be merged into char-def.lua [0x1100] = 0x3131, -- G [0x1101] = 0x3132, -- GG [0x1102] = 0x3134, -- N [0x1103] = 0x3137, -- D [0x1104] = 0x3138, -- DD [0x1105] = 0x3139, -- R -- [0X111A] = 0x3140, -- LH used for last sound [0x1106] = 0x3141, -- M [0x1107] = 0x3142, -- B [0x1108] = 0x3143, -- BB -- [0x1121] = 0x3144, -- BS used for last sound [0x1109] = 0x3145, -- S [0x110A] = 0x3146, -- SS [0x110B] = 0x3147, -- (IEUNG) no sound but has form [0x110C] = 0x3148, -- J [0x110D] = 0x3149, -- JJ [0x110E] = 0x314A, -- C [0x110F] = 0x314B, -- K [0x1110] = 0x314C, -- T [0x1111] = 0x314D, -- P [0x1112] = 0x314E, -- H [0x1161] = 0x314F, -- A [0x1162] = 0x3150, -- AE [0x1163] = 0x3151, -- YA [0x1164] = 0x3152, -- YAE [0x1165] = 0x3153, -- EO [0x1166] = 0x3154, -- E [0x1167] = 0x3155, -- YEO [0x1168] = 0x3156, -- YE [0x1169] = 0x3157, -- O [0x116A] = 0x3158, -- WA [0x116B] = 0x3159, -- WAE [0x116C] = 0x315A, -- OE [0x116D] = 0x315B, -- YO [0x116E] = 0x315C, -- U [0x116F] = 0x315D, -- WEO [0x1170] = 0x315E, -- WE [0x1171] = 0x315F, -- WI [0x1172] = 0x3160, -- YU [0x1173] = 0x3161, -- EU [0x1174] = 0x3162, -- YI [0x1175] = 0x3163, -- I [0x11A8] = 0x3131, -- G [0x11A9] = 0x3132, -- GG [0x11AA] = 0x3133, -- GS [0x11AB] = 0x3134, -- N [0x11AC] = 0x3135, -- NJ [0x11AD] = 0x3136, -- NH [0x11AE] = 0x3137, -- D [0x11AF] = 0x3139, -- L [0x11B0] = 0x313A, -- LG [0x11B1] = 0x313B, -- LM [0x11B2] = 0x313C, -- LB [0x11B3] = 0x313D, -- LS [0x11B4] = 0x313E, -- LT [0x11B5] = 0x313F, -- LP [0x11B6] = 0x3140, -- LH [0x11B7] = 0x3141, -- M [0x11B8] = 0x3142, -- B [0x11B9] = 0x3144, -- BS [0x11BA] = 0x3145, -- S [0x11BB] = 0x3146, -- SS [0x11BC] = 0x3147, -- NG [0x11BD] = 0x3148, -- J [0x11BE] = 0x314A, -- C [0x11BF] = 0x314B, -- K [0x11C0] = 0x314C, -- T [0x11C1] = 0x314D, -- P [0x11C2] = 0x314E, -- H } characters.hangul = allocate { decomposed = decomposed, description = description, leadconsonant = leadconsonant, remapped = remapped, } -- so far local hangul_syllable_basetable = { category = "lo", cjkwd = "w", description = "", direction = "l", linebreak = "h2", } local hangul_syllable_metatable = { __index = function(t,k) local u = t.unicodeslot if k == "fscode" or k == "leadconsonant" then return leadconsonant(u) elseif k == "decomposed" then return { decomposed(u) } elseif k == "specials" then return { "char", decomposed(u) } elseif k == "description" then return description(u) else return hangul_syllable_basetable[k] end end } function characters.remap_hangul_syllabe(t) local tt = type(t) if tt == "number" then return remapped[t] or t elseif tt == "table" then local r = { } for i=1,#t do local ti = t[i] r[i] = remapped[ti] or ti end return r else return t end end local hangul_syllable_extender = function(k,v) local t = { unicodeslot = k, } setmetatable(t,hangul_syllable_metatable) return t end local hangul_syllable_range = { first = 0xAC00, last = 0xD7A3, extender = hangul_syllable_extender, } setmetatable(hangul_syllable_range, hangul_syllable_metatable) -- CJK Ideograph local cjk_ideograph_metatable = { __index = { category = "lo", cjkwd = "w", description = "", direction = "l", linebreak = "id", } } local cjk_ideograph_extender = function(k,v) local t = { -- shcode = shcode, unicodeslot = k, } setmetatable(t,cjk_ideograph_metatable) return t end local cjk_ideograph_range = { first = 0x4E00, last = 0x9FBB, extender = cjk_ideograph_extender, } -- CJK Ideograph Extension A local cjk_ideograph_extension_a_metatable = { __index = { category = "lo", cjkwd = "w", description = "", direction = "l", linebreak = "id", } } local cjk_ideograph_extension_a_extender = function(k,v) local t = { -- shcode = shcode, unicodeslot = k, } setmetatable(t,cjk_ideograph_extension_a_metatable) return t end local cjk_ideograph_extension_a_range = { first = 0x3400, last = 0x4DB5, extender = cjk_ideograph_extension_a_extender, } -- CJK Ideograph Extension B local cjk_ideograph_extension_b_metatable = { __index = { category = "lo", cjkwd = "w", description = "", direction = "l", linebreak = "id", } } local cjk_ideograph_extension_b_extender = function(k,v) local t = { -- shcode = shcode, unicodeslot = k, } setmetatable(t,cjk_ideograph_extension_b_metatable) return t end local cjk_ideograph_extension_b_range = { first = 0x20000, last = 0x2A6D6, extender = cjk_ideograph_extension_b_extender, } -- Ranges insert(ranges, hangul_syllable_range) insert(ranges, cjk_ideograph_range) insert(ranges, cjk_ideograph_extension_a_range) insert(ranges, cjk_ideograph_extension_b_range) context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mxh.mkii0000644000175000017500000000717111571377075024324 0ustar norbertnorbert\defineMMLsynonym approx ap \defineMMLsynonym Because becaus \defineMMLsynonym because becaus \defineMMLsynonym blacksquare squarf \defineMMLsynonym bot bottom \defineMMLsynonym circ compfn \defineMMLsynonym ClockwiseContourIntegral cwconint \defineMMLsynonym Congruent equiv \defineMMLsynonym ContourIntegral conint \defineMMLsynonym CounterClockwiseContourIntegral awconint \defineMMLsynonym Del nabla \defineMMLsynonym DoubleContourIntegral Conint \defineMMLsynonym DoubleLeftArrow lArr \defineMMLsynonym DoubleRightArrow rArr \defineMMLsynonym DoubleVerticalBar par \defineMMLsynonym DownTee top \defineMMLsynonym Element isinv \defineMMLsynonym Exists exist \defineMMLsynonym ForAll forall \defineMMLsynonym geq ge \defineMMLsynonym GreaterEqual ge \defineMMLsynonym iiiint qint \defineMMLsynonym iiint tint \defineMMLsynonym Implies rArr \defineMMLsynonym in isin \defineMMLsynonym Integral int \defineMMLsynonym langle lang \defineMMLsynonym LeftAngleBracket lang \defineMMLsynonym Leftarrow lArr \defineMMLsynonym leq le \defineMMLsynonym MinusPlus mnplus \defineMMLsynonym mp mnplus \defineMMLsynonym NotElement notin \defineMMLsynonym NotEqual ne \defineMMLsynonym NotReverseElement notniva \defineMMLsynonym oint conint \defineMMLsynonym parallel par \defineMMLsynonym PartialD part \defineMMLsynonym Proportional prop \defineMMLsynonym propto prop \defineMMLsynonym rangle rang \defineMMLsynonym ReverseElement niv \defineMMLsynonym RightAngleBracket rang \defineMMLsynonym Rightarrow rArr \defineMMLsynonym simeq sime \defineMMLsynonym SmallCircle compfn \defineMMLsynonym Sqrt radic \defineMMLsynonym Subset sub \defineMMLsynonym subset sub \defineMMLsynonym subseteq sube \defineMMLsynonym SubsetEqual sube \defineMMLsynonym SuchThat ni \defineMMLsynonym Superset sup \defineMMLsynonym SupersetEqual supe \defineMMLsynonym supset sup \defineMMLsynonym supseteq supe \defineMMLsynonym Therefore there4 \defineMMLsynonym therefore there4 \defineMMLsynonym Tilde sim \defineMMLsynonym TildeEqual sime \defineMMLsynonym TildeFullEqual cong \defineMMLsynonym TildeTilde ap \defineMMLsynonym TripleDot tdot \defineMMLsynonym UpTee perp \defineMMLsynonym vee or \defineMMLsynonym Vert Verbar \defineMMLsynonym wedge and context-2013.05.28.20130704/texmf-dist/tex/context/base/util-pck.lua0000644000175000017500000000725112134352503024127 0ustar norbertnorbertif not modules then modules = { } end modules ['util-pck'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- moved from core-uti local next, tostring, type = next, tostring, type local sort, concat = table.sort, table.concat local sortedhashkeys, sortedkeys = table.sortedhashkeys, table.sortedkeys utilities = utilities or { } utilities.packers = utilities.packers or { } local packers = utilities.packers packers.version = 1.00 local function hashed(t) local s, ns = { }, 0 for k, v in next, t do ns = ns + 1 if type(v) == "table" then s[ns] = k .. "={" .. hashed(v) .. "}" else s[ns] = k .. "=" .. tostring(v) end end sort(s) return concat(s,",") end local function simplehashed(t) local s, ns = { }, 0 for k, v in next, t do ns = ns + 1 s[ns] = k .. "=" .. v end sort(s) return concat(s,",") end packers.hashed = hashed packers.simplehashed = simplehashed -- In luatex < 0.74 (lua 5.1) a next chain was the same for each run so no sort was needed, -- but in the latest greatest versions (lua 5.2) we really need to sort the keys in order -- not to get endless runs due to a difference in tuc files. local function pack(t,keys,hash,index) if t then -- for k, v in next, t do -- local sk = sortedkeys(t) local sk = sortedhashkeys(t) for i=1,#sk do local k = sk[i] local v = t[k] -- if type(v) == "table" then pack(v,keys,hash,index) if keys[k] then local h = hashed(v) local i = hash[h] if not i then i = #index + 1 index[i] = v hash[h] = i end t[k] = i end end end end end local function unpack(t,keys,index) if t then for k, v in next, t do if keys[k] and type(v) == "number" then local iv = index[v] if iv then v = iv t[k] = v end end if type(v) == "table" then unpack(v,keys,index) end end end end function packers.new(keys,version) return { version = version or packers.version, keys = table.tohash(keys), hash = { }, index = { }, } end function packers.pack(t,p,shared) if shared then pack(t,p.keys,p.hash,p.index) elseif not t.packer then pack(t,p.keys,p.hash,p.index) if #p.index > 0 then t.packer = { version = p.version or packers.version, keys = p.keys, index = p.index, } end p.hash = { } p.index = { } end end function packers.unpack(t,p,shared) if shared then if p then unpack(t,p.keys,p.index) end else local tp = t.packer if tp then if tp.version == (p and p.version or packers.version) then unpack(t,tp.keys,tp.index) else return false end t.packer = nil end end return true end function packers.strip(p) p.hash = nil end -- We could have a packer.serialize where we first flush the shared table -- and then use inline a reference . This saves an unpack. context-2013.05.28.20130704/texmf-dist/tex/context/base/rlxtools.rlx0000644000175000017500000001402710544453324024316 0ustar norbertnorbert /.eps /.pdf texmfstart pstopdf --convert /.svg /.pdf texmfstart pstopdf --convert /.svgz /.pdf texmfstart pstopdf --convert / / texmfstart pstopdf --convert --method=4 --inputpath= --outputpath=/ / / texmfstart pstopdf --convert --method=4 --inputpath= --outputpath=/ /.gif /.pdf texmfstart pstopdf --convert --inputpath= --outputpath= .gif /.tif /.pdf texmfstart pstopdf --convert --inputpath= --outputpath= .tif /.tiff /.pdf texmfstart pstopdf --convert --inputpath= --outputpath= .tiff / / texmfstart pstopdf --convert --method=3 --inputpath= --outputpath=/ context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-lan.mkiv0000644000175000017500000000322312130411274024317 0ustar norbertnorbert%D \module %D [ file=typo-lan, %D version=2013.03.22, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Language Goodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typography Macros / Languages} \unprotect \registerctxluafile{typo-lan}{1.001} %D \macros %D {averagecharwidth, charwidthlanguage} %D %D This is a more \MKIV-ish variant of lang-frq.mkiv. The methods are %D gone as one doesn't need the tables for them. The main macro is %D \type {\averagecharwidth} which behaves like a dimension register. %D %D I finally decided to reimplement this as I needed it for a manual %D (which is often a reason for such a rewrite). With some inspiring %D Porcupine Tree in the background it's not the worst thing to do. \def\charwidthlanguage{\currentmainlanguage} \def\averagecharwidth{\dimexpr\ctxcommand{averagecharwidth("\charwidthlanguage")}\scaledpoint\relax} \protect \continueifinputfile{typo-lan.mkiv} \setuplayout[backspace=4cm] \showframe \starttext \startbuffer \mainlanguage[en] \hsize65\averagecharwidth \normalexpanded{\inleft{\the\hsize}} \input ward \par \mainlanguage[de] \hsize65\averagecharwidth \normalexpanded{\inleft{\the\hsize}} \input ward \par \mainlanguage[nl] \hsize65\averagecharwidth \normalexpanded{\inleft{\the\hsize}} \input ward \par \stopbuffer \getbuffer \blank \switchtobodyfont[pagella] \getbuffer \blank \switchtobodyfont[tt,8pt] \getbuffer \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-ini.mkii0000644000175000017500000007644311754241457024353 0ustar norbertnorbert%D \module %D [ file=syst-ini, %D version=2008.11.04, % 2001.11.16, % 1999.03.17, % an oldie: 1995.10.10 %D title=\CONTEXT\ System Macros, %D subtitle=Bootstrapping \TEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We used to load plain \TEX\ in a special way, but redefining %D a couple of primitives so that for instance font loading was %D ignored. For those interested, this loader is found in %D \type {syst-tex.tex}. Some of the comment's are Don Knuth's %D and more of it can be found in the plain \TEX\ format. %D Characters can have special states, that can be triggered %D by setting their category coded. Some are preset, others %D are to be set as soon as possible, otherwise we cannot %D define any useful macros. %catcode`\^^@ = 9 % ascii null is ignored %catcode`\\ = 0 % backslash is TeX escape character \catcode`\{ = 1 % left brace is begin-group character \catcode`\} = 2 % right brace is end-group character \catcode`\$ = 3 % dollar sign is math shift \catcode`\& = 4 % ampersand is alignment tab \catcode`\# = 6 % hash mark is macro parameter character \catcode`\^ = 7 % circumflex and uparrow are for superscripts \catcode`\_ = 8 % underline and downarrow are for subscripts \catcode`\^^I = 10 % ascii tab is a blank space %catcode`\^^M = 5 % ascii return is end-line %catcode`\% = 14 % percent sign is comment character %catcode`\ = 10 % ascii space is blank space %catcode`\^^? = 15 % ascii delete is invalid \catcode`\~ = 13 % tilde is active \catcode`\^^L = 13 % ascii form-feed %catcode`\A = 11 %....... %catcode`\Z = 11 %catcode`\a = 11 %....... %catcode`\z = 11 \chardef\activecatcode = 13 % later this will become a counter \def ^^L{\par} \def\^^M{\ } % control = control \def\^^I{\ } % same for %D In \CONTEXT, we simply ignore end||of||file tokens: \catcode`\^^Z=9 %D It makes sense to know what engine we're running so let's %D try to deduce it. \chardef\unknownengine = 0 \chardef\pdftexengine = 1 \chardef\xetexengine = 2 \chardef\luatexengine = 3 \ifx\directlua\undefined \ifx\XeTeXversion\undefined \ifx\pdftexversion\undefined \let\texengine\unknownengine \else \let\texengine\pdftexengine \fi \else \let\texengine\xetexengine \fi \else \let\texengine\luatexengine \fi \ifnum\texengine=\unknownengine \immediate\write16{>>>} \immediate\write16{>>> only pdftex, xetex and luatex are supported} \immediate\write16{>>>} \let\dump\relax \expandafter\end \fi % todo: pdfsave pdfrestore pdfcolor... don't initialize them \ifnum\texengine=\luatexengine \directlua 0 { % this info is stored in the format lua.name[0] = "main ctx instance" local extraprimitives = tex.extraprimitives local enableprimitives = tex.enableprimitives local core = extraprimitives('core') local btex = extraprimitives('tex') local etex = extraprimitives('etex') local pdftex = extraprimitives('pdftex') local luatex = extraprimitives('luatex') local omega = { "textdir", "pagedir", "mathdir", "pardir", "bodydir", "leftghost", "rightghost", "localleftbox", "localrightbox", "localinterlinepenalty", "localbrokenpenalty", } local aleph = { "boxdir", "pagebottomoffset", "pagerightoffset", } for _, subset in next, { etex, pdftex, luatex, omega, aleph } do enableprimitives('',subset) end for _, subset in next, { core, btex, etex, pdftex, luatex, omega, aleph } do enableprimitives('normal',subset) end } \fi %D \ETEX\ has a not so handy way of telling you the version number, %D i.e. the revision number has a period in it: \long\def\gobbleoneargument#1{} % will be defined later on anyway \mathchardef\etexversion = \numexpr\eTeXversion*100+\expandafter\gobbleoneargument\eTeXrevision\relax %D First we define a simplified version of the \CONTEXT\ %D protection mechanism. \def\unprotect{\catcode`@=11 } \def\protect {\catcode`@=12 } \unprotect %D Some pretty important definitions: \let\bgroup={ \let\egroup=} %D Allocation of registers is done slightly different than in plain %D \TEX. First of all we use different reserved counters. We also %D don't implement a family handler because users are not supposed %D to implement their own math. We reserve the lowest 31 registers %D for scratch purposes. Keep in mind that in the core engine %D some registers are reserved: counters 0 upto 9, and counter 255. %D %D As with plain \TEX\ we recommend that macro designers always use %D \type {\global} assignments with respect to registers numbered 1, %D 3, 5 \unknown\ 31, and always non||\type {\global} assignments %D with respect to registers 0, 2, 4, \unknown\ 30. This will prevent %D \quote {save stack buildup} that might otherwise occur. %D %D We reserve some registers for special (management) purposes: % 0 - 20 : scratch % 21 - 127 : internal % 128 - 254 : inserts % 255 : page % 256 - : user \countdef \minallocatedregister = 52 \minallocatedregister = 256 \countdef \maxallocatedregister = 53 \maxallocatedregister = 32767 \countdef \minallocatediochannel = 54 \minallocatediochannel = -1 \countdef \maxallocatediochannel = 55 \maxallocatediochannel = 16 \countdef \minallocatedlanguage = 56 \minallocatedlanguage = 0 \countdef \maxallocatedlanguage = 57 \maxallocatedlanguage = 255 \countdef \maxallocatedinsert = 58 \maxallocatedinsert = 254 \countdef \minallocatedinsert = 59 \minallocatedinsert = 128 \countdef \minallocatedfamily = 60 \minallocatedfamily = 128 \countdef \maxallocatedfamily = 61 \maxallocatedfamily = 255 \countdef \lastallocatedcount = 32 \lastallocatedcount = \minallocatedregister \countdef \lastallocateddimen = 33 \lastallocateddimen = \minallocatedregister \countdef \lastallocatedskip = 34 \lastallocatedskip = \minallocatedregister \countdef \lastallocatedmuskip = 35 \lastallocatedmuskip = \minallocatedregister \countdef \lastallocatedbox = 36 \lastallocatedbox = \minallocatedregister \countdef \lastallocatedtoks = 37 \lastallocatedtoks = \minallocatedregister \countdef \lastallocatedread = 38 \lastallocatedread = \minallocatediochannel \countdef \lastallocatedwrite = 39 \lastallocatedwrite = \minallocatediochannel \countdef \lastallocatedmarks = 40 \lastallocatedmarks = \minallocatedregister \countdef \lastallocatedlanguage = 41 \lastallocatedlanguage = \minallocatedlanguage % not used in context \countdef \lastallocatedinsertion = 42 \lastallocatedinsertion = \minallocatedinsert \countdef \lastallocatedfamily = 43 \lastallocatedfamily = \minallocatedfamily % not used in context \countdef \lastallocatedattribute = 44 \lastallocatedattribute = \minallocatedregister \countdef \mincountervalue = 125 \mincountervalue = -"7FFFFFFF % beware, we use index 125 at the lua end \countdef \maxcountervalue = 126 \maxcountervalue = "7FFFFFFF % beware, we use index 126 at the lua end %countdef \minusone = 127 \minusone = -1 %chardef \zerocount = 0 %chardef \plusone = 1 \countdef \zerocount = 120 \zerocount = 0 \countdef \plusone = 121 \plusone = 1 \countdef \minusone = 122 \minusone = -1 %chardef \normalpagebox = 255 \countdef \normalpagebox = 127 \normalpagebox = 255 % hardcoded in pdftex/xetex % A few traditional allocations: \countdef \count@ = 255 % hm, used in \newif .. todo: replace it there \dimendef \dimen@ = 0 \dimendef \dimen@i = 1 % global only \dimendef \dimen@ii = 2 %D So, effectively we start allocating from 256 and upwards. The %D inserts sit in the range 128 upto 254. Page numbers use the %D counters 0 upto 9 and the pagebox is 255. Users can use the %D scratch registers upto 31 without problem but all others are %D reserved. \def\wlog#1{} % \def\wlog{\immediate\write\minusone} % write on log file (only) %D The allocators share a common helper macro. \def\newcount {\allocateregister\lastallocatedcount \count \countdef \maxallocatedregister} \def\newdimen {\allocateregister\lastallocateddimen \dimen \dimendef \maxallocatedregister} \def\newskip {\allocateregister\lastallocatedskip \skip \skipdef \maxallocatedregister} \def\newmuskip {\allocateregister\lastallocatedmuskip \muskip \muskipdef \maxallocatedregister} \def\newbox {\allocateregister\lastallocatedbox \box \mathchardef\maxallocatedregister} \def\newtoks {\allocateregister\lastallocatedtoks \toks \toksdef \maxallocatedregister} \def\newread {\allocateregister\lastallocatedread \read \chardef \maxallocatediochannel} \def\newwrite {\allocateregister\lastallocatedwrite \write \chardef \maxallocatediochannel} \def\newmarks {\allocateregister\lastallocatedmarks \marks \mathchardef\maxallocatedregister} \def\newinsert {\allocateregister\lastallocatedinsertion\insert \chardef \maxallocatedinsert} %D We don't need these in \CONTEXT: \def\newlanguage{\allocateregister\lastallocatedlanguage \language\chardef \maxallocatedlanguage} \def\newfamily {\allocateregister\lastallocatedfamily \fam \chardef \maxallocatedfamily} \let\newfam\newfamily % Watch out, for the moment we disable the check for already being defined % later we will revert this but first all chardefs must be replaced. \def\newconstant #1{\ifdefined#1\let#1\undefined\fi\newcount#1} \def\setnewconstant#1{\ifdefined#1\let#1\undefined\fi\newcount#1#1} % just a number % maybe setconstant with check % %D The next definitions are really needed (in \CONTEXT): %newlinechar=10 \def\outputnewlinechar{\rawcharacter{10}} \newlinechar=10 \edef\outputnewlinechar{^^J} %D One reason to start high with allocation is that it permits us to %D allocate consecutive ranges more easily, for instance in \MPLIB\ %D we want to allocate a continuous range of boxes. It also permits us %D to do a proper upward allocation for inserts. The current code %D evolved from code that dealt with older engines but as all engines %D now provide many registers we removed all traces. \def\writestatus#1#2{\immediate\write16{#1: #2}} \def\space { } \def\allocateregisteryes#1#2#3#4#5% last class method max name {\ifnum#1<#4\relax \global\advance#1\plusone \global#3#5=#1\relax \else \writestatus{warning}{no room for \string#2\space \string#5\space (max: \number#4)}% \fi} \def\allocateregisternop#1#2#3#4#5% last class method max name {\writestatus{warning}{\string#2 \string#5 is already defined (\string\relax\space it first)}} \def\allocateregister#1#2#3#4#5% last class method max name {\ifx#5\undefined \expandafter\allocateregisteryes \else\ifx#5\relax \expandafter\expandafter\expandafter\allocateregisteryes \else \expandafter\expandafter\expandafter\allocateregisternop \fi\fi #1#2#3#4#5} %D Since the number of chars exceed 256 now, we can use \type %D {\chardef} instead of the more limited \type {\mathchardef}. \ifnum\texengine>\pdftexengine \def\newbox {\allocateregister\lastallocatedbox \box \chardef\maxallocatedregister} \def\newmarks{\allocateregister\lastallocatedmarks\marks\chardef\maxallocatedregister} \fi %D Attributes are something very \LUATEX. In \CONTEXT\ you are not %D supposed to use the attributes directly but always allocate then %D first. For instance attribute~0 is reserved for special purposes %D (this might change). \ifnum\texengine=\luatexengine \let\attributeunsetvalue\mincountervalue % used to be \minusone \def\newattribute{\allocateregister\lastallocatedattribute\attribute\attributedef\maxallocatedregister} \fi %D Not used by \CONTEXT\ but for instance \PICTEX\ needs it. It's a %D trick to force strings instead of tokens that take more memory. %D It's a trick to trick to force strings. \def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} %D \macros %D {scratchcounter, %D scratchdimen,scratchskip,scratchmuskip, %D scratchbox, %D scratchtoks} %D %D We now define a few scratch registers, so that successive %D loads at least have some available. \newcount \scratchcounter \newcount \globalscratchcounter \newdimen \scratchdimen \newdimen \globalscratchdimen \newskip \scratchskip \newskip \globalscratchskip \newmuskip \scratchmuskip \newmuskip \globalscratchmuskip \newtoks \scratchtoks \newtoks \globalscratchtoks \newbox \scratchbox \newbox \globalscratchbox \newcount\scratchcounterone \newcount\scratchcountertwo \newcount\scratchcounterthree \newdimen \scratchdimenone \newdimen \scratchdimentwo \newdimen \scratchdimenthree \newdimen \scratchskipone \newdimen \scratchskiptwo \newdimen \scratchskipthree \newbox \scratchmuskipone \newbox \scratchmuskiptwo \newbox \scratchmuskipthree \newtoks \scratchtoksone \newtoks \scratchtokstwo \newtoks \scratchtoksthree \newbox \scratchboxone \newbox \scratchboxtwo \newbox \scratchboxthree %D More allocations: \newskip \zeroskip \zeroskip = 0pt plus 0pt minus 0pt \newdimen\zeropoint \zeropoint = 0pt \newdimen\onepoint \onepoint = 1pt \newdimen\maxdimen \maxdimen = 16383.99999pt \newdimen\onebasepoint \onebasepoint = 1bp \newdimen\scaledpoint \scaledpoint = 1sp \newdimen\thousandpoint\thousandpoint= 1000pt \let\points\onepoint \newtoks \emptytoks %D And even more: (todo: countdefs 60+) %newcount \minusone \minusone = -1 \newcount \minustwo \minustwo = -2 %chardef \zerocount = 0 %chardef \plusone = 1 \chardef \plustwo = 2 \chardef \plusthree = 3 \chardef \plusfour = 4 \chardef \plusfive = 5 \chardef \plussix = 6 \chardef \plusseven = 7 \chardef \pluseight = 8 \chardef \plusnine = 9 \chardef \plusten = 10 \chardef \plussixteen = 16 \chardef \plushundred = 100 \chardef \pluscxxvii = 127 \chardef \pluscxxviii = 128 \chardef \pluscclv = 255 \ifnum\texengine=\luatexengine \chardef \pluscclvi = 256 \chardef \plusthousand = 1000 \chardef \plustenthousand = 10000 \chardef \plustwentythousand = 20000 \chardef \medcard = 32768 \chardef \maxcard = 65536 % pdftex has less mathchars \else \mathchardef\pluscclvi = 256 \mathchardef\plusthousand = 1000 \mathchardef\plustenthousand = 10000 \mathchardef\plustwentythousand = 20000 \newcount \medcard \medcard = 32768 % pdftex has less mathchars \newcount \maxcard \maxcard = 65536 % pdftex has less mathchars \fi %D We prefer the more readable variant than in plain %D \TEX. User should only use \type {\emptybox}: \newbox\voidbox % public \let\normalhbox\hbox \let\normalvbox\vbox \def\unvoidbox{\unhbox\voidbox} \def\emptybox {\box \voidbox} % used in initializations so no attributes \def\emptyvbox{\normalvbox{}} % no copy as we need to set attributes \def\emptyhbox{\normalhbox{}} % no copy as we need to set attributes \let\leavevmode\unvoidbox % we prefer to use \dontleavehmode %D Some expected plain variants follow. We don't reuse registers %D because we don't want clashes. \newdimen\p@ \p@ \onepoint \newcount\m@ne \m@ne \minusone \newdimen\z@ \z@ \zeropoint \let \@ne \plusone \let \tw@ \plustwo \let \thr@@ \plusthree \let \sixt@@n \sixteen \let \@cclv \pluscclv \let \@cclvi \pluscclvi \newbox \voidb@x \newtoks \toks@ %D We define \type {\newif} a la plain \TEX, but will %D redefine it later. As Knuth says: %D %D \startnarrower %D And here's a different sort of allocation: for example, %D %D \starttyping %D \newif\iffoo %D \stoptyping %D %D creates \type {\footrue}, \type {\foofalse} to go %D with \type {\iffoo}. %D \stopnarrower \def\newif#1% {\count@\escapechar \escapechar\minusone \expandafter\expandafter\expandafter\def\@if #1{true}{\let#1\iftrue }% \expandafter\expandafter\expandafter\def\@if#1{false}{\let#1\iffalse}% \@if#1{false}% the condition starts out false \escapechar\count@} \def\@if#1#2% {\csname\expandafter\if@\string#1#2\endcsname} \bgroup % `if' is required \uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}} \egroup %D Let's test this one: \newif\ifdone %D Potential primitive in \LUATEX: \ifdefined\htdp \else \def\htdp#1{\dimexpr\ht#1+\dp#1\relax} \fi %D \macros %D {@@escape,@@begingroup,@@endgroup,@@mathshift,@@alignment, %D @@endofline,@@parameter,@@superscript,@@subscript, %D @@ignore,@@space,@@letter,@@other,@@active,@@comment} %D %D In \CONTEXT\ we sometimes manipulate the \CATCODES\ of certain %D characters. Because we are not that good at remembering numbers, %D we introduce some symbolic names. %D As we now have catc-* files, we also have more readable names but %D We will keep the following around for a while. \chardef\@@escape = 0 \chardef\@@begingroup = 1 \chardef\@@endgroup = 2 \chardef\@@mathshift = 3 \chardef\@@alignment = 4 \chardef\@@endofline = 5 \chardef\@@parameter = 6 \chardef\@@superscript = 7 \chardef\@@subscript = 8 \chardef\@@ignore = 9 \chardef\@@space = 10 \chardef\@@letter = 11 \chardef\@@other = 12 \chardef\@@active = 13 \chardef\@@comment = 14 %D Constants to be used with \type {\currentgrouptype}. \chardef\@@bottomlevelgroup = 0 \chardef\@@simplegroup = 1 \chardef\@@hboxgroup = 2 \chardef\@@adjustedhboxgroup = 3 \chardef\@@vboxgroup = 4 \chardef\@@vtopgroup = 5 \chardef\@@aligngroup = 6 \chardef\@@noaligngroup = 7 \chardef\@@outputgroup = 8 \chardef\@@mathgroup = 9 \chardef\@@discretionarygroup = 10 \chardef\@@insertgroup = 11 \chardef\@@vcentergroup = 12 \chardef\@@mathchoicegroup = 13 \chardef\@@semisimplegroup = 14 \chardef\@@mathshiftgroup = 15 \chardef\@@mathleftgroup = 16 \chardef\@@vadjustgroup = \@@insertgroup %D Constants to be used with \type {\interactionmode}. \chardef\@@batchmode = 0 \chardef\@@nonstopmode = 1 \chardef\@@scrollmode = 2 \chardef\@@errorstopmode = 3 %D Constants to be used with \type {\lastnodetype}. The \type %D {\lastnodetype} primitive is \ETEX\ compliant. The valid range is %D still -1 .. 15 and glyph nodes have number 0 (used to be char %D node) and ligature nodes are mapped to 7. That way macro packages %D can use the same symbolic names as in traditional \ETEX. Keep in %D mind that the internal node numbers are different and that there %D are more node types that 15. \chardef\@@charnode = 0 \chardef\@@hlistnode = 1 \chardef\@@vlistnode = 2 \chardef\@@rulenode = 3 \chardef\@@insertnode = 4 \chardef\@@marknode = 5 \chardef\@@adjustnode = 6 \chardef\@@ligaturenode = 7 \chardef\@@discretionarynode = 8 \chardef\@@whatsitnode = 9 \chardef\@@mathnode = 10 \chardef\@@gluenode = 11 \chardef\@@kernnode = 12 \chardef\@@penaltynode = 13 \chardef\@@unsetnode = 14 \chardef\@@mathsnode = 15 %D Constants to be used with \type {\currentiftype}. \chardef\@@charif = 1 \chardef\@@catif = 2 \chardef\@@numif = 3 \chardef\@@dimif = 4 \chardef\@@oddif = 5 \chardef\@@vmodeif = 6 \chardef\@@hmodeif = 7 \chardef\@@mmodeif = 8 \chardef\@@innerif = 9 \chardef\@@voidif = 10 \chardef\@@hboxif = 11 \chardef\@@vboxif = 12 \chardef\@@xif = 13 \chardef\@@eofif = 14 \chardef\@@trueif = 15 \chardef\@@falseif = 16 \chardef\@@caseif = 17 \chardef\@@definedif = 18 \chardef\@@csnameif = 19 \chardef\@@fontcharif = 20 %D Of course we want even bigger log files, so we copied this %D from the \ETEX\ source files. %D %D When watching such logs, beware of nasty side effects of %D \type {\scantokens}, as in: %D %D \starttyping %D \bgroup %D \lccode`a=12\lowercase{\xdef\whatever{a}}\egroup %D \def\whatever{test \whatever test} %D \scantokens\expandafter{\whatever} %D \egroup %D \stoptyping %D %D In \LUATEX\ we have ways around this. \def\tracingall {\tracingonline \plusone \tracingcommands \plusthree \tracingstats \plustwo \tracingpages \plusone \tracingoutput \plusone \tracinglostchars \plustwo \tracingmacros \plustwo \tracingparagraphs\plusone \tracingrestores \plusone \showboxbreadth \maxdimen \showboxdepth \maxdimen \tracinggroups \plusone \tracingifs \plusone \tracingscantokens\plusone \tracingnesting \plusone \tracingassigns \plustwo \errorstopmode} \def\loggingall {\tracingall \tracingonline \zerocount} \def\tracingnone {\tracingassigns \zerocount \tracingnesting \zerocount \tracingscantokens\zerocount \tracingifs \zerocount \tracinggroups \zerocount \showboxdepth \plusthree \showboxbreadth \plusfive \tracingrestores \zerocount \tracingparagraphs\zerocount \tracingmacros \zerocount \tracinglostchars \plusone \tracingoutput \zerocount \tracingpages \zerocount \tracingstats \zerocount \tracingcommands \zerocount \tracingonline \zerocount} %D Just for tracing purposes we set: \tracingstats\plusone %D Here we also save \type {\input}, more will be saved later. \ifdefined\normalinput \else \let\normalinput\input \fi %D We don't like outer commands, and we always want access %D to the original \type {\input} primitive. \let\normalouter\outer \def\outer{} % no longer \relax %D To circumvent dependencies, we can postpone certain %D initializations to dumping time, by appending them to the %D \type {\everydump} token register. \ifdefined\normaldump \else \let\normaldump\dump \fi \newtoks\everydump \def\dump{\the\everydump\normaldump} %D The same applies for the startup actions. \ifdefined\normaleveryjob \else \let\normaleveryjob\everyjob \fi \let\everyjob\relax \newtoks\everyjob \normaleveryjob{\the\everyjob} \def\appendtotoks #1{\def\temp{#1}\afterassignment\doappendtotoks \scratchtoks=} \def\prependtotoks#1{\def\temp{#1}\afterassignment\doprependtotoks\scratchtoks=} \def\doappendtotoks {\expandafter\expandafter\expandafter{\expandafter\the\expandafter\temp\the\scratchtoks}} \def\doprependtotoks{\expandafter\expandafter\expandafter{\expandafter\the\expandafter\scratchtoks\the\temp}} %D \macros %D {begcsname} %D %D Handy for \ETEX-only usage (avoids making \type {\relax}'s: \def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi} %D Now come a few macros that might be needed in successive loading: \let\endgraf\par \let\endline\cr \def\space{ } \def\empty{} \def\null {\hbox{}} %D The following two might be overloaded later on but some modules need %D then earlier. These functionality is reflected in the name and will not %D change. \bgroup \catcode`\^^M=\activecatcode% \gdef\obeylines{\catcode`\^^M\activecatcode \let^^M\par}% \global\let^^M\par% \egroup \bgroup \gdef\obeyspaces{\catcode`\ \activecatcode}% \obeyspaces\global\let =\space% \egroup %D A constant: \let\endoflinetoken=^^M %D Also needed might be a simple loop structure and we borrow %D plain \TEX's one as it is often expected to be present and %D it is about the fastest you can get. Beware: this macro %D does not support nested loops. We use a namespace prefix %D \type {@@pln}. \long\def\loop#1\repeat{\long\def\@@plnbody{#1}\@@plniterate} %D The following makes \type {\loop} \unknown\ \type {\if} %D \unknown\ \type {\repeat} skippable (clever trick): \let\repeat\fi % so both \loop and \repeat are reserved words! %D The original (no \type {@@pln} there): %D %D \starttyping %D \def\@@plniterate{\@@plnbody\let\next\@@plniterate\else\let\next\relax\fi\next} %D \stoptyping %D %D A more efficient alternative: %D %D \starttyping %D \def\@@plniterate{\@@plnbody\expandafter\@@plniterate\else\expandafter\relax\fi} %D \stoptyping %D %D An even more efficient one: \def\@@plniterate{\@@plnbody\expandafter\@@plniterate\else\fi} %D We don't define a real output routine yet but at least get rid %D of pages: \output{\shipout\box\normalpagebox} %D Although we don't add pagenumbers yet we alias the default %D register used for counting pages: \countdef\pageno=0 \pageno=1 % first page is number 1 %D Beside the raw counter \type {\pageno} the \type {\folio} %D macro provides the value. \def\folio{\the\pageno} % kind of expected and therefore reserved %D The following registers are kind of standard and (for the moment) %D we define them here. This might change. \newskip \bigskipamount \bigskipamount = 12pt plus 4pt minus 4pt \newskip \medskipamount \medskipamount = 6pt plus 2pt minus 2pt \newskip \smallskipamount \smallskipamount = 3pt plus 1pt minus 1pt \baselineskip = 12pt \lineskip = 1pt \lineskiplimit = 0pt %D Again a few kind-of-extensions the core: \newskip \hideskip \hideskip = -1000pt plus 1fill \newskip \centering \centering = 0pt plus 1000pt minus 1000pt \def\hidewidth % for alignment entries that can stick out {\hskip\hideskip} \def\ialign % initialized \halign {\everycr{}% \tabskip\zeroskip \halign} \newcount \mscount \def\spanomit{\span\omit} % bypass error message \def\multispan#1% {\omit \mscount#1\relax \loop \ifnum\mscount>\plusone \spanomit \advance\mscount\minusone \repeat} %D The next section deals with selective definitions in %D later modules. One can of course use the \type {\texengine} %D number that we defined earlier instead. \bgroup \obeylines \gdef\pickupSOMETEX#1% {\expandafter\gdef\csname begin#1\endcsname{\bgroup\obeylines\dopickupSOMETEX{#1}}} \gdef\dopickupSOMETEX#1#2 % {\egroup\immediate\write16{special code for #1 -> [line \the\inputlineno] \detokenize{#2}}} {\egroup} \egroup \let\endTEX \relax \long\def\beginTEX #1\endTEX {} \let\endETEX \relax \long\def\beginETEX #1\endETEX {} \let\endXETEX \relax \long\def\beginXETEX #1\endXETEX {} \let\endLUATEX\relax \long\def\beginLUATEX#1\endLUATEX{} \let\endOLDTEX\relax \long\def\beginOLDTEX#1\endOLDTEX{} \let\endNEWTEX\relax \long\def\beginNEWTEX#1\endNEWTEX{} \pickupSOMETEX{ETEX} \ifnum\texengine=\xetexengine \pickupSOMETEX{XETEX} \fi \ifnum\texengine=\luatexengine \pickupSOMETEX{LUATEX} \fi \ifnum\texengine<\xetexengine \pickupSOMETEX{OLDTEX} \else \pickupSOMETEX{NEWTEX} \fi %D \macros %D {bindprimitive} %D %D We can remap primitives (which is needed because of changes in %D for instance \PDFTEX). \def\bindprimitive#1 #2 % new old {\ifcsname#1\endcsname \else \ifcsname#2\endcsname \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname \fi \fi} %D Because \XETEX\ also implements some \PDFTEX\ functionality, we take %D care of this here instead of a dedicated module. Later modules need %D to handle the undefined cases. %D These messy checks will disappear. % new after 1.10, watch the change in prefix \bindprimitive quitvmode ptexquitvmode \bindprimitive noligatures ptexnoligatures \bindprimitive setrandomseed ptexsetrandomseed \bindprimitive uniformdeviate ptexuniformdeviate \bindprimitive quitvmode pdfquitvmode \bindprimitive noligatures pdfnoligatures \bindprimitive setrandomseed pdfsetrandomseed \bindprimitive uniformdeviate pdfuniformdeviate \bindprimitive resettimer pdfresettimer \bindprimitive elapsedtime pdfelapsedtime % new per 1.40 \bindprimitive ifprimitive ifpdfprimitive \bindprimitive primitive pdfprimitive \bindprimitive ifabsdim ifpdfabsdim \bindprimitive ifabsnum ifpdfabsnum \ifnum\texengine=\xetexengine \else % this test might disappear some day \pdfminorversion \plusfive \ifdefined\pdfcompresslevel \else \newcount\pdfcompresslevel \fi \ifdefined\pdfobjcompresslevel \else \newcount\pdfobjcompresslevel \fi \ifdefined\pdfgentounicode \else \newcount\pdfgentounicode \fi \pdfgentounicode \plusone \ifdefined\pdfinclusioncopyfonts\else \newcount\pdfinclusioncopyfonts \fi \pdfinclusioncopyfonts\plusone \def\nopdfcompression {\pdfobjcompresslevel\zerocount \pdfcompresslevel\zerocount} \def\maximumpdfcompression{\pdfobjcompresslevel\plusnine \pdfcompresslevel\plusnine } \def\normalpdfcompression {\pdfobjcompresslevel\plusthree \pdfcompresslevel\plusthree} \normalpdfcompression \let\normalsetrandomseed \setrandomseed \let\normaluniformdeviate\uniformdeviate \fi %D Handy. \ifnum\texengine=\luatexengine \ifdefined\suppresslongerror % for the moment test \suppresslongerror\plusone \fi \fi %D Basic status stuff. \newif\ifproductionrun %D We need to make sure that we start up in \DVI\ mode, so, %D after testing for running \PDFTEX, we default to \DVI. \ifx\pdftexversion\undefined \newcount\pdfoutput \fi \pdfoutput=0 %D For those who expect this \unknown \ifx\fmtname \undefined \def\fmtname {ConTeXt Minimized Plain TeX} \fi \ifx\fmtversion\undefined \def\fmtversion{3.1415926} \fi \let\normalfmtversion\fmtversion %D A few bonus macros: \def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} \def\dividonumber#1#2{\the\numexpr(#2-(#1/2))/#1\relax} \ifnum\texengine=\xetexengine \edef\xetexversion {\numexpr\XeTeXversion*100+(\expandafter\gobbleoneargument\XeTeXrevision-5)/10\relax} \edef\xetexrevision {\the\numexpr(\expandafter\gobbleoneargument\XeTeXrevision-50)/100\relax} \fi \ifcase\texengine \def\texenginename {impossible} \edef\texengineversion{0} \or \def\texenginename {pdfTeX} \edef\texengineversion{\dividonumber{100}\pdftexversion.\modulonumber{100}\pdftexversion.\pdftexrevision} \or \def\texenginename {XeTeX} \edef\texengineversion{\dividonumber{100}\xetexversion .\modulonumber{100}\xetexversion .\xetexrevision} \or \def\texenginename {LuaTeX} \edef\texengineversion{\dividonumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision} \else \def\texenginename {impossible} \edef\texengineversion{0} \fi %D While cleaning this code up a bit I was listening to Heather %D Nova's \CD\ Redbird. The first song on that \CD\ ends with %D a few lines suitable for ending this initialization module: %D %D \startlines %D And there's so much I can do for you %D Given time I know that I can prove %D Now my world is opened up to you %D Come inside %D %D Welcome to my life %D Welcome to my world %D Come inside %D \stoplines %D %D So let's see what \TEX\ can do now that we've opened up %D the basic machinery. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-def.mkiv0000644000175000017500000000413512130411274024241 0ustar norbertnorbert%D \module %D [ file=spac-def, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Definitions} % Ideally these definitions should be moved to where they first appear and % this will happen at some point. \unprotect % maybe \everysynchronizeglobalspacing % maybe \everysynchronizelocalspacing \appendtoks \forgetverticalstretch \presetnormallineheight \setnormalbaselines % check if redundant (\forgetverticalstretch does it too) \setstrut % check if redundant (\forgetverticalstretch does it too) \settopskip % factors set in \forgetverticalstretch \setmaxdepth % factors set in \forgetverticalstretch \synchronizeindenting \synchronizeblank \synchronizewhitespace \synchronizespacecodes % not needed, frozen factors \setrelativeinterlinespace \to \everybodyfont % why exception \appendtoks \updateraggedskips % under test \to \everyfontswitch % maybe more \prependtoks \let\par\normalpar \to \everybeforepagebody % see \fillinline (was endgraf) % needs checking: \appendtoks \synchronizespacecodes \to \everydefinedfont % not needed, frozen factors \setupinterlinespace [\c!minheight=\zeropoint, % only special purpose \c!mindepth=\zeropoint, % only special purpose \c!height=.72, \c!depth=.28, \c!top=1.0, \c!bottom=0.4, \c!distance=\onepoint, \c!line=2.8\exheight, \c!stretch=\zerocount, \c!shrink=\zerocount] \setupblank [\v!big] \setuptolerance [\v!horizontal,\v!verystrict] \setuptolerance [\v!vertical,\v!strict] \setupalign [\v!bottom, \v!width] \setupspacing [\v!packed] \indenting [\v!never] \setupindenting [\v!none] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-imp-x11.mkiv0000644000175000017500000007431311571377075024734 0ustar norbertnorbert%D \module %D [ file=colo-x11, %D version=2009.11.13, %D title=\CONTEXT\ Color Macros, %D subtitle=X11, %D author=Alan Braslau] %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 Standard X11 rgb colors (from \type {/usr/share/X11/rgb.txt}): \doifnotmode{mkiv} { \input colo-hex.mkii } \definecolor [snow] [h=fffafa] \definecolor [ghostwhite] [h=f8f8ff] \definecolor [whitesmoke] [s=0.96] \definecolor [gainsboro] [s=0.86] \definecolor [floralwhite] [h=fffaf0] \definecolor [oldlace] [h=fdf5e6] \definecolor [linen] [h=faf0e6] \definecolor [antiquewhite] [h=faebd7] \definecolor [papayawhip] [h=ffefd5] \definecolor [blanchedalmond] [h=ffebcd] \definecolor [bisque] [h=ffe4c4] \definecolor [peachpuff] [h=ffdab9] \definecolor [navajowhite] [h=ffdead] \definecolor [moccasin] [h=ffe4b5] \definecolor [cornsilk] [h=fff8dc] \definecolor [ivory] [h=fffff0] \definecolor [lemonchiffon] [h=fffacd] \definecolor [seashell] [h=fff5ee] \definecolor [honeydew] [h=f0fff0] \definecolor [mintcream] [h=f5fffa] \definecolor [azure] [h=f0ffff] \definecolor [aliceblue] [h=f0f8ff] \definecolor [lavender] [h=e6e6fa] \definecolor [lavenderblush] [h=fff0f5] \definecolor [mistyrose] [h=ffe4e1] \definecolor [white] [s=1] \definecolor [black] [s=0] \definecolor [darkslategray] [h=2f4f4f] \definecolor [darkslategrey] [darkslategray] \definecolor [dimgray] [s=0.41] \definecolor [dimgrey] [dimgray] \definecolor [slategray] [h=708090] \definecolor [slategrey] [slategray] \definecolor [lightslategray] [h=778899] \definecolor [lightslategrey] [lightslategray] \definecolor [gray] [s=0.75] \definecolor [grey] [gray] \definecolor [lightgrey] [s=0.83] \definecolor [lightgray] [lightgrey] \definecolor [midnightblue] [h=191970] \definecolor [navy] [h=000080] \definecolor [navyblue] [navy] \definecolor [cornflowerblue] [h=6495ed] \definecolor [darkslateblue] [h=483d8b] \definecolor [slateblue] [h=6a5acd] \definecolor [mediumslateblue] [h=7b68ee] \definecolor [lightslateblue] [h=8470ff] \definecolor [mediumblue] [h=0000cd] \definecolor [royalblue] [h=4169e1] \definecolor [blue] [h=0000ff] \definecolor [dodgerblue] [h=1e90ff] \definecolor [deepskyblue] [h=00bfff] \definecolor [skyblue] [h=87ceeb] \definecolor [lightskyblue] [h=87cefa] \definecolor [steelblue] [h=4682b4] \definecolor [lightsteelblue] [h=b0c4de] \definecolor [lightblue] [h=add8e6] \definecolor [powderblue] [h=b0e0e6] \definecolor [paleturquoise] [h=afeeee] \definecolor [darkturquoise] [h=00ced1] \definecolor [mediumturquoise] [h=48d1cc] \definecolor [turquoise] [h=40e0d0] \definecolor [cyan] [h=00ffff] \definecolor [lightcyan] [h=e0ffff] \definecolor [cadetblue] [h=5f9ea0] \definecolor [mediumaquamarine] [h=66cdaa] \definecolor [aquamarine] [h=7fffd4] \definecolor [darkgreen] [h=006400] \definecolor [darkolivegreen] [h=556b2f] \definecolor [darkseagreen] [h=8fbc8f] \definecolor [seagreen] [h=2e8b57] \definecolor [mediumseagreen] [h=3cb371] \definecolor [lightseagreen] [h=20b2aa] \definecolor [palegreen] [h=98fb98] \definecolor [springgreen] [h=00ff7f] \definecolor [lawngreen] [h=7cfc00] \definecolor [green] [h=00ff00] \definecolor [chartreuse] [h=7fff00] \definecolor [mediumspringgreen] [h=00fa9a] \definecolor [greenyellow] [h=adff2f] \definecolor [limegreen] [h=32cd32] \definecolor [yellowgreen] [h=9acd32] \definecolor [forestgreen] [h=228b22] \definecolor [olivedrab] [h=6b8e23] \definecolor [darkkhaki] [h=bdb76b] \definecolor [khaki] [h=f0e68c] \definecolor [palegoldenrod] [h=eee8aa] \definecolor [lightgoldenrodyellow] [h=fafad2] \definecolor [lightyellow] [h=ffffe0] \definecolor [yellow] [h=ffff00] \definecolor [gold] [h=ffd700] \definecolor [lightgoldenrod] [h=eedd82] \definecolor [goldenrod] [h=daa520] \definecolor [darkgoldenrod] [h=b8860b] \definecolor [rosybrown] [h=bc8f8f] \definecolor [indianred] [h=cd5c5c] \definecolor [saddlebrown] [h=8b4513] \definecolor [sienna] [h=a0522d] \definecolor [peru] [h=cd853f] \definecolor [burlywood] [h=deb887] \definecolor [beige] [h=f5f5dc] \definecolor [wheat] [h=f5deb3] \definecolor [sandybrown] [h=f4a460] \definecolor [tan] [h=d2b48c] \definecolor [chocolate] [h=d2691e] \definecolor [firebrick] [h=b22222] \definecolor [brown] [h=a52a2a] \definecolor [darksalmon] [h=e9967a] \definecolor [salmon] [h=fa8072] \definecolor [lightsalmon] [h=ffa07a] \definecolor [orange] [h=ffa500] \definecolor [darkorange] [h=ff8c00] \definecolor [coral] [h=ff7f50] \definecolor [lightcoral] [h=f08080] \definecolor [tomato] [h=ff6347] \definecolor [orangered] [h=ff4500] \definecolor [red] [h=ff0000] \definecolor [hotpink] [h=ff69b4] \definecolor [deeppink] [h=ff1493] \definecolor [pink] [h=ffc0cb] \definecolor [lightpink] [h=ffb6c1] \definecolor [palevioletred] [h=db7093] \definecolor [maroon] [h=b03060] \definecolor [mediumvioletred] [h=c71585] \definecolor [violetred] [h=d02090] \definecolor [magenta] [h=ff00ff] \definecolor [violet] [h=ee82ee] \definecolor [plum] [h=dda0dd] \definecolor [orchid] [h=da70d6] \definecolor [mediumorchid] [h=ba55d3] \definecolor [darkorchid] [h=9932cc] \definecolor [darkviolet] [h=9400d3] \definecolor [blueviolet] [h=8a2be2] \definecolor [purple] [h=a020f0] \definecolor [mediumpurple] [h=9370db] \definecolor [thistle] [h=d8bfd8] \definecolor [snow1] [h=fffafa] \definecolor [snow2] [h=eee9e9] \definecolor [snow3] [h=cdc9c9] \definecolor [snow4] [h=8b8989] \definecolor [seashell1] [h=fff5ee] \definecolor [seashell2] [h=eee5de] \definecolor [seashell3] [h=cdc5bf] \definecolor [seashell4] [h=8b8682] \definecolor [antiquewhite1] [h=ffefdb] \definecolor [antiquewhite2] [h=eedfcc] \definecolor [antiquewhite3] [h=cdc0b0] \definecolor [antiquewhite4] [h=8b8378] \definecolor [bisque1] [h=ffe4c4] \definecolor [bisque2] [h=eed5b7] \definecolor [bisque3] [h=cdb79e] \definecolor [bisque4] [h=8b7d6b] \definecolor [peachpuff1] [h=ffdab9] \definecolor [peachpuff2] [h=eecbad] \definecolor [peachpuff3] [h=cdaf95] \definecolor [peachpuff4] [h=8b7765] \definecolor [navajowhite1] [h=ffdead] \definecolor [navajowhite2] [h=eecfa1] \definecolor [navajowhite3] [h=cdb38b] \definecolor [navajowhite4] [h=8b795e] \definecolor [lemonchiffon1] [h=fffacd] \definecolor [lemonchiffon2] [h=eee9bf] \definecolor [lemonchiffon3] [h=cdc9a5] \definecolor [lemonchiffon4] [h=8b8970] \definecolor [cornsilk1] [h=fff8dc] \definecolor [cornsilk2] [h=eee8cd] \definecolor [cornsilk3] [h=cdc8b1] \definecolor [cornsilk4] [h=8b8878] \definecolor [ivory1] [h=fffff0] \definecolor [ivory2] [h=eeeee0] \definecolor [ivory3] [h=cdcdc1] \definecolor [ivory4] [h=8b8b83] \definecolor [honeydew1] [h=f0fff0] \definecolor [honeydew2] [h=e0eee0] \definecolor [honeydew3] [h=c1cdc1] \definecolor [honeydew4] [h=838b83] \definecolor [lavenderblush1] [h=fff0f5] \definecolor [lavenderblush2] [h=eee0e5] \definecolor [lavenderblush3] [h=cdc1c5] \definecolor [lavenderblush4] [h=8b8386] \definecolor [mistyrose1] [h=ffe4e1] \definecolor [mistyrose2] [h=eed5d2] \definecolor [mistyrose3] [h=cdb7b5] \definecolor [mistyrose4] [h=8b7d7b] \definecolor [azure1] [h=f0ffff] \definecolor [azure2] [h=e0eeee] \definecolor [azure3] [h=c1cdcd] \definecolor [azure4] [h=838b8b] \definecolor [slateblue1] [h=836fff] \definecolor [slateblue2] [h=7a67ee] \definecolor [slateblue3] [h=6959cd] \definecolor [slateblue4] [h=473c8b] \definecolor [royalblue1] [h=4876ff] \definecolor [royalblue2] [h=436eee] \definecolor [royalblue3] [h=3a5fcd] \definecolor [royalblue4] [h=27408b] \definecolor [blue1] [h=0000ff] \definecolor [blue2] [h=0000ee] \definecolor [blue3] [h=0000cd] \definecolor [blue4] [h=00008b] \definecolor [dodgerblue1] [h=1e90ff] \definecolor [dodgerblue2] [h=1c86ee] \definecolor [dodgerblue3] [h=1874cd] \definecolor [dodgerblue4] [h=104e8b] \definecolor [steelblue1] [h=63b8ff] \definecolor [steelblue2] [h=5cacee] \definecolor [steelblue3] [h=4f94cd] \definecolor [steelblue4] [h=36648b] \definecolor [deepskyblue1] [h=00bfff] \definecolor [deepskyblue2] [h=00b2ee] \definecolor [deepskyblue3] [h=009acd] \definecolor [deepskyblue4] [h=00688b] \definecolor [skyblue1] [h=87ceff] \definecolor [skyblue2] [h=7ec0ee] \definecolor [skyblue3] [h=6ca6cd] \definecolor [skyblue4] [h=4a708b] \definecolor [lightskyblue1] [h=b0e2ff] \definecolor [lightskyblue2] [h=a4d3ee] \definecolor [lightskyblue3] [h=8db6cd] \definecolor [lightskyblue4] [h=607b8b] \definecolor [slategray1] [h=c6e2ff] \definecolor [slategray2] [h=b9d3ee] \definecolor [slategray3] [h=9fb6cd] \definecolor [slategray4] [h=6c7b8b] \definecolor [lightsteelblue1] [h=cae1ff] \definecolor [lightsteelblue2] [h=bcd2ee] \definecolor [lightsteelblue3] [h=a2b5cd] \definecolor [lightsteelblue4] [h=6e7b8b] \definecolor [lightblue1] [h=bfefff] \definecolor [lightblue2] [h=b2dfee] \definecolor [lightblue3] [h=9ac0cd] \definecolor [lightblue4] [h=68838b] \definecolor [lightcyan1] [h=e0ffff] \definecolor [lightcyan2] [h=d1eeee] \definecolor [lightcyan3] [h=b4cdcd] \definecolor [lightcyan4] [h=7a8b8b] \definecolor [paleturquoise1] [h=bbffff] \definecolor [paleturquoise2] [h=aeeeee] \definecolor [paleturquoise3] [h=96cdcd] \definecolor [paleturquoise4] [h=668b8b] \definecolor [cadetblue1] [h=98f5ff] \definecolor [cadetblue2] [h=8ee5ee] \definecolor [cadetblue3] [h=7ac5cd] \definecolor [cadetblue4] [h=53868b] \definecolor [turquoise1] [h=00f5ff] \definecolor [turquoise2] [h=00e5ee] \definecolor [turquoise3] [h=00c5cd] \definecolor [turquoise4] [h=00868b] \definecolor [cyan1] [h=00ffff] \definecolor [cyan2] [h=00eeee] \definecolor [cyan3] [h=00cdcd] \definecolor [cyan4] [h=008b8b] \definecolor [darkslategray1] [h=97ffff] \definecolor [darkslategray2] [h=8deeee] \definecolor [darkslategray3] [h=79cdcd] \definecolor [darkslategray4] [h=528b8b] \definecolor [aquamarine1] [h=7fffd4] \definecolor [aquamarine2] [h=76eec6] \definecolor [aquamarine3] [h=66cdaa] \definecolor [aquamarine4] [h=458b74] \definecolor [darkseagreen1] [h=c1ffc1] \definecolor [darkseagreen2] [h=b4eeb4] \definecolor [darkseagreen3] [h=9bcd9b] \definecolor [darkseagreen4] [h=698b69] \definecolor [seagreen1] [h=54ff9f] \definecolor [seagreen2] [h=4eee94] \definecolor [seagreen3] [h=43cd80] \definecolor [seagreen4] [h=2e8b57] \definecolor [palegreen1] [h=9aff9a] \definecolor [palegreen2] [h=90ee90] \definecolor [palegreen3] [h=7ccd7c] \definecolor [palegreen4] [h=548b54] \definecolor [springgreen1] [h=00ff7f] \definecolor [springgreen2] [h=00ee76] \definecolor [springgreen3] [h=00cd66] \definecolor [springgreen4] [h=008b45] \definecolor [green1] [h=00ff00] \definecolor [green2] [h=00ee00] \definecolor [green3] [h=00cd00] \definecolor [green4] [h=008b00] \definecolor [chartreuse1] [h=7fff00] \definecolor [chartreuse2] [h=76ee00] \definecolor [chartreuse3] [h=66cd00] \definecolor [chartreuse4] [h=458b00] \definecolor [olivedrab1] [h=c0ff3e] \definecolor [olivedrab2] [h=b3ee3a] \definecolor [olivedrab3] [h=9acd32] \definecolor [olivedrab4] [h=698b22] \definecolor [darkolivegreen1] [h=caff70] \definecolor [darkolivegreen2] [h=bcee68] \definecolor [darkolivegreen3] [h=a2cd5a] \definecolor [darkolivegreen4] [h=6e8b3d] \definecolor [khaki1] [h=fff68f] \definecolor [khaki2] [h=eee685] \definecolor [khaki3] [h=cdc673] \definecolor [khaki4] [h=8b864e] \definecolor [lightgoldenrod1] [h=ffec8b] \definecolor [lightgoldenrod2] [h=eedc82] \definecolor [lightgoldenrod3] [h=cdbe70] \definecolor [lightgoldenrod4] [h=8b814c] \definecolor [lightyellow1] [h=ffffe0] \definecolor [lightyellow2] [h=eeeed1] \definecolor [lightyellow3] [h=cdcdb4] \definecolor [lightyellow4] [h=8b8b7a] \definecolor [yellow1] [h=ffff00] \definecolor [yellow2] [h=eeee00] \definecolor [yellow3] [h=cdcd00] \definecolor [yellow4] [h=8b8b00] \definecolor [gold1] [h=ffd700] \definecolor [gold2] [h=eec900] \definecolor [gold3] [h=cdad00] \definecolor [gold4] [h=8b7500] \definecolor [goldenrod1] [h=ffc125] \definecolor [goldenrod2] [h=eeb422] \definecolor [goldenrod3] [h=cd9b1d] \definecolor [goldenrod4] [h=8b6914] \definecolor [darkgoldenrod1] [h=ffb90f] \definecolor [darkgoldenrod2] [h=eead0e] \definecolor [darkgoldenrod3] [h=cd950c] \definecolor [darkgoldenrod4] [h=8b6508] \definecolor [rosybrown1] [h=ffc1c1] \definecolor [rosybrown2] [h=eeb4b4] \definecolor [rosybrown3] [h=cd9b9b] \definecolor [rosybrown4] [h=8b6969] \definecolor [indianred1] [h=ff6a6a] \definecolor [indianred2] [h=ee6363] \definecolor [indianred3] [h=cd5555] \definecolor [indianred4] [h=8b3a3a] \definecolor [sienna1] [h=ff8247] \definecolor [sienna2] [h=ee7942] \definecolor [sienna3] [h=cd6839] \definecolor [sienna4] [h=8b4726] \definecolor [burlywood1] [h=ffd39b] \definecolor [burlywood2] [h=eec591] \definecolor [burlywood3] [h=cdaa7d] \definecolor [burlywood4] [h=8b7355] \definecolor [wheat1] [h=ffe7ba] \definecolor [wheat2] [h=eed8ae] \definecolor [wheat3] [h=cdba96] \definecolor [wheat4] [h=8b7e66] \definecolor [tan1] [h=ffa54f] \definecolor [tan2] [h=ee9a49] \definecolor [tan3] [h=cd853f] \definecolor [tan4] [h=8b5a2b] \definecolor [chocolate1] [h=ff7f24] \definecolor [chocolate2] [h=ee7621] \definecolor [chocolate3] [h=cd661d] \definecolor [chocolate4] [h=8b4513] \definecolor [firebrick1] [h=ff3030] \definecolor [firebrick2] [h=ee2c2c] \definecolor [firebrick3] [h=cd2626] \definecolor [firebrick4] [h=8b1a1a] \definecolor [brown1] [h=ff4040] \definecolor [brown2] [h=ee3b3b] \definecolor [brown3] [h=cd3333] \definecolor [brown4] [h=8b2323] \definecolor [salmon1] [h=ff8c69] \definecolor [salmon2] [h=ee8262] \definecolor [salmon3] [h=cd7054] \definecolor [salmon4] [h=8b4c39] \definecolor [lightsalmon1] [h=ffa07a] \definecolor [lightsalmon2] [h=ee9572] \definecolor [lightsalmon3] [h=cd8162] \definecolor [lightsalmon4] [h=8b5742] \definecolor [orange1] [h=ffa500] \definecolor [orange2] [h=ee9a00] \definecolor [orange3] [h=cd8500] \definecolor [orange4] [h=8b5a00] \definecolor [darkorange1] [h=ff7f00] \definecolor [darkorange2] [h=ee7600] \definecolor [darkorange3] [h=cd6600] \definecolor [darkorange4] [h=8b4500] \definecolor [coral1] [h=ff7256] \definecolor [coral2] [h=ee6a50] \definecolor [coral3] [h=cd5b45] \definecolor [coral4] [h=8b3e2f] \definecolor [tomato1] [h=ff6347] \definecolor [tomato2] [h=ee5c42] \definecolor [tomato3] [h=cd4f39] \definecolor [tomato4] [h=8b3626] \definecolor [orangered1] [h=ff4500] \definecolor [orangered2] [h=ee4000] \definecolor [orangered3] [h=cd3700] \definecolor [orangered4] [h=8b2500] \definecolor [red1] [h=ff0000] \definecolor [red2] [h=ee0000] \definecolor [red3] [h=cd0000] \definecolor [red4] [h=8b0000] \definecolor [debianred] [h=d70751] \definecolor [deeppink1] [h=ff1493] \definecolor [deeppink2] [h=ee1289] \definecolor [deeppink3] [h=cd1076] \definecolor [deeppink4] [h=8b0a50] \definecolor [hotpink1] [h=ff6eb4] \definecolor [hotpink2] [h=ee6aa7] \definecolor [hotpink3] [h=cd6090] \definecolor [hotpink4] [h=8b3a62] \definecolor [pink1] [h=ffb5c5] \definecolor [pink2] [h=eea9b8] \definecolor [pink3] [h=cd919e] \definecolor [pink4] [h=8b636c] \definecolor [lightpink1] [h=ffaeb9] \definecolor [lightpink2] [h=eea2ad] \definecolor [lightpink3] [h=cd8c95] \definecolor [lightpink4] [h=8b5f65] \definecolor [palevioletred1] [h=ff82ab] \definecolor [palevioletred2] [h=ee799f] \definecolor [palevioletred3] [h=cd6889] \definecolor [palevioletred4] [h=8b475d] \definecolor [maroon1] [h=ff34b3] \definecolor [maroon2] [h=ee30a7] \definecolor [maroon3] [h=cd2990] \definecolor [maroon4] [h=8b1c62] \definecolor [violetred1] [h=ff3e96] \definecolor [violetred2] [h=ee3a8c] \definecolor [violetred3] [h=cd3278] \definecolor [violetred4] [h=8b2252] \definecolor [magenta1] [h=ff00ff] \definecolor [magenta2] [h=ee00ee] \definecolor [magenta3] [h=cd00cd] \definecolor [magenta4] [h=8b008b] \definecolor [orchid1] [h=ff83fa] \definecolor [orchid2] [h=ee7ae9] \definecolor [orchid3] [h=cd69c9] \definecolor [orchid4] [h=8b4789] \definecolor [plum1] [h=ffbbff] \definecolor [plum2] [h=eeaeee] \definecolor [plum3] [h=cd96cd] \definecolor [plum4] [h=8b668b] \definecolor [mediumorchid1] [h=e066ff] \definecolor [mediumorchid2] [h=d15fee] \definecolor [mediumorchid3] [h=b452cd] \definecolor [mediumorchid4] [h=7a378b] \definecolor [darkorchid1] [h=bf3eff] \definecolor [darkorchid2] [h=b23aee] \definecolor [darkorchid3] [h=9a32cd] \definecolor [darkorchid4] [h=68228b] \definecolor [purple1] [h=9b30ff] \definecolor [purple2] [h=912cee] \definecolor [purple3] [h=7d26cd] \definecolor [purple4] [h=551a8b] \definecolor [mediumpurple1] [h=ab82ff] \definecolor [mediumpurple2] [h=9f79ee] \definecolor [mediumpurple3] [h=8968cd] \definecolor [mediumpurple4] [h=5d478b] \definecolor [thistle1] [h=ffe1ff] \definecolor [thistle2] [h=eed2ee] \definecolor [thistle3] [h=cdb5cd] \definecolor [thistle4] [h=8b7b8b] \definecolor [gray0] [s=0.00] \definecolor [grey0] [gray0] \definecolor [gray1] [s=0.01] \definecolor [grey1] [gray1] \definecolor [gray2] [s=0.02] \definecolor [grey2] [gray2] \definecolor [gray3] [s=0.03] \definecolor [grey3] [gray3] \definecolor [gray4] [s=0.04] \definecolor [grey4] [gray4] \definecolor [gray5] [s=0.05] \definecolor [grey5] [gray5] \definecolor [gray6] [s=0.06] \definecolor [grey6] [gray6] \definecolor [gray7] [s=0.07] \definecolor [grey7] [gray7] \definecolor [gray8] [s=0.08] \definecolor [grey8] [gray8] \definecolor [gray9] [s=0.09] \definecolor [grey9] [gray9] \definecolor [gray10] [s=0.10] \definecolor [grey10] [gray10] \definecolor [gray11] [s=0.11] \definecolor [grey11] [gray11] \definecolor [gray12] [s=0.12] \definecolor [grey12] [gray12] \definecolor [gray13] [s=0.13] \definecolor [grey13] [gray13] \definecolor [gray14] [s=0.14] \definecolor [grey14] [gray14] \definecolor [gray15] [s=0.15] \definecolor [grey15] [gray15] \definecolor [gray16] [s=0.16] \definecolor [grey16] [gray16] \definecolor [gray17] [s=0.17] \definecolor [grey17] [gray17] \definecolor [gray18] [s=0.18] \definecolor [grey18] [gray18] \definecolor [gray19] [s=0.19] \definecolor [grey19] [gray19] \definecolor [gray20] [s=0.20] \definecolor [grey20] [gray20] \definecolor [gray21] [s=0.21] \definecolor [grey21] [gray21] \definecolor [gray22] [s=0.22] \definecolor [grey22] [gray22] \definecolor [gray23] [s=0.23] \definecolor [grey23] [gray23] \definecolor [gray24] [s=0.24] \definecolor [grey24] [gray24] \definecolor [gray25] [s=0.25] \definecolor [grey25] [gray25] \definecolor [gray26] [s=0.26] \definecolor [grey26] [gray26] \definecolor [gray27] [s=0.27] \definecolor [grey27] [gray27] \definecolor [gray28] [s=0.28] \definecolor [grey28] [gray28] \definecolor [gray29] [s=0.29] \definecolor [grey29] [gray29] \definecolor [gray30] [s=0.30] \definecolor [grey30] [gray30] \definecolor [gray31] [s=0.31] \definecolor [grey31] [gray31] \definecolor [gray32] [s=0.32] \definecolor [grey32] [gray32] \definecolor [gray33] [s=0.33] \definecolor [grey33] [gray33] \definecolor [gray34] [s=0.34] \definecolor [grey34] [gray34] \definecolor [gray35] [s=0.35] \definecolor [grey35] [gray35] \definecolor [gray36] [s=0.36] \definecolor [grey36] [gray36] \definecolor [gray37] [s=0.37] \definecolor [grey37] [gray37] \definecolor [gray38] [s=0.38] \definecolor [grey38] [gray38] \definecolor [gray39] [s=0.39] \definecolor [grey39] [gray39] \definecolor [gray40] [s=0.40] \definecolor [grey40] [gray40] \definecolor [gray41] [s=0.41] \definecolor [grey41] [gray41] \definecolor [gray42] [s=0.42] \definecolor [grey42] [gray42] \definecolor [gray43] [s=0.43] \definecolor [grey43] [gray43] \definecolor [gray44] [s=0.44] \definecolor [grey44] [gray44] \definecolor [gray45] [s=0.45] \definecolor [grey45] [gray45] \definecolor [gray46] [s=0.46] \definecolor [grey46] [gray46] \definecolor [gray47] [s=0.47] \definecolor [grey47] [gray47] \definecolor [gray48] [s=0.48] \definecolor [grey48] [gray48] \definecolor [gray49] [s=0.49] \definecolor [grey49] [gray49] \definecolor [gray50] [s=0.50] \definecolor [grey50] [gray50] \definecolor [gray51] [s=0.51] \definecolor [grey51] [gray51] \definecolor [gray52] [s=0.52] \definecolor [grey52] [gray52] \definecolor [gray53] [s=0.53] \definecolor [grey53] [gray53] \definecolor [gray54] [s=0.54] \definecolor [grey54] [gray54] \definecolor [gray55] [s=0.55] \definecolor [grey55] [gray55] \definecolor [gray56] [s=0.56] \definecolor [grey56] [gray56] \definecolor [gray57] [s=0.57] \definecolor [grey57] [gray57] \definecolor [gray58] [s=0.58] \definecolor [grey58] [gray58] \definecolor [gray59] [s=0.59] \definecolor [grey59] [gray59] \definecolor [gray60] [s=0.60] \definecolor [grey60] [gray60] \definecolor [gray61] [s=0.61] \definecolor [grey61] [gray61] \definecolor [gray62] [s=0.62] \definecolor [grey62] [gray62] \definecolor [gray63] [s=0.63] \definecolor [grey63] [gray63] \definecolor [gray64] [s=0.64] \definecolor [grey64] [gray64] \definecolor [gray65] [s=0.65] \definecolor [grey65] [gray65] \definecolor [gray66] [s=0.66] \definecolor [grey66] [gray66] \definecolor [gray67] [s=0.67] \definecolor [grey67] [gray67] \definecolor [gray68] [s=0.68] \definecolor [grey68] [gray68] \definecolor [gray69] [s=0.69] \definecolor [grey69] [gray69] \definecolor [gray70] [s=0.70] \definecolor [grey70] [gray70] \definecolor [gray71] [s=0.71] \definecolor [grey71] [gray71] \definecolor [gray72] [s=0.72] \definecolor [grey72] [gray72] \definecolor [gray73] [s=0.73] \definecolor [grey73] [gray73] \definecolor [gray74] [s=0.74] \definecolor [grey74] [gray74] \definecolor [gray75] [s=0.75] \definecolor [grey75] [gray75] \definecolor [gray76] [s=0.76] \definecolor [grey76] [gray76] \definecolor [gray77] [s=0.77] \definecolor [grey77] [gray77] \definecolor [gray78] [s=0.78] \definecolor [grey78] [gray78] \definecolor [gray79] [s=0.79] \definecolor [grey79] [gray79] \definecolor [gray80] [s=0.80] \definecolor [grey80] [gray80] \definecolor [gray81] [s=0.81] \definecolor [grey81] [gray81] \definecolor [gray82] [s=0.82] \definecolor [grey82] [gray82] \definecolor [gray83] [s=0.83] \definecolor [grey83] [gray83] \definecolor [gray84] [s=0.84] \definecolor [grey84] [gray84] \definecolor [gray85] [s=0.85] \definecolor [grey85] [gray85] \definecolor [gray86] [s=0.86] \definecolor [grey86] [gray86] \definecolor [gray87] [s=0.87] \definecolor [grey87] [gray87] \definecolor [gray88] [s=0.88] \definecolor [grey88] [gray88] \definecolor [gray89] [s=0.89] \definecolor [grey89] [gray89] \definecolor [gray90] [s=0.90] \definecolor [grey90] [gray90] \definecolor [gray91] [s=0.91] \definecolor [grey91] [gray91] \definecolor [gray92] [s=0.92] \definecolor [grey92] [gray92] \definecolor [gray93] [s=0.93] \definecolor [grey93] [gray93] \definecolor [gray94] [s=0.94] \definecolor [grey94] [gray94] \definecolor [gray95] [s=0.95] \definecolor [grey95] [gray95] \definecolor [gray96] [s=0.96] \definecolor [grey96] [gray96] \definecolor [gray97] [s=0.97] \definecolor [grey97] [gray97] \definecolor [gray98] [s=0.98] \definecolor [grey98] [gray98] \definecolor [gray99] [s=0.99] \definecolor [grey99] [gray99] \definecolor [gray100] [s=1.00] \definecolor [grey100] [gray100] \definecolor [darkgrey] [s=0.66] \definecolor [darkgray] [darkgrey] \definecolor [darkblue] [h=00008b] \definecolor [darkcyan] [h=008b8b] \definecolor [darkmagenta] [h=8b008b] \definecolor [darkred] [h=8b0000] \definecolor [lightgreen] [h=90ee90] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-meh.mkii0000644000175000017500000003325611571377075024304 0ustar norbertnorbert% filtered from html files by Patrick Ion % % ISOTECH Characters Extended % % General Technical \defineMMLentity acd E3A6 {unknown} ac current \defineMMLentity aleph 2135 {\aleph} aleph, Hebrew \defineMMLentity And E374 {unknown} double logical and \defineMMLentity and 2227 {\wedge} logical and \defineMMLentity andand E36E {unknown} two logical and \defineMMLentity andd E394 {unknown} and, horizontal dash \defineMMLentity andslope E50A {unknown} sloping large and \defineMMLentity andv E391 {unknown} and with middle stem \defineMMLentity angrt 221F {unknown} right (90 degree) angle \defineMMLentity angsph 2222 {unknown} angle-spherical \defineMMLentity angst 212B {\Angstrom} Angstrom capital A, ring \defineMMLentity ap 2248 {\approx} approximate \defineMMLentity apacir E38C {unknown} approximate, circumflex accent \defineMMLentity awconint 2233 {unknown} contour integral, anti-clockwise \defineMMLentity awint E39B {unknown} anti clock-wise integration \defineMMLentity becaus 2235 {unknown} because \defineMMLentity bernou 212C {unknown} Bernoulli function (script capital B) \defineMMLentity bne E388 {unknown} reverse not equal \defineMMLentity bnequiv E387 {unknown} reverse not equivalent \defineMMLentity bNot E3AD {unknown} reverse not with two horizontal strokes \defineMMLentity bnot 2310 {unknown} reverse not \defineMMLentity bottom 22A5 {unknown} bottom \defineMMLentity cap 2229 {\cap} intersection \defineMMLentity Cconint 2230 {unknown} triple contour integral operator \defineMMLentity cirfnint E395 {unknown} circulation function \defineMMLentity compfn 2218 {\circ} composite function (small circle) \defineMMLentity cong 2245 {\cong} congruent with \defineMMLentity Conint 222F {unknown} double contour integral operator \defineMMLentity conint 222E {\oint} contour integral operator \defineMMLentity ctdot 22EF {\cdots} three dots, centered \defineMMLentity cup 222A {\cup} union or logical sum \defineMMLentity cwconint 2232 {unknown} contour integral, clockwise \defineMMLentity cwint 2231 {unknown} clockwise integral \defineMMLentity cylcty 232D {unknown} cylindricity \defineMMLentity disin E3A0 {unknown} set membership, long horizontal stroke \defineMMLentity Dot 0308 {unknown} dieresis or umlaut mark \defineMMLentity DotDot 20DC {unknown} four dots above \defineMMLentity dsol E3A9 {unknown} solidus, bar above \defineMMLentity dtdot 22F1 {\ddots} three dots, descending \defineMMLentity dwangle E3AA {unknown} large downward pointing angle \defineMMLentity elinters E3A7 {unknown} electrical intersection \defineMMLentity epar 22D5 {unknown} parallel, equal; equal or parallel \defineMMLentity eparsl E384 {unknown} parallel, slanted, equal; homothetically co \defineMMLentity equiv 2261 {\equiv} identical with \defineMMLentity eqvparsl E386 {unknown} equivalent, equal; congruent and parallel \defineMMLentity exist 2203 {\exists} at least one exists \defineMMLentity fltns E381 {unknown} flatness \defineMMLentity forall 2200 {\forall} for all \defineMMLentity fpartint E396 {unknown} finite part integral \defineMMLentity ge 2265 {\geq} greater-than-or-equal \defineMMLentity hamilt 210B {unknown} Hamiltonian (script capital H) \defineMMLentity iff E365 {unknown} if and only if \defineMMLentity iinfin E372 {unknown} infinity sign, incomplete \defineMMLentity imped E50B {unknown} impedance \defineMMLentity infin 221E {\infty} infinity \defineMMLentity infintie E50C {unknown} tie, infinity \defineMMLentity Int 222C {unknown} double integral operator \defineMMLentity int 222B {\int} integral operator \defineMMLentity intlarhk E39A {unknown} integral, left arrow with hook \defineMMLentity isin 220A {\in} set membership \defineMMLentity isindot E39C {unknown} set membership, dot above \defineMMLentity isinE E39E {unknown} set membership, two horizontal strokes \defineMMLentity isins E3A4 {unknown} set membership, vertical bar on horizontal \defineMMLentity isinsv E3A2 {unknown} large set membership, vertical bar on horiz \defineMMLentity isinv 2208 {unknown} set membership, variant \defineMMLentity lagran 2112 {unknown} Lagrangian (script capital L) \defineMMLentity Lang 300A {unknown} left angle bracket, double \defineMMLentity lang 3008 {\langle} left angle bracket \defineMMLentity lArr 21D0 {\Leftarrow} is implied by \defineMMLentity lbbrk 3014 {unknown} left broken bracket \defineMMLentity le 2264 {\leq} less-than-or-equal \defineMMLentity loang 3018 {unknown} left open angular bracket \defineMMLentity lobrk 301A {unknown} left open bracket \defineMMLentity lopar E379 {unknown} left open parenthesis \defineMMLentity lowast 2217 {unknown} low asterisk \defineMMLentity minus 2212 {unknown} minus sign \defineMMLentity mnplus 2213 {\mp} minus-or-plus sign \defineMMLentity nabla 2207 {\nabla} del, Hamilton operator \defineMMLentity ne 2260 {\ne} not equal \defineMMLentity nedot E38A {unknown} not equal, dot \defineMMLentity nhpar E38D {unknown} not, horizontal, parallel \defineMMLentity ni 220D {unknown} contains \defineMMLentity nis E3A5 {unknown} contains, vertical bar on horizontal stroke \defineMMLentity nisd E3A1 {unknown} contains, long horizontal stroke \defineMMLentity niv 220B {\ni} contains, variant \defineMMLentity Not E3AC {unknown} not with two horizontal strokes \defineMMLentity notin 2209 {\notin} negated set membership \defineMMLentity notindot E39D {unknown} negated set membership, dot above \defineMMLentity notinE E50D {unknown} negated set membership, two horizontal strokes \defineMMLentity notinva E370 {unknown} negated set membership, variant \defineMMLentity notinvb E37B {unknown} negated set membership, variant \defineMMLentity notinvc E37C {unknown} negated set membership, variant \defineMMLentity notni 220C {unknown} negated contains \defineMMLentity notniva 220C {unknown} negated contains, variant \defineMMLentity notnivb E37D {unknown} contains, variant \defineMMLentity notnivc E37E {unknown} contains, variant \defineMMLentity nparsl E389 {unknown} not parallel, slanted \defineMMLentity npart E390 {unknown} not partial differential \defineMMLentity npolint E399 {unknown} line integration, not including the pole \defineMMLentity nvinfin E38E {unknown} not, vert, infinity \defineMMLentity olcross E3A8 {unknown} circle, cross \defineMMLentity Or E375 {unknown} double logical or \defineMMLentity or 2228 {\vee} logical or \defineMMLentity ord E393 {unknown} or, horizontal dash \defineMMLentity order 2134 {unknown} order of (script small o) \defineMMLentity oror E50E {unknown} two logical or \defineMMLentity orslope E3AE {unknown} sloping large or \defineMMLentity orv E392 {unknown} or with middle stem \defineMMLentity par 2225 {\parallel} parallel \defineMMLentity parsl E382 {unknown} parallel, slanted \defineMMLentity part 2202 {\partial} partial differential \defineMMLentity permil 2030 {unknown} per thousand \defineMMLentity perp 22A5 {\perp} perpendicular \defineMMLentity pertenk 2031 {unknown} per 10 thousand \defineMMLentity phmmat 2133 {unknown} physics M-matrix (script capital M) \defineMMLentity pointint E376 {unknown} integral around a point operator \defineMMLentity Prime 2033 {unknown} double prime or second \defineMMLentity prime 2032 {\prime} prime or minute \defineMMLentity profalar 232E {unknown} all-around profile \defineMMLentity profline 2312 {unknown} profile of a line \defineMMLentity profsurf 2313 {unknown} profile of a surface \defineMMLentity prop 221D {\propto} is proportional to \defineMMLentity qint E378 {unknown} quadruple integral operator \defineMMLentity qprime E371 {unknown} quadruple prime \defineMMLentity quatint E377 {unknown} quaternion integral operator \defineMMLentity radic 221A {\surd} radical \defineMMLentity Rang 300B {unknown} right angle bracket, double \defineMMLentity rang 3009 {\rangle} right angle bracket \defineMMLentity rArr 21D2 {\Rightarrow} implies \defineMMLentity rbbrk 3015 {unknown} right broken bracket \defineMMLentity roang 3019 {unknown} right open angular bracket \defineMMLentity robrk 301B {unknown} right open bracket \defineMMLentity ropar E37A {unknown} right open parenthesis \defineMMLentity rppolint E397 {unknown} line integration, rectangular path around pole \defineMMLentity scpolint E398 {unknown} line integration, semi-circular path around pole \defineMMLentity sim 223C {\sim} similar \defineMMLentity simdot E38B {unknown} similar, dot \defineMMLentity sime 2243 {\simeq} similar, equals \defineMMLentity smeparsl E385 {unknown} similar, parallel, slanted, equal \defineMMLentity square 25A1 {\square} square \defineMMLentity squarf 25A0 {unknown} square, filled \defineMMLentity strns E380 {unknown} straightness \defineMMLentity sub 2282 {\subset} subset or is implied by \defineMMLentity sube 2286 {\subseteq} subset, equals \defineMMLentity sup 2283 {\supset} superset or implies \defineMMLentity supe 2287 {\supseteq} superset, equals \defineMMLentity tdot 20DB {unknown} three dots above \defineMMLentity there4 2234 {unknown} therefore \defineMMLentity tint 222D {unknown} triple integral operator \defineMMLentity top 22A4 {\top} top \defineMMLentity topbot 2336 {unknown} top and bottom \defineMMLentity topcir E383 {unknown} top, circle below \defineMMLentity tprime 2034 {unknown} triple prime \defineMMLentity utdot 22F0 {unknown} three dots, ascending \defineMMLentity uwangle E3AB {unknown} large upward pointing angle \defineMMLentity vangrt 22BE {unknown} right angle, variant (with arc) \defineMMLentity veeeq 225A {unknown} logical or, equals \defineMMLentity Verbar 2016 {\Vert} double vertical bar \defineMMLentity wedgeq 2259 {unknown} corresponds to (wedge, equals) \defineMMLentity xnis E3A3 {unknown} large contains, vertical bar on horizontal stroke context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-bar.mkiv0000644000175000017500000001525612130411274024240 0ustar norbertnorbert%D \module %D [ file=anch-bar, %D version=2003.03.16, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Margin Bars and alike, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Margin Bars} \unprotect %D We will implement a sidebar mechanism using the %D functionality from \type {core-pos}. %D %D \starttyping %D \definesidebar[whow][rulecolor=green,distance=] %D %D \input tufte \par %D \startsidebar %D \input tufte \par %D \input tufte \par %D \startsidebar[whow] %D \input tufte \par %D \input tufte \par %D \input tufte %D \stopsidebar \par %D \input tufte \par %D \input tufte %D \stopsidebar \par %D \input tufte \par %D \input tufte \par %D \startsidebar %D \input tufte \par %D \input tufte \par %D \input tufte \par %D \input tufte \par %D \input tufte %D \stopsidebar \par %D \input tufte \par %D \input tufte \par %D \startsidebar %D \input tufte %D \input tufte %D \input tufte %D \input tufte %D \input tufte %D \stopsidebar %D \stoptyping \installcorenamespace{sidebar} \installcommandhandler \??sidebar {sidebar} \??sidebar \newcount\c_anch_sidebars_n \newcount\c_anch_sidebars_current % local \newdimen\d_anch_sidebars_distance \newcount\c_anch_sidebars_level % \setupMPvariables % [mpos:sidebar] % [linecolor=red, % linewidth=2pt, % distance=5pt] \setupsidebar [\c!rulethickness=\dimexpr\bodyfontsize/6\relax, % 2pt default \c!rulecolor=\s!black, \c!alternative=0, \c!topoffset=\zeropoint, \c!bottomoffset=\zeropoint, \c!distance=.5\bodyfontsize, \c!level=, \c!leftmargindistance=\zeropoint] \let\setupsidebars\setupsidebar \unexpanded\def\startsidebar {\dosingleempty\anch_sidebars_start} \unexpanded\def\startsidebar {\dodoubleempty\anch_sidebars_start} \def\anch_sidebars_start[#1][#2]% {\bgroup \dontleavehmode \advance\c_anch_sidebars_level\plusone \global\advance\c_anch_sidebars_n\plusone \c_anch_sidebars_current\c_anch_sidebars_n\relax % relax needed \doifassignmentelse{#1} {\edef\currentsidebar{\the\c_anch_sidebars_level}% \checksidebarparent \setupcurrentsidebar[#1]} {\def\currentsidebar{#1}% \setupcurrentsidebar[#2]}% \scratchdistance\sidebarparameter\c!distance\relax \edef\m_level{\sidebarparameter\c!level}% \ifx\m_level\empty \ifnum\c_anch_sidebars_level=\plusone \scratchdimen\sidebarparameter\c!leftmargindistance\relax \ifdim\scratchdimen=\zeropoint \advance\d_anch_sidebars_distance\scratchdistance\relax \else \d_anch_sidebars_distance\scratchdimen \fi \else \advance\d_anch_sidebars_distance\scratchdistance\relax \fi \else \ifnum\m_level=\plusone \scratchdimen\sidebarparameter\c!leftmargindistance\relax \ifdim\scratchdimen=\zeropoint \advance\d_anch_sidebars_distance\scratchdistance\relax \else \d_anch_sidebars_distance\scratchdimen \fi \else \d_anch_sidebars_distance\dimexpr\scratchdimen+\numexpr\m_level-\plusone\relax\dimexpr\scratchdistance\relax\relax \fi \fi \startpositionoverlay{text-1}% \normalexpanded{\setMPpositiongraphicrange % maybe expand in definition {b:sidebar:\the\c_anch_sidebars_n}% {e:sidebar:\the\c_anch_sidebars_n}% {mpos:sidebar}% {self=sidebar:\the\c_anch_sidebars_n, linewidth=\sidebarparameter\c!rulethickness, linecolor=\sidebarparameter\c!rulecolor, alternative=\sidebarparameter\c!alternative, topoffset=\the\dimexpr\sidebarparameter\c!topoffset, bottomoffset=\the\dimexpr\sidebarparameter\c!bottomoffset, distance=\the\d_anch_sidebars_distance}% }% \stoppositionoverlay \bpos{sidebar:\the\c_anch_sidebars_current}% \ignorespaces} \unexpanded\def\stopsidebar {\removelastspace \epos{sidebar:\the\c_anch_sidebars_current} \carryoverpar\egroup} %D Let's keep this nice and simple (okay, we could pass the 6 variables in %D one lua call). \startMPpositionmethod{mpos:sidebar} \startMPpositiongraphic{mpos:sidebar}{linecolor,linewidth,distance,alternative}% if unknown context_apos : input mp-apos.mpiv ; fi ; anch_sidebars_draw ( \MPp\MPbself,\MPp\MPeself,\MPy\MPbself,\MPy\MPeself,\MPh\MPbself,\MPd\MPeself, \MPx{\textanchor},\MPy{\textanchor},\MPw{\textanchor},\MPh{\textanchor}, \MPvar{alternative},\MPvar{distance},\MPvar{linewidth},\MPvar{linecolor}, \MPvar{topoffset}, \MPvar{bottomoffset} ) ; \stopMPpositiongraphic \MPpositiongraphic{mpos:sidebar}{}% \stopMPpositionmethod %D We now reimplement the \MKII\ margin rules handler in a more %D modern way. %D %D \setupmarginrules %D [rulecolor=darkred, %D rulethickness=2pt] %D %D \setupmarginrules % sidebar %D [2] %D [rulecolor=darkblue] %D %D \startmarginrule[1] %D \input ward %D \startmarginrule[2] %D \input ward %D \startmarginrule[3] %D \input ward %D \startmarginrule[level=6,rulecolor=darkgreen] %D \input ward %D \stopmarginrule %D \input ward %D \stopmarginrule %D \input ward %D \stopmarginrule %D \input ward %D \stopmarginrule %D %D Compared to the old mechanism we now can pass settings too. \definesidebar [\v!margin] [\c!leftmargindistance=\dimexpr\leftmargindistance+\sidebarparameter\c!rulethickness/2\relax] \dorecurse{5}{\definesidebar[\v!margin:#1][\v!margin]} % let's be nice and predefine 5 levels \unexpanded\def\setupmarginrule {\dodoubleargument\anch_marginrules_setup} \def\anch_marginrules_setup[#1][#2]% {\ifsecondargument \setupsidebar[\v!margin:#1][#2]% \else \setupsidebar[\v!margin][#1]% \fi} \let\setupmarginrules\setupmarginrule \unexpanded\def\startmarginrule {\dosingleempty\anch_marginrules_start} \unexpanded\def\startmarginrule {\dosingleempty\anch_marginrules_start} \def\anch_marginrules_start[#1]% pretty inefficient checking {\edef\m_anch_marginrules_kind{#1}% \ifx\m_anch_marginrules_kind\empty \anch_sidebars_start[\v!margin][]% \else \doifassignmentelse\m_anch_marginrules_kind {\anch_sidebars_start[\v!margin][#1]}% {\anch_marginrules_check{#1}% \anch_sidebars_start[\v!margin:#1][\c!level=#1]}% \fi} \def\anch_marginrules_check#1% {\doifnotcommandhandler\??sidebar{\v!margin:#1}{\definesidebar[\v!margin:#1][\v!margin]}} \let\stopmarginrule\stopsidebar \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pag.mkiv0000644000175000017500000000772312130411274024260 0ustar norbertnorbert%D \module %D [ file=meta-pag, %D version=1999.07.10, %D title=\METAPOST\ Graphics, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 These definitions used to be part of the old \type %D {core-mps} file, later changed into \type {meta-ini}, but %D keeping them separate is cleaner. \writestatus{loading}{MetaPost Graphics / Page Data Management} \unprotect %D The next few macros tell \METAPOST\ how the \CONTEXT\ %D pagebody looks. \startMPextensions boolean PageStateAvailable,OnRightPage,InPageBody; PageStateAvailable:=true; \stopMPextensions \startMPinitializations OnRightPage:=true; InPageBody:=\ifinpagebody true \else false \fi; \stopMPinitializations \startMPinitializations CurrentColumn:=\number\mofcolumns; NOfColumns:=\number\nofcolumns; % todo: ColumnDistance \stopMPinitializations % maybe always set as frozen anyway \startMPinitializations def LoadPageState = OnRightPage:=\MPonrightpage; OnOddPage:=\MPonoddpage; RealPageNumber:=\the\realpageno; PageNumber:=\the\pageno; NOfPages:=\lastpage; PaperHeight:=\the\paperheight; PaperWidth:=\the\paperwidth; PrintPaperHeight:=\the\printpaperheight; PrintPaperWidth:=\the\printpaperwidth; TopSpace:=\the\topspace; BottomSpace:=\the\bottomspace; BackSpace:=\the\backspace; CutSpace:=\the\cutspace; MakeupHeight:=\the\makeupheight; MakeupWidth:=\the\makeupwidth; TopHeight:=\the\topheight; TopDistance:=\the\topdistance; HeaderHeight:=\the\headerheight; HeaderDistance:=\the\headerdistance; TextHeight:=\the\textheight; FooterDistance:=\the\footerdistance; FooterHeight:=\the\footerheight; BottomDistance:=\the\bottomdistance; BottomHeight:=\the\bottomheight; LeftEdgeWidth:=\the\leftedgewidth; LeftEdgeDistance:=\the\leftedgedistance; LeftMarginWidth:=\the\leftmarginwidth; LeftMarginDistance:=\the\leftmargindistance; TextWidth:=\the\textwidth ; RightMarginDistance:=\the\rightmargindistance; RightMarginWidth:=\the\rightmarginwidth; RightEdgeDistance:=\the\rightedgedistance; RightEdgeWidth:=\the\rightedgewidth; InnerMarginDistance:=\the\innermargindistance; InnerMarginWidth:=\the\innermarginwidth; OuterMarginDistance:=\the\outermargindistance; OuterMarginWidth:=\the\outermarginwidth; InnerEdgeDistance:=\the\inneredgedistance; InnerEdgeWidth:=\the\inneredgewidth; OuterEdgeDistance:=\the\outeredgedistance; OuterEdgeWidth:=\the\outeredgewidth; PageOffset:=\the\pagebackgroundoffset; PageDepth:=\the\pagebackgrounddepth; LayoutColumns:=\the\layoutcolumns; LayoutColumnDistance:=\the\layoutcolumndistance; LayoutColumnWidth:=\the\layoutcolumnwidth; enddef; \stopMPinitializations \def\MPonrightpage{true} \def\MPonoddpage {true} \def\freezeMPpagelayout {\edef\MPonrightpage{\doifbothsides {tru}{tru}{fals}e}% \edef\MPonoddpage {\doifoddpageelse {tru}{fals}e}} %D We need to freeze the pagelayout before the backgrounds %D are build, because the overlay will temporarily become %D zero (overlay). \appendtoks \freezeMPpagelayout \to \everybeforepagebody %D By freezing these value every graphic, we can use layout %D variables that change halfways a page, whatever use that %D has. % obsolete (but keep the code) % % \prependtoks % \calculatereducedvsizes % this is really needed % \freezeMPpagelayout % \freezeMPlayout % to be used grouped % \to \everyMPgraphic \prependtoks \calculatereducedvsizes % this is really needed \to \everyMPgraphic \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-imp.mkiv0000644000175000017500000013603212130411274024260 0ustar norbertnorbert%D \module %D [ file=page-imp, % was: core-pag, %D version=1998.01.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Pagebody Building (Imposition), %D author=Hans Hagen & Willi Egger, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % much of this can more to run time loading ! \writestatus{loading}{ConTeXt Page Macros / Pagebody Building} \unprotect %D \macros %D {starttextdata} %D %D This is a user macro (appending to every last shipout is not %D really user friendly). \newtoks\t_page_text_data \unexpanded\def\starttextdata#1\stoptextdata {\global\let\page_shipouts_flush_text_data\page_shipouts_flush_text_data_indeed \globaladdtotoks\t_page_text_data{#1}} \let\stoptextdata\relax \def\page_shipouts_flush_text_data_indeed {\vsmashed{\the\t_page_text_data}% \global\t_page_text_data\emptytoks \global\let\page_shipouts_flush_text_data\relax} \let\page_shipouts_flush_text_data\relax \prependtoks \page_shipouts_flush_text_data \to \everylastshipout % Problem: we need to apply the finalizers to a to be shipped out page (as % we can have positioning involved). However, we can also add stuff in the % imposition, like cropmarks. Fortunately we do that with metapost so % colors etc are dealt with at that end. % \starttypen % \def\pagestoshipout{1,3,5} % \stoptypen \installcorenamespace{shipoutmethod} \installcorenamespace{layoutarranger} \installcorenamespace{layoutarrangeoption} \newcount \shippedoutpages \newcount \combinedpagescounter \let \pagestoshipout\empty % {1,3,6} \newconstant \whichpagetoshipout % 0=all 1=odd 2=even \newbox \shipoutscratchbox \setnewconstant\shipoutfinalizemethod\plusone % this will be default (we will have two finalizers) \unexpanded\def\installshipoutmethod#1#2% % a handler takes one argument: something to be boxed {\setgvalue{\??shipoutmethod#1}##1{#2{##1}}} % and shipped out (don't depend on the exact package) \let\installpagehandler\installshipoutmethod % will go \unexpanded\def\invokepagehandler#1% {\expandnamespacevalue\??shipoutmethod{#1}\v!normal} \def\page_shipouts_handle {\csname\??shipoutmethod\ifcsname\??shipoutmethod\v_page_target_method\endcsname \v_page_target_method \else \v!none \fi\endcsname} \installshipoutmethod \v!normal {\ifarrangingpages \expandafter\page_shipouts_arrange \else \expandafter\page_shipouts_normal \fi} \installshipoutmethod \v!none {\page_shipouts_ignore} % extension mechanism \newcount\c_page_boxes_flush_n % set at the lua end \let\page_boxes_flush_before\relax \let\page_boxes_flush_after \relax % used here: \def\page_boxes_shipout#1% or: \page_shipouts_apply {\dontcomplain % redundant \ifcase\c_page_boxes_flush_n\else \page_boxes_flush_before \fi \the\everybeforeshipout \ifcase\shipoutfinalizemethod \page_shipouts_handle{#1}% \else \setbox\shipoutscratchbox\hbox{#1}% just in case there are objects there, hook for testing (will go away) \finalizeshipoutbox\shipoutscratchbox \page_shipouts_handle{\box\shipoutscratchbox}% \fi \setnextrealpageno % so this comes before \everyaftershipout so in fact: \the\everyaftershipout % at this point we're already on the next realpage \ifcase\c_page_boxes_flush_n\else \page_boxes_flush_after \fi} \def\page_shipouts_ignore#1% {\begingroup \message {[\ifarrangingpages arranged \fi page \ifarrangingpages\the\arrangeno\else\the\realpageno\fi\normalspace not flushed]}% \setbox\scratchbox\hbox{#1}% \deadcycles\zerocount \endgroup} \def\page_otr_flush_every_stuff {\begingroup \setbox\scratchbox\hbox {% before the main one ! \ifcase\realfolio \or \the\everyfirstshipout \global\everyfirstshipout\emptytoks \fi % the main one \the\everyshipout\relax % always last (and after the main one) \ifnum\realpageno=\lastpage\relax \the\everylastshipout \global\everylastshipout\emptytoks \fi}% \smashbox\scratchbox \box\scratchbox \endgroup} \newdimen\d_page_shipouts_offset \d_page_shipouts_offset=-1in \def\page_shipouts_normal#1% {\global\advance\shippedoutpages\plusone % this is not resource safe! \ifx\pagestoshipout\empty \ifcase\whichpagetoshipout\relax \donetrue \or % 1 \ifodd\shippedoutpages\relax\donetrue\else\donefalse\fi \or % 2 \ifodd\shippedoutpages\relax\donefalse\else\donetrue\fi \else \donetrue \fi \else % testen, aangepast / expanded nodig ? \normalexpanded{\doifinsetelse{\the\shippedoutpages}{\pagestoshipout}}\donetrue\donefalse \fi \ifdone \setbox\shipoutscratchbox\hbox{#1}% \ifcase\shipoutfinalizemethod \finalizeshipoutbox\shipoutscratchbox \fi \normalshipout\vbox {\offinterlineskip \vskip\d_page_shipouts_offset \hskip\d_page_shipouts_offset \hbox {\page_otr_flush_every_stuff \page_otr_flush_special_content \box\shipoutscratchbox}}% \else \page_shipouts_ignore{#1}% \fi} \def\page_shipouts_arrange#1% {% \global\advance\shippedoutpages\plusone \begingroup \setbox\scratchbox\hbox {\page_otr_flush_every_stuff \page_otr_flush_special_content \box\shipoutscratchbox}% \pusharrangedpage\scratchbox \deadcycles\zerocount \endgroup} %D We need a couple of boxes for duplex printing \unknown \newbox\arrangedpageA \newbox\arrangedpageB \newbox\arrangedpageC \newbox\arrangedpageD \newbox\arrangedpageE \newbox\arrangedpageF \newbox\arrangedpageG \newbox\arrangedpageH \newconditional\arrangedswapstate \newconditional\arrangednegatestate \newconditional\arrangedmirrorstate \newconditional\arrangeddoublestate \newconditional\arrangingdisabledstate \newconditional\arrangedbackgroundstate \def\arrangedrotationO{0} \def\arrangedrotationE{0} \newcount\arrangedpageN \newcount\arrangedpageM \newcount\arrangedpageT \arrangedpageT\plusone \newcount\arrangedpageX \arrangedpageX\plusone \newcount\arrangedpageY \arrangedpageY\plusone \def\page_paper_set_offsets {\global\paperoffset\v_page_target_offset \global\advance\paperwidth -2\dimexpr\paperoffset/\arrangedpageX\relax \global\advance\paperheight-2\dimexpr\paperoffset/\arrangedpageY\relax} \def\doinstallarrangedoption#1#2% {\setvalue{\??layoutarrangeoption#1}{#2}} \def\doinstalledarrangedoption#1% {\ifcsname\??layoutarrangeoption#1\endcsname \csname\??layoutarrangeoption#1\endcsname \else \checkinstalledpagearrangement{#1}% this installs the arranger \fi} \doinstallarrangedoption\empty {} % no default and check if empty, we can have ,,, \doinstallarrangedoption\v!disable {\global\settrue\arrangingdisabledstate} \doinstallarrangedoption\v!mirrored {\global\settrue\arrangedmirrorstate} \doinstallarrangedoption\v!doublesided {\global\settrue\arrangeddoublestate} \doinstallarrangedoption\v!negative {\global\settrue\arrangednegatestate} \doinstallarrangedoption\v!rotated {\gdef\arrangedrotationO {90}% \gdef\arrangedrotationE{270}% \swapcounts\c_page_marks_nx\c_page_marks_ny} \doinstallarrangedoption{90} {\gdef\arrangedrotationO {90}% \gdef\arrangedrotationE{270}% \swapcounts\c_page_marks_nx\c_page_marks_ny} \doinstallarrangedoption{180} {\gdef\arrangedrotationO{180}% \gdef\arrangedrotationE {0}} \doinstallarrangedoption{270} {\gdef\arrangedrotationO{270}% \gdef\arrangedrotationE {90}% \swapcounts\c_page_marks_nx\c_page_marks_ny} \doinstallarrangedoption\s!reset {\global\arrangingpagesfalse} \doinstallarrangedoption\v!background {\global\settrue\arrangedbackgroundstate} \unexpanded\def\setuparranging[#1]% {\ifconditional\arrangingdisabledstate \else %global\setfalse\arrangingdisabledstate \global\arrangingpagestrue % will be conditional \global\setfalse\arrangednegatestate \global\setfalse\arrangedmirrorstate \global\setfalse\arrangeddoublestate \global\setfalse\arrangedswapstate \gdef\arrangedrotationO{0}% \gdef\arrangedrotationE{180}% \processcommalist[#1]\doinstalledarrangedoption \ifx\handlearrangedpage\undefined \global\arrangingpagesfalse \fi \setuppapersize \ifarrangingpages \ctxlua{job.disablesave()}% %\disabledirective[job.save]% \fi \fi} \def\installpagearrangement #1 % will lchange, no space {\setgvalue{\??layoutarranger#1}} \def\checkinstalledpagearrangement#1% can be empty: aaa,,bbb {\executeifdefined{\??layoutarranger#1}\donothing} \let\poparrangedpages\relax \let\pusharrangedpage\relax \def\dosetuparrangement#1#2#3#4#5#6#7#8% {\global\arrangedpageX #1% \global\arrangedpageY #2% \global\arrangedpageT #3% \global\c_page_marks_nx #4% \global\c_page_marks_ny #5% \global\let\pusharrangedpage #6% \global\let\poparrangedpages #7% \global\let\handlearrangedpage#8} \installpagearrangement {\v!normal} {\global\arrangingpagesfalse} \installpagearrangement 2*16 {\dosetuparrangement{4}{4}{16}{5}{5}% \pusharrangedpageTHIRTYTWO\poparrangedpagesAB\relax} \installpagearrangement 2*8 {\dosetuparrangement{4}{2}{8}{5}{3}% \pusharrangedpageSIXTEEN\poparrangedpagesAB\relax} \installpagearrangement 2*4 {\dosetuparrangement{2}{2}{4}{3}{3}% \pusharrangedpageEIGHT\poparrangedpagesAB\relax} \installpagearrangement 2*2 {\dosetuparrangement{2}{1}{2}{3}{2}% \pusharrangedpageFOURA\poparrangedpagesAB\relax} \installpagearrangement 2**2 {\dosetuparrangement{2}{1}{2}{3}{2}% \pusharrangedpageFOURB\poparrangedpagesAB\relax} \installpagearrangement 2SIDE {\dosetuparrangement{2}{1}{2}{3}{2}% \pusharrangedpageSIDETOP\poparrangedpagesTWO\handlearrangedpageSIDE} \installpagearrangement 2TOP {\dosetuparrangement{1}{2}{2}{2}{3}% \pusharrangedpageSIDETOP\poparrangedpagesTWO\handlearrangedpageTOP} \installpagearrangement 2UP {\dosetuparrangement{2}{1}{4}{3}{2}% \pusharrangedpageTWO\poparrangedpagesTWO\handlearrangedpageTWOUP} \installpagearrangement 2DOWN {\dosetuparrangement{1}{2}{4}{2}{3}% \pusharrangedpageTWO\poparrangedpagesTWO\handlearrangedpageTWODOWN} \installpagearrangement 2*4*2 % one defined by Willy Egger: {\dosetuparrangement{2}{2}{4}{3}{3}% \pusharrangedpageSIXTEENTWO\poparrangedpagesAtoD\relax} \installpagearrangement 2*2*4 % onother one of Willy Egger {\dosetuparrangement{2}{1}{8}{3}{2}% \pusharrangedpageSIXTEENFOUR\poparrangedpagesAtoH\relax} \installpagearrangement 2TOPSIDE {\dosetuparrangement{1}{2}{4}{2}{3}% \pusharrangedpageTWOTOPSIDE\poparrangedpagesTWOTOPSIDE\handlearrangedpageTOP} \def\filluparrangedpages % beware: \realpageno is 1 ahead {\ifarrangingpages \scratchcounter\numexpr\realpageno-\plusone\relax \dosetmodulo\scratchcounter\arrangedpageT\scratchcounter \ifcase\scratchcounter\else \advance\scratchcounter \plusone \dostepwiserecurse\scratchcounter\arrangedpageT\plusone {\noheaderandfooterlines\page_otr_insert_dummy_page}% \fi \fi} \def\handlearrangedpageXandY#1#2#3#4#5% {\global\setbox#5\hbox to \arrangedpageX\paperwidth {\setbox\scratchbox\vbox to \arrangedpageY\paperheight {\offinterlineskip \vskip#4\paperheight \hskip#3\paperwidth \dorotatebox{\ifcase#2 0\else180\fi}\hbox{\box#1}% \vfill}% \wd\scratchbox\zeropoint \box\scratchbox\box#5\hss}} \def\gotonextarrangepage {\global\advance\arrangeno \plusone \def\pagecutmarksymbol{\the\arrangeno}} \def\outputarrangedbox#1% {\begingroup \forgetall % somehow we're back and need to redo this \gotonextarrangepage \ifnum\arrangedrotationO\arrangedrotationE>\zerocount \setbox#1\vbox {\ifconditional\arrangeddoublestate \ifodd\arrangeno \dorotatebox\arrangedrotationO\hbox{\box#1}% \else \dorotatebox\arrangedrotationE\hbox{\box#1}% \fi \else \dorotatebox\arrangedrotationO\hbox{\box#1}% \fi}% \fi \ifconditional\arrangedmirrorstate \page_boxes_apply_mirror{#1}% \fi \ifconditional\arrangednegatestate \page_boxes_apply_negate{#1}% \fi \page_marks_add_more #1% \page_boxes_apply_center #1% \page_boxes_apply_mirror_print #1% \page_boxes_apply_orientate_print#1% \page_boxes_apply_offset #1% \page_boxes_apply_negate_print #1% % \ifconditional\arrangedbackgroundstate \page_backgrounds_add_to_print#1% \fi % \page_shipouts_normal{\box#1}% \endgroup} %D The format file can be 16K smaller when we postpone the %D real arrangments. Some day ... \def\reportarrangedpage#1% {\showmessage\m!system{23}{\the\realpageno.\the\pageno\ifnum\subpageno>0 .\the\subpageno\fi,\number#1}} \def\advancearrangedpageN {\global\advance\arrangedpageN\plusone} % TOP % 32/16/8/4/SIDE \def\poparrangedpagesAB {\ifnum\arrangedpageN>\zerocount \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \global\arrangedpageN\zerocount \fi} \def\pusharrangedpageTHIRTYTWO#1% taco's challenge {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}033\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}003\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}130\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}130\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}033\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}003\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}102\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}132\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}031\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 12 \or \handlearrangedpageXandY{#1}031\arrangedpageA % 13 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 14 \or \handlearrangedpageXandY{#1}102\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}132\arrangedpageA % 16 \or \handlearrangedpageXandY{#1}122\arrangedpageA % 17 \or \handlearrangedpageXandY{#1}112\arrangedpageB % 18 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 19 \or \handlearrangedpageXandY{#1}021\arrangedpageA % 20 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 21 \or \handlearrangedpageXandY{#1}021\arrangedpageB % 22 \or \handlearrangedpageXandY{#1}122\arrangedpageB % 23 \or \handlearrangedpageXandY{#1}112\arrangedpageA % 24 \or \handlearrangedpageXandY{#1}013\arrangedpageA % 25 \or \handlearrangedpageXandY{#1}023\arrangedpageB % 26 \or \handlearrangedpageXandY{#1}120\arrangedpageB % 27 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 28 \or \handlearrangedpageXandY{#1}120\arrangedpageA % 29 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 30 \or \handlearrangedpageXandY{#1}013\arrangedpageB % 31 \or \handlearrangedpageXandY{#1}023\arrangedpageA % 32 \poparrangedpages \fi} \def\pusharrangedpageSIXTEEN#1% changed to match the official way of doing {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}031\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}031\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}130\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}130\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}120\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}120\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 12 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 13 \or \handlearrangedpageXandY{#1}021\arrangedpageB % 14 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}021\arrangedpageA % 16 \poparrangedpages \fi} \def\pusharrangedpageEIGHT#1% changed to match the official way of doing {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}011\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 8 \poparrangedpages \fi} \def\pusharrangedpageFOURA{\pusharrangedpageFOURdo01} \def\pusharrangedpageFOURB{\pusharrangedpageFOURdo10} \def\pusharrangedpageFOURdo#1#2#3% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#3}010\arrangedpageA % 1 \or \handlearrangedpageXandY{#3}0{#1}0\arrangedpageB % 2/3 not {1} \or \handlearrangedpageXandY{#3}0{#2}0\arrangedpageB % 3/2 not {1} \or \handlearrangedpageXandY{#3}000\arrangedpageA % 4 \poparrangedpages \fi} \def\pusharrangedpageSIDETOP#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \poparrangedpages \fi} \def\handlearrangedpageSIDE {\wd\arrangedpageA\paperwidth \wd\arrangedpageB\paperwidth \global\setbox\arrangedpageA\hbox {\box\arrangedpageA\box\arrangedpageB}% \ht\arrangedpageA\paperheight} \def\handlearrangedpageTOP {\ht\arrangedpageA\paperheight \ht\arrangedpageB\paperheight \global\setbox\arrangedpageA\vbox {\offinterlineskip\vskip\paperheight \box\arrangedpageA\box\arrangedpageB}% \global\setbox\arrangedpageB\box\scratchbox} % ? % 2UP/2DOWN / 1pt prevents overflow \def\splitoffarrangedpagesTWO {\splittopskip\zeropoint \global\setbox\arrangedpageA\vsplit\arrangedpageB to \onepoint \scratchdimen\dimexpr\ht\arrangedpageB-\onepoint\relax \ifdim\scratchdimen>\onepoint \setbox\scratchbox\vsplit\arrangedpageB to \scratchdimen \fi} \def\handlearrangedpageTWOUP {\splitoffarrangedpagesTWO \ht\arrangedpageA\paperheight \ht\arrangedpageB\paperheight \ifconditional\arrangedswapstate \global\setbox\arrangedpageA\hbox {\page_boxes_apply_clip_print_left \arrangedpageA \box\arrangedpageA \page_boxes_apply_clip_print_right\arrangedpageB \box\arrangedpageB}% \setfalse\arrangedswapstate \else \global\setbox\arrangedpageA\hbox {\page_boxes_apply_clip_print_left \arrangedpageB \box\arrangedpageB \page_boxes_apply_clip_print_right\arrangedpageA \box\arrangedpageA}% \settrue\arrangedswapstate \fi \global\setbox\arrangedpageB\box\scratchbox} \def\handlearrangedpageTWODOWN {\splitoffarrangedpagesTWO \ht\arrangedpageA\paperheight \ht\arrangedpageB\paperheight \ifconditional\arrangedswapstate \global\setbox\arrangedpageA\vbox {\offinterlineskip \vskip\paperheight \box\arrangedpageA \box\arrangedpageB}% \setfalse\arrangedswapstate \else \global\setbox\arrangedpageA\vbox {\offinterlineskip \vskip\paperheight \box\arrangedpageB \box\arrangedpageA}% \settrue\arrangedswapstate \fi \global\setbox\arrangedpageB\box\scratchbox} \def\poparrangedpagesTWO {\ifnum\arrangedpageN>\zerocount \setfalse\arrangedswapstate \doloop {\handlearrangedpage \bgroup \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \ht\arrangedpageA\paperheight \wd\arrangedpageA\paperwidth \outputarrangedbox\arrangedpageA \egroup \ifdim\ht\arrangedpageB=\zeropoint \exitloop \fi}% \global\arrangedpageN\zerocount \fi} \def\pusharrangedpageTWO#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \global\setbox\arrangedpageB\vbox {\offinterlineskip \unvbox\arrangedpageB \allowbreak \setbox#1\vbox{\box#1}% really needed in order to keep real dimensions \ht#1\onepoint \dp#1\zeropoint \vbox{\box#1}}} \def\poparrangedpagesTWOTOPSIDE {\ifnum\arrangedpageN>\zerocount \bgroup \global\arrangedpageN\plustwo \poparrangedpagesTWO \let\arrangedpageA\arrangedpageC \let\arrangedpageB\arrangedpageD \global\arrangedpageN\plustwo \poparrangedpagesTWO \global\arrangedpageN\zerocount \egroup \fi} \def\pusharrangedpageTWOTOPSIDE#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 2 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 2 \poparrangedpages \fi} %D Willy Egger's sheet simulations: \def\poparrangedpagesAtoH {\ifnum\arrangedpageN>\zerocount \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \outputarrangedbox\arrangedpageC \outputarrangedbox\arrangedpageD \outputarrangedbox\arrangedpageE \outputarrangedbox\arrangedpageF \outputarrangedbox\arrangedpageG \outputarrangedbox\arrangedpageH \global\arrangedpageN\zerocount \fi} % to arrange 16 pages on 2 sheets to form one booklet \def\poparrangedpagesAtoD {\ifnum\arrangedpageN>\zerocount \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \outputarrangedbox\arrangedpageC \outputarrangedbox\arrangedpageD \global\arrangedpageN\zerocount \fi} % to arrange 16 pages on 4 sheets to form one booklet \def\pusharrangedpageSIXTEENFOUR#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageE % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageF % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageG % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageH % 8 \or \handlearrangedpageXandY{#1}010\arrangedpageH % 9 \or \handlearrangedpageXandY{#1}000\arrangedpageG % 10 \or \handlearrangedpageXandY{#1}010\arrangedpageF % 11 \or \handlearrangedpageXandY{#1}000\arrangedpageE % 12 \or \handlearrangedpageXandY{#1}010\arrangedpageD % 13 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 14 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 16 \poparrangedpages \fi} % to arrange 16 pages on 2 sheets to form one booklet \def\pusharrangedpageSIXTEENTWO#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}011\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}011\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}001\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageD % 5 \or \handlearrangedpageXandY{#1}110\arrangedpageC % 6 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}100\arrangedpageC % 11 \or \handlearrangedpageXandY{#1}110\arrangedpageD % 12 \or \handlearrangedpageXandY{#1}011\arrangedpageD % 13 \or \handlearrangedpageXandY{#1}001\arrangedpageC % 14 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 16 \poparrangedpages \fi} %D Might be used if a printer is printing from a rol or creating mini-books from A4: %D This section has 16 pages. The folding scheme is first a Z-fold and at the end %D a final fold in the spine. %D Coding: [2*8*Z] \installpagearrangement 2*8*Z {\dosetuparrangement{2}{4}{8}{3}{5}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageSIXTEENZ\poparrangedpagesAB\relax} \def\pusharrangedpageSIXTEENZ#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}101\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}111\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}012\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}002\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}103\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}113\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}103\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}113\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}012\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}002\arrangedpageA % 12 \or \handlearrangedpageXandY{#1}101\arrangedpageA % 13 \or \handlearrangedpageXandY{#1}111\arrangedpageB % 14 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 16 \poparrangedpages \fi} %D Another Z-folded section with 12 pages %D Coding: [2*6*Z] \installpagearrangement 2*6*Z {\dosetuparrangement{2}{3}{6}{3}{4}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageTWELVEZ\poparrangedpagesAB\relax} \def\pusharrangedpageTWELVEZ#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1: rotation (0=upright),x (0=first column),y (0=first row) \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}101\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}111\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}012\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}002\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}012\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}002\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}101\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}111\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 12 \poparrangedpages \fi} %D For Heinz' special greeting cards folding. This scheme is also used for the PocketDiary (module): %D Coding: [1*8] \installpagearrangement 1*8 {\dosetuparrangement{4}{2}{8}{5}{3}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageEIGHTSINGLESIDEDFOLDED\poparrangedpagesTWO\relax} \def\pusharrangedpageEIGHTSINGLESIDEDFOLDED#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}020\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}030\arrangedpageA % 3 \or \handlearrangedpageXandY{#1}131\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}121\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}111\arrangedpageA % 6 \or \handlearrangedpageXandY{#1}101\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \poparrangedpages \fi} %D This is not a section. \CONTEXT\ places 4 pages on a sheet of paper, singlesided %D Coding: [1*4] \installpagearrangement 1*4 {\dosetuparrangement{2}{2}{4}{3}{3}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageFOURSINGLESIDEDFOLDED\poparrangedpagesTWO\relax} \def\pusharrangedpageFOURSINGLESIDEDFOLDED#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}100\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}001\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 3 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 4 \poparrangedpages \fi} %D This imposition scheme was requested by Hraban Ramm, by Willi Egger 21-07-2003 %D Coding: [3SIDE] \installpagearrangement 3SIDE {\dosetuparrangement{3}{1}{3}{4}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageTHREESIDE\poparrangedpagesAB\relax} \def\pusharrangedpageTHREESIDE#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}010\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 6 \poparrangedpages \fi} %D FLYER in three parts and 6 pages 22-10-2010 %D Coding: [TRYPTICHON] \installpagearrangement TRYPTICHON {\dosetuparrangement{3}{1}{3}{4}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageFLYERSIX\poparrangedpagesAB\relax} \def\pusharrangedpageFLYERSIX#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}020\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 6 \poparrangedpages \fi} %D FLYER in Z-fold with 8 pages 22-01-2010 %D Coding: [ZFLYER-8] \installpagearrangement ZFLYER-8 {\dosetuparrangement{4}{1}{4}{5}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageZFLYEREIGHT\poparrangedpagesAB\relax} \def\pusharrangedpageZFLYEREIGHT#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}030\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 8 \poparrangedpages \fi} %D FLYER in Z-fold with 10 pages 04-08-2010 %D Coding: [ZFLYER-10] \installpagearrangement ZFLYER-10 {\dosetuparrangement{5}{1}{5}{6}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageZFLYERTEN\poparrangedpagesAB\relax} \def\pusharrangedpageZFLYERTEN#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}040\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}040\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}030\arrangedpageA % 10 \poparrangedpages \fi} %D FLYER in Z-fold with 12 pages 04-08-2010 %D Coding: [ZFLYER-12] \installpagearrangement ZFLYER-12 {\dosetuparrangement{6}{1}{6}{7}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageZFLYERTWELVE\poparrangedpagesAB\relax} \def\pusharrangedpageZFLYERTWELVE#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}050\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}040\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}050\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 10 \or \handlearrangedpageXandY{#1}030\arrangedpageA % 11 \or \handlearrangedpageXandY{#1}040\arrangedpageA % 12 \poparrangedpages \fi} %D FLYER folded as a map with 6 pages per side. %D Coding: [MAPFLYER-12] \installpagearrangement MAPFLYER-12 {\dosetuparrangement{3}{2}{6}{4}{3}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageMFLYERTWELVE\poparrangedpagesAB\relax} \def\pusharrangedpageMFLYERTWELVE#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}020\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}021\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 10 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 11 \or \handlearrangedpageXandY{#1}021\arrangedpageA % 12 \poparrangedpages \fi} %D FLYER folded as double window with 4 pages per side. %D Coding: [DOUBLEWINDOW] \installpagearrangement DOUBLEWINDOW {\dosetuparrangement{4}{1}{4}{5}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageDOUBLEWINDOWEIGHT\poparrangedpagesAB\relax} \def\pusharrangedpageDOUBLEWINDOWEIGHT#1% Willi's approach {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}020\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}030\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 8 \poparrangedpages \fi} %D Imposition as requested by Jan Pohanka 26-08-2010, 4 pages, two verso, two recto, %D uneven pages upright and down, even pages top and rotated 180. %D Implementation with 2 pages for conference-name-display %D Coding: [1*2-Conference] \installpagearrangement 1*2-Conference {\dosetuparrangement{1}{2}{4}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageCONFERENCE2\poparrangedpagesAB\relax} \def\pusharrangedpageCONFERENCE2#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}001\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}100\arrangedpageA % 2 \poparrangedpages \fi} %D Implementation with 4 pages for conference-name-display %D Coding: [1*4-Conference] \installpagearrangement 1*4-Conference {\dosetuparrangement{1}{2}{4}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageCONFERENCE4\poparrangedpagesAB\relax} \def\pusharrangedpageCONFERENCE4#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}001\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}100\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 4 \poparrangedpages \fi} %D There should be arrangements for sections made of heavy and thick paper. i.e. the heavier the paper %D the fewer pages per section: %D Section with 8 pages put on to sheets of paper. Each sheet carries recto 2 and verso 2 pages. %D Coding: [2*2*2] \installpagearrangement 2*2*2 {\dosetuparrangement{2}{1}{2}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageEIGHTTWO\poparrangedpagesAtoD\relax} \def\pusharrangedpageEIGHTTWO#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageD % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \poparrangedpages \fi} %D Section with 12 pages, built from three sheets of paper. %D Each sheet carries 2 pages recto and verso. %D Coding: [2*2*3] \def\poparrangedpagesAtoF {\ifnum\arrangedpageN>\zerocount \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \outputarrangedbox\arrangedpageC \outputarrangedbox\arrangedpageD \outputarrangedbox\arrangedpageE \outputarrangedbox\arrangedpageF \global\arrangedpageN\zerocount \fi} \installpagearrangement 2*2*3 {\dosetuparrangement{2}{1}{2}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageTWELVETWO\poparrangedpagesAtoF\relax} \def\pusharrangedpageTWELVETWO#1% {\advancearrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageE % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageF % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageF % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageE % 8 \or \handlearrangedpageXandY{#1}010\arrangedpageD % 9 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 10 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 12 \poparrangedpages \fi} % % From Wolfgang for Mari (mail on list) ... yes or no in core .. time for % % delayed loading ... % % % % http://stamphenge.wordpress.com/minibooks/meander-accordion-folded-book/ % % \installpagearrangement MEANDER16 % {\dosetuparrangement{4}{4}{16}{5}{5}% % \pusharrangedpageMEANDERSIXTEEN\poparrangedpagesXY\relax} % % \def\pusharrangedpageMEANDERSIXTEEN#1% % {\advancearrangedpageN % \reportarrangedpage\arrangedpageN % \ifcase\arrangedpageN % \or \handlearrangedpageXandY{#1}000\arrangedpageA % \or \handlearrangedpageXandY{#1}010\arrangedpageA % \or \handlearrangedpageXandY{#1}020\arrangedpageA % \or \handlearrangedpageXandY{#1}030\arrangedpageA % \or \handlearrangedpageXandY{#1}131\arrangedpageA % \or \handlearrangedpageXandY{#1}121\arrangedpageA % \or \handlearrangedpageXandY{#1}111\arrangedpageA % \or \handlearrangedpageXandY{#1}101\arrangedpageA % \or \handlearrangedpageXandY{#1}002\arrangedpageA % \or \handlearrangedpageXandY{#1}012\arrangedpageA % \or \handlearrangedpageXandY{#1}022\arrangedpageA % \or \handlearrangedpageXandY{#1}032\arrangedpageA % \or \handlearrangedpageXandY{#1}133\arrangedpageA % \or \handlearrangedpageXandY{#1}123\arrangedpageA % \or \handlearrangedpageXandY{#1}113\arrangedpageA % \or \handlearrangedpageXandY{#1}103\arrangedpageA % \poparrangedpages % \fi} % % % \definepapersize[small][width=6cm,height=6cm] % % \definepapersize[big][width=30cm,height=30cm] % % \setuppapersize[small][big] % % \setuppagenumbering[location=] % % \setuparranging[MEANDER16] % % \setuplayout % % [location=middle, % % marking=on] % % \starttext % % \dorecurse{32}{\centerbox{\ssd\recurselevel}} % % \stoptext % % % By Willi: % % \installpagearrangement MEANDER9 % {\dosetuparrangement{3}{3}{9}{4}{4}% % \pusharrangedpageMEANDERNINE\poparrangedpagesXY\relax} % % \def\pusharrangedpageMEANDERNINE#1% % {\advancearrangedpageN % \reportarrangedpage\arrangedpageN % \ifcase\arrangedpageN % \or \handlearrangedpageXandY{#1}000\arrangedpageA % \or \handlearrangedpageXandY{#1}010\arrangedpageA % \or \handlearrangedpageXandY{#1}020\arrangedpageA % \or \handlearrangedpageXandY{#1}121\arrangedpageA % \or \handlearrangedpageXandY{#1}111\arrangedpageA % \or \handlearrangedpageXandY{#1}101\arrangedpageA % \or \handlearrangedpageXandY{#1}002\arrangedpageA % \or \handlearrangedpageXandY{#1}012\arrangedpageA % \or \handlearrangedpageXandY{#1}022\arrangedpageA % \poparrangedpages % \fi} % % handy for stickers etc, this way we can treat them as page % % \setuppapersize [XY][A4] % \setuppaper [topspace=5mm,backspace=5mm,dx=1mm,dy=1mm,nx=2,ny=6] % \setuplayout [page] [topspace=5mm,backspace=5mm] % \setuplayout [page] % \setuplayout [location=middle] % \setuparranging [XY] % \showframe % % \starttext \dorecurse{30}{test \recurselevel \page} \stoptext \def\pusharrangedpageXY#1% {\advancearrangedpageN \global\advance\arrangedpageM\plusone \reportarrangedpage\arrangedpageN \global\setbox\arrangedpageB\hbox \ifdim\v_page_target_width>\zeropoint to \v_page_target_width \fi {\ifvoid\arrangedpageB\else \unhbox\arrangedpageB \ifdim\v_page_target_dx>\zeropoint \hskip\v_page_target_dx \else \hss \hskip\v_page_target_dx \hss \fi \fi \box#1}% \ifnum\arrangedpageM<\arrangedpageX\else \global\setbox\arrangedpageA\vbox \ifdim\v_page_target_height>\zeropoint to \v_page_target_height \fi {\offinterlineskip \ifvoid\arrangedpageA\else \unvbox\arrangedpageA \ifdim\v_page_target_dy>\zeropoint \vskip\v_page_target_dy \else \vss \vskip\v_page_target_dy \vss \fi \fi \box\arrangedpageB}% \global\arrangedpageM\zerocount \fi \ifnum\arrangedpageN<\arrangedpageT\else \poparrangedpages \fi} \def\poparrangedpagesXY {\ifnum\arrangedpageN>\zerocount \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \global\arrangedpageN\zerocount \global\arrangedpageM\zerocount \fi} \installpagearrangement XY {\dosetuparrangement \v_page_target_nx \v_page_target_ny \v_page_target_xy \zerocount \zerocount \pusharrangedpageXY\poparrangedpagesXY\relax} %D A crazy definition, don't guess who pushed me for the landscape option. \def\page_imposition_xy_height {\dimexpr \dimexpr \v_page_target_height -\numexpr\v_page_target_ny-1\relax\v_page_target_dy \relax /\v_page_target_ny \relax} \def\page_imposition_xy_width {\dimexpr \dimexpr \v_page_target_width -\numexpr\v_page_target_nx-1\relax\v_page_target_dx \relax /\v_page_target_nx \relax} \definepapersize [XY] [\c!height=\page_imposition_xy_height, \c!width =\page_imposition_xy_width] \setuppaper [\c!width =\dimexpr\printpaperwidth -2\v_page_target_backspace\relax, \c!height=\dimexpr\printpaperheight-2\v_page_target_topspace \relax] % \definepageshift[test][horizontal][10pt,20pt,30pt,40pt,50pt] % \definepageshift[test][vertical] [10pt,20pt,30pt,40pt,50pt] % % \setuppageshift[test] % \setuppageshift[test][test] % \setuppageshift[test][none] % \setuppageshift[none][test] % \setuppageshift[paper][test][test] % arrange only % \setuppageshift[paper][test] % arrange only % \setuppageshift[print][test][test] % % \showframe \dorecurse{100}{\input tufte \par} % #1=name #2=horizontal|vertical #3=shiftlist % this will move to lua \installcorenamespace {pageshift} \unexpanded\def\definepageshift {\dotripleargument\page_boxes_define_shift} \def\page_boxes_define_shift[#1][#2][#3]% {\setvalue{\??pageshift#2:#1}{#3}} \let\page_boxes_h_shifts\empty \let\page_boxes_v_shifts\empty \newcount\c_page_boxes_h_shifts \newcount\c_page_boxes_v_shifts \newdimen\d_page_boxes_h_shifts \newdimen\d_page_boxes_v_shifts \let\page_boxes_apply_shift_print\gobbleoneargument \let\page_boxes_apply_shift_paper\gobbleoneargument \def\page_boxes_filter_shift#1#2#3% #1=\dimenx #2=\xpageshifts #3=\nofxpageshifts {#1\zeropoint \ifx#2\empty \else \global\advance#3\plusone \getfromcommacommand[#2][#3]% \ifx\commalistelement\empty \global#3\plusone % we cycle \getfromcommacommand[#2][#3]% \fi \ifx\commalistelement\empty \else #1\commalistelement\relax % the relax is really needed as there is an \if later on \fi \fi} \def\page_boxes_apply_shift#1% {\page_boxes_filter_shift\d_page_boxes_h_shifts\page_boxes_h_shifts\c_page_boxes_h_shifts \page_boxes_filter_shift\d_page_boxes_v_shifts\page_boxes_v_shifts\c_page_boxes_v_shifts \ifzeropt\d_page_boxes_h_shifts \ifzeropt\d_page_boxes_v_shifts % nothing to shift \else \page_boxes_apply_shift_indeed#1% \fi \else \page_boxes_apply_shift_indeed#1% \fi} \def\page_boxes_apply_shift_indeed#1% {\edef\next{\wd#1\the\wd#1\ht#1\the\ht#1\dp#1\the\dp#1}% \setbox#1\vbox {\offinterlineskip \vskip\d_page_boxes_v_shifts \hskip\d_page_boxes_h_shifts \box#1}% \next} \unexpanded\def\setuppageshift {\dotripleempty\page_boxes_setup_shift} \def\page_boxes_setup_shift[#1][#2][#3]% page|paper horizontal vertical {\ifthirdargument % paper=arrange \edef\page_boxes_h_shifts{\ifcsname\??pageshift\v!horizontal:#2\endcsname\csname\??pageshift\v!horizontal:#2\endcsname\fi}% \edef\page_boxes_v_shifts{\ifcsname\??pageshift\v!vertical :#3\endcsname\csname\??pageshift\v!vertical :#3\endcsname\fi}% \doifelse{#1}\v!page {\let\page_boxes_apply_shift_print\page_boxes_apply_shift}{\let\page_boxes_apply_shift_print\gobbleoneargument}% \doifelse{#1}\v!paper{\let\page_boxes_apply_shift_paper\page_boxes_apply_shift}{\let\page_boxes_apply_shift_paper\gobbleoneargument}% \else\ifsecondargument \doifinsetelse{#1}{\v!page,\v!paper} {\setuppageshift[#1][#2][#2]} {\setuppageshift[\v!page][#1][#2]}% \else\iffirstargument \setuppageshift[\v!page][#1][#1]% \fi\fi\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-ini.lua0000644000175000017500000007320312161703335024113 0ustar norbertnorbertif not modules then modules = { } end modules ['colo-ini'] = { version = 1.000, comment = "companion to colo-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, tonumber = type, tonumber local concat, insert, remove = table.concat, table.insert, table.remove local format, gmatch, gsub, lower, match, find = string.format, string.gmatch, string.gsub, string.lower, string.match, string.find local P, R, C, Cc = lpeg.P, lpeg.R, lpeg.C, lpeg.Cc local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local formatters = string.formatters local trace_define = false trackers.register("colors.define",function(v) trace_define = v end) local report_colors = logs.reporter("colors","defining") local attributes, backends, storage = attributes, backends, storage local context, commands = context, commands local settings_to_hash_strict = utilities.parsers.settings_to_hash_strict 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 register_color = colors.register local attributes_list = attributes.list local colorvalues = colors.values local transparencyvalues = transparencies.values colors.sets = colors.sets or { } -- sets are mostly used for local colorsets = colors.sets -- showing lists of defined local colorset = { } -- colors colorsets.default = colorset storage.register("attributes/colors/sets",colorsets,"attributes.colors.sets") local stack = { } function colors.pushset(name) insert(stack,colorset) colorset = colorsets[name] if not colorset then colorset = { } colorsets[name] = colorset end end function colors.popset(name) colorset = remove(stack) end function colors.setlist(name) return table.sortedkeys(name and name ~= "" and colorsets[name] or colorsets.default or {}) end local function definecolor(name, ca, global) if ca and ca > 0 then if global then if trace_define then report_colors("define global color %a with attribute %a",name,ca) end context.colordefagc(name,ca) else if trace_define then report_colors("define local color %a with attribute %a",name,ca) end context.colordefalc(name,ca) end else if global then context.colordefrgc(name) else context.colordefrlc(name) end end colorset[name] = true-- maybe we can store more end local function inheritcolor(name, ca, global) if ca and ca ~= "" then if global then if trace_define then report_colors("inherit global color %a with attribute %a",name,ca) end context.colordeffgc(name,ca) -- some day we will set the macro directly else if trace_define then report_colors("inherit local color %a with attribute %a",name,ca) end context.colordefflc(name,ca) end else if global then context.colordefrgc(name) else context.colordefrlc(name) end end colorset[name] = true-- maybe we can store more end local function definetransparent(name, ta, global) if ta and ta > 0 then if global then if trace_define then report_colors("define global transparency %a with attribute %a",name,ta) end context.colordefagt(name,ta) else if trace_define then report_colors("define local transparency %a with attribute %a",name,ta) end context.colordefalt(name,ta) end else if global then context.colordefrgt(name) else context.colordefrlt(name) end end end local function inherittransparent(name, ta, global) if ta and ta ~= "" then if global then if trace_define then report_colors("inherit global transparency %a with attribute %a",name,ta) end context.colordeffgt(name,ta) else if trace_define then report_colors("inherit local transparency %a with attribute %a",name,ta) end context.colordefflt(name,ta) end else if global then context.colordefrgt(name) else context.colordefrlt(name) end end end local transparent = { none = 0, normal = 1, multiply = 2, screen = 3, overlay = 4, softlight = 5, hardlight = 6, colordodge = 7, colorburn = 8, darken = 9, lighten = 10, difference = 11, exclusion = 12, hue = 13, saturation = 14, color = 15, luminosity = 16, } local gray_okay, rgb_okay, cmyk_okay, spot_okay, multichannel_okay, forced = true, true, true, true, true, false function colors.forcesupport(gray,rgb,cmyk,spot,multichannel) -- pdfx driven gray_okay, rgb_okay, cmyk_okay, spot_okay, multichannel_okay, forced = gray, rgb, cmyk, spot, multichannel, true report_colors("supported models: gray %a, rgb %a, cmyk %a, spot %a",gray,rgb,cmyk,spot) -- multichannel=%l multichannel end local function forcedmodel(model) -- delayed till the backend but mp directly if not forced then return model elseif model == 2 then -- gray if gray_okay then -- okay elseif cmyk_okay then return 4 elseif rgb_okay then return 3 end elseif model == 3 then -- rgb if rgb_okay then -- okay elseif cmyk_okay then return 4 elseif gray_okay then return 2 end elseif model == 4 then -- cmyk if cmyk_okay then -- okay elseif rgb_okay then return 3 elseif gray_okay then return 2 end elseif model == 5 then -- spot if cmyk_okay then return 4 elseif rgb_okay then return 3 elseif gray_okay then return 2 end end return model end colors.forcedmodel = forcedmodel -- By coupling we are downward compatible. When we decouple we need to do more tricky -- housekeeping (e.g. persist color independent transparencies when color bound ones -- are nil.) colors.couple = true function colors.definetransparency(name,n) transparent[name] = n end local registered = { } local function do_registerspotcolor(parent,name,parentnumber,e,f,d,p) if not registered[parent] then local v = colorvalues[parentnumber] if v then local model = colors.default -- else problems with shading etc if model == 1 then model = v[1] end if e and e ~= "" then registrations.spotcolorname(parent,e) -- before registration of the color end if model == 2 then -- name noffractions names p's r g b registrations.grayspotcolor(parent,f,d,p,v[2]) elseif model == 3 then registrations.rgbspotcolor (parent,f,d,p,v[3],v[4],v[5]) elseif model == 4 then registrations.cmykspotcolor(parent,f,d,p,v[6],v[7],v[8],v[9]) end end registered[parent] = true end end local function do_registermultitonecolor(parent,name,parentnumber,e,f,d,p) -- same as spot but different template if not registered[parent] then local v = colorvalues[parentnumber] if v then local model = colors.default -- else problems with shading etc if model == 1 then model = v[1] end if model == 2 then registrations.grayindexcolor(parent,f,d,p,v[2]) elseif model == 3 then registrations.rgbindexcolor (parent,f,d,p,v[3],v[4],v[5]) elseif model == 4 then registrations.cmykindexcolor(parent,f,d,p,v[6],v[7],v[8],v[9]) end end registered[parent] = true end end function colors.definesimplegray(name,s) return register_color(name,'gray',s) -- we still need to get rid of 'color' end local hexdigit = R("09","AF","af") local hexnumber = hexdigit * hexdigit / function(s) return tonumber(s,16)/255 end + Cc(0) local hexpattern = hexnumber^-3 * P(-1) local hexcolor = Cc("H") * P("#") * hexpattern local left = P("(") local right = P(")") local comma = P(",") local mixnumber = lpegpatterns.number / tonumber local mixname = C(P(1-left-right-comma)^1) ----- mixcolor = Cc("M") * mixnumber * left * mixname * (comma * mixname)^-1 * right * P(-1) local mixcolor = Cc("M") * mixnumber * left * mixname * (comma * mixname)^0 * right * P(-1) -- one is also ok local exclamation = P("!") local pgfnumber = lpegpatterns.digit^0 / function(s) return tonumber(s)/100 end local pgfname = C(P(1-exclamation)^1) local pgfcolor = Cc("P") * pgfname * exclamation * pgfnumber * (exclamation * pgfname)^-1 * P(-1) local specialcolor = hexcolor + mixcolor local l_color = attributes.list[a_color] local l_transparency = attributes.list[a_transparency] directives.register("colors.pgf",function(v) if v then specialcolor = hexcolor + mixcolor + pgfcolor else specialcolor = hexcolor + mixcolor end end) function colors.defineprocesscolor(name,str,global,freeze) -- still inconsistent color vs transparent local what, one, two, three = lpegmatch(specialcolor,str) if what == "H" then -- for old times sake (if we need to feed from xml or so) definecolor(name, register_color(name,'rgb',one,two,three),global) elseif what == "M" then -- intermediate return colors.defineintermediatecolor(name,one,l_color[two],l_color[three],l_transparency[two],l_transparency[three],"",global,freeze) elseif what == "P" then -- pgf for tikz return colors.defineintermediatecolor(name,two,l_color[one],l_color[three],l_transparency[one],l_transparency[three],"",global,freeze) else local settings = settings_to_hash_strict(str) if settings then local r, g, b = settings.r, settings.g, settings.b if r or g or b then -- we can consider a combined rgb cmyk s definition definecolor(name, register_color(name,'rgb', tonumber(r) or 0, tonumber(g) or 0, tonumber(b) or 0), global) else local c, m, y, k = settings.c, settings.m, settings.y, settings.k if c or m or y or b then definecolor(name, register_color(name,'cmyk',tonumber(c) or 0, tonumber(m) or 0, tonumber(y) or 0, tonumber(k) or 0), global) else local h, s, v = settings.h, settings.s, settings.v if v then r, g, b = colors.hsvtorgb(tonumber(h) or 0, tonumber(s) or 1, tonumber(v) or 1) -- maybe later native definecolor(name, register_color(name,'rgb',r,g,b), global) else local x = settings.x or h if x then r, g, b = lpegmatch(hexpattern,x) -- can be inlined definecolor(name, register_color(name,'rgb',r,g,b), global) else definecolor(name, register_color(name,'gray',tonumber(s) or 0), global) end end end end local a, t = settings.a, settings.t if a and t then definetransparent(name, transparencies.register(name,transparent[a] or tonumber(a) or 1,tonumber(t) or 1), global) elseif colors.couple then -- definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up definetransparent(name, 0, global) -- can be sped up end elseif freeze then local ca = attributes_list[a_color] [str] local ta = attributes_list[a_transparency][str] if ca then definecolor(name, ca, global) end if ta then definetransparent(name, ta, global) end else inheritcolor(name, str, global) inherittransparent(name, str, global) -- if global and str ~= "" then -- For Peter Rolf who wants access to the numbers in Lua. (Currently only global is supported.) -- attributes_list[a_color] [name] = attributes_list[a_color] [str] or attributes.unsetvalue -- reset -- attributes_list[a_transparency][name] = attributes_list[a_transparency][str] or attributes.unsetvalue -- end end end colorset[name] = true-- maybe we can store more end function colors.isblack(ca) -- maybe commands local cv = ca > 0 and colorvalues[ca] return (cv and cv[2] == 0) or false end function colors.definespotcolor(name,parent,str,global) if parent == "" or find(parent,"=") then colors.registerspotcolor(name, parent) elseif name ~= parent then local cp = attributes_list[a_color][parent] if cp then local t = settings_to_hash_strict(str) if t then local tp = tonumber(t.p) or 1 do_registerspotcolor(parent, name, cp, t.e, 1, "", tp) -- p not really needed, only diagnostics if name and name ~= "" then definecolor(name, register_color(name,'spot', parent, 1, "", tp), true) local ta, tt = t.a, t.t if ta and tt then definetransparent(name, transparencies.register(name,transparent[ta] or tonumber(ta) or 1,tonumber(tt) or 1), global) elseif colors.couple then --~ definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up definetransparent(name, 0, global) -- can be sped up end end end end end colorset[name] = true-- maybe we can store more end function colors.registerspotcolor(parent, str) local cp = attributes_list[a_color][parent] if cp then local e = "" if str then local t = settings_to_hash_strict(str) e = (t and t.e) or "" end do_registerspotcolor(parent, "dummy", cp, e, 1, "", 1) -- p not really needed, only diagnostics end end function colors.definemultitonecolor(name,multispec,colorspec,selfspec) local dd, pp, nn, max = { }, { }, { }, 0 for k,v in gmatch(multispec,"(%a+)=([^%,]*)") do -- use settings_to_array max = max + 1 dd[max] = k pp[max] = v nn[max] = formatters["%s_%1.3g"](k,tonumber(v) or 0) -- 0 can't happen end if max > 0 then nn = concat(nn,'_') local parent = gsub(lower(nn),"[^%d%a%.]+","_") if not colorspec or colorspec == "" then local cc = { } for i=1,max do cc[i] = l_color[dd[i]] end colors.definemixcolor(parent,pp,cc,global,freeze) -- can become local else if selfspec ~= "" then colorspec = colorspec .. "," .. selfspec end colors.defineprocesscolor(parent,colorspec,true,true) end local cp = attributes_list[a_color][parent] dd, pp = concat(dd,','), concat(pp,',') if cp then do_registerspotcolor(parent, name, cp, "", max, dd, pp) definecolor(name, register_color(name, 'spot', parent, max, dd, pp), true) local t = settings_to_hash_strict(selfspec) if t and t.a and t.t then definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global) elseif colors.couple then -- definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up definetransparent(name, 0, global) -- can be sped up end end end colorset[name] = true-- maybe we can store more end -- will move to mlib-col as colors in m,p are somewhat messy due to the fact -- that we cannot cast local function mpcolor(model,ca,ta,default) local cv = colorvalues[ca] if cv then local tv = transparencyvalues[ta] if model == 1 then model = cv[1] end model = forcedmodel(model) if tv then if model == 2 then return formatters["transparent(%s,%s,(%s,%s,%s))"](tv[1],tv[2],cv[3],cv[4],cv[5]) elseif model == 3 then return formatters["transparent(%s,%s,(%s,%s,%s))"](tv[1],tv[2],cv[3],cv[4],cv[5]) elseif model == 4 then return formatters["transparent(%s,%s,cmyk(%s,%s,%s,%s))"](tv[1],tv[2],cv[6],cv[7],cv[8],cv[9]) elseif model == 5 then return formatters['transparent(%s,%s,multitonecolor("%s",%s,"%s","%s"))'](tv[1],tv[2],cv[10],cv[11],cv[12],cv[13]) else -- see ** in meta-ini.mkiv: return formatters["transparent(%s,%s,(%s))"](tv[1],tv[2],cv[2]) return formatters["transparent(%s,%s,(%s,%s,%s))"](tv[1],tv[2],cv[3],cv[4],cv[5]) end else if model == 2 then return formatters["(%s,%s,%s)"](cv[3],cv[4],cv[5]) elseif model == 3 then return formatters["(%s,%s,%s)"](cv[3],cv[4],cv[5]) elseif model == 4 then return formatters["cmyk(%s,%s,%s,%s)"](cv[6],cv[7],cv[8],cv[9]) elseif model == 5 then return formatters['multitonecolor("%s",%s,"%s","%s")'](cv[10],cv[11],cv[12],cv[13]) else -- see ** in meta-ini.mkiv: return formatters["%s"]((cv[2])) return formatters["(%s,%s,%s)"](cv[3],cv[4],cv[5]) end end else default = default or 0 -- rgb ! return formatters["(%s,%s,%s)"](default,default,default) end end local function mpnamedcolor(name) return mpcolor(gettexattribute(a_colorspace),l_color[name] or l_color.black) end local function mpoptions(model,ca,ta,default) -- will move to mlib-col return formatters["withcolor %s"](mpcolor(model,ca,ta,default)) end colors.mpcolor = mpcolor colors.mpnamedcolor = mpnamedcolor colors.mpoptions = mpoptions function colors.formatcolor(ca,separator) local cv = colorvalues[ca] if cv then local c, cn, f, t, model = { }, 0, 13, 13, cv[1] if model == 2 then f, t = 2, 2 elseif model == 3 then f, t = 3, 5 elseif model == 4 then f, t = 6, 9 end for i=f,t do cn = cn + 1 c[cn] = format("%0.3f",cv[i]) end return concat(c,separator) else return format("%0.3f",0) end end function colors.formatgray(ca,separator) local cv = colorvalues[ca] return format("%0.3f",(cv and cv[2]) or 0) end function colors.colorcomponents(ca) -- return list local cv = colorvalues[ca] if cv then local model = cv[1] if model == 2 then return format("s=%1.3f",cv[2]) elseif model == 3 then return format("r=%1.3f g=%1.3f b=%1.3f",cv[3],cv[4],cv[5]) elseif model == 4 then return format("c=%1.3f m=%1.3f y=%1.3f k=%1.3f",cv[6],cv[7],cv[8],cv[9]) elseif type(cv[13]) == "string" then return format("p=%s",cv[13]) else return format("p=%1.3f",cv[13]) end else return "" end end function colors.transparencycomponents(ta) local tv = transparencyvalues[ta] if tv then return format("a=%1.3f t=%1.3f",tv[1],tv[2]) else return "" end end function colors.spotcolorname(ca,default) local cv, v = colorvalues[ca], "unknown" if cv and cv[1] == 5 then v = cv[10] end return tostring(v) end function colors.spotcolorparent(ca,default) local cv, v = colorvalues[ca], "unknown" if cv and cv[1] == 5 then v = cv[12] if v == "" then v = cv[10] end end return tostring(v) end function colors.spotcolorvalue(ca,default) local cv, v = colorvalues[ca], 0 if cv and cv[1] == 5 then v = cv[13] end return tostring(v) end -- experiment (a bit of a hack, as we need to get the attribute number) local min = math.min -- a[b,c] -> b+a*(c-b) local function f(one,two,i,fraction) local o, t = one[i], two[i] local otf = o + fraction * (t - o) if otf > 1 then otf = 1 end return otf end function colors.defineintermediatecolor(name,fraction,c_one,c_two,a_one,a_two,specs,global,freeze) fraction = tonumber(fraction) or 1 local one, two = colorvalues[c_one], colorvalues[c_two] if one then if two then local csone, cstwo = one[1], two[1] -- if csone == cstwo then -- actually we can set all 8 values at once here but this is cleaner as we avoid -- problems with weighted gray conversions and work with original values local ca if csone == 2 then ca = register_color(name,'gray',f(one,two,2,fraction)) elseif csone == 3 then ca = register_color(name,'rgb', f(one,two,3,fraction), f(one,two,4,fraction), f(one,two,5,fraction)) elseif csone == 4 then ca = register_color(name,'cmyk',f(one,two,6,fraction), f(one,two,7,fraction), f(one,two,8,fraction), f(one,two,9,fraction)) else ca = register_color(name,'gray',f(one,two,2,fraction)) end definecolor(name,ca,global,freeze) -- end else local csone = one[1] local ca if csone == 2 then ca = register_color(name,'gray',fraction*one[2]) elseif csone == 3 then ca = register_color(name,'rgb', fraction*one[3], fraction*one[4], fraction*one[5]) elseif csone == 4 then ca = register_color(name,'cmyk',fraction*one[6], fraction*one[7], fraction*one[8], fraction*one[9]) else ca = register_color(name,'gray',fraction*one[2]) end definecolor(name,ca,global,freeze) end end local one, two = transparencyvalues[a_one], transparencyvalues[a_two] local t = settings_to_hash_strict(specs) local ta = tonumber((t and t.a) or (one and one[1]) or (two and two[1])) local tt = tonumber((t and t.t) or (one and two and f(one,two,2,fraction))) if ta and tt then definetransparent(name,transparencies.register(name,ta,tt),global) end end local function f(i,colors,fraction) local otf = 0 for c=1,#colors do otf = otf + (tonumber(fraction[c]) or 1) * colors[c][i] end if otf > 1 then otf = 1 end return otf end function colors.definemixcolor(name,fractions,cs,global,freeze) local values = { } for i=1,#cs do -- do fraction in here local v = colorvalues[cs[i]] if not v then return end values[i] = v end local csone = values[1][1] local ca if csone == 2 then ca = register_color(name,'gray',f(2,values,fractions)) elseif csone == 3 then ca = register_color(name,'rgb', f(3,values,fractions), f(4,values,fractions), f(5,values,fractions)) elseif csone == 4 then ca = register_color(name,'cmyk',f(6,values,fractions), f(7,values,fractions), f(8,values,fractions), f(9,values,fractions)) else ca = register_color(name,'gray',f(2,values,fractions)) end definecolor(name,ca,global,freeze) end -- for the moment downward compatible local patterns = { "colo-imp-%s.mkiv", "colo-imp-%s.tex", "colo-%s.mkiv", "colo-%s.tex" } local function action(name,foundname) -- could be one command context.startreadingfile() context.startcolorset { name } context.input(foundname) context.showmessage("colors",4,name) context.stopcolorset() context.stopreadingfile() end local function failure(name) -- context.showmessage("colors",5,name) report_colors("unknown library %a",name) end function colors.usecolors(name) commands.uselibrary { category = "color definition", name = name, patterns = patterns, action = action, failure = failure, onlyonce = true, } end -- interface (todo: use locals) 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 (...) context(colors.formatcolor (...)) end function commands.formatgray (...) context(colors.formatgray (...)) end function commands.mpcolor(model,ca,ta,default) context(mpcolor(model,ca,ta,default)) end function commands.mpoptions(model,ca,ta,default) context(mpoptions(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 -- function commands.withcolorsinset(name,command) -- local set -- if name and name ~= "" then -- set = colorsets[name] -- else -- set = colorsets.default -- end -- if set then -- if command then -- for name in table.sortedhash(set) do -- context[command](name) -- end -- else -- context(concat(table.sortedkeys(set),",")) -- end -- end -- end commands.startcolorset = colors.pushset commands.stopcolorset = colors.popset commands.usecolors = colors.usecolors -- bonus function commands.pgfxcolorspec(ca) -- {}{}{colorspace}{list} -- local cv = attributes.colors.values[ca] local cv = colorvalues[ca] if cv then local model = cv[1] if model == 2 then context("{gray}{%1.3f}",cv[2]) elseif model == 3 then context("{rgb}{%1.3f,%1.3f,%1.3f}",cv[3],cv[4],cv[5]) elseif model == 4 then context("{cmyk}{%1.3f,%1.3f,%1.3f,%1.3f}",cv[6],cv[7],cv[8],cv[9]) else context("{gray}{%1.3f}",cv[2]) end else context("{gray}{0}") end end -- function commands.pgfregistercolor(name,attribute) -- local cv = colorvalues[ca] -- context.pushcatcodes('prt') -- if cv then -- local model = forcedmodel(cv[1]) -- if model == 2 then -- context["pgfutil@definecolor"]("{%s}{gray}{%1.3f}",name,cv[2]) -- elseif model == 3 then -- context["pgfutil@definecolor"]("{%s}{rgb}{%1.3f,%1.3f,%1.3f}",name,cv[3],cv[4],cv[5]) -- elseif model == 4 then -- context["pgfutil@definecolor"]("{%s}{cmyk}{%1.3f,%1.3f,%1.3f,%1.3f}",name,cv[6],cv[7],cv[8],cv[9]) -- else -- context["pgfutil@definecolor"]("{%s}{gray}{0}",name) -- end -- else -- context["pgfutil@definecolor"]("{%s}{gray}{0}",name) -- end -- context.popcatcodes() -- end -- handy local models = storage.allocate { "all", "gray", "rgb", "cmyk", "spot" } colors.models = models -- check for usage elsewhere function colors.spec(name) local l = attributes_list[a_color] local t = colorvalues[l[name]] or colorvalues[l.black] return { model = models[t[1]] or models[1], s = t[2], r = t[3], g = t[4], b = t[5], c = t[6], m = t[7], y = t[8], k = t[9], } end -- inspect(attributes.colors.spec("red")) -- inspect(attributes.colors.spec("red socks")) context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-lyr.mkiv0000644000175000017500000007367712130411274024322 0ustar norbertnorbert%D \module %D [ file=pack-lyr, %D version=2000.10.20, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Layers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Layers} % todo : first / last / next / +... => page key % test on left/right box when no doublesided option given % use \ifcsname instead of doifvalue \unprotect % When being backgrounds layers get the background offset % displacement. Should be an option, on by default % (compatibility). %D The layering mechanism implemented here is independent of %D the output routine, but future extensions may depend on a %D more close cooperation. %D First we overload a macro from \type {pack-rul}. From now on %D we accept a (optional) argument: the specific layer it %D will go in. This means that we can move an overlay from one %D background to the other using the dimensions of the parent. \ifdefined\defineoverlay \else \message{loaded to early} \wait \fi \unexpanded\def\defineoverlay {\dotripleempty\pack_framed_define_overlay} \def\pack_framed_define_overlay[#1][#2][#3]% overlay [layer] content {\ifthirdargument %\writestatus{BEWARE}{This (overlay definition) has changed!}% temp \def\pack_framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\setlayer[#2]{\executedefinedoverlay{##1}{#3}}}}% \else \def\pack_framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\executedefinedoverlay{##1}{#2}}}% \fi \processcommalist[#1]\pack_framed_define_overlay_indeed} %D We use the command handler code. The previous, more direct parameter %D handling was 25\% faster when no parameters were passed when adding %D content to a layer. However, when we pass for instance a preset, the %D new methos is some 10\% faster and it happens that in most cases we %D do pass some parameters. It would be interesting to see if we can push %D the preset in between the regular chain but it could also lead to %D unwanted side effects when nesting layer placement. \installcorenamespace{layer} \installcorenamespace{layerbox} \installcorenamespace{layerpreset} \installcorenamespace{layerposition} % brr, unreadable %D \macros %D {definelayer,setuplayer} %D %D Each layer gets its own (global) box. This also means that %D the data that goes into a layer, is typeset immediately. %D Each layer automatically gets an associated overlay, %D which can be used in any background assignment. %D %D After a layer is defined, you can change its %D characteristics. \installcommandhandler \??layer {layer} \??layer \setuplayer [\c!state=\v!start, %\c!doublesided=, %\c!preset=, %\c!option=, %\c!corner=, %\c!page=, %\c!rotation=, % geen 0 ! \c!direction=\v!normal, \c!position=\v!no, \c!method=\v!overlay, \c!x=\zeropoint, \c!y=\zeropoint, \c!line=0, \c!column=0, \c!width=\wd\nextbox, % don't change this globally \c!height=\ht\nextbox, % don't change this globally \c!offset=\zeropoint, \c!hoffset=\zeropoint, \c!voffset=\zeropoint, \c!dx=\zeropoint, \c!dy=\zeropoint, \c!location=rb, \c!sx=1, \c!sy=1, \c!region=\layeranchor] \def\layeranchor{\currentlayer:\the\realpageno} \unexpanded\def\anch_mark_anchor_box#1% {\ctxcommand{markregionbox(\number#1,"\layeranchor")}} % needs an hbox \let\p_pack_layers_doublesided\empty \let\p_pack_layers_state \empty \let\p_pack_layers_option \empty \let\p_pack_layers_method \empty \let\p_pack_layers_preset \empty \let\p_pack_layers_rotation \empty \let\p_pack_layers_position \empty \let\p_pack_layers_hoffset \empty \let\p_pack_layers_voffset \empty \let\p_pack_layers_offset \empty \let\p_pack_layers_dx \empty \let\p_pack_layers_dy \empty \let\p_pack_layers_sx \empty \let\p_pack_layers_sy \empty \let\p_pack_layers_x \empty \let\p_pack_layers_y \empty \let\p_pack_layers_corner \empty \let\p_pack_layers_location \empty \let\p_pack_layers_line \empty \let\p_pack_layers_column \empty \let\p_pack_layers_width \empty \let\p_pack_layers_height \empty \let\p_pack_layers_direction \empty \let\p_pack_layers_region \empty \let\m_pack_layers_page \empty \let\m_pack_layers_target \empty \let\m_pack_layers_region \empty \let\m_pack_layers_anchor \empty \newconditional\c_pack_layers_repeated \newconditional\c_pack_layers_trace \newcount \c_pack_layers_current_data \newbox\b_layers \newdimen\d_pack_layers_x_size \newdimen\d_pack_layers_y_size \newdimen\d_pack_layers_x_offset \newdimen\d_pack_layers_y_offset \newdimen\d_pack_layers_x_position \newdimen\d_pack_layers_y_position \newdimen\layerwidth \newdimen\layerheight \let\lastlayerxpos\!!zeropoint \let\lastlayerypos\!!zeropoint \let\lastlayerwd \!!zeropoint \let\lastlayerht \!!zeropoint \let\lastlayerdp \!!zeropoint \appendtoks \edef\p_pack_layers_doublesided{\layerparameter\c!doublesided}% \ifx\p_pack_layers_doublesided\v!yes \relateparameterhandlers{layer}{\v!left \currentlayer}{layer}\currentlayer % permits left* \relateparameterhandlers{layer}{\v!right\currentlayer}{layer}\currentlayer % permits right* \pack_layers_preset_box{\v!left \currentlayer}% \pack_layers_preset_box{\v!right\currentlayer}% \fi \pack_layers_preset_box\currentlayer \normalexpanded{\defineoverlay[\currentlayer][\noexpand\composedlayer{\currentlayer}]}% \to \everydefinelayer \def\pack_layers_preset_box#1% {\ifcsname\??layerbox#1\endcsname \resetlayer[#1]% \else \expandafter\newbox\csname\??layerbox#1\endcsname \fi} %D \macros %D {resetlayer} %D %D This macro hardly needs an explanation (but is seldom %D needed anyway). \def\pack_layers_reset_box#1% {\ifcsname\??layerbox#1\endcsname \global\setbox\csname\??layerbox#1\endcsname\emptybox \fi} \def\resetlayer[#1]% {\pack_layers_reset_box{#1}% \pack_layers_reset_box{\v!left #1}% \pack_layers_reset_box{\v!right#1}% \pack_layers_reset_box{#1:\the\realpageno}} %D \macros %D {setlayer} %D %D Data is moved into a layer with the following macro. When %D \type {position} is set, relative positioning is used, with %D the current point as reference point. Otherwise the topleft %D corner is used as reference point. %D %D \starttyping %D \setlayer [identifier] [optional parameters] {data} %D \stoptyping \def\setcurrentlayerdimensions {\dodoubleempty\pack_layers_set_current_dimensions} \def\pack_layers_set_current_dimensions[#1][#2]% name left|right {\edef\currentlayerwidth {\thelayerwidth {#2#1}}% \edef\currentlayerheight{\thelayerheight{#2#1}}} % \def\thelayerwidth #1{\the\wd\executeifdefined{\??layerbox#1}\emptybox} % \def\thelayerheight#1{\the\ht\executeifdefined{\??layerbox#1}\emptybox} \def\thelayerwidth #1{\the\ifcsname\??layerbox#1\endcsname\wd\csname\??layerbox#1\endcsname\else\zeropoint\fi} \def\thelayerheight#1{\the\ifcsname\??layerbox#1\endcsname\ht\csname\??layerbox#1\endcsname\else\zeropoint\fi} \unexpanded\def\setlayer {\dotripleempty\pack_layers_set} \def\pack_layers_set[#1][#2][#3]% #4 == box do \fi is ok {\bgroup \edef\currentlayer{#1}% \edef\p_pack_layers_state{\layerparameter\c!state}% \ifx\p_pack_layers_state\v!stop \dowithnextboxcs\egroup\hbox \else\ifthirdargument \pack_layers_set_indeed[#1][#2][#3]% \else \doifassignmentelse{#2} {\pack_layers_set_indeed[#1][][#2]}% {\pack_layers_set_indeed[#1][#2][]}% \fi\fi} \def\pack_layers_set_indeed[#1][#2][#3]% #2 = links/rechts {\page_backgrounds_recalculate % brrr \global\advance\c_pack_layers_current_data\plusone \forgetall \dontcomplain \edef\p_pack_layers_option{\layerparameter\c!option}% \ifx\p_pack_layers_option\v!test \settrue\c_pack_layers_trace \traceboxplacementtrue \fi \edef\m_pack_layers_target{#2}% \dowithnextbox{\pack_layers_set_finish{#3}}\hbox} \def\pack_layers_set_finish#1% {\ifcsname\??layerbox\currentlayer\endcsname % can move up \ifx\m_pack_layers_target\v!even \ifodd\realpageno % discard nextbox \else \let\m_pack_layers_target\v!left \pack_layers_set_content{#1}% \fi \else\ifx\m_pack_layers_target\v!odd \ifodd\realpageno \let\m_pack_layers_target\v!right \pack_layers_set_content{#1}% \else % discard nextbox \fi \else \pack_layers_set_content{#1}% \fi\fi \else \writestatus{layer}{unknown layer \currentlayer}% \fi \egroup} % todo left/right % todo: get position data in one go % \def\pack_layers_set_last_position_yes % {\edef\m_pack_layers_page{\MPp{\??layerposition\the\c_pack_layers_current_data}}% % \xdef\lastlayerxpos{\the\dimexpr-\MPx{\??layerposition\m_pack_layers_target\currentlayer:\m_pack_layers_page}+\MPx{\??layerposition\the\c_pack_layers_current_data}\relax}% % \xdef\lastlayerypos{\the\dimexpr \MPy{\??layerposition\m_pack_layers_target\currentlayer:\m_pack_layers_page}-\MPy{\??layerposition\the\c_pack_layers_current_data}\relax}%} % \d_pack_layers_x_position\lastlayerxpos % \d_pack_layers_y_position\lastlayerypos % \begingroup % \edef\currentlayer{\currentlayer\m_pack_layers_page}% % \global\letlayerparameter\c!position\v!yes % \endgroup % \global\letlayerparameter\c!state\v!start % needed ? % \setbox\b_layers\vbox to \d_pack_layers_y_size{\hbox to \d_pack_layers_x_size{\xypos{\??layerposition\the\c_pack_layers_current_data}\hss}\vss}} \def\pack_layers_set_last_position_yes % target: left|right {% this will become one call \edef\m_pack_layers_anchor{\??layerposition\the\c_pack_layers_current_data}% \edef\m_pack_layers_page {\MPp\m_pack_layers_anchor}% \edef\m_pack_layers_region{\MPr\m_pack_layers_anchor}% \d_pack_layers_x_position \dimexpr-\MPx\m_pack_layers_region+\MPx\m_pack_layers_anchor\relax \d_pack_layers_y_position \dimexpr \MPy\m_pack_layers_region-\MPy\m_pack_layers_anchor+\MPh\m_pack_layers_region\relax \xdef\lastlayerxpos{\the\d_pack_layers_x_position}% \xdef\lastlayerypos{\the\d_pack_layers_y_position}% % \writestatus{region}{\m_pack_layers_region -> (\MPx\m_pack_layers_region,\MPy\m_pack_layers_region)}% % \writestatus{self} {\m_pack_layers_anchor -> (\MPx\m_pack_layers_anchor,\MPy\m_pack_layers_anchor)}% % \writestatus{delta} {(\lastlayerxpos,\lastlayerypos)}% % \begingroup % \edef\currentlayer{\currentlayer\m_pack_layers_page}% % \global\letlayerparameter\c!position\v!yes % \endgroup \global\letlayerparameter\c!state\v!start % needed ? \setbox\b_layers\vbox to \d_pack_layers_y_size {\hbox to \d_pack_layers_x_size {\xypos\m_pack_layers_anchor\hss}% \vss}} \def\pack_layers_set_last_position_nop {\setbox\b_layers\emptybox \globallet\lastlayerxpos\!!zeropoint \globallet\lastlayerypos\!!zeropoint \doifinset\v!bottom\p_pack_layers_corner\pack_layers_set_bottom_positions \doifinset\v!right \p_pack_layers_corner\pack_layers_set_right_positions \doifinset\v!middle\p_pack_layers_corner\pack_layers_set_middle_positions \edef\m_pack_layers_page{\layerparameter\c!page}} \unexpanded\def\definelayerpreset {\dodoubleargument\pack_layers_define_preset} \def\pack_layers_define_preset[#1][#2]% {\doifassignmentelse{#2} {\setvalue{\??layerpreset#1}{\setupcurrentlayer[#2]}} {\setvalue{\??layerpreset#1}{\csname\??layerpreset#2\endcsname}}} \def\pack_layers_set_content#1% {\layerwidth \layerparameter\c!width % global (local later) \layerheight\layerparameter\c!height % global (local later) \d_pack_layers_x_size\layerwidth \d_pack_layers_y_size\layerheight % \setupcurrentlayer[#1]% preroll % \edef\p_pack_layers_preset {\layerparameter\c!preset }% % \ifcsname\??layerpreset\p_pack_layers_preset\endcsname \csname\??layerpreset\p_pack_layers_preset\endcsname \setupcurrentlayer[#1]% postroll \fi % \edef\p_pack_layers_rotation {\layerparameter\c!rotation }% \edef\p_pack_layers_position {\layerparameter\c!position }% \edef\p_pack_layers_hoffset {\layerparameter\c!hoffset }% \edef\p_pack_layers_voffset {\layerparameter\c!voffset }% \edef\p_pack_layers_offset {\layerparameter\c!offset }% \edef\p_pack_layers_dx {\layerparameter\c!dx }% \edef\p_pack_layers_dy {\layerparameter\c!dy }% \edef\p_pack_layers_sx {\layerparameter\c!sx }% \edef\p_pack_layers_sy {\layerparameter\c!sy }% \edef\p_pack_layers_x {\layerparameter\c!x }% \edef\p_pack_layers_y {\layerparameter\c!y }% \edef\p_pack_layers_corner {\layerparameter\c!corner }% \edef\p_pack_layers_location {\layerparameter\c!location }% \edef\p_pack_layers_line {\layerparameter\c!line }% \edef\p_pack_layers_column {\layerparameter\c!column }% \edef\p_pack_layers_width {\layerparameter\c!width }% local ones \edef\p_pack_layers_height {\layerparameter\c!height }% local ones \edef\p_pack_layers_direction{\layerparameter\c!direction}% % \ifx\p_pack_layers_position\v!overlay \let\p_pack_layers_width \zeropoint \let\p_pack_layers_height \zeropoint \let\p_pack_layers_position\v!yes \fi \ifx\p_pack_layers_rotation\empty \else % use direct call \setbox\nextbox\hbox{\rotate[\c!location=\v!high,\c!rotation=\layerparameter\c!rotation]{\box\nextbox}}% \fi \d_pack_layers_x_offset\p_pack_layers_sx\dimexpr \ifx\p_pack_layers_hoffset\v!max\d_pack_layers_x_size\else\p_pack_layers_hoffset\fi+\p_pack_layers_offset+\p_pack_layers_dx \relax \d_pack_layers_y_offset\p_pack_layers_sy\dimexpr \ifx\p_pack_layers_voffset\v!max\d_pack_layers_y_size\else\p_pack_layers_voffset\fi+\p_pack_layers_offset+\p_pack_layers_dy \relax \d_pack_layers_x_position\p_pack_layers_sx\dimexpr\p_pack_layers_x\relax \d_pack_layers_y_position\p_pack_layers_sy\dimexpr\p_pack_layers_y\relax \ifx\p_pack_layers_position\v!yes \pack_layers_set_last_position_yes \else \pack_layers_set_last_position_nop \fi % \ifx\m_pack_layers_page\empty \else % is expanded \edef\m_pack_layers_page{:\m_pack_layers_page}% \ifcsname\??layerbox\m_pack_layers_target\currentlayer\m_pack_layers_page\endcsname \else \expandafter\newbox\csname\??layerbox\m_pack_layers_target\currentlayer\m_pack_layers_page\endcsname \fi \fi \chardef\layerpagebox\csname\??layerbox\m_pack_layers_target\currentlayer\m_pack_layers_page\endcsname \ifvoid\layerpagebox \gsetboxllx\layerpagebox\zeropoint \gsetboxlly\layerpagebox\zeropoint \fi \global\setbox\layerpagebox\vbox %to \layerparameter\c!height % new, otherwise no negative y possible {\offinterlineskip \ifvoid\layerpagebox \let\lastlayerwidth \zeropoint \let\lastlayerheight\zeropoint \else \edef\lastlayerwidth {\the\wd\layerpagebox}% \edef\lastlayerheight{\the\ht\layerpagebox}% \ht\layerpagebox\zeropoint \dp\layerpagebox\zeropoint \wd\layerpagebox\zeropoint \ifx\p_pack_layers_direction\v!reverse\else \box\layerpagebox \fi \fi % don't move \xdef\lastlayerwd{\the\wd\nextbox}% \xdef\lastlayerht{\the\ht\nextbox}% % not entirely ok when grid ! \xdef\lastlayerdp{\the\dp\nextbox}% % not entirely ok when grid ! % this code \ifx\p_pack_layers_location\v!grid \ht\nextbox\strutheight \dp\nextbox\strutdepth \else \setbox\nextbox\hbox{\alignedbox[\p_pack_layers_location]\vbox{\box\nextbox}}% \fi \ifnum\p_pack_layers_line=\zerocount\else % no \ifcase, can be negative \advance\d_pack_layers_y_position\dimexpr\p_pack_layers_line\lineheight+\topskip-\lineheight-\ht\nextbox\relax \fi \ifnum\p_pack_layers_column=\zerocount\else % no \ifcase, can be negative \advance\d_pack_layers_x_position\layoutcolumnoffset\p_pack_layers_column\relax \fi \ifx\p_pack_layers_location\v!grid \setbox\nextbox\hbox{\alignedbox[rb]\vbox{\box\nextbox}}% \fi % ll registration \scratchdimen\dimexpr\d_pack_layers_x_position+\d_pack_layers_x_offset\relax \ifdim\scratchdimen<\getboxllx\layerpagebox \gsetboxllx\layerpagebox\scratchdimen \fi \advance\scratchdimen\wd\nextbox \wd\nextbox\ifdim\scratchdimen>\lastlayerwidth \scratchdimen \else \lastlayerwidth \fi \scratchdimen\dimexpr\d_pack_layers_y_position+\d_pack_layers_y_offset\relax \ifdim\scratchdimen<\getboxlly\layerpagebox \gsetboxlly\layerpagebox\scratchdimen \fi % ll compensation \advance\scratchdimen\dimexpr\ht\nextbox+\dp\nextbox\relax \ht\nextbox\ifdim\scratchdimen>\lastlayerheight \scratchdimen \else \lastlayerheight \fi \dp\nextbox\zeropoint % placement \hsize\p_pack_layers_width \vbox to \p_pack_layers_height \bgroup \smashbox\nextbox \vskip\dimexpr\d_pack_layers_y_position+\d_pack_layers_y_offset\relax \hskip\dimexpr\d_pack_layers_x_position+\d_pack_layers_x_offset\relax \box\nextbox \ifvoid\layerpagebox % already flushed \else % the reverse case % check ! \vskip-\dimexpr\d_pack_layers_y_position+\d_pack_layers_y_offset\relax \box\layerpagebox \fi \egroup}% % when position is true, the layerbox holds the compensation and needs % to be placed; never change this ! \ifvoid\b_layers \else \box\b_layers \fi} \def\pack_layers_set_bottom_positions {\ifnum\p_pack_layers_line=\zerocount\else % can be < 0 \edef\p_pack_layers_line{\the\numexpr-\p_pack_layers_line+\layoutlines+\plusone\relax}% use counter instead ? \fi \ifdim\d_pack_layers_y_size>\zeropoint \advance\d_pack_layers_y_position-\d_pack_layers_y_size \d_pack_layers_y_position-\d_pack_layers_y_position \d_pack_layers_y_offset-\d_pack_layers_y_offset \fi} \def\pack_layers_set_right_positions {\ifnum\p_pack_layers_column=\zerocount\else % can be < 0 \edef\p_pack_layers_column{\the\numexpr-\layerparameter\c!column+\layoutcolumns+\plusone\relax}% use counter instead ? \fi \ifdim\d_pack_layers_x_size>\zeropoint \advance\d_pack_layers_x_position-\d_pack_layers_x_size \d_pack_layers_x_position-\d_pack_layers_x_position \d_pack_layers_x_offset-\d_pack_layers_x_offset \fi} \def\pack_layers_set_middle_positions {\ifdim\d_pack_layers_x_size>\zeropoint \advance\d_pack_layers_x_position.5\d_pack_layers_x_size \fi \ifdim\d_pack_layers_y_size>\zeropoint \advance\d_pack_layers_y_position.5\d_pack_layers_y_size \fi} %D Given the task to be accomplished, the previous macro is %D not even that complicated. It mainly comes down to skipping %D to the right place and placing a box on top of or below the %D existing content. In the case of position tracking, another %D reference point is chosen. %D \macros %D {doifelselayerdata} \def\doifelselayerdata#1% {\ifcsname\??layerbox#1\endcsname \ifvoid\csname\??layerbox#1\endcsname \doubleexpandafter\secondoftwoarguments \else \doubleexpandafter\firstoftwoarguments \fi \else \expandafter\secondoftwoarguments \fi} %D \macros %D {flushlayer} %D %D When we flush a layer, we flush both the main one and the %D page dependent one (when defined). This feature is more %D efficient in \ETEX\ since there testing for an undefined %D macro does not takes hash space. % todo: setups before flush, handy hook \unexpanded\def\flushlayer[#1]% quite core, so optimized (todo: check for void) {\begingroup \forgetall \edef\currentlayer{#1}% \edef\p_pack_layers_state{\layerparameter\c!state}% \ifx\p_pack_layers_state\v!stop % nothing \else\ifx\p_pack_layers_state\v!next \global\letlayerparameter\c!state\v!start % dangerous, stack-built-up \else\ifx\p_pack_layers_state\v!continue \global\letlayerparameter\c!state\v!repeat % dangerous, stack-built-up \else \edef\p_pack_layers_doublesided{\layerparameter\c!doublesided}% \ifx\p_pack_layers_doublesided\v!yes \ifcsname\??layerbox#1\endcsname % we can make a dedicated one for this \doifbothsidesoverruled {\pack_layers_flush_double\v!left }% {\pack_layers_flush_double\v!right}% {\pack_layers_flush_double\v!left }% \else \pack_layers_flush_single \fi \else \pack_layers_flush_single \fi \fi\fi\fi \endgroup} % \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi \def\pack_layers_flush_single {\startoverlay {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}% {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\fi}% \stopoverlay} \def\pack_layers_flush_double#1% {\startoverlay {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}% {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount {\currentlayer:\the\realpageno}\fi}% {\ifcsname\??layerbox#1\currentlayer \endcsname\pack_layers_flush_indeed\plusone {#1\currentlayer }\fi}% {\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\fi}% \stopoverlay} % \def\pack_layers_flush_indeed#1#2% quite core, so optimized % {\begingroup % already grouped % \offinterlineskip % \edef\p_pack_layers_preset{\layerparameter\c!preset}% % \ifcsname\??layerpreset\p_pack_layers_preset\endcsname % \csname\??layerpreset\p_pack_layers_preset\endcsname % \fi % \edef\p_pack_layers_method{\layerparameter\c!method}% % \edef\p_pack_layers_option{\layerparameter\c!option}% % \ifx\p_pack_layers_option\v!test % \settrue\c_pack_layers_trace % \traceboxplacementtrue % \fi % \ifcase#1\relax % \setfalse\c_pack_layers_repeated % \else % \edef\p_pack_layers_position{\layerparameter\c!position}% % \ifx\p_pack_layers_position\v!yes % \setfalse\c_pack_layers_repeated % \else % \edef\p_pack_layers_repeat{\layerparameter\c!repeat}% % \ifx\p_pack_layers_repeat\v!yes % \settrue\c_pack_layers_repeated % \else\ifx\p_pack_layers_state\v!repeat % \settrue\c_pack_layers_repeated % \else % \setfalse\c_pack_layers_repeated % \fi\fi % \fi % \fi % \chardef\b_layers\csname\??layerbox#2\endcsname % trick % % we need to copy in order to retain the negative offsets for a next % % stage of additions, i.e. llx/lly accumulate in repeat mode and the % % compensation may differ each flush depending on added content % \setbox\nextbox % \ifx\p_pack_layers_method\v!fit % \pack_layers_positioned_box_yes % \else % \pack_layers_positioned_box_nop % \fi % % todo: method=offset => overlayoffset right/down (handy for backgrounds with offset) % \doifoverlayelse{#2}% % {\setlayoutcomponentattribute{\v!layer:#2}}% % \resetlayoutcomponentattribute % \ifx\p_pack_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_pack_layers_method\v!overlay to \overlayheight \fi \layoutcomponentboxattribute % {\hbox \ifx\p_pack_layers_method\v!overlay to \overlaywidth \fi % {\edef\currentlayer{#2\the\realpageno}% local % \edef\p_pack_layers_position{\layerparameter\c!position}% local % \ifx\p_pack_layers_position\v!yes % \xypos{\??layerposition#2:\the\realpageno}% % \fi % \box\nextbox % \hss}% % \vss}% % \ifconditional\c_pack_layers_repeated\else % \gsetboxllx\b_layers\zeropoint % \gsetboxlly\b_layers\zeropoint % \fi % \endgroup} \let\pack_layers_top_fill \relax \let\pack_layers_bottom_fill\vss \def\pack_layers_flush_indeed#1#2% quite core, so optimized {\begingroup % already grouped \offinterlineskip \edef\p_pack_layers_preset{\layerparameter\c!preset}% \ifcsname\??layerpreset\p_pack_layers_preset\endcsname \csname\??layerpreset\p_pack_layers_preset\endcsname \fi \edef\p_pack_layers_method{\layerparameter\c!method}% \edef\p_pack_layers_option{\layerparameter\c!option}% \ifx\p_pack_layers_option\v!test \settrue\c_pack_layers_trace \traceboxplacementtrue \fi \ifcase#1\relax \setfalse\c_pack_layers_repeated \else \edef\p_pack_layers_position{\layerparameter\c!position}% \ifx\p_pack_layers_position\v!yes \setfalse\c_pack_layers_repeated \else \edef\p_pack_layers_repeat{\layerparameter\c!repeat}% \ifx\p_pack_layers_repeat\v!yes \settrue\c_pack_layers_repeated \else\ifx\p_pack_layers_state\v!repeat \settrue\c_pack_layers_repeated \else \setfalse\c_pack_layers_repeated \fi\fi \fi \fi \chardef\b_layers\csname\??layerbox#2\endcsname % trick % we need to copy in order to retain the negative offsets for a next % stage of additions, i.e. llx/lly accumulate in repeat mode and the % compensation may differ each flush depending on added content \setbox\nextbox \ifx\p_pack_layers_method\v!fit \pack_layers_positioned_box_yes \else \pack_layers_positioned_box_nop \fi % todo: method=offset => overlayoffset right/down (handy for backgrounds with offset) \doifoverlayelse{#2}% {\setlayoutcomponentattribute{\v!layer:#2}}% \resetlayoutcomponentattribute % we have conflicting demands: some mechanisms want ll anchoring .. I need to figure this out % an dmaybe we will have 'origin=bottom' or so \setbox\nextbox \ifx\p_pack_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_pack_layers_method\v!overlay to \overlayheight \fi \layoutcomponentboxattribute {\pack_layers_top_fill \hbox \ifx\p_pack_layers_method\v!overlay to \overlaywidth \fi {\box\nextbox \hss}% \pack_layers_bottom_fill}% % % \edef\currentlayer{#2}% :\the\realpageno}% local .. check \anchor % \edef\p_pack_layers_position{\layerparameter\c!position}% local \ifx\p_pack_layers_position\v!yes \edef\p_pack_layers_region{\layerparameter\c!region}% \ifx\p_pack_layers_region\empty \else \anch_mark_anchor_box\nextbox \fi \fi \box\nextbox % \ifconditional\c_pack_layers_repeated\else \gsetboxllx\b_layers\zeropoint \gsetboxlly\b_layers\zeropoint \fi \endgroup} \def\pack_layers_positioned_box_yes {\vbox {\vskip-\getboxlly\b_layers \hskip-\getboxllx\b_layers \hsize-\dimexpr\getboxllx\b_layers-\wd\b_layers\relax \ifconditional\c_pack_layers_repeated\copy\else\box\fi\b_layers}} \def\pack_layers_positioned_box_nop {\ifconditional\c_pack_layers_repeated\copy\else\box\fi\b_layers} % \definelayer[test][method=fit] \setupcolors[state=start,option=test] % % \framed[framecolor=red,offset=overlay]{\setlayer[test]{aa}\setlayer[test][x=10pt]{g}\flushlayer[test]} % \framed[framecolor=red,offset=overlay]{\setlayer[test]{aa}\setlayer[test][x=-10pt]{bb}\flushlayer[test]} % \framed[framecolor=red,offset=overlay]{\setlayer[test][x=-20pt]{cccccc}\flushlayer[test]} % \framed[framecolor=red,offset=overlay]{\setlayer[test]{dd}\setlayer[test][x=-20pt,y=-3pt]{eeeeee}\flushlayer[test]} %D \macros %D {composedlayer,placelayer,tightlayer} %D %D This is a handy shortcut, which saves a couple of braces %D when we use it as parameter. This name also suits better %D to other layering commands. \unexpanded\def\composedlayer#1{\flushlayer[#1]} \unexpanded\def\tightlayer[#1]% {\hbox {\def\currentlayer{#1}% todo: left/right \setbox\nextbox\emptybox % hoogte/breedte are \wd\nextbox/\ht\nextbox \hsize\layerparameter\c!width % \overlaywidth = \hsize \vsize\layerparameter\c!height % \overlaywheight = \vsize \composedlayer{#1}}} \let\placelayer\flushlayer %D \macros %D {setMPlayer} %D %D The following layer macro uses the positions that are %D registered by \METAPOST. %D %D \starttyping %D \definelayer[test] %D %D \setMPlayer [test] [somepos-1] {Whatever we want here!} %D \setMPlayer [test] [somepos-2] {Whatever we need there!} %D \setMPlayer [test] [somepos-3] {\externalfigure[cow.mps][width=2cm]} %D %D \startuseMPgraphic{oeps} %D draw fullcircle scaled 10cm withcolor red ; %D register ("somepos-1",2cm,3cm,center currentpicture) ; %D register ("somepos-2",8cm,5cm,(-1cm,-2cm)) ; %D register ("somepos-3",0cm,0cm,(-2cm,2cm)) ; %D \stopuseMPgraphic %D %D \getMPlayer[test]{\useMPgraphic{oeps}} %D \stoptyping %D %D The last line is equivalent to %D %D \starttyping %D \framed %D [background={foreground,test},offset=overlay] %D {\useMPgraphic{oeps}} %D \stoptyping \unexpanded\def\setMPlayer {\dotripleempty\pack_layers_set_MP} \def\MPlayerwidth {\hsize} \def\MPlayerheight{\vsize} \def\pack_layers_set_MP[#1][#2][#3]% {\edef\MPlayerwidth {\MPw{#2}}% \edef\MPlayerheight{\MPh{#2}}% \setlayer[#1][\c!x=\MPx{#2},\c!y=\MPy{#2},\c!position=\v!no,#3]} \unexpanded\def\getMPlayer {\dodoubleempty\pack_layers_get_MP} \def\pack_layers_get_MP[#1][#2]% {\framed[\c!background={\v!foreground,#1},\c!frame=\v!off,\c!offset=\v!overlay,#2]} % takes argument %D Watch out, a redefinition: \ifdefined\settextpagecontent \else \writestatus\m!system{error in page-lyr.tex} \wait \fi \definelayer [OTRTEXT] \setuplayer [OTRTEXT] [\c!width=\innermakeupwidth, \c!height=\textheight] \let\normalsettextpagecontent\settextpagecontent % will be overloaded in page-spr \unexpanded\def\settextpagecontent#1#2#3% #2 and #3 will disappear {\doifelselayerdata{OTRTEXT} {\setbox#1\hbox to \makeupwidth {\startoverlay {\tightlayer[OTRTEXT]} % first, otherwise problems with toc {\normalsettextpagecontent{#1}{#2}{#3}\box#1} \stopoverlay}% \dp#1\zeropoint}% {\normalsettextpagecontent{#1}{#2}{#3}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-def.lua0000644000175000017500000003152412161703335024057 0ustar norbertnorbertif not modules then modules = { } end modules ['lang-def'] = { version = 1.001, comment = "companion to lang-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" -- dataonly = true, -- saves 10K } local rawget = rawget local lower = string.lower languages = languages or { } local languages = languages languages.data = languages.data or { } local data = languages.data local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex -- The specifications are based on an analysis done by Arthur. The -- names of tags were changed by Hans. The data is not yet used but -- will be some day. -- -- description -- -- The description is only meant as an indication; for example 'no' is -- "Norwegian, undetermined" because that's really what it is. -- -- script -- -- This is the 4-letter script tag according to ISO 15924, the -- official standard. -- -- bibliographical and terminological -- -- Then we have *two* ISO-639 3-letter tags: one is supposed to be used -- for "bibliographical" purposes, the other for "terminological". The -- first one is quite special (and mostly used in American libraries), -- and the more interesting one is the other (apparently it's that one -- we find everywhere). -- -- context -- -- These are the ones used in ConteXt. Kind of numberplate ones. -- -- opentype -- -- This is the 3-letter OpenType language tag, obviously. -- -- variant -- -- This is actually the rfc4646: an extension of ISO-639 that also defines -- codes for variants like de-1901 for "German, 1901 orthography" or zh-Hans for -- "Chinese, simplified characters" ('Hans' is the ISO-15924 tag for -- "HAN ideographs, Simplified" :-) As I said yesterday, I think this -- should be the reference since it's exactly what we want: it's really -- standard (it's a RFC) and it's more than simply languages. To my -- knowledge this is the only system that addresses this issue. -- -- Warning: it's not unique! Because we have two "German" languages -- (and could, potentially, have two Chinese, etc.) -- -- Beware: the abbreviations are lowercased, which makes it more -- convenient to use them. -- -- todo: add default features local specifications = allocate { { ["description"] = "Dutch", ["script"] = "latn", -- ["bibliographical"] = "nld", -- ["terminological"] = "nld", ["context"] = "nl", ["opentype"] = "nld", ["variant"] = "nl", }, { ["description"] = "Basque", ["script"] = "latn", ["bibliographical"] = "baq", ["terminological"] = "eus", ["context"] = "ba", ["opentype"] = "euq", ["variant"] = "eu", }, { ["description"] = "Welsh", ["script"] = "latn", ["bibliographical"] = "wel", ["terminological"] = "cym", ["context"] = "cy", ["opentype"] = "wel", ["variant"] = "cy", }, { ["description"] = "Icelandic", ["script"] = "latn", ["bibliographical"] = "ice", ["terminological"] = "isl", ["context"] = "is", ["opentype"] = "isl", ["variant"] = "is", }, { ["description"] = "Norwegian, undetermined", ["script"] = "latn", ["bibliographical"] = "nor", ["terminological"] = "nor", ["context"] = "no", ["variant"] = "no", }, { ["description"] = "Norwegian bokmal", ["script"] = "latn", ["bibliographical"] = "nob", ["terminological"] = "nob", ["opentype"] = "nor", -- not sure! ["variant"] = "nb", }, { ["description"] = "Norwegian nynorsk", ["script"] = "latn", ["bibliographical"] = "nno", ["terminological"] = "nno", ["opentype"] = "nny", ["variant"] = "nn", }, { ["description"] = "Ancient Greek", ["script"] = "grek", ["bibliographical"] = "grc", ["terminological"] = "grc", ["context"] = "agr", ["variant"] = "grc", }, { ["description"] = "German, 1901 orthography", ["script"] = "latn", ["terminological"] = "deu", ["context"] = "deo", ["opentype"] = "deu", ["variant"] = "de-1901", }, { ["description"] = "German, 1996 orthography", ["script"] = "latn", ["bibliographical"] = "ger", ["terminological"] = "deu", ["context"] = "de", ["opentype"] = "deu", ["variant"] = "de-1996", }, { ["description"] = "Afrikaans", ["script"] = "latn", ["bibliographical"] = "afr", ["terminological"] = "afr", ["context"] = "af", ["opentype"] = "afk", ["variant"] = "af", }, { ["description"] = "Catalan", ["script"] = "latn", ["bibliographical"] = "cat", ["terminological"] = "cat", ["context"] = "ca", ["opentype"] = "cat", ["variant"] = "ca", }, { ["description"] = "Czech", ["script"] = "latn", ["bibliographical"] = "cze", ["terminological"] = "ces", ["context"] = "cz", ["opentype"] = "csy", ["variant"] = "cs", }, { ["description"] = "Greek", ["script"] = "grek", ["bibliographical"] = "gre", ["terminological"] = "ell", ["context"] = "gr", ["opentype"] = "ell", ["variant"] = "el", }, { ["description"] = "American English", ["script"] = "latn", ["bibliographical"] = "eng", ["terminological"] = "eng", ["context"] = "us", ["opentype"] = "eng", ["variant"] = "en-US", }, { ["description"] = "British English", ["script"] = "latn", ["bibliographical"] = "eng", ["terminological"] = "eng", ["context"] = "uk", ["opentype"] = "eng", ["variant"] = "en-UK", -- Could be en-GB as well ... }, { ["description"] = "Spanish", ["script"] = "latn", ["bibliographical"] = "spa", ["terminological"] = "spa", ["context"] = "es", ["opentype"] = "esp", ["variant"] = "es", }, { ["description"] = "Finnish", ["script"] = "latn", ["bibliographical"] = "fin", ["terminological"] = "fin", ["context"] = "fi", ["opentype"] = "fin", ["variant"] = "fi", }, { ["description"] = "French", ["script"] = "latn", ["bibliographical"] = "fre", ["terminological"] = "fra", ["context"] = "fr", ["opentype"] = "fra", ["variant"] = "fr", }, { ["description"] = "Croatian", ["script"] = "latn", ["bibliographical"] = "scr", ["terminological"] = "hrv", ["context"] = "hr", ["opentype"] = "hrv", ["variant"] = "hr", }, { ["description"] = "Hungarian", ["script"] = "latn", ["bibliographical"] = "hun", ["terminological"] = "hun", ["context"] = "hu", ["opentype"] = "hun", ["variant"] = "hu", }, { ["description"] = "Italian", ["script"] = "latn", ["bibliographical"] = "ita", ["terminological"] = "ita", ["context"] = "it", ["opentype"] = "ita", ["variant"] = "it", }, { ["description"] = "Japanese", ["script"] = "jpan", ["bibliographical"] = "jpn", ["terminological"] = "jpn", ["context"] = "ja", ["opentype"] = "jan", ["variant"] = "ja", }, { ["description"] = "Latin", ["script"] = "latn", ["bibliographical"] = "lat", ["terminological"] = "lat", ["context"] = "la", ["opentype"] = "lat", ["variant"] = "la", }, { ["description"] = "Portuguese", ["script"] = "latn", ["bibliographical"] = "por", ["terminological"] = "por", ["context"] = "pt", ["opentype"] = "ptg", ["variant"] = "pt", }, { ["description"] = "Polish", ["script"] = "latn", ["bibliographical"] = "pol", ["terminological"] = "pol", ["context"] = "pl", ["opentype"] = "plk", ["variant"] = "pl", }, { ["description"] = "Romanian", ["script"] = "latn", ["bibliographical"] = "rum", ["terminological"] = "ron", ["context"] = "ro", ["opentype"] = "rom", ["variant"] = "ro", }, { ["description"] = "Russian", ["script"] = "cyrl", ["bibliographical"] = "rus", ["terminological"] = "rus", ["context"] = "ru", ["opentype"] = "rus", ["variant"] = "ru", }, { ["description"] = "Slovak", ["script"] = "latn", ["bibliographical"] = "slo", ["terminological"] = "slk", ["context"] = "sk", ["opentype"] = "sky", ["variant"] = "sk", }, { ["description"] = "Slovenian", ["script"] = "latn", ["bibliographical"] = "slv", ["terminological"] = "slv", ["context"] = "sl", ["opentype"] = "slv", ["variant"] = "sl", }, { ["description"] = "Swedish", ["script"] = "latn", ["bibliographical"] = "swe", ["terminological"] = "swe", ["context"] = "sv", ["opentype"] = "sve", ["variant"] = "sv", }, { ["description"] = "Thai", ["script"] = "thai", -- ["bibliographical"] = "", -- ["terminological"] = "", ["context"] = "th", ["opentype"] = "tha", -- ["variant"] = "", }, { ["description"] = "Turkish", ["script"] = "latn", ["bibliographical"] = "tur", ["terminological"] = "tur", ["context"] = "tr", ["opentype"] = "trk", ["variant"] = "tr", }, { ["description"] = "Vietnamese", ["script"] = "latn", ["bibliographical"] = "vie", ["terminological"] = "vie", ["context"] = "vn", ["opentype"] = "vit", ["variant"] = "vi", }, { ["description"] = "Chinese, simplified", ["script"] = "hans", ["opentypescript"] = "hani", ["bibliographical"] = "chi", ["terminological"] = "zho", ["context"] = "cn", ["opentype"] = "zhs", ["variant"] = "zh-hans", }, } data.specifications = specifications local variants = { } data.variants = variants local contexts = { } data.contexts = contexts local records = { } data.records = records local scripts = { } data.scripts = scripts local opentypes = { } data.opentypes = opentypes local opentypescripts = { } data.opentypescripts = opentypescripts for k=1,#specifications do local specification = specifications[k] local variant = specification.variant if variant then variants[lower(variant)] = specification end local opentype = specification.opentype if opentype then opentypes[lower(opentype)] = specification end local script = specification.script if script then scripts[lower(script)] = specification end local opentypescript = specification.opentypescript if opentypescript then opentypescripts[lower(opentypescript)] = specification end local context = context if context then if type(context) == "table" then for k=1,#context do contexts[context[k]] = specification end else contexts[context] = specification end end end local defaultvariant = variants["en-us"] local function get(k,key) local v = rawget(variants,k) or rawget(opentypes,k) or rawget(contexts,k) return v and v[key] end setmetatableindex(variants, function(t,k) k = lower(k) local v = get(k,"language") or defaultvariant.language t[k] = v return v end) setmetatableindex(opentypes, function(t,k) k = lower(k) local v = get(k,"opentype") or "dflt" t[k] = v return v end) setmetatableindex(opentypescripts, function(t,k) k = lower(k) local v = get(k,"opentypescript") or get(k,"script") or defaultvariant.opentypescript or defaultvariant.script t[k] = v return v end) setmetatableindex(contexts, function(t,k) k = lower(str) local v = get(k,"context") or defaultvariant.context v = type(v) == "table" and v[1] or v t[k] = v return v end) setmetatableindex(records, function(t,k) -- how useful is this one? k = lower(k) local v = get(k) or defaultvariant t[k] = v return v end) -- print(opentypes.nl,opentypescripts.nl) -- print(opentypes.de,opentypescripts.de) context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-buy.mkiv0000644000175000017500000000266311754241457025143 0ustar norbertnorbert%D \module %D [ file=type-buy, %D version=2003.07.08, % 2001.04.12, %D title=\CONTEXT\ Typescript Macros, %D subtitle=A Few Commercial Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[sabon] \starttypescript [serif] [sabon] [name] \definefontsynonym [Serif] [SabonMT] \definefontsynonym [SerifItalic] [SabonMT-Italic] \definefontsynonym [SerifSlanted] [SabonMT-Italic] \definefontsynonym [SerifBold] [SabonMT-SemiBold] \definefontsynonym [SerifBoldItalic] [SabonMT-SemiBoldItalic] \definefontsynonym [SerifBoldSlanted] [SabonMT-SemiBoldItalic] \definefontsynonym [SerifCaps] [SabonMT-RegularSC] \definefontsynonym[SabonMT] [sab_____] \definefontsynonym[SabonMT-Italic] [sabi____] \definefontsynonym[SabonMT-ItalicOsF] [saboi___] \definefontsynonym[SabonMT-SemiBoldOsF] [sabos___] \definefontsynonym[SabonMT-SemiBold] [sabs____] \definefontsynonym[SabonMT-RegularSC] [sabsc___] \definefontsynonym[SabonMT-SemiBoldItalic] [sabsi___] \definefontsynonym[SabonMT-SemiBoldItalicOsF][sasio___] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-ext.mkii0000644000175000017500000042231411754241457024364 0ustar norbertnorbert%D \module %D [ file=syst-ext, %D version=1995.10.10, %D title=\CONTEXT\ System Macros, %D subtitle=Extras, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 System Macros / Extras} %D In this second system module, we continue the definition of %D some handy commands. \unprotect %D \macros %D {rawgetparameters} %D %D A raw and dirty alternative for \type {\getparameters}; no %D checking is done! % \def\rawgetparameters[#1][#2]% scheelt 5\% % {\def\rawparameterprefix{#1}% % \expandafter\rawsetparameter#2,]=,} \def\rawsetparameter#1=#2,% {\if]#1\else \expandafter\def\csname\rawparameterprefix#1\endcsname{#2}% \expandafter\rawsetparameter \fi} % the next one handles empty #1 okay: \def\rawgetparameters[#1][#2% some 5-10% faster {\ifx#2]% test is needed, else bomb on [#1][] \expandafter\gobbleoneargument \else \def\rawparameterprefix{#1}% \expandafter\dorawgetparameters \fi#2} \def\dorawgetparameters#1]% {\expandafter\rawsetparameter#1,]=,} %D \macros %D {doglobal, %D redoglobal,dodoglobal,resetglobal} %D %D The two macros \type {\redoglobal} and \type{\dodoglobal} are %D used in this and some other modules to enforce a user %D specified \type {\doglobal} action. The last and often only %D global assignment in a macro is done with %D \type {\dodoglobal}, but all preceding ones with %D \type {\redoglobal}. When using only alternatives, one can %D reset this mechanism with \type {\resetglobal}. \def\doglobal {\let\redoglobal\global \def\dodoglobal{\resetglobal\global}} \def\resetglobal {\let\redoglobal\relax \let\dodoglobal\relax} \resetglobal %D New: \def\doglobal {\ifx\redoglobal\relax \let\redoglobal\global \let\dodoglobal\@@dodoglobal %\else % \writestatus{system}{global not reset, warn me!}% \fi} \def\@@dodoglobal {\resetglobal\global} \def\saveglobal {\let\@@dodoglobal\dodoglobal \let\@@redoglobal\redoglobal} \def\restoreglobal {\let\redoglobal\@@redoglobal \let\dodoglobal\@@dodoglobal} %D A very useful application of this macro is \type {\newif}, %D \TEX's fake boolean type. Not being a primitive, %D \type {\global} hopelessly fails here. But a slight %D adaption of Knuth's original macro permits: %D %D \starttyping %D \doglobal\newif\iftest %D \stoptyping %D %D Of course one can still say: %D %D \starttyping %D \global\testtrue %D \global\testfalse %D \stoptyping %D %D Apart from the prefixes, a few more \type{\expandafters} %D are needed: \def\newif#1% {\scratchcounter\escapechar \escapechar\minusone \expandafter\expandafter\expandafter \redoglobal\expandafter\expandafter\expandafter \edef\@if#1{true}{\let\noexpand#1\noexpand\iftrue}% \expandafter\expandafter\expandafter \redoglobal\expandafter\expandafter\expandafter \edef\@if#1{false}{\let\noexpand#1\noexpand\iffalse}% \dodoglobal\@if#1{false}% \escapechar\scratchcounter} %D Also: \def\define#1% {\ifx#1\undefined \expandafter\long\expandafter\def \else \message{[\noexpand#1is already defined]}% \expandafter\long\expandafter\def\expandafter\gobbleddefinition \fi#1} \def\redefine#1% {\ifx#1\undefined\else \message{[\noexpand#1is redefined]}% \fi \long\def#1} % \define\hans{hans} % \redefine\hans{hans} % \define\hans#1[]#2#3{hans} %D The next variant fits nicely in the setups syntax: %D %D \starttyping %D \starttexdefinition bagger [#1] #2 %D oeps %D #1 %D oeps %D \stoptexdefinition %D %D \bagger [a] {b} %D \stoptyping \bgroup \obeylines \gdef\starttexdefinition% {\bgroup% \obeylines% \dostarttexdefinition} \gdef\dostarttexdefinition #1 {\catcode13=\@@ignore% \doifinstringelse\letterhash{\detokenize{#1}}\dodostarttexdefinition\nonostarttexdefinition#1 } \long\gdef\dodostarttexdefinition#1 #2 {\dododostarttexdefinition{#1}{#2}} \long\gdef\dododostarttexdefinition#1#2#3\stoptexdefinition% {\egroup% \long\setvalue{#1}#2{#3}} \long\gdef\nonostarttexdefinition#1 {\nononostarttexdefinition{#1}{}} \long\gdef\nononostarttexdefinition#1#2#3\stoptexdefinition% {\egroup% \long\setvalue{#1}{#3}} \egroup %D \macros %D {newcounter, %D increment,decrement} %D %D Unfortunately the number of \COUNTERS\ in \TEX\ is limited, %D but fortunately we can store numbers in a macro. We can %D increment such pseudo \COUNTERS\ with \type{\increment}. %D %D \starttyping %D \increment(\counter,20) %D \increment(\counter,-4) %D \increment(\counter) %D \increment\counter %D \stoptyping %D %D After this sequence of commands, the value of %D \type{\counter} is 20, 16, 17 and~18. Of course there is %D also the complementary command \type{\decrement}. %D %D Global assignments are possible too, using \type{\doglobal}: %D %D \starttyping %D \doglobal\increment\counter %D \stoptyping %D %D When \type{\counter} is undefined, it's value is initialized %D at~0. It is nevertheless better to define a \COUNTER\ %D explicitly. One reason could be that the \COUNTER\ can be %D part of a test with \type{\ifnum} and this conditional does %D not accept undefined macro's. The \COUNTER\ in our example %D can for instance be defined with: %D %D \starttyping %D \newcounter\counter %D \stoptyping %D %D The command \type{\newcounter} must not be confused with %D \type{\newcount}! Of course this mechanism is much slower %D than using \TEX's \COUNTERS\ directly. In practice %D \COUNTERS\ (and therefore our pseudo counters too) are %D seldom the bottleneck in the processing of a text. Apart %D from some other incompatilities we want to mention a pitfal %D when using \type{\ifnum}. %D %D \starttyping %D \ifnum\normalcounter=\pseudocounter \doif \else \doelse \fi %D \ifnum\pseudocounter=\normalcounter \doif \else \doelse \fi %D \stoptyping %D %D In the first test, \TEX\ continues it's search for the %D second number after reading \type{\pseudocounter}, while %D in the second test, it stops reading after having %D encountered a real one. Tests like the first one therefore %D can give unexpected results, for instance execution %D of \type{\doif} even if both numbers are unequal. \def\zerocountervalue{0} \def\newcounter#1% {\dodoglobal\let#1\zerocountervalue} % This is the original implementation: % % \def\dodododoincrement(#1,#2)% % {\ifx#1\undefined % \redoglobal\let#1\zerocountervalue % \else\ifx#1\relax % \csname...\endcsname % \redoglobal\let#1\zerocountervalue % \fi\fi % \scratchcounter=#2\relax % \scratchcounter=\incrementsign\scratchcounter % \advance\scratchcounter #1\relax % \dodoglobal\edef#1{\the\scratchcounter}} % % \def\dododoincrement#1% % {\dodododoincrement(#1,1)} % % \def\dodoincrement(#1% % {\doifnextcharelse,% % {\dodododoincrement(#1}{\dodododoincrement(#1,1}} % % \def\doincrement#1% % {\def\incrementsign{#1}% % \doifnextcharelse(\dodoincrement\dododoincrement} % % \def\increment{\doincrement+} % \def\decrement{\doincrement-} % % And this is the one optimized for speed: % maxcounter = 2\maxdimen=1 \def\!!zerocount {0} % alongside \zerocount \def\!!minusone {-1} % alongside \minusone \def\!!plusone {1} % alongside \plusone \beginTEX \def\dodoindecrement#1(#2,#3)% {\ifx#2\undefined \redoglobal\let#2\zerocountervalue \else\ifx#2\relax % \csname...\endcsname \redoglobal\let#2\zerocountervalue \fi\fi \scratchcounter#3\relax \scratchcounter#1\scratchcounter \advance\scratchcounter#2\relax \dodoglobal\edef#2{\the\scratchcounter}} \def\dodoincrement(#1% {\doifnextcharelse,{\dodoindecrement+(#1}{\dodoindecrement+(#1,1}} \def\dododecrement(#1% {\doifnextcharelse,{\dodoindecrement-(#1}{\dodoindecrement-(#1,1}} \def\doincrement#1% 10% faster alternative {\ifx#1\undefined \dodoglobal\let#1\!!plusone \else\ifx#1\relax % \csname...\endcsname \dodoglobal\let#1\!!plusone \else \fastincrement#1% \fi\fi} \def\dodecrement#1% 10% faster alternative {\ifx#1\undefined \dodoglobal\let#1\!!minusone \else\ifx#1\relax % \csname...\endcsname \dodoglobal\let#1\!!minusone \else \fastdecrement#1% \fi\fi} \def\fastdecrement#1% 50% faster alternative {\scratchcounter#1\advance\scratchcounter\minusone \dodoglobal\edef#1{\the\scratchcounter}} \def\fastincrement#1% 50% faster alternative {\scratchcounter#1\advance\scratchcounter\plusone \dodoglobal\edef#1{\the\scratchcounter}} \endTEX \beginETEX \numexpr % \def\doindecrement#1#2% % {\dodoglobal\edef#2% % {\the\numexpr(\ifx#2\undefined\else\ifx#2\relax\else#2\fi\fi#11)}} % % \def\doincrement{\doindecrement+} % \def\dodecrement{\doindecrement-} % % some 3\% faster: \def\doindecrement#1#2% {\dodoglobal\edef#2% {\the\numexpr\ifx#2\undefined\else\ifx#2\relax\else#2\fi\fi+#1\relax}} \def\doincrement{\doindecrement\plusone } \def\dodecrement{\doindecrement\minusone} \def\dodoindecrement#1#2,#3)% {\dodoglobal\edef#2% {\the\numexpr\ifx#2\undefined\else\ifx#2\relax\else#2\fi\fi#1#3\relax}} \def\dodoincrement(#1% {\doifnextcharelse,{\dodoindecrement+#1}{\dodoindecrement+#1,\plusone}} \def\dododecrement(#1% {\doifnextcharelse,{\dodoindecrement-#1}{\dodoindecrement-#1,\plusone}} \def\fastincrement#1{\dodoglobal\edef#1{\the\numexpr#1+\plusone \relax}} \def\fastdecrement#1{\dodoglobal\edef#1{\the\numexpr#1+\minusone\relax}} \endETEX \def\increment{\doifnextcharelse(\dodoincrement\doincrement} \def\decrement{\doifnextcharelse(\dododecrement\dodecrement} \def\incrementvalue#1{\expandafter\increment\csname#1\endcsname} \def\decrementvalue#1{\expandafter\decrement\csname#1\endcsname} %D \macros %D {newsignal} %D %D When writing advanced macros, we cannot do without %D signaling. A signal is a small (invisible) kern or penalty %D that signals the next macro that something just happened. %D This macro can take any action depending on the previous %D signal. Signals must be unique and the next macro takes care %D of that. %D %D \starttyping %D \newsignal\somesignal %D \stoptyping %D %D Signals old dimensions and can be used in skips, kerns and %D tests like \type{\ifdim}. \newdimen\maximumsignal % step is about 0.00025pt \def\newsignal#1% {\ifx#1\undefined \advance\maximumsignal 2sp % to be save in rounding \edef#1{\the\maximumsignal}% \fi} %D \macros %D {newskimen} %D %D \TEX\ offers 256 \DIMENSIONS\ and \SKIPS. Unfortunately this %D amount is too small to suit certain packages. Therefore when %D possible one should use: %D %D \starttyping %D \newskimen\tempskimen %D \stoptyping %D %D This commands allocates a \DIMENSION\ or a \SKIP, depending %D on the availability. One should be aware of the difference %D between both. When searching for some glue \TEX\ goes on %D searching till it's sure that no other glue component if %D found. This search can be canceled by using \type{\relax} %D when possible and needed. %D %D \starttyping %D \def\newskimen#1% %D {\ifx#1\undefined %D \ifnum\count11>\count12 %D \newskip#1\relax %D \else %D \newdimen#1\relax %D \fi %D \fi} %D \stoptyping %D %D In order to make this macro work in plain \TEX\ too, we %D use the following alternative, which fools \TEX\ about %D the new commands being \type {\outer} ones. % \def\newskimen#1% % {\ifx#1\undefined % \csname new\ifnum\count11>\count12 skip\else dimen\fi\endcsname#1% % \fi} \let\newskimen\newdimen % it's all etex or later now %D \macros %D {strippedcsname} %D %D The next macro can be very useful when using \type{\csname} %D like in: %D %D \starttyping %D \csname if\strippedcsname\something\endcsname %D \stoptyping %D %D This expands to \type{\ifsomething}. %D %D \starttyping %D \def\strippedcsname %D {\expandafter\gobbleoneargument\string} %D \stoptyping %D %D Slower but better: \ifx\letterbackslash\undefined {\catcode`.=0 .catcode`.\ 12 .xdef.letterbackslash{.string\}} % hack \fi \def\strippedcsname#1% this permits \strippedcsname{\xxx} and \strippedcsname{xxx} {\expandafter\dostrippedcsname\string#1} \def\dostrippedcsname#1% {\if\noexpand#1\letterbackslash\else#1\fi} %D \macros %D {savenormalmeaning} %D %D We will use this one in: \def\savenormalmeaning#1% {\ifundefined{normal\strippedcsname#1}% \letvalue{normal\strippedcsname#1}#1% \fi} %D \macros %D {newconditional, %D settrue, setfalse, %D ifconditional,then} %D %D \TEX's lacks boolean variables, although the \PLAIN\ format %D implements \type{\newif}. The main disadvantage of this %D scheme is that it takes three hash table entries. A more %D memory saving alternative is presented here. A conditional %D is defined by: %D %D \starttyping %D \newconditional\doublesided %D \setfalse %D \stoptyping %D Setting a conditional is done by \type{\settrue} and %D \type{\setfalse}: %D %D \starttyping %D \settrue\doublesided %D \setfalse %D \stoptyping %D while testing is accomplished by: %D %D \starttyping %D \ifconditional\doublesided ... \else ... \fi %D \setfalse %D \stoptyping %D We cannot use the simple scheme: %D %D \starttyping %D \def\settrue #1{\let#1=\iftrue} %D \def\setfalse#1{\let#1=\iffalse} %D \stoptyping %D %D Such an implementation gives problems with nested %D conditionals. The next implementation is abaou as fast %D and just as straightforward: \def\settrue #1{\chardef#1\zerocount} \def\setfalse#1{\chardef#1\plusone} \let\newconditional = \setfalse \let\ifconditional = \ifcase \let\then\relax % so that we can say \ifnum1>2\then -) %D \macros %D {ifzeropt} %D %D The next macro is both cosmetic and byte saving. It is %D pretty \type{\if}||safe too. It can be used in cases %D like: %D %D \starttyping %D \ifzeropt \somedimen ... \else ... \fi %D \stoptyping \let\ifzeropt\ifcase %D \macros %D {dorecurse,recurselevel,recursedepth, %D dostepwiserecurse, %D for} %D %D \TEX\ does not offer us powerfull for||loop mechanisms. On %D the other hand its recursion engine is quite unique. We %D therefore identify the for||looping macros by this method. %D The most simple alternative is the one that only needs a %D number. %D %D \starttyping %D \dorecurse {n} {whatever we want} %D \stoptyping %D %D This macro can be nested without problems and therefore be %D used in situations where \PLAIN\ \TEX's \type{\loop} macro %D ungracefully fails. The current value of the counter is %D available in \type{\recurselevel}, before as well as after %D the \typ{whatever we wat} stuff. %D %D \starttyping %D \dorecurse % inner loop %D {10} %D {\recurselevel: % outer value %D \dorecurse % inner loop %D {\recurselevel} % outer value %D {\recurselevel} % inner value %D \dorecurse % inner loop %D {\recurselevel} % outer value %D {\recurselevel} % inner value %D \endgraf} %D \stoptyping %D %D In this example the first, second and fourth %D \type{\recurselevel} concern the outer loop, while the third %D and fifth one concern the inner loop. The depth of the %D nesting is available for inspection in \type{\recursedepth}. %D %D Both \type{\recurselevel} and \type{\recursedepth} are %D macros. The real \COUNTERS\ are hidden from the user because %D we don't want any interference. \newcount\outerrecurse \newcount\innerrecurse \def\recursedepth{\the\outerrecurse} \def\recurselevel{0} \let\nextrecurse\relax %D Acceptable: %D %D \starttyping %D \long\def\dostepwiserecurse#1#2#3% %D {\let\nextrecurse\gobblefourarguments %D \ifnum#3>0\relax\ifnum#2<#1\relax\else %D \def\nextrecurse{\dosetstepwiserecurse>}% %D \fi\fi %D \ifnum#3<0\relax\ifnum#1<#2\relax\else %D \def\nextrecurse{\dosetstepwiserecurse<}% %D \fi\fi %D \nextrecurse{#1}{#2}{#3}} %D \stoptyping %D %D Better: %D %D \starttyping %D \long\def\dostepwiserecurse#1#2#3% %D {\let\nextrecurse\gobblefourarguments %D \ifnum#3>0\relax \ifnum#2<#1\relax \else %D \def\nextrecurse{\dosetstepwiserecurse>}% %D \fi \else \ifnum#3<0\relax \ifnum#1<#2\relax \else %D \def\nextrecurse{\dosetstepwiserecurse<}% %D \fi \fi \fi %D \nextrecurse{#1}{#2}{#3}} %D %D \def\@@irecurse{@@irecurse} % stepper %D \def\@@nrecurse{@@nrecurse} % number of steps %D \def\@@srecurse{@@srecurse} % step %D \def\@@drecurse{@@drecurse} % direction, < or > %D \def\@@arecurse{@@arecurse} % action %D %D \long\def\dosetstepwiserecurse#1#2#3#4#5% %D {\global\advance\outerrecurse 1 %D \setevalue{\@@drecurse\recursedepth}{#1}% %D \setevalue{\@@irecurse\recursedepth}{\number#2}% %D \setevalue{\@@nrecurse\recursedepth}{\number#3}% %D \setevalue{\@@srecurse\recursedepth}{\number#4}% %D \long\setvalue{\@@arecurse\recursedepth}{#5}% %D \dodorecurse} %D %D \def\donorecurse %D {} %D %D \def\dododorecurse %D {\edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}% %D \getvalue{\@@arecurse\recursedepth}% %D \edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}% %D \innerrecurse\recurselevel %D \advance\innerrecurse \csname\@@srecurse\recursedepth\endcsname %D \setevalue{\@@irecurse\recursedepth}{\the\innerrecurse}% %D \dodorecurse} %D %D \def\dodorecurse %D {\ifnum\csname\@@irecurse\recursedepth\endcsname %D \csname\@@drecurse\recursedepth\endcsname %D \csname\@@nrecurse\recursedepth\endcsname\relax %D \expandafter\nododorecurse %D \else %D \expandafter\dododorecurse %D \fi} %D %D \def\nododorecurse %D {\global\advance\outerrecurse -1 %D \edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}} %D \stoptyping %D %D Cleaner and much faster: \def\@@irecurse{@@ir@@} % ecurse} % stepper \def\@@arecurse{@@ar@@} % ecurse} % action % \mathchardef \long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname{#4}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \ifnum#3>0\relax \ifnum#2<#1\relax \let\nextrecurse\exitstepwiserecurse \else \let\nextrecurse\dodostepwiserecurse \fi \else \ifnum#3<0\relax \ifnum#1<#2\relax \let\nextrecurse\exitstepwiserecurse \else \let\nextrecurse\dodostepwisereverse \fi \else \let\nextrecurse\exitstepwiserecurse \fi \fi\expanded{\nextrecurse{\number#1}{\number#2}{\number#3}}} \beginETEX \numexpr \long\def\dodostepwiserecurse#1#2#3% from to step {\ifnum#1>#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \@EAEAEA\redostepwiserecurse\@EA \fi\@EA{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} \endETEX \beginTEX \long\def\dodostepwiserecurse#1#2#3% from to step {\ifnum#1>#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse#3\relax \@EAEAEA\redostepwiserecurse\@EA \fi\@EA{\the\innerrecurse}{#2}{#3}} \endTEX \def\expandrecursecontent {\csname\@@arecurse\recursedepth\endcsname} \def\redostepwiserecurse {\expandrecursecontent\dodostepwiserecurse} \beginETEX \numexpr \long\def\dodostepwisereverse#1#2#3% from to step {\ifnum#1<#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \@EAEAEA\redostepwisereverse\@EA \fi\@EA{\the\numexpr\recurselevel#3\relax}{#2}{#3}} \endETEX \beginTEX \long\def\dodostepwisereverse#1#2#3% from to step {\ifnum#1<#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \innerrecurse#1\relax \advance\innerrecurse#3\relax \@EAEAEA\redostepwisereverse\@EA \fi\@EA{\the\innerrecurse}{#2}{#3}} \endTEX \def\redostepwisereverse {\expandrecursecontent\dodostepwisereverse} \def\exitstepwiserecurse {\nodostepwiserecurse\relax} \def\nodostepwiserecurse#1#2#3#4% {\@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse \minusone} \def\nonostepwiserecurse#1#2#3% {\@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse \minusone} \def\dorecurse#1% {\dostepwiserecurse1{#1}1} %D As we can see here, the simple command \type{\dorecurse} is %D a special case of the more general: %D %D \starttyping %D \dostepwiserecurse {from} {to} {step} {action} %D \stoptyping %D %D This commands accepts positive and negative steps. Illegal %D values are handles as good as possible and the macro accepts %D numbers and \COUNTERS. %D %D \starttyping %D \dostepwiserecurse {1} {10} {2} {...} %D \dostepwiserecurse {10} {1} {-2} {...} %D \stoptyping %D %D Because the simple case is used often, we implement it %D more efficiently: \long\def\dorecurse#1% {\ifcase#1\relax \expandafter\gobbletwoarguments \or \expandafter\ydorecurse \else \expandafter\xdorecurse \fi{#1}} \long\def\xdorecurse#1#2% {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname{#2}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \@EA\dodorecurse\@EA1\@EA{\number#1}} \long\def\ydorecurse#1#2% {\global\advance\outerrecurse \plusone \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \let\recurselevel\!!plusone #2% \@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse \minusone} \beginETEX \numexpr \long\def\dodorecurse#1#2% from to {\ifnum#1>#2\relax \@EA\nodorecurse \else \def\recurselevel{#1}% \@EAEAEA\redorecurse \fi\@EA{\the\numexpr\recurselevel+\plusone\relax}{#2}} \endETEX \beginTEX \long\def\dodorecurse#1#2% from to {\ifnum#1>#2\relax \@EA\nodorecurse \else \def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse\plusone \@EAEAEA\redorecurse \fi\@EA{\the\innerrecurse}{#2}} \endTEX \def\redorecurse {\expandrecursecontent\dodorecurse} \def\nodorecurse#1#2#3% {\@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse \minusone } %D \macros %D {doloop,exitloop} %D %D Sometimes loops are not determined by counters, but by %D (a combinations of) conditions. We therefore implement a %D straightforward loop, which can only be left when we %D explictly exit it. Nesting is supported. First we present %D a more extensive alternative. %D %D \starttyping %D \doloop %D {Some kind of typesetting punishment \par %D \ifnum\pageno>100 \exitloop \fi} %D \stoptyping %D %D When needed, one can call for \type{\looplevel} and %D \type{\loopdepth}. %D %D If we write this macros from scratch, we end up with %D something like the ones described above: %D %D \starttyping %D \def\@@eloop{@@eloop} % exit %D \def\@@iloop{@@iloop} % stepper %D \def\@@aloop{@@aloop} % action %D %D \newcount\outerloop %D %D \def\loopdepth% %D {\the\outerloop} %D %D \def\exitloop% %D {\setevalue{\@@eloop\loopdepth}{0}} %D %D \long\def\doloop#1% %D {\global\advance\outerloop by 1 %D \setevalue{\@@iloop\loopdepth}{1}% %D \setevalue{\@@eloop\loopdepth}{1}% %D \long\setvalue{\@@aloop\loopdepth}{#1}% %D \dodoloop} %D %D \def\dodonoloop% %D {\global\advance\outerloop by -1\relax} %D %D \def\dododoloop% %D {\edef\looplevel{\getvalue{\@@iloop\loopdepth}}% %D \innerrecurse=\looplevel %D \advance\innerrecurse by 1 %D \setevalue{\@@iloop\loopdepth}{\the\innerrecurse}% %D \getvalue{\@@aloop\loopdepth}% %D \edef\looplevel{\getvalue{\@@iloop\loopdepth}}% %D \dodoloop} %D %D \def\dodoloop% %D {\ifnum\getvalue{\@@eloop\loopdepth}=0 %D \expandafter\dodonoloop %D \else %D \expandafter\dododoloop %D \fi} %D %D \def\doloop% %D {\dostepwiserecurse{1}{\maxdimen}{1}} %D %D \def\exitloop %D {\setvalue{\@@irecurse\recursedepth}{\maxdimen}} %D %D \def\looplevel{\recurselevel} %D \def\loopdepth{\recursedepth} %D \stoptyping %D %D We don't have to declare new counters for \type{\looplevel} %D and \type{\loopdepth} because we can use \type{\recurselevel} %D and \type{\recursedepth}. %D %D We prefer however a more byte saving implementation, that %D executes of course a bit slower. %D %D \starttyping %D \def\doloop% %D {\dostepwiserecurse1\maxdimen1} %D %D \def\exitloop% %D {\letvalue{\@@irecurse\recursedepth}\maxdimen} %D \stoptyping %D %D Although, the next version is faster because it used the %D simple loop. \let\endofloop\donothing \long\def\doloop#1% {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname{#1}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \let\endofloop\dodoloop \dodoloop1} % no \plusone else \recurselevel wrong \beginETEX \numexpr \long\def\dodoloop#1% {\def\recurselevel{#1}% \@EA\redoloop\@EA{\the\numexpr\recurselevel+\plusone\relax}} \endETEX \beginTEX \long\def\dodoloop#1% {\def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse\plusone \@EA\redoloop\@EA{\the\innerrecurse}} \endTEX \def\redoloop {\expandrecursecontent\endofloop} \def\nodoloop#1% {\let\endofloop\dodoloop % new, permits nested \doloop's \@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse\minusone} \def\exitloop % \exitloop quits at end {\let\endofloop\nodoloop} \long\def\exitloopnow#1\endofloop % \exitloopnow quits directly {\nodoloop} %D The loop is executed at least once, so beware of situations %D like: %D %D \starttyping %D \doloop {\exitloop some commands} %D \stoptyping %D %D It's just a matter of putting the text into the \type{\if} %D statement that should be there anyway, like in: %D %D \starttyping %D \doloop {\ifwhatever \exitloop \else some commands\fi} %D \stoptyping %D %D You can also quit a loop immediately, by using \type %D {\exitloopnow} instead. Beware, this is more sensitive %D for conditional errors. %D Krzysztof Leszczynski suggested to provide access to the level by %D means of a \type {#1}. I decided to pass the more frequently used %D level as \type {#1} and the less favoured depth as \type {#2}. The %D intended usage is: %D %D \starttyping %D \dorecurse{3}{\definesymbol[test-#1][xx-#1]} %D %D \def\test{\dorecurse{3}{\definesymbol[test-##1][xx-##1]}} \test %D %D \symbol[test-1]\quad\symbol[test-2]\quad\symbol[test-3] %D \stoptyping %D %D Since the hashed arguments are expanded, we don't need tricky %D expansion here. %D %D \starttyping %D \dorecurse{3}{\expanded{\definesymbol[test-\recurselevel][xx-\recurselevel]}} %D \stoptyping \def\expandrecursecontent {\csname\@@arecurse\recursedepth\@EA\@EA\@EA\endcsname\@EA\@EA\@EA{\@EA\recurselevel\@EA}\@EA{\recursedepth}} \long\def\xdorecurse#1#2% {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \@EA\dodorecurse\@EA1\@EA{\number#1}} \long\def\ydorecurse#1#2% {\global\advance\outerrecurse \plusone \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \let\recurselevel\!!plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}% \expandrecursecontent \@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse \minusone} \long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \ifnum#3>0\relax \ifnum#2<#1\relax \let\nextrecurse\exitstepwiserecurse \else \let\nextrecurse\dodostepwiserecurse \fi \else \ifnum#3<0\relax \ifnum#1<#2\relax \let\nextrecurse\exitstepwiserecurse \else \let\nextrecurse\dodostepwisereverse \fi \else \let\nextrecurse\exitstepwiserecurse \fi \fi\expanded{\nextrecurse{\number#1}{\number#2}{\number#3}}} \long\def\doloop#1% {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#1}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel \let\endofloop\dodoloop \dodoloop1} % no \plusone else \recurselevel wrong %D For special purposes: \newcount\fastrecursecounter \newcount\lastrecursecounter \newcount\steprecursecounter \def\dofastrecurse#1#2#3#4% {\def\fastrecursebody{#4}% \fastrecursecounter#1\relax \lastrecursecounter#2\relax \steprecursecounter#3\relax \def\recurselevel{\number\fastrecursecounter}% \dodofastrecurse} \def\resetrecurselevel{\let\recurselevel\!!zerocount} \def\dodofastrecurse {\ifnum\fastrecursecounter>\lastrecursecounter % \resetrecurselevel % slows down \else \fastrecursebody \advance\fastrecursecounter\steprecursecounter \expandafter\dodofastrecurse \fi} % \appendtoks \resetrecurselevel \to \everydump \everydump\expandafter{\the\everydump\resetrecurselevel} %D This alternative looks a bit different and uses a %D pseudo counter. When this macro is nested, we have to use %D different counters. This time we use keywords. %D %D \starttyping %D \def\alfa{2} \def\beta{100} \def\gamma{3} %D %D \for \n=55 \to 100 \step 1 \do {... \n ...} %D \for \n=\alfa \to \beta \step \gamma \do {... \n ...} %D \for \n=\n \to 120 \step 1 \do {... \n ...} %D \for \n=120 \to 100 \step -3 \do {... \n ...} %D \for \n=55 \to 100 \step 2 \do {... \n ...} %D \stoptyping %D %D Only in the third example we need to predefine \type{\n}. %D The use of \type{\od} as a dilimiter would have made nested %D use more problematic. %D Don't use this one, it's kind of obsolete. \def\for#1=#2\to#3\step#4\do#5% {\dostepwiserecurse{#2}{#3}{#4} {\let#1\recurselevel#5\let#1\recurselevel}} %D \macros %D {newevery,everyline,EveryLine,EveryPar} %D %D Lets skip to something quite different. It's common use %D to use \type{\everypar} for special purposes. In \CONTEXT\ %D we use this primitive for locating sidefloats. This means %D that when user assignments to \type{\everypar} can interfere %D with those of the package. We therefore introduce %D \type{\EveryPar}. %D %D The same goes for \type{\EveryLine}. Because \TEX\ offers %D no \type{\everyline} primitive, we have to call for %D \type{\everyline} when we are working on a line by line %D basis. Just by calling \type{\EveryPar{}} and %D \type{\EveryLine{}} we restore the old situation. %D %D The definition command \type{\DoWithEvery} will be quite %D unreadable, so let's first show an implementation that %D shows how things are done: %D %D \starttyping %D \newtoks \everyline %D \newtoks \oldeveryline %D \newif \ifeveryline %D %D \def\DoWithEvery#1#2#3#4% %D {#3\else\edef\next{\noexpand#2={\the#1}}\next\fi %D \edef\next{\noexpand#1={\the#2\the\scratchtoks}}\next %D #4} %D %D \def\doEveryLine% %D {\DoWithEvery\everyline\oldeveryline\ifeveryline\everylinetrue} %D %D \def\EveryLine% %D {\afterassignment\doEveryLine\scratchtoks} %D \stoptyping %D %D The real implementation is a bit more complicated but we %D prefer something more versatile. % the old one % % \def\DoWithEvery#1% % {\csname if\strippedcsname#1\endcsname \else % \edef\next% % {\@EA\noexpand\csname old\strippedcsname#1\endcsname= % {\the#1}}% % \next % \fi % \edef\next% % {\noexpand#1= % {\@EA\the\csname old\strippedcsname#1\endcsname\the\scratchtoks}}% % \next % \csname\strippedcsname#1true\endcsname} % % \def\dowithevery#1% % {\@EA\afterassignment\csname do\strippedcsname#1\endcsname\scratchtoks} % % \def\newevery#1#2% % {\ifx#1\undefined\newtoks#1\fi % \ifx#2\relax\else\ifx#2\undefined % \@EA\newtoks\csname old\strippedcsname#1\endcsname % \@EA\newif \csname if\strippedcsname#1\endcsname % \@EA\def \csname do\strippedcsname#2\endcsname{\DoWithEvery#1}% % \def#2{\dowithevery#2}% % \fi\fi} % % cleaner and more efficient %\def\dowithevery#1% % {\def\dodowithevery% % {\ifcase\csname c\strippedcsname#1\endcsname \expandafter\chardef % \csname c\strippedcsname#1\endcsname=1 % \csname t\strippedcsname#1\endcsname=#1% % \fi % \edef\next% % {#1={\the\csname t\strippedcsname#1\endcsname\the\scratchtoks}}% % \next}% % \afterassignment\dodowithevery\scratchtoks} % % more efficient: \def\dodowithevery#1% {\ifcase\csname c\strippedcsname#1\endcsname \expandafter\chardef \csname c\strippedcsname#1\endcsname1 \csname t\strippedcsname#1\endcsname#1% \fi \edef\next% {#1{\the\csname t\strippedcsname#1\endcsname\the\scratchtoks}}% \next} \def\dowithevery#1% {\def\next{\dodowithevery#1}% \afterassignment\next\scratchtoks} \bgroup \let\newtoks\relax % plain safe (\outer) \gdef\newevery#1#2% {\ifx#1\undefined\csname newtoks\endcsname#1\fi % plain safe (\outer) \ifx#2\relax\else\ifx#2\undefined \expandafter\newtoks\csname t\strippedcsname#1\endcsname \expandafter\chardef\csname c\strippedcsname#1\endcsname\zerocount \def#2{\dowithevery#1}% \fi\fi} \egroup %D The first \type {\outer} hack is needed to trick \TEX\ %D into thinking that \type {\newtoks} is no outer macro, %D the second hack is needed due to some funny interaction %D between outer macros and \type {\if} at expansion time. %D This one permits definitions like: \newevery \everypar \EveryPar \newevery \everyline \EveryLine %D and how about: \newevery \neverypar \NeveryPar %D Which we're going to use indeed! When the second argument %D equals \type {\relax}, the first token list is created %D unless it is already defined. %D Technically spoken we could have used the method we are %D going to present in the visual debugger. First we save %D the primitive \type{\everypar}: %D %D \starttyping %D \let\normaleverypar=\everypar %D \stoptyping %D %D Next we allocate a \TOKENLIST\ named \type{\everypar}, %D which means that \type{\everypar} is no longer a primitive %D but something like \type{\toks44}. %D %D \starttyping %D \newtoks\everypar %D \stoptyping %D %D Because \TEX\ now executes \type{\normaleverypar} instead %D of \type{\everypar}, we are ready to assign some tokens to %D this internally known and used \TOKENLIST. %D %D \starttyping %D \normaleverypar={all the things the system wants to do \the\everypar} %D \stoptyping %D %D Where the user can provide his own tokens to be expanded %D every time he expects them to expand. %D %D \starttyping %D \everypar={something the user wants to do} %D \stoptyping %D %D We don't use this method because it undoubtly leads to %D confusing situations, especially when other packages are %D used, but it's this kind of tricks that make \TEX\ so %D powerful. %D \macros %D {convertargument,convertcommand,convertvalue} %D %D Some persistent experimenting led us to the next macro. This %D macro converts a parameter or an expanded macro to it's %D textual meaning. %D %D \starttyping %D \convertargument ... \to \command %D \stoptyping %D %D For example, %D %D \starttyping %D \convertargument{one \two \three{four}}\to\ascii %D \stoptyping %D %D The resulting macro \type{\ascii} can be written to a file %D or the terminal without problems. In \CONTEXT\ we use this %D macro for generating registers and tables of contents. %D %D The second conversion alternative accepts a command: %D %D \starttyping %D \convertcommand\command\to\ascii %D \stoptyping %D %D Both commands accept the prefix \type{\doglobal} for global %D assignments. \beginTEX \def\doconvertargument#1>{} \def\convertedcommand {\expandafter\doconvertargument\meaning} \long\def\convertargument#1\to#2% {\long\def#2{#1}% saves a restore \dodoglobal\edef#2{\convertedcommand#2}} \long\def\convertcommand#1\to#2% {\dodoglobal\edef#2{\convertedcommand#1}} % no dodoglobal ! \long\def\defconvertedargument#1#2% less sensitive for \to {\long\def#1{#2}% saves a restore \edef#1{\convertedcommand#1}} \long\def\defconvertedcommand#1#2% less sensitive for \to {\edef#1{\convertedcommand#2}} \long\def\gdefconvertedargument#1#2% less sensitive for \to {\long\gdef#1{#2}% saves a restore \xdef#1{\convertedcommand#1}} \long\def\gdefconvertedcommand#1#2% less sensitive for \to {\xdef#1{\convertedcommand#2}} \endTEX \def\convertvalue#1\to {\expandafter\convertcommand\csname#1\endcsname\to} \def\defconvertedvalue#1#2% less sensitive for \to {\@EA\defconvertedcommand\@EA#1\csname#2\endcsname} %D \macros %D {doifassignmentelse} %D %D A lot of \CONTEXT\ commands take optional arguments, for %D instance: %D %D \starttyping %D \dothisorthat[alfa,beta] %D \dothisorthat[first=foo,second=bar] %D \dothisorthat[alfa,beta][first=foo,second=bar] %D \stoptyping %D %D Although a combined solution is possible, we prefer a %D seperation. The next command takes care of propper %D handling of such multi||faced commands. %D %D \starttyping %D \doifassignmentelse {...} {then ...} {else ...} %D \stoptyping % not robust % % \def\doifassignmentelse% % {\doifinstringelse{=}} % % readable % % \def\doifassignmentelse#1% % {\convertargument#1\to\ascii % \doifinstringelse{=}{\ascii}} \def\doifassignmentelse#1% {\convertargument#1\to\ascii \doifinstringelse=\ascii} %D \macros %D {convertasciiafter} %D %D Sometimes we need to convert an argument to a string (letters %D only), for instance when we compare it with another string: %D %D \starttyping %D \convertasciiafter\doifinstringelse{em}{\ascii}{...} %D \stoptyping \def\convertasciiafter#1#2% {\convertargument#2\to\asciiafter \@EA#1\@EA{\asciiafter}} %D In \ETEX\ we can use \type {\detokenize} and gain some %D speed, but in general far less that 1\% for \type %D {\convertargument} and nil for \type {\convertcommand}. %D This macro is more robust than the pure \TEX\ one, %D something I found out when primitives like \type %D {\jobname} were fed (or something undefined). % command variant: one level expansion ! \beginETEX \detokenize \long\def\convertargument#1\to#2{\dodoglobal\edef#2{\detokenize{#1}}} \long\def\convertcommand #1\to#2{\dodoglobal\edef#2{\@EA\detokenize\@EA{#1}}} % hm, only second is also ok \long\def\defconvertedargument #1#2{\edef#1{\detokenize {#2}}} \long\def\defconvertedcommand #1#2{\edef#1{\detokenize\@EA{#2}}} \long\def\edefconvertedargument#1#2{\edef#1{#2}% \edef#1{\detokenize\@EA{#1}}} \long\def\gdefconvertedargument#1#2{\xdef#1{\detokenize {#2}}} \long\def\gdefconvertedcommand #1#2{\xdef#1{\detokenize\@EA{#2}}} \long\def\xdefconvertedargument#1#2{\xdef#1{#2}% \xdef#1{\detokenize\@EA{#1}}} \endETEX %D When you try to convert a primitive command, you'll find %D out that the \ETEX\ method fails on for instance \type %D {\jobname} in the sense that it returns the filename %D instead of just \type {\jobname}. So far this does not %D give real problems. %D This is typically a macro that one comes to after reading %D the \TEX book carefully. Even then, the definite solution %D was found after rereading the \TEX book. The first %D implementation was: %D %D \starttyping %D \def\doconvertargument#1->#2\\\\{#2} %D \stoptyping %D %D The \type{-}, the delimiter \type{\\\\} and the the second %D argument are completely redundant. %D \macros %D {showvalue,showargument} %D %D Two handy macros for testing purposes only: \def\showvalue#1% {\expandafter\show\csname#1\endcsname} \beginETEX \def\showvalue#1% {\ifcsname#1\endcsname \expandafter\show\csname#1\endcsname \else \show\undefined \fi} \endETEX \long\def\showargument#1% {\defconvertedargument\ascii{#1}\ascii} %D \macros %D {doifmeaningelse} %D %D We can use both commands in testing, but alas, not all %D meanings expand to something \type {->}. This is no problem %D in the \ETEX\ implementation, but since we want %D compatibility, we need: %D %D \starttyping %D \doifmeaningelse {\next} {\something} {true} {false} %D \stoptyping %D %D Watch the one level expansion of the second argument. \def\doifmeaningelse#1#2% {\edef\!!stringa{\meaning#1}% \def\!!stringb{#2}\edef\!!stringb{\meaning\!!stringb}% \ifx\!!stringa\!!stringb \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifsamestringselse,doifsamestring,doifnotsamestring} %D %D The next comparison macro converts the arguments into %D expanded strings. This command can be used to compare for %D instance \type {\jobname} with a name stored in a macro. \def\@@doifsamestringelse#1#2% {\edef\!!stringa{#1}% \edef\!!stringb{#2}% \convertcommand\!!stringa\to\!!stringa \convertcommand\!!stringb\to\!!stringb \ifx\!!stringa\!!stringb} \def\doifsamestringelse#1#2% {\@@doifsamestringelse{#1}{#2}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifsamestring#1#2% {\@@doifsamestringelse{#1}{#2}% \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \def\doifnotsamestring#1#2% {\@@doifsamestringelse{#1}{#2}% \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D \macros %D {ExpandFirstAfter,ExpandSecondAfter,ExpandBothAfter} %D %D These three commands support expansion of arguments before %D executing the commands that uses them. We can best %D illustrate this with an example. %D %D \starttyping %D \def\first {alfa,beta,gamma} %D \def\second {alfa,epsilon,zeta} %D %D \ExpandFirstAfter \doifcommon {\first} {alfa} {\message{OK}} %D \ExpandSecondAfter \doifcommon {alfa} {\second} {\message{OK}} %D \ExpandBothAfter \doifcommon {\first} {\second} {\message{OK}} %D %D \ExpandFirstAfter\processcommalist[\first]\message %D %D \ExpandAfter \doifcommon {\first} {alfa} {\message{OK}} %D \stoptyping %D %D The first three calls result in the threefold message %D \type{OK}, the fourth one shows the three elements of %D \type{\first}. The command \type{\ExpandFirstAfter} takes %D care of (first) arguments that are delimited by \type{[ ]}, %D but the faster \type{\ExpandAfter} does not. \def\simpleExpandFirstAfter#1% {\long\xdef\@@expanded{\noexpand\ExpandCommand{#1}}\@@expanded} \def\complexExpandFirstAfter[#1]% {\long\xdef\@@expanded{\noexpand\ExpandCommand[#1]}\@@expanded} \def\ExpandFirstAfter#1% {\let\ExpandCommand#1% \doifnextoptionalelse\complexExpandFirstAfter\simpleExpandFirstAfter} \def\ExpandSecondAfter#1#2#3% {\scratchtoks{#2}% \long\xdef\@@expanded{\noexpand#1{\the\scratchtoks}{#3}}\@@expanded} \def\ExpandBothAfter#1#2#3% {\long\xdef\@@expanded{\noexpand#1{#2}{#3}}\@@expanded} \def\ExpandAfter#1#2% {\long\xdef\@@expanded{\noexpand#1{#2}}\@@expanded} %D Now we can for instance define \type{\ifinstringelse} as: \def\ifinstringelse {\ExpandBothAfter\p!doifinstringelse} %D \macros %D {ConvertToConstant,ConvertConstantAfter} %D %D When comparing arguments with a constant, we can get into %D trouble when this argument consists of tricky expandable %D commands. One solution for this is converting the %D argument to a string of unexpandable characters. To make %D comparison possible, we have to convert the constant too %D %D \starttyping %D \ConvertToConstant\doifelse {...} {...} {then ...} {else ...} %D \stoptyping %D %D This construction is only needed when the first argument %D can give troubles. Misuse can slow down processing. %D %D \starttyping %D \ConvertToConstant\doifelse{\c!alfa} {\c!alfa}{...}{...} %D \ConvertToConstant\doifelse{alfa} {\c!alfa}{...}{...} %D \ConvertToConstant\doifelse{alfa} {alfa} {...}{...} %D \ConvertToConstant\doifelse{alfa \alfa test}{\c!alfa}{...}{...} %D \stoptyping %D %D In examples~2 and~3 both arguments equal, in~1 and~4 %D they differ. \beginTEX \long\def\ConvertToConstant#1#2#3% {\expandafter\defconvertedargument\expandafter\!!stringa\expandafter{#2}% \expandafter\defconvertedargument\expandafter\!!stringb\expandafter{#3}% #1{\!!stringa}{\!!stringb}} \endTEX \beginETEX \detokenize \long\def\ConvertToConstant#1#2#3% {\edef\!!stringa{\expandafter\detokenize\expandafter{#2}}% \edef\!!stringb{\expandafter\detokenize\expandafter{#3}}% #1{\!!stringa}{\!!stringb}} \endETEX %D When the argument \type{#1} consists of commands, we had %D better use %D %D \starttyping %D \ConvertConstantAfter\processaction[#1][...] %D \ConvertConstantAfter\doifelse{#1}{\v!something}{}{} %D \stoptyping %D %D This commands accepts things like: %D %D \starttyping %D \v!constant %D constant %D \hbox to \hsize{\rubish} %D \stoptyping %D %D As we will see in the core modules, this macro permits %D constructions like: %D %D \starttyping %D \setupfootertexts[...][...] %D \setupfootertexts[margin][...][...] %D \setupfootertexts[\v!margin][...][...] %D \stoptyping %D %D where \type{...} can be anything legally \TEX. \def\CheckConstantAfter#1#2% {\@EA\convertargument\v!prefix!\to\ascii \convertargument#1\to#2\relax \doifinstringelse\ascii{#2} {\expandafter\convertargument#1\to#2} {}} \def\ConvertConstantAfter#1#2#3% {\CheckConstantAfter{#2}\asciia \CheckConstantAfter{#3}\asciib #1{\asciia}{\asciib}} %D \macros %D {assignifempty} %D %D We can assign a default value to an empty macro using: %D %D \starttyping %D \assignifempty \macros {default value} %D \stoptyping %D %D We don't explicitly test if the macro is defined. \def\assignifempty#1#2% can be sped up {\doifsomething{#1}{\def#1{#2}}} % {\doifnot{#1}{}{\def#1{#2}}} %D \macros %D {gobbleuntil,grabuntil,gobbleuntilrelax, %D processbetween,processuntil} %D %D In \TEX\ gobbling usually stand for skipping arguments, so %D here are our gobbling macros. %D %D In \CONTEXT\ we use a lot of \type{\start}||\type{\stop} %D like constructions. Sometimes, the \type{\stop} is used as a %D hard coded delimiter like in: %D %D \starttyping %D \def\startcommand#1\stopcommand% %D {... #1 ...} %D \stoptyping %D %D In many cases the \type{\start}||\type{\stop} pair is %D defined at format generation time or during a job. This %D means that we cannot hardcode the \type{\stop} criterium. %D Only after completely understanding \type{\csname} and %D \type{\expandafter} I was able to to implement a solution, %D starting with: %D %D \starttyping %D \grabuntil{stop}\command %D \stoptyping %D %D This commands executes, after having encountered %D \type {\stop} the command \type {\command}. This command %D receives as argument the text preceding the \type {\stop}. %D This means that: %D %D \starttyping %D \def\starthello% %D {\grabuntil{stophello}\message} %D %D \starthello Hello world!\stophello %D \stoptyping %D %D results in: \type{\message{Hello world!}}. \def\dograbuntil#1#2% {\long\def\next##1#1{#2{##1}}\next} \def\grabuntil#1% {\expandafter\dograbuntil\expandafter{\csname#1\endcsname}} %D The next command build on this mechanism: %D %D \starttyping %D \processbetween{string}\command %D \stoptyping %D %D Here: %D %D \starttyping %D \processbetween{hello}\message %D \starthello Hello again!\stophello %D \stoptyping %D %D leads to: \type{\message{Hello again!}}. The command %D %D \starttyping %D \gobbleuntil{sequence} %D \stoptyping %D %D is related to these commands. This one simply throws away %D everything preceding \type{\command}. \long\def\processbetween#1#2% {\setvalue{\s!start#1}{\grabuntil{\s!stop#1}{#2}}} \def\gobbleuntil#1% {\long\def\next##1#1{}\next} \def\gobbleuntilrelax#1\relax {} %D The next one simply expands the pickup up tokens. %D %D \starttyping %D \processuntil{sequence} %D \stoptyping \def\processuntil#1% {\long\def\next##1#1{##1}\next} %D \macros %D {groupedcommand} %D %D Commands often manipulate argument as in: %D %D \starttyping %D \def\doezomaarwat#1{....#1....} %D \stoptyping %D %D A disadvantage of this approach is that the tokens that %D form \type{#1} are fixed the the moment the argument is read %D in. Normally this is no problem, but for instance verbatim %D environments adapt the \CATCODES\ of characters and therefore %D are not always happy with already fixed tokens. %D %D Another problem arises when the argument is grouped not by %D \type{{}} but by \type{\bgroup} and \type{\egroup}. Such an %D argument fails, because the \type{\bgroup} is een as the %D argument (which is quite normal). %D %D The next macro offers a solution for both unwanted %D situations: %D %D \starttyping %D \groupedcommand {before} {after} %D \stoptyping %D %D Which can be used like: %D %D \starttyping %D \def\cite% %D {\groupedcommand{\rightquote\rightquote}{\leftquote\leftquote}} %D \stoptyping %D %D This command is equivalent to, but more 'robust' than: %D %D \starttyping %D \def\cite#1% %D {\rightquote\rightquote#1\leftquote\leftquote} %D \stoptyping %D %D One should say that the next implementation would suffice: %D %D \starttyping %D \def\groupedcommand#1#2% %D {\def\BeforeGroup{#1\ignorespaces}% %D \def\AfterGroup{\unskip#2\egroup}% %D \bgroup\bgroup %D \aftergroup\AfterGroup %D \afterassignment\BeforeGroup %D \let\next=} %D \stoptyping %D %D It did indeed, but one day we decided to support the %D processing of boxes too: %D %D \starttyping %D \def\rightword% %D {\groupedcommand{\hfill\hbox}{\parfillskip\!!zeropoint}} %D %D .......... \rightword{the right way} %D \stoptyping %D %D Here \TEX\ typesets \type{\bf the right way} unbreakable %D at the end of the line. The solution mentioned before does %D not work here. %D %D \starttyping %D \long\unexpanded\def\groupedcommand#1#2% %D {\bgroup %D \long\def\BeforeGroup% %D {\bgroup#1\bgroup\aftergroup\AfterGroup}% %D \long\def\AfterGroup% %D {#2\egroup\egroup}% %D \afterassignment\BeforeGroup %D \let\next=} %D \stoptyping %D %D We used this method some time until the next alternative %D was needed. From now on we support both %D %D \starttyping %D to be \bold{bold} or not, that's the question %D \stoptyping %D %D and %D %D \starttyping %D to be {\bold bold} or not, that's the question %D \stoptyping %D %D This alternative checks for a \type{\bgroup} token first. %D The internal alternative does not accept the box handling %D mentioned before, but further nesting works all right. The %D extra \type{\bgroup}||\type{\egroup} is needed to keep %D \type{\AfterGroup} both into sight and local. \long\def\HandleGroup#1#2% {\bgroup \long\def\BeforeGroup{\bgroup#1\bgroup\aftergroup\AfterGroup}% \long\def\AfterGroup {#2\egroup\egroup}% \afterassignment\BeforeGroup \let\next=} \long\def\HandleSimpleGroup#1#2% no inner group (so no kerning interference) {\bgroup %long\def\BeforeGroup{\bgroup#1\aftergroup\AfterGroup}% interferes \long\def\BeforeGroup{\bgroup\aftergroup\AfterGroup#1}% \long\def\AfterGroup {#2\egroup}% \afterassignment\BeforeGroup \let\next=} \long\def\HandleNoGroup#1#2% {\long\def\AfterGroup{#2\egroup}% \bgroup\aftergroup\AfterGroup#1} %D These macros come together in: %D %D \starttyping %D \long\unexpanded\def\groupedcommand#1#2% %D {\def\dogroupedcommand% %D {\ifx\next\bgroup %D \let\next=\HandleGroup %D \else %D \let\next=\HandleNoGroup %D \fi %D \next{#1}{#2}}% %D \futurelet\next\dogroupedcommand} %D \stoptyping %D %D From the missing paragraph number one can deduce that the %D last macro is not the real one yet. I considered it a %D nuisance that %D %D \starttyping %D \color[green] %D {as grass} %D \stoptyping %D %D was not interpreted as one would expect. This is due to the %D fact that \type{\futurelet} obeys blank spaces, and a %D line||ending token is treated as a blank space. So the final %D implementation became: %\long\unexpanded\def\groupedcommand#1#2% % {\bgroup % \def\dogroupedcommand% % {\ifx\next\bgroup % \def\\{\egroup\HandleGroup{#1}{#2}}% % \else\ifx\next\blankspace % \def\\ {\egroup\groupedcommand{#1}{#2}}% % \else % \def\\{\egroup\HandleNoGroup{#1}{#2}}% % \fi\fi % \\}% % \futurelet\next\dogroupedcommand} % % compatible ? \long\unexpanded\def\groupedcommand#1#2% {\doifnextbgroupelse{\HandleGroup{#1}{#2}}{\HandleNoGroup{#1}{#2}}} \long\unexpanded\def\simplegroupedcommand#1#2% {\doifnextbgroupelse{\HandleSimpleGroup{#1}{#2}}{\HandleNoGroup{#1}{#2}}} %D Users should be aware of the fact that grouping can %D interfere with ones paragraph settings that are executed %D after the paragraph is closed. One should therefore %D explictly close the paragraph with \type{\par}, else the %D settings will be forgotten and not applied. So it's: %D %D \starttyping %D \def\BoldRaggedCenter% %D {\groupedcommand{\raggedcenter\bf}{\par}} %D \stoptyping %D \macros %D {checkdefined} %D %D The bigger the system, the greater the change that %D user defined commands collide with those that are part of %D the system. The next macro gives a warning when a command is %D already defined. We considered blocking the definition, but %D this is not always what we want. %D %D \starttyping %D \checkdefined {category} {class} {command} %D \stoptyping %D %D The user is warned with the suggestion to use %D \type{CAPITALS}. This suggestion is feasible, because %D \CONTEXT only defines lowcased macros. \def\showdefinederror#1#2% {\writestatus\m!systems{#1 #2 replaces a macro, use CAPITALS!}} \def\checkdefined#1#2#3% {\doifdefined{#3}{\showdefinederror{#2}{#3}}} %D \macros %D {GotoPar,GetPar} %D %D Typesetting a paragraph in a special way can be done by %D first grabbing the contents of the paragraph and processing %D this contents grouped. The next macro for instance typesets %D a paragraph in boldface. %D %D \starttyping %D \def\remark#1\par% %D {\bgroup\bf#1\egroup} %D \stoptyping %D %D This macro has to be called like %D %D \starttyping %D \remark some text ... ending with \par %D \stoptyping %D %D Instead of \type{\par} we can of course use an empty line. %D When we started typesetting with \TEX, we already had %D produced lots of text in plain \ASCII. In producing such %D simple formatted texts, we adopted an open layout, and when %D switching to \TEX, we continued this open habit. Although %D \TEX\ permits a cramped and badly formatted source, it adds %D to confusion and sometimes introduces errors. So we prefer: %D %D \starttyping %D \remark %D %D some text ... ending with an empty line %D \stoptyping %D %D We are going to implement a mechanism that allows such open %D specifications. The definition of the macro handling %D \type{\remark} becomes: %D %D \starttyping %D \def\remark% %D {\BeforePar{\bgroup\bf}% %D \AfterPar{\egroup}% %D \GetPar} %D \stoptyping %D %D A macro like \type{\GetPar} can be defined in several %D ways. The recent version, the fourth one in a row, %D originally was far more complicated, but some functionality %D has been moved to other macros. %D %D We start with the more simple but in some cases more %D appropriate alternative is \type{\GotoPar}. This one leaves %D \type{\par} unchanged and is therefore more robust. On the %D other hand, \type{\AfterPar} is not supported. \newtoks\BeforePar \newtoks\AfterPar \let\endoflinetoken=^^M %D The original definition was: %D %D \starttyping %D \def\doGotoPar %D {\ifx\nextchar\blankspace %D \@EA\GotoPar %D \else\ifx\nextchar\endoflinetoken %D \@EAEAEA\GotoPar %D \else %D \@EAEAEA\dodoGotoPar %D \fi\fi} %D %D \def\dodoGotoPar %D {\the\BeforePar %D \BeforePar\emptytoks %D \nextchar} %D %D \def\GotoPar %D {\afterassignment\doGotoPar\let\nextchar=} %D \stoptyping %D Its big brother \type{\GetPar} redefines the \type{\par} %D primitive, which can lead to unexpected results, depending %D in the context. %D %D \starttyping %D \def\GetPar %D {\expanded %D {\BeforePar %D {\the\BeforePar %D \BeforePar\emptytoks %D \bgroup %D \def\par %D {\egroup %D \par %D \the\AfterPar %D \BeforePar\emptytoks %D \AfterPar\emptytoks}}}% %D \GotoPar} %D \stoptyping %D However, we can implement a better alternative by using: %D %D \starttyping %D \def\dowithpar#1#2% %D {\def\handlepar##1\par{#1##1#2}% %D \def\gobblepar\par{\dowithpar{#1}{#2}}% %D \doifnextcharelse\par\gobblepar\handlepar} %D \stoptyping %D %D Or, nicer \def\redowithpar\par {\doifnextcharelse\par\redowithpar\dodowithpar}% \def\dowithpar#1#2% {\def\dodowithpar##1\par{#1##1#2}% \redowithpar\par} \def\redogotopar\par {\doifnextcharelse\par\redogotopar\dodogotopar}% \def\dogotopar#1% {\def\dodogotopar{#1}% \redogotopar\par} %D The previosuly defined macros now become: \def\GetPar {\expanded {\dowithpar {\the\BeforePar \BeforePar\emptytoks} {\the\AfterPar \BeforePar\emptytoks \AfterPar\emptytoks}}} \def\GotoPar {\expanded {\dogotopar {\the\BeforePar \BeforePar\emptytoks}}} %D \macros %D {dowithpargument,dowithwargument} %D %D The next macros are a variation on \type{\GetPar}. When %D macros expect an argument, it interprets a grouped sequence %D of characters a one token. While this adds to robustness and %D less ambiguous situations, we sometimes want to be a bit %D more flexible, or at least want to be a bit more tolerant %D to user input. %D %D We start with a commands that acts on paragraphs. This %D command is called as: %D %D \starttyping %D \dowithpargument\command %D \dowithpargument{\command ... } %D \stoptyping %D %D In \CONTEXT\ we use this one to read in the titles of %D chapters, sections etc. The commands responsible for these %D activities accept several alternative ways of argument %D passing. In these examples, the \type{\par} can be omitted %D when an empty line is present. %D %D \starttyping %D \command{...} %D \command ... \par %D \command %D {...} %D \command %D ... \par %D \stoptyping %D %D We show two implementations, of which for the moment the %D we prefier to use the second one: %D %D \starttyping %D \def\dowithpargument#1% %D {\def\dodowithpargument% %D {\ifx\next\bgroup %D \def\next{#1}% %D \else %D \def\next####1 \par{#1{####1}}% %D \fi %D \next}% %D \futurelet\next\dodowithpargument} %D \stoptyping %D %D A second and better implementation was: %D %D \starttyping %D \def\dowithpargument#1% %D {\def\nextpar##1 \par{#1{##1}}% %D \def\nextarg##1{#1{##1}}% %D \doifnextcharelse\bgroup %D {\nextarg} %D {\nextpar}} %D \stoptyping %D %D We ended up with an alternative that also accepts en empty %D argument. This command permits for instance chapters to %D have no title. %\def\dowithpargument#1% % {\def\nextpar##1 \par{#1{##1}}% % \def\nextarg##1{#1{##1}}% % \doifnextcharelse\bgroup % {\nextarg} % {\doifnextcharelse{\par} % {#1{}} % {\nextpar}}} \def\dowithpargument#1% {\def\nextpar##1 \par{#1{##1}}% \def\nextarg##1{#1{##1}}% \doifnextbgroupelse\nextarg{\doifnextcharelse\par{#1{}}\nextpar}} %D The \type{p} in the previous command stands for paragraph. %D When we want to act upon words we can use the \type{w} %D alternative. %D %D \starttyping %D \dowithwargument\command %D \dowithwargument{... \command ...} %D \stoptyping %D %D The main difference bwteen two alternatives is in the %D handling of \type{\par}'s. This time the space token acts %D as a delimiter. %D %D \starttyping %D \command{...} %D \command ... %D \command %D {...} %D \command %D ... %D \stoptyping %D %D Again there are two implementations possible: %D %D \starttyping %D \def\dowithwargument#1% %D {\def\dodowithwargument% %D {\ifx\next\bgroup %D \def\next{#1}% %D \else %D \def\next####1 {#1{####1}}% %D \fi %D \next}% %D \futurelet\next\dodowithwargument} %D \stoptyping %D %D We've chosen: %\def\dowithwargument#1% % {\def\nextwar##1 {#1{##1}}% % \def\nextarg##1{#1{##1}}% % \doifnextcharelse\bgroup % {\nextarg} % {\nextwar}} \def\dowithwargument#1% {\def\nextwar##1 {#1{##1}}% \def\nextarg##1{#1{##1}}% \doifnextbgroupelse\nextarg\nextwar} %D \macros %D {dorepeat,dorepeatwithcommand} %D %D When doing repetitive tasks, we stromgly advice to use %D \type{\dorecurse}. The next alternative however, suits %D better some of the \CONTEXT\ interface commands. %D %D \starttyping %D \dorepeat[n*\command] %D \stoptyping %D %D The value of the used \COUNTER\ can be called within %D \type{\command} by \type{\repeater}. %D %D A slightly different alternative is: %D %D \starttyping %D \dorepeatwithcommand[n*{...}]\command %D \stoptyping %D %D When we call for something like: %D %D \starttyping %D \dorepeatwithcommand[3*{Hello}]\message %D \stoptyping %D %D we get ourselves three \type{\message{Hello}} messages in %D a row. In both commands, the \type{n*} is optional. When this %D specification is missing, the command executes once. % this one is obsolete: \def\dorepeat[#1]% {\dodorepeat#1*\empty*\relax} \long\def\dodorepeat#1*#2#3*#4\relax {\ifx#2\empty#1\else\dorecurse{#1}{#2#3}\fi} \def\repeater {\recurselevel} % this one will be kept \def\dorepeatwithcommand[#1]% {\dodorepeatwithcommand#1*\empty*\relax} % \long\def\dodorepeatwithcommand#1*#2#3*#4\relax#5% % {\ifx#2\empty % #5{#1}% % \else % \dorecurse{#1}{#5{#2#3}}% % \fi} % % more complex but better: % \long\def\dodorepeatwithcommand#1*#2#3*#4\relax#5% % {\ifx#2\empty % #5{#1}% % \else\ifnum#1<\zerocount % % a la etex % % \dorecurse{-\numexpr(#1)}{#5{-#2#3}}% % % indirect % %\innerrecurse#1% % %\expanded{\dorecurse{\number-\innerrecurse}}{#5{-#2#3}}% % % safer: % \bgroup\scratchcounter#1% % \expanded{\egroup\noexpand\dorecurse{\number-\scratchcounter}}{#5{-#2#3}}% % \else\ifx#2+% % \dorecurse{#1}{#5{#3}}% % \else % \dorecurse{#1}{#5{#2#3}}% % \fi\fi\fi} \def\dorepeatwithcommand[#1]% {\dodorepeatwithcommand#1*\empty*\relax} \long\def\dodorepeatwithcommand#1*#2#3*#4\relax#5% {\ifx#2\empty\redorepeatwithcommand[#1]#5\else\dododorepeatwithcommand{#1}{#2}{#3}#5\fi} \long\def\dododorepeatwithcommand#1#2#3#4% {\ifx#2\empty % redundant but gives cleaner extensions #4{#1}% \else\ifnum#1<\zerocount \bgroup\scratchcounter#1% \expanded{\egroup\noexpand\dorecurse{\number-\scratchcounter}}{#4{-#2#3}}% \else\ifx#2+% \dorecurse{#1}{#4{#3}}% \else \dorecurse{#1}{#4{#2#3}}% \fi\fi\fi} \def\redorepeatwithcommand[#1]#2% {#2{#1}} %D The extension hook permits something like: %D %D \starttyping %D \bgroup %D %D \catcode`\*=\@@superscript %D %D \gdef\redorepeatwithcommand[#1]% %D {\redodorepeatwithcommand#1*\empty*\relax} %D %D \long\gdef\redodorepeatwithcommand#1*#2#3*#4\relax#5% %D {\dododorepeatwithcommand{#1}{#2}{#3}#5} %D %D \egroup %D \stoptyping %D %D although one may wonder if changing the catcode of \type {*} is wise. %D \macros %D {normalbgroup,normalgroup} %D %D No comment. \let\normalbgroup\bgroup \let\normalegroup\egroup %D \macros %D {doifstringinstringelse} %D %D The next macro is meant for situations where both strings %D are macros. This save some unneeded expansion. %D %D \starttyping %D \long\def\doifstringinstringelse#1#2% %D {\p!doifinstringelse#1#2% %D \@EA\firstoftwoarguments %D \else %D \@EA\secondoftwoarguments %D \fi} %D \stoptyping %D %D A bit faster is: \def\pp!doifstringinstringelse#1% {\if#1@% \@EA\secondoftwoarguments \else \@EA\firstoftwoarguments \fi} \long\def\doifstringinstringelse#1#2% {\long\@EA\def\@EA\p!doifstringinstringelse\@EA##\@EA1#1##2##3\war {\pp!doifstringinstringelse##2}% \@EA\@EA\@EA\p!doifstringinstringelse\@EA#2#1@@\war} %D \macros %D {appendtoks,prependtoks,appendtoksonce,prependtoksonce, %D doifintokselse,flushtoks,dotoks} %D %D We use \TOKENLISTS\ sparsely within \CONTEXT, because the %D comma separated lists are more suitable for the user %D interface. Nevertheless we have: %D %D \starttyping %D (\doglobal) \appendtoks ... \to\tokenlist %D (\doglobal) \prependtoks ... \to\tokenlist %D (\doglobal) \flushtoks\tokenlist %D \dotoks\tokenlist %D \stoptyping %D %D Er worden eerst enkele klad||registers gedefinieerd. These %D macros are clones of the ones implemented in page~378 of %D Knuth's \TeX book. %D %D A simple implementation, one that does not handle braces %D at the outer level, is: %D %D \starttyping %D \def\appendtoks#1\to#2% %D {\scratchtoks={#1}% %D \expanded{\dodoglobal\noexpand#2{\the#2\the\scratchtoks}}} %D %D \def\prependtoks#1\to#2% %D {\scratchtoks={#1}% %D \expanded{\dodoglobal\noexpand#2{\the\scratchtoks\the#2}}} %D \stoptyping %D %D But here we prefer: \newtoks\@@scratchtoks % before we had the once only alternatives, we had: % % \def\appendtoks {\doappendtoks \relax} % \def\prependtoks{\doprependtoks\relax} % % \long\def\doappendtoks#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \expanded{\dodoglobal\noexpand#2{\the#2\the\@@scratchtoks}}} % % \long\def\doprependtoks#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \expanded{\dodoglobal\noexpand#2{\the\@@scratchtoks\the#2}}} \def\appendtoks {\doappendtoks \relax} \def\prependtoks {\doprependtoks \relax} \def\appendtoksonce {\doappendtoksonce \relax} \def\prependtoksonce{\doprependtoksonce\relax} % \def\dodoappendtoks#1% % {\expanded{\dodoglobal\noexpand#1{\the#1\the\@@scratchtoks}}} % % \def\dodoprependtoks#1% % {\expanded{\dodoglobal\noexpand#1{\the\@@scratchtoks\the#1}}} % % \long\def\doappendtoks#1\to% % {\@@scratchtoks\@EA{\gobbleoneargument#1}\dodoappendtoks} % % \long\def\doprependtoks#1\to% % {\@@scratchtoks\@EA{\gobbleoneargument#1}\dodoprependtoks} % % \long\def\doappendtoksonce#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \doifintokselse\@@scratchtoks{#2}{}{\dodoappendtoks{#2}}} % % \long\def\doprependtoksonce#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \doifintokselse\@@scratchtoks{#2}{}{\dodoprependtoks{#2}}} % % A slightly (but in the case of large arguments % significantly) faster alternative is given below: \newtoks\@@toks \def\dodoappendtoks {\dodoglobal\@@toks\@EAEAEA{\@EA\the\@EA\@@toks\the\@@scratchtoks}} \def\dodoprependtoks {\dodoglobal\@@toks\@EAEAEA{\@EA\the\@EA\@@scratchtoks\the\@@toks}} \long\def\doappendtoks#1\to#2% {\def\@@toks{#2}% \@@scratchtoks\@EA{\gobbleoneargument#1}\dodoappendtoks} \long\def\doprependtoks#1\to#2% {\def\@@toks{#2}% \@@scratchtoks\@EA{\gobbleoneargument#1}\dodoprependtoks} \long\def\doappendtoksonce#1\to#2% {\def\@@toks{#2}% \@@scratchtoks\@EA{\gobbleoneargument#1}% \doifintokselse\@@scratchtoks\@@toks\donothing\dodoappendtoks} \long\def\doprependtoksonce#1\to#2% {\def\@@toks{#2}% \@@scratchtoks\@EA{\gobbleoneargument#1}% \doifintokselse\@@scratchtoks\@@toks\donothing\dodoprependtoks} %D The test macro: %D %D \starttyping %D \def\doifintokselse#1#2% #1 en #2 zijn toks %D {\edef\!!stringa{\the#1}\convertcommand\!!stringa\to\asciia %D \edef\!!stringb{\the#2}\convertcommand\!!stringb\to\asciib %D \doifinstringelse\asciia\asciib} %D \stoptyping %D %D Better: %D %D \starttyping %D \def\doifintokselse#1#2% #1 en #2 zijn toks %D {\edef\!!stringa{\the#1}\convertcommand\!!stringa\to\asciia %D \edef\!!stringb{\the#2}\convertcommand\!!stringb\to\asciib %D \doifstringinstringelse\asciia\asciib} %D \stoptyping %D %D Even better: \beginETEX \def\doifintokselse#1#2% #1 en #2 zijn toks {\@EA\convertargument\the#1\to\asciia \@EA\convertargument\the#2\to\asciib \doifstringinstringelse\asciia\asciib} \endETEX \beginTEX \def\doifintokselse#1#2% #1 en #2 zijn toks {\edef\asciia{\the#1}\convertcommand\asciia\to\asciia \edef\asciib{\the#2}\convertcommand\asciib\to\asciib \doifstringinstringelse\asciia\asciib} \endTEX %D Also: \def\appendetoks #1\to{\expanded{\appendtoks #1}\to} \def\prependetoks#1\to{\expanded{\prependtoks#1}\to} %D Hm. \def\flushtoks#1% nb: can reassing to #1 again, hence the indirectness {\@@scratchtoks#1\relax \dodoglobal#1\emptytoks \the\@@scratchtoks\relax} \let\dotoks\the %D \macros %D {makecounter,pluscounter,minuscounter, %D resetcounter,setcounter,countervalue} %D %D Declaring, setting and resetting \COUNTERS\ can be doen %D with the next set of commands. %D %D \starttyping %D \makecounter {name} %D \pluscounter {name} %D \minuscounter {name} %D \resetcounter {name} %D \setcounter {name} {value} %D \countervalue {name} %D \stoptyping %D %D We prefer the use of global counters. This means that we %D have to load \PLAIN\ \TEX\ in a bit different way: %D %D \starttyping %D \let\oldouter=\outer %D \let\outer=\relax %D \input plain.tex %D \let\outer=\oldouter %D %D \def\newcount% %D {\alloc@0\count\countdef\insc@unt} %D \stoptyping %D %D First we show a solution in which we use real \COUNTERS. %D Apart from some expansion, nothing special is done. %D %D \starttyping %D \def\makecounter#1% %D {\expandafter\newcount\csname#1\endcsname} %D %D \def\pluscounter#1% %D {\global\advance\csname#1\endcsname by 1 } %D %D \def\minuscounter#1% %D {\global\advance\csname#1\endcsname by -1 } %D %D \def\resetcounter#1% %D {\expandafter\global\csname#1\endcsname=0 } %D %D \def\setcounter#1#2% %D {\expandafter\global\csname#1\endcsname=#2 } %D %D \def\countervalue#1% %D {\the\getvalue{#1}} %D \stoptyping %D %D Because these macros are already an indirect way of working %D with counters, there is no harm in using pseudo \COUNTERS\ %D here: \def\makecounter#1% {\letgvalue{#1}\zerocountervalue} % see earlier % \def\countervalue#1% % {\getvalue{#1}} \let\countervalue\getvalue \def\pluscounter#1% {\scratchcounter\getvalue{#1}% \advance\scratchcounter \plusone \setxvalue{#1}{\the\scratchcounter}} \def\minuscounter#1% {\scratchcounter\getvalue{#1}% \advance\scratchcounter \minusone \setxvalue{#1}{\the\scratchcounter}} \def\resetcounter#1% {\letgvalue{#1}\zerocountervalue} \def\setcounter#1#2% or: \setxvalue{#1}{\number#2} {\scratchcounter#2% \setxvalue{#1}{\the\scratchcounter}} \def\incrementcounter#1#2% #1 name #2 value {\setxvalue{#1}{\the\numexpr\csname#1\endcsname+#2\relax}} \def\decrementcounter#1#2% #1 name #2 value {\setxvalue{#1}{\the\numexpr\csname#1\endcsname-#2\relax}} %D \macros %D {savecounter,restorecounter} %D %D These two commands can be used to save and restore counter %D values. Only one level is saved. \def\savecounter#1% {{\scratchcounter\getvalue {#1}\setxvalue{!#1}{\the\scratchcounter}}} \def\restorecounter#1% {{\scratchcounter\getvalue{!#1}\setxvalue {#1}{\the\scratchcounter}}} % == {\setxvalue{#1}{\getvalue{!#1}}} %D The next \ETEX\ based solution is some 15\% faster, which %D goes unnoticed in any normal run, simply because these %D macros are not used milions of times. \beginETEX \numexpr \def\makecounter#1% {\global\@EA\let\csname#1\endcsname\zerocountervalue} % see earlier \def\countervalue#1% {\ifcsname#1\endcsname\csname#1\endcsname\fi} \def\pluscounter#1% {\@EA\xdef\csname#1\endcsname{\the\numexpr\csname#1\endcsname+\plusone\relax}} \def\minuscounter#1% {\@EA\xdef\csname#1\endcsname{\the\numexpr\csname#1\endcsname-\plusone\relax}} \def\resetcounter#1% {\global\@EA\let\csname#1\endcsname\zerocountervalue} \def\setcounter#1#2% {\@EA\xdef\csname#1\endcsname{\the\numexpr#2\relax}} \def\savecounter#1% {\@EA\xdef\csname !#1\endcsname{\the\numexpr\csname#1\endcsname\relax}} \def\restorecounter#1% {\@EA\xdef\csname#1\endcsname{\the\numexpr\csname !#1\endcsname\relax}} \endETEX %D \macros %D {beforesplitstring,aftersplitstring} %D %D These both commands split a string at a given point in two %D parts, so \type{x.y} becomes \type{x} or \type{y}. %D %D \starttyping %D \beforesplitstring test.tex\at.\to\filename %D \aftersplitstring test.tex\at.\to\extension %D \stoptyping %D %D The first routine looks (and is indeed) a bit simpler than %D the second one. The alternative looking more or less like %D the first one did not always give the results we needed. %D Both implementations show some insight in the manipulation %D of arguments. \def\beforesplitstring#1\at#2\to#3% {\def\dosplitstring##1#2##2#2##3\\% {\def#3{##1}}% \@EA\dosplitstring#1#2#2\\} \def\aftersplitstring#1\at#2\to#3% {\def\dosplitstring##1#2##2@@@##3\\% {\def#3{##2}}% \@EA\dosplitstring#1@@@#2@@@\\} %D \macros %D {splitstring,greedysplitstring} %D %D A bonus macro. \def\splitstring#1\at#2\to#3\and#4% {\def\dosplitstring##1#2##2\empty\empty\empty##3\\% {\def#3{##1}% \def\dosplitstring{##3}% \ifx\dosplitstring\empty \let#4\empty \else \def#4{##2}% \fi}% \@EA\dosplitstring#1\empty\empty\empty#2\empty\empty\empty\\} % Ok, but not for all cases: % % \def\greedysplitstring#1\at#2\to#3\and#4% % {\edef\asciib{#1}% % \let\asciic\asciib % \let#3\empty % \let#4\empty % \doloop % {\expandafter\splitstring\asciib\at#2\to\asciia\and\asciib % \ifx\asciib\empty % \exitloop % \else % \edef#3{\ifx#3\empty\else#3#2\fi\asciia}% % \let#4\asciib % \fi}% % \ifx#3\empty\let#3\asciic\fi} % % The next one is some 25\% faster, but it hardly matters because % we seldom use this macro. % % \def\greedysplitstring#1\at#2\to#3\and#4% % {\edef\asciib{#1}% % \let\asciic\asciib % \let#3\empty % \let#4\empty % \def\dogreedysplitstring % {\expandafter\splitstring\asciib\at#2\to\asciia\and\asciib % \ifx\asciib\empty % \expandafter\dogreedysplitstring % \else % \edef#3{\ifx#3\empty\else#3#2\fi\asciia}% % \let#4\asciib % \fi}% % \dogreedysplitstring % \ifx#3\empty\let#3\asciic\fi} % % The better alternative: \def\greedysplitstring#1\at#2\to#3\and#4% {\edef\asciib{#1}% \let\asciic\asciib \let#3\empty \let#4\empty \doloop {\expandafter\splitstring\asciib\at#2\to\asciia\and\asciib \ifx\asciib\empty \exitloop \else % not \edef#3{\ifx#3\empty\else#3#2\fi\asciia} else % /root/path fails because then #3==empty \edef#3{\ifcase\recurselevel\or\else#3#2\fi\asciia}% \let#4\asciib \fi}% \ifx#3\empty\let#3\asciic\fi} %D \macros %D {beforetestandsplitstring, %D aftertestandsplitstring, %D testandsplitstring} %D %D The next alternatives are for Simon Pepping. This time %D the result is empty when no split is done. % \def\beforetestandsplitstring#1\at#2\to#3% % {\def\dosplitstring##1#2##2#2##3\\{\doifelsenothing % {##3}{\let#3\empty}{\def#3{##1}}}% % \@EA\dosplitstring#1#2#2\\} % % \def\aftertestandsplitstring#1\at#2\to#3% % {\def\dosplitstring ##1#2##2@@@##3\\{\doifelsenothing % {##3}{\let#3\empty}{\def#3{##2}}}% % \@EA\dosplitstring #1@@@#2@@@\\} % % \def\testandsplitstring#1\at#2\to#3\and#4% % {\def\dosplitstring##1#2##2#2##3\\{\doifelsenothing % {##3}{\let#3\empty\let#4\empty}{\def#3{##1}\def#4{##2}}}% % \@EA\dosplitstring#1#2#2\\} % % faster: \def\beforetestandsplitstring#1\at#2\to#3% {\def\dosplitstring##1#2##2#2##3##4\\% {\ifx##3\empty\let#3\empty\else\def#3{##1}\fi}% \@EA\dosplitstring#1#2#2\empty\\} \def\aftertestandsplitstring#1\at#2\to#3% {\def\dosplitstring ##1#2##2@@@##3##4\\% {\ifx##3\empty\let#3\empty\else\def#3{##2}\fi}% \@EA\dosplitstring #1@@@#2@@@\empty\\} \def\testandsplitstring#1\at#2\to#3\and#4% {\def\dosplitstring##1#2##2#2##3##4\\% {\ifx##3\empty\let#3\empty\let#4\empty\else\def#3{##1}\def#4{##2}\fi}% \@EA\dosplitstring#1#2#2\empty\\} %D \macros %D {removesubstring} %D %D A first application of the two routines defined above is: %D %D \starttyping %D \removesubstring-\from first-last\to\nothyphenated %D \stoptyping %D %D Which in terms of \TEX\ looks like: %\def\removesubstring#1\from#2\to#3% % {\doifinstringelse{#1}{#2} % {\beforesplitstring#2\at#1\to\!!stringa % \aftersplitstring #2\at#1\to\!!stringb % \edef#3{\!!stringa\!!stringb}% % \removesubstring#1\from#3\to#3} % {}} \def\removesubstring#1\from#2\to#3% {\splitstring#2\to\!!stringa\and\!!stringb \dodoglobal#3{\!!stringa\!!stringb}} %D \macros %D {appendtocommalist,prependtocommalist, %D addtocommalist,removefromcommalist} %D %D When working with comma separated lists, one sooner or %D later want the tools to append or remove items from such a %D list. When we add an item, we first check if it's already %D there. This means that every item in the list is unique. %D %D \starttyping %D \addtocommalist {alfa} \name %D \addtocommalist {beta} \name %D \addtocommalist {gamma} \name %D \removefromcommalist {beta} \name %D \stoptyping %D %D These commands can be prefixed with \type{\doglobal}. The %D implementation of the second command is more complecated, %D because we have to take leading spaces into account. Keep in %D mind that users may provide lists with spaces after the %D commas. When one item is left, we also have to get rid of %D trailing spaces. %D %D \starttyping %D \def\words{alfa, beta, gamma, delta} %D \def\words{alfa,beta,gamma,delta} %D \stoptyping %D %D Removing an item takes more time than adding one. %D %D A fast appending alternative, without any testing, is %D also provided: %D %D \starttyping %D \appendtocommalist {something} \name %D \prependtocommalist {something} \name %D \stoptyping %D %D This can be implemented as follows: %D %D \starttyping %D \def\appendtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% %D \else % no test on empty %D \dodoglobal\edef#2{#2,#1}% %D \fi} %D %D \def\prependtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% %D \else % no test on empty %D \dodoglobal\edef#2{#1,#2}% %D \fi} %D \stoptyping %D %D The faster alternatives are: \def\appendtocommalist#1#2% {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}} \def\prependtocommalist#1#2% {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}} %D The old ones are: %D %D \starttyping %D \def\addtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% %D \else %D \edef\!!stringa{#2,,}% %D \beforesplitstring#2\at,,\to#2\relax %D \ExpandBothAfter\doifinsetelse{#1}{#2} %D {\resetglobal} %D {\dodoglobal\edef#2{#2,#1}}% %D \fi} %D %D \def\pretocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% %D \else %D \edef\!!stringa{#2,,}% %D \beforesplitstring#2\at,,\to#2\relax %D \ExpandBothAfter\doifinsetelse{#1}{#2} %D {\resetglobal} %D {\dodoglobal\edef#2{#1,#2}}% %D \fi} %D %D \def\doremovefromcommalist#1#2#3% nog \doglobal %D {\edef\!!stringa{,,#3,,}% %D \beforesplitstring\!!stringa\at,#1#2,\to\!!stringb %D \aftersplitstring\!!stringa\at,#1#2,\to\!!stringc %D \edef#3{\!!stringb,\!!stringc}% %D \aftersplitstring#3\at,,\to#3\relax %D \beforesplitstring#3\at,,\to#3} %D %D \def\removefromcommalist#1#2% %D {\doremovefromcommalist{ }{#1}{#2}% %D \doremovefromcommalist{}{#1}{#2}% %D \dofrontstrip#2% %D \dodoglobal\edef#2{#2}} %D \stoptyping %D %D Significantly faster (especially for longer lists): \def\addtocommalist#1#2% {item} \cs {\rawdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}}} \def\pretocommalist#1#2% {item} \cs {\rawdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}}} \def\robustdoifinsetelse#1#2% {\expanded{\convertargument#1}\to\!!stringa \expanded{\convertargument#2}\to\!!stringb \rawdoifinsetelse\!!stringa\!!stringb} \def\robustaddtocommalist#1#2% {item} \cs {\robustdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}}} \def\robustpretocommalist#1#2% {item} \cs {\robustdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}}} \def\xsplitstring#1#2% \cs {str} {\def\dosplitstring##1,#2,##2,#2,##3\\% {\edef\!!stringa{\bcleanedupcommalist##1\empty\empty\relax}% \edef\!!stringb{\acleanedupcommalist##2,,\relax}}% \@EA\dosplitstring\@EA,#1,,#2,,#2,\\} \def\bcleanedupcommalist#1#2#3\relax{\if#1,\else#1\fi\if#2,\else#2\fi#3} \def\bcleanedupcommalist#1#2\relax{\if#1,\else#1\fi#2} \def\acleanedupcommalist#1,,#2\relax{#1} % \def\removefromcommalist#1#2% % {\expanded{\xsplitstring\noexpand#2{#1}}% % \dodoglobal\edef#2% % {\ifx\!!stringa\empty % \!!stringb % \else % \@EA\acleanedupcommalist\!!stringa,,\relax % \ifx\!!stringb\empty\else,\!!stringb\fi % \fi}} \def\removefromcommalist#1#2% {\rawdoifinsetelse{#1}#2% {\expanded{\xsplitstring\noexpand#2{#1}}% \dodoglobal\edef#2% {\ifx\!!stringa\empty \!!stringb \else \!!stringa\ifx\!!stringb\empty\else,\!!stringb\fi \fi}} \resetglobal} %D \macros %D {substituteincommalist} %D %D Slow but seldom used, so for the moment we stick to this %D implementation. %D %D \starttyping %D \substituteincommalist{old}{new}{list} %D \stoptyping \def\substituteincommalist#1#2#3% old, new, list (slooow) {\edef\!!stringb{#1}% \edef\!!stringd{#2}% \let\!!stringa#3% \let#3\empty \def\dosubstituteincommalist##1% {\edef\!!stringc{##1}% \ifx\!!stringb\!!stringc \ifx\!!stringd\empty\else \edef#3{#3\ifx#3\empty\else,\fi\!!stringd}% \fi \def\docommand####1{\edef#3{#3,####1}}% \else \edef#3{#3\ifx#3\empty\else,\fi##1}% \fi}% \@EA\rawprocesscommacommand\@EA[\!!stringa]\dosubstituteincommalist} %D A not so useful macro: \def\dodofrontstrip[#1#2]#3% {\ifx#1\space \def#3{#2}% \else \def#3{#1#2}% \fi} \def\dofrontstrip#1% {\edef\!!stringa{#1}% \ifx\!!stringa\empty \else \@EA\dodofrontstrip\@EA[#1]#1% \fi} %D \macros %D {replaceincommalist} %D %D The next macro can be used to replace an indexed element %D in a commalist: %D %D \starttyping %D \replaceincommalist\MyList{2} %D \stoptyping %D %D Element~2 will be replaced by the current meaning of the macro %D \type {\newcommalistelement}. The old meaning is saved in %D \type {\commalistelement}. The replacement honors grouped items, %D like in: %D %D \starttyping %D \def\MyList{a,b,c,d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,b,c,d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,{b,c},d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,b,c,{d,e,f}} \replaceincommalist\MyList{3} %D \stoptyping \let\newcommalistelement\empty \def\replaceincommalist#1#2% #1 = commalistelement #2 = position starts at 1 {\def\doreplaceincommalist##1% {\ifnum\commalistcounter=#2\relax \ifx\newcommalistelement\empty\else \ifx\newcommalist\empty \let\newcommalist\newcommalistelement \else \@EA\@EA\@EA\def\@EA\@EA\@EA\newcommalist\@EA\@EA\@EA {\@EA\newcommalist\@EA,\newcommalistelement}% \fi \fi \def\commalistelement{##1}% \else \ifx\newcommalist\empty \ifx\nexttoken\bgroup % is known -) \def\newcommalist{{##1}}% \else \def\newcommalist{##1}% \fi \else \ifx\nexttoken\bgroup % is known -) \@EA\def\@EA\newcommalist\@EA{\newcommalist,{##1}}% \else \@EA\def\@EA\newcommalist\@EA{\newcommalist,##1}% \fi \fi \fi \advance\commalistcounter\plusone}% \let\commalistelement\empty \let\newcommalist\empty \commalistcounter\plusone \@EA\processcommalist\@EA[#1]\doreplaceincommalist \dodoglobal\let#1\newcommalist} %D \macros %D {globalprocesscommalist} %D %D The commalist processing commands are characterized by the %D fact that the way they handle expansion as well as the fact %D that they can be nested. This makes them kind of useless for %D handling comma lists in alignments. In these situations the %D next macro can be of use. \def\globalprocesscommaitem#1,% {\if]#1\else \globalcommacommand{#1}% \expandafter\globalprocesscommaitem \fi} \def\globalprocesscommalist[#1]#2% {\global\let\globalcommacommand#2% \expandafter\globalprocesscommaitem#1,],} %D \macros %D {startprocesscommalist,startprocesscommacommand} %D %D Two more: \long\def\startprocesscommalist[#1]#2\stopprocesscommalist {\long\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}% \processcommalist[#1]\currentcommalistcommand} \long\def\startprocesscommacommand[#1]#2\stopprocesscommacommand {\long\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}% \processcommacommand[#1]\currentcommalistcommand} %D \macros %D {withoutpt,PtToCm, %D numberofpoints,dimensiontocount} %D %D We can convert point into centimeters with: %D %D \starttyping %D \PtToCm{dimension} %D \stoptyping {\catcode`\.=\@@other \catcode`\p=\@@other \catcode`\t=\@@other \gdef\WITHOUTPT#1pt{#1}} \def\withoutpt#1% {\expandafter\WITHOUTPT#1} %D The capitals are needed because \type{p} and \type{t} have %D \CATCODE~12, while macronames only permit tokens with the %D \CATCODE~11. As a result we cannot use the \type{.group} %D primitives. Those who want to know more about this kind of %D manipulations, we advice to study the \TEX book in detail. %D Because this macro does not do any assignment, we can use it %D in the following way too. \def\PtToCm#1% {\begingroup \scratchdimen#1\relax \scratchdimen0.0351459804\scratchdimen % 2.54/72.27 \withoutpt\the\scratchdimen cm% \endgroup} %D We also support: %D %D \starttyping %D \numberofpoints {dimension} %D \dimensiontocount {dimension} {\count} %D \stoptyping %D %D Both macros return a rounded number. % \dimensiontocount{10.49pt}\scratchcounter \the\scratchcounter / \numberofpoints{10.49pt} % \dimensiontocount{10.51pt}\scratchcounter \the\scratchcounter / \numberofpoints{10.51pt} \def\dimensiontocount#1#2{#2\numexpr\dimexpr#1\relax/\maxcard\relax} \def\numberofpoints #1{\the\numexpr\dimexpr#1\relax/\maxcard\relax} %D \macros %D {swapdimens,swapmacros} %D %D Simple but effective are the next two macros. There name %D exactly states their purpose. The \type{\scratchdimen} and %D \type{\!!stringa} can only be swapped when being the first %D argument. \def\swapdimens#1#2% {\scratchdimen #1\redoglobal #1#2\dodoglobal #2\scratchdimen} \def\swapmacros#1#2% {\let\!!stringa#1\redoglobal\let#1#2\dodoglobal\let#2\!!stringa} %D \macros %D {pushmacro,popmacro} %D %D Premature and a bit of beta, we offer: %D %D \starttyping %D \pushmacro\macro %D \popmacro\macro %D \stoptyping %D %D Beware: global! % \def\@s@{@s@} % % \beginTEX % % \def\globalpushmacro#1% we can use a faster incement here % {\@EA\doglobal\@EA\increment\csname\@s@*\string#1\endcsname % \global\@EA\let\csname\csname\@s@*\string#1\endcsname*\string#1\endcsname#1} % % \def\globalpopmacro#1% \global\let % {\global\@EA\let\@EA#1\csname\csname\@s@*\string#1\endcsname*\string#1\endcsname % \@EA\doglobal\@EA\decrement\csname\@s@*\string#1\endcsname} % % \def\localpushmacro#1% this one can be used to push a value over an \egroup % {\@EA\doglobal\@EA\increment\csname\@s@**\string#1\endcsname % \global\@EA\let\csname\csname\@s@**\string#1\endcsname**\string#1\endcsname#1} % % \def\localpopmacro#1% \local\let % {\@EA\let\@EA#1\csname\csname\@s@**\string#1\endcsname**\string#1\endcsname % \global\@EA\decrement\csname\@s@**\string#1\endcsname} % % \endTEX % % \beginETEX \newcount % % \def\globalpushmacro#1% % {\ifcsname\@s@*\string#1\endcsname \else % \@EA\newcount\csname\@s@*\string#1\endcsname % \fi % \global\advance\csname\@s@*\string#1\endcsname \plusone % \global\@EA\let\csname\the\csname\@s@*\string#1\endcsname*\string#1\endcsname#1} % % \def\globalpopmacro#1% \global\let % {\global\@EA\let\@EA#1\csname\the\csname\@s@*\string#1\endcsname*\string#1\endcsname % \global\advance\csname\@s@*\string#1\endcsname \minusone} % % \def\localpushmacro#1% this one can be used to push a value over an \egroup % {\ifcsname\@s@**\string#1\endcsname \else % \@EA\newcount\csname\@s@**\string#1\endcsname % \fi % \global\advance\csname\@s@**\string#1\endcsname \plusone % \global\@EA\let\csname\the\csname\@s@**\string#1\endcsname**\string#1\endcsname#1} % % \def\localpopmacro#1% \local\let % {\@EA\let\@EA#1\csname\the\csname\@s@**\string#1\endcsname**\string#1\endcsname % \global\advance\csname\@s@**\string#1\endcsname \minusone } % % \endETEX % % some 5% faster (used a lot in typescripts, so ...) \def\@sl@{@sl@} \def\@sg@{@sg@} \let\@@pushedmacro\empty \beginTEX \def\globalpushmacro#1% we can use a faster incement here {\xdef\@@pushedmacro{\string#1}% \@EA\doglobal\@EA\increment\csname\@sg@\@@pushedmacro\endcsname \global\@EA\let\csname\csname\@sg@\@@pushedmacro\endcsname\@@pushedmacro\endcsname#1} \def\globalpopmacro#1% {\xdef\@@pushedmacro{\string#1}% \global\@EA\let\@EA#1\csname\csname\@sg@\@@pushedmacro\endcsname\@@pushedmacro\endcsname \@EA\doglobal\@EA\decrement\csname\@sg@\@@pushedmacro\endcsname} \def\localpushmacro#1% this one can be used to push a value over an \egroup {\xdef\@@pushedmacro{\string#1}% \@EA\doglobal\@EA\increment\csname\@sl@\@@pushedmacro\endcsname \global\@EA\let\csname\csname\@sl@\@@pushedmacro\endcsname\@@pushedmacro\endcsname#1} \def\localpopmacro#1% {\xdef\@@pushedmacro{\string#1}% \@EA\let\@EA#1\csname\csname\@sl@\@@pushedmacro\endcsname\@@pushedmacro\endcsname \global\@EA\decrement\csname\@sl@\@@pushedmacro\endcsname} \endTEX \beginETEX \def\globalpushmacro#1% {\xdef\@@pushedmacro{\string#1}% \ifcsname\@sg@\@@pushedmacro\endcsname \else \@EA\newcount\csname\@sg@\@@pushedmacro\endcsname \fi \global\advance\csname\@sg@\@@pushedmacro\endcsname \plusone \global\@EA\let\csname\the\csname\@sg@\@@pushedmacro\endcsname\@@pushedmacro\endcsname#1} \def\globalpopmacro#1% {\xdef\@@pushedmacro{\string#1}% \global\@EA\let\@EA#1\csname\the\csname\@sg@\@@pushedmacro\endcsname\@@pushedmacro\endcsname \global\advance\csname\@sg@\@@pushedmacro\endcsname \minusone} \def\localpushmacro#1% this one can be used to push a value over an \egroup {\xdef\@@pushedmacro{\string#1}% \ifcsname\@sl@\@@pushedmacro\endcsname \else \@EA\newcount\csname\@sl@\@@pushedmacro\endcsname \fi \global\advance\csname\@sl@\@@pushedmacro\endcsname \plusone \global\@EA\let\csname\the\csname\@sl@\@@pushedmacro\endcsname\@@pushedmacro\endcsname#1} \def\localpopmacro#1% {\xdef\@@pushedmacro{\string#1}% \@EA\let\@EA#1\csname\the\csname\@sl@\@@pushedmacro\endcsname\@@pushedmacro\endcsname \global\advance\csname\@sl@\@@pushedmacro\endcsname \minusone } \endETEX % \let\pushmacro\globalpushmacro % \let\popmacro \globalpopmacro \let\pushmacro\localpushmacro \let\popmacro \localpopmacro %D \macros %D {setlocalhsize} %D %D Sometimes we need to work with the \type{\hsize} that is %D corrected for indentation and left and right skips. The %D corrected value is available in \type{\localhsize}, which %D needs to be calculated with \type{\setlocalhsize} first. %D %D \starttyping %D \setlocalhsize \hbox to \localhsize{...} %D \setlocalhsize[-1em] \hbox to \localhsize{...} %D \setlocalhsize[.5ex] \hbox to \localhsize{...} %D \stoptyping %D %D These examples show us that an optional can be used. The %D value provided is added to \type{\localhsize}. \newdimen\localhsize \def\complexsetlocalhsize[#1]% don't change ! {\localhsize\hsize \ifnum\hangafter<\zerocount \advance\localhsize\ifdim\hangindent>\zeropoint-\fi\hangindent \fi \advance\localhsize -\leftskip \advance\localhsize -\rightskip \advance\localhsize #1\relax} \def\simplesetlocalhsize {\complexsetlocalhsize[\zeropoint]} \definecomplexorsimple\setlocalhsize %D \macros %D {doifvalue,doifnotvalue,doifelsevalue, %D doifnothing,doifsomething,doifelsenothing, %D doifvaluenothing,doifvaluesomething,doifelsevaluenothing} %D %D These long named \type{\if} commands can be used to access %D macros (or variables) that are normally accessed by using %D \type{\getvalue}. Using these alternatives safes us three %D tokens per call. Anyone familiar with the not||values %D ones, can derive their meaning from the definitions. \def\doifvalue#1{\doif {\csname#1\endcsname}} \def\doifnotvalue#1{\doifnot {\csname#1\endcsname}} \def\doifelsevalue#1{\doifelse{\csname#1\endcsname}} \def\doifnothing#1{\doif {#1}{}} \def\doifsomething#1{\doifnot {#1}{}} \def\doifelsenothing#1{\doifelse{#1}{}} \def\doifvaluenothing#1{\doif {\csname#1\endcsname}{}} \def\doifvaluesomething#1{\doifnot {\csname#1\endcsname}{}} \def\doifelsevaluenothing#1{\doifelse{\csname#1\endcsname}{}} %D Faster but spoiling inheritance (copying parameters): %D %D \starttyping %D \def\doifelsevaluesomething#1#2#3% %D {\expandafter\ifx\csname#1\endcsname\empty#3\else#2\fi} %D %D \def\doifvaluesomething#1#2% %D {\expandafter\ifx\csname#1\endcsname\empty\else#2\fi} %D %D \def\doifvaluenothing#1#2% %D {\expandafter\ifx\csname#1\endcsname\empty#2\fi} %D \stoptyping %D %D Slightly more efficient: \def\doifnothing{\doif \empty} \def\doifsomething{\doifnot \empty} \def\doifelsenothing{\doifelse\empty} %D The somewhat faster alternatives are: \long\def\doifvalue#1#2% {\edef\!!stringa{\csname#1\endcsname}\edef\!!stringb{#2}% \ifx\!!stringa\!!stringb \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\doifnotvalue#1#2% {\edef\!!stringa{\csname#1\endcsname}\edef\!!stringb{#2}% \ifx\!!stringa\!!stringb \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \long\def\doifelsevalue#1#2% {\edef\!!stringa{\csname#1\endcsname}\edef\!!stringb{#2}% \ifx\!!stringa\!!stringb \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \long\def\doifnothing#1% {\edef\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\doifsomething#1% {\edef\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \long\def\doifelsenothing#1% {\edef\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \long\def\doifsomethingelse#1% {\edef\!!stringa{#1}% \ifx\!!stringa\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \long\def\doifvaluenothing#1% {\edef\!!stringa{\csname#1\endcsname}% \ifx\!!stringa\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\doifvaluesomething#1% {\edef\!!stringa{\csname#1\endcsname}% \ifx\!!stringa\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \long\def\doifelsevaluenothing#1% {\edef\!!stringa{\csname#1\endcsname}% \ifx\!!stringa\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifemptyelsevalue, doifemptyvalue, doifnotemptyvalue} %D %D Also handy: \def\doifemptyelsevalue#1% {\@EA\ifx\csname#1\endcsname\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifemptyvalue#1% {\@EA\ifx\csname#1\endcsname\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \def\doifnotemptyvalue#1% {\@EA\ifx\csname#1\endcsname\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D \macros %D {doifallcommonelse} %D %D A complete match of two sets can be tested with %D \type {\doifallcommonelse}, where the first two %D arguments are sets. %\def\doifallcommonelse#1#2#3#4% % {\def\p!docommoncheck##1% % {\doifnotinset{##1}{#2}{\donefalse}% % \ifdone\else\quitcommalist\fi}% % \donetrue % \processcommalist[#1]\p!docommoncheck % \ifdone#3\else#4\fi} \def\@@doifallcommonelse#1#2#3#4% slow {\def\p!docommoncheck##1% {\doifnotinset{##1}{#4}\donefalse \ifdone\else\expandafter\quitcommalist\fi}% \donetrue \processcommalist[#3]\p!docommoncheck \ifdone\expandafter#1\else\expandafter#2\fi} \def\doifallcommonelse {\@@doifallcommonelse\firstoftwoarguments\secondoftwoarguments} \def\doifallcommon {\@@doifallcommonelse\firstofonearguments\gobbleoneargument} \def\doifnotallcommon {\@@doifallcommonelse\gobbleoneargument\firstofonearguments} %D \macros %D {DOIF,DOIFELSE,DOIFNOT} %D %D \TEX\ is case sensitive. When comparing arguments, this %D feature sometimes is less desirable, for instance when we %D compare filenames. The next three alternatives upcase their %D arguments before comparing them. %D %D \starttyping %D \DOIF {string1} {string2} {...} %D \DOIFNOT {string1} {string2} {...} %D \DOIFELSE {string1} {string2} {then ...}{else ...} %D \stoptyping %D %D We have to use a two||step implementation, because the %D expansion has to take place outside \type{\uppercase}. \def\p!DOIF#1#2% {\uppercase{\ifinstringelse{$#1$}{$#2$}}% \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \def\p!DOIFNOT#1#2% {\uppercase{\ifinstringelse{$#1$}{$#2$}}% \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \def\p!DOIFELSE#1#2% {\uppercase{\ifinstringelse{$#1$}{$#2$}}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\p!DOIFINSTRINGELSE#1#2% {\uppercase{\ifinstringelse{#1}{#2}}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\DOIF {\ExpandBothAfter\p!DOIF} \def\DOIFNOT {\ExpandBothAfter\p!DOIFNOT} \def\DOIFELSE {\ExpandBothAfter\p!DOIFELSE} \def\DOIFINSTRINGELSE {\ExpandBothAfter\p!DOIFINSTRINGELSE} %D \macros %D {dosingleargumentwithset, %D dodoubleargumentwithset,dodoubleemptywithset, %D dotripleargumentwithset,dotripleemptywithset} %D %D These maybe too mysterious macros enable us to handle more %D than one setup at once. %D %D \starttyping %D \dosingleargumentwithset \command[#1] %D \dodoubleargumentwithset \command[#1][#2] %D \dotripleargumentwithset \command[#1][#2][#3] %D \dodoubleemptywithset \command[#1][#2] %D \dotripleemptywithset \command[#1][#2][#3] %D \stoptyping %D %D The first macro calls \type{\command[##1]} for each string %D in the set~\type{#1}. The second one calls for %D \type{\commando[##1][#2]} and the third, well one may guess. %D These commands support constructions like: %D %D \starttyping %D \def\dodefinesomething[#1][#2]% %D {\getparameters[\??xx#1][#2]} %D %D \def\definesomething% %D {\dodoubleargumentwithset\dodefinesomething} %D \stoptyping %D %D Which accepts calls like: %D %D \starttyping %D \definesomething[alfa,beta,...][variable=...,...] %D \stoptyping %D %D Now a whole bunch of variables like \type{\@@xxalfavariable} %D and \type{\@@xxbetavariable} is defined. \def\dodoublewithset#1#2% {\def\dododoublewithset[##1][##2]% {\doifsomething{##1} {\def\dodododoublewithset####1{#2[####1][##2]}% \processcommalist[##1]\dodododoublewithset}}% #1\dododoublewithset} \def\dodoubleemptywithset {\dodoublewithset\dodoubleempty} \def\dodoubleargumentwithset{\dodoublewithset\dodoubleargument} \def\dotriplewithset#1#2% {\def\dodotriplewithset[##1][##2][##3]% {\doifsomething{##1} {\def\dododotriplewithset####1{#2[####1][##2][##3]}% \processcommalist[##1]\dododotriplewithset}}% #1\dodotriplewithset} \def\dotripleemptywithset {\dotriplewithset\dotripleempty} \def\dotripleargumentwithset{\dotriplewithset\dotripleargument} %D \macros %D {stripcharacters,stripspaces} %D %D The next command was needed first when we implemented %D the \CONTEXT\ interactivity macros. When we use labeled %D destinations, we often cannot use all the characters we %D want. We therefore strip some of the troublemakers, like %D spaces, from the labels before we write them to the %D \DVI||file, which passes them to for instance a PostScript %D file. %D %D \starttyping %D \stripspaces\from\one\to\two %D \stoptyping %D %D Both the old string \type{\one} and the new one \type{\two} %D are expanded. This command is a special case of: %D %D \starttyping %D \stripcharacter\char\from\one\to\two %D \stoptyping %D %D As we can see below, spaces following a control sequence are %D to enclosed in \type{{}}. % keep this one: % % \def\stripcharacter#1\from#2\to#3% % {\def\dostripcharacter##1#1##2\end % {\edef\!!strippedstring{\!!strippedstring##1}% % \doifnotempty{##2}{\dostripcharacter##2\end}}% % \let\!!strippedstring\empty % \edef\!!stringa{#2}% % \@EA\dostripcharacter\!!stringa#1\end % \dodoglobal\let#3\!!strippedstring} % % the following is better (comes from syst-loc): \def\stripcharacter#1\from#2\to#3% {\def\dostripcharacter##1#1##2\end {\edef\!!strippedstring{\!!strippedstring##1}% \doifnotempty{##2}{\dostripcharacter##2\end}}% \let\!!strippedstring\empty \edef\!!stringa{#2}% \@EA\dostripcharacter\!!stringa#1\end \dodoglobal\let#3\!!strippedstring} \def\stripspaces\from#1\to#2% will become \unspacestring#1\from#2 {\stripcharacter{ }\from#1\to#2} %D \macros %D {unspacestring} %D %D The next macro does the same but is more compatible with other macros, %D like \type {\convert...}. \def\unspacestring#1\to#2% {\stripcharacter{ }\from#1\to#2} %D \macros %D {executeifdefined} %D %D \CONTEXT\ uses one auxiliary file for all data concerning %D tables of contents, references, two||pass optimizations, %D sorted lists etc. This file is loaded as many times as %D needed. During such a pass we skip the commands thate are of %D no use at that moment. Because we don't want to come into %D trouble with undefined auxiliary commands, we call the %D macros in a way similar to \type{\getvalue}. The next macro %D take care of such executions and when not defined, gobbles %D the unwanted arguments. %D %D \starttyping %D \executeifdefined{name}\gobbleoneargument %D \stoptyping %D %D We can of course gobble more arguments using the %D appropriate gobbling command. \newif\ifexecuted % general purpose \def\executeifdefined#1#2% {\ifundefined{#1}% \def\next{#2}% \else \def\next{\getvalue{#1}}% \fi \next} %D Just for fun I times the next alternative: it was roughly %D timed about 15\% faster than the default (10+ sec to 9 sec)! \beginTEX \def\executeifdefined#1% #2 / never change this one again {\ifundefined{#1}% \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi {\csname#1\endcsname}} \endTEX \beginETEX % \def\executeifdefined#1% #2 / never change this one again % {\ifcsname#1\endcsname % \expandafter\firstoftwoarguments % \else % \expandafter\secondoftwoarguments % \fi % {\csname#1\endcsname}} \def\executeifdefined#1% #2 / never change this one again {\ifcsname#1\endcsname \csname#1\expandafter\expandafter\expandafter\endcsname\expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \endETEX % \letvalue{f }\firstofoneargument \def\executeifdefined#1{\csname\ifcsname#1\endcsname#1\else f \fi\endcsname} %D This one also has the advantage that it is fully %D expandable and that it can be used after an assignment. %D \macros %D {executeifdefinedcs} %D %D An also fully expandable variant is the following: %D %D \starttyping %D \executeifdefinedcs{a}{b} %D \stoptyping %D %D In dit geval zijn beide argumenten csnames. \def\executeifdefinedcs#1#2% {\csname\ifundefined{#1}#2\else#1\fi\endcsname} %D We considered an alternative implementation accepting %D commands directly, like: %D %D \starttyping %D \executeifdefined\name\gobblefivearguments %D \stoptyping %D %D For the moment we don't need this one, so we stick to the %D faster one. %D \macros %D {executeandforget} %D %D The following macros were requested by Simon. Watch the %D global variant. %D %D \starttyping %D \executeandforget\SomeCommand %D \doglobal\executeandforget\AnotherCommand %D \stoptyping \def\executeandforget#1% {\global\let\@@expanded#1% \dodoglobal\let#1\relax \@@expanded} %D \macros %D {doifsomespaceelse} %D %D The next command checks a string on the presence of a space %D and executed a command accordingly. %D %D \starttyping %D \doifsomespaceelse {tekst} {then ...} {else ...} %D \stoptyping %D %D We use this command in \CONTEXT\ for determing if an %D argument must be broken into words when made interactive. %D Watch the use of \type{\noexpand}. %D Is this one still needed? % \long\def\doifsomespaceelse#1#2#3% % {\def\p!doifsomespaceelse##1 ##2##3\war% % {\if\noexpand##2@#3\else#2\fi}% % \p!doifsomespaceelse#1 @ @\war} \def\p!doifsomespaceelse#1 #2#3\war{\if\noexpand#2@} \long\def\doifsomespaceelse#1% % #2#3% {\p!doifsomespaceelse#1 @ @\war % #3\else#2\fi} \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} %D \macros %D {adaptdimension,balancedimensions} %D %D Again we introduce some macros that are closely related to %D an interface aspect of \CONTEXT. The first command can be %D used to adapt a \DIMENSION. %D %D \starttyping %D \adaptdimension {dimension} {value} %D \stoptyping %D %D When the value is preceed by a \type{+} or minus, the %D dimension is advanced accordingly, otherwise it gets the %D value. % \def\doadaptdimension#1#2\\#3\\% % {\if#1+% % \dodoglobal\advance#3 #1#2\relax % \else\if#1-% % \dodoglobal\advance#3 #1#2\relax % \else % \dodoglobal#3=#1#2\relax % \fi\fi} % % more fuzzy but also more efficient \def\doadaptdimension#1#2\\#3\\% {\if#1+% \dodoglobal\advance \else\if#1-% \dodoglobal\advance \else \dodoglobal \fi\fi #3 #1#2\relax} \def\adaptdimension#1#2% {\expandafter\doadaptdimension#2\\#1\\} %D A second command takes two \DIMENSIONS. Both are adapted, %D depending on the sign of the given value. %D maat. This time we take the value as it is, and don't look %D explicitly at the preceding sign. %D %D \starttyping %D \balancedimensions {dimension 1} {dimension 2} {value} %D \stoptyping %D %D When a positive value is given, the first dimension is %D incremented, the second ond is decremented. A negative value %D has the opposite result. \def\balancedimensions#1#2#3% {\scratchdimen#3\relax \redoglobal\advance#1 \scratchdimen \dodoglobal\advance#2 -\scratchdimen} %D Both commands can be preceded by \type{\doglobal}. Here we %D use \type{\redo} first, because \type{\dodo} resets the %D global character. %D \macros %D {processseparatedlist} %D %D Maybe a bit late, but here is a more general version of the %D \type{\processcommalist} command. This time we don't handle %D nesting but accept arbitrary seperators. %D %D \starttyping %D \processseparatedlist[list][separator]\command %D \stoptyping %D %D One can think of things like: %D %D \starttyping %D \processseparatedlist[alfa+beta+gamma][+]\message %D \stoptyping %D First we show the simple alternative: %D %D \starttyping %D \def\processseparatedlist[#1][#2]#3% %D {\def\doprocessseparatedlist##1##2#2% %D {\if]##1% %D \let\next=\relax %D \else\if]##2% %D \let\next=\relax %D \else\ifx\blankspace##2% %D #3{##1}% %D \let\next=\doprocessseparatedlist %D \else %D #3{##1##2}% %D \let\next=\doprocessseparatedlist %D \fi\fi\fi %D \next}% %D \doprocessseparatedlist#1#2]#2} %D \stoptyping %D %D However, we want to handle all situations, like: %D %D \startbuffer %D \processseparatedlist[{aap noot}] [ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \processseparatedlist[{aap} {noot}][ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \processseparatedlist[aap {noot}] [ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \processseparatedlist[aap noot] [ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Therefore we smuggle a \type {\relax} in front of the %D argument, which we remove afterwards. % \def\doprocessseparatedlist#1]#2[#3]#4% % {\def\dodoprocessseparatedlist##1##2#3% % {\if]##1% % \let\dodoprocessseparatedlist\relax % \else\if]##2% % \let\dodoprocessseparatedlist\relax % \else\ifx\blankspace##2% % #4{##1}% % \else % #4{##1##2}% % \fi\fi\fi % \dodoprocessseparatedlist}% % \@EA\dodoprocessseparatedlist\gobbleoneargument#1#3]#3} % testcase Vit Zyka: % % \def\Do#1{(#1)} % 1\processseparatedlist[{aap noot}] [ ]\Do \par % 2\processseparatedlist[{aap} {noot}][ ]\Do \par % 3\processseparatedlist[aap {noot}] [ ]\Do \par % 4\processseparatedlist[aap noot] [ ]\Do \par % 5\processseparatedlist[aap;noot;a noot;noot a; noot a noot][;]\Do \par % 6\processseparatedlist[][;]\Do \par % 7\processseparatedlist[;][;]\Do \par \def\doprocessseparatedlist#1]#2[#3]#4% {\def\dodoprocessseparatedlist##1##2#3% {\def\!!stringa{##2}% suggested by VZ \if]##1% \let\dodoprocessseparatedlist\relax \else\ifx\blankspace\!!stringa #4{##1}% \else\if]##2% \let\dodoprocessseparatedlist\relax \else #4{##1##2}% \fi\fi\fi \dodoprocessseparatedlist}% \@EA\dodoprocessseparatedlist\gobbleoneargument#1#3]#3} \def\processseparatedlist[% {\doprocessseparatedlist\relax} %D \macros %D {processlist} %D %D An even more general list processing macro is the %D following one: %D %D \starttyping %D \processlist{beginsym}{endsym}{separator}\docommand list %D \stoptyping %D %D This one supports arbitrary open and close symbols as well %D as user defined separators. %D %D \starttyping %D \processlist(){=>}\docommand(a=>b=>c=>d) %D \stoptyping \long\def\processlist#1#2#3#4% no blank skipping ! {\def\doprocesslist##1#2% {\def\dodoprocesslist####1####2#3% {\ifx#2####1% \let\dodoprocesslist\relax \else\ifx#2####2% \let\dodoprocesslist\relax \else #4{####1####2}% \fi\fi \dodoprocesslist}% \expandafter\dodoprocesslist\gobbleoneargument##1#3#2#3}% \def\dodoprocesslist#1% {\doprocesslist\relax}% \dodoprocesslist} % %D \macros % %D {dohonorgroupedargument} % %D % %D The previous macro uses yet another auxiliary macro to % %D handle the special case. % % \def\dohonorgroupedargument#1[% % {\doifnextbgroupelse{\dodohonorgroupedargument#1}{#1[}} % % \def\dodohonorgroupedargument#1#2% % {#1[{{#2}}} %D \macros %D {processassignlist} %D %D Is possible to combine an assignment list with one %D containing keywords. Assignments are treated accordingly, %D keywords are treated by \type{\command}. %D %D \starttyping %D \processassignlist[...=...,...=...,...]\commando %D \stoptyping %D %D This command can be integrated in \type{\getparameters}, but %D we decided best not to do so. \def\processassignlist#1[#2]#3% {\def\p!dodogetparameter[##1=##2=##3]% {\doifnot{##3}\relax{#3{##1}}}% \def\p!dogetparameter##1% {\p!dodogetparameter[##1==\relax]}% \processcommalist[#2]\p!dogetparameter} % too ugly % % %D \macros % %D {DoAfterFi,DoAfterFiFi} % %D % %D Sometimes \type{\fi}'s can get into the way. We can reach % %D over such a troublemaker with: % %D % %D \starttyping % %D \DoAfterFi{some commands} % %D \DoAfterFiFi{some commands} % %D \stoptyping % %D % %D It saves us a \type{\next} construction. Skipping % %D \type{\else...\fi} is more tricky, so this one is not % %D provided. % % \def\DoAfterFi#1\fi{\fi#1} % \def\DoAfterFiFi#1\fi#2\fi{\fi\fi#1} %D \macros %D {untextargument %D untexcommand} %D %D When manipulating data(bases) and for instance generating %D index entries, the next three macros can be of help: %D %D \starttyping %D \untextargument{...}\to\name %D \untexcommand {...}\to\name %D \stoptyping %D %D They remove braces and backslashes and give us something to %D sort. \def\untexsomething {\begingroup \catcode`\{=\@@ignore \catcode`\}=\@@ignore \escapechar\minusone \dountexsomething} \long\def\dountexsomething#1#2\to#3% {\doglobal#1#2\to\untexedargument \endgroup \let#3\untexedargument} \def\untexargument{\untexsomething\convertargument} \def\untexcommand {\untexsomething\convertcommand} %D \macros %D {ScaledPointsToBigPoints,ScaledPointsToWholeBigPoints} %D %D One characteristic of \POSTSCRIPT\ and \PDF\ is that both %D used big points (\TEX's bp). The next macros convert points %D and scaled points into big points. %D %D \starttyping %D \ScaledPointsToBigPoints {number} \target %D \ScaledPointsToWholeBigPoints {number} \target %D \stoptyping %D %D The magic factor $72/72.27$ can be found in most \TEX\ %D related books. % \def\ScaledPointsToBigPoints #1{\PointsToBigPoints {#1sp}} % \def\ScaledPointsToWholeBigPoints#1{\PointsToWholeBigPoints{#1sp}} % % \def\PointsToBigPoints#1#2% % {\scratchdimen#1% % \scratchdimen.996264\scratchdimen % \edef#2{\withoutpt\the\scratchdimen}} % % \def\PointsToWholeBigPoints#1#2% % {\scratchdimen#1% % \scratchdimen.996264\scratchdimen % \scratchcounter\scratchdimen % \advance\scratchcounter \medcard % \divide\scratchcounter \maxcard % \edef#2{\the\scratchcounter}} % \PointsToBigPoints{10.53940pt}\test \test % \PointsToBigPoints{10.53941pt}\test \test % \PointsToBigPoints{10.53942pt}\test \test % \PointsToWholeBigPoints{10.53940pt}\test \test % \PointsToWholeBigPoints{10.53941pt}\test \test % \PointsToWholeBigPoints{10.53942pt}\test \test \beginTEX \def\PointsToBigPoints#1#2% {\scratchdimen#1% \scratchdimen.996264\scratchdimen \edef#2{\withoutpt\the\scratchdimen}} \def\PointsToWholeBigPoints#1#2% {\scratchdimen#1% \scratchdimen.996264\scratchdimen \scratchcounter\scratchdimen \advance\scratchcounter \medcard \divide\scratchcounter \maxcard \edef#2{\the\scratchcounter}} \endTEX \beginETEX \dimexpr \numexpr % \def\PointsToBigPoints#1#2% % {\edef#2{\withoutpt\the\dimexpr(.996264\dimexpr(#1))}} % \def\PointsToWholeBigPoints#1#2% % {\edef#2{\the\numexpr(\numexpr(\dimexpr(.996264\dimexpr(#1)))/\maxcard)}} \def\PointsToBigPoints#1#2% {\edef#2{\withoutpt\the\dimexpr.996264\dimexpr#1\relax\relax}} \def\PointsToWholeBigPoints#1#2% {\edef#2{\the\numexpr\dimexpr.996264\dimexpr#1\relax\relax/\maxcard\relax}} \endETEX \def\ScaledPointsToBigPoints #1{\PointsToBigPoints {\number#1\scaledpoint}} \def\ScaledPointsToWholeBigPoints#1{\PointsToWholeBigPoints{\number#1\scaledpoint}} %D \macros %D {PointsToReal} %D %D Points can be stripped from their suffix by using %D \type{\withoutpt}. The next macro enveloppes this macro. %D %D \starttyping %D \PointsToReal {dimension} \target %D \stoptyping \def\PointsToReal#1#2% {\scratchdimen#1% \edef#2{\withoutpt\the\scratchdimen}} %D \macros %D {dontleavehmode} %D %D Sometimes when we enter a paragraph with some command, the %D first token gets the whole first line. We can prevent this %D by saying: %D %D \starttyping %D \dontleavehmode %D \stoptyping %D %D This command is used in for instance the language module %D \type{lang-ini}. The first version was: %D %D \starttyping %D \def\dontleavehmode{\ifhmode\else\ifmmode\else$ $\fi\fi} %D \stoptyping %D %D Next, Taco came with a better alternative (using mathsurround): %D %D \starttyping %D \def\dontleavehmode %D {\ifhmode\else \ifmmode\else %D {\mathsurround\zeropoint\everymath\emptytoks$ $}% %D \fi \fi} %D \stoptyping %D %D And finaly we got the following alternative, one that avoids %D interfering grouping at the cost of a box. \newbox\@@dlhbox \unexpanded \def\dontleavehmode {\ifhmode\else \ifmmode\else \setbox\@@dlhbox\hbox{\mathsurround\zeropoint\everymath\emptytoks$ $}\unhbox\@@dlhbox \fi \fi} % Also ok, but more sensitive to lookahead expansion is: % % \def\dontleavehmode{\ifvmode \indent \fi} % % which assumes indent is kept unchanged. Protecting the macro is only % possible in etex (watch out: \unexpanded in context is eq to \protected). % % \unexpanded \def\dontleavehmode{\ifvmode \indent \fi} % functional spec TH %D But, if you run a recent version of \TEX, we can use the new %D primitive: \ifx\normalquitvmode\undefined \else \let\dontleavehmode\normalquitvmode \fi %D \macros %D {uppercasestring,lowercasestring} %D %D The names tell what they do: %D %D \starttyping %D \uppercasestring somestring\to\somestring %D \lowercasestring somestring\to\somestring %D \stoptyping %D %D the first argument may be a \type{\macro}. \def\uppercasestring#1\to#2% first @EA redundant {\edef#2{#1}\@EA\uppercase\@EA{\@EA\dodoglobal\@EA\edef\@EA#2\@EA{#2}}} \def\lowercasestring#1\to#2% first @EA redundant {\edef#2{#1}\@EA\lowercase\@EA{\@EA\dodoglobal\@EA\edef\@EA#2\@EA{#2}}} %D \macros %D {handletokens} %D %D With the next macro we enter a critical area of macro %D expansion. What we want is a macro that looks like: %D %D \starttyping %D \handletokens some tokens\with \somemacro %D \stoptyping %D %D At first sight the next implementation will suffice, but %D running this one shows that we loose the spaces. This is no %D surprise because we grab arguments and spaces preceding those %D are just ignored. %D %D \starttyping %D \def\nohandletokens#1\end% %D {} %D %D \def\dohandletokens#1#2\end% %D {\ifx#1\endoftoken %D \expandafter\nohandletokens %D \else %D \docommand{#1}% %D \expandafter\dohandletokens %D \fi %D #2\end} %D %D \long\def\handletokens#1\with#2% %D {\let\docommand=#2\relax %D \dohandletokens#1\endoftoken\end} %D \stoptyping %D %D A second approach therefore grabs the individual characters %D by using \type{\afterassignment}, in which case the space is %D read in as space. %D %D \starttyping %D \def\dodohandletokens% %D {\ifx\next\end \else %D \docommand{\next}% %D \expandafter\dohandletokens %D \fi} %D %D \def\dohandletokens %D {\afterassignment\dodohandletokens\let\next= } %D %D \long\def\handletokens#1\with#2% %D {\let\docommand=#2% %D \dohandletokens#1\end} %D \stoptyping %D A bonus example: %D %D \starttyping %D \hbox{\handletokens tekst en meer tekst\with\ruledhbox} %D %D \def\weetikveel#1{\if#1\blankspace\space\else\ruledhbox{#1}\fi} %D %D \hbox{\handletokens tekst en meer tekst\with\weetikveel} %D \stoptyping %D \macros %D {counttoken,counttokens} %D %D For the few occasions that we want to know the number of %D specific tokens in a string, we can use: %D %D \starttyping %D \counttoken token\in string\to \count %D \counttokens string\to \count %D \stoptyping %D %D This macro, that for instance is used in \type{cont-tab}, %D takes a real counter. The macro can be preceded by \type %D {\doglobal}. \def\counttoken#1\in#2\to#3% {\redoglobal#3\zerocount \def\!!stringa{#1}% \def\!!stringb{\end}% \def\docounttoken##1% obeys {} {\def\!!stringc{##1}% \ifx\!!stringb\!!stringc \else \ifx\!!stringa\!!stringc \dodoglobal\advance#3 \plusone \fi \expandafter\docounttoken \fi}% \docounttoken#2\end \resetglobal} % \def\counttoken#1\in#2\to#3% % {\redoglobal#3\zerocount % \def\!!stringa{#1}% % \def\docounttoken##1% obeys {} % {\def\!!stringb{##1}% % \ifx\!!stringa\!!stringb % \dodoglobal\advance#3\plusone % \fi}% % \handletokens#1\with\docounttoken % \resetglobal} \def\counttokens#1\to#2% {\redoglobal#2\zerocount \def\docounttoken##1{\dodoglobal\advance#2\plusone}% \handletokens#1\with\docounttoken \resetglobal} %D \macros %D {splitofftokens} %D %D Running this one not always gives the expected results. %D Consider for instance the macro for which I originally %D wrote this token handler. \long\def\splitofftokens#1\from#2\to#3% {\ifnum#1>\zerocount \scratchcounter#1\relax \def\dosplitofftokens##1% {\ifnum\scratchcounter>\zerocount \advance\scratchcounter \minusone \edef#3{#3##1}% \fi}% % \let#3\empty % #3 can be #2, so: \@EA\let\@EA#3\@EA\empty \@EA\handletokens#2\with\dosplitofftokens \else \edef#3{#2}% \fi} %D This macro can be called like: %D %D \startbuffer[example] %D \splitofftokens10\from01234567 890123456789\to\test [\test] %D \stopbuffer %D %D However, the characters that we expect to find in %D \type{\test} just don;t show up there. The reason for this %D is not that logical but follows from \TEX's sometimes %D mysterious way of expanding. Look at this: %D %D \startbuffer[next] %D \def\next{a} \edef\test{\next} [\test] %D \let\next=b \edef\test{\test\next} [\test] %D \let\next=c \edef\test{\next} [\test] %D \let\next=d \edef\test{\test\next} [\test] %D \let\next=e \@EA\edef\@EA\test\@EA{\test\next} [\test] %D \stopbuffer %D %D \typebuffer[next] %D %D Careful reading shows that inside an \type{\edef} macro's %D that are \type{\let} are not expanded! %D %D \unprotect\getbuffer[next]\protect %D %D That's why we finally end up with a macro that looks %D ahead by using an assignment, this time by using \type %D {\futurelet}, and grabbing an argument as well. That %D way we can handle the sentinal, a blank space and grouped %D tokens. \def\dohandletokens % \nexthandledtoken is part of interface {\futurelet\nexthandledtoken\dodohandletokens} \long\def\handletokens#1\with#2% {\gdef\dododohandletokens{#2}% permits more complex #2's \dohandletokens#1\end} %D A previous version said \type{\docommand=#2}, but to enable %D use in alignments, I decided to use another placeholder, one %D that is not sensitive to the global assignment. %D This alternatives does not handle grouped tokens well, so %D next we had (for a short moment): %D %D \starttyping %D \def\dodohandletokens#1% %D {\ifx\nexthandledtoken\blankspace %D \dododohandletokens{ }% %D \fi %D \ifx#1\end \else %D \dododohandletokens{#1}% %D \expandafter\dohandletokens %D \fi} %D \stoptyping %D %D This one failed on a trailing space, something we %D encounter in \JAVASCRIPT\ cleaning. %D %D \starttyping %D \def\dodohandletokens#1% %D {\ifx\nexthandledtoken\blankspace %D \dododohandletokens{ }% %D \fi %D \ifx\nexthandledtoken\end \else %D \dododohandletokens{#1}% %D \expandafter\dohandletokens %D \fi} %D \stoptyping %D %D So, now we have: \def\dodohandletokens % can be sped up {\ifx\nexthandledtoken\blankspace \def\next * {\dododohandletokens{ }\dohandletokens}% \else\ifx\nexthandledtoken\end \let\next\gobbletwoarguments \else \long\def\next *##1{\dododohandletokens{##1}\dohandletokens}% \fi\fi \next *} %D This macro is tested on: %D %D \def\xxx#1{[#1]} %D %D \startlines %D \handletokens abc\with\xxx %D \handletokens a b c\with\xxx %D \handletokens a b c\with\xxx %D \handletokens a{bc}d\with\xxx %D \handletokens a\space bc \with\xxx %D \stoplines %D %D And our previous example shows up as: %D %D \getbuffer[example] %D \macros %D {iftrialtypesetting, ifvisible} %D %D The next boolean is at first sight a strange one. Sometimes %D one does a trial typesetting run, for instance to determine %D dimensions. Some mechanisms, like object inclusion, can fail %D on such trials. Temporary setting the next boolean to true, %D helps a lot. The second boolena can be used to inhibit %D processing completely. \newif\iftrialtypesetting \trialtypesettingfalse \newif\ifvisible \visibletrue %D \macros %D {startlocal, startglobal} %D %D The next four macros are rather self explaining: %D %D \starttyping %D \startlocal %D whatever assignments %D \stoplocal %D %D \startglobal %D whatever assignments %D \stopglobal %D \stoptyping %D %D These macros are meant for those who know the difference %D between local and global assignments and are aware of the %D possible unwanted side effect \def\dostartglobaldefs#1#2% {\edef\!!stringa{\the\globaldefs}% \ifnum\globaldefs#10 \globaldefs-\globaldefs \fi \advance\globaldefs#21 \letvalue{@gd@\the\globaldefs}\!!stringa} \def\dostopglobaldefs% {\doifdefinedelse{@gd@\the\globaldefs} {\globaldefs\getvalue{@gd@\the\globaldefs}\relax} {\globaldefs\zerocount}} \def\startlocal {\dostartglobaldefs>-} \def\stoplocal {\dostopglobaldefs} \def\startglobal {\dostartglobaldefs<+} \def\stopglobal {\dostopglobaldefs} %D \macros %D {twodigitrounding} %D %D When using \type {\special}s or \type {\pdfliteral}s, it %D sometimes makes sense to limit the precission. The next %D macro rounds a real number to two digits. It takes one %D argument and only works in \ETEX. \beginTEX \let\integerrounding \firstofoneargument \let\onedigitrounding \firstofoneargument \let\twodigitrounding \firstofoneargument \let\threedigitrounding\firstofoneargument \endTEX \beginETEX \dimexpr \def\dointegerrounding #1.#2\relax {#1} \def\doonedigitrounding #1.#2#3\relax {\ifx#2*#1\else#1.#2\fi} \def\dotwodigitrounding #1.#2#3#4\relax {\ifx#2*#1\else#1.#2#3\fi} \def\dothreedigitrounding#1.#2#3#4#5\relax{\ifx#2*#1\else#1.#2#3#4\fi} \def\integerrounding#1% {\@EA\@EA\@EA\dointegerrounding \@EA\WITHOUTPT\the\dimexpr#1\points+.5\points \relax .\relax} \def\onedigitrounding#1% {\@EA\@EA\@EA\doonedigitrounding \@EA\WITHOUTPT\the\dimexpr#1\points+.05\points \relax 00.*0\relax} \def\twodigitrounding#1% {\@EA\@EA\@EA\dotwodigitrounding \@EA\WITHOUTPT\the\dimexpr#1\points+.005\points \relax 000.*00\relax} \def\threedigitrounding#1% {\@EA\@EA\@EA\dothreedigitrounding\@EA\WITHOUTPT\the\dimexpr#1\points+.0005\points\relax0000.*00\relax} % \def\dointegerrounding #1.#2\relax {#1} % \def\doonedigitrounding #1.#2#3\relax {#1.#2} % \def\dotwodigitrounding #1.#2#3#4\relax {#1.#2#3} % \def\dothreedigitrounding#1.#2#3#4#5\relax{#1.#2#3#4} % \def\integerrounding #1{\@EA\@EA\@EA\dointegerrounding \@EA\WITHOUTPT\the\dimexpr #1\points+.5\points\relax \relax} % \def\onedigitrounding #1{\@EA\@EA\@EA\doonedigitrounding \@EA\WITHOUTPT\the\dimexpr #1\points+.05\points\relax 0\relax} % \def\twodigitrounding #1{\@EA\@EA\@EA\dotwodigitrounding \@EA\WITHOUTPT\the\dimexpr #1\points+.005\points\relax 00\relax} % \def\threedigitrounding#1{\@EA\@EA\@EA\dothreedigitrounding\@EA\WITHOUTPT\the\dimexpr#1\points+.0005\points\relax000\relax} % \def\integerroundeddimen #1{\@EA\@EA\@EA\dointegerrounding \@EA\WITHOUTPT\the\dimexpr #1+.5\points\relax \relax} % \def\onedigitroundeddimen #1{\@EA\@EA\@EA\doonedigitrounding \@EA\WITHOUTPT\the\dimexpr #1+.05\points\relax 0\relax} % \def\twodigitroundeddimen #1{\@EA\@EA\@EA\dotwodigitrounding \@EA\WITHOUTPT\the\dimexpr #1+.005\points\relax 00\relax} % \def\threedigitroundeddimen#1{\@EA\@EA\@EA\dothreedigitrounding\@EA\WITHOUTPT\the\dimexpr#1+.0005\points\relax000\relax} \endETEX %D \macros %D {processcontent} %D %D This is the first occasion where \TEX\ and \ETEX\ are no %D longer compatible, although in many cases things go ok. %D Beware of verbatim, i.e. catcode changes. %D %D \starttyping %D \def\starthans% %D {\processcontent{stophans}\test{\message{\test}\wait}} %D \stoptyping %D %D This macro is first used in the tabulation macros. \def\processcontent#1% {\begingroup\@EA\doprocesscontent\csname#1\endcsname} %\beginTEX \def\doprocesscontent#1#2#3% {\long\def\doprocesscontent##1#1% {\endgroup\long\def#2{##1}#3}% \doprocesscontent} %\endTEX % Hm. Side effect, spaces after \type{\test} in verbatim. % must set eof token %\beginETEX \scantokens % %\def\doprocesscontent#1#2#3% % {\long\def\doprocesscontent##1#1% % {\egroup\long\def#2{\scantokens{##1}}#3}% % \doprocesscontent} % %\endETEX %D \macros %D {dogobblesingleempty, dogobbledoubleempty} %D %D These two macros savely grab and dispose two arguments. \def\dogobblesingleempty{\dosingleempty\dodogobblesingleempty} \def\dogobbledoubleempty{\dodoubleempty\dodogobbledoubleempty} \def\dodogobblesingleempty [#1]{} \def\dodogobbledoubleempty[#1][#2]{} \let\gobblesingleempty\dogobblesingleempty % also used \let\gobbledoubleempty\dogobbledoubleempty % also used %D \macros %D {sortcommalist,sortcommacommand, %D donumericcompare,comparedresult} %D %D Sometimes we need to sort a commalist, so here is Taco's %D solution. This will in many cases be a list that is stored %D in a \type{\csname}, so both commalist and commacommands are %D supported. The sorting algorithm is very simple, so the list %D should not be too long or sorting will be very slow. %D %D \starttyping %D \sortcommalist[10,2,4,5,6,1,2,3,4,10,20]\donumericcompare %D %D \def\test{10,2,4,5,6,1,2,3,4,10,20} %D %D \sortcommacommand[\test]\donumericcompare %D \stoptyping %D %D In both cases, the result is available in the macro \type %D {\sortedcommalist}. %D %D Parameter \type{#2} is a macro that should accept two %D parameters, and it has to decide which one is larger, by %D setting the counter \type{\comparedresult} to~0 (for equal), %D 1~(if it's first argument is larger), or~2 (if it's second %D argument is larger). %D %D As said, these macro are largely written by Taco, and are %D (maybe therefore) also the first application of \type %D {\replaceincommalist}. \newcount\comparedresult \def\sortcommacommand[#1]% {\@EA\sortcommalist\@EA[#1]} \def\sortcommalist[#1]#2% {\getcommalistsize[#1]% \ifnum\commalistsize>1 \let\sortedcommalist\empty \let\comparecommand#2% \processcommalist[#1]\dosortcommacommand \else \def\sortedcommalist{#1}% \fi} \def\dosortcommacommand#1% {\ifx\sortedcommalist\empty \def\sortedcommalist{#1}% \else \def\!!tempa{#1}% \ifx\!!tempa\empty\else \scratchcounter\plusone \@EA\getcommalistsize\@EA[\sortedcommalist]% \@EA\processcommalist\@EA[\sortedcommalist]\docompareitems \fi \fi} %D All those \type{\expandafter}'s are there because I do not %D want to use \type{\edef}. \def\docompareitems#1% {\doifnotempty{#1} {\@EA\comparecommand\@EA{\!!tempa}{#1}\relax %\ifcase\compareresult % equal \ifnum\comparedresult<2 \ifnum\scratchcounter=\commalistsize \@EA\@EA\@EA\def\@EA\@EA\@EA\sortedcommalist \@EA\@EA\@EA{\@EA\sortedcommalist\@EA,\!!tempa}% \fi %\or % new element larger % \ifnum\scratchcounter=\commalistsize % \@EA\@EA\@EA\def\@EA\@EA\@EA\sortedcommalist % \@EA\@EA\@EA{\@EA\sortedcommalist\@EA,\!!tempa}% % \fi \else % old element larger \@EA\def\@EA\newcommalistelement\@EA{\!!tempa,#1}% \replaceincommalist\sortedcommalist\scratchcounter \expandafter\quitcommalist \fi}% \advance\scratchcounter \plusone} % bug, was \minusone %D The macro \type{\donumericcompare} considers everything %D that is not a number to be larger than any number. \def\donumericcompare#1#2% {\doifnumberelse{#1} {\doifnumberelse{#2} {\ifnum#1>#2\relax \comparedresult\plusone % #1 is larger \else\ifnum#1<#2\relax \comparedresult\plustwo % #2 is larger \else \comparedresult\zerocount % both are equal \fi\fi} {\comparedresult\plustwo}} {\comparedresult\plusone}} %D \macros %D {@True, @False, @Not, @And} %D %D Some predicate logic functions, used in for instance the %D math module. \def\@True {00} \def\@False {01} \def\@Not #1{0\ifcase#11 \or\@EA 1\else \@EA 0\fi} \def\@And #1#2{0\ifcase#1#2 \@EA 0\else \@EA 1\fi} %D \macros %D {setdimensionwithunit, freezedimensionwithunit} %D %D The next assignments are all valid: %D %D \starttyping %D \setdimensionwithunit\scratchdimen{10} {cm} %D \setdimensionwithunit\scratchdimen{10cm}{cm} %D \setdimensionwithunit\scratchdimen{10cm}{} %D \freezedimensionwithunit\SomeWidth{\textwidth} %D \freezedimensionwithunit\SomeDepth{\dp\strutbox} %D \stoptyping %D %D As an alternative for the next macro we can use a global %D assignment inside a box. The \type{\empty}'s permits %D gobbling while preventing spurious \type{\relax}'s. \def\setdimensionwithunit#1#2#3% number unit dimension / nice trick {\afterassignment\gobblefourarguments#1=#2#3pt\relax\empty\empty\empty\empty} \def\freezedimensionwithunit#1#2% {\setdimensionwithunit\scratchdimen#1{#2}\edef#1{\the\scratchdimen}} %D \macros %D {doifsometokselse} %D %D Not that fast I guess, but here's a way to test for token %D registers being empty. \def\doifsometokselse#1% % #2#3% {\edef\!!stringa{\the#1}% \ifx\!!stringa\empty % #3\else#2\fi} \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} %D \macros %D {startstrictinspectnextcharacter} %D %D This one if for Taco's bibliography module: \let\normalinspectnextcharacter\inspectnextcharacter \def\strictinspectnextcharacter% no user macro ! {\ifx\nexttoken\charactertoken \expandafter\!!stringa \else \expandafter\!!stringb \fi} % better: push/pop \def\startstrictinspectnextcharacter {\let\inspectnextcharacter\strictinspectnextcharacter} \def\stopstrictinspectnextcharacter {\let\inspectnextcharacter\normalinspectnextcharacter} \def\strictdoifnextoptionalelse#1#2% {\startstrictinspectnextcharacter \doifnextcharelse[{\stopstrictinspectnextcharacter#1}{\stopstrictinspectnextcharacter#2}} %D \macros %D {gobblespacetokens} %D %D This macro needs a speed-up! %\def\gobblespacetokens % {\doifnextcharelse\empty\donothing\donothing} % no {}\do\do ! \def\gobblespacetokens {\afterassignment\nexttoken\let\nexttoken=} %D \macros %D {verbatimargument} %D %D As the name says, this macro converts its argument to a %D (rather safe) string. \def\verbatimstring#1% {\convertargument#1\to\ascii\ascii} %D These are needed in ordinal number conversions: \def\lastdigit#1% {\@EA\thelastdigit\number#1\relax} \def\thelastdigit#1#2% {\ifx#2\relax#1\else\@EA\thelastdigit\@EA#2\fi} \def\lasttwodigits#1% {\@EA\thelasttwodigits\@EA0\number#1\relax} \def\thelasttwodigits#1#2#3% 0 dig ... \relax {\ifx#3\relax#1#2\else\@EA\thelasttwodigits\@EA#2\@EA#3\fi} %D \macros %D {serializecommalist} %D %D Concatenate commalists: \def\serializecommalist[#1]% {\let\serializedcommalist\empty \def\docommand##1{\edef\serializedcommalist{\serializedcommalist##1}}% \processcommacommand[#1]\docommand} %D \macros %D {purenumber} %D %D Sometimes we need control over when \TEX\ stops reading a %D number, especially in full expandable macros where using %D \type {\relax} would lead to disasters. %D %D \starttyping %D \ifodd\purenumber{...}\space ... \else ... \fi %D \stoptyping %D %D Here we use a space as number delimiter in combination %D with a space- and relax-less \type {\purenumber}. This %D macro works ok with \type {\the}, \type {\number} as well %D as \ETEX's \type {\numexpr}. \def\purenumber#1{\@EA\firstofoneargument\@EA{\number#1}} %D \macros %D {filterfromvalue} %D %D \starttyping %D \setvalue{xx}{{A}{B}{C}} %D %D \filterfromvalue{xx}{3}{3} %D \filterfromvalue{xx}{3}{2} %D \filterfromvalue{xx}{3}{1} %D \stoptyping %D %D An alternative is to store 'max' in the list, say: %D %D \starttyping %D \setvalue{xx}{3{A}{B}{C}} %D %D \filterfromvalues{3}{xx}{3} %D \filterfromvalues{3}{xx}{2} %D \filterfromvalues{3}{xx}{1} %D \stoptyping %D %D I'll implement this when I'm in \quotation {writing dirty %D macros mood}. \def\dofilterfromstr#1#2% max n {\ifcase#1\or \ifcase#2\or \strippedcsname\firstofoneargument \else \strippedcsname\gobbleoneargument \fi \or \ifcase#2\or \strippedcsname\firstoftwoarguments \or \strippedcsname\secondoftwoarguments \else \strippedcsname\gobbletwoarguments \fi \or \ifcase#2\or \strippedcsname\firstofthreearguments \or \strippedcsname\secondofthreearguments \or \strippedcsname\thirdofthreearguments \else \strippedcsname\gobblethreearguments \fi \or \ifcase#2\or \strippedcsname\firstoffourarguments \or \strippedcsname\secondoffourarguments \or \strippedcsname\thirdoffourarguments \or \strippedcsname\fourthoffourarguments \else \strippedcsname\gobblefourarguments \fi \or \ifcase#2\or \strippedcsname\firstoffivearguments \or \strippedcsname\secondoffivearguments \or \strippedcsname\thirdoffivearguments \or \strippedcsname\fourthoffivearguments \or \strippedcsname\fifthoffivearguments \else \strippedcsname\gobblefivearguments \fi \fi} \def\filterfromvalue#1#2#3% value max n {\@EA\@EAEAEA\csname % we use the fact that an \@EA\ifx\csname#1\endcsname\relax % undefined cs has become \relax \strippedcsname\gobbleoneargument % which we then gobble here \else \dofilterfromstr{#2}{#3}% \fi \endcsname\csname#1\endcsname} \def\filterfromnext#1#2% max n {..}{..}{..}{..} {\csname\dofilterfromstr{#1}{#2}\endcsname} %D \macros %D {definemeasure} %D %D \starttyping %D \definemeasure[mywidth][\dimexpr(\textwidth-1cm)] %D %D ... \measure{mywidth} ... %D \stoptyping \def\??dm{@@dm} % brrr \def\definemeasure {\dodoubleargument\dodefinemeasure} \def\dodefinemeasure[#1][#2]% {\setvalue{\??dm#1}{#2}} % #2 could be omitted, but we want to support spaces % % \setmeasure {x} {1cm} % \setmeasure {xx} {1cm} % \setmeasure {xxx}{1cm} \def\setmeasure #1#2{\setvalue{\??dm#1}{#2}} % quick way \def\setemeasure#1#2{\setevalue{\??dm#1}{#2}} % quick way \def\setgmeasure#1#2{\setgvalue{\??dm#1}{#2}} % quick way \def\setxmeasure#1#2{\setxvalue{\??dm#1}{#2}} % quick way \def\measure#1% {\ifcsname\??dm#1\endcsname\csname\??dm#1\endcsname\else\zeropoint\fi} %D \macros %D {doifdimensionelse} %D %D This is a dirty one: we simply append a unit and discard it when needed. \def\doifdimensionelse#1% {\afterassignment\dodoifdimensionelse\scratchdimen#1pt\relax} \def\dodoifdimensionelse#1% {\ifx#1\relax \expandafter\secondoftwoarguments \else % #1=p ... t\relax \expandafter\thirdoffourarguments \fi} %D \macros %D {comparedimension,comparedimensioneps} %D %D This is a dirty one: we simply append a unit and discard it when needed. \newdimen\roundingeps \roundingeps=10sp \def\comparedimension#1#2% {\chardef\compresult \ifdim#1<#2% \zerocount \else\ifdim#1<#2% \plusone \else \plustwo \fi\fi} \beginETEX \def\comparedimensioneps#1#2% {\chardef\compresult \ifdim\dimexpr#1-#2\relax<\roudingeps \zerocount \else\ifdim\dimexpr#2-#1\relax<\roudingeps \zerocount \else\ifdim#1<#2% \plusone \else \plustwo \fi\fi\fi} \endETEX \beginTEX \newdimen\comparedimen \def\comparedimensioneps#1#2% {\comparedimen#1\advance\comparedimen-#2\relax \chardef\compresult \ifdim\comparedimen<\roudingeps \zerocount \else\ifdim-\comparedimen<\roudingeps \zerocount \else\ifdim#1<#2% \plusone \else \plustwo \fi\fi\fi} \endTEX \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-mat.mkiv0000644000175000017500000006661412130411274024323 0ustar norbertnorbert%D \module %D \module %D [ file=strc-mat, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Math Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Math Numbering} \registerctxluafile{strc-mat}{1.001} % -- we have potential for captions % -- this module will use the commandhandler % -- key/value pairs will be added (I have no time now) \unprotect \setupformulas [%\c!way=, %\c!blockway=, %\c!sectionnumber=, %\c!conversion=\v!numbers, %\c!numberstyle=, %\c!numbercolor=, %\c!numbercommand=, %\c!margin=, %\c!align=, %\c!separator=, %\c!grid=, \c!location=\v!right, \c!left=(, \c!right=), \c!expansion=\v!yes, % maybe automatically \c!spacebefore=\v!big, \c!spaceafter=\formulaparameter\c!spacebefore, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!indentnext=\v!no, \c!alternative=\s!default, \c!strut=\v!no, \c!distance=\emwidth] \setupsubformulas % subformulas could be last in chain [\c!indentnext=\formulaparameter\c!indentnext] \definecounter % one ? [\v!formula] \defineconversionset [\v!formula] [numbers,characters] % no \v! ? \installcounterassociation{formula} \registerformulacounter\v!formula % currently we only have one \appendtoks \synchronizeformulacounters \to \everysetupformula % \appendtoks % \synchronizeformulacounters % \to \everydefineformula \setupformulas [\c!numberconversionset=\v!formula] % why forgotten \appendtoks \normalexpanded{\definelist[\currentformula]}% is expansion needed? \setuevalue{\e!start\currentformula\v!formula}{\strc_formulas_start_formula{\currentformula}}% \setuevalue{\e!stop \currentformula\v!formula}{\strc_formulas_stop_formula}% \to \everydefineformula \definelist[\v!formula] \setuvalue{\e!start\v!formula}{\strc_formulas_start_formula{}} \setuvalue{\e!stop \v!formula}{\strc_formulas_stop_formula} \let\strc_formulas_start_formula\relax % defined later \let\strc_formulas_stop_formula \relax % defined later \unexpanded\def\defineformulaalternative % this might change ... start and stop can become keys {\dotripleargument\strc_formulas_define_alternative} % to the general define .. s!startcommand \def\strc_formulas_define_alternative[#1][#2][#3]% {\setvalue{\e!start#1\v!formula}{#2}% \setvalue{\e!stop #1\v!formula}{#3}} % sp = single line paragraph sd = single line display % mp = multi line paragraph md = multy line display \defineformulaalternative[\s!default][\startdisplaymath][\stopdisplaymath] \defineformulaalternative[\s!single] [\startdisplaymath][\stopdisplaymath] \defineformulaalternative[\s!multi] [\startdisplaymath][\stopdisplaymath] \defineformula [sp] [\c!spacebefore=\v!none, \c!spaceafter=\v!none, \c!indentnext=\v!no, \c!alternative=\s!single] \defineformula [sd] [\c!spacebefore=\v!none, \c!spaceafter=\v!none, \c!indentnext=\v!yes, \c!alternative=\s!single] \defineformula [mp] [\c!indentnext=\v!no, \c!alternative=\s!multi] \defineformula [md] [\c!indentnext=\v!yes, \c!alternative=\s!multi] \newtoks\everyresetformulas \appendtoks \let\currentformula\empty % to be checked: \to \everyresetformulas % implementation \unexpanded\def\strc_formulas_store_number#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float) {\settrue\c_strc_formulas_handle_number \strc_counters_register_component {formula}% \setupcurrentformula \formulaparameter \detokenizedformulaparameter \relax \relax \relax [\c!name=\v!formula,\s!counter=\v!formula,% \s!hascaption=\v!yes,\s!hastitle=\v!yes,\s!hasnumber=\v!yes,%\s!haslevel=#6,% \c!reference=#1,\c!title=\namedformulaentry,\c!bookmark=]% [#2]% \glet\namedformulaentry\empty % \relax \globallet#3\m_strc_counters_last_registered_index \globallet#4\m_strc_counters_last_registered_synchronize \globallet#5\m_strc_counters_last_registered_attribute} % modes: 0=unset, 1=forced, 2=none, 3=reference \newconstant\c_strc_formulas_place_number_mode \newconstant\c_strc_formulas_number_mode \newconstant\c_strc_formulas_sub_number_mode \newconstant\c_strc_formulas_nested_number_mode \appendtoks \c_strc_formulas_place_number_mode \zerocount \c_strc_formulas_number_mode \zerocount \c_strc_formulas_sub_number_mode \zerocount \c_strc_formulas_nested_number_mode\zerocount \to \everyresetformulas \newconditional\c_strc_formulas_handle_number \newconditional\c_strc_formulas_increment \newconditional\c_strc_formulas_inside_place \newconditional\c_strc_formulas_inside_place_sub \newconditional\c_strc_formulas_inside_formulas \newconditional\c_strc_formulas_inside_formulas_sub \appendtoks \global\setfalse\c_strc_formulas_inside_place \global\setfalse\c_strc_formulas_inside_place_sub \to \everyresetformulas \def\strc_formulas_place_numbering % place formula {\settrue\c_strc_formulas_handle_number \strc_formulas_check_reference\c_strc_formulas_place_number_mode\currentplaceformulareference \glet\strc_formulas_place_number\strc_formulas_place_number_indeed \glet\strc_formulas_place_number_nested\strc_formulas_place_number_nested_indeed} \def\strc_formulas_handle_number % formulas {\strc_formulas_check_reference\c_strc_formulas_number_mode\currentformulareference} \def\strc_formulas_handle_sub_number_indeed % sub formulas {\strc_formulas_check_reference\c_strc_formulas_sub_number_mode\currentsubformulasreference \strc_counters_increment\v!formula \strc_formulas_store_number \currentsubformulasreference \empty \currentsubformulasnumber \currentsubformulassynchronize \currentsubformulasattribute} \def\strc_formulas_handle_sub_number % sub formulas {\iftrialtypesetting \strc_counters_save\v!formula \strc_formulas_handle_sub_number_indeed \strc_counters_restore\v!formula \else \strc_formulas_handle_sub_number_indeed \fi} \let\strc_formulas_reference_trace\relax \let\strc_formulas_reference_show \relax % \def\strc_formulas_reference_trace % {\rlap{\hbox{\quad\tt\txx[% % \number\c_strc_formulas_place_number_mode,% % \number\c_strc_formulas_number_mode,% % \number\c_strc_formulas_sub_number_mode,% % \number\c_strc_formulas_nested_number_mode % ]}}} % \def\strc_formulas_reference_show % {\writestatus{\v!formula}% % {place: \number\c_strc_formulas_place_number_mode,\space % formula: \number\c_strc_formulas_number_mode,\space % subformula: \number\c_strc_formulas_sub_number_mode,\space % nested: \number\c_strc_formulas_nested_number_mode]}} \unexpanded\def\placecurrentformulanumber {\rm % nodig ? \doif{\formulaparameter\c!location}\v!right{\hskip\formulaparameter\c!distance}% \formulaparameter\c!numbercommand {\useformulastyleandcolor\c!numberstyle\c!numbercolor \strut \formulaparameter\c!left \namedtaggedlabeltexts \t!formulalabel \v!formula \t!formulanumber\v!formula {\ignorespaces\strc_formulas_place_current_number\removeunwantedspaces}% \formulaparameter\c!right}% \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}} \unexpanded\def\strc_formulas_place_current_number {\strc_formulas_handle_current_references \labeltexts\currentformula{\convertedcounter[\v!formula][]}} % \def\theboxdestinationattribute#1{\iflocation\ifx#1\relax\else\ifx#1\empty\else attr \destinationattribute#1\fi\fi\fi} % \def\thedestinationattribute #1{\iflocation\ifx#1\relax\else\ifx#1\empty\else \attribute\destinationattribute#1\fi\fi\fi} \def\theformuladestinationattribute#1% {\iflocation\ifx#1\relax\else\ifx#1\empty\else \attribute\destinationattribute#1% \glet#1\relax \fi\fi\fi} \let\currentplaceformulaattribute\relax \let\currentformulaattribute \relax \let\currentsubformulaattribute \relax \let\currentformulasattribute \relax \let\currentplaceformulanumber\relax \let\currentformulanumber \relax \let\currentsubformulanumber \relax \let\currentformulasnumber \relax \let\currentformulasreference \empty \let\currentformulareference \empty \let\currentsubformulareference \empty \let\currentnestedformulareference\empty \appendtoks \glet\currentformulasreference \empty \glet\currentformulareference \empty \glet\currentsubformulareference \empty \glet\currentnestedformulareference\empty \to \everyresetformulas \let\currentformulassuffix \empty \let\currentformulasuffix \empty \let\currentsubformulasuffix \empty \let\currentnestedformulasuffix\empty \appendtoks \glet\currentformulassuffix \empty \glet\currentformulasuffix \empty \glet\currentsubformulasuffix \empty \glet\currentnestedformulasuffix\empty \to \everyresetformulas \let\currentplaceformulasynchronize\relax \let\currentformulasynchronize \relax \let\currentsubformulasynchronize \relax \let\currentformulassynchronize \relax \appendtoks \glet\currentplaceformulasynchronize \relax \glet\currentformulassynchronize \relax \glet\currentsubformulassynchronize \relax \glet\currentnestedformulasynchronize\relax \to \everyresetformulas % currently we do the number, some day we will do the (sub) formula \def\strc_formulas_handle_current_references {\strc_formulas_reference_show \ifnum\c_strc_formulas_place_number_mode=\plusthree \strc_formulas_store_number \currentplaceformulareference \empty \currentplaceformulanumber \currentplaceformulasynchronize \currentplaceformulaattribute \currentplaceformulasynchronize \glet\currentplaceformulasynchronize\relax \theformuladestinationattribute\currentplaceformulaattribute \fi \ifnum\c_strc_formulas_number_mode=\plusthree \strc_formulas_store_number \currentformulasreference \empty \currentformulasnumber \currentformulassynchronize \currentformulasattribute \currentformulassynchronize \glet\currentformulassynchronize\relax \theformuladestinationattribute\currentformulasattribute \fi \ifnum\c_strc_formulas_sub_number_mode=\plusthree \currentsubformulassynchronize \glet\currentsubformulassynchronize\relax \fi \ifnum\c_strc_formulas_nested_number_mode=\plusthree \strc_formulas_store_number \currentnestedformulareference \empty \currentnestedformulanumber \currentnestedformulasynchronize \currentnestedformulaattribute \currentnestedformulasynchronize \glet\currentnestedformulasynchronize\relax \theformuladestinationattribute\currentnestedformulaattribute \fi} % needs checking ... too many: \def\strc_formulas_handle_numbering_indeed {\strc_counters_increment\v!formula \doiftext\currentplaceformulasuffix{\strc_counters_setown_sub\v!formula\plustwo\currentplaceformulasuffix}% \placecurrentformulanumber} \def\strc_formulas_handle_numbering {\iftrialtypesetting \strc_counters_save\v!formula \strc_formulas_handle_numbering_indeed \strc_counters_restore\v!formula \else \strc_formulas_handle_numbering_indeed \fi} \def\strc_formulas_handle_sub_numbering_indeed {\let\strc_formulas_handle_sub_numbering\relax % else error: see math/numbering-001.tex \doiftextelse\currentsubformulasuffix {\strc_counters_setown_sub\v!formula\plustwo\currentsubformulasuffix} {\strc_counters_increment_sub\v!formula\plustwo}% \placecurrentformulanumber} \def\strc_formulas_handle_sub_numbering {\iftrialtypesetting \strc_counters_save\v!formula \strc_formulas_handle_sub_numbering_indeed \strc_counters_restore\v!formula \else \strc_formulas_handle_sub_numbering_indeed \fi} \def\strc_formulas_number_indeed {\ifconditional\c_strc_formulas_handle_number \hbox\bgroup % main counter \ifconditional\c_strc_formulas_inside_formulas_sub % nothing \else \ifcase\c_strc_formulas_number_mode \ifcase\c_strc_formulas_place_number_mode \strc_formulas_handle_numbering \or \strc_formulas_handle_numbering \or % nothing \or \strc_formulas_handle_numbering \fi \or \strc_formulas_handle_numbering \or % nothing \or \strc_formulas_handle_numbering \fi \fi % subcounter \ifconditional\c_strc_formulas_inside_formulas_sub \ifcase\c_strc_formulas_sub_number_mode % nothing \or \strc_formulas_handle_sub_numbering \or % nothing \or \strc_formulas_handle_sub_numbering \fi \fi \strc_formulas_reference_trace \egroup \fi} \installstructurelistprocessor\v!formula % to be checked ... {\let\currentlistentrynumber \structurelistgenericnumber \let\currentlistentrytitle \structurelistgenerictitle \let\currentlistentrypagenumber\structurelistpagenumber \strc_lists_apply_renderingsetup} \newif\ifinformula %D We need a hook into the plain math alignment macros %D %D \starttyping %D \displaylines %D \eqalignno %D \eqalignno %D \stoptyping %D %D Otherwise we get a missing \type {$$} error reported. \unexpanded\def\resetdisplaymatheq % when used? {\let\normalleqno\gobbleoneargument \let\leqno\gobbleoneargument \let\normalreqno\gobbleoneargument \let\eqno \gobbleoneargument \let\strc_formulas_place_number\relax} %D \macros %D {startsubformulas} % \placeformula % \startsubformulas[Maxwell] % \startformulas % \startformula \startalign % \NC \nabla\cdot\bf E \NC = \frac{\rho}{\varepsilon_0} \NR[Maxwell 1] % \NC \nabla\times\bf E \NC = - \frac{\partial\bf B}{\partial t} \NR[Maxwell II] % \stopalign \stopformula % \startformula \startalign % \NC \nabla\cdot \bf B \NC = 0 \NR[Maxwell III] % \NC \nabla\times\bf B \NC = \mu_0{\bf j}+\varepsilon_0\mu_0\frac{\partial\bf E}{\partial t} \NR[Maxwell IV] % \stopalign \stopformula % \stopformulas % \stopsubformulas % % Maxwell : \in [Maxwell] and II : \in [Maxwell II] %D Tricky stuff: \newdimen\lastlinewidth \abovedisplayskip \zeropoint \abovedisplayshortskip \zeropoint % evt. 0pt minus 3pt \belowdisplayskip \zeropoint \belowdisplayshortskip \zeropoint % evt. 0pt minus 3pt \predisplaypenalty \zerocount \postdisplaypenalty \zerocount % -5000 gaat mis, zie penalty bij \paragraaf % we don't use the skip's \unexpanded\def\strc_formulas_forget_display_skips {\abovedisplayskip \zeropoint \belowdisplayskip \zeropoint \abovedisplayshortskip\zeropoint \belowdisplayshortskip\zeropoint} % \def\predisplaysizethreshhold{2\emwidth} % was 3\emwidth \newdimen\d_strc_formulas_display_skip_left \newdimen\d_strc_formulas_display_skip_right \newdimen\d_strc_formulas_display_margin_left \newdimen\d_strc_formulas_display_margin_right \newdimen\d_strc_formulas_display_pre_threshold \newskip \d_strc_formulas_display_skip_par \unexpanded\def\beforedisplayspace {\edef\p_spacebefore{\formulaparameter\c!spacebefore}% \ifx\p_spacebefore\v!none \else \blank[\p_spacebefore]% \fi} \unexpanded\def\afterdisplayspace {\edef\p_spaceafter{\formulaparameter\c!spaceafter}% \ifx\p_spaceafter\v!none \else \blank[\p_spaceafter]% \fi} \unexpanded\def\setdisplaydimensions {\displayindent\d_strc_formulas_display_skip_left \advance\displayindent\d_strc_formulas_display_margin_left \displaywidth\hsize %\setlocalhsize %\displaywidth\localhsize \ifdim\hangindent>\zeropoint \advance\displayindent\hangindent \else \advance\displaywidth\hangindent \fi \advance\displaywidth\dimexpr-\displayindent-\d_strc_formulas_display_skip_right-\d_strc_formulas_display_margin_right\relax \hsize\displaywidth} % new, else overfull in itemize \unexpanded\def\strc_formulas_start_formula#1% {\dodoubleempty\strc_formulas_start_formula_indeed[#1]} % \newskip\formulastrutht % \newskip\formulastrutdp %D \startbuffer %D \startformula[9pt] x = 1 \stopformula %D \startformula[7pt] x = 1 \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\strc_formulas_start_formula_indeed[#1][#2]% setting leftskip adaption is slow ! {\bgroup % HERE \def\currentformula{#1}% \dostarttagged\t!formula\currentformula \the\everybeforedisplayformula \d_strc_formulas_display_skip_par\parskip\relax %\formulastrutdp\strutdepth %\formulastrutht\strutheight \edef\p_option {\formulaparameter\c!option}% \edef\p_margin {\formulaparameter\c!margin}% \edef\p_bodyfont{#2}% %\ifx\p_bodyfont\empty % \edef\p_bodyfont{\formulaparameter\c!bodyfont}% %\fi \ifx\p_bodyfont\empty \else \switchtoformulabodyfont[#2]% \fi \parskip\d_strc_formulas_display_skip_par\relax \ifx\p_option\v!middle \d_strc_formulas_display_skip_left \zeropoint \d_strc_formulas_display_skip_right\zeropoint \else \d_strc_formulas_display_skip_left \leftskip \d_strc_formulas_display_skip_right\rightskip \fi \d_strc_formulas_display_margin_left \formulaparameter\c!leftmargin \relax \d_strc_formulas_display_margin_right\formulaparameter\c!rightmargin\relax \ifx\p_margin\empty \else \dosetleftskipadaption\p_margin \d_strc_formulas_display_margin_left\leftskipadaption \fi \let\strc_formulas_start_formula\strc_formulas_start_formula_nested %\freezedimenmacro\predisplaysizethreshhold \strc_formulas_forget_display_skips \getvalue{\e!start\formulaparameter\c!alternative\v!formula}} \unexpanded\def\strc_formulas_start_formula_nested#1% {\bgroup \let\strc_formulas_stop_formula\strc_formulas_stop_formula_nested \dostarttagged\t!subformula} \unexpanded\def\strc_formulas_stop_formula_nested {\dostoptagged \egroup} % tagging of formulanumbers is not ok (we get two display maths blobs) \unexpanded\def\strc_formulas_stop_formula {\dostarttagged\t!formulacaption\empty \strc_formulas_place_number \dostoptagged \dostarttagged\t!formulacontent\empty \getvalue{\e!stop\formulaparameter\c!alternative\v!formula}% \dostoptagged \dostoptagged \nonoindentation \useindentnextparameter\formulaparameter \egroup \hangafter\minusone % added for side floats \hangindent\zeropoint % added for side floats \setfalse\c_strc_formulas_handle_number \the\everyresetformulas \dorechecknextindentation} % here ? % experiment: \appendtoks \edef\p_grid{\formulaparameter\c!grid}% \ifx\p_grid\empty \else \spac_grids_snap_value_auto\p_grid \fi \to \everybeforedisplayformula \unexpanded\def\switchtoformulabodyfont {\switchtobodyfont} \setuvalue{\v!formula}{\dosingleempty\strc_formulas_formula} \def\strc_formulas_formula[#1]#2% todo: tagged {\begingroup \edef\p_bodyfont{#1}% \ifx\p_bodyfont\empty \else \switchtoformulabodyfont[\p_bodyfont]% \fi % not : \def\strc_formulas_formula[##1]##2{\mathematics{##2}}% \mathematics{#2}% \endgroup} %D \starttyping %D % test \par % no preceding hlist %D % $$x$$ % preceding hlist %D % \noindent $$x$$ % no preceding hlist %D \startformula x \stopformula % now has \noindent (in mkii we messed with baselineskip) %D \stoptyping \unexpanded\def\startdisplaymath {\bgroup \par \informulatrue \beforedisplayspace \par \ifvmode \prevdepth-\maxdimen % texbook pagina 79-80 \fi \noindent % else funny hlist with funny baselineskip $$% \Ustartdisplaymath \setdisplaydimensions %\setpredisplaysize \startinnermath} \unexpanded\def\stopdisplaymath {\stopinnermath $$% \Ustopdisplaymath \par \afterdisplayspace \par \egroup} % already defined % % \let\startinnermath\empty % \let\stopinnermath \empty % \defineformulaalternative[multi][\begindmath][\enddmath] % % \fakewords{20}{40}\epar % \placeformula {a} $$ \fakespacingformula $$ % \fakewords{20}{40}\epar % \placeformula {b} \startformule \fakespacingformula \stopformule % \placeformula {b} \startformule \fakespacingformula \stopformule % \fakewords{20}{40}\epar % \placeformula {c} \startmdformule \fakespacingformula \stopmdformule % \placeformula {c} \startmdformule \fakespacingformula \stopmdformule % \fakewords{20}{40}\epar % \placeformula {d} \startmpformule \fakespacingformula \stopmpformule % \placeformula {d} \startmpformule \fakespacingformula \stopmpformule % \fakewords{20}{40}\epar % \placeformula {e} \startsdformule \fakespacingformula \stopsdformule % \placeformula {e} \startsdformule \fakespacingformula \stopsdformule % \fakewords{20}{40}\epar % \placeformula {f} \startspformule \fakespacingformula \stopspformule % \placeformula {f} \startspformule \fakespacingformula \stopspformule % \fakewords{20}{40} \unexpanded\def\startsubformulas {\dosingleempty\strc_formulas_start_sub_formulas} \def\strc_formulas_start_sub_formulas[#1]% {\edef\currentsubformulasreference{#1}% \global\settrue\c_strc_formulas_inside_formulas_sub \strc_formulas_handle_sub_number} \unexpanded\def\stopsubformulas {\nonoindentation \useindentnextparameter\subformulaparameter \the\everyresetformulas % to be checked \global\setfalse\c_strc_formulas_inside_formulas_sub \dorechecknextindentation} % here ? %D Named subformulas (to be redone) \unexpanded\def\startnamedsubformulas {\dosingleempty\strc_formulas_start_named_sub_formulas} \def\strc_formulas_start_named_sub_formulas[#1]#2% {\setformulalistentry{#2}% \startsubformulas[#1]} \unexpanded\def\stopnamedsubformulas {\stopsubformulas} %D Experimental goodie: %D %D \startbuffer %D \placelist[formula][criterium=text] \blank[2*big] %D \placenamedformula[one]{first} \startformula a = 1 \stopformula \endgraf %D \placeformula \startformula a = 2 \stopformula \endgraf %D \placenamedformula {second} \startformula a = 3 \stopformula \endgraf %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\startformulas {\dosingleempty\strc_formulas_start_formulas} \def\strc_formulas_start_formulas[#1]#2\stopformulas % new / to be internationalized {\bgroup \dostarttagged\t!formulaset\empty \global\settrue\c_strc_formulas_inside_formulas \edef\currentformulasreference{#1}% \strc_formulas_handle_number \let\currentformula\empty \strc_formulas_forget_display_skips \startdisplaymath \setlocalhsize \unexpanded\def\startformula##1\stopformula {\advance\scratchcounter\plusone}% \scratchcounter\zerocount #2% preroll \ifcase\scratchcounter\else \divide \hsize \scratchcounter \fi \hbox to \localhsize \bgroup \hss \let\startformula\strc_formulas_nested_formula_start \let\stopformula \strc_formulas_nested_formula_stop #2% \egroup \stopdisplaymath \global\setfalse\c_strc_formulas_inside_formulas \dostoptagged \egroup \the\everyresetformulas \hangafter\minusone % added for side floats \hangindent\zeropoint} % added for side floats \unexpanded\def\strc_formulas_nested_formula_start {\Ustartmath \vcenter\bgroup \vskip-\strutdepth \Ustartdisplaymath} \unexpanded\def\strc_formulas_nested_formula_stop {\Ustopdisplaymath \egroup \Ustopmath \hss} % place \def\m_strc_formulas_flag_inhibit{-} \def\m_strc_formulas_flag_force {+} \def\strc_formulas_check_reference#1#2% {#1\unless\ifx\namedformulaentry\empty % \relax % new 29/8/2010 \plusthree \else\ifx#2\empty \zerocount \else\ifx#2\m_strc_formulas_flag_force \plusone \else\ifx#2\m_strc_formulas_flag_inhibit \plustwo \else \plusthree \fi\fi\fi\fi} \unexpanded\def\formulanumber {\strc_formulas_number} % for the moment \def\strc_formulas_number {\dosingleempty\strc_formulas_number_again} \def\strc_formulas_number_again[#1]% {\def\currentformulareference{#1}% \dosinglegroupempty\strc_formulas_number_indeed} \unexpanded\def\placeformula {\global\settrue\c_strc_formulas_inside_place \settrue\c_strc_formulas_increment \dosingleempty\strc_formulas_place} \unexpanded\def\placesubformula {\global\settrue\c_strc_formulas_inside_place_sub \setfalse\c_strc_formulas_increment \dosingleempty\strc_formulas_place} \def\strc_formulas_place[#1]% {\def\currentplaceformulareference{#1}% \let\currentplaceformulasuffix\empty \doifnextbgroupelse\strc_formulas_place_yes\strc_formulas_place_nop\strc_formulas_place_nop} % [ref]{} \def\strc_formulas_place_yes#1% {\def\currentplaceformulasuffix{#1}% \strc_formulas_place_nop} \def\strc_formulas_place_nop {\doifnextcharelse$\strc_formulas_place_pickup\strc_formulas_place_indeed} % [ref]$$ [ref]\start \def\strc_formulas_place_indeed {\strc_formulas_place_numbering} \def\strc_formulas_place_pickup$$#1$$% {\strc_formulas_place_numbering \strc_formulas_start_formula{}#1\strc_formulas_stop_formula} \let\startplaceformula\placeformula \let\stopplaceformula \relax % to be checked \let\strc_formulas_place_number \relax \let\strc_formulas_place_number_nested\gobbletwoarguments \def\strc_formulas_place_number_nested_indeed#1#2% {\def\currentnestedformulareference{#1}% \def\currentnestedformulasuffix{#2}% \glet\strc_formulas_place_number\relax \strc_formulas_check_reference\c_strc_formulas_nested_number_mode\currentnestedformulareference \ifcase\c_strc_formulas_nested_number_mode % nothing \or \strc_formulas_number % hm, looks ahead for [] \or % nothing \or \strc_formulas_number % hm, looks ahead for [] \fi} \def\strc_formulas_place_number_indeed {\glet\strc_formulas_place_number\relax \doifelse{\formulaparameter\c!location}\v!left {\normalleqno{\strc_formulas_number_indeed}} {\normalreqno{\strc_formulas_number_indeed}}} % todo \unexpanded\def\placenamedformula {\dosingleempty\strc_formulase_place_named} \def\strc_formulase_place_named {\iffirstargument \expandafter\strc_formulase_place_named_yes \else \expandafter\strc_formulase_place_named_nop \fi} \def\strc_formulase_place_named_yes[#1]#2% {\setformulalistentry{#2}% \placeformula[#1]} \def\strc_formulase_place_named_nop[#1]#2% {\setformulalistentry{#2}% \placeformula} \let\namedformulaentry\empty % \relax % this will become a key/value so that we can do bookmarks \unexpanded\def\setformulalistentry#1% {\gdef\namedformulaentry{#1}} \protect \endinput % \abovedisplayshortskip0pt \belowdisplayshortskip0pt \abovedisplayskip0pt \belowdisplayskip0pt \forgetall % % test \par $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % test \par $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % test plus \par \prevdepth \maxdimen $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % test minus \par \prevdepth-\maxdimen $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % % \parskip\baselineskip % % test \par $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % test \par $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % test plus \par \prevdepth \maxdimen $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par % test minus \par \prevdepth-\maxdimen $$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$ \par test \par context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-05.tex0000644000175000017500000001244512130411274023664 0ustar norbertnorbert%D \module %D [ file=s-pre-05, %D version=1998.12.12, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 5, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[pre-general] %D As all styles sofar, this one has the same structuring %D commands. \startmode[asintended] \setupbodyfont[ludicaot] \stopmode \setupbodyfont[14.4pt] \setupcolors [state=start] \definecolor [BackgroundColor] [s=.95] \definecolor [OrnamentColor] [r=.6,g=.7,b=.8] \setuppapersize [S6][S6] \setuplayout [width=430pt, height=400pt, header=0pt, footer=0pt, margin=0pt, backspace=25pt, topspace=25pt, rightedgedistance=20pt, rightedge=110pt] \setupinteractionscreen [option=max] \setupbackgrounds [state=repeat] \setupbackgrounds [page] [backgroundcolor=white] \setupbackgrounds [text][text] [background={HashFrameA,NextPage}, backgroundoffset=20pt] \defineoverlay [HashFrameA] [\useMPgraphic{HashFrameA}] \defineoverlay [HashFrameB] [\useMPgraphic{HashFrameB}] \setupinteraction [state=start, menu=on, color=OrnamentColor, contrastcolor=OrnamentColor] %D Watch how we use a list alternative that matches the %D menu. \setupinteractionmenu [right] [background=HashFrameB, style=smallbold, frame=off, offset=10pt, height=35pt, before=, after=, inbetween=\endgraf, width=\rightedgewidth] \startinteractionmenu[right] \placelist [Topic] [criterium=all, alternative=right, maxwidth=.8\rightedgewidth, interaction=all, before=, after=] \vfill \setupinteractionmenu [right] [height=30pt] \but [CloseDocument] Close \\ \stopinteractionmenu \setupwhitespace [big] \setupblank [big] %D \macros %D {TitlePage} %D %D Now the main layout and navigational definitions are %D done, it makes sense to define and tune some structuring %D commands. First we build the titlepage. \defineoverlay [TitleGraphic] [\useMPgraphic{TitleGraphic}] \defineoverlay [NextPage] [\overlaybutton{forward}] \unexpanded\def\StartTitlePage {\setupbackgrounds[page][background={color,TitleGraphic,NextPage}] \setupbackgrounds[text][text][background=] \setupinteraction[menu=off] \setupinteractionbar[state=stop] \setuplayout[width=550pt,rightedge=0pt] \startstandardmakeup \switchtobodyfont[24pt] \bfd\setupinterlinespace \setupalign[middle] \vfil \let\\=\vfil} \unexpanded\def\StopTitlePage {\vfil\vfil\vfil \stopstandardmakeup \setuplayout[width=430pt,rightedge=110pt] \setupinteraction[menu=on] \setupinteractionbar[state=start] \setupbackgrounds[page][background=color] \setupbackgrounds[text][text][background={HashFrameA,NextPage}]} \unexpanded\def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D \macros %D {Topics,Subjects} %D %D Since the lists are in the menu, we don't honor list %D placement macros. \unexpanded\def\Topics#1{} \unexpanded\def\Subjects{} %D \macros %D {Topic, Nopic, Subject} %D %D Since t his style is meant for rather flat structured %D documents, only \type {\Topic} makes sense. \definehead [Topic] [chapter] \definehead [Nopic] [title] \definehead [Subject] [section] \setuphead [Topic, Nopic] [after={\blank[3*medium]}, number=no, style=\tfb, page=yes, alternative=middle] \setuphead [Subject] [after=\blank, number=no, page=yes, continue=no, style=\tfa] %D We use only one kind of base graphic, which is sligthly %D tuned for the different usage. \startMPinclusions def random_hash_frame (expr width, height, offset, linewidth ) = def delta = ((uniformdeviate .5offset) + .25offset) enddef ; x1 := offset ; y1 := offset ; x2 := width-offset ; y2 := height-offset ; drawoptions(withpen pencircle scaled linewidth withcolor \MPcolor{BackgroundColor}) ; fill z1--(x2,y1)--z2--(x1,y2)--cycle ; drawoptions(withpen pencircle scaled linewidth withcolor \MPcolor{OrnamentColor}) ; draw (x1-delta,y1)--(x2+delta,y1) ; draw (x2,y1-delta)--(x2,y2+delta) ; draw (x2+delta,y2)--(x1-delta,y2) ; draw (x1,y2+delta)--(x1,y1-delta) ; drawoptions(); setbounds currentpicture to unitsquare xscaled width yscaled height ; enddef ; \stopMPinclusions \startuseMPgraphic{HashFrameA} random_hash_frame(OverlayWidth,OverlayHeight,15pt,2pt) ; \stopuseMPgraphic \startuseMPgraphic{HashFrameB} random_hash_frame(OverlayWidth,OverlayHeight, 5pt,2pt) ; \stopuseMPgraphic \startuseMPgraphic{TitleGraphic} for i=1 upto 300 : offset := uniformdeviate 10pt ; width := 2*offset + 30pt + uniformdeviate 30pt ; height := 2*offset + 10pt + uniformdeviate 10pt ; addto currentpicture also image(random_hash_frame(width,height,offset,1pt)) shifted (uniformdeviate OverlayWidth, uniformdeviate OverlayHeight) ; endfor ; \stopuseMPgraphic \continueifinputfile{s-pre-05.tex} %D The (rather silly) demo section. \starttext \TitlePage{Title Page\\pre-fuzzy} \Topics{Some Nice Quotes} \Topic{A Few} \Subject{Knuth} \input knuth \Subject{Tufte} \input tufte \Topic{Some More} \Subject{Zapf} \input zapf \Subject{Bryson} \input bryson \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/char-act.mkiv0000644000175000017500000000634311754241457024263 0ustar norbertnorbert%D \module %D [ file=char-act, %D version=2006.12.05, %D title=\CONTEXT\ Character Support, %D subtitle=Active, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Character Support / Active} \unprotect \ifdefined\page_otr_fill_and_eject_page \else \let\page_otr_fill_and_eject_page\relax \fi % forward reference %D \macros %D {obeyedspace, obeyedtab, obeyedline, obeyedpage} %D %D We have followed Knuth in naming macros that make \SPACE, %D \NEWLINE\ and \NEWPAGE\ active and assigning them %D \type{\obeysomething}, but first we set some default values. \def\obeyedspace {\space} \def\obeyedtab {\obeyedspace} \def\obeyedline {\par} \def\obeyedpage {\page_otr_fill_and_eject_page} %D \macros %D {controlspace,setcontrolspaces} %D %D First we define \type{\obeyspaces}. When we want visible %D spaces (control spaces) we only have to adapt the definition %D of \type{\obeyedspace} to: \unexpanded\def\controlspace{\hbox{\char32}} % rather tex, we need the unicode value \unexpanded\def\normalspaces{\catcode\spaceasciicode\spacecatcode} \bgroup \catcode\spaceasciicode\activecatcode \unexpanded\gdef\obeyspaces{\catcode\spaceasciicode\activecatcode\def {\obeyedspace}} \unexpanded\gdef\setcontrolspaces{\catcode\spaceasciicode\activecatcode\def {\controlspace}} \egroup %D \macros %D {obeytabs, obeylines, obeypages,ignoretabs, ignorelines, ignorepages} %D %D Next we take care of \NEWLINE\ and \NEWPAGE\ and because we %D want to be able to typeset listings that contain \TAB, we %D have to handle those too. Because we have to redefine the %D \NEWPAGE\ character locally, we redefine the meaning of %D this (often already) active character. \expandafter\def\activeformfeedtoken{\par} %D The following indirect definitions enable us to implement %D all kind of \type{\obeyed} handlers. \unexpanded\def\obeytabs {\catcode\tabasciicode \activecatcode\expandafter\def\activetabtoken {\obeyedtab }} \unexpanded\def\obeylines {\catcode\endoflineasciicode\activecatcode\expandafter\def\activeendoflinetoken{\obeyedline}} \unexpanded\def\obeypages {\catcode\formfeedasciicode \activecatcode\expandafter\def\activeformfeedtoken {\obeyedpage}} \unexpanded\def\ignoretabs {\catcode\tabasciicode \activecatcode\expandafter\def\activetabtoken {\obeyedspace}} \unexpanded\def\ignorelines{\catcode\endoflineasciicode\activecatcode\expandafter\def\activeendoflinetoken{\obeyedspace}} \unexpanded\def\ignorepages{\catcode\formfeedasciicode \ignorecatcode} \unexpanded\def\ignoreeofs {\catcode\endoffileasciicode\ignorecatcode} %D \macros %D {naturaltextext} %D %D When one uses \ETEX, switching to normal \TEX\ is possible %D too. We also introduce a switch that can be used in the %D drivers and set in higher level shell macros. \unexpanded\def\naturaltextext#1\relax % this command will become obsolete {\begingroup \def\ascii{#1}% \setcatcodetable\ctxcatcodes \prettynaturalfont{\scantextokens\expandafter{\ascii}\ifhmode\unskip\fi}% \endgroup} \endinput \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-4.mkii0000644000175000017500000002655311754241457024273 0ustar norbertnorbert%D \module %D [ file=regi-8859-4, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-4 (North European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-4/Latin4 input encoding (regime) for West %D European languages, see also cp1257 and iso-8859-13. %D %D Usage: \type{\enableregime[8859-4]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-4] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 162 {\kkra} % 0138 LATIN SMALL LETTER KRA \defineactivetoken 163 {\Rcommaaccent} % 0156 LATIN CAPITAL LETTER R WITH CEDILLA \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\Itilde} % 0128 LATIN CAPITAL LETTER I WITH TILDE \defineactivetoken 166 {\Lcommaaccent} % 013B LATIN CAPITAL LETTER L WITH CEDILLA \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 170 {\Emacron} % 0112 LATIN CAPITAL LETTER E WITH MACRON \defineactivetoken 171 {\Gcommaaccent} % 0122 LATIN CAPITAL LETTER G WITH CEDILLA \defineactivetoken 172 {\Tstroke} % 0166 LATIN CAPITAL LETTER T WITH STROKE \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 175 {\textmacron} % 00AF MACRON \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 178 {\textogonek} % 02DB OGONEK \defineactivetoken 179 {\rcommaaccent} % 0157 LATIN SMALL LETTER R WITH CEDILLA \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\itilde} % 0129 LATIN SMALL LETTER I WITH TILDE \defineactivetoken 182 {\lcommaaccent} % 013C LATIN SMALL LETTER L WITH CEDILLA \defineactivetoken 183 {\textcaron} % 02C7 CARON \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 186 {\emacron} % 0113 LATIN SMALL LETTER E WITH MACRON \defineactivetoken 187 {\gcommaaccent} % 0123 LATIN SMALL LETTER G WITH CEDILLA \defineactivetoken 188 {\tstroke} % 0167 LATIN SMALL LETTER T WITH STROKE \defineactivetoken 189 {\Neng} % 014A LATIN CAPITAL LETTER ENG \defineactivetoken 190 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 191 {\neng} % 014B LATIN SMALL LETTER ENG \defineactivetoken 192 {\Amacron} % 0100 LATIN CAPITAL LETTER A WITH MACRON \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Iogonek} % 012E LATIN CAPITAL LETTER I WITH OGONEK \defineactivetoken 200 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Edotaccent} % 0116 LATIN CAPITAL LETTER E WITH DOT ABOVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Imacron} % 012A LATIN CAPITAL LETTER I WITH MACRON \defineactivetoken 208 {\Dstroke} % 0110 LATIN CAPITAL LETTER D WITH STROKE \defineactivetoken 209 {\Ncommaaccent} % 0145 LATIN CAPITAL LETTER N WITH CEDILLA \defineactivetoken 210 {\Omacron} % 014C LATIN CAPITAL LETTER O WITH MACRON \defineactivetoken 211 {\Kcommaaccent} % 0136 LATIN CAPITAL LETTER K WITH CEDILLA \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Uogonek} % 0172 LATIN CAPITAL LETTER U WITH OGONEK \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Utilde} % 0168 LATIN CAPITAL LETTER U WITH TILDE \defineactivetoken 222 {\Umacron} % 016A LATIN CAPITAL LETTER U WITH MACRON \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\amacron} % 0101 LATIN SMALL LETTER A WITH MACRON \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\iogonek} % 012F LATIN SMALL LETTER I WITH OGONEK \defineactivetoken 232 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\edotaccent} % 0117 LATIN SMALL LETTER E WITH DOT ABOVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\imacron} % 012B LATIN SMALL LETTER I WITH MACRON \defineactivetoken 240 {\dstroke} % 0111 LATIN SMALL LETTER D WITH STROKE \defineactivetoken 241 {\ncommaaccent} % 0146 LATIN SMALL LETTER N WITH CEDILLA \defineactivetoken 242 {\omacron} % 014D LATIN SMALL LETTER O WITH MACRON \defineactivetoken 243 {\kcommaaccent} % 0137 LATIN SMALL LETTER K WITH CEDILLA \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\uogonek} % 0173 LATIN SMALL LETTER U WITH OGONEK \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\utilde} % 0169 LATIN SMALL LETTER U WITH TILDE \defineactivetoken 254 {\umacron} % 016B LATIN SMALL LETTER U WITH MACRON \defineactivetoken 255 {\textdotaccent} % 02D9 DOT ABOVE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/font-oth.lua0000644000175000017500000000431411571377075024151 0ustar norbertnorbertif not modules then modules = { } end modules ['font-oth'] = { version = 1.001, comment = "companion to font-oth.lua (helpers)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local fonts = fonts local otf = fonts.handlers.otf -- todo: use nodemode data is available function otf.getalternate(tfmdata,k,kind,value) -- just initialize nodemode and use that (larger mem print) if value then local description = tfmdata.descriptions[k] if description then local slookups = description.slookups -- we assume only slookups (we can always extend) if slookups then local shared = tfmdata.shared local rawdata = shared and shared.rawdata if rawdata then local lookuptypes = rawdata.resources.lookuptypes if lookuptypes then local properties = tfmdata.properties -- we could cache these local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language) if validlookups then local choice = tonumber(value) or 1 -- no random here (yet) for l=1,#lookuplist do local lookup = lookuplist[l] local found = slookups[lookup] if found then local lookuptype = lookuptypes[lookup] if lookuptype == "substitution" then return found elseif lookuptype == "alternate" then return found[choice] or found[#found] else -- ignore end end end end end end end end end return k end context-2013.05.28.20130704/texmf-dist/tex/context/base/node-mig.mkiv0000644000175000017500000000346111754241457024276 0ustar norbertnorbert%D \module %D [ file=node-mig, %D version=2010.01.19, %D title=\CONTEXT\ Node Macros, %D subtitle=Inserts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Support / Migrations} %D This is very experimental and although it is used in a %D real project it mostly serves a testbed for Taco and me so %D as prelude to extending the inserts mechanism. %D %D \starttyping %D \automigrateinserts %D %D \hbox{\vbox{x\footnote{1}x\footnote{2}x\footnote{3}x}} %D \vbox{x\footnote{4}x} %D \hbox{\vbox{x\footnote{5}x}} %D %D \hbox{x} %D \hbox{x\footnote{6}x} %D \hbox{x} %D %D \starttabulate %D \NC test \NC test \footnote{test} \input tufte \NC \NR %D \NC test \NC test \footnote{test} \input tufte \NC \NR %D \NC test \NC test \footnote{test} \input tufte \NC \NR %D \NC test \NC test \footnote{test} \input tufte \NC \NR %D \NC test \NC test \footnote{test} \input tufte \NC \NR %D \NC test \NC test \footnote{test} \input tufte \NC \NR %D \stoptabulate %D \stoptyping \unprotect \registerctxluafile{node-mig}{1.001} \newtoks\everyautomigratefootnotes \newtoks\everyautomigratemarks \def\automigrateinserts{\the\everyautomigratefootnotes} % soon default but does not work (yet) for notes in captions (themselves inserts) \def\automigratemarks {\the\everyautomigratemarks} \appendtoks \let\postponenotes\relax \enableexperiments[inserts.migrate,inserts.migrate.nested]% \to \everyautomigratefootnotes \appendtoks \writestatus\m!system{migration of marks is normally not needed}% \enableexperiments[marks.migrate]% \to \everyautomigratemarks \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-pdf.mkiv0000644000175000017500000001107712130411274024254 0ustar norbertnorbert%D \module %D [ file=mlib-pdf, %D version=2008.03.25, %D title=\METAPOST\ Integrated Graphics, %D subtitle=Conversion to PDF, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % We use bit more code that needed because we want to limit the % amount of boxing. \registerctxluafile{mlib-pdf}{1.001} %D Some code is shared between MPLIB and MPS. The following variables %D are also available for introspection and other purposes. \ifdefined\MPwidth \else \newdimen\MPwidth \fi \ifdefined\MPheight \else \newdimen\MPheight \fi \ifdefined\MPllx \else \newdimen\MPllx \fi \ifdefined\MPlly \else \newdimen\MPlly \fi \ifdefined\MPurx \else \newdimen\MPurx \fi \ifdefined\MPury \else \newdimen\MPury \fi \ifdefined\MPbox \else \newbox \MPbox \fi \def\setMPboundingbox#1#2#3#4% at some point we might pass them as base or scaled points {\global\MPllx #1\onebasepoint \global\MPlly #2\onebasepoint \global\MPurx #3\onebasepoint \global\MPury #4\onebasepoint \global\MPwidth \dimexpr\MPurx-\MPllx\relax \global\MPheight\dimexpr\MPury-\MPlly\relax} \def\resetMPboundingbox {\global\MPwidth \zeropoint \global\MPheight\zeropoint \global\MPllx \zeropoint \global\MPlly \zeropoint \global\MPurx \zeropoint \global\MPury \zeropoint} \def\repositionMPboxindeed {\setbox\MPbox\hbox\bgroup \kern-\MPllx \raise-\MPlly \box\MPbox \egroup} \def\repositionMPbox {\ifzeropt\MPllx \ifzeropt\MPlly % okay \else \repositionMPboxindeed \fi \else \repositionMPboxindeed \fi} \def\finalizeMPbox {\repositionMPbox \setbox\MPbox\vbox to \MPheight\bgroup \vfill \hsize\MPwidth \smashbox\MPbox \box\MPbox \egroup \wd\MPbox\MPwidth \ht\MPbox\MPheight} \def\MPtextext#1#2#3#4#5% beware: we use a different method now (see mlib-pps) {\begingroup \setbox\MPbox\hbox{\font\temp=#1\space at #2\onebasepoint \let\c\char \temp #3}% \MPllx-#4\onebasepoint \MPlly-#5\onebasepoint \repositionMPbox \smashbox\MPbox \box\MPbox \endgroup} % MPLIB specific: \def\MPLIBtoPDF#1{\ctxlua{metapost.flushliteral(#1)}} \def\startMPLIBtoPDF#1#2#3#4% {\meta_process_graphic_figure_start \dostarttagged\t!mpgraphic\empty \naturalhbox attr \imageattribute 1 \bgroup \dousecolorparameter\s!black\forcecolorhack \setMPboundingbox{#1}{#2}{#3}{#4}% \setbox\MPbox\vbox\bgroup % \forgetall % already done elsewhere \noindent} % forces the proper cm in the backend \def\stopMPLIBtoPDF {\egroup \finalizeMPbox \box\MPbox \egroup \dostoptagged \meta_process_graphic_figure_stop} \def\MPLIBflushreset % This can (will) move to the Lua end. {\ctxlua{metapost.flushreset()}} %D Kind of special: % % test.mp: % % beginfig(1) fill fullcircle scaled 10cm withcolor red ; endfig ; % beginfig(2) draw fullcircle scaled 5cm withcolor blue ; endfig ; % beginfig(3) draw textext("just some text") ; endfig ; % % standalone pages: % % \starttext % \directMPgraphic{input "test.mp" ;} % \stoptext \let\normalstartMPLIBtoPDF\startMPLIBtoPDF \let\normalstopMPLIBtoPDF \stopMPLIBtoPDF \def\directstartMPLIBtoPDF{\startTEXpage\normalstartMPLIBtoPDF} \def\directstopMPLIBtoPDF {\normalstopMPLIBtoPDF\stopTEXpage} \unexpanded\def\directMPgraphic {\dodoublegroupempty\mlib_direct_graphic} \def\mlib_direct_graphic#1#2% makes pages (todo: make boxes) {\meta_begin_graphic_group{#1}% \let\startMPLIBtoPDF\directstartMPLIBtoPDF \let\stopMPLIBtoPDF \directstopMPLIBtoPDF \meta_start_current_graphic \forgetall \edef\p_extensions{\MPinstanceparameter\s!extensions}% \normalexpanded{\noexpand\ctxlua{metapost.graphic { instance = "\currentMPinstance", format = "\currentMPformat", data = \!!bs#2;\!!es, initializations = \!!bs\meta_flush_current_initializations\!!es, % useextensions = "\MPinstanceparameter\s!extensions", \ifx\p_extensions\v!yes extensions = \!!bs\ctxcommand{getmpextensions("\currentMPinstance")}\!!es, \fi inclusions = \!!bs\meta_flush_current_inclusions\!!es, definitions = \!!bs\meta_flush_current_definitions\!!es, figure = "all", method = "\MPinstanceparameter\c!method", }}}% \meta_stop_current_graphic \meta_end_graphic_group} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-str.mkiv0000644000175000017500000001061012130411274024274 0ustar norbertnorbert%D \module %D [ file=page-str, %D version=2010.03.13, % 2006.03.21, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Streams, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Page Streams} %D The first version of this component of \CONTEXT\ was written %D for Thomas Schmitz who asked for parallel page streams. While %D playing with the code, I decided to make it into a component %D that can be used to construct all kind of stream related %D mechanisms. Because I could apply this feature in a project, %D there is some additional code here (related to graphics). %D %D These macros were written while listening to and watching the DVD %D \quotation {Rush In Rio}. %D %D The reimplementation (or rather experimenting with the complete %D rewrite) was done while looping over \quotation {Wende Snijders %D No.9}. %D %D Remark: marknotes are gone, at least for a while. \writestatus{loading}{ConTeXt Page Macros / Page Streams} \registerctxluafile{page-str}{1.001} \unprotect \let \currentoutputstream \empty \newif \ifinoutputstream % will becoem a conditional or mode \newtoks \everyenableoutputstream \appendtoks \page_otr_command_flush_side_floats \to \everyenableoutputstream \unexpanded\def\initializeoutputstreams {\ctxlua{streams.initialize()}% \glet\initializeoutputstreams\relax} \unexpanded\def\enableoutputstream[#1]% could be \startoutputsubstream {\initializeoutputstreams \the\everyenableoutputstream \inoutputstreamtrue \xdef\currentoutputstream{#1}% \ctxlua{streams.enable("#1")}} \unexpanded\def\disableoutputstream {\inoutputstreamfalse \global\let\currentoutputstream\s!default \ctxlua{streams.disable()}} \unexpanded\def\startoutputstream[#1]% {\begingroup \initializeoutputstreams \the\everyenableoutputstream \inoutputstreamtrue \xdef\currentoutputstream{#1}% \ctxlua{streams.start("#1")}} \unexpanded\def\stopoutputstream {\ctxlua{streams.stop()}% \endgroup} \unexpanded\def\startoutputsubstream[#1]% just push/pop instead {\globalpushmacro\currentoutputstream \enableoutputstream[#1]} \unexpanded\def\stopoutputsubstream {\globalpopmacro\currentoutputstream \enableoutputstream[\currentoutputstream]} \def\flushoutputstream [#1]{\ctxlua{streams.flush("#1")}} \def\outputstreamcopy [#1]{\vbox{\ctxlua{streams.flush("#1",true)}}} \def\outputstreambox [#1]{\vbox{\ctxlua{streams.flush("#1")}}} \def\outputstreamunvcopy[#1]{\ctxlua{streams.flush("#1",true)}} \def\outputstreamunvbox [#1]{\ctxlua{streams.flush("#1")}} \def\synchronizestreams [#1]{\ctxlua{streams.synchronize("#1")}} \def\dopushoutputstream [#1]{\ctxlua{streams.push("#1")}} \unexpanded\def\pushoutputstream {\dosingleempty\dopushoutputstream} % \unexpanded\def\defineoutputstream[#1]% % {\doifundefined{otrs:#1}{\expandafter\newbox\csname otrs:#1\endcsname}} % % \def\useoutputstream[#1]% % {\writestatus{otr}{using output stream #1}% % \xdef\currentoutputstream{#1}} % % \directsetup{stream:\firstoutputstream:set} % \directsetup{stream:\firstoutputstream:top} % \directsetup{stream:\firstoutputstream:bottom} % \directsetup{stream:\firstoutputstream:reset} % Obsolete in \MKIV: % % \unexpanded\def\definemarknote % {\dodoubleempty\dodefinemarknote} % % \def\dodefinemarknote[#1][#2]{} % \def\setmarknote [#1]{\gobbleoneargument} % \def\flushmarknotes [#1]{} % \def\erasemarknotes [#1]{} \protect \endinput % \enabletrackers[streams.flushing] % % \setuplayout[grid=yes] \showgrid % % \starttext % % \input tufte % % \startoutputstream[nl] % % Wat doen we hier? % % \enableoutputstream[en] % % Are you sleeping, brother John?\footnote{xxx} % % \dorecurse{4}{x \footnote{note \recurselevel}\input tufte \par \pushoutputstream} % % \enableoutputstream[de] % % Bruder Jakob, schläfst du noch?\footnote{yyy} % % \dorecurse{4}{x \footnote{note \recurselevel}\input ward \par \pushoutputstream} % % \disableoutputstream % % \stopoutputstream % % Vader Jacob, slaap je nog?\footnote{zzz} % % \input tufte % % \synchronizestreams[en,de,nl] % % \page \flushoutputstream[en] \input knuth % \page \flushoutputstream[de] \input knuth % \page \flushoutputstream[nl] \input knuth % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-dum.mkii0000644000175000017500000000703611754241457024275 0ustar norbertnorbert%D \module %D [ file=meta-dum, %D version=2003.03.21, %D title=\METAPOST\ Graphics, %D subtitle=Dummy (External) Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This library overloads the normal external figure %D placeholder by a nicer one. %D %D \startbuffer %D \useMPlibrary[dum] %D %D \startlinecorrection %D \externalfigure[unknown-a][width=3cm,height=1cm] %D \stoplinecorrection %D %D \startlinecorrection %D \externalfigure[unknown-b][width=4cm,height=5cm] %D \stoplinecorrection %D \stopbuffer %D %D \typebuffer \getbuffer % currently preparempvariables is unable to resolve number % fractions like reduction % June 22, 2003, this definition was patched to adapt itself % to transparent colors \startuseMPgraphic{placeholder}{width,height,reduction,color} numeric w, h, d, r ; color c, b, cc ; path p ; boolean t ; t := is_transparent(\MPvar{color}) ; c := not_transparent(\MPvar{color}) ; b := not_transparent(white) ; w := \MPvar{width} ; h := \MPvar{height} ; r := \MPvar{reduction} ; d := max(w,h) ; p := unitsquare xyscaled (w,h) ; cc := r[.5c,b] ; fill p withcolor if t : transparent(1,.5,cc) else : cc fi ; for i := 1 upto 60 : cc := r[c randomized(.3,.9),b] ; fill fullcircle scaled (d/5 randomized (d/5)) shifted (center p randomized (d)) withcolor if t : transparent(1,.5,cc) else : cc fi ; endfor ; clip currentpicture to p ; \stopuseMPgraphic \definepalet [placeholder] [1=red,2=green,3=blue,4=cyan,5=magenta,6=yellow] % \newcounter \figurereplacementcycle \let\figurereplacementcycle\relax \setupexternalfigures [\c!reduction=0, \c!text=\v!yes] \let\normalexternalfigurereplacement\externalfigurereplacement \def\externalfigurereplacement#1#2#3% {\getpaletsize[placeholder]% \ifx\figurereplacementcycle\relax \getrandomnumber \figurereplacementcycle \!!plusone \paletsize \globallet \figurereplacementcycle \figurereplacementcycle \else \doglobal\increment\figurereplacementcycle \fi \ifnum\figurereplacementcycle>\paletsize \globallet\figurereplacementcycle\!!plusone \fi \weightGRAYfalse % monochrome anyway \MPcmykcolorsfalse \MPspotcolorsfalse \defineoverlay [\s!dummy] [\useMPgraphic {placeholder}% {width=\figurewidth, height=\figureheight, reduction=\@@efreduction, color=placeholder:\figurereplacementcycle}]% \expanded{\localframed [\??ef] [\c!width=\figurewidth, \c!height=\figureheight, \c!frame=\v!off, \c!strut=\v!no, \c!background=\s!dummy, \c!foregroundcolor=\s!white]}% {\doif\@@eftext\v!yes {\infofont \setupinterlinespace \dohyphens % \nohyphens \doifelse{#1}\s!dummy \!!doneafalse\!!doneatrue \doifelse{#2}\s!dummy \!!donebfalse\!!donebtrue \doifelse{#3}\s!unknown\!!donecfalse\!!donectrue \if!!donea name: \expanded{\verbatimstring{#1}}\strut\endgraf \fi \if!!doneb \if!!donea file: \else \if!!donec file: \fi \fi \expanded{\verbatimstring{#2}}\strut\endgraf \fi \if!!donec state: \expanded{\verbatimstring{#3}}\strut\endgraf \fi}}} \def\dummyfigure{\externalfigure[placeholder]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-obsolete.mkiv0000644000175000017500000000012011571377075024635 0ustar norbertnorbert\unprotect \writestatus\m!system{skipping obsolete module} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-datastrc.tex0000644000175000017500000001403411754241457024466 0ustar norbertnorbert%D \module %D [ file=m-datastrc, % was: core-dat % was core-02a %D version=1999.08.10, % 1997.03.31, %D title=\CONTEXT\ Modules, %D subtitle=Database Support, % 2A %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Database Support} \unprotect %D This module is a (limited) rewrite of the original \type %D {core-02a} module, the module that dealt with managing a %D database of addresses. The principles and methods have not %D changed; they are only generalized. %D %D A database file |<|in most cases such a base is generated %D from another one|>| is structured as follows: %D %D \starttyping %D \startrecord{tag} %D \memberofgroup{grouplist} %D \setrecordentry{name}{...} %D .... %D \stoprecord %D \stoptyping %D %D The interface to such a database is defined as follows: %D %D \starttyping %D \definerecord[class][settings] %D \setuprecord[class][settings] %D \definerecordentry[class][name] %D \stoptyping %D %D and processed by %D %D \starttyping %D \processrecords[file list][tag and/or group list] %D \stoptyping %D %D The actual processing is done by a macro assigned to \type %D {command}: %D %D \starttyping %D \setuprecord[class][command=\DoWithRecord] %D \stoptyping %D %D Given that one can ask for a field with %D %D \starttyping %D \getrecordentry{name} %D \stoptyping %D %D such a command can look like: %D %D \starttyping %D \def\DoWithRecord#1% %D {\startpacked %D \let\\=\quad %D name: \getrecordentry{name}~\getrecordentry{family name}\par %D address: \getrecordentry{postal address}\par %D \stoppacked} %D \stoptyping %D %D The argument passed is the tag. The database can look like: %D %D \starttyping %D \startrecord{hagenj} %D \memberofgroup{a,b} %D \setrecordentry{naam}{Hans} %D \setrecordentry{family name}{Hagen} %D \setrecordentry{postal address}{J. Hagen\\Ridderstraat 29\\Hasselt NL} %D \stoprecord %D %D \startrecord{ottenaf} %D \memberofgroup{a} %D \setrecordentry{name}{Ton} %D \setrecordentry{family name}{Otten} %D \setrecordentry{postal address}{A.F. Otten\\Prinsengracht 17\\Hasselt NL} %D \stoprecord %D \stoptyping %D %D The definition of this database looks like: %D %D \starttyping %D \definerecord[address][command=\DoWithRecord] %D %D \definerecordentry[address][name] %D \definerecordentry[address][family name] %D \definerecordentry[address][postal address] %D \stoptyping %D %D The actual processing is now done by (for instance): %D %D \starttyping %D \processrecords[datafile][hagenj] %D \processrecords[datafile][hagenj,offenaf] %D \processrecords[datafile][all] %D \processrecords[datafile][a] %D \processrecords[datafile][b] %D \stoptyping %D %D Of course one can reassign the command used to handle the %D records in between. % \??kt -> % \??kw -> \def\??db {@@db} \def\c!velden{velden} %\newevery \everyrecord \EveryRecord \def\definerecord {\dodoubleempty\dodefinerecord} \def\dodefinerecord[#1][#2]% {\getparameters [\??db#1] [\c!velden=, \c!command=\gobbleoneargument, #2]} \def\setuprecord {\dodoubleargument\dosetuprecord} \def\dosetuprecord[#1][#2]% {\getparameters[\??db#1][#2]}% \def\definerecordentry[#1][#2]% {\edef\recordentries{\getvalue{\??db#1\c!velden}}% \addtocommalist{#2}\recordentries \letvalue{\??db#1\c!velden}\recordentries} %D Watch out: the entries are defined global! While %D processing a record, no grouping is applied. \def\getrecordentry #1{\getvalue {\??db:#1}} \def\resetrecordentry #1{\letgvalueempty{\??db:#1}} \def\assignrecordentry#1{\setgvalue {\??db:#1}} \long\def\skiprecord#1\stoprecord {\egroup} \newif\ifrecordok \newtoks\resetrecordlist \def\processrecords {\dotripleargument\doprocessrecords} \def\doprocessrecords[#1][#2][#3]% {\bgroup \ifx\\\undefined\let\\\relax\fi \def\docommand##1% {\resetrecordentry{##1}% \appendtoks\resetrecordentry{##1}\to\resetrecordlist}% \processcommacommand[\getvalue{\??db#1\c!velden}]\docommand \let\setrecordentry\skiprecord \the\resetrecordlist \doifelse{#2}\v!all % 't Is nu eenmaal alles \recordoktrue {\doifelsenothing{#2} % of niets \recordoktrue \recordokfalse}% % zullen we maar zeggen. \ifrecordok \let\askedrecords\v!all \else \makerawcommalist[#2]\askedrecords \fi \def\checkrecord##1% {\rawdoifinsetelse{##1}{\askedrecords}{\recordoktrue}{}}% \def\presetrecord##1% {\let\setrecordentry\assignrecordentry \let\memberofgroup\gobbleoneargument \the\resetrecordlist \def\stoprecord{\dostoprecord{##1}}}% \def\memberofgroup##1% {\doifsomething{##1} {\rawprocesscommalist[##1]\checkrecord}% \ifrecordok \presetrecord{##1}% \else \expandafter\skiprecord \fi}% \def\startrecord##1% {\bgroup \ifrecordok \presetrecord{##1}% \else \checkrecord{##1}% \ifrecordok \presetrecord{##1}% \fi \fi}% \def\dostoprecord##1% {\relax \egroup %\the\everyrecord \getvalue{\??db#1\c!command}{##1}}% \showmessage\m!databases1\askedrecords \def\doprocessrecords##1% {\readjobfile{##1} {\showmessage\m!databases2{(job)}} {\readsysfile{##1} {\showmessage\m!databases3{(sys)}} {\showmessage\m!databases4{}}}}% \processcommalist[#3]\doprocessrecords \egroup} %D While writing the original implementation, I did some %D experiments with \type {%} before each entry and changing %D the category code of the comment char. Because \TEX\ scans %D the line anyway |<|this is needed because the end of line %D character can be non standard|>| this is not faster. %D %D Although this mechanism could have been combined with the %D block moving mechanism, the current implementation is %D prefered out of speed reasons. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-ans.mkii0000644000175000017500000000151011754241457024253 0ustar norbertnorbert%D \module %D [ file=java-ans, %D version=1998.06.01, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Answer Analization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startJSpreamble{Do_Check_Answer} used later function Do_Check_Answer (field, value) { if (event.value.toLowerCase()==value.toLowerCase()) { event.target.hidden = true } % { event.target.display = display.hidden } return("\040") } // funny, "" does not work \stopJSpreamble \startJScode{Check_Answer} uses {Do_Check_Answer} event.value = Do_Check_Answer(JS_S_1, JS_S_2) ; \stopJScode \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-run.lua0000644000175000017500000001166112130411274024143 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-run'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local insert = table.insert -- trace_job_status is also controlled by statistics.enable that is set via the directive system.nostatistics local trace_lua_dump = false trackers.register("system.dump", function(v) trace_lua_dump = v end) local trace_temp_files = false trackers.register("system.tempfiles", function(v) trace_temp_files = v end) local trace_job_status = true trackers.register("system.jobstatus", function(v) trace_job_status = v end) local trace_tex_status = false trackers.register("system.texstatus", function(v) trace_tex_status = v end) local report_lua = logs.reporter("system","lua") local report_tex = logs.reporter("system","status") local report_tempfiles = logs.reporter("resolvers","tempfiles") luatex = luatex or { } local luatex = luatex local startactions = { } local stopactions = { } function luatex.registerstartactions(...) insert(startactions, ...) end function luatex.registerstopactions (...) insert(stopactions, ...) end local function start_run() if logs.start_run then logs.start_run() end for i=1,#startactions do startactions[i]() end end local function stop_run() for i=1,#stopactions do stopactions[i]() end if trace_job_status then statistics.show() end if trace_tex_status then for k, v in table.sortedhash(status.list()) do report_tex("%S=%S",k,v) end end if logs.stop_run then logs.stop_run() end end local function start_shipout_page() logs.start_page_number() end local function stop_shipout_page() logs.stop_page_number() end local function report_output_pages() end local function report_output_log() end -- local function show_open() -- end -- local function show_close() -- end local function pre_dump_actions() lua.finalize(trace_lua_dump and report_lua or nil) -- statistics.savefmtstatus("\jobname","\contextversion","context.tex") end -- this can be done later callbacks.register('start_run', start_run, "actions performed at the beginning of a run") callbacks.register('stop_run', stop_run, "actions performed at the end of a run") ---------.register('show_open', show_open, "actions performed when opening a file") ---------.register('show_close', show_close, "actions performed when closing a file") callbacks.register('report_output_pages', report_output_pages, "actions performed when reporting pages") callbacks.register('report_output_log', report_output_log, "actions performed when reporting log file") callbacks.register('start_page_number', start_shipout_page, "actions performed at the beginning of a shipout") callbacks.register('stop_page_number', stop_shipout_page, "actions performed at the end of a shipout") callbacks.register('process_input_buffer', false, "actions performed when reading data") callbacks.register('process_output_buffer', false, "actions performed when writing data") callbacks.register("pre_dump", pre_dump_actions, "lua related finalizers called before we dump the format") -- comes after \everydump -- an example: local tempfiles = { } function luatex.registertempfile(name,extrasuffix) if extrasuffix then name = name .. ".mkiv-tmp" -- maybe just .tmp end if trace_temp_files and not tempfiles[name] then report_tempfiles("registering temporary file %a",name) end tempfiles[name] = true return name end function luatex.cleanuptempfiles() for name, _ in next, tempfiles do if trace_temp_files then report_tempfiles("removing temporary file %a",name) end os.remove(name) end tempfiles = { } end luatex.registerstopactions(luatex.cleanuptempfiles) -- for the moment here local synctex = false local report_system = logs.reporter("system") directives.register("system.synctex", function(v) synctex = v if v then report_system("synctex functionality is enabled!") else report_system("synctex functionality is disabled!") end synctex = tonumber(synctex) or (toboolean(synctex,true) and 1) or (synctex == "zipped" and 1) or (synctex == "unzipped" and -1) or false -- currently this is bugged: tex.synctex = synctex -- so for the moment we need: context.normalsynctex() if synctex then context.plusone() else context.zerocount() end end) statistics.register("synctex tracing",function() if synctex or tex.synctex ~= 0 then return "synctex has been enabled (extra log file generated)" end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-mkr.lua0000644000175000017500000000130112130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['attr-mkr'] = { version = 1.001, comment = "companion to attr-mkr.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local markers = nodes.markers or { } nodes.markers = markers local cache = { } local numbers = attributes.numbers local a_unknown = attributes.private("marker:unknown") table.setmetatableindex(cache,function(t,k) local k = "marker:" .. k local v = numbers[k] or a_unknown t[k] = v return v end) function markers.get(n,name) local a = cache[name] return a and n[a] or nil end context-2013.05.28.20130704/texmf-dist/tex/context/base/export-example.rng0000644000175000017500000001466211754241457025376 0ustar norbertnorbert# author : Hans Hagen, PRAGMA-ADE, Hasselt NL # copyright : PRAGMA ADE / ConTeXt Development Team # license : see context related readme files # comment : companion to context.mkiv # todo: check all content (not yet ok but a bit boring job) # todo: add attributes # todo: we need more | and less , # # validate with "rnv -c export-example.rng" namespace m = "http://www.w3.org/1998/Math/MathML" start = e_document # Because users can typeset anything the content is somewhat # unpredictable so this is just an indication of what to expect. c_everything = text | c_inline | e_verbatimblock | e_lines | e_itemgroup | e_table | e_tabulate | e_register | e_list | e_section | e_float | e_formula | e_combination c_inline = text | e_ignore | e_metadata | e_construct | e_highlight | e_verbatim | e_description | e_descriptionsymbol | e_sorting | e_synonym | e_image | e_mpgraphic | e_math | e_sub | e_sup | e_subsup | e_link | e_margintext | e_margintextblock # We pass some relevant information via attributes. The detail attribute # is common and provides information about the class or environment used. a_detail = attribute detail { text } # The document element is the root of all. e_document = element document { c_everything * } e_ignore = element ignore { c_everything * } e_metadata = element metadata { element metavariable { attribute name { text } ? , text } * } e_section = element section { a_detail ? | ( element sectiontitle { c_inline * } , element sectionnumber { c_inline * } * , element sectioncontent { c_everything * } ) } e_paragraph = element paragraph { c_inline * } e_p = element p { c_inline * } e_break = element break { empty } e_construct = element construct { c_everything* } e_highlight = element highlight { c_inline* } e_itemgroup = element itemgroup { element item { element itemtag { c_inline * } } , element itemcontent { c_everything * } } e_combination = element combination { element combinationpair { element combinationcontent { inline* } , element combinationcaption { inline* } } } e_description = element description { element descriptiontag { c_inline* } , element descriptioncontent { c_inline* } , element descriptionsymbol { c_inline* } } e_descriptionsymbol = element descriptionsymbol { c_inline* } e_verbatimblock = element verbatimblock { element verbatimlines { element verbatimline { text } * } * } e_verbatim = element verbatim { text } e_lines = element lines { element line { text } * } e_synonym = element synonym { text } e_sorting = element sorting { text } e_register = element register { element registersection { element registertag { text } ? , element registerentries { ( element registerentry { text } | element registersee { text } ), ( element registerpages { element registerpage { text } * } | element registerpage { text } | element registerpagerange { element registerpage { text } , element registerpage { text } } ) } ? } * } e_table = element table { element tablerow { element tablecell { c_inline * } * } * } e_tabulate = element tabulate { element tabulaterow { element tabulatecell { c_inline * } * } * } e_list = element list { element listitem { element listtag { text } ? , element listcontent { text } ? , element listdata { text } ? , element listpage { text } ? } } e_delimitedblock = element delimitedblock { c_everything* } e_delimited = element delimited { c_inline } e_subsentence = element subsentence { c_inline } e_float = element float { element floatcaption { element floatlabel { text } , element floatnumber { text } , element floattext { c_inline } } , element floatcontent { c_inline } } e_image = element image { empty } e_mpgraphic = element mpgraphic { empty } e_formula = element formula { element subformula { element formulacontent { e_math* } } , element formulaset { element formulacontent { e_math* } } , element formulacaption { element formulalabel { text } , element formulanumber { text } } , element formulacontent { e_math* } } e_link = element link { c_inline } e_margintextblock = element margintextblock { c_inline } e_margintext = element margintext { c_inline } e_quantity = element quantity { element unit { text } , element number { text } } e_unit = element unit { text | e_math } e_sub = element sub { c_inline } e_sup = element sup { c_inline } e_subsup = element subsup { c_inline, c_inline } # There are enough mathml dtd's out there so this is just a # simplified placeholder. e_math_basics = element m:mn | m:mi | m:mo | m:ms | m:merror | m:mtext { text } | element m:mrow | m:msub | m:msup | m:msqrt | m:mfenced | m:maction { e_math_basics * } | element m:msubsup | m:munder | m:mover | m:mfrac | m:mroot { e_math_basics, e_math_basics } | element m:munderover { e_math_basics, e_math_basics, e_math_basics } | element m:mtable { element m:mtr { element m:mtd { e_math_basics * } * } * } e_math = element m:math { e_math_basics * } context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-bar.mkvi0000644000175000017500000003645012130411274024273 0ustar norbertnorbert%D \module %D [ file=scrn-bar, % was part of scrn-int %D version=1995.01.01, %D title=\CONTEXT\ Core Macros, %D subtitle=Progress Bars, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Screen Macros / Progress Bars} \unprotect %D The code is a bit upgraded to \MKIV\ but the output is mostly the %D same. In retrospect this should have been a module. We can move %D some definitions to scrn-run-bar.mkiv if needed. We can also make %D the code a bit more efficient. % todo: replace blackrule by stupid rules %D \starttyping %D \setupinteraction %D [state=start] %D %D \setupsubpagenumber %D [state=start] %D %D \setuplayout %D [middle] %D %D \setuppapersize %D [S4][S4] %D %D \startsetups bars %D \ruledvbox to \textheight \bgroup %D a \ruledhbox{\interactionbar[a]}\vss %D b \ruledhbox{\interactionbar[b]}\vss %D c \ruledhbox{\interactionbar[c]}\vss %D d \ruledhbox{\interactionbar[d]}\vss %D e \ruledhbox{\interactionbar[e]}\vss %D f \ruledhbox{\interactionbar[f]}\vss %D g \ruledhbox{\interactionbar[g]}\vss %D \egroup %D \stopsetups %D %D \setuptexttexts[\setups{bars}] %D %D \starttext %D \dorecurse {12} { %D \startstandardmakeup %D \stopstandardmakeup %D } %D \stoptext %D \stoptyping \installcorenamespace{interactionbar} \installframedcommandhandler \??interactionbar {interactionbar} \??interactionbar \unexpanded\def\interactionbar {\dodoubleempty\scrn_bar_direct} \def\scrn_bar_direct[#tag][#settings]% somewhat messy {\iflocation \begingroup \doifassignmentelse{#tag} {\let\currentinteractionbar\empty \setupcurrentinteractionbar[#tag]% \edef\currentinteractionbar{\interactionbarparameter\c!alternative}}% {\edef\currentinteractionbar{#tag}% \ifsecondargument\setupcurrentinteractionbar[#settings]\fi}% \doif{\interactionbarparameter\c!state}\v!start {\interactionbarparameter\c!command}% \endgroup \fi} \newdimen\d_scrn_bar_width \newdimen\d_scrn_bar_height \newdimen\d_scrn_bar_depth \newdimen\d_scrn_bar_distance %D Interaction buttons, in fact a row of tiny buttons, are %D typically only used for navigational purposed. The next %D macro builds such a row based on a specification list. %D %D \startbuffer %D \interactionbuttons[width=\hsize][page,PreviousJump,ExitViewer] %D \stopbuffer %D %D \typebuffer %D %D gives %D %D \getbuffer %D %D Apart from individual entries, one can use \type{page} and %D \type {subpage} as shortcuts to their four associated buttons. %D The symbols are derived from the symbols linked to the %D entries. \unexpanded\def\interactionbuttons {\dodoubleempty\scrn_bar_buttons} \def\scrn_bar_buttons {\iflocation \expandafter\scrn_bar_buttons_status \else \expandafter\scrn_bar_buttons_ignore \fi} \def\scrn_bar_buttons_status[#settings][#list]% {\doif{\interactionbarparameter\c!state}\v!start {\ifsecondargument \scrn_bar_buttons_indeed[#settings][#list]% \else \scrn_bar_buttons_indeed[][#settings]% \fi}} \def\scrn_bar_buttons_ignore[#settings][#list]% \gobbletwooptionals {} \def\scrn_bar_buttons_indeed[#settings][#list]% {\begingroup %\let\menuparameter\interactionbarparameter \setupcurrentinteractionbar[#settings]% \d_scrn_bar_width\interactionbarparameter\c!width \ifdim\d_scrn_bar_width=\zeropoint \d_scrn_bar_width1.5\emwidth \fi \doifnothing{\interactionbarparameter\c!height}{\letinteractionbarparameter\c!height\v!broad}% \doifnothing{\interactionbarparameter\c!depth }{\letinteractionbarparameter\c!depth\!!zeropoint}%%% \letinteractionbarparameter\c!background\empty \setbox2\hbox{\inheritedinteractionbarframed{\symbol[\interactionparameter\c!symbolset][\v!previouspage]}}% \!!heighta\ht2 % needed because we default to nothing \letinteractionbarparameter\c!strut\v!no \letinteractionparameter\c!width\zeropoint \!!counta\zerocount % new, was 1 \processallactionsinset [#list] [ \v!page=>\advance\!!counta\plusfour, \v!subpage=>\advance\!!counta\plusfour, \s!unknown=>\advance\!!counta\plusone]% \ifdim\d_scrn_bar_width=\zeropoint \!!widtha\dimexpr2\emwidth+\d_scrn_bar_distance\relax \!!widthb\dimexpr\!!counta\!!widtha-\d_scrn_bar_distance\relax \else \!!widtha\d_scrn_bar_width \!!widthb\dimexpr\!!counta\d_scrn_bar_distance-\d_scrn_bar_distance\relax \advance\!!widtha -\!!widthb \divide\!!widtha \!!counta \!!widthb\d_scrn_bar_width \fi \hbox to \!!widthb {\setnostrut \startsymbolset[\interactionparameter\c!symbolset]% \processallactionsinset [#list] [ \v!page=>\scrn_bar_goto\v!firstpage \scrn_bar_goto\v!nextpage \scrn_bar_goto\v!previouspage \scrn_bar_goto\v!lastpage, \v!subpage=>\scrn_bar_goto\v!firstsubpage \scrn_bar_goto\v!nextsubpage \scrn_bar_goto\v!previoussubpage \scrn_bar_goto\v!lastsubpage, \s!unknown=>\scrn_bar_goto\commalistelement]% \unskip \stopsymbolset}% \endgroup} \def\scrn_bar_goto#action% {\button [\c!height=\the\!!heighta,\c!width=\the\!!widtha]% {\symbol[#action]}% we could expand this one once only [#action]% \hss} % todo: this will be \letblackruleparameter\c!width\!!widtha (faster) \def\scrn_bar_alternative_a {\d_scrn_bar_width \interactionbarparameter\c!width \d_scrn_bar_distance\interactionbarparameter\c!distance \d_scrn_bar_height \interactionbarparameter\c!height \d_scrn_bar_depth \interactionbarparameter\c!depth \noindent\hbox to \d_scrn_bar_width \bgroup \dontcomplain \setupblackrules[\c!height=\v!max,\c!depth=\v!max]% \!!widthb\dimexpr\d_scrn_bar_width-4\emwidth\relax \processaction [\interactionbarparameter\c!step] [ \v!small=>\scratchcounter 20, \v!medium=>\scratchcounter 10, \v!big=>\scratchcounter 5, \s!unknown=>\scratchcounter 10]% \!!widtha\dimexpr\!!widthb/\scratchcounter\relax \setupblackrules[\c!width=\!!widtha]% \setbox\scratchbox\hbox to \d_scrn_bar_width {\hskip2\emwidth \setbox\scratchbox\hbox{\blackrule[\c!color=\interactionbarparameter\c!backgroundcolor]}% \dorecurse\scratchcounter {\hss\normalexpanded{\directgotodumbbox{\copy\scratchbox}[page(\the\numexpr\recurselevel*\lastpage/\scratchcounter\relax)]}}% \hss \hskip2\emwidth}% \wd\scratchbox\zeropoint \box \scratchbox \setupblackrules[\c!width=\emwidth]% \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!firstpage]}% \hskip\emwidth \ifnum\realpageno>\plusone \hskip\zeropoint\!!plus\numexpr\realpageno-\plustwo\relax \s!sp\relax % cm gives overflow \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!previouspage)]}% \fi \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[page(\number\realpageno)]}% todo: \v!currentpage \ifnum\realpageno<\lastpage\relax \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!nextpage]}% \hskip\zeropoint\!!plus\numexpr\lastpage-\realpageno-\plusone\relax \s!sp\relax % cm gives overflow \fi \hskip\emwidth \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!lastpage]}% \egroup} \def\scrn_bar_alternative_b {\ifnum\lastpage>\firstpage\relax \interactionbuttons[\v!firstpage,\v!previouspage,\v!nextpage,\v!lastpage]% \fi} \def\scrn_bar_alternative_c {\ifnum\lastpage>\plusone \d_scrn_bar_width\interactionbarparameter\c!width \hbox to \d_scrn_bar_width {\setupblackrules[\c!height=\interactionbarparameter\c!height,\c!depth=\interactionbarparameter\c!depth,\c!width=\emwidth]% \scratchdimen\dimexpr(\d_scrn_bar_width-4\emwidth)/\numexpr\lastpage+\minusone\relax\relax \!!widtha\numexpr\realpageno+\minusone\relax\scratchdimen \!!widthb\numexpr\lastpage-\realpageno\relax\scratchdimen \directgotospecbox\interactionbarparameter{\blackrule}[\v!firstpage]% \hss \directgotospecbox\interactionbarparameter{\blackrule[\c!width=\!!widtha]}[\v!previouspage]% \blackrule[\c!color=\interactionbarparameter\c!contrastcolor]% \directgotospecbox\interactionbarparameter{\blackrule[\c!width=\!!widthb]}[\v!nextpage]% \hss \directgotospecbox\interactionbarparameter{\blackrule}[\v!lastpage]}% \fi} \unexpanded\def\scrn_bar_goto_a#whereto% {\symbol[\ifcase#whereto\v!previous\or\v!somewhere\or\v!next\fi]} \unexpanded\def\scrn_bar_goto_b#whereto% {\vrule\!!height\d_scrn_bar_height\!!depth\d_scrn_bar_depth\!!width\!!widtha\relax} \unexpanded\def\scrn_bar_goto_c#whereto% {\symbol[\ifcase#whereto\v!previous\or\v!somewhere\or\v!somewhere\or\v!somewhere\or\v!next\fi} \unexpanded\def\scrn_bar_goto_d#whereto% {\vrule \!!width\!!widtha \ifcase#whereto% \!!height \d_scrn_bar_height \!!depth \d_scrn_bar_depth \or \!!height.5\d_scrn_bar_height \!!depth.5\d_scrn_bar_depth \or \!!height \d_scrn_bar_height \!!depth \d_scrn_bar_depth \or \!!height.5\d_scrn_bar_height \!!depth.5\d_scrn_bar_depth \else \!!height \d_scrn_bar_height \!!depth \d_scrn_bar_depth \fi} \newconstant\c_scrn_bar_mode \unexpanded\def\scrn_bar_goto_x#command% {\doifelse{\interactionbarparameter\c!symbol}\v!yes {\setupsymbolset[\interactionparameter\c!symbolset]% \let\scrn_bar_goto_indeed\scrn_bar_goto_a} {\let\scrn_bar_goto_indeed\scrn_bar_goto_b}% \dorecurse\nofsubpages {\scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax \c_scrn_bar_mode \ifnum\scratchcounter<\realpageno \zerocount \else \ifnum\scratchcounter=\realpageno \plusone \else \plustwo \fi\fi \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\scrn_bar_goto_indeed\c_scrn_bar_mode}[page(\the\scratchcounter)]}% #command}% \unskip} \def\scrn_bar_alternative_d {\ifnum\nofsubpages>\plusone \doif{\namedcounterparameter\s!subpage\c!state}\v!start{% \d_scrn_bar_width \interactionbarparameter\c!width \d_scrn_bar_distance\interactionbarparameter\c!distance \d_scrn_bar_height \interactionbarparameter\c!height \d_scrn_bar_depth \interactionbarparameter\c!depth \!!widtha\d_scrn_bar_width \noindent\hbox{\scrn_bar_goto_x{\hskip\d_scrn_bar_distance}}% }\fi} \def\scrn_bar_alternative_e {\ifnum\nofsubpages>\plusone \doif{\namedcounterparameter\s!subpage\c!state}\v!start{% \d_scrn_bar_width \interactionbarparameter\c!width \d_scrn_bar_distance\interactionbarparameter\c!distance \d_scrn_bar_height \interactionbarparameter\c!height \d_scrn_bar_depth \interactionbarparameter\c!depth \!!widthb\dimexpr\nofsubpages\d_scrn_bar_distance-\d_scrn_bar_distance\relax % (n-1) \!!widtha\dimexpr(\d_scrn_bar_width-\!!widthb)/\nofsubpages\relax \ifdim\!!widtha<\d_scrn_bar_distance \scrn_bar_alternative_f \else \noindent\hbox to \d_scrn_bar_width{\scrn_bar_goto_x{\hss}\unskip}% \fi }\fi} \def\scrn_bar_alternative_f {\ifnum\nofsubpages>\plusone \doif{\namedcounterparameter\s!subpage\c!state}\v!start{% \d_scrn_bar_width \interactionbarparameter\c!width \d_scrn_bar_distance\interactionbarparameter\c!distance \d_scrn_bar_height \interactionbarparameter\c!height \d_scrn_bar_depth \interactionbarparameter\c!depth \noindent \hbox to \d_scrn_bar_width \bgroup \doloop {\!!countc\numexpr(\nofsubpages/\recurselevel)+\plusone\relax % rounding \!!widthb\d_scrn_bar_distance \multiply\!!widthb \!!countc \advance\!!widthb -\d_scrn_bar_distance \!!widtha\d_scrn_bar_width \advance\!!widtha -\!!widthb \divide\!!widtha \!!countc \ifdim\!!widtha<\d_scrn_bar_distance\else \!!countb\recurselevel \exitloop \fi}% \ifnum\!!countc>\plusone % this is not that well tested \advance\!!countc \minustwo \!!widtha-\d_scrn_bar_distance \!!widtha\!!countc\!!widtha \advance\!!widtha \d_scrn_bar_width \advance\!!countc \plusone \divide\!!widtha \!!countc \fi \doifelse{\interactionbarparameter\c!symbol}\v!yes {\setupsymbolset[\interactionparameter\c!symbolset]% \let\scrn_bar_goto_indeed\scrn_bar_goto_c}% {\let\scrn_bar_goto_indeed\scrn_bar_goto_d}% \!!countc\numexpr\realpageno-\plustwo\relax \!!countd\numexpr\realpageno+\plustwo\relax \ifnum\!!countc<\plusone \!!countc\plusone \fi \!!countf\zerocount \dostepwiserecurse\firstsubpage\lastsubpage\plusone {\!!doneafalse \advance\!!countf \plusone \ifnum\recurselevel=\firstsubpage\relax \!!doneatrue \fi \ifnum\recurselevel=\lastsubpage \relax \!!doneatrue \fi \c_scrn_bar_mode \if!!donea \ifnum\recurselevel<\realpageno \zerocount \else\ifnum\recurselevel>\realpageno \plustwo \else \plusfour \fi\fi \else \ifnum\!!countf=\!!countb \ifnum\recurselevel<\realpageno \plusone \else\ifnum\recurselevel>\realpageno \plusthree \else \plustwo \fi\fi \else \plusthree \fi \fi \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\scrn_bar_goto_indeed\c_scrn_bar_mode}[page(\recurselevel)]}% \hss \!!countf\zerocount}% \unskip \egroup }\fi} \def\scrn_bar_alternative_g {\ifnum\lastsubpage>\firstsubpage\relax % no test for state? \interactionbuttons[\v!firstsubpage,\v!previoussubpage,\v!nextsubpage,\v!lastsubpage]% \fi} \setupinteractionbar [\c!state=\v!start, \c!alternative=a, \c!symbol=\v!no, \c!width=10\emwidth, \c!height=.5\emwidth, \c!depth=\zeropoint, \c!distance=.5\emwidth, \c!step=\v!medium, \c!foregroundcolor=\interactionbarparameter\c!color, \c!foregroundstyle=\interactionbarparameter\c!style, \c!color=\interactionparameter\c!color, \c!contrastcolor=\interactionparameter\c!contrastcolor, \c!style=, \c!frame=\v!on, \c!background=color, \c!backgroundcolor=gray, \c!samepage=\v!yes] \defineinteractionbar[a][\c!command=\scrn_bar_alternative_a] \defineinteractionbar[b][\c!command=\scrn_bar_alternative_b,\c!height=\v!broad] \defineinteractionbar[c][\c!command=\scrn_bar_alternative_c,\c!height=\v!max,\c!depth=\v!max] \defineinteractionbar[d][\c!command=\scrn_bar_alternative_d,\c!width=.5\emwidth] \defineinteractionbar[e][\c!command=\scrn_bar_alternative_e] \defineinteractionbar[f][\c!command=\scrn_bar_alternative_f] \defineinteractionbar[g][\c!command=\scrn_bar_alternative_g,\c!height=\v!broad] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pag.mkii0000644000175000017500000001545411754241457024262 0ustar norbertnorbert%D \module %D [ file=meta-pag, %D version=1999.07.10, %D title=\METAPOST\ Graphics, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 These definitions used to be part of the old \type %D {core-mps} file, later changed into \type {meta-ini}, but %D keeping them separate is cleaner. \writestatus{loading}{MetaPost Graphics / Page Data Management} \unprotect \startMPextensions if unknown context_page: input mp-page; fi; \stopMPextensions %D The next few macros tell \METAPOST\ how the \CONTEXT\ %D pagebody looks. \startMPextensions boolean PageStateAvailable,OnRightPage,InPageBody; PageStateAvailable:=true; \stopMPextensions \startMPinitializations OnRightPage:=true; InPageBody:=\ifinpagebody true \else false \fi; \stopMPinitializations \startMPinitializations def LoadPageState = OnRightPage:=\MPonrightpage; OnOddPage:=\MPonoddpage; RealPageNumber:=\the\realpageno; PageNumber:=\the\pageno; NOfPages:=\lastpage; PaperHeight:=\the\paperheight; PaperWidth:=\the\paperwidth; PrintPaperHeight:=\the\printpaperheight; PrintPaperWidth:=\the\printpaperwidth; TopSpace:=\the\topspace; BottomSpace:=\the\bottomspace; BackSpace:=\the\backspace; CutSpace:=\the\cutspace; MakeupHeight:=\the\makeupheight; MakeupWidth:=\the\makeupwidth; TopHeight:=\the\topheight; TopDistance:=\the\topdistance; HeaderHeight:=\the\headerheight; HeaderDistance:=\the\headerdistance; TextHeight:=\the\textheight; FooterDistance:=\the\footerdistance; FooterHeight:=\the\footerheight; BottomDistance:=\the\bottomdistance; BottomHeight:=\the\bottomheight; LeftEdgeWidth:=\the\leftedgewidth; LeftEdgeDistance:=\the\leftedgedistance; LeftMarginWidth:=\the\leftmarginwidth; LeftMarginDistance:=\the\leftmargindistance; TextWidth:=\the\textwidth ; RightMarginDistance:=\the\rightmargindistance; RightMarginWidth:=\the\rightmarginwidth; RightEdgeDistance:=\the\rightedgedistance; RightEdgeWidth:=\the\rightedgewidth; InnerMarginDistance:=\the\innermargindistance; InnerMarginWidth:=\the\innermarginwidth; OuterMarginDistance:=\the\outermargindistance; OuterMarginWidth:=\the\outermarginwidth; InnerEdgeDistance:=\the\inneredgedistance; InnerEdgeWidth:=\the\inneredgewidth; OuterEdgeDistance:=\the\outeredgedistance; OuterEdgeWidth:=\the\outeredgewidth; PageOffset:=\the\pageoffset; PageDepth:=\the\pagedepth; LayoutColumns:=\the\layoutcolumns; LayoutColumnDistance:=\the\layoutcolumndistance; LayoutColumnWidth:=\the\layoutcolumnwidth; enddef; \stopMPinitializations \def\MPonrightpage{true} \def\MPonoddpage {true} \def\freezeMPpagelayout {\doifbothsides {\def\MPonrightpage{true}} {\def\MPonrightpage{true}} {\def\MPonrightpage{false}}% \edef\MPonoddpage{\doifoddpageelse{true}{false}}} \let\freezeMPlayout\relax % obsolete %D We need to freeze the pagelayout before the backgrounds %D are build, because the overlay will temporarily become %D zero (overlay). \appendtoks \freezeMPpagelayout \to \everybeforepagebody %D By freezing these value every graphic, we can use layout %D variables that change halfways a page, whatever use that %D has. \prependtoks \calculatereducedvsizes % this is really needed \freezeMPpagelayout \freezeMPlayout % to be used grouped \to \everyMPgraphic %D The next feature provides information about for instance %D column positions. This is an experimental feature, %D introduced when we needed backgrounds in columns (fill||in %D questions as implemented in a private module). %D %D See \type {mp-page.mp} for the definition of the macros: %D %D \starttabulate[|tl|l|p|] %D \NC ResetTextAreas \NC no arguments \NC %D reset areas on page \NC \NR %D \NC RegisterTextArea \NC x, y, w, h \NC %D adds area to the list \NC \NR %D \NC TextAreaX,Y,W,H,XY,WH \NC x and/or y \NC %D reports offsets and dimensions \NC \NR %D \stoptabulate %D %D The \type {TextArea*} macros can be used to determine %D overlap. \newcount\currentMPtextareadata \newtoks\MPsavedtextareadata \newtoks\MPtextareadata \newtoks\MPlocaltextareadata % optimaliseren voor herhaling \def\registerMPtextarea#1% {\ifpositioning \bgroup \global\advance\currentMPtextareadata\plusone %\hpos{gbd:\the\currentMPtextareadata}{#1}% \hpos{gbd:\the\currentMPtextareadata}% {\iftracetextareas\boxrulewidth1.5pt\ruledhbox\fi{#1}}% \edef\!!stringa{gbd:\the\currentMPtextareadata}% \edef\!!stringa{RegisterTextArea(% \MPx\!!stringa,\MPy\!!stringa,% \MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}% \@EA \doglobal \@EA \appendtoks \!!stringa \to \MPtextareadata \egroup \else \hbox{#1}% \fi} \def\registerMPlocaltextarea#1% {\ifpositioning \bgroup \global\advance\currentMPtextareadata\plusone %\hpos{gbd:\the\currentMPtextareadata}{#1}% \hpos{gbd:\the\currentMPtextareadata}% {\iftracetextareas\boxrulewidth3pt\ruledhbox\fi{#1}}% \edef\!!stringa{gbd:\the\currentMPtextareadata}% \edef\!!stringa{RegisterLocalTextArea(% \MPx\!!stringa,\MPy\!!stringa,% \MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}% \global\MPlocaltextareadata\@EA{\!!stringa}% \egroup \else \hbox{#1}% \fi} % better, so that we can force a key and share with e.g. renumbering % % \let\namedtextarea\empty % % \def\registerMPlocaltextarea#1% % {\ifpositioning % \bgroup % \ifx\namedtextarea\empty % \global\advance\currentMPtextareadata\plusone % \edef\namedtextarea{gbd:\the\currentMPtextareadata}% % \fi % \hpos\namedtextarea{\iftracetextareas\boxrulewidth3pt\ruledhbox\fi{#1}}% % \edef\ascii{RegisterLocalTextArea(% % \MPx\namedtextarea,\MPy\namedtextarea,% % \MPw\namedtextarea,\MPh\namedtextarea,\MPd\namedtextarea);}% % \global\MPlocaltextareadata\@EA{\ascii}% % \egroup % \else % \hbox{#1}% % \fi} \def\resetMPlocaltextarea {\global\MPlocaltextareadata\emptytoks} \startMPextensions path PlainTextArea; \stopMPextensions \startMPinitializations ResetTextAreas; \the\MPsavedtextareadata; SaveTextAreas; ResetTextAreas; \the\MPtextareadata; \the\MPlocaltextareadata; PlainTextArea:=boundingbox(\MPxy{text:\realfolio}--\MPxy{text:\realfolio} shifted (\MPw{text:\realfolio},\MPh{text:\realfolio})); \stopMPinitializations \appendtoks \global\MPsavedtextareadata\MPtextareadata \global\MPtextareadata \emptytoks \global\MPlocaltextareadata\emptytoks \to \everyshipout \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-utf.mkii0000644000175000017500000000262511754241457024305 0ustar norbertnorbert%D \module %D [ file=regi-utf, %D version=2002.12.03, %D title=\CONTEXT\ Encoding Macros, %D subtitle=UTF-8, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifnum\texengine>\pdftexengine \expandafter \endinput \fi %D This regime activates the characters $>192$ and let them %D handle \UTF\ encoded content streams. This regime runs on %D top of the \type {unic} modules. We use an active inspector %D instead of a active token handler because here we don't want %D the \type {{}}. We only support this in \ETEX. % ÀÁÂÃÄÅàáâãäå % ÆÇæç % ÈÉÊËèéêë % ÌÍÎÏÞìíîïþ % Ðð % Ññ % ÒÓÔÕÖòóôõö % Øø % ÙÚÛÜùúûü % Ýýÿ % ß % Ţţ \unprotect \startregime[utf] \dostepwiserecurse{192}{223}{1} {\expanded{\defineactiveinspector{\recurselevel} {\noexpand\utftwouniglph {\recurselevel}}}} % space delimited \dostepwiserecurse{224}{239}{1} {\expanded{\defineactiveinspector{\recurselevel} {\noexpand\utfthreeuniglph{\recurselevel}}}} % space delimited \dostepwiserecurse{240}{247}{1} {\expanded{\defineactiveinspector{\recurselevel} {\noexpand\utffouruniglph {\recurselevel}}}} % space delimited \stopregime \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-eif.mkii0000644000175000017500000001200511376503616024251 0ustar norbertnorbert%D \module %D [ file=verb-eif, %D version=2000.08.23, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty Eiffel Verbatim, %D author={Berend de Boer \& Hans Hagen}, %D date=\currentdate, %D copyright={Berend de Boer \& Hans Hagen}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This module will be cleaned up a bit in the process of more % flexible verbatim options. \writestatus{loading}{ConTeXt Verbatim Macros / Pretty EIFFEL Verbatim} %D \startbuffer %D \startEIFFEL %D class TEST %D %D creation %D make %D %D feature -- creation %D %D make is %D do %D print ("hello world") %D end %D %D end %D \stopEIFFEL %D \stopbuffer %D %D %D If a variable in a comment is quoted with `..', it is typeset %D as a variable (common Eiffel convention for pretty typesetters): %D %D \startbuffer %D \startEIFFEL %D class TEST %D %D feature %D %D say (something: STRING) is %D -- say `something' to stdout %D do %D print (something) %D end %D %D end -- class TEST %D \stopEIFFEL %D \stopbuffer %D %D %D Recommended, OOSC2 style setting is: %D %D \setuptyping %D [EIFFEL] %D [margin=1em,palet=,color=blue,style=\it,icommand=\bf,ccommand=\tf] %D %D We borrow most of the macros from the \PERL\ driver. \ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi \unprotect %D \EIFFEL\ has only the one line comment sequence \type{--}. \gdef\EIFsetspecials% {\PLsetspecials \setpretty`\#=32 \setpretty`\{=33 \setpretty`\}=33 \setpretty`\[=33 \setpretty`\]=33 \setpretty`\(=33 \setpretty`\)=33 \setpretty`\;=33 \setpretty`\:=33 \setpretty`\!=33 \setpretty`\?=33 \setpretty`\==33 \setpretty`\~=33 \setpretty`\<=33 \setpretty`\>=33 \setpretty`\-=33 \setpretty`\+=33 \setpretty`\/=33 \setpretty`\*=33 \setpretty`\^=33 \setpretty`\%=41 \setpretty`\-=45 \setpretty`\`=81 \setpretty`\'=82 } \gdef\EIFsethandlers% {\PLsethandlers \installprettyhandler 33 \EIFtypesymbol \installprettyhandler 45 \EIFtypefourfive \installprettyhandler 81 \EIFtypeeightone \installprettyhandler 82 \EIFtypeeighttwo \installprettyhandler 90 \EIFtypenine } \gdef\EIFsetcontrols% {\PLsetcontrols \def\flushrestofverbatimline% {\endPLtypesix \inPLcommentfalse \verbatimfont \PLverbosefalse \PLverboseskipped=0}} \gdef\EIFsetvariables {\PLsetvariables} \gdef\setupprettyEIFtype% {\def\prettyidentifier{EIF}% \let\PLidentifiers=\EIFidentifiers \let\PLvariables=\EIFvariables \EIFsetvariables \EIFsetcontrols \EIFsethandlers \EIFsetspecials \PLsetdiagnostics} % symbols should appear in roman \gdef\EIFtypesymbol#1% {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else {\prettynaturalfont\/% \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty}% \fi} % recognize comments \gdef\EIFtypefourfive% {\handlenextnextpretty\doEIFtypefourfive\PLtypefourtwo} \gdef\doEIFtypefourfive#1#2% {\endPLtypesix \getprettydata{#2}% \ifnum\prettytype=45 \let\next=\dodoEIFtypefourfive \else \let\next=\PLtypefourtwo \fi \next{#1}#2} \gdef\dodoEIFtypefourfive% #1% {\endPLtypesix \handlenextnextpretty\dododoEIFtypefourfive\dodododoPLtypefourfive} \gdef\dododoEIFtypefourfive% {\ifnewpretty\expandafter\handlenewpretty\fi\dodododoEIFtypefourfive} \gdef\dodododoEIFtypefourfive#1#2% {\ifinPLcomment \getpretties{#1}{#2}% \else \ifinPLdouble \getpretties{#1}{#2}% \else \global\inPLcommenttrue \PLverbosecorrection \def\next{\beginofpretty[\!!prettyone]\getpretties{#1}{#2}\endofpretty\prettynaturalfont}% \expandafter\next \fi \fi} % recognize `name' in comments and format them like variables \gdef\EIFtypeeightone#1% {\endPLtypesix \ifinPLcomment \verbatimfont \else \getpretty{#1}% \fi} \gdef\EIFtypeeighttwo#1% {\endPLtypesix \ifinPLcomment \prettynaturalfont \else {\prettynaturalfont\/% \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty}% \fi} % double quote \gdef\EIFtypenine#1% {\endPLtypesix \ifinPLcomment \getpretty{#1}% \else\ifinPLsingle \getpretty{#1}% \else\ifinPLdouble \global\inPLdoublefalse {\prettynaturalfont\/% \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty}% \else \global\inPLdoubletrue {\prettynaturalfont \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty}% \fi\fi\fi} \useprettyidentifiers \EIFidentifiers \EIFsetspecials alias all and as check class create creation debug deferred do else elseif end ensure expanded export external false feature from frozen if implies indexing infix inherit inspect invariant is like local loop not obsolete old once or prefix redefine rename require rescue precursor retry select separate strip then true undefine unique until variant when xor \useprettyidentifiers \EIFvariables \EIFsetspecials not-yet-defined \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-fil.mkii0000644000175000017500000000236611754241457024256 0ustar norbertnorbert%D \module %D [ file=java-fil, %D version=1998.06.01, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Filing and Printing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startJSpreamble Auxiliary used now function DocumentFileName () { var Paths = this.path.split("/") ; Paths = Paths[Paths.length-1].split(".") ; return(Paths[0]) } function Print_Page_Range(From, To) % gaat mis, nog geen args mogelijk { if ((Number(From)>0)&&(Number(To)>=Number(From))) { var myFrom = Number(From)-1 ; var myTo = Number(To)-1 ; this.print(false,myFrom,myTo,true) } } function Print_This_Page () { this.print(false,this.pageNum,this.pageNum,true) } \stopJSpreamble \definereference [PrintSubPaginas] [JS(Print_Page_Range{\firstsubpage,\lastsubpage})] \definereference [PrintSubPages] [JS(Print_Page_Range{\firstsubpage,\lastsubpage})] \definereference [PrintDezePagina] [JS(Print_This_Page)] \definereference [PrintThisPage] [JS(Print_This_Page)] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-steps.lua0000644000175000017500000001404011754241457023775 0ustar norbertnorbertif not modules then modules = { } end modules ['x-flow'] = { version = 1.001, comment = "companion to m-flow.mkvi", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- when we can resolve mpcolor at the lua end we will use metapost.graphic(....) directly moduledata.steps = moduledata.steps or { } local points = number.points -- number.pt local variables = interfaces.variables local trace_charts = false local defaults = { chart = { dx = 10*65436, dy = 10*65436, }, cell = { alternative = 1, offset = 2*65436, rulethickness = 65436, framecolor = "blue", backgroundcolor = "gray", }, text = { alternative = 1, offset = 2*65436, distance = 4*65436, rulethickness = 65436, framecolor = "red", backgroundcolor = "gray", }, line = { alternative = 1, rulethickness = 65436, height = 30*65436, distance = 10*65436, offset = 5*65436, color = "green", }, } -- todo : name (no name then direct) -- maybe: includes -- maybe: flush ranges local charts = { } local steps = { } function commands.step_start_chart(name) name = name or "" steps = { } charts[name] = { steps = steps, } end function commands.step_stop_chart() end function commands.step_make_chart(settings) local chartsettings = settings.chart if not chartsettings then print("no chart") return end local chartname = chartsettings.name if not chartname then print("no name given") return end local chart = charts[chartname] if not chart then print("no such chart",chartname) return end local steps = chart.steps or { } -- table.setmetatableindex(settings,defaults) -- if trace_charts then inspect(steps) end -- local textsettings = settings.text local cellsettings = settings.cell local linesettings = settings.line -- context.startMPcode() context("if unknown context_cell : input mp-step.mpiv ; fi ;") context("step_begin_chart ;") -- if chartsettings.alternative == variables.vertical then context("chart_vertical := true ;") end -- context("text_line_color := \\MPcolor{%s} ;", textsettings.framecolor) context("text_line_width := %s ;", points(textsettings.rulethickness)) context("text_fill_color := \\MPcolor{%s} ;", textsettings.backgroundcolor) context("text_offset := %s ;", points(textsettings.offset)) context("text_distance_set := %s ;", points(textsettings.distance)) -- context("cell_line_color := \\MPcolor{%s} ;", cellsettings.framecolor) context("cell_line_width := %s ;", points(cellsettings.rulethickness)) context("cell_fill_color := \\MPcolor{%s} ;", cellsettings.backgroundcolor) context("cell_offset := %s ;", points(cellsettings.offset)) context("cell_distance_x := %s ;", points(cellsettings.dx)) context("cell_distance_y := %s ;", points(cellsettings.dy)) -- context("line_line_color := \\MPcolor{%s} ;", linesettings.color) context("line_line_width := %s ;", points(linesettings.rulethickness)) context("line_distance := %s ;", points(linesettings.distance)) context("line_offset := %s ;", points(linesettings.offset)) -- for i=1,#steps do local step = steps[i] context("step_begin_cell ;") if step.cell_top ~= "" then context('step_cell_top("%s") ;',string.strip(step.cell_top)) end if step.cell_bot ~= "" then context('step_cell_bot("%s") ;',string.strip(step.cell_bot)) end if step.text_top ~= "" then context('step_text_top("%s") ;',string.strip(step.text_top)) end if step.text_mid ~= "" then context('step_text_mid("%s") ;',string.strip(step.text_mid)) end if step.text_bot ~= "" then context('step_text_bot("%s") ;',string.strip(step.text_bot)) end context("step_end_cell ;") end -- context("step_end_chart ;") context.stopMPcode() end function commands.step_cells(top,bot) steps[#steps+1] = { cell_top = top or "", cell_bot = bot or "", text_top = "", text_mid = "", text_bot = "", } end function commands.step_texts(top,bot) if #steps > 0 then steps[#steps].text_top = top or "" steps[#steps].text_bot = bot or "" end end function commands.step_cell(top) steps[#steps+1] = { cell_top = top or "", cell_bot = "", text_top = "", text_mid = "", text_bot = "", } end function commands.step_text(top) if #steps > 0 then steps[#steps].text_top = top or "" end end function commands.step_textset(left,middle,right) if #steps > 0 then steps[#steps].text_top = left or "" steps[#steps].text_mid = middle or "" steps[#steps].text_bot = right or "" end end function commands.step_start_cell() steps[#steps+1] = { cell_top = "", cell_bot = "", text_top = "", text_mid = "", text_bot = "", } end function commands.step_stop_cell() end function commands.step_text_top(str) if #steps > 0 then steps[#steps].text_top = str or "" end end function commands.step_text_mid(str) if #steps > 0 then steps[#steps].text_mid = str or "" end end function commands.step_text_bot(str) if #steps > 0 then steps[#steps].text_bot = str or "" end end function commands.step_cell_top(str) if #steps > 0 then steps[#steps].cell_top = str or "" end end function commands.step_cell_bot(str) if #steps > 0 then steps[#steps].cell_bot = str or "" end end context-2013.05.28.20130704/texmf-dist/tex/context/base/node-bck.lua0000644000175000017500000001371012130411274024053 0ustar norbertnorbertif not modules then modules = { } end modules ['node-bck'] = { version = 1.001, comment = "companion to node-bck.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- beware, this one takes quite some runtime, so we need a status flag -- maybe some page related state local attributes, nodes, node = attributes, nodes, node local nodecodes = nodes.nodecodes local listcodes = nodes.listcodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glyph_code = nodecodes.glyph local cell_code = listcodes.cell local traverse = node.traverse local traverse_id = node.traverse_id local nodepool = nodes.pool local tasks = nodes.tasks local new_rule = nodepool.rule local new_glue = nodepool.glue 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 a_alignbackground = attributes.private('alignbackground') local function add_backgrounds(head) -- rather old code .. to be redone local current = head while current do local id = current.id if id == hlist_code or id == vlist_code then local list = current.list if list then local head = add_backgrounds(list) if head then current.list = head list = head end end local width = current.width if width > 0 then local background = current[a_background] if background then -- direct to hbox -- colorspace is already set so we can omit that and stick to color local mode = current[a_colorspace] if mode then local height = current.height local depth = current.depth local skip = id == hlist_code and width or (height + depth) local glue = new_glue(-skip) local rule = new_rule(width,height,depth) local color = current[a_color] local transparency = current[a_transparency] rule[a_colorspace] = mode if color then rule[a_color] = color end if transparency then rule[a_transparency] = transparency end rule.next = glue glue.prev = rule if list then glue.next = list list.prev = glue end current.list = rule end end end end current = current.next end return head, true end local function add_alignbackgrounds(head) local current = head while current do local id = current.id if id == hlist_code then local list = current.list if not list then -- no need to look elseif current.subtype == cell_code then local background = nil local found = nil -- for l in traverse(list) do -- background = l[a_alignbackground] -- if background then -- found = l -- break -- end -- end -- we know that it's a fake hlist (could be user node) -- but we cannot store tables in user nodes yet for l in traverse_id(hpack_code,list) do background = l[a_alignbackground] if background then found = l end break end -- if background then -- current has subtype 5 (cell) local width = current.width if width > 0 then local mode = found[a_colorspace] if mode then local glue = new_glue(-width) local rule = new_rule(width,current.height,current.depth) local color = found[a_color] local transparency = found[a_transparency] rule[a_colorspace] = mode if color then rule[a_color] = color end if transparency then rule[a_transparency] = transparency end rule.next = glue glue.prev = rule if list then glue.next = list list.prev = glue end current.list = rule end end end else add_alignbackgrounds(list) end elseif id == vlist_code then local list = current.list if list then add_alignbackgrounds(list) end end current = current.next end return head, true end nodes.handlers.backgrounds = add_backgrounds nodes.handlers.alignbackgrounds = add_alignbackgrounds tasks.appendaction("shipouts","normalizers","nodes.handlers.backgrounds") tasks.appendaction("shipouts","normalizers","nodes.handlers.alignbackgrounds") context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pages-statistics.mkiv0000644000175000017500000001165212161703335026316 0ustar norbertnorbert%D \module %D [ file=s-pages-statistics, % s-otr-01, %D version=2012.02.02, %D title=\CONTEXT\ Style File, %D subtitle=Page Statistics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \defineframed [otrstatistics] [\c!offset=\bodyfontsize, \c!background=\v!color, \c!strut=\v!no, \c!backgroundcolor=white, \c!frame=\v!off, \c!align=\v!middle] \definecombination [otrstatistics] [\c!nx=2, \c!ny=2, \c!location=\v!top] % expansion is neeed because tabulate sets some penalties \startsetups system:page:otr:statistics \normalexpanded { \startcombination[otrstatistics] { \otrstatistics { \starttabulate[|Tw(10em)|Trw(8em)|] \NC \string\textwidth \NC \the\textwidth \NC \NR \NC \string\textheight \NC \the\textheight \NC \NR \NC \string\lineheight \NC \the\lineheight \NC \NR \NC \string\strutheight \NC \strutheight \NC \NR \NC \string\strutdepth \NC \strutdepth \NC \NR % \NC \string\vsize \NC \the\vsize \NC \NR \NC \string\topskip \NC \the\topskip \NC \NR \stoptabulate } } {} { \otrstatistics { \starttabulate[|Tw(10em)|Trw(8em)|] \NC \string\pagegoal \NC \the\pagegoal \NC \NR \NC \string\pagetotal \NC \the\pagetotal \NC \NR \NC \string\pagedepth \NC \the\pagedepth \NC \NR \NC \string\pageshrink \NC \the\pageshrink \NC \NR \NC \string\pagestretch \NC \the\pagestretch \NC \NR \NC \string\pagefilstretch \NC \the\pagefilstretch \NC \NR \NC \string\pagefillstretch \NC \the\pagefillstretch \NC \NR \NC \string\pagefilllstretch \NC \the\pagefilllstretch \NC \NR \stoptabulate } } {} { \otrstatistics { \starttabulate[|Tw(10em)|Trw(8em)|] \NC \string\widowpenalty \NC \the\widowpenalty \NC \NR \NC \string\clubpenalty \NC \the\clubpenalty \NC \NR \NC \string\displaywidowpenalty \NC \the\displaywidowpenalty \NC \NR \NC \string\brokenpenalty \NC \the\brokenpenalty \NC \NR \NC \string\interlinepenalty \NC \the\interlinepenalty \NC \NR \stoptabulate } } {} { \otrstatistics[\c!foregroundcolor=darkred] { \starttabulate[|Tw(10em)|Trw(8em)|] \NC page \NC \the\realpageno \NC \NR \NC delta \NC \the\dimexpr\pagegoal-\pagetotal\relax \NC \NR \stoptabulate } } {} \stopcombination } \stopsetups \defineoverlay [system:page:otr:statistics] [{\framed [\c!offset=\bodyfontsize, \c!background=\v!color, \c!strut=\v!no, %\c!frame=\v!off, \c!framecolor=white, \c!frameoffset=\onepoint, \c!rulethickness=2\onepoint, \c!backgroundcolor=darkblue, \c!align=\v!middle] {\forgetall \insidefloattrue \setups{system:page:otr:statistics}}}] \unexpanded\def\page_one_command_package_show_state_indeed {\scratchheight\ht\b_page_one_contents \scratchdepth \dp\b_page_one_contents \setbox\b_page_one_contents\vbox\framed [\c!offset=\v!overlay, \c!framecolor=darkred, \c!rulethickness=\onepoint, \c!background={\v!foreground,system:page:otr:statistics}] {\lower\scratchdepth\box\b_page_one_contents}% \ht\b_page_one_contents\scratchheight \dp\b_page_one_contents\scratchdepth} \let\page_one_command_package_show_state\relax \unexpanded\def\showpageproperties {\let\page_one_command_package_show_state\page_one_command_package_show_state_indeed} \protect \continueifinputfile{s-pages-statistics.mkiv} \setupbodyfont[dejavu,11pt] \dontcomplain \showpageproperties \starttext \dorecurse {100} { \input tufte \startitemize[packed,intro] \startitem test \stopitem \startitem test \stopitem \startitem test \stopitem \startitem test \stopitem \stopitemize } \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-inc.mkii0000644000175000017500000013152411754241457024273 0ustar norbertnorbert%D \module %D [ file=grph-inc, % moved from core-fig %D version=2006.08.26, % overhaul of 1997.03.31 %D title=\CONTEXT\ Graphic Macros, %D subtitle=Figure Inclusion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Graphic Macros / Figure Inclusion} % todo: directory : system -> \allinputpaths (so that we can \usesubpath) %D This is a reimplementation of the original module, which %D over time had evolved into a pretty complex whole. This %D was partly due to the fact that we needed to handle many %D formats, deal with substitute graphics, handle fallbacks %D and driver specifics (objects), etc. In the meantime we %D have more clever backends, moved away from texutil to %D rlxtools, can use runtime or betweentime runs etc. Also, %D more memory permits a cleaner implementation. Time to %D move on. We can now also assume that scaling is available. %D %D Another mess that can go is the llx/lly handling since %D drivers now automatically can determine such things. %D Messages 3 and 5 needs to be translated! \unprotect %D Due to the mere fact that \DVI|/|\PDF\ drivers differ in their %D needs for figure dimensions, we have to provide the width, %D height, horizontal and vertical scale. Also we want to %D specify at the user level either width and|/|or height, scale, %D or a factor related to the current document bodyfont size. %D Even better: we can also specify isometric scaling and %D automatically let \CONTEXT\ calculate the maximum possible %D dimensions. Whatever we calculate, the results will come %D available in the next registers. \letempty \@@DriverImageBox \letempty \@@DriverImageOptions \letempty \@@DriverImageWidth \letempty \@@DriverImageHeight \letempty \@@DriverImageFile \letempty \@@DriverImageLabel \letempty \@@DriverImageType \letempty \@@DriverImageMethod \letempty \@@DriverImagePage %D Because looking for dimensions can take many steps (locating %D the figure, maybe on more directories, scanning the figure %D on dimension, or when not found, trying to find them in the %D utility file, and again when not found, trying to generate %D such a file, and, as a last resort, trying to use the %D dimensions. Now when things do not work out the way we want, %D we can set a switch and get some information on what takes %D place. \newif\iftraceexternalfigures \let\traceexternalfigures\traceexternalfigurestrue \def\doshowfigurestate {\iftraceexternalfigures \expandafter\writestatus\expandafter\m!figures \else \expandafter\gobbleoneargument \fi} \def\doshowfiguremessage {\iftraceexternalfigures \expandafter\gobbletwoarguments \else \expandafter\showmessage\expandafter\m!figures \fi} %D Another switch tells \CONTEXT\ to locate and calculate a %D figure, but does not actually insert it. Especially when we %D use \PDFTEX\ this saves a lot of time on trialruns. (Keep %D in mind that \PDFTEX\ is both a \TEX\ pre|| and postprocessor.) \newif\ifskipexternalfigures % can be set elsewhere % \newif\ifrunutilityfile % \newif\ifconsultutilityfile % % Let's save two hash entries: \let\runutilityfiletrue \relax \let\runutilityfilefalse \relax \let\consultutilityfiletrue\relax \let\consultutilityfilefalse\relax %D Intermediate, private. \newdimen\determinedfigurewidth \newdimen\determinedfigureheight \let\naturalfigureheight\!!zeropoint \let\naturalfigurewidth \!!zeropoint \def\defaultfigurewidth {8\lineheight} \def\defaultfigureheight{6\lineheight} \def\defaultfigurepathsignal{(\v!default)} \def\checknaturalfiguredimensions {\edef\naturalfigurewidth{\the\dimexpr\ifzeropt\determinedfigurewidth \defaultfigurewidth \else\determinedfigurewidth \fi\relax}% \edef\naturalfigureheight{\the\dimexpr\ifzeropt\determinedfigureheight \defaultfigureheight\else\determinedfigureheight\fi\relax}} %D Locating figures. Dilemma: we do support eps and svg parsing but drivers %D don't always support it. \def\figuretypes{\c!mps,\c!pdf,\c!eps,\c!svg,\c!svg z,\c!png,\c!tif,jb2,\c!jpg} \def\supportedfiguretypes{\figuretypes} \def\checksupportedfiguretypes {\begingroup \global\let\supportedfiguretypes\empty \def\docommand##1% {\doiffileinsertionsupportedelse{##1} {\doglobal\addtocommalist{##1}\supportedfiguretypes} \donothing}% \processcommacommand[\figuretypes]\docommand \gdef\checksupportedfiguretypes{\let\figuretypes\supportedfiguretypes}% \endgroup \checksupportedfiguretypes} %D The next box is used to store the graphic. It's globally assigned. \newbox\foundexternalfigure \chardef\figurestatus\zerocount % nothing found \def\noffigurepages{\nofinsertpages} %D Variables. \newtoks\everyexternalfigureresets \def\resetfigurevariables {\the\everyexternalfigureresets} %D Example usage: \appendtoks \global\let\externalfigurelog\empty \to\everyexternalfigureresets %D Intermediate, private \def\resetprivatefigurevariables {\let \wantedfigurefull \empty \let \wantedfigurepath \empty \let \wantedfigurename \empty \let \wantedfigurebase \empty \let \wantedfiguretype \empty \let \wantedfigurefullname \empty \let \wantedfiguretypespec \empty \let \wantedfiguremethod \empty \let \wantedfigurepage \empty \let \wantedfigureoptions \empty \let \wantedfigureconversion\empty \let \wantedfigureprefix \empty \let \wantedfiguretypelist \figuretypes \let \figurepathlist \empty \chardef \figurestatus \zerocount \let \expandedfigurename \empty \global\let \analyzedfigurewidth \!!zeropoint % set by indentifying code \global\let \analyzedfigureheight \!!zeropoint % set by indentifying code \global\setbox\foundexternalfigure \emptybox \def \frozenfigurestamp {\externalfigurestamp}} % no edef \resetprivatefigurevariables \appendtoks \resetprivatefigurevariables \to\everyexternalfigureresets %D Private/public. \def\resetpublicfigurevariables {\let\figurewidth \!!zeropoint \let\figureheight \!!zeropoint \let\figurenaturalwidth \!!zeropoint \let\figurenaturalheight \!!zeropoint \let\figurelabel \empty \let\figurefileoriginal \empty \let\figurefileoptions \empty \let\figurefilename \empty \let\figurefiletype \empty \let\figurefilepage \!!zerocount \let\figurefileconversion\empty \let\figurefileprefix \empty \let\figurefilepath \empty \let\figurefilecache \empty} \resetpublicfigurevariables \appendtoks \resetpublicfigurevariables \to\everyexternalfigureresets \newcounter\figurenestinglevel \def\pushpublicfigurevariables {\ifcase\figurenestinglevel\else \doshowfigurestate{variables : push}% \globalpushmacro\figurewidth \globalpushmacro\figureheight \globalpushmacro\figurenaturalwidth \globalpushmacro\figurenaturalheight \globalpushmacro\figurelabel \globalpushmacro\figurefileoriginal \globalpushmacro\figurefileoptions \globalpushmacro\figurefilename \globalpushmacro\figurefiletype \globalpushmacro\figurefilepage \globalpushmacro\figurefileconversion \globalpushmacro\figurefileprefix \globalpushmacro\figurefilepath \globalpushmacro\figurefilecache \fi} \def\poppublicfigurevariables {\ifcase\figurenestinglevel\else \doshowfigurestate{variables : pop}% \globalpopmacro\figurefilecache \globalpopmacro\figurefilepath \globalpopmacro\figurefileprefix \globalpopmacro\figurefileconversion \globalpopmacro\figurefilepage \globalpopmacro\figurefiletype \globalpopmacro\figurefilename \globalpopmacro\figurefileoptions \globalpopmacro\figurefileoriginal \globalpopmacro\figurelabel \globalpopmacro\figurenaturalheight \globalpopmacro\figurenaturalwidth \globalpopmacro\figureheight \globalpopmacro\figurewidth \fi} \def\setpublicfigurevariables % todo: type vs typespec {\xdef\figurewidth {\the\wd\foundexternalfigure}% \xdef\figureheight {\the\ht\foundexternalfigure}% \xdef\figurenaturalwidth {\naturalfigurewidth}% \xdef\figurenaturalheight {\naturalfigureheight}% \xdef\figurelabel {\wantedfigurelabel}% \xdef\figurefilepath {\wantedfigurepath}% \xdef\figurefilename {\wantedfigurename}% \xdef\figurefiletype {\wantedfiguretypespec}% \xdef\figurefilepage {\wantedfigurepage}% \xdef\figurefileoptions {\wantedfigureoptions}% \xdef\figurefileconversion{\wantedfigureconversion}% \xdef\figurefilecache {\wantedconversioncache}% \xdef\figurefileprefix {\wantedconversionprefix}% \xdef\figurefileoriginal {\wantedconversionname}% \xdef\figurefullname {\wantedfigurepath/\wantedfigurename.\wantedfiguretypespec}% \ifcase\figurestatus \let\figurefiletype\empty % ? \fi} \def\setpublicfigurescalevariables {\edef\figurescalewidth {\finalscaleboxwidth }% \edef\figurescaleheight {\finalscaleboxheight}% \edef\figurescalexscale {\finalscaleboxxscale}% \edef\figurescaleyscale {\finalscaleboxyscale}} \def\resetpublicfigurescalevariables {\let\figurescalewidth \!!zeropoint \let\figurescaleheight \!!zeropoint \let\figurescalexscale \!!plusone \let\figurescaleyscale \!!plusone} \resetpublicfigurescalevariables \appendtoks \resetpublicfigurescalevariables \to \everyexternalfigureresets %D The next one is for instance used in symbols. Since %D we only need to reset some parameters, we can %D better use the fast alternative: %D %D \starttyping %D \def\resetexternalfigures %D {\getparameters[\??ef] %D [\c!option=,\c!maxwidth=,\c!maxheight=, %D \c!foregroundcolor=,\c!color=, %D %\c!conversion=,\c!prefix=,\c!splitcolor=, %D \c!frame=\v!off,\c!background=]} %D \stoptyping %D %D This one dropped the runtime of the \MAPS\ bibliography %D from over 110 seconds down to less than 105 seconds. The %D tremendously faster (but uglier) implementation is: \def\resetexternalfigures {\let\@@efoption \empty % \let\@@efprefix\empty \let\@@efmaxwidth \empty % \let\@@efcache \empty \let\@@efmaxheight \empty % \let\@@efframe \v!off \let\@@efforegroundcolor\empty \let\@@efcolor \empty \let\@@efconversion \empty \let\@@efbackground \empty} %D The following code will move: \appendtoks \resetexternalfigures \to \everyoverlay \appendtoks \resetexternalfigures \to \everybeforepagebody % not really needed %appendtoks \resetexternalfigures \to \everysymbol %D We need this one for bookkeeping: \newcounter\forcedMPSobject % better something \every %D Features: % converted -> prefix, suffix % alternative -> other suffix % buffer -> prefix %D Still messy: \newtoks\everyfiguretypepresets \def\presetfiguretypeprocessing {\the\everyfiguretypepresets} \def\presetspecialfigure#1% {\doif\wantedfiguretype{#1}% {\let\@@efobject\v!no \let\@@efpreset\v!no \ifx\@@efwidth \empty\def\@@efwidth {\defaultfigurewidth }\fi \ifx\@@efheight\empty\def\@@efheight{\defaultfigureheight}\fi}} \appendtoks \presetspecialfigure\c!mov \presetspecialfigure\c!avi \to \everyfiguretypepresets \def\checkformpsfigurefiles % to be checked {\doif\wantedfigurename{mprun} {\doshowfigurestate{type check : forcing mps (mprun)}% \doifnotinstring{^\bufferprefix}{^\wantedfigurename} {\edef\wantedfigurename{\bufferprefix\wantedfigurename}}% \let\wantedfiguremethod \c!mps \let\wantedfiguretypespec\c!mps}% \doifnumberelse\wantedfiguretype {\doshowfigurestate{type check : forcing mps (number)}% \let\wantedfiguremethod \c!mps \let\wantedfiguretypespec\c!mps} \donothing \doif\wantedfiguretypespec\c!mps {\let\wantedfiguretypelist\wantedfiguretypespec \ifcase\EPSspecial\else\ifinobject\else \doglobal\increment\forcedMPSobject \edef\externalfigurestamp{\c!mps::\forcedMPSobject}% \let\@@efobject\v!yes \fi\fi}} \appendtoks \checkformpsfigurefiles \to \everyfiguretypepresets \def\checkfortexfigurefiles % to be checked (brrr: c!) / brrr: eftype {\doifinset\wantedfiguretype{\c!tex,\c!tmp} {\let\wantedfiguretypespec \wantedfiguretype}% \doifinset\wantedfiguretypespec{\c!tex,\c!tmp,\v!buffer} {\doshowfigurestate{type check : forcing tex (\wantedfiguretypespec)}% \let\wantedfiguretypelist\wantedfiguretypespec \let\wantedfiguremethod \c!tex \let\@@efobject\v!no \doifnothing\wantedfiguretype{\let\wantedfiguretype\c!tmp}% % there can be a non buffer \jobname.tmp (made by texexec) \doifnotinstring{^\bufferprefix}{^\wantedfigurename} {\edef\wantedfigurename{\bufferprefix\wantedfigurename}}}} \appendtoks \checkfortexfigurefiles \to \everyfiguretypepresets \def\checkforunknownfigurefiles {\doifnothing\wantedfiguretype {\dogetcommacommandelement\plusone\from\@@eftype\to\commalistelement \edef\wantedfigurefullname{\wantedfigurename.\commalistelement}}} \appendtoks \checkforunknownfigurefiles \to \everyfiguretypepresets % note * : this is needed because reusable graphics % combined with funny page aspect aspect ratio's can lead to % strange side effects of preceding factor=max specs. This % surfaced in the metafun manual, where the two side by % side clipped cow heads [the second one was a reused object] % where the second one inherited some characteristics from % the factor=max one some 30 pages back. Sigh. \chardef\splitexternalfigure\zerocount % 0 nosplit 1 split/yes 2 split/no \def\checkfigurecolorsettings {% seperation, seldom used \doifseparatingcolorselse {\let\@@efforegroundcolor\empty \doifelsenothing\@@efsplit {\chardef\splitexternalfigure\zerocount} {\doifcolorchannelelse\@@efsplit {\let\@@efobject\v!no % why? \chardef\splitexternalfigure\plusone} {\chardef\splitexternalfigure\plustwo}}} {\chardef\splitexternalfigure\zerocount}% % fake color in gray bitmaps, assumes that % a transparent color is used \doifsomething\@@efforegroundcolor {\def\@@efbackground{\v!foreground,\v!color}% \def\@@efbackgroundcolor{\@@efforegroundcolor}}% \doifsomething\@@efcolor {\doifcolorelse\@@efcolor {\checkpredefinedcolor[\@@efcolor]% \doregisterfigurecolor\@@efcolor}}% \donothing} \def\setextrafiguredriveroptions {\let\@@DriverImageOptions\empty \doifsomething\@@efpage {\addtocommalist\@@efpage \@@DriverImageOptions}% \doif \@@efpreview \v!yes{\addtocommalist\v!preview \@@DriverImageOptions}% \doif \@@efcontrols\v!yes{\addtocommalist\v!controls\@@DriverImageOptions}% \doif \@@efrepeat \v!yes{\addtocommalist\v!repeat \@@DriverImageOptions}% \doifinsetelse\@@efsize{mediabox,cropbox,artbox,bleedbox,trimbox} {\let \@@DriverImageBox \@@efsize}% {\doifinsetelse\@@efsize{media,crop,art,bleed,trim} {\edef\@@DriverImageBox{\@@efsize box}}% {\let \@@DriverImageBox \empty}}% \let\wantedfigureoptions\@@DriverImageOptions} \def\checkiffigureobjectpresent {\doifnot\@@efobject\v!no {\doifobjectssupportedelse {\doifobjectfoundelse{FIG}\externalfigurestamp {\doshowfigurestate{object found : \externalfigurestamp}% \getobjectdimensions{FIG}\externalfigurestamp \edef\frozenfigurestamp{\externalfigurestamp}% \xdef\analyzedfigurewidth {\the\dimexpr\objectwidth \relax}% \xdef\analyzedfigureheight{\the\dimexpr\objectheight\relax}% \setanalyzedfiguredimensions\plusone} {\doshowfigurestate{unknown object: \externalfigurestamp}}} {}}} \def\checkifknownfigureobjectpresent {\ifx\wantedfiguretype\empty \let\savedwantedfiguretype\wantedfiguretype \def\docommand##1% {\ifcase\figurestatus \edef\wantedfiguretype{##1}% \checkiffigureobjectpresent \fi}% \processcommacommand[\figuretypes]\docommand \ifcase\figurestatus \let\wantedfiguretype\savedwantedfiguretype \fi \fi} \def\checkforfigurefile {\ifcase\figurestatus \ifconditional\externalfigureflush \analyzefigurefiles \fi \fi} \def\externalfigurestamp % needs \edef'd macros! {\ifx\wantedfigurepath\empty\else -\wantedfigurepath \fi \wantedfigurename \ifx\wantedfiguretype\empty\else \ifx\wantedfiguretype\s!unknown\else -\wantedfiguretype \fi \fi \ifx\wantedfiguretypespec\empty\else \ifx\wantedfiguretypespec\s!unknown\else \ifx\wantedfiguretypespec\wantedfiguretype\else -\wantedfiguretypespec \fi \fi \fi \ifnum\wantedfigurepage>\zeropoint -\wantedfigurepage \fi} \def\checkfigurerenderingoptions {\ifcase\figurestatus \let\@@efframe\v!on \fi \doif\@@exoption\v!frame {\let\@@efframe\v!on}% \doif\@@exoption\v!empty {\skipexternalfigurestrue \let\@@efframe\v!off}} \newtoks\externalfigurepostprocessors \def\resetfigureusersettings {\let\@@eftype \s!unknown \let\@@efmethod \empty \let\@@efpreset\v!yes \let\@@eflabel \empty \let\@@efsize \empty \let\@@efpage \!!zerocount \let\@@efobject \@@exobject \let\@@efdisplay \empty \let\@@efsplit \empty \let\@@efcolor \empty \let\@@efsymbol\v!no \let\@@efcontrols \v!no \let\@@efpreview \v!no \let\@@efrepeat\v!no \let\@@efhfactor \empty \let\@@efwfactor \empty \let\@@effactor\empty \let\@@efmaxwidth \@@exmaxwidth \let\@@efmaxheight\@@exmaxheight \let\@@efxscale \empty \let\@@efyscale \empty \let\@@efscale \empty \let\@@efsx \!!plusone \let\@@efsy \!!plusone \let\@@efwidth \empty \let\@@efheight \empty \let\@@eflines \empty \let\@@efgrid \empty \let\@@efconversion\@@exconversion \let\@@efprefix \@@exprefix \let\@@efcache \@@excache} %D Types and Methods are a bit history. Anyhow, user scan use the %D type to force the handler. So, what to do with the method. We can %D use that one to force a handler with a given suffix, so when no %D type is given, but a suffix is part of the name, the method will %D determine the handler. \def\checkfigureusersettings {\doif\@@efreset\v!yes\resetexternalfigures \doifelsenothing\@@eflabel {\doifnothing\wantedfigurelabel{\let\wantedfigurelabel\wantedfigurename}}% {\let\wantedfigurelabel\@@eflabel}% \doifsomething\@@eftype {\doifnot\@@eftype\s!unknown {\edef\wantedfiguretypespec{\@@eftype}% \let\wantedfiguremethod\wantedfiguretypespec}}% \doifnothing\wantedfigurepage % can be set by plug in {\let\wantedfigurepage\@@efpage}% \doif\wantedfigurepage\empty {\let\wantedfigurepage\!!zerocount}% 0 is signal ! \doifsomething\@@efmethod % rather untested misusage of the remapper {\doifsomething\wantedfiguretype {\definegraphictypesynonym[\wantedfiguretype][\@@method]}}} % #1 is now obsolete \def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% \cmd label filename parent_id preset current {\doshowfigurestate{begin}% \dontcomplain % let's limit the search, which means that e.g. svg has to be given explicitly \checksupportedfiguretypes % recently added; we presume local use \restorecatcodes % collected resets (token list) \resetfigurevariables \resetwantedconversionvariables % new here % analyze filename and set wanted variables \analyzefigurefilename{#3}{#2}% \doanalyzefiguredimensionsfromfile % handle user settings \resetfigureusersettings \dosetefparameters{#4}{#5}{#6}% \checkfigureusersettings \checkfigurecolorsettings % adapt settings based on suffix and/or type \presetfiguretypeprocessing % now we really start \checkiffigureobjectpresent % first guess, we may not yet know the typespec \checkifknownfigureobjectpresent \checkforfigurefilepresence \checkiffigureobjectpresent % to be sure, in case we now know the typespec \checkfigurerenderingoptions % was later, moved here \checknaturalfiguredimensions % inherit from global values and/or fallbacks % by now we know what we're dealing with (put in box and scale) \setextrafiguredriveroptions \prepackageexternalfigureobject % set public variables in case postprocessing needs them \pushpublicfigurevariables \setpublicfigurevariables \setpublicfigureconversionvariables \setpublicfigurescalevariables % package final graphic, only now we can apply backgrounds and such \doglobal\increment\figurenestinglevel \finishexternalfigure \doglobal\decrement\figurenestinglevel % restore variables \poppublicfigurevariables \doshowfigurestate{end}} \def\checkforfigurefilepresence {\checkforconvertedfigure \checkforfigurefile} %D Figure objects. \def\setfigureobject {\doshowfigurestate{object set : \externalfigurestamp}% \setobject{FIG}\externalfigurestamp} % \def\getfigureobject % {\doshowfigurestate{object used : \externalfigurestamp}% % \getobject{FIG}\externalfigurestamp} \def\getfigureobject {\doshowfigurestate{object used : \frozenfigurestamp}% \getobject{FIG}\frozenfigurestamp} \def\prepackageexternalfigureobject {\ifcase\figurestatus \doshowfiguremessage1\expandedfigurename \doshowfigurestate{state : figure not found (\expandedfigurename)}% \global\setbox\foundexternalfigure\naturalvbox {\doscalebox\??ef{\blackrule[\c!width=\naturalfigurewidth,\c!height=\naturalfigureheight]}}% \xdef\noffigurepages{0}% \or \doshowfiguremessage8\expandedfigurename \doshowfigurestate{state : reusing existing figure}% \global\setbox\foundexternalfigure\naturalvbox {\doscalebox\??ef{\dowithfigure{\getfigureobject}}}% \xdef\noffigurepages{\number\getvalue{\externalfigurestamp\c!n}}% \or \doshowfiguremessage2\expandedfigurename \doshowfigurestate{state : using special figure}% \setbox\scratchbox\naturalvbox % make a dummy {\doscalebox\??ef{\blackrule[\c!width=\naturalfigurewidth,\c!height=\naturalfigureheight]}}% \global\setbox\foundexternalfigure\naturalvbox to \finalscaleboxheight {\vfill \hsize\finalscaleboxwidth \dowithfigure{\insertscaledfiguredriverdata}}% \xdef\noffigurepages{\number\nofinsertpages}% \else \ifdim\naturalfigurewidth>\zeropoint \ifnum\figurestatus>\!!ten\relax \doshowfiguremessage3\expandedfigurename \else \doshowfiguremessage4\expandedfigurename \fi \else \doshowfiguremessage5\expandedfigurename \fi \doshowfigurestate{state : using found figure}% 3=self 4=rlx \doifelse\@@efobject\v!no {\donefalse} {\doifobjectssupportedelse\donetrue\donefalse}% \ifdone % make an object and use it \packageexternalfigureobject \setfigureobject\vbox{\box\foundexternalfigure}% \setxvalue{\externalfigurestamp\c!n}{\number\nofinsertpages}% \global\setbox\foundexternalfigure\naturalvbox {\doscalebox\??ef{\dowithfigure{\getfigureobject}}}% \xdef\noffigurepages{\number\getvalue{\externalfigurestamp\c!n}}% \else % maybe a tex figure \global\setbox\foundexternalfigure\naturalvbox {\doscalebox\??ef{\dowithfigure{\box\foundexternalfigure}}}% \xdef\noffigurepages{\number\nofinsertpages}% \fi \fi \wd\foundexternalfigure\finalscaleboxwidth \ht\foundexternalfigure\finalscaleboxheight \global\let\lastfigureobjectname\externalfigurestamp \doresetobjects} % clean up driver left overs \def\packageexternalfigureobject {\global\setbox\foundexternalfigure\vbox to \naturalfigureheight {\vfill \ifdim\wd\foundexternalfigure=\zeropoint \setextrafiguredriveroptions \insertunscaledfiguredriverdata \else\ifskipexternalfigures \ruledhbox{\backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}}% \else \box\foundexternalfigure \fi\fi}% \wd\foundexternalfigure\naturalfigurewidth \ht\foundexternalfigure\naturalfigureheight} \def\finishexternalfigure % here we use \figurevariables {\global\setbox\foundexternalfigure\vbox {\forgetall \ifcase\figurestatus \resetsystemmode\v!figure % todo, also: \v!resource \else \setsystemmode \v!figure % todo, also: \v!resource \fi \ifconditional\externalfigureflush \ifconditional\externalfigurelevel % probably background \ifskipexternalfigures % nothing \fakebox\foundexternalfigure \else\ifcase\figurestatus % nothing \else\ifnum\splitexternalfigure=\plustwo\else \the\externalfigurepostprocessors \box\foundexternalfigure \fi\fi\fi \else \iftrialtypesetting \else \feedbackexternalfigure \fi \settrue\externalfigurelevel \ifskipexternalfigures \ifcase\figurestatus \externalfigurereplacement\figurelabel\figurefilename{unknown}% \else \externalfigurereplacement\figurelabel\figurefullname{skipped}% \fi \else\ifcase\figurestatus \externalfigurereplacement\figurelabel\figurefilename{unknown}% \else\ifnum\splitexternalfigure=\plustwo \backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}% \else \the\externalfigurepostprocessors \doifelse\@@efreset\v!yes {\wd\foundexternalfigure\figurewidth \ht\foundexternalfigure\figureheight \dp\foundexternalfigure\zeropoint \box\foundexternalfigure} {\localframed % should also be applied to high res ! [\??ef] [\c!offset=\v!overlay, \c!width=\figurewidth, \c!height=\figureheight] {\vfilll \ifnum\splitexternalfigure=\plusone % hm, eigenlijk in dit geval achtergrondkleur \hidesplitcolorfalse % really needed \backgroundline[\@@efsplitcolor]{\box\foundexternalfigure}% \else % = 0, no split mode \box\foundexternalfigure \fi}}% \fi\fi\fi \fi \else % maybe also \the\externalfigurepostprocessors \iftrialtypesetting \else \feedbackexternalfigure \fi \fi}} \def\insertfiguredriverdata#1#2% {\lowercasestring\wantedfiguretypespec\to\lcwantedfiguretypespec \lowercasestring\wantedfiguremethod \to\lcwantedfiguremethod \edef\@@DriverImageWidth {\the\dimexpr#1\relax}% \edef\@@DriverImageHeight{\the\dimexpr#2\relax}% \let \@@DriverImageFile \wantedfigurefullname \let \@@DriverImageType \lcwantedfiguretypespec \let \@@DriverImageMethod \lcwantedfiguremethod \let \@@DriverImageLabel \wantedfigurelabel \let \@@DriverImagePage \wantedfigurepage \doinsertfile} \def\insertunscaledfiguredriverdata {\insertfiguredriverdata\naturalfigurewidth\naturalfigureheight} \def\insertscaledfiguredriverdata {\insertfiguredriverdata\finalscaleboxwidth\finalscaleboxheight} \ifx\externalfigurereplacement\undefined\let\externalfigurereplacement\gobblethreearguments\fi \ifx\externalfigureplaceholder\undefined\let\externalfigureplaceholder\gobblethreearguments\fi \def\registerexternalfigure % no placement, handy for preprocessing {\dotripleempty\doregisterexternalfigure} \def\doregisterexternalfigure[#1][#2][#3]% {\bgroup \setfalse\externalfigureflush \externalfigure[#1][#2][#3]% or \doexternalfigure \egroup} \let\feedbackexternalfigure\relax % \gobblefourarguments \let\dowithfigure \relax %D Conversion stuff: \newcount\nofconversionfigures \def\resetwantedconversionvariables {\let\wantedconversionpath \empty % these point to the to be converted graphic \let\wantedconversionname \empty \let\wantedconversiontype \empty \let\wantedconversioncache \empty \let\wantedconversionprefix\empty} \resetwantedconversionvariables \def\checkforconvertedfigure {\ifcase\figurestatus \resetwantedconversionvariables \doifsomething\@@efconversion {\global\advance\nofconversionfigures\plusone \doshowfigurestate{n-of-conversions : \number\nofconversionfigures}% \edef\wantedfigureconversion{\@@efconversion}% \edef\wantedconversioncache {\@@efcache}% \edef\wantedconversionprefix{\@@efprefix}% \doshowfigurestate{checking paths : \figurepathlist}% \processcommacommand[\figurepathlist]\dolocatefigureconversionfile \ifcase\figurestatus \doshowfigurestate{remark : no conversion file found}% \else \doshowfigurestate{remark : conversion file found}% \chardef\figurestatus\zerocount \fi \let\wantedconversionname\wantedfigurename \edef\wantedfigurename{\wantedconversionprefix\wantedfigurename}% \ifx\wantedconversioncache\empty \let \wantedfigurepath \wantedconversionpath \else \checkfilename\@@efcache \ifnum\kindoffile=\plusone \let\wantedfigurepath\@@efcache % root related path \else % brrr \edef\wantedfigurepath{\@@efcache,\wantedconversionpath/\@@efcache}% in case of explicit paths, what a mess \fi \fi \let\wantedfiguretype \empty \let\wantedfiguretypelist\figuretypes % hm, why needed \ifx\figurepathlist\empty \let\figurepathlist\wantedfigurepath \else \edef\figurepathlist{\wantedfigurepath,\figurepathlist}% \fi \doshowfigurestate{conversion path : \wantedconversionpath}% \doshowfigurestate{conversion name : \wantedconversionname}}% \doshowfigurestate{new figure path : \wantedfigurepath}% \fi} \def\dolocatefigureconversionfile#1% {\ifcase\figurestatus \setwantedfigurefullname{#1}\wantedfigurename\wantedfiguretype \doshowfigurestate{locating original : \wantedfigurefullname}% \doiffile\wantedfigurefullname {\def\wantedconversionpath{#1}% \let\wantedconversionname\wantedfigurename \let\wantedconversiontype\wantedfiguretype \chardef\figurestatus\plusfive}% \fi} \def\setpublicfigureconversionvariables % also prefix, cache {\doifsomething\@@efconversion {\doifmode{\systemmodeprefix\v!first} {\let\figurefilepath\wantedconversionpath \let\figurefilename\wantedconversionname \let\figurefiletype\wantedconversiontype \let\figurefileconversion\wantedfigureconversion \def\figurefullname {\ifx\wantedconversionpath\empty\else\wantedconversionpath/\fi \wantedconversionname \ifx\wantedconversiontype\empty\else.\wantedconversiontype\fi}}}} %D In \PDF\ one can specify an alternative graphic. This means %D that for instance a low resolution graphic can be used for %D viewing and a high res one for printing. Because this %D feature depends much on the driver, here we only take care %D of perparations. It is up to the special driver to handle %D the inclusion. The driver routines can change the content of %D box \type {\foundexternalfigure} if suitable. %D %D One complication is for instance that an alternative may %D not itself have an alternative, and these kind of situations %D are best handled by the driver. \let\lastfigureobjectname\empty %D The next macro does not work well with figure bases yet. \def\calculateexternalscreenfigure[#1][#2][#3][#4][#5][#6]% {\ifx\@@efdisplay\empty\else \doifnot\@@efobject\v!no {\doifobjectssupportedelse {\doifspecialavailableelse\doregisterfigure {\doshowfigurestate{screen alternative : start}% \bgroup \dosetefparameters{#4}{#5}{#6}% \doregisterfigure{FIG}{\lastfigureobjectname}% \let\@@ef@@scherm\@@efdisplay \calculateexternalfigure[#1][\@@ef@@scherm][\@@ef@@scherm][#4,\c!display=][#5][#6]% \doshowfigurestate{screen alternative : stop}% \egroup} {}} {}}% \fi} \def\getfiguredimensions {\dodoubleempty\dogetfiguredimensions} \def\dogetfiguredimensions[#1][#2]% {{\let\immediate\relax % very dirty but prevents flushing, will change \setbox0\hbox{\externalfigure[#1][#2,\c!display=,\c!object=\v!no]}}} % use the next one when the object must be forgotten (xobj % nums can migrate to the next object; maybe it should % always be done; todo .... \def\getfiguredimensionsonly {\dodoubleempty\dogetfiguredimensionsonly} \def\dogetfiguredimensionsonly[#1][#2]% {\dogetfiguredimensions[#1][#2]% \doresetobjects} \def\doiffigureelse#1% {\getfiguredimensions[#1]% so data is available ! \ifdim\analyzedfigurewidth=\zeropoint % todo: \figurestatus \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} %D Size determination. %D %D An analyzer must set the following dimensions (global macros): %D %D \starttyping %D \analyzedfigurewidth %D \analyzedfigureheight %D \stoptyping %D %D And afterwards, when succeeded, call: %D %D \starttyping %D \setanalyzedfiguredimensions{number>=10} %D \stoptyping %D %D Numbers upto 9 are reserved for special purposes: %D %D \starttabulate %D \NC 0 \NC not found \NC \NR %D \NC 1 \NC object (will be reused) \NC \NR %D \NC 2 \NC found but no dimensions (e.g. special annotation) \NC \NR %D \stoptabulate \let\doanalyzefiguredimensionsfromfile\relax % hook for figuredatabase \let\doanalyzefiguredimensionsinternal\relax \let\doanalyzefiguredimensionsexternal\relax % hook for rli support (see later) \let\doanalyzefiguredimensionsfallback\relax \def\doanalyzefiguredimensions {\lowercasestring\wantedfiguretypespec\to\lcwantedfiguretypespec \doiffileinsertionsupportedelse\lcwantedfiguretypespec {\doiffileelse\wantedfigurefullname {\doshowfigurestate{analyzing : \wantedfigurefullname}% \doanalyzefiguredimensionsinternal \doanalyzefiguredimensionsexternal \doanalyzefiguredimensionsfallback} {\doshowfigurestate{not found : \wantedfigurefullname}}} {}} \def\setanalyzedfiguredimensions#1% {\ifdim\analyzedfigurewidth>\zeropoint \ifdim\analyzedfigureheight>\zeropoint \determinedfigurewidth \analyzedfigurewidth \determinedfigureheight\analyzedfigureheight \chardef\figurestatus #1\relax \doshowfigurestate{dimensions : \the\dimexpr\analyzedfigurewidth\relax\space x\space \the\dimexpr\analyzedfigureheight\relax}% \else \determinedfigurewidth \zeropoint \determinedfigureheight\zeropoint \chardef\figurestatus \zerocount \fi \else \determinedfigurewidth \zeropoint \determinedfigureheight\zeropoint \chardef\figurestatus \zerocount \fi} %D We can remap types. This is to be dealt with in the driver files. \def\definegraphictypesynonym {\dodoubleargument\dodefinegraphictypesynonym} \def\dodefinegraphictypesynonym[#1][#2]% {\setvalue{\??ef:\??ex:#1}{#2}} \def\truegraphictype#1% {\ifcsname\??ef:\??ex:#1\endcsname \expandafter\truegraphictype\csname\??ef:\??ex:#1\endcsname\else#1% \fi} \definegraphictypesynonym[epdf] [pdf] \definegraphictypesynonym[jpeg] [jpg] \definegraphictypesynonym[jp2] [jpg] \definegraphictypesynonym[jbig] [jb2] \definegraphictypesynonym[jbig2][jb2] \definegraphictypesynonym[jbg] [jb2] %D The self method (mostly used) uses the driver. % todo: when zero width mps, ok % % analyzer must set the analyzed dimensions \def\doanalyzefiguredimensionsinternal {\ifcase\figurestatus \lowercasestring\wantedfiguretypespec\to\lcwantedfiguretypespec \let\@@DriverImageFile \wantedfigurefullname \let\@@DriverImagePage \wantedfigurepage \let\@@DriverImageType\lcwantedfiguretypespec % use internal when available, otherwise try driver (\dogetfiguresize) \executeifdefined{dogetfiguresize\@@DriverImageType}\dogetfiguresize \setanalyzedfiguredimensions\!!ten \fi} %D The tex method. \def\dogetfiguresizetex {\ifcase\figurestatus \global\setbox\foundexternalfigure\vbox {\insidefloattrue \forgetall \blank[\v!disable]% niet meer weg ! \startreadingfile \readfile\wantedfigurefullname \donothing \donothing \stopreadingfile \endgraf \removelastskip}% \global\setbox\foundexternalfigure\hbox {\raise\dp\foundexternalfigure\box\foundexternalfigure}% \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}% \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}% \fi} \let\dogetfiguresizetmp \dogetfiguresizetex \let\dogetfiguresizebuffer\dogetfiguresizetex %D The eps, mps and svg files are read directly. \def\dogetfiguresizeeps {\dogetEPSboundingbox\wantedfigurefullname\!!widtha\!!heighta\!!widthb\!!heightb \xdef\analyzedfigurewidth {\the\!!widthb}% \xdef\analyzedfigureheight{\the\!!heightb}} \let\dogetfiguresizemps\dogetfiguresizeeps \def\dogetfiguresizesvg {\doifinset\wantedfiguretypespec\c!svg {\startnointerference \startXMLignore \defineXMLcommand[svg][width=100,height=75] {\doifdimensionelse{\XMLop{width}} {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{width}\relax}} {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{width}\onebasepoint\relax}}% \doifdimensionelse{\XMLop{height}} {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{height}\relax}} {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{height}\onebasepoint\relax}}% \endinput}% \processXMLfilegrouped\wantedfigurefullname \stopXMLignore \stopnointerference}} %D Do some checking on the filename. \newconditional \figurefileisqualified \def\setfigurepathlist {\let\figurepathlist\empty \expanded{\doifinset{\v!global }{\@@exlocation}} {\let\figurepathlist\@@exdirectory}% \expanded{\doifinset{\v!local }{\@@exlocation}} {\prependtocommalist\f!currentpath\figurepathlist}% \expanded{\doifinset{\v!default}{\@@exlocation}} {\appendtocommalist\defaultfigurepathsignal\figurepathlist}} % The combined path and qualified path hack is dedicated to Onno Tomson, % our partner in fighting inconsistent and faulty image specifications in % user files. \def\analyzefigurefilename#1#2% {\sanitizefilename#1\to\expandedfigurename \expanded{\checkfilename{\expandedfigurename}}% \ifcase\kindoffile \splitfigurefilename \ifcase\splitoffkind \let\wantedfigurepath\empty % no . either \setfigurepathlist \setfalse\figurefileisqualified \else \splitfigurefilename % will become splitoffkind 3 ! ! ! ! \setfalse\figurefileisqualified \doifinstring{$$/}{$$\wantedfigurepath}{\settrue\figurefileisqualified}% \doifinstring {:} {\wantedfigurepath}{\settrue\figurefileisqualified}% \ifconditional\figurefileisqualified \let\figurepathlist\wantedfigurepath \let\wantedfigurepath\empty \settrue\figurefileisqualified \else \let\figurepathlist\@@exdirectory \let\oldfigurepathlist\figurepathlist \let\figurepathlist\wantedfigurepath \def\docommand##1{\edef\figurepathlist{\figurepathlist,##1/\wantedfigurepath}}% \processcommacommand[\oldfigurepathlist]\docommand \fi \fi \else % fully qualified \splitfigurefilename \let\wantedfigurepath\empty \settrue\figurefileisqualified \fi \ifx\figurepathlist\empty \let\figurepathlist\defaultfigurepathsignal % will prepend no path \fi \doifelsenothing\wantedfiguretype {\doifparentfileelse\wantedfigurename {\@EA\removefromcommalist\@EA{\jobsuffix }\wantedfiguretypelist \@EA\removefromcommalist\@EA{\jobfilesuffix}\wantedfiguretypelist} {}} {\let\wantedfiguretypelist\empty \let\wantedfiguretypespec\wantedfiguretype}% \edef\wantedfigurelabel{#2}% \doshowfigurestate{type check : \ifx\wantedfiguretypelist\empty forced type \wantedfiguretypespec\else\wantedfiguretypelist\fi}% \doshowfigurestate{file specs : \wantedfigurefull\space [\wantedfigurepath] [\wantedfigurename] [\wantedfiguretype]}% \doshowfigurestate{file type : \ifconditional\figurefileisqualified qualified\else simple\fi}} \def\setwantedfigurefullname#1#2#3% path name spec {\ifx\wantedfiguremethod\empty % the either explicit or gambled typespec determines the method \edef\wantedfiguretypespec{#3}% \doifelse{#1}\defaultfigurepathsignal {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}} {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}% \else\ifx\wantedfiguretype\empty % % the typespec (probably the same as the method) determines the suffix \doifelse{#1}\defaultfigurepathsignal {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}} {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}% \let\wantedfiguretypespec\wantedfiguremethod \else % the given suffix is used \let\wantedfiguretypespec\wantedfiguremethod \doifelse{#1}\defaultfigurepathsignal {\edef\wantedfigurefullname {#2.\wantedfiguretype}} {\edef\wantedfigurefullname{#1/#2.\wantedfiguretype}}% \fi\fi} \def\splitfigurefilename {\splitfilename\expandedfigurename \let\wantedfigurefull\splitofffull \let\wantedfigurepath\splitoffpath \let\wantedfigurename\splitoffname \let\wantedfigurebase\splitoffbase \let\wantedfiguretype\splitofftype} \def\analyzefigurefiles {\ifconditional\figurefileisqualified \ifx\wantedfiguretype\empty \doshowfigurestate{locating : unknown type}% \doanalyzeunknownfiguretype \else % this file or none \doshowfigurestate{locating : known type}% \doanalyzequalifiedfigure \fi \else \ifx\wantedfiguretype\empty % locate best fit / check support \doshowfigurestate{locating : best fit}% \doanalyzeunknownfiguretype \else % only check on paths \doshowfigurestate{locating : known types}% \doanalyzeknownfiguretype \fi \fi} \def\doanalyzequalifiedfigure {\let\wantedfigurefullname\wantedfigurefull \let\wantedfiguretypespec\wantedfiguretype \doshowfigurestate{forced type : \wantedfiguretype}% \doshowfigurestate{identifying : \wantedfigurefullname}% \doanalyzefiguredimensions} \def\doanalyzeknownfiguretype {\doshowfigurestate{using paths : \figurepathlist}% \doshowfigurestate{known type : \wantedfiguretype}% \doshowfigurestate{identifying : \wantedfigurename}% \let\wantedfiguretypespec\wantedfiguretype \processcommacommand[\figurepathlist]\dodoanalyzeknownfiguretype} \def\dodoanalyzeknownfiguretype#1% path {\ifcase\figurestatus \setwantedfigurefullname{#1}\wantedfigurename\wantedfiguretype \doanalyzefiguredimensions \fi} \def\doanalyzeunknownfiguretype {\doshowfigurestate{using paths : \figurepathlist}% \doshowfigurestate{using types : \wantedfiguretypelist}% \doshowfigurestate{identifying : \wantedfigurename}% \processcommacommand[\wantedfiguretypelist]\dodoanalyzeunknownfiguretype} \def\dodoanalyzeunknownfiguretype#1% {\processcommacommand[\figurepathlist]{\dododoanalyzeunknownfiguretype{#1}}} \def\dododoanalyzeunknownfiguretype#1#2% type path {\ifcase\figurestatus \setwantedfigurefullname{#2}\wantedfigurename{#1}% path spec \doanalyzefiguredimensions \fi} %D Some files, take for instance movies, cannot easilly be %D parsed on dimensions, that is, not yet. Although the current %D mechanism has no problems with this, as long as the user %D specified width and height reflect the right aspect ratio. %D Nevertheless, when one does not want any scanning done, one %D can disable \type{preset}. When no preset is needed, we only %D locate the file. \def\doanalyzefiguredimensionsfallback {\ifcase\figurestatus \doshowfigurestate{warning : assuming adaptive figure}% \xdef\analyzedfigurewidth {\the\dimexpr\@@efwidth +\zeropoint\relax}% \xdef\analyzedfigureheight{\the\dimexpr\@@efheight+\zeropoint\relax}% \setanalyzedfiguredimensions\plustwo \fi} %D This is \MKII\ only and comes from cont-new (maybe used in a project). % maybe to be integrated (option=...) \def\directexternalfigure {\dodoubleempty\dodirectexternalfigure} \def\dodirectexternalfigure[#1][#2]% {\bgroup \getparameters[\??ef][\c!type=\splitofftype,\c!page=1,#2]% \sanitizefilename#1\to\expandedfigurename \splitfilename\expandedfigurename \let\@@DriverImageWidth \!!zeropoint \let\@@DriverImageHeight \!!zeropoint \let\@@DriverImageFile \splitofffull \let\@@DriverImageType \@@eftype \let\@@DriverImageMethod \@@eftype \let\@@DriverImageLabel \empty \let\@@DriverImagePage \@@efpage \doinsertfile \egroup} % \directexternalfigure[cow.pdf] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-antykwa.mkiv0000644000175000017500000003722111754241457026020 0ustar norbertnorbert%D \module %D [ file=type-imp-antykwa, %D version=2010.06.21, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Antykwa Torunska, %D author=Mojca Miklavec \& Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[antykwa-torunska] \starttypescript [antykwa,antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] \definetypeface[\typescriptone][\s!rm][\s!serif][\typescriptone] [\s!default] \definetypeface[\typescriptone][\s!ss][\s!sans] [modern] [\s!default] [\s!rscale=1.05] \definetypeface[\typescriptone][\s!tt][\s!mono] [modern] [\s!default] [\s!rscale=1.05] \definetypeface[\typescriptone][\s!mm][\s!math] [\typescriptone] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [\s!serif] [antykwa,antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] \definefontsynonym [AntykwaTorunska-Regular] [\s!file:AntykwaTorunska-Regular] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-Italic] [\s!file:AntykwaTorunska-Italic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-Bold] [\s!file:AntykwaTorunska-Bold] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-BoldItalic] [\s!file:AntykwaTorunska-BoldItalic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-Light] [\s!file:AntykwaTorunskaLight-Regular] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-LightItalic] [\s!file:AntykwaTorunskaLight-Italic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-Medium] [\s!file:AntykwaTorunskaMed-Regular] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-MedItalic] [\s!file:AntykwaTorunskaMed-Italic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondRegular] [\s!file:AntykwaTorunskaCond-Regular] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondItalic] [\s!file:AntykwaTorunskaCond-Italic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondBold] [\s!file:AntykwaTorunskaCond-Bold] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondBoldItalic] [\s!file:AntykwaTorunskaCond-BoldItalic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondLight] [\s!file:AntykwaTorunskaCondLight-Regular] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondLightItalic] [\s!file:AntykwaTorunskaCondLight-Italic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondMedium] [\s!file:AntykwaTorunskaCondMed-Regular] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-CondMedItalic] [\s!file:AntykwaTorunskaCondMed-Italic] [\s!features=\s!default] \definefontsynonym [AntykwaTorunska-Cap] [\s!file:AntykwaTorunska-Regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-ItalicCap] [\s!file:AntykwaTorunska-Italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-BoldCap] [\s!file:AntykwaTorunska-Bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\s!file:AntykwaTorunska-BoldItalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-LightCap] [\s!file:AntykwaTorunskaLight-Regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-LightItalicCap] [\s!file:AntykwaTorunskaLight-Italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-MediumCap] [\s!file:AntykwaTorunskaMed-Regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-MedItalicCap] [\s!file:AntykwaTorunskaMed-Italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondCap] [\s!file:AntykwaTorunskaCond-Regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondItalicCap] [\s!file:AntykwaTorunskaCond-Italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondBoldCap] [\s!file:AntykwaTorunskaCond-Bold] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\s!file:AntykwaTorunskaCond-BoldItalic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondLightCap] [\s!file:AntykwaTorunskaCondLight-Regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\s!file:AntykwaTorunskaCondLight-Italic] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondMediumCap] [\s!file:AntykwaTorunskaCondMed-Regular] [\s!features=\s!smallcaps] \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\s!file:AntykwaTorunskaCondMed-Italic] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [\s!math][antykwa,antykwa-torunska][\s!all] \loadfontgoodies[antykwa-math] \definefontsynonym[\s!MathRoman][antykwamath@antykwa-math] \stoptypescript \starttypescript [\s!math][antykwa-torunska-light][\s!all] \loadfontgoodies[antykwa-math] \definefontsynonym[\s!MathRoman][antykwalightmath@antykwa-light-math] \stoptypescript \starttypescript [\s!math][antykwa-torunska-cond][\s!all] \loadfontgoodies[antykwa-math] \definefontsynonym[\s!MathRoman][antykwacondmath@antykwa-cond-math] \stoptypescript \starttypescript [\s!math][antykwa-torunska-lightcond][\s!all] \loadfontgoodies[antykwa-math] \definefontsynonym[\s!MathRoman][antykwalightcondmath@antykwa-lightcond-math] \stoptypescript \starttypescript [\s!serif] [antykwa,antykwa-torunska] [\s!name] \definefontsynonym [\s!Serif] [AntykwaTorunska-Regular] \definefontsynonym [\s!SerifBold] [AntykwaTorunska-Bold] \definefontsynonym [\s!SerifItalic] [AntykwaTorunska-Italic] \definefontsynonym [\s!SerifSlanted] [AntykwaTorunska-Italic] \definefontsynonym [\s!SerifBoldItalic] [AntykwaTorunska-BoldItalic] \definefontsynonym [\s!SerifBoldSlanted] [AntykwaTorunska-BoldItalic] \definefontsynonym [\s!SerifCaps] [AntykwaTorunska-Cap] \stoptypescript \starttypescript [\s!serif] [antykwa-torunska-light] [\s!name] \definefontsynonym [\s!Serif] [AntykwaTorunska-Light] \definefontsynonym [\s!SerifBold] [AntykwaTorunska-Medium] \definefontsynonym [\s!SerifItalic] [AntykwaTorunska-LightItalic] \definefontsynonym [\s!SerifSlanted] [AntykwaTorunska-LightItalic] \definefontsynonym [\s!SerifBoldItalic] [AntykwaTorunska-MedItalic] \definefontsynonym [\s!SerifBoldSlanted] [AntykwaTorunska-MedItalic] \definefontsynonym [\s!SerifCaps] [AntykwaTorunska-LightCap] \stoptypescript \starttypescript [\s!serif] [antykwa-torunska-cond] [\s!name] \definefontsynonym [\s!Serif] [AntykwaTorunska-CondRegular] \definefontsynonym [\s!SerifBold] [AntykwaTorunska-CondBold] \definefontsynonym [\s!SerifItalic] [AntykwaTorunska-CondItalic] \definefontsynonym [\s!SerifSlanted] [AntykwaTorunska-CondItalic] \definefontsynonym [\s!SerifBoldItalic] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [\s!SerifBoldSlanted] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [\s!SerifCaps] [AntykwaTorunska-CondCap] \stoptypescript \starttypescript [\s!serif] [antykwa-torunska-lightcond] [\s!name] \definefontsynonym [\s!Serif] [AntykwaTorunska-CondLight] \definefontsynonym [\s!SerifBold] [AntykwaTorunska-CondMedium] \definefontsynonym [\s!SerifItalic] [AntykwaTorunska-CondLightItalic] \definefontsynonym [\s!SerifSlanted] [AntykwaTorunska-CondLightItalic] \definefontsynonym [\s!SerifBoldItalic] [AntykwaTorunska-CondMedItalic] \definefontsynonym [\s!SerifBoldSlanted] [AntykwaTorunska-CondMedItalic] \definefontsynonym [\s!SerifCaps] [AntykwaTorunska-CondLightCap] \stoptypescript \starttypescript [\s!serif] [antykwa,antykwa-torunska] [\s!name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-Cap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-BoldCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-ItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-ItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-BoldItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-BoldItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-Cap] \definefontsynonym [SerifRegularLight] [AntykwaTorunska-Light] \definefontsynonym [SerifBoldLight] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalicLight] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCapsLight] [AntykwaTorunska-LightCap] \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondCap] \stoptypescript \starttypescript [\s!serif] [antykwa-torunska-light] [\s!name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-LightCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-MediumCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-LightItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-LightItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-MedItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-MedItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-LightCap] \definefontsynonym [SerifRegularDark] [AntykwaTorunska-Regular] \definefontsynonym [SerifBoldDark] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalicDark] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCapsDark] [AntykwaTorunska-Cap] \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondLightCap] \stoptypescript \starttypescript [\s!serif] [antykwa-torunska-cond] [\s!name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondBoldCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondBoldItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondBoldItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondCap] \definefontsynonym [SerifRegularLight] [AntykwaTorunska-CondLight] \definefontsynonym [SerifBoldLight] [AntykwaTorunska-CondMedium] \definefontsynonym [SerifItalicLight] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-CondLightItalic] \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-CondMedItalic] \definefontsynonym [SerifCapsLight] [AntykwaTorunska-CondLightCap] \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Regular] \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Bold] \definefontsynonym [SerifItalicExp] [AntykwaTorunska-Italic] \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-Italic] \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-BoldItalic] \definefontsynonym [SerifCapsExp] [AntykwaTorunska-Cap] \stoptypescript \starttypescript [\s!serif] [antykwa-torunska-lightcond] [\s!name] \definefontsynonym [SerifRegular] [Serif] \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondLightCap] \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondMediumCap] \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondLightItalicCap] \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondLightItalicCap] \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondMedItalicCap] \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondMedItalicCap] \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondLightCap] \definefontsynonym [SerifRegularDark] [AntykwaTorunska-CondRegular] \definefontsynonym [SerifBoldDark] [AntykwaTorunska-CondBold] \definefontsynonym [SerifItalicDark] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-CondItalic] \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-CondBoldItalic] \definefontsynonym [SerifCapsDark] [AntykwaTorunska-CondCap] \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Light] \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Medium] \definefontsynonym [SerifItalicExp] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-LightItalic] \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-MedItalic] \definefontsynonym [SerifCapsExp] [AntykwaTorunska-LightCap] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-men.mkii0000644000175000017500000001631711571377075024311 0ustar norbertnorbert% filtered from html files by Patrick Ion % % ISOAMSN Characters Extended % % Added Math Symbols: Negated Relations \defineMMLentity gnap E411 {unknown} greater, not approximate \defineMMLentity gnE 2269 {unknown} greater, not double equals \defineMMLentity gne 2269 {unknown} greater, not equals \defineMMLentity gnsim 22E7 {unknown} greater, not similar \defineMMLentity gvnE E2A1 {unknown} gt, vert, not double equals \defineMMLentity lnap E2A2 {unknown} less, not approximate \defineMMLentity lnE 2268 {unknown} less, not double equals \defineMMLentity lne 2268 {unknown} less, not equals \defineMMLentity lnsim 22E6 {unknown} less, not similar \defineMMLentity lvnE E2A4 {unknown} less, vert, not double equals \defineMMLentity nap 2249 {unknown} not approximate \defineMMLentity napE E2C7 {unknown} not approximately equal or equal to \defineMMLentity napid E2BC {unknown} not approximately identical to \defineMMLentity ncong 2247 {unknown} not congruent with \defineMMLentity ncongdot E2C5 {unknown} not congruent, dot \defineMMLentity nequiv 2262 {unknown} not identical with \defineMMLentity ngE 2271 {unknown} not greater, double equals \defineMMLentity nge E2A6 {unknown} not greater-than-or-equal \defineMMLentity nges 2271 {unknown} not gt-or-equals, slanted \defineMMLentity nGg E2CE {unknown} not triple greater than \defineMMLentity ngsim 2275 {unknown} not greater, similar \defineMMLentity nGt E2CA {unknown} not, vert, much greater than \defineMMLentity ngt 226F {unknown} not greater-than \defineMMLentity nGtv E2CC {unknown} not much greater than, variant \defineMMLentity nlE 2270 {unknown} not less, double equals \defineMMLentity nle E2A7 {unknown} not less-than-or-equal \defineMMLentity nles 2270 {unknown} not less-or-equals, slant \defineMMLentity nLl E2CD {unknown} not triple less than \defineMMLentity nlsim 2274 {unknown} not less, similar \defineMMLentity nLt E2C9 {unknown} not, vert, much less than \defineMMLentity nlt 226E {unknown} not less-than \defineMMLentity nltri 22EA {unknown} not left triangle \defineMMLentity nltrie 22EC {unknown} not left triangle, equals \defineMMLentity nLtv E2CB {unknown} not much less than, variant \defineMMLentity nmid 2224 {unknown} negated mid \defineMMLentity npar 2226 {unknown} not parallel \defineMMLentity npr 2280 {unknown} not precedes \defineMMLentity nprcue 22E0 {unknown} not curly precedes, equals \defineMMLentity npre E412 {unknown} not precedes, equals \defineMMLentity nrtri 22EB {unknown} not right triangle \defineMMLentity nrtrie 22ED {unknown} not right triangle, equals \defineMMLentity nsc 2281 {unknown} not succeeds \defineMMLentity nsccue 22E1 {unknown} not succeeds, curly equals \defineMMLentity nsce E413 {unknown} not succeeds, equals \defineMMLentity nsim 2241 {unknown} not similar \defineMMLentity nsime 2244 {unknown} not similar, equals \defineMMLentity nsmid E2AA {unknown} negated short mid \defineMMLentity nspar E2AB {unknown} not short par \defineMMLentity nsqsube 22E2 {unknown} not, square subset, equals \defineMMLentity nsqsupe 22E3 {unknown} not, square superset, equals \defineMMLentity nsub 2284 {unknown} not subset \defineMMLentity nsubE 2288 {unknown} not subset, double equals \defineMMLentity nsube 2288 {unknown} not subset, equals \defineMMLentity nsup 2285 {unknown} not superset \defineMMLentity nsupE 2289 {unknown} not superset, double equals \defineMMLentity nsupe 2289 {unknown} not superset, equals \defineMMLentity ntgl 2279 {unknown} not greater, less \defineMMLentity ntlg 2278 {unknown} not less, greater \defineMMLentity ntvgl 2279 {unknown} not, vert, greater, less \defineMMLentity ntvlg 2278 {unknown} not, vert, less, greater \defineMMLentity nvap E2C6 {unknown} not, vert, approximate \defineMMLentity nVDash 22AF {unknown} not double vert, double dash \defineMMLentity nVdash 22AE {unknown} not double vertical, dash \defineMMLentity nvDash 22AD {unknown} not vertical, double dash \defineMMLentity nvdash 22AC {unknown} not vertical, dash \defineMMLentity nvge 2271 {unknown} not, vert, greater-than-or-equal \defineMMLentity nvgt 226F {unknown} not, vert, greater-than \defineMMLentity nvle 2270 {unknown} not, vert, less-than-or-equal \defineMMLentity nvlt 226E {unknown} not, vert, less-than \defineMMLentity nvltrie E2D0 {unknown} not, vert, left triangle, equals \defineMMLentity nvrtrie E2CF {unknown} not, vert, right triangle, equals \defineMMLentity nvsim E415 {unknown} not, vert, similar \defineMMLentity parsim E2C8 {unknown} parallel, similar \defineMMLentity prnap 22E8 {unknown} precedes, not approx \defineMMLentity prnE E2B3 {unknown} precedes, not double equals \defineMMLentity prnsim 22E8 {unknown} precedes, not similar \defineMMLentity rnmid E2D1 {unknown} reverse nmid \defineMMLentity scnap 22E9 {unknown} succeeds, not approx \defineMMLentity scnE E2B5 {unknown} succeeds, not double equals \defineMMLentity scnsim 22E9 {unknown} succeeds, not similar \defineMMLentity simne 2246 {unknown} similar, not equals \defineMMLentity solbar E416 {unknown} solidus, bar through \defineMMLentity subnE 228A {unknown} subset, not double equals \defineMMLentity subne 228A {unknown} subset, not equals \defineMMLentity supnE 228B {unknown} superset, not double equals \defineMMLentity supne 228B {unknown} superset, not equals \defineMMLentity vnsub 2284 {unknown} not subset, variant \defineMMLentity vnsup 2285 {unknown} not superset, variant \defineMMLentity vsubnE E2B8 {unknown} subset not double equals, variant \defineMMLentity vsubne E2B9 {unknown} subset, not equals, variant \defineMMLentity vsupnE E2BB {unknown} super not double equals, variant \defineMMLentity vsupne E2BA {unknown} superset, not equals, variant context-2013.05.28.20130704/texmf-dist/tex/context/base/core-dat.mkiv0000644000175000017500000000512211754241457024271 0ustar norbertnorbert%D \module %D [ file=core-dat, %D version=20122.04.17, % replaces core-two from 1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Multipass Datasets, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Multipass Datasets} %D \starttyping %D \definedataset[test-1] %D \definedataset[test-2][delay=yes] %D %D \startlines %D set 1: \setdataset[test-1][whatever=this-or-that-1] %D set 2: \setdataset[test-2][whatever=this-or-that-2] %D set 3: \setdataset[test-2][whatever=this-or-that-3] %D \stoplines %D %D \startlines %D get 1: \datasetvariable{test-1}{1}{whatever} / \datasetvariable{test-1}{1}{realpage} %D get 2: \datasetvariable{test-2}{1}{whatever} / \datasetvariable{test-2}{1}{realpage} %D get 3: \datasetvariable{test-2}{2}{whatever} / \datasetvariable{test-2}{2}{realpage} %D \stoplines %D \stoptyping \unprotect \registerctxluafile{core-dat}{1.001} \installcorenamespace{dataset} \installcommandhandler \??dataset {dataset} \??dataset \unexpanded\def\setdataset {\dotripleempty\syst_datasets_set} \def\syst_datasets_set {\ifthirdargument \expandafter\syst_datasets_set_named \else \expandafter\syst_datasets_set_indexed \fi} \def\syst_datasets_set_named[#1][#2][#3]% {\begingroup \edef\currentdataset{#1}% \ctxcommand{setdataset{ name = "\currentdataset", tag = \!!bs#2\!!es, delay = "\datasetparameter\c!delay", data = \!!bs#3\!!es }}% \endgroup} \def\syst_datasets_set_indexed[#1][#2][#3]% {\begingroup \edef\currentdataset{#1}% \ctxcommand{setdataset{ name = "\currentdataset", delay = "\datasetparameter\c!delay", data = \!!bs#2\!!es }}% \endgroup} \def\datasetvariable#1#2#3% {\ctxcommand{datasetvariable("#1","#2","#3")}} \installcorenamespace{pagestate} \installcommandhandler \??pagestate {pagestate} \??pagestate \setuppagestate [\c!delay=\v!yes] \unexpanded\def\setpagestate {\dodoubleempty\syst_pagestates_set} \def\syst_pagestates_set[#1][#2]% {\begingroup \edef\currentpagestate{#1}% \ctxcommand{setpagestate{ name = "\currentpagestate", tag = \!!bs#2\!!es, delay = "\pagestateparameter\c!delay", }}% \endgroup} \def\pagestaterealpage#1#2% {\ctxcommand{pagestaterealpage("#1","#2")}} \def\setpagestaterealpageno#1#2% {\ctxcommand{setpagestaterealpageno("#1","#2")}} \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-ini.mkiv0000644000175000017500000001444712130411274024265 0ustar norbertnorbert%D \module %D [ file=buff-ini, %D version=2011.11.22, % previous big effort 2000.01.05, %D title=\CONTEXT\ Buffer Macros, %D subtitle=Buffers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Buffer Macros / Buffers} \registerctxluafile{buff-ini}{1.001} \unprotect % number is messy and not needed as we store the number anyway % we can get rid of \c!number \let\currentbuffer\empty \def\doifelsebuffer#1% {\ctxcommand{doifelsebuffer("#1")}} \unexpanded\def\resetbuffer {\dosingleempty\buff_reset} \def\buff_reset[#1]% {\ctxcommand{erasebuffer("#1")}} \setuvalue{\e!start\v!buffer}% {\begingroup % (3) \obeylines \dodoubleempty\buff_start} \def\buff_start[#1][#2]% {\buff_start_indeed{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}} \def\buff_start_indeed#1#2#3#4% \donothing needed ! {\normalexpanded{\buff_pickup{#2}{#3}{#4}{}{\buff_stop{#4}}}} \unexpanded\def\grabbufferdata % was: \dostartbuffer {\begingroup % (4) \obeylines \doquadrupleempty\buff_grab_direct_indeed} \unexpanded\def\grabbufferdatadirect % name start stop {\begingroup % (6) \buff_start_indeed\empty} \def\buff_grab_direct_indeed % [category] [name] [start] [stop] {\iffourthargument \expandafter\buff_grab_direct_indeed_a \else \expandafter\buff_grab_direct_indeed_b \fi} \def\buff_grab_direct_indeed_a[#1][#2][#3][#4]{\buff_start_indeed {#1}{#2}{#3}{#4}} \def\buff_grab_direct_indeed_b[#1][#2][#3][#4]{\buff_start_indeed\empty{#1}{#2}{#3}} \unexpanded\def\buff_pickup#1#2#3#4#5% name, startsequence, stopsequence, before, after {\begingroup % (1) #4% \begingroup % (2) \edef\catcodetableofbuffer{\number\catcodetable}% \ctxcommand{erasebuffer("#1")}% \setcatcodetable\vrbcatcodes \def\buff_finish {\endgroup % (1) \endgroup % (2) #5}% \def\buff_gobble##1#3% is detokenize needed? TEST %{\ctxcommand{grabbuffer("#1","#2","#3",\!!bs\detokenize{##1}\!!es)} % space ? {\ctxcommand{grabbuffer("#1","#2","#3",\!!bs>##1\!!es,\catcodetableofbuffer)}% space ? \buff_gobble \buff_finish}% \buff_gobble} \unexpanded\def\buff_stop#1% {\endgroup % (3 & 4 & 5 & 6) \getvalue{#1}} \unexpanded\def\setbuffer {\dosingleempty\buff_set} \let\endbuffer\relax \def\buff_set[#1]#2\endbuffer % seldom used so we just pass #2 {\ctxcommand{assignbuffer("#1",\!!bs\detokenize{#2}\!!es,\number\catcodetable)}} % beware, never adapt the global buffer settings, actually we might introduce % a broken parent chain for this purpose but on the other hand it's not that % different from framed cum suis \installcorenamespace{buffer} \installcommandhandler \??buffer {buffer} \??buffer \setupbuffer [\c!before=, \c!after=] \newcount\c_buff_n_of_defined \let\currentdefinedbuffer\s!dummy \appendtoks \global\advance\c_buff_n_of_defined\plusone \setexpandedbufferparameter\c!number{\number\c_buff_n_of_defined}% \edef\currentdefinedbuffer{def-\number\c_buff_n_of_defined}% \setuevalue{\e!start\currentbuffer}{\buff_start_defined{\currentbuffer}{\currentdefinedbuffer}{\e!start\currentbuffer}{\e!stop\currentbuffer}}% \setuevalue{\e!get\currentbuffer }{\buff_get_stored{\currentbuffer}{\currentdefinedbuffer}}% \to \everydefinebuffer \unexpanded\def\buff_start_defined {\begingroup % (5) \buff_start_indeed} \def\thebuffernumber #1{\namedbufferparameter{#1}\c!number} \def\thedefinedbuffer#1{def-\namedbufferparameter{#1}\c!number} \unexpanded\def\getbuffer % no [settings yet] {\dosingleempty\buff_get} \unexpanded\def\buff_get[#1]% [name] {\namedbufferparameter\empty\c!before \doifelsenothing{#1} {\buff_get_stored_indeed\empty} {\processcommalist[#1]\buff_get_stored_indeed}% \namedbufferparameter\empty\c!after} \unexpanded\def\buff_get_stored#1#2% {\namedbufferparameter{#1}\c!before \buff_get_stored_indeed{#2}% \namedbufferparameter{#1}\c!after} \unexpanded\def\buff_get_stored_indeed#1% {\ctxcommand{getbuffer("#1")}} \definebuffer [\v!hiding] \setupbuffer [\v!hiding] [\c!before=, \c!after=] \unexpanded\def\processTEXbuffer % keep case, maybe also lower {\dosingleempty\buff_process_tex} \def\buff_process_tex[#1]% {\pushcatcodetable \catcodetable\ctxcatcodes % \setcatcodetable \buff_get_stored_indeed{#1}% \popcatcodetable} % only mkiv: % % \startbuffer[x] % x % \stopbuffer % % \savebuffer[x] [temp] % gets name: jobname-temp.tmp % \savebufferinfile[x][temp.log] % gets name: temp.log \installcorenamespace{savebuffer} \installsetuponlycommandhandler \??savebuffer {savebuffer} \setupsavebuffer [\c!list=, \c!file=, \c!prefix=\v!yes] \unexpanded\def\savebuffer {\dodoubleempty\buff_save} \def\buff_save[#1][#2]% {\begingroup \doifassignmentelse{#1} {\setupcurrentsavebuffer[#1]}% {\setupcurrentsavebuffer[\c!list={#1},\c!file=#2]}% \ctxcommand{savebuffer("\directsavebufferparameter\c!list","\directsavebufferparameter\c!file","\directsavebufferparameter\c!prefix")}% \endgroup} %D Experimental: no expansion of commands in buffer! % \startbuffer[what] % context("WHAT") % \stopbuffer % \startbuffer % context("JOBNAME") % \stopbuffer % % \ctxluabuffer[what] \ctxluabuffer \unexpanded\def\ctxluabuffer {\dosingleempty\buff_ctxlua} \unexpanded\def\mkvibuffer {\dosingleempty\buff_mkvi} % what was: \mkvibufferraw \def\buff_ctxlua[#1]{\ctxcommand{getbufferctxlua("#1")}} \def\buff_mkvi [#1]{\ctxcommand{getbuffermkvi("#1")}} % used elsewhere \unexpanded\def\doprocesstexbuffer#1{\buff_process_tex[#1]} % still used? \let\dostartbuffer\grabbufferdata % for old times sake % new (expandable): \def\getbufferdata[#1]{\buff_get_stored_indeed{#1}} %D This is a weird one, moved from cont-new. Do we really need it? If not %D it will go away. \bgroup \permitcircumflexescape \obeylines % don't remove %'s ! \gdef\collapsedspace#1% {\ifx#1^^M% \expandafter\collapsedspace \else \space \expandafter#1% \fi} \unexpanded\gdef\collapsespaces {\prependtoksonce\relax\to\everyeof% \ignorelines% \ignoretabs% \let\obeyedspace\collapsedspace% \obeyspaces} \egroup \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-62.tex0000644000175000017500000001471612130411274023672 0ustar norbertnorbert%D \module %D [ file=s-pre-62, %D version=2005.03.04, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 62, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Melior \usemodule[pre-60] \usetypescriptfile [type-ghz] \doifmodeelse {mkiv} { \definetypeface[mainface][rm][serif][melior] [default] \definetypeface[mainface][tt][mono] [modern] [default][rscale=1.05] \definetypeface[mainface][ss][serif][melior] [default] \definetypeface[mainface][mm][math] [palatino][default][rscale=0.95] } { \definetypeface[mainface][rm][serif][melior] [default][encoding=texnansi] \definetypeface[mainface][tt][mono] [modern] [default][encoding=texnansi,rscale=1.05] \definetypeface[mainface][ss][serif][melior] [default][encoding=texnansi] \definetypeface[mainface][mm][math] [palatino][default][encoding=texnansi,rscale=0.95] } \setupbodyfont [mainface,14.4pt] \setuppapersize [S6][S6] \setvariables[layout][dx=0,dy=1,nx=2,ny=2,step=64] \definemeasure[layoutwd][\dimexpr\paperwidth /\getvariable{layout}{step}\relax] \definemeasure[layoutht][\dimexpr\paperheight/\getvariable{layout}{step}\relax] \setuplayout [ width=middle, height=middle, header=0pt, footer=0pt, margin=0pt, backspace=5\measure{layoutwd}, topspace=5\measure{layoutht}] \definelayout [step] [ backspace=\numexpr2+ \getvariable{layout}{dx}\relax\measure{layoutwd}, cutspace=\numexpr3+\getvariable{layout}{nx}-\getvariable{layout}{dx}\relax\measure{layoutwd}, topspace=\numexpr2+ \getvariable{layout}{dy}\relax\measure{layoutht}, bottomspace=\numexpr3+\getvariable{layout}{ny}-\getvariable{layout}{dy}\relax\measure{layoutht}] \definecolor[layout:left] [t=.5,a=1,b=1] \definecolor[layout:right] [t=.5,a=1,r=1] \definecolor[layout:top] [t=.5,a=1,g=1] \definecolor[layout:bottom][t=.5,a=1,y=1] \definecolor[layout:page] [s=.75] \definehspace[menu][\measure{layoutwd}] \setupinteraction [state=start, click=off, style=, color=interactioncolor, contrastcolor=interactioncolor] \setupinteractionscreen [option=max] \setupbuttons [color=maincolor, contrastcolor=maincolor, style=\tf, % acceptable height=2\measure{layoutht}, width=2\measure{layoutwd}, offset=overlay, frame=off] \definecolor[interactioncolor][darkgray] \definecolor[maincolor] [lightgray] \setuptexttexts [] [\vbox to \textheight{\vfill\hfill\setups{menu:content}}] \startsetups menu:content \button{\symbol[firstpage]}[firstpage] \hspace[menu] \button{\symbol[previouspage]}[previouspage] \hspace[menu] \button{\StartBusy\symbol[PauseRendering]\StopBusy}[InvokeStepper] \hspace[menu] \button{\symbol[nextpage]}[nextpage] \hspace[menu] \button{\symbol[lastpage]}[lastpage] \hspace[menu] \button{\symbol[CloseDocument]}[CloseDocument] \stopsetups \startuseMPgraphic{page}{step} StartPage ; numeric dx, dy ; dx := PaperWidth/\MPvar{step} ; dy := PaperHeight/\MPvar{step} ; fill Page withcolor .5white ; fill ulcorner Page -- urcorner Page -- urcorner Page shifted (0,-TopSpace+dy) -- ulcorner Page shifted (0,-TopSpace+dy) -- cycle withcolor \MPcolor{layout:top} ; fill llcorner Page -- lrcorner Page -- lrcorner Page shifted (0,BottomSpace-dy) -- llcorner Page shifted (0,BottomSpace-dy) -- cycle withcolor \MPcolor{layout:bottom} ; fill ulcorner Page -- llcorner Page -- llcorner Page shifted (BackSpace-dx,0) -- ulcorner Page shifted (BackSpace-dx,0) -- cycle withcolor \MPcolor{layout:left} ; fill urcorner Page -- lrcorner Page -- lrcorner Page shifted (-CutSpace+dx,0) -- urcorner Page shifted (-CutSpace+dx,0) -- cycle withcolor \MPcolor{layout:right} ; fill Field[Text][Text] enlarged (dx,dy) withcolor white ; fill Field[Text][Text] enlarged (dx,dy) withcolor \MPcolor{layout:page} ; StopPage ; \stopuseMPgraphic \defineoverlay[page][\useMPgraphic{page}{step=\getvariable{layout}{step}}] \setupbackgrounds [page] [background=page] \setupcolors [state=start] \startsetups nextstep % pagebreak handlers are grouped, so we need to set global \ifnum\getvariable{layout}{dx}=\getvariable{layout}{nx}\relax \ifnum\getvariable{layout}{dy}=\getvariable{layout}{ny}\relax \setxvariables[layout][dy=1] \else \setxvariables[layout][dy=\the\numexpr\getvariable{layout}{dy}+1\relax] \fi \setxvariables[layout][dx=1] \else \setxvariables[layout][dx=\the\numexpr\getvariable{layout}{dx}+1\relax] \fi % global anyway \setuplayout[step] \stopsetups \definefontsynonym[MainTitleFont][SerifBold] \definefont[ChapterTitleFont][MainTitleFont sa 2] \appendtoks \NormalizeFontHeight \TitleFont {\setstrut\strut\quad} {4\lineheight} {MainTitleFont} \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {3\lineheight} {MainTitleFont} \NormalizeFontHeight \ChapterNumberFont {XVI} {4\lineheight} {MainTitleFont} \to \everystarttext \setupsection [section-2] [bodypartconversion=Romannumerals] \installpagebreakhandler {step} {\setups{nextstep}} \definepagebreak[chapter][yes,step] \setuphead [chapter] [page=chapter, command=\MyChapterCommand] \definehead[Topic][chapter] \definehead[Nopic][title] \setuphead[chapter,Topic,Nopic] [numberstyle=\ChapterNumberFont, textstyle=\ChapterTitleFont, numbercolor=lightgray, textcolor=darkgray] \def\MyChapterCommand#1#2% {\hbox \bgroup % we need to nil the strut added by the headplacement \setupframed[frame=off,lines=4,offset=overlay]% \rlap{\hskip2\lineheight\framed{\setnostrut#1}}\framed{#2}% \egroup} \setupitemize [each] [R,broad] [stopper=, color=lightgray] \def\doTitlePage#1#2#3% {\startstandardmakeup[headerstate=high,textstate=stop] \setupalign[middle] \def\\{\def\\{\endgraf}\endgraf\vfil\ignorespaces#2}% \startcolor[darkgray] #1\setstrut\setupinterlinespace\vfil#3\vfil \stopcolor \stopstandardmakeup} \def\TitlePage {\doTitlePage\TitleFont\relax} \def\SubTitlePage{\doTitlePage\TitleFont\SubTitleFont} \long\def\StartTitlePage #1\StopTitlePage {\TitlePage {#1}} \long\def\StartSubTitlePage#1\StopSubTitlePage{\SubTitlePage{#1}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-string.lua0000644000175000017500000001261112130411274024127 0ustar norbertnorbertif not modules then modules = { } end modules ['l-string'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local string = string local sub, gmatch, format, char, byte, rep, lower = string.sub, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower local lpegmatch, patterns = lpeg.match, lpeg.patterns local P, S, C, Ct, Cc, Cs = lpeg.P, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cc, lpeg.Cs -- Some functions are already defined in l-lpeg and maybe some from here will -- move there (unless we also expose caches). -- if not string.split then -- -- function string.split(str,pattern) -- local t = { } -- if #str > 0 then -- local n = 1 -- for s in gmatch(str..pattern,"(.-)"..pattern) do -- t[n] = s -- n = n + 1 -- end -- end -- return t -- end -- -- end -- function string.unquoted(str) -- return (gsub(str,"^([\"\'])(.*)%1$","%2")) -- interesting pattern -- end local unquoted = patterns.squote * C(patterns.nosquote) * patterns.squote + patterns.dquote * C(patterns.nodquote) * patterns.dquote function string.unquoted(str) return lpegmatch(unquoted,str) or str end -- print(string.unquoted("test")) -- print(string.unquoted([["t\"est"]])) -- print(string.unquoted([["t\"est"x]])) -- print(string.unquoted("\'test\'")) -- print(string.unquoted('"test"')) -- print(string.unquoted('"test"')) function string.quoted(str) return format("%q",str) -- always double quote end function string.count(str,pattern) -- variant 3 local n = 0 for _ in gmatch(str,pattern) do -- not for utf n = n + 1 end return n end function string.limit(str,n,sentinel) -- not utf proof if #str > n then sentinel = sentinel or "..." return sub(str,1,(n-#sentinel)) .. sentinel else return str end end local stripper = patterns.stripper local collapser = patterns.collapser local longtostring = patterns.longtostring function string.strip(str) return lpegmatch(stripper,str) or "" end function string.collapsespaces(str) return lpegmatch(collapser,str) or "" end function string.longtostring(str) return lpegmatch(longtostring,str) or "" end -- function string.is_empty(str) -- return not find(str,"%S") -- end local pattern = P(" ")^0 * P(-1) function string.is_empty(str) if str == "" then return true else return lpegmatch(pattern,str) and true or false end end -- if not string.escapedpattern then -- -- local patterns_escapes = { -- ["%"] = "%%", -- ["."] = "%.", -- ["+"] = "%+", ["-"] = "%-", ["*"] = "%*", -- ["["] = "%[", ["]"] = "%]", -- ["("] = "%(", [")"] = "%)", -- -- ["{"] = "%{", ["}"] = "%}" -- -- ["^"] = "%^", ["$"] = "%$", -- } -- -- local simple_escapes = { -- ["-"] = "%-", -- ["."] = "%.", -- ["?"] = ".", -- ["*"] = ".*", -- } -- -- function string.escapedpattern(str,simple) -- return (gsub(str,".",simple and simple_escapes or patterns_escapes)) -- end -- -- function string.topattern(str,lowercase,strict) -- if str == "" then -- return ".*" -- else -- str = gsub(str,".",simple_escapes) -- if lowercase then -- str = lower(str) -- end -- if strict then -- return "^" .. str .. "$" -- else -- return str -- end -- end -- end -- -- end --- needs checking local anything = patterns.anything local allescapes = Cc("%") * S(".-+%?()[]*") -- also {} and ^$ ? local someescapes = Cc("%") * S(".-+%()[]") -- also {} and ^$ ? local matchescapes = Cc(".") * S("*?") -- wildcard and single match local pattern_a = Cs ( ( allescapes + anything )^0 ) local pattern_b = Cs ( ( someescapes + matchescapes + anything )^0 ) local pattern_c = Cs ( Cc("^") * ( someescapes + matchescapes + anything )^0 * Cc("$") ) function string.escapedpattern(str,simple) return lpegmatch(simple and pattern_b or pattern_a,str) end function string.topattern(str,lowercase,strict) if str=="" or type(str) ~= "string" then return ".*" elseif strict then str = lpegmatch(pattern_c,str) else str = lpegmatch(pattern_b,str) end if lowercase then return lower(str) else return str end end -- print(string.escapedpattern("12+34*.tex",false)) -- print(string.escapedpattern("12+34*.tex",true)) -- print(string.topattern ("12+34*.tex",false,false)) -- print(string.topattern ("12+34*.tex",false,true)) function string.valid(str,default) return (type(str) == "string" and str ~= "" and str) or default or nil end -- handy fallback string.itself = function(s) return s end -- also handy (see utf variant) local pattern = Ct(C(1)^0) -- string and not utf ! function string.totable(str) return lpegmatch(pattern,str) end -- handy from within tex: local replacer = lpeg.replacer("@","%%") -- Watch the escaped % in lpeg! function string.tformat(fmt,...) return format(lpegmatch(replacer,fmt),...) end -- obsolete names: string.quote = string.quoted string.unquote = string.unquoted context-2013.05.28.20130704/texmf-dist/tex/context/base/context-timing.lmx0000644000175000017500000000327111376503616025377 0ustar norbertnorbert <?lua pv('title')?>



context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-scr.mkiv0000644000175000017500000001775712130411274024355 0ustar norbertnorbert%D \module %D [ file=typo-scr, %D version=2012.01.23, % very old ... 1995.10.10 .. moved from core-mis %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Scripts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Scripts} \unprotect %D I addition to the commands implemented here, we have alternative commands %D \type {shiftup} and \type {shiftdown} that can work across paragraphs. %D \macros %D {low, high, definelow, definehigh, setuplow, setuphigh} %D %D Although \TEX\ is pretty well aware of super- and subscripts, its mechanism %D is mainly tuned for math mode. The next few commands take care of script %D texts both modes. %D %D \startbuffer %D The higher\high{one goes} the lower\low{one drops}, or\lohi{yes}{no}? %D \stopbuffer %D %D \typebuffer %D \getbuffer %D %D Note the different placement of \type {\lohi}, where we need a bit more %D space. The implementation looks a bit fuzzy, since some \type {\fontdimen}'s %D are involved to determine the optimal placement. \installcorenamespace {low} \installcorenamespace {high} \installcommandhandler \??low {low} \??low \installcommandhandler \??high {high} \??high \setuplow [\c!style=\tx,\c!distance=\zeropoint,\c!down=.48\exheight] % historical \setuphigh[\c!style=\tx,\c!distance=\zeropoint,\c!up =.86\exheight] % values \appendtoks \setuevalue\currentlow {\typo_scripts_low {\currentlow }}\to \everydefinelow \appendtoks \setuevalue\currenthigh{\typo_scripts_high{\currenthigh}}\to \everydefinehigh \unexpanded\def\typo_scripts_low#1#2% {\dontleavehmode \begingroup \edef\currentlow{#1}% \kern\lowparameter\c!distance\relax \setbox\scratchbox\hbox\bgroup \lower\lowparameter\c!down\hbox\bgroup \ifx\fontsize\empty \ifmmode \mr % no color yet \else \uselowstyleandcolor\c!style\c!color \fi \else \uselowstyleandcolor\c!style\c!color \fi \dostarttagged\t!sub\currentlow #2% \dostoptagged \egroup \egroup \ht\scratchbox\strutht \dp\scratchbox\strutdp \box\scratchbox \endgroup} \unexpanded\def\typo_scripts_high#1#2% {\dontleavehmode \begingroup \edef\currenthigh{#1}% \kern\highparameter\c!distance\relax \setbox\scratchbox\hbox\bgroup \raise\highparameter\c!up\hbox\bgroup \ifx\fontsize\empty \ifmmode \mr % no color yet \else \usehighstyleandcolor\c!style\c!color \fi \else \usehighstyleandcolor\c!style\c!color \fi \dostarttagged\t!sup\currenthigh #2% \dostoptagged \egroup \egroup \ht\scratchbox\strutht \dp\scratchbox\strutdp \box\scratchbox \endgroup} \unexpanded\def\low {\typo_scripts_low \empty} \unexpanded\def\high{\typo_scripts_high\empty} %D \macros %D {lohi, hilo, definelohi, setuplohi} %D %D You can provide an optional keyword \type {left}, in which case the super and %D subscripts will be aligned in a way that permits placement at the left of a word %D (which means that it will be right aligned). %D %D \startbuffer %D \lohi {aha} {ah} test \lohi {aha} {ah} test %D \lohi [left] {aha} {ah} test \lohi [left] {aha} {ah} test %D \lohi {aha} {ah} test \lohi {aha} {ah} test %D \lohi [left] {aha} {ah}test \lohi [left] {aha} {ah} test %D \stopbuffer %D %D \typebuffer %D \getbuffer \installcorenamespace {lowhigh} \installcommandhandler \??lowhigh {lowhigh} \??lowhigh \setuplowhigh [\c!style=\tx, \c!distance=.1\exheight, % these are \c!up=.96\exheight, % historical \c!down=.58\exheight] % values \appendtoks \setuevalue\currentlowhigh{\typo_scripts_lowhigh{\currentlowhigh}\typo_scripts_lowhigh_indeed}% \to \everydefinelowhigh \unexpanded\def\typo_scripts_lowhigh#1% #2 {\dontleavehmode \hbox\bgroup \edef\currentlowhigh{#1}% \dosingleempty} % #2 \unexpanded\def\typo_scripts_lowhigh_indeed[#1]#2#3% todo: align .. [#1] is compatible hack {\dostarttagged\t!subsup\currentlowhigh \setbox\plusfour\hbox{\typo_scripts_lowhigh_low_high\lower\c!down\t!sub{#2}}% \setbox\plussix \hbox{\typo_scripts_lowhigh_low_high\raise\c!up \t!sup{#3}}% \doif{#1}{\v!left} {\ifdim\wd\plusfour<\wd\plussix \setbox\plusfour\hbox to \wd\plussix {\hss\box\plusfour}% \else \setbox\plussix \hbox to \wd\plusfour{\hss\box\plussix }% \fi}% \ifdim\wd\plusfour<\wd\plussix \wd\plusfour\zeropoint \box\plusfour \box\plussix \else \wd\plussix\zeropoint \box\plussix \box\plusfour \fi \dostoptagged \egroup} \def\typo_scripts_lowhigh_low_high#1#2#3#4% {\dontleavehmode \begingroup \kern\lowhighparameter\c!distance\relax \setbox\scratchbox\hbox\bgroup #1\lowhighparameter#2\hbox\bgroup \ifx\fontsize\empty \ifmmode \mr % no color yet \else \uselowhighstyleandcolor\c!style\c!color \fi \else \uselowhighstyleandcolor\c!style\c!color \fi \dostarttagged#3\empty #4% \dostoptagged \egroup \egroup \ht\scratchbox\strutht \dp\scratchbox\strutdp \box\scratchbox \endgroup} \unexpanded\def\typo_scripts_highlow_indeed[#1]#2#3% {\typo_scripts_lowhigh_indeed[#1]{#3}{#2}} \unexpanded\def\lohi{\typo_scripts_lowhigh\empty\typo_scripts_lowhigh_indeed} \unexpanded\def\hilo{\typo_scripts_lowhigh\empty\typo_scripts_highlow_indeed} %D \macros %D {lowmidhigh, definelowmidhigh, setuplowmidhigh} %D %D The previous command originally didn't have definers. These were introduced when %D the next showed up: %D %D \startbuffer %D \definelow [MyLow] [style=\txx] %D \definehigh [MyHigh] [style=\txx] %D \definelowhigh [MyLoHi] [style=\txx] %D \definelowmidhigh[MyLoMiHi][style=\txx] %D %D We have %D \ruledhbox{\low {L}} and \ruledhbox{\MyLow {L}} and %D \ruledhbox{\high {H}} and \ruledhbox{\MyHigh {H}} and %D \ruledhbox{\lohi {L}{H}} and \ruledhbox{\MyLoHi {L}{H}} and %D \ruledhbox{\lomihi{L}{M}{H}} and \ruledhbox{\MyLoMiHi{L}{M}{H}}. %D \stopbuffer %D %D \typebuffer \getbuffer \installcorenamespace {lowmidhigh} \installcommandhandler \??lowmidhigh {lowmidhigh} \??lowmidhigh \setuplowmidhigh [\c!style=\tx, \c!up=.8\struthtdp, \c!down=.8\struthtdp] \appendtoks \setuevalue\currentlowmidhigh{\typo_scripts_lowmidhigh{\currentlowmidhigh}}% \to \everydefinelowmidhigh \unexpanded\def\typo_scripts_lowmidhigh#1#2#3#4% {\dontleavehmode \hbox \bgroup \edef\currentlowmidhigh{#1}% \dostarttagged\t!subsup\currentlowmidhigh \uselowmidhighstyleandcolor\c!style\c!color \setstrut \setbox\plustwo \hbox{\strut\dostarttagged\t!sub\empty#2\dostoptagged}% \setbox\plusfour\hbox{\strut\dostarttagged\t!mid\empty#3\dostoptagged}% inefficient \setbox\plussix \hbox{\strut\dostarttagged\t!sup\empty#4\dostoptagged}% \scratchdimen \wd \ifdim\wd\plustwo>\wd\plusfour \ifdim\wd\plustwo>\wd\plussix \plustwo \else \plussix \fi \else \ifdim\wd\plusfour>\wd\plussix \plusfour \else \plussix \fi \fi \relax \setbox\plustwo \hbox to \scratchdimen{\hss\lower\lowmidhighparameter\c!down\box\plustwo \hss}% \setbox\plusfour\hbox to \scratchdimen{\hss \box\plusfour\hss}% \setbox\plussix \hbox to \scratchdimen{\hss\raise\lowmidhighparameter\c!up \box\plussix \hss}% \wd\plustwo \zeropoint \wd\plusfour\zeropoint \box\plusfour \box\plustwo \box\plussix \dostoptagged \egroup} \unexpanded\def\lomihi {\typo_scripts_lowmidhigh\empty} \unexpanded\def\himilo#1#2#3{\typo_scripts_lowmidhigh\empty{#3}{#2}{#1}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-sym.mkii0000644000175000017500000001516211754241457024303 0ustar norbertnorbert%D \module %D [ file=catc-sym, %D version=1997.01.03, % moved code %D title=\CONTEXT\ Catcode Macros, %D subtitle=Some Handy Constants, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % we now have loaded syst-* so we have all @@catcode constants %D We want to have access to the raw alternatives of the %D special characters. We use a \type {\xdef} instead of %D \type {\let} because we need an expandable token in a %D \type {\write}. \bgroup \catcode`B=\begingroupcatcode \catcode`E=\endgroupcatcode \catcode`.=\escapecatcode .catcode `.{ 12 .xdef .letteropenbrace B.string{E .catcode `.} 12 .xdef .letterclosebrace B.string}E .catcode `.& 12 .xdef .letterampersand B.string&E .catcode `.< 12 .xdef .letterless B.string 12 .xdef .lettermore B.string>E .catcode `.# 12 .xdef .letterhash B.string#E .catcode `." 12 .xdef .letterdoublequote B.string"E .catcode `.' 12 .xdef .lettersinglequote B.string'E .catcode `.$ 12 .xdef .letterdollar B.string$E .catcode `.% 12 .xdef .letterpercent B.string%E .catcode `.^ 12 .xdef .letterhat B.string^E .catcode `._ 12 .xdef .letterunderscore B.string_E .catcode `.| 12 .xdef .letterbar B.string|E .catcode `.~ 12 .xdef .lettertilde B.string~E .catcode `.\ 12 .xdef .letterbackslash B.string\E .catcode `./ 12 .xdef .letterslash B.string/E .catcode `.? 12 .xdef .letterquestionmark B.string?E .catcode `.! 12 .xdef .letterexclamationmark B.string!E .catcode `.@ 12 .xdef .letterat B.string@E .catcode `.: 12 .xdef .lettercolon B.string:E .global .let .letterescape .letterbackslash .global .let .letterbgroup .letteropenbrace .global .let .letteregroup .letterclosebrace .global .let .letterleftbrace .letteropenbrace .global .let .letterrightbrace .letterclosebrace .egroup %D \macros %D {uncatcodespecials,setnaturalcatcodes,setnormalcatcodes, %D uncatcodecharacters,uncatcodeallcharacters, %D uncatcodespacetokens} %D %D The following macros are more or less replaced by switching %D to a catcode table (which we simulate in \MKII) but we keep %D them for convenience and compatibility. Some old engine code %D has been removed. \def\uncatcodespecials {\setcatcodetable\nilcatcodes \uncatcodespacetokens} \def\setnaturalcatcodes {\setcatcodetable\nilcatcodes} \def\setnormalcatcodes {\setcatcodetable\ctxcatcodes} % maybe \texcatcodes \def\uncatcodecharacters {\setcatcodetable\nilcatcodes} % was fast version, gone now \def\uncatcodeallcharacters{\setcatcodetable\nilcatcodes} % was slow one, with restore \def\uncatcodespacetokens {\catcode\spaceasciicode \spacecatcode \catcode\formfeedasciicode \ignorecatcode \catcode\endoflineasciicode\endoflinecatcode \catcode\delasciicode \ignorecatcode} %D \macros %D {setverbosecharacter,setverbosecscharacters} %D %D Next follows a definition that lets some shortcuts expand to %D themselves. This macro is meant for \POSTSCRIPT\ and \PDF\ %D code passed on to the backend. \newtoks\everyverbosechacters \def\setverbosecscharacter#1% {\edef#1{\string#1}} \def\setverbosecscharacters {\the\everyverbosechacters} \bgroup % if used often we can move the code inline \catcode\barasciicode \activecatcode \catcode\tildeasciicode\activecatcode \global \everyverbosechacters = {\setverbosecscharacter |\setverbosecscharacter ~% context specific \setverbosecscharacter\|\setverbosecscharacter\~% \setverbosecscharacter\:\setverbosecscharacter\;% \setverbosecscharacter\+\setverbosecscharacter\-% \setverbosecscharacter\[\setverbosecscharacter\]% \setverbosecscharacter\.\setverbosecscharacter\\% \setverbosecscharacter\)\setverbosecscharacter\(% \setverbosecscharacter\0\setverbosecscharacter\1% \setverbosecscharacter\2\setverbosecscharacter\3% \setverbosecscharacter\4\setverbosecscharacter\5% \setverbosecscharacter\6\setverbosecscharacter\7% \setverbosecscharacter\8\setverbosecscharacter\9% \setverbosecscharacter\n\setverbosecscharacter\s% \setverbosecscharacter\/} \egroup %D (Inspired by a discussion on the \CONTEXT\ mailing list) %D %D In \TEX\ each character can have one of 16 catcodes. This way the %D backslash, dollar, ampersand, hash and some more characters get %D their special meaning. If you want to process tokens under a %D certain catcode regime, passing arguments can interfere badly. %D %D \startbuffer[a] %D \def\whatever#1{[#1]} %D \whatever{whatever \type {\whatever{you want}} $or$ not!} %D \stopbuffer %D %D \typebuffer[a] %D %D Here we pass an argument to \type {\whatever} but part of that %D argument is to be processed under a different catcode regime, i.e.\ %D all characters that need to be typeset verbatim need to get %D the catcode that makes it a letter. This is what we get when we typeset %D the text verbatim: %D %D \starttyping %D whatever \type {\whatever{you want}} $or$ not! %D \stoptyping %D %D However, when passed to \type {\whatever} we get: %D %D \getbuffer[a] %D %D In \ETEX\ one can use \type {\scantokens} to circumvent this problem. %D %D \startbuffer[b] %D \def\rescan#1{\scantokens{#1}} %D \def\whatever#1{[\rescan{#1}]} %D \whatever{whatever \type {\whatever{you want}} $or$ not!} %D \stopbuffer %D %D \getbuffer[b] \typebuffer[b] %D %D This time the \type {\whatever} call gives: %D %D \getbuffer[b] %D %D In this example, two spaces have crept in. The first one, after the %D macro name, is inserted by \TEX\ and cannot be avoided. The last space %D is inserted by \type {\scantokens}, and is the consequence of the fact %D that this macro mimics reading from a file. You can avoid the last %D space by a slightly different definition: %D %D \startbuffer[c] %D \def\rescan#1{\scantokens{#1\ignorespaces}} %D \def\whatever#1{[\rescan{#1}]} %D \whatever{whatever \type {\whatever{you want}} $or$ not!} %D \stopbuffer %D %D \typebuffer[c] %D %D Unfortunately we still keep the first space, but at least it's better than %D a failure: %D %D \getbuffer[c] \long\def\rescan#1{\scantokens{#1\ignorespaces}} \long\def\rescanwithsetup#1#2{\begingroup\directsetup{#1}\scantokens{#2\ignorespaces}\endgroup} \ifx\scantextokens\undefined \else \long\def\rescan#1{\scantextokens{#1}} \long\def\rescanwithsetup#1#2{\begingroup\directsetup{#1}\scantextokens{#2}\endgroup} \fi \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-fen.mkiv0000644000175000017500000000575012132111075024260 0ustar norbertnorbert%D \module %D [ file=math-fen, %D version=2012.02.18, %D title=\CONTEXT\ Math Macros, %D subtitle=Fences, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Fences} \unprotect % todo: mathstyle % \definemathfence [fancybracket] [bracket] [command=yes,color=blue] % % test $|x|$ test \par % test $||x||$ test (okay) \par % test $a\left|\frac{1}{b}\right|c$ test \par % test $a\left||\frac{1}{b}\right||c$ test (not okay) \par % % \setupmathfences [color=red] % % test $a\fenced[bar]{\frac{1}{b}}c$ test \par % test $a\fenced[doublebar]{\frac{1}{b}}c$ test \par % test $a\fenced[bracket]{\frac{1}{b}}c$ test \par % test $a\fancybracket{\frac{1}{b}}c$ test \par \installcorenamespace{mathfences} \installcorenamespace{mathfencesleft} \installcorenamespace{mathfencesmiddle} \installcorenamespace{mathfencesright} \installcommandhandler \??mathfences {mathfence} \??mathfences \let\setupmathfences\setupmathfence \setupmathfences [\c!left=0x2E, \c!right=0x2E, \c!middle=0x2E, \c!mathstyle=, \c!color=, \c!command=] \appendtoks \edef\p_command{\mathfenceparameter\c!command}% \ifx\p_command\v!yes \setuevalue\currentmathfence{\math_fenced_fenced[\currentmathfence]}% \fi \to \everydefinemathfence \def\math_fenced_left {\normalleft \utfchar{\mathfenceparameter\c!left }} % no Uchar here \def\math_fenced_middle{\normalmiddle\utfchar{\mathfenceparameter\c!middle}} % no Uchar here \def\math_fenced_right {\normalright \utfchar{\mathfenceparameter\c!right }} % no Uchar here \let\fence \relax \let\fenced\relax \unexpanded\def\math_fenced_fenced[#1]% {\begingroup \edef\currentmathfence{#1}% \startusemathstyleparameter\mathfenceparameter \let\fence\math_fenced_middle \edef\p_math_fenced_color{\mathfenceparameter\c!color}% \ifx\p_math_fenced_color\empty \expandafter\math_fenced_normal \else \expandafter\math_fenced_colored \fi} \def\math_fenced_normal#1% {\math_fenced_left #1% \math_fenced_right \stopusemathstyleparameter \endgroup} \def\math_fenced_colored#1% {\pushcolor[\p_math_fenced_color]% \math_fenced_left \popcolor #1% \pushcolor[\p_math_fenced_color]% \math_fenced_right \popcolor \stopusemathstyleparameter \endgroup} \appendtoks \let\fenced\math_fenced_fenced \to \everymathematics \definemathfence [parenthesis] [\c!left=0x28,\c!right=0x29] \definemathfence [bracket] [\c!left=0x5B,\c!right=0x5D] \definemathfence [braces] [\c!left=0x7B,\c!right=0x7D] \definemathfence [bar] [\c!left=0x7C,\c!right=0x7C] \definemathfence [doublebar] [\c!left=0x2016,\c!right=0x2016] \definemathfence [angle] [\c!left=0x3C,\c!right=0x3E] %definemathfence [fancybracket] [bracket] [command=yes,color=red] \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-run.lua0000644000175000017500000000362112130411274024127 0ustar norbertnorbertif not modules then modules = { } end modules ['colo-run'] = { version = 1.000, comment = "companion to colo-run.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- For historic reasons the core has a couple of tracing features. Nowadays -- these would end up in modules. local colors, commands, context, utilities = colors, commands, context, utilities local colors= attributes.colors function commands.showcolorset(name) local set = colors.setlist(name) context.starttabulate { "|l|l|l|l|l|l|l|" } for i=1,#set do local s = set[i] local r = { width = "4em", height = "max", depth = "max", color = s } context.NC() context.setcolormodel { "gray" } context.blackrule(r) context.NC() context.blackrule(r) context.NC() context.grayvalue(s) context.NC() context.colorvalue(s) context.NC() context(s) context.NC() context.NR() end context.stoptabulate() end function commands.showcolorcomponents(list) local set = utilities.parsers.settings_to_array(list) context.starttabulate { "|lT|lT|lT|lT|" } context.NC() context("color") context.NC() context("name") context.NC() context("transparency") context.NC() context("specification ") context.NC() context.NR() context.TB() for i=1,#set do local s = set[i] context.NC() context.showcolorbar { s } context.NC() context(s) context.NC() context.transparencycomponents(s) context.NC() context.colorcomponents(s) context.NC() context.NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-61.tex0000644000175000017500000001406612130411274023667 0ustar norbertnorbert%D \module %D [ file=s-pre-61, %D version=2004.03.15, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 61, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Optima \usemodule[pre-60] \doifmodeelse {mkiv} { \usetypescriptfile[ghz] \definetypeface[mainface][ss][sans][optima-nova][default] } { \usetypescriptfile[type-ghz] \definetypeface[mainface][ss][sans][optima-nova][default][encoding=\defaultencoding] } \setupbodyfont[mainface,ss,18pt] \setupinterlinespace[line=3.25ex] \setuppapersize [S6][S6] % \setuppapersize % [SW][SW] \setuplayout [topspace=10pt, header=30pt, headerdistance=20pt, height=middle, footerdistance=20pt, footer=0pt, bottomdistance=20pt, bottom=20pt, bottomspace=50pt, backspace=30pt, width=middle] \setupinteraction [state=start, click=off, menu=on, style=, color=interactioncolor, contrastcolor=interactioncolor] \setupinteractionscreen [option=max] \setupinteractionmenu [bottom] [color=maincolor, contrastcolor=maincolor, style=\tfa, % acceptable left=\hfill, middle=, right=, height=\bottomheight, width=2\bottomheight, offset=overlay, frame=off] \startinteractionmenu[bottom] \but [firstpage] \symbol[firstpage] \\ \but [previouspage] \symbol[previouspage] \\ \but [InvokeStepper] \StartBusy\symbol[PauseRendering]\StopBusy \\ \but [nextpage] \symbol[nextpage] \\ \but [lastpage] \symbol[lastpage] \\ \but [CloseDocument] \symbol[CloseDocument] \\ \stopinteractionmenu % maybe in colo-sjk : \setupcolor[sjk] \definecolor [dark] [s=.4] \definecolor [bright] [s=.9] \definecolor [red] [r=.4,g=.2,b=.2] \definecolor [green] [r=.2,g=.4,b=.2] \definecolor [blue] [r=.2,g=.2,b=.4] \definecolor [cyan] [r=.2,g=.4,b=.4] \definecolor [magenta][r=.4,g=.2,b=.4] \definecolor [yellow] [r=.4,g=.4,b=.2] \definecolor [pagecolor] [dark] \definecolor [maincolor] [bright] \definecolor [textcolor] [red] \definecolor [interactioncolor] [r=.8,g=.8,b=.6] \setupcolors [state=start, textcolor=maincolor] \setupbackgrounds [page] [background=page, backgroundcolor=textcolor] \setupbackgrounds [text]% [text] [background={comments,text,invoke}] \definelayer [text] [width=\textwidth, height=\textheight] \defineoverlay [comments] [{\setlayer[text][preset=middle]{\placecomments}}] \defineoverlay[page][\uniqueMPgraphic{page-\ifcase\realpageno\or one\else plus\fi}] \startuniqueMPgraphic{page-one} StartPage ; fill Page enlarged 4pt withcolor \MPcolor{pagecolor} ; fill Field[Text][Text] enlarged 10pt % topenlarged (HeaderHeight+HeaderDistance) leftenlarged (BackSpace+4pt) rightenlarged (CutSpace +4pt) withcolor OverlayColor ; StopPage ; \stopuniqueMPgraphic \startuniqueMPgraphic{page-plus} StartPage ; fill Page enlarged 4pt withcolor \MPcolor{pagecolor} ; fill Field[Text][Text] enlarged 10pt leftenlarged (BackSpace+4pt) rightenlarged (CutSpace+4pt) withcolor OverlayColor ; StopPage ; \stopuniqueMPgraphic % this needs to be sorted out ! \appendtoks \NormalizeFontHeight \HeadFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold} \NormalizeFontHeight \TitleFont {\setstrut\strut\quad} {2.0\headerheight} {SansBold} \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {1.5\headerheight} {SansBold} \NormalizeFontHeight \SubSubTitleFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold} \to \everystarttext \appendtoks \NormalizeFontHeight \HeadFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold} \NormalizeFontHeight \TitleFont {\setstrut\strut\quad} {2.0\headerheight} {SansBold} \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {1.5\headerheight} {SansBold} \NormalizeFontHeight \SubSubTitleFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold} \to \everystoptext \setuphead [chapter] [placehead=empty, after={\blank[medium]}, color=maincolor, placenumber=no, style=\HeadFont] \setupheadertexts [\doiftextelse{\currentheadnumber}{\placeheadtext[Topic]}{\placeheadtext[Nopic]}] [] \setuppagenumbering [location=] \definesymbol [emdash] [\emdash] \setupitemize [each] [loose,serried,joinedup,broad] [symbol=emdash] \setupalign [broad,right] \def\doTitlePage#1#2#3% {\startstandardmakeup[headerstate=high] \def\\{\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}% #1\setstrut\setupinterlinespace\vfil#3\vfil\vfil \stopstandardmakeup} \def\TitlePage {\doTitlePage\TitleFont\relax} \def\SubTitlePage{\doTitlePage\TitleFont\SubTitleFont} \definehead[Topic][chapter] \definehead[Nopic][title] \def\Topics#1% {\Nopic[topics]{#1} \startcolumns \placelist[Topic] \stopcolumns} \setuplist [Topic] [alternative=f, color=maincolor, contrastcolor=maincolor, criterium=all] \defineoverlay[topics][\overlaybutton{topics}] \setupbackgrounds [bottom] [text] [background=topics] \continueifinputfile{s-pre-61.tex} \starttext \TitlePage{Stepwise\\Refinement} \Topics{Topics} \Topic{Female Artists} \StartSteps \startitemize \item Fiona Apple \FlushStep \item Tori Amos \FlushStep \item Kate Bush \FlushStep \item Heather Nova \FlushStep \item Alanis Morissette \FlushStep \item Suzanne Vega \FlushStep \stopitemize \StopSteps \Topic{Male Composers} \StartSteps \startitemize \item John Adams \FlushStep \item Steve Reich \FlushStep \item Louis Andriessen \FlushStep \item Olivier Messiaen \FlushStep \stopitemize \StopSteps \Topic{And Some More} \StartSteps \startitemize \item Mark Hollis \FlushStep \item Roger Waters \FlushStep \item David Gilmore \FlushStep \item Peter Gabriel \FlushStep \item Randy Newman \FlushStep \stopitemize \StopSteps \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-epd.mkiv0000644000175000017500000000365512130411274024273 0ustar norbertnorbert%D \module %D [ file=grph-epd, %D version=2010.07.29, %D title=\CONTEXT\ Graphic Macros, %D subtitle=Merging Goodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Graphic Macros / Merging Goodies} \unprotect \registerctxluafile{grph-epd}{1.001} \def\figurereference{\ctxcommand{figurestatus("reference")}} % might become private \defineoverlay[system:graphics:epdf][\directsetup{system:graphics:epdf}] \startsetups system:graphics:epdf \ctxlua{figures.mergegoodies("\externalfigureparameter\c!interaction")}% \reference[\figurereference]{}% todo: dest area \stopsetups \defineframed [system_graphics_epdf] [\c!frame=\v!off, \c!offset=\v!overlay, \c!background={\v!foreground,system:graphics:epdf}] \def\grph_epdf_add_overlay {\global\setbox\foundexternalfigure\vbox\bgroup \system_graphics_epdf{\box\foundexternalfigure}% \egroup} \appendtoks \iflocation \doif\figurefiletype{pdf}{\doifnot{\externalfigureparameter\c!interaction}\v!none\grph_epdf_add_overlay}% \fi \to \externalfigurepostprocessors \protect \endinput % /Properties << /xxxx 22 0 R >> % 21 0 obj << /Type /OCG /Name (xxxx) >> endobj % 22 0 obj << /OCGs [ 21 0 R ] /Type /OCMD >> endobj % \def\setepdflayer#1#2#3#4#5#6% x y w h (in bp) 0/1 destination % {\setlayer % [epdflinks] % [\c!x=#1bp,\c!y=#1\s!bp,\c!preset=\v!leftbottom] % {\button % [\c!width=#3\s!bp,\c!height=#4\s!bp,\c!offset=\v!overlay,\c!frame=\ifnum#5=1 on\else\v!off]% % {}[#6]}} % \def\setepdflayer#1#2#3#4#5#6% x y w h (in bp) 0/1 destination % {\setlayer % [epdflinks] % [\c!x=#1bp,\c!y=#1\s!bp,\c!preset=\v!leftbottom] % {\gotowdhtbox{#3\s!bp}{#4\s!bp}[#6]}} context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-tex.mkiv0000644000175000017500000000314711754241457025103 0ustar norbertnorbert%D \module %D [ file=buff-imp-tex, %D version=2010.10.19, %D title=\CONTEXT\ Visualizer Macros, %D subtitle=\TEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{buff-imp-tex.lua}{1.001} \unprotect \definestartstop [TexSnippet] [DefaultSnippet] \definestartstop [TexSnippetName] [\c!color=darkgreen, \c!style=boldface] \definestartstop [TexSnippetGroup] [\c!color=darkred, \c!style=boldface] \definestartstop [TexSnippetBoundary] [\c!color=darkblue, \c!style=boldface] \definestartstop [TexSnippetSpecial] [\c!color=darkyellow, \c!style=boldface] \definestartstop [TexSnippetComment] [\c!color=darkyellow, \c!style=boldface] \definetyping [TEX] [\c!option=tex] \protect \endinput % needs thinking ... (esp outer start/stop) % % \definestartstop % [TexSnippet] % [DefaultSnippet] % % \definevisualizer % [TexSnippetName] % [\c!color=darkgreen, % \c!style=boldface] % % \definevisualizer % [TexSnippetGroup] % [\c!color=darkred, % \c!style=boldface] % % \definevisualizer % [TexSnippetBoundary] % [\c!color=darkblue, % \c!style=boldface] % % \definevisualizer % [TexSnippetSpecial] % [\c!color=darkyellow, % \c!style=boldface] % % \definevisualizer % [TexSnippetComment] % [\c!color=darkyellow, % \c!style=boldface] context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1255.lua0000644000175000017500000000457411571377075024266 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1255'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000 } context-2013.05.28.20130704/texmf-dist/tex/context/base/x-mathml.mkiv0000644000175000017500000023313712161703335024322 0ustar norbertnorbert%D \module %D [ file=x-mathml, %D version=2008.05.29, %D title=\CONTEXT\ XML Modules, %D subtitle=\MATHML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \xmlfilter{#1}{/*/name()} -> \xmltag % This module is under construction and will be cleaned up. We use a funny mix of % xml, tex and lua. I could rewrite the lot but it also shows how context evolves. % % I might en dup with a lua-only implementation some day. % % no m:text strip (needs checking, maybe nbsp is mandate % % todo: more will be moved to lua (less hassle) % todo: move left/right to the lua end \writestatus{loading}{ConTeXt XML Macros / MathML Renderer} \unprotect \usemodule[x][calcmath] %usemodule[x][asciimath] \startmodule [mathml] \registerctxluafile{x-mathml}{} \def\ctxmodulemathml#1{\ctxlua{moduledata.mathml.#1}} \startxmlsetups xml:mml:define \xmlsetsetup{#1} {(formula|subformula)} {mml:formula} \xmlfilter {#1} {omt:*/function(remapopenmath)} \xmlfilter {#1} {mml:bind/function(remapmmlbind)} \xmlfilter {#1} {mml:csymbol/function(remapmmlcsymbol)} \xmlsetsetup{#1} {mml:*} {mml:*} \xmlsetsetup{#1} {mml:apply/mml:apply/mml:inverse/../..} {mml:apply:inverse} \xmlstrip {#1} {(mml:mi|mml:mo|mml:mn|mml:csymbol)} \stopxmlsetups \xmlregisterns{omt}{openmath} \xmlregisterns{mml}{mathml} \xmlregistersetup{xml:mml:define} \unexpanded\def\MMLhack {\let\MMLpar\par \let\par\relax \everyvbox{\let\par\MMLpar}} \xmlmapvalue {mml:math:mode} {display} {\displaymathematics} % we had this already \xmlmapvalue {mml:math:mode} {inline} {\inlinemathematics } \xmlmapvalue {mml:math:display} {block} {\displaymathematics} % before this showed up \xmlmapvalue {mml:math:display} {inline} {\inlinemathematics } \xmlmapvalue {mml:math:dir} {ltr} {\setfalse\c_math_right_to_left\math_basics_synchronize_direction} \xmlmapvalue {mml:math:dir} {rtl} {\settrue \c_math_right_to_left\math_basics_synchronize_direction} \startxmlsetups mml:math \begingroup \xmlval {mml:math:dir} {\xmlatt{#1}{dir}} {} \xmlval {mml:math:display} {\xmlatt{#1}{display}} { \xmlval {mml:math:mode} {\xmlatt{#1}{mode}} { \automathematics } } { \MMLhack\xmlflush{#1} } \endgroup \stopxmlsetups \startxmlsetups mml:imath \inlinemathematics{\MMLhack\xmlflush{#1}} \stopxmlsetups \startxmlsetups mml:dmath \displaymathematics{\MMLhack\xmlflush{#1}} \stopxmlsetups %D First we define some general formula elements. \startxmlsetups mml:formula \edef\mmlformulalabel {\xmlatt{#1}{label}\xmlatt{#1}{id}} \edef\mmlformulasublabel{\xmlatt{#1}{sublabel}\xmlatt{#1}{id}} \doifsomething\mmlformulalabel{\placeformula[\mmlformulalabel]{\mmlformulasublabel}} \startformula\MMLhack\xmlfirst{#1}{/mml:math}\stopformula \stopxmlsetups \setfalse\mmlignoredelimiter \settrue \mmlsomeleftdelimiter \def\MMLleftorright {\ifconditional\mmlsomeleftdelimiter \setfalse\mmlsomeleftdelimiter\expandafter\MMLleft \else \settrue \mmlsomeleftdelimiter\expandafter\MMLright \fi} \ifx\MMLleft \undefined \let\MMLleft \firstofoneargument \fi \ifx\MMLright \undefined \let\MMLright \firstofoneargument \fi \ifx\MMLmiddle\undefined \let\MMLmiddle\firstofoneargument \fi \def\mmlleftdelimiter #1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{\MMLleft #1}\fi} \def\mmlrightdelimiter #1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{\MMLright #1}\fi} \def\mmlmiddledelimiter #1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{\MMLmiddle #1}\fi} \def\mmlleftorrightdelimiter#1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{\MMLleftorright#1}\fi} \def\mmlchar#1{\char#1 } % used in lua code % \newcount\delimiternesting \appendtoks \delimiternesting\zerocount \to \everymathematics % \def\mmlleftdelimiter #1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{% % \advance\delimiternesting\plusone \MMLleft #1}\fi} % \def\mmlrightdelimiter #1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{% % \advance\delimiternesting\plusone \MMLright#1}\fi} % \def\mmlmiddledelimiter#1{\ifconditional\mmlignoredelimiter#1\else\normalordelimiter{#1}{% % \ifcase\delimiternesting\MMLleft\else\MMLmiddle\fi#1}\fi} %D Remark: from now on this is a module and no longer an xtag %D filter. There is an intermediate cleaner module but it has %D some namespace limitations. Here we do it the \MKIV\ way. \def\widevec#1% {\vbox{\mathsurround\zeropoint\ialign{##\crcr \rightarrowfill\crcr\noalign{\nointerlineskip}% \startimath\hfil\displaystyle{#1}\hfil\stopimath\crcr}}} %D The rendering macros: \def\MMLrm{\mr} \def\MMLseparator#1{\removeunwantedspaces{#1}\ignorespaces} % nils space after separator \def\MMLseparator#1{,} % todo, for europe we need to block the space %D Since I only had the draft of MathML 2 and later 3 as example of %D rendering, there are probably a lot of omissions and %D misinterpretations. At least I learned some bits and %D pieces of math rendering. %D %D The main complications were not so much the math, but to %D find the most efficient way to handle elements without %D spacing beging messed up. The first implementation was %D aimed at getting reasonable output, this second %D implementation is already better in terms of handling %D nesting, and I will definitely need a third one that has %D more efficient and less ugly code. %D %D The \TEX\ part is not that complicated and once the %D preprocessor was okay, the rest way just a lot of keying %D and testing. It all comes down to gobbling, redefining, %D and not so much to parsing. %D %D The second implementation expanded the whole math sequence %D into an internal \TEX\ representation. This is a rather clean %D and fast process. Filtering and testing takes place by %D redefining teh internal representation macros. %D %D The third implementation may look a bit more messy in some %D respects. This is because in \TEX\ it's not that trivial to %D implement a tree handler. We use a stack for the \type {apply} %D element and other sequential content. Occasionally we need to %D peek into child elements which involves messy code. This %D implementation is closer to the normal \XML\ handling in %D \CONTEXT. %D We start with the parent elements and the option handler. \def\xmlmathmldirective#1{\dosetvalue{MML#1}} %def\xmlmathmldirective#1#2#3{[#1][#2][#3]\dosetvalue{MML#1}{#2}{#3}} %D In the styles, options can be set with: \unexpanded\def\setupMMLappearance[#1]{\dodoubleargument\getparameters[MML#1]} % no @@ because passed to lua %D We will apply inner math to all bits and pieces made up by an %D \type {apply}. \def\MMLmathinner {\ifinner \expandafter\firstofoneargument \else \expandafter\mathinner \fi} %D Auxiliary MathML macros: (to be generalized) \def\mmlfirst #1{\xmlelement{#1}{1}} % we can move these inline if needed \def\mmlsecond #1{\xmlelement{#1}{2}} \def\mmlthird #1{\xmlelement{#1}{3}} \def\mmlprelast#1{\xmlelement{#1}{-2}} \def\mmllast #1{\xmlelement{#1}{-1}} \starttexdefinition doifelsemmlfunction #1 \xmldoifelse {#1} {/mml:fn} { \firstoftwoarguments } { \xmldoifelse {#1} {/mml:apply/mml:fn} { \firstoftwoarguments } { \xmldoifelse {#1} {/mml:ci[@type=='fn']} { \firstoftwoarguments } { \secondoftwoarguments } } } \stoptexdefinition %D Special features: \newtoks \@@postponedMMLactions \setfalse \somepostponedMMLactions \def\postponeMMLactions#1% {\global\settrue\somepostponedMMLactions \global\@@postponedMMLactions\expandafter{\the\@@postponedMMLactions#1}} \def\postponedMMLactions {\global\setfalse\somepostponedMMLactions \@EA\global\@EA\@@postponedMMLactions\@EA\emptytoks \the\@@postponedMMLactions} %D A couple of lists: \convertargument mml:times|mml:divide|mml:power|% mml:lt|mml:gt|mml:eq|mml:leq|mml:geq|% mml:in|mml:inverse|% mml:fn|% mml:floor|mml:ceiling|% mml:mean|% mml:selector|% mml:abs|mml:int|mml:limit|mml:sum|mml:product|% mml:outerproduct|mml:innerproduct|mml:scalarproduct% \to \MMLcmainresetlist \convertargument mml:sin|mml:arcsin|mml:sinh|mml:arcsinh|% mml:cos|mml:arccos|mml:cosh|mml:arccosh|% mml:tan|mml:arctan|mml:tanh|mml:arctanh|% mml:cot|mml:arccot|mml:coth|mml:arccoth|% mml:csc|mml:arccsc|mml:csch|mml:arccsch|% mml:sec|mml:arcsec|mml:sech|mml:arcsech|% mml:ln|mml:exp|mml:log|% mml:abs|mml:int|mml:limit|mml:sum|mml:product|% mml:fn% \to \MMLcfunctionlist \convertargument mml:sin|mml:arcsin|mml:sinh|mml:arcsinh|% mml:cos|mml:arccos|mml:cosh|mml:arccosh|% mml:tan|mml:arctan|mml:tanh|mml:arctanh|% mml:cot|mml:arccot|mml:coth|mml:arccoth|% mml:csc|mml:arccsc|mml:csch|mml:arccsch|% mml:sec|mml:arcsec|mml:sech|mml:arcsech|% mml:ln|mml:exp|mml:log|% mml:abs% \to \MMLcpurefunctionlist \convertargument mml:diff|mml:partialdiff|mml:root% \to \MMLcconstructlist %D We use inner and grouping (begin/end and no b/e) else we %D get problems with 1/2(1+2) and alike (todo: ask taco). %D %D The problem with apply is that we need to take care of %D several situations, like: %D %D \starttyping %D <.../> ... %D ... %D ... %D ... %D \stoptyping %D %D Because we translated version 2 of this renderer into %D version 3 the following definitions may be sub optimal or %D more complex than actually needed. %D We will more more to lua ... % simple version \newcount\@MMLlevel \def\MMLcreset{\@MMLlevel\zerocount} \let\MMLctempresetlist\empty \def\setMMLcreset{\edef\MMLctempresetlist} \let\MMLdoL\donothing \let\MMLdoR\donothing \newcount\mmlapplydepth \def\MMLcreset{\mmlapplydepth\zerocount} \startxmlsetups mml:apply \MMLmathinner { \xmldoif {#1} {/(\MMLcmainresetlist\string|\MMLctempresetlist)} { % \MMLcreset } \edef\mmlapplyopentoken {\xmlatt{#1}{open}} \edef\mmlapplyclosetoken{\xmlatt{#1}{close}} \ifcase\mmlapplydepth \else \ifx\mmlapplyopentoken\empty \def\mmlapplyopentoken {(} \def\mmlapplyclosetoken{)} \fi \fi \advance\mmlapplydepth\plusone \begingroup \ifx\mmlapplyopentoken\empty \let\MMLdoL\donothing \let\MMLdoR\donothing \else \edef\MMLdoL{\noexpand\left \mmlapplyopentoken } \edef\MMLdoR{\noexpand\right\mmlapplyclosetoken} \fi \let\MMLctempresetlist\empty \xmldoifelse {#1} {/mml:apply} { % % ... .. % \xmldoifelse {#1} {/mml:apply(mml:plus|mml:minus)} {% [a] % % yet incomplete and rather untested % % x } {% [b] % \MMLcreset } % \MMLdoL % \mmlfirst{#1} % \ifconditional\somepostponedMMLactions % \postponedMMLactions % \else % \left(\MMLcreset\mmlsecond{#1}\right) % \fi % \MMLdoR % } { \edef\mmlapplyaction{\xmlfilter{#1}{/*/name()}} \doifsetupselse {mml:apply:mml:\mmlapplyaction} { \xmlsetup{#1}{mml:apply:mml:\mmlapplyaction} } { % \MMLdoL \xmlsetup{#1}{mml:\xmlfilter{#1}{/*/name()}} % \MMLdoR } % } \endgroup \advance\mmlapplydepth\minusone } \stopxmlsetups \startxmlsetups mml:apply:mml:apply \xmlflush{#1} \xmlall{#1}{../[position()>1]} \stopxmlsetups \startxmlsetups mml:apply:mml:fn \xmldoifelse {#1} {/mml:fn/mml:ci} { \edef\mmlfnci{\xmlstripped{#1}{/mml:fn/mml:ci}}% was xmlcontent \doifsetupselse{mmc:fn:\mmlfnci} { % was mmc:fn:... \xmlsetup{#1}{mmc:fn:\mmlfnci} % \MMLdoL/MMLdoR to be handled in plugin } { \MMLcreset \MMLdoL \mmlfirst{#1} \ifnum\xmlcount{#1}{/*}>\plusone \negthinspace % not enough \left(\MMLcreset\xmlconcatrange{#1}{/*}{2}{}{\MMLseparator,}\right) \fi \MMLdoR } } { \MMLcreset \MMLdoL \xmlall{#1}{/*} \MMLdoR } \stopxmlsetups \startxmlsetups mml:apply:mml:csymbol \xmlsetup{#1}{mml:csymbol}% \MMLdoL/MMLdoR to be handled in plugin \stopxmlsetups \startxmlsetups mml:apply:mml:ci \xmlfirst{#1}{/mml:ci} \ifnum\xmlcount{#1}{/*}>\plusone \left(\MMLcreset\xmlconcatrange{#1}{/*}{2}{}{\MMLseparator,}\right) \fi \stopxmlsetups % reln \startxmlsetups mml:reln \writestatus{XML}{MathML element "reln" is obsolete} \stopxmlsetups % fn % plusminus ± \startxmlsetups mmc:fn:\utfchar{"00B1} \MMLdoL \xmlconcat{#1}{/[position()>1]}{\utfchar{"00B1}} \MMLdoR \stopxmlsetups % minusplus \startxmlsetups mmc:fn:\utfchar{"2213} \MMLdoL \xmlconcat{#1}{/[position()>1]}{\utfchar{"2213}} \MMLdoR \stopxmlsetups \startxmlsetups mmc:fn \begingroup \edef\mmlnoffn{\xmlcount{#1}{/*}} \ifnum\mmlnoffn>\plustwo \def\MMCfnleft {\left(} \def\MMCfnright{\right)} \else \let\MMCfnleft \relax \let\MMCfnright\relax \fi \xmldoifelse {#1} {/mml:ci} { % first \edef\mmlfnci{\xmltext{#1}{/mml:ci}}% was xmlcontent \doifsetupselse{mmc:fn:\mmlfnci} { % was mmc:fn:... \xmlsetup{#1}{mmc:fn:\mmlfnci} % \MMLdoL/MMLdoR to be handled in plugin } { \MMLcreset \mmlfirst{#1} } } { \xmldoifelse {#1} {/mml:apply} { % first \xmldoifelse {#1} {/(mml:plus\string|mml:minus)} { \left(\mmlfirst{#1}\right) } { \mmlfirst{#1} } \ifnum\mmlnoffn>\plusone \left(\xmlall{#1}{/!mml:apply}\right) \fi } { \MMLcreset \negthinspace \MMCfnleft \ifnum\mmlnoffn=\plustwo,\fi \xmlconcat{#1}{/*}{2}{}{\MMLseparator,} \MMCfnright } } \endgroup \stopxmlsetups \startxmlsetups mmc:fn:apply % where used? \xmldoifelse {#1} {/mml:ci} { % first \edef\mmlfnci{\xmltext{#1}{/mml:ci}}% was xmlcontent \doifsetupselse{mmc:fn:\mmlfnci} { % was mmc:fn:... \xmlsetup{#1}{mmc:fn:\mmlfnci} % \MMLdoL/MMLdoR to be handled in plugin } { \MMLcreset \mmlfirst{#1} \ifnum\xmlcount{#1}{/*}>\plusone \negthinspace \left(\MMLcreset\xmlconcat{#1}{2}{}{\MMLseparator,}\right) \fi } } { \endgroup \MMLcreset \mmlfirst{#1} } \stopxmlsetups %D The next definition provide a kind of plug-in mechanism (see %D the open math extension module). % http://www.publishers.com/somename % % called at the lua end \starttexdefinition mmlapplycsymbol #1#2#3#4 % #1=full url, #2=name, #3=encoding, #4=text \doifelse {#3} {text} { % {\mr #4} \text{#4} } { \doifsetupselse {mml:csymbol:#1} { % full url \directsetup{mml:csymbol:#1} } { % somename (fallback) \doifsetupselse {mml:csymbol:#2} { \directsetup{mml:csymbol:#2} } { \xmlval{mmc:cs}{#3}{}% todo } } } \stoptexdefinition \startxmlsetups mml:csymbol \ctxmodulemathml{csymbol("#1")} \stopxmlsetups \startxmlsetups mml:csymbol:cdots \cdots \stopxmlsetups % \startxmlsetups mml:csymbol: \stopxmlsetups %D Alternative b will convert periods into comma's: \setupMMLappearance[cn] [\c!alternative=\v!a] \setupMMLappearance[polar] [\c!alternative=\v!a] % a|b|c \setupMMLappearance[float] [\c!symbol=\v!no] % \v!yes|dot \setupMMLappearance[enotation][\c!symbol=\v!no] % \v!yes|dot \setupMMLappearance[base] [\c!symbol=\v!numbers] % digits|characters|text|no \startxmlsetups mml:cs \xmlcommand{#1}{/}{mml:cs:\xmlattdef{#1}{type}{default}} \stopxmlsetups \startxmlsetups mml:ci \xmlcommand{#1}{/}{mml:ci:\xmlattdef{#1}{type}{default}} \stopxmlsetups \startxmlsetups mml:cn \xmlcommand{#1}{/}{mml:cn:\xmlattdef{#1}{type}{default}} \stopxmlsetups % helpers cn / todo: \mn{...} \startxmlsetups mml:cn:default \mathopnolimits{\xmlflush{#1}} \stopxmlsetups % helpers ci \startxmlsetups mml:ci:default \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:ci:set {\blackboard{\xmlflush{#1}}} % todo \stopxmlsetups \startxmlsetups mml:ci:vector \widevec{\xmlflush{#1}} \stopxmlsetups \startxmlsetups mml:ci:matrix {\bi\xmlflush{#1}} \stopxmlsetups \startxmlsetups mml:ci:function \xmlflush{#1}% \negthinspace \stopxmlsetups \startxmlsetups mml:ci:fn \xmlsetup{#1}{mml:ci:function} \stopxmlsetups \startxmlsetups mml:ci:complex-cartesian \xmlsetup{#1}{mml:cn:complex} \stopxmlsetups \startxmlsetups mml:ci:complex \xmlsetup{#1}{mml:cn:complex} \stopxmlsetups \startxmlsetups mml:ci:complex-polar \xmlsetup{#1}{mml:cn:polar} \stopxmlsetups \startxmlsetups mml:ci:polar \xmlsetup{#1}{mml:cn:polar} \stopxmlsetups % helpers ci \startxmlsetups mml:cn:default \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:cn:integer \edef\mmlintegerbase{\xmlattdef{#1}{base}{}} \ifx\mmlintegerbase\empty \xmlflush{#1} \else \doifelse \MMLbasesymbol \v!no { \MMLcCNbasedata{\xmlflush{#1}} } { \MMLcCNbasedata{\xmlflush{#1}}\normalsubscript{ \hbox {\startimath \mr \scriptscriptstyle \processaction [\MMLbasesymbol] [\v!characters=>\MMLcCNbasestring BODH, \v!text=>\MMLcCNbasestring{BIN}{OCT}{DEC}{HEX}, \s!unknown=>\mmlintegerbase] \stopimath} } } \fi \stopxmlsetups \def\MMLcCNbasedata#1% {\ifnum\mmlintegerbase>10 \relax{\mr#1}\else#1\fi} \def\MMLcCNbasestring#1#2#3#4% {\ifnum\mmlintegerbase= 2 #1\else \ifnum\mmlintegerbase= 8 #2\else \ifnum\mmlintegerbase=10 #3\else \ifnum\mmlintegerbase=16 #4\else \mmlintegerbase \fi\fi\fi\fi} \startxmlsetups mml:cn:polar \xmlsetup{#1}{mml:cn:polar:\MMLpolaralternative} \stopxmlsetups \startxmlsetups mml:cn:polar:a \ctxmodulemathml{cpolar_a("#1")} \stopxmlsetups \startxmlsetups mml:cn:polar:b {\mr e}\normalsuperscript{\xmlsnippet{#1}{1}+\xmlsnippet{#1}{3}\thinspace{\mr i}} \stopxmlsetups \startxmlsetups mml:cn:polar:c \exp\left(\xmlsnippet{#1}{1}+\xmlsnippet{#1}{3}\thinspace{\mr i}\right) \stopxmlsetups \startxmlsetups mml:cn:complex-polar \xmlsetup{#1}{mml:cn:polar} \stopxmlsetups \startxmlsetups mml:cn:complex % todo ( ) \left(\xmlsnippet{#1}{1} + \xmlsnippet{#1}{3}\thinspace{\mr i}\right) \stopxmlsetups \startxmlsetups mml:cn:complex-cartesian \xmlsetup{#1}{mml:cn:complex} \stopxmlsetups \startxmlsetups mml:cn:float \doifelse \MMLfloatsymbol \v!no { % make sure that e shows up ok \mathopnolimits{\xmlflush{#1}} } { % we should ignore \entities ! \edef\mmlfloatstring{\xmlflush{#1}} \splitstring\mmlfloatstring\at e\to\first\and\last \ifx\first\empty \mmlfloatstring \else\ifx\last\empty \mmlfloatstring \else \first \doifelse \MMLfloatsymbol {dot} \cdot \times 10\normalsuperscript{\last} \fi \fi } \stopxmlsetups \startxmlsetups mml:cn:real \xmlsetup{#1}{mml:cn:float} \stopxmlsetups \startxmlsetups mml:cn:e-notation \doifelse \MMLenotationsymbol \v!no { \xmlsnippet{#1}{1} \unskip\mathopnolimits{e}\ignorespaces \xmlsnippet{#1}{3} } { \xmlsnippet{#1}{1} \doifelse \MMLenotationsymbol {dot} \cdot \times10\normalsuperscript{\xmlsnippet{#1}{3}} } \stopxmlsetups \startxmlsetups mml:cn:logical \mathopnolimits{\xmlflush{#1}} \stopxmlsetups \startxmlsetups mml:cn:rational \xmldoifelse {#1} {/mml:sep} { \frac {\xmlsnippet{#1}{1}} {\xmlsnippet{#1}{3}} } { \xmlflush{#1} } \stopxmlsetups % interval \setupMMLappearance[interval][\c!alternative=\v!a,\c!separator={,}] % when empty element, then it's an apply \startxmlsetups mml:interval \doifelse {\xmltag{#1}} {apply} { % #1 == apply \let\mmlintervalfirst \mmlsecond \let\mmlintervalsecond\mmlthird \xmlsetup{#1}{mml:interval:\xmlattributedef{#1}{/mml:interval}{closure}{closed}} } { % #1 == interval \let\mmlintervalfirst \mmlfirst \let\mmlintervalsecond\mmlsecond \xmlsetup{#1}{mml:interval:\xmlattdef{#1}{closure}{closed}} } \stopxmlsetups \startxmlsetups mml:interval:closed \left[\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right] \stopxmlsetups \startxmlsetups mml:interval:open-closed \doifelse \MMLintervalalternative \v!b { \left<\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right] } { \left(\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right] } \stopxmlsetups \startxmlsetups mml:interval:closed-open \doifelse \MMLintervalalternative \v!b { \left[\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right> } { \left[\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right) } \stopxmlsetups \startxmlsetups mml:interval:open \doifelse \MMLintervalalternative \v!b { \left<\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right> } { \left(\mmlintervalfirst{#1}\MMLseparator\MMLintervalseparator\mmlintervalsecond{#1}\right) } \stopxmlsetups % inverse \setfalse\xmlinversefunction \startxmlsetups mml:apply:inverse \settrue\xmlinversefunction \xmlsetup{#1}{mml:\xmlfilter{#1}{/mml:apply/*[2]/name()}} \stopxmlsetups % condition % maybe a fast \xmlnonfirst % instead of the following we could do \xmlcontent{#1}{/mml:bvar} etc \startxmlsetups mml:bvar \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:lowlimit \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:uplimit \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:degree \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:logbase \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:fn \xmlflush{#1} \stopxmlsetups \startxmlsetups mml:condition % \xmldoif {#1} {/mml:bvar} { % \xmlfirst{#1}{/mml:bvar}\mid % } \xmlall{#1}{/!(mml:condition\string|mml:bvar)} \stopxmlsetups % declare \setupMMLappearance[declare][\c!state=\v!start] \startxmlsetups mml:declare \doif \MMLdeclarestate \v!start { \mathopnolimits{declare} \mmlfirst{#1} \ifnum\xmlcount{#1}{/*}>\plusone \thickspace \mathopnolimits{as} \thickspace \fi \mmlsecond{#1} } \stopxmlsetups % lambda \setupMMLappearance[lambda][\c!alternative=b] \startxmlsetups mml:lambda \begingroup \doifelse \MMLlambdaalternative \v!a { \lambda\left(\xmlconcat{#1}{/!mml:lambda}{\MMLseparator,}\right) } { \ifnum\xmlcount{#1}{/mml:bvar}>\plusone \left(\xmlconcat{#1}{/mml:bvar}{\MMLseparator,}\right) \else \xmlfirst{#1}{/mml:bvar} \fi \mapsto \MMLcreset \xmlall{#1}{/!(mml:bvar|mml:lambda)} } \endgroup \stopxmlsetups % compose \startxmlsetups mml:compose \begingroup \MMLcreset % \let\MMLcCIfunction\firstofoneargument % brrr ? ? ? \doifelsemmlfunction {#1} { \left(\xmlconcat{#1}{/!mml:compose}{\circ}\right) } { \xmlconcat{#1}{/!mml:compose}{\circ} } \endgroup \stopxmlsetups \startxmlsetups mml:image \mathopnolimits{image} \left( {\mr\xmlfilter{#1}{/!mml:image/tag()}} \right) \stopxmlsetups \setupMMLappearance[piece][\c!separator=] \startxmlsetups mml:piecewise \processaction [\MMLpieceseparator] [ \v!yes=>\def\theMMLpieceseparator{,&}, \v!no=>\def\theMMLpieceseparator{&}, \s!default=>\def\theMMLpieceseparator{&}, \s!unknown=>\def\theMMLpieceseparator{\,\,\hbox{\MMLpieceseparator}\,\,}] \cases{\xmlflush{#1}} \stopxmlsetups \startxmlsetups mml:piece \mmlfirst{#1}\theMMLpieceseparator\mathematics{\mmlsecond{#1}}\crcr \stopxmlsetups \startxmlsetups mml:otherwise % \xmlflush{#1}\MMLcPIECEseparator&{\mr otherwise}\crcr \xmlflush{#1}&{\mr otherwise}\crcr \stopxmlsetups % end of piece \startxmlsetups mml:quotient \lfloor\mmlsecond{#1}/\mmlthird{#1}\rfloor \stopxmlsetups \startxmlsetups mml:factorial \xmlall{#1}{/!factorial}! \stopxmlsetups \setupMMLappearance [divide] [\c!level=\!!maxcard,\c!alternative=\v!a] \newcount\mmldividelevel \startxmlsetups mml:divide \advance\mmldividelevel\plusone \doifelse \MMLdividealternative \v!b { \mmlsecond{#1}/\mmlthird{#1} } { \ifnum \mmldividelevel > \MMLdividelevel \relax % threshold \mmlsecond{#1}/\mmlthird{#1} \else \MMLcreset \frac{\MMLcreset\mmlsecond{#1}}{\MMLcreset\mmlthird{#1}} \fi } \advance\mmldividelevel\minusone \stopxmlsetups % min max \startxmlsetups mml:min \mathopnolimits{min} \xmlsetup{#1}{mml:minmax} \stopxmlsetups \startxmlsetups mml:max \mathopnolimits{max} \xmlsetup{#1}{mml:minmax} \stopxmlsetups \startxmlsetups mml:minmax \xmldoif {#1} {/mml:bvar} { {}\normalsubscript{\xmlfirst{#1}{/mml:bvar}} } \left\{ \xmlconcat{#1}{/!(mml:bvar\string|mml:max\string|mml:min)}{\MMLseparator,} \right\} \stopxmlsetups % minus plus \setupMMLappearance [plus] [\c!alternative=\v!a] % b = no sign -> 3 1/4 \setupMMLappearance [sign] [\c!reduction=\v!yes] % alternative b -> geen sign % branch needed, else (a-b) + (c-d) goes wrong % reset check in case of (-x) + 37 % reset check in case of (-x) + 37 \newcount\mmlpluscounter \startxmlsetups mml:plus \doifelse \MMLsignreduction \v!yes { \MMLdoL \xmlsetup{#1}{mml:plus:reset} \xmlcommand{#1}{/!mml:plus}{mml:plus:body} \MMLdoR } { \ifnum\xmlcount{#1}{/!mml:plus}=\plusone +\xmlfirst{#1}{/!mml:plus} \else \MMLdoL \xmlconcat{#1}{/!mml:plus}{+} \MMLdoR \fi } \stopxmlsetups \startxmlsetups mml:plus:reset \mmlpluscounter\zerocount \stopxmlsetups \startxmlsetups mml:plus:body \advance\mmlpluscounter\plusone \ifnum\mmlpluscounter>\plusone \xmldoifelse{#1}{/mml:minus} { \ifnum\xmlcount{#1}{/!mml:minus}>\plusone + \fi } { \doifelse {\xmlatt{#1}{type}} {rational} { % fraction } { + } } \fi \xmldirect{#1} \stopxmlsetups \newcount\mmlminuscounter \startsetups mml:minus \doifelse \MMLsignreduction \v!yes { \ifnum\xmlcount{#1}{/!mml:minus}=\plusone -\xmlfirst{#1}{/!mml:minus} \else \MMLdoL \xmlsetup{#1}{mml:minus:reset} \xmlcommand{#1}{/!mml:minus}{mml:minus:body} \MMLdoR \fi } { \left( % \MMLdoL \ifnum\xmlcount{#1}{/!mml:minus}=\plusone -\xmlfirst{#1}{/!mml:minus} \else \xmlsetup{#1}{mml:minus:reset} \xmlcommand{#1}{/!mml:minus}{mml:minus:body} \fi \right) % \MMLdoR } \stopsetups \startxmlsetups mml:minus:reset \mmlminuscounter\zerocount \stopxmlsetups \startxmlsetups mml:minus:body % we can slso use concat here \advance\mmlminuscounter\plusone \ifnum\mmlminuscounter>\plusone - \fi \xmldirect{#1} \stopxmlsetups % power \setupMMLappearance[power][\c!reduction=\v!yes] \let\MMLpowerelement\empty \startxmlsetups mml:power \xmldoifelse {#1} {/mml:apply} { \doifelse \MMLpowerreduction \v!yes { \xmldoifelse {#1} {/mml:apply/(\MMLcfunctionlist)} { \gdef\MMLpowerelement{\mmlthird{#1}}% postpone, no xdef \MMLcreset\mmlsecond{#1} } { \left(\MMLcreset\mmlsecond{#1}\right)\normalsuperscript{\MMLcreset\mmlthird{#1}} } } { \left(\MMLcreset\mmlsecond{#1}\right)\normalsuperscript{\MMLcreset\mmlthird{#1}} } } { \mmlsecond{#1}\normalsuperscript{\MMLcreset\mmlthird{#1}} } \stopxmlsetups % rem \startxmlsetups mml:rem \xmlconcat{#1}{/!mml:rem}{\mathopnolimits{mod}} \stopxmlsetups \setupMMLappearance [times] [\c!symbol=\v!no,\c!auto=\v!yes] % new, auto catches cn cn cn \startxmlsetups mml:times \setMMLcreset{\MMLcfunctionlist\string|\MMLcconstructlist}% \doifelse\MMLtimesauto\v!no { \let\MMLtimes@@symbol\MMLtimessymbol } { \xmldoifelse {#1} {/mml:cn[name(1) == 'mml:cn']} {% name(1) is next one \doifinsetelse\MMLtimessymbol{\v!yes,\v!no} { \let\MMLtimes@@symbol\v!yes } { \let\MMLtimes@@symbol\MMLtimessymbol } } { \let\MMLtimes@@symbol\MMLtimessymbol } } \doifelse\MMLtimes@@symbol\v!yes { \xmlconcat{#1}{/!mml:times}{\times} } { \doifelse\MMLtimes@@symbol{dot} { \xmlconcat{#1}{/!mml:times}{\cdot} } { \doifelse\MMLtimes@@symbol{times} { \xmlconcat{#1}{/!mml:times}{\times} } { \xmlall{#1}{/!mml:times} } } } \stopxmlsetups \setupMMLappearance[root][\c!symbol=\v!yes] \startxmlsetups mml:root \xmldoifelse {#1} {/mml:degree} { \root \doifnot\MMLrootsymbol\v!no{\MMLcreset\xmltext{#1}{/mml:degree}} \of } { \sqrt } {\MMLcreset\xmlall{#1}{/!(mml:degree\string|mml:root)}} \stopxmlsetups % gcd \startxmlsetups mml:gcd \begingroup \gcd\left(\MMLcreset\xmlconcat{#1}{/!mml:gcd}{\MMLseparator,}\right) \endgroup \stopxmlsetups % and or xor implies, not \startxmlsetups mml:and \xmlconcat{#1}{/!mml:and} {\wedge} \stopxmlsetups \startxmlsetups mml:or \xmlconcat{#1}{/!mml:or} {\vee} \stopxmlsetups \startxmlsetups mml:xor \xmlconcat{#1}{/!mml:xor} {\mathopnolimits{xor}} \stopxmlsetups \startxmlsetups mml:implies \xmlconcat{#1}{/!mml:implies}{\Rightarrow} \stopxmlsetups \startxmlsetups mml:not \neg \xmlall {#1}{/!mml:not} \stopxmlsetups % forall exists %D We need to shift left below rotated A. \startxmlsetups mml:forall \forall \negthinspace \xmlsetup{#1}{mml:forallexists} \stopxmlsetups \startxmlsetups mml:exists \exists \xmlsetup{#1}{mml:forallexists} \stopxmlsetups \def\mmlforallexistslist{mml:bvar\string|mml:forall\string|mml:exists\string|mml:condition} \startxmlsetups mml:forallexists \normalsubscript{\xmlconcat{#1}{/mml:bvar}{\MMLseparator,}} \xmldoifelse {#1} {/mml:condition} { \thickspace \begingroup \xmlfirst{#1}{/mml:condition} \endgroup \ifcase\xmlcount{#1}{/!(\mmlforallexistslist)}\relax % nothing \or % == snelle volgende \left\vert \MMLcreset \medspace \xmlconcat{#1}{/!(\mmlforallexistslist)}{} \right. \else % special case \left\vert \matrix { \xmlconcat{#1}{/!(\mmlforallexistslist)}{\hfill\crcr} } \right. \fi } { :\xmlfirst{#1}{/!(\mmlforallexistslist)} } \stopxmlsetups \startxmlsetups mml:abs \left\vert \MMLcreset\xmlall{#1}{/!mml:abs} \right\vert \stopxmlsetups \startxmlsetups mml:conjugate % watch extra {} {\overline{\MMLcreset\xmlall{#1}{/!mml:conjugate}}} \stopxmlsetups \startxmlsetups mml:arg \mathopnolimits{arg} \left( \MMLcreset\xmlall{#1}{/!mml:arg} \right) \stopxmlsetups \startxmlsetups mml:real \Re \left( \MMLcreset \xmlall{#1}{/!mml:real} \right) \stopxmlsetups \startxmlsetups mml:imaginary \Im \ left( \MMLcreset \xmlall{#1}{/!mml:imaginary} \right) \stopxmlsetups \startxmlsetups mml:lcm \mathopnolimits{lcm} \left( \xmlconcat{#1}{/!mml:lcm}{\MMLseparator,} \right) \stopxmlsetups \startxmlsetups mml:floor \lfloor \xmlall{#1}{/!mml:floor} \rfloor \stopxmlsetups \startxmlsetups mml:ceiling \lceiling \xmlall{#1}{/!mml:ceiling} \rceiling \stopxmlsetups % relations % apply attr or eq \setupMMLappearance[relation][\c!align=\v!no] \xmlmapvalue {mml:relation} {eq} {=} \xmlmapvalue {mml:relation} {neq} {\neq} \xmlmapvalue {mml:relation} {gt} {>} \xmlmapvalue {mml:relation} {lt} {<} \xmlmapvalue {mml:relation} {geq} {\geq} \xmlmapvalue {mml:relation} {leq} {\leq} \xmlmapvalue {mml:relation} {equivalent} {\equiv} \xmlmapvalue {mml:relation} {approx} {\approx} \xmlmapvalue {mml:relation} {factorof} {\mid} \startxmlsetups mml:eq \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:neq \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:gt \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:lt \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:geq \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:leq \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:equivalent \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:approx \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:factorof \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:relation \edef\mmlapplyaction{\xmlfilter{#1}{/*/name()}} \MMLcreset \xmlsetup{#1}{mml:relation:\xmlattdef{#1}{align}{\MMLrelationalign}} \stopxmlsetups \startxmlsetups mml:relation:default \xmlconcatrange{#1}{/*}{2}{}{\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}} \stopxmlsetups \startxmlsetups mml:relation:last \eqalign { \xmlconcatrange{#1}{/*}{2}{-2}{&\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}\crcr} \mmlprelast{#1}&\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}{}\mmllast{#1} } \stopxmlsetups \startxmlsetups mml:relation:first \eqalign { \mmlsecond{#1}\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}{} &\xmlconcatrange{#1}{/*}{3}{}{\crcr\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}{}&} } \stopxmlsetups \startxmlsetups mml:relation:left \eqalign { \xmlconcatrange{#1}{/*}{2}{}{&\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}\crcr} } \stopxmlsetups \startxmlsetups mml:relation:right \eqalign { &\xmlconcatrange{#1}{/*}{2}{}{\crcr\xmlval{mml:relation}{\mmlapplyaction}{[\mmlapplyaction]}{}&} } \stopxmlsetups \startxmlsetups mml:relation:no \xmlsetup{#1}{mml:relation:default} \stopxmlsetups \startxmlsetups mml:relation:yes \xmlsetup{#1}{mml:relation:left} \stopxmlsetups % personal goody: \edef\MMLcmainresetlist{\MMLcmainresetlist\string|becomes} \xmlmapvalue {mml:relation} {mml:becomes} {:=} \startxmlsetups mml:becomes \xmlsetup{#1}{mml:relation} \stopxmlsetups % calculus and vector calculus \startxmlsetups mml:domainofapplication \xmlall{#1}{/!mml:domainofapplication} \stopxmlsetups \setupMMLappearance[int][\c!location=\v!top] \def\doMMLlimits#1{\doifelsevalue{MML#1\c!location}\v!top\limits\nolimits} \startxmlsetups mml:int \MMLcreset \xmldoifelse {#1} {/mml:domainofapplication} { \int \doMMLlimits{int}\normalsubscript{\xmlfirst{#1}{/mml:domainofapplication}}\relax } { \xmldoifelse {#1} {/mml:condition} { \int \doMMLlimits{int}\normalsubscript{\xmlfirst{#1}{/mml:condition}}\relax } { \xmldoifelse {#1} {/mml:lowlimit} { \int \doMMLlimits{int}\normalsubscript{\xmlfirst{#1}{/mml:lowlimit}}\normalsuperscript{\xmlfirst{#1}{/mml:uplimit}} } { % funny, why do we have lowlimit/uplimit then \xmldoifelse {#1} {/mml:apply/mml:interval} { \int \doMMLlimits{int}\normalsubscript{\xmlindex{#1}{/mml:apply}{2}}\normalsuperscript{\xmlindex{#1}{/mml:apply}{3}} } { \int } } } } \MMLcreset \xmldoifelse {#1} {/mml:apply} { \doifelsemmlfunction {#1} { % todo test \xmlfirst{#1}{/mml:apply} } { % if there are too many () now, we need to be more clever \left( \xmlfirst{#1}{/mml:apply} \right) } } { \xmlfirst{#1}{/mml:ci} } \xmldoifelse {#1} {/mml:bvar} { \thinspace {\mr d} \xmlfirst{#1}{/mml:bvar} } { % nothing } \stopxmlsetups \setupMMLappearance[diff][\c!location=\v!top,\c!alternative=\v!a] \startxmlsetups mml:diff \MMLcreset \doifelse \MMLdiffalternative \v!a { \xmldoifelse {#1} {/mml:lambda} { % a special case (mathadore/openmath) \frac { d \normalsuperscript {\xmlfirst{#1}{/mml:bvar}\xmlfirst{#1}{/mml:cn}} {\xmlfirst{#1}{/mml:lambda}\xmlfirst{#1}{/mml:ci}} } { d {\xmlfirst{#1}{/mml:bvar}\xmlfirst{#1}{/mml:ci}} \normalsuperscript {\xmlfirst{#1}{/mml:bvar}\xmlfirst{#1}{/mml:cn}} } } { \xmldoifelse {#1} {/mml:bvar} { \frac { {\mr d}{ \xmldoifelse {#1} {/mml:degree} { \normalsuperscript{\xmlconcat{#1}{/mml:degree}\empty} } { \xmldoif {#1} {/mml:bvar/mml:degree} { \normalsuperscript{\xmlconcat{#1}{/mml:bvar/mml:degree}+} } } } \doif \MMLdifflocation \v!top { \xmldoifelse {#1} {/mml:ci} { \xmlfirst{#1}{/mml:ci} } { \MMLcreset \ifnum\xmlcount{#1}{/mml:apply/*}>\plustwo % hack \left( \xmlfirst{#1}{/mml:apply} \right) \else \xmlfirst{#1}{/mml:apply} \fi } } } { {\mr d} \xmlfirst{#1}{/mml:bvar/!mml:degree} \xmldoif {#1} {/mml:bvar/mml:degree} { \normalsuperscript{\xmlfirst{#1}{/mml:bvar/mml:degree}} } } \doifnot \MMLdifflocation \v!top { \left(\MMLcreset\xmlfirst{#1}{/(mml:apply\string|mml:ci)}\right) } } { % beware, the second {} is needed for the superscript \xmlconcatrange{#1}{/*}{2}{}{}\normalsuperscript\prime } } } { \MMLcreset \xmlfirst{#1}{/(mml:apply\string|mml:ci)} % there can be problems with nested diff's: \normalsuperscript\normalsuperscript{} error % so we add an empty group here {}\normalsuperscript { \xmldoifelse {#1} {/mml:degree} { \edef\mmldegree{\xmlfirst{#1}{/mml:degree/mml:cn}} \ifx\mmldegree\empty % what to do here \else \dorecurse\mmldegree\prime \fi } { \prime } } } \stopxmlsetups \startxmlsetups mml:partialdiff \xmldoifelse {#1} {/mml:list} { {\mr D}\normalsubscript{ \begingroup \setfalse\mmllistdelimiters \xmlall{#1}{/mml:list} \endgroup } \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)} } { \xmldoifelse {#1} {/mml:bvar} { \frac { {\mr d}\normalsuperscript{ \xmldoifelse {#1} {/mml:degree} { \xmlconcat{#1}{/mml:degree}\empty } { \xmlconcat{#1}{/mml:bvar/mml:degree}+ } } \MMLcreset \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)} } { \xmldoif {#1}{/mml:bvar/!mml:degree} { \xmlfirst{#1}{/mml:bvar/!mml:degree} \, } {\mr d}\xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)} \xmldoif {#1} {/mml:bvar/mml:degree} { \normalsuperscript{\xmlfirst{#1}{/mml:bvar/mml:degree}} } } } { \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)} } } \stopxmlsetups \startxmlsetups mml:divergence \mathopnolimits{div} \xmlall{#1}{/!mml:divergence} \stopxmlsetups \startxmlsetups mml:grad \mathopnolimits{grad} \xmlall{#1}{/!mml:grad} \stopxmlsetups \startxmlsetups mml:curl \mathopnolimits{curl} \xmlall{#1}{/!mml:curl} \stopxmlsetups \startxmlsetups mml:laplacian \nabla\normalsuperscript2 \xmlall{#1}{/!mml:laplacian} \stopxmlsetups \startxmlsetups mml:ident \mathopnolimits{identity} \xmlall{#1}{/!mml:ident} \stopxmlsetups \setupMMLappearance[domain] [symbol=] \setupMMLappearance[codomain][symbol=] \startxmlsetups mml:domain \doifelsenothing \MMLdomainsymbol { \mathopnolimits{domain}\MMLcreset\xmlall{#1}{/!mml:domain} } { \MMLdomainsymbol\normalsubscript{\xmlall{#1}{/!mml:domain}} } \stopxmlsetups \startxmlsetups mml:codomain \doifelsenothing \MMLcodomainsymbol { \mathopnolimits{codomain}\MMLcreset\xmlall{#1}{/!mml:codomain} } { \MMLcodomainsymbol\normalsubscript{\xmlall{#1}{/!mml:codomain}} } \stopxmlsetups % theory of sets \startxmlsetups mml:set \left\{ \xmldoifelse {#1} {/mml:condition} { \xmlfirst{#1}{/mml:bvar}\,\middle\vert\,\xmlfirst{#1}{/mml:condition} } { \xmlconcat{#1}{/!mml:set}{\MMLseparator,} } \right\} \relax % needed \stopxmlsetups \settrue\mmllistdelimiters \startxmlsetups mml:list \begingroup \ifconditional\mmllistdelimiters\left [\fi \begingroup \settrue\mmllistdelimiters \xmlconcat{#1}{/!mml:list}{\MMLseparator,} \endgroup \ifconditional\mmllistdelimiters\right]\fi \endgroup \stopxmlsetups \startxmlsetups mml:union \mmlsecond{#1} \cup \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:intersect \mmlsecond{#1} \cap \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:in \mmlsecond{#1} \in \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:notin \mmlsecond{#1} {\not\in} \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:subset \mmlsecond{#1} \subset \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:prsubset \mmlsecond{#1} \subseteq \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:notsubset \mmlsecond{#1} {\not\subset} \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:notprsubset \mmlsecond{#1} {\not\subseteq} \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:setdiff \mmlsecond{#1} \setminus \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:card \left\vert \xmlall{#1}{/!mml:card} \right\vert \stopxmlsetups \startxmlsetups mml:cartesianproduct \xmlconcat{#1}{/!mml:cartesianproduct}{\times} \stopxmlsetups % sequences and series \setupMMLappearance[sum] [\c!location=\v!top] \setupMMLappearance[product][\c!location=\v!top] \xmlmapvalue {mml:sumprod} {sum} {\sum} \xmlmapvalue {mml:sumprod} {product} {\prod} \startxmlsetups mml:sum \edef\mmlsumprodname{sum} \xmlsetup{#1}{mml:sumprod} \stopxmlsetups \startxmlsetups mml:product \edef\mmlsumprodname{product} \xmlsetup{#1}{mml:sumprod} \stopxmlsetups \def\mmlstackedsubscripts#1% {\vbox {\baselineskip\zeropoint % hack, taco vragen \halign{\startimath\scriptstyle\hss\alignmark\alignmark\hss\stopimath\cr#1\crcr}}} % unfinished \startxmlsetups mml:sumprod \begingroup \xmldoifelse {#1} {/(mml:condition\string|mml:bvar\string|mml:lowlimit)} { \def\mmlsumprodlower{ \normalsubscript{ \xmldoifelse {#1} {/mml:condition} { \mmlstackedsubscripts{\xmlconcat{#1}{/mml:condition}{\crcr}} } { \xmldoif {#1} {/mml:bvar} { \xmlfirst{#1}{/mml:bvar} \xmldoif{#1}{/mml:lowlimit}{=} } \xmlfirst{#1}{/mml:lowlimit} } } } } { \let\mmlsumprodlower\empty } \xmldoifelse {#1} {/mml:uplimit} { \def\mmlsumprodupper{\normalsuperscript{\xmlfirst{#1}{/mml:uplimit}}} } { \let\mmlsumprodupper\empty } \xmldoif {#1} {/mml:interval} { % open math converter gives this \edef\mmlintervalfrom{\xmlindex{#1}{/mml:interval}{1}} \edef\mmlintervalto {\xmlindex{#1}{/mml:interval}{2}} \ifx \mmlintervalfrom \empty \else \def\mmlsumprodlower{\normalsubscript{\xmldoif{#1}{/mml:bvar}{\xmlfirst{#1}{/mml:bvar}{=}}\mmlintervalfrom}} \fi \ifx \mmlintervalto \empty \else \def\mmlsumprodupper{\normalsuperscript{\mmlintervalto}} \fi } \MMLcreset \xmlval{mml:sumprod}{\mmlsumprodname}{}\doMMLlimits\mmlsumprodname\mmlsumprodupper\mmlsumprodlower \MMLcreset \xmldoifelse {#1} {/mml:lambda/mml:apply} { \xmlfirst{#1}{/mml:lambda/mml:apply}% a bit of open math conversion mess } { \xmlfirst{#1}{/(mml:apply\string|mml:lambda\string|mml:ci)}% } \endgroup \stopxmlsetups \setupMMLappearance[limit][\c!location=\v!top] \startxmlsetups mml:limit \MMLcreset \lim \doMMLlimits {limit}\normalsubscript{ \MMLcreset \xmldoifelse {#1} {/mml:condition} { \xmlfirst{#1}{/mml:condition} } { \xmldoif {#1} {/mml:bvar} { \xmlfirst{#1}{/mml:bvar}\rightarrow } \xmlfirst{#1}{/mml:lowlimit} } } \begingroup % a bit of open math conversion mess, lambda needed for openmath, ok? \MMLcreset \xmlfirst{#1}{/mml:lambda/mml:apply} \xmlfirst{#1}{/(mml:apply\string|mml:lambda)} \endgroup \stopxmlsetups % consider a faster index \startxmlsetups mml:tendsto \MMLcreset \mmlsecond{#1} \xmlval {mml:tendsto:type} {\xmlattdef{#1}{type}{default}} {\rightarrow} \MMLcreset \mmlthird{#1} \stopxmlsetups \xmlmapvalue {mml:tendsto:type} {above} {\downarrow} \xmlmapvalue {mml:tendsto:type} {below} {\uparrow} \xmlmapvalue {mml:tendsto:type} {default} {\rightarrow} % elementary classical functions \setupMMLappearance[log][\c!location=\v!right] \startxmlsetups mml:exp % {\mr e}\normalsuperscript{\xmlfirst{#1}{/mml:apply\string|mml:reln\string|mml:ci\string|mml:cn}} {\mr e}\normalsuperscript{\xmlfirst{#1}{/!mml:exp}} \stopxmlsetups \startxmlsetups mml:log \xmldoifelse {#1} {/mml:logbase} { \doifelse \MMLloglocation \v!left { \mathop { {}\normalsuperscript{\xmlfirst{#1}{/mml:logbase}}\negthinspace\mathopnolimits{log} } } { \mathopnolimits{log}\normalsubscript{\xmlfirst{#1}{/mml:logbase}} } % \MMLcreset \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)} % \xmlsetup{#1}{mml:function} % todo, we start elsewhere % \mmlthird{#1} } { \mathopnolimits{log} % \MMLcreset % \xmlsetup{#1}{mml:function} % todo, we start elsewhere \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)} % \mmlsecond{#1} } \stopxmlsetups \startxmlsetups mml:ln \mathopnolimits{ln} \xmlsetup{#1}{mml:function} \stopxmlsetups % statistics \startxmlsetups mml:mean \overline {\mmlsecond{#1}} \stopxmlsetups \startxmlsetups mml:sdev \sigma \left(\MMLcreset\mmlsecond{#1}\right) \stopxmlsetups \startxmlsetups mml:variance \sigma \left(\MMLcreset\mmlsecond{#1}\right)\normalsuperscript2 \stopxmlsetups \startxmlsetups mml:median \mathopnolimits{median}\left(\MMLcreset\mmlsecond{#1}\right) \stopxmlsetups \startxmlsetups mml:mode \mathopnolimits{mode} \left(\MMLcreset\mmlsecond{#1}\right) \stopxmlsetups % moments \startxmlsetups mml:moment \left\langle \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)}\normalsuperscript{\xmlfirst{#1}{/mml:degree}} \right\rangle \xmldoif {#1} {mml:momentabout} { \normalsubscript{\xmlfirst{#1}{mml:momentabout}} } \stopxmlsetups % linear algebra \setupMMLappearance [vector] [\c!direction=\v!horizontal,\c!separator={,}] \startxmlsetups mml:vector \begingroup \ifnum\xmlcount{#1}{/*}>\plusone \doifelse\MMLvectordirection\v!horizontal { \left(\xmlconcat{#1}{/*}{\MMLseparator\MMLvectorseparator}\right) } { \MMLcreset\left(\matrix{\xmlconcat{#1}{/*}{\MMLseparator\MMLvectorseparator}}\right) } \else \overrightarrow{\charhtstrut\mmlfirst{#1}} \fi \endgroup \stopxmlsetups \settrue\MMCdelmatrix % ( ) when true \startxmlsetups mml:matrix \begingroup \MMLcreset \ifconditional\MMCdelmatrix \left(\matrix{\xmlcommand{#1}{/mml:matrixrow}{mml:matrixrow:do}}\right) \else \settrue\MMCdelmatrix \matrix{\xmlcommand{#1}{/mml:matrixrow}{mml:matrixrow:do}} \fi \endgroup \stopxmlsetups \startxmlsetups mml:matrixrow \begingroup \MMLcreset \left(\xmlsetup{#1}{mml:matrixrow:do}\right) \endgroup \stopxmlsetups \startxmlsetups mml:matrixrow:do \xmlconcat{#1}{/*}{&}\crcr \stopxmlsetups \startxmlsetups mml:determinant \begingroup \setfalse\MMCdelmatrix \left|\mmlsecond{#1}\right| \endgroup \stopxmlsetups \startxmlsetups mml:transpose \mmlsecond{#1}\normalsuperscript{\mathopnolimits{T}} \stopxmlsetups \startxmlsetups mml:selector \MMLmathinner{\mmlsecond{#1}\normalsubscript{\MMLcreset\xmlconcatrange{#1}{/*}{3}{}{\MMLseparator,}}} \stopxmlsetups \startxmlsetups mml:vectorproduct \mmlsecond{#1}\times \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:scalarproduct \mmlsecond{#1}\cdot \mmlthird{#1} \stopxmlsetups \startxmlsetups mml:outerproduct \mmlsecond{#1}\otimes\mmlthird{#1} \stopxmlsetups % semantic mapping elements \setupMMLappearance[semantics][\c!state=\v!start] \startxmlsetups mml:semantics \doifelse\MMLsemanticsstate\v!start { \xmlall{#1}{/mml:annotation} } { \xmlall{#1}{/!mml:annotation} } \stopxmlsetups \startxmlsetups mml:annotation \xmldoifelse {#1} {.[oneof(@encoding,'TeX','tex','TEX','ConTeXt','context','CONTEXT','ctx')]} { \xmlflushcontext{#1} } { \xmldoifelse {#1} {.[oneof(@encoding,'calcmath','cm')]} { \expanded{\calcmath{\xmlflush{#1}}} } { \xmldoifelse {#1} {.[oneof(@encoding,'asciimath','am')]} { \ifdefined\asciimath \expanded{\asciimath{\xmlflush{#1}}} \else \hbox{\tt no am loaded} \fi } { \xmlall{#1}{../!mml:annotation} } } } \stopxmlsetups \startxmlsetups mml:annotation-xml % maybe diagnostics \stopxmlsetups % misc \startxmlsetups mml:integers \integers \stopxmlsetups \startxmlsetups mml:reals \reals \stopxmlsetups \startxmlsetups mml:rationals \rationals \stopxmlsetups \startxmlsetups mml:naturalnumbers \naturalnumbers \stopxmlsetups \startxmlsetups mml:complexes \complexes \stopxmlsetups \startxmlsetups mml:primes \primes \stopxmlsetups \startxmlsetups mml:exponentiale \mathopnolimits{e} \stopxmlsetups \startxmlsetups mml:imaginaryi \mathopnolimits{i} \stopxmlsetups \startxmlsetups mml:notanumber \mathopnolimits{NaN} \stopxmlsetups \startxmlsetups mml:true \mathopnolimits{true} \stopxmlsetups \startxmlsetups mml:false \mathopnolimits{false} \stopxmlsetups \startxmlsetups mml:emptyset \mathopnolimits{\O} \stopxmlsetups \startxmlsetups mml:pi \pi \stopxmlsetups \startxmlsetups mml:eulergamma \gamma \stopxmlsetups \startxmlsetups mml:infinity \infty \stopxmlsetups % gonio functions \setupMMLappearance[function][\c!reduction=\v!yes] % todo: \mfunction which adapts itself when registered as command % todo: \def\mmlcfunction#1#2{\mathopnolimits{#2}\xmlsetup{#1}{mml:function}} \startxmlsetups mml:sin \mathcommand {sin}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:sinh \mathcommand {sinh}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:cos \mathcommand {cos}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:cosh \mathcommand {cosh}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:tan \mathcommand {tan}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:tanh \mathcommand {tanh}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:cot \mathcommand {cot}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:coth \mathcommand {coth}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:csc \mathcommand {csc}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:csch \mathcommand {csch}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:sec \mathcommand {sec}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:sech \mathcommand {sech}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arcsin \mathcommand {arcsin}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arcsinh \mathcommand{arcsinh}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arccos \mathcommand {arccos}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arccosh \mathcommand{arccosh}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arctan \mathcommand {arctan}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arctanh \mathcommand{arctanh}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arccot \mathcommand {arccot}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arccoth \mathcommand{arccoth}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arccsc \mathcommand {arccsc}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arccsch \mathcommand{arccsch}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arcsec \mathcommand {arcsec}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:arcsech \mathcommand{arcsech}\xmlsetup{#1}{mml:function} \stopxmlsetups \startxmlsetups mml:function \ifx\MMLpowerelement\empty \ifconditional\xmlinversefunction\normalsuperscript{-1}\fi \setfalse\xmlinversefunction \else \normalsuperscript{\ifconditional\xmlinversefunction-\fi\MMLpowerelement} \setfalse\xmlinversefunction \glet\MMLpowerelement\empty \fi \xmlsetup{#1}{mml:function:argument} \stopxmlsetups \startxmlsetups mml:function:argument \doifelse \MMLfunctionreduction \v!yes { \xmldoifelse {#1} {/mml:apply} { \xmldoifelse {#1} {/mml:apply/(\MMLcfunctionlist\string|mml:divide)} \donefalse \donetrue } { \donefalse } } { \donetrue } % beware, we still flush from 2 up \ifdone \left( \MMLcreset \xmlall{#1}{/[position()>1]}% \xmlconcatrange{#1}{/*}{2}{}\empty \right) \else \MMLcreset \xmlall{#1}{/[position()>1]} \fi \stopxmlsetups % PRESENTATION MATHML % % there are some rough edges that need to be sorted out % helpers \xmlmapvalue {mml} {normal} {\tf} \xmlmapvalue {mml} {double-struck} {\bf} \xmlmapvalue {mml} {italic} {\it} \xmlmapvalue {mml} {fraktur} {\bf} \xmlmapvalue {mml} {script} {\tf} \xmlmapvalue {mml} {bold} {\bf} \xmlmapvalue {mml} {bold-italic} {\bi} \xmlmapvalue {mml} {bold-fraktur} {\bf} \xmlmapvalue {mml} {bold-script} {\bf} \xmlmapvalue {mml} {sans-serif} {\ss} \xmlmapvalue {mml} {bold-sans-serif} {\ss\bf} \xmlmapvalue {mml} {sans-serif-italic} {\ss\it} \xmlmapvalue {mml} {sans-serif-bold-italic} {\ss\bi} \xmlmapvalue {mml} {monospace} {\tt} % todo: displaystyle=true/false (or whatever else shows up) \starttexdefinition setmmlmathstyle #1 \xmlval {mml} {\xmlatt{#1}{mathvariant}} \empty % was: \mmmr \stoptexdefinition \starttexdefinition applymmlmathcolor #1#2 \edef\mmlmathcolor{\xmlatt{#1}{mathcolor}} \ifx \mmlmathcolor \empty #2 \else \color[\mmlmathcolor]{#2} \fi \stoptexdefinition % todo: textbackgrounds \starttexdefinition applymmlmathbackground #1#2 \edef\mmlmathbackground{\xmlatt{#1}{mathbackground}} \ifx \mmlmathbackground \empty #2 \else \backgroundline[\mmlmathbackground]{#2} \fi \stoptexdefinition \newsignal\mmltextsignal % not used \starttexdefinition applymmlsometext #1#2 \applymmlmathbackground {#1} { \applymmlmathcolor {#1} { \setmmlmathstyle {#1} #2 } } \stoptexdefinition % probably bugged: \starttexdefinition doMMLfiller #1 \pushmacro\doMMLfiller \let\doMMLfiller\gobbleoneargument \gdef\dodoMMLfiller{% where used \disablefiller \mathematics{#1} } \hbox { \def\normalorfiller##1##2{ \gdef\dodoMMLfiller{\enablefiller#1}% \let\normalorfiller\gobbletwoarguments } \mathematics{#1} } \popmacro\doMMLfiller \stoptexdefinition % setups \startxmlsetups mml:mi % todo: mathvariant mathsize mathcolor mathbackground \ctxmodulemathml{mi("#1")} \stopxmlsetups \startxmlsetups mml:mn % todo: mathvariant mathsize mathcolor mathbackground % \begingroup % \mr \ctxmodulemathml{mn("#1")}% no \hbox, would be ok for . , but spoils rest % \endgroup \stopxmlsetups % -2 and 1-2 % % spacing between - and 2 is taken care of by tex itself \startxmlsetups mml:mo \doif {\xmlatt{#1}{maxsize}} {1} {\settrue\mmlignoredelimiter} \doif {\xmlatt{#1}{stretchy}} {false} {\settrue\mmlignoredelimiter} \ctxmodulemathml{mo("#1")} \setfalse\mmlignoredelimiter \stopxmlsetups \startxmlsetups mml:mfenced % {} around separator is needed for spacing \def\MMLleft {\left }% weird \def\MMLright {\right} \def\MMLmiddle{\middle} \ctxmodulemathml{mfenced("#1")} \stopxmlsetups \defineoverlay [mml:enclose:box] [\useMPgraphic{mml:enclose:box}] \defineoverlay [mml:enclose:roundedbox] [\useMPgraphic{mml:enclose:roundedbox}] \defineoverlay [mml:enclose:circle] [\useMPgraphic{mml:enclose:circle}] \defineoverlay [mml:enclose:left] [\useMPgraphic{mml:enclose:left}] \defineoverlay [mml:enclose:right] [\useMPgraphic{mml:enclose:right}] \defineoverlay [mml:enclose:top] [\useMPgraphic{mml:enclose:top}] \defineoverlay [mml:enclose:bottom] [\useMPgraphic{mml:enclose:bottom}] \defineoverlay [mml:enclose:updiagonalstrike] [\useMPgraphic{mml:enclose:updiagonalstrike}] \defineoverlay [mml:enclose:downdiagonalstrike] [\useMPgraphic{mml:enclose:downdiagonalstrike}] \defineoverlay [mml:enclose:horizontalstrike] [\useMPgraphic{mml:enclose:horizontalstrike}] \defineoverlay [mml:enclose:verticalstrike] [\useMPgraphic{mml:enclose:verticalstrike}] \startuseMPgraphic{mml:enclose:box} draw OverlayBox withpen pencircle scaled (ExHeight/10) ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:roundedbox} draw OverlayBox cornered .5ExHeight withpen pencircle scaled (ExHeight/10) ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:circle} draw fullcircle xysized(bbwidth(OverlayBox),bbheight(OverlayBox)) withpen pencircle scaled (ExHeight/10) ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:left} draw leftboundary OverlayBox withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:right} draw rightboundary OverlayBox withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:top} draw topboundary OverlayBox withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:bottom} draw bottomboundary OverlayBox withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:updiagonalstrike} path p ; p := OverlayBox enlarged -.25ExHeight ; draw llcorner p -- urcorner p withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:downdiagonalstrike} path p ; p := OverlayBox enlarged -.25ExHeight ; draw ulcorner p -- lrcorner p withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:horizontalstrike} path p ; p := OverlayBox enlarged -.25ExHeight ; draw .5[llcorner p,ulcorner p] -- .5[lrcorner p,urcorner p] withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startuseMPgraphic{mml:enclose:verticalstrike} path p ; p := OverlayBox enlarged -.25ExHeight ; draw .5[llcorner p,lrcorner p] -- .5[ulcorner p,urcorner p] withpen pencircle scaled (ExHeight/10) ; setbounds currentpicture to OverlayBox ; \stopuseMPgraphic \startxmlsetups mml:menclose \edef\mmlmenclosenotation{\ctxmodulemathml{menclosepattern("#1")}} \ifx\mmlmenclosenotation\empty \xmlflush{#1} \else \doifelse \mmlmenclosenotation {mml:enclose:longdiv} { \overline{\left)\strut\xmlflush{#1}\right.} } { \doifelse \mmlmenclosenotation {mml:enclose:actuarial} { \overline{\left.\strut\xmlflush{#1}\right|} } { \doifelse \mmlmenclosenotation {mml:enclose:radical} { \sqrt{\xmlflush{#1}} } { % todo: no framed when longdiv, actuarial or radical ? spec ? \vcenter { \framed [frame=off,strut=no,background={\mmlmenclosenotation}] % offset is kind of undefined {\startimath \expanded{\doifinsetelse {mml:enclose:longdiv} {\mmlmenclosenotation}} { \overline{\left)\strut\xmlflush{#1}\right.} } { \expanded{\doifinsetelse {mml:enclose:actuarial} {\mmlmenclosenotation}} { \overline{\left.\strut\xmlflush{#1}\right|} } { \expanded{\doifinsetelse {mml:enclose:radical} {\mmlmenclosenotation}} { \sqrt{\xmlflush{#1}} } { \xmlflush{#1} } } } \stopimath} } } } } \fi \stopxmlsetups \xmlmapvalue {mml:mfrac:linethickness} {thin} {.2pt} \xmlmapvalue {mml:mfrac:linethickness} {medium} {.4pt} \xmlmapvalue {mml:mfrac:linethickness} {thick} {.8pt} \xmlmapvalue {mml:mfrac:linethickness} {0} {0pt} \startxmlsetups mml:mfrac % dodo: handle linethickness in lua + unit \begingroup \edef\mmlfraclinethickness{\xmlatt{#1}{linethickness}} \ifx\mmlfraclinethickness\empty \doifelse{\xmlatt{#1}{bevelled}}{true} { \left.\mmlfirst{#1}\middle/\mmlsecond{#1}\right.% \thinspace\middle/\thinspace } { \frac{\mmlfirst{#1}}{\mmlsecond{#1}} } \else \doifelse {\xmlval{mml:mfrac:linethickness}{\mmlfraclinethickness}{}} {} { \scratchdimen\xmlval{mml:mfrac:linethickness}\mmlfraclinethickness{.4pt} } { % probably not yet ok \setdimensionwithunit\scratchdimen\mmlfraclinethickness{pt} } { {\mmlfirst{#1}} \above\scratchdimen {\mmlsecond{#1}} } \fi \endgroup \stopxmlsetups \startxmlsetups mml:ms \hbox { \tf % else encoding problems \edef\mmllquote{\xmlatt{#1}{lquote}} \edef\mmlrquote{\xmlatt{#1}{rquote}} \ifx\mmllquote\empty\symbol[leftquotation]\else\mmllquote\fi \applymmlsometext{#1}{\xmlflush{#1}} \ifx\mmlrquote\empty\symbol[rightquotation]\else\mmlrquote\fi } \stopxmlsetups \startxmlsetups mml:mstyle \begingroup \setmmlmathstyle{#1} \xmlflush{#1} \endgroup \stopxmlsetups \setupMMLappearance[text][\c!alternative=\v!b] % a=normal, b=keep spaces \startxmlsetups mml:mtext \text { \applymmlsometext{#1}{ \doifelse \MMLtextalternative \v!a { %\ctxmodulemathml{stripped(\!!bs\xmlflush{#1}\!!es)} \ignorespaces \xmlflush{#1} \removeunwantedspaces } { \xmlflush{#1} } } } \stopxmlsetups \startxmlsetups mml:merror \hbox{\startimath\displaystyle\xmlflush{#1}\stopimath} \stopxmlsetups \startxmlsetups mml:mphantom % \phantom{\ignorespaces{}\xmlflush{#1}\unskip} % watch spacing {} hack % \phantom{\mathstyle{\ignorespaces{}\xmlflush{#1}\unskip}}% \phantom{\triggermathstyle\normalmathstyle\ignorespaces\xmlflush{#1}\removeunwantedspaces} % \mktriggereffect\v!hidden % \ignorespaces{}\xmlflush{#1}\unskip % no attributes in math yet % \mktriggereffect\v!normal \stopxmlsetups \startxmlsetups mml:mpadded % todo \xmlflush{#1} \stopxmlsetups % mrow / option: no fenced \startxmlsetups mml:maction \xmlflush{#1} \stopxmlsetups % \startxmlsetups mml:mrow % \begingroup % \edef\nofmmlrows{\xmlcount{#1}{/mml:mo}}% % \ifnum\nofmmlrows=\plustwo % \xmldoifelse {#1} {/mml:mo[position()==1 or position()==\nofmmlrows]} {% we need a {} % \def\MMLleft {\left } % \def\MMLright {\right} % \def\MMLmiddle{\middle} % \enabledelimiter % \checkdelimiters{\xmlall{#1}{/mml:mo}} % \fakeleftdelimiter % \xmlflush{#1} % \fakerightdelimiter % \disabledelimiter % } { % \xmlflush{#1} % } % \else % \xmlflush{#1} % \fi % \endgroup % \stopxmlsetups % % fails on { ... so we need \startxmlsetups mml:mrow \begingroup \xmldoifelse {#1} {/mml:mo[first() or last()]} {% we need a {} \def\MMLleft {\left } \def\MMLright {\right} \def\MMLmiddle{\middle} \enabledelimiter \checkdelimiters{\xmlall{#1}{/mml:mo}} \fakeleftdelimiter \xmlflush{#1} \fakerightdelimiter \disabledelimiter } { \xmlflush{#1} } \endgroup \stopxmlsetups \startxmlsetups mml:msqrt \sqrt{\xmlflush{#1}} \stopxmlsetups \startxmlsetups mml:mroot \root{\mmlsecond{#1}}\of{\mmlfirst{#1}} \stopxmlsetups \setupMMLappearance[scripts][\c!alternative=\v!a] % {} rond base % brrr no { } when limop .. todo: better in lua % speed up with ifx and setups or just in lua \startxmlsetups mml:msub \edef\mmlnucleus{\xmlraw{#1}{/mml:*[1]}} \doifelse {\utfmathclass\mmlnucleus} {limop} { \mmlfirst{#1} \normalsubscript{\mmlsecond{#1}} } { \doifelse\MMLscriptsalternative\v!a { {\mmlfirst{#1}}\normalsubscript{\mmlsecond{#1}} } { \mmlfirst{#1} \normalsubscript{\mmlsecond{#1}} } } \stopxmlsetups \startxmlsetups mml:msup \edef\mmlnucleus{\xmlraw{#1}{/mml:*[1]}} \doifelse {\utfmathclass\mmlnucleus} {limop} { \mmlfirst{#1} \normalsuperscript{\mmlsecond{#1}} } { \doifelse\MMLscriptsalternative\v!a { {\mmlfirst{#1}}\normalsuperscript{\mmlsecond{#1}} } { \mmlfirst{#1} \normalsuperscript{\mmlsecond{#1}} } } \stopxmlsetups \startxmlsetups mml:msubsup \edef\mmlnucleus{\xmlraw{#1}{/mml:*[1]}} \doifelse {\utfmathclass\mmlnucleus} {limop} { \mmlfirst{#1}\normalsubscript{\mmlsecond{#1}}\normalsuperscript{\mmlthird{#1}} } { \doifelse\MMLscriptsalternative\v!a { {\mmlfirst{#1}}\normalsubscript{\mmlsecond{#1}}\normalsuperscript{\mmlthird{#1}} } { \mmlfirst{#1}\normalsubscript{\mmlsecond{#1}}\normalsuperscript{\mmlthird{#1}} } } \stopxmlsetups \unexpanded\def\mmlexecuteifdefined#1% {\ifx#1\empty \expandafter\secondoftwoarguments \else\ifcsname#1\endcsname \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi {\csname#1\endcsname}} \startxmlsetups mml:mover \edef\mmlovertoken{\xmlraw{#1}{/mml:*[2]}} \doifelseutfmathaccentfiltered\mmlovertoken{topaccent} {% not ok \edef\mmlovercommand{\utfmathcommandfiltered\mmlovertoken{topaccent}} \mmlexecuteifdefined\mmlovercommand\mathematics{\mmlfirst{#1}} } { \edef\mmlbasetoken{\xmlraw{#1}{/mml:*[1]}} \edef\mmlbasecommand{\utfmathfiller\mmlbasetoken} \edef\mmlovercommand{\utfmathfiller\mmlovertoken} \vbox { \mathsurround\zeropoint \ialign { \hss$\alignmark\alignmark$\hss \crcr \noalign{\kern3\onepoint}% \mmlexecuteifdefined\mmlovercommand{\mmlsecond{#1}}{}% extra {} is safeguard \crcr \noalign{\kern3\onepoint\nointerlineskip}% \mmlexecuteifdefined\mmlbasecommand{\mmlfirst{#1}}{}% extra {} is safeguard \crcr } } } % \limits % spoils spacing \stopxmlsetups % messy: (_ \startxmlsetups mml:munder % \mathop { \edef\mmlundertoken{\xmlraw{#1}{/mml:*[2]}} \doifelseutfmathaccentfiltered\mmlundertoken{botaccent} { \edef\mmlundercommand{\utfmathcommandfiltered\mmlundertoken{botaccent}} \mmlexecuteifdefined\mmlundercommand\mathematics{\mmlfirst{#1}} } { \edef\mmlbasetoken {\xmlraw{#1}{/mml:*[1]}} \edef\mmlbasecommand {\utfmathfiller\mmlbasetoken} \edef\mmlundercommand{\utfmathfiller\mmlundertoken} \vtop { \mathsurround\zeropoint \ialign { \hss$##$\hss \crcr \mmlexecuteifdefined\mmlbasecommand {\mmlfirst{#1}} \crcr \noalign{\kern3\onepoint\nointerlineskip}% \mmlexecuteifdefined\mmlundercommand{\mmlsecond{#1}} \crcr \noalign{\kern3\onepoint} } } } % } % \limits % spoils spacing \stopxmlsetups \startxmlsetups mml:munderover \edef\mmlbasetoken{\xmlraw{#1}{/mml:*[1]}} \edef\mmlbasecommand{\utfmathcommand\mmlbasetoken} \mmlexecuteifdefined\mmlbasecommand{\mathematics{\mmlfirst{#1}}}\normalsubscript{\mmlsecond{#1}}\normalsuperscript{\mmlthird{#1}} \stopxmlsetups % tables (mml:mtable, mml:mtr, mml:mlabledtr, mml:mtd) \startxmlsetups mml:mtable % some more attributes need to be supported \vcenter{\ctxmodulemathml{mtable("#1")}} \stopxmlsetups \startxmlsetups mml:mcolumn \ctxmodulemathml{mcolumn("#1")} \stopxmlsetups \def\mmlsetfakewidth#1{\setbox\scratchbox\hbox{#1}\scratchdimen\wd\scratchbox} \def\mmlmcolumndigitspace {\mmlsetfakewidth {0}\kern\scratchdimen} \def\mmlmcolumndigitrule {\mmlsetfakewidth {0}\vrule width \scratchdimen height .2pt depth .2pt\relax} \def\mmlmcolumnsymbolrule {\mmlsetfakewidth{\times}\vrule width \scratchdimen height .2pt depth .2pt\relax} \def\mmlmcolumnpunctuationrule{\mmlsetfakewidth {.}\vrule width \scratchdimen height .2pt depth .2pt\relax} \startxmlsetups mml:mspace \begingroup \edef\mmlspacetext{\xmlatt{#1}{spacing}} \ifx\mmlspacetext\empty \!!widtha \xmlattdef{#1}{width} \!!zeropoint % must be string \!!heighta\xmlattdef{#1}{height}\!!zeropoint \!!deptha \xmlattdef{#1}{depth} \!!zeropoint \ifdim\!!heighta=\zeropoint \ifdim\!!deptha=\zeropoint\else \hbox{\vrule\s!depth\!!deptha\s!height\zeropoint\s!width\zeropoint}% \fi \else \hbox{\vrule\s!depth\zeropoint\s!height\!!heighta\s!width\zeropoint}% \fi \ifdim\!!widtha=\zeropoint\else \hskip\!!widtha \fi \else \phantom{\triggermathstyle\normalmathstyle\mmlspacetext} \fi \endgroup \stopxmlsetups % later we can do a better job by manipulating node lists % \startxmlsetups mml:mline % % new, rather undefined, we need to capture a few keywords % \edef\mmllinewidth {\xmlatt{#1}{linethickness}} % \edef\mmllinetext {\xmlatt{#1}{spacing}} % \edef\mmllinelength{\xmlattdef{#1}{length}\!!zeropoint} % \ifx\mmllinewidth\empty % \!!deptha.5\linewidth % \else % \!!deptha.5\dimexpr\mmllinewidth\relax % \fi % \!!heighta\!!deptha % \ifx\mmllinetext\empty % \ifx\mmllinelength\empty % \!!widtha\zeropoint % \else % \!!widtha\mmllinelength % \fi % \else % \setbox\scratchbox\hbox{\mathematics{\mathstyle{\mmllinetext}}}% not ok % \!!widtha\wd\scratchbox % \fi % \hbox{\vrule\s!width\!!widtha\s!depth\!!deptha\s!height\!!heighta} % \stopxmlsetups \startxmlsetups mml:mglyph % probably never ok (hbox is needed in order to switch to normal font) \begingroup \edef\mmlglyphfontfamily{\xmlatt {#1}{fontfamily}} \edef\mmlglyphalt {\xmlattdef{#1}{alt}{unknown}} \edef\mmlglyphindex {\xmlatt {#1}{index}} \ifx \mmlglyphfontfamily \empty \hbox{\tttf[no fontfamily specified for \mmlglyphalt]} \else\ifx\mmlglyphindex\empty \hbox{\tttf[no index specified for \mmlglyphalt]} \else \hbox{\getglyph\mmlglyphfontfamily\mmlglyphindex} \fi\fi \endgroup \stopxmlsetups \startxmlsetups mml:maligngroup \stopxmlsetups % will be done when needed \startxmlsetups mml:malignmark \stopxmlsetups % will be done when needed \startxmlsetups mml:none \stopxmlsetups \startxmlsetups mml:mprescripts \stopxmlsetups \startxmlsetups mml:mmultiscripts \ctxmodulemathml{mmultiscripts("#1")} \stopxmlsetups % goodie \definebuffer[mml] \def\stopmml{\xmlprocessbuffer{@mml@}{\thedefinedbuffer{mml}}{}} \stopmodule \protect \endinput % TODO: % % % % b % b % a % % % bb % b % a % % % \startmoduletestsection % % \def\xflushXMLstackwith#1#2#3#4% num bgroup egroup whatever % {\dostepwiserecurse{#1}\XMLstacklevel\plusone % {#2\relax % \ifnum\recurselevel>#1\relax#4\fi % \getXMLstackdata\recurselevel % #3}} % % \def\xflushXMLstackfrom#1#2#3% % {\dostepwiserecurse{#1}\XMLstacklevel\plusone % {#2\getXMLstackdata\recurselevel#3}} % % \startxmlsetups mml:minus % \doif \MMLsignreduction \v!yes { % \setMMLcreset{fn,\MMLcfunctionlist} % } % \ifcase\XMLstacklevel % \or % % self % \or % -\getXMLstackdata\plustwo % \else % \dostepwiserecurse \plustwo \XMLstacklevel \plusone { % \begingroup % \doifelse {\getXMLstackname\recurselevel} {apply} { % \ifnum\recurselevel=\plustwo % \begingroup % \dodoifelseMMCfunctioninapply \recurselevel {minus} { % \ifnum\XMLstacklevel>\plustwo % \endgroup % \else % \endgroup % \MMLcreset % \fi % } { % \endgroup % } % \else % \doifelseMMCfunctioninapply \recurselevel {\MMLcfunctionlist,\MMLcconstructlist} { % \MMLcreset % } { % } % \fi % } { % } % \getXMLstackdata\recurselevel % \ifnum\recurselevel<\XMLstacklevel\relax % - % \fi % \endgroup % } % \fi % \stopxmlsetups % % \stopmoduletestsection context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mea.mkii0000644000175000017500000002705111571377075024271 0ustar norbertnorbert% filtered from html files by Patrick Ion % % ISOAMSA Characters Extended % % Added Math Symbols: Arrow Relations \defineMMLentity angzarr E248 {unknown} angle with down zig-zag arrow \defineMMLentity cirmid E250 {unknown} circle, mid below \defineMMLentity cudarrl E23E {unknown} left, curved, down arrow \defineMMLentity cudarrr E400 {unknown} right, curved, down arrow \defineMMLentity cularr 21B6 {unknown} left curved arrow \defineMMLentity cularrp E24A {unknown} curved left arrow with plus \defineMMLentity curarr 21B7 {unknown} right curved arrow \defineMMLentity curarrm E249 {unknown} curved right arrow with minus \defineMMLentity Darr 21A1 {unknown} down two-headed arrow \defineMMLentity dArr 21D3 {\Downarrow} down double arrow \defineMMLentity ddarr 21CA {unknown} two down arrows \defineMMLentity DDotrahd E238 {unknown} right arrow with dotted stem \defineMMLentity dfisht E24C {unknown} down fish tail \defineMMLentity dHar E227 {unknown} down harpoon-left, down harpoon-right \defineMMLentity dharl 21C3 {unknown} down harpoon-left \defineMMLentity dharr 21C2 {unknown} down harpoon-rt \defineMMLentity duarr E216 {unknown} down arrow, up arrow \defineMMLentity duhar E217 {unknown} down harp, up harp \defineMMLentity dzigrarr 21DD {unknown} right long zig-zag arrow \defineMMLentity erarr E236 {unknown} equal, right arrow below \defineMMLentity hArr 21D4 {\Leftrightarrow} left and right double arrow \defineMMLentity harr 2194 {\leftrightarrow} left and right arrow \defineMMLentity harrcir E240 {unknown} left and right arrow with a circle \defineMMLentity harrw 21AD {unknown} left and right arr-wavy \defineMMLentity hoarr E243 {unknown} horizontal open arrow \defineMMLentity imof 22B7 {unknown} image of \defineMMLentity lAarr 21DA {unknown} left triple arrow \defineMMLentity Larr 219E {unknown} twoheadleftarrow \defineMMLentity larrbfs E220 {unknown} left arrow-bar, filled square \defineMMLentity larrfs E222 {unknown} left arrow, filled square \defineMMLentity larrhk 21A9 {unknown} left arrow-hooked \defineMMLentity larrlp 21AB {unknown} left arrow-looped \defineMMLentity larrpl E23F {unknown} left arrow, plus \defineMMLentity larrsim E24E {unknown} left arrow, similar \defineMMLentity larrtl 21A2 {unknown} left arrow-tailed \defineMMLentity lAtail E23D {unknown} left double arrow-tail \defineMMLentity latail E23C {unknown} left arrow-tail \defineMMLentity lBarr E206 {unknown} left doubly broken arrow \defineMMLentity lbarr E402 {unknown} left broken arrow \defineMMLentity ldca E21A {unknown} left down curved arrow \defineMMLentity ldrdhar E22C {unknown} left harpoon-down over right harpoon-down \defineMMLentity ldrushar E228 {unknown} left-down-right-up harpoon \defineMMLentity ldsh 21B2 {unknown} left down angled arrow \defineMMLentity lfisht E214 {unknown} left fish tail \defineMMLentity lHar E225 {unknown} left harpoon-up over left harpoon-down \defineMMLentity lhard 21BD {\leftharpoondown} left harpoon-down \defineMMLentity lharu 21BC {\leftharpoonup} left harpoon-up \defineMMLentity lharul E22E {unknown} left harpoon-up over long dash \defineMMLentity llarr 21C7 {unknown} two left arrows \defineMMLentity llhard E231 {unknown} left harpoon-down below long dash \defineMMLentity loarr E242 {unknown} left open arrow \defineMMLentity lrarr 21C6 {unknown} left arr over right arr \defineMMLentity lrhar 21CB {unknown} left harp over r \defineMMLentity lrhard E22F {unknown} right harpoon-down below long dash \defineMMLentity lsh 21B0 {\Lsh} Lsh \defineMMLentity lurdshar E229 {unknown} left-up-right-down harpoon \defineMMLentity luruhar E22B {unknown} left harpoon-up over right harpoon-up \defineMMLentity Map E212 {unknown} twoheaded mapsto \defineMMLentity map 21A6 {\mapsto} mapsto \defineMMLentity midcir E20F {unknown} mid, circle below \defineMMLentity mumap 22B8 {unknown} multimap \defineMMLentity nearhk E20D {unknown} NE arrow-hooked \defineMMLentity neArr 21D7 {unknown} NE pointing double arrow \defineMMLentity nearr 2197 {\nearrow} NE pointing arrow \defineMMLentity nesear E20E {unknown} NE \& SE arrows \defineMMLentity nhArr 21CE {unknown} not left and right double arr \defineMMLentity nharr 21AE {unknown} not left and right arrow \defineMMLentity nlArr 21CD {unknown} not implied by \defineMMLentity nlarr 219A {unknown} not left arrow \defineMMLentity nrArr 21CF {unknown} not implies \defineMMLentity nrarr 219B {unknown} not right arrow \defineMMLentity nrarrc E21D {unknown} not right arrow-curved \defineMMLentity nrarrw E21B {unknown} not right arrow-wavy \defineMMLentity nvhArr* 21CE {unknown} not, vert, left and right double arrow \defineMMLentity nvlArr 21CD {unknown} not, vert, left double arrow \defineMMLentity nvrArr 21CF {unknown} not, vert, right double arrow \defineMMLentity nwarhk E20C {unknown} NW arrow-hooked \defineMMLentity nwArr 21D6 {unknown} NW pointing double arrow \defineMMLentity nwarr 2196 {\nwarrow} NW pointing arrow \defineMMLentity nwnear E211 {unknown} NW \& NE arrows \defineMMLentity olarr 21BA {unknown} left arr in circle \defineMMLentity orarr 21BB {unknown} right arr in circle \defineMMLentity origof 22B6 {unknown} original of \defineMMLentity rAarr 21DB {unknown} right triple arrow \defineMMLentity Rarr 21A0 {unknown} twoheadrightarrow \defineMMLentity rarrap E235 {unknown} approximate, right arrow above \defineMMLentity rarrbfs E221 {unknown} right arrow-bar, filled square \defineMMLentity rarrc E21C {unknown} right arrow-curved \defineMMLentity rarrfs E223 {unknown} right arrow, filled square \defineMMLentity rarrhk 21AA {\hookrightarrow} right arrow-hooked \defineMMLentity rarrlp 21AC {unknown} right arrow-looped \defineMMLentity rarrpl E21E {unknown} right arrow, plus \defineMMLentity rarrsim E24D {unknown} right arrow, similar \defineMMLentity Rarrtl E239 {unknown} right two-headed arrow with tail \defineMMLentity rarrtl 21A3 {unknown} right arrow-tailed \defineMMLentity rarrw 219D {unknown} right arrow-wavy \defineMMLentity rAtail E23B {unknown} right double arrow-tail \defineMMLentity ratail 21A3 {unknown} right arrow-tail \defineMMLentity RBarr E209 {unknown} twoheaded right broken arrow \defineMMLentity rBarr E207 {unknown} right doubly broken arrow \defineMMLentity rbarr E405 {unknown} right broken arrow \defineMMLentity rdca E219 {unknown} right down curved arrow \defineMMLentity rdldhar E22D {unknown} right harpoon-down over left harpoon-down \defineMMLentity rdsh 21B3 {unknown} right down angled arrow \defineMMLentity rfisht E215 {unknown} right fish tail \defineMMLentity rHar E224 {unknown} right harpoon-up over right harpoon-down \defineMMLentity rhard 21C1 {\rightharpoondown} right harpoon-down \defineMMLentity rharu 21C0 {\rightharpoonup} right harpoon-up \defineMMLentity rharul E230 {unknown} right harpoon-up over long dash \defineMMLentity rlarr 21C4 {unknown} right arr over left arr \defineMMLentity rlhar 21CC {unknown} right harp over l \defineMMLentity roarr E241 {unknown} right open arrow \defineMMLentity rrarr 21C9 {unknown} two right arrows \defineMMLentity rsh 21B1 {\Rsh} Rsh \defineMMLentity ruluhar E22A {unknown} right harpoon-up over left harpoon-up \defineMMLentity searhk E20B {unknown} SE arrow-hooked \defineMMLentity seArr 21D8 {unknown} SE pointing double arrow \defineMMLentity searr 2198 {\searrow} SE pointing arrow \defineMMLentity seswar E406 {unknown} SE \& SW arrows \defineMMLentity simrarr E234 {unknown} similar, right arrow below \defineMMLentity slarr E233 {unknown} short left arrow \defineMMLentity srarr E232 {unknown} short right arrow \defineMMLentity swarhk E20A {unknown} SW arrow-hooked \defineMMLentity swArr 21D9 {unknown} SW pointing double arrow \defineMMLentity swarr 2199 {\swarrow} SW pointing arrow \defineMMLentity swnwar E210 {unknown} SW \& NW arrows \defineMMLentity Uarr 219F {unknown} up two-headed arrow \defineMMLentity uArr 21D1 {\Uparrow} up double arrow \defineMMLentity Uarrocir E237 {unknown} up two-headed arrow above circle \defineMMLentity udarr 21C5 {unknown} up arrow, down arrow \defineMMLentity udhar E218 {unknown} up harp, down harp \defineMMLentity ufisht E24B {unknown} up fish tail \defineMMLentity uHar E226 {unknown} up harpoon-left, up harpoon-right \defineMMLentity uharl 21BF {unknown} up harpoon-left \defineMMLentity uharr 21BE {unknown} up harp-r \defineMMLentity uuarr 21C8 {unknown} two up arrows \defineMMLentity vArr 21D5 {\Updownarrow} up \& down double arrow \defineMMLentity varr 2195 {\updownarrow} up \& down arrow \defineMMLentity xhArr E202 {unknown} long left and right double arr \defineMMLentity xharr E203 {unknown} long left and right arr \defineMMLentity xlArr E200 {unknown} long left double arrow \defineMMLentity xlarr E201 {unknown} long left arrow \defineMMLentity xmap E208 {unknown} longmapsto \defineMMLentity xrArr E204 {unknown} long right double arr \defineMMLentity xrarr E205 {unknown} long right arrow \defineMMLentity zigrarr E244 {unknown} right zig-zag arrow context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-art.mkii0000644000175000017500000000145511754241457024270 0ustar norbertnorbert%D \module %D [ file=lang--art, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Artificial Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Artificial Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. % Esperanto \unprotect \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-tst.mkii0000644000175000017500000000241611754241457024323 0ustar norbertnorbert%D \module %D [ file=spec-tst, %D version=2002.12.08, %D title=\CONTEXT\ \PDF\ Macros, %D subtitle=Special Test Macro, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The code is now merged into spec-*.mkii \doifnotmode{demo}{\endinput} \mainlanguage[vn] \enableregime[utf] \usetypescript[all][computer-modern][t5] \setupinteraction [state=start, title={Thử tiếng Việt}, author={Tác Văn Giả}, keyword={Thử tiếng Việt}] \placebookmarks[chapter,section,subsection] \starttext \placelist[chapter,section,subsection][alternative=c] \chapter{Thử tiếng Việt} \section {Mục thứ nhất} \subsection{Mục nhỏ thứ nhất} Thử tiếng Việt \subsection{Mục nhỏ thứ hai} Thử tiếng Việt \section {Mục thứ hai} \subsection{Mục nhỏ thứ nhất} Thử tiếng Việt \subsection{Mục nhỏ thứ hai} Thử tiếng Việt \section {Mục thứ ba} \subsection{Mục nhỏ thứ nhất} Thử tiếng Việt \subsection{Mục nhỏ thứ hai} Thử tiếng Việt \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/m-ipsum.mkiv0000644000175000017500000001221712130411274024146 0ustar norbertnorbert%D \module %D [ file=m-ipsum, %D version=2012.07.19, %D title=\CONTEXT\ Extra Modules, %D subtitle=Ipsum, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 After some discussing on the mailing list I made this example of %D an implementation. Of course there can be alternatives as it's a %D nice exercise in module writing. \startluacode local patterns = lpeg.patterns local variables = interfaces.variables local v_random = variables.random local lowercase = characters.lower local ipsum = { } moduledata.ipsum = ipsum local data = { } local function getfiledata(settings) local filename = settings.filename or "" local filedata = data[filename] if not filedata then local text = resolvers.loadtexfile(filename) or "" local paragraphs = lpeg.match(patterns.paragraphs,text) or { } local sentences = lpeg.match(patterns.sentences, text) or { } local words = lpeg.match(patterns.words, text) or { } for i=1,#words do words[i] = lowercase(words[i]) end filedata = { -- [variables.paragraphs] = paragraphs, [variables.paragraph] = paragraphs, [variables.lines] = sentences, [variables.line] = sentences, [variables.words] = words, [variables.word] = words, } -- inspect(filedata) data[filename] = filedata end local d = filedata[settings.alternative or v_paragraph] or filedata[v_paragraph] or { } local nd = #d local n = settings.n if n ~= v_random then n = tonumber(n) or 0 if n == 0 then n = nd end end return d, n, nd end function moduledata.ipsum.typeset(settings) local d, n, nd = getfiledata(settings) if nd > 0 then context(settings.before) if n == v_random then context(settings.left) context(d[math.random(1,nd)]) context(settings.right) else for i=1,n do context(settings.left) context(d[i]) context(settings.right) if i < n then context(settings.inbetween) end end end context(settings.after) end end function moduledata.ipsum.direct(settings) local d, n, nd = getfiledata(settings) if nd == 0 then -- nothing elseif n == v_random then context(d[math.random(1,nd)]) else for i=1,n do context(d[i]) if i < n then context(settings.separator) end end end end \stopluacode \unprotect \installnamespace {ipsum} \installcommandhandler \????ipsum {ipsum} \????ipsum \setupipsum [\c!file=lorem, \c!alternative=\v!paragraph, %\c!language=, %\c!styl=, %\c!color=, \c!n=0, \c!left=, \c!right=, \c!before=, \c!after=, \c!separator=, \c!inbetween=] \installactionhandler{ipsum} % grouped \startsetups[handler:action:ipsum] \useipsumstyleandcolor\c!style\c!color \uselanguageparameter\ipsumparameter \ctxlua{moduledata.ipsum.typeset { alternative = "\ipsumparameter\c!alternative", filename = "\ipsumparameter\c!file", n = "\ipsumparameter\c!n", left = "\luaescapestring{\ipsumparameter\c!left}", right = "\luaescapestring{\ipsumparameter\c!right}", before = "\luaescapestring{\ipsumparameter\c!before}", after = "\luaescapestring{\ipsumparameter\c!after}", inbetween = "\luaescapestring{\ipsumparameter\c!inbetween}", }} \stopsetups \def\directipsum#1% only one argument, expanded {\ctxlua{moduledata.ipsum.typeset { alternative = "\namedipsumparameter{#1}\c!alternative", filename = "\namedipsumparameter{#1}\c!file", n = "\namedipsumparameter{#1}\c!n", separator = "\luaescapestring{\ipsumparameter\c!separator}", }} } \protect \continueifinputfile{m-ipsum.mkiv} \setupbodyfont[dejavu,11pt] \starttext \ipsum[alternative=paragraph,before=\blank,after=\blank,language=la] \ipsum[alternative=lines,n=2,right=\par,before=\blank,after=\blank,language=la] \ipsum[alternative=lines,n=random,before=\blank,after=\blank,language=la] \ipsum[alternative=lines,before=\startitemize,after=\stopitemize,left=\startitem,right=\stopitem,language=la] \ipsum[alternative=words,left=(,right=),inbetween=\space,language=la] \page \defineipsum [ward] [file=ward, before=\blank, after=\blank] \defineipsum [ward:itemize] [ward] [alternative=lines, before={\startitemize[packed]}, after=\stopitemize, left=\startitem, right=\stopitem] \defineipsum [ward:title] [ward] [alternative=lines, n=random] \subject{\directipsum{ward:title}} \ipsum[ward] \ipsum[ward:itemize] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-mrl.mkiv0000644000175000017500000005667012130411274024300 0ustar norbertnorbert%D \module %D [ file=pack-mrl, % was pack-rul/core-rul, %D version=1998.10.16, %D title=\CONTEXT\ Packaging Macros, %D subtitle=More Rules, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / More Rules} %D The (re)implementation of margin rules has been moved elsewhere. \unprotect %D \macros %D {setupblackrules,blackrule} %D %D The graphic capabilities of \TEX\ do not go beyond simple filled rules, except of %D course when using specials or, in \MKIV, manipulate node lists. Let's start with %D a warning: using this commands is far more slower than using the \TEX\ primitives %D \type {\hrule} and \type {\vrule}, but they save us some tokens. The %D characteristics of these rule drawing command can be set by: %D %D \showsetup{setupblackrules} %D %D The simple command draws only one rule. Its optional argument can be used to %D specify the dimensions. By setting the width, height or depth to \type {max}, one %D gets the natural dimensions. %D %D \showsetup{blackrule} \installcorenamespace{blackrules} \installsimplecommandhandler \??blackrules {blackrules} \unexpanded\def\blackrule {\hbox\bgroup \doifnextoptionalelse\pack_black_rule_pickup\pack_black_rule_indeed} \def\pack_black_rule_pickup[#1]% {\setupcurrentblackrules[#1]% \pack_black_rule_indeed} \def\pack_black_rule_indeed {\edef\p_width {\directblackrulesparameter\c!width }% \edef\p_height{\directblackrulesparameter\c!height}% \edef\p_depth {\directblackrulesparameter\c!depth }% \ifx\p_height\v!max \setstrut \else\ifx\p_depth\v!max \setstrut \fi\fi \useblackrulesstyleandcolor\c!style\c!color \vrule \s!width \ifx\p_width \v!max\emwidth\else\p_width \fi \s!height\ifx\p_height\v!max\strutht\else\p_height\fi \s!depth \ifx\p_depth \v!max\strutdp\else\p_depth \fi \egroup} \setupblackrules [\c!width=\emwidth, \c!height=\exheight, \c!depth=\zeropoint, \c!color=] %D \macros %D {blackrules} %D %D One can call for a sequence of black rules, if needed equally spaced over the %D given width. %D %D \showsetup{blackrules} %D %D The two alternative calls are therefore: %D %D \startbuffer %D Tell me, is this according to the \blackrules[n=6]? %D These \blackrules[alternativevariant=b,n=10,distance=.2em,width=4cm] are quite clear. %D \stopbuffer %D %D \typebuffer %D %D or: %D %D \startlines %D \getbuffer %D \stoplines %D %D We could of course have implemented this macro using \type {\leaders}, but this %D would probably have taken more tokens. \unexpanded\def\blackrules % probably never used {\hbox\bgroup \doifnextoptionalelse\pack_black_rules_pickup\pack_black_rules_indeed} \def\pack_black_rules_pickup[#1]% {\setupcurrentblackrules[#1]% \pack_black_rules_indeed} \def\pack_black_rules_indeed % no max handling here {\scratchwidth \directblackrulesparameter\c!width \scratchheight \directblackrulesparameter\c!height \scratchdepth \directblackrulesparameter\c!depth \scratchdistance\directblackrulesparameter\c!distance \scratchcounter \directblackrulesparameter\c!n \edef\p_alternative{\blackrulesparameter\c!alternative}% \ifx\p_alternative\c!b \ifnum\scratchcounter=\plusone \scratchdistance\zeropoint \else \scratchwidth\dimexpr(\scratchwidth-\scratchcounter\scratchdistance+\scratchdistance)/\scratchcounter\relax \fi \fi \useblackrulesstyleandcolor\c!style\c!color \dorecurse\scratchcounter % a typical case of where we can use a simple loop {\vrule \s!width \scratchwidth \s!height\scratchheight \s!depth \scratchdepth \hskip\scratchdistance}% \unskip \egroup} \setupblackrules [\c!n=3, \c!alternative=\c!a, \c!distance=.25\emwidth, \c!color=] %D \macros %D {vl, hl} %D %D The command \type {\vl} draws a vertical rule \vl\ with strut dimensions, %D multiplied with the factor specified in the optional argument. The height and %D depth are clipped \vl [3] to the baselinedistance. Its horizontal counterpart %D \type {\hl} draws a horizontal rule \hl\ with a width of 1em, multiplied with the %D optional factor. The horizontal rule is drawn on top of the baseline. %D %D \showsetup{vl} %D \showsetup{hl} \unexpanded\def\pack_rule_vl_indeed#1#2#3% {\bgroup \setbox\scratchbox\hbox {\vrule \s!width #1\linewidth \s!height#2\strutht \s!depth #3\strutdp}% \dp\scratchbox\strutdp \ht\scratchbox\strutht \box\scratchbox \egroup} \def\pack_rule_vl[#1]% {\pack_rule_vl_indeed{#1}{#1}{#1}} \def\pack_rule_hl[#1]% {\hbox {\vrule \s!width #1\emwidth \s!height\linewidth \s!depth \zeropoint}} \unexpanded\def\vl{\dosingleempty\pack_rule_vl} \unexpanded\def\hl{\dosingleempty\pack_rule_hl} \let\dovlwdhtdp\pack_rule_vl_indeed % used elsewhere %D \macros %D {hairline, thinrule, thinrules, setupthinrules} %D %D Drawing thin lines can of course easily be accomplished by the \TEX\ %D primitives \type{\hrule} and \type{\vrule}. The next few macros however %D free us from some specifications. %D %D \startbuffer %D some text %D %D \hairline %D %D some more text %D %D \thinrule %D %D more and more text %D %D hi \thinrule\ there %D %D and then the final text %D \stopbuffer %D %D \typebuffer %D %D becomes %D %D \startexample %D \getbuffer %D \stopexample %D %D So we've got %D %D \showsetup{hairline} %D \showsetup{thinrule} %D %D Both can be set up with: %D %D \showsetup{setupthinrules} %D %D We also have %D %D \showsetup{thinrules} %D %D which looks like: \thinrules[n=2] \installcorenamespace{thinrules} \installcorenamespace{thinrulealternatives} \installdirectcommandhandler \??thinrules {thinrules} \setupthinrules [\c!interlinespace=\v!small, \c!n=3, \c!before=, \c!inbetween={\blank[\v!white]}, \c!after=, \c!color=, \c!height=.5\linewidth, \c!depth=.5\linewidth, \c!frame=\v!on, % compatible with textbackgrounds \c!alternative=\v!b, \c!backgroundcolor=, \c!background=, \c!rulethickness=\linewidth] \letvalue{\??thinrulealternatives\v!a }\zerocount \letvalue{\??thinrulealternatives\v!b }\plusone \letvalue{\??thinrulealternatives\v!c }\plustwo \letvalue{\??thinrulealternatives\v!none}\zerocount \newconstant\c_pack_thinrules_type \unexpanded\def\thinrule {\strut \bgroup \edef\p_height {\directthinrulesparameter\c!height}% \edef\p_depth {\directthinrulesparameter\c!depth}% \edef\p_background{\directthinrulesparameter\c!background}% \edef\p_frame {\directthinrulesparameter\c!frame}% \linewidth\dimexpr\directthinrulesparameter\c!rulethickness/\plustwo\relax \ifdim\linewidth=\zeropoint \c_pack_thinrules_type\zerocount \else\ifx\p_frame\v!on \c_pack_thinrules_type\expandnamespaceparameter\??thinrulealternatives\directthinrulesparameter\c!alternative\v!b\relax \else \c_pack_thinrules_type\zerocount \fi\fi \ifnum\c_pack_thinrules_type=\plusone \ifx\p_height\v!max \scratchheight\strutht \else \setdimensionwithunit\scratchheight\p_height\strutht \fi \ifx\p_depth\v!max \scratchdepth\strutdp \else \setdimensionwithunit\scratchdepth\p_depth\strutdp \fi \else \scratchheight\strutht \scratchdepth \strutdp \fi \ifx\p_background\v!color \startcolor[\directthinrulesparameter\c!backgroundcolor]% \ifnum\c_pack_thinrules_type=\plustwo % prevent overshoot due to rounding \leaders \hrule \s!height\dimexpr\scratchheight-\linewidth\relax \s!depth \dimexpr\scratchdepth -\linewidth\relax \hfill \else \leaders \hrule \s!height\scratchheight \s!depth \scratchdepth \hfill \fi \stopcolor \ifcase\c_pack_thinrules_type % no rule \or \startcolor[\directthinrulesparameter\c!color]% \hfillneg \leaders \hrule \s!height\linewidth \s!depth \linewidth \hfill \stopcolor \or \startcolor[\directthinrulesparameter\c!color]% \hfillneg \leaders \hrule \s!height\dimexpr-\scratchdepth+\linewidth\relax \s!depth \scratchdepth \hfill \hfillneg \leaders \hrule \s!height\scratchheight \s!depth \dimexpr-\scratchheight+\linewidth\relax \hfill \stopcolor \fi \else \ifcase\c_pack_thinrules_type % no rule \else \startcolor[\directthinrulesparameter\c!color]% \leaders \hrule \s!height\scratchheight \s!depth \scratchdepth \hfill \stopcolor \fi \fi \strut \carryoverpar\egroup} \unexpanded\def\hairline {\endgraf \thinrule \endgraf} \unexpanded\def\thinrules {\dosingleempty\pack_thinrules} \def\pack_thinrules[#1]% {\bgroup \setupcurrentthinrules[#1]% \assignvalue{\directthinrulesparameter\c!interlinespace}\m_pack_thinrules_interlinespace{1.0}{1.5}{2.0}% \spacing\m_pack_thinrules_interlinespace \edef\p_after {\directthinrulesparameter\c!after}% \edef\p_inbetween{\directthinrulesparameter\c!inbetween}% \directthinrulesparameter\c!before \scratchcounter\directthinrulesparameter\c!n\relax \dorecurse\scratchcounter {\ifnum\recurselevel=\scratchcounter \penalty500 \else \ifnum\recurselevel=\plustwo \penalty500 \fi\fi \thinrule \ifnum\recurselevel<\scratchcounter\relax % test needed, else messed up whitespace \ifx\p_inbetween\empty \softbreak % \ifhmode \hskip \parfillskip \break \fi \else \endgraf \nowhitespace \p_inbetween \fi \fi}% \ifx\p_after\empty \carryoverpar\egroup \else \p_after\egroup \fi{}} %D A couple of examples are given below. %D %D \startbuffer %D \setupthinrules[n=3,inbetween=,color=gray] %D %D test test \thinrules\ test test \par %D test test \thinrules [color=green] test test \par %D test test \thinrules [height=max, depth=max] test test \par %D %D \setupthinrules[height=.9,depth=.9] %D %D test test \thinrules\ test test \par %D test test \thinrules [alternativevariant=b] test test \par %D test test \thinrules [alternativevariant=c] test test \par %D test test \thinrules [alternativevariant=c,inbetween=\vskip2ex] test test \par %D \stopbuffer %D %D \typebuffer {\getbuffer} %D %D There are a couple of alternative ways to visualize rules using backgrounds. At %D first sight these may look strange, but they make sense in educational settings. %D The alternatives are more or less compatible with the more advanced \METAPOST\ %D based implementation. %D %D \startbuffer[a] %D \setupthinrules %D [n=2, %D backgroundcolor=gray , %D rulethickness=1pt, %D colorkleur=donkerblauw, %D after=\blank, %D before=\blank] %D \stopbuffer %D %D \typebuffer[a] %D %D \startbuffer[b] %D \thinrules[alternativevariant=a] %D \thinrules[alternativevariant=b] %D \thinrules[alternativevariant=c] %D \stopbuffer %D %D \typebuffer[b] \getbuffer[a,b] %D %D \startbuffer[b] %D \thinrules[alternativevariant=a,background=color] %D \thinrules[alternativevariant=b,background=color] %D \thinrules[alternativevariant=c,background=color] %D \stopbuffer %D %D \typebuffer[b] \getbuffer[a,b] %D %D \startbuffer[b] %D \thinrules[alternativevariant=a,height=.8,depth=.8,background=color] %D \thinrules[alternativevariant=b,height=.8,depth=.8,background=color] %D \thinrules[alternativevariant=c,height=.8,depth=.8,background=color] %D \stopbuffer %D %D \typebuffer[b] \getbuffer[a,b] %D \macros %D {textrule, starttextrule, setuptextrules} %D %D Putting rules before and after a paragraph is very space sensitive, but the %D next command handles that quite well. It comes in two disguises: %D %D \startbuffer %D \textrule[top]{fragments} %D \input reich %D \textrule %D \stopbuffer %D %D \start \typebuffer \getbuffer \stop %D %D \startbuffer %D \setuptextrules %D [width=90pt,distance=12pt,rulecolor=blue, %D bodyfont=small,style=\sc,color=red] %D %D \starttextrule{Ship Building Tools} %D \nl \setuptolerance[tolerant] \input materie %D \stoptextrule %D \stopbuffer %D %D \bgroup \typebuffer \getbuffer \egroup %D %D \startbuffer %D \setuptextrules %D [location=inmargin, %D bodyfont=small,style=slantedbold] %D %D \starttextrule{wonderful} %D \input tufte %D \stoptextrule %D \stopbuffer %D %D \bgroup \typebuffer \getbuffer \egroup %D %D The formal definition of these commands is: %D %D \showsetup{textrule} %D \showsetup{starttextrule} %D \showsetup{setuptextrules} %D %D The implementation looks a bit complicated due to the optional arguments. \installcorenamespace{textrules} \installcorenamespace{textrulealternatives} \installdirectcommandhandler \??textrules {textrules} \setuptextrules [\c!location=\v!left, \c!before=\blank, \c!after=\blank, \c!inbetween=, \c!width=2\emwidth, \c!style=\v!bold, \c!color=, \c!rulecolor=, \c!bodyfont=, \c!depthcorrection=\v!on, \c!rulethickness=\linewidth, \c!distance=.5\emwidth] \unexpanded\def\textrule {\dosingleempty\pack_textrule} \def\pack_textrule {\iffirstargument \expandafter\pack_textrule_yes \else \expandafter\pack_textrule_nop \fi} \def\pack_textrule_yes[#1]% {\expandnamespacevalue\??textrulealternatives{#1}\v!bottom} \def\pack_textrule_nop[#1]% {\dosinglegroupempty\pack_textrule_nop_indeed} \def\pack_textrule_nop_indeed {\iffirstargument \expandafter\pack_textrule_nop_indeed_yes \else \expandafter\pack_textrule_nop_indeed_nop \fi} \def\pack_textrule_nop_indeed_yes {\csname\??textrulealternatives\v!top\endcsname} \def\pack_textrule_nop_indeed_nop {\csname\??textrulealternatives\v!bottom\endcsname\empty} %D\startbuffer %D\showstruts %D %D\setupwhitespace[none] %D %D\textrule[top]{test} xxxxx\smash{\strut} \textrule[bottom]{test} %D\textrule[top]{test} xxxxx\strut \textrule[bottom]{test} %D %D\setupwhitespace[big] %D %D\textrule[top]{test} xxxxx\smash{\strut} \textrule[bottom]{test} %D\textrule[top]{test} xxxxx\strut \textrule[bottom]{test} %D\stoptyping %D %D \typebuffer \start \getbuffer \stop \setvalue{\??textrulealternatives\v!top}#1% {\page[\v!preference] % interferes \directtextrulesparameter\c!before\relax \blank[\v!samepage,\v!nowhite]% \pack_textrule_with_text{#1}% \blank[\v!samepage,\v!nowhite]% \directtextrulesparameter\c!inbetween\relax \endgraf} \setvalue{\??textrulealternatives\v!bottom}#1% {\blank[\v!samepage,\v!nowhite]% \pack_textrule_following{#1}% \blank[\v!samepage,\v!nowhite]% \directtextrulesparameter\c!after\relax \page[\v!preference]} \setvalue{\??textrulealternatives\v!middle}#1% {\blank[\v!samepage,\v!nowhite]% \directtextrulesparameter\c!inbetween\relax \pack_textrule_following{#1}% \blank[\v!samepage,\v!nowhite]% \directtextrulesparameter\c!inbetween\relax \page[\v!preference]} \def\pack_textrule_with_text#1% {\bgroup \setbox\scratchbox\hbox to \availablehsize {\scratchwidth \directtextrulesparameter\c!rulethickness\relax \scratchheight\dimexpr .5\exheight+.5\scratchwidth\relax \scratchdepth \dimexpr-.5\exheight+.5\scratchwidth\relax \doifsomething{#1} {\doifelse{\directtextrulesparameter\c!location}\v!inmargin {\llap {\usetextrulesstyleandcolor\c!style\c!color #1% \hskip\leftmargindistance}} {\color[\directtextrulesparameter\c!rulecolor] {\vrule\s!height\scratchheight\s!depth\scratchdepth\s!width\directtextrulesparameter\c!width}% \hbox spread 2\dimexpr\directtextrulesparameter\c!distance\relax {\hss \usetextrulesstyleandcolor\c!style\c!color \strut#1% \hss}}}% \color[\directtextrulesparameter\c!rulecolor] {\leaders\hrule\s!height\scratchheight\s!depth\scratchdepth\hfill}}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \noindent\box\scratchbox \egroup} \def\pack_textrule_correct_depth_yes {\vskip\dimexpr \strutdp +.5\exheight \ifdim\prevdepth>\strutdp\else \ifdim\prevdepth>\zeropoint -\prevdepth \fi \fi \relax \relax} \def\pack_textrule_correct_depth_nop {\vskip\dimexpr \strutdp +.5\exheight \relax \relax} \def\pack_textrule_following#1% {\doifelsenothing{#1} {\ifhmode \endgraf \fi \doifelse{\directtextrulesparameter\c!depthcorrection}\v!on\pack_textrule_correct_depth_yes\pack_textrule_correct_depth_nop \nointerlineskip \dontleavehmode\vbox {\color[\directtextrulesparameter\c!rulecolor] {\hrule\s!depth\directtextrulesparameter\c!rulethickness\s!height\zeropoint\s!width\availablehsize}}} {\pack_textrule_with_text{#1}}% \ifvmode \prevdepth\zeropoint \fi} %D The grouped commands also supports bodyfont switching: \unexpanded\def\starttextrule#1% {\bgroup \def\pack_textrule_nop_indeed{\csname\??textrulealternatives\v!middle\endcsname}% \csname\??textrulealternatives\v!top\endcsname{#1}% \bgroup \doifsomething{\directtextrulesparameter\c!bodyfont}{\switchtobodyfont[\directtextrulesparameter\c!bodyfont]}} \unexpanded\def\stoptextrule {\par \egroup \csname\??textrulealternatives\v!bottom\endcsname\empty \egroup} %D \macros %D {fillinrules, setupfillinrules} %D %D The next few commands do not really deserve a place in a core module, because %D they deal with specific typography. Nevertheless I decided to make them part of %D the core, because they permit us to make questionaires. Let's start with some %D examples. %D %D \fillinrules[n=2,width=fit]{first} %D \fillinrules[n=2,width=broad]{first} %D \fillinrules[n=2,width=3cm]{first} %D \fillinrules[n=2,width=3cm,distance=.5em,separator=:]{first} %D \fillinrules[n=2]{first}{last} %D \fillintext{first}{last} \input reich \par %D %D The main command is \type{\fillinrules}. This command takes one and an optional %D second argument and sets a paragraph with empty visualized lines. %D %D \showsetup{fillinrules} %D \showsetup{setupfillinrules} \installcorenamespace{fillinrules} \installdirectcommandhandler \??fillinrules {fillinrules} \setupfillinrules [\c!width=\v!broad, \c!distance=\emwidth, \c!before=\blank, \c!after=\blank, \c!n=\plusone, \c!interlinespace=\v!small, \c!separator=, \c!style=, \c!color=] \unexpanded\def\fillinrules {\dosingleempty\pack_fillinrules} \def\pack_fillinrules[#1]% {\endgraf \begingroup \setupcurrentfillinrules[#1]% \let\pack_fillinrules_rule\thinrules \dodoublegroupempty\pack_fillinrules_indeed} \def\pack_fillinrules_indeed#1#2% {\directfillinrulesparameter\c!before \setupcurrentthinrules [\c!n=\directfillinrulesparameter\c!n, \c!interlinespace=\directfillinrulesparameter\c!interlinespace, \c!before=, \c!after=]% \scratchdistance\directfillinrulesparameter\c!distance\relax \edef\m_fillinrules_one{#1}% \edef\m_fillinrules_two{#2}% \noindent \ifx\m_fillinrules_one\empty \else \edef\p_width{\directfillinrulesparameter\c!width}% \ifx\p_width\v!fit \scratchdistance\zeropoint \hbox \else\ifx\p_width\v!broad \hbox \else \hbox to \directfillinrulesparameter\c!width \fi\fi \bgroup \usefillinrulesstyleandcolor\c!style\c!color \strut \m_fillinrules_one \hfill\directfillinrulesparameter\c!separator \hskip\scratchdistance \egroup \fi \setupwhitespace[\v!big]% \ignorespaces \pack_fillinrules_rule \ifx\m_fillinrules_two\empty \else \kern\scratchdistance \usefillinrulesstyleandcolor\c!style\c!color \m_fillinrules_two \strut \fi \endgraf \directfillinrulesparameter\c!after \endgroup} %D \macros %D {fillintext} %D %D To provide compatible layouts when texts and lines are mixed, one can typeset %D a paragraph by using the command \type {\fillintext}. %D %D \showsetup{fillintext} \unexpanded\def\fillintext {\dosingleempty\pack_fillintext} \def\pack_fillintext[#1]% ugly {\endgraf \begingroup \setupcurrentfillinrules[#1]% \dodoublegroupempty\pack_fillintext_indeed} \def\pack_fillintext_indeed#1#2% {\def\pack_fillinrules_rule{\unhbox\nextbox\unskip}% \dowithnextbox{\pack_fillinrules_indeed{#1}{\hfill#2}}% \hbox\bgroup\let\par\egroup\ignorespaces} %D \macros %D {fillinline, setupfillinlines} %D %D Another member of the family takes care of putting a (often small) rule after %D a piece of text, like %D %D \startbuffer %D %D \stopbuffer\fillinline \input reich \par %D \fillinline[margin=0cm] \input reich \par %D %D \startexample %D \getbuffer %D \stopexample %D %D which was typeset by saying: %D %D \typebuffer %D %D The two commands that take care of this are: %D %D \showsetup{fillinline} %D \showsetup{setupfillinlines} \installcorenamespace{fillinlines} \installdirectcommandhandler \??fillinlines {fillinlines} \setupfillinlines [\c!width=8\emwidth, % was 3cm \c!margin=\directfillinlinesparameter\c!width, \c!rulethickness=\linewidth, \c!color=, \c!distance=\emwidth, \c!before=\blank, \c!after=\blank] \unexpanded\def\fillinline {\dosingleempty\pack_fillinline} \ifdefined\endpar % experiment with \endpar \def\pack_fillinline[#1]% {% \endpar % no, as it interferes with \definedescription cum suis \begingroup \setupcurrentfillinlines[#1]% \directfillinlinesparameter\c!before \begingroup \advance\rightskip \directfillinlinesparameter\c!margin\relax \parfillskip\zeropoint \pushmacro\endpar \def\endpar {\popmacro\endpar \ifhmode\unskip\hfill\fi \scratchwidth\dimexpr\directfillinlinesparameter\c!width-\directfillinlinesparameter\c!distance\relax \ifdim\scratchwidth>\directfillinlinesparameter\c!margin\else\expandafter\rlap\fi {\kern\directfillinlinesparameter\c!distance \scratchheight\dimexpr\directfillinlinesparameter\c!rulethickness/\plustwo\relax \color[\directfillinlinesparameter\c!color]{\vrule\s!width\scratchwidth\s!height\scratchheight\s!depth\scratchheight}}% \endpar \endgroup \endpar \directfillinlinesparameter\c!after \endgroup}} % carryover ? \else \def\pack_fillinline[#1]% {%\endgraf % no, as it interferes with \definedescription cum suis \begingroup \setupcurrentfillinlines[#1]% \directfillinlinesparameter\c!before \begingroup \advance\rightskip \directfillinlinesparameter\c!margin\relax \parfillskip\zeropoint \def\par {\let\par\endgraf \ifhmode\unskip\hfill\fi \scratchwidth\dimexpr\directfillinlinesparameter\c!width-\directfillinlinesparameter\c!distance\relax \ifdim\scratchwidth>\directfillinlinesparameter\c!margin\else\expandafter\rlap\fi {\kern\directfillinlinesparameter\c!distance \scratchheight\dimexpr\directfillinlinesparameter\c!rulethickness/\plustwo\relax \color[\directfillinlinesparameter\c!color]{\vrule\s!width\scratchwidth\s!height\scratchheight\s!depth\scratchheight}}% \endgraf \endgroup \endgraf \directfillinlinesparameter\c!after \endgroup}} % carryover ? \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-fig.mkii0000644000175000017500000004175311754241457024273 0ustar norbertnorbert%D \module %D [ file=grph-fig, %D version=2006.08.26, % overhaul of 1997.03.31 %D title=\CONTEXT\ Graphic Macros, %D subtitle=Figure Inclusion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Graphic Macros / Figure Handling} \unprotect \def\setupexternalfigures {\dosingleempty\dosetupexternalfigures} \def\dosetupexternalfigures[#1]% {\getparameters[\??ef][#1]% local settings \getparameters[\??ex][#1]% global settings \setfigurepathlist} % the path may be used elsewhere too (as in x-res-04) \presetlocalframed[\??ef] \newconditional\externalfigurelevel % true=background false=normal \newconditional\externalfigureflush % true=place false=ignore \setfalse\externalfigurelevel \settrue \externalfigureflush \def\doplaceexternalfigure[#1][#2][#3][#4][#5]% {\doifsomething{#2}% catches \defineexternalfigure dummies {\doifundefinedelse{\??ef\??ef#2} {\dodoplaceexternalfigure[#1][#2][#3][#4][#5]} {\doifelse{#1}{#2} {\dodoplaceexternalfigure[#1][#2][#3][#4][#5]} {\getvalue{\??ef\??ef#2}[#5]}}}} \def\dodoplaceexternalfigure[#1][#2][#3][#4][#5]% {\bgroup \pushmacro\textunderscore \edef\textunderscore{\string_}% brrr, temp hack, still needed? \calculateexternalfigure [][#1][#2][#3][#4][#5]% [] is dummy dwcomp \calculateexternalscreenfigure[][#1][#2][#3][#4][#5]% [] is dummy dwcomp \popmacro\textunderscore \box\foundexternalfigure \egroup} \def\externalfigurereplacement#1#2#3% {\setupcolors [\c!state=\v!local]% \expanded{\localframed [\??ef] [\c!width=\figurewidth, \c!height=\figureheight, \c!background=\v!screen, \c!backgroundscreen=.8, \c!frame=\@@efframe]}% {\tt\tfxx \nohyphens name: \expanded{\verbatimstring{#1}}\\% file: \expanded{\verbatimstring{#2}}\\% state: \expanded{\verbatimstring{#3}}}} \def\externalfigureplaceholder#1#2#3% {\localframed [\??ef] [\c!width=#2, \c!height=#3, \c!frame=\v!on]% {\tt\tfxx \nohyphens name: \expanded{\verbatimstring{#1}}\\% state: \expanded{\verbatimstring{placeholder}}}} % new: more convenient/efficient than % % \use..[a][a][setting] \externalfigure[b][a] % % is equivalent to: % % \def..[a][setting] \externalfigure[b][a] % % see x-res modules for usage: % % \defineexternalfigure[name][settings] \def\defineexternalfigure {\dodoubleargument\dodefineexternalfigure} \def\dodefineexternalfigure[#1][#2]% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][][][#2]}} \def\getexternalfigure#1% efef has 4 args already and take an 5th {\wait} % OBSOLETE % \useexternalfigure[alpha][koe] % \useexternalfigure[beta] [koe] [breedte=1cm] % \useexternalfigure[gamma][koe][alpha] % \useexternalfigure[delta][koe][alpha][breedte=2cm] % % volle breedte: \externalfigure[koe] \par % 3cm breed: \externalfigure[koe] [breedte=3cm] \par % volle breedte: \externalfigure[alpha] \par % 1cm breed: \externalfigure[beta] \par % volle breedte: \externalfigure[gamma] \par % 2cm breed: \externalfigure[delta] \par % 4cm breed: \externalfigure[beta] [breedte=4cm] \par % 5cm breed: \externalfigure[gamma][breedte=5cm] \par % \defineexternalfigure[a][width=10cm] % \defineexternalfigure[b][width=5cm] % \externalfigure[cow][a] % \externalfigure[cow][b][height=8cm] % \useexternalfigure[x][cow][width=10cm,height=1cm] % \externalfigure[x] % \externalfigure[x][width=3cm] \def\useexternalfigure {\doquadrupleempty\douseexternalfigure} % [label] [filename] % [label] [filename] [parent] % [label] [filename] [parent] [settings] % [label] [filename] [settings] \def\useexternalfigure {\doquadrupleempty\douseexternalfigure} \def\douseexternalfigure[#1][#2][#3][#4]% {\doifelsenothing{#1} {\doifsomething{#2} {\doifassignmentelse{#3} {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][#3][#4]}} {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][][#4]}}}} {\doifelsenothing{#2} {\doifassignmentelse{#3} {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][][#3]}} {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][#3][#4]}}} {\doifassignmentelse{#3} {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][][#3]}} {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}}}}} \def\dosetefparameters#1#2#3% parent_id use_settings current_settings {\doifelsenothing{#1} % inherit from parent {\getparameters[\??ef][#2,#3]} {\doifdefinedelse{\??ef\??ef#1} {\pushmacro\doplaceexternalfigure \def\doplaceexternalfigure[##1][##2][##3][##4]{\getparameters[\??ef][##4,#2,#3]}% \getvalue{\??ef\??ef#1}% \popmacro\doplaceexternalfigure} {\getparameters[\??ef][#2,#3]}}} \unexpanded\def\externalfigure {\dotripleempty\doexternalfigure} \def\doexternalfigure[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings] {\bgroup \doifelsenothing{#1} {\framed[\c!width=\defaultfigurewidth,\c!height=\defaultfigureheight]{external\\figure\\no name}} {\doifundefinedelse{\??ef\??ef#1} {\useexternalfigure[\s!dummy][#1][#2][#3]% \getvalue{\??ef\??ef\s!dummy}[]} % [] is dummy arg 5 {\doifassignmentelse{#2} {\getvalue{\??ef\??ef#1}[#2]}% {\getvalue{\??ef\??ef#1}[#3]}}}% \globallet\currentresourcecomment\empty \egroup} \long\def\resourcecomment#1% {\long\gdef\currentresourcecomment{#1}} \long\def\startresourcecomment#1\stopresourcecomment {\long\gdef\currentresourcecomment{#1}} \let\currentresourcecomment\empty \def\showexternalfigures % maybe run time command is better, but no core-run, unless figs-run ... {%\writestatus\m!systems{for \string\showexternalfigures\space see \truefilename{x-res-20}.tex} \usemodule[res-20]\showexternalfigures} % so for the moment we do it this way \def\overlayfigure#1% {\externalfigure[#1][\c!width=\overlaywidth,\c!height=\overlayheight]} %D Still undocumented! No one uses it I think, better be done with layers. \newcount\efreference \newdimen\efxsteps \newdimen\efysteps \def\calculateefsteps {\ifnum0\@@exxmax=\zerocount \ifnum0\@@exymax=\zerocount \def\@@exymax{24}% \fi \efysteps\figureheight \divide\efysteps \@@exymax \efxsteps\efysteps \dimen0=\figurewidth \advance\dimen0 \efysteps \divide \dimen0 \efysteps \edef\@@exxmax{\number\dimen0}% \else \efxsteps\figurewidth \divide\efxsteps \@@exxmax \efysteps\figureheight \divide\efysteps \@@exymax \fi} \def\efcomment#1(#2,#3)#4(#5,#6)% {kader}(x,y)(h,b)[...]{tekst} {\def\complexefdocomment[##1]##2% {\position(#2,#3)% {\setnostrut \framed [\c!width=#5\efxsteps, \c!height=#6\exysteps, \c!offset=\v!none, \c!frame=#1, ##1]% {##2}}}% \complexorsimpleempty\efdocomment} \def\efnocomment(#1,#2)#3(#4,#5)% (x,y)(h,b)[...]{tekst} {\def\complexefdonocomment[##1]##2{}% \complexorsimpleempty\efdonocomment} \def\efdomarker(#1,#2)#3#4% (h,b){kader}{tekst} {\framed [\c!width=#1\efxsteps, \c!height=#2\efysteps, \c!offset=\v!none, \c!frame=#3]% {#4}} \def\effigure#1% {\position(0,0){\getvalue{#1}}} \def\efdoarea(#1,#2)#3#4% (h,b){kader}{tekst} {\bgroup \setnostrut \framed [\c!width=#1\efxsteps, \c!height=#2\efysteps, \c!offset=\!!zeropoint, \c!frame=#3] {#4}% \egroup} \def\efgoto(#1,#2)#3[#4]% (h,b)kader[ref] {\setbox0=\vbox{\efdoarea(#1,#2)#3{}}% \gotobox{\copy0}[#4]} \def\efmark(#1,#2)#3(#4,#5)#6[#7]% {\advance\efreference \plusone \position(#1,#2) {\hbox{\the\efreference}}% \position(#1,#2) {\gotosomeinternal\s!vwb{#7}\realfolio {\efdomarker(#4,#5)\v!on{\thisissomeinternal\s!vwa{#7}}}}} \def\eftext#1(#2,#3)#4(#5,#6)#7[#8]% {\advance\efreference \plusone \hbox {\quad \thisissomeinternal\s!vwb{#8}% \gotosomeinternal \s!vwa{#8}\realfolio {\hbox to 1.5em{\the\efreference\presetgoto\hfill}}% \quad#1 (#2,#3) (#5,#6) [#8]\hfill}% \endgraf} \def\efthisis(#1,#2)#3[#4]% {\efdoarea(#1,#2){#3}{\pagereference[#4]}} \newbox\colorbarbox \def\makecolorbar[#1]% {\def\docommand##1% {\color[##1] {\blackrule [\c!width=2em, \c!height=1ex, \c!depth=\!!zeropoint]}% \endgraf}% \global\setbox\colorbarbox\vbox {\forgetall \processcommalist[#1]\docommand}% \global\setbox\colorbarbox\vbox {\hskip2em\box\colorbarbox}% \wd\colorbarbox\zeropoint} \def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]% {\hbox {\setbox0\hbox {\useexternalfigure[\s!dummy][#2][#3,#5]% \externalfigure[\s!dummy]}% \calculateefsteps \startpositioning \def\referring(##1,##2)##3(##4,##5)##6[##7]% {\position(##1,##2){\efgoto(##4,##5){\@@exframes}[##7]}}% \def\marking(##1,##2)##3(##4,##5)##6[##7]% {\position(##1,##2){\efthisis(##4,##5){\@@exframes}[##7]}}% \def\remark{\efnocomment}% \def\colorbar##1[##2]{}% \position(0,0){\box0}% \linewidth\onepoint \setuppositioning [\c!unit=pt, \c!xscale=\withoutpt\the\efxsteps, \c!yscale=\withoutpt\the\efysteps, \c!factor=1]% \ignorespaces#4% \def\referring(##1,##2)##3(##4,##5)##6[##7]% {}% \let\marking\referring \def\remark{\efcomment\v!no}% \def\colorbar##1[##2]{\makecolorbar[##2]}% \ignorespaces#4% \stoppositioning \box\colorbarbox}} \def\dodostartfigure[#1][#2][#3]#4\stopfigure {\doifelse\v!test\@@exoption {\teststartfigure[#1][#2][#3]#4\teststopfigure \let\@@exframes\v!on} {\let\@@exframes\v!off}% \setvalue{\??ef\??ef#1}% {\dosingleempty{\placestartfigure[#1][#2][#3]#4\placestopfigure}}% }% no longer \doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}} % De onderstaande macro mag niet zondermeer worden aangepast % en is afgestemd op gebruik in de handleiding. \def\teststartfigure[#1][#2][#3]#4\teststopfigure% {\begingroup \setbox0\hbox {\useexternalfigure[\s!dummy][#2][\c!wfactor=\v!max]% \externalfigure[\s!dummy]}% \def\referring{\efmark}% \def\marking{\efmark}% \def\remark{\efcomment\v!yes}% \def\colorbar##1[##2]{}% \efreference\zerocount \setbox0\vbox {\hsize240pt \startpositioning \calculateefsteps \position(0,0) {\box0}% \position(0,0) {\basegrid [\c!nx=\@@exxmax, \c!dx=\withoutpt\the\efxsteps, \c!ny=\@@exymax, \c!dy=\withoutpt\the\efysteps, \c!xstep=1, \c!ystep=1, \c!scale=1, \c!offset=\v!no, \c!unit=pt]}% \setuppositioning [\c!unit=pt, \c!xscale=\withoutpt\the\efxsteps, \c!yscale=\withoutpt\the\efysteps, \c!factor=1]% \linewidth\onepoint \ignorespaces#4\relax \stoppositioning \vfill}% \efreference\zerocount \def\referring{\eftext{$\rightarrow$}}% \def\marking{\eftext{$\leftarrow$}}% \def\remark{\efnocomment}% \def\colorbar##1[##2]{}% \setbox2\vbox {{\tfa\doifelsenothing{#1}{#2}{#1}} \blank \tfxx#4 \vfilll}% \ifdim\ht0>\ht2 \ht2\ht0 \else \ht0\ht2 \fi \hbox {\hskip3em \vtop{\vskip12pt\box0\vskip6pt}% \vtop{\vskip12pt\box2\vskip6pt}}% \endgroup} \def\dodostartfigure[#1][#2][#3]#4\stopfigure {\doifelse\v!test\@@exoption {\teststartfigure[#1][#2][#3]#4\teststopfigure \let\@@exframe\v!on} {\let\@@exframe\v!off}% \setvalue{\??ef\??ef#1}% {\def\next{\placestartfigure[#1][#2][#3]#4\placestopfigure}% \dosingleempty\next}% }% no longer: \doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}} \long\def\dostartfigure#1% {\dotripleargument\dodostartfigure#1\stopfigure} \def\startfigure {\grabuntil{\e!stop\v!figure}\dostartfigure} %D defining sound tracks: %D %D \starttyping %D \useexternalsoundtrack[label][file] %D \stoptyping %D %D associated actions: StartSound StopSound PauseSound ResumeSound %D %D Todo: like external figures, also search on path, %D although, they need to be present ar viewing time, so ... \def\useexternalsoundtrack {\dodoubleargument\douseexternalsoundtrack} \def\douseexternalsoundtrack[#1][#2]% {\setgvalue{\??sd:#1}{#2}} \def\checksoundtrack#1% {\iflocation \doifdefined{\??sd:#1}{\doifvaluesomething{\??sd:#1} {\doinsertsoundtrack{\getvalue{\??sd:#1}}{#1}\@@sdoption % brr, \..empty not really needed and maybe even wrong; % also, not here but in driver % well, no: sounds need to be reinitialize each time (i.e., be on page), so no }}% \letgvalueempty{\??sd:#1}}}% \fi} \setexecutecommandcheck {startsound} \checksoundtrack \def\setupexternalsoundtracks {\dodoubleargument\getparameters[\??sd]} \setupexternalsoundtracks [\c!option=] %D NEW: used in styledesign manual % \setbuffer[typeset-b]\endbuffer % \setbuffer[typeset-a]\endbuffer % % todo: % % \appendtoks \setbuffer[typeset-b]\endbuffer\to \everystarttext % \appendtoks \setbuffer[typeset-a]\endbuffer\to \everystarttext \def\typesetbuffer {\dodoubleempty\dotypesetbuffer} \newcounter\noftypesetbuffers % all loaded at the end \defineexternalfigure [typeset] [\c!background=\v!color, \c!backgroundcolor=\s!white] \def\dotypesetbuffer[#1][#2]% beware: this will mix up the mp graphics {\bgroup \def\TEXbufferfile##1{\bufferprefix##1.tex}% \expanded{\setbuffer[typeset]% \def\noexpand\bufferprefix{\ifprotectbuffers\jobname-\fi typeset-}}% \starttext \getbuffer[b,#1,a]% \stoptext \endbuffer \doglobal\increment\noftypesetbuffers % batch is needed \executesystemcommand{texmfstart texexec --batch --pdf --result=\bufferprefix typeset-\noftypesetbuffers\space \bufferprefix typeset.tex}% %\externalfigure[\bufferprefix typeset-\noftypesetbuffers.pdf][\c!object=\v!no,#2]% \externalfigure[\bufferprefix typeset-\noftypesetbuffers.pdf][#2]% \egroup} % for me only (manuals and such) \definesystemvariable{tz} \def\definetypesetting{\dotripleempty\dodefinetypesetting} \def\typesetfile {\dotripleempty\dotypesetfile} \def\dodefinetypesetting[#1][#2][#3]% {\doifsomething{#1}{\setvalue{\??tz#1}{\dodotypesetfile{#2}{#3}}}} \def\dotypesetfile[#1][#2][#3]% {\executeifdefined{\??tz#1}\gobbletwoarguments{#2}{#3}} \def\dodotypesetfile#1#2#3#4% args settings file settings {\doifmode{*\v!first}{\executesystemcommand{texmfstart texexec.pl --batch --pdf #1 #3}}% \doglobal\beforesplitstring#3\at.\to\typesetfilename \externalfigure[\typesetfilename.pdf][#2,#4]} \setupexternalfigures [\c!option=, \c!object=\v!yes, % we only check for no \c!reset=\v!no, \c!maxwidth=\@@efwidth, \c!maxheight=\@@efheight, \c!bodyfont=\bodyfontsize, \c!directory=, \c!file=\f!utilityfilename.\f!figureextension, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!frame=\v!off, \c!background=, % new \c!splitcolor=\s!white, \c!conversion=, \c!prefix=, \c!cache=, % \c!grid=, \c!equalwidth=, \c!equalheight=, \c!location={\v!local,\v!global}] \setupexternalfigures [\c!frames=\v!off, \c!ymax=24, \c!xmax=] \useexternalfigure [buffer] [\jobname] [\c!type=\v!buffer,\c!object=\v!no] \protect \endinput % alternative for positioning % \definelayer[figure][width=\overlaywidth,height=\overlayheight] % \defineoverlay[figure][{\directsetup{figure}\tightlayer[figure]}] % \setupcolors[state=start] % \starttext % \startsetups figure % \setlayerframed[figure][preset=rightbottom,x=.25\layerwidth,y=.25\layerheight]{HERE} % \setlayerframed[figure][preset=leftbottom, x=.15\layerwidth,y=.35\layerheight]{THERE} % \stopsetups % \externalfigure[cow][background={foreground,figure},width=4cm,height=8cm] % \startsetups figure % \setlayerframed[figure][preset=righttop,x=.25\layerwidth,y=.25\layerheight]{MORE} % \setlayerframed[figure][preset=middle,foregroundcolor=green]{EVEN MORE} % \stopsetups % \externalfigure[cow][background={foreground,figure},width=14cm,height=2cm] % \defineexternalfigure[whatever][background={foreground,figure}] % \startsetups figure % \setlayerframed[figure][preset=righttop,x=.25\layerwidth,y=.25\layerheight]{\red MORE} % \setlayerframed[figure][preset=middle,foregroundcolor=green]{EVEN MORE} % \stopsetups % \externalfigure[cow][whatever][width=14cm,height=4cm] % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/xetx-utf.mkii0000644000175000017500000044071211571377075024355 0ustar norbertnorbert% filename : xetx-utf.tex % comment : generated by mtxrun --script chars --xtx % author : Hans Hagen, PRAGMA-ADE, Hasselt NL % copyright: PRAGMA ADE / ConTeXt Development Team % license : see context related readme files % lc/uc/catcode mappings \setXTXcharcodes "00041 "00061 "00041 % LATIN CAPITAL LETTER A \setXTXcharcodes "00042 "00062 "00042 % LATIN CAPITAL LETTER B \setXTXcharcodes "00043 "00063 "00043 % LATIN CAPITAL LETTER C \setXTXcharcodes "00044 "00064 "00044 % LATIN CAPITAL LETTER D \setXTXcharcodes "00045 "00065 "00045 % LATIN CAPITAL LETTER E \setXTXcharcodes "00046 "00066 "00046 % LATIN CAPITAL LETTER F \setXTXcharcodes "00047 "00067 "00047 % LATIN CAPITAL LETTER G \setXTXcharcodes "00048 "00068 "00048 % LATIN CAPITAL LETTER H \setXTXcharcodes "00049 "00069 "00049 % LATIN CAPITAL LETTER I \setXTXcharcodes "0004A "0006A "0004A % LATIN CAPITAL LETTER J \setXTXcharcodes "0004B "0006B "0004B % LATIN CAPITAL LETTER K \setXTXcharcodes "0004C "0006C "0004C % LATIN CAPITAL LETTER L \setXTXcharcodes "0004D "0006D "0004D % LATIN CAPITAL LETTER M \setXTXcharcodes "0004E "0006E "0004E % LATIN CAPITAL LETTER N \setXTXcharcodes "0004F "0006F "0004F % LATIN CAPITAL LETTER O \setXTXcharcodes "00050 "00070 "00050 % LATIN CAPITAL LETTER P \setXTXcharcodes "00051 "00071 "00051 % LATIN CAPITAL LETTER Q \setXTXcharcodes "00052 "00072 "00052 % LATIN CAPITAL LETTER R \setXTXcharcodes "00053 "00073 "00053 % LATIN CAPITAL LETTER S \setXTXcharcodes "00054 "00074 "00054 % LATIN CAPITAL LETTER T \setXTXcharcodes "00055 "00075 "00055 % LATIN CAPITAL LETTER U \setXTXcharcodes "00056 "00076 "00056 % LATIN CAPITAL LETTER V \setXTXcharcodes "00057 "00077 "00057 % LATIN CAPITAL LETTER W \setXTXcharcodes "00058 "00078 "00058 % LATIN CAPITAL LETTER X \setXTXcharcodes "00059 "00079 "00059 % LATIN CAPITAL LETTER Y \setXTXcharcodes "0005A "0007A "0005A % LATIN CAPITAL LETTER Z \setXTXcharcodes "00061 "00061 "00041 % LATIN SMALL LETTER A \setXTXcharcodes "00062 "00062 "00042 % LATIN SMALL LETTER B \setXTXcharcodes "00063 "00063 "00043 % LATIN SMALL LETTER C \setXTXcharcodes "00064 "00064 "00044 % LATIN SMALL LETTER D \setXTXcharcodes "00065 "00065 "00045 % LATIN SMALL LETTER E \setXTXcharcodes "00066 "00066 "00046 % LATIN SMALL LETTER F \setXTXcharcodes "00067 "00067 "00047 % LATIN SMALL LETTER G \setXTXcharcodes "00068 "00068 "00048 % LATIN SMALL LETTER H \setXTXcharcodes "00069 "00069 "00049 % LATIN SMALL LETTER I \setXTXcharcodes "0006A "0006A "0004A % LATIN SMALL LETTER J \setXTXcharcodes "0006B "0006B "0004B % LATIN SMALL LETTER K \setXTXcharcodes "0006C "0006C "0004C % LATIN SMALL LETTER L \setXTXcharcodes "0006D "0006D "0004D % LATIN SMALL LETTER M \setXTXcharcodes "0006E "0006E "0004E % LATIN SMALL LETTER N \setXTXcharcodes "0006F "0006F "0004F % LATIN SMALL LETTER O \setXTXcharcodes "00070 "00070 "00050 % LATIN SMALL LETTER P \setXTXcharcodes "00071 "00071 "00051 % LATIN SMALL LETTER Q \setXTXcharcodes "00072 "00072 "00052 % LATIN SMALL LETTER R \setXTXcharcodes "00073 "00073 "00053 % LATIN SMALL LETTER S \setXTXcharcodes "00074 "00074 "00054 % LATIN SMALL LETTER T \setXTXcharcodes "00075 "00075 "00055 % LATIN SMALL LETTER U \setXTXcharcodes "00076 "00076 "00056 % LATIN SMALL LETTER V \setXTXcharcodes "00077 "00077 "00057 % LATIN SMALL LETTER W \setXTXcharcodes "00078 "00078 "00058 % LATIN SMALL LETTER X \setXTXcharcodes "00079 "00079 "00059 % LATIN SMALL LETTER Y \setXTXcharcodes "0007A "0007A "0005A % LATIN SMALL LETTER Z \setXTXcharcodes "000AA "000AA "000AA % FEMININE ORDINAL INDICATOR \setXTXcharcodes "000B5 "000B5 "0039C % MICRO SIGN \setXTXcharcodes "000BA "000BA "000BA % MASCULINE ORDINAL INDICATOR \setXTXcharcodes "000C0 "000E0 "000C0 % LATIN CAPITAL LETTER A WITH GRAVE \setXTXcharcodes "000C1 "000E1 "000C1 % LATIN CAPITAL LETTER A WITH ACUTE \setXTXcharcodes "000C2 "000E2 "000C2 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX \setXTXcharcodes "000C3 "000E3 "000C3 % LATIN CAPITAL LETTER A WITH TILDE \setXTXcharcodes "000C4 "000E4 "000C4 % LATIN CAPITAL LETTER A WITH DIAERESIS \setXTXcharcodes "000C5 "000E5 "000C5 % LATIN CAPITAL LETTER A WITH RING ABOVE \setXTXcharcodes "000C6 "000E6 "000C6 % LATIN CAPITAL LETTER AE \setXTXcharcodes "000C7 "000E7 "000C7 % LATIN CAPITAL LETTER C WITH CEDILLA \setXTXcharcodes "000C8 "000E8 "000C8 % LATIN CAPITAL LETTER E WITH GRAVE \setXTXcharcodes "000C9 "000E9 "000C9 % LATIN CAPITAL LETTER E WITH ACUTE \setXTXcharcodes "000CA "000EA "000CA % LATIN CAPITAL LETTER E WITH CIRCUMFLEX \setXTXcharcodes "000CB "000EB "000CB % LATIN CAPITAL LETTER E WITH DIAERESIS \setXTXcharcodes "000CC "000EC "000CC % LATIN CAPITAL LETTER I WITH GRAVE \setXTXcharcodes "000CD "000ED "000CD % LATIN CAPITAL LETTER I WITH ACUTE \setXTXcharcodes "000CE "000EE "000CE % LATIN CAPITAL LETTER I WITH CIRCUMFLEX \setXTXcharcodes "000CF "000EF "000CF % LATIN CAPITAL LETTER I WITH DIAERESIS \setXTXcharcodes "000D0 "000F0 "000D0 % LATIN CAPITAL LETTER ETH \setXTXcharcodes "000D1 "000F1 "000D1 % LATIN CAPITAL LETTER N WITH TILDE \setXTXcharcodes "000D2 "000F2 "000D2 % LATIN CAPITAL LETTER O WITH GRAVE \setXTXcharcodes "000D3 "000F3 "000D3 % LATIN CAPITAL LETTER O WITH ACUTE \setXTXcharcodes "000D4 "000F4 "000D4 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX \setXTXcharcodes "000D5 "000F5 "000D5 % LATIN CAPITAL LETTER O WITH TILDE \setXTXcharcodes "000D6 "000F6 "000D6 % LATIN CAPITAL LETTER O WITH DIAERESIS \setXTXcharcodes "000D8 "000F8 "000D8 % LATIN CAPITAL LETTER O WITH STROKE \setXTXcharcodes "000D9 "000F9 "000D9 % LATIN CAPITAL LETTER U WITH GRAVE \setXTXcharcodes "000DA "000FA "000DA % LATIN CAPITAL LETTER U WITH ACUTE \setXTXcharcodes "000DB "000FB "000DB % LATIN CAPITAL LETTER U WITH CIRCUMFLEX \setXTXcharcodes "000DC "000FC "000DC % LATIN CAPITAL LETTER U WITH DIAERESIS \setXTXcharcodes "000DD "000FD "000DD % LATIN CAPITAL LETTER Y WITH ACUTE \setXTXcharcodes "000DE "000FE "000DE % LATIN CAPITAL LETTER THORN \setXTXcharcodes "000DF "000DF "000DF % LATIN SMALL LETTER SHARP S \setXTXcharcodes "000E0 "000E0 "000C0 % LATIN SMALL LETTER A WITH GRAVE \setXTXcharcodes "000E1 "000E1 "000C1 % LATIN SMALL LETTER A WITH ACUTE \setXTXcharcodes "000E2 "000E2 "000C2 % LATIN SMALL LETTER A WITH CIRCUMFLEX \setXTXcharcodes "000E3 "000E3 "000C3 % LATIN SMALL LETTER A WITH TILDE \setXTXcharcodes "000E4 "000E4 "000C4 % LATIN SMALL LETTER A WITH DIAERESIS \setXTXcharcodes "000E5 "000E5 "000C5 % LATIN SMALL LETTER A WITH RING ABOVE \setXTXcharcodes "000E6 "000E6 "000C6 % LATIN SMALL LETTER AE \setXTXcharcodes "000E7 "000E7 "000C7 % LATIN SMALL LETTER C WITH CEDILLA \setXTXcharcodes "000E8 "000E8 "000C8 % LATIN SMALL LETTER E WITH GRAVE \setXTXcharcodes "000E9 "000E9 "000C9 % LATIN SMALL LETTER E WITH ACUTE \setXTXcharcodes "000EA "000EA "000CA % LATIN SMALL LETTER E WITH CIRCUMFLEX \setXTXcharcodes "000EB "000EB "000CB % LATIN SMALL LETTER E WITH DIAERESIS \setXTXcharcodes "000EC "000EC "000CC % LATIN SMALL LETTER I WITH GRAVE \setXTXcharcodes "000ED "000ED "000CD % LATIN SMALL LETTER I WITH ACUTE \setXTXcharcodes "000EE "000EE "000CE % LATIN SMALL LETTER I WITH CIRCUMFLEX \setXTXcharcodes "000EF "000EF "000CF % LATIN SMALL LETTER I WITH DIAERESIS \setXTXcharcodes "000F0 "000F0 "000D0 % LATIN SMALL LETTER ETH \setXTXcharcodes "000F1 "000F1 "000D1 % LATIN SMALL LETTER N WITH TILDE \setXTXcharcodes "000F2 "000F2 "000D2 % LATIN SMALL LETTER O WITH GRAVE \setXTXcharcodes "000F3 "000F3 "000D3 % LATIN SMALL LETTER O WITH ACUTE \setXTXcharcodes "000F4 "000F4 "000D4 % LATIN SMALL LETTER O WITH CIRCUMFLEX \setXTXcharcodes "000F5 "000F5 "000D5 % LATIN SMALL LETTER O WITH TILDE \setXTXcharcodes "000F6 "000F6 "000D6 % LATIN SMALL LETTER O WITH DIAERESIS \setXTXcharcodes "000F8 "000F8 "000D8 % LATIN SMALL LETTER O WITH STROKE \setXTXcharcodes "000F9 "000F9 "000D9 % LATIN SMALL LETTER U WITH GRAVE \setXTXcharcodes "000FA "000FA "000DA % LATIN SMALL LETTER U WITH ACUTE \setXTXcharcodes "000FB "000FB "000DB % LATIN SMALL LETTER U WITH CIRCUMFLEX \setXTXcharcodes "000FC "000FC "000DC % LATIN SMALL LETTER U WITH DIAERESIS \setXTXcharcodes "000FD "000FD "000DD % LATIN SMALL LETTER Y WITH ACUTE \setXTXcharcodes "000FE "000FE "000DE % LATIN SMALL LETTER THORN \setXTXcharcodes "000FF "000FF "00178 % LATIN SMALL LETTER Y WITH DIAERESIS \setXTXcharcodes "00100 "00101 "00100 % LATIN CAPITAL LETTER A WITH MACRON \setXTXcharcodes "00101 "00101 "00100 % LATIN SMALL LETTER A WITH MACRON \setXTXcharcodes "00102 "00103 "00102 % LATIN CAPITAL LETTER A WITH BREVE \setXTXcharcodes "00103 "00103 "00102 % LATIN SMALL LETTER A WITH BREVE \setXTXcharcodes "00104 "00105 "00104 % LATIN CAPITAL LETTER A WITH OGONEK \setXTXcharcodes "00105 "00105 "00104 % LATIN SMALL LETTER A WITH OGONEK \setXTXcharcodes "00106 "00107 "00106 % LATIN CAPITAL LETTER C WITH ACUTE \setXTXcharcodes "00107 "00107 "00106 % LATIN SMALL LETTER C WITH ACUTE \setXTXcharcodes "00108 "00109 "00108 % LATIN CAPITAL LETTER C WITH CIRCUMFLEX \setXTXcharcodes "00109 "00109 "00108 % LATIN SMALL LETTER C WITH CIRCUMFLEX \setXTXcharcodes "0010A "0010B "0010A % LATIN CAPITAL LETTER C WITH DOT ABOVE \setXTXcharcodes "0010B "0010B "0010A % LATIN SMALL LETTER C WITH DOT ABOVE \setXTXcharcodes "0010C "0010D "0010C % LATIN CAPITAL LETTER C WITH CARON \setXTXcharcodes "0010D "0010D "0010C % LATIN SMALL LETTER C WITH CARON \setXTXcharcodes "0010E "0010F "0010E % LATIN CAPITAL LETTER D WITH CARON \setXTXcharcodes "0010F "0010F "0010E % LATIN SMALL LETTER D WITH CARON \setXTXcharcodes "00110 "00111 "00110 % LATIN CAPITAL LETTER D WITH STROKE \setXTXcharcodes "00111 "00111 "00110 % LATIN SMALL LETTER D WITH STROKE \setXTXcharcodes "00112 "00113 "00112 % LATIN CAPITAL LETTER E WITH MACRON \setXTXcharcodes "00113 "00113 "00112 % LATIN SMALL LETTER E WITH MACRON \setXTXcharcodes "00114 "00115 "00114 % LATIN CAPITAL LETTER E WITH BREVE \setXTXcharcodes "00115 "00115 "00114 % LATIN SMALL LETTER E WITH BREVE \setXTXcharcodes "00116 "00117 "00116 % LATIN CAPITAL LETTER E WITH DOT ABOVE \setXTXcharcodes "00117 "00117 "00116 % LATIN SMALL LETTER E WITH DOT ABOVE \setXTXcharcodes "00118 "00119 "00118 % LATIN CAPITAL LETTER E WITH OGONEK \setXTXcharcodes "00119 "00119 "00118 % LATIN SMALL LETTER E WITH OGONEK \setXTXcharcodes "0011A "0011B "0011A % LATIN CAPITAL LETTER E WITH CARON \setXTXcharcodes "0011B "0011B "0011A % LATIN SMALL LETTER E WITH CARON \setXTXcharcodes "0011C "0011D "0011C % LATIN CAPITAL LETTER G WITH CIRCUMFLEX \setXTXcharcodes "0011D "0011D "0011C % LATIN SMALL LETTER G WITH CIRCUMFLEX \setXTXcharcodes "0011E "0011F "0011E % LATIN CAPITAL LETTER G WITH BREVE \setXTXcharcodes "0011F "0011F "0011E % LATIN SMALL LETTER G WITH BREVE \setXTXcharcodes "00120 "00121 "00120 % LATIN CAPITAL LETTER G WITH DOT ABOVE \setXTXcharcodes "00121 "00121 "00120 % LATIN SMALL LETTER G WITH DOT ABOVE \setXTXcharcodes "00122 "00123 "00122 % LATIN CAPITAL LETTER G WITH CEDILLA \setXTXcharcodes "00123 "00123 "00122 % LATIN SMALL LETTER G WITH CEDILLA \setXTXcharcodes "00124 "00125 "00124 % LATIN CAPITAL LETTER H WITH CIRCUMFLEX \setXTXcharcodes "00125 "00125 "00124 % LATIN SMALL LETTER H WITH CIRCUMFLEX \setXTXcharcodes "00126 "00127 "00126 % LATIN CAPITAL LETTER H WITH STROKE \setXTXcharcodes "00127 "00127 "00126 % LATIN SMALL LETTER H WITH STROKE \setXTXcharcodes "00128 "00129 "00128 % LATIN CAPITAL LETTER I WITH TILDE \setXTXcharcodes "00129 "00129 "00128 % LATIN SMALL LETTER I WITH TILDE \setXTXcharcodes "0012A "0012B "0012A % LATIN CAPITAL LETTER I WITH MACRON \setXTXcharcodes "0012B "0012B "0012A % LATIN SMALL LETTER I WITH MACRON \setXTXcharcodes "0012C "0012D "0012C % LATIN CAPITAL LETTER I WITH BREVE \setXTXcharcodes "0012D "0012D "0012C % LATIN SMALL LETTER I WITH BREVE \setXTXcharcodes "0012E "0012F "0012E % LATIN CAPITAL LETTER I WITH OGONEK \setXTXcharcodes "0012F "0012F "0012E % LATIN SMALL LETTER I WITH OGONEK \setXTXcharcodes "00130 "00069 "00130 % LATIN CAPITAL LETTER I WITH DOT ABOVE \setXTXcharcodes "00131 "00131 "00049 % LATIN SMALL LETTER DOTLESS I \setXTXcharcodes "00132 "00133 "00132 % LATIN CAPITAL LIGATURE IJ \setXTXcharcodes "00133 "00133 "00132 % LATIN SMALL LIGATURE IJ \setXTXcharcodes "00134 "00135 "00134 % LATIN CAPITAL LETTER J WITH CIRCUMFLEX \setXTXcharcodes "00135 "00135 "00134 % LATIN SMALL LETTER J WITH CIRCUMFLEX \setXTXcharcodes "00136 "00137 "00136 % LATIN CAPITAL LETTER K WITH CEDILLA \setXTXcharcodes "00137 "00137 "00136 % LATIN SMALL LETTER K WITH CEDILLA \setXTXcharcodes "00138 "00138 "00138 % LATIN SMALL LETTER KRA \setXTXcharcodes "00139 "0013A "00139 % LATIN CAPITAL LETTER L WITH ACUTE \setXTXcharcodes "0013A "0013A "00139 % LATIN SMALL LETTER L WITH ACUTE \setXTXcharcodes "0013B "0013C "0013B % LATIN CAPITAL LETTER L WITH CEDILLA \setXTXcharcodes "0013C "0013C "0013B % LATIN SMALL LETTER L WITH CEDILLA \setXTXcharcodes "0013D "0013E "0013D % LATIN CAPITAL LETTER L WITH CARON \setXTXcharcodes "0013E "0013E "0013D % LATIN SMALL LETTER L WITH CARON \setXTXcharcodes "0013F "00140 "0013F % LATIN CAPITAL LETTER L WITH MIDDLE DOT \setXTXcharcodes "00140 "00140 "0013F % LATIN SMALL LETTER L WITH MIDDLE DOT \setXTXcharcodes "00141 "00142 "00141 % LATIN CAPITAL LETTER L WITH STROKE \setXTXcharcodes "00142 "00142 "00141 % LATIN SMALL LETTER L WITH STROKE \setXTXcharcodes "00143 "00144 "00143 % LATIN CAPITAL LETTER N WITH ACUTE \setXTXcharcodes "00144 "00144 "00143 % LATIN SMALL LETTER N WITH ACUTE \setXTXcharcodes "00145 "00146 "00145 % LATIN CAPITAL LETTER N WITH CEDILLA \setXTXcharcodes "00146 "00146 "00145 % LATIN SMALL LETTER N WITH CEDILLA \setXTXcharcodes "00147 "00148 "00147 % LATIN CAPITAL LETTER N WITH CARON \setXTXcharcodes "00148 "00148 "00147 % LATIN SMALL LETTER N WITH CARON \setXTXcharcodes "00149 "00149 "00149 % LATIN SMALL LETTER N PRECEDED BY APOSTROPHE \setXTXcharcodes "0014A "0014B "0014A % LATIN CAPITAL LETTER ENG \setXTXcharcodes "0014B "0014B "0014A % LATIN SMALL LETTER ENG \setXTXcharcodes "0014C "0014D "0014C % LATIN CAPITAL LETTER O WITH MACRON \setXTXcharcodes "0014D "0014D "0014C % LATIN SMALL LETTER O WITH MACRON \setXTXcharcodes "0014E "0014F "0014E % LATIN CAPITAL LETTER O WITH BREVE \setXTXcharcodes "0014F "0014F "0014E % LATIN SMALL LETTER O WITH BREVE \setXTXcharcodes "00150 "00151 "00150 % LATIN CAPITAL LETTER O WITH DOUBLE ACUTE \setXTXcharcodes "00151 "00151 "00150 % LATIN SMALL LETTER O WITH DOUBLE ACUTE \setXTXcharcodes "00152 "00153 "00152 % LATIN CAPITAL LIGATURE OE \setXTXcharcodes "00153 "00153 "00152 % LATIN SMALL LIGATURE OE \setXTXcharcodes "00154 "00155 "00154 % LATIN CAPITAL LETTER R WITH ACUTE \setXTXcharcodes "00155 "00155 "00154 % LATIN SMALL LETTER R WITH ACUTE \setXTXcharcodes "00156 "00157 "00156 % LATIN CAPITAL LETTER R WITH CEDILLA \setXTXcharcodes "00157 "00157 "00156 % LATIN SMALL LETTER R WITH CEDILLA \setXTXcharcodes "00158 "00159 "00158 % LATIN CAPITAL LETTER R WITH CARON \setXTXcharcodes "00159 "00159 "00158 % LATIN SMALL LETTER R WITH CARON \setXTXcharcodes "0015A "0015B "0015A % LATIN CAPITAL LETTER S WITH ACUTE \setXTXcharcodes "0015B "0015B "0015A % LATIN SMALL LETTER S WITH ACUTE \setXTXcharcodes "0015C "0015D "0015C % LATIN CAPITAL LETTER S WITH CIRCUMFLEX \setXTXcharcodes "0015D "0015D "0015C % LATIN SMALL LETTER S WITH CIRCUMFLEX \setXTXcharcodes "0015E "0015F "0015E % LATIN CAPITAL LETTER S WITH CEDILLA \setXTXcharcodes "0015F "0015F "0015E % LATIN SMALL LETTER S WITH CEDILLA \setXTXcharcodes "00160 "00161 "00160 % LATIN CAPITAL LETTER S WITH CARON \setXTXcharcodes "00161 "00161 "00160 % LATIN SMALL LETTER S WITH CARON \setXTXcharcodes "00162 "00163 "00162 % LATIN CAPITAL LETTER T WITH CEDILLA \setXTXcharcodes "00163 "00163 "00162 % LATIN SMALL LETTER T WITH CEDILLA \setXTXcharcodes "00164 "00165 "00164 % LATIN CAPITAL LETTER T WITH CARON \setXTXcharcodes "00165 "00165 "00164 % LATIN SMALL LETTER T WITH CARON \setXTXcharcodes "00166 "00167 "00166 % LATIN CAPITAL LETTER T WITH STROKE \setXTXcharcodes "00167 "00167 "00166 % LATIN SMALL LETTER T WITH STROKE \setXTXcharcodes "00168 "00169 "00168 % LATIN CAPITAL LETTER U WITH TILDE \setXTXcharcodes "00169 "00169 "00168 % LATIN SMALL LETTER U WITH TILDE \setXTXcharcodes "0016A "0016B "0016A % LATIN CAPITAL LETTER U WITH MACRON \setXTXcharcodes "0016B "0016B "0016A % LATIN SMALL LETTER U WITH MACRON \setXTXcharcodes "0016C "0016D "0016C % LATIN CAPITAL LETTER U WITH BREVE \setXTXcharcodes "0016D "0016D "0016C % LATIN SMALL LETTER U WITH BREVE \setXTXcharcodes "0016E "0016F "0016E % LATIN CAPITAL LETTER U WITH RING ABOVE \setXTXcharcodes "0016F "0016F "0016E % LATIN SMALL LETTER U WITH RING ABOVE \setXTXcharcodes "00170 "00171 "00170 % LATIN CAPITAL LETTER U WITH DOUBLE ACUTE \setXTXcharcodes "00171 "00171 "00170 % LATIN SMALL LETTER U WITH DOUBLE ACUTE \setXTXcharcodes "00172 "00173 "00172 % LATIN CAPITAL LETTER U WITH OGONEK \setXTXcharcodes "00173 "00173 "00172 % LATIN SMALL LETTER U WITH OGONEK \setXTXcharcodes "00174 "00175 "00174 % LATIN CAPITAL LETTER W WITH CIRCUMFLEX \setXTXcharcodes "00175 "00175 "00174 % LATIN SMALL LETTER W WITH CIRCUMFLEX \setXTXcharcodes "00176 "00177 "00176 % LATIN CAPITAL LETTER Y WITH CIRCUMFLEX \setXTXcharcodes "00177 "00177 "00176 % LATIN SMALL LETTER Y WITH CIRCUMFLEX \setXTXcharcodes "00178 "000FF "00178 % LATIN CAPITAL LETTER Y WITH DIAERESIS \setXTXcharcodes "00179 "0017A "00179 % LATIN CAPITAL LETTER Z WITH ACUTE \setXTXcharcodes "0017A "0017A "00179 % LATIN SMALL LETTER Z WITH ACUTE \setXTXcharcodes "0017B "0017C "0017B % LATIN CAPITAL LETTER Z WITH DOT ABOVE \setXTXcharcodes "0017C "0017C "0017B % LATIN SMALL LETTER Z WITH DOT ABOVE \setXTXcharcodes "0017D "0017E "0017D % LATIN CAPITAL LETTER Z WITH CARON \setXTXcharcodes "0017E "0017E "0017D % LATIN SMALL LETTER Z WITH CARON \setXTXcharcodes "0017F "0017F "00053 % LATIN SMALL LETTER LONG S \setXTXcharcodes "00180 "00180 "00243 % LATIN SMALL LETTER B WITH STROKE \setXTXcharcodes "00181 "00253 "00181 % LATIN CAPITAL LETTER B WITH HOOK \setXTXcharcodes "00182 "00183 "00182 % LATIN CAPITAL LETTER B WITH TOPBAR \setXTXcharcodes "00183 "00183 "00182 % LATIN SMALL LETTER B WITH TOPBAR \setXTXcharcodes "00184 "00185 "00184 % LATIN CAPITAL LETTER TONE SIX \setXTXcharcodes "00185 "00185 "00184 % LATIN SMALL LETTER TONE SIX \setXTXcharcodes "00186 "00254 "00186 % LATIN CAPITAL LETTER OPEN O \setXTXcharcodes "00187 "00188 "00187 % LATIN CAPITAL LETTER C WITH HOOK \setXTXcharcodes "00188 "00188 "00187 % LATIN SMALL LETTER C WITH HOOK \setXTXcharcodes "00189 "00256 "00189 % LATIN CAPITAL LETTER AFRICAN D \setXTXcharcodes "0018A "00257 "0018A % LATIN CAPITAL LETTER D WITH HOOK \setXTXcharcodes "0018B "0018C "0018B % LATIN CAPITAL LETTER D WITH TOPBAR \setXTXcharcodes "0018C "0018C "0018B % LATIN SMALL LETTER D WITH TOPBAR \setXTXcharcodes "0018D "0018D "0018D % LATIN SMALL LETTER TURNED DELTA \setXTXcharcodes "0018E "001DD "0018E % LATIN CAPITAL LETTER REVERSED E \setXTXcharcodes "0018F "00259 "0018F % LATIN CAPITAL LETTER SCHWA \setXTXcharcodes "00190 "0025B "00190 % LATIN CAPITAL LETTER OPEN E \setXTXcharcodes "00191 "00192 "00191 % LATIN CAPITAL LETTER F WITH HOOK \setXTXcharcodes "00192 "00192 "00191 % LATIN SMALL LETTER F WITH HOOK \setXTXcharcodes "00193 "00260 "00193 % LATIN CAPITAL LETTER G WITH HOOK \setXTXcharcodes "00194 "00263 "00194 % LATIN CAPITAL LETTER GAMMA \setXTXcharcodes "00195 "00195 "001F6 % LATIN SMALL LETTER HV \setXTXcharcodes "00196 "00269 "00196 % LATIN CAPITAL LETTER IOTA \setXTXcharcodes "00197 "00268 "00197 % LATIN CAPITAL LETTER I WITH STROKE \setXTXcharcodes "00198 "00199 "00198 % LATIN CAPITAL LETTER K WITH HOOK \setXTXcharcodes "00199 "00199 "00198 % LATIN SMALL LETTER K WITH HOOK \setXTXcharcodes "0019A "0019A "0023D % LATIN SMALL LETTER L WITH BAR \setXTXcharcodes "0019B "0019B "0019B % LATIN SMALL LETTER LAMBDA WITH STROKE \setXTXcharcodes "0019C "0026F "0019C % LATIN CAPITAL LETTER TURNED M \setXTXcharcodes "0019D "00272 "0019D % LATIN CAPITAL LETTER N WITH LEFT HOOK \setXTXcharcodes "0019E "0019E "00220 % LATIN SMALL LETTER N WITH LONG RIGHT LEG \setXTXcharcodes "0019F "00275 "0019F % LATIN CAPITAL LETTER O WITH MIDDLE TILDE \setXTXcharcodes "001A0 "001A1 "001A0 % LATIN CAPITAL LETTER O WITH HORN \setXTXcharcodes "001A1 "001A1 "001A0 % LATIN SMALL LETTER O WITH HORN \setXTXcharcodes "001A2 "001A3 "001A2 % LATIN CAPITAL LETTER OI \setXTXcharcodes "001A3 "001A3 "001A2 % LATIN SMALL LETTER OI \setXTXcharcodes "001A4 "001A5 "001A4 % LATIN CAPITAL LETTER P WITH HOOK \setXTXcharcodes "001A5 "001A5 "001A4 % LATIN SMALL LETTER P WITH HOOK \setXTXcharcodes "001A6 "00280 "001A6 % LATIN LETTER YR \setXTXcharcodes "001A7 "001A8 "001A7 % LATIN CAPITAL LETTER TONE TWO \setXTXcharcodes "001A8 "001A8 "001A7 % LATIN SMALL LETTER TONE TWO \setXTXcharcodes "001A9 "00283 "001A9 % LATIN CAPITAL LETTER ESH \setXTXcharcodes "001AA "001AA "001AA % LATIN LETTER REVERSED ESH LOOP \setXTXcharcodes "001AB "001AB "001AB % LATIN SMALL LETTER T WITH PALATAL HOOK \setXTXcharcodes "001AC "001AD "001AC % LATIN CAPITAL LETTER T WITH HOOK \setXTXcharcodes "001AD "001AD "001AC % LATIN SMALL LETTER T WITH HOOK \setXTXcharcodes "001AE "00288 "001AE % LATIN CAPITAL LETTER T WITH RETROFLEX HOOK \setXTXcharcodes "001AF "001B0 "001AF % LATIN CAPITAL LETTER U WITH HORN \setXTXcharcodes "001B0 "001B0 "001AF % LATIN SMALL LETTER U WITH HORN \setXTXcharcodes "001B1 "0028A "001B1 % LATIN CAPITAL LETTER UPSILON \setXTXcharcodes "001B2 "0028B "001B2 % LATIN CAPITAL LETTER V WITH HOOK \setXTXcharcodes "001B3 "001B4 "001B3 % LATIN CAPITAL LETTER Y WITH HOOK \setXTXcharcodes "001B4 "001B4 "001B3 % LATIN SMALL LETTER Y WITH HOOK \setXTXcharcodes "001B5 "001B6 "001B5 % LATIN CAPITAL LETTER Z WITH STROKE \setXTXcharcodes "001B6 "001B6 "001B5 % LATIN SMALL LETTER Z WITH STROKE \setXTXcharcodes "001B7 "00292 "001B7 % LATIN CAPITAL LETTER EZH \setXTXcharcodes "001B8 "001B9 "001B8 % LATIN CAPITAL LETTER EZH REVERSED \setXTXcharcodes "001B9 "001B9 "001B8 % LATIN SMALL LETTER EZH REVERSED \setXTXcharcodes "001BA "001BA "001BA % LATIN SMALL LETTER EZH WITH TAIL \setXTXcharcodes "001BC "001BD "001BC % LATIN CAPITAL LETTER TONE FIVE \setXTXcharcodes "001BD "001BD "001BC % LATIN SMALL LETTER TONE FIVE \setXTXcharcodes "001BE "001BE "001BE % LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE \setXTXcharcodes "001BF "001BF "001F7 % LATIN LETTER WYNN \setXTXcharcodes "001C4 "001C6 "001C5 % LATIN CAPITAL LETTER DZ WITH CARON \setXTXcharcodes "001C5 "001C6 "001C4 % LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON \setXTXcharcodes "001C6 "001C6 "001C4 % LATIN SMALL LETTER DZ WITH CARON \setXTXcharcodes "001C7 "001C9 "001C8 % LATIN CAPITAL LETTER LJ \setXTXcharcodes "001C8 "001C9 "001C7 % LATIN CAPITAL LETTER L WITH SMALL LETTER J \setXTXcharcodes "001C9 "001C9 "001C7 % LATIN SMALL LETTER LJ \setXTXcharcodes "001CA "001CC "001CB % LATIN CAPITAL LETTER NJ \setXTXcharcodes "001CB "001CC "001CA % LATIN CAPITAL LETTER N WITH SMALL LETTER J \setXTXcharcodes "001CC "001CC "001CA % LATIN SMALL LETTER NJ \setXTXcharcodes "001CD "001CE "001CD % LATIN CAPITAL LETTER A WITH CARON \setXTXcharcodes "001CE "001CE "001CD % LATIN SMALL LETTER A WITH CARON \setXTXcharcodes "001CF "001D0 "001CF % LATIN CAPITAL LETTER I WITH CARON \setXTXcharcodes "001D0 "001D0 "001CF % LATIN SMALL LETTER I WITH CARON \setXTXcharcodes "001D1 "001D2 "001D1 % LATIN CAPITAL LETTER O WITH CARON \setXTXcharcodes "001D2 "001D2 "001D1 % LATIN SMALL LETTER O WITH CARON \setXTXcharcodes "001D3 "001D4 "001D3 % LATIN CAPITAL LETTER U WITH CARON \setXTXcharcodes "001D4 "001D4 "001D3 % LATIN SMALL LETTER U WITH CARON \setXTXcharcodes "001D5 "001D6 "001D5 % LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON \setXTXcharcodes "001D6 "001D6 "001D5 % LATIN SMALL LETTER U WITH DIAERESIS AND MACRON \setXTXcharcodes "001D7 "001D8 "001D7 % LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE \setXTXcharcodes "001D8 "001D8 "001D7 % LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE \setXTXcharcodes "001D9 "001DA "001D9 % LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON \setXTXcharcodes "001DA "001DA "001D9 % LATIN SMALL LETTER U WITH DIAERESIS AND CARON \setXTXcharcodes "001DB "001DC "001DB % LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE \setXTXcharcodes "001DC "001DC "001DB % LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE \setXTXcharcodes "001DD "001DD "0018E % LATIN SMALL LETTER TURNED E \setXTXcharcodes "001DE "001DF "001DE % LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON \setXTXcharcodes "001DF "001DF "001DE % LATIN SMALL LETTER A WITH DIAERESIS AND MACRON \setXTXcharcodes "001E0 "001E1 "001E0 % LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON \setXTXcharcodes "001E1 "001E1 "001E0 % LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON \setXTXcharcodes "001E2 "001E3 "001E2 % LATIN CAPITAL LETTER AE WITH MACRON \setXTXcharcodes "001E3 "001E3 "001E2 % LATIN SMALL LETTER AE WITH MACRON \setXTXcharcodes "001E4 "001E5 "001E4 % LATIN CAPITAL LETTER G WITH STROKE \setXTXcharcodes "001E5 "001E5 "001E4 % LATIN SMALL LETTER G WITH STROKE \setXTXcharcodes "001E6 "001E7 "001E6 % LATIN CAPITAL LETTER G WITH CARON \setXTXcharcodes "001E7 "001E7 "001E6 % LATIN SMALL LETTER G WITH CARON \setXTXcharcodes "001E8 "001E9 "001E8 % LATIN CAPITAL LETTER K WITH CARON \setXTXcharcodes "001E9 "001E9 "001E8 % LATIN SMALL LETTER K WITH CARON \setXTXcharcodes "001EA "001EB "001EA % LATIN CAPITAL LETTER O WITH OGONEK \setXTXcharcodes "001EB "001EB "001EA % LATIN SMALL LETTER O WITH OGONEK \setXTXcharcodes "001EC "001ED "001EC % LATIN CAPITAL LETTER O WITH OGONEK AND MACRON \setXTXcharcodes "001ED "001ED "001EC % LATIN SMALL LETTER O WITH OGONEK AND MACRON \setXTXcharcodes "001EE "001EF "001EE % LATIN CAPITAL LETTER EZH WITH CARON \setXTXcharcodes "001EF "001EF "001EE % LATIN SMALL LETTER EZH WITH CARON \setXTXcharcodes "001F0 "001F0 "001F0 % LATIN SMALL LETTER J WITH CARON \setXTXcharcodes "001F1 "001F3 "001F2 % LATIN CAPITAL LETTER DZ \setXTXcharcodes "001F2 "001F3 "001F1 % LATIN CAPITAL LETTER D WITH SMALL LETTER Z \setXTXcharcodes "001F3 "001F3 "001F1 % LATIN SMALL LETTER DZ \setXTXcharcodes "001F4 "001F5 "001F4 % LATIN CAPITAL LETTER G WITH ACUTE \setXTXcharcodes "001F5 "001F5 "001F4 % LATIN SMALL LETTER G WITH ACUTE \setXTXcharcodes "001F6 "00195 "001F6 % LATIN CAPITAL LETTER HWAIR \setXTXcharcodes "001F7 "001BF "001F7 % LATIN CAPITAL LETTER WYNN \setXTXcharcodes "001F8 "001F9 "001F8 % LATIN CAPITAL LETTER N WITH GRAVE \setXTXcharcodes "001F9 "001F9 "001F8 % LATIN SMALL LETTER N WITH GRAVE \setXTXcharcodes "001FA "001FB "001FA % LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE \setXTXcharcodes "001FB "001FB "001FA % LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE \setXTXcharcodes "001FC "001FD "001FC % LATIN CAPITAL LETTER AE WITH ACUTE \setXTXcharcodes "001FD "001FD "001FC % LATIN SMALL LETTER AE WITH ACUTE \setXTXcharcodes "001FE "001FF "001FE % LATIN CAPITAL LETTER O WITH STROKE AND ACUTE \setXTXcharcodes "001FF "001FF "001FE % LATIN SMALL LETTER O WITH STROKE AND ACUTE \setXTXcharcodes "00200 "00201 "00200 % LATIN CAPITAL LETTER A WITH DOUBLE GRAVE \setXTXcharcodes "00201 "00201 "00200 % LATIN SMALL LETTER A WITH DOUBLE GRAVE \setXTXcharcodes "00202 "00203 "00202 % LATIN CAPITAL LETTER A WITH INVERTED BREVE \setXTXcharcodes "00203 "00203 "00202 % LATIN SMALL LETTER A WITH INVERTED BREVE \setXTXcharcodes "00204 "00205 "00204 % LATIN CAPITAL LETTER E WITH DOUBLE GRAVE \setXTXcharcodes "00205 "00205 "00204 % LATIN SMALL LETTER E WITH DOUBLE GRAVE \setXTXcharcodes "00206 "00207 "00206 % LATIN CAPITAL LETTER E WITH INVERTED BREVE \setXTXcharcodes "00207 "00207 "00206 % LATIN SMALL LETTER E WITH INVERTED BREVE \setXTXcharcodes "00208 "00209 "00208 % LATIN CAPITAL LETTER I WITH DOUBLE GRAVE \setXTXcharcodes "00209 "00209 "00208 % LATIN SMALL LETTER I WITH DOUBLE GRAVE \setXTXcharcodes "0020A "0020B "0020A % LATIN CAPITAL LETTER I WITH INVERTED BREVE \setXTXcharcodes "0020B "0020B "0020A % LATIN SMALL LETTER I WITH INVERTED BREVE \setXTXcharcodes "0020C "0020D "0020C % LATIN CAPITAL LETTER O WITH DOUBLE GRAVE \setXTXcharcodes "0020D "0020D "0020C % LATIN SMALL LETTER O WITH DOUBLE GRAVE \setXTXcharcodes "0020E "0020F "0020E % LATIN CAPITAL LETTER O WITH INVERTED BREVE \setXTXcharcodes "0020F "0020F "0020E % LATIN SMALL LETTER O WITH INVERTED BREVE \setXTXcharcodes "00210 "00211 "00210 % LATIN CAPITAL LETTER R WITH DOUBLE GRAVE \setXTXcharcodes "00211 "00211 "00210 % LATIN SMALL LETTER R WITH DOUBLE GRAVE \setXTXcharcodes "00212 "00213 "00212 % LATIN CAPITAL LETTER R WITH INVERTED BREVE \setXTXcharcodes "00213 "00213 "00212 % LATIN SMALL LETTER R WITH INVERTED BREVE \setXTXcharcodes "00214 "00215 "00214 % LATIN CAPITAL LETTER U WITH DOUBLE GRAVE \setXTXcharcodes "00215 "00215 "00214 % LATIN SMALL LETTER U WITH DOUBLE GRAVE \setXTXcharcodes "00216 "00217 "00216 % LATIN CAPITAL LETTER U WITH INVERTED BREVE \setXTXcharcodes "00217 "00217 "00216 % LATIN SMALL LETTER U WITH INVERTED BREVE \setXTXcharcodes "00218 "00219 "00218 % LATIN CAPITAL LETTER S WITH COMMA BELOW \setXTXcharcodes "00219 "00219 "00218 % LATIN SMALL LETTER S WITH COMMA BELOW \setXTXcharcodes "0021A "0021B "0021A % LATIN CAPITAL LETTER T WITH COMMA BELOW \setXTXcharcodes "0021B "0021B "0021A % LATIN SMALL LETTER T WITH COMMA BELOW \setXTXcharcodes "0021C "0021D "0021C % LATIN CAPITAL LETTER YOGH \setXTXcharcodes "0021D "0021D "0021C % LATIN SMALL LETTER YOGH \setXTXcharcodes "0021E "0021F "0021E % LATIN CAPITAL LETTER H WITH CARON \setXTXcharcodes "0021F "0021F "0021E % LATIN SMALL LETTER H WITH CARON \setXTXcharcodes "00220 "0019E "00220 % LATIN CAPITAL LETTER N WITH LONG RIGHT LEG \setXTXcharcodes "00221 "00221 "00221 % LATIN SMALL LETTER D WITH CURL \setXTXcharcodes "00222 "00223 "00222 % LATIN CAPITAL LETTER OU \setXTXcharcodes "00223 "00223 "00222 % LATIN SMALL LETTER OU \setXTXcharcodes "00224 "00225 "00224 % LATIN CAPITAL LETTER Z WITH HOOK \setXTXcharcodes "00225 "00225 "00224 % LATIN SMALL LETTER Z WITH HOOK \setXTXcharcodes "00226 "00227 "00226 % LATIN CAPITAL LETTER A WITH DOT ABOVE \setXTXcharcodes "00227 "00227 "00226 % LATIN SMALL LETTER A WITH DOT ABOVE \setXTXcharcodes "00228 "00229 "00228 % LATIN CAPITAL LETTER E WITH CEDILLA \setXTXcharcodes "00229 "00229 "00228 % LATIN SMALL LETTER E WITH CEDILLA \setXTXcharcodes "0022A "0022B "0022A % LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON \setXTXcharcodes "0022B "0022B "0022A % LATIN SMALL LETTER O WITH DIAERESIS AND MACRON \setXTXcharcodes "0022C "0022D "0022C % LATIN CAPITAL LETTER O WITH TILDE AND MACRON \setXTXcharcodes "0022D "0022D "0022C % LATIN SMALL LETTER O WITH TILDE AND MACRON \setXTXcharcodes "0022E "0022F "0022E % LATIN CAPITAL LETTER O WITH DOT ABOVE \setXTXcharcodes "0022F "0022F "0022E % LATIN SMALL LETTER O WITH DOT ABOVE \setXTXcharcodes "00230 "00231 "00230 % LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON \setXTXcharcodes "00231 "00231 "00230 % LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON \setXTXcharcodes "00232 "00233 "00232 % LATIN CAPITAL LETTER Y WITH MACRON \setXTXcharcodes "00233 "00233 "00232 % LATIN SMALL LETTER Y WITH MACRON \setXTXcharcodes "00234 "00234 "00234 % LATIN SMALL LETTER L WITH CURL \setXTXcharcodes "00235 "00235 "00235 % LATIN SMALL LETTER N WITH CURL \setXTXcharcodes "00236 "00236 "00236 % LATIN SMALL LETTER T WITH CURL \setXTXcharcodes "00237 "00237 "00237 % LATIN SMALL LETTER DOTLESS J \setXTXcharcodes "00238 "00238 "00238 % LATIN SMALL LETTER DB DIGRAPH \setXTXcharcodes "00239 "00239 "00239 % LATIN SMALL LETTER QP DIGRAPH \setXTXcharcodes "0023A "02C65 "0023A % LATIN CAPITAL LETTER A WITH STROKE \setXTXcharcodes "0023B "0023C "0023B % LATIN CAPITAL LETTER C WITH STROKE \setXTXcharcodes "0023C "0023C "0023B % LATIN SMALL LETTER C WITH STROKE \setXTXcharcodes "0023D "0019A "0023D % LATIN CAPITAL LETTER L WITH BAR \setXTXcharcodes "0023E "02C66 "0023E % LATIN CAPITAL LETTER T WITH DIAGONAL STROKE \setXTXcharcodes "0023F "0023F "0023F % LATIN SMALL LETTER S WITH SWASH TAIL \setXTXcharcodes "00240 "00240 "00240 % LATIN SMALL LETTER Z WITH SWASH TAIL \setXTXcharcodes "00241 "00242 "00241 % LATIN CAPITAL LETTER GLOTTAL STOP \setXTXcharcodes "00242 "00242 "00241 % LATIN SMALL LETTER GLOTTAL STOP \setXTXcharcodes "00243 "00180 "00243 % LATIN CAPITAL LETTER B WITH STROKE \setXTXcharcodes "00244 "00289 "00244 % LATIN CAPITAL LETTER U BAR \setXTXcharcodes "00245 "0028C "00245 % LATIN CAPITAL LETTER TURNED V \setXTXcharcodes "00246 "00247 "00246 % LATIN CAPITAL LETTER E WITH STROKE \setXTXcharcodes "00247 "00247 "00246 % LATIN SMALL LETTER E WITH STROKE \setXTXcharcodes "00248 "00249 "00248 % LATIN CAPITAL LETTER J WITH STROKE \setXTXcharcodes "00249 "00249 "00248 % LATIN SMALL LETTER J WITH STROKE \setXTXcharcodes "0024A "0024B "0024A % LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL \setXTXcharcodes "0024B "0024B "0024A % LATIN SMALL LETTER Q WITH HOOK TAIL \setXTXcharcodes "0024C "0024D "0024C % LATIN CAPITAL LETTER R WITH STROKE \setXTXcharcodes "0024D "0024D "0024C % LATIN SMALL LETTER R WITH STROKE \setXTXcharcodes "0024E "0024F "0024E % LATIN CAPITAL LETTER Y WITH STROKE \setXTXcharcodes "0024F "0024F "0024E % LATIN SMALL LETTER Y WITH STROKE \setXTXcharcodes "00250 "00250 "00250 % LATIN SMALL LETTER TURNED A \setXTXcharcodes "00251 "00251 "00251 % LATIN SMALL LETTER ALPHA \setXTXcharcodes "00252 "00252 "00252 % LATIN SMALL LETTER TURNED ALPHA \setXTXcharcodes "00253 "00253 "00181 % LATIN SMALL LETTER B WITH HOOK \setXTXcharcodes "00254 "00254 "00186 % LATIN SMALL LETTER OPEN O \setXTXcharcodes "00255 "00255 "00255 % LATIN SMALL LETTER C WITH CURL \setXTXcharcodes "00256 "00256 "00189 % LATIN SMALL LETTER D WITH TAIL \setXTXcharcodes "00257 "00257 "0018A % LATIN SMALL LETTER D WITH HOOK \setXTXcharcodes "00258 "00258 "00258 % LATIN SMALL LETTER REVERSED E \setXTXcharcodes "00259 "00259 "0018F % LATIN SMALL LETTER SCHWA \setXTXcharcodes "0025A "0025A "0025A % LATIN SMALL LETTER SCHWA WITH HOOK \setXTXcharcodes "0025B "0025B "00190 % LATIN SMALL LETTER OPEN E \setXTXcharcodes "0025C "0025C "0025C % LATIN SMALL LETTER REVERSED OPEN E \setXTXcharcodes "0025D "0025D "0025D % LATIN SMALL LETTER REVERSED OPEN E WITH HOOK \setXTXcharcodes "0025E "0025E "0025E % LATIN SMALL LETTER CLOSED REVERSED OPEN E \setXTXcharcodes "0025F "0025F "0025F % LATIN SMALL LETTER DOTLESS J WITH STROKE \setXTXcharcodes "00260 "00260 "00193 % LATIN SMALL LETTER G WITH HOOK \setXTXcharcodes "00261 "00261 "00261 % LATIN SMALL LETTER SCRIPT G \setXTXcharcodes "00262 "00262 "00262 % LATIN LETTER SMALL CAPITAL G \setXTXcharcodes "00263 "00263 "00194 % LATIN SMALL LETTER GAMMA \setXTXcharcodes "00264 "00264 "00264 % LATIN SMALL LETTER RAMS HORN \setXTXcharcodes "00265 "00265 "00265 % LATIN SMALL LETTER TURNED H \setXTXcharcodes "00266 "00266 "00266 % LATIN SMALL LETTER H WITH HOOK \setXTXcharcodes "00267 "00267 "00267 % LATIN SMALL LETTER HENG WITH HOOK \setXTXcharcodes "00268 "00268 "00197 % LATIN SMALL LETTER I WITH STROKE \setXTXcharcodes "00269 "00269 "00196 % LATIN SMALL LETTER IOTA \setXTXcharcodes "0026A "0026A "0026A % LATIN LETTER SMALL CAPITAL I \setXTXcharcodes "0026B "0026B "02C62 % LATIN SMALL LETTER L WITH MIDDLE TILDE \setXTXcharcodes "0026C "0026C "0026C % LATIN SMALL LETTER L WITH BELT \setXTXcharcodes "0026D "0026D "0026D % LATIN SMALL LETTER L WITH RETROFLEX HOOK \setXTXcharcodes "0026E "0026E "0026E % LATIN SMALL LETTER LEZH \setXTXcharcodes "0026F "0026F "0019C % LATIN SMALL LETTER TURNED M \setXTXcharcodes "00270 "00270 "00270 % LATIN SMALL LETTER TURNED M WITH LONG LEG \setXTXcharcodes "00271 "00271 "00271 % LATIN SMALL LETTER M WITH HOOK \setXTXcharcodes "00272 "00272 "0019D % LATIN SMALL LETTER N WITH LEFT HOOK \setXTXcharcodes "00273 "00273 "00273 % LATIN SMALL LETTER N WITH RETROFLEX HOOK \setXTXcharcodes "00274 "00274 "00274 % LATIN LETTER SMALL CAPITAL N \setXTXcharcodes "00275 "00275 "0019F % LATIN SMALL LETTER BARRED O \setXTXcharcodes "00276 "00276 "00276 % LATIN LETTER SMALL CAPITAL OE \setXTXcharcodes "00277 "00277 "00277 % LATIN SMALL LETTER CLOSED OMEGA \setXTXcharcodes "00278 "00278 "00278 % LATIN SMALL LETTER PHI \setXTXcharcodes "00279 "00279 "00279 % LATIN SMALL LETTER TURNED R \setXTXcharcodes "0027A "0027A "0027A % LATIN SMALL LETTER TURNED R WITH LONG LEG \setXTXcharcodes "0027B "0027B "0027B % LATIN SMALL LETTER TURNED R WITH HOOK \setXTXcharcodes "0027C "0027C "0027C % LATIN SMALL LETTER R WITH LONG LEG \setXTXcharcodes "0027D "0027D "02C64 % LATIN SMALL LETTER R WITH TAIL \setXTXcharcodes "0027E "0027E "0027E % LATIN SMALL LETTER R WITH FISHHOOK \setXTXcharcodes "0027F "0027F "0027F % LATIN SMALL LETTER REVERSED R WITH FISHHOOK \setXTXcharcodes "00280 "00280 "001A6 % LATIN LETTER SMALL CAPITAL R \setXTXcharcodes "00281 "00281 "00281 % LATIN LETTER SMALL CAPITAL INVERTED R \setXTXcharcodes "00282 "00282 "00282 % LATIN SMALL LETTER S WITH HOOK \setXTXcharcodes "00283 "00283 "001A9 % LATIN SMALL LETTER ESH \setXTXcharcodes "00284 "00284 "00284 % LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK \setXTXcharcodes "00285 "00285 "00285 % LATIN SMALL LETTER SQUAT REVERSED ESH \setXTXcharcodes "00286 "00286 "00286 % LATIN SMALL LETTER ESH WITH CURL \setXTXcharcodes "00287 "00287 "00287 % LATIN SMALL LETTER TURNED T \setXTXcharcodes "00288 "00288 "001AE % LATIN SMALL LETTER T WITH RETROFLEX HOOK \setXTXcharcodes "00289 "00289 "00244 % LATIN SMALL LETTER U BAR \setXTXcharcodes "0028A "0028A "001B1 % LATIN SMALL LETTER UPSILON \setXTXcharcodes "0028B "0028B "001B2 % LATIN SMALL LETTER V WITH HOOK \setXTXcharcodes "0028C "0028C "00245 % LATIN SMALL LETTER TURNED V \setXTXcharcodes "0028D "0028D "0028D % LATIN SMALL LETTER TURNED W \setXTXcharcodes "0028E "0028E "0028E % LATIN SMALL LETTER TURNED Y \setXTXcharcodes "0028F "0028F "0028F % LATIN LETTER SMALL CAPITAL Y \setXTXcharcodes "00290 "00290 "00290 % LATIN SMALL LETTER Z WITH RETROFLEX HOOK \setXTXcharcodes "00291 "00291 "00291 % LATIN SMALL LETTER Z WITH CURL \setXTXcharcodes "00292 "00292 "001B7 % LATIN SMALL LETTER EZH \setXTXcharcodes "00293 "00293 "00293 % LATIN SMALL LETTER EZH WITH CURL \setXTXcharcodes "00295 "00295 "00295 % LATIN LETTER PHARYNGEAL VOICED FRICATIVE \setXTXcharcodes "00296 "00296 "00296 % LATIN LETTER INVERTED GLOTTAL STOP \setXTXcharcodes "00297 "00297 "00297 % LATIN LETTER STRETCHED C \setXTXcharcodes "00298 "00298 "00298 % LATIN LETTER BILABIAL CLICK \setXTXcharcodes "00299 "00299 "00299 % LATIN LETTER SMALL CAPITAL B \setXTXcharcodes "0029A "0029A "0029A % LATIN SMALL LETTER CLOSED OPEN E \setXTXcharcodes "0029B "0029B "0029B % LATIN LETTER SMALL CAPITAL G WITH HOOK \setXTXcharcodes "0029C "0029C "0029C % LATIN LETTER SMALL CAPITAL H \setXTXcharcodes "0029D "0029D "0029D % LATIN SMALL LETTER J WITH CROSSED-TAIL \setXTXcharcodes "0029E "0029E "0029E % LATIN SMALL LETTER TURNED K \setXTXcharcodes "0029F "0029F "0029F % LATIN LETTER SMALL CAPITAL L \setXTXcharcodes "002A0 "002A0 "002A0 % LATIN SMALL LETTER Q WITH HOOK \setXTXcharcodes "002A1 "002A1 "002A1 % LATIN LETTER GLOTTAL STOP WITH STROKE \setXTXcharcodes "002A2 "002A2 "002A2 % LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE \setXTXcharcodes "002A3 "002A3 "002A3 % LATIN SMALL LETTER DZ DIGRAPH \setXTXcharcodes "002A4 "002A4 "002A4 % LATIN SMALL LETTER DEZH DIGRAPH \setXTXcharcodes "002A5 "002A5 "002A5 % LATIN SMALL LETTER DZ DIGRAPH WITH CURL \setXTXcharcodes "002A6 "002A6 "002A6 % LATIN SMALL LETTER TS DIGRAPH \setXTXcharcodes "002A7 "002A7 "002A7 % LATIN SMALL LETTER TESH DIGRAPH \setXTXcharcodes "002A8 "002A8 "002A8 % LATIN SMALL LETTER TC DIGRAPH WITH CURL \setXTXcharcodes "002A9 "002A9 "002A9 % LATIN SMALL LETTER FENG DIGRAPH \setXTXcharcodes "002AA "002AA "002AA % LATIN SMALL LETTER LS DIGRAPH \setXTXcharcodes "002AB "002AB "002AB % LATIN SMALL LETTER LZ DIGRAPH \setXTXcharcodes "002AC "002AC "002AC % LATIN LETTER BILABIAL PERCUSSIVE \setXTXcharcodes "002AD "002AD "002AD % LATIN LETTER BIDENTAL PERCUSSIVE \setXTXcharcodes "002AE "002AE "002AE % LATIN SMALL LETTER TURNED H WITH FISHHOOK \setXTXcharcodes "002AF "002AF "002AF % LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL \setXTXcharcodes "0037B "0037B "003FD % GREEK SMALL REVERSED LUNATE SIGMA SYMBOL \setXTXcharcodes "0037C "0037C "003FE % GREEK SMALL DOTTED LUNATE SIGMA SYMBOL \setXTXcharcodes "0037D "0037D "003FF % GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL \setXTXcharcodes "00386 "003AC "00386 % GREEK CAPITAL LETTER ALPHA WITH TONOS \setXTXcharcodes "00388 "003AD "00388 % GREEK CAPITAL LETTER EPSILON WITH TONOS \setXTXcharcodes "00389 "003AE "00389 % GREEK CAPITAL LETTER ETA WITH TONOS \setXTXcharcodes "0038A "003AF "0038A % GREEK CAPITAL LETTER IOTA WITH TONOS \setXTXcharcodes "0038C "003CC "0038C % GREEK CAPITAL LETTER OMICRON WITH TONOS \setXTXcharcodes "0038E "003CD "0038E % GREEK CAPITAL LETTER UPSILON WITH TONOS \setXTXcharcodes "0038F "003CE "0038F % GREEK CAPITAL LETTER OMEGA WITH TONOS \setXTXcharcodes "00390 "00390 "00390 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS \setXTXcharcodes "00391 "003B1 "00391 % GREEK CAPITAL LETTER ALPHA \setXTXcharcodes "00392 "003B2 "00392 % GREEK CAPITAL LETTER BETA \setXTXcharcodes "00393 "003B3 "00393 % GREEK CAPITAL LETTER GAMMA \setXTXcharcodes "00394 "003B4 "00394 % GREEK CAPITAL LETTER DELTA \setXTXcharcodes "00395 "003B5 "00395 % GREEK CAPITAL LETTER EPSILON \setXTXcharcodes "00396 "003B6 "00396 % GREEK CAPITAL LETTER ZETA \setXTXcharcodes "00397 "003B7 "00397 % GREEK CAPITAL LETTER ETA \setXTXcharcodes "00398 "003B8 "00398 % GREEK CAPITAL LETTER THETA \setXTXcharcodes "00399 "003B9 "00399 % GREEK CAPITAL LETTER IOTA \setXTXcharcodes "0039A "003BA "0039A % GREEK CAPITAL LETTER KAPPA \setXTXcharcodes "0039B "003BB "0039B % GREEK CAPITAL LETTER LAMDA \setXTXcharcodes "0039C "003BC "0039C % GREEK CAPITAL LETTER MU \setXTXcharcodes "0039D "003BD "0039D % GREEK CAPITAL LETTER NU \setXTXcharcodes "0039E "003BE "0039E % GREEK CAPITAL LETTER XI \setXTXcharcodes "0039F "003BF "0039F % GREEK CAPITAL LETTER OMICRON \setXTXcharcodes "003A0 "003C0 "003A0 % GREEK CAPITAL LETTER PI \setXTXcharcodes "003A1 "003C1 "003A1 % GREEK CAPITAL LETTER RHO \setXTXcharcodes "003A3 "003C3 "003A3 % GREEK CAPITAL LETTER SIGMA \setXTXcharcodes "003A4 "003C4 "003A4 % GREEK CAPITAL LETTER TAU \setXTXcharcodes "003A5 "003C5 "003A5 % GREEK CAPITAL LETTER UPSILON \setXTXcharcodes "003A6 "003C6 "003A6 % GREEK CAPITAL LETTER PHI \setXTXcharcodes "003A7 "003C7 "003A7 % GREEK CAPITAL LETTER CHI \setXTXcharcodes "003A8 "003C8 "003A8 % GREEK CAPITAL LETTER PSI \setXTXcharcodes "003A9 "003C9 "003A9 % GREEK CAPITAL LETTER OMEGA \setXTXcharcodes "003AA "003CA "003AA % GREEK CAPITAL LETTER IOTA WITH DIALYTIKA \setXTXcharcodes "003AB "003CB "003AB % GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA \setXTXcharcodes "003AC "003AC "00386 % GREEK SMALL LETTER ALPHA WITH TONOS \setXTXcharcodes "003AD "003AD "00388 % GREEK SMALL LETTER EPSILON WITH TONOS \setXTXcharcodes "003AE "003AE "00389 % GREEK SMALL LETTER ETA WITH TONOS \setXTXcharcodes "003AF "003AF "0038A % GREEK SMALL LETTER IOTA WITH TONOS \setXTXcharcodes "003B0 "003B0 "003B0 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS \setXTXcharcodes "003B1 "003B1 "00391 % GREEK SMALL LETTER ALPHA \setXTXcharcodes "003B2 "003B2 "00392 % GREEK SMALL LETTER BETA \setXTXcharcodes "003B3 "003B3 "00393 % GREEK SMALL LETTER GAMMA \setXTXcharcodes "003B4 "003B4 "00394 % GREEK SMALL LETTER DELTA \setXTXcharcodes "003B5 "003B5 "00395 % GREEK SMALL LETTER EPSILON \setXTXcharcodes "003B6 "003B6 "00396 % GREEK SMALL LETTER ZETA \setXTXcharcodes "003B7 "003B7 "00397 % GREEK SMALL LETTER ETA \setXTXcharcodes "003B8 "003B8 "00398 % GREEK SMALL LETTER THETA \setXTXcharcodes "003B9 "003B9 "00399 % GREEK SMALL LETTER IOTA \setXTXcharcodes "003BA "003BA "0039A % GREEK SMALL LETTER KAPPA \setXTXcharcodes "003BB "003BB "0039B % GREEK SMALL LETTER LAMDA \setXTXcharcodes "003BC "003BC "0039C % GREEK SMALL LETTER MU \setXTXcharcodes "003BD "003BD "0039D % GREEK SMALL LETTER NU \setXTXcharcodes "003BE "003BE "0039E % GREEK SMALL LETTER XI \setXTXcharcodes "003BF "003BF "0039F % GREEK SMALL LETTER OMICRON \setXTXcharcodes "003C0 "003C0 "003A0 % GREEK SMALL LETTER PI \setXTXcharcodes "003C1 "003C1 "003A1 % GREEK SMALL LETTER RHO \setXTXcharcodes "003C2 "003C2 "003A3 % GREEK SMALL LETTER FINAL SIGMA \setXTXcharcodes "003C3 "003C3 "003A3 % GREEK SMALL LETTER SIGMA \setXTXcharcodes "003C4 "003C4 "003A4 % GREEK SMALL LETTER TAU \setXTXcharcodes "003C5 "003C5 "003A5 % GREEK SMALL LETTER UPSILON \setXTXcharcodes "003C6 "003C6 "003A6 % GREEK SMALL LETTER PHI \setXTXcharcodes "003C7 "003C7 "003A7 % GREEK SMALL LETTER CHI \setXTXcharcodes "003C8 "003C8 "003A8 % GREEK SMALL LETTER PSI \setXTXcharcodes "003C9 "003C9 "003A9 % GREEK SMALL LETTER OMEGA \setXTXcharcodes "003CA "003CA "003AA % GREEK SMALL LETTER IOTA WITH DIALYTIKA \setXTXcharcodes "003CB "003CB "003AB % GREEK SMALL LETTER UPSILON WITH DIALYTIKA \setXTXcharcodes "003CC "003CC "0038C % GREEK SMALL LETTER OMICRON WITH TONOS \setXTXcharcodes "003CD "003CD "0038E % GREEK SMALL LETTER UPSILON WITH TONOS \setXTXcharcodes "003CE "003CE "0038F % GREEK SMALL LETTER OMEGA WITH TONOS \setXTXcharcodes "003D0 "003D0 "00392 % GREEK BETA SYMBOL \setXTXcharcodes "003D1 "003D1 "00398 % GREEK THETA SYMBOL \setXTXcharcodes "003D2 "003D2 "003D2 % GREEK UPSILON WITH HOOK SYMBOL \setXTXcharcodes "003D3 "003D3 "003D3 % GREEK UPSILON WITH ACUTE AND HOOK SYMBOL \setXTXcharcodes "003D4 "003D4 "003D4 % GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL \setXTXcharcodes "003D5 "003D5 "003A6 % GREEK PHI SYMBOL \setXTXcharcodes "003D6 "003D6 "003A0 % GREEK PI SYMBOL \setXTXcharcodes "003D7 "003D7 "003D7 % GREEK KAI SYMBOL \setXTXcharcodes "003D8 "003D9 "003D8 % GREEK LETTER ARCHAIC KOPPA \setXTXcharcodes "003D9 "003D9 "003D8 % GREEK SMALL LETTER ARCHAIC KOPPA \setXTXcharcodes "003DA "003DB "003DA % GREEK LETTER STIGMA \setXTXcharcodes "003DB "003DB "003DA % GREEK SMALL LETTER STIGMA \setXTXcharcodes "003DC "003DD "003DC % GREEK LETTER DIGAMMA \setXTXcharcodes "003DD "003DD "003DC % GREEK SMALL LETTER DIGAMMA \setXTXcharcodes "003DE "003DF "003DE % GREEK LETTER KOPPA \setXTXcharcodes "003DF "003DF "003DE % GREEK SMALL LETTER KOPPA \setXTXcharcodes "003E0 "003E1 "003E0 % GREEK LETTER SAMPI \setXTXcharcodes "003E1 "003E1 "003E0 % GREEK SMALL LETTER SAMPI \setXTXcharcodes "003E2 "003E3 "003E2 % COPTIC CAPITAL LETTER SHEI \setXTXcharcodes "003E3 "003E3 "003E2 % COPTIC SMALL LETTER SHEI \setXTXcharcodes "003E4 "003E5 "003E4 % COPTIC CAPITAL LETTER FEI \setXTXcharcodes "003E5 "003E5 "003E4 % COPTIC SMALL LETTER FEI \setXTXcharcodes "003E6 "003E7 "003E6 % COPTIC CAPITAL LETTER KHEI \setXTXcharcodes "003E7 "003E7 "003E6 % COPTIC SMALL LETTER KHEI \setXTXcharcodes "003E8 "003E9 "003E8 % COPTIC CAPITAL LETTER HORI \setXTXcharcodes "003E9 "003E9 "003E8 % COPTIC SMALL LETTER HORI \setXTXcharcodes "003EA "003EB "003EA % COPTIC CAPITAL LETTER GANGIA \setXTXcharcodes "003EB "003EB "003EA % COPTIC SMALL LETTER GANGIA \setXTXcharcodes "003EC "003ED "003EC % COPTIC CAPITAL LETTER SHIMA \setXTXcharcodes "003ED "003ED "003EC % COPTIC SMALL LETTER SHIMA \setXTXcharcodes "003EE "003EF "003EE % COPTIC CAPITAL LETTER DEI \setXTXcharcodes "003EF "003EF "003EE % COPTIC SMALL LETTER DEI \setXTXcharcodes "003F0 "003F0 "0039A % GREEK KAPPA SYMBOL \setXTXcharcodes "003F1 "003F1 "003A1 % GREEK RHO SYMBOL \setXTXcharcodes "003F2 "003F2 "003F9 % GREEK LUNATE SIGMA SYMBOL \setXTXcharcodes "003F3 "003F3 "003F3 % GREEK LETTER YOT \setXTXcharcodes "003F4 "003B8 "003F4 % GREEK CAPITAL THETA SYMBOL \setXTXcharcodes "003F5 "003F5 "00395 % GREEK LUNATE EPSILON SYMBOL \setXTXcharcodes "003F7 "003F8 "003F7 % GREEK CAPITAL LETTER SHO \setXTXcharcodes "003F8 "003F8 "003F7 % GREEK SMALL LETTER SHO \setXTXcharcodes "003F9 "003F2 "003F9 % GREEK CAPITAL LUNATE SIGMA SYMBOL \setXTXcharcodes "003FA "003FB "003FA % GREEK CAPITAL LETTER SAN \setXTXcharcodes "003FB "003FB "003FA % GREEK SMALL LETTER SAN \setXTXcharcodes "003FC "003FC "003FC % GREEK RHO WITH STROKE SYMBOL \setXTXcharcodes "003FD "0037B "003FD % GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL \setXTXcharcodes "003FE "0037C "003FE % GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL \setXTXcharcodes "003FF "0037D "003FF % GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL \setXTXcharcodes "00400 "00450 "00400 % CYRILLIC CAPITAL LETTER IE WITH GRAVE \setXTXcharcodes "00401 "00451 "00401 % CYRILLIC CAPITAL LETTER IO \setXTXcharcodes "00402 "00452 "00402 % CYRILLIC CAPITAL LETTER DJE \setXTXcharcodes "00403 "00453 "00403 % CYRILLIC CAPITAL LETTER GJE \setXTXcharcodes "00404 "00454 "00404 % CYRILLIC CAPITAL LETTER UKRAINIAN IE \setXTXcharcodes "00405 "00455 "00405 % CYRILLIC CAPITAL LETTER DZE \setXTXcharcodes "00406 "00456 "00406 % CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I \setXTXcharcodes "00407 "00457 "00407 % CYRILLIC CAPITAL LETTER YI \setXTXcharcodes "00408 "00458 "00408 % CYRILLIC CAPITAL LETTER JE \setXTXcharcodes "00409 "00459 "00409 % CYRILLIC CAPITAL LETTER LJE \setXTXcharcodes "0040A "0045A "0040A % CYRILLIC CAPITAL LETTER NJE \setXTXcharcodes "0040B "0045B "0040B % CYRILLIC CAPITAL LETTER TSHE \setXTXcharcodes "0040C "0045C "0040C % CYRILLIC CAPITAL LETTER KJE \setXTXcharcodes "0040D "0045D "0040D % CYRILLIC CAPITAL LETTER I WITH GRAVE \setXTXcharcodes "0040E "0045E "0040E % CYRILLIC CAPITAL LETTER SHORT U \setXTXcharcodes "0040F "0045F "0040F % CYRILLIC CAPITAL LETTER DZHE \setXTXcharcodes "00410 "00430 "00410 % CYRILLIC CAPITAL LETTER A \setXTXcharcodes "00411 "00431 "00411 % CYRILLIC CAPITAL LETTER BE \setXTXcharcodes "00412 "00432 "00412 % CYRILLIC CAPITAL LETTER VE \setXTXcharcodes "00413 "00433 "00413 % CYRILLIC CAPITAL LETTER GHE \setXTXcharcodes "00414 "00434 "00414 % CYRILLIC CAPITAL LETTER DE \setXTXcharcodes "00415 "00435 "00415 % CYRILLIC CAPITAL LETTER IE \setXTXcharcodes "00416 "00436 "00416 % CYRILLIC CAPITAL LETTER ZHE \setXTXcharcodes "00417 "00437 "00417 % CYRILLIC CAPITAL LETTER ZE \setXTXcharcodes "00418 "00438 "00418 % CYRILLIC CAPITAL LETTER I \setXTXcharcodes "00419 "00439 "00419 % CYRILLIC CAPITAL LETTER SHORT I \setXTXcharcodes "0041A "0043A "0041A % CYRILLIC CAPITAL LETTER KA \setXTXcharcodes "0041B "0043B "0041B % CYRILLIC CAPITAL LETTER EL \setXTXcharcodes "0041C "0043C "0041C % CYRILLIC CAPITAL LETTER EM \setXTXcharcodes "0041D "0043D "0041D % CYRILLIC CAPITAL LETTER EN \setXTXcharcodes "0041E "0043E "0041E % CYRILLIC CAPITAL LETTER O \setXTXcharcodes "0041F "0043F "0041F % CYRILLIC CAPITAL LETTER PE \setXTXcharcodes "00420 "00440 "00420 % CYRILLIC CAPITAL LETTER ER \setXTXcharcodes "00421 "00441 "00421 % CYRILLIC CAPITAL LETTER ES \setXTXcharcodes "00422 "00442 "00422 % CYRILLIC CAPITAL LETTER TE \setXTXcharcodes "00423 "00443 "00423 % CYRILLIC CAPITAL LETTER U \setXTXcharcodes "00424 "00444 "00424 % CYRILLIC CAPITAL LETTER EF \setXTXcharcodes "00425 "00445 "00425 % CYRILLIC CAPITAL LETTER HA \setXTXcharcodes "00426 "00446 "00426 % CYRILLIC CAPITAL LETTER TSE \setXTXcharcodes "00427 "00447 "00427 % CYRILLIC CAPITAL LETTER CHE \setXTXcharcodes "00428 "00448 "00428 % CYRILLIC CAPITAL LETTER SHA \setXTXcharcodes "00429 "00449 "00429 % CYRILLIC CAPITAL LETTER SHCHA \setXTXcharcodes "0042A "0044A "0042A % CYRILLIC CAPITAL LETTER HARD SIGN \setXTXcharcodes "0042B "0044B "0042B % CYRILLIC CAPITAL LETTER YERU \setXTXcharcodes "0042C "0044C "0042C % CYRILLIC CAPITAL LETTER SOFT SIGN \setXTXcharcodes "0042D "0044D "0042D % CYRILLIC CAPITAL LETTER E \setXTXcharcodes "0042E "0044E "0042E % CYRILLIC CAPITAL LETTER YU \setXTXcharcodes "0042F "0044F "0042F % CYRILLIC CAPITAL LETTER YA \setXTXcharcodes "00430 "00430 "00410 % CYRILLIC SMALL LETTER A \setXTXcharcodes "00431 "00431 "00411 % CYRILLIC SMALL LETTER BE \setXTXcharcodes "00432 "00432 "00412 % CYRILLIC SMALL LETTER VE \setXTXcharcodes "00433 "00433 "00413 % CYRILLIC SMALL LETTER GHE \setXTXcharcodes "00434 "00434 "00414 % CYRILLIC SMALL LETTER DE \setXTXcharcodes "00435 "00435 "00415 % CYRILLIC SMALL LETTER IE \setXTXcharcodes "00436 "00436 "00416 % CYRILLIC SMALL LETTER ZHE \setXTXcharcodes "00437 "00437 "00417 % CYRILLIC SMALL LETTER ZE \setXTXcharcodes "00438 "00438 "00418 % CYRILLIC SMALL LETTER I \setXTXcharcodes "00439 "00439 "00419 % CYRILLIC SMALL LETTER SHORT I \setXTXcharcodes "0043A "0043A "0041A % CYRILLIC SMALL LETTER KA \setXTXcharcodes "0043B "0043B "0041B % CYRILLIC SMALL LETTER EL \setXTXcharcodes "0043C "0043C "0041C % CYRILLIC SMALL LETTER EM \setXTXcharcodes "0043D "0043D "0041D % CYRILLIC SMALL LETTER EN \setXTXcharcodes "0043E "0043E "0041E % CYRILLIC SMALL LETTER O \setXTXcharcodes "0043F "0043F "0041F % CYRILLIC SMALL LETTER PE \setXTXcharcodes "00440 "00440 "00420 % CYRILLIC SMALL LETTER ER \setXTXcharcodes "00441 "00441 "00421 % CYRILLIC SMALL LETTER ES \setXTXcharcodes "00442 "00442 "00422 % CYRILLIC SMALL LETTER TE \setXTXcharcodes "00443 "00443 "00423 % CYRILLIC SMALL LETTER U \setXTXcharcodes "00444 "00444 "00424 % CYRILLIC SMALL LETTER EF \setXTXcharcodes "00445 "00445 "00425 % CYRILLIC SMALL LETTER HA \setXTXcharcodes "00446 "00446 "00426 % CYRILLIC SMALL LETTER TSE \setXTXcharcodes "00447 "00447 "00427 % CYRILLIC SMALL LETTER CHE \setXTXcharcodes "00448 "00448 "00428 % CYRILLIC SMALL LETTER SHA \setXTXcharcodes "00449 "00449 "00429 % CYRILLIC SMALL LETTER SHCHA \setXTXcharcodes "0044A "0044A "0042A % CYRILLIC SMALL LETTER HARD SIGN \setXTXcharcodes "0044B "0044B "0042B % CYRILLIC SMALL LETTER YERU \setXTXcharcodes "0044C "0044C "0042C % CYRILLIC SMALL LETTER SOFT SIGN \setXTXcharcodes "0044D "0044D "0042D % CYRILLIC SMALL LETTER E \setXTXcharcodes "0044E "0044E "0042E % CYRILLIC SMALL LETTER YU \setXTXcharcodes "0044F "0044F "0042F % CYRILLIC SMALL LETTER YA \setXTXcharcodes "00450 "00450 "00400 % CYRILLIC SMALL LETTER IE WITH GRAVE \setXTXcharcodes "00451 "00451 "00401 % CYRILLIC SMALL LETTER IO \setXTXcharcodes "00452 "00452 "00402 % CYRILLIC SMALL LETTER DJE \setXTXcharcodes "00453 "00453 "00403 % CYRILLIC SMALL LETTER GJE \setXTXcharcodes "00454 "00454 "00404 % CYRILLIC SMALL LETTER UKRAINIAN IE \setXTXcharcodes "00455 "00455 "00405 % CYRILLIC SMALL LETTER DZE \setXTXcharcodes "00456 "00456 "00406 % CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I \setXTXcharcodes "00457 "00457 "00407 % CYRILLIC SMALL LETTER YI \setXTXcharcodes "00458 "00458 "00408 % CYRILLIC SMALL LETTER JE \setXTXcharcodes "00459 "00459 "00409 % CYRILLIC SMALL LETTER LJE \setXTXcharcodes "0045A "0045A "0040A % CYRILLIC SMALL LETTER NJE \setXTXcharcodes "0045B "0045B "0040B % CYRILLIC SMALL LETTER TSHE \setXTXcharcodes "0045C "0045C "0040C % CYRILLIC SMALL LETTER KJE \setXTXcharcodes "0045D "0045D "0040D % CYRILLIC SMALL LETTER I WITH GRAVE \setXTXcharcodes "0045E "0045E "0040E % CYRILLIC SMALL LETTER SHORT U \setXTXcharcodes "0045F "0045F "0040F % CYRILLIC SMALL LETTER DZHE \setXTXcharcodes "00460 "00461 "00460 % CYRILLIC CAPITAL LETTER OMEGA \setXTXcharcodes "00461 "00461 "00460 % CYRILLIC SMALL LETTER OMEGA \setXTXcharcodes "00462 "00463 "00462 % CYRILLIC CAPITAL LETTER YAT \setXTXcharcodes "00463 "00463 "00462 % CYRILLIC SMALL LETTER YAT \setXTXcharcodes "00464 "00465 "00464 % CYRILLIC CAPITAL LETTER IOTIFIED E \setXTXcharcodes "00465 "00465 "00464 % CYRILLIC SMALL LETTER IOTIFIED E \setXTXcharcodes "00466 "00467 "00466 % CYRILLIC CAPITAL LETTER LITTLE YUS \setXTXcharcodes "00467 "00467 "00466 % CYRILLIC SMALL LETTER LITTLE YUS \setXTXcharcodes "00468 "00469 "00468 % CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS \setXTXcharcodes "00469 "00469 "00468 % CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS \setXTXcharcodes "0046A "0046B "0046A % CYRILLIC CAPITAL LETTER BIG YUS \setXTXcharcodes "0046B "0046B "0046A % CYRILLIC SMALL LETTER BIG YUS \setXTXcharcodes "0046C "0046D "0046C % CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS \setXTXcharcodes "0046D "0046D "0046C % CYRILLIC SMALL LETTER IOTIFIED BIG YUS \setXTXcharcodes "0046E "0046F "0046E % CYRILLIC CAPITAL LETTER KSI \setXTXcharcodes "0046F "0046F "0046E % CYRILLIC SMALL LETTER KSI \setXTXcharcodes "00470 "00471 "00470 % CYRILLIC CAPITAL LETTER PSI \setXTXcharcodes "00471 "00471 "00470 % CYRILLIC SMALL LETTER PSI \setXTXcharcodes "00472 "00473 "00472 % CYRILLIC CAPITAL LETTER FITA \setXTXcharcodes "00473 "00473 "00472 % CYRILLIC SMALL LETTER FITA \setXTXcharcodes "00474 "00475 "00474 % CYRILLIC CAPITAL LETTER IZHITSA \setXTXcharcodes "00475 "00475 "00474 % CYRILLIC SMALL LETTER IZHITSA \setXTXcharcodes "00476 "00477 "00476 % CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT \setXTXcharcodes "00477 "00477 "00476 % CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT \setXTXcharcodes "00478 "00479 "00478 % CYRILLIC CAPITAL LETTER UK \setXTXcharcodes "00479 "00479 "00478 % CYRILLIC SMALL LETTER UK \setXTXcharcodes "0047A "0047B "0047A % CYRILLIC CAPITAL LETTER ROUND OMEGA \setXTXcharcodes "0047B "0047B "0047A % CYRILLIC SMALL LETTER ROUND OMEGA \setXTXcharcodes "0047C "0047D "0047C % CYRILLIC CAPITAL LETTER OMEGA WITH TITLO \setXTXcharcodes "0047D "0047D "0047C % CYRILLIC SMALL LETTER OMEGA WITH TITLO \setXTXcharcodes "0047E "0047F "0047E % CYRILLIC CAPITAL LETTER OT \setXTXcharcodes "0047F "0047F "0047E % CYRILLIC SMALL LETTER OT \setXTXcharcodes "00480 "00481 "00480 % CYRILLIC CAPITAL LETTER KOPPA \setXTXcharcodes "00481 "00481 "00480 % CYRILLIC SMALL LETTER KOPPA \setXTXcharcodes "0048A "0048B "0048A % CYRILLIC CAPITAL LETTER SHORT I WITH TAIL \setXTXcharcodes "0048B "0048B "0048A % CYRILLIC SMALL LETTER SHORT I WITH TAIL \setXTXcharcodes "0048C "0048D "0048C % CYRILLIC CAPITAL LETTER SEMISOFT SIGN \setXTXcharcodes "0048D "0048D "0048C % CYRILLIC SMALL LETTER SEMISOFT SIGN \setXTXcharcodes "0048E "0048F "0048E % CYRILLIC CAPITAL LETTER ER WITH TICK \setXTXcharcodes "0048F "0048F "0048E % CYRILLIC SMALL LETTER ER WITH TICK \setXTXcharcodes "00490 "00491 "00490 % CYRILLIC CAPITAL LETTER GHE WITH UPTURN \setXTXcharcodes "00491 "00491 "00490 % CYRILLIC SMALL LETTER GHE WITH UPTURN \setXTXcharcodes "00492 "00493 "00492 % CYRILLIC CAPITAL LETTER GHE WITH STROKE \setXTXcharcodes "00493 "00493 "00492 % CYRILLIC SMALL LETTER GHE WITH STROKE \setXTXcharcodes "00494 "00495 "00494 % CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK \setXTXcharcodes "00495 "00495 "00494 % CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK \setXTXcharcodes "00496 "00497 "00496 % CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER \setXTXcharcodes "00497 "00497 "00496 % CYRILLIC SMALL LETTER ZHE WITH DESCENDER \setXTXcharcodes "00498 "00499 "00498 % CYRILLIC CAPITAL LETTER ZE WITH DESCENDER \setXTXcharcodes "00499 "00499 "00498 % CYRILLIC SMALL LETTER ZE WITH DESCENDER \setXTXcharcodes "0049A "0049B "0049A % CYRILLIC CAPITAL LETTER KA WITH DESCENDER \setXTXcharcodes "0049B "0049B "0049A % CYRILLIC SMALL LETTER KA WITH DESCENDER \setXTXcharcodes "0049C "0049D "0049C % CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE \setXTXcharcodes "0049D "0049D "0049C % CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE \setXTXcharcodes "0049E "0049F "0049E % CYRILLIC CAPITAL LETTER KA WITH STROKE \setXTXcharcodes "0049F "0049F "0049E % CYRILLIC SMALL LETTER KA WITH STROKE \setXTXcharcodes "004A0 "004A1 "004A0 % CYRILLIC CAPITAL LETTER BASHKIR KA \setXTXcharcodes "004A1 "004A1 "004A0 % CYRILLIC SMALL LETTER BASHKIR KA \setXTXcharcodes "004A2 "004A3 "004A2 % CYRILLIC CAPITAL LETTER EN WITH DESCENDER \setXTXcharcodes "004A3 "004A3 "004A2 % CYRILLIC SMALL LETTER EN WITH DESCENDER \setXTXcharcodes "004A4 "004A5 "004A4 % CYRILLIC CAPITAL LIGATURE EN GHE \setXTXcharcodes "004A5 "004A5 "004A4 % CYRILLIC SMALL LIGATURE EN GHE \setXTXcharcodes "004A6 "004A7 "004A6 % CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK \setXTXcharcodes "004A7 "004A7 "004A6 % CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK \setXTXcharcodes "004A8 "004A9 "004A8 % CYRILLIC CAPITAL LETTER ABKHASIAN HA \setXTXcharcodes "004A9 "004A9 "004A8 % CYRILLIC SMALL LETTER ABKHASIAN HA \setXTXcharcodes "004AA "004AB "004AA % CYRILLIC CAPITAL LETTER ES WITH DESCENDER \setXTXcharcodes "004AB "004AB "004AA % CYRILLIC SMALL LETTER ES WITH DESCENDER \setXTXcharcodes "004AC "004AD "004AC % CYRILLIC CAPITAL LETTER TE WITH DESCENDER \setXTXcharcodes "004AD "004AD "004AC % CYRILLIC SMALL LETTER TE WITH DESCENDER \setXTXcharcodes "004AE "004AF "004AE % CYRILLIC CAPITAL LETTER STRAIGHT U \setXTXcharcodes "004AF "004AF "004AE % CYRILLIC SMALL LETTER STRAIGHT U \setXTXcharcodes "004B0 "004B1 "004B0 % CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE \setXTXcharcodes "004B1 "004B1 "004B0 % CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE \setXTXcharcodes "004B2 "004B3 "004B2 % CYRILLIC CAPITAL LETTER HA WITH DESCENDER \setXTXcharcodes "004B3 "004B3 "004B2 % CYRILLIC SMALL LETTER HA WITH DESCENDER \setXTXcharcodes "004B4 "004B5 "004B4 % CYRILLIC CAPITAL LIGATURE TE TSE \setXTXcharcodes "004B5 "004B5 "004B4 % CYRILLIC SMALL LIGATURE TE TSE \setXTXcharcodes "004B6 "004B7 "004B6 % CYRILLIC CAPITAL LETTER CHE WITH DESCENDER \setXTXcharcodes "004B7 "004B7 "004B6 % CYRILLIC SMALL LETTER CHE WITH DESCENDER \setXTXcharcodes "004B8 "004B9 "004B8 % CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE \setXTXcharcodes "004B9 "004B9 "004B8 % CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE \setXTXcharcodes "004BA "004BB "004BA % CYRILLIC CAPITAL LETTER SHHA \setXTXcharcodes "004BB "004BB "004BA % CYRILLIC SMALL LETTER SHHA \setXTXcharcodes "004BC "004BD "004BC % CYRILLIC CAPITAL LETTER ABKHASIAN CHE \setXTXcharcodes "004BD "004BD "004BC % CYRILLIC SMALL LETTER ABKHASIAN CHE \setXTXcharcodes "004BE "004BF "004BE % CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER \setXTXcharcodes "004BF "004BF "004BE % CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER \setXTXcharcodes "004C0 "004CF "004C0 % CYRILLIC LETTER PALOCHKA \setXTXcharcodes "004C1 "004C2 "004C1 % CYRILLIC CAPITAL LETTER ZHE WITH BREVE \setXTXcharcodes "004C2 "004C2 "004C1 % CYRILLIC SMALL LETTER ZHE WITH BREVE \setXTXcharcodes "004C3 "004C4 "004C3 % CYRILLIC CAPITAL LETTER KA WITH HOOK \setXTXcharcodes "004C4 "004C4 "004C3 % CYRILLIC SMALL LETTER KA WITH HOOK \setXTXcharcodes "004C5 "004C6 "004C5 % CYRILLIC CAPITAL LETTER EL WITH TAIL \setXTXcharcodes "004C6 "004C6 "004C5 % CYRILLIC SMALL LETTER EL WITH TAIL \setXTXcharcodes "004C7 "004C8 "004C7 % CYRILLIC CAPITAL LETTER EN WITH HOOK \setXTXcharcodes "004C8 "004C8 "004C7 % CYRILLIC SMALL LETTER EN WITH HOOK \setXTXcharcodes "004C9 "004CA "004C9 % CYRILLIC CAPITAL LETTER EN WITH TAIL \setXTXcharcodes "004CA "004CA "004C9 % CYRILLIC SMALL LETTER EN WITH TAIL \setXTXcharcodes "004CB "004CC "004CB % CYRILLIC CAPITAL LETTER KHAKASSIAN CHE \setXTXcharcodes "004CC "004CC "004CB % CYRILLIC SMALL LETTER KHAKASSIAN CHE \setXTXcharcodes "004CD "004CE "004CD % CYRILLIC CAPITAL LETTER EM WITH TAIL \setXTXcharcodes "004CE "004CE "004CD % CYRILLIC SMALL LETTER EM WITH TAIL \setXTXcharcodes "004CF "004CF "004C0 % CYRILLIC SMALL LETTER PALOCHKA \setXTXcharcodes "004D0 "004D1 "004D0 % CYRILLIC CAPITAL LETTER A WITH BREVE \setXTXcharcodes "004D1 "004D1 "004D0 % CYRILLIC SMALL LETTER A WITH BREVE \setXTXcharcodes "004D2 "004D3 "004D2 % CYRILLIC CAPITAL LETTER A WITH DIAERESIS \setXTXcharcodes "004D3 "004D3 "004D2 % CYRILLIC SMALL LETTER A WITH DIAERESIS \setXTXcharcodes "004D4 "004D5 "004D4 % CYRILLIC CAPITAL LIGATURE A IE \setXTXcharcodes "004D5 "004D5 "004D4 % CYRILLIC SMALL LIGATURE A IE \setXTXcharcodes "004D6 "004D7 "004D6 % CYRILLIC CAPITAL LETTER IE WITH BREVE \setXTXcharcodes "004D7 "004D7 "004D6 % CYRILLIC SMALL LETTER IE WITH BREVE \setXTXcharcodes "004D8 "004D9 "004D8 % CYRILLIC CAPITAL LETTER SCHWA \setXTXcharcodes "004D9 "004D9 "004D8 % CYRILLIC SMALL LETTER SCHWA \setXTXcharcodes "004DA "004DB "004DA % CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS \setXTXcharcodes "004DB "004DB "004DA % CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS \setXTXcharcodes "004DC "004DD "004DC % CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS \setXTXcharcodes "004DD "004DD "004DC % CYRILLIC SMALL LETTER ZHE WITH DIAERESIS \setXTXcharcodes "004DE "004DF "004DE % CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS \setXTXcharcodes "004DF "004DF "004DE % CYRILLIC SMALL LETTER ZE WITH DIAERESIS \setXTXcharcodes "004E0 "004E1 "004E0 % CYRILLIC CAPITAL LETTER ABKHASIAN DZE \setXTXcharcodes "004E1 "004E1 "004E0 % CYRILLIC SMALL LETTER ABKHASIAN DZE \setXTXcharcodes "004E2 "004E3 "004E2 % CYRILLIC CAPITAL LETTER I WITH MACRON \setXTXcharcodes "004E3 "004E3 "004E2 % CYRILLIC SMALL LETTER I WITH MACRON \setXTXcharcodes "004E4 "004E5 "004E4 % CYRILLIC CAPITAL LETTER I WITH DIAERESIS \setXTXcharcodes "004E5 "004E5 "004E4 % CYRILLIC SMALL LETTER I WITH DIAERESIS \setXTXcharcodes "004E6 "004E7 "004E6 % CYRILLIC CAPITAL LETTER O WITH DIAERESIS \setXTXcharcodes "004E7 "004E7 "004E6 % CYRILLIC SMALL LETTER O WITH DIAERESIS \setXTXcharcodes "004E8 "004E9 "004E8 % CYRILLIC CAPITAL LETTER BARRED O \setXTXcharcodes "004E9 "004E9 "004E8 % CYRILLIC SMALL LETTER BARRED O \setXTXcharcodes "004EA "004EB "004EA % CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS \setXTXcharcodes "004EB "004EB "004EA % CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS \setXTXcharcodes "004EC "004ED "004EC % CYRILLIC CAPITAL LETTER E WITH DIAERESIS \setXTXcharcodes "004ED "004ED "004EC % CYRILLIC SMALL LETTER E WITH DIAERESIS \setXTXcharcodes "004EE "004EF "004EE % CYRILLIC CAPITAL LETTER U WITH MACRON \setXTXcharcodes "004EF "004EF "004EE % CYRILLIC SMALL LETTER U WITH MACRON \setXTXcharcodes "004F0 "004F1 "004F0 % CYRILLIC CAPITAL LETTER U WITH DIAERESIS \setXTXcharcodes "004F1 "004F1 "004F0 % CYRILLIC SMALL LETTER U WITH DIAERESIS \setXTXcharcodes "004F2 "004F3 "004F2 % CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE \setXTXcharcodes "004F3 "004F3 "004F2 % CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE \setXTXcharcodes "004F4 "004F5 "004F4 % CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS \setXTXcharcodes "004F5 "004F5 "004F4 % CYRILLIC SMALL LETTER CHE WITH DIAERESIS \setXTXcharcodes "004F6 "004F7 "004F6 % CYRILLIC CAPITAL LETTER GHE WITH DESCENDER \setXTXcharcodes "004F7 "004F7 "004F6 % CYRILLIC SMALL LETTER GHE WITH DESCENDER \setXTXcharcodes "004F8 "004F9 "004F8 % CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS \setXTXcharcodes "004F9 "004F9 "004F8 % CYRILLIC SMALL LETTER YERU WITH DIAERESIS \setXTXcharcodes "004FA "004FB "004FA % CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK \setXTXcharcodes "004FB "004FB "004FA % CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK \setXTXcharcodes "004FC "004FD "004FC % CYRILLIC CAPITAL LETTER HA WITH HOOK \setXTXcharcodes "004FD "004FD "004FC % CYRILLIC SMALL LETTER HA WITH HOOK \setXTXcharcodes "004FE "004FF "004FE % CYRILLIC CAPITAL LETTER HA WITH STROKE \setXTXcharcodes "004FF "004FF "004FE % CYRILLIC SMALL LETTER HA WITH STROKE \setXTXcharcodes "00500 "00501 "00500 % CYRILLIC CAPITAL LETTER KOMI DE \setXTXcharcodes "00501 "00501 "00500 % CYRILLIC SMALL LETTER KOMI DE \setXTXcharcodes "00502 "00503 "00502 % CYRILLIC CAPITAL LETTER KOMI DJE \setXTXcharcodes "00503 "00503 "00502 % CYRILLIC SMALL LETTER KOMI DJE \setXTXcharcodes "00504 "00505 "00504 % CYRILLIC CAPITAL LETTER KOMI ZJE \setXTXcharcodes "00505 "00505 "00504 % CYRILLIC SMALL LETTER KOMI ZJE \setXTXcharcodes "00506 "00507 "00506 % CYRILLIC CAPITAL LETTER KOMI DZJE \setXTXcharcodes "00507 "00507 "00506 % CYRILLIC SMALL LETTER KOMI DZJE \setXTXcharcodes "00508 "00509 "00508 % CYRILLIC CAPITAL LETTER KOMI LJE \setXTXcharcodes "00509 "00509 "00508 % CYRILLIC SMALL LETTER KOMI LJE \setXTXcharcodes "0050A "0050B "0050A % CYRILLIC CAPITAL LETTER KOMI NJE \setXTXcharcodes "0050B "0050B "0050A % CYRILLIC SMALL LETTER KOMI NJE \setXTXcharcodes "0050C "0050D "0050C % CYRILLIC CAPITAL LETTER KOMI SJE \setXTXcharcodes "0050D "0050D "0050C % CYRILLIC SMALL LETTER KOMI SJE \setXTXcharcodes "0050E "0050F "0050E % CYRILLIC CAPITAL LETTER KOMI TJE \setXTXcharcodes "0050F "0050F "0050E % CYRILLIC SMALL LETTER KOMI TJE \setXTXcharcodes "00510 "00511 "00510 % CYRILLIC CAPITAL LETTER REVERSED ZE \setXTXcharcodes "00511 "00511 "00510 % CYRILLIC SMALL LETTER REVERSED ZE \setXTXcharcodes "00512 "00513 "00512 % CYRILLIC CAPITAL LETTER EL WITH HOOK \setXTXcharcodes "00513 "00513 "00512 % CYRILLIC SMALL LETTER EL WITH HOOK \setXTXcharcodes "00531 "00561 "00531 % ARMENIAN CAPITAL LETTER AYB \setXTXcharcodes "00532 "00562 "00532 % ARMENIAN CAPITAL LETTER BEN \setXTXcharcodes "00533 "00563 "00533 % ARMENIAN CAPITAL LETTER GIM \setXTXcharcodes "00534 "00564 "00534 % ARMENIAN CAPITAL LETTER DA \setXTXcharcodes "00535 "00565 "00535 % ARMENIAN CAPITAL LETTER ECH \setXTXcharcodes "00536 "00566 "00536 % ARMENIAN CAPITAL LETTER ZA \setXTXcharcodes "00537 "00567 "00537 % ARMENIAN CAPITAL LETTER EH \setXTXcharcodes "00538 "00568 "00538 % ARMENIAN CAPITAL LETTER ET \setXTXcharcodes "00539 "00569 "00539 % ARMENIAN CAPITAL LETTER TO \setXTXcharcodes "0053A "0056A "0053A % ARMENIAN CAPITAL LETTER ZHE \setXTXcharcodes "0053B "0056B "0053B % ARMENIAN CAPITAL LETTER INI \setXTXcharcodes "0053C "0056C "0053C % ARMENIAN CAPITAL LETTER LIWN \setXTXcharcodes "0053D "0056D "0053D % ARMENIAN CAPITAL LETTER XEH \setXTXcharcodes "0053E "0056E "0053E % ARMENIAN CAPITAL LETTER CA \setXTXcharcodes "0053F "0056F "0053F % ARMENIAN CAPITAL LETTER KEN \setXTXcharcodes "00540 "00570 "00540 % ARMENIAN CAPITAL LETTER HO \setXTXcharcodes "00541 "00571 "00541 % ARMENIAN CAPITAL LETTER JA \setXTXcharcodes "00542 "00572 "00542 % ARMENIAN CAPITAL LETTER GHAD \setXTXcharcodes "00543 "00573 "00543 % ARMENIAN CAPITAL LETTER CHEH \setXTXcharcodes "00544 "00574 "00544 % ARMENIAN CAPITAL LETTER MEN \setXTXcharcodes "00545 "00575 "00545 % ARMENIAN CAPITAL LETTER YI \setXTXcharcodes "00546 "00576 "00546 % ARMENIAN CAPITAL LETTER NOW \setXTXcharcodes "00547 "00577 "00547 % ARMENIAN CAPITAL LETTER SHA \setXTXcharcodes "00548 "00578 "00548 % ARMENIAN CAPITAL LETTER VO \setXTXcharcodes "00549 "00579 "00549 % ARMENIAN CAPITAL LETTER CHA \setXTXcharcodes "0054A "0057A "0054A % ARMENIAN CAPITAL LETTER PEH \setXTXcharcodes "0054B "0057B "0054B % ARMENIAN CAPITAL LETTER JHEH \setXTXcharcodes "0054C "0057C "0054C % ARMENIAN CAPITAL LETTER RA \setXTXcharcodes "0054D "0057D "0054D % ARMENIAN CAPITAL LETTER SEH \setXTXcharcodes "0054E "0057E "0054E % ARMENIAN CAPITAL LETTER VEW \setXTXcharcodes "0054F "0057F "0054F % ARMENIAN CAPITAL LETTER TIWN \setXTXcharcodes "00550 "00580 "00550 % ARMENIAN CAPITAL LETTER REH \setXTXcharcodes "00551 "00581 "00551 % ARMENIAN CAPITAL LETTER CO \setXTXcharcodes "00552 "00582 "00552 % ARMENIAN CAPITAL LETTER YIWN \setXTXcharcodes "00553 "00583 "00553 % ARMENIAN CAPITAL LETTER PIWR \setXTXcharcodes "00554 "00584 "00554 % ARMENIAN CAPITAL LETTER KEH \setXTXcharcodes "00555 "00585 "00555 % ARMENIAN CAPITAL LETTER OH \setXTXcharcodes "00556 "00586 "00556 % ARMENIAN CAPITAL LETTER FEH \setXTXcharcodes "00561 "00561 "00531 % ARMENIAN SMALL LETTER AYB \setXTXcharcodes "00562 "00562 "00532 % ARMENIAN SMALL LETTER BEN \setXTXcharcodes "00563 "00563 "00533 % ARMENIAN SMALL LETTER GIM \setXTXcharcodes "00564 "00564 "00534 % ARMENIAN SMALL LETTER DA \setXTXcharcodes "00565 "00565 "00535 % ARMENIAN SMALL LETTER ECH \setXTXcharcodes "00566 "00566 "00536 % ARMENIAN SMALL LETTER ZA \setXTXcharcodes "00567 "00567 "00537 % ARMENIAN SMALL LETTER EH \setXTXcharcodes "00568 "00568 "00538 % ARMENIAN SMALL LETTER ET \setXTXcharcodes "00569 "00569 "00539 % ARMENIAN SMALL LETTER TO \setXTXcharcodes "0056A "0056A "0053A % ARMENIAN SMALL LETTER ZHE \setXTXcharcodes "0056B "0056B "0053B % ARMENIAN SMALL LETTER INI \setXTXcharcodes "0056C "0056C "0053C % ARMENIAN SMALL LETTER LIWN \setXTXcharcodes "0056D "0056D "0053D % ARMENIAN SMALL LETTER XEH \setXTXcharcodes "0056E "0056E "0053E % ARMENIAN SMALL LETTER CA \setXTXcharcodes "0056F "0056F "0053F % ARMENIAN SMALL LETTER KEN \setXTXcharcodes "00570 "00570 "00540 % ARMENIAN SMALL LETTER HO \setXTXcharcodes "00571 "00571 "00541 % ARMENIAN SMALL LETTER JA \setXTXcharcodes "00572 "00572 "00542 % ARMENIAN SMALL LETTER GHAD \setXTXcharcodes "00573 "00573 "00543 % ARMENIAN SMALL LETTER CHEH \setXTXcharcodes "00574 "00574 "00544 % ARMENIAN SMALL LETTER MEN \setXTXcharcodes "00575 "00575 "00545 % ARMENIAN SMALL LETTER YI \setXTXcharcodes "00576 "00576 "00546 % ARMENIAN SMALL LETTER NOW \setXTXcharcodes "00577 "00577 "00547 % ARMENIAN SMALL LETTER SHA \setXTXcharcodes "00578 "00578 "00548 % ARMENIAN SMALL LETTER VO \setXTXcharcodes "00579 "00579 "00549 % ARMENIAN SMALL LETTER CHA \setXTXcharcodes "0057A "0057A "0054A % ARMENIAN SMALL LETTER PEH \setXTXcharcodes "0057B "0057B "0054B % ARMENIAN SMALL LETTER JHEH \setXTXcharcodes "0057C "0057C "0054C % ARMENIAN SMALL LETTER RA \setXTXcharcodes "0057D "0057D "0054D % ARMENIAN SMALL LETTER SEH \setXTXcharcodes "0057E "0057E "0054E % ARMENIAN SMALL LETTER VEW \setXTXcharcodes "0057F "0057F "0054F % ARMENIAN SMALL LETTER TIWN \setXTXcharcodes "00580 "00580 "00550 % ARMENIAN SMALL LETTER REH \setXTXcharcodes "00581 "00581 "00551 % ARMENIAN SMALL LETTER CO \setXTXcharcodes "00582 "00582 "00552 % ARMENIAN SMALL LETTER YIWN \setXTXcharcodes "00583 "00583 "00553 % ARMENIAN SMALL LETTER PIWR \setXTXcharcodes "00584 "00584 "00554 % ARMENIAN SMALL LETTER KEH \setXTXcharcodes "00585 "00585 "00555 % ARMENIAN SMALL LETTER OH \setXTXcharcodes "00586 "00586 "00556 % ARMENIAN SMALL LETTER FEH \setXTXcharcodes "00587 "00587 "00587 % ARMENIAN SMALL LIGATURE ECH YIWN \setXTXcharcodes "010A0 "02D00 "010A0 % GEORGIAN CAPITAL LETTER AN \setXTXcharcodes "010A1 "02D01 "010A1 % GEORGIAN CAPITAL LETTER BAN \setXTXcharcodes "010A2 "02D02 "010A2 % GEORGIAN CAPITAL LETTER GAN \setXTXcharcodes "010A3 "02D03 "010A3 % GEORGIAN CAPITAL LETTER DON \setXTXcharcodes "010A4 "02D04 "010A4 % GEORGIAN CAPITAL LETTER EN \setXTXcharcodes "010A5 "02D05 "010A5 % GEORGIAN CAPITAL LETTER VIN \setXTXcharcodes "010A6 "02D06 "010A6 % GEORGIAN CAPITAL LETTER ZEN \setXTXcharcodes "010A7 "02D07 "010A7 % GEORGIAN CAPITAL LETTER TAN \setXTXcharcodes "010A8 "02D08 "010A8 % GEORGIAN CAPITAL LETTER IN \setXTXcharcodes "010A9 "02D09 "010A9 % GEORGIAN CAPITAL LETTER KAN \setXTXcharcodes "010AA "02D0A "010AA % GEORGIAN CAPITAL LETTER LAS \setXTXcharcodes "010AB "02D0B "010AB % GEORGIAN CAPITAL LETTER MAN \setXTXcharcodes "010AC "02D0C "010AC % GEORGIAN CAPITAL LETTER NAR \setXTXcharcodes "010AD "02D0D "010AD % GEORGIAN CAPITAL LETTER ON \setXTXcharcodes "010AE "02D0E "010AE % GEORGIAN CAPITAL LETTER PAR \setXTXcharcodes "010AF "02D0F "010AF % GEORGIAN CAPITAL LETTER ZHAR \setXTXcharcodes "010B0 "02D10 "010B0 % GEORGIAN CAPITAL LETTER RAE \setXTXcharcodes "010B1 "02D11 "010B1 % GEORGIAN CAPITAL LETTER SAN \setXTXcharcodes "010B2 "02D12 "010B2 % GEORGIAN CAPITAL LETTER TAR \setXTXcharcodes "010B3 "02D13 "010B3 % GEORGIAN CAPITAL LETTER UN \setXTXcharcodes "010B4 "02D14 "010B4 % GEORGIAN CAPITAL LETTER PHAR \setXTXcharcodes "010B5 "02D15 "010B5 % GEORGIAN CAPITAL LETTER KHAR \setXTXcharcodes "010B6 "02D16 "010B6 % GEORGIAN CAPITAL LETTER GHAN \setXTXcharcodes "010B7 "02D17 "010B7 % GEORGIAN CAPITAL LETTER QAR \setXTXcharcodes "010B8 "02D18 "010B8 % GEORGIAN CAPITAL LETTER SHIN \setXTXcharcodes "010B9 "02D19 "010B9 % GEORGIAN CAPITAL LETTER CHIN \setXTXcharcodes "010BA "02D1A "010BA % GEORGIAN CAPITAL LETTER CAN \setXTXcharcodes "010BB "02D1B "010BB % GEORGIAN CAPITAL LETTER JIL \setXTXcharcodes "010BC "02D1C "010BC % GEORGIAN CAPITAL LETTER CIL \setXTXcharcodes "010BD "02D1D "010BD % GEORGIAN CAPITAL LETTER CHAR \setXTXcharcodes "010BE "02D1E "010BE % GEORGIAN CAPITAL LETTER XAN \setXTXcharcodes "010BF "02D1F "010BF % GEORGIAN CAPITAL LETTER JHAN \setXTXcharcodes "010C0 "02D20 "010C0 % GEORGIAN CAPITAL LETTER HAE \setXTXcharcodes "010C1 "02D21 "010C1 % GEORGIAN CAPITAL LETTER HE \setXTXcharcodes "010C2 "02D22 "010C2 % GEORGIAN CAPITAL LETTER HIE \setXTXcharcodes "010C3 "02D23 "010C3 % GEORGIAN CAPITAL LETTER WE \setXTXcharcodes "010C4 "02D24 "010C4 % GEORGIAN CAPITAL LETTER HAR \setXTXcharcodes "010C5 "02D25 "010C5 % GEORGIAN CAPITAL LETTER HOE \setXTXcharcodes "01D00 "01D00 "01D00 % LATIN LETTER SMALL CAPITAL A \setXTXcharcodes "01D01 "01D01 "01D01 % LATIN LETTER SMALL CAPITAL AE \setXTXcharcodes "01D02 "01D02 "01D02 % LATIN SMALL LETTER TURNED AE \setXTXcharcodes "01D03 "01D03 "01D03 % LATIN LETTER SMALL CAPITAL BARRED B \setXTXcharcodes "01D04 "01D04 "01D04 % LATIN LETTER SMALL CAPITAL C \setXTXcharcodes "01D05 "01D05 "01D05 % LATIN LETTER SMALL CAPITAL D \setXTXcharcodes "01D06 "01D06 "01D06 % LATIN LETTER SMALL CAPITAL ETH \setXTXcharcodes "01D07 "01D07 "01D07 % LATIN LETTER SMALL CAPITAL E \setXTXcharcodes "01D08 "01D08 "01D08 % LATIN SMALL LETTER TURNED OPEN E \setXTXcharcodes "01D09 "01D09 "01D09 % LATIN SMALL LETTER TURNED I \setXTXcharcodes "01D0A "01D0A "01D0A % LATIN LETTER SMALL CAPITAL J \setXTXcharcodes "01D0B "01D0B "01D0B % LATIN LETTER SMALL CAPITAL K \setXTXcharcodes "01D0C "01D0C "01D0C % LATIN LETTER SMALL CAPITAL L WITH STROKE \setXTXcharcodes "01D0D "01D0D "01D0D % LATIN LETTER SMALL CAPITAL M \setXTXcharcodes "01D0E "01D0E "01D0E % LATIN LETTER SMALL CAPITAL REVERSED N \setXTXcharcodes "01D0F "01D0F "01D0F % LATIN LETTER SMALL CAPITAL O \setXTXcharcodes "01D10 "01D10 "01D10 % LATIN LETTER SMALL CAPITAL OPEN O \setXTXcharcodes "01D11 "01D11 "01D11 % LATIN SMALL LETTER SIDEWAYS O \setXTXcharcodes "01D12 "01D12 "01D12 % LATIN SMALL LETTER SIDEWAYS OPEN O \setXTXcharcodes "01D13 "01D13 "01D13 % LATIN SMALL LETTER SIDEWAYS O WITH STROKE \setXTXcharcodes "01D14 "01D14 "01D14 % LATIN SMALL LETTER TURNED OE \setXTXcharcodes "01D15 "01D15 "01D15 % LATIN LETTER SMALL CAPITAL OU \setXTXcharcodes "01D16 "01D16 "01D16 % LATIN SMALL LETTER TOP HALF O \setXTXcharcodes "01D17 "01D17 "01D17 % LATIN SMALL LETTER BOTTOM HALF O \setXTXcharcodes "01D18 "01D18 "01D18 % LATIN LETTER SMALL CAPITAL P \setXTXcharcodes "01D19 "01D19 "01D19 % LATIN LETTER SMALL CAPITAL REVERSED R \setXTXcharcodes "01D1A "01D1A "01D1A % LATIN LETTER SMALL CAPITAL TURNED R \setXTXcharcodes "01D1B "01D1B "01D1B % LATIN LETTER SMALL CAPITAL T \setXTXcharcodes "01D1C "01D1C "01D1C % LATIN LETTER SMALL CAPITAL U \setXTXcharcodes "01D1D "01D1D "01D1D % LATIN SMALL LETTER SIDEWAYS U \setXTXcharcodes "01D1E "01D1E "01D1E % LATIN SMALL LETTER SIDEWAYS DIAERESIZED U \setXTXcharcodes "01D1F "01D1F "01D1F % LATIN SMALL LETTER SIDEWAYS TURNED M \setXTXcharcodes "01D20 "01D20 "01D20 % LATIN LETTER SMALL CAPITAL V \setXTXcharcodes "01D21 "01D21 "01D21 % LATIN LETTER SMALL CAPITAL W \setXTXcharcodes "01D22 "01D22 "01D22 % LATIN LETTER SMALL CAPITAL Z \setXTXcharcodes "01D23 "01D23 "01D23 % LATIN LETTER SMALL CAPITAL EZH \setXTXcharcodes "01D24 "01D24 "01D24 % LATIN LETTER VOICED LARYNGEAL SPIRANT \setXTXcharcodes "01D25 "01D25 "01D25 % LATIN LETTER AIN \setXTXcharcodes "01D26 "01D26 "01D26 % GREEK LETTER SMALL CAPITAL GAMMA \setXTXcharcodes "01D27 "01D27 "01D27 % GREEK LETTER SMALL CAPITAL LAMDA \setXTXcharcodes "01D28 "01D28 "01D28 % GREEK LETTER SMALL CAPITAL PI \setXTXcharcodes "01D29 "01D29 "01D29 % GREEK LETTER SMALL CAPITAL RHO \setXTXcharcodes "01D2A "01D2A "01D2A % GREEK LETTER SMALL CAPITAL PSI \setXTXcharcodes "01D2B "01D2B "01D2B % CYRILLIC LETTER SMALL CAPITAL EL \setXTXcharcodes "01D62 "01D62 "01D62 % LATIN SUBSCRIPT SMALL LETTER I \setXTXcharcodes "01D63 "01D63 "01D63 % LATIN SUBSCRIPT SMALL LETTER R \setXTXcharcodes "01D64 "01D64 "01D64 % LATIN SUBSCRIPT SMALL LETTER U \setXTXcharcodes "01D65 "01D65 "01D65 % LATIN SUBSCRIPT SMALL LETTER V \setXTXcharcodes "01D66 "01D66 "01D66 % GREEK SUBSCRIPT SMALL LETTER BETA \setXTXcharcodes "01D67 "01D67 "01D67 % GREEK SUBSCRIPT SMALL LETTER GAMMA \setXTXcharcodes "01D68 "01D68 "01D68 % GREEK SUBSCRIPT SMALL LETTER RHO \setXTXcharcodes "01D69 "01D69 "01D69 % GREEK SUBSCRIPT SMALL LETTER PHI \setXTXcharcodes "01D6A "01D6A "01D6A % GREEK SUBSCRIPT SMALL LETTER CHI \setXTXcharcodes "01D6B "01D6B "01D6B % LATIN SMALL LETTER UE \setXTXcharcodes "01D6C "01D6C "01D6C % LATIN SMALL LETTER B WITH MIDDLE TILDE \setXTXcharcodes "01D6D "01D6D "01D6D % LATIN SMALL LETTER D WITH MIDDLE TILDE \setXTXcharcodes "01D6E "01D6E "01D6E % LATIN SMALL LETTER F WITH MIDDLE TILDE \setXTXcharcodes "01D6F "01D6F "01D6F % LATIN SMALL LETTER M WITH MIDDLE TILDE \setXTXcharcodes "01D70 "01D70 "01D70 % LATIN SMALL LETTER N WITH MIDDLE TILDE \setXTXcharcodes "01D71 "01D71 "01D71 % LATIN SMALL LETTER P WITH MIDDLE TILDE \setXTXcharcodes "01D72 "01D72 "01D72 % LATIN SMALL LETTER R WITH MIDDLE TILDE \setXTXcharcodes "01D73 "01D73 "01D73 % LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE \setXTXcharcodes "01D74 "01D74 "01D74 % LATIN SMALL LETTER S WITH MIDDLE TILDE \setXTXcharcodes "01D75 "01D75 "01D75 % LATIN SMALL LETTER T WITH MIDDLE TILDE \setXTXcharcodes "01D76 "01D76 "01D76 % LATIN SMALL LETTER Z WITH MIDDLE TILDE \setXTXcharcodes "01D77 "01D77 "01D77 % LATIN SMALL LETTER TURNED G \setXTXcharcodes "01D79 "01D79 "01D79 % LATIN SMALL LETTER INSULAR G \setXTXcharcodes "01D7A "01D7A "01D7A % LATIN SMALL LETTER TH WITH STRIKETHROUGH \setXTXcharcodes "01D7B "01D7B "01D7B % LATIN SMALL CAPITAL LETTER I WITH STROKE \setXTXcharcodes "01D7C "01D7C "01D7C % LATIN SMALL LETTER IOTA WITH STROKE \setXTXcharcodes "01D7D "01D7D "02C63 % LATIN SMALL LETTER P WITH STROKE \setXTXcharcodes "01D7E "01D7E "01D7E % LATIN SMALL CAPITAL LETTER U WITH STROKE \setXTXcharcodes "01D7F "01D7F "01D7F % LATIN SMALL LETTER UPSILON WITH STROKE \setXTXcharcodes "01D80 "01D80 "01D80 % LATIN SMALL LETTER B WITH PALATAL HOOK \setXTXcharcodes "01D81 "01D81 "01D81 % LATIN SMALL LETTER D WITH PALATAL HOOK \setXTXcharcodes "01D82 "01D82 "01D82 % LATIN SMALL LETTER F WITH PALATAL HOOK \setXTXcharcodes "01D83 "01D83 "01D83 % LATIN SMALL LETTER G WITH PALATAL HOOK \setXTXcharcodes "01D84 "01D84 "01D84 % LATIN SMALL LETTER K WITH PALATAL HOOK \setXTXcharcodes "01D85 "01D85 "01D85 % LATIN SMALL LETTER L WITH PALATAL HOOK \setXTXcharcodes "01D86 "01D86 "01D86 % LATIN SMALL LETTER M WITH PALATAL HOOK \setXTXcharcodes "01D87 "01D87 "01D87 % LATIN SMALL LETTER N WITH PALATAL HOOK \setXTXcharcodes "01D88 "01D88 "01D88 % LATIN SMALL LETTER P WITH PALATAL HOOK \setXTXcharcodes "01D89 "01D89 "01D89 % LATIN SMALL LETTER R WITH PALATAL HOOK \setXTXcharcodes "01D8A "01D8A "01D8A % LATIN SMALL LETTER S WITH PALATAL HOOK \setXTXcharcodes "01D8B "01D8B "01D8B % LATIN SMALL LETTER ESH WITH PALATAL HOOK \setXTXcharcodes "01D8C "01D8C "01D8C % LATIN SMALL LETTER V WITH PALATAL HOOK \setXTXcharcodes "01D8D "01D8D "01D8D % LATIN SMALL LETTER X WITH PALATAL HOOK \setXTXcharcodes "01D8E "01D8E "01D8E % LATIN SMALL LETTER Z WITH PALATAL HOOK \setXTXcharcodes "01D8F "01D8F "01D8F % LATIN SMALL LETTER A WITH RETROFLEX HOOK \setXTXcharcodes "01D90 "01D90 "01D90 % LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK \setXTXcharcodes "01D91 "01D91 "01D91 % LATIN SMALL LETTER D WITH HOOK AND TAIL \setXTXcharcodes "01D92 "01D92 "01D92 % LATIN SMALL LETTER E WITH RETROFLEX HOOK \setXTXcharcodes "01D93 "01D93 "01D93 % LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK \setXTXcharcodes "01D94 "01D94 "01D94 % LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK \setXTXcharcodes "01D95 "01D95 "01D95 % LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK \setXTXcharcodes "01D96 "01D96 "01D96 % LATIN SMALL LETTER I WITH RETROFLEX HOOK \setXTXcharcodes "01D97 "01D97 "01D97 % LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK \setXTXcharcodes "01D98 "01D98 "01D98 % LATIN SMALL LETTER ESH WITH RETROFLEX HOOK \setXTXcharcodes "01D99 "01D99 "01D99 % LATIN SMALL LETTER U WITH RETROFLEX HOOK \setXTXcharcodes "01D9A "01D9A "01D9A % LATIN SMALL LETTER EZH WITH RETROFLEX HOOK \setXTXcharcodes "01E00 "01E01 "01E00 % LATIN CAPITAL LETTER A WITH RING BELOW \setXTXcharcodes "01E01 "01E01 "01E00 % LATIN SMALL LETTER A WITH RING BELOW \setXTXcharcodes "01E02 "01E03 "01E02 % LATIN CAPITAL LETTER B WITH DOT ABOVE \setXTXcharcodes "01E03 "01E03 "01E02 % LATIN SMALL LETTER B WITH DOT ABOVE \setXTXcharcodes "01E04 "01E05 "01E04 % LATIN CAPITAL LETTER B WITH DOT BELOW \setXTXcharcodes "01E05 "01E05 "01E04 % LATIN SMALL LETTER B WITH DOT BELOW \setXTXcharcodes "01E06 "01E07 "01E06 % LATIN CAPITAL LETTER B WITH LINE BELOW \setXTXcharcodes "01E07 "01E07 "01E06 % LATIN SMALL LETTER B WITH LINE BELOW \setXTXcharcodes "01E08 "01E09 "01E08 % LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE \setXTXcharcodes "01E09 "01E09 "01E08 % LATIN SMALL LETTER C WITH CEDILLA AND ACUTE \setXTXcharcodes "01E0A "01E0B "01E0A % LATIN CAPITAL LETTER D WITH DOT ABOVE \setXTXcharcodes "01E0B "01E0B "01E0A % LATIN SMALL LETTER D WITH DOT ABOVE \setXTXcharcodes "01E0C "01E0D "01E0C % LATIN CAPITAL LETTER D WITH DOT BELOW \setXTXcharcodes "01E0D "01E0D "01E0C % LATIN SMALL LETTER D WITH DOT BELOW \setXTXcharcodes "01E0E "01E0F "01E0E % LATIN CAPITAL LETTER D WITH LINE BELOW \setXTXcharcodes "01E0F "01E0F "01E0E % LATIN SMALL LETTER D WITH LINE BELOW \setXTXcharcodes "01E10 "01E11 "01E10 % LATIN CAPITAL LETTER D WITH CEDILLA \setXTXcharcodes "01E11 "01E11 "01E10 % LATIN SMALL LETTER D WITH CEDILLA \setXTXcharcodes "01E12 "01E13 "01E12 % LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E13 "01E13 "01E12 % LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E14 "01E15 "01E14 % LATIN CAPITAL LETTER E WITH MACRON AND GRAVE \setXTXcharcodes "01E15 "01E15 "01E14 % LATIN SMALL LETTER E WITH MACRON AND GRAVE \setXTXcharcodes "01E16 "01E17 "01E16 % LATIN CAPITAL LETTER E WITH MACRON AND ACUTE \setXTXcharcodes "01E17 "01E17 "01E16 % LATIN SMALL LETTER E WITH MACRON AND ACUTE \setXTXcharcodes "01E18 "01E19 "01E18 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E19 "01E19 "01E18 % LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E1A "01E1B "01E1A % LATIN CAPITAL LETTER E WITH TILDE BELOW \setXTXcharcodes "01E1B "01E1B "01E1A % LATIN SMALL LETTER E WITH TILDE BELOW \setXTXcharcodes "01E1C "01E1D "01E1C % LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE \setXTXcharcodes "01E1D "01E1D "01E1C % LATIN SMALL LETTER E WITH CEDILLA AND BREVE \setXTXcharcodes "01E1E "01E1F "01E1E % LATIN CAPITAL LETTER F WITH DOT ABOVE \setXTXcharcodes "01E1F "01E1F "01E1E % LATIN SMALL LETTER F WITH DOT ABOVE \setXTXcharcodes "01E20 "01E21 "01E20 % LATIN CAPITAL LETTER G WITH MACRON \setXTXcharcodes "01E21 "01E21 "01E20 % LATIN SMALL LETTER G WITH MACRON \setXTXcharcodes "01E22 "01E23 "01E22 % LATIN CAPITAL LETTER H WITH DOT ABOVE \setXTXcharcodes "01E23 "01E23 "01E22 % LATIN SMALL LETTER H WITH DOT ABOVE \setXTXcharcodes "01E24 "01E25 "01E24 % LATIN CAPITAL LETTER H WITH DOT BELOW \setXTXcharcodes "01E25 "01E25 "01E24 % LATIN SMALL LETTER H WITH DOT BELOW \setXTXcharcodes "01E26 "01E27 "01E26 % LATIN CAPITAL LETTER H WITH DIAERESIS \setXTXcharcodes "01E27 "01E27 "01E26 % LATIN SMALL LETTER H WITH DIAERESIS \setXTXcharcodes "01E28 "01E29 "01E28 % LATIN CAPITAL LETTER H WITH CEDILLA \setXTXcharcodes "01E29 "01E29 "01E28 % LATIN SMALL LETTER H WITH CEDILLA \setXTXcharcodes "01E2A "01E2B "01E2A % LATIN CAPITAL LETTER H WITH BREVE BELOW \setXTXcharcodes "01E2B "01E2B "01E2A % LATIN SMALL LETTER H WITH BREVE BELOW \setXTXcharcodes "01E2C "01E2D "01E2C % LATIN CAPITAL LETTER I WITH TILDE BELOW \setXTXcharcodes "01E2D "01E2D "01E2C % LATIN SMALL LETTER I WITH TILDE BELOW \setXTXcharcodes "01E2E "01E2F "01E2E % LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE \setXTXcharcodes "01E2F "01E2F "01E2E % LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE \setXTXcharcodes "01E30 "01E31 "01E30 % LATIN CAPITAL LETTER K WITH ACUTE \setXTXcharcodes "01E31 "01E31 "01E30 % LATIN SMALL LETTER K WITH ACUTE \setXTXcharcodes "01E32 "01E33 "01E32 % LATIN CAPITAL LETTER K WITH DOT BELOW \setXTXcharcodes "01E33 "01E33 "01E32 % LATIN SMALL LETTER K WITH DOT BELOW \setXTXcharcodes "01E34 "01E35 "01E34 % LATIN CAPITAL LETTER K WITH LINE BELOW \setXTXcharcodes "01E35 "01E35 "01E34 % LATIN SMALL LETTER K WITH LINE BELOW \setXTXcharcodes "01E36 "01E37 "01E36 % LATIN CAPITAL LETTER L WITH DOT BELOW \setXTXcharcodes "01E37 "01E37 "01E36 % LATIN SMALL LETTER L WITH DOT BELOW \setXTXcharcodes "01E38 "01E39 "01E38 % LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON \setXTXcharcodes "01E39 "01E39 "01E38 % LATIN SMALL LETTER L WITH DOT BELOW AND MACRON \setXTXcharcodes "01E3A "01E3B "01E3A % LATIN CAPITAL LETTER L WITH LINE BELOW \setXTXcharcodes "01E3B "01E3B "01E3A % LATIN SMALL LETTER L WITH LINE BELOW \setXTXcharcodes "01E3C "01E3D "01E3C % LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E3D "01E3D "01E3C % LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E3E "01E3F "01E3E % LATIN CAPITAL LETTER M WITH ACUTE \setXTXcharcodes "01E3F "01E3F "01E3E % LATIN SMALL LETTER M WITH ACUTE \setXTXcharcodes "01E40 "01E41 "01E40 % LATIN CAPITAL LETTER M WITH DOT ABOVE \setXTXcharcodes "01E41 "01E41 "01E40 % LATIN SMALL LETTER M WITH DOT ABOVE \setXTXcharcodes "01E42 "01E43 "01E42 % LATIN CAPITAL LETTER M WITH DOT BELOW \setXTXcharcodes "01E43 "01E43 "01E42 % LATIN SMALL LETTER M WITH DOT BELOW \setXTXcharcodes "01E44 "01E45 "01E44 % LATIN CAPITAL LETTER N WITH DOT ABOVE \setXTXcharcodes "01E45 "01E45 "01E44 % LATIN SMALL LETTER N WITH DOT ABOVE \setXTXcharcodes "01E46 "01E47 "01E46 % LATIN CAPITAL LETTER N WITH DOT BELOW \setXTXcharcodes "01E47 "01E47 "01E46 % LATIN SMALL LETTER N WITH DOT BELOW \setXTXcharcodes "01E48 "01E49 "01E48 % LATIN CAPITAL LETTER N WITH LINE BELOW \setXTXcharcodes "01E49 "01E49 "01E48 % LATIN SMALL LETTER N WITH LINE BELOW \setXTXcharcodes "01E4A "01E4B "01E4A % LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E4B "01E4B "01E4A % LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E4C "01E4D "01E4C % LATIN CAPITAL LETTER O WITH TILDE AND ACUTE \setXTXcharcodes "01E4D "01E4D "01E4C % LATIN SMALL LETTER O WITH TILDE AND ACUTE \setXTXcharcodes "01E4E "01E4F "01E4E % LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS \setXTXcharcodes "01E4F "01E4F "01E4E % LATIN SMALL LETTER O WITH TILDE AND DIAERESIS \setXTXcharcodes "01E50 "01E51 "01E50 % LATIN CAPITAL LETTER O WITH MACRON AND GRAVE \setXTXcharcodes "01E51 "01E51 "01E50 % LATIN SMALL LETTER O WITH MACRON AND GRAVE \setXTXcharcodes "01E52 "01E53 "01E52 % LATIN CAPITAL LETTER O WITH MACRON AND ACUTE \setXTXcharcodes "01E53 "01E53 "01E52 % LATIN SMALL LETTER O WITH MACRON AND ACUTE \setXTXcharcodes "01E54 "01E55 "01E54 % LATIN CAPITAL LETTER P WITH ACUTE \setXTXcharcodes "01E55 "01E55 "01E54 % LATIN SMALL LETTER P WITH ACUTE \setXTXcharcodes "01E56 "01E57 "01E56 % LATIN CAPITAL LETTER P WITH DOT ABOVE \setXTXcharcodes "01E57 "01E57 "01E56 % LATIN SMALL LETTER P WITH DOT ABOVE \setXTXcharcodes "01E58 "01E59 "01E58 % LATIN CAPITAL LETTER R WITH DOT ABOVE \setXTXcharcodes "01E59 "01E59 "01E58 % LATIN SMALL LETTER R WITH DOT ABOVE \setXTXcharcodes "01E5A "01E5B "01E5A % LATIN CAPITAL LETTER R WITH DOT BELOW \setXTXcharcodes "01E5B "01E5B "01E5A % LATIN SMALL LETTER R WITH DOT BELOW \setXTXcharcodes "01E5C "01E5D "01E5C % LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON \setXTXcharcodes "01E5D "01E5D "01E5C % LATIN SMALL LETTER R WITH DOT BELOW AND MACRON \setXTXcharcodes "01E5E "01E5F "01E5E % LATIN CAPITAL LETTER R WITH LINE BELOW \setXTXcharcodes "01E5F "01E5F "01E5E % LATIN SMALL LETTER R WITH LINE BELOW \setXTXcharcodes "01E60 "01E61 "01E60 % LATIN CAPITAL LETTER S WITH DOT ABOVE \setXTXcharcodes "01E61 "01E61 "01E60 % LATIN SMALL LETTER S WITH DOT ABOVE \setXTXcharcodes "01E62 "01E63 "01E62 % LATIN CAPITAL LETTER S WITH DOT BELOW \setXTXcharcodes "01E63 "01E63 "01E62 % LATIN SMALL LETTER S WITH DOT BELOW \setXTXcharcodes "01E64 "01E65 "01E64 % LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE \setXTXcharcodes "01E65 "01E65 "01E64 % LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE \setXTXcharcodes "01E66 "01E67 "01E66 % LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE \setXTXcharcodes "01E67 "01E67 "01E66 % LATIN SMALL LETTER S WITH CARON AND DOT ABOVE \setXTXcharcodes "01E68 "01E69 "01E68 % LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE \setXTXcharcodes "01E69 "01E69 "01E68 % LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE \setXTXcharcodes "01E6A "01E6B "01E6A % LATIN CAPITAL LETTER T WITH DOT ABOVE \setXTXcharcodes "01E6B "01E6B "01E6A % LATIN SMALL LETTER T WITH DOT ABOVE \setXTXcharcodes "01E6C "01E6D "01E6C % LATIN CAPITAL LETTER T WITH DOT BELOW \setXTXcharcodes "01E6D "01E6D "01E6C % LATIN SMALL LETTER T WITH DOT BELOW \setXTXcharcodes "01E6E "01E6F "01E6E % LATIN CAPITAL LETTER T WITH LINE BELOW \setXTXcharcodes "01E6F "01E6F "01E6E % LATIN SMALL LETTER T WITH LINE BELOW \setXTXcharcodes "01E70 "01E71 "01E70 % LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E71 "01E71 "01E70 % LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E72 "01E73 "01E72 % LATIN CAPITAL LETTER U WITH DIAERESIS BELOW \setXTXcharcodes "01E73 "01E73 "01E72 % LATIN SMALL LETTER U WITH DIAERESIS BELOW \setXTXcharcodes "01E74 "01E75 "01E74 % LATIN CAPITAL LETTER U WITH TILDE BELOW \setXTXcharcodes "01E75 "01E75 "01E74 % LATIN SMALL LETTER U WITH TILDE BELOW \setXTXcharcodes "01E76 "01E77 "01E76 % LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E77 "01E77 "01E76 % LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW \setXTXcharcodes "01E78 "01E79 "01E78 % LATIN CAPITAL LETTER U WITH TILDE AND ACUTE \setXTXcharcodes "01E79 "01E79 "01E78 % LATIN SMALL LETTER U WITH TILDE AND ACUTE \setXTXcharcodes "01E7A "01E7B "01E7A % LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS \setXTXcharcodes "01E7B "01E7B "01E7A % LATIN SMALL LETTER U WITH MACRON AND DIAERESIS \setXTXcharcodes "01E7C "01E7D "01E7C % LATIN CAPITAL LETTER V WITH TILDE \setXTXcharcodes "01E7D "01E7D "01E7C % LATIN SMALL LETTER V WITH TILDE \setXTXcharcodes "01E7E "01E7F "01E7E % LATIN CAPITAL LETTER V WITH DOT BELOW \setXTXcharcodes "01E7F "01E7F "01E7E % LATIN SMALL LETTER V WITH DOT BELOW \setXTXcharcodes "01E80 "01E81 "01E80 % LATIN CAPITAL LETTER W WITH GRAVE \setXTXcharcodes "01E81 "01E81 "01E80 % LATIN SMALL LETTER W WITH GRAVE \setXTXcharcodes "01E82 "01E83 "01E82 % LATIN CAPITAL LETTER W WITH ACUTE \setXTXcharcodes "01E83 "01E83 "01E82 % LATIN SMALL LETTER W WITH ACUTE \setXTXcharcodes "01E84 "01E85 "01E84 % LATIN CAPITAL LETTER W WITH DIAERESIS \setXTXcharcodes "01E85 "01E85 "01E84 % LATIN SMALL LETTER W WITH DIAERESIS \setXTXcharcodes "01E86 "01E87 "01E86 % LATIN CAPITAL LETTER W WITH DOT ABOVE \setXTXcharcodes "01E87 "01E87 "01E86 % LATIN SMALL LETTER W WITH DOT ABOVE \setXTXcharcodes "01E88 "01E89 "01E88 % LATIN CAPITAL LETTER W WITH DOT BELOW \setXTXcharcodes "01E89 "01E89 "01E88 % LATIN SMALL LETTER W WITH DOT BELOW \setXTXcharcodes "01E8A "01E8B "01E8A % LATIN CAPITAL LETTER X WITH DOT ABOVE \setXTXcharcodes "01E8B "01E8B "01E8A % LATIN SMALL LETTER X WITH DOT ABOVE \setXTXcharcodes "01E8C "01E8D "01E8C % LATIN CAPITAL LETTER X WITH DIAERESIS \setXTXcharcodes "01E8D "01E8D "01E8C % LATIN SMALL LETTER X WITH DIAERESIS \setXTXcharcodes "01E8E "01E8F "01E8E % LATIN CAPITAL LETTER Y WITH DOT ABOVE \setXTXcharcodes "01E8F "01E8F "01E8E % LATIN SMALL LETTER Y WITH DOT ABOVE \setXTXcharcodes "01E90 "01E91 "01E90 % LATIN CAPITAL LETTER Z WITH CIRCUMFLEX \setXTXcharcodes "01E91 "01E91 "01E90 % LATIN SMALL LETTER Z WITH CIRCUMFLEX \setXTXcharcodes "01E92 "01E93 "01E92 % LATIN CAPITAL LETTER Z WITH DOT BELOW \setXTXcharcodes "01E93 "01E93 "01E92 % LATIN SMALL LETTER Z WITH DOT BELOW \setXTXcharcodes "01E94 "01E95 "01E94 % LATIN CAPITAL LETTER Z WITH LINE BELOW \setXTXcharcodes "01E95 "01E95 "01E94 % LATIN SMALL LETTER Z WITH LINE BELOW \setXTXcharcodes "01E96 "01E96 "01E96 % LATIN SMALL LETTER H WITH LINE BELOW \setXTXcharcodes "01E97 "01E97 "01E97 % LATIN SMALL LETTER T WITH DIAERESIS \setXTXcharcodes "01E98 "01E98 "01E98 % LATIN SMALL LETTER W WITH RING ABOVE \setXTXcharcodes "01E99 "01E99 "01E99 % LATIN SMALL LETTER Y WITH RING ABOVE \setXTXcharcodes "01E9A "01E9A "01E9A % LATIN SMALL LETTER A WITH RIGHT HALF RING \setXTXcharcodes "01E9B "01E9B "01E60 % LATIN SMALL LETTER LONG S WITH DOT ABOVE \setXTXcharcodes "01EA0 "01EA1 "01EA0 % LATIN CAPITAL LETTER A WITH DOT BELOW \setXTXcharcodes "01EA1 "01EA1 "01EA0 % LATIN SMALL LETTER A WITH DOT BELOW \setXTXcharcodes "01EA2 "01EA3 "01EA2 % LATIN CAPITAL LETTER A WITH HOOK ABOVE \setXTXcharcodes "01EA3 "01EA3 "01EA2 % LATIN SMALL LETTER A WITH HOOK ABOVE \setXTXcharcodes "01EA4 "01EA5 "01EA4 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE \setXTXcharcodes "01EA5 "01EA5 "01EA4 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE \setXTXcharcodes "01EA6 "01EA7 "01EA6 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE \setXTXcharcodes "01EA7 "01EA7 "01EA6 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE \setXTXcharcodes "01EA8 "01EA9 "01EA8 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE \setXTXcharcodes "01EA9 "01EA9 "01EA8 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE \setXTXcharcodes "01EAA "01EAB "01EAA % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE \setXTXcharcodes "01EAB "01EAB "01EAA % LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE \setXTXcharcodes "01EAC "01EAD "01EAC % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW \setXTXcharcodes "01EAD "01EAD "01EAC % LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW \setXTXcharcodes "01EAE "01EAF "01EAE % LATIN CAPITAL LETTER A WITH BREVE AND ACUTE \setXTXcharcodes "01EAF "01EAF "01EAE % LATIN SMALL LETTER A WITH BREVE AND ACUTE \setXTXcharcodes "01EB0 "01EB1 "01EB0 % LATIN CAPITAL LETTER A WITH BREVE AND GRAVE \setXTXcharcodes "01EB1 "01EB1 "01EB0 % LATIN SMALL LETTER A WITH BREVE AND GRAVE \setXTXcharcodes "01EB2 "01EB3 "01EB2 % LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE \setXTXcharcodes "01EB3 "01EB3 "01EB2 % LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE \setXTXcharcodes "01EB4 "01EB5 "01EB4 % LATIN CAPITAL LETTER A WITH BREVE AND TILDE \setXTXcharcodes "01EB5 "01EB5 "01EB4 % LATIN SMALL LETTER A WITH BREVE AND TILDE \setXTXcharcodes "01EB6 "01EB7 "01EB6 % LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW \setXTXcharcodes "01EB7 "01EB7 "01EB6 % LATIN SMALL LETTER A WITH BREVE AND DOT BELOW \setXTXcharcodes "01EB8 "01EB9 "01EB8 % LATIN CAPITAL LETTER E WITH DOT BELOW \setXTXcharcodes "01EB9 "01EB9 "01EB8 % LATIN SMALL LETTER E WITH DOT BELOW \setXTXcharcodes "01EBA "01EBB "01EBA % LATIN CAPITAL LETTER E WITH HOOK ABOVE \setXTXcharcodes "01EBB "01EBB "01EBA % LATIN SMALL LETTER E WITH HOOK ABOVE \setXTXcharcodes "01EBC "01EBD "01EBC % LATIN CAPITAL LETTER E WITH TILDE \setXTXcharcodes "01EBD "01EBD "01EBC % LATIN SMALL LETTER E WITH TILDE \setXTXcharcodes "01EBE "01EBF "01EBE % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE \setXTXcharcodes "01EBF "01EBF "01EBE % LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE \setXTXcharcodes "01EC0 "01EC1 "01EC0 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE \setXTXcharcodes "01EC1 "01EC1 "01EC0 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE \setXTXcharcodes "01EC2 "01EC3 "01EC2 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE \setXTXcharcodes "01EC3 "01EC3 "01EC2 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE \setXTXcharcodes "01EC4 "01EC5 "01EC4 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE \setXTXcharcodes "01EC5 "01EC5 "01EC4 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE \setXTXcharcodes "01EC6 "01EC7 "01EC6 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW \setXTXcharcodes "01EC7 "01EC7 "01EC6 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW \setXTXcharcodes "01EC8 "01EC9 "01EC8 % LATIN CAPITAL LETTER I WITH HOOK ABOVE \setXTXcharcodes "01EC9 "01EC9 "01EC8 % LATIN SMALL LETTER I WITH HOOK ABOVE \setXTXcharcodes "01ECA "01ECB "01ECA % LATIN CAPITAL LETTER I WITH DOT BELOW \setXTXcharcodes "01ECB "01ECB "01ECA % LATIN SMALL LETTER I WITH DOT BELOW \setXTXcharcodes "01ECC "01ECD "01ECC % LATIN CAPITAL LETTER O WITH DOT BELOW \setXTXcharcodes "01ECD "01ECD "01ECC % LATIN SMALL LETTER O WITH DOT BELOW \setXTXcharcodes "01ECE "01ECF "01ECE % LATIN CAPITAL LETTER O WITH HOOK ABOVE \setXTXcharcodes "01ECF "01ECF "01ECE % LATIN SMALL LETTER O WITH HOOK ABOVE \setXTXcharcodes "01ED0 "01ED1 "01ED0 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE \setXTXcharcodes "01ED1 "01ED1 "01ED0 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE \setXTXcharcodes "01ED2 "01ED3 "01ED2 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE \setXTXcharcodes "01ED3 "01ED3 "01ED2 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE \setXTXcharcodes "01ED4 "01ED5 "01ED4 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE \setXTXcharcodes "01ED5 "01ED5 "01ED4 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE \setXTXcharcodes "01ED6 "01ED7 "01ED6 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE \setXTXcharcodes "01ED7 "01ED7 "01ED6 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE \setXTXcharcodes "01ED8 "01ED9 "01ED8 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW \setXTXcharcodes "01ED9 "01ED9 "01ED8 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW \setXTXcharcodes "01EDA "01EDB "01EDA % LATIN CAPITAL LETTER O WITH HORN AND ACUTE \setXTXcharcodes "01EDB "01EDB "01EDA % LATIN SMALL LETTER O WITH HORN AND ACUTE \setXTXcharcodes "01EDC "01EDD "01EDC % LATIN CAPITAL LETTER O WITH HORN AND GRAVE \setXTXcharcodes "01EDD "01EDD "01EDC % LATIN SMALL LETTER O WITH HORN AND GRAVE \setXTXcharcodes "01EDE "01EDF "01EDE % LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE \setXTXcharcodes "01EDF "01EDF "01EDE % LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE \setXTXcharcodes "01EE0 "01EE1 "01EE0 % LATIN CAPITAL LETTER O WITH HORN AND TILDE \setXTXcharcodes "01EE1 "01EE1 "01EE0 % LATIN SMALL LETTER O WITH HORN AND TILDE \setXTXcharcodes "01EE2 "01EE3 "01EE2 % LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW \setXTXcharcodes "01EE3 "01EE3 "01EE2 % LATIN SMALL LETTER O WITH HORN AND DOT BELOW \setXTXcharcodes "01EE4 "01EE5 "01EE4 % LATIN CAPITAL LETTER U WITH DOT BELOW \setXTXcharcodes "01EE5 "01EE5 "01EE4 % LATIN SMALL LETTER U WITH DOT BELOW \setXTXcharcodes "01EE6 "01EE7 "01EE6 % LATIN CAPITAL LETTER U WITH HOOK ABOVE \setXTXcharcodes "01EE7 "01EE7 "01EE6 % LATIN SMALL LETTER U WITH HOOK ABOVE \setXTXcharcodes "01EE8 "01EE9 "01EE8 % LATIN CAPITAL LETTER U WITH HORN AND ACUTE \setXTXcharcodes "01EE9 "01EE9 "01EE8 % LATIN SMALL LETTER U WITH HORN AND ACUTE \setXTXcharcodes "01EEA "01EEB "01EEA % LATIN CAPITAL LETTER U WITH HORN AND GRAVE \setXTXcharcodes "01EEB "01EEB "01EEA % LATIN SMALL LETTER U WITH HORN AND GRAVE \setXTXcharcodes "01EEC "01EED "01EEC % LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE \setXTXcharcodes "01EED "01EED "01EEC % LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE \setXTXcharcodes "01EEE "01EEF "01EEE % LATIN CAPITAL LETTER U WITH HORN AND TILDE \setXTXcharcodes "01EEF "01EEF "01EEE % LATIN SMALL LETTER U WITH HORN AND TILDE \setXTXcharcodes "01EF0 "01EF1 "01EF0 % LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW \setXTXcharcodes "01EF1 "01EF1 "01EF0 % LATIN SMALL LETTER U WITH HORN AND DOT BELOW \setXTXcharcodes "01EF2 "01EF3 "01EF2 % LATIN CAPITAL LETTER Y WITH GRAVE \setXTXcharcodes "01EF3 "01EF3 "01EF2 % LATIN SMALL LETTER Y WITH GRAVE \setXTXcharcodes "01EF4 "01EF5 "01EF4 % LATIN CAPITAL LETTER Y WITH DOT BELOW \setXTXcharcodes "01EF5 "01EF5 "01EF4 % LATIN SMALL LETTER Y WITH DOT BELOW \setXTXcharcodes "01EF6 "01EF7 "01EF6 % LATIN CAPITAL LETTER Y WITH HOOK ABOVE \setXTXcharcodes "01EF7 "01EF7 "01EF6 % LATIN SMALL LETTER Y WITH HOOK ABOVE \setXTXcharcodes "01EF8 "01EF9 "01EF8 % LATIN CAPITAL LETTER Y WITH TILDE \setXTXcharcodes "01EF9 "01EF9 "01EF8 % LATIN SMALL LETTER Y WITH TILDE \setXTXcharcodes "01F00 "01F00 "01F08 % GREEK SMALL LETTER ALPHA WITH PSILI \setXTXcharcodes "01F01 "01F01 "01F09 % GREEK SMALL LETTER ALPHA WITH DASIA \setXTXcharcodes "01F02 "01F02 "01F0A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA \setXTXcharcodes "01F03 "01F03 "01F0B % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA \setXTXcharcodes "01F04 "01F04 "01F0C % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA \setXTXcharcodes "01F05 "01F05 "01F0D % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA \setXTXcharcodes "01F06 "01F06 "01F0E % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F07 "01F07 "01F0F % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F08 "01F00 "01F08 % GREEK CAPITAL LETTER ALPHA WITH PSILI \setXTXcharcodes "01F09 "01F01 "01F09 % GREEK CAPITAL LETTER ALPHA WITH DASIA \setXTXcharcodes "01F0A "01F02 "01F0A % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA \setXTXcharcodes "01F0B "01F03 "01F0B % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA \setXTXcharcodes "01F0C "01F04 "01F0C % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA \setXTXcharcodes "01F0D "01F05 "01F0D % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA \setXTXcharcodes "01F0E "01F06 "01F0E % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F0F "01F07 "01F0F % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F10 "01F10 "01F18 % GREEK SMALL LETTER EPSILON WITH PSILI \setXTXcharcodes "01F11 "01F11 "01F19 % GREEK SMALL LETTER EPSILON WITH DASIA \setXTXcharcodes "01F12 "01F12 "01F1A % GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA \setXTXcharcodes "01F13 "01F13 "01F1B % GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA \setXTXcharcodes "01F14 "01F14 "01F1C % GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA \setXTXcharcodes "01F15 "01F15 "01F1D % GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA \setXTXcharcodes "01F18 "01F10 "01F18 % GREEK CAPITAL LETTER EPSILON WITH PSILI \setXTXcharcodes "01F19 "01F11 "01F19 % GREEK CAPITAL LETTER EPSILON WITH DASIA \setXTXcharcodes "01F1A "01F12 "01F1A % GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA \setXTXcharcodes "01F1B "01F13 "01F1B % GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA \setXTXcharcodes "01F1C "01F14 "01F1C % GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA \setXTXcharcodes "01F1D "01F15 "01F1D % GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA \setXTXcharcodes "01F20 "01F20 "01F28 % GREEK SMALL LETTER ETA WITH PSILI \setXTXcharcodes "01F21 "01F21 "01F29 % GREEK SMALL LETTER ETA WITH DASIA \setXTXcharcodes "01F22 "01F22 "01F2A % GREEK SMALL LETTER ETA WITH PSILI AND VARIA \setXTXcharcodes "01F23 "01F23 "01F2B % GREEK SMALL LETTER ETA WITH DASIA AND VARIA \setXTXcharcodes "01F24 "01F24 "01F2C % GREEK SMALL LETTER ETA WITH PSILI AND OXIA \setXTXcharcodes "01F25 "01F25 "01F2D % GREEK SMALL LETTER ETA WITH DASIA AND OXIA \setXTXcharcodes "01F26 "01F26 "01F2E % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F27 "01F27 "01F2F % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F28 "01F20 "01F28 % GREEK CAPITAL LETTER ETA WITH PSILI \setXTXcharcodes "01F29 "01F21 "01F29 % GREEK CAPITAL LETTER ETA WITH DASIA \setXTXcharcodes "01F2A "01F22 "01F2A % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA \setXTXcharcodes "01F2B "01F23 "01F2B % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA \setXTXcharcodes "01F2C "01F24 "01F2C % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA \setXTXcharcodes "01F2D "01F25 "01F2D % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA \setXTXcharcodes "01F2E "01F26 "01F2E % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F2F "01F27 "01F2F % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F30 "01F30 "01F38 % GREEK SMALL LETTER IOTA WITH PSILI \setXTXcharcodes "01F31 "01F31 "01F39 % GREEK SMALL LETTER IOTA WITH DASIA \setXTXcharcodes "01F32 "01F32 "01F3A % GREEK SMALL LETTER IOTA WITH PSILI AND VARIA \setXTXcharcodes "01F33 "01F33 "01F3B % GREEK SMALL LETTER IOTA WITH DASIA AND VARIA \setXTXcharcodes "01F34 "01F34 "01F3C % GREEK SMALL LETTER IOTA WITH PSILI AND OXIA \setXTXcharcodes "01F35 "01F35 "01F3D % GREEK SMALL LETTER IOTA WITH DASIA AND OXIA \setXTXcharcodes "01F36 "01F36 "01F3E % GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F37 "01F37 "01F3F % GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F38 "01F30 "01F38 % GREEK CAPITAL LETTER IOTA WITH PSILI \setXTXcharcodes "01F39 "01F31 "01F39 % GREEK CAPITAL LETTER IOTA WITH DASIA \setXTXcharcodes "01F3A "01F32 "01F3A % GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA \setXTXcharcodes "01F3B "01F33 "01F3B % GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA \setXTXcharcodes "01F3C "01F34 "01F3C % GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA \setXTXcharcodes "01F3D "01F35 "01F3D % GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA \setXTXcharcodes "01F3E "01F36 "01F3E % GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F3F "01F37 "01F3F % GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F40 "01F40 "01F48 % GREEK SMALL LETTER OMICRON WITH PSILI \setXTXcharcodes "01F41 "01F41 "01F49 % GREEK SMALL LETTER OMICRON WITH DASIA \setXTXcharcodes "01F42 "01F42 "01F4A % GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA \setXTXcharcodes "01F43 "01F43 "01F4B % GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA \setXTXcharcodes "01F44 "01F44 "01F4C % GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA \setXTXcharcodes "01F45 "01F45 "01F4D % GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA \setXTXcharcodes "01F48 "01F40 "01F48 % GREEK CAPITAL LETTER OMICRON WITH PSILI \setXTXcharcodes "01F49 "01F41 "01F49 % GREEK CAPITAL LETTER OMICRON WITH DASIA \setXTXcharcodes "01F4A "01F42 "01F4A % GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA \setXTXcharcodes "01F4B "01F43 "01F4B % GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA \setXTXcharcodes "01F4C "01F44 "01F4C % GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA \setXTXcharcodes "01F4D "01F45 "01F4D % GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA \setXTXcharcodes "01F50 "01F50 "01F50 % GREEK SMALL LETTER UPSILON WITH PSILI \setXTXcharcodes "01F51 "01F51 "01F59 % GREEK SMALL LETTER UPSILON WITH DASIA \setXTXcharcodes "01F52 "01F52 "01F52 % GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA \setXTXcharcodes "01F53 "01F53 "01F5B % GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA \setXTXcharcodes "01F54 "01F54 "01F54 % GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA \setXTXcharcodes "01F55 "01F55 "01F5D % GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA \setXTXcharcodes "01F56 "01F56 "01F56 % GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F57 "01F57 "01F5F % GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F59 "01F51 "01F59 % GREEK CAPITAL LETTER UPSILON WITH DASIA \setXTXcharcodes "01F5B "01F53 "01F5B % GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA \setXTXcharcodes "01F5D "01F55 "01F5D % GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA \setXTXcharcodes "01F5F "01F57 "01F5F % GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F60 "01F60 "01F68 % GREEK SMALL LETTER OMEGA WITH PSILI \setXTXcharcodes "01F61 "01F61 "01F69 % GREEK SMALL LETTER OMEGA WITH DASIA \setXTXcharcodes "01F62 "01F62 "01F6A % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA \setXTXcharcodes "01F63 "01F63 "01F6B % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA \setXTXcharcodes "01F64 "01F64 "01F6C % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA \setXTXcharcodes "01F65 "01F65 "01F6D % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA \setXTXcharcodes "01F66 "01F66 "01F6E % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F67 "01F67 "01F6F % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F68 "01F60 "01F68 % GREEK CAPITAL LETTER OMEGA WITH PSILI \setXTXcharcodes "01F69 "01F61 "01F69 % GREEK CAPITAL LETTER OMEGA WITH DASIA \setXTXcharcodes "01F6A "01F62 "01F6A % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA \setXTXcharcodes "01F6B "01F63 "01F6B % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA \setXTXcharcodes "01F6C "01F64 "01F6C % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA \setXTXcharcodes "01F6D "01F65 "01F6D % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA \setXTXcharcodes "01F6E "01F66 "01F6E % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI \setXTXcharcodes "01F6F "01F67 "01F6F % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI \setXTXcharcodes "01F70 "01F70 "01FBA % GREEK SMALL LETTER ALPHA WITH VARIA \setXTXcharcodes "01F71 "01F71 "01FBB % GREEK SMALL LETTER ALPHA WITH OXIA \setXTXcharcodes "01F72 "01F72 "01FC8 % GREEK SMALL LETTER EPSILON WITH VARIA \setXTXcharcodes "01F73 "01F73 "01FC9 % GREEK SMALL LETTER EPSILON WITH OXIA \setXTXcharcodes "01F74 "01F74 "01FCA % GREEK SMALL LETTER ETA WITH VARIA \setXTXcharcodes "01F75 "01F75 "01FCB % GREEK SMALL LETTER ETA WITH OXIA \setXTXcharcodes "01F76 "01F76 "01FDA % GREEK SMALL LETTER IOTA WITH VARIA \setXTXcharcodes "01F77 "01F77 "01FDB % GREEK SMALL LETTER IOTA WITH OXIA \setXTXcharcodes "01F78 "01F78 "01FF8 % GREEK SMALL LETTER OMICRON WITH VARIA \setXTXcharcodes "01F79 "01F79 "01FF9 % GREEK SMALL LETTER OMICRON WITH OXIA \setXTXcharcodes "01F7A "01F7A "01FEA % GREEK SMALL LETTER UPSILON WITH VARIA \setXTXcharcodes "01F7B "01F7B "01FEB % GREEK SMALL LETTER UPSILON WITH OXIA \setXTXcharcodes "01F7C "01F7C "01FFA % GREEK SMALL LETTER OMEGA WITH VARIA \setXTXcharcodes "01F7D "01F7D "01FFB % GREEK SMALL LETTER OMEGA WITH OXIA \setXTXcharcodes "01F80 "01F80 "01F88 % GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI \setXTXcharcodes "01F81 "01F81 "01F89 % GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI \setXTXcharcodes "01F82 "01F82 "01F8A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01F83 "01F83 "01F8B % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01F84 "01F84 "01F8C % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01F85 "01F85 "01F8D % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01F86 "01F86 "01F8E % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01F87 "01F87 "01F8F % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01F88 "01F80 "01F88 % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI \setXTXcharcodes "01F89 "01F81 "01F89 % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI \setXTXcharcodes "01F8A "01F82 "01F8A % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI \setXTXcharcodes "01F8B "01F83 "01F8B % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI \setXTXcharcodes "01F8C "01F84 "01F8C % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI \setXTXcharcodes "01F8D "01F85 "01F8D % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI \setXTXcharcodes "01F8E "01F86 "01F8E % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI \setXTXcharcodes "01F8F "01F87 "01F8F % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI \setXTXcharcodes "01F90 "01F90 "01F98 % GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI \setXTXcharcodes "01F91 "01F91 "01F99 % GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI \setXTXcharcodes "01F92 "01F92 "01F9A % GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01F93 "01F93 "01F9B % GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01F94 "01F94 "01F9C % GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01F95 "01F95 "01F9D % GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01F96 "01F96 "01F9E % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01F97 "01F97 "01F9F % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01F98 "01F90 "01F98 % GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI \setXTXcharcodes "01F99 "01F91 "01F99 % GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI \setXTXcharcodes "01F9A "01F92 "01F9A % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI \setXTXcharcodes "01F9B "01F93 "01F9B % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI \setXTXcharcodes "01F9C "01F94 "01F9C % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI \setXTXcharcodes "01F9D "01F95 "01F9D % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI \setXTXcharcodes "01F9E "01F96 "01F9E % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI \setXTXcharcodes "01F9F "01F97 "01F9F % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI \setXTXcharcodes "01FA0 "01FA0 "01FA8 % GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI \setXTXcharcodes "01FA1 "01FA1 "01FA9 % GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI \setXTXcharcodes "01FA2 "01FA2 "01FAA % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01FA3 "01FA3 "01FAB % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01FA4 "01FA4 "01FAC % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01FA5 "01FA5 "01FAD % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01FA6 "01FA6 "01FAE % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01FA7 "01FA7 "01FAF % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01FA8 "01FA0 "01FA8 % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI \setXTXcharcodes "01FA9 "01FA1 "01FA9 % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI \setXTXcharcodes "01FAA "01FA2 "01FAA % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI \setXTXcharcodes "01FAB "01FA3 "01FAB % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI \setXTXcharcodes "01FAC "01FA4 "01FAC % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI \setXTXcharcodes "01FAD "01FA5 "01FAD % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI \setXTXcharcodes "01FAE "01FA6 "01FAE % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI \setXTXcharcodes "01FAF "01FA7 "01FAF % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI \setXTXcharcodes "01FB0 "01FB0 "01FB8 % GREEK SMALL LETTER ALPHA WITH VRACHY \setXTXcharcodes "01FB1 "01FB1 "01FB9 % GREEK SMALL LETTER ALPHA WITH MACRON \setXTXcharcodes "01FB2 "01FB2 "01FB2 % GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01FB3 "01FB3 "01FBC % GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI \setXTXcharcodes "01FB4 "01FB4 "01FB4 % GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01FB6 "01FB6 "01FB6 % GREEK SMALL LETTER ALPHA WITH PERISPOMENI \setXTXcharcodes "01FB7 "01FB7 "01FB7 % GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01FB8 "01FB0 "01FB8 % GREEK CAPITAL LETTER ALPHA WITH VRACHY \setXTXcharcodes "01FB9 "01FB1 "01FB9 % GREEK CAPITAL LETTER ALPHA WITH MACRON \setXTXcharcodes "01FBA "01F70 "01FBA % GREEK CAPITAL LETTER ALPHA WITH VARIA \setXTXcharcodes "01FBB "01F71 "01FBB % GREEK CAPITAL LETTER ALPHA WITH OXIA \setXTXcharcodes "01FBC "01FB3 "01FBC % GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI \setXTXcharcodes "01FBE "01FBE "00399 % GREEK PROSGEGRAMMENI \setXTXcharcodes "01FC2 "01FC2 "01FC2 % GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01FC3 "01FC3 "01FCC % GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI \setXTXcharcodes "01FC4 "01FC4 "01FC4 % GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01FC6 "01FC6 "01FC6 % GREEK SMALL LETTER ETA WITH PERISPOMENI \setXTXcharcodes "01FC7 "01FC7 "01FC7 % GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01FC8 "01F72 "01FC8 % GREEK CAPITAL LETTER EPSILON WITH VARIA \setXTXcharcodes "01FC9 "01F73 "01FC9 % GREEK CAPITAL LETTER EPSILON WITH OXIA \setXTXcharcodes "01FCA "01F74 "01FCA % GREEK CAPITAL LETTER ETA WITH VARIA \setXTXcharcodes "01FCB "01F75 "01FCB % GREEK CAPITAL LETTER ETA WITH OXIA \setXTXcharcodes "01FCC "01FC3 "01FCC % GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI \setXTXcharcodes "01FD0 "01FD0 "01FD8 % GREEK SMALL LETTER IOTA WITH VRACHY \setXTXcharcodes "01FD1 "01FD1 "01FD9 % GREEK SMALL LETTER IOTA WITH MACRON \setXTXcharcodes "01FD2 "01FD2 "01FD2 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA \setXTXcharcodes "01FD3 "01FD3 "01FD3 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA \setXTXcharcodes "01FD6 "01FD6 "01FD6 % GREEK SMALL LETTER IOTA WITH PERISPOMENI \setXTXcharcodes "01FD7 "01FD7 "01FD7 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI \setXTXcharcodes "01FD8 "01FD0 "01FD8 % GREEK CAPITAL LETTER IOTA WITH VRACHY \setXTXcharcodes "01FD9 "01FD1 "01FD9 % GREEK CAPITAL LETTER IOTA WITH MACRON \setXTXcharcodes "01FDA "01F76 "01FDA % GREEK CAPITAL LETTER IOTA WITH VARIA \setXTXcharcodes "01FDB "01F77 "01FDB % GREEK CAPITAL LETTER IOTA WITH OXIA \setXTXcharcodes "01FE0 "01FE0 "01FE8 % GREEK SMALL LETTER UPSILON WITH VRACHY \setXTXcharcodes "01FE1 "01FE1 "01FE9 % GREEK SMALL LETTER UPSILON WITH MACRON \setXTXcharcodes "01FE2 "01FE2 "01FE2 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA \setXTXcharcodes "01FE3 "01FE3 "01FE3 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA \setXTXcharcodes "01FE4 "01FE4 "01FE4 % GREEK SMALL LETTER RHO WITH PSILI \setXTXcharcodes "01FE5 "01FE5 "01FEC % GREEK SMALL LETTER RHO WITH DASIA \setXTXcharcodes "01FE6 "01FE6 "01FE6 % GREEK SMALL LETTER UPSILON WITH PERISPOMENI \setXTXcharcodes "01FE7 "01FE7 "01FE7 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI \setXTXcharcodes "01FE8 "01FE0 "01FE8 % GREEK CAPITAL LETTER UPSILON WITH VRACHY \setXTXcharcodes "01FE9 "01FE1 "01FE9 % GREEK CAPITAL LETTER UPSILON WITH MACRON \setXTXcharcodes "01FEA "01F7A "01FEA % GREEK CAPITAL LETTER UPSILON WITH VARIA \setXTXcharcodes "01FEB "01F7B "01FEB % GREEK CAPITAL LETTER UPSILON WITH OXIA \setXTXcharcodes "01FEC "01FE5 "01FEC % GREEK CAPITAL LETTER RHO WITH DASIA \setXTXcharcodes "01FF2 "01FF2 "01FF2 % GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI \setXTXcharcodes "01FF3 "01FF3 "01FFC % GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI \setXTXcharcodes "01FF4 "01FF4 "01FF4 % GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI \setXTXcharcodes "01FF6 "01FF6 "01FF6 % GREEK SMALL LETTER OMEGA WITH PERISPOMENI \setXTXcharcodes "01FF7 "01FF7 "01FF7 % GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI \setXTXcharcodes "01FF8 "01F78 "01FF8 % GREEK CAPITAL LETTER OMICRON WITH VARIA \setXTXcharcodes "01FF9 "01F79 "01FF9 % GREEK CAPITAL LETTER OMICRON WITH OXIA \setXTXcharcodes "01FFA "01F7C "01FFA % GREEK CAPITAL LETTER OMEGA WITH VARIA \setXTXcharcodes "01FFB "01F7D "01FFB % GREEK CAPITAL LETTER OMEGA WITH OXIA \setXTXcharcodes "01FFC "01FF3 "01FFC % GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI \setXTXcharcodes "02071 "02071 "02071 % SUPERSCRIPT LATIN SMALL LETTER I \setXTXcharcodes "0207F "0207F "0207F % SUPERSCRIPT LATIN SMALL LETTER N \setXTXcharcodes "02102 "02102 "02102 % DOUBLE-STRUCK CAPITAL C \setXTXcharcodes "02107 "02107 "02107 % EULER CONSTANT \setXTXcharcodes "0210A "0210A "0210A % SCRIPT SMALL G \setXTXcharcodes "0210B "0210B "0210B % SCRIPT CAPITAL H \setXTXcharcodes "0210C "0210C "0210C % BLACK-LETTER CAPITAL H \setXTXcharcodes "0210D "0210D "0210D % DOUBLE-STRUCK CAPITAL H \setXTXcharcodes "0210E "0210E "0210E % PLANCK CONSTANT \setXTXcharcodes "0210F "0210F "0210F % PLANCK CONSTANT OVER TWO PI \setXTXcharcodes "02110 "02110 "02110 % SCRIPT CAPITAL I \setXTXcharcodes "02111 "02111 "02111 % BLACK-LETTER CAPITAL I \setXTXcharcodes "02112 "02112 "02112 % SCRIPT CAPITAL L \setXTXcharcodes "02113 "02113 "02113 % SCRIPT SMALL L \setXTXcharcodes "02115 "02115 "02115 % DOUBLE-STRUCK CAPITAL N \setXTXcharcodes "02119 "02119 "02119 % DOUBLE-STRUCK CAPITAL P \setXTXcharcodes "0211A "0211A "0211A % DOUBLE-STRUCK CAPITAL Q \setXTXcharcodes "0211B "0211B "0211B % SCRIPT CAPITAL R \setXTXcharcodes "0211C "0211C "0211C % BLACK-LETTER CAPITAL R \setXTXcharcodes "0211D "0211D "0211D % DOUBLE-STRUCK CAPITAL R \setXTXcharcodes "02124 "02124 "02124 % DOUBLE-STRUCK CAPITAL Z \setXTXcharcodes "02126 "003C9 "02126 % OHM SIGN \setXTXcharcodes "02128 "02128 "02128 % BLACK-LETTER CAPITAL Z \setXTXcharcodes "0212A "0006B "0212A % KELVIN SIGN \setXTXcharcodes "0212B "000E5 "0212B % ANGSTROM SIGN \setXTXcharcodes "0212C "0212C "0212C % SCRIPT CAPITAL B \setXTXcharcodes "0212D "0212D "0212D % BLACK-LETTER CAPITAL C \setXTXcharcodes "0212F "0212F "0212F % SCRIPT SMALL E \setXTXcharcodes "02130 "02130 "02130 % SCRIPT CAPITAL E \setXTXcharcodes "02131 "02131 "02131 % SCRIPT CAPITAL F \setXTXcharcodes "02132 "0214E "02132 % TURNED CAPITAL F \setXTXcharcodes "02133 "02133 "02133 % SCRIPT CAPITAL M \setXTXcharcodes "02134 "02134 "02134 % SCRIPT SMALL O \setXTXcharcodes "02139 "02139 "02139 % INFORMATION SOURCE \setXTXcharcodes "0213C "0213C "0213C % DOUBLE-STRUCK SMALL PI \setXTXcharcodes "0213D "0213D "0213D % DOUBLE-STRUCK SMALL GAMMA \setXTXcharcodes "0213E "0213E "0213E % DOUBLE-STRUCK CAPITAL GAMMA \setXTXcharcodes "0213F "0213F "0213F % DOUBLE-STRUCK CAPITAL PI \setXTXcharcodes "02145 "02145 "02145 % DOUBLE-STRUCK ITALIC CAPITAL D \setXTXcharcodes "02146 "02146 "02146 % DOUBLE-STRUCK ITALIC SMALL D \setXTXcharcodes "02147 "02147 "02147 % DOUBLE-STRUCK ITALIC SMALL E \setXTXcharcodes "02148 "02148 "02148 % DOUBLE-STRUCK ITALIC SMALL I \setXTXcharcodes "02149 "02149 "02149 % DOUBLE-STRUCK ITALIC SMALL J \setXTXcharcodes "0214E "0214E "02132 % TURNED SMALL F \setXTXcharcodes "02183 "02184 "02183 % ROMAN NUMERAL REVERSED ONE HUNDRED \setXTXcharcodes "02184 "02184 "02183 % LATIN SMALL LETTER REVERSED C \setXTXcharcodes "02C00 "02C30 "02C00 % GLAGOLITIC CAPITAL LETTER AZU \setXTXcharcodes "02C01 "02C31 "02C01 % GLAGOLITIC CAPITAL LETTER BUKY \setXTXcharcodes "02C02 "02C32 "02C02 % GLAGOLITIC CAPITAL LETTER VEDE \setXTXcharcodes "02C03 "02C33 "02C03 % GLAGOLITIC CAPITAL LETTER GLAGOLI \setXTXcharcodes "02C04 "02C34 "02C04 % GLAGOLITIC CAPITAL LETTER DOBRO \setXTXcharcodes "02C05 "02C35 "02C05 % GLAGOLITIC CAPITAL LETTER YESTU \setXTXcharcodes "02C06 "02C36 "02C06 % GLAGOLITIC CAPITAL LETTER ZHIVETE \setXTXcharcodes "02C07 "02C37 "02C07 % GLAGOLITIC CAPITAL LETTER DZELO \setXTXcharcodes "02C08 "02C38 "02C08 % GLAGOLITIC CAPITAL LETTER ZEMLJA \setXTXcharcodes "02C09 "02C39 "02C09 % GLAGOLITIC CAPITAL LETTER IZHE \setXTXcharcodes "02C0A "02C3A "02C0A % GLAGOLITIC CAPITAL LETTER INITIAL IZHE \setXTXcharcodes "02C0B "02C3B "02C0B % GLAGOLITIC CAPITAL LETTER I \setXTXcharcodes "02C0C "02C3C "02C0C % GLAGOLITIC CAPITAL LETTER DJERVI \setXTXcharcodes "02C0D "02C3D "02C0D % GLAGOLITIC CAPITAL LETTER KAKO \setXTXcharcodes "02C0E "02C3E "02C0E % GLAGOLITIC CAPITAL LETTER LJUDIJE \setXTXcharcodes "02C0F "02C3F "02C0F % GLAGOLITIC CAPITAL LETTER MYSLITE \setXTXcharcodes "02C10 "02C40 "02C10 % GLAGOLITIC CAPITAL LETTER NASHI \setXTXcharcodes "02C11 "02C41 "02C11 % GLAGOLITIC CAPITAL LETTER ONU \setXTXcharcodes "02C12 "02C42 "02C12 % GLAGOLITIC CAPITAL LETTER POKOJI \setXTXcharcodes "02C13 "02C43 "02C13 % GLAGOLITIC CAPITAL LETTER RITSI \setXTXcharcodes "02C14 "02C44 "02C14 % GLAGOLITIC CAPITAL LETTER SLOVO \setXTXcharcodes "02C15 "02C45 "02C15 % GLAGOLITIC CAPITAL LETTER TVRIDO \setXTXcharcodes "02C16 "02C46 "02C16 % GLAGOLITIC CAPITAL LETTER UKU \setXTXcharcodes "02C17 "02C47 "02C17 % GLAGOLITIC CAPITAL LETTER FRITU \setXTXcharcodes "02C18 "02C48 "02C18 % GLAGOLITIC CAPITAL LETTER HERU \setXTXcharcodes "02C19 "02C49 "02C19 % GLAGOLITIC CAPITAL LETTER OTU \setXTXcharcodes "02C1A "02C4A "02C1A % GLAGOLITIC CAPITAL LETTER PE \setXTXcharcodes "02C1B "02C4B "02C1B % GLAGOLITIC CAPITAL LETTER SHTA \setXTXcharcodes "02C1C "02C4C "02C1C % GLAGOLITIC CAPITAL LETTER TSI \setXTXcharcodes "02C1D "02C4D "02C1D % GLAGOLITIC CAPITAL LETTER CHRIVI \setXTXcharcodes "02C1E "02C4E "02C1E % GLAGOLITIC CAPITAL LETTER SHA \setXTXcharcodes "02C1F "02C4F "02C1F % GLAGOLITIC CAPITAL LETTER YERU \setXTXcharcodes "02C20 "02C50 "02C20 % GLAGOLITIC CAPITAL LETTER YERI \setXTXcharcodes "02C21 "02C51 "02C21 % GLAGOLITIC CAPITAL LETTER YATI \setXTXcharcodes "02C22 "02C52 "02C22 % GLAGOLITIC CAPITAL LETTER SPIDERY HA \setXTXcharcodes "02C23 "02C53 "02C23 % GLAGOLITIC CAPITAL LETTER YU \setXTXcharcodes "02C24 "02C54 "02C24 % GLAGOLITIC CAPITAL LETTER SMALL YUS \setXTXcharcodes "02C25 "02C55 "02C25 % GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL \setXTXcharcodes "02C26 "02C56 "02C26 % GLAGOLITIC CAPITAL LETTER YO \setXTXcharcodes "02C27 "02C57 "02C27 % GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS \setXTXcharcodes "02C28 "02C58 "02C28 % GLAGOLITIC CAPITAL LETTER BIG YUS \setXTXcharcodes "02C29 "02C59 "02C29 % GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS \setXTXcharcodes "02C2A "02C5A "02C2A % GLAGOLITIC CAPITAL LETTER FITA \setXTXcharcodes "02C2B "02C5B "02C2B % GLAGOLITIC CAPITAL LETTER IZHITSA \setXTXcharcodes "02C2C "02C5C "02C2C % GLAGOLITIC CAPITAL LETTER SHTAPIC \setXTXcharcodes "02C2D "02C5D "02C2D % GLAGOLITIC CAPITAL LETTER TROKUTASTI A \setXTXcharcodes "02C2E "02C5E "02C2E % GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE \setXTXcharcodes "02C30 "02C30 "02C00 % GLAGOLITIC SMALL LETTER AZU \setXTXcharcodes "02C31 "02C31 "02C01 % GLAGOLITIC SMALL LETTER BUKY \setXTXcharcodes "02C32 "02C32 "02C02 % GLAGOLITIC SMALL LETTER VEDE \setXTXcharcodes "02C33 "02C33 "02C03 % GLAGOLITIC SMALL LETTER GLAGOLI \setXTXcharcodes "02C34 "02C34 "02C04 % GLAGOLITIC SMALL LETTER DOBRO \setXTXcharcodes "02C35 "02C35 "02C05 % GLAGOLITIC SMALL LETTER YESTU \setXTXcharcodes "02C36 "02C36 "02C06 % GLAGOLITIC SMALL LETTER ZHIVETE \setXTXcharcodes "02C37 "02C37 "02C07 % GLAGOLITIC SMALL LETTER DZELO \setXTXcharcodes "02C38 "02C38 "02C08 % GLAGOLITIC SMALL LETTER ZEMLJA \setXTXcharcodes "02C39 "02C39 "02C09 % GLAGOLITIC SMALL LETTER IZHE \setXTXcharcodes "02C3A "02C3A "02C0A % GLAGOLITIC SMALL LETTER INITIAL IZHE \setXTXcharcodes "02C3B "02C3B "02C0B % GLAGOLITIC SMALL LETTER I \setXTXcharcodes "02C3C "02C3C "02C0C % GLAGOLITIC SMALL LETTER DJERVI \setXTXcharcodes "02C3D "02C3D "02C0D % GLAGOLITIC SMALL LETTER KAKO \setXTXcharcodes "02C3E "02C3E "02C0E % GLAGOLITIC SMALL LETTER LJUDIJE \setXTXcharcodes "02C3F "02C3F "02C0F % GLAGOLITIC SMALL LETTER MYSLITE \setXTXcharcodes "02C40 "02C40 "02C10 % GLAGOLITIC SMALL LETTER NASHI \setXTXcharcodes "02C41 "02C41 "02C11 % GLAGOLITIC SMALL LETTER ONU \setXTXcharcodes "02C42 "02C42 "02C12 % GLAGOLITIC SMALL LETTER POKOJI \setXTXcharcodes "02C43 "02C43 "02C13 % GLAGOLITIC SMALL LETTER RITSI \setXTXcharcodes "02C44 "02C44 "02C14 % GLAGOLITIC SMALL LETTER SLOVO \setXTXcharcodes "02C45 "02C45 "02C15 % GLAGOLITIC SMALL LETTER TVRIDO \setXTXcharcodes "02C46 "02C46 "02C16 % GLAGOLITIC SMALL LETTER UKU \setXTXcharcodes "02C47 "02C47 "02C17 % GLAGOLITIC SMALL LETTER FRITU \setXTXcharcodes "02C48 "02C48 "02C18 % GLAGOLITIC SMALL LETTER HERU \setXTXcharcodes "02C49 "02C49 "02C19 % GLAGOLITIC SMALL LETTER OTU \setXTXcharcodes "02C4A "02C4A "02C1A % GLAGOLITIC SMALL LETTER PE \setXTXcharcodes "02C4B "02C4B "02C1B % GLAGOLITIC SMALL LETTER SHTA \setXTXcharcodes "02C4C "02C4C "02C1C % GLAGOLITIC SMALL LETTER TSI \setXTXcharcodes "02C4D "02C4D "02C1D % GLAGOLITIC SMALL LETTER CHRIVI \setXTXcharcodes "02C4E "02C4E "02C1E % GLAGOLITIC SMALL LETTER SHA \setXTXcharcodes "02C4F "02C4F "02C1F % GLAGOLITIC SMALL LETTER YERU \setXTXcharcodes "02C50 "02C50 "02C20 % GLAGOLITIC SMALL LETTER YERI \setXTXcharcodes "02C51 "02C51 "02C21 % GLAGOLITIC SMALL LETTER YATI \setXTXcharcodes "02C52 "02C52 "02C22 % GLAGOLITIC SMALL LETTER SPIDERY HA \setXTXcharcodes "02C53 "02C53 "02C23 % GLAGOLITIC SMALL LETTER YU \setXTXcharcodes "02C54 "02C54 "02C24 % GLAGOLITIC SMALL LETTER SMALL YUS \setXTXcharcodes "02C55 "02C55 "02C25 % GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL \setXTXcharcodes "02C56 "02C56 "02C26 % GLAGOLITIC SMALL LETTER YO \setXTXcharcodes "02C57 "02C57 "02C27 % GLAGOLITIC SMALL LETTER IOTATED SMALL YUS \setXTXcharcodes "02C58 "02C58 "02C28 % GLAGOLITIC SMALL LETTER BIG YUS \setXTXcharcodes "02C59 "02C59 "02C29 % GLAGOLITIC SMALL LETTER IOTATED BIG YUS \setXTXcharcodes "02C5A "02C5A "02C2A % GLAGOLITIC SMALL LETTER FITA \setXTXcharcodes "02C5B "02C5B "02C2B % GLAGOLITIC SMALL LETTER IZHITSA \setXTXcharcodes "02C5C "02C5C "02C2C % GLAGOLITIC SMALL LETTER SHTAPIC \setXTXcharcodes "02C5D "02C5D "02C2D % GLAGOLITIC SMALL LETTER TROKUTASTI A \setXTXcharcodes "02C5E "02C5E "02C2E % GLAGOLITIC SMALL LETTER LATINATE MYSLITE \setXTXcharcodes "02C60 "02C61 "02C60 % LATIN CAPITAL LETTER L WITH DOUBLE BAR \setXTXcharcodes "02C61 "02C61 "02C60 % LATIN SMALL LETTER L WITH DOUBLE BAR \setXTXcharcodes "02C62 "0026B "02C62 % LATIN CAPITAL LETTER L WITH MIDDLE TILDE \setXTXcharcodes "02C63 "01D7D "02C63 % LATIN CAPITAL LETTER P WITH STROKE \setXTXcharcodes "02C64 "0027D "02C64 % LATIN CAPITAL LETTER R WITH TAIL \setXTXcharcodes "02C65 "02C65 "0023A % LATIN SMALL LETTER A WITH STROKE \setXTXcharcodes "02C66 "02C66 "0023E % LATIN SMALL LETTER T WITH DIAGONAL STROKE \setXTXcharcodes "02C67 "02C68 "02C67 % LATIN CAPITAL LETTER H WITH DESCENDER \setXTXcharcodes "02C68 "02C68 "02C67 % LATIN SMALL LETTER H WITH DESCENDER \setXTXcharcodes "02C69 "02C6A "02C69 % LATIN CAPITAL LETTER K WITH DESCENDER \setXTXcharcodes "02C6A "02C6A "02C69 % LATIN SMALL LETTER K WITH DESCENDER \setXTXcharcodes "02C6B "02C6C "02C6B % LATIN CAPITAL LETTER Z WITH DESCENDER \setXTXcharcodes "02C6C "02C6C "02C6B % LATIN SMALL LETTER Z WITH DESCENDER \setXTXcharcodes "02C74 "02C74 "02C74 % LATIN SMALL LETTER V WITH CURL \setXTXcharcodes "02C75 "02C76 "02C75 % LATIN CAPITAL LETTER HALF H \setXTXcharcodes "02C76 "02C76 "02C75 % LATIN SMALL LETTER HALF H \setXTXcharcodes "02C77 "02C77 "02C77 % LATIN SMALL LETTER TAILLESS PHI \setXTXcharcodes "02C80 "02C81 "02C80 % COPTIC CAPITAL LETTER ALFA \setXTXcharcodes "02C81 "02C81 "02C80 % COPTIC SMALL LETTER ALFA \setXTXcharcodes "02C82 "02C83 "02C82 % COPTIC CAPITAL LETTER VIDA \setXTXcharcodes "02C83 "02C83 "02C82 % COPTIC SMALL LETTER VIDA \setXTXcharcodes "02C84 "02C85 "02C84 % COPTIC CAPITAL LETTER GAMMA \setXTXcharcodes "02C85 "02C85 "02C84 % COPTIC SMALL LETTER GAMMA \setXTXcharcodes "02C86 "02C87 "02C86 % COPTIC CAPITAL LETTER DALDA \setXTXcharcodes "02C87 "02C87 "02C86 % COPTIC SMALL LETTER DALDA \setXTXcharcodes "02C88 "02C89 "02C88 % COPTIC CAPITAL LETTER EIE \setXTXcharcodes "02C89 "02C89 "02C88 % COPTIC SMALL LETTER EIE \setXTXcharcodes "02C8A "02C8B "02C8A % COPTIC CAPITAL LETTER SOU \setXTXcharcodes "02C8B "02C8B "02C8A % COPTIC SMALL LETTER SOU \setXTXcharcodes "02C8C "02C8D "02C8C % COPTIC CAPITAL LETTER ZATA \setXTXcharcodes "02C8D "02C8D "02C8C % COPTIC SMALL LETTER ZATA \setXTXcharcodes "02C8E "02C8F "02C8E % COPTIC CAPITAL LETTER HATE \setXTXcharcodes "02C8F "02C8F "02C8E % COPTIC SMALL LETTER HATE \setXTXcharcodes "02C90 "02C91 "02C90 % COPTIC CAPITAL LETTER THETHE \setXTXcharcodes "02C91 "02C91 "02C90 % COPTIC SMALL LETTER THETHE \setXTXcharcodes "02C92 "02C93 "02C92 % COPTIC CAPITAL LETTER IAUDA \setXTXcharcodes "02C93 "02C93 "02C92 % COPTIC SMALL LETTER IAUDA \setXTXcharcodes "02C94 "02C95 "02C94 % COPTIC CAPITAL LETTER KAPA \setXTXcharcodes "02C95 "02C95 "02C94 % COPTIC SMALL LETTER KAPA \setXTXcharcodes "02C96 "02C97 "02C96 % COPTIC CAPITAL LETTER LAULA \setXTXcharcodes "02C97 "02C97 "02C96 % COPTIC SMALL LETTER LAULA \setXTXcharcodes "02C98 "02C99 "02C98 % COPTIC CAPITAL LETTER MI \setXTXcharcodes "02C99 "02C99 "02C98 % COPTIC SMALL LETTER MI \setXTXcharcodes "02C9A "02C9B "02C9A % COPTIC CAPITAL LETTER NI \setXTXcharcodes "02C9B "02C9B "02C9A % COPTIC SMALL LETTER NI \setXTXcharcodes "02C9C "02C9D "02C9C % COPTIC CAPITAL LETTER KSI \setXTXcharcodes "02C9D "02C9D "02C9C % COPTIC SMALL LETTER KSI \setXTXcharcodes "02C9E "02C9F "02C9E % COPTIC CAPITAL LETTER O \setXTXcharcodes "02C9F "02C9F "02C9E % COPTIC SMALL LETTER O \setXTXcharcodes "02CA0 "02CA1 "02CA0 % COPTIC CAPITAL LETTER PI \setXTXcharcodes "02CA1 "02CA1 "02CA0 % COPTIC SMALL LETTER PI \setXTXcharcodes "02CA2 "02CA3 "02CA2 % COPTIC CAPITAL LETTER RO \setXTXcharcodes "02CA3 "02CA3 "02CA2 % COPTIC SMALL LETTER RO \setXTXcharcodes "02CA4 "02CA5 "02CA4 % COPTIC CAPITAL LETTER SIMA \setXTXcharcodes "02CA5 "02CA5 "02CA4 % COPTIC SMALL LETTER SIMA \setXTXcharcodes "02CA6 "02CA7 "02CA6 % COPTIC CAPITAL LETTER TAU \setXTXcharcodes "02CA7 "02CA7 "02CA6 % COPTIC SMALL LETTER TAU \setXTXcharcodes "02CA8 "02CA9 "02CA8 % COPTIC CAPITAL LETTER UA \setXTXcharcodes "02CA9 "02CA9 "02CA8 % COPTIC SMALL LETTER UA \setXTXcharcodes "02CAA "02CAB "02CAA % COPTIC CAPITAL LETTER FI \setXTXcharcodes "02CAB "02CAB "02CAA % COPTIC SMALL LETTER FI \setXTXcharcodes "02CAC "02CAD "02CAC % COPTIC CAPITAL LETTER KHI \setXTXcharcodes "02CAD "02CAD "02CAC % COPTIC SMALL LETTER KHI \setXTXcharcodes "02CAE "02CAF "02CAE % COPTIC CAPITAL LETTER PSI \setXTXcharcodes "02CAF "02CAF "02CAE % COPTIC SMALL LETTER PSI \setXTXcharcodes "02CB0 "02CB1 "02CB0 % COPTIC CAPITAL LETTER OOU \setXTXcharcodes "02CB1 "02CB1 "02CB0 % COPTIC SMALL LETTER OOU \setXTXcharcodes "02CB2 "02CB3 "02CB2 % COPTIC CAPITAL LETTER DIALECT-P ALEF \setXTXcharcodes "02CB3 "02CB3 "02CB2 % COPTIC SMALL LETTER DIALECT-P ALEF \setXTXcharcodes "02CB4 "02CB5 "02CB4 % COPTIC CAPITAL LETTER OLD COPTIC AIN \setXTXcharcodes "02CB5 "02CB5 "02CB4 % COPTIC SMALL LETTER OLD COPTIC AIN \setXTXcharcodes "02CB6 "02CB7 "02CB6 % COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE \setXTXcharcodes "02CB7 "02CB7 "02CB6 % COPTIC SMALL LETTER CRYPTOGRAMMIC EIE \setXTXcharcodes "02CB8 "02CB9 "02CB8 % COPTIC CAPITAL LETTER DIALECT-P KAPA \setXTXcharcodes "02CB9 "02CB9 "02CB8 % COPTIC SMALL LETTER DIALECT-P KAPA \setXTXcharcodes "02CBA "02CBB "02CBA % COPTIC CAPITAL LETTER DIALECT-P NI \setXTXcharcodes "02CBB "02CBB "02CBA % COPTIC SMALL LETTER DIALECT-P NI \setXTXcharcodes "02CBC "02CBD "02CBC % COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI \setXTXcharcodes "02CBD "02CBD "02CBC % COPTIC SMALL LETTER CRYPTOGRAMMIC NI \setXTXcharcodes "02CBE "02CBF "02CBE % COPTIC CAPITAL LETTER OLD COPTIC OOU \setXTXcharcodes "02CBF "02CBF "02CBE % COPTIC SMALL LETTER OLD COPTIC OOU \setXTXcharcodes "02CC0 "02CC1 "02CC0 % COPTIC CAPITAL LETTER SAMPI \setXTXcharcodes "02CC1 "02CC1 "02CC0 % COPTIC SMALL LETTER SAMPI \setXTXcharcodes "02CC2 "02CC3 "02CC2 % COPTIC CAPITAL LETTER CROSSED SHEI \setXTXcharcodes "02CC3 "02CC3 "02CC2 % COPTIC SMALL LETTER CROSSED SHEI \setXTXcharcodes "02CC4 "02CC5 "02CC4 % COPTIC CAPITAL LETTER OLD COPTIC SHEI \setXTXcharcodes "02CC5 "02CC5 "02CC4 % COPTIC SMALL LETTER OLD COPTIC SHEI \setXTXcharcodes "02CC6 "02CC7 "02CC6 % COPTIC CAPITAL LETTER OLD COPTIC ESH \setXTXcharcodes "02CC7 "02CC7 "02CC6 % COPTIC SMALL LETTER OLD COPTIC ESH \setXTXcharcodes "02CC8 "02CC9 "02CC8 % COPTIC CAPITAL LETTER AKHMIMIC KHEI \setXTXcharcodes "02CC9 "02CC9 "02CC8 % COPTIC SMALL LETTER AKHMIMIC KHEI \setXTXcharcodes "02CCA "02CCB "02CCA % COPTIC CAPITAL LETTER DIALECT-P HORI \setXTXcharcodes "02CCB "02CCB "02CCA % COPTIC SMALL LETTER DIALECT-P HORI \setXTXcharcodes "02CCC "02CCD "02CCC % COPTIC CAPITAL LETTER OLD COPTIC HORI \setXTXcharcodes "02CCD "02CCD "02CCC % COPTIC SMALL LETTER OLD COPTIC HORI \setXTXcharcodes "02CCE "02CCF "02CCE % COPTIC CAPITAL LETTER OLD COPTIC HA \setXTXcharcodes "02CCF "02CCF "02CCE % COPTIC SMALL LETTER OLD COPTIC HA \setXTXcharcodes "02CD0 "02CD1 "02CD0 % COPTIC CAPITAL LETTER L-SHAPED HA \setXTXcharcodes "02CD1 "02CD1 "02CD0 % COPTIC SMALL LETTER L-SHAPED HA \setXTXcharcodes "02CD2 "02CD3 "02CD2 % COPTIC CAPITAL LETTER OLD COPTIC HEI \setXTXcharcodes "02CD3 "02CD3 "02CD2 % COPTIC SMALL LETTER OLD COPTIC HEI \setXTXcharcodes "02CD4 "02CD5 "02CD4 % COPTIC CAPITAL LETTER OLD COPTIC HAT \setXTXcharcodes "02CD5 "02CD5 "02CD4 % COPTIC SMALL LETTER OLD COPTIC HAT \setXTXcharcodes "02CD6 "02CD7 "02CD6 % COPTIC CAPITAL LETTER OLD COPTIC GANGIA \setXTXcharcodes "02CD7 "02CD7 "02CD6 % COPTIC SMALL LETTER OLD COPTIC GANGIA \setXTXcharcodes "02CD8 "02CD9 "02CD8 % COPTIC CAPITAL LETTER OLD COPTIC DJA \setXTXcharcodes "02CD9 "02CD9 "02CD8 % COPTIC SMALL LETTER OLD COPTIC DJA \setXTXcharcodes "02CDA "02CDB "02CDA % COPTIC CAPITAL LETTER OLD COPTIC SHIMA \setXTXcharcodes "02CDB "02CDB "02CDA % COPTIC SMALL LETTER OLD COPTIC SHIMA \setXTXcharcodes "02CDC "02CDD "02CDC % COPTIC CAPITAL LETTER OLD NUBIAN SHIMA \setXTXcharcodes "02CDD "02CDD "02CDC % COPTIC SMALL LETTER OLD NUBIAN SHIMA \setXTXcharcodes "02CDE "02CDF "02CDE % COPTIC CAPITAL LETTER OLD NUBIAN NGI \setXTXcharcodes "02CDF "02CDF "02CDE % COPTIC SMALL LETTER OLD NUBIAN NGI \setXTXcharcodes "02CE0 "02CE1 "02CE0 % COPTIC CAPITAL LETTER OLD NUBIAN NYI \setXTXcharcodes "02CE1 "02CE1 "02CE0 % COPTIC SMALL LETTER OLD NUBIAN NYI \setXTXcharcodes "02CE2 "02CE3 "02CE2 % COPTIC CAPITAL LETTER OLD NUBIAN WAU \setXTXcharcodes "02CE3 "02CE3 "02CE2 % COPTIC SMALL LETTER OLD NUBIAN WAU \setXTXcharcodes "02CE4 "02CE4 "02CE4 % COPTIC SYMBOL KAI \setXTXcharcodes "02D00 "02D00 "010A0 % GEORGIAN SMALL LETTER AN \setXTXcharcodes "02D01 "02D01 "010A1 % GEORGIAN SMALL LETTER BAN \setXTXcharcodes "02D02 "02D02 "010A2 % GEORGIAN SMALL LETTER GAN \setXTXcharcodes "02D03 "02D03 "010A3 % GEORGIAN SMALL LETTER DON \setXTXcharcodes "02D04 "02D04 "010A4 % GEORGIAN SMALL LETTER EN \setXTXcharcodes "02D05 "02D05 "010A5 % GEORGIAN SMALL LETTER VIN \setXTXcharcodes "02D06 "02D06 "010A6 % GEORGIAN SMALL LETTER ZEN \setXTXcharcodes "02D07 "02D07 "010A7 % GEORGIAN SMALL LETTER TAN \setXTXcharcodes "02D08 "02D08 "010A8 % GEORGIAN SMALL LETTER IN \setXTXcharcodes "02D09 "02D09 "010A9 % GEORGIAN SMALL LETTER KAN \setXTXcharcodes "02D0A "02D0A "010AA % GEORGIAN SMALL LETTER LAS \setXTXcharcodes "02D0B "02D0B "010AB % GEORGIAN SMALL LETTER MAN \setXTXcharcodes "02D0C "02D0C "010AC % GEORGIAN SMALL LETTER NAR \setXTXcharcodes "02D0D "02D0D "010AD % GEORGIAN SMALL LETTER ON \setXTXcharcodes "02D0E "02D0E "010AE % GEORGIAN SMALL LETTER PAR \setXTXcharcodes "02D0F "02D0F "010AF % GEORGIAN SMALL LETTER ZHAR \setXTXcharcodes "02D10 "02D10 "010B0 % GEORGIAN SMALL LETTER RAE \setXTXcharcodes "02D11 "02D11 "010B1 % GEORGIAN SMALL LETTER SAN \setXTXcharcodes "02D12 "02D12 "010B2 % GEORGIAN SMALL LETTER TAR \setXTXcharcodes "02D13 "02D13 "010B3 % GEORGIAN SMALL LETTER UN \setXTXcharcodes "02D14 "02D14 "010B4 % GEORGIAN SMALL LETTER PHAR \setXTXcharcodes "02D15 "02D15 "010B5 % GEORGIAN SMALL LETTER KHAR \setXTXcharcodes "02D16 "02D16 "010B6 % GEORGIAN SMALL LETTER GHAN \setXTXcharcodes "02D17 "02D17 "010B7 % GEORGIAN SMALL LETTER QAR \setXTXcharcodes "02D18 "02D18 "010B8 % GEORGIAN SMALL LETTER SHIN \setXTXcharcodes "02D19 "02D19 "010B9 % GEORGIAN SMALL LETTER CHIN \setXTXcharcodes "02D1A "02D1A "010BA % GEORGIAN SMALL LETTER CAN \setXTXcharcodes "02D1B "02D1B "010BB % GEORGIAN SMALL LETTER JIL \setXTXcharcodes "02D1C "02D1C "010BC % GEORGIAN SMALL LETTER CIL \setXTXcharcodes "02D1D "02D1D "010BD % GEORGIAN SMALL LETTER CHAR \setXTXcharcodes "02D1E "02D1E "010BE % GEORGIAN SMALL LETTER XAN \setXTXcharcodes "02D1F "02D1F "010BF % GEORGIAN SMALL LETTER JHAN \setXTXcharcodes "02D20 "02D20 "010C0 % GEORGIAN SMALL LETTER HAE \setXTXcharcodes "02D21 "02D21 "010C1 % GEORGIAN SMALL LETTER HE \setXTXcharcodes "02D22 "02D22 "010C2 % GEORGIAN SMALL LETTER HIE \setXTXcharcodes "02D23 "02D23 "010C3 % GEORGIAN SMALL LETTER WE \setXTXcharcodes "02D24 "02D24 "010C4 % GEORGIAN SMALL LETTER HAR \setXTXcharcodes "02D25 "02D25 "010C5 % GEORGIAN SMALL LETTER HOE \setXTXcharcodes "0FB00 "0FB00 "0FB00 % LATIN SMALL LIGATURE FF \setXTXcharcodes "0FB01 "0FB01 "0FB01 % LATIN SMALL LIGATURE FI \setXTXcharcodes "0FB02 "0FB02 "0FB02 % LATIN SMALL LIGATURE FL \setXTXcharcodes "0FB03 "0FB03 "0FB03 % LATIN SMALL LIGATURE FFI \setXTXcharcodes "0FB04 "0FB04 "0FB04 % LATIN SMALL LIGATURE FFL \setXTXcharcodes "0FB05 "0FB05 "0FB05 % LATIN SMALL LIGATURE LONG S T \setXTXcharcodes "0FB06 "0FB06 "0FB06 % LATIN SMALL LIGATURE ST \setXTXcharcodes "0FB13 "0FB13 "0FB13 % ARMENIAN SMALL LIGATURE MEN NOW \setXTXcharcodes "0FB14 "0FB14 "0FB14 % ARMENIAN SMALL LIGATURE MEN ECH \setXTXcharcodes "0FB15 "0FB15 "0FB15 % ARMENIAN SMALL LIGATURE MEN INI \setXTXcharcodes "0FB16 "0FB16 "0FB16 % ARMENIAN SMALL LIGATURE VEW NOW \setXTXcharcodes "0FB17 "0FB17 "0FB17 % ARMENIAN SMALL LIGATURE MEN XEH \setXTXcharcodes "0FF21 "0FF41 "0FF21 % FULLWIDTH LATIN CAPITAL LETTER A \setXTXcharcodes "0FF22 "0FF42 "0FF22 % FULLWIDTH LATIN CAPITAL LETTER B \setXTXcharcodes "0FF23 "0FF43 "0FF23 % FULLWIDTH LATIN CAPITAL LETTER C \setXTXcharcodes "0FF24 "0FF44 "0FF24 % FULLWIDTH LATIN CAPITAL LETTER D \setXTXcharcodes "0FF25 "0FF45 "0FF25 % FULLWIDTH LATIN CAPITAL LETTER E \setXTXcharcodes "0FF26 "0FF46 "0FF26 % FULLWIDTH LATIN CAPITAL LETTER F \setXTXcharcodes "0FF27 "0FF47 "0FF27 % FULLWIDTH LATIN CAPITAL LETTER G \setXTXcharcodes "0FF28 "0FF48 "0FF28 % FULLWIDTH LATIN CAPITAL LETTER H \setXTXcharcodes "0FF29 "0FF49 "0FF29 % FULLWIDTH LATIN CAPITAL LETTER I \setXTXcharcodes "0FF2A "0FF4A "0FF2A % FULLWIDTH LATIN CAPITAL LETTER J \setXTXcharcodes "0FF2B "0FF4B "0FF2B % FULLWIDTH LATIN CAPITAL LETTER K \setXTXcharcodes "0FF2C "0FF4C "0FF2C % FULLWIDTH LATIN CAPITAL LETTER L \setXTXcharcodes "0FF2D "0FF4D "0FF2D % FULLWIDTH LATIN CAPITAL LETTER M \setXTXcharcodes "0FF2E "0FF4E "0FF2E % FULLWIDTH LATIN CAPITAL LETTER N \setXTXcharcodes "0FF2F "0FF4F "0FF2F % FULLWIDTH LATIN CAPITAL LETTER O \setXTXcharcodes "0FF30 "0FF50 "0FF30 % FULLWIDTH LATIN CAPITAL LETTER P \setXTXcharcodes "0FF31 "0FF51 "0FF31 % FULLWIDTH LATIN CAPITAL LETTER Q \setXTXcharcodes "0FF32 "0FF52 "0FF32 % FULLWIDTH LATIN CAPITAL LETTER R \setXTXcharcodes "0FF33 "0FF53 "0FF33 % FULLWIDTH LATIN CAPITAL LETTER S \setXTXcharcodes "0FF34 "0FF54 "0FF34 % FULLWIDTH LATIN CAPITAL LETTER T \setXTXcharcodes "0FF35 "0FF55 "0FF35 % FULLWIDTH LATIN CAPITAL LETTER U \setXTXcharcodes "0FF36 "0FF56 "0FF36 % FULLWIDTH LATIN CAPITAL LETTER V \setXTXcharcodes "0FF37 "0FF57 "0FF37 % FULLWIDTH LATIN CAPITAL LETTER W \setXTXcharcodes "0FF38 "0FF58 "0FF38 % FULLWIDTH LATIN CAPITAL LETTER X \setXTXcharcodes "0FF39 "0FF59 "0FF39 % FULLWIDTH LATIN CAPITAL LETTER Y \setXTXcharcodes "0FF3A "0FF5A "0FF3A % FULLWIDTH LATIN CAPITAL LETTER Z \setXTXcharcodes "0FF41 "0FF41 "0FF21 % FULLWIDTH LATIN SMALL LETTER A \setXTXcharcodes "0FF42 "0FF42 "0FF22 % FULLWIDTH LATIN SMALL LETTER B \setXTXcharcodes "0FF43 "0FF43 "0FF23 % FULLWIDTH LATIN SMALL LETTER C \setXTXcharcodes "0FF44 "0FF44 "0FF24 % FULLWIDTH LATIN SMALL LETTER D \setXTXcharcodes "0FF45 "0FF45 "0FF25 % FULLWIDTH LATIN SMALL LETTER E \setXTXcharcodes "0FF46 "0FF46 "0FF26 % FULLWIDTH LATIN SMALL LETTER F \setXTXcharcodes "0FF47 "0FF47 "0FF27 % FULLWIDTH LATIN SMALL LETTER G \setXTXcharcodes "0FF48 "0FF48 "0FF28 % FULLWIDTH LATIN SMALL LETTER H \setXTXcharcodes "0FF49 "0FF49 "0FF29 % FULLWIDTH LATIN SMALL LETTER I \setXTXcharcodes "0FF4A "0FF4A "0FF2A % FULLWIDTH LATIN SMALL LETTER J \setXTXcharcodes "0FF4B "0FF4B "0FF2B % FULLWIDTH LATIN SMALL LETTER K \setXTXcharcodes "0FF4C "0FF4C "0FF2C % FULLWIDTH LATIN SMALL LETTER L \setXTXcharcodes "0FF4D "0FF4D "0FF2D % FULLWIDTH LATIN SMALL LETTER M \setXTXcharcodes "0FF4E "0FF4E "0FF2E % FULLWIDTH LATIN SMALL LETTER N \setXTXcharcodes "0FF4F "0FF4F "0FF2F % FULLWIDTH LATIN SMALL LETTER O \setXTXcharcodes "0FF50 "0FF50 "0FF30 % FULLWIDTH LATIN SMALL LETTER P \setXTXcharcodes "0FF51 "0FF51 "0FF31 % FULLWIDTH LATIN SMALL LETTER Q \setXTXcharcodes "0FF52 "0FF52 "0FF32 % FULLWIDTH LATIN SMALL LETTER R \setXTXcharcodes "0FF53 "0FF53 "0FF33 % FULLWIDTH LATIN SMALL LETTER S \setXTXcharcodes "0FF54 "0FF54 "0FF34 % FULLWIDTH LATIN SMALL LETTER T \setXTXcharcodes "0FF55 "0FF55 "0FF35 % FULLWIDTH LATIN SMALL LETTER U \setXTXcharcodes "0FF56 "0FF56 "0FF36 % FULLWIDTH LATIN SMALL LETTER V \setXTXcharcodes "0FF57 "0FF57 "0FF37 % FULLWIDTH LATIN SMALL LETTER W \setXTXcharcodes "0FF58 "0FF58 "0FF38 % FULLWIDTH LATIN SMALL LETTER X \setXTXcharcodes "0FF59 "0FF59 "0FF39 % FULLWIDTH LATIN SMALL LETTER Y \setXTXcharcodes "0FF5A "0FF5A "0FF3A % FULLWIDTH LATIN SMALL LETTER Z \dofastrecurse{"03400}{"04DB5}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel} \dofastrecurse{"04E00}{"09FBB}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel} \dofastrecurse{"0AC00}{"0D7A3}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel} \dofastrecurse{"20000}{"2A6D6}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel} % patch needed for turkish \setXTXcharcodes "201C "201C "201C \setXTXcharcodes "201D "201D "201D % patch needed for french % \setXTXcharcodes "0027 "0027 "0027 \setXTXcharcodes "2019 "2019 "2019 \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-dir.mkii0000644000175000017500000000213511754241457024322 0ustar norbertnorbert%D \module %D [ file=supp-dir, %D version=2004.11.11, %D title=\CONTEXT\ Support Macros, %D subtitle=Directional Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Inspired by and needed for Adam Lindsay's \XETEX\ efforts: %D %D \starttyping %D \starttext %D \input tufte \par %D \pardir TRT \input tufte \par \input tufte \par %D \pardir TLT \input tufte \par %D \stoptext %D \stoptyping \unprotect \chardef\inlinedirection\zerocount % 0==notset 1==LR 2==RL \def\pardir#1#2#3% messages end up in a higher level command {\global\TeXXeTstate\plusone \if#2L\chardef\inlinedirection\plusone\else \if#2R\chardef\inlinedirection\plustwo\fi\fi \checkinlinedirection} % needed / added \def\checkinlinedirection {\ifcase\inlinedirection\or\beginL\or\beginR\fi} % see core-ini.tex % % \appendtoks \checkinlinedirection \to \everypar \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fnt-10.mkiv0000644000175000017500000001266512161703335024041 0ustar norbertnorbert%D \module %D [ file=s-fnt-01, %D version=2006.10.10, % guess %D title=\CONTEXT\ Style File, %D subtitle=Listing Glyphs in Large Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % sort of obsolete \startluacode local fontdata = fonts.hashes.identifiers -- function fonts.tracers.show_all() -- local tfmdata = fontdata[font.current()] -- if tfmdata and tfmdata.shared then -- local NC, NR, char = context.NC, context.NR, context.char -- context.starttabulate { "|l|r|c|" } -- for unicode, description in fonts.iterators.characters(tfmdata) do -- NC() context(description.name) NC() context(unicode) NC() char(unicode) NC() NR() -- end -- context.stoptabulate() -- end -- end function fonts.tracers.show_all() local tfmdata = fontdata[font.current()] if tfmdata then local NC, NR, HL, char, bold, tttf = context.NC, context.NR, context.HL, context.char, context.bold, context.tttf local descriptions = tfmdata.descriptions or { } local data = characters.data -- context.setuptabulate { header = "repeat" } context.starttabulatehead() NC() bold("unicode") NC() bold("visual") NC() bold("index") NC() bold("glyph") NC() bold("adobe") NC() bold("context") NC() NR() context.stoptabulatehead() context.starttabulate { "|l|c|l|p|p|p|" } for unicode, chr in fonts.iterators.characters(tfmdata) do local des, dat = descriptions[unicode], data[unicode] local index = chr.index or 0 local cname = (dat and dat.contextname) or "" local aname = (dat and dat.adobename) or "" local gname = (des and des.name) or "" local mname = dat and dat.mathname if type(mname) ~= "string" then mname = "" end local mspec = dat and dat.mathspec if mspec then for m=1,#mspec do local n = mspec[m].name if n then if mname == "" then mname = n else mname = mname .. " " .. n end end end end if mname ~= "" then mname = "m: " .. mname if cname ~= "" then cname = cname .. " " .. mname else cname = mname end end NC() tttf() context("U+%05X",unicode) NC() char(unicode) NC() tttf() context("%05X",index) NC() tttf() context(gname) NC() tttf() context(aname) NC() tttf() context(cname) NC() NR() end context.stoptabulate() else context("problems") end end function fonts.tracers.show_glyphs() local tfmdata = fontdata[font.current()] if tfmdata then for unicode, chr in fonts.iterators.characters(tfmdata) do context.showglyph(unicode) end end end \stopluacode \def\ShowCompleteFont#1#2#3% {\bgroup \page \font\TestFont=#1 at #2 \setuplayout[style=\TestFont] \setupheadertexts[] \setupfootertexts[#1 -- \pagenumber] \setupfootertexts[pagenumber] \setuplayout[width=middle,height=middle,topspace=1cm,backspace=1cm] \TestFont \nonknuthmode \startcolumns[n=#3] \TestFont \ctxlua { fonts.tracers.show_all() } \stopcolumns \page \egroup} \def\ShowAllGlyphs#1#2#3% {\bgroup \page \def\showglyph##1{\dontleavehmode\strut\char##1\relax\par} \font\TestFontA=#1 at 12pt \font\TestFontB=#1 at #2 \setuplayout[style=\TestFontA] \setupheadertexts[] \setupfootertexts[#1\space\endash\space\pagenumber] \setuplayout[width=middle,height=middle,topspace=1cm,backspace=1cm,header=1cm,footer=2cm] \TestFontB \setupinterlinespace[line=1.2\dimexpr#2\relax] \raggedcenter \nonknuthmode \startcolumns[n=#3] \TestFontB \ctxlua { fonts.tracers.show_glyphs() } \stopcolumns \page \egroup} \continueifinputfile{s-fnt-10.mkiv} \starttext % \ShowCompleteFont{name:dejavusansmono}{10pt}{1} % \ShowCompleteFont{name:dejavuserif}{10pt}{2} % \ShowCompleteFont{name:officinasansbookitcregular}{10pt}{2} % \ShowCompleteFont{name:officinaserifbookitcregular}{10pt}{2} % \ShowCompleteFont{name:serpentineserifeflight}{10pt}{2} \ShowCompleteFont{name:lmroman10-regular}{10pt}{1} % \ShowCompleteFont{name:lmtypewriter10-regular}{10pt}{2} % \ShowCompleteFont{lt55485}{10pt}{2} % \ShowCompleteFont{lmr10}{10pt}{2} % \ShowCompleteFont{lbr}{10pt}{2} % \ShowCompleteFont{name:Cambria}{10pt}{2} % \ShowCompleteFont{name:CambriaMath}{10pt}{2} % \ShowCompleteFont{name:texgyrepagella-regular}{10pt}{2} % \ShowCompleteFont{name:texgyrechorus-mediumitalic}{10pt}{2} % \ShowAllGlyphs {name:texgyrepagella-regular} {48pt}{2} % \ShowAllGlyphs {name:texgyrechorus-mediumitalic}{48pt}{2} % \ShowCompleteFont{name:euler10-regular}{10pt}{2} % \ShowCompleteFont{name:palatinosansinformalcombold}{20pt}{2} % \ShowCompleteFont{name:palatinonovaregular}{11pt}{2} % \ShowCompleteFont{pirat.ttf}{12pt}{1} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-cid.lua0000644000175000017500000001201412130411274024070 0ustar norbertnorbertif not modules then modules = { } end modules ['font-cid'] = { version = 1.001, comment = "companion to font-otf.lua (cidmaps)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, match, lower = string.format, string.match, string.lower local tonumber = tonumber local P, S, R, C, V, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.match local fonts, logs, trackers = fonts, logs, trackers local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end) local report_otf = logs.reporter("fonts","otf loading") local cid = { } fonts.cid = cid local cidmap = { } local cidmax = 10 -- original string parser: 0.109, lpeg parser: 0.036 seconds for Adobe-CNS1-4.cidmap -- -- 18964 18964 (leader) -- 0 /.notdef -- 1..95 0020 -- 99 3000 local number = C(R("09","af","AF")^1) local space = S(" \n\r\t") local spaces = space^0 local period = P(".") local periods = period * period local name = P("/") * C((1-space)^1) local unicodes, names = { }, { } -- we could use Carg now local function do_one(a,b) unicodes[tonumber(a)] = tonumber(b,16) end local function do_range(a,b,c) c = tonumber(c,16) for i=tonumber(a),tonumber(b) do unicodes[i] = c c = c + 1 end end local function do_name(a,b) names[tonumber(a)] = b end local grammar = P { "start", start = number * spaces * number * V("series"), series = (spaces * (V("one") + V("range") + V("named")))^1, one = (number * spaces * number) / do_one, range = (number * periods * number * spaces * number) / do_range, named = (number * spaces * name) / do_name } local function loadcidfile(filename) local data = io.loaddata(filename) if data then unicodes, names = { }, { } lpegmatch(grammar,data) local supplement, registry, ordering = match(filename,"^(.-)%-(.-)%-()%.(.-)$") return { supplement = supplement, registry = registry, ordering = ordering, filename = filename, unicodes = unicodes, names = names } end end cid.loadfile = loadcidfile -- we use the frozen variant local template = "%s-%s-%s.cidmap" local function locate(registry,ordering,supplement) local filename = format(template,registry,ordering,supplement) local hashname = lower(filename) local found = cidmap[hashname] if not found then if trace_loading then report_otf("checking cidmap, registry %a, ordering %a, supplement %a, filename %a",registry,ordering,supplement,filename) end local fullname = resolvers.findfile(filename,'cid') or "" if fullname ~= "" then found = loadcidfile(fullname) if found then if trace_loading then report_otf("using cidmap file %a",filename) end cidmap[hashname] = found found.usedname = file.basename(filename) end end end return found end -- cf Arthur R. we can safely scan upwards since cids are downward compatible function cid.getmap(specification) if not specification then report_otf("invalid cidinfo specification, table expected") return end local registry = specification.registry local ordering = specification.ordering local supplement = specification.supplement -- check for already loaded file local filename = format(registry,ordering,supplement) local found = cidmap[lower(filename)] if found then return found end if trace_loading then report_otf("cidmap needed, registry %a, ordering %a, supplement %a",registry,ordering,supplement) end found = locate(registry,ordering,supplement) if not found then local supnum = tonumber(supplement) local cidnum = nil -- next highest (alternatively we could start high) if supnum < cidmax then for s=supnum+1,cidmax do local c = locate(registry,ordering,s) if c then found, cidnum = c, s break end end end -- next lowest (least worse fit) if not found and supnum > 0 then for s=supnum-1,0,-1 do local c = locate(registry,ordering,s) if c then found, cidnum = c, s break end end end -- prevent further lookups -- somewhat tricky registry = lower(registry) ordering = lower(ordering) if found and cidnum > 0 then for s=0,cidnum-1 do local filename = format(template,registry,ordering,s) if not cidmap[filename] then cidmap[filename] = found end end end end return found end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-set-11.mkii0000644000175000017500000005477111754241457024053 0ustar norbertnorbert%D \module %D [ file=x-set-11, %D version=2004.10.31, %D remark=setupx.tex: 1998.07.20 and later, %D title=\CONTEXT\ Setup Definitions, %D subtitle=Macro Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % module x-set-02 loads the mapping, after that we can say: % % texmfstart texexec --int=nl --pdf --global --result=setup-nl x-set-12 \startmessages dutch library: setup title: setup formula: formule number: getal list: lijst dimension: maat mark: markering reference: verwijzing command: commando file: file name: naam identifier: naam text: tekst section: sectie singular: naam enkelvoud plural: naam meervoud matrix: n*m see: zie inherits: erft van 1: de karakters < en > zijn globaal actief! 2: -- wordt verwerkt 3: -- is niet gedefinieerd 4: -- wordt nogmaals verwerkt optional: optioneel displaymath: formule index: ingang math: formule nothing: leeg file: file position: positie reference: verwijzing csname: naam destination: bestemming triplet: triplet word: woord content: tekst \stopmessages \startmessages english library: setup title: setup formula: formula number: number list: list dimension: dimension mark: mark reference: reference command: command file: file name: name identifier: identifier text: text section: section singular: singular name plural: plural name matrix: n*m see: see inherits: inherits from 1: the characters < and > are globally active! 2: -- is processed 3: -- is undefined 4: -- is processed again optional: optional displaymath: formula index: entry math: formula nothing: empty file: file position: position reference: reference csname: name destination: destination triplet: triplet word: word content: text \stopmessages \startmessages german library: setup title: Setup formula: Formel number: Nummer list: Liste dimension: Dimension mark: Beschriftung reference: Referenz command: Befehl file: Datei name: Name identifier: Name text: Text section: Abschnitt singular: singular plural: plural matrix: n*m see: siehe inherits: inherits from 1: Die Zeichen < und > gelten global! 2: -- wird verarbeitet 3: -- ist undefiniert 4: -- ist mehrmals verarbeitet optional: optioneel displaymath: formula index: entry math: formula nothing: empty file: file position: position reference: reference csname: name destination: destination triplet: triplet word: word content: text \stopmessages \startmessages czech library: setup title: setup formula: rovnice number: cislo list: seznam dimension: dimenze mark: znacka reference: reference command: prikaz file: soubor name: jmeno identifier: jmeno text: text section: sekce singular: jmeno v singularu plural: jmeno v pluralu matrix: n*m see: viz inherits: inherits from 1: znaky < a > jsou globalne aktivni! 2: -- je zpracovano 3: -- je nedefinovano 4: -- je zpracovano znovu optional: optioneel displaymath: formula index: entry math: formula nothing: empty file: file position: position reference: reference csname: name destination: destination triplet: triplet word: word content: text \stopmessages \startmessages italian library: setup title: setup formula: formula number: number list: list dimension: dimension mark: mark reference: reference command: command file: file name: name identifier: name text: text section: section singular: singular name plural: plural name matrix: n*m see: see inherits: inherits from 1: the characters < and > are globally active! 2: -- is processed 3: -- is undefined 4: -- is processed again optional: optioneel displaymath: formula index: entry math: formula nothing: empty file: file position: position reference: reference csname: name destination: destination triplet: triplet word: word content: text \stopmessages \startmessages romanian library: setup title: setari formula: formula number: numar list: lista dimension: dimensiune mark: marcaj reference: referinta command: comanda file: fisier name: nume identifier: nume text: text section: sectiune singular: nume singular plural: nume pluram matrix: n*m see: vezi inherits: inherits from 1: caracterele < si > sunt active global! 2: este procesat -- 3: -- este nedefinit 4: -- este procesat din nou optional: optioneel displaymath: formula index: entry math: formula nothing: empty file: file position: position reference: reference csname: name destination: destination triplet: triplet word: word content: text \stopmessages \startmessages french library: setup title: réglage formula: formule number: numéro list: liste dimension: dimension mark: marquage reference: reference command: commande file: fichier name: nom identifier: identificateur text: texte section: section singular: nom singulier plural: nom pluriel matrix: n*m see: vois inherits: herite de 1: les caractères < et > sont globalement actifs ! 2: -- est traité 3: -- n'est pas défini 4: -- est traité de nouveau optional: optionel displaymath: formule index: entrée math: formule nothing: vide file: fichier position: position reference: réference csname: nom destination: destination triplet: triplet word: mot content: texte \stopmessages \unprotect % general \def\setupnumfont {} \def\setuptxtfont {} \def\setupintfont#1{\uppercase{#1}} \def\setupvarfont {\sl} \def\setupoptfont {\sl} \def\setupalwcolor {} \def\setupoptcolor {darkgray} \defineXMLenvironmentsave [cd:content] [list=,state=] {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \def\c!setup!internal!#1% {{\setmessagetext{setup}{#1}% \expanded{\setupintfont{\currentmessagetext}}}} \def\c!setup!text!#1% {{\setmessagetext{setup}{#1}% \setupvarfont{\currentmessagetext}}} \def\c!setup!command!#1% {{\setupvarfont{\texescape...#1}}} \def\??stp{@@stp} \defineregister [texmacro] [texmacros] \definesorting [texcommand] [texcommands] \setupsorting [texcommand] [\c!command=\@@stpcommand, \c!criterium=\@@stpcriterium] \definesorting [eachtexcommand] [alltexcommands] \setupsorting [eachtexcommand] [\c!command=\@@stpcommand, \c!criterium=\v!all] \pushmacro\setuptext \defineframedtext [setuptext] [\c!width=\hsize, \c!height=\v!fit, \c!align=\v!right, \c!offset=0.75em] \popmacro\setuptext \newif\ifshortsetup \def\doshowsetup {\dosingleempty\dodoshowsetup} \def\dodoshowsetup[#1]% {\iffirstargument \doshowsetup{#1}% \else \expandafter\doshowsetup \fi} \bgroup \catcode`\<=\active \gdef\doshowsetup#1% {\bgroup \def<<##1>>{##1}% \edef\ascii{#1}% \enableXML \doifelseXMLelement{stp:\ascii} {\expanded{\flushXMLelement{stp:\ascii}}} {\doifelseXMLelement{stp:\ascii:1} {\expanded{\flushXMLelement{stp:\ascii:1}}} {\defconvertedargument\ascii{#1}% \em unknown setup \quote{\ascii}}} \egroup} \egroup \def\setup {\shortsetupfalse\doshowsetup} \def\showsetup {\shortsetupfalse\doshowsetup} \def\shortsetup{\shortsetuptrue \doshowsetup} \def\setupsetup{\dodoubleargument\getparameters[\??stp]} \setupsetup [\c!before=, \c!after=, \c!command=\setup, \c!criterium=\v!used] % verwijzing: 0 geen verwijzingen plaatsen / wel genereren % 1 alleen bij zie plaatsen / wel genereren % 2 alle verwijzingen plaatsen / niet genereren % 3 bij zie commando klikken / wel genereren \setupsetup [\c!reference=0] \def\placesetup {\bgroup \getvalue{\e!place\e!listof texcommands}% \egroup} \def\placeallsetups {\bgroup \setupsetup[\c!reference=2]% \setupreferencing[\c!state=\v!stop]% \getvalue{\e!place\e!listof alltexcommands}% \egroup} \let\placeeverysetup\placeallsetups \let\plaatssetup \placesetup \let\plaatselkesetup\placeallsetups % we use :1 as fallback % % \setup{setupinterlinespace} % \setup{setupinterlinespace:1} % \setup{setupinterlinespace:2} % todo: make this proper mkiv xml \defineXMLenvironmentsave [cd:define] [name=] {} {\setxvalue{cd:def:\XMLop{name}}{\XMLflush{cd:define}}} \defineXMLsingular [cd:resolve] [name=] {\ignorespaces\getvalue{cd:def:\XMLop{name}}\ignorespaces} \defineXMLenvironment [cd:command] [name=,type=,generated=,interactive=,variant=] {} {\showSETUPrecord} \def\showSETUPrecord {\getvalue{\e!start setuptext} \tttf \nohyphens \veryraggedright \startXMLmapping [one] \doglobal\newcounter\currentSETUPargument \global\let\maximumSETUPargument\currentSETUPargument \bgroup \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}% \doifelseXMLop{type}{environment} {\tex{\e!start}}{\tex{}}\ignorespaces \XMLflush{cd:sequence}\ignorespaces \egroup \doifelseXMLempty{cd:arguments} {} {\bgroup \setbox0=\hbox{\XMLflush{cd:arguments}}% \global\let\maximumSETUPargument\currentSETUPargument \doglobal\newcounter\currentSETUPargument \ignorespaces\XMLflush{cd:arguments}% \doif{\XMLpar{cd:command}{type}{}}{environment} {\hskip.5em\unknown\hskip.5em \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}% \tex{\e!stop}\ignorespaces\XMLflush{cd:sequence}}% \endgraf \egroup %\bgroup % \tx % \doif{\XMLpar{cd:command}{interactive}{}}{yes} {\quad INTERACTIVE}% % \doif{\XMLpar{cd:command}{interactive}{}}{exclusive}{\quad INTERACTIVE ONLY}% %\egroup \startXMLmapping [two] \bgroup \doglobal\newcounter\currentSETUPargument \blank[\v!line] \switchtobodyfont[small] % kan sneller \ignorespaces\XMLflush{cd:arguments}\endgraf \egroup \stopXMLmapping} \stopXMLmapping \getvalue{\e!stop setuptext}} \defineXMLenvironmentsave [cd:sequence] \ignorespaces \ignorespaces \defineXMLenvironmentsave [cd:arguments] \ignorespaces \ignorespaces %D This is the first pass; here we generate the top line. \newcounter\currentSETUPargument \def\currentSETUPwidth{0pt} % environmentsave ? \startXMLmapping [one] \defineXMLenvironmentsave [cd:string] [value=] {\XMLop{value}\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:variable] [value=] {{\expanded{\setupintfont{\XMLop{value}}}}\ignorespaces} {\ignorespaces} % moet een standaard type worden \defineXMLenvironmentsave [cd:assignments] [list=,state=] {\showSETUPassignment\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:keywords] [list=,state=] {\showSETUPkeyword\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:content] [list=,state=] {\showSETUPcontent\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:displaymath] [list=,state=] {\showSETUPdisplaymath\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:index] [list=,state=] {\showSETUPindex\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:math] [list=,state=] {\showSETUPmath\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:nothing] [list=,state=] {\showSETUPnothing\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:file] [list=,state=] {\showSETUPfile\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:position] [list=,state=] {\showSETUPposition\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:reference] [list=,state=] {\showSETUPreference\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:csname] [list=,state=] {\showSETUPcsname\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:destination] [list=,state=] {\showSETUPdestination\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:triplet] [list=,state=] {\showSETUPtriplet\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:word] [list=,state=] {\showSETUPword\ignorespaces} {\ignorespaces} \stopXMLmapping %D This is the second pass; here we generate the table. \startXMLmapping [two] \def\startfirstSETUPcolumn#1% {\bgroup \advance\leftskip 2em \noindent\llap{\hbox to 2em{#1\hss}}} \def\stopfirstSETUPcolumn {\endgraf \egroup} \def\startsecondSETUPcolumn#1#2% {\bgroup \advance\hangindent \currentSETUPwidth \advance\hangindent 2.5em \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}% \ignorespaces} \def\stopsecondSETUPcolumn {\endgraf \egroup} \def\secondSETUPcolumn#1#2% {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn} \def\previousSETUPargument{\currentSETUPargument} \defineXMLenvironmentsave [cd:assignments] {} {\xdef\currentSETUPwidth{0pt}% \bgroup \defineXMLenvironment [cd:parameter] [name=] {\setbox0=\hbox{\potentialXMLentity{\XMLop{name}}}% \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi}% {}% \setbox0=\vbox{\XMLflush{cd:assignments}}% \egroup \startfirstSETUPcolumn{\showSETUPnumber}% \doifelseXMLempty{cd:assignments} {\secondSETUPcolumn{\c!setup!text!{see} \previousSETUPargument}{}} {\ignorespaces \XMLflush{cd:assignments}% \let\previousSETUPargument\currentSETUPargument}% \stopfirstSETUPcolumn \blank[\v!halfline] \ignorespaces} \defineXMLenvironmentsave [cd:keywords] [optional=no] {} {\startfirstSETUPcolumn{\showSETUPnumber}% \doifelseXMLempty{cd:keywords} {\secondSETUPcolumn{see \previousSETUPargument}{}} {\ignorespaces \XMLflush{cd:keywords}% \let\previousSETUPargument\currentSETUPargument}% \stopfirstSETUPcolumn \blank[\v!halfline] \ignorespaces} \defineXMLenvironment [cd:parameter] [name=] {\startsecondSETUPcolumn{\potentialXMLentity{\XMLop{name}}}{=}% \ignorespaces} {\stopsecondSETUPcolumn \ignorespaces} \defineXMLenvironmentsave [cd:constant] [type=,default=] {\doifXMLop{default}{yes}{\underbar}% {\potentialXMLentity{\XMLop{type}}}\space\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:variable] [value=] {\potentialXMLentity{\XMLop{value}}\space\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:inherit] [name=] {\secondSETUPcolumn{\c!setup!text!{inherits} \tex{}\XMLop{name}}{}\ignorespaces} {\ignorespaces} \def\simpleSETUPargument#1% {\startfirstSETUPcolumn{\showSETUPnumber}% \c!setup!internal!{#1}% \stopfirstSETUPcolumn} \defineXMLenvironmentsave [cd:content] [list=,state=] {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:displaymath] [list=,state=] {\simpleSETUPargument{display math}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:index] [list=,state=] {\simpleSETUPargument{index}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:math] [list=,state=] {\simpleSETUPargument{math}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:nothing] [list=,state=] {\simpleSETUPargument{nothing}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:file] [list=,state=] {\simpleSETUPargument{file name}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:position] [list=,state=] {\simpleSETUPargument{position}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:reference] [list=,state=] {\simpleSETUPargument{reference}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:csname] [list=,state=] {\simpleSETUPargument{csname}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:destination] [list=,state=] {\simpleSETUPargument{destination}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:triplet] [list=,state=] {\simpleSETUPargument{triplet}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \defineXMLenvironmentsave [cd:word] [list=,state=] {\simpleSETUPargument{word}\blank[\v!halfline]\ignorespaces} {\ignorespaces} \stopXMLmapping \defineXMLentity [cd:command] {\c!setup!internal!{command}} \defineXMLentity [cd:dimension] {\c!setup!internal!{dimension}} \defineXMLentity [cd:file] {\c!setup!internal!{file}} \defineXMLentity [cd:name] {\c!setup!internal!{identifier}} \defineXMLentity [cd:character] {\c!setup!internal!{character}} \defineXMLentity [cd:mark] {\c!setup!internal!{mark}} \defineXMLentity [cd:number] {\c!setup!internal!{number}} \defineXMLentity [cd:reference] {\c!setup!internal!{reference}} \defineXMLentity [cd:plural] {\c!setup!internal!{plural}} \defineXMLentity [cd:singular] {\c!setup!internal!{singular}} \defineXMLentity [cd:text] {\c!setup!internal!{text}} \defineXMLentity [cd:formula] {\c!setup!internal!{formula}} \defineXMLentity [cd:file] {\c!setup!internal!{file}} \defineXMLentity [cd:matrix] {\c!setup!internal!{matrix}} \defineXMLentity [cd:list] {\c!setup!internal!{list}} \defineXMLentity [cd:section] {\c!setup!internal!{section}} \defineXMLentity [cd:noargument] {\c!setup!command!{}} \defineXMLentity [cd:oneargument] {\c!setup!command!{\#1}} \defineXMLentity [cd:twoarguments] {\c!setup!command!{\#1\#2}} \defineXMLentity [cd:threearguments] {\c!setup!command!{\#1\#2\#3}} %D Todo: \defineXMLprocess [cd:choice] %D Auxiliary. \unexpanded\def\showSETUP#1#2% {\bgroup \doglobal\increment\currentSETUPargument \setbox0=\hbox {\doifelseXMLop{list}{yes}{#2}{#1}}% \setbox2=\hbox to \wd0 {\hss \raise1ex\hbox {\tx\ifcase\maximumSETUPargument\relax \or*\else\currentSETUPargument \fi}% \hss}% \setbox4=\hbox to \wd0 {\hss \lower2ex\hbox \bgroup \txx\doifXMLop{optional}{yes}{\c!setup!internal!{optional}}% \egroup \hss}% \ht2\ht\strutbox \dp4\dp\strutbox \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2% \egroup} \def\showSETUPnumber {\doglobal\increment\currentSETUPargument \hbox to 2em {\ifcase\maximumSETUPargument\relax \or*\else\currentSETUPargument \fi \hss}} \def\showSETUPassignment {\showSETUP {[.\lower.5ex\hbox{=}.]} {[..,.\lower.5ex\hbox{=}.,..]}} \def\showSETUPkeyword {\showSETUP {[...]} {[...,...]}} \def\showSETUPargument {\showSETUP {\leftargument..\rightargument} {\leftargument..,...,..\rightargument}} \def\showSETUPdisplaymath {\showSETUP {\$\$...\$\$} {\$\$...\$\$}} \def\showSETUPindex {\showSETUP {\leftargument...\rightargument} {\leftargument..+...+..\rightargument}} \def\showSETUPmath {\showSETUP {\$...\$} {\$...\$}} \def\showSETUPnothing {\showSETUP {...} {}} \def\showSETUPfile {\showSETUP {~...~} {}} \def\showSETUPposition {\showSETUP {(...)} {(...,...)}} \def\showSETUPreference {\showSETUP {[...]} {[...,...]}} \def\showSETUPcsname {\showSETUP {{\c!setup!command!{}}} {}} \def\showSETUPdestination {\showSETUP {[\leftargument..[ref]\rightargument]} {[..,\leftargument..[ref,..]\rightargument,..]}} \def\showSETUPtriplet {\showSETUP {[x:y:z=]} {[x:y:z=,..]}} \def\showSETUPword {\showSETUP {\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}} \def\showSETUPcontent {\showSETUP {\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}} %\def\c!par!{\c!setup!internal!{endofpar}} %\def\c!repeat!{\c!opt!{{\setupvarfont n}*}} %\showSETUP\def\c!par!{\texescape par} %\showSETUP\def\c!sep!{\texescape\texescape} %\def\c!par!{\addtypespec{delimiter}{par}} % \par %\def\c!sep!{\addtypespec{separator}{backslash}} % \\ %\def\c!repeat!{} %\def\c!tex!#1{\addtypespec{command}{#1}\doanother{tex}} \startXMLmapping[zero] \defineXMLenvironmentsave [cd:command] [name=,type=,generated=,interactive=,variant=] {} {\doifelseXMLop{type}{environment} {\edef\currentSETUPname{start\XMLop{name}}} {\edef\currentSETUPname{\XMLop{name}}}% \doifsomething{\XMLop{variant}} {\edef\currentSETUPname{\currentSETUPname:\XMLop{variant}}}% like setupinterlinespace:1 \doifXMLop{generated}{yes} {\edef\currentSETUPname{\currentSETUPname*}}% \doglobal\saveXMLdatainelement{stp:\currentSETUPname}{cd:command}{cd:command}% \expanded{\eachtexcommand[stp:x:\currentSETUPname]{\currentSETUPname}}% \expanded{\texcommand [stp:y:\currentSETUPname]{\currentSETUPname}}} \stopXMLmapping \def\loadsetups{\complexorsimple\loadsetups} \def\simpleloadsetups {\doifnotmode{no-setup-main} {\complexloadsetups[cont-en.xml]}} \def\complexloadsetups[#1]% {\doifsomething{#1} {\doifnotmode{no-setup-all} {\startXMLmapping[zero] \expanded{\processXMLfilegrouped{#1}}% \stopXMLmapping}}} \defineXMLsingular [cd:include] [file=] {\complexloadsetups[\XMLop{file}]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-pml.mkii0000644000175000017500000000354211754241457024313 0ustar norbertnorbert%D \module %D [ file=xtag-pml, %D version=2001.09.04, %D title=\CONTEXT\ XML Support, %D subtitle=Physics ML, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / PhysML} %D This is a reimplmentation of the old filter. This module %D runs on top of the mathml and units modules. \useXMLfilter[map] \useXMLfilter[mml,mmp,mmc] \defineXMLargument [phys] \doXMLphys \defineXMLargument [iphys] \doXMLiphys \defineXMLargument [dphys] \doXMLdphys \unprotect \unexpanded\def\doXMLphys {\ifhmode\@EA\doXMLiphys\else\@EA\doXMLdphys\fi} \unexpanded\def\doXMLiphys{\XMLremapdata[mml]{$\ignorespaces}{\unskip$}} \unexpanded\def\doXMLdphys{\XMLremapdata[mml]{\dostartformula{}}{\dostopformula}} \protect \doifnotmode{demo}{\endinput} \usemodule[units] \starttext \startXMLdata 10 \stopXMLdata \startXMLdata 10 \stopXMLdata \startXMLdata 10 \stopXMLdata \startXMLdata 10 \stopXMLdata \startXMLdata 10 \stopXMLdata \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-c.mkii0000644000175000017500000003206411754241457023741 0ustar norbertnorbert%D \module %D [ file=verb-c, %D version=2006.04.17, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty C Verbatim, %D author=Nikolai Weibull, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Verbatim Macros / Pretty C Verbatim} % HH: % % - extra !!pretty definitions moved to verb-ini % - added a c! % - did a few small cosmetic things \unprotect \doglobal\newif\ifinCsingle \doglobal\newif\ifinCdouble \doglobal\newif\ifinCcomment \doglobal\newif\ifinCsinglelinecomment \doglobal\newif\ifinCmultilinecomment \doglobal\newif\ifcontinueCsinglelinecomment \gdef\Csetcontrols {\saveprettycontrols \def\obeyedspace {\endCtypesix \oldobeyedspace}% \def\flushrestofverbatimline {\endCtypesix \ifinCsinglelinecomment \ifcontinueCsinglelinecomment \continueCsinglelinecommentfalse \else \tttf \endofpretty \global\inCsinglelinecommentfalse \global\inCcommentfalse \fi \fi}% \def\obeyedline {\oldobeyedline}% \let\obeytabs\ignoretabs} \gdef\setupprettyCtype {\def\prettyidentifier{C}% \Csetvariables \Csetcontrols \Csethandlers \Csetspecials \Csetdiagnostics} \gdef\Csetvariables {\global\inCsinglefalse \global\inCdoublefalse \global\inCcommentfalse \global\continueCsinglelinecommentfalse \global\naturaltextexttrue \global\let\Csequence\empty \global\let\Cprefix\empty} % TODO: should handle -> as well \gdef\Csetspecials {\setpretty`\{=10 \setpretty`\}=10 \setpretty`\$=20 \setpretty`\@=20 \setpretty`\[=30 \setpretty`\]=30 \setpretty`\(=30 \setpretty`\)=30 \setpretty`\==30 \setpretty`\~=30 \setpretty`\<=30 \setpretty`\>=30 \setpretty`\%=30 \setpretty`\-=41 \setpretty`\+=41 \setpretty`\|=41 \setpretty`\`=41 \setpretty`\!=41 \setpretty`\?=41 \setpretty`\^=41 \setpretty`\&=41 \setpretty`\/=43 \setpretty`\*=44 \setpretty`\#=45 \setpretty`\\=50 \setpretty`\1=61 \setpretty`\2=61 \setpretty`\3=61 \setpretty`\4=61 \setpretty`\5=61 \setpretty`\6=61 \setpretty`\7=61 \setpretty`\8=61 \setpretty`\9=61 \setpretty`\0=61 \setpretty`\A=62 \setpretty`\B=62 \setpretty`\C=62 \setpretty`\D=62 \setpretty`\E=62 \setpretty`\F=62 \setpretty`\G=62 \setpretty`\H=62 \setpretty`\I=62 \setpretty`\J=62 \setpretty`\K=62 \setpretty`\L=62 \setpretty`\M=62 \setpretty`\N=62 \setpretty`\O=62 \setpretty`\P=62 \setpretty`\Q=62 \setpretty`\R=62 \setpretty`\S=62 \setpretty`\T=62 \setpretty`\U=62 \setpretty`\V=62 \setpretty`\W=62 \setpretty`\X=62 \setpretty`\Y=62 \setpretty`\Z=62 \setpretty`\a=62 \setpretty`\b=62 \setpretty`\c=62 \setpretty`\d=62 \setpretty`\e=62 \setpretty`\f=62 \setpretty`\g=62 \setpretty`\h=62 \setpretty`\i=62 \setpretty`\j=62 \setpretty`\k=62 \setpretty`\l=62 \setpretty`\m=62 \setpretty`\n=62 \setpretty`\o=62 \setpretty`\p=62 \setpretty`\q=62 \setpretty`\r=62 \setpretty`\s=62 \setpretty`\t=62 \setpretty`\u=62 \setpretty`\v=62 \setpretty`\w=62 \setpretty`\x=62 \setpretty`\y=62 \setpretty`\z=62 \setpretty`\_=62 \setpretty`\;=70 \setpretty`\:=70 \setpretty`\,=70 \setpretty`\.=70 \setpretty`\'=80 \setpretty`\"=90 } \gdef\Csethandlers {\installprettyhandler 10 \Ctypeone \installprettyhandler 20 \Ctypetwo \installprettyhandler 30 \Ctypethree \installprettyhandler 41 \Ctypefourone \installprettyhandler 43 \Ctypefourthree \installprettyhandler 44 \Ctypefourfour \installprettyhandler 45 \Ctypefourfive \installprettyhandler 50 \Ctypefive \installprettyhandler 61 \Ctypesixone \installprettyhandler 62 \Ctypesixtwo \installprettyhandler 70 \Ctypeseven \installprettyhandler 80 \Ctypeeight \installprettyhandler 90 \Ctypenine} \gdef\Ctypeone#1% {\ifinCdouble \ifinCcomment \endCtypesix \getpretty{#1}% \else\ifx\Cprefix\empty \endCtypesix \getpretty{#1}% \else \endCtypesix \xdef\Cprefix{\getpretty{#1}}% \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi\fi \else \endCtypesix \ifinCcomment \getpretty{#1}% \else\ifinCsingle \getpretty{#1}% \else \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi\fi \fi} \gdef\Ctypetwo#1% {\endCtypesix \getpretty{#1}} \gdef\Ctypethree#1% {\endCtypesix \ifinCcomment \getpretty{#1}% \else\ifinCsingle \getpretty{#1}% \else\ifinCdouble \getprettydata{#1}% \ifx\Cprefix\empty \getpretty{#1}% \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\Ctypefourone#1% {\endCtypesix \ifinCcomment \getpretty{#1}% \else\ifinCsingle \getpretty{#1}% \else\ifinCdouble \getpretty{#1}% \else \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\doCtypefourtwo#1#2% {\getprettydata{#2}% \ifnum\prettytype=62 \expandafter\Ctypetwo \else \expandafter\Ctypefourone \fi {#1}#2} \gdef\Ctypefourtwo {\handlenextnextpretty\doCtypefourtwo\Ctypefourone} \gdef\Ctypefourthree {\handlenextnextpretty\doCtypefourthree\Ctypefourtwo} \gdef\doCtypefourthree#1#2% {\getprettydata{#2}% \ifnum\prettytype=43 \let\next\dodoCtypefourthree \else\ifnum\prettytype=44 \global\inCcommenttrue \global\inCmultilinecommenttrue \let\next\Cstartcomment \else \let\next\Ctypefourtwo \fi\fi \next{#1}#2} \gdef\Cstartcomment#1#2% {\beginofpretty[\!!prettyfourthree]\ttsl\getpretties{#1}{#2}} \gdef\dodoCtypefourthree% #1% {\endCtypesix \handlenextnextpretty\dododoCtypefourthree\dodododoCtypefourthree} \gdef\dododoCtypefourthree {\ifnewpretty\expandafter\handlenewpretty\fi\dodododoCtypefourthree} \gdef\dodododoCtypefourthree#1#2% {\ifinCcomment \getpretties{#1}{#2}% \else \global\inCcommenttrue \global\inCsinglelinecommenttrue \def\next{\beginofpretty[\!!prettyfourthree]\ttsl\getpretties{#1}{#2}}% \expandafter\next \fi} \gdef\Ctypefourfour {\handlenextnextpretty\doCtypefourfour\Ctypefourtwo} \gdef\doCtypefourfour#1#2% {\getprettydata{#2}% \ifnum\prettytype=44 % \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \ifinCcomment \getpretty{#1}% \else \endCtypesix \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi \expandafter#2% \else\ifnum\prettytype=43 \getpretties{#1}{#2}% \tttf \endofpretty \global\inCcommentfalse \global\inCmultilinecommentfalse \else\ifinCcomment \getpretty{#1}% \expandafter#2% \else\ifinCsingle \getpretty{#1}% \expandafter#2% \else\ifinCdouble \getpretty{#1}% \expandafter#2% \else \endCtypesix \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \expandafter#2% \fi\fi\fi\fi\fi} \gdef\Ctypefourfive#1% {\ifinCcomment \getpretty{#1}% \else\ifinCsingle \getpretty{#1}% \else\ifinCdouble \getpretty{#1}% \else \endCtypesix \global\inCcommenttrue \global\inCsinglelinecommenttrue \def\next{\beginofpretty[\!!prettyfourthree]\ttsl\getpretty{#1}}% \expandafter\next \fi\fi\fi} \gdef\doCtypefiveA#1#2% {\endCtypesix \ifinCcomment \getpretties{#1}{#2}% \else\ifinCsingle \getprettydata{#2}% \ifnum\prettytype=50 \beginofpretty[\!!prettyfive]\getpretties{#1}{#2}\endofpretty\beginofpretty[\!!prettyeight]% \else\ifnum\prettytype=80 \beginofpretty[\!!prettyfive]\getpretties{#1}{#2}\endofpretty\beginofpretty[\!!prettyeight]% \else \getpretties{#1}{#2}% \fi\fi \else\ifinCdouble \beginofpretty[\!!prettyfive]\getpretties{#1}{#2}\endofpretty\beginofpretty[\!!prettynine]% \else \beginofpretty[\!!prettyfive]\getpretties{#1}{#2}\endofpretty \fi\fi\fi} \gdef\doCtypefiveB#1% {\endCtypesix \ifinCcomment \ifcat#1\relax \continueCsinglelinecommenttrue \getpretty{#1}% \else \getpretty{#1}% \fi \else\ifinCsingle \getpretty{#1}% \else\ifinCdouble \beginofpretty[\!!prettyfive]\getpretty{#1}\endofpretty\beginofpretty[\!!prettynine]% \else \beginofpretty[\!!prettyfive]\getpretty{#1}\endofpretty \fi\fi\fi} \gdef\Ctypefive {\expandafter\handlenextnextpretty\expandafter\doCtypefiveA\expandafter\doCtypefiveB} \gdef\endCtypesix {\ifx\Csequence\empty\else \ifinCcomment \Csequence \else\ifinCsingle \Csequence \else\ifinCdouble \Csequence \else\ifx\Cprefix\empty \doendCtypesix\!!prettytwo \else \doendCtypesixtype\!!prettytwo \fi\fi\fi\fi \global\let\Csequence\empty \global\let\Cprefix\empty \fi} \gdef\doendCtypesix#1% {\doifprettyidentifierelse{\Csequence}{\Ckeywords} {\beginofpretty[#1]% {\prettyidentifierfont\Csequence}% \endofpretty} {\doifprettyidentifierelse{\Csequence}{\Ctypes} {\beginofpretty[\!!prettytwoone]% {\prettyvariablefont\Csequence}% \endofpretty} {\Csequence}}} \gdef\doendCtypesixtype#1% {\doifprettyidentifierelse{\Cprefix\Csequence}{\Ctypes} {\beginofpretty[#1]% {\prettyvariablefont\Csequence}% \endofpretty} {\Csequence}} \gdef\Ctypesixone#1% {\ifinCcomment \def\next{\getpretty{#1}}% \else\ifinCsingle \def\next{\getpretty{#1}}% \else\ifinCdouble \def\next{\getpretty{#1}}% \else\ifx\Csequence\empty \def\next{\beginofpretty[\!!prettyeight]\getpretty{#1}\endofpretty}% \else \def\next{\Ctypesixtwo{#1}}% \fi\fi\fi\fi \expandafter\next} \gdef\Ctypesixtwo#1% {\ifinCcomment \getpretty{#1}% \else\ifinCsingle \getpretty{#1}% \else\ifinCdouble \ifx\Cprefix\empty \getpretty{#1}% \else \xdef\Csequence{\Csequence\getpretty{#1}}% \fi \else \xdef\Csequence{\Csequence\getpretty{#1}}% \fi\fi\fi} \gdef\Ctypeseven#1% {\endCtypesix \getpretty{#1}} \gdef\Ctypeeight#1% single quote {\endCtypesix \ifinCcomment \getpretty{#1}% \else\ifinCdouble \getpretty{#1}% \else\ifinCsingle \global\inCsinglefalse \getpretty{#1}% \endofpretty \else \global\inCsingletrue \beginofpretty[\!!prettyeight]\getpretty{#1} \fi\fi\fi} \gdef\Ctypenine#1% double quote {\endCtypesix \ifinCcomment \getpretty{#1}% \else\ifinCsingle \getpretty{#1}% \else\ifinCdouble \global\inCdoublefalse \getpretty{#1}% \endofpretty \else \global\inCdoubletrue \beginofpretty[\!!prettynine]\getpretty{#1} \fi\fi\fi} \gdef\doreportprettyCtype#1#2#3#4% {#1% [C \string#2 typing conflict, use \string#3 instead] \writestatus {C typing} {use \string#3 instead of \string#2 to enable propper visualization}% \global#4% \expandafter\doemptyverbatimline \fi} \gdef\reportprettyCtype {\doreportprettyCtype\ifinCsingle'\'\inCsinglefalse \doreportprettyCtype\ifinCdouble"\"\inCdoublefalse} \gdef\Csetdiagnostics {\let\normaldoemptyverbatimline\doemptyverbatimline \def\doemptyverbatimline {\normaldoemptyverbatimline \reportprettyCtype}} \useprettyidentifiers \Ckeywords \Csetspecials break case continue default do else for goto if return sizeof switch while \useprettyidentifiers \Ctypes \Csetspecials auto char const double enum extern float int long register restrict short signed static struct typedef union unsigned void volatile bool \installprettytype [C] [C] \definetyping[C][\c!option=C] \definecolor [colorprettyone] [black] \definecolor [colorprettytwo] [r=.46, g=.38, b=.13] \definecolor [colorprettytwoone] [r=.38, g=.18, b=.5] \definecolor [colorprettythree] [black] \definecolor [colorprettyfour] [black] \definecolor [colorprettyfourthree] [r=.15, g=.45, r=.15] \definecolor [colorprettyfive] [r=.94, g=.15, b=.15] \definecolor [colorprettyeight] [r=.58, g=.09, b=.09] \definecolor [colorprettynine] [r=.58, g=.09, b=.09] \definecolor [grayprettyone] [s=.30] \definecolor [grayprettytwo] [s=.45] \definecolor [grayprettythree] [s=.60] \definecolor [grayprettyfour] [s=.75] \definecolor [grayprettyfourthree] [s=.70] \definepalet [colorpretty] [ prettyone=colorprettyone, prettytwo=colorprettytwo, prettytwoone=colorprettytwoone, prettythree=colorprettythree, prettyfour=colorprettyfour, prettyfourthree=colorprettyfourthree, prettyfive=colorprettyfive, prettyeight=colorprettyeight, prettynine=colorprettynine] \definepalet [graypretty] [ prettyone=grayprettyone, prettytwo=grayprettytwo, prettythree=grayprettythree, prettyfour=grayprettyfour, prettyfourthree=grayprettyfourthree] \definepalet [Ccolorpretty] [colorpretty] \definepalet [Cgraypretty] [graypretty] \setuptyping [C] [\c!icommand=\tttf] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-dim.lua0000644000175000017500000004464112130411274024100 0ustar norbertnorbertif not modules then modules = { } end modules ['math-dim'] = { version = 1.001, comment = "companion to math-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Beware: only Taco and Ulrik really understands in depth what these dimensions -- do so if you run into problems ask on the context list. -- The radical_rule value is also used as a trigger. In luatex the accent -- placement happens either the opentype way (using top_accent cum suis) or the -- traditional way. In order to determine what method to use the \Umathradicalrule -- setting is consulted to determine what method to use. This is more efficient -- than analyzing the (potentially spread over multiple families) situation. For -- this reason we need to set the radical_rule here. It used to be "" in -- which case the engine takes the rulethickness. In c-speak: -- -- int compat_mode = (radical_rule(cur_style) == undefined_math_parameter) ; local abs, next = math.abs, next local defaults = { axis = { default = { "AxisHeight", "axis_height" }, }, accent_base_height = { default = { "AccentBaseHeight", "x_height" }, }, fraction_del_size = { default = { "FractionDelimiterSize", "delim2" }, cramped_display_style = { "FractionDelimiterDisplayStyleSize", "delim1" }, display_style = { "FractionDelimiterDisplayStyleSize", "delim1" }, }, fraction_denom_down = { default = { "FractionDenominatorShiftDown", "denom2" }, cramped_display_style = { "FractionDenominatorDisplayStyleShiftDown", "denom1" }, display_style = { "FractionDenominatorDisplayStyleShiftDown", "denom1" }, }, fraction_denom_vgap = { default = { "FractionDenominatorGapMin", "default_rule_thickness" }, cramped_display_style = { "FractionDenominatorDisplayStyleGapMin", "3*default_rule_thickness" }, display_style = { "FractionDenominatorDisplayStyleGapMin", "3*default_rule_thickness" }, }, fraction_num_up = { default = { "FractionNumeratorShiftUp", "num2" }, cramped_display_style = { "FractionNumeratorDisplayStyleShiftUp", "num1" }, display_style = { "FractionNumeratorDisplayStyleShiftUp", "num1" }, }, fraction_num_vgap = { default = { "FractionNumeratorGapMin", "default_rule_thickness" }, cramped_display_style = { "FractionNumeratorDisplayStyleGapMin", "3*default_rule_thickness" }, display_style = { "FractionNumeratorDisplayStyleGapMin", "3*default_rule_thickness" }, }, fraction_rule = { default = { "FractionRuleThickness", "default_rule_thickness" }, }, limit_above_bgap = { default = { "UpperLimitBaselineRiseMin", "big_op_spacing3" }, }, limit_above_vgap = { default = { "UpperLimitGapMin", "big_op_spacing1" }, }, limit_above_kern = { default = { "0", "big_op_spacing5" }, }, limit_below_bgap = { default = { "LowerLimitBaselineDropMin", "big_op_spacing4" }, }, limit_below_vgap = { default = { "LowerLimitGapMin", "big_op_spacing2" }, }, limit_below_kern = { default = { "0", "big_op_spacing5" }, }, math_operator_size = { default = { "DisplayOperatorMinHeight", "math_x_height*3" }, }, -- 2 overbar_kern = { default = { "OverbarExtraAscender", "default_rule_thickness" }, }, overbar_rule = { default = { "OverbarRuleThickness", "default_rule_thickness" }, }, overbar_vgap = { default = { "OverbarVerticalGap", "3*default_rule_thickness" }, }, quad = { default = { "font_size(f)", "math_quad" }, }, radical_kern = { default = { "RadicalExtraAscender", "default_rule_thickness" }, }, radical_rule = { default = { "RadicalRuleThickness", "default_rule_thickness" }, }, -- default = { "surd_height(f)", "default_rule_thickness" }, radical_vgap = { default = { "RadicalVerticalGap", "default_rule_thickness+(abs(default_rule_thickness)/4)" }, display_style = { "RadicalDisplayStyleVerticalGap", "default_rule_thickness+(abs(math_x_height)/4)" }, }, space_after_script = { default = { "SpaceAfterScript", "script_space" }, }, stack_denom_down = { default = { "StackBottomShiftDown", "denom2" }, cramped_display_style = { "StackBottomDisplayStyleShiftDown", "denom1" }, display_style = { "StackBottomDisplayStyleShiftDown", "denom1" }, }, stack_num_up = { default = { "StackTopShiftUp", "num3" }, cramped_display_style = { "StackTopDisplayStyleShiftUp", "num1" }, display_style = { "StackTopDisplayStyleShiftUp", "num1" }, }, stack_vgap = { default = { "StackGapMin", "3*default_rule_thickness" }, cramped_display_style = { "StackDisplayStyleGapMin", "7*default_rule_thickness" }, display_style = { "StackDisplayStyleGapMin", "7*default_rule_thickness" }, }, sub_shift_down = { default = { "SubscriptShiftDown", "sub1" }, }, sub_shift_drop = { default = { "SubscriptBaselineDropMin", "sub_drop" }, }, sub_sup_shift_down = { default = { "SubscriptShiftDown", "sub2" }, }, sub_top_max = { default = { "SubscriptTopMax", "abs(math_x_height*4)/5" }, }, subsup_vgap = { default = { "SubSuperscriptGapMin", "4*default_rule_thickness" }, }, sup_bottom_min = { default = { "SuperscriptBottomMin", "abs(math_x_height)/4" }, }, sup_shift_drop = { default = { "SuperscriptBaselineDropMax", "sup_drop" }, }, sup_shift_up = { cramped_display_style = { "SuperscriptShiftUpCramped", "sup3" }, cramped_script_script_style = { "SuperscriptShiftUpCramped", "sup3" }, cramped_script_style = { "SuperscriptShiftUpCramped", "sup3" }, cramped_text_style = { "SuperscriptShiftUpCramped", "sup3" }, display_style = { "SuperscriptShiftUp", "sup1" }, script_script_style = { "SuperscriptShiftUp", "sup2" }, script_style = { "SuperscriptShiftUp", "sup2" }, text_style = { "SuperscriptShiftUp", "sup2" }, }, sup_sub_bottom_max = { default = { "SuperscriptBottomMaxWithSubscript", "abs(math_x_height*4)/5" }, }, underbar_kern = { default = { "UnderbarExtraDescender", "0" }, }, underbar_rule = { default = { "UnderbarRuleThickness", "default_rule_thickness" }, }, underbar_vgap = { default = { "UnderbarVerticalGap", "3*default_rule_thickness" }, }, connector_overlap_min = { default = { "MinConnectorOverlap", "0.25*default_rule_thickness" }, }, over_delimiter_vgap = { default = { "StretchStackGapBelowMin", "big_op_spacing1" }, }, over_delimiter_bgap = { default = { "StretchStackTopShiftUp", "big_op_spacing3" }, }, under_delimiter_vgap = { default = { "StretchStackGapAboveMin", "big_op_spacing2" }, }, under_delimiter_bgap = { default = { "StretchStackBottomShiftDown", "big_op_spacing4" }, }, radical_degree_before = { default = { "RadicalKernBeforeDegree", "(5/18)*quad" }, }, radical_degree_after = { default = { "RadicalKernAfterDegree", "(-10/18)*quad" }, }, radical_degree_raise = { default = { "RadicalDegreeBottomRaisePercent", "60" }, }, } local styles = { 'cramped_display_style', 'cramped_script_script_style', 'cramped_script_style', 'cramped_text_style', 'display_style', 'script_script_style', 'script_style', 'text_style', } for k, v in next, defaults do for _, s in next, styles do if not v[s] then v[s] = v.default end end end -- we cannot use a metatable because we do a copy (takes a bit more work) -- -- local mt = { } setmetatable(defaults,mt) -- -- mt.__index = function(t,s) -- return t.default or t.text_style or 0 -- end function mathematics.dimensions(dimens) -- beware, dimens get spoiled if dimens.SpaceAfterScript then dimens.SubscriptShiftDownWithSuperscript = dimens.SubscriptShiftDown * 1.5 -- move this one return table.fastcopy(dimens), { } elseif dimens.AxisHeight or dimens.axis_height then local t = { } local math_x_height = dimens.x_height or 10*65536 local math_quad = dimens.quad or 10*65536 local default_rule_thickness = dimens.FractionDenominatorGapMin or dimens.default_rule_thickness or 0.4*65536 dimens["0"] = 0 dimens["60"] = 60 dimens["0.25*default_rule_thickness"] = default_rule_thickness / 4 dimens["3*default_rule_thickness"] = 3 * default_rule_thickness dimens["4*default_rule_thickness"] = 4 * default_rule_thickness dimens["7*default_rule_thickness"] = 7 * default_rule_thickness dimens["(5/18)*quad"] = (math_quad * 5) / 18 dimens["(-10/18)*quad"] = - (math_quad * 10) / 18 dimens["math_x_height*3"] = math_x_height * 3 -- needs checking dimens["abs(math_x_height*4)/5"] = abs(math_x_height * 4) / 5 dimens["default_rule_thickness+(abs(default_rule_thickness)/4)"] = default_rule_thickness+(abs(default_rule_thickness) / 4) dimens["default_rule_thickness+(abs(math_x_height)/4)"] = default_rule_thickness+(abs(math_x_height) / 4) dimens["abs(math_x_height)/4"] = abs(math_x_height) / 4 dimens["abs(math_x_height*4)/5"] = abs(math_x_height * 4) / 5 dimens[""] = false dimens["script_space"] = false -- at macro level for variable, styles in next, defaults do local tt = { } for style, default in next, styles do local one, two = default[1], default[2] local value = dimens[one] if value then tt[style] = value else value = dimens[two] if value == false then tt[style] = nil else tt[style] = value or 0 end end end t[variable] = tt end local d = { AccentBaseHeight = t . accent_base_height . text_style, AxisHeight = t . axis . text_style, -- DelimitedSubFormulaMinHeight DisplayOperatorMinHeight = t . math_operator_size . text_style, -- no longer let tex decide (weird values) -- FlattenedAccentBaseHeight FractionDenominatorDisplayStyleGapMin = t . fraction_denom_vgap . display_style, FractionDenominatorDisplayStyleShiftDown = t . fraction_denom_down . display_style, FractionDenominatorGapMin = t . fraction_denom_vgap . text_style, FractionDenominatorShiftDown = t . fraction_denom_down . text_style, FractionNumeratorDisplayStyleGapMin = t . fraction_num_vgap . display_style, FractionNumeratorDisplayStyleShiftUp = t . fraction_num_up . display_style, FractionNumeratorGapMin = t . fraction_num_vgap . text_style, FractionNumeratorShiftUp = t . fraction_num_up . text_style, FractionRuleThickness = t . fraction_rule . text_style, FractionDelimiterSize = t . fraction_del_size . text_style, FractionDelimiterDisplayStyleSize = t . fraction_del_size . display_style, LowerLimitBaselineDropMin = t . limit_below_bgap . text_style, LowerLimitGapMin = t . limit_below_vgap . text_style, -- MathLeading MinConnectorOverlap = t . connector_overlap_min . text_style, OverbarExtraAscender = t . overbar_kern . text_style, OverbarRuleThickness = t . overbar_rule . text_style, OverbarVerticalGap = t . overbar_vgap . text_style, RadicalDisplayStyleVerticalGap = t . radical_vgap . display_style, RadicalExtraAscender = t . radical_kern . text_style, RadicalRuleThickness = t . radical_rule . text_style, RadicalVerticalGap = t . radical_vgap . text_style, RadicalKernBeforeDegree = t . radical_degree_before . display_style, RadicalKernAfterDegree = t . radical_degree_after . display_style, RadicalDegreeBottomRaisePercent = t . radical_degree_raise . display_style, -- ScriptPercentScaleDown -- ScriptScriptPercentScaleDown -- SkewedFractionHorizontalGap -- SkewedFractionVerticalGap SpaceAfterScript = t . space_after_script . text_style, StackBottomDisplayStyleShiftDown = t . stack_denom_down . display_style, StackBottomShiftDown = t . stack_denom_down . text_style, StackDisplayStyleGapMin = t . stack_vgap . display_style, StackGapMin = t . stack_vgap . text_style, StackTopDisplayStyleShiftUp = t . stack_num_up . display_style, StackTopShiftUp = t . stack_num_up . text_style, StretchStackGapBelowMin = t . over_delimiter_vgap . text_style, StretchStackTopShiftUp = t . over_delimiter_bgap . text_style, StretchStackGapAboveMin = t . under_delimiter_vgap . text_style, StretchStackBottomShiftDown = t . under_delimiter_bgap . text_style, SubSuperscriptGapMin = t . subsup_vgap . text_style, SubscriptBaselineDropMin = t . sub_shift_drop . text_style, SubscriptShiftDown = t . sub_shift_down . text_style, SubscriptShiftDownWithSuperscript = t . sub_sup_shift_down . text_style, SubscriptTopMax = t . sub_top_max . text_style, SuperscriptBaselineDropMax = t . sup_shift_drop . text_style, SuperscriptBottomMaxWithSubscript = t . sup_sub_bottom_max . text_style, SuperscriptBottomMin = t . sup_bottom_min . text_style, SuperscriptShiftUp = t . sup_shift_up . text_style, SuperscriptShiftUpCramped = t . sup_shift_up . cramped_text_style, UnderbarExtraDescender = t . underbar_kern . text_style, UnderbarRuleThickness = t . underbar_rule . text_style, UnderbarVerticalGap = t . underbar_vgap . text_style, UpperLimitBaselineRiseMin = t . limit_above_bgap . text_style, UpperLimitGapMin = t . limit_above_vgap . text_style, } -- too fragile for tx/px ... even the same values give different results d.DisplayOperatorMinHeight = nil -- d.AccentBaseHeight = 0 -- here? still? return d, t -- t only for diagnostics else return { }, { } end end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-counters.mkiv0000644000175000017500000000137012161703335026631 0ustar norbertnorbert%D \module %D [ file=s-languages-counters, % s-lan-05, %D version=2011.05.01, % older %D title=\CONTEXT\ Style File, %D subtitle=Language Counters, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[languages-counters] \registerctxluafile{s-languages-counters}{} \installmodulecommandluasingle \showverbosecounters {moduledata.languages.counters.showverbose} \stopmodule \continueifinputfile{s-languages-counters.mkiv} \usemodule[art-01] \starttext \showverbosecounters[language={en,es}] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-13.mkii0000644000175000017500000002635711754241457024355 0ustar norbertnorbert%D \module %D [ file=regi-8859-13, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-13 (Baltic), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-13/Latin7 input encoding (regime) for Baltic languages, %D see also iso-8859-4 and cp1257. %D %D Usage: \type{\enableregime[8859-13]} (see \type {regi-syn} for %D alternatives calls). \startregime[iso-8859-13] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\Rcommaaccent} % 0156 LATIN CAPITAL LETTER R WITH CEDILLA \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\rcommaaccent} % 0157 LATIN SMALL LETTER R WITH CEDILLA \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\onequarter} % 00BC VULGAR FRACTION ONE QUARTER \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\threequarter} % 00BE VULGAR FRACTION THREE QUARTERS \defineactivetoken 191 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 192 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 193 {\Iogonek} % 012E LATIN CAPITAL LETTER I WITH OGONEK \defineactivetoken 194 {\Amacron} % 0100 LATIN CAPITAL LETTER A WITH MACRON \defineactivetoken 195 {\Cacute} % 0106 LATIN CAPITAL LETTER C WITH ACUTE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 199 {\Emacron} % 0112 LATIN CAPITAL LETTER E WITH MACRON \defineactivetoken 200 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Zacute} % 0179 LATIN CAPITAL LETTER Z WITH ACUTE \defineactivetoken 203 {\Edotaccent} % 0116 LATIN CAPITAL LETTER E WITH DOT ABOVE \defineactivetoken 204 {\Gcommaaccent} % 0122 LATIN CAPITAL LETTER G WITH CEDILLA \defineactivetoken 205 {\Kcommaaccent} % 0136 LATIN CAPITAL LETTER K WITH CEDILLA \defineactivetoken 206 {\Imacron} % 012A LATIN CAPITAL LETTER I WITH MACRON \defineactivetoken 207 {\Lcommaaccent} % 013B LATIN CAPITAL LETTER L WITH CEDILLA \defineactivetoken 208 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 209 {\Nacute} % 0143 LATIN CAPITAL LETTER N WITH ACUTE \defineactivetoken 210 {\Ncommaaccent} % 0145 LATIN CAPITAL LETTER N WITH CEDILLA \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Omacron} % 014C LATIN CAPITAL LETTER O WITH MACRON \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Uogonek} % 0172 LATIN CAPITAL LETTER U WITH OGONEK \defineactivetoken 217 {\Lstroke} % 0141 LATIN CAPITAL LETTER L WITH STROKE \defineactivetoken 218 {\Sacute} % 015A LATIN CAPITAL LETTER S WITH ACUTE \defineactivetoken 219 {\Umacron} % 016A LATIN CAPITAL LETTER U WITH MACRON \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Zdotaccent} % 017B LATIN CAPITAL LETTER Z WITH DOT ABOVE \defineactivetoken 222 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 225 {\iogonek} % 012F LATIN SMALL LETTER I WITH OGONEK \defineactivetoken 226 {\amacron} % 0101 LATIN SMALL LETTER A WITH MACRON \defineactivetoken 227 {\cacute} % 0107 LATIN SMALL LETTER C WITH ACUTE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 231 {\emacron} % 0113 LATIN SMALL LETTER E WITH MACRON \defineactivetoken 232 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\zacute} % 017A LATIN SMALL LETTER Z WITH ACUTE \defineactivetoken 235 {\edotaccent} % 0117 LATIN SMALL LETTER E WITH DOT ABOVE \defineactivetoken 236 {\gcommaaccent} % 0123 LATIN SMALL LETTER G WITH CEDILLA \defineactivetoken 237 {\kcommaaccent} % 0137 LATIN SMALL LETTER K WITH CEDILLA \defineactivetoken 238 {\imacron} % 012B LATIN SMALL LETTER I WITH MACRON \defineactivetoken 239 {\lcommaaccent} % 013C LATIN SMALL LETTER L WITH CEDILLA \defineactivetoken 240 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 241 {\nacute} % 0144 LATIN SMALL LETTER N WITH ACUTE \defineactivetoken 242 {\ncommaaccent} % 0146 LATIN SMALL LETTER N WITH CEDILLA \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\omacron} % 014D LATIN SMALL LETTER O WITH MACRON \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\uogonek} % 0173 LATIN SMALL LETTER U WITH OGONEK \defineactivetoken 249 {\lstroke} % 0142 LATIN SMALL LETTER L WITH STROKE \defineactivetoken 250 {\sacute} % 015B LATIN SMALL LETTER S WITH ACUTE \defineactivetoken 251 {\umacron} % 016B LATIN SMALL LETTER U WITH MACRON \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\zdotaccent} % 017C LATIN SMALL LETTER Z WITH DOT ABOVE \defineactivetoken 254 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 255 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-box.mkiv0000644000175000017500000023210712161703335024344 0ustar norbertnorbert%D \module %D [ file=supp-box, %D version=1995.10.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Boxes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support Macros / Boxes} \unprotect \registerctxluafile{supp-box}{1.001} % This file is partially cleaned up. % handy to have % % \hbox to \hsize % {\en % \switchnaarkorps[5pt]% % \emergencystretch2em % \dimen0=\baselineskip % \baselineskip=\dimen0 plus 1pt % \hsize=.2\hsize % \vsize=2\hsize % \ruledvbox to \vsize{\input tufte \par}\hss % \ruledvbox to \vsize{\input tufte \par\kern-\prevdepth}\hss % \ruledvbox to \vsize{\input tufte \par\kern0pt}\hss % \ruledvbox to \vsize{\input tufte \par\vfill}\hss % \ruledvbox to \vsize{\input tufte \par\kern-\prevdepth\vfill}} % % \hbox to \hsize % {\en % \switchnaarkorps[5pt]% % \emergencystretch2em % \dimen0=\baselineskip % \baselineskip=\dimen0 plus 1pt % \hsize=.18\hsize % \vsize=2.5\hsize % \setbox0=\vbox{\input tufte\relax}% % \ruledvbox to \vsize{\unvcopy0}\hss % \ruledvbox to \vsize{\unvcopy0\kern-\dp0}\hss % \ruledvbox to \vsize{\unvcopy0\kern0pt}\hss % \ruledvbox to \vsize{\unvcopy0\vfill}\hss % \ruledvbox to \vsize{\unvcopy0\kern-\dp0\vfill}} %D \macros %D {dontcomplain} %D %D The next macro suppresses over- and underfull messages which %D often makes sense when we deal with boxes. \unexpanded\def\dontcomplain {\hbadness\plustenthousand \vbadness\plustenthousand \hfuzz \maxdimen \vfuzz \maxdimen} %D This module implements some box manipulation macros. Some %D are quite simple, some are more advanced and when understood %D well, all can be of use. %D %D \macros %D {strutdp,strutht,strutwd} %D %D The next shortcuts save memory and keying. The width is %D normally zero points (if not, you're in trouble). These %D shortcuts can be used like a dimension, opposite to the %D core macros \type {\strutdepth} and alike, which are %D values. \def\strutdp {\dp\strutbox} \def\strutht {\ht\strutbox} \def\strutwd {\wd\strutbox} \def\struthtdp{\dimexpr\ht\strutbox+\dp\strutbox\relax} %D \macros %D {voidbox,nextbox} %D %D Let's start with an easy one. The next macro hides the %D ugly \type {@} in \type {\voidb@x}. \ifdefined\voidbox \else \newbox\voidbox \fi \ifdefined\nextbox \else \newbox\nextbox \fi %D \macros %D {nextdepth} %D %D Let's start with a rather simple declaration. Sometimes we %D need to save the \TEX\ \DIMENSION\ \type{\prevdepth} and %D append it later on. The name \type{\nextdepth} suits %D this purpose well. \newdimen\nextdepth %D \macros %D {smashbox, smashedbox} %D %D Smashing is introduced in \PLAIN\ \TEX, and stands for %D reducing the dimensions of a box to zero. The most resolute %D one is presented first. \unexpanded\def\smashbox#1% {\wd#1\zeropoint \ht#1\zeropoint \dp#1\zeropoint} \unexpanded\def\smashboxed#1% {\wd#1\zeropoint \ht#1\zeropoint \dp#1\zeropoint \box#1\relax} %D \macros %D {hsmashbox,vsmashbox} %D %D Smashing can be used for overlaying boxes. Depending on %D the mode, horizontal or vertical, one can use: \unexpanded\def\hsmashbox#1% {\wd#1\zeropoint} \unexpanded\def\vsmashbox#1% {\ht#1\zeropoint \dp#1\zeropoint} %D The next implementation is less sensitive for spurious %D spaces. \newcount\c_boxes_register \unexpanded\def\smashbox {\afterassignment\syst_boxes_smash_boxes_register\c_boxes_register} \def\syst_boxes_smash_boxes_register {\wd\c_boxes_register\zeropoint \ht\c_boxes_register\zeropoint \dp\c_boxes_register\zeropoint} \unexpanded\def\hsmashbox {\afterassignment\syst_boxes_hsmashed_boxes_register\c_boxes_register} \def\syst_boxes_hsmashed_boxes_register {\wd\c_boxes_register\zeropoint} \unexpanded\def\vsmashbox {\afterassignment\syst_boxes_vsmashed_boxes_register\c_boxes_register} \def\syst_boxes_vsmashed_boxes_register {\ht\c_boxes_register\zeropoint \dp\c_boxes_register\zeropoint} \unexpanded\def\smashedbox {\afterassignment\syst_boxes_smashed_boxes_register\c_boxes_register} \unexpanded\def\syst_boxes_smashed_boxes_register {\wd\c_boxes_register\zeropoint \ht\c_boxes_register\zeropoint \dp\c_boxes_register\zeropoint \box\c_boxes_register} %D \macros %D {hsmash,vsmash, %D hsmashed,vsmashed} %D %D While the previous macros expected a \BOX, the next act on a %D content. They are some subtle differences betreen the smash %D and smashed alternatives. The later ones reduce all %D dimensions to zero. \unexpanded\def\hsmash {\bgroup\dowithnextboxcs\syst_boxes_hsmashed_nextbox\hbox} \unexpanded\def\vsmash {\bgroup\dowithnextboxcs\syst_boxes_vsmashed_nextbox\vbox} \unexpanded\def\hsmashed{\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox \hbox} \unexpanded\def\vsmashed{\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox \vbox} \unexpanded\def\syst_boxes_hsmashed_nextbox {\wd\nextbox\zeropoint \box\nextbox \egroup} \unexpanded\def\syst_boxes_vsmashed_nextbox {\ht\nextbox\zeropoint \dp\nextbox\zeropoint \box\nextbox \egroup} \unexpanded\def\syst_boxes_smashed_nextbox {\ht\nextbox\zeropoint \dp\nextbox\zeropoint \wd\nextbox\zeropoint \box\nextbox \egroup} %D \macros %D {smashedhbox,smashedvbox} %D %D Also handy (all dimensions zeroed): %D %D \starttyping %D \smashedhbox to ... {...} %D \smashedvbox to ... {...} %D \stoptyping \unexpanded\def\smashedhbox{\hbox\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox\hbox} \unexpanded\def\smashedvbox{\vbox\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox\vbox} %D First we define a helper. We use a \LUATEX\ feature in order to avoid %D mathpalettes. \newcount\c_boxes_math_style \unexpanded\def\syst_boxes_math_set_nextbox#1% {\c_boxes_math_style\mathstyle \setbox\nextbox\hbox{$\mathsurround\zeropoint\triggermathstyle\c_boxes_math_style{#1}$}} %D \macros %D {smash} %D %D This smash alternative takes an optional arg [whdtb] as %D well as is potentially catcode safer. It is needed by the %D math module (although the \type {\leavevmode} is not added %D here). \unexpanded\def\smash {\begingroup \futurelet\nexttoken\syst_boxes_smash} \def\syst_boxes_smash {\ifx\nexttoken[% \expandafter\syst_boxes_smash_yes \else \expandafter\syst_boxes_smash_nop \fi} \def\syst_boxes_smash_nop {\edef\m_boxes_smash_options{hd}% \futurelet\nexttoken\syst_boxes_smash_indeed} \def\syst_boxes_smash_yes[#1]% {\edef\m_boxes_smash_options{#1}% \futurelet\nexttoken\syst_boxes_smash_indeed} \def\syst_boxes_smash_indeed {\ifmmode \expandafter\syst_boxes_smash_math \else\ifx\nexttoken\bgroup \doubleexpandafter\syst_boxes_smash_hbox \else \doubleexpandafter\syst_boxes_smash_text \fi\fi} \def\syst_boxes_smash_math#1% {\syst_boxes_math_set_nextbox{#1}% \syst_boxes_smash_process} \def\syst_boxes_smash_hbox {\dowithnextboxcs\syst_boxes_smash_process\hbox} \def\syst_boxes_smash_text#1% {\setbox\nextbox\hbox{#1}% \syst_boxes_smash_process} \def\syst_boxes_smash_process {\expandafter\syst_boxes_smash_process_option\m_boxes_smash_options\relax \box\nextbox \endgroup} \installcorenamespace {smashoptions} \setvalue{\??smashoptions w}{\wd\nextbox\zeropoint} \setvalue{\??smashoptions h}{\ht\nextbox\zeropoint} \setvalue{\??smashoptions d}{\dp\nextbox\zeropoint} \setvalue{\??smashoptions t}{\ht\nextbox\zeropoint} \setvalue{\??smashoptions b}{\dp\nextbox\zeropoint} \def\syst_boxes_smash_process_option#1% {\ifx#1\relax\else \ifcsname\??smashoptions#1\endcsname\csname\??smashoptions#1\endcsname\fi \expandafter\syst_boxes_smash_process_option \fi} %D \starttabulate[|l|l|] %D \NC w \NC \ruledhbox{\smash [w]{This is some great smashing, isn't it?}} \NC \NR %D \NC h \NC \ruledhbox{\smash [h]{This is some great smashing, isn't it?}} \NC \NR %D \NC d \NC \ruledhbox{\smash [d]{This is some great smashing, isn't it?}} \NC \NR %D \NC tb \NC \ruledhbox{\smash [tb]{This is some great smashing, isn't it?}} \NC \NR %D \NC whd \NC \ruledhbox{\smash[whd]{This is some great smashing, isn't it?}} \NC \NR %D \stoptabulate %D \macros %D {phantom, hphantom, vphantom, mathstrut} %D %D The next implementation of \type {\phantom} cum suis does %D not grab an argument in the non||math case, which is better. %D %D Due to a complicated call to \type {\mathpallete} and %D thereby \type {\mathchoice}, the next macro looks ugly. %D We also take care of non||braced arguments. \unexpanded\def\phantom {\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed } \unexpanded\def\vphantom{\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed_v} \unexpanded\def\hphantom{\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed_h} \def\syst_boxes_phantom_math #1{\syst_boxes_math_set_nextbox{#1}\syst_boxes_phantom_make } \def\syst_boxes_phantom_math_v#1{\syst_boxes_math_set_nextbox{#1}\syst_boxes_phantom_make_v} \def\syst_boxes_phantom_math_h#1{\syst_boxes_math_set_nextbox{#1}\syst_boxes_phantom_make_h} \def\syst_boxes_phantom_hbox {\dowithnextboxcs\syst_boxes_phantom_make \hbox} % always hbox \def\syst_boxes_phantom_hbox_v{\dowithnextboxcs\syst_boxes_phantom_make_v\hbox} % always hbox \def\syst_boxes_phantom_hbox_h{\dowithnextboxcs\syst_boxes_phantom_make_h\hbox} % always hbox \def\syst_boxes_phantom_text #1{\setbox\nextbox\hbox{#1}\syst_boxes_phantom_make } % always hbox \def\syst_boxes_phantom_text_v#1{\setbox\nextbox\hbox{#1}\syst_boxes_phantom_make_v} % always hbox \def\syst_boxes_phantom_text_h#1{\setbox\nextbox\hbox{#1}\syst_boxes_phantom_make_h} % always hbox \def\syst_boxes_phantom_indeed {\ifmmode \expandafter\syst_boxes_phantom_math \else\ifx\nexttoken\bgroup \doubleexpandafter\syst_boxes_phantom_hbox \else \doubleexpandafter\syst_boxes_phantom_text \fi\fi} \def\syst_boxes_phantom_indeed_v {\ifmmode \expandafter\syst_boxes_phantom_math_v \else\ifx\nexttoken\bgroup \doubleexpandafter\syst_boxes_phantom_hbox_v \else \doubleexpandafter\syst_boxes_phantom_text_v \fi\fi} \def\syst_boxes_phantom_indeed_h {\ifmmode \expandafter\syst_boxes_phantom_math_h \else\ifx\nexttoken\bgroup \doubleexpandafter\syst_boxes_phantom_hbox_h \else \doubleexpandafter\syst_boxes_phantom_text_h \fi\fi} \def\syst_boxes_phantom_make {\setbox\scratchbox\emptyhbox \ht\scratchbox\ht\nextbox \dp\scratchbox\dp\nextbox \wd\scratchbox\wd\nextbox \box\scratchbox \endgroup} \def\syst_boxes_phantom_make_v {\setbox\scratchbox\emptyhbox \ht\scratchbox\ht\nextbox \dp\scratchbox\dp\nextbox \box\scratchbox \endgroup} \def\syst_boxes_phantom_make_h {\setbox\scratchbox\emptyhbox \wd\scratchbox\wd\nextbox \box\scratchbox \endgroup} %D We also define plain's \type {\mathstrut}. \unexpanded\def\mathstrut{\vphantom(} % can be made faster by inlining %D \macros %D {getboxheight} %D %D Although often needed, \TEX\ does not support arithmics %D like: %D %D \starttyping %D \dimen0 = \ht0 + \dp0 %D \stoptyping %D %D so we implemented: %D %D \starttyping %D \getboxheight ... \of \box... %D \stoptyping %D %D For instance, %D %D \starttyping %D \getboxheight \dimen0 \of \box0 %D \getboxheight \someheight \of \box \tempbox %D \stoptyping %D %D The implementation is rather stupid: %D %D \starttyping %D \def\getboxheight#1\of#2\box#3% %D {#1\ht#3\advance#1\dp#3\relax} %D \stoptyping %D %D The next alternative is slightly more clever, since %D it accepts \type {{12}} as well as \type {12} as box %D number. \unexpanded\def\getboxheight#1\of#2\box#3% {\def\next{#1\dimexpr\ht\c_boxes_register+\dp\c_boxes_register\relax}% \afterassignment\next\c_boxes_register=#3} %D For a long time the following three macros were part of %D the grid snapping core module, but it makes more sense to %D have them here so that users can see them. %D %D \macros %D {getnoflines, getroundednoflines, getrawnoflines} %D %D Het commando \type{\getnoflines} converteert een hoogte %D (dimensie) in een aantal regels en kent dit toe aan %D \type{\noflines}. %D %D \starttyping %D \getnoflines{dimensie} %D \stoptyping %D %D Er wordt gedeeld door \type{\openlineheight} en een hoogte %D van~0pt komt overeen met 0~regels. The raw alternative %D does not round. %D For a long time we had: %D %D \starttyping %D \newcount\noflines %D \newdimen\noflinesheight %D %D \def\dogetnoflines#1#2% %D {\noflinesheight#2\relax %D \ifzeropt\noflinesheight % \ifdim\noflinesheight=\zeropoint %D \noflines\zerocount %D \else %D \divide\noflinesheight \openlineheight %D \noflines\noflinesheight %D #1\ifdim\noflines\openlineheight=#2\relax \else %D \advance\noflines\ifdim#2>\zeropoint\plusone\else\minusone\fi %D \fi\fi %D \fi} %D %D \def\getnoflines {\dogetnoflines\iftrue } % compensated %D \def\getrawnoflines{\dogetnoflines\iffalse} % no compensation %D \stoptyping %D %D A more recent variant is: \ifx\roundingeps\undefined \newdimen\roundingeps \roundingeps=10sp \fi \newcount\noflines \newdimen\noflinesheight \unexpanded\def\getnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount \else\ifdim\noflinesheight>\zeropoint \advance\noflinesheight-\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \advance\noflines\plusone \else \advance\noflinesheight\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \advance\noflines\minusone \fi\fi} \unexpanded\def\getroundednoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount \else\ifdim\noflinesheight>\zeropoint \advance\noflinesheight\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \else \advance\noflinesheight-\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \fi\fi} \unexpanded\def\getrawnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount \else\ifdim\noflinesheight>\zeropoint \advance\noflinesheight\roundingeps \advance\noflinesheight.5\openlineheight \divide\noflinesheight\openlineheight \noflines\noflinesheight \else \advance\noflinesheight-\roundingeps \advance\noflinesheight-.5\openlineheight \divide\noflinesheight\openlineheight \noflines\noflinesheight \fi\fi} %D Let's proof that it works: %D %D \startbuffer %D \scratchdimen\dimexpr(3pt) \getnoflines\scratchdimen 1=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight) \getnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.1\lineheight) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.5\lineheight) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.9\lineheight) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3pt) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3sp) \getnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight-3sp) \getnoflines\scratchdimen 10=\the\noflines \endgraf %D %D \scratchdimen\dimexpr(3pt) \getrawnoflines\scratchdimen 0=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.1\lineheight) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.5\lineheight) \getrawnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.9\lineheight) \getrawnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3pt) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3sp) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight-3sp) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {determinenoflines} %D %D The next macro determines the number of lines and %D returns it it \type {\noflines}. The macro works %D reasonable well as long as the content can be unboxed. %D %D \starttyping %D \determinenoflines{test\\test} %D \determinenoflines{\bfd test\\test} %D \determinenoflines{\definedfont[Sans at 40pt]test\\test} %D \stoptyping \def\dodeterminenoflines % can be mkiv'd {\beginofshapebox \unvbox\nextbox \endofshapebox % \global\count1\zerocount % \reshapebox{\global\advance\count1\plusone}% % \egroup\noflines\count1 }% \scratchcounter\zerocount \reshapebox{\global\advance\scratchcounter\plusone}% \expandafter\egroup\expandafter\noflines\the\scratchcounter\relax} \unexpanded\def\determinenoflines {\bgroup \forgetall \let\crlf\endgraf \let\\\endgraf \dowithnextboxcs\dodeterminenoflines\vbox} %D \macros %D {doiftextelse, doiftext} %D %D When \type {\doifelse} cum suis hopelessly fail, for %D instance because we pass data, we can fall back on the next %D macro: %D %D \starttyping %D \doiftextelse {data} {then branch} {else branch} %D \doiftext {data} {then branch} %D \stoptyping \unexpanded\def\doiftextelse#1% {\begingroup \setbox\scratchbox\hbox {\settrialtypesetting \ignorespaces#1\removeunwantedspaces}% \ifzeropt\wd\scratchbox \endgroup\expandafter\secondoftwoarguments \else \endgroup\expandafter\firstoftwoarguments \fi} \unexpanded\def\doiftext#1% {\begingroup \setbox\scratchbox\hbox {\settrialtypesetting \ignorespaces#1\removeunwantedspaces}% \ifzeropt\wd\scratchbox \endgroup\expandafter\gobbleoneargument \else \endgroup\expandafter\firstofoneargument \fi} %D \macros %D {dowithnextbox,nextbox} %D %D Sometimes we want a macro to grab a box and do something %D on the content. One could pass an argument to a box, but %D this can violate the specific \CATCODES\ of its content and %D leads to unexpected results. The next macro treats the %D following braced text as the content of a box and %D manipulates it afterwards in a predefined way. %D %D The first argument specifies what to do with the content. %D This content is available in \type{\nextbox}. The second %D argument is one of \type{\hbox}, \type{\vbox} or %D \type{\vtop}. The third argument must be grouped with %D \type{\bgroup} and \type{\egroup}, \type{{...}} or can be %D a \type{\box} specification. %D %D In \CONTEXT\ this macro is used for picking up a box and %D treating it according to earlier specifications. We use for %D instance something like: %D %D \starttyping %D \def\getfloat% %D {\def\handlefloat{...\box\nextbox...} %D \dowithnextboxcs\handlefloat\vbox} %D \stoptyping %D %D instead of: %D %D \starttyping %D \def\getfloat#1% %D {...#1...} %D \stoptyping %D %D In this implementation the \type{\aftergroup} construction %D is needed because \type{\afterassignment} is executed inside %D the box. \unexpanded\def\dowithnextbox#1% {\def\syst_boxes_with_next_box{#1}% \afterassignment\syst_boxes_with_next_box_indeed \setbox\nextbox} \def\syst_boxes_with_next_box_indeed {\aftergroup\syst_boxes_with_next_box} \unexpanded\def\dowithnextboxcs#1% {\let\syst_boxes_with_next_box#1% \afterassignment\syst_boxes_with_next_box_indeed \setbox\nextbox} %D So in fact we get: %D %D \starttyping %D \setbox\nextbox { \aftergroup\syst_boxes_with_next_box ... } %D \stoptyping %D %D or %D %D \starttyping %D \setbox\nextbox { ... } \syst_boxes_with_next_box %D \stoptyping %D %D A slower but more versatile implementation is: %D %D \starttyping %D \long\def\dowithnextbox#1#2% %D {\long\def\syst_boxes_with_next_box{#1}% %D \ifx#2\hbox %D \afterassignment\syst_boxes_with_next_box_indeed %D \else\ifx#2\vbox %D \afterassignment\syst_boxes_with_next_box_indeed %D \else\ifx#2\normalvtop %D \afterassignment\syst_boxes_with_next_box_indeed %D \else\ifx#2\normalvcenter %D \afterassignment\syst_boxes_with_next_box_indeed %D \else %D \afterassignment\syst_boxes_with_next_box %D \fi\fi\fi\fi %D \setbox\nextbox#2} %D \stoptyping %D %D This alternative also accepts \type{\box0} and alike, but %D we don't really need this functionality now. %D \macros %D {nextboxht,nextboxwd,nextboxdp,flushnextbox} %D %D The next couple of shortcuts saves us memory as well as %D \type {{}}'s in passing parameters. \def\nextboxht {\ht\nextbox} \def\nextboxwd {\wd\nextbox} \def\nextboxdp {\dp\nextbox} \def\nextboxhtdp {\dimexpr\ht\nextbox+\dp\nextbox\relax} \unexpanded\def\flushnextbox{\box\nextbox} %D \macros %D {dowithnextboxcontent} %D %D But, occasionally we do need to pass some local settings %D without wanting to use additional grouping. Therefore we %D provide: %D %D \starttyping %D \dowithnextboxcontent{inside}{after}{box content} %D \stoptyping %D %D {\em todo: Search source for potential usage!} \unexpanded\def\dowithnextboxcontent#1#2% inside, after {\def\syst_boxes_with_next_box_one{#2}% \def\syst_boxes_with_next_box_two{#1}% \afterassignment\syst_boxes_with_next_box_content_indeed \setbox\nextbox} \unexpanded\def\dowithnextboxcontentcs#1#2% inside, after {\let\syst_boxes_with_next_box_one#2% \let\syst_boxes_with_next_box_two#1% \afterassignment\syst_boxes_with_next_box_content_indeed \setbox\nextbox} \def\syst_boxes_with_next_box_content_indeed {\syst_boxes_with_next_box_two\aftergroup\syst_boxes_with_next_box_one} %D \macros %D {llap, rlap, tlap, blap, clap} %D %D Some well known friends, but we implement them our own %D way. We want the macros to work in both math and text mode. \def\dodorlap{\hbox to \zeropoint{\box\nextbox\normalhss}\endgroup} \def\dodollap{\hbox to \zeropoint{\normalhss\box\nextbox}\endgroup} \def\dodoclap{\hbox to \zeropoint{\normalhss\box\nextbox\normalhss}\endgroup} \def\dorlap{\begingroup\dowithnextboxcs\dodorlap\hbox} \def\dollap{\begingroup\dowithnextboxcs\dodollap\hbox} \def\doclap{\begingroup\dowithnextboxcs\dodoclap\hbox} \def\domathclap{\mathpalette\dodomathclap} \def\dodomathclap#1#2{\doclap{$\mathsurround\zeropoint#1#2$}} \def\domathllap{\mathpalette\dodomathllap} \def\dodomathllap#1#2{\dollap{$\mathsurround\zeropoint#1#2$}} \def\domathrlap{\mathpalette\dodomathrlap} \def\dodomathrlap#1#2{\dorlap{$\mathsurround\zeropoint#1#2$}} \unexpanded\def\rlap{\mathortext\domathrlap\dorlap} \unexpanded\def\llap{\mathortext\domathllap\dollap} \unexpanded\def\clap{\mathortext\domathclap\doclap} \def\dodotlap{\vbox to \zeropoint{\normalvss\box\nextbox}\endgroup} \def\dodoblap{\vbox to \zeropoint{\box\nextbox\normalvss}\endgroup} \unexpanded\def\tlap{\begingroup\dowithnextboxcs\dodotlap\vbox} \unexpanded\def\blap{\begingroup\dowithnextboxcs\dodoblap\vbox} %D \macros %D {beginofshapebox, %D reshapebox, doreshapebox, %D flushshapebox, %D innerflushshapebox, %D shapebox, %D ifreshapingbox} %D %D The next utility macro originates from some linenumbering %D mechanism. Due to \TEX's advanced way of typesetting %D paragraphs, it's not easy to do things on a line||by||line %D basis. This macro is able to reprocess a given box and can %D act upon its vertical boxed components, such as lines. The %D unwinding sequence in this macro is inspired by a \NTG\ %D workshop of David Salomon in June 1992. %D %D First we have to grab the piece of text we want to act %D upon. This is done by means of the duo macros: %D %D \starttyping %D \beginofshapebox %D a piece of text %D \endofshapebox %D \stoptyping %D %D When all texts is collected, we can call \type{\reshapebox} %D and do something with it's vertical components. We can make %D as much passes as needed. When we're done, the box can be %D unloaded with \type{\flushshapebox}. The only condition in %D this scheme is that \type{\reshapebox} must somehow unload %D the \BOX\ \type{\shapebox}. %D %D An important aspect is that the content is unrolled %D bottom||up. The next example illustrates this maybe %D unexpected characteristic. %D %D \startbuffer %D \beginofshapebox %D \em \input tufte %D \endofshapebox %D %D \newcounter\LineNumber %D %D \reshapebox %D {\doglobal\increment\LineNumber %D \hbox{\llap{\LineNumber\hskip2em}\box\shapebox}} %D %D \flushshapebox %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D As we can see, when some kind of numbering is done, we have %D to add a second pass. %D %D \startbuffer %D \newcounter\LineNumber %D \newcounter\NumberOfLines %D %D \reshapebox %D {\doglobal\increment\NumberOfLines %D \box\shapebox} %D %D \reshapebox %D {\doglobal\increment\LineNumber %D \hbox %D {\llap{\LineNumber\ (\NumberOfLines)\hskip2em}% %D \box\shapebox}% %D \doglobal\decrement\NumberOfLines} %D %D \flushshapebox %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D This example shows that the content of the box is still %D available after flushing. Another feature is that only the %D last reshaping counts. Multiple reshaping can be done by: %D %D \startbuffer %D \beginofshapebox %D \flushshapebox %D \endofshapebox %D %D \reshapebox %D {\doglobal\increment\LineNumber %D \hbox{\llap{$\star$\hskip1em}\box\shapebox}% %D \doglobal\decrement\NumberOfLines} %D %D \flushshapebox %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D The macros are surprisingly easy to follow and in fact %D introduce no new concepts. Nearly all books on \TEX\ show %D similar solutions for unwinding \BOXES. %D %D Some macros, like footnote ones, can be sensitive for %D reshaping, which can result in an endless loop. We %D therefore offer: %D %D \starttyping %D \ifreshapingbox %D \stoptyping %D %D Some \CONTEXT\ commands are protected this way. Anyhow, %D reshaping is aborted after 100 dead cycles. %D %D By the way, changing the height and depth of \BOX\ %D \type{\shapebox} results in bad spacing. This means that %D for instance linenumbers etc. should be given zero height %D and depth before being lapped into the margin. The %D previous examples ignore this side effect, but beware! \newif \ifsomeshapeleft \newif \ifreshapingbox \newbox \shapebox \newcount \shapepenalty \newdimen \shapekern \newskip \shapeskip \newbox \newshapebox \newbox \oldshapebox \newcount \shapecounter \newevery \everyshapebox \relax \def\shapesignal{.12345678pt} % or 12345sp \unexpanded\def\reshapebox#1% {\doreshapebox {#1}% {\penalty\shapepenalty}% {\kern \shapekern }% {\vskip \shapeskip }} \newbox\tmpshapebox \newif\ifreshapingfailed % may save redundant runs \def\doreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip {\global\reshapingfailedfalse \ifzeropt\ht\oldshapebox % \ifdim\ht\oldshapebox=\zeropoint \setbox\newshapebox\emptyvbox \else \setbox\newshapebox\vbox {\unvcopy\oldshapebox \setbox\newshapebox\emptybox \shapecounter\zerocount \doloop{\dodoreshapebox{#1}{#2}{#3}{#4}}}% \setbox\newshapebox\box\tmpshapebox \fi} \ifx\originalshapebox\undefined \let\originalshapebox\oldshapebox \fi % We will turn this into a \MKIV\ variant. \unexpanded\def\insertshapesignal {\hbox to \shapesignal{\strut\hss}% plus \strut \prevdepth\strutdp} % never \nointerlineskip \unexpanded\def\restoreshapebox % compensates for the signal {\global\setbox\tmpshapebox\vbox{\vskip-\lineheight\unvcopy\oldshapebox}} \def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip {\ifnum\lastnodetype=\gluenodecode \shapeskip\lastskip \global\setbox\tmpshapebox\vbox{#4\unvbox\tmpshapebox}% \unskip \else\ifnum\lastnodetype=\kernnodecode \shapekern\lastkern \global\setbox\tmpshapebox\vbox{#3\unvbox\tmpshapebox}% \unkern \else\ifnum\lastnodetype=\penaltynodecode \shapepenalty\lastpenalty \global\setbox\tmpshapebox\vbox{#2\unvbox\tmpshapebox}% \unpenalty \else\ifnum\lastnodetype<\zeropoint \exitloop \else \setbox\shapebox\lastbox \ifvoid\shapebox \else\ifdim\wd\shapebox=\shapesignal\relax \exitloop \else \shapecounter\zerocount \global\setbox\tmpshapebox\vbox{#1\unvbox\tmpshapebox}% \fi\fi \fi\fi\fi\fi \ifnum\shapecounter>100 % can be less \global\reshapingfailedtrue \message{!!forced exit from shapebox \the\lastnodetype !!}% \restoreshapebox \exitloop \else \advance\shapecounter \plusone \fi} \unexpanded\def\beginofshapebox {\setbox\oldshapebox\vbox \bgroup \reshapingboxtrue \the\everyshapebox \insertshapesignal} \unexpanded\def\endofshapebox {\endgraf \egroup} \let\beginshapebox\beginofshapebox \let\endshapebox \endofshapebox \unexpanded\def\flushshapebox {\bgroup \ifzeropt\ht\newshapebox % \ifdim\ht\newshapebox=\zeropoint \else % make \prevdepth legal % \par before the next \vskip gives far worse results \ifdim\parskip>\zeropoint\vskip\parskip\else\par\fi % and take a look \ifdim\prevdepth=-\thousandpoint \prevdepth\zeropoint \fi \ifdim\prevdepth<\zeropoint\relax % something like a line or a signal or ... \donetrue \else\ifinner % not watertight and not ok \donefalse \else\ifdim\pagegoal=\maxdimen \donetrue \else % give the previous line a normal depth \donetrue {\forgeteverypar\verticalstrut}\nobreak \kern-\struttotal % geen \vskip \kern-\parskip % \vskip-\strutdp \fi\fi\fi \scratchdimen\dp\newshapebox \unvbox\newshapebox % \prevdepth=0pt and \dp\newshapebox depend on last line \kern-\scratchdimen % ?? % now \prevdepth=0pt \ifdone \kern\strutdp \prevdepth\strutdp \fi \fi \egroup} %D In real inner situations we can use: %D %D \starttyping %D \flushinnershapebox %D \stoptyping %D %D This one is used in \type{\framed}. % The kern fails on for instance: % % \omlijnd[offset=0pt,hoogte=8mm,uitlijnen={rechts,laho}]{\bfa test} \unexpanded\def\innerflushshapebox {\ifzeropt\ht\newshapebox \else \unvcopy\newshapebox\relax % unvcopy ! else spacing problem % \kern-\dp\newshapebox\relax \fi} %D For absolute control, one can use \type{\doreshapebox} %D directly. This macro takes four arguments, that take care %D of: %D %D \startitemize[n,packed] %D \item \type{\shapebox} %D \item \type{\shapepenalty} %D \item \type{\shapekern} %D \item \type{\shapeskip} %D \stopitemize %D \macros %D {shapedhbox} %D %D When constructing a new box, using the content of \type %D {\shapebox}, one can best use \type {\shapedhbox} instead %D of \type {\hbox}, since it manages the height and depth of %D the line. \unexpanded\def\shapedhbox % lines with non strutted dimensions have {\expanded{\dowithnextbox % interlineskip so if we want the original {\dp\nextbox\the\ht\shapebox % spacing, we need to preserve the original \dp\nextbox\the\dp\shapebox % height and depth which is definitely \box\nextbox}} % needed if we apply struts to the 'new' \hbox} % box or do something that changed ist size %D \macros %D {hyphenatedword, %D hyphenatedpar, %D hyphenatedfile, %D dohyphenateword} %D %D We no longer use the pure \TEX\ variant. In due time we will %D report some more advanced statistics. %D %D \starttyping %D \showhyphens{dohyphenatedword} %D \stoptyping \def\doshowhyphenatednextbox {\ctxcommand{showhyphenatedinlist(tex.box[\number\nextbox].list)}} \unexpanded\def\showhyphens{\dowithnextboxcs\doshowhyphenatednextbox\hbox} %D The following macros are seldom used but handy for tracing. %D %D \starttyping %D \hyphenatedword{dohyphenatedword} %D \hyphenatedpar {\dorecurse{10}{dohyphenatedword }} %D \hyphenatedfile{tufte} %D \stoptyping \def\dohyphenatednextbox {\ctxcommand{hyphenatedlist(tex.box[\number\nextbox])}% \unhbox\nextbox} \unexpanded\def\hyphenatedword {\dowithnextboxcs\dohyphenatednextbox \hbox} \unexpanded\def\hyphenatedpar {\dowithnextboxcs\dohyphenatednextbox \hbox} \unexpanded\def\hyphenatedfile#1{\dowithnextboxcs\dohyphenatednextbox \hbox{\readfile{#1}\donothing\donothing}} %D \macros %D {processtokens} %D %D We fully agree with (most) typographers that inter||letter %D spacing is only permitted in fancy titles, we provide a %D macro that can be used to do so. Because this is %D (definitely and fortunately) no feature of \TEX, we have to %D step through the token list ourselves. %D %D \starttyping %D \processtokens {before} {between} {after} {space} {tokens} %D \stoptyping %D %D An example of a call is: %D %D \startbuffer %D \processtokens {[} {+} {]} {\space} {hello world} %D \stopbuffer %D %D \typebuffer %D %D This results in: %D %D \getbuffer %D %D The list of tokens may contain spaces, while \type{\\}, %D \type{{}} and \type{\ } are handled as space too. \unexpanded\def\processtokens#1#2#3#4#5% {\begingroup \def\lastcharacter{\lastcharacter}% \def\space{ }% \let\\=\space \def\before {#1}% \def\between{#2}% \def\after {#3}% \def\white {#4}% \let\savedbefore\before \doprocesstokens#5\lastcharacter \endgroup} \def\doprocesstokens% the space after = is essential {\afterassignment\dodoprocesstokens\let\nextprocessedtoken= } \def\dodoprocesstokens {\ifx\nextprocessedtoken\lastcharacter \after \let\nextprocessedtoken\relax \else\ifx\nextprocessedtoken\bgroup \def\nextprocessedtoken {\dowithnextbox {\before{\copy\nextbox}% \before can use nextbox several times \let\before\between \doprocesstokens} \hbox\bgroup}% \else \expandafter\if\space\nextprocessedtoken \after\white \let\before\savedbefore \else \before\nextprocessedtoken \let\before\between \fi \let\nextprocessedtoken\doprocesstokens \fi\fi \nextprocessedtoken} %D \macros %D {doboundtext} %D %D Sometimes there is not enough room to show the complete %D (line of) text. In such a situation we can strip of some %D characters by using \type{\doboundtext}. When the text is %D wider than the given width, it's split and the third %D argument is appended. When the text to be checked is packed %D in a command, we'll have to use \type{\expandafter}. %D %D \starttyping %D \doboundtext{a very, probably to long, text}{3cm}{...} %D \stoptyping %D %D When calculating the room needed, we take the width of the %D third argument into account, which leads to a bit more %D complex macro than needed at first sight. \def\dodoboundtext#1% {\setbox0\hbox{#1}% \advance\scratchdimen -\wd0 \ifdim\scratchdimen>\zeropoint\relax#1\fi}% \def\doboundtext#1#2#3% still used? {\hbox {\setbox\scratchbox\hbox{#1}% \scratchdimen#2\relax \ifdim\wd\scratchbox>\scratchdimen \setbox\scratchbox\hbox{#3}% \advance\scratchdimen -\wd\scratchbox \handletokens#1\with\dodoboundtext \fi \box\scratchbox}} %D \macros %D {limitatetext} %D %D A bit more beautiful alternative for the previous command is %D the next one. This command is more robust because we let %D \TEX\ do most of the job. The previous command works better %D on text that cannot be hyphenated. %D %D \starttyping %D \limitatetext {text} {width} {sentinel} %D \limitatetext {text} {-width} {prelude} %D \stoptyping %D %D When no width is given, the whole text comes available. The %D sentinel is optional. This is about the third version. \ifdefined\fakecompoundhyphen\else \let\fakecompoundhyphen\relax \fi \ifdefined\veryraggedright \else \def\veryraggedright{\raggedright} \fi \unexpanded\def\limitatetext {\bgroup % evt \setstrut \forgetall % otherwise indentation and so \let\limitatetext\firstofthreearguments \fakecompoundhyphen % dangerous ! ! ! ! ! ! ! ! ! \dowithnextboxcs\syst_boxes_limitate_text\hbox} \def\syst_boxes_limitate_text#1% #2 {\doifelsenothing{#1}\syst_boxes_limitate_text_nop\syst_boxes_limitate_text_yes{#1}} % {#2} \def\syst_boxes_limitate_text_nop#1#2% {\unhbox\nextbox \egroup} \def\syst_boxes_limitate_text_yes#1#2% {\nopenalties \scratchdimen#1\relax \ifdim\scratchdimen<\zeropoint\relax % we'll take the last line \donefalse \scratchdimen-\scratchdimen \else \donetrue \fi \ifdim\wd\nextbox>\scratchdimen \setbox\scratchbox\hbox{\ifdone\space#2\else#2\space\fi}% \advance\scratchdimen -\wd\scratchbox \setbox0\box\nextbox \setbox\nextbox\vbox {\hsize\scratchdimen \hfuzz\maxdimen \veryraggedright \strut \ifdone \else \parfillskip\zeropoint \rightskip\zeropoint \hskip\zeropoint \s!plus 1\s!fill % \hsize \fi \unhcopy0}% \ifdim\ht\nextbox>\strutht \setbox\nextbox\vbox % if omitted: missing brace reported {\splittopskip\openstrutheight \ifdone \setbox\nextbox\vsplit\nextbox to \strutht \else \doloop {\setbox0\vsplit\nextbox to \strutht \ifdim\ht\nextbox>\strutht \else \exitloop \fi}% \fi \unvbox\nextbox \setbox\nextbox\lastbox \global\setbox1\hbox {\ifdone \unhbox\nextbox\unskip\kern\zeropoint\box\scratchbox \else \box\scratchbox\unhbox\nextbox \fi \unskip}}% \unhbox1 \else \unhbox0 \fi \else \unhbox\nextbox \fi \egroup} %D We can also limit a text with more control: %D %D \startbuffer %D \limitatetext {\input tufte } {2cm,5mm} {\unknown} %D \limitatetext {ton en hans} {2cm,5mm} {\unknown} %D \limitatetext {ton en hans zijn eikels} {2cm,5mm} {\unknown} %D \limitatetext {ton} {2cm,5mm} {\unknown} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D We build this feature on top of the previous macro. % we could move the text argument to the end \let\normallimitatetext\limitatetext \def\speciallimitatetext#1#2#3#4% text left right placeholder {%\dontleavehmode \bgroup \let\speciallimitatetext\firstoffourarguments \setbox0\hbox {\nohyphens \normallimitatetext{#1}{+#2}{}#4% \normallimitatetext{#1}{-#3}{}}% \setbox2\hbox {#1}% \ifdim\wd2<\wd0 #1\else\unhbox0\fi \egroup} \unexpanded\def\limitatetext#1#2#3% \expanded added 2003/01/16 {\expanded{\beforesplitstring#2}\at,\to\leftlimit \expanded{\aftersplitstring #2}\at,\to\rightlimit \ifx\rightlimit\empty \normallimitatetext {#1}\leftlimit {#3}% \else \speciallimitatetext{#1}\leftlimit\rightlimit{#3}% \fi} %D Undocumented bonus (see wiki): %D %D \starttyping %D \limitatefirstline{\input tufte\relax}{10cm}{\unknown} %D \stoptyping \unexpanded\def\limitatefirstline#1#2#3% {\hbox\bgroup\strut \setbox\scratchbox\hbox{\begstrut#1\endstrut}% \ifdim\wd\scratchbox>#2\relax \setbox\scratchbox\hbox{#3}% \hsize#2\relax \advance\hsize-\wd\scratchbox \setbox\scratchbox\vbox{\forgetall\veryraggedright#1}% \setbox\scratchbox\vsplit\scratchbox to \lineheight \vbox {\unvbox\scratchbox \global\setbox\plusone\lastbox \global\setbox\plusone\hbox{\strut\unhbox\plusone}% \hbox % to #2 {\ifx\clip\undefined \box\plusone \else\ifdim\wd\plusone>\hsize \lower\strutdepth\hbox{\clip[\c!width=\hsize,\c!height=\lineheight]{\hbox{\raise\strutdepth\box\plusone}}}% \else \box\plusone \fi\fi \removeunwantedspaces#3}}% \removeunwantedspaces\hss#3}}% \else #1% \fi \egroup} %D \macros %D {processisolatedwords,processisolatedchars} %D %D \startbuffer %D \processisolatedchars{some more words} \ruledhbox \par %D \processisolatedchars{and some $x + y = z$ math} \ruledhbox \par %D \processisolatedchars{and a \hbox{$x + y = z$}} \ruledhbox \par %D \processisolatedwords{some more words} \ruledhbox \par %D \processisolatedwords{and some $x + y = z$ math} \ruledhbox \par %D \processisolatedwords{and a \hbox{$x + y = z$}} \ruledhbox \par %D \stopbuffer %D %D \typebuffer \blank \getbuffer \blank % todo: provide variant with #1 picked up as box \unexpanded\def\processisolatedchars#1#2% {\dontleavehmode \begingroup \setbox\scratchbox\hbox{\settrialtypesetting#2{\savecurrentattributes{pic}}}% \setbox\scratchbox\hbox{\restorecurrentattributes{pic}#1}% \ctxcommand{applytochars(\number\scratchbox,"\strippedcsname#2",true)}% \endgroup} \unexpanded\def\processisolatedwords#1#2% {\dontleavehmode \begingroup \setbox\scratchbox\hbox{\settrialtypesetting#2{\savecurrentattributes{pic}}}% \setbox\scratchbox\hbox{\restorecurrentattributes{pic}#1}% \ctxcommand{applytowords(\number\scratchbox,"\strippedcsname#2",true)}% \endgroup} \unexpanded\def\processwords#1% {\processisolatedwords{#1}\processword} \let\processword\relax %D The better variant: \unexpanded\def\applytocharacters#1% {\dontleavehmode \dowithnextbox{\ctxcommand{applytochars(\number\nextbox,"\strippedcsname#1",true)}}% \hbox} \unexpanded\def\applytowords#1% {\dontleavehmode \dowithnextbox{\ctxcommand{applytowords(\number\nextbox,"\strippedcsname#1",true)}}% \hbox} %D \macros %D {sbox} %D %D This is a rather strange command. It grabs some box content %D and and limits the size to the height and depth of a %D \type{\strut}. The resulting bottom||alligned box can be used %D aside other ones, without disturbing the normal baseline %D distance. %D %D \startbuffer %D \ruledhbox to .5\hsize{\sbox{eerste\par tweede \par derde}} %D \stopbuffer %D %D \typebuffer %D %D Shows up as: %D %D \startexample %D \vskip3\baselineskip %D \getbuffer %D \stopexample %D %D Before displaying the result we added some skip, otherwise %D the first two lines would have ended up in the text. This %D macro can be useful when building complicated menus, headers %D and footers and|/|or margin material. \unexpanded\def\sbox {\vbox\bgroup \dowithnextboxcs\syst_boxes_sbox_finish\vbox} \unexpanded\def\syst_boxes_sbox_finish {\setbox\nextbox\hbox {\strut \dp\nextbox\zeropoint \lower\strutdp\box\nextbox}% \dp\nextbox\strutdp \ht\nextbox\strutht \box\nextbox \egroup} %D A variant on this: \unexpanded\def\inlinedbox {\bgroup \dowithnextbox {\setbox\nextbox\hbox {\lower \dimexpr(\htdp\nextbox-\lineheight)/\plustwo+\strutdp\relax \box\nextbox}% \ht\nextbox\strutht \dp\nextbox\strutdp \box\nextbox \egroup}% \hbox} %D \macros %D {struttedbox} %D %D This boxing macro limits the height and depth to those of %D a strut. \unexpanded\def\struttedbox {\hbox\bgroup \dowithnextboxcs\syst_boxes_struttedbox_finish\hbox} \def\syst_boxes_struttedbox_finish {\dp\nextbox\strutdepth \ht\nextbox\strutheight \box\nextbox \egroup} %D \macros %D {topskippedbox} %D %D This macro compensates the difference between the topskip %D and strutheight. Watch how we preserve the depth when it %D equals strutdepth. \unexpanded\def\topskippedbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_topskippedbox_finish\hbox} \def\syst_boxes_topskippedbox_finish {\edef\m_boxes_tmp{\ifdim\strutdepth=\dp\nextbox\dp\nextbox\the\dp\nextbox\fi}% \lower\topskip\hbox{\raise\strutheight\box\nextbox}% \m_boxes_tmp \egroup} %D \macros %D {centeredbox, centerednextbox} %D %D Here is another strange one. This one offers a sort of overlay %D with positive or negative offsets. This command can be used %D in well defined areas where no offset options are available. %D We first used it when building a button inside the margin %D footer, where the button should have a horizontal offset and %D should be centered with respect to the surrounding box. The %D last of the three examples we show below says: %D %D \starttyping %D \vsize=3cm %D \hsize=3cm %D \ruledvbox to \vsize %D {\centeredbox height .5cm width -1cm %D {\vrule width \hsize height \vsize}}} %D \stoptyping %D %D Here the \type{\ruledvbox} just shows the surrounding box %D and \type{\vrule} is used to show the centered box. %D %D \def\AnExample#1#2% %D {\vsize=3cm %D \hsize=3cm %D \ruledvbox to \vsize %D {\centeredbox height #1 width #2 %D {\color[green]{\vrule width \hsize height \vsize}}}} %D %D \startlinecorrection %D \startcombination[3*1] %D {\AnExample {-1cm} {.5cm}} {} %D {\AnExample {.5cm} {-1cm}} {} %D {\AnExample {-1cm} {-.5cm}} {} %D \stopcombination %D \stoplinecorrection %D %D This command takes two optional arguments: \type{width} and %D \type{height}. Observing readers can see that we use \TEX's %D own scanner for grabbing these arguments: \type{#1#} reads %D everyting till the next brace and passes it to both rules. %D The setting of the box dimensions at the end is needed for %D special cases. The dimensions of the surrounding box are kept %D intact. This commands handles positive and negative %D dimensions (which is why we need two boxes with rules). \unexpanded\def\centeredbox#1#% height +/-dimen width +/-dimen {\bgroup \setbox0\vbox to \vsize \bgroup \dontcomplain \forgetall \setbox0\hbox{\vrule\s!width \zeropoint#1}% \setbox2\vbox{\hrule\s!height\zeropoint#1}% \advance\vsize \ht2 \advance\hsize \wd0 \vbox to \vsize \bgroup \vskip-\ht2 \vss \hbox to \hsize \bgroup \dowithnextbox {\hskip-\wd0 \hss \box\nextbox \hss \egroup \vss \egroup \egroup \wd0\hsize \ht0\vsize \box0 \egroup} \hbox} %D For those who don't want to deal with \type {\hsize} %D and \type {\vsize}, we have: %D %D \starttyping %D \centerednextbox width 2bp height 2bp %D {\framed[width=100bp,height=100bp]{}} %D \stoptyping %D %D Do you see what we call this one \type {next}? \unexpanded\def\centerednextbox#1#% {\bgroup \dowithnextbox {\hsize\wd\nextbox \vsize\ht\nextbox \centeredbox#1{\box\nextbox}% \egroup} \hbox} %D \macros %D {centerbox} %D %D Centering on the available space is done by: %D %D \starttyping %D \centerbox {content} %D \stoptyping %D %D When omitted, the current \type {\hsize} and \type %D {\vsize} are used. Local dimensions are supported. \unexpanded\def\centerbox#1#% optional height +/-dimen width +/-dimen {\bgroup \dowithnextbox {\setlocalhsize \setbox\scratchbox\hbox{\vrule\s!width \zeropoint#1}% \ifzeropt\wd\scratchbox\else\hsize\wd\scratchbox\fi \setbox\scratchbox\vbox{\hrule\s!height\zeropoint#1}% \ifzeropt\ht\scratchbox\else\vsize\ht\scratchbox\fi \vbox to \vsize{\vss\hbox to \hsize{\hss\box\nextbox\hss}\vss}% \egroup}% \hbox} %D \macros %D {setrigidcolumnhsize,rigidcolumnbalance,rigidcolumnlines} %D %D These macros are copied from the \TEX book, page~397, and %D extended by a macro that sets the \type{\hsize}. %D %D \starttyping %D \setrigidcolumnhsize {total width} {distance} {n} %D \rigidcolumnbalance {box} %D \stoptyping %D %D Both these macros are for instance used in typesetting %D footnotes. %D %D Men kan het proces van breken enigzins beinvloeden met de %D volgende twee switches: \newif\ifalignrigidcolumns \newif\ifstretchrigidcolumns \newif\iftightrigidcolumns % if true: just a vbox, no depth/noflines/gridsnap corrrections %D De eerste switch bepaald het uitlijnen, de tweede rekt de %D individuele kolommen op naar \type{\vsize}. \unexpanded\def\setrigidcolumnhsize#1#2#3% todo: \dimexpr {\xdef\savedrigidhsize{\the\hsize}% \hsize#1\relax \global\chardef\rigidcolumns#3\relax \scratchdimen -#2\relax \multiply\scratchdimen #3\relax \advance\scratchdimen #2\relax \advance\hsize \scratchdimen \divide\hsize #3\relax} % == % % \def\setrigidcolumnhsize#1#2#3% % {\xdef\savedrigidhsize{\the\hsize}% % \global\chardef\rigidcolumns#3\relax % \hsize=\dimexpr(#1-\numexpr#3-1\relax\dimexpr#2\relax)/#3\relax} \newbox\rigidcolumnbox \let\rigidcolumnlines\!!zerocount \unexpanded\def\rigidcolumnbalance#1% {\ifnum\rigidcolumns=1 % tzt ook h/d correctie \ifinner\ifhmode\box\else\unvbox\fi\else\unvbox\fi#1\relax \else \vbox {\forgetall \nopenalties \dontcomplain \setbox\rigidcolumnbox\vbox {\line{}\goodbreak\unvbox#1\removebottomthings}% \splittopskip\openstrutheight \setbox\scratchbox\vsplit\rigidcolumnbox to \zeropoint \ifcase\rigidcolumnlines\relax % \iffalse % % maybe some day an option % \scratchskip\ht\rigidcolumnbox % \advance\scratchskip\dp\rigidcolumnbox % \getnoflines\scratchskip % \ifodd\noflines % \advance\noflines\plusone % \fi % \divide\noflines\rigidcolumns %\else \scratchdimen\ht\rigidcolumnbox \divide\scratchdimen \rigidcolumns \getnoflines\scratchdimen %\fi \else \noflines\rigidcolumnlines % to be sure \fi \scratchdimen\noflines\lineheight % new: we now loop so that we don't loose content % since in practice we also use this macro for % funny lineheights and border cases \setbox0=\box\rigidcolumnbox \doloop {\setbox\rigidcolumnbox=\copy0 \setbox\scratchbox\hbox to \savedrigidhsize {\dorecurse\rigidcolumns {\setbox\scratchbox\vsplit\rigidcolumnbox to \scratchdimen \dp\scratchbox\openstrutdepth \setbox\scratchbox\normalvtop \ifalignrigidcolumns to \ifstretchrigidcolumns\vsize\else\scratchdimen\fi \fi {\unvbox\scratchbox}% \wd\scratchbox\hsize \box\scratchbox \hfill}% \hfillneg}% \ifvoid\rigidcolumnbox\exitloop\else\advance\scratchdimen\lineheight\fi}% \iftightrigidcolumns \setbox\scratchbox\hbox{\raise\dp\scratchbox\box\scratchbox}% \else \advance\scratchdimen -\openstrutdepth \setbox\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}% \dp\scratchbox\openstrutdepth \ht\scratchbox\scratchdimen \fi \box\scratchbox}% \fi} %D \macros %D {startvboxtohbox,stopvboxtohbox,convertvboxtohbox} %D %D Here is another of Knuth's dirty tricks, as presented on %D pages 398 and 399 of the \TEX book. These macros can be used %D like: %D %D \starttyping %D \vbox %D \bgroup %D \startvboxtohbox ... \stopvboxtohbox %D \startvboxtohbox ... \stopvboxtohbox %D \startvboxtohbox ... \stopvboxtohbox %D \egroup %D %D \vbox %D \bgroup %D \convertvboxtohbox %D \egroup %D \stoptyping %D %D These macros are used in reformatting footnotes, so they do %D what they're meant for. \unexpanded\def\setvboxtohbox {\bgroup \ifdim\baselineskip<16pt \relax \scratchdimen\baselineskip \multiply\scratchdimen 1024 \else \message{cropping \baselineskip to 16pt}% \scratchdimen\maxdimen \fi \divide\scratchdimen \hsize \multiply\scratchdimen 64 \xdef\vboxtohboxfactor{\withoutpt\the\scratchdimen}% \egroup} \unexpanded\def\startvboxtohbox {\bgroup \setvboxtohbox \setbox\scratchbox\hbox\bgroup} \unexpanded\def\stopvboxtohbox {\egroup \dp\scratchbox\zeropoint \ht\scratchbox\vboxtohboxfactor\wd\scratchbox \box\scratchbox \egroup} \unexpanded\def\convertvboxtohbox {\setvboxtohbox \makehboxofhboxes \setbox0\hbox{\unhbox0 \removehboxes}% \noindent\unhbox0\par} \unexpanded\def\makehboxofhboxes {\setbox0\emptyhbox \loop % \doloop { .. \exitloop .. } \setbox2\lastbox \ifhbox2 \setbox0\hbox{\box2\unhbox0}% \repeat} \unexpanded\def\removehboxes {\setbox0\lastbox \ifhbox0 {\removehboxes}\unhbox0 \fi} %D \macros %D {unhhbox} %D %D The next macro is used in typesetting inline headings. %D Let's first look at the macro and then show an example. \newbox \unhhedbox \newbox \hhbox \newdimen \lasthhboxwidth \newskip \hhboxindent \unexpanded\def\unhhbox#1\with#2% {\bgroup \nopenalties \dontcomplain \forgetall \setbox\unhhedbox\vbox{\hskip\hhboxindent\strut\unhbox#1}% => \hsize \doloop {\setbox\hhbox\vsplit\unhhedbox to \lineheight \ifvoid\unhhedbox \setbox\hhbox\hbox{\strut\hboxofvbox\hhbox}% \fi \ht\hhbox\strutht \dp\hhbox\strutdp \ifzeropt\hhboxindent\else % \ifdim\hhboxindent=\zeropoint\else \setbox\hhbox\hbox{\kern-\hhboxindent\box\hhbox}% \hhboxindent\zeropoint \fi \global\lasthhboxwidth\wd\hhbox #2\relax \ifvoid\unhhedbox \exitloop \else \hskip\zeropoint \s!plus \zeropoint \fi}% \egroup} \def\dohboxofvbox {\setbox0\vbox{\unvbox\scratchcounter\global\setbox1\lastbox}% \unhbox1 \egroup} \unexpanded\def\hboxofvbox {\bgroup \afterassignment\dohboxofvbox \scratchcounter=} %D This macro can be used to break a paragraph apart and treat %D each line seperately, for instance, making it clickable. The %D main complication is that we want to be able to continue the %D paragraph, something that's needed in the in line section %D headers. %D %D \startbuffer %D \setbox0=\hbox{\input tufte \relax} %D \setbox2=\hbox{\input knuth \relax} %D \unhhbox0\with{\ruledhbox{\box\hhbox}} %D \hskip1em plus 1em minus 1em %D \hhboxindent=\lasthhboxwidth %D \advance\hhboxindent by \lastskip %D \unhhbox2\with{\ruledhbox{\box\hhbox}} %D \stopbuffer %D %D \getbuffer %D %D This piece of text was typeset by saying: %D %D \typebuffer %D %D Not that nice a definition, but effective. Note the stretch %D we've build in the line that connects the two paragraphs. %D \macros %D {doifcontent} %D %D When processing depends on the availability of content, one %D can give the next macro a try. %D %D \starttyping %D \doifcontent{pre content}{post content}{no content}\somebox %D \stoptyping %D %D Where \type{\somebox} is either a \type{\hbox} or %D \type{\vbox}. If the dimension of this box suggest some %D content, the resulting box is unboxed and surrounded by the %D first two arguments, else the third arguments is executed. \unexpanded\def\doifcontent#1#2#3% {\dowithnextbox {\ifhbox\nextbox \ifdim\wd\nextbox>\zeropoint #1\unhbox\nextbox#2\relax \else #3\relax \fi \else \ifdim\ht\nextbox>\zeropoint #1\unvbox\nextbox#2\relax \else #3\relax \fi \fi}} %D So when we say: %D %D \startbuffer %D \doifcontent{[}{]}{}\hbox{content sensitive typesetting} %D %D \doifcontent{}{\page}{}\vbox{content sensitive typesetting} %D %D \doifcontent{}{}{\message{Didn't you forget something?}}\hbox{} %D \stopbuffer %D %D \typebuffer %D %D We get: %D %D \getbuffer %D %D Where the last call of course does not show up in this %D document, but definitely generates a confusing message. %D \macros %D {processboxes} %D %D The next macro gobble boxes and is for instance used for %D overlays. First we show the general handler. % we cannot use \futurelet here as we want to skip spaces between % boxes (see startoverlay for an example usage) % \newbox\processbox % public : this is the one where \nextbox's end up in % % \unexpanded\def\processboxes#1% % {\bgroup % \def\syst_boxes_process_indeed{#1}% #1 can be redefined halfway % \setbox\processbox\emptybox % \afterassignment\syst_boxes_process % \let\nexttoken} % % \def\syst_boxes_process % {\ifx\nexttoken\bgroup % \expandafter\syst_boxes_process_yes % \else % \expandafter\syst_boxes_process_nop % \fi} % % \def\syst_boxes_process_yes % {\dowithnextboxcs\syst_boxes_process_content\hbox\bgroup} % % \def\syst_boxes_process_content % {\removeunwantedspaces % \syst_boxes_process_indeed % takes \nextbox makes \processbox % \afterassignment\syst_boxes_process % \let\nexttoken} % % \unexpanded\def\syst_boxes_process_nop % {\removeunwantedspaces % \box\processbox % \nexttoken % messy as we are still in the group % \egroup} \newbox\processbox % public : this is the one where \nextbox's end up in \unexpanded\def\processboxes#1% {\bgroup \def\syst_boxes_process_indeed{#1}% #1 can be redefined halfway \setbox\processbox\emptybox \doifnextbgroupelse\syst_boxes_process_yes\syst_boxes_process_nop} \def\syst_boxes_process_yes {\dowithnextboxcs\syst_boxes_process_content\hbox} \def\syst_boxes_process_content {\removeunwantedspaces \syst_boxes_process_indeed % takes \nextbox makes \processbox \doifnextbgroupelse\syst_boxes_process_yes\syst_boxes_process_nop} \unexpanded\def\syst_boxes_process_nop {\removeunwantedspaces \box\processbox \egroup} %D \macros %D {startoverlay} %D %D We can overlay boxes by saying: %D %D \startbuffer %D \startoverlay %D {\framed{hans}} %D {\framed[width=3cm]{ton}} %D {\framed[height=2cm]{oeps}} %D \stopoverlay %D \stopbuffer %D %D \typebuffer %D %D shows up as: %D %D \leavevmode\getbuffer \def\syst_boxes_overlay_process {%\removeunwantedspaces % already done \scratchdepth\dp\ifdim\dp\nextbox>\dp\processbox\nextbox\else\processbox\fi \ifdim\ht\nextbox>\ht\processbox \setbox\processbox\vbox to \ht\nextbox {\dp\processbox\zeropoint\vss\box\processbox\vss}% \else \setbox\nextbox \vbox to \ht\processbox{\dp\nextbox \zeropoint\vss\box\nextbox \vss}% \fi \dp\nextbox \scratchdepth \dp\processbox\scratchdepth \scratchwidth\wd\ifdim\wd\nextbox>\wd\processbox\nextbox\else\processbox\fi \setbox\processbox\hbox to \scratchwidth {\hbox to \scratchwidth{\hss\box\processbox\hss}% \kern-\scratchwidth \hbox to \scratchwidth{\hss\box\nextbox \hss}}} \unexpanded\def\startoverlay {\bgroup \let\stopoverlay\egroup \processboxes\syst_boxes_overlay_process} \let\stopoverlay\relax %D \macros %D {fakebox} %D %D The next macro is a rather silly one, but saves space. %D %D \starttyping %D \hbox{\fakebox0} %D \stoptyping %D %D returns an empty box with the dimensions of the box %D specified, here being zero. \unexpanded\def\fakebox {\bgroup \afterassignment\syst_boxes_fakebox_finish\scratchcounter} \def\syst_boxes_fakebox_finish {\setbox\scratchbox\ifhbox\scratchcounter\emptyhbox\else\emptyvbox\fi \wd\scratchbox\wd\scratchcounter \ht\scratchbox\ht\scratchcounter \dp\scratchbox\dp\scratchcounter \box\scratchbox \egroup} %D \macros %D {lbox,rbox,cbox,tbox,bbox} %D %D Here are some convenient alternative box types: %D %D \starttyping %D \lbox{text ...} %D \cbox{text ...} %D \rbox{text ...} %D \stoptyping %D %D Are similar to \type {\vbox}, which means that they also %D accept something like \type{to 3cm}, but align to the left, %D middle and right. These box types can be used to typeset %D paragraphs. \def\syst_boxes_lrc_process#1{\bgroup\forgetall\let\\\endgraf#1\let\next} \unexpanded\def\lbox#1#{\vbox#1\syst_boxes_lrc_process\raggedleft } \unexpanded\def\cbox#1#{\vbox#1\syst_boxes_lrc_process\raggedcenter} \unexpanded\def\rbox#1#{\vbox#1\syst_boxes_lrc_process\raggedright } \unexpanded\def\ltop#1#{\normalvtop#1\syst_boxes_lrc_process\raggedleft } \unexpanded\def\ctop#1#{\normalvtop#1\syst_boxes_lrc_process\raggedcenter} \unexpanded\def\rtop#1#{\normalvtop#1\syst_boxes_lrc_process\raggedright } %D The alternatives \type {\tbox} and \type {\bbox} can be used %D to properly align boxes, like in: %D %D \setupexternalfigures[directory={../sample}] %D \startbuffer %D \starttable[|||] %D \HL %D \VL \tbox{\externalfigure[cow][height=3cm,frame=on]} \VL top aligned \VL\SR %D \HL %D \VL \bbox{\externalfigure[cow][height=3cm,frame=on]} \VL bottom aligned \VL\SR %D \HL %D \stoptable %D \stopbuffer %D %D \typebuffer %D %D The positioning depends on the strut settings: %D %D \getbuffer \unexpanded\def\tbox{\hbox\bgroup\dowithnextboxcs\syst_boxes_tbox_finish\hbox} \unexpanded\def\bbox{\hbox\bgroup\dowithnextboxcs\syst_boxes_bbox_finish\hbox} \def\syst_boxes_tbox_finish {\scratchdepth\dimexpr\ht\nextbox+\dp\nextbox-\ht\strutbox\relax \ht\nextbox\ht\strutbox \dp\nextbox\scratchdepth \setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}% \ht\nextbox\ht\strutbox \dp\nextbox\scratchdepth \box\nextbox \egroup} \def\syst_boxes_bbox_finish {\scratchheight\dimexpr\ht\nextbox+\dp\nextbox-\dp\strutbox\relax \dp\nextbox\dp\strutbox \ht\nextbox\scratchheight \setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}% \dp\nextbox\dp\strutbox \ht\nextbox\scratchheight \box\nextbox \egroup} %D \macros %D {lhbox,mhbox,rhbox} %D %D A few more boxes. \def\dodolhbox{\hbox to \hsize{\box\nextbox\hss }} \def\dodomhbox{\hbox to \hsize{\hss\box\nextbox\hss}} \def\dodorhbox{\hbox to \hsize{\hss\box\nextbox }} \unexpanded\def\lhbox{\dowithnextboxcs\dodolhbox\hbox} \unexpanded\def\mhbox{\dowithnextboxcs\dodomhbox\hbox} \unexpanded\def\rhbox{\dowithnextboxcs\dodorhbox\hbox} \let\lefthbox \lhbox \let\midhbox \mhbox \let\righthbox\rhbox %D \macros %D {boxofsize} %D %D Sometimes we need to construct a box with a height or %D width made up of several dimensions. Instead of cumbersome %D additions, we can use: %D %D \starttyping %D \boxofsize \vbox 10cm 3cm -5cm {the text to be typeset} %D \stoptyping %D %D This example demonstrates that one can use positive and %D negative values. Dimension registers are also accepted. \newdimen\sizeofbox \unexpanded\def\boxofsize#1% {\bgroup \sizeofbox\zeropoint \scratchdimen\zeropoint \def\docommand {\advance\sizeofbox\scratchdimen \futurelet\next\dodocommand}% \def\dodocommand {\ifx\next\bgroup \expanded{\egroup#1 to \the\sizeofbox}% \else \@EA\afterassignment\@EA\docommand\@EA\scratchdimen \fi}% \docommand} %D Some new, still undocumented features: % limitatetext -> beter {text} als laatste !! % % \limitvbox % \limithbox \unexpanded\def\limitatelines#1#2% size sentinel {\dowithnextbox {\dimen0=#1\hsize \ifdim\wd\nextbox>\dimen0 \setbox\nextbox\hbox {\advance\dimen0 -.1\hsize \limitatetext{\unhbox\nextbox}{\dimen0}{\nobreak#2}}% \fi \unhbox\nextbox} \hbox} \unexpanded\def\fittoptobaselinegrid % weg hier {\dowithnextbox {\bgroup \par \dimen0\ht\nextbox \ht\nextbox\strutht \dp\nextbox\strutdp \hbox{\box\nextbox} \prevdepth\strutdp \doloop {\advance\dimen0 -\lineheight \ifdim\dimen0<\zeropoint \exitloop \else \nobreak \hbox{\strut} \fi} \egroup} \vbox} %D Some more undocumented macros (used in m-chart). \newif\iftraceboxplacement % \traceboxplacementtrue \newbox\fakedboxcursor \setbox\fakedboxcursor\hbox {\vrule\s!width\zeropoint\s!height\zeropoint\s!depth\zeropoint} \unexpanded\def\boxcursor % overloaded in core-vis {\iftraceboxplacement \bgroup \scratchdimen2\onepoint \setbox\scratchbox\hbox to \zeropoint {\hss \vrule \s!width \scratchdimen \s!height\scratchdimen \s!depth \scratchdimen \hss}% \smashedbox\scratchbox \egroup \else \copy\fakedboxcursor \fi} \unexpanded\def\placedbox {\iftraceboxplacement\ruledhbox\else\hbox\fi} \newdimen\boxoffset \newdimen\boxhdisplacement \newdimen\boxvdisplacement \unexpanded\def\rightbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_rightbox_finish \placedbox} \unexpanded\def\leftbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_leftbox_finish \placedbox} \unexpanded\def\topbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_topbox_finish \placedbox} \unexpanded\def\bottombox {\hbox\bgroup\dowithnextboxcs\syst_boxes_bottombox_finish \placedbox} \unexpanded\def\lefttopbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_lefttopbox_finish \placedbox} \unexpanded\def\righttopbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_righttopbox_finish \placedbox} \unexpanded\def\leftbottombox {\hbox\bgroup\dowithnextboxcs\syst_boxes_leftbottombox_finish \placedbox} \unexpanded\def\rightbottombox{\hbox\bgroup\dowithnextboxcs\syst_boxes_rightbottombox_finish\placedbox} \let\topleftbox \lefttopbox \let\toprightbox \righttopbox \let\bottomleftbox \leftbottombox \let\bottomrightbox\rightbottombox \def\syst_boxes_rightbox_finish {\global\boxhdisplacement\boxoffset \global\boxvdisplacement.5\ht\nextbox \global\advance\boxvdisplacement-.5\dp\nextbox \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_leftbox_finish {\global\boxhdisplacement-\wd\nextbox \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement.5\ht\nextbox \global\advance\boxvdisplacement-.5\dp\nextbox \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_topbox_finish {\global\boxhdisplacement-.5\wd\nextbox \global\boxvdisplacement-\dp\nextbox \global\advance\boxvdisplacement-\boxoffset \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_bottombox_finish {\global\boxhdisplacement-.5\wd\nextbox \global\boxvdisplacement\ht\nextbox \global\advance\boxvdisplacement\boxoffset \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_lefttopbox_finish {\global\boxhdisplacement-\wd\nextbox \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement-\dp\nextbox \global\advance\boxvdisplacement-\boxoffset \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_righttopbox_finish {\global\boxhdisplacement\boxoffset \global\boxvdisplacement-\dp\nextbox \global\advance\boxvdisplacement-\boxoffset \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_leftbottombox_finish {\global\boxhdisplacement-\wd\nextbox \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement\ht\nextbox \global\advance\boxvdisplacement\boxoffset \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_rightbottombox_finish {\global\boxhdisplacement\boxoffset \global\boxvdisplacement\ht\nextbox \global\advance\boxvdisplacement\boxoffset \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox \egroup} \unexpanded\def\middlebox {\hbox\bgroup\dowithnextboxcs\syst_boxes_middlebox_finish \placedbox} \unexpanded\def\baselinemiddlebox{\hbox\bgroup\dowithnextboxcs\syst_boxes_baselinemiddlebox_finish\placedbox} \unexpanded\def\baselineleftbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_baselineleftbox_finish \placedbox} \unexpanded\def\baselinerightbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_baselinerightbox_finish \placedbox} \def\syst_boxes_middlebox_finish {\global\boxhdisplacement-.5\wd\nextbox \global\boxvdisplacement.5\ht\nextbox \global\advance\boxvdisplacement-.5\dp\nextbox \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_baselinemiddlebox_finish {\global\boxhdisplacement-.5\wd\nextbox \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_baselineleftbox_finish {\global\boxhdisplacement-\wd\nextbox \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox \egroup} \def\syst_boxes_baselinerightbox_finish {\global\boxhdisplacement\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox \egroup} %D \macros %D {obox} %D %D Experimental, not yet frozen: \unexpanded\def\lrtbbox#1#2#3#4% l r t b {\bgroup \dowithnextboxcontent {\advance\hsize-#1\advance\hsize-#2\relax \advance\vsize-#3\advance\vsize-#4\relax} {\forgetall\vbox to \vsize{\vskip#3\hbox to \hsize{\hskip#1\box\nextbox\hss}\vss}\egroup} \vbox} %D \macros %D {toplinebox} %D %D See core-tbl.tex for an example of its usage: \unexpanded\def\toplinebox {\dowithnextboxcs\syst_boxes_toplinebox_finish\tbox} \def\syst_boxes_toplinebox_finish {\ifdim\dp\nextbox>\strutdepth \scratchdimen\dp\nextbox \advance\scratchdimen-\strutdepth \getnoflines\scratchdimen \struttedbox{\box\nextbox}% \dorecurse\noflines\verticalstrut \else \box\nextbox \fi} %D \macros %D {initializeboxstack,savebox,foundbox} %D %D At the cost of some memory, but saving box registers, we %D have implemented a box repository. %D %D \starttyping %D \initializeboxstack{one} %D %D \savebox{one}{a}{test a} %D \savebox{one}{p}{test p} %D \savebox{one}{q}{test q} %D %D \hbox{a:\foundbox{one}{a}} \par %D \hbox{q:\foundbox{one}{q}} \par %D \hbox{p:\foundbox{one}{p}} \par %D \hbox{x:\foundbox{one}{x}} \par %D \hbox{y:\foundbox{two}{a}} \par %D \stoptyping \def\@@stackbox{@box@} \def\@@stacklst{@xob@} \unexpanded\def\setstackbox#1#2% {\ifcsname\@@stackbox:#1:#2\endcsname\else \expandafter\newbox\csname\@@stackbox:#1:#2\endcsname \fi \global\setbox\csname\@@stackbox:#1:#2\endcsname\vbox} \unexpanded\def\initializeboxstack#1% {\def\docommand##1{\setstackbox{#1}{##1}{}}% \ifcsname\@@stacklst#1\endcsname \processcommacommand[\getvalue{\@@stacklst#1}]\docommand \fi \letgvalueempty{\@@stacklst#1}} \unexpanded\def\savebox#1#2% stack name {% beware, \setxvalue defines the cs beforehand so we cannot use the % test inside the { } \ifcsname\@@stacklst#1\endcsname \setxvalue{\@@stacklst#1}{\csname\@@stacklst#1\endcsname,#2}% \else \setxvalue{\@@stacklst#1}{#2}% \fi \setstackbox{#1}{#2}} \unexpanded\def\foundbox#1#2% {\vbox {\ifcsname\@@stackbox:#1:#2\endcsname \copy\csname\@@stackbox:#1:#2\endcsname \fi}} \unexpanded\def\doifboxelse#1#2#3#4% {\ifcsname\@@stackbox:#1:#2\endcsname \ifvoid\csname\@@stackbox:#1:#2\endcsname#4\else#3\fi \else #4% \fi} %D \macros %D {removedepth, obeydepth} %D %D While \type {\removedepth} removes the preceding depth, %D \type {\obeydepth} makes sure we have depth. Both macros %D leave the \type {\prevdepth} untouched. \unexpanded\def\removedepth {\ifvmode \ifdim\prevdepth>\zeropoint \kern-\prevdepth \fi \fi} \unexpanded\def\obeydepth {\par \ifvmode \ifdim\prevdepth>\zeropoint \kern-\prevdepth \fi \kern\strutdp \fi} \unexpanded\def\undepthed {\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\hbox} %D \macros %D {removebottomthings, removelastskip} %D %D A funny (but rather stupid) one, plus a redefinition. \unexpanded\def\removebottomthings {\dorecurse5{\unskip\unkern\unpenalty}} \unexpanded\def\removelastskip % \ifvmode the plain tex one \fi {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} %D \macros %D {makestrutofbox} %D %D This macro sets the dimensions of a box to those of a strut. \def\domakestrutofbox {\ht\c_boxes_register\strutht \dp\c_boxes_register\strutdp \wd\c_boxes_register\zeropoint} \unexpanded\def\makestrutofbox % not used {\afterassignment\domakestrutofbox\c_boxes_register} %D \macros %D {raisebox,lowerbox} %D %D Some more box stuff, related to positioning (under %D construction). Nice stuff for a tips and tricks maps %D article. %D %D \starttyping %D \raisebox{100pt}\hbox{test} %D \hsmash{\raisebox{100pt}\hbox{test}} %D \stoptyping \unexpanded\def\raisebox#1{\bgroup\afterassignment\syst_boxes_raise_indeed\scratchdimen#1} % so both 10pt and {10pt} is accepted \unexpanded\def\lowerbox#1{\bgroup\afterassignment\syst_boxes_lower_indeed\scratchdimen#1} % so both 10pt and {10pt} is accepted \def\syst_boxes_raise_indeed{\dowithnextboxcs\syst_boxes_raise_finish} \def\syst_boxes_lower_indeed{\dowithnextboxcs\syst_boxes_lower_finish} \def\syst_boxes_raise_finish {\setbox\nextbox\hbox{\raise\scratchdimen\box\nextbox}% \ht\nextbox\strutht \dp\nextbox\strutdp \box\nextbox \egroup} \def\syst_boxes_lower_finish {\setbox\nextbox\hbox{\lower\scratchdimen\box\nextbox}% \ht\nextbox\strutht \dp\nextbox\strutdp \box\nextbox \egroup} % vcenter in text, we kunnen vcenter overloaden \unexpanded\def\halfwaybox {\hbox\bgroup \dowithnextboxcs\syst_boxes_halfwaybox_finish\hbox} \def\syst_boxes_halfwaybox_finish {\dp\nextbox\zeropoint \lower.5\ht\nextbox\box\nextbox \egroup} \unexpanded\def\depthonlybox {\vtop\bgroup \dowithnextboxcs\syst_boxes_depthonlybox_finish\vbox} \def\syst_boxes_depthonlybox_finish {\hsize\wd\nextbox \kern\zeropoint\box\nextbox \egroup} %D New: \def\setdimentoatleast#1#2{\ifdim#1>\zeropoint\else#1=#2\fi} \def\setdimentoatmost #1#2{\ifdim#1>#2\relax \else#1=#2\fi} %D And even rawer: \let\naturalhbox \hbox \let\naturalvbox \vbox \let\naturalvtop \normalvtop \let\naturalvcenter\normalvtop \ifdefined\textdir \unexpanded\def\naturalhbox{\hbox dir TLT} \unexpanded\def\naturalvbox{\vbox dir TLT} %\unexpanded\def\naturalvtop{\normalvtop dir TLT} \fi %D \macros %D {vcenter} %D %D Also new: tex mode \type {\vcenter}. \unexpanded\def\vcenter {\vbox\bgroup \dowithnextboxcs\syst_boxes_vcenter_finish\vbox} \def\syst_boxes_vcenter_finish {\hbox{$\normalvcenter{\box\nextbox}$}% \egroup} % could be \everymathematics \prependtoks \let\vcenter\normalvcenter \to \everymath \prependtoks \let\vcenter\normalvcenter \to \everydisplay % \appendtoks \let\vcenter\normalvcenter \to \everymathematics %D \macros %D {frozenhbox} %D %D A not so well unhboxable box can be made with: \unexpanded\def\frozenhbox {\hbox\bgroup \dowithnextboxcs\syst_boxes_frozenhbox_finish\hbox} \def\syst_boxes_frozenhbox_finish {\hbox{\hbox{\box\nextbox}}% \egroup} %D \macros %D {setboxllx,setboxlly,gsetboxllx,gsetboxlly,getboxllx,getboxlly} %D %D A prelude to an extended \TEX: \unexpanded\def\setboxllx #1#2{\expandafter\edef\csname boxes_x_\number#1\endcsname{\the\dimexpr#2\relax}} \unexpanded\def\setboxlly #1#2{\expandafter\edef\csname boxes_y_\number#1\endcsname{\the\dimexpr#2\relax}} \unexpanded\def\gsetboxllx#1#2{\expandafter\xdef\csname boxes_x_\number#1\endcsname{\the\dimexpr#2\relax}} \unexpanded\def\gsetboxlly#1#2{\expandafter\xdef\csname boxes_y_\number#1\endcsname{\the\dimexpr#2\relax}} \def\getboxllx#1{\ifcsname boxes_x_\number#1\endcsname\csname boxes_x_\number#1\endcsname\else\zeropoint\fi} \def\getboxlly#1{\ifcsname boxes_y_\number#1\endcsname\csname boxes_y_\number#1\endcsname\else\zeropoint\fi} \def\directgetboxllx#1{\csname boxes_x_\number#1\endcsname} % use when sure existence \def\directgetboxlly#1{\csname boxes_y_\number#1\endcsname} % use when sure existence %D \macros %D {shownextbox} %D %D Handy for tracing %D %D \starttyping %D \shownextbox\vbox{test} %D \shownextbox\vbox{test\endgraf} %D \shownextbox\vbox{test\endgraf\strut\endgraf} %D \shownextbox\vbox{test\endgraf\thinrule} %D \shownextbox\vbox{\setupwhitespace[big]test\endgraf\thinrule} %D \stoptyping \unexpanded\def\shownextbox % seldom used {\dowithnextbox {\bgroup \showboxbreadth\maxdimen \showboxdepth \maxdimen \scratchcounter\interactionmode \batchmode \showbox\nextbox \box\nextbox \interactionmode\scratchcounter \egroup}} \unexpanded\def\spreadhbox#1% rebuilds \hbox{} {\bgroup \ifhbox#1\relax \setbox2\emptybox \unhbox#1% \doloop {\unpenalty\unskip\unpenalty\unskip\unpenalty\unskip \setbox0\lastbox \ifvoid0 \exitloop \else \setbox2\hbox {\ifhbox0 \spreadhbox0\else\box0\fi \ifvoid2 \else\hss\unhbox2\fi}% \fi}% \ifvoid2\else\unhbox2\fi \else \box#1% \fi \egroup} % makes sense but too much log for overfull boxes: % % \showboxbreadth\maxdimen % \showboxdepth \maxdimen %D Moved from cont-new: %D %D \starttyping %D \minimalhbox 100pt {test} %D \stoptyping \unexpanded\def\minimalhbox#1#% {\dowithnextbox {\bgroup \setbox\scratchbox\hbox#1{\hss}% \ifdim\wd\nextbox<\wd\scratchbox\wd\nextbox\wd\scratchbox\fi \box\nextbox \egroup} \hbox} \protect \endinput % a bit of test code: \hbox \bgroup \ruledvbox {\hbox{\strut gans}} \ruledvbox to \lineheight {\hbox{\strut gans}} \ruledvbox to \lineheight {\hbox {gans}} \ruledvbox to \strutheight{\hbox {gans}} \ruledvbox to \strutheight{\hbox{\strut gans}} \ruledvbox to \strutheight{\vss\hbox{gans}} \egroup % to be considered % \startluacode % % local spacer = lpeg.patterns.spacer % % function commands.withwords(command,str) % if str then % command = command or "ruledhbox" % local done = false % local function apply(s) % if done then % context.space() % done = true % else % context.dontleavehmode() % end % context[command](s) % end % lpeg.match(lpeg.splitter(spacer,apply),str) % end % % end % % \stopluacode % % \unprotect % % \unexpanded\def\withwordsinstring#1#2% command str % {\ctxcommand{withwords(\!!bs#1\!!es,\!!bs#2\!!es)}} % % \unexpanded\def\withwordsinfile#1#2% command name % {\ctxcommand{withwords(\!!bs#1\!!es,io.loaddata(resolvers.findfile("#2")))}} % % \protect % % \starttext % % \defineframed[colored][foregroundcolor=red,foregroundstyle=\bfc\underbar,location=low] % % \withwordsinstring{colored}{bla bla} % \withwordsinfile{colored}{ward.tex} % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-swd.mkii0000644000175000017500000001061511754241457024327 0ustar norbertnorbert%D \module %D [ file=strc-swd, %D version=2007.08.14, %D title=\CONTEXT\ Structure Macros, %D subtitle=Section Worlds, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a prelude to a rewrite of sectioning. % options : before after setups page text number label bookmark % dodo : listtext % % \startsectionworld[chapter][text={Test}] % \stopsectionworld \writestatus{loading}{ConTeXt Structure Macros / Sectionworlds} \unprotect \ifx\pushvalue\undefined \def\pushvalue#1{\expandafter\pushmacro\csname#1\endcsname} \def\popvalue #1{\expandafter\popmacro \csname#1\endcsname} \fi % brrr \def\csnameexpanded#1#2% {\@EA\@EA\@EA\@EA\@EA\@EA\@EA#1\@EA\@EA\@EA\@EA\@EA\@EA\@EA#2\@EA\@EA\@EA\@EA\@EA\@EA\@EA} \def\csnameexpandedoneargument#1#2% {\csnameexpanded\def\csexpandeda{#2}% \@EA#1\@EA{\csexpandeda}} \def\csnameexpandedtwoarguments#1#2#3% {\csnameexpanded\def\csexpandeda{#2}% \csnameexpanded\def\csexpandedb{#3}% \@EA\@EA\@EA#1\@EA\@EA\@EA{\@EA\csexpandeda\@EA}\@EA{\csexpandedb}} \def\csnameexpandedthreearguments#1#2#3#4% {\csnameexpanded\def\csexpandeda{#2}% \csnameexpanded\def\csexpandedb{#3}% \csnameexpanded\def\csexpandedc{#4}% \@EA\@EA\@EA\@EA\@EA\@EA\@EA#1\@EA\@EA\@EA\@EA\@EA\@EA\@EA{\@EA\@EA\@EA\csexpandeda\@EA\@EA\@EA}\@EA\@EA\@EA{\@EA\csexpandedb\@EA}\@EA{\csexpandedc}} % \def\xx{XX}\setvalue{xx:yy}{abc \xx def}\def\param#1{\csname xx:#1\endcsname} % \def\testa #1{\defconvertedargument\ascii{#1}{\tttf\ascii}} % \def\testb #1#2{\defconvertedargument\ascii{#1 #2}{\tttf\ascii}} % \def\testc#1#2#3{\defconvertedargument\ascii{#1 #2 #3}{\tttf\ascii}} % \noindent 1 \csnameexpandedoneargument \testa{\param{yy}} % \noindent 2 \csnameexpandedtwoarguments \testb{\param{yy}}{\param{yy}} % \noindent 3 \csnameexpandedthreearguments\testc{\param{yy}}{\param{yy}}{\param{yy}} % rewrite the sectioning to use the variables, a bit tricky because then % we need a special expansion trick \def\sectionworldparameter #1{\csname\??sw\currentsectionworldname#1\endcsname} \def\pushsectionworldparameter#1{\expandafter\pushmacro\csname\??sw\currentsectionworldname#1\endcsname} \def\popsectionworldparameter #1{\expandafter\popmacro \csname\??sw\currentsectionworldname#1\endcsname} \def\setupsectionworld {\dodoubleargument\dosetupsectionworld} \def\dosetupsectionworld[#1][#2]% {\getparameters[\??sw#1][#2]} % maybe some extra things \def\dochecksectionworld#1% {\ifcsname\??sw\currentsectionworldname\endcsname\else \getparameters [\??sw\currentsectionworldname] [\c!before=, \c!after=, \c!setups=, \c!page=]% \fi} \def\startsectionworld {\dodoubleargument\dostartsectionworld} \def\dostartsectionworld[#1][#2]% {\pushmacro\currentsectionworldname \def\currentsectionworldname{#1}% \dochecksectionworld\currentsectionworldname \pushsectionworldparameter\c!before \pushsectionworldparameter\c!after \pushsectionworldparameter\c!setups \getparameters [\??sw\currentsectionworldname] [\c!text=,\c!number=\finalsectionnumber,\c!label=,\c!bookmark=,#2]% \doifsomething{\sectionworldparameter\c!page} {\setsectieenkoppeling\currentsectionworldname %\handlepagebreak\currentsectionworldname \checknexthead\handlepagebreak\currentsectionworldname}% \sectionworldparameter\c!before \begingroup \doifsomething{\sectionworldparameter\c!page} {\settrue\ignorehandlepagebreak}% \doifsomething{\sectionworldparameter\c!setups} {\setups[\sectionworldparameter\c!setups]}% \csnameexpandedthreearguments \doconstructheadwithvars {\sectionworldparameter\c!label }% {\sectionworldparameter\c!number}% {\sectionworldparameter\c!text }% \doifsomething{\sectionworldparameter\c!bookmark} {\expanded{\bookmark[\sectionworldparameter\c!bookmark]}}% \ignorespaces} % for inline heads \def\doconstructheadwithvars#1%#2#3% {\dodododoconstructhead\currentsectionworldname[#1]}% {#2}{#3}} \def\stopsectionworld {\endgraf \endgroup \sectionworldparameter\c!after \popsectionworldparameter\c!setups \popsectionworldparameter\c!after \popsectionworldparameter\c!before \popmacro\currentsectionworldname} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-fst.mkii0000644000175000017500000000227411754241457024336 0ustar norbertnorbert%D \module %D [ file=mult-fst, %D version=2006.08.16, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Speed Up, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % And so, after a few years of keeping this potentially dangerous % speedup in cont-exp, we now move it to the kernel: the next % patch is 30\% faster on main interface (seconds) (9->7 sec on % 1 million calls). Another speed up is still under testing. \unprotect \startinterface english \def\dosetvalue #1#2{\@EA\def \csname#1#2\endcsname} \def\dosetevalue #1#2{\@EA\edef\csname#1#2\endcsname} \def\dosetgvalue #1#2{\@EA\gdef\csname#1#2\endcsname} \def\dosetxvalue #1#2{\@EA\gdef\csname#1#2\endcsname} \def\docopyvalue#1#2#3{\@EA\def \csname#1#3\@EA\endcsname\@EA{\csname#2#3\endcsname}} \def\setinterfaceconstant#1#2{\setvalue{\c!prefix!#1}{#1}} \def\setinterfacevariable#1#2{\setvalue{\v!prefix!#1}{#2}} \def\interfaced#1{#1} \stopinterface \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-com.mkiv0000644000175000017500000001467312130411274024257 0ustar norbertnorbert%D \module %D [ file=page-com, % moved from page-imp %D version=1998.01.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Comments, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 will become runtime loaded code. \writestatus{loading}{ConTeXt Page Macros / Page Comments} \unprotect %D \macros %D {setuppagecomment,startpagecomment} %D %D This command is not yet documented. Usage: %D %D \starttyping %D \setuppagecomment[state=start,location=right] %D %D \startpagecomment %D \input knuth %D \stoppagecomment %D \stoptyping \installcorenamespace{pagecomment} \installcorenamespace{pagecommentlocations} \installcorenamespace{pagecommentstates} \newdimen\d_page_comments_offset \newdimen\d_page_comments_page_width \newdimen\d_page_comments_page_height \newdimen\d_page_comments_width \newdimen\d_page_comments_height \newdimen\d_page_comments_distance \newconditional\c_page_comment_enabled \let\p_page_commands_location\v!none \let\p_page_commands_state \v!stop \installsetuponlycommandhandler \??pagecomment {pagecomment} \appendtoks \edef\p_page_commands_location{\directpagecommentparameter\c!location}% \edef\p_page_commands_state {\directpagecommentparameter\c!state}% \expandnamespacemacro\??pagecommentstates\p_page_commands_state\v!none \to \everysetuppagecomment \ifdefined\scrn_canvas_synchronize_simple \appendtoks \ifx\p_page_commands_state\v!start \scrn_canvas_synchronize_simple \else \scrn_canvas_synchronize_complex \fi \to \everyshipout \fi \setvalue{\??pagecommentstates\v!start}% {\d_page_comments_offset \directpagecommentparameter\c!offset \relax \d_page_comments_distance\directpagecommentparameter\c!distance\relax \d_page_comments_width \directpagecommentparameter\c!width \relax \d_page_comments_height \directpagecommentparameter\c!height \relax \expandnamespacemacro\??pagecommentlocations\p_page_commands_location\v!none \definepapersize[\v!pagecomment][\c!height=\d_page_comments_page_height,\c!width=\d_page_comments_page_width]% \setuppapersize[\papersize][\v!pagecomment]% \setupbackgrounds[\v!paper][\c!background=\v!pagecomment]} % maybe append if already set \setvalue{\??pagecommentstates\v!stop}% {\setupbackgrounds[\v!paper][\c!background=]} \setvalue{\??pagecommentstates\v!none}% {} \setvalue{\??pagecommentlocations\v!bottom}% {\setuplayout[\c!location=]% \setuppapersize[\c!top=\vskip\d_page_comments_offset,\c!bottom=\vss,\c!left=\hskip\d_page_comments_offset,\c!right=]% \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_height\relax \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset\relax \defineoverlay[\v!pagecomment][\page_comments_top_bottom]} \setvalue{\??pagecommentlocations\v!top}% {\setuplayout[\c!location=]% \setuppapersize[\c!top=\vss,\c!bottom=\vskip\d_page_comments_offset,\c!left=\hskip\d_page_comments_offset,\c!right=]% \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_height\relax \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset\relax \defineoverlay[\v!pagecomment][\page_comments_top_bottom]} \setvalue{\??pagecommentlocations\v!left}% {\setuplayout[\c!location=]% \setuppapersize[\c!top=\vskip\d_page_comments_offset,\c!bottom=,\c!left=\hss,\c!right=\hskip\d_page_comments_offset]% \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset\relax \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_width\relax \defineoverlay[\v!pagecomment][\page_comments_left_right]} \setvalue{\??pagecommentlocations\v!right}% {\setuplayout[\c!location=]% \setuppapersize[\c!top=\vskip\d_page_comments_offset,\c!bottom=,\c!left=\hskip\d_page_comments_offset,\c!right =\hss]% \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset\relax \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_width\relax \defineoverlay[\v!pagecomment][\page_comments_left_right]} \setvalue{\??pagecommentlocations\v!none}% {}% \setuppapersize[\c!bottom=,\c!top=,\c!left=,\c!right=]} \unexpanded\def\page_comments_top_bottom {\vbox to \printpaperheight {%\forgetall \hsize\printpaperwidth\relax \ifx\p_page_commands_location\v!bottom \vskip\dimexpr\paperheight+\d_page_comments_distance+\d_page_comments_offset\relax \else \vskip\d_page_comments_offset \vss \fi \hskip\d_page_comments_offset \vbox to \d_page_comments_height {%\forgetall \hsize\paperwidth \ifconditional\c_page_comment_enabled \getbuffer[\v!pagecomment]% \global\setfalse\c_page_comment_enabled \fi}% \hfill \ifx\p_page_commands_location\v!bottom \vss \vskip\d_page_comments_offset \else \vskip\dimexpr\paperheight+\d_page_comments_distance+\d_page_comments_offset\relax \fi}} \unexpanded\def\page_comments_left_right {\hbox to \printpaperwidth {\ifx\p_page_commands_location\v!right \hskip\dimexpr\paperwidth+\d_page_comments_distance+\d_page_comments_offset\relax \else \hskip\d_page_comments_offset \hss \fi \vbox to \printpaperheight {%\forgetall \vskip\d_page_comments_offset \hsize\d_page_comments_width \ifconditional\c_page_comment_enabled \getbuffer[\v!pagecomment]% \global\setfalse\c_page_comment_enabled \fi \vss}% \ifx\p_page_commands_location\v!right \hss \hskip\d_page_comments_offset \else \hskip\dimexpr\paperwidth+\d_page_comments_distance+\d_page_comments_offset\relax \fi}} \setvalue{\e!start\v!pagecomment}% {\global\settrue\c_page_comment_enabled \grabbufferdatadirect\v!pagecomment{\e!start\v!pagecomment}{\e!stop\v!pagecomment}} \setuppagecomment [\c!state=, % \v!stop would invoke background calculation \c!location=\v!bottom, \c!offset=.5cm, \c!distance=.5cm, \c!height=5cm, \c!width=10cm] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-swf.lua0000644000175000017500000000624512130411274024133 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-swf'] = { version = 1.001, comment = "companion to grph-inc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- maybe: backends.codeinjections.insertswf local sub, format, match, byte = string.sub, string.format, string.match, string.byte local concat = table.concat local floor = math.floor local tonumber = tonumber local readstring = io.readstring local readnumber = io.readnumber local tobitstring = number.tobitstring local todimen = number.todimen local nodeinjections = backends.nodeinjections local figures = figures local context = context local function getheader(name) local f = io.open(name,"rb") if not f then return end local signature = readstring(f,3) -- F=uncompressed, C=compressed (zlib) local version = readnumber(f,1) local filelength = readnumber(f,-4) local compressed = sub(signature,1,1) == "C" local buffer if compressed then buffer = zlib.decompress(f:read('*a')) else buffer = f:read(20) -- ('*a') end f:close() buffer = { match(buffer,"(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)") } for i=1,9 do buffer[i] = tobitstring(byte(buffer[i])) end local framebits = concat(buffer,"",1,9) local n = tonumber(sub(framebits,1,5),2) local frame = { } -- xmin xmax ymin ymax local xmin = tonumber(sub(framebits,6, 5 + n),2) local xmax = tonumber(sub(framebits,6 + 1*n,5 + 2*n),2) local ymin = tonumber(sub(framebits,6 + 2*n,5 + 3*n),2) local ymax = tonumber(sub(framebits,6 + 3*n,5 + 4*n),2) return { filename = name, version = version, filelength = filelength, framerate = tonumber(byte(buffer[10]) * 256 + byte(buffer[11])), framecount = tonumber(byte(buffer[12]) * 256 + byte(buffer[13])), -- framebits = framebits, compressed = compressed, width = floor((xmax - xmin) / 20), height = floor((ymax - ymin) / 20), rectangle = { xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, } } end function figures.checkers.swf(data) local dr, du, ds = data.request, data.used, data.status local foundname = du.fullname local header = getheader(foundname) local width, height = figures.applyratio(dr.width,dr.height,header.width,header.height) dr.width, dr.height = width, height du.width, du.height, du.foundname = width, height, foundname context.startfoundexternalfigure(todimen(width),todimen(height)) nodeinjections.insertswf { foundname = foundname, width = width, height = height, -- factor = number.dimenfactors.bp, display = dr.display, controls = dr.controls, -- label = dr.label, resources = dr.resources, } context.stopfoundexternalfigure() return data end figures.includers.swf = figures.includers.nongeneric figures.registersuffix("swf","swf") context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-251.mkii0000644000175000017500000000171711754241457024027 0ustar norbertnorbert%D \module %D [ file=unic-251, %D version=2006.04.20, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 251, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] \unprotect \def\ffligature {ff} \def\filigature {fi} \def\flligature {fl} \def\ffiligature {ffi} \def\fflligature {ffl} \def\ftligature {ft} \def\stligature {st} \startunicodevector 251 \expandafter\strippedcsname \ifcase\numexpr#1\relax \ffligature \or % LATIN SMALL LIGATURE FF \filigature \or % LATIN SMALL LIGATURE FI \flligature \or % LATIN SMALL LIGATURE FL \ffiligature \or % LATIN SMALL LIGATURE FFI \fflligature \or % LATIN SMALL LIGATURE FFL \ftligature \or % LATIN SMALL LIGATURE FT \stligature \else % LATIN SMALL LIGATURE ST \unknownchar \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-tables.lua0000644000175000017500000002520412161703335025241 0ustar norbertnorbertif not modules then modules = { } end modules ['s-fonts-tables'] = { version = 1.001, comment = "companion to s-fonts-tables.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.tables = moduledata.fonts.tables or { } local setmetatableindex = table.setmetatableindex local sortedhash = table.sortedhash local sortedkeys = table.sortedkeys local format = string.format local concat = table.concat local tabletracers = moduledata.fonts.tables local digits = { dflt = { dflt = "1234567890 1/2", }, } local punctuation = { dflt = { dflt = ". , : ; ? ! ‹ › « »", }, } local symbols = { dflt = { dflt = "@ # $ % & * () [] {} <> + - = / |", }, } local LATN = "abcdefghijklmnopqrstuvwxyz" local uppercase = { latn = { dflt = LATN, fra = LATN .. " ÀÁÂÈÉÊÒÓÔÙÚÛÆÇ", }, grek = { dftl = "ΑΒΓΔΕΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ", }, cyrl= { dflt = "АБВГДЕЖЗИІЙКЛМНОПРСТУФХЦЧШЩЪЫЬѢЭЮЯѲ" }, } local latn = "abcdefghijklmnopqrstuvwxyz" local lowercase = { latn = { dftl = latn, nld = latn .. " ïèéë", deu = latn .. " äöüß", fra = latn .. " àáâèéêòóôùúûæç", }, grek = { dftl = "αβγδεηθικλμνξοπρστυφχψω", }, cyrl= { dflt = "абвгдежзиійклмнопрстуфхцчшщъыьѣэюяѳ" }, } local samples = { digits = digits, punctuation = punctuation, symbols = symbols, uppercase = uppercase, lowercase = lowercase, } tabletracers.samples = samples setmetatableindex(uppercase, function(t,k) return rawget(t,"latn") end) setmetatableindex(lowercase, function(t,k) return rawget(t,"latn") end) setmetatableindex(digits, function(t,k) return rawget(t,"dflt") end) setmetatableindex(symbols, function(t,k) return rawget(t,"dflt") end) setmetatableindex(punctuation, function(t,k) return rawget(t,"dflt") end) setmetatableindex(uppercase.latn, function(t,k) return rawget(t,"dflt") end) setmetatableindex(uppercase.grek, function(t,k) return rawget(t,"dflt") end) setmetatableindex(uppercase.cyrl, function(t,k) return rawget(t,"dflt") end) setmetatableindex(lowercase.latn, function(t,k) return rawget(t,"dflt") end) setmetatableindex(lowercase.grek, function(t,k) return rawget(t,"dflt") end) setmetatableindex(lowercase.cyrl, function(t,k) return rawget(t,"dflt") end) setmetatableindex(digits.dflt, function(t,k) return rawget(t,"dflt") end) setmetatableindex(symbols.dflt, function(t,k) return rawget(t,"dflt") end) setmetatableindex(punctuation.dflt, function(t,k) return rawget(t,"dflt") end) local function typesettable(t,keys,synonyms,nesting,prefix) if t then if not prefix then context.starttabulate { "|Tl|Tl|Tl|" } end for k, v in sortedhash(keys) do if k == "synonyms" then elseif type(v) ~= "table" then context.NC() if prefix then context("%s.%s",prefix,k) else context(k) end context.NC() local tk = t[k] if v == "boolean" then context(tostring(tk or false)) elseif not tk then context("") elseif v == "filename" then context(file.basename(tk)) elseif v == "basepoints" then context("%sbp",tk) elseif v == "scaledpoints" then context("%p",tk) elseif v == "table" then context("") else -- if v == "integerscale" then context(tostring(tk)) end context.NC() local synonym = (not prefix and synonyms[k]) or (prefix and synonyms[format("%s.%s",prefix,k)]) if synonym then context(format("(%s)",concat(synonym," "))) end context.NC() context.NR() elseif nesting == false then context("
") else -- true or nil typesettable(t[k],v,synonyms,nesting,k) end end if not prefix then context.stoptabulate() end end end local function typeset(t,keys,nesting,prefix) local synonyms = keys.synonyms or { } local collected = { } for k, v in next, synonyms do local c = collected[v] if not c then c = { } collected[v] = c end c[#c+1] = k end for k, v in next, collected do table.sort(v) end typesettable(t,keys,collected,nesting,prefix) end tabletracers.typeset = typeset function tabletracers.showproperties(nesting) local tfmdata = fonts.hashes.identifiers[font.current()] typeset(tfmdata.properties,fonts.constructors.keys.properties,nesting) end function tabletracers.showparameters(nesting) local tfmdata = fonts.hashes.identifiers[font.current()] typeset(tfmdata.parameters,fonts.constructors.keys.parameters,nesting) end function tabletracers.showpositionings() local tfmdata = fonts.hashes.identifiers[font.current()] local resources = tfmdata.resources if resources then local features = resources.features if features then local gpos = features.gpos if gpos and next(gpos) then context.starttabulate { "|Tl|Tl|Tlp|" } for feature, scripts in sortedhash(gpos) do for script, languages in sortedhash(scripts) do context.NC() context(feature) context.NC() context(script) context.NC() context(concat(sortedkeys(languages)," ")) context.NC() context.NR() end end context.stoptabulate() else context("no entries") context.par() end end end end local dynamics = true function tabletracers.showsubstitutions() local tfmdata = fonts.hashes.identifiers[font.current()] local resources = tfmdata.resources if resources then local features = resources.features if features then local gsub = features.gsub if gsub then local makes_sense = { } for feature, scripts in sortedhash(gsub) do for script, languages in sortedhash(scripts) do for language in sortedhash(languages) do local tag = format("dummy-%s-%s-%s",feature,script,language) local fnt = format("file:%s*%s",file.basename(tfmdata.properties.filename),tag) context.definefontfeature ( { tag }, { mode = "node", script = script, language = language, [feature] = "yes" } ) if not dynamics then context.definefont( { fnt }, { fnt } ) end makes_sense[#makes_sense+1] = { feature = feature, tag = tag, script = script, language = language, fontname = fnt, } end end end if #makes_sense > 0 then context.starttabulate { "|Tl|Tl|Tl|p|" } for i=1,#makes_sense do local data = makes_sense[i] local script = data.script local language = data.language context.NC() context(data.feature) context.NC() context(script) context.NC() context(language) context.NC() if not dynamics then context.startfont { data.fontname } else context.addff(data.tag) end context.verbatim(samples.lowercase [script][language]) context.par() context.verbatim(samples.uppercase [script][language]) context.par() context.verbatim(samples.digits [script][language]) context.par() context.verbatim(samples.punctuation[script][language]) context.quad() context.verbatim(samples.symbols [script][language]) if not dynamics then context.stopfont() end context.NC() context.NR() end context.stoptabulate() else context("no entries") context.par() end end end end end function tabletracers.showall(specification) -- not interfaced specification = interfaces.checkedspecification(specification) if specification.title then context.starttitle { title = specification.title } end context.startsubject { title = "Properties" } tabletracers.showproperties() context.stopsubject() context.startsubject { title = "Parameters" } tabletracers.showparameters() context.stopsubject() context.startsubject { title = "Positioning features" } tabletracers.showpositionings() context.stopsubject() context.startsubject { title = "Substitution features" } tabletracers.showsubstitutions() context.stopsubject() if title then context.stoptitle() end end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-newmmo.mkii0000644000175000017500000002167311754241457024336 0ustar norbertnorbert%D \module %D [ file=x-newmmo, %D version=2006.05.17, %D title=\CONTEXT\ XML Macros, %D subtitle=MathML Renderer/Open Math Extensions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Strange things, why not mapped onto normal content MathML and/or %D onto processing instructions. \unprotect %D \startbuffer %D %D %D %D %D a %D 2 %D %D a %D %D %D \stopbuffer %D %D \typebuffer \processXMLbuffer \startsetups mmc:csymbol:http://www.openmath.org/cd/nums1\letterhash rational \MMLcreset \getXMLstackdata\plustwo/\getXMLstackdata\plusthree \stopsetups %D \startbuffer %D %D %D %D y %D x %D %D %D \stopbuffer %D %D \typebuffer \processXMLbuffer \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash diffquot \MMLcreset \frac { \Delta\getXMLstackdata\plustwo } { \Delta\getXMLstackdata\plusthree } \stopsetups %D \startbuffer %D %D %D %D y %D %D %D \stopbuffer %D %D \typebuffer \processXMLbuffer %D %D \startbuffer %D %D %D %D %D %D y %D %D %D %D f %D x %D %D %D f %D %D %D x %D 1 %D %D %D %D %D %D %D \stopbuffer %D %D \typebuffer \processXMLbuffer \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash difference \MMLcreset \Delta\getXMLstackdata\plustwo \stopsetups %D \startbuffer %D %D %D %D s %D t %D %D %D \stopbuffer %D %D \typebuffer \processXMLbuffer \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash diff \MMLcreset \frac { \mfunction{\getXMLentity{mathematicald}}\getXMLstackdata\plustwo } { \mfunction{\getXMLentity{mathematicald}}\getXMLstackdata\plusthree } \stopsetups %D A unit mess. \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@second {\mr s}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@minute {\mr m}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@hour {\mr h}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@day {\mr d}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@week {\mr w}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@month {\mr m}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@year {\mr y}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@meter {\mr m}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@gram {\mr g}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@liter {\mr l}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@watt {\mr W}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@pascal {\mr P}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@kelvin {\mr K}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@celsius {\mr C}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@newton {\mr N}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@byte {\mr B}\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@pico {\mr p}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@micro \mu\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@milli {\mr m}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@centi {\mr c}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@deci {\mr d}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@deca {\mr d}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@hecto {\mr h}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@kilo {\mr k}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@mega {\mr m}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@giga {\mr g}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@tera {\mr t}\getXMLstackdata\plustwo\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash procent \procent\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash promille \promille\stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash degree ^\circ\stopsetups % whatever \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash triangle \Delta\, \stopsetups % crap \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@degree_celsius \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@celsius} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@degree_kelvin \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@kelvin} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@metre \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@meter} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@gramme \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@gram} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@litre \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@liter} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@calendar_month \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@month} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@calendar_year \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@year} \stopsetups \startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash degree_angle \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash degree} \stopsetups \defineXMLargument [ci] {\checkMMLciSYMBOL} \def\checkMMLciSYMBOL#1% {\defconvertedargument\ascii{#1}% \executeifdefined{ci:symbol:crap:\ascii}{#1}} \setvalue{ci:symbol:crap:alpha}{\alpha} \setvalue{ci:symbol:crap:beta}{\beta} \setvalue{ci:symbol:crap:gamma}{\gamma} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-dir.mkiv0000644000175000017500000001135712130411274024332 0ustar norbertnorbert%D \module %D [ file=typo-dir, %D version=2009.03.27, % code moved from core-spa.mkiv %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Directions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Directions} \unprotect \registerctxluafile{typo-dir}{1.001} \definesystemattribute[directions][public] \installcorenamespace{directions} \installcorenamespace{directionsbidimode} % plural as we can have a combination but maybe better singular \installsimplecommandhandler \??directions {directions} \??directions % no \define... yet \unexpanded\def\setdirection[#1]% todo: symbolic names {\ctxcommand{setdirection(\number#1)}} \unexpanded\def\resetdirection %{\ctxcommand{setdirection(0)}} {\attribute\directionsattribute\attributeunsetvalue} \newconstant\directionsbidimode % this one might become pivate \letvalue{\??directionsbidimode\v!off }\zerocount \letvalue{\??directionsbidimode\v!global}\plusone \letvalue{\??directionsbidimode\v!local }\plustwo \letvalue{\??directionsbidimode\v!on }\plustwo \appendtoks \directionsbidimode \ifcsname\??directionsbidimode\directionsparameter\c!bidi\endcsname \csname\??directionsbidimode\directionsparameter\c!bidi\endcsname \else \zerocount \fi \relax \ifcase\directionsbidimode \resetdirection \or % 1 \setdirection[1]% global, chars \or % 2 \setdirection[2]% local, attributes \or % else \setdirection[1]% default \fi \to \everysetupdirections % bidi: local=obey grouping, global=ignore grouping (unicode has no grouping) \setupdirections % maybe start/stop [\c!bidi=\v!off] \unexpanded\edef\bidilre{\normalUchar"202A} % maybe \edef's \unexpanded\edef\bidirle{\normalUchar"202B} \unexpanded\edef\bidipop{\normalUchar"202C} \unexpanded\edef\bidilro{\normalUchar"202D} \unexpanded\edef\bidirlo{\normalUchar"202E} \unexpanded\def\dirlre{\ifcase\directionsbidimode\or\bidilre\or\textdir TLT\fi} \unexpanded\def\dirrle{\ifcase\directionsbidimode\or\bidirle\or\textdir TRT\fi} \unexpanded\def\dirlro{\ifcase\directionsbidimode\or\bidilro\or\setdirection[3]\fi} \unexpanded\def\dirrlo{\ifcase\directionsbidimode\or\bidirlo\or\setdirection[4]\fi} % for the moment: \setdirection[\plusone] \protect \endinput % bidi test \definefontfeature [arab] [mode=node,language=dflt,script=arab, init=yes,medi=yes,fina=yes,isol=yes, liga=yes,dlig=yes,rlig=yes,clig=yes, mark=yes,mkmk=yes,kern=yes,curs=yes] \font\Arabic=arabtype*arab at 20pt \def\LATIN{LATIN} {\setdirection[1]} % enable this \def\ARAB {محمد} \startluacode function documentdata.split_tokens(str) for s in str:bytes() do context.sprint(tex.ctxcatcodes,string.format("\\hbox{\\char %s}",s)) end end \stopluacode \def\biditest#1#2#3% font text raw {\dontleavehmode\hbox {\framed[offset=overlay]{\tttf#2}\quad \enabletrackers[typesetters.directions]% \framed[offset=overlay]{#1#3}\quad \disabletrackers[typesetters.directions]% \tttf\ctxlua{documentdata.split_tokens([[\detokenize{#3}]])}}} \startbuffer[bidi-sample] \biditest\Arabic{LATIN BARA}{\textdir TLT\relax \LATIN\ \ARAB}\par \biditest\Arabic{BARA LATIN}{\textdir TRT\relax \LATIN\ \ARAB}\par \biditest\Arabic{LATIN ARAB}{\textdir TLT{\bidilro \LATIN\ \ARAB}}\par % right -> left \biditest\Arabic{LATIN ARAB}{\textdir TRT{\bidilro \LATIN\ \ARAB}}\par % right -> left \biditest\Arabic{BARA NITAL}{\textdir TLT{\bidirlo \LATIN\ \ARAB}}\par % left -> right \biditest\Arabic{BARA NITAL}{\textdir TRT{\bidirlo \LATIN\ \ARAB}}\par % left -> right \stopbuffer \startbuffer[bidi-sample] \biditest\Arabic{LATIN BARA}{\textdir TLT\relax \LATIN\ \ARAB}\par \biditest\Arabic{BARA LATIN}{\textdir TRT\relax \LATIN\ \ARAB}\par \biditest\Arabic{LATIN ARAB}{\textdir TLT\bidilro \LATIN\ \ARAB}\par % right -> left \biditest\Arabic{LATIN ARAB}{\textdir TRT\bidilro \LATIN\ \ARAB}\par % right -> left \biditest\Arabic{BARA NITAL}{\textdir TLT\bidirlo \LATIN\ \ARAB}\par % left -> right \biditest\Arabic{BARA NITAL}{\textdir TRT\bidirlo \LATIN\ \ARAB}\par % left -> right \stopbuffer \startbuffer[bidi-setup] \setupdirections[bidi=off] \stopbuffer {\typebuffer[bidi-setup] \getbuffer[bidi-setup] \getbuffer[bidi-sample]} \startbuffer[bidi-setup] \setupdirections[bidi=global] \stopbuffer {\typebuffer[bidi-setup] \getbuffer[bidi-setup] \getbuffer[bidi-sample]} \startbuffer[bidi-setup] \setupdirections[bidi=local] \stopbuffer {\typebuffer[bidi-setup] \getbuffer[bidi-setup] \getbuffer[bidi-sample]} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-12.mkii0000644000175000017500000000370411754241457024040 0ustar norbertnorbert%D \module %D [ file=x-fig-12, %D version=2005.05.05, %D title=\CONTEXT\ Style File, %D subtitle=Resource Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 dimension checking using \RLXTOOLS. \unprotect \chardef\figurerlxmode\plusone % rlx permitted \startXMLmapping[rli] \defineXMLprocess[rl:identify] \defineXMLsavecontent[rl:width] {\!!zeropoint} \defineXMLsavecontent[rl:height]{\!!zeropoint} \stopXMLmapping \def\doanalyzefiguredimensionsrlx {\ifcase\figurestatus \ifcase\figurerlxmode \else \doifnotfile{\wantedfigurefullname.rli} {% let's try runtime running first \doshowfiguremessage6\wantedfigurefullname \executesystemcommand{texmfstart rlxtools --identify \wantedfigurefullname}}% \doifnotfile{\wantedfigurefullname.rli} {% we assume that runtime running failed \doshowfiguremessage6\wantedfigurefullname \installprogram{texmfstart rlxtools --identify \wantedfigurefullname}}% \doiffile{\wantedfigurefullname.rli} {\global\let\analyzedfigurewidth \!!zeropoint \global\let\analyzedfigureheight\!!zeropoint \startnointerference % groups \startXMLmapping[rli]% \startXMLignore \processXMLfile{\wantedfigurefullname.rli}% \xdef\analyzedfigurewidth {\the\dimexpr\XMLflush{rl:width} \relax}% turn whatever into pt \xdef\analyzedfigureheight{\the\dimexpr\XMLflush{rl:height}\relax}% turn whatever into pt \stopXMLignore \stopXMLmapping \stopnointerference \setanalyzedfiguredimensions\!!twelve}% \fi\fi} \let\doanalyzefiguredimensionsexternal\doanalyzefiguredimensionsrlx \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-xml.lua0000644000175000017500000002404211756777531024173 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-xml'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local concat = table.concat local find, lower, upper = string.find, string.lower, string.upper local xml = xml local finalizers = xml.finalizers.xml local xmlfilter = xml.filter -- we could inline this one for speed local xmltostring = xml.tostring local xmlserialize = xml.serialize local xmlcollected = xml.collected local xmlnewhandlers = xml.newhandlers local function first(collected) -- wrong ? return collected and collected[1] end local function last(collected) return collected and collected[#collected] end local function all(collected) return collected end -- local function reverse(collected) -- if collected then -- local nc = #collected -- if nc > 0 then -- local reversed, r = { }, 0 -- for c=nc,1,-1 do -- r = r + 1 -- reversed[r] = collected[c] -- end -- return reversed -- else -- return collected -- end -- end -- end local reverse = table.reversed local function attribute(collected,name) if collected and #collected > 0 then local at = collected[1].at return at and at[name] end end local function att(id,name) local at = id.at return at and at[name] end local function count(collected) return collected and #collected or 0 end local function position(collected,n) if not collected then return 0 end local nc = #collected if nc == 0 then return 0 end n = tonumber(n) or 0 if n < 0 then return collected[nc + n + 1] elseif n > 0 then return collected[n] else return collected[1].mi or 0 end end local function match(collected) return collected and #collected > 0 and collected[1].mi or 0 -- match end local function index(collected) return collected and #collected > 0 and collected[1].ni or 0 -- 0 is new end local function attributes(collected,arguments) if collected and #collected > 0 then local at = collected[1].at if arguments then return at[arguments] elseif next(at) then return at -- all of them end end end local function chainattribute(collected,arguments) -- todo: optional levels if collected and #collected > 0 then local e = collected[1] while e do local at = e.at if at then local a = at[arguments] if a then return a end else break -- error end e = e.__p__ end end return "" end local function raw(collected) -- hybrid (not much different from text so it might go) if collected and #collected > 0 then local e = collected[1] or collected return e and xmltostring(e) or "" -- only first as we cannot concat function else return "" end end -- local xmltexthandler = xmlnewhandlers { name = "string", initialize = function() result = { } return result end, finalize = function() return concat(result) end, handle = function(...) result[#result+1] = concat { ... } end, escape = false, } local function xmltotext(root) local dt = root.dt if not dt then return "" end local nt = #dt -- string or table if nt == 0 then return "" elseif nt == 1 and type(dt[1]) == "string" then return dt[1] -- no escaping of " ' < > & else return xmlserialize(root,xmltexthandler) or "" end end -- local function text(collected) -- hybrid if collected then -- no # test here ! local e = collected[1] or collected -- why fallback to element, how about cdata return e and xmltotext(e) or "" else return "" end end local function texts(collected) if not collected then return { } -- why no nil end local nc = #collected if nc == 0 then return { } -- why no nil end local t, n = { }, 0 for c=1,nc do local e = collected[c] if e and e.dt then n = n + 1 t[n] = e.dt end end return t end local function tag(collected,n) if not collected then return end local nc = #collected if nc == 0 then return end local c if n == 0 or not n then c = collected[1] elseif n > 1 then c = collected[n] else c = collected[nc-n+1] end return c and c.tg end local function name(collected,n) if not collected then return end local nc = #collected if nc == 0 then return end local c if n == 0 or not n then c = collected[1] elseif n > 1 then c = collected[n] else c = collected[nc-n+1] end if not c then -- sorry elseif c.ns == "" then return c.tg else return c.ns .. ":" .. c.tg end end local function tags(collected,nonamespace) if not collected then return end local nc = #collected if nc == 0 then return end local t, n = { }, 0 for c=1,nc do local e = collected[c] local ns, tg = e.ns, e.tg n = n + 1 if nonamespace or ns == "" then t[n] = tg else t[n] = ns .. ":" .. tg end end return t end local function empty(collected,spacesonly) if not collected then return true end local nc = #collected if nc == 0 then return true end for c=1,nc do local e = collected[c] if e then local edt = e.dt if edt then local n = #edt if n == 1 then local edk = edt[1] local typ = type(edk) if typ == "table" then return false elseif edk ~= "" then return false elseif spacesonly and not find(edk,"%S") then return false end elseif n > 1 then return false end end end end return true end finalizers.first = first finalizers.last = last finalizers.all = all finalizers.reverse = reverse finalizers.elements = all finalizers.default = all finalizers.attribute = attribute finalizers.att = att finalizers.count = count finalizers.position = position finalizers.match = match finalizers.index = index finalizers.attributes = attributes finalizers.chainattribute = chainattribute finalizers.text = text finalizers.texts = texts finalizers.tag = tag finalizers.name = name finalizers.tags = tags finalizers.empty = empty -- shortcuts -- we could support xmlfilter(id,pattern,first) function xml.first(id,pattern) return first(xmlfilter(id,pattern)) end function xml.last(id,pattern) return last(xmlfilter(id,pattern)) end function xml.count(id,pattern) return count(xmlfilter(id,pattern)) end function xml.attribute(id,pattern,a,default) return attribute(xmlfilter(id,pattern),a,default) end function xml.raw(id,pattern) if pattern then return raw(xmlfilter(id,pattern)) else return raw(id) end end function xml.text(id,pattern) -- brrr either content or element (when cdata) if pattern then -- return text(xmlfilter(id,pattern)) local collected = xmlfilter(id,pattern) return collected and #collected > 0 and xmltotext(collected[1]) or "" elseif id then -- return text(id) return xmltotext(id) or "" else return "" end end xml.content = text -- function xml.position(id,pattern,n) -- element return position(xmlfilter(id,pattern),n) end function xml.match(id,pattern) -- number return match(xmlfilter(id,pattern)) end function xml.empty(id,pattern,spacesonly) return empty(xmlfilter(id,pattern),spacesonly) end xml.all = xml.filter xml.index = xml.position xml.found = xml.filter -- a nice one: local function totable(x) local t = { } for e in xmlcollected(x[1] or x,"/*") do t[e.tg] = xmltostring(e.dt) or "" end return next(t) and t or nil end xml.table = totable finalizers.table = totable local function textonly(e,t) if e then local edt = e.dt if edt then for i=1,#edt do local e = edt[i] if type(e) == "table" then textonly(e,t) else t[#t+1] = e end end end end return t end function xml.textonly(e) -- no pattern return concat(textonly(e,{})) end -- -- local x = xml.convert("123") -- xml.filter(x,"**/lowerall()") print(x) -- xml.filter(x,"**/upperall()") print(x) function finalizers.lowerall(collected) for c=1,#collected do local e = collected[c] if not e.special then e.tg = lower(e.tg) local eat = e.at if eat then local t = { } for k,v in next, eat do t[lower(k)] = v end e.at = t end end end end function finalizers.upperall(collected) for c=1,#collected do local e = collected[c] if not e.special then e.tg = upper(e.tg) local eat = e.at if eat then local t = { } for k,v in next, eat do t[upper(k)] = v end e.at = t end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-ct.mkiv0000644000175000017500000000145411754241457023452 0ustar norbertnorbert%D \module %D [ file=x-cals, %D version=2007.09.05, %D title=\CONTEXT\ XML Modules, %D subtitle=\CONTEXT\ Structures, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 XML Macros / Basics} \startmodule [ct] \registerctxluafile{x-ct}{} \startxmlsetups xml:context:process \xmlsetfunction {\xmldocument} {context:tabulate} {moduledata.ct.tabulate} \xmlsetfunction {\xmldocument} {context:combination} {moduledata.ct.combination} \stopxmlsetups \xmlregistersetup{xml:context:process} \xmlregisterns{context}{context} \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/context-debug.lmx0000644000175000017500000001051411376503616025174 0ustar norbertnorbert<?lua pv('title') ?>

Scratch Variables

index    dimen    count    toks
           

type
variable
value

Internal Variables


ConTeXt Variables


Job Name:     ConTeXt Version:     Real Page:     Page:    
context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-10.lua0000644000175000017500000000457511571377075024203 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-10'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A, 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B, 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169, 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138 } context-2013.05.28.20130704/texmf-dist/tex/context/base/page-log.mkii0000644000175000017500000001370511754241457024257 0ustar norbertnorbert%D \module %D [ file=page-log, % moved here from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Logos, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Logos} \unprotect %D Although logos can conveniently be implemented on top of %D background and text areas, we provide a dedicated mechanism %D here. One reason is that such a separate mechanism cannot %D interfere with the other ones, but an even more important %D reason is that logos are kind of special in the sense that %D they have a short life span and may change after the first %D page. %D \macros %D {recalculatelogos,addlogobackground} %D %D The interface to the other low level page building routines %D is provided by a macro that signals changes in layout %D specifications: %D %D \starttyping %D \recalculatelogos %D \stoptyping %D %D as well as a simple placement macro: %D %D \starttyping %D \addlogobackground %D \stoptyping %D %D In no way the following boolean switch should be used %D directly. \newif\ifnewlogos \def\recalculatelogos {\global\newlogostrue} %D The current state of logos is registered in a status %D variable \type {\logostatus}. %D %D \starttabulate[|l|l|l|] %D \NC 0 \NC don't place \NC remains 0 \NC \NR %D \NC 1 \NC place now \NC remains 1 \NC \NR %D \NC 2 \NC calulate and place \NC becomes 1 \NC \NR %D \NC 3 \NC calculate and place once \NC becomes 2 \NC \NR %D \stoptabulate \chardef\logostatus=0 \def\addlogobackground#1% todo: dimension spec {\ifcase\logostatus \else \ifcase\logostatus % no logos to take care of \or % 1 \ifnewlogos \chardef\logostatus2 \setlogoboxes \chardef\logostatus1 \global\newlogosfalse \fi \or % 2 \setlogoboxes \chardef\logostatus1 \or % 3 \setlogoboxes \global\chardef\logostatus2 \fi \setbox#1\vbox {\offinterlineskip \doifmarginswapelse {\copy\leftlogos} {\copy\rightlogos} \box#1}% \fi} %D For efficiency reasons (and since logos seldom change inside %D a document) we can save the left and right hand (or first %D and following page) logos in boxes. The areas are slightly %D different from the ones used in backgrounds and text %D placement, but still related to the page layout. The {\em %D left} and {\em right edge}, as well as {\em top} and {\em %D bottom} touch the bounding box of the paper and are %D therefore not the sams as their background adn text %D counterparts. In addition there are {\em left}, {\em right} %D and {\em middle} areas as well as a {\em page} one. \newbox\leftlogos \newbox\rightlogos \def\setlogoboxes {\showmessage\m!layouts7\empty \dosetlogobox\leftlogos\relax \ifdoublesided \dosetlogobox\rightlogos\doswapmargins \fi} \def\dosetlogobox#1#2% {\global\setbox#1\vbox to \paperheight {\dontcomplain % needed here ? \calculatereducedvsizes % needed here ? \offinterlineskip #2\relax \vskip-\topspace \dodosetlogobox\v!top\blap \vskip\topspace \dodosetlogobox\v!header\blap \vskip\dimexpr\headerheight+\headerdistance\relax \dodosetlogobox\v!text\blap \vskip\dimexpr\textheight+\footerdistance+\footerheight\relax \dodosetlogobox\v!footer \tlap \vfilll \dodosetlogobox\v!bottom\tlap \vskip\topspace} \smashbox#1} \def\dodosetlogobox#1#2% {\hbox % width equals \makeupwidth {\def\docommand##1% {\donefalse \ifnum\logostatus=3 \ExpandBothAfter \doifinset{\getvalue{\??lo#1##1}}\requestedlogos\donetrue \else \doifvalue{\??lo#1##1\c!state}\v!start\donetrue \fi \ifdone #2{\hbox{\getvalue{\??lo#1##1\c!command}}}% \fi}% \def\dodocommand##1##2##3##4##5##6% {\hsmash {\hskip-\texthoffset \hbox to \paperwidth {\rlap{\docommand##1}\hss\llap{\docommand##6}}% \hskip-\paperwidth \hbox to \paperwidth {\hskip\texthoffset \hskip-\leftmarginwidth \hskip-\leftmargindistance \hbox to \leftmarginwidth{\docommand##2\hss}% \hskip\leftmargindistance \hbox to \makeupwidth{\docommand##3\hss\docommand##4}% \hskip\rightmargindistance \hbox to \rightmarginwidth{\hss\docommand##5}% \hfill}}}% \normalbaselines \settexthoffset \hsmash {\hbox to \makeupwidth{\hss\docommand\c!middle\hss}}% \hsmash {\hskip-\texthoffset \hbox to \paperwidth{\docommand\v!page\hss}}% \swapmargins \doifbothsidesoverruled {\dodocommand \v!leftedge \v!leftmargin \v!left \v!right \v!rightmargin \v!rightedge} {\dodocommand \v!leftedge \v!leftmargin \v!left \v!right \v!rightmargin \v!rightedge} {\dodocommand \v!rightedge \v!rightmargin \v!right \v!left \v!leftmargin \v!leftedge}}} %D The user interface is relatively simple and provides %D macros for assigning logos to logo areas as well as %D forcing placement. %D %D \showsetup{definelogo} %D \showsetup{placelogos} \let\definedlogos \empty \let\requestedlogos\empty \long\def\dodefinelogo[#1][#2][#3][#4]% {\addtocommalist{#1}\definedlogos \long\setvalue{\??lo#2#3}{#1}% \getparameters[\??lo#2#3][#4]% \global\chardef\logostatus2 } \def\definelogo {\doquadrupleargument\dodefinelogo} \def\placelogos {\dosingleempty\doplacelogos} \def\doplacelogos[#1]% {\xdef\requestedlogos{\iffirstargument#1\else\definedlogos\fi}% \global\chardef\logostatus3 } \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-gen.mkii0000644000175000017500000001044011754241457024254 0ustar norbertnorbert%D \module %D [ file=core-gen, %D version=1995.10.10, %D title=\CONTEXT\ Core Macros, %D subtitle=General, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / General} \unprotect %D \macros %D {assigndimension,assignalfadimension} %D %D Hieronder worden enkele commando's gedefinieerd rond %D toekenningen. Allereerst een commando om waarden aan %D een \DIMENSION\ toe te kennen: %D %D \starttyping %D \assigndimension %D {|klein|middel|groot|-klein|-middel|-groot|geen} %D {\dimension} %D {waarde klein} %D {waarde middel} %D {waarde groot} %D \stoptyping %D %D Hierbij krijgt de \DIMENSION\ \type{\dimension} een waarde %D afhankelijk van het meegegeven trefwoord. %D %D \startnarrower %D \startlines %D \type{(-)klein }\qquad (--) waarde klein %D \type{(-)middel}\qquad (--) waarde middel %D \type{(-)groot }\qquad (--) waarde groot %D \type{geen }\qquad 0pt %D \type{waarde }\qquad waarde %D \stoplines %D \stopnarrower %D %D Een trefwoord mag worden voorafgegaan door een \type{-}. %D Deze macro toont een voorbeeld van het gebruik van %D \type{\processaction} en constanten. %D %D Analoog aan het bovenstaande commando kennen we een %D commando om waarden toe te kennen aan een macro: %D %D \starttyping %D \assignalfadimension %D {|klein|middel|groot|geen} %D {\macro} %D {waarde klein} %D {waarde middel} %D {waarde groot} %D \stoptyping % The third (optimized) version: \def\@ad@{@ad@} \setvalue{\@ad@ \v!none }{\zeropoint\gobblethreearguments} \setvalue{\@ad@ \v!big }{\thirdofthreearguments} \setvalue{\@ad@ \v!medium}{\secondofthreearguments} \setvalue{\@ad@ \v!small }{\firstofthreearguments} \setvalue{\@ad@-\v!big }{-\thirdofthreearguments} \setvalue{\@ad@-\v!medium}{-\secondofthreearguments} \setvalue{\@ad@-\v!small }{-\firstofthreearguments} \def\assigndimension#1#2% #3 #4 #5 {#2=\ifcsname\@ad@#1\endcsname \csname\@ad@#1\expandafter\endcsname \else #1\expandafter\gobblethreearguments \fi} \def\@aa@{@aa@} \setvalue{\@aa@\v!none }{0\gobblethreearguments} \setvalue{\@aa@\v!big }{\thirdofthreearguments} \setvalue{\@aa@\v!medium}{\secondofthreearguments} \setvalue{\@aa@\v!small }{\firstofthreearguments} \def\assignalfadimension#1#2#3#4#5% #3#4#5 are single digits {\edef#2{\ifcsname\@aa@#1\endcsname \csname\@aa@#1\expandafter\endcsname \else #1\expandafter\gobblethreearguments \fi#3#4#5}} %D \macros %D {assignvalue} %D %D Een variant hierop is het commando: %D %D \starttyping %D \assignvalue %D {|klein|middel|groot} %D {\macro} %D {waarde klein } %D {waarde middel} %D {waarde groot} %D \stoptyping %D %D Hierbij krijgt \type{\macro} een waarde afhankelijk van %D het meegegeven trefwoord: %D %D \startnarrower %D \startlines %D \type{klein }\qquad waarde klein %D \type{middel}\qquad waarde middel %D \type{groot }\qquad waarde groot %D \type{waarde}\qquad waarde %D \stoplines %D \stopnarrower %D %D Hier doet \type{geen} dus niet mee. \def\@av@{@av@} \letvalue{\@av@\v!big }\thirdofthreearguments \letvalue{\@av@\v!medium}\secondofthreearguments \letvalue{\@av@\v!small }\firstofthreearguments \def\assignvalue#1#2#3#4#5% {\edef#2{\ifcsname\@av@#1\endcsname \csname\@av@#1\expandafter\endcsname \else #1\expandafter\gobblethreearguments \fi{#3}{#4}{#5}}} %D \macros %D {assignwidth} %D %D Een breedte van een opgegeven tekst kan worden berekend en %D toegekend aan een \DIMENSION\ met: %D %D \starttyping %D \assignwidth %D {\dimension} %D {|passend|ruim} %D {tekst} %D \stoptyping %D %D Dit commando sluit, evenals de bovenstaande %D \type{\assign}||commando's, aan op de wijze waarop %D in de andere \CONTEXT||modules toekenningen %D plaatsvinden. Bij \type{ruim} wordt de gemeten breedte %D met 1~em vermeerderd. \def\assignwidth#1#2#3#4% {\doifelsenothing{#2} {\setbox\scratchbox\hbox{#3}% #1\wd\scratchbox} {\doifinsetelse{#2}{\v!fit,\v!broad} {\setbox\scratchbox\hbox{#3}% #1\wd\scratchbox \doif{#2}\v!broad{\advance#1 #4}}% {#1=#2}}}% \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-box.mkii0000644000175000017500000025700211754241457024341 0ustar norbertnorbert%D \module %D [ file=supp-box, %D version=1995.10.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Boxes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 some box manipulation macros. Some %D are quite simple, some are more advanced and when understood %D well, all can be of use. %D No longer generic, why bother. \writestatus{loading}{ConTeXt Support Macros / Boxes} \unprotect %D \macros %D {strutdp,strutht,strutwd} %D %D The next shortcuts save memory and keying. The width is %D normally zero points (if not, you're in trouble). These %D shortcuts can be used like a dimension, opposite to the %D core macros \type {\strutdepth} and alike, which are %D values. \def\strutdp{\dp\strutbox} \def\strutht{\ht\strutbox} \def\strutwd{\wd\strutbox} %D \macros %D {resetbox, emptybox} %D %D Let's start with an easy one. The next macro hides the %D ugly \type {@} in \type {\voidb@x}. \ifx\voidbox\undefined \newbox\voidbox \fi \ifx\voidb@x\undefined \let\voidb@x\voidbox \fi \def\emptybox {\box \voidbox} \def\unvoidbox {\unhbox\voidbox} \def\resetbox#1{\setbox#1\box\voidbox} %D \macros %D {nextdepth} %D %D Let's start with a rather simple declaration. Sometimes we %D need to save the \TEX\ \DIMENSION\ \type{\prevdepth} and %D append it later on. The name \type{\nextdepth} suits %D this purpose well. \newdimen\nextdepth %D \macros %D {smashbox, smashedbox} %D %D Smashing is introduced in \PLAIN\ \TEX, and stands for %D reducing the dimensions of a box to zero. The most resolute %D one is presented first. \def\smashbox#1% {\wd#1\zeropoint \ht#1\zeropoint \dp#1\zeropoint} \def\smashboxed#1% {\smashbox{#1}% \box#1\relax} %D \macros %D {hsmashbox,vsmashbox} %D %D Smashing can be used for overlaying boxes. Depending on %D the mode, horizontal or vertical, one can use: \def\hsmashbox#1% {\wd#1\zeropoint} \def\vsmashbox#1% {\ht#1\zeropoint \dp#1\zeropoint} %D The next implementation is less sensitive for spurious %D spaces. \newcount\registercount \def\smashbox {\afterassignment\dosmashbox\registercount} \def\dosmashbox {\wd\registercount\zeropoint \ht\registercount\zeropoint \dp\registercount\zeropoint} \def\smashedbox {\afterassignment\thesmashedbox\registercount} \def\thesmashedbox {\dosmashbox \box\registercount} \def\hsmashbox {\afterassignment\dohsmashbox\registercount} \def\dohsmashbox {\wd\registercount\zeropoint} \def\vsmashbox {\afterassignment\dovsmashbox\registercount} \def\dovsmashbox {\ht\registercount\zeropoint \dp\registercount\zeropoint} %D \macros %D {hsmash,vsmash, %D hsmashed,vsmashed} %D %D While the previous macros expected a \BOX, the next act on a %D content. They are some subtle differences betreen the smash %D and smashed alternatives. The later ones reduce all %D dimensions to zero. % Ok, but inefficient and/or catcode unsafe: % % \def\hsmash #1{\bgroup\setbox0=\normalhbox{#1}\hsmashbox0\box0\egroup} % \def\vsmash #1{\bgroup\setbox0=\normalvbox{#1}\vsmashbox0\box0\egroup} % \def\hsmashed#1{\bgroup\setbox0=\normalhbox{#1}\smashbox 0\box0\egroup} % \def\vsmashed#1{\bgroup\setbox0=\normalvbox{#1}\smashbox 0\box0\egroup} % % Better, but a waste of tokens: % % \def\hsmash {\bgroup\dowithnextbox{\hsmashbox\nextbox\flushnextbox\egroup}\normalhbox} % \def\vsmash {\bgroup\dowithnextbox{\vsmashbox\nextbox\flushnextbox\nextbox\egroup}\normalvbox} % \def\hsmashed{\bgroup\dowithnextbox{\smashbox \nextbox\flushnextbox\nextbox\egroup}\normalhbox} % \def\vsmashed{\bgroup\dowithnextbox{\smashbox \nextbox\flushnextbox\nextbox\egroup}\normalvbox} % % The best: \def\dosomesmash#1% (begin|end)group ipv (b|e)group ? {\bgroup\dowithnextbox{#1\nextbox\flushnextbox\egroup}} \def\hsmash {\dosomesmash\hsmashbox\normalhbox} \def\vsmash {\dosomesmash\vsmashbox\normalvbox} \def\hsmashed{\dosomesmash\smashbox \normalhbox} \def\vsmashed{\dosomesmash\smashbox \normalvbox} %D \macros %D {smashedhbox,smashedvbox} %D %D Also handy (all dimensions zeroed): %D %D \starttyping %D \smashedhbox to ... {...} %D \smashedvbox to ... {...} %D \stoptyping \def\dosmashedbox#1% %{#1\bgroup\dowithnextbox{\smashbox\nextbox\flushnextbox\egroup}#1} {#1\bgroup\dowithnextbox{\smashedbox\nextbox\egroup}#1} \def\smashedhbox{\dosmashedbox\hbox} \def\smashedvbox{\dosmashedbox\vbox} %D \macros %D {smash} %D %D This smash alternative takes an optional arg [whdtb] as %D well as is potentially catcode safer. It is needed by the %D math module (although the \type {\leavevmode} is not added %D here). \def\smash {\futurelet\nexttoken\dosmash} \def\dosmash {\ifx\nexttoken[\@EA\dodosmash\else\@EA\donosmash\fi} \def\donosmash {\dodosmash[hd]} \def\dodosmash[#1]% {\edef\@@smash{#1}\futurelet\nexttoken\dododosmash} \def\dododosmash % if needed we can avoid the \next {\ifmmode \def\next##1{\mathpalette\mathsm@sh{##1}}% \else\ifx\nexttoken\bgroup \let\next\finsm@sh \else \def\next##1{\finsm@sh{##1}}% \fi\fi \next} \def\mathsm@sh#1#2% redefined plain macro {\finsm@sh{$\mathsurround\zeropoint#1{#2}$}} \def\makesm@sh#1% redefined plain macro (handles t b h d w) {\if#1w\nextboxwd\zeropoint\else \if#1h\nextboxht\zeropoint\else \if#1d\nextboxdp\zeropoint\else \if#1t\nextboxht\zeropoint\else \if#1b\nextboxdp\zeropoint\fi\fi\fi\fi\fi} \def\finsm@sh % redefined plain macro {\dowithnextbox{\@EA\handletokens\@@smash\with\makesm@sh\flushnextbox}\normalhbox} %D \starttabulate[|l|l|] %D \NC w \NC \ruledhbox{\smash [w]{This is some great smashing, isn't it?}} \NC \NR %D \NC h \NC \ruledhbox{\smash [h]{This is some great smashing, isn't it?}} \NC \NR %D \NC d \NC \ruledhbox{\smash [d]{This is some great smashing, isn't it?}} \NC \NR %D \NC tb \NC \ruledhbox{\smash [tb]{This is some great smashing, isn't it?}} \NC \NR %D \NC whd \NC \ruledhbox{\smash[whd]{This is some great smashing, isn't it?}} \NC \NR %D \stoptabulate %D \macros %D {phantom, hphantom, vphantom, mathstrut} %D %D The next implementation of \type {\phantom} cum suis does %D not grab an argument in the non||math case, which is better. \unexpanded\def\phantom {\ph@nt\nextbox\nextbox\nextbox} \unexpanded\def\vphantom{\ph@nt\nextbox\nextbox\voidbox} \unexpanded\def\hphantom{\ph@nt\voidbox\voidbox\nextbox} %D Due to a complicated call to \type {\mathpallete} and %D thereby \type {\mathchoice}, the next macro looks ugly. %D We also take care of non||braced arguments. \def\ph@nt#1#2#3% {\def\doph@nt {\ifmmode \def\mathph@nt####1####2{\makeph@nt#1#2#3{$\mathsurround\zeropoint####1{####2}$}}% \def\nextph@nt{\mathpalette\mathph@nt}% \else\ifx\nextph@nt\bgroup \def\nextph@nt{\makeph@nt#1#2#3}% \else \def\nextph@nt####1{\makeph@nt#1#2#3{####1}}% \fi\fi \nextph@nt}% \futurelet\nextph@nt\doph@nt} \def\makeph@nt#1#2#3% {\begingroup \dowithnextbox {\setbox\scratchbox\null \ht\scratchbox\ht#1% \dp\scratchbox\dp#2% \wd\scratchbox\wd#3% \box\scratchbox \endgroup} \normalhbox} \let\finph@nt\undefined %D We also define plain's \type {\mathstrut}. \unexpanded\def\mathstrut{\vphantom{(}} %D \macros %D {getboxheight} %D %D Although often needed, \TEX\ does not support arithmics %D like: %D %D \starttyping %D \dimen0 = \ht0 + \dp0 %D \stoptyping %D %D so we implemented: %D %D \starttyping %D \getboxheight ... \of \box... %D \stoptyping %D %D For instance, %D %D \starttyping %D \getboxheight \dimen0 \of \box0 %D \getboxheight \someheight \of \box \tempbox %D \stoptyping %D %D The implementation is rather stupid: %D %D \starttyping %D \def\getboxheight#1\of#2\box#3% %D {#1\ht#3\advance#1\dp#3\relax} %D \stoptyping %D %D The next alternative is slightly more clever, since %D it accepts \type {{12}} as well as \type {12} as box %D number. \def\getboxheight#1\of#2\box#3% {\def\next{#1\dimexpr\ht\registercount+\dp\registercount\relax}% \afterassignment\next\registercount=#3} %D For a long time the following three macros were part of %D the grid snapping core module, but it makes more sense to %D have them here so that users can see them. %D %D \macros %D {getnoflines, getroundednoflines, getrawnoflines} %D %D Het commando \type{\getnoflines} converteert een hoogte %D (dimensie) in een aantal regels en kent dit toe aan %D \type{\noflines}. %D %D \starttyping %D \getnoflines{dimensie} %D \stoptyping %D %D Er wordt gedeeld door \type{\openlineheight} en een hoogte %D van~0pt komt overeen met 0~regels. The raw alternative %D does not round. %D For a long time we had: %D %D \starttyping %D \newcount\noflines %D \newdimen\noflinesheight %D %D \def\dogetnoflines#1#2% %D {\noflinesheight#2\relax %D \ifzeropt\noflinesheight % \ifdim\noflinesheight=\zeropoint %D \noflines\zerocount %D \else %D \divide\noflinesheight \openlineheight %D \noflines\noflinesheight %D #1\ifdim\noflines\openlineheight=#2\relax \else %D \advance\noflines\ifdim#2>\zeropoint\plusone\else\minusone\fi %D \fi\fi %D \fi} %D %D \def\getnoflines {\dogetnoflines\iftrue } % compensated %D \def\getrawnoflines{\dogetnoflines\iffalse} % no compensation %D \stoptyping %D %D A more recent variant is: \ifx\roundingeps\undefined \newdimen\roundingeps \roundingeps=10sp \fi \newcount\noflines \newdimen\noflinesheight % \def\getnoflines {\xdogetnoflines\plusone } % compensated % \def\getroundednoflines{\xdogetnoflines\plustwo } % rounded % \def\getrawnoflines {\xdogetnoflines\plusthree} % truncated % % \def\xdogetnoflines#1#2% % {\noflinesheight#2\relax % \ifzeropt\noflinesheight % \noflines\zerocount % \else\ifdim\noflinesheight>\zeropoint % \ifcase#1\or % \advance\noflinesheight-\roundingeps % \divide\noflinesheight\openlineheight % \noflines\noflinesheight % \advance\noflines\plusone % \or % \advance\noflinesheight\roundingeps % \divide\noflinesheight\openlineheight % \noflines\noflinesheight % \or % \advance\noflinesheight\roundingeps % \advance\noflinesheight.5\openlineheight % \divide\noflinesheight\openlineheight % \noflines\noflinesheight % \fi % \else % \ifcase#1\or % \advance\noflinesheight\roundingeps % \divide\noflinesheight\openlineheight % \noflines\noflinesheight % \advance\noflines\minusone % \or % \advance\noflinesheight-\roundingeps % \divide\noflinesheight\openlineheight % \noflines\noflinesheight % \or % \advance\noflinesheight-\roundingeps % \advance\noflinesheight-.5\openlineheight % \divide\noflinesheight\openlineheight % \noflines\noflinesheight % \fi % \fi\fi} \def\getnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount \else\ifdim\noflinesheight>\zeropoint \advance\noflinesheight-\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \advance\noflines\plusone \else \advance\noflinesheight\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \advance\noflines\minusone \fi\fi} \def\getroundednoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount \else\ifdim\noflinesheight>\zeropoint \advance\noflinesheight\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \else \advance\noflinesheight-\roundingeps \divide\noflinesheight\openlineheight \noflines\noflinesheight \fi\fi} \def\getrawnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount \else\ifdim\noflinesheight>\zeropoint \advance\noflinesheight\roundingeps \advance\noflinesheight.5\openlineheight \divide\noflinesheight\openlineheight \noflines\noflinesheight \else \advance\noflinesheight-\roundingeps \advance\noflinesheight-.5\openlineheight \divide\noflinesheight\openlineheight \noflines\noflinesheight \fi\fi} %D Let's proof that it works: %D %D \startbuffer %D \scratchdimen\dimexpr(3pt) \getnoflines\scratchdimen 1=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight) \getnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.1\lineheight) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.5\lineheight) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.9\lineheight) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3pt) \getnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3sp) \getnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight-3sp) \getnoflines\scratchdimen 10=\the\noflines \endgraf %D %D \scratchdimen\dimexpr(3pt) \getrawnoflines\scratchdimen 0=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.1\lineheight) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.5\lineheight) \getrawnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10.9\lineheight) \getrawnoflines\scratchdimen 11=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3pt) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight+3sp) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \scratchdimen\dimexpr(10\lineheight-3sp) \getrawnoflines\scratchdimen 10=\the\noflines \endgraf %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {determinenoflines} %D %D The next macro determines the number of lines and %D returns it it \type {\noflines}. The macro works %D reasonable well as long as the content can be unboxed. %D %D \starttyping %D \determinenoflines{test\\test} %D \determinenoflines{\bfd test\\test} %D \determinenoflines{\definedfont[Sans at 40pt]test\\test} %D \stoptyping \def\determinenoflines % can be mkiv'd {\bgroup \forgetall \let\crlf\endgraf \let\\\endgraf \dowithnextbox {\beginofshapebox \unvbox\nextbox \endofshapebox % \global\count1\zerocount % \reshapebox{\global\advance\count1\plusone}% % \egroup\noflines\count1 }% \scratchcounter\zerocount \reshapebox{\global\advance\scratchcounter\plusone}% \expandafter\egroup\expandafter\noflines\the\scratchcounter\relax }\vbox} %D \macros %D {doiftextelse, doiftext} %D %D When \type {\doifelse} cum suis hopelessly fail, for %D instance because we pass data, we can fall back on the next %D macro: %D %D \starttyping %D \doiftextelse {data} {then branch} {else branch} %D \doiftext {data} {then branch} %D \stoptyping \newif\iftrialtypesetting \def\doiftextelse#1% {\bgroup \setbox\scratchbox\normalhbox {\trialtypesettingtrue \ignorespaces#1\removeunwantedspaces}% \ifzeropt\wd\scratchbox \egroup\@EA\secondoftwoarguments \else \egroup\@EA\firstoftwoarguments \fi} \def\doiftext#1#2% {\doiftextelse{#1}{#2}\donothing} %D \macros %D {dowithnextbox,nextbox} %D %D Sometimes we want a macro to grab a box and do something %D on the content. One could pass an argument to a box, but %D this can violate the specific \CATCODES\ of its content and %D leads to unexpected results. The next macro treats the %D following braced text as the content of a box and %D manipulates it afterwards in a predefined way. %D %D The first argument specifies what to do with the content. %D This content is available in \type{\nextbox}. The second %D argument is one of \type{\hbox}, \type{\vbox} or %D \type{\vtop}. The third argument must be grouped with %D \type{\bgroup} and \type{\egroup}, \type{{...}} or can be %D a \type{\box} specification. %D %D In \CONTEXT\ this macro is used for picking up a box and %D treating it according to earlier specifications. We use for %D instance something like: %D %D \starttyping %D \def\getfloat% %D {\def\handlefloat{...\flushnextbox...} %D \dowithnextbox\handlefloat\normalvbox} %D \stoptyping %D %D instead of: %D %D \starttyping %D \def\getfloat#1% %D {...#1...} %D \stoptyping %D %D In this implementation the \type{\aftergroup} construction %D is needed because \type{\afterassignment} is executed inside %D the box. \ifx\nextbox\undefined \newbox\nextbox \fi \long\def\dowithnextbox#1% {\long\def\dodowithnextbox{#1}% \afterassignment\dododowithnextbox \setbox\nextbox} \def\dododowithnextbox {\aftergroup\dodowithnextbox} \long\def\dowithnextboxcs#1% {\let\dodowithnextbox#1% \afterassignment\dododowithnextbox \setbox\nextbox} \def\dododowithnextbox {\aftergroup\dodowithnextbox} %D So in fact we get: %D %D \starttyping %D \setbox\nextbox { \aftergroup\dodowithnextbox ... } %D \stoptyping %D %D or %D %D \starttyping %D \setbox\nextbox { ... } \dodowithnextbox %D \stoptyping %D %D A slower but more versatile implementation is: %D %D \starttyping %D \long\def\dowithnextbox#1#2% %D {\long\def\dodowithnextbox{#1}% %D \ifx#2\normalhbox %D \afterassignment\dododowithnextbox %D \else\ifx#2\normalvbox %D \afterassignment\dododowithnextbox %D \else\ifx#2\normalvtop %D \afterassignment\dododowithnextbox %D \else\ifx#2\normalvcenter %D \afterassignment\dododowithnextbox %D \else %D \afterassignment\dodowithnextbox %D \fi\fi\fi\fi %D \setbox\nextbox#2} %D \stoptyping %D %D This alternative also accepts \type{\box0} and alike, but %D we don't really need this functionality now. %D \macros %D {nextboxht,nextboxwd,nextboxdp,flushnextbox} %D %D The next couple of shortcuts saves us memory as well as %D \type {{}}'s in passing parameters. \def\nextboxht{\ht\nextbox} \def\nextboxwd{\wd\nextbox} \def\nextboxdp{\dp\nextbox} \def\flushnextbox{\box\nextbox} %D \macros %D {dowithnextboxcontent} %D %D But, occasionally we do need to pass some local settings %D without wanting to use additional grouping. Therefore we %D provide: %D %D \starttyping %D \dowithnextboxcontent{inside}{after}{box content} %D \stoptyping %D %D {\em todo: Search source for potential usage!} \long\def\dowithnextboxcontent#1#2% inside, after {\long\def\dodowithnextbox{#2}% \def\dododowithnextbox{#1\aftergroup\dodowithnextbox}% \afterassignment\dododowithnextbox \setbox\nextbox} %D Now we can redefine \type {\dowithnextbox} as follows: %D %D \starttyping %D \def\dowithnextbox{\dowithnextboxcontent\empty} %D \stoptyping %D %D But since this macro is used often and since this implementation %D is slower, we will not use that definition. % maybe: % % depending on the size of the action, about 10% faster % % \newtoks\nextboxtoks % % \def\dowithnextbox {\afterassignment\redowithnextbox\nextboxtoks} % \def\redowithnextbox {\afterassignment\dododowithnextbox\setbox\nextbox} % \def\dododowithnextbox{\aftergroup\dodowithnextbox} % \def\dodowithnextbox {\the\nextboxtoks} % % \long\def\dowithnextboxcontent#1% #2% inside, after % {\def\dododowithnextbox{#1\aftergroup\dodowithnextbox}% % \afterassignment\redowithnextboxcontent\nextboxtoks} % % \def\redowithnextboxcontent % {\afterassignment\dododowithnextbox\setbox\nextbox} %D \macros %D {llap, rlap, tlap, blap, clap} %D %D Some well known friends, but we implement them our own %D way. We want the macros to work in both math and text mode. \def\dodorlap{\normalhbox to \zeropoint{\flushnextbox\normalhss}\endgroup} \def\dodollap{\normalhbox to \zeropoint{\normalhss\flushnextbox}\endgroup} \def\dodoclap{\normalhbox to \zeropoint{\normalhss\flushnextbox\normalhss}\endgroup} \def\dorlap{\begingroup\dowithnextboxcs\dodorlap\normalhbox} \def\dollap{\begingroup\dowithnextboxcs\dodollap\normalhbox} \def\doclap{\begingroup\dowithnextboxcs\dodoclap\normalhbox} \def\domathclap{\mathpalette\dodomathclap} \def\dodomathclap#1#2{\doclap{$\mathsurround\zeropoint#1#2$}} \def\domathllap{\mathpalette\dodomathllap} \def\dodomathllap#1#2{\dollap{$\mathsurround\zeropoint#1#2$}} \def\domathrlap{\mathpalette\dodomathrlap} \def\dodomathrlap#1#2{\dorlap{$\mathsurround\zeropoint#1#2$}} \unexpanded\def\rlap{\mathortext\domathrlap\dorlap} \unexpanded\def\llap{\mathortext\domathllap\dollap} \unexpanded\def\clap{\mathortext\domathclap\doclap} \def\dodotlap{\normalvbox to \zeropoint{\normalvss\flushnextbox}\endgroup} \def\dodoblap{\normalvbox to \zeropoint{\flushnextbox\normalvss}\endgroup} \def\tlap{\begingroup\dowithnextboxcs\dodotlap\normalvbox} \def\blap{\begingroup\dowithnextboxcs\dodoblap\normalvbox} %D \macros %D {beginofshapebox, %D reshapebox, doreshapebox, %D flushshapebox, %D innerflushshapebox, %D shapebox, %D ifreshapingbox} %D %D The next utility macro originates from some linenumbering %D mechanism. Due to \TEX's advanced way of typesetting %D paragraphs, it's not easy to do things on a line||by||line %D basis. This macro is able to reprocess a given box and can %D act upon its vertical boxed components, such as lines. The %D unwinding sequence in this macro is inspired by a \NTG\ %D workshop of David Salomon in June 1992. %D %D First we have to grab the piece of text we want to act %D upon. This is done by means of the duo macros: %D %D \starttyping %D \beginofshapebox %D a piece of text %D \endofshapebox %D \stoptyping %D %D When all texts is collected, we can call \type{\reshapebox} %D and do something with it's vertical components. We can make %D as much passes as needed. When we're done, the box can be %D unloaded with \type{\flushshapebox}. The only condition in %D this scheme is that \type{\reshapebox} must somehow unload %D the \BOX\ \type{\shapebox}. %D %D An important aspect is that the content is unrolled %D bottom||up. The next example illustrates this maybe %D unexpected characteristic. %D %D \startbuffer %D \beginofshapebox %D \em \input tufte %D \endofshapebox %D %D \newcounter\LineNumber %D %D \reshapebox %D {\doglobal\increment\LineNumber %D \normalhbox{\llap{\LineNumber\hskip2em}\box\shapebox}} %D %D \flushshapebox %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D As we can see, when some kind of numbering is done, we have %D to add a second pass. %D %D \startbuffer %D \newcounter\LineNumber %D \newcounter\NumberOfLines %D %D \reshapebox %D {\doglobal\increment\NumberOfLines %D \box\shapebox} %D %D \reshapebox %D {\doglobal\increment\LineNumber %D \normalhbox %D {\llap{\LineNumber\ (\NumberOfLines)\hskip2em}% %D \box\shapebox}% %D \doglobal\decrement\NumberOfLines} %D %D \flushshapebox %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D This example shows that the content of the box is still %D available after flushing. Another feature is that only the %D last reshaping counts. Multiple reshaping can be done by: %D %D \startbuffer %D \beginofshapebox %D \flushshapebox %D \endofshapebox %D %D \reshapebox %D {\doglobal\increment\LineNumber %D \normalhbox{\llap{$\star$\hskip1em}\box\shapebox}% %D \doglobal\decrement\NumberOfLines} %D %D \flushshapebox %D \stopbuffer %D %D \typebuffer %D %D \getbuffer %D %D The macros are surprisingly easy to follow and in fact %D introduce no new concepts. Nearly all books on \TEX\ show %D similar solutions for unwinding \BOXES. %D %D Some macros, like footnote ones, can be sensitive for %D reshaping, which can result in an endless loop. We %D therefore offer: %D %D \starttyping %D \ifreshapingbox %D \stoptyping %D %D Some \CONTEXT\ commands are protected this way. Anyhow, %D reshaping is aborted after 100 dead cycles. %D %D By the way, changing the height and depth of \BOX\ %D \type{\shapebox} results in bad spacing. This means that %D for instance linenumbers etc. should be given zero height %D and depth before being lapped into the margin. The %D previous examples ignore this side effect, but beware! \newif \ifsomeshapeleft \newif \ifreshapingbox \newbox \shapebox \newcount \shapepenalty \newdimen \shapekern \newskip \shapeskip \newbox \newshapebox \newbox \oldshapebox \newcount \shapecounter \newevery \everyshapebox \relax \def\shapesignal{.12345678pt} % or 12345sp % todo: in etex lastnode \def\reshapebox#1% {\doreshapebox {#1}% {\penalty\shapepenalty}% {\kern \shapekern }% {\vskip \shapeskip }} \newbox\tmpshapebox \newif\ifreshapingfailed % may save redundant runs \def\doreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip {\global\reshapingfailedfalse \ifzeropt\ht\oldshapebox % \ifdim\ht\oldshapebox=\zeropoint \setbox\newshapebox\normalvbox{}% \else \setbox\newshapebox\normalvbox {\unvcopy\oldshapebox \resetbox\newshapebox \shapecounter\zerocount \doloop{\dodoreshapebox{#1}{#2}{#3}{#4}}}% \setbox\newshapebox\box\tmpshapebox \fi} \ifx\originalshapebox\undefined \let\originalshapebox\oldshapebox \fi % %D The old traditional tex variant: % % \def\insertshapesignal % {\normalhbox to \shapesignal{\strut\hss}% plus \strut % \prevdepth\strutdp} % never \nointerlineskip % % \def\restoreshapebox % compensates for the signal % {\global\setbox\tmpshapebox\vbox{\vskip-\lineheight\unvcopy\oldshapebox}} % % \def\shapeboxstrut % put this in front if needed ! % {\vrule\!!width\zeropoint\!!height\ht\shapebox\!!depth\dp\shapebox} % % \def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip % {\ifzeropt\lastskip % \ifdim\lastskip=\zeropoint\relax % \ifzeropt\lastkern % \ifdim\lastkern=\zeropoint\relax % \ifcase\lastpenalty % \ifnum\lastpenalty=\zerocount % \setbox\shapebox\lastbox % \ifvoid\shapebox % \unskip\unpenalty\unkern % \else % \ifdim\wd\shapebox=\shapesignal\relax % \exitloop % \else % \shapecounter\zerocount % \global\setbox\tmpshapebox\normalvbox{#1\unvbox\tmpshapebox}% % \fi % \fi % \else % \shapepenalty\lastpenalty % \global\setbox\tmpshapebox\normalvbox{#2\unvbox\tmpshapebox}% % \unpenalty % \fi % \else % \shapekern\lastkern % \global\setbox\tmpshapebox\normalvbox{#3\unvbox\tmpshapebox}% % \unkern % \fi % \else % \shapeskip\lastskip % \global\setbox\tmpshapebox\normalvbox{#4\unvbox\tmpshapebox}% % \unskip % \fi % \ifnum\shapecounter>100 % can be less % \global\reshapingfailedtrue % \message{!!forced exit from shapebox!!}% % \restoreshapebox % \exitloop % \else % \advance\shapecounter \plusone % \fi} % % But now that the lastnode bugfixes are wide spread we can use: % % We will turn this into a \MKIV\ variant. \def\insertshapesignal {\normalhbox to \shapesignal{\strut\hss}% plus \strut \prevdepth\strutdp} % never \nointerlineskip \def\restoreshapebox % compensates for the signal {\global\setbox\tmpshapebox\vbox{\vskip-\lineheight\unvcopy\oldshapebox}} \def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip {\ifnum\lastnodetype=\@@gluenode \shapeskip\lastskip \global\setbox\tmpshapebox\normalvbox{#4\unvbox\tmpshapebox}% \unskip \else\ifnum\lastnodetype=\@@kernnode \shapekern\lastkern \global\setbox\tmpshapebox\normalvbox{#3\unvbox\tmpshapebox}% \unkern \else\ifnum\lastnodetype=\@@penaltynode \shapepenalty\lastpenalty \global\setbox\tmpshapebox\normalvbox{#2\unvbox\tmpshapebox}% \unpenalty \else\ifnum\lastnodetype<\zeropoint \exitloop \else \setbox\shapebox\lastbox \ifvoid\shapebox \else\ifdim\wd\shapebox=\shapesignal\relax \exitloop \else \shapecounter\zerocount \global\setbox\tmpshapebox\normalvbox{#1\unvbox\tmpshapebox}% \fi\fi \fi\fi\fi\fi \ifnum\shapecounter>100 % can be less \global\reshapingfailedtrue \message{!!forced exit from shapebox \the\lastnodetype !!}% \restoreshapebox \exitloop \else \advance\shapecounter \plusone \fi} \def\beginofshapebox {\setbox\oldshapebox\normalvbox \bgroup \reshapingboxtrue \the\everyshapebox \insertshapesignal} \def\endofshapebox {\endgraf \egroup} \let\beginshapebox\beginofshapebox \let\endshapebox \endofshapebox \def\flushshapebox {\bgroup \ifzeropt\ht\newshapebox % \ifdim\ht\newshapebox=\zeropoint \else % make \prevdepth legal % \par before the next \vskip gives far worse results \ifdim\parskip>\zeropoint\vskip\parskip\else\par\fi % and take a look \ifdim\prevdepth=-\thousandpoint \prevdepth\zeropoint \fi \ifdim\prevdepth<\zeropoint\relax % something like a line or a signal or ... \donetrue \else\ifinner % not watertight and not ok \donefalse \else\ifdim\pagegoal=\maxdimen \donetrue \else % give the previous line a normal depth \donetrue {\forgeteverypar\verticalstrut}\nobreak \kern-\struttotal % geen \vskip \kern-\parskip % \vskip-\strutdp \fi\fi\fi \scratchdimen\dp\newshapebox \unvbox\newshapebox % \prevdepth=0pt and \dp\newshapebox depend on last line \kern-\scratchdimen % ?? % now \prevdepth=0pt \ifdone \kern\strutdp \prevdepth\strutdp \fi \fi \egroup} %D In real inner situations we can use: %D %D \starttyping %D \flushinnershapebox %D \stoptyping %D %D This one is used in \type{\framed}. % The kern fails on for instance: % % \omlijnd[offset=0pt,hoogte=8mm,uitlijnen={rechts,laho}]{\bfa test} \def\innerflushshapebox {\ifzeropt\ht\newshapebox \else \unvcopy\newshapebox\relax % unvcopy ! else spacing problem % \kern-\dp\newshapebox\relax \fi} %D For absolute control, one can use \type{\doreshapebox} %D directly. This macro takes four arguments, that take care %D of: %D %D \startitemize[n,packed] %D \item \type{\shapebox} %D \item \type{\shapepenalty} %D \item \type{\shapekern} %D \item \type{\shapeskip} %D \stopitemize %D \macros %D {shapedhbox} %D %D When constructing a new box, using the content of \type %D {\shapebox}, one can best use \type {\shapedhbox} instead %D of \type {\normalhbox}, since it manages the height and depth of %D the line. % \def\shapedhbox % {\dowithnextbox % {\nextboxht\zeropoint % \nextboxdp\zeropoint % \flushnextbox} % \normalhbox} \def\shapedhbox % lines with non strutted dimensions have {\expanded{\dowithnextbox % interlineskip so if we want the original {\nextboxht\the\ht\shapebox % spacing, we need to preserve the original \nextboxdp\the\dp\shapebox % height and depth which is definitely \noexpand\flushnextbox}} % needed if we apply struts to the 'new' \normalhbox} % box or do something that changed ist size %D \macros %D {hyphenatedword, %D hyphenatedpar, %D hyphenatedfile, %D dohyphenateword} %D %D The next one is a tricky one. \PLAIN\ \TEX\ provides %D \type{\showhyphens} for showing macros on the terminal. When %D preparing a long list of words we decided to show the %D hyphens, but had to find out that the \PLAIN\ alternative %D can hardly be used and|/|or adapted to typesetting. The next %D two macros do the job and a little more. First we define the %D (slightly adapted) plain variant: \def\showhyphens#1% {\begingroup \setbox\scratchbox\vbox {\parfillskip\zerocount \hsize\maxdimen %\tenrm \pretolerance\minusone \tolerance\minusone \hbadness\zerocount \showboxdepth\zerocount \ #1}% \endgroup} %D The simple command \type{\hyphenatedword} accepts one %D argument and gives the hyphenated word. This macro calls for %D %D \starttyping %D \dohyphenateword {n} {pre} {word} %D \stoptyping %D %D The next examples tell more than lots of words: %D %D \startbuffer %D \dohyphenateword{0} {} {dohyphenatedword} %D \dohyphenateword{1} {...} {dohyphenatedword} %D \dohyphenateword{2} {...} {dohyphenatedword} %D \stopbuffer %D %D \typebuffer %D %D Here, \type{\hyphenatedword{dohyphenatedword}} is the %D shorter alternative for the first line. %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D These macros are slow but effective and not that hard to %D program at all. \ifx\scantokens\undefined \let\scantokens\firstofoneargument \fi \def\dohyphenateword#1#2#3% {\bgroup \setbox\scratchbox\normalhbox {\dontcomplain \nopenalties % \widowpenalty \clubpenalty \brokenpenalty \doublehyphendemerits \finalhyphendemerits \adjdemerits \hyphenpenalty \zerocount \exhyphenpenalty\zerocount \setbox0\normalvbox {\hsize\zeropoint \hskip\zeropoint\relax % really needed \ifnum#1<\zeropoint \obeyspaces \obeylines \def\obeyedspace{\hskip\zeropoint\hbox to \onepoint{}\hskip\zeropoint}% \let\obeyedline \obeyedspace \ifcase-#1\or \def\next{#3\relax}\scantokens\expandafter{\next}% relax catches lookahead problem % also ok: \scantokens{#3}% % as in \hyphenatedword{spanish|?|} \or \readfile{#3}\donothing\donothing \else #3% \fi \else #3% \fi}% \ifnum#1>\zerocount \dorecurse{#1} {\setbox2\normalhbox {\splittopskip\openstrutheight \vsplit0 to \baselineskip}}% #2% \fi \doloop {\setbox2\normalhbox {\splittopskip\openstrutheight \vsplit0 to \baselineskip}% \setbox2\normalhbox {\unhbox2 \setbox2\lastbox \normalvbox {\unvbox2 \setbox2\lastbox \normalhbox{\unhbox2}}}% \ifnum#1<\zeropoint\ifdim\wd2=\onepoint\space\else\box2\allowbreak\fi\else\box2\fi \ifzeropt\ht0 \exitloop\fi}% % \ifdim\ht0=\zeropoint\exitloop\fi}% \removeunwantedspaces}% \ifnum#1>\zerocount \ht\scratchbox\strutht \dp\scratchbox\strutdp \box\scratchbox \else \unhbox\scratchbox \fi \egroup} \def\hyphenatedword{\dohyphenateword\zerocount\empty} \def\hyphenatedpar {\dohyphenateword\minusone \empty} \def\hyphenatedfile{\dohyphenateword{-2}\empty} %D You may want to give the following call a try: %D %D \starttyping %D \hyphenatedpar{\readfile{zapf}{}{}}\endgraf %D \stoptyping %D \macros %D {processtokens} %D %D We fully agree with (most) typographers that inter||letter %D spacing is only permitted in fancy titles, we provide a %D macro that can be used to do so. Because this is %D (definitely and fortunately) no feature of \TEX, we have to %D step through the token list ourselves. %D %D \starttyping %D \processtokens {before} {between} {after} {space} {tokens} %D \stoptyping %D %D An example of a call is: %D %D \startbuffer %D \processtokens {[} {+} {]} {\space} {hello world} %D \stopbuffer %D %D \typebuffer %D %D This results in: %D %D \getbuffer %D %D The list of tokens may contain spaces, while \type{\\}, %D \type{{}} and \type{\ } are handled as space too. \def\dodoprocesstokens {\ifx\nextprocessedtoken\lastcharacter \after \let\nextprocessedtoken\relax \else\ifx\nextprocessedtoken\bgroup \def\nextprocessedtoken {\dowithnextbox {\before{\copy\nextbox}% \before can use nextbox several times \let\before\between \doprocesstokens} \hbox\bgroup}% \else \expandafter\if\space\nextprocessedtoken \after\white \let\before\savedbefore \else \before\nextprocessedtoken \let\before\between \fi \let\nextprocessedtoken\doprocesstokens \fi\fi \nextprocessedtoken} \def\doprocesstokens% the space after = is essential {\afterassignment\dodoprocesstokens\let\nextprocessedtoken= } \def\processtokens#1#2#3#4#5% {\begingroup \def\lastcharacter{\lastcharacter}% \def\space{ }% \let\\=\space \def\before {#1}% \def\between{#2}% \def\after {#3}% \def\white {#4}% \let\savedbefore\before \doprocesstokens#5\lastcharacter \endgroup} %D \macros %D {doboundtext} %D %D Sometimes there is not enough room to show the complete %D (line of) text. In such a situation we can strip of some %D characters by using \type{\doboundtext}. When the text is %D wider than the given width, it's split and the third %D argument is appended. When the text to be checked is packed %D in a command, we'll have to use \type{\expandafter}. %D %D \starttyping %D \doboundtext{a very, probably to long, text}{3cm}{...} %D \stoptyping %D %D When calculating the room needed, we take the width of the %D third argument into account, which leads to a bit more %D complex macro than needed at first sight. % \def\dodoboundtext#1% % {\setbox0=\normalhbox{\unhcopy0 #1}% % \ifdim\wd0>\dimen0 % \let\dodoboundtext=\gobbleoneargument % \else % #1\relax % \fi} % % \def\doboundtext#1#2#3% % {\normalhbox % {\setbox0=\normalhbox{#1}% % \dimen0=#2\relax % \ifdim\wd0>\dimen0 % \setbox2=\normalhbox{#3}% % \advance\dimen0 by -\wd2 % \setbox0=\normalhbox{}% % \processtokens % {\dodoboundtext} % {\dodoboundtext} % {} % {\space} % {#1}% % \box2 % \else % \box0 % \fi}} \def\dodoboundtext#1% {\setbox0\normalhbox{#1}% \advance\scratchdimen -\wd0 \ifdim\scratchdimen>\zeropoint\relax#1\fi}% \def\doboundtext#1#2#3% {\normalhbox {\setbox\scratchbox\normalhbox{#1}% \scratchdimen#2\relax \ifdim\wd\scratchbox>\scratchdimen \setbox\scratchbox\normalhbox{#3}% \advance\scratchdimen -\wd\scratchbox \handletokens#1\with\dodoboundtext \fi \box\scratchbox}} %D \macros %D {limitatetext} %D %D A bit more beautiful alternative for the previous command is %D the next one. This command is more robust because we let %D \TEX\ do most of the job. The previous command works better %D on text that cannot be hyphenated. %D %D \starttyping %D \limitatetext {text} {width} {sentinel} %D \limitatetext {text} {-width} {prelude} %D \stoptyping %D %D When no width is given, the whole text comes available. The %D sentinel is optional. This is about the third version. \ifx\fakecompoundhyphen\undefined \let\fakecompoundhyphen\relax \fi \ifx\veryraggedright \undefined \def\veryraggedright{\raggedright} \fi %D The simple alternative is as follows: %D %D \starttyping %D \unexpanded\def\limitatetext% %D {\bgroup % evt \setstrut %D \forgetall %D \fakecompoundhyphen % dangerous ! ! ! ! ! ! ! ! ! %D \dowithnextbox\dolimitatetext\normalhbox} %D %D \def\dolimitatetext#1#2% %D {\doifelsenothing{#1} %D {\unhbox\nextbox} %D {\widowpenalty=0 %D \clubpenalty=0 %D \scratchdimen=#1\relax %D \ifdim\nextboxwd>\scratchdimen %D \setbox\scratchbox=\normalhbox{ #2}% %D \advance\scratchdimen by -\wd\scratchbox %D \setbox\nextbox=\normalvbox %D {\hsize=\scratchdimen %D \hfuzz\maxdimen %D \veryraggedright %D \strut\unhcopy\nextbox}% %D \ifdim\nextboxht>\strutht \else %D \setbox\scratchbox\null % overfull and not split %D \fi %D \setbox\nextbox=\normalvbox % if omitted: missing brace reported %D {\splittopskip=\openstrutheight %D \setbox\nextbox=\vsplit\nextbox to \strutht %D \unvbox\nextbox %D \setbox\nextbox=\lastbox %D \global\setbox1=\normalhbox %D {\unhbox\nextbox\unskip\kern\zeropoint\box\scratchbox\unskip}}% %D \unhbox1 %D \else %D \unhbox\nextbox %D \fi}% %D \egroup} %D \stoptyping %D %D The next alternative accepts a negative width. A negative %D value crops the beginning. The macro thereby becomes less %D readable, which is why we kept the original here too. \unexpanded\def\limitatetext {\bgroup % evt \setstrut \forgetall % otherwise indentation and so %\def\limitatetext##1##2##3{##1}% \def ! \let\limitatetext\firstofthreearguments \fakecompoundhyphen % dangerous ! ! ! ! ! ! ! ! ! \dowithnextboxcs\dolimitatetext\normalhbox} \def\dolimitatetext#1#2% {\doifelsenothing{#1} {\unhbox\nextbox} {\nopenalties \scratchdimen#1\relax \ifdim\scratchdimen<\zeropoint\relax % we'll take the last line \donefalse \scratchdimen-\scratchdimen \else \donetrue \fi \ifdim\nextboxwd>\scratchdimen \setbox\scratchbox\normalhbox{\ifdone\space#2\else#2\space\fi}% \advance\scratchdimen -\wd\scratchbox \setbox0\flushnextbox \setbox\nextbox\normalvbox {\hsize\scratchdimen \hfuzz\maxdimen \veryraggedright \strut \ifdone \else \parfillskip\zeropoint \rightskip\zeropoint \hskip\zeropoint \!!plus 1\!!fill % \hsize \fi \unhcopy0}% \ifdim\nextboxht>\strutht \setbox\nextbox\normalvbox % if omitted: missing brace reported {\splittopskip\openstrutheight \ifdone \setbox\nextbox\vsplit\nextbox to \strutht \else \doloop {\setbox0\vsplit\nextbox to \strutht \ifdim\nextboxht>\strutht \else \exitloop \fi}% \fi \unvbox\nextbox \setbox\nextbox\lastbox \global\setbox1\normalhbox {\ifdone \unhbox\nextbox\unskip\kern\zeropoint\box\scratchbox \else \box\scratchbox\unhbox\nextbox \fi \unskip}}% \unhbox1 \else \unhbox0 \fi \else \unhbox\nextbox \fi}% \egroup} %D We can also limit a text with more control: %D %D \startbuffer %D \limitatetext {\input tufte } {2cm,5mm} {\unknown} %D \limitatetext {ton en hans} {2cm,5mm} {\unknown} %D \limitatetext {ton en hans zijn eikels} {2cm,5mm} {\unknown} %D \limitatetext {ton} {2cm,5mm} {\unknown} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D We build this feature on top of the previous macro. \let\normallimitatetext\limitatetext \def\speciallimitatetext#1#2#3#4% text left right placeholder {%\dontleavehmode \bgroup %\def\speciallimitatetext##1##2##3##4{##1}% \def ! \let\speciallimitatetext\firstoffourarguments \setbox0\normalhbox {\nohyphens \normallimitatetext{#1}{+#2}{}#4% \normallimitatetext{#1}{-#3}{}}% \setbox2\normalhbox {#1}% \ifdim\wd2<\wd0 #1\else\unhbox0\fi \egroup} \def\limitatetext#1#2#3% \expanded added 2003/01/16 {\expanded{\beforesplitstring#2}\at,\to\leftlimit \expanded{\aftersplitstring #2}\at,\to\rightlimit \ifx\rightlimit\empty \normallimitatetext {#1}\leftlimit {#3}% \else \speciallimitatetext{#1}\leftlimit\rightlimit{#3}% \fi} %D Undocumented bonus (see wiki): %D %D \starttyping %D \limitatefirstline{\input tufte\relax}{10cm}{\unknown} %D \stoptyping \def\limitatefirstline#1#2#3% {\hbox\bgroup\strut \setbox\scratchbox\hbox{\begstrut#1\endstrut}% \ifdim\wd\scratchbox>#2\relax \setbox\scratchbox\hbox{#3}% \hsize#2\relax \advance\hsize-\wd\scratchbox \setbox\scratchbox\vbox{\forgetall\veryraggedright#1}% \setbox\scratchbox\vsplit\scratchbox to \lineheight \vbox {\unvbox\scratchbox \global\setbox\plusone\lastbox \global\setbox\plusone\hbox{\strut\unhbox\plusone}% \hbox % to #2 {\ifx\clip\undefined \box\plusone \else\ifdim\wd\plusone>\hsize \lower\strutdepth\hbox{\clip[\c!width=\hsize,\c!height=\lineheight]{\hbox{\raise\strutdepth\box\plusone}}}% \else \box\plusone \fi\fi \removeunwantedspaces#3}}% \removeunwantedspaces\hss#3}}% \else #1% \fi \egroup} %D \macros %D {processisolatedwords, %D betweenisolatedwords,nothingbetweenisolatedwords} %D %D References are often made up of one word or a combination %D of tightly connected words. The typeset text {\bf %D chapter~5} is for instance the results of the character %D sequence: %D %D \starttyping %D The typeset text \in{chapter}[texniques] is for instance %D \stoptyping %D %D When such words are made active in interactive texts, the %D combination cannot longer be hyphenated. Normally this is no %D problem, because \TEX\ tries to prevent hyphenation as best %D as can. %D %D Sometimes however we need a few more words to make things %D clear, like when we want to refer to {\bf \TEX\ by Topic}. %D The macros that are responsible for typesetting hyperlinks, %D take care of such sub||sentences by breaking them up in %D words. Long ago we processed words using the space as a %D separator, but the more advanced our interactive text became, %D the more we needed a robust solution. Well, here it is and %D it called as: %D %D \starttyping %D \processisolatedwords{some words}\someaction %D \stoptyping %D %D The second argument \type{someactions} handles the %D individual words, like in: %D %D \startbuffer %D \processisolatedwords{some more words} \ruledhbox \par %D \processisolatedwords{and some $x + y = z$ math} \ruledhbox \par %D \processisolatedwords{and a \normalhbox{$x + y = z$}} \ruledhbox \par %D \stopbuffer %D %D \typebuffer %D %D which let the words turn up as: %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D The macro has been made a bit more clever than needed at %D first sight. This is due to the fact that we don't want to %D generate more overhead in terms of interactive commands than %D needed. %D %D \startbuffer %D \processisolatedwords{see this \ruledhskip1em} \ruledhbox %D \processisolatedwords{and \ruledhskip1em this one} \ruledhbox %D \stopbuffer %D %D \typebuffer %D %D becomes: %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D Single word arguments are treated without further %D processing. This was needed because this command is used in %D the \type{\goto} command, to which we sometimes pass very %D strange and|/|or complicated arguments or simply boxes %D whose dimensions are to be left intact. %D %D First we build a \type{\normalhbox}. This enables us to save the %D last skip. Next we fill a \type{\normalvbox} without hyphenating %D words. After we've tested if there is more than one word, we %D start processing the individual lines (words). We need some %D splitting, packing and unpacking to get the spacing and %D dimensions right. %D %D Normally the isolated words are separated by space, but %D one can overrule this separator by changing the next macros. %D %D When needed, spacing can be suppressed by \type %D {\nothingbetweenisolatedwords}. \newif\ifisolatedwords % public, e.g. used in core-ref \def\betweenisolatedwords {\hskip\currentspaceskip} %D In order to prevent problems with nested isolated words, we %D do process them, but only split at the outermost level. \newskip\isolatedlastskip \chardef\isolatedwordsmode=0 % no nesting \def\processisolatedwords#1#2% todo: vbox ipv hbox ivm afbreken! {\bgroup % todo: doloop \fakecompoundhyphen \dontcomplain \forgetall \nopenalties \ifcase\isolatedwordsmode \def\processisolatedwords##1##2{##2{##1}}% we split only once \fi \global\let\localbetweenisolatedwords\betweenisolatedwords \setbox0\normalhbox % we default to spaces, but from inside out {\normallanguage\minusone % needed for mkiv \ignorespaces#1% \localbetweenisolatedwords can be overruled \global\isolatedlastskip\lastskip}% \setbox2\normalvbox {%\hyphenpenalty10000 % this one fails in \url breaking, \lefthyphenmin\maxcard % but this trick works ok, due to them \righthyphenmin\maxcard % total>63, when no hyphenation is done \hsize\zeropoint \unhcopy0}% == #1 \ifdim\ht0=\ht2 \isolatedwordsfalse #2{\unhbox0}% == #2{#1} % was \unhcopy0 \else \isolatedwordstrue \setbox0\normalhbox {\ignorespaces \loop \setbox4\normalhbox {\splittopskip\openstrutheight \vsplit2 to \baselineskip}% \normalhbox {\unhbox4\unskip % recently added \setbox4\lastbox \normalvbox % outer \normalhbox needed {\unvbox4 % for nested use \setbox4\lastbox \normalhbox{#2{\normalhbox {\unhbox4 \unskip\unpenalty % remove end of line stuff \global\dimen1\lastkern}}}}}% \ifdim\ht2>\zeropoint\relax \ifdim\dimen1=\compoundbreakpoint \allowbreak \else \localbetweenisolatedwords \fi \repeat \unskip}% \unhbox0\unskip \ifzeropt\isolatedlastskip\else % added % \ifdim\isolatedlastskip=\zeropoint\else % added \hskip\isolatedlastskip \fi \fi \egroup} %D One can use the next macro to change the intersplit %D material. An example can be found in the \type {\url} %D macro. The innermost setting is used. In the url case, it %D means that either very small spaces are used or no spaces %D at all. So, the innermost settings are used, while the %D outermost split takes place. \def\setbetweenisolatedwords#1% {\gdef\localbetweenisolatedwords{#1}} %D \macros %D {sbox} %D %D This is a rather strange command. It grabs some box content %D and and limits the size to the height and depth of a %D \type{\strut}. The resulting bottom||alligned box can be used %D aside other ones, without disturbing the normal baseline %D distance. %D %D \startbuffer %D \ruledhbox to .5\hsize{\sbox{eerste\par tweede \par derde}} %D \stopbuffer %D %D \typebuffer %D %D Shows up as: %D %D \startvoorbeeld %D \vskip3\baselineskip %D \getbuffer %D \stopvoorbeeld %D %D Before displaying the result we added some skip, otherwise %D the first two lines would have ended up in the text. This %D macro can be useful when building complicated menus, headers %D and footers and|/|or margin material. \def\sbox% in handleiding, voorbeeld \inleft{xx} \extern.. {\normalvbox\bgroup % new ! ! ! \dowithnextbox {\setbox\scratchbox\normalhbox {\strut \nextboxdp\zeropoint \lower\strutdepth\flushnextbox}% \dp\scratchbox\strutdepth \ht\scratchbox\strutheight \box\scratchbox \egroup}% \normalvbox} %D \macros %D {struttedbox} %D %D This boxing macro limits the height and depth to those of %D a strut. \def\struttedbox {\normalhbox\bgroup % new ! ! ! \dowithnextbox {\nextboxdp\strutdepth \nextboxht\strutheight \flushnextbox \egroup}% \normalhbox} %D \macros %D {topskippedbox} %D %D This macro compensates the difference between the topskip %D and strutheight. Watch how we preserve the depth when it %D equals strutdepth. \def\topskippedbox {\normalhbox\bgroup \dowithnextbox {\edef\next {\ifdim\strutdepth=\nextboxdp\nextboxdp\the\nextboxdp\fi}% \lower\topskip\normalhbox{\raise\strutheight\flushnextbox}% \next \egroup}% \normalhbox} %D \macros %D {centeredbox, centerednextbox} %D %D Here is another strange one. This one offers a sort of overlay %D with positive or negative offsets. This command can be used %D in well defined areas where no offset options are available. %D We first used it when building a button inside the margin %D footer, where the button should have a horizontal offset and %D should be centered with respect to the surrounding box. The %D last of the three examples we show below says: %D %D \starttyping %D \vsize=3cm %D \hsize=3cm %D \ruledvbox to \vsize %D {\centeredbox height .5cm width -1cm %D {\vrule width \hsize height \vsize}}} %D \stoptyping %D %D Here the \type{\ruledvbox} just shows the surrounding box %D and \type{\vrule} is used to show the centered box. %D %D \def\AnExample#1#2% %D {\vsize=3cm %D \hsize=3cm %D \ruledvbox to \vsize %D {\centeredbox height #1 width #2 %D {\color[green]{\vrule width \hsize height \vsize}}}} %D %D \startlinecorrection %D \startcombination[3*1] %D {\AnExample {-1cm} {.5cm}} {} %D {\AnExample {.5cm} {-1cm}} {} %D {\AnExample {-1cm} {-.5cm}} {} %D \stopcombination %D \stoplinecorrection %D %D This command takes two optional arguments: \type{width} and %D \type{height}. Observing readers can see that we use \TEX's %D own scanner for grabbing these arguments: \type{#1#} reads %D everyting till the next brace and passes it to both rules. %D The setting of the box dimensions at the end is needed for %D special cases. The dimensions of the surrounding box are kept %D intact. This commands handles positive and negative %D dimensions (which is why we need two boxes with rules). \def\centeredbox#1#% height +/-dimen width +/-dimen {\bgroup \setbox0\normalvbox to \vsize \bgroup \dontcomplain \forgetall \setbox0\normalhbox{\vrule\!!width \zeropoint#1}% \setbox2\normalvbox{\hrule\!!height\zeropoint#1}% \advance\vsize \ht2 \advance\hsize \wd0 \normalvbox to \vsize \bgroup \vskip-\ht2 \vss \normalhbox to \hsize \bgroup \dowithnextbox {\hskip-\wd0 \hss \flushnextbox \hss \egroup \vss \egroup \egroup \wd0\hsize \ht0\vsize \box0 \egroup} \normalhbox} %D For those who don't want to deal with \type {\hsize} %D and \type {\vsize}, we have: %D %D \starttyping %D \centerednextbox width 2bp height 2bp %D {\framed[width=100bp,height=100bp]{}} %D \stoptyping %D %D Do you see what we call this one \type {next}? \def\centerednextbox#1#% {\bgroup \dowithnextbox {\hsize\nextboxwd \vsize\nextboxht \centeredbox#1{\flushnextbox}% \egroup} \normalhbox} %D \macros %D {centerbox} %D %D Centering on the available space is done by: %D %D \starttyping %D \centerbox {content} %D \stoptyping %D %D When omitted, the current \type {\hsize} and \type %D {\vsize} are used. Local dimensions are supported. \long\def\centerbox#1#% optional height +/-dimen width +/-dimen {\bgroup \dowithnextbox {\setlocalhsize \setbox0\normalhbox{\vrule\!!width \zeropoint#1}% \setbox2\normalvbox{\hrule\!!height\zeropoint#1}% \ifzeropt\wd0\else\hsize\wd0\fi % \hsize\ifdim\wd0=\zeropoint\hsize\else\wd0\fi \ifzeropt\ht2\else\vsize\ht2\fi % \vsize\ifdim\ht2=\zeropoint\vsize\else\ht2\fi \normalvbox to \vsize{\vss\normalhbox to \hsize{\hss\flushnextbox\hss}\vss}% \egroup}% \normalhbox} %D \macros %D {setrigidcolumnhsize,rigidcolumnbalance,rigidcolumnlines} %D %D These macros are copied from the \TEX book, page~397, and %D extended by a macro that sets the \type{\hsize}. %D %D \starttyping %D \setrigidcolumnhsize {total width} {distance} {n} %D \rigidcolumnbalance {box} %D \stoptyping %D %D Both these macros are for instance used in typesetting %D footnotes. %D %D Men kan het proces van breken enigzins beinvloeden met de %D volgende twee switches: \newif\ifalignrigidcolumns \newif\ifstretchrigidcolumns \newif\iftightrigidcolumns % if true: just a vbox, no depth/noflines/gridsnap corrrections %D De eerste switch bepaald het uitlijnen, de tweede rekt de %D individuele kolommen op naar \type{\vsize}. \def\setrigidcolumnhsize#1#2#3% todo: \dimexpr {\xdef\savedrigidhsize{\the\hsize}% \hsize#1\relax \global\chardef\rigidcolumns#3\relax \scratchdimen -#2\relax \multiply\scratchdimen #3\relax \advance\scratchdimen #2\relax \advance\hsize \scratchdimen \divide\hsize #3\relax} % == % % \def\setrigidcolumnhsize#1#2#3% % {\xdef\savedrigidhsize{\the\hsize}% % \global\chardef\rigidcolumns#3\relax % \hsize=\dimexpr(#1-\numexpr#3-1\relax\dimexpr#2\relax)/#3\relax} \newbox\rigidcolumnbox \let\rigidcolumnlines\!!zerocount \def\rigidcolumnbalance#1% {\ifnum\rigidcolumns=1 % tzt ook h/d correctie \ifinner\ifhmode\box\else\unvbox\fi\else\unvbox\fi#1\relax \else \normalvbox {\forgetall \nopenalties \dontcomplain \setbox\rigidcolumnbox\normalvbox {\line{}\goodbreak\unvbox#1\removebottomthings}% \splittopskip\openstrutheight \setbox\scratchbox\vsplit\rigidcolumnbox to \zeropoint \ifcase\rigidcolumnlines\relax % \iffalse % % maybe some day an option % \scratchskip\ht\rigidcolumnbox % \advance\scratchskip\dp\rigidcolumnbox % \getnoflines\scratchskip % \ifodd\noflines % \advance\noflines\plusone % \fi % \divide\noflines\rigidcolumns %\else \scratchdimen\ht\rigidcolumnbox \divide\scratchdimen \rigidcolumns \getnoflines\scratchdimen %\fi \else \noflines\rigidcolumnlines % to be sure \fi \scratchdimen\noflines\lineheight % new: we now loop so that we don't loose content % since in practice we also use this macro for % funny lineheights and border cases \setbox0=\box\rigidcolumnbox \doloop {\setbox\rigidcolumnbox=\copy0 \setbox\scratchbox\normalhbox to \savedrigidhsize {\dorecurse\rigidcolumns {\setbox\scratchbox\vsplit\rigidcolumnbox to \scratchdimen \dp\scratchbox\openstrutdepth \setbox\scratchbox\normalvtop \ifalignrigidcolumns to \ifstretchrigidcolumns\vsize\else\scratchdimen\fi \fi {\unvbox\scratchbox}% \wd\scratchbox\hsize \box\scratchbox \hfill}% \hfillneg}% \ifvoid\rigidcolumnbox\exitloop\else\advance\scratchdimen\lineheight\fi}% \iftightrigidcolumns \setbox\scratchbox\normalhbox{\raise\dp\scratchbox\box\scratchbox}% \else \advance\scratchdimen -\openstrutdepth \setbox\scratchbox\normalhbox{\raise\scratchdimen\box\scratchbox}% \dp\scratchbox\openstrutdepth \ht\scratchbox\scratchdimen \fi \box\scratchbox}% \fi} %D \macros %D {startvboxtohbox,stopvboxtohbox,convertvboxtohbox} %D %D Here is another of Knuth's dirty tricks, as presented on %D pages 398 and 399 of the \TEX book. These macros can be used %D like: %D %D \starttyping %D \normalvbox %D \bgroup %D \startvboxtohbox ... \stopvboxtohbox %D \startvboxtohbox ... \stopvboxtohbox %D \startvboxtohbox ... \stopvboxtohbox %D \egroup %D %D \normalvbox %D \bgroup %D \convertvboxtohbox %D \egroup %D \stoptyping %D %D These macros are used in reformatting footnotes, so they do %D what they're meant for. \def\setvboxtohbox {\bgroup \ifdim\baselineskip<16pt \relax \scratchdimen\baselineskip \multiply\scratchdimen 1024 \else \message{cropping \baselineskip to 16pt}% \scratchdimen\maxdimen \fi \divide\scratchdimen \hsize \multiply\scratchdimen 64 \xdef\normalvboxtohboxfactor{\withoutpt\the\scratchdimen}% \egroup} \def\startvboxtohbox {\bgroup \setvboxtohbox \setbox\scratchbox\normalhbox\bgroup} \def\stopvboxtohbox {\egroup \dp\scratchbox\zeropoint \ht\scratchbox\normalvboxtohboxfactor\wd\scratchbox \box\scratchbox \egroup} % % to be done: start halfway a line combined with one line % % extra to start with (skip) and one line less than counted. % % \def\stopvboxtohbox% % {\egroup % \setbox2=\normalvbox % {\forgetall\unhcopy0\par\xdef\globalvhlines{\the\prevgraf}}% % \setbox2=\normalvbox % {\unvbox2 % \setbox2=\lastbox % \setbox2=\normalhbox{\unhbox2}% % \xdef\globalvhwidth{\the\wd2}}% % \decrement\globalvhlines % \dimen0=\globalvhwidth % \dimen0=\normalvboxtohboxfactor\dimen0 % \advance\dimen0 by \globalvhlines\lineheight % \dp0=\zeropoint % \ht0=\dimen0 % %\writestatus{guessed size} % % {w:\the\wd0\space\space % % b:\the\baselineskip\space % % l:\globalvhlines\space % % e:\globalvhwidth\space % % h:\the\dimen0}% % \box0 % \egroup} % todo: \scratchbox \def\convertvboxtohbox {\setvboxtohbox \makehboxofhboxes \setbox0\normalhbox{\unhbox0 \removehboxes}% \noindent\unhbox0\par} \def\makehboxofhboxes {\setbox0\normalhbox{}% \loop % \doloop { .. \exitloop .. } \setbox2\lastbox \ifhbox2 \setbox0\normalhbox{\box2\unhbox0}% \repeat} % \def\makehboxofhboxes % {\setbox0\normalhbox{}% % \doloop % \doloop { .. \exitloop .. } % {% \dorecurse{3}{\unskip\unpenalty}% get rid of ... (better do this in a shapeloop) % \setbox2\lastbox % \ifhbox2 % \setbox0\normalhbox{\box2\unhbox0}% % \else % \exitloop % \fi}} % \def\flushboxesonly % feed this into \makehboxofhboxes % {\dowithnextbox % {\beginofshapebox % \unvbox\nextbox % \endofshapebox % \doreshapebox{\box\shapebox}{}{}{}% get rid of penalties etc % \innerflushshapebox} % \vbox} \def\removehboxes {\setbox0\lastbox \ifhbox0 {\removehboxes}\unhbox0 \fi} %D \macros %D {unhhbox} %D %D The next macro is used in typesetting inline headings. %D Let's first look at the macro and then show an example. \newbox \unhhedbox \newbox \hhbox \newdimen \lasthhboxwidth \newskip \hhboxindent \def\unhhbox#1\with#2% {\bgroup \nopenalties \dontcomplain \forgetall \setbox\unhhedbox\normalvbox{\hskip\hhboxindent\strut\unhbox#1}% => \hsize \doloop {\setbox\hhbox\vsplit\unhhedbox to \lineheight \ifvoid\unhhedbox \setbox\hhbox\normalhbox{\strut\normalhboxofvbox\hhbox}% \fi \ht\hhbox\strutht \dp\hhbox\strutdp \ifzeropt\hhboxindent\else % \ifdim\hhboxindent=\zeropoint\else \setbox\hhbox\normalhbox{\hskip-\hhboxindent\box\hhbox}% \hhboxindent\zeropoint \fi \global\lasthhboxwidth\wd\hhbox #2\relax \ifvoid\unhhedbox \exitloop \else \hskip\zeropoint \!!plus \zeropoint \fi}% \egroup} \def\dohboxofvbox {\setbox0\normalvbox{\unvbox\scratchcounter\global\setbox1\lastbox}% \unhbox1 \egroup} \def\normalhboxofvbox {\bgroup \afterassignment\dohboxofvbox \scratchcounter=} %D This macro can be used to break a paragraph apart and treat %D each line seperately, for instance, making it clickable. The %D main complication is that we want to be able to continue the %D paragraph, something that's needed in the in line section %D headers. %D %D \startbuffer %D \setbox0=\normalhbox{\input tufte \relax} %D \setbox2=\normalhbox{\input knuth \relax} %D \unhhbox0\with{\ruledhbox{\box\hhbox}} %D \hskip1em plus 1em minus 1em %D \hhboxindent=\lasthhboxwidth %D \advance\hhboxindent by \lastskip %D \unhhbox2\with{\ruledhbox{\box\hhbox}} %D \stopbuffer %D %D \getbuffer %D %D This piece of text was typeset by saying: %D %D \typebuffer %D %D Not that nice a definition, but effective. Note the stretch %D we've build in the line that connects the two paragraphs. %D \macros %D {doifcontent} %D %D When processing depends on the availability of content, one %D can give the next macro a try. %D %D \starttyping %D \doifcontent{pre content}{post content}{no content}\somebox %D \stoptyping %D %D Where \type{\somebox} is either a \type{\normalhbox} or %D \type{\normalvbox}. If the dimension of this box suggest some %D content, the resulting box is unboxed and surrounded by the %D first two arguments, else the third arguments is executed. \unexpanded\def\doifcontent#1#2#3% {\dowithnextbox {\ifhbox\nextbox \ifdim\nextboxwd>\zeropoint #1\unhbox\nextbox#2\relax \else #3\relax \fi \else \ifdim\nextboxht>\zeropoint #1\unvbox\nextbox#2\relax \else #3\relax \fi \fi}} %D So when we say: %D %D \startbuffer %D \doifcontent{[}{]}{}\normalhbox{content sensitive typesetting} %D %D \doifcontent{}{\page}{}\normalvbox{content sensitive typesetting} %D %D \doifcontent{}{}{\message{Didn't you forget something?}}\normalhbox{} %D \stopbuffer %D %D \typebuffer %D %D We get: %D %D \getbuffer %D %D Where the last call of course does not show up in this %D document, but definitely generates a confusing message. %D \macros %D {processboxes} %D %D The next macro gobble boxes and is for instance used for %D overlays. First we show the general handler. \newbox\processbox \def\processboxes#1% {\bgroup \def\doprocessbox{#1}% #1 can be redefined halfway \resetbox\processbox \afterassignment\dogetprocessbox\let\next=} \def\endprocessboxes {\ifhmode\unskip\fi \box\processbox \next \egroup} \def\dogetprocessbox {\ifx\next\bgroup \expandafter\dodogetprocessbox \else \expandafter\endprocessboxes \fi} \def\dodogetprocessbox {\dowithnextbox {\ifhmode\unskip\fi\doprocessbox % takes \nextbox makes \processbox \afterassignment\dogetprocessbox\let\next=} \normalhbox\bgroup} %D \macros %D {startoverlay} %D %D We can overlay boxes by saying: %D %D \startbuffer %D \startoverlay %D {\framed{hans}} %D {\framed[width=3cm]{ton}} %D {\framed[height=2cm]{oeps}} %D \stopoverlay %D \stopbuffer %D %D \typebuffer %D %D shows up as: %D %D \leavevmode\getbuffer % \def\dooverlaybox% % {\ifhmode\unskip\fi % \ifdim\nextboxht>\ht\processbox % \setbox\processbox\normalvbox to \nextboxht % {\vss\box\processbox\vss}% % \else % \setbox\nextbox\normalvbox to \ht\processbox % {\vss\flushnextbox\vss}% % \fi % \scratchdimen=\wd % \ifdim\nextboxwd>\wd\processbox % \nextbox % \else % \processbox % \fi % \setbox\processbox=\normalhbox to \scratchdimen % {\normalhbox to \scratchdimen{\hss\box\processbox\hss}% % \hskip-\scratchdimen % \normalhbox to \scratchdimen{\hss\flushnextbox\hss}}} % % \def\startoverlay% % {\bgroup % \let\stopoverlay\egroup % \processboxes\dooverlaybox} \def\dooverlaybox {\ifhmode\unskip\fi \scratchdimen\dp \ifdim\nextboxdp>\dp\processbox \nextbox \else \processbox \fi \ifdim\nextboxht>\ht\processbox \setbox\processbox\normalvbox to \nextboxht {\dp\processbox\zeropoint\vss\box\processbox\vss}% \else \setbox\nextbox\normalvbox to \ht\processbox {\nextboxdp\zeropoint\vss\flushnextbox\vss}% \fi \nextboxdp\scratchdimen \dp\processbox\scratchdimen \scratchdimen\wd \ifdim\nextboxwd>\wd\processbox \nextbox \else \processbox \fi \setbox\processbox\normalhbox to \scratchdimen {\normalhbox to \scratchdimen{\hss\box\processbox\hss}% \hskip-\scratchdimen \normalhbox to \scratchdimen{\hss\flushnextbox\hss}}} \unexpanded\def\startoverlay {\bgroup \let\stopoverlay\egroup \processboxes\dooverlaybox} \let\stopoverlay\relax % %D \macros % %D {starthspread} % %D % %D In a similar way we can build a horizontal box, spread % %D over the available width. % %D % %D \startbuffer % %D \starthspread % %D {hans} % %D {ton} % %D {oeps} % %D \stophspread % %D % %D \stopbuffer % %D % %D \typebuffer % %D % %D shows up as: % %D % %D \leavevmode\getbuffer % % \def\dohspread % {\flushnextbox % \def\dohspread{\hfil\flushnextbox}} % % \def\starthspread % {\normalhbox to \hsize \bgroup % \let\stophspread\egroup % \processboxes\dohspread} %D \macros %D {fakebox} %D %D The next macro is a rather silly one, but saves space. %D %D \starttyping %D \normalhbox{\fakebox0} %D \stoptyping %D %D returns an empty box with the dimensions of the box %D specified, here being zero. \def\dofakebox {\setbox\scratchbox\null \wd\scratchbox\wd\scratchcounter \ht\scratchbox\ht\scratchcounter \dp\scratchbox\dp\scratchcounter \ifhbox\scratchcounter\normalhbox\else\normalvbox\fi{\box\scratchbox}% \egroup} \def\fakebox {\bgroup \afterassignment\dofakebox\scratchcounter} %D \macros %D {lbox,rbox,cbox,tbox,bbox} %D %D Here are some convenient alternative box types: %D %D \starttyping %D \lbox{text ...} %D \cbox{text ...} %D \rbox{text ...} %D \stoptyping %D %D Are similar to \type {\normalvbox}, which means that they also %D accept something like \type{to 3cm}, but align to the left, %D middle and right. These box types can be used to typeset %D paragraphs. \def\lbox{\makelrcbox\normalvbox\raggedleft} \def\cbox{\makelrcbox\normalvbox\raggedcenter} \def\rbox{\makelrcbox\normalvbox\raggedright} \def\ltop{\makelrcbox\normalvtop\raggedleft} \def\ctop{\makelrcbox\normalvtop\raggedcenter} \def\rtop{\makelrcbox\normalvtop\raggedright} \def\makelrcbox#1#2#3#% {#1#3\bgroup \forgetall \let\\=\endgraf #2\let\next=} %D The alternatives \type {\tbox} and \type {\bbox} can be used %D to properly align boxes, like in: %D %D \setupexternalfigures[directory={../sample}] %D \startbuffer %D \starttable[|||] %D \HL %D \VL \tbox{\externalfigure[cow][height=3cm,frame=on]} \VL top aligned \VL\SR %D \HL %D \VL \bbox{\externalfigure[cow][height=3cm,frame=on]} \VL bottom aligned \VL\SR %D \HL %D \stoptable %D \stopbuffer %D %D \typebuffer %D %D The positioning depends on the strut settings: %D %D \getbuffer \def\tbox{\tbbox\ht\dp} \def\bbox{\tbbox\dp\ht} \def\tbbox#1#2% {\normalhbox\bgroup \dowithnextbox {\scratchdimen\nextboxht \advance\scratchdimen\nextboxdp \advance\scratchdimen-#1\strutbox #1\nextbox#1\strutbox #2\nextbox\scratchdimen \setbox\nextbox\normalhbox {\lower\nextboxdp\flushnextbox}% #1\nextbox#1\strutbox #2\nextbox\scratchdimen \flushnextbox \egroup} \normalhbox} %D \macros %D {lhbox,mhbox,rhbox} %D %D A few more boxes. \def\dodolhbox{\normalhbox to \hsize{\flushnextbox\hss }} \def\dodomhbox{\normalhbox to \hsize{\hss\flushnextbox\hss}} \def\dodorhbox{\normalhbox to \hsize{\hss\flushnextbox }} \def\lhbox{\dowithnextboxcs\dodolhbox\normalhbox} \def\mhbox{\dowithnextboxcs\dodomhbox\normalhbox} \def\rhbox{\dowithnextboxcs\dodorhbox\normalhbox} \let\lefthbox \lhbox \let\midhbox \mhbox \let\righthbox\rhbox %D \macros %D {boxofsize} %D %D Sometimes we need to construct a box with a height or %D width made up of several dimensions. Instead of cumbersome %D additions, we can use: %D %D \starttyping %D \boxofsize \normalvbox 10cm 3cm -5cm {the text to be typeset} %D \stoptyping %D %D This example demonstrates that one can use positive and %D negative values. Dimension registers are also accepted. \newdimen\sizeofbox \def\boxofsize#1% {\bgroup \sizeofbox\zeropoint \scratchdimen\zeropoint \def\docommand {\advance\sizeofbox\scratchdimen \futurelet\next\dodocommand}% \def\dodocommand {\ifx\next\bgroup \expanded{\egroup#1 to \the\sizeofbox}% \else \@EA\afterassignment\@EA\docommand\@EA\scratchdimen \fi}% \docommand} %D Some new, still undocumented features: % limitatetext -> beter {text} als laatste !! % % \limitvbox % \limithbox \def\limitatelines#1#2% size sentinel {\dowithnextbox {\dimen0=#1\hsize \ifdim\nextboxwd>\dimen0 \setbox\nextbox\normalhbox {\advance\dimen0 -.1\hsize \limitatetext{\unhbox\nextbox}{\dimen0}{\nobreak#2}}% \fi \unhbox\nextbox} \normalhbox} \def\fittoptobaselinegrid % weg hier {\dowithnextbox {\bgroup \par \dimen0\nextboxht \nextboxht\strutht \nextboxdp\strutdp \normalhbox{\flushnextbox} \prevdepth\strutdp \doloop {\advance\dimen0 -\lineheight \ifdim\dimen0<\zeropoint \exitloop \else \nobreak \normalhbox{\strut} \fi} \egroup} \normalvbox} %D Some more undocumented macros (used in m-chart). \newif\iftraceboxplacement % \traceboxplacementtrue \newbox\fakedboxcursor \setbox\fakedboxcursor\normalhbox {\vrule\!!width\zeropoint\!!height\zeropoint\!!depth\zeropoint} \def\boxcursor % overloaded in core-vis {\iftraceboxplacement \bgroup \scratchdimen2pt \setbox\scratchbox\normalhbox to \zeropoint {\hss \vrule \!!width \scratchdimen \!!height\scratchdimen \!!depth \scratchdimen \hss}% \smashedbox\scratchbox \egroup \else \copy\fakedboxcursor \fi} \def\placedbox {\iftraceboxplacement\ruledhbox\else\normalhbox\fi} \newdimen\boxoffset \newdimen\boxhdisplacement \newdimen\boxvdisplacement %\def\rightbox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=.5\ht0\advance\dimen0 -.5\dp0 % \boxcursor\hskip\boxoffset\lower\dimen0\box0}} \def\rightbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement\boxoffset \global\boxvdisplacement.5\ht0 \global\advance\boxvdisplacement-.5\dp0 \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} %\def\leftbox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=.5\ht0\advance\dimen0 -.5\dp0 % \boxcursor\hskip-\wd0\hskip-\boxoffset\lower\dimen0\box0}} \def\leftbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-\wd0 \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement.5\ht0 \global\advance\boxvdisplacement-.5\dp0 \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} %\def\topbox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=\boxoffset\advance\dimen0 \dp0 % \boxcursor\hskip-.5\wd0\raise\dimen0\box0}} \def\topbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-.5\wd0 \global\boxvdisplacement-\dp0 \global\advance\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} %\def\bottombox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=\boxoffset\advance\dimen0 \ht0 % \boxcursor\hskip-.5\wd0\lower\dimen0\box0}} \def\bottombox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-.5\wd0 \global\boxvdisplacement\ht0 \global\advance\boxvdisplacement\boxoffset \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} %\def\lefttopbox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=\boxoffset\advance\dimen0 \dp0 % \advance\boxoffset\wd0 % \boxcursor\hskip-\boxoffset\raise\dimen0\box0}} \def\lefttopbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-\wd0 \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement-\dp0 \global\advance\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} %\def\righttopbox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=\boxoffset\advance\dimen0 \dp0 % \boxcursor\hskip\boxoffset\raise\dimen0\box0}} \def\righttopbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement\boxoffset \global\boxvdisplacement-\dp0 \global\advance\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} %\def\leftbottombox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=\boxoffset\advance\dimen0 \ht0 % \advance\boxoffset\wd0 % \boxcursor\hskip-\boxoffset\lower\dimen0\box0}} \def\leftbottombox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-\wd0 \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement\ht0 \global\advance\boxvdisplacement\boxoffset \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} %\def\rightbottombox#1% % {\normalhbox % {\setbox0=\placedbox{#1}% % \dimen0=\boxoffset\advance\dimen0 \ht0 % \boxcursor\hskip\boxoffset\lower\dimen0\box0}} \def\rightbottombox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement\boxoffset \global\boxvdisplacement\ht0 \global\advance\boxvdisplacement\boxoffset \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} \let\topleftbox \lefttopbox \let\toprightbox \righttopbox \let\bottomleftbox \leftbottombox \let\bottomrightbox\rightbottombox \def\middlebox#1% {\normalhbox{\setbox0\placedbox{#1}\boxoffset=-.5\wd0\rightbox{\box0}}} \def\baselinemiddlebox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-.5\wd0 \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} \def\baselineleftbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement-\wd0 \global\advance\boxhdisplacement-\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} \def\baselinerightbox#1% {\normalhbox {\setbox0\placedbox{#1}% \global\boxhdisplacement\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} %D \macros %D {obox} %D %D Experimental, not yet frozen: \def\lrtbbox#1#2#3#4% l r t b {\bgroup \dowithnextboxcontent {\advance\hsize-#1\advance\hsize-#2\advance\vsize-#3\advance\vsize-#4\relax} {\forgetall\vbox to \vsize{\vskip#3\hbox to \hsize{\hskip#1\box\nextbox\hss}\vss}\egroup} \vbox} %D \macros %D {toplinebox} %D %D See core-tbl.tex for an example of its usage: \def\toplinebox {\dowithnextbox {\ifdim\nextboxdp>\strutdepth \scratchdimen\nextboxdp \advance\scratchdimen-\strutdepth \getnoflines\scratchdimen \struttedbox{\flushnextbox}% \dorecurse\noflines\verticalstrut \else \flushnextbox \fi}% \tbox} %D \macros %D {initializeboxstack,savebox,foundbox} %D %D At the cost of some memory, but saving box registers, we %D have implemented a box repository. %D %D \starttyping %D \initializeboxstack{one} %D %D \savebox{one}{a}{test a} %D \savebox{one}{p}{test p} %D \savebox{one}{q}{test q} %D %D \normalhbox{a:\foundbox{one}{a}} \par %D \normalhbox{q:\foundbox{one}{q}} \par %D \normalhbox{p:\foundbox{one}{p}} \par %D \normalhbox{x:\foundbox{one}{x}} \par %D \normalhbox{y:\foundbox{two}{a}} \par %D \stoptyping % we keep it around as a demonstration of good old tex code: % % \def\@@stackbox{boxstack:b:} % \def\@@stackmax{boxstack:m:} % \def\@@stacktag{boxstack:t:} % \def\@@stacklst{boxstack:l:} % % \def\initializeboxstack#1% % {\ifundefined{\@@stackbox#1}% % \@EA\newbox\csname\@@stackbox#1\endcsname % \else % \global\setbox\csname\@@stackbox#1\endcsname\normalvbox{}% % \def\docommand##1{\global\letbeundefined{\@@stacktag#1:##1}}% % \processcommacommand[\getvalue{\@@stacklst#1}]\docommand % \fi % \global\letvalue{\@@stacklst#1}\empty % \global\letvalue{\@@stackmax#1}\!!zeropoint} % % \def\savebox#1#2% stack name % {\dowithnextbox % {\doifdefined{\@@stackbox#1} % {\@EA\doglobal\@EA\increment\csname\@@stackmax#1\endcsname % \setxvalue{\@@stacktag#1:#2}{\csname\@@stackmax#1\endcsname}% % \setxvalue{\@@stacklst#1}{\getvalue{\@@stacklst#1},#2}% % \global\setbox\csname\@@stackbox#1\endcsname\normalvbox % {\forgetall % \setbox\scratchbox\normalvbox{\flushnextbox} % \ht\scratchbox\onepoint % \dp\scratchbox\zeropoint % \unvbox\csname\@@stackbox#1\endcsname % \offinterlineskip % \allowbreak % \box\scratchbox}}}% % \normalvbox} % % \def\foundbox#1#2% % {\normalvbox % {\doifdefined{\@@stackbox#1} % {\doifdefined{\@@stacktag#1:#2} % {\setbox\scratchbox\normalvbox % {\splittopskip\zeropoint % \setbox0\copy\csname\@@stackbox#1\endcsname % \dimen0=\getvalue{\@@stacktag#1:#2}\points % \advance\dimen0 -\onepoint % \setbox2\vsplit0 to \dimen0 % \ifdim\ht0>\onepoint % \setbox0\vsplit0 to \onepoint % \fi % \unvbox0\setbox0\lastbox\unvbox0}% % \unvbox\scratchbox}}}} % % \def\doifboxelse#1#2% % {\doifdefinedelse{\@@stacktag#1:#2}} \def\@@stackbox{@box@} \def\@@stacklst{@xob@} \def\setstackbox#1#2% {\ifcsname\@@stackbox:#1:#2\endcsname\else \expandafter\newbox\csname\@@stackbox:#1:#2\endcsname \fi \global\setbox\csname\@@stackbox:#1:#2\endcsname\normalvbox} \def\initializeboxstack#1% {\def\docommand##1{\setstackbox{#1}{##1}{}}% \ifcsname\@@stacklst#1\endcsname \processcommacommand[\getvalue{\@@stacklst#1}]\docommand \fi \global\letvalue{\@@stacklst#1}\empty} \def\savebox#1#2% stack name {% beware, \setxvalue defines the cs beforehand so we cannot use the % test inside the { } \ifcsname\@@stacklst#1\endcsname \setxvalue{\@@stacklst#1}{\csname\@@stacklst#1\endcsname,#2}% \else \setxvalue{\@@stacklst#1}{#2}% \fi \setstackbox{#1}{#2}} \def\foundbox#1#2% {\normalvbox {\ifcsname\@@stackbox:#1:#2\endcsname \copy\csname\@@stackbox:#1:#2\endcsname \fi}} \long\def\doifboxelse#1#2#3#4% {\ifcsname\@@stackbox:#1:#2\endcsname \ifvoid\csname\@@stackbox:#1:#2\endcsname#4\else#3\fi \else #4% \fi} %D \macros %D {removedepth, obeydepth} %D %D While \type {\removedepth} removes the preceding depth, %D \type {\obeydepth} makes sure we have depth. Both macros %D leave the \type {\prevdepth} untouched. \def\removedepth {\ifvmode \ifdim\prevdepth>\zeropoint \kern-\prevdepth \fi \fi} \def\obeydepth {\par \removedepth \ifvmode \kern\strutdp \fi} \def\undepthed {\dowithnextbox{\nextboxdp\zeropoint\flushnextbox}\hbox} %D \macros %D {removebottomthings, removelastskip} %D %D A funny (but rather stupid) one, plus a redefinition. \def\removebottomthings {\dorecurse5{\unskip\unkern\unpenalty}} \def\removelastskip % \ifvmode the plain tex one \fi % {\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi} {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} %D \macros %D {makestrutofbox} %D %D This macro sets the dimensions of a box to those of a %D strut. \def\domakestrutofbox {\ht\registercount\strutht \dp\registercount\strutdp \wd\registercount\zeropoint} \def\makestrutofbox {\afterassignment\domakestrutofbox\registercount} %D \macros %D {raisebox,lowerbox} %D %D Some more box stuff, related to positioning (under %D construction). Nice stuff for a tips and tricks maps %D article. %D %D \starttyping %D \raisebox{100pt}\normalhbox{test} %D \raisebox50pt\normalhbox{test} %D \hsmash{\raisebox{100pt}\normalhbox{test}} %D \stoptyping \def\doraiselowerbox#1#2% a nice trick us used to accept {\def\next % both direct and {} dimensions {\dowithnextbox {\setbox\nextbox\normalhbox{#1\scratchdimen\flushnextbox}% \nextboxht\strutht \nextboxdp\strutdp \flushnextbox}}% \afterassignment\next\scratchdimen=#2} \def\raisebox{\doraiselowerbox\raise} \def\lowerbox{\doraiselowerbox\lower} % maybe some day we need this % % \def\appendvbox#1% % uses \box8 % {\bgroup % \ifdim\prevdepth<\zeropoint % \ifdim\pagetotal=\zeropoint % \setbox8=\normalvtop{\unvcopy#1}% % \hrule\c!!height\zeropoint % \kern-\ht8 % \box#1\relax % \else % \box#1\relax % \fi % \else % \dimen0=\prevdepth % \hrule\c!!height\zeropoint % \setbox8=\normalvtop{\unvcopy#1}% % \dimen2=\baselineskip % \advance\dimen2 by -\dimen0 % \advance\dimen2 by -\ht8 % \kern\dimen2 % \box#1\relax % \fi % \egroup} % %D Also new: % %D % %D \startbuffer % %D \normbox[1cm][bba]{m} % b(efore) a(fter) v(box) s(trut) f(rame) % %D \normbox[1cm][bba]{m} % %D \normbox[1cm][bba]{m} % %D \stopbuffer % %D % %D \typebuffer % %D \getbuffer % % \def\dodonormbox#1#2#3#4#5#6#7% % {\doifnumberelse{#1} % {\dimen0=#1}{\setbox0=#3{#1}\dimen0=#50}% % \doifinstringelse{f}{#2} % {\let\next#4}{\let\next#3}% % \next to \dimen0 % {\counttoken b\in#2\to\!!counta\dorecurse{\!!counta}{#6}#6% % #7\nextbox % \counttoken a\in#2\to\!!counta\dorecurse{\!!counta}{#6}#6}} % % \def\donormbox[#1][#2]% % {\bgroup % \doifinstringelse{v}{#2} % {\let\next\normalvbox} % {\let\next\normalhbox}% % \dowithnextbox % {\ifvbox\nextbox % \let\\=\par % \dodonormbox{#1}{#2}\normalvbox\ruledvbox\ht\vfil\unvbox % \else % \let\\=\space % \dodonormbox{#1}{#2}\normalhbox\ruledhbox\wd\hfil\unhbox % \fi % \egroup}% % \next} % % \def\normbox % {\dodoubleempty\donormbox} % vcenter in text, we kunnen vcenter overloaden \def\halfwaybox {\dowithnextbox {\nextboxdp\zeropoint \setbox\nextbox\normalhbox{\lower.5\nextboxht\flushnextbox}% \flushnextbox} \normalhbox} %D New: \def\setdimentoatleast#1#2% {\ifdim#1>\zeropoint\else#1=#2\fi} %D And even rawer: \let\naturalhbox \normalhbox \let\naturalvbox \normalvbox \let\naturalvtop \normalvtop \let\naturalvcenter \normalvtop \ifdefined\textdir \def\naturalhbox{\normalhbox dir TLT} \def\naturalvbox{\normalvbox dir TLT} %def\naturalvtop{\normalvtop dir TLT} \fi %D \macros %D {vcenter} %D %D Also new: tex mode \type {\vcenter}. \let\verynormalvcenter \vcenter % since \vcenter can be visualized \def\vcenter {\normalvbox\bgroup \dowithnextbox{\normalhbox{$\verynormalvcenter{\flushnextbox}$}\egroup} \normalvbox} % could be \everymathematics \prependtoks \let\vcenter\normalvcenter \to \everymath \prependtoks \let\vcenter\normalvcenter \to \everydisplay %D \macros %D {frozenhbox} %D %D A not so well unhboxable bxo can be made with: \def\frozenhbox {\hbox\bgroup\dowithnextbox{\hbox{\hbox{\flushnextbox}}\egroup}\hbox} %D \macros %D {setboxllx,setboxlly,gsetboxllx,gsetboxlly,getboxllx,getboxlly} %D %D A prelude to an extended \TEX: % \def\setboxllx #1#2{\bgroup\scratchdimen#2\expanded{\egroup\noexpand\setevalue{b@@x\number#1}{\the\scratchdimen}}} % \def\setboxlly #1#2{\bgroup\scratchdimen#2\expanded{\egroup\noexpand\setevalue{b@@y\number#1}{\the\scratchdimen}}} % % \def\gsetboxllx#1#2{\bgroup\scratchdimen#2\setxvalue{b@@x\number#1}{\the\scratchdimen}\egroup} % \def\gsetboxlly#1#2{\bgroup\scratchdimen#2\setxvalue{b@@y\number#1}{\the\scratchdimen}\egroup} \def\setboxllx#1#2{\setevalue{b@@x\number#1}{\the\dimexpr#2\relax}} \def\setboxlly#1#2{\setevalue{b@@y\number#1}{\the\dimexpr#2\relax}} \def\gsetboxllx{\global\setboxllx} \def\gsetboxlly{\global\setboxlly} \def\getboxllx#1{\executeifdefined{b@@x\number#1}\zeropoint} \def\getboxlly#1{\executeifdefined{b@@y\number#1}\zeropoint} %D \macros %D {shownextbox} %D %D Handy for tracing %D %D \starttyping %D \shownextbox\vbox{test} %D \shownextbox\vbox{test\endgraf} %D \shownextbox\vbox{test\endgraf\strut\endgraf} %D \shownextbox\vbox{test\endgraf\thinrule} %D \shownextbox\vbox{\setupwhitespace[big]test\endgraf\thinrule} %D \stoptyping \def\shownextbox {\dowithnextbox {\bgroup \showboxbreadth\maxdimen \showboxdepth \maxdimen \scratchcounter\interactionmode \batchmode \showbox\nextbox \box\nextbox \interactionmode\scratchcounter \egroup}} \def\spreadhbox#1% rebuilds \hbox{} {\bgroup \ifhbox#1\relax \setbox2\emptybox \unhbox#1% \doloop {\unpenalty\unskip\unpenalty\unskip\unpenalty\unskip \setbox0\lastbox \ifvoid0 \exitloop \else \setbox2\hbox {\ifhbox0 \spreadhbox0\else\box0\fi \ifvoid2 \else\hss\unhbox2\fi}% \fi}% \ifvoid2\else\unhbox2\fi \else \box#1% \fi \egroup} % makes sense but too much log for overfull boxes: % % \showboxbreadth\maxdimen % \showboxdepth \maxdimen \protect \endinput % a bit of test code: \hbox \bgroup \ruledvbox {\hbox{\strut gans}} \ruledvbox to \lineheight {\hbox{\strut gans}} \ruledvbox to \lineheight {\hbox {gans}} \ruledvbox to \strutheight{\hbox {gans}} \ruledvbox to \strutheight{\hbox{\strut gans}} \ruledvbox to \strutheight{\vss\hbox{gans}} \egroup context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otp.lua0000644000175000017500000010073012161703335024144 0ustar norbertnorbertif not modules then modules = { } end modules ['font-otp'] = { version = 1.001, comment = "companion to font-otf.lua (packing)", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: pack math (but not that much to share) -- -- pitfall 5.2: hashed tables can suddenly become indexed with nil slots local next, type = next, type local sort, concat = table.sort, table.concat local sortedhash = table.sortedhash local trace_packing = false trackers.register("otf.packing", function(v) trace_packing = v end) local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end) local report_otf = logs.reporter("fonts","otf loading") -- also used in other scripts so we need to check some tables: fonts = fonts or { } local handlers = fonts.handlers or { } fonts.handlers = handlers local otf = handlers.otf or { } handlers.otf = otf local enhancers = otf.enhancers or { } otf.enhancers = enhancers local glists = otf.glists or { "gsub", "gpos" } otf.glists = glists local criterium = 1 local threshold = 0 local function tabstr_normal(t) local s = { } local n = 0 for k, v in next, t do n = n + 1 if type(v) == "table" then s[n] = k .. ">" .. tabstr_normal(v) elseif v == true then s[n] = k .. "+" -- "=true" elseif v then s[n] = k .. "=" .. v else s[n] = k .. "-" -- "=false" end end if n == 0 then return "" elseif n == 1 then return s[1] else sort(s) -- costly but needed (occasional wrong hit otherwise) return concat(s,",") end end local function tabstr_flat(t) local s = { } local n = 0 for k, v in next, t do n = n + 1 s[n] = k .. "=" .. v end if n == 0 then return "" elseif n == 1 then return s[1] else sort(s) -- costly but needed (occasional wrong hit otherwise) return concat(s,",") end end local function tabstr_mixed(t) -- indexed local s = { } local n = #t if n == 0 then return "" elseif n == 1 then local k = t[1] if k == true then return "++" -- we need to distinguish from "true" elseif k == false then return "--" -- we need to distinguish from "false" else return tostring(k) -- number or string end else for i=1,n do local k = t[i] if k == true then s[i] = "++" -- we need to distinguish from "true" elseif k == false then s[i] = "--" -- we need to distinguish from "false" else s[i] = k -- number or string end end return concat(s,",") end end local function tabstr_boolean(t) local s = { } local n = 0 for k, v in next, t do n = n + 1 if v then s[n] = k .. "+" else s[n] = k .. "-" end end if n == 0 then return "" elseif n == 1 then return s[1] else sort(s) -- costly but needed (occasional wrong hit otherwise) return concat(s,",") end end -- tabstr_boolean_x = tabstr_boolean -- tabstr_boolean = function(t) -- local a = tabstr_normal(t) -- local b = tabstr_boolean_x(t) -- print(a) -- print(b) -- return b -- end local function packdata(data) if data then -- stripdata(data) local h, t, c = { }, { }, { } local hh, tt, cc = { }, { }, { } local nt, ntt = 0, 0 local function pack_normal(v) local tag = tabstr_normal(v) local ht = h[tag] if ht then c[ht] = c[ht] + 1 return ht else nt = nt + 1 t[nt] = v h[tag] = nt c[nt] = 1 return nt end end local function pack_flat(v) local tag = tabstr_flat(v) local ht = h[tag] if ht then c[ht] = c[ht] + 1 return ht else nt = nt + 1 t[nt] = v h[tag] = nt c[nt] = 1 return nt end end local function pack_boolean(v) local tag = tabstr_boolean(v) local ht = h[tag] if ht then c[ht] = c[ht] + 1 return ht else nt = nt + 1 t[nt] = v h[tag] = nt c[nt] = 1 return nt end end local function pack_indexed(v) local tag = concat(v," ") local ht = h[tag] if ht then c[ht] = c[ht] + 1 return ht else nt = nt + 1 t[nt] = v h[tag] = nt c[nt] = 1 return nt end end local function pack_mixed(v) local tag = tabstr_mixed(v) local ht = h[tag] if ht then c[ht] = c[ht] + 1 return ht else nt = nt + 1 t[nt] = v h[tag] = nt c[nt] = 1 return nt end end local function pack_final(v) -- v == number if c[v] <= criterium then return t[v] else -- compact hash local hv = hh[v] if hv then return hv else ntt = ntt + 1 tt[ntt] = t[v] hh[v] = ntt cc[ntt] = c[v] return ntt end end end local function success(stage,pass) if nt == 0 then if trace_loading or trace_packing then report_otf("pack quality: nothing to pack") end return false elseif nt >= threshold then local one, two, rest = 0, 0, 0 if pass == 1 then for k,v in next, c do if v == 1 then one = one + 1 elseif v == 2 then two = two + 1 else rest = rest + 1 end end else for k,v in next, cc do if v > 20 then rest = rest + 1 elseif v > 10 then two = two + 1 else one = one + 1 end end data.tables = tt end if trace_loading or trace_packing then report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)", stage, pass, one+two+rest, one, two, rest, criterium) end return true else if trace_loading or trace_packing then report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)", stage, pass, nt, threshold) end return false end end local function packers(pass) if pass == 1 then return pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed else return pack_final, pack_final, pack_final, pack_final, pack_final end end local resources = data.resources local lookuptypes = resources.lookuptypes for pass=1,2 do if trace_packing then report_otf("start packing: stage 1, pass %s",pass) end local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass) for unicode, description in next, data.descriptions do local boundingbox = description.boundingbox if boundingbox then description.boundingbox = pack_indexed(boundingbox) end local slookups = description.slookups if slookups then for tag, slookup in next, slookups do local what = lookuptypes[tag] if what == "pair" then local t = slookup[2] if t then slookup[2] = pack_indexed(t) end local t = slookup[3] if t then slookup[3] = pack_indexed(t) end elseif what ~= "substitution" then slookups[tag] = pack_indexed(slookup) -- true is new end end end local mlookups = description.mlookups if mlookups then for tag, mlookup in next, mlookups do local what = lookuptypes[tag] if what == "pair" then for i=1,#mlookup do local lookup = mlookup[i] local t = lookup[2] if t then lookup[2] = pack_indexed(t) end local t = lookup[3] if t then lookup[3] = pack_indexed(t) end end elseif what ~= "substitution" then for i=1,#mlookup do mlookup[i] = pack_indexed(mlookup[i]) -- true is new end end end end local kerns = description.kerns if kerns then for tag, kern in next, kerns do kerns[tag] = pack_flat(kern) end end local math = description.math if math then local kerns = math.kerns if kerns then for tag, kern in next, kerns do kerns[tag] = pack_normal(kern) end end end local anchors = description.anchors if anchors then for what, anchor in next, anchors do if what == "baselig" then for _, a in next, anchor do for k=1,#a do a[k] = pack_indexed(a[k]) end end else for k, v in next, anchor do anchor[k] = pack_indexed(v) end end end end local altuni = description.altuni if altuni then for i=1,#altuni do altuni[i] = pack_flat(altuni[i]) end end end local lookups = data.lookups if lookups then for _, lookup in next, lookups do local rules = lookup.rules if rules then for i=1,#rules do local rule = rules[i] local r = rule.before if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end local r = rule.after if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end local r = rule.current if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end local r = rule.replacements if r then rule.replacements = pack_flat (r) end -- can have holes local r = rule.lookups if r then rule.lookups = pack_indexed(r) end -- can have "" -- local r = rule.lookups if r then rule.lookups = pack_flat(r) end -- can have holes (already taken care of some cases) end end end end local anchor_to_lookup = resources.anchor_to_lookup if anchor_to_lookup then for anchor, lookup in next, anchor_to_lookup do anchor_to_lookup[anchor] = pack_normal(lookup) end end local lookup_to_anchor = resources.lookup_to_anchor if lookup_to_anchor then for lookup, anchor in next, lookup_to_anchor do lookup_to_anchor[lookup] = pack_normal(anchor) end end local sequences = resources.sequences if sequences then for feature, sequence in next, sequences do local flags = sequence.flags if flags then sequence.flags = pack_normal(flags) end local subtables = sequence.subtables if subtables then sequence.subtables = pack_normal(subtables) end local features = sequence.features if features then for script, feature in next, features do features[script] = pack_normal(feature) end end end end local lookups = resources.lookups if lookups then for name, lookup in next, lookups do local flags = lookup.flags if flags then lookup.flags = pack_normal(flags) end local subtables = lookup.subtables if subtables then lookup.subtables = pack_normal(subtables) end end end local features = resources.features if features then for _, what in next, glists do local list = features[what] if list then for feature, spec in next, list do list[feature] = pack_normal(spec) end end end end if not success(1,pass) then return end end if nt > 0 then for pass=1,2 do if trace_packing then report_otf("start packing: stage 2, pass %s",pass) end local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass) for unicode, description in next, data.descriptions do local kerns = description.kerns if kerns then description.kerns = pack_normal(kerns) end local math = description.math if math then local kerns = math.kerns if kerns then math.kerns = pack_normal(kerns) end end local anchors = description.anchors if anchors then description.anchors = pack_normal(anchors) end local mlookups = description.mlookups if mlookups then for tag, mlookup in next, mlookups do mlookups[tag] = pack_normal(mlookup) end end local altuni = description.altuni if altuni then description.altuni = pack_normal(altuni) end end local lookups = data.lookups if lookups then for _, lookup in next, lookups do local rules = lookup.rules if rules then for i=1,#rules do -- was next loop local rule = rules[i] local r = rule.before if r then rule.before = pack_normal(r) end local r = rule.after if r then rule.after = pack_normal(r) end local r = rule.current if r then rule.current = pack_normal(r) end end end end end local sequences = resources.sequences if sequences then for feature, sequence in next, sequences do sequence.features = pack_normal(sequence.features) end end if not success(2,pass) then -- return end end for pass=1,2 do local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass) for unicode, description in next, data.descriptions do local slookups = description.slookups if slookups then description.slookups = pack_normal(slookups) end local mlookups = description.mlookups if mlookups then description.mlookups = pack_normal(mlookups) end end end end end end local unpacked_mt = { __index = function(t,k) t[k] = false return k -- next time true end } local function unpackdata(data) if data then local tables = data.tables if tables then local resources = data.resources local lookuptypes = resources.lookuptypes local unpacked = { } setmetatable(unpacked,unpacked_mt) for unicode, description in next, data.descriptions do local tv = tables[description.boundingbox] if tv then description.boundingbox = tv end local slookups = description.slookups if slookups then local tv = tables[slookups] if tv then description.slookups = tv slookups = unpacked[tv] end if slookups then for tag, lookup in next, slookups do local what = lookuptypes[tag] if what == "pair" then local tv = tables[lookup[2]] if tv then lookup[2] = tv end local tv = tables[lookup[3]] if tv then lookup[3] = tv end elseif what ~= "substitution" then local tv = tables[lookup] if tv then slookups[tag] = tv end end end end end local mlookups = description.mlookups if mlookups then local tv = tables[mlookups] if tv then description.mlookups = tv mlookups = unpacked[tv] end if mlookups then for tag, list in next, mlookups do local tv = tables[list] if tv then mlookups[tag] = tv list = unpacked[tv] end if list then local what = lookuptypes[tag] if what == "pair" then for i=1,#list do local lookup = list[i] local tv = tables[lookup[2]] if tv then lookup[2] = tv end local tv = tables[lookup[3]] if tv then lookup[3] = tv end end elseif what ~= "substitution" then for i=1,#list do local tv = tables[list[i]] if tv then list[i] = tv end end end end end end end local kerns = description.kerns if kerns then local tm = tables[kerns] if tm then description.kerns = tm kerns = unpacked[tm] end if kerns then for k, kern in next, kerns do local tv = tables[kern] if tv then kerns[k] = tv end end end end local math = description.math if math then local kerns = math.kerns if kerns then local tm = tables[kerns] if tm then math.kerns = tm kerns = unpacked[tm] end if kerns then for k, kern in next, kerns do local tv = tables[kern] if tv then kerns[k] = tv end end end end end local anchors = description.anchors if anchors then local ta = tables[anchors] if ta then description.anchors = ta anchors = unpacked[ta] end if anchors then for tag, anchor in next, anchors do if tag == "baselig" then for _, list in next, anchor do for i=1,#list do local tv = tables[list[i]] if tv then list[i] = tv end end end else for a, data in next, anchor do local tv = tables[data] if tv then anchor[a] = tv end end end end end end local altuni = description.altuni if altuni then local altuni = tables[altuni] if altuni then description.altuni = altuni for i=1,#altuni do local tv = tables[altuni[i]] if tv then altuni[i] = tv end end end end end local lookups = data.lookups if lookups then for _, lookup in next, lookups do local rules = lookup.rules if rules then for i=1,#rules do -- was next loop local rule = rules[i] local before = rule.before if before then local tv = tables[before] if tv then rule.before = tv before = unpacked[tv] end if before then for i=1,#before do local tv = tables[before[i]] if tv then before[i] = tv end end end end local after = rule.after if after then local tv = tables[after] if tv then rule.after = tv after = unpacked[tv] end if after then for i=1,#after do local tv = tables[after[i]] if tv then after[i] = tv end end end end local current = rule.current if current then local tv = tables[current] if tv then rule.current = tv current = unpacked[tv] end if current then for i=1,#current do local tv = tables[current[i]] if tv then current[i] = tv end end end end local replacements = rule.replacements if replacements then local tv = tables[replacements] if tv then rule.replacements = tv end end local fore = rule.fore if fore then local tv = tables[fore] if tv then rule.fore = tv end end local back = rule.back if back then local tv = tables[back] if tv then rule.back = tv end end local names = rule.names if names then local tv = tables[names] if tv then rule.names = tv end end local lookups = rule.lookups if lookups then local tv = tables[lookups] if tv then rule.lookups = tv end end end end end end local anchor_to_lookup = resources.anchor_to_lookup if anchor_to_lookup then for anchor, lookup in next, anchor_to_lookup do local tv = tables[lookup] if tv then anchor_to_lookup[anchor] = tv end end end local lookup_to_anchor = resources.lookup_to_anchor if lookup_to_anchor then for lookup, anchor in next, lookup_to_anchor do local tv = tables[anchor] if tv then lookup_to_anchor[lookup] = tv end end end local ls = resources.sequences if ls then for _, feature in next, ls do local flags = feature.flags if flags then local tv = tables[flags] if tv then feature.flags = tv end end local subtables = feature.subtables if subtables then local tv = tables[subtables] if tv then feature.subtables = tv end end local features = feature.features if features then local tv = tables[features] if tv then feature.features = tv features = unpacked[tv] end if features then for script, data in next, features do local tv = tables[data] if tv then features[script] = tv end end end end end end local lookups = resources.lookups if lookups then for _, lookup in next, lookups do local flags = lookup.flags if flags then local tv = tables[flags] if tv then lookup.flags = tv end end local subtables = lookup.subtables if subtables then local tv = tables[subtables] if tv then lookup.subtables = tv end end end end local features = resources.features if features then for _, what in next, glists do local feature = features[what] if feature then for tag, spec in next, feature do local tv = tables[spec] if tv then feature[tag] = tv end end end end end data.tables = nil end end end if otf.enhancers.register then otf.enhancers.register( "pack", packdata) otf.enhancers.register("unpack",unpackdata) -- todo: directive end otf.enhancers.unpack = unpackdata -- used elsewhere context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-inc.mkiv0000644000175000017500000006725512130411274024302 0ustar norbertnorbert%D \module %D [ file=grph-inc, % moved from core-fig %D version=2006.08.26, % overhaul of 1997.03.31 %D title=\CONTEXT\ Graphic Macros, %D subtitle=Figure Inclusion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: messages \writestatus{loading}{ConTeXt Graphic Macros / Figure Inclusion} \registerctxluafile{grph-inc}{1.001} \registerctxluafile{grph-fil}{1.001} \registerctxluafile{grph-u3d}{1.001} % this will change \registerctxluafile{grph-swf}{1.001} % this will change \unprotect %D Including graphics is complicated by the fact that we need to locate them first, %D optionally manipulate them and scale then next. Lookups are to be done as efficient %D as possible and inclusion of the data might happens only once. In \MKIV\ much of this %D is delegated to the \LUA\ end. There is nor so much less code as in \MKII\ but it's %D more powerful, flexible, pluggable and some of the extended functionality has been %D moved from modules to the core. The overall functionality is rather stable and has %D not changed much over the years. \ifdefined\dotagfigure \else \let\dotagfigure\relax \fi \installcorenamespace{externalfigure} \installcorenamespace{externalfigureinstance} \installcorenamespace{externalfigurecollection} \installframedcommandhandler \??externalfigure {externalfigure} \??externalfigure \let\setupexternalfigures\setupexternalfigure \setupexternalfigures[% we really need the defaults \c!method =, \c!label =, \c!size =, \c!conversion =, \c!resolution =, \c!prefix =, \c!cache =, \c!page =\zerocount, \c!display =, \c!mask =, \c!preset =\v!yes, \c!split =, \c!color =, \c!symbol =\v!no, \c!controls =\v!no, \c!resources =, \c!preview =\v!no \c!repeat =\v!no \c!foregroundcolor=, \c!interaction =\v!none, \c!hfactor =, \c!wfactor =, \c!factor =, \c!maxwidth =\externalfigureparameter\c!width, \c!maxheight =\externalfigureparameter\c!height, \c!xscale =, \c!yscale =, \c!scale =, \c!sx =\externalfigureparameter\c!s, \c!sy =\externalfigureparameter\c!s, \c!s =1, \c!width =, \c!height =, \c!lines =, \c!grid =, \c!bodyfont =\bodyfontsize, \c!object =\v!yes, \c!corner =\v!rectangular, \c!frame =\v!off, \c!option =, \c!reset =\v!no, \c!directory =, \c!radius =.5\bodyfontsize, \c!background =, \c!splitcolor =\s!white, \c!order =, \c!equalwidth =, \c!equalheight =, \c!location ={\v!local,\v!global}, \c!frames =\v!off, \c!ymax =24, \c!xmax =, \c!align =\v!none, % New, for Tacos extremely large graphics. ] %D Defining figures. \newcount\c_grph_include_nesting \newtoks \everyexternalfigureresets % for the moment still public \newtoks \everyexternalfigurechecks % for the moment still public % \useexternalfigure[alpha][koe] % \useexternalfigure[beta] [koe] [breedte=1cm] % \useexternalfigure[gamma][koe][alpha] % \useexternalfigure[delta][koe][alpha][breedte=2cm] % % volle breedte: \externalfigure[koe] \par % 3cm breed: \externalfigure[koe] [breedte=3cm] \par % volle breedte: \externalfigure[alpha] \par % 1cm breed: \externalfigure[beta] \par % volle breedte: \externalfigure[gamma] \par % 2cm breed: \externalfigure[delta] \par % 4cm breed: \externalfigure[beta] [breedte=4cm] \par % 5cm breed: \externalfigure[gamma][breedte=5cm] \par % % \defineexternalfigure[a][width=10cm] % \defineexternalfigure[b][width=5cm] % \externalfigure[cow][a] % \externalfigure[cow][b][height=8cm] % % \useexternalfigure[x][cow][width=10cm,height=1cm] % \externalfigure[x] % \externalfigure[x][width=3cm] % % [label] [filename] % [label] [filename] [parent] % [label] [filename] [parent] [settings] % [label] [filename] [settings] % % new: more convenient/efficient than % % \use..[a][a][setting] \externalfigure[b][a] % % is equivalent to: % % \def..[a][setting] \externalfigure[b][a] % % see x-res modules for usage: % % \defineexternalfigure[name][settings] %D Defining is persistent, i.e.\ when you redefine an instance, %D the already set parameters need to be set again or otherwise %D the old values will be used. \newconditional\c_grph_include_trace_inheritance \installtextracker {graphics.inheritance} {\settrue \c_grph_include_trace_inheritance} {\setfalse\c_grph_include_trace_inheritance} \installcorenamespace{externalfiguredefinition} % \unexpanded\def\defineexternalfigure % {\dodoubleargument\grph_include_define} % % \def\grph_include_define[#1][#2]% % {\setvalue{\??externalfiguredefinition#1}{\setupcurrentexternalfigure[#2]}} \let\defineexternalfigures\defineexternalfigure \unexpanded\def\useexternalfigure {\doquadrupleempty\grph_include_use} % label file parent settings % label file settings % label file parent \def\grph_include_use[#1][#2][#3][#4]% {\doifelsenothing{#1} {\doifsomething{#2} {\doifassignmentelse{#3} {\grph_include_use_indeed{#2}{#2}{#3}{#4}} {\grph_include_use_indeed{#2}{#2}\empty{#4}}}} {\doifelsenothing{#2} {\doifassignmentelse{#3} {\grph_include_use_indeed{#1}{#1}\empty{#3}} {\grph_include_use_indeed{#1}{#1}{#3}{#4}}} {\doifassignmentelse{#3} {\grph_include_use_indeed{#1}{#2}\empty{#3}} {\grph_include_use_indeed{#1}{#2}{#3}{#4}}}}} \def\grph_include_use_indeed#1#2#3#4% {\setvalue{\??externalfigureinstance#1}{\grph_include_setup{#2}{#3}{#4}}% \grph_include_analyze_collection[#2][#4]} % inclusion \unexpanded\def\externalfigure {\dotripleempty\grph_include_figure} \def\grph_include_figure[#1][#2][#3]% {\docheckassignment{#2}% \ifassignment \grph_include_place[#1][][#2]% \else \grph_include_place[#1][#2][#3]% \fi} % todo: chain them \def\grph_include_setup#1#2#3% name parent settings {\edef\m_grph_include_name {#1}% \edef\m_grph_include_parent{#2}% \ifx\m_grph_include_name\empty \else \let\p_grph_include_name\m_grph_include_name \fi \ifx\m_grph_include_parent\empty \else \grph_include_inherit_from_parent\m_grph_include_parent \fi \setupcurrentexternalfigure[#3]} % \def\grph_include_inherit_from_parent#1% % {\ifcsname\??externalfiguredefinition#1\endcsname % \ifconditional\c_grph_include_trace_inheritance\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from definition: #1}\fi % \csname\??externalfiguredefinition#1\endcsname % \fi % \ifcsname\??externalfigureinstance#1\endcsname % \ifconditional\c_grph_include_trace_inheritance\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from instance: #1}\fi % \csname\??externalfigureinstance#1\endcsname % \fi} \def\grph_include_inherit_from_parent#1% {%\ifcsname\??externalfiguredefinition#1\endcsname % \ifconditional\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from definition: #1}\fi % \csname\??externalfiguredefinition#1\endcsname %\fi \ifcsname\??externalfigure#1:\s!parent\endcsname \let\currentexternalfigure#1% \fi \ifcsname\??externalfigureinstance#1\endcsname \ifconditional\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from instance: #1}\fi \csname\??externalfigureinstance#1\endcsname \fi} \newtoks\t_grph_include_local_settings \appendtoks \let\textunderscore\letterunderscore % {\string _} % space needed as _ is now letter in unprotected mode (probably no longer needed) % \dontcomplain \restorecatcodes \forgetall \to \t_grph_include_local_settings \def\grph_include_place_inherit {\ifconditional\c_grph_include_trace_inheritance \writestatus\m!figures{label: \p_grph_include_label, name: \p_grph_include_name, parent: \p_grph_include_parent}% \fi \ifx\p_grph_include_parent\empty % nothing to be done \else\ifx\p_grph_include_parent\p_grph_include_label % redundant \else \grph_include_inherit_from_parent\p_grph_include_parent \fi\fi \ifx\p_grph_include_label\empty % nothing to be done \else \grph_include_inherit_from_parent\p_grph_include_label \fi} \def\grph_include_place[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings] {\bgroup \advance\c_grph_include_nesting\plusone \edef\currentexternalfigure{\the\c_grph_include_nesting}% \checkexternalfigureparent % each inherits from the root % \the\everyexternalfigureresets % \edef\p_grph_include_label{#1}% \let\p_grph_include_name\p_grph_include_label \docheckassignment{#2}% \ifassignment % [label] [settings] \let\p_grph_include_parent\p_grph_include_label \grph_include_place_inherit \setupcurrentexternalfigure[#2]% \else % [label] [parent] [settings] \edef\p_grph_include_parent{#2}% \ifx\p_grph_include_parent\empty \let\p_grph_include_parent\p_grph_include_label \fi \grph_include_place_inherit \setupcurrentexternalfigure[#3]% \fi % \the\everyexternalfigurechecks % \the\t_grph_include_local_settings % \edef\p_width {\externalfigureparameter\c!width}% \edef\p_height{\externalfigureparameter\c!height}% % \dostarttagged\t!image\empty \ctxlua{figures.push { name = "\p_grph_include_name", label = "\p_grph_include_label", page = "\externalfigureparameter\c!page", size = "\externalfigureparameter\c!size", object = "\externalfigureparameter\c!object", prefix = "\externalfigureparameter\c!prefix", cache = "\externalfigureparameter\c!cache", format = "\externalfigureparameter\c!method", preset = "\externalfigureparameter\c!prefix", controls = "\externalfigureparameter\c!controls", resources = "\externalfigureparameter\c!resources", preview = "\externalfigureparameter\c!preview", display = "\externalfigureparameter\c!display", mask = "\externalfigureparameter\c!mask", conversion = "\externalfigureparameter\c!conversion", resolution = "\externalfigureparameter\c!resolution", color = "\internalspotcolorparent{\externalfigureparameter\c!color}", % hack is needed ["repeat"] = "\externalfigureparameter\c!repeat", \ifx\p_width\empty \else width = \number\dimexpr\p_width, \fi \ifx\p_height\empty \else height = \number\dimexpr\p_height, \fi } }% \ctxlua{figures.identify()}% % also mode: checkpresense only \ifconditional\c_grph_include_test_only \ifcase\figurestatus \else \ctxlua{figures.check()}% \ctxlua{figures.dummy()}% \ctxlua{figures.scale()}% \ctxlua{figures.done()}% \fi \grph_include_set_mode \else \ifcase\figurestatus \ctxlua{figures.dummy()}% \ctxlua{figures.scale()}% \else \ctxlua{figures.check()}% \ctxlua{figures.include()}% \ctxlua{figures.scale()}% \fi \ctxlua{figures.done()}% \grph_include_set_mode \grph_include_finalize \fi \ctxlua{figures.pop()}% \dotagfigure \naturalvbox attr \imageattribute 2 {\box\foundexternalfigure}% \dostoptagged \egroup} %D Scaling: \let\dowithfigure\relax % name might change (into a proper hook) \unexpanded\def\doscalefigure % used at lua end {\global\setbox\foundexternalfigure\vbox{\scale[\v!figure]{\dowithfigure{\box\foundexternalfigure}}}} \definescale % some day we will inherit [\v!figure] [\c!hfactor =\externalfigureparameter\c!hfactor, \c!wfactor =\externalfigureparameter\c!wfactor, \c!factor =\externalfigureparameter\c!factor, \c!maxwidth =\externalfigureparameter\c!maxwidth , \c!maxheight =\externalfigureparameter\c!maxheight, \c!equalwidth =\externalfigureparameter\c!equalwidth , \c!equalheight=\externalfigureparameter\c!equalheight, \c!xscale =\externalfigureparameter\c!xscale, \c!yscale =\externalfigureparameter\c!yscale, \c!scale =\externalfigureparameter\c!scale, \c!sx =\externalfigureparameter\c!sx, \c!sy =\externalfigureparameter\c!sy, \c!s =\externalfigureparameter\c!s, \c!width =\externalfigureparameter\c!width, \c!height =\externalfigureparameter\c!height, \c!lines =\externalfigureparameter\c!lines] % % this will become: % % \unexpanded\def\doscalefigure % used at lua end % {\global\setbox\foundexternalfigure\vbox\bgroup % \bgroup % \let\currentscale\currentexternalfigure % \let\scaleparameter\externalfigureparameter % \dowithnextboxcs\grph_scale_finish\hbox{\dowithfigure{\box\foundexternalfigure}}% % \egroup} % % % or even better: % % \def\grph_scale_inherited#1% % {\bgroup % \expandafter\let\expandafter\currentscale \csname current#1\endcsname % \expandafter\let\expandafter\scaleparameter\csname #1parameter\endcsname % \dowithnextboxcs\grph_scale_finish\hbox} % % \unexpanded\def\doscalefigure % used at lua end % {\global\setbox\foundexternalfigure\vbox\bgroup % \grph_scale_inherited{externalfigure}{\dowithfigure{\box\foundexternalfigure}}% % \egroup} %D You can register additional suffixes with the following command: %D %D \starttyping %D \definegraphictypesynonym[jbig] [jb2] %D \definegraphictypesynonym[jbig2][jb2] %D \definegraphictypesynonym[jbg] [jb2] %D \stoptyping \unexpanded\def\definegraphictypesynonym {\dodoubleargument\grph_include_set_type_synonym} \def\grph_include_set_type_synonym[#1][#2]% {\ctxlua{figures.registersuffix("#1","#2")}} %D Additional paths can be installed with the regular setup command. The next %D macro picks up the list. \unexpanded\def\setfigurepathlist {\ctxlua{figures.setpaths("\externalfigureparameter\c!location",\!!bs\externalfigureparameter\c!directory\!!es)}} %D Variables: \newbox \foundexternalfigure \newtoks\externalfigurepostprocessors \def\defaultfigurewidth {8\lineheight} \def\defaultfigureheight {6\lineheight} \def\figurestatus {\numexpr\ctxcommand{figurestatus("status",0)}\relax} % number: 0 = not found \def\figurewidth {\ctxcommand{figurestatus("width",0)}sp} \def\figureheight {\ctxcommand{figurestatus("height",0)}sp} \def\figurexscale {\ctxcommand{figurestatus("xscale",1)}} \def\figureyscale {\ctxcommand{figurestatus("yscale",1)}} \def\figuresize {\ctxcommand{figurerequest("size")}} \def\figurelabel {\ctxcommand{figurerequest("label")}} \def\figurefileoriginal {\ctxcommand{figurerequest("name")}} \def\figurefilepage {\ctxcommand{figurerequest("page",1)}} \def\figurefileoptions {\ctxcommand{figurerequest("options")}} \def\figurefileconversion{\ctxcommand{figurerequest("conversion")}} \def\figurefilecache {\ctxcommand{figurerequest("cache")}} \def\figurefileprefix {\ctxcommand{figurerequest("prefix")}} \def\figurenaturalwidth {\ctxcommand{figureused("width", \number\dimexpr\defaultfigurewidth \relax)}sp} \def\figurenaturalheight {\ctxcommand{figureused("height",\number\dimexpr\defaultfigureheight\relax)}sp} \def\figurexresolution {\ctxcommand{figureused("xresolution",0)}} \def\figureyresolution {\ctxcommand{figureused("yresolution",0)}} \def\figurexsize {\ctxcommand{figureused("xsize",0)}} \def\figureysize {\ctxcommand{figureused("ysize",0)}} \def\figurecolordepth {\ctxcommand{figureused("colordepth",0)}} \def\figuredepth {\ctxcommand{figureused("depth",0)}} \def\figurefullname {\ctxcommand{figureused("fullname")}} \def\noffigurepages {\ctxcommand{figureused("pages",0)}} \def\figurefilepath {\ctxcommand{figurefilepath()}} \def\figurefilename {\ctxcommand{figurefilename()}} \def\figurefiletype {\ctxcommand{figurefiletype()}} \let\naturalfigurewidth \figurenaturalwidth \let\naturalfigureheight \figurenaturalheight \let\figurescalewidth \figurewidth \let\figurescaleheight \figureheight \let\figurescalexscale \figurexscale \let\figurescaleyscale \figureyscale %D Abuse: %D %D \starttyping %D \externalfigure[rubish.pdf] \ifcase\figurestatus\relax \ctxlua{os.exit(999)} \fi %D \stoptyping %D Calculating: % \enabletrackers[figures.conversion] % \externalfigure[demo.svg] % \externalfigure[demo.svg][conversion=png] %D The following registers are used (if only to be downward compatible). \newconditional\c_grph_include_skip \newconditional\c_grph_include_test_only \newconditional\c_grph_include_level \setfalse\c_grph_include_level % true=background false=normal \newconditional\c_grph_include_flush \settrue \c_grph_include_flush % true=place false=ignore \newsystemmode\v!figure \def\grph_include_set_mode {\ifcase\figurestatus \global\resetsystemmode\v!figure % todo, also: \v!resource \else \global\setsystemmode \v!figure % todo, also: \v!resource \fi} \appendtoks \ctxlua { % figures.defaultwidth .. maybe a dimen some day figures.setpaths("\externalfigureparameter\c!location","\externalfigureparameter\c!directory") ; figures.defaultwidth = \number\dimexpr\defaultfigurewidth \relax ; figures.defaultheight = \number\dimexpr\defaultfigureheight\relax ; figures.boxnumber = \number\foundexternalfigure ; }% \to \everyexternalfigureresets \appendtoks \edef\p_option{\externalfigureparameter\c!option}% \ifx\p_option\v!frame \setfalse\c_grph_include_skip \letexternalfigureparameter\c!frame\v!on \else\ifx\p_option\v!empty \settrue\c_grph_include_skip \letexternalfigureparameter\c!frame\v!off \else \setfalse\c_grph_include_skip \fi\fi % fake color in gray bitmaps, assumes that % a transparent color is used \edef\p_foregroundcolor{\externalfigureparameter\c!foregroundcolor}% \ifx\p_foregroundcolor\empty \else \setexternalfigureparameter\c!background{\v!foreground,\v!color}% \letexternalfigureparameter\c!backgroundcolor\p_foregroundcolor \fi \to \everyexternalfigurechecks %D Internal graphics are handled at the \TEX\ end: \def\grph_include_process_tex#1% {\global\setbox\foundexternalfigure\vbox\framed [\c!strut=\v!no,\c!align=\v!normal,\c!frame=\v!off, \c!offset=\v!overlay,\c!width=\v!fit,\c!height=\v!fit] {\blank[\v!disable]#1\endgraf\removelastskip}} % disable should stay here! \def\grph_include_process_mps#1% retrofit into mkii {\global\setbox\foundexternalfigure\vbox{\convertMPtoPDF{#1}11}} \def\grph_include_process_cld#1% {\global\setbox\foundexternalfigure\vbox{\cldprocessfile{#1}}} \unexpanded\def\docheckfigurebuffer #1{\grph_include_process_tex{\getbuffer[#1]}} % used al lua end \unexpanded\def\docheckfiguretex #1{\grph_include_process_tex{\input{#1}}} % used al lua end \unexpanded\def\docheckfigurecld #1{\grph_include_process_cld{#1}} % used al lua end \unexpanded\def\docheckfiguremps #1{\grph_include_process_mps{#1}} % used al lua end \unexpanded\def\docheckfiguremprun #1#2{\grph_include_process_tex{\useMPrun{#1}{#2}}} % used al lua end \unexpanded\def\relocateexternalfigure % easier here than in lua {\global\setbox\foundexternalfigure\vbox to \ht\foundexternalfigure\bgroup \vss \ht\foundexternalfigure\zeropoint \hbox to \wd\foundexternalfigure\bgroup \box\foundexternalfigure \hss \egroup \egroup} \unexpanded\def\startfoundexternalfigure#1#2% ht wd {\global\setbox\foundexternalfigure\vbox to #2\bgroup\vss\hbox to #1\bgroup} \unexpanded\def\stopfoundexternalfigure {\hss\egroup\egroup} \unexpanded\def\emptyfoundexternalfigure % sort of obsolete {\startfoundexternalfigure\defaultfigurewidth\defaultfigureheight \stopfoundexternalfigure} % \doifmodeelse{*\v!last} % {\settrue \c_grph_include_flush} % {\setfalse\c_grph_include_flush}% \def\grph_include_finalize {\global\setbox\foundexternalfigure\vbox {\ifcase\figurestatus \letexternalfigureparameter\c!frame\v!on \fi \ifconditional\c_grph_include_flush \ifconditional\c_grph_include_level % probably background \ifconditional\c_grph_include_skip % nothing \fakebox\foundexternalfigure \else\ifcase\figurestatus % nothing \else \the\externalfigurepostprocessors \box\foundexternalfigure \fi\fi \else \iftrialtypesetting \else \feedbackexternalfigure \fi \settrue\c_grph_include_level \ifconditional\c_grph_include_skip \ifcase\figurestatus \grph_include_replacement\figurelabel\figurefileoriginal{unknown}% \else \grph_include_replacement\figurelabel\figurefullname{skipped}% \fi \else\ifcase\figurestatus \grph_include_replacement\figurelabel\figurefileoriginal{unknown}% \else \the\externalfigurepostprocessors \edef\p_reset{\externalfigureparameter\c!reset}% \ifx\p_reset\v!yes \wd\foundexternalfigure\figurewidth \ht\foundexternalfigure\figureheight \dp\foundexternalfigure\zeropoint \box\foundexternalfigure \else \letexternalfigureparameter\c!offset\v!overlay \letexternalfigureparameter\c!width \figurewidth \letexternalfigureparameter\c!height\figureheight \inheritedexternalfigureframed{\vfilll\box\foundexternalfigure}% \fi \fi\fi \fi \else % maybe also \the\externalfigurepostprocessors \iftrialtypesetting \else \feedbackexternalfigure \fi \fi}} \let\feedbackexternalfigure\relax % hook \unexpanded\def\getfiguredimensions {\dodoubleempty\grph_include_get_dimensions} \def\grph_include_get_dimensions[#1][#2]% {\startnointerference \settrue\c_grph_include_test_only \externalfigure[#1][#2,\c!display=,\c!mask=,\c!object=\v!no]% \stopnointerference} \unexpanded\def\doiffigureelse#1% {\getfiguredimensions[#1]% so data is available ! \ifcase\figurestatus \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} % No placement, handy for preprocessing: \unexpanded\def\registerexternalfigure {\dotripleempty\grph_include_register} \def\grph_include_register[#1][#2][#3]% {\startnointerference \c_grph_include_test_only \setfalse\c_grph_include_flush % == test ? \externalfigure[#1][#2][#3]% or \externalfigure[#1][#2,\c!display=,\c!mask=,\c!object=\v!no]% \stopnointerference} % Helpers (will be replaced when xforms are accessible at the lua end) \unexpanded\def\dosetfigureobject#1% {\setobject{FIG}{#1}\vbox{\box\foundexternalfigure}} \unexpanded\def\doboxfigureobject#1% {\global\setbox\foundexternalfigure\vbox{\getobject{FIG}{#1}}} % probably one vbox too many % Figure bases \unexpanded\def\usefigurebase[#1]% {\ctxlua{figures.bases.use("#1")}} \appendtoks \setfigurepathlist % the path may be used elsewhere too (as in x-res-04) \to \everysetupexternalfigure \appendtoks \ctxcommand{setfigurelookuporder("\externalfigureparameter\c!order")}% \to \everysetupexternalfigure \definecolor[missingfigurecolor][s=.8] \def\grph_include_replacement#1#2#3% {\bgroup \letexternalfigureparameter\c!width\figurewidth \letexternalfigureparameter\c!height\figureheight \letexternalfigureparameter\c!background\v!color \setexternalfigureparameter\c!backgroundcolor{missingfigurecolor}% \setexternalfigureparameter\c!align{\v!middle,\v!lohi}% we default to \v!none \inheritedexternalfigureframed {\tt\tfxx \nohyphens name: \expanded{\verbatimstring{#1}}\\% file: \expanded{\verbatimstring{#2}}\\% state: \expanded{\verbatimstring{#3}}}% \egroup} % maybe setuphandler \newconditional\c_grph_include_in_collection \newdimen\d_grph_include_collection_minwidth \newdimen\d_grph_include_collection_maxwidth \newdimen\d_grph_include_collection_minheight \newdimen\d_grph_include_collection_maxheight \def\grph_include_analyze_collection[#1][#2]% {\ifconditional\c_grph_include_in_collection \setfalse\c_grph_include_in_collection \getfiguredimensions[#1][#2]% \settrue\c_grph_include_in_collection \scratchdimen\naturalfigurewidth \ifdim\scratchdimen>\d_grph_include_collection_maxwidth \d_grph_include_collection_maxwidth \scratchdimen \fi \ifdim\scratchdimen<\d_grph_include_collection_minwidth \d_grph_include_collection_minwidth \scratchdimen \fi \scratchdimen\naturalfigureheight \ifdim\scratchdimen>\d_grph_include_collection_maxheight \d_grph_include_collection_maxheight\scratchdimen \fi \ifdim\scratchdimen<\d_grph_include_collection_minheight \d_grph_include_collection_minheight\scratchdimen \fi \fi} \unexpanded\def\startexternalfigurecollection[#1]% {\begingroup \def\currentexternalfigurecollection{#1}% \settrue\c_grph_include_in_collection \d_grph_include_collection_minwidth \maxdimen \d_grph_include_collection_maxwidth \zeropoint \d_grph_include_collection_minheight\maxdimen \d_grph_include_collection_maxheight\zeropoint} \unexpanded\def\stopexternalfigurecollection {\setxvalue{\??externalfigurecollection\currentexternalfigurecollection:\c!minwidth }{\the\d_grph_include_collection_minwidth }% \setxvalue{\??externalfigurecollection\currentexternalfigurecollection:\c!maxwidth }{\the\d_grph_include_collection_maxwidth }% \setxvalue{\??externalfigurecollection\currentexternalfigurecollection:\c!minheight}{\the\d_grph_include_collection_minheight}% \setxvalue{\??externalfigurecollection\currentexternalfigurecollection:\c!maxheight}{\the\d_grph_include_collection_maxheight}% \endgroup} \def\externalfigurecollectionparameter#1#2% {\csname \ifcsname\??externalfigurecollection#1:#2\endcsname \??externalfigurecollection#1:#2% \else \s!empty \fi \endcsname} \def\externalfigurecollectionminwidth #1{\externalfigurecollectionparameter{#1}\c!minwidth } \def\externalfigurecollectionmaxwidth #1{\externalfigurecollectionparameter{#1}\c!maxwidth } \def\externalfigurecollectionminheight#1{\externalfigurecollectionparameter{#1}\c!minheight} \def\externalfigurecollectionmaxheight#1{\externalfigurecollectionparameter{#1}\c!maxheight} \let\efcparameter\externalfigurecollectionparameter % still needed ? \let\efcminwidth \externalfigurecollectionminwidth % still needed ? \let\efcmaxwidth \externalfigurecollectionmaxwidth % still needed ? \let\efcminheight\externalfigurecollectionminheight % still needed ? \let\efcmaxheight\externalfigurecollectionmaxheight % still needed ? % \startexternalfigurecollection[name] % \useexternalfigure[cow] [cow.pdf] % \useexternalfigure[mill][mill.png] % \stopexternalfigurecollection % \starttext % \bTABLE % \bTR % \bTD \externalfigure[cow] [height=\externalfigurecollectionmaxheight{name}] \eTD % \bTD \externalfigure[mill][height=\externalfigurecollectionmaxheight{name}] \eTD % \eTR % \eTABLE % \stoptext \unexpanded\def\showexternalfigures {\writestatus\m!system{the \string\showexternalfigures\space command is not (yet) implemented in mkiv}} \unexpanded\def\overlayfigure#1% {\externalfigure[#1][\c!width=\overlaywidth,\c!height=\overlayheight]} % Bonus: \useexternalfigure [buffer] [\jobname.buffer] [\c!object=\v!no] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-sys.mkii0000644000175000017500000002667411754241457024341 0ustar norbertnorbert%D \module %D [ file=core-sys, % moved from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=System, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / System} \unprotect %D Version checking: \def\newcontextversion#1% {\doifelse{#1}\contextversion {\let\newcontextversion\gobbleoneargument} {\writeline \writestatus{Fatal Error}{Your format does not match the base files!}% \writeline \writestatus{Format Version}{\contextversion\space\contextmark}% \writestatus{Files Version}{#1}% \batchmode \normalend}} %D End of lines to the output. \TEX\ will map this onto the platform specific %D line ending. I hate this mess. %newlinechar=10 \def\outputnewlinechar{\rawcharacter{10}} \newlinechar=10 \edef\outputnewlinechar{^^J} % in case formats are shared: \def\initializenewlinechar {\bgroup\newlinechar=10\xdef\outputnewlinechar{^^J}\egroup} %D Job names. \def\outputfilename {\@@svfile} \def\inputfilename {\@@svinputfile} \def\operatingsystem{\@@svtype} \let\jobfilename \jobname \let\jobfilesuffix\c!tex \def\splitjobfilename % todo: mkiv {\resetsystemmode{suffix-\jobfilesuffix}% \edef\ascii{\inputfilename}\defconvertedcommand\ascii\ascii \splitstring\ascii\at.\to\jobfilename\and\jobfilesuffix \lowercasestring\jobfilesuffix\to\jobfilesuffix \doifnothing\jobfilename {\let\jobfilename \jobname}% % todo and totest: \defconvertedcommand\jobfilename\jobfilename \doifnothing\jobfilesuffix{\let\jobfilesuffix\c!tex}% \setsystemmode{suffix-\jobfilesuffix}} % Some mechanisms (see x-res-01) use either \jobfilename or % \jobfilename.somesuffix, in which case we need to use the % full name if given or a default (like \jobfilename.xml); % this comes down to replacing the default tex suffix. \def\jobfullname{\jobfilename.\jobfilesuffix} \def\setjobfullname#1% #1 = default if not given {\doifelsenothing\jobfilename {\let\jobfullname\empty} {\doif\jobfilesuffix\c!tex{\edef\jobfullname{\jobfilename.#1}}}} % ... \def\dosetupsystem[#1]% {\getparameters[\??sv][#1]% \setuprandomize[\@@svrandom]% \beforesplitstring\@@svresolution\at dpi\to\@@svresolution \let\outputresolution\@@svresolution \ifcase\@@svn % % 0 : unknown \or \setsystemmode\v!first % 1 : first run \or % % 2 : successive run \or \setsystemmode\v!first % 3 : first and only run \or \setsystemmode\v!last % 4 : (extra) last run \fi % \processaction % [\@@svtype] % %[ mswin=>\edef\@@svline{\rawcharacter{13}\rawcharacter{10}}, % crlf % [ mswin=>\edef\@@svline{\rawcharacter{13}}, % cr % crlf % darwin=>\edef\@@svline{\rawcharacter{13}}, % cr % \s!unknown=>\edef\@@svline{\rawcharacter{10}}]% % lf \splitjobfilename} % \edef\@@svline{\rawcharacter{10}} % unix is the most critical/sensitive system \let\systemendofline\outputnewlinechar % will become obsolete \def\setupsystem {\dosingleargument\dosetupsystem} \def\systemparameter#1{\executeifdefined{\??sv#1}\empty} %D The system modes set by the setup command can be used in %D situations like: %D %D \starttyping %D \startmode[*first] %D \executesystemcommand{cleanupxml text.xml clean-text.xml} %D \stopmode %D %D \starttext %D \typefile{clean-text.xml} %D \stoptext %D \stoptyping \def\setuprandomize[#1]% {\doifsomething{#1} {\bgroup % tex's time is in minutes \scratchcounter\normaltime \processaction [#1] [ \v!small=>\divide\scratchcounter 15, % 900, \v!medium=>\divide\scratchcounter 30, % 1800, \v!big=>\divide\scratchcounter 60, % 3600, \v!normal=>\getnewrandomseed\scratchcounter, \s!default=>\getnewrandomseed\scratchcounter, \s!unknown=>\scratchcounter#1]% \expanded{\setrandomseed{\the\scratchcounter}}% % \writestatus\m!systems{randomseed: \the\scratchcounter}% \egroup}} \setupsystem [\c!directory=, \c!n=0, % 0:unknown 1: one run 2: first 3: successive 4: final run \c!resolution=600dpi, \c!random=, \c!file=\jobname, \c!inputfile=\outputfilename, \c!type=unix, % windows is normally less sensitive to handle \c!bodyfont=\normalizedlocalbodyfontsize] % of iets anders %D Remark: windows programs normally handle \type {cr|lf|crlf} but unix %D is more picky, so we default to the \type {cr}. I never understood why %D \type {crlf} was not used in all systems, since it makes most sense. \def\dostartglobaldefs#1#2% {\edef\!!stringa{\the\globaldefs}% \ifnum\globaldefs#10 \globaldefs-\globaldefs \fi \advance\globaldefs #21 \setevalue{@gd@\the\globaldefs}{\!!stringa}} \def\dostopglobaldefs {\doifdefinedelse{@gd@\the\globaldefs} {\globaldefs\getvalue{@gd@\the\globaldefs}\relax} {\globaldefs\zerocount}} \def\startlocal {\dostartglobaldefs>-} \def\stoplocal {\dostopglobaldefs} \def\startglobal {\dostartglobaldefs<+} \def\stopglobal {\dostopglobaldefs} \def\complexstart[#1]{\bgroup\getvalue{\e!start#1}} \def\complexstop [#1]{\getvalue{\e!stop #1}\egroup} \let\simplestart\bgroup \let\simplestop \egroup \definecomplexorsimple\start \definecomplexorsimple\stop \def\dododefinestartstop[#1][#2]% todo: use indirect commands {\getparameters [\??be#1] [\c!before=, \c!after=, \c!inbetween=, \c!commands=, \c!style=, #2]% \unexpanded\setvalue{#1}% {\groupedcommand {\getvalue{\??be#1\c!commands}% \dostartattributes{\??be#1}\c!style\c!color} {\dostopattributes \getvalue{\??be#1\c!inbetween}}}% \setvalue{\e!start#1}% {\getvalue{\??be#1\c!before}% \bgroup \getvalue{\??be#1\c!commands}% \dostartattributes{\??be#1}\c!style\c!color\empty}% \setvalue{\e!stop#1}% {\dostopattributes \egroup \getvalue{\??be#1\c!after}}} \def\dodefinestartstop[#1][#2]% {\def\docommand##1{\dododefinestartstop[##1][#2]}% \processcommalist[#1]\docommand} \def\definestartstop {\dodoubleargument\dodefinestartstop} \def\dosetupstartstop[#1][#2]% {\def\docommand##1{\getparameters[\??be##1][#2]}% \processcommalist[#1]\docommand} \def\setupstartstop {\dodoubleargument\dosetupstartstop} % \docommand kan niet worden gebruikt omdat deze macro % soms lokaal wordt gebruikt % te zijner tijd: % % \definevariable {pc} % ProtectedCommand % % \def\executeprotected#1% % {\csname\??pc\string#1\endcsname} % % \def\defineprotected#1#2% % {\expandafter\def\csname\??pc\string#2\endcsname} % % \def\defineunprotected#1% % {\def#1} % % \def\doprotected% % {\ifx\next\define % \let\next=\defineprotected % \else % \let\next=\executeprotected % \fi % \next} % % \def\unexpanded% % {\futurelet\next\doprotected} % % \unexpanded\define\ziezo{ziezo} % % \unexpanded\ziezo \def\complexdefine[#1]#2#3% {\ifx#2\undefined \else \showmessage\m!systems4{\string#2}% \fi \ifcase0#1\def#2{#3}% \or\def#2##1{#3}% \or\def#2##1##2{#3}% \or\def#2##1##2##3{#3}% \or\def#2##1##2##3##4{#3}% \or\def#2##1##2##3##4##5{#3}% \or\def#2##1##2##3##4##5##6{#3}% \or\def#2##1##2##3##4##5##6##7{#3}% \or\def#2##1##2##3##4##5##6##7##8{#3}% \or\def#2##1##2##3##4##5##6##7##8##9{#3}% \else\def#2{#3}% \fi} \definecomplexorsimpleempty\define \unexpanded\def\macroname#1% brrr {\executeifdefined{#1}\empty} \def\usecommands#1% {\bgroup \def\docommand##1{\setbox0\hbox{\getvalue{\string##1}##1}}% \processcommalist[#1]\docommand \egroup} \newif\ifforcefileexpansion % handy for document level overload %D The next implementation is about 4 times as faster than a %D processaction alternative on an string of average length. %D Since this feature is used in XML processing, it made sense %D to support this faster alternative. It's installable as well. \def\installexpander#1#2#3% changed, no longer \convert..\to... {\setvalue{\s!do\c!expansion#1l}{#2}% \setvalue{\s!do\c!expansion#1g}{#3}}% % \convertexpanded is obsolete \long\def\doconvertexpanded#1#2#3% #4 % [l|g] \cs {kind} {data} {\csname % that we assign all exp a value \s!do\c!expansion \ifforcefileexpansion \v!yes \else\ifcsname\s!do\c!expansion#3#1\endcsname #3% \else \s!default \fi\fi #1% \endcsname#2}% #3 \long\def\defconvertexpanded {\doconvertexpanded l} \long\def\gdefconvertexpanded{\doconvertexpanded g} \installexpander\v!command \defconvertedcommand \gdefconvertedcommand \installexpander\s!default \defconvertedargument \gdefconvertedargument \installexpander\empty \defconvertedargument \gdefconvertedargument \installexpander\v!no \defconvertedargument \gdefconvertedargument \installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning \installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning \installexpander\v!strict \defreducedargument \gdefreducedargument \installexpander {utf} \defreducedtoutf \gdefreducedtoutf %installexpander {xml} {see xtag-ext} \def\dodefconvertedmeaning#1#2#3% watch the double expansion ! {\bgroup \honorunexpanded \convertencodedtokens % can be overloaded \xdef\@@globalexpanded{#3}% \xdef\@@globalexpanded{\@@globalexpanded}% \egroup #1#2\@@globalexpanded} \def\defconvertedmeaning {\dodefconvertedmeaning\defconvertedcommand} \def\gdefconvertedmeaning{\dodefconvertedmeaning\gdefconvertedcommand} \def\dodefreducedargument#1#2#3% {\begingroup \reducetocoding[raw]% \edef\ascii{#3}% \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}} \def\defreducedargument {\dodefreducedargument\edef} \def\gdefreducedargument{\dodefreducedargument\xdef} % \setupindex[expansion=utf]\index{\eacute} \def\dodefreducedtoutf#1#2#3% {\begingroup \reducetocoding[uc]% \let\uchar\uchartoutf \let\unicodechar\numbertoutf \edef\ascii{#3}% \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}} \def\defreducedtoutf {\dodefreducedtoutf\edef} \def\gdefreducedtoutf{\dodefreducedtoutf\xdef} % old syntax: \def\convertmeaning#1\to#2% watch the double expansion ! {\bgroup \honorunexpanded \convertencodedtokens % can be overloaded \xdef\@@globalexpanded{#1}% \xdef\@@globalexpanded{\@@globalexpanded}% \egroup \defconvertedcommand#2\@@globalexpanded} \def\reduceargument#1\to#2% {\begingroup \reducetocoding[raw]% \edef\ascii{#1}% \expandafter\endgroup\expandafter\edef\expandafter#2\expandafter{\ascii}} \def\reducetoutf#1\to#2% {\begingroup \reducetocoding[uc]% \let\uchar\uchartoutf \let\unicodechar\numbertoutf \edef\ascii{#1}% \expandafter\endgroup\expandafter\edef\expandafter#2\expandafter{\ascii}} % \setvalue{statevalue\v!stop }{0} % \setvalue{statevalue\v!start }{1} % \setvalue{statevalue\v!normaal}{2} % \setvalue{statevalue\v!leeg }{3} % \setvalue{statevalue\v!geen }{4} % % \def\setcurrentstate#1% % {\chardef\currentstate=0\getvalue{statevalue\getvalue{#1\c!state}\relax} % % \ifcase\currentstate ... \def\redo{\dorepeat} % [n*10], kind of obsolete % obsolete, use \dorecurse instead % % \def\herhaler {\repeater} % \def\herhaalmetcommando {\dorepeatwithcommand} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-chemml.xsd0000644000175000017500000000552210526734267024143 0ustar norbertnorbert

This schema covers (basic presentational) Chemical markup. We will extend this schema with names and predefined components.

author: Hans Hagen, copyright: PRAGMA-ADE / Hasselt NL

context-2013.05.28.20130704/texmf-dist/tex/context/base/util-sta.lua0000644000175000017500000002131312130411274024131 0ustar norbertnorbertif not modules then modules = { } end modules ['util-sta'] = { version = 1.001, comment = "companion to util-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local insert, remove, fastcopy, concat = table.insert, table.remove, table.fastcopy, table.concat local format = string.format local select, tostring = select, tostring local trace_stacker = false trackers.register("stacker.resolve", function(v) trace_stacker = v end) local stacker = stacker or { } utilities.stacker = stacker local function start(s,t,first,last) if s.mode == "switch" then local n = tostring(t[last]) if trace_stacker then s.report("start: %s",n) end return n else local r = { } for i=first,last do r[#r+1] = tostring(t[i]) end local n = concat(r," ") if trace_stacker then s.report("start: %s",n) end return n end end local function stop(s,t,first,last) if s.mode == "switch" then local n = tostring(false) if trace_stacker then s.report("stop: %s",n) end return n else local r = { } for i=last,first,-1 do r[#r+1] = tostring(false) end local n = concat(r," ") if trace_stacker then s.report("stop: %s",n) end return n end end local function change(s,t1,first1,last1,t2,first2,last2) if s.mode == "switch" then local n = tostring(t2[last2]) if trace_stacker then s.report("change: %s",n) end return n else local r = { } for i=last1,first1,-1 do r[#r+1] = tostring(false) end local n = concat(r," ") for i=first2,last2 do r[#r+1] = tostring(t2[i]) end if trace_stacker then s.report("change: %s",n) end return n end end function stacker.new(name) local s local stack = { } local list = { } local ids = { } local hash = { } local hashing = true local function push(...) for i=1,select("#",...) do insert(stack,(select(i,...))) -- watch the () end if hashing then local c = concat(stack,"|") local n = hash[c] if not n then n = #list+1 hash[c] = n list[n] = fastcopy(stack) end insert(ids,n) return n else local n = #list+1 list[n] = fastcopy(stack) insert(ids,n) return n end end local function pop() remove(stack) remove(ids) return ids[#ids] or s.unset or -1 end local function clean() if #stack == 0 then if trace_stacker then s.report("%s list entries, %s stack entries",#list,#stack) end end end local tops = { } local top, switch local function resolve_begin(mode) if mode then switch = mode == "switch" else switch = s.mode == "switch" end top = { switch = switch } insert(tops,top) end local function resolve_step(ti) -- keep track of changes outside function ! -- todo: optimize for n=1 etc local result = nil local noftop = #top if ti > 0 then local current = list[ti] if current then local noflist = #current local nofsame = 0 if noflist > noftop then for i=1,noflist do if current[i] == top[i] then nofsame = i else break end end else for i=1,noflist do if current[i] == top[i] then nofsame = i else break end end end local plus = nofsame + 1 if plus <= noftop then if plus <= noflist then if switch then result = s.change(s,top,plus,noftop,current,nofsame,noflist) else result = s.change(s,top,plus,noftop,current,plus,noflist) end else if switch then result = s.change(s,top,plus,noftop,current,nofsame,noflist) else result = s.stop(s,top,plus,noftop) end end elseif plus <= noflist then if switch then result = s.start(s,current,nofsame,noflist) else result = s.start(s,current,plus,noflist) end end top = current else if 1 <= noftop then result = s.stop(s,top,1,noftop) end top = { } end return result else if 1 <= noftop then result = s.stop(s,top,1,noftop) end top = { } return result end end local function resolve_end() -- resolve_step(s.unset) local noftop = #top if noftop > 0 then local result = s.stop(s,top,1,#top) remove(tops) top = tops[#tops] switch = top and top.switch return result end end local function resolve(t) resolve_begin() for i=1,#t do resolve_step(t[i]) end resolve_end() end local report = logs.reporter("stacker",name or nil) s = { name = name or "unknown", unset = -1, report = report, start = start, stop = stop, change = change, push = push, pop = pop, clean = clean, resolve = resolve, resolve_begin = resolve_begin, resolve_step = resolve_step, resolve_end = resolve_end, } return s -- we can overload functions end -- local s = utilities.stacker.new("demo") -- -- local unset = s.unset -- local push = s.push -- local pop = s.pop -- -- local t = { -- unset, -- unset, -- push("a"), -- a -- push("b","c"), -- a b c -- pop(), -- a b -- push("d"), -- a b d -- pop(), -- a b -- unset, -- pop(), -- a -- pop(), -- b -- unset, -- unset, -- } -- -- s.resolve(t) -- demostacker = utilities.stacker.new("demos") -- -- local whatever = { -- one = "1 0 0 RG 1 0 0 rg", -- two = "1 1 0 RG 1 1 0 rg", -- [false] = "0 G 0 g", -- } -- -- local concat = table.concat -- -- local pdfliteral = nodes.pool.pdfliteral -- -- function demostacker.start(s,t,first,last) -- local n = whatever[t[last]] -- -- s.report("start: %s",n) -- return pdfliteral(n) -- end -- -- function demostacker.stop(s,t,first,last) -- local n = whatever[false] -- -- s.report("stop: %s",n) -- return pdfliteral(n) -- end -- -- function demostacker.change(s,t1,first1,last1,t2,first2,last2) -- local n = whatever[t2[last2]] -- -- s.report("change: %s",n) -- return pdfliteral(n) -- end -- -- demostacker.mode = "switch" -- -- local whatever = { -- one = "/OC /test1 BDC", -- two = "/OC /test2 BDC", -- [false] = "EMC", -- } -- -- demostacker = utilities.stacker.new("demos") -- -- function demostacker.start(s,t,first,last) -- local r = { } -- for i=first,last do -- r[#r+1] = whatever[t[i]] -- end -- -- s.report("start: %s",concat(r," ")) -- return pdfliteral(concat(r," ")) -- end -- -- function demostacker.stop(s,t,first,last) -- local r = { } -- for i=last,first,-1 do -- r[#r+1] = whatever[false] -- end -- -- s.report("stop: %s",concat(r," ")) -- return pdfliteral(concat(r," ")) -- end -- -- function demostacker.change(s,t1,first1,last1,t2,first2,last2) -- local r = { } -- for i=last1,first1,-1 do -- r[#r+1] = whatever[false] -- end -- for i=first2,last2 do -- r[#r+1] = whatever[t2[i]] -- end -- -- s.report("change: %s",concat(r," ")) -- return pdfliteral(concat(r," ")) -- end -- -- demostacker.mode = "stack" context-2013.05.28.20130704/texmf-dist/tex/context/base/core-con.lua0000644000175000017500000007763212130411274024113 0ustar norbertnorbertif not modules then modules = { } end modules ['core-con'] = { version = 1.001, comment = "companion to core-con.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

This module implements a bunch of conversions. Some are more efficient than their counterpart, some are even slower but look nicer this way.

Some code may move to a module in the language namespace.

--ldx]]-- local command, context = commands, context local floor, date, time, concat = math.floor, os.date, os.time, table.concat local lower, rep, match = string.lower, string.rep, string.match local utfchar, utfbyte = utf.char, utf.byte local tonumber, tostring = tonumber, tostring local context = context local settings_to_array = utilities.parsers.settings_to_array local allocate = utilities.storage.allocate local formatters = string.formatters local variables = interfaces.variables converters = converters or { } local converters = converters languages = languages or { } local languages = languages converters.number = tonumber converters.numbers = tonumber function commands.number(n) context(n) end commands.numbers = commands.number -- to be reconsidered ... languages namespace here, might become local plus a register command local counters = allocate { ['default'] = { -- no metatable as we do a test on keys 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A }, ['slovenian'] = { 0x0061, 0x0062, 0x0063, 0x010D, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0072, 0x0073, 0x0161, 0x0074, 0x0075, 0x0076, 0x007A, 0x017E }, ['greek'] = { -- this should be the lowercase table -- 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, -- 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, -- 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, -- 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, -- 0x03A6, 0x03A7, 0x03A8, 0x03A9 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, }, ['arabic'] = { 0x0627, 0x0628, 0x062C, 0x062F, 0x0647, 0x0648, 0x0632, 0x062D, 0x0637, 0x0649, 0x0643, 0x0644, 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, 0x0635, 0x0642, 0x0631, 0x0634, 0x062A, 0x062B, 0x062E, 0x0630, 0x0636, 0x0638, 0x063A, }, ['persian'] = { 0x0627, 0x0628, 0x062C, 0x062F, 0x0647, 0x0648, 0x0632, 0x062D, 0x0637, 0x0649, 0x06A9, 0x0644, 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, 0x0635, 0x0642, 0x0631, 0x0634, 0x062A, 0x062B, 0x062E, 0x0630, 0x0636, 0x0638, 0x063A, }, ['thai'] = { 0xE050, 0xE051, 0xE052, 0xE053, 0xE054, 0xE055, 0xE056, 0xE057, 0xE058, 0xE059 }, ['devangari'] = { 0x0966, 0x0967, 0x0968, 0x0969, 0x096A, 0x096B, 0x096C, 0x096D, 0x096E, 0x096F }, ['gurmurkhi'] = { 0x0A66, 0x0A67, 0x0A68, 0x0A69, 0x0A6A, 0x0A6B, 0x0A6C, 0x0A6D, 0x0A6E, 0x0A6F }, ['gujarati'] = { 0x0AE6, 0x0AE7, 0x0AE8, 0x0AE9, 0x0AEA, 0x0AEB, 0x0AEC, 0x0AED, 0x0AEE, 0x0AEF }, ['tibetan'] = { 0x0F20, 0x0F21, 0x0F22, 0x0F23, 0x0F24, 0x0F25, 0x0F26, 0x0F27, 0x0F28, 0x0F29 }, ['korean'] = { 0x3131, 0x3134, 0x3137, 0x3139, 0x3141, 0x3142, 0x3145, 0x3147, 0x3148, 0x314A, 0x314B, 0x314C, 0x314D, 0x314E }, ['korean-parent'] = { -- parenthesed 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209, 0x320A, 0x320B, 0x320C, 0x320D }, ['korean-circle'] = { -- circled 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, 0x326D }, } languages.counters = counters counters['ar'] = counters['arabic'] counters['gr'] = counters['greek'] counters['g'] = counters['greek'] counters['sl'] = counters['slovenian'] counters['kr'] = counters['korean'] counters['kr-p'] = counters['korean-parent'] counters['kr-c'] = counters['korean-circle'] local fallback = utfbyte('0') local function chr(n,m) return (n > 0 and n < 27 and utfchar(n+m)) or "" end local function chrs(n,m,t) if not t then t = { } end if n > 26 then chrs(floor((n-1)/26),m,t) n = (n-1)%26 + 1 end if n ~= 0 then t[#t+1] = utfchar(n+m) end if n <= 26 then return concat(t) end end local function maxchrs(n,m,cmd,t) if not t then t = { } end if n > m then maxchrs(floor((n-1)/m),m,cmd) n = (n-1)%m + 1 end t[#t+1] = formatters["%s{%s}"](cmd,n) if n <= m then return concat(t) end end converters.chr = chr converters.chrs = chrs converters.maxchrs = maxchrs local lowercharacter = characters.lcchars local uppercharacter = characters.ucchars local function do_alphabetic(n,mapping,mapper,t) -- todo: make zero based variant (initial n + 1) if not t then t = { } end local max = #mapping if n > max then do_alphabetic(floor((n-1)/max),mapping,mapper,t) n = (n-1) % max + 1 end local chr = mapping[n] or fallback t[#t+1] = mapper and mapper[chr] or chr if n <= max then return concat(t) end end function converters.alphabetic(n,code) return do_alphabetic(n,counters[code] or counters.default,lowercharacter) end function converters.Alphabetic(n,code) return do_alphabetic(n,counters[code] or counters.default,uppercharacter) end local lower_offset = 96 local upper_offset = 64 function converters.character (n) return chr (n,lower_offset) end function converters.Character (n) return chr (n,upper_offset) end function converters.characters(n) return chrs(n,lower_offset) end function converters.Characters(n) return chrs(n,upper_offset) end function commands.alphabetic(n,c) context(do_alphabetic(n,counters[c],lowercharacter)) end function commands.Alphabetic(n,c) context(do_alphabetic(n,counters[c],uppercharacter)) end function commands.character (n) context(chr (n,lower_offset)) end function commands.Character (n) context(chr (n,upper_offset)) end function commands.characters(n) context(chrs(n,lower_offset)) end function commands.Characters(n) context(chrs(n,upper_offset)) end local days = { [false] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, [true] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } } local function weekday(day,month,year) return date("%w",time{year=year,month=month,day=day}) + 1 end local function isleapyear(year) return (year % 400 == 0) or ((year % 100 ~= 0) and (year % 4 == 0)) end local function leapyear(year) return isleapyear(year) and 1 or 0 end local function nofdays(year,month) return days[isleapyear(year)][month] end local function textime() return tonumber(date("%H")) * 60 + tonumber(date("%M")) end function converters.year () return date("%Y") end function converters.month () return date("%m") end function converters.hour () return date("%H") end function converters.minute() return date("%M") end function converters.second() return date("%S") end converters.weekday = weekday converters.isleapyear = isleapyear converters.leapyear = leapyear converters.nofdays = nofdays converters.textime = textime function commands.weekday (day,month,year) context(weekday (day,month,year)) end function commands.leapyear(year) context(leapyear(year)) end -- rather useless function commands.nofdays (year,month) context(nofdays (year,month)) end function commands.year () context(date("%Y")) end function commands.month () context(date("%m")) end function commands.hour () context(date("%H")) end function commands.minute () context(date("%M")) end function commands.second () context(date("%S")) end function commands.textime() context(textime()) end function commands.doifleapyearelse(year) commands.doifelse(isleapyear(year)) end local roman = { { [0] = '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX' }, { [0] = '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC' }, { [0] = '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM' }, } local function toroman(n) if n >= 4000 then return toroman(floor(n/1000)) .. " " .. toroman(n%1000) else return rep("M",floor(n/1000)) .. roman[3][floor((n%1000)/100)] .. roman[2][floor((n%100)/10)] .. roman[1][floor((n%10)/1)] end end converters.toroman = toroman converters.Romannumerals = toroman converters.romannumerals = function(n) return lower(toroman(n)) end function commands.romannumerals(n) context(lower(toroman(n))) end function commands.Romannumerals(n) context( toroman(n)) end --~ local small = { --~ 0x0627, 0x066E, 0x062D, 0x062F, 0x0647, 0x0648, 0x0631 --~ } --~ local large = { --~ { 0x0627, 0x0628, 0x062C, 0x062F, 0x0647, 0x0648, 0x0632, 0x062D, 0x0637, }, --~ { 0x064A, 0x0643, 0x0644, 0x0645, 0x0646, 0x0633, 0x0639, 0x0641, 0x0635, }, --~ { 0x0642, 0x0631, 0x0634, 0x062A, 0x062B, 0x062E, 0x0630, 0x0636, 0x0638, }, --~ { 0x063A }, --~ } local small = { "ا", "ٮ", "ح", "د", "ه", "و", "ر", } local medium = { "ا", "ب", "ج", "د", "ه", "و","ز", "ح", "ط" , "ي", "ك", "ل", "م", "ن", "س", "ع", "ف", "ص" , "ق", "ر", "ش", "ت", "ث", "خ", "ذ", "ض", "ظ" , "غ" , } local large = { { "ا", "ب", "ج", "د", "ه", "و","ز", "ح", "ط" }, { "ي", "ك", "ل", "م", "ن", "س", "ع", "ف", "ص" }, { "ق", "ر", "ش", "ت", "ث", "خ", "ذ", "ض", "ظ" }, { "غ" }, } local function toabjad(n,what) if n <= 0 or n >= 2000 then return tostring(n) elseif what == 2 and n <= 7 then return small[n] elseif what == 3 and n <= 28 then return medium[n] else local a, b, c, d a, n = floor(n/1000), n % 1000 -- mod(n,1000) b, n = floor(n/ 100), n % 100 -- mod(n, 100) c, n = floor(n/ 10), n % 10 -- mod(n, 10) d, n = floor(n/ 1), n % 1 -- mod(n, 1) return (large[4][a] or "") .. (large[3][b] or "") .. (large[2][c] or "") .. (large[1][d] or "") end end converters.toabjad = toabjad function converters.abjadnumerals (n) return toabjad(n,false) end function converters.abjadnodotnumerals(n) return toabjad(n,true ) end function commands.abjadnumerals (n) context(toabjad(n,false)) end function commands.abjadnodotnumerals(n) context(toabjad(n,true )) end local vector = { normal = { [0] = "〇", [1] = "一", [2] = "二", [3] = "三", [4] = "四", [5] = "五", [6] = "六", [7] = "七", [8] = "八", [9] = "九", [10] = "十", [100] = "百", [1000] = "千", [10000] = "万", [100000000] = "亿", }, cap = { [0] = "零", [1] = "壹", [2] = "贰", [3] = "叁", [4] = "肆", [5] = "伍", [6] = "陆", [7] = "柒", [8] = "捌", [9] = "玖", [10] = "拾", [100] = "佰", [1000] = "仟", [10000] = "萬", [100000000] = "亿", }, all = { [0] = "〇", [1] = "一", [2] = "二", [3] = "三", [4] = "四", [5] = "五", [6] = "六", [7] = "七", [8] = "八", [9] = "九", [10] = "十", [20] = "廿", [30] = "卅", [100] = "百", [1000] = "千", [10000] = "万", [100000000] = "亿", } } local function tochinese(n,name) -- normal, caps, all -- improved version by Li Yanrui local result, r = { }, 0 local vector = vector[name] or vector.normal while true do if n == 0 then break elseif n >= 100000000 then local m = floor(n/100000000) r = r + 1 ; result[r] = tochinese(m,name) r = r + 1 ; result[r] = vector[100000000] local z = n - m * 100000000 if z > 0 and z < 10000000 then r = r + 1 ; result[r] = vector[0] end n = n % 100000000 elseif n >= 10000000 then local m = floor(n/10000) r = r + 1 ; result[r] = tochinese(m,name) r = r + 1 ; result[r] = vector[10000] local z = n - m * 10000 if z > 0 and z < 1000 then r = r + 1 ; result[r] = vector[0] end n = n % 10000 elseif n >= 1000000 then local m = floor(n/10000) r = r + 1 ; result[r] = tochinese(m,name) r = r + 1 ; result[r] = vector[10000] local z = n - m * 10000 if z > 0 and z < 1000 then r = r + 1 ; result[r] = vector[0] end n = n % 10000 elseif n >= 100000 then local m = floor(n/10000) r = r + 1 ; result[r] = tochinese(m,name) r = r + 1 ; result[r] = vector[10000] local z = n - m * 10000 if z > 0 and z < 1000 then r = r + 1 ; result[r] = vector[0] end n = n % 10000 elseif n >= 10000 then local m = floor(n/10000) r = r + 1 ; result[r] = vector[m] r = r + 1 ; result[r] = vector[10000] local z = n - m * 10000 if z > 0 and z < 1000 then r = r + 1 ; result[r] = vector[0] end n = n % 10000 elseif n >= 1000 then local m = floor(n/1000) r = r + 1 ; result[r] = vector[m] r = r + 1 ; result[r] = vector[1000] local z = n - m * 1000 if z > 0 and z < 100 then r = r + 1 ; result[r] = vector[0] end n = n % 1000 elseif n >= 100 then local m = floor(n/100) r = r + 1 ; result[r] = vector[m] r = r + 1 ; result[r] = vector[100] local z = n - m * 100 if z > 0 and z < 10 then r = r + 1 ; result[r] = vector[0] end n = n % 100 elseif n >= 10 then local m = floor(n/10) if m > 1 and vector[m*10] then r = r + 1 ; result[r] = vector[m*10] else r = r + 1 ; result[r] = vector[m] r = r + 1 ; result[r] = vector[10] end n = n % 10 else r = r + 1 ; result[r] = vector[n] break end end if (result[1] == vector[1] and result[2] == vector[10]) then result[1] = "" end return concat(result) end -- local t = { 1,10,15,25,35,45,11,100,111,1111,10000,11111,100000,111111,1111111,11111111,111111111,100000000,1111111111,11111111111,111111111111,1111111111111 } -- for k=1,#t do -- local v = t[k] -- print(v,tochinese(v),tochinese(v,"all"),tochinese(v,"cap")) -- end converters.tochinese = tochinese function converters.chinesenumerals (n) return tochinese(n,"normal") end function converters.chinesecapnumerals(n) return tochinese(n,"cap" ) end function converters.chineseallnumerals(n) return tochinese(n,"all" ) end function commands.chinesenumerals (n) context(tochinese(n,"normal")) end function commands.chinesecapnumerals(n) context(tochinese(n,"cap" )) end function commands.chineseallnumerals(n) context(tochinese(n,"all" )) end converters.sequences = converters.sequences or { } local sequences = converters.sequences storage.register("converters/sequences", sequences, "converters.sequences") function converters.define(name,set) sequences[name] = settings_to_array(set) end commands.defineconversion = converters.define local function convert(method,n) -- todo: language local converter = converters[method] if converter then return converter(n) else local lowermethod = lower(method) local linguistic = counters[lowermethod] if linguistic then return do_alphabetic(n,linguistic,lowermethod == method and lowercharacter or uppercharacter) end local sequence = sequences[method] if sequence then local max = #sequence if n > max then return sequence[(n-1) % max + 1] else return sequence[n] end else return n end end end converters.convert = convert function commands.checkedconversion(method,n) context(convert(method,n)) end -- Well, since the one asking for this didn't test it the following code is not -- enabled. -- -- -- This Lua version is based on a Javascript by Behdad Esfahbod which in turn -- -- is based on GPL'd code by Roozbeh Pournader of the The FarsiWeb Project -- -- Group: http://www.farsiweb.info/jalali/jalali.js. -- -- -- -- We start tables at one, I kept it zero based in order to stay close to -- -- the original. -- -- -- -- Conversion by Hans Hagen -- -- local g_days_in_month = { [0]=31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -- local j_days_in_month = { [0]=31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 } -- -- local function div(a,b) -- return math.floor(a/b) -- end -- -- local function remainder(a,b) -- return a - div(a,b)*b -- end -- -- function gregorian_to_jalali(gy,gm,gd) -- local jy, jm, jd, g_day_no, j_day_no, j_np, i -- gy, gm, gd = gy - 1600, gm - 1, gd - 1 -- g_day_no = 365*gy + div((gy+3),4) - div((gy+99),100) + div((gy+399),400) -- i = 0 -- while i < gm do -- g_day_no = g_day_no + g_days_in_month[i] -- i = i + 1 -- end -- if (gm>1 and ((gy%4==0 and gy%100~=0) or (gy%400==0))) then -- g_day_no = g_day_no + 1 -- end -- g_day_no = g_day_no + gd -- j_day_no = g_day_no - 79 -- j_np = div(j_day_no,12053) -- j_day_no = remainder(j_day_no,12053) -- jy = 979 + 33*j_np + 4*div(j_day_no,1461) -- j_day_no = remainder(j_day_no,1461) -- if j_day_no >= 366 then -- jy = jy + div((j_day_no-1),365) -- j_day_no = remainder((j_day_no-1),365) -- end -- i = 0 -- while i < 11 and j_day_no >= j_days_in_month[i] do -- j_day_no = j_day_no - j_days_in_month[i] -- i = i + 1 -- end -- jm = i + 1 -- jd = j_day_no + 1 -- return jy, jm, jd -- end -- -- function jalali_to_gregorian(jy,jm,jd) -- local gy, gm, gd, g_day_no, j_day_no, leap, i -- jy, jm, jd = jy - 979, jm - 1, jd - 1 -- j_day_no = 365*jy + div(jy,33)*8 + div((remainder(jy,33)+3),4) -- i = 0 -- while i < jm do -- j_day_no = j_day_no + j_days_in_month[i] -- i = i + 1 -- end -- j_day_no = j_day_no + jd -- g_day_no = j_day_no + 79 -- gy = 1600 + 400*div(g_day_no,146097) -- g_day_no = remainder (g_day_no, 146097) -- leap = 1 -- if g_day_no >= 36525 then -- g_day_no = g_day_no - 1 -- gy = gy + 100*div(g_day_no,36524) -- g_day_no = remainder (g_day_no, 36524) -- if g_day_no >= 365 then -- g_day_no = g_day_no + 1 -- else -- leap = 0 -- end -- end -- gy = gy + 4*div(g_day_no,1461) -- g_day_no = remainder (g_day_no, 1461) -- if g_day_no >= 366 then -- leap = 0 -- g_day_no = g_day_no - 1 -- gy = gy + div(g_day_no, 365) -- g_day_no = remainder(g_day_no, 365) -- end -- i = 0 -- while g_day_no >= g_days_in_month[i] + ((i == 1 and leap) or 0) do -- g_day_no = g_day_no - g_days_in_month[i] + ((i == 1 and leap) or 0) -- i = i + 1 -- end -- gm = i + 1 -- gd = g_day_no + 1 -- return gy, gm, gd -- end -- -- print(gregorian_to_jalali(2009,02,24)) -- print(jalali_to_gregorian(1387,12,06)) -- -- more efficient but needs testing -- local escapes = characters.filters.utf.private.escapes -- local function do_alphabetic(n,mapping,chr) -- local max = #mapping -- if n > max then -- do_alphabetic(floor((n-1)/max),mapping,chr) -- n = (n-1)%max+1 -- end -- n = chr(n,mapping) -- context(escapes[n] or utfchar(n)) -- end -- local lccodes, uccodes, safechar = characters.lccode, characters.uccode, commands.safechar -- local function do_alphabetic(n,mapping,chr) -- local max = #mapping -- if n > max then -- do_alphabetic(floor((n-1)/max),mapping,chr) -- n = (n-1)%max+1 -- end -- safechar(chr(n,mapping)) -- end -- local function lowercased(n,mapping) return characters.lccode(mapping[n] or fallback) end -- local function uppercased(n,mapping) return characters.uccode(mapping[n] or fallback) end -- function converters.alphabetic(n,code) -- do_alphabetic(n,counters[code] or counters.default,lowercased) -- lccode catches wrong tables -- end -- function converters.Alphabetic(n,code) -- do_alphabetic(n,counters[code] or counters.default,uppercased) -- end local ordinals = { english = function(n) local two = n % 100 if two == 11 or two == 12 or two == 13 then return "th" else local one = n % 10 if one == 1 then return "st" elseif one == 2 then return "nd" elseif one == 3 then return "rd" else return "th" end end end, dutch = function(n) return "e" end, french = function(n) if n == 1 then return "er" end end, } ordinals.en = ordinals.english ordinals.nl = ordinals.dutch ordinals.fr = ordinals.french function converters.ordinal(n,language) local t = language and ordinals[language] return t and t(n) end function commands.ordinal(n,language) local t = language and ordinals[language] local o = t and t(n) context(n) if o then context.highordinalstr(o) end end -- verbose numbers -- verbose numbers local data = allocate() local verbose = { data = data } converters.verbose = verbose -- verbose english local words = { [0] = "zero", [1] = "one", [2] = "two", [3] = "three", [4] = "four", [5] = "five", [6] = "six", [7] = "seven", [8] = "eight", [9] = "nine", [10] = "ten", [11] = "eleven", [12] = "twelve", [13] = "thirteen", [14] = "fourteen", [15] = "fifteen", [16] = "sixteen", [17] = "seventeen", [18] = "eighteen", [19] = "nineteen", [20] = "twenty", [30] = "thirty", [40] = "forty", [50] = "fifty", [60] = "sixty", [70] = "seventy", [80] = "eighty", [90] = "ninety", [100] = "hundred", [1000] = "thousand", [1000^2] = "million", [1000^3] = "billion", [1000^4] = "trillion", } local function translate(n) local w = words[n] if w then return w end local t = { } local function compose_one(n) local w = words[n] if w then t[#t+1] = w return end local a, b = floor(n/100), n % 100 if a == 10 then t[#t+1] = words[1] t[#t+1] = words[1000] elseif a > 0 then t[#t+1] = words[a] t[#t+1] = words[100] -- don't say 'nine hundred zero' if b == 0 then return end end if words[b] then t[#t+1] = words[b] else a, b = floor(b/10), n % 10 t[#t+1] = words[a*10] t[#t+1] = words[b] end end local function compose_two(n,m) if n > (m-1) then local a, b = floor(n/m), n % m if a > 0 then compose_one(a) end t[#t+1] = words[m] n = b end return n end n = compose_two(n,1000^4) n = compose_two(n,1000^3) n = compose_two(n,1000^2) n = compose_two(n,1000^1) if n > 0 then compose_one(n) end return #t > 0 and concat(t," ") or tostring(n) end data.english = { words = words, translate = translate, } data.en = data.english -- print(translate(11111111)) -- print(translate(2221101)) -- print(translate(1111)) -- print(translate(1218)) -- print(translate(1234)) -- print(translate(12345)) -- print(translate(12345678900000)) -- verbose spanish (unchecked) local words = { [1] = "uno", [2] = "dos", [3] = "tres", [4] = "cuatro", [5] = "cinco", [6] = "seis", [7] = "siete", [8] = "ocho", [9] = "nueve", [10] = "diez", [11] = "once", [12] = "doce", [13] = "trece", [14] = "catorce", [15] = "quince", [16] = "dieciséis", [17] = "diecisiete", [18] = "dieciocho", [19] = "diecinueve", [20] = "veinte", [21] = "veintiuno", [22] = "veintidós", [23] = "veintitrés", [24] = "veinticuatro", [25] = "veinticinco", [26] = "veintiséis", [27] = "veintisiete", [28] = "veintiocho", [29] = "veintinueve", [30] = "treinta", [40] = "cuarenta", [50] = "cincuenta", [60] = "sesenta", [70] = "setenta", [80] = "ochenta", [90] = "noventa", [100] = "ciento", [200] = "doscientos", [300] = "trescientos", [400] = "cuatrocientos", [500] = "quinientos", [600] = "seiscientos", [700] = "setecientos", [800] = "ochocientos", [900] = "novecientos", [1000] = "mil", [1000^2] = "millón", [1000^3] = "mil millónes", [1000^4] = "billón", } local function translate(n) local w = words[n] if w then return w end local t = { } local function compose_one(n) local w = words[n] if w then t[#t+1] = w return end -- a, b = hundreds, remainder local a, b = floor(n/100), n % 100 -- one thousand if a == 10 then t[#t+1] = words[1] t[#t+1] = words[1000] -- x hundred (n.b. this will not give thirteen hundred because -- compose_one(n) is only called after -- `n = compose(two(n, 1000^1))`. elseif a > 0 then t[#t+1] = words[a*100] end -- the remainder if words[b] then t[#t+1] = words[b] else -- a, b = tens, remainder a, b = floor(b/10), n % 10 t[#t+1] = words[a*10] t[#t+1] = "y" t[#t+1] = words[b] end end -- compose_two handles x billion, ... x thousand. When 1000 or less is -- left, compose_one takes over. local function compose_two(n,m) if n > (m-1) then local a, b = floor(n/m), n % m if a > 0 then compose_one(a) end t[#t+1] = words[m] n = b end return n end n = compose_two(n,1000^4) n = compose_two(n,1000^3) n = compose_two(n,1000^2) n = compose_two(n,1000^1) if n > 0 then compose_one(n) end return #t > 0 and concat(t," ") or tostring(n) end data.spanish = { words = words, translate = translate, } data.es = data.spanish -- print(translate(31)) -- print(translate(101)) -- print(translate(199)) -- verbose handler: function converters.verbose.translate(n,language) local t = language and data[language] return t and t.translate(n) or n end function commands.verbose(n,language) local t = language and data[language] context(t and t.translate(n) or n) end -- -- local v_day = variables.day local v_year = variables.year local v_month = variables.month local v_weekday = variables.weekday local v_referral = variables.referral local v_space = variables.space local convert = converters.convert local days = { -- not variables.sunday "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", } local months = { -- not variables.januari "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december", } function commands.dayname(n) context.labeltext(days[n] or "unknown") end function commands.weekdayname(day,month,year) context.labeltext(days[weekday(day,month,year)] or "unknown") end function commands.monthname(n) context.labeltext(months[n] or "unknown") end function commands.monthmnem(n) local m = months[n] context.labeltext(m and (m ..":mnem") or "unknown") end -- a prelude to a function that we can use at the lua end -- day:ord month:mmem -- j and jj obsolete function commands.currentdate(str,currentlanguage) -- second argument false : no label local list = utilities.parsers.settings_to_array(str) local splitlabel = languages.labels.split or string.itself -- we need to get the loading order right local year, month, day = tex.year, tex.month, tex.day local auto = true for i=1,#list do local entry = list[i] local tag, plus = splitlabel(entry) local ordinal, mnemonic, whatordinal = false, false, nil if not tag then tag = entry elseif plus == "+" or plus == "ord" then ordinal = true elseif plus == "mnem" then mnemonic = true end if not auto and (tag == v_year or tag == v_month or tag == v_day or tag == v_weekday) then context.space() end auto = false if tag == v_year or tag == "y" then context(year) elseif tag == "yy" then context("%02i",year % 100) elseif tag == "Y" then context(year) elseif tag == v_month or tag == "m" then if currentlanguage == false then context(months[month] or "unknown") elseif mnemonic then commands.monthmnem(month) else commands.monthname(month) end elseif tag == "mm" then context("%02i",month) elseif tag == "M" then context(month) elseif tag == v_day or tag == "d" then if currentlanguage == false then context(days[day] or "unknown") else context.convertnumber(v_day,day) end whatordinal = day elseif tag == "dd" then context("%02i",day) whatordinal = day elseif tag == "D" then context(day) whatordinal = day elseif tag == v_weekday or tag == "w" then local wd = weekday(day,month,year) if currentlanguage == false then context(days[wd] or "unknown") else commands.dayname(wd) end elseif tag == "W" then context(weekday(day,month,year)) elseif tag == v_referral then context("%04i%02i%02i",year,month,day) elseif tag == v_space or tag == "\\ " then context.space() auto = true elseif tag ~= "" then context(tag) auto = true end if ordinal and whatordinal then if currentlanguage == false then -- ignore else context(converters.ordinal(whatordinal,currentlanguage)) -- no "%s" needed end end end end function commands.rawdate(str) commands.currentdate(str,false) end context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-fro.mkii0000644000175000017500000000202511754241457024265 0ustar norbertnorbert%D \module %D [ file=enco-fro, %D version=2000.08.20, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Romanian Input Filter, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 These definitions used to be part of lang-ita.tex. \unprotect \installactivecharacter " \startlanguagespecifics[\s!ro] \installcompoundcharacter "a {\acircumflex} \installcompoundcharacter "i {\icircumflex} \installcompoundcharacter "s {\scedilla} \installcompoundcharacter "t {\tcedilla} \installcompoundcharacter "A {\Acircumflex} \installcompoundcharacter "I {\Icircumflex} \installcompoundcharacter "S {\Scedilla} \installcompoundcharacter "T {\Tcedilla} \installcompoundcharacter "` {\startdelimitedtext[\v!quotation]} \installcompoundcharacter "' {\stopdelimitedtext} \stoplanguagespecifics \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-steps.mkvi0000644000175000017500000002437711754241457024200 0ustar norbertnorbert%D \module %D [ file=m-steps, %D version=2011.10.07, % 2001.05.28, %D title=\CONTEXT\ Modules, %D subtitle=Step Charts \& Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % multiple texts? \registerctxluafile{m-steps}{} \unprotect \installcorenamespace {stepcharts} \installcorenamespace {steptables} \installcorenamespace {stepcells} \installcorenamespace {steptexts} \installcorenamespace {steplines} \installsimplecommandhandler \??stepcharts {STEPchart} \??stepcharts \installsimplecommandhandler \??steptables {STEPtable} \??steptables \installsimplecommandhandler \??stepcells {STEPcell} \??stepcells \installsimplecommandhandler \??steptexts {STEPtext} \??steptexts \installsimplecommandhandler \??steplines {STEPline} \??steplines \let\setupSTEPcharts\setupSTEPchart \let\setupSTEPtables\setupSTEPtable \let\setupSTEPcells \setupSTEPcell \let\setupSTEPtexts \setupSTEPtext \let\setupSTEPlines \setupSTEPline % numeric text_text_distance ; text_text_distance := 20pt ; % numeric step_distance ; step_distance := 20pt ; \setupSTEPcharts [\c!alternative=\v!horizontal, \c!before=\blank, \c!after=\blank] % \c!offset=.15\bodyfontsize % \c!height=2ex % \setupSTEPtables % [\c!before=\blank, % \c!after=\blank, % \c!distance=.25em, % \c!voffset=1ex, % \c!method=1, % \c!width=4em, % \c!offset=.15\bodyfontsize] \setupSTEPcells [\c!alternative=1, % TODO % \c!style=, % \c!color=, \c!dx=\bodyfontsize, \c!dy=\bodyfontsize, \c!background=\v!color, \c!backgroundcolor=STEPbackgroundcolor, \c!rulethickness=.1\bodyfontsize, \c!framecolor=STEPframecolor, \c!offset=.25\bodyfontsize] \setupSTEPtexts [\c!alternative=1, % TODO % \c!style=\v!smallbodyfont, % \c!color=, \c!background=\v!color, \c!backgroundcolor=STEPbackgroundcolor, \c!rulethickness=.1\bodyfontsize, \c!framecolor=STEPframecolor, \c!distance=.5\bodyfontsize, \c!offset=.25\bodyfontsize] \setupSTEPlines [\c!alternative=1, % TODO \c!rulethickness=.15\bodyfontsize, \c!height=3\bodyfontsize, \c!distance=.5\bodyfontsize, \c!offset=.25\bodyfontsize, \c!color=STEPlinecolor] \definecolor [STEPlinecolor] [s=.5] \definecolor [STEPframecolor] [s=.7] \definecolor [STEPbackgroundcolor] [s=.9] \newtoks\everySTEPchart \unexpanded\def\startSTEPchart {\begingroup \dodoubleempty\module_steps_start_chart} \def\module_steps_start_chart[#name][#settings]% {\startnointerference \iffirstargument \doifassignmentelse{#name} {\let\currentSTEPchart\empty \xdef\module_steps_flush_chart{\module_steps_chart[][#name]}} {\edef\currentSTEPchart{#name}% \glet\module_steps_flush_chart\relax}% settings are not stored \else \let\currentSTEPchart\empty \gdef\module_steps_flush_chart{\module_steps_chart[][]}% \fi \the\everySTEPchart \ctxcommand{step_start_chart("\currentSTEPchart")}} \unexpanded\def\stopSTEPchart {\ctxcommand{step_stop_chart()}% \stopnointerference \module_steps_flush_chart \endgroup} \unexpanded\def\startSTEPtable {\begingroup \setupSTEPchart[\c!alternative=\v!vertical]% \dodoubleempty\module_steps_start_chart} \let\stopSTEPtable\stopSTEPchart \let\module_steps_flush_chart\relax \unexpanded\def\STEPchart {\dodoubleempty\module_steps_chart} \unexpanded\def\module_steps_chart[#name][#settings]% {\begingroup \setupSTEPchart[#settings]% \ifinsidefloat \makeSTEPchart[#name]% \else \STEPchartparameter\c!before \startbaselinecorrection \setlocalhsize \makeSTEPchart[#name]% \stopbaselinecorrection \STEPchartparameter\c!after \fi \endgroup} \unexpanded\def\makeSTEPchart[#name]% {\ctxcommand{step_make_chart { chart = { name = "#name", alternative = "\STEPchartparameter\c!alternative", }, cell = { alternative = "\STEPcellparameter\c!alternative", % TODO: shapes offset = \number\dimexpr\STEPcellparameter\c!offset, rulethickness = \number\dimexpr\STEPcellparameter\c!rulethickness, framecolor = "\STEPcellparameter\c!framecolor", backgroundcolor = "\STEPcellparameter\c!backgroundcolor", dx = \number\dimexpr\STEPcellparameter\c!dx, dy = \number\dimexpr\STEPcellparameter\c!dy, }, text = { alternative = "\STEPtextparameter\c!alternative", % TODO: shapes offset = \number\dimexpr\STEPtextparameter\c!offset, distance = \number\dimexpr\STEPtextparameter\c!distance, rulethickness = \number\dimexpr\STEPtextparameter\c!rulethickness, framecolor = "\STEPtextparameter\c!framecolor", backgroundcolor = "\STEPtextparameter\c!backgroundcolor", }, line = { alternative = "\STEPlineparameter\c!alternative", % TODO: dash, arrow rulethickness = \number\dimexpr\STEPlineparameter\c!rulethickness, height = \number\dimexpr\STEPlineparameter\c!height, distance = \number\dimexpr\STEPlineparameter\c!distance, offset = \number\dimexpr\STEPlineparameter\c!offset, color = "\STEPlineparameter\c!color", }, }}} \unexpanded\def\startSTEPcell {\ctxcommand{step_start_cell()}} \unexpanded\def\stopSTEPcell {\ctxcommand{step_stop_cell()}} \unexpanded\def\module_steps_cells#top#bot% {\ctxcommand{step_cells(\!!bs\detokenize{#top}\!!es,\!!bs\detokenize{#bot}\!!es)}} \unexpanded\def\module_steps_texts#top#bot% {\ctxcommand{step_texts(\!!bs\detokenize{#top}\!!es,\!!bs\detokenize{#bot}\!!es)}} \unexpanded\def\module_steps_cell#str% {\ctxcommand{step_cell(\!!bs\detokenize{#str}\!!es)}} \unexpanded\def\module_steps_text#str% {\ctxcommand{step_text(\!!bs\detokenize{#str}\!!es)}} \unexpanded\def\module_steps_textset#left#middle#right% {\ctxcommand{step_textset(\!!bs\detokenize{#left}\!!es,\!!bs\detokenize{#middle}\!!es,\!!bs\detokenize{#right}\!!es)}} \unexpanded\def\module_steps_toptext#top% {\ctxcommand{step_text_top(\!!bs\detokenize{#top}\!!es)}} \unexpanded\def\module_steps_bottext#bot% {\ctxcommand{step_text_bot(\!!bs\detokenize{#bot}\!!es)}} \unexpanded\def\module_steps_topcell#top% {\ctxcommand{step_cell_top(\!!bs\detokenize{#top}\!!es)}} \unexpanded\def\module_steps_botcell#bot% {\ctxcommand{step_cell_bot(\!!bs\detokenize{#bot}\!!es)}} \appendtoks \let\cells \module_steps_cells \let\texts \module_steps_texts \let\cell \module_steps_cell \let\text \module_steps_text \let\textset\module_steps_textset \let\toptext\module_steps_toptext \let\bottext\module_steps_bottext \let\topcell\module_steps_topcell \let\botcell\module_steps_botcell \to \everySTEPchart % todo: mapping can be done in lua \startxmlsetups xml:step:define \xmlsetsetup{#1} {stepchart|steptable} {xml:step:*} \stopxmlsetups \xmlregistersetup{xml:step:define} \startxmlsetups xml:step:stepchart \startSTEPchart \xmlfilter{#1}{/(cells|texts|stepcell|cell|text)/command(xml:step:*)} \stopSTEPchart \stopxmlsetups \startxmlsetups xml:step:steptable \startSTEPtable \xmlfilter{#1}{/(cells|texts|stepcell|cell|text)/command(xml:step:*)} \stopSTEPtable \stopxmlsetups \startxmlsetups xml:step:cells \cells {\xmltext{#1}{/top}} {\xmltext{#1}{/bot}} \stopxmlsetups \startxmlsetups xml:step:texts \texts {\xmltext{#1}{/top}} {\xmltext{#1}{/bot}} \stopxmlsetups \startxmlsetups xml:step:stepcell \cells {\xmltext{#1}{/topcell}} {\xmltext{#1}{/botcell}} \texts {\xmltext{#1}{/toptext}} {\xmltext{#1}{/bottext}} \stopxmlsetups \startxmlsetups xml:step:cell \cell {\xmlflush{#1}} \stopxmlsetups \startxmlsetups xml:step:text \text {\xmlflush{#1}} \stopxmlsetups \protect \continueifinputfile{m-steps.mkvi} \starttext \startbuffer some cell some text some cell some text some cell \stopbuffer \typebuffer \processxmlbuffer \startbuffer some cell some text some cell some text some cell \stopbuffer \typebuffer \processxmlbuffer \page \startSTEPchart \cells {A} {B} \cells {one} {five} \texts{$+2$}{$-2$} \cells {two} {four} \texts{$+3$}{$-3$} \cells {three} {three} \texts{$+4$}{$-4$} \cells {four} {two} \texts{$+5$}{$-5$} \cells {five} {one} \stopSTEPchart \startSTEPtable \cell {one} \textset{$x$} {=}{$a+b+c$} \cell {two} \textset{$c+d$}{=}{$y$} \cell {three} \stopSTEPtable \page \startbuffer some text some text text text some text some text \stopbuffer \processxmlbuffer \startbuffer some text text text some text \stopbuffer \processxmlbuffer \page \startSTEPchart[second] \startSTEPcell \topcell {A} \botcell {B} \startSTEPcell \topcell {one} \botcell {five} \toptext {$+2$} \bottext {$-2$} \stopSTEPcell \startSTEPcell \topcell {two} \botcell {four} \toptext {$+3$} \bottext {$-3$} \stopSTEPcell \startSTEPcell \topcell {three} \botcell {three} \toptext {$+4$} \bottext {$-4$} \stopSTEPcell \startSTEPcell \topcell {four} \botcell {two} \toptext {$+5$} \bottext {$-5$} \stopSTEPcell \startSTEPcell \topcell {five} \botcell {one} \stopSTEPcell \stopSTEPchart \STEPchart[first][alternative=horizontal] \STEPchart[first][alternative=vertical] \page \STEPchart[second][alternative=horizontal] \STEPchart[second][alternative=vertical] \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-nl.mkii0000644000175000017500000023507612130411274024144 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language nl % \setinterfacevariable{Addition}{Toevoeging} \setinterfacevariable{Balloon}{Ballon} \setinterfacevariable{Cap}{Kap} \setinterfacevariable{Capital}{Kapitaal} \setinterfacevariable{Character}{Letter} \setinterfacevariable{Characters}{Letters} \setinterfacevariable{CloseDocument}{SluitDocument} \setinterfacevariable{ExitViewer}{VerlaatViewer} \setinterfacevariable{FirstPage}{EerstePagina} \setinterfacevariable{FitHeight}{HoogtePassend} \setinterfacevariable{FitWidth}{BreedtePassend} \setinterfacevariable{GotoPage}{GaNaarPagina} \setinterfacevariable{Greek}{Grieks} \setinterfacevariable{Help}{Help} \setinterfacevariable{HideField}{VerbergVeld} \setinterfacevariable{HideLayer}{VerbergLaag} \setinterfacevariable{Key}{Sleutel} \setinterfacevariable{LastPage}{LaatstePagina} \setinterfacevariable{LoadForm}{LaadFormulier} \setinterfacevariable{MONTH}{MAAND} \setinterfacevariable{New}{Nieuw} \setinterfacevariable{NextJump}{VolgendeSprong} \setinterfacevariable{NextPage}{VolgendePagina} \setinterfacevariable{Numbers}{Cijfers} \setinterfacevariable{OpenNamedDocument}{OpenDocumentOpNaam} \setinterfacevariable{Paragraph}{Paragraaf} \setinterfacevariable{PauseMovie}{PauzeerFilm} \setinterfacevariable{PauseRendering}{PauzeerRendering} \setinterfacevariable{PauseSound}{PauzeerGeluid} \setinterfacevariable{PreviousJump}{VorigeSprong} \setinterfacevariable{PreviousPage}{VorigePagina} \setinterfacevariable{PrintDocument}{PrintDocument} \setinterfacevariable{Query}{RaadpleegDocument} \setinterfacevariable{QueryAgain}{HerhaalRaadplegen} \setinterfacevariable{ResetForm}{ResetFormulier} \setinterfacevariable{ResumeMovie}{HervatFilm} \setinterfacevariable{ResumeRendering}{HervatRendering} \setinterfacevariable{ResumeSound}{HervatGeluid} \setinterfacevariable{Romannumerals}{Romeins} \setinterfacevariable{SaveDocument}{BewaarDocument} \setinterfacevariable{SaveForm}{BewaarFormulier} \setinterfacevariable{SaveNamedDocument}{BewaarDocumentOpNaam} \setinterfacevariable{SearchAgain}{HerhaalZoeken} \setinterfacevariable{SearchDocument}{DoorzoekDocument} \setinterfacevariable{ShowBookmarks}{ShowBookmarks} \setinterfacevariable{ShowField}{ToonVeld} \setinterfacevariable{ShowThumbs}{ShowThumbs} \setinterfacevariable{StartMovie}{StartFilm} \setinterfacevariable{StartRendering}{StartRendering} \setinterfacevariable{StartSound}{StartGeluid} \setinterfacevariable{StopMovie}{StopFilm} \setinterfacevariable{StopRendering}{StopRendering} \setinterfacevariable{StopSound}{StopGeluid} \setinterfacevariable{SubmitForm}{VerzendFormulier} \setinterfacevariable{ToggleLayer}{WisselLaag} \setinterfacevariable{ToggleViewer}{WisselViewer} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{ToonLaag} \setinterfacevariable{ViewerHelp}{ViewerHelp} \setinterfacevariable{WEEKDAY}{WEEKDAG} \setinterfacevariable{WORD}{WOORD} \setinterfacevariable{WORDS}{WOORDEN} \setinterfacevariable{Word}{Woord} \setinterfacevariable{Words}{Woorden} \setinterfacevariable{abbreviation}{afkorting} \setinterfacevariable{abbreviations}{afkortingen} \setinterfacevariable{absolute}{absoluut} \setinterfacevariable{action}{actie} \setinterfacevariable{after}{na} \setinterfacevariable{all}{alles} \setinterfacevariable{always}{altijd} \setinterfacevariable{and}{en} \setinterfacevariable{answerarea}{antwoordgebied} \setinterfacevariable{appendices}{bijlagen} \setinterfacevariable{appendix}{bijlage} \setinterfacevariable{april}{april} \setinterfacevariable{atmargin}{opmarge} \setinterfacevariable{atpage}{oppagina} \setinterfacevariable{attachment}{aanhangsel} \setinterfacevariable{august}{augustus} \setinterfacevariable{author}{auteur} \setinterfacevariable{auto}{auto} \setinterfacevariable{autointro}{autointro} \setinterfacevariable{back}{terug} \setinterfacevariable{background}{achtergrond} \setinterfacevariable{backmatter}{uitleidingen} \setinterfacevariable{backpart}{uitleiding} \setinterfacevariable{backspace}{rugwit} \setinterfacevariable{backward}{achteruit} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{voor} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{groot} \setinterfacevariable{bigbodyfont}{grootkorps} \setinterfacevariable{bigger}{groter} \setinterfacevariable{bigpreference}{grotevoorkeur} \setinterfacevariable{blank}{blanko} \setinterfacevariable{blockquote}{blokcitaat} \setinterfacevariable{bodymatter}{hoofdteksten} \setinterfacevariable{bodypart}{hoofdtekst} \setinterfacevariable{bold}{vet} \setinterfacevariable{bolditalic}{vetitalic} \setinterfacevariable{boldslanted}{vetschuin} \setinterfacevariable{bookmark}{bookmark} \setinterfacevariable{both}{beide} \setinterfacevariable{bottom}{onder} \setinterfacevariable{brief}{brief} \setinterfacevariable{broad}{ruim} \setinterfacevariable{buffer}{buffer} \setinterfacevariable{by}{per} \setinterfacevariable{calligraphic}{calligrafie} \setinterfacevariable{cap}{kap} \setinterfacevariable{capital}{kapitaal} \setinterfacevariable{center}{centreer} \setinterfacevariable{chapter}{hoofdstuk} \setinterfacevariable{character}{letter} \setinterfacevariable{characters}{letters} \setinterfacevariable{chemistry}{chemie} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{kleur} \setinterfacevariable{column}{kolom} \setinterfacevariable{columns}{kolommen} \setinterfacevariable{command}{commando} \setinterfacevariable{commands}{commandos} \setinterfacevariable{comment}{commentaar} \setinterfacevariable{component}{onderdeel} \setinterfacevariable{concept}{concept} \setinterfacevariable{content}{inhoud} \setinterfacevariable{contents}{inhouden} \setinterfacevariable{continue}{verder} \setinterfacevariable{continued}{vervolgd} \setinterfacevariable{controls}{sturing} \setinterfacevariable{conversion}{conversie} \setinterfacevariable{current}{huidige} \setinterfacevariable{cutspace}{snijwit} \setinterfacevariable{date}{datum} \setinterfacevariable{day}{dag} \setinterfacevariable{december}{december} \setinterfacevariable{default}{default} \setinterfacevariable{depth}{diepte} \setinterfacevariable{description}{doordefinitie} \setinterfacevariable{disable}{blokkeer} \setinterfacevariable{display}{scherm} \setinterfacevariable{dot}{punt} \setinterfacevariable{doublesided}{dubbelzijdig} \setinterfacevariable{down}{omlaag} \setinterfacevariable{each}{elk} \setinterfacevariable{edge}{rand} \setinterfacevariable{embed}{sluitin} \setinterfacevariable{empty}{leeg} \setinterfacevariable{end}{eind} \setinterfacevariable{endnote}{eindnoot} \setinterfacevariable{enumeration}{doornummering} \setinterfacevariable{environment}{omgeving} \setinterfacevariable{even}{even} \setinterfacevariable{export}{export} \setinterfacevariable{external}{extern} \setinterfacevariable{fact}{gegeven} \setinterfacevariable{february}{februari} \setinterfacevariable{figure}{figuur} \setinterfacevariable{figures}{figuren} \setinterfacevariable{file}{file} \setinterfacevariable{final}{definitief} \setinterfacevariable{first}{eerste} \setinterfacevariable{firstcolumn}{eerstekolom} \setinterfacevariable{firstpage}{eerstepagina} \setinterfacevariable{firstsubpage}{eerstesubpagina} \setinterfacevariable{fit}{passend} \setinterfacevariable{five}{vijf} \setinterfacevariable{fix}{herstel} \setinterfacevariable{fixed}{vast} \setinterfacevariable{flexible}{flexibel} \setinterfacevariable{float}{blok} \setinterfacevariable{flushinner}{lijnbinnen} \setinterfacevariable{flushleft}{lijnlinks} \setinterfacevariable{flushouter}{lijnbuiten} \setinterfacevariable{flushright}{lijnrechts} \setinterfacevariable{footer}{voet} \setinterfacevariable{footnote}{voetnoot} \setinterfacevariable{force}{forceer} \setinterfacevariable{foreground}{voorgrond} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{formule} \setinterfacevariable{formulae}{formules} \setinterfacevariable{forward}{vooruit} \setinterfacevariable{four}{vier} \setinterfacevariable{frame}{kader} \setinterfacevariable{framedtext}{kadertekst} \setinterfacevariable{friday}{vrijdag} \setinterfacevariable{frontmatter}{inleidingen} \setinterfacevariable{frontpart}{inleiding} \setinterfacevariable{global}{globaal} \setinterfacevariable{graphic}{grafiek} \setinterfacevariable{graphics}{grafieken} \setinterfacevariable{gray}{grijs} \setinterfacevariable{greek}{grieks} \setinterfacevariable{grid}{grid} \setinterfacevariable{halfline}{halveregel} \setinterfacevariable{handwritten}{handschrift} \setinterfacevariable{hang}{hang} \setinterfacevariable{hanging}{hangend} \setinterfacevariable{head}{kop} \setinterfacevariable{header}{hoofd} \setinterfacevariable{height}{hoogte} \setinterfacevariable{helptext}{helptekst} \setinterfacevariable{hencefore}{hierboven} \setinterfacevariable{here}{hier} \setinterfacevariable{hereafter}{hieronder} \setinterfacevariable{hidden}{verborgen} \setinterfacevariable{hiding}{verbergen} \setinterfacevariable{high}{hoog} \setinterfacevariable{horizontal}{horizontaal} \setinterfacevariable{hyphenated}{afgebroken} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{tussen} \setinterfacevariable{index}{index} \setinterfacevariable{indices}{indices} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{erf} \setinterfacevariable{inleft}{inlinker} \setinterfacevariable{inmargin}{inmarge} \setinterfacevariable{inner}{binnen} \setinterfacevariable{inneredge}{binnenrand} \setinterfacevariable{innermargin}{binnenmarge} \setinterfacevariable{inright}{inrechter} \setinterfacevariable{interaction}{interactie} \setinterfacevariable{interactionmenu}{interactiemenu} \setinterfacevariable{intermezzi}{intermezzos} \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{intekst} \setinterfacevariable{intro}{intro} \setinterfacevariable{italic}{italic} \setinterfacevariable{italicbold}{italicvet} \setinterfacevariable{item}{som} \setinterfacevariable{itemize}{opsomming} \setinterfacevariable{its}{its} \setinterfacevariable{january}{januari} \setinterfacevariable{joinedup}{aansluitend} \setinterfacevariable{july}{juli} \setinterfacevariable{june}{juni} \setinterfacevariable{keep}{handhaaf} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{label} \setinterfacevariable{landscape}{liggend} \setinterfacevariable{last}{laatste} \setinterfacevariable{lastcolumn}{laatstekolom} \setinterfacevariable{lastpage}{laatstepagina} \setinterfacevariable{lastpagenumber}{laatstepaginanummer} \setinterfacevariable{lastsubpage}{laatstesubpagina} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{links} \setinterfacevariable{leftedge}{linkerrand} \setinterfacevariable{lefthanging}{linkshangend} \setinterfacevariable{leftmargin}{linkermarge} \setinterfacevariable{leftpage}{linkerpagina} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legenda} \setinterfacevariable{less}{minder} \setinterfacevariable{lesshyphenation}{lesshyphenation} \setinterfacevariable{line}{regel} \setinterfacevariable{linenote}{regelnoot} \setinterfacevariable{lines}{regels} \setinterfacevariable{list}{lijst} \setinterfacevariable{local}{lokaal} \setinterfacevariable{localenvironment}{deelomgeving} \setinterfacevariable{logo}{logo} \setinterfacevariable{logos}{logos} \setinterfacevariable{lohi}{laho} \setinterfacevariable{loose}{los} \setinterfacevariable{low}{laag} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{opmaak} \setinterfacevariable{mar}{mar} \setinterfacevariable{march}{maart} \setinterfacevariable{margin}{marge} \setinterfacevariable{marginedge}{kantlijn} \setinterfacevariable{margintitle}{margetitel} \setinterfacevariable{marking}{markering} \setinterfacevariable{mathalignment}{wiskundeuitlijnen} \setinterfacevariable{mathcases}{mathcases} \setinterfacevariable{mathematics}{wiskunde} \setinterfacevariable{mathmatrix}{wiskundematrix} \setinterfacevariable{max}{max} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{mei} \setinterfacevariable{mediaeval}{mediaeval} \setinterfacevariable{medium}{middel} \setinterfacevariable{middle}{midden} \setinterfacevariable{min}{min} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{minhoogte} \setinterfacevariable{minwidth}{minbreedte} \setinterfacevariable{mirrored}{gespiegeld} \setinterfacevariable{monday}{maandag} \setinterfacevariable{mono}{mono} \setinterfacevariable{month}{maand} \setinterfacevariable{more}{meer} \setinterfacevariable{morehyphenation}{morehyphenation} \setinterfacevariable{name}{naam} \setinterfacevariable{narrow}{smal} \setinterfacevariable{negative}{negatief} \setinterfacevariable{never}{nooit} \setinterfacevariable{new}{nieuw} \setinterfacevariable{next}{volgende} \setinterfacevariable{nextevenpage}{volgendeevenpagina} \setinterfacevariable{nextoddpage}{volgendeonevenpagina} \setinterfacevariable{nextpage}{volgendepagina} \setinterfacevariable{nextsubpage}{volgendesubpagina} \setinterfacevariable{no}{nee} \setinterfacevariable{nocheck}{geencontrole} \setinterfacevariable{nofit}{nietpassend} \setinterfacevariable{nogrid}{geengrid} \setinterfacevariable{nohz}{geenhz} \setinterfacevariable{nomarking}{geenmarkering} \setinterfacevariable{none}{geen} \setinterfacevariable{nonumber}{geennummer} \setinterfacevariable{normal}{normaal} \setinterfacevariable{nospacing}{geenspatiering} \setinterfacevariable{not}{niet} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{niethangend} \setinterfacevariable{nothyphenated}{nietafgebroken} \setinterfacevariable{november}{november} \setinterfacevariable{nowhere}{nergens} \setinterfacevariable{nowhite}{geenwit} \setinterfacevariable{number}{nummer} \setinterfacevariable{numbers}{cijfers} \setinterfacevariable{october}{oktober} \setinterfacevariable{odd}{oneven} \setinterfacevariable{off}{uit} \setinterfacevariable{offset}{offset} \setinterfacevariable{old}{oud} \setinterfacevariable{on}{aan} \setinterfacevariable{one}{een} \setinterfacevariable{opposite}{naast} \setinterfacevariable{outer}{buiten} \setinterfacevariable{outeredge}{buitenrand} \setinterfacevariable{outermargin}{buitenmarge} \setinterfacevariable{overbar}{overstreep} \setinterfacevariable{overbars}{overstrepen} \setinterfacevariable{overlay}{overlay} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{doorstreep} \setinterfacevariable{overstrikes}{doorstrepen} \setinterfacevariable{packed}{opelkaar} \setinterfacevariable{page}{pagina} \setinterfacevariable{pagecomment}{paginacommentaar} \setinterfacevariable{pagenumber}{paginanummer} \setinterfacevariable{paper}{papier} \setinterfacevariable{paragraph}{alinea} \setinterfacevariable{part}{deel} \setinterfacevariable{positive}{positief} \setinterfacevariable{postponing}{uitstellen} \setinterfacevariable{postscript}{postscript} \setinterfacevariable{preference}{voorkeur} \setinterfacevariable{preview}{preview} \setinterfacevariable{previous}{vorige} \setinterfacevariable{previousevenpage}{vorigeevenpagina} \setinterfacevariable{previousoddpage}{vorigeonevenpagina} \setinterfacevariable{previouspage}{vorigepagina} \setinterfacevariable{previoussubpage}{vorigesubpagina} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{printbaar} \setinterfacevariable{process}{proces} \setinterfacevariable{product}{produkt} \setinterfacevariable{program}{programma} \setinterfacevariable{project}{project} \setinterfacevariable{protected}{beschermd} \setinterfacevariable{quadruple}{viertal} \setinterfacevariable{quarterline}{kwartregel} \setinterfacevariable{quotation}{citaat} \setinterfacevariable{quote}{citeer} \setinterfacevariable{ran}{ran} \setinterfacevariable{random}{willekeurig} \setinterfacevariable{readonly}{alleenleesbaar} \setinterfacevariable{rectangular}{recht} \setinterfacevariable{reference}{referentie} \setinterfacevariable{referral}{kenmerk} \setinterfacevariable{register}{register} \setinterfacevariable{regular}{regular} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{relatief} \setinterfacevariable{repeat}{herhaal} \setinterfacevariable{required}{verplicht} \setinterfacevariable{reset}{reset} \setinterfacevariable{reverse}{omgekeerd} \setinterfacevariable{right}{rechts} \setinterfacevariable{rightedge}{rechterrand} \setinterfacevariable{righthanging}{rechtshangend} \setinterfacevariable{rightmargin}{rechtermarge} \setinterfacevariable{rightpage}{rechterpagina} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{romaan} \setinterfacevariable{romannumerals}{romeins} \setinterfacevariable{rotate}{roteer} \setinterfacevariable{rotated}{geroteerd} \setinterfacevariable{round}{rond} \setinterfacevariable{row}{rij} \setinterfacevariable{rule}{lijn} \setinterfacevariable{samepage}{zelfdepagina} \setinterfacevariable{sans}{sans} \setinterfacevariable{sansbold}{sansvet} \setinterfacevariable{sansserif}{schreefloos} \setinterfacevariable{saturday}{zaterdag} \setinterfacevariable{screen}{raster} \setinterfacevariable{section}{paragraaf} \setinterfacevariable{sectionblockenvironment}{sectieblokomgeving} \setinterfacevariable{sectionnumber}{sectienummer} \setinterfacevariable{see}{zie} \setinterfacevariable{september}{september} \setinterfacevariable{serif}{serif} \setinterfacevariable{serried}{aanelkaar} \setinterfacevariable{setups}{instellingen} \setinterfacevariable{sheet}{sheet} \setinterfacevariable{short}{kort} \setinterfacevariable{singlesided}{enkelzijdig} \setinterfacevariable{slanted}{schuin} \setinterfacevariable{slantedbold}{schuinvet} \setinterfacevariable{small}{klein} \setinterfacevariable{smallbodyfont}{kleinkorps} \setinterfacevariable{smallbold}{kleinvet} \setinterfacevariable{smallbolditalic}{kleinvetitalic} \setinterfacevariable{smallboldslanted}{kleinvetschuin} \setinterfacevariable{smallcaps}{smallcaps} \setinterfacevariable{smaller}{kleiner} \setinterfacevariable{smallitalic}{kleinitalic} \setinterfacevariable{smallitalicbold}{kleinitalicvet} \setinterfacevariable{smallnormal}{kleinnormaal} \setinterfacevariable{smallslanted}{kleinschuin} \setinterfacevariable{smallslantedbold}{kleinschuinvet} \setinterfacevariable{smalltype}{kleintype} \setinterfacevariable{somewhere}{ergens} \setinterfacevariable{sorted}{gesorteerd} \setinterfacevariable{space}{spatie} \setinterfacevariable{spacing}{spatiering} \setinterfacevariable{speech}{spraak} \setinterfacevariable{split}{splitsen} \setinterfacevariable{spot}{spot} \setinterfacevariable{standard}{standaard} \setinterfacevariable{start}{start} \setinterfacevariable{starter}{opener} \setinterfacevariable{sticker}{sticker} \setinterfacevariable{stop}{stop} \setinterfacevariable{stopper}{afsluiter} \setinterfacevariable{stretch}{rek} \setinterfacevariable{strict}{streng} \setinterfacevariable{strong}{sterk} \setinterfacevariable{strut}{strut} \setinterfacevariable{sub}{sub} \setinterfacevariable{subbackward}{subachteruit} \setinterfacevariable{subformula}{subformule} \setinterfacevariable{subforward}{subvooruit} \setinterfacevariable{subject}{onderwerp} \setinterfacevariable{subpage}{subpagina} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{subparagraaf} \setinterfacevariable{subsubject}{subonderwerp} \setinterfacevariable{subsubsection}{subsubparagraaf} \setinterfacevariable{subsubsubject}{subsubonderwerp} \setinterfacevariable{subsubsubsection}{subsubsubparagraaf} \setinterfacevariable{subsubsubsubject}{subsubsubonderwerp} \setinterfacevariable{subsubsubsubsection}{subsubsubsubparagraaf} \setinterfacevariable{subsubsubsubsubject}{subsubsubsubonderwerp} \setinterfacevariable{subsubsubsubsubsection}{subsubsubsubsubparagraaf} \setinterfacevariable{subsubsubsubsubsubject}{subsubsubsubsubonderwerp} \setinterfacevariable{subsubsubsubsubsubsection}{subsubsubsubsubsubparagraaf} \setinterfacevariable{subsubsubsubsubsubsubject}{subsubsubsubsubsubonderwerp} \setinterfacevariable{subsubsubsubsubsubsubsection}{subsubsubsubsubsubsubparagraaf} \setinterfacevariable{subsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubonderwerp} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsubparagraaf} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubonderwerp} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{subsubsubsubsubsubsubsubsubparagraaf} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{subsubsubsubsubsubsubsubsubonderwerp} \setinterfacevariable{sunday}{zondag} \setinterfacevariable{support}{support} \setinterfacevariable{sym}{sym} \setinterfacevariable{symbol}{symbool} \setinterfacevariable{synchronize}{synchroniseer} \setinterfacevariable{system}{systeem} \setinterfacevariable{table}{tabel} \setinterfacevariable{tablehead}{tabelkop} \setinterfacevariable{tables}{tabellen} \setinterfacevariable{tabletail}{tabelstaart} \setinterfacevariable{tabulate}{tabulatie} \setinterfacevariable{tabulatehead}{tabulatiekop} \setinterfacevariable{tabulatetail}{tabulatiestaart} \setinterfacevariable{tall}{lang} \setinterfacevariable{teletype}{teletype} \setinterfacevariable{temporary}{voorlopig} \setinterfacevariable{test}{test} \setinterfacevariable{text}{tekst} \setinterfacevariable{three}{drie} \setinterfacevariable{thursday}{donderdag} \setinterfacevariable{tight}{krap} \setinterfacevariable{title}{titel} \setinterfacevariable{toggle}{toggle} \setinterfacevariable{tolerant}{soepel} \setinterfacevariable{top}{boven} \setinterfacevariable{tuesday}{dinsdag} \setinterfacevariable{two}{twee} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{type} \setinterfacevariable{typing}{typen} \setinterfacevariable{unavailable}{nietbeschikbaar} \setinterfacevariable{underbar}{onderstreep} \setinterfacevariable{underbars}{onderstrepen} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{eenheid} \setinterfacevariable{units}{eenheden} \setinterfacevariable{unknown}{onbekend} \setinterfacevariable{unpacked}{vanelkaar} \setinterfacevariable{up}{omhoog} \setinterfacevariable{url}{url} \setinterfacevariable{used}{gebruikt} \setinterfacevariable{value}{waarde} \setinterfacevariable{vertical}{vertikaal} \setinterfacevariable{very}{zeer} \setinterfacevariable{verystrict}{zeerstreng} \setinterfacevariable{verytolerant}{zeersoepel} \setinterfacevariable{weak}{zwak} \setinterfacevariable{wednesday}{woensdag} \setinterfacevariable{week}{week} \setinterfacevariable{weekday}{weekdag} \setinterfacevariable{white}{wit} \setinterfacevariable{wide}{breed} \setinterfacevariable{width}{breedte} \setinterfacevariable{word}{woord} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{jaar} \setinterfacevariable{yes}{ja} % definitions for interface constants for language nl % \setinterfaceconstant{action}{actie} \setinterfaceconstant{address}{adres} \setinterfaceconstant{after}{na} \setinterfaceconstant{afterhead}{kopna} \setinterfaceconstant{afterkey}{natoets} \setinterfaceconstant{aftersection}{nasectie} \setinterfaceconstant{align}{uitlijnen} \setinterfaceconstant{aligncharacter}{karakteruitlijnen} \setinterfaceconstant{alignmentcharacter}{uitlijnkarakter} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{titeluitlijnen} \setinterfaceconstant{alternative}{variant} \setinterfaceconstant{anchor}{anker} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{pijl} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{op} \setinterfaceconstant{author}{auteur} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{auto} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{autofile} \setinterfaceconstant{autofocus}{autofocus} \setinterfaceconstant{autohang}{autohang} \setinterfaceconstant{autostrut}{autostrut} \setinterfaceconstant{autowidth}{autobreedte} \setinterfaceconstant{availableheight}{beschikbarehoogte} \setinterfaceconstant{availablewidth}{beschikbarebreedte} \setinterfaceconstant{axis}{assenstelsel} \setinterfaceconstant{background}{achtergrond} \setinterfaceconstant{backgroundcolor}{achtergrondkleur} \setinterfaceconstant{backgroundcorner}{achtergrondhoek} \setinterfaceconstant{backgrounddepth}{achtergronddiepte} \setinterfaceconstant{backgroundoffset}{achtergrondoffset} \setinterfaceconstant{backgroundradius}{achtergrondstraal} \setinterfaceconstant{backgroundscreen}{achtergrondraster} \setinterfaceconstant{backreference}{terugreferentie} \setinterfaceconstant{backspace}{rugwit} \setinterfaceconstant{balance}{balanceren} \setinterfaceconstant{before}{voor} \setinterfaceconstant{beforehead}{kopvoor} \setinterfaceconstant{beforesection}{voorsectie} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{groot} \setinterfaceconstant{blank}{blanko} \setinterfaceconstant{blockway}{blokwijze} \setinterfaceconstant{bodyfont}{korps} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{bookmark} \setinterfaceconstant{bottom}{onder} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{ondercommando} \setinterfaceconstant{bottomdistance}{onderafstand} \setinterfaceconstant{bottomframe}{onderkader} \setinterfaceconstant{bottomoffset}{onderoffset} \setinterfaceconstant{bottomspace}{bodemwit} \setinterfaceconstant{bottomstate}{onderstatus} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{cache} \setinterfaceconstant{calculate}{bereken} \setinterfaceconstant{category}{categorie} \setinterfaceconstant{ccommand}{ccommando} \setinterfaceconstant{click}{klik} \setinterfaceconstant{clickin}{klikin} \setinterfaceconstant{clickout}{klikuit} \setinterfaceconstant{clipoffset}{clipoffset} \setinterfaceconstant{closeaction}{sluitactie} \setinterfaceconstant{closecommand}{sluitcommando} \setinterfaceconstant{closepage}{sluitpagina} \setinterfaceconstant{closepageaction}{sluitpaginaactie} \setinterfaceconstant{closesymbol}{sluitsymbool} \setinterfaceconstant{color}{kleur} \setinterfaceconstant{column}{kolom} \setinterfaceconstant{columndistance}{kolomafstand} \setinterfaceconstant{columns}{kolommen} \setinterfaceconstant{command}{commando} \setinterfaceconstant{commandafter}{nacommando} \setinterfaceconstant{commandbefore}{voorcommando} \setinterfaceconstant{commands}{commandos} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{component} \setinterfaceconstant{compoundhyphen}{koppelteken} \setinterfaceconstant{compress}{comprimeren} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{doorgaan} \setinterfaceconstant{contrastcolor}{contrastkleur} \setinterfaceconstant{controls}{sturing} \setinterfaceconstant{conversion}{conversie} \setinterfaceconstant{convertfile}{converteerfile} \setinterfaceconstant{corner}{hoek} \setinterfaceconstant{coupling}{koppeling} \setinterfaceconstant{couplingway}{koppelwijze} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{huidige} \setinterfaceconstant{cutspace}{snijwit} \setinterfaceconstant{dash}{streep} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{datum} \setinterfaceconstant{deepnumbercommand}{diepnummercommando} \setinterfaceconstant{deeptextcommand}{dieptekstcommando} \setinterfaceconstant{default}{default} \setinterfaceconstant{delay}{wachttijd} \setinterfaceconstant{depth}{diepte} \setinterfaceconstant{depthcorrection}{dieptecorrectie} \setinterfaceconstant{direction}{richting} \setinterfaceconstant{directory}{directory} \setinterfaceconstant{display}{scherm} \setinterfaceconstant{distance}{afstand} \setinterfaceconstant{dot}{punt} \setinterfaceconstant{doublesided}{dubbelzijdig} \setinterfaceconstant{dummy}{dummy} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{rand} \setinterfaceconstant{edgedistance}{randafstand} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{leeg} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{ingangen} \setinterfaceconstant{equalheight}{equalheight} \setinterfaceconstant{equalwidth}{equalwidth} \setinterfaceconstant{escape}{escape} \setinterfaceconstant{evenmargin}{evenmarge} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{expansie} \setinterfaceconstant{export}{exporteer} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{factor} \setinterfaceconstant{fallback}{terugval} \setinterfaceconstant{family}{soort} \setinterfaceconstant{fieldbackgroundcolor}{veldachtergrondkleur} \setinterfaceconstant{fieldframecolor}{veldkaderkleur} \setinterfaceconstant{fieldlayer}{veldlaag} \setinterfaceconstant{fieldoffset}{veldoffset} \setinterfaceconstant{file}{file} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{eerstepagina} \setinterfaceconstant{focus}{focus} \setinterfaceconstant{focusin}{focusin} \setinterfaceconstant{focusout}{focusuit} \setinterfaceconstant{footer}{voet} \setinterfaceconstant{footerdistance}{voetafstand} \setinterfaceconstant{footerstate}{voetstatus} \setinterfaceconstant{force}{forceer} \setinterfaceconstant{foregroundcolor}{voorgrondkleur} \setinterfaceconstant{foregroundstyle}{voorgrondletter} \setinterfaceconstant{format}{formatteer} \setinterfaceconstant{frame}{kader} \setinterfaceconstant{framecolor}{kaderkleur} \setinterfaceconstant{framecorner}{kaderhoek} \setinterfaceconstant{framedepth}{kaderdiepte} \setinterfaceconstant{frameoffset}{kaderoffset} \setinterfaceconstant{frameradius}{kaderstraal} \setinterfaceconstant{frames}{hokjes} \setinterfaceconstant{from}{van} \setinterfaceconstant{get}{haal} \setinterfaceconstant{global}{globaal} \setinterfaceconstant{grid}{grid} \setinterfaceconstant{hang}{hang} \setinterfaceconstant{hcompact}{hcomprimeer} \setinterfaceconstant{headalign}{kopuitlijnen} \setinterfaceconstant{headcolor}{kopkleur} \setinterfaceconstant{headcommand}{kopcommando} \setinterfaceconstant{headconversion}{kopconversie} \setinterfaceconstant{header}{hoofd} \setinterfaceconstant{headerdistance}{hoofdafstand} \setinterfaceconstant{headerstate}{hoofdstatus} \setinterfaceconstant{headlabel}{koplabel} \setinterfaceconstant{headnumber}{kopnummer} \setinterfaceconstant{headstyle}{kopletter} \setinterfaceconstant{height}{hoogte} \setinterfaceconstant{hfactor}{hfactor} \setinterfaceconstant{hfil}{hfil} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{hoffset} \setinterfaceconstant{horoffset}{rugoffset} \setinterfaceconstant{hyphen}{hyphen} \setinterfaceconstant{icommand}{icommando} \setinterfaceconstant{in}{in} \setinterfaceconstant{inbetween}{tussen} \setinterfaceconstant{increment}{verhoog} \setinterfaceconstant{incrementnumber}{verhoognummer} \setinterfaceconstant{indenting}{inspringen} \setinterfaceconstant{indentnext}{springvolgendein} \setinterfaceconstant{indicator}{aanduiding} \setinterfaceconstant{inner}{binnen} \setinterfaceconstant{innermargin}{binnenmarge} \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{binnensectie} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interactie} \setinterfaceconstant{interlinespace}{interlinie} \setinterfaceconstant{internalgrid}{interngrid} \setinterfaceconstant{itemalign}{itemuitlijnen} \setinterfaceconstant{items}{items} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{sleutelexpansie} \setinterfaceconstant{keys}{sleutels} \setinterfaceconstant{keyword}{trefwoord} \setinterfaceconstant{label}{label} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{laatstepagina} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{links} \setinterfaceconstant{leftcolor}{linkerkleur} \setinterfaceconstant{leftcompoundhyphen}{linkerkoppelteken} \setinterfaceconstant{leftedge}{linkerrand} \setinterfaceconstant{leftedgedistance}{linkerrandafstand} \setinterfaceconstant{leftframe}{linkerkader} \setinterfaceconstant{lefthyphen}{lefthyphen} \setinterfaceconstant{leftmargin}{linkermarge} \setinterfaceconstant{leftmargindistance}{linkermargeafstand} \setinterfaceconstant{leftoffset}{linkeroffset} \setinterfaceconstant{leftquotation}{linkercitaat} \setinterfaceconstant{leftquote}{linkerciteer} \setinterfaceconstant{leftsentence}{linkerzin} \setinterfaceconstant{leftspeech}{linkeruitspraak} \setinterfaceconstant{leftstyle}{linkerletter} \setinterfaceconstant{leftsubsentence}{linkersubzin} \setinterfaceconstant{lefttext}{linkertekst} \setinterfaceconstant{leftwidth}{linkerbreedte} \setinterfaceconstant{less}{minder} \setinterfaceconstant{level}{niveau} \setinterfaceconstant{levels}{niveaus} \setinterfaceconstant{limittext}{limiettekst} \setinterfaceconstant{line}{regel} \setinterfaceconstant{linecorrection}{regelcorrectie} \setinterfaceconstant{lines}{regels} \setinterfaceconstant{list}{lijst} \setinterfaceconstant{listtext}{lijsttekst} \setinterfaceconstant{local}{lokaal} \setinterfaceconstant{location}{plaats} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{logo} \setinterfaceconstant{logos}{logos} \setinterfaceconstant{marcolor}{markleur} \setinterfaceconstant{margin}{marge} \setinterfaceconstant{margindistance}{margeafstand} \setinterfaceconstant{marginedge}{kantlijn} \setinterfaceconstant{marginedgetext}{kantlijntekst} \setinterfaceconstant{margintext}{margetekst} \setinterfaceconstant{marking}{markering} \setinterfaceconstant{marstyle}{marletter} \setinterfaceconstant{mask}{masker} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{maxhoogte} \setinterfaceconstant{maxwidth}{maxbreedte} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{menu} \setinterfaceconstant{method}{methode} \setinterfaceconstant{middle}{midden} \setinterfaceconstant{middlecommand}{middencommando} \setinterfaceconstant{middlespeech}{middenuitspraak} \setinterfaceconstant{middletext}{middentekst} \setinterfaceconstant{midsentence}{middenzin} \setinterfaceconstant{min}{min} \setinterfaceconstant{mindepth}{mindiepte} \setinterfaceconstant{minheight}{minhoogte} \setinterfaceconstant{minwidth}{minbreedte} \setinterfaceconstant{monthconversion}{maandconversie} \setinterfaceconstant{more}{meer} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{naam} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{nonder} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{volgende} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{nlinks} \setinterfaceconstant{nlines}{nregels} \setinterfaceconstant{norm}{norm} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{nrechts} \setinterfaceconstant{ntop}{nboven} \setinterfaceconstant{number}{nummer} \setinterfaceconstant{numbercolor}{nummerkleur} \setinterfaceconstant{numbercommand}{nummercommando} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{nummerafstand} \setinterfaceconstant{numbering}{nummeren} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{nummerscheider} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{nummerletter} \setinterfaceconstant{numberwidth}{nummerbreedte} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{object} \setinterfaceconstant{obstruction}{blokkade} \setinterfaceconstant{oddmargin}{onevenmarge} \setinterfaceconstant{offset}{offset} \setinterfaceconstant{openaction}{openactie} \setinterfaceconstant{openpage}{openpagina} \setinterfaceconstant{openpageaction}{openpaginaactie} \setinterfaceconstant{option}{optie} \setinterfaceconstant{order}{volgorde} \setinterfaceconstant{orientation}{orientatie} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{buitenmarge} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{eigennummer} \setinterfaceconstant{page}{pagina} \setinterfaceconstant{pageboundaries}{paginaovergangen} \setinterfaceconstant{pagecolor}{paginakleur} \setinterfaceconstant{pagecolormodel}{paginakleurmodel} \setinterfaceconstant{pagecommand}{paginacommando} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{paginanummer} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{paginastatus} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{paginaletter} \setinterfaceconstant{palet}{palet} \setinterfaceconstant{paper}{papier} \setinterfaceconstant{paragraph}{alinea} \setinterfaceconstant{place}{plaatsen} \setinterfaceconstant{placehead}{plaatskop} \setinterfaceconstant{placestopper}{plaatsafsluiter} \setinterfaceconstant{position}{positie} \setinterfaceconstant{prefix}{prefix} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{preset} \setinterfaceconstant{preview}{preview} \setinterfaceconstant{previous}{vorige} \setinterfaceconstant{previousnumber}{vorigenummer} \setinterfaceconstant{printable}{printbaar} \setinterfaceconstant{process}{proces} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{straal} \setinterfaceconstant{random}{willekeur} \setinterfaceconstant{range}{bereik} \setinterfaceconstant{reduction}{reductie} \setinterfaceconstant{ref}{ref} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{verwijzing} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{refereren} \setinterfaceconstant{region}{gebied} \setinterfaceconstant{regionin}{gebiedin} \setinterfaceconstant{regionout}{gebieduit} \setinterfaceconstant{repeat}{herhaal} \setinterfaceconstant{reset}{reset} \setinterfaceconstant{resetnumber}{resetnummer} \setinterfaceconstant{resolution}{resolutie} \setinterfaceconstant{right}{rechts} \setinterfaceconstant{rightcolor}{rechterkleur} \setinterfaceconstant{rightcompoundhyphen}{rechterkoppelteken} \setinterfaceconstant{rightedge}{rechterrand} \setinterfaceconstant{rightedgedistance}{rechterrandafstand} \setinterfaceconstant{rightframe}{rechterkader} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{rechtermarge} \setinterfaceconstant{rightmargindistance}{rechtermargeafstand} \setinterfaceconstant{rightoffset}{rechteroffset} \setinterfaceconstant{rightquotation}{rechtercitaat} \setinterfaceconstant{rightquote}{rechterciteer} \setinterfaceconstant{rightsentence}{rechterzin} \setinterfaceconstant{rightspeech}{rechteruitspraak} \setinterfaceconstant{rightstyle}{rechterletter} \setinterfaceconstant{rightsubsentence}{rechtersubzin} \setinterfaceconstant{righttext}{rechtertekst} \setinterfaceconstant{rightwidth}{rechterbreedte} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{rotatie} \setinterfaceconstant{rule}{lijn} \setinterfaceconstant{rulecolor}{lijnkleur} \setinterfaceconstant{rulecommand}{lijncommando} \setinterfaceconstant{rulethickness}{lijndikte} \setinterfaceconstant{samepage}{zelfdepagina} \setinterfaceconstant{sample}{monster} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{schaal} \setinterfaceconstant{scope}{scope} \setinterfaceconstant{screen}{raster} \setinterfaceconstant{section}{sectie} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{sectienummer} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{scheider} \setinterfaceconstant{set}{set} \setinterfaceconstant{setups}{setups} \setinterfaceconstant{shrink}{krimp} \setinterfaceconstant{side}{zij} \setinterfaceconstant{sidealign}{zijuitlijnen} \setinterfaceconstant{sidemethod}{zijmethode} \setinterfaceconstant{sidespaceafter}{zijnawit} \setinterfaceconstant{sidespacebefore}{zijvoorwit} \setinterfaceconstant{sign}{teken} \setinterfaceconstant{size}{formaat} \setinterfaceconstant{small}{klein} \setinterfaceconstant{solution}{oplossing} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sortering} \setinterfaceconstant{source}{bron} \setinterfaceconstant{space}{spatie} \setinterfaceconstant{spaceafter}{nawit} \setinterfaceconstant{spacebefore}{voorwit} \setinterfaceconstant{spaceinbetween}{tussenwit} \setinterfaceconstant{spacing}{spatiering} \setinterfaceconstant{split}{splitsen} \setinterfaceconstant{splitcolor}{splitskleur} \setinterfaceconstant{splitmethod}{splitsmethode} \setinterfaceconstant{splitoffset}{splitsoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stapel} \setinterfaceconstant{start}{start} \setinterfaceconstant{starter}{opener} \setinterfaceconstant{state}{status} \setinterfaceconstant{step}{stap} \setinterfaceconstant{stop}{stop} \setinterfaceconstant{stopper}{afsluiter} \setinterfaceconstant{stretch}{rek} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{strut} \setinterfaceconstant{style}{letter} \setinterfaceconstant{sub}{sub} \setinterfaceconstant{subtitle}{subtitel} \setinterfaceconstant{suffix}{suffix} \setinterfaceconstant{suffixseparator}{suffixscheider} \setinterfaceconstant{suffixstopper}{suffixafsluiter} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{symuitlijnen} \setinterfaceconstant{symbol}{symbool} \setinterfaceconstant{symbolset}{symboolset} \setinterfaceconstant{symcolor}{symkleur} \setinterfaceconstant{symstyle}{symletter} \setinterfaceconstant{synonym}{synoniem} \setinterfaceconstant{synonymcolor}{synoniemkleur} \setinterfaceconstant{synonymcommand}{synoniemcommando} \setinterfaceconstant{synonymstyle}{synoniemletter} \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{tekst} \setinterfaceconstant{textcolor}{tekstkleur} \setinterfaceconstant{textcommand}{tekstcommando} \setinterfaceconstant{textdistance}{tekstafstand} \setinterfaceconstant{textheight}{teksthoogte} \setinterfaceconstant{textlayer}{tekstlaag} \setinterfaceconstant{textmargin}{tekstmarge} \setinterfaceconstant{textmethod}{tekstmethode} \setinterfaceconstant{textseparator}{tekstscheider} \setinterfaceconstant{textsize}{tekstformaat} \setinterfaceconstant{textstate}{tekststatus} \setinterfaceconstant{textstyle}{tekstletter} \setinterfaceconstant{textwidth}{tekstbreedte} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{titel} \setinterfaceconstant{titlecolor}{titelkleur} \setinterfaceconstant{titlecommand}{titelcommando} \setinterfaceconstant{titledistance}{titelafstand} \setinterfaceconstant{titleleft}{titellinks} \setinterfaceconstant{titleright}{titelrechts} \setinterfaceconstant{titlestyle}{titelletter} \setinterfaceconstant{to}{aan} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolerantie} \setinterfaceconstant{top}{boven} \setinterfaceconstant{topcommand}{bovencommando} \setinterfaceconstant{topdistance}{bovenafstand} \setinterfaceconstant{topframe}{bovenkader} \setinterfaceconstant{topoffset}{bovenoffset} \setinterfaceconstant{topspace}{kopwit} \setinterfaceconstant{topstate}{bovenstatus} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{type} \setinterfaceconstant{unit}{eenheid} \setinterfaceconstant{unknownreference}{onbekendeverwijzing} \setinterfaceconstant{urlalternative}{urlvariant} \setinterfaceconstant{urlspace}{urlspatie} \setinterfaceconstant{validate}{valideer} \setinterfaceconstant{values}{waarden} \setinterfaceconstant{vcommand}{vcommando} \setinterfaceconstant{vcompact}{vcomprimeer} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{kopoffset} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{voffset} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{wijze} \setinterfaceconstant{wfactor}{bfactor} \setinterfaceconstant{white}{wit} \setinterfaceconstant{width}{breedte} \setinterfaceconstant{xfactor}{xfactor} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{xoffset} \setinterfaceconstant{xscale}{xschaal} \setinterfaceconstant{xstep}{xstap} \setinterfaceconstant{yfactor}{yfactor} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{yoffset} \setinterfaceconstant{yscale}{yschaal} \setinterfaceconstant{ystep}{ystap} % definitions for interface elements for language nl % \setinterfaceelement{answerlines}{antwoordregels} \setinterfaceelement{answerspace}{antwoordruimte} \setinterfaceelement{begin}{beginvan} \setinterfaceelement{complete}{volledige} \setinterfaceelement{coupled}{gekoppelde} \setinterfaceelement{currentlocal}{huidigelokale} \setinterfaceelement{end}{eindvan} \setinterfaceelement{endsetup}{in} \setinterfaceelement{get}{haal} \setinterfaceelement{increment}{verhoog} \setinterfaceelement{list}{lijst} \setinterfaceelement{listof}{lijstmet} \setinterfaceelement{load}{laad} \setinterfaceelement{local}{lokale} \setinterfaceelement{makeup}{opmaak} \setinterfaceelement{next}{volgende} \setinterfaceelement{place}{plaats} \setinterfaceelement{previous}{vorige} \setinterfaceelement{previouslocal}{vorigelokale} \setinterfaceelement{reserve}{reserveer} \setinterfaceelement{see}{zie} \setinterfaceelement{setup}{stel} \setinterfaceelement{start}{start} \setinterfaceelement{stop}{stop} \setinterfaceelement{text}{tekst} \setinterfaceelement{type}{type} % definitions for interface commands for language nl % \setinterfacecommand{CAPPED}{KAP} \setinterfacecommand{Character}{Letter} \setinterfacecommand{Characters}{Letters} \setinterfacecommand{MONTH}{MAAND} \setinterfacecommand{Numbers}{Cijfers} \setinterfacecommand{Romannumerals}{Romeins} \setinterfacecommand{SmallCapped}{Kap} \setinterfacecommand{SmallCaps}{Kaps} \setinterfacecommand{WEEKDAY}{WEEKDAG} \setinterfacecommand{WORD}{WOORD} \setinterfacecommand{WORDS}{WOORDEN} \setinterfacecommand{Word}{Woord} \setinterfacecommand{Words}{Woorden} \setinterfacecommand{about}{about} \setinterfacecommand{adaptlayout}{paslayoutaan} \setinterfacecommand{arg}{arg} \setinterfacecommand{at}{op} \setinterfacecommand{atleftmargin}{oplinkermarge} \setinterfacecommand{atpage}{oppagina} \setinterfacecommand{atrightmargin}{oprechtermarge} \setinterfacecommand{background}{achtergrond} \setinterfacecommand{backspace}{rugwit} \setinterfacecommand{blackrule}{blokje} \setinterfacecommand{blackrules}{blokjes} \setinterfacecommand{blank}{blanko} \setinterfacecommand{bookmark}{bookmark} \setinterfacecommand{bottomdistance}{onderafstand} \setinterfacecommand{bottomheight}{onderhoogte} \setinterfacecommand{bottomspace}{bodemwit} \setinterfacecommand{but}{but} \setinterfacecommand{button}{button} \setinterfacecommand{bypassblocks}{passeerblokken} \setinterfacecommand{character}{letter} \setinterfacecommand{characters}{letters} \setinterfacecommand{chem}{chem} \setinterfacecommand{clip}{clip} \setinterfacecommand{clonefield}{kloonveld} \setinterfacecommand{color}{kleur} \setinterfacecommand{colorbar}{kleurenbalk} \setinterfacecommand{colorvalue}{kleurwaarde} \setinterfacecommand{column}{kolom} \setinterfacecommand{comparecolorgroup}{vergelijkkleurgroep} \setinterfacecommand{comparepalet}{vergelijkpalet} \setinterfacecommand{completepagenumber}{volledigepaginanummer} \setinterfacecommand{completeregister}{volledigregister} \setinterfacecommand{component}{onderdeel} \setinterfacecommand{convertnumber}{converteernummer} \setinterfacecommand{copyfield}{copieerveld} \setinterfacecommand{correctwhitespace}{corrigeerwitruimte} \setinterfacecommand{coupledocument}{koppeldocument} \setinterfacecommand{couplemarking}{koppelmarkering} \setinterfacecommand{couplepage}{koppelpagina} \setinterfacecommand{couplepaper}{koppelpapier} \setinterfacecommand{coupleregister}{koppelregister} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{huidigedatum} \setinterfacecommand{currentheadnumber}{huidigekopnummer} \setinterfacecommand{cutspace}{snijwit} \setinterfacecommand{date}{datum} \setinterfacecommand{decouplemarking}{ontkoppelmarkering} \setinterfacecommand{decrementnumber}{verlaagnummer} \setinterfacecommand{define}{definieer} \setinterfacecommand{defineaccent}{definieeraccent} \setinterfacecommand{defineblank}{definieerblanko} \setinterfacecommand{defineblock}{definieerblok} \setinterfacecommand{definebodyfont}{definieerkorps} \setinterfacecommand{definebodyfontenvironment}{definieerkorpsomgeving} \setinterfacecommand{definebuffer}{definieerbuffer} \setinterfacecommand{definecharacter}{definieerkarakter} \setinterfacecommand{definecolor}{definieerkleur} \setinterfacecommand{definecolorgroup}{definieerkleurgroep} \setinterfacecommand{definecolumnbreak}{definieerkolomovergang} \setinterfacecommand{definecolumnset}{definieerkolomgroep} \setinterfacecommand{definecombination}{definieercombinatie} \setinterfacecommand{definecombinedlist}{definieersamengesteldelijst} \setinterfacecommand{definecommand}{definieercommando} \setinterfacecommand{defineconversion}{definieerconversie} \setinterfacecommand{definedescription}{doordefinieren} \setinterfacecommand{defineenumeration}{doornummeren} \setinterfacecommand{definefield}{definieerveld} \setinterfacecommand{definefieldstack}{definieerveldstapel} \setinterfacecommand{definefiguresymbol}{definieerfiguursymbool} \setinterfacecommand{definefloat}{definieerplaatsblok} \setinterfacecommand{definefont}{definieerfont} \setinterfacecommand{definefontstyle}{definieerfontstijl} \setinterfacecommand{definefontsynonym}{definieerfontsynoniem} \setinterfacecommand{defineframed}{definieeromlijnd} \setinterfacecommand{defineframedtext}{definieerkadertekst} \setinterfacecommand{definehbox}{definieerhbox} \setinterfacecommand{definehead}{definieerkop} \setinterfacecommand{defineindentedtext}{definieeringesprongentext} \setinterfacecommand{defineinmargin}{definieerinmarge} \setinterfacecommand{defineinteractionmenu}{definieerinteractiemenu} \setinterfacecommand{defineitemgroup}{definieeritemgroep} \setinterfacecommand{definelabel}{doorlabelen} \setinterfacecommand{definelayer}{definieerlayer} \setinterfacecommand{definelayout}{definieerlayout} \setinterfacecommand{definelist}{definieerlijst} \setinterfacecommand{definelogo}{definieerbeeldmerk} \setinterfacecommand{definemainfield}{definieerhoofdveld} \setinterfacecommand{definemakeup}{definieeropmaak} \setinterfacecommand{definemarking}{definieermarkering} \setinterfacecommand{definemathalignment}{definieerwiskundeuitlijnen} \setinterfacecommand{defineoutput}{definieeruitvoer} \setinterfacecommand{defineoverlay}{definieeroverlay} \setinterfacecommand{definepagebreak}{definieerpaginaovergang} \setinterfacecommand{definepalet}{definieerpalet} \setinterfacecommand{definepapersize}{definieerpapierformaat} \setinterfacecommand{defineparagraphs}{definieeralineas} \setinterfacecommand{defineplacement}{definieerplaats} \setinterfacecommand{defineprofile}{definieerprofiel} \setinterfacecommand{defineprogram}{definieerprogramma} \setinterfacecommand{definerawfont}{definerawfont} \setinterfacecommand{definereference}{definieerreferentie} \setinterfacecommand{definereferenceformat}{definieerreferentieformaat} \setinterfacecommand{definereferencelist}{definieerreferentielijst} \setinterfacecommand{defineregister}{definieerregister} \setinterfacecommand{definerule}{definieerlijn} \setinterfacecommand{definesection}{definieersectie} \setinterfacecommand{definesectionblock}{definieersectieblok} \setinterfacecommand{definesorting}{definieersorteren} \setinterfacecommand{definestartstop}{definieerstartstop} \setinterfacecommand{definestyle}{definieerletter} \setinterfacecommand{definesubfield}{definieersubveld} \setinterfacecommand{definesymbol}{definieersymbool} \setinterfacecommand{definesynonyms}{definieersynoniemen} \setinterfacecommand{definetabletemplate}{definieertabelvorm} \setinterfacecommand{definetabulate}{definieertabulatie} \setinterfacecommand{definetext}{definieertekst} \setinterfacecommand{definetextposition}{definieertekstpositie} \setinterfacecommand{definetextvariable}{definieertekstvariabele} \setinterfacecommand{definetype}{definieertype} \setinterfacecommand{definetyping}{definieertypen} \setinterfacecommand{defineversion}{definieerversie} \setinterfacecommand{determineheadnumber}{bepaalkopnummer} \setinterfacecommand{determinelistcharacteristics}{bepaallijstkenmerken} \setinterfacecommand{determineregistercharacteristics}{bepaalregisterkenmerken} \setinterfacecommand{dimension}{dimensie} \setinterfacecommand{disableinteractionmenu}{blokkeerinteractiemenu} \setinterfacecommand{domicile}{woonplaats} \setinterfacecommand{donttest}{geentest} \setinterfacecommand{edgedistance}{randafstand} \setinterfacecommand{edgewidth}{randbreedte} \setinterfacecommand{emptylines}{legeregels} \setinterfacecommand{environment}{omgeving} \setinterfacecommand{externalfigure}{externfiguur} \setinterfacecommand{fact}{geg} \setinterfacecommand{field}{veld} \setinterfacecommand{fieldstack}{veldstapel} \setinterfacecommand{fillinfield}{invulveld} \setinterfacecommand{fillinline}{invulregel} \setinterfacecommand{fillinrules}{invullijnen} \setinterfacecommand{fillintext}{invultekst} \setinterfacecommand{fitfield}{passendveld} \setinterfacecommand{fixedspace}{vastespatie} \setinterfacecommand{fixedspaces}{vastespaties} \setinterfacecommand{followprofile}{volgprofiel} \setinterfacecommand{followprofileversion}{volgprofielversie} \setinterfacecommand{followversion}{volgversie} \setinterfacecommand{footerdistance}{voetafstand} \setinterfacecommand{footerheight}{voethoogte} \setinterfacecommand{footnote}{voetnoot} \setinterfacecommand{footnotetext}{voetnoottekst} \setinterfacecommand{forceblocks}{forceerblokken} \setinterfacecommand{formulanumber}{formulenummer} \setinterfacecommand{fraction}{breuk} \setinterfacecommand{framed}{omlijnd} \setinterfacecommand{from}{uit} \setinterfacecommand{getbuffer}{haalbuffer} \setinterfacecommand{getmarking}{haalmarkering} \setinterfacecommand{getnumber}{haalnummer} \setinterfacecommand{godown}{omlaag} \setinterfacecommand{goto}{naar} \setinterfacecommand{gotobox}{naarbox} \setinterfacecommand{gotopage}{naarpagina} \setinterfacecommand{graycolor}{grijskleur} \setinterfacecommand{greyvalue}{grijswaarde} \setinterfacecommand{grid}{rooster} \setinterfacecommand{hairline}{haarlijn} \setinterfacecommand{head}{kop} \setinterfacecommand{headerdistance}{hoofdafstand} \setinterfacecommand{headerheight}{hoofdhoogte} \setinterfacecommand{headlevel}{kopniveau} \setinterfacecommand{headnumber}{kopnummer} \setinterfacecommand{headsym}{kopsym} \setinterfacecommand{headtext}{koptekst} \setinterfacecommand{hideblocks}{verbergblokken} \setinterfacecommand{high}{hoog} \setinterfacecommand{hl}{hl} \setinterfacecommand{immediatebetweenlist}{directtussenlijst} \setinterfacecommand{immediatetolist}{directnaarlijst} \setinterfacecommand{in}{in} \setinterfacecommand{incrementnumber}{verhoognummer} \setinterfacecommand{indenting}{inspringen} \setinterfacecommand{inframed}{inlijnd} \setinterfacecommand{infull}{voluit} \setinterfacecommand{ininner}{inbinnen} \setinterfacecommand{inleft}{inlinker} \setinterfacecommand{inleftedge}{inlinkerrand} \setinterfacecommand{inleftmargin}{inlinkermarge} \setinterfacecommand{inline}{inregel} \setinterfacecommand{inmargin}{inmarge} \setinterfacecommand{inmframed}{inwilijnd} \setinterfacecommand{inneredgedistance}{binnenrandafstand} \setinterfacecommand{inneredgewidth}{binnenrandbreedte} \setinterfacecommand{innermargindistance}{binnenmargeafstand} \setinterfacecommand{innermarginwidth}{binnenmargebreedte} \setinterfacecommand{inothermargin}{inanderemarge} \setinterfacecommand{inouter}{inbuiten} \setinterfacecommand{inright}{inrechter} \setinterfacecommand{inrightedge}{inrechterrand} \setinterfacecommand{inrightmargin}{inrechtermarge} \setinterfacecommand{installlanguage}{installeertaal} \setinterfacecommand{interactionbar}{interactiebalk} \setinterfacecommand{interactionbuttons}{interactiebuttons} \setinterfacecommand{interactionmenu}{interactiemenu} \setinterfacecommand{item}{som} \setinterfacecommand{items}{items} \setinterfacecommand{its}{its} \setinterfacecommand{keepblocks}{handhaafblokken} \setinterfacecommand{label}{label} \setinterfacecommand{labels}{labels} \setinterfacecommand{labeltext}{labeltekst} \setinterfacecommand{language}{taal} \setinterfacecommand{leftaligned}{regellinks} \setinterfacecommand{leftedgedistance}{linkerrandafstand} \setinterfacecommand{leftedgewidth}{linkerrandbreedte} \setinterfacecommand{leftmargindistance}{linkermargeafstand} \setinterfacecommand{leftmarginwidth}{linkermargebreedte} \setinterfacecommand{leg}{leg} \setinterfacecommand{linewidth}{lijndikte} \setinterfacecommand{listheight}{lijsthoogte} \setinterfacecommand{listlength}{lijstlengte} \setinterfacecommand{listsymbol}{lijstsymbool} \setinterfacecommand{listwidth}{lijstbreedte} \setinterfacecommand{logfields}{registreervelden} \setinterfacecommand{lohi}{laho} \setinterfacecommand{low}{laag} \setinterfacecommand{macroname}{naam} \setinterfacecommand{mainlanguage}{hoofdtaal} \setinterfacecommand{makeupheight}{zethoogte} \setinterfacecommand{makeupwidth}{zetbreedte} \setinterfacecommand{mar}{mar} \setinterfacecommand{margindistance}{margeafstand} \setinterfacecommand{marginrule}{kantlijn} \setinterfacecommand{margintext}{margetekst} \setinterfacecommand{margintitle}{margetitel} \setinterfacecommand{marginwidth}{margebreedte} \setinterfacecommand{marginword}{margewoord} \setinterfacecommand{marking}{markeer} \setinterfacecommand{markversion}{markeerversie} \setinterfacecommand{mathematics}{wiskunde} \setinterfacecommand{menubutton}{menubutton} \setinterfacecommand{mframed}{wilijnd} \setinterfacecommand{midaligned}{regelmidden} \setinterfacecommand{mirror}{spiegel} \setinterfacecommand{month}{maand} \setinterfacecommand{moveformula}{verplaatsformule} \setinterfacecommand{moveongrid}{verplaatsopgrid} \setinterfacecommand{movesidefloat}{verplaatszijblok} \setinterfacecommand{navigating}{navigerend} \setinterfacecommand{nodimension}{geendimensie} \setinterfacecommand{noheaderandfooterlines}{geenhoofdenvoetregels} \setinterfacecommand{noindenting}{nietinspringen} \setinterfacecommand{nolist}{geenlijst} \setinterfacecommand{nomarking}{geenmarkering} \setinterfacecommand{nomoreblocks}{geenblokkenmeer} \setinterfacecommand{nomorefiles}{geenfilesmeer} \setinterfacecommand{nop}{nop} \setinterfacecommand{nospace}{geenspatie} \setinterfacecommand{note}{noot} \setinterfacecommand{notopandbottomlines}{geenbovenenonderregels} \setinterfacecommand{notsmallcapped}{nokap} \setinterfacecommand{nowhitespace}{geenwitruimte} \setinterfacecommand{numberofsubpages}{aantalsubpaginas} \setinterfacecommand{numbers}{cijfers} \setinterfacecommand{outeredgedistance}{buitenrandafstand} \setinterfacecommand{outeredgewidth}{buitenrandbreedte} \setinterfacecommand{outermargindistance}{buitenmargeafstand} \setinterfacecommand{outermarginwidth}{buitenmargebreedte} \setinterfacecommand{packed}{opelkaar} \setinterfacecommand{page}{pagina} \setinterfacecommand{pagedepth}{paginadiepte} \setinterfacecommand{pagenumber}{paginanummer} \setinterfacecommand{pageoffset}{paginaoffset} \setinterfacecommand{pagereference}{paginareferentie} \setinterfacecommand{paperheight}{papierhoogte} \setinterfacecommand{paperwidth}{papierbreedte} \setinterfacecommand{periods}{punten} \setinterfacecommand{plaatsruwelijst}{plaatsruwelijst} \setinterfacecommand{placebookmarks}{plaatsbookmarks} \setinterfacecommand{placecombinedlist}{plaatssamengesteldelijst} \setinterfacecommand{placefloat}{plaatsplaatsblok} \setinterfacecommand{placefootnotes}{plaatsvoetnoten} \setinterfacecommand{placeformula}{plaatsformule} \setinterfacecommand{placeheadnumber}{plaatskopnummer} \setinterfacecommand{placeheadtext}{plaatskoptekst} \setinterfacecommand{placelegend}{plaatslegenda} \setinterfacecommand{placelist}{plaatslijst} \setinterfacecommand{placelocalfootnotes}{plaatslokalevoetnoten} \setinterfacecommand{placelogos}{plaatsbeeldmerken} \setinterfacecommand{placeongrid}{plaatsopgrid} \setinterfacecommand{placeontopofeachother}{plaatsonderelkaar} \setinterfacecommand{placepagenumber}{plaatspaginanummer} \setinterfacecommand{placereferencelist}{plaatsreferentielijst} \setinterfacecommand{placeregister}{plaatsregister} \setinterfacecommand{placerule}{plaatslijn} \setinterfacecommand{placesidebyside}{plaatsnaastelkaar} \setinterfacecommand{placesubformula}{plaatssubformule} \setinterfacecommand{placetextvariable}{plaatstekstvariabele} \setinterfacecommand{position}{positioneer} \setinterfacecommand{positiontext}{positioneertekst} \setinterfacecommand{printpaperheight}{printpapierhoogte} \setinterfacecommand{printpaperwidth}{printpapierbreedte} \setinterfacecommand{processblocks}{verwerkblokken} \setinterfacecommand{processpage}{verwerkpagina} \setinterfacecommand{product}{produkt} \setinterfacecommand{program}{programma} \setinterfacecommand{project}{projekt} \setinterfacecommand{publication}{publicatie} \setinterfacecommand{quotation}{citaat} \setinterfacecommand{quote}{citeer} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{herhaal} \setinterfacecommand{ref}{ref} \setinterfacecommand{reference}{referentie} \setinterfacecommand{referral}{kenmerk} \setinterfacecommand{referraldate}{kenmerkdatum} \setinterfacecommand{referring}{refereer} \setinterfacecommand{remark}{toelichting} \setinterfacecommand{reset}{reset} \setinterfacecommand{resetmarking}{resetmarkering} \setinterfacecommand{resetnumber}{resetnummer} \setinterfacecommand{resettext}{resettekstinhoud} \setinterfacecommand{rightaligned}{regelrechts} \setinterfacecommand{rightedgedistance}{rechterrandafstand} \setinterfacecommand{rightedgewidth}{rechterrandbreedte} \setinterfacecommand{rightmargindistance}{rechtermargeafstand} \setinterfacecommand{rightmarginwidth}{rechtermargebreedte} \setinterfacecommand{romannumerals}{romeins} \setinterfacecommand{rotate}{roteer} \setinterfacecommand{scale}{schaal} \setinterfacecommand{screen}{scherm} \setinterfacecommand{selectblocks}{selecteerblokken} \setinterfacecommand{selectpaper}{selecteerpapier} \setinterfacecommand{selectversion}{selecteerversie} \setinterfacecommand{setnumber}{setnummer} \setinterfacecommand{settextcontent}{steltekstinhoudin} \setinterfacecommand{settextvariable}{kentekstvariabeletoe} \setinterfacecommand{setupalign}{steluitlijnenin} \setinterfacecommand{setupanswerarea}{stelantwoordgebiedin} \setinterfacecommand{setuparranging}{stelarrangerenin} \setinterfacecommand{setupbackground}{stelachtergrondin} \setinterfacecommand{setupbackgrounds}{stelachtergrondenin} \setinterfacecommand{setupblackrules}{stelblokjesin} \setinterfacecommand{setupblank}{stelblankoin} \setinterfacecommand{setupblock}{stelblokin} \setinterfacecommand{setupbodyfont}{stelkorpsin} \setinterfacecommand{setupbodyfontenvironment}{stelkorpsomgevingin} \setinterfacecommand{setupbottom}{stelonderin} \setinterfacecommand{setupbottomtexts}{stelondertekstenin} \setinterfacecommand{setupbuffer}{stelbufferin} \setinterfacecommand{setupbuttons}{stelbuttonsin} \setinterfacecommand{setupcapitals}{stelkapitalenin} \setinterfacecommand{setupcaption}{stelblokkopjein} \setinterfacecommand{setupcaptions}{stelblokkopjesin} \setinterfacecommand{setupclipping}{stelclipin} \setinterfacecommand{setupcolor}{stelkleurin} \setinterfacecommand{setupcolors}{stelkleurenin} \setinterfacecommand{setupcolumns}{stelkolommenin} \setinterfacecommand{setupcolumnset}{stelkolomgroepin} \setinterfacecommand{setupcolumnsetlines}{stelkolomgroepregelsin} \setinterfacecommand{setupcolumnsetstart}{stelkolomgroepstartin} \setinterfacecommand{setupcombinations}{stelcombinatiesin} \setinterfacecommand{setupcombinedlist}{stelsamengesteldelijstin} \setinterfacecommand{setupcomment}{stelcommentaarin} \setinterfacecommand{setupdescriptions}{steldoordefinierenin} \setinterfacecommand{setupenumerations}{steldoornummerenin} \setinterfacecommand{setupexternalfigures}{stelexternefigurenin} \setinterfacecommand{setupfield}{stelveldin} \setinterfacecommand{setupfields}{stelveldenin} \setinterfacecommand{setupfillinlines}{stelinvulregelsin} \setinterfacecommand{setupfillinrules}{stelinvullijnenin} \setinterfacecommand{setupfloat}{stelplaatsblokin} \setinterfacecommand{setupfloats}{stelplaatsblokkenin} \setinterfacecommand{setupfloatsplitting}{stelplaatsbloksplitsenin} \setinterfacecommand{setupfooter}{stelvoetin} \setinterfacecommand{setupfootertexts}{stelvoettekstenin} \setinterfacecommand{setupfootnotedefinition}{stelvoetnootdefinitiein} \setinterfacecommand{setupfootnotes}{stelvoetnotenin} \setinterfacecommand{setupforms}{stelformulierenin} \setinterfacecommand{setupformulas}{stelformulesin} \setinterfacecommand{setupframed}{stelomlijndin} \setinterfacecommand{setupframedtexts}{stelkadertekstenin} \setinterfacecommand{setuphead}{stelkopin} \setinterfacecommand{setupheader}{stelhoofdin} \setinterfacecommand{setupheadertexts}{stelhoofdtekstenin} \setinterfacecommand{setupheadnumber}{stelkopnummerin} \setinterfacecommand{setupheads}{stelkoppenin} \setinterfacecommand{setupheadtext}{stelkoptekstin} \setinterfacecommand{setuphyphenmark}{stelkoppeltekenin} \setinterfacecommand{setupindentedtext}{stelingesprongentextin} \setinterfacecommand{setupindenting}{stelinspringenin} \setinterfacecommand{setupinmargin}{stelinmargein} \setinterfacecommand{setupinteraction}{stelinteractiein} \setinterfacecommand{setupinteractionbar}{stelinteractiebalkin} \setinterfacecommand{setupinteractionmenu}{stelinteractiemenuin} \setinterfacecommand{setupinteractionscreen}{stelinteractieschermin} \setinterfacecommand{setupinterlinespace}{stelinterliniein} \setinterfacecommand{setupitemgroup}{stelitemgroepin} \setinterfacecommand{setupitemgroups}{stelopsommingenin} \setinterfacecommand{setupitems}{stelitemsin} \setinterfacecommand{setuplabeltext}{stellabeltekstin} \setinterfacecommand{setuplanguage}{steltaalin} \setinterfacecommand{setuplayout}{stellayoutin} \setinterfacecommand{setuplegend}{stellegendain} \setinterfacecommand{setuplinenumbering}{stelregelnummerenin} \setinterfacecommand{setuplines}{stelregelsin} \setinterfacecommand{setuplinewidth}{stellijndiktein} \setinterfacecommand{setuplist}{stellijstin} \setinterfacecommand{setupmakeup}{stelopmaakin} \setinterfacecommand{setupmarginblocks}{stelmargeblokkenin} \setinterfacecommand{setupmarginrules}{stelkantlijnin} \setinterfacecommand{setupmarking}{stelmarkeringin} \setinterfacecommand{setupmathalignment}{stelwiskundeuitlijnenin} \setinterfacecommand{setupnarrower}{stelsmallerin} \setinterfacecommand{setupnumber}{stelnummerin} \setinterfacecommand{setupnumbering}{stelnummerenin} \setinterfacecommand{setupoppositeplacing}{stelnaastplaatsenin} \setinterfacecommand{setupoutput}{steluitvoerin} \setinterfacecommand{setuppagecomment}{stelpaginacommentaarin} \setinterfacecommand{setuppagenumber}{stelpaginanummerin} \setinterfacecommand{setuppagenumbering}{stelpaginanummeringin} \setinterfacecommand{setuppagetransitions}{stelpaginaovergangenin} \setinterfacecommand{setuppalet}{stelpaletin} \setinterfacecommand{setuppaper}{stelpapierin} \setinterfacecommand{setuppapersize}{stelpapierformaatin} \setinterfacecommand{setupparagraphnumbering}{stelparagraafnummerenin} \setinterfacecommand{setupparagraphs}{stelalineasin} \setinterfacecommand{setupplacement}{stelplaatsin} \setinterfacecommand{setuppositioning}{stelpositionerenin} \setinterfacecommand{setupprofiles}{stelprofielenin} \setinterfacecommand{setupprograms}{stelprogrammasin} \setinterfacecommand{setuppublications}{stelpublicatiesin} \setinterfacecommand{setupquote}{stelciterenin} \setinterfacecommand{setupreferencelist}{stelreferentielijstin} \setinterfacecommand{setupreferencing}{stelrefererenin} \setinterfacecommand{setupregister}{stelregisterin} \setinterfacecommand{setuprotate}{stelroterenin} \setinterfacecommand{setuprule}{stellijnin} \setinterfacecommand{setups}{instellingen} \setinterfacecommand{setupscreens}{stelrastersin} \setinterfacecommand{setupsection}{stelsectiein} \setinterfacecommand{setupsectionblock}{stelsectieblokin} \setinterfacecommand{setupsorting}{stelsorterenin} \setinterfacecommand{setupspacing}{stelspatieringin} \setinterfacecommand{setupstartstop}{stelstartstopin} \setinterfacecommand{setupstrut}{stelstrutin} \setinterfacecommand{setupsubpagenumber}{stelsubpaginanummerin} \setinterfacecommand{setupsymbolset}{stelsymboolsetin} \setinterfacecommand{setupsynchronization}{stelsynchronisatiein} \setinterfacecommand{setupsynchronizationbar}{stelsynchronisatiebalkin} \setinterfacecommand{setupsynonyms}{stelsynoniemenin} \setinterfacecommand{setupsystem}{stelsysteemin} \setinterfacecommand{setuptab}{steltabin} \setinterfacecommand{setuptables}{steltabellenin} \setinterfacecommand{setuptabulate}{steltabulatiein} \setinterfacecommand{setuptext}{steltekstin} \setinterfacecommand{setuptextposition}{steltekstpositiein} \setinterfacecommand{setuptextrules}{steltekstlijnenin} \setinterfacecommand{setuptexttexts}{stelteksttekstenin} \setinterfacecommand{setuptextvariable}{steltekstvariabelein} \setinterfacecommand{setupthinrules}{steldunnelijnenin} \setinterfacecommand{setuptolerance}{steltolerantiein} \setinterfacecommand{setuptop}{stelbovenin} \setinterfacecommand{setuptoptexts}{stelboventekstenin} \setinterfacecommand{setuptype}{steltypein} \setinterfacecommand{setuptyping}{steltypenin} \setinterfacecommand{setupunderbar}{stelonderstrepenin} \setinterfacecommand{setupurl}{stelurlin} \setinterfacecommand{setupversions}{stelversiesin} \setinterfacecommand{setupwhitespace}{stelwitruimtein} \setinterfacecommand{showbodyfont}{toonkorps} \setinterfacecommand{showbodyfontenvironment}{toonkorpsomgeving} \setinterfacecommand{showcolor}{toonkleur} \setinterfacecommand{showcolorgroup}{toonkleurgroep} \setinterfacecommand{showexternalfigures}{toonexternefiguren} \setinterfacecommand{showfields}{toonvelden} \setinterfacecommand{showframe}{toonkader} \setinterfacecommand{showgrid}{toongrid} \setinterfacecommand{showlayout}{toonlayout} \setinterfacecommand{showmakeup}{toonopmaak} \setinterfacecommand{showpalet}{toonpalet} \setinterfacecommand{showprint}{toonprint} \setinterfacecommand{showsetups}{tooninstellingen} \setinterfacecommand{showstruts}{toonstruts} \setinterfacecommand{showsymbolset}{toonsymboolset} \setinterfacecommand{smallcapped}{kap} \setinterfacecommand{someline}{eenregel} \setinterfacecommand{somewhere}{ergens} \setinterfacecommand{space}{spatie} \setinterfacecommand{splitfloat}{splitsplaatsblok} \setinterfacecommand{startalignment}{startuitlijnen} \setinterfacecommand{startbackground}{startachtergrond} \setinterfacecommand{startcoding}{startcodering} \setinterfacecommand{startcolor}{startkleur} \setinterfacecommand{startcolumnmakeup}{startkolomopmaak} \setinterfacecommand{startcolumns}{startkolommen} \setinterfacecommand{startcolumnset}{startkolomgroep} \setinterfacecommand{startcombination}{startcombinatie} \setinterfacecommand{startcomponent}{startonderdeel} \setinterfacecommand{startdocument}{startdocument} \setinterfacecommand{startenvironment}{startomgeving} \setinterfacecommand{startfigure}{startfiguur} \setinterfacecommand{startglobal}{startglobaal} \setinterfacecommand{startline}{startregel} \setinterfacecommand{startlinecorrection}{startregelcorrectie} \setinterfacecommand{startlinenumbering}{startregelnummeren} \setinterfacecommand{startlines}{startregels} \setinterfacecommand{startlocal}{startlokaal} \setinterfacecommand{startlocalfootnotes}{startlokalevoetnoten} \setinterfacecommand{startmakeup}{startopmaak} \setinterfacecommand{startmarginblock}{startmargeblok} \setinterfacecommand{startmarginrule}{startkantlijn} \setinterfacecommand{startnarrower}{startsmaller} \setinterfacecommand{startopposite}{startnaast} \setinterfacecommand{startoverlay}{startoverlay} \setinterfacecommand{startoverzicht}{startoverzicht} \setinterfacecommand{startpacked}{startopelkaar} \setinterfacecommand{startpositioning}{startpositioneren} \setinterfacecommand{startproduct}{startprodukt} \setinterfacecommand{startprofile}{startprofiel} \setinterfacecommand{startproject}{startprojekt} \setinterfacecommand{startquotation}{startcitaat} \setinterfacecommand{startraster}{startraster} \setinterfacecommand{startsymbolset}{startsymboolset} \setinterfacecommand{startsynchronization}{startsynchronisatie} \setinterfacecommand{starttable}{starttabel} \setinterfacecommand{starttables}{starttabellen} \setinterfacecommand{starttext}{starttekst} \setinterfacecommand{starttextrule}{starttekstlijn} \setinterfacecommand{startunpacked}{startvanelkaar} \setinterfacecommand{startversion}{startversie} \setinterfacecommand{stopalignment}{stopuitlijnen} \setinterfacecommand{stopbackground}{stopachtergrond} \setinterfacecommand{stopcoding}{stopcodering} \setinterfacecommand{stopcolor}{stopkleur} \setinterfacecommand{stopcolumnmakeup}{stopkolomopmaak} \setinterfacecommand{stopcolumns}{stopkolommen} \setinterfacecommand{stopcolumnset}{stopkolomgroep} \setinterfacecommand{stopcombination}{stopcombinatie} \setinterfacecommand{stopcomponent}{stoponderdeel} \setinterfacecommand{stopdocument}{stopdocument} \setinterfacecommand{stopenvironment}{stopomgeving} \setinterfacecommand{stopglobal}{stopglobaal} \setinterfacecommand{stopline}{stopregel} \setinterfacecommand{stoplinecorrection}{stopregelcorrectie} \setinterfacecommand{stoplinenumbering}{stopregelnummeren} \setinterfacecommand{stoplines}{stopregels} \setinterfacecommand{stoplocal}{stoplokaal} \setinterfacecommand{stoplocalfootnotes}{stoplokalevoetnoten} \setinterfacecommand{stopmakeup}{stopopmaak} \setinterfacecommand{stopmarginblock}{stopmargeblok} \setinterfacecommand{stopmarginrule}{stopkantlijn} \setinterfacecommand{stopnarrower}{stopsmaller} \setinterfacecommand{stopopposite}{stopnaast} \setinterfacecommand{stopoverlay}{stopoverlay} \setinterfacecommand{stopoverzicht}{stopoverzicht} \setinterfacecommand{stoppacked}{stopopelkaar} \setinterfacecommand{stoppositioning}{stoppositioneren} \setinterfacecommand{stopproduct}{stopprodukt} \setinterfacecommand{stopprofile}{stopprofiel} \setinterfacecommand{stopproject}{stopprojekt} \setinterfacecommand{stopquotation}{stopcitaat} \setinterfacecommand{stopraster}{stopraster} \setinterfacecommand{stopsynchronization}{stopsynchronisatie} \setinterfacecommand{stoptable}{stoptabel} \setinterfacecommand{stoptables}{stoptabellen} \setinterfacecommand{stoptext}{stoptekst} \setinterfacecommand{stoptextrule}{stoptekstlijn} \setinterfacecommand{stopunpacked}{stopvanelkaar} \setinterfacecommand{stopversion}{stopversie} \setinterfacecommand{stretched}{uitgerekt} \setinterfacecommand{subformulanumber}{subformulenummer} \setinterfacecommand{subpagenumber}{subpaginanummer} \setinterfacecommand{switchtobodyfont}{switchnaarkorps} \setinterfacecommand{switchtorawfont}{switchtorawfont} \setinterfacecommand{sym}{sym} \setinterfacecommand{symbol}{symbool} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{synchronisatiebalk} \setinterfacecommand{synchronize}{synchroniseer} \setinterfacecommand{tab}{tab} \setinterfacecommand{testcolumn}{testkolom} \setinterfacecommand{testpage}{testpagina} \setinterfacecommand{tex}{tex} \setinterfacecommand{textheight}{teksthoogte} \setinterfacecommand{textreference}{tekstreferentie} \setinterfacecommand{textrule}{tekstlijn} \setinterfacecommand{textvariable}{tekstvariabele} \setinterfacecommand{textwidth}{tekstbreedte} \setinterfacecommand{thinrule}{dunnelijn} \setinterfacecommand{thinrules}{dunnelijnen} \setinterfacecommand{tooltip}{suggestie} \setinterfacecommand{topdistance}{bovenafstand} \setinterfacecommand{topheight}{bovenhoogte} \setinterfacecommand{topspace}{kopwit} \setinterfacecommand{totalnumberofpages}{totaalaantalpaginas} \setinterfacecommand{translate}{vertaal} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{typ} \setinterfacecommand{type}{type} \setinterfacecommand{typebuffer}{typebuffer} \setinterfacecommand{typefile}{typefile} \setinterfacecommand{unitmeaning}{betekenis} \setinterfacecommand{unknown}{onbekend} \setinterfacecommand{useJSscripts}{gebruikJSscripts} \setinterfacecommand{useURL}{gebruikURL} \setinterfacecommand{useXMLfilter}{gebruikXMLfilter} \setinterfacecommand{useblocks}{gebruikblokken} \setinterfacecommand{usecommands}{gebruikcommandos} \setinterfacecommand{useencoding}{usecodering} \setinterfacecommand{useexternaldocument}{gebruikexterndocument} \setinterfacecommand{useexternalfigure}{gebruikexternfiguur} \setinterfacecommand{useexternalfile}{gebruikexternefile} \setinterfacecommand{useexternalfiles}{gebruikexternefiles} \setinterfacecommand{useexternalsoundtrack}{gebruikexterngeluidsfragment} \setinterfacecommand{usemodule}{gebruikmodule} \setinterfacecommand{usemodules}{gebruikmodules} \setinterfacecommand{usepath}{gebruikgebied} \setinterfacecommand{usereferences}{gebruikreferenties} \setinterfacecommand{usespecials}{gebruikspecials} \setinterfacecommand{usesymbols}{gebruiksymbolen} \setinterfacecommand{usetypescript}{gebruiktypescript} \setinterfacecommand{usetypescriptfile}{gebruiktypescriptfile} \setinterfacecommand{useurl}{gebruikurl} \setinterfacecommand{version}{versie} \setinterfacecommand{vl}{vl} \setinterfacecommand{weekday}{weekdag} \setinterfacecommand{whitespace}{witruimte} \setinterfacecommand{wordright}{woordrechts} \setinterfacecommand{writebetweenlist}{schrijftussenlijst} \setinterfacecommand{writetolist}{schrijfnaarlijst} \setinterfacecommand{writetoreferencelist}{schrijfnaarreferentielijst} \setinterfacecommand{writetoregister}{schrijfnaarregister} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/m-translate.mkiv0000644000175000017500000000520712130411274025007 0ustar norbertnorbert%D \module %D [ file=m-translate, %D version=2008.10.09, %D title=\CONTEXT\ Modules, %D subtitle=Translations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We can make this module more clever (wildcards and such) but since %D it's only a demo we stick to the simple case for now. After all, it's %D better to fix your source. \startluacode local translators = { } moduledata.translators = translators local compiled, list = nil, nil function translators.register(from,to) local l = lpeg.P(from)/to if not list then list = l else list = list + l end compiled = nil end function translators.translate(s) if list then if not compiled then compiled = lpeg.Cs((list + lpeg.P(1))^0) end return compiled:match(s) else return s end end local textlineactions = resolvers.openers.helpers.textlineactions utilities.sequencers.appendaction(textlineactions,"after","moduledata.translators.translate") function translators.enable() utilities.sequencers.enableaction(textlineactions,"moduledata.translators.translate") end function translators.disable() utilities.sequencers.disableaction(textlineactions,"moduledata.translators.translate") end function translators.reset(s) translators.enable() list, compiled = nil, nil end translators.disable() \stopluacode \unprotect \unexpanded\def\translateinput {\dodoubleargument\module_translate_input} \def\module_translate_input[#1][#2]% {\ctxlua{moduledata.translators.register(\!!bs#1\!!es,\!!bs#2\!!es)}} \unexpanded\def\resetinputtranslation {\ctxlua{moduledata.translators.reset()}} \unexpanded\def\enableinputtranslation {\ctxlua{moduledata.translators.enable()}} \unexpanded\def\disableinputtranslation {\ctxlua{moduledata.translators.disable()}} \unexpanded\def\readtranslatedfile#1% {\enableinputtranslation \readfile{#1}\donothing\donothing \disableinputtranslation} \protect \continueifinputfile{m-translate.mkiv} \starttext \translateinput[Moica][Mojca] % \translateinput[Idris][Idris (aka ادريس)] \translateinput[Idris][Idris (aka )] \enableinputtranslation Well, it's not that hard to satisfy Idris' and Moicas \TEX\ needs. \readtranslatedfile{tufte} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-num.mkii0000644000175000017500000002615511754241457024353 0ustar norbertnorbert%D \module %D [ file=supp-num, %D version=1998.05.15, %D title=\CONTEXT\ Support Macros, %D subtitle=Numbers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support Macros / Numbers} \unprotect %D \macros %D {digits, setdigitmode, setdigitsign} %D %D Depending on the digit mode the command \type {\digits} %D normalizes number patterns depending on the language set. %D %D \starttyping %D This will never be a \digits{1.000.000} seller. %D \stoptyping %D %D or %D %D \starttyping %D I will never grow longer than \digits 1.86 \Meter. %D \stoptyping %D %D The different modes are shown in: %D %D \startbuffer %D \setdigitmode 1 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 2 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 3 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 4 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 5 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \setdigitmode 6 \digits 12.345,90 \digits 12.345.000 \digits 1,23 %D \stopbuffer %D %D \typebuffer %D %D This is typset as: %D %D \startlines %D \getbuffer %D \stoplines %D %D The sign can be typeset as is or within the space of a %D digit. %D %D \startbuffer %D \setdigitsign 0 \digits +12.345,90 %D \setdigitmode 1 \digits +12.345,90 %D \setdigitmode 2 \digits +12.345,90 %D \setdigitmode 3 \digits +12.345,90 %D \stopbuffer %D %D \typebuffer %D %D This is typset as: %D %D \startlines %D \getbuffer %D \stoplines \chardef\digitoutputmode=1 % 0..6 \chardef\digitsignmode =0 % 0..3 \def\setdigitmode{\chardef\digitoutputmode} \def\setdigitsign{\chardef\digitsignmode} %D The digit modes are: %D %D \startitemize[packed] %D \item periods \& comma %D \item commas \& period %D \item thinmuskips \& comma %D \item thinmuskips \& period %D \item thickmuskips \& comma %D \item thickmuskips \& period %D \stopitemize \let\collecteddigits \empty \chardef\digitinputmode =1 \let\saveddigits \empty \chardef\skipdigit =0 \let\savedpowerdigits\empty \chardef\powerdigits =0 %D The first stage of the \type {\digit} macro takes care of %D the grouped call, the other branch handles the fuzzy %D delimited calls. \ifx\mbox\undefined \let\mbox\normalhbox \fi % \unexpanded\def\digits % {\bgroup\let~@\doifnextbgroupelse\dodigits\grabdigit} \unexpanded\def\digits {\bgroup \let~@% \doifnextbgroupelse\dodigits{\doifnextcharelse\normalmathshift\domathdigits\grabdigit}} \def\dodigits#1% {\grabdigit#1\relax} \def\domathdigits$#1$% {\mbox{\grabdigit#1\relax}} % adding $ $ goes wrong in tabulate \def\grabdigit {\futurelet\next\scandigit} %D Watch the test for \type {\nextobeyedline}, because the %D endofline token can be \type {\def'd}, not \type {\let}'d, %D we need to do an indirect test (see \type {verb-ini.tex}) %D for details. %D %D \starttyping %D \def ^^M{\obeyedline} %D \def\nextbeyedline{\obeyedline} %D \stoptyping \ifx\normalmathshift\undefined \let\normalmathshift=$ \fi \def\scandigit {\ifx\next\blankspace \let\next\handledigits \else\ifx\next\nextobeyedline % the indirect one \let\next\handledigits \else\ifx\next\bgroup \let\next\handledigits \else\ifx\next\egroup \let\next\handledigits \else\ifx\next\normalmathshift \let\next\handledigits \else \let\next\collectdigit \fi\fi\fi\fi\fi \next} %D We store the power||of||ten (to be signaled by \type {^}, %D \type {e} or~\type {E}) in a seperate macro so that we can %D typeset it in superscript. The space placeholders are %D replaced by a \type {@}. \def\savedigit#1#2% {\edef#1{#1\saveddigits#2}\let\saveddigits\empty} \long\def\collectdigit#1% {\ifx#1~% \savedigit\collecteddigits @% \else\if#1_% \savedigit\collecteddigits @% \else\if\noexpand#1\relax \let\grabdigit\handledigits \else\ifcase\powerdigits \if#1E% \chardef\powerdigits\plusone \else\if#1e% \chardef\powerdigits\plusone \else\if#1^% \chardef\powerdigits\plusone \else \savedigit\collecteddigits#1% %\doifnumberelse{#1} % {\savedigit\collecteddigits#1} % {\def\saveddigits{#1}}% \fi\fi\fi \else \savedigit\savedpowerdigits#1% %\doifnumberelse{#1} % {\savedigit\savedpowerdigits#1} % {\def\saveddigits{#1}}% \fi\fi\fi\fi \grabdigit} \let\handlemathdigits\firstofoneargument \let\handletextdigits\mathematics \def\handledigits {%\ifcase\powerdigits % \edef\collecteddigits{\collecteddigits\saveddigits}% %\else % \edef\savedpowerdigits{\savedpowerdigits\saveddigits}% %\fi \ifmmode \handlemathdigits{\dohandledigits}% \else \dontleavehmode\hbox{\handletextdigits{\dohandledigits}}% \fi \egroup} %D Although we could do with one pass, a second pass for %D handling the stored sequence is more readable. \ifnum\texengine=\luatexengine \def\dohandledigits {\mathcode`\,="002C \mathcode`\.="002E % pretty hard coded \expandafter\handletokens\collecteddigits\with\scandigits \ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi} \chardef\mathaxisfontid\zerocount \else \def\dohandledigits {\mathcode`\,="013B \mathcode`\.="013A % pretty hard coded \expandafter\handletokens\collecteddigits\with\scandigits \ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi} \chardef\mathaxisfontid\plustwo \fi \def\doscandigit#1% {\ifcase\skipdigit\@EA\hbox\else\@EA\hphantom\fi\bgroup \mathematics % brr, needed because of stored punctuation {\ifnum\digitinputmode=#1\relax \ifcase\digitoutputmode \or .% \or ,% \or \mskip\thinmuskip \or \mskip\thinmuskip \or \mskip\thickmuskip \or \mskip\thickmuskip \fi \else \ifodd\digitoutputmode,\else.\fi \fi}% \egroup} %D The signs can be made smaller and sqeezed into the width %D of a digit. Watch the \type {\mathaxisheight} trickery (this %D font related register stored the math axis). % 0,= % 0,== second = results in delta(00,=) % 0,- is invalid, should be = % 0,-- is invalid, should be == \def\digitzeroamount {\digitsgn\zeroamount \def\digitzeroamount {\hphantom {00\setbox\scratchbox\hbox{$\zeroamount$}% \hskip-\wd\scratchbox}% \let\digitzeroamount\empty}} \def\scandigits#1% {\if#1.\digitsep1\else \if#1,\digitsep2\else \if#1@\digitnop \else \if#1_\digitnop \else \if#1/\digitsgn{\hphantom{+}}\chardef\skipdigit0\else \if#1-\ifcase\skipdigit\digitsgn-\else \box\digitsepbox\digitzeroamount \fi\chardef\skipdigit0\else \if#1+\digitsgn+\chardef\skipdigit0\else \if#1=\box\digitsepbox\digitzeroamount \chardef\skipdigit0\else \if#1s\digitsgn{\hphantom{\positive}}\chardef\skipdigit0\else \if#1p\digitsgn\positive\chardef\skipdigit0\else \if#1m\digitsgn\negative\chardef\skipdigit0\else \if#1n\digitsgn\negative\chardef\skipdigit0\else \box\digitsepbox #1\chardef\skipdigit0\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} \newbox\digitsepbox \chardef\autodigitmode=1 \def\digitsep#1% {\ifcase\autodigitmode \doscandigit#1% \else \setbox\digitsepbox\hbox{\doscandigit#1}% \fi \chardef\skipdigit0\relax} % strange, does not work % % \def\digitnop % {\hphantom{\box\digitsepbox}% % \hphantom{0}\chardef\skipdigit1\relax} % % while this works \def\digitnop {\hbox{\hphantom{\box\digitsepbox}}% \hphantom{0}\chardef\skipdigit1\relax} % but this doesn't % % \def\digitnop % {\hphantom{\box\digitsepbox0}% % \chardef\skipdigit1\relax} \def\digitsgn#1% {\ifcase\digitsignmode#1\else \hbox {\setbox\scratchbox\hbox{0}% \scratchdimen\mathaxisheight\textfont\mathaxisfontid \def\digitsgn##1##2% {\advance\scratchdimen-\mathaxisheight##1\mathaxisfontid \raise\scratchdimen \hbox to \wd\scratchbox{\hss$##2#1$\hss}}% \ifcase\digitsignmode\or \digitsgn\textfont \textstyle \or \digitsgn\scriptfont \scriptstyle \or \digitsgn\scriptscriptfont\scriptscriptstyle\fi}% \fi} \ifx\undefined\zeroamount \def\zeroamount{-} \fi \ifx\undefined\positive \def\positive {+} \fi \ifx\undefined\negative \def\negative {-} \fi %D The digit parser handles a bunch of special characters as %D well as different formats. We strongly suggest you to use %D the grouped call. %D %D \starttabulate[|l|l|l|] %D \NC \type{.} \NC , . \NC comma or period \NC \NR %D \NC \type{,} \NC , . \NC comma or period \NC \NR %D \NC \type{@} \NC \NC invisible space \NC \NR %D \NC \type{_} \NC \NC invisible space \NC \NR %D \NC \type{/} \NC \NC invisible sign \NC \NR %D \NC \type{-} \NC $-$ \NC minus sign \NC \NR %D \NC \type{+} \NC $+$ \NC plus sign \NC \NR %D \NC \type{s} \NC \NC invisible high sign \NC \NR %D \NC \type{p} \NC $\positive$ \NC high plus sign \NC \NR %D \NC \type{m} \NC $\negative$ \NC high minus sign \NC \NR %D \NC \type{n} \NC $\negative$ \NC high minus (negative) sign \NC \NR %D \NC \type{=} \NC $\zeroamount$ \NC zero padding \NC \NR %D \stoptabulate %D %D These triggers are used in the following examples. %D %D \startbuffer %D \digits 12 %D \digits{~~~.~~~.~~~.68.712,34} %D \digits ~~~.~~~.~~~.68.712,34 %D \digits ___.___.111.68.712,34 %D \digits 111.111.111.68.712,34 %D \digits 12.345,90 %D \digits 12.345.000 %D \digits 12,34 %D \digits{392.857.230.68.712,34} %D {\digits1234} %D \digits{1234} %D \digits 1234\relax %D $\digits 123.222,00$ %D \digits 123.222,00 %D \digits 123.222,== %D \digits 123.222,00^10 %D \digits 123.222,00e10 %D \digits /123.222,00e-12 %D \digits -123.222,00e-12 %D \digits +123.222,00e-12 %D \digits n123.222,00e-12 %D \digits s123.222,00e-12 %D \digits p123.222,00e-12 %D \stopbuffer %D %D \typebuffer %D %D \startlines %D \getbuffer %D \stoplines %D \macros %D {Digits} %D %D We also permit: \let\Digits\digits %D These macros are complicated by the fact that we also %D have to support cases like: %D %D \starttyping %D {\digits1234} %D \digits{1234} %D \digits 1234\whatever %D $\digits 123.222,00$ %D \digits 123.222,00. %D \stoptyping %D %D The latter case shows us that trailing non digits are to %D be passed untreated. %D %D Another interesting case is: %D %D \starttyping %D \digits 123.222,00^10 %D \stoptyping %D %D The separator is defined as: % \def\digitpowerseparator% % {\cdot10} % {\times10} \def\digitpowerseparator {\ifx\collecteddigits\empty\else\cdot\fi10} %D \macros %D {digittemplate} %D %D Users can specify the way they enter those digits by saying %D something like: %D %D \starttyping %D \digittemplate 12.000.000,00 % \digittemplate ., %D \stoptyping \def\digittemplate #1 % {\chardef\digitinputmode\zerocount \handletokens#1\with\scandigittemplate} \def\scandigittemplate#1% {\if #1.\ifcase\digitinputmode\chardef\digitinputmode\plusone \fi% period \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode\plustwo \fi% comma \fi\fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-con.mkii0000644000175000017500000002505211754241457024341 0ustar norbertnorbert%D \module %D [ file=syst-con, %D version=2000.12.10, % actually very old -) %D title=\CONTEXT\ System Macros, %D subtitle=Conversions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 System Macros / Conversions} \unprotect %D When the number of conversions grew, it did no longer make %D sense to spread them over multiple files. So, instead of %D defining these in \type {font-ini}, we now have a dedicated %D module. \catcode127=12 % other, just to be sure %D \macros %D {lchexnumber,uchexnumber,lchexnumbers,uchexnumbers} %D %D In addition to the uppercase hex conversion, as needed in %D math families, we occasionally need a lowercase one, for %D instance when we want to compose gbsong fontnames. %D %D The ugly indirectness is needed to get rid of \TEX\ %D induced spaces and \type {\relax}'s. %D %D \starttyping %D [\uchexnumber{0}] %D [\uchexnumber\scratchcounter] %D [\uchexnumber\zerocount] %D [\uchexnumber{\number0}] %D [\uchexnumber{\number\scratchcounter}] %D [\uchexnumber{\number\zerocount}] %D [\uchexnumber{\the\scratchcounter}] %D [\uchexnumber{\the\zerocount}] %D [\expandafter\uchexnumber\expandafter{\number0}] %D [\expandafter\uchexnumber\expandafter{\number\scratchcounter}] %D [\expandafter\uchexnumber\expandafter{\number\zerocount}] %D [\expandafter\uchexnumber\expandafter{\the\scratchcounter}] %D [\expandafter\uchexnumber\expandafter{\the\zerocount}] %D \stoptyping %D %D These macros may look slow but are actually rather fast due to %D the fact that \TEX\ handles conditional pretty fast. We need %D a two step approach in order to stay relax clean in fully %D expandable macros. \def\dolchexnumber#1\relax {\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or a\or b\or c\or d\or e\or f\else 0\fi} \def\douchexnumber#1\relax {\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or A\or B\or C\or D\or E\or F\else 0\fi} \def\dolchexnumbers#1\relax {\ifcase#1 00\or 01\or 02\or 03\or 04\or 05\or 06\or 07\or 08\or 09\or 0a\or 0b\or 0c\or 0d\or 0e\or 0f\or 10\or 11\or 12\or 13\or 14\or 15\or 16\or 17\or 18\or 19\or 1a\or 1b\or 1c\or 1d\or 1e\or 1f\or 20\or 21\or 22\or 23\or 24\or 25\or 26\or 27\or 28\or 29\or 2a\or 2b\or 2c\or 2d\or 2e\or 2f\or 30\or 31\or 32\or 33\or 34\or 35\or 36\or 37\or 38\or 39\or 3a\or 3b\or 3c\or 3d\or 3e\or 3f\or 40\or 41\or 42\or 43\or 44\or 45\or 46\or 47\or 48\or 49\or 4a\or 4b\or 4c\or 4d\or 4e\or 4f\or 50\or 51\or 52\or 53\or 54\or 55\or 56\or 57\or 58\or 59\or 5a\or 5b\or 5c\or 5d\or 5e\or 5f\or 60\or 61\or 62\or 63\or 64\or 65\or 66\or 67\or 68\or 69\or 6a\or 6b\or 6c\or 6d\or 6e\or 6f\or 70\or 71\or 72\or 73\or 74\or 75\or 76\or 77\or 78\or 79\or 7a\or 7b\or 7c\or 7d\or 7e\or 7f\or 80\or 81\or 82\or 83\or 84\or 85\or 86\or 87\or 88\or 89\or 8a\or 8b\or 8c\or 8d\or 8e\or 8f\or 90\or 91\or 92\or 93\or 94\or 95\or 96\or 97\or 98\or 99\or 9a\or 9b\or 9c\or 9d\or 9e\or 9f\or a0\or a1\or a2\or a3\or a4\or a5\or a6\or a7\or a8\or a9\or aa\or ab\or ac\or ad\or ae\or af\or b0\or b1\or b2\or b3\or b4\or b5\or b6\or b7\or b8\or b9\or ba\or bb\or bc\or bd\or be\or bf\or c0\or c1\or c2\or c3\or c4\or c5\or c6\or c7\or c8\or c9\or ca\or cb\or cc\or cd\or ce\or cf\or d0\or d1\or d2\or d3\or d4\or d5\or d6\or d7\or d8\or d9\or da\or db\or dc\or dd\or de\or df\or e0\or e1\or e2\or e3\or e4\or e5\or e6\or e7\or e8\or e9\or ea\or eb\or ec\or ed\or ee\or ef\or f0\or f1\or f2\or f3\or f4\or f5\or f6\or f7\or f8\or f9\or fa\or fb\or fc\or fd\or fe\or ff\fi} \def\douchexnumbers#1\relax {\ifcase#1 00\or 01\or 02\or 03\or 04\or 05\or 06\or 07\or 08\or 09\or 0A\or 0B\or 0C\or 0D\or 0E\or 0F\or 10\or 11\or 12\or 13\or 14\or 15\or 16\or 17\or 18\or 19\or 1A\or 1B\or 1C\or 1D\or 1E\or 1F\or 20\or 21\or 22\or 23\or 24\or 25\or 26\or 27\or 28\or 29\or 2A\or 2B\or 2C\or 2D\or 2E\or 2F\or 30\or 31\or 32\or 33\or 34\or 35\or 36\or 37\or 38\or 39\or 3A\or 3B\or 3C\or 3D\or 3E\or 3F\or 40\or 41\or 42\or 43\or 44\or 45\or 46\or 47\or 48\or 49\or 4A\or 4B\or 4C\or 4D\or 4E\or 4F\or 50\or 51\or 52\or 53\or 54\or 55\or 56\or 57\or 58\or 59\or 5A\or 5B\or 5C\or 5D\or 5E\or 5F\or 60\or 61\or 62\or 63\or 64\or 65\or 66\or 67\or 68\or 69\or 6A\or 6B\or 6C\or 6D\or 6E\or 6F\or 70\or 71\or 72\or 73\or 74\or 75\or 76\or 77\or 78\or 79\or 7A\or 7B\or 7C\or 7D\or 7E\or 7F\or 80\or 81\or 82\or 83\or 84\or 85\or 86\or 87\or 88\or 89\or 8A\or 8B\or 8C\or 8D\or 8E\or 8F\or 90\or 91\or 92\or 93\or 94\or 95\or 96\or 97\or 98\or 99\or 9A\or 9B\or 9C\or 9D\or 9E\or 9F\or A0\or A1\or A2\or A3\or A4\or A5\or A6\or A7\or A8\or A9\or AA\or AB\or AC\or AD\or AE\or AF\or B0\or B1\or B2\or B3\or B4\or B5\or B6\or B7\or B8\or B9\or BA\or BB\or BC\or BD\or BE\or BF\or C0\or C1\or C2\or C3\or C4\or C5\or C6\or C7\or C8\or C9\or CA\or CB\or CC\or CD\or CE\or CF\or D0\or D1\or D2\or D3\or D4\or D5\or D6\or D7\or D8\or D9\or DA\or DB\or DC\or DD\or DE\or DF\or E0\or E1\or E2\or E3\or E4\or E5\or E6\or E7\or E8\or E9\or EA\or EB\or EC\or ED\or EE\or EF\or F0\or F1\or F2\or F3\or F4\or F5\or F6\or F7\or F8\or F9\or FA\or FB\or FC\or FD\or FE\or FF\fi} \def\lchexnumber #1{\@EA\dolchexnumber \number#1\relax} \def\uchexnumber #1{\@EA\douchexnumber \number#1\relax} \def\lchexnumbers#1{\@EA\dolchexnumbers\number#1\relax} \def\uchexnumbers#1{\@EA\douchexnumbers\number#1\relax} \let\hexnumber\uchexnumber %D \macros %D {octnumber} %D %D For unicode remapping purposes, we need octal numbers. \def\dooctnumber#1\relax {\ifcase#1 000\or 001\or 002\or 003\or 004\or 005\or 006\or 007\or 010\or 011\or 012\or 013\or 014\or 015\or 016\or 017\or 020\or 021\or 022\or 023\or 024\or 025\or 026\or 027\or 030\or 031\or 032\or 033\or 034\or 035\or 036\or 037\or 040\or 041\or 042\or 043\or 044\or 045\or 046\or 047\or 050\or 051\or 052\or 053\or 054\or 055\or 056\or 057\or 060\or 061\or 062\or 063\or 064\or 065\or 066\or 067\or 070\or 071\or 072\or 073\or 074\or 075\or 076\or 077\or 100\or 101\or 102\or 103\or 104\or 105\or 106\or 107\or 110\or 111\or 112\or 113\or 114\or 115\or 116\or 117\or 120\or 121\or 122\or 123\or 124\or 125\or 126\or 127\or 130\or 131\or 132\or 133\or 134\or 135\or 136\or 137\or 140\or 141\or 142\or 143\or 144\or 145\or 146\or 147\or 150\or 151\or 152\or 153\or 154\or 155\or 156\or 157\or 160\or 161\or 162\or 163\or 164\or 165\or 166\or 167\or 170\or 171\or 172\or 173\or 174\or 175\or 176\or 177\or 200\or 201\or 202\or 203\or 204\or 205\or 206\or 207\or 210\or 211\or 212\or 213\or 214\or 215\or 216\or 217\or 220\or 221\or 222\or 223\or 224\or 225\or 226\or 227\or 230\or 231\or 232\or 233\or 234\or 235\or 236\or 237\or 240\or 241\or 242\or 243\or 244\or 245\or 246\or 247\or 250\or 251\or 252\or 253\or 254\or 255\or 256\or 257\or 260\or 261\or 262\or 263\or 264\or 265\or 266\or 267\or 270\or 271\or 272\or 273\or 274\or 275\or 276\or 277\or 300\or 301\or 302\or 303\or 304\or 305\or 306\or 307\or 310\or 311\or 312\or 313\or 314\or 315\or 316\or 317\or 320\or 321\or 322\or 323\or 324\or 325\or 326\or 327\or 330\or 331\or 332\or 333\or 334\or 335\or 336\or 337\or 340\or 341\or 342\or 343\or 344\or 345\or 346\or 347\or 350\or 351\or 352\or 353\or 354\or 355\or 356\or 357\or 360\or 361\or 362\or 363\or 364\or 365\or 366\or 367\or 370\or 371\or 372\or 373\or 374\or 375\or 376\or 377\fi} \def\octnumber#1{\@EA\dooctnumber\number#1\relax} %D \macros %D {twodigits, threedigits} %D %D These macros provides two or three digits always: \def\twodigits #1{\ifnum #1<10 0\fi\number#1} \def\threedigits#1{\ifnum#1<100 \ifnum#1<10 0\fi0\fi\number#1} %D \macros{modulonumber} %D %D In the conversion macros described in \type {core-con} we %D need a wrap||around method. The following solution is %D provided by Taco. %D %D The \type {modulonumber} macro expands to the mathematical %D modulo of a positive integer. It is crucial for it's %D application that this macro is fully exandable. %D %D The expression inside the \type {\numexpr} itself is %D somewhat bizarre because \ETEX\ uses a rounding %D division instead of truncation. If \ETEX's division %D would have behaved like \TEX's normal\type{\divide}, then %D the expression could have been somewhat simpler, like %D \type {#2-(#2/#1)*#1}. This works just as well, but a bit %D more complex. \def\modulonumber#1#2% {\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} %D \macros{modulatednumber} %D %D Modulo numbers run from zero to one less than the limit, %D but for conversion sets, we need a value between 1 and the %D limit. The \type{\modulatednumber} arranges that. This %D macro also needs to be fully expandable, resulting in %D two \type{\numexpr}s. \def\modulatednumber#1#2% {\ifnum\the\numexpr\modulonumber{#1}{#2}\relax=0 #1% \else \the\numexpr\modulonumber{#1}{#2}\relax \fi} %D \macros %D {hexstringtonumber} %D %D This macro converts a two character hexadecimal number into %D a decimal number, thereby taking care of lowercase characters %D as well. \dostepwiserecurse{0}{9}{1}{\setevalue{@@uc@@\recurselevel}{\recurselevel}} \setvalue{@@uc@@a}{A} \setvalue{@@uc@@A}{A} \setvalue{@@uc@@b}{B} \setvalue{@@uc@@B}{B} \setvalue{@@uc@@c}{C} \setvalue{@@uc@@C}{C} \setvalue{@@uc@@d}{D} \setvalue{@@uc@@D}{D} \setvalue{@@uc@@e}{E} \setvalue{@@uc@@E}{E} \setvalue{@@uc@@f}{F} \setvalue{@@uc@@F}{F} \def\hexstringtonumber#1% {FF} {\dohexstringtonumber#1} \def\dohexstringtonumber#1#2% FF {"\csname @@uc@@#1\endcsname\csname @@uc@@#2\endcsname} %D \macros %D {rawcharacter} %D %D The next conversion macro produces raw characters. We have to %D construct the macro in a special way to avoid problems with %D characters with special meanings. So, we revert to the %D lowercase conversion trick to bypass \TEX's input parser. %D %D This macro can be used to produce proper 8 bit characters %D that we sometimes need in backends and round||trips. \bgroup \catcode`\^^@=12 % ascii null == ignored in plain \catcode`\^^?=12 % ascii delete == invalid in plain \let\or\relax \xdef\rawcharacter{ ^^00\or} \dorecurse{255} {\lccode`a=\recurselevel \lowercase{\xdef\rawcharacter{\rawcharacter \string a\or}}} % string is needed for XeTeX \@EA\gdef\@EA\rawcharacter\@EA#\@EA1\@EA {\@EA\ifcase\@EA#\@EA1\rawcharacter\fi} \egroup \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xetx-cls.mkii0000644000175000017500000005134211244221744024321 0ustar norbertnorbert% filename : xetx-cls.tex % comment : generated by mtxrun --script chars --xtx % author : Hans Hagen, PRAGMA-ADE, Hasselt NL % copyright: PRAGMA ADE / ConTeXt Development Team % license : see context related readme files % some character classes for xetex; seems to be rather hard coded, these numbers % and also a mix of several classes; here we do linebreaks \defineXTXcharinjectionclass[lb:cl] \defineXTXcharinjectionclass[lb:ex] \defineXTXcharinjectionclass[lb:ns] \defineXTXcharinjectionclass[lb:id] \defineXTXcharinjectionclass[lb:op] \defineXTXcharinjectionclass[lb:cm] \defineXTXcharinjectionclass[lb:is] \dofastrecurse{"00000}{"00008}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0000E}{"0001F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00021}{lb:ex} \dosetXTXcharacterclass{"00028}{lb:op} \dosetXTXcharacterclass{"00029}{lb:cl} \dosetXTXcharacterclass{"0002C}{lb:is} \dosetXTXcharacterclass{"0002E}{lb:is} \dofastrecurse{"0003A}{"0003B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:is}} \dosetXTXcharacterclass{"0003F}{lb:ex} \dosetXTXcharacterclass{"0005B}{lb:op} \dosetXTXcharacterclass{"0005D}{lb:cl} \dosetXTXcharacterclass{"0007B}{lb:op} \dosetXTXcharacterclass{"0007D}{lb:cl} \dofastrecurse{"0007F}{"00084}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00086}{"0009F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00300}{"0034E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00350}{"0035B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00363}{"0036F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"0037E}{lb:is} \dofastrecurse{"00483}{"00489}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00589}{lb:is} \dofastrecurse{"00591}{"005BD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"005BF}{lb:cm} \dofastrecurse{"005C1}{"005C2}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"005C4}{"005C5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"005C6}{lb:ex} \dosetXTXcharacterclass{"005C7}{lb:cm} \dosetXTXcharacterclass{"0060C}{lb:ex} \dosetXTXcharacterclass{"0060D}{lb:is} \dofastrecurse{"00610}{"00615}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0061B}{"0061F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dofastrecurse{"0064B}{"0065E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"0066A}{lb:ex} \dosetXTXcharacterclass{"00670}{lb:cm} \dosetXTXcharacterclass{"006D4}{lb:ex} \dofastrecurse{"006D6}{"006DC}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"006DE}{"006E4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"006E7}{"006E8}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"006EA}{"006ED}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00711}{lb:cm} \dofastrecurse{"00730}{"0074A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"007A6}{"007B0}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"007EB}{"007F3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"007F8}{lb:is} \dosetXTXcharacterclass{"007F9}{lb:ex} \dofastrecurse{"00901}{"00903}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"0093C}{lb:cm} \dofastrecurse{"0093E}{"0094D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00951}{"00954}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00962}{"00963}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00981}{"00983}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"009BC}{lb:cm} \dofastrecurse{"009BE}{"009CD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"009D7}{lb:cm} \dofastrecurse{"009E2}{"009E3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00A01}{"00A03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00A3C}{"00A4D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00A70}{"00A71}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00A81}{"00A83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00ABC}{lb:cm} \dofastrecurse{"00ABE}{"00ACD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00AE2}{"00AE3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00B01}{"00B03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00B3C}{lb:cm} \dofastrecurse{"00B3E}{"00B57}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00B82}{lb:cm} \dofastrecurse{"00BBE}{"00BD7}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00C01}{"00C03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00C3E}{"00C56}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00C82}{"00C83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00CBC}{lb:cm} \dofastrecurse{"00CBE}{"00CD6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00CE2}{"00CE3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00D02}{"00D03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00D3E}{"00D57}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00D82}{"00D83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00DCA}{"00DF3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00F0D}{"00F11}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dosetXTXcharacterclass{"00F14}{lb:ex} \dofastrecurse{"00F18}{"00F19}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00F35}{lb:cm} \dosetXTXcharacterclass{"00F37}{lb:cm} \dosetXTXcharacterclass{"00F39}{lb:cm} \dosetXTXcharacterclass{"00F3A}{lb:op} \dosetXTXcharacterclass{"00F3B}{lb:cl} \dosetXTXcharacterclass{"00F3C}{lb:op} \dosetXTXcharacterclass{"00F3D}{lb:cl} \dofastrecurse{"00F3E}{"00F3F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00F71}{"00F7E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00F80}{"00F84}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00F86}{"00F87}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"00F90}{"00FBC}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"00FC6}{lb:cm} \dosetXTXcharacterclass{"0135F}{lb:cm} \dosetXTXcharacterclass{"0169B}{lb:op} \dosetXTXcharacterclass{"0169C}{lb:cl} \dofastrecurse{"01712}{"01714}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01732}{"01734}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01752}{"01753}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01772}{"01773}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"017D6}{lb:ns} \dofastrecurse{"0180B}{"0180D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"018A9}{lb:cm} \dofastrecurse{"01920}{"0193B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01944}{"01945}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dofastrecurse{"01A17}{"01A1B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01B00}{"01B04}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01B34}{"01B44}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01B6B}{"01B73}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"01DC0}{"01DFF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0200C}{"0200F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"0201A}{lb:op} \dosetXTXcharacterclass{"0201E}{lb:op} \dofastrecurse{"0202A}{"0202E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0203C}{"0203D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dosetXTXcharacterclass{"02044}{lb:is} \dosetXTXcharacterclass{"02045}{lb:op} \dosetXTXcharacterclass{"02046}{lb:cl} \dofastrecurse{"02047}{"02049}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"0206A}{"0206F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"0207D}{lb:op} \dosetXTXcharacterclass{"0207E}{lb:cl} \dosetXTXcharacterclass{"0208D}{lb:op} \dosetXTXcharacterclass{"0208E}{lb:cl} \dofastrecurse{"020D0}{"020EF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"02329}{lb:op} \dosetXTXcharacterclass{"0232A}{lb:cl} \dofastrecurse{"02762}{"02763}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dosetXTXcharacterclass{"02768}{lb:op} \dosetXTXcharacterclass{"02769}{lb:cl} \dosetXTXcharacterclass{"0276A}{lb:op} \dosetXTXcharacterclass{"0276B}{lb:cl} \dosetXTXcharacterclass{"0276C}{lb:op} \dosetXTXcharacterclass{"0276D}{lb:cl} \dosetXTXcharacterclass{"0276E}{lb:op} \dosetXTXcharacterclass{"0276F}{lb:cl} \dosetXTXcharacterclass{"02770}{lb:op} \dosetXTXcharacterclass{"02771}{lb:cl} \dosetXTXcharacterclass{"02772}{lb:op} \dosetXTXcharacterclass{"02773}{lb:cl} \dosetXTXcharacterclass{"02774}{lb:op} \dosetXTXcharacterclass{"02775}{lb:cl} \dosetXTXcharacterclass{"027C5}{lb:op} \dosetXTXcharacterclass{"027C6}{lb:cl} \dosetXTXcharacterclass{"027E6}{lb:op} \dosetXTXcharacterclass{"027E7}{lb:cl} \dosetXTXcharacterclass{"027E8}{lb:op} \dosetXTXcharacterclass{"027E9}{lb:cl} \dosetXTXcharacterclass{"027EA}{lb:op} \dosetXTXcharacterclass{"027EB}{lb:cl} \dosetXTXcharacterclass{"02983}{lb:op} \dosetXTXcharacterclass{"02984}{lb:cl} \dosetXTXcharacterclass{"02985}{lb:op} \dosetXTXcharacterclass{"02986}{lb:cl} \dosetXTXcharacterclass{"02987}{lb:op} \dosetXTXcharacterclass{"02988}{lb:cl} \dosetXTXcharacterclass{"02989}{lb:op} \dosetXTXcharacterclass{"0298A}{lb:cl} \dosetXTXcharacterclass{"0298B}{lb:op} \dosetXTXcharacterclass{"0298C}{lb:cl} \dosetXTXcharacterclass{"0298D}{lb:op} \dosetXTXcharacterclass{"0298E}{lb:cl} \dosetXTXcharacterclass{"0298F}{lb:op} \dosetXTXcharacterclass{"02990}{lb:cl} \dosetXTXcharacterclass{"02991}{lb:op} \dosetXTXcharacterclass{"02992}{lb:cl} \dosetXTXcharacterclass{"02993}{lb:op} \dosetXTXcharacterclass{"02994}{lb:cl} \dosetXTXcharacterclass{"02995}{lb:op} \dosetXTXcharacterclass{"02996}{lb:cl} \dosetXTXcharacterclass{"02997}{lb:op} \dosetXTXcharacterclass{"02998}{lb:cl} \dosetXTXcharacterclass{"029D8}{lb:op} \dosetXTXcharacterclass{"029D9}{lb:cl} \dosetXTXcharacterclass{"029DA}{lb:op} \dosetXTXcharacterclass{"029DB}{lb:cl} \dosetXTXcharacterclass{"029FC}{lb:op} \dosetXTXcharacterclass{"029FD}{lb:cl} \dofastrecurse{"02E80}{"03000}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"03001}{"03002}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}} \dofastrecurse{"03003}{"03004}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"03005}{lb:ns} \dofastrecurse{"03006}{"03007}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"03008}{lb:op} \dosetXTXcharacterclass{"03009}{lb:cl} \dosetXTXcharacterclass{"0300A}{lb:op} \dosetXTXcharacterclass{"0300B}{lb:cl} \dosetXTXcharacterclass{"0300C}{lb:op} \dosetXTXcharacterclass{"0300D}{lb:cl} \dosetXTXcharacterclass{"0300E}{lb:op} \dosetXTXcharacterclass{"0300F}{lb:cl} \dosetXTXcharacterclass{"03010}{lb:op} \dosetXTXcharacterclass{"03011}{lb:cl} \dofastrecurse{"03012}{"03013}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"03014}{lb:op} \dosetXTXcharacterclass{"03015}{lb:cl} \dosetXTXcharacterclass{"03016}{lb:op} \dosetXTXcharacterclass{"03017}{lb:cl} \dosetXTXcharacterclass{"03018}{lb:op} \dosetXTXcharacterclass{"03019}{lb:cl} \dosetXTXcharacterclass{"0301A}{lb:op} \dosetXTXcharacterclass{"0301B}{lb:cl} \dosetXTXcharacterclass{"0301C}{lb:ns} \dosetXTXcharacterclass{"0301D}{lb:op} \dofastrecurse{"0301E}{"0301F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}} \dofastrecurse{"03020}{"03029}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"0302A}{"0302F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"03030}{"0303A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"0303B}{"0303C}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"0303D}{"0303F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"03041}{lb:ns} \dosetXTXcharacterclass{"03042}{lb:id} \dosetXTXcharacterclass{"03043}{lb:ns} \dosetXTXcharacterclass{"03044}{lb:id} \dosetXTXcharacterclass{"03045}{lb:ns} \dosetXTXcharacterclass{"03046}{lb:id} \dosetXTXcharacterclass{"03047}{lb:ns} \dosetXTXcharacterclass{"03048}{lb:id} \dosetXTXcharacterclass{"03049}{lb:ns} \dofastrecurse{"0304A}{"03062}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"03063}{lb:ns} \dofastrecurse{"03064}{"03082}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"03083}{lb:ns} \dosetXTXcharacterclass{"03084}{lb:id} \dosetXTXcharacterclass{"03085}{lb:ns} \dosetXTXcharacterclass{"03086}{lb:id} \dosetXTXcharacterclass{"03087}{lb:ns} \dofastrecurse{"03088}{"0308D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0308E}{lb:ns} \dofastrecurse{"0308F}{"03094}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"03095}{"03096}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"03099}{"0309A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0309B}{"0309E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dosetXTXcharacterclass{"0309F}{lb:id} \dofastrecurse{"030A0}{"030A1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dosetXTXcharacterclass{"030A2}{lb:id} \dosetXTXcharacterclass{"030A3}{lb:ns} \dosetXTXcharacterclass{"030A4}{lb:id} \dosetXTXcharacterclass{"030A5}{lb:ns} \dosetXTXcharacterclass{"030A6}{lb:id} \dosetXTXcharacterclass{"030A7}{lb:ns} \dosetXTXcharacterclass{"030A8}{lb:id} \dosetXTXcharacterclass{"030A9}{lb:ns} \dofastrecurse{"030AA}{"030C2}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"030C3}{lb:ns} \dofastrecurse{"030C4}{"030E2}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"030E3}{lb:ns} \dosetXTXcharacterclass{"030E4}{lb:id} \dosetXTXcharacterclass{"030E5}{lb:ns} \dosetXTXcharacterclass{"030E6}{lb:id} \dosetXTXcharacterclass{"030E7}{lb:ns} \dofastrecurse{"030E8}{"030ED}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"030EE}{lb:ns} \dofastrecurse{"030EF}{"030F4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"030F5}{"030F6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"030F7}{"030FA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"030FB}{"030FE}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"030FF}{"031CF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"031F0}{"031FF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"03200}{"03400}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"04E00}{"0A014}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0A015}{lb:ns} \dofastrecurse{"0A016}{"0A4C6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0A802}{lb:cm} \dosetXTXcharacterclass{"0A806}{lb:cm} \dosetXTXcharacterclass{"0A80B}{lb:cm} \dofastrecurse{"0A823}{"0A827}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0A876}{"0A877}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dofastrecurse{"0F900}{"0FAD9}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FB1E}{lb:cm} \dosetXTXcharacterclass{"0FD3E}{lb:op} \dosetXTXcharacterclass{"0FD3F}{lb:cl} \dofastrecurse{"0FE00}{"0FE0F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dosetXTXcharacterclass{"0FE10}{lb:is} \dofastrecurse{"0FE11}{"0FE12}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}} \dofastrecurse{"0FE13}{"0FE14}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:is}} \dofastrecurse{"0FE15}{"0FE16}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dosetXTXcharacterclass{"0FE17}{lb:op} \dosetXTXcharacterclass{"0FE18}{lb:cl} \dofastrecurse{"0FE20}{"0FE23}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"0FE30}{"0FE34}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FE35}{lb:op} \dosetXTXcharacterclass{"0FE36}{lb:cl} \dosetXTXcharacterclass{"0FE37}{lb:op} \dosetXTXcharacterclass{"0FE38}{lb:cl} \dosetXTXcharacterclass{"0FE39}{lb:op} \dosetXTXcharacterclass{"0FE3A}{lb:cl} \dosetXTXcharacterclass{"0FE3B}{lb:op} \dosetXTXcharacterclass{"0FE3C}{lb:cl} \dosetXTXcharacterclass{"0FE3D}{lb:op} \dosetXTXcharacterclass{"0FE3E}{lb:cl} \dosetXTXcharacterclass{"0FE3F}{lb:op} \dosetXTXcharacterclass{"0FE40}{lb:cl} \dosetXTXcharacterclass{"0FE41}{lb:op} \dosetXTXcharacterclass{"0FE42}{lb:cl} \dosetXTXcharacterclass{"0FE43}{lb:op} \dosetXTXcharacterclass{"0FE44}{lb:cl} \dofastrecurse{"0FE45}{"0FE46}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FE47}{lb:op} \dosetXTXcharacterclass{"0FE48}{lb:cl} \dofastrecurse{"0FE49}{"0FE4F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FE50}{lb:cl} \dosetXTXcharacterclass{"0FE51}{lb:id} \dosetXTXcharacterclass{"0FE52}{lb:cl} \dofastrecurse{"0FE54}{"0FE55}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"0FE56}{"0FE57}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}} \dosetXTXcharacterclass{"0FE58}{lb:id} \dosetXTXcharacterclass{"0FE59}{lb:op} \dosetXTXcharacterclass{"0FE5A}{lb:cl} \dosetXTXcharacterclass{"0FE5B}{lb:op} \dosetXTXcharacterclass{"0FE5C}{lb:cl} \dosetXTXcharacterclass{"0FE5D}{lb:op} \dosetXTXcharacterclass{"0FE5E}{lb:cl} \dofastrecurse{"0FE5F}{"0FE68}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FE6B}{lb:id} \dosetXTXcharacterclass{"0FF01}{lb:ex} \dofastrecurse{"0FF02}{"0FF03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"0FF06}{"0FF07}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FF08}{lb:op} \dosetXTXcharacterclass{"0FF09}{lb:cl} \dofastrecurse{"0FF0A}{"0FF0B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FF0C}{lb:cl} \dosetXTXcharacterclass{"0FF0D}{lb:id} \dosetXTXcharacterclass{"0FF0E}{lb:cl} \dofastrecurse{"0FF0F}{"0FF19}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"0FF1A}{"0FF1B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"0FF1C}{"0FF1E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FF1F}{lb:ex} \dofastrecurse{"0FF20}{"0FF3A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FF3B}{lb:op} \dosetXTXcharacterclass{"0FF3C}{lb:id} \dosetXTXcharacterclass{"0FF3D}{lb:cl} \dofastrecurse{"0FF3E}{"0FF5A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dosetXTXcharacterclass{"0FF5B}{lb:op} \dosetXTXcharacterclass{"0FF5C}{lb:id} \dosetXTXcharacterclass{"0FF5D}{lb:cl} \dosetXTXcharacterclass{"0FF5E}{lb:id} \dosetXTXcharacterclass{"0FF5F}{lb:op} \dofastrecurse{"0FF60}{"0FF61}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}} \dosetXTXcharacterclass{"0FF62}{lb:op} \dofastrecurse{"0FF63}{"0FF64}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}} \dosetXTXcharacterclass{"0FF65}{lb:ns} \dofastrecurse{"0FF67}{"0FF70}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"0FF9E}{"0FF9F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}} \dofastrecurse{"0FFE2}{"0FFE4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"0FFF9}{"0FFFB}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"10A01}{"10A0F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"10A38}{"10A3F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"1D165}{"1D169}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"1D16D}{"1D182}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"1D185}{"1D18B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"1D1AA}{"1D1AD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"1D242}{"1D244}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"20000}{"2FA1D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"E0001}{"E01EF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}} \dofastrecurse{"03400}{"04DB5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"04E00}{"09FBB}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \dofastrecurse{"20000}{"2A6D6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/char-utf.lua0000644000175000017500000004355512130411274024114 0ustar norbertnorbertif not modules then modules = { } end modules ['char-utf'] = { version = 1.001, comment = "companion to char-utf.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

When a sequence of characters enters the application, it may be neccessary to collapse subsequences into their composed variant.

This module implements methods for collapsing and expanding sequences. We also provide means to deal with characters that are special to as well as 8-bit characters that need to end up in special kinds of output (for instance ).

We implement these manipulations as filters. One can run multiple filters over a string.

--ldx]]-- local concat, gmatch, gsub, find = table.concat, string.gmatch, string.gsub, string.find local utfchar, utfbyte, utfcharacters, utfvalues = utf.char, utf.byte, utf.characters, utf.values local allocate = utilities.storage.allocate local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local charfromnumber = characters.fromnumber -- todo: trackers -- graphemes: basic symbols characters = characters or { } local characters = characters characters.graphemes = allocate() local graphemes = characters.graphemes characters.combined = allocate() local combined = characters.combined characters.decomposed = allocate() local decomposed = characters.decomposed characters.mathpairs = allocate() local mathpairs = characters.mathpairs characters.filters = allocate() local filters = characters.filters filters.utf = filters.utf or { } local utffilters = characters.filters.utf -- is characters.combined cached? --[[ldx--

It only makes sense to collapse at runtime, since we don't expect source code to depend on collapsing.

--ldx]]-- -- for the moment, will be entries in char-def.lua local decomposed = allocate { ["IJ"] = "IJ", ["ij"] = "ij", ["և"] = "եւ", ["ff"] = "ff", ["fi"] = "fi", ["fl"] = "fl", ["ffi"] = "ffi", ["ffl"] = "ffl", ["ſt"] = "ſt", ["st"] = "st", ["ﬓ"] = "մն", ["ﬔ"] = "մե", ["ﬕ"] = "մի", ["ﬖ"] = "վն", ["ﬗ"] = "մխ", } characters.decomposed = decomposed local function initialize() -- maybe only 'mn' local data = characters.data for unicode, v in next, data do -- using vs and first testing for length is faster (.02->.01 s) local vs = v.specials local vc = vs and #vs == 3 and vs[1] if vc == "char" then local one, two = vs[2], vs[3] if data[two].category == "mn" then local cgf = combined[one] if not cgf then cgf = { [two] = unicode } combined[one] = cgf else cgf[two] = unicode end end local first, second, combination = utfchar(one), utfchar(two), utfchar(unicode) local cgf = graphemes[first] if not cgf then cgf = { [second] = combination } graphemes[first] = cgf else cgf[second] = combination end if v.mathclass or v.mathspec then local mps = mathpairs[two] if not mps then mps = { [one] = unicode } mathpairs[two] = mps else mps[one] = unicode -- here unicode end local mps = mathpairs[second] if not mps then mps = { [first] = combination } mathpairs[second] = mps else mps[first] = combination end end -- elseif vc == "compat" then -- else -- local description = v.description -- if find(description,"LIGATURE") then -- if vs then -- local t = { } -- for i=2,#vs do -- t[#t+1] = utfchar(vs[i]) -- end -- decomposed[utfchar(unicode)] = concat(t) -- else -- local vs = v.shcode -- if vs then -- local t = { } -- for i=1,#vs do -- t[i] = utfchar(vs[i]) -- end -- decomposed[utfchar(unicode)] = concat(t) -- end -- end -- end end end initialize = false characters.initialize = function() end -- when used outside tex end characters.initialize = initialize -- utffilters.addgrapheme(utfchar(318),'l','\string~') -- utffilters.addgrapheme('c','a','b') function utffilters.addgrapheme(result,first,second) -- can be U+ 0x string or utf or number local result = charfromnumber(result) local first = charfromnumber(first) local second = charfromnumber(second) if not graphemes[first] then graphemes[first] = { [second] = result } else graphemes[first][second] = result end end --[[ldx--

In order to deal with 8-bit output, we need to find a way to go from to 8-bit. This is handled in the engine itself.

This leaves us problems with characters that are specific to like {}, $ and alike.

We can remap some chars that tex input files are sensitive for to a private area (while writing to a utility file) and revert then to their original slot when we read in such a file. Instead of reverting, we can (when we resolve characters to glyphs) map them to their right glyph there.

For this purpose we can use the private planes 0x0F0000 and 0x100000.

--ldx]]-- local low = allocate({ }) local high = allocate({ }) local escapes = allocate({ }) local special = "~#$%^&_{}\\|" local private = { low = low, high = high, escapes = escapes, } utffilters.private = private local tohigh = lpeg.replacer(low) -- frozen, only for basic tex local tolow = lpeg.replacer(high) -- frozen, only for basic tex lpegpatterns.utftohigh = tohigh lpegpatterns.utftolow = tolow function utffilters.harden(str) return lpegmatch(tohigh,str) end function utffilters.soften(str) return lpegmatch(tolow,str) end local function set(ch) local cb if type(ch) == "number" then cb, ch = ch, utfchar(ch) else cb = utfbyte(ch) end if cb < 256 then escapes[ch] = "\\" .. ch low[ch] = utfchar(0x0F0000 + cb) if ch == "%" then ch = "%%" -- nasty, but we need this as in replacements (also in lpeg) % is interpreted end high[utfchar(0x0F0000 + cb)] = ch end end private.set = set -- function private.escape (str) return gsub(str,"(.)", escapes) end -- function private.replace(str) return utfgsub(str,"(.)", low ) end -- function private.revert (str) return utfgsub(str,"(.)", high ) end private.escape = utf.remapper(escapes) private.replace = utf.remapper(low) private.revert = utf.remapper(high) for ch in gmatch(special,".") do set(ch) end --[[ldx--

We get a more efficient variant of this when we integrate replacements in collapser. This more or less renders the previous private code redundant. The following code is equivalent but the first snippet uses the relocated dollars.

[󰀤x󰀤] [$x$]

The next variant has lazy token collecting, on a 140 page mk.tex this saves about .25 seconds, which is understandable because we have no graphmes and not collecting tokens is not only faster but also saves garbage collecting.

--ldx]]-- -- lpeg variant is not faster -- -- I might use the combined loop at some point for the filter -- some day. -- function utffilters.collapse(str) -- not really tested (we could preallocate a table) -- if str and str ~= "" then -- local nstr = #str -- if nstr > 1 then -- if initialize then -- saves a call -- initialize() -- end -- local tokens, t, first, done, n = { }, 0, false, false, 0 -- for second in utfcharacters(str) do -- local dec = decomposed[second] -- if dec then -- if not done then -- if n > 0 then -- for s in utfcharacters(str) do -- if n == 1 then -- break -- else -- t = t + 1 -- tokens[t] = s -- n = n - 1 -- end -- end -- end -- done = true -- elseif first then -- t = t + 1 -- tokens[t] = first -- end -- t = t + 1 -- tokens[t] = dec -- first = false -- elseif done then -- local crs = high[second] -- if crs then -- if first then -- t = t + 1 -- tokens[t] = first -- end -- first = crs -- else -- local cgf = graphemes[first] -- if cgf and cgf[second] then -- first = cgf[second] -- elseif first then -- t = t + 1 -- tokens[t] = first -- first = second -- else -- first = second -- end -- end -- else -- local crs = high[second] -- if crs then -- for s in utfcharacters(str) do -- if n == 1 then -- break -- else -- t = t + 1 -- tokens[t] = s -- n = n - 1 -- end -- end -- if first then -- t = t + 1 -- tokens[t] = first -- end -- first = crs -- done = true -- else -- local cgf = graphemes[first] -- if cgf and cgf[second] then -- for s in utfcharacters(str) do -- if n == 1 then -- break -- else -- t = t + 1 -- tokens[t] = s -- n = n - 1 -- end -- end -- first = cgf[second] -- done = true -- else -- first = second -- n = n + 1 -- end -- end -- end -- end -- if done then -- if first then -- t = t + 1 -- tokens[t] = first -- end -- return concat(tokens) -- seldom called -- end -- elseif nstr > 0 then -- return high[str] or str -- end -- end -- return str -- end local skippable = table.tohash { "mkiv", "mkvi" } local filesuffix = file.suffix -- we could reuse tokens but it's seldom populated anyway function utffilters.collapse(str,filename) -- not really tested (we could preallocate a table) if skippable[filesuffix(filename)] then return str end if str and str ~= "" then local nstr = #str if nstr > 1 then if initialize then -- saves a call initialize() end local tokens, t, first, done, n = { }, 0, false, false, 0 for second in utfcharacters(str) do if done then local crs = high[second] if crs then if first then t = t + 1 tokens[t] = first end first = crs else local cgf = graphemes[first] if cgf and cgf[second] then first = cgf[second] elseif first then t = t + 1 tokens[t] = first first = second else first = second end end else local crs = high[second] if crs then for s in utfcharacters(str) do if n == 1 then break else t = t + 1 tokens[t] = s n = n - 1 end end if first then t = t + 1 tokens[t] = first end first = crs done = true else local cgf = graphemes[first] if cgf and cgf[second] then for s in utfcharacters(str) do if n == 1 then break else t = t + 1 tokens[t] = s n = n - 1 end end first = cgf[second] done = true else first = second n = n + 1 end end end end if done then if first then t = t + 1 tokens[t] = first end return concat(tokens) -- seldom called end elseif nstr > 0 then return high[str] or str end end return str end function utffilters.decompose(str) if str and str ~= "" then local nstr = #str if nstr > 1 then -- if initialize then -- saves a call -- initialize() -- end local tokens, t, done, n = { }, 0, false, 0 for s in utfcharacters(str) do local dec = decomposed[s] if dec then if not done then if n > 0 then for s in utfcharacters(str) do if n == 1 then break else t = t + 1 tokens[t] = s n = n - 1 end end end done = true end t = t + 1 tokens[t] = dec elseif done then t = t + 1 tokens[t] = s else n = n + 1 end end if done then return concat(tokens) -- seldom called end end end return str end local sequencers = utilities.sequencers if sequencers then local textfileactions = resolvers.openers.helpers.textfileactions sequencers.appendaction (textfileactions,"system","characters.filters.utf.collapse") sequencers.disableaction(textfileactions,"characters.filters.utf.collapse") sequencers.appendaction (textfileactions,"system","characters.filters.utf.decompose") sequencers.disableaction(textfileactions,"characters.filters.utf.decompose") function characters.filters.utf.enable() sequencers.enableaction(textfileactions,"characters.filters.utf.collapse") sequencers.enableaction(textfileactions,"characters.filters.utf.decompose") end directives.register("filters.utf.collapse", function(v) sequencers[v and "enableaction" or "disableaction"](textfileactions,"characters.filters.utf.collapse") end) directives.register("filters.utf.decompose", function(v) sequencers[v and "enableaction" or "disableaction"](textfileactions,"characters.filters.utf.decompose") end) end --[[ldx--

Next we implement some commands that are used in the user interface.

--ldx]]-- -- commands = commands or { } -- -- function commands.uchar(first,second) -- context(utfchar(first*256+second)) -- end --[[ldx--

A few helpers (used to be luat-uni).

--ldx]]-- -- obsolete: -- -- function utf.split(str) -- local t, n = { }, 0 -- for snippet in utfcharacters(str) do -- n = n + 1 -- t[n+1] = snippet -- end -- return t -- end -- -- function utf.each(str,fnc) -- for snippet in utfcharacters(str) do -- fnc(snippet) -- end -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-barcodes.mkiv0000644000175000017500000000636612130411274024603 0ustar norbertnorbert%D \module %D [ file=m-barcodes, %D version=2010.03.14, %D title=\CONTEXT\ Extra Modules, %D subtitle=Barcodes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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{barcodes}{the 'zint' module is a better choice} % \startTEXpage % \startPSTRICKS % \pspicture(-4mm,-1mm)(38mm,26mm) % \psbarcode{9781860742712}{includetext guardwhitespace}{ean13}% % \endpspicture % \stopPSTRICKS % \stopTEXpage % 978-94-90688-01-1 % % 978 = ean isbn identifier (979 also) % 94 = country code % 90688 = publisher code % 01 = title 1 % 1 = checksum \usemodule[pstricks] \usePSTRICKSmodule[pst-barcode] \definefont[barcodefont][file:ocrb10] % \definefont[barcodefont][file:texgyreheros-regular] \startluacode moduledata.barcodes = { } local function split(code) local t = { string.byte(code,1,#code) } if #t >= 12 then local s = 0 for i=1,11,2 do s = s + (t[i]-48) end for i=2,12,2 do s = s + 3 * (t[i]-48) end local m = s % 10 local c = (m > 0 and (10 - m)) or 0 return t, s, m, c end end function moduledata.barcodes.isbn_1(original) local code = string.gsub(original,"%-","") local t, s, m, c = split(code) if t then if #t == 13 then local e = ((c == t[13] - 48) and "correct") or "wrong" logs.report("isbn code","code=%s, sum=%s, checksum=%s, modulo=%s, status=%s",original,s,m,c,e) else logs.report("isbn code","code=%s, sum=%s, checksum=%s, modulo=%s",original,s,m,c) code= code .. c end end context(code) end function moduledata.barcodes.isbn_2(original) local code = string.gsub(original,"%-","") local t, s, m, c = split(code) if t and #t == 12 then original = original .. "-" .. c end context(original) end \stopluacode \startsetups barcode:isbn \scale [width=5cm] { \vbox { \hbox { \hskip3.7mm \scale[width=34mm]{\barcodefont ISBN \ctxlua{moduledata.barcodes.isbn_2("\getvariable{barcode}{code}")}} } \par \normalexpanded { \noexpand \setPSTRICKS { \noexpand \pspicture(-4mm,-1mm)(38mm,26mm) \noexpand \psbarcode { \ctxlua{moduledata.barcodes.isbn_1("\getvariable{barcode}{code}")} } { includetext guardwhitespace } { ean13 } \noexpand \endpspicture } \noexpand \processPSTRICKS } } } \stopsetups \unexpanded\def\barcode[#1]% {\bgroup \setvariables[barcode][type=isbn,#1]% \directsetup{barcode:\getvariable{barcode}{type}}% \egroup} \continueifinputfile{m-barcodes.mkiv} \starttext \startTEXpage \barcode[type=isbn,code=978-94-90688-01-1] \stopTEXpage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/node-pag.mkiv0000644000175000017500000000102311754241457024261 0ustar norbertnorbert%D \module %D [ file=node-pag, %D version=2008.09.30, %D title=\CONTEXT\ Node Macros, %D subtitle=Page Building, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Macros / Page Building} \unprotect \registerctxluafile{node-pag}{1.001} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-16.lua0000644000175000017500000000457511571377075024211 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-16'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0104, 0x0105, 0x0141, 0x20AC, 0x201E, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x0218, 0x00AB, 0x0179, 0x00AD, 0x017A, 0x017B, 0x00B0, 0x00B1, 0x010C, 0x0142, 0x017D, 0x201D, 0x00B6, 0x00B7, 0x017E, 0x010D, 0x0219, 0x00BB, 0x0152, 0x0153, 0x0178, 0x017C, 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0106, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x0110, 0x0143, 0x00D2, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x015A, 0x0170, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0118, 0x021A, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x0107, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x0111, 0x0144, 0x00F2, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x015B, 0x0171, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0119, 0x021B, 0x00FF } context-2013.05.28.20130704/texmf-dist/tex/context/base/m-subsub.tex0000644000175000017500000000401411754241457024161 0ustar norbertnorbert%D \module %D [ file=m-subsub, %D version=2000.12.14, %D title=\CONTEXT\ Private Modules, %D subtitle=More Section Levels, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. This module is not public. \unprotect \definesection[\s!section-8] \definesection[\s!section-9] \definesection[\s!section-10] \definesection[\s!section-11] \definesection[\s!section-12] \definehead [\v!subsubsubsubsubsection] [\c!section=\s!section-8, \c!default=\v!subsubsubsubsection] \definehead [\v!subsubsubsubsubsubsection] [\c!section=\s!section-9, \c!default=\v!subsubsubsubsubsection] \definehead [\v!subsubsubsubsubsubsubsection] [\c!section=\s!section-10, \c!default=\v!subsubsubsubsubsubsection] \definehead [\v!subsubsubsubsubsubsubsubsection] [\c!section=\s!section-11, \c!default=\v!subsubsubsubsubsubsubsection] \definehead [\v!subsubsubsubsubsubsubsubsubsection] [\c!section=\s!section-12, \c!default=\v!subsubsubsubsubsubsubsubsection] \definehead [\v!subsubsubsubsubsubject] [\c!coupling=\v!subsubsubsubsubsection, \c!default=\v!subsubsubsubsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubsubsubsubject] [\c!coupling=\v!subsubsubsubsubsubsection, \c!default=\v!subsubsubsubsubsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubsubsubsubsubject] [\c!coupling=\v!subsubsubsubsubsubsubsection, \c!default=\v!subsubsubsubsubsubsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubsubsubsubsubsubject] [\c!coupling=\v!subsubsubsubsubsubsubsubsection, \c!default=\v!subsubsubsubsubsubsubsubsection, \c!incrementnumber=\v!no] \definehead [\v!subsubsubsubsubsubsubsubsubsubject] [\c!coupling=\v!subsubsubsubsubsubsubsubsubsection, \c!default=\v!subsubsubsubsubsubsubsubsubsection, \c!incrementnumber=\v!no] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-rep.mkiv0000644000175000017500000000273211754241457024356 0ustar norbertnorbert%D \module %D [ file=typo-rep, %D version=2010.05.23, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Stripping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Stripping} % experimental stripping %D For a while we had stripping of special chars built into the analyzer %D but Khaled suggested to generalize this so I changed the code into a %D manipulator there. %D %D \starttyping %D \definefontfeature[default][default][mode=node,formatters=strip] %D \stoptyping %D %D However, in \MKIV\ it makes more sense to also provide it as a more %D general feature. Here we implement this as experiment. I might %D cook up a few more variants in both variants. %D %D \starttyping %D \setcharacterstripping[1] %D \stoptyping \unprotect \registerctxluafile{typo-rep}{1.001} \definesystemattribute[stripping][public] \unexpanded\def\setcharacterstripping[#1]% {\ctxcommand{setcharacterstripping("#1")}} \unexpanded\def\resetcharacterstripping {\attribute\strippingattribute\attributeunsetvalue} % maybe .. this might disappear, but is handy for testing \unexpanded\def\forcecharacterstripping % secret command {\ctxlua{fonts.handlers.otf.features.register("formatters",true)}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-000.mkii0000644000175000017500000000713111754241457024013 0ustar norbertnorbert%D \module %D [ file=unic-000, %D version=2002.12.03, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 0, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % \startunicodevector 0 % \ifcase\numexpr(#1-159) % \@@unknownchar\or % \@@unknownchar\or % exclamdown\or % textcent\or % textsterling\or % textcurrency\or % ydiaeresis\else % \@@unknownchar % \fi % \stopunicodevector % % 20\% faster: \startunicodevector 0 \expandafter\strippedcsname \ifcase\numexpr#1-159\relax \unknownchar \or \nonbreakablespace \or \exclamdown \or \textcent \or \textsterling \or \textcurrency \or \textyen \or \textbrokenbar \or \sectionmark \or \textdiaeresis \or \copyright \or \ordfeminine \or % FEMININE ORDINAL INDICATOR \leftguillemot \or % LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \textlognot \or \softhyphen \or \registered \or \textmacron \or \textdegree \or \textpm \or \twosuperior \or \threesuperior \or \textacute \or \textmu \or % MICRO SIGN \paragraphmark \or % PILCROW SIGN \periodcentered \or \textcedilla \or \onesuperior \or \ordmasculine \or % MASCULINE ORDINAL INDICATOR \rightguillemot \or % RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \onequarter \or \onehalf \or \threequarter \or \questiondown \or \Agrave \or \Aacute \or \Acircumflex \or \Atilde \or \Adiaeresis \or \Aring \or \AEligature \or \Ccedilla \or \Egrave \or \Eacute \or \Ecircumflex \or \Ediaeresis \or \Igrave \or \Iacute \or \Icircumflex \or \Idiaeresis \or \Eth \or % \Eth \or \Ntilde \or \Ograve \or \Oacute \or \Ocircumflex \or \Otilde \or \Odiaeresis \or \textmultiply \or \Ostroke \or \Ugrave \or \Uacute \or \Ucircumflex \or \Udiaeresis \or \Yacute \or \Thorn \or \ssharp \or \agrave \or \aacute \or \acircumflex \or \atilde \or \adiaeresis \or \aring \or \aeligature \or \ccedilla \or \egrave \or \eacute \or \ecircumflex \or \ediaeresis \or \igrave \or \iacute \or \icircumflex \or \idiaeresis \or \eth \or % \eth \or \ntilde \or \ograve \or \oacute \or \ocircumflex \or \otilde \or \odiaeresis \or \textdiv \or \ostroke \or \ugrave \or \uacute \or \ucircumflex \or \udiaeresis \or \yacute \or \thorn \or \ydiaeresis \else \unknownchar \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-texgyre.mkiv0000644000175000017500000003562412161703335026025 0ustar norbertnorbert%D \module %D [ file=type-imp-texgyre, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=\TEX Gyre Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 There are some weird ones that are never used .. all these Caps ... we can better %D split them into pagella-caps etc. \starttypescriptcollection[texgyre] \definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:adventor][adventor] \definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:palatino] [pagella] \definetypescriptprefix [f:times] [termes] \definetypescriptprefix [f:helvetica] [heros] \definetypescriptprefix [f:bookman] [bonum] \definetypescriptprefix [f:schoolbook] [schola] \definetypescriptprefix [f:avantgarde] [adventor] \definetypescriptprefix [f:courier] [cursor] \definetypescriptprefix [f:chancery] [chorus] \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:adventor] [TeXGyreAdventor] \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:palatino] [TeXGyrePagella] \definetypescriptprefix [n:times] [TeXGyreTermes] \definetypescriptprefix [n:helvetica] [TeXGyreHeros] \definetypescriptprefix [n:bookman] [TeXGyreBonum] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola] \definetypescriptprefix [n:adventor] [TeXGyreAdventor] \definetypescriptprefix [n:courier] [TeXGyreCursor] \definetypescriptprefix [n:chancery] [TeXGyreChorus] \starttypescript [\s!serif,\s!sans] [adventor,bonum,bookman,heros,helvetica,pagella,palatino,bonum,bookman,schola,schoolbook,termes,times] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [\s!features=\s!default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [\s!features=\s!default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [\s!features=\s!default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!smallcaps] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [\s!features=\s!smallcaps] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [\s!features=\s!smallcaps] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [\s!features=\s!smallcaps] \stoptypescript \starttypescript [\s!mono] [cursor,courier] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!none] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [\s!features=\s!none] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [\s!features=\s!none] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [\s!features=\s!none] \stoptypescript \starttypescript [\s!serif,\s!calligraphy] [chorus,chancery] \definefontsynonym [TeXGyreChorus-MediumItalic] [\s!file:texgyrechorus-mediumitalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [\s!name] \definefontsynonym [\s!Serif] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [\s!SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [\s!SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [\s!SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [\s!SerifSlanted] [\s!SerifItalic] \definefontsynonym [\s!SerifBoldSlanted] [\s!SerifBoldItalic] \definefontsynonym [\s!SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \stoptypescript \starttypescript [\s!serif] [pagella-caps,palatino-caps,termes-caps,times-caps,bonum-caps,bookman-caps,schola-caps,schoolbook-caps] [\s!name] \definefontsynonym [\s!Serif] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontsynonym [\s!SerifItalic] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [\s!SerifBold] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [\s!SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [\s!SerifSlanted] [\s!SerifItalic] \definefontsynonym [\s!SerifBoldSlanted] [\s!SerifBoldItalic] \stoptypescript \starttypescript [\s!serif] [chorus,chancery] [\s!name] \definefontsynonym [\s!Serif] [TeXGyreChorus-MediumItalic] \definefontsynonym [\s!SerifItalic] [\s!Serif] \definefontsynonym [\s!SerifBold] [\s!Serif] \definefontsynonym [\s!SerifBoldItalic] [\s!Serif] \definefontsynonym [\s!SerifSlanted] [\s!Serif] \definefontsynonym [\s!SerifBoldSlanted] [\s!Serif] \definefontsynonym [\s!SerifCaps] [\s!Serif] \stoptypescript \starttypescript [\s!calligraphy] [chorus,chancery] [\s!name] \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic] \stoptypescript \starttypescript [\s!sans] [heros,helvetica,adventor] [\s!name] \definefontsynonym [\s!Sans] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [\s!SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [\s!SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [\s!SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [\s!SansSlanted] [\s!SansItalic] \definefontsynonym [\s!SansBoldSlanted] [\s!SansBoldItalic] \definefontsynonym [\s!SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \stoptypescript \starttypescript [\s!sans] [heros-caps,helvetica-caps,adventor-caps] [\s!name] \definefontsynonym [\s!Sans] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontsynonym [\s!SansItalic] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [\s!SansBold] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [\s!SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [\s!SansSlanted] [\s!SansItalic] \definefontsynonym [\s!SansBoldSlanted] [\s!SansBoldItalic] \stoptypescript \starttypescript [\s!mono] [cursor,courier] [\s!name] \definefontsynonym [\s!Mono] [\typescriptprefix{n:\typescripttwo}-Regular] \definefontsynonym [\s!MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] \definefontsynonym [\s!MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] \definefontsynonym [\s!MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] \definefontsynonym [\s!MonoSlanted] [\s!MonoItalic] \definefontsynonym [\s!MonoBoldSlanted] [\s!MonoBoldItalic] \definefontsynonym [\s!MonoCaps] [\typescriptprefix{n:\typescripttwo}-Caps] \stoptypescript \starttypescript [\s!mono] [cursor-caps,courier-caps] [\s!name] \definefontsynonym [\s!Mono] [\typescriptprefix{n:\typescripttwo}-Caps] \definefontsynonym [\s!MonoItalic] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] \definefontsynonym [\s!MonoBold] [\typescriptprefix{n:\typescripttwo}-BoldCaps] \definefontsynonym [\s!MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] \definefontsynonym [\s!MonoSlanted] [\s!MonoItalic] \definefontsynonym [\s!MonoBoldSlanted] [\s!MonoBoldItalic] \stoptypescript % interesting is that we cannot move these definitions up (without loosing features) % caps: \definetypeface [pagella] [rm] [serif] [pagella-caps] [default] \starttypescript [times,termes] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [helvetica] [\s!default] [\s!rscale=0.9] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.05] \definetypeface [\typescriptone] [\s!mm] [\s!math] [times] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [palatino,pagella] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] [\s!rscale=1.075] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.075] \definetypeface [\typescriptone] [\s!mm] [\s!math] [palatino] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [schoolbook,schola] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] [\s!rscale=1.1] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.1] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] [\s!rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript [bookman,bonum] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] [\s!rscale=1.1] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.1] \definetypeface [\typescriptone] [\s!mm] [\s!math] [bonum] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [chancery,chorus] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [helvetica,heros] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern] [\s!default] [\s!rscale=1.15] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.15] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] [\s!rscale=1.15] \quittypescriptscanning \stoptypescript \starttypescript [avantgarde,adventor] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [adventor] [\s!default] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern] [\s!default] [\s!rscale=1.15] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.15] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [courier,cursor] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [\typescriptone] [\s!default] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection \startmode[txmath] \starttypescriptcollection[texgyre-math-times] \starttypescript [\s!math][times,termes][\s!all] \loadfontgoodies[tx-math] \definefontsynonym[\s!MathRoman][txmath@tx-math] % \definefontsynonym[\s!MathRomanBold][MathRoman] \stoptypescript \stoptypescriptcollection \stopmode \startnotmode[txmath] \starttypescriptcollection[texgyre-math-times] \starttypescript [\s!math][times,termes][\s!all] \loadfontgoodies[texgyre] \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features=\s!math\mathsizesuffix] \stoptypescript \stoptypescriptcollection \stopnotmode \startmode[pxmath] \starttypescriptcollection[texgyre-math-pagella] \starttypescript [\s!math][palatino,pagella][\s!all] \loadfontgoodies[px-math] \definefontsynonym[\s!MathRoman][pxmath@px-math] % \definefontsynonym[\s!MathRomanBold][MathRoman] \stoptypescript \stoptypescriptcollection \stopmode \startnotmode[pxmath] \starttypescriptcollection[texgyre-math-pagella] \starttypescript [\s!math][palatino,pagella][\s!all] \loadfontgoodies[texgyre] \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features=\s!math\mathsizesuffix] \stoptypescript \stoptypescriptcollection \stopnotmode \starttypescriptcollection[texgyre-math-bonum] \starttypescript [\s!math][bookman,bonum][\s!all] \loadfontgoodies[texgyre] \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features=\s!math\mathsizesuffix] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-ini.lua0000644000175000017500000001115012130411274024114 0ustar norbertnorbertif not modules then modules = { } end modules ['attr-ini'] = { version = 1.001, comment = "companion to attr-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local commands, context, nodes, storage = commands, context, nodes, storage local next, type = next, type --[[ldx--

We start with a registration system for atributes so that we can use the symbolic names later on.

--ldx]]-- attributes = attributes or { } local attributes = attributes local sharedstorage = storage.shared attributes.names = attributes.names or { } attributes.numbers = attributes.numbers or { } attributes.list = attributes.list or { } attributes.states = attributes.states or { } attributes.handlers = attributes.handlers or { } attributes.unsetvalue = -0x7FFFFFFF local names = attributes.names local numbers = attributes.numbers local list = attributes.list storage.register("attributes/names", names, "attributes.names") storage.register("attributes/numbers", numbers, "attributes.numbers") storage.register("attributes/list", list, "attributes.list") function attributes.define(name,number) -- at the tex end if not numbers[name] then numbers[name] = number names[number] = name list[number] = { } end end --[[ldx--

We reserve this one as we really want it to be always set (faster).

--ldx]]-- names[0], numbers["fontdynamic"] = "fontdynamic", 0 --[[ldx--

We can use the attributes in the range 127-255 (outside user space). These are only used when no attribute is set at the \TEX\ end which normally happens in .

--ldx]]-- sharedstorage.attributes_last_private = sharedstorage.attributes_last_private or 127 -- to be considered (so that we can use an array access): -- -- local private = { } attributes.private = private -- -- setmetatable(private, { -- __index = function(t,name) -- local number = sharedstorage.attributes_last_private -- if number < 1023 then -- tex.count.minallocatedattribute - 1 -- number = number + 1 -- sharedstorage.attributes_last_private = number -- end -- numbers[name], names[number], list[number] = number, name, { } -- private[name] = number -- return number -- end, -- __call = function(t,name) -- return t[name] -- end -- } ) function attributes.private(name) -- at the lua end (hidden from user) local number = numbers[name] if not number then local last = sharedstorage.attributes_last_private if last < 1023 then -- tex.count.minallocatedattribute - 1 last = last + 1 sharedstorage.attributes_last_private = last else report_attribute("no more room for private attributes") os.exit() end number = last numbers[name], names[number], list[number] = number, name, { } end return number end -- tracers local report_attribute = logs.reporter("attributes") local function showlist(what,list) if list then local a = list.next local i = 0 while a do local number, value = a.number, a.value i = i + 1 report_attribute("%S %2i: attribute %3i, value %4i, name %a",what,i,number,value,names[number]) a = a.next end end end function attributes.showcurrent() showlist("current",node.current_attr()) end function attributes.ofnode(n) showlist(n,n.attr) end -- interface commands.defineattribute = attributes.define commands.showattributes = attributes.showcurrent function commands.getprivateattribute(name) context(attributes.private(name)) end -- rather special local store = { } function commands.savecurrentattributes(name) name = name or "" local n = node.current_attr() n = n and n.next local t = { } while n do t[n.number] = n.value n = n.next end store[name] = { attr = t, font = font.current(), } end function commands.restorecurrentattributes(name) name = name or "" local t = store[name] if t then local attr = t.attr local font = t.font if attr then for k, v in next, attr do tex.attribute[k] = v end end if font then -- tex.font = font context.getvalue(fonts.hashes.csnames[font]) -- we don't have a direct way yet (will discuss it with taco) end end -- store[name] = nil end context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-markdown.tex0000644000175000017500000000425411754241457026544 0ustar norbertnorbert%D \module %D [ file=mtx-context-markdown, %D version=2011.07.24, %D title=\CONTEXT\ Extra Trickry, %D subtitle=Rendering Markdown Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % begin help % % usage: context --extra=markdown [options] list-of-files % % --sort : sort filenames first % --paperoffset=dimension : left-top-offset % --duplex : doublesided (singlesided is default) % --backspace=dimension : extra left offset % --topspace=dimension : extra top offset % --bodyfont=specification : additional bodyfont specification % --contents : add table of contents % % end help \usemodule[markdown] \doifdocumentargument {paperoffset} { \definepapersize [offset=\getdocumentargument{paperoffset}] } \doifdocumentargument{duplex} { \setuppagenumbering [alternative=doublesided] } { \setuppagenumbering [alternative=singlesided] } \setdocumentargumentdefault {textwidth} {middle} \setdocumentargumentdefault {backspace} {2cm} \setdocumentargumentdefault {topspace} {2cm} \setdocumentargumentdefault {bodyfont} {} \setuptolerance [verytolerant,stretch] \setuplayout [width=middle, height=middle, backspace=\getdocumentargument{backspace}, topspace=\getdocumentargument{topspace}, footer=0pt] \setupbodyfont [dejavu,10pt,\getdocumentargument{bodyfont}] \setupwhitespace [big] % \enabletrackers[context.trace] \setuplist [chapter,section,subsection] [aligntitle=yes, width=4em] \starttext \doifdocumentargument{contents} { \starttitle[title={Table of contents}] \placelist[chapter,section,subsection] % todo: levels \stoptitle } \startluacode if #document.files > 0 then if document.arguments.sort then table.sort(document.files) end for i=1,#document.files do context.processmarkdownfile(document.files[i]) context.page() end end \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-96.tex0000644000175000017500000001021211754241457023703 0ustar norbertnorbert%D \module %D [ file=s-pre-26, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 26, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setuppapersize [S44][S44] \definetypeface[main][rm][casual][informal][default] \setupbodyfont[main,13pt] \setuplayout [backspace=0pt, topspace=0pt, header=0pt, footer=0pt, bottom=0pt, width=middle, height=fit] \setupbottom [style=\ssbf, color=white] \setupfooter [style=\ssbfb, color=white] \setupinteraction [state=start, click=no] \setupinteractionscreen [option=max] \definecolor[white] [s=.8] \definecolor[red] [r=.7] \definecolor[green] [g=.7] \definecolor[blue] [b=.7] \definecolor[yellow][r=.7,g=.7] \setupcolors [state=start] \defineoverlay [page] [\reuseMPgraphic{page}] \defineoverlay [text] [\useMPgraphic {text}] \defineoverlay [continue] [\overlaybutton {nextpage}] \setupbackgrounds % otherwise in acrobat 5 rounding error [paper] % and one pixel white line [background=page] \setupbackgrounds [page] [background={page,continue}] \definecolor [PageColor][black] \definecolor [TextColor 0][white] \definecolor [TextColor 1][red] \definecolor [TextColor 2][green] \definecolor [TextColor 3][blue] \definecolor [TextColor 4][yellow] \definecolor [TextColor] [TextColor 0] \defineframedtext [TopicPage] \defineframedtext [TopicText] \setupframedtexts [TopicPage] [width=\textwidth, height=\textheight, offset=overlay] \setupframedtexts [TopicText] [offset=10pt, style=bold, width=\TopicWidth, background=text, align=normal] \setupframedtexts [TopicPage,TopicText] [frame=off, depthcorrection=off, before=, after=] \newbox \TopicBox % we stack old pages \newcounter\KindOfTopic % and cycle through corners \newdimen \TopicWidth % with randomized widths \setupinteraction [color=lightgray, contrastcolor=lightgray, style=] \def\StartTopic {\definecolor[TextColor][TextColor \KindOfTopic] \ifcase\KindOfTopic\relax \TopicWidth=.7\textwidth \else \getrandomdimen\TopicWidth{.55\textwidth}{.7\textwidth} \fi \ifcase\KindOfTopic\relax \setupframedtexts [TopicPage] [align={middle,lohi}] \or \setupframedtexts [TopicPage] [align={right,high}] \or \setupframedtexts [TopicPage] [align={left,high}] \or \setupframedtexts [TopicPage] [align={left,low}] \or \setupframedtexts [TopicPage] [align={right,low}] \fi \setbox\scratchbox=\vbox \bgroup \dontcomplain \noindent \startTopicPage [none] \noindent \startTopicText [none] } \def\StopTopic% {\stopTopicText \stopTopicPage \egroup \global\setbox\TopicBox=\vbox {\startoverlay {\box\TopicBox} {\box\scratchbox} \stopoverlay} \copy\TopicBox \ifnum\KindOfTopic=4 \def\KindOfTopic{1} \else \increment\KindOfTopic \fi \getrandomdimen\TopicWidth{.55\textwidth}{.7\textwidth} \page} \startuseMPgraphic{text} path p ; p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ; color c ; c := (.7+uniformdeviate.3)*\MPcolor{TextColor} ; p := p enlarged -1.25pt ; filldraw p withcolor c ; draw p withpen pencircle scaled 2.5pt withcolor .75c ; \stopuseMPgraphic \startreusableMPgraphic{page} path p ; p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ; color c ; c := \MPcolor{PageColor} ; filldraw p enlarged 5pt withcolor c ; % bleeding draw p withpen pencircle scaled 2.5pt withcolor c ; \stopreusableMPgraphic \def\StartNopic {\def\KindOfTopic{0} % centered at the page \StartTopic \bfd\setupinterlinespace \def\\{\blank\bfb\setupinterlinespace} \raggedcenter} \def\StopNopic {\StopTopic} \def\TitlePage#1% {\StartNopic#1\StopNopic} \doifnotmode{demo}{\endinput} \starttext \StartNopic a dull talk \\ \currentdate \StopNopic \dorecurse{10}{\StartTopic \input tufte \StopTopic} \StartNopic that's it \\ goodbye \StopNopic \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/node-pro.lua0000644000175000017500000001327312134352503024123 0ustar norbertnorbertif not modules then modules = { } end modules ['node-pro'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local utfchar = utf.char local format, concat = string.format, table.concat local trace_callbacks = false trackers.register("nodes.callbacks", function(v) trace_callbacks = v end) local report_nodes = logs.reporter("nodes","processors") local nodes, node = nodes, node local nodecodes = nodes.nodecodes local glyph_code = nodecodes.glyph local tasks = nodes.tasks local free_node = node.free local first_glyph = node.first_glyph or node.first_character local has_attribute = node.has_attribute nodes.processors = nodes.processors or { } local processors = nodes.processors -- vbox: grouptype: vbox vtop output split_off split_keep | box_type: exactly|aditional -- hbox: grouptype: hbox adjusted_hbox(=hbox_in_vmode) | box_type: exactly|aditional local actions = tasks.actions("processors") local n = 0 local function reconstruct(head) -- we probably have a better one local t, n, h = { }, 0, head while h do n = n + 1 local id = h.id if id == glyph_code then -- todo: disc etc t[n] = utfchar(h.char) else t[n] = "[]" end h = h.next end return concat(t) end local function tracer(what,state,head,groupcode,before,after,show) if not groupcode then groupcode = "unknown" elseif groupcode == "" then groupcode = "mvl" end n = n + 1 if show then report_nodes("%s: location %a, state %a, group %a, # before %a, # after %s, stream: %s",what,n,state,groupcode,before,after,reconstruct(head)) else report_nodes("%s: location %a, state %a, group %a, # before %a, # after %s",what,n,state,groupcode,before,after) end end processors.tracer = tracer processors.enabled = true -- this will become a proper state (like trackers) function processors.pre_linebreak_filter(head,groupcode,size,packtype,direction) local first, found = first_glyph(head) -- they really need to be glyphs if found then if trace_callbacks then local before = nodes.count(head,true) local head, done = actions(head,groupcode,size,packtype,direction) -- todo : pass first local after = nodes.count(head,true) if done then tracer("pre_linebreak","changed",head,groupcode,before,after,true) else tracer("pre_linebreak","unchanged",head,groupcode,before,after,true) end return done and head or true else local head, done = actions(head,groupcode,size,packtype,direction) -- todo : pass first return done and head or true end elseif trace_callbacks then local n = nodes.count(head,false) tracer("pre_linebreak","no chars",head,groupcode,n,n) end return true end local enabled = true function processors.hpack_filter(head,groupcode,size,packtype,direction) if enabled then local first, found = first_glyph(head) -- they really need to be glyphs if found then if trace_callbacks then local before = nodes.count(head,true) local head, done = actions(head,groupcode,size,packtype,direction) local after = nodes.count(head,true) if done then tracer("hpack","changed",head,groupcode,before,after,true) else tracer("hpack","unchanged",head,groupcode,before,after,true) end return done and head or true else local head, done = actions(head,groupcode,size,packtype,direction) return done and head or true end elseif trace_callbacks then local n = nodes.count(head,false) tracer("hpack","no chars",head,groupcode,n,n) end end return true end local hpack = node.hpack function nodes.fasthpack(...) -- todo: pass explicit arguments enabled = false local hp, b = hpack(...) hp.prev = nil hp.next = nil enabled = true return hp, b end callbacks.register('pre_linebreak_filter', processors.pre_linebreak_filter, "all kind of horizontal manipulations (before par break)") callbacks.register('hpack_filter' , processors.hpack_filter, "all kind of horizontal manipulations (before hbox creation)") local actions = tasks.actions("finalizers") -- head, where -- beware, these are packaged boxes so no first_glyph test -- maybe some day a hash with valid groupcodes -- -- beware, much can pass twice, for instance vadjust passes two times -- -- something weird here .. group mvl when making a vbox function processors.post_linebreak_filter(head,groupcode) if trace_callbacks then local before = nodes.count(head,true) local head, done = actions(head,groupcode) local after = nodes.count(head,true) if done then tracer("post_linebreak","changed",head,groupcode,before,after,true) else tracer("post_linebreak","unchanged",head,groupcode,before,after,true) end return done and head or true else local head, done = actions(head,groupcode) return done and head or true end end callbacks.register('post_linebreak_filter', processors.post_linebreak_filter,"all kind of horizontal manipulations (after par break)") statistics.register("h-node processing time", function() return statistics.elapsedseconds(nodes,"including kernel") -- hm, ok here? end) context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-doc.lua0000644000175000017500000010117512134352503024115 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-doc'] = { version = 1.001, comment = "companion to strc-doc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: associate counter with head -- we need to better split the lua/tex end -- we need to freeze and document this module -- keep this as is: -- -- in section titles by default a zero aborts, so there we need: sectionset=bagger with \definestructureprefixset [bagger] [section-2,section-4] [] -- in lists however zero's are ignored, so there numbersegments=2:4 gives result local next, type, tonumber, select = next, type, tonumber, select local format, gsub, find, gmatch, match = string.format, string.gsub, string.find, string.gmatch, string.match local concat, fastcopy = table.concat, table.fastcopy local max, min = math.max, math.min local allocate, mark, accesstable = utilities.storage.allocate, utilities.storage.mark, utilities.tables.accesstable local setmetatableindex = table.setmetatableindex local catcodenumbers = catcodes.numbers local ctxcatcodes = catcodenumbers.ctxcatcodes local variables = interfaces.variables local v_last = variables.last local v_first = variables.first local v_previous = variables.previous local v_next = variables.next local v_auto = variables.auto local v_strict = variables.strict local v_all = variables.all local v_positive = variables.positive local v_by = variables.by local trace_sectioning = false trackers.register("structures.sectioning", function(v) trace_sectioning = v end) local trace_detail = false trackers.register("structures.detail", function(v) trace_detail = v end) local report_structure = logs.reporter("structure","sectioning") local structures = structures local context = context local helpers = structures.helpers local documents = structures.documents local sections = structures.sections local lists = structures.lists local counters = structures.counters local sets = structures.sets local tags = structures.tags local processors = typesetters.processors local applyprocessor = processors.apply local startapplyprocessor = processors.startapply local stopapplyprocessor = processors.stopapply local strippedprocessor = processors.stripped local a_internal = attributes.private('internal') -- -- -- document -- -- -- local data -- the current state function documents.initialize() data = allocate { -- whole data is marked numbers = { }, forced = { }, ownnumbers = { }, status = { }, checkers = { }, depth = 0, blocks = { }, block = "", } documents.data = data end function documents.reset() data.numbers = { } data.forced = { } data.ownnumbers = { } data.status = { } -- data.checkers = { } data.depth = 0 end documents.initialize() -- -- -- components -- -- -- function documents.preset(numbers) local nofnumbers = #numbers local ownnumbers = { } data.numbers = numbers data.ownnumbers = ownnumbers data.depth = nofnumbers for i=1,nofnumbers do ownnumbers[i] = "" end sections.setnumber(nofnumbers,"-1") end -- -- -- sections -- -- -- local collected = allocate() local tobesaved = allocate() sections.collected = collected sections.tobesaved = tobesaved -- local function initializer() -- collected = sections.collected -- tobesaved = sections.tobesaved -- end -- -- job.register('structures.sections.collected', tobesaved, initializer) sections.registered = sections.registered or allocate() local registered = sections.registered storage.register("structures/sections/registered", registered, "structures.sections.registered") function sections.register(name,specification) registered[name] = specification end function sections.currentid() return #tobesaved end function sections.save(sectiondata) -- local sectionnumber = helpers.simplify(section.sectiondata) -- maybe done earlier local numberdata = sectiondata.numberdata local ntobesaved = #tobesaved if not numberdata or sectiondata.metadata.nolist then return ntobesaved else ntobesaved = ntobesaved + 1 tobesaved[ntobesaved] = numberdata if not collected[ntobesaved] then collected[ntobesaved] = numberdata end return ntobesaved end end function sections.load() setmetatableindex(collected,nil) local lists = lists.collected for i=1,#lists do local list = lists[i] local metadata = list.metadata if metadata and metadata.kind == "section" and not metadata.nolist then local numberdata = list.numberdata if numberdata then collected[#collected+1] = numberdata end end end sections.load = functions.dummy end table.setmetatableindex(collected, function(t,i) sections.load() return collected[i] or { } end) -- sections.levelmap = sections.levelmap or { } local levelmap = sections.levelmap storage.register("structures/sections/levelmap", sections.levelmap, "structures.sections.levelmap") sections.verbose = true levelmap.block = -1 function sections.setlevel(name,level) -- level can be number or parent (=string) local l = tonumber(level) if not l then l = levelmap[level] end if l and l > 0 then levelmap[name] = l else -- error end end function sections.getlevel(name) return levelmap[name] or 0 end function sections.setblock(name) local block = name or data.block or "unknown" -- can be used to set the default data.block = block return block end function sections.pushblock(name) counters.check(0) -- we assume sane usage of \page between blocks local block = name or data.block data.blocks[#data.blocks+1] = block data.block = block documents.reset() return block end function sections.popblock() data.blocks[#data.blocks] = nil local block = data.blocks[#data.blocks] or data.block data.block = block documents.reset() return block end function sections.currentblock() return data.block or data.blocks[#data.blocks] or "unknown" end function sections.currentlevel() return data.depth end function sections.getcurrentlevel() context(data.depth) end local saveset = { } -- experiment, see sections/tricky-001.tex function sections.somelevel(given) -- old number local numbers = data.numbers local ownnumbers = data.ownnumbers local forced = data.forced local status = data.status local olddepth = data.depth local givenname = given.metadata.name local mappedlevel = levelmap[givenname] local newdepth = tonumber(mappedlevel or (olddepth > 0 and olddepth) or 1) -- hm, levelmap only works for section-* local directives = given.directives local resetset = directives and directives.resetset or "" -- local resetter = sets.getall("structure:resets",data.block,resetset) -- a trick to permit userdata to overload title, ownnumber and reference -- normally these are passed as argument but nowadays we provide several -- interfaces (we need this because we want to be compatible) if trace_detail then report_structure("name %a, mapped level %a, old depth %a, new depth %a, reset set %a", givenname,mappedlevel,olddepth,newdepth,resetset) end local u = given.userdata if u then -- kind of obsolete as we can pass them directly anyway if u.reference and u.reference ~= "" then given.metadata.reference = u.reference ; u.reference = nil end if u.ownnumber and u.ownnumber ~= "" then given.numberdata.ownnumber = u.ownnumber ; u.ownnumber = nil end if u.title and u.title ~= "" then given.titledata.title = u.title ; u.title = nil end if u.bookmark and u.bookmark ~= "" then given.titledata.bookmark = u.bookmark ; u.bookmark = nil end if u.label and u.label ~= "" then given.titledata.label = u.label ; u.label = nil end end -- so far for the trick if saveset then saveset[newdepth] = (resetset ~= "" and resetset) or saveset[newdepth] or "" end if newdepth > olddepth then for i=olddepth+1,newdepth do local s = tonumber(sets.get("structure:resets",data.block,saveset and saveset[i] or resetset,i)) if trace_detail then report_structure("new depth %s, old depth %s, reset set %a, reset value %a, current %a",olddepth,newdepth,resetset,s,numbers[i]) end if not s or s == 0 then numbers[i] = numbers[i] or 0 ownnumbers[i] = ownnumbers[i] or "" else numbers[i] = s - 1 ownnumbers[i] = "" end status[i] = { } end elseif newdepth < olddepth then for i=olddepth,newdepth+1,-1 do local s = tonumber(sets.get("structure:resets",data.block,saveset and saveset[i] or resetset,i)) if trace_detail then report_structure("new depth %s, old depth %s, reset set %a, reset value %a, current %a",olddepth,newdepth,resetset,s,numbers[i]) end if not s or s == 0 then numbers[i] = numbers[i] or 0 ownnumbers[i] = ownnumbers[i] or "" else numbers[i] = s - 1 ownnumbers[i] = "" end status[i] = nil end end counters.check(newdepth) ownnumbers[newdepth] = given.numberdata.ownnumber or "" given.numberdata.ownnumber = nil data.depth = newdepth -- new number olddepth = newdepth if given.metadata.increment then local oldn, newn = numbers[newdepth] or 0, 0 local fd = forced[newdepth] if fd then if fd[1] == "add" then newn = oldn + fd[2] + 1 else newn = fd[2] + 1 end if newn < 0 then newn = 1 -- maybe zero is nicer end forced[newdepth] = nil if trace_detail then report_structure("old depth %a, new depth %a, old n %a, new n %a, forced %t",olddepth,newdepth,oldn,newn,fd) end else newn = oldn + 1 if trace_detail then report_structure("old depth %a, new depth %a, old n %a, new n %a, increment",olddepth,newdepth,oldn,newn) end end numbers[newdepth] = newn end status[newdepth] = given or { } for k, v in next, data.checkers do if v[1] == newdepth and v[2] then v[2](k) end end local numberdata= given.numberdata if not numberdata then -- probably simplified to nothing numberdata = { } given.numberdata = numberdata end local n = { } for i=1,newdepth do n[i] = numbers[i] end numberdata.numbers = n -- numberdata.numbers = fastcopy(numbers) if #ownnumbers > 0 then numberdata.ownnumbers = fastcopy(ownnumbers) end if trace_detail then report_structure("name %a, numbers % a, own numbers % a",givenname,numberdata.numbers,numberdata.ownnumbers) end local metadata = given.metadata local references = given.references local tag = references.tag or tags.getid(metadata.kind,metadata.name) if tag and tag ~= "" and tag ~= "?" then references.tag = tag end local setcomponent = structures.references.setcomponent if setcomponent then setcomponent(given) -- might move to the tex end end references.section = sections.save(given) -- given.numberdata = nil end function sections.reportstructure() if sections.verbose then local numbers, ownnumbers, status, depth = data.numbers, data.ownnumbers, data.status, data.depth local d = status[depth] local o = concat(ownnumbers,".",1,depth) local n = (numbers and concat(numbers,".",1,min(depth,#numbers))) or 0 local l = d.titledata.title or "" local t = (l ~= "" and l) or d.titledata.title or "[no title]" local m = d.metadata.name if o and not find(o,"^%.*$") then report_structure("%s @ level %i : (%s) %s -> %s",m,depth,n,o,t) elseif d.directives and d.directives.hidenumber then report_structure("%s @ level %i : (%s) -> %s",m,depth,n,t) else report_structure("%s @ level %i : %s -> %s",m,depth,n,t) end end end function sections.setnumber(depth,n) local forced, depth, new = data.forced, depth or data.depth, tonumber(n) if type(n) == "string" then if find(n,"^[%+%-]") then forced[depth] = { "add", new } else forced[depth] = { "set", new } end else forced[depth] = { "set", new } end end function sections.numberatdepth(depth) return data.numbers[tonumber(depth) or sections.getlevel(depth) or 0] or 0 end function sections.numbers() return data.numbers end function sections.matchingtilldepth(depth,numbers,parentnumbers) local dn = parentnumbers or data.numbers local ok = false for i=1,depth do if dn[i] == numbers[i] then ok = true else return false end end return ok end function sections.getnumber(depth) -- redefined later ... context(data.numbers[depth] or 0) end function sections.set(key,value) data.status[data.depth][key] = value -- may be nil for a reset end function sections.cct() local metadata = data.status[data.depth].metadata context(metadata and metadata.catcodes or ctxcatcodes) end -- this one will become: return catcode, d (etc) function sections.structuredata(depth,key,default,honorcatcodetable) -- todo: spec table and then also depth if depth then depth = levelmap[depth] or tonumber(depth) end if not depth or depth == 0 then depth = data.depth end local data = data.status[depth] local d if data then if find(key,"%.") then d = accesstable(key,data) else d = data.titledata d = d and d[key] end end if d and type(d) ~= "table" then if honorcatcodetable == true or honorcatcodetable == v_auto then local metadata = data.metadata local catcodes = metadata and metadata.catcodes if catcodes then context.sprint(catcodes,d) else context(d) end elseif not honorcatcodetable or honorcatcodetable == "" then context(d) else local catcodes = catcodenumbers[honorcatcodetable] if catcodes then context.sprint(catcodes,d) else context(d) end end elseif default then context(default) end end function sections.userdata(depth,key,default) if depth then depth = levelmap[depth] or tonumber(depth) end if not depth or depth == 0 then depth = data.depth end if depth > 0 then local userdata = data.status[depth] userdata = userdata and userdata.userdata userdata = (userdata and userdata[key]) or default if userdata then context(userdata) end end end function sections.setchecker(name,level,command) -- hm, checkers are not saved data.checkers[name] = (name and command and level >= 0 and { level, command }) or nil end function sections.current() return data.status[data.depth] end function sections.depthnumber(n) local depth = data.depth if not n or n == 0 then n = depth elseif n < 0 then n = depth + n end return context(data.numbers[n] or 0) end function sections.autodepth(numbers) for i=#numbers,1,-1 do if numbers[i] ~= 0 then return i end end return 0 end -- function structures.currentsectionnumber() -- brr, namespace wrong local sc = sections.current() return sc and sc.numberdata end -- \dorecurse{3} { -- \chapter{Blabla} \subsection{bla 1 1} \subsection{bla 1 2} -- \section{bla 2} \subsection{bla 2 1} \subsection{bla 2 2} -- } -- sign=all => also zero and negative -- sign=positive => also zero -- sign=hang => llap sign --~ todo: test this --~ local function process(index,numbers,ownnumbers,criterium,separatorset,conversion,conversionset,index,entry,result,preceding,done) -- todo: too much (100 steps) local number = numbers and (numbers[index] or 0) local ownnumber = ownnumbers and ownnumbers[index] or "" if number > criterium or (ownnumber ~= "") then local block = (entry.block ~= "" and entry.block) or sections.currentblock() -- added if preceding then local separator = sets.get("structure:separators",block,separatorset,preceding,".") if separator then if result then result[#result+1] = strippedprocessor(separator) else applyprocessor(separator) end end preceding = false end if result then if ownnumber ~= "" then result[#result+1] = ownnumber elseif conversion and conversion ~= "" then -- traditional (e.g. used in itemgroups) .. inherited! result[#result+1] = converters.convert(conversion,number) else local theconversion = sets.get("structure:conversions",block,conversionset,index,"numbers") result[#result+1] = converters.convert(theconversion,number) end else if ownnumber ~= "" then applyprocessor(ownnumber) elseif conversion and conversion ~= "" then -- traditional (e.g. used in itemgroups) context.convertnumber(conversion,number) else local theconversion = sets.get("structure:conversions",block,conversionset,index,"numbers") local data = startapplyprocessor(theconversion) context.convertnumber(data or "numbers",number) stopapplyprocessor() end end return index, true else return preceding or false, done end end function sections.typesetnumber(entry,kind,...) -- kind='section','number','prefix' if entry and entry.hidenumber ~= true then -- can be nil local separatorset = "" local conversionset = "" local conversion = "" local groupsuffix = "" local stopper = "" local starter = "" local connector = "" local set = "" local segments = "" local criterium = "" for d=1,select("#",...) do local data = select(d,...) -- can be multiple parametersets if data then if separatorset == "" then separatorset = data.separatorset or "" end if conversionset == "" then conversionset = data.conversionset or "" end if conversion == "" then conversion = data.conversion or "" end if groupsuffix == "" then groupsuffix = data.groupsuffix or "" end if stopper == "" then stopper = data.stopper or "" end if starter == "" then starter = data.starter or "" end if connector == "" then connector = data.connector or "" end if set == "" then set = data.set or "" end if segments == "" then segments = data.segments or "" end if criterium == "" then criterium = data.criterium or "" end end end if separatorset == "" then separatorset = "default" end if conversionset == "" then conversionset = "default" end -- not used if conversion == "" then conversion = nil end if groupsuffix == "" then groupsuffix = nil end if stopper == "" then stopper = nil end if starter == "" then starter = nil end if connector == "" then connector = nil end if set == "" then set = "default" end if segments == "" then segments = nil end -- if criterium == v_strict then criterium = 0 elseif criterium == v_positive then criterium = -1 elseif criterium == v_all then criterium = -1000000 else criterium = 0 end -- local firstprefix, lastprefix = 0, 16 if segments then local f, l = match(tostring(segments),"^(.-):(.+)$") if l == "*" then l = 100 -- new end if f and l then -- 0:100, chapter:subsubsection firstprefix = tonumber(f) or sections.getlevel(f) or 0 lastprefix = tonumber(l) or sections.getlevel(l) or 100 else -- 3, section local fl = tonumber(segments) or sections.getlevel(segments) -- generalize if fl then firstprefix = fl lastprefix = fl end end end -- local numbers, ownnumbers = entry.numbers, entry.ownnumbers if numbers then local done, preceding = false, false -- local result = kind == "direct" and { } if result then connector = false end -- local prefixlist = set and sets.getall("structure:prefixes","",set) -- "" == block if starter then if result then result[#result+1] = strippedprocessor(starter) else applyprocessor(starter) end end if prefixlist and (kind == 'section' or kind == 'prefix' or kind == 'direct') then -- find valid set (problem: for sectionnumber we should pass the level) -- no holes local b, e, bb, ee = 1, #prefixlist, 0, 0 -- find last valid number for k=e,b,-1 do local prefix = prefixlist[k] local index = sections.getlevel(prefix) or k if index >= firstprefix and index <= lastprefix then local number = numbers and numbers[index] if number then local ownnumber = ownnumbers and ownnumbers[index] or "" if number > 0 or (ownnumber ~= "") then break else e = k -1 end end end end -- find valid range for k=b,e do local prefix = prefixlist[k] local index = sections.getlevel(prefix) or k if index >= firstprefix and index <= lastprefix then local number = numbers and numbers[index] if number then local ownnumber = ownnumbers and ownnumbers[index] or "" if number > 0 or (ownnumber ~= "") then if bb == 0 then bb = k end ee = k else bb, ee = 0, 0 end else break end end end -- print valid range for k=bb,ee do local prefix = prefixlist[k] local index = sections.getlevel(prefix) or k if index >= firstprefix and index <= lastprefix then -- process(index,result) preceding, done = process(index,numbers,ownnumbers,criterium,separatorset,conversion,conversionset,index,entry,result,preceding,done) end end else -- also holes check for index=firstprefix,lastprefix do -- process(index,result) preceding, done = process(index,numbers,ownnumbers,criterium,separatorset,conversion,conversionset,index,entry,result,preceding,done) end end -- if done then if connector and kind == 'prefix' then if result then -- can't happen as we're in 'direct' else applyprocessor(connector) end else if groupsuffix and kind ~= "prefix" then if result then result[#result+1] = strippedprocessor(groupsuffix) else applyprocessor(groupsuffix) end end if stopper then if result then result[#result+1] = strippedprocessor(stopper) else applyprocessor(stopper) end end end end return result -- a table ! else -- report_structure("error: no numbers") end end end function sections.title() local sc = sections.current() if sc then helpers.title(sc.titledata.title,sc.metadata) end end function sections.findnumber(depth,what) -- needs checking (looks wrong and slow too) local data = data.status[depth or data.depth] if data then local index = data.references.section local collected = sections.collected local sectiondata = collected[index] if sectiondata and sectiondata.hidenumber ~= true then -- can be nil local quit = what == v_previous or what == v_next if what == v_first or what == v_previous then for i=index,1,-1 do local s = collected[i] if s then local n = s.numbers if #n == depth and n[depth] and n[depth] ~= 0 then sectiondata = s if quit then break end elseif #n < depth then break end end end elseif what == v_last or what == v_next then for i=index,#collected do local s = collected[i] if s then local n = s.numbers if #n == depth and n[depth] and n[depth] ~= 0 then sectiondata = s if quit then break end elseif #n < depth then break end end end end return sectiondata end end end function sections.finddata(depth,what) local data = data.status[depth or data.depth] if data then -- if sectiondata and sectiondata.hidenumber ~= true then -- can be nil local index = data.references.listindex if index then local collected = structures.lists.collected local quit = what == v_previous or what == v_next if what == v_first or what == v_previous then for i=index-1,1,-1 do local s = collected[i] if not s then break elseif s.metadata.kind == "section" then -- maybe check on name local n = s.numberdata.numbers if #n == depth and n[depth] and n[depth] ~= 0 then data = s if quit then break end elseif #n < depth then break end end end elseif what == v_last or what == v_next then for i=index+1,#collected do local s = collected[i] if not s then break elseif s.metadata.kind == "section" then -- maybe check on name local n = s.numberdata.numbers if #n == depth and n[depth] and n[depth] ~= 0 then data = s if quit then break end elseif #n < depth then break end end end end end return data end end function sections.internalreference(sectionname,what) -- to be used in pagebuilder (no marks used) local r = type(sectionname) == "number" and sectionname or registered[sectionname] if r then local data = sections.finddata(r.level,what) return data and data.references and data.references.internal end end function sections.fullnumber(depth,what) local sectiondata = sections.findnumber(depth,what) if sectiondata then sections.typesetnumber(sectiondata,'section',sectiondata) end end function sections.getnumber(depth,what) -- redefined here local sectiondata = sections.findnumber(depth,what) context((sectiondata and sectiondata.numbers[depth]) or 0) end -- experimental local levels = { } --~ function commands.autonextstructurelevel(level) --~ if level > #levels then --~ for i=#levels+1,level do --~ levels[i] = "" --~ end --~ end --~ local finish = concat(levels,"\n",level) or "" --~ for i=level+1,#levels do --~ levels[i] = "" --~ end --~ levels[level] = [[\finalizeautostructurelevel]] --~ context(finish) --~ end --~ function commands.autofinishstructurelevels() --~ local finish = concat(levels,"\n") or "" --~ levels = { } --~ context(finish) --~ end function commands.autonextstructurelevel(level) if level > #levels then for i=#levels+1,level do levels[i] = false end else for i=level,#levels do if levels[i] then context.finalizeautostructurelevel() levels[i] = false end end end levels[level] = true end function commands.autofinishstructurelevels() for i=1,#levels do if levels[i] then context.finalizeautostructurelevel() end end levels = { } end -- interface (some are actually already commands, like sections.fullnumber) commands.structurenumber = function() sections.fullnumber() end commands.structuretitle = function() sections.title () end commands.structurevariable = function(name) sections.structuredata(nil,name) end commands.structureuservariable = function(name) sections.userdata (nil,name) end commands.structurecatcodedget = function(name) sections.structuredata(nil,name,nil,true) end commands.structuregivencatcodedget = function(name,catcode) sections.structuredata(nil,name,nil,catcode) end commands.structureautocatcodedget = function(name,catcode) sections.structuredata(nil,name,nil,catcode) end commands.namedstructurevariable = function(depth,name) sections.structuredata(depth,name) end commands.namedstructureuservariable = function(depth,name) sections.userdata (depth,name) end -- function commands.setsectionblock (name) context(sections.setblock(name)) end function commands.pushsectionblock(name) context(sections.pushblock(name)) end function commands.popsectionblock () context(sections.popblock()) end -- local byway = "^" .. v_by -- ugly but downward compatible function commands.way(way) context((gsub(way,byway,""))) end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-json.mkiv0000644000175000017500000000134212130411274023757 0ustar norbertnorbert%D \module %D [ file=m-json, %D version=2012.08.03, %D title=\CONTEXT\ Modules, %D subtitle=Json, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a side effect of looking into json. Currently there are %D only a few helpers: %D %D \starttyping %D moduledata.json.tolua (str) %D moduledata.json.tostring(val) %D \stoptyping %D %D Nothing spectacular but maybe handy to have around. \startmodule [json] % check for: utilities.json \registerctxluafile{util-jsn}{} \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-fun.lua0000644000175000017500000001220712130411274024140 0ustar norbertnorbertreturn { internals = { -- "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", -- "originlength", "tickstep ", "ticklength", -- "autoarrows", "ahfactor", -- "angleoffset", anglelength", anglemethod", "metapostversion", "maxdimensions", }, commands = { -- "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "acosh", "asinh", "sinh", "cosh", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", -- "halfcircle", "quartercircle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "smoothed", "cornered", "superellipsed", "randomized", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withlinearshading", "withcircularshading", "withfromshadecolor", "withtoshadecolor", "withshading", "shadedinto", "withcircularshade", "withlinearshade", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "withmask", "figure", "register", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "textext", "thetextext", "rawtextext", "textextoffset", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", -- redefined usign textext -- "property", "withproperties", "properties", -- not yet "set_linear_vector", "linear_shade", "define_linear_shade", "define_circular_linear_shade", "define_sampled_linear_shade", "set_circular_vector", "circular_shade", "define_circular_shade", "define_circular_linear_shade", "define_sampled_circular_shade", "space", "CRLF", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "readfile", "clearxy", "unitvector", "center", -- redefined "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", -- "pathconnectors", "function", "constructedpath", "constructedpairs", "punkedfunction", "curvedfunction", "tightfunction", "punkedpath", "curvedpath", "tightpath", "punkedpairs", "curvedpairs", "tightpairs", -- "evenly", "oddly", -- "condition", -- "pushcurrentpicture", "popcurrentpicture", -- "arrowpath", -- "colorlike", "dowithpath", "rangepath", "straightpath", "addbackground", -- "cleanstring", "asciistring", "setunstringed", "getunstringed", "unstringed", -- "showgrid", -- "phantom", -- "xshifted", "yshifted", -- "drawarrowpath", "midarrowhead", "arrowheadonpath", -- "drawxticks", "drawyticks", "drawticks", -- "pointarrow", -- "thefreelabel", "freelabel", "freedotlabel", -- "anglebetween", "colorcircle", -- "remapcolors", "normalcolors", "resetcolormap", "remapcolor", "remappedcolor", -- "recolor", "refill", "redraw", "retext", "untext", "restroke", "reprocess", "repathed", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", -- -- "swappointlabels", "normalfill", "normaldraw", "visualizepaths", "naturalizepaths", "drawboundary", "drawwholepath", "visualizeddraw", "visualizedfill", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", -- "decorated", "redecorated", "undecorated", }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/font-trt.lua0000644000175000017500000000354112161703335024155 0ustar norbertnorbertif not modules then modules = { } end modules ['font-trt'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local rawget, dofile, next = rawget, dofile, next --[[ldx--

We provide a simple treatment mechanism (mostly because I want to demonstrate something in a manual). It's one of the few places where an lfg file gets loaded outside the goodies manager.

--ldx]]-- local treatments = utilities.storage.allocate() fonts.treatments = treatments local treatmentdata = { } treatments.data = treatmentdata treatments.filename = "treatments.lfg" -- function treatments.load(name) -- local filename = resolvers.findfile(name) -- if filename and filename ~= "" then -- local goodies = dofile(filename) -- if goodies then -- local treatments = goodies.treatments -- if treatments then -- for name, data in next, treatments do -- treatmentdata[name] = data -- always wins -- end -- end -- end -- end -- end table.setmetatableindex(treatmentdata,function(t,k) local files = resolvers.findfiles(treatments.filename) if files then for i=1,#files do local goodies = dofile(files[i]) if goodies then local treatments = goodies.treatments if treatments then for name, data in next, treatments do if not rawget(t,name) then t[name] = data end end end end end end table.setmetatableindex(treatmentdata,nil) return treatmentdata[k] end) context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-charter.mkiv0000644000175000017500000000306311754241457025767 0ustar norbertnorbert%D \module %D [ file=type-imp-charter, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Charter, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[charter] \starttypescript [\s!serif] [charter] \definefontsynonym [Charter-Roman] [\s!name:CharterBT-Roman] \definefontsynonym [Charter-Italic] [\s!name:CharterBT-Italic] \definefontsynonym [Charter-Bold] [\s!name:CharterBT-Bold] \definefontsynonym [Charter-BoldItalic] [\s!name:CharterBT-BoldItalic] \definefontsynonym [Charter-Slanted] [\s!name:CharterBT-Italic] \definefontsynonym [Charter-BoldSlanted] [\s!name:CharterBT-BoldItalic] \definefontsynonym [Charter-Roman-Caps] [Charter-Roman] \stoptypescript \starttypescript [\s!serif] [charter] [\s!name] \definefontsynonym [Serif] [Charter-Roman] \definefontsynonym [SerifItalic] [Charter-Italic] \definefontsynonym [SerifBold] [Charter-Bold] \definefontsynonym [SerifBoldItalic] [Charter-BoldItalic] \definefontsynonym [SerifSlanted] [Charter-Slanted] \definefontsynonym [SerifBoldSlanted] [Charter-BoldSlanted] \definefontsynonym [SerifCaps] [Charter-Roman-Caps] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/page-not.mkii0000644000175000017500000000327711754241457024301 0ustar norbertnorbert%D \module %D [ file=page-nnt, %D version=2002.04.16, %D title=\CONTEXT\ Page Macros, %D subtitle=Footnotes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Footnotes} %D Terrible hacks: we need to share save/restore %D We've moved some footnote handling to a separate page %D module. The macros below are used in the single and multi %D column page handlers and permit mixed usage of column and %D page notes. \unprotect \def\checkbegincolumnfootnotes % should happen inside otr {\ifcase\clevernotes \erasenotebackup \else \doflushnotes \savenotecontent \fi \savenotedata \checknotes} \def\checkendcolumnfootnotes {\restorenotedata % maybe better just \checknotes \ifcase\clevernotes\else \restorenotecontent \fi} \def\checksinglecolumnfootnotes {\checknotes} % njet : \restorenotedata \newdimen\totalinsertionheight \def\settotalinsertionheight {\calculatetotalnoteheight \totalinsertionheight\totalnoteheight \addinsertionheight\topins\to\totalinsertionheight \addinsertionheight\botins\to\totalinsertionheight} % hm \def\checkbegincolumnfootnotes % should happen inside otr {\ifcase\clevernotes \erasenotebackup \else \doflushnotes \savenotecontent \fi \savenotedata \checknotes} \def\checkendcolumnfootnotes {\restorenotedata \ifinsidecolumns \ifcase\clevernotes\else \restorenotecontent \fi \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mod-00.mkiv0000644000175000017500000000106512130411274024012 0ustar norbertnorbert%D \module %D [ file=s-mod-00, %D version=very-old, %D title=\CONTEXT\ Style File, %D subtitle=Documentation Base Environment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startmode[nocode] % \definieerbuffer[definition] % ignore \def\startdefinition#1\stopdefinition{} \stopmode \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-pol.mkii0000644000175000017500000002024011754241457024270 0ustar norbertnorbert%D \module %D [ file=enco-pol, %D version=2000.05.07, % 1999.28.8, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Polish Mixed Encoding, %D author={Taco Hoekwater \& Hans Hagen}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This encoding will go but the regime will remain. %D Polish native encoding; normally polish users will use %D translate=cp1250pl in combination with ec encoding. \startmapping[pl0] \resetcaserange 128 to 255 \definecaseswap 161 129 % a ogonek \definecaseswap 162 130 % c acute \definecaseswap 166 134 % e ogonek \definecaseswap 170 138 % l crossed \definecaseswap 171 139 % n acute \definecaseswap 177 145 % s acute \definecaseswap 185 153 % z acute \definecaseswap 187 155 % z dotaccent \definecaseswap 243 211 % o acute % \definecasemap 161 161 129 % a ogonek % \definecasemap 162 162 130 % c acute % \definecasemap 166 166 134 % e ogonek % \definecasemap 170 170 138 % l crossed % \definecasemap 171 171 139 % n acute % \definecasemap 177 177 145 % s acute % \definecasemap 185 185 153 % z acute % \definecasemap 187 187 155 % z dotaccent % \definecasemap 243 243 211 % o acute % \definecasemap 129 161 129 % A ogonek % \definecasemap 130 162 130 % C acute % \definecasemap 134 166 134 % E ogonek % \definecasemap 138 170 138 % L crossed % \definecasemap 139 171 139 % N acute % \definecasemap 145 177 145 % S acute % \definecasemap 153 185 153 % Z acute % \definecasemap 155 187 155 % Z dotaccent % \definecasemap 211 243 211 % O acute \stopmapping \startmapping[pl0] \definespacemap 129 999 % A ogonek \definespacemap 130 999 % C acute \definespacemap 134 999 % E ogonek \definespacemap 138 999 % L crossed \definespacemap 139 999 % N acute \definespacemap 211 999 % O acute \definespacemap 145 999 % S acute \definespacemap 153 999 % Z acute \definespacemap 155 999 % Z dot \stopmapping \startencoding[pl0][pl0] \definecharacter Aogonek 129 \definecharacter Cacute 130 \definecharacter Eogonek 134 \definecharacter Lstroke 138 \definecharacter Nacute 139 \definecharacter Sacute 145 \definecharacter Zacute 153 \definecharacter Zdotaccent 155 \definecharacter aogonek 161 \definecharacter cacute 162 \definecharacter eogonek 166 \definecharacter lstroke 170 \definecharacter nacute 171 \definecharacter sacute 177 \definecharacter zacute 185 \definecharacter zdotaccent 187 \definecharacter Oacute 211 \definecharacter oacute 243 \stopencoding \startencoding[pl0][pl0] \definecharacter leftguillemot 174 \definecharacter rightguillemot 175 \definecharacter guilsingleleft 174 \definecharacter guilsingleright 175 \stopencoding % obsolete % % \startencoding[pl0] % % \definesortkey {161} {a}{a}{\k a} \definesortkey {129} {a}{a}{\k a} % \definesortkey {162} {c}{a}{\'c} \definesortkey {130} {c}{a}{\'c} % \definesortkey {166} {e}{a}{\k e} \definesortkey {134} {e}{a}{\k e} % \definesortkey {170} {l}{a}{\l } \definesortkey {138} {l}{a}{\l } % \definesortkey {171} {n}{a}{\'n} \definesortkey {139} {n}{a}{\'n} % \definesortkey {177} {s}{a}{\'s} \definesortkey {145} {s}{a}{\'s} % \definesortkey {185} {z}{a}{\'z} \definesortkey {153} {z}{a}{\'z} % \definesortkey {187} {z}{b}{\.z} \definesortkey {155} {z}{b}{\.z} % \definesortkey {243} {o}{a}{\'o} \definesortkey {211} {o}{a}{\'o} % % \definesortkey {\'c} {c}{a}{\'c} \definesortkey {\'C} {c}{a}{\'c} % \definesortkey {\'n} {n}{a}{\'n} \definesortkey {\'N} {n}{a}{\'n} % \definesortkey {\'o} {o}{a}{\'o} \definesortkey {\'O} {o}{a}{\'o} % \definesortkey {\'s} {s}{a}{\'s} \definesortkey {\'S} {s}{a}{\'s} % \definesortkey {\'z} {z}{a}{\'z} \definesortkey {\'Z} {z}{a}{\'z} % \definesortkey {\.z} {z}{b}{\.z} \definesortkey {\.Z} {z}{b}{\.z} % \definesortkey {\k a}{a}{a}{\k a} \definesortkey {\k A}{a}{a}{\k a} % \definesortkey {\k e}{e}{a}{\k e} \definesortkey {\k E}{e}{a}{\k e} % \definesortkey {\l } {l}{a}{\l} \definesortkey {\L } {l}{a}{\l} % % \stopencoding %D Polish CP-1250 encoding. % \startmapping[pl1] % % % \resetcaserange 128 to 255 % % \definecasemap 185 185 165 % a ogonek % \definecasemap 230 230 198 % c acute % \definecasemap 234 234 202 % e ogonek % \definecasemap 179 179 163 % l crossed % \definecasemap 241 241 209 % n acute % \definecasemap 243 243 211 % o acute % \definecasemap 156 156 140 % s acute % \definecasemap 159 159 143 % z acute % \definecasemap 191 191 175 % z dot % % \definecasemap 165 165 185 % A ogonek % \definecasemap 198 198 230 % C acute % \definecasemap 202 202 234 % E ogonek % \definecasemap 163 163 179 % L crossed % \definecasemap 209 209 241 % N acute % \definecasemap 211 211 243 % O acute % \definecasemap 140 140 156 % S acute % \definecasemap 143 143 159 % Z acute % \definecasemap 175 175 191 % Z dot % % \stopmapping % % \startmapping[pl1] % % \definespacemap 165 999 % A ogonek % \definespacemap 198 999 % C acute % \definespacemap 202 999 % E ogonek % \definespacemap 163 999 % L crossed % \definespacemap 209 999 % N acute % \definespacemap 211 999 % O acute % \definespacemap 140 999 % S acute % \definespacemap 143 999 % Z acute % \definespacemap 175 999 % Z dot % % \stopmapping % % \startencoding[pl1] % % \definecharacter Sacute 140 % \definecharacter Zacute 143 % \definecharacter sacute 156 % \definecharacter zacute 159 % \definecharacter Lstroke 163 % \definecharacter Aogonek 165 % \definecharacter Zdotaccent 175 % \definecharacter lstroke 179 % \definecharacter aogonek 185 % \definecharacter zdotaccent 191 % \definecharacter Cacute 198 % \definecharacter Eogonek 202 % \definecharacter Nacute 209 % \definecharacter Oacute 211 % \definecharacter cacute 230 % \definecharacter eogonek 234 % \definecharacter nacute 241 % \definecharacter oacute 243 % % \stopencoding % % \startencoding[pl1] % % \definecharacter leftguillemot 174 % \definecharacter rightguillemot 175 % \definecharacter guilsingleleft 174 % \definecharacter guilsingleright 175 % % \stopencoding %D Polish ISO-8859-2 encoding. % \startmapping[pl2] % % \resetcaserange 128 to 255 % % \definecasemap 177 177 161 % a ogonek % \definecasemap 230 230 198 % c acute % \definecasemap 234 234 202 % e ogonek % \definecasemap 179 179 163 % l crossed % \definecasemap 241 241 209 % n acute % \definecasemap 243 243 211 % o acute % \definecasemap 182 182 166 % s acute % \definecasemap 188 188 172 % z acute % \definecasemap 191 191 175 % z dotaccent % % \definecasemap 161 161 177 % A ogonek % \definecasemap 198 198 230 % C acute % \definecasemap 202 202 234 % E ogonek % \definecasemap 163 163 179 % L crossed % \definecasemap 209 209 241 % N acute % \definecasemap 211 211 243 % O acute % \definecasemap 166 166 182 % S acute % \definecasemap 172 172 188 % Z acute % \definecasemap 175 175 191 % Z dotaccent % % \stopmapping % % \startmapping[pl2] % % \definespacemap 161 999 % A ogonek % \definespacemap 198 999 % C acute % \definespacemap 202 999 % E ogonek % \definespacemap 163 999 % L crossed % \definespacemap 209 999 % N acute % \definespacemap 211 999 % O acute % \definespacemap 166 999 % S acute % \definespacemap 172 999 % Z acute % \definespacemap 175 999 % Z dot % % \stopmapping % % \startencoding[pl2] % % \definecharacter Aogonek 161 % \definecharacter Lstroke 163 % \definecharacter Sacute 166 % \definecharacter Zacute 172 % \definecharacter Zdotaccent 175 % \definecharacter aogonek 177 % \definecharacter lstroke 179 % \definecharacter sacute 182 % \definecharacter zacute 188 % \definecharacter zdotaccent 191 % \definecharacter Cacute 198 % \definecharacter Eogonek 202 % \definecharacter Nacute 209 % \definecharacter Oacute 211 % \definecharacter cacute 230 % \definecharacter eogonek 234 % \definecharacter nacute 241 % \definecharacter oacute 243 % % \stopencoding % % \startencoding[pl2] % % \definecharacter leftguillemot 174 % \definecharacter rightguillemot 175 % \definecharacter guilsingleleft 174 % \definecharacter guilsingleright 175 % % \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-str.mkii0000644000175000017500000002540611754241457024307 0ustar norbertnorbert%D \module %D [ file=page-str, %D version=2006.03.21, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Streams, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Page Streams} %D The first version of this component of \CONTEXT\ was written %D for Thomas Schmitz who asked for parallel page streams. While %D playing with the code, I decided to make it into a component %D that can be used to construct all kind of stream related %D mechanisms. Because I could apply this feature in a project, %D there is some additional code here (related to graphics). %D %D These macros were written while listening to and watching the DVD %D \quotation {Rush In Rio}. % not yet ok in mkiv ... marknotes \unprotect % taco, what is the best way to append a otr chunk (insert pagediscards?) \let\currentoutputstream\s!default \newtoks\defaultstreamoutput \defaultstreamoutput=\OTRONEoutput \newtoks\normalstreamoutput \normalstreamoutput={\saveoutputstream[\currentoutputstream]} \newcount\streampenalty \streampenalty=-101010101 \ifx\multicolumnseject\undefined \else \let\normalmulticolumnseject\multicolumnseject \def\multicolumnseject{\ifinoutputstream\else\normalmulticolumnseject\fi} \fi \newif\ifinoutputstream \newtoks \everyenableoutputstream \appendtoks \flushsidefloats \to \everyenableoutputstream \def\enableoutputstream[#1]% {\the\everyenableoutputstream \finishoutputstream \writestatus{otr}{switching to output stream #1}% \inoutputstreamtrue \xdef\currentoutputstream{#1}} \def\disableoutputstream {\finishoutputstream \writestatus{otr}{switching to default output stream}% \inoutputstreamfalse \global\let\currentoutputstream\s!default} \def\useoutputstream[#1]% {\writestatus{otr}{using output stream #1}% \xdef\currentoutputstream{#1}} \def\handlestreamoutput {\doifelse\currentoutputstream\s!default {\ifnum\outputpenalty=\streampenalty \ifvoid\normalpagebox \else \unvbox\normalpagebox \fi \else \the\defaultstreamoutput \fi} {\the\normalstreamoutput}} \OTRONEoutput{\handlestreamoutput} \def\defineoutputstream[#1]% {\doifundefined{otrs:#1}{\expandafter\newbox\csname otrs:#1\endcsname}} \def\outputstreamtag#1% {\csname otrs:#1\endcsname} \def\finishoutputstream % todo: installoutput {\endgraf \penalty\streampenalty \endgraf} \def\saveoutputstream[#1]% {\writestatus{otr}{saving otr stream #1}% \ifvoid\normalpagebox \global\setbox\outputstreamtag{#1}\emptybox \else \global\setbox\outputstreamtag{#1}\vbox {\presetoutputstream \ifvoid\outputstreamtag{#1}\else\unvbox\outputstreamtag{#1}\fi \scratchdimen\dp\normalpagebox \unvbox\normalpagebox \vskip-\scratchdimen \kern\strutdepth}% \fi} % \def\presetoutputstream % {\pdffirstlineheight\strutheight % \pdflastlinedepth \strutdepth % \pdfeachlineheight \strutheight % \pdfeachlinedepth \strutdepth} \let\presetoutputstream\relax \def\outputstreamht [#1]{\ht\outputstreamtag{#1}} \def\outputstreamdp [#1]{\dp\outputstreamtag{#1}} \def\outputstreamwd [#1]{\wd\outputstreamtag{#1}} %def\outputstreambox [#1]{\ifvoid\outputstreamtag{#1}\else\box \outputstreamtag{#1}\fi} %def\outputstreamcopy[#1]{\ifvoid\outputstreamtag{#1}\else\copy\outputstreamtag{#1}\fi} \def\dowithoutputstreambox#1[#2]{\ifvoid\outputstreamtag{#2}\else#1\outputstreamtag{#2}\fi} \def\outputstreamcopy {\dowithoutputstreambox\copy } \def\outputstreambox {\dowithoutputstreambox\box } \def\outputstreamunvcopy{\dowithoutputstreambox\unvcopy} \def\outputstreamunvbox {\dowithoutputstreambox\unvbox } %D Footnotes don't go along with streams, simply because there is no %D way to re-split inserts. A dirty way out is to use marks and store %D notes that way. \def\definemarknote {\dodoubleempty\dodefinemarknote} \def\dodefinemarknote[#1][#2]% {\definemarking[mn:#1]% \setvalue{mn:#1:n}{0}% \getparameters [mn:#1] [\c!before=, \c!after=, \c!inbetween=\endgraf, \c!command=\firstofoneargument, #2]} \def\setmarknote[#1]#2% {\doglobal\incrementvalue{mn:#1:n}% \setgvalue{mn:#1:t:\getvalue{mn:#1:n}}{#2}% \expanded{\marking[mn:#1]{\getvalue{mn:#1:n}}}} \def\flushmarknotes[#1]% assumes split {\begingroup % \edef\firstmarknote{0\fetchmark[mn:#1][column:first]}% % \edef\lastmarknote {0\fetchmark[mn:#1][column:last]}% % \ifnum\firstmarknote<\lastmarknote\relax % \getvalue{mn:#1\c!before}% % \dostepwiserecurse\firstmarknote\lastmarknote\plusone % {\ifnum\recurselevel>\firstmarknote\relax % \ifnum\recurselevel<\lastmarknote\relax % \getvalue{mn:#1\c!inbetween}% % \fi % \fi % \getvalue{mn:#1\c!command}{\getvalue{mn:#1:t:\recurselevel}}}% % \getvalue{mn:#1\c!after}% % \fi \endgroup} \def\erasemarknotes[#1]% {\begingroup \edef\firstmarknote{0\fetchmark[mn:#1][column:first]}% \edef\lastmarknote {0\fetchmark[mn:#1][column:last]}% \dostepwiserecurse\firstmarknote\lastmarknote\plusone {\global\letvalue{mn:#1:t:\recurselevel}\empty}% \endgroup} %D The next section implements synchronization of (currently %D two) output streams. In due time we will implement both a %D vertical and horizontal system, as well as alternative %D splitters (firstpagevsize, succesivevsize etc). \def\synchronizeoutputstreams[#1]% [one,two] [left,right] {\bgroup \getfromcommalist[#1][\plusone]\let\firstoutputstream \commalistelement \getfromcommalist[#1][\plustwo]\let\secondoutputstream\commalistelement \forgeteverypar \def\roundingeps{50sp}% \getboxheight\dimen0\of\box\outputstreamtag\firstoutputstream \getboxheight\dimen2\of\box\outputstreamtag\secondoutputstream \scratchdimen\dimexpr\dimen0-\dimen2\relax \ifdim\scratchdimen<-\roundingeps\relax \scratchdimen-\scratchdimen \writestatus{sync}{compensating first stream: \the\scratchdimen/\number\scratchdimen}% \getroundednoflines\scratchdimen \global\setbox\outputstreamtag\firstoutputstream\vbox {\presetoutputstream \unvbox\outputstreamtag\firstoutputstream\dorecurse\noflines\crlf}% \else\ifdim\scratchdimen>\roundingeps\relax \writestatus{sync}{compensating second stream: \the\scratchdimen/\number\scratchdimen}% \getroundednoflines\scratchdimen \global\setbox\outputstreamtag\secondoutputstream\vbox {\presetoutputstream \unvbox\outputstreamtag\secondoutputstream\dorecurse\noflines\crlf}% \else \writestatus{sync}{no need to compensate streams: \the\scratchdimen/\number\scratchdimen}% \fi\fi \egroup} \def\nofoutputstreamsplitlines {\v!auto} % {40} \def\outputstreamsplittolerance {-5} \def\flushoutputstreampages[#1]% {\bgroup \getfromcommalist[#1][\plusone]\let\firstoutputstream \commalistelement \getfromcommalist[#1][\plustwo]\let\secondoutputstream\commalistelement \doloop {\flushoutputstreams[#1]% \ifvoid\outputstreamtag\firstoutputstream \ifvoid\outputstreamtag\secondoutputstream \exitloop \else \global\setbox\outputstreamtag\firstoutputstream\vbox{\strut}% \fi \else \ifvoid\outputstreamtag\secondoutputstream \global\setbox\outputstreamtag\secondoutputstream\vbox{\strut}% \else % okay \fi \fi}% \egroup} \def\flushoutputstreams[#1]% {\bgroup \getfromcommalist[#1][\plusone]\let\firstoutputstream \commalistelement \getfromcommalist[#1][\plustwo]\let\secondoutputstream\commalistelement \doif\nofoutputstreamsplitlines\v!auto {\getrawnoflines\textheight \edef\nofoutputstreamsplitlines{\the\noflines}}% \splittopskip\strutheight \scratchdimen\nofoutputstreamsplitlines\lineheight\relax \unless\iffalse \dimen0\scratchdimen \doloop {\setbox4\copy\outputstreamtag\firstoutputstream \setbox0\vsplit4 to \dimen0 \setbox0\vbox {\directsetup{stream:\firstoutputstream:top}% \unvbox0 \directsetup{stream:\firstoutputstream:bottom}}% \ifdim\ht0>\scratchdimen \advance\dimen0-\lineheight \else \exitloop \fi}% \scratchdimen\dimen0 \dimen2\scratchdimen \doloop {\setbox6\copy\outputstreamtag\secondoutputstream \setbox2\vsplit6 to \dimen2 \setbox2\vbox {\directsetup{stream:\secondoutputstream:top}% \unvbox0 \directsetup{stream:\secondoutputstream:bottom}}% \ifdim\ht2>\scratchdimen \advance\dimen2-\lineheight \else \exitloop \fi}% \scratchdimen\dimen2 \fi \setbox4\copy\outputstreamtag\firstoutputstream \setbox6\copy\outputstreamtag\secondoutputstream \scratchcounter\zerocount \doloop {\setbox0\vsplit4 to \scratchdimen \setbox0\vbox{\unvbox0}% \setbox2\vsplit6 to \scratchdimen \setbox2\vbox{\unvbox2}% \ifvoid4 \exitloop \else\ifvoid6 \exitloop \else \dimen8=\dimexpr\ht4-\ht6\relax \ifdim\dimen8<\zeropoint\dimen8=-\dimen8\relax\fi \advance\scratchcounter\plusone \ifdim\dimen8<.5\lineheight \exitloop \else\ifnum\outputstreamsplittolerance>\zeropoint \ifnum\scratchcounter>\outputstreamsplittolerance\relax \exitloop \else \advance\scratchdimen\lineheight \fi \else\ifnum\outputstreamsplittolerance<\zeropoint \ifnum-\scratchcounter<\outputstreamsplittolerance\relax \exitloop \else \advance\scratchdimen-\lineheight \fi \else\ifnum\outputstreamsplittolerance=\zeropoint \exitloop \fi\fi\fi\fi \fi\fi}% \setbox0\vsplit\outputstreamtag\firstoutputstream to \scratchdimen \setbox0\vbox to \textheight {\presetoutputstream \directsetup{stream:\firstoutputstream:top}% \unvbox0 \vfill \directsetup{stream:\firstoutputstream:bottom}}% \setbox2\vsplit\outputstreamtag\secondoutputstream to \scratchdimen \setbox2\vbox to \textheight {\presetoutputstream \directsetup{stream:\secondoutputstream:top}% \unvbox2 \vfill \directsetup{stream:\secondoutputstream:bottom}}% \directsetup{stream:\firstoutputstream:reset}% \directsetup{stream:\secondoutputstream:reset}% \page[even] \box0\vfill\page \box2\vfill\page \egroup} %D Because many arrangements are possible, we will implement %D some examples in a runtime loadable module \type {m-streams}. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-imp-rhh.mkiv0000644000175000017500000000210511754241457025054 0ustar norbertnorbert%D \module %D [ file=java-rhh, %D version=2010.02.01, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Runtime Highlight Hack, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 As hightlighting is rather intrusive it makes sense to turn it off when %D using nice appearances. % app.runtimeHighlightColor = [ "T" ] ; % % var SavedAlwaysShowFocus = app.alwaysShowFocus ; % app.alwaysShowFocus = true ; % "app.alwaysShowFocus = SavedAlwaysShowFocus ; " \startJSpreamble RuntimeHighlightHack used now var SavedHighlightState = app.runtimeHighlight ; var SavedFocusRectState = app.focusRect ; app.runtimeHighlight = false ; app.focusRect = true ; this.setAction("WillClose", "app.runtimeHighlight = SavedHighlightState ; " + "app.focusRect = SavedFocusRectState ; " ) ; \stopJSpreamble \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-u3d.lua0000644000175000017500000000333212130411274024021 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-u3d'] = { version = 1.001, comment = "companion to grph-inc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- see lpdf-u3d.lua for comment -- maybe: backends.codeinjections.insertu3d local trace_inclusion = false trackers.register("figures.inclusion", function(v) trace_inclusion = v end) local report_u3d = logs.reporter("graphics","u3d") local figures = figures local context = context local nodeinjections = backends.nodeinjections local todimen = string.todimen function figures.checkers.u3d(data) local dr, du, ds = data.request, data.used, data.status local width = todimen(dr.width or figures.defaultwidth) local height = todimen(dr.height or figures.defaultheight) local foundname = du.fullname dr.width, dr.height = width, height du.width, du.height, du.foundname = width, height, foundname if trace_inclusion then report_u3d("including u3d %a, width %p, height %p",foundname,width,height) end context.startfoundexternalfigure(width .. "sp",height .. "sp") context(function() nodeinjections.insertu3d { foundname = foundname, width = width, height = height, factor = number.dimenfactors.bp, display = dr.display, controls = dr.controls, label = dr.label, } end) context.stopfoundexternalfigure() return data end figures.includers.u3d = figures.includers.nongeneric figures.registersuffix("u3d","u3d") figures.registersuffix("prc","u3d") context-2013.05.28.20130704/texmf-dist/tex/context/base/page-imp.mkii0000644000175000017500000016253011754241457024264 0ustar norbertnorbert%D \module %D [ file=page-imp, % was: core-pag, %D version=1998.01.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Pagebody Building (Imposition), %D author=Hans Hagen & Willi Egger, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % much of this can more to run time loading ! \writestatus{loading}{ConTeXt Page Macros / Pagebody Building} \unprotect % sizing bug: % % \setuppapersize[A4][A4,landscape] \setuparranging[2UP] \showframe % % \starttext \dorecurse{10}{\input tufte \par} \stoptext % to be moved code: \newif\ifclipprintbox \clipprintboxtrue %newif\ifclippagebox \clippageboxtrue \def\clippedprintbox#1#2% can be made more efficient, see other clipper {\ifclipprintbox \!!widthc \pagebackgroundoffset \!!widtha \dimexpr\paperwidth + \!!widthc\relax \!!heighta\dimexpr\paperheight+2\!!widthc\relax \setbox#2\vbox to \paperheight{\vfill\box#2}% \ht#2\paperheight \wd#2\paperwidth \setbox#2\vbox {\framed [\c!offset=\!!widthc,\c!strut=\v!no,\c!frame=\v!off] {\box#2}}% \setbox#2\hbox to \paperwidth {\ifcase#1\relax \!!widthb\zeropoint \hskip-\!!widthc \else \!!widthb\!!widthc \fi \lower\!!widthc\hbox {\clip [\c!width=\!!widtha,\c!height=\!!heighta, \c!hoffset=\!!widthb,\c!voffset=\zeropoint] {\box#2}}}% \wd#2\paperwidth \ht#2\paperheight \fi \box#2\relax} \let\clippagebox \gobbleoneargument \let\clipprintbox\gobbleoneargument % \setuppagenumbering[alternative=doublesided] % \setupcolors[state=start] % \setuppapersize[A4][A4,oversized] % \setuplayout[location=middle,clipoffset=5mm] % \setupbackgrounds % [page] % [frame=on,rulethickness=1mm, % backgroundoffset=10mm,background=color,backgroundcolor=red] % \starttext \dorecurse{10}{\input tufte \par} \stoptext \def\clippagebox#1% {\ifdim\@@lyclipoffset>\zeropoint \!!widtha \wd#1% \!!heighta\ht#1% \!!deptha \dp#1% \setbox#1\hbox {\!!widthb \@@lyclipoffset \advance\!!heighta\dimexpr\!!deptha+2\!!widthb\relax \advance\!!widtha \!!widthb \doifbothsides {\advance\!!widtha\!!widthb \!!widthc-\!!widthb \hskip\!!widthc}% {\!!widthc\zeropoint} {\!!widthc-\!!widthb \hskip\!!widthc}% \lower\!!widthb\hbox {\clip [\c!hoffset=\!!widthc, \c!voffset=-\!!widthb, \c!width=\!!widtha, \c!height=\!!heighta]% {\box#1}}}% \wd#1\!!widtha \ht#1\!!heighta \dp#1\!!deptha \fi} %D \macros %D {starttextdata} %D %D This is a user macro (appending to every last shipout is not %D really user friendly. \newtoks \collectedtextdata \long\def\starttextdata#1\stoptextdata {\doglobal\appendtoks#1\to\collectedtextdata} \def\flushtextdata {\vsmashed{\the\collectedtextdata}% all dimensions zero \global\collectedtextdata\emptytoks \globallet\flushtextdata\donothing} \prependtoks \flushtextdata \to \everylastshipout % moved code: % \def\myshipout#1% % {\beforeshipout % voor de pagebody dus ! % \dontshowcomposition % \ifarrangingpages\@EA\actualarrange\else\@EA\actualshipout\fi % {\thisisrealpage\realfolio#1}% % \gotonextrealpage % \aftershipout} \def\installpagehandler#1#2% % a handler takes one argument: something to be boxed {\setvalue{\??pp:\c!method:#1}{#2}} % and shipped out (don't depend on the exact package) \installpagehandler\v!normal {\ifarrangingpages\expandafter\actualarrange\else\expandafter\actualshipout\fi} \def\myshipout#1% {\beforeshipout % voor de pagebody dus ! \dontshowcomposition \executeifdefined{\??pp:\c!method:\@@ppmethod}\gobbleoneargument{\thisisrealpage\realfolio#1}% \gotonextrealpage \aftershipout} \newbox\postponedcontent \def\flushatshipout {\dowithnextbox {\global\setbox\postponedcontent\hbox to \zeropoint {%\hskip-\maxdimen % niet hier, gaat mis in acrobat (clipt) \unhbox\postponedcontent\unhbox\nextbox}% \ht\postponedcontent\zeropoint \dp\postponedcontent\zeropoint \wd\postponedcontent\zeropoint}% \hbox} % \starttypen % \def\pagestoshipout{1,3,5} % \stoptypen \newcount\shippedoutpages \let\pagestoshipout\empty % {1,3,6} \chardef\whichpagetoshipout=0 % 0=all 1=odd 2=even \ifx\finalizeshipoutbox\undefined \let\finalizeshipoutbox\firstofoneargument \fi \def\actualshipout#1% {\global\advance\shippedoutpages\plusone % this is not resource safe! \ifx\pagestoshipout\empty \ifcase\whichpagetoshipout\relax \donetrue \or % 1 \ifodd\shippedoutpages\relax\donetrue\else\donefalse\fi \or % 2 \ifodd\shippedoutpages\relax\donefalse\else\donetrue\fi \else \donetrue \fi \else % testen, aangepast / expanded nodig ? \expanded{\doifinsetelse{\the\shippedoutpages}{\pagestoshipout}}% \donetrue\donefalse \fi \ifdone \shipout\vbox {\forgetall \offinterlineskip \dontcomplain \scratchdimen-1in \vskip\scratchdimen \hskip\scratchdimen \hbox % \setbox0=\box.. is nicer {\setbox0\hbox{\finalizeshipoutbox{#1}}% just in case there are objects there, hook for testing \setbox\scratchbox\hbox {% before the main one ! \ifcase\realfolio \or \the\everyfirstshipout \global\everyfirstshipout\emptytoks \fi % the main one \the\everyshipout\relax % always last (and after the main one) \ifnum\realpageno=\lastpage\relax \the\everylastshipout \global\everylastshipout\emptytoks \fi}% \smashbox\scratchbox \box\scratchbox \box\postponedcontent % evt ver naar links ! \box0}}% \else \message {[\ifarrangingpages arranged \fi page \ifarrangingpages\the\arrangeno\else\the\realpageno\fi\normalspace not flushed]}% \setbox0\hbox{#1}% \deadcycles\zerocount \fi} \def\actualarrange#1% {\setbox0\hbox{\thisisrealpage{\realfolio}#1}% \pusharrangedpage0% \deadcycles\zerocount} %D We need a couple of boxes for duplex printing \unknown \newbox\arrangedpageA \newbox\arrangedpageB %D \unknown\ and some for simulating big sheets. \newbox\arrangedpageC \newbox\arrangedpageD \newbox\arrangedpageE \newbox\arrangedpageF \newbox\arrangedpageG \newbox\arrangedpageH \newif\ifswaparranged \newif\ifnegatearranged \newif\ifmirrorarranged \newif\ifdoublearranged \newif\ifarrangingdisabled \def\arrangedrotationO{0} \def\arrangedrotationE{0} \newcounter\arrangedpageN \newcounter\arrangedpageM \chardef\arrangedpageT=1 \chardef\arrangedpageX=1 \chardef\arrangedpageY=1 \def\calculatepaperoffsets#1% {\scratchdimen\getvalue{\??pp#1\c!offset}% \divide\scratchdimen \arrangedpageX \global\advance\paperwidth -2\scratchdimen \scratchdimen\getvalue{\??pp#1\c!offset}% \divide\scratchdimen \arrangedpageY \global\advance\paperheight-2\scratchdimen} \newconditional\arrangedbackgroundokay % more ifs -> conditionals \def\setuparranging[#1]% {\ifarrangingdisabled \else \doifelse{#1}\v!disable {\global\arrangingdisabledtrue} {\global\arrangingdisabledfalse}% \global\arrangingpagestrue \global\negatearrangedfalse \global\mirrorarrangedfalse \global\doublearrangedfalse \gdef\arrangedrotationO{0}% \gdef\arrangedrotationE{180}% \processallactionsinset [#1] [ \v!mirrored=>\global\mirrorarrangedtrue, \v!doublesided=>\global\doublearrangedtrue, \v!negative=>\global\negatearrangedtrue, \v!rotated=>\gdef\arrangedrotationO {90}\gdef\arrangedrotationE{270}, 90=>\gdef\arrangedrotationO {90}\gdef\arrangedrotationE{270}, 180=>\gdef\arrangedrotationO{180}\gdef\arrangedrotationE{0}, 270=>\gdef\arrangedrotationO{270}\gdef\arrangedrotationE{90}, \s!reset=>\global\arrangingpagesfalse, \v!background=>\global\settrue\arrangedbackgroundokay, \s!unknown=>\checkinstalledpagearrangement\commalistelement]% % no \s!default=> we can have aaa,,bbb \ifx\handlearrangedpage\undefined \global\arrangingpagesfalse \fi \doifcommonelse{#1}{90,270,\v!rotated} {\swapmacros\horizontalcutmarks\verticalcutmarks}{}% ugly solution \setuppapersize \ifarrangingpages \abortutilitygeneration \fi \fi} \def\installpagearrangement #1 % {\setgvalue{\??pp\??pp#1}} \def\checkinstalledpagearrangement#1% can be empty: aaa,,bbb {\executeifdefined{\??pp\??pp#1}\donothing} \def\dosetuparrangement#1#2#3#4#5#6#7#8% {\global\chardef\arrangedpageX #1% \global\chardef\arrangedpageY #2% \global\chardef\arrangedpageT #3% \global\chardef\horizontalcutmarks#4% \global\chardef\verticalcutmarks #5% \global\let \pusharrangedpage #6% \global\let \poparrangedpages #7% \global\let \handlearrangedpage#8} \installpagearrangement {\v!normal} {\global\arrangingpagesfalse} \installpagearrangement 2*16 {\dosetuparrangement{4}{4}{16}{5}{5}% \pusharrangedpageTHIRTYTWO\poparrangedpagesAB\relax} \installpagearrangement 2*8 {\dosetuparrangement{4}{2}{8}{5}{3}% \pusharrangedpageSIXTEEN\poparrangedpagesAB\relax} \installpagearrangement 2*4 {\dosetuparrangement{2}{2}{4}{3}{3}% \pusharrangedpageEIGHT\poparrangedpagesAB\relax} \installpagearrangement 2*2 {\dosetuparrangement{2}{1}{2}{3}{2}% \pusharrangedpageFOURA\poparrangedpagesAB\relax} \installpagearrangement 2**2 {\dosetuparrangement{2}{1}{2}{3}{2}% \pusharrangedpageFOURB\poparrangedpagesAB\relax} \installpagearrangement 2SIDE {\dosetuparrangement{2}{1}{2}{3}{2}% \pusharrangedpageSIDETOP\poparrangedpagesTWO\handlearrangedpageSIDE} \installpagearrangement 2TOP {\dosetuparrangement{1}{2}{2}{2}{3}% \pusharrangedpageSIDETOP\poparrangedpagesTWO\handlearrangedpageTOP} \installpagearrangement 2UP {\dosetuparrangement{2}{1}{4}{3}{2}% \pusharrangedpageTWO\poparrangedpagesTWO\handlearrangedpageTWOUP} \installpagearrangement 2DOWN {\dosetuparrangement{1}{2}{4}{2}{3}% \pusharrangedpageTWO\poparrangedpagesTWO\handlearrangedpageTWODOWN} \installpagearrangement 2*4*2 % one defined by Willy Egger: {\dosetuparrangement{2}{2}{4}{3}{3}% \pusharrangedpageSIXTEENTWO\poparrangedpagesAtoD\relax} \installpagearrangement 2*2*4 % onother one of Willy Egger {\dosetuparrangement{2}{1}{8}{3}{2}% \pusharrangedpageSIXTEENFOUR\poparrangedpagesAtoH\relax} \installpagearrangement 2TOPSIDE {\dosetuparrangement{1}{2}{4}{2}{3}% \pusharrangedpageTWOTOPSIDE\poparrangedpagesTWOTOPSIDE\handlearrangedpageTOP} % \def\filluparrangedpages % beware: \realpageno is 1 ahead % {\ifarrangingpages % \scratchcounter-\realpageno % \divide\scratchcounter \arrangedpageT % \multiply\scratchcounter \arrangedpageT % \advance\scratchcounter \realpageno % \advance\scratchcounter \minusone % \dorecurse\scratchcounter{\noheaderandfooterlines\ejectdummypage}% % \fi} \def\filluparrangedpages % beware: \realpageno is 1 ahead {\ifarrangingpages \scratchcounter\numexpr\realpageno-\plusone\relax \dosetmodulo\scratchcounter\arrangedpageT\scratchcounter \ifcase\scratchcounter\else \advance\scratchcounter \plusone \dostepwiserecurse\scratchcounter\arrangedpageT\plusone {\noheaderandfooterlines\ejectdummypage}% \fi \fi} \def\handlearrangedpageXandY#1#2#3#4#5% {\global\setbox#5\hbox to \arrangedpageX\paperwidth {\setbox\scratchbox\vbox to \arrangedpageY\paperheight {\forgetall \offinterlineskip \dontcomplain \vskip#4\paperheight \hskip#3\paperwidth \dorotatebox{\ifcase#2 0\else180\fi}\hbox{\box#1}% \vfill}% \wd\scratchbox\zeropoint \box\scratchbox\box#5\hss}} \def\gotonextarrangepage {\global\advance\arrangeno \plusone \def\pagecutmarksymbol{\the\arrangeno}} \def\outputarrangedbox#1% {\bgroup \gotonextarrangepage \ifnum\arrangedrotationO\arrangedrotationE>\zerocount \setbox#1\vbox {\ifdoublearranged \ifodd\arrangeno \dorotatebox\arrangedrotationO\hbox{\box#1}% \else \dorotatebox\arrangedrotationE\hbox{\box#1}% \fi \else \dorotatebox\arrangedrotationO\hbox{\box#1}% \fi}% \fi \ifmirrorarranged \setbox#1\vbox{\domirrorbox\vbox{\box#1}}% \fi \ifnegatearranged \negatecolorbox{#1}% \fi \finishpagebox#1% \ifconditional\arrangedbackgroundokay\addprintbackground#1\fi \actualshipout{\box#1}% \egroup} %D The format file can be 16K smaller when we postpone the %D real arrangments. Some day ... % TOP % 32/16/8/4/SIDE \def\poparrangedpagesAB {\ifnum\arrangedpageN>\zerocount \dontcomplain \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \doglobal\newcounter\arrangedpageN \fi} \def\pusharrangedpageTHIRTYTWO#1% taco's challenge {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}033\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}003\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}130\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}130\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}033\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}003\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}102\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}132\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}031\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 12 \or \handlearrangedpageXandY{#1}031\arrangedpageA % 13 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 14 \or \handlearrangedpageXandY{#1}102\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}132\arrangedpageA % 16 \or \handlearrangedpageXandY{#1}122\arrangedpageA % 17 \or \handlearrangedpageXandY{#1}112\arrangedpageB % 18 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 19 \or \handlearrangedpageXandY{#1}021\arrangedpageA % 20 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 21 \or \handlearrangedpageXandY{#1}021\arrangedpageB % 22 \or \handlearrangedpageXandY{#1}122\arrangedpageB % 23 \or \handlearrangedpageXandY{#1}112\arrangedpageA % 24 \or \handlearrangedpageXandY{#1}013\arrangedpageA % 25 \or \handlearrangedpageXandY{#1}023\arrangedpageB % 26 \or \handlearrangedpageXandY{#1}120\arrangedpageB % 27 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 28 \or \handlearrangedpageXandY{#1}120\arrangedpageA % 29 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 30 \or \handlearrangedpageXandY{#1}013\arrangedpageB % 31 \or \handlearrangedpageXandY{#1}023\arrangedpageA % 32 \poparrangedpages \fi} \def\pusharrangedpageSIXTEEN#1% changed to match the official way of doing {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}031\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}031\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}130\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}130\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}120\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}120\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 12 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 13 \or \handlearrangedpageXandY{#1}021\arrangedpageB % 14 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}021\arrangedpageA % 16 \poparrangedpages \fi} \def\pusharrangedpageEIGHT#1% changed to match the official way of doing {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}011\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 8 \poparrangedpages \fi} \def\pusharrangedpageFOURA{\pusharrangedpageFOURdo01} \def\pusharrangedpageFOURB{\pusharrangedpageFOURdo10} \def\pusharrangedpageFOURdo#1#2#3% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#3}010\arrangedpageA % 1 \or \handlearrangedpageXandY{#3}0{#1}0\arrangedpageB % 2/3 not {1} \or \handlearrangedpageXandY{#3}0{#2}0\arrangedpageB % 3/2 not {1} \or \handlearrangedpageXandY{#3}000\arrangedpageA % 4 \poparrangedpages \fi} \def\pusharrangedpageSIDETOP#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \poparrangedpages \fi} \def\handlearrangedpageSIDE {\wd\arrangedpageA\paperwidth \wd\arrangedpageB\paperwidth \global\setbox\arrangedpageA\hbox {\box\arrangedpageA\box\arrangedpageB}% \ht\arrangedpageA\paperheight} \def\handlearrangedpageTOP {\ht\arrangedpageA\paperheight \ht\arrangedpageB\paperheight \global\setbox\arrangedpageA\vbox {\forgetall\offinterlineskip\vskip\paperheight \box\arrangedpageA\box\arrangedpageB}% \global\setbox\arrangedpageB\box\scratchbox} % ? % 2UP/2DOWN / 1pt prevents overflow \def\splitoffarrangedpagesTWO {\splittopskip\zeropoint \global\setbox\arrangedpageA\vsplit\arrangedpageB to \onepoint \scratchdimen\dimexpr\ht\arrangedpageB-\onepoint\relax \ifdim\scratchdimen>\onepoint \setbox\scratchbox\vsplit\arrangedpageB to \scratchdimen \fi} \def\handlearrangedpageTWOUP {\splitoffarrangedpagesTWO \ifswaparranged \global\setbox\arrangedpageA\hbox {\clippedprintbox0\arrangedpageA \clippedprintbox1\arrangedpageB}% \swaparrangedfalse \else \global\setbox\arrangedpageA\hbox {\clippedprintbox0\arrangedpageB \clippedprintbox1\arrangedpageA}% \swaparrangedtrue \fi \ht\arrangedpageA\paperheight \global\setbox\arrangedpageB\box\scratchbox} \def\handlearrangedpageTWODOWN {\splitoffarrangedpagesTWO \ht\arrangedpageA\paperheight \ht\arrangedpageB\paperheight \ifswaparranged \global\setbox\arrangedpageA\vbox {\forgetall\offinterlineskip\vskip\paperheight \box\arrangedpageA\box\arrangedpageB}% \swaparrangedfalse \else \global\setbox\arrangedpageA\vbox {\forgetall\offinterlineskip\vskip\paperheight \box\arrangedpageB\box\arrangedpageA}% \swaparrangedtrue \fi \global\setbox\arrangedpageB\box\scratchbox} \def\poparrangedpagesTWO {\ifnum\arrangedpageN>\zerocount \dontcomplain \swaparrangedfalse \doloop {\handlearrangedpage \bgroup \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \ht\arrangedpageA\paperheight \wd\arrangedpageA\paperwidth \outputarrangedbox\arrangedpageA \egroup \ifdim\ht\arrangedpageB=\zeropoint \exitloop \fi}% \doglobal\newcounter\arrangedpageN \fi} \def\pusharrangedpageTWO#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \global\setbox\arrangedpageB\vbox {\forgetall \offinterlineskip \unvbox\arrangedpageB \allowbreak \ht#1\onepoint \dp#1\zeropoint \vbox{\box#1}}} \def\poparrangedpagesTWOTOPSIDE {\ifnum\arrangedpageN>\zerocount \bgroup \gdef\arrangedpageN{2}\poparrangedpagesTWO \let\arrangedpageA\arrangedpageC \let\arrangedpageB\arrangedpageD \gdef\arrangedpageN{2}\poparrangedpagesTWO \doglobal\newcounter\arrangedpageN \egroup \fi} \def\pusharrangedpageTWOTOPSIDE#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 2 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 2 \poparrangedpages \fi} %D Willy Egger's sheet simulations: \def\poparrangedpagesAtoH {\ifnum\arrangedpageN>\zerocount \dontcomplain \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \outputarrangedbox\arrangedpageC \outputarrangedbox\arrangedpageD \outputarrangedbox\arrangedpageE \outputarrangedbox\arrangedpageF \outputarrangedbox\arrangedpageG \outputarrangedbox\arrangedpageH \doglobal\newcounter\arrangedpageN \fi} % to arrange 16 pages on 2 sheets to form one booklet \def\poparrangedpagesAtoD {\ifnum\arrangedpageN>\zerocount \dontcomplain \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \outputarrangedbox\arrangedpageC \outputarrangedbox\arrangedpageD \doglobal\newcounter\arrangedpageN \fi} % to arrange 16 pages on 4 sheets to form one booklet \def\pusharrangedpageSIXTEENFOUR#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageE % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageF % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageG % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageH % 8 \or \handlearrangedpageXandY{#1}010\arrangedpageH % 9 \or \handlearrangedpageXandY{#1}000\arrangedpageG % 10 \or \handlearrangedpageXandY{#1}010\arrangedpageF % 11 \or \handlearrangedpageXandY{#1}000\arrangedpageE % 12 \or \handlearrangedpageXandY{#1}010\arrangedpageD % 13 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 14 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 16 \poparrangedpages \fi} % to arrange 16 pages on 2 sheets to form one booklet \def\pusharrangedpageSIXTEENTWO#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}011\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}011\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}001\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}100\arrangedpageD % 5 \or \handlearrangedpageXandY{#1}110\arrangedpageC % 6 \or \handlearrangedpageXandY{#1}100\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}100\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}100\arrangedpageC % 11 \or \handlearrangedpageXandY{#1}110\arrangedpageD % 12 \or \handlearrangedpageXandY{#1}011\arrangedpageD % 13 \or \handlearrangedpageXandY{#1}001\arrangedpageC % 14 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 16 \poparrangedpages \fi} % % handy for stickers etc, this way we can treat them as page % % \setuppapersize [XY][A4] % \setuppaper [topspace=5mm,backspace=5mm,dx=1mm,dy=1mm,nx=2,ny=6] % \setuplayout [page] [topspace=5mm,backspace=5mm] % \setuplayout [page] % \setuplayout [location=middle] % \setuparranging [XY] % \showframe % % \starttext \dorecurse{30}{test \recurselevel \page} \stoptext \def\pusharrangedpageXY#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \doglobal\increment\arrangedpageM \global\setbox\arrangedpageB\hbox \ifdim\@@ppwidth>\zeropoint to \@@ppwidth \fi {\ifvoid\arrangedpageB\else \unhbox\arrangedpageB \ifdim\@@ppdx>\zeropoint \else \hss\fi \hskip\@@ppdx \ifdim\@@ppdx>\zeropoint \else \hss\fi \fi \box#1}% \ifnum\arrangedpageM<\arrangedpageX\else \global\setbox\arrangedpageA\vbox \ifdim\@@ppheight>\zeropoint to \@@ppheight \fi {\offinterlineskip \ifvoid\arrangedpageA\else \unvbox\arrangedpageA \ifdim\@@ppdy>\zeropoint \else \vss\fi \vskip\@@ppdy \ifdim\@@ppdy>\zeropoint \else \vss\fi \fi \box\arrangedpageB}% \doglobal\newcounter\arrangedpageM \fi \ifnum\arrangedpageN<\arrangedpageT\else \poparrangedpages \fi} \def\poparrangedpagesXY {\ifnum\arrangedpageN>\zerocount \dontcomplain \paperwidth\arrangedpageX\paperwidth \paperheight \arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \doglobal\newcounter\arrangedpageN \doglobal\newcounter\arrangedpageM \fi} \installpagearrangement XY {\dosetuparrangement\@@ppnx\@@ppny\@@ppxy\!!zerocount\!!zerocount \pusharrangedpageXY\poparrangedpagesXY\relax} %D A crazy definition, don't guess who pushed me for the landscape option. \definepapersize [XY] [\c!height=\dimexpr\dimexpr\@@ppheight-\numexpr\@@ppny-1\relax\dimexpr\@@ppdy\relax\relax/\@@ppny\relax, \c!width =\dimexpr\dimexpr\@@ppwidth -\numexpr\@@ppnx-1\relax\dimexpr\@@ppdx\relax\relax/\@@ppnx\relax] \setuppaper [\c!width =\dimexpr\printpaperwidth -2\dimexpr\@@ppbackspace\relax\relax, \c!height=\dimexpr\printpaperheight-2\dimexpr\@@pptopspace \relax\relax] %D Might be used if a printer is printing from a rol or creating mini-books from A4: %D This section has 16 pages. The folding scheme is first a Z-fold and at the end %D a final fold in the spine. %D Coding: [2*8*Z] \installpagearrangement 2*8*Z {\dosetuparrangement{2}{4}{8}{3}{5}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageSIXTEENZ\poparrangedpagesAB\relax} \def\pusharrangedpageSIXTEENZ#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}101\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}111\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}012\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}002\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}103\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}113\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}103\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}113\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}012\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}002\arrangedpageA % 12 \or \handlearrangedpageXandY{#1}101\arrangedpageA % 13 \or \handlearrangedpageXandY{#1}111\arrangedpageB % 14 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 15 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 16 \poparrangedpages \fi} %D Another Z-folded section with 12 pages %D Coding: [2*6*Z] \installpagearrangement 2*6*Z {\dosetuparrangement{2}{3}{6}{3}{4}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageTWELVEZ\poparrangedpagesAB\relax} \def\pusharrangedpageTWELVEZ#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1: rotation (0=upright),x (0=first column),y (0=first row) \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}101\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}111\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}012\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}002\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}012\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}002\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}101\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}111\arrangedpageB % 10 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 12 \poparrangedpages \fi} %D For Heinz' special greeting cards folding. This scheme is also used for the PocketDiary (module): %D Coding: [1*8] \installpagearrangement 1*8 {\dosetuparrangement{4}{2}{8}{5}{3} % X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageEIGHTSINGLESIDEDFOLDED\poparrangedpagesTWO\relax} \def\pusharrangedpageEIGHTSINGLESIDEDFOLDED#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}020\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}030\arrangedpageA % 3 \or \handlearrangedpageXandY{#1}131\arrangedpageA % 4 \or \handlearrangedpageXandY{#1}121\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}111\arrangedpageA % 6 \or \handlearrangedpageXandY{#1}101\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \poparrangedpages \fi} %D This is not a section. \CONTEXT\ places 4 pages on a sheet of paper, singlesided %D Coding: [1*4] \installpagearrangement 1*4 {\dosetuparrangement{2}{2}{4}{3}{3} % X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageFOURSINGLESIDEDFOLDED\poparrangedpagesTWO\relax} \def\pusharrangedpageFOURSINGLESIDEDFOLDED#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}100\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}001\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 3 \or \handlearrangedpageXandY{#1}110\arrangedpageA % 4 \poparrangedpages \fi} %D This imposition scheme was requested by Hraban Ramm, by Willi Egger 21-07-2003 %D Coding: [3SIDE] \installpagearrangement 3SIDE {\dosetuparrangement{3}{1}{3}{4}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageTHREESIDE\poparrangedpagesAB\relax} \def\pusharrangedpageTHREESIDE#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}010\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 6 \poparrangedpages \fi} %D FLYER in three parts and 6 pages 22-10-2010 %D Coding: [TRYPTICHON] \installpagearrangement TRYPTICHON {\dosetuparrangement{3}{1}{3}{4}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageFOLDERSIX\poparrangedpagesAB\relax} \def\pusharrangedpageFOLDERSIX#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}020\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 5 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 6 \poparrangedpages \fi} %D FLYER in Z-fold with 8 pages 22-01-2010 %D Coding: [ZFLYER-8] \installpagearrangement ZFLYER-8 {\dosetuparrangement{4}{1}{4}{5}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageZFOLDEREIGHT\poparrangedpagesAB\relax} \def\pusharrangedpageZFOLDEREIGHT#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}030\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 8 \poparrangedpages \fi} %D FLYER in Z-fold with 10 pages 04-08-2010 %D Coding: [ZFLYER-10] \installpagearrangement ZFLYER-10 {\dosetuparrangement{5}{1}{5}{6}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageZFLYERTEN\poparrangedpagesAB\relax} \def\pusharrangedpageZFLYERTEN#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}040\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}040\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}030\arrangedpageA % 10 \poparrangedpages \fi} %D FLYER in Z-fold with 12 pages 04-08-2010 %D Coding: [ZFLYER-12] \installpagearrangement ZFLYER-12 {\dosetuparrangement{6}{1}{6}{7}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageZFLYERTWELVE\poparrangedpagesAB\relax} \def\pusharrangedpageZFLYERTWELVE#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}050\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}040\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}050\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}020\arrangedpageA % 10 \or \handlearrangedpageXandY{#1}030\arrangedpageA % 11 \or \handlearrangedpageXandY{#1}040\arrangedpageA % 12 \poparrangedpages \fi} %D FLYER folded as a map with 6 pages per side. %D Coding: [MAPFLYER-12] \installpagearrangement MAPFLYER-12 {\dosetuparrangement{3}{2}{6}{4}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageMFOLDERTWELVE\poparrangedpagesAB\relax} \def\pusharrangedpageMFOLDERTWELVE#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}020\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}001\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}021\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \or \handlearrangedpageXandY{#1}001\arrangedpageA % 9 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 10 \or \handlearrangedpageXandY{#1}011\arrangedpageA % 11 \or \handlearrangedpageXandY{#1}021\arrangedpageA % 12 \poparrangedpages \fi} %D FLYER folded as double window with 4 pages per side. %D Coding: [DOUBLEWINDOW] \installpagearrangement DOUBLEWINDOW {\dosetuparrangement{4}{1}{4}{5}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageDOUBLEWINDOWEIGHT\poparrangedpagesAB\relax} \def\pusharrangedpageDOUBLEWINDOWEIGHT#1% Willi's approach {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}020\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}030\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}000\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 4 \or \handlearrangedpageXandY{#1}020\arrangedpageB % 5 \or \handlearrangedpageXandY{#1}030\arrangedpageB % 6 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 7 \or \handlearrangedpageXandY{#1}010\arrangedpageA % 8 \poparrangedpages \fi} %D Imposition as requested by Jan Pohanka 26-08-2010, 4 pages, two verso, two recto, %D uneven pages upright and down, even pages top and rotated 180. %D Implementation with 2 pages for conference-name-display %D Coding: [1*2-Conference] \installpagearrangement 1*2-Conference {\dosetuparrangement{1}{2}{4}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageCONFERENCE2\poparrangedpagesAB\relax} \def\pusharrangedpageCONFERENCE2#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}001\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}100\arrangedpageA % 2 \poparrangedpages \fi} %D Implementation with 4 pages for conference-name-display %D Coding: [1*4-Conference] \installpagearrangement 1*4-Conference {\dosetuparrangement{1}{2}{4}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageCONFERENCE4\poparrangedpagesAB\relax} \def\pusharrangedpageCONFERENCE4#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}001\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}100\arrangedpageA % 2 \or \handlearrangedpageXandY{#1}011\arrangedpageB % 3 \or \handlearrangedpageXandY{#1}110\arrangedpageB % 4 \poparrangedpages \fi} % There should be arrangements for section made of heavy and thick paper. i.e. the heavier the paper % the fewer pages per section: % Section with 8 pages put on to sheets of paper. Each sheet carries recto 2 and verso 2 pages. % Coding: [2*2*2] \installpagearrangement 2*2*2 {\dosetuparrangement{2}{1}{2}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageEIGHTTWO\poparrangedpagesAtoD\relax} \def\pusharrangedpageEIGHTWO#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageD % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 8 \poparrangedpages \fi} % Section with 12 pages, built from three sheets of paper. % Each sheet carries 2 pages recto and verso. % Coding: [2*2*3] \def\poparrangedpagesAtoF {\ifnum\arrangedpageN>\zerocount \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB \outputarrangedbox\arrangedpageC \outputarrangedbox\arrangedpageD \outputarrangedbox\arrangedpageE \outputarrangedbox\arrangedpageF \global\arrangedpageN\zerocount \fi} \installpagearrangement 2*2*3 {\dosetuparrangement{2}{1}{2}{3}{2}% X,Y,Total,hcutmarks,vcutmarks \pusharrangedpageTWELVETWO\poparrangedpagesAtoD\relax} \def\pusharrangedpageTWELVETWO#1% {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1 rot,hskip,vskip \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2 \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3 \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4 \or \handlearrangedpageXandY{#1}010\arrangedpageE % 5 \or \handlearrangedpageXandY{#1}000\arrangedpageF % 6 \or \handlearrangedpageXandY{#1}010\arrangedpageF % 7 \or \handlearrangedpageXandY{#1}000\arrangedpageE % 8 \or \handlearrangedpageXandY{#1}010\arrangedpageD % 9 \or \handlearrangedpageXandY{#1}000\arrangedpageC % 10 \or \handlearrangedpageXandY{#1}010\arrangedpageB % 11 \or \handlearrangedpageXandY{#1}000\arrangedpageA % 12 \poparrangedpages \fi} % \definepageshift[test][horizontal][10pt,20pt,30pt,40pt,50pt] % \definepageshift[test][vertical] [10pt,20pt,30pt,40pt,50pt] % % \setuppageshift[test] % \setuppageshift[test][test] % \setuppageshift[test][none] % \setuppageshift[none][test] % \setuppageshift[paper][test][test] % arrange only % \setuppageshift[paper][test] % arrange only % \setuppageshift[print][test][test] % % \showframe \dorecurse{100}{\input tufte \par} % #1=name #2=horizontal|vertical #3=shiftlist \def\definepageshift {\dotripleargument\dodefinepageshift} \def\dodefinepageshift[#1][#2][#3]% {\setvalue{\??pt#2:#1}{#3}} \letempty \hpageshifts \newcounter\nofhpageshifts \letempty \vpageshifts \newcounter\nofvpageshifts % \let\shiftprintpagebox\gobbleoneargument % \let\shiftpaperpagebox\gobbleoneargument \def\dogetpageshift#1#2#3% #1=\dimenx #2=\xpageshifts #3=\nofxpageshifts {\ifx#2\empty #1\zeropoint \else \doglobal\increment#3% \getfromcommacommand[#2][#3]% \ifx\commalistelement\empty \globallet#3\!!plusone \getfromcommacommand[#2][#3]% \fi \ifx\commalistelement\empty #1\zeropoint \else #1=\commalistelement \donetrue \fi \fi} \def\shiftpagebox#1% {\donefalse \dogetpageshift{\dimen0}\hpageshifts\nofhpageshifts \dogetpageshift{\dimen2}\vpageshifts\nofvpageshifts \ifdone % see also layout offsets, maybe \movebox \edef\next{\wd#1\the\wd#1\ht#1\the\ht#1\dp#1\the\dp#1}% \setbox#1\vbox % \forgetall already done {\offinterlineskip\vskip\dimen2\hskip\dimen0\box#1}% \next \fi} \def\setuppageshift {\dotripleempty\dosetuppageshift} \def\dosetuppageshift[#1][#2][#3]% page|paper horizontal vertical {\ifthirdargument % paper=arrange \let\hpageshifts\empty \let\vpageshifts\empty \let\shiftprintpagebox\gobbleoneargument \let\shiftpaperpagebox\gobbleoneargument \doifdefined{\??pt\v!horizontal:#2} {\edef\hpageshifts{\getvalue{\??pt\v!horizontal:#2}}}% \doifdefined{\??pt\v!vertical :#3} {\edef\vpageshifts{\getvalue{\??pt\v!vertical :#3}}}% \doif{#1}\v!page{\let\shiftprintpagebox\shiftpagebox}% \doif{#1}\v!paper{\let\shiftpaperpagebox\shiftpagebox}% \else\ifsecondargument \doifinsetelse{#1}{\v!page,\v!paper} {\setuppageshift[#1][#2][#2]} {\setuppageshift[\v!page][#1][#2]}% \else\iffirstargument \setuppageshift[\v!page][#1][#1]% \fi\fi\fi} %D One can (mis)use this mechanism, in close cooperation %D with \PDFTEX\ to arrange pages of already produced files. %D %D \starttyping %D \insertpages[file.pdf][1,3][n=30,width=18cm] %D \stoptyping %D %D The pages are inserted in the text area, and even pages %D are repositioned according to the width. In this example %D empty pages are added after page 1 and 3. %D %D Selecting pages can be accomplished by: %D %D \starttyping %D \filterpages[file.pdf][1,3,5][n=30,width=18cm] %D \stoptyping %D %D One may pass \type {odd} or \type {even} instead of a %D comma separated list. A third alternative is: %D %D \starttyping %D \copypages[file.pdf][n=30,scale=950] %D \stoptyping %D %D This macros inserts the page, according to the settings %D provided. \def\insertpages {\dotripleempty\doinsertpages} \def\doinsertpages[#1][#2][#3]% {\doifassignmentelse{#2} {\dodoinsertpages[#1][][#2]} {\dodoinsertpages[#1][#2][#3]}} \def\dodoinsertpages[#1][#2][#3]% {\bgroup \dontcomplain \getfiguredimensions[#1]% \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\!!zeropoint,#3]% \doifinset0{#2}{\null\page}% \dorecurse\@@ipn {\dofilterpage{#1}\recurselevel \doifinset\recurselevel{#2}{\null\page}}% \egroup} \def\filterpages {\dotripleempty\dofilterpages} \def\dofilterpages[#1][#2][#3]% % \noffigurepages not yet supported {\bgroup \dontcomplain \getfiguredimensions[#1]% \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\!!zeropoint,#3]% \doifelse{#2}\v!even {\dorecurse\@@ipn {\ifodd\recurselevel\relax\else\dofilterpage{#1}\recurselevel\fi}} {\doifelse{#2}\v!odd {\dorecurse\@@ipn {\ifodd\recurselevel\relax\dofilterpage{#1}\recurselevel\fi}} {\def\dodocommand##1% {\ifnum##1>\@@ipn\else\dofilterpage{#1}{##1}\fi}% \def\docommand##1% {\dowithrange{##1}\dodocommand}% \processcommalist[#2]\docommand}}% \egroup} \def\dofilterpage#1#2% {\hbox to \textwidth {\ifdoublesided\ifdim\@@ipwidth>\zeropoint\relax\ifodd\realpageno\else \hfill \def\dowithfigure{\hskip-\@@ipwidth}% \fi\fi\fi \setbox0\hbox {\externalfigure[#1][\c!page=#2,\c!height=\textheight]}% \wd0\zeropoint \box0} \page} \def\copypages {\dodoubleempty\docopypages} \def\docopypages[#1][#2]% {\bgroup \getfiguredimensions[#1]% \getparameters[\??ip] [\c!n=\noffigurepages, \c!marking=\v!off, \c!scale=\!!thousand, \c!offset=\!!zeropoint, #2]% \dorecurse\@@ipn {\vbox to \textheight {\hsize\textwidth \scratchdimen\@@ipoffset \centeredbox {\doifelse\@@ipmarking\v!on\cuthbox\hbox {\ifdim\scratchdimen>\zeropoint\relax \advance\vsize -2\scratchdimen \advance\hsize -2\scratchdimen \externalfigure[#1][\c!page=\recurselevel,#2,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]% \else \externalfigure[#1][\c!page=\recurselevel,#2,\c!offset=\v!overlay]% \fi}}} \page} \egroup} %D \macros %D {combinepages} %D %D Yet another way of postprocessing is handles by \type %D {\combinepages}. This macro builds a matrix of pages from a %D file, for example: %D %D \starttyping %D \setuppapersize %D [A4][A4] % or [A4,landscape][A4,landscape] %D %D \setuplayout %D [header=0pt,footer=1cm, %D backspace=1cm,topspace=1cm, %D width=middle,height=middle] %D %D \setupfootertexts %D [presentation---\currentdate\space---\space\pagenumber] %D %D \starttext %D \combinepages[slides][nx=2,ny=3,frame=on] %D \stoptext %D \stoptyping %D %D One can influence the way the pages are combined. (This %D will be explained some time.) \def\combinepages {\dodoubleempty\docombinepages} \def\docombinepages[#1][#2]% a=perpag b=free {\bgroup \dontcomplain \getfiguredimensions[#1]% \getparameters [\??ip] [\c!alternative=\v!a, \c!n=\noffigurepages,\c!nx=2,\c!ny=2,\c!start=1,\c!stop=\!!maxcard, \c!distance=\bodyfontsize, \c!bottom=\vfill,\c!top=\vss, \c!left=\hss,\c!right=\hss, \c!before=\page,\c!after=\page,\c!inbetween=\blank, \c!frame=,\c!background=,\c!backgroundcolor=, #2]% \def\@@ipname{#1}% \@@ipbefore \executeifdefined{\strippedcsname\docombinepages\@@ipalternative}\docombinepagesb \@@ipafter \egroup} \def\docombinepagesa {\globallet\combinedpagescounter\@@ipstart \doloop {\vbox to \textheight {\hsize\textwidth % ? ? \scratchdimen\@@ipdistance \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax \dorecurse\@@ipny {\hbox to \hsize {\dorecurse\@@ipnx {\vbox to \!!heighta {\hsize\!!widtha \vsize\!!heighta \@@iptop \hbox to \hsize {\@@ipleft \ifnum\combinedpagescounter>\@@ipstop\relax \globallet\@@ipn\!!zerocount \else\ifnum\combinedpagescounter>\@@ipn \else \externalfigure[\@@ipname] [\c!object=\v!no, \c!page=\combinedpagescounter, \c!factor=\v!max, \c!background=\@@ipbackground, \c!backgroundcolor=\@@ipbackgroundcolor, \c!frame=\@@ipframe]% \fi\fi \@@ipright} \@@ipbottom}% \doglobal\increment\combinedpagescounter \hfil}% \hfilneg} \vfil}% \vfilneg}% \page \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} \def\docombinepagesc {\globallet\combinedpagescounter\@@ipstart \doloop {\vbox to \textheight {\hsize\textwidth % ? ? \scratchdimen\@@ipdistance \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax \hbox to \hsize {\dorecurse\@@ipnx {\@@ipleft \vbox to \textheight {\hsize\!!widtha {\dorecurse\@@ipny {\@@iptop \hbox to \hsize {\vbox to \!!heighta {\hsize\!!widtha \vsize\!!heighta \ifnum\combinedpagescounter>\@@ipstop\relax \globallet\@@ipn\!!zerocount \else\ifnum\combinedpagescounter>\@@ipn \else \externalfigure[\@@ipname] [\c!object=\v!no, \c!page=\combinedpagescounter, \c!factor=\v!max, \c!background=\@@ipbackground, \c!backgroundcolor=\@@ipbackgroundcolor, \c!frame=\@@ipframe]% \fi\fi}} \doglobal\increment\combinedpagescounter \@@ipbottom}% \vfil}% \vfilneg} \hfil}% \hfilneg}} \page \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} \let\docombinepageshorizontal\docombinepagesa \let\docombinepagesvertical \docombinepagesc \def\docombinepagesb {\globallet\combinedpagescounter\@@ipstart \doloop {\startbaselinecorrection \scratchdimen\@@ipdistance \!!widtha\dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax \hbox to \hsize {\dorecurse\@@ipnx {\doglobal\increment\combinedpagescounter \ifnum\combinedpagescounter>\@@ipn \else \expanded{\externalfigure[\@@ipname] [\c!page=\combinedpagescounter, \c!width=\the\!!widtha,% todo \freezedimenmacro \c!background=\@@ipbackground, \c!backgroundcolor=\@@ipbackgroundcolor, \c!frame=\@@ipframe]}% \hfill \fi}\hfillneg}% \stopbaselinecorrection \ifnum\combinedpagescounter<\@@ipn\relax \@@ipinbetween \else \exitloop \fi}} %D \macros %D {setuppagecomment,startpagecomment} %D %D This command is not yet documented. Usage: %D %D \starttyping %D \setuppagecomment[state=start,location=right] %D %D \startpagecomment %D \input knuth %D \stoppagecomment %D \stoptyping \def\setuppagecomment {\dosingleempty\dosetuppagecomment} \def\dosetuppagecomment[#1]% {\getparameters[\??pc][#1]% \doifelse\@@pcstate\v!start {\doifinsetelse\@@pclocation{\v!bottom,\v!top} {\setuppapersize[\c!left=\hskip\@@pcoffset]% \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcheight\relax}% \edef\@@pcpaperwidth {\the\dimexpr\paperwidth+\@@pcoffset+\@@pcoffset\relax}% \defineoverlay[\v!pagecomment][\placepagecommentTB]} {\setuppapersize[\c!top=\vskip\@@pcoffset]% \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset\relax}% \edef\@@pcpaperwidth {\the\dimexpr\paperwidth+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcwidth\relax}% \defineoverlay[\v!pagecomment][\placepagecommentLR]}% \processaction [\@@pclocation] [ \v!bottom=>{\setuppapersize[\c!bottom =\vss,\c!top =\vskip\@@pcoffset]}, \v!top=>{\setuppapersize[\c!top =\vss,\c!bottom =\vskip\@@pcoffset]}, \v!left=>{\setuppapersize[\c!left =\hss,\c!right=\hskip\@@pcoffset]}, \v!right=>{\setuppapersize[\c!right=\hss,\c!left =\hskip\@@pcoffset]}]% \definepapersize [\v!pagecomment] [\c!height=\@@pcpaperheight, \c!width=\@@pcpaperwidth]% \let\@@pcprintpapersize\printpapersize \setuppapersize[\papersize][\v!pagecomment]% \setupbackgrounds[\v!paper][\c!background=\v!pagecomment]} {\doif\@@pcstate\v!stop % else initialization invokes backgrounds {% this should be tested first % \expanded{\setuppapersize[\papersize][\@@pcprintpapersize]}% \setupbackgrounds[\v!paper][\c!background=]}}} \def\@@pcprintpapersize{\printpapersize} \def\placepagecommentTB {\vbox to \printpaperheight {\forgetall \hsize\printpaperwidth \vskip\@@pcoffset \doifelse\@@pclocation\v!bottom{\vskip\dimexpr\paperheight+\@@pcdistance\relax}\vss \hskip\@@pcoffset \vbox to \@@pcheight {\forgetall \hsize\paperwidth \ifpagecomment \getbuffer[\v!pagecomment]% \global\pagecommentfalse \fi}% \hfill \doifelse\@@pclocation\v!bottom\vss{\vskip\dimexpr\paperheight+\@@pcdistance\relax}% \vskip\@@pcoffset}} \def\placepagecommentLR {\hbox to \printpaperwidth {\hskip\@@pcoffset \doifelse\@@pclocation\v!right{\hskip\paperwidth\hskip\@@pcdistance}\hss \vbox to \printpaperheight {\forgetall \vskip\@@pcoffset \hsize\@@pcwidth \ifpagecomment \getbuffer[\v!pagecomment]% \global\pagecommentfalse \fi \vss}% \doifelse\@@pclocation\v!right\hss{\hskip\paperwidth\hskip\@@pcdistance}% \hskip\@@pcoffset}} \newif\ifpagecomment \setvalue{\e!start\v!pagecomment}% {\global\pagecommenttrue \dostartbuffer[\v!pagecomment][\e!start\v!pagecomment][\e!stop\v!pagecomment]} \setuppagecomment [\c!state=, % \v!stop would invoke background calculation \c!location=\v!bottom, \c!offset=.5cm, \c!distance=.5cm, \c!height=5cm, \c!width=10cm] % This macro cuts a page into n parts that can be pasted % together. \def\slicepages {\dotripleempty\doslicepages} \def\doslicepages[#1][#2][#3]% {\ifthirdargument \dodoslicepages[#1][#2][#3]% \else \dodoslicepages[#1][#2][#2]% \fi} \newcounter\slicedpagenumber \def\dodoslicepages[#1][#2][#3]% {\bgroup \dontcomplain \globallet\slicedpagenumber\!!zerocount \getfiguredimensions[#1] \getparameters [\??ip] [\c!n=1, \c!offset=\!!zeropoint, \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint, \c!width=\figurewidth,\c!height=\figureheight,#2] \ifnum\@@ipn>\zerocount \definepapersize [\s!dummy][\c!height=\@@ipheight,\c!width=\@@ipwidth] \setuppapersize [\s!dummy][\s!dummy] \setuplayout [\c!backspace=\!!zeropoint,\c!topspace=\!!zeropoint, \c!height=\v!middle,\c!width=\v!middle, \c!textdistance=\!!zeropoint, \c!header=\!!zeropoint,\c!footer=\!!zeropoint] \fi \dorecurse\noffigurepages {\global\let\slicedpagenumber\recurselevel \ifnum\@@ipn>\plusone \dorecurse\@@ipn {\let\xslice\recurselevel \dorecurse\@@ipn {\let\yslice\recurselevel \clip [\c!nx=\@@ipn,\c!ny=\@@ipn,\c!x=\xslice,\c!y=\yslice] {\scale [\c!scale=\@@ipn000] {\externalfigure[#1][\c!page=\slicedpagenumber]}} \page}} \else \ifodd\slicedpagenumber\relax \getparameters[\??ip][#2] \else \getparameters[\??ip][#3] \fi \hskip\@@ipoffset \clip [\c!hoffset=\@@iphoffset,\c!voffset=\@@ipvoffset, \c!height=\@@ipheight,\c!width=\@@ipwidth] {\externalfigure[#1][\c!page=\slicedpagenumber]} \page \fi} \egroup} % \starttext \slicepages[slice1.pdf][n=3] \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-tmp.lua0000644000175000017500000003442712132111075024106 0ustar norbertnorbertif not modules then modules = { } end modules ['data-tmp'] = { version = 1.100, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

This module deals with caching data. It sets up the paths and implements loaders and savers for tables. Best is to set the following variable. When not set, the usual paths will be checked. Personally I prefer the (users) temporary path.

TEXMFCACHE=$TMP;$TEMP;$TMPDIR;$TEMPDIR;$HOME;$TEXMFVAR;$VARTEXMF;.

Currently we do no locking when we write files. This is no real problem because most caching involves fonts and the chance of them being written at the same time is small. We also need to extend luatools with a recache feature.

--ldx]]-- local format, lower, gsub, concat = string.format, string.lower, string.gsub, table.concat local concat, serialize, serializetofile = table.concat, table.serialize, table.tofile local mkdirs, isdir, isfile = dir.mkdirs, lfs.isdir, lfs.isfile local addsuffix, is_writable, is_readable = file.addsuffix, file.is_writable, file.is_readable local formatters = string.formatters local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) local report_caches = logs.reporter("resolvers","caches") local report_resolvers = logs.reporter("resolvers","caching") local resolvers = resolvers -- intermezzo local directive_cleanup = false directives.register("system.compile.cleanup", function(v) directive_cleanup = v end) local directive_strip = false directives.register("system.compile.strip", function(v) directive_strip = v end) local compile = utilities.lua.compile function utilities.lua.compile(luafile,lucfile,cleanup,strip) if cleanup == nil then cleanup = directive_cleanup end if strip == nil then strip = directive_strip end return compile(luafile,lucfile,cleanup,strip) end -- end of intermezzo caches = caches or { } local caches = caches local luasuffixes = utilities.lua.suffixes caches.base = caches.base or "luatex-cache" caches.more = caches.more or "context" caches.direct = false -- true is faster but may need huge amounts of memory caches.tree = false caches.force = true caches.ask = false caches.relocate = false caches.defaults = { "TMPDIR", "TEMPDIR", "TMP", "TEMP", "HOME", "HOMEPATH" } local writable, readables, usedreadables = nil, { }, { } -- we could use a metatable for writable and readable but not yet local function identify() -- Combining the loops makes it messy. First we check the format cache path -- and when the last component is not present we try to create it. local texmfcaches = resolvers.cleanpathlist("TEXMFCACHE") if texmfcaches then for k=1,#texmfcaches do local cachepath = texmfcaches[k] if cachepath ~= "" then cachepath = resolvers.resolve(cachepath) cachepath = resolvers.cleanpath(cachepath) cachepath = file.collapsepath(cachepath) local valid = isdir(cachepath) if valid then if is_readable(cachepath) then readables[#readables+1] = cachepath if not writable and is_writable(cachepath) then writable = cachepath end end elseif not writable and caches.force then local cacheparent = file.dirname(cachepath) if is_writable(cacheparent) and true then -- we go on anyway (needed for mojca's kind of paths) if not caches.ask or io.ask(format("\nShould I create the cache path %s?",cachepath), "no", { "yes", "no" }) == "yes" then mkdirs(cachepath) if isdir(cachepath) and is_writable(cachepath) then report_caches("path %a created",cachepath) writable = cachepath readables[#readables+1] = cachepath end end end end end end end -- As a last resort we check some temporary paths but this time we don't -- create them. local texmfcaches = caches.defaults if texmfcaches then for k=1,#texmfcaches do local cachepath = texmfcaches[k] cachepath = resolvers.expansion(cachepath) -- was getenv if cachepath ~= "" then cachepath = resolvers.resolve(cachepath) cachepath = resolvers.cleanpath(cachepath) local valid = isdir(cachepath) if valid and is_readable(cachepath) then if not writable and is_writable(cachepath) then readables[#readables+1] = cachepath writable = cachepath break end end end end end -- Some extra checking. If we have no writable or readable path then we simply -- quit. if not writable then report_caches("fatal error: there is no valid writable cache path defined") os.exit() elseif #readables == 0 then report_caches("fatal error: there is no valid readable cache path defined") os.exit() end -- why here writable = dir.expandname(resolvers.cleanpath(writable)) -- just in case -- moved here local base, more, tree = caches.base, caches.more, caches.tree or caches.treehash() -- we have only one writable tree if tree then caches.tree = tree writable = mkdirs(writable,base,more,tree) for i=1,#readables do readables[i] = file.join(readables[i],base,more,tree) end else writable = mkdirs(writable,base,more) for i=1,#readables do readables[i] = file.join(readables[i],base,more) end end -- end if trace_cache then for i=1,#readables do report_caches("using readable path %a (order %s)",readables[i],i) end report_caches("using writable path %a",writable) end identify = function() return writable, readables end return writable, readables end function caches.usedpaths(separator) local writable, readables = identify() if #readables > 1 then local result = { } local done = { } for i=1,#readables do local readable = readables[i] if readable == writable then done[readable] = true result[#result+1] = formatters["readable+writable: %a"](readable) elseif usedreadables[i] then done[readable] = true result[#result+1] = formatters["readable: %a"](readable) end end if not done[writable] then result[#result+1] = formatters["writable: %a"](writable) end return concat(result,separator or " | ") else return writable or "?" end end function caches.configfiles() return concat(resolvers.instance.specification,";") end function caches.hashed(tree) tree = gsub(tree,"[\\/]+$","") tree = lower(tree) local hash = md5.hex(tree) if trace_cache or trace_locating then report_caches("hashing tree %a, hash %a",tree,hash) end return hash end function caches.treehash() local tree = caches.configfiles() if not tree or tree == "" then return false else return caches.hashed(tree) end end local r_cache, w_cache = { }, { } -- normally w in in r but who cares local function getreadablepaths(...) local tags = { ... } local hash = concat(tags,"/") local done = r_cache[hash] if not done then local writable, readables = identify() -- exit if not found if #tags > 0 then done = { } for i=1,#readables do done[i] = file.join(readables[i],...) end else done = readables end r_cache[hash] = done end return done end local function getwritablepath(...) local tags = { ... } local hash = concat(tags,"/") local done = w_cache[hash] if not done then local writable, readables = identify() -- exit if not found if #tags > 0 then done = mkdirs(writable,...) else done = writable end w_cache[hash] = done end return done end caches.getreadablepaths = getreadablepaths caches.getwritablepath = getwritablepath function caches.getfirstreadablefile(filename,...) local rd = getreadablepaths(...) for i=1,#rd do local path = rd[i] local fullname = file.join(path,filename) if is_readable(fullname) then usedreadables[i] = true return fullname, path end end return caches.setfirstwritablefile(filename,...) end function caches.setfirstwritablefile(filename,...) local wr = getwritablepath(...) local fullname = file.join(wr,filename) return fullname, wr end function caches.define(category,subcategory) -- for old times sake return function() return getwritablepath(category,subcategory) end end function caches.setluanames(path,name) return format("%s/%s.%s",path,name,luasuffixes.tma), format("%s/%s.%s",path,name,luasuffixes.tmc) end function caches.loaddata(readables,name) if type(readables) == "string" then readables = { readables } end for i=1,#readables do local path = readables[i] local tmaname, tmcname = caches.setluanames(path,name) local loader = false if isfile(tmcname) then loader = loadfile(tmcname) end if not loader and isfile(tmaname) then -- in case we have a different engine utilities.lua.compile(tmaname,tmcname) if isfile(tmcname) then loader = loadfile(tmcname) end if not loader then loader = loadfile(tmaname) end end if loader then loader = loader() collectgarbage("step") return loader end end return false end function caches.is_writable(filepath,filename) local tmaname, tmcname = caches.setluanames(filepath,filename) return is_writable(tmaname) end local saveoptions = { compact = true } -- add some point we will only use the internal bytecode compiler and -- then we can flag success in the tma so that it can trigger a compile -- if the other engine function caches.savedata(filepath,filename,data,raw) local tmaname, tmcname = caches.setluanames(filepath,filename) local reduce, simplify = true, true if raw then reduce, simplify = false, false end data.cache_uuid = os.uuid() if caches.direct then file.savedata(tmaname,serialize(data,true,saveoptions)) else serializetofile(tmaname,data,true,saveoptions) end utilities.lua.compile(tmaname,tmcname) end -- moved from data-res: local content_state = { } function caches.contentstate() return content_state or { } end function caches.loadcontent(cachename,dataname) local name = caches.hashed(cachename) local full, path = caches.getfirstreadablefile(addsuffix(name,luasuffixes.lua),"trees") local filename = file.join(path,name) local blob = loadfile(addsuffix(filename,luasuffixes.luc)) or loadfile(addsuffix(filename,luasuffixes.lua)) if blob then local data = blob() if data and data.content then if data.type == dataname then if data.version == resolvers.cacheversion then content_state[#content_state+1] = data.uuid if trace_locating then report_resolvers("loading %a for %a from %a",dataname,cachename,filename) end return data.content else report_resolvers("skipping %a for %a from %a (version mismatch)",dataname,cachename,filename) end else report_resolvers("skipping %a for %a from %a (datatype mismatch)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (no content)",dataname,cachename,filename) end elseif trace_locating then report_resolvers("skipping %a for %a from %a (invalid file)",dataname,cachename,filename) end end function caches.collapsecontent(content) for k, v in next, content do if type(v) == "table" and #v == 1 then content[k] = v[1] end end end function caches.savecontent(cachename,dataname,content) local name = caches.hashed(cachename) local full, path = caches.setfirstwritablefile(addsuffix(name,luasuffixes.lua),"trees") local filename = file.join(path,name) -- is full local luaname = addsuffix(filename,luasuffixes.lua) local lucname = addsuffix(filename,luasuffixes.luc) if trace_locating then report_resolvers("preparing %a for %a",dataname,cachename) end local data = { type = dataname, root = cachename, version = resolvers.cacheversion, date = os.date("%Y-%m-%d"), time = os.date("%H:%M:%S"), content = content, uuid = os.uuid(), } local ok = io.savedata(luaname,serialize(data,true)) if ok then if trace_locating then report_resolvers("category %a, cachename %a saved in %a",dataname,cachename,luaname) end if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("%a compiled to %a",dataname,lucname) end return true else if trace_locating then report_resolvers("compiling failed for %a, deleting file %a",dataname,lucname) end os.remove(lucname) end elseif trace_locating then report_resolvers("unable to save %a in %a (access error)",dataname,luaname) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-int.mkiv0000644000175000017500000001004612130411274024276 0ustar norbertnorbert%D \module %D [ file=math-int, %D version=2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Scripts, %D author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Integrals} \unprotect %D \startbuffer %D $\int _a^b f(x) dx $ and also %D $\iint _a^b f(x,y) dxdy$, %D $\iiint _a^b f(x,y) dxdy$, %D \startformula %D \int _a^b f(x) dx \quad %D \iint _a^b f(x) dx \quad %D \iiint _a^b f(x) dx \quad %D \stopformula %D \stopbuffer %D %D Default: \getbuffer %D %D Displaylimits: \setupmathematics[integral=displaylimits] \getbuffer %D %D Limits: \setupmathematics[integral=limits] \getbuffer %D Adapted to mkiv by HH from code by AM. \installcorenamespace{mathintegral} \newconstant\mathintlimitmode \def\intlimits % also used elsewhere {\ifcase\mathintlimitmode \nolimits \or \displaylimits \or \limits \or % auto \ifcase\normalmathstyle\displaylimits\or\displaylimits\else\limits\fi % \ifnum\attribute\mathmodeattribute=\plusone % we need a proper flag % \displaylimits % \else % \limits % \fi \else % none \fi} \letvalue{\??mathintegral nolimits}\zerocount \letvalue{\??mathintegral displaylimits}\plusone \letvalue{\??mathintegral limits}\plustwo \letvalue{\??mathintegral autolimits}\plusthree \letvalue{\??mathintegral none}\plusfour \appendtoks \mathintlimitmode\executeifdefined{\??mathintegral\mathematicsparameter\s!integral}\zerocount \to \everyswitchmathematics \setupmathematics % [\v!integral=nolimits] [\v!integral=autolimits] %D The following code is used for fallbacks and might become obsolete once %D we have enough \OPENTYPE\ math fonts. % \def\math_repeated_integal_i % {\int} % \def\math_repeated_integal_ii % {\math_repeated_integal_i % \math_repeated_integral_kern % \math_repeated_integal_i % \math_repeat_integral_finish % \intlimits} % \def\math_repeated_integal_iii % {\math_repeated_integal_i % \math_repeated_integral_kern % \math_repeated_integal_ii} % % \def\math_repeated_integal_iiii % {\math_repeated_integal_i % \math_repeated_integral_kern % \math_repeated_integal_iii} % % \unexpanded\def\math_repeat_integral#1% % {\let\math_repeat_integral_finish\donothing % \iffontchar\textfont\zerocount#1\relax % \expandafter\math_repeat_integral_real % \else % \expandafter\math_repeat_integral_fake % \fi} % % \def\math_repeat_integral_fake#1#2% % {\let\math_repeat_integral_fake_symbol#2% % \futurelet\next\math_repeat_integral_fake_indeed} % % \def\math_repeat_integral_real#1#2% % {#1} % % \definemathcommand [iint] {\math_repeat_integral{"0222C}\normalint \math_repeated_integal_ii } % double % \definemathcommand [iiint] {\math_repeat_integral{"0222D}\normaliint \math_repeated_integal_iii } % tripple % \definemathcommand [iiiint] {\math_repeat_integral{"FFFFF}\normaliiint\math_repeated_integal_iiii} % quadruple % % \def\math_repeated_integral_kern % {\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}} % % \def\math_repeat_integral_fake_indeed % {\ifx\next\limits % \math_repeated_integral_correction % \else\ifx\next\displaylimits % \math_repeated_integral_correction % \else\ifx\next\nolimits % % nothing % \else\ifcase\mathintlimitmode % % nothing % \else % \math_repeated_integral_correction % \fi\fi\fi\fi % \math_repeat_integral_fake_symbol} % % \def\math_repeated_integral_correction % {\mkern-7mu\mathchoice{\mkern-2mu}{}{}{}% % \mathop\bgroup\mkern7mu\mathchoice{\mkern2mu}{}{}{}\let\math_repeat_integral_finish\egroup} % % %D If the \type{\limits} option is used after \type {\iint}, use \type % %D {\mathop} and fudge the left hand space a bit to make the subscript % %D visually centered. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-grd.mkiv0000644000175000017500000002017212130411274024256 0ustar norbertnorbert%D \module %D [ file=spac-grd, %D version=2009.10.16, % 1998.03.10, was core-grd.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Grid Snapping, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 will be merged into spac-ver.mkiv. \writestatus{loading}{ConTeXt Spacing Macros / Grid Snapping} \unprotect %D A rather crappy macro that we need to avoid and as such it will probably %D disappear: \installcorenamespace{lastnodepusher} \let\poplastnode\relax \unexpanded\def\pushlastnode {\csname\??lastnodepusher \ifcsname\??lastnodepusher\the\lastnodetype\endcsname \the\lastnodetype \else \s!unknown \fi \endcsname} \setvalue{\??lastnodepusher\number\kernnodecode}% {\unexpanded\edef\poplastnode{\kern\the\lastkern\relax}% \kern-\lastkern} \setvalue{\??lastnodepusher\number\gluenodecode}% {\unexpanded\edef\poplastnode{\vskip\the\lastskip\relax}% \vskip-\lastskip} \setvalue{\??lastnodepusher\number\penaltynodecode}% {\unexpanded\edef\poplastnode{\penalty\the\lastpenalty\relax}% \nobreak} \setvalue{\??lastnodepusher\s!unknown}% {\let\poplastnode\relax} %D Moved from supp-box: %D \macros %D {startbaselinecorrection,baselinecorrection, %D showbaselinecorrection,offbaselinecorrection} %D %D Spacing around ruled boxes can get pretty messed up. The %D next macro tries as good as possible to fix this. %D %D \startbuffer[1] %D \startbaselinecorrection %D \ruledhbox{Rule Brittanica} %D \stopbaselinecorrection %D \stopbuffer %D %D \typebuffer[1] %D %D The macros put some white space around the box: %D %D \getbuffer[1] %D %D A simple alternative is \type {\baselinecorrection}, which %D only looks at the previous line. %D %D \startbuffer[2] %D \baselinecorrection %D \ruledhbox{Rule Brittanica} %D \baselinecorrection %D \stopbuffer %D %D \typebuffer[2] %D %D This time the last preceding line gets a correction,% %D dependant on the depth. %D %D \getbuffer[2] %D %D One can make the correction visible by saying \type %D {\showbaselinecorrection}. Part of the correction is %D calculated from the dimensions of a~(. One can disble the %D correction by calling \type {\offbaselinecorrection}. %D %D When visualize the first example looks like: %D %D {\showbaselinecorrection\getbuffer[1]} %D %D and the second one comes out as: %D %D {\showbaselinecorrection\getbuffer[2]} % \definecolor[GridLineColor][red] % \definecolor[GridTextColor][blue] \newdimen\d_spac_lines_correction_before \newdimen\d_spac_lines_correction_after \newbox \b_spac_lines_correction_before \newbox \b_spac_lines_correction_after \def\spac_lines_initialize_corrections {\setbox\b_spac_lines_correction_before\hbox{\setstrut\strut}% \setbox\b_spac_lines_correction_after \hbox{(}% \d_spac_lines_correction_before\dimexpr\ht\b_spac_lines_correction_before-\ht\b_spac_lines_correction_after\relax \d_spac_lines_correction_after \dimexpr\dp\b_spac_lines_correction_before-\dp\b_spac_lines_correction_after\relax \ifdim\d_spac_lines_correction_before<\zeropoint\d_spac_lines_correction_before\zeropoint\fi \ifdim\d_spac_lines_correction_after <\zeropoint\d_spac_lines_correction_after \zeropoint\fi} %unexpanded\def\dotopbaselinecorrection{\kern\d_spac_lines_correction_before} %unexpanded\def\dobotbaselinecorrection{\kern\d_spac_lines_correction_after } % experiment, todo: proper mkiv mechanism % % \input ward \par % \startframedtext test \stopframedtext % \input ward \par % \startlinecorrection \framed{xxx} \stoplinecorrection % \input ward \par % % \setupwhitespace[big] % % \input ward \par % \startframedtext test \stopframedtext % \input ward \par % \startlinecorrection \framed{xxx} \stoplinecorrection % \input ward \par % to be redone: \unexpanded\def\dotopbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_before]} \unexpanded\def\dobotbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_after ]} \def\showbaselinecorrection {\def\dobaselinecorrection % visualization is not watertight! {\bgroup \ifdim\prevdepth>\zeropoint \kern-\prevdepth \fi \setbox\scratchbox\emptyhbox \wd\scratchbox\hsize \dp\scratchbox\strutdp \nointerlineskip \forgetall \ruledvbox{\box\scratchbox}% \egroup \prevdepth\strutdp}% \def\dotopbaselinecorrection {\hrule\s!height\d_spac_lines_correction_before}% \def\dobotbaselinecorrection {\hrule\s!height\d_spac_lines_correction_after}} \def\dobaselinecorrection % beware, this one is redefined / used locally elsewhere {\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi \kern\strutdp \prevdepth\strutdp} \def\baselinecorrection {\endgraf \ifvmode \ifdim\prevdepth<\maxdimen \ifdim\prevdepth<\zeropoint \else \ifdim\prevdepth<\strutdepth \relax \pushlastnode \dobaselinecorrection \poplastnode \fi \fi \fi \fi} \def\pagebaselinecorrection {\ifdim\pagegoal<\maxdimen \ifdim\pagetotal>\lineheight % or \topskip \scratchdimen\pagetotal \advance\scratchdimen\lineheight \ifdim\scratchdimen<\pagegoal \baselinecorrection \fi \fi \fi} \unexpanded\def\startbaselinecorrection {\bgroup \let\stopbaselinecorrection\egroup \ifcase\baselinecorrectionmode \or % normal \baselinecorrection \ifvmode \setbox\scratchbox\vbox\bgroup\ignorespaces \let\stopbaselinecorrection\donormalstopbaselinecorrection \fi \or % off \or % force \baselinecorrection \ifvmode \setbox\scratchbox\vbox\bgroup\ignorespaces \let\stopbaselinecorrection\doforcedstopbaselinecorrection \fi \fi} \let\stopbaselinecorrection\relax \def\donormalstopbaselinecorrection % I have to check columns yet. {\egroup \topbaselinecorrection \box\scratchbox \botbaselinecorrection \egroup} \def\doforcedstopbaselinecorrection % I have to check columns yet. {\egroup \forcedtopbaselinecorrection \box\scratchbox \forcedbotbaselinecorrection \egroup} %D We do a bit more checking than needed. The pageborder check %D is not needed, but I want to look the visualization as good %D as possible too. \setnewconstant\baselinecorrectionmode\plusone \def\onbaselinecorrection {\baselinecorrectionmode\plusone } \def\offbaselinecorrection {\baselinecorrectionmode\plustwo } \def\forcebaselinecorrection{\baselinecorrectionmode\plusthree} %D \macros %D {topbaselinecorrection,botbaselinecorrection} %D %D The actual top and bottom corrections are implemented as: \def\topbaselinecorrection {\ifvmode \ifdim\pagegoal<\maxdimen \forcedtopbaselinecorrection \fi \fi} \def\forcedtopbaselinecorrection {\ifvmode \bgroup \spac_lines_initialize_corrections \whitespace % no longer ok \nointerlineskip \dotopbaselinecorrection \egroup \fi} \def\botbaselinecorrection {\ifvmode \bgroup \spac_lines_initialize_corrections \dobotbaselinecorrection \allowbreak % new, otherwise problems when many in a row \prevdepth\strutdp \egroup \fi} \let\forcedbotbaselinecorrection\botbaselinecorrection % nointerlineskip % % startpacked % \startlinecorrection \framed{test} \stoplinecorrection % \startlinecorrection \framed{test} \stoplinecorrection % \stoppacked \def\forcedtopbaselinecorrection {\ifvmode \bgroup \spac_lines_initialize_corrections \vspacing[\v!white] % \nointerlineskip % \dotopbaselinecorrection \egroup \fi} \def\dobaselinecorrection {\ifdim\prevdepth>\zeropoint \vspacing[\the\dimexpr-\prevdepth+\strutdp\relax]% \else \vspacing[\the\dimexpr\strutdp\relax]% \fi \prevdepth\strutdp} \let\normalstartbaselinecorrection\startbaselinecorrection \unexpanded\def\startbaselinecorrection {\ifgridsnapping \snaptogrid[\v!normal]\vbox\bgroup \let\stopbaselinecorrection\egroup \else \normalstartbaselinecorrection \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-log.lua0000644000175000017500000000601212161703335024121 0ustar norbertnorbertif not modules then modules = { } end modules ['font-log'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next, format, lower, concat = next, string.format, string.lower, table.concat local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local report_defining = logs.reporter("fonts","defining") local basename = file.basename local fonts = fonts local loggers = { } fonts.loggers = loggers local usedfonts = utilities.storage.allocate() ----- loadedfonts = utilities.storage.allocate() --[[ldx--

The following functions are used for reporting about the fonts used. The message itself is not that useful in regular runs but since we now have several readers it may be handy to know what reader is used for which font.

--ldx]]-- function loggers.onetimemessage(font,char,message,reporter) local tfmdata = fonts.hashes.identifiers[font] local shared = tfmdata.shared local messages = shared.messages if not messages then messages = { } shared.messages = messages end local category = messages[message] if not category then category = { } messages[message] = category end if not category[char] then if not reporter then reporter = report_defining end reporter("char %U in font %a with id %s: %s",char,tfmdata.properties.fullname,font,message) category[char] = true end end function loggers.register(tfmdata,source,specification) -- save file name in spec here ! ! ! ! ! ! if tfmdata and specification and specification.specification then local name = lower(specification.name) if trace_defining and not usedfonts[name] then report_defining("registering %a as %a, used %a",file.basename(specification.name),source,file.basename(specification.filename)) end specification.source = source -- loadedfonts[lower(specification.specification)] = specification usedfonts[lower(specification.filename or specification.name)] = source end end function loggers.format(name) -- should be avoided return usedfonts[name] or "unknown" end statistics.register("loaded fonts", function() if next(usedfonts) then local t, n = { }, 0 local treatmentdata = fonts.treatments.data for name, used in table.sortedhash(usedfonts) do n = n + 1 local base = basename(name) if complete then t[n] = format("%s -> %s",used,base) else t[n] = base end local treatment = treatmentdata[base] if treatment and treatment.comment then t[n] = format("%s (%s)",t[n],treatment.comment) end end return n > 0 and format("%s files: %s",n,concat(t,", ")) or "none" end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-vna.mkii0000644000175000017500000001307211754241457024267 0ustar norbertnorbert%D \module %D [ file=enco-vna, %D version=1999.12.12, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Vietnamese Accents, %D author=Han The Thanh & Adam Lindsay & Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is originally derived from the some files Han The Thanh %D prepared for \LATEX. The dual accent support is still preliminary, %D but works ok. It's now adapted to named glyphs, and is activated by %D \type {\useencoding[thisfile]}. %D This was apparently buggy from the start: there is nothing to %D disambiguate \type {\ohorn} from \type {\ohook}. Both are entered %D with \type {\h{o}} (AL)! %D Once stable, this code will move to \type {enco-acc.tex}. \startencoding[default] \defineaccent h A {\Ahook} \defineaccent d A {\Adotbelow} \defineaccent ` ^A {\Acircumflexgrave} \defineaccent ' ^A {\Acircumflexacute} \defineaccent ~ ^A {\Acircumflextilde} \defineaccent h ^A {\Acircumflexhook} \defineaccent d ^A {\Acircumflexdotbelow} \defineaccent ` uA {\Abrevegrave} \defineaccent ' uA {\Abreveacute} \defineaccent ~ uA {\Abrevetilde} \defineaccent h uA {\Abrevehook} \defineaccent d uA {\Abrevedotbelow} \defineaccent h E {\Ehook} \defineaccent d E {\Edotbelow} \defineaccent ` ^E {\Ecircumflexgrave} \defineaccent ' ^E {\Ecircumflexacute} \defineaccent ~ ^E {\Ecircumflextilde} \defineaccent h ^E {\Ecircumflexhook} \defineaccent d ^E {\Ecircumflexdotbelow} \defineaccent h I {\Ihook} \defineaccent d I {\Idotbelow} \defineaccent h O {\Ohook} \defineaccent d O {\Odotbelow} \defineaccent ` ^O {\Ocircumflexgrave} \defineaccent ' ^O {\Ocircumflexacute} \defineaccent ~ ^O {\Ocircumflextilde} \defineaccent h ^O {\Ocircumflexhook} \defineaccent d ^O {\Ocircumflexdotbelow} %defineaccent h O {\Ohorn} % !!! conflict with \Ohook! \defineaccent ` hO {\Ohorngrave} \defineaccent ` {\Ohorn} {\Ohorngrave} \defineaccent ' hO {\Ohornacute} \defineaccent ' {\Ohorn} {\Ohornacute} \defineaccent ~ hO {\Ohorntilde} \defineaccent ~ {\Ohorn} {\Ohorntilde} \defineaccent h hO {\Ohornhook} \defineaccent h {\Ohorn} {\Ohornhook} \defineaccent d hO {\Ohorndotbelow} \defineaccent d {\Ohorn} {\Ohorndotbelow} \defineaccent h U {\Uhook} \defineaccent d U {\Udotbelow} %defineaccent h U {\Uhorn} % !!! conflict with \Uhook! honestly, people! \defineaccent ` hU {\Uhorngrave} \defineaccent ` {\Uhorn} {\Uhorngrave} \defineaccent ' hU {\Uhornacute} \defineaccent ' {\Uhorn} {\Uhornacute} \defineaccent ~ hU {\Uhorntilde} \defineaccent ~ {\Uhorn} {\Uhorntilde} \defineaccent h hU {\Uhornhook} \defineaccent h {\Uhorn} {\Uhornhook} \defineaccent d hU {\Uhorndotbelow} \defineaccent d {\Uhorn} {\Uhorndotbelow} \defineaccent ` Y {\Ygrave} \defineaccent ' Y {\Yacute} \defineaccent ~ Y {\Ytilde} \defineaccent h Y {\Yhook} \defineaccent d Y {\Ydotbelow} \defineaccent h a {\ahook} \defineaccent d a {\adotbelow} \defineaccent ` ^a {\acircumflexgrave} \defineaccent ' ^a {\acircumflexacute} \defineaccent ~ ^a {\acircumflextilde} \defineaccent h ^a {\acircumflexhook} \defineaccent d ^a {\acircumflexdotbelow} \defineaccent ` ua {\abrevegrave} \defineaccent ' ua {\abreveacute} \defineaccent ~ ua {\abrevetilde} \defineaccent h ua {\abrevehook} \defineaccent d ua {\abrevedotbelow} \defineaccent h e {\ehook} \defineaccent d e {\edotbelow} \defineaccent ` ^e {\ecircumflexgrave} \defineaccent ' ^e {\ecircumflexacute} \defineaccent ~ ^e {\ecircumflextilde} \defineaccent h ^e {\ecircumflexhook} \defineaccent d ^e {\ecircumflexdotbelow} \defineaccent h i {\ihook} \defineaccent d i {\idotbelow} \defineaccent h o {\ohook} \defineaccent d o {\odotbelow} \defineaccent ^ o {\ocircumflex} \defineaccent ` ^o {\ocircumflexgrave} \defineaccent ' ^o {\ocircumflexacute} \defineaccent ~ ^o {\ocircumflextilde} \defineaccent h ^o {\ocircumflexhook} \defineaccent d ^o {\ocircumflexdotbelow} %defineaccent h o {\ohorn} % !!! \defineaccent ` ho {\ohorngrave} \defineaccent ' ho {\ohornacute} \defineaccent ~ ho {\ohorntilde} \defineaccent h ho {\ohornhook} \defineaccent d ho {\ohorndotbelow} \defineaccent ` {\ohorn} {\ohorngrave} \defineaccent ' {\ohorn} {\ohornacute} \defineaccent ~ {\ohorn} {\ohorntilde} \defineaccent h {\ohorn} {\ohornhook} \defineaccent d {\ohorn} {\ohorndotbelow} \defineaccent h u {\uhook} \defineaccent d u {\udotbelow} %defineaccent h u {\uhorn} % !!! \defineaccent ` hu {\uhorngrave} \defineaccent ' hu {\uhornacute} \defineaccent ~ hu {\uhorntilde} \defineaccent h hu {\uhornhook} \defineaccent d hu {\uhorndotbelow} \defineaccent ` {\uhorn} {\uhorngrave} \defineaccent ' {\uhorn} {\uhornacute} \defineaccent ~ {\uhorn} {\uhorntilde} \defineaccent h {\uhorn} {\uhornhook} \defineaccent d {\uhorn} {\uhorndotbelow} \defineaccent ` y {\ygrave} \defineaccent ' y {\yacute} \defineaccent ~ y {\ytilde} \defineaccent h y {\yhook} \defineaccent d y {\ydotbelow} \stopencoding \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-imp-dum.mkiv0000644000175000017500000001404212130411274025051 0ustar norbertnorbert%D \module %D [ file=meta-dum, %D version=2003.03.21, %D title=\METAPOST\ Graphics, %D subtitle=Dummy (External) Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This library overloads the normal external figure %D placeholder by a nicer one. %D %D \startbuffer %D \useMPlibrary[dum] %D %D \startlinecorrection %D \externalfigure[unknown-a][width=3cm,height=1cm] %D \stoplinecorrection %D %D \startlinecorrection %D \externalfigure[unknown-b][width=4cm,height=5cm] %D \stoplinecorrection %D \stopbuffer %D %D \typebuffer \getbuffer % currently preparempvariables is unable to resolve number % fractions like reduction % June 22, 2003, this definition was patched to adapt itself % to transparent colors, but ... in 2011 we no longer have % is_transparent so we revert. % % \startuseMPgraphic{placeholder}{width,height,reduction,color} % numeric w, h, d, r ; color c, b, cc ; path p ; boolean t ; % t := is_transparent(\MPvar{color}) ; % c := not_transparent(\MPvar{color}) ; % b := not_transparent(white) ; % w := \MPvar{width} ; % h := \MPvar{height} ; % r := \MPvar{reduction} ; % d := max(w,h) ; % p := unitsquare xyscaled (w,h) ; % cc := r[.5c,b] ; % fill p withcolor if t : transparent(1,.5,cc) else : cc fi ; % for i := 1 upto 60 : % cc := r[c randomized(.3,.9),b] ; % fill fullcircle % scaled (d/5 randomized (d/5)) % shifted (center p randomized (d)) % withcolor if t : transparent(1,.5,cc) else : cc fi ; % endfor ; % clip currentpicture to p ; % \stopuseMPgraphic \startuseMPgraphic{figure:placeholder}{width,height,reduction,color} numeric w, h, d, r ; path p ; if cmykcolor \MPvar{color} : cmykcolor c, b ; b := (0,0,0,0) else : color c, b ; ; b := (1,1,1) fi ; c := \MPvar{color} ; w := \MPvar{width} ; h := \MPvar{height} ; r := \MPvar{reduction} ; d := max(w,h) ; p := unitsquare xyscaled (w,h) ; fill p withcolor r[.5c,b] ; for i := 1 upto 60 : fill fullcircle scaled (d/5 randomized (d/5)) shifted (center p randomized (d)) withcolor r[c randomized(.3,.9),b] ; endfor ; clip currentpicture to p ; \stopuseMPgraphic \defineoverlay [figure:placeholder:graphic] [\useMPgraphic {figure:placeholder}% {width=\figurewidth,% height=\figureheight,% reduction=\externalfigureparameter\c!reduction,% color=placeholder:\the\c_grph_replacement_n}] \definepalet [placeholder] [1=red,2=green,3=blue,4=cyan,5=magenta,6=yellow] \newcount\c_grph_replacement_n \setupexternalfigures [\c!reduction=0, \c!text=\v!yes] \let\grph_include_replacement_saved\grph_include_replacement \unexpanded\def\grph_include_replacement#1#2#3% {\begingroup \getpaletsize[placeholder]% \ifnum\c_grph_replacement_n=\zerocount \getrandomnumber \m_grph_replacement_n\plusone\paletsize \global\c_grph_replacement_n \m_grph_replacement_n\relax \else \global\advance\c_grph_replacement_n\plusone \fi \ifnum\c_grph_replacement_n>\paletsize \global\c_grph_replacement_n\plusone \fi \setupcurrentexternalfigure [\c!width=\figurewidth, \c!height=\figureheight, \c!frame=\v!off, \c!strut=\v!no, \c!align={\v!middle,\v!lohi}, \c!background=figure:placeholder:graphic, \c!foregroundcolor=\s!white]% \doifelse{\externalfigureparameter\c!text}\v!yes {\edef\m_graphics_text_a{#1}\edef\m_graphics_text_a{\ifx\m_graphics_text_a\s!dummy\else\detokenize\expandafter{\m_graphics_text_a}\fi}% \edef\m_graphics_text_b{#2}\edef\m_graphics_text_b{\ifx\m_graphics_text_b\s!dummy\else\detokenize\expandafter{\m_graphics_text_b}\fi}% \edef\m_graphics_text_c{#3}\edef\m_graphics_text_c{\ifx\m_graphics_text_c\s!dummy\else\detokenize\expandafter{\m_graphics_text_c}\fi}% \infofont\setupinterlinespace\dohyphens \inheritedexternalfigureframed{\directsetup{figure:placeholder:text}}}% {\inheritedexternalfigureframed{}}% \endgroup} \unexpanded\def\dummyfigure {\externalfigure[placeholder]} \startsetups figure:placeholder:text \ifx\m_graphics_text_a\empty\else \strut name: \m_graphics_text_a\par \fi \ifx\m_graphics_text_b\empty\else \strut \ifx\m_graphics_text_a\empty \ifx\m_graphics_text_c\empty \else file:\space \fi \else file:\space \fi \m_graphics_text_b\par \fi \ifx\m_graphics_text_c\empty\else \strut state: \m_graphics_text_c\par \fi \stopsetups %D \starttyping %D \externalfigure[mediashow.swf][comment={Alas, we have no nice preview},background=figure:comment] %D \externalfigure[mediashow.swf][comment={Alas, we have no nice preview},background=figure:dummy] %D \externalfigure[mediashow.swf][background=figure:dummy] %D \stoptyping \defineframed [figurecomment] [\c!background=\v!color, \c!backgroundcolor=\s!gray, \c!frame=\v!off, \c!foregroundstyle=\ttbf, \c!align={\v!middle,\v!lohi}, \c!height=\figureheight, \c!width=\figurewidth] \defineframed [figuredummy] [\c!background=figure:dummy:only, \c!foregroundcolor=\s!white, \c!backgroundcolor=\v!gray, \c!frame=\v!off, \c!foregroundstyle=\ttbf, \c!align={\v!middle,\v!lohi}, \c!height=\figureheight, \c!width=\figurewidth] \defineoverlay [figure:dummy:only] [\grph_include_replacement\empty\empty\empty] \defineoverlay [figure:comment] [\figurecomment{\externalfigureparameter\c!comment}] \defineoverlay [figure:dummy] [\figuredummy{\externalfigureparameter\c!comment}] \setupexternalfigures [\c!comment=] \protect \continueifinputfile{meta-imp-dum.mkiv} \starttext \externalfigure[whatever-missing] \blank \externalfigure[whatever-missing][width=2cm] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/m-graph.mkii0000644000175000017500000001425611754241457024121 0ustar norbertnorbert%D \module %D [ file=m-graph, %D version=2000.08.06, %D title=\CONTEXT\ Extra Modules, %D subtitle=\METAPOST\ graph module support, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I finally finished graph support, if only because I could %D not stand the idea that Karel Wesseling would revert to %D \PiCTeX. % pre 2000.08.06 version % % \forceMPTEXgraphictrue % % \startMPinitializations % initialize_numbers ; % make sure that pseudo typesetting is set up % input graph ; % load the graph package % Autoform := "@g" ; % change the % template char into @ % \stopMPinitializations %D The latest version does things more automatically (and %D efficiently when no text processing is needed). For %D definitions embedded in your document, you need to %D use \type {@} as template character, in external files, %D \type {%} is also supported. \startMPinclusions input graph ; \stopMPinclusions %D Graphics that have \type {begingraph} in them are %D recognized as such and force handling of embedded \TEX\ %D code. \forceMPTEXcheck{begingraph} %D If you run into troubles, try: %D %D \starttyping %D \forceMPTEXgraphictrue %D \stoptyping %D %D A demo can be run with: %D %D \starttyping %D texexec --mode=demo --pdf m-graph %D \stoptyping \startMPinclusions % @# is X_ or Y_; $ is Gxcvlin_ or Gycvlin_; l and h are numeric or string % It would not be OK to set (@#low,@#high) to a pair expression because $ might % try to rescale @#low when evaluating the right-hand side for @#high. vardef Gsetr_@\#(suffix $)(expr l, h) = Gclbnds_@\# ; if @\#ctyp>0 : @\#low = if abs @\#ctyp<>log: $ fi Mlog_Str l ; @\#high = if abs @\#ctyp<>log: $ fi Mlog_Str h ; else : -@\#high = if abs @\#ctyp<>log: $ fi Mlog_Str l ; -@\#low = if abs @\#ctyp<>log: $ fi Mlog_Str h ; fi enddef ; \stopMPinclusions \doifnotmode {demo} {\endinput} %D You need to have the data files in your path, %D otherwise the run is aborted. \doiffileelse {agepop91.d} {} {\writestatus{graph}{no data files found}\wait\end} %D The test: \starttext \startMPpage draw begingraph(3in,2in); gdraw "agepop91.d"; endgraph; \stopMPpage \startMPpage draw begingraph(3in,2in); gdraw "agepop91.d" plot btex$\bullet$etex; endgraph; \stopMPpage \startMPpage draw begingraph(3in,2in); glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT); glabel.bot(btex Age in years etex, OUT); gdraw "agepopm.d"; endgraph; \stopMPpage \startMPpage draw begingraph(3in,2in); glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT); glabel.bot(btex Age in years etex, OUT); setrange(origin, whatever,whatever); gdraw "agepopm.d"; endgraph; \stopMPpage \startMPpage draw begingraph(2.3in,2in); setcoords(log,log); glabel.lft(btex Seconds etex,OUT); glabel.bot(btex Matrix size etex, OUT); gdraw "matmul.d" dashed evenly; glabel.ulft(btex Standard etex,8); gdraw "matmul.d"; glabel.lrt(btex Strassen etex,7); endgraph; \stopMPpage \startMPpage draw begingraph(6.5cm,4.5cm); setrange(80,0, 90,whatever); glabel.bot(btex Year etex, OUT); glabel.lft(btex \vbox{\hbox{Emissions in} \hbox{thousands of} \hbox{metric tons} \hbox{(heavy line)}}etex, OUT); gdraw "lead.d" withpen pencircle scaled 1.5pt; autogrid(,otick.lft); setcoords(linear,linear); setrange(80,0, 90,whatever); glabel.rt(btex \vbox{\hbox{Micrograms} \hbox{per cubic} \hbox{meter of air} \hbox{(thin line)}}etex, OUT); gdraw "lead.d"; autogrid(otick.bot,otick.rt); endgraph; \stopMPpage \stoptext % No longer needed, since John will fix it. % % %D For the moment we need the following patch. Adam T. Lindsay % %D found out that the following code produced an error: % %D % %D \starttyping % %D \startMPcode % %D draw begingraph(130mm,35mm); % %D setrange(0,0,10,22000); % %D glabel.lft(btex {correct 0--22000} etex rotated 90, OUT); % %D autogrid(itick.bot,grid.lft) withcolor .75white ; % %D endgraph; % %D \stopMPcode % %D % %D \startMPcode % %D draw begingraph(130mm,35mm); % %D setrange(0,50,10,22000); % %D glabel.lft(btex {wrong 50--22000} etex rotated 90, OUT); % %D autogrid(itick.bot,grid.lft) withcolor .75white ; % %D endgraph; % %D \stopMPcode % %D % %D \startMPcode % %D draw begingraph(130mm,35mm); % %D setrange(0,110,10,30000); % %D glabel.lft(btex {failed 110--22000} etex rotated 90, OUT); % %D autogrid(itick.bot,grid.lft) withcolor .75white ; % %D endgraph; % %D \stopMPcode % %D \stoptyping % %D % %D The bug is a rather nasty one and needs some tweaking in % %D the low level graph code. John Hobby suggested for the % %D moment to initialize \type {setrange} as follows: % %D % %D \starttyping % %D setrange(0,0,"22000","22000") % %D \stoptyping % %D % %D Folowing this suggesion, I provide the following % %D extension: % def begingraph(expr w, h) = % begingroup % save X_, Y_, Gfin_, Gcur_, Gcbb_, Gneedgr_, Gneedfr_, Gdidsc_; % save Gdpic_, Gppic_, Ggl_, Garw_; % picture Gfin_, Gcur_, Gcbb_, Gdpic_, Gppic_, Ggl_[]; % boolean Gneedgr_, Gneedfr_, Gdidsc_; % Gfin_ = nullpicture; % Gcur_ = nullpicture; % Gcbb_ = nullpicture; % X_.ctyp = Y_.ctyp = linear; % Z_.gdim = (w,h); % X_.sc = Y_.sc = 0; % Gneedgr_ = true; % Gneedfr_ = true; % Gdidsc_ = false; % Gdpic_ = nullpicture; % Garw_ = 0; % scantokens everybegingraph ; % enddef; % % boolean fixsetrange ; fixsetrange := true ; % % vardef dosetrange(text t) = % interim warningcheck:=0; % save r_; r_=0; % string r_[]s; % for x_= % for p_=t: if pair p_: xpart p_, ypart fi p_, endfor: % r_[incr r_] if string x_: s fi = x_; % if r_>2: % Gsetr_ if r_=3: X_(Gxcvlin_) else: Y_(Gycvlin_) fi( % r_[r_-2] if unknown r_[r_-2]: s fi, x_); % fi % exitif r_=4; % endfor % enddef; % % vardef setrange(text t) = % if fixsetrange : dosetrange(0,0,20000,20000) ; fi ; % dosetrange(t) ; % enddef ; % % if unknown everybegingraph : % string everybegingraph ; % % everybegingraph := "setrange(0,0,20000,20000)" ; % fi ; context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-mat.mkii0000644000175000017500000001767611754241457024345 0ustar norbertnorbert%D \module %D [ file=supp-mat, %D version=1998.09.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Math, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For practical reasons, I decided to move some math things to %D a support module. There is nothing spectacular here. It may move %D back to math-ini. \writestatus{loading}{ConTeXt Support Macros / Math} \unprotect %D \macros %D {mathematics, math, nomathematics, startmathmode} %D %D The \type{$} can be both an begin and end math character. %D This can lead to confusing and errorprone situations when %D macros insert \type{$}. When for instance we have defined: %D %D \starttyping %D \def\MyPlus{$\,+\,$} %D \stoptyping %D %D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to: %D %D \starttyping %D $x^2 $\,+\,$ y^2 = r^2$ %D \stoptyping %D %D Here the \type{\,} are given outside math mode and \TEX\ will %D definitely complain about this. A more save definition would %D have been: %D %D \starttyping %D \def\MyPlus{\mathematics{\,+\,}} %D \stoptyping %D %D Which is implemented as: \long\def\mathematics#1{\relax\ifmmode#1\else $#1$\fi} % lookahead bug reported by brooks \long\def\displaymath#1{\relax\ifmmode#1\else$$#1$$\fi} \long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi} \let\stopmathmode\relax \def\startmathmode % cannot be used nested {\relax\ifmmode \let\stopmathmode\relax \else $\def\stopmathmode{$}% \let\stopmathmode=$ \fi} \def\startmathmode % nested variant {\relax\ifmmode \begingroup\let\stopmathmode\endgroup \else $\let\stopmathmode$% \fi} \def\nomathematics#1% {\relax\ifmmode\hbox{#1}\else#1\fi} \let\math\mathematics %D \macros %D {displaymathematics,inlinemathematics,automathematics} %D %D An example of usage of the following can be found in the MathML module: \long\def\displaymathematics#1{\relax\ifmmode#1\else\dostartformula{}#1\dostopformula\fi} \def\inlinemathematics {\dontleavehmode\mathematics} \def\automathematics {\relax\ifhmode\@EA\inlinemathematics\else\@EA\displaymathematics\fi} % better, esp when used in bTABLE ... eTABLE \def\automathematics {\relax \ifhmode \expandafter\inlinemathematics \else\ifintable \expandafter\expandafter\expandafter\inlinemathematics \else \expandafter\expandafter\expandafter\displaymathematics \fi\fi} %D \macros %D {dimension, nodimension} %D %D The next few macros are used for typesetting dimensions in %D such a way that spacing is acceptable. I won't spend much %D words on these macros, because they will be overloaded in %D the units module. \newsignal\dimensionsignal \def\dimensiontypeface {\tf} \def\dimensionhalfspace {\,} \unexpanded\def\dimension#1% {\def\dodimensionsignal{\kern\dimensionsignal}% \ifdim\lastskip=\zeropoint\relax \ifdim\lastkern=\zeropoint\relax \ifmmode \mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% \else \mathematics{\dimensiontypeface#1}% \fi \else\ifdim\lastkern=\dimensionsignal \mathematics{\dimensionhalfspace\dimensiontypeface#1}% \else \unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% \fi\fi \else \unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% \fi \dodimensionsignal} \unexpanded\def\nodimension#1% {\unskip#1\global\let\dodimensionsignal\relax} %D \macros %D {super, suber} %D %D \TEX\ uses \type{^} and \type{_} for entering super- and %D subscript mode. We want however a bit more control than %D normally provided, and therefore provide \type {\super} %D and \type{\suber} (\type {\sub} is already taken). \global\let\normalsuper=^ \global\let\normalsuber=_ \newcount\supersubmode \newevery\everysupersub \EverySuperSub \appendtoks \advance\supersubmode 1\relax \to \everysupersub % \def\dodosuper#1{\normalsuper{\the\everysupersub#1}} % \def\dodosuber#1{\normalsuber{\the\everysupersub#1}} % % \def\dosuper{\ifx\next\bgroup\expandafter\dodosuper\else\normalsuper\fi} % \def\dosuber{\ifx\next\bgroup\expandafter\dodosuber\else\normalsuber\fi} % % \def\super{\futurelet\next\dosuper} % \def\suber{\futurelet\next\dosuber} \def\super#1{\normalsuper{\the\everysupersub#1}} \def\suber#1{\normalsuber{\the\everysupersub#1}} %D \macros %D {enablesupsub} %D %D We can let \type {^} and \type {_} act like \type {\super} %D and \type {\suber} by saying \type {\enablesupsub}. \bgroup \catcode`\^=\@@active \catcode`\_=\@@active \gdef\enablesupsub {\catcode`\^=\@@active \def^{\ifmmode\expandafter\super\else\expandafter\normalsuper\fi}% \catcode`\_=\@@active \def_{\ifmmode\expandafter\suber\else\expandafter\normalsuber\fi}} \egroup %D \macros %D {restoremathstyle} %D %D We can pick up the current math style by calling \type %D {\restoremathstyle}. \def\restoremathstyle {\ifmmode \ifcase\supsubmode \textstyle \or \scriptstyle \else \scriptscriptstyle \fi \fi} %D \macros %D {cramped} %D %D \TEX provides no primitive to force in cramped math mode. Here is %D a macro that does so. It is based on a solution by Don Knuth (\useurl %D {http://www.ctan.org/tex-archive/digests/tex-implementors/042}). %D %D \startbuffer %D \ruledhbox{$\left\{{x^2\over y^2}\right\}$} %D \ruledhbox{$\cramped{\left\{ {x^2\over y^2}\right\}}$} %D \stopbuffer %D %D \typebuffer \getbuffer \def\cramped {\mathpalette\docramped} %D We force a cramped style by issuing a non||existing radical (box). %D After that we make sure the height is correct. (Comment taken from %D Morten Høgholm's mathtools package.) Macro suggested by AM and %D cleaned up a bit by HH. % original % % \def\docramped#1#2% % {\setbox\scratchbox\hbox % {\nulldelimiterspace\zeropoint % $\mathsurround\zeropoint#1\radical\zerocount{#2}$}% % \ifx#1\displaystyle % \scratchdimen\fontdimen8\textfont3 % \advance\scratchdimen .25\fontdimen5\textfont2 % \else % \scratchdimen1.25\fontdimen8 % \ifx#1\textstyle\textfont % \else % \ifx#1\scriptstyle\scriptfont\else\scriptscriptfont\fi % \fi % 3 % \fi % \advance\scratchdimen-\ht\scratchbox % \ht\scratchbox-\scratchdimen % \box\scratchbox} \def\docramped#1#2% {\begingroup % added HH, made even more cramped \setbox\scratchbox\hbox {\nulldelimiterspace\zeropoint $\mathsurround\zeropoint#1\radical\zerocount{#2}$}% \ht\scratchbox-\dimexpr \ifx#1\displaystyle \fontdimen8\textfont3 +.25\fontdimen5\textfont2 \else 1.25\fontdimen8 \ifx#1\textstyle \textfont \else\ifx#1\scriptstyle \scriptfont \else \scriptscriptfont \fi \fi \plusthree \fi -\ht\scratchbox \relax \box\scratchbox \endgroup} %D \macros %D {cramedllap, crampedrlap, crampedclap} %D %D In many cases, one wants to use the \tex {clap} macro in %D math mode while using subscripts. Normally, subscripts are %D in cramped mode, and these macros allow you to go to %D cramped mode. For example: %D %D \startbuffer %D \startformula %D \sum_{a^2 < b^2 < c^2} \quad %D \sum_{\clap{a^2 < b^2 < c^2}} \quad %D \sum_{\crampedclap{a^2 < b^2 < c^2}} %D \stopformula %D \stopbuffer %D %D \start %D \typebuffer %D \switchtobodyfont[24pt] %D \getbuffer %D \stop %D %D Notice that \type {\clap{\cramped ... }} would also work, %D but it requires \TEX\ to typeset it arguments 16 times. \def\docrampedllap#1#2{{}\dollap{\docramped #1{#2}}} \def\docrampedrlap#1#2{{}\dorlap{\docramped #1{#2}}} \def\docrampedclap#1#2{{}\doclap{\docramped #1{#2}}} \def\crampedllap{\mathpalette\docrampedllap} \def\crampedrlap{\mathpalette\docrampedrlap} \def\crampedclap{\mathpalette\docrampedclap} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-30.mkii0000644000175000017500000001157711754241457024037 0ustar norbertnorbert%D \module %D [ file=s-pre-30, %D version=2006.04.25, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 30, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[streams] \setuppapersize [S6] [S6] \setupbodyfont [12pt,tt] \definemeasure[bleed][6pt] \definecolor[maincolor-3][r=.5,g=.2,b=.2] \definecolor[maincolor-1][r=.2,g=.5,b=.2] \definecolor[maincolor-2][r=.2,g=.2,b=.5] \definecolor[pagecolor] [s=.5] \definecolor[resultcolor][s=1,t=.85,a=1] \definecolor[maincolor] [maincolor-3] \definecolorgroup [maingroup] [.5:.2:.2, .2:.5:.2, .2:.2:.5] \definecolorgroup [resultgroup] [1:.85:.85, .85:1:.85, .85:.85:1] \def\CurrentColor{1} \definecolor[maincolor] [maingroup:\CurrentColor] \definecolor[resultcolor][resultgroup:\CurrentColor] \def\NextColor{\ifnum\CurrentColor=3 \def\CurrentColor{1}\else\doglobal\increment\CurrentColor\fi} \setuplayout [backspace=\measure{bleed}, topspace=30pt, bottomdistance=\measure{bleed}, bottom=\dimexpr30pt-\measure{bleed}\relax, header=0pt, footer=0pt, topdistance=\measure{bleed}, top=\dimexpr30pt-\measure{bleed}\relax, width=middle, height=middle] \setuptop [before=\vfill, after=\vfill, strut=yes] \setupbackgrounds [text] [backgroundoffset=\measure{bleed}, background=color, backgroundcolor=maincolor] \setupbackgrounds [page] [background=color, backgroundcolor=pagecolor] \setupcolors [state=start, textcolor=white] \setuphead [chapter] [style=\ttd] \setuphead [section] [style=\ttd] \defineproperty [result] [layer] [state=stop] \definelayer [result] \setuplayer [result] [width=\textwidth, height=\textheight] \setupbackgrounds [text] [background={color,toggle,foreground,result}] \setupinteraction [state=start, click=no, menu=on, color=white, contrastcolor=white, closepageaction=HideLayer{result}, openpageaction=HideLayer{result}] % We add a dummy color switch so that each page has at least one % transparency; else acrobat will render the pages differently % bug in 6 and 7). \startinteractionmenu[bottom] % \color[resultcolor]{ }% \hfill \got [content] content \\ \got [previouspage] previous \\ \got [nextpage] next \\ \got [ToggleLayer{result}] result \\ \got [CloseDocument] close \\ \stopinteractionmenu \setuphead [section] [placehead=no, incrementnumber=list] \setuplist [section] [alternative=f] \defineoverlay [toggle] [\overlaybutton{ToggleLayer{result}}] \definestreamlayer [resultstream] \startsetups streamlayer:resultstream:flush \setlayer [result] [preset=middlebottom, hoffset=\measure{bleed}, % voffset=-\measure{bleed}] voffset=\measure{bleed}] {\startproperty[result]% % \framed % [offset=overlay, % frame=off, % background=color, % backgroundoffset=1\dimexpr\measure{bleed}\relax, % backgroundcolor=maincolor] {\framed [offset=overlay, frame=off, foregroundcolor=maincolor, background=color, backgroundoffset=1\dimexpr\measure{bleed}\relax, backgroundcolor=resultcolor] {\tightlayer[\currentstreamlayer]}} \stopproperty} \stopsetups \startsetups show-definition \subject{definition} \typebuffer \getbuffer \page \stopsetups \startsetups show-result \startstreamlayer[resultstream] \subject{result} \getbuffer \stopstreamlayer \placestreamlayer[resultstream] \page \stopsetups \startsetups show-usage \subject{usage} \typebuffer \startstreamlayer[resultstream] \subject{result} \getbuffer \stopstreamlayer \placestreamlayer[resultstream] \page \stopsetups \startsetups show-usage-lines \subject{usage} \typebuffer \startstreamlayer[resultstream] \subject{result} \startlines \getbuffer \stoplines \stopstreamlayer \placestreamlayer[resultstream] \page \stopsetups \startsetups show-contents \startcolumns[n=3] \placelist[section][criterium=text] \stopcolumns \pagereference[content] \page \NextColor \stopsetups \def\TitlePage#1% {\title{#1} \setups{show-contents}} \def\StartSample#1% {\starttext \page \section{#1} \setuptoptexts[][\processedfile\enspace:\enspace\lowercase{#1}]} \def\StopSample {\page \setuptoptexts[][] \stoptext \NextColor} \endinput \usemodule[pre-30] % \TitlePage{Howling to the moon} \StartSample{Basics} \startbuffer \lua{a = 1.5 ; b = 1.8 ; c = a*b ; tex.print(c) ;} \startlua a = 1 b = 2 c = a*b tex.print(c) \stoplua \stopbuffer \setups{show-usage} \StopSample context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-raw.mkiv0000644000175000017500000000343012130411274024303 0ustar norbertnorbert%D \module %D [ file=grph-raw, %D version=2006.08.26, % overhaul of 1997.03.31 %D title=\CONTEXT\ Graphic Macros, %D subtitle=Raw Bitmaps, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Graphic Macros / Raw Bitmaps} %D \startluacode %D function document.TestBitmap(nx,ny) %D local random = math.random %D local maxbit = 2^24 %D for i=1,nx do %D for i=1,ny do %D context("%06x",random(0,maxbit)) %D end %D end %D end %D \stopluacode %D %D \def\TestBitmap#1#2{\ctxlua{document.TestBitmap(#1,#2)}} %D %D \blank %D %D \startMPcode %D draw textext("\bitmapimage[x=100,y=100]{\TestBitmap{100}{100}}") xsized 10cm ; %D \stopMPcode %D %D \blank %D %D \startMPcode %D draw textext("\bitmapimage[x=200,y=50]{\TestBitmap{50}{200}}") xsized 10cm ; %D \stopMPcode \registerctxluafile{grph-raw}{1.001} \unprotect \unexpanded\def\bitmapimage[#1]#2% {\hbox\bgroup \getdummyparameters[\c!color=rgb,\c!width=,\c!height=,\c!x=,\c!y=,#1]% \ctxlua{figures.bitmapimage { % we could pass #1 directly ... todo data = \!!bs#2\!!es, colorspace = "\directdummyparameter\c!color", width = "\directdummyparameter\c!width", height = "\directdummyparameter\c!height", xresolution = "\directdummyparameter\c!x", yresolution = "\directdummyparameter\c!y", }}% \egroup} \unexpanded\def\startbitmapimage[#1]#2\stopbitmapimage {\bitmapimage[#1]{#2}} \let\stopbitmapimage\relax \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-03.tex0000644000175000017500000001441311754241457023676 0ustar norbertnorbert%D \module %D [ file=s-pre-03, %D version=1998.09.06, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 3, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is the third environment for typesetting interactive %D presentations. I used this style for a talk on \TEX\ and %D \JAVASCRIPT\ at \TUG98, mainly because I didn't want to %D use the same style three times. Therefore this is a rather %D simple, silly style. \usemodule[pre-general] %D \macros %D {setupbodyfont} %D %D We use a large bodyfont. Combined with the fancy %D background, this does not leave that much room for text, but %D presentations should use much text anyway. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] %D \macros %D {setuppapersize,setuplayout,setupinteractionscreen} %D %D The page dimensions are set to size \type {S6}, being %D 600pt by 450pt. We use wide margins and discard headers %D and footers. We also launch the document full screen. \setuppapersize [S6][S6] \setuplayout [width=middle, height=middle, topspace=75pt, backspace=100pt, header=0pt, footer=0pt] \setupinteractionscreen [option=max] %D \macros %D {setupcolors,definecolor} %D %D Next, color support is turned on and a dark red color is %D defined. Other red shades will be derived from this one %D color. \setupcolors [state=start] \definecolor [PageColor] [black] \definecolor [BackgroundColor] [s=.85] \definecolor [OrnamentColor] [r=.75] %D \macros %D {setupinteraction} %D %D We turn on interaction mode and use the same color for %D hyperlinks and redundant hyperlinks (the ones that point %D to the current page). \setupinteraction [state=start, contrastcolor=OrnamentColor, color=OrnamentColor] %D \macros %D {defineoverlay, setupbackgrounds} %D %D The joke in this presentation is the elliptical shape of %D which the bottom part includes a page indication. \defineoverlay [PageShape][\useMPgraphic{PageShape}] % \startuseMPgraphic{PageShape} % lin := 20pt ; off := .75lin ; % wid := \overlaywidth ; hei := \overlayheight ; % pos := \currentpage ; tot := \lastpage ; % path bb; bb := unitsquare xscaled wid yscaled hei ; % filldraw bb withcolor \MPcolor{PageColor} ; % pickup pencircle xscaled .5lin yscaled lin rotated 45 ; % pair r, t, l, b ; % r := (wid-off,.5hei) ; t := (.5wid,hei-off) ; % l := (off,.5hei) ; b := (.5wid,off) ; % path p; p := superellipse(r,t,l,b,.8) ; % fill p withcolor \MPcolor{Backgroundcolor} ; % draw p withcolor \MPcolor{OrnamentColor} ; % color contrastcolor ; contrastcolor = 2/3 * \MPcolor{OrnamentColor} ; % if (pos>0) and (tot>0): % pair pa ; pa := point 5 of p ; % pair pb ; pb := point 7 of p ; % draw pa withcolor contrastcolor ; % draw pb withcolor contrastcolor ; % len := 2/tot ; % pair pa ; pa := point (5+len*pos) of p ; % pair pb ; pb := point (5+len*(pos-1)) of p ; % p := p cutafter pa ; % p := p cutbefore pb ; % draw p withcolor contrastcolor ; % fi ; % setbounds currentpicture to bb ; % \stopuseMPgraphic \startuseMPgraphic{PageShape} StartPage ; path p ; pair pa, pb ; numeric len ; color contrastcolor ; fill Page withcolor \MPcolor {PageColor} ; pickup pencircle rotated 45 xscaled 10pt yscaled 20pt ; p := Page enlarged (-10pt,-15pt) superellipsed .8 ; p := p shifted (-1.5pt,0) ; % looks better fill p withcolor \MPcolor{BackgroundColor} ; draw p withcolor \MPcolor{OrnamentColor} ; contrastcolor = 2/3 * \MPcolor{OrnamentColor} ; if (PageNumber>0) and (NOfPages>0): draw point 5 of p withcolor contrastcolor ; draw point 7 of p withcolor contrastcolor ; len := 2/NOfPages ; pa := point (5+len*PageNumber) of p ; pb := point (5+len*(PageNumber-1)) of p ; draw (p cutafter pa) cutbefore pb withcolor contrastcolor ; fi ; StopPage ; \stopuseMPgraphic %D We use the viewer provided feature to go to the previous or %D next page. \defineoverlay[PrevButton][\overlaybutton{PreviousPage}] \defineoverlay[NextButton][\overlaybutton{NextPage}] \setupbackgrounds [page] [background={PageShape,PrevButton}] \setupbackgrounds [text][text] [background=NextButton] % or using hard coded next/prev pages: % % \defineoverlay[PrevButton][\overlaybutton{previouspage}] % \defineoverlay[NextButton][\overlaybutton{nextpage}] % % \setupbackgrounds[state=repeat] % \setupbackground[text][text][background=NextButton] % % or simply (using an repeated layer): % % \setupbackground[text][background=NextButton] %D \macros %D {definehead, setuphead} %D %D Like the other presentation styles, we use \type {\Topic} %D instead of \type {\chapters}. This time we don't provide %D an additional sectioning. So we have: %D %D \starttyping %D \TitlePage{How nice} %D %D \Topics{This is about ...} %D %D \Topic{The first one} %D %D \Topic{Another one} %D \stoptyping \definehead [Topic] [chapter] \definehead [Nopic] [title] \setuphead [Topic,Nopic] [after={\blank[3*medium]}, number=no, style=\tfb, page=yes, alternative=middle] \setuplist [Topic] [alternative=g, interaction=all, before=, after=] \def\Subject {\Topic} %D The tables of contents is associated with \type %D {\Topics}. \def\Topics#1% {\Nopic[Topics]{#1} \placelist[Topic][criterium=all]} \def\Subjects {} %D Instead of \type {\TitlePage}, one can use the pair %D \type {\StartTitlePage} -- \type {\StopTitlePage}: %D %D \starttyping %D \StartTitlePage %D A Self Made Title %D \StopTitlePage %D \stoptyping \def\StartTitlePage% {\startstandardmakeup \bfd\setupinterlinespace \setupalign[middle] \vfil \def\\{\vfil\bfb\setupinterlinespace}} \def\StopTitlePage% {\vfil\vfil\vfil \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \TitlePage{Title Page\\pre-funny} \Topics{Some Nice Quotes} \Topic{A Few} \Subject{Knuth} \input knuth \Subject{Tufte} \input tufte \Topic{Some More} \Subject{Zapf} \input zapf \Subject{Bryson} \input bryson \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-aux.lua0000644000175000017500000001206312130411274024145 0ustar norbertnorbertif not modules then modules = { } end modules ['mult-aux'] = { version = 1.001, comment = "companion to mult-aux.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local find = string.find interfaces.namespaces = interfaces.namespaces or { } local namespaces = interfaces.namespaces local variables = interfaces.variables local trace_namespaces = false trackers.register("interfaces.namespaces", function(v) trace_namespaces = v end) local report_namespaces = logs.reporter("interface","namespaces") local v_yes, v_list = variables.yes, variables.list local prefix = "????" local meaning = "@@@@" local data = { } function namespaces.define(namespace,settings) if trace_namespaces then report_namespaces("installing namespace %a with settings %a",namespace,settings) end if data[namespace] then report_namespaces("namespace %a is already taken",namespace) end if #namespace < 2 then report_namespaces("namespace %a should have more than 1 character",namespace) end local ns = { } data[namespace] = ns utilities.parsers.settings_to_hash(settings,ns) local name = ns.name if not name or name == "" then report_namespaces("provide a (command) name in namespace %a",namespace) end local self = "\\" .. prefix .. namespace context.unprotect() -- context.installnamespace(namespace) context("\\def\\%s%s{%s%s}",prefix,namespace,meaning,namespace) -- or context.setvalue if trace_namespaces then report_namespaces("using namespace %a for %a",namespace,name) end local parent = ns.parent or "" if parent ~= "" then if trace_namespaces then report_namespaces("namespace %a for %a uses parent %a",namespace,name,parent) end if not find(parent,"\\") then parent = "\\" .. prefix .. parent -- todo: check if defined end end context.installparameterhandler(self,name) if trace_namespaces then report_namespaces("installing parameter handler for %a",name) end context.installparameterhashhandler(self,name) if trace_namespaces then report_namespaces("installing parameterhash handler for %a",name) end local style = ns.style if style == v_yes then context.installstyleandcolorhandler(self,name) if trace_namespaces then report_namespaces("installing attribute handler for %a",name) end end local command = ns.command if command == v_yes then context.installdefinehandler(self,name,parent) if trace_namespaces then report_namespaces("installing definition command for %a (single)",name) end elseif command == v_list then context.installdefinehandler(self,name,parent) if trace_namespaces then report_namespaces("installing definition command for %a (multiple)",name) end end local setup = ns.setup if setup == v_yes then context.installsetuphandler(self,name) if trace_namespaces then report_namespaces("installing setup command for %a (%s)",name,"single") end elseif setup == v_list then context.installsetuphandler(self,name) if trace_namespaces then report_namespaces("installing setup command for %a (%s)",name,"multiple") end end local set = ns.set if set == v_yes then context.installparametersethandler(self,name) if trace_namespaces then report_namespaces("installing set/let/reset command for %a (%s)",name,"single") end elseif set == v_list then context.installparametersethandler(self,name) if trace_namespaces then report_namespaces("installing set/let/reset command for %a (%s)",name,"multiple") end end local frame = ns.frame if frame == v_yes then context.installinheritedframed(name) if trace_namespaces then report_namespaces("installing framed command for %a",name) end end context.protect() end function utilities.formatters.list(data,key,keys) if not keys then keys = { } for _, v in next, data do for k, _ in next, v do keys[k] = true end end keys = table.sortedkeys(keys) end context.starttabulate { "|"..string.rep("l|",#keys+1) } context.NC() context(key) for i=1,#keys do context.NC() context(keys[i]) end context.NR() context.HL() for k, v in table.sortedhash(data) do context.NC() context(k) for i=1,#keys do context.NC() context(v[keys[i]]) end context.NR() end context.stoptabulate() end function namespaces.list() -- utilities.formatters.list(data,"namespace") local keys = { "type", "name", "comment", "version", "parent", "definition", "setup", "style" } utilities.formatters.list(data,"namespace",keys) end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-doc.mkiv0000644000175000017500000000165612130411274024302 0ustar norbertnorbert%D \module %D [ file=strc-doc, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Document Structure, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Document Structure} \registerctxluafile{strc-doc}{1.001} \unprotect %D This will move: \unexpanded\def\setstructuresynchronization#1% todo: use ctxcontext {\xdef\currentstructureattribute {\ctxlua {tex.write(structures.references.setinternalreference("\currentstructurereferenceprefix","\currentstructurereference",\nextinternalreference,"\interactionparameter\c!focus"))}}% \xdef\currentstructuresynchronize{\ctxlatecommand{enhancelist(#1)}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-database.mkii0000644000175000017500000002575211754241457024567 0ustar norbertnorbert%D \module %D [ file=m-database, %D version=2006.04.23, %D title=\CONTEXT\ Modules, %D subtitle=Database Thingies, %D author=Hans Hagen\& Taco Hoekwater, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \unprotect % % % to be added to mult-* files % % % % todo: \dontcollectseparatedlist via k/v \definesystemvariable{ls} \def\c!first {first} \def\c!last {last} \def\c!quotechar {quotechar} \let\@NX\noexpand %D {processquotedlist} %D %D An even more general list processing macro is the %D following one: %D %D \starttyping %D \processquotedlist{beginsym}{endsym}{separator}\docommand list %D \stoptyping %D %D This one supports arbitrary open and close symbols as well %D as user defined separators. %D %D \starttyping %D \processquotedlist(){,}{"}\docommand(a=>b=>c=>d) %D \stoptyping \def\processquotedlist#1#2#3#4#5% {\def\csvquotechar{#4}% \edef\doconvertcsvquoteditem#4##1#4##2% {\@NX\ifx##2#3% \let\@NX\next\@NX\doconvertcsvlist \def\@NX\arg{#3}% \edef\@NX\temp{##1}% \@NX\expanded{\@NX#5{\@NX\temp}}% \@NX\else \let\@NX\next\@NX\redoconvertcsvquoteditem \def\@NX\arg{##1\@NX\csvquotechar}% \@NX\fi \@NX\expandafter\@NX\next\@NX\arg}% \edef\redoconvertcsvquoteditem##1#4##2% {\@NX\ifx##2#3% \let\@NX\next\@NX\doconvertcsvlist \def\@NX\arg{#3}% \edef\@NX\temp{##1}% \@NX\expanded{\@NX#5{\@NX\temp}}% \@NX\else \let\@NX\next\@NX\redoconvertcsvquoteditem \def\@NX\arg{##1\@NX\csvquotechar}% \@NX\fi \@NX\expandafter\@NX\next\@NX\arg}% \edef\doconvertcsvitem##1#3% {\edef\@NX\temp{##1}% \@NX\expanded{\@NX#5{\@NX\temp}}% \@NX\doconvertcsvlist#3}% \edef\doconvertcsvlist#3##1% {\@NX\ifx##1\@NX#2% \let\@NX\next \@NX\gobbleoneargument \@NX\else\@NX\ifx##1#4% \let\@NX\next \@NX\doconvertcsvquoteditem \@NX\else \let\@NX\next \@NX\doconvertcsvitem \@NX\fi\@NX\fi \@NX\next##1}% \doconvertcsvitem} \gdef\doprocessseparatedquoteditem#1% {\appendseparatedlistparameter\c!left% \appendseparatedlistcontent{#1}% \appendseparatedlistparameter\c!right} % a version more robust with regard to {a a} b c d situations: \edef\detokenizedrelax{\detokenize{\relax}} \edef\processseplistseparator{\detokenize{,}}% \def\dodefineprocessseplist#1#2% separator \docommand {\edef\processseplistseparator{\detokenize{#1}}% \def\dodoprocessseplist##1##2#1% {\edef\!!stringa{\detokenize{##1}}% \ifx\detokenizedrelax\!!stringa \expandafter\nodoprocessseplist % \else\ifx\!!stringa#1% \else\ifx\!!stringa\processseplistseparator #2{}% #2{##2}% \expandafter\expandafter\expandafter\dodoprocessseplist \else #2{##1##2}% \expandafter\expandafter\expandafter\dodoprocessseplist \fi\fi}% \def\doprocessseplist##1\relax {\dodoprocessseplist##1#1\relax#1\relax\relax\end}} \def\nodoprocessseplist#1\end {} \long\def\processseplist#1#2#3\relax raw version {\dodefineprocessseplist{#1}{#2}% \dodoprocessseplist#3#1\relax#1\relax\relax\end} % \dodefineprocessseplist{,}\test % \dodoprocessseplist{,}a,b,c\relax,\relax\relax\end % \doprocessseplista,b,c\relax % \def\test#1{[#1]} % \startlines % \processseplist{,}\test ,2,,\relax % \processseplist{,}\test ,,,44\relax % \processseplist{,}\test ,,33,44\relax % \processseplist{,}\test 11,,33,44\relax % \processseplist{,}\test 1,2,3,4\relax % \stoplines \newtoks\separatedlistdata \def\appendseparatedlistparameter#1% {\@EAEAEA\appendtoks\csname\??ls\currentseparatedlist#1\endcsname\to\separatedlistdata} \def\appendseparatedlistcontent#1% {\appendtoks#1\to\separatedlistdata} \def\flushseparatedlistdata {\the\separatedlistdata \separatedlistdata\emptytoks} \def\initializeseparatedlistdata {\separatedlistdata{\egroup}} \def\dontcollectseparatedlist {\def\dodoprocessseparatedfileline {\the\separatedlistdata \separatedlistdata\emptytoks \doprocessseparatedfileline}% \def\dodoprocessseparatedline {\the\separatedlistdata \separatedlistdata\emptytoks \doprocessseparatedline}% \let\flushseparatedlistdata\egroup \let\initializeseparatedlistdata\donothing} \chardef\separatedlistmode\zerocount \def\setcurrentlistseparator {\edef\currentlistseparator {\executeifdefined {\??ls::\csname\??ls\currentseparatedlist\c!separator\endcsname}% {\csname\??ls\currentseparatedlist\c!separator\endcsname}}% \doifvalue{\??ls\currentseparatedlist\c!separator}{tab} {\catcode`\^^I=12\relax}% \ifx\currentlistseparator\empty\def\currentlistseparator{,}\fi} \bgroup \catcode`\^^I=12 \setgvalue{\??ls::tab}{ } \setgvalue{\??ls::space}{ } \setgvalue{\??ls::comma}{,} \egroup \def\doprocessseparatedfileline {\ifeof\scratchread \ifcase\separatedlistmode\appendseparatedlistparameter\c!after\fi \immediate\closein\scratchread \expandafter\flushseparatedlistdata \else\ifx\line\empty % skip, can be comment \read\scratchread to\line \@EA\dodoprocessseparatedfileline \else \appendseparatedlistparameter{\ifcase\separatedlistmode\c!first\else\c!command\fi}% \ifx\currentlistquotechar\empty% \expandafter\doprocessseplist\line\relax \else \expanded{\processquotedlist{}{\noexpand\end}% {\currentlistseparator}{\currentlistquotechar}% \noexpand\doprocessseparatedquoteditem \line\currentlistseparator\noexpand\end}% \fi \ifcase\separatedlistmode\appendseparatedlistparameter\c!last\fi \read\scratchread to\line \@EAEAEA\dodoprocessseparatedfileline \fi\fi} \def\dodoprocessseparatedfileline {\doprocessseparatedfileline} \def\doprocessseparatedfile[#1][#2]% {\bgroup \edef\currentseparatedlist{#1}% \doifdefined{\??ls\currentseparatedlist\c!command}{\chardef\separatedlistmode\plusone}% \setcurrentlistseparator \edef\currentlistquotechar{\csname\??ls\currentseparatedlist\c!quotechar\endcsname}% \expandafter\dodefineprocessseplist\expandafter{\currentlistseparator}\doprocessseparateditem \initializeseparatedlistdata \directsetup{\currentseparatedlist:\executeifdefined{\??ls\currentseparatedlist\c!setups}\s!default}% \ifcase\separatedlistmode\appendseparatedlistparameter\c!before\fi \endlinechar\minusone \ignorelines \catcode`\#\@@comment \immediate\openin\scratchread=#2\relax % todo: \doopenin \read\scratchread to\line \doprocessseparatedfileline} \def\dostartseparatedlist#1[#2]% {\bgroup \edef\currentseparatedlist{#2}% \doifdefined{\??ls\currentseparatedlist\c!command}{\chardef\separatedlistmode\plusone}% \obeylines \let#1\relax \def\separateslistend{#1}% \setcurrentlistseparator \edef\currentlistquotechar{\csname\??ls\currentseparatedlist\c!quotechar\endcsname}% \expandafter\dodefineprocessseplist\expandafter{\currentlistseparator}\doprocessseparateditem \directsetup{\currentseparatedlist:\executeifdefined{\??ls\currentseparatedlist\c!setups}\s!default}% \initializeseparatedlistdata \ifcase\separatedlistmode\appendseparatedlistparameter\c!before\fi \dodostartseparatedlist} \def\redoprocessseparatedline#1% {\def\!!stringa{#1}% \ifx\!!stringa\separateslistend \ifcase\separatedlistmode\appendseparatedlistparameter\c!after\fi \expandafter\flushseparatedlistdata \else% \appendseparatedlistparameter{\ifcase\separatedlistmode\c!first\else\c!command\fi}% \ifx\currentlistquotechar\empty% \doprocessseplist#1\relax \else% \defconvertedargument\csvdata{#1}% \expanded{\processquotedlist{}{\noexpand\end}% {\currentlistseparator}{\currentlistquotechar}% \noexpand\doprocessseparatedquoteditem \csvdata\currentlistseparator\noexpand\end}% \fi \ifcase\separatedlistmode\appendseparatedlistparameter\c!last\fi \expandafter\dodoprocessseparatedline \fi} \def\doprocessseparatedline {\doifnextbgroupelse\xdoprocessseparatedline\ydoprocessseparatedline} \def\dodoprocessseparatedline {\doprocessseparatedline} \def\doprocessseparateditem#1% {\ifcase\separatedlistmode \appendseparatedlistparameter\c!left \appendseparatedlistcontent{#1}% \appendseparatedlistparameter\c!right \else \appendseparatedlistcontent{{#1}}% \fi} \bgroup \obeylines \gdef\dodostartseparatedlist#1 {\doprocessseparatedline} \gdef\xdoprocessseparatedline#1#2 {\redoprocessseparatedline{{{#1}}#2}} \gdef\ydoprocessseparatedline#1 {\redoprocessseparatedline{#1}} \egroup \startsetups CSV:unix \catcode`\#=\@@comment \stopsetups \def\defineseparatedlist {\dodoubleempty\dodefineseparatedlist} \def\dodefineseparatedlist[#1][#2]% {\setvalue{\e!start#1}{\expandafter\dostartseparatedlist\csname\e!stop#1\endcsname[#1]}% \getparameters [\??ls#1] [\c!separator=, \c!quotechar=, \c!first=, \c!left=, \c!before=, \c!right=, \c!last=, \c!after=, % \c!command=, #2]} \def\setupseparatedlist {\dodoubleempty\dosetupseparatedlist} \def\dosetupseparatedlist[#1]% [#2] {\getparameter[\??ls#1]} % [#2] \def\startseparatedlist[#1]% {\dostartseparatedlist\stopseparatedlist[#1]} \def\processseparatedfile {\dodoubleargument\doprocessseparatedfile} \protect \doifnotmode{demo}{\endinput} \defineseparatedlist [CSV] [separator={,}, first=\bTR,last=\eTR, left=\bTD,right=\eTD, before=\bTABLE,after=\eTABLE] \startseparatedlist[CSV] a,b,c d,e,f \stopseparatedlist \startCSV a,b,c d,e,f \stopCSV \defineseparatedlist [CSV] [separator={,}, quotechar={"}, first=\NC,last=\NR, left=,right=\NC, before={\starttabulate[|l|l|l|]},after=\stoptabulate] \startCSV a,b,"c,d" d,"""",f \stopCSV \defineseparatedlist [CSV] [separator={ }, first=\NC,last=\NR, left=,right=\NC, before={\starttabulate[|l|l|l|]},after=\stoptabulate] \startCSV a b c d e f \stopCSV \defineseparatedlist [CSV] [setups=unix, first=\NC,last=\NR, left=,right=\NC, before={\starttabulate[|l|l|l|]},after=\stoptabulate] % \startsetups CSV:unix % \catcode`\#=\@@comment % \stopsetups % %1,2,3 % 1,2,3 % # 4,5,6 % 4,5,6 \processseparatedfile[CSV][test.dat] \defineseparatedlist [CSVX] [command=\Whatever, separator={,}, first=\bTR,last=\eTR, left=\bTD,right=\eTD, before=\bTABLE,after=\eTABLE] \def\Whatever#1#2#3{[#1][#2][#3]\endgraf} \startseparatedlist[CSVX] a,b,c d,e,f \stopseparatedlist \defineseparatedlist[CSV] [separator=comma, before=\bTABLE, after=\eTABLE, first=\bTR, last=\eTR, left=\bTD, right=\eTD] \startCSV a,b,c,č d,e,f,š \stopCSV \enableregime[utf] \defineseparatedlist[X][separator=X,left=(,right=),first=\endgraf,last=\endgraf] \defineseparatedlist[Y][separator=Y,left=(,right=),first=\endgraf,last=\endgraf] \startX aXb Xc čXš \stopX \startY aYb Yc čYš \stopY \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/metatex.tex0000644000175000017500000001062111754241457024074 0ustar norbertnorbert%D \module %D [ file=metatex, %D version=2008.10.10, %D title=\METATEX, %D subtitle=\METATEX\ Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We can experiment here with runtime loading, i.e. no longer %D use a format. However, we still need a stub then but it could %D as well be luatools (mtxrun) itself then. %D This format is just a minimal layer on top of the \LUATEX\ %D engine and will not provide high level functionality. It can %D be used as basis for dedicated (specialized) macro packages. %D %D A format is generated with the command; %D %D \starttyping %D luatools --make --compile metatex %D \stoptyping %D %D Remark: this is far from complete. We will gradually add %D more. Also, it's not yet clean what exactly will be part %D of it. This is a prelude to a configureable macro package. \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 \edef\metatexformat {\jobname} \edef\metatexversion{2007.04.03 13:01} \let\fmtname \metatexformat \let\fmtversion\metatexversion \ifx\normalinput\undefined \let\normalinput\input \fi \def\loadcorefile#1{\normalinput#1.tex \relax} \def\loadmarkfile#1{\normalinput#1.mkiv\relax} \loadmarkfile{syst-ini} \ifnum\luatexversion<60 % also change message \writestatus{!!!!}{Your luatex binary is too old, you need at least version 0.60!} \expandafter\end \fi \newtoks\metatexversiontoks \metatexversiontoks\expandafter{\metatexversion} % at the lua end \loadmarkfile{syst-pln} % plain tex initializations of internal registers (no further code) \loadmarkfile{syst-mes} \loadmarkfile{luat-cod} % \loadmarkfile{luat-bas} % \loadmarkfile{luat-lib} % % needs stripping: \loadmarkfile{catc-ini} % catcode table management \loadmarkfile{catc-act} % active character definition mechanisms \loadmarkfile{catc-def} % some generic catcode tables \loadmarkfile{catc-ctx} % a couple of context specific tables but expected by later modules \loadmarkfile{catc-sym} % some definitions related to \letter % helpers, maybe less \loadmarkfile{syst-aux} % a whole lot of auxiliary macros %loadmarkfile{syst-lua} % some helpers using lua instead %loadmarkfile{syst-con} % some rather basic conversions %loadmarkfile{syst-fnt} %loadmarkfile{syst-str} %loadmarkfile{syst-rtp} % not needed % \loadmarkfile{supp-fil} % \loadmarkfile{supp-dir} % characters \loadmarkfile{char-utf} \loadmarkfile{char-ini} \loadmarkfile{char-enc} % \registerctxluafile{char-enc}{1.001} % attributes \loadmarkfile{attr-ini} % nodes \loadmarkfile{node-ini} %loadmarkfile{node-fin} %loadmarkfile{node-par} % attributes, not needed: %loadmarkfile{attr-ini} % regimes % \loadmarkfile{regi-ini} % \loadcorefile{regi-syn} % languages % fonts % \loadcorefile{enco-ini.mkiv} % \loadcorefile{hand-ini.mkiv} \registerctxluafile{font-ini}{1.001} \registerctxluafile{node-fnt}{1.001} \registerctxluafile{font-enc}{1.001} \registerctxluafile{font-map}{1.001} \registerctxluafile{font-syn}{1.001} \registerctxluafile{font-tfm}{1.001} \registerctxluafile{font-afm}{1.001} \registerctxluafile{font-cid}{1.001} \registerctxluafile{font-ott}{1.001} \registerctxluafile{font-otf}{1.001} \registerctxluafile{font-otb}{1.001} \registerctxluafile{font-otn}{1.001} \registerctxluafile{font-ota}{1.001} \registerctxluafile{font-otp}{1.001} \registerctxluafile{font-otc}{1.001} %registerctxluafile{font-vf} {1.001} \registerctxluafile{font-def}{1.001} %registerctxluafile{font-ctx}{1.001} \registerctxluafile{font-xtx}{1.001} %registerctxluafile{font-fbk}{1.001} %registerctxluafile{font-ext}{1.001} \registerctxluafile{font-pat}{1.001} %registerctxluafile{font-chk}{1.001} %registerctxluafile{math-ini}{1.001} %registerctxluafile{math-dim}{1.001} %registerctxluafile{math-ent}{1.001} %registerctxluafile{math-ext}{1.001} %registerctxluafile{math-vfu}{1.001} %registerctxluafile{math-map}{1.001} %registerctxluafile{math-noa}{1.001} \registerctxluafile{task-ini}{1.001} %registerctxluafile{l-xml}{1.001} % needed for font database % why not ... \pdfoutput\plusone % too \appendtoks \ctxlua{statistics.savefmtstatus("\jobname","\metatexversion","metatex.tex")}% can become automatic \to \everydump % done \errorstopmode \dump \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/bibl-tra.mkiv0000644000175000017500000015304512132111075024256 0ustar norbertnorbert%D \module %D [ file=bibl-tra, %D version=2009.08.22, %D title=\CONTEXT\ Publication Module, %D subtitle=Publications, %D author=Taco Hoekwater, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. %D This module has been adapted to \MKIV\ by Hans Hagen so if things go wrong, %D he is to blame. The changes concern references and lists but teh rendering %D itself is unchanged. Future versions might provide variants as we have plans %D for an upgrade. %D %D We use a still somewhat experimental extension to the list %D mechanism. Eventually the bibtex module will use the bibl loader %D and access the data by means of lpath expressions. In that case we %D don't need to process the bibliography but still need to track %D usage as done here. %D %D A bit ongoing: make more local macros prefixed with bib, i.e. the bib %D namespace is reserved. %D Todo: commandhandler \writestatus{loading}{ConTeXt Bibliography Support / BibTeX} \definefilesynonym[bib][obsolete] \registerctxluafile{bibl-tra}{1.001} %D The original was developed independantly by Taco Hoekwater while still working for Kluwer %D Academic publishers (it still used the dutch interface then). Development continued after %D he left Kluwer, and in Januari 2005, the then already internationalized file was merged %D with the core distribution by Hans Hagen. The current version is once again by Taco. %D %D More documentation and additional resources can be found on the contextgarden: %D \hyphenatedurl{http://wiki.contextgarden.net//Bibliography}. %D \subject{DONE (dd/mm/yyyy)} %D %D \startitemize %D \item add author definition (and associated system variable) (26/05/2005) %D \item add finalnamesep support for Oxford comma (17/09/2005) %D \item add \type{\insert...} for: doi, eprint, howpublished (19/09/2005) %D \item allow a defaulted \type{\setupcite} (19/11/2005) %D \item renamed citation type 'number' to 'serial' (19/11/2005) %D \item better definition of \type{\inverted...author} (19/11/2005) %D \item don't reset [numbercommand] in \type {\setuppublication} by default (20/11/2005) %D \item don't disable other \type {\setuppublication} keys if alternative is present (20/11/2005) %D \item drop \type{\sanitizeaccents} (20/11/2005) %D \item added \type{\nocite} and \type{\cite[none]} (21/11/2005) %D \item added headtext for it (23/11/2005) %D \item make \type{\cite[url]} and \type{\cite[doi]} interactive (23/11/2005) %D \item make right-aligned labels in the list work even when autohang=no %D \item use 'et al.' instead of 'et.al.'. Pointed out by Peter M\"unster (30/12/2005) %D \item added headtext for cz (31/12/2005) %D \item Keep whitespace after \type{\cite} with single argument (31/12/2005) %D \item Fix broken \type{\cite{}} support (31/12/2005) %D \item Use \type{\readfile} inside \type{\usepublications} instead of \type{\readsysfile} (12/01/2006) %D \item Use \type{\currentbibyear} and \type{\currentbibauthor} instead of \type{\YR} and \type{\AU} (05/02/2006) %D \item Fix compressed version of authoryear style (05/02/2006) %D \item Rename the clashing data fields \type{\url} and \type{\type} to \type{\biburl} and \type{\bibtype} (05/02/2006) %D \item Added two french bibl files from Renaud Aubin (06/02/2006) %D \item Five new bib class and eight extra bib fields, for IEEEtran (07/02/2006) %D \item French keyword translation, provided by Renaud (08/02/2006) %D \item fix underscores in undefined keys (22/02/2006) %D \item Destroy interactivity in labels of the publication list (13/03/2006) %D \item fix multi-cite list compression (11/4/2006) %D \item fix \type{\getcitedata} (11/4/2006) %D \item magic for chapter bibs (18-25/4/2006) %D \item language setting (25/4/2006) %D \item use \type{\hyphenatedurl} for \type{\inserturl} (25/4/2006) %D \item Add \type{\docitation} to \type{\nocite}(26/4/2006) %D \item patents can have numbers, added to bst files (26/4/2006) %D \item \type{\docitation} needs a \type{\iftrialtypesetting} (27/4/2006) %D \item \type{\filllocalpublist}'s loop is bound by definedness, not resolvedness (27/4/2006) %D \item \type{\setuppublications[monthconversion=]} added (15/5/2006) %D \item use \type{\undefinedreference} instead of bare question marks (15/5/2006) %D \item add grouping around \type{\placepublications} commands (16/5/2006) %D \item fix a bug in \type{\cite{}} (17/5/2006) %D \item support \type{\cite[authornum]} (18/5/2006) %D \item make \type{\cite} unexpandable (20/6/2006) %D \item allow hyperlinks in author\&year combo's %D (cite list compression has to be off) (20/6/2006) %D \item fix duplicate labels for per-chapter style (20/6/2006) %D \item allow \type{\setupcite[interaction=(start|stop)]} %D \item fix the item number in the publication list with 'numbering=yes' (22/6/2006) %D \item make the default criterium for \type{\placepublications} be \type{previous} (23/6/2006) %D \item fix \type{\normalauthor} and \type{\normalshortauthor} spacing (29/6/2006) %D \item do not typeset empty arguments to \type{\typesetapublication} (29/6/2006) %D \item add \type{symbol=none} to \type{\setuplist} in unnumbered %D mode to prevent typesetting of bare numbers (29/6/2006) %D \item remove two incorrect spaces from bibl-num.tex (1/7/2006) %D \item reset font styles within \type{\cite}, so that font switches %D in \type{left} stay in effect (12/7/2006) %D \item guard added against loading bbl files multiple times (13/7/2006) %D \item fix \type{\cite[num]} with compression is on. (14/7/2006) %D \item test \type{\iflocation} before deciding to use the %D interactive version of cite (18/7/2006) %D \item support \type{\setupcite[authoretallimit=1]} (18/7/2006) %D \item support use of \type{\cite} within titles and captions by %D saveguarding the list item extraction and reference placement %D code (19/7/2006) %D \item support \type{\setuppublicationlist[title=\chapter]} (4/8/2006) %D \item use the expansion of \type{\headtext{pubs}} (4/8/2006) %D \item hook added for repeated authors in publication list %D \type{\setuppublicationlist[artauthorcommand=\mythreeargscommand]} %D (4/8/2006) %D \item make the bracketed arguments of \type{\artauthor}, \type{\author} %D and \type{\editor} (bbl commands) optional (4/8/2006) %D \item the constants \type{sorttype}, \type{compress} and %D \type{autohang} have moved to the core (8/8/2006) %D \item bibtex is now registered as a program to be run by texexec (8/8/2006) %D \item fix a bug in \type{\setupcite[authoretallimit=1]} (9/8/2006) %D \item fix a bug inside citations that prevented lastpubsep from ever being %D used due to a volatile \type{\commalistsize} (25/8/2006). %D \item added the possibility of \type{\placepublications[option=continue]} %D (6/9/2006) %D \item Mojca translated Master's Thesis to Masterarbeit (bibl-apa-de.tex) %D (12/9/2006) %D \item Added \type{\setuppublicationlist[maybeyear=off]} by request from %D Thomas Schmitz (15/9/2006) %D \item Removed some spurious spaces pointed out by willi egger (19/9/2006) %D \item Add configuration of bibtex executable name (4/11/2006) %D \item Fix numbering=short and numbering=bib (spotted by Matthias W\"achter) (4/11/2006) %D \item third attempt to get a correct release (5/11/2006) %D \item fix a few missing dots in bibl-num.tex (7/12/2006) %D \item Patch for DOI's by Tobias Burnus (17/4/2007) %D \item Patch for \type{\insertbiburl} and \type{\insertdoi} for Tobias Burnus (18/4/2007) %D \item Added a missing \type{\relax} in \type{\dospecialbibinsert}, %D that made the space before the {\it et al.} text disappear. (18/4/2007) %D \item Attempt to fix percent signs in bbl files. As a side-effect, %D this prohibits comments in \tex{startpublication} blocks! (17/4/2008) %D \item Patch from Matthias W\"achter that allows arbitrary .bst %D files to be used with \tex{setupbibtex} (25/9/2008) %D \item Extended for the new multilingual setups for the Oct 2008 current of ConTeXt (23/10/2008) %D \item Multilingual setups needed another fix (27/10/2008) %D \item Two fixes for bibl-apa by Michael Green (27/10/2008) %D \item Catalan translation of 'References' (10/11/2008) %D \item 'chapter' -> 'chapitre' in bibl-apa-fr (27/11/2008) %D \item Run bibtex via os.execute in mkiv modee (01/12/2008) %D \item Small correction in bibl-apa's placement of volume %D information in articles (05/01/2009) %D \item Handle multi-author (more than two) cases in \type{\cite} %D (02/03/2009) %D \item Suppress a syntax error in \type{cont-xp} mode. The output is %D probably not right, though (02/03/2009) %D \item Added a \tex{loadmarkfile} at the end, and two new files %D from Hans. The \type{t-bib.mkiv} is needed to make the module %D work with the new structure code (17/04/2009) %D \item Added a patch to \type{t-bib.mkiv} from Hans to make the %D cross referencing between multiple citations an %D bibliographies work (27/04/2009) %D \item Remove a superfluous \type{\unprotect} in t-bib.mkiv (11/05/2009). %D \item Patch of incollection in bibl-ams.tex from Xan (08/06/2009). %D \item Patch of unpublished in bibl-ams.tex from Xan (22/07/2009). %D \item Modified \type{\bibdogetupsometextprefix} so it works for undefined %D language labels, from Hans (13/08/2009). %D \item Adapt referencing and list insertion to \MKIV. Update some code %D to the latest \CONTEXT. Change some names in order to avoid conflicts %D with existing core names (like \type {\insertpages}). %D \item All constants, variables, message etc.\ are now in the core. %D \item Added key: \type {method} (when \type {global}, previous shown entries are %D not shown again, when \type {local} they are repeated). %D \stopitemize %D %D \subject{WISHLIST} %D %D \startitemize %D \item link back from publication list to citation %D \item export \type {\citation{}} %D \item support mlbibtex %D \item don't load the whole lot, but filter entries instead %D \item 9 vs 10, 19 vs 20 ... prevent extra runs when only subtle changes in wd of reference %D \stopitemize \unprotect \def\biblistname{pubs} % for compatibility \definelist [pubs] \setuplist [pubs] [\c!state=\v!start, \c!criterium=\@@pbcriterium, \c!headnumber=\v!always, % needed as we provide our own and need to force \c!width=] \installstructurelistprocessor{pubs:userdata}% {\ctxlua{bibtex.hacks.add(structures.lists.uservalue("\currentlist",\currentlistindex,"bibref"),\currentlistindex)}} \ifdefined\bibtexblock \else \newcount\bibtexblock \fi \bibtexblock\plusone \ifdefined\bibtexcounter \else \newcount\bibtexcounter \fi %D \macros{bibdoif,bibdoifnot,bibdoifelse} %D %D Here are a few small helpers that are used a lot in all the typesetting commands %D (\type{\bibinsert...}) we will encounter later. \unexpanded\def\bibdoifelse#1% {\expandafter\def\expandafter\!!stringa\expandafter{#1}% \ifx\!!stringa\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \unexpanded\def\bibdoifnot#1% {\expandafter\def\expandafter\!!stringa\expandafter{#1}% \ifx\!!stringa\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\bibdoif#1% {\expandafter\def\expandafter\!!stringa\expandafter{#1}% \ifx\!!stringa\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D Unfortunately, \BIBTEX\ is not the best configurable program %D around. The names of the commands it parses as well as the \type{.aux} %D extension to the file name are both hardwired. %D %D This means \CONTEXT\ has to write a \LATEX-style auxiliary file, yuk! %D The good news is that it can be rather short. We'll just ask %D \BIBTEX\ to output the entire database(s) into the \type{bbl} file. %D %D The \type{\bibstyle} command controls how the \type{bbl} file will %D be sorted. The possibilities are: %D %D \startitemize[packed] %D \item by author (+year, title): cont-au.bst %D \item by title (+author, year): cont-ti.bst %D \item by short key as in abbrev.bst: cont-ab.bst %D \item not sorted at all: cont-no.bst %D \stopitemize \newtoks\everysetupbibtex \unexpanded\def\setupbibtex {\dosingleempty\dosetupbibtex} \unexpanded\def\dosetupbibtex[#1]% {\let\@@pbdatabase\empty \getparameters[\??pb][#1]% \the\everysetupbibtex} \unexpanded\def\installbibtexsorter#1#2% {\setvalue{\??pb:\c!sort:#1}{#2}} \installbibtexsorter\v!no {no} \installbibtexsorter\v!author {au} \installbibtexsorter\v!title {ti} \installbibtexsorter\v!short {ab} \installbibtexsorter\empty {no} \installbibtexsorter\s!default{no} \def\thebibtexsorter{\executeifdefined{\??pb:\c!sort:\@@pbsort}\@@pbsort} \appendtoks \ifx\@@pbdatabase\empty\else \doifmode{*\v!first}{\ctxlua{bibtex.hacks.process { style="\thebibtexsorter", database="\@@pbdatabase" }}}% \fi \to \everysetupbibtex \setupbibtex [\c!sorttype=\v!cite, \c!sort=no] %D \macros{iftypesetall,ifbibcitecompress} %D %D The module needs some new \type{\if} statements. \newtoks\everysetuppublications \unexpanded\def\setuppublications {\dosingleargument\dosetuppublications} \unexpanded\def\dosetuppublications[#1]% {\getparameters[\??pb][\c!alternative=,#1]% \doifsomething\@@pbalternative {\readsysfile{bibl-\@@pbalternative.tex} {\showmessage\m!publications{6}{bibl-\@@pbalternative}} {\showmessage\m!publications{1}{bibl-\@@pbalternative}}% \let\@@pbalternative\empty}% \let\setuppublicationlayout\normalsetuppublicationlayout % overloaded in bibl-num ... vadjust needs to be done with option \getparameters[\??pb][#1]% as bibl-* can have set things back \the\everysetuppublications \ignorespaces} %D We can omit already shown references (\v!global) or use fresh %D lists each time (\v!local). \setnewconstant\bibtexoncemode\plusone % 0=disable, 1=local, 2=global \appendtoks \doifelse\@@pbmethod\v!local {\bibtexoncemode\plusone}% {\bibtexoncemode\plustwo}% \to \everysetuppublications %D Cite lists are compressed, if possible. This is set later on. \newif\ifbibcitecompress\bibcitecompresstrue \def\@@pbinumbercommand{\executeifdefined{\??pb:\c!numbercommand:\@@pbnumbering}\firstofoneargument} \setvalue{\??pb:\c!numbercommand:\v!yes }#1{#1}% \setvalue{\??pb:\c!numbercommand:\v!no }#1{} \setvalue{\??pb:\c!numbercommand:\v!short}#1{\bibgetvars\currentpublicationkey} \setvalue{\??pb:\c!numbercommand:\v!bib }#1{\bibgetvarn\currentpublicationkey} % to be tested % % \setvalue{\??pb:\c!numbercommand:\v!short}{\bibgetvars\currentpublicationkey\firstofoneargument} % \setvalue{\??pb:\c!numbercommand:\v!bib }{\bibgetvarn\currentpublicationkey\firstofoneargument} \appendtoks \processaction [\@@pbrefcommand] [\s!default=>\edef\@@citedefault{\@@pbrefcommand}, \s!unknown=>\edef\@@citedefault{\@@pbrefcommand}]% \to \everysetuppublications \unexpanded\def\bibleftnumber#1{#1\hfill~} %D \macros{usepublications} %D %D After discussing it with Thomas Schmitz it became clear that using external %D references makes no sense as one needs to refer to it in special ways and %D because similar numbers can be confusing. So, for the moment this is not %D supported in \MKIV. (So no: see reference [3-5,9] in "some other document") \unexpanded\def\usepublications[#1]% {\processcommalist[#1]\dousepublications} \unexpanded\def\dousepublications#1% {\doonlyonce{#1.\f!bibextension}{\dodousepublications{#1}}} \unexpanded\def\dodousepublications#1% brr, this par stuff {\let\@@savedpar\par \let\par\ignorespaces \ifhmode\kern\zeropoint\fi \pushcatcodetable \setcatcodetable\ctxcatcodes \readfile{#1.\f!bibextension} {\showmessage\m!publications{4}{#1.\f!bibextension}} {\showmessage\m!publications{2}{#1.\f!bibextension}}% \popcatcodetable \ifhmode\removeunwantedspaces\fi \let\par\@@savedpar} %D \macros{setuppublicationlist} %D %D This will be the first command in (\BIBTEX-generated) \type{bbl} %D files. `samplesize' is a sample value (in case of \BIBTEX-generated %D files, this will be the longest `short' key). `totalnumber' %D is the total number of entries that will follow in this %D file. %D %D Both values are only needed for the label calculation %D if `autohang' is `true', so by default the command is %D not even needed, and therefore I saw no need to give %D it it's own system variable and it just re-uses \type{pb}. \def\publicationlistparameter#1{\csname\??pv:l:#1\endcsname} \unexpanded\def\setuppublicationlist {\dosingleempty\dosetuppublicationlist} \unexpanded\def\dosetuppublicationlist[#1]% {\getparameters[\??pv:l:][#1]% \setuplist[pubs][\c!samplesize={AA99},\c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1,\c!command=]} \unexpanded\def\setuppublicationlayout[#1]#2% {\setvalue{\??pv:l:#1}{#2}} \let\normalsetuppublicationlayout\setuppublicationlayout \setuppublicationlist [\c!title=, \c!command=\dospecialbibinsert, \c!maybeyear=\v!on] %D \macros{bibalternative} %D %D A nice little shorthand that will be used so we don't have to %D key in the weird \type{\@@pv} parameter names all the time. \def\bibalternative#1% {\csname\??pv\@@currentalternative#1\endcsname} %D \macros{simplebibdef,bibcommandlist} %D %D \type{\simplebibdef} defines \type{bib@#1}, which in turn will %D use one argument that is stored in \type{@@pb@#1}. %D %D \type{\simplebibdef} also defines \type{bibinsert#1}, which can be %D used in the argument of \type{\setuppublicationlayout} to fetch %D one of the \type{@@pb@} data entries. \type{bibinsert#1} then has %D three arguments: \type{#1} are commands to be executed before the %D data, \type{#2} are commands to be executed after the data, and %D \type{#3} are commands to be executed if the data is not found. %D %D \type{\bibcommandlist} is the list of commands that is affected %D by this approach. Later on, it will be used to do a series %D of assignments from \type{#1} to \type{bib@#1}: e.g %D \type{\title} becomes \type{\bib@title} when used within %D a publication. \newtoks\initializebibdefinitions % we need to prevent clashes \unexpanded\def\simplebibdef#1% hh: funny expansion ? {\expandafter\def\csname bib@#1\endcsname##1% {\setvalue{\??pb @#1}{##1}\ignorespaces}% \expandafter \appendtoks \expandafter\let\csname insert#1\expandafter\endcsname\csname bibinsert#1\endcsname \to \initializebibdefinitions \expandafter\unexpanded\expandafter\def\csname bibinsert#1\endcsname##1##2##3% {\expandafter\bibdoifelse\expandafter{\csname\??pb @#1\endcsname}{##1\csname\??pb @#1\endcsname##2}{##3}}} \def\bibcommandlist {abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city, comment, country, day, dayfiled, doi, edition, eprint, howpublished, isbn, issn, issue, journal, keyword, keywords, lastchecked, month, monthfiled, names, nationality, note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey, title, volume, yearfiled} \processcommacommand[\bibcommandlist]\simplebibdef \unexpanded\def\bibinsertdoi#1#2#3% let's see how this fails {\bibdoifelse{\@@pb@doi}{#1\expanded{\bibgotoDOI{\@@pb@thekey}{\@@pb@doi}}#2}{#3}} \unexpanded\def\bibinsertbiburl#1#2#3% let's see how this fails {\bibdoifelse{\@@pb@biburl}{#1\expanded{\bibgotoURL{\@@pb@thekey}{\@@pb@biburl}}#2}{#3}} \unexpanded\def\bibinsertmonth#1#2#3% {\bibdoifelse\@@pb@month {#1\doifnumberelse\@@pb@month {\doifconversiondefinedelse\@@pbmonthconversion {\convertnumber\@@pbmonthconversion\@@pb@month}{\@@pb@month}}% {\@@pb@month}#2}% {#3}} \appendtoks \let\inserturl \bibinsertbiburl % for backward compat. \let\inserttype\bibinsertbibtype % for backward compat. \to\initializebibdefinitions \unexpanded\def\newbibfield[#1]% {\simplebibdef{#1}% \edef\bibcommandlist{\bibcommandlist,#1}} %D \macros{complexbibdef,specialbibinsert} %D %D The commands \type{\artauthor}, \type{\author} and %D \type{\editor} are more complex than the other commands. %D Their argument lists have this form: %D %D \type{\author[junior]{firstnames}[inits]{von}{surname}} %D %D (bracketed stuff is optional) %D %D And not only that, but there also might be more than one of each of %D these commands. This is why a special command is needed to insert %D them, as well as one extra counter for each command. % todo: instead of \getvalue{bla@num} in specs we should do % \bibentrynum{bla} so that we can create a better namespace %D All of these \type{\expandafter}'s and \type{\csnames} make this code %D look far more complex than it really is. For example, the argument %D \type{author} defines the macro \type{\bib@author} to do two %D things: increment the counter \type{\author@num} (let's say to 2) %D and next store it's arguments in the macro \type{\@@pb@author2}. %D And it defines \type{\bibinsertauthors} to expand into %D \starttyping %D \specialbibinsert{author}{\author@num}{}{}{} %D \stoptyping \unexpanded\def\docomplexbibdef#1% {\dodoubleempty\dodocomplexbibdef[#1]} \unexpanded\def\dodocomplexbibdef[#1][#2]#3% {\doquadrupleempty\dododocomplexbibdef[#1][#2][#3]} \unexpanded\def\dododocomplexbibdef[#1][#2][#3][#4]#5#6% {\expandafter\increment\csname#1@num\endcsname % todo: bib in name \setevalue{\??pb @#1\csname#1@num\endcsname}{{#3}{#5}{#6}{#4}{#2}}\ignorespaces} \unexpanded\def\complexbibdef#1% {\expandafter\newcounter\csname #1@num\endcsname \expandafter\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}% \expandafter \appendtoks \expandafter\let\csname insert#1s\expandafter\endcsname\csname bibinsert#1s\endcsname \to \initializebibdefinitions \expandafter\def\csname bibinsert#1s\endcsname##1##2##3{\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}} \processcommalist[author,artauthor,editor]\complexbibdef %D Another level of indirection is needed to control the %D typesetting of all of these arguments. \newcount\etallimitcounter \newcount\etaldisplaycounter \newcount\todocounter \unexpanded\def\specialbibinsert#1#2#3#4#5% {\bgroup \ifnum#2>\zerocount \etallimitcounter =0\bibalternative{#1etallimit}\relax \etaldisplaycounter=0\bibalternative{#1etaldisplay}\relax \ifnum #2>\etallimitcounter \todocounter\etaldisplaycounter % just in case ... \ifnum\todocounter>\etallimitcounter \todocounter\etallimitcounter \fi \else \todocounter#2\relax \fi \ifnum\todocounter>\zerocount % find the current author list \let\templist\empty \dorecurse{#2} {\scratchtoks\doubleexpandafter{\csname\??pb @#1\recurselevel\endcsname}% \edef\templist{\ifx\templist\empty\else\templist,\fi\the\scratchtoks}}% #3\publicationlistparameter\c!command{#1}{\todocounter}{\templist}#4\relax \else #5% \fi \else #5% \fi \egroup} %D This macro does the hard work of inserting a list of people in the %D output, with proper regard of all the inbetween strings that can %D arise depending on length of the list of people. %D \#1 = type %D \#2 = number of items to be typeset %D \#3 = commacommand containing authors \unexpanded\def\doprocessauthoritem#1#2#3% {\advance\scratchcounter\plusone \ifnum\numexpr\scratchcounter-\plusone\relax<#2\relax \publicationlistparameter{#1}#3% \ifnum\scratchcounter=#2\relax \ifnum\etallimitcounter<\commalistsize\relax \bibalternative{#1etaltext}% \fi \else\ifnum\numexpr\scratchcounter+\plusone\relax=#2\relax \ifnum\commalistsize>\plustwo \bibalternative\c!finalnamesep \else \bibalternative\c!lastnamesep \fi \else \bibalternative\c!namesep \fi\fi \fi} \unexpanded\def\dospecialbibinsert#1#2#3% {\getcommacommandsize[#3]% \scratchcounter\zerocount \processcommacommand[#3]{\doprocessauthoritem{#1}{#2}}} %D \macros{invertedauthor,normalauthor,invertedshortauthor,normalshortauthor} %D %D Just some commands that can be used in \type{\setuppublicationparameters} %D If you want to write an extension to the styles, you might %D as well define some of these commands yourself. %D %D The argument list has been reordered here, and the meanings %D are: %D %D \startlines %D \type{#1} firstnames %D \type{#2} von %D \type{#3} surname %D \type{#4} inits %D \type{#5} junior %D \stoplines \unexpanded\def\normalauthor#1#2#3#4#5% {\bibdoif{#1}{#1\bibalternative\c!firstnamesep}% \bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}} \unexpanded\def\normalshortauthor#1#2#3#4#5% {\bibdoif{#4}{#4\bibalternative\c!firstnamesep}% \bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}} \unexpanded\def\invertedauthor#1#2#3#4#5% {\bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!juniorsep#5}% \bibdoif{#1}{\bibalternative\c!surnamesep#1\unskip}} \unexpanded\def\invertedshortauthor#1#2#3#4#5% {\bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!juniorsep#5}% \bibdoif{#4}{\bibalternative\c!surnamesep#4\unskip}} %D \macros{clearbibitem,clearbibitemtwo,bibitemdefs} %D %D These are used in \type{\typesetapublication} to do %D initializations and cleanups. \unexpanded\def\clearbibitem#1{\setvalue{\??pb @#1}{}}% \unexpanded\def\clearbibitemtwo#1% is this reset really needed? after all we reset the counter and we are local {%\dofastrecurse\plusone{\csname#1@num\endcsname}\plusone{\expandafter\let\csname\??pb @#1\recurselevel\undefined}% \letvalue{#1@num}\!!zerocount} \unexpanded\def\bibitemdefs#1% {\expandafter\let\csname#1\expandafter\endcsname\csname bib@#1\endcsname} \unexpanded\def\presetbibvariables % make a fast resetter (toks) {\processcommacommand[\bibcommandlist,crossref]\clearbibitem \processcommalist [artauthor,author,editor]\clearbibitemtwo \processcommacommand[\bibcommandlist]\bibitemdefs \processcommalist [artauthor,author,editor,crossref]\bibitemdefs} %D \macros{startpublication} %D %D We are coming to the end of this module, to the macros that %D do typesetting and read the \type{bbl} file. %D Just a \type{\dosingleempty} is the most friendly %D of doing this: there need not even be an argument %D to \type{\startpublication}. Of course, then there %D is no key either, and it had better be an %D article (otherwise the layout will be all screwed up). %D %D Only specifying the key in the argument is also %D legal. In storing this stuff into macros, some trickery with %D token registers is needed to fix the expansion problems. Even so, %D this appears to not always be 100\% safe, so people are %D urgently advised to use \ETEX\ instead of traditional \TEX. %D %D In \ETEX, all expansion problems are conveniently solved by %D the primitive \type{\protected}. To put that another way: %D %D It's not a bug in this module if it does not appear in \ETEX! %D %D Now prohibits comments, so % can be used for urls \unexpanded\def\startpublication {\dosingleempty\dostartpublication} \let\stoppublication\relax % this is rather memory hungry; some day i will rewrite this so that % we use the database instead %D \macros{doifbibreferencefoundelse} %D %D Some macros to fetch the information provided by %D \type{\startpublication}. % we can consider a faster variant in the bbl file; we can also consider % storing the keys in lua (and then do more in lua) and use calls to % fetch the variables % hm, we can store at the lua end ... \unexpanded\def\dostartpublication[#1]% {\begingroup \doifassignmentelse{#1}% {\getparameters[\??pb][k=\s!unknown,t=article,n=,s=,a=,y=,o=,u=,#1]}% {\getparameters[\??pb][k=#1,t=article,n=,s=,a=,y=,o=,u=]}% \ctxlua{bibtex.hacks.register("\@@pbk")}% \catcode\commentasciicode\othercatcode \dodostartpublication} \unexpanded\def\dodostartpublication#1\stoppublication {\setxvalue{pbd:\@@pbk}##1{\noexpand\ifcase##1\noexpand\or \@@pbk\noexpand\or \@@pba\noexpand\or \@@pby\noexpand\or \@@pbs\noexpand\or \@@pbn\noexpand\or \@@pbt\noexpand\or \@@pbo\noexpand\or \@@pbu\noexpand\or \normalunexpanded{#1}\noexpand\fi}% \endgroup \ignorespaces} \def\bibgetvark#1{\csname pbd:#1\endcsname\plusone } \def\bibgetvara#1{\csname pbd:#1\endcsname\plustwo } \def\bibgetvary#1{\csname pbd:#1\endcsname\plusthree} \def\bibgetvars#1{\csname pbd:#1\endcsname\plusfour } \def\bibgetvarn#1{\csname pbd:#1\endcsname\plusfive } \def\bibgetvart#1{\csname pbd:#1\endcsname\plussix } \def\bibgetvaro#1{\csname pbd:#1\endcsname\plusseven} \def\bibgetvaru#1{\csname pbd:#1\endcsname\pluseight} \def\bibgetvard#1{\csname pbd:#1\endcsname\plusnine } \unexpanded\def\doifbibreferencefoundelse#1% {\preloadbiblist \doifdefinedelse{pbd:#1} \firstoftwoarguments {\showmessage\m!publications{5}{#1}\secondoftwoarguments}} %D \macros{bib@crossref} %D %D \type{\crossref} is used in database files to point to another %D entry. Because of this special situation, it has to be defined %D separately. Since this command will not be seen until at %D \type{\placepublications}, it may force extra runs. The same is %D true for \type{\cite} commands inside of publications. % used in bib self \unexpanded\def\bib@crossref#1% called via \csname \endcsname {\setvalue{\??pb @crossref}{#1}\ignorespaces} \unexpanded\def\bibinsertcrossref#1#2#3% {\bibdoifelse\@@pb@crossref{#1\cite[\@@pb@crossref]#2}{#3}} \let\insertcrossref\gobblethreearguments \appendtoks\let\insertcrossref\bibinsertcrossref\to\initializebibdefinitions %D The next macro is needed because the number command of the %D publist sometimes needs to fetch something from the current %D item (like the 'short' key). For this, the ID of the current %D item is passed in the implict parameter \type{\currentpublicationkey} \unexpanded\def\doprocessbibtexentry#1{\typesetapublication{#1}} \unexpanded\def\typesetpubslist {\begingroup \startpacked[\v!blank]% \preloadbiblist % \the\initializebibdefinitions % COMMENTED \edef\currentlist{pubs}% \ctxlua{bibtex.hacks.reset(\number\bibtexoncemode)}% \doifelse{\listparameter\c!criterium}\v!all {\showmessage\m!publications{7}{}% \ctxlua{bibtex.hacks.filterall()}} {\doif{\listparameter\c!criterium}\v!cite {\setuplist[pubs][\c!criterium=\v!here]}% \strc_lists_place_current {pubs}% {\listparameter\c!criterium}% {\listparameter\c!number}% {\listparameter\c!extras}% {\listparameter\c!order}}% \ctxlua{bibtex.hacks.flush("\@@pbsorttype")}% \stoppacked \endgroup} \newif\ifinpublist \unexpanded\def\initializepubslist {\def\currentlist{pubs}% \edef\@@pbnumbering{\@@pbnumbering}% \doifelse\@@pbautohang\v!yes {\ifx\@@pbnumbering\v!short \setbox\scratchbox\hbox{\@@pbnumbercommand{\listparameter\c!samplesize}}% \else \doifelse{\listparameter\c!criterium}\v!all {\setbox\scratchbox\hbox{\@@pbnumbercommand{\ctxlua{tex.write{bibtex.hacks.nofregistered()}}}}} {\determinelistcharacteristics[pubs]% \setbox\scratchbox\hbox{\@@pbnumbercommand{\structurelistsize}}}% \fi \edef\publistnumberbox{\hbox to \the\wd\scratchbox}% \expanded{\setuplist[pubs][\c!width=\the\wd\scratchbox,\c!distance=\zeropoint]}% \ifx\@@pbnumbering\v!short \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvars\currentpublicationkey}}}% \else\ifx\@@pbnumbering\v!bib \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvarn\currentpublicationkey}}}% \else \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{##1}}}% \fi\fi} {\doifelsenothing{\listparameter\c!width} {\let \publistnumberbox \hbox} {\edef\publistnumberbox{\hbox to \listparameter\c!width}}% \ifx\@@pbnumbering\v!short \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvars\currentpublicationkey}}}% \else\ifx\@@pbnumbering\v!bib \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvarn\currentpublicationkey}}}% \else \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{##1}}}% \fi\fi}% \ifx\@@pbnumbering\v!no \setuplist[pubs][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]% \else \setuplist[pubs][\c!numbercommand=\@@pblimitednumber]% \fi \doifelse{\publicationlistparameter\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}% \forgetall} \unexpanded\def\outdented#1% move to supp-box ? {\hskip-\hangindent#1\relax} %D The full list of publications \unexpanded\def\completepublications {\dosingleempty\docompletepublications} \unexpanded\def\docompletepublications[#1]% {\begingroup \setuplist[pubs][#1]% \edef\currentbibtexsessiontitle{\publicationlistparameter\c!title}% \ifx\currentbibtexsessiontitle\empty \normalexpanded{\startnamedsection[\v!chapter][\c!reference=pubs,\c!title={\headtext{pubs}}]}% \else \normalexpanded{\startnamedsection[\v!chapter][\c!reference=pubs,\c!title={\currentbibtexsessiontitle}]}% \fi \dodoplacepublications \stopnamedsection \endgroup} %D And the portion with the entries only. \def\bibrefprefix{\number\bibtexblock:} \unexpanded\def\placepublications {\dosingleempty\doplacepublications} \unexpanded\def\doplacepublications[#1]% {\begingroup \setuplist[pubs][#1]% \dodoplacepublications \endgroup} \unexpanded\def\dodoplacepublications {\determinelistcharacteristics[pubs]% \initializepubslist \doifnot{\namedlistparameter{pubs}\c!option}\v!continue {\global\bibtexcounter\zerocount}% \inpublisttrue \typesetpubslist \inpublistfalse \global\advance\bibtexblock\plusone} %D \subsubject{What's in a publication} %D %D Watch out: here all means all publications in database, so use %D text when you want text only. \unexpanded\def\typesetapublication#1% {\doifsomething{#1} {\doifelse{\namedlistparameter{pubs}\c!criterium}\v!all {\doplacepublicationindeed{#1}}% {\ctxlua{bibtex.hacks.doifalreadyplaced("#1")} {} {\doplacepublicationindeed{#1}}}% }} % for the moment we don't access the data directly but we will do that % later when we get away from storing the data and only deal with % references % we'll define proper handlers later \unexpanded\def\doplacepublicationindeed#1% {\doifbibreferencefoundelse{#1} {\global\advance\bibtexcounter\plusone \def\currentpublicationkey{#1}% \ctxlua{bibtex.hacks.registerplaced("#1")}% \def \currentlist {pubs}% \edef\currentlistentrynumber {\number\bibtexcounter}% \let \currentlistentrytitle \bibtexpubtext \let \currentlistentrypagenumber\empty \strc_lists_apply_renderingsetup} {}} % invalid \unexpanded\def\bibtexpubtext {\expanded{\reference[\bibrefprefix\currentpublicationkey]{\number\bibtexcounter}}% \strut\dotypesetapublication\currentpublicationkey\strut} \unexpanded\def\dotypesetapublication#1% {\bgroup \the\initializebibdefinitions % NEW \def\@@currentalternative{:l:}% \presetbibvariables \let\biblanguage\empty \ignorespaces \bibgetvard{#1}% \removeunwantedspaces \ignorespaces \bibalternative{\bibgetvart{#1}}% \removeunwantedspaces \egroup} %D An few afterthoughts: \let\maybeyear\gobbleoneargument \let\noopsort \gobbleoneargument %D This is the result of bibtex's `language' field. \unexpanded\def\setbiblanguage#1#2{\setvalue{\??pb\s!language#1}{#2}} \unexpanded\def\lang#1% {\edef\biblanguage{#1}% \ifcsname\??pb\s!language#1\endcsname \language[\getvalue{\??pb\s!language#1}]% \fi \ignorespaces} %D \subject{Citations} %D \macros{cite,bibref} %D %D The indirection with \type{\dobibref} allows \LATEX\ style %D \type{\cite} commands with a braced argument (these might appear %D in included data from the \type{.bib} file). \unexpanded\def\cite {\strictdoifnextoptionalelse\dodocite\dobibref} \unexpanded\def\dobibref#1% {\docite[#1][]} \unexpanded\def\dodocite[#1]% {\strictdoifnextoptionalelse{\docite[#1]}{\docite[#1][]}} \unexpanded\def\docite[#1][#2]% {\begingroup \doifelsenothing{#2}\secondargumentfalse\secondargumenttrue \ifsecondargument \dowhatevercite{#1}{#2}% \else \donumberedcite{#1}% \fi \endgroup} \unexpanded\def\dowhatevercite#1#2% {\processcommalist[#2]\docitation \setupinteraction[\c!style=]% \doifassignmentelse {#1}% {\getparameters[LO][\c!alternative=,\c!extras=,#1]% \edef\@@currentalternative{\LOalternative}% \ifx\@@currentalternative\empty \edef\@@currentalternative{\@@citedefault}% \fi \ifx\LOextras\empty \setupcite[\@@currentalternative][#1]% \else \expandafter\ifx\csname \??pv \@@currentalternative\c!right\endcsname\relax % avoids tail recursion \expandafter\let\csname \??pv \@@currentalternative\c!right\endcsname\empty \fi \expandafter\ifx\csname LOright\endcsname \relax \edef\LOextras{{\LOextras\bibalternative\c!right}}% \else \edef\LOextras{{\LOextras\LOright}}% \fi \expanded{\setupcite[\@@currentalternative][#1,\c!right=\LOextras]}% \fi}% {\def\@@currentalternative{#1}}% \doifelsevalue{@@pv\@@currentalternative\c!compress}\v!no\bibcitecompressfalse\bibcitecompresstrue \getvalue{bib\@@currentalternative ref}[#2]} \unexpanded\def\donumberedcite#1% {\processcommalist[#1]\docitation \setupinteraction[\c!style=]% \edef\@@currentalternative{\@@citedefault}% \doifelsevalue{@@pv\@@currentalternative\c!compress}\v!no\bibcitecompressfalse\bibcitecompresstrue \getvalue{bib\@@citedefault ref}[#1]} %D \macros{nocite} \unexpanded\def\nocite[#1]% {\processcommalist[#1]\docitation} %D \macros{setupcite} \unexpanded\def\setupcite{\dodoubleempty\dosetupcite} \unexpanded\def\dosetupcite[#1][#2]% {\ifsecondargument \def\dodosetupcite##1{\getparameters[\??pv##1][#2]}% \processcommalist[#1]\dodosetupcite \else % default case \getparameters[\??pv\@@citedefault][#1]% \fi} %D Low-level stuff \unexpanded\def\getcitedata#1[#2]#3[#4]#5to#6% {\bgroup \dofetchapublication{#4}% \doifdefinedelse{\??pb @bib#2}% {\xdef#6{\getvalue{\??pb @bib#2}}}% {\xdef#6{\getvalue{\??pb @#2}}}% \egroup} \unexpanded\def\dofetchapublication#1% {\def\currentpublicationkey{#1}% \presetbibvariables \ignorespaces\bibgetvard{#1}} \unexpanded\def\docitation#1% {\iftrialtypesetting \else \expanded{\writedatatolist[pubs][bibref=#1]}% \fi} \let\addthisref\gobbleoneargument % keep this for compatibility %D \macros{ixbibauthoryear,thebibauthors,thebibyears} %D %D If compression of \type{\cite}'s argument expansion is on, %D the macros that deal with authors and years call this internal %D command to do the actual typesetting. %D %D Two entries with same author but with different years may %D be condensed into ``Author (year1,year2)''. This is about the %D only optimization that makes sense for the (author,year) %D style of citations (years within one author have to be unique %D anyway so no need to test for that, and ``Author1, Author2 (year)'' %D creates more confusion than it does good). %D %D In the code below, %D the macro \type{\thebibauthors} holds the names of the alternative %D author info fields for the current list. This is a commalist, %D and \type{\thebibyears} holds the (collection of) year(s) that go with %D this author (possibly as a nested commalist). %D %D There had better be an author for all cases, but there %D does not have to be year info always. \type{\thebibyears} is %D pre-initialized because this makes the insertion macros simpler. %D %D In normal \TEX, of course there are expansion problems again. %D Delegate this to \LUA. % \let\ixlastcommand \relax % \let\ixsecondcomman \relax % \let\ixfirstcommand \relax % \let\thebibauthors \empty % \let\thebibyears \empty % \let\authorcount \!!zerocount \let\currentbibauthor\empty \unexpanded\def\ixbibauthoryear#1#2#3#4% {\bgroup \gdef\ixlastcommand {#4}% \gdef\ixsecondcommand{#3}% \gdef\ixfirstcommand {#2}% \glet\thebibauthors \empty \glet\thebibyears \empty \getcommalistsize[#1]% \ifbibcitecompress \dorecurse\commalistsize{\xdef\thebibyears{\thebibyears,}}% \processcommalist[#1]\docompressbibauthoryear \else \processcommalist[#1]\donormalbibauthoryear \fi \egroup \dobibauthoryear} %D \macros{dodobibauthoryear} %D %D This macro only has to make sure that the lists %D \type{\thebibauthors} and \type{\thebibyears} are printed. \unexpanded\def\dobibauthoryear {\scratchcounter\zerocount \getcommacommandsize[\thebibauthors]% \edef\authorcount{\commalistsize}% \expandafter\processcommalist\expandafter[\thebibauthors]\dodobibauthoryear} \unexpanded\def\dodobibauthoryear#1% {\advance\scratchcounter\plusone \edef\wantednumber{\the\scratchcounter}% \getfromcommacommand[\thebibyears][\wantednumber]% \expandafter\def\expandafter\currentbibyear\expandafter{\commalistelement}% \setcurrentbibauthor{#1}% \ifnum\scratchcounter=\plusone \ixfirstcommand \else\ifnum \scratchcounter=\authorcount\relax \ixlastcommand \else \ixsecondcommand \fi\fi} \unexpanded\def\setcurrentbibauthor#1% sensitive for empty entries but I don't want to touch this {\getcommacommandsize[#1]% \ifcase\commalistsize % anonymous? \let\currentbibauthor\empty \or \def\currentbibauthor{#1}% \or \expanded{\docurrentbibauthor#1}% \else \handlemultiplebibauthors{\commalistsize}{#1}% \fi} \newcount\citescratchcounter \unexpanded\def\handlemultiplebibauthors#1#2% {\citescratchcounter\zerocount \let\currentbibauthor\empty \unexpanded\def\bibprocessauthoritem##1% {\advance\citescratchcounter\plusone \ifnum \citescratchcounter=#1\relax \edef\currentbibauthor{\currentbibauthor##1}% \else\ifnum\numexpr\citescratchcounter+\plusone\relax=#1\relax \edef\currentbibauthor{\currentbibauthor##1\bibalternative{andtext}}% \else \edef\currentbibauthor{\currentbibauthor##1\bibalternative{namesep}}% \fi\fi}% \processcommalist[#2]\bibprocessauthoritem} \setupcite [author,authoryear,authoryears] [\c!namesep={, }] %D This discovery of authoretallimit is not the best one, %D but it will do for now. \unexpanded\def\docurrentbibauthor#1,#2% {\doifemptyelse{#2} {\def\currentbibauthor{#1\bibalternative{otherstext}}} {\expandafter\ifx\csname\??pv\@@currentalternative authoretallimit\endcsname\relax \edef\currentbibauthor{#1\bibalternative{andtext}#2}% \else \edef\currentbibauthor{#1% \ifcase0\bibalternative{authoretallimit}\relax\or \bibalternative{otherstext}\else\bibalternative{andtext}#2\fi}% \fi}} %D This is not the one Hans made for me, because I need a global %D edef, and the \type{\robustdoifinsetelse} doesn't listen to %D \type{\doglobal } \unexpanded\def\robustaddtocommalist#1#2% {item} \cs {\robustdoifinsetelse{#1}#2\resetglobal {\dodoglobal\xdef#2{\ifx#2\empty\else#2,\fi#1}}} %D \macros{donormalbibauthoryear} %D %D Now we get to the macros that fill the two lists. %D The `simple' one really is quite simple. \unexpanded\def\donormalbibauthoryear#1% {\def\myauthor{Xxxxxxxxxx}% \def\myyear{0000}% \doifbibreferencefoundelse{#1} {\def\myauthor{{\bibgetvara{#1}}}% \def\myyear {\bibgetvary{#1}}}% {}% \expandafter\doglobal\expandafter\appendtocommalist\expandafter{\myauthor}\thebibauthors \expandafter\doglobal\expandafter\appendtocommalist\expandafter{\myyear }\thebibyears} %D \macros{docompressbibauthoryear} %D %D So much for the easy parts. Nothing at all will be done if %D the reference is not found or the reference does not contain %D author data. No questions marks o.s.s. (to be fixed later) \unexpanded\def\docompressbibauthoryear#1% {\def\myauthor{Xxxxxxxxxx}% \def\myyear {0000}% \doifbibreferencefoundelse{#1} {\xdef\myauthor{\bibgetvara{#1}}% \xdef\myyear {\bibgetvary{#1}}} {}% \ifx\myauthor\empty\else \checkifmyauthoralreadyexists \findmatchingyear \fi} %D two temporary counters. One of these two can possibly be replaced %D by \type{\scratchcounter}. \newcount\bibitemcounter \newcount\bibitemwanted %D The first portion is simple enough: if this is the very first author %D it is quite straightforward to add it. \type{\bibitemcounter} and %D \type{\bibitemwanted} are needed later to insert the year %D information in the correct item of \type{\thebibyears} \unexpanded\def\checkifmyauthoralreadyexists {\doifemptyelsevalue{thebibauthors} {\global\bibitemwanted \plusone \global\bibitemcounter\plusone \xdef\thebibauthors{{\myauthor}}} {% the next weirdness is because according to \getcommalistsize, % the length of \type{[{{},{}}]} is 2. \expandafter\getcommalistsize\expandafter[\thebibauthors,]% \global\bibitemcounter\numexpr\commalistsize+\minusone\relax \global\bibitemwanted \zerocount \processcommacommand[\thebibauthors]\docomparemyauthor}} %D The outer \type{\ifnum} accomplishes the addition of %D a new author to \type{\thebibauthors}. The messing about with %D the two counters is again to make sure that \type{\thebibyears} %D will be updated correctly.If the author {\it was} found, %D the counters will stay at their present values and everything %D will be setup properly to insert the year info. \unexpanded\def\docomparemyauthor#1% {\global\advance\bibitemwanted \plusone \def\mytempc{#1}% \ifx\mytempc\myauthor \quitcommalist \else\ifnum\bibitemwanted=\bibitemcounter\relax \global\advance\bibitemwanted \plusone \global\bibitemcounter\bibitemwanted\relax \expandafter\doglobal\expandafter\robustaddtocommalist\expandafter{{\myauthor}}\thebibauthors \fi\fi} %D This macro should be clear now. \unexpanded\def\findmatchingyear {\edef\wantednumber{\the\bibitemwanted}% \getfromcommacommand[\thebibyears][\wantednumber]% \ifx\commalistelement\empty \edef\myyear{{\myyear}}% \else \edef\myyear{{\commalistelement,\myyear}}% \fi \edef\newcommalistelement{\myyear}% \doglobal\replaceincommalist \thebibyears \wantednumber} %D \macros{gotobiblink,inbiblink,atbiblink} %D %D The final task is looping over that list until a match is found. %D Beware, we can have cites without reference match. \unexpanded\def\gotobiblink#1[#2]{\doifreferencefoundelse{\bibrefprefix#2}{\goto{#1}[\bibrefprefix#2]}{#1}} \unexpanded\def\atbiblink [#1]{\doifreferencefoundelse{\bibrefprefix#1}{\at [\bibrefprefix#1]}{#1}} \unexpanded\def\inbiblink [#1]{\doifreferencefoundelse{\bibrefprefix#1}{\expanded{\goto{\currentreferencetext}}[\bibrefprefix#1]}{#1}} %D \macros{bibauthoryearref,bibauthoryearsref,bibauthorref,bibyearref} %D %D Now that all the hard work has been done, these are simple. %D \type{\ixbibauthoryearref} stores the data in the macros %D \type{\currentbibauthor} and \type{\currentbibyear}. \unexpanded\def\doifbibinteractionelse {\iflocation \edef\test{\bibalternative\c!interaction}% \ifx\test\v!stop \doubleexpandafter\secondoftwoarguments \else \doubleexpandafter\firstoftwoarguments \fi \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\bibmaybeinteractive#1#2% {\doifbibinteractionelse{\gotobiblink{#2}[#1]}{#2}} \unexpanded\def\bibauthoryearref[#1]% {\ixbibauthoryear{#1}% {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}} {\bibalternative\c!lastpubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}} \unexpanded\def\bibauthoryearsref[#1]% {\bibalternative\v!left \ixbibauthoryear{#1} {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}} {\bibalternative\c!lastpubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}% \bibalternative\v!right} \unexpanded\def\bibauthorref[#1]% {\bibalternative\v!left \ixbibauthoryear{#1}% {\bibmaybeinteractive{#1}{{\currentbibauthor}}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}}} {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibauthor}}}% \bibalternative\v!right} \unexpanded\def\bibyearref[#1]% {\bibalternative\v!left \ixbibauthoryear{#1}% {\bibmaybeinteractive{#1}{{\currentbibyear}}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibyear}}} {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibyear}}}% \bibalternative\v!right} %D \macros{bibshortref,bibkeyref,bibpageref,bibtyperef,bibserialref} %D %D There is hardly any point in trying to compress these. The only %D thing that needs to be done is making sure that %D the separations are inserted correctly. And that is %D what \type{\bibinsertrefsep} does. \newconditional\firstbibrefsep \unexpanded\def\bibresetrefsep {\settrue\firstbibrefsep} \unexpanded\def\bibinsertrefsep {\ifconditional\firstbibrefsep \setfalse\firstbibrefsep \else \bibalternative\c!pubsep \fi} \unexpanded\def\bibshortref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibshortref \bibalternative\v!right} \unexpanded\def\dobibshortref#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\gotobiblink{\bibgetvars{#1}}[#1]} {}} \unexpanded\def\bibserialref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibserialref \bibalternative\v!right} \unexpanded\def\dobibserialref#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\gotobiblink{\bibgetvarn{#1}}[#1]} {}} \unexpanded\def\bibkeyref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibkeyref \bibalternative\v!right} \unexpanded\def\dobibkeyref#1% {\bibinsertrefsep \gotobiblink{#1}[#1]} \unexpanded\def\bibgotoDOI#1#2% {\doifbibinteractionelse {\useURL[bibfooDoi#1][#2]% \useURL[bibfoo#1][http://dx.doi.org/#2]% \goto{\url[bibfooDoi#1]}[url(bibfoo#1)]} {\hyphenatedurl{#2}}} \unexpanded\def\bibdoiref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibdoiref \bibalternative\v!right} \unexpanded\def\dobibdoiref#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\expanded{\bibgotoDOI{#1}{\bibgetvaro{#1}}}} {}} \unexpanded\def\biburlref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobiburlref \bibalternative\v!right} \unexpanded\def\bibgotoURL#1#2% {\doifbibinteractionelse {\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]} {\hyphenatedurl{#2}}} \unexpanded\def\dobiburlref#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\expanded{\bibgotoURL{#1}{\bibgetvaru{#1}}}} {}} \unexpanded\def\bibtyperef[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibtyperef \bibalternative\v!right} \unexpanded\def\dobibtyperef#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\gotobiblink{\bibgetvart{#1}}[#1]} {}} \unexpanded\def\bibpageref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibpageref \bibalternative\v!right} \unexpanded\def\dobibpageref#1% {\bibinsertrefsep \doifbibinteractionelse {\atbiblink[#1]} {{\referencingfalse\at[#1]}}} \unexpanded\def\bibdataref[#1]% {\bibalternative\v!left \bibresetrefsep\processcommalist[#1]\dobibdata \bibalternative\v!right} \unexpanded\def\dobibdata#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\dotypesetapublication{#1}} {}} \let\bibnoneref\nocite %D \macros{bibnumref} \unexpanded\def\bibnumref[#1]% {\begingroup \bibalternative\v!left \penalty\plustenthousand \ctxlua{bibtex.hacks.resolve("","\number\bibtexblock","#1")}% \bibalternative\v!right \endgroup} \unexpanded\def\dowithbibtexnumrefconnector#1#2% {\ifnum#1>\plusone \ifnum#2>\plusone \ifnum#2=#1\relax \bibalternative{lastpubsep}% \else \bibalternative{pubsep}% \fi \fi \fi} \unexpanded\def\dowithbibtexnumref#1#2#3#4#5% n, i, prefix block ref {\dowithbibtexnumrefconnector{#1}{#2}% \def\bibrefprefix{#4:}% \inbiblink[#5]} \unexpanded\def\dowithbibtexnumrefrange#1#2#3#4#5#6#7% n, i, prefix block ref {\dowithbibtexnumrefconnector{#1}{#2}% \def\bibrefprefix{#4:}% \inbiblink[#5]% \endash \def\bibrefprefix{#6:}% \inbiblink[#7]} %D By request from Sanjoy. This makes it easier to implement %D \type{\citeasnoun}. \unexpanded\def\bibauthornumref[#1]% {\getcommalistsize[#1]% \global\bibitemcounter\commalistsize \bibresetrefsep \processcommalist[#1]\dobibauthornumref} \unexpanded\def\dobibauthornumref#1% {\bibinsertrefsep \doifbibreferencefoundelse{#1} {\begingroup \cite[\c!left=,\c!right=,\c!alternative=\v!author][#1]% \bibalternative\c!inbetween \cite[num][#1]% \endgroup} {}} %D And some defaults are loaded from bibl-apa: \setuppublications [\c!monthconversion=, \c!alternative=apa, \c!method=\v!global, %\c!criterium=\v!previous, \c!criterium=\v!cite, % mojca wants this so bother her, not me \c!refcommand=num, \c!numbercommand=\bibleftnumber] \unexpanded\def\preloadbiblist {\globallet\preloadbiblist\relax \dousepublications\jobname} % \appendtoks \preloadbiblist \to \everysetuppublications % \appendtoks \preloadbiblist \to \everystarttext \let\ifbibinteractionelse\doifbibinteractionelse \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-copy.tex0000644000175000017500000001140712130411274025653 0ustar norbertnorbert% engine=luatex %D \module %D [ file=mtx-context-copy, %D version=2008.11.10, % about that time i started playing with this %D title=\CONTEXT\ Extra Trickry, %D subtitle=Copying Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a \TEXEXEC\ features that has been moved to \MKIV. % begin help % % usage: context --extra=copy [options] list-of-files % % --interaction : add hyperlinks % % end help \input mtx-context-common.tex \doif {\getdocumentargument{interaction}} {yes} { \setupinteraction [state=start] \setupexternalfigures [interaction=yes] } \setupexternalfigures [directory=] \definepapersize [fit] [width=\figurewidth, height=\figureheight] \setuplayout [page] % this will be an option to \copypages \unexpanded\def\CopyPages[#1]% {\dorecurse {\noffigurepages} {\startTEXpage \externalfigure[#1][page=\recurselevel]% \stopTEXpage}} \starttext \startluacode if #document.files == 0 then context("no files given") else for _, filename in ipairs(document.files) do if not string.find(filename,"^mtx%-context%-") then logs.report("copy",filename) context.getfiguredimensions { filename } context.setuppapersize { "fit" } context.CopyPages { filename } end end end \stopluacode \stoptext % def copyoutput % copyortrim(false,'copy') % end % def trimoutput % copyortrim(true,'trim') % end % def copyortrim(trim=false,what='unknown') % if job = TEX.new(logger) then % prepare(job) % job.cleanuptemprunfiles % files = if @commandline.option('sort') then @commandline.arguments.sort else @commandline.arguments end % if files.length > 0 then % if f = File.open(job.tempfilename('tex'),'w') then % scale = @commandline.checkedoption('scale') % begin % scale = (scale.to_f * 1000.0).to_i if scale.to_i < 10 % rescue % scale = 1000 % end % scale = scale.to_i % paperoffset = @commandline.checkedoption('paperoffset', '0cm') % f << "\\starttext\n" % files.each do |filename| % result = @commandline.checkedoption('result','texexec') % begin % if (filename !~ /^texexec/io) && (filename !~ /^#{result}/) then % report("copying file: #{filename}") % f << "\\getfiguredimensions\n" % f << " [#{filename}]\n" % f << " [scale=#{scale},\n" % f << " page=1,\n" % f << " size=trimbox\n" if trim % f << "]\n" % f << "\\definepapersize\n" % f << " [copy]\n" % f << " [width=\\figurewidth,\n" % f << " height=\\figureheight]\n" % f << "\\setuppapersize\n" % f << " [copy][copy]\n" % f << "\\setuplayout\n" % f << " [page]\n" % f << "\\setupexternalfigures\n" % f << " [directory=]\n" % f << "\\copypages\n" % f << " [#{filename}]\n" % f << " [scale=#{scale},\n" % f << " marking=on,\n" if @commandline.option('markings') % f << " size=trimbox,\n" if trim % f << " offset=#{paperoffset}]\n" % end % rescue % report("wrong specification") % end % end % f << "\\stoptext\n" % f.close % job.setvariable('interface','english') % job.setvariable('simplerun',true) % # job.setvariable('nooptionfile',true) % job.setvariable('files',[job.tempfilename]) % job.processtex % else % report("no files to #{what}") % end % else % report("no files to #{what}") % end % job.cleanuptemprunfiles % end % end context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-nested.lua0000644000175000017500000000451411571377075025402 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-imp-nested'] = { version = 1.001, comment = "companion to buff-imp-nested.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lpegmatch, patterns = lpeg.match, lpeg.patterns local P, V, Carg = lpeg.P, lpeg.V, lpeg.Carg local context = context local verbatim = context.verbatim local variables = interfaces.variables local makepattern = visualizers.makepattern local getvisualizer = visualizers.getvisualizer local nested = nil local donestedtypingstart = context.donestedtypingstart local donestedtypingstop = context.donestedtypingstop local v_none = variables.none local v_slanted = variables.slanted local handler = visualizers.newhandler { initialize = function(settings) local option = settings and settings.option if not option or option == "" then nested = nil elseif option == v_slanted then nested = nil elseif option == v_none then nested = nil else nested = getvisualizer(option,"direct") end end, open = function() donestedtypingstart() end, close = function() donestedtypingstop() end, content = function(s) if nested then nested(s) else verbatim(s) end end, } local open = P("<<") local close = P(">>") local rest = (1 - open - close - patterns.space - patterns.newline)^1 local grammar = visualizers.newgrammar("default", { initialize = patterns.beginofstring * Carg(1) / handler.initialize, open = makepattern(handler,"open",open), close = makepattern(handler,"close",close), rest = makepattern(handler,"content",rest), nested = V("open") * (V("pattern")^0) * V("close"), pattern = V("line") + V("space") + V("nested") + V("rest"), visualizer = V("initialize") * (V("pattern")^1) } ) local parser = P(grammar) visualizers.register("nested", { parser = parser, handler = handler, grammar = grammar } ) -- lpeg.match(parser,[[<>tf<>tf>>]]) context.par() -- lpeg.match(parser,[[<>sl>>tf>>]]) context.par() -- lpeg.match(parser,[[sl<>tf>>sl]]) context.par() context-2013.05.28.20130704/texmf-dist/tex/context/base/m-zint.mkiv0000644000175000017500000000524711754241457024021 0ustar norbertnorbert%D \module %D [ file=m-zint, %D version=2010.12.07, %D title=\CONTEXT\ Extra Modules, %D subtitle=Zint Barcode Generator, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Using \type {zint} seems to be the easiest way to generate %D (PDF417) barcodes so therefore we now have this module. There %D are proper (also windows) binaries at: %D %D \starttyping %D http://www.zint.org.uk %D \stoptyping %D %D There is a bit more code than needed as we want to be able to %D feed names. \startluacode moduledata.zint = { } local format, lower, gsub = string.format, string.lower, string.gsub local patterns = lpeg.patterns local zint = "zint" -- '"c:/program files/zint/zint.exe"' local whitespace = patterns.whitespace local spaces = whitespace^0 local key = (spaces / "") * patterns.digit^0 * (patterns.colon * spaces / "") local value = (whitespace / "" + (1 - key))^1 local pattern = lpeg.Cf(lpeg.Ct("") * (lpeg.Cg((lpeg.Cs(key) / tonumber) * (lpeg.Cs(value) / lower)) + patterns.anything)^0,rawset) local reverse local function cleancode(code) return lower(gsub(code," ","")) end local function numberofcode(code) if not reverse then local types = os.resultof(format("%s --types",zint)) or "" local formats = lpeg.match(pattern,types) if not formats or not next(formats) then return code end reverse = table.swapped(formats) or { } end code = cleancode(code) return reverse[code] or code end function moduledata.zint.generate(code,data,suffix,options) if not data or data == "" then data = "unset" end local code = cleancode(code) local base = format("zint-%s-%s",code,md5.hex(data)) local name = file.addsuffix(base,suffix or "eps") if not lfs.isfile(name) then local temp = file.addsuffix(base,"tmp") local code = numberofcode(code) logs.simple("using 'zint' to generate '%s'",base) io.savedata(temp,data) os.execute(format('%s --barcode=%s --output="%s" --input="%s" %s',zint,code,name,temp,options or "")) os.remove(temp) end return name end \stopluacode \continueifinputfile{m-zint.mkiv} \starttext \externalfigure[\cldcontext{moduledata.zint.generate("PDF417",[[Hans Hagen]])}] \blank \externalfigure[\cldcontext{moduledata.zint.generate("PDF417","Ton Otten")}] \blank \externalfigure[\cldcontext{moduledata.zint.generate("ISBN","9789490688011")}] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-mathdesign.mkiv0000644000175000017500000000203611754241457026461 0ustar norbertnorbert%D \module %D [ file=type-imp-mathdesign, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Mathdesign, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection [mathdesign] \starttypescript [\s!math] [charter,mathdesignch] [\s!all] \loadfontgoodies[charter-math] \definefontsynonym[\s!MathRoman][chartermath@charter-math] \stoptypescript \starttypescript [\s!math] [garamond,mathdesigngm] [\s!all] \loadfontgoodies[garamond-math] \definefontsynonym[\s!MathRoman][garamondmath@garamond-math] \stoptypescript \starttypescript [\s!math] [utopia,mathdesignut] [\s!all] \loadfontgoodies[utopia-math] \definefontsynonym[\s!MathRoman][utopiamath@utopia-math] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/data-tex.lua0000644000175000017500000001414412130411274024102 0ustar norbertnorbertif not modules then modules = { } end modules ['data-tex'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local char = string.char local insert, remove = table.insert, table.remove local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local report_tex = logs.reporter("resolvers","tex") local resolvers = resolvers local sequencers = utilities.sequencers local methodhandler = resolvers.methodhandler local splitlines = string.splitlines local utffiletype = utf.filetype -- local fileprocessor = nil -- local lineprocessor = nil local textfileactions = sequencers.new { arguments = "str,filename,coding", returnvalues = "str", results = "str", } local textlineactions = sequencers.new { arguments = "str,filename,linenumber,noflines,coding", returnvalues = "str", results = "str", } local helpers = resolvers.openers.helpers local appendgroup = sequencers.appendgroup helpers.textfileactions = textfileactions helpers.textlineactions = textlineactions appendgroup(textfileactions,"before") -- user appendgroup(textfileactions,"system") -- private appendgroup(textfileactions,"after" ) -- user appendgroup(textlineactions,"before") -- user appendgroup(textlineactions,"system") -- private appendgroup(textlineactions,"after" ) -- user local ctrl_d = char( 4) -- unix local ctrl_z = char(26) -- windows resolvers.inputstack = resolvers.inputstack or { } local inputstack = resolvers.inputstack function helpers.textopener(tag,filename,filehandle,coding) local lines local t_filehandle = type(filehandle) if not filehandle then lines = io.loaddata(filename) elseif t_filehandle == "string" then lines = filehandle elseif t_filehandle == "table" then lines = filehandle else lines = filehandle:read("*a") -- io.readall(filehandle) ... but never that large files anyway -- lines = io.readall(filehandle) filehandle:close() end if type(lines) == "string" then local coding = coding or utffiletype(lines) -- so we can signal no regime if trace_locating then report_tex("%a opener: %a opened using method %a",tag,filename,coding) end if coding == "utf-16-be" then lines = utf.utf16_to_utf8_be(lines) elseif coding == "utf-16-le" then lines = utf.utf16_to_utf8_le(lines) elseif coding == "utf-32-be" then lines = utf.utf32_to_utf8_be(lines) elseif coding == "utf-32-le" then lines = utf.utf32_to_utf8_le(lines) else -- utf8 or unknown (could be a mkvi file) local runner = textfileactions.runner if runner then lines = runner(lines,filename,coding) or lines end lines = splitlines(lines) end elseif trace_locating then report_tex("%a opener: %a opened",tag,filename) end local noflines = #lines if lines[noflines] == "" then -- maybe some special check is needed lines[noflines] = nil end logs.show_open(filename) insert(inputstack,filename) return { filename = filename, noflines = noflines, currentline = 0, close = function() if trace_locating then report_tex("%a closer: %a closed",tag,filename) end logs.show_close(filename) remove(inputstack) t = nil end, reader = function(self) self = self or t local currentline, noflines = self.currentline, self.noflines if currentline >= noflines then return nil else currentline = currentline + 1 self.currentline = currentline local content = lines[currentline] if not content then return nil elseif content == "" then return "" -- elseif content == ctrl_d or ctrl_z then -- return nil -- we need this as \endinput does not work in prints else local runner = textlineactions.runner if runner then return runner(content,filename,currentline,noflines,coding) or content else return content end end end end } end function resolvers.findtexfile(filename,filetype) return methodhandler('finders',filename,filetype) end function resolvers.opentexfile(filename) return methodhandler('openers',filename) end function resolvers.openfile(filename) local fullname = methodhandler('finders',filename) return fullname and fullname ~= "" and methodhandler('openers',fullname) or nil end function resolvers.loadtexfile(filename,filetype) -- todo: optionally apply filters local ok, data, size = resolvers.loadbinfile(filename, filetype) return data or "" end resolvers.texdatablob = resolvers.loadtexfile local function installhandler(namespace,what,where,func) if not func then where, func = "after", where end if where == "before" or where == "after" then sequencers.appendaction(namespace,where,func) else report_tex("installing input %a handlers in %a is not possible",what,tostring(where)) end end function resolvers.installinputlinehandler(...) installhandler(helpers.textlineactions,"line",...) end function resolvers.installinputfilehandler(...) installhandler(helpers.textfileactions,"file",...) end -- local basename = file.basename -- resolvers.installinputlinehandler(function(str,filename,linenumber,noflines) -- report_tex("[lc] file %a, line %a of %a, length %a",basename(filename),linenumber,noflines,#str) -- end) -- resolvers.installinputfilehandler(function(str,filename) -- report_tex("[fc] file %a, length %a",basename(filename),#str) -- end) context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-epd.lua0000644000175000017500000000147512130411274024104 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-epd'] = { version = 1.001, comment = "companion to grph-epd.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local variables = interfaces.variables local settings_to_hash = utilities.parsers.settings_to_hash -- todo: page, name, file, url local codeinjections = backends.codeinjections function figures.mergegoodies(optionlist) local options = settings_to_hash(optionlist) local all = options[variables.all] or options[variables.yes] if all or options[variables.reference] then codeinjections.mergereferences() end if all or options[variables.layer] then codeinjections.mergeviewerlayers() end end context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-def.mkiv0000644000175000017500000001347712130411274024236 0ustar norbertnorbert%D \module %D [ file=catc-def, %D version=2006.09.18, %D title=\CONTEXT\ Catcode Macros, %D subtitle=Default Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The following catcode tables are rather \CONTEXT\ independent. \ifdefined\nilcatcodes \else \newcatcodetable \nilcatcodes \fi \ifdefined\texcatcodes \else \newcatcodetable \texcatcodes \fi \ifdefined\luacatcodes \else \newcatcodetable \luacatcodes \fi \ifdefined\notcatcodes \else \newcatcodetable \notcatcodes \fi \ifdefined\vrbcatcodes \else \newcatcodetable \vrbcatcodes \fi \ifdefined\prtcatcodes \else \newcatcodetable \prtcatcodes \fi \startcatcodetable \nilcatcodes \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \stopcatcodetable \startcatcodetable \texcatcodes \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\circumflexasciicode\superscriptcatcode \catcode\underscoreasciicode\subscriptcatcode \catcode\ampersandasciicode \alignmentcatcode \catcode\backslashasciicode \escapecatcode \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode\endgroupcatcode \catcode\dollarasciicode \mathshiftcatcode \catcode\hashasciicode \parametercatcode \catcode\commentasciicode \commentcatcode \stopcatcodetable \startcatcodetable \luacatcodes \catcode\tabasciicode \othercatcode \catcode\endoflineasciicode \othercatcode \catcode\formfeedasciicode \othercatcode \catcode\spaceasciicode \othercatcode \catcode\endoffileasciicode \ignorecatcode \catcode\circumflexasciicode\othercatcode \catcode\underscoreasciicode\othercatcode \catcode\ampersandasciicode \othercatcode \catcode\backslashasciicode \escapecatcode \catcode\commentasciicode \othercatcode \catcode\hashasciicode \othercatcode \catcode\barasciicode \othercatcode \catcode\leftbraceasciicode \othercatcode \catcode\rightbraceasciicode\othercatcode \catcode\tildeasciicode \othercatcode \catcode\dollarasciicode \othercatcode \stopcatcodetable \startcatcodetable \notcatcodes % probably less needed \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\circumflexasciicode \othercatcode \catcode\underscoreasciicode \othercatcode \catcode\ampersandasciicode \othercatcode \catcode\tildeasciicode \othercatcode \catcode\hashasciicode \othercatcode \catcode\dollarasciicode \othercatcode \catcode\commentasciicode \othercatcode \catcode\lessthanasciicode \othercatcode \catcode\morethanasciicode \othercatcode \catcode\leftbraceasciicode \othercatcode \catcode\rightbraceasciicode \othercatcode \catcode\doublequoteasciicode \othercatcode \catcode\singlequoteasciicode \othercatcode \catcode\forwardslashasciicode\othercatcode \catcode\backslashasciicode \othercatcode \catcode\barasciicode \othercatcode \stopcatcodetable \startcatcodetable \vrbcatcodes % probably less needed \catcode\tabasciicode \othercatcode \catcode\endoflineasciicode\othercatcode \catcode\formfeedasciicode \othercatcode \catcode\spaceasciicode \othercatcode \catcode\endoffileasciicode\othercatcode \stopcatcodetable \startcatcodetable \prtcatcodes \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\circumflexasciicode \superscriptcatcode %catcode\underscoreasciicode \subscriptcatcode \catcode\underscoreasciicode \lettercatcode \catcode\ampersandasciicode \alignmentcatcode \catcode\backslashasciicode \escapecatcode \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode \endgroupcatcode \catcode\dollarasciicode \mathshiftcatcode \catcode\hashasciicode \parametercatcode \catcode\commentasciicode \commentcatcode \catcode\atsignasciicode \lettercatcode \catcode\exclamationmarkasciicode\lettercatcode \catcode\questionmarkasciicode \lettercatcode \catcode\tildeasciicode \activecatcode \catcode\barasciicode \activecatcode \stopcatcodetable %D Because some characters have a special meaning, we provide %D shortcuts to their character representation. \chardef \^ = \circumflexasciicode \chardef \_ = \underscoreasciicode \chardef \& = \ampersandasciicode \chardef \% = \commentasciicode \chardef \# = \hashasciicode \chardef \$ = \dollarasciicode \chardef \{ = \leftbraceasciicode \chardef \} = \rightbraceasciicode \chardef \\ = \backslashasciicode \chardef \| = \barasciicode % way too wide in lm, so one can also use: % % \def\_{\dontleavehmode \kern.06em \vbox{\hrule width.3em}} % this will become a \chardef %D From now on we can use the protection mechanisms. \normalprotected\def\unprotect{\pushcatcodetable\setcatcodetable\prtcatcodes} \normalprotected\def\protect {\popcatcodetable} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-pag.lua0000644000175000017500000002375512130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-pag'] = { version = 1.001, comment = "companion to strc-pag.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local texcount = tex.count local allocate, mark = utilities.storage.allocate, utilities.storage.mark local trace_pages = false trackers.register("structures.pages", function(v) trace_pages = v end) local report_pages = logs.reporter("structure","pages") local structures = structures local helpers = structures.helpers local sections = structures.sections local pages = structures.pages local sets = structures.sets local counters = structures.counters local counterdata = counters.data local variables = interfaces.variables local context = context local processors = typesetters.processors local applyprocessor = processors.apply local startapplyprocessor = processors.startapply local stopapplyprocessor = processors.stopapply -- storage local collected, tobesaved = allocate(), allocate() pages.collected = collected pages.tobesaved = tobesaved local function initializer() collected = pages.collected tobesaved = pages.tobesaved end job.register('structures.pages.collected', tobesaved, initializer) local specification = { } -- to be checked function pages.save(prefixdata,numberdata) local realpage, userpage = texcount.realpageno, texcount.userpageno if realpage > 0 then if trace_pages then report_pages("saving page %s.%s",realpage,userpage) end local data = { number = userpage, block = sections.currentblock(), prefixdata = prefixdata and helpers.simplify(prefixdata), numberdata = numberdata and helpers.simplify(numberdata), } tobesaved[realpage] = data if not collected[realpage] then collected[realpage] = data end elseif trace_pages then report_pages("not saving page %s.%s",realpage,userpage) end end -- We can set the pagenumber but as it only get incremented in the page -- builder we have to make sure it starts at least at 1. function counters.specials.userpage() local r = texcount.realpageno if r > 0 then local t = tobesaved[r] if t then t.number = texcount.userpageno if trace_pages then report_pages("forcing pagenumber of realpage %s to %s",r,t.number) end return end end local u = texcount.userpageno if u == 0 then if trace_pages then report_pages("forcing pagenumber of realpage %s to %s (probably a bug)",r,1) end counters.setvalue("userpage",1) texcount.userpageno = 1 end end local f_convert = string.formatters["\\convertnumber{%s}{%s}"] local function convertnumber(str,n) return f_convert(str or "numbers",n) end function pages.number(realdata,pagespec) local userpage, block = realdata.number, realdata.block or "" -- sections.currentblock() local numberspec = realdata.numberdata local conversionset = (pagespec and pagespec.conversionset ~= "" and pagespec.conversionset) or (numberspec and numberspec.conversionset ~= "" and numberspec.conversionset) or "" local conversion = (pagespec and pagespec.conversion ~= "" and pagespec.conversion ) or (numberspec and numberspec.conversion ~= "" and numberspec.conversion ) or "" local starter = (pagespec and pagespec.starter ~= "" and pagespec.starter ) or (numberspec and numberspec.starter ~= "" and numberspec.starter ) or "" local stopper = (pagespec and pagespec.stopper ~= "" and pagespec.stopper ) or (numberspec and numberspec.stopper ~= "" and numberspec.stopper ) or "" if starter ~= "" then applyprocessor(starter) end if conversion ~= "" then context.convertnumber(conversion,userpage) else if conversionset == "" then conversionset = "default" end local theconversion = sets.get("structure:conversions",block,conversionset,1,"numbers") -- to be checked: 1 local data = startapplyprocessor(theconversion) context.convertnumber(data or "number",userpage) stopapplyprocessor() end if stopper ~= "" then applyprocessors(stopper) end end -- (pagespec.prefix == yes|unset) and (pages.prefix == yes) => prefix function pages.analyze(entry,pagespecification) -- safeguard if not entry then return false, false, "no entry" end local references = entry.references if not references then return false, false, "no references" end local pagedata = references.pagedata -- sometimes resolved (external) if not pagedata then local realpage = references.realpage if realpage then pagedata = collected[realpage] else return false, false, "no realpage" end end if not pagedata then return false, false, "no pagedata" end local sectiondata = references.sectiondata -- sometimes resolved (external) if not sectiondata then local section = references.section if section then sectiondata = sections.collected[section] else return pagedata, false, "no section" end end if not sectiondata then return pagedata, false, "no sectiondata" end local no = variables.no -- local preferences if pagespecification and pagespecification.prefix == no then return pagedata, false, "current spec blocks prefix" end -- stored preferences -- if entry.prefix == no then -- return pagedata, false, "entry blocks prefix" -- end -- stored page state pagespecification = pagedata.prefixdata if pagespecification and pagespecification.prefix == no then return pagedata, false, "pagedata blocks prefix" end -- final verdict return pagedata, sectiondata, "okay" end function helpers.page(data,pagespec) if data then local pagedata = pages.analyze(data,pagespec) if pagedata then pages.number(pagedata,pagespec) end end end function helpers.prefixpage(data,prefixspec,pagespec) if data then local pagedata, prefixdata, e = pages.analyze(data,pagespec) if pagedata then if prefixdata then sections.typesetnumber(prefixdata,"prefix",prefixspec or false,prefixdata or false,pagedata.prefixdata or false) end pages.number(pagedata,pagespec) end end end function helpers.prefixlastpage(data,prefixspec,pagespec) if data then local r = data.references local ls, lr = r.section, r.realpage r.section, r.realpage = r.lastsection or r.section, r.lastrealpage or r.realpage helpers.prefixpage(data,prefixspec,pagespec) r.section, r.realpage = ls, lr end end -- function helpers.analyze(entry,specification) -- safeguard if not entry then return false, false, "no entry" end local yes, no = variables.yes, variables.no -- section data local references = entry.references if not references then return entry, false, "no references" end local section = references.section if not section then return entry, false, "no section" end local sectiondata = sections.collected[references.section] if not sectiondata then return entry, false, "no section data" end -- local preferences if specification and specification.prefix == no then return entry, false, "current spec blocks prefix" end -- stored preferences (not used) local prefixdata = entry.prefixdata if prefixdata and prefixdata.prefix == no then return entry, false, "entry blocks prefix" end -- final verdict return entry, sectiondata, "okay" end function helpers.prefix(data,prefixspec) if data then local _, prefixdata, status = helpers.analyze(data,prefixspec) if prefixdata then sections.typesetnumber(prefixdata,"prefix",prefixspec or false,data.prefixdata or false,prefixdata or false) end end end function pages.is_odd(n) n = n or texcount.realpageno if texcount.pagenoshift % 2 == 0 then return n % 2 == 0 else return n % 2 ~= 0 end end -- move to strc-pag.lua function counters.analyze(name,counterspecification) local cd = counterdata[name] -- safeguard if not cd then return false, false, "no counter data" end -- section data local sectiondata = sections.current() if not sectiondata then return cd, false, "not in section" end local references = sectiondata.references if not references then return cd, false, "no references" end local section = references.section if not section then return cd, false, "no section" end sectiondata = sections.collected[references.section] if not sectiondata then return cd, false, "no section data" end -- local preferences local no = variables.no if counterspecification and counterspecification.prefix == no then return cd, false, "current spec blocks prefix" end -- stored preferences (not used) if cd.prefix == no then return cd, false, "entry blocks prefix" end -- sectioning -- if sectiondata.prefix == no then -- return false, false, "sectiondata blocks prefix" -- end -- final verdict return cd, sectiondata, "okay" end function sections.prefixedconverted(name,prefixspec,numberspec) local cd, prefixdata, result = counters.analyze(name,prefixspec) if cd then if prefixdata then sections.typesetnumber(prefixdata,"prefix",prefixspec or false,cd or false) end counters.converted(name,numberspec) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frq.mkii0000644000175000017500000001444111754241457024271 0ustar norbertnorbert%D \module %D [ file=lang-frq, %D version=2004.01.15, %D title=\CONTEXT\ Language Macros, %D subtitle=Frequency Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Frequency Tables} \unprotect \ifx\s!en\undefined \def\v!en{en} \fi \ifx\??lg\undefined \def\??lg{@@lg} \fi %M \usemodule[layout] %D \macros %D {charwidthmethod} %D %D This module implements a method for determining the width of an %D average character in a language. It uses the dimensions of the %D current fonts. %D %D \def\ShwChrWd#1#2#3% %D {\chardef\charwidthmethod#1\relax %D \mainlanguage[#2#3]\the\dimexpr(\averagecharwidth)} %D %D \starttabulate[|c|c|c|c|c|c|] %D \HL %D \NC \NC\bf0=amount\NC\bf1=.5em\NC2=ex\NC\bf3=frequency\NC\bf4=list\NC\NR %D \HL %D \NC\bf en\NC\ShwChrWd0en\NC\ShwChrWd1en\NC\ShwChrWd2en\NC\ShwChrWd3en\NC\ShwChrWd4en\NC\NR %D \NC\bf nl\NC\ShwChrWd0nl\NC\ShwChrWd1nl\NC\ShwChrWd2nl\NC\ShwChrWd3nl\NC\ShwChrWd4nl\NC\NR %D \NC\bf de\NC\ShwChrWd0de\NC\ShwChrWd1de\NC\ShwChrWd2de\NC\ShwChrWd3de\NC\ShwChrWd4de\NC\NR %D \HL %D \stoptabulate %D %D Method~1 ignores the widths and assumes that each character has a %D width of .5em, which is true for most monospaced fonts. Method~2 %D takes the x as starting point, and assumes that it's height kind of %D matches its width. Method~3 is the best one, and determines the %D average width based on the language specific character table. %D Method~4 is a mixture between the first two methods: character %D specific widths applied to an equal distribution. Method~0 reports %D the total count, which normally is~100. \chardef\charwidthmethod=3 % 0=amount 1=em 2=ex 3=frequency 4=flattened >4=ex %D \macros %D {charwidthlanguage} %D %D The language used for the calculations is defined as: \def\charwidthlanguage{\currentmainlanguage} %D \macros %D {charfreq} %D %D This method comes into action in the following macro: \def\charfreq#1 #2 % character fraction {+(\ifcase\charwidthmethod #2\dimexpr100\onepoint\relax \or #2\dimexpr.5em\relax % \emwidth/2 \or #2\dimexpr\exheight\relax \or #2\fontcharwd\font`#1% \or \dimexpr100\fontcharwd\font`#1/\charactertsize\charwidthlanguage\relax % ugly hack \else #2\dimexpr\exheight\relax \fi)} %D \macros %D {startcharactertable} %D %D A frequency table is defined with the following macro. The \type %D {charfreq} macro is used in this table. \def\startcharactertable[#1]#2\stopcharactertable % \dimexpr has fuzzy lookahead {\startnointerference \long\setgvalue{\??lg:w:#1}{#2}% the width vector \scratchcounter\zerocount \def\charfreq##1 ##2 {\advance\scratchcounter\plusone} #2% \long\setxvalue{\??lg:c:#1}{\the\scratchcounter}% the character count \stopnointerference} %D \macros %D {charactertable,charactertsize} %D %D The table content as well as the number of entries can be fetched with %D the following two macros. The architecture of the table and calling %D macro permits a fully expandable application. \def\charactertable#1% {\csname\??lg:w:\ifcsname\??lg:w:#1\endcsname#1\else\s!en\fi\endcsname} \def\charactertsize#1% {\csname\??lg:c:\ifcsname\??lg:c:#1\endcsname#1\else\s!en\fi\endcsname} %D Although it is of hardly any use, you can inherit a character table: %D %D \starttyping %D \startcharactertable[cz] \charactertable{en} \stopcharactertable %D \stoptyping %D %D We define a default vector with 100\% x's. \startcharactertable[en] 100 x \stopcharactertable % kind of default %D \macros %D {averagecharwidth} %D %D This macro reports the average width for the current main %D language (\the \dimexpr (\averagecharwidth)). \def\averagecharwidth{\dimexpr((\zeropoint\charactertable\charwidthlanguage)/100)} \def\showcharfreq {\hbox\bgroup \charwidthlanguage:% \dostepwiserecurse041% {\chardef\charwidthmethod\recurselevel\relax \enspace\recurselevel/\the\dimexpr(\averagecharwidth)}% \egroup} %D Just for fun, we show a few frequency tables as graphic (\in {figure} %D [fig:charfreq]). %D %D \startbuffer %D \definepalet [charfreq] [en=darkred, nl=darkgreen, de=darkblue] %D %D \def\charfreq#1 #2 % %D {\startMPdrawing %D interim linejoin := butt ; %D a := ASCII "#1" ; %D if (a >= (ASCII "a")) and (a <= (ASCII "z")) : %D draw ((0,#2*.25cm)--origin--(0,#2*.5cm)) %D shifted (a*4mm+o,0) %D withpen pencircle scaled .5mm %D withcolor c; %D fi ; %D \stopMPdrawing} %D %D \resetMPdrawing %D \startMPdrawing %D numeric a, o ; a := o := 0 ; %D color c ; c := .5white ; %D string s ; s := "" ; %D \stopMPdrawing %D %D \startMPdrawing o := 0mm ; c := \MPcolor{charfreq:en} ; \stopMPdrawing %D \charactertable{en} %D %D \startMPdrawing o := 1mm ; c := \MPcolor{charfreq:nl} ; \stopMPdrawing %D \charactertable{nl} %D %D \startMPdrawing o := 2mm ; c := \MPcolor{charfreq:de} ; \stopMPdrawing %D \charactertable{de} %D %D \startMPdrawing %D for a := ASCII "a" upto ASCII "z" : %D draw textext.bot("\strut\tttf " & char a) shifted (a*4mm+1mm,-1mm) ; %D endfor ; %D \stopMPdrawing %D %D \MPdrawingdonetrue \getMPdrawing \resetMPdrawing %D \stopbuffer %D %D \placefigure %D [here] %D [fig:charfreq] %D {The character distributions for English, Dutch and German.} %D {\getbuffer} %D %D A few samples of usage of this mechanism are shown below: %D %D \startbuffer %D {\mainlanguage[en]\hsize65\averagecharwidth\mainlanguage[en]\input ward \blank} %D {\mainlanguage[nl]\hsize65\averagecharwidth\mainlanguage[en]\input ward \blank} %D {\mainlanguage[de]\hsize65\averagecharwidth\mainlanguage[en]\input ward \blank} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Although the widthts differ, the consequenes for breaking the paragraph %D into lines are minimal. %D \macros %D {freezeaveragecharacterwidth} %D %D This macro can be used to make sure that the width does not change during a %D page break when another font is used. \let\normalaveragecharacterwidth\averagecharacterwidth \def\freezeaveragecharacterwidth % global {\xdef\averagecharacterwidth{\dimexpr(\the\normalaveragecharacterwidth)}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/toks-ini.mkiv0000644000175000017500000000444011754241457024332 0ustar norbertnorbert%D \module %D [ file=toks-ini, %D version=2007.03.03, %D title=\CONTEXT\ Token Support, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Token Support / Initialization} \registerctxluafile{toks-ini}{1.001} \unprotect %D Handy for manuals \unknown \unexpanded\def\starttokens [#1]{\ctxlua{tokens.collectors.install("#1","stoptokens")}} \let\stoptokens \relax \def\flushtokens [#1]{\ctxlua{tokens.collectors.flush("#1")}} \def\showtokens [#1]{\ctxlua{tokens.collectors.show("#1")}} \def\testtokens [#1]{\ctxlua{tokens.collectors.with_words("#1")}} \def\registertoken #1{\ctxlua{tokens.collectors.register("#1")}} %D Inspired by a prototype by Taco for Thomas cum suis. % \defineremapper[babelgreek] % % \remapcharacter[babelgreek][`a]{\alpha} % \remapcharacter[babelgreek][`b]{\beta} % \remapcharacter[babelgreek][`c]{\gamma} % \remapcharacter[babelgreek][`d]{OEPS} % % \starttext % % [\startbabelgreek % a b c some stuff here \blank[big] oeps b d % \stopbabelgreek] % % [\babelgreek{some stuff here}] % % \stoptext \unexpanded\def\defineremapper[#1]% {\setuevalue{\e!start#1}{\toks_start_remapper{#1}}% \setuevalue{\e!stop #1}{\toks_stop_remapper {#1}}% \letvalue{#1}\relax \normalexpanded{\expandafter\def\csname#1\endcsname##1{\csname\e!start#1\endcsname##1\csname\e!stop#1\endcsname}}} \unexpanded\def\toks_start_remapper#1% {\ctxlua{tokens.collectors.install("#1", "\e!stop#1")}} \unexpanded\def\toks_stop_remapper#1% {\ctxlua{tokens.collectors.handle("#1",function(str) return tokens.collectors.remapper.convert("#1",str) end, true)}} \unexpanded\def\remaptokens#1% {\ctxlua{tokens.collectors.handle("#1",function(str) return tokens.collectors.remapper.convert("#1",str) end)}} \unexpanded\def\remapcharacter {\dodoubleempty\toks_remap_character} \def\toks_remap_character[#1][#2]#3% {\ctxlua{tokens.collectors.install("store", "ctxlua")}#3% \ctxlua{tokens.collectors.remapper.store("store","#1",\number#2)}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-ctx.lua0000644000175000017500000002760512134352503024130 0ustar norbertnorbertif not modules then modules = { } end modules ['core-ctx'] = { version = 1.001, comment = "companion to core-ctx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ Job control files aka ctx files are rather old and date from the mkii times. They were handled in texexec and mtx-context and deals with modes, modules, environments and preprocessing in projects where one such file drives the processing of lots of files without the need to provide command line arguments. In mkiv this concept was of course supported as well. The first implementation of mtx-context took much of the approach of texexec, but by now we have gotten rid of the option file (for passing modes, modules and environments), the stubs (for directly processing cld and xml) as well as the preprocessing component of the ctx files. Special helper features, like typesetting listings, were already moved to the extras (a direct side effect of the ability to pass along command line arguments.) All this made mtx-context more simple than its ancestor texexec. Because some of the modes might affect the mtx-context end, the ctx file is still loaded there but only for getting the modes. The file is loaded again during the run but as loading and basic processing takes less than a millisecond it's not that much of a burden. --]] -- the ctxrunner tabel might either become private or move to the job namespace -- which also affects the loading order local trace_prepfiles = false trackers.register("system.prepfiles", function(v) trace_prepfiles = v end) local gsub, find, match, validstring = string.gsub, string.find, string.match, string.valid local concat = table.concat local xmltext = xml.text local report_prepfiles = logs.reporter("system","prepfiles") commands = commands or { } local commands = commands ctxrunner = ctxrunner or { } ctxrunner.prepfiles = utilities.storage.allocate() local function dontpreparefile(t,k) return k -- we only store when we have a prepper end table.setmetatableindex(ctxrunner.prepfiles,dontpreparefile) local function filtered(str,method) -- in resolvers? str = tostring(str) if method == 'name' then str = file.nameonly(str) elseif method == 'path' then str = file.dirname(str) elseif method == 'suffix' then str = file.suffix(str) elseif method == 'nosuffix' then str = file.removesuffix(str) elseif method == 'nopath' then str = file.basename(str) elseif method == 'base' then str = file.basename(str) -- elseif method == 'full' then -- elseif method == 'complete' then -- elseif method == 'expand' then -- str = file.expandpath(str) end return (gsub(str,"\\","/")) end -- local function substitute(e,str) -- local attributes = e.at -- if str and attributes then -- if attributes['method'] then -- str = filtered(str,attributes['method']) -- end -- if str == "" and attributes['default'] then -- str = attributes['default'] -- end -- end -- return str -- end local function substitute(str) return str end local function justtext(str) str = xml.unescaped(tostring(str)) str = xml.cleansed(str) str = gsub(str,"\\+",'/') str = gsub(str,"%s+",' ') return str end function ctxrunner.load(ctxname) local xmldata = xml.load(ctxname) local jobname = tex.jobname -- todo local variables = { job = jobname } local commands = { } local flags = { } local paths = { } -- todo local treatments = { } local suffix = "prep" xml.include(xmldata,'ctx:include','name', {'.', file.dirname(ctxname), "..", "../.." }) for e in xml.collected(xmldata,"/ctx:job/ctx:flags/ctx:flag") do local flag = xmltext(e) local key, value = match(flag,"^(.-)=(.+)$") if key and value then environment.setargument(key,value) else environment.setargument(flag,true) end end -- add to document.options.ctxfile[...] local ctxfile = document.options.ctxfile local modes = ctxfile.modes local modules = ctxfile.modules local environments = ctxfile.environments for e in xml.collected(xmldata,"/ctx:job/ctx:process/ctx:resources/ctx:mode") do modes[#modes+1] = xmltext(e) end for e in xml.collected(xmldata,"/ctx:job/ctx:process/ctx:resources/ctx:module") do modules[#modules+1] = xmltext(e) end for e in xml.collected(xmldata,"/ctx:job/ctx:process/ctx:resources/ctx:environment") do environments[#environments+1] = xmltext(e) end for e in xml.collected(xmldata,"ctx:message") do report_prepfiles("ctx comment: %s", xmltext(e)) end for r, d, k in xml.elements(xmldata,"ctx:value[@name='job']") do d[k] = variables['job'] or "" end for e in xml.collected(xmldata,"/ctx:job/ctx:preprocess/ctx:processors/ctx:processor") do local name = e.at and e.at['name'] or "unknown" local suffix = e.at and e.at['suffix'] or "prep" for r, d, k in xml.elements(command,"ctx:old") do d[k] = "%old%" end for r, d, k in xml.elements(e,"ctx:new") do d[k] = "%new%" end for r, d, k in xml.elements(e,"ctx:value") do local tag = d[k].at['name'] if tag then d[k] = "%" .. tag .. "%" end end local runner = xml.textonly(e) if runner and runner ~= "" then commands[name] = { suffix = suffix, runner = runner, } end end local suffix = xml.filter(xmldata,"xml:///ctx:job/ctx:preprocess/attribute('suffix')") or suffix local runlocal = xml.filter(xmldata,"xml:///ctx:job/ctx:preprocess/ctx:processors/attribute('local')") runlocal = toboolean(runlocal) -- todo: only collect, then plug into file handler local inputfile = validstring(environment.arguments.input) or jobname variables.old = inputfile for files in xml.collected(xmldata,"/ctx:job/ctx:preprocess/ctx:files") do for pattern in xml.collected(files,"ctx:file") do local preprocessor = pattern.at['processor'] or "" for r, d, k in xml.elements(pattern,"/ctx:old") do d[k] = jobname end for r, d, k in xml.elements(pattern,"/ctx:value[@name='old'") do d[k] = jobname end pattern =justtext(xml.tostring(pattern)) if preprocessor and preprocessor ~= "" and pattern and pattern ~= "" then local noftreatments = #treatments + 1 local findpattern = string.topattern(pattern) local preprocessors = utilities.parsers.settings_to_array(preprocessor) treatments[noftreatments] = { pattern = findpattern, preprocessors = preprocessors, } report_prepfiles("step %s, pattern %a, preprocessor: %a",noftreatments,findpattern,preprocessors) end end end local function needstreatment(oldfile) for i=1,#treatments do local treatment = treatments[i] local pattern = treatment.pattern if find(oldfile,pattern) then return treatment end end end local preparefile = #treatments > 0 and function(prepfiles,filename) local treatment = needstreatment(filename) local oldfile = filename local newfile = false if treatment then local preprocessors = treatment.preprocessors local runners = { } for i=1,#preprocessors do local preprocessor = preprocessors[i] local command = commands[preprocessor] if command then local runner = command.runner local suffix = command.suffix local result = filename .. "." .. suffix if runlocal then result = file.basename(result) end variables.old = oldfile variables.new = result runner = utilities.templates.replace(runner,variables) if runner and runner ~= "" then runners[#runners+1] = runner oldfile = result if runlocal then oldfile = file.basename(oldfile) end newfile = oldfile end end end if not newfile then newfile = filename elseif file.needsupdating(filename,newfile) then for i=1,#runners do report_prepfiles("step %i: %s",i,runners[i]) end -- for i=1,#runners do local command = runners[i] report_prepfiles("command: %s",command) local result = os.spawn(command) or 0 -- if result > 0 then -- report_prepfiles("error, return code: %s",result) -- end end if lfs.isfile(newfile) then file.syncmtimes(filename,newfile) report_prepfiles("%a is converted to %a",filename,newfile) else report_prepfiles("%a is not converted to %a",filename,newfile) newfile = filename end elseif lfs.isfile(newfile) then report_prepfiles("%a is already converted to %a",filename,newfile) end else newfile = filename end prepfiles[filename] = newfile -- in case we ask twice (with the prepped name) ... todo: avoid this mess prepfiles[newfile] = newfile return newfile end table.setmetatableindex(ctxrunner.prepfiles,preparefile or dontpreparefile) -- we need to deal with the input filename as it has already be resolved end -- print("\n") -- document = { -- options = { -- ctxfile = { -- modes = { }, -- modules = { }, -- environments = { }, -- } -- } -- } -- environment.arguments.input = "test.tex" -- ctxrunner.load("x-ldx.ctx") local function resolve(name) -- used a few times later on return ctxrunner.prepfiles[file.collapsepath(name)] or false end local processfile = commands.processfile local doifinputfileelse = commands.doifinputfileelse function commands.processfile(name,maxreadlevel) -- overloaded local prepname = resolve(name) if prepname then return processfile(prepname,0) end return processfile(name,maxreadlevel) end function commands.doifinputfileelse(name,depth) local prepname = resolve(name) if prepname then return doifinputfileelse(prepname,0) end return doifinputfileelse(name,depth) end function commands.preparedfile(name) return resolve(name) or name end function commands.getctxfile() local ctxfile = document.arguments.ctx or "" if ctxfile ~= "" then ctxrunner.load(ctxfile) -- do we need to locate it? end end function ctxrunner.resolve(name) -- used a few times later on local collapsedname = file.collapsepath(name,".") return ctxrunner.prepfiles[collapsedname] or collapsedname end -- ctxrunner.load("t:/sources/core-ctx.ctx") -- context(ctxrunner.prepfiles["one-a.xml"]) context.par() -- context(ctxrunner.prepfiles["one-b.xml"]) context.par() -- context(ctxrunner.prepfiles["two-c.xml"]) context.par() -- context(ctxrunner.prepfiles["two-d.xml"]) context.par() -- context(ctxrunner.prepfiles["all-x.xml"]) context.par() -- inspect(ctxrunner.prepfiles) context-2013.05.28.20130704/texmf-dist/tex/context/base/scrp-ini.lua0000644000175000017500000005577412161703335024143 0ustar norbertnorbertif not modules then modules = { } end modules ['scrp-ini'] = { version = 1.001, comment = "companion to scrp-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We need to rewrite this a bit ... rather old code ... will be done when japanese -- is finished. local attributes, nodes, node = attributes, nodes, node local trace_analyzing = false trackers.register("scripts.analyzing", function(v) trace_analyzing = v end) local trace_injections = false trackers.register("scripts.injections", function(v) trace_injections = v end) local report_preprocessing = logs.reporter("scripts","preprocessing") local utfchar = utf.char local first_glyph = node.first_glyph or node.first_character local traverse_id = node.traverse_id local texsetattribute = tex.setattribute local nodecodes = nodes.nodecodes local unsetvalue = attributes.unsetvalue local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue local a_scriptinjection = attributes.private('scriptinjection') local a_scriptsplitting = attributes.private('scriptsplitting') local a_scriptstatus = attributes.private('scriptstatus') local fontdata = fonts.hashes.identifiers local allocate = utilities.storage.allocate local setnodecolor = nodes.tracers.colors.set local setmetatableindex = table.setmetatableindex local enableaction = nodes.tasks.enableaction local disableaction = nodes.tasks.disableaction scripts = scripts or { } local scripts = scripts scripts.hash = scripts.hash or { } local hash = scripts.hash local handlers = allocate() scripts.handlers = handlers local injectors = allocate() scripts.injectors = handlers local splitters = allocate() scripts.splitters = splitters local hash = { -- we could put these presets in char-def.lua -- -- half width opening parenthesis -- [0x0028] = "half_width_open", [0x005B] = "half_width_open", [0x007B] = "half_width_open", [0x2018] = "half_width_open", -- ‘ [0x201C] = "half_width_open", -- “ -- -- full width opening parenthesis -- [0x3008] = "full_width_open", -- 〈 Left book quote [0x300A] = "full_width_open", -- 《 Left double book quote [0x300C] = "full_width_open", -- 「 left quote [0x300E] = "full_width_open", -- 『 left double quote [0x3010] = "full_width_open", -- 【 left double book quote [0x3014] = "full_width_open", -- 〔 left book quote [0x3016] = "full_width_open", --〖 left double book quote [0x3018] = "full_width_open", -- left tortoise bracket [0x301A] = "full_width_open", -- left square bracket [0x301D] = "full_width_open", -- reverse double prime qm [0xFF08] = "full_width_open", -- ( left parenthesis [0xFF3B] = "full_width_open", -- [ left square brackets [0xFF5B] = "full_width_open", -- { left curve bracket -- -- half width closing parenthesis -- [0x0029] = "half_width_close", [0x005D] = "half_width_close", [0x007D] = "half_width_close", [0x2019] = "half_width_close", -- ’ right quote, right [0x201D] = "half_width_close", -- ” right double quote -- -- full width closing parenthesis -- [0x3009] = "full_width_close", -- 〉 book quote [0x300B] = "full_width_close", -- 》 double book quote [0x300D] = "full_width_close", -- 」 right quote, right [0x300F] = "full_width_close", -- 』 right double quote [0x3011] = "full_width_close", -- 】 right double book quote [0x3015] = "full_width_close", -- 〕 right book quote [0x3017] = "full_width_close", -- 〗 right double book quote [0x3019] = "full_width_close", -- right tortoise bracket [0x301B] = "full_width_close", -- right square bracket [0x301E] = "full_width_close", -- double prime qm [0x301F] = "full_width_close", -- low double prime qm [0xFF09] = "full_width_close", -- ) right parenthesis [0xFF3D] = "full_width_close", -- ] right square brackets [0xFF5D] = "full_width_close", -- } right curve brackets -- [0xFF62] = "half_width_open", -- left corner bracket [0xFF63] = "half_width_close", -- right corner bracket -- -- vertical opening vertical -- -- 0xFE35, 0xFE37, 0xFE39, 0xFE3B, 0xFE3D, 0xFE3F, 0xFE41, 0xFE43, 0xFE47, -- -- vertical closing -- -- 0xFE36, 0xFE38, 0xFE3A, 0xFE3C, 0xFE3E, 0xFE40, 0xFE42, 0xFE44, 0xFE48, -- -- half width opening punctuation -- -- -- -- full width opening punctuation -- -- 0x2236, -- ∶ -- 0xFF0C, -- , -- -- half width closing punctuation_hw -- [0x0021] = "half_width_close", -- ! [0x002C] = "half_width_close", -- , [0x002E] = "half_width_close", -- . [0x003A] = "half_width_close", -- : [0x003B] = "half_width_close", -- ; [0x003F] = "half_width_close", -- ? [0xFF61] = "half_width_close", -- hw full stop -- -- full width closing punctuation -- [0x3001] = "full_width_close", -- 、 [0x3002] = "full_width_close", -- 。 [0xFF0C] = "full_width_close", -- , [0xFF0E] = "full_width_close", -- -- -- depends on font -- [0xFF01] = "full_width_close", -- ! [0xFF1F] = "full_width_close", -- ? -- [0xFF1A] = "full_width_punct", -- : [0xFF1B] = "full_width_punct", -- ; -- -- non starter -- [0x3005] = "non_starter", [0x3041] = "non_starter", [0x3043] = "non_starter", [0x3045] = "non_starter", [0x3047] = "non_starter", [0x3049] = "non_starter", [0x3063] = "non_starter", [0x3083] = "non_starter", [0x3085] = "non_starter", [0x3087] = "non_starter", [0x308E] = "non_starter", [0x3095] = "non_starter", [0x3096] = "non_starter", [0x309B] = "non_starter", [0x309C] = "non_starter", [0x309D] = "non_starter", [0x309E] = "non_starter", [0x30A0] = "non_starter", [0x30A1] = "non_starter", [0x30A3] = "non_starter", [0x30A5] = "non_starter", [0x30A7] = "non_starter", [0x30A9] = "non_starter", [0x30C3] = "non_starter", [0x30E3] = "non_starter", [0x30E5] = "non_starter", [0x30E7] = "non_starter", [0x30EE] = "non_starter", [0x30F5] = "non_starter", [0x30F6] = "non_starter", [0x30FC] = "non_starter", [0x30FD] = "non_starter", [0x30FE] = "non_starter", [0x31F0] = "non_starter", [0x31F1] = "non_starter", [0x30F2] = "non_starter", [0x30F3] = "non_starter", [0x30F4] = "non_starter", [0x31F5] = "non_starter", [0x31F6] = "non_starter", [0x30F7] = "non_starter", [0x30F8] = "non_starter", [0x30F9] = "non_starter", [0x31FA] = "non_starter", [0x31FB] = "non_starter", [0x30FC] = "non_starter", [0x30FD] = "non_starter", [0x30FE] = "non_starter", [0x31FF] = "non_starter", -- -- hyphenation -- [0x2026] = "hyphen", -- … ellipsis [0x2014] = "hyphen", -- — hyphen -- [0x1361] = "ethiopic_word", [0x1362] = "ethiopic_sentence", -- } local function provide(t,k) local v if not tonumber(k) then v = false elseif (k >= 0x03040 and k <= 0x030FF) or (k >= 0x031F0 and k <= 0x031FF) or (k >= 0x032D0 and k <= 0x032FE) or (k >= 0x0FF00 and k <= 0x0FFEF) then v = "katakana" elseif (k >= 0x03400 and k <= 0x04DFF) or (k >= 0x04E00 and k <= 0x09FFF) or (k >= 0x0F900 and k <= 0x0FAFF) or (k >= 0x20000 and k <= 0x2A6DF) or (k >= 0x2F800 and k <= 0x2FA1F) then v = "chinese" elseif (k >= 0x0AC00 and k <= 0x0D7A3) then v = "korean" elseif (k >= 0x01100 and k <= 0x0115F) then v = "jamo_initial" elseif (k >= 0x01160 and k <= 0x011A7) then v = "jamo_medial" elseif (k >= 0x011A8 and k <= 0x011FF) then v = "jamo_final" elseif (k >= 0x01200 and k <= 0x0139F) then v = "ethiopic_syllable" else v = false end t[k] = v return v end setmetatableindex(hash,provide) scripts.hash = hash local numbertodataset = allocate() local numbertohandler = allocate() --~ storage.register("scripts/hash", hash, "scripts.hash") scripts.numbertodataset = numbertodataset scripts.numbertohandler = numbertohandler local defaults = { inter_char_shrink_factor = 0, inter_char_shrink_factor = 0, inter_char_stretch_factor = 0, inter_char_half_shrink_factor = 0, inter_char_half_stretch_factor = 0, inter_char_quarter_shrink_factor = 0, inter_char_quarter_stretch_factor = 0, inter_char_hangul_penalty = 0, inter_word_stretch_factor = 0, } scripts.defaults = defaults -- so we can add more function scripts.installmethod(handler) local name = handler.name handlers[name] = handler local attributes = { } local datasets = handler.datasets if not datasets or not datasets.default then report_preprocessing("missing (default) dataset in script %a",name) datasets.default = { } -- slower but an error anyway end for k, v in next, datasets do setmetatableindex(v,defaults) end setmetatable(attributes, { __index = function(t,k) local v = datasets[k] or datasets.default local a = unsetvalue if v then v.name = name -- for tracing a = #numbertodataset + 1 numbertodataset[a] = v numbertohandler[a] = handler end t[k] = a return a end } ) handler.attributes = attributes end function scripts.installdataset(specification) -- global overload local method = specification.method local name = specification.name local dataset = specification.dataset if method and name and dataset then local parent = specification.parent or "" local handler = handlers[method] if handler then local datasets = handler.datasets if datasets then local defaultset = datasets.default if defaultset then if parent ~= "" then local p = datasets[parent] if p then defaultset = p else report_preprocessing("dataset, unknown parent %a for method %a",parent,method) end end setmetatable(dataset,defaultset) local existing = datasets[name] if existing then for k, v in next, existing do existing[k] = dataset end else datasets[name] = dataset end else report_preprocessing("dataset, no default for method %a",method) end else report_preprocessing("dataset, no datasets for method %a",method) end else report_preprocessing("dataset, no method %a",method) end else report_preprocessing("dataset, invalid specification") -- maybe report table end end local injectorenabled = false local splitterenabled = false function scripts.set(name,method,preset) local handler = handlers[method] if handler then if handler.injector then if not injectorenabled then enableaction("processors","scripts.injectors.handler") injectorenabled = true end texsetattribute(a_scriptinjection,handler.attributes[preset] or unsetvalue) end if handler.splitter then if not splitterenabled then enableaction("processors","scripts.splitters.handler") splitterenabled = true end texsetattribute(a_scriptsplitting,handler.attributes[preset] or unsetvalue) end if handler.initializer then handler.initializer(handler) handler.initializer = nil end else texsetattribute(a_scriptinjection,unsetvalue) texsetattribute(a_scriptsplitting,unsetvalue) end end function scripts.reset() texsetattribute(a_scriptinjection,unsetvalue) texsetattribute(a_scriptsplitting,unsetvalue) end -- the following tables will become a proper installer (move to cjk/eth) -- -- 0=gray 1=red 2=green 3=blue 4=yellow 5=magenta 6=cyan 7=x-yellow 8=x-magenta 9=x-cyan local scriptcolors = allocate { -- todo: just named colors korean = "trace:0", chinese = "trace:0", katakana = "trace:0", hiragana = "trace:0", full_width_open = "trace:1", full_width_close = "trace:2", half_width_open = "trace:3", half_width_close = "trace:4", full_width_punct = "trace:5", hyphen = "trace:5", non_starter = "trace:6", jamo_initial = "trace:7", jamo_medial = "trace:8", jamo_final = "trace:9", ethiopic_syllable = "trace:1", ethiopic_word = "trace:2", ethiopic_sentence = "trace:3", } scripts.colors = scriptcolors local numbertocategory = allocate { -- rather bound to cjk ... will be generalized "korean", "chinese", "katakana", "hiragana", "full_width_open", "full_width_close", "half_width_open", "half_width_close", "full_width_punct", "hyphen", "non_starter", "jamo_initial", "jamo_medial", "jamo_final", "ethiopic_syllable", "ethiopic_word", "ethiopic_sentence", } local categorytonumber = allocate(table.swapped(numbertocategory)) -- could be one table scripts.categorytonumber = categorytonumber scripts.numbertocategory = numbertocategory local function colorize(start,stop) for n in traverse_id(glyph_code,start) do local kind = numbertocategory[n[a_scriptstatus]] if kind then local ac = scriptcolors[kind] if ac then setnodecolor(n,ac) end end if n == stop then break end end end local function traced_process(head,first,last,process,a) if start ~= last then local f, l = first, last local name = numbertodataset[a] name = name and name.name or "?" report_preprocessing("before %s: %s",name,nodes.tosequence(f,l)) process(head,first,last) report_preprocessing("after %s: %s", name,nodes.tosequence(f,l)) end end -- eventually we might end up with more extensive parsing -- todo: pass t[start..stop] == original -- -- one of the time consuming functions: -- we can have a fonts.hashes.originals function scripts.injectors.handler(head) local start = first_glyph(head) -- we already have glyphs here (subtype 1) if not start then return head, false else local last_a, normal_process, lastfont, originals = nil, nil, nil, nil local done, first, last, ok = false, nil, nil, false while start do local id = start.id if id == glyph_code then local a = start[a_scriptinjection] if a then if a ~= last_a then if first then if ok then if trace_analyzing then colorize(first,last) end if trace_injections then traced_process(head,first,last,normal_process,last_a) else normal_process(head,first,last) end ok, done = false, true end first, last = nil, nil end last_a = a local handler = numbertohandler[a] normal_process = handler.injector end if normal_process then local f = start.font if f ~= lastfont then originals = fontdata[f].resources if resources then originals = resources.originals else -- can't happen end lastfont = f end local c = start.char if originals then c = originals[c] or c end local h = hash[c] if h then start[a_scriptstatus] = categorytonumber[h] if not first then first, last = start, start else last = start end -- if cjk == "chinese" or cjk == "korean" then -- we need to prevent too much ( ) processing ok = true -- end elseif first then if ok then if trace_analyzing then colorize(first,last) end if trace_injections then traced_process(head,first,last,normal_process,last_a) else normal_process(head,first,last) end ok, done = false, true end first, last = nil, nil end end elseif first then if ok then if trace_analyzing then colorize(first,last) end if trace_injections then traced_process(head,first,last,normal_process,last_a) else normal_process(head,first,last) end ok, done = false, true end first, last = nil, nil end elseif id == glue_code then if ok then -- continue elseif first then -- no chinese or korean first, last = nil, nil end elseif first then if ok then -- some chinese or korean if trace_analyzing then colorize(first,last) end if trace_injections then traced_process(head,first,last,normal_process,last_a) else normal_process(head,first,last) end first, last, ok, done = nil, nil, false, true elseif first then first, last = nil, nil end end start = start.next end if ok then if trace_analyzing then colorize(first,last) end if trace_injections then traced_process(head,first,last,normal_process,last_a) else normal_process(head,first,last) end done = true end return head, done end end function scripts.splitters.handler(head) return head, false end -- new plugin: local registercontext = fonts.specifiers.registercontext local mergecontext = fonts.specifiers.mergecontext local otfscripts = characters.otfscripts local report_scripts = logs.reporter("scripts","auto feature") local trace_scripts = false trackers.register("scripts.autofeature",function(v) trace_scripts = v end) local autofontfeature = scripts.autofontfeature or { } scripts.autofontfeature = autofontfeature local cache_yes = { } local cache_nop = { } setmetatableindex(cache_yes,function(t,k) local v = { } t[k] = v return v end) setmetatableindex(cache_nop,function(t,k) local v = { } t[k] = v return v end) -- beware: we need to tag a done (otherwise too many extra instances ... but how -- often unpack? wait till we have a bitmap -- -- we can consider merging this in handlers.characters(head) at some point as there -- already check for the dynamic attribute so it saves a pass, however, then we also -- need to check for a_scriptinjection there which nils the benefit -- -- we can consider cheating: set all glyphs in a word as the first one but it's not -- playing nice function autofontfeature.handler(head) for n in traverse_id(glyph_code,head) do -- if n[a_scriptinjection] then -- -- already tagged by script feature, maybe some day adapt -- else local char = n.char local script = otfscripts[char] if script then local dynamic = n[0] or 0 local font = n.font if dynamic > 0 then local slot = cache_yes[font] local attr = slot[script] if not attr then attr = mergecontext(dynamic,name,2) slot[script] = attr if trace_scripts then report_scripts("script: %s, trigger %C, dynamic: %a, variant: %a",script,char,attr,"extended") end end if attr ~= 0 then n[0] = attr -- maybe set scriptinjection when associated end else local slot = cache_nop[font] local attr = slot[script] if not attr then attr = registercontext(font,script,2) slot[script] = attr if trace_scripts then report_scripts("script: %s, trigger %C, dynamic: %s, variant: %a",script,char,attr,"normal") end end if attr ~= 0 then n[0] = attr -- maybe set scriptinjection when associated end end end -- end end return head end function autofontfeature.enable() report_scripts("globally enabled") enableaction("processors","scripts.autofontfeature.handler") end function autofontfeature.disable() report_scripts("globally disabled") disableaction("processors","scripts.autofontfeature.handler") end commands.enableautofontscript = autofontfeature.enable commands.disableautofontscript = autofontfeature.disable context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-xet.mkii0000644000175000017500000000445611244221744024306 0ustar norbertnorbert%D \module %D [ file=spec-xtx, %D version=2004.11.08, %D title=\CONTEXT\ Special Macros, %D subtitle=\XETEX\ support, %D author={Adam Lindsay \& Hans Hagen \& \unknown}, %D date=\currentdate, %D copyright={Adam Lindsay \& Hans Hagen}] \unprotect \definespecial\doinsertfile {\dofileinsertion{xtx}\@@DriverImageType} \definefileinsertion{xtx}{jpg}{\xtxhandleotherimage} \definefileinsertion{xtx}{png}{\xtxhandleotherimage} \definefileinsertion{xtx}{gif}{\xtxhandleotherimage} \definefileinsertion{xtx}{tif}{\xtxhandleotherimage} \definefileinsertion{xtx}{pdf}{\xtxhandlepdfimage } \def\checkpdfimagepagenumber {\edef\pdfimagepagenumber {\ifx\@@DriverImagePage\empty\else\ifnum\@@DriverImagePage>\zerocount \space page\space\@@DriverImagePage\space \fi\fi}} \def\xtxhandleotherimage {\XeTeXpicfile "\@@DriverImageFile" \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \space\fi \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight \fi \relax} \def\xtxhandlepdfimage {\checkpdfimagepagenumber \XeTeXpdffile "\@@DriverImageFile" \pdfimagepagenumber \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \space\fi \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight \fi \relax} \def\dogetXTXfiguresize {\setbox\foundexternalfigure\vbox{\XeTeXpicfile "\@@DriverImageFile"\relax}% \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}% \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}} \def\dogetXTXpdfsize {\checkpdfimagepagenumber \setbox\foundexternalfigure\vbox{\XeTeXpdffile "\@@DriverImageFile" \pdfimagepagenumber\relax}% \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}% \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}} \definefilechecker{xtx}{png}{\dogetXTXfiguresize} \definefilechecker{xtx}{jpg}{\dogetXTXfiguresize} \definefilechecker{xtx}{gif}{\dogetXTXfiguresize} \definefilechecker{xtx}{tif}{\dogetXTXfiguresize} \definefilechecker{xtx}{pdf}{\dogetXTXpdfsize } \definespecial\dogetfiguresize {\dofilechecker{xtx}\@@DriverImageType} %D The figure object system caused no end of headaches. They all %D went away with this single line: \setupexternalfigures[\c!object=\v!no] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-uti.mkiv0000644000175000017500000000200412130411274024277 0ustar norbertnorbert%D \module %D [ file=core-uti, %D version=1997.03.31, % 2006.09.19 mkiv %D title=\CONTEXT\ Core Macros, %D subtitle=Utility File Handling, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Utility File Handling} \unprotect \registerctxluafile{core-uti}{1.001} \def\savecurrentvalue#1#2% immediate, so not \unexpanded {\ctxlua{job.variables.save("\strippedcsname#1","#2")}} \appendtoks \ctxlua { job.comment("file","\jobname") job.comment("format","\contextformat") job.comment("stamp","\contextversion") job.comment("escape","\!!bs\space...\space\!!es") }% \to \everystarttext \appendtoks \ctxlua { job.initialize("\jobname.tuc","\jobname.tua") }% \to \everyjob \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-set-12.mkiv0000644000175000017500000002041211754241457024052 0ustar norbertnorbert%D \module %D [ file=x-set-12, %D version=2004.10.31, %D remark=setupx.tex: 1998.07.20 and later, %D title=\CONTEXT\ Setup Definitions, %D subtitle=Macro Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[set-11] \unprotect % \starttext % \setup{installlanguage} % \placesetup % \stoptext \definecolor[TitleColor][r=.375,g=.125,b=.125] \definecolor[TitleColor][r=.125,g=.375,b=.125] \definecolor[TitleColor][r=.125,g=.125,b=.375] \definecolor[TitleColor][r=.375,g=.375,b=.125] \definecolor[TitleColor][r=.375,g=.125,b=.375] \definecolor[TitleColor][r=.125,g=.375,b=.375] \definecolor[TitleColor][r=.25,g=.20,b=.15] \definecolor[TitleColor][r=.25,g=.15,b=.20] \definecolor[TitleColor][r=.20,g=.15,b=.25] \definecolor[TitleColor][r=.20,g=.25,b=.15] \definecolor[TitleColor][r=.15,g=.20,b=.25] \definecolor[TitleColor][r=.15,g=.25,b=.20] \startinterface english \loadsetups[cont-en.xml] \stopinterface \startinterface dutch \loadsetups[cont-nl.xml] \stopinterface \startinterface german \loadsetups[cont-de.xml] \stopinterface \startinterface french \loadsetups[cont-fr.xml] \stopinterface \startinterface italian \loadsetups[cont-it.xml] \stopinterface \startinterface czech \loadsetups[cont-cs.xml] \stopinterface \startinterface romanian \loadsetups[cont-ro.xml] \stopinterface \startinterface dutch \definecolor[LocalColor][r=.75,g=.25,b=.25] \stopinterface \startinterface english \definecolor[LocalColor][r=.25,g=.75,b=.25] \stopinterface \startinterface german \definecolor[LocalColor][r=.25,g=.25,b=.75] \stopinterface \startinterface french \definecolor[LocalColor][r=.75,g=.75,b=.25] \stopinterface \startinterface czech \definecolor[LocalColor][r=.75,g=.25,b=.75] \stopinterface \startinterface italian \definecolor[LocalColor][r=.25,g=.75,b=.75] \stopinterface \startinterface romanian \definecolor[LocalColor][r=.5,g=.4,b=.3] \stopinterface % \definecolor[LocalColor][r=.5,g=.3,b=.4] % \definecolor[LocalColor][r=.4,g=.3,b=.5] % \definecolor[LocalColor][r=.4,g=.5,b=.3] % \definecolor[LocalColor][r=.3,g=.4,b=.5] % \definecolor[LocalColor][r=.3,g=.5,b=.4] \startinterface english \definecolor[TitleColor][r=.375,g=.125,b=.125] \stopinterface \startinterface dutch \definecolor[TitleColor][r=.125,g=.375,b=.125] \stopinterface \startinterface german \definecolor[TitleColor][r=.125,g=.125,b=.375] \stopinterface \startinterface french \definecolor[TitleColor][r=.375,g=.375,b=.125] \stopinterface \startinterface italian \definecolor[TitleColor][r=.375,g=.125,b=.375] \stopinterface \startinterface czech \definecolor[TitleColor][r=.125,g=.375,b=.375] \stopinterface \startinterface romanian \definecolor[TitleColor][r=.25,g=.20,b=.15] \stopinterface % \definecolor[TitleColor][r=.25,g=.15,b=.20] % \definecolor[TitleColor][r=.20,g=.15,b=.25] % \definecolor[TitleColor][r=.20,g=.25,b=.15] % \definecolor[TitleColor][r=.15,g=.20,b=.25] % \definecolor[TitleColor][r=.15,g=.25,b=.20] \definecolor [lightgray] [s=.9] \definecolor [darkgray] [s=.1] \usetypescript[palatino] \setupbodyfont[palatino,9pt] \defineoverlay [cover] [\hbox to \paperwidth{\hss\reuseMPgraphic{cover+back}}] \defineoverlay [back] [\hbox to \paperwidth{\reuseMPgraphic{cover+back}\hss}] \startreusableMPgraphic{cover+back} numeric h, w ; path p, q, r ; color f, d ; pair s ; h := OverlayHeight ; w := 2*OverlayWidth ; r := unitsquare xyscaled (w,h) ; fill r withcolor \MPcolor{lightgray} ; set_grid(w,h,w/8,w/16) ; forever : s := center r randomized (w,h) ; if new_on_grid(xpart s, ypart s) : s := (dx,dy) ; p := fullsquare xyscaled(w/4,w/8) ; q := (-4w,ypart ulcorner p) -- .5[ulcorner p, urcorner p] -- (4w,ypart urcorner p) ; q := q shifted (0,-w/24) ; p := p randomized (w/40,w/40) ; q := q randomized (0,w/100) ; q := q cutafter (p cutafter point 3 of p) ; q := q cutbefore (p cutbefore point 3 of p) ; d := .5[\MPcolor{LocalColor},\MPcolor{lightgray}] randomized (.5,.9) ; f := \MPcolor{lightgray} randomized (.5,.9) ; pickup pencircle scaled (w/100) ; fill p shifted s withcolor f ; draw p shifted s withcolor d ; draw q shifted s withcolor d ; fi ; exitif grid_full ; endfor ; setbounds currentpicture to r ; \stopreusableMPgraphic \definelayout [titlepage] [\c!backspace=1cm, \c!topspace=1cm, \c!width=\v!middle, \c!height=\v!middle, \c!header=0pt, \c!footer=0pt] \setuplayout [\c!backspace=2cm, \c!topspace=1.5cm, \c!header=0cm, \c!footer=0cm, \c!width=\v!middle, \c!height=\v!middle] \setuppagenumbering [\c!alternative=\v!doublesided] \setupsetup [\c!criterium=\v!all, \c!reference=0] \setupframedtexts [setuptext] [\c!before=\blank, \c!after=\blank, \c!frame=\v!on, \c!rulethickness=1pt, \c!framecolor=TitleColor] \setupunderbar [\c!rulethickness=1pt, \c!rulecolor=TitleColor] \starttext \setupbackgrounds [\v!rightpage] [\c!background=cover] \setuplayout [titlepage] \startsetups text:commands \startinterface dutch \strut commando's \par \stopinterface \startinterface english \strut commands \par \stopinterface \startinterface german \strut befehle \par \stopinterface \startinterface french \strut commandes \par \stopinterface \startinterface czech \strut p\v{r}ikazy \par \stopinterface \startinterface italian \strut comandi \par \stopinterface \startinterface romanian \strut comenzile \par \stopinterface \stopsetups \startsetups text:uppercase \startinterface dutch NL\stopinterface \startinterface english EN\stopinterface \startinterface german DE\stopinterface \startinterface french FR\stopinterface \startinterface czech CS\stopinterface \startinterface italian IT\stopinterface \startinterface romanian RO\stopinterface \stopsetups \startsetups text:lowercase \startinterface dutch \strut nl / nederlands \par \stopinterface \startinterface english \strut en / english \par \stopinterface \startinterface german \strut de / deutsch \par \stopinterface \startinterface french \strut fr / fran\c{c}ais \par \stopinterface \startinterface czech \strut cs / \v{c}esk\'y \par \stopinterface \startinterface italian \strut it / italiano \par \stopinterface \startinterface romanian \strut ro / rom\^{a}n\u{a} \par \stopinterface \stopsetups \startmakeup[\v!standard] \dontcomplain \setupalign[\v!left] \startcolor[TitleColor] \definedfont[RegularBold at 100pt]\setstrut \strut Con\TeX t \par \definedfont[RegularBold at 50pt]\setstrut \setups[text:commands] \vfill \definedfont[RegularBold at 150pt]\setstrut \setups[text:uppercase] \stopcolor \stopmakeup \setuplayout % needed ? \setupbackgrounds [\v!rightpage] [\c!background=] \startmakeup[\v!standard] \dontcomplain \startcolor[TitleColor] \definedfont[RegularBold at 100pt]\setstrut \setupalign[\v!left] \strut Con\TeX t \par \definedfont[RegularBold at 50pt]\setstrut \setups[text:commands] \vfill \definedfont[RegularBold at 24pt]\setupinterlinespace \setups[text:lowercase] \par \strut \currentdate \par \stopcolor \stopmakeup \protect \placeeverysetup \unprotect \page[\v!yes,\v!blank,\v!right,\v!left] \setuplayout [titlepage] \setupbackgrounds [\v!leftpage] [\c!background=back] \startmakeup[\v!standard][\c!page=] \dontcomplain \startcolor[TitleColor] \definedfont[RegularBold at 24pt]\setupinterlinespace \setupalign[\v!left] \vfill PRAGMA ADE \par Ridderstraat 27 \par 8061GH Hasselt NL \par www.pragma-ade.com \par \stopcolor \stopmakeup \protect \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-txt.lua0000644000175000017500000012571512130411274024140 0ustar norbertnorbertif not modules then modules = { } end modules ['lang-txt'] = { version = 1.001, comment = "companion to lang-lab.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", dataonly = true, } -- The content of this file is derived from the mkii lang-* files and -- early 2011 the mkii labels are generated from this file. The -- translations have been collected over years by users, using named -- glyphs. This file uses utf exclusively. -- -- Many of the initial translations were done by Tobias Burnus but -- completed by numerous users. The following list is incomplete so feel -- free to send me corrections. -- -- af Afrikaans ... -- ar Arabic Idris Samawi Hamid, Khaled Hosny -- ca Catalan ... -- cn Chinese Wang Lei, ... -- cs Czech Tom Hudec, Petr Sojka, Richard Gabriel -- da Danish Arne Jorgensen -- de German Tobias Burnus, ... -- en English Hans Hagen, ... -- es Spanish Andrés Montoya, ... -- fi Finish ... -- fr French Daniel Flipo, Arthur Reutenauer -- gr Greek Apostolos Syropoulos, Thomas Schmitz -- hr Croatian Željko Vrba, Richard Gabriel, Vedran Miletić -- hu Hungarian Adam Reviczky -- it Italian Giuseppe Bilotta, Luigi Scarso -- ja Japanese Richard Gabriel -- kr Korean Jeong Dalyoung -- la Latin ... -- lt Lithuanian Marius Aleknevičius -- nb Norwegian Hans Fredrik Nordhaug, ... -- nn Norwegian Hans Fredrik Nordhaug, ... -- nl Dutch Hans Hagen -- pl Polish Grzegorz Sapijaszko -- pt Portuguese Pedro F. M. Mendonça -- ro Romanian Dan Seracu, ... -- ru Russian Olga Briginets, Alexander Bokovoy, Victor Figurnov, ... -- sk Slovak ... -- sl Slovenian Mojca Miklavec -- sv Swedish ... -- tk Turkish Tobias Burnus -- tr Turkmen Nazar Annagurban -- ua Ukrainian Olga Briginets, Alexander Bokovoy, Victor Figurnov, ... -- vi Vietnamese Han The Thanh -- For the moment we keep this table in memory. In the future we can then -- enable labels. -- thinspace == sixperemspace = 0x2006 -- print("!"..utf.char(0x2006).."!") languages = languages or { } local languages = languages languages.data = languages.data or utilities.storage.allocate { } local data = languages.data data.labels={ functions={ Pr={ labels={ cz="P", en="Pr", sk="P", }, }, arccos={ labels={ cz="arccos", en="arccos", es="arc\\sixperemspace cos", hr="arc\\sixperemspace cos", pl="arc\\sixperemspace cos", sk="arccos", }, }, arcctg={ labels={ cz="arccotg", en="arccot", es="arc\\sixperemspace cot", hr="arc\\sixperemspace ctg", pl="arc\\sixperemspace ctg", sk="arccotg", }, }, arcsin={ labels={ cz="arcsin", en="arcsin", es="arc\\sixperemspace sen", hr="arc\\sixperemspace sin", pl="arc\\sixperemspace sin", sk="arcsin", }, }, arctan={ labels={ cz="arctg", en="arctan", es="arc\\sixperemspace tan", hr="arc\\sixperemspace tg", pl="arc\\sixperemspace tg", sk="arctg", }, }, arctg={ labels={ cz="arctg", en="arctan", es="arc\\sixperemspace tan", hr="arc\\sixperemspace tg", pl="arc\\sixperemspace tg", sk="arctg", }, }, arg={ labels={ cz="arg", en="arg", es="arg", sk="arg", }, }, cos={ labels={ cz="cos", en="cos", es="cos", sk="cos", }, }, cosh={ labels={ cz="cosh", en="cosh", es="cosh", sk="cosh", }, }, cot={ labels={ cz="cotg", en="cot", es="cot", hr="ctg", pl="ctg", sk="cotg", }, }, coth={ labels={ cz="cotgh", en="coth", es="coth", sk="cotgh", }, }, csc={ labels={ cz="cosec", en="csc", es="csc", sk="cosec", }, }, ctg={ labels={ cz="cotg", en="cot", es="cot", hr="ctg", pl="ctg", sk="cotg", }, }, deg={ labels={ cz="deg", en="deg", es="gr", sk="deg", }, }, det={ labels={ cz="det", en="det", es="det", sk="det", }, }, dim={ labels={ cz="dim", en="dim", es="dim", sk="dim", }, }, exp={ labels={ cz="exp", en="exp", es="exp", sk="exp", }, }, gcd={ labels={ cz="NSD", en="gcd", es="mcd", hr="nzd", nl="ggd", sk="NSD", }, }, hom={ labels={ cz="Hom", en="hom", es="hom", sk="Hom", }, }, inf={ labels={ cz="inf", en="inf", es="inf", sk="inf", }, }, injlim={ labels={ cz="inj\\sixperemspace lim", en="inj\\sixperemspace lim", es="lím\\sixperemspace iny", sk="inj\\sixperemspace lim", }, }, ker={ labels={ cz="ker", en="ker", es="Ker", sk="ker", }, }, lcm={ labels={ cz="NSN", en="lcm", es="MCM", hr="nzv", nl="kgv", sk="NSN", }, }, lg={ labels={ cz="log", en="lg", es="log", sk="log", }, }, lim={ labels={ cz="lim", en="lim", es="lím", sk="lim", }, }, liminf={ labels={ cz="lim\\sixperemspace inf", en="lim\\sixperemspace inf", es="lím\\sixperemspace inf", sk="lim\\sixperemspace inf", }, }, limsup={ labels={ cz="lim\\sixperemspace sup", en="lim\\sixperemspace sup", es="lím\\sixperemspace sup", sk="lim\\sixperemspace sup", }, }, ln={ labels={ cz="ln", en="ln", es="ln", sk="ln", }, }, log={ labels={ cz="log", en="log", es="log", sk="log", }, }, max={ labels={ cz="max", en="max", es="máx", sk="max", }, }, median={ labels={ cz="\\tilde", en="median", es="Mediana", sk="\\tilde", }, }, min={ labels={ cz="min", en="min", es="mín", sk="min", }, }, mod={ labels={ cz="mod", en="mod", es="mod", sk="mod", }, }, projlim={ labels={ cz="proj\\sixperemspace lim", en="proj\\sixperemspace lim", es="lím\\sixperemspace proy", sk="proj\\sixperemspace lim", }, }, sec={ labels={ cz="sec", en="sec", es="sec", sk="sec", }, }, sin={ labels={ cz="sin", en="sin", es="sen", sk="sin", }, }, sinh={ labels={ cz="sinh", en="sinh", es="senh", sk="sinh", }, }, sup={ labels={ cz="sup", en="sup", es="sup", sk="sup", }, }, tan={ labels={ cz="tg", en="tan", es="tan", hr="tg", pl="tg", sk="tg", }, }, tanh={ labels={ cz="tgh", en="tanh", es="tanh", sk="tgh", }, }, tg={ labels={ cz="tg", en="tan", es="tan", hr="tg", pl="tg", sk="tg", }, }, }, texts={ ["and"]={ labels={ af="", ca="", cs="a", da="", de="und", en="and", es="y", fi="", fr="", gr="", hr="i", hu="és", it="", la="", lt="", nb="", nl="en", nn="", pl="i", pt="", ro="", ru="", sk="a", sl="", sv="", tk="", tr="", ua="", vi="", }, }, appendix={ hidden=true, labels={ af="Bylae ", ar="ملحق ", ca="Apèndix ", cn="附录", cs="Příloha ", da="Bilag ", de="Anhang ", en="Appendix ", es="Apéndice ", fi="", fr="Annexe ", gr="Παράρτημα", hr="Dodatak ", hu="Melléklet ", it="", ja="付録", kr="부록", la="", lt="", nb="Tillegg ", nl="", nn="Tillegg ", pl="Dodatek ", pt="", ro="", ru="", sk="Príloha ", sl="Dodatek ", sv="", tk="Goşmaça", tr="", ua="", vi="", }, }, april={ labels={ af="april", ar="أبريل", ["ar-dz"]="أفريل", ["ar-sy"]="نيسان", ca="abril", cn="四月", cs="dubna", da="april", de="April", en="April", es="abril", fi="huhtikuu", fr="avril", gr="Απρίλιος", hr="travnja", hu="április", it="aprile", ja="4", kr="4월", la="Aprilis", lt="balandžio", nb="april", nl="april", nn="april", pl="kwietnia", pt="abril", ro="aprilie", ru="апреля", sk="apríla", sl="april", sv="april", tk="aprel", tr="nisan", ua="квітня", vi="tháng tư", }, }, ["april:mnem"]={ labels={ af="", ca="", cs="dub.", da="", de="", en="apr", es="abr.", fi="", fr="", gr="", hr="tra", hu="ápr.", it="", la="", lt="apr", nb="april", nl="", nn="april", pl="kwi.", pt="", ro="", ru="", sk="apr.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, atpage={ labels={ af="", ar="في صفحة ", ca="", cs="na straně ", da="på side ", de="auf Seite ", en="at page ", es="en la página ", fi="", fr="à la page ", gr="", hr="na stranici ", hu="oldal ", it="a pagina ", la="", lt="puslapyje ", nb="på side ", nl="op pagina ", nn="på side ", pl="na stronie ", pt="", ro="", ru="на странице ", sk="na strane ", sl="na strani ", sv="på sida ", tk="", tr="", ua="на сторінці ", vi="", }, }, august={ labels={ af="augustus", ar="أغسطس", ["ar-dz"]="أوت", ["ar-ma"]="غشت", ["ar-sy"]="آب", ca="agost", cn="八月", cs="srpna", da="august", de="August", en="August", es="agosto", fi="elokuu", fr="août", gr="Αύγουστος", hr="kolovoza", hu="augusztus", it="agosto", ja="8", kr="8월", la="Augustus", lt="rugpjūčio", nb="august", nl="augustus", nn="august", pl="sierpnia", pt="agosto", ro="august", ru="августа", sk="augusta", sl="avgust", sv="augusti", tk="awgust", tr="ağustos", ua="серпня", vi="tháng tám", }, }, ["august:mnem"]={ labels={ af="", ca="", cs="srp.", da="", de="", en="aug", es="ago.", fi="", fr="", gr="", hr="kol", hu="aug.", it="", la="", lt="aug", nb="aug.", nl="", nn="aug.", pl="sier.", pt="", ro="", ru="", sk="aug.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, chapter={ hidden=true, labels={ af="Hoofstuk ", ar="باب ", ca="Capítol ", cn={"第","章"}, cs="Kapitola ", da="", de="Kapitel ", en="Chapter ", es="Capítulo ", fi="", fr="Chapitre ", gr="Κεφάλαιο", hr="Poglavlje ", hu=",. fejezet:", it="", ja={"第","章"}, kr={"제","장"}, la="", lt="", nb="", nl="", nn="", pl="Rozdział ", pt="", ro="", ru="", sk="Kapitola ", sl="Poglavje ", sv="", tk="Bap", tr="", ua="", vi="Chương ", }, }, continued={ labels={ af="", ca="", cs=" (pokračování)", da="", de="", en=" (continued)", es=" (continúa)", fi="", fr="", gr="", hr=" (nastavak)", hu=" (folytatás)", it="", la="", lt="", nb="", nl=" (vervolgd)", nn="", pl="", pt="", ro="", ru="", sk=" (pokračovanie)", sl="", sv="", tk="", tr="", ua="", vi="", }, }, december={ labels={ af="desember", ar="ديسمبر", ["ar-ma"]="دجنبر", ["ar-sy"]="كانون الأول", ca="desembre", cn="十二月", cs="prosince", da="december", de="Dezember", en="December", es="diciembre", fi="joulukuu", fr="décembre", gr="Δεκέμβριος", hr="prosinca", hu="december", it="dicembre", ja="12", kr="12월", la="December", lt="gruodžio", nb="desember", nl="december", nn="desember", pl="grudnia", pt="dezembro", ro="decembrie", ru="декабря", sk="decembra", sl="december", sv="december", tk="dekabr", tr="aralık", ua="грудня", vi="tháng mười hai", }, }, ["december:mnem"]={ labels={ af="", ca="", cs="pros.", da="", de="", en="dec", es="dic.", fi="", fr="", gr="", hr="pro", hu="dec.", it="", la="", lt="dec", nb="des.", nl="", nn="des.", pl="gru.", pt="", ro="", ru="", sk="dec.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, february={ labels={ af="februarie", ar="فبراير", ["ar-dz"]="فيفري", ["ar-sy"]="شباط", ca="febrer", cn="二月", cs="února", da="februar", de="Februar", en="February", es="febrero", fi="helmikuu", fr="février", gr="Φεβρουάριος", hr="veljače", hu="február", it="febbraio", ja="2", kr="2월", la="Februarius", lt="vasario", nb="februar", nl="februari", nn="februar", pl="lutego", pt="fevereiro", ro="februarie", ru="февраля", sk="februára", sl="februar", sv="februari", tk="fewral", tr="Şubat", ua="лютого", vi="tháng hai", }, }, ["february:mnem"]={ labels={ af="", ca="", cs="ún.", da="", de="", en="feb", es="feb.", fi="", fr="", gr="", hr="velj", hu="feb.", it="", la="", lt="feb", nb="feb.", nl="", nn="feb.", pl="lut.", pt="", ro="", ru="", sk="feb.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, figure={ labels={ af="Figuur ", ar="شكل ", ca="Figura ", cn="图", cs="Obrázek ", da="Figur ", de="Abbildung ", en="Figure ", es="Figura ", fi="Kuva ", fr="Figure ", gr="Σχήμα", hr="Slika ", hu=",. ábra:", it="Fig. ", ja="図", kr="그림", la="Imago ", lt=", pav.", nb="Figur ", nl="Figuur ", nn="Figur ", pl="Ilustracja ", pt="Figura ", ro="Figura ", ru="Рисунок ", sk="Obrázok ", sl="Slika ", sv="Figur ", tk="Surat", tr="Şekil ", ua="Малюнок ", vi="Hình ", }, }, friday={ labels={ af="vrydag", ar="الجمعة", ca="divendres", cn="星期五", cs="pátek", da="fredag", de="Freitag", en="Friday", es="viernes", fi="perjantai", fr="vendredi", gr="Παρασκευή", hr="petak", hu="péntek", it="venerdì", ja="金曜日", kr="금요일", la="Dies Veneris", lt="penktadienis", nb="fredag", nl="vrijdag", nn="fredag", pl="piątek", pt="sexta-feira", ro="vineri", ru="пятница", sk="piatok", sl="petek", sv="fredag", tk="bäşinji gün", tr="cuma", ua="п'ятниця", vi="thứ sáu", }, }, graphic={ labels={ af="Grafiek ", ar="رسم ", ca="Gràfica ", cn="插图", cs="Graf ", da="Grafik ", de="Graphik ", en="Graphic ", es="Gráfico ", fi="Grafiikka ", fr="Illustration ", gr="Γραφικό", hr="Slika ", hu=",. kép:", it="Grafico ", ja="イラスト", la="Typus ", lt="Graphic ", nb="Bilde ", nl="Grafiek ", nn="Bilete ", pl="Grafika ", pt="Gráfico ", ro="Graficul ", ru="График ", sk="Graf ", sl="Slika ", sv="Grafik ", tk="Grafik", tr="Grafik", ua="График ", vi="Đồ thị", }, }, hencefore={ labels={ af="", ar="كما وضحنا سابقا", ca="", cs="viz výše", da="se foroven", de="siehe oben", en="as we show above", es="como se muestra arriba", fi="", fr="ci-dessus", gr="", hr="vidi gore", hu="lásd feljebb", kr="그러므로", it="come mostrato sopra", la="", lt="kaip parodyta aukščiau", nb="som vist over", nl="hierboven", nn="som vist over", pl="jak pokazano wyżej", pt="", ro="", ru="см. выше", sk="pozri hore", sl="glej zgoraj", sv="se ovan", tk="", tr="", ua="як показано вище", vi="", }, }, hereafter={ labels={ af="", ar="كما نوضح لاحقا", ca="", cs="viz níže", da="se forneden", de="siehe unten", en="as we show below", es="como se muestra abajo", fi="", fr="ci-dessous", gr="", hr="vidi ispod", hu="lásd lejjebb", it="come mostrato sotto", la="", lt="kaip parodyta žemiau", nb="som vist under", nl="hieronder", nn="som vist under", pl="jak pokazano niżej", pt="", ro="", ru="см. ниже", sk="pozri ďalej", sl="glej spodaj", sv="se nedan", tk="", tr="", ua="як показано нижче", vi="", }, }, intermezzo={ labels={ af="Intermezzo ", ar="فسحة ", ca="Intermedi ", cn="퉣", cs="Intermezzo ", da="Intermezzo ", de="Intermezzo ", en="Intermezzo ", es="Intermedio ", fi="Intermezzo ", fr="Intermède ", gr="Παύση", hr="Intermeco ", hu=",. intermezzo:", it="Intermezzo ", ja="間奏曲", kr="간주곡", la="Intermissum ", lt="Intermezzo ", nb="Intermesso ", nl="Intermezzo ", nn="Intermesso ", pl="Intermezzo ", pt="Intermédio ", ro="Intermezzo ", ru="Вставка ", sk="Intermezzo ", sl="Intermezzo ", sv="Intermezzo ", tk="Arakesme", tr="", ua="Вставка ", vi="intermezzo", }, }, january={ labels={ af="januarie", ar="يناير", ["ar-dz"]="جانفي", ["ar-sy"]="كانون الثاني", ca="gener", cn="一月", cs="ledna", da="januar", de="Januar", en="January", es="enero", fi="tammikuu", fr="janvier", gr="Ιανουάριος", hr="siječnja", hu="január", it="gennaio", ja="1", kr="1월", la="Ianuarius", lt="sausio", nb="januar", nl="januari", nn="januar", pl="stycznia", pt="janeiro", ro="ianuarie", ru="января", sk="januára", sl="januar", sv="januari", tk="ýanwar", tr="ocak", ua="січня", vi="tháng giêng", }, }, ["january:mnem"]={ labels={ af="", ca="", cs="led.", da="", de="", en="jan", es="ene.", fi="", fr="", gr="", hr="sij", hu="jan.", it="", la="", lt="jan", nb="jan.", nl="", nn="jan.", pl="sty.", pt="", ro="", ru="", sk="jan.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, july={ labels={ af="julie", ar="يوليو", ["ar-dz"]="جويلة", ["ar-ma"]="يوليوز", ["ar-sy"]="تموز", ca="juliol", cn="七月", cs="července", da="juli", de="Juli", en="July", es="julio", fi="heinäkuu", fr="juillet", gr="Ιούλιος", hr="srpnja", hu="július", it="luglio", ja="7", kr="7월", la="Iulius", lt="liepos", nb="juli", nl="juli", nn="juli", pl="lipca", pt="julho", ro="iulie", ru="июля", sk="júla", sl="julij", sv="juli", tk="iýul", tr="temmuz", ua="липня", vi="tháng bảy", }, }, ["july:mnem"]={ labels={ af="", ca="", cs="čce", da="", de="", en="jul", es="jul.", fi="", fr="", gr="", hr="srp", hu="júl.", it="", la="", lt="jul", nb="juli", nl="", nn="juli", pl="lip.", pt="", ro="", ru="", sk="júla", sl="", sv="", tk="", tr="", ua="", vi="", }, }, june={ labels={ af="junie", ar="يونيو", ["ar-dz"]="جوان", ["ar-sy"]="حزيران", ca="juny", cn="六月", cs="června", da="juni", de="Juni", en="June", es="junio", fi="kesäkuu", fr="juin", gr="Ιούνιος", hr="lipnja", hu="június", it="giugno", ja="6", kr="6월", la="Iunius", lt="birželio", nb="juni", nl="juni", nn="juni", pl="czerwca", pt="junho", ro="iunie", ru="июня", sk="júna", sl="junij", sv="juni", tk="iýun", tr="haziran", ua="червня", vi="tháng sáu", }, }, ["june:mnem"]={ labels={ af="", ca="", cs="čer.", da="", de="", en="jun", es="jun.", fi="", fr="", gr="", hr="lip", hu="jún.", it="", la="", lt="jun", nb="juni", nl="", nn="juni", pl="czerw.", pt="", ro="", ru="", sk="júna", sl="", sv="", tk="", tr="", ua="", vi="", }, }, line={ labels={ af="reël ", ar="سطر ", ca="línia ", cn="行", cs="řádek ", da="linie ", de="Zeile ", en="line ", es="línea ", fi="rivi ", fr="ligne ", gr="Γραμμή", hr="redak ", hu=",. sor:", it="riga ", ja="線", kr="행", la="versus ", lt="line ", nb="linje ", nl="regel ", nn="linje ", pl="wiersz ", pt="linha ", ro="linia ", ru="строка ", sk="riadok ", sl="vrstica ", sv="rad ", tk="setir", tr="satır ", ua="рядок ", vi="dòng ", }, }, lines={ labels={ af="reëls ", ar="السطور ", ca="línies ", cn="行", cs="řádky ", da="linier ", de="Zeilen ", en="lines ", es="líneas ", fi="rivie ", fr="lignes ", gr="Γραμμές", hr="retci ", hu="sorok ", it="righe ", ja="線", kr="행", la="versus ", lt="lines ", nb="linjer ", nl="regels ", nn="linjer ", pl="wiersze ", pt="linhas ", ro="liniile ", ru="строки ", sk="riadky ", sl="vrstice ", sv="rader ", tk="setirler", tr="satırlar ", ua="рядки ", vi="dòng ", }, }, march={ labels={ af="maart", ar="مارس", ["ar-sy"]="آذار", ca="març", cn="三月", cs="března", da="marts", de="März", en="March", es="marzo", fi="maaliskuu", fr="mars", gr="Μάρτιος", hr="ožujka", hu="március", it="marzo", ja="3", kr="3월", la="Martius", lt="kovo", nb="mars", nl="maart", nn="mars", pl="marca", pt="março", ro="martie", ru="марта", sk="marca", sl="marec", sv="mars", tk="mart", tr="mart", ua="березня", vi="tháng ba", }, }, ["march:mnem"]={ labels={ af="", ca="", cs="břez.", da="", de="", en="mar", es="mar.", fi="", fr="", gr="", hr="ožu", hu="már.", it="", la="", lt="mar", nb="mars", nl="", nn="mars", pl="mar.", pt="", ro="", ru="", sk="mar.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, may={ labels={ af="mei", ar="مايو", ["ar-dz"]="ماي", ["ar-ma"]="ماي", ["ar-sy"]="أيار", ca="maig", cn="五月", cs="května", da="maj", de="Mai", en="May", es="mayo", fi="toukokuu", fr="mai", gr="Μάιος", hr="svibnja", hu="május", it="maggio", ja="5", kr="5월", la="Maius", lt="gegužės", nb="mai", nl="mei", nn="mai", pl="maja", pt="maio", ro="mai", ru="мая", sk="mája", sl="maj", sv="maj", tk="maý", tr="mayıs", ua="травня", vi="tháng năm", }, }, ["may:mnem"]={ labels={ af="", ca="", cs="květ.", da="", de="", en="may", es="may.", fi="", fr="", gr="", hr="svi", hu="máj.", it="", la="", lt="may", nb="mai", nl="", nn="mai", pl="maja", pt="", ro="", ru="", sk="mája", sl="", sv="", tk="", tr="", ua="", vi="", }, }, monday={ labels={ af="maandag", ar="الاثنين", ca="dilluns", cn="星期一", cs="pondělí", da="mandag", de="Montag", en="Monday", es="lunes", fi="maanantai", fr="lundi", gr="Δευτέρα", hr="ponedjeljak", hu="hétfő", it="lunedì", ja="月曜日", kr="월요일", la="Dies Lunae", lt="pirmadienis", nb="mandag", nl="maandag", nn="måndag", pl="poniedziałek", pt="segunda-feira", ro="luni", ru="понедельник", sk="pondelok", sl="ponedeljek", sv="måndag", tk="birinji gün", tr="pazartesi", ua="понеділок", vi="thứ hai", }, }, november={ labels={ af="november", ar="نوفمبر", ["ar-ma"]="نونبر", ["ar-sy"]="تشرين الثاني", ca="novembre", cn="十一月", cs="listopadu", da="november", de="November", en="November", es="noviembre", fi="marraskuu", fr="novembre", gr="Νοέμβριος", hr="studenog", hu="november", it="novembre", ja="11", kr="11월", la="November", lt="lapkričio", nb="november", nl="november", nn="november", pl="listopada", pt="novembro", ro="noiembrie", ru="ноября", sk="novembra", sl="november", sv="november", tk="noýabr", tr="kasım", ua="листопада", vi="tháng mười một", }, }, ["november:mnem"]={ labels={ af="", ca="", cs="list.", da="", de="", en="nov", es="nov.", fi="", fr="", gr="", hr="stu", hu="nov.", it="", la="", lt="nov", nb="nov.", nl="", nn="nov.", pl="lis.", pt="", ro="", ru="", sk="nov.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, october={ labels={ af="oktober", ar="أكتوبر", ["ar-sy"]="تشرين الأول", ca="octubre", cn="十月", cs="října", da="oktober", de="Oktober", en="October", es="octubre", fi="lokakuu", fr="octobre", gr="Οκτώβριος", hr="listopada", hu="október", it="ottobre", ja="10", kr="10월", la="October", lt="spalio", nb="oktober", nl="oktober", nn="oktober", pl="października", pt="outubro", ro="octombrie", ru="октября", sk="októbra", sl="oktober", sv="oktober", tk="oktýabr", tr="ekim", ua="жовтня", vi="tháng mười", }, }, ["october:mnem"]={ labels={ af="", ca="", cs="říj.", da="", de="", en="oct", es="oct.", fi="", fr="", gr="", hr="lis", hu="okt.", it="", la="", lt="oct", nb="okt.", nl="", nn="okt.", pl="paź.", pt="", ro="", ru="", sk="okt.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, page={ labels={ af="", ar="صفحة ", ca="", cs="strana ", da="Side ", de="Seite ", en="page ", es="página ", fi="", fr="page ", gr="", hr="stranica ", hu="oldal ", it="pagina ", kr="쪽", la="", lt="puslapis ", nb="side ", nl="pagina ", nn="side ", pl="strona ", pt="", ro="", ru="страница ", sk="strana ", sl="stran ", sv="Sida ", tk="", tr="", ua="сторінка ", vi="", }, }, part={ labels={ af="Deel ", ar="جزء ", ca="Part ", cn={"第","部分"}, cs="Část ", da="Del ", de="Teil ", en="Part ", es="Parte ", fi="Osa ", fr="Partie ", gr="Μέρος", hr="Dio ", hu=",. rész:", it="Parte ", ja={"第","パート"}, kr={"제","부"}, la="Pars ", lt=", dalis", nb="Del", nl="Deel ", nn="Del", pl="Część ", pt="Parte ", ro="Partea ", ru="Часть ", sk="Časť ", sl="Del ", sv="Del ", tk="Bölüm", tr="Cilt ", ua="Частина ", vi="Phần ", }, }, saturday={ labels={ af="saterdag", ar="السبت", ca="dissabte", cn="星期六", cs="sobota", da="lørdag", de="Samstag", en="Saturday", es="sábado", fi="lauantai", fr="samedi", gr="Σάββατο", hr="subota", hu="szombat", it="sabato", ja="土曜日", kr="토요일", la="Dies Saturni", lt="šeštadienis", nb="lørdag", nl="zaterdag", nn="laurdag", pl="sobota", pt="sábado", ro="sâmbătă", ru="суббота", sk="sobota", sl="sobota", sv="lördag", tk="altynjy gün", tr="cumartesi", ua="субота", vi="thứ bảy", }, }, section={ hidden=true, labels={ af="Paragraaf ", ar="فصل ", ca="Secció ", cn={"第","节"}, cs="Sekce ", da="", de="", en="", es="Sección ", fi="", fr="Section ", gr="Ενότητα", hr="Odjeljak ", hu="Fejezet ", it="", ja={"第","項"}, kr={"제","절"}, la="", lt="", nb="", nl="", nn="", pl="Podrozdział ", pt="", ro="", ru="", sk="Sekcia ", sl="", sv="", tk="", tr="", ua="", vi="", }, }, see={ labels={ af="", ar="انظر ", ca="", cs="viz ", da="se ", de="siehe ", en="see ", es="ver: ", fi="", fr="cf. ", gr="", hr="vidi ", hu="lásd ", it="cf. ", kr="", la="", lt="žiūrėti ", nb="se ", nl="zie ", nn="sjå ", pl="patrz ", pt="", ro="", ru="см. ", sk="pozri ", sl="glej ", sv="se ", tk="", tr="", ua="див. ", vi="", }, }, september={ labels={ af="september", ar="سبتمبر", ["ar-ma"]="شتنبر", ["ar-sy"]="أيلول", ca="setembre", cn="九月", cs="září", da="september", de="September", en="September", es="septiembre", fi="syyskuu", fr="septembre", gr="Σεπτέμβριος", hr="rujna", hu="szeptember", it="settembre", ja="9", kr="9월", la="September", lt="rugsėjo", nb="september", nl="september", nn="september", pl="września", pt="setembro", ro="septembrie", ru="сентября", sk="septembra", sl="september", sv="september", tk="sentýabr", tr="eylül", ua="вересня", vi="tháng chín", }, }, ["september:mnem"]={ labels={ af="", ca="", cs="září", da="", de="", en="sep", es="sep.", fi="", fr="", gr="", hr="ruj", hu="szep.", it="", la="", lt="sep", nb="sep.", nl="", nn="sep.", pl="wrz.", pt="", ro="", ru="", sk="sept.", sl="", sv="", tk="", tr="", ua="", vi="", }, }, subsection={ hidden=true, labels={ af="", ar="فصل أدنى ", ca="Subsecció ", cn="", cs="Podsekce ", da="", de="", en="", es="Subsección ", fi="", fr="Soussection ", gr="Υπόενότητα", hr="Pododjeljak ", hu="Alfejezet ", it="", ja="", la="", lt="", nb="", nl="", nn="", pl="Podpodrozdział ", pt="", ro="", ru="", sk="Podsekcia ", sl="", sv="", tk="", tr="", ua="", vi="", }, }, subsubsection={ hidden=true, labels={ af="", ar="فصل أ دنى أدنى ", ca="Subsubsecció ", cn="", cs="Podpodsekce ", da="", de="", en="", es="Subsubsección ", fi="", fr="Soussoussection ", gr="", hr="Podpododjeljak ", hu="Al-alfejezet ", it="", ja="", la="", lt="", nb="", nl="", nn="", pl="", pt="", ro="", ru="", sk="Podpodsekcia ", sl="", sv="", tk="", tr="", ua="", vi="", }, }, subsubsubsection={ hidden=true, labels={ af="", ar="فصل أدنى أدنى أدنى ", ca="Subsubsubsecció ", cn="", cs="Podpodpodsekce ", da="", de="", en="", es="Subsubsubsección ", fi="", fr="Soussoussoussection ", gr="", hr="Podpodpododjeljak ", hu="Al-al-alfejezet ", it="", ja="", la="", lt="", nb="", nl="", nn="", pl="", -- not used in Polish pt="", ro="", ru="", sk="Podpodpodsekcia ", sl="", sv="", tk="", tr="", ua="", vi="", }, }, sunday={ labels={ af="sondag", ar="الأحد", ca="diumenge", cn="星期日", cs="neděle", da="søndag", de="Sonntag", en="Sunday", es="domingo", fi="sunnuntai", fr="dimanche", gr="Κυριακή", hr="nedjelja", hu="vasárnap", it="domenica", ja="日曜日", kr="일요일", la="Dies Solis", lt="sekmadienis", nb="søndag", nl="zondag", nn="sundag", pl="niedziela", pt="domingo", ro="duminică", ru="воскресенье", sk="nedeľa", sl="nedelja", sv="söndag", tk="dynç gün", tr="pazar", ua="неділя", vi="chủ nhật", }, }, table={ labels={ af="Tabel", ar="جدول ", ca="Taula ", cn="表", cs="Tabulka ", da="Tabel ", de="Tabelle ", en="Table ", es="Tabla ", fi="Taulukko ", fr="Tableau ", gr="Πίνακας", hr="Tablica ", hu=",. táblázat:", it="Tabella ", ja="表", kr="표", la="Tabula ", lt=", lentelė.", nb="Tabell ", nl="Tabel ", nn="Tabell ", pl="Tabela ", pt="Tabela ", ro="Tabelul ", ru="Таблица ", sk="Tabuľka ", sl="Tabela ", sv="Tabell ", tk="Tablisa", tr="Tablo ", ua="Таблиця ", vi="Bảng ", }, }, thursday={ labels={ af="donderdag", ar="الخميس", ca="dijous", cn="星期四", cs="čtvrtek", da="torsdag", de="Donnerstag", en="Thursday", es="jueves", fi="torstai", fr="jeudi", gr="Πέμπτη", hr="četvrtak", hu="csütörtök", it="giovedì", ja="木曜日", kr="목요일", la="Dies Iovis", lt="ketvirtadienis", nb="torsdag", nl="donderdag", nn="torsdag", pl="czwartek", pt="quinta-feira", ro="joi", ru="четверг", sk="štvrtok", sl="četrtek", sv="torsdag", tk="dördünji gün", tr="perşembe", ua="четвер", vi="thứ năm", }, }, tuesday={ labels={ af="dinsdag", ar="الثلاثاء", ca="dimarts", cn="星期二", cs="úterý", da="tirsdag", de="Dienstag", en="Tuesday", es="martes", fi="tiistai", fr="mardi", gr="Τρίτη", hr="utorak", hu="kedd", it="martedì", ja="火曜日", kr="화요일", la="Dies Martis", lt="antradienis", nb="tirsdag", nl="dinsdag", nn="tysdag", pl="wtorek", pt="terça-feira", ro="marți", ru="вторник", sk="utorok", sl="torek", sv="tisdag", tk="ikinji gün", tr="salı", ua="вівторок", vi="thứ ba", }, }, wednesday={ labels={ af="woensdag", ar="الأربعاء", ca="dimecres", cn="星期三", cs="středa", da="onsdag", de="Mittwoch", en="Wednesday", es="miércoles", fi="keskiviikko", fr="mercredi", gr="Τετάρτη", hr="srijeda", hu="szerda", it="mercoledì", ja="水曜日", kr="수요일", la="Dies Mercuri", lt="trečiadienis", nb="onsdag", nl="woensdag", nn="onsdag", pl="środa", pt="quarta-feira", ro="miercuri", ru="среда", sk="streda", sl="sreda", sv="onsdag", tk="üçünji", tr="çarşamba", ua="середа", vi="thứ tư", }, }, }, titles={ abbreviations={ labels={ af="Afkortings", ar="الاختصارات", ca="Abreviacions", cn="缩略语", cs="Zkratky", da="Forkortelser", de="Abkürzungen", en="Abbreviations", es="Abreviaturas", fi="Lyhennyksi", fr="Abréviations", gr="Συντομογραφίες", hr="Kratice", hu="Rövidítések", it="Abbreviazioni", ja="略語", kr="약어", la="Notae", lt="Santrumpos", nb="Forkortelser", nl="Afkortingen", nn="Forkortingar", pl="Wykaz skrótów", pt="Abreviaturas", ro="Abrevieri", ru="Список сокращений", sk="Skratky", sl="Kratice", sv="Förkortningar", tk="Gysgaltmalar", tr="Kısaltmalar", ua="Перелік скорочень", vi="Chữ viết tắt", }, }, content={ labels={ af="Inhoud", ar="المحتويات", ca="Índex de continguts", cn="目录", cs="Obsah", da="Indhold", de="Inhalt", en="Contents", es="Contenido", fi="Sisällys", fr="Table des matières", gr="Περιεχόμενα", hr="Sadržaj", hu="Tartalom", it="Indice", ja="目次", kr="목차", la="Quod in libro continetur", lt="Turinys", nb="Innhold", nl="Inhoud", nn="Innhald", pl="Spis treści", pt="Conteúdo", ro="Cuprins", ru="Содержание", sk="Obsah", sl="Kazalo", sv="Innehåll", tk="Mazmuny", tr="Fihrist", ua="Зміст", vi="Mục lục", }, }, figures={ labels={ af="Figure", ar="الأشكال", ca="Figures", cn="图形", cs="Seznam obrázků", da="Figurer", de="Abbildungen", en="Figures", es="Figuras", fi="Kuvi", fr="Figures", gr="Σχήματα", hr="Slike", hu="Ábrák", it="Figure", ja="図", kr="그림", la="Imagines", lt="Iliustracijos", nb="Figurer", nl="Figuren", nn="Figurar", pl="Ilustracje", pt="Figuras", ro="Figuri", ru="Список иллюстраций", sk="Zoznam obrázkov", sl="Slike", sv="Figurer", tk="Suratlar", tr="Şekiller", ua="Перелік ілюстрацій", vi="Danh sách hình vẽ", }, }, graphics={ labels={ af="Grafieke", ar="الرسوم", ca="Gràfiques", cn="图", cs="Seznam grafů", da="Grafik", de="Graphiken", en="Graphics", es="Gráficos", fi="Grafiikkaoi", fr="Graphiques", gr="Γραφικά", hr="Slike", hu="Grafikák", it="Grafici", ja="グラフ", kr="그래픽", la="Typi", lt="Graphics", nb="Bilde", nl="Grafieken", nn="Bilete", pl="Grafiki", pt="Gráficos", ro="Grafice", ru="Список графиков", sk="Zoznam grafov", sl="Slike", sv="Grafik", tk="Grafikler", tr="Grafikler", ua="Перелік графіков", vi="Đồ thị", }, }, index={ labels={ af="Indeks", ar="الفهرس", ca="Índex alfabètic", cn="索引", cs="Rejstřík", da="Indeks", de="Index", en="Index", es="Índice", fi="Indeksiluku", fr="Index", gr="Ευρετήριο", hr="Indeks", hu="Index", it="Indice", ja="目次", kr="색인", la="Indices", lt="Rodyklė", nb="Register", nl="Index", nn="Register", pl="Indeks", pt="Índice", ro="Index", ru="Алфавитный указатель", sk="Zoznam", sl="Stvarno kazalo", sv="Sakregister", tk="Indeks", tr="İndex", ua="Покажчик", vi="Chỉ số", }, }, intermezzi={ labels={ af="Intermezzos", ar="فسح", ca="Intermedis", cn="퉣", cs="Intermezza", da="Intermezzoer", de="Intermezzi", en="Intermezzos", es="Intermedios", fi="Intermezzos", fr="Intermèdes", gr="Παύσεις", hr="Intermeci", hu="Intermezzok", it="Intermezzi", ja="間奏曲", kr="간주곡", la="Intermissa", lt="Intermezzos", nb="Intermesso", nl="Intermezzo's", nn="Intermesso", pl="Intermezza", pt="Intermédios", ro="Intermzzo", ru="Список вставок", sk="Intermezzá", sl="Intermezzi", sv="Intermezzon", tk="Arakesmeler", tr="", ua="Перелік вставок", vi="Intermezzos", }, }, logos={ labels={ af="Logos", ar="الشعارات", ca="Logotips", cn="徽贬", cs="Loga", da="Logoer", de="Logos", en="Logos", es="Logotipos", fi="Vertauskuva", fr="Logos", gr="Λογότυπα", hr="Logotipi", hu="Fejlécek", it="Logotipi", ja="理性", kr="이성", la="Typi negotiales", lt="Logos", nb="Logoer", nl="Logo's", nn="Logoar", pl="Znaki", pt="Logotipos", ro="Logo-uri", ru="Логотипы", sk="Logá", sl="Logotipi", sv="Loggor", tk="Logolar", tr="Logolar", ua="Логотипи", vi="Biểu tượng", }, }, pubs={ labels={ af="", ca="Referències", cs="Literatura", da="", de="Literatur", en="References", es="Bibliografía", fi="", fr="Bibliographie", gr="", hr="Literatura", hu="Bibliográfia", it="Bibliografia", la="", lt="Literatūra", nb="", nl="Literatuur", nn="", pl="Bibliografia", pt="", ro="", ru="", sk="Literatúra", sl="Literatura", sv="", tk="", tr="", ua="", vi="", }, }, tables={ labels={ af="Tabelle", ar="الجداول", ca="Taules", cn="表格", cs="Seznam tabulek", da="Tabeller", de="Tabellen", en="Tables", es="Tablas", fi="Taulukkoj", fr="Tableaux", gr="Πίνακες", hr="Tablice", hu="Táblázatok", it="Tabelle", ja="机", kr="표", la="Tabulae", lt="Lentelės", nb="Tabeller", nl="Tabellen", nn="Tabellar", pl="Tabele", pt="Tabelas", ro="Tabele", ru="Список таблиц", sk="Zoznam tabuliek", sl="Tabele", sv="Tabeller", tk="Tablisalar", tr="Tablolar", ua="Перелік таблиць", vi="Danh sách bảng", }, }, units={ labels={ af="Eenhede", ar="الوحدات", ca="Unitats", cn="计量单位", cs="Jednotky", da="Enheder", de="Einheiten", en="Units", es="Unidades", fi="Yksiköt", fr="Unités", gr="Μονάδες", hr="Jedinice", hu="Mértékegységek", it="Unità", ja="ユニッツ", kr="측정단위", la="Modi", lt="Units", nb="Enheter", nl="Eenheden", nn="Einingar", pl="Jednostki", pt="Unidades", ro="Unități", ru="Единицы измерения", sk="Jednotky", sl="Enote", sv="Enheter", tk="Birlikler", tr="Birimler", ua="Одиниці виміру", vi="Đơn vị", }, }, }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/page-par.mkii0000644000175000017500000000316511754241457024257 0ustar norbertnorbert%D \module %D [ file=page-par, % copied from page-lin %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Line Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Paragraph Numbering} \unprotect \newcount\internalparagraphnumber \def\setupparagraphnumbering {\dosingleempty\dosetupparagraphnumbering} \def\dosetupparagraphnumbering[#1]% {\getparameters [\??ph][#1]% \processaction [\@@phstate] [\v!start=>\let\showparagraphnumber\doshowparagraphnumberA, \v!stop=>\let\showparagraphnumber\relax, \v!line=>\let\showparagraphnumber\doshowparagraphnumberB, \v!reset=>\global\internalparagraphnumber\zerocount \let\showparagraphnumber\doshowparagraphnumberA]} \def\dodoshowparagraphnumber {\global\advance\internalparagraphnumber \plusone \inleftmargin % \tf normalizes em {\tf{\doattributes\??ph\c!style\c!color{\the\internalparagraphnumber}}% \kern\@@phdistance}} \def\doshowparagraphnumberA {\ifprocessingverbatim \iflinepar\dodoshowparagraphnumber\fi \else \dodoshowparagraphnumber \fi} \def\doshowparagraphnumberB {\ifnumberinglines \doshowparagraphnumberA \fi} \setupparagraphnumbering [\c!state=\v!stop, \c!style=, \c!color=, \c!distance=\ifcase\linenumberlocation2em\else\!!zeropoint\fi] % will change \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lnt.mkvi0000644000175000017500000002142112130411274024322 0ustar norbertnorbert%D \module %D [ file=strc-lnt, %D version=2002.05.10, %D title=\CONTEXT\ Structure Macros, %D subtitle=Line Notes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Line Notes} %D This module loads on top of the footnote and line numbering macros. \unprotect \installcorenamespace{linenote} \let\setuplinenote\setupnote \newcount\c_strc_linenotes \unexpanded\def\definelinenote {\dotripleempty\strc_linenotes_define} \def\strc_linenotes_define[#1][#2][#3]% {\ifcsname\??linenote#1\endcsname % there might be files that define the default 'linenote' \ifthirdargument \setupnote[#1][#3]% \else\ifsecondargument \setupnote[#1][#2]% \fi\fi \else \ifthirdargument \definenote[#1][#2][#3]% \else\ifsecondargument \definenote[#1][#2]% \else \definenote[#1]% \fi\fi \expandafter\let\csname\??linenote#1\expandafter\endcsname\csname#1\endcsname % use copy command \setuevalue {#1}{\strc_linenotes_direct{#1}}% \setuevalue{\e!start#1}{\strc_linenotes_start {#1}}% \setuevalue{\e!stop #1}{\strc_linenotes_stop }% \fi} \unexpanded\def\strc_linenotes_direct#1#2% {\global\advance\c_strc_linenotes\plusone \strc_linenotes_indeed{#1}{\the\c_strc_linenotes}{#2}% \strc_linenotes_traced\empty \normalexpanded{\someline[\the\c_strc_linenotes]}} \unexpanded\def\strc_linenotes_start#1[#2]#3% {\global\advance\c_strc_linenotes\plusone \keepunwantedspaces \strc_linenotes_indeed{#1}{#2}{#3}% \strc_linenotes_traced{#2}% \startline[#2]} \unexpanded\def\strc_linenotes_stop[#1]% {\stopline[#1]} \let\m_page_lines_previous_to \relax \let\m_page_lines_previous_from\relax \let\m_page_lines_current_to \relax \let\m_page_lines_current_from \relax \newconditional\c_page_lines_current_to \newconditional\c_page_lines_current_from \installcorenamespace{linenotespreviousfrom} \installcorenamespace{linenotespreviousto} \letvalue\??linenotespreviousfrom\empty \letvalue\??linenotespreviousto \empty \def\page_lines_in_from{\in[lr:b:\currentlinenotereference]} \def\page_lines_in_to {\in[lr:e:\currentlinenotereference]} \unexpanded\def\strc_linenotes_range_normal#1% order {\doifreferencefoundelse{lr:b:\currentlinenotereference}\settrue\setfalse\c_page_lines_current_from \ifconditional\c_page_lines_current_from \xdef\m_page_lines_current_from{\currentreferencelinenumber}% \doifreferencefoundelse{lr:e:\currentlinenotereference}\settrue\setfalse\c_page_lines_current_to \ifconditional\c_page_lines_current_to \xdef\m_page_lines_current_to{\currentreferencelinenumber}% \page_lines_in_from \ifx\m_page_lines_current_from\m_page_lines_current_to \else \endash \page_lines_in_to \fi \else \page_lines_in_from \fi \else \page_lines_in_from \fi} \unexpanded\def\strc_linenotes_range_sparse#1% order {\doifreferencefoundelse{lr:b:\currentlinenotereference}\settrue\setfalse\c_page_lines_current_from \ifconditional\c_page_lines_current_from \xdef\m_page_lines_current_from{\currentreferencelinenumber}% \doifreferencefoundelse{lr:e:\currentlinenotereference}\settrue\setfalse\c_page_lines_current_to \ifconditional\c_page_lines_current_to \xdef\m_page_lines_current_to{\currentreferencelinenumber}% \ifx\m_page_lines_previous_from\m_page_lines_current_from \ifx\m_page_lines_previous_to\m_page_lines_current_to \notationparameter\c!compressseparator \else \page_lines_in_from \fi \else \page_lines_in_from \ifx\m_page_lines_current_from\m_page_lines_current_to \else \endash \page_lines_in_to \fi \fi \else \page_lines_in_from \fi \else \ifx\m_page_lines_previous_from\m_page_lines_current_from \notationparameter\c!compressseparator \else \page_lines_in_from \fi \fi} \let\currentlinenotereference\empty \unexpanded\def\strc_linenotes_indeed#1#2#3% {\begingroup % we keep things local so we can use it as regular note too \edef\currentnotation{#1}% \edef\currentlinenotereference{#2}% \xdef\m_page_lines_previous_from{\csname\??linenotespreviousfrom\ifcsname\??linenotespreviousfrom\currentnotation\endcsname\currentnotation\fi\endcsname}% \xdef\m_page_lines_previous_to {\csname\??linenotespreviousto \ifcsname\??linenotespreviousto \currentnotation\endcsname\currentnotation\fi\endcsname}% \doifelse{\notationparameter\c!compress}\v!yes {\let\linenotelinenumber\strc_linenotes_range_sparse}% {\let\linenotelinenumber\strc_linenotes_range_normal}% \let\currentnote\currentnotation \letnotationparameter\c!numbercommand\linenotelinenumber% todo: deep hook \letnoteparameter \c!textcommand \gobbleoneargument % todo: deep hook \getvalue{\??linenote\currentnotation}{#3}% \expandafter\glet\csname\??linenotespreviousfrom\currentnotation\endcsname\m_page_lines_current_from \expandafter\glet\csname\??linenotespreviousto \currentnotation\endcsname\m_page_lines_current_to \endgroup} % where to hook this one in? resetcounter has no hook: \unexpanded\def\doresetlinenotecompression#1% \strc_linenotes_reset_previous {\expandafter\glet\csname\??linenotespreviousfrom#1\endcsname\empty \expandafter\glet\csname\??linenotespreviousto #1\endcsname\empty} \definesymbol [\v!compressseparator] [\space\hbox{\vl\thinspace\vl}] \setupnotations [%c\compress=\v!no, \c!compressseparator=\symbol\v!compressseparator] \let\strc_linenotes_traced\gobbleoneargument \def\strc_linenotes_traced_indeed#1% {\iftracelinenotes \hbox to \zeropoint {\forgetall \hsize\zeropoint \hss \vbox to \strutheight{\llap{\red\infofont\setstrut\the\c_strc_linenotes}\vss}% {\color[blue]{\vl}}% \vbox to \strutheight{\rlap{\red\infofont\setstrut#1}\vss}% \hss}% \prewordbreak \fi} \unexpanded\def\tracelinenotes {\let\strc_linenotes_traced\strc_linenotes_traced_indeed} %D Use these when not properly nested: \let\fromlinenote\startlinenote \let\tolinenote \stoplinenote % We predefine one, namely \type {\linenote} cum suis. \definelinenote[\v!linenote] % beware: line numbers are added later on so grouping setups is a bad idea % % \startbuffer[test] % \startlinenumbering[100] % test \linenote {oeps 1} test test test test test test % test \startlinenote [well] {oeps X} test test test test test test % test \linenote {oeps 2} test test test test test test % test \linenote {oeps 3} test test test test test test % test \linenote {oeps 4} test test test test test test % test \linenote {oeps 5} test test test test test test % test \stoplinenote [well] test test test test test test % \stoplinenumbering % \stopbuffer % % \typebuffer[test] \getbuffer[test] \page % % \startbuffer[setup] % \setuplinenumbering % [align=flushleft] % \stopbuffer % % \typebuffer[setup] \getbuffer[setup,test] \page % % \startbuffer[setup] % \setuplinenumbering % [width=4em, % distance=1em, % align=flushright] % \stopbuffer % % \typebuffer[setup] \getbuffer[setup,test] \page % % \startbuffer[setup] % \setuplinenumbering % [width=4em, % align=flushleft] % \stopbuffer % % \typebuffer[setup] \getbuffer[setup,test] \page % % \startbuffer[setup] % \setuplinenumbering % [width=2em, % distance=.5em, % align=middle] % \stopbuffer % % \typebuffer[setup] \getbuffer[setup,test] \page % % \startbuffer[setup] % \setuplinenumbering % [conversion=romannumerals, % start=1, % step=1, % location=text, % style=slanted, % color=blue, % width=1.5em] % \stopbuffer % % \typebuffer[setup] \getbuffer[setup] \startnarrower\getbuffer[test]\stopnarrower \page % % \startbuffer[setup] % \setuplinenumbering % [width=4em, % left=--, % right=--, % align=middle] % \stopbuffer % % \typebuffer[setup] \getbuffer[setup,test] \page % % \startbuffer[setup-1] % \setuplinenumbering % [style=\bfxx, % command=\WatchThis] % \stopbuffer % % \startbuffer[setup-2] % \def\WatchThis#1% % {\ifodd\linenumber % \definecolor[linecolor][red]% % \else % \definecolor[linecolor][green]% % \fi % \inframed % [offset=1pt,frame=off,background=color,backgroundcolor=linecolor] % {#1}} % \stopbuffer % % \typebuffer[setup-1,setup-2] \getbuffer[setup-1,setup-2,test] \page % % \startbuffer[setup-1] % \setuplinenumbering % [location=inright, % style=\bfxx, % command=\WatchThis] % \stopbuffer % % \typebuffer[setup-1] \getbuffer[setup-1,setup-2,test] \page \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-bld.lua0000644000175000017500000001304112130411274024120 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-bld'] = { -- was node-par version = 1.001, comment = "companion to typo-bld.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local insert, remove = table.insert, table.remove local builders, nodes, node = builders, nodes, node builders.paragraphs = builders.paragraphs or { } local parbuilders = builders.paragraphs parbuilders.constructors = parbuilders.constructors or { } local constructors = parbuilders.constructors constructors.names = constructors.names or { } local names = constructors.names constructors.numbers = constructors.numbers or { } local numbers = constructors.numbers constructors.methods = constructors.methods or { } local methods = constructors.methods local a_parbuilder = attributes.numbers['parbuilder'] or 999 -- why 999 constructors.attribute = a_parbuilder local unsetvalue = attributes.unsetvalue local texsetattribute = tex.setattribute local texnest = tex.nest local nodepool = nodes.pool local new_baselineskip = nodepool.baselineskip local new_lineskip = nodepool.lineskip local insert_node_before = node.insert_before local hpack_node = node.hpack local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming storage.register("builders/paragraphs/constructors/names", names, "builders.paragraphs.constructors.names") storage.register("builders/paragraphs/constructors/numbers", numbers, "builders.paragraphs.constructors.numbers") local report_parbuilders = logs.reporter("parbuilders") local mainconstructor = nil -- not stored in format local nofconstructors = 0 local stack = { } function constructors.define(name) nofconstructors = nofconstructors + 1 names[nofconstructors] = name numbers[name] = nofconstructors end function constructors.set(name) --- will go if name then mainconstructor = numbers[name] or unsetvalue else mainconstructor = stack[#stack] or unsetvalue end texsetattribute(a_parbuilder,mainconstructor) if mainconstructor ~= unsetvalue then constructors.enable() end end function constructors.start(name) local number = numbers[name] insert(stack,number) mainconstructor = number or unsetvalue texsetattribute(a_parbuilder,mainconstructor) if mainconstructor ~= unsetvalue then constructors.enable() end -- report_parbuilders("start %a",name) end function constructors.stop() remove(stack) mainconstructor = stack[#stack] or unsetvalue texsetattribute(a_parbuilder,mainconstructor) if mainconstructor == unsetvalue then constructors.disable() end -- report_parbuilders("stop") end -- return values: -- -- true : tex will break itself -- false : idem but dangerous -- head : list of valid vmode nodes with last being hlist function constructors.handler(head,followed_by_display) if type(head) == "boolean" then return head else local attribute = head[a_parbuilder] -- or mainconstructor if attribute then local method = names[attribute] if method then local handler = methods[method] if handler then return handler(head,followed_by_display) else report_parbuilders("contructor method %a is not defined",tostring(method)) return true -- let tex break end end end return true -- let tex break end end -- just for testing function constructors.methods.default(head,followed_by_display) return true -- let tex break end -- also for testing (now also surrounding spacing done) function builders.paragraphs.constructors.methods.oneline(head,followed_by_display) -- when needed we will turn this into a helper local t = texnest[texnest.ptr] local h = hpack_node(head) local d = tex.baselineskip.width - t.prevdepth - h.height t.prevdepth = h.depth t.prevgraf = 1 if d < tex.lineskiplimit then return insert_node_before(h,h,new_lineskip(tex.lineskip)) else return insert_node_before(h,h,new_baselineskip(d)) end end -- It makes no sense to have a sequence here as we already have -- pre and post hooks and only one parbuilder makes sense, so no: -- -- local actions = nodes.tasks.actions("parbuilders") -- -- yet ... maybe some day. local actions = constructors.handler local enabled = false local function processor(head,followed_by_display) -- todo: not again in otr so we need to flag if enabled then starttiming(parbuilders) local head = actions(head,followed_by_display) stoptiming(parbuilders) return head else return true -- let tex do the work end end function constructors.enable() enabled = true end function constructors.disable() enabled = false end callbacks.register('linebreak_filter', processor, "breaking paragraps into lines") statistics.register("linebreak processing time", function() return statistics.elapsedseconds(parbuilders) end) -- interface commands.defineparbuilder = constructors.define commands.startparbuilder = constructors.start commands.stopparbuilder = constructors.stop commands.setparbuilder = constructors.set commands.enableparbuilder = constructors.enable commands.disableparbuilder = constructors.disable context-2013.05.28.20130704/texmf-dist/tex/context/base/s-math-characters.lua0000644000175000017500000002157712161703335025717 0ustar norbertnorbertif not modules then modules = { } end modules['s-math-characters'] = { version = 1.001, comment = "companion to s-math-characters.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is one of the oldest cld files but I'm not going to clean it up. moduledata.math = moduledata.math or { } moduledata.math.characters = moduledata.math.characters or { } local concat = table.concat local lower = string.lower local utfchar = utf.char local round = math.round local fontdata = fonts.hashes.identifiers local chardata = characters.data local no_description = "no description, private to font" local limited = true local fillinthegaps = true local upperlimit = 0x0007F local upperlimit = 0xF0000 local f_unicode = string.formatters["%U"] local f_slot = string.formatters["%s/%0X"] function moduledata.math.characters.showlist(specification) specification = interfaces.checkedspecification(specification) local id = specification.number -- or specification.id local list = specification.list if not id then id = font.current() end if list == "" then list = nil end local tfmdata = fontdata[id] local characters = tfmdata.characters local descriptions = tfmdata.descriptions local resources = tfmdata.resources local lookuptypes = resources.lookuptypes local virtual = tfmdata.properties.virtualized local names = { } local gaps = mathematics.gaps local sorted = { } if type(list) == "string" then sorted = utilities.parsers.settings_to_array(list) elseif type(list) == "table" then sorted = list elseif fillinthegaps then sorted = table.keys(characters) for k, v in next, gaps do if characters[v] then sorted[#sorted+1] = k end end table.sort(sorted) else sorted = table.sortedkeys(characters) end if virtual then for k, v in ipairs(tfmdata.fonts) do local id = v.id local name = fontdata[id].properties.name names[k] = (name and file.basename(name)) or id end end context.showmathcharactersstart() for _, unicode in next, sorted do if not limited or unicode < upperlimit then local code = gaps[unicode] or unicode local char = characters[code] local desc = descriptions[code] local info = chardata[code] if char then local next_sizes = char.next local v_variants = char.vert_variants local h_variants = char.horiz_variants local commands = char.commands local slookups = desc and desc.slookups local mlookups = desc and desc.mlookups local mathclass = info.mathclass local mathspec = info.mathspec local mathsymbol = info.mathsymbol local description = info.description or no_description context.showmathcharactersstartentry() context.showmathcharactersreference(f_unicode(unicode)) context.showmathcharactersentryhexdectit(f_unicode(code),code,lower(description)) context.showmathcharactersentrywdhtdpic(round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0)) if virtual and commands then local t = { } for i=1,#commands do local ci = commands[i] if ci[1] == "slot" then local fnt, idx = ci[2], ci[3] t[#t+1] = f_slot(names[fnt] or fnt,idx) end end if #t > 0 then context.showmathcharactersentryresource(concat(t,", ")) end end if mathclass or mathspec then context.showmathcharactersstartentryclassspec() if mathclass then context.showmathcharactersentryclassname(mathclass,info.mathname or "no name") end if mathspec then for i=1,#mathspec do local mi = mathspec[i] context.showmathcharactersentryclassname(mi.class,mi.name or "no name") end end context.showmathcharactersstopentryclassspec() end if mathsymbol then context.showmathcharactersentrysymbol(f_unicode(mathsymbol),mathsymbol) end if next_sizes then local n, done = 0, { } context.showmathcharactersstartnext() while next_sizes do n = n + 1 if done[next_sizes] then context.showmathcharactersnextcycle(n) break else done[next_sizes] = true context.showmathcharactersnextentry(n,f_unicode(next_sizes),next_sizes) next_sizes = characters[next_sizes] v_variants = next_sizes.vert_variants or v_variants h_variants = next_sizes.horiz_variants or h_variants if next_sizes then next_sizes = next_sizes.next end end end context.showmathcharactersstopnext() if h_variants or v_variants then context.showmathcharactersbetweennextandvariants() end end if h_variants then context.showmathcharactersstarthvariants() for i=1,#h_variants do -- we might go top-down in the original local vi = h_variants[i] context.showmathcharactershvariantsentry(i,f_unicode(vi.glyph),vi.glyph) end context.showmathcharactersstophvariants() elseif v_variants then context.showmathcharactersstartvvariants() for i=1,#v_variants do local vi = v_variants[#v_variants-i+1] context.showmathcharactersvvariantsentry(i,f_unicode(vi.glyph),vi.glyph) end context.showmathcharactersstopvvariants() end if slookups or mlookups then local variants = { } if slookups then for lookupname, lookupdata in next, slookups do local lookuptype = lookuptypes[lookupname] if lookuptype == "substitution" then variants[lookupdata] = "sub" elseif lookuptype == "alternate" then for i=1,#lookupdata do variants[lookupdata[i]] = "alt" end end end end if mlookups then for lookupname, lookuplist in next, mlookups do local lookuptype = lookuptypes[lookupname] for i=1,#lookuplist do local lookupdata = lookuplist[i] local lookuptype = lookuptypes[lookupname] if lookuptype == "substitution" then variants[lookupdata] = "sub" elseif lookuptype == "alternate" then for i=1,#lookupdata do variants[lookupdata[i]] = "alt" end end end end end context.showmathcharactersstartlookupvariants() local i = 0 for variant, lookuptype in table.sortedpairs(variants) do i = i + 1 context.showmathcharacterslookupvariant(i,f_unicode(variant),variant,lookuptype) end context.showmathcharactersstoplookupvariants() end context.showmathcharactersstopentry() end end end context.showmathcharactersstop() end context-2013.05.28.20130704/texmf-dist/tex/context/base/util-fmt.lua0000644000175000017500000000434212130411274024133 0ustar norbertnorbertif not modules then modules = { } end modules ['util-fmt'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } utilities = utilities or { } utilities.formatters = utilities.formatters or { } local formatters = utilities.formatters local concat, format = table.concat, string.format local tostring, type = tostring, type local strip = string.strip local lpegmatch = lpeg.match local stripper = lpeg.patterns.stripzeros function formatters.stripzeros(str) return lpegmatch(stripper,str) end function formatters.formatcolumns(result,between) if result and #result > 0 then between = between or " " local widths, numbers = { }, { } local first = result[1] local n = #first for i=1,n do widths[i] = 0 end for i=1,#result do local r = result[i] for j=1,n do local rj = r[j] local tj = type(rj) if tj == "number" then numbers[j] = true end if tj ~= "string" then rj = tostring(rj) r[j] = rj end local w = #rj if w > widths[j] then widths[j] = w end end end for i=1,n do local w = widths[i] if numbers[i] then if w > 80 then widths[i] = "%s" .. between else widths[i] = "%0" .. w .. "i" .. between end else if w > 80 then widths[i] = "%s" .. between elseif w > 0 then widths[i] = "%-" .. w .. "s" .. between else widths[i] = "%s" end end end local template = strip(concat(widths)) for i=1,#result do local str = format(template,unpack(result[i])) result[i] = strip(str) end end return result end context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-eps.mkii0000644000175000017500000001536511754241457024344 0ustar norbertnorbert%D \module %D [ file=supp-eps, %D version=1998.05.06, %D title=\CONTEXT\ Support Macros, %D subtitle=\EPS\ tools, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifx \undefined \writestatus \input supp-mis.tex \relax \fi %D The macros in this module are rather old and were originally %D part of the figure inclusion macros. When \PDFTEX\ started %D to support \PDF\ inclusion, where some accompanying macros %D were put in \type{supp-pdf}, I considered it more suitable %D to give the \EPS\ macros their own module. \writestatus{loading}{ConTeXt Support Macros / EPS} %D \macros %D {dogetEPSboundingbox} %D %D The predecessors of the following macro's are derived from %D Thomas Rockicky's macro's. They are rewritten to a more %D compact form, made a bit more robust and also handle the %D \type{HiResBoundingBox} and \type{ExactBoundingBox} that %D are sometimes present. %D %D A bounding box has the form: %D %D \starttyping %D %%BoundingBox: llx lly urx ury %D \stoptyping %D %D Before we scan the file, we have to reset special %D characters and set some others. The percentage symbol also %D needs special treatment. When a bounding box is %D encountered, we keep on scanning until no more directives %D are found, i.e. a line is found that does not start with a %D percentage symbol. We also abort scanning after finding a %D high resolution bounding box. %D %D This method also works inside verbatim mode (like when we %D are typesetting sources and putting eps coded logos into %D a heading. Temporary restoring the \CATCODES\ is done in %D the calling routine. %D %D The creator as well as external support for specials are %D analyzed as well and their status is available in \type %D {\EPScreator} and \type {\EPSshading}. The boundingbox %D components are available in \type {\EPSllx} etc. \unprotect \def\EPSllx{0} \let\MPllx\EPSllx % just in case these \def\EPSlly{0} \let\MPlly\EPSlly % are used while running \def\EPSurx{0} \let\MPurx\EPSurx % in fast mode we set \def\EPSury{0} \let\MPury\EPSury % them to 0. \chardef\EPSfound =0 \chardef\EPScreator=0 \chardef\EPSspecial=0 \chardef\EPSstatus =0 \let\EPScreatorstring\empty \newtoks\extraEPSpreambleresets \newtoks\extraEPSpreambleparsers \def\dofinishEPSfile{\dofinishfile} % no \let, can be overloaded \def\dogetEPSboundingbox#1#2#3#4#5% {\bgroup \global\chardef\EPSfound \zerocount \global\chardef\EPScreator\zerocount \global\chardef\EPSspecial\zerocount \global\chardef\EPSstatus \zerocount \global\let\EPScreatorstring\empty \the\extraEPSpreambleresets \uncatcodespecials \catcode`\^^M=\@@ignore \def\doprocessEPSline {\advance\scratchcounter\plusone \expandafter\checkEPSboundingbox\fileline\empty\empty:.:.\end}% \scratchcounter\zerocount \doprocessfile\scratchread{#1}\doprocessEPSline \egroup % Using \EPSllx bp instead of \dimen0=1bp and \EPSllx\dimen0 is more accurate (.005pt). \ifnum\EPSfound>\zerocount #2\dimexpr\EPSllx\onebasepoint \relax #3\dimexpr\EPSlly\onebasepoint \relax #4\dimexpr\EPSurx\onebasepoint-#2\relax #5\dimexpr\EPSury\onebasepoint-#3\relax \else #2\zeropoint #3\zeropoint #4\zeropoint #5\zeropoint \fi %\message{[bbox #1: \EPSllx\space\EPSurx\space\EPSlly\space\EPSury]}\wait \global\let\MPllx\EPSllx \global\let\MPlly\EPSlly \global\let\MPurx\EPSurx \global\let\MPury\EPSury} \bgroup \catcode`\%=\@@other \xdef\letterpercent{\string%} \egroup \def\EPSboundingboxtag {BoundingBox} \def\EPShiresboundingboxtag{HiResBoundingBox} \def\EPSexactboundingboxtag{ExactBoundingBox} \def\EPScreatortag {Creator} \def\EPSmetaposttag {MetaPost} \def\EPSmetapostspecialtag {MetaPostSpecial} \def\EPSmetapostspecialstag{MetaPostSpecials} \def\EPSpagetag {Page} \let\EPSspecialstring \empty \let\EPSspecialcontent\empty % new metapost construct (hires bb followed by creator + version) % %!PS %%BoundingBox: -71 -1 651 496 %%HiResBoundingBox: -70.9945 -0.5 650.5 495.24907 %%Creator: MetaPost 0.901 %%CreationDate: 2005.06.02:1633 %%Pages: 1 \long\def\checkEPSboundingbox#1#2#3:#4:.#5\end {\if\string#1\letterpercent \if\string#2\letterpercent \edef\EPSspecialstring{#3}% \edef\EPSspecialcontent{#4}% \ifx\EPSspecialstring\EPScreatortag \getEPScreatorspec \else\ifx\EPSspecialstring\EPSboundingboxtag \getEPSboundingboxspec \global\chardef\EPSfound\plusone \else\ifx\EPSspecialstring\EPShiresboundingboxtag \getEPSboundingboxspec \global\chardef\EPSfound\plustwo \scratchcounter\zerocount \else\ifx\EPSspecialstring\EPSexactboundingboxtag \getEPSboundingboxspec \global\chardef\EPSfound\plustwo \scratchcounter\zerocount \else\ifx\EPSspecialstring\EPSmetapostspecialtag % only before finish! \global\chardef\EPSspecial\plusone % ah, we've met some MP extensions \else\ifx\EPSspecialstring\EPSmetapostspecialstag % only before finish! \global\chardef\EPSspecial\plusone % ah, we've met some MP extensions \else\ifx\EPSspecialstring\EPSpagetag \global\chardef\EPSstatus \plusone % we passed MP font defs \else \the\extraEPSpreambleparsers \fi\fi\fi\fi\fi\fi\fi \fi \else\ifnum\EPSfound>\zerocount % bb found \ifnum\EPScreator=\plusone % that is, we are dealing with MP output \ifcase\EPSstatus % we've run into MP fontdefs \or \dofinishEPSfile \fi \else\ifnum\scratchcounter>\plusthree % too late for mps creator (we don't want to run into crap data) \dofinishEPSfile \else \fi\fi \fi\fi} \def\getEPSboundingboxspec {\edef\EPSspecialstring{\EPSspecialcontent\space . . . . }% \expandafter\dogetEPSboundingboxspec\EPSspecialstring\end} \def\dogetEPSboundingboxspec#1 #2 #3 #4 #5\end {\gdef\EPSllx{#1}% \ifx\EPSllx\empty \dogetEPSboundingboxspec#2 #3 #4 #5\end \else \gdef\EPSlly{#2}% \gdef\EPSurx{#3}% \gdef\EPSury{#4}% \fi} \def\getEPScreatorspec {\edef\EPSspecialstring{\EPSspecialcontent\space . .}% \expandafter\dogetEPScreatorspec\EPSspecialstring\end} \def\dogetEPScreatorspec#1#2 #3\end {\edef\EPScreatorstring{#1#2}% \global\chardef\EPScreator\ifx\EPScreatorstring\EPSmetaposttag\plusone\else\zerocount\fi\relax} \def\dogetEPSpreambledata#1% can be combined with \extraEPSpreambleparsers {\bgroup \let\dofinishEPSfile\relax % dirty trick, read past all bboxes \dogetEPSboundingbox{#1}\!!widtha\!!heighta\!!widthb\!!heightb \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-res.lua0000644000175000017500000017047712134352503024112 0ustar norbertnorbertif not modules then modules = { } end modules ['data-res'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- In practice we will work within one tds tree, but i want to keep -- the option open to build tools that look at multiple trees, which is -- why we keep the tree specific data in a table. We used to pass the -- instance but for practical purposes we now avoid this and use a -- instance variable. We always have one instance active (sort of global). -- I will reimplement this module ... way too fuzzy now and we can work -- with some sensible constraints as it is only is used for context. -- todo: cache:/// home:/// selfautoparent:/// (sometime end 2012) local gsub, find, lower, upper, match, gmatch = string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys local next, type, rawget = next, type, rawget local os = os local P, S, R, C, Cc, Cs, Ct, Carg = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct, lpeg.Carg local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local formatters = string.formatters local filedirname = file.dirname local filebasename = file.basename local suffixonly = file.suffixonly local filejoin = file.join local collapsepath = file.collapsepath local joinpath = file.joinpath local allocate = utilities.storage.allocate local settings_to_array = utilities.parsers.settings_to_array local setmetatableindex = table.setmetatableindex local luasuffixes = utilities.lua.suffixes local getcurrentdir = lfs.currentdir local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local trace_detail = false trackers.register("resolvers.details", function(v) trace_detail = v end) local trace_expansions = false trackers.register("resolvers.expansions", function(v) trace_expansions = v end) local report_resolving = logs.reporter("resolvers","resolving") local resolvers = resolvers local expandedpathfromlist = resolvers.expandedpathfromlist local checkedvariable = resolvers.checkedvariable local splitconfigurationpath = resolvers.splitconfigurationpath local methodhandler = resolvers.methodhandler local initializesetter = utilities.setters.initialize local ostype, osname, osenv, ossetenv, osgetenv = os.type, os.name, os.env, os.setenv, os.getenv resolvers.cacheversion = '1.0.1' resolvers.configbanner = '' resolvers.homedir = environment.homedir resolvers.criticalvars = allocate { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF", "TEXMF", "TEXOS" } resolvers.luacnfname = "texmfcnf.lua" resolvers.luacnfstate = "unknown" -- The web2c tex binaries as well as kpse have built in paths for the configuration -- files and there can be a depressing truckload of them. This is actually the weak -- spot of a distribution. So we don't want: -- -- resolvers.luacnfspec = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c}' -- -- but instead (for instance) use: -- -- resolvers.luacnfspec = 'selfautoparent:{/texmf{-local,}{,/web2c}}' -- -- which does not make texlive happy as there is a texmf-local tree one level up -- (sigh), so we need this. We can assume web2c as mkiv does not run on older -- texlives anyway. -- -- texlive: -- -- selfautoloc: -- selfautoloc:/share/texmf-local/web2c -- selfautoloc:/share/texmf-dist/web2c -- selfautoloc:/share/texmf/web2c -- selfautoloc:/texmf-local/web2c -- selfautoloc:/texmf-dist/web2c -- selfautoloc:/texmf/web2c -- selfautodir: -- selfautodir:/share/texmf-local/web2c -- selfautodir:/share/texmf-dist/web2c -- selfautodir:/share/texmf/web2c -- selfautodir:/texmf-local/web2c -- selfautodir:/texmf-dist/web2c -- selfautodir:/texmf/web2c -- selfautoparent:/../texmf-local/web2c -- selfautoparent: -- selfautoparent:/share/texmf-local/web2c -- selfautoparent:/share/texmf-dist/web2c -- selfautoparent:/share/texmf/web2c -- selfautoparent:/texmf-local/web2c -- selfautoparent:/texmf-dist/web2c -- selfautoparent:/texmf/web2c -- -- minimals: -- -- home:texmf/web2c -- selfautoparent:texmf-local/web2c -- selfautoparent:texmf-context/web2c -- selfautoparent:texmf/web2c -- This is a real mess: you don't want to know what creepy paths end up in the default -- configuration spec, for instance nested texmf- paths. I'd rather get away from it and -- specify a proper search sequence but alas ... it is not permitted in texlive and there -- is no way to check if we run a minimals as texmf-context is not in that spec. It's a -- compiled-in permutation of historics with the selfautoloc, selfautodir, selfautoparent -- resulting in weird combinations. So, when we eventually check the 30 something paths -- we also report weird ones, with weird being: (1) duplicate /texmf or (2) no /web2c in -- the names. if environment.default_texmfcnf then resolvers.luacnfspec = "home:texmf/web2c;" .. environment.default_texmfcnf -- texlive + home: for taco etc else resolvers.luacnfspec = concat ( { "home:texmf/web2c", "selfautoparent:/texmf-local/web2c", "selfautoparent:/texmf-context/web2c", "selfautoparent:/texmf-dist/web2c", "selfautoparent:/texmf/web2c", }, ";") end local unset_variable = "unset" local formats = resolvers.formats local suffixes = resolvers.suffixes local dangerous = resolvers.dangerous local suffixmap = resolvers.suffixmap resolvers.defaultsuffixes = { "tex" } -- "mkiv", "cld" -- too tricky resolvers.instance = resolvers.instance or nil -- the current one (slow access) local instance = resolvers.instance or nil -- the current one (fast access) -- An instance has an environment (coming from the outside, kept raw), variables -- (coming from the configuration file), and expansions (variables with nested -- variables replaced). One can push something into the outer environment and -- its internal copy, but only the later one will be the raw unprefixed variant. function resolvers.setenv(key,value,raw) if instance then -- this one will be consulted first when we stay inside -- the current environment (prefixes are not resolved here) instance.environment[key] = value -- we feed back into the environment, and as this is used -- by other applications (via os.execute) we need to make -- sure that prefixes are resolve ossetenv(key,raw and value or resolvers.resolve(value)) end end -- Beware we don't want empty here as this one can be called early on -- and therefore we use rawget. local function getenv(key) local value = rawget(instance.environment,key) if value and value ~= "" then return value else local e = osgetenv(key) return e ~= nil and e ~= "" and checkedvariable(e) or "" end end resolvers.getenv = getenv resolvers.env = getenv -- We are going to use some metatable trickery where we backtrack from -- expansion to variable to environment. local function resolve(k) return instance.expansions[k] end local dollarstripper = lpeg.stripper("$") local inhibitstripper = P("!")^0 * Cs(P(1)^0) local backslashswapper = lpeg.replacer("\\","/") local somevariable = P("$") / "" local somekey = C(R("az","AZ","09","__","--")^1) local somethingelse = P(";") * ((1-S("!{}/\\"))^1 * P(";") / "") + P(";") * (P(";") / "") + P(1) local variableexpander = Cs( (somevariable * (somekey/resolve) + somethingelse)^1 ) local cleaner = P("\\") / "/" + P(";") * S("!{}/\\")^0 * P(";")^1 / ";" local variablecleaner = Cs((cleaner + P(1))^0) local somevariable = R("az","AZ","09","__","--")^1 / resolve local variable = (P("$")/"") * (somevariable + (P("{")/"") * somevariable * (P("}")/"")) local variableresolver = Cs((variable + P(1))^0) local function expandedvariable(var) return lpegmatch(variableexpander,var) or var end function resolvers.newinstance() -- todo: all vars will become lowercase and alphanum only if trace_locating then report_resolving("creating instance") end local environment, variables, expansions, order = allocate(), allocate(), allocate(), allocate() local newinstance = { environment = environment, variables = variables, expansions = expansions, order = order, files = allocate(), setups = allocate(), found = allocate(), foundintrees = allocate(), hashes = allocate(), hashed = allocate(), specification = allocate(), lists = allocate(), data = allocate(), -- only for loading fakepaths = allocate(), remember = true, diskcache = true, renewcache = false, renewtree = false, loaderror = false, savelists = true, pattern = nil, -- lists force_suffixes = true, } setmetatableindex(variables,function(t,k) local v for i=1,#order do v = order[i][k] if v ~= nil then t[k] = v return v end end if v == nil then v = "" end t[k] = v return v end) setmetatableindex(environment, function(t,k) local v = osgetenv(k) if v == nil then v = variables[k] end if v ~= nil then v = checkedvariable(v) or "" end v = resolvers.repath(v) -- for taco who has a : separated osfontdir t[k] = v return v end) setmetatableindex(expansions, function(t,k) local v = environment[k] if type(v) == "string" then v = lpegmatch(variableresolver,v) v = lpegmatch(variablecleaner,v) end t[k] = v return v end) return newinstance end function resolvers.setinstance(someinstance) -- only one instance is active instance = someinstance resolvers.instance = someinstance return someinstance end function resolvers.reset() return resolvers.setinstance(resolvers.newinstance()) end local function reset_hashes() instance.lists = { } instance.found = { } end local slash = P("/") local pathexpressionpattern = Cs ( -- create lpeg instead (2013/2014) Cc("^") * ( Cc("%") * S(".-") + slash^2 * P(-1) / "/.*" -- + slash^2 / "/.-/" -- + slash^2 / "/[^/]*/*" -- too general + slash^2 / "/" + (1-slash) * P(-1) * Cc("/") + P(1) )^1 * Cc("$") -- yes or no $ ) local cache = { } local function makepathexpression(str) if str == "." then return "^%./$" else local c = cache[str] if not c then c = lpegmatch(pathexpressionpattern,str) cache[str] = c end return c end end local function reportcriticalvariables(cnfspec) if trace_locating then for i=1,#resolvers.criticalvars do local k = resolvers.criticalvars[i] local v = resolvers.getenv(k) or "unknown" -- this one will not resolve ! report_resolving("variable %a set to %a",k,v) end report_resolving() if cnfspec then report_resolving("using configuration specification %a",type(cnfspec) == "table" and concat(cnfspec,",") or cnfspec) end report_resolving() end reportcriticalvariables = function() end end local function identify_configuration_files() local specification = instance.specification if #specification == 0 then local cnfspec = getenv("TEXMFCNF") if cnfspec == "" then cnfspec = resolvers.luacnfspec resolvers.luacnfstate = "default" else resolvers.luacnfstate = "environment" end reportcriticalvariables(cnfspec) local cnfpaths = expandedpathfromlist(resolvers.splitpath(cnfspec)) local luacnfname = resolvers.luacnfname for i=1,#cnfpaths do local filepath = cnfpaths[i] local filename = collapsepath(filejoin(filepath,luacnfname)) local realname = resolvers.resolve(filename) -- can still have "//" ... needs checking -- todo: environment.skipweirdcnfpaths directive if trace_locating then local fullpath = gsub(resolvers.resolve(collapsepath(filepath)),"//","/") local weirdpath = find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c") report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath) end if lfs.isfile(realname) then specification[#specification+1] = filename -- unresolved as we use it in matching, relocatable if trace_locating then report_resolving("found configuration file %a",realname) end end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("configuration files already identified") end end local function load_configuration_files() local specification = instance.specification if #specification > 0 then local luacnfname = resolvers.luacnfname for i=1,#specification do local filename = specification[i] local pathname = filedirname(filename) local filename = filejoin(pathname,luacnfname) local realname = resolvers.resolve(filename) -- no shortcut local blob = loadfile(realname) if blob then local setups = instance.setups local data = blob() local parent = data and data.parent if parent then local filename = filejoin(pathname,parent) local realname = resolvers.resolve(filename) -- no shortcut local blob = loadfile(realname) if blob then local parentdata = blob() if parentdata then report_resolving("loading configuration file %a",filename) data = table.merged(parentdata,data) end end end data = data and data.content if data then if trace_locating then report_resolving("loading configuration file %a",filename) report_resolving() end local variables = data.variables or { } local warning = false for k, v in next, data do local variant = type(v) if variant == "table" then initializesetter(filename,k,v) elseif variables[k] == nil then if trace_locating and not warning then report_resolving("variables like %a in configuration file %a should move to the 'variables' subtable", k,resolvers.resolve(filename)) warning = true end variables[k] = v end end setups[pathname] = variables if resolvers.luacnfstate == "default" then -- the following code is not tested local cnfspec = variables["TEXMFCNF"] if cnfspec then if trace_locating then report_resolving("reloading configuration due to TEXMF redefinition") end -- we push the value into the main environment (osenv) so -- that it takes precedence over the default one and therefore -- also over following definitions resolvers.setenv("TEXMFCNF",cnfspec) -- resolves prefixes -- we now identify and load the specified configuration files instance.specification = { } identify_configuration_files() load_configuration_files() -- we prevent further overload of the configuration variable resolvers.luacnfstate = "configuration" -- we quit the outer loop break end end else if trace_locating then report_resolving("skipping configuration file %a (no content)",filename) end setups[pathname] = { } instance.loaderror = true end elseif trace_locating then report_resolving("skipping configuration file %a (no valid format)",filename) end instance.order[#instance.order+1] = instance.setups[pathname] if instance.loaderror then break end end elseif trace_locating then report_resolving("warning: no lua configuration files found") end end -- scheme magic ... database loading local function load_file_databases() instance.loaderror, instance.files = false, allocate() if not instance.renewcache then local hashes = instance.hashes for k=1,#hashes do local hash = hashes[k] resolvers.hashers.byscheme(hash.type,hash.name) if instance.loaderror then break end end end end local function locate_file_databases() -- todo: cache:// and tree:// (runtime) local texmfpaths = resolvers.expandedpathlist("TEXMF") if #texmfpaths > 0 then for i=1,#texmfpaths do local path = collapsepath(texmfpaths[i]) path = gsub(path,"/+$","") -- in case $HOME expands to something with a trailing / local stripped = lpegmatch(inhibitstripper,path) -- the !! thing if stripped ~= "" then local runtime = stripped == path path = resolvers.cleanpath(path) local spec = resolvers.splitmethod(stripped) if runtime and (spec.noscheme or spec.scheme == "file") then stripped = "tree:///" .. stripped elseif spec.scheme == "cache" or spec.scheme == "file" then stripped = spec.path end if trace_locating then if runtime then report_resolving("locating list of %a (runtime) (%s)",path,stripped) else report_resolving("locating list of %a (cached)",path) end end methodhandler('locators',stripped) end end if trace_locating then report_resolving() end elseif trace_locating then report_resolving("no texmf paths are defined (using TEXMF)") end end local function generate_file_databases() local hashes = instance.hashes for k=1,#hashes do local hash = hashes[k] methodhandler('generators',hash.name) end if trace_locating then report_resolving() end end local function save_file_databases() -- will become cachers for i=1,#instance.hashes do local hash = instance.hashes[i] local cachename = hash.name if hash.cache then local content = instance.files[cachename] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",cachename) end caches.savecontent(cachename,"files",content) elseif trace_locating then report_resolving("not saving runtime tree %a",cachename) end end end function resolvers.renew(hashname) if hashname and hashname ~= "" then local expanded = resolvers.expansion(hashname) or "" if expanded ~= "" then if trace_locating then report_resolving("identifying tree %a from %a",expanded,hashname) end hashname = expanded else if trace_locating then report_resolving("identifying tree %a",hashname) end end local realpath = resolvers.resolve(hashname) if lfs.isdir(realpath) then if trace_locating then report_resolving("using path %a",realpath) end methodhandler('generators',hashname) -- could be shared local content = instance.files[hashname] caches.collapsecontent(content) if trace_locating then report_resolving("saving tree %a",hashname) end caches.savecontent(hashname,"files",content) -- till here else report_resolving("invalid path %a",realpath) end end end local function load_databases() locate_file_databases() if instance.diskcache and not instance.renewcache then load_file_databases() if instance.loaderror then generate_file_databases() save_file_databases() end else generate_file_databases() if instance.renewcache then save_file_databases() end end end function resolvers.appendhash(type,name,cache) -- safeguard ... tricky as it's actually a bug when seen twice if not instance.hashed[name] then if trace_locating then report_resolving("hash %a appended",name) end insert(instance.hashes, { type = type, name = name, cache = cache } ) instance.hashed[name] = cache end end function resolvers.prependhash(type,name,cache) -- safeguard ... tricky as it's actually a bug when seen twice if not instance.hashed[name] then if trace_locating then report_resolving("hash %a prepended",name) end insert(instance.hashes, 1, { type = type, name = name, cache = cache } ) instance.hashed[name] = cache end end function resolvers.extendtexmfvariable(specification) -- crap, we could better prepend the hash local t = resolvers.splitpath(getenv("TEXMF")) -- okay? insert(t,1,specification) local newspec = concat(t,",") -- not ; if instance.environment["TEXMF"] then instance.environment["TEXMF"] = newspec elseif instance.variables["TEXMF"] then instance.variables["TEXMF"] = newspec else -- weird end reset_hashes() end function resolvers.splitexpansions() local ie = instance.expansions for k,v in next, ie do local t, tn, h, p = { }, 0, { }, splitconfigurationpath(v) for kk=1,#p do local vv = p[kk] if vv ~= "" and not h[vv] then tn = tn + 1 t[tn] = vv h[vv] = true end end if #t > 1 then ie[k] = t else ie[k] = t[1] end end end -- end of split/join code -- we used to have 'files' and 'configurations' so therefore the following -- shared function function resolvers.datastate() return caches.contentstate() end function resolvers.variable(name) local name = name and lpegmatch(dollarstripper,name) local result = name and instance.variables[name] return result ~= nil and result or "" end function resolvers.expansion(name) local name = name and lpegmatch(dollarstripper,name) local result = name and instance.expansions[name] return result ~= nil and result or "" end function resolvers.unexpandedpathlist(str) local pth = resolvers.variable(str) local lst = resolvers.splitpath(pth) return expandedpathfromlist(lst) end function resolvers.unexpandedpath(str) return joinpath(resolvers.unexpandedpathlist(str)) end local done = { } function resolvers.resetextrapath() local ep = instance.extra_paths if not ep then ep, done = { }, { } instance.extra_paths = ep elseif #ep > 0 then instance.lists, done = { }, { } end end function resolvers.registerextrapath(paths,subpaths) paths = settings_to_array(paths) subpaths = settings_to_array(subpaths) local ep = instance.extra_paths or { } local oldn = #ep local newn = oldn local nofpaths = #paths local nofsubpaths = #subpaths if nofpaths > 0 then if nofsubpaths > 0 then for i=1,nofpaths do local p = paths[i] for j=1,nofsubpaths do local s = subpaths[j] local ps = p .. "/" .. s if not done[ps] then newn = newn + 1 ep[newn] = resolvers.cleanpath(ps) done[ps] = true end end end else for i=1,nofpaths do local p = paths[i] if not done[p] then newn = newn + 1 ep[newn] = resolvers.cleanpath(p) done[p] = true end end end elseif nofsubpaths > 0 then for i=1,oldn do for j=1,nofsubpaths do local s = subpaths[j] local ps = ep[i] .. "/" .. s if not done[ps] then newn = newn + 1 ep[newn] = resolvers.cleanpath(ps) done[ps] = true end end end end if newn > 0 then instance.extra_paths = ep -- register paths end if newn > oldn then instance.lists = { } -- erase the cache end end local function made_list(instance,list) local ep = instance.extra_paths if not ep or #ep == 0 then return list else local done, new, newn = { }, { }, 0 -- honour . .. ../.. but only when at the start for k=1,#list do local v = list[k] if not done[v] then if find(v,"^[%.%/]$") then done[v] = true newn = newn + 1 new[newn] = v else break end end end -- first the extra paths for k=1,#ep do local v = ep[k] if not done[v] then done[v] = true newn = newn + 1 new[newn] = v end end -- next the formal paths for k=1,#list do local v = list[k] if not done[v] then done[v] = true newn = newn + 1 new[newn] = v end end return new end end function resolvers.cleanpathlist(str) local t = resolvers.expandedpathlist(str) if t then for i=1,#t do t[i] = collapsepath(resolvers.cleanpath(t[i])) end end return t end function resolvers.expandpath(str) return joinpath(resolvers.expandedpathlist(str)) end function resolvers.expandedpathlist(str) if not str then return { } elseif instance.savelists then str = lpegmatch(dollarstripper,str) local lists = instance.lists local lst = lists[str] if not lst then local l = made_list(instance,resolvers.splitpath(resolvers.expansion(str))) lst = expandedpathfromlist(l) lists[str] = lst end return lst else local lst = resolvers.splitpath(resolvers.expansion(str)) return made_list(instance,expandedpathfromlist(lst)) end end function resolvers.expandedpathlistfromvariable(str) -- brrr / could also have cleaner ^!! /$ // str = lpegmatch(dollarstripper,str) local tmp = resolvers.variableofformatorsuffix(str) return resolvers.expandedpathlist(tmp ~= "" and tmp or str) end function resolvers.expandpathfromvariable(str) return joinpath(resolvers.expandedpathlistfromvariable(str)) end function resolvers.expandbraces(str) -- output variable and brace expansion of STRING -- local ori = resolvers.variable(str) -- if ori == "" then local ori = str -- end local pth = expandedpathfromlist(resolvers.splitpath(ori)) return joinpath(pth) end function resolvers.registerfilehash(name,content,someerror) if content then instance.files[name] = content else instance.files[name] = { } if somerror == true then -- can be unset instance.loaderror = someerror end end end local function isreadable(name) local readable = lfs.isfile(name) -- not file.is_readable(name) asit can be a dir if trace_detail then if readable then report_resolving("file %a is readable",name) else report_resolving("file %a is not readable", name) end end return readable end -- name -- name/name local function collect_files(names) local filelist, noffiles = { }, 0 for k=1,#names do local fname = names[k] if trace_detail then report_resolving("checking name %a",fname) end local bname = filebasename(fname) local dname = filedirname(fname) if dname == "" or find(dname,"^%.") then dname = false else dname = gsub(dname,"%*",".*") dname = "/" .. dname .. "$" end local hashes = instance.hashes for h=1,#hashes do local hash = hashes[h] local blobpath = hash.name local files = blobpath and instance.files[blobpath] if files then if trace_detail then report_resolving("deep checking %a, base %a, pattern %a",blobpath,bname,dname) end local blobfile = files[bname] if not blobfile then local rname = "remap:"..bname blobfile = files[rname] if blobfile then bname = files[rname] blobfile = files[bname] end end if blobfile then local blobroot = files.__path__ or blobpath if type(blobfile) == 'string' then if not dname or find(blobfile,dname) then local variant = hash.type -- local search = filejoin(blobpath,blobfile,bname) local search = filejoin(blobroot,blobfile,bname) local result = methodhandler('concatinators',hash.type,blobroot,blobfile,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles = noffiles + 1 filelist[noffiles] = { variant, search, result } end else for kk=1,#blobfile do local vv = blobfile[kk] if not dname or find(vv,dname) then local variant = hash.type -- local search = filejoin(blobpath,vv,bname) local search = filejoin(blobroot,vv,bname) local result = methodhandler('concatinators',hash.type,blobroot,vv,bname) if trace_detail then report_resolving("match: variant %a, search %a, result %a",variant,search,result) end noffiles = noffiles + 1 filelist[noffiles] = { variant, search, result } end end end end elseif trace_locating then report_resolving("no match in %a (%s)",blobpath,bname) end end end return noffiles > 0 and filelist or nil end local fit = { } function resolvers.registerintrees(filename,format,filetype,usedmethod,foundname) local foundintrees = instance.foundintrees if usedmethod == "direct" and filename == foundname and fit[foundname] then -- just an extra lookup after a test on presence else local t = { filename = filename, format = format ~= "" and format or nil, filetype = filetype ~= "" and filetype or nil, usedmethod = usedmethod, foundname = foundname, } fit[foundname] = t foundintrees[#foundintrees+1] = t end end -- split the next one up for readability (but this module needs a cleanup anyway) local function can_be_dir(name) -- can become local local fakepaths = instance.fakepaths if not fakepaths[name] then if lfs.isdir(name) then fakepaths[name] = 1 -- directory else fakepaths[name] = 2 -- no directory end end return fakepaths[name] == 1 end local preparetreepattern = Cs((P(".")/"%%." + P("-")/"%%-" + P(1))^0 * Cc("$")) -- -- -- begin of main file search routing -- -- -- needs checking as previous has been patched local collect_instance_files local function find_analyze(filename,askedformat,allresults) local filetype, wantedfiles, ext = '', { }, suffixonly(filename) -- too tricky as filename can be bla.1.2.3: -- -- if not suffixmap[ext] then -- wantedfiles[#wantedfiles+1] = filename -- end wantedfiles[#wantedfiles+1] = filename if askedformat == "" then if ext == "" or not suffixmap[ext] then local defaultsuffixes = resolvers.defaultsuffixes for i=1,#defaultsuffixes do local forcedname = filename .. '.' .. defaultsuffixes[i] wantedfiles[#wantedfiles+1] = forcedname filetype = resolvers.formatofsuffix(forcedname) if trace_locating then report_resolving("forcing filetype %a",filetype) end end else filetype = resolvers.formatofsuffix(filename) if trace_locating then report_resolving("using suffix based filetype %a",filetype) end end else if ext == "" or not suffixmap[ext] then local format_suffixes = suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do wantedfiles[#wantedfiles+1] = filename .. "." .. format_suffixes[i] end end end filetype = askedformat if trace_locating then report_resolving("using given filetype %a",filetype) end end return filetype, wantedfiles end local function find_direct(filename,allresults) if not dangerous[askedformat] and isreadable(filename) then if trace_detail then report_resolving("file %a found directly",filename) end return "direct", { filename } end end local function find_wildcard(filename,allresults) if find(filename,'%*') then if trace_locating then report_resolving("checking wildcard %a", filename) end local method, result = resolvers.findwildcardfiles(filename) if result then return "wildcard", result end end end local function find_qualified(filename,allresults,askedformat,alsostripped) -- this one will be split too if not file.is_qualified_path(filename) then return end if trace_locating then report_resolving("checking qualified name %a", filename) end if isreadable(filename) then if trace_detail then report_resolving("qualified file %a found", filename) end return "qualified", { filename } end if trace_detail then report_resolving("locating qualified file %a", filename) end local forcedname, suffix = "", suffixonly(filename) if suffix == "" then -- why local format_suffixes = askedformat == "" and resolvers.defaultsuffixes or suffixes[askedformat] if format_suffixes then for i=1,#format_suffixes do local s = format_suffixes[i] forcedname = filename .. "." .. s if isreadable(forcedname) then if trace_locating then report_resolving("no suffix, forcing format filetype %a", s) end return "qualified", { forcedname } end end end end if alsostripped and suffix and suffix ~= "" then -- try to find in tree (no suffix manipulation), here we search for the -- matching last part of the name local basename = filebasename(filename) local pattern = lpegmatch(preparetreepattern,filename) -- messy .. to be sorted out local savedformat = askedformat local format = savedformat or "" if format == "" then askedformat = resolvers.formatofsuffix(suffix) end if not format then askedformat = "othertextfiles" -- kind of everything, maybe all end -- -- is this really what we want? basename if we have an explicit path? -- if basename ~= filename then local resolved = collect_instance_files(basename,askedformat,allresults) if #resolved == 0 then local lowered = lower(basename) if filename ~= lowered then resolved = collect_instance_files(lowered,askedformat,allresults) end end resolvers.format = savedformat -- if #resolved > 0 then local result = { } for r=1,#resolved do local rr = resolved[r] if find(rr,pattern) then result[#result+1] = rr end end if #result > 0 then return "qualified", result end end end -- a real wildcard: -- -- local filelist = collect_files({basename}) -- result = { } -- for f=1,#filelist do -- local ff = filelist[f][3] or "" -- if find(ff,pattern) then -- result[#result+1], ok = ff, true -- end -- end -- if #result > 0 then -- return "qualified", result -- end end end local function check_subpath(fname) if isreadable(fname) then if trace_detail then report_resolving("found %a by deep scanning",fname) end return fname end end local function find_intree(filename,filetype,wantedfiles,allresults) local typespec = resolvers.variableofformat(filetype) local pathlist = resolvers.expandedpathlist(typespec) local method = "intree" if pathlist and #pathlist > 0 then -- list search local filelist = collect_files(wantedfiles) local dirlist = { } if filelist then for i=1,#filelist do dirlist[i] = filedirname(filelist[i][3]) .. "/" -- was [2] .. gamble end end if trace_detail then report_resolving("checking filename %a",filename) end local resolve = resolvers.resolve local result = { } -- pathlist : resolved -- dirlist : unresolved or resolved -- filelist : unresolved for k=1,#pathlist do local path = pathlist[k] local pathname = lpegmatch(inhibitstripper,path) local doscan = path == pathname -- no ^!! if not find (pathname,'//$') then doscan = false -- we check directly on the path end local done = false -- using file list if filelist then -- database -- compare list entries with permitted pattern -- /xx /xx// local expression = makepathexpression(pathname) if trace_detail then report_resolving("using pattern %a for path %a",expression,pathname) end for k=1,#filelist do local fl = filelist[k] local f = fl[2] local d = dirlist[k] -- resolve is new: if find(d,expression) or find(resolve(d),expression) then -- todo, test for readable result[#result+1] = resolve(fl[3]) -- no shortcut done = true if allresults then if trace_detail then report_resolving("match to %a in hash for file %a and path %a, continue scanning",expression,f,d) end else if trace_detail then report_resolving("match to %a in hash for file %a and path %a, quit scanning",expression,f,d) end break end elseif trace_detail then report_resolving("no match to %a in hash for file %a and path %a",expression,f,d) end end end if done then method = "database" else method = "filesystem" -- bonus, even when !! is specified pathname = gsub(pathname,"/+$","") pathname = resolve(pathname) local scheme = url.hasscheme(pathname) if not scheme or scheme == "file" then local pname = gsub(pathname,"%.%*$",'') if not find(pname,"%*") then if can_be_dir(pname) then -- quick root scan first for k=1,#wantedfiles do local w = wantedfiles[k] local fname = check_subpath(filejoin(pname,w)) if fname then result[#result+1] = fname done = true if not allresults then break end end end if not done and doscan then -- collect files in path (and cache the result) local files = resolvers.simplescanfiles(pname,false,true) for k=1,#wantedfiles do local w = wantedfiles[k] local subpath = files[w] if not subpath or subpath == "" then -- rootscan already done elseif type(subpath) == "string" then local fname = check_subpath(filejoin(pname,subpath,w)) if fname then result[#result+1] = fname done = true if not allresults then break end end else for i=1,#subpath do local sp = subpath[i] if sp == "" then -- roottest already done else local fname = check_subpath(filejoin(pname,sp,w)) if fname then result[#result+1] = fname done = true if not allresults then break end end end end if done and not allresults then break end end end end end else -- no access needed for non existing path, speedup (esp in large tree with lots of fake) end end end -- todo recursive scanning if done and not allresults then break end end if #result > 0 then return method, result end end end local function find_onpath(filename,filetype,wantedfiles,allresults) if trace_detail then report_resolving("checking filename %a, filetype %a, wanted files %a",filename,filetype,concat(wantedfiles," | ")) end local result = { } for k=1,#wantedfiles do local fname = wantedfiles[k] if fname and isreadable(fname) then filename = fname result[#result+1] = filejoin('.',fname) if not allresults then break end end end if #result > 0 then return "onpath", result end end local function find_otherwise(filename,filetype,wantedfiles,allresults) -- other text files | any | whatever local filelist = collect_files(wantedfiles) local fl = filelist and filelist[1] if fl then return "otherwise", { resolvers.resolve(fl[3]) } -- filename end end -- we could have a loop over the 6 functions but then we'd have to -- always analyze collect_instance_files = function(filename,askedformat,allresults) -- uses nested askedformat = askedformat or "" filename = collapsepath(filename,".") filename = gsub(filename,"^%./",getcurrentdir().."/") -- we will merge dir.expandname and collapse some day if allresults then -- no need for caching, only used for tracing local filetype, wantedfiles = find_analyze(filename,askedformat) local results = { { find_direct (filename,true) }, { find_wildcard (filename,true) }, { find_qualified(filename,true,askedformat) }, -- we can add ,true if we want to find dups { find_intree (filename,filetype,wantedfiles,true) }, { find_onpath (filename,filetype,wantedfiles,true) }, { find_otherwise(filename,filetype,wantedfiles,true) }, } local result, status, done = { }, { }, { } for k, r in next, results do local method, list = r[1], r[2] if method and list then for i=1,#list do local c = collapsepath(list[i]) if not done[c] then result[#result+1] = c done[c] = true end status[#status+1] = formatters["%-10s: %s"](method,c) end end end if trace_detail then report_resolving("lookup status: %s",table.serialize(status,filename)) end return result, status else local method, result, stamp, filetype, wantedfiles if instance.remember then stamp = formatters["%s--%s"](filename,askedformat) result = stamp and instance.found[stamp] if result then if trace_locating then report_resolving("remembered file %a",filename) end return result end end method, result = find_direct(filename) if not result then method, result = find_wildcard(filename) if not result then method, result = find_qualified(filename,false,askedformat) if not result then filetype, wantedfiles = find_analyze(filename,askedformat) method, result = find_intree(filename,filetype,wantedfiles) if not result then method, result = find_onpath(filename,filetype,wantedfiles) if not result then method, result = find_otherwise(filename,filetype,wantedfiles) end end end end end if result and #result > 0 then local foundname = collapsepath(result[1]) resolvers.registerintrees(filename,askedformat,filetype,method,foundname) result = { foundname } else result = { } -- maybe false end if stamp then if trace_locating then report_resolving("remembering file %a",filename) end instance.found[stamp] = result end return result end end -- -- -- end of main file search routing -- -- -- local function findfiles(filename,filetype,allresults) local result, status = collect_instance_files(filename,filetype or "",allresults) if not result or #result == 0 then local lowered = lower(filename) if filename ~= lowered then result, status = collect_instance_files(lowered,filetype or "",allresults) end end return result or { }, status end function resolvers.findfiles(filename,filetype) return findfiles(filename,filetype,true) end function resolvers.findfile(filename,filetype) return findfiles(filename,filetype,false)[1] or "" end function resolvers.findpath(filename,filetype) return filedirname(findfiles(filename,filetype,false)[1] or "") end local function findgivenfiles(filename,allresults) local bname, result = filebasename(filename), { } local hashes = instance.hashes local noffound = 0 for k=1,#hashes do local hash = hashes[k] local files = instance.files[hash.name] or { } local blist = files[bname] if not blist then local rname = "remap:"..bname blist = files[rname] if blist then bname = files[rname] blist = files[bname] end end if blist then if type(blist) == 'string' then local found = methodhandler('concatinators',hash.type,hash.name,blist,bname) or "" if found ~= "" then noffound = noffound + 1 result[noffound] = resolvers.resolve(found) if not allresults then break end end else for kk=1,#blist do local vv = blist[kk] local found = methodhandler('concatinators',hash.type,hash.name,vv,bname) or "" if found ~= "" then noffound = noffound + 1 result[noffound] = resolvers.resolve(found) if not allresults then break end end end end end end return result end function resolvers.findgivenfiles(filename) return findgivenfiles(filename,true) end function resolvers.findgivenfile(filename) return findgivenfiles(filename,false)[1] or "" end local function doit(path,blist,bname,tag,variant,result,allresults) local done = false if blist and variant then local resolve = resolvers.resolve -- added if type(blist) == 'string' then -- make function and share code if find(lower(blist),path) then local full = methodhandler('concatinators',variant,tag,blist,bname) or "" result[#result+1] = resolve(full) done = true end else for kk=1,#blist do local vv = blist[kk] if find(lower(vv),path) then local full = methodhandler('concatinators',variant,tag,vv,bname) or "" result[#result+1] = resolve(full) done = true if not allresults then break end end end end end return done end --~ local makewildcard = Cs( --~ (P("^")^0 * P("/") * P(-1) + P(-1)) /".*" --~ + (P("^")^0 * P("/") / "") * (P("*")/".*" + P("-")/"%%-" + P("?")/"."+ P("\\")/"/" + P(1))^0 --~ ) local makewildcard = Cs( (P("^")^0 * P("/") * P(-1) + P(-1)) /".*" + (P("^")^0 * P("/") / "")^0 * (P("*")/".*" + P("-")/"%%-" + P(".")/"%%." + P("?")/"."+ P("\\")/"/" + P(1))^0 ) function resolvers.wildcardpattern(pattern) return lpegmatch(makewildcard,pattern) or pattern end local function findwildcardfiles(filename,allresults,result) -- todo: remap: and lpeg result = result or { } --~ local path = lower(lpegmatch(makewildcard,filedirname (filename))) --~ local name = lower(lpegmatch(makewildcard,filebasename(filename))) local base = filebasename(filename) local dirn = filedirname(filename) local path = lower(lpegmatch(makewildcard,dirn) or dirn) local name = lower(lpegmatch(makewildcard,base) or base) local files, done = instance.files, false if find(name,"%*") then local hashes = instance.hashes for k=1,#hashes do local hash = hashes[k] local hashname, hashtype = hash.name, hash.type for kk, hh in next, files[hashname] do if not find(kk,"^remap:") then if find(lower(kk),name) then if doit(path,hh,kk,hashname,hashtype,result,allresults) then done = true end if done and not allresults then break end end end end end else local hashes = instance.hashes for k=1,#hashes do local hash = hashes[k] local hashname, hashtype = hash.name, hash.type if doit(path,files[hashname][bname],bname,hashname,hashtype,result,allresults) then done = true end if done and not allresults then break end end end -- we can consider also searching the paths not in the database, but then -- we end up with a messy search (all // in all path specs) return result end function resolvers.findwildcardfiles(filename,result) return findwildcardfiles(filename,true,result) end function resolvers.findwildcardfile(filename) return findwildcardfiles(filename,false)[1] or "" end -- main user functions function resolvers.automount() -- implemented later end function resolvers.load(option) statistics.starttiming(instance) identify_configuration_files() load_configuration_files() if option ~= "nofiles" then load_databases() resolvers.automount() end statistics.stoptiming(instance) local files = instance.files return files and next(files) and true end function resolvers.loadtime() return statistics.elapsedtime(instance) end local function report(str) if trace_locating then report_resolving(str) -- has already verbose else print(str) end end function resolvers.dowithfilesandreport(command, files, ...) -- will move if files and #files > 0 then if trace_locating then report('') -- ? end if type(files) == "string" then files = { files } end for f=1,#files do local file = files[f] local result = command(file,...) if type(result) == 'string' then report(result) else for i=1,#result do report(result[i]) -- could be unpack end end end end end -- obsolete -- resolvers.varvalue = resolvers.variable -- output the value of variable $STRING. -- resolvers.expandvar = resolvers.expansion -- output variable expansion of STRING. function resolvers.showpath(str) -- output search path for file type NAME return joinpath(resolvers.expandedpathlist(resolvers.formatofvariable(str))) end function resolvers.registerfile(files, name, path) if files[name] then if type(files[name]) == 'string' then files[name] = { files[name], path } else files[name] = path end else files[name] = path end end function resolvers.dowithpath(name,func) local pathlist = resolvers.expandedpathlist(name) for i=1,#pathlist do func("^"..resolvers.cleanpath(pathlist[i])) end end function resolvers.dowithvariable(name,func) func(expandedvariable(name)) end function resolvers.locateformat(name) local engine = environment.ownmain or "luatex" local barename = file.removesuffix(name) local fullname = file.addsuffix(barename,"fmt") local fmtname = caches.getfirstreadablefile(fullname,"formats",engine) or "" if fmtname == "" then fmtname = resolvers.findfile(fullname) fmtname = resolvers.cleanpath(fmtname) end if fmtname ~= "" then local barename = file.removesuffix(fmtname) local luaname = file.addsuffix(barename,luasuffixes.lua) local lucname = file.addsuffix(barename,luasuffixes.luc) local luiname = file.addsuffix(barename,luasuffixes.lui) if lfs.isfile(luiname) then return barename, luiname elseif lfs.isfile(lucname) then return barename, lucname elseif lfs.isfile(luaname) then return barename, luaname end end return nil, nil end function resolvers.booleanvariable(str,default) local b = resolvers.expansion(str) if b == "" then return default else b = toboolean(b) return (b == nil and default) or b end end function resolvers.dowithfilesintree(pattern,handle,before,after) -- will move, can be a nice iterator instead local instance = resolvers.instance local hashes = instance.hashes for i=1,#hashes do local hash = hashes[i] local blobtype = hash.type local blobpath = hash.name if blobpath then if before then before(blobtype,blobpath,pattern) end local files = instance.files[blobpath] local total, checked, done = 0, 0, 0 if files then for k, v in table.sortedhash(files) do -- next, files do, beware: this is not the resolve order total = total + 1 if find(k,"^remap:") then -- forget about these elseif find(k,pattern) then if type(v) == "string" then checked = checked + 1 if handle(blobtype,blobpath,v,k) then done = done + 1 end else checked = checked + #v for i=1,#v do if handle(blobtype,blobpath,v[i],k) then done = done + 1 end end end end end end if after then after(blobtype,blobpath,pattern,total,checked,done) end end end end resolvers.obsolete = resolvers.obsolete or { } local obsolete = resolvers.obsolete resolvers.find_file = resolvers.findfile obsolete.find_file = resolvers.findfile resolvers.find_files = resolvers.findfiles obsolete.find_files = resolvers.findfiles context-2013.05.28.20130704/texmf-dist/tex/context/base/grph-wnd.lua0000644000175000017500000000325612130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['grph-wnd'] = { version = 1.001, comment = "companion to grph-inc.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Thanks to Luigi Scarso for making graphic magic work in luatex. -- -- \externalfigure[hacker.jpeg][width=4cm,conversion=gray.jpg] local converters, suffixes = figures.converters, figures.suffixes local trace_conversion = false trackers.register("figures.conversion", function(v) trace_conversion = v end) local report_wand = logs.reporter("graphics","wand") local function togray(oldname,newname) if lfs.isfile(oldname) then require("gmwand") if trace_conversion then report_wand("converting %a to %a using gmwand",oldname,newname) end gmwand.InitializeMagick("./") -- What does this path do? local wand = gmwand.NewMagickWand() gmwand.MagickReadImage(wand,oldname) gmwand.MagickSetImageColorspace(wand,gmwand.GRAYColorspace) gmwand.MagickWriteImages(wand,newname,1) gmwand.DestroyMagickWand(wand) else report_wand("unable to convert %a to %a using gmwand",oldname,newname) end end local formats = { "png", "jpg", "gif" } for i=1,#formats do local oldformat = formats[i] local newformat = "gray." .. oldformat if trace_conversion then report_wand("installing converter for %a to %a",oldformat,newformat) end converters[oldformat] = converters[oldformat] or { } converters[oldformat][newformat] = togray suffixes [newformat] = oldformat end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-04.tex0000644000175000017500000002237111754241457023701 0ustar norbertnorbert%D \module %D [ file=s-pre-04, %D version=1998.09.06, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 4, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[pre-general] %D \macros %D {setupbodyfont} %D %D This is just another environment for typesetting interactive %D presentations. I wrote this module on behalf of a course I %D gave for the United Kingdom \TeX\ users group. \setupbodyfont[ams,pos,14.4pt] %D \macros %D {setupcolors,definecolor} %D %D I started using dark blue for the navigational elements. In %D that context, dark red is a logical choice for the contrast %D color. While playing around with the navigational elements %D I decided to use the not so dominant color yellow for the %D status bar. %D %D A few days before I wrote this style, the recent acquisition %D of Mondriaans last painting by the Dutch governement was a %D hot topic in the dutch news scenary. Therefore I decided to %D replace the rather dull title page by something more %D colorful, in mondriaan colors, but far more random than any %D of his paintings. For consistence we remap the already %D defined primary colors. \setupcolors [state=start] \definecolor [NoneColor] [s=.6] \definecolor [GotoColor] [b=.6] \definecolor[blue] [GotoColor] \definecolor [ExitColor] [r=.6] \definecolor[red] [ExitColor] \definecolor [JumpColor] [s=.6] \definecolor [UserColor] [g=.6] \definecolor[green] [UserColor] \definecolor [StepColor] [r=.6,g=.6] \definecolor[yellow][StepColor] \definecolor [PageColor] [s=.80] \definecolor[gray] [PageColor] \definecolor [TextColor] [s=.90] %D \macros %D {setuppapersize} %D %D As usual, we take a screen oriented paper size: \setuppapersize [S6][S6] %D \macros %D {setuplayout,setupinteractionscreen} %D %D The layout definition fits into this $600\times450$ point %D area, but the dimensions are somewhat diffused by the text %D background offset. \setuplayout [width=530pt, height=400pt, header=0pt, footer=0pt, backspace=15pt, topspace=15pt, bottomdistance=15pt, bottom=10pt, margin=0pt, rightedgedistance=15pt, rightedge=30pt] \setupinteractionscreen [option=max] %D \macros %D {setupbackgrounds} %D %D Both the page and the text area have a gray background. %D The \type {[text,text]} area also has an offset. Later we %D will see that we have to compensate for that in the %D navigational areas. \setupbackgrounds [page] [background=color, backgroundcolor=PageColor] \setupbackgrounds [text][text] [background=color, backgroundcolor=TextColor, backgroundoffset=5pt] %D \macros %D {setupinteraction} %D %D For convenient navigation, we turn on interaction. \setupinteraction [state=start, menu=on, color=UserColor, contrastcolor=NoneColor] %D \macros %D {setupsubpagenumber} %D %D When navigating the document, we keep the title page out %D of sight, therefore we use sub page numbers. \setupsubpagenumber [state=start, way=bytext] %D \macros %D {setupinteractionmenu} %D %D There is only one interaction menu, located in the right %D edge of the screen. Both offsets enlarge the edge by the %D same amount as the text background offset. \setupinteractionmenu [right] [state=start, frame=off, strut=no, offset=0pt, inbetween=, bottomoffset=-5pt, topoffset=-5pt] %D \macros %D {startinteractionmenu} %D %D The menu itself is not that spectacular. We use the %D start||stop alternative for setting the content. The macro %D \type {\interactioncolor} expands into either the %D interaction color or the contrast color, the latter only %D when no jump is possible. \startinteractionmenu[right] \setupinteraction[color=GotoColor] \but [previoussubpage] \Triangle {90}\framedwidth\interactioncolor \\ \vskip10pt \but [nextsubpage] \Triangle{270}\framedwidth\interactioncolor \\ \vfill \but [PreviousJump] \Triangle{180}\framedwidth{NoneColor} \\ \vskip-5pt \but [NextJump] \Triangle {0}\framedwidth{NoneColor} \\ \stopinteractionmenu %D \macros %D {setupinteractionbar} %D %D The interaction bar at the bottom is also larger than the %D normal width of the bottom area. \setupinteractionbar [alternative=f, width=\textwidth, height=\bottomheight, distance=10pt, color=NoneColor, contrastcolor=StepColor] %D \macros %D {setupbottomtexts} %D %D The bar is centered in the middle. \setupbottomtexts [\interactionbar] %D We can exit viewing with a close button, located on the %D rightmost bottom area. \def\CloseButton {\button [width=\rightedgewidth,height=\bottomheight,offset=overlay, background=color,backgroundcolor=ExitColor,frame=off] {}% [CloseDocument]} \setupbottomtexts [edge][][\CloseButton] %D \macros %D {definesymbol,setupitemize} %D %D Because some prominent things are rectangular or triangular, %D we prefer some different symbols in itemizations: \definesymbol[1][$\blacktriangleright$] \definesymbol[2][$\blacktriangledown$] \definesymbol[3][$\blacktriangleright$] \definesymbol[4][$\blacktriangledown$] \setupitemize[each][color=NoneColor] %D \macros %D {TitlePage,defineoverlay,button,setupalign, %D setupbackgrounds,setupinteraction,setupinteractionbar, %D startstandardmakeup,switchtobodyfont,setupinterlinespace} %D %D Now the main layout and navigational definitions are %D done, it makes sense to define and tune some structuring %D commands. First we build the titlepage. \defineoverlay [TitleGraphic] [\useMPgraphic{title}] \defineoverlay [NextPage] [\overlaybutton{nextpage}] \def\StartTitlePage {\setupbackgrounds[page][background={color,TitleGraphic,NextPage}] \setupbackgrounds[text][text][background=] \setupinteraction[menu=off] \setupinteractionbar[state=stop] \startstandardmakeup \switchtobodyfont[24pt] \bfd\setupinterlinespace \setupalign[middle] \vfil \let\\=\vfil} \def\StopTitlePage {\vfil\vfil\vfil \stopstandardmakeup \setupinteraction[menu=on] \setupinteractionbar[state=start] \setupbackgrounds[page][background=color] \setupbackgrounds[text][text][background=color] \setupsubpagenumber[reset]} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D \macros %D {Topic, Nopic, Subject, %D definehead, setuphead} %D %D We use \type {\Topic} and \type {\Subject} instead of %D chapters and sections. The \type {\Nopic} alternative is %D meant for internal use. \definehead [Topic] [chapter] \definehead [Nopic] [title] \definehead [Subject] [section] \setuphead [Topic, Nopic] [after={\blank[3*medium]}, number=no, style=\tfb, page=yes, alternative=middle] \setuphead [Subject] [after=\blank, number=no, page=yes, continue=no, style=\tfa] %D \macros %D {Topics, Subjects, %D setuplist, placelist, startcolumns} %D %D This style is meant for the more large presentations, and %D therefore provided for a list of topics as well as local %D lists of subjects. When many topics are introduces, the %D list is typeset in columns. \setuplist [Topic,Subject] [alternative=g, interaction=all, before=, after=] \setuplist [Topic] [criterium=all] \def\Topics#1% {\determinelistcharacteristics[Topic] \ifnum\utilitylistlength>0 \Nopic[Topics]{#1} \ifnum\utilitylistlength>12 \startcolumns \placelist[Topic] \stopcolumns \else \placelist[Topic] \fi \fi} \def\Subjects% {\placelist[Subject]} %D Last we define the overlays. Look at the way colors are %D linked into the macros. \startMPinclusions def triangle (expr wid, rot, col) = x1 := x3 := y1 := 0 ; x2 := y3 := wid ; y2 := .5y3 ; fill (z1--z2--z3--cycle) rotated rot withcolor col ; currentpicture := currentpicture xysized (wid,wid) ; enddef ; \stopMPinclusions \setupMPvariables [triangle] [width=1cm, rotation=0, color=black] \startuniqueMPgraphic{triangle}{width,rotation,color} triangle(\MPvar{width},\MPvar{rotation},\MPvar{color}) ; \stopuniqueMPgraphic \def\Triangle#1#2#3% {\uniqueMPgraphic{triangle}{rotation=#1,width=#2,color=#3}} \startuseMPgraphic{title} % can be simplified with "randomized" color c ; path p ; for i=1 upto 250 : x0 := uniformdeviate \overlaywidth ; y0 := uniformdeviate \overlayheight ; sx := uniformdeviate 20 ; sy := uniformdeviate 20 ; cc := round(uniformdeviate 2) ; if cc=0 : c := \MPcolor{GotoColor} fi ; if cc=1 : c := \MPcolor{ExitColor} fi ; if cc=2 : c := \MPcolor{StepColor} fi ; qq := round(uniformdeviate 1) ; if qq=0 : p := unitsquare xscaled sx yscaled sy ; else : rr := round(uniformdeviate 3) * 90 ; x1 := x3 := y1 := 0 ; x2 := y3 := sx; y2 := .5y3 ; p := (z1--z2--z3--cycle) rotated rr ; fi ; fill p shifted z0 withcolor c ; endfor ; \stopuseMPgraphic \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \TitlePage{Title Page\\pre-colorfull} \Topics{Some Nice Quotes} \Topic{A Few} \Subject{Knuth} \input knuth \Subject{Tufte} \input tufte \Topic{Some More} \Subject{Zapf} \input zapf \Subject{Bryson} \input bryson \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-log.mkiv0000644000175000017500000001722112130411274024301 0ustar norbertnorbert%D \module %D [ file=cont-log, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=\TEX\ Logos, %D author=J. Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 TeX Logos} %D The system that is used to typeset this text is called \TEX, %D typeset with an lowered~E. From te beginning of \TEX, %D authors of macro packages adapted this raising and lowering %D style. In this module we define some of those logos. \unprotect \unexpanded\def\TeX {\dontleavehmode \begingroup \setbox\scratchbox\hbox{M}% T% \kern-.1667\wd\scratchbox \lower.5ex\hbox{E}% \kern-.125\wd\scratchbox X% \endgroup} \unexpanded\def\ConTeXt{Con\TeX t} \unexpanded\def\PPCHTeX{ppch\TeX} \unexpanded\def\PRAGMA {Pragma ADE} \unexpanded\def\LaTeX % requested by erik frambach {\dontleavehmode \begingroup \setbox\scratchbox\hbox{L}% \scratchdimen\ht\scratchbox \setbox\scratchbox\hbox{\txx A}% L\kern-.55\wd\scratchbox \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}% \kern-.2\wd\scratchbox\TeX \endgroup} \unexpanded\def\TaBlE {T% \kern-.27em\lower.5ex\hbox{A}% \kern-.18emB% \kern-.1em\lower.5ex\hbox{L}% \kern-.075emE} \unexpanded\def\PiCTeX {P% \kern-.12em\lower.5ex\hbox{I}% \kern-.075em C% \kern-.11em\TeX} \def\syst_logos_ams_script#1% {$\cal\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$} \unexpanded\def\AmSTeX {\dontleavehmode \syst_logos_ams_script A% \kern-.1667em\lower.5ex\hbox{\syst_logos_ams_script M}% \kern-.125em\syst_logos_ams_script S% -\TeX} \unexpanded\def\LamSTeX {L% \kern-.4em\raise.3ex\hbox{\syst_logos_ams_script A}% \kern-.25em\lower.4ex\hbox{\syst_logos_ams_script M}% \kern-.1em{\syst_logos_ams_script S}% -\TeX} \unexpanded\def\AmSLaTeX {\dontleavehmode \syst_logos_ams_script A% \kern-.1667em\lower.5ex\hbox{\syst_logos_ams_script M}% \kern-.125em\AMSswitch S% -\LaTeX} %D Alternative \CONTEXT\ logo, first Idris S.~Hamid's version: %D %D \def\Context %D {{\sc C\kern -.0667emo\kern -.0667emn\kern -.0549emt\kern %D -.1667em\lower.5ex\hbox {e}\kern -.125emx\kern -.0549emt}} %D %D I changed this into one that adapts itself: \unexpanded\def\Context % wrong usage of \getscaledglyph {\dontleavehmode \begingroup C\kern -.0667em\getscaledglyph{.8}\empty{O\kern -.0667emN\kern -.0549emT\doifitalicelse{\kern-.1em}{\kern-.1667em}\lower.5ex\hbox {E}\doifitalicelse\empty{\kern-.11em}X\kern-.055emT}% \endgroup} %D The \METAFONT\ and \METAPOST\ logos adapt themselves to the %D current fontsize, an ugly but usefull hack. \let\logofont\nullfont \loadmapfile[original-base.map] % stil needed? \unexpanded\def\setMFPfont% more sensitive for low level changes {\font\logofont=logo% \ifx\fontalternative\s!bf\else \ifx\fontalternative\s!it\else \ifx\fontalternative\s!sl\else \ifx\fontalternative\s!bi\else \ifx\fontalternative\s!bs\else \fi\fi\fi\fi\fi 10 at \currentfontscale\bodyfontsize % there is no afm in the minimals yet \logofont} \def\syst_logos_meta_hyphen % there is no hyphenchar in this font {\discretionary{\vrule\s!height.33em\s!depth-.27em\s!width.33em}{}{}} \unexpanded\def\MetaFont {\dontleavehmode \begingroup \setMFPfont META\syst_logos_meta_hyphen FONT% \endgroup} \unexpanded\def\MetaPost {\dontleavehmode \begingroup \setMFPfont META\syst_logos_meta_hyphen POST% \endgroup} \unexpanded\def\MetaFun {MetaFun} %D \macros %D {TEX, METAFONT, METAPOST, METAFUN, %D PICTEX, TABLE, %D CONTEXT, PPCHTEX, %D AMSTEX, LATEX, LAMSTEX} %D %D We define the funny written ones as well as the less %D error prone upper case names (in \CONTEXT\ we tend to %D write all user defined commands, like abbreviations, in %D uppercase.) \unexpanded\def\METAFONT {\MetaFont} \unexpanded\def\METAPOST {\MetaPost} \unexpanded\def\PPCHTEX {\PPCHTeX} \unexpanded\def\CONTEXT {\ConTeXt} \unexpanded\def\METAFUN {\MetaFun} \unexpanded\def\TEX {\TeX} \unexpanded\def\LATEX {\LaTeX} \unexpanded\def\PICTEX {\PiCTeX} \unexpanded\def\TABLE {\TaBlE} \unexpanded\def\AMSTEX {\AmSTeX} \unexpanded\def\LAMSTEX {\LamSTeX} \unexpanded\def\INRSTEX {inrs\TeX} %D And this is how they show up: \TeX, \MetaFont, \MetaPost, %D \PiCTeX, \TaBlE, \ConTeXt, \PPCHTeX, \AmSTeX, \LaTeX, %D \LamSTeX. %D Some placeholders: \unexpanded\def\eTeX {\mathematics{\varepsilon}-\TeX} \unexpanded\def\pdfTeX {pdf\TeX} \unexpanded\def\pdfeTeX{pdfe-\TeX} \unexpanded\def\luaTeX {lua\TeX} \unexpanded\def\metaTeX{meta\TeX} \unexpanded\def\XeTeX {X\lower.5ex\hbox{\kern-.15em\mirror{E}}\kern-.1667em\TeX} % Adapted from a patch by Mojca: \def\syst_logos_xetex_e {\setbox\scratchbox\hbox{E}% \raise\dimexpr\ht\scratchbox+\dp\scratchbox\relax\hbox{\rotate[\c!rotation=180]{\box\scratchbox}}} \unexpanded\def\XeTeX {X\lower.5ex \hbox {\kern-.15em \iffontchar\font"018E\relax \char"018E% \else \ifx\fontalternative\s!bf \mirror{E}\else \ifx\fontalternative\s!it\syst_logos_xetex_e\else \ifx\fontalternative\s!sl\syst_logos_xetex_e\else \ifx\fontalternative\s!bi\syst_logos_xetex_e\else \ifx\fontalternative\s!bs\syst_logos_xetex_e\else \mirror{E}\fi\fi\fi\fi\fi \fi}% \kern-.1667em\TeX} \let\ETEX \eTeX \let\PDFTEX \pdfTeX \let\PDFETEX\pdfeTeX \let\LUATEX \luaTeX \let\LuaTeX \luaTeX \let\XETEX \XeTeX % \unexpanded\def\MkApproved % joke, not used so it might move % {\dontleavehmode\rotate % [\c!rotation={\ifnum\texengine=\luatexengine\cldcontext{45-45*\the\luatexversion/100}\else0\fi}, % \c!align=\v!middle, % \c!foregroundstyle=\v!type, % \c!foregroundcolor=darkred, % \c!frame=\v!on, % \c!offset=1ex, % \c!background=\v!color, % \c!backgroundcolor=lightgray, % \c!framecolor=darkred, % \c!rulethickness=2pt] % {Mk\ifnum\texengine=\luatexengine IV\else II\fi\\approved}} % \unexpanded\def\luaTeX % {\dontleavehmode\begingroup % Lua% % \setbox0\hbox{oT}% % \setbox2\hbox{o\kern0ptT}% % \ifdim\wd0=\wd2 % \setbox0\hbox dir TRT{To}% % \setbox2\hbox{T\kern0pto}% % \hskip\dimexpr\wd0-\wd2\relax % \fi % \TeX % \endgroup} % % a further iteration from the list, patched again % \ifx\fontalternative\s!it -\else % \ifx\fontalternative\s!sl -\else % \ifx\fontalternative\s!bi -\else % \ifx\fontalternative\s!bs -\fi\fi\fi\fi \unexpanded\def\LuaTeX {\dontleavehmode \begingroup Lua% % hope for kerning, try aT \setbox0\hbox{aT}% \setbox2\hbox{a\kern\zeropoint T}% \ifdim\wd0=\wd2 % kerns can go two ways % no aT kerning, try oT as a is not symmetrical \setbox0\hbox{oT}% \setbox2\hbox{o\kern\zeropoint T}% \ifdim\wd0=\wd2 % kerns can go two ways % no aT and oT kerning, try To \setbox0\hbox{To}% \setbox2\hbox{T\kern\zeropoint o}% % maybe we need to compensate for the angle (sl/it/bs/bi) \fi \ifdim\wd0=\wd2\else \kern\dimexpr\wd0-\wd2\relax \fi \fi \TeX \endgroup} \let\luaTeX \LuaTeX \let\LUATEX \LuaTeX \unexpanded\def\MKII{MkII} \unexpanded\def\MKIV{MkIV} \unexpanded\def\MKVI{MkVI} \unexpanded\def\MPII{MpII} \unexpanded\def\MPIV{MpIV} \appendtoks \def\ConTeXt {ConTeXt}% \def\MetaPost{MetaPost}% \def\MetaFont{MetaFont}% \def\MetaFun {MetaFun}% \def\TeX {TeX}% \to \everysimplifycommands \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-calcmath.mkii0000644000175000017500000000127011754241457024577 0ustar norbertnorbert%D \module %D [ file=m-calcmath, %D version=2006.04.24, % 1999.11.06, %D title=\CONTEXT\ Modules, %D subtitle=Calculator Math, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \writestatus{calcmath}{this is not supported in mkii} \let\inlinecalcmath \inlinemathematics \def\displaycalcmath \displaymathematics \let\calcmath \inlinecalcmath \let\icm \inlinecalcmath \let\dcm \displaycalcmath \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otn.lua0000644000175000017500000034541612161703335024156 0ustar norbertnorbertif not modules then modules = { } end modules ['font-otn'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- preprocessors = { "nodes" } -- this is still somewhat preliminary and it will get better in due time; -- much functionality could only be implemented thanks to the husayni font -- of Idris Samawi Hamid to who we dedicate this module. -- in retrospect it always looks easy but believe it or not, it took a lot -- of work to get proper open type support done: buggy fonts, fuzzy specs, -- special made testfonts, many skype sessions between taco, idris and me, -- torture tests etc etc ... unfortunately the code does not show how much -- time it took ... -- todo: -- -- kerning is probably not yet ok for latin around dics nodes -- extension infrastructure (for usage out of context) -- sorting features according to vendors/renderers -- alternative loop quitters -- check cursive and r2l -- find out where ignore-mark-classes went -- default features (per language, script) -- handle positions (we need example fonts) -- handle gpos_single (we might want an extra width field in glyph nodes because adding kerns might interfere) -- mark (to mark) code is still not what it should be (too messy but we need some more extreem husayni tests) -- remove some optimizations (when I have a faster machine) --[[ldx--

This module is a bit more split up that I'd like but since we also want to test with plain it has to be so. This module is part of and discussion about improvements and functionality mostly happens on the mailing list.

The specification of OpenType is kind of vague. Apart from a lack of a proper free specifications there's also the problem that Microsoft and Adobe may have their own interpretation of how and in what order to apply features. In general the Microsoft website has more detailed specifications and is a better reference. There is also some information in the FontForge help files.

Because there is so much possible, fonts might contain bugs and/or be made to work with certain rederers. These may evolve over time which may have the side effect that suddenly fonts behave differently.

After a lot of experiments (mostly by Taco, me and Idris) we're now at yet another implementation. Of course all errors are mine and of course the code can be improved. There are quite some optimizations going on here and processing speed is currently acceptable. Not all functions are implemented yet, often because I lack the fonts for testing. Many scripts are not yet supported either, but I will look into them as soon as users ask for it.

Because there are different interpretations possible, I will extend the code with more (configureable) variants. I can also add hooks for users so that they can write their own extensions.

Glyphs are indexed not by unicode but in their own way. This is because there is no relationship with unicode at all, apart from the fact that a font might cover certain ranges of characters. One character can have multiple shapes. However, at the end we use unicode so and all extra glyphs are mapped into a private space. This is needed because we need to access them and has to include then in the output eventually.

The raw table as it coms from gets reorganized in to fit out needs. In that table is packed (similar tables are shared) and cached on disk so that successive runs can use the optimized table (after loading the table is unpacked). The flattening code used later is a prelude to an even more compact table format (and as such it keeps evolving).

This module is sparsely documented because it is a moving target. The table format of the reader changes and we experiment a lot with different methods for supporting features.

As with the code, we may decide to store more information in the table.

Incrementing the version number will force a re-cache. We jump the number by one when there's a fix in the library or code that results in different tables.

--ldx]]-- -- action handler chainproc chainmore comment -- -- gsub_single ok ok ok -- gsub_multiple ok ok not implemented yet -- gsub_alternate ok ok not implemented yet -- gsub_ligature ok ok ok -- gsub_context ok -- -- gsub_contextchain ok -- -- gsub_reversecontextchain ok -- -- chainsub -- ok -- reversesub -- ok -- gpos_mark2base ok ok -- gpos_mark2ligature ok ok -- gpos_mark2mark ok ok -- gpos_cursive ok untested -- gpos_single ok ok -- gpos_pair ok ok -- gpos_context ok -- -- gpos_contextchain ok -- -- -- todo: contextpos and contextsub and class stuff -- -- actions: -- -- handler : actions triggered by lookup -- chainproc : actions triggered by contextual lookup -- chainmore : multiple substitutions triggered by contextual lookup (e.g. fij -> f + ij) -- -- remark: the 'not implemented yet' variants will be done when we have fonts that use them -- remark: we need to check what to do with discretionaries -- We used to have independent hashes for lookups but as the tags are unique -- we now use only one hash. If needed we can have multiple again but in that -- case I will probably prefix (i.e. rename) the lookups in the cached font file. -- Todo: make plugin feature that operates on char/glyphnode arrays local concat, insert, remove = table.concat, table.insert, table.remove local gmatch, gsub, find, match, lower, strip = string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip local type, next, tonumber, tostring = type, next, tonumber, tostring local lpegmatch = lpeg.match local random = math.random local formatters = string.formatters local logs, trackers, nodes, attributes = logs, trackers, nodes, attributes local registertracker = trackers.register local fonts = fonts local otf = fonts.handlers.otf local trace_lookups = false registertracker("otf.lookups", function(v) trace_lookups = v end) local trace_singles = false registertracker("otf.singles", function(v) trace_singles = v end) local trace_multiples = false registertracker("otf.multiples", function(v) trace_multiples = v end) local trace_alternatives = false registertracker("otf.alternatives", function(v) trace_alternatives = v end) local trace_ligatures = false registertracker("otf.ligatures", function(v) trace_ligatures = v end) local trace_contexts = false registertracker("otf.contexts", function(v) trace_contexts = v end) local trace_marks = false registertracker("otf.marks", function(v) trace_marks = v end) local trace_kerns = false registertracker("otf.kerns", function(v) trace_kerns = v end) local trace_cursive = false registertracker("otf.cursive", function(v) trace_cursive = v end) local trace_preparing = false registertracker("otf.preparing", function(v) trace_preparing = v end) local trace_bugs = false registertracker("otf.bugs", function(v) trace_bugs = v end) local trace_details = false registertracker("otf.details", function(v) trace_details = v end) local trace_applied = false registertracker("otf.applied", function(v) trace_applied = v end) local trace_steps = false registertracker("otf.steps", function(v) trace_steps = v end) local trace_skips = false registertracker("otf.skips", function(v) trace_skips = v end) local trace_directions = false registertracker("otf.directions", function(v) trace_directions = v end) local report_direct = logs.reporter("fonts","otf direct") local report_subchain = logs.reporter("fonts","otf subchain") local report_chain = logs.reporter("fonts","otf chain") local report_process = logs.reporter("fonts","otf process") local report_prepare = logs.reporter("fonts","otf prepare") local report_warning = logs.reporter("fonts","otf warning") registertracker("otf.verbose_chain", function(v) otf.setcontextchain(v and "verbose") end) registertracker("otf.normal_chain", function(v) otf.setcontextchain(v and "normal") end) registertracker("otf.replacements", "otf.singles,otf.multiples,otf.alternatives,otf.ligatures") registertracker("otf.positions","otf.marks,otf.kerns,otf.cursive") registertracker("otf.actions","otf.replacements,otf.positions") registertracker("otf.injections","nodes.injections") registertracker("*otf.sample","otf.steps,otf.actions,otf.analyzing") local insert_node_after = node.insert_after local delete_node = nodes.delete local copy_node = node.copy local find_node_tail = node.tail or node.slide local flush_node_list = node.flush_list local end_of_math = node.end_of_math local setmetatableindex = table.setmetatableindex local zwnj = 0x200C local zwj = 0x200D local wildcard = "*" local default = "dflt" local nodecodes = nodes.nodecodes local whatcodes = nodes.whatcodes local glyphcodes = nodes.glyphcodes local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue local disc_code = nodecodes.disc local whatsit_code = nodecodes.whatsit local math_code = nodecodes.math local dir_code = whatcodes.dir local localpar_code = whatcodes.localpar local ligature_code = glyphcodes.ligature local privateattribute = attributes.private -- Something is messed up: we have two mark / ligature indices, one at the injection -- end and one here ... this is bases in KE's patches but there is something fishy -- there as I'm pretty sure that for husayni we need some connection (as it's much -- more complex than an average font) but I need proper examples of all cases, not -- of only some. local a_state = privateattribute('state') local a_markbase = privateattribute('markbase') local a_markmark = privateattribute('markmark') local a_markdone = privateattribute('markdone') -- assigned at the injection end local a_cursbase = privateattribute('cursbase') local a_curscurs = privateattribute('curscurs') local a_cursdone = privateattribute('cursdone') local a_kernpair = privateattribute('kernpair') local a_ligacomp = privateattribute('ligacomp') -- assigned here (ideally it should be combined) local injections = nodes.injections local setmark = injections.setmark local setcursive = injections.setcursive local setkern = injections.setkern local setpair = injections.setpair local markonce = true local cursonce = true local kernonce = true local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local onetimemessage = fonts.loggers.onetimemessage or function() end otf.defaultnodealternate = "none" -- first last -- we share some vars here, after all, we have no nested lookups and less code local tfmdata = false local characters = false local descriptions = false local resources = false local marks = false local currentfont = false local lookuptable = false local anchorlookups = false local lookuptypes = false local handlers = { } local rlmode = 0 local featurevalue = false -- head is always a whatsit so we can safely assume that head is not changed -- we use this for special testing and documentation local checkstep = (nodes and nodes.tracers and nodes.tracers.steppers.check) or function() end local registerstep = (nodes and nodes.tracers and nodes.tracers.steppers.register) or function() end local registermessage = (nodes and nodes.tracers and nodes.tracers.steppers.message) or function() end local function logprocess(...) if trace_steps then registermessage(...) end report_direct(...) end local function logwarning(...) report_direct(...) end local f_unicode = formatters["%U"] local f_uniname = formatters["%U (%s)"] local f_unilist = formatters["% t (% t)"] local function gref(n) -- currently the same as in font-otb if type(n) == "number" then local description = descriptions[n] local name = description and description.name if name then return f_uniname(n,name) else return f_unicode(n) end elseif n then local num, nam = { }, { } for i=1,#n do local ni = n[i] if tonumber(ni) then -- later we will start at 2 local di = descriptions[ni] num[i] = f_unicode(ni) nam[i] = di and di.name or "-" end end return f_unilist(num,nam) else return "" end end local function cref(kind,chainname,chainlookupname,lookupname,index) -- not in the mood to alias f_ if index then return formatters["feature %a, chain %a, sub %a, lookup %a, index %a"](kind,chainname,chainlookupname,lookupname,index) elseif lookupname then return formatters["feature %a, chain %a, sub %a, lookup %a"](kind,chainname,chainlookupname,lookupname) elseif chainlookupname then return formatters["feature %a, chain %a, sub %a"](kind,chainname,chainlookupname) elseif chainname then return formatters["feature %a, chain %a"](kind,chainname) else return formatters["feature %a"](kind) end end local function pref(kind,lookupname) return formatters["feature %a, lookup %a"](kind,lookupname) end -- We can assume that languages that use marks are not hyphenated. We can also assume -- that at most one discretionary is present. -- We do need components in funny kerning mode but maybe I can better reconstruct then -- as we do have the font components info available; removing components makes the -- previous code much simpler. Also, later on copying and freeing becomes easier. -- However, for arabic we need to keep them around for the sake of mark placement -- and indices. local function copy_glyph(g) -- next and prev are untouched ! local components = g.components if components then g.components = nil local n = copy_node(g) g.components = components return n else return copy_node(g) end end -- start is a mark and we need to keep that one local function markstoligature(kind,lookupname,head,start,stop,char) if start == stop and start.char == char then return head, start else local prev = start.prev local next = stop.next start.prev = nil stop.next = nil local base = copy_glyph(start) if head == start then head = base end base.char = char base.subtype = ligature_code base.components = start if prev then prev.next = base end if next then next.prev = base end base.next = next base.prev = prev return head, base end end -- The next code is somewhat complicated by the fact that some fonts can have ligatures made -- from ligatures that themselves have marks. This was identified by Kai in for instance -- arabtype: KAF LAM SHADDA ALEF FATHA (0x0643 0x0644 0x0651 0x0627 0x064E). This becomes -- KAF LAM-ALEF with a SHADDA on the first and a FATHA op de second component. In a next -- iteration this becomes a KAF-LAM-ALEF with a SHADDA on the second and a FATHA on the -- third component. local function getcomponentindex(start) if start.id ~= glyph_code then return 0 elseif start.subtype == ligature_code then local i = 0 local components = start.components while components do i = i + getcomponentindex(components) components = components.next end return i elseif not marks[start.char] then return 1 else return 0 end end -- eventually we will do positioning in an other way (needs addional w/h/d fields) local function toligature(kind,lookupname,head,start,stop,char,markflag,discfound) -- brr head if start == stop and start.char == char then start.char = char return head, start end local prev = start.prev local next = stop.next start.prev = nil stop.next = nil local base = copy_glyph(start) if start == head then head = base end base.char = char base.subtype = ligature_code base.components = start -- start can have components if prev then prev.next = base end if next then next.prev = base end base.next = next base.prev = prev if not discfound then local deletemarks = markflag ~= "mark" local components = start local baseindex = 0 local componentindex = 0 local head = base local current = base -- first we loop over the glyphs in start .. stop while start do local char = start.char if not marks[char] then baseindex = baseindex + componentindex componentindex = getcomponentindex(start) elseif not deletemarks then -- quite fishy start[a_ligacomp] = baseindex + (start[a_ligacomp] or componentindex) if trace_marks then logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp]) end head, current = insert_node_after(head,current,copy_node(start)) -- unlikely that mark has components elseif trace_marks then logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char)) end start = start.next end -- we can have one accent as part of a lookup and another following -- local start = components -- was wrong (component scanning was introduced when more complex ligs in devanagari was added) local start = current.next while start and start.id == glyph_code do local char = start.char if marks[char] then start[a_ligacomp] = baseindex + (start[a_ligacomp] or componentindex) if trace_marks then logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp]) end else break end start = start.next end end return head, base end function handlers.gsub_single(head,start,kind,lookupname,replacement) if trace_singles then logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(start.char),gref(replacement)) end start.char = replacement return head, start, true end local function get_alternative_glyph(start,alternatives,value,trace_alternatives) local n = #alternatives if value == "random" then local r = random(1,n) return alternatives[r], trace_alternatives and formatters["value %a, taking %a"](value,r) elseif value == "first" then return alternatives[1], trace_alternatives and formatters["value %a, taking %a"](value,1) elseif value == "last" then return alternatives[n], trace_alternatives and formatters["value %a, taking %a"](value,n) else value = tonumber(value) if type(value) ~= "number" then return alternatives[1], trace_alternatives and formatters["invalid value %s, taking %a"](value,1) elseif value > n then local defaultalt = otf.defaultnodealternate if defaultalt == "first" then return alternatives[n], trace_alternatives and formatters["invalid value %s, taking %a"](value,1) elseif defaultalt == "last" then return alternatives[1], trace_alternatives and formatters["invalid value %s, taking %a"](value,n) else return false, trace_alternatives and formatters["invalid value %a, %s"](value,"out of range") end elseif value == 0 then return start.char, trace_alternatives and formatters["invalid value %a, %s"](value,"no change") elseif value < 1 then return alternatives[1], trace_alternatives and formatters["invalid value %a, taking %a"](value,1) else return alternatives[value], trace_alternatives and formatters["value %a, taking %a"](value,value) end end end local function multiple_glyphs(head,start,multiple) -- marks ? local nofmultiples = #multiple if nofmultiples > 0 then start.char = multiple[1] if nofmultiples > 1 then local sn = start.next for k=2,nofmultiples do -- todo: use insert_node local n = copy_node(start) -- ignore components n.char = multiple[k] n.next = sn n.prev = start if sn then sn.prev = n end start.next = n start = n end end return head, start, true else if trace_multiples then logprocess("no multiple for %s",gref(start.char)) end return head, start, false end end function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence) local value = featurevalue == true and tfmdata.shared.features[kind] or featurevalue local choice, comment = get_alternative_glyph(start,alternative,value,trace_alternatives) if choice then if trace_alternatives then logprocess("%s: replacing %s by alternative %a to %s, %s",pref(kind,lookupname),gref(start.char),choice,gref(choice),comment) end start.char = choice else if trace_alternatives then logwarning("%s: no variant %a for %s, %s",pref(kind,lookupname),value,gref(start.char),comment) end end return head, start, true end function handlers.gsub_multiple(head,start,kind,lookupname,multiple) if trace_multiples then logprocess("%s: replacing %s by multiple %s",pref(kind,lookupname),gref(start.char),gref(multiple)) end return multiple_glyphs(head,start,multiple) end function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence) local s, stop, discfound = start.next, nil, false local startchar = start.char if marks[startchar] then while s do local id = s.id if id == glyph_code and s.font == currentfont and s.subtype<256 then local lg = ligature[s.char] if lg then stop = s ligature = lg s = s.next else break end else break end end if stop then local lig = ligature.ligature if lig then if trace_ligatures then local stopchar = stop.char head, start = markstoligature(kind,lookupname,head,start,stop,lig) logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char)) else head, start = markstoligature(kind,lookupname,head,start,stop,lig) end return head, start, true else -- ok, goto next lookup end end else local skipmark = sequence.flags[1] while s do local id = s.id if id == glyph_code and s.subtype<256 then if s.font == currentfont then local char = s.char if skipmark and marks[char] then s = s.next else local lg = ligature[char] if lg then stop = s ligature = lg s = s.next else break end end else break end elseif id == disc_code then discfound = true s = s.next else break end end if stop then local lig = ligature.ligature if lig then if trace_ligatures then local stopchar = stop.char head, start = toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound) logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char)) else head, start = toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound) end return head, start, true else -- ok, goto next lookup end end end return head, start, false end --[[ldx--

We get hits on a mark, but we're not sure if the it has to be applied so we need to explicitly test for basechar, baselig and basemark entries.

--ldx]]-- function handlers.gpos_mark2base(head,start,kind,lookupname,markanchors,sequence) local markchar = start.char if marks[markchar] then local base = start.prev -- [glyph] [start=mark] if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then local basechar = base.char if marks[basechar] then while true do base = base.prev if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then basechar = base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar)) end return head, start, false end end end local baseanchors = descriptions[basechar] if baseanchors then baseanchors = baseanchors.anchors end if baseanchors then local baseanchors = baseanchors['basechar'] if baseanchors then local al = anchorlookups[lookupname] for anchor,ba in next, baseanchors do if al[anchor] then local ma = markanchors[anchor] if ma then local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)", pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head, start, true end end end if trace_bugs then logwarning("%s, no matching anchors for mark %s and base %s",pref(kind,lookupname),gref(markchar),gref(basechar)) end end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar)) onetimemessage(currentfont,basechar,"no base anchors",report_fonts) end elseif trace_bugs then logwarning("%s: prev node is no char",pref(kind,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar)) end return head, start, false end function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequence) -- check chainpos variant local markchar = start.char if marks[markchar] then local base = start.prev -- [glyph] [optional marks] [start=mark] if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then local basechar = base.char if marks[basechar] then while true do base = base.prev if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then basechar = base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar)) end return head, start, false end end end local index = start[a_ligacomp] local baseanchors = descriptions[basechar] if baseanchors then baseanchors = baseanchors.anchors if baseanchors then local baseanchors = baseanchors['baselig'] if baseanchors then local al = anchorlookups[lookupname] for anchor, ba in next, baseanchors do if al[anchor] then local ma = markanchors[anchor] if ma then ba = ba[index] if ba then local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) -- index if trace_marks then logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)", pref(kind,lookupname),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy) end return head, start, true else if trace_bugs then logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(kind,lookupname),gref(markchar),gref(basechar),index) end end end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and baselig %s",pref(kind,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar)) onetimemessage(currentfont,basechar,"no base anchors",report_fonts) end elseif trace_bugs then logwarning("%s: prev node is no char",pref(kind,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar)) end return head, start, false end function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence) local markchar = start.char if marks[markchar] then local base = start.prev -- [glyph] [basemark] [start=mark] local slc = start[a_ligacomp] if slc then -- a rather messy loop ... needs checking with husayni while base do local blc = base[a_ligacomp] if blc and blc ~= slc then base = base.prev else break end end end if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then -- subtype test can go local basechar = base.char local baseanchors = descriptions[basechar] if baseanchors then baseanchors = baseanchors.anchors if baseanchors then baseanchors = baseanchors['basemark'] if baseanchors then local al = anchorlookups[lookupname] for anchor,ba in next, baseanchors do if al[anchor] then local ma = markanchors[anchor] if ma then local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)", pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head, start, true end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and basemark %s",pref(kind,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar)) onetimemessage(currentfont,basechar,"no base anchors",report_fonts) end elseif trace_bugs then logwarning("%s: prev node is no mark",pref(kind,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar)) end return head, start, false end function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence) -- to be checked local alreadydone = cursonce and start[a_cursbase] if not alreadydone then local done = false local startchar = start.char if marks[startchar] then if trace_cursive then logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar)) end else local nxt = start.next while not done and nxt and nxt.id == glyph_code and nxt.font == currentfont and nxt.subtype<256 do local nextchar = nxt.char if marks[nextchar] then -- should not happen (maybe warning) nxt = nxt.next else local entryanchors = descriptions[nextchar] if entryanchors then entryanchors = entryanchors.anchors if entryanchors then entryanchors = entryanchors['centry'] if entryanchors then local al = anchorlookups[lookupname] for anchor, entry in next, entryanchors do if al[anchor] then local exit = exitanchors[anchor] if exit then local dx, dy, bound = setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar]) if trace_cursive then logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode) end done = true break end end end end end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(startchar)) onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) end break end end end return head, start, done else if trace_cursive and trace_details then logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(start.char),alreadydone) end return head, start, false end end function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence) local startchar = start.char local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar]) if trace_kerns then logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),dx,dy,w,h) end return head, start, false end function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence) -- todo: kerns in disc nodes: pre, post, replace -> loop over disc too -- todo: kerns in components of ligatures local snext = start.next if not snext then return head, start, false else local prev, done = start, false local factor = tfmdata.parameters.factor local lookuptype = lookuptypes[lookupname] while snext and snext.id == glyph_code and snext.font == currentfont and snext.subtype<256 do local nextchar = snext.char local krn = kerns[nextchar] if not krn and marks[nextchar] then prev = snext snext = snext.next else local krn = kerns[nextchar] if not krn then -- skip elseif type(krn) == "table" then if lookuptype == "pair" then -- probably not needed local a, b = krn[2], krn[3] if a and #a > 0 then local startchar = start.char local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar]) if trace_kerns then logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h) end end if b and #b > 0 then local startchar = start.char local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar]) if trace_kerns then logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h) end end else -- wrong ... position has different entries report_process("%s: check this out (old kern stuff)",pref(kind,lookupname)) -- local a, b = krn[2], krn[6] -- if a and a ~= 0 then -- local k = setkern(snext,factor,rlmode,a) -- if trace_kerns then -- logprocess("%s: inserting first kern %s between %s and %s",pref(kind,lookupname),k,gref(prev.char),gref(nextchar)) -- end -- end -- if b and b ~= 0 then -- logwarning("%s: ignoring second kern xoff %s",pref(kind,lookupname),b*factor) -- end end done = true elseif krn ~= 0 then local k = setkern(snext,factor,rlmode,krn) if trace_kerns then logprocess("%s: inserting kern %s between %s and %s",pref(kind,lookupname),k,gref(prev.char),gref(nextchar)) end done = true end break end end return head, start, done end end --[[ldx--

I will implement multiple chain replacements once I run into a font that uses it. It's not that complex to handle.

--ldx]]-- local chainmores = { } local chainprocs = { } local function logprocess(...) if trace_steps then registermessage(...) end report_subchain(...) end local logwarning = report_subchain local function logprocess(...) if trace_steps then registermessage(...) end report_chain(...) end local logwarning = report_chain -- We could share functions but that would lead to extra function calls with many -- arguments, redundant tests and confusing messages. function chainprocs.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname) logwarning("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname)) return head, start, false end function chainmores.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n) logprocess("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname)) return head, start, false end -- The reversesub is a special case, which is why we need to store the replacements -- in a bit weird way. There is no lookup and the replacement comes from the lookup -- itself. It is meant mostly for dealing with Urdu. function chainprocs.reversesub(head,start,stop,kind,chainname,currentcontext,lookuphash,replacements) local char = start.char local replacement = replacements[char] if replacement then if trace_singles then logprocess("%s: single reverse replacement of %s by %s",cref(kind,chainname),gref(char),gref(replacement)) end start.char = replacement return head, start, true else return head, start, false end end --[[ldx--

This chain stuff is somewhat tricky since we can have a sequence of actions to be applied: single, alternate, multiple or ligature where ligature can be an invalid one in the sense that it will replace multiple by one but not neccessary one that looks like the combination (i.e. it is the counterpart of multiple then). For example, the following is valid:

xxxabcdexxx [single a->A][multiple b->BCD][ligature cde->E] xxxABCDExxx

Therefore we we don't really do the replacement here already unless we have the single lookup case. The efficiency of the replacements can be improved by deleting as less as needed but that would also make the code even more messy.

--ldx]]-- local function delete_till_stop(start,stop,ignoremarks) -- keeps start local n = 1 if start == stop then -- done elseif ignoremarks then repeat -- start x x m x x stop => start m local next = start.next if not marks[next.char] then local components = next.components if components then -- probably not needed flush_node_list(components) end delete_node(start,next) end n = n + 1 until next == stop else -- start x x x stop => start repeat local next = start.next local components = next.components if components then -- probably not needed flush_node_list(components) end delete_node(start,next) n = n + 1 until next == stop end return n end --[[ldx--

Here we replace start by a single variant, First we delete the rest of the match.

--ldx]]-- function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex) -- todo: marks ? local current = start local subtables = currentlookup.subtables if #subtables > 1 then logwarning("todo: check if we need to loop over the replacements: %s",concat(subtables," ")) end while current do if current.id == glyph_code then local currentchar = current.char local lookupname = subtables[1] -- only 1 local replacement = lookuphash[lookupname] if not replacement then if trace_bugs then logwarning("%s: no single hits",cref(kind,chainname,chainlookupname,lookupname,chainindex)) end else replacement = replacement[currentchar] if not replacement or replacement == "" then if trace_bugs then logwarning("%s: no single for %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar)) end else if trace_singles then logprocess("%s: replacing single %s by %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar),gref(replacement)) end current.char = replacement end end return head, start, true elseif current == stop then break else current = current.next end end return head, start, false end chainmores.gsub_single = chainprocs.gsub_single --[[ldx--

Here we replace start by a sequence of new glyphs. First we delete the rest of the match.

--ldx]]-- function chainprocs.gsub_multiple(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) delete_till_stop(start,stop) -- we could pass ignoremarks as #3 .. local startchar = start.char local subtables = currentlookup.subtables local lookupname = subtables[1] local replacements = lookuphash[lookupname] if not replacements then if trace_bugs then logwarning("%s: no multiple hits",cref(kind,chainname,chainlookupname,lookupname)) end else replacements = replacements[startchar] if not replacements or replacement == "" then if trace_bugs then logwarning("%s: no multiple for %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar)) end else if trace_multiples then logprocess("%s: replacing %s by multiple characters %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar),gref(replacements)) end return multiple_glyphs(head,start,replacements) end end return head, start, false end chainmores.gsub_multiple = chainprocs.gsub_multiple --[[ldx--

Here we replace start by new glyph. First we delete the rest of the match.

--ldx]]-- -- char_1 mark_1 -> char_x mark_1 (ignore marks) -- char_1 mark_1 -> char_x -- to be checked: do we always have just one glyph? -- we can also have alternates for marks -- marks come last anyway -- are there cases where we need to delete the mark function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local current = start local subtables = currentlookup.subtables local value = featurevalue == true and tfmdata.shared.features[kind] or featurevalue while current do if current.id == glyph_code then -- is this check needed? local currentchar = current.char local lookupname = subtables[1] local alternatives = lookuphash[lookupname] if not alternatives then if trace_bugs then logwarning("%s: no alternative hit",cref(kind,chainname,chainlookupname,lookupname)) end else alternatives = alternatives[currentchar] if alternatives then local choice, comment = get_alternative_glyph(current,alternatives,value,trace_alternatives) if choice then if trace_alternatives then logprocess("%s: replacing %s by alternative %a to %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(char),choice,gref(choice),comment) end start.char = choice else if trace_alternatives then logwarning("%s: no variant %a for %s, %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(char),comment) end end elseif trace_bugs then logwarning("%s: no alternative for %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(currentchar),comment) end end return head, start, true elseif current == stop then break else current = current.next end end return head, start, false end chainmores.gsub_alternate = chainprocs.gsub_alternate --[[ldx--

When we replace ligatures we use a helper that handles the marks. I might change this function (move code inline and handle the marks by a separate function). We assume rather stupid ligatures (no complex disc nodes).

--ldx]]-- function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex) local startchar = start.char local subtables = currentlookup.subtables local lookupname = subtables[1] local ligatures = lookuphash[lookupname] if not ligatures then if trace_bugs then logwarning("%s: no ligature hits",cref(kind,chainname,chainlookupname,lookupname,chainindex)) end else ligatures = ligatures[startchar] if not ligatures then if trace_bugs then logwarning("%s: no ligatures starting with %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar)) end else local s = start.next local discfound = false local last = stop local nofreplacements = 0 local skipmark = currentlookup.flags[1] while s do local id = s.id if id == disc_code then s = s.next discfound = true else local schar = s.char if skipmark and marks[schar] then -- marks s = s.next else local lg = ligatures[schar] if lg then ligatures, last, nofreplacements = lg, s, nofreplacements + 1 if s == stop then break else s = s.next end else break end end end end local l2 = ligatures.ligature if l2 then if chainindex then stop = last end if trace_ligatures then if start == stop then logprocess("%s: replacing character %s by ligature %s case 3",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(l2)) else logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(stop.char),gref(l2)) end end head, start = toligature(kind,lookupname,head,start,stop,l2,currentlookup.flags[1],discfound) return head, start, true, nofreplacements elseif trace_bugs then if start == stop then logwarning("%s: replacing character %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar)) else logwarning("%s: replacing character %s upto %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(stop.char)) end end end end return head, start, false, 0 end chainmores.gsub_ligature = chainprocs.gsub_ligature function chainprocs.gpos_mark2base(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local markchar = start.char if marks[markchar] then local subtables = currentlookup.subtables local lookupname = subtables[1] local markanchors = lookuphash[lookupname] if markanchors then markanchors = markanchors[markchar] end if markanchors then local base = start.prev -- [glyph] [start=mark] if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then local basechar = base.char if marks[basechar] then while true do base = base.prev if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then basechar = base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar)) end return head, start, false end end end local baseanchors = descriptions[basechar].anchors if baseanchors then local baseanchors = baseanchors['basechar'] if baseanchors then local al = anchorlookups[lookupname] for anchor,ba in next, baseanchors do if al[anchor] then local ma = markanchors[anchor] if ma then local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)", cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head, start, true end end end if trace_bugs then logwarning("%s, no matching anchors for mark %s and base %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then logwarning("%s: prev node is no char",cref(kind,chainname,chainlookupname,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar)) end return head, start, false end function chainprocs.gpos_mark2ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local markchar = start.char if marks[markchar] then local subtables = currentlookup.subtables local lookupname = subtables[1] local markanchors = lookuphash[lookupname] if markanchors then markanchors = markanchors[markchar] end if markanchors then local base = start.prev -- [glyph] [optional marks] [start=mark] if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then local basechar = base.char if marks[basechar] then while true do base = base.prev if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then basechar = base.char if not marks[basechar] then break end else if trace_bugs then logwarning("%s: no base for mark %s",cref(kind,chainname,chainlookupname,lookupname),markchar) end return head, start, false end end end -- todo: like marks a ligatures hash local index = start[a_ligacomp] local baseanchors = descriptions[basechar].anchors if baseanchors then local baseanchors = baseanchors['baselig'] if baseanchors then local al = anchorlookups[lookupname] for anchor,ba in next, baseanchors do if al[anchor] then local ma = markanchors[anchor] if ma then ba = ba[index] if ba then local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) -- index if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)", cref(kind,chainname,chainlookupname,lookupname),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy) end return head, start, true end end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and baselig %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then logwarning("feature %s, lookup %s: prev node is no char",kind,lookupname) end elseif trace_bugs then logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar)) end elseif trace_bugs then logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar)) end return head, start, false end function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local markchar = start.char if marks[markchar] then -- local alreadydone = markonce and start[a_markmark] -- if not alreadydone then -- local markanchors = descriptions[markchar].anchors markanchors = markanchors and markanchors.mark local subtables = currentlookup.subtables local lookupname = subtables[1] local markanchors = lookuphash[lookupname] if markanchors then markanchors = markanchors[markchar] end if markanchors then local base = start.prev -- [glyph] [basemark] [start=mark] local slc = start[a_ligacomp] if slc then -- a rather messy loop ... needs checking with husayni while base do local blc = base[a_ligacomp] if blc and blc ~= slc then base = base.prev else break end end end if base and base.id == glyph_code and base.font == currentfont and base.subtype<256 then -- subtype test can go local basechar = base.char local baseanchors = descriptions[basechar].anchors if baseanchors then baseanchors = baseanchors['basemark'] if baseanchors then local al = anchorlookups[lookupname] for anchor,ba in next, baseanchors do if al[anchor] then local ma = markanchors[anchor] if ma then local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma) if trace_marks then logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)", cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy) end return head, start, true end end end if trace_bugs then logwarning("%s: no matching anchors for mark %s and basemark %s",gref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar)) end end end elseif trace_bugs then logwarning("%s: prev node is no mark",cref(kind,chainname,chainlookupname,lookupname)) end elseif trace_bugs then logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar)) end -- elseif trace_marks and trace_details then -- logprocess("%s, mark %s is already bound (n=%s), ignoring mark2mark",pref(kind,lookupname),gref(markchar),alreadydone) -- end elseif trace_bugs then logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar)) end return head, start, false end function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname) local alreadydone = cursonce and start[a_cursbase] if not alreadydone then local startchar = start.char local subtables = currentlookup.subtables local lookupname = subtables[1] local exitanchors = lookuphash[lookupname] if exitanchors then exitanchors = exitanchors[startchar] end if exitanchors then local done = false if marks[startchar] then if trace_cursive then logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar)) end else local nxt = start.next while not done and nxt and nxt.id == glyph_code and nxt.font == currentfont and nxt.subtype<256 do local nextchar = nxt.char if marks[nextchar] then -- should not happen (maybe warning) nxt = nxt.next else local entryanchors = descriptions[nextchar] if entryanchors then entryanchors = entryanchors.anchors if entryanchors then entryanchors = entryanchors['centry'] if entryanchors then local al = anchorlookups[lookupname] for anchor, entry in next, entryanchors do if al[anchor] then local exit = exitanchors[anchor] if exit then local dx, dy, bound = setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar]) if trace_cursive then logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode) end done = true break end end end end end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(startchar)) onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) end break end end end return head, start, done else if trace_cursive and trace_details then logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(start.char),alreadydone) end return head, start, false end end return head, start, false end function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence) -- untested .. needs checking for the new model local startchar = start.char local subtables = currentlookup.subtables local lookupname = subtables[1] local kerns = lookuphash[lookupname] if kerns then kerns = kerns[startchar] -- needed ? if kerns then local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar]) if trace_kerns then logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h) end end end return head, start, false end -- when machines become faster i will make a shared function function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence) -- logwarning("%s: gpos_pair not yet supported",cref(kind,chainname,chainlookupname)) local snext = start.next if snext then local startchar = start.char local subtables = currentlookup.subtables local lookupname = subtables[1] local kerns = lookuphash[lookupname] if kerns then kerns = kerns[startchar] if kerns then local lookuptype = lookuptypes[lookupname] local prev, done = start, false local factor = tfmdata.parameters.factor while snext and snext.id == glyph_code and snext.font == currentfont and snext.subtype<256 do local nextchar = snext.char local krn = kerns[nextchar] if not krn and marks[nextchar] then prev = snext snext = snext.next else if not krn then -- skip elseif type(krn) == "table" then if lookuptype == "pair" then local a, b = krn[2], krn[3] if a and #a > 0 then local startchar = start.char local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar]) if trace_kerns then logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h) end end if b and #b > 0 then local startchar = start.char local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar]) if trace_kerns then logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h) end end else report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname)) local a, b = krn[2], krn[6] if a and a ~= 0 then local k = setkern(snext,factor,rlmode,a) if trace_kerns then logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(prev.char),gref(nextchar)) end end if b and b ~= 0 then logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor) end end done = true elseif krn ~= 0 then local k = setkern(snext,factor,rlmode,krn) if trace_kerns then logprocess("%s: inserting kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(prev.char),gref(nextchar)) end done = true end break end end return head, start, done end end end return head, start, false end -- what pointer to return, spec says stop -- to be discussed ... is bidi changer a space? -- elseif char == zwnj and sequence[n][32] then -- brrr -- somehow l or f is global -- we don't need to pass the currentcontext, saves a bit -- make a slow variant then can be activated but with more tracing local function show_skip(kind,chainname,char,ck,class) if ck[9] then logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a, %a => %a",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10]) else logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2]) end end local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash) -- local rule, lookuptype, sequence, f, l, lookups = ck[1], ck[2] ,ck[3], ck[4], ck[5], ck[6] local flags = sequence.flags local done = false local skipmark = flags[1] local skipligature = flags[2] local skipbase = flags[3] local someskip = skipmark or skipligature or skipbase -- could be stored in flags for a fast test (hm, flags could be false !) local markclass = sequence.markclass -- todo, first we need a proper test local skipped = false for k=1,#contexts do local match = true local current = start local last = start local ck = contexts[k] local seq = ck[3] local s = #seq -- f..l = mid string if s == 1 then -- never happens match = current.id == glyph_code and current.font == currentfont and current.subtype<256 and seq[1][current.char] else -- maybe we need a better space check (maybe check for glue or category or combination) -- we cannot optimize for n=2 because there can be disc nodes local f, l = ck[4], ck[5] -- current match if f == 1 and f == l then -- current only -- already a hit -- match = true else -- before/current/after | before/current | current/after -- no need to test first hit (to be optimized) if f == l then -- new, else last out of sync (f is > 1) -- match = true else local n = f + 1 last = last.next while n <= l do if last then local id = last.id if id == glyph_code then if last.font == currentfont and last.subtype<256 then local char = last.char local ccd = descriptions[char] if ccd then local class = ccd.class if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then skipped = true if trace_skips then show_skip(kind,chainname,char,ck,class) end last = last.next elseif seq[n][char] then if n < l then last = last.next end n = n + 1 else match = false break end else match = false break end else match = false break end elseif id == disc_code then last = last.next else match = false break end else match = false break end end end end -- before if match and f > 1 then local prev = start.prev if prev then local n = f-1 while n >= 1 do if prev then local id = prev.id if id == glyph_code then if prev.font == currentfont and prev.subtype<256 then -- normal char local char = prev.char local ccd = descriptions[char] if ccd then local class = ccd.class if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then skipped = true if trace_skips then show_skip(kind,chainname,char,ck,class) end elseif seq[n][char] then n = n -1 else match = false break end else match = false break end else match = false break end elseif id == disc_code then -- skip 'm elseif seq[n][32] then n = n -1 else match = false break end prev = prev.prev elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces n = n -1 else match = false break end end elseif f == 2 then match = seq[1][32] else for n=f-1,1 do if not seq[n][32] then match = false break end end end end -- after if match and s > l then local current = last and last.next if current then -- removed optimization for s-l == 1, we have to deal with marks anyway local n = l + 1 while n <= s do if current then local id = current.id if id == glyph_code then if current.font == currentfont and current.subtype<256 then -- normal char local char = current.char local ccd = descriptions[char] if ccd then local class = ccd.class if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then skipped = true if trace_skips then show_skip(kind,chainname,char,ck,class) end elseif seq[n][char] then n = n + 1 else match = false break end else match = false break end else match = false break end elseif id == disc_code then -- skip 'm elseif seq[n][32] then -- brrr n = n + 1 else match = false break end current = current.next elseif seq[n][32] then n = n + 1 else match = false break end end elseif s-l == 1 then match = seq[s][32] else for n=l+1,s do if not seq[n][32] then match = false break end end end end end if match then -- ck == currentcontext if trace_contexts then local rule, lookuptype, f, l = ck[1], ck[2], ck[4], ck[5] local char = start.char if ck[9] then logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a, %a => %a", cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype,ck[9],ck[10]) else logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a", cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype) end end local chainlookups = ck[6] if chainlookups then local nofchainlookups = #chainlookups -- we can speed this up if needed if nofchainlookups == 1 then local chainlookupname = chainlookups[1] local chainlookup = lookuptable[chainlookupname] if chainlookup then local cp = chainprocs[chainlookup.type] if cp then head, start, done = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence) else logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type) end else -- shouldn't happen logprocess("%s is not yet supported",cref(kind,chainname,chainlookupname)) end else local i = 1 repeat if skipped then while true do local char = start.char local ccd = descriptions[char] if ccd then local class = ccd.class if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then start = start.next else break end else break end end end local chainlookupname = chainlookups[i] local chainlookup = lookuptable[chainlookupname] -- can be false (n matches, nofchainlookups end else local replacements = ck[7] if replacements then head, start, done = chainprocs.reversesub(head,start,last,kind,chainname,ck,lookuphash,replacements) -- sequence else done = true -- can be meant to be skipped if trace_contexts then logprocess("%s: skipping match",cref(kind,chainname)) end end end end end return head, start, done end -- Because we want to keep this elsewhere (an because speed is less an issue) we -- pass the font id so that the verbose variant can access the relevant helper tables. local verbose_handle_contextchain = function(font,...) logwarning("no verbose handler installed, reverting to 'normal'") otf.setcontextchain() return normal_handle_contextchain(...) end otf.chainhandlers = { normal = normal_handle_contextchain, verbose = verbose_handle_contextchain, } function otf.setcontextchain(method) if not method or method == "normal" or not otf.chainhandlers[method] then if handlers.contextchain then -- no need for a message while making the format logwarning("installing normal contextchain handler") end handlers.contextchain = normal_handle_contextchain else logwarning("installing contextchain handler %a",method) local handler = otf.chainhandlers[method] handlers.contextchain = function(...) return handler(currentfont,...) -- hm, get rid of ... end end handlers.gsub_context = handlers.contextchain handlers.gsub_contextchain = handlers.contextchain handlers.gsub_reversecontextchain = handlers.contextchain handlers.gpos_contextchain = handlers.contextchain handlers.gpos_context = handlers.contextchain end otf.setcontextchain() local missing = { } -- we only report once local function logprocess(...) if trace_steps then registermessage(...) end report_process(...) end local logwarning = report_process local function report_missing_cache(typ,lookup) local f = missing[currentfont] if not f then f = { } missing[currentfont] = f end local t = f[typ] if not t then t = { } f[typ] = t end if not t[lookup] then t[lookup] = true logwarning("missing cache for lookup %a, type %a, font %a, name %a",lookup,typ,currentfont,tfmdata.properties.fullname) end end local resolved = { } -- we only resolve a font,script,language pair once -- todo: pass all these 'locals' in a table local lookuphashes = { } setmetatableindex(lookuphashes, function(t,font) local lookuphash = fontdata[font].resources.lookuphash if not lookuphash or not next(lookuphash) then lookuphash = false end t[font] = lookuphash return lookuphash end) -- fonts.hashes.lookups = lookuphashes local autofeatures = fonts.analyzers.features -- was: constants local function initialize(sequence,script,language,enabled) local features = sequence.features if features then for kind, scripts in next, features do local valid = enabled[kind] if valid then local languages = scripts[script] or scripts[wildcard] if languages and (languages[language] or languages[wildcard]) then return { valid, autofeatures[kind] or false, sequence.chain or 0, kind, sequence } end end end end return false end function otf.dataset(tfmdata,font) -- generic variant, overloaded in context local shared = tfmdata.shared local properties = tfmdata.properties local language = properties.language or "dflt" local script = properties.script or "dflt" local enabled = shared.features local res = resolved[font] if not res then res = { } resolved[font] = res end local rs = res[script] if not rs then rs = { } res[script] = rs end local rl = rs[language] if not rl then rl = { -- indexed but we can also add specific data by key } rs[language] = rl local sequences = tfmdata.resources.sequences -- setmetatableindex(rl, function(t,k) -- if type(k) == "number" then -- local v = enabled and initialize(sequences[k],script,language,enabled) -- t[k] = v -- return v -- end -- end) for s=1,#sequences do local v = enabled and initialize(sequences[s],script,language,enabled) if v then rl[#rl+1] = v end end end return rl end -- elseif id == glue_code then -- if p[5] then -- chain -- local pc = pp[32] -- if pc then -- start, ok = start, false -- p[1](start,kind,p[2],pc,p[3],p[4]) -- if ok then -- done = true -- end -- if start then start = start.next end -- else -- start = start.next -- end -- else -- start = start.next -- end -- there will be a new direction parser (pre-parsed etc) local function featuresprocessor(head,font,attr) local lookuphash = lookuphashes[font] -- we can also check sequences here if not lookuphash then return head, false end if trace_steps then checkstep(head) end tfmdata = fontdata[font] descriptions = tfmdata.descriptions characters = tfmdata.characters resources = tfmdata.resources marks = resources.marks anchorlookups = resources.lookup_to_anchor lookuptable = resources.lookups lookuptypes = resources.lookuptypes currentfont = font rlmode = 0 local sequences = resources.sequences local done = false local datasets = otf.dataset(tfmdata,font,attr) local dirstack = { } -- could move outside function -- We could work on sub start-stop ranges instead but I wonder if there is that -- much speed gain (experiments showed that it made not much sense) and we need -- to keep track of directions anyway. Also at some point I want to play with -- font interactions and then we do need the full sweeps. -- Keeping track of the headnode is needed for devanagari (I generalized it a bit -- so that multiple cases are also covered.) -- for s=1,#sequences do -- local dataset = datasets[s] -- if dataset then -- featurevalue = dataset[1] -- todo: pass to function instead of using a global -- if featurevalue then -- never false for s=1,#datasets do local dataset = datasets[s] featurevalue = dataset[1] -- todo: pass to function instead of using a global local sequence = dataset[5] -- sequences[s] -- also dataset[5] local rlparmode = 0 local topstack = 0 local success = false local attribute = dataset[2] local chain = dataset[3] -- sequence.chain or 0 local typ = sequence.type local subtables = sequence.subtables if chain < 0 then -- this is a limited case, no special treatments like 'init' etc local handler = handlers[typ] -- we need to get rid of this slide! probably no longer needed in latest luatex local start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo while start do local id = start.id if id == glyph_code then if start.font == font and start.subtype<256 then local a = start[0] if a then a = a == attr else a = true end if a then for i=1,#subtables do local lookupname = subtables[i] local lookupcache = lookuphash[lookupname] if lookupcache then local lookupmatch = lookupcache[start.char] if lookupmatch then head, start, success = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i) if success then break end end else report_missing_cache(typ,lookupname) end end if start then start = start.prev end else start = start.prev end else start = start.prev end else start = start.prev end end else local handler = handlers[typ] local ns = #subtables local start = head -- local ? rlmode = 0 -- to be checked ? if ns == 1 then -- happens often local lookupname = subtables[1] local lookupcache = lookuphash[lookupname] if not lookupcache then -- also check for empty cache report_missing_cache(typ,lookupname) else while start do local id = start.id if id == glyph_code then if start.font == font and start.subtype<256 then local a = start[0] if a then a = (a == attr) and (not attribute or start[a_state] == attribute) else a = not attribute or start[a_state] == attribute end if a then local lookupmatch = lookupcache[start.char] if lookupmatch then -- sequence kan weg local ok head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1) if ok then success = true end end if start then start = start.next end else start = start.next end elseif id == math_code then start = end_of_math(start).next else start = start.next end elseif id == whatsit_code then -- will be function local subtype = start.subtype if subtype == dir_code then local dir = start.dir if dir == "+TRT" or dir == "+TLT" then topstack = topstack + 1 dirstack[topstack] = dir elseif dir == "-TRT" or dir == "-TLT" then topstack = topstack - 1 end local newdir = dirstack[topstack] if newdir == "+TRT" then rlmode = -1 elseif newdir == "+TLT" then rlmode = 1 else rlmode = rlparmode end if trace_directions then report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir) end elseif subtype == localpar_code then local dir = start.dir if dir == "TRT" then rlparmode = -1 elseif dir == "TLT" then rlparmode = 1 else rlparmode = 0 end rlmode = rlparmode if trace_directions then report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode) end end start = start.next elseif id == math_code then start = end_of_math(start).next else start = start.next end end end else while start do local id = start.id if id == glyph_code then if start.font == font and start.subtype<256 then local a = start[0] if a then a = (a == attr) and (not attribute or start[a_state] == attribute) else a = not attribute or start[a_state] == attribute end if a then for i=1,ns do local lookupname = subtables[i] local lookupcache = lookuphash[lookupname] if lookupcache then local lookupmatch = lookupcache[start.char] if lookupmatch then -- we could move all code inline but that makes things even more unreadable local ok head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i) if ok then success = true break elseif not start then -- don't ask why ... shouldn't happen break end end else report_missing_cache(typ,lookupname) end end if start then start = start.next end else start = start.next end else start = start.next end elseif id == whatsit_code then local subtype = start.subtype if subtype == dir_code then local dir = start.dir if dir == "+TRT" or dir == "+TLT" then topstack = topstack + 1 dirstack[topstack] = dir elseif dir == "-TRT" or dir == "-TLT" then topstack = topstack - 1 end local newdir = dirstack[topstack] if newdir == "+TRT" then rlmode = -1 elseif newdir == "+TLT" then rlmode = 1 else rlmode = rlparmode end if trace_directions then report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir) end elseif subtype == localpar_code then local dir = start.dir if dir == "TRT" then rlparmode = -1 elseif dir == "TLT" then rlparmode = 1 else rlparmode = 0 end rlmode = rlparmode if trace_directions then report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode) end end start = start.next elseif id == math_code then start = end_of_math(start).next else start = start.next end end end end if success then done = true end if trace_steps then -- ? registerstep(head) end -- end -- else -- -- report_process("warning, no dataset %a",s) -- end end return head, done end local function generic(lookupdata,lookupname,unicode,lookuphash) local target = lookuphash[lookupname] if target then target[unicode] = lookupdata else lookuphash[lookupname] = { [unicode] = lookupdata } end end local action = { substitution = generic, multiple = generic, alternate = generic, position = generic, ligature = function(lookupdata,lookupname,unicode,lookuphash) local target = lookuphash[lookupname] if not target then target = { } lookuphash[lookupname] = target end for i=1,#lookupdata do local li = lookupdata[i] local tu = target[li] if not tu then tu = { } target[li] = tu end target = tu end target.ligature = unicode end, pair = function(lookupdata,lookupname,unicode,lookuphash) local target = lookuphash[lookupname] if not target then target = { } lookuphash[lookupname] = target end local others = target[unicode] local paired = lookupdata[1] if others then others[paired] = lookupdata else others = { [paired] = lookupdata } target[unicode] = others end end, } local function prepare_lookups(tfmdata) local rawdata = tfmdata.shared.rawdata local resources = rawdata.resources local lookuphash = resources.lookuphash local anchor_to_lookup = resources.anchor_to_lookup local lookup_to_anchor = resources.lookup_to_anchor local lookuptypes = resources.lookuptypes local characters = tfmdata.characters local descriptions = tfmdata.descriptions -- we cannot free the entries in the descriptions as sometimes we access -- then directly (for instance anchors) ... selectively freeing does save -- much memory as it's only a reference to a table and the slot in the -- description hash is not freed anyway for unicode, character in next, characters do -- we cannot loop over descriptions ! local description = descriptions[unicode] if description then local lookups = description.slookups if lookups then for lookupname, lookupdata in next, lookups do action[lookuptypes[lookupname]](lookupdata,lookupname,unicode,lookuphash) end end local lookups = description.mlookups if lookups then for lookupname, lookuplist in next, lookups do local lookuptype = lookuptypes[lookupname] for l=1,#lookuplist do local lookupdata = lookuplist[l] action[lookuptype](lookupdata,lookupname,unicode,lookuphash) end end end local list = description.kerns if list then for lookup, krn in next, list do -- ref to glyph, saves lookup local target = lookuphash[lookup] if target then target[unicode] = krn else lookuphash[lookup] = { [unicode] = krn } end end end local list = description.anchors if list then for typ, anchors in next, list do -- types if typ == "mark" or typ == "cexit" then -- or entry? for name, anchor in next, anchors do local lookups = anchor_to_lookup[name] if lookups then for lookup, _ in next, lookups do local target = lookuphash[lookup] if target then target[unicode] = anchors else lookuphash[lookup] = { [unicode] = anchors } end end end end end end end end end end local function split(replacement,original) local result = { } for i=1,#replacement do result[original[i]] = replacement[i] end return result end local valid = { coverage = { chainsub = true, chainpos = true, contextsub = true }, reversecoverage = { reversesub = true }, glyphs = { chainsub = true, chainpos = true }, } local function prepare_contextchains(tfmdata) local rawdata = tfmdata.shared.rawdata local resources = rawdata.resources local lookuphash = resources.lookuphash local lookups = rawdata.lookups if lookups then for lookupname, lookupdata in next, rawdata.lookups do local lookuptype = lookupdata.type if lookuptype then local rules = lookupdata.rules if rules then local format = lookupdata.format local validformat = valid[format] if not validformat then report_prepare("unsupported format %a",format) elseif not validformat[lookuptype] then -- todo: dejavu-serif has one (but i need to see what use it has) report_prepare("unsupported format %a, lookuptype %a, lookupname %a",format,lookuptype,lookupname) else local contexts = lookuphash[lookupname] if not contexts then contexts = { } lookuphash[lookupname] = contexts end local t, nt = { }, 0 for nofrules=1,#rules do local rule = rules[nofrules] local current = rule.current local before = rule.before local after = rule.after local replacements = rule.replacements local sequence = { } local nofsequences = 0 -- Eventually we can store start, stop and sequence in the cached file -- but then less sharing takes place so best not do that without a lot -- of profiling so let's forget about it. if before then for n=1,#before do nofsequences = nofsequences + 1 sequence[nofsequences] = before[n] end end local start = nofsequences + 1 for n=1,#current do nofsequences = nofsequences + 1 sequence[nofsequences] = current[n] end local stop = nofsequences if after then for n=1,#after do nofsequences = nofsequences + 1 sequence[nofsequences] = after[n] end end if sequence[1] then -- Replacements only happen with reverse lookups as they are single only. We -- could pack them into current (replacement value instead of true) and then -- use sequence[start] instead but it's somewhat ugly. nt = nt + 1 t[nt] = { nofrules, lookuptype, sequence, start, stop, rule.lookups, replacements } for unic, _ in next, sequence[start] do local cu = contexts[unic] if not cu then contexts[unic] = t end end end end end else -- no rules end else report_prepare("missing lookuptype for lookupname %a",lookupname) end end end end -- we can consider lookuphash == false (initialized but empty) vs lookuphash == table local function featuresinitializer(tfmdata,value) if true then -- value then -- beware we need to use the topmost properties table local rawdata = tfmdata.shared.rawdata local properties = rawdata.properties if not properties.initialized then local starttime = trace_preparing and os.clock() local resources = rawdata.resources resources.lookuphash = resources.lookuphash or { } prepare_contextchains(tfmdata) prepare_lookups(tfmdata) properties.initialized = true if trace_preparing then report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,tfmdata.properties.fullname) end end end end registerotffeature { name = "features", description = "features", default = true, initializers = { position = 1, node = featuresinitializer, }, processors = { node = featuresprocessor, } } -- This can be used for extra handlers, but should be used with care! otf.handlers = handlers context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-fmt.lua0000644000175000017500000001347712130411274024134 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-fmt'] = { version = 1.001, comment = "companion to mtxrun", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local concat = table.concat local quoted = string.quoted local luasuffixes = utilities.lua.suffixes local report_format = logs.reporter("resolvers","formats") local function primaryflags() -- not yet ok local trackers = environment.argument("trackers") local directives = environment.argument("directives") local flags = { } if trackers and trackers ~= "" then flags = { "--trackers=" .. quoted(trackers) } end if directives and directives ~= "" then flags = { "--directives=" .. quoted(directives) } end if environment.argument("jit") then flags = { "--jiton" } end return concat(flags," ") end function environment.make_format(name) local engine = environment.ownmain or "luatex" -- change to format path (early as we need expanded paths) local olddir = dir.current() local path = caches.getwritablepath("formats",engine) or "" -- maybe platform if path ~= "" then lfs.chdir(path) end report_format("using format path %a",dir.current()) -- check source file local texsourcename = file.addsuffix(name,"mkiv") local fulltexsourcename = resolvers.findfile(texsourcename,"tex") or "" if fulltexsourcename == "" then texsourcename = file.addsuffix(name,"tex") fulltexsourcename = resolvers.findfile(texsourcename,"tex") or "" end if fulltexsourcename == "" then report_format("no tex source file with name %a (mkiv or tex)",name) lfs.chdir(olddir) return else report_format("using tex source file %a",fulltexsourcename) end local texsourcepath = dir.expandname(file.dirname(fulltexsourcename)) -- really needed -- check specification local specificationname = file.replacesuffix(fulltexsourcename,"lus") local fullspecificationname = resolvers.findfile(specificationname,"tex") or "" if fullspecificationname == "" then specificationname = file.join(texsourcepath,"context.lus") fullspecificationname = resolvers.findfile(specificationname,"tex") or "" end if fullspecificationname == "" then report_format("unknown stub specification %a",specificationname) lfs.chdir(olddir) return end local specificationpath = file.dirname(fullspecificationname) -- load specification local usedluastub = nil local usedlualibs = dofile(fullspecificationname) if type(usedlualibs) == "string" then usedluastub = file.join(file.dirname(fullspecificationname),usedlualibs) elseif type(usedlualibs) == "table" then report_format("using stub specification %a",fullspecificationname) local texbasename = file.basename(name) local luastubname = file.addsuffix(texbasename,luasuffixes.lua) local lucstubname = file.addsuffix(texbasename,luasuffixes.luc) -- pack libraries in stub report_format("creating initialization file %a",luastubname) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) -- compile stub file (does not save that much as we don't use this stub at startup any more) if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then report_format("using compiled initialization file %a",lucstubname) usedluastub = lucstubname else report_format("using uncompiled initialization file %a",luastubname) usedluastub = luastubname end else report_format("invalid stub specification %a",fullspecificationname) lfs.chdir(olddir) return end -- generate format local command = format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") report_format("running command: %s\n",command) os.spawn(command) -- remove related mem files local pattern = file.removesuffix(file.basename(usedluastub)).."-*.mem" -- report_format("removing related mplib format with pattern %a", pattern) local mp = dir.glob(pattern) if mp then for i=1,#mp do local name = mp[i] report_format("removing related mplib format %a", file.basename(name)) os.remove(name) end end lfs.chdir(olddir) end function environment.run_format(name,data,more) if name and name ~= "" then local engine = environment.ownmain or "luatex" local barename = file.removesuffix(name) local fmtname = caches.getfirstreadablefile(file.addsuffix(barename,"fmt"),"formats",engine) if fmtname == "" then fmtname = resolvers.findfile(file.addsuffix(barename,"fmt")) or "" end fmtname = resolvers.cleanpath(fmtname) if fmtname == "" then report_format("no format with name %a",name) else local barename = file.removesuffix(name) -- expanded name local luaname = file.addsuffix(barename,"luc") if not lfs.isfile(luaname) then luaname = file.addsuffix(barename,"lua") end if not lfs.isfile(luaname) then report_format("using format name %a",fmtname) report_format("no luc/lua file with name %a",barename) else local command = format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more ~= "" and quoted(more) or "") report_format("running command: %s",command) os.spawn(command) end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-alo.mkii0000644000175000017500000000207311754241457024304 0ustar norbertnorbert%D \module %D [ file=norm-alo, %D version=2009.03.19, %D title=\CONTEXT\ Norm Macros, %D subtitle=\ALEPH\ and \OMEGA, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 will become obsolete! % omega primitives \let\textdir = \textdir \let\pagedir = \pagedir \let\mathdir = \mathdir \let\pardir = \pardir \let\bodydir = \bodydir \let\leftghost = \leftghost \let\rightghost = \rightghost \let\localleftbox = \localleftbox \let\localrightbox = \localrightbox \let\localinterlinepenalty = \localinterlinepenalty \let\localbrokenpenalty = \localbrokenpenalty % aleph primitives \let\boxdir = \boxdir \let\pagebottomoffset = \pagebottomoffset \let\pagerightoffset = \pagerightoffset \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-visual.mkiv0000644000175000017500000005642112130411274024321 0ustar norbertnorbert%D \module %D [ file=m-visual, %D version=2000.01.10, %D title=\CONTEXT\ Extra Modules, %D subtitle=Visualization and Faking, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Much will probably be replaced by \LUA\ based solutions which is %D rather trivial and fun doing. %D This module collect a few more visual debugger features. I %D needed them for manuals and styles. The macros are documented %D in a my way document. \definecolor[fakerulecolor] [black] \definecolor[fakebaselinecolor] [green] \definecolor[fakeparindentcolor][blue] \newif\iffakebaseline \fakebaselinetrue \unexpanded\def\fakerule#1% {\strut \begingroup \directcolored[fakerulecolor]% \iffakebaseline \vrule\s!height1.25ex\s!depth-.05ex\s!width#1% \kern-#1% \vrule\s!height-.05ex\s!depth .25ex\s!width#1% \else \vrule\s!height1.25ex\s!depth .25ex\s!width#1% \fi \endgroup \allowbreak} \unexpanded\def\dorandomrecurse#1% {\getrandomcount\scratchcounter{1}{#1}% \dorecurse\scratchcounter} % can be used in hbox, so %'s are really needed \unexpanded\def\fakelines#1#2% min max / 3 10 {\fakeparindent \scratchdimen\hsize \ifindentation \advance\scratchdimen -\parindent \fi \fakerule\scratchdimen\break \getrandomcount\scratchcounter{\ifcase0#1 3\else#1\fi}{\ifcase0#2 10\else#2\fi}% \dorecurse\scratchcounter{\fakerule\hsize}% \getrandomdimen\scratchdimen{.25\hsize}\hsize \fakerule\scratchdimen \par} % indeed \unexpanded\def\fakewords {\ifvmode\fakeparindent\fi\onlyfakewords} \definepalet [fakerule] [fr1c=darkred, fr2c=darkgreen, fr3c=darkblue, fr4c=darkyellow, fr5c=darkgray] \unexpanded\def\onlyfakewords#1#2% min max / 10 40 {\getrandomcount\scratchcounter{\ifcase0#1 10\else#1\fi}{\ifcase0#2 40\else#2\fi}% \dofakewords\scratchcounter } % no \par \unexpanded\def\fakenwords#1#2% words seed {\fakeparindent \getrandomseed\fakedwordseed \setrandomseed{\ifcase0#2 #1\else#2\fi}% \dofakewords{#1}% \setrandomseed\fakedwordseed } % no \par \def\dofakewords#1% {\bgroup \dorecurse{#1} {\getrandomcount\scratchcounter{1}{5}% \dorecurse\scratchcounter {\getrandomdimen\scratchdimen{.5em}{1.25em}% \fakerule\scratchdimen}% \space}% \removeunwantedspaces \egroup} \def\doshowfakewords#1% {\bgroup \setuppalet[fakerule]% \definecolor[fakerulecolor]% \dorecurse{#1} {\getrandomcount\scratchcounter{1}{5}% \dorecurse\scratchcounter {\getrandomdimen\scratchdimen{.5em}{1.25em}% \color[fr\recurselevel c]{\fakerule\scratchdimen}}% \space}% \removeunwantedspaces \egroup} \unexpanded\def\showfakewords {\let\dofakewords\doshowfakewords} \unexpanded\def\fakeword {\fakewords{1}{1}} % no \plusone \unexpanded\def\fakeparindent {\noindent \ifindentation \ifx\dofakedroppedcaps\relax {\fakeparindentcolor \vrule \s!height \strutheight % not longer .5ex \s!depth \strutdepth % not longer 0pt \s!width \parindent}% \else \dofakedroppedcaps \let\dofakedroppedcaps\relax \fi % \else % \dontleavehmode \fi} \let\dofakedroppedcaps\relax \unexpanded\def\fakedroppedcaps#1% {\ifnum#1>0 \def\dofakedroppedcaps {\setbox\scratchbox\hbox {\setbox\scratchbox\hbox{W}% \scratchdimen#1\lineheight \advance\scratchdimen -\lineheight \advance\scratchdimen \dp\strutbox \vrule \s!width#1\wd\scratchbox \s!height\ht\scratchbox \s!depth\scratchdimen}% \ht\scratchbox\ht\strutbox \dp\scratchbox\dp\strutbox \hangindent\wd\scratchbox \advance\hangindent .5em \wd\scratchbox\hangindent \hangafter-#1\noindent \llap{\fakeparindentcolor\box\scratchbox}}% \fi} \unexpanded\def\fakefigure {\dodoubleempty\dofakefigure} \def\dofakefigure[#1][#2]#3#4#5#6% [] [] minwidth maxwidth minheight maxheight {\getvalue{\e!place\v!figure} [#1][#2]% {\freezerandomseed \let\endstrut\relax \let\begstrut\relax \doifinsetelse{#1}{\v!left,\v!right} {\fakewords{2}{4}} {\fakewords{4}{10}}}% {\doifinset{#1}{\v!left,\v!right} {\dimen0=.75\dimen0 \ifdim\dimen0>.6\hsize \dimen0=.5\hsize\fi \ifdim\dimen0<.3\hsize \dimen0=.3\hsize\fi}% \framed [\c!width=\dimen0, \c!height=\dimen2, \c!frame=\v!off, \c!background=\v!color, \c!backgroundcolor=fakeparindentcolor] {\bf\white#1}}% \defrostrandomseed} \unexpanded\def\fakeimage#1#2#3#4% {\getrandomdimen{\dimen0}{#1}{#3}% \getrandomdimen{\dimen2}{#2}{#4}% \framed [\c!width=\dimen0, \c!height=\dimen2, \c!frame=\v!off, \c!background=\v!color, \c!backgroundcolor=fakeparindentcolor] {}} \unexpanded\def\fakeformula {\dimen0\zeropoint \getrandomcount\scratchcounter{3}{6}% \dorecurse\scratchcounter {\getrandomdimen\scratchdimen{1em}{3em}% \mathinner{\red\fakerule\scratchdimen}% \ifnum\recurselevel<\scratchcounter+\fi \advance\scratchdimen\dimen0}% =\mathinner{\red\fakerule\scratchdimen}} \unexpanded\def\fakespacingformula {\color[fakebaselinecolor]{\ruledbaseline}\fakeformula} %D test \type{\bodyfontgrid}\space test %D test \type{\emexgrid} \space test \unexpanded\def\smashedgrid {\dosingleempty\dosmashedgrid} \def\dosmashedgrid[#1]% {\hsmashed {\setbox\scratchbox=\hbox {\basegrid [\c!nx=10,\c!ny=10,\c!dx=1,\c!dy=1, \c!unit=\bodyfontsize,#1]}% \hbox to \zeropoint {\hss\lower.5\ht\scratchbox\box\scratchbox\hss}% \hbox to \zeropoint {\hss \black\vrule\s!width6\linewidth\s!height3\linewidth\s!depth3\linewidth \hss}}} \unexpanded\def\bodyfontgrid {\hbox {{\linewidth.1pt\yellow\smashedgrid[\c!nx=30,\c!ny=30,\c!scale=.3333]}% {\linewidth.2pt\green \smashedgrid[\c!nx=20,\c!ny=20,\c!scale=.5]}% {\linewidth.3pt\red \smashedgrid[\c!nx=10,\c!ny=10,\c!scale=1]}}} \unexpanded\def\emexgrid {\hbox {{\linewidth.15pt\green\smashedgrid[\c!nx=20,\c!ny=20,\c!unit=ex]}% {\linewidth.15pt\red \smashedgrid[\c!nx=10,\c!ny=10,\c!unit=em]}}} %D For Mojca: \unexpanded\def\simplethesis {\setupsystem[random=1234] \title{\fakewords{3}{4}} \placelist[chapter,section] \dorecurse{6} {\chapter{\fakewords{5}{10}} \dorecurse{5} {\section{\fakewords{2}{5}} \dorecurse{2} {\dorecurse{3}{\fakewords{100}{200}\endgraf} \placefigure{\fakewords{8}{15}}{\fakeimage{5cm}{3cm}{10cm}{5cm}} \dorecurse{2}{\fakewords{100}{200}\endgraf}}}}} %D Moved code: %D \module %D [ file=trac-vis, % was core-vis, %D version=1996.06.01, %D title=\CONTEXT\ Tracking Macros, %D subtitle=Visualization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 adds some more visualization cues to the ones %D supplied in the support module. %D %D %\everypar dual character, \the\everypar and \everypar= %D %\hrule cannot be grabbed in advance, switches mode %D %\vrule cannot be grabbed in advance, switches mode %D % %D %\indent only explicit ones %D %\noindent only explicit ones %D %\par only explicit ones %D %D %\leftskip only if explicit one %D %\rightskip only if explicit one \writestatus{loading}{ConTeXt Tracking Macros / Visualization} \unprotect %D \macros %D {indent, noindent, par} %D %D \TeX\ acts upon paragraphs. In mosts documents paragraphs %D are separated by empty lines, which internally are handled as %D \type{\par}. Paragraphs can be indented or not, depending on %D the setting of \type{\parindent}, the first token of a %D paragraph and/or user suppressed or forced indentation. %D %D Because the actual typesetting is based on both explicit %D user and implicit system actions, visualization is only %D possible for the user supplied \type{\indent}, %D \type{\noindent}, and \type{\par}. Other %D 'clever' tricks will quite certainly lead to more failures %D than successes, so we only support these three explicit %D primitives and one macro: \unexpanded\def\showparagraphcue#1#2#3#4#5% {\bgroup \scratchdimen#1\relax \dontinterfere \dontcomplain %boxrulewidth5\testrulewidth #3#4\relax \setbox\scratchbox\normalhbox to \scratchdimen {#2{\ruledhbox to \scratchdimen {\vrule #5 20\testrulewidth \s!width \zeropoint \normalhss}}}% \smashbox\scratchbox \normalpenalty\plustenthousand \box\scratchbox \egroup} \unexpanded\def\ruledhanging {\ifdim\hangindent>\zeropoint \ifnum\hangafter<\zerocount \normalhbox {%boxrulewidth5\testrulewidth \setbox\scratchbox\ruledhbox to \hangindent {\scratchdimen\strutht \advance\scratchdimen \strutdp \vrule \s!width \zeropoint \s!height \zeropoint \s!depth -\hangafter\scratchdimen}% \normalhskip-\hangindent \smashbox\scratchbox \raise\strutht\box\scratchbox}% \fi \fi} \unexpanded\def\ruledparagraphcues {\bgroup \dontcomplain \normalhbox to \zeropoint {\ifdim\leftskip>\zeropoint\relax \showparagraphcue\leftskip\llap\relax\relax\!!depth \normalhskip-\leftskip \fi \ruledhanging \normalhskip\hsize \ifdim\rightskip>\zeropoint\relax \normalhskip-\rightskip \showparagraphcue\rightskip\relax\relax\relax\!!depth \fi}% \egroup} \unexpanded\def\ruledpar {\relax \ifhmode \showparagraphcue{40\testrulewidth}\relax\rightrulefalse\relax\s!height \fi \normalpar} \unexpanded\def\rulednoindent {\relax \normalnoindent \ruledparagraphcues \showparagraphcue{40\testrulewidth}\llap\leftrulefalse\relax\s!height} \unexpanded\def\ruledindent {\relax \normalnoindent \ruledparagraphcues \ifdim\parindent>\zeropoint \showparagraphcue\parindent\relax\relax\relax\s!height \else \showparagraphcue{40\testrulewidth}\llap\relax\relax\s!height \fi \normalhskip\parindent} \unexpanded\def\dontshowimplicits {\let\noindent \normalnoindent \let\indent \normalindent \let\par \normalpar} \unexpanded\def\showimplicits {\testrulewidth \defaulttestrulewidth \let\noindent \rulednoindent \let\indent \ruledindent \let\par \ruledpar} %D The next few||line examples show the four cues. Keep in %D mind that we only see them when we explicitly open or close %D a paragraph. %D %D \bgroup %D \def\voorbeeld#1% %D {#1Visualizing some \TeX\ primitives and Plain \TeX\ %D macros can be very instructive, at least it is to me. %D Here we see {\tt\string#1} and {\tt\string\ruledpar} in %D action, while {\tt\string\parindent} equals %D {\tt\the\parindent}.\ruledpar} %D %D \showimplicits %D %D \voorbeeld \indent %D \voorbeeld \noindent %D %D \parindent=60pt %D %D \voorbeeld \indent %D \voorbeeld \noindent %D %D \startnarrower %D \voorbeeld \indent %D \voorbeeld \noindent %D \stopnarrower %D \egroup %D %D These examples also demonstrate the visualization of %D \type {\leftskip} and \type {\rightskip}. The macro %D \type {\nofruledbaselines} determines the number of lines %D shown. \newcounter\ruledbaselines \def\nofruledbaselines{3} \unexpanded\def\ruledbaseline {\vrule \s!width \zeropoint \bgroup \dontinterfere \doglobal\increment\ruledbaselines \scratchdimen\nofruledbaselines\baselineskip \setbox\scratchbox\normalvbox to 2\scratchdimen {\leaders \normalhbox {\strut \vrule \s!height \testrulewidth \s!depth \testrulewidth \s!width 120\points} \normalvfill}% \smashbox\scratchbox \advance\scratchdimen \strutheightfactor\baselineskip \setbox\scratchbox\normalhbox {\normalhskip -48\points \normalhbox to 24\points {\normalhss {\ttxx\ruledbaselines}% \normalhskip6\points}% \raise\scratchdimen\box\scratchbox}% \smashbox\scratchbox \box\scratchbox \egroup} \unexpanded\def\showbaselines {\testrulewidth\defaulttestrulewidth \EveryPar{\ruledbaseline}} %D \macros %D {showpagebuilder} %D %D The next tracing option probaly is only of use to me and a %D few \CONTEXT\ hackers. \unexpanded\def\showpagebuilder {\EveryPar{\doshowpagebuilder}} \unexpanded\def\doshowpagebuilder {\strut\llap {\startcolor[blue]\vl \high{\infofont v:\the\vsize }\vl \high{\infofont g:\the\pagegoal }\vl \high{\infofont t:\the\pagetotal}\vl \stopcolor}} %D \macros %D {colormarkbox,rastermarkbox} %D %D This macro is used in the pagebody routine. No other use %D is advocated here. %D %D \starttyping %D \colormarkbox0 %D \stoptyping \def\colormarkoffset{\cutmarkoffset} \def\colormarklength{\cutmarklength} \def\dodocolorrangeA#1% {\fastcolored[#1]{\hrule\s!width3em\s!height\scratchdimen\s!depth\zeropoint}} \def\docolorrangeA#1 #2 % {\vbox {\hsize3em % \scratchdimen \ifcase#1\or \dodocolorrangeA{c=#2}\or \dodocolorrangeA{m=#2}\or \dodocolorrangeA{y=#2}\or \dodocolorrangeA{m=#2,y=#2}\or \dodocolorrangeA{c=#2,y=#2}\or \dodocolorrangeA{c=#2,m=#2}\fi \ifdim\scratchdimen>1ex \vskip-\scratchdimen \vbox to \scratchdimen {\vss\hbox to 3em{\hss#2\hss}\vss}% \fi}} \def\colorrangeA#1% {\vbox {\startcolor[\s!white]% \scratchdimen\dimexpr(-\colormarklength*4+\tractempheight+\tractempdepth)/21\relax \offinterlineskip \docolorrangeA #1 1.00 \docolorrangeA #1 0.95 \docolorrangeA #1 0.75 \docolorrangeA #1 0.50 \docolorrangeA #1 0.25 \docolorrangeA #1 0.05 \docolorrangeA #1 0.00 \stopcolor}} \def\docolorrangeB #1 #2 #3 #4 #5 % {\fastcolored [\c!c=#2,\c!m=#3,\c!y=#4,\c!k=#5] {\vrule\s!width\scratchdimen\s!height\colormarklength\s!depth\zeropoint}% \ifdim\scratchdimen>2em \hskip-\scratchdimen \vbox to \colormarklength {\vss\hbox to \scratchdimen{\hss#1\hss}\vss}% \fi} \def\colorrangeB {\hbox {\startcolor[\s!white]% \scratchdimen\dimexpr(-\colormarklength*\plustwo+\tractempwidth)/11\relax \docolorrangeB .5~C .5 0 0 0 \docolorrangeB .5~M 0 .5 0 0 \docolorrangeB .5~Y 0 0 .5 0 \docolorrangeB .5~K 0 0 0 .5 \docolorrangeB C 1 0 0 0 \docolorrangeB G 1 0 1 0 \docolorrangeB Y 0 0 1 0 \docolorrangeB R 0 1 1 0 \docolorrangeB M 0 1 0 0 \docolorrangeB B 1 1 0 0 \docolorrangeB K 0 0 0 1 \stopcolor}} \def\docolorrangeC#1 % {\fastcolored [\c!s=#1]% {\vrule\s!width\scratchdimen\s!height\colormarklength\s!depth\zeropoint}% \ifdim\scratchdimen>2em \hskip-\scratchdimen \vbox to \colormarklength {\vss\hbox to \scratchdimen{\hss#1\hss}\vss}% \fi} \def\colorrangeC {\hbox {\startcolor[\s!white]% \scratchdimen\dimexpr(-\colormarklength*2+\tractempwidth)/14\relax \docolorrangeC 1 \docolorrangeC .95 \docolorrangeC .9 \docolorrangeC .85 \docolorrangeC .8 \docolorrangeC .75 \docolorrangeC .7 \docolorrangeC .6 \docolorrangeC .5 \docolorrangeC .4 \docolorrangeC .3 \docolorrangeC .2 \docolorrangeC .1 \docolorrangeC 0 \stopcolor}} \def\docolormarkbox#1#2% {\tractempheight\ht#2% \tractempdepth \dp#2% \tractempwidth \wd#2% \setbox#2\hbox {\scratchdimen\dimexpr\colormarklength/2\relax \forgetall \ssxx \setbox\scratchbox\vbox {\offinterlineskip \vskip\dimexpr-\colormarkoffset\scratchdimen-2\scratchdimen\relax \ifcase#1\relax \vskip\dimexpr\colormarklength+\scratchdimen+\tractempheight\relax \else \hbox to \tractempwidth{\hss\hbox{\colorrangeB}\hss}% \vskip\colormarkoffset\scratchdimen \vbox to \tractempheight {\vss \hbox to \tractempwidth {\llap{\colorrangeA1\hskip\colormarkoffset\scratchdimen}\hfill \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA4}}% \vss \hbox to \tractempwidth {\llap{\colorrangeA2\hskip\colormarkoffset\scratchdimen}\hfill \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA5}}% \vss \hbox to \tractempwidth {\llap{\colorrangeA3\hskip\colormarkoffset\scratchdimen}\hfill \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA6}}% \vss}% \fi \vskip\colormarkoffset\scratchdimen \hbox to \tractempwidth {\hss\lower\tractempdepth\hbox{\colorrangeC}\hss}}% \ht\scratchbox\tractempheight \dp\scratchbox\tractempdepth \wd\scratchbox\zeropoint \box\scratchbox \box#2}% \wd#2\tractempwidth \ht#2\tractempheight \dp#2\tractempdepth} \unexpanded\def\colormarkbox {\docolormarkbox\plusone } % #1 \unexpanded\def\rastermarkbox{\docolormarkbox\zerocount} % #1 %D \macros %D {showwhatsits, dontshowwhatsits} %D %D \TEX\ has three so called whatsits: \type {\mark}, \type %D {\write} and \type {\special}. The first one keeps track of %D the current state at page boundaries, the last two are used %D to communicate to the outside world. Due to fact that %D especially \type {\write} is often used in conjunction with %D \type {\edef}, we can only savely support that one in \ETEX. %D %D \bgroup \showwhatsits \setupcolors[state=start] %D %D Whatsits show up \color[blue]{in color} and are %D characterized bij their first character.\footnote [some note] %D {So we may encounter \type {w}, \type {m} and \type{s}.} %D They are \writestatus{dummy}{demo}\color[yellow]{stacked}. %D %D \egroup \newif\ifimmediatewrite \let\supernormalmark \normalmark % mark may already been superseded \let\supernormalmarks \normalmarks % mark may already been superseded \unexpanded\def\showwhatsits {\protected\def\normalmark {\visualwhatsit100+m\supernormalmark }% \protected\def\normalmarks{\visualwhatsit100+m\supernormalmarks}% \protected\def\special {\visualwhatsit0100s\normalspecial }% \protected\def\write {\visualwhatsit001-w\normalwrite }% \let\immediate\immediatewhatsit \appendtoks\dontshowwhatsits\to\everystoptext} \unexpanded\def\immediatewhatsit {\bgroup\futurelet\next\doimmediatewhatsit} \unexpanded\def\doimmediatewhatsit {\ifx\next\write \egroup\immediatewritetrue \else \egroup\expandafter\normalimmediate \fi} \unexpanded\def\dontshowwhatsits {\let\immediate \normalimmediate \let\normalmark\supernormalmark \let\special \normalspecial \let\write \normalwrite} \unexpanded\def\visualwhatsit#1#2#3#4#5% {\bgroup \pushwhatsit \dontinterfere \dontcomplain \dontshowcomposition \dontshowwhatsits \ttx \ifvmode\donetrue\else\donefalse\fi \setbox\scratchbox\hbox {\ifdone \colored[r=#1,g=#2,b=#3]{#5}% temp hack \else \colored[s=0]{#5}% temp hack \fi}% \setbox\scratchbox\hbox {\ifdone \colored[r=#1,g=#2,b=#3]{\vrule\s!width\wd\scratchbox}% temp hack \else \colored[s=0]{\vrule\s!width\wd\scratchbox}% temp hack \fi \hskip-\wd\scratchbox\box\scratchbox}% \scratchdimen1ex \setbox\scratchbox\hbox {\ifdone\hskip\else\raise#4\fi\scratchdimen\box\scratchbox}% \smashbox\scratchbox \ifdone\nointerlineskip\fi \box\scratchbox \ifvmode\nointerlineskip\fi \popwhatsit \egroup \ifimmediatewrite \immediatewritefalse \expandafter\normalimmediate \fi} \unexpanded\def\pushwhatsit {\ifzeropt\lastskip \ifcase\lastpenalty \ifzeropt\lastkern \ifhmode \let\popwhatsit\relax \else \edef\popwhatsit{\prevdepth\the\prevdepth}% \fi \else \ifhmode \edef\popwhatsit{\kern\the\lastkern}\unkern \else \edef\popwhatsit{\kern\the\lastkern\prevdepth\the\prevdepth}% \kern-\lastkern \fi \fi \else \ifhmode \edef\popwhatsit{\the\lastpenalty}% \unpenalty \else \edef\popwhatsit{\penalty\the\lastpenalty\prevdepth\the\prevdepth}% %\nobreak \fi \fi \else \ifhmode \edef\popwhatsit{\hskip\the\lastskip}\unskip \else \edef\popwhatsit{\vskip\the\lastskip\prevdepth\the\prevdepth}% \vskip-\lastskip \fi \fi} %D The next macro can be used to keep track of classes of %D boxes (handy for development cq.\ tracing). \def\dodotagbox#1#2#3% can be reimplemented {\def\next##1##2##3##4% {\vbox to \ht#2{##3\hbox to \wd#2{##1#3##2}##4}}% \processaction [#1] [ l=>\next\relax\hfill\vfill\vfill, r=>\next\hfill\relax\vfill\vfill, t=>\next\hfill\hfill\relax\vfill, b=>\next\hfill\hfill\vfill\relax, lt=>\next\relax\hfill\relax\vfill, lb=>\next\relax\hfill\vfill\relax, rt=>\next\hfill\relax\relax\vfill, rb=>\next\hfill\relax\vfill\relax, tl=>\next\relax\hfill\relax\vfill, bl=>\next\relax\hfill\vfill\relax, tr=>\next\hfill\relax\relax\vfill, br=>\next\hfill\relax\vfill\relax, \s!default=>\next\hfill\hfill\vfill\vfill, \s!unknown=>\next\hfill\hfill\vfill\vfill]} \def\dotagbox[#1]#2% {\bgroup \dowithnextbox {\setbox\scratchbox\flushnextbox \setbox\nextbox\ifhbox\nextbox\hbox\else\vbox\fi \bgroup \startoverlay {\copy\scratchbox} {\dodotagbox{#1}\scratchbox{\framed [\c!background=\v!screen,\c!backgroundscreen=1]{#2}}} \stopoverlay \egroup \nextboxwd\the\wd\scratchbox \nextboxht\the\ht\scratchbox \nextboxdp\the\dp\scratchbox \flushnextbox \egroup}} \unexpanded\def\tagbox {\dosingleempty\dotagbox} %D \macros %D {coloredhbox,coloredvbox,coloredvtop, %D coloredstrut} %D %D The following visualizations are used in some of the manuals: \definecolor[boxcolor:ht][r=.5,g=.75,b=.5] \definecolor[boxcolor:dp][r=.5,g=.5,b=.75] \definecolor[boxcolor:wd][r=.75,g=.5,b=.5] \definecolor[strutcolor] [r=.5,g=.25,b=.25] \unexpanded\def\coloredbox#1% {\dowithnextbox{#1{\hbox {\blackrule[\c!width=\nextboxwd,\c!height=\nextboxht,\c!depth=\zeropoint,\c!color=boxcolor:ht]% \hskip-\nextboxwd \blackrule[\c!width=\nextboxwd,\c!height=\zeropoint,\c!depth=\nextboxdp,\c!color=boxcolor:dp]% \hskip-\nextboxwd \box\nextbox}}}#1} \unexpanded\def\coloredhbox{\coloredbox\hbox} \unexpanded\def\coloredvbox{\coloredbox\vbox} \unexpanded\def\coloredvtop{\coloredbox\vtop} \unexpanded\def\coloredstrut {\color[strutcolor]{\def\strutwidth{2\points}\setstrut\strut}} \protect \continueifinputfile{m-visual.mkiv} \starttext \simplethesis \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/chem-str.mkiv0000644000175000017500000006205512130411274024306 0ustar norbertnorbert%D \module %D [ file=chem-ini, %D version=2009.05.13, %D subtitle=Chemistry, %D author=Hans Hagen \& Alan Braslau, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The original \PPCHTEX\ code was written in pure \TEX\, although later we made %D the move from \PICTEX\ to \METAPOST\. The current implementation is a mix between %D \TEX\, \LUA\ and \METAPOST. Although the first objective is to get a compatible %D but better implementation, later versions might provide more, \writestatus{loading}{ConTeXt Chemistry Macros / Structure} \registerctxluafile{chem-str}{1.001} % We have a slightly different interface. This is unchanged: % % \startchemical[axis=on] % \chemical[SIX,ROT2,B,R6,SUB1,FIVE,ROT1,B][1] % \stopchemical % % Here we use chemicalformula instead, so no longer a mix: % % \startchemicalformula % \chemical{2H_2}{top}{bottom} % \chemical{PLUS}{top}{bottom} % \chemical{O_2}{top}{bottom} % \chemical{GIVES}{top}{bottom} % \chemical{2H_2O}{top}{bottom} % \stopchemicalformula % % \startchemicalformula % \chemical{2H_2} % \chemical{PLUS} % \chemical{O_2} % \chemical{GIVES} % \chemical{2H_2O} % \stopchemicalformula % % The inline variant has only one argument: % % \chemical{2H_2,PLUS,O_2,GIVES,2H_2O} \unprotect \installcorenamespace{chemical} \installcorenamespace{chemicalsymbol} \installcorenamespace{chemicalframed} \installcorenamespace{chemicalsize} \installsimplecommandhandler \??chemical {chemical} \??chemical % no \define... \let\setupchemicals\setupchemical %D We use a dedicated framed macro instead of inheriting one. This is both %D a historical and practical reason (like shared keys with different meaning %D that could clash, e.g.\ align). \defineMPinstance [chemistry] [\s!format=metafun, %\s!extensions=\v!yes, % Should we add extensions and initializations? %\s!initializations=\v!yes, % Would this give EmWidth, etc.? ] \startMPdefinitions{chemistry} input mp-chem.mpiv ; \stopMPdefinitions \defineframed [\??chemicalframed] [\c!align=\v!normal, \c!strut=\v!no] \unexpanded\def\setupchemicalframed {\setupframed[\??chemicalframed]} \unexpanded\def\definechemical % is global (so we don't use the commandhandler) {\dosingleargument\chem_define} \def\chem_define[#1]#2% {\startnointerference \edef\currentdefinedchemical{#1}% \let\chemical\chem_chemical_nested \ctxcommand{undefinechemical("#1")}% #2% flush \stopnointerference} \unexpanded\def\chem_chemical_nested {\dodoubleempty\chem_chemical_nested_indeed} \def\chem_chemical_nested_indeed[#1][#2]% {\ctxcommand{definechemical("\currentdefinedchemical",\!!bs#1\!!es,\!!bs\detokenize{#2}\!!es)}} % chemical symbols \unexpanded\def\definechemicalsymbol {\dodoubleempty\chem_symbol_define} \def\chem_symbol_define[#1][#2]% {\setvalue{\??chemicalsymbol#1}{#2}} \unexpanded\def\chemicalsymbol[#1]% {\csname\??chemicalsymbol\ifcsname\??chemicalsymbol#1\endcsname#1\else\s!unknown\fi\endcsname} \definechemicalsymbol[\s!unknown][] % \char"FFFD empty % size (small medium big) \edef\chemicaltoplocation{t} \edef\chemicalbotlocation{b} \unexpanded\def\chemicaltext#1% {\mathematics {\usechemicalstyleandcolor\c!style\c!color \strut \ifcase\currentxfontsize\or\scriptstyle\or\scriptscriptstyle\fi #1}} \setvalue{\??chemicalsize\v!small }{\txx} \setvalue{\??chemicalsize\v!medium}{\tx} \setvalue{\??chemicalsize\v!big }{} \newtoks \everychemical \newtoks \everystructurechemical \newconditional\indisplaychemical \newtoks \t_chem_every_box \newbox \b_chem_result \newconditional\c_chem_some_text \newdimen \d_chem_width \newdimen \d_chem_height \newdimen \d_chem_depth \unexpanded\def\startchemical {\dodoubleempty\chem_start} \def\chem_start[#1][#2]% {\ifmmode\vcenter\else\vbox\fi \bgroup \synchronizestrut{\chemicalparameter\c!strut}% \dontcomplain \settrue\indisplaychemical \forgetall \ifsecondargument \doifassignmentelse{#1} {\setupcurrentchemical[#1]}% same as \currentchemical {\edef\currentchemical{#1}% \setupcurrentchemical[#2]}% \else\iffirstargument \doifassignmentelse{#1} {\setupcurrentchemical[#1]}% same as \currentchemical {\edef\currentchemical{#1}}% \fi\fi \the\everystructurechemical \setbox\b_chem_result\hbox\bgroup \ctxcommand{startchemical { width = "\chemicalparameter\c!width", height = "\chemicalparameter\c!height", left = "\chemicalparameter\c!left", right = "\chemicalparameter\c!right", top = "\chemicalparameter\c!top", bottom = "\chemicalparameter\c!bottom", scale = "\chemicalparameter\c!scale", rotation = "\chemicalparameter\c!rotation", symalign = "\chemicalparameter\c!symalign", axis = "\chemicalparameter\c!axis", framecolor = "\MPcolor{\chemicalparameter\c!framecolor}", rulethickness = \number\dimexpr\chemicalparameter\c!rulethickness\relax, offset = \number\dimexpr\chemicalparameter\c!offset\relax, unit = \number\dimexpr\chemicalparameter\c!unit\relax, factor = \number\chemicalparameter\c!factor, } }% \startnointerference} \unexpanded\def\stopchemical {\stopnointerference \ctxcommand{stopchemical()}% \egroup \d_chem_width \wd\b_chem_result \d_chem_height\ht\b_chem_result \d_chem_depth \dp\b_chem_result \the\t_chem_every_box \doifelsenothing{\chemicalparameter\c!frame}\chem_framed_nop\chem_framed_yes \egroup} \unexpanded\def\chem_framed_yes {\localframedwithsettings [\??chemicalframed]% [\c!frame=\chemicalparameter\c!frame, \c!rulethickness=\chemicalparameter\c!rulethickness, \c!framecolor=\chemicalparameter\c!framecolor]% {\vbox{\box\b_chem_result\vss}}} % remove depth \unexpanded\def\chem_framed_nop {\directlocalframed [\??chemicalframed]% {\vbox{\box\b_chem_result\vss}}} % remove depth \let\startstructurechemical\startchemical \let\stopstructurechemical \stopchemical \unexpanded\def\structurechemical {\dotripleempty\strc_chem_indeed} \appendtoks \let\chemical\structurechemical \to\everystructurechemical \def\strc_chem_indeed {\ifthirdargument \expandafter\strc_chem_indeed_three \else \expandafter\strc_chem_indeed_two \fi} \def\strc_chem_indeed_three[#1][#2][#3]% {\writestatus\m!chemicals{hyperlinked chemicals not yet supported}% todo reference, for the moment ignored \ctxcommand{chemicalcomponent(\!!bs#2\!!es, \!!bs\detokenize{#3}\!!es, { % maybe also pass first two args this way rulethickness = "\the\dimexpr\chemicalparameter\c!rulethickness\relax", % todo: scaled points rulecolor = "\MPcolor{\chemicalparameter\c!rulecolor}" % we can precalculate this for speedup } ) }% \ignorespaces} \def\strc_chem_indeed_two[#1][#2]% {\ctxcommand{chemicalcomponent(\!!bs#1\!!es,\!!bs\detokenize{#2}\!!es, { % maybe also pass first two args this way rulethickness = "\the\dimexpr\chemicalparameter\c!rulethickness\relax", % todo: scaled points rulecolor = "\MPcolor{\chemicalparameter\c!rulecolor}" % we can precalculate this for speedup } ) }% \ignorespaces} \appendtoks \setbox\b_chem_result\hbox{\raise\MPlly\box\b_chem_result}% \d_chem_width \wd\b_chem_result \d_chem_height\ht\b_chem_result \d_chem_depth \dp\b_chem_result \to \t_chem_every_box % kind of compatible, but text sizes instead of math sizes (i.e. tx is larger than scriptsize) \appendtoks \edef\chemicalbodyfont{\chemicalparameter\c!bodyfont}% public? \ifx\chemicalbodyfont\empty \switchtobodyfont[\chemicalbodyfont]% \fi \getvalue{\??chemicalsize\chemicalparameter\c!size}% % \to \everystructurechemical \to \everychemical \def\chemicaltoptext#1{\global\settrue\c_chem_some_text\gdef\m_chem_top_text{#1}\ignorespaces} \def\chemicalbottext#1{\global\settrue\c_chem_some_text\gdef\m_chem_bot_text{#1}\ignorespaces} \def\chemicalmidtext#1{\global\settrue\c_chem_some_text\gdef\m_chem_mid_text{#1}\ignorespaces} \appendtoks \let\toptext\chemicaltoptext \glet\m_chem_top_text\empty \let\bottext\chemicalbottext \glet\m_chem_bot_text\empty \let\midtext\chemicalmidtext \glet\m_chem_mid_text\empty \global\setfalse\c_chem_some_text \to \everystructurechemical \def\chem_add_texts {\setbox2\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_mid_text}\hss}% \setbox4\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_top_text}\hss}% \setbox6\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_bot_text}\hss}% \setbox\b_chem_result\hbox \bgroup \box\b_chem_result \hskip-\d_chem_width \raise\d_chem_height\hbox{\lower\ht4\box4}% \hskip-\d_chem_width \lower.5\dimexpr\ht2-\dp2\relax\box2% \hskip-\d_chem_width \lower\d_chem_depth \hbox{\raise\dp6\box6}% \hss \egroup} % text on top of chemicals \appendtoks \ifconditional\c_chem_some_text \chem_add_texts \d_chem_width \wd\b_chem_result \d_chem_height\ht\b_chem_result \d_chem_depth \dp\b_chem_result \fi \to \t_chem_every_box % todo: enspace or emspace \definechemicalsymbol[space] [\enspace\quad\enspace] \definechemicalsymbol[plus] [\enspace+\enspace] \definechemicalsymbol[minus] [\enspace-\enspace] \definechemicalsymbol[gives] [\chem_arrow_construct\xrightarrow] \definechemicalsymbol[equilibrium] [\chem_arrow_construct\xrightoverleftarrow] \definechemicalsymbol[mesomeric] [\chem_arrow_construct\xleftrightarrow] \definechemicalsymbol[opencomplex] [\mathematics{\Bigg[}] % not yet ok \definechemicalsymbol[closecomplex][\mathematics{\Bigg]}] % not yet ok \definechemicalsymbol[SPACE] [{\chemicalsymbol[space]}] \definechemicalsymbol[PLUS] [{\chemicalsymbol[plus]}] \definechemicalsymbol[MINUS] [{\chemicalsymbol[minus]}] \definechemicalsymbol[GIVES] [{\chemicalsymbol[gives]}] \definechemicalsymbol[EQUILIBRIUM] [{\chemicalsymbol[equilibrium]}] \definechemicalsymbol[MESOMERIC] [{\chemicalsymbol[mesomeric]}] \definechemicalsymbol[OPENCOMPLEX] [{\chemicalsymbol[opencomplex]}] \definechemicalsymbol[CLOSECOMPLEX][{\chemicalsymbol[closecomplex]}] \def\chem_arrow_construct#1#2#3% {\enspace \mathematics{#1% {\strut\hbox \s!spread 2\emwidth{\hss\ctxcommand{inlinechemical(\!!bs#3\!!es)}\hss}}% {\strut\hbox \s!spread 2em{\hss#3\hss}}}% {\strut\hbox \s!spread 2\emwidth{\hss\ctxcommand{inlinechemical(\!!bs#2\!!es)}\hss}}}% {\strut\hbox \s!spread 2em{\hss#2\hss}}% \enspace} % special macros (probably needs some more work) \def\chem_top_construct#1#2#3#4% {\begingroup \setbox0\hbox{\setstrut\strut#3}% \setbox2\hbox{\setstrut\strut\molecule{#4}}% \setbox0\hbox{\raise\dimexpr\dp0+\ht2\relax\hbox to \wd2{#1\box0#2}}% % no: \smashbox0 \hbox{\box0\box2}% \endgroup}% \def\chem_bottom_construct#1#2#3#4% {\begingroup \setbox0\hbox{\setstrut\strut#3}% \setbox2\hbox{\setstrut\strut#4}% \setbox0\hbox{\lower\dimexpr\dp2+\ht0\relax\hbox to \wd2{#1\box0#2}}% % no: \smashbox0 \hbox{\box0\box2}% \endgroup}% \unexpanded\def\chemicalleft#1#2% {\begingroup \hbox{\llap{\setstrut\strut#1}\setstrut\strut#2}% \endgroup}% \unexpanded\def\chemicalright#1#2% {\begingroup \hbox{\setstrut\strut#2\rlap{\setstrut\strut#1}}% \endgroup}% \unexpanded\def\chemicaltop {\chem_top_construct \hss \hss } \unexpanded\def\chemicallefttop {\chem_top_construct \relax \hss } \unexpanded\def\chemicalrighttop {\chem_top_construct \hss \relax} \unexpanded\def\chemicalbottom {\chem_bottom_construct \hss \hss } \unexpanded\def\chemicalleftbottom {\chem_bottom_construct \relax \hss } \unexpanded\def\chemicalrightbottom {\chem_bottom_construct \hss \relax} \unexpanded\def\chemicaltopleft #1{\chemicalleft {\chemicalrighttop {#1}{}}} \unexpanded\def\chemicalbottomleft #1{\chemicalleft {\chemicalrightbottom{#1}{}}} \unexpanded\def\chemicaltopright #1{\chemicalright{\chemicallefttop {#1}{}}} \unexpanded\def\chemicalbottomright #1{\chemicalright{\chemicalleftbottom {#1}{}}} % \unexpanded\def\chemicalcentered #1{\hbox to \fontcharwd\font`C{\setstrut\strut\hss#1\hss}} % \unexpanded\def\chemicalleftcentered #1{\hbox to \fontcharwd\font`C{\setstrut\strut #1\hss}} % \unexpanded\def\chemicalrightcentered#1{\hbox to \fontcharwd\font`C{\setstrut\strut\hss#1}} % \let\chemicalsmashedmiddle\chemicalcentered % \let\chemicalsmashedleft \chemicalleftcentered % \let\chemicalsmashedright \chemicalrightcentered \unexpanded\def\chemicalalignedtext {\ifmmode \expandafter\chem_aligned_text_math \else \expandafter\chem_aligned_text_text \fi} \def\chem_aligned_text_text#1#2#3% {\dontleavehmode \begingroup \usechemicalstyleandcolor\c!style\c!color \hbox to \fontcharwd\font`C{\setstrut\strut#1\molecule{#3}#2}% \endgroup} \def\chem_aligned_text_math#1#2#3% {\dontleavehmode \begingroup \scratchcounter\normalmathstyle \usechemicalstyleandcolor\c!style\c!color \hbox to \fontcharwd\font`C{\setstrut\strut#1\mathematics{\tf\triggermathstyle\scratchcounter\molecule{#3}}#2}% \endgroup} \unexpanded\def\chemicalcentered {\chemicalalignedtext\hss \hss } \unexpanded\def\chemicalleftcentered {\chemicalalignedtext\relax\hss } \unexpanded\def\chemicalrightcentered{\chemicalalignedtext\hss \relax} \let\chemicalsmashedmiddle\chemicalcentered \let\chemicalsmashedleft \chemicalleftcentered \let\chemicalsmashedright \chemicalrightcentered \unexpanded\def\chemicaloxidation#1#2#3% {\chemicaltop{\txx\ifcase#2\relax0\else#1\convertnumber{I}{#2}\fi}{#3}} \unexpanded\def\chemicaloxidationplus {\dotriplegroupempty\chemicaloxidation{\textplus }} % {} needed! \unexpanded\def\chemicaloxidationminus{\dotriplegroupempty\chemicaloxidation{\textminus}} % {} needed! \unexpanded\def\chemicalforeveropen {\dotriplegroupempty\chemicalleft {$\big[$}} % {} needed! \unexpanded\def\chemicalforeverclose {\dotriplegroupempty\chemicalright {$\big]$}} % {} needed! \unexpanded\def\chemicaloxidationone {\chemicaloxidation\relax1} \unexpanded\def\chemicaloxidationtwo {\chemicaloxidation\relax2} \unexpanded\def\chemicaloxidationthree{\chemicaloxidation\relax3} \unexpanded\def\chemicaloxidationfour {\chemicaloxidation\relax4} \unexpanded\def\chemicaloxidationfive {\chemicaloxidation\relax5} \unexpanded\def\chemicaloxidationsix {\chemicaloxidation\relax6} \unexpanded\def\chemicaloxidationseven{\chemicaloxidation\relax7} \unexpanded\def\chemicalbar {\hbox \s!spread .5\emwidth \bgroup \hss \vrule \s!height .9\strutht \s!depth .65\strutdp \s!width .1\exheight \hss \egroup} \appendtoks \let|\chemicalbar % \SR{N|NH} \let \+\chemicaloxidationplus \let \-\chemicaloxidationminus \let \[\chemicalforeveropen \let \]\chemicalforeverclose \let \1\chemicaloxidationone \let \2\chemicaloxidationtwo \let \3\chemicaloxidationthree \let \4\chemicaloxidationfour \let \5\chemicaloxidationfive \let \6\chemicaloxidationsix \let \7\chemicaloxidationseven \let \X\chemicaltighttext \let \T\chemicaltop \let \B\chemicalbottom \let \L\chemicalleft \let\LC\chemicalleftcentered \let \R\chemicalright \let\RC\chemicalrightcentered \let\TL\chemicaltopleft \let\BL\chemicalbottomleft \let\TR\chemicaltopright \let\BR\chemicalbottomright \let\LT\chemicallefttop \let\LB\chemicalleftbottom \let\RT\chemicalrighttop \let\RB\chemicalrightbottom \let\SL\chemicalsmashedleft \let\SM\chemicalsmashedmiddle \let\SR\chemicalsmashedright \to \everychemical % Should these also be defined in lower case, so as to be case independent? \appendtoks \the\everychemical \to \everystructurechemical % inline % \unexpanded\def\chemical % {\ifinformula % \expandafter\displaychemical % \else % \expandafter\inlinechemical % \fi} \unexpanded\def\chemical {\ifinformula \expandafter\indisplaychemical \else \expandafter\inlinechemical \fi} \unexpanded\def\indisplaychemical {\mathstylecommand\displaychemical\inlinechemical\inlinechemical} \unexpanded\def\inlinechemical#1% {\dontleavehmode \begingroup \scratchcounter\normalmathstyle \usechemicalstyleandcolor\c!style\c!color \hbox{\mathematics{\tf\triggermathstyle\scratchcounter\ctxcommand{inlinechemical(\!!bs#1\!!es)}}}% \endgroup} \unexpanded\def\displaychemical {\dotriplegroupempty\chem_display} \def\chem_display#1#2#3% {\the\everychemical \everychemical\emptytoks \quad \vcenter\bgroup \usechemicalstyleandcolor\c!style\c!color \ifthirdargument \ifsecondargument \halign{\aligntab\hss\alignmark\alignmark\hss\cr#2\cr\molecule{#1}\cr#3\cr}% \else \halign{\aligntab\hss\alignmark\alignmark\hss \cr\molecule{#1}\cr#2\cr}% \fi \else \hbox{\molecule{#1}}% \fi \egroup \quad} \unexpanded\def\inlinechemical#1% {\dontleavehmode \hbox{\usechemicalstyleandcolor\c!style\c!color\ctxcommand{inlinechemical(\!!bs#1\!!es)}}} \unexpanded\def\chemicalbondrule {\hbox{\vrule\s!height.75\exheight\s!depth-\dimexpr.75\exheight-\linewidth\relax\s!width\emwidth\relax}} \definechemicalsymbol[i:space] [\enspace\quad\enspace] \definechemicalsymbol[i:plus] [\enspace\mathematics{+}\enspace] \definechemicalsymbol[i:minus] [\enspace\mathematics{-}\enspace] \definechemicalsymbol[i:gives] [\enspace\mathematics{\xrightarrow{}{}}\enspace] \definechemicalsymbol[i:equilibrium] [\enspace\mathematics{\xrightoverleftarrow{}{}}\enspace] \definechemicalsymbol[i:mesomeric] [\enspace\mathematics{\xleftrightarrow{}{}}\enspace] \definechemicalsymbol[i:single] [\chemicalbondrule] \definechemicalsymbol[i:double] [\hbox{\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}] \definechemicalsymbol[i:triple] [\hbox{\chemicalbondrule\hskip-1em\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}] \unexpanded\def\chemicalsinglebond {\chemicalsymbol[i:single]} \unexpanded\def\chemicaldoublebond {\chemicalsymbol[i:double]} \unexpanded\def\chemicaltriplebond {\chemicalsymbol[i:triple]} \unexpanded\def\chemicalgives {\chemicalsymbol[i:gives]} \unexpanded\def\chemicalmesomeric {\chemicalsymbol[i:mesomeric]} \unexpanded\def\chemicalequilibrium{\chemicalsymbol[i:equilibrium]} \unexpanded\def\chemicalplus {\chemicalsymbol[i:plus]} \unexpanded\def\chemicalminus {\chemicalsymbol[i:minus]} \unexpanded\def\chemicalspace {\chemicalsymbol[i:space]} \unexpanded\def\chemicalinline #1{#1} % display \newconditional\c_chem_has_top \newconditional\c_chem_has_bot \newtoks\t_chem_top \newtoks\t_chem_mid \newtoks\t_chem_bot \newif\ifinchemicalformula \unexpanded\def\startchemicalformula {\mathortext\vcenter\vbox\bgroup \forgetall \inchemicalformulatrue \the\everychemical \everychemical\emptytoks \t_chem_top\emptytoks % not needed \t_chem_mid\emptytoks % not needed \t_chem_bot\emptytoks % not needed \let\chemical\formulachemical \setfalse\c_chem_has_top \setfalse\c_chem_has_bot} \unexpanded\def\stopchemicalformula {\tabskip\emwidth\relax \nointerlineskip \ifconditional\c_chem_has_top \ifconditional\c_chem_has_bot \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_top\cr\the\t_chem_mid\cr\the\t_chem_bot\cr}% \else \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_top\cr\the\t_chem_mid\cr}% \fi \else \ifconditional\c_chem_has_bot \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_mid\cr\the\t_chem_bot\cr}% \else \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_mid\cr}% \fi \fi \egroup} % for the moment we have a special set \definechemicalsymbol[d:space] [\enspace\quad\enspace] \definechemicalsymbol[d:plus] [\enspace+\enspace] \definechemicalsymbol[d:minus] [\enspace-\enspace] \definechemicalsymbol[d:gives] [\rightarrowfill] % \chem_arrow_construct\xrightarrow \definechemicalsymbol[d:equilibrium] [\rightoverleftarrowfill] % \chem_arrow_construct\xrightoverleftarrow \definechemicalsymbol[d:mesomeric] [\leftarrowfill] % \chem_arrow_construct\xleftrightarrow \definechemicalsymbol[d:opencomplex] [\mathematics{\Bigg[}] % not yet ok \definechemicalsymbol[d:closecomplex][\mathematics{\Bigg]}] % not yet ok \definechemicalsymbol[d:SPACE] [{\chemicalsymbol[d:space]}] \definechemicalsymbol[d:PLUS] [{\chemicalsymbol[d:plus]}] \definechemicalsymbol[d:MINUS] [{\chemicalsymbol[d:minus]}] \definechemicalsymbol[d:GIVES] [{\chemicalsymbol[d:gives]}] \definechemicalsymbol[d:EQUILIBRIUM] [{\chemicalsymbol[d:equilibrium]}] \definechemicalsymbol[d:MESOMERIC] [{\chemicalsymbol[d:mesomeric]}] \definechemicalsymbol[d:OPENCOMPLEX] [{\chemicalsymbol[d:opencomplex]}] \definechemicalsymbol[d:CLOSECOMPLEX][{\chemicalsymbol[d:closecomplex]}] \unexpanded\def\formulachemical {\relax\dotriplegroupempty\chem_formula} \def\chem_formula#1#2#3% we could do hboxes and measure {\ifthirdargument \doifelsenothing{#2}\chem_formula_top_nop{\chem_formula_top_yes{#2}}% \doifelsenothing{#3}\chem_formula_bot_nop{\chem_formula_bot_yes{#3}}% \else\ifsecondargument \chem_formula_top_nop \doifelsenothing{#2}\chem_formula_bot_nop{\chem_formula_bot_yes{#2}}% \else \chem_formula_top_nop \chem_formula_bot_nop \fi\fi \ifcsname\??chemicalsymbol d:\detokenize{#1}\endcsname \t_chem_mid\expandafter{\the\t_chem_mid\chemicalsymbol[d:#1]\aligntab}% \else \t_chem_mid\expandafter{\the\t_chem_mid\molecule{#1}\aligntab}% \fi} \def\chem_formula_mid#1% {\csname\??chemicalsymbol\detokenize{#1}\endcsname} \def\chem_formula_top_nop {\t_chem_top\expandafter{\the\t_chem_top\aligntab}} \def\chem_formula_bot_nop {\t_chem_bot\expandafter{\the\t_chem_bot\aligntab}} \def\chem_formula_top_yes#1{\t_chem_top\expandafter{\the\t_chem_top\chem_formula_top_indeed{#1}\aligntab}\settrue\c_chem_has_top} \def\chem_formula_bot_yes#1{\t_chem_bot\expandafter{\the\t_chem_bot\chem_formula_bot_indeed{#1}\aligntab}\settrue\c_chem_has_bot} \def\chem_formula_top_indeed#1{\strut#1} \def\chem_formula_bot_indeed#1{\strut#1} % Experimental: defaults might change. \definefloat [\v!chemical] [\v!chemicals] \setuplabeltext [\v!chemical=] \setupfloat [\v!chemical] [\c!location=\v!here, \c!inner=\hsize.8\textwidth\dontleavehmode, % brr \c!align={\v!flushleft,\v!lohi}] \setupcaption [\v!chemical] [\c!location=\v!right, \c!distance=\zeropoint, \c!width=.2\textwidth, \c!align=\v!flushright] % Can be used as for displayed math: \startplaceformula... to display a chemical formula % or a chemical structure: % % \startplacechemical % \startchemicalformula % \chemical{2H_2} % \chemical{PLUS} % \chemical{O_2} % \chemical{GIVES} % \chemical{2H_2O} % \stopchemicalformula % \stopplacechemical % gone: state option resolution offset (now frame offset) alternative \setupchemicalframed [\c!align=\v!normal, \c!strut=\v!no, \c!offset=\v!overlay, \c!frame=\v!off] \definecolor % private color [chemicalframecolor] [r=.75,g=.85,b=.95] \setupchemical [\c!frame=, \c!width=\v!fit, % or unitless number, multiplies scale*EmWidth \c!height=\v!fit, % or unitless number, multiplies scale*EmWidth \c!left=\v!fit, % or unitless number, multiplies scale*EmWidth \c!right=\v!fit, % or unitless number, multiplies scale*EmWidth \c!top=\v!fit, % or unitless number, multiplies scale*EmWidth \c!bottom=\v!fit, % or unitless number, multiplies scale*EmWidth \c!bodyfont=, \c!scale=\v!normal, % small, normal or medium, big, or unitless number (multiplies EmWidth) \c!size=\v!medium, \c!textsize=\v!big, % how is textsize used?? \c!axis=\v!off, \c!style=\rm, \c!rotation=0, % unitless number (interpreted as degrees) \c!symalign=\v!auto, \c!location=, % not yet used (was interaction related in mkii) \c!offset=.25em, \c!unit=\emwidth, \c!factor=3, \c!color=, \c!strut=\v!yes, \c!framecolor=chemicalframecolor, \c!rulethickness=0.6pt, %1.5\linewidth, \c!rulecolor=] %D Compatibility: \definechemical[+R] {\chemical[RR]} \definechemical[-R] {\chemical[LR]} \definechemical[CARBON:CB] {\chemical[NEWMANSTAGGER,C,SB]} \definechemical[NEWMANSTAGGER:CB] {\chemical[NEWMANSTAGGER,C,SB]} \definechemical[NEWMANECLIPSED:CB]{\chemical[NEWMANECLIPSED,C,SB]} \definechemical[CARBON:CB1] {\chemical[CARBON,C,SB,Z234,1.5MOV1,MIR0,C,SB,Z234]} \definechemical[NEWMAN] {\chemical[]} \definechemical[STAGGER] {\chemical[NEWMANSTAGGER]} \definechemical[ECLIPSE] {\chemical[NEWMANECLIPSED]} \definechemical[ECLIPSED] {\chemical[NEWMANECLIPSED]} \definechemical[SIX:FRONT] {\chemical[SIXFRONT]} \definechemical[FIVE:FRONT] {\chemical[FIVEFRONT]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-arb.mkii0000644000175000017500000000014611244221744024256 0ustar norbertnorbert\unprotected \writestatus\m!systems{load ARABTEX as a module instead} \usemodule[arabtex] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-gen.mkii0000644000175000017500000041464511754241457024271 0ustar norbertnorbert%D \module %D [ file=core-spa, %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Spacing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Spacing} % to be sorted out: dependencies, order of initialization / also some dutch code here \unprotect % some will move to core-var \newif \ifgridsnapping \newif \iffuzzyvskip \let \fuzzyvskip \gobbleoneargument \let \removelastfuzzyvskip \relax \let \startbaselinecorrection \relax \let \stopbaselinecorrection \relax \let \baselinecorrection \relax \let \offbaselinecorrection \relax \appendtoks \spacing 1\to \everybodyfont \appendtoks \presetnormallineheight \to \everybodyfont \appendtoks \setnormalbaselines \to \everybodyfont % check if redundant \appendtoks \setstrut \to \everybodyfont % check if redundant \appendtoks \settopskip \to \everybodyfont \appendtoks \setmaxdepth \to \everybodyfont %appendtoks \spacing 1\to \everybodyfont \appendtoks \simplesetupindenting \to \everybodyfont \appendtoks \simplesetupblank \to \everybodyfont \appendtoks \simplesetupwhitespace \to \everybodyfont %appendtoks \checknotes \to \everybodyfont % not \appendtoks \simplesetupspacing \to \everybodyfont % nieuw \appendtoks \setrelativeinterlinespace \to \everybodyfont \appendtoks \updateraggedskips \to \everyfontswitch % under test \prependtoks \let\par\endgraf \to \everypagebody % see \fillinline \appendtoks \simplesetupspacing \to \everydefinedfont % if you want to hyphenate the first word of a paragraph ... \appendtoks\hskip0pt\to\everypar \def\stelfactorenin {\simplesetupwhitespace \simplesetupblank \settopskip \setmaxdepth} \def\softbreak {\relax\ifhmode\hskip\parfillskip\break\fi} \let\poplastnode\relax \def\pushlastnode {\ifdim\lastskip=\zeropoint \ifnum\lastpenalty=\zerocount \ifnum\lastkern=\zerocount \let\poplastnode\relax \else \edef\poplastnode{\kern\the\lastkern\relax}\kern-\lastkern % untested \fi \else \edef\poplastnode{\penalty\the\lastpenalty\relax}\nobreak % untested \fi \else \edef\poplastnode{\vskip\the\lastskip\relax}\vskip-\lastskip % \removelastskip \fi} %D The dreadful sequence \type {\bgroup} \unknown\ %D \type {\carryoverpar} \unknown\ \type {\egroup} is needed %D when for instance sidefloats are used in combination with %D something that starts with a group. This is because %D otherwise the indentation as set (by the output routine) %D inside the group are forgotten afterwards. (I must %D not forget its existence). \global\let\carriedoverpar\relax \def\carryoverpar#1% {\expanded % \scratchtoks{#1}% {\noexpand#1% \the\scratchtoks \hangindent\the\hangindent \hangafter \the\hangafter \parskip \the\parskip \leftskip \the\leftskip \rightskip \the\rightskip}} %D A quick way to determine left|/|middle|/|right states %D (experimental). \setvalue{\??as\v!left }{0} \setvalue{\??as\v!middle}{1} \setvalue{\??as\v!right }{2} \def\setalignmentswitch#1% {\chardef\alignmentswitch0\csname\??as#1\endcsname\relax} %D There are two ways to influence the interline spacing. The %D most general and often most consistent way is using %D %D \showsetup{setupinterlinespace} %D %D For instance %D %D \starttyping %D \setupinterlinespace[line=2.8ex] %D \stoptyping %D %D This setting adapts itself to the bodyfontsize, while for %D instance saying %D %D \starttyping %D \setupinterlinespace[line=12pt] %D \stoptyping %D %D sets things fixed for all sizes, which is definitely not %D what we want. Therefore one can also say: %D %D \starttyping %D \definebodyfontenvironment[9pt][interlinespace=11pt] %D \stoptyping %D %D One can still use \type{\setupinterlinespace} (without %D arguments) to set the interline space according to the %D current font, e.g. a \type{\bfa}. \newif\iflocalinterlinespace % font-ini \ifx\bodyfontinterlinespecs\undefined \let\bodyfontinterlinespecs\empty \let\bodyfontinterlinespace\empty \fi \def\presetnormallineheight {\edef\normallineheight{\@@itline}% % done elsewhere : \spacing\!!plusone % new per 10/08/2004, else problems in otr / !! needed \iflocalinterlinespace \else \doifdefined\bodyfontinterlinespecs {\doifsomething\bodyfontinterlinespace {\edef\normallineheight{\bodyfontinterlinespace}}}% \fi} \def\setupspecifiedinterlinespace[#1]% {\getparameters[\??it][#1]% \scratchdimen0\@@itheight\points \advance\scratchdimen 0\@@itdepth\points \ifdim\scratchdimen>\onepoint \showmessage\m!layouts{10}{\@@itheight,\@@itdepth}% \let\@@itheight\strutheightfactor \let\@@itdepth \strutdepthfactor \else \let\strutheightfactor\@@itheight \let\strutdepthfactor \@@itdepth \fi \let\minimumstrutheight \@@itminheight \let\minimumstrutdepth \@@itmindepth \let\minimumlinedistance\@@itdistance \let\normallineheight \@@itline % let ! ! ! ! ! ivm ex \doifelse\@@ittop\v!height % new, topskip does more bad than good {\let\topskipfactor \@@itheight} {\let\topskipfactor \@@ittop }% \let\maxdepthfactor \@@itbottom \let\baselinegluefactor \@@itstretch \setfontparameters % redundant, can be \setstrut, test first \updateraggedskips} % yes indeed % \let\currentrelativeinterlinespace\empty % % \def\setuprelativeinterlinespace[#1]% % {\processallactionsinset % [#1] % [ \v!on=>\oninterlineskip, % \v!off=>\offinterlineskip, % \v!reset=>\let\currentrelativeinterlinespace\empty % \setfontparameters,% just \setstrut, test first % \s!unknown=>\assignvalue{#1}\currentrelativeinterlinespace{1.00}{1.25}{1.50}% % \spacing\currentrelativeinterlinespace]} % \setupinterlinespace[big] \switchtobodyfont[11pt] -> forgotten % \setupinterlinespace[auto,big] \switchtobodyfont[11pt] -> remembered \let\currentrelativeinterlinespace\empty \def\setuprelativeinterlinespace[#1]% {\processallactionsinset [#1] [ \v!on=>\oninterlineskip, \v!off=>\offinterlineskip, \v!reset=>\let\currentrelativeinterlinespace\empty \let\setrelativeinterlinespace\relax \setfontparameters, \v!auto=>\let\setrelativeinterlinespace\dosetrelativeinterlinespace, \s!unknown=>\assignvalue\commalistelement\currentrelativeinterlinespace{1.00}{1.25}{1.50}% \spacing\currentrelativeinterlinespace]} \def\dosetrelativeinterlinespace {\ifx\currentrelativeinterlinespace\empty\else \spacing\currentrelativeinterlinespace \fi} \let\setrelativeinterlinespace\relax % \appendtoks \setrelativeinterlinespace \to \everybodyfont \def\complexsetupinterlinespace[#1]% \commalistelement ipv #1 {\doifassignmentelse{#1}\setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]} \def\setuplocalinterlinespace[#1]% {\localinterlinespacetrue \setupinterlinespace[#1]% \localinterlinespacefalse} \def\simplesetupinterlinespace {\localinterlinespacetrue \setfontparameters \updateraggedskips % funny one here \localinterlinespacefalse} \definecomplexorsimple\setupinterlinespace % In earlier versions \type{\bigskipamount} was % \type{\ht\strutbox} and the stretch was plus or minus % \type{.4\dp\strutbox}. Don't ask me why. The most recent % implementation is based on a user supplied distance, which % is by default \type{.75\normalskipamount} where % \type{\normalskipamount} equals the current baseline % distance. % \lineskiplimit = -\maxdimen -> freezes baselineskip % can be conditionals \newif\ifblanknowhite \blanknowhitefalse \newif\ifblankindeed \blankindeedfalse \newif\ifblankreset \blankresetfalse \newif\ifblankdisable \blankdisablefalse \newif\ifblankflexible \blankflexibletrue \newif\ifblankouter \newif\ifblankforce \newif\ifblankgoback \newskip\blankskip \blankskip=\bigskipamount \newskip\blankskipamount \def\skipfactor {.75} \def\skipgluefactor{.25} \def\normalskipamount {\openlineheight \ifgridsnapping \else \ifblankflexible \!!plus \skipgluefactor\openlineheight \!!minus\skipgluefactor\openlineheight \fi \fi \relax} \def\linedistance {\normalskipamount} \def\appliedblankskip{\skipfactor\linedistance} \def\lastblankskip {\blankskip} \def\currentblank {\v!big} \def\oldprevdepth {\prevdepth} \def\newprevdepth {-1001pt} \def\mindimen {1sp} % was: 0.00002pt \newif\iflocalblankfixed \newif\iflocalblankflexible \def\geenblanko{\removelastskip} % will become obsolete %%%% pas op, wordt ook in core-pos gebruikt \def\doassignsomeskip#1\to#2% ook nog \v!halfline+fuzzysnap {\doifelse{#1}\v!line {#2\openlineheight} {\ifgridsnapping \assigndimension{#1}{#2}{.25\openlineheight}{.5\openlineheight}\openlineheight \else \assigndimension{#1}{#2}\smallskipamount\medskipamount\bigskipamount \fi}% \relax} % \relax is really needed, else we may loose stretch due to lookahead; somehow % this bug was introduced a while ago but somehow went unnoticed; fixed 2/7/2008 \def\addblankskip#1#2#3{\global\advance\blankskip#1\ifgridsnapping#3\else#2\fi\relax} \def\defineblankmethod[#1]#2{\setvalue{\??bo\??bo#1}{#2}} \defineblankmethod [\v!big] {\addblankskip+\bigskipamount \openlineheight} \defineblankmethod [-\v!big] {\addblankskip-\bigskipamount \openlineheight} \defineblankmethod [\v!medium] {\addblankskip+\medskipamount {.5\openlineheight}} \defineblankmethod [-\v!medium] {\addblankskip-\medskipamount {.5\openlineheight}} \defineblankmethod [\v!small] {\addblankskip+\smallskipamount{.25\openlineheight}} \defineblankmethod [-\v!small] {\addblankskip-\smallskipamount{.25\openlineheight}} \defineblankmethod [\v!white] {\addblankskip+\parskip \openlineheight} \defineblankmethod [-\v!white] {\addblankskip-\parskip \openlineheight} \defineblankmethod [\v!line] {\addblankskip+\openlineheight \openlineheight} \defineblankmethod [-\v!line] {\addblankskip-\openlineheight \openlineheight} \defineblankmethod [\v!formula] {\global\advance\blankskip\medskipamount} \defineblankmethod [\v!nowhite] {\global\blanknowhitetrue} \defineblankmethod [\v!disable] {\global\blankdisabletrue} \defineblankmethod [\v!force] {\global\blankforcetrue} \defineblankmethod [\v!outer] {\ifvmode\ifinner\blankoutertrue\fi\fi} \defineblankmethod [\v!reset] {\global\blankresettrue} \defineblankmethod [\v!flexible] {\global\localblankflexibletrue} \defineblankmethod [\v!fixed] {\global\localblankfixedtrue} \defineblankmethod [\v!back] {\global\blankgobacktrue} % {\geenblanko} \defineblankmethod [\v!halfline] {\ifgridsnapping\global\fuzzyvskiptrue\fi \global\advance\blankskip .5\lineheight} \defineblankmethod [\v!none] {\global\blankresettrue} \defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi} \defineblankmethod[\v!synchronize] {\verticalstrut\vskip-2\lineheight\verticalstrut} % \vtop{\blank[synchronize]\blank[line]test} \defineblankmethod [\v!always] {\redowhitespace} % experimental % happens often, so we speed this up: % % \defineblankmethod [2*\v!line] {\addblankskip+{2\openlineheight}{2\openlineheight}} % \defineblankmethod [2*\v!big] {\addblankskip+{2\bigskipamount }{2\openlineheight}} % % no, with 2\whatever we loose the stretch and shrink! Taco's alternative: \defineblankmethod [2*\v!line] {\addblankskip+\openlineheight\openlineheight \addblankskip+\openlineheight\openlineheight} \defineblankmethod [2*\v!big] {\addblankskip+\bigskipamount\openlineheight \addblankskip+\bigskipamount\openlineheight} \def\doblank#1% {\edefconvertedargument\ascii{#1}% \ifx\ascii\empty\else \ifcsname\??bo\??bo\ascii\endcsname % internal def \csname\??bo\??bo\ascii\endcsname \else\ifcsname\??bo\ascii\endcsname % user def / slow \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax \else \dorepeatwithcommand[#1]\redoblank \fi\fi \fi \relax} \def\redoblank#1% {\edefconvertedargument\ascii{#1}% \ifx\ascii\empty\else \ifcsname\??bo\??bo\ascii\endcsname % internal def \csname\??bo\??bo\ascii\endcsname \else\ifcsname\??bo\ascii\endcsname % user def / slow \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax \else \global\advance\blankskip#1\relax \fi\fi \fi \relax} \unexpanded\def\blank % the \relax is definitely needed due to the many \if's {\relax\complexorsimple\doblank} \def\complexdoblank {\flushnotes \ifmmode \@EA\nocomplexdoblank \else \ifopelkaar \ifinpagebody \@EA\@EAEAEA\@EA\docomplexdoblank \else \@EA\@EAEAEA\@EA\nocomplexdoblank \fi \else \@EAEAEA\docomplexdoblank \fi \fi} \def\nocomplexdoblank[#1]% {% evt blokkeerfalse \ifmmode\else\par\fi} % Overloaded in cont-new! \newsignal\noblanksignal % \def\doinhibitblank % {\kern\noblanksignal} % \def\inhibitblank% the fast, local way % {\endgraf\ifvmode\prevdepth\newprevdepth\fi} % \def\docomplexdoblank[#1]% pas op \relax's zijn nodig ivm volgende \if % {\global\blankresetfalse % \global\blankdisablefalse % \global\blanknowhitefalse % \global\localblankflexiblefalse % \global\localblankfixedfalse % \global\blankskip\zeropoint % \global\blankforcefalse % \global\blankgobackfalse % \blankouterfalse % \expanded{\rawprocesscommalist[#1]}\doblank % \ifdim\blankskip=\zeropoint\relax % \iflocalblankflexible % \doglobal\advance\blankskip \currentblank % \else\iflocalblankfixed % \doglobal\advance\blankskip \currentblank % \fi\fi % \fi % \ifblankouter % \else % \par % \ifvmode % \ifblankgoback % \removelastskip % \fi % \ifblankforce % % dit gaat mis in pos fonts % % \ifdim\prevdepth>\zeropoint\else ... % % -1000pt signals top of page or column (\ejectcolumn) % \bgroup\forgeteverypar\verticalstrut\egroup\kern-\struttotal % \fi % \ifblankdisable % \global\blankindeedfalse % \ifgridsnapping % \ifdim\prevdepth<\zeropoint % % brrr % \else % % dirty trick: smaller blanks are ignored after % % a larger one, so 10 lines is probably safe; first make % % sure that we honor penalties % \scratchcounter\lastpenalty % % now comes the trick (cross our fingers that this works % % well in multi columns; maybe an ifinner test is needed % % \vskip-10\lineheight % % \ifnum\scratchcounter=\zerocount \else \penalty\lastpenalty \fi % % \vskip 10\lineheight % % allas, this leads to overfull pages, so we try this: % \kern-\noblanksignal % \ifnum\scratchcounter=\zerocount % \else % \penalty\lastpenalty % \fi % \kern\noblanksignal % % end-of-dirty-trick % \fi % \else % \ifdim\prevdepth<\zeropoint % % brrr % \else % % ensure at least a proper prevdepth, this should be % % an option % \vskip-\prevdepth % \vskip\strutdepth % \prevdepth\strutdepth % \fi % % the old crappy piece of code % \edef\oldprevdepth{\the\prevdepth}% % \prevdepth\newprevdepth % \fi % \else % \global\blankindeedtrue % \fi % \ifblankreset % \global\blankindeedtrue % \ifgridsnapping % % let's play safe and not fool around with the depth, if % % only because it took a lot of effort to sort out the grid % % stuff in the first place % \else % \ifdim\prevdepth=\newprevdepth % \prevdepth\oldprevdepth % \fi % \fi % \fi % \ifblankindeed % \ifdim1\lastskip<1\blankskip\relax % % else when \blanko[2*groot] + \blanko[3*groot] with parskip % % equaling 1*groot, gives a groot=\parskip so adding a small % % value makes it distinguishable; can also be done at parskip % % setting time (better) % \global\advance\blankskip \mindimen\relax % = skip % % test this on 2* + 3* and parskip groot % \ifblanknowhite % \global\advance\blankskip -\parskip % \else % \ifdim\lastskip=\parskip % \else % force this due to previous comment % \ifdim\parskip>\zeropoint\relax % \ifdim\blankskip<\parskip\relax % \global\blankskip\zeropoint % \else % \global\advance\blankskip -\parskip % \fi % \fi % \fi % \fi % \ifblankflexible \else % \blankskip1\blankskip % \fi % \iflocalblankfixed % \blankskip1\blankskip % \fi % \iflocalblankflexible % \blankskip1\blankskip % \!!plus\skipgluefactor\blankskip % \!!minus\skipgluefactor\blankskip % \fi % \ifdim\lastkern=\noblanksignal % controled and grid % \global\blankindeedfalse % \else\ifgridsnapping\else\ifdim\prevdepth=\newprevdepth % \global\blankindeedfalse % \fi\fi\fi % \ifblankindeed % \iffuzzyvskip % \removelastfuzzyvskip % \fuzzyvskip\blankskip\relax % \else % \removelastskip % \vskip\blankskip\relax % \fi % \fi % \else % \iffuzzyvskip % \removelastfuzzyvskip % \fuzzyvskip\blankskip\relax % \else % % new, test this on pascal % \ifdim\blankskip<\zeropoint % \advance\blankskip-\lastskip % \removelastskip % \ifdim\blankskip>\zeropoint % \vskip\blankskip % \else % \vskip\zeropoint % \fi % \else % % also new % \ifdim\blankskip=\zeropoint % \ifblanknowhite % \geenwitruimte % \fi % \fi % \fi % \fi % \fi % \fi % \fi % \fi % \global\fuzzyvskipfalse % \presetindentation} % goback was broken: % \def\doinhibitblank % {\kern\noblanksignal} % \def\inhibitblank% the fast, local way % {\endgraf\ifvmode\prevdepth\newprevdepth\fi} % problem: we cannot look back in the mvl so we need 3 kinds of signals \def\noblankpsignal{1010101} \def\inhibitgridblank % was doinhibitblank {\ifvmode\else\endgraf\fi \ifvmode \ifnum\lastpenalty<10000 \kern-\noblanksignal % new \kern \noblanksignal \else \penalty\noblankpsignal \fi \fi} \def\inhibittextblank % was inhibitblank {\endgraf \ifvmode \prevdepth\newprevdepth \fi} % new macro % % \def\inhibitblank % need some work % {\endgraf % \ifvmode % \ifgridsnapping % \inhibitgridblank % \else % % this one spoils the grid % \inhibittextblank % \fi % \fi} \def\doinhibitblank{\inhibitgridblank} \def\inhibitblank {\inhibittextblank} % will become obsolete \ifx\undefined\savedlastskip \newskip \savedlastskip \fi \ifx\undefined\savedlastpenalty \newcount\savedlastpenalty \fi % beware, prevdepth can have funny values (e.g. mvl value when in box) \def\docomplexdoblank[#1]% pas op \relax's zijn nodig ivm volgende \if {\global\blankresetfalse \global\blankdisablefalse \global\blanknowhitefalse \global\localblankflexiblefalse \global\localblankfixedfalse \global\blankforcefalse \global\blankgobackfalse \blankouterfalse \global\blankskip\zeropoint % \edefconvertedargument\ascii{#1}% todo fast check for simple \ifcsname\??bo\??bo\ascii\endcsname % internal def \csname\??bo\??bo\ascii\endcsname \else\ifcsname\??bo\ascii\endcsname % user def / slow \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax \else \expanded{\rawprocesscommalist[#1]}\doblank \fi\fi % \relax % to be sure \ifdim\blankskip=\zeropoint\relax \iflocalblankflexible \doglobal\advance\blankskip \currentblank \else\iflocalblankfixed \doglobal\advance\blankskip \currentblank \fi\fi \fi \relax % to be sure \ifblankouter % do nothing \else \par \ifvmode \ifblankgoback \ifdim\lastskip>\zeropoint \vskip-\lastskip \fi \savedlastskip\zeropoint \else\ifdim\lastskip>\zeropoint \savedlastskip\lastskip \else % todo: lastnode, dan namelijk geen skip ! \savedlastskip\zeropoint \fi\fi \ifblankforce % dit gaat mis in pos fonts % \ifdim\prevdepth>\zeropoint\else ... % -1000pt signals top of page or column (\ejectcolumn) \bgroup\forgeteverypar\verticalstrut\egroup\kern-\struttotal \savedlastskip\zeropoint \fi \savedlastpenalty\lastpenalty % hm, now it gets lost \ifblankdisable \global\blankindeedfalse % keep this, i.e. disable current too \ifgridsnapping \ifdim\prevdepth<\zeropoint % brrr \else % dirty trick: smaller blanks are ignored after a % larger one, so 10 lines is probably safe; we need % to make sure that we honor penalties; here comes the % trick (cross our fingers that this works well in % multi columns; maybe an ifinner test is needed % \scratchcounter\lastpenalty % \vskip-10\lineheight % \ifnum\scratchcounter=\zerocount \else \penalty\lastpenalty \fi % \vskip 10\lineheight % alas, this leads to overfull pages, so we try this: \inhibitgridblank \fi \else \ifdim\prevdepth<\zeropoint % brrr \else % ensure at least a proper prevdepth, this should be % an option \vskip-\prevdepth \vskip\strutdepth \prevdepth\strutdepth \fi % the old crappy piece of code \edef\oldprevdepth{\the\prevdepth}% \prevdepth\newprevdepth % == \inhibittextblank \fi \else \global\blankindeedtrue \fi \ifblankreset \global\blankindeedtrue \ifgridsnapping % let's play safe and not fool around with the depth, if % only because it took a lot of effort to sort out the grid % stuff in the first place \else \ifdim\prevdepth=\newprevdepth \prevdepth\oldprevdepth \fi \fi \fi \ifblankindeed \ifdim1\savedlastskip<1\blankskip\relax % else when \blank[2*groot] + \blank[3*groot] with parskip % equaling 1*groot, gives a groot=\parskip so adding a small % value makes it distinguishable; can also be done at parskip % setting time (better) \global\advance\blankskip \mindimen\relax % = skip % test this on 2* + 3* and parskip groot \ifblanknowhite \global\advance\blankskip -\parskip \else \ifdim\savedlastskip=\parskip \else % force this due to previous comment \ifdim\parskip>\zeropoint\relax \ifdim\blankskip<\parskip\relax \global\blankskip\zeropoint \else \global\advance\blankskip -\parskip \fi \fi \fi \fi \ifblankflexible \else \blankskip1\blankskip \fi \iflocalblankfixed \blankskip1\blankskip \fi \iflocalblankflexible \blankskip1\blankskip \!!plus \skipgluefactor\blankskip \!!minus\skipgluefactor\blankskip \fi \ifdim\lastkern=\noblanksignal\relax % controlled and grid \global\blankindeedfalse \else\ifnum\savedlastpenalty=\noblankpsignal\relax % controlled and grid \global\blankindeedfalse \else\ifgridsnapping\else\ifdim\prevdepth=\newprevdepth \global\blankindeedfalse \fi\fi\fi\fi \ifblankindeed \iffuzzyvskip \removelastfuzzyvskip \fuzzyvskip\blankskip\relax \else \relax\ifdim\savedlastskip=\zeropoint\else \vskip-\savedlastskip \fi \vskip\blankskip\relax \fi \fi \else \iffuzzyvskip \removelastfuzzyvskip \fuzzyvskip\blankskip\relax \else % new, test this on pascal \ifdim\blankskip<\zeropoint \relax\ifdim\savedlastskip=\zeropoint\else \advance\blankskip-\savedlastskip \vskip-\savedlastskip \fi \ifdim\blankskip>\zeropoint \vskip\blankskip \else \vskip\zeropoint \fi \else % also new \ifdim\blankskip=\zeropoint \ifblanknowhite \nowhitespace \fi \fi \fi \fi \fi \fi \fi \fi \global\fuzzyvskipfalse \presetindentation} %D For a long time we had: %D %D \starttyping %D \def\simpledoblank% %D {\doifelse{\currentwhitespace}{\v!geen} %D {\blank[\currentblank]} %D {\blank[\currentwhitespace]}} %D \stoptyping %D %D But Berend de Boer wanted more control, so now we have: \def\simpledoblank % ... {\doifelse\currentwhitespace\v!none {\blank[\currentblank]} {\blank[\s!default]}} %D Another useful definition would be: %D %D \starttyping %D \defineblank %D [\s!default] %D [\v!groot] %D \stoptyping \def\dosetupblank#1% amount are an plain inheritance {\bigskipamount#1\relax \ifblankflexible \else \bigskipamount1\bigskipamount \fi \medskipamount \bigskipamount \divide\medskipamount \plustwo \smallskipamount\bigskipamount \divide\smallskipamount\plusfour}% \def\complexsetupblank[#1]% more \let's -> this also wil become installable {\ifgridsnapping \blankflexiblefalse \else \ExpandFirstAfter\processallactionsinset [#1] [ \v!flexible=>\blankflexibletrue, \v!fixed=>\blankflexiblefalse]% \fi \ExpandFirstAfter\processallactionsinset [#1] [ \v!flexible=>\dosetupblank\appliedblankskip, \v!fixed=>\dosetupblank\appliedblankskip, \v!line=>\edef\appliedblankskip{\linedistance}% \dosetupblank\appliedblankskip, \v!halfline=>\scratchskip.5\linedistance \edef\appliedblankskip{\the\scratchskip}% \dosetupblank\appliedblankskip, \v!big=>\ifgridsnapping \edef\appliedblankskip{\linedistance}% \dosetupblank\appliedblankskip \fi \let\currentblank\v!big, \v!medium=>\let\currentblank\v!medium, \v!small=>\let\currentblank\v!small, \v!global=>\let\currentblank\v!global, \v!normal=>\dosetupblank\appliedblankskip, \v!standard=>\edef\appliedblankskip{\skipfactor\linedistance}% \dosetupblank\appliedblankskip, \s!default=>\dosetupblank\appliedblankskip, \s!unknown=>\let\appliedblankskip\commalistelement \dosetupblank\appliedblankskip]% \simplesetupwhitespace} % \definecomplexorsimpleempty\setupblank % % speed gain: 60 sec -> 30 sec \definecomplexorsimple\setupblank \def\simplesetupblank % == snelle \setupblank[\s!default] {\ifgridsnapping \blankflexiblefalse \fi \dosetupblank\appliedblankskip % \let\deblanko\v!big \simplesetupwhitespace} \def\restorestandardblank% \v!standard {\edef\appliedblankskip{\skipfactor\linedistance}% \dosetupblank\appliedblankskip }%\let\deblanko\v!big} \def\dodefineblank[#1][#2]% {\def\docommand##1{\setvalue{\??bo##1}{#2}}% \processcommalist[#1]\docommand} \def\defineblank {\dodoubleargument\dodefineblank} \def\savecurrentblank {\edef\restorecurrentblank {\bigskipamount\the\bigskipamount \medskipamount\the\medskipamount \smallskipamount\the\smallskipamount \noexpand\def\noexpand\currentblank{\currentblank}% \ifblankflexible \noexpand\blankflexibletrue \else \noexpand\blankflexiblefalse \fi}} %D Now. \defineblank [\s!default] [\v!white] \defineblank [\v!height] [\strutheight] \defineblank [\v!depth] [\strutdepth] % old implementation % % \let\currentindentation=\empty % % \newdimen\ctxparindent % % \newif\ifindentfirstparagraph % \indentfirstparagraphtrue % % \def\presetindentation % {\doifoutervmode{\ifindentfirstparagraph\else\noindentation\fi}} % % \definecomplexorsimple\setupindenting % % \def\complexsetupindenting[#1]% % {\processallactionsinset % [#1] % [ \v!first=>\indentfirstparagraphtrue, % \v!next=>\indentfirstparagraphfalse, % \s!default=>\simplesetupindenting, % \s!unknown=>\edef\currentindentation{\commalistelement}% % \simplesetupindenting]} % % \def\simplesetupindenting % {\assigndimension\currentindentation\ctxparindent{1em}{1.5em}{2em}% % \parindent\ctxparindent\relax} % % \def\indenting % watch out: \dodo and no \do % {\dosingleargument\dodoindenting} % % \def\dodoindenting[#1]% oeps, we needed a commalist handler here! % {\edef\currentindenting{#1}% % \processcommacommand[#1]\dododoindenting} % % \def\dododoindenting#1% % {\executeifdefined{\??in:#1}\donothing} % % \let\currentindenting\empty % % \def\defineindentingmethod[#1]#2% % {\setvalue{\??in:#1}{#2}} % % \defineindentingmethod [\v!no] {\parindent\ctxparindent\noindent} % \defineindentingmethod [\v!not] {\parindent\ctxparindent\noindent} % % \defineindentingmethod [\v!first] {\indentfirstparagraphtrue} % \defineindentingmethod [\v!next] {\indentfirstparagraphfalse} % % \defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent ! % \defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent ! % % \defineindentingmethod [\v!never] {\parindent\zeropoint\relax} % no \indent ! % % \def\noindenting{\indenting[\v!no,\v!next]} % was \nietinspringen % \def\doindenting{\indenting[\v!yes,\v!first]} % was \welinspringen % % \def\dochecknextindentation#1% internal one % {\checknextindentation[\getvalue{#1\c!indentnext}]} % % \def\checknextindentation[#1]% % {\processaction[#1][%\v!keep=>, % \v!yes=>\doindentation, % \v!no=>\noindentation, % \v!auto=>\autoindentation]} % % \def\doindentation% too simple % {\gdef\checkindentation{\global\indentationtrue}} % % \ifx\autoindentation\undefined % \let\autoindentation\relax % \fi % % \newif\ifindentation \indentationtrue % documenteren, naar buiten % % \let\checkindentation=\relax % % \def\donoindentation % {\ifdim\parindent=\zeropoint \else % \bgroup \setbox\scratchbox\lastbox \egroup % \fi} % % \def\noindentation % made global % {\ifinpagebody \else % \global\indentationfalse % \gdef\checkindentation % {\donoindentation % \gdef\checkindentation{\global\indentationtrue}}% % \fi} % % \def\nonoindentation % bv bij floats % {\ifinpagebody \else % \global\indentationtrue % \gdef\checkindentation{\global\indentationtrue}% % \fi} % % \def\indentation % {\ifvmode \ifdim\parindent=\zeropoint \else % % was : \hskip\parindent % % can be: \indent % % but we test: % \noindent\hskip\parindent % \fi \fi} \let\currentindentation\empty % amount/keyword % \let\normalindentation \empty % used for reinstating normal indentation \let\currentindenting \empty % method \newdimen\ctxparindent \newif\ifindentfirstparagraph % \indentfirstparagraphtrue \chardef\indentingtoggle\zerocount %D After a blank or comparable situation (left side floats) we %D need to check if the next paragraph has to be indented. \def\presetindentation {\doifoutervmode{\ifindentfirstparagraph\else\noindentation\fi}} %D This sets up the (normally) global indentation behavior as well %D as the amounts. \definecomplexorsimple\setupindenting % \def\complexsetupindenting[#1]% % {\edef\currentindenting{#1}% % \indentfirstparagraphtrue % \parindent\ctxparindent % \chardef\indentingtoggle\zerocount % \processcommalist[#1]\docomplexsetupindenting % \ifindentfirstparagraph\else\noindentation\fi % added % \toggleindentation} \indentfirstparagraphtrue \parindent\ctxparindent \chardef\indentingtoggle\zerocount % \newtoks\savedeverypar \savedeverypar\everypar % \def\restoreeverypar{\everypar\savedeverypar} % we need a better everypar model: for each option a switch, which we % set to false with \forgetall and can enable when needed (context 4); % that way we can control the order of execution of options \def\checkeverypar % currently a hack {\ifzeropt\parindent\else \doifsometokselse\everypar\donothing{\appendtoks\checkindentation\to\everypar}% \fi} \def\complexsetupindenting[#1]% {\edef\currentindenting{#1}% \doifsomething\currentindenting % handy when a parameter is passed {% not here: \indentfirstparagraphtrue % not here: \parindent\ctxparindent % not here: \chardef\indentingtoggle\zerocount % we use commacommand in order to catch #1 being a command (expanded parameter) \processcommacommand[\currentindenting]\docomplexsetupindentingA % catch small, medium, etc \processcommacommand[\currentindenting]\docomplexsetupindentingB % catch rest \checkeverypar % only when non-empty #1 \ifindentfirstparagraph\else\noindentation\fi % added \toggleindentation}} \def\docomplexsetupindentingA#1% {\edefconvertedargument\!!stringa{#1}% \doifundefined{\??in:\!!stringa}% {\edef\currentindentation{#1}% \let\normalindentation\currentindentation \simplesetupindenting}} \def\docomplexsetupindentingB#1% {\edefconvertedargument\!!stringa{#1}% catch #1=\somedimen \executeifdefined{\??in:\!!stringa}\donothing} \def\simplesetupindenting % empty case, a it strange, needed this way? {\assigndimension\currentindentation\ctxparindent{1em}{1.5em}{2em}} \def\indenting % kind of obsolete {\dosingleargument\complexsetupindenting} % use \noindentation to suppress next indentation \def\defineindentingmethod[#1]#2% {\setvalue{\??in:#1}{#2}} \defineindentingmethod [\v!no] {\parindent\zeropoint}% was: \ctxparindent\noindent} \defineindentingmethod [\v!not] {\parindent\zeropoint}% was: \ctxparindent\noindent} \defineindentingmethod [\v!first] {\indentfirstparagraphtrue} \defineindentingmethod [\v!next] {\indentfirstparagraphfalse} \defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent ! \defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent ! \defineindentingmethod [\v!never] {\parindent\zeropoint\relax % no \indent ! \chardef\indentingtoggle\zerocount} \defineindentingmethod [\v!odd] {\chardef\indentingtoggle\plusone} \defineindentingmethod [\v!even] {\chardef\indentingtoggle\plustwo} \defineindentingmethod [\v!normal] {\ifx\normalindentation\empty\else \let\currentindentation\normalindentation \simplesetupindenting \fi} \defineindentingmethod [\v!reset] {\indentfirstparagraphtrue \parindent\zeropoint \chardef\indentingtoggle\zerocount} \def\noindenting{\indenting[\v!no, \v!next ]} \def\doindenting{\indenting[\v!yes,\v!first]} %D This one sets up the local indentation behaviour (i.e. either or not %D a next paragraph will be indented). \def\dochecknextindentation#1% internal one {\checknextindentation[\getvalue{#1\c!indentnext}]} \def\checknextindentation[#1]% {\processaction [#1] [%\v!keep=>, \v!yes=>\doindentation, \v!no=>\noindentation, \v!auto=>\autoindentation]} %D Here come the handlers. \newif\ifindentation \indentationtrue % documenteren, naar buiten \let\checkindentation\relax \ifx\autoindentation\undefined \let\autoindentation\relax \fi % hook \def\doindentation {\gdef\checkindentation{\global\indentationtrue}} \def\noindentation % made global {\ifinpagebody \else \global\indentationfalse \gdef\checkindentation {\donoindentation \gdef\checkindentation{\global\indentationtrue}}% \fi} \def\nonoindentation % bv bij floats {\ifinpagebody \else \global\indentationtrue \gdef\checkindentation{\global\indentationtrue}% \fi} \def\donoindentation {\ifdim\parindent=\zeropoint \else \bgroup \setbox\scratchbox\lastbox \egroup \fi} \def\indentation {\ifvmode \ifdim\parindent=\zeropoint \else % was : \hskip\parindent % can be: \indent % but we test: \noindent\hskip\parindent \fi \fi} \def\toggleindentation {\ifcase\indentingtoggle % nothing \or \notoggleindentation \or \dotoggleindentation \fi} \def\dokillindentation {\gdef\checkindentation{\global\indentationfalse\donoindentation}} \def\dotoggleindentation {\gdef\checkindentation{\global\indentationfalse\notoggleindentation\donoindentation}} \def\notoggleindentation {\gdef\checkindentation{\global\indentationtrue\dotoggleindentation}} \appendtoks \pushmacro\checkindentation \pushmacro\ifindentation \to \everypushsomestate \appendtoks \popmacro\ifindentation \popmacro\checkindentation \to \everypopsomestate % we need to save the state if we want to adapt behaviour to empty lines % % \def\setlasthvmode % {\global\chardef\savedhvmode\ifhmode\plusone\else\ifvmode\plustwo\else\zerocount\fi\fi} % % \def\resetlasthvmode % {\global\chardef\savedhvmode\zerocount} % % \chardef\savedhvmode\zerocount % This is a user requested hack (using the auto-hook). \chardef\recheckindentationmode\zerocount \def\dontrechecknextindentation {\global\chardef\recheckindentationmode\zerocount} \def\dorechecknextindentation {\ifcase\recheckindentationmode % nothing \or \dontrechecknextindentation \expandafter\doautoindentation \fi} \def\doautoindentation {\doifnextcharelse\par\donothing\noindentation} \def\autoindentation {\global\chardef\recheckindentationmode\plusone} %D An example of usage: %D %D \starttyping %D \setupindenting[small,yes] %D %D \setupitemize [indentnext=auto] %D \setuptyping [indentnext=auto] %D \setupformulas[indentnext=auto] %D %D \input tufte %D %D \startitemize %D \item itemize %D \stopitemize %D \input tufte %D %D \startitemize %D \item itemize %D \stopitemize %D %D \input tufte %D %D \startitemize %D \item itemize %D \stopitemize %D %D \page %D %D \input tufte %D %D \starttyping %D verbatim %D \stoptyping %D \input tufte %D %D \starttyping %D verbatim %D \stoptyping %D %D \input tufte %D %D \starttyping %D verbatim %D \stoptyping %D %D \page %D %D \input tufte %D %D \startformula %D a = b %D \stopformula %D \input tufte %D %D \startformula %D a = b %D \stopformula %D %D \input tufte %D %D \startformula %D a = b %D \stopformula %D \macros %D {frenchspacing,nonfrenchspacing} %D %D Smehow \type{\frenchspacing} can lead to hyphenation between %D dashes so we now have \type {\newfrenchspacing} (moved from %D \type {syst-chr}). %D Hm ... todo: \sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0 \def\setfrenchspacing#1% {\sfcode`\.#1 \sfcode`\,#1\relax \sfcode`\?#1 \sfcode`\!#1\relax \sfcode`\:#1 \sfcode`\;#1\relax} \def\frenchspacing {\setfrenchspacing{1000}} \def\resetfrenchspacing {\sfcode`\.3000 \sfcode`\,1250 \sfcode`\?3000 \sfcode`\!3000 \sfcode`\:2000 \sfcode`\;1500 } \def\frenchspacing {\setfrenchspacing{1000}} \def\newfrenchspacing{\setfrenchspacing{1050}} \def\nonfrenchspacing{\resetfrenchspacing} \def\definespacingmethod[#1]#2{\setvalue{\??sg\??sg#1}{#2}} \definespacingmethod[\v!packed]{\newfrenchspacing} \definespacingmethod[\v!broad ]{\nonfrenchspacing} \def\complexsetupspacing[#1]% {\executeifdefined{\??sg\??sg#1}\relax \updateraggedskips} \def\simplesetupspacing {\updateraggedskips} \definecomplexorsimple\setupspacing \let\normalspaceprimitive=\ % space-comment is really needed else \ \unexpanded\def\nonbreakablespace{\penalty\plustenthousand\normalspaceprimitive} \letcatcodecommand \ctxcatcodes `\~ \nonbreakablespace \def\space { } \def\removelastspace{\ifhmode\unskip\fi} \def\nospace {\removelastspace\ignorespaces} % in tables we need: % % \def\fixedspace {\hskip.5em\relax} % % but, since not all fonts have .5em digits: \unexpanded\def\fixedspace {\setbox\scratchbox\normalhbox{\mathortext{0}{0}}% \hskip\wd\scratchbox\relax} \def\fixedspaces {\letcatcodecommand \ctxcatcodes `\~ \fixedspace} \def\removeunwantedspaces {\ifhmode % we also need to unskip 0pt skips \unskip\unskip\unskip\unskip\unskip \unskip\unskip\unskip\unskip\unskip \fi} \appendtoks \let~\space \let\ \space \to\simplifiedcommands % still not fixed in aleph / luatex % % \def\removeunwantedspaces % {\ifhmode \ifnum\lastnodetype=\@@gluenode % \unskip \@EAEAEA\removeunwantedspaces % \fi \fi} %D For old time sake, will disappear soon. \let\hardespatie\fixedspace \let\geenspatie \nospace % \startbuffer % \startlines \tt \fixedspaces % 0~1~~2~~~3~~~~4~~~~~5 % 0~~~~~~~~~~~~~~~~~~~5 % $0~1~~2~~~3~~~~4~~~~~5$ % $0~~~~~~~~~~~~~~~~~~~5$ % \stoplines % % \starttabulate[|~|] % \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \NR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \NR % \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \NR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \NR % \stoptabulate % % \starttable[||] % \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \AR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \AR % \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \AR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \AR % \stoptable % \stopbuffer % % \setupbodyfont[cmr] \getbuffer % \setupbodyfont[lbr] \getbuffer \def\packed {\nointerlineskip} \def\godown[#1]% {\relax \ifhmode\endgraf\fi \ifvmode\nointerlineskip\vskip#1\relax\fi} %D A couple of plain macros: \ifx\thinspace\undefined \def\thinspace {\kern .16667em } \def\negthinspace{\kern-.16667em } \def\enspace {\kern .5em } \def\thinspace {\kern .16667\emwidth} \def\negthinspace{\kern-.16667\emwidth} \def\enspace {\kern .5\emwidth} \fi \ifx\quad\undefined \def\enskip{\hskip.5em\relax} \def\quad {\hskip 1em\relax} \def\qquad {\hskip 2em\relax} \def\enskip{\hskip.5\emwidth} \def\quad {\hskip \emwidth} \def\qquad {\hskip 2\emwidth} \fi \let\emspace\quad \ifx\smallskip\undefined \def\smallskip{\vskip\smallskipamount} \def\medskip {\vskip\medskipamount} \def\bigskip {\vskip\bigskipamount} \fi \ifx\allowbreak\undefined \def\break {\penalty\ifhmode-\plustenthousand\else\ejectpenalty\fi} \def\nobreak {\penalty \plustenthousand} \def\allowbreak{\penalty \zeropoint} \def\filbreak {\par\vfil\penalty-200\vfilneg} \def\goodbreak {\par\penalty-500 } \fi %D Made slightly more readable: \ifx\vglue\undefined \def\vglue {\afterassignment\dovglue\scratchskip=} \def\hglue {\afterassignment\dohglue\scratchskip=} \def\topglue{\nointerlineskip\vglue-\topskip\vglue} \def\dovglue {\par \scratchdimen\prevdepth \hrule\!!height\zeropoint \nobreak\vskip\scratchskip \prevdepth\scratchdimen} \def\dohglue {\dontleavehmode % \leavevmode \scratchcounter\spacefactor \vrule\!!width\zeropoint \nobreak\hskip\scratchskip \spacefactor\scratchcounter} \fi \unexpanded\def\textormathglue#1#2#3% cleaned up one {\begingroup \ifmmode \mskip#1#2% \else \scratchdimen#1\hspaceamount\empty{#3}% \scratchskip\scratchdimen\!!plus.5\scratchdimen\!!minus.3\scratchdimen \hskip\scratchskip \fi \endgroup} \def\thinglue {\textormathglue+\thinmuskip 1} \def\medglue {\textormathglue+\medmuskip 2} \def\thickglue{\textormathglue+\thickmuskip3} \ifx\eject\undefined \def\eject{\par\break} \fi \ifx\supereject\undefined \def\supereject{\par\penalty\superpenalty} \fi \ifx\dosupereject\undefined \def\dosupereject {\ifnum\insertpenalties>\zerocount % something is being held over \line{} \kern-\topskip \nobreak \vfill\supereject \fi} \fi %D We adapt plain's \type {\removelastskip} a bit: \ifx\removelastskip\undefined \def\removelastskip {\ifvmode \ifdim\lastskip=\zeropoint \else \vskip-\lastskip \fi \fi} \fi \ifx\smallbreak\undefined \def\smallbreak {\par \ifdim\lastskip<\smallskipamount \removelastskip \penalty-50 \smallskip \fi} \def\medbreak {\par \ifdim\lastskip<\medskipamount \removelastskip \penalty-100 \medskip \fi} \def\bigbreak {\par \ifdim\lastskip<\bigskipamount \removelastskip \penalty-200 \bigskip \fi} \fi \newskip\ctxparskip \ctxparskip\zeropoint \newconditional \flexiblewhitespace \settrue\flexiblewhitespace \def\blankokleinmaat {\smallskipamount} \def\blankomiddelmaat {\medskipamount} \def\blankogrootmaat {\bigskipamount} \def\currentwhitespace {\zeropoint} \definecomplexorsimple\setupwhitespace % \def\simplesetupwhitespace % {\doifnot\currentwhitespace\v!none\dosetupwhitespace} % % \def\complexsetupwhitespace[#1]% % {\doifelsenothing{#1} % {\simplesetupwhitespace} % {\edef\currentwhitespace{#1}% % \dosetupwhitespace}} % % \def\dosetupwhitespace % {\processcommacommand[\currentwhitespace]\dowhitespacemethod % \dodosetupwhitespace} \def\simplesetupwhitespace {\doifnot\currentwhitespace\v!none\dosetupwhitespace} \def\complexsetupwhitespace[#1]% {\edef\nextcurrentwhitespace{#1}% \ifx\nextcurrentwhitespace\empty \simplesetupwhitespace \else \let\currentwhitespace\nextcurrentwhitespace \dosetupwhitespace \fi} \def\dosetupwhitespace % quick test for no list {\doifdefinedelse{\??ws\??ws\currentwhitespace}% no ifcsname due to nested \lineheight {\getvalue{\??ws\??ws\currentwhitespace}}% {\processcommacommand[\currentwhitespace]\dowhitespacemethod}% \ifgridsnapping \setfalse\flexiblewhitespace \ifdim\ctxparskip>\zeropoint \ctxparskip \ifcase\baselinegridmode \baselineskip % normal ! ! ! ! !! \or \ifdim\scratchdimen=\baselineskip % maybe range \baselineskip % normal ! ! ! ! !! \else \numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax \fi \else \baselineskip % normal ! ! ! ! !! \fi \fi \else \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi \fi \parskip\ctxparskip} \chardef\baselinegridmode=0 % option in layout / 1=permit_half_lines \def\dodosetupwhitespace {\ifgridsnapping \setfalse\flexiblewhitespace \ctxparskip1\ctxparskip \ifdim\ctxparskip>\zeropoint \ifcase\baselinegridmode \ctxparskip\baselineskip % normal ! ! ! ! !! \or \ifdim\scratchdimen=\baselineskip % maybe range \ctxparskip\baselineskip % normal ! ! ! ! !! \else \ctxparskip\numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax \fi \else \ctxparskip\baselineskip % normal ! ! ! ! !! \fi \fi \else \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi \fi \parskip\ctxparskip} \definesystemvariable {ws} % whitespace \def\definewhitespacemethod[#1]#2{\setvalue{\??ws\??ws#1}{#2}} \definewhitespacemethod [\v!fix] {} \definewhitespacemethod [\v!fixed] {\setfalse\flexiblewhitespace} \definewhitespacemethod [\v!flexible] {\settrue\flexiblewhitespace} \definewhitespacemethod [\v!line] {\ctxparskip \baselineskip} \definewhitespacemethod [\v!halfline] {\ctxparskip.5\baselineskip} \definewhitespacemethod [\v!none] {\ctxparskip \zeropoint} \definewhitespacemethod [\v!big] {\ctxparskip \bigskipamount} \definewhitespacemethod [\v!medium] {\ctxparskip \medskipamount} \definewhitespacemethod [\v!small] {\ctxparskip \smallskipamount} \definewhitespacemethod [\s!default] {\simplesetupwhitespace} % {\stelwitruimteopnieuwin} % \def\dowhitespacemethod#1% % {\executeifdefined{\??ws\??ws#1}{\ctxparskip#1}\relax} \def\dowhitespacemethod#1% \doifdefined because of \lineheight {\doifdefinedelse{\??ws\??ws#1}{\getvalue{\??ws\??ws#1}}{\ctxparskip#1}\relax} \def\nowhitespace {\ifdim\parskip>\zeropoint\relax \ifdim\lastskip=-\parskip \else \vskip-\parskip \fi \fi} \def\nowhitespaceunlessskip {\ifdim\lastskip>\zeropoint \else \nowhitespace \fi} \def\redowhitespace {\ifdim\lastskip>-\parskip \else \vskip\parskip \fi} \def\savecurrentwhitespace {\edef\restorecurrentwhitespace {\ctxparskip\the\ctxparskip \parskip\the\parskip \noexpand\def\noexpand\currentwhitespace{\currentwhitespace}% \ifconditional\flexiblewhitespace \noexpand\settrue\flexiblewhitespace \else \noexpand\setfalse\flexiblewhitespace \fi}} % deze variant is nodig binnen \startopelkaar % steeds testen: % % \hoofdstuk{..} % \plaatslijst[..] % \hoofdstuk{..} % \input tufte % % met/zonder witruimte \def\whitespace {\par \ifdim\parskip>\zeropoint\relax %\ifdim\lastskip>\parskip \else % \removelastskip interferes with blanko blokkeer en klein \vskip\parskip %\fi \fi} \def\nonoblanko[#1]% {\par} \def\noblanko {\dosingleempty\nonoblanko} % De onderstaande macro handelt ook de situatie dat er geen % tekst tussen \start ... \stop is geplaatst. Daartoe wordt de % laatste skip over de lege tekst heen gehaald. Dit komt goed % van pas bij het plaatsen van (mogelijk lege) lijsten. \newif\ifopelkaar \newsignal \noparskipsignal % \def\noparskipsignal {0.00001pt} \def\lastdoneparskip {0pt} \def\startpacked {\dosingleempty\dostartpacked} \def\dostartpacked[#1]% nesting afvangen {\par \ifvmode \edef\lastdoneparskip {\the\lastskip}% \edef\lastdoneprevdepth{\the\prevdepth}% zeer recent toegevoegd \ifdim\prevdepth=-\thousandpoint % toegevoegd omdat binnen \else % een vbox een extra skip \whitespace % ongewenst is; dit kan \baselinecorrection %% zie in \placeregister[n=1] \vskip\noparskipsignal % waarschijnlijk ook in \fi % blanko blokkeer \bgroup \doifelse{#1}\v!blank \opelkaarfalse \opelkaartrue \blank[\v!disable] % dit is nog niet ok, gaat fout \setupwhitespace[\v!none] % bovenin vtop (dwz, baseline) \fi} \def\stoppacked {\par \ifvmode \egroup \ifdim\lastskip=\noparskipsignal\relax \removelastskip \nowhitespace \vskip-\lastdoneparskip \vskip+\lastdoneparskip \prevdepth-\lastdoneprevdepth % zeer recent toegevoegd \fi \fi} \def\startunpacked {\blank \leavevmode \bgroup} \def\stopunpacked {\egroup \blank} % De onderstaande macro's moeten nog eens nader worden uitgewerkt. % Ze spelen een rol bij de spatiering rond omkaderde teksten % en/of boxen zonder diepte. \def\toonregelcorrectie{\showbaselinecorrection} \def\regelcorrectie {\baselinecorrection} % \prevdepth crosses pageboundaries! % % todo: a version that works ok inside a box \let\doaroundlinecorrection\relax \def\startlinecorrection {\dodoubleempty\dostartlinecorrection} \def\dostartlinecorrection[#1][#2]% #2 gobbles spaces {\bgroup \processaction [#1] [ \v!blank=>\let\doaroundlinecorrection\blank, \s!default=>\let\doaroundlinecorrection\relax, \s!unknown=>{\def\doaroundlinecorrection{\blank[#1]}}]% \doaroundlinecorrection \startbaselinecorrection \offbaselinecorrection \ignorespaces} \def\stoplinecorrection {\stopbaselinecorrection \doaroundlinecorrection \egroup} \def\correctwhitespace {\dowithnextbox {\startbaselinecorrection \flushnextbox \stopbaselinecorrection}% \vbox} \def\verticalstrut {\normalvbox{\hsize\zeropoint\forgetall\strut}} \def\horizontalstrut{\normalhbox {\strut}} % Hieronder volgen enkele instellingen en macro's ten behoeve % van de interlinie en \strut. De waarden 2.8, 0.07, 0.72 en % 0.28 zijn ooit eens ontleend aan INRS-TEX en moeten wellicht % nog eens instelbaar worden. % % \lineheight : de hoogte van een regel % \spacing{getal} : instellen interlinie % \normalbaselines : instellen regelafstend % % \setstrut : instellen \strut % \setnostrut : resetten \strut, \endstrut, \begstrut % % \setteststrut : instellen zichtbare struts % \resetteststrut : instellen onzichtbare struts % % \setfontparameters : instellen na fontset % % De hoogte van een regel (\lineheight) is gelijk aan de % som van de hoogte (\ht) en diepte (\dp) van \strutbox. % % \strut : denkbeeldig blokje met hoogte en diepte % % Een \hbox kan als deze aan het begin van een regel staat % een breedte \hsize krijgen. Dit is soms te voorkomen met het % commando \leavevmode. Binnen een \vbox geeft dit echter % niet altijd het gewenste resultaat, vandaar het commando % % \leaveoutervmode % Pas op: niet zomaar \topskip en \baselineskip aanpassen % en zeker niet \widowpenalty. Dit kan ernstige gevolgen % hebben voor kolommen. % % Enige glue kan op zich geen kwaad, echter als blanko=vast, % dan moet ook de rek 0 zijn. Binnen kolommen is rek ook % niet bepaald mooi. Een hele kleine waarde (0.025) voldoet, % omdat een positieve glue eindeloos rekbaar is. \newdimen\strutdimen \newdimen\lineheight \newdimen\openlineheight \newdimen\openstrutheight \newdimen\openstrutdepth \newdimen\topskipgap \newdimen\struttotal \def\strutheightfactor {.72} \def\strutdepthfactor {.28} \def\baselinefactor {2.8} \def\baselinegluefactor {0} \def\minimumstrutheight {0pt} \def\minimumstrutdepth {0pt} \def\normallineheight {\baselinefactor ex} \def\minimumlinedistance {\lineskip} \def\strutheight {0pt} \def\strutdepth {0pt} \def\strutwidth {0pt} \def\spacingfactor {1} \def\topskipfactor {1.0} \def\maxdepthfactor {0.5} \def\systemtopskipfactor {\topskipfactor} \def\systemmaxdepthfactor {\maxdepthfactor} % De onderstaande definitie wordt in de font-module overruled \ifdefined\globalbodyfontsize\else \newdimen\globalbodyfontsize \globalbodyfontsize=12pt \fi \ifx\normalizedbodyfontsize\undefined \def\normalizedbodyfontsize{12pt} \fi % door een \dimen. Dit is geen probleem omdat (1) de default % korpsgrootte 12pt is en (2) de fonts nog niet geladen zijn % en de instellingen bij het laden nogmaals plaatsvinden. % \def\topskipcorrection % {\ifdim\topskip>\openstrutheight % % == \vskip\topskipgap % \vskip\topskip % \vskip-\openstrutheight % \fi % \verticalstrut % \vskip-\struttotal} \def\topskipcorrection {\simpletopskipcorrection \vskip-\struttotal \verticalstrut} \def\simpletopskipcorrection {\ifdim\topskip>\openstrutheight % == \vskip\topskipgap \vskip\topskip \vskip-\openstrutheight \fi} % \def\settopskip % the extra test is needed for the lbr family % {\topskip\systemtopskipfactor\globalbodyfontsize % \ifgridsnapping \else % \ifr@ggedbottom\!!plus5\globalbodyfontsize\fi % \fi % \relax % the skip % \topskipgap\topskip % \advance\topskipgap -\openstrutheight\relax % \ifdim\topskip<\strutheightfactor\openlineheight % \topskip\strutheightfactor\openlineheight\relax % \fi} \def\settopskip % the extra test is needed for the lbr family {\topskip\systemtopskipfactor\globalbodyfontsize \ifgridsnapping \else \ifr@ggedbottom\!!plus5\globalbodyfontsize\fi \fi \relax % the skip \topskipgap\topskip \advance\topskipgap -\openstrutheight\relax \ifdim\minimumstrutheight>\zeropoint \ifdim\topskip<\minimumstrutheight \topskip\minimumstrutheight\relax \fi \else \ifdim\topskip<\strutheightfactor\openlineheight \topskip\strutheightfactor\openlineheight\relax \fi \fi} \def\setmaxdepth {\maxdepth\systemmaxdepthfactor\globalbodyfontsize} \def\normalbaselines {\baselineskip \normalbaselineskip \lineskip \normallineskip \lineskiplimit\normallineskiplimit} % \def\setnormalbaselines % {\ifdim\normallineheight>\zeropoint % \lineheight\normallineheight % \fi % \openlineheight\spacingfactor\lineheight % \openstrutheight\strutheightfactor\openlineheight % \openstrutdepth \strutdepthfactor \openlineheight % \normalbaselineskip\openlineheight % \!!plus\baselinegluefactor\openlineheight % \!!minus\baselinegluefactor\openlineheight % \normallineskip\minimumlinedistance\relax % \onepoint\relax % \normallineskiplimit\zeropoint\relax % \normalbaselines} \def\setnormalbaselines {\ifdim\normallineheight>\zeropoint \lineheight\normallineheight \fi \openlineheight\spacingfactor\lineheight \openstrutheight \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight % new \else \strutheightfactor\openlineheight \fi \openstrutdepth \ifdim\minimumstrutdepth>\zeropoint \minimumstrutdepth % new \else \strutdepthfactor \openlineheight \fi \ifdim\dimexpr\minimumstrutdepth+\minimumstrutheight\relax>\zeropoint \openlineheight\dimexpr\openstrutheight+\openstrutdepth\relax % new \fi \normalbaselineskip\openlineheight \ifgridsnapping\else \!!plus \baselinegluefactor\openlineheight \!!minus\baselinegluefactor\openlineheight \fi \normallineskip\minimumlinedistance\relax % \onepoint\relax \normallineskiplimit\zeropoint\relax \normalbaselines} % \def\setspacingfactor#1\to#2\by#3\\% % {\strutdimen#2\points % \strutdimen#3\strutdimen % \edef#1{\withoutpt\the\strutdimen}} % % \def\spacing#1% % {\ifgridsnapping % %\doifnot{#1}{1}{\showmessage\m!layouts{11}{#1}}% % \ifdim#1\points=\onepoint\else\showmessage\m!layouts{11}{#1}\fi % \edef\spacingfactor{1}% % \else % \edef\spacingfactor{#1}% % \fi % \setspacingfactor\systemtopskipfactor \to\topskipfactor \by#1\\% why no \spacingfactor ? % \setspacingfactor\systemmaxdepthfactor\to\maxdepthfactor\by#1\\% why no \spacingfactor ? % \setnormalbaselines % \setstrut} % % \def\setspacingfactor#1#2#3% % {\edef#1{\withoutpt\the\dimexpr#2\points*#3\relax}} \def\spacing#1% {\ifgridsnapping \ifdim#1\points=\onepoint\else\showmessage\m!layouts{11}{#1}\fi \edef\spacingfactor{1}% \else \edef\spacingfactor{#1}% \fi %\setspacingfactor\systemtopskipfactor \topskipfactor {#1}% why no \spacingfactor ? %\setspacingfactor\systemmaxdepthfactor\maxdepthfactor{#1}% why no \spacingfactor ? \edef\systemtopskipfactor {\withoutpt\the\dimexpr#1\dimexpr\topskipfactor \points}% \edef\systemmaxdepthfactor{\withoutpt\the\dimexpr#1\dimexpr\maxdepthfactor\points}% \setnormalbaselines \setstrut} %D Sometimes one needs to freeze the interlinespacing %D %D \starttyping %D \rm \saveinterlinespace .... {\ss \restoreinterlinespace .... \endgraf} %D \stoptyping \let\restoreinterlinespace\relax \def\saveinterlinespace {\edef\restoreinterlinespace {\lineheight \the\lineheight \openstrutheight \the\openstrutheight \openstrutdepth \the\openstrutdepth \openlineheight \the\openlineheight \normalbaselineskip \the\normalbaselineskip \normallineskip \the\normallineskip \normallineskiplimit\the\normallineskiplimit \noexpand\def\noexpand\normallineheight{\the\dimexpr\normallineheight}% \noexpand\normalbaselines}} % plain definition: % % \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} % % could be: % % \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox} \ifx\strutbox\undefined \newbox\strutbox \setbox\strutbox=\normalhbox{\vrule height8.5pt depth3.5pt width\zeropoint} %\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox} \fi \let\normalstrut\strut % The double \hbox construction enables us to \backtrack % boxes. % \def\setstrutdimen#1#2#3% % een strut is n.m maal ex % {\strutdimen\normallineheight % wat niet per se \lineheight % \strutdimen#2\strutdimen % is omdat een strut lokaal % \strutdimen#3\strutdimen % kan afwijken van de globale % \edef#1{\the\strutdimen}} % macro % strut % \def\setstrutdimen#1#2#3% % een strut is n.m maal ex % {\strutdimen\normallineheight % wat niet per se \lineheight % \strutdimen#2\strutdimen % is omdat een strut lokaal % \strutdimen#3\strutdimen % kan afwijken van de globale % \edef#1{\the\strutdimen}} % macro % strut % \def\setstrut % {\setstrutdimen\strutheight\strutheightfactor\spacingfactor % \setstrutdimen\strutdepth \strutdepthfactor \spacingfactor % \let\strut=\normalstrut % \setbox\strutbox=\normalhbox % {\normalhbox % {\vrule % \!!width \strutwidth % \!!height \strutheight % \!!depth \strutdepth % \normalkern-\strutwidth}}} % \def\setstrut % {\setstrutdimen\strutheight\strutheightfactor\spacingfactor % \setstrutdimen\strutdepth \strutdepthfactor \spacingfactor % \dosetstrut} % \def\setstrut % {\strutdimen\normallineheight % \strutdimen\strutheightfactor\strutdimen % \strutdimen\spacingfactor\strutdimen % \edef\strutheight{\the\strutdimen}% % \strutdimen\normallineheight % \ifgridsnapping % \advance\strutdimen-\strutheight % \else % \strutdimen\strutdepthfactor\strutdimen % \strutdimen\spacingfactor\strutdimen % \fi % \edef\strutdepth{\the\strutdimen}% % \dosetstrut} % interesting, strutdepth is 4.05064pt vs 4.05066pt depending on grid % nasty rounding problem % \def\setstrut % {% height % \strutdimen\normallineheight % \ifdim\minimumstrutheight>\zeropoint % \strutdimen\minimumstrutheight % \else % \strutdimen\strutheightfactor\strutdimen % \fi % \strutdimen\spacingfactor\strutdimen % \edef\strutheight{\the\strutdimen}% % % depth % \strutdimen\normallineheight % \ifgridsnapping % \ifdim\minimumstrutdepth>\zeropoint % \strutdimen\minimumstrutdepth % \else % \advance\strutdimen-\strutheight % \fi % \else % \ifdim\minimumstrutdepth>\zeropoint % \strutdimen\minimumstrutdepth % \else % \strutdimen\strutdepthfactor\strutdimen % \fi % \strutdimen\spacingfactor\strutdimen % \fi % \edef\strutdepth{\the\strutdimen}% % % finish % \dosetstrut} % \def\setstrut % {% height % \ifdim\minimumstrutheight>\zeropoint % \edef\strutheight{\the\dimexpr\spacingfactor\dimexpr\minimumstrutheight}% % \else % \edef\strutheight{\the\dimexpr\spacingfactor\dimexpr\strutheightfactor\dimexpr\normallineheight}% % \fi % % depth % \ifgridsnapping % \ifdim\minimumstrutdepth>\zeropoint % \edef\strutdepth{\the\dimexpr\minimumstrutdepth}% % \else % \edef\strutdepth{\the\dimexpr\normallineheight-\strutheight}% % \fi % \else % \ifdim\minimumstrutdepth>\zeropoint % \edef\strutdepth{\the\dimexpr\spacingfactor\dimexpr\minimumstrutdepth}% % \else % \edef\strutdepth{\the\dimexpr\spacingfactor\dimexpr\strutdepthfactor\dimexpr\normallineheight}% % \fi % \fi % % finish % \dosetstrut} \unexpanded\def\setstrut {% height \edef\strutheight {\the\dimexpr\spacingfactor\dimexpr \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight \else \strutheightfactor\dimexpr\normallineheight \fi}% % depth \edef\strutdepth {\the\dimexpr \ifgridsnapping \ifdim\minimumstrutdepth>\zeropoint \minimumstrutdepth \else \normallineheight-\strutheight \fi \else \spacingfactor\dimexpr \ifdim\minimumstrutdepth>\zeropoint \minimumstrutdepth \else \strutdepthfactor\dimexpr\normallineheight \fi \fi}% % finish \dosetstrut} \unexpanded\def\setcharstrut#1% {\setbox\strutbox\normalhbox{#1}% \edef\strutheight{\the\strutht}% \edef\strutdepth {\the\strutdp}% \dosetstrut} % \def\setfontstrut % {\setcharstrut{(}} % % better, since some fonts have small (but descending Q etc) \unexpanded\def\setfontstrut {\setcharstrut{(gplQT}} \unexpanded\def\setcapstrut% could be M, but Q has descender {\setcharstrut{Q}} %D Handy for math (used in mathml): \def\charhtstrut {\begingroup \setcharstrut{GJY}% \vrule\!!width\zeropoint\!!depth\zeropoint\!!height\strutht \endgroup} \def\chardpstrut {\begingroup \setcharstrut{gjy}% \vrule\!!width\zeropoint\!!depth\strutdp\!!height\zeropoint \endgroup} %D Centered looks nicer: % \def\dosetstrut % {\let\strut\normalstrut % \setbox\strutbox\normalhbox % {\normalhbox to \zeropoint % {% \hss % new, will be option % \vrule % \!!width \strutwidth % \!!height\strutheight % \!!depth \strutdepth % \hss}}% % \struttotal\dimexpr\strutht+\strutdp\relax} % % because of all the callbacks in mkiv, we avoid unnecessary boxes ... % maybe use an attribute so that we can tag boxes that don't need a % treatment; tests with using an attribute so far have shown that % it's slower because testing the attribute takes time too \def\dosetstrut {\let\strut\normalstrut \ifdim\strutwidth=\zeropoint \setbox\strutbox\normalhbox {\vrule \!!width \zeropoint \!!height\strutheight \!!depth \strutdepth}% \else \setbox\strutbox\normalhbox {\normalhbox to \zeropoint {% \hss % new, will be option \vrule \!!width \strutwidth \!!height\strutheight \!!depth \strutdepth \hss}}% \fi \struttotal\dimexpr\strutht+\strutdp\relax} %D The dimen \type {\struttotal} holds the exact size of the %D strut; occasionally a one scaled point difference can show %D up with the lineheight. %D Sometimes a capstrut comes in handy %D %D \starttabulate[|Tl|l|l|] %D \NC yes \NC normal strut \NC {\showstruts\setupstrut[yes]\strut} \NC \NR %D \NC no \NC no strut \NC {\showstruts\setupstrut[no]\strut} \NC \NR %D \NC kap \NC a capital strut (i.e. Q) \NC {\showstruts\setupstrut[cap]\strut} \NC \NR %D \NC A B \unknown \NC a character strut (e.g. A) \NC {\showstruts\setupstrut[A]\strut} \NC \NR %D \NC \NC a normal strut \NC {\showstruts\setupstrut\strut} \NC \NR %D \stoptabulate \def\setupstrut {\dosingleempty\dosetupstrut} \def\dosetupstrut[#1]% yet undocumented, todo: fontstrut {\processaction [#1] [ \v!yes=>\setstrut, \v!auto=>\setautostrut, \v!no=>\setnostrut, \v!cap=>\setcapstrut, \v!fit=>\setfontstrut, \v!line=>\setstrut, \s!default=>\setstrut, \s!unknown=>\setcharstrut\commalistelement]} \def\setteststrut {\def\strutwidth{.8pt}% \setstrut} \def\autostrutfactor{1.1} \def\setautostrut {\begingroup \setbox\scratchbox\copy\strutbox \setstrut \ifdim\ht\strutbox>\autostrutfactor\ht\scratchbox \endgroup \setstrut \else\ifdim\dp\strutbox>\autostrutfactor\dp\scratchbox \endgroup \setstrut \else \endgroup \fi\fi} % simple version % % \def\begstrut % {\relax\ifcase\strutht\else % \strut % \normalpenalty\plustenthousand % \normalhskip\zeropoint % \ignorespaces % \fi} % % \def\endstrut % {\relax\ifhmode\ifcase\strutht\else % \removeunwantedspaces % \normalpenalty\plustenthousand % \normalhskip\zeropoint % \strut % \fi\fi} % when enabled, sigstruts will remove themselves if nothing % goes inbetween \newsignal\strutsignal \setfalse\sigstruts \def\begstrut {\relax\ifcase\strutht\else \ifconditional\sigstruts \noindent\horizontalstrut \normalpenalty\plustenthousand \normalhskip-\strutsignal \normalhskip\strutsignal \else \strut \normalpenalty\plustenthousand \normalhskip\zeropoint \fi \expandafter \ignorespaces \fi} \def\endstrut {\relax\ifhmode\ifcase\strutht\else \ifconditional\sigstruts \ifdim\lastskip=\strutsignal \unskip\unskip\unpenalty\setbox\scratchbox\lastbox \else \normalpenalty\plustenthousand \normalhskip\zeropoint \strut \fi \else \removeunwantedspaces \normalpenalty\plustenthousand \normalhskip\zeropoint \strut \fi \fi\fi} \newbox\nostrutbox \setbox\nostrutbox\normalhbox{} % {\normalhbox{}} \def\setnostrut {\setbox\strutbox\copy\nostrutbox \let\strut\empty \let\endstrut\empty \let\begstrut\empty \let\crlfplaceholder\empty} % unsave: % % \def\pseudostrut % {\bgroup % \setnostrut % \normalstrut % \egroup} % % try: % % \startchemie % \chemie[ONE,Z0,SB15,MOV1,SB15,Z0][C,C] % \stopchemie % % so: \def\pseudostrut {\noindent} % better: \dontleavehmode \let\pseudobegstrut\pseudostrut \let\pseudoendstrut\removeunwantedspaces \def\resetteststrut {\let\strutwidth\zeropoint \setstrut} \ifx\setfontparameters\undefined % problems ! ! ! ! \def\setfontparameters{\the\everybodyfont} \fi %D Handy: \def\baselinedistance{\the\lineheight} %D We need \type{\normaloffinterlineskip} because the new %D definition contains an assignment, and |<|don't ask me %D why|>| this assignment gives troubles in for instance the %D visual debugger. %D The plain ones: \def\offinterlineskip {\baselineskip-\thousandpoint \lineskip\zeropoint \lineskiplimit\maxdimen} \def\nointerlineskip {\prevdepth-\thousandpoint} \let\normaloffinterlineskip=\offinterlineskip % knuth's original %D My own one: \def\offinterlineskip {\ifdim\baselineskip>\zeropoint \edef\oninterlineskip {\baselineskip\the\baselineskip \lineskip\the\lineskip \lineskiplimit\the\lineskiplimit \let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}% \else \let\oninterlineskip\setnormalbaselines \fi \normaloffinterlineskip} \let\oninterlineskip=\relax \def\leaveoutervmode {\ifvmode\ifinner\else \leavevmode \fi\fi} % We stellen enkele penalties anders in dan Plain TEX: % oud % % \widowpenalty=\defaultwidowpenalty\relax % \clubpenalty =\defaultclubpenalty \relax \def\resetpenalties#1% {\ifx#1\undefined\else #1\minusone \fi} \def\setpenalties#1#2#3% {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text #1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax \fi} \def\doexpandedrecurse#1#2% {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr#1-1\relax}{#2}\fi} %D \macros %D {keeplinestogether} %D %D Dirty hack, needed in margin content that can run of a page. \def\keeplinestogether#1% {\xdef\restoreinterlinepenalty{\global\resetpenalties\interlinepenalties}% \global\setpenalties\interlinepenalties{#1}\plustenthousand} \newif\ifgridsnapping % to be sure \def\defaultwidowpenalty {2000} % was: 1000 \def\defaultclubpenalty {2000} % was: 800 \def\defaultdisplaywidowpenalty {50} \def\defaultbrokenpenalty {100} \def\defaultgridwidowpenalty {0} \def\defaultgridclubpenalty {0} \def\defaultgriddisplaywidowpenalty {0} \def\defaultgridbrokenpenalty {0} % The original approach: % % \def\setdefaultpenalties % {\ifgridsnapping % \widowpenalty\defaultgridwidowpenalty % \clubpenalty \defaultgridclubpenalty % \else % \widowpenalty\defaultwidowpenalty % \clubpenalty \defaultclubpenalty % \fi} % % However, we will use setups: % to be documented \def\nopenalties {\widowpenalty \zerocount \clubpenalty \zerocount \brokenpenalty \zerocount \doublehyphendemerits\zerocount \finalhyphendemerits \zerocount \adjdemerits \zerocount} \def\setdefaultpenalties {\directsetup{\systemsetupsprefix\s!default}} \startsetups [\systemsetupsprefix\s!reset] \resetpenalties\widowpenalties \resetpenalties\clubpenalties \resetpenalties\interlinepenalties \stopsetups % we use \directsetup because it's faster and we know there is no csl \startsetups [\systemsetupsprefix\s!default] \directsetup{\systemsetupsprefix\s!reset} \widowpenalty \defaultwidowpenalty \clubpenalty \defaultclubpenalty \displaywidowpenalty\defaultdisplaywidowpenalty \brokenpenalty \defaultbrokenpenalty \stopsetups \startsetups [\v!grid] [\systemsetupsprefix\s!default] \directsetup{\systemsetupsprefix\s!reset} \widowpenalty \defaultgridwidowpenalty \clubpenalty \defaultgridclubpenalty \displaywidowpenalty\defaultgriddisplaywidowpenalty \brokenpenalty \defaultgridbrokenpenalty \stopsetups % as an illustration: \startsetups [\systemsetupsprefix\v!strict] \directsetup{\systemsetupsprefix\s!reset} \setpenalties\widowpenalties2\maxdimen \setpenalties\clubpenalties 2\maxdimen \brokenpenalty \maxdimen \stopsetups \setdefaultpenalties % will happen later in \setuplayout % Suggested by GB (not the name -): \def\rapfillskip{.5\hsize plus .092\hsize minus .5\hsize} % D.A.'s value % Bovendien definieren we enkele extra \fill's: \def\hfilll{\hskip\zeropoint\!!plus1filll\relax} \def\vfilll{\vskip\zeropoint\!!plus1filll\relax} % De onderstaande hulpmacro's moeten nog eens instelbaar worden % gemaakt. \def\tfskipsize{1em\relax} \def\tfkernsize{1ex\relax} \def\tfskip{\dotfskip\tfskipsize} \def\tfkern{\dotfkern\tfkernsize} \def\dotfskip#1{{\tf\hskip#1}} \def\dotfkern#1{{\tf\kern #1}} % needs a proper \definenarrower or installnarrower \newskip\ctxleftskip \newskip\ctxrightskip \newskip\ctxmidskip \def\dosinglenarrower#1% {\processaction [#1] [ \v!left=>\global\advance\ctxleftskip \@@slleft, \v!middle=>\global\advance\ctxmidskip \@@slmiddle, \v!right=>\global\advance\ctxrightskip \@@slright, -\v!left=>\global\advance\ctxleftskip -\@@slleft, -\v!middle=>\global\advance\ctxmidskip -\@@slmiddle, -\v!right=>\global\advance\ctxrightskip-\@@slright, \v!reset=>\global\ctxleftskip \zeropoint \global\ctxmidskip \zeropoint \global\ctxrightskip\zeropoint, \v!none=>, \s!unknown=>\global\advance\ctxmidskip \commalistelement]} % \def\donarrower[#1]% hm, can be dorepeat directly % {\processaction % [#1] % [ \v!left=>\global\advance\ctxleftskip \@@slleft, % \v!middle=>\global\advance\ctxmidskip \@@slmiddle, % \v!right=>\global\advance\ctxrightskip \@@slright, % \v!none=>,% handy for delimitedtexts % \s!unknown=>{\dorepeatwithcommand[#1]\dosinglenarrower}]} \def\donarrower[#1]% hm, can be dorepeat directly {\dorepeatwithcommand[#1]\dosinglenarrower} \def\complexstartnarrower[#1]% {\@@slbefore % was hard coded \par \bgroup \global\ctxleftskip \zeropoint \global\ctxrightskip\zeropoint \global\ctxmidskip \zeropoint \processcommalistwithparameters[#1]\donarrower \advance\leftskip \ctxleftskip \advance\rightskip \ctxrightskip \advance\leftskip \ctxmidskip \advance\rightskip \ctxmidskip \seteffectivehsize} % todo: definenarrower \def\simplestartnarrower {\startnarrower[\v!middle]} \definecomplexorsimple\startnarrower \def\stopnarrower {\@@slafter % was hard coded \par / needed, else skips forgotten \egroup} \def\setupnarrower {\dodoubleargument\getparameters[\??sl]} \newdimen\@@effectivehsize \def\effectivehsize {\hsize} \newdimen\@@effectiveleftskip \def\effectiveleftskip {\leftskip} \newdimen\@@effectiverightskip \def\effectiverightskip{\rightskip} \def\seteffectivehsize {\setlocalhsize \@@effectivehsize \localhsize \@@effectiveleftskip \leftskip \@@effectiverightskip \rightskip \let\effectivehsize \@@effectivehsize \let\effectiveleftskip \@@effectiveleftskip \let\effectiverightskip\@@effectiverightskip} \def\dodefinehbox[#1][#2]% {\setvalue{hbox#1}##1% {\hbox to #2{\begstrut##1\endstrut\hss}}} \def\definehbox {\dodoubleargument\dodefinehbox} \def\iobox#1#2#3#% here #3# is not really needed {\vbox\bgroup % we want to return a vbox like the others \hbox\bgroup% we need to pack the signal with the box \signalrightpage \dowithnextboxcontent {\let\\=\endgraf\forgetall\doifrightpageelse#1#2} {\box\nextbox\egroup\egroup} \vbox#3} \def\obox{\iobox\raggedleft \raggedright} % outerbox \def\ibox{\iobox\raggedright\raggedleft} % innerbox \def\dosetraggedvbox#1% {\let\raggedbox\vbox \processfirstactioninset [#1] [ \v!left=>\let\raggedbox\lbox, \v!right=>\let\raggedbox\rbox, \v!middle=>\let\raggedbox\cbox, \v!inner=>\let\raggedbox\ibox, \v!outer=>\let\raggedbox\obox, \v!flushleft=>\let\raggedbox\rbox, \v!flushright=>\let\raggedbox\lbox, \v!center=>\let\raggedbox\cbox, \v!no=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]} \def\dosetraggedhbox#1% {\let\raggedbox\hbox \processaction % slow [#1] [ \v!left=>\def\raggedbox{\doalignedline\v!left }, \v!right=>\def\raggedbox{\doalignedline\v!right }, \v!middle=>\def\raggedbox{\doalignedline\v!middle}, \v!inner=>\def\raggedbox{\doalignedline\v!inner }, \v!outer=>\def\raggedbox{\doalignedline\v!outer }, \v!flushleft=>\def\raggedbox{\doalignedline\v!right }, \v!flushright=>\def\raggedbox{\doalignedline\v!left }, \v!center=>\def\raggedbox{\doalignedline\v!middle}]} \def\dosetraggedcommand#1% {\expanded{\dodosetraggedcommand{#1}}} % \def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that! % {\let\raggedcommand \relax % \let\raggedtopcommand \empty % \let\raggedbottomcommand\empty % \chardef\raggedoneliner\zerocount % \doifsomething{#1} % {\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse % \doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse % \!!donectrue % \rawprocesscommalist[#1]\dododosetraggedcommand}} \newtoks\everyraggedcommand \def\raggedcommand{\the\everyraggedcommand} \def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that! {\everyraggedcommand \emptytoks \let\raggedtopcommand \empty \let\raggedbottomcommand\empty \chardef\raggedoneliner\zerocount \doifsomething{#1} {\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse \doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse \!!donectrue \rawprocesscommalist[#1]\dododosetraggedcommand}} \def\dododosetraggedcommand#1% {\executeifdefined{\@@ragged@@command\string#1}\relax} \def\@@ragged@@command{@@raggedcommand} \setvalue{\@@ragged@@command\v!hanging }{\appendtoks\enableprotruding \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nothanging }{\appendtoks\disableprotruding \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!hz }{\appendtoks\enableadjusting \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nohz }{\appendtoks\disableadjusting \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!spacing }{\appendtoks\enablespacehandling \enablekernhandling \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nospacing }{\appendtoks\disablespacehandling \disablekernhandling \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!hyphenated }{\appendtoks\dohyphens \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nothyphenated}{\appendtoks\nohyphens \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!tolerant }{\appendtoks\tolerance3000\relax \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!verytolerant}{\appendtoks\tolerance4500\relax \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!stretch }{\appendtoks\emergencystretch\bodyfontsize\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!left}% {\if!!donea \appendtoks\veryraggedleft\to\everyraggedcommand \else \appendtoks\raggedleft \to\everyraggedcommand \fi \!!donecfalse} \setvalue{\@@ragged@@command\v!right}% {\if!!donea \appendtoks\veryraggedright\to\everyraggedcommand \else \appendtoks\raggedright \to\everyraggedcommand \fi \!!donecfalse} \setvalue{\@@ragged@@command\v!middle}% {\if!!donec \if!!doneb \appendtoks\raggedwidecenter\to\everyraggedcommand \else\if!!donea \appendtoks\veryraggedcenter\to\everyraggedcommand \else \appendtoks\raggedcenter \to\everyraggedcommand \fi\fi \!!donecfalse \else \let\raggedbottomcommand\vfilll % bonus, pretty strong \let\raggedtopcommand \vfilll % used with \framed for \fi} % instance in tables \setvalue{\@@ragged@@command\v!flushleft }{\getvalue{\@@ragged@@command\v!right }} \setvalue{\@@ragged@@command\v!flushright}{\getvalue{\@@ragged@@command\v!left }} \setvalue{\@@ragged@@command\v!center }{\getvalue{\@@ragged@@command\v!middle}} \setvalue{\@@ragged@@command\v!high}% {\let\raggedbottomcommand\vfilll} % and since we lack a \setvalue{\@@ragged@@command\v!low}% {\let\raggedtopcommand\vfilll} % proper keyword, but \setvalue{\@@ragged@@command\v!lohi}% {\let\raggedbottomcommand\vfilll % we do support the \let\raggedtopcommand\vfilll} % ugly laho (lohi) \setvalue{\@@ragged@@command\v!no}% {\appendtoks\raggedright\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!yes}% {\appendtoks\notragged\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!normal}% {\appendtoks\notragged\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!inner}% not yet perfect {\signalrightpage % may interfere \doifrightpageelse {\getvalue{\@@ragged@@command\v!right}} {\getvalue{\@@ragged@@command\v!left}}} \setvalue{\@@ragged@@command\v!outer}% not yet perfect {\signalrightpage % may interfere \doifrightpageelse {\getvalue{\@@ragged@@command\v!left}} {\getvalue{\@@ragged@@command\v!right}}} \setvalue{\@@ragged@@command\v!lesshyphenation}% {\appendtoks\lesshyphens\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!morehyphenation}% {\appendtoks\morehyphens\to\everyraggedcommand} % compare: % % \framed[width=4cm,align=no] {\hfil xxx} % \framed[width=4cm,align=disable]{\hfil xxx} \setvalue{\@@ragged@@command\v!disable}% for one liners {\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand} \chardef\raggedoneliner\zerocount \setvalue{\@@ragged@@command\v!line}% {\chardef\raggedoneliner\plusone} %D Unofficial, may disappear. Now handled directly in the %D core-rul module. % \def\@@startraggedoneliner % {\ifcase\raggedoneliner\else % \dontleavehmode\hbox to \hsize \bgroup % hsize added, else useless % \ifcase\raggedstatus\or\hss\or\hss\fi % \ignorespaces % \bgroup % \aftergroup\removeunwantedspaces % \fi} % \def\@@stopraggedoneliner % {\ifcase\raggedoneliner\else % \egroup % \ifcase\raggedstatus\or\or\hss\or\hss\fi % \egroup % \ignorespaces % ? ? ? % \fi} % \def\@@handleoneliner % {\ifcase\raggedoneliner\else % \@@startraggedoneliner % \aftergroup\@@stopraggedoneliner % \fi} % Nog doen: % % \goodbreak -> \allowbreak en \dosomebreak{..} in koppen % % bij koppen zowieso: \blanko[reset] % Nog in commando verwerken: % % \voorkeur la \blanko % % Om ongewenste witruimte te voorkomen kan met \dosomebreak{\break} % een \penalty voor witruimte worden geplaatst. \def\removelastskip % a redefinition of plain {\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi} % first version: % % \def\dosomebreak#1% % {\scratchskip\lastskip % \removelastskip % %\type{#1}% % #1\relax % \ifdim\scratchskip=\zeropoint \else % \vskip\scratchskip % \fi} % % don't change the next improvement: % \def\dosomebreak#1% % {\endgraf % beware, this forces a newline % \ifvmode % \ifdim\lastskip=\zeropoint % #1\relax % \else % \scratchskip\lastskip % \removelastskip % #1\relax % \vskip\scratchskip % \fi % \fi} % beter, vooral in \vbox; nog in \pagina toepassen s! \def\doifoutervmode#1% {\ifvmode\ifinner\else#1\fi\fi} \ifx\dosomebreak\undefined % defined in mkiv \def\dosomebreak#1% {\doifoutervmode {\scratchskip\lastskip \removelastskip %\leavevmode\type{#1}% #1\relax \ifdim\scratchskip=\zeropoint % else interference with footnotes \else \vskip\scratchskip \fi}} \fi \def\forgeteverypar {\everypar{\the\neverypar}} %\def\forgetparindent % {\forgeteverypar % \indentfirstparagraphtrue % recently added % \setupindenting[\v!geen]} %\def\forgetparskip % {\setupwhitespace[\v!geen]} \def\forgetparindent {\forgeteverypar \indentfirstparagraphtrue % recently added \let\currentindentation\v!none \ctxparindent\zeropoint \parindent\zeropoint\relax} \def\forgetparskip {\let\currentwhitespace\v!none \ctxparskip\zeropoint \parskip\zeropoint\relax} \def\forgetbothskips {\tolerance1500 \leftskip\zeropoint \rightskip\zeropoint\relax} \def\forgetspacing {\emergencystretch\zeropoint} \newif\ifforgotten % rather good signal for inner \appendtoks \forgottentrue \to \everyforgetall \appendtoks \forgetragged \to \everyforgetall \appendtoks \forgetparskip \to \everyforgetall \appendtoks \forgetparindent \to \everyforgetall \appendtoks \forgetbothskips \to \everyforgetall \appendtoks \forgetspacing \to \everyforgetall % i.v.m. funny spacing in pagebody \appendtoks \spacing\!!plusone \to \everyforgetall % new per 10/08/2004, else problems in otr / !! needed \appendtoks \everypar\emptytoks \to \everyforgetall % indeed! \def\localvbox#1#% {\vbox#1\bgroup \forgetparskip \setlocalhsize \hsize\localhsize \forgetparindent \forgetbothskips \forgeteverypar \let\next=} % ach ja, hoort niet hier % \unexpanded\def\dostartattributes#1#2#3% % {\begingroup % geen \bgroup, anders in mathmode lege \hbox % \doifdefinedelse{#1#2} % {\def\fontattribute{\getvalue{#1#2}}} % {\let\fontattribute=\empty}% % \doifdefinedelse{#1#3} % {\def\colorattribute{\getvalue{#1#3}}} % {\let\colorattribute=\empty}% % \startcolor[\colorattribute]% % \@EA\doconvertfont\@EA{\fontattribute}} % % \unexpanded\def\dostopattributes% % {\stopcolor % \endgroup} % % \unexpanded\def\doattributes#1#2#3#4% % {\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes} %D A hardly faster implementation follows. We cannot use %D \type {csname} testing since the first argument can be %D anything, even a raw fontswitch. No a real improvement %D (some 5 seconds on 260 seconds for the maps bibliography). \let\dostopattributes\relax % in case these commands end up in an edef \unexpanded\def\dostartattributes#1#2#3% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \ifcsname#1#3\endcsname \let\dostopattributes\@@dostopattributes \startcolor[\csname#1#3\endcsname]% \else \let\dostopattributes\@@nostopattributes \fi \ifcsname#1#2\endcsname \expandafter\doconvertfont \else \expandafter\gobbleoneargument \fi{\csname#1#2\endcsname}} \newconditional \parbasedattributes \def\finishparbasedattributes {\ifconditional\parbasedattributes \setfalse\parbasedattributes \par \fi} \def\dostopparbasedattributes {\settrue\parbasedattributes \dostopattributes} \unexpanded\def\@@dostopattributes {\stopcolor \finishparbasedattributes \endgroup} \unexpanded\def\@@nostopattributes {\finishparbasedattributes \endgroup} \unexpanded\def\doattributes#1#2#3#4% {\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes} % An even faster \ETEX\ version: \unexpanded\def\dostartattributes#1#2#3% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \ifincolor \ifcsname#1#3\endcsname \let\dostopattributes\@@dostopattributes \faststartcolor[\csname#1#3\endcsname]% \else \let\dostopattributes\@@nostopattributes \fi \else \let\dostopattributes\@@nostopattributes \fi \ifcsname#1#2\endcsname % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname \@EA\doconvertfont\csname#1#2\@EA\endcsname \fi} \unexpanded\def\@@dostopattributes {\faststopcolor \finishparbasedattributes \endgroup} \unexpanded\def\@@nostopattributes {\finishparbasedattributes \endgroup} %D Bonus macro, see core-sec.tex \unexpanded\def\dosetfontattribute#1#2% {\ifcsname#1#2\endcsname \@EA\doconvertfont\csname#1#2\@EA\endcsname \fi\empty} %D Since this happens a lot, and sometimes large arguments %D are passed in \type {#4}, we just copy some code: \unexpanded\def\doattributes#1#2#3#4% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \ifincolor \ifcsname#1#3\endcsname \let\dostopattributes\@@dostopattributes \faststartcolor[\csname#1#3\endcsname]% \else \let\dostopattributes\endgroup \fi \else \let\dostopattributes\endgroup \fi \ifcsname#1#2\endcsname % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname \@EA\doconvertfont\csname#1#2\@EA\endcsname \fi {#4}% \dostopattributes} % Kan vaker worden toegepast en moet bovendien sneller! \newskip\leftskipadaption \newskip\rightskipadaption \def\doadaptleftskip#1% {\dosetleftskipadaption{#1}% \advance\leftskip \leftskipadaption} \def\doadaptrightskip#1% {\dosetrightskipadaption{#1}% \advance\rightskip \rightskipadaption} \setvalue{@lsa@\v!standard}{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi} \setvalue{@lsa@\v!yes }{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi} \letvalue{@lsa@\v!no }\zeropoint \letvalue{@lsa@\empty }\zeropoint \setvalue{@rsa@\v!standard}{\@@slright} \setvalue{@rsa@\v!yes }{\@@slright} \letvalue{@rsa@\v!no }\zeropoint \letvalue{@rsa@\empty }\zeropoint % not safe for 2\parindent % % \def\dosetleftskipadaption#1% % {\leftskipadaption % \ifcsname @lsa@#1\endcsname % \csname @lsa@#1\endcsname % \else % #1% % \fi % \relax} \def\dosetleftskipadaption#1% {\edefconvertedargument\ascii{@lsa@#1}% \leftskipadaption \ifcsname\ascii\endcsname \csname\ascii\endcsname \else #1% \fi \relax} \def\dosetrightskipadaption#1% {\edefconvertedargument\ascii{@rsa@#1}% \rightskipadaption \ifcsname\ascii\endcsname \csname\ascii\endcsname \else #1% \fi \relax} \newcount \noftrackedpagestates \newif \ifpagestatemismatch \newcount \realpagestateno \chardef \frozenpagestate \zerocount \def\dotrackpagestate#1#2% {\ifdoublesided \ifinpagebody \else \doforcedtrackpagestate{#1}{#2}% \fi \fi} \def\doforcedtrackpagestate#1#2% {\ifcase\frozenpagestate \global\advance\noftrackedpagestates\plusone \global\advance#2\plusone \lazysavetaggedtwopassdata{#1}{\number\noftrackedpagestates}{\number#2}{\noexpand\realfolio}% %\llap{\infofont\number\noftrackedpagestates/\number#2}% tracing \fi} \def\doifrightpagestateelse#1#2% {\ifcase\frozenpagestate \pagestatemismatchfalse \realpagestateno\realfolio \ifinpagebody \ifdoublesided \ifodd\realpageno\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \else \twopassdatafoundtrue \fi \else\ifdoublesided \findtwopassdata{#1}{\number#2}% \iftwopassdatafound \realpagestateno\twopassdata\relax \ifnum\twopassdata=\realpageno \else \pagestatemismatchtrue \fi \ifodd\twopassdata\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \else \ifodd\realpageno\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \fi \else \twopassdatafoundtrue \fi\fi \else \ifodd\realpagestateno\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \fi \iftwopassdatafound \@EA\firstoftwoarguments \else \@EA\secondoftwoarguments \fi} \def\doifforcedrightpagestateelse#1#2% {\ifcase\frozenpagestate \pagestatemismatchfalse \realpagestateno\realfolio \findtwopassdata{#1}{\number#2}% \iftwopassdatafound \realpagestateno\twopassdata\relax \ifnum\twopassdata=\realpageno \else \pagestatemismatchtrue \fi \ifodd\twopassdata\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \else \ifodd\realpageno\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \fi \else \ifodd\realpagestateno\relax \twopassdatafoundtrue \else \twopassdatafoundfalse \fi \fi \iftwopassdatafound \@EA\firstoftwoarguments \else \@EA\secondoftwoarguments \fi} \def\freezepagestate {\chardef\frozenpagestate\plusone } \def\defrostpagestate{\chardef\frozenpagestate\zerocount} % we can make more of these on top, but how to deal with mixed frozen states \definetwopasslist\s!paragraph \newcount \nofraggedparagraphs \def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs} \def\doifrightpageelse{\doifrightpagestateelse\s!paragraph\nofraggedparagraphs} \newcount\pagesignallevel \def\startsignalrightpage % one may do a \postsignalrightplace {\advance\pagesignallevel\plusone \presignalrightpage \let\signalrightpage\relax \let\presignalrightpage\relax \let\startsignalrightpage\relax \doifrightpageelse\donothing\donothing \freezepagestate} \def\stopsignalrightpage {\ifcase\pagesignallevel\or\postsignalrightpage\fi \advance\pagesignallevel\minusone} \def\setraggedparagraphmode {\signalrightpage\doifrightpageelse} % move it there \ifx\swapmargins\undefined \let\swapmargins\undefined \fi % todo \def\doifswappedrightpageelse#1#2% alleen in box construction ! {\doifrightpageelse {#1} {\scratchcounter\realpageno \realpageno\realpagestateno\relax \swapmargins \realpageno\scratchcounter #2}} \newbox\signaledrightpage % this way we can avoid interference, i.e. postpone placement \def\presignalrightpage {\global\setbox\signaledrightpage\hbox{\signalrightpage}} \def\postsignalrightpage{\ifvoid\signaledrightpage\else\box\signaledrightpage\fi} % The next feature is is used in: % % \definenumber[test][way=bypage] % % \def\Test % {\incrementnumber[test]\rawnumber[test]/% % \incrementnumber[test]\rawnumber[test]/% % \incrementnumber[test]\rawnumber[test]\space % \checkpagechange{oeps}\changedpage{oeps}\space % \ifpagechanged TRUE\else FALSE\fi} % % \Test\page \Test\par \Test\page \Test\par \Test\page \Test\page % % (adapted from cont-new.tex:) \newif\ifpagechanged \let\lastchangedpage\empty \def\docheckpagestatechange#1#2#3% {\pagechangedfalse \doforcedtrackpagestate{#2}{#3}% \findtwopassdata{#2}{\number#3}% \iftwopassdatafound \ifnum\twopassdata>0\getvalue{#2:p:#1}\relax \pagechangedtrue \fi \fi \ifpagechanged \letgvalue{#2:p:#1}\twopassdata \globallet\lastchangedpage\twopassdata \else \globallet\lastchangedpage\realfolio \fi} \def\changedpagestate#1#2% {\executeifdefined{#2:p:#1}{0}} \def\checkpagechange#1{\docheckpagestatechange{#1}\s!paragraph\nofraggedparagraphs} \def\changedpage #1{\changedpagestate{#1}\s!paragraph} % saved struts \ifx\savedstrutbox\undefined \newbox\savedstrutbox \fi \def\savestrut {\setbox\savedstrutbox\copy\strutbox} \def\savedstrut{\copy \savedstrutbox} % De onderstaande macro's zijn opgenomen in Plain TeX. % % \def\raggedright% % {\rightskip\zeropoint plus2em \spaceskip.3333em \xspaceskip.5em\relax} % % \def\ttraggedright% % {\tttf\rightskip\zeropoint plus2em\relax} % % \newif\ifr@ggedbottom % % \def\raggedbottom% % {\topskip 10\points plus60\points \r@ggedbottomtrue} % % \def\normalbottom% % {\topskip 10\points \r@ggedbottomfalse} % % en worden hieronder wat aangepast. % the three boolean will become obsolete some day in favour % of \bottomraggedness \chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline \def\bottomalignlimit{3\lineheight} \newif\ifn@rmalbottom \newif\ifr@ggedbottom \newif\ifb@selinebottom \def\normalbottom {% \topskip 10pt \r@ggedbottomfalse} \def\raggedbottom {\chardef\bottomraggedness\zerocount \n@rmalbottomfalse \r@ggedbottomtrue \b@selinebottomfalse \settopskip} \def\alignbottom {\chardef\bottomraggedness\plusone \n@rmalbottomtrue \r@ggedbottomfalse \b@selinebottomfalse \settopskip} \def\baselinebottom {\chardef\bottomraggedness\plustwo \n@rmalbottomfalse \r@ggedbottomfalse \b@selinebottomtrue \settopskip} \let\normalbottom=\alignbottom % downward compatible % so, the new one will be % % \chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline % % \def\bottomalignlimit{3\lineheight} % will be settable % % \def\raggedbottom {\chardef\bottomraggedness=0 \settopskip} % \def\alignbottom {\chardef\bottomraggedness=1 \settopskip} % \def\baselinebottom{\chardef\bottomraggedness=2 \settopskip} % % \let\normalbottom =\alignbottom % \hyphenpenalty = ( 2.5 * \hsize ) / \raggedness % \tolerance >= 1500 % was 200 % \raggedness = 2 .. 6\bodyfontsize \chardef\raggedstatus=0 % normal left center right \def\leftraggedness {2\bodyfontsize} \def\rightraggedness {2\bodyfontsize} \def\middleraggedness {6\bodyfontsize} \def\middleraggedness {.5\hsize} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} % oeps, hsize can be 0pt in which case we get a strange division \def\middleraggedness {\ifdim\hsize=\zeropoint6\bodyfontsize\else.5\hsize\fi} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} %D More hyphenation control, will be combined with align %D setup. \def\nohyphens {\ifx\dohyphens\relax \edef\dohyphens {\hyphenpenalty\the\hyphenpenalty \exhyphenpenalty\the\exhyphenpenalty\relax}% \fi \hyphenpenalty\plustenthousand \exhyphenpenalty\plustenthousand} \let\dohyphens\relax %D To prevent unwanted side effects, we also have to check %D for hyphens here: % \def\setraggedness#1% % {\ifnum\tolerance<1500\relax % small values have % \tolerance1500\relax % unwanted side effects % \fi % \spaceskip2.5\hsize % we misuse these registers % \xspaceskip#1\relax % for temporary storage; % \divide\spaceskip \xspaceskip % they are changed anyway % \ifx\dohyphens\relax % \hyphenpenalty\spaceskip % \else no hyphens is active % \fi} \newskip\@@raggedskipa \newskip\@@raggedskipb \def\setraggedness#1% {\ifnum\tolerance<1500\relax % small values have \tolerance1500\relax % unwanted side effects \fi \ifx\dohyphens\relax % this code will be reconsidered / kind of fuzzy (and old) \@@raggedskipa 2.5\hsize \@@raggedskipb #1\relax \divide\@@raggedskipa \@@raggedskipb \hyphenpenalty\@@raggedskipa \fi} \let\updateraggedskips\relax \def\setraggedskips#1#2#3#4#5#6#7% never change this name {\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% \updateraggedskips} \def\dosetraggedskips#1#2#3#4#5#6#7% {\chardef \raggedstatus#1\relax \leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3 \rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3 \spaceskip #4\relax \xspaceskip #5\relax \parfillskip\zeropoint\!!plus#6\relax \parindent #7\relax} % \def\notragged% % {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}} % older (context) names: \let\spaceamount \interwordspace \let\emspaceamount\emwidth % tracing: \def\doshowpardata#1% {\ifx#1\relax\else \hbox{\string#1: \the#1}\endgraf \expandafter\doshowpardata \fi} \def\showpardata {\edef\thepardata {\hbox{font: \fontname\font}\endgraf \doshowpardata \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace \hsize \vsize \leftskip \rightskip \spaceskip \xspaceskip \parindent \parfillskip \hyphenpenalty \exhyphenpenalty \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty \doublehyphendemerits \finalhyphendemerits \adjdemerits \relax}% \begingroup \dontshowcomposition \inleftmargin{\vsmash {\switchtobodyfont[7pt,tt]% \framed[\c!align=\v!right]{\thepardata}}}% \endgroup} \def\startshowpardata {\begingroup \showcomposition \showstruts\tracepositionstrue \tracingparagraphs\maxdimen \appendtoksonce\showpardata\let\showpardata\relax\to\everypar} \def\stopshowpardata {\endgraf \endgroup} % \defineXMLenvironment[showpardata] \startshowpardata \stopshowpardata % \defineXMLsingular [showpardata] \showpardata % defaults \def\raggedfillamount {1fil} \def\raggedhalffillamount{.5fil} \def\raggedspaceamount {\interwordspace} % {.3333em} \def\raggedxspaceamount {.5em} \def\notragged {\chardef\raggedstatus\zerocount \leftskip 1\leftskip \rightskip 1\rightskip \spaceskip \zeropoint \xspaceskip \zeropoint \parfillskip\zeropoint\!!plus\raggedfillamount\relax \let\updateraggedskips\relax} % new \let\forgetragged\notragged \def\raggedleft {\setraggedness\leftraggedness \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} \def\raggedcenter {\setraggedness\middleraggedness \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} %D We used to have: %D %D \starttyping %D \def\raggedright %D {\setraggedness\rightraggedness %D \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}} %D \stoptyping %D %D However, the next alternative, suggested by Taco, is better. \def\raggedright {\setraggedness\rightraggedness \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount \raggedxspaceamount\raggedfillamount\parindent} \def\veryraggedleft {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} %D When we want the last line to have a natural width: %D %D \starttyping %D \def\veryraggedleft% %D {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}} %D \stoptyping %D %D but this one is not accepted by the macros. \def\veryraggedcenter {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} \def\veryraggedright {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount \raggedxspaceamount\zeropoint\parindent} \def\ttraggedright {\tttf \setraggedskips3\zeropoint\rightraggedness \zeropoint\zeropoint\zeropoint\parindent} % \ctxparindent %D A bonus one: \def\raggedwidecenter {\setraggedness\middleraggedness \setraggedskips2\raggedhalffillamount\raggedhalffillamount \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint} \newif\if@@asragged \@@asraggedtrue % old method % todo % % \setuplayout[grid=yes,lines=44] \showgrid % \starttext % test \vfill test \endgraf \strut \endgraf \vskip-\lineheight \removedepth \pagina test % \stoptext % \setupalign[reset,new,right,old] \def\@@align@@rl{\if!!donea\veryraggedleft \else\raggedleft \fi} \def\@@align@@rr{\if!!donea\veryraggedright \else\raggedright \fi} \def\@@align@@rc{\if!!donea\veryraggedcenter\else\raggedcenter\fi} \setvalue{@@ngila@@\v!broad }{\!!doneatrue} \setvalue{@@ngila@@\v!wide }{\!!donebtrue} \def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads \installalign \v!new {\@@asraggedfalse} \installalign \v!old {\@@asraggedtrue} \installalign \empty {} \installalign \v!line {\baselinebottom} \installalign \v!bottom {\raggedbottom} \installalign \v!height {\normalbottom} \installalign \v!width {\notragged} \installalign \v!normal {\notragged} \installalign \v!yes {\notragged} \installalign \v!no {\raggedright} \installalign \v!inner {\if@@asragged \setraggedparagraphmode\@@align@@rl\@@align@@rr \else \setraggedparagraphmode\@@align@@rr\@@align@@rl \fi} \installalign \v!outer {\if@@asragged \setraggedparagraphmode\@@align@@rr\@@align@@rl \else \setraggedparagraphmode\@@align@@rl\@@align@@rr \fi} \installalign \v!left {\if@@asragged\@@align@@rl\else\@@align@@rr\fi} \installalign \v!right {\if@@asragged\@@align@@rr\else\@@align@@rl\fi} \installalign \v!middle {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi} \installalign \v!flushleft {\if!!donea\veryraggedright \else\raggedright\fi} \installalign \v!flushright {\if!!donea\veryraggedleft \else\raggedleft \fi} \installalign \v!flushouter {\setraggedparagraphmode\raggedleft\raggedright} \installalign \v!flushinner {\setraggedparagraphmode\raggedright\raggedleft} \installalign \v!center {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi} \installalign \v!hanging {\enableprotruding} \installalign \v!nothanging {\disableprotruding} \installalign \v!hz {\enableadjusting} \installalign \v!nohz {\disableadjusting} \installalign \v!spacing {\enablespacehandling \enablekernhandling} \installalign \v!nospacing {\disablespacehandling\disablekernhandling} \installalign \v!hyphenated {\dohyphens} \installalign \v!nothyphenated {\nohyphens} \installalign \v!new {\@@asraggedfalse} % so new will give you consistency \installalign \v!reset {\notragged\normalbottom} \installalign \v!tolerant {\tolerance3000 \relax} \installalign \v!verytolerant {\tolerance4500 \relax} \installalign \v!stretch {\emergencystretch\bodyfontsize} \newcount\hyphenminoffset \ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi \def\lesshyphens {\advance\hyphenminoffset\plusone \sethyphenationvariables} \def\morehyphens {\ifcase\hyphenminoffset \else \advance\hyphenminoffset\minusone \fi \sethyphenationvariables} \installalign \v!lesshyphenation {\lesshyphens} \installalign \v!morehyphenation {\morehyphens} \def\dodosetupalign#1{\csname @@align@@#1\endcsname} \def\dodosetupngila#1{\csname @@ngila@@#1\endcsname} \def\setupalign {\dosingleargument\dosetupalign} \def\dosetupalign[#1]% can be made faster by checking for defined #1 {\!!doneafalse \!!donebfalse \processcommacommand[#1]\dodosetupngila \processcommacommand[#1]\dodosetupalign} % \setupalign[flushleft] \input ward \par % lijnlinks % \setupalign[right] \input ward \par % \setupalign[flushright] \input ward \par % lijnrechts % \setupalign[left] \input ward \par % \setupalign[middle] \input ward \par % centreer % \setupalign[center] \input ward \par \def\startalignment {\bgroup \setupalign} \def\stopalignment {\par \egroup} \chardef\alignstrutmode=1 % see later for the real definition, which in the simple case is: \newtoks \everyleftofalignedline \newtoks \everyrightofalignedline \def\shiftalignedline#1#2#3#4% left, right, inner, outer {\rightorleftpageaction {\everyleftofalignedline {\hskip\dimexpr#1+#3\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#4\relax}} {\everyleftofalignedline {\hskip\dimexpr#1+#4\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#3\relax}}} % \def\doalignline#1#2% \\ == newline % {\begingroup % \setlocalhsize % new % \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% % \dowithnextbox % {\noindentation % was \noindent % \dontleavehmode % added in marrakesch at TUG 2006 % \hbox to \localhsize % {\ifcase\alignstrutmode\or\strut\fi % \the\everyleftofalignedline % #1\unhbox\nextbox#2\relax % \the\everyrightofalignedline}% % \endgroup} % \hbox} \def\doalignline#1#2% \\ == newline {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize % new \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% \dowithnextbox {\hbox to \localhsize {\ifcase\alignstrutmode\or\strut\fi \the\everyleftofalignedline #1\unhbox\nextbox#2\relax \the\everyrightofalignedline}% \endgroup} \hbox} % plain commands \ifx\undefined\line \def\line {\hbox to\hsize} \fi \ifx\undefined\leftline \def\leftline #1{\line{#1\hss}} \fi \ifx\undefined\rightline \def\rightline #1{\line{\hss#1}} \fi \ifx\undefined\centerline \def\centerline#1{\line{\hss#1\hss}} \fi % directe commando's \def\leftaligned {\doalignline \relax \hss } \def\midaligned {\doalignline \hss \hss } \def\rightaligned{\doalignline \hss \relax} \let\centeraligned\midaligned \def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated % indirecte commando's \letvalue{\s!do\v!line\v!left }\leftaligned \letvalue{\s!do\v!line\v!right }\rightaligned \letvalue{\s!do\v!line\v!middle }\midaligned \letvalue{\s!do\v!line\v!flushleft }\rightaligned \letvalue{\s!do\v!line\v!flushright}\leftaligned \letvalue{\s!do\v!line\v!center }\midaligned \def\doalignedline#1{\csname\s!do\v!line#1\endcsname} %D Experimental: % simple version % % \def\doxalignline#1#2% % {\bgroup % \setlocalhsize % \def\\{\egroup\par\doxalignline{#1}{#2}\bgroup}% inefficient % \dowithnextbox % {\noindent\hbox to \localhsize % {\ifcase\alignstrutmode\or\strut\fi % \signalrightpage % \doifrightpageelse{#1\unhbox\nextbox#2}{#2\unhbox\nextbox#1}}% % \egroup} % \hbox} % % \setvalue{\s!do\v!regel\v!binnen}{\doxalignline\relax\hss} % \setvalue{\s!do\v!regel\v!buiten}{\doxalignline\hss\relax} % % more extensive: \def\doxalignline#1#2#3#4#5#6% {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize \def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient \dowithnextbox {%\noindent moved up \hbox to \localhsize {#1\hskip\ifdone#2\else#3\fi#4% \hbox to \localhsize {\the\everyleftofalignedline \ifcase\alignstrutmode\or\strut\fi \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi \the\everyrightofalignedline}% \hss}% \endgroup} \hbox} \def\doxcheckline {\signalrightpage\doifrightpageelse\donetrue\donefalse} \setvalue{\s!do\v!line\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss } \setvalue{\s!do\v!line\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax} \setvalue{\s!do\v!line\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss } \setvalue{\s!do\v!line\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax} \setvalue{\s!do\v!line\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss } \setvalue{\s!do\v!line\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax} \setvalue{\s!do\v!line\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss } \setvalue{\s!do\v!line\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax} \setvalue{\s!do\v!line\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax} \setvalue{\s!do\v!line\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss } \setvalue{\s!do\v!line\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax} \setvalue{\s!do\v!line\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss } % ! ! ! beware, redefining \doalignline gives the wrong results ! ! ! % % \def\doalignline{\doxalignline\donefalse++\zeropoint} %D Better: \def\doalignedline#1{\csname\s!do\v!line#1\endcsname} % \def\alignedline#1#2% setting default % {\csname % \s!do\v!line % \ifundefined{\s!do\v!line#1}#2\else#1\fi % \endcsname} \def\alignedline#1#2% setting default {\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname} %D ... \def\dosetuptolerance[#1]% {\doifinsetelse\v!vertical{#1}% {\ExpandFirstAfter\processallactionsinset [#1] [ \v!verystrict=>\def\bottomtolerance{}, \v!strict=>\def\bottomtolerance{.050}, \v!tolerant=>\def\bottomtolerance{.075}, \v!verytolerant=>\def\bottomtolerance{.100}]}% {\ExpandFirstAfter\processallactionsinset [#1] [ \v!stretch=>\emergencystretch\bodyfontsize, \v!space=>\spaceskip.5em\!!plus.25em\!!minus.25em\relax, \v!verystrict=>\tolerance 200, \v!strict=>\tolerance1500, \v!tolerant=>\tolerance3000, \v!verytolerant=>\tolerance4500]}} \def\setuptolerance {\dosingleargument\dosetuptolerance} % \def\woordrechts % {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}} % beware: \wordright{whatever\kern-\rightskip} should work! % so, no funny boxing here \def\dowordright[#1]% {% don't change \groupedcommand {\removeunwantedspaces \hfill \allowbreak % changed back from \hskip\zeropoint \strut \hfill \quad % decent spacing \hbox} {\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}% \parfillskip\zeropoint %\finalhyphendemerits\zerocount % yes or no \par}} \def\wordright {\dosingleempty\dowordright} % \dorecurse{5}{something } \wordright{--someone} \endgraf % \dorecurse{6}{something } \wordright{--someone} \endgraf % \dorecurse{7}{something } \wordright{--someone} \endgraf % % \dorecurse{5}{something } \wordright{--someone else entirely} \endgraf % \dorecurse{6}{something } \wordright{--someone else entirely} \endgraf % \dorecurse{7}{something } \wordright{--someone else entirely} \endgraf % % \wordright[\rightskip]{whatever} % \simplealignedbox{2cm}{right}{x} \setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}} \setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}} \setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}} \setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}} \setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}} \def\simplealignedbox#1{\executeifdefined{\s!simple\c!align#1}{\getvalue{\s!simple\c!align\v!right}}} %D \macros %D {pushindentation,popindentation} %D %D The pushing and popping is done by: \newbox\indentationboxA \newbox\indentationboxB \def\pushindentation {\bgroup \ifhmode \unskip \setbox\indentationboxA\lastbox % get \strut if present \unskip \setbox\indentationboxB\lastbox % get \indent generated box \unskip \else \hskip\zeropoint % switch to horizontal mode \unskip \setbox\indentationboxA\lastbox % get \indent generated box \setbox\indentationboxB\emptybox \fi} \def\popindentation {\box\indentationboxB\box\indentationboxA % put back the boxes \egroup} %D The only complication lays in \type{\strut}. In \PLAIN\ %D \TEX\ a \type{\strut} is defined as: %D %D \starttyping %D \def\strut% %D {\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} %D \stoptyping %D %D But what is a \type{\strut}? Normally it's a rule of width %D zero, but when made visual, it's a rule and a negative skip. %D The mechanism for putting things in the margins described %D here cannot handle this situation very well. One %D characteristic of \type{\strut} is that the \type{\unhcopy} %D results in entering horizontal mode, which in return leads %D to some indentation. %D %D To serve our purpose a bit better, the macro \type{\strut} %D can be redefined as: %D %D \starttyping %D \def\strut %D {\relax\ifmmode\else\hskip0pt\fi\copy\strutbox} %D \stoptyping %D %D Or more compatible: %D %D \starttyping %D \def\strut %D {\relax\ifmmode %D \copy\strutbox %D \else %D \bgroup\setbox\strutbox=\normalhbox{\box\strutbox}\unhcopy\strutbox\egroup %D \fi} %D \stoptyping %D %D In \CONTEXT\ however we save some processing time by putting %D an extra \type{\hbox} around the \type{\strutbox}. % moved from page-lin.tex to here (due to visualization added % in august 2003) % % \unexpanded \def\crlf % {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break} \unexpanded \def\crlf {\ifhmode \unskip \prewordbreak\crlfplaceholder \ifcase\raggedstatus\hfil\or\or\or\hfil\fi \break \else \crlfplaceholder \endgraf \fi} \def\crlfplaceholder {\strut} \def\settestcrlf {\def\crlfplaceholder {\hbox to \zeropoint {\strut{\infofont\kern.25em}\lohi{\infofont CR}{\infofont LF}\hss}}} %D \starttyping %D % \setuplayout[gridgrid=yes] \showgrid %D %D \startbuffer %D test 1\crlf %D test 2\crlf %D %D \crlf test 3 %D %D test 4\crlf %D test 5 %D %D \crlf %D \crlf %D \crlf %D test 6 %D \stopbuffer %D %D \hbox %D {\hsize5em %D \ruledvtop{\getbuffer}\enspace %D \ruledvtop{\showstruts\getbuffer}\enspace %D \hsize15em \setuptyping[before=,after=]% %D \ruledvtop{\typebuffer}} %D \stoptyping \def\opeenregel % to be used grouped {\def\crlf{\removelastspace\space}\let\\\crlf} \def\showstruts {\setteststrut \settestcrlf} \def\definehspace {\dotripleempty\dodefinehspace} \def\dodefinehspace[#1][#2][#3]% #1 = optional namespace {\ifthirdargument \setvalue{\??hs#1:#2}{#3}% \else \setvalue{\??hs:#1}{#2}% \fi} \unexpanded\def\hspace {\dodoubleempty\dohspace} %\def\dohspace[#1][#2]% % {\ifhmode % \removeunwantedspaces % \hskip % \ifsecondargument % \hspaceamount{#1}{#2}% % \else % \hspaceamount\empty{\iffirstargument#1\else\s!default\fi}% % \fi % \expandafter\ignorespaces % \fi} \def\dohspace[#1][#2]% {\ifsecondargument \dodohspace[#1][#2]% \else\iffirstargument \hspace[][#1]% \else \hspace[][\s!default]% \fi\fi} % \def\dodohspace[#1][#2#3]% % {\ifhmode % \removeunwantedspaces % \doifelse{#2}{-} % {{\scratchskip\hspaceamount{#1}{#3}\hskip-\scratchskip}} % {\hskip\hspaceamount{#1}{#2#3}}% % \expandafter\ignorespaces % \fi} % % not needed, tex handles -- as + \def\dodohspace[#1][#2]% {\ifhmode \removeunwantedspaces \hskip\hspaceamount{#1}{#2}% \expandafter\ignorespaces \fi} \def\hspaceamount#1#2% {\executeifdefined{\??hs#1:#2}{\executeifdefined{\??hs:#2}\zeropoint}} \definehspace [\v!small] [.25\emspaceamount] \definehspace [\v!medium] [.5\emspaceamount] \definehspace [\v!big] [1\emspaceamount] \definehspace [\v!normal] [1\spaceamount] \definehspace [\v!default] [\spaceamount] %D Taken from Taco's math module (cq. \AMS\ macros), but %D adapted to \type {\hspace}: \unexpanded\def\textormathspace#1#2#3% {\ifmmode\mskip#1#2\else\kern#1\hspaceamount\empty{#3}\fi\relax} \newmuskip\hairmuskip \hairmuskip=.15mu \def\hairspace {\textormathspace+\hairmuskip{.5}} \def\thinspace {\textormathspace+\thinmuskip 1} \def\medspace {\textormathspace+\medmuskip 2} \def\thickspace {\textormathspace+\thickmuskip3} \def\neghairspace {\textormathspace-\thinmuskip{.5}} \def\negthinspace {\textormathspace-\thinmuskip 1} \def\negmedspace {\textormathspace-\medmuskip 2} \def\negthickspace{\textormathspace-\thickmuskip3} % needed for unicode: \def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace \def\threeperemspace {\hskip\dimexpr\emwidth/3\relax} \def\fourperemspace {\hskip\dimexpr\emwidth/4\relax} \def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie \def\sixperemspace {\hskip\dimexpr\emwidth/6\relax} \def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this \def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup} \def\ideographicspace {\hskip\dimexpr\emwidth/1\relax} \def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax} %def\nobreakspace {\penalty\plustenthousand\space} \def\nobreakspace {\penalty\plustenthousand\kern\interwordspace} \def\narrownobreakspace {\penalty\plustenthousand\thinspace} %def\zerowidthnobreakspace {\penalty\plustenthousand\hskip\zeropoint} \def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} \def\zerowidthspace {\hskip\zeropoint} \definehspace[.5][.1250\emspaceamount] % could also be [.1250\spaceamount] \definehspace[1] [.1667\emspaceamount] \definehspace[2] [.2222\emspaceamount] \definehspace[3] [.2777\emspaceamount] \let \, \thinspace \let \: \medspace \let \; \thickspace \let \! \negthinspace % this will become an alternative bunch of \blank settings % % \startlines % \scratchskip=.23pt plus 10pt minus 4pt \relax \number\scratchskip \space \the\scratchskip % \setsimplifiedskip\scratchskip1 \number\scratchskip \space \the\scratchskip % \setsimplifiedskip\scratchskip2 \number\scratchskip \space \the\scratchskip % \getsimplifiedskip\scratchskip\scratchcounter \number\scratchcounter % \stoplines % % \hrule width10cm \endgraf % \discardedskip{10pt} % \retainedskip {4pt} % \discardedskip {5pt} % \hrule width10cm \endgraf % \blockedskip{0pt} % \discardedskip{10pt} % \retainedskip {4pt} % \discardedskip {5pt} % \hrule width10cm \endgraf % \frozenskip {4cm} % \hrule width10cm \endgraf % \vskip10pt % \hrule width10cm \endgraf % ! ! ! etex only, evt splitskip macro gebruiken (syst-new) \newskip\simplifiedskip \newskip\simplifiedcounter \chardef\@@discardedskip1 \chardef\@@retainedskip 2 \chardef\@@forcedskip 3 \chardef\@@blockedskip 4 \chardef\@@frozenskip 5 % after heads, no break \def\setsimplifiedskip#1#2% {#1\dimexpr(10\dimexpr(#1/10)) plus \gluestretch#1 minus \glueshrink#1\relax \advance#1\numexpr(#2)sp\relax} \def\getsimplifiedskip#1#2% {\simplifiedskip#1\relax \ifzeropt\simplifiedskip % \ifdim\simplifiedskip=\zeropoint #2\zerocount \else \simplifiedcounter\dimexpr10\dimexpr#1/10\relax\relax \advance\simplifiedskip-\simplifiedcounter #2\number\simplifiedskip\relax \fi} \def\conditionalskip#1#2% {\scratchskip#1\relax \setsimplifiedskip\scratchskip#2\relax \vskip\scratchskip\relax} \def\defrostskip {\scratchskip\lastskip\penalty50000\normalvskip-\scratchskip\penalty50000\relax} \def\frozenskip#1% {\endgraf \ifvmode \getsimplifiedskip\lastskip\scratchcounter \ifdim\lastskip>#1\else \defrostskip \conditionalskip{#1}\@@frozenskip \fi \fi} \def\discardedskip#1% {\endgraf \ifvmode \getsimplifiedskip\lastskip\scratchcounter \ifcase\scratchcounter \conditionalskip{#1}\@@discardedskip \or % discard \ifdim\lastskip>#1\else \normalvskip-\lastskip \conditionalskip{#1}\@@discardedskip \fi \or % retain \ifdim\lastskip>#1\else \normalvskip-\lastskip \conditionalskip{#1}\@@discardedskip \fi \or % forced \conditionalskip{#1}\@@discardedskip \or % ignored \or % frozen \ifdim\lastskip>#1\else \defrostskip \conditionalskip{#1}\@@frozenskip \fi \else\ifdim#1=\zeropoint\else \vskip#1\relax \fi\fi \fi} \def\retainedskip#1% {\endgraf \ifvmode \getsimplifiedskip\lastskip\scratchcounter \ifcase\scratchcounter \conditionalskip{#1}\@@retainedskip \or % discard \normalvskip-\lastskip \conditionalskip{#1}\@@retainedskip \or % retain \ifdim\lastskip>#1\else \normalvskip-\lastskip \conditionalskip{#1}\@@retainedskip \fi \or % forced \conditionalskip{#1}\@@retainedskip \or % ignored \or % frozen \ifdim\lastskip>#1\else \defrostskip \conditionalskip{#1}\@@frozenskip \fi \else\ifdim#1=\zeropoint\else \vskip#1\relax \fi\fi \fi} \def\forcedskip#1% {\endgraf \ifvmode \conditionalskip{#1}\@@forcedskip \fi} \def\blockedskip#1% {\endgraf \ifvmode \getsimplifiedskip\lastskip\scratchcounter \ifcase\scratchcounter \conditionalskip{#1}\@@blockedskip \or % discard \conditionalskip{#1}\@@blockedskip \or % retain \conditionalskip{#1}\@@blockedskip \or % forced \conditionalskip{#1}\@@blockedskip \or % ignored \or % frozen \ifdim\lastskip>#1\else \defrostskip \conditionalskip{#1}\@@frozenskip \fi \else\ifdim#1=\zeropoint\else \vskip#1\relax \fi\fi \fi} % beware, changing this will break some code (like pos/backgrounds) \newtoks\everyfirstparagraphintro \newtoks\everynextparagraphintro \newtoks\@@everyparagraphtoks \chardef\everyparagraphintro\zerocount \def\setupparagraphintro {\dodoubleempty\dosetupparagraphintro} \def\dosetupparagraphintro[#1][#2]% {\processallactionsinset [#1] [ \v!reset=>\global\chardef\everyparagraphintro\zerocount \global\everyfirstparagraphintro\emptytoks \global\everynextparagraphintro \emptytoks, \v!first=>\global\chardef\everyparagraphintro\plusone \doglobal\appendtoks#2\to\everyfirstparagraphintro, \v!next=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro\plusone\fi \doglobal\appendtoks#2\to\everynextparagraphintro, \v!each=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro\plustwo\fi \doglobal\appendtoks#2\to\everyfirstparagraphintro \doglobal\appendtoks#2\to\everynextparagraphintro]} %D We can say: %D %D \starttyping %D \setupparagraphintro[first][\index{Knuth}] %D \stoptyping %D %D Maybe more convenient is: %D %D \starttyping %D \flushatparagraph{\index{Zapf}} %D \stoptyping \def\flushatparagraph#1% {\global\chardef\everyparagraphintro\plusone \global\appendtoks{#1}\to\everyfirstparagraphintro} % \def\doinsertparagraphintro % {\ifcase\everyparagraphintro\relax % % no data % \@@everyparagraphtoks\emptytoks % \or % % first data % \global\chardef\everyparagraphintro\plustwo % \@@everyparagraphtoks\everyfirstparagraphintro % \global\everyfirstparagraphintro\emptytoks % \or % % next data % \@@everyparagraphtoks\everynextparagraphintro % \fi % \the\@@everyparagraphtoks} \def\doinsertparagraphintro {\begingroup \everypar\emptytoks \ifcase\everyparagraphintro\relax % no data \@@everyparagraphtoks\emptytoks \or % first data \global\chardef\everyparagraphintro\plustwo \@@everyparagraphtoks\everyfirstparagraphintro \global\everyfirstparagraphintro\emptytoks \or % next data \@@everyparagraphtoks\everynextparagraphintro \fi \the\@@everyparagraphtoks \endgroup} \def\insertparagraphintro {\ifcase\everyparagraphintro\else\@EA\doinsertparagraphintro\fi} % \appendtoksonce\insertparagraphintro\to\everypar % should come last %D \starttyping %D \setupparagraphintro[first][\hbox to 3.5em{\tt FIRST \hss}] %D \setupparagraphintro[first][\hbox to 3.5em{\tt TSRIF \hss}] %D \setupparagraphintro[next] [\hbox to 3.5em{\tt NEXT \hss}] %D \setupparagraphintro[next] [\hbox to 3.5em{\tt TXEN \hss}] %D \setupparagraphintro[each] [\hbox to 3.0em{\tt EACH \hss}] %D \setupparagraphintro[each] [\hbox to 3.0em{\tt HCEA \hss}] %D %D some paragraph \par %D some paragraph \par %D some paragraph \par %D %D \definelabel[parnumber] %D %D \setupparagraphintro[reset,each][\inleft{\slxx\parnumber}] %D %D some paragraph \par %D some paragraph \par %D some paragraph \par %D \stoptyping %D \macros %D {flushatnextpar} %D %D This macro collects data that will be flushed at the next paragraph. %D By using this macro you can avoid interfering nodes (writes, etc). \newbox \postponednodedata \def\flushatnextpar {\bgroup \dowithnextbox {\global\setbox\postponednodedata\hbox{\box\postponednodedata\box\nextbox}\egroup}% \hbox} \def\flushpostponednodedata {\ifvoid\postponednodedata\else \hbox{\smashedbox\postponednodedata}% \fi} % Very nasty but needed for margin stuff inside colored % paragraphs. \let\normalvadjust\vadjust % \def\graphicvadjust % bad, those low level color calls here % {\dowithnextbox % {\normalvadjust % {\dostartgraphicgroup % \localstarttextcolor % \unvbox\nextbox % \localstoptextcolor % \dostopgraphicgroup}}% % \vbox} % test this prikkels/pascal margin text before heads (mode % 1) as well as uitwerkingen (mode 2) %chardef\graphicvadjustmode=0 % fake %chardef\graphicvadjustmode=1 % normal \chardef\graphicvadjustmode=2 % normal + compensate (== default) \def\graphicvadjust % bad, those low level color calls here {\dowithnextboxcontent {\forgetall} {\ifcase\graphicvadjustmode \@EA \fakedvadjust \else \@EA\normalvadjust \fi {\dostartgraphicgroup % don't ask \localstarttextcolor \unvbox\nextbox \localstoptextcolor % don't ask \dostopgraphicgroup \ifcase\graphicvadjustmode \or \or % corrects for one line paragraphs \nointerlineskip \kern-\struttotal \nointerlineskip \verticalstrut \fi}}% \vbox} %D This works only in a properly strutted line, and is meant %D for deeply burried operations, like in heads. \def\fakedvadjust {\dowithnextbox {\setbox\nextbox\hbox{\llap{\lower\strutdepth\box\nextbox}}% \smashedbox\nextbox}% \vtop} \def\flexiblespaceamount#1#2#3% {#1\interwordspace \!!plus#2\interwordstretch \!!minus#3\interwordshrink} \def\fixedspaceamount#1% {#1\interwordspace} %D This is a dangerous feature because it makes the \TEX\ source %D less portable, i.e. any parser now needs to apply exactly the %D same algorithm when it wants to interpret the source. We %D strongly recommend not to mention this feature in manuals! It's %D provided for users who are hooked to such a mechanism. %D %D \starttyping %D \setupsorting[logo][next=\autoinsertnextspace] \logo[TEX]{\TeX} %D %D bla bla \TEX bla bla \TEX (bla) bla (\TEX) %D \stoptyping \def\autoinsertnextspace{\futurelet\nexttoken\doautoinsertnextspace} \def\doautoinsertnextspace % slightly extended version of a user supplied macro {\ifx\nexttoken \bgroup\else \ifx\nexttoken\begingroup\else \ifx\nexttoken \egroup\else \ifx\nexttoken \endgroup\else \ifx\nexttoken \/\else \ifx\nexttoken /\else \ifx\nexttoken ~\else \ifx\nexttoken \ \else \ifx\nexttoken \blankspace\else \ifx\nexttoken \space\else \ifx\nexttoken .\else \ifx\nexttoken ,\else \ifx\nexttoken !\else \ifx\nexttoken ?\else \ifx\nexttoken :\else \ifx\nexttoken ;\else \ifx\nexttoken '\else \ifx\nexttoken "\else \ifx\nexttoken )\else \ifx\nexttoken -\else \ifx\nexttoken |\else \ifx\nexttoken \%\else \ifx\nexttoken \&\else \space \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % moved from page-lin \def\installspacehandler#1#2% needs to set \obeyedspace {\setvalue{\??sr#1}{#2}} \installspacehandler \v!on {\obeyspaces \def\obeyedspace{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}% \let\ =\obeyedspace} \installspacehandler \v!yes {\obeyspaces \def\obeyedspace{\mathortext\normalspace{\dontleavehmode \normalspace }}% \let\ =\obeyedspace} \installspacehandler \v!off % == default {\normalspaces \let\obeyedspace\normalspace \let\ =\normalspaceprimitive} % was \normalspace \installspacehandler \v!fixed {\obeyspaces \def\obeyedspace{\mathortext\normalspace{\dontleavehmode\fixedspace}}% \let\ =\obeyedspace} \def\activatespacehandler#1% {\executeifdefined{\??sr#1}{\activatespacehandler\v!off}} % moved from page-lin %D When spacing is active we need to handle commands in %D a special way: %D %D \starttyping %D \setuplines[space=on] %D %D \startlines %D Let's talk about this{\ttsl\gobbleoneargument or}that. %D \stoplines %D %D \startlines %D Let's talk about this{\getvalue{ttsl}or}that. %D \stoplines %D \stoptyping %D %D One can indent in several ways: %D %D \starttyping %D \setupindenting[medium] \setuplines[indenting=odd] % no yes odd even %D %D \startlines %D first %D second %D third %D fourth %D \stoplines %D \stoptyping \def\setuplines {\dodoubleargument\getparameters[\??rg]} \def\startlines {\@@rgbefore \pushmacro\checkindentation \whitespace %\page[\v!preference]} gaat mis na koppen, nieuw: later \nobreak \begingroup \setupindenting[\@@rgindenting]% \typesettinglinestrue \setupwhitespace[\v!none]% \obeylines \ignorespaces \gdef\afterfirstobeyedline % tzt two pass, net als opsomming {\gdef\afterfirstobeyedline {\nobreak \doifnot\@@rgoption\v!packed{\global\let\afterfirstobeyedline\relax}}}% \def\obeyedline {\par \futurelet\next\dobetweenthelines}% \activatespacehandler\@@rgspace \GotoPar} \def\stoplines {\endgroup \popmacro\checkindentation \@@rgafter} \def\dobetweenthelines {\doifmeaningelse\next\obeyedline {\@@rginbetween} {\afterfirstobeyedline}} \setuplines [\c!option=, \c!before=\blank, \c!after=\blank, \c!inbetween=\blank, \c!indenting=\v!no, \c!space=\v!default] \def\emptylines {\dosingleempty\doemptylines} \def\doemptylines[#1]% {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf} \setupwhitespace [\v!none] % still old-fashioned \indenting [\v!never] \setupindenting [\v!none] \setupblank [\v!standard, \v!big] \defineblank[\v!default] [\currentblank] \defineblank[\v!before] [\v!default] \defineblank[\v!inbetween][\v!default] \defineblank[\v!after] [\v!before] \setupinterlinespace [\c!minheight=0pt, % only special purpose \c!mindepth=0pt, % only special purpose \c!height=.72, \c!depth=.28, \c!top=1.0, \c!bottom=0.4, \c!distance=1pt, \c!line=2.8ex, \c!stretch=0] \setupnarrower [\c!before=\endgraf, \c!after=\endgraf, \c!left=1.5em, \c!right=1.5em, \c!middle=1.5em] \setuptolerance [\v!horizontal,\v!verystrict] \setuptolerance [\v!vertical,\v!strict] \setupalign [\v!bottom, \v!width] \setupspacing [\v!packed] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-sorting.lua0000644000175000017500000000654712161703335026302 0ustar norbertnorbertif not modules then modules = { } end modules ['s-languages-system'] = { version = 1.001, comment = "companion to s-languages-system.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.languages = moduledata.languages or { } moduledata.languages.sorting = moduledata.languages.sorting or { } local formatters = string.formatters local utfbyte, utfcharacters = utf.byte, utf.characters local sortedpairs = table.sortedpairs local definitions = sorters.definitions local constants = sorters.constants local replacementoffset = constants.replacementoffset local currentfont = font.current local fontchars = fonts.hashes.characters local c_darkblue = { "darkblue" } local c_darkred = { "darkred" } local f_chr = formatters["\\tttf%H"] local function chr(str,done) if done then context.space() end local c = fontchars[currentfont()] for s in utfcharacters(str) do local u = utfbyte(s) if c[u] then context(s) elseif u > replacementoffset then context.color(c_darkblue, f_chr(u)) else context.color(c_darkred, f_chr(u)) end end return true end local function map(a,b,done) if done then context.space() end -- context.tttf() chr(a) context("=") chr(b) return true end local function nop() -- context.tttf() context("none") end local function key(data,field) context.NC() context(field) context.NC() context(data[field]) context.NC() context.NR() end function moduledata.languages.sorting.showinstalled(tag) if not tag or tag == "" or tag == interfaces.variables.all then for tag, data in sortedpairs(definitions) do moduledata.languages.sorting.showinstalled (tag) end else sorters.update() -- syncs data local data = definitions[tag] if data then context.starttabulate { "|lB|pl|" } key(data,"language") key(data,"parent") key(data,"method") context.NC() context("replacements") context.NC() local replacements = data.replacements if #replacements == 0 then nop() else for i=1,#replacements do local r = replacements[i] map(r[1],r[2],i > 1) end end context.NC() context.NR() context.NC() context("order") context.NC() local orders = data.orders for i=1,#orders do chr(orders[i],i > 1) end context.NC() context.NR() context.NC() context("entries") context.NC() local done = false for k, e in sortedpairs(data.entries) do done = map(k,e,done) end context.NC() context.NR() context.stoptabulate() end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-ctx.mkiv0000644000175000017500000001320112130411274024257 0ustar norbertnorbert%D \module %D [ file=catc-cys, %D version=2006.09.18, %D title=\CONTEXT\ Catcode Macros, %D subtitle=Extra Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We prefer to define relevant catcode tables in this file instead %D of everywhere around. \ifdefined \ctxcatcodes \else \newcatcodetable \ctxcatcodes \fi \ifdefined \prtcatcodes \else \newcatcodetable \prtcatcodes \fi \ifdefined \txtcatcodes \else \newcatcodetable \txtcatcodes \fi %ifdefined \mthcatcodes \else \newcatcodetable \mthcatcodes \fi % math, not used, too tricky \ifdefined \tpacatcodes \else \newcatcodetable \tpacatcodes \fi % { } \ifdefined \tpbcatcodes \else \newcatcodetable \tpbcatcodes \fi % < > \setnewconstant \doublecommentsignal "10FF25 %% < 110000 (last valid range) \startcatcodetable \ctxcatcodes \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode % \catcode\circumflexasciicode\superscriptcatcode % \catcode\underscoreasciicode\subscriptcatcode % \catcode\ampersandasciicode \alignmentcatcode \catcode\underscoreasciicode\othercatcode \catcode\circumflexasciicode\othercatcode \catcode\ampersandasciicode \othercatcode \catcode\backslashasciicode \escapecatcode \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode\endgroupcatcode \catcode\dollarasciicode \mathshiftcatcode \catcode\hashasciicode \parametercatcode \catcode\commentasciicode \commentcatcode \catcode\tildeasciicode \activecatcode \catcode\barasciicode \activecatcode \stopcatcodetable \startcatcodetable \prtcatcodes \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\circumflexasciicode \superscriptcatcode % candidate \catcode\underscoreasciicode \lettercatcode \catcode\ampersandasciicode \alignmentcatcode % \catcode\colonasciicode \lettercatcode % candidate \catcode\backslashasciicode \escapecatcode \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode \endgroupcatcode \catcode\dollarasciicode \mathshiftcatcode \catcode\hashasciicode \parametercatcode \catcode\commentasciicode \commentcatcode \catcode\atsignasciicode \lettercatcode \catcode\exclamationmarkasciicode\lettercatcode \catcode\questionmarkasciicode \lettercatcode \catcode\tildeasciicode \activecatcode \catcode\barasciicode \activecatcode \stopcatcodetable %startcatcodetable \mthcatcodes % \catcode\tabasciicode \spacecatcode % \catcode\endoflineasciicode \endoflinecatcode % %\catcode\newlineasciicode \spacecatcode % \catcode\formfeedasciicode \endoflinecatcode % \catcode\spaceasciicode \spacecatcode % \catcode\endoffileasciicode \ignorecatcode % \catcode\circumflexasciicode\superscriptcatcode % \catcode\underscoreasciicode\subscriptcatcode % \catcode\ampersandasciicode \alignmentcatcode % \catcode\backslashasciicode \escapecatcode % \catcode\leftbraceasciicode \begingroupcatcode % \catcode\rightbraceasciicode\endgroupcatcode % \catcode\dollarasciicode \mathshiftcatcode % \catcode\hashasciicode \parametercatcode % \catcode\commentasciicode \commentcatcode % %\catcode\tildeasciicode \activecatcode % %\catcode\barasciicode \activecatcode %stopcatcodetable \startcatcodetable \tpacatcodes \catcode\tabasciicode \othercatcode \catcode\endoflineasciicode \othercatcode \catcode\formfeedasciicode \othercatcode \catcode\spaceasciicode \othercatcode \catcode\endoffileasciicode \othercatcode \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode\endgroupcatcode \stopcatcodetable \startcatcodetable \tpbcatcodes \catcode\tabasciicode \othercatcode \catcode\endoflineasciicode \othercatcode \catcode\formfeedasciicode \othercatcode \catcode\spaceasciicode \othercatcode \catcode\endoffileasciicode \othercatcode \catcode\lessthanasciicode \begingroupcatcode \catcode\morethanasciicode \endgroupcatcode \stopcatcodetable \startcatcodetable \txtcatcodes \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\backslashasciicode \escapecatcode \catcode\leftbraceasciicode \begingroupcatcode \catcode\rightbraceasciicode\endgroupcatcode \catcode\doublecommentsignal\commentcatcode \stopcatcodetable \letcatcodecommand \ctxcatcodes \barasciicode \relax \letcatcodecommand \ctxcatcodes \tildeasciicode \relax \catcodetable \ctxcatcodes \let \defaultcatcodetable \ctxcatcodes % for the moment here: \normalprotected\def\starttexcode {\pushcatcodetable \catcodetable\prtcatcodes} \normalprotected\def\stoptexcode {\popcatcodetable} \normalprotected\def\startcontextcode {\pushcatcodetable \catcodetable\ctxcatcodes} \normalprotected\def\stopcontextcode {\popcatcodetable} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-sch-01.mkii0000644000175000017500000000413511754241457024021 0ustar norbertnorbert%D \module %D [ file=x-sch-01, %D version=2001.10.04, %D title=\CONTEXT\ Style File, %D subtitle=XML Schema Presentation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 style wraps around the core schema visualizer, %D implemented in \type {x-sch-00}. This is an experimental %D style, more will follow. %D %D \starttyping %D texexec --use=sch-01 x-fig-00.xsd --pdf %D \stoptyping \doifnothing {\jobfilename} {\end} \doiffileelse {\jobfilename.xsd} {} {\end} \usemodule[sch-00,con-01] \remapXMLnamespace [xs] [xsd] \setuplayout [backspace=1.5cm, topspace=1.5cm, bottomspace=1cm, width=middle, height=middle, header=1.5cm, footer=1.5cm] \setupcolors [state=start] \setupbackgrounds [page] [background=goback] \setupbackgrounds [text] [background=gonext] \defineoverlay [goback] [\overlaybutton{PreviousJump}] \defineoverlay [gonext] [\overlaybutton{nextpage}] \setuppagenumbering [location=footer] \usetypescript [palatino] [\defaultencoding] \setupbodyfont [palatino,10pt] %\setupinteraction % [state=start, % color=, % contrastcolor=, % style=] \setuplist [xsd:names] [interaction=all, width=0pt, alternative=c] \setupregister [xsd:index] [interaction=text, symbol=none] \setuphead [chapter] [style=\bfd, header=high] \setuphead [section] [style=\bfb] \lowercasestring \jobfilename \to \lcjobfilename \setupheadertexts [\lcjobfilename] \starttext \title{Schema \quote{\lcjobfilename.xsd}} \subject{Names in order of definition} \startcolumns[n=3] \placelist[xsd:names][criterium=current] \stopcolumns \subject{Names in alphabetic order} \startcolumns[n=3] \placeregister[xsd:index][criterium=current] \stopcolumns \subject{Meaning of background colors} \placeXSDlegenda \subject{Schema components} \processXMLfilegrouped{\jobfilename.xsd} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-mac.mkii0000644000175000017500000006613611754241457024311 0ustar norbertnorbert%D \module %D [ file=type-mac, %D version=2009.03.10, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Mac OS X Definitions, %D author=Wolfgang Schuster, %D date=\currentdate, %D copyright={Wolfgang Schuster}] %C %C This module is part of the \CONTEXT\ macro||package. See %C mreadme.pdf for details. \definetypescriptprefix [f:andalemono] [Andale Mono] \definetypescriptprefix [f:chalkboard] [Chalkboard] \definetypescriptprefix [f:cochin] [Cochin] \definetypescriptprefix [f:comicsans] [Comic Sans MS] \definetypescriptprefix [f:couriernew] [Courier New] \definetypescriptprefix [f:georgia] [Georgia] \definetypescriptprefix [f:lucidagrande] [Lucida Grande] \definetypescriptprefix [f:monaco] [Monaco] \definetypescriptprefix [f:tahoma] [Tahoma] \definetypescriptprefix [f:timesnewroman] [Times New Roman] \definetypescriptprefix [f:trebuchet] [Trebuchet MS] \definetypescriptprefix [f:verdana] [Verdana] \definetypescriptprefix [n:andalemono] [AndaleMono] \definetypescriptprefix [n:chalkboard] [Chalkboard] \definetypescriptprefix [n:cochin] [Cochin] \definetypescriptprefix [n:comicsans] [ComicSans] \definetypescriptprefix [n:couriernew] [CourierNew] \definetypescriptprefix [n:georgia] [Georgia] \definetypescriptprefix [n:lucidagrande] [LucidaGrande] \definetypescriptprefix [n:monaco] [Monaco] \definetypescriptprefix [n:tahoma] [Tahoma] \definetypescriptprefix [n:timesnewroman] [TimesNewRoman] \definetypescriptprefix [n:trebuchet] [Trebuchet] \definetypescriptprefix [n:verdana] [Verdana] \starttypescriptcollection [macosx] % American Typewriter \starttypescript [serif] [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter] \definefontsynonym [AmericanTypewriter-Light] [name:American Typewriter Light] [features=default] \definefontsynonym [AmericanTypewriter-Regular] [name:American Typewriter] [features=default] \definefontsynonym [AmericanTypewriter-Bold] [name:American Typewriter Bold] [features=default] \definefontsynonym [AmericanTypewriter-LightCond] [name:American Typewriter Condensed Light] [features=default] \definefontsynonym [AmericanTypewriter-Condensed] [name:American Typewriter Condensed] [features=default] \definefontsynonym [AmericanTypewriter-BoldCond] [name:American Typewriter Condensed Bold] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter-light-condensed] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-LightCond] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-Condensed] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter-condensed] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-Condensed] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-BoldCond] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter-light] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-Light] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-Regular] [features=default] \stoptypescript \starttypescript [serif] [americantypewriter] \setups[font:fallback:serif] \definefontsynonym [Serif] [AmericanTypewriter-Regular] [features=default] \definefontsynonym [SerifBold] [AmericanTypewriter-Bold] [features=default] \stoptypescript \starttypescript [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Arial / Arial Narrow / Arial Rounded / Arial Unicode \starttypescript [sans] [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode] \definefontsynonym [Arial-Condensed] [name:Arial Narrow] [features=default] \definefontsynonym [Arial-ItalicCond] [name:Arial Narrow Italic] [features=default] \definefontsynonym [Arial-BoldCond] [name:Arial Narrow Bold] [features=default] \definefontsynonym [Arial-BoldItalicCond] [name:Arial Narrow Bold Italic] [features=default] \definefontsynonym [Arial-Regular] [name:Arial] [features=default] \definefontsynonym [Arial-Italic] [name:Arial Italic] [features=default] \definefontsynonym [Arial-Bold] [name:Arial Bold] [features=default] \definefontsynonym [Arial-BoldItalic] [name:Arial Bold Italic] [features=default] \definefontsynonym [Arial-Black] [name:Arial Black] [features=default] \definefontsynonym [Arial-Unicode] [name:Arial Unicode MS] [features=default] \definefontsynonym [Arial-Rounded] [name:Arial Rounded MT Bold] [features=default] \stoptypescript \starttypescript [sans] [arial-narrow,arial-condensed] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Condensed] [features=default] \definefontsynonym [SansItalic] [Arial-ItalicCond] [features=default] \definefontsynonym [SansBold] [Arial-BoldCond] [features=default] \definefontsynonym [SansBoldItalic] [Arial-BoldItalicCond] [features=default] \stoptypescript \starttypescript [sans] [arial] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Regular] [features=default] \definefontsynonym [SansItalic] [Arial-Italic] [features=default] \definefontsynonym [SansBold] [Arial-Bold] [features=default] \definefontsynonym [SansBoldItalic] [Arial-BoldItalic] [features=default] \stoptypescript \starttypescript [sans] [arial-rounded] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Rounded] [features=default] \stoptypescript \starttypescript [sans] [arial-unicode] \setups[font:fallback:sans] \definefontsynonym [Sans] [Arial-Unicode] [features=default] \stoptypescript \starttypescript [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Baskerville \starttypescript [serif] [baskerville] \definefontsynonym [Baskerville-Regular] [name:Baskerville] [features=default] \definefontsynonym [Baskerville-Italic] [name:Baskerville Italic] [features=default] \definefontsynonym [Baskerville-Medium] [name:Baskerville SemiBold] [features=default] \definefontsynonym [Baskerville-MediumItalic] [name:Baskerville SemiBold Italic] [features=default] \definefontsynonym [Baskerville-Bold] [name:Baskerville Bold] [features=default] \definefontsynonym [Baskerville-BoldItalic] [name:Baskerville Bold Italic] [features=default] \stoptypescript \starttypescript [serif] [baskerville] \setups[font:fallback:serif] \definefontsynonym [Serif] [Baskerville-Regular] [features=default] \definefontsynonym [SerifItalic] [Baskerville-Italic] [features=default] \definefontsynonym [SerifBold] [Baskerville-Medium] [features=default] \definefontsynonym [SerifBoldItalic] [Baskerville-MediumItalic] [features=default] \stoptypescript \starttypescript [baskerville] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Big Caslon \starttypescript [serif] [caslon,bigcaslon] \definefontsynonym [BigCaslon-Medium] [name:Big Caslon Medium] [features=default] \stoptypescript \starttypescript [serif] [caslon,bigcaslon] \setups[font:fallback:serif] \definefontsynonym [Serif] [BigCaslon-Medium] [features=default] \stoptypescript \starttypescript [caslon,bigcaslon] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Copperplate \starttypescript [sans] [copperplate-light,copperplate] \definefontsynonym [Copperplate-Light] [name:Copperplate Light] [features=default] \definefontsynonym [Copperplate-Regular] [name:Copperplate] [features=default] \definefontsynonym [Copperplate-Bold] [name:Copperplate Bold] [features=default] \stoptypescript \starttypescript [sans] [copperplate-light] \setups[font:fallback:sans] \definefontsynonym [Sans] [Copperplate-Light] [features=default] \definefontsynonym [SansBold] [Copperplate-Regular] [features=default] \stoptypescript \starttypescript [sans] [copperplate] \setups[font:fallback:sans] \definefontsynonym [Sans] [Copperplate-Regular] [features=default] \definefontsynonym [SansBold] [Copperplate-Bold] [features=default] \stoptypescript \starttypescript [copperplate-light,copperplate] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Futura \starttypescript [sans] [futura-condensed,futura] \definefontsynonym [Futura-MediumCond] [name:Futura Condensed Medium] [features=default] \definefontsynonym [Futura-Medium] [name:Futura Medium] [features=default] \definefontsynonym [Futura-MediumItalic] [name:Futura Medium Italic] [features=default] \definefontsynonym [Futura-BoldCond] [name:Futura Condensed ExtraBold] [features=default] \stoptypescript \starttypescript [sans] [futura-condensed] \setups[font:fallback:sans] \definefontsynonym [Sans] [Futura-MediumCond] [features=default] \definefontsynonym [SansBold] [Futura-BoldCond] [features=default] \stoptypescript \starttypescript [sans] [futura] \setups[font:fallback:sans] \definefontsynonym [Sans] [Futura-Medium] [features=default] \definefontsynonym [SansItalic] [Futura-MediumItalic] [features=default] \stoptypescript \starttypescript [futura-condensed,futura] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Gill Sans \starttypescript [sans] [gillsans-light,gillsans] \definefontsynonym [GillSans-Light] [name:Gill Sans Light] [features=default] \definefontsynonym [GillSans-LightItalic] [name:Gill Sans Light Italic] [features=default] \definefontsynonym [GillSans-Regular] [name:Gill Sans] [features=default] \definefontsynonym [GillSans-Italic] [name:Gill Sans Italic] [features=default] \definefontsynonym [GillSans-Bold] [name:Gill Sans Bold] [features=default] \definefontsynonym [GillSans-BoldItalic] [name:Gill Sans Bold Italic] [features=default] \stoptypescript \starttypescript [sans] [gillsans-light] \setups[font:fallback:sans] \definefontsynonym [Sans] [GillSans-Light] [features=default] \definefontsynonym [SansItalic] [GillSans-LightItalic] [features=default] \definefontsynonym [SansBold] [GillSans-Regular] [features=default] \definefontsynonym [SansBoldItalic] [GillSans-Italic] [features=default] \stoptypescript \starttypescript [sans] [gillsans] \setups[font:fallback:sans] \definefontsynonym [Sans] [GillSans-Regular] [features=default] \definefontsynonym [SansItalic] [GillSans-Italic] [features=default] \definefontsynonym [SansBold] [GillSans-Bold] [features=default] \definefontsynonym [SansBoldItalic] [GillSans-BoldItalic] [features=default] \stoptypescript \starttypescript [gillsans-light,gillsans] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Helvetica Neuse \starttypescript [sans] [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed] \definefontsynonym [HelveticaNeue-UltraLight] [name:Helvetica Neue UltraLight] [features=default] \definefontsynonym [HelveticaNeue-UltraLightItalic] [name:Helvetica Neue UltraLight Italic] [features=default] \definefontsynonym [HelveticaNeue-Light] [name:Helvetica Neue Light] [features=default] \definefontsynonym [HelveticaNeue-LightItalic] [name:Helvetica Neue Light Italic] [features=default] \definefontsynonym [HelveticaNeue-Regular] [name:Helvetica Neue] [features=default] \definefontsynonym [HelveticaNeue-Italic] [name:Helvetica Neue Italic] [features=default] \definefontsynonym [HelveticaNeue-Bold] [name:Helvetica Neue Bold] [features=default] \definefontsynonym [HelveticaNeue-BoldItalic] [name:Helvetica Neue Bold Italic] [features=default] \definefontsynonym [HelveticaNeue-BoldCond] [name:Helvetica Neue Condensed Bold] [features=default] \definefontsynonym [HelveticaNeue-BlackCond] [name:Helvetica Neue Condensed Black] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue-ultralight] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-UltraLight] [features=default] \definefontsynonym [SansItalic] [HelveticaNeue-UltraLightItalic] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-Light] [features=default] \definefontsynonym [SansBoldItalic] [HelveticaNeue-LightItalic] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue-light] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-Light] [features=default] \definefontsynonym [SansItalic] [HelveticaNeue-LightItalic] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-Regular] [features=default] \definefontsynonym [SansBoldItalic] [HelveticaNeue-Italic] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-Regular] [features=default] \definefontsynonym [SansItalic] [HelveticaNeue-Italic] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-Bold] [features=default] \definefontsynonym [SansBoldItalic] [HelveticaNeue-BoldItalic] [features=default] \stoptypescript \starttypescript [sans] [helvetica-neue-boldcondensed] \setups[font:fallback:sans] \definefontsynonym [Sans] [HelveticaNeue-BoldCond] [features=default] \definefontsynonym [SansBold] [HelveticaNeue-BlackCond] [features=default] \stoptypescript \starttypescript [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Hiragino Mincho \starttypescript [serif] [hiragino-mincho] \definefontsynonym [HiraginoMinchoPro-Regular] [name:Hiragino Mincho Pro W3] [features=japanese] \definefontsynonym [HiraginoMinchoPro-Bold] [name:Hiragino Mincho Pro W6] [features=japanese] \definefontsynonym [HiraginoMinchoProN-Regular] [name:Hiragino Mincho ProN W3] [features=japanese] \definefontsynonym [HiraginoMinchoProN-Bold] [name:Hiragino Mincho ProN W6] [features=japanese] \stoptypescript \starttypescript [serif] [hiragino-mincho] \setups[font:fallback:serif] \definefontsynonym [Serif] [HiraginoMinchoPro-Regular] [features=japanese] \definefontsynonym [SerifBold] [HiraginoMinchoPro-Bold] [features=japanese] \stoptypescript % \starttypescript [serif] [hiragino-mincho] % \setups[font:fallback:serif] % \definefontsynonym [Serif] [HiraginoMinchoProN-Regular] [features=japanese] % \definefontsynonym [SerifBold] [HiraginoMinchoProN-Bold] [features=japanese] % \stoptypescript \starttypescript [hiragino-mincho] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Hiragino Maru \starttypescript [sans] [hiragino-maru] \definefontsynonym [HiraginoMaruGothicPro-Regular] [name:Hiragino Maru Gothic Pro W4] [features=japanese] \definefontsynonym [HiraginoMaruGothicProN-Regular] [name:Hiragino Maru Gothic ProN W4] [features=japanese] \stoptypescript \starttypescript [sans] [hiragino-maru] \setups[font:fallback:sans] \definefontsynonym [Sans] [HiraginoMaruGothicPro-Regular] [features=japanese] \stoptypescript % \starttypescript [sans] [hiragino-maru] % \setups[font:fallback:sans] % \definefontsynonym [Sans] [HiraginoMaruGothicProN-Regular] [features=japanese] % \stoptypescript \starttypescript [hiragino-maru] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Hiragino Kaku \starttypescript [sans] [hiragino-kaku] \definefontsynonym [HiraginoKakuGothicPro-Regular] [name:Hiragino Kaku Gothic Pro W3] [features=japanese] \definefontsynonym [HiraginoKakuGothicPro-Bold] [name:Hiragino Kaku Gothic Pro W6] [features=japanese] \definefontsynonym [HiraginoKakuGothicStd-Black] [name:Hiragino Kaku Gothic Std W8] [features=japanese] \definefontsynonym [HiraginoKakuGothicProN-Regular] [name:Hiragino Kaku Gothic Pron W3] [features=japanese] \definefontsynonym [HiraginoKakuGothicProN-Bold] [name:Hiragino Kaku Gothic ProN W6] [features=japanese] \definefontsynonym [HiraginoKakuGothicStdN-Black] [name:Hiragino Kaku Gothic StdN W8] [features=japanese] \stoptypescript \starttypescript [sans] [hiragino-kaku] \setups[font:fallback:sans] \definefontsynonym [Sans] [HiraginoKakuGothicPro-Regular] [features=japanese] \definefontsynonym [SansBold] [HiraginoKakuGothicPro-Bold] [features=japanese] \stoptypescript % \starttypescript [sans] [hiragino-kaku] % \setups[font:fallback:sans] % \definefontsynonym [Sans] [HiraginoKakuGothicProN-Regular] [features=japanese] % \definefontsynonym [SansBold] [HiraginoKakuGothicProN-Bold] [features=japanese] % \stoptypescript \starttypescript [hiragino-kaku] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Hoefler Text \starttypescript [serif] [hoefler] \definefontsynonym [HoeflerText-Regular] [name:Hoefler Text] [features=default] \definefontsynonym [HoeflerText-Italic] [name:Hoefler Text Italic] [features=default] \definefontsynonym [HoeflerText-Black] [name:Hoefler Text Black] [features=default] \definefontsynonym [HoeflerText-BlackItalic] [name:Hoefler Text Black Italic] [features=default] \definefontsynonym [HoeflerText-Ornaments] [name:Hoefler Text Ornaments] [features=default] \stoptypescript \starttypescript [serif] [hoefler] \setups[font:fallback:serif] \definefontsynonym [Serif] [HoeflerText-Regular] [features=default] \definefontsynonym [SerifItalic] [HoeflerText-Italic] [features=default] \definefontsynonym [SerifBold] [HoeflerText-Black] [features=default] \definefontsynonym [SerifBoldItalic] [HoeflerText-BlackItalic] [features=default] \stoptypescript \starttypescript [hoefler] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Impact \starttypescript [sans] [impact] \definefontsynonym [Impact-Regular] [name:Impact] [features=default] \stoptypescript \starttypescript [sans] [impact] \setups[font:fallback:sans] \definefontsynonym [Sans] [Impact-Regular] [features=default] \stoptypescript \starttypescript [impact] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Andale Mono / Monaco \starttypescript [mono] [andalemono,monaco] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default] \stoptypescript \starttypescript [mono] [andalemono,monaco] \setups[font:fallback:mono] \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] \stoptypescript \starttypescript [andalemono,monaco] \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] \stoptypescript % Optima \starttypescript [sans] [optima,optima-bold] \definefontsynonym [Optima-Regular] [name:Optima Regular] [features=default] \definefontsynonym [Optima-Italic] [name:Optima Italic] [features=default] \definefontsynonym [Optima-Bold] [name:Optima Bold] [features=default] \definefontsynonym [Optima-BoldItalic] [name:Optima Bold Italic] [features=default] \definefontsynonym [Optima-Black] [name:Optima ExtraBlack] [features=default] \stoptypescript \starttypescript [sans] [optima] \setups[font:fallback:sans] \definefontsynonym [Sans] [Optima-Regular] [features=default] \definefontsynonym [SansItalic] [Optima-Italic] [features=default] \definefontsynonym [SansBold] [Optima-Bold] [features=default] \definefontsynonym [SansBoldItalic] [Optima-BoldItalic] [features=default] \stoptypescript \starttypescript [sans] [optima-bold] \setups[font:fallback:sans] \definefontsynonym [Sans] [Optima-Bold] [features=default] \definefontsynonym [SansItalic] [Optima-BoldItalic] [features=default] \definefontsynonym [SansBold] [Optima-Black] [features=default] \stoptypescript \starttypescript [optima,optima-bold] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Papyrus \starttypescript [sans] [papyrus] \definefontsynonym [Papyrus-Regular] [name:Papyrus] [features=default] \definefontsynonym [Papyrus-Condensed] [name:Papyrus Condensed] [features=default] \stoptypescript \starttypescript [sans] [papyrus] \setups[font:fallback:sans] \definefontsynonym [Sans] [Papyrus-Regular] [features=default] \stoptypescript \starttypescript [papyrus] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % STFangsong \starttypescript [serif] [stfangsong] \definefontsynonym [STFangsong-Regular] [name:STFangsong] [features=chinese] \stoptypescript \starttypescript [serif] [stfangsong] \setups[font:fallback:sans] \definefontsynonym [Serif] [STFangsong-Regular] [features=chinese] \stoptypescript \starttypescript [stfangsong] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % STHeiti \starttypescript [sans] [stheiti] \definefontsynonym [STXihei-Light] [name:STHeiti Light] [features=chinese] \definefontsynonym [STHeiti-Regular] [name:STHeiti Regular] [features=chinese] \stoptypescript \starttypescript [sans] [stheiti] \setups[font:fallback:sans] \definefontsynonym [Sans] [STXihei-Light] [features=chinese] \definefontsynonym [SansBold] [STKaiti-Regular] [features=chinese] \stoptypescript \starttypescript [stheiti] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % STKaiti \starttypescript [serif] [stkaiti] \definefontsynonym [STKaiti-Regular] [name:STKaiti] [features=chinese] \stoptypescript \starttypescript [serif] [stkaiti] \setups[font:fallback:sans] \definefontsynonym [Serif] [STKaiti-Regular] [features=chinese] \stoptypescript \starttypescript [stkaiti] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % STSong \starttypescript [serif] [stsong] \definefontsynonym [STSong-Regular] [name:STSong] [features=chinese] \stoptypescript \starttypescript [serif] [stsong] \setups[font:fallback:sans] \definefontsynonym [Serif] [STSong-Regular] [features=chinese] \stoptypescript \starttypescript [stsong] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Chalkboard / Comic Sans / Tahoma \starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [name:\typescriptprefix{f:\typescripttwo} Bold] [features=default] \stoptypescript \starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma] \setups[font:fallback:sans] \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] \stoptypescript \starttypescript [chalkboard,comicsans,tahoma] \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] \stoptypescript % Cochin / Courier New / Georgia / Times New Roman / Trebuchet / Verdana \starttypescript [serif,sans,mono] [cochin,georgia,timesnewroman,trebuchet,verdana,couriernew] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [name:\typescriptprefix{f:\typescripttwo} Italic] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [name:\typescriptprefix{f:\typescripttwo} Bold] [features=default] \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [name:\typescriptprefix{f:\typescripttwo} Bold Italic] [features=default] \stoptypescript \starttypescript [serif] [cochin,georgia,timesnewroman] \setups[font:fallback:serif] \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default] \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default] \stoptypescript \starttypescript [cochin,georgia,timesnewroman] \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] \stoptypescript % Courier New % \starttypescript [mono] [couriernew] % \setups[font:fallback:mono] % \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] % \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default] % \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] % \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default] % \stoptypescript % \starttypescript [couriernew] % \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] % \stoptypescript % Trebuchet / Verdana % \starttypescript [sans] [trebuchet,verdana] % \setups[font:fallback:sans] % \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default] % \definefontsynonym [SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default] % \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default] % \definefontsynonym [SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default] % \stoptypescript % \starttypescript [trebuchet,verdana] % \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] % \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-grk-00.mkii0000644000175000017500000000435311754241457024023 0ustar norbertnorbert%D \module %D [ file=s-grk-00, %D version=2004.08.23, %D title=\CONTEXT\ Style File, %D subtitle=CB Greek Support, %D author=Hans Hagen, %D date=\currentdate, %D suggestions=Giuseppe Bilotta, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usetypescriptfile[type-cbg] \usetypescript [all] [cbgreek-medium] \startsetups [cbgreek] \catcode`~=\other \catcode`|=\other \language[greek] \switchtobodyfont[cbgreek] \stopsetups \definestartstop [greek] [commands=\directsetup{cbgreek}] \doifnotmode{demo}{\endinput} % The following sample file was submitted to the \CONTEXT\ % mailing list by Giuseppe Bilotta, along with the right % typescripts. % already loaded: \usemodule[greek] \mainlanguage[english] \starttext We can easily use plain English for normal text, and then switch to greek when we want; as a first try we type the lower and upper case 26 letters of the latin alphabet and see how they come out in greek: \startgreek a b c d e f g h i j k l m n o p q r s t u v w x y z \par A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \stopgreek As it can be observed, some uppercase letters have strange outcomes; also, j gives \greek{j} and c gives the end-of-word sigma \greek{c}; interestingly, s gives either the normal sigma or the end-of-word one, depending on whether it's at the end of the word or not: \greek{satrapws}. Of course we can use the various diacritical signs: accents (\greek{`a, 'a, ~a}), breathings (\greek{w, a"}) and subscribed iotas (\greek{a|, h|, w|}) (these last are pretty ugly in my opinion); observe how they automatically get the correct position with uppercase letters: (\greek{`A, 'A, ~A, A, A|}). Can the thing be used for serious work? \startgreek >>'Andra moi >'ennepe, Mo~usa, pol'utropon, >'os m'ala poll`a\hfill\break pl'agqjh, >epe`i Tro'ihs 'eperse;\hfill\break poll~wn d" >anjr'wpwn >'iden >'astea ka`i n'oon >'egnw,\hfill\break poll`a d" <'o g" >en p'ontw| p'ajen >'algea <`on kat`a jum'on,\hfill\break >>arn'umenos <'hn te yuq`hn ka`i n'oston \wd0 2\else 0\fi % \setbox4\hbox to \dimen0{\leaders\hbox{#4}\hss#5}% % \mathord{\vcenter{{\offinterlineskip % \hbox to \dimen0{\hss\box0\hss}% % \kern\ht4% % \hbox to \dimen0{\hss\copy4\hss}% % \kern\ht4% % \hbox to \dimen0{\hss\box2\hss}}}}% % \endgroup} % % \def\math_stylebuilders_sqrt#1#2#3#4#5% % {\begingroup % \mathsurround\zeropoint % \setbox0\hbox{$#1 #5$}% % \ht0\dimexpr1.05\ht0+\onepoint\relax % \dp0\dimexpr1.05\dp0+\onepoint\relax % \setbox4\hbox to \wd0{\mr#2\leaders\hbox{#3}\hfill#4}% % \delimitershortfall\zeropoint % \nulldelimiterspace\zeropoint % \setbox2\hbox{$\left\delimiter"0270370 \vrule \s!height\ht0 \s!depth \dp0 \s!width\zeropoint\right.$}% is this the right code point? % \mathord{\vcenter{\hbox{\copy2\rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}% % \endgroup} % % \def\mthfrac#1#2#3#4#5{\mathchoice % {\math_stylebuilders_frac\displaystyle \textface {#1}{#2}{#3}{#4}{#5}}% % {\math_stylebuilders_frac\textstyle \textface {#1}{#2}{#3}{#4}{#5}}% % {\math_stylebuilders_frac\scriptstyle \scriptface {#1}{#2}{#3}{#4}{#5}}% % {\math_stylebuilders_frac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}} % % \def\mthsqrt#1#2#3{\mathchoice % {\math_stylebuilders_sqrt\displaystyle \textface{#1}{#2}{#3}}% % {\math_stylebuilders_sqrt\textstyle \textface{#1}{#2}{#3}}% % {\math_stylebuilders_sqrt\scriptstyle \textface{#1}{#2}{#3}}% % {\math_stylebuilders_sqrt\scriptscriptstyle\textface{#1}{#2}{#3}}} % \unexpanded\def\mthfrac#1#2#3{[mthfrac: #1 #2 #3]} % \unexpanded\def\mthsqrt#1#2#3{[mthsqrt: #1 #2 #3]} context-2013.05.28.20130704/texmf-dist/tex/context/base/type-cow.mkii0000644000175000017500000001001411754241457024321 0ustar norbertnorbert%D \module %D [ file=type-cow, %D version=2006.06.23, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Cow Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The cow fonts are a project of Duane Bibby, Hans Hagen and Taco %D Hoekwater. \starttypescriptcollection[cow] \starttypescript [math,serif] [cow,sheep] [default] \setups[font:fallback:serif] \usemathcollection[cow] \loadmapfile[koeieletters.map] \definefontsynonym [Serif] [Cows] [encoding=\typescriptthree] \definefontsynonym [SerifContour] [CowsContour] [encoding=\typescriptthree] \definefontsynonym [SerifLogo] [CowsLogo] [encoding=\typescriptthree] \definefontsynonym [SerifLogoContour][CowsLogoContour] [encoding=\typescriptthree] \definefontsynonym [MathRoman] [CowsMathRoman] [encoding=\typescriptthree] \definefontsynonym [MathItalic] [CowsMathItalic] [encoding=\typescriptthree] \definefontsynonym [MathSymbol] [CowsMathSymbol] [encoding=\typescriptthree] \definefontsynonym [MathExtension] [CowsMathExtensions][encoding=\typescriptthree] \stoptypescript \starttypescript [math,serif] [sheep] [default] \setups[font:fallback:serif] \usemathcollection[cow] \loadmapfile[koeieletters.map] \definefontsynonym [Serif] [Sheep] [encoding=\typescriptthree] \definefontsynonym [SerifContour] [SheepContour] [encoding=\typescriptthree] \definefontsynonym [SerifLogo] [SheepLogo] [encoding=\typescriptthree] \definefontsynonym [SerifLogoContour][SheepLogoContour] [encoding=\typescriptthree] \definefontsynonym [MathRoman] [SheepMathRoman] [encoding=\typescriptthree] \definefontsynonym [MathItalic] [SheepMathItalic] [encoding=\typescriptthree] \definefontsynonym [MathSymbol] [SheepMathSymbol] [encoding=\typescriptthree] \definefontsynonym [MathExtension] [SheepMathExtensions][encoding=\typescriptthree] \stoptypescript \starttypescript [all] [cow,sheep] [default] \definefontsynonym [Cows] [koeielett] \definefontsynonym [CowsContour] [koeielett-contour] \definefontsynonym [CowsLogo] [koeielogos] \definefontsynonym [CowsLogoContour] [koeielogos-contour] \definefontsynonym [CowsMathRoman] [koeielett] \definefontsynonym [CowsMathItalic] [koeieletter-mi] \definefontsynonym [CowsMathSymbol] [koeieletter-sy] \definefontsynonym [CowsMathExtensions][koeieletter-ex] \stoptypescript \starttypescript [all] [sheep] [default] \definefontsynonym [Sheep] [koeielett] \definefontsynonym [SheepContour] [koeielett-contour] \definefontsynonym [SheepLogo] [koeielogos] \definefontsynonym [SheepLogoContour] [koeielogos-contour] \definefontsynonym [SheepMathRoman] [koeielettx] \definefontsynonym [SheepMathItalic] [koeieletter-mi] \definefontsynonym [SheepMathSymbol] [koeieletter-syx] \definefontsynonym [SheepMathExtensions][koeieletter-ex] \stoptypescript \starttypescript [cow] [default] \definetypeface [cow] [rm][serif][cow] [default][encoding=default] \definetypeface [cow] [ss][serif][cow] [default][encoding=default] \definetypeface [cow] [mm][math] [cow] [default][encoding=default] \definetypeface [cow] [tt][mono] [modern][default][encoding=default,rscale=0.85] \stoptypescript \starttypescript [sheep] [default] \definetypeface [sheep][rm][serif][sheep] [default][encoding=default] \definetypeface [sheep][ss][serif][sheep] [default][encoding=default] \definetypeface [sheep][mm][math] [sheep] [default][encoding=default] \definetypeface [sheep][tt][mono] [modern][default][encoding=default,rscale=0.85] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-x5.mkii0000644000175000017500000001226211754241457024037 0ustar norbertnorbert%D \module %D [ file=enco-x5, %D version=1999.12.12, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Vietnamese Encoding, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is derived from the some files Han The Thanh %D prepared for \LATEX. The dual accent support is still %D preliminary, but works ok. \startencoding[x5] \definecharacter textgrave 0 \definecharacter textacute 1 \definecharacter textcircumflex 2 \definecharacter texttilde 3 \definecharacter textdiaeresis 4 \definecharacter texthungarumlaut 5 \definecharacter textring 6 \definecharacter textcaron 7 \definecharacter textbreve 8 \definecharacter textmacron 9 \definecharacter textdotaccent 10 \definecharacter textcedilla 11 \definecharacter textogonek 12 \definecharacter dotlessi 25 \definecharacter DJ 30 \definecharacter dj 31 \defineaccent ` A 128 \defineaccent ' A 129 \defineaccent ~ A 130 \defineaccent h A 131 \defineaccent d A 132 \defineaccent ^ A 133 \defineaccent ` ^A 134 \defineaccent ' ^A 135 \defineaccent ~ ^A 136 \defineaccent h ^A 137 \defineaccent d ^A 138 \defineaccent u A 139 \defineaccent ` uA 140 \defineaccent ' uA 141 \defineaccent ~ uA 142 \defineaccent h uA 143 \defineaccent d uA 144 \defineaccent ` E 145 \defineaccent ' E 146 \defineaccent ~ E 147 \defineaccent h E 148 \defineaccent d E 149 \defineaccent ^ E 150 \defineaccent ` ^E 151 \defineaccent ' ^E 152 \defineaccent ~ ^E 153 \defineaccent h ^E 154 \defineaccent d ^E 155 \defineaccent ` I 156 \defineaccent ' I 157 \defineaccent ~ I 158 \defineaccent h I 159 \defineaccent d I 192 \defineaccent ` O 193 \defineaccent ' O 194 \defineaccent ~ O 195 \defineaccent h O 196 \defineaccent d O 197 \defineaccent ^ O 198 \defineaccent ` ^O 199 \defineaccent ' ^O 200 \defineaccent ~ ^O 201 \defineaccent h ^O 202 \defineaccent d ^O 203 \defineaccent h O 204 \defineaccent ` hO 205 \defineaccent ' hO 206 \defineaccent ~ hO 207 \defineaccent h hO 208 \defineaccent d hO 209 \defineaccent ` U 210 \defineaccent ' U 211 \defineaccent ~ U 212 \defineaccent h U 213 \defineaccent d U 214 \defineaccent h U 215 \defineaccent ` hU 216 \defineaccent ' hU 217 \defineaccent ~ hU 218 \defineaccent h hU 219 \defineaccent d hU 220 \defineaccent ` Y 221 \defineaccent ' Y 222 \defineaccent ~ Y 223 \defineaccent h Y 26 \defineaccent d Y 28 \defineaccent ` a 160 \defineaccent ' a 161 \defineaccent ~ a 162 \defineaccent h a 163 \defineaccent d a 164 \defineaccent ^ a 165 \defineaccent ` ^a 166 \defineaccent ' ^a 167 \defineaccent ~ ^a 168 \defineaccent h ^a 169 \defineaccent d ^a 170 \defineaccent u a 171 \defineaccent ` ua 172 \defineaccent ' ua 173 \defineaccent ~ ua 174 \defineaccent h ua 175 \defineaccent d ua 176 \defineaccent ` e 177 \defineaccent ' e 178 \defineaccent ~ e 179 \defineaccent h e 180 \defineaccent d e 181 \defineaccent ^ e 182 \defineaccent ` ^e 183 \defineaccent ' ^e 184 \defineaccent ~ ^e 185 \defineaccent h ^e 186 \defineaccent d ^e 187 \defineaccent ` i 188 \defineaccent ' i 189 \defineaccent ~ i 190 \defineaccent h i 191 \defineaccent d i 224 \defineaccent ` o 225 \defineaccent ' o 226 \defineaccent ~ o 227 \defineaccent h o 228 \defineaccent d o 229 \defineaccent ^ o 230 \defineaccent ` ^o 231 \defineaccent ' ^o 232 \defineaccent ~ ^o 233 \defineaccent h ^o 234 \defineaccent d ^o 235 \defineaccent h o 236 \defineaccent ` ho 237 \defineaccent ' ho 238 \defineaccent ~ ho 239 \defineaccent h ho 240 \defineaccent d ho 241 \defineaccent ` u 242 \defineaccent ' u 243 \defineaccent ~ u 244 \defineaccent h u 245 \defineaccent d u 246 \defineaccent h u 247 \defineaccent ` hu 248 \defineaccent ' hu 249 \defineaccent ~ hu 250 \defineaccent h hu 251 \defineaccent d hu 252 \defineaccent ` y 253 \defineaccent ' y 254 \defineaccent ~ y 255 \defineaccent h y 27 \defineaccent d y 29 \stopencoding \endinput % \startencoding [x5] % % \definecharacter aa {\xfiveencodedaa} % \definecharacter AA {\xfiveencodedAA} % % \stopencoding % % \unprotect % % \def\xfiveencodedaa% % {\accent23a} % % \def\xfiveencodedAA% % {\leavevmode % \setbox\zerocount\hbox{h}% % \dimen@\ht\zerocount % \advance\dimen@ -1ex % \rlap{\raise.67\dimen@\hbox{\char23}}A} % % \protect % % \quotesinglbase 13 % \guilsinglleft 14 % \guilsinglright 15 % \textquotedblleft 16 % \textquotedblright 17 % \quotedblbase 18 % \guillemotleft 19 % \guillemotright 20 % \textendash 21 % \textemdash 22 % \textcompwordmark 23 % \textperthousand \% \char 24 % \textpertenthousand \%\char 24\char 24 % \textvisiblespace 32 % \textquotedbl `\" % \textdollar `\$ % \textquoteright `\' % \textless `\< % \textgreater `\> % \textbackslash `\ % \textasciicircum `\^ % \textunderscore 95 % \textquoteleft `\` % \textbraceleft `\{ % \textbar `\| % \textbraceright `\} % \textasciitilde `\~ context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1254.lua0000644000175000017500000000457411571377075024265 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1254'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF } context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pdf.mkiv0000644000175000017500000000753511754241457024302 0ustar norbertnorbert%D \module %D [ file=meta-pdf, %D version=2006.06.07, %D title=\METAPOST\ Graphics, %D subtitle=Conversion to \PDF, %D author=Hans Hagen \& others (see text), %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{meta-pdf}{1.003} \writestatus{loading}{MetaPost Graphics / MPS to PDF} \unprotect %D \macros %D {convertMPtoPDF} %D %D The next set of macros implements \METAPOST\ to \PDF\ conversion. The %D traditional method is in the MkII files and the older \MKIV\ method is %D kept in meta-pdh files. The main conversion command is still the same %D but the scale parameters are ignored in \MKIV: %D %D \starttyping %D \convertMPtoPDF {filename} {x scale} {y scale} %D \stoptyping %D %D Much code has gone due to the fact that we now use pre and post scripts %D and no specials. This also means that you should use a modern \METAPOST\ %D or reprocess graphics. The color control flags are also gone as we now %D integrate into the regular colorspace handling (i.e.\ no longer independent %D configurations.) \def\PDFMPformoffset{\ifdefined\objectoffset\objectoffset\else\zeropoint\fi} % obsolete, will go \def\convertMPtoPDF#1#2#3% scaling no longer supported at this level (so #2 & #3 are ignored) {\dostarttagged\t!mpgraphic\empty \naturalvbox attr \imageattribute 1 \bgroup \message{[MP to PDF]}% \xdef\MPfilename{#1}% \resetMPboundingbox \forgetall \offinterlineskip \setbox\MPbox\vbox\bgroup \ctxlua{metapost.mptopdf.convertmpstopdf("\MPfilename")}% \removeunwantedspaces % not that needed \egroup \finalizeMPbox \box\MPbox \egroup \dostoptagged} \protect \endinput %D Test code: %D %D \startbuffer %D \startMPcode %D fill fullcircle scaled 3cm withcolor red ; %D fill fullcircle scaled 2cm withcolor green ; %D fill fullcircle scaled 1cm withcolor blue ; %D currentpicture := currentpicture shifted (-4cm,0) ; %D fill fullcircle scaled 3cm withcolor cmyk(0,0,1,0) ; %D fill fullcircle scaled 2cm withcolor cmyk(0,1,0,0) ; %D fill fullcircle scaled 1cm withcolor cmyk(0,0,1,0) ; %D currentpicture := currentpicture shifted (-4cm,0) ; %D draw fullcircle scaled 3cm dashed evenly ; %D draw fullcircle scaled 2cm dashed withdots ; %D draw origin withpen pencircle scaled 3mm; %D currentpicture := currentpicture shifted (-4cm,0) ; %D fill fullcircle scaled 2cm shifted (-.5cm,+.5cm) withcolor transparent(1,.5,red); %D fill fullcircle scaled 2cm shifted (-.5cm,-.5cm) withcolor transparent(1,.5,red); %D fill fullcircle scaled 2cm shifted (+.5cm,+.5cm) withcolor transparent(1,.5,green); %D fill fullcircle scaled 2cm shifted (+.5cm,-.5cm) withcolor transparent(1,.5,cmyk(1,0,1,.5)); %D currentpicture := currentpicture shifted (12cm,-4cm) ; %D draw "o e p s" infont defaultfont scaled 2 shifted (-1cm,0) ; %D currentpicture := currentpicture shifted (-4cm,0) ; %D % bug: shift %D draw fullcircle scaled 3cm withpen pencircle yscaled 3mm xscaled 2mm rotated 30 ; %D draw fullcircle scaled 2cm withpen pencircle yscaled 3mm xscaled 2mm rotated 20 withcolor red ; %D filldraw fullcircle scaled 1cm withpen pencircle yscaled 3mm xscaled 2mm rotated 10 withcolor green ; %D currentpicture := currentpicture shifted (-4cm,0) ; %D % shade cannot handle shift %D circular_shade(fullcircle scaled 3cm,0,.2red,.9green) ; %D circular_shade(fullcircle scaled 3cm shifted(+4cm,0),0,cmyk(1,0,0,0),cmyk(0,1,0,0)) ; %D filldraw boundingbox currentpicture enlarged -3cm withpen pencircle scaled 1pt withcolor .5white ; %D \stopMPcode %D \stopbuffer %D %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-ini.lua0000644000175000017500000002461012130411274024071 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-ini'] = { version = 1.001, comment = "companion to buff-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local trace_run = false trackers.register("buffers.run", function(v) trace_run = v end) local trace_grab = false trackers.register("buffers.grab", function(v) trace_grab = v end) local trace_visualize = false trackers.register("buffers.visualize", function(v) trace_visualize = v end) local report_buffers = logs.reporter("buffers","usage") local report_grabbing = logs.reporter("buffers","grabbing") local context, commands = context, commands local concat = table.concat local type, next, load = type, next, load local sub, format = string.sub, string.format local splitlines, validstring = string.splitlines, string.valid local P, Cs, patterns, lpegmatch = lpeg.P, lpeg.Cs, lpeg.patterns, lpeg.match local variables = interfaces.variables local settings_to_array = utilities.parsers.settings_to_array local formatters = string.formatters local v_yes = variables.yes local catcodenumbers = catcodes.numbers local ctxcatcodes = catcodenumbers.ctxcatcodes local txtcatcodes = catcodenumbers.txtcatcodes buffers = buffers or { } local buffers = buffers local cache = { } local function erase(name) cache[name] = nil end local function assign(name,str,catcodes) cache[name] = { data = str, catcodes = catcodes } end local function append(name,str) local buffer = cache[name] if buffer then buffer.data = buffer.data .. str else cache[name] = { data = str } end end local function exists(name) return cache[name] end local function getcontent(name) local buffer = name and cache[name] return buffer and buffer.data or "" end local function getlines(name) local buffer = name and cache[name] return buffer and splitlines(buffer.data) end local function collectcontent(names,separator) -- no print if type(names) == "string" then names = settings_to_array(names) end local nnames = #names if nnames == 0 then return getcontent("") -- default buffer elseif nnames == 1 then return getcontent(names[1]) else local t, n = { }, 0 for i=1,nnames do local c = getcontent(names[i]) if c ~= "" then n = n + 1 t[n] = c end end return concat(t,separator or "\n") -- was \r end end local function loadcontent(names) -- no print if type(names) == "string" then names = settings_to_array(names) end local nnames = #names local ok = false if nnames == 0 then ok = load(getcontent("")) -- default buffer elseif nnames == 1 then ok = load(getcontent(names[1])) else -- lua 5.2 chunked load local i = 0 ok = load(function() while true do i = i + 1 if i > nnames then return nil end local c = getcontent(names[i]) if c == "" then -- would trigger end of load else return c end end end) end if ok then return ok() elseif nnames == 0 then report_buffers("invalid lua code in default buffer") else report_buffers("invalid lua code in buffer %a",concat(names,",")) end end buffers.raw = getcontent buffers.erase = erase buffers.assign = assign buffers.append = append buffers.exists = exists buffers.getcontent = getcontent buffers.getlines = getlines buffers.collectcontent = collectcontent buffers.loadcontent = loadcontent -- the context interface commands.erasebuffer = erase commands.assignbuffer = assign local anything = patterns.anything local alwaysmatched = patterns.alwaysmatched local function countnesting(b,e) local n local g = P(b) / function() n = n + 1 end + P(e) / function() n = n - 1 end + anything local p = alwaysmatched / function() n = 0 end * g^0 * alwaysmatched / function() return n end return p end local counters = { } local nesting = 0 local autoundent = true local continue = false -- Beware: the first character of bufferdata has to be discarded as it's there to -- prevent gobbling of newlines in the case of nested buffers. The last one is -- a newlinechar and is removed too. -- -- An \n is unlikely to show up as \r is the endlinechar but \n is more generic -- for us. -- This fits the way we fetch verbatim: the indentatio before the sentinel -- determines the stripping. -- str = [[ -- test test test test test test test -- test test test test test test test -- test test test test test test test -- -- test test test test test test test -- test test test test test test test -- test test test test test test test -- ]] -- local function undent(str) -- local margin = match(str,"[\n\r]( +)[\n\r]*$") or "" -- local indent = #margin -- if indent > 0 then -- local lines = splitlines(str) -- local ok = true -- local pattern = "^" .. margin -- for i=1,#lines do -- local l = lines[i] -- if find(l,pattern) then -- lines[i] = sub(l,indent+1) -- else -- ok = false -- break -- end -- end -- if ok then -- return concat(lines,"\n") -- end -- end -- return str -- end -- how about tabs local getmargin = (Cs(P(" ")^1)*P(-1)+1)^1 local eol = patterns.eol local whatever = (P(1)-eol)^0 * eol^1 local strippers = { } local function undent(str) -- new version, needs testing local margin = lpegmatch(getmargin,str) if type(margin) ~= "string" then return str end local indent = #margin if indent == 0 then return str end local stripper = strippers[indent] if not stripper then stripper = Cs((P(margin)/"" * whatever + eol^1)^1) strippers[indent] = stripper end return lpegmatch(stripper,str) or str end function commands.grabbuffer(name,begintag,endtag,bufferdata,catcodes) -- maybe move \\ to call local dn = getcontent(name) if dn == "" then nesting = 0 continue = false end if trace_grab then if #bufferdata > 30 then report_grabbing("%s => |%s..%s|",name,sub(bufferdata,1,10),sub(bufferdata,-10,#bufferdata)) else report_grabbing("%s => |%s|",name,bufferdata) end end local counter = counters[begintag] if not counter then counter = countnesting(begintag,endtag) counters[begintag] = counter end nesting = nesting + lpegmatch(counter,bufferdata) local more = nesting > 0 if more then dn = dn .. sub(bufferdata,2,-1) .. endtag nesting = nesting - 1 continue = true else if continue then dn = dn .. sub(bufferdata,2,-2) -- no \r, \n is more generic elseif dn == "" then dn = sub(bufferdata,2,-2) else dn = dn .. "\n" .. sub(bufferdata,2,-2) -- no \r, \n is more generic end local last = sub(dn,-1) if last == "\n" or last == "\r" then -- \n is unlikely as \r is the endlinechar dn = sub(dn,1,-2) end if autoundent then dn = undent(dn) end end assign(name,dn,catcodes) commands.doifelse(more) end -- The optional prefix hack is there for the typesetbuffer feature and -- in mkii we needed that (this hidden feature is used in a manual). local function prepared(name,list,prefix) -- list is optional if not list or list == "" then list = name end if not name or name == "" then name = list end local content = collectcontent(list,nil) or "" if content == "" then content = "empty buffer" end if prefix then local name = file.addsuffix(name,"tmp") return tex.jobname .. "-" .. name, content else return name, content end end local capsule = "\\starttext\n%s\n\\stoptext\n" local command = "context %s" function commands.runbuffer(name,list,encapsulate) local name, content = prepared(name,list) if encapsulate then content = format(capsule,content) end local data = io.loaddata(name) if data ~= content then if trace_run then report_buffers("changes in %a, processing forced",name) end io.savedata(name,content) os.execute(format(command,name)) elseif trace_run then report_buffers("no changes in %a, not processed",name) end end function commands.savebuffer(list,name,prefix) -- name is optional local name, content = prepared(name,list,prefix==v_yes) io.savedata(name,content) end function commands.getbuffer(name) local str = getcontent(name) if str ~= "" then context.viafile(str,formatters["buffer.%s"](validstring(name,"noname"))) end end function commands.getbuffermkvi(name) -- rather direct ! context.viafile(resolvers.macros.preprocessed(getcontent(name)),formatters["buffer.%s.mkiv"](validstring(name,"noname"))) end function commands.gettexbuffer(name) local buffer = name and cache[name] if buffer and buffer.data ~= "" then context.pushcatcodetable() if buffer.catcodes == txtcatcodes then context.setcatcodetable(txtcatcodes) else context.setcatcodetable(ctxcatcodes) end -- context(function() context.viafile(buffer.data) end) context.getbuffer { name } -- viafile flushes too soon context.popcatcodetable() end end commands.getbufferctxlua = loadcontent function commands.doifelsebuffer(name) commands.doifelse(exists(name)) end -- This only used for mp buffers and is a kludge. Don't change the -- texprint into texsprint as it fails because "penddef" becomes -- "penddef" then. -- function commands.feedback(names) -- texprint(ctxcatcodes,splitlines(collectcontent(names))) -- end function commands.feedback(names) -- bad name, maybe rename to injectbuffercontent context.printlines(collectcontent(names)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-13.tex0000644000175000017500000001623211754241457023700 0ustar norbertnorbert%D \module %D [ file=s-pre-13, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 13, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is again one of the \EUROTEX\ 99 styles. It's one of %D the quick and dirty styles supporting basic structuring. \setuppapersize [S6][S6] \setuplayout [width=middle, height=middle, header=0pt, footer=0pt, bottomdistance=.5cm, bottom=1cm, topspace=2cm, backspace=2cm] %D This style is meant to be used with lucida handwriting %D fonts. If you don't have that font, you may reconsider %D using this style. \startmode[asintended] \setupbodyfont[lbr,hw] \stopmode %D These colors will mostly be used in the graphics drawn by %D \METAPOST. \setupcolors [state=start] \definecolor[PageColor] [s=.6] \definecolor[TextColor] [s=.8] \definecolor[LineColor] [g=.4] \definecolor[SymbolColor][r=.4] %D When interacting, we will use button shaped that are %D quite random and thereby regenerated for each instance. \setupinteractionscreen [option=max] \setupinteractionmenu [bottom] [state=start, height=1cm, middle=\hskip1cm] \setupinteraction [state=start, menu=on, display=new, click=no, color=SymbolColor, contrastcolor=SymbolColor] \startinteractionmenu[bottom] \hfill \got [previouspage] \symbol[prevmark] \\ \got [nextpage] \symbol[nextmark] \\ \got [CloseDocument] \symbol[stopmark] \\ \txt \tfd \SymbolColor \pagenumber \\ \stopinteractionmenu %D When not processed at runtime, the itemmark graphics can %D result in processing loops due to funny dimensions. %D Therefore, from now on, the itemize macros limit the height %D and depth. \definesymbol[itemmark][\useMPgraphic{itemmark}] \definesymbol[stopmark][\useMPgraphic{stopmark}] \definesymbol[nextmark][\useMPgraphic{nextmark}] \definesymbol[prevmark][\useMPgraphic{prevmark}] %D Of course we have some backgrounds. \defineoverlay [page] [\useMPgraphic{page}] \defineoverlay [next] [\overlaybutton{forward}] \defineoverlay [prev] [\overlaybutton{PreviousJump}] \setupbackgrounds [page] [background={page,prev}] \setupbackgrounds [text] [background=next] \setuphead [chapter] [alternative=middle, number=no, color=SymbolColor, style=\tfc] %D A little bit of tweaking. \setupwhitespace [big] \setupitemize [1] [symbol=itemmark, width=3\bodyfontsize] \def\StartTitlePage% {\setupinteractionmenu[bottom][state=stop] % will be named page block \startstandardmakeup \setupalign[middle] \def\\% {\stopcolor \vfil \bfb\setupinterlinespace \startcolor[black]} \bfd\setupinterlinespace \vfil \startcolor[SymbolColor]} \def\StopTitlePage {\stopcolor \vfil\vfil \stopstandardmakeup \setupinteractionmenu[bottom][state=start]} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} \definehead[Topic][chapter] \definehead[Nopic][title] \setuplist [Topic] [criterium=all, alternative=g, interaction=all, after=\blank] \def\Topics#1% {\Nopic{#1} \bgroup \setupinteraction [color=, contrastcolor=] \determinelistcharacteristics[Topic] \ifnum\utilitylistlength>12 \startcolumns[n=2] \placelist[Topic] \stopcolumns \else \placelist[Topic] \fi \egroup} %D We don't support another level of structuring. \let\Subject \Topic \let\Subjects\relax %D Most of this style is \METAPOST\ definitions. We could %D have shared some code, but it would not on forehand make %D things more readable, so we stick to the following %D definitions. \startuseMPgraphic{page} width := \overlaywidth ; height := \overlayheight ; d := 15 ; dd := d ; dd := 10 ; def fuzzy (expr p,dx,dy) = (xpart p +dx-uniformdeviate dx,ypart p+dy-uniformdeviate dy) enddef ; pair ll, lr, ur, ul ; ll := (d,d) ; lr := (width-d,d) ; ur := (width-d,height-d) ; ul := (d,height-d) ; path p, q, r, s ; p := ll.. for i=.1 step .1 until .9 : fuzzy (i[ll,lr],0,+dd).. endfor lr ; q := lr.. for i=.1 step .1 until .9 : fuzzy (i[lr,ur],-dd,0).. endfor ur ; r := ur.. for i=.1 step .1 until .9 : fuzzy (i[ur,ul],0,-dd).. endfor ul ; s := ul.. for i=.1 step .1 until .9 : fuzzy (i[ul,ll],+dd,0).. endfor ll ; fill unitsquare xscaled width yscaled height withcolor \MPcolor{PageColor} ; fill p & q & r & s -- cycle withcolor \MPcolor{TextColor} ; color c ; c := \MPcolor{LineColor} ; draw p withpen pencircle xscaled 20 yscaled 5 rotated 30 withcolor c ; draw q withpen pencircle xscaled 5 yscaled 20 rotated 30 withcolor c ; draw r withpen pencircle xscaled 20 yscaled 5 rotated 30 withcolor c ; draw s withpen pencircle xscaled 5 yscaled 20 rotated 30 withcolor c ; \stopuseMPgraphic \startuseMPgraphic{itemmark} width := BodyFontSize ; height := width/4 ; maxheight := StrutHeight ; line := 3width/2 ; def fuzzy = -(height/4)+uniformdeviate (height/2) enddef ; draw ((0,0+fuzzy)--(width,height+fuzzy/2)) shifted (line/2,0) withpen pencircle xscaled line yscaled (line/4) rotated (25+uniformdeviate 10) withcolor \MPcolor{SymbolColor} ; setbounds currentpicture to unitsquare xyscaled(width,maxheight) ; \stopuseMPgraphic \startuseMPgraphic{nextmark} LoadPageState ; width := BottomHeight ; height := line := width/2 ; def fuzzy = -(height/8)+uniformdeviate (height/4) enddef ; z1 = (0,0+fuzzy) ; z2 = (width,height/2+fuzzy/2) ; z3 = (0,height+fuzzy) ; draw (z1..{right}z2 & z2{left}..z3) withpen pencircle xscaled line yscaled (line/4) rotated 30 withcolor \MPcolor{SymbolColor} ; setbounds currentpicture to unitsquare xyscaled(width,height) ; \stopuseMPgraphic \startuseMPgraphic{prevmark} LoadPageState ; width := BottomHeight ; height := line := width/2 ; def fuzzy = -(height/8)+uniformdeviate (height/4) enddef ; z1 = (width,0+fuzzy) ; z2 = (0,height/2+fuzzy/2) ; z3 = (width,height+fuzzy) ; draw (z1..{left}z2 & z2{right}..z3) withpen pencircle xscaled line yscaled (line/4) rotated 30 withcolor \MPcolor{SymbolColor} ; setbounds currentpicture to unitsquare xyscaled(width,height) ; \stopuseMPgraphic \startuseMPgraphic{stopmark} LoadPageState ; width := BottomHeight ; height := line := width/2 ; def fuzzy = -(height/8)+uniformdeviate (height/4) enddef ; z1 = (0,0+fuzzy) ; z2 = (width,height+fuzzy) ; z3 = (width,0+fuzzy) ; z4 = (0,height+fuzzy) ; z5 = (width/2,height/2) ; drawoptions (withpen pencircle xscaled line yscaled (line/4) rotated 30 withcolor \MPcolor{SymbolColor}) ; draw z1..{right}z5..z2 ; draw z3..{left}z5..z4 ; setbounds currentpicture to unitsquare xyscaled(width,height) ; \stopuseMPgraphic \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \TitlePage{Title Page\\pre-writing} \Topics{Some Nice Quotes} \Topic{A Few} \Subject{Knuth} \input knuth \Subject{Tufte} \input tufte \Topic{Some More} \Subject{Zapf} \input zapf \Subject{Bryson} \input bryson \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-035.mkii0000644000175000017500000000155111754241457024023 0ustar norbertnorbert%D \module %D [ file=unic-035, %D version=2009.05.25, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 35, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] \unprotect \startunicodevector 35 \expandafter\strippedcsname \ifcase\numexpr#1\relax \varnothing \or % DIAMETER SIGN \unknownchar \or % ELECTRIC ARROW \unknownchar \or % HOUSE \unknownchar \or % UP ARROWHEAD \unknownchar \or % DOWN ARROWHEAD \unknownchar \or % PROJECTIVE \unknownchar \or % PERSPECTIVE \unknownchar \or % WAVY LINE \lceil \or % LEFT CEILING \rceil \or % RIGHT CEILING \lfloor \or % LEFT FLOOR \rfloor \or % RIGHT FLOOR \unknownchar \else \unknownchar % \fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-def.mkii0000644000175000017500000000206711754241457024300 0ustar norbertnorbert%D \module %D [ file=mult-def, %D version=2008.10.22, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Definitions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \setvalue{@interface@czech@}{cs} \setvalue{@interface@german@}{de} \setvalue{@interface@english@}{en} \setvalue{@interface@french@}{fr} \setvalue{@interface@italian@}{it} \setvalue{@interface@dutch@}{nl} \setvalue{@interface@persian@}{pe} \setvalue{@interface@romanian@}{ro} \def\userinterfacetag{\ifcsname @interface@\currentinterface @\endcsname\csname @interface@\currentinterface @\endcsname\else en\fi} \def\userresponsestag{\ifcsname @interface@\currentresponses @\endcsname\csname @interface@\currentresponses @\endcsname\else en\fi} \input mult-\userinterfacetag .\mksuffix \relax \input mult-m\userresponsestag.\mksuffix \relax \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-adj.lua0000644000175000017500000000337612130411274024062 0ustar norbertnorbertif not modules then modules = { } end modules ['spac-adj'] = { version = 1.001, comment = "companion to spac-adj.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- sort of obsolete code local a_vadjust = attributes.private('graphicvadjust') local nodecodes = nodes.nodecodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local remove_node = nodes.remove local hpack_node = node.hpack local vpack_node = node.vpack function nodes.handlers.graphicvadjust(head,groupcode) -- we can make an actionchain for mvl only if groupcode == "" then -- mvl only local h, p, done = head, nil, false while h do local id = h.id if id == hlist_code or id == vlist_code then local a = h[a_vadjust] if a then if p then local n head, h, n = remove_node(head,h) local pl = p.list if n.width ~= 0 then n = hpack_node(n,0,'exactly') -- todo: dir end if pl then pl.prev = n n.next = pl end p.list = n done = true else -- can't happen end else p = h h = h.next end else h = h.next end end return head, done else return head, false end end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-iwona.mkiv0000644000175000017500000003473411754241457025465 0ustar norbertnorbert%D \module %D [ file=type-imp-iwona, %D version=2010.06.21, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Iwona, %D author=Mojca Miklavec \& Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[iwona] % maybe this will change in Iwona-Math-Letters and Iwona-Math-Letters-Italic % These names are a depressing mess. They have changed over time and are % still not consistent. I'd expect Bold-Regular and Bold-Italic. \starttypescript [\s!sans] [iwona-light,iwona,iwona-medium,iwona-heavy,iwona-light-cond,iwona-cond,iwona-medium-cond,iwona-heavy-cond] \definefontsynonym [Iwona-Regular] [\s!file:Iwona-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-Italic] [\s!file:Iwona-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-Bold] [\s!file:Iwona-Bold] [\s!features=\s!default] \definefontsynonym [Iwona-BoldItalic] [\s!file:Iwona-BoldItalic] [\s!features=\s!default] \definefontsynonym [Iwona-Light-Regular] [\s!file:IwonaLight-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-Light-Italic] [\s!file:IwonaLight-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-Medium-Regular] [\s!file:IwonaMedium-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-Medium-Italic] [\s!file:IwonaMedium-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-Heavy-Regular] [\s!file:IwonaHeavy-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-Heavy-Italic] [\s!file:IwonaHeavy-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-CapsRegular] [\s!file:Iwona-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsItalic] [\s!file:Iwona-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsBold] [\s!file:Iwona-Bold] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsBoldItalic] [\s!file:Iwona-BoldItalic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsLight] [\s!file:IwonaLight-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsLight-Italic] [\s!file:IwonaLight-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsMedium] [\s!file:IwonaMedium-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsMedium-Italic] [\s!file:IwonaMedium-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsHeavy] [\s!file:IwonaHeavy-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsHeavy-Italic] [\s!file:IwonaHeavy-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CondRegular] [\s!file:IwonaCond-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-CondItalic] [\s!file:IwonaCond-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-CondBold] [\s!file:IwonaCond-Bold] [\s!features=\s!default] \definefontsynonym [Iwona-CondBoldItalic] [\s!file:IwonaCond-BoldItalic] [\s!features=\s!default] \definefontsynonym [Iwona-CondLight-Regular] [\s!file:IwonaCondLight-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-CondLight-Italic] [\s!file:IwonaCondLight-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-CondMedium-Regular] [\s!file:IwonaCondMedium-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-CondMedium-Italic] [\s!file:IwonaCondMedium-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-CondHeavy-Regular] [\s!file:IwonaCondHeavy-Regular] [\s!features=\s!default] \definefontsynonym [Iwona-CondHeavy-Italic] [\s!file:IwonaCondHeavy-Italic] [\s!features=\s!default] \definefontsynonym [Iwona-CapsCondRegular] [\s!file:IwonaCond-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondItalic] [\s!file:IwonaCond-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondBold] [\s!file:IwonaCond-Bold] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondBoldItalic] [\s!file:IwonaCond-BoldItalic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondLight-Regular] [\s!file:IwonaCondLight-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondLight-Italic] [\s!file:IwonaCondLight-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondMedium-Regular][\s!file:IwonaCondMedium-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondMedium-Italic] [\s!file:IwonaCondMedium-Italic] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondHeavy-Regular] [\s!file:IwonaCondHeavy-Regular] [\s!features=\s!smallcaps] \definefontsynonym [Iwona-CapsCondHeavy-Italic] [\s!file:IwonaCondHeavy-Italic] [\s!features=\s!smallcaps] \stoptypescript % [all] is redundant \starttypescript [\s!math][iwona][\s!all] \definefontsynonym[\s!MathRoman][iwonamath@iwona-math] \stoptypescript \starttypescript [\s!math][iwona-light][\s!all] \definefontsynonym[\s!MathRoman][iwonalightmath@iwona-light-math] \stoptypescript \starttypescript [\s!math][iwona-medium][\s!all] \definefontsynonym[\s!MathRoman][iwonamediummath@iwona-medium-math] \stoptypescript \starttypescript [\s!math][iwona-heavy][\s!all] \definefontsynonym[\s!MathRoman][iwonaheavymath@iwona-heavy-math] \stoptypescript \starttypescript [\s!math] [iwona,iwona-light,iwona-medium,iwona-heavy] [\s!all] \loadfontgoodies[iwona-math] \stoptypescript \starttypescript [\s!sans] [iwona-light] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-Light-Regular] \definefontsynonym [\s!SansItalic] [Iwona-Light-Italic] \definefontsynonym [\s!SansBold] [Iwona-Medium-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-Medium-Italic] \definefontsynonym [SansCaps] [Iwona-CapsLight] \definefontsynonym [SansItalicCaps] [Iwona-CapsLightItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsMedium] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsMediumItalic] \stoptypescript \starttypescript [\s!sans] [iwona-light-caps] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CapsLight-Regular] \definefontsynonym [\s!SansItalic] [Iwona-CapsLight-Italic] \definefontsynonym [\s!SansBold] [Iwona-CapsMedium-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-CapsMedium-Italic] \stoptypescript \starttypescript [\s!sans] [iwona] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-Regular] \definefontsynonym [\s!SansItalic] [Iwona-Italic] \definefontsynonym [\s!SansBold] [Iwona-Bold] \definefontsynonym [\s!SansBoldItalic] [Iwona-BoldItalic] \definefontsynonym [SansCaps] [Iwona-CapsRegular] \definefontsynonym [SansItalicCaps] [Iwona-CapsItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsBold] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsBoldItalic] \stoptypescript \starttypescript [\s!sans] [iwona-caps] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CapsRegular] \definefontsynonym [\s!SansItalic] [Iwona-CapsItalic] \definefontsynonym [\s!SansBold] [Iwona-CapsBold] \definefontsynonym [\s!SansBoldItalic] [Iwona-CapsBoldItalic] \stoptypescript \starttypescript [\s!sans] [iwona-medium] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-Medium-Regular] \definefontsynonym [\s!SansItalic] [Iwona-Medium-Italic] \definefontsynonym [\s!SansBold] [Iwona-Heavy-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsMedium-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-medium-caps] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CapsHeavy-Regular] \definefontsynonym [\s!SansItalic] [Iwona-CapsMedium-Italic] \definefontsynonym [\s!SansBold] [Iwona-CapsHeavy-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-heavy] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-Heavy-Regular] \definefontsynonym [\s!SansItalic] [Iwona-Heavy-Italic] \definefontsynonym [\s!SansBold] [Iwona-Heavy-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-Heavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-heavy-caps] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-light-cond] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CondLight-Regular] \definefontsynonym [\s!SansItalic] [Iwona-CondLight-Italic] \definefontsynonym [\s!SansBold] [Iwona-CondMedium-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-CondMedium-Italic] \definefontsynonym [SansCaps] [Iwona-CapsCondLight-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondLight-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondMedium-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondMedium-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-light-cond-caps,iwona-light-caps-cond] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CapsCondLight-Regular] \definefontsynonym [\s!SansItalic] [Iwona-CapsCondLight-Italic] \definefontsynonym [\s!SansBold] [Iwona-CapsCondMedium-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-CapsCondMedium-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-cond] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CondRegular] \definefontsynonym [\s!SansItalic] [Iwona-CondItalic] \definefontsynonym [\s!SansBold] [Iwona-CondBold] \definefontsynonym [\s!SansBoldItalic] [Iwona-CondBoldItalic] \definefontsynonym [SansCaps] [Iwona-CapsCondRegular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondItalic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondBold] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondBoldItalic] \stoptypescript \starttypescript [\s!sans] [iwona-cond-caps,iwona-caps-cond] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CapsCondRegular] \definefontsynonym [\s!SansItalic] [Iwona-CapsCondItalic] \definefontsynonym [\s!SansBold] [Iwona-CapsCondBold] \definefontsynonym [\s!SansBoldItalic] [Iwona-CapsCondBoldItalic] \stoptypescript \starttypescript [\s!sans] [iwona-medium-cond] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CondMedium-Regular] \definefontsynonym [\s!SansItalic] [Iwona-CondMedium-Italic] \definefontsynonym [\s!SansBold] [Iwona-CondHeavy-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-CondHeavy-Italic] \definefontsynonym [SansCaps] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansItalicCaps] [Iwona-CapsCondMedium-Italic] \definefontsynonym [SansBoldCaps] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondHeavy-Italic] \stoptypescript \starttypescript [\s!sans] [iwona-medium-cond-caps,iwona-medium-caps-cond] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [\s!SansItalic] [Iwona-CapsCondMedium-Italic] \definefontsynonym [\s!SansBold] [Iwona-CapsCondHeavy-Regular] \definefontsynonym [\s!SansBoldItalic] [Iwona-CapsCondHeavy-Italic] \stoptypescript \starttypescript [iwona,iwona-light,iwona-heavy,iwona-medium] \definetypeface[\typescriptone][\s!ss][\s!sans] [\typescriptone] [\s!default] \definetypeface[\typescriptone][\s!rm][\s!serif][modern] [\s!default] \definetypeface[\typescriptone][\s!tt][\s!mono] [modern] [\s!default] \definetypeface[\typescriptone][\s!mm][\s!math] [\typescriptone] [\s!default][text=ss] \quittypescriptscanning \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-lay.lua0000644000175000017500000001771412130411274024136 0ustar norbertnorbertif not modules then modules = { } end modules ['attr-lay'] = { version = 1.001, comment = "companion to attr-lay.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- layers (ugly code, due to no grouping and such); currently we use exclusive layers -- but when we need it stacked layers might show up too; the next function based -- approach can be replaced by static (metatable driven) resolvers -- maybe use backends.registrations here too local type = type local insert, remove = table.insert, table.remove local attributes, nodes, utilities, logs, backends = attributes, nodes, utilities, logs, backends local commands, context, interfaces = commands, context, interfaces local tex = tex local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local formatters = string.formatters local report_viewerlayers = logs.reporter("viewerlayers") -- todo: document this but first reimplement this as it reflects the early -- days of luatex / mkiv and we have better ways now -- nb: attributes: color etc is much slower than normal (marks + literals) but ... -- nb. too many "0 g"s -- nb: more local tables attributes.viewerlayers = attributes.viewerlayers or { } local viewerlayers = attributes.viewerlayers local variables = interfaces.variables local v_local = variables["local"] local v_global = variables["global"] local a_viewerlayer = attributes.private("viewerlayer") viewerlayers = viewerlayers or { } viewerlayers.data = allocate() viewerlayers.registered = viewerlayers.registered or { } viewerlayers.values = viewerlayers.values or { } viewerlayers.scopes = viewerlayers.scopes or { } viewerlayers.listwise = allocate() viewerlayers.attribute = a_viewerlayer viewerlayers.supported = true viewerlayers.hasorder = true local states = attributes.states local tasks = nodes.tasks local nodeinjections = backends.nodeinjections local codeinjections = backends.codeinjections local texsetattribute = tex.setattribute local texgetattribute = tex.getattribute local texsettokenlist = tex.settoks local unsetvalue = attributes.unsetvalue local nodepool = nodes.pool local data = viewerlayers.data local values = viewerlayers.values local listwise = viewerlayers.listwise local registered = viewerlayers.registered local scopes = viewerlayers.scopes local f_stamp = formatters["%s"] storage.register("attributes/viewerlayers/registered", registered, "attributes.viewerlayers.registered") storage.register("attributes/viewerlayers/values", values, "attributes.viewerlayers.values") storage.register("attributes/viewerlayers/scopes", scopes, "attributes.viewerlayers.scopes") local layerstacker = utilities.stacker.new("layers") -- experiment layerstacker.mode = "stack" layerstacker.unset = attributes.unsetvalue viewerlayers.resolve_begin = layerstacker.resolve_begin viewerlayers.resolve_step = layerstacker.resolve_step viewerlayers.resolve_end = layerstacker.resolve_end function commands.cleanuplayers() layerstacker.clean() -- todo end -- stacked local function startlayer(...) startlayer = nodeinjections.startlayer return startlayer(...) end local function stoplayer (...) stoplayer = nodeinjections.stoplayer return stoplayer (...) end local function extender(viewerlayers,key) if viewerlayers.supported and key == "none" then local d = stoplayer() viewerlayers.none = d return d end end local function reviver(data,n) if viewerlayers.supported then local v = values[n] if v then local d = startlayer(v) data[n] = d return d else report_viewerlayers("error: unknown reference %a",tostring(n)) end end end setmetatableindex(viewerlayers,extender) setmetatableindex(viewerlayers.data,reviver) -- !!!! TEST CODE !!!! layerstacker.start = function(...) local f = nodeinjections.startstackedlayer layerstacker.start = f return f(...) end layerstacker.stop = function(...) local f = nodeinjections.stopstackedlayer layerstacker.stop = f return f(...) end layerstacker.change = function(...) local f = nodeinjections.changestackedlayer layerstacker.change = f return f(...) end local function initializer(...) return states.initialize(...) end attributes.viewerlayers.handler = nodes.installattributehandler { name = "viewerlayer", namespace = viewerlayers, initializer = initializer, finalizer = states.finalize, -- processor = states.stacked, processor = states.stacker, } local stack, enabled, global = { }, false, false function viewerlayers.enable(value) if value == false or not viewerlayers.supported then if enabled then tasks.disableaction("shipouts","attributes.viewerlayers.handler") end enabled = false else if not enabled then tasks.enableaction("shipouts","attributes.viewerlayers.handler") end enabled = true end end function viewerlayers.forcesupport(value) viewerlayers.supported = value report_viewerlayers("viewerlayers are %ssupported",value and "" or "not ") viewerlayers.enable(value) end local function register(name,lw) -- if not inimode redefine data[n] in first call if not enabled then viewerlayers.enable(true) end local stamp = f_stamp(name) local n = registered[stamp] if not n then n = #values + 1 values[n] = name registered[stamp] = n listwise[n] = lw or false -- lw forces a used end return registered[stamp] -- == n end viewerlayers.register = register function viewerlayers.setfeatures(hasorder) viewerlayers.hasorder = hasorder end local usestacker = true -- new, experimental function viewerlayers.start(name) local a if usestacker then a = layerstacker.push(register(name) or unsetvalue) else insert(stack,texgetattribute(a_viewerlayer)) a = register(name) or unsetvalue end if global or scopes[name] == v_global then scopes[a] = v_global -- messy but we don't know the attributes yet texsetattribute("global",a_viewerlayer,a) else texsetattribute(a_viewerlayer,a) end texsettokenlist("currentviewerlayertoks",name) end function viewerlayers.stop() local a if usestacker then a = layerstacker.pop() else a = remove(stack) end if not a then -- error elseif a >= 0 then if global or scopes[a] == v_global then texsetattribute("global",a_viewerlayer,a) else texsetattribute(a_viewerlayer,a) end texsettokenlist("currentviewerlayertoks",values[a] or "") else if global or scopes[a] == v_global then texsetattribute("global",a_viewerlayer,unsetvalue) else texsetattribute(a_viewerlayer,unsetvalue) end texsettokenlist("currentviewerlayertoks","") end end function viewerlayers.define(settings) local tag = settings.tag if not tag or tag == "" then -- error elseif not scopes[tag] then -- prevent duplicates local title = settings.title if not title or title == "" then settings.title = tag end scopes[tag] = settings.scope or v_local codeinjections.defineviewerlayer(settings) end end commands.defineviewerlayer = viewerlayers.define commands.startviewerlayer = viewerlayers.start commands.stopviewerlayer = viewerlayers.stop function commands.definedviewerlayer(settings) viewerlayers.define(settings) context(register(settings.tag,true)) -- true forces a use end function commands.registeredviewerlayer(name) context(register(name,true)) -- true forces a use end context-2013.05.28.20130704/texmf-dist/tex/context/base/node-fin.mkiv0000644000175000017500000000412111754241457024270 0ustar norbertnorbert%D \module %D [ file=attr-ini, %D version=2007.06.06, % probably a bit older %D title=\CONTEXT\ Node Macros, %D subtitle=Finalizing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Support / Finalizing} % Objects are processed indepently \unknown\ actually we may % need a proper callback. \unprotect \registerctxluafile{node-shp}{1.001} \registerctxluafile{node-fin}{1.001} % we might generalize this one % we might have two variants at some point (efficiency) \def\finalizeobjectbox #1{\ctxcommand{finalizebox(\number#1)}} \def\finalizeshipoutbox#1{\ctxcommand{finalizebox(\number#1)}} % Tricky stuff: this might become obsolete. \definesystemattribute[trigger][public] \newcount\attributeboxcount \edef\startinheritattributes{\attribute\triggerattribute\plusone} \edef\stopinheritattributes {\attribute\triggerattribute\attributeunsetvalue} \def\doattributedcopy{\afterassignment\dodoattributedcopy\attributeboxcount} \def\doattributedbox {\afterassignment\dodoattributedbox \attributeboxcount} \def\dodoattributedcopy {\startinheritattributes \ifvbox\attributeboxcount \vbox{\unvcopy\attributeboxcount}% \else \hbox{\unhcopy\attributeboxcount}% \fi \stopinheritattributes} \def\dodoattributedbox {\startinheritattributes \ifvbox\attributeboxcount \vbox{\unvbox\attributeboxcount}% \else \hbox{\unhbox\attributeboxcount}% \fi \stopinheritattributes} \def\enableattributeinheritance {\ctxlua{attributes.states.enabletriggering()}% \let\attributedcopy\doattributedcopy \let\attributedbox \doattributedbox} \def\disableattributeinheritance {\ctxlua{attributes.states.disabletriggering()}% \let\attributedcopy\copy \let\attributedbox \box} \disableattributeinheritance % \appendtoks % \enableattributeinheritance % will become default % \to\everyjob \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-txt.mkvi0000644000175000017500000011150112130411274024304 0ustar norbertnorbert% macros=mkvi %D \module %D [ file=page-txt, % copied from main-001, %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Texts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Texts} \unprotect \newtoks\toptextcontent \newtoks\leftedgetextcontent \newtoks\headertextcontent \newtoks\leftmargintextcontent \newtoks\footertextcontent \newtoks\rightmargintextcontent \newtoks\bottomtextcontent \newtoks\rightedgetextcontent \newtoks\texttextcontent %D \macros %D {setuptop, setupheader, setuptext, %D setupfooter, setupbottom} %D %D The macros in this module sometimes look a bit more complicated %D than needed, which is a direct result of the fact that their %D ancestors are quite old and upward compatibility is a must. %D %D \showsetup{setuptop} %D \showsetup{setupheader} %D \showsetup{setuptext} %D \showsetup{setupfooter} %D \showsetup{setupbottom} \installcorenamespace{layouttexts} \installcorenamespace{layouttextsline} \installcorenamespace{layouttextsreset} \installcorenamespace{layouttextssynchronize} \installcorenamespace{layouttextstrut} \installcorenamespace{layouttextspecial} \installcorenamespace{layouttextcontent} \installcommandhandler \??layouttexts {layoutelement} \??layouttexts % \appendtoks % \resetlayoutelementparameter\c!lefttext % resolves better % \resetlayoutelementparameter\c!middletext % \resetlayoutelementparameter\c!righttext % \to \everydefinelayoutelement \definelayoutelement[\v!top ] \definelayoutelement[\v!header] \definelayoutelement[\v!text ] \definelayoutelement[\v!footer] \definelayoutelement[\v!bottom] \definelayoutelement[\v!top :\v!text] [\v!top ][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!header:\v!text] [\v!header][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!text :\v!text] [\v!text ][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!footer:\v!text] [\v!footer][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!bottom:\v!text] [\v!bottom][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!top :\v!margin][\v!top ][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!header:\v!margin][\v!header][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!text :\v!margin][\v!text ][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!footer:\v!margin][\v!footer][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!bottom:\v!margin][\v!bottom][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!top :\v!edge] [\v!top ][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!header:\v!edge] [\v!header][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!text :\v!edge] [\v!text ][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!footer:\v!edge] [\v!footer][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!bottom:\v!edge] [\v!bottom][\c!lefttext=,\c!middletext=,\c!righttext=] \unexpanded\def\setuplayouttext {\dotripleempty\page_layouts_setup_text} \def\page_layouts_setup_text[#vertical][#horizontal][#settings]% {\ifthirdargument \setuplayoutelement[#vertical:#horizontal][#settings]% \else \setuplayoutelement[#vertical][#horizontal]% \fi} \appendtoks \ifx\currentlayoutelement\empty\else \page_layouts_synchronize_element\currentlayoutelement % brr, can be vertical:horizontal \fi \to \everysetuplayoutelement \def\page_layouts_reset_element_status#vertical% {\expandafter\normalgdef\csname\??layouttextsreset#vertical\endcsname{\page_layouts_set_element_status_normal#vertical}} \def\page_layouts_set_element_status_normal#vertical% {\global\expandafter\let\csname\namedlayoutelementhash#vertical\c!state\endcsname\v!normal \global\expandafter\let\csname\??layouttextsreset#vertical\endcsname\relax \page_layouts_synchronize_element{#vertical}} \def\page_layouts_synchronize_element#vertical% {\xdef\previoustextstate{\csname\??layouttextssynchronize#vertical\endcsname}% can be a let \edef\currenttextstate {\namedlayoutelementparameter{#vertical}\c!state}% %\writestatus{>>}{[#vertical:\currenttextstate/\previoustextstate]}% \ifx\currenttextstate\previoustextstate \else \page_layouts_synchronize_element_indeed{#vertical}% \fi} \def\page_layouts_synchronize_element_indeed#vertical% {\ifx\currenttextstate \v!high \calculatevsizes\page_backgrounds_recalculate \else \ifx\previoustextstate\v!high \calculatevsizes\page_backgrounds_recalculate \else \ifx\currenttextstate \v!none \calculatevsizes\page_backgrounds_recalculate \else \ifx\previoustextstate\v!none \calculatevsizes\page_backgrounds_recalculate \fi\fi\fi\fi \letgvalue{\??layouttextssynchronize#vertical}\currenttextstate} \unexpanded\def\setuptop {\dotripleempty\page_layouts_setup_text[\v!top ]} \unexpanded\def\setupheader{\dotripleempty\page_layouts_setup_text[\v!header]} \unexpanded\def\setuptext {\dotripleempty\page_layouts_setup_text[\v!text ]} \unexpanded\def\setupfooter{\dotripleempty\page_layouts_setup_text[\v!footer]} \unexpanded\def\setupbottom{\dotripleempty\page_layouts_setup_text[\v!bottom]} %D We inherit some settings: \setuplayoutelement [ \c!leftstyle=\layoutelementparameter\c!style, \c!rightstyle=\layoutelementparameter\c!style, \c!leftcolor=\layoutelementparameter\c!color, \c!rightcolor=\layoutelementparameter\c!color, \c!leftwidth=\layoutelementparameter\c!width, \c!rightwidth=\layoutelementparameter\c!width] %D \macros %D {noheaderandfooterlines,notopandbottomlines} %D %D Although not really needed, the following shortcuts %D sometimes come in handy. %D %D \showsetup{noheaderandfooterlines} %D \showsetup{notopandbottomlines} \def\noheaderandfooterlines {\setuplayoutelement[\v!header][\c!state=\v!empty]% \setuplayoutelement[\v!footer][\c!state=\v!empty]} \def\notopandbottomlines {\setuplayoutelement[\v!top ][\c!state=\v!empty]% \setuplayoutelement[\v!bottom][\c!state=\v!empty]} %D \macros %D {setuptoptexts, setupheadertexts, setuptexttexts, %D setupfootertexts, setupbottomtexts} %D %D The next macros take one or more arguments. The exact setup %D depends on the number of arguments. Although not that %D intuitive, the current scheme evolved out of the original. %D When margin and edge texts as well as middle texts showed %D up, the current odd|/|even scheme surfaced. %D %D \showsetup{setuptoptexts} %D \showsetup{setupheadertexts} %D \showsetup{setuptexttexts} %D \showsetup{setupfootertexts} %D \showsetup{setupbottomtexts} \unexpanded\def\setuptoptexts {\dosixtupleempty\page_layouts_setup_texts[\v!top ]} \unexpanded\def\setupheadertexts{\dosixtupleempty\page_layouts_setup_texts[\v!header ]} \unexpanded\def\setuptexttexts {\dosixtupleempty\page_layouts_setup_texts[\v!text ]} \unexpanded\def\setupfootertexts{\dosixtupleempty\page_layouts_setup_texts[\v!footer ]} \unexpanded\def\setupbottomtexts{\dosixtupleempty\page_layouts_setup_texts[\v!bottom ]} % todo: \setuplayoutelementtext % An alternative approach is to have more variables but that does not % make the code less complex (probably more). \def\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c][#d]% {\ifsixthargument \edef\currentlayoutelement{#vertical:#horizontal}% \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double \c!leftstyle \c!leftcolor \c!leftwidth {#a}% \c!rightstyle\c!rightcolor\c!rightwidth{#d}}% \setlayoutelementparameter\c!righttext {\page_layouts_process_element_double \c!rightstyle\c!rightcolor\c!rightwidth{#b}% \c!leftstyle \c!leftcolor \c!leftwidth {#c}}% \else\iffifthargument \edef\currentlayoutelement{#vertical:\v!text}% \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double \c!leftstyle \c!leftcolor \c!leftwidth {#horizontal}% \c!rightstyle\c!rightcolor\c!rightwidth{#c}}% \setlayoutelementparameter\c!righttext {\page_layouts_process_element_double \c!rightstyle\c!rightcolor\c!rightwidth{#a}% \c!leftstyle \c!leftcolor \c!leftwidth {#b}}% \else\iffourthargument \edef\currentlayoutelement{#vertical:#horizontal}% \doifelsenothing{\detokenize{#a}} {\resetlayoutelementparameter\c!lefttext} {\setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double \c!leftstyle\c!leftcolor\c!leftwidth{#a}% \c!leftstyle\c!leftcolor\c!leftwidth{#a}}}% \doifelsenothing{\detokenize{#b}} {\resetlayoutelementparameter\c!righttext} {\setlayoutelementparameter\c!righttext {\page_layouts_process_element_double \c!rightstyle\c!rightcolor\c!rightwidth{#b}% \c!rightstyle\c!rightcolor\c!rightwidth{#b}}}% \else\ifthirdargument \edef\currentlayoutelement{#vertical:\v!text}% \doifelsenothing{\detokenize{#horizontal}} {\resetlayoutelementparameter\c!lefttext} {\setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}% \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}}}% \doifelsenothing{\detokenize{#a}} {\resetlayoutelementparameter\c!righttext} {\setlayoutelementparameter\c!righttext {\page_layouts_process_element_double \c!rightstyle\c!rightcolor\c!rightwidth{#a}% \c!rightstyle\c!rightcolor\c!rightwidth{#a}}}% \else\ifsecondargument \edef\currentlayoutelement{#vertical:\v!text}% \resetlayoutelementparameter\c!lefttext \resetlayoutelementparameter\c!righttext \doifelsenothing{\detokenize{#horizontal}} {\resetlayoutelementparameter\c!middletext} {\setlayoutelementparameter\c!middletext {\page_layouts_process_element_single\c!style\c!color\c!width{#horizontal}}}% \else \edef\currentlayoutelement{#vertical:\v!text}% \resetlayoutelementparameter\c!lefttext \resetlayoutelementparameter\c!righttext \resetlayoutelementparameter\c!middletext \edef\currentlayoutelement{#vertical:\v!margin}% \resetlayoutelementparameter\c!lefttext \resetlayoutelementparameter\c!righttext \resetlayoutelementparameter\c!middletext \edef\currentlayoutelement{#vertical:\v!edge}% \resetlayoutelementparameter\c!lefttext \resetlayoutelementparameter\c!righttext \resetlayoutelementparameter\c!middletext \fi\fi\fi\fi\fi} %D Left and right texts are swapped on odd and even pages, but %D only when double sided typesetting is enabled. \unexpanded\def\page_layouts_process_element_double {\doifoddpageelse \page_layouts_process_element_double_odd \page_layouts_process_element_double_even} \def\page_layouts_process_element_double_odd #lstyle#lcolor#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent% {\page_layouts_process_element_single#lstyle#lcolor#lwidth{#lcontent}} \def\page_layouts_process_element_double_even#lstyle#color#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent% {\page_layouts_process_element_single#rstyle#rcolor#rwidth{#rcontent}} %D The next macro will be cleaned up and made less messy and %D dependent. \let\m_page_layouts_element_content\empty \unexpanded\def\page_layouts_process_element_single#style#color#width#content% {\edef\m_page_layouts_element_content{\detokenize{#content}}% \ifx\m_page_layouts_element_content\empty % should not happen too often \else \page_layouts_process_element_single_indeed#style#color#width{#content}% \fi} \setvalue{\??layouttextstrut\v!yes}{\setstrut\strut} % maybe more variants \def\page_layouts_process_element_single_indeed#style#color#width#content% {\begingroup \uselayoutelementstyleandcolor#style#color% \csname\??layouttextstrut\layoutelementparameter\c!strut\endcsname \ifcsname\??layouttextspecial\m_page_layouts_element_content\endcsname \csname\??layouttextspecial\m_page_layouts_element_content\endcsname \else \edef\currentlayoutelementwidth{\layoutelementparameter#width}% \ifx\currentlayoutelementwidth\empty \expandafter\page_layouts_process_element_single_normal \else \expandafter\page_layouts_process_element_single_limited \fi{#content}% \fi \endgroup} % {}{}{} prevents lookahead issues ... this will go away \def\page_layouts_process_element_single_normal#content% {\doifelsemarking\m_page_layouts_element_content {\getmarking[\m_page_layouts_element_content][\v!first]} {\ignorecrlf#content{}{}{}}} \def\page_layouts_process_element_single_limited#content% {\doifelsemarking\m_page_layouts_element_content {\limitatetext{\getmarking[\m_page_layouts_element_content][\v!first]}\currentlayoutelementwidth\unknown} {\ignorecrlf\limitatetext{#content{}{}{}}\currentlayoutelementwidth\unknown}} \setvalue{\??layouttextspecial\v!pagenumber}{\page_layouts_place_page_number} \setvalue{\??layouttextspecial\v!date }{\currentdate} %D When specified, the texts are automatically limited in %D length. % % where used ? % % \def\page_layouts_limitate_element_text#width% % {\edef\currentlayoutelementwidth{\layoutelementparameter#width}% % \ifx\currentlayoutelementwidth\empty % \expandafter\firstofoneargument % \else % \expandafter\page_layouts_limitate_element_text_indeed % \fi} % % \def\page_layouts_limitate_element_text_indeed#content% % {\limitatetext{#content}\currentlayoutelementwidth\unknown} %D The placement of text is hooked into the token lists %D associated to the area at hand. \appendtoks \page_layouts_place_text_line\v!top \topheight \to \toptextcontent \appendtoks \page_layouts_place_text_line\v!header\headerheight \to \headertextcontent \appendtoks \page_layouts_place_text_line\v!text \textheight \to \texttextcontent \appendtoks \page_layouts_place_text_line\v!footer\footerheight \to \footertextcontent \appendtoks \page_layouts_place_text_line\v!bottom\bottomheight \to \bottomtextcontent %D Texts can be disabled, moved up and ignored, depending in %D the \type {status} variable. This is handled by the next %D couple of macros. \newcount\c_page_layouts_element_state_n \def\page_layouts_set_element_status#vertical% {\c_page_layouts_element_state_n=0\namedlayoutelementparameter#vertical\c!n\relax \ifcase\c_page_layouts_element_state_n \edef\textlinestatus{\namedlayoutelementparameter#vertical\c!state}% \else \setxvalue{\namedlayoutelementhash#vertical\c!n}{\the\numexpr\c_page_layouts_element_state_n+\minusone}% \let\textlinestatus\v!stop \fi} \appendtoks \doifinset\v!header\floatspecification{\setxvalue{\namedlayoutelementhash\v!header\c!n}{1}}% \doifinset\v!footer\floatspecification{\setxvalue{\namedlayoutelementhash\v!footer\c!n}{1}}% \to \everybeforeflushedpagefloat \unexpanded\def\page_layouts_place_text_line#vertical% {\page_layouts_set_element_status#vertical% \csname\??layouttextsline\ifcsname\??layouttextsline\textlinestatus\endcsname\textlinestatus\else\s!unknown\fi\endcsname#vertical} \unexpanded\def\doifelselayouttextline#vertical% shown or not {\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}% \ifx\currentlayoutelementstate\v!normal \expandafter\firstoftwoarguments \else\ifx\currentlayoutelementstate\v!start \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} \unexpanded\def\doifelselayoutsomeline#vertical% present or not {\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}% \ifx\currentlayoutelementstate\v!none \expandafter\secondoftwoarguments \else\ifx\currentlayoutelementstate\v!high \doubleexpandafter\secondoftwoarguments \else \doubleexpandafter\firstoftwoarguments \fi\fi} \newconditional\resyncaftertextline \setvalue{\??layouttextsline\v!normal}{\page_layouts_place_text_line_indeed} \setvalue{\??layouttextsline\empty }{\page_layouts_place_text_line_indeed} \letvalue{\??layouttextsline\v!none}\gobbletwoarguments \letvalue{\??layouttextsline\v!stop}\gobbletwoarguments \setvalue{\??layouttextsline\v!high}#vertical#height% {\global\settrue\resyncaftertextline \page_layouts_reset_element_status#vertical} \setvalue{\??layouttextsline\v!empty}#vertical#height% {\page_layouts_reset_element_status#vertical} \setvalue{\??layouttextsline\v!start}#vertical#height% {\page_layouts_reset_element_status#vertical% \page_layouts_place_text_line_indeed#vertical#height} \setvalue{\??layouttextsline\v!nomarking}#vertical#height% {\bgroup \page_layouts_reset_element_status#vertical% \settrue\inhibitgetmarking \page_layouts_place_text_line_indeed#vertical#height% \egroup} \setvalue{\??layouttextsline\s!unknown}#vertical#height% {\global\settrue\resyncaftertextline \begingroup % new \page_layouts_reset_element_status#vertical% \csname\namedlayoutelementhash#vertical\textlinestatus\endcsname \csname\namedlayoutelementhash#vertical\v!text \textlinestatus\endcsname \csname\namedlayoutelementhash#vertical\v!margin\textlinestatus\endcsname \csname\namedlayoutelementhash#vertical\v!edge \textlinestatus\endcsname \page_layouts_place_text_line_indeed#vertical#height% \endgroup} %D The following macro has to be called after a page %D is flushed. \def\resetlayouttextlines % public {\csname\??layouttextsreset\v!top \endcsname \csname\??layouttextsreset\v!header\endcsname \csname\??layouttextsreset\v!text \endcsname \csname\??layouttextsreset\v!footer\endcsname \csname\??layouttextsreset\v!bottom\endcsname \ifconditional\resyncaftertextline \calculateglobalvsizes \page_backgrounds_recalculate \global\setfalse\resyncaftertextline \fi} \def\getspecificlayouttext#vertical#horizontal#what% {\csname\namedlayoutelementhash{#vertical:#horizontal}#what\endcsname} % \settext[header][text][middle][xxx][yyy] \def\settextcontent {\doquintupleempty\page_layouts_set_text_content} \def\page_layouts_set_text_content[#vertical][#horizontal][#one][#two][#three]% header text middle text/text {\iffifthargument \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\executeifdefined{\??layouttextcontent\c!text:#one}\c!middletext}% {\page_layouts_process_element_double \c!leftstyle \c!leftcolor \c!leftwidth {#two}% \c!rightstyle\c!rightcolor\c!rightwidth{#three}}% \else\iffourthargument \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\executeifdefined{\??layouttextcontent\c!text:#one}\c!middletext}% {\page_layouts_process_element_double \c!leftstyle \c!leftcolor \c!leftwidth {#two}% \c!rightstyle\c!rightcolor\c!rightwidth{#two}}% \else\ifthirdargument \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\c!middletext}% {\page_layouts_process_element_double \c!leftstyle \c!leftcolor \c!leftwidth {#one}% \c!rightstyle\c!rightcolor\c!rightwidth{#one}}% \fi\fi\fi} \def\resettextcontent {\dotripleempty\page_layouts_reset_text_content} \def\page_layouts_reset_text_content[#vertical][#horizontal][#tag]% header text middle {\edef\currentlayoutelement{#vertical:#horizontal}% \ifthirdargument \letvalueempty{\layoutelementhash\executeifdefined{\??layouttextcontent\c!text:#tag}\c!middletext}% \else\ifsecondargument \resetlayoutelementparameter\c!lefttext \resetlayoutelementparameter\c!middletext \resetlayoutelementparameter\c!righttext \fi\fi} \letvalue{\??layouttextcontent\c!middle:\c!text}\c!middletext \letvalue{\??layouttextcontent\c!left :\c!text}\c!lefttext \letvalue{\??layouttextcontent\c!right :\c!text}\c!righttext %D The placement of a whole line is handled by the next two %D macros. These are hooked into the general purpose token %D list registers mentioned before. \def\page_layouts_place_text_line_indeed#vertical#height% {\let\currentlayouttextline#vertical% \ifdim#height>\zeropoint\relax % prevents pagenumbers when zero height \page_layouts_place_text_line_left_or_right{#height}% \fi} \def\page_layouts_place_text_line_left_or_right#height% {\goleftonpage \setbox\b_page_layouts_element\vbox to #height {\vsize#height\relax %\hsize\zeropoint % hack so that e.g. after=\hairline gives predictable results \hsize\totaltextwidth \normalbaselines \let\\\ignoredlinebreak \let\crlf\ignoredlinebreak \namedlayoutelementparameter\currentlayouttextline\c!before \doifbothsidesoverruled \page_layouts_place_text_line_right \page_layouts_place_text_line_right \page_layouts_place_text_line_left \namedlayoutelementparameter\currentlayouttextline\c!after \kern\zeropoint}% keep the \dp, beware of \vtops, never change this! \dp\b_page_layouts_element\zeropoint \box\b_page_layouts_element \vskip-#height\relax} \let\page_layouts_extra_at_margin_left \plusone \let\page_layouts_extra_at_margin_right\plustwo \let\page_layouts_place_extra_text_left \relax % historic \let\page_layouts_place_extra_text_right\relax % historic \def\page_layouts_place_text_line_right {\hbox {\ifdim\leftedgewidth>\zeropoint \page_layouts_left_edge_element\c!lefttext \fi \ifdim\leftmarginwidth>\zeropoint %\page_layouts_left_margin_element\c!lefttext\page_layouts_extra_at_margin_left \page_layouts_left_margin_element\c!lefttext\page_layouts_extra_at_margin_right \fi \ifdim\makeupwidth>\zeropoint \page_layouts_text_body_element\c!lefttext\c!middletext\c!righttext\page_layouts_extra_at_margin_left \fi \ifdim\rightmarginwidth>\zeropoint %\page_layouts_right_margin_element\c!righttext\page_layouts_extra_at_margin_left \page_layouts_right_margin_element\c!righttext\page_layouts_extra_at_margin_right \fi \ifdim\rightedgewidth>\zeropoint %\page_layouts_right_edge_element\c!lefttext \page_layouts_right_edge_element\c!righttext \fi}} \def\page_layouts_place_text_line_left {\hbox {\ifdim\leftedgewidth>\zeropoint \page_layouts_left_edge_element\c!righttext \fi \ifdim\leftmarginwidth>\zeropoint %\page_layouts_left_margin_element\c!righttext\page_layouts_extra_at_margin_right \page_layouts_left_margin_element\c!righttext\page_layouts_extra_at_margin_left \fi \ifdim\makeupwidth>\zeropoint \page_layouts_text_body_element\c!righttext\c!middletext\c!lefttext\page_layouts_extra_at_margin_right \fi \ifdim\rightmarginwidth>\zeropoint %\page_layouts_right_margin_element\c!lefttext\page_layouts_extra_at_margin_right \page_layouts_right_margin_element\c!lefttext\page_layouts_extra_at_margin_left \fi \ifdim\rightedgewidth>\zeropoint %\page_layouts_right_edge_element\c!righttext \page_layouts_right_edge_element\c!lefttext \fi}} \def\page_layouts_left_edge_element#parameter% {\edef\currentlayoutelement{\currentlayouttextline:\v!edge}% \page_layouts_place_element_indeed\leftedgewidth {\hss\layoutelementparameter#parameter}% \kern\leftedgedistance} \def\page_layouts_left_margin_element#parameter#extrastate% {\edef\currentlayoutelement{\currentlayouttextline:\v!margin}% \page_layouts_place_element_indeed\leftmarginwidth {\hbox to \leftmarginwidth{\hss\layoutelementparameter#parameter}% \ifnum#extrastate=\page_layouts_extra_at_margin_left \kern-\leftmarginwidth \hbox to \leftmarginwidth{\hss\layoutelementparameter\c!margintext}% \fi}% \kern\leftmargindistance} \def\page_layouts_text_body_element#left#middle#right#extrastate% {\edef\currentlayoutelement{\currentlayouttextline:\v!text}% \page_layouts_place_element_indeed\makeupwidth {\hbox to \makeupwidth{\ifnum#extrastate=\page_layouts_extra_at_margin_left\page_layouts_place_extra_text_left\fi\layoutelementparameter#left\hss}% \kern-\makeupwidth \hbox to \makeupwidth{\hss\layoutelementparameter#middle\hss}% \kern-\makeupwidth \hbox to \makeupwidth{\hss\layoutelementparameter#right\ifnum#extrastate=\page_layouts_extra_at_margin_right\page_layouts_place_extra_text_right\fi}}} \def\page_layouts_right_margin_element#parameter#extrastate% {\edef\currentlayoutelement{\currentlayouttextline:\v!margin}% \kern\rightmargindistance \page_layouts_place_element_indeed\rightmarginwidth {\hbox to \rightmarginwidth{\layoutelementparameter#parameter\hss}% \ifnum#extrastate=\page_layouts_extra_at_margin_right \kern-\rightmarginwidth \hbox to \rightmarginwidth{\layoutelementparameter\c!margintext\hss}% \fi}} \def\page_layouts_right_edge_element#parameter% {\edef\currentlayoutelement{\currentlayouttextline:\v!edge}% \kern\rightedgedistance \page_layouts_place_element_indeed\rightedgewidth {\layoutelementparameter#parameter\hss}} \def\page_layouts_place_element_indeed#width#content% {\vbox % to \vsize {\hsize#width\relax \layoutelementparameter\c!before \setlayoutcomponentattribute\currentlayoutelement \hbox \layoutcomponentboxattribute to #width{#content}% \layoutelementparameter\c!after}} %D Although it is far better to use backgrounds for this %D purpose, one can add a rule in the following way. This %D method makes the rules disappear in case of an empty text %D line. Consider this a feature. %D %D \starttyping %D \setupheadertexts[left][right] %D %D \setupheader[text][after=\hrule,style=bold] %D %D \starttext %D \input tufte \page %D \setupheader[state=empty] %D \input tufte \page %D \stoptext %D \stoptyping %D This code will move to \type {page-flt.tex}. \appendtoks \placerightmarginblock \kern-\rightmarginwidth \to \rightmargintextcontent \appendtoks \placeleftmarginblock \kern-\leftmarginwidth \to \leftmargintextcontent %D \macros %D {definetext} %D %D Some macros ago, we implemented the \type {status} option %D \type {unknown}. This one is used to take care of %D symbolic texts handlers. %D %D \showsetup{definetext} %D %D The next example demonstrates how we can use this %D mechanism to provide page (event) dependent text lines. %D %D \starttyping %D \definetext[chapter][footer][pagenumber] %D \setuphead[chapter][header=high,footer=chapter] %D \setupheadertexts[pagenumber] %D \setupfootertexts[left][right] %D \chapter{eerste} \dorecurse{20}{\input tufte \relax} %D \chapter{tweede} \dorecurse{20}{\input tufte \relax} %D \stoptyping \unexpanded\def\definetext {\doseventupleempty\page_layouts_define_text} \def\page_layouts_define_text[#tag][#vertical][#horizontal][#a][#b][#c][#d]% {\ifseventhargument \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c][#d]}% \else\ifsixthargument \setvalue{\namedlayoutelementhash{#vertical}#tag}% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c]}% \else\iffifthargument \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b]}% \else\iffourthargument \setvalue{\namedlayoutelementhash{#vertical}#tag}% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a]}% \else \setvalue{\namedlayoutelementhash{#vertical}#tag}% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal]}% \fi\fi\fi\fi} %D A few more page breakers: \installpagebreakmethod \v!empty {\page_otr_flush_all_floats \page_otr_command_next_page \doifnot{\namedlayoutelementparameter\v!header\c!state}\v!stop{\setuplayoutelement[\v!header][\c!state=\v!empty]}% \doifnot{\namedlayoutelementparameter\v!footer\c!state}\v!stop{\setuplayoutelement[\v!footer][\c!state=\v!empty]}% \page_otr_insert_dummy_page} \installpagebreakmethod \v!header {\doifnot{\namedlayoutelementparameter\v!header\c!state}\v!stop{\setuplayoutelement[\v!header][\c!state=\v!empty]}} \installpagebreakmethod \v!footer {\doifnot{\namedlayoutelementparameter\v!footer\c!state}\v!stop{\setuplayoutelement[\v!footer][\c!state=\v!empty]}} %D While the header and footer lines are moved away from the %D main text, the top and bottom lines are centered. \setuplayoutelement[\v!top ][\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=] \setuplayoutelement[\v!header][\c!state=\v!normal,\c!n=0,\c!before=, \c!after=\vss,\c!strut=\v!yes] \setuplayoutelement[\v!text ][\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=] \setuplayoutelement[\v!footer][\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=, \c!strut=\v!yes] \setuplayoutelement[\v!bottom][\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=] %D Moved here from strc-pag: % We reset a previous location but only when it has a pagenumber % associated. This is a rather messy test but better than the MkII % way where we use states and keep settings. \let\m_page_layouts_page_number_location \relax \let\m_page_layouts_page_number_location_v\relax \let\m_page_layouts_page_number_location_h\relax \let\m_page_layouts_page_number_location_x\relax \def\page_layouts_place_page_number % also elsewhere .. beware, not \unexpanded else {\strc_pagenumbers_place_location} % test below fails \def\page_layouts_reset_page_number_location {\ifx\m_page_layouts_page_number_location_v\relax\else \edef\currentlayoutelement{\m_page_layouts_page_number_location_v:\m_page_layouts_page_number_location_h}% \edef\page_layouts_previous_page_number_locator{\detokenizedlayoutelementparameter\m_page_layouts_page_number_location_x}% \doif{\meaning\page_layouts_previous_page_number_locator}{\meaning\page_layouts_place_page_number} {\resetlayoutelementparameter\m_page_layouts_page_number_location_x}% \fi} \def\page_layouts_set_page_number_location {\edef\currentlayoutelement{\m_page_layouts_page_number_location_v:\m_page_layouts_page_number_location_h}% \letlayoutelementparameter\m_page_layouts_page_number_location_x\page_layouts_place_page_number \ifx\m_page_layouts_page_number_location_x\c!marginedgetext \let\page_layouts_place_extra_text_left \page_layouts_place_page_number_left \let\page_layouts_place_extra_text_right\page_layouts_place_page_number_right \else \let\page_layouts_place_extra_text_left \relax \let\page_layouts_place_extra_text_right\relax \fi} \def\page_layouts_identify_page_number_location {\let\m_page_layouts_page_number_location_v\v!footer \let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!middletext \processallactionsinset[\directpagenumberingparameter\c!location] [ \v!header=>\let\m_page_layouts_page_number_location_v\v!header, \v!footer=>\let\m_page_layouts_page_number_location_v\v!footer, \v!middle=>\let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!middletext, \v!left=>\let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!lefttext, \v!right=>\let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!righttext, \v!inleft=>\let\m_page_layouts_page_number_location_h\v!margin \let\m_page_layouts_page_number_location_x\c!lefttext, \v!inright=>\let\m_page_layouts_page_number_location_h\v!margin \let\m_page_layouts_page_number_location_x\c!righttext, \v!inmargin=>\let\m_page_layouts_page_number_location_h\v!margin \def\m_page_layouts_page_number_location_x{\ifdoublesided\c!margintext\else\c!righttext\fi}, \v!margin=>\let\m_page_layouts_page_number_location_h\v!margin \def\m_page_layouts_page_number_location_x{\ifdoublesided\c!margintext\else\c!righttext\fi}, \v!atmargin=>\let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!marginedgetext, \v!marginedge=>\let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!marginedgetext]} \unexpanded\def\strc_pagenumbers_set_location {\edef\p_strc_pagenumbers_location{\directpagenumberingparameter\c!location}% \ifx\p_strc_pagenumbers_location\m_page_layouts_page_number_location % unchanged \else \let\m_page_layouts_page_number_location\p_strc_pagenumbers_location \page_layouts_reset_page_number_location \ifx\p_strc_pagenumbers_location\empty % set otherwise \else \page_layouts_identify_page_number_location \page_layouts_set_page_number_location \fi \fi} \def\page_layouts_place_page_number_left % historic {\begingroup \setbox\scratchbox\hbox{\ignorespaces\layoutelementparameter\c!marginedgetext\removeunwantedspaces}% \ifzeropt\wd\scratchbox\else \edef\p_strc_pagenumbers_width{\directpagenumberingparameter\c!width}% \ifx\p_strc_pagenumbers_width\empty \box\scratchbox\tfskip \else \hbox to \p_strc_pagenumbers_width{\box\scratchbox\hss}% \fi \fi \endgroup} \def\page_layouts_place_page_number_right % historic {\begingroup \setbox\scratchbox\hbox{\ignorespaces\layoutelementparameter\c!marginedgetext\removeunwantedspaces}% \ifzeropt\wd\scratchbox\else \edef\p_strc_pagenumbers_width{\directpagenumberingparameter\c!width}% \ifx\p_strc_pagenumbers_width\empty \tfskip\box\scratchbox \else \hbox to \p_strc_pagenumbers_width{\hss\box\scratchbox}% \fi \fi \endgroup} \strc_pagenumbers_set_location % initializes % will go to page-box.mkiv % the next macros will be redone (less boxing) \newbox\b_page_layouts_element \def\page_layouts_insert_elements {\ifcase\pageornamentstate \page_layouts_place_elements_indeed \fi} \def\page_layouts_place_elements_indeed {\setbox\b_page_layouts_element\vbox {\dontcomplain \calculatereducedvsizes \swapmargins \offinterlineskip \vskip\dimexpr-\topheight-\topdistance\relax \the\toptextcontent \vskip\dimexpr\topheight+\topdistance\relax \the\headertextcontent \vskip\dimexpr\headerheight+\headerdistance\relax \anch_positions_place_anchors \vskip-\textheight \the\texttextcontent \vskip\textheight \the\everyendoftextbody \vskip\footerdistance \the\footertextcontent \vskip\dimexpr\footerheight+\bottomdistance\relax \the\bottomtextcontent \vskip\bottomheight \vfilll}% \smashbox\b_page_layouts_element \box\b_page_layouts_element} \def\page_insert_body#1#2% {\setbox\b_page_layouts_element\vbox {\offinterlineskip \calculatereducedvsizes \calculatehsizes \swapmargins \vskip\dimexpr\headerheight+\headerdistance+\layoutparameter\c!textdistance\relax \dontleavehmode \hbox to \makeupwidth {\begingroup \swapmargins \goleftonpage \ifdim\leftedgewidth>\zeropoint \the\leftedgetextcontent \kern\dimexpr\leftedgewidth+\leftedgedistance\relax \fi \ifdim\leftmarginwidth>\zeropoint \the\leftmargintextcontent \kern\dimexpr\leftmarginwidth+\leftmargindistance\relax \fi \endgroup \page_postprocessors_page{#2}% \settextpagecontent\b_page_layouts_element{#1}{#2}% \page_backgrounds_add_to_text\b_page_layouts_element \page_grids_add_to_box\b_page_layouts_element \box\b_page_layouts_element \begingroup \ifdim\rightmarginwidth>\zeropoint \kern\rightmargindistance \the\rightmargintextcontent \kern\rightmarginwidth \fi \ifdim\rightedgewidth>\zeropoint \kern\rightedgedistance \the\rightedgetextcontent \kern\rightedgewidth \fi \endgroup \hss}}% \smashbox\b_page_layouts_element \box\b_page_layouts_element} %D The main text area has to be combined with some additional %D (tracing) information. % will be stored as normal and overloaded in page-lyr and later in % page-spr we overload the the stored version .. evenatually i will % clear up the experimental mess \def\settextpagecontent#1#2#3% #2 and #3 will disappear {\setbox#1\hbox to \makeupwidth {\hss % so don't change this \setlayoutcomponentattribute{\v!page:\v!text}% \vbox \layoutcomponentboxattribute to \textheight {\offinterlineskip \freezetextwidth \hsize\textwidth % local variant of \sethsize <<< in columns? \boxmaxdepth\maxdepth \noindent % content can be < \hsize \dopagecontents#2#3}% \hss}% \dp#1\zeropoint} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-box.mkiv0000644000175000017500000010246612130411274024271 0ustar norbertnorbert%D \module %D [ file=pack-box, %D version=2002.04.12, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Boxes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Boxes} %D This module contains all kind of macros for moving content around. Many %D macros here come from other modules, but depencies made it more clear %D to isolate them. We invite users to document the macros. They can be %D handy shortcuts for otherwise complex tasks. \unprotect %D We need to set the size, else we get dimensions depending on the content, %D which in itself is ok, but can lead to loops due to rounding errors (happened %D in demo-obv). \definelayer[\v!text-2][\c!position=\v!yes,\c!region=,\c!width=\overlaywidth,\c!height=\overlayheight] \definelayer[\v!text-1][\c!position=\v!yes,\c!region=,\c!width=\overlaywidth,\c!height=\overlayheight] \definelayer[\v!text+1][\c!position=\v!yes,\c!region=,\c!width=\overlaywidth,\c!height=\overlayheight] \definelayer[\v!text+2][\c!position=\v!yes,\c!region=,\c!width=\overlaywidth,\c!height=\overlayheight] \unexpanded\def\internaltextoverlay#1% will become more generic and installable {\startoverlay % i.e. probably an overlay by itself {\positionregionoverlay\textanchor{\v!text#1}}% see later {\composedlayer {\v!text#1}}% \stopoverlay} \defineoverlay[\v!text-2][\internaltextoverlay{-2}] \defineoverlay[\v!text-1][\internaltextoverlay{-1}] \defineoverlay[\v!text+1][\internaltextoverlay{+1}] \defineoverlay[\v!text+2][\internaltextoverlay{+2}] \installcorenamespace {anchor} \unexpanded\def\defineanchor {\doquadrupleempty\pack_anchors_define} \def\pack_anchors_define[#1][#2][#3][#4]% name targetlayer layersetting framedsetting {\setvalue{\??anchor#1}{\pack_anchors_process_defined{#2}{#3}{#4}}} \def\pack_anchors_process_defined#1#2#3% {\def\pack_anchors_process_defined_indeed[##1][##2]% {\ifsecondargument \def\next{\pack_anchors_process_indeed{#1}{#2,##1}{#3,##2}}% \else\iffirstargument \def\next{\pack_anchors_process_indeed{#1}{#2,##1}{#2,##1}}% \else \def\next{\pack_anchors_process_indeed{#1}{#2}{#3}}% \fi\fi \next}% \dodoubleempty\pack_anchors_process_defined_indeed} \unexpanded\def\anchor[#1]% {\begingroup \edef\currentanchor{#1}% \ifcsname\??anchor\currentanchor\endcsname \expandafter\pack_anchor_predefined \else \expandafter\pack_anchor_notdefined \fi} \def\pack_anchor_predefined {\csname\??anchor\currentanchor\endcsname} \def\pack_anchor_notdefined {\dodoubleempty\pack_anchor_notdefined_indeed} \def\pack_anchor_notdefined_indeed {\ifsecondargument \expandafter\pack_anchor_notdefined_two \else \expandafter\pack_anchor_notdefined_one \fi} \def\pack_anchor_notdefined_one[#1][#2]{\pack_anchors_process_indeed\currentanchor{#1}{#1}} \def\pack_anchor_notdefined_two[#1][#2]{\pack_anchors_process_indeed\currentanchor{#1}{#2}} \def\pack_anchors_process_indeed#1#2#3% {\dowithnextbox{\pack_anchors_process_finish{#1}{#2}{#3}}\vbox} \newbox \b_pack_anchors \newdimen\d_pack_anchors_width \newdimen\d_pack_anchors_height \newdimen\d_pack_anchors_depth \definelayer[anchor] % \defineoverlay[anchor][\ruledhbox{\flushlayer[anchor]}] \def\pack_anchors_process_finish#1#2#3% brrr: we need to apply offset only once .. a bit messy {\checkpositionoverlays % for the moment we ignore the depth \setbox\b_pack_anchors\box\nextbox \d_pack_anchors_width \wd\b_pack_anchors \d_pack_anchors_height\ht\b_pack_anchors \d_pack_anchors_depth \dp\b_pack_anchors \setbox\scratchbox\emptyhbox \wd\scratchbox\d_pack_anchors_width \ht\scratchbox\d_pack_anchors_height \dp\scratchbox\d_pack_anchors_depth \setlayer [anchor] [\c!width=\d_pack_anchors_width, \c!height=\d_pack_anchors_height, \c!offset=\zeropoint, #2,#3] {\setlayer[#1]{\box\b_pack_anchors}}% % #1 uses ovelaywidth/height \framed % could be a predefined framed [\c!background=anchor, \c!offset=\v!overlay, \c!frame=\v!off, #3] {\box\scratchbox}% \endgroup} % collectors \installcorenamespace{collectorbox} \installcorenamespace{collector} \installcommandhandler \??collector {collector} \??collector \setupcollector [\c!state=\v!start, \c!x=\zeropoint, \c!y=\zeropoint, \c!offset=\zeropoint, \c!rotation=, % geen 0 ! \c!hoffset=\zeropoint, \c!voffset=\zeropoint, \c!location=rb, \c!corner=] \appendtoks \ifcsname\??collectorbox\currentcollector\endcsname \else \expandafter\newbox\csname\??collectorbox\currentcollector\endcsname \fi \to \everydefinecollector \unexpanded\def\resetcollector[#1]% {\ifcsname\??collectorbox#1\endcsname \global\setbox\csname\??collectorbox#1\endcsname\emptybox \fi} \newconditional\c_pack_boxes_collector_valid_box \let\b_pack_boxes_collector\scratchbox \def\pack_boxes_collector_check_box#1% {\edef\currentcollector{#1}% \ifcsname\??collectorbox\currentcollector\endcsname \settrue\c_pack_boxes_collector_valid_box \expandafter\let\expandafter\b_pack_boxes_collector\csname\??collectorbox\currentcollector\endcsname \else \setfalse\c_pack_boxes_collector_valid_box \writestatus{collector}{unknown collector \currentcollector}% \fi} \unexpanded\def\setcollector {\bgroup \dodoubleargument\pack_boxes_collector} \def\pack_boxes_collector[#1][#2]% todo: keep reference point {\pack_boxes_collector_check_box{#1}% \ifconditional\c_pack_boxes_collector_valid_box \setupcurrentcollector[#2]% \expandafter\pack_boxes_collector_yes \else \expandafter\pack_boxes_collector_nop \fi} \def\pack_boxes_collector_yes {\forgetall \dontcomplain \dowithnextboxcs\pack_boxes_collector_finish\hbox} \def\pack_boxes_collector_nop {\egroup} \installcorenamespace{collectorcorners} \setvalue{\??collectorcorners\v!middle}% {\ifdim\d_pack_layers_x_size>\zeropoint \advance\d_pack_layers_x_position.5\d_pack_layers_x_size \fi \ifdim\d_pack_layers_y_size>\zeropoint \advance\d_pack_layers_y_position.5\d_pack_layers_y_size \fi} \setvalue{\??collectorcorners\v!bottom}% {\ifdim\d_pack_layers_y_size>\zeropoint \advance\d_pack_layers_y_position-\d_pack_layers_y_size \d_pack_layers_y_position-\d_pack_layers_y_position \fi} \setvalue{\??collectorcorners\v!right}% {\ifdim\d_pack_layers_x_size>\zeropoint \advance\d_pack_layers_x_position-\d_pack_layers_x_size \d_pack_layers_x_position-\d_pack_layers_x_position \fi} \def\pack_boxes_collector_check_corner#1% {\ifcsname\??collectorcorners#1\endcsname \csname\??collectorcorners#1\endcsname \fi} \def\pack_boxes_collector_finish {\edef\p_collector_rotation{\collectorparameter\c!rotation}% \edef\p_collector_corner {\collectorparameter\c!corner}% \ifx\p_collector_rotation\empty \else \setbox\nextbox\hbox {\rotate [\c!location=\v!high, \c!rotation=\p_collector_rotation] {\box\nextbox}}% \fi \d_pack_layers_x_size\wd\b_pack_boxes_collector \d_pack_layers_y_size\htdp\b_pack_boxes_collector \d_pack_layers_x_position\dimexpr\collectorparameter\c!x+\collectorparameter\c!hoffset\relax \d_pack_layers_y_position\dimexpr\collectorparameter\c!y+\collectorparameter\c!voffset\relax \rawprocesscommacommand[\p_collector_corner]\pack_boxes_collector_check_corner \setbox\nextbox\hbox {\alignedbox[\collectorparameter\c!location]\vbox{\box\nextbox}}% \boxmaxdepth\zeropoint % really needed, nice example \global\advance\boxhdisplacement\d_pack_layers_x_position \ifdim\boxhdisplacement<\zeropoint \global\setbox\b_pack_boxes_collector\hbox {\kern-\boxhdisplacement \box\b_pack_boxes_collector}% \fi \global\advance\boxvdisplacement\d_pack_layers_y_position \ifdim\boxvdisplacement<\zeropoint \global\setbox\b_pack_boxes_collector\hbox {\lower-\boxvdisplacement \box\b_pack_boxes_collector}% \fi \d_pack_layers_x_size\wd\b_pack_boxes_collector \d_pack_layers_y_size\htdp\b_pack_boxes_collector \global\setbox\b_pack_boxes_collector\hbox {\box\b_pack_boxes_collector \kern\dimexpr -\d_pack_layers_x_size +\d_pack_layers_x_position \ifdim\boxhdisplacement<\zeropoint -\boxhdisplacement \fi \relax \lower\d_pack_layers_y_position\hbox {\ifdim\boxvdisplacement<\zeropoint \lower-\boxvdisplacement \fi \box\nextbox}}% % combine height and depth into depth only (later flushed as height) \global\setbox\b_pack_boxes_collector\hbox {\lower\ht\b_pack_boxes_collector\box\b_pack_boxes_collector}% % just to be sure \ifdim\wd\b_pack_boxes_collector<\d_pack_layers_x_size \wd\b_pack_boxes_collector\d_pack_layers_x_size \fi \egroup} \unexpanded\def\flushcollector[#1]% {\bgroup \pack_boxes_collector_check_box{#1}% \ifconditional\c_pack_boxes_collector_valid_box \edef\p_collector_state{\collectorparameter\c!state}% \ifx\p_collector_state\v!stop \else \vbox{\hbox{\raise \dp\b_pack_boxes_collector \ifx\p_collector_state\v!repeat\copy\else\box\fi\b_pack_boxes_collector}}% \fi \fi \egroup} \unexpanded\def\composedcollector#1% no [], handy as argument {\flushcollector[#1]} \unexpanded\def\adaptcollector {\dodoubleargument\pack_boxes_collector_adapt} \def\pack_boxes_collector_adapt[#1][#2]% % a typical case where \global\wd looks better in the code {\begingroup \pack_boxes_collector_check_box{#1}% \ifconditional\c_pack_boxes_collector_valid_box \letcollectorparameter\c!voffset\zeropoint \letcollectorparameter\h!voffset\zeropoint \ifsecondargument \setupcurrentcollector[#2]% \fi \global\wd\b_pack_boxes_collector\dimexpr\wd\b_pack_boxes_collector+\collectorparameter\c!hoffset\relax \global\ht\b_pack_boxes_collector\dimexpr\ht\b_pack_boxes_collector+\collectorparameter\c!voffset\relax \fi \endgroup} %\definecollector[test] %\setcollector[test] % [location=rb] % {\externalfigure[koe][frame=on,width=3cm]} %\setcollector[test] % [corner={right,bottom},location={left,top}] % {\framed{gans}} %\composedcollector{test} \definecollector [caption] \unexpanded\def\collectedtext % for captions {\bgroup \dodoubleempty\pack_boxes_collector_text} \def\pack_boxes_collector_text[#1][#2]#3% {\dowithnextbox {\setcollector [caption] {\box\nextbox}% \setcollector [caption][#1] {\letdummyparameter\c!style\empty \letdummyparameter\c!color\empty \getdummyparameters[#2]% \dousestyleparameter{\directdummyparameter\c!style}% \setupinterlinespace \normalexpanded{\framed[\c!foregroundcolor=\directdummyparameter\c!color,\c!foregroundstyle=\directdummyparameter\c!style},\c!frame=\v!overlay,#2]{#3}}% \composedcollector{caption}% \egroup}% \hbox} % \collectedtext % [corner={right,bottom},location={left,top}] % [background=color,backgroundcolor=white,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \collectedtext % [rotation=90,corner={right,bottom},location={right,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \collectedtext % [rotation=90,corner={left,bottom},location={left,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} \installcorenamespace {layeredtext} \installcorenamespace {layeredtextlayer} \installcorenamespace {layeredtextframed} \installsimpleframedcommandhandler \??layeredtext {layeredtext} \??layeredtext \newdimen\d_pack_layeredtexts_width \newdimen\d_pack_layeredtexts_height \definelayer % private [\??layeredtextlayer] \setuplayer % private [\??layeredtextlayer] [\c!width=\d_pack_layeredtexts_width, \c!height=\d_pack_layeredtexts_height] \defineframed % private [\??layeredtextframed] [\c!offset=\v!overlay, \c!frame=\v!off, \c!background={\v!foreground,\??layeredtextlayer}, \c!width=\d_pack_layeredtexts_width, \c!height=\d_pack_layeredtexts_height] \setuplayeredtext % public (the attached data, usually small stuff, not the main thing) [\c!frame=\v!overlay, \c!color=, \c!style=, \c!foregroundcolor=\layeredtextparameter\c!color, \c!foregroundstyle=\layeredtextparameter\c!style] \unexpanded\def\layeredtext {\bgroup \let\currentlayeredtext\empty \dodoubleempty\pack_layeredtexts_place} \unexpanded\def\placelayeredtext[#1]% {\bgroup \edef\currentlayeredtext{#1}% \dodoubleempty\pack_layeredtexts_place} \def\pack_layeredtexts_place[#1][#2]#3% layersettings content(framed)settings content {\setupcurrentlayeredtext[#2]% \dowithnextbox {\d_pack_layeredtexts_width \wd\nextbox \d_pack_layeredtexts_height\ht\nextbox \begingroup % preserve \nextbox \setlayer [\??layeredtextlayer]% [#1]% {\setfalse\fontattributeisset \uselayeredtextstyleparameter\c!style \ifconditional\fontattributeisset \setupinterlinespace \fi \inheritedlayeredtextframed{#3}}% \endgroup \placeframed[\??layeredtextframed]{\flushnextbox}% \egroup}% \hbox} % \layeredtext % [corner={right,bottom},location={left,top}] % [background=color,backgroundcolor=white,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \layeredtext % [rotation=90,corner={right,bottom},location={right,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} % % \layeredtext % [rotation=90,corner={left,bottom},location={left,top}] % [frame=on,offset=0pt] % {gans} % {\externalfigure[koe][width=3cm]} \unexpanded\def\ornamenttext {\dodoubleempty\pack_ornament_text} \def\pack_ornament_text[#1][#2]% {\bgroup \doifassignmentelse{#1} {\letdummyparameter\c!alternative\v!a \getdummyparameters[#1]% \doifelse{\directdummyparameter\c!alternative}\v!a {\egroup\collectedtext}% {\egroup\layeredtext }% [#1][#2]}% {\egroup\getvalue{#1}}} \unexpanded\def\defineornament {\dotripleempty\dodefineornament} \def\dodefineornament[#1][#2][#3]% {\setuvalue{#1}{\pack_ornament_text[#2][#3]}} % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={right,top}, % hoffset=-.25ex] % [frame=on,background=color,backgroundcolor=red,offset=0pt] % % \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}} % % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={right,top}, % hoffset=-.25ex,alternative=b] % [frame=on,background=color,backgroundcolor=red,offset=0pt] % % \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}} % % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={left,top}, % hoffset=.25ex,voffset=.25ex,alternative=a] % [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] % % \affiliation{photo}{\externalfigure[molen][width=3cm]} % % \defineornament % [affiliation] % [rotation=90,corner={right,bottom},location={left,top}, % hoffset=.25ex,voffset=.25ex,alternative=b] % [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] % % \affiliation{drawing}{\externalfigure[hakker][width=3cm]} \newcount\c_pack_boxes_bleeds \installcorenamespace {bleeding} \installdirectcommandhandler \??bleeding {bleeding} % \??bleeding \setupbleeding [\c!location=l, \c!stretch=\v!yes, \c!width=3cm, \c!height=3cm, \c!offset=2mm, \c!page=\v!no, \c!voffset=\scratchoffset, % is set to \bleedingparameter\c!offset \c!hoffset=\scratchoffset] % which often saves one resolve \def\bleedwidth {\the\hsize} % these are global ! \def\bleedheight{\the\vsize} % these are global ! \newconditional\c_pack_boxes_l \newconditional\c_pack_boxes_r \newconditional\c_pack_boxes_t \newconditional\c_pack_boxes_b \unexpanded\def\bleed {\hbox\bgroup \dosingleempty\pack_boxes_bleed} \installcorenamespace{bleedinglocation} \setvalue{\??bleedinglocation t}{\settrue\c_pack_boxes_t\scratchhoffset\zeropoint} \setvalue{\??bleedinglocation b}{\settrue\c_pack_boxes_b\scratchhoffset\zeropoint} \setvalue{\??bleedinglocation l}{\settrue\c_pack_boxes_l\scratchvoffset\zeropoint} \setvalue{\??bleedinglocation r}{\settrue\c_pack_boxes_r\scratchvoffset\zeropoint} \setvalue{\??bleedinglocation bl}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} \setvalue{\??bleedinglocation lb}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} \setvalue{\??bleedinglocation br}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} \setvalue{\??bleedinglocation rb}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} \setvalue{\??bleedinglocation tl}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} \setvalue{\??bleedinglocation lt}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} \setvalue{\??bleedinglocation tr}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} \setvalue{\??bleedinglocation rt}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} \def\pack_boxes_bleed[#1]% {\global\advance\c_pack_boxes_bleeds\plusone % \xdef\bleedwidth {\the\hsize}% \xdef\bleedheight{\the\vsize}% % \edef\currentbgposition {bleed:\number\c_pack_boxes_bleeds}% \edef\currentpageposition{page:0}% todo: per page % \setupcurrentbleeding[#1]% % \scratchwidth \bleedingparameter\c!width \scratchheight \bleedingparameter\c!height \scratchoffset \bleedingparameter\c!offset \scratchhoffset\bleedingparameter\c!hoffset \scratchvoffset\bleedingparameter\c!voffset % \setfalse\c_pack_boxes_l % left \setfalse\c_pack_boxes_r % right \setfalse\c_pack_boxes_t % top \setfalse\c_pack_boxes_b % bottom % \csname\??bleedinglocation\bleedingparameter\c!location\endcsname % \doifelse{\bleedingparameter\c!stretch}\v!yes\donetrue\donefalse % \xdef\bleedwidth{\dimexpr \ifdone \ifconditional\c_pack_boxes_l \scratchwidth+\MPx\currentbgposition-\MPx\currentpageposition \else\ifconditional\c_pack_boxes_r \paperwidth -\MPx\currentbgposition+\MPx\currentpageposition % not checked \else \scratchwidth \fi\fi \else \scratchwidth \fi+\scratchhoffset}% \xdef\bleedheight{\dimexpr \ifdone \ifconditional\c_pack_boxes_t \paperheight -\MPy\currentbgposition+\MPy\currentpageposition % not checked \else\ifconditional\c_pack_boxes_b \scratchheight+\MPy\currentbgposition-\MPy\currentpageposition % not checked \else \scratchheight \fi\fi \else \scratchheight \fi+\scratchvoffset}% \dowithnextboxcontentcs\pack_boxes_bleed_settings\pack_boxes_bleed_finish\hbox} \def\pack_boxes_bleed_settings {\hsize\bleedwidth \vsize\bleedheight} \def\pack_boxes_bleed_finish {\doif{\bleedingparameter\c!page}\v!yes {\setbox\nextbox\topskippedbox{\box\nextbox}}% \setbox\nextbox\hbox to \scratchwidth {\ifconditional\c_pack_boxes_l\hss\fi \box\nextbox \ifconditional\c_pack_boxes_r\hss\fi}% \ifconditional\c_pack_boxes_b \setbox\nextbox\hbox {\lower\bleedheight\hbox{\raise\scratchheight\box\nextbox}}% \fi \wd\nextbox\scratchwidth \ht\nextbox\scratchheight \dp\nextbox\zeropoint \ifdone \hpos\currentbgposition{\box\nextbox}% \else \box\nextbox \fi \egroup} \defineexternalfigure [bleed] % should be \v!bleed [\c!width=\bleedwidth, \c!height=\bleedheight] % \placefigure[left]{none} % {\bleed[width=5cm,height=3cm,location=lt]{\externalfigure[koe][bleed]}} % % \input tufte % % \placefigure[left]{none} % {\bleed[width=5cm,height=3cm,location=l]{\externalfigure[koe][bleed]}} % % \input tufte % % \placefigure[right]{none} % {\bleed[width=5cm,height=3cm,location=r]{\externalfigure[koe][bleed]}} % % \input tufte % % \placefigure % [top,none] % {} % no caption % {\bleed % [hoffset=-\backspace, % voffset=3mm, % width=0cm, % height=6\lineheight, % page=yes, % correct for topskip % location=lt] % {\externalfigure[koe][bleed][frame=on]}} % \setlayerframed[layer id][layer settings][framed setting]{data} % \setlayerframed[layer id][combined settings]{data} % tricky: offsets apply to both the layer and the framed; it makes sense to % only apply the offset to ... \unexpanded\def\setlayerframed {\dotripleempty\pack_layers_set_framed} \def\pack_layers_set_framed {\ifthirdargument \singleexpandafter\pack_layers_set_framed_t \else\ifsecondargument \doubleexpandafter\pack_layers_set_framed_d \else \doubleexpandafter\pack_layers_set_framed_s \fi\fi} \def\pack_layers_set_framed_s[#1][#2][#3]% {\setlayer[#1][\c!width=\wd\nextbox,\c!height=\ht\nextbox,\c!offset=\zeropoint]% \normalframedwithsettings[\c!location=\v!normal]} % diffrent kind of location \def\pack_layers_set_framed_d[#1][#2][#3]% {\setlayer[#1][\c!width=\wd\nextbox,\c!height=\ht\nextbox,#2,\c!offset=\zeropoint]% \normalframedwithsettings[\c!location=\v!normal,#2]} % diffrent kind of location \def\pack_layers_set_framed_t[#1][#2][#3]% {\setlayer[#1][#2]% \normalframedwithsettings[#3]} \unexpanded\def\setlayertext {\dotripleempty\pack_layers_set_text} \def\pack_layers_set_text[#1][#2][#3]% {\bgroup \letdummyparameter\c!align\empty \letdummyparameter\c!width\hsize \letdummyparameter\c!color\empty \letdummyparameter\c!style\empty \getdummyparameters[#3]% \dowithnextboxcontent {\forgetall \hsize\directdummyparameter\c!width \normalexpanded{\setupalign[\directdummyparameter\c!align]}% \dousestyleparameter{\directdummyparameter\c!style}} {\setlayer[#1][#2]{\strut\dousecolorparameter{\directdummyparameter\c!color}\flushnextbox}% maybe expand the color \egroup}% \vtop} % \setupbackgrounds % [page] % [background=pagefigures] % % \definelayer % [pagefigures] % [x=-2mm, % y=-2mm, % width=\paperwidth, % height=\paperheight] % % \definelayerpreset [lefttop] [corner={left,top},location={right,bottom}] % \definelayerpreset [righttop] [corner={right,top},location={left,bottom}] % \definelayerpreset [leftbottom] [corner={left,bottom},location={right,top}] % \definelayerpreset [rightbottom] [corner={right,bottom},location={left,top}] % \definelayerpreset [middle] [corner=middle,location=middle] % % \setlayer[pagefigures][preset=lefttop] % \setlayer[pagefigures][preset=righttop] % \setlayer[pagefigures][preset=leftbottom] % \setlayer[pagefigures][preset=rightbottom] \definelayerpreset [\v!left\v!top] [\c!corner={\v!left,\v!top},\c!location={\v!right,\v!bottom}] \definelayerpreset [\v!right\v!top] [\c!corner={\v!right,\v!top},\c!location={\v!left,\v!bottom}] \definelayerpreset [\v!left\v!bottom] [\c!corner={\v!left,\v!bottom},\c!location={\v!right,\v!top}] \definelayerpreset [\v!right\v!bottom] [\c!corner={\v!right,\v!bottom},\c!location={\v!left,\v!top}] \definelayerpreset [\v!middle] [\c!corner=\v!middle,\c!location=\v!middle] \definelayerpreset [\v!middle\v!top] [\c!location=\v!bottom,\c!corner=\v!top,\c!dx=.5\layerwidth] \definelayerpreset [\v!middle\v!bottom] [\c!location=\v!top,\c!corner=\v!bottom,\c!dx=.5\layerwidth] \definelayerpreset [\v!middle\v!left] [\c!location=\v!right,\c!corner=\v!left,\c!dy=.5\layerheight] \definelayerpreset [\v!middle\v!right] [\c!location=\v!left,\c!corner=\v!right,\c!dy=.5\layerheight] % left and right hanging: \definelayerpreset [\v!left\v!top\v!left] [\c!location={\v!left,\v!bottom},\c!corner={\v!left,\v!top}] \definelayerpreset [\v!right\v!top\v!right] [\c!location={\v!right,\v!bottom},\c!corner={\v!right,\v!top}] \installcorenamespace{alignedboxes} \unexpanded\def\alignedbox{\dosingleempty\pack_boxes_aligned_box} \unexpanded\def\aligned {\dosingleempty\pack_boxes_aligned} \def\pack_boxes_aligned_box[#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\pack_boxes_aligned_finish} \def\pack_boxes_aligned [#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\pack_boxes_aligned_finish\hbox} \def\pack_boxes_aligned_finish {\csname\??alignedboxes \ifcsname\??alignedboxes\serializedcommalist\endcsname\serializedcommalist\else\v!middle\fi \endcsname{\flushnextbox}% \egroup} \letvalue{\??alignedboxes }\middlebox \letvalue{\??alignedboxes\v!middle }\middlebox \letvalue{\??alignedboxes\v!middle\v!middle}\middlebox \letvalue{\??alignedboxes\v!left }\leftbox \letvalue{\??alignedboxes\v!left \v!top }\lefttopbox \letvalue{\??alignedboxes\v!left \v!bottom}\leftbottombox \letvalue{\??alignedboxes\v!right }\rightbox \letvalue{\??alignedboxes\v!right \v!top }\righttopbox \letvalue{\??alignedboxes\v!right \v!bottom}\rightbottombox \letvalue{\??alignedboxes\v!bottom }\bottombox \letvalue{\??alignedboxes\v!bottom\v!left }\bottomleftbox \letvalue{\??alignedboxes\v!bottom\v!right }\bottomrightbox \letvalue{\??alignedboxes\v!top }\topbox \letvalue{\??alignedboxes\v!top \v!left }\topleftbox \letvalue{\??alignedboxes\v!top \v!right }\toprightbox \letvalue{\??alignedboxes\v!line }\baselinemiddlebox % \v!grid is taken \letvalue{\??alignedboxes\v!line \v!left }\baselineleftbox \letvalue{\??alignedboxes\v!line \v!middle}\baselinemiddlebox \letvalue{\??alignedboxes\v!line \v!right }\baselinerightbox \letvalue{\??alignedboxes c}\middlebox \letvalue{\??alignedboxes l}\leftbox \letvalue{\??alignedboxes r}\rightbox \letvalue{\??alignedboxes b}\bottombox \letvalue{\??alignedboxes t}\topbox \letvalue{\??alignedboxes lt}\lefttopbox \letvalue{\??alignedboxes lb}\leftbottombox \letvalue{\??alignedboxes rt}\righttopbox \letvalue{\??alignedboxes rb}\rightbottombox \letvalue{\??alignedboxes tl}\topleftbox \letvalue{\??alignedboxes bl}\bottomleftbox \letvalue{\??alignedboxes tr}\toprightbox \letvalue{\??alignedboxes br}\bottomrightbox \letvalue{\??alignedboxes m}\middlebox \letvalue{\??alignedboxes g}\baselinemiddlebox \letvalue{\??alignedboxes gl}\baselineleftbox \letvalue{\??alignedboxes gc}\baselinemiddlebox \letvalue{\??alignedboxes gr}\baselinerightbox % left/right/top/bottomoffset -> dimensions change % x/y | method=fixed -> dimensions don't change \installcorenamespace{offsetbox} \installautocommandhandler \??offsetbox {offsetbox} \??offsetbox \setupoffsetbox [\c!x=\zeropoint, \c!y=\zeropoint, \c!width=\wd\nextbox, \c!height=\ht\nextbox, \c!depth=\dp\nextbox, \c!location=, \c!leftoffset=\zeropoint, \c!rightoffset=\zeropoint, \c!topoffset=\zeropoint, \c!bottomoffset=\zeropoint, \c!method=] \let\setupoffset\setupoffsetbox \unexpanded\def\offsetbox{\dosingleempty\pack_boxes_offset_box} \unexpanded\def\offset {\dosingleempty\pack_boxes_offset} \def\pack_boxes_offset_box[#1]% {\bgroup \pack_boxes_offset_check[#1]% \dowithnextboxcs\pack_boxes_offsetfinish} \def\pack_boxes_offset[#1]% {\bgroup \pack_boxes_offset_check[#1]% \dowithnextboxcs\pack_boxes_offsetfinish\hbox} \newcount\c_pack_boxes_offset_level \def\pack_boxes_offset_check {\advance\c_pack_boxes_offset_level\plusone \edef\currentoffsetbox{\the\c_pack_boxes_offset_level}% \checkoffsetboxparent \setupcurrentoffsetbox} \def\pack_boxes_offsetfinish {\donefalse \scratchxposition \offsetboxparameter\c!x \scratchyposition \offsetboxparameter\c!y \scratchleftoffset \offsetboxparameter\c!leftoffset \scratchrightoffset \offsetboxparameter\c!rightoffset \scratchtopoffset \offsetboxparameter\c!topoffset \scratchbottomoffset\offsetboxparameter\c!bottomoffset \relax % really needed \ifdim\scratchleftoffset =\zeropoint\else\donetrue\fi \ifdim\scratchrightoffset =\zeropoint\else\donetrue\fi \ifdim\scratchtopoffset =\zeropoint\else\donetrue\fi \ifdim\scratchbottomoffset=\zeropoint\else\donetrue\fi \ifdone \edef\p_method{\offsetboxparameter\c!method}% \ifx\p_method\v!fixed % new \ifdim\scratchleftoffset=\zeropoint \ifdim\scratchrightoffset=\zeropoint \else \scratchxposition-\scratchrightoffset \scratchrightoffset\zeropoint \fi \else \scratchxposition\scratchleftoffset \scratchleftoffset\zeropoint \fi \ifdim\scratchtopoffset=\zeropoint \ifdim\scratchbottomoffset=\zeropoint \else \scratchyposition-\scratchbottomoffset \scratchbottomoffset\zeropoint \fi \else \scratchyposition\scratchtopoffset \scratchtopoffset\zeropoint \fi \donefalse \fi \fi \ifdone \setbox\nextbox\vbox {\forgetall % already done \offinterlineskip \kern\scratchtopoffset \hbox {\kern\scratchleftoffset \box\nextbox \kern\scratchrightoffset}% \kern\scratchbottomoffset}% \ht\nextbox\htdp\nextbox \dp\nextbox\zeropoint \fi \scratchwidth \offsetboxparameter\c!width \scratchheight\offsetboxparameter\c!height \scratchdepth \offsetboxparameter\c!depth \edef\p_location{\offsetboxparameter\c!location}% \setbox\nextbox\hbox {\kern\scratchxposition \lower\scratchyposition\hbox {\ifx\p_location\empty \box\nextbox \else \alignedbox[\p_location]\hbox{\box\nextbox}% \fi}}% \wd\nextbox\scratchwidth \ht\nextbox\scratchheight \dp\nextbox\scratchdepth \box\nextbox \egroup} %D \starttyping %D \framed[offset=overlay]{\offset[leftoffset=1cm] %D {\framed[offset=overlay]{\offset[rightoffset=1cm] %D {\externalfigure[koe][width=1cm]}}}} %D %D \blank %D %D \framed[offset=overlay]{\offset[leftoffset=1cm] {\externalfigure[koe][width=5cm]}} \blank %D \framed[offset=overlay]{\offset[rightoffset=1cm] {\externalfigure[koe][width=5cm]}} \blank %D \framed[offset=overlay]{\offset[topoffset=1cm] {\externalfigure[koe][width=5cm]}} \blank %D \framed[offset=overlay]{\offset[bottomoffset=1cm]{\externalfigure[koe][width=5cm]}} \blank %D \stoptyping % \useMPlibrary[pre] \setupbackgrounds[page][background=pagegrid] % % \placefigure[left,none]{}{\offset[leftoffset=1cm] {\externalfigure[cow][width=3cm]}} \input tufte % \placefigure[left,none]{}{\offset[rightoffset=1cm] {\externalfigure[cow][width=3cm]}} \input tufte % \placefigure[left,none]{}{\offset[topoffset=1cm] {\externalfigure[cow][width=3cm]}} \input tufte % \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[cow][width=3cm]}} \input tufte % Some old code: % % \ltabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf % \ltabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf % \ltabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf % % \rtabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf % \rtabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf % \rtabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf % % \ctabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf % \ctabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf % \ctabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf \def\pack_boxes_tabbed#1#2#3#4% {\dontleavehmode \begingroup \setbox\scratchbox\hbox{#3}% \hbox to \wd\scratchbox{#1#4#2}% \endgroup} \unexpanded\def\ltabbed{\pack_boxes_tabbed\relax\hss} \unexpanded\def\rtabbed{\pack_boxes_tabbed\hss \relax} \unexpanded\def\ctabbed{\pack_boxes_tabbed\hss \hss} \let\mtabbed\ctabbed % to be documented \unexpanded\def\phantombox[#1]% == \framed[\c!empty=\v!yes,\c!offset=\v!overlay,#1]{} {\hbox\bgroup \letdummyparameter\c!width \zeropoint \letdummyparameter\c!height\zeropoint \letdummyparameter\c!depth \zeropoint \getdummyparameters[#1]% \setbox\scratchbox\emptyhbox \wd\scratchbox\directdummyparameter\c!width \ht\scratchbox\directdummyparameter\c!height \dp\scratchbox\directdummyparameter\c!depth \box\scratchbox \egroup} % \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]} \unexpanded\def\backgroundimage#1#2#3% repeat hsize vsize {\bgroup \forgetall \dowithnextbox{\pack_boxes_background_image{#1}{#2}{#3}}\hbox} \def\pack_boxes_background_image#1#2#3% {\offinterlineskip \ifcase#1\relax % just one \else \scratchdimen#2\divide\scratchdimen\wd\nextbox\scratchnx\scratchdimen\advance\scratchnx\plusone\relax \scratchdimen#3\divide\scratchdimen\ht\nextbox\scratchny\scratchdimen\advance\scratchny\plusone\relax % to be considered: methods \ifcase#1% \or % x and y \setbox\nextbox\hbox{\dorecurse\scratchnx{\copy\nextbox}}% \setbox\nextbox\vbox{\dorecurse\scratchny{\copy\nextbox\endgraf}}% \or % x \setbox\nextbox\hbox{\dorecurse\scratchnx{\copy\nextbox}}% \or % y \setbox\nextbox\vbox{\dorecurse\scratchny{\copy\nextbox\endgraf}}% \fi \fi \ifdim\wd\nextbox>#2\relax \setbox\nextbox\hbox to #2{\hss\box\nextbox\hss}% \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=#2,\c!height=\the\ht\nextbox]{\box\nextbox}}}% \fi \ifdim\ht\nextbox>#3\relax \setbox\nextbox\vbox to #3{\vss\box\nextbox\vss}% \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=#3]{\box\nextbox}}}% \fi \box\nextbox \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-16.tex0000644000175000017500000001066011754241457023702 0ustar norbertnorbert%D \module %D [ file=s-pre-16, %D version=1999.09.01, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 16, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The first version of this style was made late summer 1999, %D but its first usage was during a course I gave in BRNO. %D It's a rather simple style with a dominating background. \setuppapersize [S6][S6] \setupbodyfont [pos,14.4pt] \setuplayout [topspace=100pt, backspace=120pt, header=0pt, footer=0pt, width=middle, height=middle] \setupbackgrounds [text] [backgroundoffset=80pt, background=GoOn] \setupbackgrounds [page] [background={FuzzyCircle,Again}] \setupcolors [state=start] \definecolor[gray] [s=.4] \definecolor[white][s=.8] \definecolor[red] [r=.8] \definecolor[cyan] [g=.8,b=.8] \definecolor[green][g=.8] \definecolor[magenta][r=.8,b=.8] \definecolor[blue] [b=.8] \definecolor[yellow] [r=.8,g=.8] \definecolor[PageColor][gray] \definecolor[TextColor][yellow] \definecolor[LineColor][blue] \setupinteraction [state=start, color=LineColor, contrastcolor=LineColor] \setupinteractionscreen [option=max] \setupitemize [each] [color=blue, symbol=FuzzyDot] \startuseMPgraphic{FuzzyCircle} path p ; numeric w, h, l ; w := OverlayWidth ; h := OverlayHeight ; def dd = (1 randomized (1/5)) enddef ; pickup pencircle xscaled 10pt yscaled 2pt rotated 30; for i:=1 upto 50 : p := (-dd,-dd)..(dd,-dd)..(dd,dd)..(-dd,dd)..cycle ; p := p rotatedaround (center p, uniformdeviate 360) ; p := p xscaled (w/2) yscaled (h/2) ; l := length(p)/2 ; p := p cutbefore point (uniformdeviate l) of p ; p := p cutafter point (l+uniformdeviate l) of p ; draw p withcolor \MPcolor{LineColor} randomized (.4,1) ; endfor ; picture s ; s := currentpicture xysized (w-15,h-15) ; currentpicture := nullpicture ; fill boundingbox s enlarged 60pt withcolor \MPcolor{PageColor} ; addto currentpicture also s ; \stopuseMPgraphic \startuseMPgraphic{FuzzyDot} path p ; numeric w ; w := BodyFontSize/2 ; def dd = (w randomized (w/2)) enddef ; pickup pencircle xscaled (w/2) yscaled (w/3) rotated 30 ; for i=0 step 45 until 135 : p := (-dd,0)--(dd,0) ; p := p rotatedaround (origin,i-w+uniformdeviate w) ; draw p withcolor \MPcolor{LineColor} randomized (.3,.8) ; endfor ; \stopuseMPgraphic \defineoverlay [FuzzyCircle] [\useMPgraphic{FuzzyCircle}] \defineoverlay [GoOn] [{\setupinteraction[click=no]\overlaybutton{forward}}] \defineoverlay [Again] [\overlaybutton{firstpage}] \definesymbol [FuzzyDot] [\lower\dp\strutbox\hbox{\useMPgraphic{FuzzyDot}}] \def\Item% {\par\noindent\symbol[FuzzyDot]\hskip.5em\nobreak} \setupitemize [all] [packed] [symbol=FuzzyDot] \def\NextIdea% {\blank[back,medium] \midaligned{\symbol[FuzzyDot]} \blank[medium] \blank[disable]} \definehead [Topic] [chapter] \definehead [Nopic] [title] \setuphead [Topic, Nopic] [alternative=middle, before=, number=no, style=\bfb] \setuplist [Topic] [alternative=g, interaction=all] %D Since we want a colored text, and since color directive %D can spoil the spacing, we use a foregroundcolor. \setupbackgrounds [text] [foregroundcolor=TextColor] %D Unfortunately this does not work when on the page colors %D are set, so we play safe and say: \setupmakeup [standard] [color=TextColor] \def\StartIdea% {\startstandardmakeup \setupwhitespace[medium] \setupblank[medium] \setupalign[broad,middle]} \def\StopIdea% {\stopstandardmakeup} \def\Topics#1% {\Nopic{#1} \startcolumns \setupinteraction[color=TextColor,contrastcolor=TextColor] \placelist[Topic] \stopcolumns \page} %D Some fakes. \def\Subject {\Topic} \def\Subjects {} %D A bonus (copied from \type {s-pre-02} but with a different %D vertical alignment. \def\StartTitlePage% {\startstandardmakeup \bfd\setupinterlinespace \setupalign[middle] \vfil \let\\=\vfil} \def\StopTitlePage% {\vfil \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} \doifnotmode{demo}{\endinput} \starttext \Topics{...} \StartIdea \Topic{...} ... \NextIdea ... \StopIdea \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-postscript.mkiv0000644000175000017500000000167711754241457026562 0ustar norbertnorbert%D \module %D [ file=type-imp-postscript, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Basic Font Set, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \loadtypescriptfile[texgyre] \starttypescriptcollection[postscript] \starttypescript [postscript] \definetypeface [postscript] [\s!rm] [\s!serif] [times] [\s!default] \definetypeface [postscript] [\s!ss] [\s!sans] [helvetica] [\s!default] [\s!rscale=0.9] \definetypeface [postscript] [\s!tt] [\s!mono] [courier] [\s!default] [\s!rscale=1.1] \definetypeface [postscript] [\s!mm] [\s!math] [times] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-mathtimes.mkiv0000644000175000017500000000215211754241457026330 0ustar norbertnorbert%D \module %D [ file=type-imp-mathtimes, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Math Times, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \loadtypescriptfile[texgyre] \starttypescriptcollection[mathtimes] \starttypescript [\s!math] [mathtimes] [\s!all] \loadfontgoodies[mathtimes-math] \definefontsynonym[\s!MathRoman][mathtimes@mathtimes-math] \stoptypescript \starttypescript [mathtimes] \definetypeface [mathtimes] [\s!rm] [\s!serif] [times] [\s!default] \definetypeface [mathtimes] [\s!ss] [\s!sans] [helvetica] [\s!default] [\s!rscale=0.9] \definetypeface [mathtimes] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.05] \definetypeface [mathtimes] [\s!mm] [\s!math] [mathtimes] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/bibl-tra.mkii0000644000175000017500000017052011754241457024257 0ustar norbertnorbert%D \module %D [ file=bibl-tra, %D version=2009.08.13, %D title=\CONTEXT\ Publication Module, %D subtitle=Publications, %D author=Taco Hoekwater, %D date=\currentdate, %D copyright={Public Domain}] %C %C Donated to the public domain. %D This used to be module \type {t-bib} but due to the number of differences %D in handling structure between \MKII\ and \MKIV\ we now have \BIBTEX\ support %D in the kernel. The only patches concerns some namespace issues. Also, %D constants and variables are now predefined. When the \MKIV\ code is well %D tested I might backport a couple of adaptions to this \MKII\ variant. \writestatus{loading}{ConTeXt Bibliography Support / BibTeX} \definefilesynonym[bib][obsolete] % here starts t-bib.tex %D The original was developed independantly by Taco Hoekwater while still working for Kluwer %D Academic publishers (it still used the dutch interface then). Development continued after %D he left Kluwer, and in Januari 2005, the then already internationalized file was merged %D with the core distribution by Hans Hagen. The current version is once again by Taco. %D %D More documentation and additional resources can be found on the contextgarden: %D \hyphenatedurl{http://wiki.contextgarden.net//Bibliography}. %D \subject{DONE (dd/mm/yyyy)} %D %D \startitemize %D \item add author definition (and associated system variable) (26/05/2005) %D \item add finalnamesep support for Oxford comma (17/09/2005) %D \item add \type{\insert...} for: doi, eprint, howpublished (19/09/2005) %D \item allow a defaulted \type{\setupcite} (19/11/2005) %D \item renamed citation type 'number' to 'serial' (19/11/2005) %D \item better definition of \type{\inverted...author} (19/11/2005) %D \item don't reset [numbercommand] in \type {\setuppublication} by default (20/11/2005) %D \item don't disable other \type {\setuppublication} keys if alternative is present (20/11/2005) %D \item drop \type{\sanitizeaccents} (20/11/2005) %D \item added \type{\nocite} and \type{\cite[none]} (21/11/2005) %D \item added headtext for it (23/11/2005) %D \item make \type{\cite[url]} and \type{\cite[doi]} interactive (23/11/2005) %D \item make right-aligned labels in the list work even when autohang=no %D \item use 'et al.' instead of 'et.al.'. Pointed out by Peter M�nster (30/12/2005) %D \item added headtext for cz (31/12/2005) %D \item Keep whitespace after \type{\cite} with single argument (31/12/2005) %D \item Fix broken \type{\cite{}} support (31/12/2005) %D \item Use \type{\readfile} inside \type{\usepublications} instead of \type{\readsysfile} (12/01/2006) %D \item Use \type{\currentbibyear} and \type{\currentbibauthor} instead of \type{\YR} and \type{\AU} (05/02/2006) %D \item Fix compressed version of authoryear style (05/02/2006) %D \item Rename the clashing data fields \type{\url} and \type{\type} to \type{\biburl} and \type{\bibtype} (05/02/2006) %D \item Added two french bibl files from Renaud Aubin (06/02/2006) %D \item Five new bib class and eight extra bib fields, for IEEEtran (07/02/2006) %D \item French keyword translation, provided by Renaud (08/02/2006) %D \item fix underscores in undefined keys (22/02/2006) %D \item Destroy interactivity in labels of the publication list (13/03/2006) %D \item fix multi-cite list compression (11/4/2006) %D \item fix \type{\getcitedata} (11/4/2006) %D \item magic for chapter bibs (18-25/4/2006) %D \item language setting (25/4/2006) %D \item use \type{\hyphenatedurl} for \type{\inserturl} (25/4/2006) %D \item Add \type{\docitation} to \type{\nocite}(26/4/2006) %D \item patents can have numbers, added to bst files (26/4/2006) %D \item \type{\docitation} needs a \type{\iftrialtypesetting} (27/4/2006) %D \item \type{\filllocalpublist}'s loop is bound by definedness, not resolvedness (27/4/2006) %D \item \type{\setuppublications[monthconversion=]} added (15/5/2006) %D \item use \type{\undefinedreference} instead of bare question marks (15/5/2006) %D \item add grouping around \type{\placepublications} commands (16/5/2006) %D \item fix a bug in \type{\cite{}} (17/5/2006) %D \item support \type{\cite[authornum]} (18/5/2006) %D \item make \type{\cite} unexpandable (20/6/2006) %D \item allow hyperlinks in author\&year combo's %D (cite list compression has to be off) (20/6/2006) %D \item fix duplicate labels for per-chapter style (20/6/2006) %D \item allow \type{\setupcite[interaction=(start|stop)]} %D \item fix the item number in the publication list with 'numbering=yes' (22/6/2006) %D \item make the default criterium for \type{\placepublications} be \type{previous} (23/6/2006) %D \item fix \type{\normalauthor} and \type{\normalshortauthor} spacing (29/6/2006) %D \item do not typeset empty arguments to \type{\typesetapublication} (29/6/2006) %D \item add \type{symbol=none} to \type{\setuplist} in unnumbered %D mode to prevent typesetting of bare numbers (29/6/2006) %D \item remove two incorrect spaces from bibl-num.tex (1/7/2006) %D \item reset font styles within \type{\cite}, so that font switches %D in \type{left} stay in effect (12/7/2006) %D \item guard added against loading bbl files multiple times (13/7/2006) %D \item fix \type{\cite[num]} with compression is on. (14/7/2006) %D \item test \type{\iflocation} before deciding to use the %D interactive version of cite (18/7/2006) %D \item support \type{\setupcite[authoretallimit=1]} (18/7/2006) %D \item support use of \type{\cite} within titles and captions by %D saveguarding the list item extraction and reference placement %D code (19/7/2006) %D \item support \type{\setuppublicationlist[title=\chapter]} (4/8/2006) %D \item use the expansion of \type{\headtext{pubs}} (4/8/2006) %D \item hook added for repeated authors in publication list %D \type{\setuppublicationlist[artauthorcommand=\mythreeargscommand]} %D (4/8/2006) %D \item make the bracketed arguments of \type{\artauthor}, \type{\author} %D and \type{\editor} (bbl commands) optional (4/8/2006) %D \item the constants \type{sorttype}, \type{compress} and %D \type{autohang} have moved to the core (8/8/2006) %D \item bibtex is now registered as a program to be run by texexec (8/8/2006) %D \item fix a bug in \type{\setupcite[authoretallimit=1]} (9/8/2006) %D \item fix a bug inside citations that prevented lastpubsep from ever being %D used due to a volatile \type{\commalistsize} (25/8/2006). %D \item added the possibility of \type{\placepublications[option=continue]} %D (6/9/2006) %D \item Mojca translated Master's Thesis to Masterarbeit (bibl-apa-de.tex) %D (12/9/2006) %D \item Added \type{\setuppublicationlist[maybeyear=off]} by request from %D Thomas Schmitz (15/9/2006) %D \item Removed some spurious spaces pointed out by willi egger (19/9/2006) %D \item Add configuration of bibtex executable name (4/11/2006) %D \item Fix numbering=short and numbering=bib (spotted by Matthias W�chter) (4/11/2006) %D \item third attempt to get a correct release (5/11/2006) %D \item fix a few missing dots in bibl-num.tex (7/12/2006) %D \item Patch for DOI's by Tobias Burnus (17/4/2007) %D \item Patch for \type{\insertbiburl} and \type{\insertdoi} for Tobias Burnus (18/4/2007) %D \item Added a missing \type{\relax} in \type{\dospecialbibinsert}, %D that made the space before the {\it et al.} text disappear. (18/4/2007) %D \item Attempt to fix percent signs in bbl files. As a side-effect, %D this prohibits comments in \tex{startpublication} blocks! (17/4/2008) %D \item Patch from Matthias W\"achter that allows arbitrary .bst %D files to be used with \tex{setupbibtex} (25/9/2008) %D \item Extended for the new multilingual setups for the Oct 2008 current of ConTeXt (23/10/2008) %D \item Multilingual setups needed another fix (27/10/2008) %D \item Two fixes for bibl-apa by Michael Green (27/10/2008) %D \item Catalan translation of 'References' (10/11/2008) %D \item 'chapter' -> 'chapitre' in bibl-apa-fr (27/11/2008) %D \item Run bibtex via os.execute in mkiv modee (01/12/2008) %D \item Small correction in bibl-apa's placement of volume %D information in articles (05/01/2009) %D \item Handle multi-author (more than two) cases in \type{\cite} %D (02/03/2009) %D \item Suppress a syntax error in \type{cont-xp} mode. The output is %D probably not right, though (02/03/2009) %D \item Added a \tex{loadmarkfile} at the end, and two new files %D from Hans. The \type{t-bib.mkiv} is needed to make the module %D work with the new structure code (17/04/2009) %D \item Added a patch to \type{t-bib.mkiv} from Hans to make the %D cross referencing between multiple citations an %D bibliographies work (27/04/2009) %D \item Remove a superfluous \type{\unprotect} in t-bib.mkiv (11/05/2009). %D \item Patch of incollection in bibl-ams.tex from Xan (08/06/2009). %D \item Patch of unpublished in bibl-ams.tex from Xan (22/07/2009). %D \item Modified \type{\bibdogetupsometextprefix} so it works for undefined %D language labels, from Hans (13/08/2009). %D \item Removed some \MKIV\ hacks as well as some things that are in the %D core like variables, constants and messages (HH:22/08/2009). %D \item Added \type{bib} in front of \type {insert} macros and initialize %D then later on (HH:22/08/2009). %D \item Removed test for type {\currentlocationreference} plus associated %D code (HH:22/08/2009). %D \stopitemize %D %D \subject{WISHLIST} %D %D \startitemize %D \item link back from publication list to citation %D \item export \type {\citation{}} %D \item support mlbibtex %D \item don't load the whole lot, but filter entries instead %D \stopitemize \unprotect %D Variables, constants and messages are removed as they are now in the %D multilingual interface modules. \def\biblistname{pubs} % for compatibility %D how to load the references. There is some new stuff here %D to support Idris' (incorrect :-)) use of projects % \let\preloadbiblist\relax % % \ifx\currentcomponent\v!text % % single file % \edef\temp{\the\everystarttext}% % \ifx\temp\empty % % post-starttext % \def\preloadbiblist{\dousepublications\jobname }% % \else % % pre-starttext % \appendtoks \dousepublications\jobname \to \everystarttext % \fi % % % \else \ifx\currentcomponent\v!project % % a project file, have to set up the partial products! % \def\startproduct #1 % % {\doateverystarttext % \dousepublications{#1}% % \donextlevel\v!product\currentproduct % \doexecutefileonce\doexecutefileonce % \donotexecutefile\doexecutefile#1\\}% % % % \else \ifx\currentcomponent\v!product % % a product file % \def\preloadbiblist{\dousepublications\jobname }% % % % \else % % a component? not sure what to do % \def\preloadbiblist{\dousepublications\jobname }% % % % \fi \fi \fi \def\preloadbiblist {\globallet\preloadbiblist\relax \dousepublications\jobname} \definelist[pubs] \setuplist[pubs][\c!width=] %D \macros{bibdoif,bibdoifnot,bibdoifelse} %D %D Here are a few small helpers that are used a lot %D in all the typesetting commands %D (\type{\insert...}) we will encounter later. \long\def\bibdoifelse#1% {\@EA\def\@EA\!!stringa\@EA{#1}% \ifx\!!stringa\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \long\def\bibdoifnot#1% {\@EA\def\@EA\!!stringa\@EA{#1}% \ifx\!!stringa\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \long\def\bibdoif#1% {\@EA\def\@EA\!!stringa\@EA{#1}% \ifx\!!stringa\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D Bibtex settings separated out %D No point in writing the aux file if there is no database... \def\setupbibtex{\dosingleempty\dosetupbibtex} \def\dosetupbibtex[#1]% {\let\@@pbdatabase\empty \getparameters[\??pb][\c!sort=\s!default,#1]% \expanded{\processaction[\@@pbsort]} [ \v!no=>\def\bibstyle{cont-no}, \v!author=>\def\bibstyle{cont-au}, \v!title=>\def\bibstyle{cont-ti}, \v!short=>\def\bibstyle{cont-ab}, \s!default=>\def\bibstyle{cont-no}, \s!unknown=>\def\bibstyle{\@@pbsort}]% \ifx\@@pbdatabase\empty\else \writeauxfile \fi} \dosetupbibtex[bibtex=bibtex] %D \macros{writeauxfile} %D %D Unfortunately, \BIBTEX\ is not the best configurable program %D around. The names of the commands it parses as well as the \type{.aux} %D extension to the file name are both hardwired. %D %D This means \CONTEXT\ has to write a \LATEX-style auxiliary file, yuk! %D The good news is that it can be rather short. We'll just ask %D \BIBTEX\ to output the entire database(s) into the \type{bbl} file. %D %D The \type{\bibstyle} command controls how the \type{bbl} file will %D be sorted. The possibilities are: %D %D \startitemize[packed] %D \item by author (+year, title): cont-au.bst %D \item by title (+author, year): cont-ti.bst %D \item by short key as in abbrev.bst: cont-ab.bst %D \item not sorted at all: cont-no.bst %D \stopitemize \def\writeauxfile {\doifmode{*\v!first} {\openout \scratchwrite \jobname.aux \write \scratchwrite {\string\citation{*}}% \write \scratchwrite {\string\bibstyle{\bibstyle}}% \write \scratchwrite {\string\bibdata{\@@pbdatabase}}% \closeout\scratchwrite \showmessage\m!publications{3}{}% \expanded{\installprogram{\@@pbbibtex\space\jobname}}}} %D \macros{ifsortbycite,iftypesetall,ifautohang,ifbibcitecompress} %D %D The module needs some new \type{\if} statements. %D Default sort order of the reference list is by citation. \newif\ifsortbycite \sortbycitetrue %D By default, only referenced publications are typeset \newif\iftypesetall \typesetallfalse %D Hanging indentation of the publication list %D will not adjust itself according to the width of the label. \newif\ifautohang \autohangfalse %D Cite lists are compressed, if possible. \newif\ifbibcitecompress \bibcitecompresstrue \def\setuppublications {\dosingleargument\dosetuppublications} \def\bibleftnumber#1% {#1\hfill~} \def\dosetuppublications[#1]% {\getparameters [\??pb] [\c!alternative=,#1]% \doifsomething\@@pbalternative {\readsysfile {bibl-\@@pbalternative.tex} {\showmessage\m!publications{6}{bibl-\@@pbalternative}\let\@@pbalternative\empty} {\showmessage\m!publications{1}{bibl-\@@pbalternative}\let\@@pbalternative\empty}}% \getparameters [\??pb] [#1]% \processaction [\@@pbcriterium] [ \v!all=>\typesetalltrue, \s!unknown=>\typesetallfalse]% \processaction [\@@pbautohang] [ \v!yes=>\autohangtrue, \s!unknown=>\autohangfalse]% \processaction [\@@pbsorttype] [ \v!cite=>\sortbycitetrue, \v!bbl=>\sortbycitefalse, \s!default=>\sortbycitetrue, \s!unknown=>\sortbycitefalse]% \processaction [\@@pbnumbering] [ \v!yes=>\let\@@pbinumbercommand\firstofoneargument, \v!no=>\let\@@pbinumbercommand\gobbleoneargument, \v!short=>\def\@@pbinumbercommand##1{\getvalue{pbds-\@@pbk}}, \v!bib=>\def\@@pbinumbercommand##1{\getvalue{pbdn-\@@pbk}}, \s!unknown=>\let\@@pbinumbercommand\firstofoneargument]% \processaction [\@@pbrefcommand] [\s!default=>\edef\@@citedefault{\@@pbrefcommand}, \s!unknown=>\edef\@@citedefault{\@@pbrefcommand}]} % initialize \def\@@pbrefcommand{num} \def\@@pbnumbercommand{\bibleftnumber} %D \macros{usepublications} %D %D We need \type{\usereferences} so that it is possible to %D refer to page and/or appearance number for publications %D in the other document. \def\usepublications[#1]% {\usereferences[#1]\processcommalist[#1]\dousepublications} \def\dousepublications#1% {\doonlyonce {#1.\f!bibextension} {\readfile{#1.\f!bibextension} {\showmessage\m!publications{4}{#1.\f!bibextension}} {\showmessage\m!publications{2}{#1.\f!bibextension}}}} %D \macros{setuppublicationlist} %D %D This will be the first command in (\BIBTEX-generated) \type{bbl} %D files. `samplesize' is a sample value (in case of \BIBTEX-generated %D files, this will be the longest `short' key). `totalnumber' %D is the total number of entries that will follow in this %D file. %D Both values are only needed for the label calculation %D if `autohang' is `true', so by default the command is %D not even needed, and therefore I saw no need to give %D it it's own system variable and it just re-uses \type{pb}. \def\setuppublicationlist {\dosingleempty\dosetuppublicationlist} \def\dosetuppublicationlist[#1]% {\getparameters[\??pv data][#1]% \setuplist [pubs] [\c!samplesize={AA99},\c!totalnumber={99}, \c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1]} \def\setuppublicationlayout[#1]#2% {\setvalue{\??pv data#1}{#2\unskip}} %D \macros{bibalternative} %D %D A nice little shorthand that will be used so we don't have to %D key in the weird \type{\@@pv} parameter names all the time. \def\bibalternative#1% {\getvalue{\??pv\@@currentalternative#1}} %D \macros{simplebibdef,bibcommandlist} %D %D \type{\simplebibdef} defines \type{bib@#1}, which in turn will %D use one argument that is stored in \type{@@pb@#1}. %D %D \type{\simplebibdef} also defines \type{insert#1}, which can be %D used in the argument of \type{\setuppublicationlayout} to fetch %D one of the \type{@@pb@} data entries. \type{insert#1} then has %D three arguments: \type{#1} are commands to be executed before the %D data, \type{#2} are commands to be executed after the data, and %D \type{#3} are commands to be executed if the data is not found. %D \type{\bibcommandlist} is the list of commands that is affected %D by this approach. Later on, it will be used to do a series %D of assignments from \type{#1} to \type{bib@#1}: e.g %D \type{\title} becomes \type{\bib@title} when used within %D a publication. \newtoks\initializebibdefinitions % we need to prevent clashes (HH) % \def\simplebibdef#1% hh: funny expansion ? % {\@EA\long\@EA\def\csname bib@#1\endcsname##1% % {\setvalue{\??pb @#1}{##1}% % \ignorespaces}% % \@EA\def\csname insert#1\endcsname##1##2##3% % {\@EA\bibdoifelse % \@EA{\csname @@pb@#1\endcsname}% % {##1\csname @@pb@#1\endcsname##2}% % {##3}% % }} \def\simplebibdef#1% hh: funny expansion ? {\@EA\long\@EA\def\csname bib@#1\endcsname##1% {\setvalue{\??pb @#1}{##1}\ignorespaces}% \expandafter \appendtoks \expandafter\let\csname insert#1\expandafter\endcsname\csname bibinsert#1\endcsname \to \initializebibdefinitions \@EA\unexpanded\@EA\def\csname bibinsert#1\endcsname##1##2##3% {\@EA\bibdoifelse\@EA{\csname\??pb @#1\endcsname}{##1\csname\??pb @#1\endcsname##2}{##3}}} \def\bibcommandlist {abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city, comment, country, day, dayfiled, doi, edition, eprint, howpublished, isbn, issn, issue, journal, keyword, keywords, lastchecked, month, monthfiled, names, nationality, note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey, title, volume, yearfiled} \processcommacommand[\bibcommandlist]\simplebibdef \def\bibinsertdoi#1#2#3% {{\bibdoifelse{\@@pb@doi}% {\edef\ascii{\@EA\detokenize\@EA{\@@pb@doi}}% #1\expanded{\gotoDOI{\@@pb@thekey}{\ascii}}#2}{#3}}} \def\bibinsertbiburl#1#2#3% {{\bibdoifelse{\@@pb@biburl}% {\edef\ascii{\@EA\detokenize\@EA{\@@pb@biburl}}% #1\expanded{\gotoURL{\@@pb@thekey}{\ascii}}#2}{#3}}} \def\bibinsertmonth#1#2#3% {\bibdoifelse{\@@pb@month}% {#1\doifnumberelse{\@@pb@month}% {\doifconversiondefinedelse\@@pbmonthconversion {\convertnumber\@@pbmonthconversion{\@@pb@month}}{\@@pb@month}}% {\@@pb@month}#2}{#3}} \appendtoks \let\inserturl \bibinsertbiburl % for backward compat. \let\inserttype\bibinsertbibtype % for backward compat. \to\initializebibdefinitions \def\newbibfield[#1]% {\simplebibdef{#1}% \edef\bibcommandlist{\bibcommandlist,#1}} %D \macros{bib@crossref} %D %D \type{\crossref} is used in database files to point to another %D entry. Because of this special situation, it has to be defined %D separately. Since this command will not be seen until at %D \type{\placepublications}, it may force extra runs. The same is %D true for \type{\cite} commands inside of publications. \def\bib@crossref#1% {\setvalue{\??pb @crossref}{#1}\ignorespaces} \def\bibinsertcrossref#1#2#3% {\bibdoifelse{\@@pb@crossref} {#1\@EA\cite\@EA[\@@pb@crossref]#2} {#3}} \let\insertcrossref\gobblethreearguments \appendtoks\let\insertcrossref\bibinsertcrossref\to\initializebibdefinitions %D \macros{complexbibdef,specialbibinsert} %D %D The commands \type{\artauthor}, \type{\author} and %D \type{\editor} are more complex than the other commands. %D Their argument lists have this form: %D %D \type{\author[junior]{firstnames}[inits]{von}{surname}} %D %D (bracketed stuff is optional) %D %D And not only that, but there also might be more than one of each of %D these commands. This is why a special command is needed to insert %D them, as well as one extra counter for each command. %D All of these \type{\@EA}'s and \type{\csnames} make this code %D look far more complex than it really is. For example, the argument %D \type{author} defines the macro \type{\bib@author} to do two %D things: increment the counter \type{\author@num} (let's say to 2) %D and next store it's arguments in the macro \type{\@@pb@author2}. %D And it defines \type{\insertauthors} to expand into %D \starttyping %D \specialbibinsert{author}{\author@num}{}{}{} %D \stoptyping \def\docomplexbibdef#1% {\def\currentype{#1}% \dosingleempty\dodocomplexbibdef} \def\dodocomplexbibdef[#1]#2% {\def\firstarg{#1}\def\secondarg{#2}% \dosingleempty\dododocomplexbibdef} \def\dododocomplexbibdef[#1]#2#3% {\@EA\increment\csname \currentype @num\endcsname \setevalue{\??pb @\currentype\csname \currentype @num\endcsname}% {{\secondarg}{#2}{#3}{#1}{\firstarg}}\ignorespaces}% % \def\complexbibdef#1% % {\@EA\newcounter\csname #1@num\endcsname % \@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}% % \@EA\def\csname insert#1s\endcsname##1##2##3% % {\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}} \def\complexbibdef#1% {\@EA\newcounter\csname #1@num\endcsname \@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}% \expandafter \appendtoks \expandafter\let\csname insert#1s\expandafter\endcsname\csname bibinsert#1s\endcsname \to \initializebibdefinitions \@EA\def\csname bibinsert#1s\endcsname##1##2##3{\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}} \processcommalist[author,artauthor,editor]\complexbibdef %D Another level of indirection is needed to control the %D typesetting of all of these arguments. %D Btw, there is a conflict between `author' and the predefined interface %D variable `auteur'. The old version is overruled `auteur' is %D overruled by the systemconstant definition at the top of this file! \newcount\etallimitcounter \newcount\etaldisplaycounter \newcount\todocounter \def\specialbibinsert#1#2#3#4#5% {\bgroup \ifnum#2>\zerocount \etallimitcounter =0\bibalternative{#1etallimit}\relax \etaldisplaycounter=0\bibalternative{#1etaldisplay}\relax \ifnum #2>\etallimitcounter \todocounter\etaldisplaycounter % just in case ... \ifnum\todocounter>\etallimitcounter \todocounter\etallimitcounter \fi \else \todocounter#2\relax \fi \ifnum\todocounter>\zerocount % find the current author list \let\templist\empty \dorecurse{#2} {\toks0=\@EA\@EA\@EA{\csname @@pb@#1\recurselevel\endcsname}% \ifx\templist\empty \edef\templist{\the\toks0}% \else \edef\templist{\templist,\the\toks0}\fi }% \doifdefinedelse {\??pv data#1\c!command} {\doifemptyelsevalue {\??pv data#1\c!command} {#3\dospecialbibinsert{#1}{\todocounter}{\templist}#4}% {#3\getvalue{\??pv data#1\c!command}{#1}{\todocounter}{\templist}#4}}% {#3\dospecialbibinsert{#1}{\todocounter}{\templist}#4}% \else #5% \fi \else #5% \fi \egroup} %D This macro does the hard work of inserting a list of people in the %D output, with proper regard of all the inbetween strings that can %D arise depending on length of the list of people. %D \#1 = type %D \#2 = number of items to be typeset %D \#3 = commacommand containing authors \def\dospecialbibinsert#1#2#3% {\getcommacommandsize[#3]% \scratchcounter 0 \def\processauthoritem##1% {\advance\scratchcounter1 \ifnum \numexpr\scratchcounter-1\relax<#2\relax \getvalue{\??pv data#1}##1% \ifnum \scratchcounter=#2\relax \ifnum\etallimitcounter<\commalistsize\relax \bibalternative{#1etaltext}\fi \else \ifnum\numexpr\scratchcounter+1 = #2\relax \ifnum \commalistsize > \plustwo \bibalternative\c!finalnamesep \else \bibalternative\c!lastnamesep \fi \else \bibalternative\c!namesep \fi \fi \fi}% \processcommacommand[#3]\processauthoritem } %D \macros{invertedauthor,normalauthor,invertedshortauthor,normalshortauthor} %D %D Just some commands that can be used in \type{\setuppublicationparameters} %D If you want to write an extension to the styles, you might %D as well define some of these commands yourself. %D %D The argument liust has been reordered here, and the meanings %D are: %D %D {\obeylines\parskip0pt %D \type{#1} firstnames %D \type{#2} von %D \type{#3} surname %D \type{#4} inits %D \type{#5} junior %D } %D \def\normalauthor#1#2#3#4#5% {\bibdoif{#1}{#1\bibalternative\c!firstnamesep}% \bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}} \def\normalshortauthor#1#2#3#4#5% {\bibdoif{#4}{#4\bibalternative\c!firstnamesep}% \bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}} \def\invertedauthor#1#2#3#4#5% {\bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!juniorsep #5}% \bibdoif{#1}{\bibalternative\c!surnamesep #1\unskip}} \def\invertedshortauthor#1#2#3#4#5% {\bibdoif{#2}{#2\bibalternative\c!vonsep}% #3% \bibdoif{#5}{\bibalternative\c!juniorsep #5}% \bibdoif{#4}{\bibalternative\c!surnamesep #4\unskip}} %D \macros{clearbibitem,clearbibitemtwo,bibitemdefs} %D %D These are used in \type{\typesetapublication} to do %D initializations and cleanups. \def\clearbibitem#1{\setvalue{\??pb @#1}{}}% \def\clearbibitemtwo#1% {\letvalue{#1@num}\!!zerocount \scratchcounter\plusone \doloop {\doifdefinedelse{\??pb @#1\the\scratchcounter} {\letvalue{\??pb @#1\the\scratchcounter}\empty \advance\scratchcounter\plusone}% {\exitloop}}} \def\bibitemdefs#1% {\@EA\let\@EA\tempa \csname bib@#1\endcsname \@EA\let\csname #1\endcsname \tempa } %D \macros{startpublication} %D %D We are coming to the end of this module, to the macros that %D do typesetting and read the \type{bbl} file. \newcounter\bibcounter %D Just a \type{\dosingleempty} is the most friendly %D of doing this: there need not even be an argument %D to \type{\startpublication}. Of course, then there %D is no key either, and it had better be an %D article (otherwise the layout will be all screwed up). %D %D Now prohibits comments, so % can be used for urls \def\startpublication {\edef\bibmodsavedpercent{\the\catcode`\%}% \catcode`\%=12 \dosingleempty\dostartpublication} \def\stoppublication {} % the \catcode of % is reset below %D Only specifying the key in the argument is also %D legal. In storing this stuff into macros, some trickery with %D token registers is needed to fix the expansion problems. Even so, %D this appears to not always be 100\% safe, so people are %D urgently advised to use \ETEX\ instead of traditional \TEX. %D %D In \ETEX, all expansion problems are conviniently solved by %D the primitive \type{\protected}. To put that another way: %D %D It's not a bug in this module if it does not appear in \ETEX! \long\def\dostartpublication[#1]#2\stoppublication% {\increment\bibcounter \bgroup \doifassignmentelse{#1}% {\getparameters[\??pb][k=,t=article,n=,s=,a=,y=,o=,u=,#1]}% {\getparameters[\??pb][k=#1,t=article,n=,s=,a=,y=,o=,u=]}% \@EA\toks\@EA2\@EA{\@@pba}% \@EA\toks\@EA4\@EA{\@@pbs}% \toks0={\ignorespaces #2}% \setxvalue{pbdk-\@@pbk}{\@@pbk} \setxvalue{pbda-\@@pbk}{\the\toks2} \setxvalue{pbdy-\@@pbk}{\@@pby} \setxvalue{pbds-\@@pbk}{\the\toks4} \setxvalue{pbdn-\@@pbk}{\@@pbn} \setxvalue{pbdt-\@@pbk}{\@@pbt} \setxvalue{pbdo-\@@pbk}{\@@pbo} \setxvalue{pbdu-\@@pbk}{\@@pbu} \setxvalue{pbdd-\@@pbk}{\the\toks0} \xdef\allrefs{\allrefs,\@@pbk}% \egroup \catcode`\%=\bibmodsavedpercent\relax } % intialization of the order-list: \let\allrefs\empty %D The next macro is needed because the number command of the %D publist sometimes needs to fetch something from the current %D item (like the 'short' key). For this, the ID of the current %D item is passed in the implict parameter \type{\@@pbk} \def\makepbkvalue#1{\def\@@pbk{#1}} \newif\ifinpublist % from Hans \def\ignoresectionconversion {\let\@@sectionconversion\secondoftwoarguments} \let\normaldosetfilterlevel\dosetfilterlevel \def\patcheddosetfilterlevel#1#2% beware: this one is \let {\bgroup \ignoresectionconversion \edef\askedlevel{#1}% \edef\askedfilter{#2}% % \message{ASKD: \meaning\askedlevel}% % \message{PREV: \meaning\v!previous}% \ifx\askedlevel\v!current \dosetcurrentlevel\askedlevel \else\ifx\askedlevel\v!previous \dosetpreviouslevel\askedlevel \else\ifx\askedlevel\v!all \global\chardef\alltoclevels\plusone \else\ifx\askedlevel\v!text \global\chardef\alltoclevels\plusone \else \edef\byaskedlevel{\csname\??by\askedlevel\endcsname}% \ifx\byaskedlevel\v!text \dosettextlevel\askedlevel \else \dosetotherlevel\askedlevel \fi \fi\fi\fi\fi % experiment \ifx\askedfilter\empty \else \xdef\currentlevel{\currentlevel\sectionseparator\askedfilter}% \fi \egroup} \def\filllocalpublist% {\doifdefinedelse{\alltoclevels} {\let\dosetfilterlevel\patcheddosetfilterlevel \dosettoclevel\??li{pubs}% \let\dosetfilterlevel\normaldosetfilterlevel }% {\dosettoclevel\??li{pubs}}% \global\let\glocalpublist\empty \doloop {\doifdefinedelse {\r!cross cite-\jobname-\recurselevel} {\doifreferencefoundelse {cite-\jobname-\recurselevel} {\@EA\doifreglevelelse\@EA[\currentlocationreference] {\@EA\doglobal\@EA\addtocommalist\@EA {\currenttextreference}\glocalpublist}{}} {}}% {\exitloop}}% \let\localpublist\glocalpublist} \def\typesetpubslist {\dobeginoflist % \the\initializebibdefinitions \edef\askedlevel{\csname \??li pubs\c!criterium\endcsname}% \ifx\askedlevel\v!all \def\bibrefprefix{}% \else % \preparebibrefprefix \fi \ifsortbycite \filllocalpublist \iftypesetall \let\localallrefs\allrefs \processcommacommand[\localpublist]\typesetapublication \def\removefromallrefs##1% {\removefromcommalist{##1}\localallrefs }% \processcommacommand[\localpublist]\removefromallrefs \processcommacommand[\localallrefs]\typesetapublication \else \processcommacommand[\localpublist]\typesetapublication \fi \else \iftypesetall \processcommacommand[\allrefs]\typesetapublication \else % \filllocalpublist \processcommacommand[\allrefs]\maybetypesetapublication \fi \fi \doendoflist} \newif\ifinpublist \def\maybetypesetapublication#1% {\global\inpublistfalse \def\test{#1}% \def\runtest##1% {\def\tempa{##1}\ifx \test\tempa \global\inpublisttrue \fi}% \processcommacommand[\localpublist]\runtest \ifinpublist \typesetapublication{#1}\fi} \def\initializepubslist {\edef\@@pbnumbering{\@@pbnumbering}% \ifautohang \ifx\@@pbnumbering\v!short \setbox\scratchbox\hbox{\@@pbnumbercommand{\getvalue{\??li pubs\c!samplesize}}}% \else\iftypesetall \setbox\scratchbox\hbox{\@@pbnumbercommand{\getvalue{\??li pubs\c!totalnumber}}}% \else \setbox\scratchbox\hbox{\@@pbnumbercommand{\numreferred}}% \fi\fi \edef\samplewidth{\the\wd\scratchbox}% \setuplist[pubs][\c!width=\samplewidth,\c!distance=0pt]% \ifx\@@pbnumbering\v!short \def\@@pblimitednumber##1{\hbox to \samplewidth {\@@pbnumbercommand{\getvalue{pbds-\@@pbk}}}}% \else \ifx \@@pbnumbering\v!bib \def\@@pblimitednumber##1{\hbox to \samplewidth {\@@pbnumbercommand{\getvalue{pbdn-\@@pbk}}}}% \else \def\@@pblimitednumber##1{\hbox to \samplewidth{\@@pbnumbercommand{##1}}}% \fi \fi \else \ifx\@@pbnumbering\v!short \doifemptyelse {\getvalue{\??li pubs\c!width}} {\def\@@pblimitednumber##1{\hbox {\@@pbnumbercommand{\getvalue{pbds-\@@pbk}}}}}% {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}% {\@@pbnumbercommand{\getvalue{pbds-\@@pbk}}}}}% \else \ifx \@@pbnumbering\v!bib \doifemptyelse {\getvalue{\??li pubs\c!width}} {\def\@@pblimitednumber##1{\hbox {\@@pbnumbercommand{\getvalue{pbdn-\@@pbk}}}}}% {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}% {\@@pbnumbercommand{\getvalue{pbdn-\@@pbk}}}}}% \else \doifemptyelse {\getvalue{\??li pubs\c!width}} {\def\@@pblimitednumber##1{\hbox{\@@pbnumbercommand{##1}}}}% {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}{\@@pbnumbercommand{##1}}}}% \fi \fi \fi \ifx\@@pbnumbering\v!no \setuplist[pubs][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]% \else \setuplist[pubs][\c!numbercommand=\@@pblimitednumber]% \fi \doifelsevalue {\??pv data\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}% \forgetall} % bugfix 2005/03/18 \def\outdented#1% move to supp-box ? {\hskip -\hangindent #1} %D The full list of publications \def\completepublications {\dosingleempty\docompletepublications} \def\bibdogetupsometextprefix#1#2#3% {\ifcsname#2#1#3\endcsname \csname#2#1#3\endcsname \else\ifcsname\??la#1\c!default\endcsname \@EA\ifx\csname\??la#1\c!default\endcsname\empty \ifcsname#2#3\endcsname \csname#2#3\endcsname \else\ifcsname#2\s!en#3\endcsname \csname#2\s!en#3\endcsname \fi\fi \else \expandafter\bibdogetupsometextprefix \csname\??la#1\c!default\endcsname{#2}{#3}% \fi \else \ifcsname#2#3\endcsname \csname#2#3\endcsname \else\ifcsname#2\s!en#3\endcsname \csname#2\s!en#3\endcsname \fi\fi \fi\fi} \def\docompletepublications[#1]% {\begingroup \setuplist[pubs][\c!criterium=\v!previous,#1] \begingroup \let\handletextprefix\firstoftwoarguments \edef\headtextpubs{\bibdogetupsometextprefix\headlanguage\c!title{pubs}}% \doifdefinedelse {\??pv data\v!title} {\doifemptyelsevalue {\??pv data\v!title} {\expanded{\systemsuppliedtitle[pubs]{\headtextpubs}}}% {\expanded{\getvalue{\??pv data\v!title}{\headtextpubs}}}% }% {\expanded{\systemsuppliedtitle[pubs]{\headtextpubs}}}% \endgroup \dodoplacepublications } %D And the portion with the entries only. \def\placepublications {\dosingleempty\doplacepublications} \def\doplacepublications[#1]% {%\getparameters[\??pv data][#1] \begingroup \setuplist[pubs][\c!criterium=\v!previous,#1]% \dodoplacepublications }% \def\dodoplacepublications% {\initializepubslist \doifelsevalue {\??li pubs\c!option}{\v!continue}% {}% {\global\let\bibcounter\!!zerocount }% \inpublisttrue \typesetpubslist \inpublistfalse \endgroup} %D \subsubject{What's in a publication} \unexpanded\def\typesetapublication#1% {\doifsomething{#1} {\doglobal\increment\bibcounter \bgroup \the\initializebibdefinitions \makepbkvalue{#1}% \ifgridsnapping \snaptogrid\vbox{\dodolistelement{pubs}{}{\bibcounter}% {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}% \strut \dotypesetapublication{#1}\strut }{}{}}% \else \dodolistelement{pubs}{}{\bibcounter}% {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}% \strut \dotypesetapublication{#1}\strut }{}{}% \fi \egroup}} \def\dotypesetapublication#1% {\bgroup \def\@@currentalternative{data}% \processcommacommand[\bibcommandlist,crossref]\clearbibitem \processcommalist [artauthor,author,editor]\clearbibitemtwo \processcommacommand[\bibcommandlist]\bibitemdefs \processcommalist [artauthor,author,editor,crossref]\bibitemdefs \let\biblanguage\empty \getvalue{pbdd-#1}% \ifcsname pbdt-#1\endcsname \bibalternative{\getvalue{pbdt-#1}}\fi \egroup } %D An afterthought: \def\maybeyear#1{} %D An another: \def\noopsort#1{} %D This is the result of bibtex's `language' field. \def\setbiblanguage#1#2{\setvalue{\??pb @lang@#1}{#2}} \def\lang#1% {\def\biblanguage{#1}% \ifcsname \??pb @lang@#1\endcsname \expanded{\language[\getvalue{\??pb @lang@#1}]}% \fi \ignorespaces} %D \subject{Citations} %D %D \macros{cite,bibref} %D %D The indirection with \type{\dobibref} allows \LATEX\ style %D \type{\cite} commands with a braced argument (these might appear %D in included data from the \type{.bib} file). % \unexpanded\def\cite % {\doifnextcharelse{[} % {\dodocite} % {\dobibref}} % \def\dobibref#1% % {\docite[#1][]} % \def\dodocite[#1]% % {\startstrictinspectnextcharacter % \dodoubleempty\dododocite[#1]} % \def\dododocite[#1][#2]{% % \stopstrictinspectnextcharacter % \docite[#1][#2]} \unexpanded\def\cite {\strictdoifnextoptionalelse\dodocite\dobibref} \def\dobibref#1% {\docite[#1][]} \def\dodocite[#1]% {\strictdoifnextoptionalelse{\docite[#1]}{\docite[#1][]}} \def\docite[#1][#2]% {\begingroup \setupinteraction[\c!style=]% \edef\temp{#2}% \ifx\empty\temp \secondargumentfalse \else \secondargumenttrue \fi \ifsecondargument \processcommalist[#2]\docitation \doifassignmentelse {#1}% {\getparameters[LO][\c!alternative=,\c!extras=,#1]% \edef\@@currentalternative{\LOalternative}% \ifx\@@currentalternative\empty \edef\@@currentalternative{\@@citedefault}% \fi \ifx\LOextras\empty \setupcite[\@@currentalternative][#1]% \else \expandafter\ifx\csname LOright\endcsname \relax \edef\LOextras{{\LOextras\bibalternative\c!right}}% \else \edef\LOextras{{\LOextras\LOright}}% \fi \expanded{\setupcite[\@@currentalternative][#1,\c!right=\LOextras]}% \fi }% {\def\@@currentalternative{#1}}% \expanded{% \processaction[\csname @@pv\@@currentalternative \c!compress\endcsname]} [ \v!yes=>\bibcitecompresstrue, \v!no=>\bibcitecompressfalse, \s!default=>\bibcitecompresstrue, \s!unknown=>\bibcitecompresstrue]% \getvalue{bib\@@currentalternative ref}[#2]% \else \processcommalist[#1]\docitation \expanded{\processaction[\csname @@pv\@@citedefault \c!compress\endcsname]} [ \v!yes=>\bibcitecompresstrue, \v!no=>\bibcitecompressfalse, \s!default=>\bibcitecompresstrue, \s!unknown=>\bibcitecompresstrue]% \edef\@@currentalternative{\@@citedefault}% \getvalue{bib\@@citedefault ref}[#1]% \fi \endgroup} %D \macros{nocite} \def\nocite[#1]% {\processcommalist[#1]\addthisref \processcommalist[#1]\docitation } %D \macros{setupcite} \def\setupcite{\dodoubleempty\dosetupcite} \def\dosetupcite[#1][#2]% {\ifsecondargument \def\dodosetupcite##1{\getparameters[\??pv##1][#2]}% \processcommalist[#1]\dodosetupcite \else % default case \getparameters[\??pv\@@citedefault][#1]% \fi } %D Low-level stuff \def\getcitedata#1[#2]#3[#4]#5to#6% {\bgroup \addthisref{#4}% \dofetchapublication{#4}% \doifdefinedelse{@@pb@bib#2}% {\xdef#6{\getvalue{@@pb@bib#2}}}% {\xdef#6{\getvalue{@@pb@#2}}}% \egroup} \def\dofetchapublication#1% {\makepbkvalue{#1}% \processcommacommand[\bibcommandlist,crossref]\clearbibitem \processcommalist [artauthor,author,editor]\clearbibitemtwo \processcommacommand[\bibcommandlist]\bibitemdefs \processcommalist [artauthor,author,editor,crossref]\bibitemdefs \getvalue{pbdd-#1}} %D This new version writes a reference out to the tui file for every %D \type{\cite}. This will allow backlinking. %D %D Some special care is needed so that references are not added from %D weird locations like in the TOC or within a \type{\setbox} command. \newcounter\citationnumber \def\docitation#1{% \iftrialtypesetting \else \ifdoinpututilities\else \doglobal\increment\citationnumber \expanded{\rawreference{}{cite-\jobname-\citationnumber}{#1}}% \fi \fi } %D \macros{numreferred,doifreferredelse,addthisref,publist} %D %D The interesting command here is \type{\addthisref}, which maintains %D the global list of references. %D %D \type{\numreferred} is needed to do automatic calculations on %D the label width, and \type{\doifreferredelse} will be used %D to implement \type{criterium=cite}. \newcounter\numreferred \long\def\doifreferredelse#1{\doifdefinedelse{pbr-#1}} \def\addthisref#1% {\doifundefinedelse{pbr-#1} {\setxvalue{pbr-#1}{\citationnumber}% \doglobal\increment\numreferred \ifx\publist\empty \gdef\publist{#1}\else\appended\gdef\publist{,#1}\fi} {\setxvalue{pbr-#1}{\getvalue{pbr-#1},\citationnumber}}} \let\publist\empty %D \macros{doifbibreferencefoundelse} %D %D Some macros to fetch the information provided by %D \type{\startpublication}. \def\doifbibreferencefoundelse#1% {\preloadbiblist \doifdefinedelse{pbdk-#1} {\firstoftwoarguments} {\showmessage\m!publications{5}{#1 is unknown}% \secondoftwoarguments}} %D \macros{ixbibauthoryear,thebibauthors,thebibyears} %D %D If compression of \type{\cite}'s argument expansion is on, %D the macros that deal with authors and years call this internal %D command to do the actual typesetting. %D %D Two entries with same author but with different years may %D be condensed into ``Author (year1,year2)''. This is about the %D only optimization that makes sense for the (author,year) %D style of citations (years within one author have to be unique %D anyway so no need to test for that, and ``Author1, Author2 (year)'' %D creates more confusion than it does good). %D %D In the code below, %D the macro \type{\thebibauthors} holds the names of the alternative %D author info fields for the current list. This is a commalist, %D and \type{\thebibyears} holds the (collection of) year(s) that go with %D this author (possibly as a nested commalist). %D %D There had better be an author for all cases, but there %D does not have to be year info always. \type{\thebibyears} is %D pre-initialized because this makes the insertion macros simpler. %D %D In `normal' \TeX, of course there are expansion problems again. \def\ixbibauthoryear#1#2#3#4% {\bgroup \gdef\ixlastcommand {#4}% \gdef\ixsecondcommand{#3}% \gdef\ixfirstcommand {#2}% \glet\thebibauthors \empty \glet\thebibyears \empty \getcommalistsize[#1]% \ifbibcitecompress \dorecurse\commalistsize{\xdef\thebibyears{\thebibyears,}}% \processcommalist[#1]\docompressbibauthoryear \else \processcommalist[#1]\donormalbibauthoryear \fi \egroup \dobibauthoryear} %D \macros{dodobibauthoryear} %D %D This macro only has to make sure that the lists %D \type{\thebibauthors} and \type{\thebibyears} are printed. \def\dobibauthoryear {\scratchcounter\zerocount \getcommacommandsize[\thebibauthors]% \edef\authorcount{\commalistsize}% \@EA\processcommalist\@EA[\thebibauthors]\dodobibauthoryear} \def\dodobibauthoryear#1% {\advance\scratchcounter\plusone \edef\wantednumber{\the\scratchcounter}% \getfromcommacommand[\thebibyears][\wantednumber]% \@EA\def\@EA\currentbibyear\@EA{\commalistelement}% \setcurrentbibauthor{#1}% \ifnum\scratchcounter=\plusone \ixfirstcommand \else\ifnum \scratchcounter=\authorcount\relax \ixlastcommand \else \ixsecondcommand \fi\fi} \def\setcurrentbibauthor#1% {\getcommacommandsize[#1]% \ifcase\commalistsize % anonymous? \def\currentbibauthor{}% \or \def\currentbibauthor{#1}% \or \expanded{\docurrentbibauthor#1}% \else \handlemultiplebibauthors{\commalistsize}{#1}% \fi } \newcount\citescratchcounter \def\handlemultiplebibauthors#1#2% {\citescratchcounter 0 \def\currentbibauthor{}% \def\bibprocessauthoritem##1% {\advance\citescratchcounter1 \ifnum \citescratchcounter=#1\relax \edef\currentbibauthor{\currentbibauthor##1}% \else \ifnum\numexpr\citescratchcounter+1 = #1\relax \edef\currentbibauthor{\currentbibauthor ##1\bibalternative{andtext}}% \else \edef\currentbibauthor{\currentbibauthor ##1\bibalternative{namesep}}% \fi \fi }% \processcommalist[#2]\bibprocessauthoritem } \setupcite [author,authoryear,authoryears] [\c!namesep={, }] %D This discovery of authoretallimit is not the best one, %D but it will do for now. \def\docurrentbibauthor#1,#2% {\doifemptyelse{#2} {\def\currentbibauthor{#1\bibalternative{otherstext}}} {\@EA \ifx\csname \??pv\@@currentalternative authoretallimit\endcsname\relax \edef\currentbibauthor{#1\bibalternative{andtext}#2}% \else \edef\currentbibauthor{#1% \ifcase0\bibalternative{authoretallimit}\relax\or \bibalternative{otherstext}\else\bibalternative{andtext}#2\fi}% \fi}} %D This is not the one Hans made for me, because I need a global %D edef, and the \type{\robustdoifinsetelse} doesn't listen to %D \type{\doglobal } \def\robustaddtocommalist#1#2% {item} \cs {\robustdoifinsetelse{#1}#2\resetglobal {\dodoglobal\xdef#2{\ifx#2\empty\else#2,\fi#1}}} %D \macros{donormalbibauthoryear} %D %D Now we get to the macros that fill the two lists. %D The `simple' one really is quite simple. \def\donormalbibauthoryear#1% {\addthisref{#1}% \def\myauthor{Xxxxxxxxxx}% \def\myyear{0000}% \doifbibreferencefoundelse{#1} {\def\myauthor{{\getvalue{pbda-#1}}}% \def\myyear {\getvalue{pbdy-#1}}}% {}% \@EA\doglobal\@EA\appendtocommalist\@EA{\myauthor}\thebibauthors \@EA\doglobal\@EA\appendtocommalist\@EA{\myyear }\thebibyears} %D \macros{docompressbibauthoryear} %D %D So much for the easy parts. Nothing at all will be done if %D the reference is not found or the reference does not contain %D author data. No questions marks o.s.s. (to be fixed later) \def\docompressbibauthoryear#1% {\addthisref{#1}% \def\myauthor{Xxxxxxxxxx}% \def\myyear {0000}% \doifbibreferencefoundelse{#1} {\xdef\myauthor{\csname pbda-#1\endcsname }% \xdef\myyear {\csname pbdy-#1\endcsname }} {}% \ifx\myauthor\empty\else \checkifmyauthoralreadyexists \findmatchingyear \fi} %D two temporary counters. One of these two can possibly be replaced %D by \type{\scratchcounter}. \newcount\bibitemcounter \newcount\bibitemwanted %D The first portion is simple enough: if this is the very first author %D it is quite straightforward to add it. \type{\bibitemcounter} and %D \type{\bibitemwanted} are needed later to insert the year %D information in the correct item of \type{\thebibyears} \def\checkifmyauthoralreadyexists {\doifemptyelsevalue{thebibauthors} {\global\bibitemwanted \plusone \global\bibitemcounter \plusone \xdef\thebibauthors{{\myauthor}}} {% the next weirdness is because according to \getcommalistsize, % the length of \type{[{{},{}}]} is 2. \@EA\getcommalistsize\@EA[\thebibauthors,]% \global\bibitemcounter\commalistsize \global\advance\bibitemcounter\minusone \global\bibitemwanted \zerocount \processcommacommand[\thebibauthors]\docomparemyauthor}} %D The outer \type{\ifnum} accomplishes the addition of %D a new author to \type{\thebibauthors}. The messing about with %D the two counters is again to make sure that \type{\thebibyears} %D will be updated correctly.If the author {\it was} found, %D the counters will stay at their present values and everything %D will be setup properly to insert the year info. \def\docomparemyauthor#1% {\global\advance\bibitemwanted \plusone \def\mytempc{#1}% % \message{authors: \myauthor <=>\mytempc \ifx\mytempc\myauthor :Y \else :N % \meaning \myauthor, \meaning\mytempc\fi (\the\bibitemwanted = \the\bibitemcounter)}% \ifx\mytempc\myauthor \quitcommalist \else \ifnum\bibitemwanted = \bibitemcounter\relax \global\advance\bibitemwanted \plusone \global\bibitemcounter\bibitemwanted\relax \@EA\doglobal\@EA\robustaddtocommalist\@EA{{\myauthor}}\thebibauthors \fi \fi} %D This macro should be clear now. \def\findmatchingyear {\edef\wantednumber{\the\bibitemwanted}% \getfromcommacommand[\thebibyears][\wantednumber]% \ifx\commalistelement\empty \edef\myyear{{\myyear}}% \else \edef\myyear{{\commalistelement, \myyear}}% \fi \edef\newcommalistelement{\myyear}% \doglobal\replaceincommalist \thebibyears \wantednumber} %D \macros{preparebibrefprefix} %D %D The reference list only writes bare references when the criterium %D is `all'. Otherwise, a prefix is added to make sure that pdfTeX %D does not encounter duplicate named references. On the generation %D side, this is not a big problem. \type{\preparebibrefprefix} %D creates a suitable string to prepend if a prefix is needed. %D %D Because this macro is used within \type{\cite } that itself %D can be used within lists like the table of contents, it needs %D to save and restore \type{\savedalltoclevels} and %D \type{\currentlevel} (\type{\dosetfilterlevel} needs to change %D their values globally). \def\preparebibrefprefix {\chardef\savedalltoclevels \alltoclevels \let\savedcurrentlevel\currentlevel \let\dosetfilterlevel\patcheddosetfilterlevel \dosettoclevel\??li{pubs}% \edef\bibrefprefix{\@@sectiontype\currentlevel\sectionseparator}% \let\dosetfilterlevel\normaldosetfilterlevel \global\let\currentlevel\savedcurrentlevel \global\chardef\alltoclevels \savedalltoclevels } %D \macros{preparebibreflist} %D %D But this optional prefixing is a bit of a problem on the %D other side. We would like to do \type{\goto{}[article-full]} %D but can't do it like that, because the actual label may be %D \type{1:2:0:3:4:article-full]} or so. The problem is solved %D by building a commalist that looks like this: %D \starttyping %D \def\bibreflist% %D {1:2:0:3:4:article-full, %D 1:2:0:3:article-full, %D 1:2:0:article-full, %D 1:2:article-full, %D 1:article-full, %D article-full} %D \stoptyping \def\preparebibreflist#1% {\let\bibreflist\empty \def\storeitem##1% {\ifx\bibreflist\empty \edef\prefix{##1\sectionseparator}% \edef\bibreflist{\prefix#1,#1}% \else \edef\prefix{\prefix##1\sectionseparator}% \edef\bibreflist{\prefix#1,\bibreflist}% \fi}% \expanded{\processseparatedlist[\bibrefprefix][\sectionseparator]}\storeitem } %D \macros{gotobiblink,inbiblink,atbiblink} %D %D The final task is looping over that list until a match is found. \newif\ifbibreffound \def\gotobiblink#1[#2]% {\bgroup \preparebibrefprefix \preparebibreflist{#2}% \global\bibreffoundfalse \def\setuplink##1% {\ifbibreffound\else \doifreferencefoundelse {##1} {\global\bibreffoundtrue \goto{#1}[##1]}% {}\fi}% \processcommacommand[\bibreflist]\setuplink \ifbibreffound \else \unknownreference{#2}\fi \egroup } \def\atbiblink[#1]% {\bgroup \preparebibrefprefix \preparebibreflist{#1}% \global\bibreffoundfalse \def\setuplink##1% {\ifbibreffound\else \doifreferencefoundelse {##1} {\global\bibreffoundtrue \at[##1]}% {}\fi}% \processcommacommand[\bibreflist]\setuplink \ifbibreffound \else \unknownreference{#1}\fi \egroup } \def\inbiblink[#1]% {\bgroup \preparebibrefprefix \preparebibreflist{#1}% \global\bibreffoundfalse \def\setuplink##1% {\ifbibreffound\else \doifreferencefoundelse {##1} {\global\bibreffoundtrue \in[##1]}% {}\fi}% \processcommacommand[\bibreflist]\setuplink \ifbibreffound \else \unknownreference{#1}\fi \egroup } %D \macros{bibauthoryearref,bibauthoryearsref,bibauthorref,bibyearref} %D %D Now that all the hard work has been done, these are simple. %D \type{\ixbibauthoryearref} stores the data in the macros %D \type{\currentbibauthor} and \type{\currentbibyear}. \def\ifbibinteractionelse% {\iflocation \edef\test{\bibalternative\c!interaction}% \ifx\test\v!stop \@EA\@EA\@EA\secondoftwoarguments \else \@EA\@EA\@EA\firstoftwoarguments \fi \else \@EA\secondoftwoarguments \fi } \def\bibmaybeinteractive#1#2% {\ifbibcitecompress #2\else \ifbibinteractionelse{\gotobiblink{#2}[#1]}{#2}\fi } \def\bibauthoryearref[#1]% {\ixbibauthoryear{#1}% {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}} {\bibalternative\c!lastpubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}} \def\bibauthoryearsref[#1]% {\bibalternative\v!left \ixbibauthoryear{#1} {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}} {\bibalternative\c!lastpubsep \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}% \bibalternative\v!right} \def\bibauthorref[#1]% {\bibalternative\v!left \ixbibauthoryear{#1}% {\bibmaybeinteractive{#1}{{\currentbibauthor}}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}}} {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibauthor}}}% \bibalternative\v!right} \def\bibyearref[#1]% {\bibalternative\v!left \ixbibauthoryear{#1}% {\bibmaybeinteractive{#1}{{\currentbibyear}}} {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibyear}}} {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibyear}}}% \bibalternative\v!right} %D ML problems: %D \macros{bibshortref,bibkeyref,bibpageref,bibtyperef,bibserialref} %D %D There is hardly any point in trying to compress these. The only %D thing that needs to be done is making sure that %D the separations are inserted correctly. And that is %D what \type{\refsep} does. \newif\iffirstref \def\refsep{\iffirstref\firstreffalse\else\bibalternative\c!pubsep\fi} \def\bibshortref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibshortref \bibalternative\v!right} \def\dobibshortref#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbds-#1}}[#1]} {\unknownreference{#1}}} \def\bibserialref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibserialref \bibalternative\v!right} \def\dobibserialref#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbdn-#1}}[#1]} {\unknownreference{#1}}} \def\bibkeyref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibkeyref \bibalternative\v!right} \def\dobibkeyref#1% {\addthisref{#1}\refsep\gotobiblink{#1}[#1]} \def\gotoDOI#1#2% {\ifbibinteractionelse {\useURL[bibfooDoi#1][#2]% \useURL[bibfoo#1][http://dx.doi.org/#2]% \goto{\url[bibfooDoi#1]}[url(bibfoo#1)]} {\hyphenatedurl{#2}}} \def\bibdoiref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibdoiref \bibalternative\v!right} \def\dobibdoiref#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1}{\expanded{\gotoDOI{#1}{\getvalue{pbdo-#1}}}} {\unknownreference{#1}}} \def\biburlref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobiburlref \bibalternative\v!right} \def\gotoURL#1#2% {\ifbibinteractionelse {\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]} {\hyphenatedurl{#2}}} \def\dobiburlref#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1}{\expanded{\gotoURL{#1}{\getvalue{pbdu-#1}}}} {\unknownreference{#1}}} \def\bibtyperef[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibtyperef \bibalternative\v!right} \def\dobibtyperef#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbdt-#1}}[#1]} {\unknownreference{#1}}} \def\bibpageref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibpageref \bibalternative\v!right} \def\dobibpageref#1% {\addthisref{#1}\refsep \ifbibinteractionelse{\atbiblink[#1]}{{\referencingfalse\at[#1]}}} \def\bibdataref[#1]% {\bibalternative\v!left \firstreftrue\processcommalist[#1]\dobibdata \bibalternative\v!right} \def\dobibdata#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1}{\dotypesetapublication{#1}} {\unknownreference{#1}}} \let\bibnoneref\nocite %D \macros{bibnumref} %D %D It makes sense to try and compress the argument list of %D \type{\bibnumref}. There are two things involved: the actual %D compression, and a sort routine. The idea is to store the %D found values in a new commalist called \type{\therefs}. %D But that is not too straight-forward, because \type{\in} is %D not expandable, %D so that the macro \type{\expandrefs} is needed. \def\expandrefs#1% {\bgroup \preparebibrefprefix \preparebibreflist{#1}% \global\bibreffoundfalse \def\setuplink##1% {\ifbibreffound\else \doifreferencefoundelse {##1} {\global\bibreffoundtrue \@EA\doglobal\@EA\addtocommalist\@EA{\reftypet}\therefs }% {}\fi}% \processcommacommand[\bibreflist]\setuplink \ifbibreffound \else \showmessage\m!publications{5}{#1 unknown}% \doglobal\addtocommalist{0}\therefs\fi \egroup } %D But at least the actual sorting code is simple (note that sorting %D a list with exactly one entry fails to return anything, which %D is why the \type{\ifx} is needed). \def\bibnumref[#1]% {\bibalternative\v!left \penalty\!!tenthousand \processcommalist[#1]\addthisref \firstreftrue \ifbibcitecompress \glet\therefs\empty \processcommalist[#1]\expandrefs \sortcommacommand[\therefs]\donumericcompare \ifx\empty\sortedcommalist\else \let\therefs\sortedcommalist \fi \compresscommacommandnrs[\therefs]% \processcommacommand[\compressedlist]\verysimplebibnumref \else \processcommalist[#1]\dosimplebibnumref \fi \bibalternative\v!right} \def\dosimplebibnumref #1% {\refsep\ifbibinteractionelse {\inbiblink[#1]}{{\referencingfalse\inbiblink[#1]}}} \def\verysimplebibnumref#1{\doverysimplebibnumref#1} \def\doverysimplebibnumref#1#2% {\refsep \ifcase#1\relax \unknownreference{#1}\else \def\tempa{#2}\ifx\empty\tempa#1\else#1\bibalternative\c!inbetween#2\fi \fi} %D By request from Sanjoy. This makes it easier to implement %D \type{\citeasnoun}. \def\bibauthornumref[#1]% {\getcommalistsize[#1]% \global\bibitemcounter\commalistsize \firstreftrue \processcommalist[#1]\dobibauthornumref } \def\dobibauthornumref#1% {\addthisref{#1}\refsep \doifbibreferencefoundelse{#1} {\getvalue{pbda-#1}% \bibalternative\c!inbetween \bibalternative\v!left \ifbibinteractionelse{\inbiblink[#1]} {{\referencingfalse\inbiblink[#1]}}% \bibalternative\v!right} {\unknownreference{#1}}} %D And some defaults are loaded from bibl-apa: \setuppublications [\v!month\v!conversion=, \c!alternative=apa] \appendtoks \preloadbiblist \to \everystarttext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-9.lua0000644000175000017500000000457411571377075024132 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-8859-9'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF } context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-68.tex0000644000175000017500000000530711754241457023713 0ustar norbertnorbert%D \module %D [ file=s-pre-68, %D version=2009.08.28, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 68, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[pre-60,abr-02] % style \setuppapersize [S66][S66] \setuplayout [height=middle, width=middle, header=0pt, footer=0pt, backspace=2cm, topspace=2cm] \setupinteraction [state=start, click=no] \definecolor[maincolor][r=.4] \startreusableMPgraphic{page} StartPage ; fill Page enlarged 5mm withcolor \MPcolor{maincolor} ; StopPage ; \stopreusableMPgraphic \startreusableMPgraphic{next} fill ultriangle scaled .15PaperWidth withcolor white ; \stopreusableMPgraphic \startreusableMPgraphic{last} fill boundingbox(ultriangle scaled .15PaperWidth) withcolor white ; \stopreusableMPgraphic \startuniqueMPgraphic{bullit} fill ultriangle scaled 2ExHeight withcolor white ; \stopuniqueMPgraphic \definelayer [extra] [width=\paperwidth, height=\paperheight] \defineoverlay [page] [\reuseMPgraphic{page}] \setupbackgrounds [page] [background={page,extra}] \setupcolors [state=start, textcolor=white] \setuphead [chapter] [style=\bfc] \definehead[Title][title] \definesymbol[MyBullet][\uniqueMPgraphic{bullit}] \setupitemgroup[itemize][each][symbol=MyBullet] \usetypescript[cambria] \setupbodyfont[cambria,14.4pt] % interface \def\StartItems {\begingroup \StartSteps \startitemize \def\StartItems{\startitemize\def\StopItems{\stopitemize}}} \def\StopItems {\FlushStep \stopitemize \NextPageSymbol \StopSteps \endgroup} \def\Item {\def\Item{\FlushStep\item} \item} \def\NextPageSymbol {\setlayer [extra] [preset=rightbottom,offset=2mm] {\ifnum\realpageno=\lastpage \reuseMPgraphic{last}% \else\ifnum\realpageno>1 \reuseMPgraphic{next}% \fi\fi \FlushStep}} \def\TitlePage#1#2% {\startstandardmakeup[bottom=,top=] \scale[width=\textwidth]{\framed[align=flushleft,foregroundstyle=\bf,frame=off]{#1}} \vfilll \hfill\scale[width=.5\textwidth]{\framed[align=flushright,foregroundstyle=\bf,frame=off]{#2}} \stopstandardmakeup} \doifnotmode{demo}{\endinput} \starttext \TitlePage{I'm running\\out of examples}{Hans Hagen\\Someplace, 2031} \Title{Alpha} \StartItems \Item one \Item two \Item three \StopItems \Title{Beta} \StartItems \Item four \Item five \Item six \StopItems \Title{Gamma} \StartItems \Item seven \Item eight \Item nine \StopItems \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/core-def.mkiv0000644000175000017500000000742112134352503024247 0ustar norbertnorbert%D \module %D [ file=core-def, %D version=2002.05.07, %D title=\CONTEXT\ Core Macros, %D subtitle=Defaults, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Defaults} %D Here we collect settings that cannot be done earlier due to %D depedencies. More code will moved to this module later. \unprotect \usesymbols[mis,nav] % no longer mvs preloaded \setupsymbolset[navigation 1] \setupinteraction[\c!symbolset=navigation 1] % what a mess \everypar \emptytoks \neverypar \emptytoks \appendtoks % \flushnotes \page_otr_command_synchronize_side_floats % an otr specific command \checkindentation \showparagraphnumber \restoreinterlinepenalty % \flushmargincontents % \flushcommentanchors \flushnotes \synchronizenotes \OTRSETshowstatus \registerparoptions % \flushsyncpositions \flushpostponednodedata \typo_delimited_repeat \insertparagraphintro \to \everypar \appendtoks \flushnotes \to \everydisplay \appendtoks \adjustsidefloatdisplaylines \to \everydisplay % \appendtoks % \flushpostponednodedata % \to \neverypar % \appendtoks % \flushsyncpositions % \to \everyheadstart % \appendtoks % \flushsyncresets % \to \everyendoftextbody \appendtoks \ignorespaces \to \everybeginofpar \appendtoks \removeunwantedspaces % \strut % option ? % \flushsyncresets % \setlastlinewidth % gone, will be done in lua \endgraf \to \everyendofpar % initialization order: \ifdefined\font_preloads_at_every_job \else \let\font_preloads_at_every_job \relax \fi \ifdefined\font_preloads_at_start_text \else \let\font_preloads_at_start_text\relax \fi \ifdefined\font_preloads_at_stop_text \else \let\font_preloads_at_stop_text \relax \fi \appendtoks \font_preloads_at_start_text \to \everystarttext \appendtoks \font_preloads_at_stop_text \to \everystoptext \appendtoks \showcontextbanner \initializenewlinechar \calculatecurrenttime \loadsystemfiles % \loadoptionfile % obsolete, but nice to keep as reference of when/how \job_options_get_commandline % expands some commands \job_options_get_ctxfile % might expand some commands \job_options_set_filenames \font_preloads_at_every_job \settopskip % brrr \initializemainlanguage \initializexmlprocessing % is this still needed? \initializepagebackgrounds \initializepagecounters % \directsetup{*runtime:options}% % obsolete as the option file is replaced by a more direct mechanism % \directsetup{*runtime:modules}% % obsolete as the option file is replaced by a more direct mechanism \job_options_set_modes \job_options_set_modules \job_options_set_environments \to \everyjob \appendtoks \ifarrangingpages\poparrangedpages\fi \to \everybye \prependtoks \resetallattributes \to \everybeforeoutput \appendtoks \the\everybackendshipout \to \everyshipout \prependtoks \the\everylastbackendshipout \to \everylastshipout \prependtoks \lefttoright \to \everybeforeoutput % temporary here: \unexpanded\def\arg{\mathortext\normalmatharg\normaltextarg} % might move to \everydump or even disappear: \nonknuthmode % brrr \appendtoks \synchronizegloballinespecs \synchronizelocallinespecs \to \everysetupbodyfont \appendtoks \synchronizelocallinespecs \to \everyswitchtobodyfont % who knows % \appendtoks % \resetcharacterspacing % \to \everyhyphenatedurl % \setbreakpoints[compound] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-fld.mkii0000644000175000017500000012142411754241457024272 0ustar norbertnorbert%D \module %D [ file=scrn-fld, %D version=1997.05.18, %D title=\CONTEXT\ Screen Macros, %D subtitle=Fields, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \appendtocommalist versus \addtocommalist % % * as default trigger in radiofields ? % % beware: weblink plugin truncates on length, while save as doesn't; % more precise: (1) first time right string is sent, (2) % internal string truncated, (3) second time truncated % string is sent. \writestatus{loading}{ConTeXt Screen Macros / Fields} % messages \definemessageconstant{fields} \unprotect %D First we hook fields into the (viewer based) layering mechanism %D (implemented as properties). \ifx\currentlayerproperty\undefined\else \let\currentlayerproperty\empty\fi \appendtoks \doif\@@iafieldlayer\v!auto {\def\@@iafieldlayer{\currentlayerproperty}}% \to \everysetupinteraction \setupinteraction [\c!fieldlayer=\v!auto] % auto by default %D Internal command, linked to \type{\definesymbol}. \def\dogetfieldsymbol#1% {\getobject{SYM}{#1}} \def\dopresetfieldsymbol#1% {\checkobjectreferences \doifobjectfoundelse{SYM}{#1} {} {\settightobject{SYM}{#1}\hbox{\symbol[#1]}% \flushatshipout {\setbox0\hbox{\hskip-\maxdimen\getobject{SYM}{#1}}% \smashbox0\box0}}} \def\presetfieldsymbols[#1]% slow {\def\dopresetfieldsymbols##1% {\processcommalist[##1]\dopresetfieldsymbol}% \@EA\processcommalist\@EA[#1]\dopresetfieldsymbols} \def\definedefaultsymbols {\definesymbol[defaultyes][$\times$]% \definesymbol[defaultno][$\cdot$]} \def\resetfieldsymbol[#1]% for experimental usage only {\resetobject{SYM}{#1}} %D The interface to the specials. DEFAULT NOG ANDERS \def\preparefieldvariables % evt \def's at the outer level (test) or \edef's here for fast testing {\let\@@DriverFieldNumber \@@fdn \let\@@DriverFieldStyle \@@fdstyle \let\@@DriverFieldColor \@@fdcolor \let\@@DriverFieldBackgroundColor\@@fdfieldbackgroundcolor \let\@@DriverFieldFrameColor \@@fdfieldframecolor \let\@@DriverFieldLayer \@@fdfieldlayer \let\@@DriverFieldOption \@@fdoption \let\@@DriverFieldAlign \@@fdalign \let\@@DriverFieldClickIn \@@fdclickin \let\@@DriverFieldClickOut \@@fdclickout \let\@@DriverFieldRegionIn \@@fdregionin \let\@@DriverFieldRegionOut \@@fdregionout \let\@@DriverFieldAfterKey \@@fdafterkey \let\@@DriverFieldFormat \@@fdformat \let\@@DriverFieldValidate \@@fdvalidate \let\@@DriverFieldCalculate \@@fdcalculate \let\@@DriverFieldFocusIn \@@fdfocusin \let\@@DriverFieldFocusOut \@@fdfocusout} % todo : remove arguments, consider DriverField a namespace \def\presetlinefield {\preparefieldvariables \dopresetlinefield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldNumber} {\@@DriverFieldStyle,\@@DriverFieldColor,\@@DriverFieldBackgroundColor,\@@DriverFieldFrameColor} {\@@DriverFieldOption} {\@@DriverFieldAlign} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presettextfield {\preparefieldvariables \dopresettextfield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldNumber} {\@@DriverFieldStyle,\@@DriverFieldColor,\@@DriverFieldBackgroundColor,\@@DriverFieldFrameColor} {\@@DriverFieldOption} {\@@DriverFieldAlign} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetchoicefield {\preparefieldvariables \dopresetchoicefield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldStyle,\@@DriverFieldColor,\@@DriverFieldBackgroundColor,\@@DriverFieldFrameColor} {\@@DriverFieldOption} {\@@DriverFieldValues} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetpopupfield {\preparefieldvariables \dopresetpopupfield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldStyle,\@@DriverFieldColor,\@@DriverFieldBackgroundColor,\@@DriverFieldFrameColor} {\@@DriverFieldOption} {\@@DriverFieldValues} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetcombofield {\preparefieldvariables \dopresetcombofield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldStyle,\@@DriverFieldColor,\@@DriverFieldBackgroundColor,\@@DriverFieldFrameColor} {\@@DriverFieldOption} {\@@DriverFieldValues} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetcheckfield {\preparefieldvariables \presetfieldsymbols[\@@DriverFieldValues]% \dopresetcheckfield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldOption} {\@@DriverFieldValues} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetpushfield {\preparefieldvariables %\edef\@@DriverFieldValues{{\@@DriverFieldValues}}% makes sure {a,b,c} is passed \presetfieldsymbols[\@@DriverFieldValues]% \dopresetpushfield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldOption} {\@@DriverFieldValues} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetradiofield {\preparefieldvariables \presetfieldsymbols[\@@DriverFieldValues]% \dopresetradiofield {\@@DriverFieldName} {\@@DriverFieldWidth} {\@@DriverFieldHeight} {\@@DriverFieldDefault} {\@@DriverFieldOption} {\@@DriverFieldRoot} {\@@DriverFieldValues} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\presetradiorecord {\preparefieldvariables \dopresetradiorecord {\@@DriverFieldName} {\@@DriverFieldDefault} {\@@DriverFieldOption} {\@@DriverFieldKids} {\@@DriverFieldClickIn,\@@DriverFieldClickOut,\@@DriverFieldRegionIn,\@@DriverFieldRegionOut,% \@@DriverFieldAfterKey,\@@DriverFieldFormat,\@@DriverFieldValidate,\@@DriverFieldCalculate,% \@@DriverFieldFocusIn,\@@DriverFieldFocusOut}} \def\setfieldmodes#1#2#3% {\xdef\@@DriverFieldMode{#1}% % 0 1 2 3 \xdef\@@DriverFieldFree{#2}% % 0 1 \xdef\@@DriverFieldAuto{#3}} % 0 1 \newevery\everysetfield\relax \def\doiffieldelse#1{\doifdefinedelse{fielddata#1}} \def\setfield#1#2#3#4#5#6#7#8#9% {\bgroup \doglobal\increment\numberoffields \iftracefields \doglobal\addtocommalist{#1}\collectedfields \fi \the\everysetfield \setxvalue{fielddata#1}% kortere tag #7 needs expansion etc {\noexpand\dosetfield{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}% \egroup} \def\dosetfield#1#2#3#4#5#6#7#8#9% {\xdef\@@DriverFieldName {#1}% \xdef\@@DriverFieldType {#2}% \xdef\@@DriverFieldRoot {#3}% \xdef\@@DriverFieldParent {#4}% \xdef\@@DriverFieldKids {#5}% \xdef\@@DriverFieldGroup {#6}% \setfieldmodes #7% \bgroup \def\par{\string\n\string\n}% \xdef\@@DriverFieldValues {#8}% \xdef\@@DriverFieldDefault{#9}% \egroup} \def\changefield#1% {\setfield{#1}\@@DriverFieldType\@@DriverFieldRoot\@@DriverFieldParent\@@DriverFieldKids\@@DriverFieldGroup {\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}\@@DriverFieldValues\@@DriverFieldDefault} \def\getfield#1% name {\doifundefinedelse{fielddata#1} {\dosetfield{#1}\empty\empty\empty\empty\empty{\empty00}\empty\empty} {\getvalue{fielddata#1}}} \newif\iftracefields \tracefieldsfalse \let\tracefields\tracefieldstrue \def\doshowfields[#1]% todo: tabulate van maken en runtime {\bgroup \switchtobodyfont[8pt,tt]% \doifsomething{#1}{\def\collectedfields{#1}}% \ifx\collectedfields\empty \par specify [fieldlist] or say \type{\tracefieldstrue} first\par \else \def\normalizedfieldmode##1##2##3% {\ifcase0##2 \else\sl\fi \ifcase0##1 loner\or parent\or clone\or copy\fi}% \def\dosetfield##1##2##3##4##5##6##7##8##9% {##1&##2&##3&##4&##5&##6&\normalizedfieldmode##7&##8&##9\cr}% \halign {&##\strut\hss\quad\cr \noalign{\hrule}% NAME &TYPE &ROOT & PARENT&KIDS &GROUP & MODE &VALUES&DEFAULT\cr \noalign{\hrule}% \@EA\globalprocesscommalist\@EA[\collectedfields]\getfield \noalign{\hrule}}% \fi \egroup} \def\showfields {\dosingleempty\doshowfields} \def\dologfields[#1]% {\bgroup \immediate\openout\scratchwrite=fields.log \doifsomething{#1}{\def\collectedfields{#1}}% \ifx\colledtedfields\empty \immediate\write\scratchwrite{use \tracefieldstrue}% \else \def\normalizedfieldmode##1##2##3% {\edef\@@DriverFieldMode {\ifcase##1 loner \or parent \or clone \or copy \fi \ifcase##2 \else(done)\fi}}% \def\dosetfield##1##2##3##4##5##6##7##8##9% {\normalizedfieldmode##7% \immediate\write\scratchwrite {N=##1 / T=##2 / R=##3 / P=##4 / K=##5 / G=##6 / M=\@@DriverFieldMode\space/ V=##8 / D=##9}}% \processcommacommand[\collectedfields]\getfield \fi \immediate\closeout\scratchwrite \egroup} \def\logfields {\dosingleempty\doLogFields} %D \starttyping %D \definefield [name] [type] [group] [values] [default] %D %D \definefield [WWWW] [text] [textsetup] [default text] %D \definefield [XXXX] [push] [pushsetup] [yes,no] [yes] %D \definefield [XXXX] [check] [checksetup] [yes,no] [yes] %D \definefield [YYYY] [combo] [combosetup] [a,b,c,d] [b] %D \definefield [ZZZZ] [radio] [radiosetup] [W,X,Y,Z] [Y] %D %D \definesubfield [W] [subsetup] [p,q] %D \definesubfield [X,Y] [subsetup] [p,r] %D \definesubfield [Z] [subsetup] [y,z] %D %D evt \definemainfield ... wanneer geplaatst voor subs gegeven %D %D \clonefield [XXXX] [XX,YY] [mysetup] [on,off] %D \clonefield [Z] [AA,BB] [somesetup] [true,false] %D \clonefield [Z] [CC,DD] [anothersetup] %D %D \copyfield [XXXX] [PP,QQ,RR] %D %D \field[XXXX] %D \fitfield[XXXX] %D \stoptyping %D %D Beware, in \MKII\ we don't support autocloning for radiofields. \newif\ifdefinemainfield \definemainfieldfalse %D We need to keep track of cloned (related) fields and so by %D maintaining lists of field clones. %D %D The first alternative used a two pass data list and was %D implemented as follows: %D %D \starttyping %D \def\getmainfieldkids#1% %D {\let\@@DriverFieldKids\empty %D \ifdefinemainfield %D \definetwopasslist{fld:#1}% defined by system %D \doloop %D {\gettwopassdata{fld:#1}% %D \iftwopassdatafound %D %\addtocommalist\twopassdata\@@DriverFieldKids %D \appendtocommalist\twopassdata\@@DriverFieldKids %D \else %D \exitloop %D \fi}% %D \fi} %D \stoptyping %D %D However, the next alternative is much faster when we have %D a field with thousands of clones, something not that %D imaginary. %D %D \starttyping %D \def\getmainfieldkids#1% %D {\let\@@DriverFieldKids\empty %D \ifdefinemainfield %D \definetwopasslist{fld:#1}% runtime defined by system %D \getnamedtwopassdatalist{fld:#1}\@@DriverFieldKids %D \fi} %D \stoptyping %D %D The data is written by file using: %D %D \starttyping %D \newcounter\nofmainfieldkids %D %D \def\setmainfieldkid#1#2% %D {\doglobal\increment\nofmainfieldkids %D \savetwopassdata{fld:#1}{\nofmainfieldkids}{#2}} %D \stoptyping %D %D The trade of of this mechanism is that for each cloned or %D copied field, the uitlity file is to be read in order to %D fetch the data. %D %D The next, much faster alternative uses a dedicated % %D reference mechanism. \def\setmainfieldkid#1#2% {\immediatewriteutilitycommand{\fieldreference{#1}{#2}}} \def\checkfieldreferences {\startnointerference \protectlabels \doutilities{fieldreferences}\jobname\empty\relax\relax \global\let\checkfieldreferences\relax \stopnointerference} \def\setfieldreferences {\def\fieldreference##1##2% {\ifundefined{\r!widget##1}% \setxvalue{\r!widget##1}{##2}% \else \edef\!!stringa{\getvalue{\r!widget##1}}% \setxvalue{\r!widget##1}{\!!stringa,##2}% \fi}} \def\resetfieldreferences {\let\fieldreference\gobbletwoarguments} \def\getmainfieldkids#1% {\checkfieldreferences \ifdefinemainfield \doifundefinedelse{\r!widget#1}% {\let\@@DriverFieldKids\empty} {\@EA\let\@EA\@@DriverFieldKids\csname\r!widget#1\endcsname}% \else \let\@@DriverFieldKids\empty \fi} \resetfieldreferences %D Of course it costs a few more tokens to implement, but it's %D worth the memory: running for instance the 2000 page %D english examns publishing on demand document went down from %D 1350 seconds to less than 950 on a 650 Mhz pentium. \def\definefield {\definemainfieldfalse\doquintupleempty\dodefinefield} \def\definemainfield {\definemainfieldtrue \doquintupleempty\dodefinefield} \let\collectedfields\empty \newcounter\numberoffields \newcounter\totalnumberoffields \def\savenumberoffields {\ifcase\numberoffields\relax\else \savecurrentvalue\totalnumberoffields\numberoffields \fi} \appendtoks \savenumberoffields \to \everybye % \everylastshipout % \def\presetfieldreferences % {\ifnum\totalnumberoffields>0 % \definereference[AtOpenInitializeForm][\v!ResetForm]% % \fi} % % \definereference[AtOpenInitializeForm][\v!geen] % % \appendtoks \presetfieldreferences \to \everycheckreferences \def\dodefinefield[#1][#2][#3][#4][#5]% {\ifsecondargument \edef\currentfieldname{#1}% just in case we're inside a loop \doifundefinedelse{define#2field} {\writestatus\m!fields{unknown field type #2}} {\doifundefined{fielddata\currentfieldname} {\getmainfieldkids\currentfieldname \ifdefinemainfield \ifx\@@DriverFieldKids\empty \let\@@DriverFieldMode\fieldlonermode \else \let\@@DriverFieldMode\fieldparentmode \fi \def\@@DriverFieldAuto{1}% \else \let\@@DriverFieldMode\fieldlonermode \def\@@DriverFieldAuto{0}% \fi \def\@@DriverFieldFree{0}% \getvalue{define#2field}{\currentfieldname}{#2}{#3}{#4}{#5}}}% \else \writestatus\m!fields{pass fieldname and fieldtype}% \fi} \def\definelinefield#1#2#3#4#5% {\setfield{#1}{#2}{}{}{\@@DriverFieldKids}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{}{#4}} \let\definetextfield=\definelinefield \def\definechoicefield#1#2#3#4#5% {\doifelsenothing{#4} {\def\@@DriverFieldValues{yes,no}} {\def\@@DriverFieldValues{#4}}% \doifelsenothing{#5} {\dogetcommacommandelement2\from\@@DriverFieldValues \to\@@DriverFieldDefault \dogetcommacommandelement1\from\@@DriverFieldDefault\to\@@DriverFieldDefault} {\def\@@DriverFieldDefault{#5}}% \setfield{#1}{#2}{}{}{\@@DriverFieldKids}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{\@@DriverFieldValues}{\@@DriverFieldDefault}} \let\definepopupfield=\definechoicefield \let\definecombofield=\definechoicefield %\def\definecheckfield#1#2#3#4#5% % {\doifelsenothing{#4} % {\definedefaultsymbols % \def\@@DriverFieldValues{defaultyes}} % {\def\@@DriverFieldValues{#4}}% % \doifelsenothing{#5} % {\dogetcommacommandelement2\from\@@DriverFieldValues\to\@@DriverFieldDefault % \dogetcommacommandelement1\from\@@DriverFieldDefault\to\@@DriverFieldDefault} % {\def\@@DriverFieldDefault{#5}}% % \setfield{#1}{#2}{}{}{\@@DriverFieldKids}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{\@@DriverFieldValues}{\@@DriverFieldDefault}} %D Since these fields have an on/off state only, we pass 1/0 %D to the driver as default values. \def\definecheckfield#1#2#3#4#5% {\doifelsenothing{#4} {\definedefaultsymbols \def\@@DriverFieldValues{defaultyes}} {\def\@@DriverFieldValues{#4}}% \doifelsenothing{#5} {\def\@@DriverFieldDefault{2}} {\dogetcommacommandelement1\from\@@DriverFieldValues\to\@@DriverFieldDefault \doifinstringelse{#5}{\@@DriverFieldDefault} {\def\@@DriverFieldDefault{1}} {\def\@@DriverFieldDefault{0}}}% \setfield {#1}{#2}{}{}{\@@DriverFieldKids}{#3}% {\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}% {\@@DriverFieldValues}{\@@DriverFieldDefault}} \let\definepushfield=\definecheckfield \def\defineradiofield#1#2#3#4#5% {\iffourthargument \doifelsenothing{#5} {\dogetcommacommandelement1\from#4\to\SavedFieldDefault \dogetcommacommandelement1\from\SavedFieldDefault\to\SavedFieldDefault} {\def\SavedFieldDefault{#5}}% % when opt works % \@EA\beforesplitstring\SavedFieldDefault\at=>\to\SavedFieldDefault \ifx\@@DriverFieldKids\empty \setfield{#1}{#2}{}{}{#4}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{}{\SavedFieldDefault}% \else \setfield{#1}{#2}{}{}{#4,\@@DriverFieldKids}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{}{\SavedFieldDefault}% \fi % \def\docommand##1% {\doifelse{##1}\SavedFieldDefault {\def\@@DriverFieldDefault{##1}}% {\let\@@DriverFieldDefault\empty}% \setfield{##1}{#2}{#1}{}{}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{}{\@@DriverFieldDefault}}% % when opt works % \def\docommand##1% % {\@EA\beforesplitstring##1\at=>\to\FieldValue % \doifelse\FieldValue\SavedFieldDefault % {\let\@@DriverFieldDefault\FieldValue}% % {\let\@@DriverFieldDefault\empty}% % \setfield\FieldValue{#2}{#1}{}{}{#3}{\@@DriverFieldMode\@@DriverFieldFree\@@DriverFieldAuto}{}{\@@DriverFieldDefault}}% \processcommalist[#4]\docommand \else \writestatus\m!fields{pass values too}% \fi} \def\definesubfield {\dotripleempty\dodefinesubfield} \def\dodefinesubfield[#1][#2][#3]% for the moment only radio ones {\ifsecondargument \def\docommand##1% {\getfield{##1}% \ifx\@@DriverFieldType\empty \writestatus\m!fields{unknown field ##1}% to do \else \doifsomething{#2} {\edef\@@DriverFieldGroup{#2}}% \doifelsenothing{#3} {\definedefaultsymbols \def\@@DriverFieldValues{defaultyes}} {\def\@@DriverFieldValues{#3}}% \changefield{##1}% \fi}% \processcommalist[#1]\docommand \else \writestatus\m!fields{pass fieldname, setupgroup, values and default}% \fi} \def\doclonefield[#1][#2][#3][#4]% parent children setupgroup values {\ifsecondargument \getfield{#1}% \iftrialtypesetting\else \ifx\@@DriverFieldType\empty \writestatus\m!fields{unknown field #1}% \else \let\@@DriverFieldMode\fieldparentmode %\def\docommand##1{\addtocommalist{##1}\@@DriverFieldKids}% \def\docommand##1{\appendtocommalist{##1}\@@DriverFieldKids}% \processcommalist[#2]\docommand \changefield{#1}% \let\@@DriverFieldAutoParent\@@DriverFieldAuto \def\@@DriverFieldParent{#1}% \let\@@DriverFieldKids\empty \let\@@DriverFieldRoot\empty \let\@@DriverFieldMode\fieldchildmode \def\@@DriverFieldFree{0}% \def\@@DriverFieldAuto{0}% \doifsomething{#3}{\edef\@@DriverFieldGroup{#3}}% \doifsomething{#4}{\edef\@@DriverFieldValues{#4}}% \def\docommand##1% {\ifcase\@@DriverFieldAutoParent\else \setmainfieldkid{\@@DriverFieldParent}{##1}% \fi \changefield{##1}}% \processcommalist[#2]\docommand \fi \fi \else \writestatus\m!fields{pass parent field and clones}% \fi} \def\clonefield {\doquadrupleempty\doclonefield} \def\docopyfield[#1][#2]% parent children {\ifsecondargument \getfield{#1}% \iftrialtypesetting\else \ifx\@@DriverFieldType\empty \writestatus\m!fields{unknown field #1}% \else \let\@@DriverFieldMode\fieldparentmode %\def\docommand##1{\addtocommalist{##1}\@@DriverFieldKids}% \def\docommand##1{\appendtocommalist{##1}\@@DriverFieldKids}% \processcommalist[#2]\docommand \changefield{#1}% \let\@@DriverFieldAutoParent\@@DriverFieldAuto \def\@@DriverFieldParent{#1}% \let\@@DriverFieldKids\empty \let\@@DriverFieldRoot\empty \let\@@DriverFieldMode\fieldcopymode \def\@@DriverFieldFree{0}% \def\@@DriverFieldAuto{0}% \def\docommand##1% {\ifcase\@@DriverFieldAutoParent\else \setmainfieldkid{\@@DriverFieldParent}{##1}% \fi \changefield{##1}}% \processcommalist[#2]\docommand \fi \fi \else \writestatus\m!fields{pass parent field and copies}% \fi} \def\copyfield{\dodoubleempty\docopyfield} \unexpanded\def\field {\dotripleempty\dofield[\dohandlefield]} \unexpanded\def\fitfield{\dotripleempty\dofield[\dohandlefitfield]} \def\dofield[#1][#2][#3]% {\iffirstargument \bgroup \getfield{#2}% \ifsecondargument \def\@@DriverFieldLabel{#3}% \else \let\@@DriverFieldLabel\@@DriverFieldName \fi \ifx\@@DriverFieldType\empty \writestatus\m!fields{unknown field #2}% \else\ifcase\@@DriverFieldFree\relax \doifdefinedelse{\strippedcsname\setupfield\@@DriverFieldGroup} {\let\dosetupfield=#1\getvalue{\strippedcsname\setupfield\@@DriverFieldGroup}} {#1[\@@DriverFieldName][\v!label,\v!frame,\v!horizontal][][][]}% \iftrialtypesetting\else \def\@@DriverFieldFree{1}% \changefield{#2}% \fi \else\ifcase\@@DriverFieldAuto\relax % \writestatus\m!fields{field #2 already typeset}% \else % \writestatus\m!fields{field #2 automatically copied}% \nextsystemfield \copyfield[\@@DriverFieldName][\currentsystemfield]% \dotripleempty\dofield[#1][\currentsystemfield][#3]% get the if's right \fi\fi\fi \egroup \fi} \def\typesetfield {\useJSscripts[fld]% \ifx\@@DriverFieldRoot\empty \else \let\@@SavedFieldName\@@DriverFieldName \getfield\@@DriverFieldRoot \ifcase\@@DriverFieldFree\relax \dosetfieldstatus\@@DriverFieldMode\@@DriverFieldParent\@@DriverFieldKids\@@DriverFieldRoot \dopresetrecord \iftrialtypesetting\else \def\@@DriverFieldFree{1}% \changefield\@@DriverFieldName \fi \fi \getfield\@@SavedFieldName \fi \ifx\@@DriverFieldKids\empty \donefalse \else \donetrue \fi \ifdone \let\@@DriverFieldParent\@@DriverFieldName %\addtocommalist\@@DriverFieldParent\@@DriverFieldKids \appendtocommalist\@@DriverFieldParent\@@DriverFieldKids \dosetfieldstatus\@@DriverFieldMode\@@DriverFieldParent\@@DriverFieldKids\@@DriverFieldRoot \dopresetfield \let\@@DriverFieldMode\fieldchildmode \fi \dosetfieldstatus\@@DriverFieldMode\@@DriverFieldParent\@@DriverFieldKids\@@DriverFieldRoot \dopresetfield} \def\dopresetfield {\iftrialtypesetting\else\iflocation\getvalue{preset\@@DriverFieldType field}\fi\fi} \def\dopresetrecord {\iftrialtypesetting\else\iflocation\getvalue{preset\@@DriverFieldType record}\fi\fi} \def\dodefinethefieldset[#1][#2]% {\dodefinefieldset{#1}{#2}} \def\definefieldset% {\dodoubleargument\dodefinethefieldset} \def\normaldodosetupfield[#1][#2][#3][#4][#5]% {\doifdefinedelse{\strippedcsname\setupfield#1} {\pushmacro\dosetupfield \def\dosetupfield[##1][##2][##3][##4][##5]% {\setvalue{\strippedcsname\setupfield#1}{\dosetupfield[#1][##2,#2][##3,#3][##4,#4][##5,#5]}}% \getvalue{\strippedcsname\setupfield#1}% \popmacro\dosetupfield} {\setvalue{\strippedcsname\setupfield#1}{\dosetupfield[#1][#2][#3][#4][#5]}}} \let\dodosetupfield\normaldodosetupfield \def\donosetupfield[#1][#2][#3][#4][#5]% {\setvalue{\strippedcsname\setupfield#1}{\dosetupfield[#1][#2][#3][#4][#5]}} \def\dosetupfield[#1][#2][#3][#4][#5]% {\iffifthargument \def\docommand##1{\dodosetupfield[##1][#2][#3][#4][#5]}% \processcommalist[#1]\docommand \else\ifthirdargument \def\docommand##1{\dodosetupfield[##1][#2][][][#3]}% \processcommalist[#1]\docommand \else\ifsecondargument \doifelse{#2}\v!reset {\def\docommand##1{\donosetupfield[#1][][][][]}} {\def\docommand##1{\dodosetupfield[##1][][][][#2]}}% \processcommalist[#1]\docommand \else\iffirstargument \def\docommand##1{\dodosetupfield[##1][][][][]}% \processcommalist[#1]\docommand \else \writestatus\m!fields{provide either 1, 2, 3 or 5 arguments}% \fi\fi\fi\fi} \def\setupfield {\doquintupleempty\dosetupfield} \def\dosetupfields[#1][#2][#3][#4]% {\ifsecondargument \def\dodosetupfield[##1][##2][##3][##4][##5]% {\doifdefinedelse{\strippedcsname\setupfield##1} {\def\dosetupfield[####1][####2][####3][####4][####5]% {\setvalue{\strippedcsname\setupfield##1}{\dosetupfield[##1][#1,####2,##2][#2,####3,##3][#3,####4,##4][#4,####5,##5]}}% \getvalue{\strippedcsname\setupfield##1}} {\setvalue{\strippedcsname\setupfield##1}{\dosetupfield[##1][#1,##2][#2,##3][#3,##4][#4,##5]}}}% \else\iffirstargument \doifelse{#1}\v!reset {\resetfields} {\setupfields[][][][#1]}% checken \else \writestatus\m!fields{provide either 1 or 4 arguments}% \fi\fi} \def\setupfields {\doquadrupleempty\dosetupfields} \def\resetfields {\let\dodosetupfield\normaldodosetupfield} % \setupfields[\v!reset] % opties: veld, label, kader, vertikaal/horizontaal \newif\ifShowFieldLabel \newif\ifShowFieldFrame \newif\ifVerticalField \newif\ifHorizontalField % way to slow/complicated, we need some simple alternative % as well \def\dohandlefield[#1][#2][#3][#4][#5]% {\presetlocalframed[\??fd]% \processallactionsinset [#2] [ \v!reset=>\ShowFieldLabelfalse\ShowFieldFramefalse \HorizontalFieldfalse\VerticalFieldfalse, \v!label=>\ShowFieldLabeltrue, \v!frame=>\ShowFieldFrametrue, \v!horizontal=>\HorizontalFieldtrue, \v!vertical=>\VerticalFieldtrue]% \ifVerticalField \getparameters[\??fd] [\c!distance=\!!zeropoint,\c!inbetween=\vskip\@@localoffset, \c!align=\v!right,\c!width=20em]% \else\ifHorizontalField \getparameters[\??fd] [\c!distance=\@@localoffset,\c!inbetween=,\c!align=\c!left, \c!height=10ex]% \else \getparameters[\??fd] [\c!distance=\!!zeropoint,\c!inbetween=,\c!align=\c!left]% \fi\fi \getparameters[\??fd] [\c!n=,\c!before=,\c!after=\vss,\c!style=,\c!color=,#3]% \reshapeframeboxfalse % else ugly spacing \ifShowFieldFrame \localframed[\??fd][\c!strut=\v!no,\c!align=]\bgroup \else \vbox\bgroup \fi \dontcomplain \ifShowFieldLabel \setbox0\hbox {\reshapeframeboxtrue % else wrong dimensions \framed [\c!style=,\c!color=,\c!align=\c!right,#4] {\@@DriverFieldLabel}}% \fi \setbox2\hbox {\reshapeframeboxtrue % else wrong dimensions \ifVerticalField \setupframed[\c!height=6ex,\c!width=\hsize]% \else\ifHorizontalField \setupframed[\c!height=\vsize,\c!width=20em]% \else \setupframed[\c!height=2cm,\c!width=2cm]% \fi\fi \framed [\c!align=\v!right,\c!strut=\v!no,#5] {\getparameters [\??fd] [\c!color=,\c!style=,\c!align=\v!right,\c!option=, \c!clickin=,\c!clickout=,\c!regionin=,\c!regionout=, \c!afterkey=,\c!format=,\c!validate=,\c!calculate=, \c!focusin=,\c!focusout=, \c!fieldoffset=\!!zeropoint,\c!fieldbackgroundcolor=, \c!fieldframecolor=,\c!fieldlayer=\@@iafieldlayer,#5]% \scratchdimen\framedwidth \edef\@@DriverFieldWidth {\the\scratchdimen}% \scratchdimen\framedheight\edef\@@DriverFieldHeight{\the\scratchdimen}% \vfill \hbox{\lower\@@fdfieldoffset\hbox{\typesetfield}} \vss}}% \ifShowFieldLabel \ifVerticalField \vbox {\copy0 \@@fdinbetween \copy2}% \else \hbox {\vbox \ifdim\ht2>\ht0 to \ht2 \fi {\@@fdbefore \copy0 \@@fdafter}% \hskip\@@fddistance \vbox \ifdim\ht0>\ht2 to \ht0 \fi {\@@fdbefore \box2 \@@fdafter}}% \fi \else \box2 \fi \egroup} \chardef\fitfieldmode\plusone % 3 = best \def\dohandlefitfield[#1][#2][#3][#4][#5]% alleen check {\presetlocalframed[\??fd]% \localframed [\??fd] [\c!n=1024, % beware: weblink plug in truncates \c!strut=\v!no,\c!color=,\c!style=,\c!option=, \c!clickin=,\c!clickout=,\c!regionin=,\c!regionout=, \c!focusin=,\c!focusout=, \c!afterkey=,\c!format=,\c!validate=,\c!calculate=, \c!fieldoffset=\!!zeropoint,\c!fieldbackgroundcolor=, \c!fieldframecolor=,\c!fieldlayer=\@@iafieldlayer,#5,\c!align=] {\dogetcommacommandelement1\from\@@DriverFieldValues\to\@@DriverFieldValue \ifx\@@DriverFieldValue\empty \let\@@DriverFieldValue\@@DriverFieldDefault \fi \dopresetfieldsymbol\@@DriverFieldValue \setbox\scratchbox\hbox{\dogetfieldsymbol\@@DriverFieldValue}% \scratchdimen\wd\scratchbox \edef\@@DriverFieldWidth {\the\scratchdimen}% \scratchdimen\ht\scratchbox \edef\@@DriverFieldHeight{\the\scratchdimen}% \ifcase\fitfieldmode \typesetfield \or % 1 = ignore depth (original, assumed no depth, actually a bug) \vbox to \ht\scratchbox{\vfill\hbox to \wd\scratchbox{\typesetfield\hfill}\vss}% \or % 2 = add depth to height, but no depth in result \advance\scratchdimen\dp\scratchbox \edef\@@DriverFieldHeight{\the\scratchdimen}% \vbox to \ht\scratchbox{\vfill\hbox to \wd\scratchbox{\typesetfield\hfill}\vss}% \or % 3 = add depth to height, and apply depth to result \advance\scratchdimen\dp\scratchbox \edef\@@DriverFieldHeight{\the\scratchdimen}% \hbox to \wd\scratchbox{\lower\dp\scratchbox\hbox{\typesetfield}\hfill}% \fi}} %D Common stuff \newcounter\nofsystemfields \def\nextsystemfield {\doglobal\increment\nofsystemfields \def\currentsystemfield{sys::\nofsystemfields}} %D An example: \def\fillinfield {\dosingleempty\dofillinfield} \def\dofillinfield[#1]#2% {\dontleavehmode \hbox {\forgetall \setupfields[\v!reset]% \nextsystemfield \useJSscripts[ans]% \doifelsenothing{#1} {\def\therightanswer{#2}} {\def\therightanswer{#1}}% \setbox0\hbox{#2}% \setbox2\hbox{\therightanswer}% \dimen0=\ifdim\wd0>\wd2 \wd0 \else \wd2 \fi \advance\dimen0 .2em \definefield [\currentsystemfield][line][systemfield]% \setupfield [systemfield] [\c!n=1024, % beware: weblink plugin truncates \c!location=\v!low,\c!strut=\v!yes,\c!fieldoffset=0pt, \c!height=1.2\openlineheight,\c!width=\dimen0,\c!offset=\v!overlay, \c!style=,\c!align=\v!middle,\c!frame=\v!off, \c!color=red,\c!fieldbackgroundcolor=\s!white,\c!fieldframecolor=blue, \c!validate=JS(Check_Answer{\currentsystemfield,\therightanswer})]% \switchtobodyfont [\c!small]% \hbox to \wd0 {\copy0\hskip-\wd0\hss\field[\currentsystemfield]\hss}}} %D and another one: \def\tooltip {\dosingleempty\dotooltip} \def\dotooltip[#1]#2#3% {\bgroup \setupfields[\v!reset]% \useJSscripts[fld]% \setbox0\hbox {\dontcomplain \nextsystemfield \setbox0\hbox{#2}% \definesymbol [\currentsystemfield:txt] [{\inframed[\c!frame=\v!off,\c!background=\v!screen]{#3}}]% \setbox2\hbox{\symbol[\currentsystemfield:txt]}% \definefield [\currentsystemfield:txt][check] [dummy][\currentsystemfield:txt][\currentsystemfield:txt]% \setupfield [dummy] [\c!frame=\v!off, \c!regionout=JS(Hide_Field{\currentsystemfield:txt}), \c!option=\v!hidden]% \hbox to \zeropoint {\dimen0\wd2\advance\dimen0 -\wd0 \doifelse{#1}\v!left {\hskip-\dimen0} {\doif{#1}\v!middle {\hskip-.5\dimen0}}% \lower\openlineheight\hbox to \zeropoint {\fitfield[\currentsystemfield:txt]}}% \dimen0=\ifdim\wd0=\zeropoint 3em\else\wd0\fi \definesymbol [\currentsystemfield:but] [{\framed[\c!height=2ex,\c!width=\dimen0,\c!frame=\v!off]{}}]% \definefield [\currentsystemfield:but][push] [dummy][\currentsystemfield:but][\currentsystemfield:but]% \setupfield [dummy] [\c!frame=\v!off, \c!option=, \c!regionin=JS(Vide_Field{\currentsystemfield:txt}), \c!regionout=JS(Hide_Field{\currentsystemfield:txt}), \c!fieldlayer=\@@iafieldlayer]% \lower2ex\hbox to \zeropoint {\fitfield[\currentsystemfield:but]}% #2}% \ht0\strutht\dp0\strutdp\box0 \egroup} %D And one more: \def\definefieldstack {\dotripleargument\dodefinefieldstack} \def\dodefinefieldstack[#1][#2][#3]% name, symbols, settings {\doifundefined{fieldstack:#1} {\setgvalue{fieldstack:#1}{\dodofieldstack[#1][#2][#3]}}} \def\dodofieldstack[#1][#2][#3]% start=n, 0 == leeg {\bgroup \getparameters[\??fd][\c!start=1,#3]% \setupfields[\v!reset]% \definesymbol[\v!empty][]% \useJSscripts[fld][FieldStack]% \newcounter\stackedfieldnumber \def\dododofieldstack##1% {\increment\stackedfieldnumber \ifnum\stackedfieldnumber=\@@fdstart\relax \definefield[#1:\stackedfieldnumber][check][#1][##1,\v!empty][##1]% \else \definefield[#1:\stackedfieldnumber][check][#1][##1,\v!empty][\v!empty]% \fi}% \processcommalist[#2]\dododofieldstack \setupfield[#1][\v!reset]% added \setupfield[#1][\c!option=\v!readonly,#3]% #3 swapped \newcounter\stackedfieldnumber \def\dododofieldstack##1% {\doglobal\increment\stackedfieldnumber \fitfield[#1:\stackedfieldnumber]\egroup\bgroup}% \startoverlay \bgroup \globalprocesscommalist[#2]\dododofieldstack \egroup \stopoverlay \egroup} \def\dofieldstack[#1][#2][#3]% {\ifsecondargument \dodefinefieldstack[#1][#2][#3]\fieldstack[#1]% \else \getvalue{fieldstack:#1}\setgvalue{fieldstack:#1}{[#1]}% \fi} \def\fieldstack {\dotripleempty\dofieldstack} %D When submitting a form, we need to tell the driver module %D that we want \FDF\ or \HTML. \def\setupforms {\dodoubleargument\getparameters[\??fr]} \def\checksubmitform#1% {\setsubmitoutputformat\@@frmethod} \setexecutecommandcheck {submitform} \checksubmitform \setupforms [\c!method=HTML] %D Goodie: \def\definepushbutton % name optional setup {\dodoubleempty\dodefinepushbutton} \def\dodefinepushbutton[#1][#2]% name setup {\dododefinepushbutton{#1}{n}{push}% \dododefinepushbutton{#1}{r}{\symbol[psym:#1:n]}% \dododefinepushbutton{#1}{d}{\symbol[psym:#1:r]}% \setvalue{pushbutton:#1}{\dohandlepushbutton{#1}{#2}}} \def\dododefinepushbutton#1#2#3% {\doifsymboldefinedelse{psym:#1:#2}% \donothing{\definesymbol[psym:#1:#2][{#3}]}} \def\definepushsymbol {\dotripleargument\dodefinepushsymbol} \def\dodefinepushsymbol[#1][#2]% [#3] {\definesymbol[psym:#1:#2]} \def\dopushbutton[#1][#2]% {\executeifdefined{pushbutton:#1}\gobbleoneargument{#2}} \def\pushbutton {\dodoubleargument\dopushbutton} \def\dohandlepushbutton#1#2#3% identifier setup script {\bgroup \nextsystemfield \setupfield [pushbutton] [\c!frame=\v!overlay, \c!offset=\v!overlay, \c!clickout=#3,#2]% \definefield [\currentsystemfield] [push] [pushbutton] [psym:#1:n,psym:#1:r,psym:#1:d]% \fitfield [\currentsystemfield]% \egroup} % \def\do@@ampsh % {\dodoubleargument\dodo@@ampsh} % % \def\dodo@@ampsh[#1][#2]#3\\% % {\txt\pushbutton[#1][#2]\\}% % %\appendtoks \let\psh\do@@ampsh \to \everysetmenucommands \def\@@ampsh{\txt\pushbutton} \appendtoks \let\psh\@@ampsh \to \everysetmenucommands % \definepushbutton [reset] % % \definepushsymbol [reset] [n] [\uniqueMPgraphic{whatever}{color=green}] % \definepushsymbol [reset] [r] [\uniqueMPgraphic{whatever}{color=white}] % % \startinteractionmenu[bottom] % \psh [reset] [JS(reset_something)] \\ % \stopinteractionmenu %D Another goodie: % \definecolor[rollover:n][red] % \definecolor[rollover:r][green] % \definecolor[rollover:d][blue] \definepalet [rollover] [n=red, r=green, d=blue] \newcounter\nofrollovers \newcounter\nofrollbuttons \def\dorollbutton[#1][#2]#3[#4]% {\dontleavehmode \bgroup \doglobal\increment\nofrollovers \doglobal\increment\nofrollbuttons \unexpanded\def\dosetlocationbox[##1]##2[##3]% {\getparameters[##1][##3]% \definecolor[rollover][rollover:##2]% \doifelse{##2}{n}{\doifelsevalue{##1\c!alternative}\v!hidden\phantom\hbox}\hbox {\localframed[##1] [\c!framecolor=rollover,\c!backgroundcolor=rollover,\c!color=rollover]% {\dolocationattributes{##1}\c!style\c!color{#3}}}}% \iffirstargument \ifsecondargument \def\setlocationbox##1{\dosetlocationbox[\??am#1]{##1}[#2]}% \else \doifassignmentelse{#1} {\def\setlocationbox##1{\dosetlocationbox[\??bt]{##1}[#1]}} {\def\setlocationbox##1{\dosetlocationbox[\??am#1]{##1}[]}}% \fi \else \def\setlocationbox##1{\dosetlocationbox[\??bt]{##1}[]}% \fi % todo: share symbols, tricky since different dimensions \definesymbol[rsym:\nofrollovers:n][\setlocationbox n]% \definesymbol[rsym:\nofrollovers:r][\setlocationbox r]% \definesymbol[rsym:\nofrollovers:d][\setlocationbox d]% \setupfield [rollbutton] [\c!frame=\v!off, \c!offset=\v!overlay, \c!clickout={#4}]% \definefield [roll:\nofrollbuttons][push][rollbutton] [rsym:\nofrollovers:n,% rsym:\nofrollovers:r,% rsym:\nofrollovers:d]% \fitfield[roll:\nofrollbuttons]% \egroup} \unexpanded\def\rollbutton {\dodoubleempty\dorollbutton} \def\menu@rob[#1]#2\\% {\txt\rollbutton[\currentmenu]{\ignorespaces#2\unskip}[#1]\\}% \appendtoks \let\rob\menu@rob \to \everysetmenucommands % calls: % {..} [JS..] % [left] {..} [JS..] % [a=b] {..} [JS..] % [left] [a=b] {..} [JS..] % % \setupbuttons[offset=0pt,frame=off] % alternative=hidden % % \rollbutton {Manuals} [JS(Goto_File{show-man.pdf})] % \rollbutton {Articles} [JS(Goto_File{show-art.pdf})] % \rollbutton {Papers} [JS(Goto_File{show-pap.pdf})] % \rollbutton {Presentations} [JS(Goto_File{show-pre.pdf})] % \rollbutton {Resources} [JS(Goto_File{show-res.pdf})] % % \rob [JS(...)] bla bla \\ \unexpanded\def\overlayrollbutton {\dodoubleargument\dooverlayrollbutton} \def\dooverlayrollbutton[#1][#2]% {\bgroup \nextsystemfield \setupfield [overlayrollbutton] [\c!frame=\v!off,\c!offset=\v!overlay,\c!regionin={#1},\c!regionout={#2}]% \definesymbol [\currentsystemfield] [{\framed[\c!frame=\v!off,\c!width=\overlaywidth,\c!height=\overlayheight]{}}]% \definefield [\currentsystemfield][push][overlayrollbutton][\currentsystemfield][\currentsystemfield]% \fitfield[\currentsystemfield]% \egroup} % \defineoverlay % [ShowMenu] % [{\overlayrollbutton[VideLayer{navigation}][HideLayer{navigation}]}] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/context-fonttest.lmx0000644000175000017500000000344711376503616025763 0ustar norbertnorbert <?lua pv('title')?>
context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-tab.lua0000644000175000017500000012277712130411274024127 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-tab'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this module needs a cleanup: check latest lpeg, passing args, (sub)grammar, etc etc -- stripping spaces from e.g. cont-en.xml saves .2 sec runtime so it's not worth the -- trouble -- todo: when serializing optionally remap named entities to hex (if known in char-ent.lua) -- maybe when letter -> utf, else name .. then we need an option to the serializer .. a bit -- of work so we delay this till we cleanup local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end) local report_xml = logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end --[[ldx--

The parser used here is inspired by the variant discussed in the lua book, but handles comment and processing instructions, has a different structure, provides parent access; a first version used different trickery but was less optimized to we went this route. First we had a find based parser, now we have an based one. The find based parser can be found in l-xml-edu.lua along with other older code.

Beware, the interface may change. For instance at, ns, tg, dt may get more verbose names. Once the code is stable we will also remove some tracing and optimize the code.

I might even decide to reimplement the parser using the latest trickery as the current variant was written when showed up and it's easier now to build tables in one go.

--ldx]]-- xml = xml or { } local xml = xml --~ local xml = xml local concat, remove, insert = table.concat, table.remove, table.insert local type, next, setmetatable, getmetatable, tonumber = type, next, setmetatable, getmetatable, tonumber local lower, find, match, gsub = string.lower, string.find, string.match, string.gsub local utfchar = utf.char local lpegmatch = lpeg.match local P, S, R, C, V, C, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.C, lpeg.Cs local formatters = string.formatters --[[ldx--

First a hack to enable namespace resolving. A namespace is characterized by a . The following function associates a namespace prefix with a pattern. We use , which in this case is more than twice as fast as a find based solution where we loop over an array of patterns. Less code and much cleaner.

--ldx]]-- xml.xmlns = xml.xmlns or { } local check = P(false) local parse = check --[[ldx--

The next function associates a namespace prefix with an . This normally happens independent of parsing.

xml.registerns("mml","mathml") --ldx]]-- function xml.registerns(namespace, pattern) -- pattern can be an lpeg check = check + C(P(lower(pattern))) / namespace parse = P { P(check) + 1 * V(1) } end --[[ldx--

The next function also registers a namespace, but this time we map a given namespace prefix onto a registered one, using the given . This used for attributes like xmlns:m.

xml.checkns("m","http://www.w3.org/mathml") --ldx]]-- function xml.checkns(namespace,url) local ns = lpegmatch(parse,lower(url)) if ns and namespace ~= ns then xml.xmlns[namespace] = ns end end --[[ldx--

Next we provide a way to turn an into a registered namespace. This used for the xmlns attribute.

resolvedns = xml.resolvens("http://www.w3.org/mathml") This returns mml. --ldx]]-- function xml.resolvens(url) return lpegmatch(parse,lower(url)) or "" end --[[ldx--

A namespace in an element can be remapped onto the registered one efficiently by using the xml.xmlns table.

--ldx]]-- --[[ldx--

This version uses . We follow the same approach as before, stack and top and such. This version is about twice as fast which is mostly due to the fact that we don't have to prepare the stream for cdata, doctype etc etc. This variant is is dedicated to Luigi Scarso, who challenged me with 40 megabyte files that took 12.5 seconds to load (1.5 for file io and the rest for tree building). With the implementation we got that down to less 7.3 seconds. Loading the 14 interface definition files (2.6 meg) went down from 1.05 seconds to 0.55.

Next comes the parser. The rather messy doctype definition comes in many disguises so it is no surprice that later on have to dedicate quite some code to it.

The code may look a bit complex but this is mostly due to the fact that we resolve namespaces and attach metatables. There is only one public function:

local x = xml.convert(somestring)

An optional second boolean argument tells this function not to create a root element.

Valid entities are:

--ldx]]-- -- not just one big nested table capture (lpeg overflow) local nsremap, resolvens = xml.xmlns, xml.resolvens local stack = { } local top = { } local dt = { } local at = { } local xmlns = { } local errorstr = nil local entities = { } local strip = false local cleanup = false local utfize = false local resolve_predefined = false local unify_predefined = false local dcache = { } local hcache = { } local acache = { } local mt = { } local function initialize_mt(root) mt = { __index = root } -- will be redefined later end function xml.setproperty(root,k,v) getmetatable(root).__index[k] = v end function xml.checkerror(top,toclose) return "" -- can be set end local function add_attribute(namespace,tag,value) if cleanup and #value > 0 then value = cleanup(value) -- new end if tag == "xmlns" then xmlns[#xmlns+1] = resolvens(value) at[tag] = value elseif namespace == "" then at[tag] = value elseif namespace == "xmlns" then xml.checkns(tag,value) at["xmlns:" .. tag] = value else -- for the moment this way: at[namespace .. ":" .. tag] = value end end local function add_empty(spacing, namespace, tag) if #spacing > 0 then dt[#dt+1] = spacing end local resolved = namespace == "" and xmlns[#xmlns] or nsremap[namespace] or namespace top = stack[#stack] dt = top.dt local t = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = top } dt[#dt+1] = t setmetatable(t, mt) if at.xmlns then remove(xmlns) end at = { } end local function add_begin(spacing, namespace, tag) if #spacing > 0 then dt[#dt+1] = spacing end local resolved = namespace == "" and xmlns[#xmlns] or nsremap[namespace] or namespace top = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = stack[#stack] } setmetatable(top, mt) dt = top.dt stack[#stack+1] = top at = { } end local function add_end(spacing, namespace, tag) if #spacing > 0 then dt[#dt+1] = spacing end local toclose = remove(stack) top = stack[#stack] if #stack < 1 then errorstr = formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "") elseif toclose.tg ~= tag then -- no namespace check errorstr = formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "") end dt = top.dt dt[#dt+1] = toclose -- dt[0] = top -- nasty circular reference when serializing table if toclose.at.xmlns then remove(xmlns) end end local function add_text(text) if cleanup and #text > 0 then dt[#dt+1] = cleanup(text) else dt[#dt+1] = text end end local function add_special(what, spacing, text) if #spacing > 0 then dt[#dt+1] = spacing end if strip and (what == "@cm@" or what == "@dt@") then -- forget it else dt[#dt+1] = { special=true, ns="", tg=what, dt={ text } } end end local function set_message(txt) errorstr = "garbage at the end of the file: " .. gsub(txt,"([ \n\r\t]*)","") end local reported_attribute_errors = { } local function attribute_value_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute value %a",str) reported_attribute_errors[str] = true at._error_ = str end return str end local function attribute_specification_error(str) if not reported_attribute_errors[str] then report_xml("invalid attribute specification %a",str) reported_attribute_errors[str] = true at._error_ = str end return str end xml.placeholders = { unknown_dec_entity = function(str) return str == "" and "&error;" or formatters["&%s;"](str) end, unknown_hex_entity = function(str) return formatters["&#x%s;"](str) end, unknown_any_entity = function(str) return formatters["&#x%s;"](str) end, } local placeholders = xml.placeholders local function fromhex(s) local n = tonumber(s,16) if n then return utfchar(n) else return formatters["h:%s"](s), true end end local function fromdec(s) local n = tonumber(s) if n then return utfchar(n) else return formatters["d:%s"](s), true end end -- one level expansion (simple case), no checking done local rest = (1-P(";"))^0 local many = P(1)^0 local parsedentity = P("&") * (P("#x")*(rest/fromhex) + P("#")*(rest/fromdec)) * P(";") * P(-1) + (P("#x")*(many/fromhex) + P("#")*(many/fromdec)) -- parsing in the xml file local predefined_unified = { [38] = "&", [42] = """, [47] = "'", [74] = "<", [76] = ">", } local predefined_simplified = { [38] = "&", amp = "&", [42] = '"', quot = '"', [47] = "'", apos = "'", [74] = "<", lt = "<", [76] = ">", gt = ">", } local nofprivates = 0xF0000 -- shared but seldom used local privates_u = { -- unescaped [ [[&]] ] = "&", [ [["]] ] = """, [ [[']] ] = "'", [ [[<]] ] = "<", [ [[>]] ] = ">", } local privates_p = { } local privates_n = { -- keeps track of defined ones } local escaped = utf.remapper(privates_u) local function unescaped(s) local p = privates_n[s] if not p then nofprivates = nofprivates + 1 p = utfchar(nofprivates) privates_n[s] = p s = "&" .. s .. ";" -- todo: use char-ent to map to hex privates_u[p] = s privates_p[p] = s end return p end local unprivatized = utf.remapper(privates_p) xml.privatetoken = unescaped xml.unprivatized = unprivatized xml.privatecodes = privates_n local function handle_hex_entity(str) local h = hcache[str] if not h then local n = tonumber(str,16) h = unify_predefined and predefined_unified[n] if h then if trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end elseif utfize then h = (n and utfchar(n)) or xml.unknown_hex_entity(str) or "" if not n then report_xml("utfize, ignoring hex entity &#x%s;",str) elseif trace_entities then report_xml("utfize, converting hex entity &#x%s; into %a",str,h) end else if trace_entities then report_xml("found entity &#x%s;",str) end h = "&#x" .. str .. ";" end hcache[str] = h end return h end local function handle_dec_entity(str) local d = dcache[str] if not d then local n = tonumber(str) d = unify_predefined and predefined_unified[n] if d then if trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end elseif utfize then d = (n and utfchar(n)) or placeholders.unknown_dec_entity(str) or "" if not n then report_xml("utfize, ignoring dec entity &#%s;",str) elseif trace_entities then report_xml("utfize, converting dec entity &#%s; into %a",str,d) end else if trace_entities then report_xml("found entity &#%s;",str) end d = "&#" .. str .. ";" end dcache[str] = d end return d end xml.parsedentitylpeg = parsedentity local function handle_any_entity(str) if resolve then local a = acache[str] -- per instance ! todo if not a then a = resolve_predefined and predefined_simplified[str] if a then if trace_entities then report_xml("resolving entity &%s; to predefined %a",str,a) end else if type(resolve) == "function" then a = resolve(str) or entities[str] else a = entities[str] end if a then if type(a) == "function" then if trace_entities then report_xml("expanding entity &%s; to function call",str) end a = a(str) or "" end a = lpegmatch(parsedentity,a) or a -- for nested if trace_entities then report_xml("resolving entity &%s; to internal %a",str,a) end else local unknown_any_entity = placeholders.unknown_any_entity if unknown_any_entity then a = unknown_any_entity(str) or "" end if a then if trace_entities then report_xml("resolving entity &%s; to external %s",str,a) end else if trace_entities then report_xml("keeping entity &%s;",str) end if str == "" then a = "&error;" else a = "&" .. str .. ";" end end end end acache[str] = a elseif trace_entities then if not acache[str] then report_xml("converting entity &%s; to %a",str,a) acache[str] = a end end return a else local a = acache[str] if not a then a = resolve_predefined and predefined_simplified[str] if a then -- one of the predefined acache[str] = a if trace_entities then report_xml("entity &%s; becomes %a",str,a) end elseif str == "" then if trace_entities then report_xml("invalid entity &%s;",str) end a = "&error;" acache[str] = a else if trace_entities then report_xml("entity &%s; is made private",str) end -- a = "&" .. str .. ";" a = unescaped(str) acache[str] = a end end return a end end local function handle_end_entity(chr) report_xml("error in entity, %a found instead of %a",chr,";") end local space = S(' \r\n\t') local open = P('<') local close = P('>') local squote = S("'") local dquote = S('"') local equal = P('=') local slash = P('/') local colon = P(':') local semicolon = P(';') local ampersand = P('&') local valid = R('az', 'AZ', '09') + S('_-.') local name_yes = C(valid^1) * colon * C(valid^1) local name_nop = C(P(true)) * C(valid^1) local name = name_yes + name_nop local utfbom = lpeg.patterns.utfbom -- no capture local spacing = C(space^0) ----- entitycontent = (1-open-semicolon)^0 local anyentitycontent = (1-open-semicolon-space-close)^0 local hexentitycontent = R("AF","af","09")^0 local decentitycontent = R("09")^0 local parsedentity = P("#")/"" * ( P("x")/"" * (hexentitycontent/handle_hex_entity) + (decentitycontent/handle_dec_entity) ) + (anyentitycontent/handle_any_entity) local entity = ampersand/"" * parsedentity * ( (semicolon/"") + #(P(1)/handle_end_entity)) local text_unparsed = C((1-open)^1) local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1) local somespace = space^1 local optionalspace = space^0 ----- value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote) -- ampersand and < also invalid in value local value = (squote * Cs((entity + (1 - squote))^0) * squote) + (dquote * Cs((entity + (1 - dquote))^0) * dquote) -- ampersand and < also invalid in value local endofattributes = slash * close + close -- recovery of flacky html local whatever = space * name * optionalspace * equal ----- wrongvalue = C(P(1-whatever-close)^1 + P(1-close)^1) / attribute_value_error ----- wrongvalue = C(P(1-whatever-endofattributes)^1 + P(1-endofattributes)^1) / attribute_value_error ----- wrongvalue = C(P(1-space-endofattributes)^1) / attribute_value_error local wrongvalue = Cs(P(entity + (1-space-endofattributes))^1) / attribute_value_error local attributevalue = value + wrongvalue local attribute = (somespace * name * optionalspace * equal * optionalspace * attributevalue) / add_attribute ----- attributes = (attribute)^0 local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0 local parsedtext = text_parsed / add_text local unparsedtext = text_unparsed / add_text local balanced = P { "[" * ((1 - S"[]") + V(1))^0 * "]" } -- taken from lpeg manual, () example local emptyelement = (spacing * open * name * attributes * optionalspace * slash * close) / add_empty local beginelement = (spacing * open * name * attributes * optionalspace * close) / add_begin local endelement = (spacing * open * slash * name * optionalspace * close) / add_end local begincomment = open * P("!--") local endcomment = P("--") * close local begininstruction = open * P("?") local endinstruction = P("?") * close local begincdata = open * P("![CDATA[") local endcdata = P("]]") * close local someinstruction = C((1 - endinstruction)^0) local somecomment = C((1 - endcomment )^0) local somecdata = C((1 - endcdata )^0) local function normalentity(k,v ) entities[k] = v end local function systementity(k,v,n) entities[k] = v end local function publicentity(k,v,n) entities[k] = v end -- todo: separate dtd parser local begindoctype = open * P("!DOCTYPE") local enddoctype = close local beginset = P("[") local endset = P("]") local doctypename = C((1-somespace-close)^0) local elementdoctype = optionalspace * P(" & cleanup = settings.text_cleanup entities = settings.entities or { } -- if utfize == nil then settings.utfize_entities = true utfize = true end if resolve_predefined == nil then settings.resolve_predefined_entities = true resolve_predefined = true end -- stack, top, at, xmlns, errorstr = { }, { }, { }, { }, nil acache, hcache, dcache = { }, { }, { } -- not stored reported_attribute_errors = { } if settings.parent_root then mt = getmetatable(settings.parent_root) else initialize_mt(top) end stack[#stack+1] = top top.dt = { } dt = top.dt if not data or data == "" then errorstr = "empty xml file" elseif utfize or resolve then if lpegmatch(grammar_parsed_text,data) then errorstr = "" else errorstr = "invalid xml file - parsed text" end elseif type(data) == "string" then if lpegmatch(grammar_unparsed_text,data) then errorstr = "" else errorstr = "invalid xml file - unparsed text" end else errorstr = "invalid xml file - no text at all" end local result if errorstr and errorstr ~= "" then result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={ }, er = true } } } setmetatable(stack, mt) local errorhandler = settings.error_handler if errorhandler == false then -- no error message else errorhandler = errorhandler or xml.errorhandler if errorhandler then local currentresource = settings.currentresource if currentresource and currentresource ~= "" then xml.errorhandler(formatters["load error in [%s]: %s"](currentresource,errorstr)) else xml.errorhandler(formatters["load error: %s"](errorstr)) end end end else result = stack[1] end if not settings.no_root then result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={ }, entities = entities, settings = settings } setmetatable(result, mt) local rdt = result.dt for k=1,#rdt do local v = rdt[k] if type(v) == "table" and not v.special then -- always table -) result.ri = k -- rootindex v.__p__ = result -- new, experiment, else we cannot go back to settings, we need to test this ! break end end end if errorstr and errorstr ~= "" then result.error = true end result.statistics = { entities = { decimals = dcache, hexadecimals = hcache, names = acache, } } strip, utfize, resolve, resolve_predefined = nil, nil, nil, nil unify_predefined, cleanup, entities = nil, nil, nil stack, top, at, xmlns, errorstr = nil, nil, nil, nil, nil acache, hcache, dcache = nil, nil, nil reported_attribute_errors, mt, errorhandler = nil, nil, nil return result end -- Because we can have a crash (stack issues) with faulty xml, we wrap this one -- in a protector: function xmlconvert(data,settings) local ok, result = pcall(function() return _xmlconvert_(data,settings) end) if ok then return result else return _xmlconvert_("",settings) end end xml.convert = xmlconvert function xml.inheritedconvert(data,xmldata) -- xmldata is parent local settings = xmldata.settings if settings then settings.parent_root = xmldata -- to be tested end -- settings.no_root = true local xc = xmlconvert(data,settings) -- hm, we might need to locate settings -- xc.settings = nil -- xc.entities = nil -- xc.special = nil -- xc.ri = nil -- print(xc.tg) return xc end --[[ldx--

Packaging data in an xml like table is done with the following function. Maybe it will go away (when not used).

--ldx]]-- function xml.is_valid(root) return root and root.dt and root.dt[1] and type(root.dt[1]) == "table" and not root.dt[1].er end function xml.package(tag,attributes,data) local ns, tg = match(tag,"^(.-):?([^:]+)$") local t = { ns = ns, tg = tg, dt = data or "", at = attributes or {} } setmetatable(t, mt) return t end function xml.is_valid(root) return root and not root.error end xml.errorhandler = report_xml --[[ldx--

We cannot load an from a filehandle so we need to load the whole file first. The function accepts a string representing a filename or a file handle.

--ldx]]-- function xml.load(filename,settings) local data = "" if type(filename) == "string" then -- local data = io.loaddata(filename) - -todo: check type in io.loaddata local f = io.open(filename,'r') -- why not 'rb' if f then data = f:read("*all") -- io.readall(f) ... only makes sense for large files f:close() end elseif filename then -- filehandle data = filename:read("*all") -- io.readall(f) ... only makes sense for large files end if settings then settings.currentresource = filename local result = xmlconvert(data,settings) settings.currentresource = nil return result else return xmlconvert(data,{ currentresource = filename }) end end --[[ldx--

When we inject new elements, we need to convert strings to valid trees, which is what the next function does.

--ldx]]-- local no_root = { no_root = true } function xml.toxml(data) if type(data) == "string" then local root = { xmlconvert(data,no_root) } return (#root > 1 and root) or root[1] else return data end end --[[ldx--

For copying a tree we use a dedicated function instead of the generic table copier. Since we know what we're dealing with we can speed up things a bit. The second argument is not to be used!

--ldx]]-- local function copy(old,tables) if old then tables = tables or { } local new = { } if not tables[old] then tables[old] = new end for k,v in next, old do new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v end local mt = getmetatable(old) if mt then setmetatable(new,mt) end return new else return { } end end xml.copy = copy --[[ldx--

In serializing the tree or parts of the tree is a major actitivity which is why the following function is pretty optimized resulting in a few more lines of code than needed. The variant that uses the formatting function for all components is about 15% slower than the concatinating alternative.

--ldx]]-- -- todo: add when not present function xml.checkbom(root) -- can be made faster if root.ri then local dt = root.dt for k=1,#dt do local v = dt[k] if type(v) == "table" and v.special and v.tg == "@pi@" and find(v.dt[1],"xml.*version=") then return end end insert(dt, 1, { special = true, ns = "", tg = "@pi@", dt = { "xml version='1.0' standalone='yes'" } } ) insert(dt, 2, "\n" ) end end --[[ldx--

At the cost of some 25% runtime overhead you can first convert the tree to a string and then handle the lot.

--ldx]]-- -- new experimental reorganized serialize local function verbose_element(e,handlers) -- options local handle = handlers.handle local serialize = handlers.serialize local ens, etg, eat, edt, ern = e.ns, e.tg, e.at, e.dt, e.rn local ats = eat and next(eat) and { } if ats then for k,v in next, eat do ats[#ats+1] = formatters['%s=%q'](k,escaped(v)) end end if ern and trace_entities and ern ~= ens then ens = ern end if ens ~= "" then if edt and #edt > 0 then if ats then handle("<",ens,":",etg," ",concat(ats," "),">") else handle("<",ens,":",etg,">") end for i=1,#edt do local e = edt[i] if type(e) == "string" then handle(escaped(e)) else serialize(e,handlers) end end handle("") else if ats then handle("<",ens,":",etg," ",concat(ats," "),"/>") else handle("<",ens,":",etg,"/>") end end else if edt and #edt > 0 then if ats then handle("<",etg," ",concat(ats," "),">") else handle("<",etg,">") end for i=1,#edt do local e = edt[i] if type(e) == "string" then handle(escaped(e)) -- option: hexify escaped entities else serialize(e,handlers) end end handle("") else if ats then handle("<",etg," ",concat(ats," "),"/>") else handle("<",etg,"/>") end end end end local function verbose_pi(e,handlers) handlers.handle("") end local function verbose_comment(e,handlers) handlers.handle("") end local function verbose_cdata(e,handlers) handlers.handle("") end local function verbose_doctype(e,handlers) handlers.handle("") end local function verbose_root(e,handlers) handlers.serialize(e.dt,handlers) end local function verbose_text(e,handlers) handlers.handle(escaped(e)) end local function verbose_document(e,handlers) local serialize = handlers.serialize local functions = handlers.functions for i=1,#e do local ei = e[i] if type(ei) == "string" then functions["@tx@"](ei,handlers) else serialize(ei,handlers) end end end local function serialize(e,handlers,...) local initialize = handlers.initialize local finalize = handlers.finalize local functions = handlers.functions if initialize then local state = initialize(...) if not state == true then return state end end local etg = e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) -- elseif type(e) == "string" then -- functions["@tx@"](e,handlers) else functions["@dc@"](e,handlers) -- dc ? end if finalize then return finalize() end end local function xserialize(e,handlers) local functions = handlers.functions local etg = e.tg if etg then (functions[etg] or functions["@el@"])(e,handlers) -- elseif type(e) == "string" then -- functions["@tx@"](e,handlers) else functions["@dc@"](e,handlers) end end local handlers = { } local function newhandlers(settings) local t = table.copy(handlers[settings and settings.parent or "verbose"] or { }) -- merge if settings then for k,v in next, settings do if type(v) == "table" then local tk = t[k] if not tk then tk = { } t[k] = tk end for kk,vv in next, v do tk[kk] = vv end else t[k] = v end end if settings.name then handlers[settings.name] = t end end utilities.storage.mark(t) return t end local nofunction = function() end function xml.sethandlersfunction(handler,name,fnc) handler.functions[name] = fnc or nofunction end function xml.gethandlersfunction(handler,name) return handler.functions[name] end function xml.gethandlers(name) return handlers[name] end newhandlers { name = "verbose", initialize = false, -- faster than nil and mt lookup finalize = false, -- faster than nil and mt lookup serialize = xserialize, handle = print, functions = { ["@dc@"] = verbose_document, ["@dt@"] = verbose_doctype, ["@rt@"] = verbose_root, ["@el@"] = verbose_element, ["@pi@"] = verbose_pi, ["@cm@"] = verbose_comment, ["@cd@"] = verbose_cdata, ["@tx@"] = verbose_text, } } --[[ldx--

How you deal with saving data depends on your preferences. For a 40 MB database file the timing on a 2.3 Core Duo are as follows (time in seconds):

1.3 : load data from file to string 6.1 : convert string into tree 5.3 : saving in file using xmlsave 6.8 : converting to string using xml.tostring 3.6 : saving converted string in file

Beware, these were timing with the old routine but measurements will not be that much different I guess.

--ldx]]-- -- maybe this will move to lxml-xml local result local xmlfilehandler = newhandlers { name = "file", initialize = function(name) result = io.open(name,"wb") return result end, finalize = function() result:close() return true end, handle = function(...) result:write(...) end, } -- no checking on writeability here but not faster either -- -- local xmlfilehandler = newhandlers { -- initialize = function(name) -- io.output(name,"wb") -- return true -- end, -- finalize = function() -- io.close() -- return true -- end, -- handle = io.write, -- } function xml.save(root,name) serialize(root,xmlfilehandler,name) end local result local xmlstringhandler = newhandlers { name = "string", initialize = function() result = { } return result end, finalize = function() return concat(result) end, handle = function(...) result[#result+1] = concat { ... } end, } local function xmltostring(root) -- 25% overhead due to collecting if not root then return "" elseif type(root) == "string" then return root else -- if next(root) then -- next is faster than type (and >0 test) return serialize(root,xmlstringhandler) or "" end end local function __tostring(root) -- inline return (root and xmltostring(root)) or "" end initialize_mt = function(root) -- redefinition mt = { __tostring = __tostring, __index = root } end xml.defaulthandlers = handlers xml.newhandlers = newhandlers xml.serialize = serialize xml.tostring = xmltostring --[[ldx--

The next function operated on the content only and needs a handle function that accepts a string.

--ldx]]-- local function xmlstring(e,handle) if not handle or (e.special and e.tg ~= "@rt@") then -- nothing elseif e.tg then local edt = e.dt if edt then for i=1,#edt do xmlstring(edt[i],handle) end end else handle(e) end end xml.string = xmlstring --[[ldx--

A few helpers:

--ldx]]-- --~ xmlsetproperty(root,"settings",settings) function xml.settings(e) while e do local s = e.settings if s then return s else e = e.__p__ end end return nil end function xml.root(e) local r = e while e do e = e.__p__ if e then r = e end end return r end function xml.parent(root) return root.__p__ end function xml.body(root) return root.ri and root.dt[root.ri] or root -- not ok yet end function xml.name(root) if not root then return "" end local ns = root.ns local tg = root.tg if ns == "" then return tg else return ns .. ":" .. tg end end --[[ldx--

The next helper erases an element but keeps the table as it is, and since empty strings are not serialized (effectively) it does not harm. Copying the table would take more time. Usage:

--ldx]]-- function xml.erase(dt,k) if dt then if k then dt[k] = "" else for k=1,#dt do dt[1] = { "" } end end end end --[[ldx--

The next helper assigns a tree (or string). Usage:

dt[k] = xml.assign(root) or xml.assign(dt,k,root) --ldx]]-- function xml.assign(dt,k,root) if dt and k then dt[k] = type(root) == "table" and xml.body(root) or root return dt[k] else return xml.body(root) end end -- the following helpers may move --[[ldx--

The next helper assigns a tree (or string). Usage:

xml.tocdata(e) xml.tocdata(e,"error") --ldx]]-- function xml.tocdata(e,wrapper) -- a few more in the aux module local whatever = type(e) == "table" and xmltostring(e.dt) or e or "" if wrapper then whatever = formatters["<%s>%s"](wrapper,whatever,wrapper) end local t = { special = true, ns = "", tg = "@cd@", at = { }, rn = "", dt = { whatever }, __p__ = e } setmetatable(t,getmetatable(e)) e.dt = { t } end function xml.makestandalone(root) if root.ri then local dt = root.dt for k=1,#dt do local v = dt[k] if type(v) == "table" and v.special and v.tg == "@pi@" then local txt = v.dt[1] if find(txt,"xml.*version=") then v.dt[1] = txt .. " standalone='yes'" break end end end end return root end function xml.kind(e) local dt = e and e.dt if dt then local n = #dt if n == 1 then local d = dt[1] if d.special then local tg = d.tg if tg == "@cd@" then return "cdata" elseif tg == "@cm" then return "comment" elseif tg == "@pi@" then return "instruction" elseif tg == "@dt@" then return "declaration" end elseif type(d) == "string" then return "text" end return "element" elseif n > 0 then return "mixed" end end return "empty" end context-2013.05.28.20130704/texmf-dist/tex/context/base/util-tpl.lua0000644000175000017500000001302712130411274024144 0ustar norbertnorbertif not modules then modules = { } end modules ['util-tpl'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is experimental code. Coming from dos and windows, I've always used %whatever% -- as template variables so let's stick to it. After all, it's easy to parse and stands -- out well. A double %% is turned into a regular %. utilities.templates = utilities.templates or { } local templates = utilities.templates local trace_template = false trackers.register("templates.trace",function(v) trace_template = v end) local report_template = logs.reporter("template") local tostring = tostring local format, sub = string.format, string.sub local P, C, Cs, Carg, lpegmatch = lpeg.P, lpeg.C, lpeg.Cs, lpeg.Carg, lpeg.match -- todo: make installable template.new local replacer local function replacekey(k,t,how,recursive) local v = t[k] if not v then if trace_template then report_template("unknown key %a",k) end return "" else v = tostring(v) if trace_template then report_template("setting key %a to value %a",k,v) end if recursive then return lpegmatch(replacer,v,1,t,how,recursive) else return v end end end local sqlescape = lpeg.replacer { { "'", "''" }, { "\\", "\\\\" }, { "\r\n", "\\n" }, { "\r", "\\n" }, -- { "\t", "\\t" }, } local sqlquotedescape = lpeg.Cs(lpeg.Cc("'") * sqlescape * lpeg.Cc("'")) -- escapeset : \0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31\"\\\127 -- test string: [[1\0\31test23"\\]] .. string.char(19) .. "23" -- -- slow: -- -- local luaescape = lpeg.replacer { -- { '"', [[\"]] }, -- { '\\', [[\\]] }, -- { R("\0\9") * #R("09"), function(s) return "\\00" .. byte(s) end }, -- { R("\10\31") * #R("09"), function(s) return "\\0" .. byte(s) end }, -- { R("\0\31") , function(s) return "\\" .. byte(s) end }, -- } -- -- slightly faster: -- -- local luaescape = Cs (( -- P('"' ) / [[\"]] + -- P('\\') / [[\\]] + -- Cc("\\00") * (R("\0\9") / byte) * #R("09") + -- Cc("\\0") * (R("\10\31") / byte) * #R("09") + -- Cc("\\") * (R("\0\31") / byte) + -- P(1) -- )^0) local escapers = { lua = function(s) return sub(format("%q",s),2,-2) end, sql = function(s) return lpegmatch(sqlescape,s) end, } local quotedescapers = { lua = function(s) return format("%q",s) end, sql = function(s) return lpegmatch(sqlquotedescape,s) end, } lpeg.patterns.sqlescape = sqlescape lpeg.patterns.sqlescape = sqlquotedescape local luaescaper = escapers.lua local quotedluaescaper = quotedescapers.lua local function replacekeyunquoted(s,t,how,recurse) -- ".. \" " local escaper = how and escapers[how] or luaescaper return escaper(replacekey(s,t,how,recurse)) end local function replacekeyquoted(s,t,how,recurse) -- ".. \" " local escaper = how and quotedescapers[how] or quotedluaescaper return escaper(replacekey(s,t,how,recurse)) end local single = P("%") -- test %test% test : resolves test local double = P("%%") -- test 10%% test : %% becomes % local lquoted = P("%[") -- test '%[test]%' test : resolves to test with escaped "'s local rquoted = P("]%") -- local lquotedq = P("%(") -- test %(test)% test : resolves to 'test' with escaped "'s local rquotedq = P(")%") -- local escape = double / '%%' local nosingle = single / '' local nodouble = double / '' local nolquoted = lquoted / '' local norquoted = rquoted / '' local nolquotedq = lquotedq / '' local norquotedq = rquotedq / '' local key = nosingle * ((C((1-nosingle )^1) * Carg(1) * Carg(2) * Carg(3)) / replacekey ) * nosingle local quoted = nolquotedq * ((C((1-norquotedq)^1) * Carg(1) * Carg(2) * Carg(3)) / replacekeyquoted ) * norquotedq local unquoted = nolquoted * ((C((1-norquoted )^1) * Carg(1) * Carg(2) * Carg(3)) / replacekeyunquoted) * norquoted local any = P(1) replacer = Cs((unquoted + quoted + escape + key + any)^0) local function replace(str,mapping,how,recurse) if mapping and str then return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str else return str end end -- print(replace("test '%[x]%' test",{ x = [[a 'x'  a]] })) -- print(replace("test '%[x]%' test",{ x = true })) -- print(replace("test '%[x]%' test",{ x = [[a 'x'  a]], y = "oeps" },'sql')) -- print(replace("test '%[x]%' test",{ x = [[a '%y%'  a]], y = "oeps" },'sql',true)) -- print(replace([[test %[x]% test]],{ x = [[a "x"  a]]})) -- print(replace([[test %(x)% test]],{ x = [[a "x"  a]]})) templates.replace = replace function templates.load(filename,mapping,how,recurse) local data = io.loaddata(filename) or "" if mapping and next(mapping) then return replace(data,mapping,how,recurse) else return data end end function templates.resolve(t,mapping,how,recurse) if not mapping then mapping = t end for k, v in next, t do t[k] = replace(v,mapping,how,recurse) end return t end -- inspect(utilities.templates.replace("test %one% test", { one = "%two%", two = "two" })) -- inspect(utilities.templates.resolve({ one = "%two%", two = "two", three = "%three%" })) context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-pdf.mkii0000644000175000017500000003263411754241457024267 0ustar norbertnorbert%D \module %D [ file=spec-pdf, %D version=1997.09.20, %D title=\CONTEXT\ Special Macros, %D subtitle=Adobe \ACROBAT\ version 2.1, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % funny things: mail to yeny: "please geen auto-crlf in special" %D This driver is build on top of the general \PDF\ macros, %D as defined in \type{spec-fdf}, so we inherit that one. \startspecials[pdf][fdf] %D \macros %D {dosetupinteraction, %D doPDFsetopenaction,doPDFsetcloseaction} %D %D Instead of a prolog, we can put the code in the file %D ourselve. %D %D \starttyping %D \definespecial\dosetupinteraction% %D {\special %D {\@@insertpostscriptretain %D /pdfmark where %D {pop} %D {userdict /pdfmark /cleartomark load put} %D ifelse}} %D \stoptyping %D %D We decided to use a prolog file. The following code has to %D be put somewhere, e.g.\ in the startup directory of %D \DISTILLER. To overcome problems, we always embed the fonts, %D but copyrights force us always to make subsets. %D %D \starttyping %D /currentdistillerparams where %D { pop } { userdict /currentdistillerparams { 1 dict } put } ifelse %D %D /setdistillerparams where %D { pop } { userdict /setdistillerparams { pop } put } ifelse %D %D << /AntiAliasColorImages true %D /AntiAliasGrayImages true %D /AntiAliasMonoImages true %D /ConvertCMYKImagesToRGB true %D /MaxSubsetPct 99 %D /EmbedAllFonts true %D /SubSetFonts true >> setdistillerparams %D \stoptyping %D %D Beware, this is the PostScript Level 2 way of doing things. \definespecial\dosetupinteraction {\showmessage\m!interactions{21}{acrobat}} \definespecial\dosetupopenaction {\doPDFsetupopenaction} \definespecial\dosetupcloseaction{\doPDFsetupcloseaction} %D \macros %D {dostartthisislocation} %D %D We share a lot of macros with the \PDFTEX\ driver. First %D the one that handles named destinations. \definespecial\dostartthisislocation {\doPDFstartthisislocation} %D \macros %D {doresetgotowhereever, %D dostartgotolocation,dostartgotorealpage,dostartgotoJS, %D dostartexecutecommand,dostartrunprogram,dostartgotoprofile} %D %D The next specials are responsible for handling references. %D Each goto handler can handle multiple references. \definespecial\doresetgotowhereever {\doPDFresetgotowhereever} \definespecial\dostartgotolocation {\doPDFstartgotolocation} \definespecial\dostartgotorealpage {\doPDFstartgotorealpage} \definespecial\dostartgotoJS {\doPDFstartgotoJS} \definespecial\dostartexecutecommand{\doPDFstartexecutecommand} \definespecial\dostartrunprogram {\doPDFstartrunprogram} \definespecial\dostartgotoprofile {\doPDFstartgotoprofile} %D \macros %D {doflushJSpreamble} %D %D Thanks to the fact that \DISTILLER\ cannot handle multiple %D names entries in the document catalog, for the moment we %D have to misuse the page attributes. Beware, the preambles %D must be packed. \definespecial\doflushJSpreamble#1% {\bgroup \ifoneJSpreamble \edef\sanitizedJScode{\getJSpreamble{#1}}% \expandafter\doPSsanitizeJScode\sanitizedJScode\to\sanitizedJScode \special % nota bene, the page starts at 1 {\@@insertpostscriptretain [ /_objdef{JS:#1} /type /dict /OBJ pdfmark [ {JS:#1} << /S /JavaScript /JS (\sanitizedJScode) >> /PUT pdfmark [ {Page1} << /AA << /O {JS:#1} >> >> /PUT pdfmark}% \else % temporary message \writestatus{\m!specials}{Acrobat workaround needed: please pack JS preambles}% \fi \egroup} %D \macros %D {dostarthide,dostophide} %D %D Hopefully some day hiding navigational things when %D printing \PDF\ files will be supported properly. \definespecial\dostarthide% {\special {\@@insertpostscriptretain [ /DataSource (false \iftrue\string{\else}\fi) /PS pdfmark}} \definespecial\dostophide% {\special {\@@insertpostscriptretain [ /DataSource (\iffalse{\else\string}\fi if) /PS pdfmark}} %D \macros %D {dosetupscreen, %D dosetupidentity} %D %D We can set up the page dimensions, full screen start up %D mode and identify the file with: \definespecial\dosetupscreen {\doPDFsetupscreen \printpaperheight} \definespecial\dosetupartbox {\doPDFsetupartbox \printpaperheight} \definespecial\dosetupcropbox {\doPDFsetupcropbox \printpaperheight} \definespecial\dosetupbleedbox{\doPDFsetupbleedbox\printpaperheight} \definespecial\dosetuptrimbox {\doPDFsetuptrimbox \printpaperheight} \definespecial\dosetupidentity{\doPDFsetupidentity} %D \macros %D {dobeginofprofile,doendofprofile} %D %D Profile support is still far from perfect. This is %D especially due to the fact that the specification of %D threads are sort of fuzzy and depend on the viewer. \definespecial\dobeginofprofile#1#2#3#4% label width height page {\bgroup \setPDFdestination{#1}% \doifsomething{\PDFdestination} {\PointsToBigPoints{#2}\width \PointsToBigPoints{#3}\height \special {\@@insertpostscriptretain [ /Title (\PDFdestination) /Rect [0 0 \width\space\height] /ARTICLE pdfmark}}% \egroup} \definespecial\doendofprofile% {} %D Apart from movies, graphic inclusion is handled in the %D \POSTSCRIPT\ drivers. We just link the movie annotation %D handled to the file inclusion system. \definefileinsertion{yy}{mov}{\doPDFinsertmov} \definefileinsertion{tr}{mov}{\doPDFinsertmov} \definefileinsertion{yy}{avi}{\doPDFinsertmov} \definefileinsertion{tr}{avi}{\doPDFinsertmov} %D \macros %D {doinsertsoundtrack} %D %D Sounds look much like movies: \definespecial\doinsertsoundtrack{\doPDFinsertsoundtrack} %D \macros %D {dostartobject,dostopobject, %D doinsertobject} %D %D Objects, those nice reusable pieces of text and graphics, %D are handled by three specials: \definespecial\dostartobject#1#2#3#4#5% {\bgroup \setbox\nextbox=\hbox\bgroup \bgroup \PointsToBigPoints{#3}\width \PointsToBigPoints{#4}\height \PointsToBigPoints{#5}\depth \dosetobjectreference{#1}{#2}{#1::#2}% \special {\@@insertpostscriptretain [ /BBox [0 -\depth\space \width\space \height] /_objdef {#1::#2} /BP pdfmark}% \egroup} \definespecial\dostopobject% {\special {\@@insertpostscriptretain [ /EP pdfmark}% \egroup \smashbox\nextbox \flushatshipout{\box\nextbox}% \egroup} \definespecial\doinsertobject#1#2% {\hbox {\dogetobjectreference{#1}{#2}\PDFobjectreference \ifx\PDFobjectreference\empty \else \special {\@@insertpostscriptretain [ {\PDFobjectreference} /SP pdfmark}% \fi}} %D \macros %D {doinsertbookmark} %D %D Although personally I never use bookmarks, \CONTEXT\ does %D support them, due to user requests. \definespecial\doinsertbookmark {\doPDFinsertbookmark} %D \macros %D {dosetpagetransition} %D %D Page transitions, again a user wish, is taken care of by: \definespecial\dosetpagetransition{\doPDFsetpagetransition} %D \macros %D {doinsertcomment, doflushcomments} %D %D I never needed (and used) one until now, but here is the %D text annotation special: \definespecial\doinsertcomment{\doPDFinsertcomment} \definespecial\doflushcomments{\doPDFflushcomments} %D \macros %D {dopresetlinefield,dopresettextfield, %D dopresetchoicefield,dopresetpopupfield,dopresetcombofield, %D dopresetpushfield,dopresetcheckfield, %D dopresetradiofield,dopresetradiorecord} %D %D There is nothing enervating to the next few mappings. \definespecial\dopresetlinefield {\doFDFpresetlinefield} \definespecial\dopresettextfield {\doFDFpresettextfield} \definespecial\dopresetchoicefield{\doFDFpresetchoicefield} \definespecial\dopresetpopupfield {\doFDFpresetpopupfield} \definespecial\dopresetcombofield {\doFDFpresetcombofield} \definespecial\dopresetpushfield {\doFDFpresetpushfield} \definespecial\dopresetcheckfield {\doFDFpresetcheckfield} \definespecial\dopresetradiofield {\doFDFpresetradiofield} \definespecial\dopresetradiorecord{\doFDFpresetradiorecord} %D \macros %D {dodefinefieldset,dogetfieldset,doiffieldset} %D %D Field sets, used in resetting and submitting, are handled %D by: \definespecial\dodefinefieldset{\doFDFdefinefieldset} \definespecial\dogetfieldset {\doFDFgetfieldset} \definespecial\doiffieldset {\doFDFiffieldset} %D \macros %D {doregistercalculationset} %D %D The calculation order is defined using: \definespecial\doregistercalculationset{\doFDFregistercalculationset} %D \macros %D {doPDFdestination} %D %D Last we implement the low level pdfmark macros. The %D definitions are rather verbose. First the destination %D macro. \def\doPDFdestination#1% {\special {\@@insertpostscriptretain [ /Dest /#1\space \PDFpageview /DEST pdfmark}} %D \macros %D {doPDFaction,doPDFannotation,doPDFannotationobject, %D ifsharePDFactions} %D %D We have three alternative annotation macros. The first %D handles the goto ones, the second takes care of for instance %D movies and the third is used in fields. \newcount\nofPDFsimilar \newif\ifsharePDFactions \sharePDFactionstrue \def\dodoPDFaction#1#2#3#4% {\ifcollectreferenceactions \xdef\lastPDFaction{#4}% \else \bgroup % does not work well with distiller 4 %\ifsharePDFactions % \ifcase\similarreference\relax % \xdef\lastPDFaction{<<#4>>}% % \or % \global\advance\nofPDFsimilar by 1 % \special % {\@@insertpostscriptretain % [ /_objdef {PDF::sim:\the\nofPDFsimilar} /type /dict /OBJ pdfmark % [ {PDF::sim:\the\nofPDFsimilar} <<#4>>\space /PUT pdfmark}% % \xdef\lastPDFaction{{PDF::sim:\the\nofPDFsimilar}}% % \else % % leave \lastPDFaction untouched % \fi %\else \xdef\lastPDFaction{<<#4>>}% %\fi \PointsToBigPoints{#2}\width \PointsToBigPoints{#1}\height \special {\@@insertpostscriptretain [ #1 /Action \lastPDFaction\space /Rect [0 0 \width\space \height] /Border [0 0 0] \ifhighlighthyperlinks \else /H /N \fi /Subtype /Link /ANN pdfmark}% \egroup \fi} \def\doPDFaction#1#2#3% {\dodoPDFaction\empty{#1}{#2}{#3}} \def\doPDFannotation#1#2#3% {\bgroup \PointsToBigPoints{#1}\width \PointsToBigPoints{#2}\height \special {\@@insertpostscriptretain [ /Rect [0 0 \width\space \height] #3 /ANN pdfmark}% \egroup} \def\doPDFannotationobject#1#2#3#4#5% {\bgroup \PointsToBigPoints{#3}\width \PointsToBigPoints{#4}\height \special {\@@insertpostscriptretain [ /_objdef {#1::#2} /Rect [0 0 \width\space \height] #5 /ANN pdfmark}% \egroup \dosetobjectreference{#1}{#2}{#1::#2}} \def\doPDFactionobject#1#2#3#4#5% {\dodoPDFaction{/_objdef {#1::#2}}{#3}{#4}{#5}% \dosetobjectreference{#1}{#2}{#1::#2}} %D \macros %D {doPDFdictionaryobject,doPDFarrayobject} %D %D These two macros are used to build low level objects. \def\doPDFdictionaryobject#1#2#3% {\special {\@@insertpostscriptretain [ /_objdef {#1::#2} /type /dict /OBJ pdfmark [ {#1::#2} << #3 >> /PUT pdfmark}% \dosetobjectreference{#1}{#2}{#1::#2}} \def\doPDFarrayobject#1#2#3% {\special {\@@insertpostscriptretain [ /_objdef {#1::#2} /type /array /OBJ pdfmark [ {#1::#2} 0 [#3] /PUTINTERVAL pdfmark}% \dosetobjectreference{#1}{#2}{#1::#2}} %D \macros %D {doPDFaddtocatalog,doPDFaddtoinfo, %D doPDFpageattribute,doPDFpagesattribute} %D %D Next come our housekeeping macros. \def\doPDFaddtocatalog#1% {\doifsomething{#1} {\special {\@@insertpostscriptretain [ {Catalog} << #1 >> /PUT pdfmark}}} \def\doPDFaddtoinfo#1% unchecked {\special {\@@insertpostscriptretain [ #1 /DOCINFO pdfmark}} % [ {DocInfo} << #1 >> /PUT pdfmark}} \def\doPDFpageattribute#1% {\doifsomething{#1} {\special {\@@insertpostscriptretain [ {ThisPage} << #1 >> /PUT pdfmark}}} \def\doPDFpageresource#1% {\message{[skipping PDF resource]}} \def\doPDFpagesattribute#1% {\doifsomething{#1} {\special {\@@insertpostscriptretain [ #1 /PAGES pdfmark}}} \let\doPDFresetpageresources \relax \let\doPDFresetpageattributes\relax %D \macros %D {doPDFbookmark} %D %D This is how we force bookmarks entries in the file. \def\doPDFbookmark#1#2#3#4#5% {\scratchcounter#4\advance\scratchcounter\minusone \special {\@@insertpostscriptretain [ /Page \the\scratchcounter\space \ifcase#2 \else/Count \ifcase#5-\fi#2 \fi \PDFpageview /Title (#3) /OUT pdfmark}} %D \macros %D {defaultobjectreference,doPDFgetobjectreference} %D %D The object references are \type{{named}}, that is, no hard %D coded numbers are needed (opposite to \PDFTEX). \def\defaultobjectreference#1#2{#1::#2} \def\doPDFgetobjectreference#1#2#3% {\dogetobjectreference{#1}{#2}#3% \ifx#3\empty\else\edef#3{{#3}}\fi} %\edef#3{\ifx#3\empty null\else{#3}\fi}} % \def\doPDFgetobjectpage #1#2#3{..} % \def\doPDFgetobjectpagereference#1#2#3{..} \def\doPDFgetpagereference#1#2% {\edef#2{{page#1}}} %D Done. \stopspecials \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/core-two.lua0000644000175000017500000000731312130411274024132 0ustar norbertnorbertif not modules then modules = { } end modules ['core-two'] = { version = 1.001, comment = "companion to core-two.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local remove, concat = table.remove, table.concat local allocate = utilities.storage.allocate --[[ldx--

We save multi-pass information in the main utility table. This is a bit of a mess because we support old and new methods.

--ldx]]-- local collected = allocate() local tobesaved = allocate() local jobpasses = { collected = collected, tobesaved = tobesaved, } job.passes = jobpasses local function initializer() collected = jobpasses.collected tobesaved = jobpasses.tobesaved end job.register('job.passes.collected', tobesaved, initializer, nil) local function allocate(id) local p = tobesaved[id] if not p then p = { } tobesaved[id] = p end return p end jobpasses.define = allocate function jobpasses.save(id,str) local jti = allocate(id) jti[#jti+1] = str end function jobpasses.savetagged(id,tag,str) local jti = allocate(id) jti[tag] = str end function jobpasses.getdata(id,index,default) local jti = collected[id] local value = jit and jti[index] return value ~= "" and value or default or "" end function jobpasses.getfield(id,index,tag,default) local jti = collected[id] jti = jti and jti[index] local value = jti and jti[tag] return value ~= "" and value or default or "" end function jobpasses.getcollected(id) return collected[id] or { } end function jobpasses.gettobesaved(id) return allocate(id) end local function get(id) local jti = collected[id] if jti and #jti > 0 then return remove(jti,1) end end local function first(id) local jti = collected[id] if jti and #jti > 0 then return jti[1] end end local function last(id) local jti = collected[id] if jti and #jti > 0 then return jti[#jti] end end local function find(id,n) local jti = collected[id] if jti and jti[n] then return jti[n] end end local function count(id) local jti = collected[id] return jti and #jti or 0 end local function list(id) local jti = collected[id] if jti then return concat(jti,',') end end local function inlist(id,str) local jti = collected[id] if jti then for _, v in next, jti do if v == str then return true end end end return false end local check = first -- jobpasses.get = get jobpasses.first = first jobpasses.last = last jobpasses.find = find jobpasses.list = list jobpasses.count = count jobpasses.check = check jobpasses.inlist = inlist -- interface function commands.gettwopassdata (id) local r = get (id) if r then context(r) end end function commands.getfirsttwopassdata(id) local r = first(id) if r then context(r) end end function commands.getlasttwopassdata (id) local r = last (id) if r then context(r) end end function commands.findtwopassdata (id,n) local r = find (id,n) if r then context(r) end end function commands.gettwopassdatalist (id) local r = list (id) if r then context(r) end end function commands.counttwopassdata (id) local r = count(id) if r then context(r) end end function commands.checktwopassdata (id) local r = check(id) if r then context(r) end end commands.definetwopasslist = jobpasses.define commands.savetwopassdata = jobpasses.save commands.savetaggedtwopassdata = jobpasses.savetagged function commands.doifelseintwopassdata(id,str) commands.doifelse(inlist(id,str)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-par.mkvi0000644000175000017500000000711512130411274024262 0ustar norbertnorbert%D \module %D [ file=buff-par, %D version=2010.12.05, %D title=\CONTEXT\ Buffer Macros, %D subtitle=Parallel, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Buffer Macros / Parallel} \registerctxluafile{buff-par}{1.001} %D This module is developped for Thomas Schmitz as part of a project. There is %D no documentation yet. %D %D \starttyping %D \defineparallel[main][one,two] %D %D \startmain %D \startone %D first 1 %D [reference] first 2 %D first 3 %D \stopone %D \starttwo %D second 1 %D \stoptwo %D \stopmain %D %D \placeparallel[main][one,two][criterium=all] %D criterium=all start= n= \unprotect \installcorenamespace{parallel} \installcommandhandler \??parallel {parallel} \??parallel \setupparallel [\c!setups=parallel:place:default] \let\buff_parallel_define_saved\defineparallel \unexpanded\def\defineparallel {\dodoubleargument\buff_parallel_define} \def\buff_parallel_define[#name][#instances]% {\buff_parallel_define_saved[#name] \ctxcommand{defineparallel("#name","#instances")}% \processcommalist[#instances]\buff_parallel_define_instance \setuevalue{\e!start#name}{\buff_parallel_start{#name}}% \setuevalue{\e!stop #name}{\buff_parallel_stop}} \def\buff_parallel_define_instance#instance% {\normalexpanded{\buff_parallel_define_saved[#instance][\currentparallel]}% \definebuffer[#instance]% \setuevalue{\e!stop#instance}{\buff_parallel_save{#instance}}} \unexpanded\def\buff_parallel_start#name% {\pushmacro\currentparallel \edef\currentparallel{#name}% \ctxcommand{nextparallel("\currentparallel")}} \unexpanded\def\buff_parallel_stop {\popmacro\currentparallel} \unexpanded\def\buff_parallel_save#instance% defined moet ook aan de lua kant kunnen {\ctxcommand{saveparallel("\currentparallel","#instance",buffers.raw("\thedefinedbuffer{#instance}"))}} \unexpanded\def\placeparallel {\dotripleempty\buff_parallel_place} \def\buff_parallel_place[#name][#instance][#settings]% {\begingroup \edef\currentparallel{#name}% \ctxcommand{placeparallel("\currentparallel","#instance","#settings")}% -- todo: pass options as k/v \endgroup} \def\doflushparallel#instance#status#line#label#content% called at lua end {\begingroup \def\currentparallelinstance{#instance}% \def\currentparallelnumber {#status}% \def\currentparallelline {#line}% \def\currentparallellabel {#label}% \def\currentparallelcontent {#content}% \ifcase#status\relax \expandafter\buff_parallel_flush_nop \or \expandafter\buff_parallel_flush_yes \fi \endgroup} \def\buff_parallel_flush_nop {} \def\buff_parallel_flush_yes {\directsetup{\namedparallelparameter\currentparallelinstance\c!setups}} \unexpanded\def\doifelseparallel#name#instance% {\ctxcommand{doifelseparallel("#name","#instance")}} \unexpanded\def\resetparallel {\dodoubleempty\buff_parallel_reset} \def\buff_parallel_reset[#name][#instance]% {\ctxcommand{resetparallel("#name","#instance"))}} \startsetups parallel:place:default \hangafter\plusone \hangindent4em \dontleavehmode \hbox to 3em \bgroup \hss \bf \doifsomething \currentparallellabel { \textreference[\currentparallellabel]{\currentparallelline} } \currentparallelline \quad \egroup \currentparallelcontent \par \stopsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-err.mkii0000644000175000017500000000100111754241457024277 0ustar norbertnorbert%D \module %D [ file=cont-err, %D version=2003.08.12, %D title=\CONTEXT\ System Files, %D subtitle=Just A warning, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \writestatus\m!systems{no file 'cont-sys.tex', using 'cont-sys.rme' instead} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-sys.mkiv0000644000175000017500000005127612161703335024372 0ustar norbertnorbert%D \module %D [ file=mult-sys, %D version=1996.06.01, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=System, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 In boring module we define a lot of obscure but useful system constants. %D By doing so we save lots of memory while at the same time we prevent %D ourself making typing errors. \writestatus{loading}{ConTeXt Multilingual Macros / System} \unprotect %D This file is mostly the same as the \MKII\ variant but we keep extending %D \MKIV, so it was bout time to have a dedicated variant. %D %D The constants are grouped in such a way that there is a minimal change of %D conflicts. %D %D \starttyping %D \definesystemconstants {word} %D \definemessageconstant {word} %D \stoptyping %D %D This commands generate \type{\s!word} and \type{\m!word}. \definesystemconstant {hans} \definesystemconstant {taco} %D First we define some system constants used for both the multi||lingual %D interface and multi||linguag typesetting. \definesystemconstant {afrikaans} \definesystemconstant {af} \definesystemconstant {arabic} \definesystemconstant {ar} \definesystemconstant {catalan} \definesystemconstant {ca} \definesystemconstant {chinese} \definesystemconstant {cn} \definesystemconstant {croatian} \definesystemconstant {hr} \definesystemconstant {czech} \definesystemconstant {cs} \definesystemconstant {cz} \definesystemconstant {danish} \definesystemconstant {da} \definesystemconstant {dutch} \definesystemconstant {nl} \definesystemconstant {english} \definesystemconstant {en} \definesystemconstant {finish} \definesystemconstant {fi} \definesystemconstant {french} \definesystemconstant {fr} \definesystemconstant {german} \definesystemconstant {de} \definesystemconstant {hungarian} \definesystemconstant {hu} \definesystemconstant {italian} \definesystemconstant {it} \definesystemconstant {latin} \definesystemconstant {la} \definesystemconstant {lithuanian} \definesystemconstant {lt} \definesystemconstant {bokmal} \definesystemconstant {nb} \definesystemconstant {norwegian} \definesystemconstant {no} \definesystemconstant {nynorsk} \definesystemconstant {nn} \definesystemconstant {polish} \definesystemconstant {pl} \definesystemconstant {persian} \definesystemconstant {pe} \definesystemconstant {portuguese} \definesystemconstant {pt} \definesystemconstant {romanian} \definesystemconstant {ro} \definesystemconstant {russian} \definesystemconstant {ru} \definesystemconstant {slovak} \definesystemconstant {sk} \definesystemconstant {slovenian} \definesystemconstant {sl} \definesystemconstant {slovene} % obsolete \definesystemconstant {spanish} \definesystemconstant {es} \definesystemconstant {swedish} \definesystemconstant {sv} \definesystemconstant {turkish} \definesystemconstant {tr} \definesystemconstant {turkmen} \definesystemconstant {tk} \definesystemconstant {gbenglish} \definesystemconstant {gb} \definesystemconstant {ukenglish} \definesystemconstant {uk} \definesystemconstant {usenglish} \definesystemconstant {us} \definesystemconstant {ukrainian} \definesystemconstant {ua} \definesystemconstant {greek} \definesystemconstant {gr} \definesystemconstant {ancientgreek} \definesystemconstant {agr} \definesystemconstant {vietnamese} \definesystemconstant {vi} \definesystemconstant {vn} \definesystemconstant {chinese} \definesystemconstant {cn} \definesystemconstant {japanese} \definesystemconstant {ja} \definesystemconstant {korean} \definesystemconstant {kr} \definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info %D For proper \UNICODE\ support we need a few font related constants. \definesystemconstant {BoldItalic} \definesystemconstant {BoldSlanted} \definesystemconstant {Bold} \definesystemconstant {Italic} \definesystemconstant {Regular} \definesystemconstant {Slanted} \definesystemconstant {Unicode} \definesystemconstant {Handwriting} \definesystemconstant {Calligraphy} \definesystemconstant {Casual} \definesystemconstant {Regular} \definesystemconstant {Support} \definesystemconstant {Type} \definesystemconstant {Math} % not used \definesystemconstant {MathBold} % not used \definesystemconstant {MathRoman} \definesystemconstant {MathRomanBold} \definesystemconstant {Serif} \definesystemconstant {SerifBold} \definesystemconstant {SerifItalic} \definesystemconstant {SerifBoldItalic} \definesystemconstant {SerifSlanted} \definesystemconstant {SerifBoldSlanted} \definesystemconstant {SerifCaps} %definesystemconstant {SerifCapsSlanted} \definesystemconstant {Sans} \definesystemconstant {SansBold} \definesystemconstant {SansItalic} \definesystemconstant {SansBoldItalic} \definesystemconstant {SansSlanted} \definesystemconstant {SansBoldSlanted} \definesystemconstant {SansCaps} % \definesystemconstant {SansCapsSlanted} \definesystemconstant {Mono} \definesystemconstant {MonoBold} \definesystemconstant {MonoItalic} \definesystemconstant {MonoBoldItalic} \definesystemconstant {MonoSlanted} \definesystemconstant {MonoBoldSlanted} \definesystemconstant {MonoCaps} % \definesystemconstant {MonoCapsSlanted} % \definesystemconstant {MonoVariable} \definesystemconstant {DefaultFont} \definesystemconstant {Simple} \definesystemconstant {Normal} \definesystemconstant {Caps} \definesystemconstant {serif} \definesystemconstant {sans} \definesystemconstant {mono} \definesystemconstant {math} \definesystemconstant {handwriting} \definesystemconstant {calligraphy} \definesystemconstant {casual} \definesystemconstant {fax} \definesystemconstant {fallback} %definesystemconstant {mnem} % kind of generic short tag \definesystemconstant {otr} \definesystemconstant {box} \definesystemconstant {file} \definesystemconstant {name} \definesystemconstant {spec} \definesystemconstant {both} \definesystemconstant {attribute} \definesystemconstant {none} \definesystemconstant {auto} \definesystemconstant {default} \definesystemconstant {smallcaps} \definesystemconstant {regular} \definesystemconstant {script} \definesystemconstant {fraktur} \definesystemconstant {blackboard} \definesystemconstant {mi} % maybe some day a special default vector \definesystemconstant {tf} \definesystemconstant {sl} \definesystemconstant {it} \definesystemconstant {bf} \definesystemconstant {bs} \definesystemconstant {bi} \definesystemconstant {rm} \definesystemconstant {ss} \definesystemconstant {tt} \definesystemconstant {hw} \definesystemconstant {cg} \definesystemconstant {mm} \definesystemconstant {x} \definesystemconstant {xx} \definesystemconstant {em} \definesystemconstant {a} \definesystemconstant {b} \definesystemconstant {c} \definesystemconstant {d} \definesystemconstant {e} \definesystemconstant {f} \definesystemconstant {mr} \definesystemconstant {mb} \definesystemconstant {mrlr} \definesystemconstant {mrrl} \definesystemconstant {mblr} \definesystemconstant {mbrl} \definesystemconstant {tf} \definesystemconstant {bf} \definesystemconstant {bs} \definesystemconstant {bi} \definesystemconstant {sl} \definesystemconstant {it} \definesystemconstant {sc} \definesystemconstant {small} \definesystemconstant {big} \definesystemconstant {first} \definesystemconstant {second} \definesystemconstant {third} %D Next come some \CONTEXT\ constants, used in the definition of private commands: \definesystemconstant {tex} \definesystemconstant {xml} \definesystemconstant {lua} \definesystemconstant {next} \definesystemconstant {pickup} \definesystemconstant {ascii} \definesystemconstant {default} \definesystemconstant {unknown} \definesystemconstant {action} \definesystemconstant {compare} \definesystemconstant {do} \definesystemconstant {dodo} \definesystemconstant {complex} \definesystemconstant {simple} \definesystemconstant {start} \definesystemconstant {stop} \definesystemconstant {dummy} \definesystemconstant {local} \definesystemconstant {global} \definesystemconstant {done} \definesystemconstant {font} \definesystemconstant {link} \definesystemconstant {parent} \definesystemconstant {child} \definesystemconstant {clone} \definesystemconstant {section} \definesystemconstant {handler} \definesystemconstant {counter} \definesystemconstant {single} \definesystemconstant {multi} \definesystemconstant {indeed} % \def\s!parent{->} % 1% faster / => does not work in assignments % \def\s!child {<-} % 1% faster / <= does not work in assignments \definesystemconstant {hasnumber} \definesystemconstant {hastitle} \definesystemconstant {hascaption} \definesystemconstant {haslevel} \definesystemconstant {hasparent} \definesystemconstant {hassuffix} \definesystemconstant {mkiv} \definesystemconstant {mkii} \definesystemconstant {normal} \definesystemconstant {bold} \definesystemconstant {italic} \definesystemconstant {slanted} \definesystemconstant {default} \definesystemconstant {smallcaps} \definesystemconstant {run} \definesystemconstant {mode} \definesystemconstant {setup} \definesystemconstant {environment} \definesystemconstant {document} %definesystemconstant {fam} \definesystemconstant {display} \definesystemconstant {text} \definesystemconstant {script} \definesystemconstant {scriptscript} \definesystemconstant {uncramped} \definesystemconstant {cramped} \definesystemconstant {lefthyphenmin} \definesystemconstant {righthyphenmin} \definesystemconstant {lefthyphenchar} \definesystemconstant {righthyphenchar} %definesystemconstant {skewchar} %definesystemconstant {hyphenchar} \definesystemconstant {catcodes} %definesystemconstant {encoding} %definesystemconstant {entities} %definesystemconstant {resource} \definesystemconstant {mapping} \definesystemconstant {language} \definesystemconstant {patterns} \definesystemconstant {rname} \definesystemconstant {rscale} %definesystemconstant {handling} \definesystemconstant {features} \definesystemconstant {direction} \definesystemconstant {fallbacks} \definesystemconstant {goodies} \definesystemconstant {designsize} %definesystemconstant {background} %definesystemconstant {ucmap} %definesystemconstant {property} %definesystemconstant {overprint} %definesystemconstant {layer} \definesystemconstant {effect} % todo s %definesystemconstant {negative} %definesystemconstant {color} %definesystemconstant {transparency} \definesystemconstant {black} \definesystemconstant {white} \definesystemconstant {system} % not yet interfaces messages \definesystemconstant {user} \definesystemconstant {check} \definesystemconstant {reset} \definesystemconstant {set} \definesystemconstant {empty} \definesystemconstant {realpage} \definesystemconstant {userpage} \definesystemconstant {subpage} \definesystemconstant {page} \definesystemconstant {subpage} \definesystemconstant {leftpage} \definesystemconstant {rightpage} \definesystemconstant {somewhere} \definesystemconstant {userdata} \definesystemconstant {command} \definesystemconstant {simple} \definesystemconstant {full} \definesystemconstant {text} \definesystemconstant {paragraph} \definesystemconstant {margintext} \definesystemconstant {line} \definesystemconstant {number} \definesystemconstant {symbol} \definesystemconstant {format} \definesystemconstant {data} \definesystemconstant {float} \definesystemconstant {extensions} \definesystemconstant {initializations} \definesystemconstant {rgb} \definesystemconstant {cmyk} \definesystemconstant {gray} \definesystemconstant {spot} \definesystemconstant {all} \definesystemconstant {dtp} \definesystemconstant {none} \definesystemconstant {map} \definesystemconstant {special} \definesystemconstant {size} \definesystemconstant {depth} \definesystemconstant {nodepth} %D Just to be complete we define the standard \TEX\ units. \definesystemconstant {cm} \definesystemconstant {em} \definesystemconstant {ex} \definesystemconstant {mm} \definesystemconstant {pt} \definesystemconstant {sp} \definesystemconstant {bp} \definesystemconstant {in} \definesystemconstant {pc} \definesystemconstant {dd} \definesystemconstant {cc} \definesystemconstant {nd} \definesystemconstant {nc} %D As the name of their define command states, the next set of constants is used in %D the message macro's. \definemessageconstant {check} \definemessageconstant {colors} \definemessageconstant {columns} \definemessageconstant {regimes} \definemessageconstant {figures} \definemessageconstant {fields} \definemessageconstant {files} \definemessageconstant {floatblocks} \definemessageconstant {fonts} \definemessageconstant {handlings} \definemessageconstant {interactions} \definemessageconstant {javascripts} \definemessageconstant {layouts} \definemessageconstant {languages} \definemessageconstant {references} \definemessageconstant {structures} \definemessageconstant {symbols} \definemessageconstant {system} \definemessageconstant {lua} \definemessageconstant {textblocks} \definemessageconstant {verbatims} \definemessageconstant {versions} \definemessageconstant {metapost} \definemessageconstant {chemicals} \definemessageconstant {publications} %D When we use numbers and dimensions the same applies as with the keywords like %D \type {width} and \type {plus} mentioned earlier. \def\!!ten {10} \def\!!twelve {12} \def\!!hundred {100} \def\!!thousand {1000} \def\!!tenthousand {10000} \def\!!maxcard {65536} \def\!!medcard {32768} \def\!!zeropoint {0pt} \def\!!onepoint {1pt} \def\!!twopoint {2pt} \def\!!threepoint {3pt} \def\!!fourpoint {4pt} \def\!!fivepoint {5pt} \def\!!sixpoint {6pt} \def\!!sevenpoint {7pt} \def\!!eightpoint {8pt} \def\!!ninepoint {9pt} \def\!!tenpoint {10pt} \def\!!elevenpoint {11pt} \def\!!twelvepoint {12pt} \def\!!fourteenpointfour {14.4pt} \def\!!plustoken {+} \def\!!minustoken {-} \def\__unknown__ {\string\\//} % unlikely value %D Variables are composed of a command specific tag and a user supplied variable %D (system constant). The tag \type {du} for instance is available as \type {\??du} %D and expands to \type {@@du} in composed variables. \definesystemvariable {du} % dummy, will stay % bibl: \definesystemvariable {pv} % PublicationVariable \definesystemvariable {pb} % PuBlication % needs checking (namespaces now) \definesystemvariable {fw} % simpleFonts by Wolfgang % old pragma \definesystemvariable {kt} % KonTakten \definesystemvariable {kw} % KontaktWaarde \definesystemvariable {st} % STickers \definesystemvariable {km} % KenMerk % mkii \definesystemvariable {xf} % XML File (xtag) \definesystemvariable {xp} % XML Processing (xtag, so still needed) \definesystemvariable {fo} % xml FO (xtag) \definesystemvariable {fx} % FoXet % mkiv %D Next we define some language independant one letter variables and keywords. We can %D actually make these system variables. \defineinterfaceconstant {x} {x} \defineinterfaceconstant {y} {y} \defineinterfaceconstant {w} {w} \defineinterfaceconstant {h} {h} \defineinterfaceconstant {s} {s} \defineinterfaceconstant {t} {t} \defineinterfaceconstant {a} {a} % can go \defineinterfaceconstant {b} {b} % can go \defineinterfaceconstant {c} {c} % can go \defineinterfaceconstant {d} {d} % can go \defineinterfaceconstant {e} {e} % can go \defineinterfaceconstant {f} {f} % can go \defineinterfaceconstant {s} {s} \defineinterfaceconstant {r} {r} \defineinterfaceconstant {g} {g} \defineinterfaceconstant {b} {b} \defineinterfaceconstant {c} {c} \defineinterfaceconstant {m} {m} \defineinterfaceconstant {y} {y} \defineinterfaceconstant {k} {k} \defineinterfaceconstant {a} {a} % alternative \defineinterfaceconstant {t} {t} % transparency \defineinterfaceconstant {p} {p} % percentage \defineinterfaceconstant {h} {h} \defineinterfaceconstant {s} {s} \defineinterfaceconstant {v} {v} \defineinterfaceconstant {rgb} {rgb} \defineinterfaceconstant {cmyk} {cmyk} \defineinterfaceconstant {mp} {mp} \defineinterfacevariable {rgb} {rgb} \defineinterfacevariable {cmyk} {cmyk} \defineinterfacevariable {mp} {mp} \defineinterfacevariable {s} {s} \defineinterfacevariable {a} {a} \defineinterfacevariable {b} {b} \defineinterfacevariable {c} {c} \defineinterfacevariable {d} {d} %D Special purpose variables: \def\v!oddeven#1{\ifodd#1\v!odd\else\v!even\fi} %D The names of files and their extensions are fixed. \CONTEXT\ uses as less %D files as possible. Utility files can be recognized by the first two %D characters of the extension: \type {tu}. %definefileconstant {utilityfilename} {texutil} %definefileconstant {blockextension} {tub} %definefileconstant {figureextension} {tuf} %definefileconstant {inputextension} {tui} %definefileconstant {outputextension} {tuo} % tup for previous run %definefileconstant {optionextension} {top} %definefileconstant {temporaryextension} {tmp} %definefileconstant {patternsextension} {pat} %definefileconstant {hyphensextension} {hyp} %definefileconstant {fontmapextension} {map} \definefileconstant {bibextension} {bbl} %D These files are loaded at start||up. They may contain system specific setups (or %D calls to other files), old macro's, to garantee compatibility and new macro's noy %D yet present in the format. \definefileconstant {errfilename} {cont-err} \definefileconstant {sysfilename} {cont-sys} \definefileconstant {newfilename} {cont-new} \definefileconstant {locfilename} {cont-loc} \definefileconstant {expfilename} {cont-exp} %D The setup files for the language, font, color and special subsystems have a common %D prefix. This means that we have at most three characters for unique filenames. \definefileconstant {colorprefix} {colo-} %definefileconstant {encodingprefix} {enco-} %definefileconstant {filterprefix} {filt-} \definefileconstant {fontprefix} {font-} %definefileconstant {handlingprefix} {hand-} %definefileconstant {javascriptprefix} {java-} %definefileconstant {languageprefix} {lang-} %definefileconstant {mathprefix} {math-} %definefileconstant {metapostprefix} {meta-} %definefileconstant {regimeprefix} {regi-} %definefileconstant {specialprefix} {spec-} \definefileconstant {symbolprefix} {symb-} \definefileconstant {typeprefix} {type-} %definefileconstant {xtagprefix} {xtag-} %definefileconstant {propprefix} {prop-} %definefileconstant {unicprefix} {unic-} %definefileconstant {sortprefix} {sort-} %definefileconstant {prettyprefix} {pret-} %definefileconstant {moduleprefix} {m-} %definefileconstant {styleprefix} {s-} %definefileconstant {xstyleprefix} {x-} %definefileconstant {privateprefix} {p-} %definefileconstant {thirdprefix} {t-} %definefileconstant {beforeprefix} {b-} %definefileconstant {afterprefix} {a-} % for old times sake: % \defineinterfaceconstant {x} {x} % \defineinterfaceconstant {xx} {xx} % \defineinterfaceconstant {em} {em} % will go % \defineinterfaceconstant {tf} {tf} % \defineinterfaceconstant {bf} {bf} % \defineinterfaceconstant {bs} {bs} % \defineinterfaceconstant {bi} {bi} % \defineinterfaceconstant {sl} {sl} % \defineinterfaceconstant {it} {it} % \defineinterfaceconstant {sc} {sc} % keep, used elsewhere (or define in mult-def) %D For figure inclusion we need(ed): %defineinterfaceconstant {tif} {tif} %defineinterfaceconstant {eps} {eps} %defineinterfaceconstant {mps} {mps} %defineinterfaceconstant {jpg} {jpg} %defineinterfaceconstant {pdf} {pdf} %defineinterfaceconstant {png} {png} %defineinterfaceconstant {avi} {avi} %defineinterfaceconstant {mov} {mov} %defineinterfaceconstant {svg} {svg} \defineinterfaceconstant {tex} {tex} % Also gone? %defineinterfaceconstant {tmp} {tmp} %defineinterfaceconstant {cld} {cld} %D A careful reader will have noticed that in the module \type {mult-ini} we defined %D \type {\selectinterface}. We were not yet able to actually select an interface, %D because we still had to define the constants and variables. Now we've done so, %D selection is permitted. \selectinterface %D Ok, here are some more, because we've got ouselves some extensions to \CONTEXT. \definemessageconstant {addresses} \definemessageconstant {documents} %D Nicer than being undefined: \let\p_align \empty \let\p_aligntitle\empty \let\p_continue \empty \let\p_footer \empty \let\p_label \empty \let\p_number \empty \let\p_page \empty \let\p_state \empty \let\p_strut \empty \let\p_text \empty \let\p_tolerance \empty % more will follow \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-faq-03.tex0000644000175000017500000000324111754241457023654 0ustar norbertnorbert%D \module %D [ file=s-faq-03, %D version=1997.21.08, %D title=\CONTEXT\ Style File, %D subtitle=FAQ General Framework, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \def\StartFAQ[#1]% {\getrawparameters[FAQ][name=,label=,language=,hyphenation=,url=,#1] \let\NameOfFAQ \FAQname \let\TagOfFAQ \FAQlabel \let\LanguageOfFAQ \FAQlanguage \let\HyphenationOfFAQ \FAQhyphenation \let\ListOfFAQ \FAQurl \doifmodeelse{screen} {\usemodule[faq-01]} {\usemodule[faq-02]} \starttext \TitlePage \StartReadingFAQ} \def\StopFAQ {\StopReadingFAQ \IndexPage \AllFAQs \stoptext} \def\ProcessFAQ[#1]% {\StartFAQ[#1] \input \FileNameOfFAQ \relax \StopFAQ} % for old times sake: \def\PDFscreenFAQ \name #1 \tag #2 \language #3 \hyphenation #4 \list #5 {\def\NameOfFAQ {#1} \def\TagOfFAQ {#2} \def\LanguageOfFAQ {#3} \def\HyphenationOfFAQ {#4} \def\ListOfFAQ {#5} \usemodule[faq-01] \starttext \TitlePage \FileWithFAQs \IndexPage \AllFAQs \stoptext} \def\PDFpaperFAQ \name #1 \tag #2 \language #3 \hyphenation #4 \list #5 {\def\NameOfFAQ {#1} \def\TagOfFAQ {#2} \def\LanguageOfFAQ {#3} \def\HyphenationOfFAQ {#4} \def\ListOfFAQ {#5} \usemodule[faq-02] \starttext \TitlePage \FileWithFAQs \IndexPage \stoptext} \let\DVIpaperFAQ\PDFscreenFAQ \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ura.mkii0000644000175000017500000001355111754241457024271 0ustar norbertnorbert%D \module %D [ file=lang-sla, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Uralic Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % Todo: replace \'.. by \namedglyph \writestatus{loading}{ConTeXt Language Macros / Uralic Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. %D %D \starttabulate[|lB|l|] %D \NC Finnish \NC \NC \NR %D \NC Hungarian \NC Balazs Nagy \NC \NR %D \stoptabulate % Cheremiss, Estonian, Finnish, Karelian, Laap, Mordvinian, % Permian tongues, Hungarian, Ostyak, Vogul, Samoyed \unprotect \installlanguage [\s!fi] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,\ ,\v!month,\ ,\v!day}] \installlanguage [\s!hu] [\c!spacing=\v!packed, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\lowerleftsingleninequote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\lowerleftdoubleninequote, \c!rightquotation=\upperrightdoubleninequote, \c!date={\v!year,.,\ ,\v!month,\ ,\v!day,.}, \s!mapping=ec, \s!encoding=ec] \installlanguage [finish] [\s!fi] \installlanguage [hungarian] [\s!hu] \setupheadtext [\s!fi] [\v!content=Sis\"allys] \setupheadtext [\s!fi] [\v!tables=Taulukkoj] \setupheadtext [\s!fi] [\v!figures=Kuvi] \setupheadtext [\s!fi] [\v!graphics=Grafiikkaoi] \setupheadtext [\s!fi] [\v!intermezzi=Intermezzos] \setupheadtext [\s!fi] [\v!index=Indeksiluku] \setupheadtext [\s!fi] [\v!abbreviations=Lyhennyksi] \setupheadtext [\s!fi] [\v!logos=Vertauskuva] \setupheadtext [\s!fi] [\v!units=Yksik\"ot] \setupheadtext [\s!hu] [\v!content=Tartalom] \setupheadtext [\s!hu] [\v!tables=T\'abl\'azatok] \setupheadtext [\s!hu] [\v!figures=\'Abr\'ak] \setupheadtext [\s!hu] [\v!graphics=Grafik\'ak] \setupheadtext [\s!hu] [\v!intermezzi=Intermezzok] \setupheadtext [\s!hu] [\v!index=Index] \setupheadtext [\s!hu] [\v!abbreviations=R\"ovid\'it\'esek] \setupheadtext [\s!hu] [\v!logos=Fejl\'ecek] \setupheadtext [\s!hu] [\v!units=M\'ert\'ekegys\'egek] \setuplabeltext [\s!fi] [\v!table=Taulukko ] \setuplabeltext [\s!fi] [\v!figure=Kuva ] \setuplabeltext [\s!fi] [\v!intermezzo=Intermezzo ] \setuplabeltext [\s!fi] [\v!graphic=Grafiikka ] \setuplabeltext [\s!fi] [\v!chapter=] \setuplabeltext [\s!fi] [\v!section=] \setuplabeltext [\s!fi] [\v!subsection=] \setuplabeltext [\s!fi] [\v!subsubsection=] \setuplabeltext [\s!fi] [\v!subsubsubsection=] \setuplabeltext [\s!fi] [\v!appendix=] \setuplabeltext [\s!fi] [\v!part=Osa ] \setuplabeltext [\s!fi] [\v!line=rivi ] \setuplabeltext [\s!fi] [\v!lines=rivie ] \setuplabeltext [\s!hu] [\v!table={,.~t\'abl\'azat:}] \setuplabeltext [\s!hu] [\v!figure={,.~\'abra:}] \setuplabeltext [\s!hu] [\v!intermezzo={,.~intermezzo:}] \setuplabeltext [\s!hu] [\v!graphic={,.~k\'ep:}] \setuplabeltext [\s!hu] [\v!chapter={,.~fejezet:}] \setuplabeltext [\s!hu] [\v!section={,.}] \setuplabeltext [\s!hu] [\v!subsection={,.}] \setuplabeltext [\s!hu] [\v!subsubsection={,.}] \setuplabeltext [\s!hu] [\v!subsubsubsection={,.}] \setuplabeltext [\s!hu] [\v!appendix=] \setuplabeltext [\s!hu] [\v!part={,.~r\'esz:}] \setuplabeltext [\s!hu] [\v!line={,.~sor:}] \setuplabeltext [\s!hu] [\v!lines=sorok] \setuplabeltext [\s!fi] [\v!january=tammikuu] \setuplabeltext [\s!fi] [\v!february=helmikuu] \setuplabeltext [\s!fi] [\v!march=maaliskuu] \setuplabeltext [\s!fi] [\v!april=huhtikuu] \setuplabeltext [\s!fi] [\v!may=toukokuu] \setuplabeltext [\s!fi] [\v!june=kes\"akuu] \setuplabeltext [\s!fi] [\v!july=hein\"akuu] \setuplabeltext [\s!fi] [\v!august=elokuu] \setuplabeltext [\s!fi] [\v!september=syyskuu] \setuplabeltext [\s!fi] [\v!october=lokakuu] \setuplabeltext [\s!fi] [\v!november=marraskuu] \setuplabeltext [\s!fi] [\v!december=joulukuu] \setuplabeltext [\s!hu] [\v!january=janu\'ar] \setuplabeltext [\s!hu] [\v!february=febru\'ar] \setuplabeltext [\s!hu] [\v!march=m\'arcius] \setuplabeltext [\s!hu] [\v!april=\'aprilis] \setuplabeltext [\s!hu] [\v!may=m\'ajus] \setuplabeltext [\s!hu] [\v!june=j\'unius] \setuplabeltext [\s!hu] [\v!july=j\'ulius] \setuplabeltext [\s!hu] [\v!august=augusztus] \setuplabeltext [\s!hu] [\v!september=szeptember] \setuplabeltext [\s!hu] [\v!october=okt\'ober] \setuplabeltext [\s!hu] [\v!november=november] \setuplabeltext [\s!hu] [\v!december=december] \setuplabeltext [\s!fi] [\v!sunday=sunnuntai] \setuplabeltext [\s!fi] [\v!monday=maanantai] \setuplabeltext [\s!fi] [\v!tuesday=tiistai] \setuplabeltext [\s!fi] [\v!wednesday=keskiviikko] \setuplabeltext [\s!fi] [\v!thursday=torstai] \setuplabeltext [\s!fi] [\v!friday=perjantai] \setuplabeltext [\s!fi] [\v!saturday=lauantai] \setuplabeltext [\s!hu] [\v!sunday=vas\'arnap] \setuplabeltext [\s!hu] [\v!monday=h\'etf\H{o}] \setuplabeltext [\s!hu] [\v!tuesday=kedd] \setuplabeltext [\s!hu] [\v!wednesday=szerda] \setuplabeltext [\s!hu] [\v!thursday=cs\"ut\"ort\"ok] \setuplabeltext [\s!hu] [\v!friday=p\'entek] \setuplabeltext [\s!hu] [\v!saturday=szombat] %D \ShowAllLanguageValues [\s!fi] [finnish] {Finnish} {phone} %D \ShowAllLanguageValues [\s!hu] [hungarian] {Hungarian} {rhapsody} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-math-repertoire.mkiv0000644000175000017500000003276112161703335026142 0ustar norbertnorbert%D \module %D [ file=s-math-parameters.mkiv, % was s-mat-12.mkiv %D version=2012.06.06, % whatever, probably a bit earlier %D title=\CONTEXT\ Style File, %D subtitle=Show Math Character Repertoire, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[s][math-characters] % context --jit --global --bodyfont=lucidanova --result=math-repertoire-lucidanova s-math-repertoire.mkiv % context --jit --global --bodyfont=cambria --result=math-repertoire-cambria s-math-repertoire.mkiv % context --jit --global --bodyfont=xits --result=math-repertoire-xits s-math-repertoire.mkiv % context --jit --global --bodyfont=modern --result=math-repertoire-modern s-math-repertoire.mkiv % context --jit --global --bodyfont=pagella --result=math-repertoire-pagella s-math-repertoire.mkiv % context --jit --global --bodyfont=termes --result=math-repertoire-termes s-math-repertoire.mkiv % context --jit --global --bodyfont=bonum --result=math-repertoire-bonum s-math-repertoire.mkiv \startmodule[math-repertoire] % layout \definecolor[backgroundcolor] [r=.6,g=.6] \definecolor[backgroundcolorx][r=.6] \definecolor[backgroundcolory][g=.6] \definecolor[baselinecolor] [a=1,t=.5,s=.6] \definecolor[charactercolor] [b=.6] \definecolor[pagecolor] [s=.1] \definecolor[nonecolor] [s=.5] \definecolor[textcolor] [s=.9] % \setuppapersize[HD] % % \setuplayout % [page] \setuppapersize[HD+] \setuplayout [backspace=0pt, topspace=0pt, bottomspace=120pt, %1200-1080 bottom=24pt, bottomdistance=5mm, header=0pt, footer=0pt, width=middle, height=middle] \definelayer [page] \setuplayer [page] [width=\textwidth, height=\textheight] \setupbackgrounds [page] [background=color, backgroundcolor=pagecolor] \setupbackgrounds [text][text] [bottomframe=on, framecolor=textcolor, rulethickness=0.025ex] \setupmakeup [standard] [pagestate=start] \setupinteraction [state=start, menu=on] \defineinteractionmenu [ALPHABETS] [bottom] \defineinteractionmenu [alphabets] [bottom] \defineinteractionmenu [symbols] [bottom] \setupinteractionmenu [bottom] [before=\vfill, after=\vfill, left=\hfill, right=\hfill, style=\tt\bf, distance=0pt, color=textcolor, contrastcolor=nonecolor] \startinteractionmenu[bottom] \startgot [firstpage] first \stopgot \quad \startgot [deltapage(-100)] -100 \stopgot \quad \startgot [deltapage(-10)] -10 \stopgot \quad \startgot [previouspage] previous \stopgot \quad \startgot [nextpage] next \stopgot \quad \startgot [deltapage(+10)] +10 \stopgot \quad \startgot [deltapage(+100)] +100 \stopgot \quad \startgot [lastpage] last \stopgot \stopinteractionmenu \startinteractionmenu[ALPHABETS] \startgot [U+00041] NORMAL \stopgot \quad \startgot [U+1D400] BOLD \stopgot \quad \startgot [U+1D434] ITALIC \stopgot \quad \startgot [U+1D468] BOLDITALIC \stopgot \quad \startgot [U+1D49C] SCRIPT \stopgot \quad \startgot [U+1D4D0] BOLDSCRIPT \stopgot \quad \startgot [U+1D504] FRAKTUR \stopgot \quad \startgot [U+1D538] DOUBLESTRUCK \stopgot \quad \startgot [U+1D56C] BOLDFRAKTUR \stopgot \quad \startgot [U+1D5A0] SS NORMAL \stopgot \quad \startgot [U+1D5D4] SS BOLD \stopgot \quad \startgot [U+1D608] SS ITALIC \stopgot \quad \startgot [U+1D63C] SS BOLDITALIC \stopgot \quad \startgot [U+1D670] MONOSPACE \stopgot \quad \startgot [U+00391] GRK NORMAL \stopgot \quad \startgot [U+1D6A8] GRK BOLD \stopgot \quad \startgot [U+1D6E2] GRK ITALIC \stopgot \quad \startgot [U+1D71C] GRK BOLDITALIC \stopgot \quad \startgot [U+1D756] GRK SS BOLD \stopgot \quad \startgot [U+1D790] GRK SS BOLDITALIC \stopgot \stopinteractionmenu \startinteractionmenu[alphabets] \startgot [U+00061] normal \stopgot \quad \startgot [U+1D41A] bold \stopgot \quad \startgot [U+1D44E] italic \stopgot \quad \startgot [U+1D482] bolditalic \stopgot \quad \startgot [U+1D4B6] script \stopgot \quad \startgot [U+1D4EA] boldscript \stopgot \quad \startgot [U+1D51E] fraktur \stopgot \quad \startgot [U+1D552] doublestruck \stopgot \quad \startgot [U+1D586] boldfraktur \stopgot \quad \startgot [U+1D5BA] ss normal \stopgot \quad \startgot [U+1D5EE] ss bold \stopgot \quad \startgot [U+1D622] ss italic \stopgot \quad \startgot [U+1D656] ss bolditalic \stopgot \quad \startgot [U+1D68A] monospace \stopgot \quad \startgot [U+003B1] grk normal \stopgot \quad \startgot [U+1D6C2] grk bold \stopgot \quad \startgot [U+1D6FC] grk italic \stopgot \quad \startgot [U+1D736] grk bolditalic \stopgot \quad \startgot [U+1D770] grk ss bold \stopgot \quad \startgot [U+1D7AA] grk ss bolditalic \stopgot \stopinteractionmenu \startinteractionmenu[symbols] \startgot [U+00030] dig normal \stopgot \quad \startgot [U+1D7CE] dig bold \stopgot \quad \startgot [U+1D7D8] dig doublestruck \stopgot \quad \startgot [U+1D7E2] dig ss normal \stopgot \quad \startgot [U+1D7EC] dig ss bold \stopgot \quad \startgot [U+1D7F6] dig monospace \stopgot \quad \startgot [U+02200] operators \stopgot \quad \startgot [U+02701] symbols a \stopgot \quad \startgot [U+02901] symbols b \stopgot \quad \startgot [U+02A00] supplemental \stopgot \stopinteractionmenu \defineframed [somedata] [background=color, backgroundcolor=textcolor, %framecolor=charactercolor, %rulethickness=1pt, frame=off, offset=1ex] % helpers \unexpanded\def\showmathcharacterstxt#1% {{\tttf#1}} \unexpanded\def\showmathcharacterschr#1#2% {\iffontchar\font#2\relax \scale [sx=#1,sy=#1] {\dontleavehmode \begingroup \setbox\scratchbox\hbox{\charactercolor\char#2}% \scratchdimen\wd\scratchbox \ifdim\scratchdimen>\zeropoint \backgroundline[backgroundcolor]{\box\scratchbox}% \else\ifdim\scratchdimen<\zeropoint \scratchdimen-\scratchdimen \setbox\scratchbox\hbox to \scratchdimen{\hss\charactercolor\char#2}% \backgroundline[backgroundcolorx]{\box\scratchbox}% \else \setbox\scratchbox\hbox to 1em{\hss\charactercolor\char#2}% \scratchdimen\wd\scratchbox \backgroundline[backgroundcolory]{\box\scratchbox}% \fi\fi \hskip-\scratchdimen \baselinecolor\vrule width \scratchdimen height .05ex depth .05ex \endgroup}% \fi} \unexpanded\def\showmathcharactersmth#1#2% {\setbox\scratchbox\hbox{\showmathcharacterschr{#1}{#2}}% \ht\scratchbox\strutht \dp\scratchbox\strutdp \box\scratchbox} \let\showmathcharactersbodyfonts\empty \unexpanded\def\showmathcharactersbodyfontentry#1#2% {\somedata [align={none,middle},background=,height=5cm] {\begingroup \switchtobodyfont[#2,12pt]% \definedfont[MathRoman*math-text]% \showmathcharactersmth{10}{#1}% \endgroup \vfilll \doifmodeelse{crosslink} {\goto{\strut\textcolor\showmathcharacterstxt{#2}}[#2::#1]}% {\strut\textcolor\showmathcharacterstxt{#2}}}% \hskip1ex} \unexpanded\def\showmathcharacterssetbodyfonts#1% {\edef\showmathcharactersbodyfonts{#1}% \def\doshowmathcharacterssetbodyfonts##1{\setupbodyfont[##1,12pt]}% \processcommacommand[\showmathcharactersbodyfonts]\doshowmathcharacterssetbodyfonts} \unexpanded\def\showmathcharactersbodyfontschars#1% {\processcommacommand[\showmathcharactersbodyfonts]{\showmathcharactersbodyfontentry{#1}}} % main \unexpanded\def\showmathcharactersstart {\starttext \startstandardmakeup % we use baselinecolor so that we have a transparency on page 1 \setupalign[middle] \vfil \dontleavehmode \scale[height=.3\textheight]{\strut\color[textcolor]{\fontclass}} \vfil \dontleavehmode \scale[height=.1\textheight]{\strut\color[baselinecolor]{\currentdate}} \vfil \vfil \stopstandardmakeup} \unexpanded\def\showmathcharactersstop {\stoptext} % entry \unexpanded\def\showmathcharactersstartentry {\startstandardmakeup} \unexpanded\def\showmathcharactersstopentry {\tightlayer[page] \stopstandardmakeup} \unexpanded\def\showmathcharactersreference#1% {\setlayer[page]{\pagereference[#1]}} \unexpanded\def\showmathcharactersentryhexdectit#1#2#3% {\setlayer [page] [preset=middletop,voffset=5mm] {\somedata[height=1cm]{\showmathcharacterstxt{#1}}} \setlayer [page] [preset=middle,y=2cm] {\showmathcharactersmth{25}{#2}} \setlayer [page] [preset=righttop,offset=5mm] {\somedata[height=1cm]{\showmathcharacterstxt{#3}}} \doifsomething\showmathcharactersbodyfonts {\setlayer [page] [preset=middlebottom,voffset=5mm] {\showmathcharactersbodyfontschars{#2}}}} % dimensions \unexpanded\def\showmathcharactersentrywdhtdpic#1#2#3#4% {\setlayer [page] [preset=leftbottom,offset=5mm] {\somedata[align=normal,width=5cm] {\strut width \hfill \the\dimexpr#1sp\par \strut height\hfill \the\dimexpr#2sp\par \strut depth \hfill \the\dimexpr#3sp\par \strut italic\hfill \the\dimexpr#4sp}}} \unexpanded\def\showmathcharactersentryresource#1% {} % {virtual: #1\par} % next \unexpanded\def\showmathcharactersstartnext {\setlayer [page] [preset=middleleft,hoffset=5mm] \bgroup\vbox\bgroup} \unexpanded\def\showmathcharactersstopnext {\egroup\egroup} \unexpanded\def\showmathcharactersnextentry#1#2#3% {\ifnum#1>1 \vskip1ex \fi \dontleavehmode\somedata [align=normal,width=4cm] {\strut\showmathcharacterstxt{#2}\hfill\showmathcharacterschr{2}{#3}}\par} \unexpanded\def\showmathcharactersnextcycle#1% {\ifnum#1>1 \vskip1ex \fi \dontleavehmode\somedata [align=normal,width=4cm] {\strut\showmathcharacterstxt{cycle}}\par} % variants \unexpanded\def\showmathcharactersstartvvariants {\setlayer [page] [preset=lefttop,offset=5mm] \bgroup\vbox\bgroup} \unexpanded\def\showmathcharactersstarthvariants {\setlayer [page] [preset=lefttop,offset=5mm] \bgroup\hbox\bgroup} \unexpanded\def\showmathcharactersvvariantsentry#1#2#3% {\ifnum#1>1 \vskip1ex \fi \dontleavehmode\somedata [align=middle,width=4cm] {\strut\showmathcharacterstxt{#2}\hfilll\showmathcharacterschr{2}{#3}}} \unexpanded\def\showmathcharactershvariantsentry#1#2#3% {\ifnum#1>1 \hskip1ex \else \dontleavehmode \fi \somedata [align={none,middle},height=2cm] {\strut\showmathcharacterstxt{#2}\vfilll\showmathcharacterschr{2}{#3}}} \unexpanded\def\showmathcharactersstopvvariants {\egroup\egroup} \unexpanded\def\showmathcharactersstophvariants {\egroup\egroup} \unexpanded\def\showmathcharactersbetweennextandvariants {} % classes \unexpanded\def\showmathcharactersstartentryclassspec {\setlayer [page] [preset=rightbottom,offset=5mm] \bgroup\somedata[align=normal,width=8cm]\bgroup} \unexpanded\def\showmathcharactersstopentryclassspec {\egroup\egroup} \unexpanded\def\showmathcharactersentryclassname#1#2% {\strut{\showmathcharacterstxt#1}\hfill\showmathcharacterstxt{#2}\par} % symbols \unexpanded\def\showmathcharactersentrysymbol#1#2% {\setlayer [page] [preset=leftbottom,hoffset=5mm,voffset=50mm] {\somedata [align=normal,width=5cm] {\showmathcharacterstxt{#1}\hfill\showmathcharacterschr{4}{#2}}}} % alternates \unexpanded\def\showmathcharactersstartlookupvariants {\setlayer [page] [preset=middleright,hoffset=5mm] \bgroup\vbox\bgroup} \unexpanded\def\showmathcharactersstoplookupvariants {\egroup\egroup} \unexpanded\def\showmathcharacterslookupvariant#1#2#3#4% {\ifnum#1>1 \vskip1ex \fi \somedata [align=normal,width=7cm] {\showmathcharacterstxt{#4:} \showmathcharacterstxt{#2}\hfill\showmathcharacterschr{4}{#3}}} % main \unprotect \unexpanded\def\showmathfontrepertoire {\dosingleempty\module_math_repertoire_show} \def\module_math_repertoire_show[#1]% % this is a one-run style so we can forget about an alternative {\showmathfontcharacters[\c!alternative=,#1]} % just assume that the previous definitions are global \protect \stopmodule \continueifinputfile{s-math-repertoire.mkiv} \showmathcharacterssetbodyfonts{lucidanova,cambria,xits,modern,pagella,termes,bonum} \starttext \doifelse {\getdocumentargument{bodyfont}} {} { \setupbodyfont[cambria, 12pt] % \setupbodyfont[modern, 12pt] % \setupbodyfont[lmvirtual, 12pt] % \setupbodyfont[pxvirtual, 12pt] % \setupbodyfont[txvirtual, 12pt] % \setupbodyfont[palatino, 10pt] % \setupbodyfont[mathtimes, 12pt] % \setupbodyfont[stix, 12pt] % \setupbodyfont[xits, 12pt] % \setupbodyfont[lucida, 12pt] % \setupbodyfont[lucidanova,12pt] % \setupbodyfont[pagella, 12pt] % \setupbodyfont[bonum, 12pt] } { \normalexpanded{\setupbodyfont[\getdocumentargument{bodyfont},12pt]} } \showmathfontrepertoire \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-ro.mkiv0000644000175000017500000000102611754241457024153 0ustar norbertnorbert%D \module %D [ file=cont-ro, %D version=2000.01.09, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Romanian Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {romanian} \def\defaultlanguagetag{ro} \input context.mkiv \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-str.lua0000644000175000017500000001656212130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['page-str'] = { version = 1.001, comment = "companion to page-str.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- streams -> managers.streams -- work in progresss .. unfinished local concat, insert, remove = table.concat, table.insert, table.remove local find_tail, write_node, free_node, copy_nodelist = node.slide, node.write, node.free, node.copy_list local vpack_nodelist, hpack_nodelist = node.vpack, node.hpack local texdimen, texbox = tex.dimen, tex.box local settings_to_array = utilities.parsers.settings_to_array local nodes, node = nodes, node local nodepool = nodes.pool local tasks = nodes.tasks local new_kern = nodepool.kern local new_glyph = nodepool.glyph local trace_collecting = false trackers.register("streams.collecting", function(v) trace_collecting = v end) local trace_flushing = false trackers.register("streams.flushing", function(v) trace_flushing = v end) local report_streams = logs.reporter("streams") streams = streams or { } -- might move to the builders namespace local streams = streams local data, name, stack = { }, nil, { } function streams.enable(newname) if newname == "default" then name = nil else name = newname end end function streams.disable() name = stack[#stack] end function streams.start(newname) insert(stack,name) name = newname end function streams.stop(newname) name = remove(stack) end function streams.collect(head,where) if name and head and name ~= "default" then local tail = node.slide(head) local dana = data[name] if not dana then dana = { } data[name] = dana end local last = dana[#dana] if last then local tail = find_tail(last) tail.next, head.prev = head, tail elseif last == false then dana[#dana] = head else dana[1] = head end if trace_collecting then report_streams("appending snippet %a to slot %s",name,#dana) end return nil, true else return head, false end end function streams.push(thename) if not thename or thename == "" then thename = name end if thename and thename ~= "" then local dana = data[thename] if dana then dana[#dana+1] = false if trace_collecting then report_streams("pushing snippet %a",thename) end end end end function streams.flush(name,copy) -- problem: we need to migrate afterwards local dana = data[name] if dana then local dn = #dana if dn == 0 then -- nothing to flush elseif copy then if trace_flushing then report_streams("flushing copies of %s slots of %a",dn,name) end for i=1,dn do local di = dana[i] if di then write_node(copy_nodelist(di.list)) -- list, will be option end end if copy then data[name] = nil end else if trace_flushing then report_streams("flushing %s slots of %a",dn,name) end for i=1,dn do local di = dana[i] if di then write_node(di.list) -- list, will be option di.list = nil free_node(di) end end end end end function streams.synchronize(list) -- this is an experiment ! -- we don't optimize this as we want to trace in detail list = settings_to_array(list) local max = 0 if trace_flushing then report_streams("synchronizing list: % t",list) end for i=1,#list do local dana = data[list[i]] if dana then local n = #dana if n > max then max = n end end end if trace_flushing then report_streams("maximum number of slots: %s",max) end for m=1,max do local height, depth = 0, 0 for i=1,#list do local name = list[i] local dana = data[name] local slot = dana[m] if slot then local vbox = vpack_nodelist(slot) local ht, dp = vbox.height, vbox.depth if ht > height then height = ht end if dp > depth then depth = dp end dana[m] = vbox if trace_flushing then report_streams("slot %s of %a is packed to height %p and depth %p",m,name,ht,dp) end end end if trace_flushing then report_streams("slot %s has max height %p and max depth %p",m,height,depth) end local strutht, strutdp = texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth local struthtdp = strutht + strutdp for i=1,#list do local name = list[i] local dana = data[name] local vbox = dana[m] if vbox then local delta_height = height - vbox.height local delta_depth = depth - vbox.depth if delta_height > 0 or delta_depth > 0 then if false then -- actually we need to add glue and repack vbox.height, vbox.depth = height, depth if trace_flushing then report_streams("slot %s of %a with delta (%p,%p) is compensated",m,i,delta_height,delta_depth) end else -- this is not yet ok as we also need to keep an eye on vertical spacing -- so we might need to do some splitting or whatever local tail = vbox.list and find_tail(vbox.list) local n, delta = 0, delta_height -- for tracing while delta > 0 do -- we need to add some interline penalties local line = copy_nodelist(tex.box.strutbox) line.height, line.depth = strutht, strutdp if tail then tail.next, line.prev = line, tail end tail = line n, delta = n +1, delta - struthtdp end dana[m] = vpack_nodelist(vbox.list) vbox.list = nil free_node(vbox) if trace_flushing then report_streams("slot %s:%s with delta (%p,%p) is compensated by %s lines",m,i,delta_height,delta_depth,n) end end end else -- make dummy end end end end tasks.appendaction("mvlbuilders", "normalizers", "streams.collect") tasks.disableaction("mvlbuilders", "streams.collect") function streams.initialize() tasks.enableaction ("mvlbuilders", "streams.collect") end -- todo: remove empty last { }'s context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-fil.mkiv0000644000175000017500000001035712161703335024303 0ustar norbertnorbert%D \module %D [ file=cont-fil, %D version=1997.11.15, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=File Synonyms, %D author=J. Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: use full names and remove calls at the tex end (now integrated in % lua library code \writestatus{loading}{ConTeXt File Synonyms} \definefilesynonym [chemics] [chemic] \definefilesynonym [unit] [units] \definefilesynonym [pstric] [pstricks] \definefilesynonym [pstrick] [pstricks] \definefilesynonym [finance] [financ] \definefilesynonym [dir-make] [dir-01] \definefilesynonym [dir-identify] [dir-05] \definefilesynonym [int-load] [set-11] \definefilesynonym [int-make] [set-12] \definefilesynonym [fig-base] [fig-00] \definefilesynonym [fig-make] [fig-01] \definefilesynonym [fig-fake] [fig-02] \definefilesynonym [fig-missing] [fig-06] \definefilesynonym [exi-interface] [exi-21] \definefilesynonym [res-make] [res-01] \definefilesynonym [res-base] [res-04] \definefilesynonym [res-crop] [res-07] \definefilesynonym [res-trace] [res-08] \definefilesynonym [res-log] [res-09] \definefilesynonym [res-identify] [res-12] \definefilesynonym [med-show] [res-50] \definefilesynonym [pre-general] [pre-00] \definefilesynonym [pre-original] [pre-01] \definefilesynonym [pre-green] [pre-02] \definefilesynonym [pre-funny] [pre-03] \definefilesynonym [pre-colorful] [pre-04] \definefilesynonym [pre-fuzzy] [pre-05] \definefilesynonym [pre-polish] [pre-06] \definefilesynonym [pre-spider] [pre-07] \definefilesynonym [pre-wonder] [pre-08] \definefilesynonym [pre-windows] [pre-09] \definefilesynonym [pre-grow] [pre-10] \definefilesynonym [pre-stack] [pre-11] \definefilesynonym [pre-arrows] [pre-12] \definefilesynonym [pre-writing] [pre-13] \definefilesynonym [pre-split] [pre-14] \definefilesynonym [pre-balls] [pre-15] \definefilesynonym [pre-knot] [pre-16] \definefilesynonym [pre-weird] [pre-17] \definefilesynonym [pre-shade] [pre-18] \definefilesynonym [pre-organic] [pre-19] \definefilesynonym [pre-speckle] [pre-20] \definefilesynonym [pre-zoom] [pre-21] \definefilesynonym [pre-cycle] [pre-22] \definefilesynonym [pre-super] [pre-23] %definefilesynonym [pre-more] [pre-24] %definefilesynonym [pre-more] [pre-25] \definefilesynonym [pre-more] [pre-26] %definefilesynonym [pre-more] [pre-27] %definefilesynonym [pre-more] [pre-28] %definefilesynonym [pre-more] [pre-29] %definefilesynonym [pre-more] [pre-30] \definefilesynonym [pre-tiles] [pre-41] \definefilesynonym [pre-stepwise] [pre-60] \definefilesynonym [pre-stepper] [pre-61] \definefilesynonym [pre-punk] [pre-70] \definefilesynonym [pre-random] [pre-71] \definefilesynonym [abr-pseudocaps] [abr-01] \definefilesynonym [abr-smallcaps] [abr-02] \definefilesynonym [pracjourn] [ptj-01] \definefilesynonym [maps] [map-10] \definefilesynonym [mml] [mathml] \definefilesynonym [cml] [chemml] \definefilesynonym [letter] [cor-01] \definefilesynonym [memo] [cor-02] \definefilesynonym [resume] [cor-03] % downward compatible mapping: \definefilesynonym [pre-41] [present-tiles] \definefilesynonym [fnt-29] [fonts-shapes] \definefilesynonym [fnt-33] [math-coverage] \definefilesynonym [mat-12] [math-parameters] \definefilesynonym [mat-20] [math-parameters] \definefilesynonym [fnt-25] [math-characters] \definefilesynonym [fnt-28] [fonts-goodies] \definefilesynonym [fnt-31] [fonts-coverage] \definefilesynonym [mat-10] [math-characters] \definefilesynonym [mat-11] [math-characters] \definefilesynonym [fnt-11] [fonts-system] \definefilesynonym [fnt-23] [fonts-shapes] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-mar.mkiv0000644000175000017500000001270212130411274024306 0ustar norbertnorbert%D \module %D [ file=strc-mar, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Markings, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Markings} \registerctxluafile{strc-mar}{1.001} \unprotect %D Synchronizing marks is a rather tricky and messy business. When %D setting a mark, a node is added to the list in order for to \TEX\ %D be able to figure out the 3 current marks when a page is made %D (last mark on previous page, first on current page, last on %D current page; in \LUATEX\ we might at one point have the first on %D the next page as well). %D %D Resetting a mark is not easy. An empty one will not erase the last %D one on the previous page for instance. In \LUATEX\ we can clear a %D marks state register with \type {\clearmarks} but since this is an %D immediate operation it might have unwanted side effects when \TEX\ %D has collected several pages of text and finishing off these pages %D uses marks. %D %D In \MKIV\ we provide an alternative model that permits some more %D control over the way marks are used. It is not entirely compatible %D with \MKII\ or previous \MKIV\ implementations but in practice this %D is not a real problem. It's also easier now to extend this mechanism. % if global has side effects we will need to nil it selectively % and optionally enable it in for instance postponed content \definesystemattribute [marks] [global] \installcorenamespace{marking} \installcommandhandler \??marking {marking} \??marking \newconditional\inhibitgetmarking % will become private \newconditional\inhibitsetmarking % will become private \newtoks \everymarking \unexpanded\def\relatemarking {\dodoubleempty \strc_markings_relate } \unexpanded\def\setmarking {\dosingleargument\strc_markings_set } \let\marking\setmarking \unexpanded\def\resetmarking {\dosingleargument\strc_markings_reset } \unexpanded\def\synchronizemarking{\dotripleargument\strc_markings_synchronize} \appendtoks \ctxcommand{definemarking("\currentmarking",{ parent = "\currentmarkingparent" })}% \to \everydefinemarking \def\strc_markings_relate[#1][#2]% {\ctxcommand{relatemarking("#1","#2")}} \def\strc_markings_set[#1]#2% {\ifconditional\inhibitsetmarking % nothing \else \doifelse{\namedmarkingparameter{#1}\c!expansion}\v!yes {\ctxcommand{setmarking("#1",\!!bs#2\!!es)}} {\ctxcommand{setmarking("#1",\!!bs\detokenize{#2}\!!es)}}% \fi} \def\strc_markings_reset[#1]% {\ctxcommand{resetmarking("#1")}} \def\strc_markings_synchronize[#1][#2][#3]% #1=class #2=boxnumber (some day also name) #3=options, maybe second argument table {\ifvoid#2\else\ctxcommand{synchronizemarking("#1",\number#2,"#3")}\fi} % \def\doifelsemarking#1% why no \unexpanded % {\ctxcommand{doifelsemarking("#1")}} % \def\doifelsemarking#1% % {\normalexpanded{\noexpand\ctxcommand{doifelsemarking("\noexpand\detokenize{#1}")}}} \def\doifelsemarking#1% {\ctxcommand{doifelsemarking(\!!bs#1\!!es)}} % \appendtoks % \strc_markings_synchronize[\v!page][\normalpagebox][\v!keep]% keep if no marks % \to \everybeforepagebody % defaults \setupmarking [\c!expansion=\v!no, \c!separator=\space\emdash\space, \c!filtercommand=\firstofoneargument, \c!state=\v!start] % fetching, regular interface \unexpanded\def\getmarking {\ifconditional\inhibitgetmarking \expandafter\dotripleargument\expandafter\strc_markings_get_nop \else \expandafter\dotripleargument\expandafter\strc_markings_get_yes \fi} \def\strc_markings_get_nop[#1][#2][#3]% {} \def\strc_markings_get_yes[#1][#2][#3]% {\doif{\namedmarkingparameter{#1}\c!state}\v!start {\begingroup \setsystemmode\v!marking \the\everymarking \ifthirdargument \ctxcommand{getmarking("#1","#2","#3")}% \else \ctxcommand{getmarking("#1","\v!page","#2")}% \fi \endgroup}} % the fetchers are fully expandable: [name][method] \def\fetchonemark[#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxcommand{fetchonemark ("#1","\v!page","#2")}\fi} \def\fetchtwomarks [#1]{\ifconditional\inhibitgetmarking\else\ctxcommand{fetchtwomarks("#1","\v!page")}\fi} \def\fetchallmarks [#1]{\ifconditional\inhibitgetmarking\else\ctxcommand{fetchallmarks("#1","\v!page")}\fi} \let\fetchmark\fetchonemark % also fully expandable but here we have: [name][range][method] \def\fetchonemarking[#1]#2[#3]#4[#5]{\ifconditional\inhibitgetmarking\else\ctxcommand{fetchonemark ("#1","#3","#5")}\fi} \def\fetchtwomarkings [#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxcommand{fetchtwomarks("#1","#3")}\fi} \def\fetchallmarkings [#1]#2[#3]{\ifconditional\inhibitgetmarking\else\ctxcommand{fetchallmarks("#1","#3")}\fi} \let\fetchmarking\fetchonemarking \def\markingseparator#1{\namedmarkingparameter{#1}\c!separator} \def\markingcommand #1{\namedmarkingparameter{#1}\c!filtercommand} %D Experimental: %D %D \starttyping %D \definemarking[boxmark] %D %D \setbox0\ruledvbox{ %D \marking[boxmark]{tufte} \input tufte \par %D \marking[boxmark]{ward} \input ward \par %D } %D %D \synchronizemarking[zerobox][0] \box0 %D %D marks: (\getmarking[boxmark][zerobox][first],\getmarking[boxmark][zerobox][last]) %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/l-boolean.lua0000644000175000017500000000336512130411274024246 0ustar norbertnorbertif not modules then modules = { } end modules ['l-boolean'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, tonumber = type, tonumber boolean = boolean or { } local boolean = boolean function boolean.tonumber(b) if b then return 1 else return 0 end -- test and return or return end function toboolean(str,tolerant) -- global if str == nil then return false elseif str == false then return false elseif str == true then return true elseif str == "true" then return true elseif str == "false" then return false elseif not tolerant then return false elseif str == 0 then return false elseif (tonumber(str) or 0) > 0 then return true else return str == "yes" or str == "on" or str == "t" end end string.toboolean = toboolean function string.booleanstring(str) if str == "0" then return false elseif str == "1" then return true elseif str == "" then return false elseif str == "false" then return false elseif str == "true" then return true elseif (tonumber(str) or 0) > 0 then return true else return str == "yes" or str == "on" or str == "t" end end function string.is_boolean(str,default) if type(str) == "string" then if str == "true" or str == "yes" or str == "on" or str == "t" then return true elseif str == "false" or str == "no" or str == "off" or str == "f" then return false end end return default end context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-hor.mkiv0000644000175000017500000010346112130411274024275 0ustar norbertnorbert%D \module %D [ file=spac-hor, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Horizontal, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Horizontal} \unprotect \registerctxluafile{spac-hor}{1.001} \let\v_spac_indentation_current\empty % amount/keyword \newdimen \d_spac_indentation_par \parindent\d_spac_indentation_par % for the show \newconditional\c_spac_indentation_indent_first \settrue\c_spac_indentation_indent_first \newconstant \c_spac_indentation_toggle_state %D After a blank or comparable situation (left side floats) we %D need to check if the next paragraph has to be indented. \unexpanded\def\presetindentation {\doifoutervmode{\ifconditional\c_spac_indentation_indent_first\else\spac_indentation_variant_no\fi}} \unexpanded\def\setupindenting {\doifnextoptionalelse\spac_indentation_setup_options\spac_indentation_setup_size} \unexpanded\def\spac_indentation_setup_size {\assigndimension\v_spac_indentation_current\d_spac_indentation_par{1\emwidth}{1.5\emwidth}{2\emwidth}} \let\synchronizeindenting\spac_indentation_setup_size \let\m_spac_indentation_options\empty \def\spac_indentation_setup_options[#1]% {\edef\m_spac_indentation_options{#1}% comma separated list \ifx\m_spac_indentation_options\empty \else \spac_indentation_setup_indeed \fi} \def\spac_indentation_setup_indeed {% not here: \settrue\c_spac_indentation_indent_first % not here: \parindent\d_spac_indentation_par % not here: \c_spac_indentation_toggle_state\zerocount \processcommacommand[\m_spac_indentation_options]\spac_indentation_apply_step_one % catch small, medium, etc \processcommacommand[\m_spac_indentation_options]\spac_indentation_apply_step_two % catch rest \ifzeropt\parindent\else \doifemptytoks\everypar\spac_indentation_set_everypar \fi \ifconditional\c_spac_indentation_indent_first\else \spac_indentation_variant_no \fi \spac_indentation_check_toggle} \def\spac_indentation_set_everypar {\everypar{\checkindentation}} \def\spac_indentation_apply_step_one#1% {\ifcsname\??indentingmethod#1\endcsname % case two \else \edef\v_spac_indentation_current{#1}% single entry in list \let\normalindentation\v_spac_indentation_current \spac_indentation_setup_size \fi} \def\spac_indentation_apply_step_two#1% {\ifcsname\??indentingmethod#1\endcsname \csname\??indentingmethod#1\endcsname \else % case one \fi} \unexpanded\def\indenting % kind of obsolete {\doifnextoptionalelse\spac_indentation_setup_options\relax} % use \noindentation to suppress next indentation \installcorenamespace{indentingmethod} \unexpanded\def\installindentingmethod#1#2% {\setvalue{\??indentingmethod#1}{#2}} \installindentingmethod \v!no {\parindent\zeropoint} \installindentingmethod \v!not {\parindent\zeropoint} \installindentingmethod \v!first {\settrue\c_spac_indentation_indent_first} \installindentingmethod \v!next {\setfalse\c_spac_indentation_indent_first} \installindentingmethod \v!yes {\parindent\d_spac_indentation_par\relax} % not \indent ! \installindentingmethod \v!always{\parindent\d_spac_indentation_par\relax} % not \indent ! \installindentingmethod \v!never {\parindent\zeropoint\relax % no \indent ! \c_spac_indentation_toggle_state\zerocount} \installindentingmethod \v!odd {\c_spac_indentation_toggle_state\plusone} \installindentingmethod \v!even {\c_spac_indentation_toggle_state\plustwo} \installindentingmethod \v!normal{\ifx\normalindentation\empty\else \let\v_spac_indentation_current\normalindentation \simplesetupindenting \fi} \installindentingmethod \v!reset {\settrue\c_spac_indentation_indent_first \parindent\zeropoint \c_spac_indentation_toggle_state\zerocount} \installindentingmethod \v!toggle{\parindent\ifdim\parindent=\zeropoint \d_spac_indentation_par \else \zeropoint \fi\relax} \unexpanded\def\noindenting{\indenting[\v!no, \v!next ]} \unexpanded\def\doindenting{\indenting[\v!yes,\v!first]} %D Here come the handlers (still rather messy ... we need states). \newif\ifindentation \indentationtrue % will become a mode \let\checkindentation\relax \def\spac_indentation_remove {\ifdim\parindent=\zeropoint \else \begingroup \setbox\scratchbox\lastbox \endgroup \fi} \def\spac_indentation_kill_indeed {\global\indentationfalse \spac_indentation_remove} \def\spac_indentation_do_toggle_indeed {\global\indentationfalse \global\let\checkindentation\spac_indentation_no_toggle_indeed \spac_indentation_remove} \def\spac_indentation_no_toggle_indeed {\global\indentationtrue \global\let\checkindentation\spac_indentation_do_toggle_indeed} \def\spac_indentation_do_indeed {\global\indentationtrue} \def\spac_indentation_do_toggle {\global\let\checkindentation\spac_indentation_do_toggle_indeed} \def\spac_indentation_no_toggle {\global\let\checkindentation\spac_indentation_no_toggle_indeed} \def\spac_indentation_check_toggle {\ifcase\c_spac_indentation_toggle_state % nothing \or \spac_indentation_no_toggle \or \spac_indentation_do_toggle \fi} \def\spac_indentation_variant_yes {\global\let\checkindentation\spac_indentation_do_indeed} \def\spac_indentation_no_next_check {\spac_indentation_remove \global\let\checkindentation\spac_indentation_do_indeed} \def\spac_indentation_variant_no % made global {\ifinpagebody \else \global\indentationfalse \global\let\checkindentation\spac_indentation_no_next_check \fi} \def\nonoindentation % bv bij floats {\ifinpagebody \else \global\indentationtrue \global\let\checkindentation\spac_indentation_do_indeed \fi} \def\spac_indentation_variant_force {\ifvmode \ifdim\parindent=\zeropoint \else % was : \hskip\parindent % can be: \indent % but we test: \noindent\hskip\parindent \fi \fi} \appendtoks \pushmacro\checkindentation \pushmacro\ifindentation \to \everypushsomestate \appendtoks \popmacro\ifindentation \popmacro\checkindentation \to \everypopsomestate % public: \let\indentation \spac_indentation_variant_force \let\noindentation\spac_indentation_variant_no % public \let\doindentation\spac_indentation_variant_yes % public \def\dontrechecknextindentation % public (in macros) {\global\let\dorechecknextindentation\relax} \let\dorechecknextindentation\relax % public (in macros) \unexpanded\def\spac_indentation_check_next_indentation {\global\let\dorechecknextindentation\relax \doifnextcharelse\par\donothing\spac_indentation_variant_no} % messy check as next is seldom \par \def\spac_indentation_variant_auto {\global\let\dorechecknextindentation\spac_indentation_check_next_indentation} %D This one sets up the local indentation behaviour (i.e. either or not %D a next paragraph will be indented). \installcorenamespace{indentnext} \unexpanded\def\checknextindentation[#1]% {\csname\??indentnext\ifcsname\??indentnext#1\endcsname#1\fi\endcsname} \unexpanded\def\useindentnextparameter#1% new, the more efficient variant {\edef\p_indentnext{#1\c!indentnext}% \ifx\p_indentnext\empty\else \csname\??indentnext\ifcsname\??indentnext\p_indentnext\endcsname\p_indentnext\fi\endcsname \fi} \letvalue{\??indentnext }\donothing \letvalue{\??indentnext\v!yes }\spac_indentation_variant_yes \letvalue{\??indentnext\v!no }\spac_indentation_variant_no \letvalue{\??indentnext\v!auto}\spac_indentation_variant_auto %D An example of usage: %D %D \starttyping %D \setupindenting[small,yes] %D %D \setupitemize [indentnext=auto] %D \setuptyping [indentnext=auto] %D \setupformulas[indentnext=auto] %D %D \input tufte \startitemize \item itemize \stopitemize %D \input tufte \startitemize \item itemize \stopitemize %D \input tufte \startitemize \item itemize \stopitemize %D %D \page %D %D \input tufte %D \starttyping %D verbatim %D \stoptyping %D %D \input tufte %D \starttyping %D verbatim %D \stoptyping %D %D \input tufte %D \starttyping %D verbatim %D \stoptyping %D %D \page %D %D \input tufte \startformula a = b \stopformula %D \input tufte \startformula a = b \stopformula %D \input tufte \startformula a = b \stopformula %D \stoptyping % maybe an everyforgetparindent \unexpanded\def\forgetparindent {\settrue\c_spac_indentation_indent_first % recently added \d_spac_indentation_par\zeropoint \parindent\zeropoint \let\v_spac_indentation_current\v!none} \appendtoks \forgetparindent \to \everyforgetall \unexpanded\def\forgethorizontalstretch {\emergencystretch\zeropoint} \appendtoks \forgethorizontalstretch \to \everyforgetall % needed in pagebody %D Helper: \unexpanded\def\softbreak {\relax\ifhmode\hskip\parfillskip\break\fi} %D \macros %D {frenchspacing,nonfrenchspacing} %D %D Somehow \type{\frenchspacing} can lead to hyphenation between %D dashes so we now have \type {\newfrenchspacing} (moved from %D \type {syst-chr}). %D Hm ... todo: \installcorenamespace{spacecodemethod} \sfcode`\)=\zerocount \sfcode`\'=\zerocount \sfcode`\]=\zerocount \def\spac_spacecodes_set_fixed#1% {\sfcode`\.#1\relax \sfcode`\,#1\relax \sfcode`\?#1\relax \sfcode`\!#1\relax \sfcode`\:#1\relax \sfcode`\;#1\relax} \def\spac_spacecodes_set_stretch {\sfcode`\.3000 \sfcode`\,1250 \sfcode`\?3000 \sfcode`\!3000 \sfcode`\:2000 \sfcode`\;1500 } \unexpanded\def\frenchspacing {\spac_spacecodes_set_fixed\plusthousand} \unexpanded\def\newfrenchspacing{\spac_spacecodes_set_fixed{1050}} \unexpanded\def\nonfrenchspacing{\spac_spacecodes_set_stretch} \unexpanded\def\installspacingmethod#1#2{\setvalue{\??spacecodemethod#1}{#2}} \installspacingmethod \empty {} % keep values \installspacingmethod \v!fixed {\frenchspacing } % equal spaces everywhere \installspacingmethod \v!packed {\newfrenchspacing} % slighly more after punctuation \installspacingmethod \v!broad {\nonfrenchspacing} % more depending on what punctuation \unexpanded\def\setupspacing {\doifnextoptionalelse\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop} \def\spac_spacecodes_setup_yes[#1]% {\csname\??spacecodemethod#1\endcsname \updateraggedskips} \def\spac_spacecodes_setup_nop {\updateraggedskips} %D Here's a tweak .. if needed one can configure it in the configuration %D so that initialization happens more efficient. %D %D \starttyping %D \startoverlay %D { %D \green %D \enabledirectives[characters.spaceafteruppercase=normal]% %D \vbox{\hsize 5em x. X\par x.\ X\par X. X\par X.\ X\par} %D } { %D \blue %D \enabledirectives[characters.spaceafteruppercase=traditional]% %D \vbox{\hsize 5em x. X\par x.\ X\par X. X\par X.\ X\par} %D } %D \stopoverlay %D \stoptyping % This is not needed, as \updateraggedskips is taking care of it: \let\synchronizespacecodes\spac_spacecodes_setup_nop % \relax % \dorecurse{100}{\recurselevel\spacefactor 800 \space} \par % \dorecurse{100}{\recurselevel\spacefactor1200 \space} \par % \dorecurse{100}{\recurselevel\spacefactor 800 \normalspaceprimitive} \par % \dorecurse{100}{\recurselevel\spacefactor1200 \normalspaceprimitive} \par % When we don't add the % here, we effectively get \ and % since we have by default \def\^^M{\ } we get into a loop. \let\normalspaceprimitive=\ % space-comment is really needed % hm ... % \unexpanded\def\normalnotobeyedspace{\mathortext\normalspaceprimitive\space} % no \dontleavehmode\space (else no frenchspacing) % \let\ =\normalnotobeyedspace % Because I strip spaces at the end of lines (in the editor) we need a bit of % a trick to define slash+newline, so \space and \ are the same % We need to be careful with \ and \space and the definition of ~ which uses \ as % we need to associate unicode spacing with it. There is some messy thing that that % I forgot to note down so I will revision the \ once I ran into it again. % \ruledhbox spread 10pt {\frenchspacing xx xx\ X} % \ruledhbox spread 10pt {\nonfrenchspacing xx xx\ X} % \ruledhbox spread 10pt {\frenchspacing xx xx X} % \ruledhbox spread 10pt {\nonfrenchspacing xx xx X} % \ruledhbox spread 10pt {\frenchspacing xx xx~X} % \ruledhbox spread 10pt {\nonfrenchspacing xx xx~X} % \ruledhbox spread 10pt {\frenchspacing xx dr.\ X} % \ruledhbox spread 10pt {\nonfrenchspacing xx dr.\ X} % \ruledhbox spread 10pt {\frenchspacing xx dr. X} % \ruledhbox spread 10pt {\nonfrenchspacing xx dr. X} % \ruledhbox spread 10pt {\frenchspacing xx dr.~X} % \ruledhbox spread 10pt {\nonfrenchspacing xx dr.~X} \unexpanded\def\nonbreakablespace{\penalty\plustenthousand\normalspaceprimitive} % no space in math \letcatcodecommand \ctxcatcodes \tildeasciicode \nonbreakablespace % overloaded later \def\space { } \unexpanded\def\removelastspace{\ifhmode\unskip\fi} \unexpanded\def\nospace {\removelastspace\ignorespaces} \ifdefined\softhyphen \else \let\softhyphen\- \fi \cldcontext{"\string\\unexpanded\string\\def\string\\\string\n{\string\\space}"} %cldcontext{"\string\\let\string\\\string\n=\string\\space"} % in tables we need: % % \def\fixedspace {\hskip.5em\relax} % % but, since not all fonts have .5em digits: \unexpanded\def\fixedspace {\setbox\scratchbox\hbox{\mathortext{0}{0}}% \hskip\wd\scratchbox\relax} \unexpanded\def\fixedspaces {\letcatcodecommand \ctxcatcodes \tildeasciicode \fixedspace} \appendtoks \let~\space \let\ \space \to \everysimplifycommands \newsignal\s_spac_keep_unwanted_space \unexpanded\def\keepunwantedspaces {\ifhmode \ifdim\lastskip=\s_spac_keep_unwanted_space\else \hskip\s_spac_keep_unwanted_space\relax \fi \fi} \unexpanded\def\removeunwantedspaces {\ifhmode \expandafter \spac_helpers_remove_unwantedspace \fi} \def\spac_helpers_remove_unwantedspace {\ifnum\lastnodetype=\gluenodecode \ifdim\lastskip=\s_spac_keep_unwanted_space\relax \unskip \else \unskip \doubleexpandafter\spac_helpers_remove_unwantedspace \fi \fi} % \startbuffer % \startlines \tt \fixedspaces % 0~1~~2~~~3~~~~4~~~~~5 % 0~~~~~~~~~~~~~~~~~~~5 % $0~1~~2~~~3~~~~4~~~~~5$ % $0~~~~~~~~~~~~~~~~~~~5$ % \stoplines % % \starttabulate[|~|] % \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \NR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \NR % \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \NR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \NR % \stoptabulate % % \starttable[||] % \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \AR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \AR % \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \AR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \AR % \stoptable % \stopbuffer % % \setupbodyfont[cmr] \getbuffer % \setupbodyfont[lbr] \getbuffer %D A couple of plain macros: \ifdefined\thinspace \else \def\thinspace {\kern .16667\emwidth} \def\negthinspace{\kern-.16667\emwidth} \def\enspace {\kern .5\emwidth} \fi \ifdefined\quad \else \def\enskip{\hskip.5\emwidth} \def\quad {\hskip \emwidth} \def\qquad {\hskip 2\emwidth} \fi \let\emspace\quad % Suggested by GB (not the name -): \def\rapfillskip{.5\hsize plus .092\hsize minus .5\hsize} % D.A.'s value % Bovendien definieren we enkele extra \fill's: \unexpanded\def\hfilll {\hskip\zeropoint\s!plus1\s!filll\relax} \unexpanded\def\vfilll {\vskip\zeropoint\s!plus1\s!filll\relax} %unexpanded\def\hfilneg {\hskip\zeropoint\s!plus-1\s!fil\relax} \unexpanded\def\hfillneg {\hskip\zeropoint\s!plus-1\s!fill\relax} \unexpanded\def\hfilllneg{\hskip\zeropoint\s!plus-1\s!filll\relax} %unexpanded\def\vfilneg {\vskip\zeropoint\s!plus-1\s!fil\relax} \unexpanded\def\vfillneg {\vskip\zeropoint\s!plus-1\s!fill\relax} \unexpanded\def\vfilllneg{\vskip\zeropoint\s!plus-1\s!filll\relax} \unexpanded\def\tfskip {\begingroup\tf\hskip\emwidth\endgroup} \unexpanded\def\dotfskip#1{\begingroup\tf\hskip #1\endgroup} % used elsewhere % maybe we should hash the analysis \installcorenamespace{narrower} \installcorenamespace{narrowermethod} \newskip\s_spac_narrower_left \newskip\s_spac_narrower_right \newskip\s_spac_narrower_mid \installcommandhandler \??narrower {narrower} \??narrower \setupnarrower [\c!before=\endgraf, \c!after=\endgraf, \c!left=1.5\emwidth, \c!right=1.5\emwidth, \c!middle=1.5\emwidth, \c!default=\v!middle] \appendtoks \setuevalue{\e!start\currentnarrower}{\spac_narrower_start{\currentnarrower}}% \setuevalue{\e!stop \currentnarrower}{\spac_narrower_stop}% \to \everydefinenarrower \unexpanded\def\installnarrowermethod#1#2% {\setvalue{\??narrowermethod#1}{#2}} \unexpanded\def\spac_narrower_method_analyze#1% {\ifcsname\??narrowermethod#1\endcsname \csname\??narrowermethod#1\endcsname \else \global\advance\s_spac_narrower_mid#1\relax \fi} \def\spac_narrower_initialize[#1]% hm, can be dorepeat directly {\dorepeatwithcommand[#1]\spac_narrower_method_analyze} \installnarrowermethod \v!left {\global\advance\s_spac_narrower_left \narrowerparameter\c!left \relax} \installnarrowermethod \v!middle {\global\advance\s_spac_narrower_mid \narrowerparameter\c!middle\relax} \installnarrowermethod \v!right {\global\advance\s_spac_narrower_right \narrowerparameter\c!right \relax} \installnarrowermethod{-\v!left }{\global\advance\s_spac_narrower_left -\narrowerparameter\c!left \relax} \installnarrowermethod{-\v!middle}{\global\advance\s_spac_narrower_mid -\narrowerparameter\c!middle\relax} \installnarrowermethod{-\v!right }{\global\advance\s_spac_narrower_right-\narrowerparameter\c!right \relax} \installnarrowermethod \v!reset {\global \s_spac_narrower_left \zeropoint \global \s_spac_narrower_mid \zeropoint \global \s_spac_narrower_right \zeropoint\relax} \installnarrowermethod \v!none {} \unexpanded\def\spac_narrower_start#1% {\begingroup \edef\currentnarrower{#1}% \dosingleempty\spac_narrower_start_indeed} \unexpanded\def\spac_narrower_start_indeed[#1]% {\iffirstargument \spac_narrower_start_apply{#1}% \else \spac_narrower_start_apply{\narrowerparameter\v!default}% \fi} \def\spac_narrower_start_apply#1% {\narrowerparameter\c!before \global\s_spac_narrower_left \zeropoint \global\s_spac_narrower_right\zeropoint \global\s_spac_narrower_mid \zeropoint \processcommalistwithparameters[#1]\spac_narrower_initialize \advance\leftskip \dimexpr\s_spac_narrower_left +\s_spac_narrower_mid\relax \advance\rightskip\dimexpr\s_spac_narrower_right+\s_spac_narrower_mid\relax \seteffectivehsize} \unexpanded\def\spac_narrower_stop {\narrowerparameter\c!after \endgroup} \unexpanded\def\startnarrower {\dosingleempty\spac_narrower_start_basic} \unexpanded\def\spac_narrower_start_basic[#1]% {\begingroup \let\currentnarrower\empty \iffirstargument \spac_narrower_start_apply{#1}% \else \spac_narrower_start_apply{\narrowerparameter\v!default}% \fi} \let\stopnarrower\spac_narrower_stop \unexpanded\def\startnarrow % current how {\begingroup \dodoubleempty\spac_narrower_start_named} \def\spac_narrower_start_named[#1][#2]% {\edef\currentnarrower{#1}% \ifsecondargument \spac_narrower_start_apply{#2}% \else \spac_narrower_start_apply{\narrowerparameter\v!default}% \fi} \let\stopnarrow\spac_narrower_stop \newdimen\d_spac_effective_hsize \def\effectivehsize {\hsize} \newdimen\d_spac_effective_leftskip \def\effectiveleftskip {\leftskip} \newdimen\d_spac_effective_rightskip \def\effectiverightskip{\rightskip} \unexpanded\def\seteffectivehsize {\setlocalhsize \d_spac_effective_hsize \localhsize \d_spac_effective_leftskip \leftskip \d_spac_effective_rightskip\rightskip \let\effectivehsize \d_spac_effective_hsize \let\effectiveleftskip \d_spac_effective_leftskip \let\effectiverightskip\d_spac_effective_rightskip} \installcorenamespace{skipadaptionleft} \installcorenamespace{skipadaptionright} \newskip\leftskipadaption \newskip\rightskipadaption \setvalue{\??skipadaptionleft \v!standard}{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi} \setvalue{\??skipadaptionleft \v!yes }{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi} \letvalue{\??skipadaptionleft \v!no }\zeropoint \letvalue{\??skipadaptionleft \empty }\zeropoint \setvalue{\??skipadaptionright\v!standard}{\narrowerparameter\c!right} \setvalue{\??skipadaptionright\v!yes }{\narrowerparameter\c!right} \letvalue{\??skipadaptionright\v!no }\zeropoint \letvalue{\??skipadaptionright\empty }\zeropoint \unexpanded\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\csname\??skipadaptionleft #1\endcsname\else#1\fi\relax} \unexpanded\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\csname\??skipadaptionright#1\endcsname\else#1\fi\relax} \unexpanded\def\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption } \unexpanded\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption} \unexpanded\def\forgetbothskips {\leftskip\zeropoint \rightskip\zeropoint \relax} \appendtoks \forgetbothskips \to \everyforgetall \unexpanded\def\forgetparskip {\s_spac_whitespace_parskip\zeropoint \parskip\zeropoint \let\v_spac_whitespace_current\v!none} \appendtoks \forgetparskip \to \everyforgetall %D Tolerance (can also be set with align): \installcorenamespace{tolerancemethods} \unexpanded\def\installtolerancemethod#1#2#3% {\setvalue{\??tolerancemethods#1:#2}{#3}} \installtolerancemethod \v!vertical \v!verystrict {\let\bottomtolerance\empty} \installtolerancemethod \v!vertical \v!strict {\def\bottomtolerance{.050}} \installtolerancemethod \v!vertical \v!tolerant {\def\bottomtolerance{.075}} \installtolerancemethod \v!vertical \v!verytolerant {\def\bottomtolerance{.100}} \installtolerancemethod \v!horizontal \v!stretch {\emergencystretch\bodyfontsize} \installtolerancemethod \v!horizontal \v!space {\spaceskip.5em\s!plus.25em\s!minus.25em\relax} \installtolerancemethod \v!horizontal \v!verystrict {\tolerance 200 } \installtolerancemethod \v!horizontal \v!strict {\tolerance1500 } \installtolerancemethod \v!horizontal \v!tolerant {\tolerance3000 } \installtolerancemethod \v!horizontal \v!verytolerant {\tolerance4500 } \def\spac_tolerances_step_vertical #1{\csname\??tolerancemethods\v!vertical :#1\endcsname} \def\spac_tolerances_step_horizontal#1{\csname\??tolerancemethods\v!horizontal:#1\endcsname} \unexpanded\def\setuptolerance {\dosingleargument\spac_tolerances_setup} \def\spac_tolerances_setup[#1]% {\doifinsetelse\v!vertical{#1}% {\processcommacommand[#1]\spac_tolerances_step_vertical } {\processcommacommand[#1]\spac_tolerances_step_horizontal}} %D \macros %D {pushindentation,popindentation} %D %D The pushing and popping is done by: \newbox\b_spac_indentations_a \newbox\b_spac_indentations_b \unexpanded\def\pushindentation {\begingroup \ifhmode \unskip \setbox\b_spac_indentations_a\lastbox % get \strut if present \unskip \setbox\b_spac_indentations_b\lastbox % get \indent generated box \unskip \else \dontleavehmode % was \hskip\zeropoint % switch to horizontal mode \unskip \setbox\b_spac_indentations_a\lastbox % get \indent generated box \setbox\b_spac_indentations_b\emptybox \fi} \unexpanded\def\popindentation {\box\b_spac_indentations_b \box\b_spac_indentations_a \endgroup} %D The only complication lays in \type{\strut}. In \PLAIN\ %D \TEX\ a \type{\strut} is defined as: %D %D \starttyping %D \def\strut% %D {\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} %D \stoptyping %D %D But what is a \type{\strut}? Normally it's a rule of width %D zero, but when made visual, it's a rule and a negative skip. %D The mechanism for putting things in the margins described %D here cannot handle this situation very well. One %D characteristic of \type{\strut} is that the \type{\unhcopy} %D results in entering horizontal mode, which in return leads %D to some indentation. %D %D To serve our purpose a bit better, the macro \type{\strut} %D can be redefined as: %D %D \starttyping %D \def\strut %D {\relax\ifmmode\else\hskip0pt\fi\copy\strutbox} %D \stoptyping %D %D Or more compatible: %D %D \starttyping %D \def\strut %D {\relax\ifmmode %D \copy\strutbox %D \else %D \bgroup\setbox\strutbox=\hbox{\box\strutbox}\unhcopy\strutbox\egroup %D \fi} %D \stoptyping %D %D In \CONTEXT\ however we save some processing time by putting %D an extra \type{\hbox} around the \type{\strutbox}. % moved from page-lin.tex to here (due to visualization added % in august 2003) % % \unexpanded \def\crlf % {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break} \unexpanded\def\crlf {\ifhmode \unskip \prewordbreak\crlfplaceholder \ifcase\raggedstatus\hfil\or\or\or\hfil\fi \break \else \crlfplaceholder \endgraf \fi} \unexpanded\def\crlfplaceholder {\strut} \unexpanded\def\settestcrlf {\unexpanded\def\crlfplaceholder {\hbox to \zeropoint {\strut{\infofont\kern.25em}\lohi{\infofont CR}{\infofont LF}\hss}}} %D \starttyping %D % \setuplayout[gridgrid=yes] \showgrid %D %D \startbuffer %D test 1\crlf %D test 2\crlf %D %D \crlf test 3 %D %D test 4\crlf %D test 5 %D %D \crlf %D \crlf %D \crlf %D test 6 %D \stopbuffer %D %D \hbox %D {\hsize5em %D \ruledvtop{\getbuffer}\enspace %D \ruledvtop{\showstruts\getbuffer}\enspace %D \hsize15em \setuptyping[before=,after=]% %D \ruledvtop{\typebuffer}} %D \stoptyping \unexpanded\def\justonespace{\removeunwantedspaces\space} %unexpanded\def\justaperiod {\removeunwantedspaces.} %unexpanded\def\justacomma {\removeunwantedspaces,} \installcorenamespace{hspace} \unexpanded\def\ignorecrlf {\let\crlf\justonespace\let\\\crlf} \unexpanded\def\definehspace {\dotripleempty\spac_hspaces_define} \def\spac_hspaces_define[#1][#2][#3]% #1 = optional namespace {\ifthirdargument \setvalue{\??hspace#1:#2}{#3}% \else \setvalue{\??hspace:#1}{#2}% \fi} \unexpanded\def\hspace {\dodoubleempty\spac_hspaces_insert} \def\spac_hspaces_insert[#1][#2]% {\ifhmode \removeunwantedspaces \hskip % always a skip even when 0pt \ifsecondargument \hspaceamount{#1}{#2}% \else\iffirstargument \hspaceamount\empty{#1}% \else \hspaceamount\empty\s!default \fi\fi \expandafter\ignorespaces \fi} \def\hspaceamount#1#2% {\csname\??hspace \ifcsname\??hspace#1:#2\endcsname#1:#2\else:\v!none\fi \endcsname} % no installhspace here (this is already an old command) \definehspace [\v!small] [.25\emspaceamount] \definehspace [\v!medium] [.5\emspaceamount] \definehspace [\v!big] [1\emspaceamount] \definehspace [\v!normal] [1\spaceamount] \definehspace [\v!default] [\spaceamount] \definehspace [\v!none] [\zeropoint] %D Taken from Taco's math module (cq. \AMS\ macros), but %D adapted to \type {\hspace}: \unexpanded\def\textormathspace #1#2#3{\ifmmode\mskip#1#2\else\kern #1\hspaceamount\empty{#3}\fi\relax} \unexpanded\def\breakabletextormathspace#1#2#3{\ifmmode\mskip#1#2\else\hskip#1\hspaceamount\empty{#3}\fi\relax} \newmuskip\hairmuskip \hairmuskip=.15mu \unexpanded\def\hairspace {\textormathspace+\hairmuskip{.5}} \unexpanded\def\thinspace {\textormathspace+\thinmuskip 1} \unexpanded\def\medspace {\textormathspace+\medmuskip 2} \unexpanded\def\thickspace {\textormathspace+\thickmuskip3} \unexpanded\def\neghairspace {\textormathspace-\thinmuskip{.5}} \unexpanded\def\negthinspace {\textormathspace-\thinmuskip 1} \unexpanded\def\negmedspace {\textormathspace-\medmuskip 2} \unexpanded\def\negthickspace{\textormathspace-\thickmuskip3} % needed for unicode: %unexpanded\def\breakablethinspace {\breakabletextormathspace+\thinmuskip1} %unexpanded\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace %unexpanded\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax} %unexpanded\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax} %unexpanded\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie %unexpanded\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax} %unexpanded\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this %unexpanded\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup} %unexpanded\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax} %unexpanded\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax} %unexpanded\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace} %unexpanded\def\narrownobreakspace {\penalty\plustenthousand\thinspace} %unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} %unexpanded\def\zerowidthspace {\hskip\zeropoint} \definehspace[.5][.1250\emspaceamount] % could also be [.1250\spaceamount] \definehspace[1] [.1667\emspaceamount] \definehspace[2] [.2222\emspaceamount] \definehspace[3] [.2777\emspaceamount] \let \, \thinspace \let \: \medspace \let \; \thickspace \let \! \negthinspace % plain ... % % \ifdefined\> \else \unexpanded\def\>{\mskip \medmuskip } \fi % \ifdefined\* \else \unexpanded\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} \fi \def\flexiblespaceamount#1#2#3% {#1\interwordspace \s!plus#2\interwordstretch \s!minus#3\interwordshrink} \def\fixedspaceamount#1% {#1\interwordspace} % moved from page-lin % % the following code is used in startlines\stoplines % % do we need \normalspaceprimitive here? \installcorenamespace{spacemethods} \unexpanded\def\installspacemethod#1#2% needs to set \obeyedspace {\setvalue{\??spacemethods#1}{#2}} \def\activatespacehandler#1% {\csname\??spacemethods\ifcsname\??spacemethods#1\endcsname#1\else\v!off\fi\endcsname} \unexpanded\def\spac_spaces_checked_control{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}% \unexpanded\def\spac_spaces_checked_normal {\mathortext\normalspace{\dontleavehmode\normalspace}}% \unexpanded\def\spac_spaces_checked_fixed {\mathortext\normalspace{\dontleavehmode\fixedspace}}% \installspacemethod \v!on {\obeyspaces \let\obeyedspace\spac_spaces_checked_control \let\ =\obeyedspace} \installspacemethod \v!yes {\obeyspaces \let\obeyedspace\spac_spaces_checked_normal \let\ =\obeyedspace} \installspacemethod \v!off % == default {\normalspaces \let\obeyedspace\normalspace \let\ =\normalspaceprimitive} % was \normalspace \installspacemethod \v!fixed {\obeyspaces \let\obeyedspace\spac_spaces_checked_fixed \let\ =\obeyedspace} \appendtoks \normalspaces % to be sure \to \everybeforeoutput %D A more robust variant of the \MKII\ one: %D %D \startbuffer %D bla \TEX\autoinsertnextspace bla %D bla \TEX\autoinsertnextspace (bla) %D bla (\TEX\autoinsertnextspace) bla %D bla \TEX\autoinsertnextspace\ bla %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\autoinsertnextspace {\futurelet\nexttoken\spac_spaces_auto_insert_next} \def\spac_spaces_auto_insert_next {\ctxcommand{autonextspace(\!!bs\meaning\nexttoken\!!es)}} % todo, just consult nexttoken at the lua end %D Moved from bib module: \unexpanded\def\outdented#1% {\hskip-\hangindent#1\relax} %D Beware: due to char-def this becomes an active character but that %D might change sometime when we will replace all these specials to %D node insertions. We might even expand it to utf then as it then %D can be used in string comparison (not that much needed anyway). % \chardef\zwnj="200C % \chardef\zwj ="200D % TODO (but used in languages): \unexpanded\def\spac_glues_text_or_math#1#2% {\begingroup \ifmmode \mskip#1% \else \scratchdimen#1\hspaceamount\empty{#2}% \scratchskip\scratchdimen\s!plus.5\scratchdimen\s!minus.3\scratchdimen \hskip\scratchskip \fi \endgroup} \unexpanded\def\thinglue {\spac_glues_text_or_math\thinmuskip \v!small} \unexpanded\def\medglue {\spac_glues_text_or_math\medmuskip \v!medium} \unexpanded\def\thickglue{\spac_glues_text_or_math\thickmuskip\v!big} %D A rather unknown one: \unexpanded\def\widened % moved from cont-new {\doifnextoptionalelse\spac_widened_yes\spac_widened_nop} \def\spac_widened_yes[#1]#2{\hbox \s!spread #1{\hss#2\hss}} \def\spac_widened_nop #1{\hbox \s!spread \emwidth{\hss#1\hss}} \definecomplexorsimple\widened %D For the moment here (used in page-txt): \unexpanded\def\ignoredlinebreak{\unskip\space\ignorespaces} %D \macros %D {startignorespaces} %D %D I'll probably forget that this one exists: %D %D \starttyping %D \ruledhbox %D {\startignorespaces %D \def\oeps{a} %D \startignorespaces %D \def\oeps{a} %D \stopignorespaces %D \def\oeps{a} %D \stopignorespaces %D \oeps} %D \stoptyping \newsignal\s_spac_ignore_spaces \newcount \c_spac_ignore_spaces \unexpanded\def\startignorespaces {\advance\c_spac_ignore_spaces\plusone \ifcase\c_spac_ignore_spaces\or \ifhmode \hskip\s_spac_ignore_spaces \fi \fi \ignorespaces} \unexpanded\def\stopignorespaces {\ifcase\c_spac_ignore_spaces \or \ifhmode \doloop\spac_ignore_spaces_body \fi \fi \advance\c_spac_ignore_spaces\minusone} \def\spac_ignore_spaces_body {\ifdim\lastskip=\zeropoint \exitloop \else\ifdim\lastskip=\s_spac_ignore_spaces \unskip \exitloop \else \unskip \fi\fi} %D \macros %D {obeyfollowingtoken} \def\obeyfollowingtoken{{}} % end \cs scanning \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-database.lua0000644000175000017500000001233512130411274024371 0ustar norbertnorbertif not modules then modules = { } end modules ['m-database'] = { version = 1.001, comment = "companion to m-database.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local sub, gmatch, format = string.sub, string.gmatch, string.format local concat = table.concat local lpegpatterns, lpegmatch, lpegsplitat = lpeg.patterns, lpeg.match, lpeg.splitat local lpegP, lpegC, lpegS, lpegCt = lpeg.P, lpeg.C, lpeg.S, lpeg.Ct local stripstring = string.strip -- One also needs to enable context.trace, here we only plug in some code (maybe -- some day this tracker will also toggle the main context tracer. local trace_flush = false trackers.register("module.database.flush", function(v) trace_flush = v end) local report_database = logs.reporter("database") buffers.database = buffers.database or { } local l_tab = lpegpatterns.tab local l_space = lpegpatterns.space local l_comma = lpegpatterns.comma local l_empty = lpegS("\t\n\r ")^0 * lpegP(-1) local v_yes = interfaces.variables.yes local separators = { -- not interfaced tab = l_tab, tabs = l_tab^1, comma = l_comma, space = l_space, spaces = l_space^1, } function buffers.database.process(settings) local data if settings.type == "file" then local filename = resolvers.finders.byscheme("any",settings.database) data = filename ~= "" and io.loaddata(filename) data = data and string.splitlines(data) else data = buffers.getlines(settings.database) end if data and #data > 0 then if trace_flush then context.pushlogger(report_database) end local separatorchar, quotechar, commentchar = settings.separator, settings.quotechar, settings.commentchar local before, after = settings.before or "", settings.after or "" local first, last = settings.first or "", settings.last or "" local left, right = settings.left or "", settings.right or "" local setups = settings.setups or "" local strip = settings.strip == v_yes or false local command = settings.command separatorchar = (not separatorchar and ",") or separators[separatorchar] or separatorchar local separator = type(separatorchar) == "string" and lpegS(separatorchar) or separatorchar local whatever = lpegC((1 - separator)^0) if quotechar and quotechar ~= "" then local quotedata = nil for chr in gmatch(quotechar,".") do local quotechar = lpegP(chr) local quoteword = l_space^0 * quotechar * lpegC((1 - quotechar)^0) * quotechar * l_space^0 if quotedata then quotedata = quotedata + quoteword else quotedata = quoteword end end whatever = quotedata + whatever end local checker = commentchar ~= "" and lpegS(commentchar) local splitter = lpegCt(whatever * (separator * whatever)^0) local found = false for i=1,#data do local line = data[i] if not lpegmatch(l_empty,line) and (not checker or not lpegmatch(checker,line)) then local list = lpegmatch(splitter,line) if not found then if setups ~= "" then context.begingroup() context.setups { setups } end context(before) found = true end if trace_flush then local result, r = { }, 0 r = r + 1 ; result[r] = first for j=1,#list do local str = strip and stripstring(list[j]) or list[j] r = r + 1 ; result[r] = left if command == "" then r = r + 1 ; result[r] = str else r = r + 1 ; result[r] = command r = r + 1 ; result[r] = "{" r = r + 1 ; result[r] = str r = r + 1 ; result[r] = "}" end r = r + 1 ; result[r] = right end r = r + 1 ; result[r] = last context(concat(result)) else context(first) for j=1,#list do local str = strip and stripstring(list[j]) or list[j] context(left) if command == "" then context(str) else context(command) context(false,str) end context(right) end context(last) end end end if found then context(after) if setups ~= "" then context.endgroup() end end if trace_flush then context.poplogger() end else -- message end end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-newmat.tex0000644000175000017500000000427011754241457024155 0ustar norbertnorbert%D \module %D [ file=m-newmat, %D version=2000.11.16, %D title=\CONTEXT\ Math Module, %D subtitle=AMS-like math extensions, %D author={Taco Hoekwater \& Hans Hagen}, %D date=\currentdate, %D copyright={Taco Hoekwater \& Hans Hagen}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See licen-en.pdf for %C details. \unprotect %D Code has been integrated. \protect \endinput %D This module collects macros that \TEX\ users kind of expect %D to be available when typesetting math. Most of them %D originate in the \AMS\ macro packages. We have taken the %D freedom to adapt them to \CONTEXT. This module is derived %D from the \type {m-math} module by Taco Hoekwater (partially %D derived from AMS math modules) and adapted|/|extended by %D Hans Hagen. %D \macros %D {startsubarray,substack,startsmallmatrix} %D %D [HH] I wonder what these are supposed to do. An example %D will be inserted later. Contrary to the original we %D support an optional argument between either \type {{}} or %D \type {[]}. \def\startsubarray {\doifnextcharelse\bgroup \simplestartsubarray{\dosingleempty\complexstartsubarray}} \def\complexstartsubarray[#1]% {\simplestartsubarray{#1}} \def\simplestartsubarray#1% {\vcenter\bgroup \baselineskip\fontdimen10 \scriptfont\plustwo \advance\baselineskip\fontdimen12 \scriptfont\plustwo \lineskip\plusthree\fontdimen8 \scriptfont\plusthree \lineskiplimit\lineskip \ialign\bgroup\ifx c#1\hfil\fi$\mathsurround\zeropoint\scriptstyle##$\hfil\crcr} \def\stopsubarray {\crcr\egroup \egroup} \def\startsubstack {\doifnextcharelse\bgroup \simplestartsubstack{\dosingleempty\complexstartsubstack}} \def\complexstartsubstack[#1]% {\simplestartsubstack{#1}} \def\simplesubstack#1% {\startsubarray[c]#1\stopsubarray} \def\startsmallmatrix {\null \,% \vcenter\bgroup \baselineskip6\ex@ \lineskip1.5\ex@ \lineskiplimit\lineskip \ialign\bgroup\hfil$\mathsurround\zeropoint\scriptstyle##$\hfil&&\thickspace\hfil $\mathsurround\zeropoint\scriptstyle##$\hfil\crcr} \def\stopsmallmatrix {\crcr\egroup \egroup \,} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-pstricks.mkii0000644000175000017500000001043411754241457024654 0ustar norbertnorbert%D \module %D [ file=m-pstricks, %D version=1997.01.15, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PSTRICKS\ Connections, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % pstricks is not supported in context mkii (it's no problem doing that % but as we also need to support latex it would become quite messy so for % context we use metapost and for latex pstricks) %M \usemodule[pstric] \letvalue{@unused}\plussixteen \letvalue{alloc@}\gobblefivearguments \chardef\oldbarcode\the\catcode`\| \catcode`\|=12 \def\loadpstrickscolors#1% {\pushmacro\dodefinecolor \pushmacro\dodefinepalet \pushmacro\dodefinecolorgroup \def\dodefinecolor[##1][##2]% {\doifassignmentelse{##2} {\getparameters[pstricks][r=0,g=0,b=0,##2]% \expanded{\newrgbcolor{##1}{{\pstricksr} {\pstricksg} {\pstricksb}}}}% {}}% \def\dodefinepalet [##1][##2]{}% \def\dodefinecolorgroup[##1][##2][##3]{}% \writestatus{pstricks}{loading colors from #1}% \input #1 \relax \popmacro\dodefinecolorgroup \popmacro\dodefinepalet \popmacro\dodefinecolor} \doifelse{\jobsuffix}{dvi} {\input multido \relax \input pstricks \relax \input pst-plot \relax \loadpstrickscolors{colo-rgb}} {\writestatus{pstricks}{using indirect method; enable write18}} \catcode`\|=\oldbarcode \def\loadpstricksmodule[#1]% {\chardef\oldbarcode\the\catcode`\| \catcode`\|=12 \readfile{#1}{}{}% \catcode`\|=\oldbarcode} %D The next piece of code is for John Culleton who suggested to %D handle \PSTRICKS\ in a similar fashion as \METAPOST, i.e.\ %D using a child process. For the moment there is no support %D for passing environments, so these should be called %D explicitly inside this environment. \unprotect %D \startPSTRICKS[offset=2pt] ... \stopPSTRICKS %D %D works in both dvi and pdf mode %D %D % \usemodule[pstric] %D %D \startPSTRICKS %D \pspicture(0,0)(10,10) %D \dorecurse{10}{\psline(0,0)(\recurselevel,10)} %D \dorecurse{10}{\psline(0,0)(10,\recurselevel)} %D \endpspicture %D \stopPSTRICKS \def\startPSTRICKS {\dosingleempty\dostartPSTRICKS} % \ifx\startTEXapplication\undefined % % \long\def\dostartPSTRICKS[#1]#2\stopPSTRICKS % {\doifelse{\jobsuffix}{dvi} % {#2} % {\bgroup % \setbuffer[pstricks]% % \usemodule[pstric]% % \setbox\scratchbox\hbox{#2}% % % There is probably a nicer way to handle this % \immediate\openout\scratchwrite=\bufferprefix dim.tmp % \immediate\write\scratchwrite{\dimen0=\the\ht\scratchbox}% % \immediate\write\scratchwrite{\dimen2=\the\wd\scratchbox}% % \immediate\closeout\scratchwrite % % Quick and dirty % \startTEXpage[#1]\box\scratchbox\stopTEXpage % \endbuffer % % Here we go! % %\immediate\write18{texexec \bufferprefix pstricks.tmp --once --batch}% % %\immediate\write18{dvips -G0 -Ppdf \bufferprefix pstricks -o}% % %\immediate\write18{ps2pdf \bufferprefix pstricks.ps \bufferprefix pstricks.pdf}% % \executesystemcommand{texexec \bufferprefix pstricks.tmp --once --batch}% % \executesystemcommand{dvips -G0 -Ppdf \bufferprefix pstricks -o}% % \executesystemcommand{texmfstart pstopdf \bufferprefix pstricks.ps \bufferprefix pstricks.pdf}% % % We pick up the dimensions from the scratch file. % \readlocfile{\bufferprefix pstricks-dim.tmp}{}{}% % % Since the graphic is put on a page (sigh) by dvips/gs % % we need to shift it around a bit. % \setbox\scratchbox\hbox % {\externalfigure[\bufferprefix pstricks.pdf][\c!object=\v!no]}% % \setbox\scratchbox\hbox % {\lower\ht\scratchbox\hbox{\raise\dimen2\box\scratchbox}}% % \wd\scratchbox\dimen0 % \ht\scratchbox\dimen2 % \dp\scratchbox\zeropoint % \box\scratchbox % \egroup}} % % \fi \long\def\dostartPSTRICKS[#1]#2\stopPSTRICKS {\doifelse{\jobsuffix}{dvi} % will some day move to app as switch {\hbox{#2}} % {\startTEXapplication[#1]{\usemodule[pstric]}#2\stopTEXapplication}} {\startTEXapplication[#1]{}#2\stopTEXapplication}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1253.lua0000644000175000017500000000457411571377075024264 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1253'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000 } context-2013.05.28.20130704/texmf-dist/tex/context/base/m-trackers.mkiv0000644000175000017500000000004711571377075024647 0ustar norbertnorbert\starttext \showtrackers \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-tr.mkii0000644000175000017500000000576611754241457024151 0ustar norbertnorbert%D \module %D [ file=spec-tr, %D version=1996.01.25, %D title=\CONTEXT\ Special Macros, %D subtitle=Thomas Rokicki's \DVIPS, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Especially the rotation proved to be incompatible with %D the default \POSTSCRIPT\ special driver. Many thanks to %D Gilbert van den Dobbelsteen for testing and hacking the %D \DVIPS\ source and pinpointing the problem. %D \macros %D {doinsertfile} %D %D We overrule the figure||insertion special. Things should %D be more accurate, but maybe someday \unknown \startspecials[rokicki] \def\@@insertpostscriptliteral {ps: } \def\@@insertpostscriptretain {" } %D Ugly but useful: \definefileinsertion{tr}{eps} {\bgroup \PointsToWholeBigPoints\@@DriverImageWidth \width \PointsToWholeBigPoints\@@DriverImageHeight\height \special {PSfile="\@@DriverImageFile"\space llx=\EPSllx\space lly=\EPSlly\space urx=\EPSurx\space ury=\EPSury\space \ifdim\@@DriverImageWidth >\zeropoint rwi=\width 0\space\fi \ifdim\@@DriverImageHeight>\zeropoint rhi=\height0 \fi}% \egroup} \definefileinsertion{tr}{mps} {\hbox {\convertMPcolors\@@DriverImageFile \dofileinsertion{tr}{eps}}} \definespecial\doinsertfile {\dofileinsertion{tr}\@@DriverImageType} %D Some MP stuff: \definespecial\doinsertMPfile#1% {\doiffileelse{./#1}{\includeMPasEPS{./#1}}{\message{[MP #1]}}} %D \macros %D {dostartrotation} %D %D Because \DVIPS\ uses a reverse rotation scheme, we have %D to add an extra \type{neg} to the default \POSTSCRIPT\ %D rotation definition: \definespecial\dostartrotation#1% straight from the YandY manual / 1st neg added {\special {\@@insertpostscriptliteral gsave currentpoint currentpoint translate \number#1\space\space neg rotate neg exch neg exch translate}} \definespecial\dostoprotation {\special {\@@insertpostscriptliteral currentfont currentpoint grestore moveto setfont}} %D Drawing ovals in \DVIPS\ is complicated by the fact that %D the colors get reset. Therefore we need a more literal %D approach and therefore scale to local units. By redefining %D the retain constant into a macro, we can use the already %D present \POSTSCRIPT\ definition (see \type{spec-ps}). \definespecial\doovalbox#1#2#3#4#5#6#7#8% variant not yet supported {\bgroup \edef\@@insertpostscriptretain gsave% {\@@insertpostscriptliteral gsave Resolution 72 div VResolution 72 div neg scale currentpoint translate}% \dosomeovalbox{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}% \egroup} %D \macros %D {dosetuppaper} %D %D Relatively new: \definespecial\dosetuppaper#1#2#3% {\begingroup \!!dimena#2% \!!dimenb#3% \special{papersize=\the\!!dimena,\the\!!dimenb}% \endgroup} \stopspecials \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-map-10.mkii0000644000175000017500000002572211764370210024010 0ustar norbertnorbert%\module [ % file=s-map-10.mkii, % version=2012.06.06, % title=\CONTEXT\ Style File, % subtitle=\MAPS\ journal style, % author={Hans Hagen, Taco Hoekwater and Siep Kroonenberg}, % date=\currentdate, % copyright={NTG / MAPS}% %] % NOTE: this (MkII) version is not guaranteed to give exactly the % same output as the MkIV one, and exists mostly for compatibility % with old-fashioned authors. All final typesetting for the MAPS % is done with MkIV. If you are reading this: please consider % switching! % This module implements the MAPS style for use with the Context % macro package. The original MAPS layout was designed and % implemented in LaTeX by Taco Hoekwater and Siep Kroonenberg. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif\ifMapsInColumns \doifmode{asym}{\enablemode[onecolumn]} % implies onecolumn \doifnotmode{onecolumn}{\MapsInColumnstrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% fonts %%%%%%%%% first, font sizes \definebodyfontenvironment [7pt][% LaTeX: scriptsize interlinespace=8pt, big=8pt, small=6pt% ] \definebodyfontenvironment [8pt][% LaTeX: footnotesize interlinespace=9pt, big=9pt, small=7pt, x=6pt% ] \definebodyfontenvironment [9pt][% LaTeX: small interlinespace=10pt, big=10pt, small=8pt,% x=7pt,% script=6pt% ] \definebodyfontenvironment [10pt][% LaTeX: normalsize interlinespace=11pt, big=11pt, a=11pt, small=9pt,% x=8pt,% script=7pt% ] \definebodyfontenvironment [11pt][% LaTeX: large interlinespace=11pt, big=11pt, small=10pt,% x=9pt,% script=8pt% ] \definebodyfontenvironment [14pt][% interlinespace=14pt, big=18pt, small=11pt, x=10pt% ] \definebodyfontenvironment [18pt][% interlinespace=18pt, big=24pt, small=14pt, x=10pt% ] \definebodyfontenvironment [24pt][% interlinespace=24pt, big=24pt, small=18pt, x=11pt% ] %%% font families (no realfonts, no protruding) \starttypescript [maps][ec] \definetypeface [maps] [rm] [serif] [modern] [default] [encoding=ec,rscale=0.95] \definetypeface [maps] [mm] [math] [modern] [computer-modern] \definetypeface [maps] [tt] [mono] [modern] [default] [encoding=ec,rscale=0.90] \definetypeface [maps] [ss] [sans] [modern] [default] [encoding=ec,rscale=0.95] \stoptypescript \writestatus{maps\space warning}{This, the MkII style, is OUTDATED and UNSUPPORTED!} \writestatus{maps\space warning}{Please consider using ConTeXt MkIV instead.} \startmode[realfonts] \writestatus{maps\space error}{The MkII version of the module does not support 'realfonts'!} \wait \stopmode \setupbodyfont[maps,10pt,rm] \setupinterlinespace[line=11pt] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% additional general typographic details \setupindenting [yes,next,11pt] % indenting after enumerations etc. \definepapersize [maps] [width=21cm,height=26.5cm] \setuppapersize [maps][maps] % parameters: % margin -> latex marginparwith \setuplayout[% topspace=40pt, height=688pt, header=33pt, margin=106pt, leftmargindistance=11pt, rightmargindistance=11pt% ] \setupblank[5.5pt] \setuppagenumbering [location=] \definetyping [widetyping] \setupheader [style=\ss] \setupfooter [style=\ss] \def\AuHead{% %\ifnum\pageno=\MapsPage \hbox{}\else \MapsRunningAuthor%\fi } \def\TiHead{% \ifnum\pageno=\MapsPage \relax \MapsRunningAuthor %\hbox{} \else \MapsRunningTitle\fi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% sectioning \setupheads[sectionnumber=no, align=right] \def\hfonti{\ssbfa} \def\hfontii{\ssbf} \def\hfontiii{\rm\it} \def\runin#1#2{#2.} \doifmodeelse{nosubsub}{% \setuphead [section][% style=\hfontii, before={\blank[line]}, after={}% ] \setuphead [subsection][% style=\hfontiii, command=\runin, alternative=text, distance=6pt, before={\blank[halfline]}% ]}{% \setuphead [section][% style=\hfonti, before={\blank[line]}, after={\blank[halfline]}% ] \setuphead [subsection][% style=\hfontii, before={\blank[halfline]}, after={}% ] \setuphead [subsubsection][% style=\hfontiii, command=\runin, distance=6pt, alternative=text, before={\blank[halfline]}% ]} \doifmodeelse{nosubsub}{% \setuphead [subject][% style=\hfontii, before={\blank[halfline]}, after={}% ] \setuphead [subsubject][% style=\hfontiii, command=\runin, alternative=text, before={\blank[halfline]}% ]}{% \setuphead [subject][% style=\hfonti, before={\blank}, after={\blank[halfline]}% ] \setuphead [subsubject][% style=\hfontii, before={\blank[halfline]}, after={}% ] \setuphead [subsubsubject][% style=\hfontiii, command=\runin, alternative=text, before={\blank[halfline]}% ]} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% floats \setupfloats [location=center, before={\ss}] \setupcaptions [headstyle={\ssbf},style={\ssx}, suffix=,distance=6pt, inbetween={\blank[halfline]}] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% various document elements \def\ChkBox{% \hbox {\boxrulewidth=.4pt \raise.2ex\ruledvbox {\phantom{\vrule width .85ex height .85ex% }}}} \definesymbol [1][\ChkBox] \setupitemize[1][packed] \setupitemize [each][% indentnext=no, align=right, width=1em, distance=0pt% ] % an outer form of itemize that does not indent % the paragraph. \definecomplexorsimpleempty\startouteritemize \def\complexstartouteritemize[#1]{\begingroup \startitemize[width=1sp,#1] \let\doitem\item \def\item{\doitem[]\hbox{}\kern12pt\rightskip=0pt}% } \def\stopouteritemize{\stopitemize\endgroup} \setupenumerations [indentnext=no] \setupdescriptions [indentnext=no] \unexpanded\def\smalltyping{% \switchtobodyfont[tt]% \parindent=0pt } % typing: % - prettyverbatim is NOT the default % - smaller size \unexpanded\def \XeTeX{X\lower.5ex\hbox{\kern-.1em\mirror{E}}\kern-.1667em\TeX} \setuptyping [% style={\smalltyping}, option=none, indentnext=no% ] \def\footnum#1{#1.} \setupfootnotes [location=none, width=\textwidth, before={\blank}, numbercommand=, command=\footnum] \setupfootnotedefinition [location=serried, before=, after=, distance=0.5em] \setuptabulate [before=\blank, inner=\ss, after=\blank] \def\startIntroEntry#1% {\startlinecorrection \bgroup \setupalign[right] \setuptolerance[verytolerant] \setupindenting[no] \noindent \switchtobodyfont[9pt]% \setuplocalinterlinespace[line=10pt]% %\hyphenpenalty10000 \parfillskip 0pt plus 1fill \rightskip6pt plus 1fill \ss \bgroup\bf #1\par\egroup \ignorespaces } \def\stopIntroEntry {\par\egroup \stoplinecorrection \blank[line] } \def\defineIntroEntry[#1][#2][#3]% {\setvalue{start#1}{\startIntroEntry{#2}}% \setvalue {stop#1}{\stopIntroEntry#3}} \defineIntroEntry[Keywords][Keywords][] \defineIntroEntry[Abstract][Abstract][] % article parameters (other fields and defaults) \def\MapsBibData[#1]% {\getparameters [Maps] [SubTitle=, RunningAuthor=, RunningTitle=, Email=, Address=, Page=1, Title=, Author=, Period=, Number=, Year=, #1]% \doifnothing{\MapsPeriod}{% \ifnum \normalmonth<6 \gdef\MapsPeriod{VOORJAAR}\else \gdef\MapsPeriod{NAJAAR}\fi} \doifinstringelse{oorjaar}{\MapsPeriod}{\gdef\MapsPeriod{VOORJAAR}}{}% \doifinstringelse{pring}{\MapsPeriod}{\gdef\MapsPeriod{VOORJAAR}}{}% \doifinstringelse{ajaar}{\MapsPeriod}{\gdef\MapsPeriod{NAJAAR}}{}% \doifinstringelse{utumn}{\MapsPeriod}{\gdef\MapsPeriod{NAJAAR}}{}% \doifnothing{\MapsYear}{\gdef\MapsYear{\the\year}}% \doifnothing{\MapsNumber}{% \ifnum \normalmonth<6 \xdef\MapsNumber{\the\numexpr (\the\year-1990)*2\relax}% \else \xdef\MapsNumber{\the\numexpr (\the\year-1990)*2+1\relax}% \fi }% \doifnothing\MapsRunningAuthor {\global\let\MapsRunningAuthor\MapsAuthor}% \doifnothing\MapsRunningTitle {\global\let\MapsRunningTitle\MapsTitle}}% \def\dostartArticle[#1]{% \MapsBibData[#1] \pageno=\MapsPage \setuppagenumber[start=\MapsPage] \startbaselinecorrection \bgroup \hsize = 457pt \let\\\crlf \blank[35pt,force] \switchtobodyfont[24pt] \setupalign[right] {\noindent\bf\MapsTitle\par} \ifx\MapsSubTitle\empty \blank[30pt] \else \bgroup \blank[12pt] \switchtobodyfont[18pt]\noindent \it \advance \rightskip 0pt plus 2em \MapsSubTitle\par \egroup \blank[30pt] \fi \egroup \setupalign[width] \switchtobodyfont[rm,10pt] \stopbaselinecorrection \ifMapsInColumns \startcolumns\hyphenpenalty1000 \else \clubpenalty10000 \widowpenalty10000 \fi } \def\startArticle{\dosingleempty\dostartArticle} \def\signArticle{% \blank\let\\\crlf \noindent\switchtobodyfont[ss,9pt]% \MapsAuthor \doifsomething{\MapsAddress}{\\\MapsAddress}% \doifsomething{\MapsEmail}{\\\MapsEmail}% \switchtobodyfont[10pt]% \def\signArticle{}% } \def\stopArticle{% \par\signArticle \ifMapsInColumns \stopcolumns \fi \page } \installpagebreakhandler{last}{} %%% `logos' %%%%%%%%%%%%%%%%%%%%%%%%%% \unexpanded\def\LaTeX % requested by erik frambach {{\setbox\scratchbox\hbox{L}% \scratchdimen\ht\scratchbox \setbox\scratchbox\hbox{\switchtobodyfont[script]A}% L\kern-.55\wd\scratchbox \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}% \kern-.2\wd\scratchbox\TeX}} \def\CONTEXT{Con{\TeX}t} \def\ConTeXt{Con{\TeX}t} \def\METAFONT{Metafont} \def\METAPOST{MetaPost} \def\POSTSCRIPT{PostScript} \def\acro#1{{\switchtobodyfont[9pt]#1}} %%%%%%%%%%% \doifmodeelse{onecolumn}{% \setuplayout[width=340pt] \doifmodeelse{asym}{% one col, asymmetric \setuplayout[backspace=187.3pt]% \setuptyping [widetyping][oddmargin=-117pt] \setuppagenumbering [alternative={singlesided,doublesided}] \setupheadertexts [{\hbox{}\hskip-117pt\TiHead}] [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-30pt\hbox{}}] [{\hbox{}\hskip-147pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}] [\AuHead] \setupfootertexts }{% one col, symmetric \setuplayout[backspace=70.3pt] \setuppagenumbering [alternative=doublesided] \setuptyping[blank=halfline] \setupheadertexts [\TiHead] [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-147pt\hbox{}}] [{\hbox{}\hskip-147pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}] [\AuHead] \setupfootertexts }}{% two col \setuplayout[width=457pt] \setupcolumns[n=2,tolerance=verytolerant,distance=11pt] \setuplayout[backspace=70.3pt,grid=yes] \setuppagenumbering [alternative=doublesided] \setuptyping[blank=halfline] \setupheadertexts [\TiHead] [{\cap{\MapsPeriod\ \MapsYear}\quad\bf \pagenumber\hskip-30pt\hbox{}}] [{\hbox{}\hskip-30pt{\bf \pagenumber}\quad \cap {maps\ \MapsNumber}}] [\AuHead] \setupfootertexts } \def\fulltextwidth{457pt} \def\startdescription {\blank \bgroup \def\sym##1{\par\noindent\hbox{\bf\kern -16pt ##1}\hskip 12pt} \startnarrower[left] } \def\stopdescription {\par \stopnarrower \egroup \blank \noindentation } \frenchspacing \setuptolerance[tolerant] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-cweb.tex0000644000175000017500000011043511754241457023603 0ustar norbertnorbert%D \module %D [ file=m-cweb, %D version=1997.01.15, %D title=\CONTEXT\ Extra Modules, %D subtitle=\CWEB\ Pretty Printing Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 First some auxiliary stuff, to be moved to system module. \def\dodofindfirstcharacter#1% {\ifx#1\relax \let\next=\egroup \else \handlecase {\expandafter\ifnum\expandafter\catcode\expandafter`#1=11 \def\next##1\relax{\egroup\def\firstcharacter{#1}}% \fi}% \fi \next} \def\dofindfirstcharacter#1#2% {\def\firstcharacter{}% \bgroup \defconvertedargument\ascii{#2}% \let\next\dodofindfirstcharacter \let\handlecase#1% \expandafter\next\ascii\relax} \def\normalcase#1% {#1} \def\findfirstcharacter% {\dofindfirstcharacter\lowercase} \def\FindFirstCharacter% {\dofindfirstcharacter\normalcase} \def\FINDFIRSTCHARACTER% {\dofindfirstcharacter\uppercase} % nog doen: % % \deactivateCWEB in output routine % status info % gelinkte entries % parskip en parindent %D \gdef\CWEBquote#1.{{\em Quote :}\ #1.} % checks the . %D This module (re)implements the \CWEB\ macros as defined in %D the file \type{cwebmac.tex}. %D %D \CWEB\ uses short, often one character long, names for %D macros. This is no real problem because no one is supposed %D to read and understand the files generated by \CWEB. The %D standard macros are meant for \PLAIN\ \TEX\ users. In %D \CONTEXT\ and other macro packages however, there is a %D potential conflict with format specific or user defined %D commands. Furthermore, the \CWEB\ macros implement their own %D output routines. When integrating \CWEB\ documents in %D another environment, the \CWEB\ specific macros have to be %D made local. The first part of this module is dedicated to %D this feature. %D %D Instead of using \type{\def} and \type{\let} for defining %D macros, we use: %D %D \starttyping %D \defCEBmacro arguments {meaning} %D \letCEBmacro arguments {meaning} %D \stoptyping %D %D \CWEB files contain implicit calls to macros that generate %D the table of contents, the lists of sections and the index. %D Because we want to be much more flexible, we implemented our %D own alternatives, and therefore have to bypass the original %D ones. The next macro is used for defining these obsolete %D \CWEB\ macros. The dummies take care of arguments. %D %D \starttyping %D \defCEBdummy arguments {meaning} %D \stoptyping %D %D The list of \CWEB\ specific macro names is saved in a %D \TOKENLIST. This serves two purposes. First it enables us to %D activate the \CWEB\ macros, which are saved under a %D different name, second it can be used to temporary restore %D the meanings, for instance when the output routine builds %D the page. \newtoks\CWEBmacros %D Activating and deactivating is done by means of: %D %D \starttyping %D \activateCWEB %D \deactivateCWEB %D \stoptyping %D %D Which are implemented as: \def\activateCWEB% {\let\doCWEB=\activateCWEBmacro \the\CWEBmacros} \def\deactivateCWEB% {\let\doCWEB=\deactivateCWEBmacro \the\CWEBmacros} %D The three definition macros append the name of the macro to %D the list. The first two macros save the meaning, the last one %D assigns \type{{}} to the macro and gobbles original meaning. \long\def\defCWEBmacro#1% {\appendtoks\doCWEB#1\to\CWEBmacros \setvalue{newCWEB\string#1}} \long\def\letCWEBmacro#1% {\appendtoks\doCWEB#1\to\CWEBmacros \letvalue{newCWEB\string#1}} \long\def\defCWEBdummy#1#2#% {\appendtoks\doCWEB#1\to\CWEBmacros \setvalue{newCWEB\string#1}#2{}% \gobbleoneargument} %D The macro \type{\defCWEBdummy} of course takes care of the %D argument. This leaves the two (de|)|activating macros: \def\CWEBmacro#1% {\getvalue{newCWEB\string#1}} \def\activateCWEBmacro#1% {\letvalue{oldCWEB\string#1}=#1% \def#1{\CWEBmacro#1}} \def\deactivateCWEBmacro#1% {\expandafter\let\expandafter#1\expandafter=\csname oldCWEB\string#1\endcsname} %D I did consider loading the \CWEB\ macros using temporary %D substitutes of \type{\def}, \type{\font}, \type{\newbox} etc. %D The main problem is that the file contains more than %D definitions and taking all kind of assignments into account %D too would not make things easier. So I decided to stick to %D the method as just described. %D Now we're ready for the real job. What follows is a partial %D adaption of the file \type{cwebmac.tex}, version 3.1, dated %D September 1994 and written by Levy and Knuth. When possible %D we kept the original meaning, but we've granted ourselves %D the freedom to reformat the macro's for readibility. %D %D We'll only present the macros we actually use. The source %D however contains the original implementation. % standard macros for CWEB listings (in addition to plain.tex) % Version 3.1 --- September 1994. % % \ifx\documentstyle\undefined\else\endinput\fi % LaTeX will use other macros % % \xdef\fmtversion{\fmtversion+CWEB3.1} %D \macros{.}{} %D %D \CWEBquote preserve a way to get the dot accent (all %D other accents will still work as usual). \letCWEBmacro\: = \. % \parskip = 0pt % no stretch between paragraphs % \parindent = 1em % for paragraphs and for the first line of C text % \font\ninerm = cmr9 % \let\mc = \ninerm % medium caps % \font\eightrm = cmr8 % \let\sc = \eightrm % small caps (NOT a caps-and-small-caps font) % \let\mainfont = \tenrm % \let\cmntfont = \tenrm % \font\tenss = cmss10 % \let\cmntfont = \tenss % alternative comment font % \font\titlefont = cmr7 scaled \magstep4 % title on the contents page % \font\ttitlefont = cmtt10 scaled \magstep2 % typewriter type in title % \font\tentex = cmtex10 % TeX extended character set (used in strings) % \fontextraspace\tentex = 0pt % no double space after sentences %D \macros{mc,sc,cmntfont,eightrm}{} %D %D The naming of the fonts in in line with those in \PLAIN\ %D \TEX. Although \CONTEXT\ implements its own scheme, there is %D still support for the \PLAIN\ ones. We keep the original %D names, but change their meaning. That way the macros obey %D switching to other sizes or styles. \defCWEBmacro\mc {\tx} \defCWEBmacro\sc {\txx} \defCWEBmacro\cmntfont {\ss} \defCWEBmacro\eightrm {\tx} %D \macros{tentex,sevenrm,sevensy,teni}{} %D %D The next one uses a temporary solution. The \type{cmtex10} %D font is not part of the default mechanism. We make use of %D the \CONTEXT\ variables \type{\textface}, \type{\scriptface} %D and \type{\scriptscriptface}, which hold the current %D sizes. \defCWEBmacro\tentex% {\font\next=cmtex10 at \textface \fontextraspace\next\zeropoint \next} \defCWEBmacro\sevenrm {\getvalue{\scriptface rmtf}} \defCWEBmacro\sevensy {\getvalue{\scriptface mmsy}} \defCWEBmacro\teni {\getvalue{\textface mmmi}} %D \macros{CWEBpt}{} %D %D The original macros are based on a 10~point bodyfont size. We %D therefore have to specify dimension in points a bit %D different. Specifications like .6pt are changed to %D \type{.06} times \type{\bodyfontsize}. \defCWEBmacro\CWEBpt {\bodyfontsize} % still dutch %D \macros{CEE,UNIX,TEX,CPLUSPLUS}{} %D %D Next come some logo's. It does not make much sense to use %D the \CONTEXT\ logo mechanism here, so we simply say: \defCWEBmacro \CEE/{{\mc C\spacefactor1000}} \defCWEBmacro \UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} \defCWEBmacro \TEX/{\TeX} \defCWEBmacro\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} \defCWEBmacro \Cee{\CEE/} % for backward compatibility %D \macros{\ }{} %D %D Now we come to the real work: the short commands that make %D up the typography. %D %D \CWEBquote italic type for identifiers. \defCWEBmacro\\#1% {\leavevmode\hbox{\it#1\/\kern.05em}} %D \macros{\string|}{} %D %D \CWEBquote one letter identifiers look better this way. \defCWEBmacro\|#1% {\leavevmode\hbox{$#1$}} %D \macros{\string\&}{} %D %D \CWEBquote boldface type for reserved words. \defCWEBmacro\% {\leavevmode \hbox {\def\_% {\kern.04em \vbox{\hrule width.3em height .06\CWEBpt}% .6pt}% \kern.08em}% \bf#1\/\kern.05em}} %D \macros{.}{} %D %D Here we use the previously saved period. This macro %D takes care of special characters in strings. \defCWEBmacro\.#1% {\leavevmode \hbox {\tentex % typewriter type for strings \let\\=\BS % backslash in a string \let\{=\LB % left brace in a string \let\}=\RB % right brace in a string \let\~=\TL % tilde in a string \let\ =\SP % space in a string \let\_=\UL % underline in a string \let\&=\AM % ampersand in a string \let\^=\CF % circumflex in a string #1\kern.05em}} %D \macros{)}{} %D %D Some discretionary hack. \defCWEBmacro\)% {\discretionary{\hbox{\tentex\BS}}{}{}} %D \macros{AT}{} %D %D \CWEBquote at sign for control text (not needed in versions %D $>=$ 2.9). \defCWEBmacro\AT{@} %D \macros{ATL,postATL,NOATL}{} %D %D A two step macro that handles whatever. \defCWEBmacro\ATL% {\par \noindent \bgroup \catcode`\_=12 \postATL} \defCWEBmacro\postATL#1 #2 % {\bf letter \\{\uppercase{\char"#1}} tangles as \tentex "#2"% \egroup \par} \defCWEBmacro\noATL#1 #2 % {} %D \macros{noatl}{} %D %D \CWEBquote suppress output from \type{@l}. \defCWEBmacro\noatl% {\let\ATL=\noATL} % \defCWEBmacro\ATH% % {\X\kern-.5em:Preprocessor definitions\X} %D \macros{PB} %D %D \CWEBquote hook for program brackets {\tttf\string|...\string|} %D in TeX part or section name. \defCWEBmacro\PB% {\relax} % \chardef\AM = `\& % ampersand character in a string % \chardef\BS = `\\ % backslash in a string % \chardef\LB = `\{ % left brace in a string % \chardef\RB = `\} % right brace in a string % \chardef\TL = `\~ % tilde in a string % \chardef\UL = `\_ % underline character in a string % \chardef\CF = `\^ % circumflex character in a string \defCWEBmacro\AM {\char`\&} % ampersand character in a string \defCWEBmacro\BS {\char`\\} % backslash in a string \defCWEBmacro\LB {\char`\{} % left brace in a string \defCWEBmacro\RB {\char`\}} % right brace in a string \defCWEBmacro\TL {\char`\~} % tilde in a string \defCWEBmacro\UL {\char`\_} % underline character in a string \defCWEBmacro\CF {\char`\^} % circumflex character in a string \defCWEBmacro\SP {{\tt\char`\ }} % (visible) space in a string % \newbox\PPbox \setbox\PPbox=\hbox % {\kern.5pt\raise1pt\hbox{\sevenrm+\kern-1pt+}\kern.5pt} % \newbox\MMbox \setbox\MMbox=\hbox % {\kern.5pt\raise1pt\hbox{\sevensy\char0\kern-1pt\char0}\kern.5pt} % \newbox\MGbox \setbox\MGbox=\hbox % symbol for -> % {\kern-2pt\lower3pt\hbox{\teni\char'176}\kern1pt} % \newbox\MODbox \setbox\MODbox=\hbox % {\eightrm\%} % % \def\PP {\copy\PPbox} % \def\MM {\copy\MMbox} % \def\MG {\copy\MGbox} % \def\MOD {\mathbin{\copy\MODbox}} \defCWEBmacro\PP% symbol for ++ {\kern.05\CWEBpt \raise.1\CWEBpt\hbox{\sevenrm+\kern-.1\CWEBpt+}% \kern.05\CWEBpt} \defCWEBmacro\MM% {\kern.05\CWEBpt \raise.1\CWEBpt\hbox{\sevensy\char0\kern-.1\CWEBpt\char0}% \kern.05\CWEBpt} \defCWEBmacro\MG% {\kern-.2\CWEBpt \lower.3\CWEBpt\hbox{\teni\char'176}% \kern .1\CWEBpt} \defCWEBmacro\MRL#1% {\mathrel{\let\K==#1}} % \def\MRL#1% % {\KK#1} % \def\KK#1#2% % {\buildrel\;#1\over{#2}} \letCWEBmacro\GG = \gg \letCWEBmacro\LL = \ll \letCWEBmacro\NULL = \Lambda % \mathchardef\AND = "2026 % bitwise and; also \& (unary operator) \defCWEBmacro\AND% redefines itself (funny) {\mathchardef\AND="2026 \AND} % bitwise and; also \& (unary operator) \letCWEBmacro\OR = \mid % bitwise or \letCWEBmacro\XOR = \oplus % bitwise exclusive or \defCWEBmacro\CM {{\sim}} % bitwise complement \defCWEBmacro\MOD {\mathbin{\eightrm\%}} \defCWEBmacro\DC {\kern.1em{::}\kern.1em} % symbol for :: \defCWEBmacro\PA {\mathbin{.*}} % symbol for .* \defCWEBmacro\MGA {\mathbin{\MG*}} % symbol for ->* \defCWEBmacro\this {\&{this}} % \newbox \bak % backspace one em % \newbox \bakk % backspace two ems % % \setbox\bak =\hbox to -1em{} % \setbox\bakk=\hbox to -2em{} \newcount\CWEBind % current indentation in ems \defCWEBmacro\1% indent one more notch {\global\advance\CWEBind by 1 \hangindent\CWEBind em} \defCWEBmacro\2% indent one less notch {\global\advance\CWEBind by -1 } \defCWEBmacro\3#1% optional break within a statement {\hfil \penalty#10 \hfilneg} \defCWEBmacro\4% backspace one notch {\hbox to -1em{}} \defCWEBmacro\5% optional break {\hfil \penalty-1 \hfilneg \kern2.5em \hbox to -2em{}% \ignorespaces} \defCWEBmacro\6% forced break {\ifmmode \else \par \hangindent\CWEBind em \noindent \kern\CWEBind em \hbox to -2em{}% \ignorespaces \fi} \defCWEBmacro\7% forced break and a little extra space {\Y \6} \defCWEBmacro\8% no indentation {\hskip-\CWEBind em \hskip 2em} \defCWEBmacro\9#1% {} \newcount\gdepth % depth of current major group, plus one \newcount\secpagedepth \secpagedepth=3 % page breaks will occur for depths -1, 0, and 1 % \newtoks\gtitle % title of current major group % \newskip\intersecskip % \intersecskip=12pt minus 3pt % space between sections % \let\yskip=\smallskip \defCWEBmacro\?% {\mathrel?} % \def\note#1#2.% % {\Y\noindent % {\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}} \defCWEBmacro\lapstar% {\rlap{*}} % \def\stsec% % {\rightskip=0pt % get out of C mode (cf. \B) % \sfcode`;=1500 % \pretolerance 200 % \hyphenpenalty 50 % \exhyphenpenalty 50 % \noindent{\let\*=\lapstar\bf\secstar.\quad}} % % \let\startsection=\stsec \defCWEBmacro\defin#1% {\global\advance\CWEBind by 2 \1\&{#1 } } % begin `define' or `format' % \def\A% xref for doubly defined section name % {\note{See also section}} % % \def\As% xref for multiply defined section name % {\note{See also sections}} \defCWEBmacro\B% {\rightskip=0pt plus 100pt minus 10pt % go into C mode \sfcode`;=3000 \pretolerance 10000 \hyphenpenalty 1000 % so strings can be broken (discretionary \ is inserted) \exhyphenpenalty 10000 \global\CWEBind=2 \1\ \unskip} \defCWEBmacro\C#1% {\5\5\quad$/\ast\,${\cmntfont #1}$\,\ast/$} % \let\SHC\C % "// short comments" treated like "/* ordinary comments */" \defCWEBmacro\SHC#1% {\5\5\quad$//\,${\cmntfont#1}} % \def\C#1{\5\5\quad$\triangleright\,${\cmntfont#1}$\,\triangleleft$} % \def\SHC#1{\5\5\quad$\diamond\,${\cmntfont#1}} \defCWEBmacro\D% macro definition {\defin{\#define}} \letCWEBmacro\E=\equiv % equivalence sign % \def\ET% conjunction between two section numbers % { and~} % % \def\ETs% conjunction between the last two of several section numbers % {, and~} \defCWEBmacro\F% format definition {\defin{format}} \letCWEBmacro\G = \ge % greater than or equal sign % \H is long Hungarian umlaut accent \letCWEBmacro\I = \ne % unequal sign \defCWEBmacro\J% TANGLE's join operation {\.{@\&}} % \let\K== % assignment operator \letCWEBmacro\K = \leftarrow % "honest" alternative to standard assignment operator % \L is Polish letter suppressed-L % \outer\def\M#1% % {\MN{#1}% % \ifon % \vfil % \penalty-100 % \vfilneg % beginning of section % \vskip\intersecskip % \startsection % \ignorespaces} % % \outer\def\N#1#2#3.% % {\gdepth=#1% % \gtitle={#3}% % \MN{#2}% beginning of starred section % \ifon % \ifnum#1<\secpagedepth % \vfil % \eject % force page break if depth is small % \else % \vfil % \penalty-100 % \vfilneg % \vskip\intersecskip % \fi % \fi % \message{*\secno}% progress report % \edef\next% % {\write\cont % write to contents file % {\ZZ{#3}{#1}{\secno}{\noexpand\the\pageno}}}% % \next % \ZZ{title}{depth}{sec}{page} % \ifon % \startsection % {\bf#3.\quad}% % \ignorespaces} % % \def\MN#1% % {\par % common code for \M, \N % {\xdef\secstar{#1}% % \let\*=\empty % \xdef\secno{#1}}% remove \* from section name % \ifx\secno\secstar % \onmaybe % \else % \ontrue % \fi % \mark{{{\tensy x}\secno}{\the\gdepth}{\the\gtitle}}} % % each \mark is {section reference or null}{depth plus 1}{group title} % \O is Scandinavian letter O-with-slash % \P is paragraph sign \defCWEBmacro\Q {\note{This code is cited in section}} % xref for mention of a section \defCWEBmacro\Qs {\note{This code is cited in sections}} % xref for mentions of a section % \S is section sign \defCWEBmacro\T#1% {\leavevmode % octal, hex or decimal constant \hbox {$\def\?{\kern.2em}% \def\$##1{\egroup_{\,\rm##1}\bgroup}% suffix to constant \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick) \let\~=\oct \let\^=\hex {#1}$}} \defCWEBmacro\U {\note{This code is used in section}} % xref for use of a section \defCWEBmacro\Us {\note{This code is used in sections}} % xref for uses of a section \letCWEBmacro\R = \lnot % logical not \letCWEBmacro\V = \lor % logical or \letCWEBmacro\W = \land % logical and % defined later on % % \def\X#1:#2\X% % {\ifmmode % \gdef\XX{\null$\null}% % \else % \gdef\XX{}% % \fi % section name % \XX$\langle\,${#2\eightrm\kern.5em#1}$\,\rangle$\XX} \unprotect \def\theCWEByskip {\blank[\v!small]} \def\theCWEBvskip {\blank[\v!big]} \protect \defCWEBmacro\Y% {\par \yskip} \defCWEBmacro\yskip% {\theCWEByskip} \letCWEBmacro\Z = \le % \letCWEBmacro\ZZ = \let % now you can \write the control sequence \ZZ \letCWEBmacro\* = * \defCWEBmacro\oct% {\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}} \defCWEBmacro\hex% {\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}} \defCWEBmacro\vb#1% {\leavevmode \hbox {\kern.2\CWEBpt \vrule \vtop {\vbox {\hrule \hbox{\strut\kern.2\CWEBpt\.{#1}\kern.2\CWEBpt}} \hrule}% \vrule \kern.2\CWEBpt}} % verbatim string \def\onmaybe% {\let\ifon=\maybe} \let\maybe=\iftrue \newif\ifon % \newif\iftitle % \newif\ifpagesaved % % \def\lheader% % {\mainfont % \the\pageno % \eightrm % \qquad % \grouptitle % \hfill % \title % \qquad % \mainfont % \topsecno} % top line on left-hand pages % % \def\rheader% % {\mainfont % \topsecno % \eightrm % \qquad % \title % \hfill % \grouptitle % \qquad % \mainfont % \the\pageno} % top line on right-hand pages % % \def\grouptitle % {\let\i=I % \let\j=J % \uppercase\expandafter{\expandafter\takethree\topmark}} % % \def\topsecno% % {\expandafter\takeone\topmark} % % \def\takeone #1#2#3{#1} % \def\taketwo #1#2#3{#2} % \def\takethree #1#2#3{#3} % % \def\nullsec% % {\eightrm % \kern-2em} % the \kern-2em cancels \qquad in headers % % \let\page=\pagebody % \def\page {\box255 } % \raggedbottom % \normalbottom % faster, but loses plain TeX footnotes % % \def\normaloutput#1#2#3% % {\shipout\vbox % {\ifodd % \pageno % \hoffset=\pageshift % \fi % \vbox to \fullpageheight % {\iftitle % \global\titlefalse % \else % \hbox to \pagewidth % {\vbox to 10pt{}% % \ifodd\pageno #3\else#2\fi} % \fi % \vfill#1}} % parameter #1 is the page itself % \global\advance\pageno by 1} % % \gtitle={\.{CWEB} output} % this running head is reset by starred sections % % \mark{\noexpand\nullsec0{\the\gtitle}} % % \def\title% % {\expandafter\uppercase\expandafter{\jobname}} % % \def\topofcontents% % {\centerline{\titlefont\title} % \vskip.7in % \vfill} % this material will start the table of contents page \def\botofcontents% {\vfill \centerline{\covernote}} % this material will end the table of contents page \def\covernote% {} % some leftover \defCWEBmacro\contentspagenumber{0} % default page number for table of contents % \newdimen\pagewidth \pagewidth = 158mm % the width of each page % \newdimen\pageheight \pageheight = 223mm % the height of each page % \newdimen\fullpageheight \fullpageheight = 240mm % page height including headlines % \newdimen\pageshift \pageshift = 0in % shift righthand pages wrt lefthand ones % % \def\magnify#1% % {\mag=#1 % \pagewidth=6.5truein % \pageheight=8.7truein % \fullpageheight=9truein % \setpage} % % \def\setpage% % {\hsize\pagewidth % \vsize\pageheight} % use after changing page size % % \def\contentsfile {\jobname.toc} % file that gets table of contents info % \def\readcontents {\input \contentsfile} % \def\readindex {\input \jobname.idx} % \def\readsections {\input \jobname.scn} % % \newwrite\cont % \output{\setbox0=\page % the first page is garbage % \openout\cont=\contentsfile % \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter % \global\output{\normaloutput\page\lheader\rheader}} % \setpage % \vbox to \vsize{} % the first \topmark won't be null \defCWEBdummy\magnify#1% magnify the page {} \defCWEBmacro\ch% {\note{The following sections were changed by the change file:} \let\*=\relax} % \newbox\sbox % saved box preceding the index % \newbox\lbox % lefthand column in the index % % \def\inx% % {\par\vskip6pt plus 1fil % we are beginning the index % \def\page{\box255 } % \normalbottom % \write\cont{} % ensure that the contents file isn't empty % \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother % \closeout\cont % the contents information has been fully gathered % \output % {\ifpagesaved % \normaloutput{\box\sbox}\lheader\rheader % \fi % \global\setbox\sbox=\page % \global\pagesavedtrue} % \pagesavedfalse % \eject % eject the page-so-far and predecessors % \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box % \vsize=\pageheight % \advance\vsize by -\ht\sbox % the remaining height % \hsize=.5\pagewidth % \advance\hsize by -10pt % % column width for the index (20pt between cols) % \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines % \def\lr{L} % this tells whether the left or right column is next % \output % {\if L\lr % \global\setbox\lbox=\page % \gdef\lr{R} % \else % \normaloutput % {\vbox to\pageheight % {\box\sbox % \vss % \hbox to\pagewidth{\box\lbox\hfil\page}}} % \lheader % \rheader % \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi} % \message{Index:} % \parskip 0pt plus .5pt % \outer\def\I##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry % \def\[##1]{$\underline{##1}$} % underlined index item % \rm % \rightskip0pt plus 2.5em % \tolerance 10000 % \let\*=\lapstar % \hyphenpenalty 10000 % \parindent0pt % \readindex} % % \def\fin% % {\par\vfill\eject % this is done when we are ending the index % \ifpagesaved\null\vfill\eject\fi % output a null index column % \if L\lr\else\null\vfill\eject\fi % finish the current page % \parfillskip 0pt plus 1fil % \def\grouptitle{NAMES OF THE SECTIONS} % \let\topsecno=\nullsec % \message{Section names:} % \output={\normaloutput\page\lheader\rheader} % \setpage % \def\note##1##2.{\quad{\eightrm##1~##2.}} % \def\Q{\note{Cited in section}} % crossref for mention of a section % \def\Qs{\note{Cited in sections}} % crossref for mentions of a section % \def\U{\note{Used in section}} % crossref for use of a section % \def\Us{\note{Used in sections}} % crossref for uses of a section % \def\I{\par\hangindent 2em}\let\*=* % \readsections} % % \def\con% % {\par\vfill\eject % finish the section names % %\ifodd\pageno\else\titletrue\null\vfill\eject\fi % for duplex printers % \rightskip = 0pt % \hyphenpenalty = 50 % \tolerance = 200 % \setpage % \output={\normaloutput\page\lheader\rheader} % \titletrue % prepare to output the table of contents % \pageno=\contentspagenumber % \def\grouptitle{TABLE OF CONTENTS} % \message{Table of contents:} % \topofcontents % \line{\hfil Section\hbox to3em{\hss Page}} % \let\ZZ=\contentsline % \readcontents\relax % read the contents info % \botofcontents % \end} % print the contents page(s) and terminate % % \def\contentsline#1#2#3#4% % {\ifnum#2=0 % \smallbreak % \fi % \line{\consetup{#2}#1 % \rm\leaders\hbox to .5em{.\hfil}\hfil\ #3\hbox to3em{\hss#4}}} % \defCWEBmacro\consetup#1% {\ifcase#1 \bf % depth -1 (@**) \or % depth 0 (@*) \or \hskip2em % depth 1 (@*1) \or \hskip4em % depth 2 (@*2) \or \hskip6em % depth 3 (@*3) \or \hskip8em % depth 4 (@*4) \or \hskip10em % depth 5 (@*5) \else \hskip12em \fi} % depth 6 or more \defCWEBdummy \inx {} % index \defCWEBdummy \fin {} % finish \defCWEBdummy \con {} % table of contents and finish \defCWEBdummy \noinx {} % no indexes or table of contents \defCWEBdummy \nosecs {} % no index of section names or table of contents \defCWEBdummy \nocon {} % no table of contents \defCWEBmacro\,% {\relax \ifmmode \mskip\thinmuskip \else \thinspace \fi} % \def\noinx% % {\let\inx=\end} % % \def\nosecs% % {\let\FIN=\fin % \def\fin% % {\let\parfillskip=\end % \FIN}} % % \def\nocon% % {\let\con=\end} % % \newcount\twodigits % % \def\hours% % {\twodigits=\time % \divide\twodigits by 60 % \printtwodigits % \multiply\twodigits by -60 % \advance\twodigits by \time % :\printtwodigits} % % \def\gobbleone1{} % % \def\printtwodigits% % {\advance\twodigits by 100 % \expandafter\gobbleone\number\twodigits % \advance\twodigits by -100 } % % \def\today% % {\ifcase\month % \or January\or February\or March\or April\or May\or June% % \or July\or August\or September\or October\or November\or December% % \fi % \space % \number\day, \number\year} % % \def\datethis% % {\def\startsection% % {\leftline{\sc\today\ at \hours} % \bigskip % \let\startsection=\stsec % \stsec}} % % \def\datecontentspage% % {\def\topofcontents% % {\leftline{\sc\today\ at \hours} % \bigskip % \centerline{\titlefont\title} % \vfill}} \defCWEBdummy\datethis {} % say `\datethis' in limbo, to get your listing timestamped before section 1 \defCWEBdummy\datecontentspage {} % timestamps the contents page \defCWEBmacro\TeX% {{\ifmmode\it\fi \leavevmode \hbox{T\kern-.1667em\lower.424ex\hbox{E}\hskip-.125em X}}} % alternative implementation \newif\ifCWEBnotes \defCWEBmacro\Q {\CWEBnotesfalse \note{This code is cited in section}} % xref for mention of a section \defCWEBmacro\Qs {\CWEBnotestrue \note{This code is cited in sections}} % xref for mentions of a section \defCWEBmacro\U {\CWEBnotesfalse \note{This code is used in section}} % xref for use of a section \defCWEBmacro\Us {\CWEBnotestrue \note{This code is used in sections}} % xref for uses of a section \defCWEBmacro\A {\CWEBnotesfalse \note{See also section}} % xref for doubly defined section name \defCWEBmacro\As {\CWEBnotestrue \note{See also sections}} % xref for multiply defined section name \defCWEBmacro\ET% conjunction between two section numbers { and~} \defCWEBmacro\ETs% conjunction between the last two of several section numbers {, and~} %\def\processCWEBsectionnumbers[#1]% % {\bgroup % \def\CWEBcomma% % {\def\CWEBcomma{, }}% % \def\docommand##1% % {\bgroup % \def\[####1]{####1}% % \xdef\CWEBreference{##1}% % \egroup % \CWEBcomma{\naar{\donottest{##1}}[web:\CWEBreference]}}% % \processcommalist[{#1}]\docommand % \egroup} % \def\processCWEBsectionnumbers[#1]% % {\bgroup % \def\CWEBcomma% % {\def\CWEBcomma{, }}% % \def\docommand##1% % {\bgroup % \def\(####1){####1}% % \xdef\CWEBreference{##1}% % \egroup % \CWEBcomma % {\localcolortrue\naar{\donottest{##1}}[web:\CWEBreference]}}% % \bgroup % \def\[##1]{\(##1)}\let\(=\relax\xdef\CWEBreferences{#1}% % \egroup % \unexpanded\def\(##1){\[##1]}% % \processcommacommand[\CWEBreferences]\docommand % \egroup} \def\processCWEBsectionnumbers[#1]% {\bgroup \def\CWEBcomma% {\def\CWEBcomma{, }}% \def\docommand##1% {\bgroup \def\[####1]{####1}% \xdef\CWEBreference{##1}% \egroup \CWEBcomma{\localcolortrue\goto{\donottest{##1}}[web:\CWEBreference]}}% \processlist{(}{)}{,}\docommand(#1) \egroup} \def\processCWEBsectionnotes% {\catcode`\s=12 \doprocessCWEBsectionnotes} \def\doprocessCWEBsectionnotes#1.% {\ifCWEBnotes \def\next##1\ET##2##3.% {\processCWEBsectionnumbers[##1]% \if##2s% {, and~\goto{##3}[web:##3]}% \else { and~\goto{##2##3}[web:##2##3]}% \fi}% \next#1.% \else \goto{#1}[web:#1]% \fi \afterCWEBnote % inside group! \egroup} \let\afterCWEBnote=\relax \defCWEBmacro\note#1% {\bgroup \Y\noindent \def\afterCWEBnote{\par}% \hangindent2em %\baselineskip10pt \eightrm#1~\processCWEBsectionnotes} \def\oldCWEBmacroX#1:#2\X% original {\ifmmode \gdef\XX{\null$\null}% \else \gdef\XX{}% \fi % section name \XX$\langle\,${#2\eightrm\kern.5em#1}$\,\rangle$\XX} \defCWEBmacro\ATH% {\oldCWEBmacroX\kern-.5em:Preprocessor definitions\X} \def\newCWEBmacroX#1:#2\X% original {\ifmmode \gdef\XX{\null$\null}% \else \gdef\XX{}% \fi % section name \XX$\langle\,$% {#2\eightrm\kern.5em\processCWEBsectionnumbers[{#1}]}% $\,\rangle$\XX} \defCWEBmacro\X#1:#2\X% {\newCWEBmacroX#1:#2\X} \definemarking[CWEBfilename] \definemarking[CWEBsectiontitle] \definemarking[CWEBsectionnumber] \definemarking[CWEBsectiondepth] \defCWEBmacro\M#1% {\MN{#1}% \ifon \vfil \penalty-100 \vfilneg % beginning of section \theCWEBvskip \startsection \pagereference[web:#1]% \expanded{\marking[CWEBsectionnumber]{\secno}}% \expanded{\marking[CWEBsectiondepth]{\the\gdepth}}% \ignorespaces} \defCWEBmacro\N#1#2#3.% {\gdepth=#1% \MN{#2}% beginning of starred section \ifon \ifnum#1<\secpagedepth \vfil \eject % force page break if depth is small \else \vfil \penalty-100 \vfilneg \theCWEBvskip \fi \fi \message{*\secno}% progress report \makesectionformat % context \defconvertedargument\ascii{#3}% \edef\next% {\write\CWEBcont % write to contents file {\string\ZZ{\ascii}{#1}{\secno}% {\sectionformat::\noexpand\userfolio}{\noexpand\realfolio}}}% \next % \ZZ{title}{depth}{sec}{page} \ifon \startsection \pagereference[web:#2]% \marking[CWEBsectiontitle] {#3}% \expanded{\marking[CWEBsectionnumber]{\secno}}% \expanded{\marking[CWEBsectiondepth]{\the\gdepth}}% {\bf#3.\quad}% \ignorespaces} \defCWEBmacro\MN#1% {\par % common code for \M, \N {\xdef\secstar{#1}% \let\*=\empty \xdef\secno{#1}}% remove \* from section name \ifx\secno\secstar \onmaybe \else \ontrue \fi} \newif\iflinktoCWEBfile \def\setCWEBlinkfile#1% {\linktoCWEBfiletrue \def\otherCWEBfile{#1}} \unprotect \def\gotoCWEBsection#1[#2]% {\iflinktoCWEBfile \bgroup \setupinteraction[\c!color=,\c!style=]% \let\savedreferenceprefix=\referenceprefix \localcolortrue \goto{#1}[\otherCWEBfile::\savedreferenceprefix web:#2]% \egroup \else #1% \fi} \protect \defCWEBmacro\startsection% {\rightskip=0pt % get out of C mode (cf. \B) \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 \noindent \bgroup \let\*=\lapstar \gotoCWEBsection{\bf\secstar.\quad}[\secno]% \egroup} \def\ignoreCWEBinput% {\let\normalinput=\input \def\input ##1 % {\let\input=\normalinput}} \def\loadCWEBmacros#1% {\let\oldN=\N \def\N{\bgroup\setbox0=\vbox\bgroup\endinput}% \ignoreCWEBinput \ReadFile{#1.tex}% \egroup\egroup \let\N=\oldN} \def\resetCWEBcontext% {\catcode`\|=12 % used in context discretionaries \everypar{} % used for context indentation and floats \parskip=0pt % no stretch between cweb paragraphs \parindent=1em} % is related to cweb backspace etc \newwrite\CWEBcont \def\processCWEBsource #1 % {\bgroup \resetCWEBcontext \activateCWEB \ignoreCWEBinput \immediate\openout\CWEBcont=#1.toc \write\CWEBcont{\noexpand\unprotect} \message{Source:} \marking[CWEBfilename]{#1} \ReadFile{#1.tex}\relax \write\CWEBcont{\noexpand\protect} \closeout\CWEBcont \par \egroup} \def\resetCWEBindexentry% {\xdef\currentCWEBindexentry{}} \def\showCWEBindexentry#1% can be redefined {\theCWEBvskip \vskip3\lineheight \goodbreak \vskip-3\lineheight {\pagereference[web:#1]\bf#1}% \theCWEBvskip} \def\checkCWEBindexentry#1% {\bgroup \def\\##1{##1}% a dummy that also removes the {} \def\|##1{##1}% another dummy \def\.##1{*##1}% and another (the typewriter one) \def\&##1{##1}% and a last one \def\9##1{##1}% hold this one \catcode`*=11 \expandafter\def\expandafter\entry\expandafter{#1}% \defconvertedcommand\ascii\entry \expanded{\FINDFIRSTCHARACTER{\ascii}}% \doifnot{\currentCWEBindexentry}{\firstcharacter} {\doifnot{\firstcharacter}{*} % signal for \firstbunch {\global\let\currentCWEBindexentry=\firstcharacter \showCWEBindexentry{\currentCWEBindexentry}}}% \egroup} \def\theCWEBbeforeindex {\startcolumns} \def\theCWEBafterindex {\stopcolumns} \def\processCWEBindex #1 % {\bgroup \resetCWEBcontext \activateCWEB \resetCWEBindexentry \def\I##1, % {\par \checkCWEBindexentry{##1}% \hangindent2em \noindent##1:\kern1em% \def\next####1.% {\processCWEBsectionnumbers[{####1}]}% \next}% \def\[##1]% {$\underline{##1}$}% \let\*=\lapstar \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines % \parskip 0pt plus .5pt \rightskip0pt plus 2.5em \tolerance 10000 \hyphenpenalty 10000 \parindent0pt \message{Index:} \marking[CWEBfilename] {#1} \marking[CWEBsectiontitle] {index} \marking[CWEBsectionnumber]{} \marking[CWEBsectiondepth]{} \loadCWEBmacros{#1} \theCWEBbeforeindex \ReadFile{#1.idx}\relax \theCWEBafterindex \par \egroup} \def\processCWEBsections #1 % {\bgroup \resetCWEBcontext \activateCWEB \loadCWEBmacros{#1} \parfillskip = 0pt plus 1fil \parindent = 0pt \let\topsecno=\nullsec \def\note##1% {\quad \bgroup \eightrm ##1~\processCWEBsectionnotes} \def\Q {\CWEBnotesfalse \note{Cited in section}} % crossref for mention of a section \def\Qs{\CWEBnotestrue \note{Cited in sections}} % crossref for mentions of a section \def\U {\CWEBnotesfalse \note{Used in section}} % crossref for use of a section \def\Us{\CWEBnotestrue \note{Used in sections}} % crossref for uses of a section \def\I {\par\hangindent 2em}% \let\*=* \message{Section names:} \marking[CWEBfilename] {#1} \marking[CWEBsectiontitle] {sections} \marking[CWEBsectionnumber]{} \marking[CWEBsectiondepth]{} \loadCWEBmacros{#1} \ReadFile{#1.scn}\relax \par \botofcontents \par \egroup} \def\processCWEBcontents #1 % {\bgroup \resetCWEBcontext \activateCWEB \loadCWEBmacros{#1} \rightskip = 0pt \hyphenpenalty = 50 \tolerance = 200 \parindent = 0pt \line{\hfil Section\hbox to3em{\hss Page}} \let\ZZ=\contentsline \message{Table of contents:} \marking[CWEBfilename] {#1} \marking[CWEBsectiontitle] {table of contents} \marking[CWEBsectionnumber]{} \marking[CWEBsectiondepth]{} \loadCWEBmacros{#1} \ReadFile{#1.toc}\relax \par \egroup} \defCWEBmacro\contentsline#1#2#3#4#5% {\ifnum#2=0 \smallbreak \fi \line{\consetup{#2}#1 \rm \leaders\hbox to .5em{.\hfil}\hfil\ {\localcolortrue\goto{#3}[web:#3]}% below: \gotorealpage ? should be changed \hbox to3em{\localcolortrue\hss\gotorealpage{}{}{#5}{\translatednumber[#4]\presetgoto}}}} %D A last hack, needed because a file can overload of the %D above. (Some day: a check like \type{\ifx#1\CWEBdefined}.) \def\outer#1#2% {\ifx#2\undefined \expandafter#1\expandafter#2% \else \expandafter#1\expandafter\ThrowAway \fi} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-env.lua0000644000175000017500000002107212130411274024070 0ustar norbertnorbertif not modules then modules = { } end modules ['data-env'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } local lower, gsub = string.lower, string.gsub local resolvers = resolvers local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local suffixonly = file.suffixonly local formats = allocate() local suffixes = allocate() local dangerous = allocate() local suffixmap = allocate() resolvers.formats = formats resolvers.suffixes = suffixes resolvers.dangerous = dangerous resolvers.suffixmap = suffixmap local luasuffixes = utilities.lua.suffixes local relations = allocate { -- todo: handlers also here core = { ofm = { -- will become obsolete names = { "ofm", "omega font metric", "omega font metrics" }, variable = 'OFMFONTS', suffixes = { 'ofm', 'tfm' }, }, ovf = { -- will become obsolete names = { "ovf", "omega virtual font", "omega virtual fonts" }, variable = 'OVFFONTS', suffixes = { 'ovf', 'vf' }, }, tfm = { names = { "tfm", "tex font metric", "tex font metrics" }, variable = 'TFMFONTS', suffixes = { 'tfm' }, }, vf = { names = { "vf", "virtual font", "virtual fonts" }, variable = 'VFFONTS', suffixes = { 'vf' }, }, otf = { names = { "otf", "opentype", "opentype font", "opentype fonts"}, variable = 'OPENTYPEFONTS', suffixes = { 'otf' }, }, ttf = { names = { "ttf", "truetype", "truetype font", "truetype fonts", "truetype collection", "truetype collections", "truetype dictionary", "truetype dictionaries" }, variable = 'TTFONTS', suffixes = { 'ttf', 'ttc', 'dfont' }, }, afm = { names = { "afm", "adobe font metric", "adobe font metrics" }, variable = "AFMFONTS", suffixes = { "afm" }, }, pfb = { names = { "pfb", "type1", "type 1", "type1 font", "type 1 font", "type1 fonts", "type 1 fonts" }, variable = 'T1FONTS', suffixes = { 'pfb', 'pfa' }, }, fea = { names = { "fea", "font feature", "font features", "font feature file", "font feature files" }, variable = 'FONTFEATURES', suffixes = { 'fea' }, }, cid = { names = { "cid", "cid map", "cid maps", "cid file", "cid files" }, variable = 'FONTCIDMAPS', suffixes = { 'cid', 'cidmap' }, }, fmt = { names = { "fmt", "format", "tex format" }, variable = 'TEXFORMATS', suffixes = { 'fmt' }, }, mem = { -- will become obsolete names = { 'mem', "metapost format" }, variable = 'MPMEMS', suffixes = { 'mem' }, }, mp = { names = { "mp" }, variable = 'MPINPUTS', suffixes = { 'mp', 'mpvi', 'mpiv', 'mpii' }, }, tex = { names = { "tex" }, variable = 'TEXINPUTS', suffixes = { 'tex', "mkvi", "mkiv", "mkii" }, }, icc = { names = { "icc", "icc profile", "icc profiles" }, variable = 'ICCPROFILES', suffixes = { 'icc' }, }, texmfscripts = { names = { "texmfscript", "texmfscripts", "script", "scripts" }, variable = 'TEXMFSCRIPTS', suffixes = { 'rb', 'pl', 'py' }, }, lua = { names = { "lua" }, variable = 'LUAINPUTS', suffixes = { luasuffixes.lua, luasuffixes.luc, luasuffixes.tma, luasuffixes.tmc }, }, lib = { names = { "lib" }, variable = 'CLUAINPUTS', suffixes = os.libsuffix and { os.libsuffix } or { 'dll', 'so' }, }, bib = { names = { 'bib' }, suffixes = { 'bib' }, }, bst = { names = { 'bst' }, suffixes = { 'bst' }, }, fontconfig = { names = { 'fontconfig', 'fontconfig file', 'fontconfig files' }, variable = 'FONTCONFIG_PATH', }, }, obsolete = { enc = { names = { "enc", "enc files", "enc file", "encoding files", "encoding file" }, variable = 'ENCFONTS', suffixes = { 'enc' }, }, map = { names = { "map", "map files", "map file" }, variable = 'TEXFONTMAPS', suffixes = { 'map' }, }, lig = { names = { "lig files", "lig file", "ligature file", "ligature files" }, variable = 'LIGFONTS', suffixes = { 'lig' }, }, opl = { names = { "opl" }, variable = 'OPLFONTS', suffixes = { 'opl' }, }, ovp = { names = { "ovp" }, variable = 'OVPFONTS', suffixes = { 'ovp' }, }, }, kpse = { -- subset base = { names = { 'base', "metafont format" }, variable = 'MFBASES', suffixes = { 'base', 'bas' }, }, cmap = { names = { 'cmap', 'cmap files', 'cmap file' }, variable = 'CMAPFONTS', suffixes = { 'cmap' }, }, cnf = { names = { 'cnf' }, suffixes = { 'cnf' }, }, web = { names = { 'web' }, suffixes = { 'web', 'ch' } }, cweb = { names = { 'cweb' }, suffixes = { 'w', 'web', 'ch' }, }, gf = { names = { 'gf' }, suffixes = { 'gf' }, }, mf = { names = { 'mf' }, variable = 'MFINPUTS', suffixes = { 'mf' }, }, mft = { names = { 'mft' }, suffixes = { 'mft' }, }, pk = { names = { 'pk' }, suffixes = { 'pk' }, }, }, } resolvers.relations = relations -- formats: maps a format onto a variable function resolvers.updaterelations() for category, categories in next, relations do for name, relation in next, categories do local rn = relation.names local rv = relation.variable local rs = relation.suffixes if rn and rv then for i=1,#rn do local rni = lower(gsub(rn[i]," ","")) formats[rni] = rv if rs then suffixes[rni] = rs for i=1,#rs do local rsi = rs[i] suffixmap[rsi] = rni end end end end if rs then end end end end resolvers.updaterelations() -- push this in the metatable -> newindex local function simplified(t,k) return k and rawget(t,lower(gsub(k," ",""))) or nil end setmetatableindex(formats, simplified) setmetatableindex(suffixes, simplified) setmetatableindex(suffixmap, simplified) -- A few accessors, mostly for command line tool. function resolvers.suffixofformat(str) local s = suffixes[str] return s and s[1] or "" end function resolvers.suffixofformat(str) return suffixes[str] or { } end for name, format in next, formats do dangerous[name] = true -- still needed ? end -- because vf searching is somewhat dangerous, we want to prevent -- too liberal searching esp because we do a lookup on the current -- path anyway; only tex (or any) is safe dangerous.tex = nil --~ print(table.serialize(dangerous)) -- more helpers function resolvers.formatofvariable(str) return formats[str] or '' end function resolvers.formatofsuffix(str) -- of file return suffixmap[suffixonly(str)] or 'tex' -- so many map onto tex (like mkiv, cld etc) end function resolvers.variableofformat(str) return formats[str] or '' end function resolvers.variableofformatorsuffix(str) local v = formats[str] if v then return v end v = suffixmap[suffixonly(str)] if v then return formats[v] end return '' end context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-pdh.lua0000644000175000017500000005015511754241457024113 0ustar norbertnorbertif not modules then modules = { } end modules ['meta-pdf'] = { version = 1.001, comment = "companion to meta-pdf.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } if true then return -- or os.exit() end -- This file contains the history of the converter. We keep it around as it -- relates to the development of luatex. -- This is the third version. Version 1 converted to Lua code, -- version 2 gsubbed the file into TeX code, and version 3 uses -- the new lpeg functionality and streams the result into TeX. -- We will move old stuff to edu. --~ old lpeg 0.4 lpeg 0.5 --~ 100 times test graphic 2.45 (T:1.07) 0.72 (T:0.24) 0.580 (0.560 no table) -- 0.54 optimized for one space (T:0.19) --~ 100 times big graphic 10.44 4.30/3.35 nogb 2.914 (2.050 no table) -- 1.99 optimized for one space (T:0.85) --~ 500 times test graphic T:1.29 T:1.16 (T:1.10 no table) -- T:1.10 -- only needed for mp output on disk local concat, format, find, gsub, gmatch = table.concat, string.format, string.find, string.gsub, string.gmatch local tostring, tonumber, select = tostring, tonumber, select local lpegmatch = lpeg.match local metapost = metapost metapost.mptopdf = metapost.mptopdf or { } local mptopdf = metapost.mptopdf mptopdf.parsers = { } mptopdf.parser = 'none' mptopdf.nofconverted = 0 function mptopdf.reset() mptopdf.data = "" mptopdf.path = { } mptopdf.stack = { } mptopdf.texts = { } mptopdf.version = 0 mptopdf.shortcuts = false mptopdf.resetpath() end function mptopdf.resetpath() mptopdf.stack.close = false mptopdf.stack.path = { } mptopdf.stack.concat = nil mptopdf.stack.special = false end mptopdf.reset() function mptopdf.parsers.none() -- no parser set end function mptopdf.parse() mptopdf.parsers[mptopdf.parser]() end -- old code mptopdf.steps = { } mptopdf.descapes = { ['('] = "\\\\char40 ", [')'] = "\\\\char41 ", ['"'] = "\\\\char92 " } function mptopdf.descape(str) str = gsub(str,"\\(%d%d%d)",function(n) return "\\char" .. tonumber(n,8) .. " " end) return gsub(str,"\\([%(%)\\])",mptopdf.descapes) end function mptopdf.steps.descape(str) str = gsub(str,"\\(%d%d%d)",function(n) return "\\\\char" .. tonumber(n,8) .. " " end) return gsub(str,"\\([%(%)\\])",mptopdf.descapes) end function mptopdf.steps.strip() -- .3 per expr mptopdf.data = gsub(mptopdf.data,"^(.-)%%+Page:.-%c+(.*)%s+%a+%s+%%+EOF.*$", function(preamble, graphic) local bbox = "0 0 0 0" for b in gmatch(preamble,"%%%%%a+oundingBox: +(.-)%c+") do bbox = b end local name, version = gmatch(preamble,"%%%%Creator: +(.-) +(.-) ") mptopdf.version = tostring(version or "0") if find(preamble,"/hlw{0 dtransform") then mptopdf.shortcuts = true end -- the boundingbox specification needs to come before data, well, not really return bbox .. " boundingbox\n" .. "\nbegindata\n" .. graphic .. "\nenddata\n" end, 1) mptopdf.data = gsub(mptopdf.data,"%%%%MetaPostSpecials: +(.-)%c+", "%1 specials\n", 1) mptopdf.data = gsub(mptopdf.data,"%%%%MetaPostSpecial: +(.-)%c+", "%1 special\n") mptopdf.data = gsub(mptopdf.data,"%%.-%c+", "") end function mptopdf.steps.cleanup() if not mptopdf.shortcuts then mptopdf.data = gsub(mptopdf.data,"gsave%s+fill%s+grestore%s+stroke", "both") mptopdf.data = gsub(mptopdf.data,"([%d%.]+)%s+([%d%.]+)%s+dtransform%s+exch%s+truncate%s+exch%s+idtransform%s+pop%s+setlinewidth", function(wx,wy) if tonumber(wx) > 0 then return wx .. " setlinewidth" else return wy .. " setlinewidth" end end) mptopdf.data = gsub(mptopdf.data,"([%d%.]+)%s+([%d%.]+)%s+dtransform%s+truncate%s+idtransform%s+setlinewidth%s+pop", function(wx,wy) if tonumber(wx) > 0 then return wx .. " setlinewidth" else return wy .. " setlinewidth" end end) end end function mptopdf.steps.convert() mptopdf.data = gsub(mptopdf.data,"%c%((.-)%) (.-) (.-) fshow", function(str,font,scale) mptopdf.texts[mptopdf.texts+1] = {mptopdf.steps.descape(str), font, scale} return "\n" .. #mptopdf.texts .. " textext" end) mptopdf.data = gsub(mptopdf.data,"%[%s*(.-)%s*%]", function(str) return gsub(str,"%s+"," ") end) local t mptopdf.data = gsub(mptopdf.data,"%s*([^%a]-)%s*(%a+)", function(args,cmd) if cmd == "textext" then t = mptopdf.texts[tonumber(args)] return "metapost.mps.textext(" .. "\"" .. t[2] .. "\"," .. t[3] .. ",\"" .. t[1] .. "\")\n" else return "metapost.mps." .. cmd .. "(" .. gsub(args," +",",") .. ")\n" end end) end function mptopdf.steps.process() assert(loadstring(mptopdf.data))() -- () runs the loaded chunk end function mptopdf.parsers.gsub() mptopdf.steps.strip() mptopdf.steps.cleanup() mptopdf.steps.convert() mptopdf.steps.process() end -- end of old code -- from lua to tex function mptopdf.pdfcode(str) context.pdfliteral(str) -- \\MPScode end function mptopdf.texcode(str) context(str) end -- auxiliary functions function mptopdf.flushconcat() if mptopdf.stack.concat then mptopdf.pdfcode(concat(mptopdf.stack.concat," ") .. " cm") mptopdf.stack.concat = nil end end function mptopdf.flushpath(cmd) -- faster: no local function and loop if #mptopdf.stack.path > 0 then local path = { } if mptopdf.stack.concat then local sx, sy = mptopdf.stack.concat[1], mptopdf.stack.concat[4] local rx, ry = mptopdf.stack.concat[2], mptopdf.stack.concat[3] local tx, ty = mptopdf.stack.concat[5], mptopdf.stack.concat[6] local d = (sx*sy) - (rx*ry) local function mpconcat(px, py) return (sy*(px-tx)-ry*(py-ty))/d, (sx*(py-ty)-rx*(px-tx))/d end local stackpath = mptopdf.stack.path for k=1,#stackpath do local v = stackpath[k] v[1],v[2] = mpconcat(v[1],v[2]) if #v == 7 then v[3],v[4] = mpconcat(v[3],v[4]) v[5],v[6] = mpconcat(v[5],v[6]) end path[#path+1] = concat(v," ") end else local stackpath = mptopdf.stack.path for k=1,#stackpath do path[#path+1] = concat(stackpath[k]," ") end end mptopdf.flushconcat() mptopdf.texcode("\\MPSpath{" .. concat(path," ") .. "}") if mptopdf.stack.close then mptopdf.texcode("\\MPScode{h " .. cmd .. "}") else mptopdf.texcode("\\MPScode{" .. cmd .."}") end end mptopdf.resetpath() end function mptopdf.loaded(name) local ok, n mptopdf.reset() ok, mptopdf.data, n = resolvers.loadbinfile(name, 'tex') -- we need a binary load ! return ok end if not mptopdf.parse then function mptopdf.parse() end -- forward declaration end function mptopdf.convertmpstopdf(name) if mptopdf.loaded(name) then mptopdf.nofconverted = mptopdf.nofconverted + 1 statistics.starttiming(mptopdf) mptopdf.parse() mptopdf.reset() statistics.stoptiming(mptopdf) else context("file " .. name .. " not found") end end -- mp interface metapost.mps = metapost.mps or { } local mps = metapost.mps or { } function mps.creator(a, b, c) mptopdf.version = tonumber(b) end function mps.creationdate(a) mptopdf.date= a end function mps.newpath() mptopdf.stack.path = { } end function mps.boundingbox(llx, lly, urx, ury) mptopdf.texcode("\\MPSboundingbox{" .. llx .. "}{" .. lly .. "}{" .. urx .. "}{" .. ury .. "}") end function mps.moveto(x,y) mptopdf.stack.path[#mptopdf.stack.path+1] = {x,y,"m"} end function mps.curveto(ax, ay, bx, by, cx, cy) mptopdf.stack.path[#mptopdf.stack.path+1] = {ax,ay,bx,by,cx,cy,"c"} end function mps.lineto(x,y) mptopdf.stack.path[#mptopdf.stack.path+1] = {x,y,"l"} end function mps.rlineto(x,y) local dx, dy = 0, 0 if #mptopdf.stack.path > 0 then dx, dy = mptopdf.stack.path[#mptopdf.stack.path][1], mptopdf.stack.path[#mptopdf.stack.path][2] end mptopdf.stack.path[#mptopdf.stack.path+1] = {dx,dy,"l"} end function mps.translate(tx,ty) mptopdf.pdfcode("1 0 0 0 1 " .. tx .. " " .. ty .. " cm") end function mps.scale(sx,sy) mptopdf.stack.concat = {sx,0,0,sy,0,0} end function mps.concat(sx, rx, ry, sy, tx, ty) mptopdf.stack.concat = {sx,rx,ry,sy,tx,ty} end function mps.setlinejoin(d) mptopdf.pdfcode(d .. " j") end function mps.setlinecap(d) mptopdf.pdfcode(d .. " J") end function mps.setmiterlimit(d) mptopdf.pdfcode(d .. " M") end function mps.gsave() mptopdf.pdfcode("q") end function mps.grestore() mptopdf.pdfcode("Q") end function mps.setdash(...) local n = select("#",...) mptopdf.pdfcode("[" .. concat({...}," ",1,n-1) .. "] " .. select(n,...) .. " d") end function mps.resetdash() mptopdf.pdfcode("[ ] 0 d") end function mps.setlinewidth(d) mptopdf.pdfcode(d .. " w") end function mps.closepath() mptopdf.stack.close = true end function mps.fill() mptopdf.flushpath('f') end function mps.stroke() mptopdf.flushpath('S') end function mps.both() mptopdf.flushpath('B') end function mps.clip() mptopdf.flushpath('W n') end function mps.textext(font, scale, str) -- old parser local dx, dy = 0, 0 if #mptopdf.stack.path > 0 then dx, dy = mptopdf.stack.path[1][1], mptopdf.stack.path[1][2] end mptopdf.flushconcat() mptopdf.texcode("\\MPStextext{"..font.."}{"..scale.."}{"..str.."}{"..dx.."}{"..dy.."}") mptopdf.resetpath() end --~ function mps.handletext(font,scale.str,dx,dy) --~ local one, two = string.match(str, "^(%d+)::::(%d+)") --~ if one and two then --~ mptopdf.texcode("\\MPTOPDFtextext{"..font.."}{"..scale.."}{"..one.."}{"..two.."}{"..dx.."}{"..dy.."}") --~ else --~ mptopdf.texcode("\\MPTOPDFtexcode{"..font.."}{"..scale.."}{"..str.."}{"..dx.."}{"..dy.."}") --~ end --~ end function mps.setrgbcolor(r,g,b) -- extra check r, g = tonumber(r), tonumber(g) -- needed when we use lpeg if r == 0.0123 and g < 0.1 then mptopdf.texcode("\\MPSspecial{" .. g*10000 .. "}{" .. b*10000 .. "}") elseif r == 0.123 and g < 0.1 then mptopdf.texcode("\\MPSspecial{" .. g* 1000 .. "}{" .. b* 1000 .. "}") else mptopdf.texcode("\\MPSrgb{" .. r .. "}{" .. g .. "}{" .. b .. "}") end end function mps.setcmykcolor(c,m,y,k) mptopdf.texcode("\\MPScmyk{" .. c .. "}{" .. m .. "}{" .. y .. "}{" .. k .. "}") end function mps.setgray(s) mptopdf.texcode("\\MPSgray{" .. s .. "}") end function mps.specials(version,signal,factor) -- 2.0 123 1000 end function mps.special(...) -- 7 1 0.5 1 0 0 1 3 local n = select("#",...) mptopdf.texcode("\\MPSbegin\\MPSset{" .. concat({...},"}\\MPSset{",2,n) .. "}\\MPSend") end function mps.begindata() end function mps.enddata() end function mps.showpage() end mps.n = mps.newpath -- n mps.p = mps.closepath -- h mps.l = mps.lineto -- l mps.r = mps.rlineto -- r mps.m = mps.moveto -- m mps.c = mps.curveto -- c mps.hlw = mps.setlinewidth mps.vlw = mps.setlinewidth mps.C = mps.setcmykcolor -- k mps.G = mps.setgray -- g mps.R = mps.setrgbcolor -- rg mps.lj = mps.setlinejoin -- j mps.ml = mps.setmiterlimit -- M mps.lc = mps.setlinecap -- J mps.sd = mps.setdash -- d mps.rd = mps.resetdash mps.S = mps.stroke -- S mps.F = mps.fill -- f mps.B = mps.both -- B mps.W = mps.clip -- W mps.q = mps.gsave -- q mps.Q = mps.grestore -- Q mps.s = mps.scale -- (not in pdf) mps.t = mps.concat -- (not the same as pdf anyway) mps.P = mps.showpage -- experimental function mps.attribute(id,value) mptopdf.texcode("\\attribute " .. id .. "=" .. value .. " ") -- mptopdf.texcode("\\dompattribute{" .. id .. "}{" .. value .. "}") end -- lpeg parser -- The lpeg based parser is rather optimized for the kind of output -- that MetaPost produces. It's my first real lpeg code, which may -- show. Because the parser binds to functions, we define it last. do -- assumes \let\c\char local byte = string.byte local digit = lpeg.R("09") local spec = digit^2 * lpeg.P("::::") * digit^2 local text = lpeg.Cc("{") * ( lpeg.P("\\") * ( (digit * digit * digit) / function(n) return "c" .. tonumber(n,8) end) + lpeg.P(" ") / function(n) return "\\c32" end + -- never in new mp lpeg.P(1) / function(n) return "\\c" .. byte(n) end ) * lpeg.Cc("}") local package = lpeg.Cs(spec + text^0) function mps.fshow(str,font,scale) -- lpeg parser mps.textext(font,scale,lpegmatch(package,str)) end end do local eol = lpeg.S('\r\n')^1 local sp = lpeg.P(' ')^1 local space = lpeg.S(' \r\n')^1 local number = lpeg.S('0123456789.-+')^1 local nonspace = lpeg.P(1-lpeg.S(' \r\n'))^1 local cnumber = lpeg.C(number) local cstring = lpeg.C(nonspace) local specials = (lpeg.P("%%MetaPostSpecials:") * sp * (cstring * sp^0)^0 * eol) / mps.specials local special = (lpeg.P("%%MetaPostSpecial:") * sp * (cstring * sp^0)^0 * eol) / mps.special local boundingbox = (lpeg.P("%%BoundingBox:") * sp * (cnumber * sp^0)^4 * eol) / mps.boundingbox local highresboundingbox = (lpeg.P("%%HiResBoundingBox:") * sp * (cnumber * sp^0)^4 * eol) / mps.boundingbox local setup = lpeg.P("%%BeginSetup") * (1 - lpeg.P("%%EndSetup") )^1 local prolog = lpeg.P("%%BeginProlog") * (1 - lpeg.P("%%EndProlog"))^1 local comment = lpeg.P('%')^1 * (1 - eol)^1 local curveto = ((cnumber * sp)^6 * lpeg.P("curveto") ) / mps.curveto local lineto = ((cnumber * sp)^2 * lpeg.P("lineto") ) / mps.lineto local rlineto = ((cnumber * sp)^2 * lpeg.P("rlineto") ) / mps.rlineto local moveto = ((cnumber * sp)^2 * lpeg.P("moveto") ) / mps.moveto local setrgbcolor = ((cnumber * sp)^3 * lpeg.P("setrgbcolor") ) / mps.setrgbcolor local setcmykcolor = ((cnumber * sp)^4 * lpeg.P("setcmykcolor") ) / mps.setcmykcolor local setgray = ((cnumber * sp)^1 * lpeg.P("setgray") ) / mps.setgray local newpath = ( lpeg.P("newpath") ) / mps.newpath local closepath = ( lpeg.P("closepath") ) / mps.closepath local fill = ( lpeg.P("fill") ) / mps.fill local stroke = ( lpeg.P("stroke") ) / mps.stroke local clip = ( lpeg.P("clip") ) / mps.clip local both = ( lpeg.P("gsave fill grestore")) / mps.both local showpage = ( lpeg.P("showpage") ) local setlinejoin = ((cnumber * sp)^1 * lpeg.P("setlinejoin") ) / mps.setlinejoin local setlinecap = ((cnumber * sp)^1 * lpeg.P("setlinecap") ) / mps.setlinecap local setmiterlimit = ((cnumber * sp)^1 * lpeg.P("setmiterlimit") ) / mps.setmiterlimit local gsave = ( lpeg.P("gsave") ) / mps.gsave local grestore = ( lpeg.P("grestore") ) / mps.grestore local setdash = (lpeg.P("[") * (cnumber * sp^0)^0 * lpeg.P("]") * sp * cnumber * sp * lpeg.P("setdash")) / mps.setdash local concat = (lpeg.P("[") * (cnumber * sp^0)^6 * lpeg.P("]") * sp * lpeg.P("concat") ) / mps.concat local scale = ( (cnumber * sp^0)^6 * sp * lpeg.P("concat") ) / mps.concat local fshow = (lpeg.P("(") * lpeg.C((1-lpeg.P(")"))^1) * lpeg.P(")") * space * cstring * space * cnumber * space * lpeg.P("fshow")) / mps.fshow local fshow = (lpeg.P("(") * lpeg.Cs( ( lpeg.P("\\(")/"\\050" + lpeg.P("\\)")/"\\051" + (1-lpeg.P(")")) )^1 ) * lpeg.P(")") * space * cstring * space * cnumber * space * lpeg.P("fshow")) / mps.fshow local setlinewidth_x = (lpeg.P("0") * sp * cnumber * sp * lpeg.P("dtransform truncate idtransform setlinewidth pop")) / mps.setlinewidth local setlinewidth_y = (cnumber * sp * lpeg.P("0 dtransform exch truncate exch idtransform pop setlinewidth") ) / mps.setlinewidth local c = ((cnumber * sp)^6 * lpeg.P("c") ) / mps.curveto -- ^6 very inefficient, ^1 ok too local l = ((cnumber * sp)^2 * lpeg.P("l") ) / mps.lineto local r = ((cnumber * sp)^2 * lpeg.P("r") ) / mps.rlineto local m = ((cnumber * sp)^2 * lpeg.P("m") ) / mps.moveto local vlw = ((cnumber * sp)^1 * lpeg.P("vlw")) / mps.setlinewidth local hlw = ((cnumber * sp)^1 * lpeg.P("hlw")) / mps.setlinewidth local R = ((cnumber * sp)^3 * lpeg.P("R") ) / mps.setrgbcolor local C = ((cnumber * sp)^4 * lpeg.P("C") ) / mps.setcmykcolor local G = ((cnumber * sp)^1 * lpeg.P("G") ) / mps.setgray local lj = ((cnumber * sp)^1 * lpeg.P("lj") ) / mps.setlinejoin local ml = ((cnumber * sp)^1 * lpeg.P("ml") ) / mps.setmiterlimit local lc = ((cnumber * sp)^1 * lpeg.P("lc") ) / mps.setlinecap local n = lpeg.P("n") / mps.newpath local p = lpeg.P("p") / mps.closepath local S = lpeg.P("S") / mps.stroke local F = lpeg.P("F") / mps.fill local B = lpeg.P("B") / mps.both local W = lpeg.P("W") / mps.clip local P = lpeg.P("P") / mps.showpage local q = lpeg.P("q") / mps.gsave local Q = lpeg.P("Q") / mps.grestore local sd = (lpeg.P("[") * (cnumber * sp^0)^0 * lpeg.P("]") * sp * cnumber * sp * lpeg.P("sd")) / mps.setdash local rd = ( lpeg.P("rd")) / mps.resetdash local s = ( (cnumber * sp^0)^2 * lpeg.P("s") ) / mps.scale local t = (lpeg.P("[") * (cnumber * sp^0)^6 * lpeg.P("]") * sp * lpeg.P("t") ) / mps.concat -- experimental local attribute = ((cnumber * sp)^2 * lpeg.P("attribute")) / mps.attribute local A = ((cnumber * sp)^2 * lpeg.P("A")) / mps.attribute local preamble = ( prolog + setup + boundingbox + highresboundingbox + specials + special + comment ) local procset = ( lj + ml + lc + c + l + m + n + p + r + A + R + C + G + S + F + B + W + vlw + hlw + Q + q + sd + rd + t + s + fshow + P ) local verbose = ( curveto + lineto + moveto + newpath + closepath + rlineto + setrgbcolor + setcmykcolor + setgray + attribute + setlinejoin + setmiterlimit + setlinecap + stroke + fill + clip + both + setlinewidth_x + setlinewidth_y + gsave + grestore + concat + scale + fshow + setdash + -- no resetdash showpage ) -- order matters in terms of speed / we could check for procset first local captures_old = ( space + verbose + preamble )^0 local captures_new = ( space + procset + preamble + verbose )^0 function mptopdf.parsers.lpeg() if find(mptopdf.data,"%%%%BeginResource: procset mpost") then lpegmatch(captures_new,mptopdf.data) else lpegmatch(captures_old,mptopdf.data) end end end mptopdf.parser = 'lpeg' -- status info statistics.register("mps conversion time",function() local n = mptopdf.nofconverted if n > 0 then return format("%s seconds, %s conversions", statistics.elapsedtime(mptopdf),n) else return nil end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-cnf.lua0000644000175000017500000001322412130411274024102 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-cnf'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, next, tostring, tonumber = type, next, tostring, tonumber local format, concat, find = string.format, table.concat, string.find local allocate = utilities.storage.allocate texconfig.kpse_init = false texconfig.shell_escape = 't' luatex = luatex or { } local luatex = luatex texconfig.error_line = 79 -- 79 -- obsolete texconfig.half_error_line = 50 -- 50 -- obsolete texconfig.expand_depth = 10000 -- 10000 texconfig.hash_extra = 100000 -- 0 texconfig.nest_size = 1000 -- 50 texconfig.max_in_open = 500 -- 15 texconfig.max_print_line = 10000 -- 79 texconfig.max_strings = 500000 -- 15000 texconfig.param_size = 25000 -- 60 texconfig.save_size = 50000 -- 4000 texconfig.stack_size = 10000 -- 300 -- local function initialize() -- local t, variable = allocate(), resolvers.variable -- for name, default in next, variablenames do -- local name = variablenames[i] -- local value = variable(name) -- value = tonumber(value) -- if not value or value == "" or value == 0 then -- value = default -- end -- texconfig[name], t[name] = value, value -- end -- initialize = nil -- return t -- end -- -- luatex.variables = initialize() local stub = [[ -- checking storage = storage or { } luatex = luatex or { } -- we provide our own file handling texconfig.kpse_init = false texconfig.shell_escape = 't' -- as soon as possible luatex.starttime = os.gettimeofday() -- this will happen after the format is loaded function texconfig.init() -- development local builtin, globals = { }, { } libraries = { -- we set it here as we want libraries also 'indexed' basiclua = { "string", "table", "coroutine", "debug", "file", "io", "lpeg", "math", "os", "package", "bit32", }, basictex = { -- noad "callback", "font", "img", "lang", "lua", "node", "pdf", "status", "tex", "texconfig", "texio", "token", }, extralua = { "gzip", "zip", "zlib", "lfs", "ltn12", "mime", "socket", "md5", "profiler", "unicode", "utf", }, extratex = { "epdf", "fontloader", "kpse", "mplib", }, obsolete = { "fontforge", -- can be filled by luat-log "kpse", }, functions = { "assert", "pcall", "xpcall", "error", "collectgarbage", "dofile", "load","loadfile", "require", "module", "getmetatable", "setmetatable", "ipairs", "pairs", "rawequal", "rawget", "rawset", "next", "tonumber", "tostring", "type", "unpack", "select", "print", }, builtin = builtin, -- to be filled globals = globals, -- to be filled } for k, v in next, _G do globals[k] = tostring(v) end local function collect(t,fnc) local lib = { } for k, v in next, t do if fnc then lib[v] = _G[v] else local keys = { } local gv = _G[v] local tv = type(gv) if tv == "table" then for k, v in next, gv do keys[k] = tostring(v) -- true -- by tostring we cannot call overloades functions (security) end end lib[v] = keys builtin[v] = keys end end return lib end libraries.basiclua = collect(libraries.basiclua) libraries.basictex = collect(libraries.basictex) libraries.extralua = collect(libraries.extralua) libraries.extratex = collect(libraries.extratex) libraries.functions = collect(libraries.functions,true) libraries.obsolete = collect(libraries.obsolete) -- shortcut and helper local function init(start) local b = lua.bytecode local i = start local t = os.clock() while b[i] do b[i]() ; b[i] = nil ; i = i + 1 -- collectgarbage('step') end return i - start, os.clock() - t end -- the stored tables and modules storage.noftables , storage.toftables = init(0) storage.nofmodules, storage.tofmodules = init(%s) if modules then local loaded = package.loaded for module, _ in next, modules do loaded[module] = true end end end -- we provide a qualified path callback.register('find_format_file',function(name) texconfig.formatname = name return name end) -- done, from now on input and callbacks are internal ]] local variablenames = { "error_line", "half_error_line", "expand_depth", "hash_extra", "nest_size", "max_in_open", "max_print_line", "max_strings", "param_size", "save_size", "stack_size", } local function makestub() name = name or (environment.jobname .. ".lui") firsttable = firsttable or lua.firstbytecode local t = { "-- this file is generated, don't change it\n", "-- configuration (can be overloaded later)\n" } for _,v in next, variablenames do local tv = texconfig[v] if tv and tv ~= "" then t[#t+1] = format("texconfig.%s=%s",v,tv) end end io.savedata(name,format("%s\n\n%s",concat(t,"\n"),format(stub,firsttable))) end lua.registerfinalizer(makestub,"create stub file") context-2013.05.28.20130704/texmf-dist/tex/context/base/util-tab.lua0000644000175000017500000003425612161703335024130 0ustar norbertnorbertif not modules then modules = { } end modules ['util-tab'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } utilities = utilities or {} utilities.tables = utilities.tables or { } local tables = utilities.tables local format, gmatch, gsub = string.format, string.gmatch, string.gsub local concat, insert, remove = table.concat, table.insert, table.remove local setmetatable, getmetatable, tonumber, tostring = setmetatable, getmetatable, tonumber, tostring local type, next, rawset, tonumber, tostring, load, select = type, next, rawset, tonumber, tostring, load, select local lpegmatch, P, Cs, Cc = lpeg.match, lpeg.P, lpeg.Cs, lpeg.Cc local serialize, sortedkeys, sortedpairs = table.serialize, table.sortedkeys, table.sortedpairs local formatters = string.formatters local splitter = lpeg.tsplitat(".") function tables.definetable(target,nofirst,nolast) -- defines undefined tables local composed, shortcut, t = nil, nil, { } local snippets = lpegmatch(splitter,target) for i=1,#snippets - (nolast and 1 or 0) do local name = snippets[i] if composed then composed = shortcut .. "." .. name shortcut = shortcut .. "_" .. name t[#t+1] = formatters["local %s = %s if not %s then %s = { } %s = %s end"](shortcut,composed,shortcut,shortcut,composed,shortcut) else composed = name shortcut = name if not nofirst then t[#t+1] = formatters["%s = %s or { }"](composed,composed) end end end if nolast then composed = shortcut .. "." .. snippets[#snippets] end return concat(t,"\n"), composed end -- local t = tables.definedtable("a","b","c","d") function tables.definedtable(...) local t = _G for i=1,select("#",...) do local li = select(i,...) local tl = t[li] if not tl then tl = { } t[li] = tl end t = tl end return t end function tables.accesstable(target,root) local t = root or _G for name in gmatch(target,"([^%.]+)") do t = t[name] if not t then return end end return t end function tables.migratetable(target,v,root) local t = root or _G local names = string.split(target,".") for i=1,#names-1 do local name = names[i] t[name] = t[name] or { } t = t[name] if not t then return end end t[names[#names]] = v end function tables.removevalue(t,value) -- todo: n if value then for i=1,#t do if t[i] == value then remove(t,i) -- remove all, so no: return end end end end function tables.insertbeforevalue(t,value,extra) for i=1,#t do if t[i] == extra then remove(t,i) end end for i=1,#t do if t[i] == value then insert(t,i,extra) return end end insert(t,1,extra) end function tables.insertaftervalue(t,value,extra) for i=1,#t do if t[i] == extra then remove(t,i) end end for i=1,#t do if t[i] == value then insert(t,i+1,extra) return end end insert(t,#t+1,extra) end -- experimental local escape = Cs(Cc('"') * ((P('"')/'""' + P(1))^0) * Cc('"')) function table.tocsv(t,specification) if t and #t > 0 then local result = { } local r = { } specification = specification or { } local fields = specification.fields if type(fields) ~= "string" then fields = sortedkeys(t[1]) end local separator = specification.separator or "," if specification.preamble == true then for f=1,#fields do r[f] = lpegmatch(escape,tostring(fields[f])) end result[1] = concat(r,separator) end for i=1,#t do local ti = t[i] for f=1,#fields do local field = ti[fields[f]] if type(field) == "string" then r[f] = lpegmatch(escape,field) else r[f] = tostring(field) end end result[#result+1] = concat(r,separator) end return concat(result,"\n") else return "" end end -- local nspaces = utilities.strings.newrepeater(" ") -- local escape = Cs((P("<")/"<" + P(">")/">" + P("&")/"&" + P(1))^0) -- -- local function toxml(t,d,result,step) -- for k, v in sortedpairs(t) do -- local s = nspaces[d] -- local tk = type(k) -- local tv = type(v) -- if tv == "table" then -- if tk == "number" then -- result[#result+1] = format("%s",s,k) -- toxml(v,d+step,result,step) -- result[#result+1] = format("%s",s,k) -- else -- result[#result+1] = format("%s<%s>",s,k) -- toxml(v,d+step,result,step) -- result[#result+1] = format("%s",s,k) -- end -- elseif tv == "string" then -- if tk == "number" then -- result[#result+1] = format("%s%s",s,k,lpegmatch(escape,v),k) -- else -- result[#result+1] = format("%s<%s>%s",s,k,lpegmatch(escape,v),k) -- end -- elseif tk == "number" then -- result[#result+1] = format("%s%s",s,k,tostring(v),k) -- else -- result[#result+1] = format("%s<%s>%s",s,k,tostring(v),k) -- end -- end -- end -- -- much faster local nspaces = utilities.strings.newrepeater(" ") local function toxml(t,d,result,step) for k, v in sortedpairs(t) do local s = nspaces[d] -- inlining this is somewhat faster but gives more formatters local tk = type(k) local tv = type(v) if tv == "table" then if tk == "number" then result[#result+1] = formatters["%s"](s,k) toxml(v,d+step,result,step) result[#result+1] = formatters["%s"](s,k) else result[#result+1] = formatters["%s<%s>"](s,k) toxml(v,d+step,result,step) result[#result+1] = formatters["%s"](s,k) end elseif tv == "string" then if tk == "number" then result[#result+1] = formatters["%s%!xml!"](s,k,v,k) else result[#result+1] = formatters["%s<%s>%!xml!"](s,k,v,k) end elseif tk == "number" then result[#result+1] = formatters["%s%S"](s,k,v,k) else result[#result+1] = formatters["%s<%s>%S"](s,k,v,k) end end end -- function table.toxml(t,name,nobanner,indent,spaces) -- local noroot = name == false -- local result = (nobanner or noroot) and { } or { "" } -- local indent = rep(" ",indent or 0) -- local spaces = rep(" ",spaces or 1) -- if noroot then -- toxml( t, inndent, result, spaces) -- else -- toxml( { [name or "root"] = t }, indent, result, spaces) -- end -- return concat(result,"\n") -- end function table.toxml(t,specification) specification = specification or { } local name = specification.name local noroot = name == false local result = (specification.nobanner or noroot) and { } or { "" } local indent = specification.indent or 0 local spaces = specification.spaces or 1 if noroot then toxml( t, indent, result, spaces) else toxml( { [name or "data"] = t }, indent, result, spaces) end return concat(result,"\n") end -- also experimental -- encapsulate(table,utilities.tables) -- encapsulate(table,utilities.tables,true) -- encapsulate(table,true) function tables.encapsulate(core,capsule,protect) if type(capsule) ~= "table" then protect = true capsule = { } end for key, value in next, core do if capsule[key] then print(formatters["\ninvalid %s %a in %a"]("inheritance",key,core)) os.exit() else capsule[key] = value end end if protect then for key, value in next, core do core[key] = nil end setmetatable(core, { __index = capsule, __newindex = function(t,key,value) if capsule[key] then print(formatters["\ninvalid %s %a' in %a"]("overload",key,core)) os.exit() else rawset(t,key,value) end end } ) end end local function fastserialize(t,r,outer) -- no mixes r[#r+1] = "{" local n = #t if n > 0 then for i=1,n do local v = t[i] local tv = type(v) if tv == "string" then r[#r+1] = formatters["%q,"](v) elseif tv == "number" then r[#r+1] = formatters["%s,"](v) elseif tv == "table" then fastserialize(v,r) elseif tv == "boolean" then r[#r+1] = formatters["%S,"](v) end end else for k, v in next, t do local tv = type(v) if tv == "string" then r[#r+1] = formatters["[%q]=%q,"](k,v) elseif tv == "number" then r[#r+1] = formatters["[%q]=%s,"](k,v) elseif tv == "table" then r[#r+1] = formatters["[%q]="](k) fastserialize(v,r) elseif tv == "boolean" then r[#r+1] = formatters["[%q]=%S,"](k,v) end end end if outer then r[#r+1] = "}" else r[#r+1] = "}," end return r end -- local f_hashed_string = formatters["[%q]=%q,"] -- local f_hashed_number = formatters["[%q]=%s,"] -- local f_hashed_table = formatters["[%q]="] -- local f_hashed_true = formatters["[%q]=true,"] -- local f_hashed_false = formatters["[%q]=false,"] -- -- local f_indexed_string = formatters["%q,"] -- local f_indexed_number = formatters["%s,"] -- ----- f_indexed_true = formatters["true,"] -- ----- f_indexed_false = formatters["false,"] -- -- local function fastserialize(t,r,outer) -- no mixes -- r[#r+1] = "{" -- local n = #t -- if n > 0 then -- for i=1,n do -- local v = t[i] -- local tv = type(v) -- if tv == "string" then -- r[#r+1] = f_indexed_string(v) -- elseif tv == "number" then -- r[#r+1] = f_indexed_number(v) -- elseif tv == "table" then -- fastserialize(v,r) -- elseif tv == "boolean" then -- -- r[#r+1] = v and f_indexed_true(k) or f_indexed_false(k) -- r[#r+1] = v and "true," or "false," -- end -- end -- else -- for k, v in next, t do -- local tv = type(v) -- if tv == "string" then -- r[#r+1] = f_hashed_string(k,v) -- elseif tv == "number" then -- r[#r+1] = f_hashed_number(k,v) -- elseif tv == "table" then -- r[#r+1] = f_hashed_table(k) -- fastserialize(v,r) -- elseif tv == "boolean" then -- r[#r+1] = v and f_hashed_true(k) or f_hashed_false(k) -- end -- end -- end -- if outer then -- r[#r+1] = "}" -- else -- r[#r+1] = "}," -- end -- return r -- end function table.fastserialize(t,prefix) -- so prefix should contain the = return concat(fastserialize(t,{ prefix or "return" },true)) end function table.deserialize(str) if not str or str == "" then return end local code = load(str) if not code then return end code = code() if not code then return end return code end -- inspect(table.fastserialize { a = 1, b = { 4, { 5, 6 } }, c = { d = 7, e = 'f"g\nh' } }) function table.load(filename,loader) if filename then local t = (loader or io.loaddata)(filename) if t and t ~= "" then t = load(t) if type(t) == "function" then t = t() if type(t) == "table" then return t end end end end end function table.save(filename,t,n,...) io.savedata(filename,serialize(t,n == nil and true or n,...)) end local function slowdrop(t) local r = { } local l = { } for i=1,#t do local ti = t[i] local j = 0 for k, v in next, ti do j = j + 1 l[j] = formatters["%s=%q"](k,v) end r[i] = formatters[" {%t},\n"](l) end return formatters["return {\n%st}"](r) end local function fastdrop(t) local r = { "return {\n" } for i=1,#t do local ti = t[i] r[#r+1] = " {" for k, v in next, ti do r[#r+1] = formatters["%s=%q"](k,v) end r[#r+1] = "},\n" end r[#r+1] = "}" return concat(r) end function table.drop(t,slow) -- only { { a=2 }, {a=3} } if #t == 0 then return "return { }" elseif slow == true then return slowdrop(t) -- less memory else return fastdrop(t) -- some 15% faster end end function table.autokey(t,k) local v = { } t[k] = v return v end local selfmapper = { __index = function(t,k) t[k] = k return k end } function table.twowaymapper(t) if not t then t = { } else for i=0,#t do local ti = t[i] -- t[1] = "one" if ti then local i = tostring(i) t[i] = ti -- t["1"] = "one" t[ti] = i -- t["one"] = "1" end end t[""] = t[0] or "" end -- setmetatableindex(t,"key") setmetatable(t,selfmapper) return t end context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-pgr.mkiv0000644000175000017500000004155512130411274024265 0ustar norbertnorbert%D \module %D [ file=anch-pgr, % split off core-pos %D version=1999.08.01, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Positioning Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Grapics} %D Before we come to graphics support, we have to make sure of %D the reference point on the page. The next macros do so and %D are hooked into the page building routine. \registerctxluafile{anch-pgr}{1.001} \unprotect %D A few more low level macros take care of defining and recalling %D actions. Actions are saved globally! The lists can become quite %D long because there can be lots of parameters passed on so we %D clean up the list afterwards. \newtoks\everypositionaction \newtoks\everyinsertpositionaction \newtoks\everycleanpositionaction \installcorenamespace{positionaction} \installcorenamespace{positioncleanup} \unexpanded\def\anch_positions_set_action#1% {\expandafter\gdef\csname\??positionaction#1\endcsname} % nicely gobbles spaces \unexpanded\def\doifpositionaction#1% {\ifcsname\??positionaction#1\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifpositionactionelse#1% {\ifcsname\??positionaction#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\dopositionaction#1% {\edef\currentpositionaction{#1}% \ifcsname\??positionaction\currentpositionaction\endcsname \anch_positions_action_indeed \fi} \def\anch_positions_action_indeed {\doifpositionelse\currentpositionaction \anch_positions_action_indeed_yes \anch_positions_action_indeed_nop} \def\anch_positions_action_indeed_nop {\anch_positions_trace_action_nop} \def\anch_positions_action_indeed_yes % we need a way to figure out if we have actions {\begingroup \setbox\scratchbox\hbox {\anch_positions_trace_action_yes \the\everyinsertpositionaction \the\everypositionaction \csname\??positionaction\currentpositionaction\endcsname \anch_positions_cleanup_action}% \smashedbox\scratchbox % smashing is really needed else we get problems with too big overlays \endgroup} \unexpanded\def\anch_positions_trace_action_nop_indeed {\anch_positions_trace\clap\darkred{<\currentpositionaction>}} \unexpanded\def\anch_positions_trace_action_yes_indeed {\anch_positions_trace\clap\darkgreen{<\currentpositionaction>}} \let\anch_positions_trace_action_nop\relax \let\anch_positions_trace_action_yes\relax \appendtoks \let\anch_positions_trace_action_nop\anch_positions_trace_action_nop_indeed \let\anch_positions_trace_action_yes\anch_positions_trace_action_yes_indeed \to \t_anch_positions_tracers %D Here the complication has to do with collecting actions %D for later execution. This collection is especially handy %D when we want to move actions to a specific layer. Such %D series of actions are stored in a macro that is cleaned up %D after each invocation. \def\anch_positions_cleanup_action % not in trialtypesetting {\ifcsname\??positioncleanup\currentpositionaction\endcsname \the\everycleanpositionaction % \iflocalpositioning % % erase % \expandafter\let\csname\??positioncleanup\currentpositionaction\endcsname\empty % \else % globalize expansion cleans up \setxvalue{\??positioncleanup\currentpositionaction}{\csname\??positioncleanup\currentpositionaction\endcsname}% % \fi \fi} \def\handlepositionaction#1\with#2\on#3% ugly {\begingroup \edef\currentpositionanchor {\ifx\currentpositionoverlay\empty#3\else\currentpositionoverlay::\MPanchoridentifier\fi}% \normalexpanded{\anch_positions_set_action{\currentpositionanchor}{\noexpand\getvalue{\??positioncleanup\currentpositionanchor}}}% \let#1\relax \ifcsname\??positioncleanup\currentpositionanchor\endcsname \setxvalue{\??positioncleanup\currentpositionanchor}% {\csname\??positioncleanup\currentpositionanchor\endcsname#1#2}% \else \setxvalue{\??positioncleanup\currentpositionanchor}% {#1#2}% \fi \endgroup} %D The first version of this module implemented head and tail %D anchors. Currently we stick to just one anchor and derive %D the head and tail anchors from this one. We set these %D anchors before and after each page. \unexpanded\def\anch_positions_register_page#1% this one is flushed first ! ... can't we avoid this one {\ifpositioning\ifcase\realpageno\or \ifdim\printpaperheight=\paperheight \ifdim\printpaperwidth=\paperwidth % not needed, \else \anch_positions_register_page_indeed{#1}% \fi \else \anch_positions_register_page_indeed{#1}% \fi \fi\fi} \def\anch_positions_register_page_indeed#1% maybe like text {\ifvbox#1\setbox#1\hbox{\box#1}\fi \anch_make_page_box{#1}} \unexpanded\def\anch_positions_place_anchors {\ifpositioning \anch_positions_place_anchors_yes \else \anch_positions_place_anchors_nop \fi} \def\anch_positions_place_anchors_yes % todo : depth pagebox {\begingroup \setbox\scratchbox\emptyhbox \ht\scratchbox\textheight \dp\scratchbox\zeropoint \wd\scratchbox\makeupwidth \anch_mark_text_box\scratchbox \box\scratchbox \endgroup} \def\anch_positions_place_anchors_nop {\vskip\textheight} %D \macros %D {positionoverlay,startpositionoverlay} %D %D As long as we're dealing with graphics it makes much sense %D to use the available overlay mechanism. For this purpose, we %D define some dedicated overlay extensions. %D %D \startbuffer[sample] %D \defineoverlay [sample] [\positionoverlay{sample}] %D %D \startpositionoverlay{sample} %D \setMPpositiongraphic{A-1}{connectcenter}{from=A-1,to=A-2} %D \stoppositionoverlay %D \stopbuffer %D %D \typebuffer[sample] %D %D \startbuffer[graphic] %D \startMPpositiongraphic{connectcenter} %D path pa, pb ; pair ca, cb ; %D initialize_box(\MPpos{\MPvar{from}}) ; pa := pxy ; ca := cxy ; %D initialize_box(\MPpos{\MPvar{to}}) ; pb := pxy ; cb := cxy ; %D draw pa withcolor red ; %D draw pb withcolor red ; %D draw ca -- cb withcolor blue ; %D anchor_box(\MPanchor{\MPvar{from}}) ; %D \stopMPpositiongraphic %D \stopbuffer %D %D We can best demonstrate this in an example, say: %D %D \startbuffer[text] %D \framed %D [backgroundachtergrond=sample,align=middle,width=7cm] %D {We want to connect \hpos {A-1} {this} word with its %D grammatical cousin \hpos {A-2} {that}.} %D \stopbuffer %D %D \typebuffer[text] %D %D \startlinecorrection %D %\getbuffer[graphic,sample,text] %D \stoplinecorrection %D %D The graphic is defined in the following way, using some %D macros defined in an auxiliary \METAPOST\ module that is %D preloaded. %D %D \typebuffer[graphic] \def\MPanchoridentifier{mpa} % {mp-anchor} %D The rest of the definitions concerning such overlays may %D look complicated, \let\currentpositionoverlay\empty %D Position actions are automatically executed when a position %D is set. % \newcount\localpositionnumber % incremented elsewhere % \newif\iflocalpositioning % % \def\textbackgroundoverlay#1{\iflocalpositioning\v!local\else\v!text\fi#1} % \def\MPanchornumber {\the\iflocalpositioning\localpositionnumber\else\realpageno\fi} \def\textbackgroundoverlay#1{\v!text#1} \def\MPanchornumber {\the\realpageno} \unexpanded\def\positionoverlay % the test prevents too many redundant positions {\ifpositioning % in (not used) text* position layers \expandafter\anch_positions_overlay_indeed \else % also \iftrialtypesetting test here? \expandafter\gobbleoneargument \fi} \def\anch_positions_overlay_indeed#1% {\begingroup \edef\currentpositionoverlay{#1}% \ifcsname\??positionaction\currentpositionoverlay::\MPanchoridentifier\endcsname \anch_positions_overlay_compose \fi \endgroup} \def\MPoverlayanchor#1{\MPpos\MPanchorid} \def\anch_positions_overlay_compose {\vbox to \overlayheight {%\writestatus{!!!}{\currentpositionoverlay/\MPanchoridentifier/\MPanchornumber}% \edef\MPanchorid{\currentpositionoverlay::\MPanchoridentifier:\MPanchornumber}% realpageno % \edef\MPanchor##1{\MPpos\MPanchorid}% \let\MPanchor\MPoverlayanchor % no need to fetch it already, seldom used \the\everyinsertpositionaction \copyposition{\currentpositionoverlay::\MPanchoridentifier}\MPanchorid \setbox\scratchbox\hbox to \overlaywidth{\dopositionaction{\currentpositionoverlay::\MPanchoridentifier}\hss}% \ht\scratchbox\overlayheight \dp\scratchbox\zeropoint \ctxcommand{markregionbox(\number\scratchbox,"\MPanchorid")}% needs an hbox \box\scratchbox \vfill}} \unexpanded\def\positionregionoverlay % shares regions {\ifpositioning \expandafter\anch_positions_region_overlay_indeed \else % also \iftrialtypesetting test here? \expandafter\gobbletwoarguments \fi} \let\currentpositionregion\empty \def\anch_positions_region_overlay_indeed#1#2% {\begingroup \edef\currentpositionregion {#1}% \edef\currentpositionoverlay{#2}% \ifcsname\??positionaction\currentpositionoverlay::\MPanchoridentifier\endcsname \anch_positions_region_overlay_compose \fi \endgroup} \def\anch_positions_region_overlay_compose {\vbox to \overlayheight {\let\MPanchorid\currentpositionregion \let\MPanchor\MPoverlayanchor % no need to fetch it already, seldom used \the\everyinsertpositionaction \copyposition{\currentpositionoverlay::\MPanchoridentifier}\MPanchorid \setbox\scratchbox\hbox to \overlaywidth{\dopositionaction{\currentpositionoverlay::\MPanchoridentifier}\hss}% \ht\scratchbox\overlayheight \dp\scratchbox\zeropoint \box\scratchbox \vfill}} % \let\anch_positions_overlay_nop\gobbleoneargument \unexpanded\def\startpositionoverlay {\iftrialtypesetting \expandafter\anch_positions_overlay_start_nop \else \expandafter\anch_positions_overlay_start_yes \fi} \let\stoppositionoverlay\relax \def\anch_positions_overlay_start_nop#1\stoppositionoverlay {} \ifdefined\checkpositionoverlays \else \let\checkpositionoverlays\relax \fi \let\currentpositionoverlay\empty \def\anch_positions_overlay_start_yes#1% {\checkpositionoverlays \edef\currentpositionoverlay{#1}} \unexpanded\def\stoppositionoverlay {\let\currentpositionoverlay\empty} % needs checking if still needed % % \def\resetpositionoverlay#1% % {\anch_positions_set_action{#1::\MPanchoridentifier::}{}} % % \def\handlepositionboxes#1#2#3% % {\handlepositionaction\dohandlepositionboxes\with{#1}{#2}{#3}\on{#2}} % % \def\doinsertpositionboxes#1#2#3% pos tag setups % {\ifnum\MPp{#1}=\realpageno\relax % can be sped up % \executeifdefined{\MPoverlayposprefix#1}\gobblethreearguments{#1}{#2}{#3}% not used % \fi} % % \appendtoks % \let\dohandlepositionboxes\doinsertpositionboxes % was handle ? % \to \everyinsertpositionaction % % \def\docleanpositionboxes#1#2#3% pos tag setups % {\ifnum\MPp{#1}<\realpageno \else % \noexpand \dohandlepositionboxes{#1}{#2}{#3}% reinsert % \fi} % % \appendtoks % \let\dohandlepositionboxes\docleanpositionboxes % \to \everycleanpositionaction %D A position graphic is a normal (non||reused) \METAPOST\ %D graphic, used immediately, with zero dimensions, so that a %D sequence of them does not harm. \installcorenamespace{positiongraphic} \installcorenamespace{positionmethod} %installcorenamespace{graphicvariable} \newbox\b_anch_positions_graphic \def\startMPpositiongraphic % id setups {\dodoublegroupempty\anch_positions_meta_graphic_start} \def\anch_positions_meta_graphic_start#1#2#3\stopMPpositiongraphic % tag list mpcode {\setgvalue{\??positiongraphic#1}{\anch_positions_meta_graphic_use{#1}{#2}{#3}}} \let\stopMPpositiongraphic\relax \def\anch_positions_meta_graphic_prepare {\ifcsname\??graphicvariable\currentmpvariableclass:self\endcsname \else \letvalue{\??graphicvariable\currentmpvariableclass:self}\currentposition \fi \ifcsname\??graphicvariable\currentmpvariableclass:from\endcsname \else \letvalue{\??graphicvariable\currentmpvariableclass:from}\currentposition \fi} \def\anch_positions_meta_graphic_use#1#2#3% {\begingroup \meta_prepare_variables{#2}% \anch_positions_meta_graphic_prepare \startMPcode#3\stopMPcode \endgroup} \unexpanded\def\MPpositiongraphic {\dodoublegroupempty\anch_positions_meta_graphic_direct} \def\anch_positions_meta_graphic_direct#1% tag setups {\ifcsname\??positionmethod#1\endcsname % method \expandafter\anch_positions_meta_graphic_direct_indeed_method \else\ifcsname\??positiongraphic#1\endcsname \doubleexpandafter\anch_positions_meta_graphic_direct_indeed_normal \else \doubleexpandafter\anch_positions_meta_graphic_direct_indeed_unknown \fi\fi{#1}} \let\anch_positions_meta_graphic_direct_indeed_unknown\gobbletwoarguments \def\anch_positions_meta_graphic_direct_indeed_method {\anch_positions_meta_graphic_direct_indeed\??positionmethod} \def\anch_positions_meta_graphic_direct_indeed_normal {\anch_positions_meta_graphic_direct_indeed\??positiongraphic} \def\anch_positions_meta_graphic_direct_indeed#1#2#3% what tag setups {\begingroup \setupMPvariables[#2][#3]% \edef\currentmpvariableclass{#2}% \anch_positions_meta_graphic_prepare \obeyMPboxorigin % do we also set the size ? when needed this must be done in mp ... might change \def\anch_positions_meta_graphic_direct{\anch_positions_meta_graphic_nested{#3}}% takes two extra arguments \setbox\b_anch_positions_graphic\hbox{\ignorespaces\csname#1#2\endcsname\removelastspace}% \smashbox\b_anch_positions_graphic \box\b_anch_positions_graphic \endgroup} \def\anch_positions_meta_graphic_nested#1#2#3% nesting used in prikkels / pascal (might go away) {\begingroup \setupMPvariables[#2][#1,#3]% \edef\currentmpvariableclass{#2}% \anch_positions_meta_graphic_prepare \getvalue{\??positiongraphic#2}% \endgroup}% \def\startMPpositionmethod#1#2\stopMPpositionmethod {\setgvalue{\??positionmethod#1}{#2}} % todo: var list here \let\stopMPpositionmethod\relax %D Simple one position graphics. \unexpanded\def\setMPpositiongraphic {\dotriplegroupempty\anch_positions_meta_graphic_set} \def\anch_positions_meta_graphic_set#1#2#3% pos tag vars {\ifx\currentpositionoverlay\empty \anch_positions_set_action{#1}{\MPpositiongraphic{#2}{#3}}% \else % silly can be one \anch_positions_meta_graphic_handle{#1}{#2}{#3}% \fi} \def\anch_positions_meta_graphic_handle#1#2#3% combine with boxes {\handlepositionaction\anch_positions_meta_graphic_handle_indeed\with{#1}{#2}{#3}\on{#2}} \def\anch_positions_meta_graphic_insert#1#2#3% pos tag setups {\ifnum\MPp{#1}=\realpageno\relax % extra saveguard \def\currentposition{#1}\MPpositiongraphic{#2}{#3}% \fi} \appendtoks \let\anch_positions_meta_graphic_handle_indeed\anch_positions_meta_graphic_insert \to \everyinsertpositionaction \def\anch_positions_meta_graphic_cleanup#1#2#3% pos tag setups {\ifnum\MPp{#1}<\realpageno \else \noexpand\anch_positions_meta_graphic_handle_indeed{#1}{#2}{#3}% \fi} \appendtoks \let\anch_positions_meta_graphic_handle_indeed\anch_positions_meta_graphic_cleanup \to \everycleanpositionaction %D Graphics that span two positions (beware, does not cross pages). \unexpanded\def\setMPpositiongraphicrange {\doquadruplegroupempty\anch_positions_meta_graphic_set_range} \def\anch_positions_meta_graphic_set_range#1#2#3#4% bpos epos tag vars {\ifx\currentpositionoverlay\empty \anch_positions_set_action{#1}{\MPpositiongraphic{#3}{#4}}% \else \anch_positions_meta_graphic_handle_range{#1}{#2}{#3}{#4}% \fi} \def\anch_positions_meta_graphic_handle_range#1#2#3#4% {\handlepositionaction\anch_positions_meta_graphic_handle_range_indeed\with{#1}{#2}{#3}{#4}\on{#2}} \def\anch_positions_meta_graphic_insert_range#1#2#3#4% pos pos tag setups {\ctxcommand{doifelserangeonpage("#1","#2",\number\realpageno)}% {\def\currentposition{#1}% \MPpositiongraphic{#3}{#4}}% {}} \appendtoks \let\anch_positions_meta_graphic_handle_range_indeed\anch_positions_meta_graphic_insert_range \to \everyinsertpositionaction \def\anch_positions_meta_graphic_cleanup_range#1#2#3#4% pos tag setups {\ifnum\MPp{#2}<\realpageno \else \noexpand \anch_positions_meta_graphic_handle_range_indeed{#1}{#2}{#3}{#4}% \fi} \appendtoks \let\anch_positions_meta_graphic_handle_range_indeed\anch_positions_meta_graphic_cleanup_range \to \everycleanpositionaction \let\anch_positions_meta_graphic_handle_range_indeed\gobblefourarguments % Helpers: \def\MPgetposboxes #1#2{\ctxcommand{fetchposboxes("#1","#2",\the\realpageno)}} \def\MPgetmultipars #1#2{\ctxcommand{fetchmultipar("#1","#2",\the\realpageno)}} \def\MPgetmultishapes#1#2{\ctxcommand{fetchmultishape("#1","#2",\the\realpageno)}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-del.mkiv0000644000175000017500000004571212130411274024322 0ustar norbertnorbert%D \module %D [ file=typo-del, % moved from core-mis, %D version=20110112, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Delimited Content, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Delimited Content} \unprotect % THIS IS OBSOLETE: \installcorenamespace{hyphenmarksign} % let's not waste a setuphandler (yet) \unexpanded\def\setuphyphenmark[#1]% sign=normal|wide {\getdummyparameters[#1]% \expandnamespaceparameter\??hyphenmarksign\dummyparameter\c!sign\v!normal} \setvalue{\??hyphenmarksign\v!normal}% {\let\textmodehyphen\normalhyphen \let\textmodehyphendiscretionary\normalhyphendiscretionary} \setvalue{\??hyphenmarksign\v!wide}% {\let\textmodehyphen\composedhyphen \let\textmodehyphendiscretionary\composedhyphendiscretionary} \setuphyphenmark[\c!sign=\v!wide] \definesymbol[\c!lefthyphen] [\languageparameter\c!lefthyphen] \definesymbol[\c!righthyphen] [\languageparameter\c!righthyphen] \definesymbol[\c!hyphen] [\languageparameter\c!hyphen] \unexpanded\def\normalhyphen {\hbox{\directsymbol\empty\c!hyphen}} \unexpanded\def\composedhyphen {\hbox{\directsymbol\empty\c!compoundhyphen}} \unexpanded\def\normalhyphendiscretionary {\discretionary {\hbox{\directsymbol\empty\c!righthyphen}} {\hbox{\directsymbol\empty\c!lefthyphen}} {\hbox{\directsymbol\empty\c!hyphen}}} \unexpanded\def\composedhyphendiscretionary {\discretionary {\hbox{\directsymbol\empty\c!rightcompoundhyphen}} {\hbox{\directsymbol\empty\c!leftcompoundhyphen}} {\hbox{\directsymbol\empty\c!compoundhyphen}}} \let\textmodehyphen \composedhyphen \let\textmodehyphendiscretionary\composedhyphendiscretionary \definesymbol[\c!leftcompoundhyphen] [\languageparameter\c!leftcompoundhyphen] \definesymbol[\c!rightcompoundhyphen] [\languageparameter\c!rightcompoundhyphen] \definesymbol[\c!compoundhyphen] [\languageparameter\c!compoundhyphen] % TILL HERE \setnewconstant\boundarycharactermode\plusone \unexpanded\def\midboundarycharacter#1#2% {\ifcase\boundarycharactermode \or %\nobreak \hskip\hspaceamount\currentlanguage{#2}% \languageparameter#1% %\nobreak \hskip\hspaceamount\currentlanguage{#2}% \or \languageparameter#1% \fi \boundarycharactermode\plusone} \unexpanded\def\leftboundarycharacter#1#2% {\ifcase\boundarycharactermode \or \languageparameter#1% \nobreak \hskip\hspaceamount\currentlanguage{#2}% \or \languageparameter#1% \fi \boundarycharactermode\plusone} \unexpanded\def\rightboundarycharacter#1#2% {\ifcase\boundarycharactermode \or \prewordbreak %\nobreak \hskip\hspaceamount\currentlanguage{#2}% \languageparameter#1% \or \languageparameter#1% \fi \boundarycharactermode\plusone} \definehspace [sentence] [\zeropoint] \definehspace [intersentence] [.250\emwidth] \definesymbol [\c!midsentence] [\midboundarycharacter\c!midsentence{sentence}] \definesymbol [\c!leftsentence] [\leftboundarycharacter\c!leftsentence{sentence}] \definesymbol [\c!rightsentence] [\rightboundarycharacter\c!rightsentence{sentence}] \definesymbol [\c!leftsubsentence] [\leftboundarycharacter\c!leftsubsentence{sentence}] \definesymbol [\c!rightsubsentence] [\rightboundarycharacter\c!rightsubsentence{sentence}] \newsignal \d_typo_subsentence_signal \newcount \c_typo_subsentence_nesting \let\beforesubsentence\donothing \let\aftersubsentence \donothing % todo: make this language option % % \def\beforesubsentence{\removeunwantedspaces} % \def\aftersubsentence {\ignorespaces} \unexpanded\def\midsentence {\symbol[\c!midsentence]} \unexpanded\def\beginofsubsentence {\beforesubsentence \ifdim\lastkern=\d_typo_subsentence_signal \unskip \kern\hspaceamount\currentlanguage{intersentence}% \fi \global\advance\c_typo_subsentence_nesting\plusone \ifnum\c_typo_subsentence_nesting=\plusone \dontleavehmode % was \leaveoutervmode \fi \dostarttagged\t!subsentence\empty \symbol[\ifodd\c_typo_subsentence_nesting\c!leftsentence\else\c!leftsubsentence\fi]% }% \ignorespaces} \unexpanded\def\endofsubsentence % relax prevents space gobbling {\symbol[\ifodd\c_typo_subsentence_nesting\c!rightsentence\else\c!rightsubsentence\fi]% \dostoptagged \global\advance\c_typo_subsentence_nesting\minusone \unskip \kern\d_typo_subsentence_signal\relax \aftersubsentence} \unexpanded\def\beginofsubsentencespacing % relax prevents space gobbling {\kern\d_typo_subsentence_signal\relax}% \ignorespaces} \unexpanded\def\endofsubsentencespacing {\ifdim\lastkern=\d_typo_subsentence_signal \unskip \hskip\hspaceamount\currentlanguage{intersentence}% % no good, actually language dependent: % \ignorespaces \else \unskip \fi} %D \startbuffer %D test |<|test |<|test|>| test|>| test \par %D test|<|test|<|test|>|test|>|test \par %D test |<||<|test|>||>| test \par %D test \directdiscretionary{<}test\directdiscretionary{>} test \par %D \stopbuffer %D %D \typebuffer %D \getbuffer \unexpanded\def\startsubsentence{\beginofsubsentence \prewordbreak\beginofsubsentencespacing} \unexpanded\def\stopsubsentence {\endofsubsentencespacing\prewordbreak\endofsubsentence} \unexpanded\def\subsentence {\groupedcommand\startsubsentence\stopsubsentence} \definehspace [quotation] [\zeropoint] \definehspace [interquotation] [.125em] %definehspace [quote] [\zeropoint] %definehspace [speech] [\zeropoint] \definehspace [quote] [\hspaceamount\currentlanguage{quotation}] \definehspace [speech] [\hspaceamount\currentlanguage{quotation}] \definesymbol [\c!leftquotation] [\leftboundarycharacter\c!leftquotation{quotation}] \definesymbol [\c!rightquotation] [\rightboundarycharacter\c!rightquotation{quotation}] \definesymbol [\c!leftquote] [\leftboundarycharacter\c!leftquote{quote}] \definesymbol [\c!rightquote] [\rightboundarycharacter\c!rightquote{quote}] \definesymbol [\c!leftspeech] [\leftboundarycharacter\c!leftspeech{speech}] \definesymbol [\c!rightspeech] [\rightboundarycharacter\c!rightspeech{speech}] \definesymbol [\c!middlespeech] [\leftboundarycharacter\c!middlespeech{speech}] \appendtoks \def\quotation#1{"#1"}% \def\quote #1{'#1'}% \to \everysimplifycommands %D The next features was so desperately needed by Giuseppe %D Bilotta that he made a module for it. Since this is a %D typical example of core functionality, I decided to extend %D the low level quotation macros in such a way that a speech %D feature could be build on top of it. The speech opening and %D closing symbols are defined per language. Italian is an %D example of a language that has them set. \newsignal\d_typo_delimited_signal \let\currentdelimitedtext\s!unknown \let\delimitedtextlevel\!!zerocount \def\c_typo_delimited_nesting{\csname\??delimitedtextlevel\currentparentdelimitedtext\endcsname} \def\typo_delimited_push#1% {\globalpushmacro\currentdelimitedtext \def\currentdelimitedtext{#1}% \let\currentparentdelimitedtext\currentdelimitedtext \global\advance\c_typo_delimited_nesting\plusone \edef\delimitedtextlevel{\number\c_typo_delimited_nesting}% \normalexpanded{\chaintocurrentdelimitedtext{\currentparentdelimitedtext:\delimitedtextlevel}}% \edef\currentdelimitedtext{\currentparentdelimitedtext:\delimitedtextlevel}} \def\typo_delimited_pop {\global\advance\c_typo_delimited_nesting\minusone \globalpopmacro\currentdelimitedtext} \installcorenamespace{delimitedtext} \installcorenamespace{delimitedtextlevel} \installcommandhandler \??delimitedtext {delimitedtext} \??delimitedtext \appendtoks \expandafter\newcount\csname\??delimitedtextlevel\currentdelimitedtext\endcsname \setuevalue{\currentdelimitedtext }{\delimitedtext[\currentdelimitedtext]}% \setuevalue{\e!start\currentdelimitedtext}{\startdelimitedtext[\currentdelimitedtext]}% \setuevalue{\e!stop \currentdelimitedtext}{\stopdelimitedtext}% \to \everydefinedelimitedtext \setupdelimitedtext [\c!location=\v!margin, % \v!text \v!paragraph \c!spacebefore=, \c!spaceafter=\delimitedtextparameter\c!spacebefore, \c!style=\v!normal, \c!color=, \c!leftmargin=\zeropoint, \c!rightmargin=\delimitedtextparameter\c!leftmargin, \c!indentnext=\v!yes, \c!before=, \c!after=, \c!left=, \c!right=, %\c!level=0, \c!method=, \c!repeat=\v!no] \def\typo_delimited_repeat_ideed {\relax\ifcase\delimitedtextlevel\else \typo_delimited_handle_middle\c!middle \fi} \let\typo_delimited_repeat\relax \unexpanded\def\startdelimitedtext[#1]% {\begingroup \typo_delimited_push{#1}% \dostarttagged\t!delimitedblock\currentdelimitedtext \edef\p_method{\delimitedtextparameter\c!method}% \ifx\p_method\s!font \expandafter\typo_delimited_start_font \else \expandafter\typo_delimited_start_other \fi} \let\typo_delimited_stop\relax % hooks into \everypar \def\typo_delimited_start_font {\let\typo_delimited_stop\typo_delimitedtexts_finish_font \delimitedtextparameter\c!left \ignorespaces} \def\typo_delimited_start_other {\edef\p_repeat{\delimitedtextparameter\c!repeat}% \ifx\p_repeat\v!yes \let\typo_delimited_repeat\typo_delimited_repeat_ideed \else \let\typo_delimited_repeat\relax \fi \edef\p_location{\delimitedtextparameter\c!location}% \ifx\p_location\v!paragraph \singleexpandafter\typo_delimited_start_par \else\ifx\p_location\v!margin \doubleexpandafter\typo_delimited_start_par \else \doubleexpandafter\typo_delimited_start_txt \fi\fi} \def\typo_delimitedtexts_finish_font {\removeunwantedspaces\delimitedtextparameter\c!right} \def\typo_delimited_start_par {\dosingleempty\typo_delimited_start_par_indeed} \def\typo_delimited_start_par_indeed[#1]% {\let\typo_delimited_stop\typo_delimited_stop_par \doifsomething{\delimitedtextparameter\c!spacebefore} {\blank[\delimitedtextparameter\c!spacebefore]}% \delimitedtextparameter\c!before \edef\m_typo_delimited_narrower{#1}% \ifx\m_typo_delimited_narrower\empty \endgraf \doadaptleftskip {\delimitedtextparameter\c!leftmargin}% \doadaptrightskip{\delimitedtextparameter\c!rightmargin}% \let\typo_delimited_stop_par_indeed\endgraf \else % backward compatible direct directive \startnarrower[#1]% \let\typo_delimited_stop_par_indeed\stopnarrower \fi % so far \pushmacro\checkindentation \doifsomething{\delimitedtextparameter\c!indenting} % WS {\setupindenting[\delimitedtextparameter\c!indenting]}% \begingroup \usedelimitedtextstyleandcolor\c!style\c!color \leftdelimitedtextmark \ignorespaces} \def\typo_delimited_stop_par {\removeunwantedspaces \removelastskip \rightdelimitedtextmark \carryoverpar\endgroup % new per 2013-01-21 ... please left floats \popmacro\checkindentation \typo_delimited_stop_par_indeed \delimitedtextparameter\c!after \doifsomething{\delimitedtextparameter\c!spaceafter} {\blank[\delimitedtextparameter\c!spaceafter]}% \useindentnextparameter\delimitedtextparameter \dorechecknextindentation}% AM: This was missing! \def\typo_delimited_start_txt {\let\typo_delimited_stop\typo_delimited_stop_txt \begingroup \usedelimitedtextstyleandcolor\c!style\c!color \typo_delimited_handle_left\c!left \ignorespaces} \def\typo_delimited_stop_txt {\removeunwantedspaces \typo_delimited_handle_right\c!right \endgroup} \unexpanded\def\stopdelimitedtext {\typo_delimited_stop \dostoptagged \typo_delimited_pop \endgroup} \unexpanded\def\delimitedtext[#1]% {\dontleavehmode % following ones can be omited \typo_delimited_push{#1}% \edef\p_method{\delimitedtextparameter\c!method}% \ifx\p_method\s!font \expandafter\typo_delimited_fontdriven \else \expandafter\typo_delimited_other \fi} \def\typo_delimited_other {\edef\p_location{\delimitedtextparameter\c!location}% \ifx\p_location\v!paragraph \singleexpandafter\typo_delimited_par \else\ifx\p_location\v!margin \doubleexpandafter\typo_delimited_par \else \doubleexpandafter\typo_delimited_txt \fi\fi} % shortcuts \unexpanded\def\startdelimited{\startdelimitedtext} \unexpanded\def\stopdelimited {\stopdelimitedtext} % no let, dynamically assigned \def\delimited {\delimitedtext} \unexpanded\def\leftdelimitedtextmark {\doifsomething{\delimitedtextparameter\c!left} {\setbox\scratchbox\hbox{\delimitedtextparameter\c!left}% \dontleavehmode \doif{\delimitedtextparameter\c!location}\v!margin{\hskip-\wd\scratchbox}% \box\scratchbox}} \unexpanded\def\rightdelimitedtextmark {\doifsomething{\delimitedtextparameter\c!right} {\hsmash{\delimitedtextparameter\c!right}}} % \starttext % \hyphenatedword{groepsvrijstellingsverordeningen}\par % \hyphenatedword{\quote{groepsvrijstellingsverordeningen}}\par % \dorecurse{100}{\hskip300pt\hskip\recurselevel pt test \quote{xxx xxxx}.\par} % \page \setuppapersize[A5][A4] % \quotation {overly beautiful pusillanimous sesquipedalian % longwinded} test test test test test test test test test test test % test test test test test test test test test test test test test % test test test test test test test test test test test test test % test test test test test test test test test test test test test % test test test % \stoptext \def\typo_delimited_handle_middle#1% {\begingroup \setbox\scratchbox\hbox{\delimitedtextparameter#1}% \ifdim\wd\scratchbox>\zeropoint \ifdim\lastkern=\d_typo_delimited_signal \unkern \hskip\hspaceamount\currentlanguage{interquotation}% \fi \ifhmode % else funny pagebeaks \penalty\plustenthousand \hskip\zeropoint % == \prewordbreak \fi \strut % new, needed below \delimitedtextparameter#1% unhbox\scratchbox % \penalty\plustenthousand % else overfull boxes, but that's better than dangling periods \kern\d_typo_delimited_signal % +- \prewordbreak \fi \endgroup} \def\typo_delimited_handle_left#1% {\begingroup \setbox\scratchbox\hbox{\delimitedtextparameter#1}% \ifdim\wd\scratchbox>\zeropoint \ifdim\lastkern=\d_typo_delimited_signal \unkern \hskip\hspaceamount\currentlanguage{interquotation}% \else\ifdim\lastskip=\d_typo_delimited_signal \unskip \hskip\hspaceamount\currentlanguage{interquotation}% \fi\fi \strut % new, needed below \ifhmode % else funny pagebeaks \penalty\plustenthousand \hskip\zeropoint % == \prewordbreak \fi \strut % new, needed below \delimitedtextparameter#1% unhbox\scratchbox \penalty\plustenthousand % new per 2013-03-09 WS mailing list \hskip\d_typo_delimited_signal % +- \prewordbreak \fi \endgroup} \def\typo_delimited_handle_right#1% {\begingroup \setbox\scratchbox\hbox{\delimitedtextparameter#1}% \ifdim\wd\scratchbox>\zeropoint \ifdim\lastkern=\d_typo_delimited_signal \unkern \penalty\plustenthousand \hskip\hspaceamount\currentlanguage{interquotation}% \else\ifdim\lastskip=\d_typo_delimited_signal \unskip \penalty\plustenthousand \hskip\hspaceamount\currentlanguage{interquotation}% \fi\fi \ifhmode % else funny pagebeaks \penalty\plustenthousand \hskip\zeropoint % == \prewordbreak \fi \strut % new, needed below \delimitedtextparameter#1% unhbox\scratchbox \kern\d_typo_delimited_signal % +- \prewordbreak \fi \endgroup} \unexpanded\def\typo_delimited_par {\groupedcommand {\dostarttagged\t!delimited\currentdelimitedtext % block? \typo_delimited_handle_left\c!left} {\typo_delimited_handle_right\c!right \removelastskip \dostoptagged \typo_delimited_pop}} \unexpanded\def\typo_delimited_txt {\doifelse{\delimitedtextparameter\c!style}\v!normal \typo_delimited_quoted \typo_delimited_attributed} \def\typo_delimited_quoted_b {\dostarttagged\t!delimited\currentdelimitedtext \typo_delimited_handle_left\c!left} \def\typo_delimited_quoted_e {\typo_delimited_handle_right\c!right \removelastskip \dostoptagged \typo_delimited_pop} \def\typo_delimited_attributed_b {\dostarttagged\t!delimited\currentdelimitedtext \usedelimitedtextstyleandcolor\c!style\c!color} \def\typo_delimited_attributed_e {\dostoptagged \typo_delimited_pop} \def\typo_delimited_fontdriven_b {\dostarttagged\t!delimited\currentdelimitedtext \languageparameter{\c!left\currentparentdelimitedtext}}% was: \currentdelimitedtext \def\typo_delimited_fontdriven_e {\languageparameter{\c!right\currentparentdelimitedtext}% was: \currentdelimitedtext \dostoptagged \typo_delimited_pop} % We now assume proper argument usage (so no longer grouped % command). % \def\typo_delimited_quoted {\groupedcommand \typo_delimited_quoted_b \typo_delimited_quoted_e } % \def\typo_delimited_attributed{\groupedcommand \typo_delimited_attributed_b\typo_delimited_attributed_e} % \def\typo_delimited_fontdriven{\simplegroupedcommand\typo_delimited_fontdriven_b\typo_delimited_fontdriven_e} \def\typo_delimited_quoted {\bgroup\typo_delimited_quoted_b \aftergroup\typo_delimited_quoted_e \let\next=} \def\typo_delimited_attributed{\bgroup\typo_delimited_attributed_b\aftergroup\typo_delimited_attributed_e\let\next=} \def\typo_delimited_fontdriven{\bgroup\typo_delimited_fontdriven_b\aftergroup\typo_delimited_fontdriven_e\let\next=} % testcase for nesting: % % \quotation{... \quotation{...} ...} % \startquotation ... \startquotation... \quotation{...} \stopquotation\space ...\stopquotation % \setupdelimitedtext[quotation][1][left=(,right=)] % \setupdelimitedtext[quotation][2][left={[},right={]}] % \setupdelimitedtext[quotation][3][left=\{,right=\}] % \quotation{... \quotation{...} ...} % \startquotation ... \startquotation... \quotation{...} \stopquotation\space ...\stopquotation \definedelimitedtext [\v!quotation] [\c!left={\symbol[\c!leftquotation]}, \c!right={\symbol[\c!rightquotation]}, \c!leftmargin=\v!standard] \definedelimitedtext [\v!quote][\v!quotation] \setupdelimitedtext [\v!quote] [\c!location=\v!text, \c!left={\symbol[\c!leftquote]}, \c!right={\symbol[\c!rightquote]}] \definedelimitedtext [\v!blockquote][\v!quotation] \setupdelimitedtext [\v!blockquote] [\c!left=, \c!right=] \definedelimitedtext [\v!speech][\v!quotation] \setupdelimitedtext [\v!speech] [\c!repeat=\v!yes, \c!left={\symbol[\c!leftspeech]}, \c!middle={\symbol[\c!middlespeech]}, \c!right={\symbol[\c!rightspeech]}] % how do we call an tight quote % % \definedelimitedtext % [\v!quotation][\v!quotation] % % \setupdelimitedtext % [\v!quotation] % [\c!indentnext=\v!no, % \c!spacebefore=\v!nowhite] \unexpanded\def\setupquotation{\setupdelimitedtext[\v!quotation]} \unexpanded\def\setupquote {\setupdelimitedtext[\v!quote]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-ini.mkiv0000644000175000017500000003053412130411274024262 0ustar norbertnorbert%D \module %D [ file=enco-ini, %D version=2007.02.19, % 2000.12.27, % 1998.12.03, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is stripped down version of th eoriginal enco-ini.tex %D file. For more details you might want to study the \MKII\ file %D but since \LUATEX\ is unicode inside we need less code. % When dealing with characters we have four cases to take into account % when moving from mkii to mkiv: % 1. => ref to slot 200 in current font % 2. \char 200 => ref to slot 200 in current font % 3. => can (e.g.) map to another slot in current font % 4. \namedglyph => can map to some slot in some font % Using case 2 for special characters is doomed to fail because we are not going % to intercept these on the fly as happens automatically with traditional font % encoding handling. We could do that in a node pass but it's not worth the effort % because we seldom use this case in a document source. % We can consider using utf as internal format for mkii. The main reason for not % doing this before was that it was slow. On the other hand, it would make dealing % with utility files easier. However, we've now kind of frozen mkii. \writestatus{loading}{ConTeXt Encoding Macros / Initialization} \unprotect %D Obsolete (but sometimes used in styles) \let\defaultencoding\s!default %D \macros %D {defineaccent, definecharacter, definecommand} \installcorenamespace{accents} \unexpanded\def\defineaccent#1 #2 #3 % {\enco_define_accent_command{#1}% \enco_define_accent{#1}{#2}{#3}} \unexpanded\def\enco_define_accent_command#1% {\setevalue{\string#1}{\noexpand\enco_handle_accent{\string#1}}} \unexpanded\def\enco_define_accent#1#2#3% no spaces, used low level {\setvalue{\??accents\string#1\string#2\empty}{#3}} \def\enco_handle_accent#1#2% expandable because we want them in the tuc file {\csname\??accents \ifcsname\??accents\string#1#2\empty\endcsname \string#1#2\empty \else\ifcsname\??accents\string#1\string#2\empty\endcsname \string#1\string#2\empty \else \empty \fi\fi \endcsname} \let\dohandleaccent \enco_handle_accent % maybe useful \let\dodefineaccent \enco_define_accent % used at the lua end \let\dodefineaccentcommand\enco_define_accent_command % used at the lua end \unexpanded\def\definecharacter#1 #2 % {\doifnumberelse{\string#2} {\setevalue{\string#1}{\utfchar{#2}}} % or {\expandafter\chardef\csname#1\endcsname#2\relax} {\setuvalue{\string#1}{#2}}} \unexpanded\def\definecommand#1 #2 % {\setuvalue{\string#1}{#2}} %D \macros %D {everyuppercase, everylowercase, everysanitize} \newtoks \everyuppercase \newtoks \everylowercase \newtoks \everysanitize %D Accent handling (try to avoid this): \newbox\b_enco_accent \def\buildmathaccent#1% {\mathaccent#1 } \unexpanded\def\buildtextaccent#1#2% we could do all at the lua end {\begingroup % but that's no fun (yet) \setbox\b_enco_accent\hbox{#1}% \scratchcounter\cldcontext{nodes.firstcharinbox(\number\b_enco_accent)}\relax \ifcase\scratchcounter\else\accent\scratchcounter\fi \relax#2% \endgroup} \unexpanded\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char {\dontleavehmode % why this align mess \vtop {\forgetall \baselineskip\zeropoint \lineskip#1% \everycr\emptytoks \tabskip\zeropoint \lineskiplimit\zeropoint \setbox0\hbox{#4}% \halign {##\crcr\hbox{#5}\crcr \hidewidth \hskip#2\wd0 \hskip-#3\slantperpoint % in plain 1ex * dimenless value \vbox to .2\exheight{\box0\vss}\hidewidth \crcr}}} \unexpanded\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}} \unexpanded\def\buildtextbottomdot {\bottomaccent{.25ex}{0}{5}{\textbottomdot}} \unexpanded\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}} \unexpanded\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}} \unexpanded\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}} \let\d\buildtextbottomdot \unexpanded\def\topaccent#1#2#3#4#5% down right slantcorrection accent char {\dontleavehmode \bgroup \setbox0\hbox{#4}% \setbox2\hbox{#5}% \hbox to \wd2 \bgroup \hss\copy2\hss \hskip-\wd2 \hss\hskip#2\wd0\hskip-#3\slantperpoint\raise#1\hbox{#4}\hss \egroup \egroup} \unexpanded\def\buildtextgrave {\topaccent{0pt}{0}{15}{\textgrave}} % e.g. \unexpanded\def\definemathaccent#1 #2% {\setvalue{#1}{\mathaccent#2 }} %D Math (will move): \definemathaccent acute \mathacute \definemathaccent grave \mathgrave \definemathaccent ddot \mathddot \definemathaccent tilde \mathtilde \definemathaccent bar \mathbar \definemathaccent breve \mathbreve \definemathaccent check \mathcheck \definemathaccent hat \mathhat \definemathaccent vec \mathvec \definemathaccent dot \mathdot % \definemathaccent widetilde \mathwidetilde % \definemathaccent widehat \mathwidehat % from enco-com: \def\AA{Å} \def\aa{å} \def\AE{Æ} \def\ae{æ} \def\CC{Ç} \def\cc{ç} \def \L{Ł} \def \l{ł} \def \O{Ø} \def \o{ø} \def\OE{Œ} \def\oe{œ} \def\SZ{SS} \def\sz{ß} \def\SS{ß} \def\IJ{IJ} \def\ij{ij} % from enco-def: \def\i{ı} \def\j{ȷ} \def\S{§} \def\textS {§} % obsolete (surfaced in bibliographic files) \def\P{¶} \def\textP {¶} % obsolete (surfaced in bibliographic files) \def\eszett {ß} \def\Eszett {SS} \def\Ssharp{SS} \def\lslash {ł} \def\Lslash {Ł} \def\dslash {đ} \def\Dslash {Đ} \def\oslash {ø} \def\Oslash {Ø} \def\dcroat {đ} \def\Dcroat {Đ} \def\kcedilla{ķ} \def\Kcedilla{Ķ} \def\lcedilla{ļ} \def\Lcedilla{Ļ} \def\ncedilla{ņ} \def\Ncedilla{Ņ} \def\rcedilla{ŗ} \def\Rcedilla{Ŗ} \def\aumlaut {ä} \def\Aumlaut {Ä} \def\eumlaut {ë} \def\Eumlaut {Ë} \def\iumlaut {ï} \def\Iumlaut {Ï} \def\oumlaut {ö} \def\Oumlaut {Ö} \def\uumlaut {ü} \def\Uumlaut {Ü} % for old times sake (obsolete) \def\textflorin{ƒ} \def\florin {ƒ} \def\pound {£} \def\sterling{£} \def\promille {‰} \def\permille{‰} % tex specific (obsolete) \def\procent {\percent} \def\dollar {\textdollar} \def\permine {\fakepermine} % some more \def\hyphen {\softhyphen} \def\compoundwordmark {\hyphen} \def\cwm {\hyphen} \def\nonbreakinghyphen{\hyphen} \def\breakinghyphen {\hyphen\prewordbreak} % quotes \def\lowerleftsingleninequote {\quotesinglebase} \def\lowerleftdoubleninequote {\quotedblbase} \def\lowerrightsingleninequote {\quotesinglebase} \def\lowerrightdoubleninequote {\quotedblbase} \def\upperleftsingleninequote {\quoteright} \def\upperleftdoubleninequote {\quotedblright} \def\upperrightsingleninequote {\quoteright} \def\upperrightdoubleninequote {\quotedblright} \def\upperleftsinglesixquote {\quoteleft} \def\upperleftdoublesixquote {\quotedblleft} \def\upperrightsinglesixquote {\quoteleft} \def\upperrightdoublesixquote {\quotedblleft} \def\leftsubguillemot {\guilsingleleft} \def\rightsubguillemot {\guilsingleright} % left-overs (some day in private unicode space, so that we can roundtrip) \unexpanded\def\textblacksquare {\dontleavehmode\hbox{\vrule\s!width.3\s!em\s!height.4\s!em\s!depth-.1\s!em}} \unexpanded\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}} \unexpanded\def\schwagrave {\buildtextgrave\schwa} \chardef\textcontrolspace"2423 \unexpanded\def\fallbackcontrolspace %{\getglyph{ComputerModernMono}\textcontrolspace} {\getglyph{LMTypewriter-Regular}\textcontrolspace} \unexpanded\def\normalcontrolspace {\iffontchar\font\textcontrolspace \textcontrolspace \else \fallbackcontrolspace \fi} \let\textvisiblespace\normalcontrolspace \unexpanded\def\fastcontrolspace % no glyph resolving after first (use grouped) {\enco_fast_control_space} \def\enco_fast_control_space {\iffontchar\font\textcontrolspace \enco_fast_control_space_nop \else \enco_fast_control_space_yes \fi \enco_fast_control_space} \newbox\b_enco_control_space \def\enco_fast_control_space_nop {\let\enco_fast_control_space\textcontrolspace} \def\enco_fast_control_space_yes {\setbox\b_enco_control_space\hbox{\space}% \setbox\b_enco_control_space\hbox to \wd\b_enco_control_space{\hss\fallbackcontrolspace\hss}% \let\enco_fast_control_space\flushcontrolspacebox} \def\flushcontrolspacebox {\copy\b_enco_control_space} % a few defaults (\{}), we really need the verbose \empty as it will be % stringified .. anyhow, we define this at the lua end now but keep it here as a % reference % % \defineaccent ^ {\empty} {\textcircumflex} % \defineaccent ` {\empty} {\textgrave} % \defineaccent ~ {\empty} {\texttilde} % \defineaccent " {\empty} {\textdiaeresis} % \defineaccent ' {\empty} {\textacute} % \defineaccent . {\empty} {\textdotaccent} % \defineaccent = {\empty} {\textmacron} % \defineaccent c {\empty} {\textcedilla} % \defineaccent H {\empty} {\texthungarumlaut} % \defineaccent k {\empty} {\textogonek} % \defineaccent r {\empty} {\textring} % \defineaccent u {\empty} {\textbreve} % \defineaccent v {\empty} {\textcaron} \ctxlua{characters.tex.defineaccents()} % from enco-mis: \unexpanded\def\fakepercent {\mathematics{\normalsuperscript{\scriptscriptstyle0}\kern-.25\emwidth/\kern-.2\emwidth\normalsubscript{\scriptscriptstyle0}}} \unexpanded\def\fakeperthousand {\mathematics{\normalsuperscript{\scriptscriptstyle0}\kern-.25\emwidth/\kern-.2\emwidth\normalsubscript{\scriptscriptstyle00}}} \unexpanded\def\fakepermine {\dontleavehmode \bgroup \setbox\scratchbox\hbox {\mathematics{+}}% \hbox to \wd\scratchbox {\hss \mathematics{\normalsuperscript{\scriptscriptstyle-}\kern-.4\emwidth/\kern-.3\emwidth\normalsubscript{\scriptscriptstyle-}}% \hss}% \egroup} %D A smaller and bolder variant, more like the math and monospaced ones. \unexpanded\def\fakeunderscore {\relax\ifmmode \vrule\s!depth .12\fontexheight\mathstylefont\normalmathstyle\s!width \fontinterwordspace\mathstylefont\normalmathstyle\s!height\zeropoint\relax \else \dontleavehmode\hbox{\vrule\s!depth .12\fontexheight\font\s!width \fontinterwordspace\font\s!height\zeropoint}% \fi} \unexpanded\def\fakeunderscores{\let\_\fakeunderscore} \unexpanded\def\textunderscores{\let\_\textunderscore} \textunderscores \ifdefined\mathunderscore \else \let\mathunderscore\fakeunderscore \fi \ifdefined\textunderscore \else \let\textunderscore\fakeunderscore \fi \unexpanded\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi} \let\_\normalunderscore %D To be sorted out: \unexpanded\def\textminus {\char \iffontchar\font"2012 "2012 % figuredash \else\iffontchar\font"2013 "2013 % endash \else\iffontchar\font"2212 "2212 % math minus "002D % hyphen \fi\fi\fi} \unexpanded\def\textplus {\char"002B } % plus %D Moved from core-mis: \unexpanded\def\celsius #1{#1\mathematics{^\circ}C} \unexpanded\def\inch {\mathematics{\prime\prime}} % was: \hbox{\rm\char125\relax} \unexpanded\def\fraction#1#2{\mathematics{#1\over#2}} \def\periodswidth {.5em} \def\periodsdefault{3} % was 5, but now it's like \unknown \unexpanded\def\periods {\dosingleempty\enco_periods} % \def\doperiods[#1]% todo: also n=,width= or maybe just #1,#2 % {\dontleavehmode % \begingroup % \scratchdimen\periodswidth % \hbox to \iffirstargument#1\else\periodsdefault\fi \scratchdimen % {\leaders\hbox to \scratchdimen{\hss.\hss}\hss}% % \endgroup} % % better for export: \unexpanded\def\enco_periods[#1]% todo: also n=,width= or maybe just #1,#2 {\dontleavehmode \hbox\bgroup \setbox\scratchbox\hbox to \periodswidth{\hss.\hss}% \dorecurse{\iffirstargument#1\else\periodsdefault\fi}{\copy\scratchbox}% \egroup} \unexpanded\def\unknown {\periods\relax} % relax prevents lookahead for [] % Example by Wolfgang Schuster on the context list: % % \unexpanded\def\fourdots{{\def\periodswidth{.3em}\periods[4]}} % % Hello\fourdots\ World\fourdots \par Hello\fourdots\ World. \appendtoks \let\buildtextaccent\secondoftwoarguments \to \everysimplifycommands \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-bas.mkiv0000644000175000017500000000104512130411274024227 0ustar norbertnorbert%D \module %D [ file=cldf-bas, %D version=2010.10.19,, %D title=\CONTEXT\ \LUA\ Document Functions, %D subtitle=Basics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Documents / Basics} \registerctxluafile{cldf-bas}{1.001} \registerctxluafile{cldf-prs}{1.001} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-imp-cc.mkiv0000644000175000017500000000567512134352503024714 0ustar norbertnorbert%D \module %D [ file=symb-imp-cc, %D version=2013.03.22, %D title=\CONTEXT\ Symbol Libraries, %D subtitle=Creative Commons, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \doiffontpresentelse{ccicons.otf} { % redone ctan version \definefontfeature [creativecommons] [mode=base, goodies=ccicons, unicoding=yes] \definefontsynonym [creativecommons] [ccicons*creativecommons] } { % official version \definefontfeature [creativecommons] [mode=base, goodies=cc-icons, unicoding=yes] \definefontsynonym [creativecommons] [cc-icons*creativecommons] } \startsymbolset[cc] \definesymbol [sa] [\getnamedglyphdirect{creativecommons}{sa}] \definesymbol [by] [\getnamedglyphdirect{creativecommons}{by}] \definesymbol [cc] [\getnamedglyphdirect{creativecommons}{cc}] \definesymbol [nd] [\getnamedglyphdirect{creativecommons}{nd}] \definesymbol [nc] [\getnamedglyphdirect{creativecommons}{nc}] \definesymbol [ncus] [\getnamedglyphdirect{creativecommons}{nc}] \definesymbol [nceu] [\getnamedglyphdirect{creativecommons}{nceu}] \definesymbol [ncjp] [\getnamedglyphdirect{creativecommons}{ncjp}] \definesymbol [pd] [\getnamedglyphdirect{creativecommons}{pd}] \definesymbol [sampling] [\getnamedglyphdirect{creativecommons}{sampling}] \definesymbol [share] [\getnamedglyphdirect{creativecommons}{share}] \definesymbol [remix] [\getnamedglyphdirect{creativecommons}{remix}] \definesymbol [zero] [\getnamedglyphdirect{creativecommons}{zero}] \definesymbol [logo] [\getnamedglyphdirect{creativecommons}{logo}] % \definesymbol [cc-by-sa-nc] [\dontleavehmode\lower.15ex\hbox\bgroup % \getnamedglyphdirect{creativecommons}{cc}\enspace % \getnamedglyphdirect{creativecommons}{by}\enspace % \getnamedglyphdirect{creativecommons}{sa}\enspace % \getnamedglyphdirect{creativecommons}{nc}% % \egroup] % % % more efficient: % % \definesymbol [cc-by-sa-nc] [\dontleavehmode\lower.15ex\hbox\bgroup % \directsymbol{cc}{cc}\enspace\directsymbol{cc}{by}\enspace % \directsymbol{cc}{sa}\enspace\directsymbol{cc}{nc}% % \egroup] % % % more fun: \unexpanded\def\creativecommons#1% {\dontleavehmode\lower.15\exheight\hbox\bgroup \let\inbetween\relax \processseparatedlist[#1][-]{\inbetween\let\inbetween\enspace\directsymbol{cc}}% \egroup} \definesymbol [cc-by-sa-nc] [\creativecommons{cc-by-sa-nc}] \stopsymbolset \continueifinputfile{symb-imp-cc.mkiv} \starttext \showsymbolset[cc] \symbol[cc][cc-by-sa-nc] \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/core-sys.mkiv0000644000175000017500000003111212134352503024321 0ustar norbertnorbert%D \module %D [ file=core-sys, % moved from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=System, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % we need to mkiv-ize this file ! \writestatus{loading}{ConTeXt Core Macros / System} \registerctxluafile{core-sys}{1.001} \unprotect %D Version checking: \unexpanded\def\newcontextversion#1% {\doifelse{#1}\contextversion {\let\newcontextversion\gobbleoneargument} {\writeline \writestatus{Fatal Error}{Your format does not match the base files!}% \writeline \writestatus{Format Version}{\contextversion\space\contextmark}% \writestatus{Files Version}{#1}% \batchmode \normalend}} %D End of lines to the output. \TEX\ will map this onto the platform specific %D line ending. I hate this mess. \edef\operatingsystem {\cldcontext{os.platform}} %D The jobname is what gets loaded by the cont-yes stub file. This name %D also determines the name of tuc etc files. \def \jobfilename {\cldcontext{environment.jobfilename or ""}} \def \jobfilesuffix {\cldcontext{environment.jobfilesuffix or ""}} %D However, that one can itself load another file. \def \inputfilebarename {\cldcontext{environment.inputfilebarename or ""}} \def \inputfilerealsuffix{\cldcontext{environment.inputfilerealsuffix or ""}} \def \inputfilesuffix {\cldcontext{environment.inputfilesuffix or ""}} \def \inputfilename {\cldcontext{environment.inputfilename or ""}} %D The output name is only used for some checking. \def \outputfilename {\cldcontext{environment.outputfilename or ""}} \installcorenamespace{system} \installdirectcommandhandler \??system {system} \appendtoks % \edef\outputfilename {\directsystemparameter\c!file }% % \edef\inputfilename {\directsystemparameter\c!inputfile }% \to \everysetupsystem \appendtoks \ifcase\directsystemparameter\c!n\relax % % 0 : unknown \or \setsystemmode\v!first % 1 : first run \or % % 2 : successive run \or \setsystemmode\v!first % 3 : first and only run \or \setsystemmode\v!last % 4 : (extra) last run \fi \to \everysetupsystem \let\m_system_job_suffix\s!unknown \appendtoks \resetsystemmode{suffix-\m_system_job_suffix}% \edef\m_system_job_suffix{\jobsuffix}% \setsystemmode{suffix-\m_system_job_suffix}% \to \everysetupsystem % \appendtoks % \ctxcommand{updatefilenames("\jobame","\inputfilename","\outputfilename")}% % \to \everysetupsystem % Some mechanisms (see x-res-01) use either \jobfilename or % \jobfilename.somesuffix, in which case we need to use the % full name if given or a default (like \jobfilename.xml); % this comes down to replacing the default tex suffix. \def\jobfullname{\jobfilename.\jobfilesuffix} \unexpanded\def\setjobfullname#1% #1 = default if not given {\doifelsenothing\jobfilename {\let\jobfullname\empty} {\doif\jobfilesuffix\c!tex{\edef\jobfullname{\jobfilename.#1}}}} %D There are a couple of system states avaiable: %D %D \starttabulate [|T|T|] %D \NC \type{\jobname} \NC \jobname \NC \NR %D \NC \type{\jobfilename} \NC \jobfilename \NC \NR %D \NC \type{\jobfilesuffix} \NC \jobfilesuffix \NC \NR %D \NC \type{\inputfilename} \NC \inputfilename \NC \NR %D \NC \type{\inputfilebarename} \NC \inputfilebarename \NC \NR %D \NC \type{\inputfilesuffix} \NC \inputfilesuffix \NC \NR %D \NC \type{\outputfilename} \NC \outputfilename \NC \NR %D \NC \type{\operatingsystem} \NC \operatingsystem \NC \NR %D \stoptabulate \appendtoks \edef\outputresolution{\directsystemparameter\c!resolution}% \to \everysetupsystem %D The system modes set by the setup command can be used in %D situations like: %D %D \starttyping %D \startmode[*first] %D \executesystemcommand{cleanupxml text.xml clean-text.xml} %D \stopmode %D %D \starttext %D \typefile{clean-text.xml} %D \stoptext %D \stoptyping \unexpanded\def\setuprandomize[#1]% {\doifsomething{#1} {\begingroup % tex's time is in minutes \scratchcounter\normaltime \processaction [#1] [ \v!small=>\divide\scratchcounter 15, % 900, \v!medium=>\divide\scratchcounter 30, % 1800, \v!big=>\divide\scratchcounter 60, % 3600, \v!normal=>\getnewrandomseed\scratchcounter, \s!default=>\getnewrandomseed\scratchcounter, \s!unknown=>\scratchcounter#1]% \expanded{\setrandomseed{\the\scratchcounter}}% % \writestatus\m!system{randomseed: \the\scratchcounter}% \endgroup}} \setupsystem [\c!directory=, \c!n=0, % 0:unknown 1: one run 2: first 3: successive 4: final run \c!resolution=600,% in dpi, no unit in mkiv % \c!random=, % obsolete here % \c!file=\jobname, % \c!inputfile=\outputfilename, \c!type=unix, % windows is normally less sensitive to handle \c!bodyfont=\normalizedlocalbodyfontsize] % of iets anders %D Remark: windows programs normally handle \type {cr|lf|crlf} but unix %D is more picky, so we default to the \type {cr}. I never understood why %D \type {crlf} was not used in all systems, since it makes most sense. %D But anyway, in \MKIV\ we avoid most of the complications anyway as we %D deal with much at the \LUA\ end. \unexpanded\def\start {\dosingleempty\syst_start} \def\syst_start {\bgroup \iffirstargument \expandafter\syst_start_yes \else \expandafter\syst_start_nop \fi} \def\syst_start_yes[#1]% {\edef\m_syst_start_stop{#1}% \ifx\m_syst_start_stop\empty \let\syst_stop_indeed\donothing \else\ifcsname\e!start\m_syst_start_stop\endcsname \expandafter\let\expandafter\syst_stop_indeed\csname\e!stop\m_syst_start_stop\endcsname \csname\e!start\m_syst_start_stop\expandafter\expandafter\expandafter\endcsname \else \let\syst_stop_indeed\donothing \fi\fi} \def\syst_start_nop[#1]% {\let\syst_stop_indeed\donothing} \unexpanded\def\stop {\syst_stop_indeed \egroup} % \c!before \c!after \c!inbetween \c!commands \c!style \c!color \installcorenamespace{startstop} \installcommandhandler \??startstop {startstop} \??startstop \appendtoks \setuevalue{\e!start\currentstartstop}{\syst_startstop_start {\currentstartstop}}% \setuevalue{\e!stop \currentstartstop}{\syst_startstop_stop {\currentstartstop}}% \setuevalue {\currentstartstop}{\syst_startstop_indeed{\currentstartstop}}% \to \everydefinestartstop \unexpanded\def\syst_startstop_start#1% {\namedstartstopparameter{#1}\c!before \bgroup \def\currentstartstop{#1}% \startstopparameter\c!commands \dostarttagged\t!construct\currentstartstop \usestartstopstyleandcolor\c!style\c!color} \unexpanded\def\syst_startstop_stop#1% {\dostoptagged \egroup \namedstartstopparameter{#1}\c!after} \unexpanded\def\syst_startstop_indeed#1% {\groupedcommand {\def\currentstartstop{#1}% \startstopparameter\c!commands % will become setups \dostarttagged\t!construct\currentstartstop \usestartstopstyleandcolor\c!style\c!color} {\def\currentstartstop{#1}% \dostoptagged \startstopparameter\c!inbetween}} % \unexpanded\def\ignorestartstop[#1]% % {\unexpanded\expandafter\def\csname\e!start#1\expandafter\endcsname\expandafter % {\expandafter\gobbleuntil\csname\e!stop#1\endcsname}} % % \ignorestartstop[bagger] \installcorenamespace{highlight} \installcommandhandler \??highlight {highlight} \??highlight % we could do with less \appendtoks \setuevalue\currenthighlight{\typo_highlights_indeed{\currenthighlight}}% \to \everydefinehighlight \ifdefined\dotaghighlight \else \let\dotaghighlight\relax \fi \unexpanded\def\typo_highlights_indeed#1% inline style/color switch {\dontleavehmode\groupedcommand % otherwise wrong par number in tags {\def\currenthighlight{#1}% \dostarttagged\t!highlight\currenthighlight \usehighlightstyleandcolor\c!style\c!color \dotaghighlight} {\dostoptagged}} \unexpanded\def\defineexpandable {\doifnextoptionalelse {\syst_basics_define_yes\def}% {\syst_basics_define_nop\def}} \unexpanded\def\define {\doifnextoptionalelse {\syst_basics_define_yes{\unexpanded\def}}% {\syst_basics_define_nop{\unexpanded\def}}} \unexpanded\def\syst_basics_define_yes#1[#2]#3#4% {\ifdefined#3% \showmessage\m!system4{\string#3}% \fi \ifcase0#2\relax #1#3{#4}\or #1#3##1{#4}\or #1#3##1##2{#4}\or #1#3##1##2##3{#4}\or #1#3##1##2##3##4{#4}\or #1#3##1##2##3##4##5{#4}\or #1#3##1##2##3##4##5##6{#4}\or #1#3##1##2##3##4##5##6##7{#4}\or #1#3##1##2##3##4##5##6##7##8{#4}\or #1#3##1##2##3##4##5##6##7##8##9{#4}\else #1#3{#4}\fi} \unexpanded\def\syst_basics_define_nop#1#2#3% {\ifdefined#2% \showmessage\m!system4{\string#2}% \fi #1#2{#3}} % new: % % \checked\def \whatever#alpha#beta{#alpha + #beta} % \checked\edef\whatever#alpha#beta{#alpha + #beta} \unexpanded\def\unique#1#2% {\ifdefined#2% \showmessage\m!system4{\string#2}% \expandafter#1\expandafter\gobbleddefinition \else \expandafter#1% \fi#2} \unexpanded\def\checked#1#2% {\ifdefined#2% \showmessage\m!system4{\string#2}% \fi #1#2} % \startluacode % local formatters = string.formatters % local contextsprint, ctxcatcodes, prtcatcodes = context.sprint, tex.ctxcatcodes, tex.prtcatcodes % local match, gmatch, rep = string.match, string.gmatch, string.rep % local empty = { % "single", % "double", % "triple", % "quadruple", % "quintuple", % } % local check = { % "first", % "second", % "third", % "fourth", % "fifth", % } % function commands.define(str) % -- we could store the defaults in lua and call lua instead but why bother % local arg, cmd = match(str,"(.*)\\(.-)$") % local a = { } % for s in gmatch(arg,"%[(.-)%]") do % a[#a+1] = s % end % local n = tonumber(a[#a]) % if n then % a[#a] = nil % else % n = 0 % end % contextsprint(ctxcatcodes,formatters["\\unexpanded\\def\\%s"](cmd)) % if #a > 0 then % contextsprint(prtcatcodes,formatters["{\\do%sempty\\user_defined_%s}"](empty[#a],cmd)) % contextsprint(prtcatcodes,formatters["\\def\\user_defined_%s"](cmd)) % for i=1,#a do % contextsprint(ctxcatcodes,formatters["[#%s]"](i)) % end % contextsprint(ctxcatcodes,"{") % for i=#a,1,-1 do % contextsprint(ctxcatcodes,formatters["\\if%sargument"](check[i])) % contextsprint(prtcatcodes,formatters["\\def\\next{\\user_defined_indeed_%s"](cmd)) % for j=1,#a-i do % contextsprint(ctxcatcodes,formatters["[%s]"](a[j])) % end % for j=1,i do % contextsprint(ctxcatcodes,formatters["[#%s]"](j)) % end % contextsprint(ctxcatcodes,"}") % if i == 1 then % contextsprint(ctxcatcodes,rep("\\fi",#a)) % else % contextsprint(ctxcatcodes,"\\else") % end % end % contextsprint(ctxcatcodes,"\\next}") % contextsprint(prtcatcodes,formatters["\\def\\user_defined_indeed_%s"](cmd)) % for i=1,#a do % contextsprint(ctxcatcodes,formatters["[#%s]"](i)) % end % end % for i=1,n do % contextsprint(ctxcatcodes,formatters["#%s"](#a+i)) % end % end % \stopluacode % % \unexpanded\def\define#1#{\ctxcommand{define([[\detokenize{#1}]])}} % % \starttext % \define[2]\whatevera{#1+#2} % \whatevera{A}{B} % \define[me][too][2]\whateverb{#1+#2+#3+#4} % \whateverb[A]{B}{C} % \whateverb[A][B]{C}{D} % \define[alpha][beta][gamma][delta]\whateverc{#1+#2+#3+#4} % \whateverc[P][Q] % \stoptext %D This is a checked variant of \type {\getvalue}. \unexpanded\def\macroname#1% brrr {\csname\ifcsname#1\endcsname#1\else\s!empty\fi\endcsname} % %D A weird one that I probably needed once, so it might as well become % %D obsolete. % % \unexpanded\def\usecommands#1% % {\begingroup % \def\docommand##1{\setbox\scratchbox\hbox{\csname\string##1\endcsname##1}}% % \processcommalist[#1]\docommand % \endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-mis.lua0000644000175000017500000001107312161703335024133 0ustar norbertnorbertif not modules then modules = { } end modules ['font-mis'] = { version = 1.001, comment = "companion to mtx-fonts", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local next = next local lower, strip = string.lower, string.strip -- also used in other scripts so we need to check some tables: fonts = fonts or { } fonts.helpers = fonts.helpers or { } local helpers = fonts.helpers fonts.handlers = fonts.handlers or { } local handlers = fonts.handlers handlers.otf = handlers.otf or { } local otf = handlers.otf otf.version = otf.version or 2.743 otf.cache = otf.cache or containers.define("fonts", "otf", otf.version, true) function otf.loadcached(filename,format,sub) -- no recache when version mismatch local name = file.basename(file.removesuffix(filename)) if sub == "" then sub = false end local hash = name if sub then hash = hash .. "-" .. sub end hash = containers.cleanname(hash) local data = containers.read(otf.cache, hash) if data and not data.verbose then otf.enhancers.unpack(data) return data else return nil end end local featuregroups = { "gsub", "gpos" } function fonts.helpers.getfeatures(name,t,script,language) -- maybe per font type local t = lower(t or (name and file.suffix(name)) or "") if t == "otf" or t == "ttf" or t == "ttc" or t == "dfont" then local filename = resolvers.findfile(name,t) or "" if filename ~= "" then local data = otf.loadcached(filename) if data and data.resources and data.resources.features then return data.resources.features else local ff = fontloader.open(filename) if ff then local data = fontloader.to_table(ff) fontloader.close(ff) local features = { } for k=1,#featuregroups do local what = featuregroups[k] local dw = data[what] if dw then local f = { } features[what] = f for i=1,#dw do local d = dw[i] local dfeatures = d.features if dfeatures then for i=1,#dfeatures do local df = dfeatures[i] local tag = strip(lower(df.tag)) local ft = f[tag] if not ft then ft = {} f[tag] = ft end local dfscripts = df.scripts for i=1,#dfscripts do local ds = dfscripts[i] local scri = strip(lower(ds.script)) local fts = ft[scri] if not fts then fts = {} ft[scri] = fts end local dslangs = ds.langs for i=1,#dslangs do local lang = dslangs[i] lang = strip(lower(lang)) if scri == script then if lang == language then fts[lang] = 'sl' else fts[lang] = 's' end else if lang == language then fts[lang] = 'l' else fts[lang] = true end end end end end end end end end return features end end end end return nil, nil end context-2013.05.28.20130704/texmf-dist/tex/context/base/math-arr.mkii0000644000175000017500000004035511754241457024300 0ustar norbertnorbert%D \module %D [ file=math-ext, %D version=2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Arrows, %D author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Arrows} \unprotect %D These will be generalized! Is it still needed in \MKIV? %D We next define extensible arrows. Extensible arrows are arrows that %D change their length according to the width of the text to be placed %D above and below the arrow. Since we need to define a lot of arrows, %D we first define some helper macros. The basic idea is to measure %D the width of the box to be placed above and below the arrow, and %D make the \quotation{body} of the arrow as long as the bigger of the %D two widths. \def\mtharrfactor{1} \def\mtharrextra {0} \def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel {\begingroup \def\mtharrfactor{1}% \def\mtharrextra {0}% \processaction[#1] % will be sped up [ \v!none=>\def\mtharrfactor{0}, \v!small=>\def\mtharrextra{10}, \v!medium=>\def\mtharrextra{15}, \v!big=>\def\mtharrextra{20}, \v!normal=>, \v!default=>, \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]% \mathsurround\zeropoint \muskip0=\thirdoffourarguments #2mu \muskip2=\fourthoffourarguments #2mu \muskip4=\firstoffourarguments #2mu \muskip6=\secondoffourarguments #2mu \muskip0=\mtharrfactor\muskip0 \advance\muskip0 \mtharrextra mu \muskip2=\mtharrfactor\muskip2 \advance\muskip2 \mtharrextra mu \setbox0\hbox{$\scriptstyle \mkern\muskip4\relax \mkern\muskip0\relax #5\relax \mkern\muskip2\relax \mkern\muskip6\relax $}% \setbox4\hbox{#3\displaystyle}% \dimen0\wd0 \ifdim\wd4>\dimen0 \dimen0\wd4 \fi \setbox2\hbox{$\scriptstyle \mkern\muskip4\relax \mkern\muskip0\relax #4\relax \mkern\muskip2\relax \mkern\muskip6\relax $}% \ifdim\wd2>\dimen0 \dimen0\wd2 \fi \setbox4\hbox to \dimen0{#3\displaystyle}% \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits^{\box0}_{\box2}} \endgroup} \let\domthxarrsingle\domthxarr %D There are some arrows which are created by stacking two arrows. The next %D macro helps in defining such \quotation{double arrows}. \def\domthxarrdouble#1#2#3#4#5#6#7% opt l r sp rs top bot {\mathrel {\scratchdimen.32ex\relax % was .22, todo: make configurable \setbox0\hbox{$\domthxarr{#1}{#2}{#4}{\phantom{#6}}{#7}$}% \setbox2\hbox{$\domthxarr{#1}{#3}{#5}{#6}{\phantom{#7}}$}% \raise\scratchdimen\box0 \kern-\wd2 \lower\scratchdimen\box2}} %D \macros{definematharrow} %D %D Macro for defining new arrows. We can define two types of %D arrows|<|single arrows and double arrows. Single arrows are defined %D as %D %D \starttyping %D \definematharrow [xrightarrow] [0359] [\rightarrowfill] %D \stoptyping %D %D The first argument is the name of the arrow (\tex{xrightarrow} in %D this case.) The second argument consists of a set of 4 numbers and %D specify the spacing correction in math units~\type{mu}. These %D numbers define: %D %D \startlines %D 1st number: arrow||tip correction %D 2nd number: arrow||tip correction %D 3rd number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra}) %D 4th number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra}) %D \stoplines %D %D The third argument is the name of the extensible fill. The third %D argument is optional when the arrow is redefined later (this is %D useful for font specific tweaking of the skips.) For example, %D %D \startbuffer %D \math{\xrightarrow{above}} %D \definematharrow[xrightarrow][0000] %D \math{\xrightarrow{above}} %D \definematharrow[xrightarrow][55{50}{50}] %D \math{\xrightarrow{above}} %D \stopbuffer %D \typebuffer gives {\getbuffer} %D %D The double arrows are defined as follows %D %D \starttyping %D \definematharrow [xrightleftharpoons] [3095,0359] %D [\rightharpoonupfill,\leftharpoondownfill] %D \stoptyping %D %D The second and the third set of arguments consist of comma %D separated values. The first element of the second argument %D (\type{3095}) corresponds to the spacing correction of top arrow %D fill (\tex{rightarrowupfill}). Similarly, \type{0359} corresponds %D to bottom arrow fill \tex{leftharpoondownfill}). Stacking them on %D top of each other we get $\xrightleftharpoons[big]{above}{below}$. %D The following math arrows are defined %D %D \placetable[none]{}{\starttable[|l|m|] %D \NC \tex{xrightarrow } \NC \xrightarrow [big] \NC \NR %D \NC \tex{xleftarrow } \NC \xleftarrow [big] \NC \NR %D \NC \tex{xequal } \NC \xequal [big] \NC \NR %D \NC \tex{xRightarrow } \NC \xRightarrow [big] \NC \NR %D \NC \tex{xLeftarrow } \NC \xLeftarrow [big] \NC \NR %D \NC \tex{xLeftrightarrow } \NC \xLeftrightarrow [big] \NC \NR %D \NC \tex{xleftrightarrow } \NC \xleftrightarrow [big] \NC \NR %D \NC \tex{xmapsto } \NC \xmapsto [big] \NC \NR %D \NC \tex{xtwoheadrightarrow } \NC \xtwoheadrightarrow [big] \NC \NR %D \NC \tex{xtwoheadleftarrow } \NC \xtwoheadleftarrow [big] \NC \NR %D \NC \tex{xrightharpoondown } \NC \xrightharpoondown [big] \NC \NR %D \NC \tex{xrightharpoonup } \NC \xrightharpoonup [big] \NC \NR %D \NC \tex{xleftharpoondown } \NC \xleftharpoondown [big] \NC \NR %D \NC \tex{xleftharpoonup } \NC \xleftharpoonup [big] \NC \NR %D \NC \tex{xhookleftarrow } \NC \xhookleftarrow [big] \NC \NR %D \NC \tex{xhookrightarrow } \NC \xhookrightarrow [big] \NC \NR %D \NC \tex{xleftrightharpoons } \NC \xleftrightharpoons [big] \NC \NR %D \NC \tex{xrightleftharpoons } \NC \xrightleftharpoons [big] \NC \NR %D \stoptable} \def\definematharrow {\doquadrupleargument\dodefinematharrow} \def\dodefinematharrow[#1][#2][#3][#4]% name type[none|both] template command {\iffourthargument \executeifdefined{dodefine#2arrow}\gobblethreearguments{#1}{#3}{#4}% \else\ifthirdargument \dodefinebotharrow{#1}{#2}{#3}% \else\ifsecondargument \redefinebotharrow{#1}{#2}{#3}% \fi\fi\fi} \def\redefinebotharrow#1#2#3% real dirty, this overload! {\doifdefined{#1} {\pushmacro\dohandlemtharrow \def\dohandlemtharrow[##1][##2]{\setvalue{#1}{\dohandlemtharrow[#2][##2]}}% % == \def\dohandlemtharrow[##1][##2]{\dodefinebotharrow{#1}{#2}{##2}}% \getvalue{#1}% \popmacro\dohandlemtharrow}} \def\dodefinebotharrow#1#2#3% {\setvalue{#1}{\dohandlemtharrow[#2][#3]}} \def\dohandlemtharrow {\dotripleempty\doxmtharrow} \def\doxmtharrow[#1][#2][#3]% #3 == optional arg {\def\dodoxmtharrow{\dododoxmtharrow[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} \dodoublegroupempty\dodoxmtharrow} \def\dododoxmtharrow[#1,#2,#3][#4,#5,#6][#7]#8#9% [3] is the optional arg {\edef\!!stringa{#2}% \ifx\!!stringa\empty \ifsecondargument \mathrel{\domthxarrsingle{#7}{#1}{#4}{#8}{#9}}% \else \mathrel{\domthxarrsingle{#7}{#1}{#4}{}{#8}}% \fi \else \ifsecondargument \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{#8}{#9}}% \else \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{}{#8}}% \fi \fi} % Adapted from amsmath. %D \macros{mtharrowfill,defaultmtharrowfill} %D %D To extend the arrows we need to define a \quotation{math arrow %D fill}. This command takes 8 arguments: the first four correspond %D the second argument of \tex{definematharrow} explained above. The %D other three specify the tail, body and head of the arrow. The last %D argument specifies the math-mode in which the arrow is drawn. %D \tex{defaultmtharrowfill} has values tweaked to match Latin Modern %D fonts. For fonts that are significantly different (e.g. cows) a %D different set of values need to be determined. \def\mtharrowfill#1#2#3#4#5#6#7#8% {$\mathsurround 0pt \thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip \relax#8#5% \mkern-#1mu \cleaders\hbox{$#8\mkern -#2mu#6\mkern -#3mu$}\hfill \mkern-#4mu#7$} \def\defaultmtharrowfill{\mtharrowfill 7227} %D We now define some arrow fills that will be used for defining the %D arrows. Plain \TEX\ already defines \tex{leftarrowfill} and %D \tex{rightarrowfill}. The \tex{defaultmtharrowfill} command defines an %D arrowfill that takes an argument (so that it can also be used %D with over and under arrows). However the Plain \TEX\ definitions of %D \tex{leftarrowfill} and \tex{rightarrowfill} do not take this extra %D argument. To be backward compatible with Plain \TEX, we define two %D arrowfills: \tex{specrightarrowfill} which takes an extra argument, and %D \tex{rightarrowfill} which does not. \def\specrightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow} \def\specleftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar} \def\rightarrowfill {\specrightarrowfill \textstyle} \def\leftarrowfill {\specleftarrowfill \textstyle} \def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar} \def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow} \def\Leftarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Relbar} \def\Leftrightarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Rightarrow} \def\leftrightarrowfill {\defaultmtharrowfill \leftarrow \relbar \rightarrow} \def\mapstofill {\defaultmtharrowfill{\mapstochar\relbar} \relbar \rightarrow} \def\twoheadrightarrowfill{\defaultmtharrowfill \relbar \relbar \twoheadrightarrow} \def\twoheadleftarrowfill {\defaultmtharrowfill \twoheadleftarrow \relbar \relbar} \def\rightharpoondownfill {\defaultmtharrowfill \relbar \relbar \rightharpoondown} \def\rightharpoonupfill {\defaultmtharrowfill \relbar \relbar \rightharpoonup} \def\leftharpoondownfill {\defaultmtharrowfill \leftharpoondown \relbar \relbar} \def\leftharpoonupfill {\defaultmtharrowfill \leftharpoonup \relbar \relbar} \def\hookleftfill {\defaultmtharrowfill \leftarrow \relbar{\relbar\joinrel\rhook}} \def\hookrightfill {\defaultmtharrowfill{\lhook\joinrel\relbar}\relbar \rightarrow} \def\relfill {\defaultmtharrowfill \relbar \relbar \relbar} \def\triplerelbar {\mathrel\equiv} \def\triplerelfill{\defaultmtharrowfill\triplerelbar\triplerelbar\triplerelbar} \def\singlebond{{\xrel}} % or \def\singlebond{{\xrel[2]}} \def\doublebond{{\xequal}} \def\triplebond{{\xtriplerel}} %D Now we define most commonly used arrows. These include arrows %D defined in \filename{amsmath.sty}, \filename{extarrows.sty}, %D \filename{extpfel.sty} and \filename{mathtools.sty} packages for %D \LATEX\ (plus a few more). \definematharrow [xrightarrow] [0359] [\specrightarrowfill] \definematharrow [xleftarrow] [3095] [\specleftarrowfill] \definematharrow [xequal] [0099] [\equalfill] \definematharrow [xRightarrow] [0359] [\Rightarrowfill] \definematharrow [xLeftarrow] [3095] [\Leftarrowfill] \definematharrow [xLeftrightarrow] [0099] [\Leftrightarrowfill] \definematharrow [xleftrightarrow] [0099] [\leftrightarrowfill] \definematharrow [xmapsto] [3599] [\mapstofill] \definematharrow [xtwoheadrightarrow] [5009] [\twoheadrightarrowfill] \definematharrow [xtwoheadleftarrow] [0590] [\twoheadleftarrowfill] \definematharrow [xrightharpoondown] [0359] [\rightharpoondownfill] \definematharrow [xrightharpoonup] [0359] [\rightharpoonupfill] \definematharrow [xleftharpoondown] [3095] [\leftharpoondownfill] \definematharrow [xleftharpoonup] [3095] [\leftharpoonupfill] \definematharrow [xhookleftarrow] [3095] [\hookleftfill] \definematharrow [xhookrightarrow] [0395] [\hookrightfill] \definematharrow [xrel] [0099] [\relfill] \definematharrow [xtriplerel] [0099] [\triplerelfill] \definematharrow [xrightoverleftarrow] [0359,3095] [\specrightarrowfill,\specleftarrowfill] \definematharrow [xleftrightharpoons] [3399,3399] [\leftharpoonupfill,\rightharpoondownfill] \definematharrow [xrightleftharpoons] [3399,3399] [\rightharpoonupfill,\leftharpoondownfill] %D These arrows can be used as follows: %D %D \startbuffer %D \startformula \xrightarrow{stuff on top}\stopformula %D \startformula \xrightarrow{}{stuff on top}\stopformula %D \startformula \xrightarrow{stuff below}{}\stopformula %D \startformula \xrightarrow{stuff below}{stuff on top}\stopformula %D %D \startformula \xleftarrow [none]{stuff below}{stuff on top}\stopformula %D \startformula \xleftarrow [small]{stuff below}{stuff on top}\stopformula %D \startformula \xleftarrow [medium]{stuff below}{stuff on top}\stopformula %D \startformula \xleftarrow [big]{stuff below}{stuff on top}\stopformula %D \stopbuffer %D %D \typebuffer which gives \getbuffer %D \macros{definemathoverarrow,defineunderarrow} %D %D These macros for define math-overarrows are adapted from %D \filename{amsmath.sty} \def\definemathoverarrow {\dotripleargument\dodefinemathoverarrow} \def\dodefinemathoverarrow[#1][#2][#3]% {\ifthirdargument \setvalue{#1}{\dohandlemathoverarrow[#2][#3]}% \else \setvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}% \fi} \def\dohandlemathoverarrow[#1][#2]% {\mathpalette{\dodohandlemathoverarrow{#1}{#2}}} %D Note: \filename{math-pln.tex} has \type{\kern-\onepoint} and %D \filename{amsmath.sty} does not. We keep the kern amount %D configurable. This is useful for harpoons. \def\dodohandlemathoverarrow#1#2#3#4% {\vbox{\ialign{##\crcr #2#3\crcr \noalign{\kern#1\nointerlineskip}% $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr}}} %D Now the under arrows \def\definemathunderarrow {\dotripleargument\dodefinemathunderarrow} %D For underarrows the default kern is 0.3ex \def\dodefinemathunderarrow[#1][#2][#3]% {\ifthirdargument \setvalue{#1}{\dohandlemathunderarrow[#2][#3]}% \else \setvalue{#1}{\dohandlemathunderarrow[0.3ex][#2]}% \fi} \def\dohandlemathunderarrow[#1][#2]% {\mathpalette{\dodohandlemathunderarrow{#1}{#2}}} \def\dodohandlemathunderarrow#1#2#3#4% {\vtop{\ialign{##\crcr $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr \noalign{\nointerlineskip\kern#1}% #2#3\crcr}}} %D Now we define the arrows \definemathoverarrow [overleftarrow] [\specleftarrowfill] \definemathoverarrow [overrightarrow] [\specrightarrowfill] \definemathoverarrow [overleftrightarrow] [\leftrightarrowfill] \definemathoverarrow [overtwoheadrightarrow] [\twoheadrightarrowfill] \definemathoverarrow [overtwoheadleftarrow] [\twoheadleftarrowfill] \definemathoverarrow [overrightharpoondown] [1pt] [\rightharpoondownfill] \definemathoverarrow [overrightharpoonup] [\rightharpoonupfill] \definemathoverarrow [overleftharpoondown] [1pt] [\leftharpoondownfill] \definemathoverarrow [overleftharpoonup] [\leftharpoonupfill] \definemathunderarrow [underleftarrow] [\specleftarrowfill] \definemathunderarrow [underrightarrow] [\specrightarrowfill] \definemathunderarrow [underleftrightarrow] [\leftrightarrowfill] \definemathunderarrow [undertwoheadrightarrow][\twoheadrightarrowfill] \definemathunderarrow [undertwoheadleftarrow] [\twoheadleftarrowfill] \definemathunderarrow [underrightharpoondown] [\rightharpoondownfill] \definemathunderarrow [underrightharpoonup] [\rightharpoonupfill] \definemathunderarrow [underleftharpoondown] [\leftharpoondownfill] \definemathunderarrow [underleftharpoonup] [\leftharpoonupfill] %D These can be used as follows: %D %D \startbuffer %D $\overleftarrow{A}$ $\overleftarrow{ABC}$ %D $a_{\overleftarrow{A}}$ $b_{\overleftarrow{ABC}}$ %D \stopbuffer %D \typebuffer which gives \getbuffer %D TODO: Possibly have a single arrow command define all the arrows. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-txt.mkii0000644000175000017500000006265611754241457024326 0ustar norbertnorbert%D \module %D [ file=page-txt, % copied from main-001, %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Texts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \setuplayouttext in manual \writestatus{loading}{ConTeXt Page Macros / Texts} \unprotect \let\dodummypageskip\gobbleoneargument % obsolete %D Interfacing between this and other modules is handled by %D the following macros. The current state of a text line %D (header, footer, etc.) is checked by: %D %D \starttyping %D \resetlayouttextlines %D \stoptyping %D %D The main text box is finished by the following macro: %D %D \starttyping %D \getmainbox <\vbox|\unvbox> %D \stoptyping %D %D The text lines are collected with: %D %D \starttyping %D \gettextboxes %D \stoptyping %D %D It is possible to extens the default content of the text %D areas by appending content to the following token list %D registers: \newtoks\toptextcontent \newtoks\leftedgetextcontent \newtoks\headertextcontent \newtoks\leftmargintextcontent \newtoks\footertextcontent \newtoks\rightmargintextcontent \newtoks\bottomtextcontent \newtoks\rightedgetextcontent \newtoks\texttextcontent %D \macros %D {setuptop, setupheader, setuptext, %D setupfooter, setupbottom} %D %D The macros in this module sometimes look a bit more complicated %D than needed, which is a direct result of the fact that their %D ancestors are quite old and upward compatibility is a must. %D %D \showsetup{setuptop} %D \showsetup{setupheader} %D \showsetup{setuptext} %D \showsetup{setupfooter} %D \showsetup{setupbottom} \def\setuplayouttext {\dotripleempty\dosetuplayouttext} \def\dosetuplayouttext[#1][#2][#3]% beware, non global {\ifthirdargument \getparameters[\??tk#1#2][#3]% \else %\getparameters[\??tk#1\v!text][#2]% \edef\previoustextstate{\getvalue{\??tk#1\c!state}}% \getparameters[\??tk#1][#2]% \doifnotvalue{\??tk#1\c!state}\previoustextstate {%\checkcurrentlayout % no \edef\currenttextstate{\getvalue{\??tk#1\c!state}}% % speed optimization (calculating backgrounds takes time) \doifcommon{\previoustextstate,\currenttextstate}{\v!high,\v!none} {\calculatevsizes \recalculatebackgrounds \recalculatelogos}}% \fi} \def\setuptop {\dotripleempty\dosetuplayouttext[\v!top]} \def\setupheader {\dotripleempty\dosetuplayouttext[\v!header]} \def\setuptext {\dotripleempty\dosetuplayouttext[\v!text]} \def\setupfooter {\dotripleempty\dosetuplayouttext[\v!footer]} \def\setupbottom {\dotripleempty\dosetuplayouttext[\v!bottom]} %D \macros %D {noheaderandfooterlines,notopandbottomlines} %D %D Although not really needed, the following shortcuts %D sometimes come in handy. %D %D \showsetup{noheaderandfooterlines} %D \showsetup{notopandbottomlines} \def\noheaderandfooterlines {\setupheader[\c!state=\v!empty]% \setupfooter[\c!state=\v!empty]} \def\notopandbottomlines {\setuptop [\c!state=\v!empty]% \setupbottom[\c!state=\v!empty]} %D \macros %D {setuptoptexts, setupheadertexts, setuptexttexts, %D setupfootertexts, setupbottomtexts} %D %D The next macros take one or more arguments. The exact setup %D depends on the number of arguments. Although not that %D intuitive, the current scheme evolved out of the original. %D When margin and edge texts as well as middle texts showed %D up, the current odd|/|even scheme surfaced. %D %D \showsetup{setuptoptexts} %D \showsetup{setupheadertexts} %D \showsetup{setuptexttexts} %D \showsetup{setupfootertexts} %D \showsetup{setupbottomtexts} \def\setuptoptexts {\dosixtupleempty\dosetuptexts[\v!top]} \def\setupheadertexts {\dosixtupleempty\dosetuptexts[\v!header]} \def\setuptexttexts {\dosixtupleempty\dosetuptexts[\v!text]} \def\setupfootertexts {\dosixtupleempty\dosetuptexts[\v!footer ]} \def\setupbottomtexts {\dosixtupleempty\dosetuptexts[\v!bottom]} %D The left, right and center variables can also be set %D directly using the previously discussed macros. \def\dosetuptexts[#1][#2][#3][#4][#5][#6]% {\ifsixthargument \setvalue{\??tk#1#2\c!lefttext}% {\dodoubletexts{\??tk#1}{#2}% {\c!leftstyle \c!leftcolor \c!leftwidth }{#3}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#6}}% \setvalue{\??tk#1#2\c!righttext}% {\dodoubletexts{\??tk#1}{#2}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}% {\c!leftstyle \c!leftcolor \c!leftwidth }{#5}}% \else\iffifthargument \setvalue{\??tk#1\v!text\c!lefttext}% {\dodoubletexts{\??tk#1}\v!text {\c!leftstyle \c!leftcolor \c!leftwidth }{#2}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#5}}% \setvalue{\??tk#1\v!text\c!righttext}% {\dodoubletexts{\??tk#1}\v!text {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}% {\c!leftstyle \c!leftcolor \c!leftwidth }{#4}}% \else\iffourthargument \setvalue{\??tk#1#2\c!lefttext}% {\dodoubletexts{\??tk#1}{#2} {\c!leftstyle\c!leftcolor\c!leftwidth}{#3}% {\c!leftstyle\c!leftcolor\c!leftwidth}{#3}}% \setvalue{\??tk#1#2\c!righttext}% {\dodoubletexts{\??tk#1}{#2} {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}}% \else\ifthirdargument \setvalue{\??tk#1\v!text\c!lefttext}% {\dodoubletexts{\??tk#1}\v!text {\c!leftstyle\c!leftcolor\c!leftwidth}{#2}% {\c!leftstyle\c!leftcolor\c!leftwidth}{#2}}% \setvalue{\??tk#1\v!text\c!righttext}% {\dodoubletexts{\??tk#1}\v!text {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}}% \else\ifsecondargument % new \letvalue{\??tk#1\v!text\c!lefttext }\empty \letvalue{\??tk#1\v!text\c!righttext}\empty \setvalue{\??tk#1\v!text\c!middletext }% {\dosingletexts{\??tk#1}\v!text\c!style\c!color\c!width{#2}}% \else \dosixtupleempty\dosetuptexts[#1][\v!text][][][][]% \dosixtupleempty\dosetuptexts[#1][\v!margin][][][][]% \dosixtupleempty\dosetuptexts[#1][\v!edge ][][][][]% \fi\fi\fi\fi\fi} %D Left and right texts are swapped on odd and even pages, but %D only when double sided typesetting is enabled. \def\dodoubletexts#1#2#3#4#5#6% {\doifoddpageelse {\dosingletexts{#1}{#2}#3{#4}} % #3 => provides three arguments {\dosingletexts{#1}{#2}#5{#6}}} % #5 => provides three arguments %D The next macro will be cleaned up amd made less messy and %D dependent. \def\placetextlinestrut#1% {\doifvalue{#1\c!strut}\v!yes{\setstrut\strut}} \def\dosingletexts#1#2#3#4#5#6% {\bgroup \defconvertedargument\ascii{#6}% \doifsomething\ascii {\doattributes{#1#2}#3#4% {\placetextlinestrut{#1}% here ! %\doifdefinedelse{\??mk\ascii\c!coupling} % brrr \doifelsemarking\ascii {\dolimitatetexts{#1#2#5}{\getmarking[\ascii][\v!first]}} {\ConvertConstantAfter\doifelse\v!pagenumber{#6} \@@plaatspaginanummer {\ConvertConstantAfter\doifelse\v!date{#6} {\currentdate} {% #6{}{}{} -> {} needed for macros that look % ahead, like \uniqueMPgraphic \opeenregel\dolimitatetexts{#1#2#5}{#6{}{}{}}}}}}}% \egroup} %D When specified, the texts are automatically limited in %D length. \def\dolimitatetexts#1#2% {\doifelsevaluenothing{#1}{#2}{\limitatetext{#2}{\getvalue{#1}}{\unknown}}} %D The placement of text is hooked into the token lists %D associated to the area at hand. \appendtoks \placelayouttextline\v!top \topheight \to \toptextcontent \appendtoks \placelayouttextline\v!header\headerheight \to \headertextcontent \appendtoks \placelayouttextline\v!text \textheight \to \texttextcontent \appendtoks \placelayouttextline\v!footer\footerheight \to \footertextcontent \appendtoks \placelayouttextline\v!bottom\bottomheight \to \bottomtextcontent %D Texts can be disabled, moved up and ignored, depending in %D the \type {status} variable. This is handled by the next %D couple of macros. \def\settextlinestatus #1{\edef\textlinestatus{\csname\??tk#1\c!state\endcsname}} %def\resettextlinestatus#1{\letgvalue{\??tk#1\c!state}\v!normal} \def\resettextlinestatus#1% postpone {\setgvalue{\??tk#1\s!reset}{\letgvalue{\??tk#1\c!state}\v!normal}} \def\placelayouttextline#1% #2 {\settextlinestatus{#1}% \csname\string\placelayouttextline \ifundefined{\string\placelayouttextline\textlinestatus}% \s!unknown \else \textlinestatus \fi \endcsname{#1}} % {#2} \def\doifelselayouttextline#1% shown or not {\doifinsetelse{\getvalue{\??tk#1\c!state}}{\v!normal,\v!start}} \def\doifelselayoutsomeline#1% present or not {\edef\!!stringa{\csname\??tk#1\c!state\endcsname}% \ifx\!!stringa\v!none \@EA\secondoftwoarguments \else\ifx\!!stringa\v!high \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi\fi} % \doplacelayouttextline does the actual placement (when a non-zero height) \newconditional\resyncaftertextline \setvalue{\string\placelayouttextline\v!normal }{\doplacelayouttextline} \setvalue{\string\placelayouttextline }{\doplacelayouttextline} \setvalue{\string\placelayouttextline\v!none}#1#2% {} \setvalue{\string\placelayouttextline\v!high}#1#2% {\global\settrue\resyncaftertextline \resettextlinestatus{#1}} \setvalue{\string\placelayouttextline\v!empty}#1#2% {\resettextlinestatus{#1}} \setvalue{\string\placelayouttextline\v!start}#1#2% {\resettextlinestatus{#1}% \doplacelayouttextline{#1}{#2}} \setvalue{\string\placelayouttextline\v!stop}#1#2% {} \setvalue{\string\placelayouttextline\v!nomarking}#1#2% {\bgroup \resettextlinestatus{#1}% \let\dogetmarking\nogetmarking \doplacelayouttextline{#1}{#2}% \egroup} \setvalue{\string\placelayouttextline\s!unknown}#1#2% {\global\settrue\resyncaftertextline \bgroup % new \resettextlinestatus{#1}% \getvalue{\??tk#1\textlinestatus}% \getvalue{\??tk#1\v!text \textlinestatus}% \getvalue{\??tk#1\v!margin\textlinestatus}% \getvalue{\??tk#1\v!edge \textlinestatus}% \doplacelayouttextline{#1}{#2}% \egroup} %D The following macro has to be called after a page %D is flushed. \def\resetlayouttextline#1% {\getvalue {\??tk#1\s!reset}% \letgvalue{\??tk#1\s!reset}\relax} \def\resetlayouttextlines {\resetlayouttextline\v!top \resetlayouttextline\v!header \resetlayouttextline\v!text \resetlayouttextline\v!footer \resetlayouttextline\v!bottom \ifconditional\resyncaftertextline \doglobal\calculatevsizes \recalculatebackgrounds \recalculatelogos \global\setfalse\resyncaftertextline \fi} % \settext[header][text][middle][xxx][yyy] \def\settextcontent {\doquintupleempty\dosettextcontent} \def\dosettextcontent[#1][#2][#3][#4][#5]% header text middle text/text {\iffifthargument \setvalue{\??tk#1#2\executeifdefined{:\c!text:#3:}\c!middletext}% {\dodoubletexts{\??tk#1}{#2}% {\c!leftstyle \c!leftcolor \c!leftwidth }{#4}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#5}}% \else\iffourthargument \setvalue{\??tk#1#2\executeifdefined{:\c!text:#3:}\c!middletext}% {\dodoubletexts{\??tk#1}{#2}% {\c!leftstyle \c!leftcolor \c!leftwidth }{#4}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}}% \else\ifthirdargument \setvalue{\??tk#1#2\c!middletext}% {\dodoubletexts{\??tk#1}{#2}% {\c!leftstyle \c!leftcolor \c!leftwidth }{#3}% {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}}% \fi\fi\fi} \def\resettextcontent {\dotripleempty\doresettextcontent} \def\doresettextcontent[#1][#2][#3]% header text middle {\ifthirdargument \letvalue{\??tk#1#2\executeifdefined{:\c!text:#3:}\c!middletext}\empty \else\ifsecondargument \letvalue{\??tk#1#2\c!lefttext }\empty \letvalue{\??tk#1#2\c!middletext}\empty \letvalue{\??tk#1#2\c!righttext }\empty \fi\fi} \let\settext \settextcontent % downward compatibility \let\resettext\resettextcontent % downward compatibility \setvalue{:\c!middle:\c!text:}{\c!middletext} \setvalue{:\c!left :\c!text:}{\c!lefttext } \setvalue{:\c!right :\c!text:}{\c!righttext } %D The next series of macros is not that easy to read, %D because they hook into the main page building macros. By %D using token list registers for the text content, we can %D easily hook in other code, like menu generators. %D %D Beware: the token lists are always expanded, also when the %D height of an area is zero. This is because reset actions can %D be part of them. \newbox\scratchpagebox \def\gettextboxes {\setbox\scratchpagebox\vbox {\dontcomplain \calculatereducedvsizes \swapmargins \offinterlineskip \vskip\dimexpr-\topheight-\topdistance\relax \the\toptextcontent \vskip\dimexpr\topheight+\topdistance\relax \the\headertextcontent \vskip\dimexpr\headerheight+\headerdistance\relax \placepositionanchors \vskip-\textheight \the\texttextcontent \vskip\textheight \the\everyendoftextbody \vskip\footerdistance \the\footertextcontent \vskip\dimexpr\footerheight+\bottomdistance\relax \the\bottomtextcontent \vskip\bottomheight \vfilll}% \smashbox\scratchpagebox \box\scratchpagebox} \def\getmainbox#1#2% {\setbox\scratchpagebox\vbox {\offinterlineskip % na \paginaletter ! \calculatereducedvsizes \calculatehsizes \swapmargins \vskip\dimexpr\headerheight+\headerdistance+\layoutparameter\c!textdistance\relax \hbox to \makeupwidth {\bgroup \swapmargins \goleftonpage \ifdim\leftedgewidth>\zeropoint \the\leftedgetextcontent \hskip\leftedgewidth \fi \hskip\leftedgedistance \ifdim\leftmarginwidth>\zeropoint \the\leftmargintextcontent \hskip\leftmarginwidth \fi \hskip\leftmargindistance \egroup \mkprocesspagecontents{#2}% \settextpagecontent\scratchpagebox{#1}{#2}% \setbox\scratchpagebox\vbox % can we avoid this extra box {\startlayoutcomponent{textbody}{text body}% \box\scratchpagebox \stoplayoutcomponent}% \addtextbackground\scratchpagebox \addtextgridlayer\scratchpagebox \localstarttextcolor % does not work in mkiv \box\scratchpagebox \localstoptextcolor % so we have to change this \bgroup \hskip\rightmargindistance \ifdim\rightmarginwidth>\zeropoint \the\rightmargintextcontent \hskip\rightmarginwidth \fi \hskip\rightedgedistance \ifdim\rightedgewidth>\zeropoint \the\rightedgetextcontent \hskip\rightedgewidth \fi \egroup \hss}}% \smashbox\scratchpagebox \box\scratchpagebox} %D The main text area has to be combined with some additional %D (tracing) information. % will be overloaded in page-lyr \def\settextpagecontent#1#2#3% #2 and #3 will disappear {\setbox#1\hbox to \makeupwidth {\hss % so don't change this \vbox to \textheight {\offinterlineskip \freezetextwidth \hsize\textwidth % local variant of \sethsize \boxmaxdepth\maxdepth \noindent % content can be < \hsize \dopagecontents#2#3}% \hss}% \dp#1\zeropoint} \definepalet [layout] [grid=red, page=green] \def\addtextgridlayer#1% tzt run time {\ifcase\showgridstate\else % 1=bottom 2=top \setgridbox\scratchbox\makeupwidth\textheight \setbox#1\hbox {\ifcase\showgridstate\or\or\box#1\hskip-\makeupwidth\fi \bgroup % color \startlayoutcomponent{gridcolumns}{grid columns}% \incolortrue \ifcase\layoutcolumns\else \gray \hbox to \makeupwidth {\dorecurse\layoutcolumns {\hskip\layoutcolumnwidth \ifnum\recurselevel<\layoutcolumns \vrule \!!height\ht\scratchbox \!!depth\dp\scratchbox \!!width\layoutcolumndistance \fi}}% \hskip-\makeupwidth \fi \stoplayoutcomponent \startlayoutcomponent{gridlines}{grid lines}% \startcolor[layout:grid]\box\scratchbox\stopcolor \stoplayoutcomponent \egroup \ifcase\showgridstate\or\hskip-\makeupwidth\box#1\fi}% \fi} %D The placement of a whole line is handled by the next two %D macros. These are hooked into the general purpose token %D list registers mentioned before. \def\ignoredlinebreak{\unskip\space\ignorespaces} \def\doplacelayouttextline#1#2% {\ifdim#2>\zeropoint\relax % prevents pagenumbers when zero height \goleftonpage \hbox {\setbox\scratchpagebox\vbox to #2 {%\forgetall \vsize#2\relax \normalbaselines \let\\\ignoredlinebreak \let\crlf\ignoredlinebreak %\getvalue{\??tk#1\v!text\c!before}% \getvalue{\??tk#1\c!before}% \doifbothsidesoverruled {\dodoplacelayouttextline#1\c!lefttext \c!middletext\c!righttext\gobbleoneargument\getvalue} {\dodoplacelayouttextline#1\c!lefttext \c!middletext\c!righttext\gobbleoneargument\getvalue} {\dodoplacelayouttextline#1\c!righttext\c!middletext\c!lefttext \getvalue\gobbleoneargument}% %\getvalue{\??tk#1\v!text\c!after}% \getvalue{\??tk#1\c!after}% \kern\zeropoint}% keep the \dp, beware of \vtops, never change this! \dp\scratchpagebox\zeropoint \box\scratchpagebox}% \vskip-#2\relax \fi} \def\dodoplacelayouttextline#1#2#3#4#5#6% \hsize toegevoegd, \hss's niet meer wijzigen {\hbox {\ifdim\leftedgewidth>\zeropoint \dododoplacelayouttextline\leftedgewidth{#1}\v!edge {\hss\getvalue{\??tk#1\v!edge#2}}% \hskip\leftedgedistance \fi \ifdim\leftmarginwidth>\zeropoint \dododoplacelayouttextline\leftmarginwidth{#1}\v!margin {\hbox to \leftmarginwidth {\hss\getvalue{\??tk#1\v!margin#2}}% \hskip-\leftmarginwidth \hbox to \leftmarginwidth {\hss#5{\??tk#1\v!margin\c!margintext}}}% \hskip\leftmargindistance \fi \ifdim\makeupwidth>\zeropoint \dododoplacelayouttextline\makeupwidth{#1}\v!text {\hbox to \makeupwidth {\@@nmpre{#5{\??tk#1\v!text\c!marginedgetext}}% \getvalue{\??tk#1\v!text#2}\hss}% \hskip-\makeupwidth \hbox to \makeupwidth {\hss\getvalue{\??tk#1\v!text#3}\hss}% \hskip-\makeupwidth \hbox to \makeupwidth {\hss\getvalue{\??tk#1\v!text#4}% \@@nmpos{#6{\??tk#1\v!text\c!marginedgetext}}}}% \fi \ifdim\rightmarginwidth>\zeropoint \hskip\rightmargindistance \dododoplacelayouttextline\rightmarginwidth{#1}\v!margin {\hbox to \rightmarginwidth {\getvalue{\??tk#1\v!margin#4}\hss}% \hskip-\rightmarginwidth \hbox to \rightmarginwidth {#6{\??tk#1\v!margin\c!margintext}\hss}}% \fi \ifdim\rightedgewidth>\zeropoint \hskip\rightedgedistance \dododoplacelayouttextline\rightedgewidth{#1}\v!edge {\getvalue{\??tk#1\v!edge#4}\hss}% \fi}} % \def\dododoplacelayouttextline#1#2#3#4% % {\vbox % to \vsize % {\hsize#1\relax % \getvalue{\??tk#2#3\c!voor} % \hbox to #1{#4}% % \getvalue{\??tk#2#3\c!na}}} \def\dododoplacelayouttextline#1#2#3#4% {\vbox % to \vsize {\hsize#1\relax \getvalue{\??tk#2#3\c!before}% \startlayoutcomponent{t:#2:#3}{area #2 #3}% \hbox to #1{#4}% \stoplayoutcomponent \getvalue{\??tk#2#3\c!after}}} %D Although it is far better to use backgrounds for this %D purpose, one can add a rule in the following way. This %D method makes the rules disappear in case of an empty text %D line. Consider this a feature. %D %D \starttyping %D \setupheadertexts[left][right] %D %D \setupheader[text][after=\hrule,style=bold] %D %D \starttext %D \input tufte \page %D \setupheader[state=empty] %D \input tufte \page %D \stoptext %D \stoptyping %D The next twosome will be done differently (using an %D existing auxiliary macro). % \def\@@nmpre#1{\setbox0\hbox{#1}\ifdim\wd0=\zeropoint\else\unhbox0\tfskip\fi} % \def\@@nmpos#1{\setbox0\hbox{#1}\ifdim\wd0=\zeropoint\else\tfskip\unhbox0\fi} % cleaner \def\@@nmpre#1{\doiftext{#1}{{#1}\tfskip}} \def\@@nmpos#1{\doiftext{#1}{\tfskip{#1}}} % newer \def\@@nmprepos#1#2#3#4#5% {\doifelsenothing\@@nmwidth {\doiftext{#5}{#1{#5}#2}} {\doiftext{#5}{\hbox to \@@nmwidth{#3{#5}#4}}}} \def\@@nmpre{\@@nmprepos\empty\tfskip\relax\hss} \def\@@nmpos{\@@nmprepos\tfskip\empty\hss\relax} %D This code will move to \type {page-flt.tex}. \appendtoks \plaatsrechtermargeblok \hskip-\rightmarginwidth \to \rightmargintextcontent \appendtoks \plaatslinkermargeblok \hskip-\leftmarginwidth \to \leftmargintextcontent %D The next hook will later be used for keeping track of %D positions, i.e.\ it will provide a proper (page %D dependent) reference point. \ifx\undefined\placepositionanchors \def\placepositionanchors{\vskip\textheight} \fi %D \macros %D {definetext} %D %D Some macros ago, we implemented the \type {status} option %D \type {unknown}. This one is used to take care of %D symbolic texts handlers. %D %D \showsetup{definetext} %D %D The next example demonstrates how we can use this %D mechanism to provide page (event) dependent text lines. %D %D \starttyping %D \definetext[chapter][footer][pagenumber] %D \setuphead[chapter][header=high,footer=chapter] %D \setupheadertexts[pagenumber] %D \setupfootertexts[left][right] %D \chapter{eerste} \dorecurse{20}{\input tufte \relax} %D \chapter{tweede} \dorecurse{20}{\input tufte \relax} %D \stoptyping \def\definetext {\doseventupleempty\dodefinetext} \def\dodefinetext[#1][#2][#3][#4][#5][#6][#7]% {\ifseventhargument \setvalue{\??tk#2#3#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4][#5][#6][#7]}% \else\ifsixthargument \setvalue{\??tk #2#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4][#5][#6]}% \else\iffifthargument \setvalue{\??tk#2#3#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4][#5]}% \else\iffourthargument \setvalue{\??tk #2#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4]}% \else \setvalue{\??tk #2#1}{\dosixtupleempty\dosetuptexts[#2][#3]}% \fi\fi\fi\fi} %D The rest of this file is dedicated to setting up the %D texts. This code is not that impressive. \setupheadertexts [\v!text] [] [] \setupheadertexts [\v!margin] [] [] \setupheadertexts [\v!edge] [] [] \setupfootertexts [\v!text] [] [] \setupfootertexts [\v!margin] [] [] \setupfootertexts [\v!edge] [] [] \setuptexttexts [\v!text] [] [] \setuptexttexts [\v!margin] [] [] \setuptexttexts [\v!edge] [] [] \setupbottomtexts [\v!text] [] [] \setupbottomtexts [\v!margin] [] [] \setupbottomtexts [\v!edge] [] [] \setuptoptexts [\v!text] [] [] \setuptoptexts [\v!margin] [] [] \setuptoptexts [\v!edge] [] [] % alternative % % \def\resetlayouttekst% % {\dodoubleempty\doresetlayouttekst} % % \def\doresetlayouttekst[#1][#2]% % {\ifsecondargument % \dodoresetlayouttekst[#1][#2]% % \else % \dodoresetlayouttekst[#1][\v!tekst]% % \fi} % % \def\dodoresetlayouttekst[#1][#2]% % {...} % % \def\docommand#1% % {\resetlayouttekst[#1][\v!tekst]% % \resetlayouttekst[#1][\v!marge]% % \resetlayouttekst[#1][\v!rand]} %D We combine a lot of similar settings in a macro that %D we will later dispose. \def\dodocommand[#1][#2]% {\getparameters [\??tk#1#2] [%\c!state=\v!normal, % moved \c!before=, % both global and local are used \c!after=, % both global and local are used \c!strut=, % the local one, not (yet) used \c!style=\getvalue{\??tk#1\c!style},% hm, got lost \c!color=\getvalue{\??tk#1\c!color}, % hm, got lost \c!lefttext=, \c!middletext=, \c!righttext=, \c!marginedgetext=, \c!margintext=, \c!width=]% \inheritparameter[\??tk#1#2][\c!leftstyle ][\c!style ]% \inheritparameter[\??tk#1#2][\c!rightstyle ][\c!style ]% \inheritparameter[\??tk#1#2][\c!leftcolor ][\c!color ]% \inheritparameter[\??tk#1#2][\c!rightcolor ][\c!color ]% \inheritparameter[\??tk#1#2][\c!leftwidth ][\c!width]% \inheritparameter[\??tk#1#2][\c!rightwidth][\c!width]} \def\docommand#1% {\dodocommand[#1][\v!text]% \dodocommand[#1][\v!margin]% \dodocommand[#1][\v!edge]} \docommand\v!top \docommand\v!header \docommand\v!footer \docommand\v!text \docommand\v!bottom \let\docommand \relax \let\dodocommand\relax %D While the header and footer lines are moved away from the %D main text, the top and bottom lines are centered. \setuptop [\c!state=\v!normal,\c!before=\vss,\c!after=\vss,\c!strut=] \setupheader[\c!state=\v!normal,\c!before=, \c!after=\vss,\c!strut=\v!yes] \setuptext [\c!state=\v!normal,\c!before=\vss,\c!after=\vss,\c!strut=] \setupfooter[\c!state=\v!normal,\c!before=\vss,\c!after=, \c!strut=\v!yes] \setupbottom[\c!state=\v!normal,\c!before=\vss,\c!after=\vss,\c!strut=] \setuptop [\c!style=,\c!color=] \setupheader[\c!style=,\c!color=] \setuptext [\c!style=,\c!color=] \setupfooter[\c!style=,\c!color=] \setupbottom[\c!style=,\c!color=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-sor.mkiv0000644000175000017500000000445311754241457024356 0ustar norbertnorbert%D \module %D [ file=lxml-sor, %D version=2009.08.24, %D title=\CONTEXT\ \XML\ Support, %D subtitle=Sorting, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 IS VERY EXPERIMENTAL! \writestatus{loading}{ConTeXt XML Support / Sorting} \registerctxluafile{lxml-sor}{1.001} \unprotect \unexpanded\def\xmlresetsorter #1{\ctxlxml{sorters.reset("#1")}} \unexpanded\def\xmladdsortentry#1#2#3{\ctxlxml{sorters.add("#1","#2",\!!bs#3\!!es)}} \unexpanded\def\xmlshowsorter #1{\ctxlxml{sorters.show("#1")}} \unexpanded\def\xmlflushsorter #1#2{\ctxlxml{sorters.flush("#1","#2")}} \unexpanded\def\xmlsortentries #1{\ctxlxml{sorters.sort("#1")}} \protect \endinput \startbuffer[test] one alpha alpha indeed one gamma gamma indeed one beta beta indeed two alpha alpha again two gamma gamma again two beta beta again \stopbuffer \startxmlsetups xml:mysetups \xmlsetsetup{\xmldocument}{demo|entry|content}{xml:*} \stopxmlsetups \xmlregistersetup{xml:mysetups} \startxmlsetups xml:demo \xmlresetsorter{demo} \xmlfilter{#1}{entry/command(xml:entry:getkeys)} \blank sortkeys: \blank\xmlshowsorter{demo}\blank \xmlsortentries{demo} \xmlflushsorter{demo}{xml:entry:flush} \stopxmlsetups \startxmlsetups xml:entry:getkeys \xmladdsortentry{demo}{#1}{\xmltext{#1}{category}} \xmladdsortentry{demo}{#1}{\xmltext{#1}{key|entry}} \stopxmlsetups \startxmlsetups xml:entry:flush \xmltext{#1}{content}\par \stopxmlsetups \startxmlsetups xml:entry \xmltext{#1}{content}\par \stopxmlsetups \starttext \xmlprocessbuffer{main}{test}{} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv0000644000175000017500000004034712161703335026650 0ustar norbertnorbert%D \module %D [ file=type-imp-modern, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Latin Modern, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \starttypescriptcollection[\s!fallback] % \starttypescript [\s!fallback] % \definetypeface [\s!fallback] [\s!rm] [\s!serif] [modern] [\s!default] % \definetypeface [\s!fallback] [\s!ss] [\s!sans] [modern] [\s!default] % \definetypeface [\s!fallback] [\s!tt] [\s!mono] [modern] [\s!default] % \definetypeface [\s!fallback] [\s!mm] [\s!math] [modern] [\s!default] % \quittypescriptscanning % \stoptypescript % \stoptypescriptcollection %D Here comes good old Latin Modern, the default font, based on Knuths Computer %D Modern. The design size variants is: %D %D modern-designsize \starttypescriptcollection[latinmodern] \starttypescript [\s!serif] [simple] [\s!name]% for old times sake (manuals) \definefontsynonym [\s!Simple] [\s!file:lmmonoproplt10-regular] [\s!features=\s!default] \stoptypescript \starttypescript [\s!serif] [modern,latin-modern-designsize,latin-modern] [\s!name] \loadfontgoodies[lm] \definefontsynonym [\s!Serif] [LMRoman-Regular] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [LMRoman-Bold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [LMRoman-Italic] [\s!features=\s!default] \definefontsynonym [\s!SerifSlanted] [LMRoman-Oblique] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [LMRoman-BoldItalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted] [LMRoman-BoldOblique] [\s!features=\s!default] \definefontsynonym [\s!SerifCaps] [LMRoman-CapsRegular] [\s!features=\s!default] \definefontsynonym [SerifCapsSlanted] [LMRoman-CapsOblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [modern,latin-modern-designsize,latin-modern] [\s!name] \loadfontgoodies[lm] \definefontsynonym [\s!Sans] [LMSans-Regular] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [LMSans-Bold] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [LMSans-Oblique] [\s!features=\s!default] \definefontsynonym [\s!SansSlanted] [LMSans-Oblique] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [LMSans-BoldOblique] [\s!features=\s!default] \definefontsynonym [\s!SansBoldSlanted] [LMSans-BoldOblique] [\s!features=\s!default] \definefontsynonym [\s!SansCaps] [LMSans-Regular] [\s!features=\s!default] \definefontsynonym [SansCapsSlanted] [LMSans-Oblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [modern,latin-modern-designsize,latin-modern] [\s!name] \loadfontgoodies[lm] \definefontsynonym [\s!Mono] [LMTypewriter-Regular] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [LMTypewriter-Dark] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [LMTypewriter-Italic] [\s!features=\s!none] \definefontsynonym [\s!MonoSlanted] [LMTypewriter-Oblique] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [LMTypewriter-DarkOblique] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldSlanted] [LMTypewriter-DarkOblique] [\s!features=\s!none] \definefontsynonym [\s!MonoCaps] [LMTypewriter-CapsRegular] [\s!features=\s!none] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-CapsOblique] [\s!features=\s!none] \definefontsynonym [MonoVariable] [LMTypewriterVarWd-Regular] [\s!features=\s!none] \stoptypescript \starttypescript [\s!math] [modern,latin-modern-designsize,latin-modern] [\s!name] \loadfontgoodies[lm] \loadfontgoodies[lm-math] \definefontsynonym [\s!MathRoman] [LMMathRoman-Regular] \definefontsynonym [\s!MathRomanBold] [LMMathRoman-Bold] \stoptypescript \starttypescript [\s!serif] [modern-variable,latin-modern-variable-designsize,latin-modern-variable] [\s!name] \loadfontgoodies[lm] \definefontsynonym [\s!Serif] [LMTypewriterVarWd-Regular] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [LMTypewriterVarWd-Oblique] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [LMTypewriterVarWd-Oblique] [\s!features=\s!default] \definefontsynonym [\s!SerifSlanted] [LMTypewriterVarWd-Dark] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [LMTypewriterVarWd-DarkOblique] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted] [LMTypewriterVarWd-DarkOblique] [\s!features=\s!default] \definefontsynonym [\s!SerifCaps] [LMTypewriterVarWd-Regular] [\s!features=\s!default] \definefontsynonym [SerifCapsSlanted] [LMTypewriterVarWd-Oblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [modern-condensed,latin-modern-condensed-designsize,latin-modern-condensed,modern-light-condensed,latin-modern-light-condensed] [\s!name] \loadfontgoodies[lm] \definefontsynonym [\s!Mono] [LMTypewriter-LightCondensed] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [LMTypewriter-LightCondensed] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [LMTypewriter-LightCondensedOblique] [\s!features=\s!none] \definefontsynonym [\s!MonoSlanted] [LMTypewriter-LightCondensedOblique] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [LMTypewriter-LightCondensed] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldSlanted] [LMTypewriter-LightCondensed] [\s!features=\s!none] \definefontsynonym [\s!MonoCaps] [LMTypewriter-LightCondensed] [\s!features=\s!none] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-LightCondensed] [\s!features=\s!none] \stoptypescript \starttypescript [\s!mono] [modern-light,latin-modern-light-designsize,latin-modern-light] [\s!name] \loadfontgoodies[lm] \definefontsynonym [\s!Mono] [LMTypewriter-Light] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [LMTypewriter-Light] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [LMTypewriter-LightOblique] [\s!features=\s!none] \definefontsynonym [\s!MonoSlanted] [LMTypewriter-LightOblique] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [LMTypewriter-Light] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldSlanted] [LMTypewriter-Light] [\s!features=\s!none] \definefontsynonym [\s!MonoCaps] [LMTypewriter-Light] [\s!features=\s!none] \definefontsynonym [MonoCapsSlanted] [LMTypewriter-Light] [\s!features=\s!none] \stoptypescript % why not also [name] \starttypescript [\s!serif] [modern,latin-modern] \loadfontgoodies[lm] \definefontsynonym [LMRoman-Regular] [\s!file:lmroman10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman-Bold] [\s!file:lmroman10-bold] [\s!features=\s!default] \definefontsynonym [LMRoman-Demi] [\s!file:lmromandemi10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman-Italic] [\s!file:lmroman10-italic] [\s!features=\s!default] \definefontsynonym [LMRoman-Oblique] [\s!file:lmromanslant10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman-BoldItalic] [\s!file:lmroman10-bolditalic] [\s!features=\s!default] \definefontsynonym [LMRoman-BoldOblique] [\s!file:lmromanslant10-bold] [\s!features=\s!default] \definefontsynonym [LMRoman-DemiOblique] [\s!file:lmromandemi10-oblique] [\s!features=\s!default] \definefontsynonym [LMRoman-CapsRegular] [\s!file:lmroman10-CapsRegular] [\s!features=\s!default] \definefontsynonym [LMRoman-CapsOblique] [\s!file:lmroman10-CapsOblique] [\s!features=\s!default] \definefontsynonym [LMRoman-CapsRegular] [\s!file:lmromancaps10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman-CapsOblique] [\s!file:lmromancaps10-oblique] [\s!features=\s!default] \definefontsynonym [LMRoman-Dunhill] [\s!file:lmromandunh10-regular] [\s!features=\s!default] \definefontsynonym [LMRoman-DunhillOblique] [\s!file:lmromandunh10-oblique] [\s!features=\s!default] \definefontsynonym [LMRoman-Unslanted] [\s!file:lmromanunsl10-regular] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [modern,latin-modern] \loadfontgoodies[lm] \definefontsynonym [LMSans-Regular] [\s!file:lmsans10-regular] [\s!features=\s!default] \definefontsynonym [LMSans-Bold] [\s!file:lmsans10-bold] [\s!features=\s!default] \definefontsynonym [LMSans-Oblique] [\s!file:lmsans10-oblique] [\s!features=\s!default] \definefontsynonym [LMSans-BoldOblique] [\s!file:lmsans10-boldoblique] [\s!features=\s!default] \definefontsynonym [LMSans-DemiCondensed] [\s!file:lmsansdemicond10-regular] [\s!features=\s!default] \definefontsynonym [LMSans-DemiCondensedOblique] [\s!file:lmsansdemicond10-oblique] [\s!features=\s!default] \definefontsynonym [LMSansQuotation-Regular] [\s!file:lmsansquot8-regular] [\s!features=\s!default] \definefontsynonym [LMSansQuotation-Bold] [\s!file:lmsansquot8-bold] [\s!features=\s!default] \definefontsynonym [LMSansQuotation-Oblique] [\s!file:lmsansquot8-oblique] [\s!features=\s!default] \definefontsynonym [LMSansQuotation-BoldOblique] [\s!file:lmsansquot8-boldoblique] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [modern,latin-modern,modern-variable,latin-modern-variable,modern-condensed,latin-modern-condensed] \definefontsynonym [LMTypewriter-Regular] [\s!file:lmmono10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter-Italic] [\s!file:lmmono10-italic] [\s!features=\s!none] \definefontsynonym [LMTypewriter-Oblique] [\s!file:lmmonoslant10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter-CapsRegular] [\s!file:lmmonocaps10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter-CapsOblique] [\s!file:lmmonocaps10-oblique] [\s!features=\s!none] \definefontsynonym [LMTypewriter-Light] [\s!file:lmmonolt10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter-LightOblique] [\s!file:lmmonolt10-oblique] [\s!features=\s!none] \definefontsynonym [LMTypewriter-LightCondensed] [\s!file:lmmonoltcond10-regular] [\s!features=\s!none] \definefontsynonym [LMTypewriter-LightCondensedOblique] [\s!file:lmmonoltcond10-oblique] [\s!features=\s!none] \definefontsynonym [LMTypewriter-Dark] [\s!file:lmmonolt10-bold] [\s!features=\s!none] \definefontsynonym [LMTypewriter-DarkOblique] [\s!file:lmmonolt10-boldoblique] [\s!features=\s!none] \definefontsynonym [LMTypewriterVarWd-Regular] [\s!file:lmmonoproplt10-regular] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd-Oblique] [\s!file:lmmonoproplt10-oblique] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd-Light] [\s!file:lmmonoprop10-regular] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd-LightOblique] [\s!file:lmmonoprop10-oblique] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd-Dark] [\s!file:lmmonoproplt10-bold] [\s!features=\s!default] \definefontsynonym [LMTypewriterVarWd-DarkOblique] [\s!file:lmmonoproplt10-boldoblique] [\s!features=\s!default] \stoptypescript % \starttypescript [\s!math] [modern,latin-modern] % \loadfontgoodies[lm] % \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lm] % \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lm] % \stoptypescript \starttypescript [\s!math] [modern,latin-modern] \loadfontgoodies[lm] \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math},\s!goodies=lm] \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math},\s!goodies=lm] \stoptypescript \starttypescript [modern-designsize-virtual] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \definetypeface [\typescriptone] [\s!mm] [\s!math] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \quittypescriptscanning \stoptypescript \starttypescript [modern-designsize] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [latin-modern-designsize] [\s!default] [\s!designsize=\s!auto] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [modern,modern-base] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [modernvariable,modern-variable] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern-variable] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern-variable] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [modernvariablelight,modern-variable-light] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern-variable-light] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern-variable-light] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \starttypescript [modern-mono,modern-base-mono] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern-light] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] \quittypescriptscanning \stoptypescript \stoptypescriptcollection %D It doesn't hurt to have these, at least for the moment (can go to type-imp-symbol) \definefontsynonym [ZapfDingbats] [\s!file:uzdr] [\s!features=dingbats]% [\s!goodies=dingbats] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-but.lua0000644000175000017500000000130412130411274024122 0ustar norbertnorbertif not modules then modules = { } end modules ['scrn-but'] = { version = 1.001, comment = "companion to scrn-but.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local f_two_colon = string.formatters["%s:%s"] function commands.registerbuttons(tag,register,language) local data = sorters.definitions[language] local orders = daya and data.orders or sorters.definitions.default.orders local tag = tag == "" and { "" } or { tag } for i=1,#orders do local order = orders[i] context.menubutton(tag,f_two_colon(register,order),order) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-all.xml0000644000175000017500000003007611244221744024111 0ustar norbertnorbert bahyph.tex TeX hyphenation patterns for the Basque language 1991 Julio Sanchez (jsanchez@gmv.es) These patterns have been derived from "On Word Division in Spanish" Jos'e A. Ma~nas 1997 Juan M. Aguirregabiria (wtpagagj@lg.ehu.es) Adaption to TeX based on shyphen.sh cahyph.tex TeX hyphenation patterns for the Catalan language Version 1.11 1991-1995 Gon\c{c}al Badenes,Francina Turon 1991-2003 Gon\c{c}al Badenes cyhyph.tex TeX hyphenation patterns for the Welsh Language v3,GNU General Public License 1996 Yannis Haralambous Inputs cathyph.tex, patterns in EC/DC encoding czhyphen.tex TeX hyphenation patterns for the Czech language 1991 Karel Horak List of exceptions 1995 Pavel Sevecek (\v{S}eve\v{c}ek) (pavel@lingea.cz) Macros, adaption for TeX 2 dkspecial.tex dkcommon.tex TeX hyphenation patterns for the Danish language dehyphn.tex TeX hyphenation patterns for the German language (new orthography) 1988, 1991 Rechenzentrum der Ruhr-Universitaet Bochum German hyphen patterns 1993, 1994, 1999 Bernd Raichle/DANTE e.V. Macros, adaption for TeX 2 1998-2001 Walter Schmidt Adaption to new German orthography dehypht.tex TeX hyphenation patterns for the German language (traditional orthography) 1988, 1991 Rechenzentrum der Ruhr-Universitaet Bochum German hyphen patterns 1993, 1994, 1999 Bernd Raichle/DANTE e.V. Macros, adaption for TeX 2 hyphen.tex Plain TeX hyphenation patterns for the English language (US) [NOT TO BE CHANGED IN ANY WAY!] eshyph.tex TeX hyphenation patterns for the Spanish language 1993 Francesc Carmona (franc@porthos.bio.ub.es) fihyph.tex TeX hyphenation patterns for the Finnish language 1986 Kauko Saarinen First release 1988 Fred Karlsson Completely rewritten patterns 1989 Fred Karlsson Some vowel tripples added 1995 Thomas Esser Added \uccode and \lccode frhyph.tex TeX hyphenation patterns for the French language V2.11 Jacques Desarmenien, Norman Buckle, Michael Ferguson, Justin Bur, Daniel Flipo and Bernard Gaulle 1996 Bernd Raichle/DANTE e.V. Adaption for TeX 3.x and MLTeX 3.x (2.x) hrhyph.tex TeX hyphenation patterns for the Croatian language 1994, 1996 Marinovi\'c Igor (migor@student.math.hr) huhyphn.tex TeX hyphenation patterns for the Hungarian language ishyph.tex Plain TeX hyphenation patterns for the Icelandic language [NOT TO BE CHANGED IN ANY WAY!] 1987 Jorgen Pind ithyph.tex TeX hyphenation patterns for the Italian language v4.8d 1998, 2001 Claudio Beccari 1993, 1994, 1999 Bernd Raichle/DANTE e.V. Macros, adaption for TeX 2 lahyph.tex TeX hyphenation patterns for the Latin language v3.0b 1999-2001 Claudio Beccari 1993, 1994, 1998, 1999 Bernd Raichle/DANTE e.V. Macro code in 'dehypht.tex' nehyph96.tex TeX hyphenation patterns for the Dutch language 1996 Piet Tutelaers (P.T.H.Tutelaers@tue.nl) 8-bit hyphenation patterns for TeX based upon the new Dutch spelling, officially since 1 August 1996. These patterns follow the new hyphenation rules in the `Woordenlijst Nederlandse Taal, SDU Uitgevers, Den Haag 1995' (the so called `Groene Boekje') described in section 5.2 (Het afbreekteken) nohyph.tex TeX hyphenation patterns for the Norwegian language 2005 Rune Kleveland with patches from Ole Michael Selberg nohyphbx.tex 200+ Rune Kleveland nohyphb.tex 199+ Dag Langmyhr and student nohyph2.tex 199+ Ivar Aavatsmark and others nohyph.tex sometimes named nohyph1.tex 1992,1993 Ivar Aavatsmark nohyphen.tex based on danhyph.tex 1994 Preben Randhol, Jon Martin Solaas 1995 Thomas Esser (te@dbs.uni-hannover.de) Make patterns work with non-T1 encoding plhyph.tex TeX hyphenation patterns for the Polish language pthyph.tex TeX hyphenation patterns for the Portuguese language rohyph.tex TeX hyphenation patterns for the Romanian language skhyphen.tex skhyphen.ex TeX hyphenation patterns for the Slovakian language 1992 Jana Chlebikova 1991 Karel Horak List of exceptions sihyph.tex TeX hyphenation patterns for the Slovenian language 1990 TeXCeX (SLO),TeXCeH Norbert Schwarz 1994 Leon "Zlajpah (leon.zlajpah@ijs.si) Use of code page 852 in patterns 1995,1997 Leon "Zlajpah (leon.zlajpah@ijs.si) Adaptaion of Slovenian hyphenation pattens, macros svhyph.tex TeX hyphenation patterns for the Swedish language 1991,1994 Jan Michael Rynning tkhyph.tex TeX hyphenation patterns for the modern Turkish language 1996 Yannis Haralambous A mechanically generated Turkish Hyphenation table for TeX, using the University of Washington diacritical coding developed by P. A. MacKay for the Ottoman Texts Project ukhyphen.tex TeX hyphenation patterns for the English language (UK) Vietnamese needs no patterns. grahyph4.tex TeX hyphenation patterns for the ancient Greek language 2004 Dimitrios Filippou These hyphenation patterns are explained in "ancient.pdf". Hyphenation examples are given in the file "anc-test.pdf". Some doubtful patterns are marked by three question marks "???". context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-imp-rgb.mkiv0000644000175000017500000002024611754241457025066 0ustar norbertnorbert%D \module %D [ file=colo-rgb, %D version=1995.01.01, %D title=\CONTEXT\ Color Macros, %D subtitle=RGB, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Just to give users a start we define some colors. While %D switching fonts is as international as can be, thanks to the %D mnemonics, naming colors is very interface dependant. To %D support international setups, we define both english and %D interface dependant colors. We use the color inheritance %D mechanisms to implement the interface dependant ones. %D For historic reasons all colors are defined in \RGB\ color %D space and there is no reason to change this. \definecolor [red] [r=1, g=0, b=0] \definecolor [green] [r=0, g=1, b=0] \definecolor [blue] [r=0, g=0, b=1] \definecolor [cyan] [r=0, g=1, b=1] \definecolor [magenta] [r=1, g=0, b=1] \definecolor [yellow] [r=1, g=1, b=0] \definecolor [white] [s=1] % [r=1, g=1, b=1] \definecolor [black] [s=0] \definecolor [gray] [s=.9] % adapted per 2011.10.28 \definecolor [lightred] [r=1, g=0, b=0] \definecolor [lightgreen] [r=0, g=1, b=0] \definecolor [lightblue] [r=0, g=0, b=1] \definecolor [middlered] [r=.8, g=0, b=0] \definecolor [middlegreen] [r=0, g=.8, b=0] \definecolor [middleblue] [r=0, g=0, b=.8] \definecolor [middlecyan] [r=0, g=.6, b=.6] \definecolor [middlemagenta] [r=.6, g=0, b=.6] \definecolor [middleyellow] [r=.6, g=.6, b=.0] \definecolor [darkred] [r=.6, g=0, b=0] \definecolor [darkgreen] [r=0, g=.6, b=0] \definecolor [darkblue] [r=0, g=0, b=.6] \definecolor [darkcyan] [r=0, g=.4, b=.4] \definecolor [darkmagenta] [r=.4, g=0, b=.4] \definecolor [darkyellow] [r=.4, g=.4, b=0] \definecolor [darkgray] [s=.60] \definecolor [middlegray] [s=.725] \definecolor [lightgray] [s=.85] %D These colors are mapped to interface dependant colornames. \startinterface dutch \definecolor [rood] [red] \definecolor [groen] [green] \definecolor [blauw] [blue] \definecolor [cyaan] [cyan] \definecolor [magenta] [magenta] \definecolor [geel] [yellow] \definecolor [wit] [white] \definecolor [grijs] [gray] \definecolor [zwart] [black] \definecolor [donkerrood] [darkred] \definecolor [middelrood] [middlered] \definecolor [lichtrood] [lightred] \definecolor [donkergroen] [darkgreen] \definecolor [middelgroen] [middlegreen] \definecolor [lichtgroen] [lightgreen] \definecolor [donkerblauw] [darkblue] \definecolor [middelblauw] [middleblue] \definecolor [lichtblauw] [lightblue] \definecolor [donkercyaan] [darkcyan] \definecolor [middelcyaan] [middlecyan] \definecolor [donkermagenta] [darkmagenta] \definecolor [middelmagenta] [middlemagenta] \definecolor [donkergeel] [darkyellow] \definecolor [middelgeel] [middleyellow] \definecolor [donkergrijs] [darkgray] \definecolor [middengrijs] [middlegray] \definecolor [lichtgrijs] [lightgray] \stopinterface \startinterface german \definecolor [rot] [red] \definecolor [gruen] [green] \definecolor [blau] [blue] \definecolor [cyan] [cyan] \definecolor [magenta] [magenta] \definecolor [gelb] [yellow] \definecolor [weiss] [white] \definecolor [grau] [gray] \definecolor [schwarz] [black] \definecolor [dunkelrot] [darkred] \definecolor [mittelrot] [middlered] \definecolor [hellrot] [lightred] \definecolor [dunkelgruen] [darkgreen] \definecolor [mittelgruen] [middlegreen] \definecolor [hellgruen] [lightgreen] \definecolor [dunkelblau] [darkblue] \definecolor [mittelblau] [middleblue] \definecolor [hellblau] [lightblue] \definecolor [dunkelcyan] [darkcyan] \definecolor [mittelcyan] [middlecyan] \definecolor [dunkelmagenta] [darkmagenta] \definecolor [mittelmagenta] [middlemagenta] \definecolor [dunkelgelb] [darkyellow] \definecolor [mittelgelb] [middleyellow] \definecolor [dunkelgrau] [darkgray] \definecolor [mittelgrau] [middlegray] \definecolor [hellgrau] [lightgray] \stopinterface \startinterface czech \definecolor [cervena] [red] \definecolor [zelena] [green] \definecolor [modra] [blue] \definecolor [azurova] [cyan] \definecolor [fialova] [magenta] \definecolor [zluta] [yellow] \definecolor [bila] [white] \definecolor [cerna] [black] \definecolor [tmavecervena] [darkred] \definecolor [strednecervena] [middlered] \definecolor [svetlecervena] [lightred] \definecolor [tmavezelena] [darkgreen] \definecolor [strednezelena] [middlegreen] \definecolor [svetlezelena] [lightgreen] \definecolor [tmavemodra] [darkblue] \definecolor [strednemodra] [middleblue] \definecolor [svetlemodra] [lightblue] \definecolor [tmaveazurova] [darkcyan] \definecolor [stredneazurova] [middlecyan] \definecolor [tmavefialova] [darkmagenta] \definecolor [strednefialova] [middlemagenta] \definecolor [tmavezluta] [darkyellow] \definecolor [strednezluta] [middleyellow] \definecolor [tmaveseda] [darkgray] \definecolor [stredneseda] [middlegray] \definecolor [svetleseda] [lightgray] \stopinterface \startinterface italian \definecolor [rosso] [red] \definecolor [verde] [green] \definecolor [blu] [blue] \definecolor [azzurro] [cyan] \definecolor [turchino] [cyan] \definecolor [ciano] [cyan] \definecolor [cremisi] [magenta] \definecolor [giallo] [yellow] \definecolor [bianco] [white] \definecolor [grigio] [gray] \definecolor [nero] [black] \definecolor [rossoscuro] [darkred] \definecolor [rossomedio] [middlered] \definecolor [rossochiaro] [lightred] \definecolor [verdescuro] [darkgreen] \definecolor [verdemedio] [middlegreen] \definecolor [verdechiaro] [lightgreen] \definecolor [bluscuro] [darkblue] \definecolor [blumedio] [middleblue] \definecolor [bluchiaro] [lightblue] \definecolor [azzurroscuro] [darkcyan] \definecolor [azzurrochiaro] [middlecyan] \definecolor [cremisiscuro] [darkmagenta] \definecolor [cremisichiaro] [middlemagenta] \definecolor [gialloscuro] [darkyellow] \definecolor [giallomedio] [middleyellow] \definecolor [grigioscuro] [darkgray] \definecolor [grigiomedio] [middlegray] \definecolor [grigiochiaro] [lightgray] \stopinterface \startinterface romanian \definecolor [rosu] [red] \definecolor [verde] [green] \definecolor [albastru] [blue] \definecolor [cian] [cyan] \definecolor [magenta] [magenta] \definecolor [galben] [yellow] \definecolor [alb] [white] \definecolor [gri] [gray] \definecolor [negru] [black] \definecolor [rosuinchis] [darkred] \definecolor [rosumediu] [middlered] \definecolor [rosudeschis] [lightred] \definecolor [verdeinchis] [darkgreen] \definecolor [verdemediu] [middlegreen] \definecolor [verdedeschis] [lightgreen] \definecolor [albastruinchis] [darkblue] \definecolor [albastrumediu] [middleblue] \definecolor [albastrudeschis] [lightblue] \definecolor [cianinchis] [darkcyan] \definecolor [cianmediu] [middlecyan] \definecolor [magentainchis] [darkmagenta] \definecolor [magentamediu] [middlemagenta] \definecolor [galbeninchis] [darkyellow] \definecolor [galbenmediu] [middleyellow] \definecolor [griinchis] [darkgray] \definecolor [grimediu] [middlegray] \definecolor [grideschis] [lightgray] \stopinterface %D Bonus (needed for FO test): \definecolor [orange] [r=1,g=.5] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-ali.mkii0000644000175000017500000001260211754241457024311 0ustar norbertnorbert%D \module %D [ file=supp-ali, %D version=2000.04.17, %D title=\CONTEXT\ Support Macros, %D subtitle=Alignment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Yet undocumented. % 0 = centered % 1 = left in before % 2 = right in before % 3 = left in after % 4 = right in after \unprotect % \starttabulate[|cg{.}|cg{,}|cg{,}|] % \NC period \NC comma \NC comma \NC\NR % \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR % \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR % \NG 10\\ \NG 10\\ \NG 0,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \NG 10 \NG 10 \NG 0,00 \NC\NR % \stoptabulate \chardef\characteralignmentmode=4 \chardef\characteralignmentslot=1 \newtoks\@@characteralignlst \let\afterassignwidth \!!zeropoint \let\beforeassignwidth\!!zeropoint \def\alignmentcharacter{.} \let\alignmentclass\s!default % can be used to handle multiple mixed ones \def\setfirstpasscharacteralign {\popcharacteralign \expanded{\dosetfirstpasscharacteralign{\alignmentcharacter}}} \def\dosetfirstpasscharacteralign#1% {\def\checkalignment##1% {\popcharacteralign \let\\\empty \setbox\scratchbox\hbox{#1}% \edef\characterassignwidth{\the\wd\scratchbox}% \setbox\scratchbox\null \docheckalignment##1#1\relax\relax \scratchdimen-\wd\scratchbox \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \advance\scratchdimen \wd\scratchbox \ifdim\scratchdimen>\beforeassignwidth\relax \edef\beforeassignwidth{\the\scratchdimen}% \fi \ifdim\scratchdimen=\zeropoint \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \scratchdimen\wd\scratchbox \ifcase\characteralignmentmode % do nothing \else\ifnum\characteralignmentmode<\plusthree \advance\scratchdimen \characterassignwidth \ifdim\scratchdimen>\beforeassignwidth\relax \edef\beforeassignwidth{\the\scratchdimen}% \fi \else \ifdim\scratchdimen>\afterassignwidth\relax \edef\afterassignwidth{\the\scratchdimen}% \fi \fi\fi \fi \pushcharacteralign}% \def\docheckalignment##1#1##2##3\relax {\ifx##2\relax \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \ifdim\wd\scratchbox>\afterassignwidth \edef\afterassignwidth{\the\wd\scratchbox}% \fi \else \docheckalignment##2##3\relax\relax \fi}} \def\setsecondpasscharacteralign {\popcharacteralign \expanded{\dosetsecondpasscharacteralign{\alignmentcharacter}}} \def\dosetsecondpasscharacteralign#1% {\def\checkalignment##1% {\popcharacteralign \let\\\empty % beware, no grouping \setbox\scratchbox\hbox{#1}% \edef\characterassignwidth{\the\wd\scratchbox}% \setbox\scratchbox\null % new 12,34 vs 10\\ where 10 aligns on 12 if #1 = , \ifcase\characteralignmentslot \docheckalignment##1#1\relax\relax \scratchdimen\wd\scratchbox \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \else \def\\{#1}% \expanded{\docheckalignment##1#1\relax\relax}% \scratchdimen\wd\scratchbox \setbox\scratchbox\hbox{\def\\{\hphantom{#1}}\ignorespaces##1\unskip}% \fi \noindent \ifdim\scratchdimen=\wd\scratchbox \ifcase\characteralignmentmode \box\scratchbox \else \hbox {\dontcomplain \hbox to \beforeassignwidth {\ifcase\characteralignmentmode\or \box\scratchbox\hss \or \hss\box\scratchbox\hskip\characterassignwidth \or \hss\rlap{\box\scratchbox}% \or \hss\rlap{\hbox to \afterassignwidth{\hss\box\scratchbox}}% \fi}% \hskip\afterassignwidth}% \fi \else \hbox {\hbox to \beforeassignwidth {\hss\box\scratchbox\hskip-\scratchdimen}% \hskip\afterassignwidth}% \fi}% \def\docheckalignment##1#1##2##3\relax {\ifx##2\relax \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \else \docheckalignment##2##3\relax\relax \fi}} % provide a means to use multiple alignments mixed \def\pushcharacteralign {\ifundefined{@cac@\alignmentclass}% \doglobal\appendetoks\noexpand\do{\alignmentclass}\to\@@characteralignlst \fi \setxvalue{@cac@\alignmentclass}{\noexpand\do {\afterassignwidth}{\beforeassignwidth}{\alignmentcharacter}}} \def\popcharacteralign {\def\do##1##2##3% {\def\afterassignwidth {##1}% \def\beforeassignwidth {##2}% \def\alignmentcharacter{##3}}% \executeifdefined{@cac@\alignmentclass}\donothing} \def\resetcharacteralign % does not work well nested {\def\do##1{\global\letbeundefined{@cac@##1}}% global ! \the\@@characteralignlst \global\@@characteralignlst\emptytoks} \long\def\startcharacteralign#1\stopcharacteralign {\bgroup \setfirstpasscharacteralign #1% \setsecondpasscharacteralign#1% \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-bfm.mkii0000644000175000017500000001615311754241457024274 0ustar norbertnorbert%D \module %D [ file=font-bfm, %D version=2003.11.25, %D title=\CONTEXT\ Font Macros, %D subtitle=Mixed Normal and Bold Math, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Mixed Bold Math Support} %D The following example demonstrates how to use normal, bold, and mixed %D normal|/|bold math. Since not everyone has the Lucida on his|/|her %D machine we don't show the result. %D %D \starttyping %D \setupformulas %D [method=bold] %D %D \definetypeface [mainface] [rm] [serif] [lucida] [default] [encoding=texnansi] %D \definetypeface [mainface] [tt] [mono] [lucida] [default] [encoding=texnansi] %D \definetypeface [mainface] [ss] [sans] [lucida] [default] [encoding=texnansi] %D \definetypeface [mainface] [mm] [math] [lucida] [default] [encoding=texnansi] %D \definetypeface [mainface] [mm] [bfmath] [lucida] [default] [encoding=texnansi] %D %D \definetypeface [boldmath] [rm] [serif] [lucida] [default] [encoding=texnansi] %D \definetypeface [boldmath] [tt] [mono] [lucida] [default] [encoding=texnansi] %D \definetypeface [boldmath] [ss] [sans] [lucida] [default] [encoding=texnansi] %D \definetypeface [boldmath] [mm] [boldmath] [lucida] [default] [encoding=texnansi] %D %D \switchtobodyfont[mainface] %D %D \startlines %D $\mainface x=10 \Gamma \Delta \alpha \delta \zeta$ %D $\boldmath x=10 \Gamma \Delta \alpha \delta \zeta$ %D \stoplines %D %D \startformula %D x=12=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[mainface] %D x=12=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath] %D x=12=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath,8pt] %D x=8=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath,12pt,small] %D x=12s=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath,small] %D x=s=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath,10pt] %D x=10=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath,11pt,small] %D x=11s=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startformula[boldmath,9pt] %D x=9=\fontbody \Gamma \Delta \alpha \delta \zeta %D \stopformula %D %D \startlines %D \formula{1=2x} %D \formula[boldmath]{1=2x} %D \formula[mainface]{1=2x} %D \formula[mainface]{1 \theta \Gamma = \bfm 1 \beta \hbox{\sl test}\Gamma \alpha ' x x} %D \formula[mainface]{1 \theta \Gamma = {\bfm 1 \beta \hbox{\sl test}\Gamma \alpha ' x} x} %D \stoplines %D \stoptyping \unprotect %D \TEX\ has some hard wired expectations about where to look for %D certain characters. This means that we cannot overload the families %D 0 upto~3. Also, since we use C upto~F for math as well, we are left %D with the range 4 upto~B. \chardef\mrbffam\itfam \edef\c!mrbf{\c!mr\c!bf} \let\hexmrbffam\hexitfam % 4 it \chardef\exbffam\slfam \edef\c!exbf{\c!ex\c!bf} \let\hexexbffam\hexslfam % 5 sl \chardef\mibffam\bffam \edef\c!mibf{\c!mi\c!bf} \let\hexmibffam\hexbffam % 6 bf \chardef\sybffam\nnfam \edef\c!sybf{\c!sy\c!bf} \let\hexsybffam\hexnnfam % 7 nn \chardef\mabffam\bsfam \edef\c!mabf{\c!ma\c!bf} \let\hexmabffam\hexbsfam % 8 bs \chardef\mbbffam\bifam \edef\c!mbbf{\c!mb\c!bf} \let\hexmbbffam\hexbifam % 9 bi \chardef\mcbffam\scfam \edef\c!mcbf{\c!mc\c!bf} \let\hexmcbffam\hexscfam % A sc \chardef\mdbffam\scfam \edef\c!mdbf{\c!mc\c!bf} \let\hexmdbffam\hexscfam % B tf % tricky %D The next bunch of code looks horrible and tricky but one has to keep in %D mind that because \TEX\ makes several passes over the math list we need to %D make sure that grouping is handled well. Later assignments to a family %D overload previous ones, the last one counts. \newtoks \boldmathstrategies \newtoks \boldsymbstrategies \appendtoks \dosetmathfamily\mrbffam\textface\scriptface\scriptscriptface\c!mrbf\mrfallback \dosetmathfamily\mibffam\textface\scriptface\scriptscriptface\c!mibf\empty \dosetmathfamily\sybffam\textface\scriptface\scriptscriptface\c!sybf\empty \dosetmathfamily\exbffam\textface\textface \textface \c!exbf\empty \dosetmathfamily\mabffam\textface\scriptface\scriptscriptface\c!mabf\empty \dosetmathfamily\mbbffam\textface\scriptface\scriptscriptface\c!mbbf\empty \dosetmathfamily\mcbffam\textface\scriptface\scriptscriptface\c!mcbf\empty \to \boldmathstrategies \appendtoks \dosetskewchar\mifam\defaultskewcharmi \dosetskewchar\syfam\defaultskewcharsy \to \boldmathstrategies \appendtoks \dosetsymbfamily\mrbffam\textface\scriptface\scriptscriptface\c!mrbf \dosetsymbfamily\mibffam\textface\scriptface\scriptscriptface\c!mibf \dosetsymbfamily\sybffam\textface\scriptface\scriptscriptface\c!sybf \dosetsymbfamily\exbffam\textface\textface \textface \c!exbf \dosetsymbfamily\mabffam\textface\scriptface\scriptscriptface\c!mabf \dosetsymbfamily\mbbffam\textface\scriptface\scriptscriptface\c!mbbf \dosetsymbfamily\mcbffam\textface\scriptface\scriptscriptface\c!mcbf \to \boldsymbstrategies %D Here comes the real mess (due to semi||global settings en multiple %D passes over the math list once the input is expanded. \newevery \everyboldfacemath \relax \chardef \boldfacemathmethod \zerocount \appendtoks \ifcase\boldfacemathmethod \else \the\boldmathstrategies \fi \to \mathstrategies \appendtoks \ifcase\boldfacemathmethod \else \the\boldsymbstrategies \fi \to \symbstrategies \appendtoks \let\mrfam\mrbffam \let\c!mr\c!mrbf \let\hexmrfam\hexmrbffam \let\mifam\mibffam \let\c!mi\c!mibf \let\hexmifam\hexmibffam \let\syfam\sybffam \let\c!sy\c!sybf \let\hexsyfam\hexsybffam \let\exfam\exbffam \let\c!ex\c!exbf \let\hexexfam\hexexbffam \let\mafam\mabffam \let\c!ma\c!mabf \let\hexmafam\hexmabffam \let\mbfam\mbbffam \let\c!mb\c!mbbf \let\hexmbfam\hexmbbffam \let\mcfam\mcbffam \let\c!mc\c!mcbf \let\hexmcfam\hexmcbffam \to \everyboldfacemath \appendtoks \let\mathsubfamily\c!bf \to \everyboldfacemath \appendtoks \synchronizemath \aftergroup\synchronizemath \to \everyboldfacemath %D \macros %D {boldfacemath, bfm, autoboldfacemath} %D %D These are the user commands, with \type {\bfm} being the most comfortable. \def\boldfacemath {\ifcase\boldfacemathmethod\else\the\everyboldfacemath\fi} \def\bfm {\boldfacemath} % no \let, so that we can redefine \def\autoboldfacemath{\appendtoks\ifcase\boldfacemathmethod\else\let\bf\boldfacemath\fi\to\everymathematics} %D We hook this feature into the formula mechanism. \setupformulas [\c!method=\v!normal] \appendtoks \doifelse{\formulaparameter\c!method}\v!bold {\chardef\boldfacemathmethod\plusone} {\chardef\boldfacemathmethod\zerocount}% \to \everysetupformulas %D Of course this only works when bfmath fonts are set up (see example at %D the top of this file) and bold math is enabled: %D %D \starttyping %D \setupformulas %D [method=bold] %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pdfr-def.mkii0000644000175000017500000007251411244221744024245 0ustar norbertnorbert% filename : pdfr-def.tex % comment : generated by mtxrun --script chars --pdf % author : Hans Hagen, PRAGMA-ADE, Hasselt NL % copyright: PRAGMA ADE / ConTeXt Development Team % license : see context related readme files % \pdfglyphtounicode{space}{0020}% \pdfglyphtounicode{exclam}{0021}% \pdfglyphtounicode{quotedbl}{0022}% \pdfglyphtounicode{numbersign}{0023}% \pdfglyphtounicode{dollar}{0024}% \pdfglyphtounicode{percent}{0025}% \pdfglyphtounicode{ampersand}{0026}% \pdfglyphtounicode{quotesingle}{0027}% \pdfglyphtounicode{parenleft}{0028}% \pdfglyphtounicode{parenright}{0029}% \pdfglyphtounicode{asterisk}{002A}% \pdfglyphtounicode{plus}{002B}% \pdfglyphtounicode{comma}{002C}% \pdfglyphtounicode{hyphen}{002D}% \pdfglyphtounicode{period}{002E}% \pdfglyphtounicode{slash}{002F}% \pdfglyphtounicode{zero}{0030}% \pdfglyphtounicode{one}{0031}% \pdfglyphtounicode{two}{0032}% \pdfglyphtounicode{three}{0033}% \pdfglyphtounicode{four}{0034}% \pdfglyphtounicode{five}{0035}% \pdfglyphtounicode{six}{0036}% \pdfglyphtounicode{seven}{0037}% \pdfglyphtounicode{eight}{0038}% \pdfglyphtounicode{nine}{0039}% \pdfglyphtounicode{colon}{003A}% \pdfglyphtounicode{semicolon}{003B}% \pdfglyphtounicode{less}{003C}% \pdfglyphtounicode{equal}{003D}% \pdfglyphtounicode{greater}{003E}% \pdfglyphtounicode{question}{003F}% \pdfglyphtounicode{at}{0040}% \pdfglyphtounicode{A}{0041}% \pdfglyphtounicode{B}{0042}% \pdfglyphtounicode{C}{0043}% \pdfglyphtounicode{D}{0044}% \pdfglyphtounicode{E}{0045}% \pdfglyphtounicode{F}{0046}% \pdfglyphtounicode{G}{0047}% \pdfglyphtounicode{H}{0048}% \pdfglyphtounicode{I}{0049}% \pdfglyphtounicode{J}{004A}% \pdfglyphtounicode{K}{004B}% \pdfglyphtounicode{L}{004C}% \pdfglyphtounicode{M}{004D}% \pdfglyphtounicode{N}{004E}% \pdfglyphtounicode{O}{004F}% \pdfglyphtounicode{P}{0050}% \pdfglyphtounicode{Q}{0051}% \pdfglyphtounicode{R}{0052}% \pdfglyphtounicode{S}{0053}% \pdfglyphtounicode{T}{0054}% \pdfglyphtounicode{U}{0055}% \pdfglyphtounicode{V}{0056}% \pdfglyphtounicode{W}{0057}% \pdfglyphtounicode{X}{0058}% \pdfglyphtounicode{Y}{0059}% \pdfglyphtounicode{Z}{005A}% \pdfglyphtounicode{bracketleft}{005B}% \pdfglyphtounicode{backslash}{005C}% \pdfglyphtounicode{bracketright}{005D}% \pdfglyphtounicode{asciicircum}{005E}% \pdfglyphtounicode{underscore}{005F}% \pdfglyphtounicode{grave}{0060}% \pdfglyphtounicode{a}{0061}% \pdfglyphtounicode{b}{0062}% \pdfglyphtounicode{c}{0063}% \pdfglyphtounicode{d}{0064}% \pdfglyphtounicode{e}{0065}% \pdfglyphtounicode{f}{0066}% \pdfglyphtounicode{g}{0067}% \pdfglyphtounicode{h}{0068}% \pdfglyphtounicode{i}{0069}% \pdfglyphtounicode{j}{006A}% \pdfglyphtounicode{k}{006B}% \pdfglyphtounicode{l}{006C}% \pdfglyphtounicode{m}{006D}% \pdfglyphtounicode{n}{006E}% \pdfglyphtounicode{o}{006F}% \pdfglyphtounicode{p}{0070}% \pdfglyphtounicode{q}{0071}% \pdfglyphtounicode{r}{0072}% \pdfglyphtounicode{s}{0073}% \pdfglyphtounicode{t}{0074}% \pdfglyphtounicode{u}{0075}% \pdfglyphtounicode{v}{0076}% \pdfglyphtounicode{w}{0077}% \pdfglyphtounicode{x}{0078}% \pdfglyphtounicode{y}{0079}% \pdfglyphtounicode{z}{007A}% \pdfglyphtounicode{braceleft}{007B}% \pdfglyphtounicode{bar}{007C}% \pdfglyphtounicode{braceright}{007D}% \pdfglyphtounicode{asciitilde}{007E}% \pdfglyphtounicode{exclamdown}{00A1}% \pdfglyphtounicode{cent}{00A2}% \pdfglyphtounicode{sterling}{00A3}% \pdfglyphtounicode{currency}{00A4}% \pdfglyphtounicode{yen}{00A5}% \pdfglyphtounicode{brokenbar}{00A6}% \pdfglyphtounicode{section}{00A7}% \pdfglyphtounicode{dieresis}{00A8}% \pdfglyphtounicode{copyright}{00A9}% \pdfglyphtounicode{ordfeminine}{00AA}% \pdfglyphtounicode{guillemotleft}{00AB}% \pdfglyphtounicode{logicalnot}{00AC}% \pdfglyphtounicode{registered}{00AE}% \pdfglyphtounicode{macron}{00AF}% \pdfglyphtounicode{degree}{00B0}% \pdfglyphtounicode{plusminus}{00B1}% \pdfglyphtounicode{acute}{00B4}% \pdfglyphtounicode{mu}{00B5}% \pdfglyphtounicode{paragraph}{00B6}% \pdfglyphtounicode{periodcentered}{00B7}% \pdfglyphtounicode{cedilla}{00B8}% \pdfglyphtounicode{ordmasculine}{00BA}% \pdfglyphtounicode{guillemotright}{00BB}% \pdfglyphtounicode{onequarter}{00BC}% \pdfglyphtounicode{onehalf}{00BD}% \pdfglyphtounicode{threequarters}{00BE}% \pdfglyphtounicode{questiondown}{00BF}% \pdfglyphtounicode{Agrave}{00C0}% \pdfglyphtounicode{Aacute}{00C1}% \pdfglyphtounicode{Acircumflex}{00C2}% \pdfglyphtounicode{Atilde}{00C3}% \pdfglyphtounicode{Adieresis}{00C4}% \pdfglyphtounicode{Aring}{00C5}% \pdfglyphtounicode{AE}{00C6}% \pdfglyphtounicode{Ccedilla}{00C7}% \pdfglyphtounicode{Egrave}{00C8}% \pdfglyphtounicode{Eacute}{00C9}% \pdfglyphtounicode{Ecircumflex}{00CA}% \pdfglyphtounicode{Edieresis}{00CB}% \pdfglyphtounicode{Igrave}{00CC}% \pdfglyphtounicode{Iacute}{00CD}% \pdfglyphtounicode{Icircumflex}{00CE}% \pdfglyphtounicode{Idieresis}{00CF}% \pdfglyphtounicode{Eth}{00D0}% \pdfglyphtounicode{Ntilde}{00D1}% \pdfglyphtounicode{Ograve}{00D2}% \pdfglyphtounicode{Oacute}{00D3}% \pdfglyphtounicode{Ocircumflex}{00D4}% \pdfglyphtounicode{Otilde}{00D5}% \pdfglyphtounicode{Odieresis}{00D6}% \pdfglyphtounicode{multiply}{00D7}% \pdfglyphtounicode{Oslash}{00D8}% \pdfglyphtounicode{Ugrave}{00D9}% \pdfglyphtounicode{Uacute}{00DA}% \pdfglyphtounicode{Ucircumflex}{00DB}% \pdfglyphtounicode{Udieresis}{00DC}% \pdfglyphtounicode{Yacute}{00DD}% \pdfglyphtounicode{Thorn}{00DE}% \pdfglyphtounicode{germandbls}{00DF}% \pdfglyphtounicode{agrave}{00E0}% \pdfglyphtounicode{aacute}{00E1}% \pdfglyphtounicode{acircumflex}{00E2}% \pdfglyphtounicode{atilde}{00E3}% \pdfglyphtounicode{adieresis}{00E4}% \pdfglyphtounicode{aring}{00E5}% \pdfglyphtounicode{ae}{00E6}% \pdfglyphtounicode{ccedilla}{00E7}% \pdfglyphtounicode{egrave}{00E8}% \pdfglyphtounicode{eacute}{00E9}% \pdfglyphtounicode{ecircumflex}{00EA}% \pdfglyphtounicode{edieresis}{00EB}% \pdfglyphtounicode{igrave}{00EC}% \pdfglyphtounicode{iacute}{00ED}% \pdfglyphtounicode{icircumflex}{00EE}% \pdfglyphtounicode{idieresis}{00EF}% \pdfglyphtounicode{eth}{00F0}% \pdfglyphtounicode{ntilde}{00F1}% \pdfglyphtounicode{ograve}{00F2}% \pdfglyphtounicode{oacute}{00F3}% \pdfglyphtounicode{ocircumflex}{00F4}% \pdfglyphtounicode{otilde}{00F5}% \pdfglyphtounicode{odieresis}{00F6}% \pdfglyphtounicode{divide}{00F7}% \pdfglyphtounicode{oslash}{00F8}% \pdfglyphtounicode{ugrave}{00F9}% \pdfglyphtounicode{uacute}{00FA}% \pdfglyphtounicode{ucircumflex}{00FB}% \pdfglyphtounicode{udieresis}{00FC}% \pdfglyphtounicode{yacute}{00FD}% \pdfglyphtounicode{thorn}{00FE}% \pdfglyphtounicode{ydieresis}{00FF}% \pdfglyphtounicode{Amacron}{0100}% \pdfglyphtounicode{amacron}{0101}% \pdfglyphtounicode{Abreve}{0102}% \pdfglyphtounicode{abreve}{0103}% \pdfglyphtounicode{Aogonek}{0104}% \pdfglyphtounicode{aogonek}{0105}% \pdfglyphtounicode{Cacute}{0106}% \pdfglyphtounicode{cacute}{0107}% \pdfglyphtounicode{Ccircumflex}{0108}% \pdfglyphtounicode{ccircumflex}{0109}% \pdfglyphtounicode{Cdotaccent}{010A}% \pdfglyphtounicode{cdotaccent}{010B}% \pdfglyphtounicode{Ccaron}{010C}% \pdfglyphtounicode{ccaron}{010D}% \pdfglyphtounicode{Dcaron}{010E}% \pdfglyphtounicode{dcaron}{010F}% \pdfglyphtounicode{Dcroat}{0110}% \pdfglyphtounicode{dcroat}{0111}% \pdfglyphtounicode{Emacron}{0112}% \pdfglyphtounicode{emacron}{0113}% \pdfglyphtounicode{Ebreve}{0114}% \pdfglyphtounicode{ebreve}{0115}% \pdfglyphtounicode{Edotaccent}{0116}% \pdfglyphtounicode{edotaccent}{0117}% \pdfglyphtounicode{Eogonek}{0118}% \pdfglyphtounicode{eogonek}{0119}% \pdfglyphtounicode{Ecaron}{011A}% \pdfglyphtounicode{ecaron}{011B}% \pdfglyphtounicode{Gcircumflex}{011C}% \pdfglyphtounicode{gcircumflex}{011D}% \pdfglyphtounicode{Gbreve}{011E}% \pdfglyphtounicode{gbreve}{011F}% \pdfglyphtounicode{Gdotaccent}{0120}% \pdfglyphtounicode{gdotaccent}{0121}% \pdfglyphtounicode{Gcommaaccent}{0122}% \pdfglyphtounicode{gcommaaccent}{0123}% \pdfglyphtounicode{Hcircumflex}{0124}% \pdfglyphtounicode{hcircumflex}{0125}% \pdfglyphtounicode{Hbar}{0126}% \pdfglyphtounicode{hbar}{0127}% \pdfglyphtounicode{Itilde}{0128}% \pdfglyphtounicode{itilde}{0129}% \pdfglyphtounicode{Imacron}{012A}% \pdfglyphtounicode{imacron}{012B}% \pdfglyphtounicode{Ibreve}{012C}% \pdfglyphtounicode{ibreve}{012D}% \pdfglyphtounicode{Iogonek}{012E}% \pdfglyphtounicode{iogonek}{012F}% \pdfglyphtounicode{Idotaccent}{0130}% \pdfglyphtounicode{dotlessi}{0131}% \pdfglyphtounicode{IJ}{0132}% \pdfglyphtounicode{ij}{0133}% \pdfglyphtounicode{Jcircumflex}{0134}% \pdfglyphtounicode{jcircumflex}{0135}% \pdfglyphtounicode{Kcommaaccent}{0136}% \pdfglyphtounicode{kcommaaccent}{0137}% \pdfglyphtounicode{kgreenlandic}{0138}% \pdfglyphtounicode{Lacute}{0139}% \pdfglyphtounicode{lacute}{013A}% \pdfglyphtounicode{Lcommaaccent}{013B}% \pdfglyphtounicode{lcommaaccent}{013C}% \pdfglyphtounicode{Lcaron}{013D}% \pdfglyphtounicode{lcaron}{013E}% \pdfglyphtounicode{Ldot}{013F}% \pdfglyphtounicode{ldot}{0140}% \pdfglyphtounicode{Lslash}{0141}% \pdfglyphtounicode{lslash}{0142}% \pdfglyphtounicode{Nacute}{0143}% \pdfglyphtounicode{nacute}{0144}% \pdfglyphtounicode{Ncommaaccent}{0145}% \pdfglyphtounicode{ncommaaccent}{0146}% \pdfglyphtounicode{Ncaron}{0147}% \pdfglyphtounicode{ncaron}{0148}% \pdfglyphtounicode{napostrophe}{0149}% \pdfglyphtounicode{Eng}{014A}% \pdfglyphtounicode{eng}{014B}% \pdfglyphtounicode{Omacron}{014C}% \pdfglyphtounicode{omacron}{014D}% \pdfglyphtounicode{Obreve}{014E}% \pdfglyphtounicode{obreve}{014F}% \pdfglyphtounicode{Ohungarumlaut}{0150}% \pdfglyphtounicode{ohungarumlaut}{0151}% \pdfglyphtounicode{OE}{0152}% \pdfglyphtounicode{oe}{0153}% \pdfglyphtounicode{Racute}{0154}% \pdfglyphtounicode{racute}{0155}% \pdfglyphtounicode{Rcommaaccent}{0156}% \pdfglyphtounicode{rcommaaccent}{0157}% \pdfglyphtounicode{Rcaron}{0158}% \pdfglyphtounicode{rcaron}{0159}% \pdfglyphtounicode{Sacute}{015A}% \pdfglyphtounicode{sacute}{015B}% \pdfglyphtounicode{Scircumflex}{015C}% \pdfglyphtounicode{scircumflex}{015D}% \pdfglyphtounicode{Scedilla}{015E}% \pdfglyphtounicode{scedilla}{015F}% \pdfglyphtounicode{Scaron}{0160}% \pdfglyphtounicode{scaron}{0161}% \pdfglyphtounicode{Tcommaaccent}{0162}% \pdfglyphtounicode{tcommaaccent}{0163}% \pdfglyphtounicode{Tcaron}{0164}% \pdfglyphtounicode{tcaron}{0165}% \pdfglyphtounicode{Tbar}{0166}% \pdfglyphtounicode{tbar}{0167}% \pdfglyphtounicode{Utilde}{0168}% \pdfglyphtounicode{utilde}{0169}% \pdfglyphtounicode{Umacron}{016A}% \pdfglyphtounicode{umacron}{016B}% \pdfglyphtounicode{Ubreve}{016C}% \pdfglyphtounicode{ubreve}{016D}% \pdfglyphtounicode{Uring}{016E}% \pdfglyphtounicode{uring}{016F}% \pdfglyphtounicode{Uhungarumlaut}{0170}% \pdfglyphtounicode{uhungarumlaut}{0171}% \pdfglyphtounicode{Uogonek}{0172}% \pdfglyphtounicode{uogonek}{0173}% \pdfglyphtounicode{Wcircumflex}{0174}% \pdfglyphtounicode{wcircumflex}{0175}% \pdfglyphtounicode{Ycircumflex}{0176}% \pdfglyphtounicode{ycircumflex}{0177}% \pdfglyphtounicode{Ydieresis}{0178}% \pdfglyphtounicode{Zacute}{0179}% \pdfglyphtounicode{zacute}{017A}% \pdfglyphtounicode{Zdotaccent}{017B}% \pdfglyphtounicode{zdotaccent}{017C}% \pdfglyphtounicode{Zcaron}{017D}% \pdfglyphtounicode{zcaron}{017E}% \pdfglyphtounicode{longs}{017F}% \pdfglyphtounicode{florin}{0192}% \pdfglyphtounicode{Ohorn}{01A0}% \pdfglyphtounicode{ohorn}{01A1}% \pdfglyphtounicode{Uhorn}{01AF}% \pdfglyphtounicode{uhorn}{01B0}% \pdfglyphtounicode{Gcaron}{01E6}% \pdfglyphtounicode{gcaron}{01E7}% \pdfglyphtounicode{Aringacute}{01FA}% \pdfglyphtounicode{aringacute}{01FB}% \pdfglyphtounicode{AEacute}{01FC}% \pdfglyphtounicode{aeacute}{01FD}% \pdfglyphtounicode{Oslashacute}{01FE}% \pdfglyphtounicode{oslashacute}{01FF}% \pdfglyphtounicode{Scommaaccent}{0218}% \pdfglyphtounicode{scommaaccent}{0219}% \pdfglyphtounicode{afii57929}{02BC}% \pdfglyphtounicode{afii64937}{02BD}% \pdfglyphtounicode{circumflex}{02C6}% \pdfglyphtounicode{caron}{02C7}% \pdfglyphtounicode{breve}{02D8}% \pdfglyphtounicode{dotaccent}{02D9}% \pdfglyphtounicode{ring}{02DA}% \pdfglyphtounicode{ogonek}{02DB}% \pdfglyphtounicode{tilde}{02DC}% \pdfglyphtounicode{hungarumlaut}{02DD}% \pdfglyphtounicode{gravecomb}{0300}% \pdfglyphtounicode{acutecomb}{0301}% \pdfglyphtounicode{tildecomb}{0303}% \pdfglyphtounicode{hookabovecomb}{0309}% \pdfglyphtounicode{dotbelowcomb}{0323}% \pdfglyphtounicode{tonos}{0384}% \pdfglyphtounicode{dieresistonos}{0385}% \pdfglyphtounicode{Alphatonos}{0386}% \pdfglyphtounicode{anoteleia}{0387}% \pdfglyphtounicode{Epsilontonos}{0388}% \pdfglyphtounicode{Etatonos}{0389}% \pdfglyphtounicode{Iotatonos}{038A}% \pdfglyphtounicode{Omicrontonos}{038C}% \pdfglyphtounicode{Upsilontonos}{038E}% \pdfglyphtounicode{Omegatonos}{038F}% \pdfglyphtounicode{iotadieresistonos}{0390}% \pdfglyphtounicode{Alpha}{0391}% \pdfglyphtounicode{Beta}{0392}% \pdfglyphtounicode{Gamma}{0393}% \pdfglyphtounicode{Epsilon}{0395}% \pdfglyphtounicode{Zeta}{0396}% \pdfglyphtounicode{Eta}{0397}% \pdfglyphtounicode{Theta}{0398}% \pdfglyphtounicode{Iota}{0399}% \pdfglyphtounicode{Kappa}{039A}% \pdfglyphtounicode{Lambda}{039B}% \pdfglyphtounicode{Mu}{039C}% \pdfglyphtounicode{Nu}{039D}% \pdfglyphtounicode{Xi}{039E}% \pdfglyphtounicode{Omicron}{039F}% \pdfglyphtounicode{Pi}{03A0}% \pdfglyphtounicode{Rho}{03A1}% \pdfglyphtounicode{Sigma}{03A3}% \pdfglyphtounicode{Tau}{03A4}% \pdfglyphtounicode{Upsilon}{03A5}% \pdfglyphtounicode{Phi}{03A6}% \pdfglyphtounicode{Chi}{03A7}% \pdfglyphtounicode{Psi}{03A8}% \pdfglyphtounicode{Iotadieresis}{03AA}% \pdfglyphtounicode{Upsilondieresis}{03AB}% \pdfglyphtounicode{alphatonos}{03AC}% \pdfglyphtounicode{epsilontonos}{03AD}% \pdfglyphtounicode{etatonos}{03AE}% \pdfglyphtounicode{iotatonos}{03AF}% \pdfglyphtounicode{upsilondieresistonos}{03B0}% \pdfglyphtounicode{alpha}{03B1}% \pdfglyphtounicode{beta}{03B2}% \pdfglyphtounicode{gamma}{03B3}% \pdfglyphtounicode{delta}{03B4}% \pdfglyphtounicode{epsilon}{03B5}% \pdfglyphtounicode{zeta}{03B6}% \pdfglyphtounicode{eta}{03B7}% \pdfglyphtounicode{theta}{03B8}% \pdfglyphtounicode{iota}{03B9}% \pdfglyphtounicode{kappa}{03BA}% \pdfglyphtounicode{lambda}{03BB}% \pdfglyphtounicode{nu}{03BD}% \pdfglyphtounicode{xi}{03BE}% \pdfglyphtounicode{omicron}{03BF}% \pdfglyphtounicode{pi}{03C0}% \pdfglyphtounicode{rho}{03C1}% \pdfglyphtounicode{sigma1}{03C2}% \pdfglyphtounicode{sigma}{03C3}% \pdfglyphtounicode{tau}{03C4}% \pdfglyphtounicode{upsilon}{03C5}% \pdfglyphtounicode{phi}{03C6}% \pdfglyphtounicode{chi}{03C7}% \pdfglyphtounicode{psi}{03C8}% \pdfglyphtounicode{omega}{03C9}% \pdfglyphtounicode{iotadieresis}{03CA}% \pdfglyphtounicode{upsilondieresis}{03CB}% \pdfglyphtounicode{omicrontonos}{03CC}% \pdfglyphtounicode{upsilontonos}{03CD}% \pdfglyphtounicode{omegatonos}{03CE}% \pdfglyphtounicode{theta1}{03D1}% \pdfglyphtounicode{Upsilon1}{03D2}% \pdfglyphtounicode{phi1}{03D5}% \pdfglyphtounicode{omega1}{03D6}% \pdfglyphtounicode{afii10023}{0401}% \pdfglyphtounicode{afii10051}{0402}% \pdfglyphtounicode{afii10052}{0403}% \pdfglyphtounicode{afii10053}{0404}% \pdfglyphtounicode{afii10054}{0405}% \pdfglyphtounicode{afii10055}{0406}% \pdfglyphtounicode{afii10056}{0407}% \pdfglyphtounicode{afii10057}{0408}% \pdfglyphtounicode{afii10058}{0409}% \pdfglyphtounicode{afii10059}{040A}% \pdfglyphtounicode{afii10060}{040B}% \pdfglyphtounicode{afii10061}{040C}% \pdfglyphtounicode{afii10062}{040E}% \pdfglyphtounicode{afii10145}{040F}% \pdfglyphtounicode{afii10017}{0410}% \pdfglyphtounicode{afii10018}{0411}% \pdfglyphtounicode{afii10019}{0412}% \pdfglyphtounicode{afii10020}{0413}% \pdfglyphtounicode{afii10021}{0414}% \pdfglyphtounicode{afii10022}{0415}% \pdfglyphtounicode{afii10024}{0416}% \pdfglyphtounicode{afii10025}{0417}% \pdfglyphtounicode{afii10026}{0418}% \pdfglyphtounicode{afii10027}{0419}% \pdfglyphtounicode{afii10028}{041A}% \pdfglyphtounicode{afii10029}{041B}% \pdfglyphtounicode{afii10030}{041C}% \pdfglyphtounicode{afii10031}{041D}% \pdfglyphtounicode{afii10032}{041E}% \pdfglyphtounicode{afii10033}{041F}% \pdfglyphtounicode{afii10034}{0420}% \pdfglyphtounicode{afii10035}{0421}% \pdfglyphtounicode{afii10036}{0422}% \pdfglyphtounicode{afii10037}{0423}% \pdfglyphtounicode{afii10038}{0424}% \pdfglyphtounicode{afii10039}{0425}% \pdfglyphtounicode{afii10040}{0426}% \pdfglyphtounicode{afii10041}{0427}% \pdfglyphtounicode{afii10042}{0428}% \pdfglyphtounicode{afii10043}{0429}% \pdfglyphtounicode{afii10044}{042A}% \pdfglyphtounicode{afii10045}{042B}% \pdfglyphtounicode{afii10046}{042C}% \pdfglyphtounicode{afii10047}{042D}% \pdfglyphtounicode{afii10048}{042E}% \pdfglyphtounicode{afii10049}{042F}% \pdfglyphtounicode{afii10065}{0430}% \pdfglyphtounicode{afii10066}{0431}% \pdfglyphtounicode{afii10067}{0432}% \pdfglyphtounicode{afii10068}{0433}% \pdfglyphtounicode{afii10069}{0434}% \pdfglyphtounicode{afii10070}{0435}% \pdfglyphtounicode{afii10072}{0436}% \pdfglyphtounicode{afii10073}{0437}% \pdfglyphtounicode{afii10074}{0438}% \pdfglyphtounicode{afii10075}{0439}% \pdfglyphtounicode{afii10076}{043A}% \pdfglyphtounicode{afii10077}{043B}% \pdfglyphtounicode{afii10078}{043C}% \pdfglyphtounicode{afii10079}{043D}% \pdfglyphtounicode{afii10080}{043E}% \pdfglyphtounicode{afii10081}{043F}% \pdfglyphtounicode{afii10082}{0440}% \pdfglyphtounicode{afii10083}{0441}% \pdfglyphtounicode{afii10084}{0442}% \pdfglyphtounicode{afii10085}{0443}% \pdfglyphtounicode{afii10086}{0444}% \pdfglyphtounicode{afii10087}{0445}% \pdfglyphtounicode{afii10088}{0446}% \pdfglyphtounicode{afii10089}{0447}% \pdfglyphtounicode{afii10090}{0448}% \pdfglyphtounicode{afii10091}{0449}% \pdfglyphtounicode{afii10092}{044A}% \pdfglyphtounicode{afii10093}{044B}% \pdfglyphtounicode{afii10094}{044C}% \pdfglyphtounicode{afii10095}{044D}% \pdfglyphtounicode{afii10096}{044E}% \pdfglyphtounicode{afii10097}{044F}% \pdfglyphtounicode{afii10071}{0451}% \pdfglyphtounicode{afii10099}{0452}% \pdfglyphtounicode{afii10100}{0453}% \pdfglyphtounicode{afii10101}{0454}% \pdfglyphtounicode{afii10102}{0455}% \pdfglyphtounicode{afii10103}{0456}% \pdfglyphtounicode{afii10104}{0457}% \pdfglyphtounicode{afii10105}{0458}% \pdfglyphtounicode{afii10106}{0459}% \pdfglyphtounicode{afii10107}{045A}% \pdfglyphtounicode{afii10108}{045B}% \pdfglyphtounicode{afii10109}{045C}% \pdfglyphtounicode{afii10110}{045E}% \pdfglyphtounicode{afii10193}{045F}% \pdfglyphtounicode{afii10146}{0462}% \pdfglyphtounicode{afii10194}{0463}% \pdfglyphtounicode{afii10147}{0472}% \pdfglyphtounicode{afii10195}{0473}% \pdfglyphtounicode{afii10148}{0474}% \pdfglyphtounicode{afii10196}{0475}% \pdfglyphtounicode{afii10050}{0490}% \pdfglyphtounicode{afii10098}{0491}% \pdfglyphtounicode{afii10846}{04D9}% \pdfglyphtounicode{afii57799}{05B0}% \pdfglyphtounicode{afii57801}{05B1}% \pdfglyphtounicode{afii57800}{05B2}% \pdfglyphtounicode{afii57802}{05B3}% \pdfglyphtounicode{afii57793}{05B4}% \pdfglyphtounicode{afii57794}{05B5}% \pdfglyphtounicode{afii57795}{05B6}% \pdfglyphtounicode{afii57798}{05B7}% \pdfglyphtounicode{afii57797}{05B8}% \pdfglyphtounicode{afii57806}{05B9}% \pdfglyphtounicode{afii57796}{05BB}% \pdfglyphtounicode{afii57807}{05BC}% \pdfglyphtounicode{afii57839}{05BD}% \pdfglyphtounicode{afii57645}{05BE}% \pdfglyphtounicode{afii57841}{05BF}% \pdfglyphtounicode{afii57842}{05C0}% \pdfglyphtounicode{afii57804}{05C1}% \pdfglyphtounicode{afii57803}{05C2}% \pdfglyphtounicode{afii57658}{05C3}% \pdfglyphtounicode{afii57664}{05D0}% \pdfglyphtounicode{afii57665}{05D1}% \pdfglyphtounicode{afii57666}{05D2}% \pdfglyphtounicode{afii57667}{05D3}% \pdfglyphtounicode{afii57668}{05D4}% \pdfglyphtounicode{afii57669}{05D5}% \pdfglyphtounicode{afii57670}{05D6}% \pdfglyphtounicode{afii57671}{05D7}% \pdfglyphtounicode{afii57672}{05D8}% \pdfglyphtounicode{afii57673}{05D9}% \pdfglyphtounicode{afii57674}{05DA}% \pdfglyphtounicode{afii57675}{05DB}% \pdfglyphtounicode{afii57676}{05DC}% \pdfglyphtounicode{afii57677}{05DD}% \pdfglyphtounicode{afii57678}{05DE}% \pdfglyphtounicode{afii57679}{05DF}% \pdfglyphtounicode{afii57680}{05E0}% \pdfglyphtounicode{afii57681}{05E1}% \pdfglyphtounicode{afii57682}{05E2}% \pdfglyphtounicode{afii57683}{05E3}% \pdfglyphtounicode{afii57684}{05E4}% \pdfglyphtounicode{afii57685}{05E5}% \pdfglyphtounicode{afii57686}{05E6}% \pdfglyphtounicode{afii57687}{05E7}% \pdfglyphtounicode{afii57688}{05E8}% \pdfglyphtounicode{afii57689}{05E9}% \pdfglyphtounicode{afii57690}{05EA}% \pdfglyphtounicode{afii57716}{05F0}% \pdfglyphtounicode{afii57717}{05F1}% \pdfglyphtounicode{afii57718}{05F2}% \pdfglyphtounicode{afii57388}{060C}% \pdfglyphtounicode{afii57403}{061B}% \pdfglyphtounicode{afii57407}{061F}% \pdfglyphtounicode{afii57409}{0621}% \pdfglyphtounicode{afii57410}{0622}% \pdfglyphtounicode{afii57411}{0623}% \pdfglyphtounicode{afii57412}{0624}% \pdfglyphtounicode{afii57413}{0625}% \pdfglyphtounicode{afii57414}{0626}% \pdfglyphtounicode{afii57415}{0627}% \pdfglyphtounicode{afii57416}{0628}% \pdfglyphtounicode{afii57417}{0629}% \pdfglyphtounicode{afii57418}{062A}% \pdfglyphtounicode{afii57419}{062B}% \pdfglyphtounicode{afii57420}{062C}% \pdfglyphtounicode{afii57421}{062D}% \pdfglyphtounicode{afii57422}{062E}% \pdfglyphtounicode{afii57423}{062F}% \pdfglyphtounicode{afii57424}{0630}% \pdfglyphtounicode{afii57425}{0631}% \pdfglyphtounicode{afii57426}{0632}% \pdfglyphtounicode{afii57427}{0633}% \pdfglyphtounicode{afii57428}{0634}% \pdfglyphtounicode{afii57429}{0635}% \pdfglyphtounicode{afii57430}{0636}% \pdfglyphtounicode{afii57431}{0637}% \pdfglyphtounicode{afii57432}{0638}% \pdfglyphtounicode{afii57433}{0639}% \pdfglyphtounicode{afii57434}{063A}% \pdfglyphtounicode{afii57440}{0640}% \pdfglyphtounicode{afii57441}{0641}% \pdfglyphtounicode{afii57442}{0642}% \pdfglyphtounicode{afii57443}{0643}% \pdfglyphtounicode{afii57444}{0644}% \pdfglyphtounicode{afii57445}{0645}% \pdfglyphtounicode{afii57446}{0646}% \pdfglyphtounicode{afii57470}{0647}% \pdfglyphtounicode{afii57448}{0648}% \pdfglyphtounicode{afii57449}{0649}% \pdfglyphtounicode{afii57450}{064A}% \pdfglyphtounicode{afii57451}{064B}% \pdfglyphtounicode{afii57452}{064C}% \pdfglyphtounicode{afii57453}{064D}% \pdfglyphtounicode{afii57454}{064E}% \pdfglyphtounicode{afii57455}{064F}% \pdfglyphtounicode{afii57456}{0650}% \pdfglyphtounicode{afii57457}{0651}% \pdfglyphtounicode{afii57458}{0652}% \pdfglyphtounicode{afii57392}{0660}% \pdfglyphtounicode{afii57393}{0661}% \pdfglyphtounicode{afii57394}{0662}% \pdfglyphtounicode{afii57395}{0663}% \pdfglyphtounicode{afii57396}{0664}% \pdfglyphtounicode{afii57397}{0665}% \pdfglyphtounicode{afii57398}{0666}% \pdfglyphtounicode{afii57399}{0667}% \pdfglyphtounicode{afii57400}{0668}% \pdfglyphtounicode{afii57401}{0669}% \pdfglyphtounicode{afii57381}{066A}% \pdfglyphtounicode{afii63167}{066D}% \pdfglyphtounicode{afii57511}{0679}% \pdfglyphtounicode{afii57506}{067E}% \pdfglyphtounicode{afii57507}{0686}% \pdfglyphtounicode{afii57512}{0688}% \pdfglyphtounicode{afii57513}{0691}% \pdfglyphtounicode{afii57508}{0698}% \pdfglyphtounicode{afii57505}{06A4}% \pdfglyphtounicode{afii57509}{06AF}% \pdfglyphtounicode{afii57514}{06BA}% \pdfglyphtounicode{afii57519}{06D2}% \pdfglyphtounicode{afii57534}{06D5}% \pdfglyphtounicode{Wgrave}{1E80}% \pdfglyphtounicode{wgrave}{1E81}% \pdfglyphtounicode{Wacute}{1E82}% \pdfglyphtounicode{wacute}{1E83}% \pdfglyphtounicode{Wdieresis}{1E84}% \pdfglyphtounicode{wdieresis}{1E85}% \pdfglyphtounicode{Ygrave}{1EF2}% \pdfglyphtounicode{ygrave}{1EF3}% \pdfglyphtounicode{afii61664}{200C}% \pdfglyphtounicode{afii301}{200D}% \pdfglyphtounicode{afii299}{200E}% \pdfglyphtounicode{afii300}{200F}% \pdfglyphtounicode{figuredash}{2012}% \pdfglyphtounicode{endash}{2013}% \pdfglyphtounicode{emdash}{2014}% \pdfglyphtounicode{afii208}{2015}% \pdfglyphtounicode{underscoredbl}{2017}% \pdfglyphtounicode{quoteleft}{2018}% \pdfglyphtounicode{quoteright}{2019}% \pdfglyphtounicode{quotesinglbase}{201A}% \pdfglyphtounicode{quotereversed}{201B}% \pdfglyphtounicode{quotedblleft}{201C}% \pdfglyphtounicode{quotedblright}{201D}% \pdfglyphtounicode{quotedblbase}{201E}% \pdfglyphtounicode{dagger}{2020}% \pdfglyphtounicode{daggerdbl}{2021}% \pdfglyphtounicode{bullet}{2022}% \pdfglyphtounicode{onedotenleader}{2024}% \pdfglyphtounicode{twodotenleader}{2025}% \pdfglyphtounicode{ellipsis}{2026}% \pdfglyphtounicode{afii61573}{202C}% \pdfglyphtounicode{afii61574}{202D}% \pdfglyphtounicode{afii61575}{202E}% \pdfglyphtounicode{perthousand}{2030}% \pdfglyphtounicode{minute}{2032}% \pdfglyphtounicode{second}{2033}% \pdfglyphtounicode{guilsinglleft}{2039}% \pdfglyphtounicode{guilsinglright}{203A}% \pdfglyphtounicode{exclamdbl}{203C}% \pdfglyphtounicode{fraction}{2044}% \pdfglyphtounicode{colonmonetary}{20A1}% \pdfglyphtounicode{franc}{20A3}% \pdfglyphtounicode{lira}{20A4}% \pdfglyphtounicode{peseta}{20A7}% \pdfglyphtounicode{afii57636}{20AA}% \pdfglyphtounicode{dong}{20AB}% \pdfglyphtounicode{Euro}{20AC}% \pdfglyphtounicode{afii61248}{2105}% \pdfglyphtounicode{Ifraktur}{2111}% \pdfglyphtounicode{afii61289}{2113}% \pdfglyphtounicode{afii61352}{2116}% \pdfglyphtounicode{weierstrass}{2118}% \pdfglyphtounicode{Rfraktur}{211C}% \pdfglyphtounicode{prescription}{211E}% \pdfglyphtounicode{trademark}{2122}% \pdfglyphtounicode{Omega}{2126}% \pdfglyphtounicode{estimated}{212E}% \pdfglyphtounicode{aleph}{2135}% \pdfglyphtounicode{onethird}{2153}% \pdfglyphtounicode{twothirds}{2154}% \pdfglyphtounicode{oneeighth}{215B}% \pdfglyphtounicode{threeeighths}{215C}% \pdfglyphtounicode{fiveeighths}{215D}% \pdfglyphtounicode{seveneighths}{215E}% \pdfglyphtounicode{arrowleft}{2190}% \pdfglyphtounicode{arrowup}{2191}% \pdfglyphtounicode{arrowright}{2192}% \pdfglyphtounicode{arrowdown}{2193}% \pdfglyphtounicode{arrowboth}{2194}% \pdfglyphtounicode{arrowupdn}{2195}% \pdfglyphtounicode{arrowupdnbse}{21A8}% \pdfglyphtounicode{carriagereturn}{21B5}% \pdfglyphtounicode{arrowdblleft}{21D0}% \pdfglyphtounicode{arrowdblup}{21D1}% \pdfglyphtounicode{arrowdblright}{21D2}% \pdfglyphtounicode{arrowdbldown}{21D3}% \pdfglyphtounicode{arrowdblboth}{21D4}% \pdfglyphtounicode{universal}{2200}% \pdfglyphtounicode{partialdiff}{2202}% \pdfglyphtounicode{existential}{2203}% \pdfglyphtounicode{emptyset}{2205}% \pdfglyphtounicode{Delta}{2206}% \pdfglyphtounicode{gradient}{2207}% \pdfglyphtounicode{element}{2208}% \pdfglyphtounicode{notelement}{2209}% \pdfglyphtounicode{suchthat}{220B}% \pdfglyphtounicode{product}{220F}% \pdfglyphtounicode{summation}{2211}% \pdfglyphtounicode{minus}{2212}% \pdfglyphtounicode{asteriskmath}{2217}% \pdfglyphtounicode{radical}{221A}% \pdfglyphtounicode{proportional}{221D}% \pdfglyphtounicode{infinity}{221E}% \pdfglyphtounicode{orthogonal}{221F}% \pdfglyphtounicode{angle}{2220}% \pdfglyphtounicode{logicaland}{2227}% \pdfglyphtounicode{logicalor}{2228}% \pdfglyphtounicode{intersection}{2229}% \pdfglyphtounicode{union}{222A}% \pdfglyphtounicode{integral}{222B}% \pdfglyphtounicode{therefore}{2234}% \pdfglyphtounicode{similar}{223C}% \pdfglyphtounicode{congruent}{2245}% \pdfglyphtounicode{approxequal}{2248}% \pdfglyphtounicode{notequal}{2260}% \pdfglyphtounicode{equivalence}{2261}% \pdfglyphtounicode{lessequal}{2264}% \pdfglyphtounicode{greaterequal}{2265}% \pdfglyphtounicode{propersubset}{2282}% \pdfglyphtounicode{propersuperset}{2283}% \pdfglyphtounicode{notsubset}{2284}% \pdfglyphtounicode{reflexsubset}{2286}% \pdfglyphtounicode{reflexsuperset}{2287}% \pdfglyphtounicode{circleplus}{2295}% \pdfglyphtounicode{circlemultiply}{2297}% \pdfglyphtounicode{perpendicular}{22A5}% \pdfglyphtounicode{dotmath}{22C5}% \pdfglyphtounicode{house}{2302}% \pdfglyphtounicode{revlogicalnot}{2310}% \pdfglyphtounicode{integraltp}{2320}% \pdfglyphtounicode{integralbt}{2321}% \pdfglyphtounicode{angleleft}{2329}% \pdfglyphtounicode{angleright}{232A}% \pdfglyphtounicode{SF100000}{2500}% \pdfglyphtounicode{SF110000}{2502}% \pdfglyphtounicode{SF10000}{250C}% \pdfglyphtounicode{SF30000}{2510}% \pdfglyphtounicode{SF20000}{2514}% \pdfglyphtounicode{SF40000}{2518}% \pdfglyphtounicode{SF80000}{251C}% \pdfglyphtounicode{SF90000}{2524}% \pdfglyphtounicode{SF60000}{252C}% \pdfglyphtounicode{SF70000}{2534}% \pdfglyphtounicode{SF50000}{253C}% \pdfglyphtounicode{SF430000}{2550}% \pdfglyphtounicode{SF240000}{2551}% \pdfglyphtounicode{SF510000}{2552}% \pdfglyphtounicode{SF520000}{2553}% \pdfglyphtounicode{SF390000}{2554}% \pdfglyphtounicode{SF220000}{2555}% \pdfglyphtounicode{SF210000}{2556}% \pdfglyphtounicode{SF250000}{2557}% \pdfglyphtounicode{SF500000}{2558}% \pdfglyphtounicode{SF490000}{2559}% \pdfglyphtounicode{SF380000}{255A}% \pdfglyphtounicode{SF280000}{255B}% \pdfglyphtounicode{SF270000}{255C}% \pdfglyphtounicode{SF260000}{255D}% \pdfglyphtounicode{SF360000}{255E}% \pdfglyphtounicode{SF370000}{255F}% \pdfglyphtounicode{SF420000}{2560}% \pdfglyphtounicode{SF190000}{2561}% \pdfglyphtounicode{SF200000}{2562}% \pdfglyphtounicode{SF230000}{2563}% \pdfglyphtounicode{SF470000}{2564}% \pdfglyphtounicode{SF480000}{2565}% \pdfglyphtounicode{SF410000}{2566}% \pdfglyphtounicode{SF450000}{2567}% \pdfglyphtounicode{SF460000}{2568}% \pdfglyphtounicode{SF400000}{2569}% \pdfglyphtounicode{SF540000}{256A}% \pdfglyphtounicode{SF530000}{256B}% \pdfglyphtounicode{SF440000}{256C}% \pdfglyphtounicode{upblock}{2580}% \pdfglyphtounicode{dnblock}{2584}% \pdfglyphtounicode{block}{2588}% \pdfglyphtounicode{lfblock}{258C}% \pdfglyphtounicode{rtblock}{2590}% \pdfglyphtounicode{ltshade}{2591}% \pdfglyphtounicode{shade}{2592}% \pdfglyphtounicode{dkshade}{2593}% \pdfglyphtounicode{filledbox}{25A0}% \pdfglyphtounicode{H22073}{25A1}% \pdfglyphtounicode{H18543}{25AA}% \pdfglyphtounicode{H18551}{25AB}% \pdfglyphtounicode{filledrect}{25AC}% \pdfglyphtounicode{triagup}{25B2}% \pdfglyphtounicode{triagrt}{25BA}% \pdfglyphtounicode{triagdn}{25BC}% \pdfglyphtounicode{triaglf}{25C4}% \pdfglyphtounicode{lozenge}{25CA}% \pdfglyphtounicode{circle}{25CB}% \pdfglyphtounicode{H18533}{25CF}% \pdfglyphtounicode{invbullet}{25D8}% \pdfglyphtounicode{invcircle}{25D9}% \pdfglyphtounicode{openbullet}{25E6}% \pdfglyphtounicode{smileface}{263A}% \pdfglyphtounicode{invsmileface}{263B}% \pdfglyphtounicode{sun}{263C}% \pdfglyphtounicode{female}{2640}% \pdfglyphtounicode{male}{2642}% \pdfglyphtounicode{spade}{2660}% \pdfglyphtounicode{club}{2663}% \pdfglyphtounicode{heart}{2665}% \pdfglyphtounicode{diamond}{2666}% \pdfglyphtounicode{musicalnote}{266A}% \pdfglyphtounicode{musicalnotedbl}{266B}% % \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-mkivhacks.mkiv0000644000175000017500000000251611754241457025011 0ustar norbertnorbert%D \module %D [ file=m-mkivhacks, %D version=2008.10.20, %D title=\CONTEXT\ Modules, %D subtitle=Temporary Compatilibility Hacks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 For Aditya, who needed it for his thesis. \startluacode -- -- a lot or work -- -- mathematics.slots.euler = { -- [0x03B1] = { "mr", 0x0B }, -- alpha -- } -- -- mathematics.slots.euler = table.merge(mathematics.slots.traditional,mathematics.slots.euler) -- -- versus a quick hack document.hacks = document.hacks or { } function document.hacks() mathematics.families.lcgreek = mathematics.families.mr mathematics.families.ucgreek = mathematics.families.mr mathematics.families.vargreek = mathematics.families.mr mathematics.define(mathematics.slots.euler) end \stopluacode % \usemodule[mkivhacks] \setups{eulermath} % \definetypeface[modern][mm][math][euler][default] % \usemathcollection[eul] % \switchtobodyfont[modern,11pt] % \starttext % $\alpha$ % \stoptext \startsetups eulermath \ctxlua{document.hacks()} \stopsetups \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-ent.lua0000644000175000017500000000332212130411274024127 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-ent'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type, next, tonumber = type, next, tonumber local byte, format = string.byte, string.format local utfchar = utf.char local lpegmatch = lpeg.match --[[ldx--

We provide (at least here) two entity handlers. The more extensive resolver consults a hash first, tries to convert to next, and finaly calls a handler when defines. When this all fails, the original entity is returned.

We do things different now but it's still somewhat experimental

--ldx]]-- local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end) local report_xml = logs.reporter("xml") local xml = xml xml.entities = xml.entities or { } storage.register("xml/entities", xml.entities, "xml.entities" ) local entities = xml.entities -- maybe some day properties function xml.registerentity(key,value) entities[key] = value if trace_entities then report_xml("registering entity %a as %a",key,value) end end if characters and characters.entities then function characters.registerentities(forcecopy) if forcecopy then table.setmetatableindex(entities,nil) for name, value in next, characters.entities do if not entities[name] then entities[name] = value end end else table.setmetatableindex(entities,characters.entities) end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-nl.mkii0000644000175000017500000000102011754241457024121 0ustar norbertnorbert%D \module %D [ file=cont-nl, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Dutch Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {dutch} \def\defaultlanguagetag{nl} \input context.mkii \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/attr-col.lua0000644000175000017500000004030512130411274024116 0ustar norbertnorbertif not modules then modules = { } end modules ['attr-col'] = { version = 1.001, comment = "companion to attr-col.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this module is being reconstructed and code will move to other places -- we can also do the nsnone via a metatable and then also se index 0 -- list could as well refer to the tables (instead of numbers that -- index into another table) .. depends on what we need local type = type local format = string.format local concat = table.concat local min, max, floor = math.min, math.max, math.floor local attributes, nodes, utilities, logs, backends, storage = attributes, nodes, utilities, logs, backends, storage local commands, context, interfaces = commands, context, interfaces local tex = tex local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local report_attributes = logs.reporter("attributes","colors") local report_colors = logs.reporter("colors","support") local report_transparencies = logs.reporter("transparencies","support") -- todo: document this but first reimplement this as it reflects the early -- days of luatex / mkiv and we have better ways now -- nb: attributes: color etc is much slower than normal (marks + literals) but ... -- nb. too many "0 g"s local states = attributes.states local tasks = nodes.tasks local nodeinjections = backends.nodeinjections local registrations = backends.registrations local unsetvalue = attributes.unsetvalue local registerstorage = storage.register local formatters = string.formatters -- We can distinguish between rules and glyphs but it's not worth the trouble. A -- first implementation did that and while it saves a bit for glyphs and rules, it -- costs more resourses for transparencies. So why bother. -- -- colors -- -- we can also collapse the two attributes: n, n+1, n+2 and then -- at the tex end add 0, 1, 2, but this is not faster and less -- flexible (since sometimes we freeze color attribute values at -- the lua end of the game) -- -- we also need to store the colorvalues because we need then in mp -- -- This is a compromis between speed and simplicity. We used to store the -- values and data in one array, which made in neccessary to store the -- converters that need node constructor into strings and evaluate them -- at runtime (after reading from storage). Think of: -- -- colors.strings = colors.strings or { } -- -- if environment.initex then -- colors.strings[color] = "return colors." .. colorspace .. "(" .. concat({...},",") .. ")" -- end -- -- registerstorage("attributes/colors/data", colors.strings, "attributes.colors.data") -- evaluated -- -- We assume that only processcolors are defined in the format. attributes.colors = attributes.colors or { } local colors = attributes.colors local a_color = attributes.private('color') local a_selector = attributes.private('colormodel') colors.data = allocate() colors.values = colors.values or { } colors.registered = colors.registered or { } colors.weightgray = true colors.attribute = a_color colors.selector = a_selector colors.default = 1 colors.main = nil colors.triggering = true colors.supported = true colors.model = "all" local data = colors.data local values = colors.values local registered = colors.registered local numbers = attributes.numbers local list = attributes.list registerstorage("attributes/colors/values", values, "attributes.colors.values") registerstorage("attributes/colors/registered", registered, "attributes.colors.registered") local f_colors = { rgb = formatters["r:%s:%s:%s"], cmyk = formatters["c:%s:%s:%s:%s"], gray = formatters["s:%s"], spot = formatters["p:%s:%s:%s:%s"], } local models = { [interfaces.variables.none] = unsetvalue, black = unsetvalue, bw = unsetvalue, all = 1, gray = 2, rgb = 3, cmyk = 4, } local function rgbtocmyk(r,g,b) -- we could reduce return 1-r, 1-g, 1-b, 0 end local function cmyktorgb(c,m,y,k) return 1.0 - min(1.0,c+k), 1.0 - min(1.0,m+k), 1.0 - min(1.0,y+k) end local function rgbtogray(r,g,b) if colors.weightgray then return .30*r + .59*g + .11*b else return r/3 + g/3 + b/3 end end local function cmyktogray(c,m,y,k) return rgbtogray(cmyktorgb(c,m,y,k)) end -- not critical so not needed: -- -- local function cmyktogray(c,m,y,k) -- local r, g, b = 1.0 - min(1.0,c+k), 1.0 - min(1.0,m+k), 1.0 - min(1.0,y+k) -- if colors.weightgray then -- return .30*r + .59*g + .11*b -- else -- return r/3 + g/3 + b/3 -- end -- end -- http://en.wikipedia.org/wiki/HSI_color_space -- http://nl.wikipedia.org/wiki/HSV_(kleurruimte) local function hsvtorgb(h,s,v) -- h = h % 360 local hd = h/60 local hf = floor(hd) local hi = hf % 6 -- local f = hd - hi local f = hd - hf local p = v * (1 - s) local q = v * (1 - f * s) local t = v * (1 - (1 - f) * s) if hi == 0 then return v, t, p elseif hi == 1 then return q, v, p elseif hi == 2 then return p, v, t elseif hi == 3 then return p, q, v elseif hi == 4 then return t, p, v elseif hi == 5 then return v, p, q else print("error in hsv -> rgb",hi,h,s,v) end end local function rgbtohsv(r,g,b) local offset, maximum, other_1, other_2 if r >= g and r >= b then offset, maximum, other_1, other_2 = 0, r, g, b elseif g >= r and g >= b then offset, maximum, other_1, other_2 = 2, g, b, r else offset, maximum, other_1, other_2 = 4, b, r, g end if maximum == 0 then return 0, 0, 0 end local minimum = other_1 < other_2 and other_1 or other_2 if maximum == minimum then return 0, 0, maximum end local delta = maximum - minimum return (offset + (other_1-other_2)/delta)*60, delta/maximum, maximum end local function graytorgb(s) -- unweighted return 1-s, 1-s, 1-s end local function hsvtogray(h,s,v) return rgb_to_gray(hsv_to_rgb(h,s,v)) end local function graytohsv(s) return 0, 0, s end colors.rgbtocmyk = rgbtocmyk colors.rgbtogray = rgbtogray colors.cmyktorgb = cmyktorgb colors.cmyktogray = cmyktogray colors.rgbtohsv = rgbtohsv colors.hsvtorgb = hsvtorgb colors.hsvtogray = hsvtogray colors.graytohsv = graytohsv -- we can share some *data by using s, rgb and cmyk hashes, but -- normally the amount of colors is not that large; storing the -- components costs a bit of extra runtime, but we expect to gain -- some back because we have them at hand; the number indicates the -- default color space function colors.gray(s) return { 2, s, s, s, s, 0, 0, 0, 1-s } end function colors.rgb(r,g,b) local s = rgbtogray(r,g,b) local c, m, y, k = rgbtocmyk(r,g,b) return { 3, s, r, g, b, c, m, y, k } end function colors.cmyk(c,m,y,k) local s = cmyktogray(c,m,y,k) local r, g, b = cmyktorgb(c,m,y,k) return { 4, s, r, g, b, c, m, y, k } end --~ function colors.spot(parent,f,d,p) --~ return { 5, .5, .5, .5, .5, 0, 0, 0, .5, parent, f, d, p } --~ end function colors.spot(parent,f,d,p) if type(p) == "number" then local n = list[numbers.color][parent] -- hard coded ref to color number if n then local v = values[n] if v then -- the via cmyk hack is dirty, but it scales better local c, m, y, k = p*v[6], p*v[7], p*v[8], p*v[8] local r, g, b = cmyktorgb(c,m,y,k) local s = cmyktogray(c,m,y,k) return { 5, s, r, g, b, c, m, y, k, parent, f, d, p } end end else -- todo, multitone (maybe p should be a table) end return { 5, .5, .5, .5, .5, 0, 0, 0, .5, parent, f, d, p } end local function graycolor(...) graycolor = nodeinjections.graycolor return graycolor(...) end local function rgbcolor (...) rgbcolor = nodeinjections.rgbcolor return rgbcolor (...) end local function cmykcolor(...) cmykcolor = nodeinjections.cmykcolor return cmykcolor(...) end local function spotcolor(...) spotcolor = nodeinjections.spotcolor return spotcolor(...) end local function extender(colors,key) if colors.supported and key == "none" then local d = graycolor(0) colors.none = d return d end end local function reviver(data,n) if colors.supported then local v = values[n] local d if not v then local gray = graycolor(0) d = { gray, gray, gray, gray } report_attributes("unable to revive color %a",n) else local model = colors.forcedmodel(v[1]) if model == 2 then local gray= graycolor(v[2]) d = { gray, gray, gray, gray } elseif model == 3 then local gray, rgb, cmyk = graycolor(v[2]), rgbcolor(v[3],v[4],v[5]), cmykcolor(v[6],v[7],v[8],v[9]) d = { rgb, gray, rgb, cmyk } elseif model == 4 then local gray, rgb, cmyk = graycolor(v[2]), rgbcolor(v[3],v[4],v[5]), cmykcolor(v[6],v[7],v[8],v[9]) d = { cmyk, gray, rgb, cmyk } elseif model == 5 then local spot = spotcolor(v[10],v[11],v[12],v[13]) -- d = { spot, gray, rgb, cmyk } d = { spot, spot, spot, spot } end end data[n] = d return d end end setmetatableindex(colors, extender) setmetatableindex(colors.data, reviver) function colors.filter(n) return concat(data[n],":",5) end function colors.setmodel(name,weightgray) colors.model = name colors.default = models[name] or 1 colors.weightgray = weightgray ~= false return colors.default end function colors.register(name, colorspace, ...) -- passing 9 vars is faster (but not called that often) local stamp = f_colors[colorspace](...) local color = registered[stamp] if not color then color = #values + 1 values[color] = colors[colorspace](...) registered[stamp] = color -- colors.reviver(color) end if name then list[a_color][name] = color -- not grouped, so only global colors end return registered[stamp] end function colors.value(id) return values[id] end attributes.colors.handler = nodes.installattributehandler { name = "color", namespace = colors, initializer = states.initialize, finalizer = states.finalize, processor = states.selective, resolver = function() return colors.main end, } function colors.enable(value) if value == false or not colors.supported then tasks.disableaction("shipouts","attributes.colors.handler") else tasks.enableaction("shipouts","attributes.colors.handler") end end function colors.forcesupport(value) -- can move to attr-div colors.supported = value report_colors("color is %ssupported",value and "" or "not ") colors.enable(value) end -- transparencies local a_transparency = attributes.private('transparency') attributes.transparencies = attributes.transparencies or { } local transparencies = attributes.transparencies transparencies.registered = transparencies.registered or { } transparencies.data = allocate() transparencies.values = transparencies.values or { } transparencies.triggering = true transparencies.attribute = a_transparency transparencies.supported = true local registered = transparencies.registered -- we could use a 2 dimensional table instead local data = transparencies.data local values = transparencies.values local f_transparency = formatters["%s:%s"] registerstorage("attributes/transparencies/registered", registered, "attributes.transparencies.registered") registerstorage("attributes/transparencies/values", values, "attributes.transparencies.values") local function inject_transparency(...) inject_transparency = nodeinjections.transparency return inject_transparency(...) end local function register_transparency(...) register_transparency = registrations.transparency return register_transparency(...) end function transparencies.register(name,a,t,force) -- name is irrelevant here (can even be nil) -- Force needed here for metapost converter. We could always force -- but then we'd end up with transparencies resources even if we -- would not use transparencies (but define them only). This is -- somewhat messy. local stamp = f_transparency(a,t) local n = registered[stamp] if not n then n = #values + 1 values[n] = { a, t } registered[stamp] = n if force then register_transparency(n,a,t) end elseif force and not data[n] then register_transparency(n,a,t) end if name then list[a_transparency][name] = n -- not grouped, so only global transparencies end return registered[stamp] end local function extender(transparencies,key) if colors.supported and key == "none" then local d = inject_transparency(0) transparencies.none = d return d end end local function reviver(data,n) if transparencies.supported then local v = values[n] local d if not v then d = inject_transparency(0) else d = inject_transparency(n) register_transparency(n,v[1],v[2]) end data[n] = d return d else return "" end end setmetatableindex(transparencies, extender) setmetatableindex(transparencies.data, reviver) -- register if used -- check if there is an identity function transparencies.value(id) return values[id] end attributes.transparencies.handler = nodes.installattributehandler { name = "transparency", namespace = transparencies, initializer = states.initialize, finalizer = states.finalize, processor = states.process, } function transparencies.enable(value) -- nil is enable if value == false or not transparencies.supported then tasks.disableaction("shipouts","attributes.transparencies.handler") else tasks.enableaction("shipouts","attributes.transparencies.handler") end end function transparencies.forcesupport(value) -- can move to attr-div transparencies.supported = value report_transparencies("transparency is %ssupported",value and "" or "not ") transparencies.enable(value) end --- colorintents: overprint / knockout attributes.colorintents = attributes.colorintents or { } local colorintents = attributes.colorintents colorintents.data = allocate() -- colorintents.data or { } colorintents.attribute = attributes.private('colorintent') colorintents.registered = allocate { overprint = 1, knockout = 2, } local data, registered = colorintents.data, colorintents.registered local function extender(colorintents,key) if key == "none" then local d = data[2] colorintents.none = d return d end end local function reviver(data,n) if n == 1 then local d = nodeinjections.overprint() -- called once data[1] = d return d elseif n == 2 then local d = nodeinjections.knockout() -- called once data[2] = d return d end end setmetatableindex(colorintents, extender) setmetatableindex(colorintents.data, reviver) function colorintents.register(stamp) return registered[stamp] or registered.overprint end colorintents.handler = nodes.installattributehandler { name = "colorintent", namespace = colorintents, initializer = states.initialize, finalizer = states.finalize, processor = states.process, } function colorintents.enable() tasks.enableaction("shipouts","attributes.colorintents.handler") end -- interface commands.enablecolor = colors.enable commands.enabletransparency = transparencies.enable commands.enablecolorintents = colorintents.enable function commands.registercolor (...) context(colors .register(...)) end function commands.registertransparency(...) context(transparencies.register(...)) end function commands.registercolorintent (...) context(colorintents .register(...)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-xml.mkii0000644000175000017500000000152511754241457024305 0ustar norbertnorbert%D \module %D [ file=meta-xml, %D version=2002.11.27, %D title=\METAPOST\ Graphics, %D subtitle=XML Hacks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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}{MetaPost Graphics / XML Hacks} %D When we are dealing with XML, we need to make sure that %D \METAPOST\ knows about it. The next macro expands its %D argument (think of widget XFDF) into \type {\getXMLentity} %D calls. \unprotect \def\setMPtextXML#1#2% {\bgroup \enableXML \expanded{\defconvertedcommand\noexpand\ascii{#2}}% \expanded{\egroup\noexpand\dodoglobal\noexpand\setvalue{\@@MPT#1}{\ascii}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1252.lua0000644000175000017500000000457411571377075024263 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1252'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000, 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF } context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-frequencies.mkiv0000644000175000017500000000162612161703335027304 0ustar norbertnorbert%D \module %D [ file=s-languages-frequencies, % s-lan-06, %D version=2013.03.22, %D title=\CONTEXT\ Style File, %D subtitle=Language Frequencies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[languages-frequencies] \registerctxluafile{s-languages-frequencies}{} \installmodulecommandluasingle \showfrequencies {moduledata.languages.frequencies.showlist} \stopmodule \continueifinputfile{s-languages-frequencies.mkiv} \usemodule[art-01] \starttext \hsize65\averagecharwidth \the\hsize: \input ward \par \showfrequencies \page \mainlanguage[de] \hsize65\averagecharwidth \the\hsize: \input ward \par \showfrequencies \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-ali.mkiv0000644000175000017500000011134512130411274024252 0ustar norbertnorbert%D \module %D [ file=spac-ali, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Alignments, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Alignments} \unprotect %D The \type {new} and \type {old} methods are gone as we now have \type %D {flush*} variants. Starting at the last day of 2011 both methods are %D merged into one and caching has been added, which makes switching %D twice as fast. \registerctxluafile{spac-ali}{1.001} \definesystemattribute[realign] [public] % might be combined with the next one \definesystemattribute[alignstate][public] % will make a single attributes for several states \appendtoks \attribute\realignattribute \attributeunsetvalue \attribute\alignstateattribute\attributeunsetvalue \to \everyforgetall \unexpanded\def\resetrealignsignal{\attribute\realignattribute\attributeunsetvalue} \unexpanded\def\signalinnerrealign{\ctxcommand{setrealign(2)}} \unexpanded\def\signalouterrealign{\ctxcommand{setrealign(1)}} \installcorenamespace{aligncommand} \installcorenamespace{alignhorizontal} \installcorenamespace{alignvertical} \installcorenamespace{alignmentnormalcache} \installcorenamespace{alignmentraggedcache} % nasty hack: \installcorenamespace{alignmentnormalcacheodd} \installcorenamespace{alignmentnormalcacheeven} \installcorenamespace{alignmentraggedcacheodd} \installcorenamespace{alignmentraggedcacheeven} \def\??alignmentnormalcache{\ifodd\realpageno\??alignmentnormalcacheodd\else\??alignmentnormalcacheeven\fi} \def\??alignmentraggedcache{\ifodd\realpageno\??alignmentraggedcacheodd\else\??alignmentraggedcacheeven\fi} \newtoks\everyresetalign % todo % We will not use bodydir and pagedir so we disable them. That way we get % normal hyperlink support. \let\spac_directions_normal_body_dir\normalbodydir \let\spac_directions_normal_page_dir\normalpagedir \unexpanded\def\bodydir{\afterassignment\spac_directions_bodydir_indeed\spac_directions_normal_body_dir} \let\normalbodydir\bodydir \unexpanded\def\pagedir{\afterassignment\spac_directions_pagedir_indeed\spac_directions_normal_page_dir} \let\normalpagedir\pagedir \def\spac_directions_bodydir_indeed{\spac_directions_normal_body_dir TLT\relax} \def\spac_directions_pagedir_indeed{\spac_directions_normal_page_dir TLT\relax} % This will become a more advanced layout controller soon: \newconditional\layoutlefttoright \settrue\layoutlefttoright \newconditional\displaylefttoright \settrue\displaylefttoright \newconditional\inlinelefttoright \settrue\inlinelefttoright \unexpanded\def\lefttoright {\ifvmode \spac_directions_lefttoright_vmode \else \spac_directions_lefttoright_hmode \fi} \unexpanded\def\spac_directions_lefttoright_vmode {\settrue\displaylefttoright \settrue\inlinelefttoright \textdir TLT\relax \pardir TLT\relax} \unexpanded\def\spac_directions_lefttoright_hmode {\settrue\inlinelefttoright \textdir TLT\relax} \unexpanded\def\righttoleft {\ifvmode \spac_directions_righttoleft_vmode \else \spac_directions_righttoleft_hmode \fi} \unexpanded\def\spac_directions_righttoleft_vmode {\setfalse\displaylefttoright \setfalse\inlinelefttoright \textdir TRT\relax \pardir TRT\relax} \unexpanded\def\spac_directions_righttoleft_hmode {\textdir TRT\relax \setfalse\inlinelefttoright} \def\currentdirectionparameters {\ifconditional\inlinelefttoright \else idir="r2l", \fi \ifconditional\displaylefttoright \else ddir="r2l", \fi} \unexpanded\def\synchronizelayoutdirection {\ifconditional\layoutlefttoright \spac_directions_synchronize_lr \else \spac_directions_synchronize_rl \fi} \unexpanded\def\synchronizedisplaydirection {\ifconditional\displaylefttoright \spac_directions_synchronize_lr \else \spac_directions_synchronize_rl \fi} \def\spac_directions_synchronize_lr {\settrue\inlinelefttoright \textdir TLT\relax \pardir TLT\relax} \def\spac_directions_synchronize_rl {\setfalse\inlinelefttoright \textdir TRT\relax \pardir TRT\relax} \unexpanded\def\synchronizeinlinedirection {\textdir T\ifconditional\inlinelefttoright L\else R\fi T\relax} \unexpanded\def\showdirections {\dontleavehmode \begingroup\infofont\textdir TLT[\space layout:\ifconditional \layoutlefttoright l2r\else r2l\fi\space display:\ifconditional\displaylefttoright l2r\else r2l\fi\space inline:\ifconditional \inlinelefttoright l2r\else r2l\fi\space ]\endgroup} % Tolerance and hyphenation \ifdefined\lesshyphens \else \let\lesshyphens\relax \fi \ifdefined\morehyphens \else \let\morehyphens\relax \fi \ifdefined\nohyphens \else \let\nohyphens \relax \fi \ifdefined\dohyphens \else \let\dohyphens \relax \fi \newconstant\c_spac_tolerance_default \c_spac_tolerance_default 1500 % shouldn't that be 200 \newconstant\c_spac_tolerance_minimum \c_spac_tolerance_minimum 1500 \newconstant\c_spac_tolerance_normal \c_spac_tolerance_normal 3000 \newconstant\c_spac_tolerance_extreme \c_spac_tolerance_extreme 4500 \def\spac_align_set_raggedness_left {\plustwo\bodyfontsize} \def\spac_align_set_raggedness_right {\plustwo\bodyfontsize} \def\spac_align_set_raggedness_middle{\plussix\bodyfontsize} % overloaded below % oeps, hsize can be 0pt in which case we get a strange division % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} \def\spac_align_set_raggedness_middle{\ifdim\hsize=\zeropoint\plussix\bodyfontsize\else.5\hsize\fi} \unexpanded\def\setraggedness#1% tricky .. we keep the global tolerance otherwise ... to be reconsidered {\ifnum\tolerance<\c_spac_tolerance_minimum \tolerance\c_spac_tolerance_minimum % small values have unwanted side effects \else % todo: take set value or none .. better done elsewhere (200 is normal) \fi \ifx\dohyphens\relax % was 2.5 in old implementation using scratch registers \hyphenpenalty\dimexpr2.8\hsize/\dimexpr#1\relax\relax % 50 in raggedright/raggedleft \fi} \unexpanded\def\spac_align_set_tolerant {\tolerance\c_spac_tolerance_normal} \unexpanded\def\spac_align_set_very_tolerant {\tolerance\c_spac_tolerance_extreme} \unexpanded\def\spac_align_set_stretch {\emergencystretch\bodyfontsize} % Vertical \newconstant\c_spac_align_state_vertical \unexpanded\def\spac_align_set_vertical_none {\let\raggedtopcommand \relax \let\raggedbottomcommand\relax} \unexpanded\def\spac_align_set_vertical_lohi {\let\raggedtopcommand \vfilll \let\raggedbottomcommand\vfilll} \unexpanded\def\spac_align_set_vertical_low {\let\raggedtopcommand \vfilll \let\raggedbottomcommand\relax} \unexpanded\def\spac_align_set_vertical_high {\let\raggedtopcommand \relax \let\raggedbottomcommand\vfilll} \def\spac_align_flush_vertical {\ifcase\c_spac_align_state_vertical \spac_align_set_vertical_none \or \spac_align_set_vertical_lohi \or \spac_align_set_vertical_low \or \spac_align_set_vertical_high \fi} % Horizontal \ifdefined\raggedonelinerstate \else \newconditional\raggedonelinerstate % public \fi % \appendtoks % \setfalse\raggedonelinerstate % \to \everyforgetall \newconstant\raggedstatus % public \newconstant\c_spac_align_state_horizontal \newconstant\c_spac_align_state_broad \def\v_spac_align_fill_amount {\plusone fil} \def\v_spac_align_fill_amount_negative {\minusone fil} \def\v_spac_align_fill_amount_double {\plustwo fil} \def\v_spac_align_fill_amount_space {\plustwo fil} % can be added to xspace if we have a key \def\v_spac_align_fill_amount_half {.5fil} \let\v_spac_align_space_amount \interwordspace \def\v_spac_align_space_amount_x {.5\emwidth} \newskip\s_zero_plus_one_fil \s_zero_plus_one_fil = 0pt plus 1fil \newskip\s_zero_plus_zero \s_zero_plus_zero = 0pt plus 0pt % \s!plus ... slower than inline \unexpanded\def\spac_align_set_horizontal_none % should also relax \updateraggedskips {\raggedstatus\zerocount \attribute\alignstateattribute\attributeunsetvalue \leftskip \plusone\leftskip \rightskip \plusone\rightskip \spaceskip \zeropoint \xspaceskip \zeropoint \parfillskip\s_zero_plus_one_fil % new \setfalse\raggedonelinerstate % now here \let\updateraggedskips\relax} % no need for adaption \unexpanded\def\spac_align_set_horizontal_left {\setraggedness\spac_align_set_raggedness_left \raggedstatus\plusone \attribute\alignstateattribute\plusone \leftskip \plusone\leftskip \s!plus\spac_align_set_raggedness_left \rightskip \plusone\rightskip\s!plus\zeropoint \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_zero \parindent \zeropoint \relax} \unexpanded\def\spac_align_set_horizontal_center {\setraggedness\spac_align_set_raggedness_middle \raggedstatus\plustwo \attribute\alignstateattribute\plustwo \leftskip \plusone\leftskip \s!plus\spac_align_set_raggedness_middle \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_middle \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_zero \parindent \zeropoint \relax} \unexpanded\def\spac_align_set_horizontal_right {\setraggedness\spac_align_set_raggedness_right \raggedstatus\plusthree \attribute\alignstateattribute\plusthree \leftskip \plusone\leftskip \s!plus\zeropoint \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_right \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_one_fil %\parindent \parindent \relax} \unexpanded\def\spac_align_set_horizontal_very_left {\raggedstatus\plusone \attribute\alignstateattribute\plusone \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount \rightskip \plusone\rightskip\s!plus\zeropoint \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_zero \parindent \zeropoint \relax} \unexpanded\def\spac_align_set_horizontal_very_center {\raggedstatus\plustwo \attribute\alignstateattribute\plustwo \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_zero \parindent \zeropoint \relax} \unexpanded\def\spac_align_set_horizontal_very_right {\raggedstatus\plusthree \attribute\alignstateattribute\plusthree \leftskip \plusone\leftskip \s!plus\zeropoint \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_zero %\parindent \parindent \relax} \unexpanded\def\spac_align_set_horizontal_wide_center {\setraggedness\spac_align_set_raggedness_middle \raggedstatus\plustwo \attribute\alignstateattribute\plustwo \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount_half \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_half \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x \parfillskip\s_zero_plus_zero \parindent \zeropoint \relax} \unexpanded\def\spac_align_set_horizontal_centered_last_line {\raggedstatus\zerocount \attribute\alignstateattribute\attributeunsetvalue \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_negative\relax \spaceskip \zeropoint\relax \xspaceskip \zeropoint\relax \parfillskip\zeropoint\s!plus\v_spac_align_fill_amount_double\relax \parindent \zeropoint \relax} \unexpanded\def\spac_align_set_horizontal_right_tt % a plain command {\tttf % brrr \raggedstatus\plusthree \attribute\alignstateattribute\plusthree \leftskip \plusone\leftskip \s!plus\zeropoint\relax \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_right\relax \spaceskip \zeropoint\relax \xspaceskip \zeropoint\relax \parfillskip\s_zero_plus_zero %\parindent \parindent \relax} \unexpanded\def\spac_align_set_horizontal_extra {\xspaceskip\zeropoint\s!plus\v_spac_align_fill_amount_space\relax} \def\spac_align_flush_horizontal {\ifcase\c_spac_align_state_horizontal % 0 \spac_align_set_horizontal_none \or % 1 center \ifcase\c_spac_align_state_broad \spac_align_set_horizontal_center \or \spac_align_set_horizontal_very_center \or \spac_align_set_horizontal_wide_center \fi \or % 2 flush left \ifcase\c_spac_align_state_broad \spac_align_set_horizontal_right \else \spac_align_set_horizontal_very_right \fi \or % 3 flush right \ifcase\c_spac_align_state_broad \spac_align_set_horizontal_left \else \spac_align_set_horizontal_very_left \fi \or % 4 inner \ifdoublesided \signalinnerrealign \fi \rightorleftpageaction\spac_align_set_horizontal_right\spac_align_set_horizontal_left \or % 5 outer \ifdoublesided \signalouterrealign \fi \rightorleftpageaction\spac_align_set_horizontal_left\spac_align_set_horizontal_right \or % 6 oneliner \ifcase\c_spac_align_state_broad \spac_align_set_horizontal_right \else \spac_align_set_horizontal_very_right \fi \parfillskip\zeropoint \or % 7 centered last line \spac_align_set_horizontal_centered_last_line \or \parfillskip\zeropoint \fi} % Page spacing: \newconstant\c_spac_align_state_page \def\bottomalignlimit{\plusthree\lineheight} \newconstant\bottomraggednessmode % 0=ragged 1=normal/align 2=baseline \unexpanded\def\raggedbottom {\bottomraggednessmode\zerocount \settopskip} \unexpanded\def\alignbottom {\bottomraggednessmode\plusone \settopskip} \unexpanded\def\baselinebottom {\bottomraggednessmode\plustwo \settopskip} \let\normalbottom\alignbottom % downward compatible \unexpanded\def\setbottomalignmode#1% {\bottomraggednessmode#1% \settopskip} \def\spac_align_flush_page {\ifcase\c_spac_align_state_page % keep state \or \raggedbottom \or \alignbottom \or \baselinebottom \fi} % Directions \newconstant\c_spac_align_state_direction \def\spac_align_flush_direction {\ifcase\c_spac_align_state_direction % keep state \or \lefttoright \or \righttoleft \fi} % Interesting is that the non cached version is also pretty efficient % and as we cache we seldom call that one now so one can debate the % speedup. \newtoks\t_spac_align_collected \let\raggedcommand \relax \let\updateraggedskips\relax \def\spac_align_add_to_cache {\let\raggedbox\relax % why % we inherit hyphenation and tolerance \t_spac_align_collected \emptytoks \c_spac_align_state_broad \zerocount \c_spac_align_state_horizontal\zerocount \c_spac_align_state_vertical \zerocount \c_spac_align_state_direction \zerocount % what is default ? \c_spac_align_state_page \zerocount \ifcsname\??aligncommand\m_spac_align_asked\endcsname \csname\??aligncommand\m_spac_align_asked\endcsname % not much gain in new method \else \rawprocesscommacommand[\m_spac_align_asked]\spac_align_collect \fi \normalexpanded{\t_spac_align_collected {% \resetrealignsignal % can go as it is always set \setfalse\raggedonelinerstate % bad \the\t_spac_align_collected \spac_align_flush_horizontal \spac_align_flush_vertical \spac_align_flush_direction \spac_align_flush_page }}% kept, nice for tracing \edef\raggedcommand {\the\t_spac_align_collected }% \edef\updateraggedskips{\spac_align_flush_horizontal}% \global\expandafter\let\csname\??alignmentnormalcache\m_spac_align_asked\endcsname\raggedcommand \global\expandafter\let\csname\??alignmentraggedcache\m_spac_align_asked\endcsname\updateraggedskips} \def\spac_align_collect#1% {\csname\??aligncommand#1\endcsname} % The local (key driven) setter: \unexpanded\def\spac_align_prepare#1% deferred {\edef\m_spac_align_asked{#1}% \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifx\raggedcommand\relax \spac_align_add_to_cache \else \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname \fi} \let\dosetraggedcommand\spac_align_prepare % sort of public % The regular align setter: \unexpanded\def\setupalign {\dosingleempty\spac_align_setup} \def\spac_align_setup[#1]% immediate {\edef\m_spac_align_asked{#1}% \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifx\raggedcommand\relax \spac_align_add_to_cache \else \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname \fi \raggedcommand} \unexpanded\def\usealignparameter#1% faster local variant {\edef\m_spac_align_asked{#1\c!align}% \ifx\m_spac_align_asked\empty\else \spac_align_use_indeed \fi} \def\spac_align_use_indeed {\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifx\raggedcommand\relax \spac_align_add_to_cache \else \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname \fi \raggedcommand} % The keywords: \unexpanded\def\installalign#1#2% beware: commands must be unexpandable! {\ifcsname\??aligncommand#1\endcsname \else \setvalue{\??aligncommand#1}{\t_spac_align_collected\expandafter{\the\t_spac_align_collected#2}}% \fi} \letvalue{\??aligncommand\empty }\empty \setvalue{\??aligncommand\v!broad }{\c_spac_align_state_broad \plusone } \setvalue{\??aligncommand\v!wide }{\c_spac_align_state_broad \plustwo } \setvalue{\??aligncommand\v!bottom }{\c_spac_align_state_page \plusone } \setvalue{\??aligncommand\v!height }{\c_spac_align_state_page \plustwo } \setvalue{\??aligncommand\v!line }{\c_spac_align_state_page \plusthree % this will become another keyword (undocumented anyway) \t_spac_align_collected\expandafter{\the\t_spac_align_collected\settrue\raggedonelinerstate}} \setvalue{\??aligncommand\v!high }{\c_spac_align_state_vertical \plusthree} \setvalue{\??aligncommand\v!low }{\c_spac_align_state_vertical \plustwo } \setvalue{\??aligncommand\v!lohi }{\c_spac_align_state_vertical \plusone } \setvalue{\??aligncommand\v!flushright }{\c_spac_align_state_horizontal\plusthree} \setvalue{\??aligncommand\v!flushleft }{\c_spac_align_state_horizontal\plustwo } \setvalue{\??aligncommand\v!middle }{\c_spac_align_state_horizontal\plusone } \setvalue{\??aligncommand\v!no }{\c_spac_align_state_horizontal\plustwo } \setvalue{\??aligncommand\v!yes }{\c_spac_align_state_horizontal\zerocount} \setvalue{\??aligncommand\v!width }{\c_spac_align_state_horizontal\zerocount} \setvalue{\??aligncommand\v!normal }{\c_spac_align_state_horizontal\zerocount} \setvalue{\??aligncommand\v!reset }{\c_spac_align_state_page \zerocount \c_spac_align_state_horizontal\zerocount} \setvalue{\??aligncommand\v!inner }{\c_spac_align_state_horizontal\plusfour } \setvalue{\??aligncommand\v!outer }{\c_spac_align_state_horizontal\plusfive } \setvalue{\??aligncommand\v!flushinner }{\c_spac_align_state_horizontal\plusfive } \setvalue{\??aligncommand\v!flushouter }{\c_spac_align_state_horizontal\plusfour } \setvalue{\??aligncommand\v!right }{\c_spac_align_state_horizontal\plustwo } \setvalue{\??aligncommand\v!left }{\c_spac_align_state_horizontal\plusthree} \setvalue{\??aligncommand\v!center }{\c_spac_align_state_horizontal\plusone \c_spac_align_state_broad \plustwo } \setvalue{\??aligncommand\v!disable }{\c_spac_align_state_horizontal\plussix } \setvalue{\??aligncommand\v!last }{\c_spac_align_state_horizontal\plusseven} \setvalue{\??aligncommand\v!paragraph }{\c_spac_align_state_horizontal\pluseight} \setvalue{\??aligncommand\v!lefttoright }{\c_spac_align_state_direction \plusone } \setvalue{\??aligncommand\v!righttoleft }{\c_spac_align_state_direction \plustwo } \setvalue{\??aligncommand l2r}{\c_spac_align_state_direction \plusone } \setvalue{\??aligncommand r2l}{\c_spac_align_state_direction \plustwo } \setvalue{\??aligncommand\v!table }{\c_spac_align_state_vertical \plusthree \c_spac_align_state_broad \plusone \c_spac_align_state_horizontal\plustwo } \setvalue{\??aligncommand\v!lesshyphenation}{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\lesshyphens}} \setvalue{\??aligncommand\v!morehyphenation}{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\morehyphens}} \setvalue{\??aligncommand\v!hanging }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_protruding_enable }} \setvalue{\??aligncommand\v!nothanging }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_protruding_disable}} \setvalue{\??aligncommand\v!hz }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_expansion_enable }} \setvalue{\??aligncommand\v!nohz }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_expansion_disable }} %setvalue{\??aligncommand\v!spacing }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\enablespacehandling \enablekernhandling }} % not in mkiv %setvalue{\??aligncommand\v!nospacing }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\disablespacehandling\disablekernhandling}} % not in mkiv \setvalue{\??aligncommand\v!hyphenated }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\dohyphens}} \setvalue{\??aligncommand\v!nothyphenated }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\nohyphens}} \setvalue{\??aligncommand\v!tolerant }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_tolerant}} \setvalue{\??aligncommand\v!verytolerant }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_very_tolerant}} \setvalue{\??aligncommand\v!stretch }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_stretch}} %D For Wolfgang: \newtoks \t_spac_every_swap_align \appendtoks \setvalue{\??aligncommand\v!right}{\c_spac_align_state_horizontal\plusthree}% \setvalue{\??aligncommand\v!left }{\c_spac_align_state_horizontal\plustwo }% \to \t_spac_every_swap_align \unexpanded\def\enablereversealignment {\the\t_spac_every_swap_align \t_spac_every_swap_align\emptytoks} % Visible commands: \let\notragged \spac_align_set_horizontal_none \let\raggedleft \spac_align_set_horizontal_left \let\raggedcenter \spac_align_set_horizontal_center \let\raggedright \spac_align_set_horizontal_right \let\veryraggedleft \spac_align_set_horizontal_very_left \let\veryraggedcenter\spac_align_set_horizontal_very_center \let\veryraggedright \spac_align_set_horizontal_very_right \let\raggedwidecenter\spac_align_set_horizontal_wide_center \let\centeredlastline\spac_align_set_horizontal_centered_last_line \let\ttraggedright \spac_align_set_horizontal_right_tt % a plain command \let\forgetragged \spac_align_set_horizontal_none \appendtoks \spac_align_set_horizontal_none \to \everyforgetall % Box commands. \unexpanded\def\ibox#1#2#3% {\vbox\bgroup \forgetall \let\\=\endgraf \ifdoublesided\signalinnerrealign\fi \doifrightpageelse\spac_align_set_horizontal_right\spac_align_set_horizontal_left \let\next} \unexpanded\def\obox#1#2#3% {\vbox\bgroup \forgetall \let\\=\endgraf \ifdoublesided\signalouterrealign\fi \doifrightpageelse\c_spac_align_state_horizontal_left\spac_align_set_horizontal_right \let\next} \let\raggedbox\relax \def\dosetraggedvbox#1% can be more keys .. how about caching here (but seldom used) {\let\raggedbox\vbox \processcommacommand[#1]\spac_align_set_ragged_vbox} \def\dosetraggedhbox#1% can be more keys .. how about caching here (but seldom used) {\let\raggedbox\hbox \processcommacommand[#1]\spac_align_set_ragged_hbox} \def\spac_align_set_ragged_vbox#1% {\ifcsname\??alignvertical#1\endcsname \csname\??alignvertical#1\endcsname \quitcommalist \fi} \def\spac_align_set_ragged_hbox#1% {\ifcsname\??alignhorizontal#1\endcsname \csname\??alignhorizontal#1\endcsname \quitcommalist \fi} % \def\usealignparametersethbox#1% % {\edef\p_spac_align{#1\c!align}% % \let\raggedbox\hbox % \ifx\p_spac_align\empty \else % \processcommacommand[\p_spac_align]\spac_align_set_ragged_hbox % \fi} % % \def\usealignparametersetvbox#1% % {\edef\p_spac_align{#1\c!align}% % \let\raggedbox\vbox % \ifx\p_spac_align\empty \else % \processcommacommand[\p_spac_align]\spac_align_set_ragged_vbox % \fi} \setvalue{\??alignvertical \v!left }{\let\raggedbox\lbox} \setvalue{\??alignvertical \v!right }{\let\raggedbox\rbox} \setvalue{\??alignvertical \v!middle }{\let\raggedbox\cbox} \setvalue{\??alignvertical \v!inner }{\let\raggedbox\ibox} \setvalue{\??alignvertical \v!outer }{\let\raggedbox\obox} \setvalue{\??alignvertical \v!flushleft }{\let\raggedbox\rbox} \setvalue{\??alignvertical \v!flushright}{\let\raggedbox\lbox} \setvalue{\??alignvertical \v!center }{\let\raggedbox\cbox} \setvalue{\??alignvertical \v!no }{\def\raggedbox{\vbox\bgroup\spac_align_set_horizontal_right\let\next=}]} % maybe \let's \setvalue{\??alignhorizontal\v!left }{\def\raggedbox{\doalignedline\v!left }} \setvalue{\??alignhorizontal\v!right }{\def\raggedbox{\doalignedline\v!right }} \setvalue{\??alignhorizontal\v!middle }{\def\raggedbox{\doalignedline\v!middle}} \setvalue{\??alignhorizontal\v!inner }{\def\raggedbox{\doalignedline\v!inner }} \setvalue{\??alignhorizontal\v!outer }{\def\raggedbox{\doalignedline\v!outer }} \setvalue{\??alignhorizontal\v!flushleft }{\def\raggedbox{\doalignedline\v!right }} \setvalue{\??alignhorizontal\v!flushright}{\def\raggedbox{\doalignedline\v!left }} \setvalue{\??alignhorizontal\v!center }{\def\raggedbox{\doalignedline\v!middle}} % The next one can be in use so we keep it around but oen should % be aware of possible interference. \unexpanded\def\setraggedskips#1#2#3#4#5#6#7% never change this name (todo: inline this one .. less tracingall) {\unexpanded\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% \updateraggedskips} \def\dosetraggedskips#1#2#3#4#5#6#7% {\raggedstatus #1\relax \leftskip 1\leftskip \s!plus#2\relax \rightskip 1\rightskip\s!plus#3\relax \spaceskip #4\relax \xspaceskip #5\relax \parfillskip \zeropoint\s!plus#6\relax \parindent #7\relax \attribute\alignstateattribute\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi} % older (context) names: \let\spaceamount \interwordspace \let\emspaceamount\emwidth % tracing: \def\spac_show_par_data#1% {\ifx#1\relax\else \hbox{\string#1: \the#1}\endgraf \expandafter\spac_show_par_data \fi} \unexpanded\def\showpardata {\edef\thepardata {\hbox{font: \fontname\font}\endgraf \spac_show_par_data \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace \hsize \vsize \leftskip \rightskip \spaceskip \xspaceskip \parindent \parfillskip \hyphenpenalty \exhyphenpenalty \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty \doublehyphendemerits \finalhyphendemerits \adjdemerits \relax}% \dontleavehmode \begingroup \inleftmargin{\vsmash{\infofont\framed[\c!align=\v!right]{\thepardata}}}% \endgroup} \unexpanded\def\startshowpardata {\begingroup \showstruts \tracingparagraphs\maxdimen \appendtoksonce\showpardata\let\showpardata\relax\to\everypar} \unexpanded\def\stopshowpardata {\endgraf \endgroup} % Structure: \unexpanded\def\startalignment {\begingroup \setupalign} \unexpanded\def\stopalignment {\par \endgroup} \setnewconstant\alignstrutmode\plusone % see later for the real definition, which in the simple case is: \newtoks \everyleftofalignedline \newtoks \everyrightofalignedline \unexpanded\def\shiftalignedline#1#2#3#4% left, right, inner, outer {\rightorleftpageaction {\everyleftofalignedline {\hskip\dimexpr#1+#3\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#4\relax}} {\everyleftofalignedline {\hskip\dimexpr#1+#4\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#3\relax}}} \def\doalignline#1#2% \\ == newline {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize % new \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% \dowithnextbox {\hbox to \localhsize {\ifcase\alignstrutmode\or\strut\fi \the\everyleftofalignedline #1\unhbox\nextbox#2\relax \the\everyrightofalignedline}% \endgroup} \hbox} % plain commands \ifdefined\line \else \def\line {\hbox to\hsize} \fi \ifdefined\leftline \else \def\leftline #1{\line{#1\hss}} \fi \ifdefined\rightline \else \def\rightline #1{\line{\hss#1}} \fi \ifdefined\centerline \else \def\centerline#1{\line{\hss#1\hss}} \fi % direct commands \installcorenamespace{alignwrapper} \setuvalue{\??alignwrapper\v!left }{\doalignline\relax \hss } \setuvalue{\??alignwrapper\v!middle}{\doalignline\hss \hss } \setuvalue{\??alignwrapper\v!right }{\doalignline\hss \relax} \setuvalue{\??alignwrapper\v!max }{\doalignline\relax \relax} \def\spac_align_wrapper_handle#1% {\csname\??alignwrapper\ifcsname\??alignwrapper#1\endcsname#1\else\v!middle\fi\endcsname} \unexpanded\def\spac_align_wrapper_start[#1]% {\spac_align_wrapper_handle{#1}% \bgroup\ignorespaces} \unexpanded\def\spac_align_wrapper_stop {\removeunwantedspaces\egroup} \unexpanded\def\startlinealignment {\dosingleempty\spac_align_wrapper_start} \let\stoplinealignment\spac_align_wrapper_stop \unexpanded\def\startleftaligned {\spac_align_wrapper_start[\v!left ]} \let\stopleftaligned \spac_align_wrapper_stop \unexpanded\def\startmiddlealigned{\spac_align_wrapper_start[\v!middle]} \let\stopmiddlealigned\spac_align_wrapper_stop \unexpanded\def\startrightaligned {\spac_align_wrapper_start[\v!right ]} \let\stoprightaligned \spac_align_wrapper_stop \unexpanded\def\startmaxaligned {\spac_align_wrapper_start[\v!max ]} \let\stopmaxaligned \spac_align_wrapper_stop \let\startmidaligned \startmiddlealigned \let\stopmidaligned \stopmiddlealigned \let\startcenteraligned\startmiddlealigned \let\stopcenteraligned\stopmiddlealigned \unexpanded\def\leftaligned {\spac_align_wrapper_handle\v!left } \unexpanded\def\middlealigned{\spac_align_wrapper_handle\v!middle} \unexpanded\def\rightaligned {\spac_align_wrapper_handle\v!right } \unexpanded\def\maxaligned {\spac_align_wrapper_handle\v!max } \let\midaligned \middlealigned \let\centeraligned\middlealigned \installcorenamespace{alignline} \letvalue{\??alignline\v!left }\leftaligned \letvalue{\??alignline\v!right }\rightaligned \letvalue{\??alignline\v!middle }\midaligned \letvalue{\??alignline\v!flushleft }\rightaligned % beware, makes no sense in locations / we will have a special locations handler \letvalue{\??alignline\v!flushright}\leftaligned % beware, makes no sense in locations / we will have a special locations handler \letvalue{\??alignline\v!center }\midaligned \letvalue{\??alignline\v!max }\maxaligned \def\doalignedline#1{\resetrealignsignal\csname\??alignline#1\endcsname} %D Experimental (will be redone when floats are redone as it's real messy %D now). It can also be made faster (if needed). \def\doxalignline#1#2#3#4#5#6% {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize \def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient \dowithnextbox {\hbox to \localhsize {#1\hskip\ifdone#2\else#3\fi#4% \hbox to \localhsize {\the\everyleftofalignedline \ifcase\alignstrutmode\or\strut\fi \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi \the\everyrightofalignedline}% \hss}% \endgroup} \hbox} \def\doxcheckline % used for floats so multipass anyway {\signalrightpage\doifrightpageelse\donetrue\donefalse} \setvalue{\??alignline\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss } \setvalue{\??alignline\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax} \setvalue{\??alignline\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss } \setvalue{\??alignline\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax} \setvalue{\??alignline\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss } \setvalue{\??alignline\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax} \setvalue{\??alignline\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss } \setvalue{\??alignline\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax} \setvalue{\??alignline\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax} \setvalue{\??alignline\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss } \setvalue{\??alignline\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax} \setvalue{\??alignline\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss } \def\doalignedline#1% unchecked {\csname\??alignline#1\endcsname} % no \resetrealignsignal here ? \def\alignedline#1#2% setting default {\csname\??alignline\ifcsname\??alignline#1\endcsname#1\else#2\fi\endcsname} % beware: \wordright{whatever\kern-\rightskip} should work! % so, no funny boxing here \unexpanded\def\wordright {\dosingleempty\spac_word_right} \def\spac_word_right[#1]% {% don't change \groupedcommand {\removeunwantedspaces \hfill \allowbreak % changed back from \hskip\zeropoint \strut \hfill \quad % decent spacing \hbox} {\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}% \parfillskip\zeropoint \finalhyphendemerits\zerocount % yes or no (see hyhenation/specialcases-001.tex) \par}} % \dorecurse{5}{something} \wordright{--someone} \endgraf % \dorecurse{6}{something} \wordright{--someone} \endgraf % \dorecurse{7}{something} \wordright{--someone} \endgraf % % \dorecurse{5}{something} \wordright{--someone else entirely} \endgraf % \dorecurse{6}{something} \wordright{--someone else entirely} \endgraf % \dorecurse{7}{something} \wordright{--someone else entirely} \endgraf % % \wordright[\rightskip]{whatever} % \simplealignedbox{2cm}{right}{x} \installcorenamespace{alignsimple} \setvalue{\??alignsimple\v!right }#1{{#1\hss}} \setvalue{\??alignsimple\v!left }#1{{\hss#1}} \setvalue{\??alignsimple\v!flushright}#1{{\hss#1}} \setvalue{\??alignsimple\v!flushleft }#1{{#1\hss}} \setvalue{\??alignsimple\v!middle }#1{{\hss#1\hss}} \unexpanded\def\simplealignedbox#1#2% {\hbox to #1\csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\endcsname} % \installnamespace{alignsets} % % \setvalue{\??alignsets\v!right }#1#2{\let#1\relax\let#2\hss } % \setvalue{\??alignsets\v!left }#1#2{\let#1\hss \let#2\relax} % \setvalue{\??alignsets\v!flushright}#1#2{\let#1\hss \let#2\relax} % \setvalue{\??alignsets\v!flushleft }#1#2{\let#1\relax\let#2\hss } % \setvalue{\??alignsets\v!middle }#1#2{\let#1\hss \let#2\hss } % \setvalue{\??alignsets\v!low }#1#2{\let#1\vss \let#2\relax} % \setvalue{\??alignsets\v!high }#1#2{\let#1\relax\let#2\vss } % \setvalue{\??alignsets\v!lohi }#1#2{\let#1\vss \let#2\vss } % \setvalue{\??alignsets\s!unknown }#1#2{\let#1\relax\let#2\relax} % % \unexpanded\def\spac_align_set_ss#1% % {\csname\??alignsetss\ifcsname\??alignsetss#1\endcsname#1\else\s!unknown\fi\endcsname} % Some obsolete (old) helpers: \def\dodefinehbox[#1][#2]% {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}} \unexpanded\def\definehbox {\dodoubleargument\dodefinehbox} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-int.mkiv0000644000175000017500000000146211754241457024276 0ustar norbertnorbert%D \module %D [ file=mult-ini, %D version=2008.10.22, % 1996.06.01, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Multilingual Macros / Lua} \registerctxluafile{cldf-int}{1.001} \unprotect % now done directly % % \unexpanded\def\clmb#1{\unexpanded\expandafter\def\csname\e!start#1\endcsname} % \unexpanded\def\clme#1{\unexpanded\expandafter\def\csname\e!stop #1\endcsname} % \unexpanded\def\clmm#1{\unexpanded\expandafter\def\csname #1\endcsname} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-ini.mkiv0000644000175000017500000007135512161703335024333 0ustar norbertnorbert%D \module %D [ file=mult-ini, %D version=2008.10.22, % 1996.06.01, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a stripped down version of \type {mult-ini.tex}, %D which we keep around as \type {mult-kep.tex} for sentimental %D reasons. There you will find some more historic information. \writestatus{loading}{ConTeXt Multilingual Macros / Initialization} \unprotect \registerctxluafile{mult-ini}{1.001} %D \macros %D [constanten,variabelen,commands] %D {v!,c!,k!,s!,e!,m!,l!,r!,f!,p!,x!,y!} %D %D In the system modules we introduced some prefixed constants, %D variables (both macros) and registers. Apart from a %D tremendous saving in terms of memory and a gain in speed we %D use from now on prefixes when possible for just another %D reason: consistency and multi||linguality. Systematically %D using prefixed macros enables us to implement a %D multi||lingual user interface. Redefining these next set of %D prefixes therefore can have desastrous results. %D %D \startlinecorrection %D \starttable[|c|c|c|] %D \HL %D \NC \bf prefix \NC \bf meaning \NC \bf application \NC\SR %D \HL %D \NC \type{\c!prefix!} \NC c! \NC constant (direct) \NC\FR %D \NC \type{\k!prefix!} \NC k! \NC constant (indirect) \NC\FR %D \NC \type{\e!prefix!} \NC e! \NC element \NC\MR %D \NC \type{\f!prefix!} \NC f! \NC file \NC\MR %D \NC \type{\m!prefix!} \NC m! \NC age \NC\MR %D \NC \type{\s!prefix!} \NC s! \NC system \NC\MR %D \NC \type{\v!prefix!} \NC v! \NC variable \NC\MR %D \HL %D \stoptable %D \stoplinecorrection %D %D In the single||lingual version we used \type{!}, \type{!!}, %D \type{!!!} and \type{!!!!}. In the meantime some of these %D are obsolete (we had some 12 originally). \def\c!prefix!{c!} \def\k!prefix!{k!} \def\e!prefix!{e!} \def\f!prefix!{f!} % for the moment we keep this one \def\m!prefix!{m!} \def\s!prefix!{s!} \def\v!prefix!{v!} %D \macros %D [constants,variables,commands] %D {@@,??} %D %D Variables generated by the system can be recognized on their %D prefix \type{@@}. They are composed of a command (class) %D specific tag, which can be recognized on \type{??}, and a %D system constant, which has the prefix \type{c!}. We'll se %D some more of this. \def\??prefix {??} \def\@@prefix {@@} %D Just to be complete we repeat some of the already defined %D system constants here. Maybe their prefix \type{\s!} now %D falls into place. \def\s!next {next} \def\s!default {default} \def\s!dummy {dummy} \def\s!unknown {unknown} \def\s!do {do} \def\s!dodo {dodo} \def\s!complex {complex} \def\s!start {start} \def\s!simple {simple} \def\s!stop {stop} \def\s!true {true} \def\s!false {false} %D The word \type{height} takes 6~token memory cells. The %D control sequence \type{\height} on the other hand uses only %D one. Knowing this, we can improve the performance of \TEX, %D both is terms of speed and memory usage, by using control %D sequences instead of the words written in full. %D %D Where in the \ASCII\ file the second lines takes nine extra %D characters, \TEX\ saves us 13~tokens. %D %D \starttyping %D \hrule width 10pt height 2pt depth 1pt %D \hrule \s!width 10pt \s!height 2pt \s!depth 1pt %D \stoptyping %D %D One condition is that we have defined \type {\s!height}, %D \type {\s!width} and \type {\s!depth} as respectively %D \type {height}, \type {width} and \type {depth}. Using this %D scheme therefore only makes sense when a token sequence is %D used more than once. Savings like this should of course be %D implemented in english, just because \TEX\ is english. \def\s!width {width} \let\!!width \s!width % obsolete \def\s!height{height} \let\!!height\s!height % obsolete \def\s!depth {depth} \let\!!depth \s!depth % obsolete \def\s!spread{spread} \let\!!spread\s!spread % obsolete \def\s!plus {plus} \let\!!plus \s!plus % obsolete \def\s!minus {minus} \let\!!minus \s!minus % obsolete \def\s!fil {fil} \def\s!fill {fill} \let\!!fill \s!fill % obsolete \def\s!filll {filll} \def\s!to {to} \let\!!to \s!to % obsolete \def\s!attr {attr} \def\s!bottom{bottom} \def\s!top {top} \def\s!both {both} %D Kind of special: \edef\!!TLT{\detokenize{TLT}} \edef\!!TRT{\detokenize{TRT}} %D \macros %D {defineinterfaceconstant, %D defineinterfacevariable, %D defineinterfaceelement, %D definesystemvariable, %D definesystemconstant, %D definemessageconstant, %D definefileconstant} %D %D The first part of this module is dedicated to dealing with %D multi||lingual constants and variables. When \CONTEXT\ grew %D bigger and bigger in terms of bytes and used string space, %D we switched to predefined constants. At the cost of more %D hash table entries, the macros not only becase more compact, %D they became much faster too. Maybe an even bigger advantage %D was that mispelling could no longer lead to problems. Even a %D multi||lingual interface became possible. %D %D Constants --- we'll introduce the concept of variables later %D on --- are preceded by a type specific prefix, followed by a %D \type{!}. To force consistency, we provide a few commands %D for defining such constants. %D %D \starttyping %D \defineinterfaceconstant {name} {meaning} %D \defineinterfacevariable {name} {meaning} %D \defineinterfaceelement {name} {meaning} %D \stoptyping %D %D Which is the same as: %D %D \starttyping %D \def\c!name{meaning} %D \def\v!name{meaning} %D \def\e!name{meaning} %D \stoptyping \unexpanded\def\defineinterfaceconstant #1#2{\expandafter\def\csname\c!prefix!#1\endcsname{#2}} \unexpanded\def\defineinterfacevariable #1#2{\expandafter\def\csname\v!prefix!#1\endcsname{#2}} \unexpanded\def\defineinterfaceelement #1#2{\expandafter\def\csname\e!prefix!#1\endcsname{#2}} %D Next come some interface independant constants: %D %D \starttyping %D \definefileconstant {name} {meaning} %D \stoptyping \unexpanded\def\definefileconstant #1#2{\expandafter\def\csname\f!prefix!#1\endcsname{#2}} %D And finaly we have the one argument, space saving constants %D %D \starttyping %D \definesystemconstant {name} %D \definemessageconstant {name} %D \stoptyping \unexpanded\def\definesystemconstant #1{\expandafter\def\csname\s!prefix!#1\endcsname{#1}} \unexpanded\def\definemessageconstant #1{\expandafter\def\csname\m!prefix!#1\endcsname{#1}} %D In a parameter driven system, some parameters are shared %D by more system components. In \CONTEXT\ we can distinguish %D parameters by a unique prefix. Such a prefix is defined %D with: %D %D \starttyping %D \definesystemvariable {name} %D \stoptyping \unexpanded\def\definesystemvariable#1{\expandafter\edef\csname\??prefix#1\endcsname{\@@prefix#1}} \definesystemvariable{ms} %D \macros %D {selectinterface, %D defaultinterface, currentinterface, currentresponses} %D %D With \type{\selectinterface} we specify the language we are %D going to use. The system asks for the language wanted, and %D defaults to \type{\currentinterface} when we just give %D \type{enter}. By default the message system uses the %D current interface language, but \type{\currentresponses} %D can specify another language too. %D %D Because we want to generate formats directly too, we do %D not ask for interface specifications when these are already %D defined (like in cont-nl.tex and alike). \ifdefined\defaultinterface \def\selectinterface {\writestatus{interface}{defining \currentinterface\space interface}% \writeline \writestatus{interface}{using \currentresponses\space messages}% \writeline \let\selectinterface\relax} \else \def\defaultinterface{english} \def\selectinterface {\def\selectinterface##1##2% {\bgroup \endlinechar\minusone \global\read16 to ##1 \egroup \doifnothing\currentinterface{\let##1=##2}% \doifundefined{\s!prefix!##1}{\let##1=##2}}% \selectinterface\currentinterface\defaultinterface \writestatus{interface}{defining \currentinterface\space interface}% \writeline \selectinterface\currentresponses\currentinterface \writestatus{interface}{using \currentresponses\space messages}% \writeline \let\selectinterface\relax} \fi \ifdefined\currentinterface \else \let\currentinterface\defaultinterface \fi \ifdefined\currentresponses \else \let\currentresponses\defaultinterface \fi %D \macros %D {startinterface} %D %D Sometimes we want to define things only for specific %D interface languages. This can be done by means of the %D selector: %D %D \starttyping %D \startinterface language %D %D language specific definitions & commands %D %D \stopinterface %D \stoptyping \unexpanded\def\startinterface #1 {\doifnot{#1}{all}{\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}} \let\stopinterface\relax %D \macros %D {startmessages, %D getmessage, %D showmessage, %D makemessage} %D %D A package as large as \CONTEXT\ can hardly function without %D a decent message mechanism. Due to its multi||lingual %D interface, the message subsystem has to be multi||lingual %D too. A major drawback of this feature is that we have to %D code messages. As a result, the source becomes less self %D documented. On the other hand, consistency will improve. %D %D Because the overhead in terms of entries in the (already %D exhausted) hash table has to be minimal, messages are packed %D in libraries. We can extract a message from such a library %D in three ways: %D %D \starttyping %D \getmessage {library} {tag} %D \showmessage {library} {tag} {data} %D \makemessage {library} {tag} {data} %D \stoptyping %D %D The first command gets the message \type{tag} from the %D \type{library} specified. The other commands take an extra %D argument: a list of items to be inserted in the message %D text. While \type{\showmessage} shows the message at the %D terminal, the other commands generate the message as text. %D Before we explain the \type{data} argument, we give an %D example of a library. %D %D \starttyping %D \startmessages english library: alfa %D title: something %D 1: first message %D 2: second (--) message -- %D \stopmessages %D \stoptyping %D %D The first message is a simple one and can be shown with: %D %D \starttyping %D \showmessage {alfa} {1} {} %D \stoptyping %D %D The second message on the other hand needs some extra data: %D %D \starttyping %D \showmessage {alfa} {2} {and last,to you} %D \stoptyping %D %D This message is shown as: %D %D \starttyping %D something : second (and last) message to you %D \stoptyping %D %D As we can see, the title entry is shown with the message. %D The data fields are comma separated and are specified in the %D message text by \type{--}. %D %D It is not required to define all messages in a library at %D once. We can add messages to a library in the following way: %D %D \starttyping %D \startmessages english library: alfa %D 10: tenth message %D \stopmessages %D \stoptyping %D %D Because such definitions can take place in different %D modules, the system gives a warning when a tag occurs more %D than once. The first occurrence takes preference over later %D ones, so we had better use a save offset, as shown in the %D example. As we can see, the title field is specified only %D the first time! %D %D Because we want to check for duplicate tags, the macros %D are a bit more complicated than neccessary. The \NEWLINE\ %D token is used as message separator. %D %D For internal purposes one can use \type {\setmessagetext}, %D which puts the message text asked for in \type %D {\currentmessagetext}. %D These will become obsolete: \unexpanded\def\startmessages #1 library: #2 % {\bgroup \ifcsname\m!prefix!#2\endcsname\else\setgvalue{\m!prefix!#2}{#2}\fi \catcode\endoflineasciicode\activecatcode \doifinsetelse{#1}{\currentresponses,all}\mult_messages_start_yes\mult_messages_start_nop{#2}} \def\mult_messages_start_yes#1#2\stopmessages {\ctxcommand{setinterfacemessages("#1",\!!bs#2\!!es)}% \egroup} \def\mult_messages_start_nop#1#2\stopmessages {\egroup} \let\stopmessages\relax \unexpanded\def\setinterfacemessage#1#2#3% {\ifcsname\m!prefix!#1\endcsname\else\setgvalue{\m!prefix!#1}{#1}\fi \ctxcommand{setinterfacemessage("#1","#2",\!!bs#3\!!es)}} \unexpanded\def\setmessagetext #1#2{\edef\currentmessagetext{\ctxcommand{getmessage("#1","#2")}}} \unexpanded\def\getmessage #1#2{\ctxcommand{getmessage("#1","#2")}} \unexpanded\def\doifelsemessage #1#2{\ctxcommand{doifelsemessage("#1","#2")}} \unexpanded\def\showmessage #1#2#3{\ctxcommand{showmessage("#1","#2",\!!bs#3\!!es)}} \unexpanded\def\writestatus #1#2{\ctxcommand{writestatus("#1",\!!bs#2\!!es)}} %D \macros %D {ifshowwarnings, ifshowmessages} %D %D Sometimes displaying message can slow down processing %D considerably. We therefore introduce warnings. Users can %D turn of warnings and messages by saying: %D %D \starttyping %D \showwarningstrue %D \showmessagestrue %D \stoptyping %D %D Turning off messages also turns off warnings, which is %D quote logical because they are less important. % not yet mkiv \newif\ifshowwarnings \showwarningstrue \newif\ifshowmessages \showmessagestrue \let\normalshowmessage\showmessage \unexpanded\def\showwarning {\ifshowwarnings \expandafter\showmessage \else \expandafter\gobblethreearguments \fi} \unexpanded\def\showmessage {\ifshowmessages \expandafter\normalshowmessage \else \expandafter\gobblethreearguments \fi} %D \macros %D {dosetvalue,dosetevalue,dosetgvalue,dosetxvalue,docopyvalue,doresetvalue} % dogetvalue %D %D We already defined these auxiliary macros in the system %D modules. Starting with this module however, we have to take %D multi||linguality a bit more serious. %D In due time, when we exclusively use the parameter handler code, we can drop %D the backmapping (\type{\c!k...}) and make \type {\c!c...} similar to %D \type {\v!...}. In that case we can simply the following setters. \unexpanded\def\doletvalue #1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} \unexpanded\def\dosetvalue #1#2{\expandafter\def \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} \unexpanded\def\dosetevalue #1#2{\expandafter\edef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} \unexpanded\def\dosetgvalue #1#2{\expandafter\gdef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} \unexpanded\def\dosetxvalue #1#2{\expandafter\xdef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} \unexpanded\def\doresetvalue #1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname\empty} \unexpanded\def\doignorevalue#1#2#3{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname\empty} \unexpanded\def\docopyvalue#1#2#3% {\ifcsname\k!prefix!#3\endcsname \expandafter\def\csname#1\csname\k!prefix!#3\endcsname\expandafter\endcsname\expandafter {\csname#2\csname\k!prefix!#3\endcsname\endcsname}% \else \expandafter\def\csname#1#3\expandafter\endcsname\expandafter {\csname#2#3\endcsname}% \fi} \startinterface english \unexpanded\def\doletvalue #1#2{\expandafter \let\csname#1#2\endcsname} \unexpanded\def\dosetvalue #1#2{\expandafter \def\csname#1#2\endcsname} \unexpanded\def\dosetevalue #1#2{\expandafter\edef\csname#1#2\endcsname} \unexpanded\def\dosetgvalue #1#2{\expandafter\gdef\csname#1#2\endcsname} \unexpanded\def\dosetxvalue #1#2{\expandafter\xdef\csname#1#2\endcsname} \unexpanded\def\doresetvalue #1#2{\expandafter \let\csname#1#2\endcsname\empty} \unexpanded\def\doignorevalue#1#2#3{\expandafter \let\csname#1#2\endcsname\empty} \unexpanded\def\docopyvalue#1#2#3% {\expandafter\def\csname#1#3\expandafter\endcsname\expandafter {\csname#2#3\endcsname}} \stopinterface %D We can now redefine some messages that will be %D introduced in the multi||lingual system module. \unexpanded\def\showassignerror #1#2{\showmessage\m!check1{#1,#2}\waitonfatalerror} \unexpanded\def\showargumenterror#1#2{\showmessage\m!check2{#1,#2}\waitonfatalerror} \unexpanded\def\showdefinederror #1#2{\showmessage\m!check3{#1,#2}\waitonfatalerror} %D \CONTEXT\ is a parameter driven package. This means that %D users instruct the system by means of variables, values and %D keywords. These instructions take the form: %D %D \starttyping %D \setupsomething[some variable=some value, another one=a keyword] %D \stoptyping %D %D or by keyword only: %D %D \starttyping %D \dosomething[this way,that way,no way] %D \stoptyping %D %D Because the same variables can occur in more than one setup %D command, we have to be able to distinguish them. This is %D achieved by assigning them a unique prefix. %D %D Imagine a setup command for boxed text, that enables us to %D specify the height and width of the box. Behide the scenes %D the command %D %D \starttyping %D \setupbox [width=12cm, height=3cm] %D \stoptyping %D %D results in something like %D %D \starttyping %D \ {12cm} %D \ {3cm} %D \stoptyping %D %D while a similar command for specifying the page dimensions %D of an \cap{A4} page results in: %D %D \starttyping %D \ {21.0cm} %D \ {27.9cm} %D \stoptyping %D %D The prefixes \type{} and \type{} are hidden from %D users and can therefore be language independant. Variables %D on the other hand, differ for each language: %D %D \starttyping %D \ {} %D \ {} %D \ {} %D \stoptyping %D %D In this example we can see that the assigned values or %D keywords are language dependant too. This will be a %D complication when defining multi||lingual setup files. %D %D A third phenomena is that variables and values can have a %D similar meaning. %D %D \starttyping %D \ {} %D \ {12cm} %D \stoptyping %D %D A (minor) complication is that where in english we use %D \type{}, in dutch we find both \type{} and %D \type{}. This means that when we use some sort of %D translation table, we have to distinguish between the %D variables at the left side and the fixed values at the %D right. %D %D The same goes for commands that are composed of different %D user supplied and/or language specific elements. In english %D we can use: %D %D \starttyping %D \
%D \ %D \stoptyping %D %D But in dutch we have the following: %D %D \starttyping %D \ %D \ %D \stoptyping %D %D These subtle differences automatically lead to a solution %D where variables, values, elements and other components have %D a similar logical name (used in macro's) but a different %D meaning (supplied by the user). %D %D Our solution is one in which the whole system is programmed %D in terms of identifiers with language specific meanings. In %D such an implementation, each fixed variable is available as: %D %D \starttyping %D \ %D \stoptyping %D %D This means that for instance: %D %D \starttyping %D \setupbox[width=12cm] %D \stoptyping %D %D expands to something like: %D %D \starttyping %D \def\boxwidth{12cm} %D \stoptyping %D %D because we don't want to recode the source, a setup command %D in another language has to expand to this variable, so: %D %D \starttyping %D \setupblock[width=12cm] %D \stoptyping %D %D has to result in the definition of \type{\boxwidth} too. %D This method enables us to build compact, fast and readable %D code. %D %D An alternative method, which we considered using, uses a %D more indirect way. In this case, both calls generate a %D different variable: %D %D \starttyping %D \def\boxwidth {12cm} %D \def\boxbreedte {12cm} %D \stoptyping %D %D And because we don't want to recode those megabytes of %D already developed code, this variable has to be called with %D something like: %D %D \starttyping %D \valueof\box\width %D \stoptyping %D %D where \type{\valueof} takes care of the translation of %D \type{width} or \type{breedte} to \type{width} and %D combining this with \type{box} to \type{\boxwidth}. %D %D One advantage of this other scheme is that, within certain %D limits, we can implement an interface that can be switched %D to another language at will, while the current approach %D fixes the interface at startup. There are, by the way, %D other reasons too for not choosing this scheme. Switching %D user generated commands is for instance impossible and a %D dual interface would therefore give a strange mix of %D languages. %D %D Now let's work out the first scheme. Although the left hand %D of the assignment is a variable from the users point of %D view, it is a constant in terms of the system. Both %D \type{width} and \type{breedte} expand to \type{width} %D because in the source we only encounter \type{width}. Such %D system constants are presented as %D %D \starttyping %D \c!width %D \stoptyping %D %D This constant is always equivalent to \type{width}. As we %D can see, we use \type{c!} to mark this one as constant. Its %D dutch counterpart is: %D %D \starttyping %D breedte %D \stoptyping %D %D When we interpret a setup command each variable is %D translated to it's \type{c!} counterpart. This means that %D \type{breedte} and \type{width} expand to \type{breedte} %D and \type{\c!width} which both expand to \type{width}. That %D way user variables become system constants. %D %D The interpretation is done by means of a general setup %D command \type{\getparameters} that we introduced in the %D system module. Let us define some simple setup command: %D %D \starttyping %D \unexpanded\def\setupbox[#1]% %D {\getparameters[\??bx][#1]} %D \stoptyping %D %D This command can be used as: %D %D \starttyping %D \setupbox [width=3cm, height=1cm] %D \stoptyping %D %D Afterwards we have two variables \type{\@@bxwidth} and %D \type{\@@bxheight} which have the values \type{3cm} and %D \type{1cm} assigned. These variables are a combinatiom of %D the setup prefix \type{\??bx}, which expands to \type{@@bx} %D and the translated user supplied variables \type{width} and %D \type{height} or \type{breedte} and \type{hoogte}, %D depending on the actual language. In dutch we just say: %D %D \starttyping %D \stelblokin [breedte=3cm,hoogte=1cm] %D \stoptyping %D %D and get ourselves \type{\@@bxwidth} and \type{\@@bxheight} %D too. In the source of \CONTEXT, we can recognize constants %D and variables on their leading \type{c!}, \type{v!} etc., %D prefixes on \type{??} and composed variables on \type{@@}. %D %D We already saw that user supplied keywords need some %D special treatment too. This time we don't translate the %D keyword, but instead use in the source a variable which %D meaning depends on the interface language. %D %D \starttyping %D \v!left %D \stoptyping %D %D Which can be used in macro's like: %D %D \starttyping %D \processaction %D [\@@bxlocation] %D [ \v!left=>\dosomethingontheleft, %D \v!middle=>\dosomthinginthemiddle, %D \v!right=>\dosomethingontheright] %D \stoptyping %D %D Because variables like \type{\@@bxlocation} can have a lot %D of meanings, including tricky expandable tokens, we cannot %D translate this meaning when we compare. This means that %D \type{\@@bxlocation} can be \type{left} of \type{links} of %D whatever meaning suits the language. But because %D \type{\v!left} also has a meaning that suits the language, %D we are able to compare. %D %D Although we know it sounds confusing we want to state two %D important characteristics of the interface as described: %D %D \startnarrower \em %D user variables become system constants %D \stopnarrower %D %D and %D %D \startnarrower \em %D user constants (keywords) become system variables %D \stopnarrower %D The \type {\c!internal} is a left over from the time that %D the user interface documents were not using a specification %D alongside a keyword specification but used a shared file in %D which case we need to go in both directions. % temporary mkiv hack (we can best just store the whole table in memory) \unexpanded\def\setinterfaceconstant#1#2% {\ctxcommand{setinterfaceconstant("#1","#2")}% \expandafter\def\csname\c!prefix!#1\endcsname{#1}} \unexpanded\def\setinterfacevariable#1#2% {\ctxcommand{setinterfacevariable("#1","#2")}% \expandafter\def\csname\v!prefix!#1\endcsname{#2}} %D \macros %D {defineinterfaceconstant} %D %D Next we redefine a previously defined macro to take care of %D interface translation too. It's a bit redundant, because %D in these situations we could use the c||version, but for %D documentation purposes the x||alternative comes in handy. \unexpanded\def\defineinterfaceconstant#1#2% {\expandafter\def\csname\c!prefix!#1\endcsname{#2}} %D \macros %D {startelements} %D %D Due to the object oriented nature of \CONTEXT, we also need %D to define the elements that are used to build commands. %D %D Such elements sometimes are the same in diferent %D languages, but mostly they differ. Things can get even %D confusing when we look at for instance the setup commands. %D In english we say \type{\setup}, but in dutch we %D have: \type{\stelin}. Such split elements are no %D problem, because we just define two elements. When no second %D part is needed, we use a \type{-}: \unexpanded\def\setinterfaceelement#1#2% {\ctxcommand{setinterfaceelement("#1","#2")}% \ifcsname\e!prefix!#1\endcsname \doifnotvalue{\e!prefix!#1}{#2}{\setvalue{\e!prefix!#1}{#2}}% \else \setvalue{\e!prefix!#1}{#2}% \fi} \unexpanded\def\setinterfacecommand#1#2% {\doifnot{#1}{#2}% todo: let when already defined {\expandafter\def\csname#2\expandafter\endcsname\expandafter{\csname#1\endcsname}}} %D We just ignore these: \unexpanded\def\startvariables{\gobbleuntil\stopvariables} \let\stopvariables\relax \unexpanded\def\startconstants{\gobbleuntil\stopconstants} \let\stopconstants\relax \unexpanded\def\startelements {\gobbleuntil\stopelements } \let\stopelements \relax \unexpanded\def\startcommands {\gobbleuntil\stopcommands } \let\stopcommands \relax %D For at the \LUA\ end (experiment): % \def\do@sicon#1#2{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}% % \expandafter\gdef\csname\k!prefix!#2\endcsname{#1}} % backmapping from non english % \def\do@sivar#1#2{\expandafter\gdef\csname\v!prefix!#1\endcsname{#2}} % \def\do@siele#1#2{\expandafter\gdef\csname\e!prefix!#1\endcsname{#2}} % \def\do@sicom#1#2{\expandafter\gdef\csname#2\expandafter\endcsname\expandafter{\csname#1\endcsname}} % % \startinterface english % % \def\do@sicon#1#2{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}} % % \stopinterface \def\ui_c#1#2{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}% \expandafter\gdef\csname\k!prefix!#2\endcsname{#1}} % backmapping from non english \def\ui_v#1#2{\expandafter\gdef\csname\v!prefix!#1\endcsname{#2}} \def\ui_e#1#2{\expandafter\gdef\csname\e!prefix!#1\endcsname{#2}} \def\ui_m#1#2{\expandafter\gdef\csname#2\expandafter\endcsname\expandafter{\csname#1\endcsname}} \startinterface english \def\ui_c#1#2{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}} \stopinterface %D So much for the basic multi||lingual interface commands. The %D macro's can be enhanced with more testing facilities, but %D for the moment they suffice. \ifdefined\zwnj \else \edef\zwnj{\directlua{utf.char(\number"200C)}} \fi % needed for cont-pe % maybe to char-utf.mkiv \ifdefined\zwj \else \edef\zwj {\directlua{utf.char(\number"200D)}} \fi % needed for cont-pe % maybe to char-utf.mkiv %D Out of convenience we define the banners here. This might move %D to the \LUA\ end. \def\contextbanner {ConTeXt \space ver: \contextversion \space \contextmark \space \contextkind \space \space fmt: \formatversion \space \space int: \currentinterface/\currentresponses} \unexpanded\def\showcontextbanner {\writeline\writebanner{\contextbanner}\writeline} \edef\formatversion {\the\normalyear .\the\normalmonth.\the\normalday} \ifx\contextversion\undefined \def\contextversion {unknown} \def\contextversionnumber{0} \else %\def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi#2\ifnum#3<10 0\fi#3 #4:#5} \def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi\purenumber{#2}\ifnum#3<10 0\fi\purenumber{#3} #4:#5} \edef\contextversionnumber{\expandafter\contextversionnumber\contextversion\relax\space\contextmark} \fi \ifx\undefined\everydump \newtoks\everydump \def\dump{\the\everydump\normaldump} \fi \appendtoks \showcontextbanner \to \everydump \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/pdfr-ec.mkii0000644000175000017500000000562411754241457024105 0ustar norbertnorbert%D \module %D [ file=pdfr-ec, %D version=2005.07.27, %D title=\CONTEXT\ PDF Font Resources, %D subtitle=EC encoding, %D author={Vladimir Volovich / Taco Hoekwater}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 vector is derived (but reformatted a bit) from %D the one in \LaTeX's CMap package \startpdffontresource[ec] /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (T1) /Supplement 0 >> def /CMapName /TeX-T1-0 def /CMapType 2 def 1 begincodespacerange <00> endcodespacerange 10 beginbfrange <0E> <0F> <2039> <10> <12> <201C> <15> <16> <2013> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> <00C0> <00D8> <00E0> <00F8> endbfrange 95 beginbfchar <00> <0060> <01> <00B4> <02> <02C6> <03> <02DC> <04> <00A8> <05> <02DD> <06> <02DA> <07> <02C7> <08> <02D8> <09> <00AF> <0A> <02D9> <0B> <00B8> <0C> <02DB> <0D> <201A> <13> <00AB> <14> <00BB> <17> <200C> <19> <0131> <1B> <00660066> <1C> <00660069> <1D> <0066006C> <1E> <006600660069> <1F> <00660066006C> <20> <2423> <27> <2019> <60> <2018> <7F> <002D> <80> <0102> <81> <0104> <82> <0106> <83> <010C> <84> <010E> <85> <011A> <86> <0118> <87> <011E> <88> <0139> <89> <013D> <8A> <0141> <8B> <0143> <8C> <0147> <8D> <014A> <8E> <0150> <8F> <0154> <90> <0158> <91> <015A> <92> <0160> <93> <015E> <94> <0164> <95> <021A> <96> <0170> <97> <016E> <98> <0178> <99> <0179> <9A> <017D> <9B> <017B> <9C> <0132> <9D> <0130> <9E> <0111> <9F> <00A7> <0103> <0105> <0107> <010D> <010F> <011B> <0119> <011F> <013A> <013E> <0142> <0144> <0148> <014B> <0151> <0155> <0159> <015B> <0161> <015F> <0165> <021B> <0171> <016F> <00FF> <017A> <017E> <017C> <0133> <00A1> <00BF> <00A3> <0152> <00530053> <0153> <00DF> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end \stoppdffontresource \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fig-02.mkii0000644000175000017500000000400311754241457024004 0ustar norbertnorbert%D \module %D [ file=x-fig-02, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Inclusion (I), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \readfile {x-res-02} \donothing \donothing \endinput %D This module enables non||\ConTeXt\ users to access the %D database. For this, you need to run %D %D \starttyping %D texexec --pdf --use=fig-fake yourfile.xml %D \stoptyping %D %D The resulting file, \type {yourfile.fig}, can be loaded %D in the normal way. The figures can be accessed with: %D %D \starttyping %D \getfigurefile{label} %D \getfigurepage{label} %D \stoptyping %D %D A a bonus, the following macro is defined: %D %D \starttyping %D \includefigurefile width 10cm {label} %D \stoptyping \usemodule[fig-00] \doifnothing {\jobfilename} {\end} \doiffileelse {\jobfilename.xml} {} {\end} \defineXMLenvironment [figurelibrary] \StartLibrary \StopLibrary \defineXMLignore [description] \defineXMLenvironment [figure] \StartFigure \StopFigure \def\StartLibrary {\immediate\openout \scratchwrite=\jobfilename.fig \immediate\write\scratchwrite{\string\input\space x-fig-03.tex \string\relax} \immediate\write\scratchwrite{}} \def\StopLibrary {\immediate\write\scratchwrite{} \immediate\write\scratchwrite{\string\endinput} \immediate\closeout\scratchwrite} \def\StartFigure {\defineXMLpush[file] \defineXMLpush[dummy] \defineXMLpush[label] \defineXMLpush[copyright] \defineXMLpush[comment] \defineXMLpush[status]} \def\StopFigure {\doglobal\increment\CurrentPage \immediate\write\scratchwrite {\string\setfiguredata\space {\XMLpop{label}} {\jobfilename} {\CurrentPage}}} \doglobal\newcounter\CurrentPage \starttext \processXMLfilegrouped{\jobfilename.xml} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/x-res-01.mkiv0000644000175000017500000003010012130411274024022 0ustar norbertnorbert%D \module %D [ file=x-fig-01, %D version=2001.03.21, %D title=\CONTEXT\ Style File, %D subtitle=Figure Base Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 See \type {x-fig-00.tex} and \type {x-fig-04.tex} for more %D information on how to use and generate figure databases. %D This file loads the file named \type {\jobfilename} %D (\TEXEXEC\ will set this variable). You can apply this %D style to a database by saying: %D %D \starttyping %D context --input=d-res-01.xml auto:x-res-01.mkiv %D \stoptyping %D %D The following modes are supported (not all yet in mkiv): %D %D \starttabulate[|lT|l|] %D \NC letter \NC map the preview on letter size \NC \NR %D \NC compact \NC use an alternative presentation \NC \NR %D \NC clipgrid-distance \NC add a copy with grid overlayed \NC \NR %D \NC clipgrid-steps \NC add a copy with grid overlayed \NC \NR %D \NC previewpage-A4 \NC show graphic relative to A4 \NC \NR %D \NC previewpage-letter \NC show graphic relative to letter \NC \NR %D \NC previewpage-S6 \NC show graphic relative to S6 \NC \NR %D \stoptabulate %D %D The resulting file has the following characteristics: %D %D \startitemize[packed] %D \startitem the document is split into three sections: first each %D figure is shown at its own page, then an overview of figures is %D shown with some data alongside, and finally an index and table of %D contents shows up \stopitem %D \startitem there is no title page, which means that one can access %D a figure by page number without offset \stopitem %D \startitem the document is opened at the first overview page, that %D is, when the viewer supports it \stopitem %D \startitem the graphic is shown 3~times: on a page of its own, %D scaled to a fixed dimension, and relative to a4 or letter paper %D size \stopitem %D \startitem the labels can be accessed in an index and list at the %D end of the document \stopitem %D \stopitemize \defineregister [figureindex] \setupregister [figureindex] [criterium=text, interaction=text, pagenumber=no, indicator=no] \setuptolerance [verytolerant] \setupbuttons [offset=10pt, width=broad, strut=no, rulethickness=1pt, framecolor=darkred] \setuplayout [topspace=15pt, backspace=15pt, header=0pt, footer=0pt, bottom=20pt, bottomdistance=10pt, width=middle, height=fit] \setupbackgrounds [page] [background=, backgroundcolor=gray] \setupinteractionscreen [width=max, height=max] \setupinteraction [style=, color=, contrastcolor=, state=start] \setuphead [section] [style=bfb] \setupinteractionmenu [bottom] [left=\hfill, middle=\hskip10pt, frame=off, style=bold, background=color, backgroundcolor=darkred, foregroundcolor=white] \startinteractionmenu[bottom] \but [begin] begin \\ \but [index] index \\ \but [list] list \\ \but [CloseDocument] close \\ \but [PreviousJump] go back \\ \stopinteractionmenu \setupinteraction [openaction=begin] \setuppapersize [S6][S6] \setupbackgrounds [page] [background=color] \setupinteraction [menu=on] \setupbodyfont [tt,10pt] \definesymbol [attachment] [{\strut\bf\color[darkred]{\inputfilename}}] % jobname.xml}}] \setupattachments [symbol=attachment,alternative=,location=text] \useattachment [datafile] [\inputfilename] \xmlloadonly{main}{\inputfilename}{} \mainlanguage[\xmlattributedef{main}{/rlx:library}{language}{en}] \startxmlsetups xml:resource:asis \startTEXpage[pagestate=start] \xmldoifelsetext{#1}{/rlx:label} { \edef\CurrentLabel{\xmltext{#1}{rlx:label}} } { \edef\CurrentLabel{\xmltext{#1}{rlx:file}} } \pagereference [ asis:\CurrentLabel ] \gotobox { \externalfigure[\xmltext{#1}{/rlx:file}] }[% tricky no space before [ data:\CurrentLabel ] \stopTEXpage \stopxmlsetups \definemeasure[figure:width] [210mm] \definemeasure[figure:height][297mm] \startmode[letter] \enablemode[previewpage-letter] \stopmode \startmode[previewpage-A4] \definemeasure[figure:width] [210mm] \definemeasure[figure:height][297mm] \stopmode \startmode[previewpage-letter] \definemeasure[figure:width] [8.5in] \definemeasure[figure:height][11in] \stopmode \startmode[previewpage-S6] \definemeasure[figure:width] [600pt] \definemeasure[figure:height][450pt] \stopmode \startxmlsetups xml:resource:a \button [ width=150pt, height=100pt, offset=10pt, frame=off, background=color, backgroundcolor=white, color= ] { \externalfigure [\xmltext{#1}{rlx:file}] [factor=max] } [ grid:\CurrentLabel ] \stopxmlsetups \startxmlsetups xml:resource:b \framed [ width=150pt, height=100pt, offset=10pt, frame=off, background=color, backgroundcolor=white, color= ] { \externalfigure [ \xmltext{#1}{rlx:file} ] [ factor=max ] } \stopxmlsetups \startxmlsetups xml:resource:data % using a layer makes more sense but we had this ... \xmldoifelsetext{#1}{/rlx:label} { \edef\CurrentLabel{\xmltext{#1}{rlx:label}} } { \edef\CurrentLabel{\xmltext{#1}{rlx:file}} } \button { \hbox to \hsize { \forgetall \dontcomplain \pagereference[data:\CurrentLabel] %\ifnum\CurrentPage=1 \pagereference[begin]\fi \expanded{\figureindex{\xmltext{#1}{/rlx:label}}} \vbox to 100pt { \hsize30pt \vskip5pt \hbox to \hsize { \hss \strut \bf \at[asis:\CurrentLabel] \hss } \vfill } \advance\hsize by -30pt \doifmodeelse {clipgrid-distance,clipgrid-steps} { \xmlsetup{#1}{xml:resource:a} } { \xmlsetup{#1}{xml:resource:b} } \edef\CurrentWidth {\the\dimexpr\figurenaturalwidth} \edef\CurrentHeight{\the\dimexpr\figurenaturalheight} \advance\hsize by -150pt \hskip10pt \advance\hsize by -10pt \vbox to 100pt { \hsize40pt \framed [ offset=overlay, framecolor=darkred, rulethickness=.5pt ] { \scale [ width=40pt ] { \framed [ width=\measure{figure:width}, height=\measure{figure:height}, offset=overlay, frame=off, background=color, backgroundcolor=white ] { \externalfigure [ \xmltext{#1}{rlx:file} ] [ reset=yes ] } } } \vfill } \advance\hsize by -40pt \hskip10pt \advance\hsize by -10pt \vbox to 100pt { \blank[disable] \starttabulate[|Bel|p|] \NC file \NC \xmltext{#1}{/rlx:file} \NC \NR \xmldoif{#1}{/rlx:label} {\NC label \NC \xmltext{#1}{/rlx:label} \NC \NR} \NC dimensions \NC \CurrentWidth\ * \CurrentHeight \NC \NR \xmldoif{#1}{/rlx:copyright} {\NC copyright \NC \xmltext{#1}{/rlx:copyright} \NC \NR} \xmldoif{#1}{/rlx:status} {\NC status \NC \xmltext{#1}{/rlx:status} \NC \NR} \xmldoif{#1}{/rlx:comment} {\NC comment \NC \xmltext{#1}{/rlx:comment} \NC \NR} \stoptabulate \vfill } } } [ asis:\CurrentLabel ] \vskip10pt \stopxmlsetups \startxmlsetups xml:description \starttabulate[|lBe|p|] \xmldoif{#1}{/rlx:organization} {\NC organization \NC \xmltext{#1}{/rlx:organization} \NC \NR} \xmldoif{#1}{/rlx:project} {\NC project \NC \xmltext{#1}{/rlx:project} \NC \NR} \xmldoif{#1}{/rlx:product} {\NC product \NC \xmltext{#1}{/rlx:product} \NC \NR} \xmldoif{#1}{/rlx:comment} {\NC comment \NC \xmltext{#1}{/rlx:comment} \NC \NR} \NC specification \NC \attachment[datafile] \NC \NR \stoptabulate \stopxmlsetups \starttext \xmlfilter{main}{/rlx:library/rlx:resource/command(xml:resource:asis)} \subject {Figure collection} \xmlfilter{main}{/rlx:library/rlx:description/command(xml:description)} \subject [list] {List of figures} \xmlfilter{main}{/rlx:library/rlx:resource/command(xml:resource:data)} \page \subject [index] {Index of figures} \startcolumns \placeregister[figureindex] \stopcolumns \stoptext % \doifmodeelse{clipgrid-distance,clipgrid-steps}{\page}{\stoptext} % \startuniqueMPgraphic{clipgrid}{dx,dy,nx,ny,type} % numeric gdx, gdy, lbx, lby ; % if \MPvar{type}=1 : % gdx := \MPvar{dy} ; % gdy := \MPvar{dx} ; % else : % gdx := OverlayWidth /\MPvar{nx} ; % gdy := OverlayHeight/\MPvar{ny} ; % fi ; % lbx := gdx ; % lby := gdy ; % defaultfont := "\truefontname{Mono}" ; % defaultscale := .5 ; % numeric pen ; pen := .25pt ; % def MyGrid text t = % draw vlingrid (0,OverlayWidth ,gdy,OverlayWidth ,OverlayHeight) t ; % draw hlingrid (0,OverlayHeight,gdx,OverlayHeight,OverlayWidth ) t ; % enddef ; % pickup pencircle scaled pen ; % MyGrid withcolor white ; % MyGrid dashed evenly scaled pen ; % draw OverlayBox withcolor white ; % draw OverlayBox dashed evenly scaled pen ; % draw vlinlabel.bot(0,eps+OverlayWidth /lby,2,OverlayWidth ) ; % draw hlinlabel.lft(0,eps+OverlayHeight/lbx,2,OverlayHeight) ; % setbounds currentpicture to OverlayBox enlarged (2*EmWidth) ; % \stopuniqueMPgraphic % \presetMPvariable[clipgrid][dx=10pt] % \presetMPvariable[clipgrid][dy=10pt] % \presetMPvariable[clipgrid][nx=10] % \presetMPvariable[clipgrid][ny=10] % \startmode[clipgrid-distance] % \defineoverlay[grid][\uniqueMPgraphic{clipgrid}{type=1}] % \stopmode % \startmode[clipgrid-steps] % \defineoverlay[grid][\uniqueMPgraphic{clipgrid}{type=2}] % \stopmode % \setupexternalfigures % [background={color,foreground,grid}, % backgroundcolor=white] % \def\StartFigureD % {\StartFigureA} % \def\StopFigureD % {\doglobal\increment\CurrentPage % \setupbackgrounds[page][background=page] % \startpagefigure[\XMLflush{rlx:file}][offset=20pt]% % \doifelsenothing{\XMLflush{rlx:label}} % {\expanded{\definereference[Description][about:\XMLflush{rlx:file}]}% % \expanded{\pagereference[grid:\XMLflush{rlx:file}]}} % {\expanded{\definereference[Description][about:\XMLflush{rlx:label}]}% % \expanded{\pagereference[grid:\XMLflush{rlx:label}]}} % \stoppagefigure % %\pagefigure[\XMLflush{rlx:file}][offset=20pt] % \setupbackgrounds[page][background=] % \egroup} % \defineXMLignore [rlx:description] % \defineXMLenvironment [rlx:figure] \StartFigureD \StopFigureD % \doglobal\newcounter\CurrentPage % \processXMLfilegrouped{\jobfullname} \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/font-col.mkvi0000644000175000017500000001261611754241457024322 0ustar norbertnorbert%D \module %D [ file=font-col, %D version=2008.06.11, %D title=\CONTEXT\ Font Macros, %D subtitle=Fallbacks (collections), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % ! EXPERIMENTAL ! code will be made more nice % % actually we can now do more at the lua end % todo: missing only, force always, multiple fallbacks with test, scale % % \resetfontfallback [whatever] % % \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes] % \definefontfallback [whatever] [Bold] [0x0080-0x00FF,0x00A0-0x00AF] [rscale=1.2] % \definefontfallback [whatever] [BoldSlanted] [0x00C0-0x00C7] [check=yes,force=yes] \writestatus{loading}{ConTeXt Font Macros / Collections} \registerctxluafile{font-col}{1.001} \unprotect \unexpanded\def\definefontfallback{\doquadrupleempty\font_fallbacks_define} \unexpanded\def\resetfontfallback {\dodoubleempty \font_fallbacks_reset } \def\font_fallbacks_define[#name][#font][#ranges][#settings]% {\ctxcommand{fontcollectiondefine("#name","#font",\!!bs#ranges\!!es,\!!bs#settings\!!es)}} \def\font_fallbacks_reset[#name][#font]% {\ctxcommand{fontcollectionreset("#name","#font")}} \def\font_fallbacks_prepare#name% {\ctxcommand{fontcollectionprepare("#name")}} % add fallbacks to last font % we might as well move the handling to lua but then we need to pass the % fallbacks, skewchar etc. \newconditional\c_font_fallbacks_in_progress \def\font_fallbacks_prepare_indeed#fallbacks% {\begingroup \settrue\c_font_fallbacks_in_progress \lastrawfontcall % sets current font id \font_fallbacks_prepare#fallbacks% \endgroup} \let\m_font_fallbacks\empty % set in the font-ini \appendtoks \ifconditional\c_font_fallbacks_in_progress\else \ifx\m_font_fallbacks\empty \ifx\m_font_class_fallbacks\empty \else \font_fallbacks_prepare_indeed\m_font_class_fallbacks \fi \else \font_fallbacks_prepare_indeed\m_font_fallbacks \fi \fi \to\everydefinefont \def\font_fallbacks_start_cloning {\begingroup \let\savedfontspec\somefontspec} \def\font_fallbacks_stop_cloning {\endgroup} \def\font_fallbacks_clone_unique#specification#scale% kind of dododefinefont {\ctxcommand{fontcollectionreport("defining #specification (relative scale: #scale)")}% brrr \setfalse\c_font_auto_size \let\lastfontidentifier\s!dummy \def\v_font_size_relative{#scale}% \let\v_font_size_absolute\fontbody \font_helpers_low_level_define{#specification}\v_font_identifier_basic \csname\v_font_identifier_basic\endcsname \setfalse\c_font_auto_size} % no \setfontcharacteristics and \the\everyfontswitch needed \def\font_fallbacks_clone_inherited#font% also a second argument {\font_fallbacks_clone_unique{#font \savedfontspec}} \def\font_fallbacks_register_main #name{\ctxcommand{fontcollectionregister("#name")}} \def\font_fallbacks_prepare_clone_vectors#name{\ctxcommand{fontcollectionclone("#name")}} % check : only replace when present in replacement font (default: no) % force : force replacent even when basefont has glyph (default: yes) % \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes] % \definefontfallback [whatever] [Bold] [0x0080:0x00FF,0x00A0:0x00AF] [rscale=2.0] % \definefontfallback [whatever] [BoldSlanted] ["00C0-"00C7] [check=yes,force=yes] % \definefontfallback [whatever] [Mono] [latinextendeda] [force=yes] % 0x0100:0x017F % \definefontfallback [whatever] [Mono] [latin extended a] [force=yes] % 0x0100:0x017F % % \definefontsynonym[SerifPlus][Serif][fallbacks=whatever] % % \showfont[SerifPlus][all] % \definefontfeature[zh][mode=node,script=hang,lang=zhs] % \definefontfallback[serifwhatever] [lmroman10-regular] [0x0000-0x0400][force=yes] % \definefontfallback[serifboldwhatever] [lmroman10-bold] [0x0000-0x0400][force=yes] % \definefontfallback[serifitalicwhatever] [lmroman10-italic] [0x0000-0x0400][force=yes] % \definefontfallback[serifbolditalicwhatever][lmroman10-bolditalic][0x0000-0x0400][force=yes] % % \starttypescript [serif] [zhfont] % \definefontsynonym [zhserif] [AdobeSongStd-Light] [features=zh,fallbacks=serifwhatever] % \definefontsynonym [zhserifbold] [AdobeHeitiStd-Regular][features=zh,fallbacks=serifboldwhatever] % \definefontsynonym [zhserifitalic] [AdobeKaitiStd-Regular][features=zh,fallbacks=serifitalicwhatever] % \definefontsynonym [zhserifbolditalic][AdobeHeitiStd-Regular][features=zh,fallbacks=serifbolditalicwhatever] % \stoptypescript % % \starttypescript [serif][zhfont][name] % \definefontsynonym[Serif] [zhserif] % [fallbacks=serifwhatever] % \definefontsynonym[SerifBold] [zhserifbold] % [fallbacks=serifboldwhatever] % \definefontsynonym[SerifItalic] [zhserifitalic] % [fallbacks=serifitalicwhatever] % \definefontsynonym[SerifBoldItalic] [zhserifbolditalic] % [fallbacks=serifbolditalicwhatever] % \stoptypescript % % \starttypescript[myfont] % \definetypeface[myfont][rm][serif][zhfont] % \stoptypescript % % \usetypescript[myfont] \setupbodyfont[myfont,rm,12pt] % % \starttext % fonts {\bf fonts} {\bi fonts} {\it fonts} % \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-9.mkii0000644000175000017500000002615011754241457024271 0ustar norbertnorbert%D \module %D [ file=regi-8859-9, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-9 (Turkish), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-9/Latin5 input encoding (regime) for Turkish, %D see also cp1254. %D %D Usage: \type{\enableregime[8859-9]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-9] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\exclamdown} % 00A1 INVERTED EXCLAMATION MARK \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\textyen} % 00A5 YEN SIGN \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\ordfeminine} % 00AA FEMININE ORDINAL INDICATOR \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\textmacron} % 00AF MACRON \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\ordmasculine} % 00BA MASCULINE ORDINAL INDICATOR \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\onequarter} % 00BC VULGAR FRACTION ONE QUARTER \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\threequarter} % 00BE VULGAR FRACTION THREE QUARTERS \defineactivetoken 191 {\questiondown} % 00BF INVERTED QUESTION MARK \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Atilde} % 00C3 LATIN CAPITAL LETTER A WITH TILDE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Gbreve} % 011E LATIN CAPITAL LETTER G WITH BREVE \defineactivetoken 209 {\Ntilde} % 00D1 LATIN CAPITAL LETTER N WITH TILDE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Idotaccent} % 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE \defineactivetoken 222 {\Scedilla} % 015E LATIN CAPITAL LETTER S WITH CEDILLA \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\atilde} % 00E3 LATIN SMALL LETTER A WITH TILDE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\gbreve} % 011F LATIN SMALL LETTER G WITH BREVE \defineactivetoken 241 {\ntilde} % 00F1 LATIN SMALL LETTER N WITH TILDE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\dotlessi} % 0131 LATIN SMALL LETTER DOTLESS I \defineactivetoken 254 {\scedilla} % 015F LATIN SMALL LETTER S WITH CEDILLA \defineactivetoken 255 {\ydiaeresis} % 00FF LATIN SMALL LETTER Y WITH DIAERESIS \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-sec.mkiv0000644000175000017500000012256412161703335024317 0ustar norbertnorbert%D \module %D [ file=strc-sec, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Sectioning, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Sectioning} \unprotect \installcorenamespace{structure} \installdirectcommandhandler \??structure {structure} % unchecked, so we need to initialize used parameters \setupstructure % not a user command so we might need to change the name [\c!number=, \c!level=, \c!name=, \c!title=, \c!bookmark=, \c!marking=, \c!list=, \c!label=, \c!coupling=, \c!ownnumber=, \c!sectionseparatorset=\s!default, \c!sectionconversionset=\s!default, \c!sectionstopper=, \c!sectionstarter=, \c!sectionsegments=, \c!sectionresetset=, \c!reference=, \c!backreference=, \c!expansion=\v!no, \c!xmlsetup=, \s!catcodes=, \c!saveinlist=\v!yes] % maybe flags for list, bm, mark \def\m_strc_references_prefix_yes{+} \def\m_strc_references_prefix_nop{-} \def\strc_sectioning_set_reference_prefix {\ifx\currentstructurereferenceprefix\empty % nothing \else\ifx\currentstructurereferenceprefix\m_strc_references_prefix_yes \global\advance\prefixcounter \plusone % temp here \setupglobalreferenceprefix[\the\prefixcounter]% \else\ifx\currentstructurereferenceprefix\m_strc_references_prefix_nop \setupglobalreferenceprefix[]% \else \setupglobalreferenceprefix[\currentstructurereferenceprefix]% \fi\fi\fi \let\currentstructurereferenceprefix\referenceprefix} % why xdef ? \setupstructure [\c!label={\headparameter{\currentsectionblock\c!label}}, \c!incrementnumber=\ifconditional\c_strc_sectioning_increment\v!yes\else\v!no\fi, % not that needed \c!saveinlist=\ifconditional\c_strc_sectioning_to_list\v!yes\else\v!no\fi, \c!level=\currentheadlevel, \c!number=\ifconditional\c_strc_sectioning_increment\ifconditional\headshownumber\v!yes\else\v!no\fi\else\v!no\fi, \c!expansion=\headparameter\c!expansion, \c!xmlsetup=\headparameter\c!xmlsetup, \s!catcodes=\headparameter\s!catcodes, \c!sectionresetset=\headparameter\c!sectionresetset, \c!sectionseparatorset=\headparameter\c!sectionseparatorset, \c!sectionconversionset=\headparameter\c!sectionconversionset, \c!sectionconversion=\headparameter\c!conversion, % just for compatibility \c!sectionstarter=\headparameter\c!sectionstarter, \c!sectionstopper=\headparameter\c!sectionstopper, \c!sectionset=\headparameter\c!sectionset, \c!sectionsegments=\headparameter\c!sectionsegments, \c!reference=\headparameter\c!reference, \c!referenceprefix=\headparameter\c!referenceprefix] % see lists/neat-001.tex for usage of: \def\namedstructureheadlocation#1% expandable, maybe [#1] {\csname\??savedinternalreference\ifcsname\??savedinternalreference#1\endcsname#1\else\s!default\fi\endcsname} \unexpanded\def\strc_sectioning_register#1#2#3% #1=interfaced-settings, #2=optional user data (not yet supported) {\begingroup \setupstructure[\c!name={#1},#2]% \xdef\currentstructurename {\structureparameter\c!name}% \xdef\currentstructurecoupling {\structureparameter\c!coupling}% \xdef\currentstructureownnumber {\structureparameter\c!ownnumber}% optional own number \xdef\currentstructurelevel {\structureparameter\c!level}% \edef\currentstructureexpansion {\structureparameter\c!expansion}% \xdef\currentstructurexmlsetup {\structureparameter\c!xmlsetup}% \xdef\currentstructurecatcodes {\structureparameter\s!catcodes}% \xdef\currentstructurelabel {\structureparameter\c!label}% \xdef\currentstructurereference {\structureparameter\c!reference}% \xdef\currentstructurereferenceprefix{\structureparameter\c!referenceprefix}% \xdef\currentstructurebackreference {\structureparameter\c!backreference}% \xdef\currentstructureshownumber {\structureparameter\c!number}% \xdef\currentstructuresaveinlist {\structureparameter\c!saveinlist}% \xdef\currentstructureincrementnumber{\structureparameter\c!incrementnumber}% \ifx\currentstructureexpansion\s!xml \xmlstartraw \xdef\currentstructuretitle {\structureparameter\c!title}% \xdef\currentstructurebookmark{\structureparameter\c!bookmark}% \xdef\currentstructuremarking {\structureparameter\c!marking}% \xdef\currentstructurelist {\structureparameter\c!list}% \xmlstopraw \ifx\currentstructurelist\empty \globallet\currentstructurelist\currentstructuretitle \fi \globallet\currentstructurecoding\s!xml \else \ifx\currentstructureexpansion\v!yes \xdef\currentstructuretitle {\structureparameter\c!title}% \xdef\currentstructurebookmark{\structureparameter\c!bookmark}% \xdef\currentstructuremarking {\structureparameter\c!marking}% \xdef\currentstructurelist {\structureparameter\c!list}% \else \xdef\currentstructuretitle {\detokenizedstructureparameter\c!title}% \xdef\currentstructurebookmark{\detokenizedstructureparameter\c!bookmark}% \xdef\currentstructuremarking {\detokenizedstructureparameter\c!marking}% \xdef\currentstructurelist {\detokenizedstructureparameter\c!list}% \iflocation \ifx\currentstructurebookmark\empty \begingroup \simplifycommands \xdef\currentstructurebookmark{\detokenize\expandafter{\normalexpanded{\structureparameter\c!title}}}% \endgroup \fi \fi \fi \ifx\currentstructurelist\empty \globallet\currentstructurelist\currentstructuretitle \fi \globallet\currentstructurecoding\s!tex \fi \setnextinternalreference \storeinternalreference\currentstructurename\nextinternalreference % \strc_sectioning_set_reference_prefix \xdef\currentstructurenumber{\ctxlua{ % todo: combine with next call, adapt marks accordingly structures.sections.somelevel { references = { internal = \nextinternalreference, block = "\currentsectionblock", reference = "\currentstructurereference", referenceprefix = "\currentstructurereferenceprefix", backreference = "\currentstructurebackreference", }, directives = { resetset = "\structureparameter\c!sectionresetset", }, metadata = { kind = "section", name = "\currentstructurename", catcodes = \the\ifx\currentstructurecatcodes\empty\catcodetable\else\csname\currentstructurecatcodes\endcsname\fi, coding = "\currentstructurecoding", \ifx\currentstructurecoding\s!xml xmlroot = "\xmldocument", \fi \ifx\currentstructurexmlsetup\empty \else xmlsetup = "\currentstructurexmlsetup", \fi \ifx\currentstructuresaveinlist\v!no nolist = true, \fi \ifx\currentstructureincrementnumber\v!yes increment = "\currentstructureincrementnumber", \fi }, titledata = { % we can add mark and reference label = \!!bs\detokenize\expandafter{\currentstructurelabel }\!!es, title = \!!bs\detokenize\expandafter{\currentstructuretitle }\!!es, \ifx\currentstructurebookmark\currentstructuretitle \else bookmark = \!!bs\detokenize\expandafter{\currentstructurebookmark }\!!es, \fi \ifx\currentstructuremarking\currentstructuretitle \else marking = \!!bs\detokenize\expandafter{\currentstructuremarking }\!!es, \fi \ifx\currentstructuresaveinlist\v!no \else \ifx\currentstructurelist\currentstructuretitle \else list = \!!bs\detokenize\expandafter{\currentstructurelist}\!!es, \fi \fi }, numberdata = { % needed ? block = "\currentsectionblock", hidenumber = \ifx\currentstructureshownumber\v!no true\else nil\fi, % titles % so far separatorset = "\structureparameter\c!sectionseparatorset", conversion = "\structureparameter\c!sectionconversion", % for good old times sake conversionset = "\structureparameter\c!sectionconversionset", starter = \!!bs\structureparameter\c!sectionstarter\!!es, stopper = \!!bs\structureparameter\c!sectionstopper\!!es, set = "\structureparameter\c!sectionset", segments = "\structureparameter\c!sectionsegments", ownnumber = "\currentstructureownnumber", }, userdata = \!!bs\detokenize{#3}\!!es % will be converted to table at the lua end } }}% % \xdef\currentstructurelistnumber{\ctxcommand{addtolist(structures.sections.current())}}% \xdef\currentstructurelistnumber{\ctxcommand{currentsectiontolist()}}% % \currentstructuresynchronize has to be called someplace, since it introduces a node \setstructuresynchronization\currentstructurelistnumber \endgroup} \let\currentstructurenumber \!!zerocount \let\currentsectioncountervalue \!!zerocount % redefined later \let\previoussectioncountervalue\!!zerocount % redefined later % We can access the (stored) data with the following macros. % % \def\MyHeadCommand #1#2{\framed{#1}\framed{#2 / \structureuservariable{subtitle}}} % \def\MyListCommand#1#2#3{\externalfigure[\structurelistuservariable{figure}][height=5mm]#2} % % \setuphead[chapter][command=\MyHeadCommand] % \setuplist[chapter][alternative=command,command=\MyListCommand] % % \starttext % \setupheadertexts[chapter] % \setupinteraction[state=start] % \placebookmarks[chapter] % \placelist[chapter] % \startchapter[ownnumber=10,title=Ton,list=Hans,marking=Kees,bookmark=Bram][figure=cow.pdf,subtitle=oeps] % \stopchapter % \stoptext % todo: #1 => "#1" ... adapt lua code for name and number \def\structurenumber {\ctxcommand{structurenumber()}} \def\structuretitle {\ctxcommand{structuretitle()}} \def\structurevariable #1{\ctxcommand{structurevariable("#1")}} \def\structureuservariable #1{\ctxcommand{structureuservariable("#1")}} \def\structurecatcodedget #1{\ctxcommand{structurecatcodedget("#1")}} % bad name \def\structuregivencatcodedget #1#2{\ctxcommand{structuregivencatcodedget("#1",\number#2)}} % bad name \def\structureautocatcodedget #1#2{\ctxcommand{structureautocatcodedget ("#1","#2")}} \def\namedstructurevariable #1#2{\ctxcommand{namedstructurevariable ("#1","#2")}} \def\namedstructureuservariable#1#2{\ctxcommand{namedstructureuservariable("#1","#2")}} % compatibility issue: % % \def\setfullsectionnumber #1{} % \def\preparefullnumber #1{} % \def\fullsectionnumber {1--1--1} % \def\makesectionnumber [#1]{} % \def\makesectionformat {} % \def\sectionformat {1--1-1-1-1-1-1} % \def\composedsectionnumber{} % \def\@@kolist{} % \setuphead[section] [separator=\separatorlist{?,!,*}] % \setuphead[subsection][separator=\separatorlist{??,!!,**}] % % \let\spr\separatorlist % this will enable this feature % % \setuphead[section] [separator={?,!,*}] % \setuphead[subsection][separator={??,!!,**}] % % \setupheads[separator={A,B,C,D,E,F}] % \chapter{test} % \section{test} \subsection{test} \subsection{test} % \section{test} \subsection{test} \subsection{test} % lua interface / names and interface might change \newconditional\c_strc_rendering_continuous % not used (mkii ?) \def\setstructurelevel #1#2{\ctxlua{structures.sections.setlevel("#1","#2")}} % name, level|parent \def\getstructurelevel #1{\ctxlua{structures.sections.getcurrentlevel("#1")}}% name \def\setstructurenumber #1#2{\ctxlua{structures.sections.setnumber(#1,"#2")}} % level, number (+/-) \def\getstructurenumber #1{\ctxlua{structures.sections.getnumber(#1)}} % level \def\getsomestructurenumber #1#2{\ctxlua{structures.sections.getnumber(#1,"#2")}} % level, what \def\getfullstructurenumber #1{\ctxlua{structures.sections.fullnumber(#1)}} % level \def\getsomefullstructurenumber#1#2{\ctxlua{structures.sections.fullnumber(#1,"#2")}} \def\getspecificstructuretitle #1{\ctxlua{structures.sections.structuredata("#1","titledata.title",nil,"\headparameter\s!catcodes")}}% % will be: % % \def\getfullstructurenumber #1{\ctxcommand{structurenumber(\thenamedheadlevel{#1})}} % structure heads (like \startchapter) % \c!deeptextcommand, \c!deepnumbercommand: undefined ! % \c!before \c!after \c!distance % \c!page \c!header \c!text \c!footer=, % \c!numbercommand \c!textcommand \c!ownnumber \c!number % \c!file \c!grid \c!margintext % \c!expansion \c!xmlsetup \s!catcode \installcorenamespace{head} \installcorenamespace{headlevel} \installcorenamespace{headincrement} \installcorenamespace{headplace} \installcorenamespace{headmarkyes} \installcorenamespace{headmarknop} \installcommandhandler \??head {head} \??head \setuphead [% %\c!after=, %\c!align=, %\c!aligntitle=, \c!alternative=\v!normal, %\c!before=, %\c!color=, %\c!command=, \c!continue=\v!yes, %\c!coupling=, %\c!deepnumbercommand=, %\c!deeptextcommand=, %\c!default=, \c!distance=\zeropoint, \c!textwidth=\zeropoint, % signal too \c!numberwidth=\zeropoint, % signal too \c!width=\zeropoint, % signal too \c!expansion=\v!no, %\c!file=, %\c!footer=, %\c!grid=, \c!hang=\v!none, %\c!header=, \c!incrementnumber=\v!yes, \c!indentnext=\v!no, %\c!label=, %\c!limittext=\languageparameter\c!limittext, \c!margin=\zeropoint, %\c!margintext=, \c!number=\v!yes, \c!numbercolor=\headparameter\c!color, \c!textcolor=\headparameter\c!color, \c!numberstyle=\headparameter\c!style, \c!textstyle=\headparameter\c!style, %\c!numbercommand=, %\c!textcommand=, \c!ownnumber=\v!no, %\c!page=, \c!placehead=\v!yes, \c!sectionconversionset=\s!default, \c!sectionnumber=\v!yes, %\c!sectionsegments=, \c!sectionseparatorset=\s!default, \c!sectionset=\v!all, \c!interlinespace=, %\c!sectionstopper=, %\c!sectionstarter=, %\c!strut=, %\c!style=, %\c!text=, %\c!tolerance=, %\c!beforesection=\directsetup{document:\currenthead:start}, % these might become defaults i.e. acpect document: namespace %\c!insidesection=\directsetup{document:\currenthead:inside}, % these might become defaults i.e. acpect document: namespace %\c!aftersection=\directsetup{document:\currenthead:stop}, % these might become defaults i.e. acpect document: namespace ] \let\setupheads\setuphead % will go \appendtoks \ifx\currentheadparent\empty \edef\currentheaddefault{\headparameter\c!default}% \edef\currentheadsection{\headparameter\c!section}% \ifx\currenthead\currentheaddefault \let\currentheadparent\currentheadsection \else\ifx\currentheaddefault\empty \let\currentheadparent\currentheadsection \else \let\currentheadparent\currentheaddefault \fi\fi \normalexpanded {% \setheadparameter{\c!label}{\currenthead}% \setheadparameter{\c!coupling}{\currenthead}% \setheadparameter{\s!parent}{\??head\currentheadparent}% \definemarking[\currenthead] [\currentheadsection]% \definemarking[\currenthead\v!number][\currentheadsection]% \setupmarking [\currenthead] [\c!filtercommand=\noexpand\sectionheadmarkingtitle {\currenthead}]% \setupmarking [\currenthead\c!number][\c!filtercommand=\noexpand\sectionheadmarkingnumber{\currenthead}]% }% \doifelselist\currenthead\donothing {\definelist[\currenthead][\c!prefix=\v!no]}% \else \normalexpanded {% \setheadparameter{\c!label}{\currenthead}% \setheadparameter{\c!coupling}{\currentheadparent}% \definemarking[\currenthead] [\currentheadparent]% \definemarking[\currenthead\v!number][\currentheadparent\c!number]% }% \doifelselist\currenthead\donothing {\normalexpanded{\definelist[\currenthead][\currentheadparent][\c!prefix=\v!no]}}% \fi \presetlabeltext[\currenthead=]% \the\everysetuphead \to \everydefinehead \appendtoks \setstructurelevel\currenthead{\thenamedheadlevel\currenthead}% \to \everydefinehead \appendtoks % beware, this is a global register \begingroup \edef\currentsectionheadcoupling{\sectionheadcoupling\currenthead}% \edef\currentsectionheadsection {\sectionheadsection \currentsectionheadcoupling}% \edef\currentsectionlevel {\sectionlevel \currentsectionheadsection}% \ctxlua{structures.sections.register("\currenthead",{ coupling = "\currentsectionheadcoupling", section = "\currentsectionheadsection", level = \currentsectionlevel, })}% \endgroup \to \everydefinehead \appendtoks % \setevalue{\e!next \currenthead}{\donexthead [\currenthead]}% \setuevalue{\e!start\currenthead}{\strc_sectioning_start[\currenthead]}% \setuevalue{\e!stop \currenthead}{\strc_sectioning_stop [\currenthead]}% \to \everydefinehead \appendtoks \doifelse{\headparameter\c!ownnumber}\v!yes {\setuevalue\currenthead{\strc_sectioning_handle_own[\currenthead]}} {\setuevalue\currenthead{\strc_sectioning_handle_nop[\currenthead]}}% \to \everysetuphead \let\currentnamedsection\empty \unexpanded\def\startnamedsection {\dotripleempty\strc_sectioning_start_named_section} \unexpanded\def\strc_sectioning_start_named_section[#1]% [#2][#3] {\pushmacro\currentnamedsection \edef\currentnamedsection{#1}% \normalexpanded{\strc_sectioning_start_named_section_indeed[\currentnamedsection]}} % [#2][#3] \unexpanded\def\stopnamedsection {\normalexpanded{\strc_sectioning_stop[\currentnamedsection]}% \popmacro\currentnamedsection} % structure sections (the parents of chapter etc) \let\firstsectionname\empty \let\lastsectionname \empty \let\resetallstructuremarks \relax \let\resetcurrentstructuremarks \relax \let\resetcurrentstructuremarkswithpage\relax \def\resetallstructuremarks {\resetmarking[\firstsectionname]} % will become option (was \v!section-1) \def\resetcurrentstructuremarks {\resetmarking[\lastsectionname]} % will become option %def\resetcurrentstructuremarkswithpage{\resetmarking[\lastsectionname]} % will become option % We could use a commandhandler here but sections are somewhat special in the % sense that we have two ways of chaining: the main section (levels) as well % as rendering (head). % -2 = text % -1 = manual % 0 = block % +1 = structurelevel 1 .. n \newcount\maxstructuredepth \def\sectionlevel#1% {\csname\??headlevel\ifcsname\??headlevel#1\endcsname#1\else\v!none\fi\endcsname} \def\namedsectionlevel#1#2% direct indirect {\csname\??headlevel \ifcsname\??headlevel#1\endcsname #1% \else\ifcsname\??headlevel#2\endcsname #2% \else \v!none \fi\fi \endcsname} \def\xthenamedheadlevel#1% {\namedsectionlevel{#1}{\sectionheadsection{\sectionheadcoupling{#1}}}} \setvalue{\??headlevel\v!block}{0} \setvalue{\??headlevel\v!none }{-1} \setvalue{\??headlevel\v!text }{-2} \setvalue{\??headlevel\v!head }{-3} \newtoks\everydefinesection \unexpanded\def\definesection[#1]% {\ifcsname\??headlevel#1\endcsname \else \edef\currentsection{#1}% not used, will go \edef\currenthead{#1}% \global\advance\maxstructuredepth\plusone \setevalue{\??headlevel#1}{\the\maxstructuredepth}% \setstructurelevel{#1}{\sectionlevel{#1}}% \normalexpanded{\setheadparameter{\s!parent}{\??head\lastsectionname}}% TO BE CHECKED, WE HAVE A HELPER \the\everydefinesection % so far for these default inheritances \definemarking[#1]% \ifnum\maxstructuredepth>\plusone \normalexpanded{\relatemarking[#1][\lastsectionname]}% so, the parent will reset the child \fi \xdef\lastsectionname{#1}% \ifx\firstsectionname\empty \glet\firstsectionname\lastsectionname \fi \fi} \unexpanded\def\setupsection {\dotripleempty\strc_sectioning_setup} \def\strc_sectioning_setup[#1][#2][#3]% {\ifcsname\??headlevel#1\endcsname \strc_sectioning_setup_indeed[#1][#2][#3]% \else \strc_sectioning_setup_indeed[\sectionheadsection{#1}][#2][#3]% \fi} \def\strc_sectioning_setup_indeed[#1][#2][#3]% {\pushmacro\currenthead \ifthirdargument \edef\currenthead{#1#2}% % not used at any more in mkiv (sets now) \setupcurrenthead[#3]% \else \edef\currenthead{#1}% \setupcurrenthead[#2]% \fi \popmacro\currenthead} % we share the parameters as sections are roots of heads so eventually we can % consider \definesection -> \definehead with one argument \appendtoks % This is a rather practical default that we don't want to % be part of the parent chain lookup mechanism; it's also % mkii compatible. Somewhat weird that it's part of the % top level structure but it will be flattened anyway. \let\currenthead\currentsection % \setheadparameter\c!textstyle {\strictheadparameter\c!style}% \setheadparameter\c!textcolor {\strictheadparameter\c!color}% \setheadparameter\c!numberstyle{\strictheadparameter\c!style}% \setheadparameter\c!numbercolor{\strictheadparameter\c!color}% \to \everydefinesection % head -> head \def\sectionheadmarkingtitle #1#2{\ctxlua{structures.marks.title("#1","#2")}} \def\sectionheadmarkingnumber#1#2{\ctxlua{structures.marks.number("#1","#2")}} \def\sectionheadcoupling#1{\namedheadparameter{#1}\c!coupling} \def\sectionheadsection #1{\namedheadparameter{#1}\c!section} % head construction \unexpanded\def\strc_sectioning_handle_own{\dodoubleempty\strc_sectioning_handle_own_indeed} % [ref] {nr} {title} \unexpanded\def\strc_sectioning_handle_nop{\dodoubleempty\strc_sectioning_handle_nop_indeed} % [ref] {title} \unexpanded\def\strc_sectioning_start {\dotripleempty\strc_sectioning_start_named_section_indeed} % [settings] [userdata] !!! also used at lua end \newconditional\currentstructureown \newtoks\everybeforehead % hook, todo: before/after keys \newtoks\everyafterhead % hook, todo: before/after keys \unexpanded\def\strc_sectioning_handle_own_indeed[#1][#2]#3#4% {\settrue\currentstructureown \triggerautostructurelevel \strc_sectioning_handle{#1}{\c!reference={#2},\c!ownnumber={#3},\c!title={#4}}{}} % name ref nr title -- \unexpanded\def\strc_sectioning_handle_nop_indeed[#1][#2]% for taco: [key=value] variant {\setfalse\currentstructureown \triggerautostructurelevel \doifassignmentelse{#2}\strc_sectioning_handle_nop_indeed_yes\strc_sectioning_handle_nop_indeed_nop{#1}{#2}} \unexpanded\def\strc_sectioning_handle_nop_indeed_yes#1#2% {\strc_sectioning_handle{#1}{#2}{}} \unexpanded\def\strc_sectioning_handle_nop_indeed_nop#1#2#3% {\strc_sectioning_handle{#1}{\c!reference={#2},\c!title={#3}}{}} % name ref nr title -- \unexpanded\def\strc_sectioning_start_named_section_indeed[#1][#2][#3]% for the moment no grouping, too annoying with page breaks {\setfalse\currentstructureown %\globalpushmacro\currenthead % this does not work out well \xdef\currenthead{#1}% \setsystemmode\currenthead % new, also here now \headparameter\c!beforesection % beware, no users vars set yet \the\everybeforehead \strc_sectioning_handle{#1}{#2}{#3}% name -- -- -- userdata (we might move the tagged to here) \headparameter\c!insidesection} \unexpanded\def\strc_sectioning_stop[#1]% !!! also used at lua end {\dostoptagged \dostoptagged %\globalpopmacro\currenthead % so we do a hard recover \xdef\currenthead{#1}% recover \headparameter\c!aftersection \the\everyafterhead \resetsystemmode\currenthead} % new, also here now \let\dostarthead\strc_sectioning_start % used at lua end \let\dostophead \strc_sectioning_stop % used at lua end % \newconditional\structurereversesectionnumbers % todo: key/val \newconditional\c_strc_sectioning_to_list \newconditional\c_strc_sectioning_increment \newconditional\c_strc_sectioning_place \newconditional\c_strc_sectioning_empty \newconditional\c_strc_sectioning_hidden \newconditional\headshownumber % public \newconditional\headisdisplay % public \setvalue{\??headincrement\v!yes }{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} \setvalue{\??headincrement\v!no }{\setfalse\c_strc_sectioning_increment\setfalse\c_strc_sectioning_to_list} \setvalue{\??headincrement\v!list }{\setfalse\c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} \setvalue{\??headincrement\s!empty}{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} \unexpanded\def\strc_sectioning_initialize_increment {\edef\currentheadincrement{\headparameter\c!incrementnumber}% \ifcsname\??headincrement\currentheadincrement\endcsname \csname\??headincrement\currentheadincrement\endcsname \else \settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list % \filterheadnumber \fi} \def\filterheadnumber {\settrue\c_strc_sectioning_increment \settrue\c_strc_sectioning_to_list \ifx\currentproduct\empty % todo : filter from other toc (number, file, title) % use : \currentheadincrement as spec \fi} \setvalue{\??headplace\v!yes}% {\setfalse\c_strc_sectioning_empty \settrue \c_strc_sectioning_place \setfalse\c_strc_sectioning_hidden} \setvalue{\??headplace\v!empty}% {\settrue \c_strc_sectioning_empty \settrue \c_strc_sectioning_place \setfalse\c_strc_sectioning_hidden} \setvalue{\??headplace\v!no}% {\settrue \c_strc_sectioning_empty \setfalse\c_strc_sectioning_place \setfalse\c_strc_sectioning_hidden} \setvalue{\??headplace\v!hidden}% {\settrue \c_strc_sectioning_empty \setfalse\c_strc_sectioning_place \settrue \c_strc_sectioning_hidden} \unexpanded\def\strc_sectioning_initialize_placement {\expandnamespaceparameter\??headplace\headparameter\c!placehead\v!yes} \newmode\v!sectionnumber \def\dosettructureheadnumbercontent {\setsystemmode\v!sectionnumber \settrue\headshownumber} % why ? \def\doresettructureheadnumbercontent {\resetsystemmode\v!sectionnumber \setfalse\headshownumber} % why ? \unexpanded\def\strc_sectioning_initialize_number {\edef\p_number{\sectionblockparameter\c!number}% \ifx\p_number\v!yes \edef\p_number{\headparameter\c!number}% \ifx\p_number\v!yes \settrue\headshownumber \else \setfalse\headshownumber \fi \else \setfalse\headshownumber \fi} \unexpanded\def\theheadsynchonization {\currentstructuresynchronize} % BEWARE: \marking[section]{my text} does not work as we use list indices instead % so we need a 'keep track of raw set option' (or maybe a funny internal prefix) \unexpanded\def\setheadmarking % li:: so that we can use \marking[section]{Taco needed this} {\normalexpanded{\setmarking[\currenthead]{li::\currentstructurelistnumber}}} \let\deepstructurenumbercommand\relax \let\deepstructuretitlecommand \relax \unexpanded\def\fullheadnumber {\edef\currentheadlabeltag{\currentsectionblock\c!label}% \dostarttagged\t!sectionnumber\empty \labeltexts {\headparameter\currentheadlabeltag} {\ifx\deepstructurenumbercommand\relax \structurenumber \else \normalexpanded{\noexpand\deepstructurenumbercommand{\structurenumber}}% \fi}% \dostoptagged} \unexpanded\def\fullheadtitle {\dostarttagged\t!sectiontitle\empty \ifx\deepstructuretitlecommand\relax \structuretitle \else \normalexpanded{\noexpand\deepstructuretitlecommand{\structuretitle}}% \fi \dostoptagged} \let\currenthead \empty \let\currentheadcoupling\empty \let\currentheadsection \empty \let\currentheadlevel \!!zerocount \let\currentheadcounter \!!zerocount \unexpanded\def\placeheadtext {\dosingleempty\strc_sectioning_place_head_text } % use with care \unexpanded\def\placeheadnumber{\dosingleempty\strc_sectioning_place_head_number} % use with care \unexpanded\def\strc_sectioning_report{\ctxlua{structures.sections.reportstructure()}} \ifdefined\strc_rendering_initialize_style_and_color \else \unexpanded\def\strc_rendering_initialize_style_and_color#1#2% {\dontconvertfont \useheadstyleandcolor\c!style\c!color \useheadstyleandcolor#1#2% \setupinterlinespace} \fi \def\strc_sectioning_place_head_text[#1]% {\dontleavehmode \begingroup \unexpanded\def\\{\space}% messy here, but the default (and needs to be grouped) \settrue\headisdisplay % triggers interlinespace checking \edef\currenthead{#1}% \strc_rendering_initialize_style_and_color\c!textstyle\c!textcolor \relax \getspecificstructuretitle{\thenamedheadlevel{#1}}% \endgraf \endgroup} \def\strc_sectioning_place_head_number[#1]% {\dontleavehmode \begingroup \settrue\headisdisplay % triggers interlinespace checking \edef\currenthead{#1}% \strc_rendering_initialize_style_and_color\c!numberstyle\c!numbercolor \relax \getfullstructurenumber{\thenamedheadlevel{#1}}% \endgraf \endgroup} \ifdefined\triggerautostructurelevel \else \let\triggerautostructurelevel\relax \fi \def\strc_sectioning_handle#1#2#3% name data userdata (we can move #1 to the caller) {\xdef\currenthead {#1}% \xdef\currentheadcoupling{\sectionheadcoupling\currenthead}% \xdef\currentheadsection {\sectionheadsection \currentheadcoupling}% \xdef\currentheadlevel {\sectionlevel \currentheadsection}% % %\writestatus\m!system{setup: \currenthead,\currentheadcoupling,\currentheadsection,\currentheadlevel}% % \strc_sectioning_initialize_autolevel \strc_sectioning_initialize_increment \strc_sectioning_initialize_placement \strc_sectioning_initialize_number % \flushingcolumnfloatsfalse % % todo: also mark (for header) % % we might remove the lower level % % not here, after optional \page: \strc_sectioning_register{#1}{#2}{#3}% % % \xdef\currentheadcounter{\currentsectioncountervalue}% lua call % % \currentstructuresynchronize % will move % \let\getheadnumber\empty \let\getheadtitle \empty \let\getheadsyncs \empty \ifconditional\c_strc_sectioning_increment \ifconditional\c_strc_sectioning_place \strc_sectioning_before_yes \strc_sectioning_register{#1}{#2}{#3}% after optional \page \strc_sectioning_report \let\getheadsyncs\theheadsynchonization \let\getheadtitle\fullheadtitle \ifconditional\headshownumber \let\getheadnumber\fullheadnumber \strc_rendering_place_head_number_and_text \else \strc_rendering_place_head_text \fi \strc_sectioning_after_yes \else\ifconditional\c_strc_sectioning_hidden \strc_sectioning_register{#1}{#2}{#3}% after optional \page \strc_sectioning_report \let\getheadsyncs\theheadsynchonization \strc_rendering_place_head_hidden % only something when tracing \else \strc_sectioning_before_nop % toegevoegd ivm subpaginanr / tug sheets \strc_sectioning_register{#1}{#2}{#3}% after optional \page \strc_sectioning_report \let\getheadsyncs\theheadsynchonization \strc_rendering_place_head_empty % just flush 'm \strc_sectioning_after_nop \fi\fi \else \ifconditional\c_strc_sectioning_place \strc_sectioning_before_yes \strc_sectioning_register{#1}{#2}{#3}% after optional \page \strc_sectioning_report \let\getheadsyncs\theheadsynchonization \let\getheadtitle\fullheadtitle \strc_rendering_place_head_text \strc_sectioning_after_yes \else\ifconditional\c_strc_sectioning_hidden \strc_sectioning_register{#1}{#2}{#3}% after optional \page \strc_sectioning_report \let\getheadsyncs\theheadsynchonization \strc_rendering_place_head_hidden % only something when tracing \else % do nothing / should be vbox to 0pt \strc_sectioning_before_nop \strc_sectioning_register{#1}{#2}{#3}% after optional \page \strc_sectioning_report \let\getheadsyncs\theheadsynchonization \strc_rendering_place_head_empty % just flush 'm \strc_sectioning_after_nop \fi\fi \fi \flushingcolumnfloatstrue \setfalse\c_strc_sectioniong_ignore_page % ignorespaces prevents spaces creeping in when after=\dontleavehmode \dostarttagged\t!sectioncontent\empty \ifconditional\headisdisplay \ignorespaces \else \expandafter\GotoPar \fi} % typesetting (the getters are public) \unexpanded\def\strc_rendering_place_head_number_and_text {\setheadmarking \getheadnumber/\getheadtitle \getheadsyncs} \unexpanded\def\strc_rendering_place_head_text {\setheadmarking \getheadtitle \getheadsyncs} \unexpanded\def\strc_rendering_place_head_empty {\setheadmarking \getheadsyncs} \installcorenamespace{hiddenheadattr} \installcorenamespace{hiddenheadsync} % todo: when in the page builder we need to resolve the marking immediately % because otherwise we have an async \unexpanded\def\strc_rendering_place_head_hidden % maybe trialtypesetting check {\setxvalue{\??hiddenheadattr\currenthead}% {\headreferenceattributes}% can be used when making a box \setxvalue{\??hiddenheadsync\currenthead}% {\noexpand\letgvalue{\??hiddenheadsync\currenthead}\relax \noexpand\setmarking[\currentheadcoupling]{li::\currentstructurelistnumber}% \hbox\headreferenceattributes{}% otherwise no destination ... maybe tag ref as hidden and fall back on page reference \currentstructuresynchronize}} % and it's a node anyway \def\synchronizehead #1{\csname\??hiddenheadsync#1\endcsname} \def\theheadreferenceattributes#1{\csname\??hiddenheadattr#1\endcsname} \unexpanded\def\placerawheaddata [#1]{\synchronizehead{#1}} \unexpanded\def\placerawheadtext [#1]{\getspecificstructuretitle{\thenamedheadlevel{#1}}} \unexpanded\def\placerawheadnumber[#1]{\getfullstructurenumber{\thenamedheadlevel{#1}}} % \setuphead[chapter][placehead=hidden] % \chapter {test} % % %(\synchronizehead{chapter}) % \getheadsyncs % %(\getfullstructurenumber{\thenamedheadlevel{chapter}}) % %(\getspecificstructuretitle{\thenamedheadlevel{chapter}}) % % (\placerawheaddata [chapter]) % (\placerawheadnumber[chapter]) % (\placerawheadtext [chapter]) % pagebreaks \letvalue{\??headmarknop\v!page }\donothing \setvalue{\??headmarknop\v!reset }{\resetcurrentstructuremarks} \letvalue{\??headmarknop\s!unknown}\donothing \letvalue{\??headmarkyes\v!page }\donothing % to be checked: {\resetcurrentstructuremarks} \setvalue{\??headmarkyes\v!reset }{\resetcurrentstructuremarks} \letvalue{\??headmarkyes\s!unknown}\donothing \def\strc_sectioning_check_layout {\edef\p_page{\headparameter\c!page}% \ifx\p_page\empty \strc_sectioning_check_layout_nop \else \strc_sectioning_check_layout_yes \fi} \def\strc_sectioning_check_layout_nop {\expandnamespaceparameter\??headmarknop\headparameter\c!marking\s!unknown} \def\strc_sectioning_check_layout_yes {\page[\p_page]% \expandnamespaceparameter\??headmarkyes\headparameter\c!marking\s!unknown \edef\p_header{\headparameter\c!header}% \ifx\p_header\empty \else \doifelselayouttextline\v!header{\normalexpanded{\setuplayouttext[\v!header][\c!state=\p_header]}}\donothing \fi \edef\p_text{\headparameter\c!text}% \ifx\p_text\empty \else \doifelselayouttextline\v!text {\normalexpanded{\setuplayouttext[\v!text ][\c!state=\p_text ]}}\donothing \fi \edef\p_footer{\headparameter\c!footer}% \ifx\p_footer\empty \else \doifelselayouttextline\v!footer{\normalexpanded{\setuplayouttext[\v!footer][\c!state=\p_footer]}}\donothing \fi} \newcount \c_strc_sectioniong_preceding_level \c_strc_sectioniong_preceding_level\plusone \newconditional\c_strc_sectioning_auto_break \settrue\c_strc_sectioning_auto_break \newconditional\c_strc_sectioniong_ignore_page \newsignal \s_strc_sectioniong_continuous_signal \unexpanded\def\strc_sectioning_inject_continuous_signal {\ifhmode \hskip\s_strc_sectioniong_continuous_signal\relax \fi} \def\strc_sectioning_before_yes {\strc_sectioning_check_before\strc_sectioning_handle_page_yes \headparameter\c!inbetween \dostarttagged\t!section\currenthead} \def\strc_sectioning_before_nop {\strc_sectioning_check_before\strc_sectioning_handle_page_nop \headparameter\c!inbetween \dostarttagged\currenthead\empty} \def\strc_sectioning_empty_correction {\ifconditional\c_strc_sectioning_empty % this needs checking \penalty\plustenthousand \vskip-\lineheight \kern\zeropoint \prevdepth\strutdepth \fi} \def\strc_sectioning_after_yes {\ifconditional\headisdisplay \ifconditional\c_strc_sectioning_auto_break \vspacing[\v!samepage-\currentheadlevel]% \fi \strc_sectioning_empty_correction \headparameter\c!after \fi} \def\strc_sectioning_after_nop {} \def\strc_sectioning_check_before#1% {\ifhmode \scratchcounter\lastpenalty \unpenalty % no beauty in this \ifdim\lastskip=\s_strc_sectioniong_continuous_signal % no page break \ifconditional\c_strc_sectioniong_ignore_page \setfalse\c_strc_sectioniong_ignore_page \else \global\c_strc_sectioniong_preceding_level\currentheadlevel \nobreak \fi \global\settrue\c_strc_rendering_continuous \else \penalty\scratchcounter \global\setfalse\c_strc_rendering_continuous #1% \fi \else \global\setfalse\c_strc_rendering_continue #1% \fi} \def\currentsectioncountervalue {\ctxlua{structures.sections.depthnumber(\thenamedheadlevel\currenthead)}} \def\previoussectioncountervalue{\ctxlua{structures.sections.depthnumber(\thenamedheadlevel\currenthead-1)}} \def\strc_sectioning_handle_page_nop {\edef\p_continue{\headparameter\c!continue}% \ifx\p_continue\v!yes \ifnum\previoussectioncountervalue=\zerocount \strc_sectioning_check_layout \else\ifnum\currentsectioncountervalue>\zerocount \strc_sectioning_check_layout \fi\fi \else \strc_sectioning_check_layout \fi} \def\strc_sectioning_handle_page_yes {%[[\currenthead @\thenamedheadlevel\currenthead/prev:\previoussectioncountervalue/curr:\currentsectioncountervalue]] \ifconditional\c_strc_sectioniong_ignore_page \setfalse\c_strc_sectioniong_ignore_page \else % beware, these numbers are not yet know here \strc_sectioning_handle_page_nop \edef\p_aligntitle{\headparameter\c!aligntitle}% \ifx\p_aligntitle\v!float \headparameter\c!before\relax \indent \else \page_otr_command_flush_side_floats \headparameter\c!before\relax \fi \global\c_strc_sectioniong_preceding_level\currentheadlevel \fi} \unexpanded\def\strc_sectioning_prevent_page_break#1% see strc-con {\ifconditional\c_strc_sectioning_auto_break \vspacing[\v!samepage-\the\numexpr\currentheadlevel+\ifx#1\empty\plusone\else#1\fi\relax]% \fi} % We do support negative numbers but it can have side effects that we won't catch: % % \chapter{some} \setupheadnumber[chapter][3] \chapter{more} % \setupheadnumber[section][8] \section{b} \section{c} \setupheadnumber[section][-1] \section{d} \def\thenamedheadlevel#1% {\sectionlevel{\sectionheadsection{\sectionheadcoupling{#1}}}} \unexpanded\def\setupheadnumber {\dodoubleargument\strc_sectioning_setup_number} \def\strc_sectioning_setup_number[#1][#2]% todo: reset if at other level {\setstructurenumber{\thenamedheadlevel{#1}}{#2}} \def\currentheadnumber{0} % ==> \currentheadnumber \unexpanded\def\determineheadnumber[#1]% {\xdef\currentheadnumber{\getstructurenumber{\thenamedheadlevel{#1}}}} % The previous macro is been replaced by the expandable: \def\namedheadnumber #1{\getstructurenumber {\thenamedheadlevel{#1}}} \def\somenamedheadnumber#1#2{\getsomestructurenumber{\thenamedheadlevel{#1}}{#2}} \unexpanded\def\headnumber {\dodoubleempty\strc_sectioning_number} \def\strc_sectioning_number[#1][#2]% simple case is just a number {\getsomefullstructurenumber{\iffirstargument\thenamedheadlevel{#1}\fi}{#2}} \unexpanded\def\someheadnumber {\dodoubleempty\strc_sectioning_number_some} \def\strc_sectioning_number_some[#1][#2]% {\dontleavehmode \begingroup \edef\currenthead{#1}% \getsomefullstructurenumber{\thenamedheadlevel{#1}}{#2}% \endgroup} \let\sectioncountervalue\structurevalue \def\currentheadtext{obsolete, use marks} % list references, will be redone in lua when we need it \let\startlistreferences\relax \let\stoplistreferences \relax % experimental \newconditional\c_strc_sectioning_auto_levels \appendtoks \settrue\c_strc_sectioning_auto_levels \to \everyenableelements \unexpanded\def\strc_sectioning_initialize_autolevel {\ifconditional\c_strc_sectioning_auto_levels \ctxcommand{autonextstructurelevel(\number\currentheadlevel)}% \global\setfalse\c_strc_sectioning_auto_levels \fi} \unexpanded\def\triggerautostructurelevel {\global\settrue\c_strc_sectioning_auto_levels} \unexpanded\def\finalizeautostructurelevels {\ctxcommand{autofinishstructurelevels()}} \unexpanded\def\finalizeautostructurelevel {\dostoptagged \dostoptagged} \appendtoks \finalizeautostructurelevels \to \everystoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/back-u3d.mkiv0000644000175000017500000000743512130411274024156 0ustar norbertnorbert%D \module %D [ file=back-u3d, %D version=2009.04.15, %D title=\CONTEXT\ Backend Macros, %D subtitle=U3D Experiment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is only a placeholder that demonstrates the usage of u3d resources. The %D user interface is rather messy an might be improved. The files and setup is %D derived from an example by Michael Vidiassov. \endinput \starttext \startluaparameterset [u3d:myset:controls:1] view = { name = 'default', bg = {1,1,1}, mag = 100, coo = {0,0,0}, c2c = {0,0,1}, rot = {40,0,60}, roo = 6, lights = 'CAD' }, js = 'cloudq.js' \stopluaparameterset \startluaparameterset [u3d:myset:controls:2] views = { { name = 'AnglePositioning', bg = {1,1,1}, azimuth = 45, altitude = 45, roo = 50, aac = 2.5, lights = 'Artwork' }, { name = 'RotationPositioning', bg = {1,1,1}, rot = {0,45,45}, roo = 50, aac = 2.5, lights = 'Artwork' }, { name = 'VectorPositioning', bg = {1,0,0}, c2c = {1,1,math.sqrt(2)}, roo = 50, aac = 2.5, lights = 'CAD' }, { name = 'PositionPositioning', bg = {1,0,0}, pos = {1+25,1+25,1+50/math.sqrt(2)}, aac = 2.5, lights = 'CAD' }, { name = 'ortho', bg = {1,1,1}, mag = 300, lights = 'CAD', crossection = {} } }, view = { name = 'default', bg = {1,1,1}, c2c = {-1,-1,0}, roo = 50, aac = 2.5, roll = 45, lights = 'CAD', crossection = { normal = {-1,-1,-1}, transparent = true }, nodes = { { name = 'xlabel', visible = false }, { name = 'ylabel', opacity = 0.5 }, { name = 'zlabel', rendermode = 'Wireframe' } } } \stopluaparameterset \useexternalfigure [cloudq] [cloudq.u3d] [width=0.7\textwidth, height=.7\textwidth, display=u3d:myset:display:1, controls=u3d:myset:controls:1] \useexternalfigure [axes] [axes.u3d] [width=0.7\textwidth, height=.7\textwidth, controls=u3d:myset:controls:1] \startluaparameterset[u3d:myset:display:2] toolbar = true, preview = 'cloudq.png' \stopluaparameterset \startluaparameterset[u3d:myset:display:3] toolbar = true, tree = false, preview = 'area.png' \stopluaparameterset \startluaparameterset[u3d:myset:display:4] toolbar = true, tree = false, view = { name = 'view', bg = {0.1,0.1,0.1}, c2c = {-1,-1,0}, roo = 50, aac = 2.5, roll = 45, lights = 'Red' } \stopluaparameterset \startluaparameterset[u3d:myset:display:5] toolbar = true, tree = false, view = 'ortho' \stopluaparameterset \placefigure[here]{none}{\externalfigure[cloudq][display=u3d:myset:display:2]} \placefigure[here]{none}{\externalfigure[axes] [display=u3d:myset:display:3]} \placefigure[here]{none}{\externalfigure[axes] [display=u3d:myset:display:4]} \placefigure[here]{none}{\externalfigure[axes] [display=u3d:myset:display:5,width=0.5\textwidth,height=.5\textwidth]} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-fun.mkii0000644000175000017500000005133411754241457024341 0ustar norbertnorbert%D \module %D [ file=supp-fun, %D version=1995.10.10, %D title=\CONTEXT\ Support Macros, %D subtitle=Fun Stuff, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 This module implements some typographics tricks that can %D be fun when designing document layouts. The examples use %D macros that are typical to \CONTEXT, but non \CONTEXT\ %D users can use the drop caps and first line treatment %D macros without problems. This module will be extended %D when the need for more of such tricks arises. \ifx \undefined \writestatus \input supp-mis.tex \relax \fi \writestatus{loading}{ConTeXt Support Macros / Fun Stuff} \ifx\definefont\undefined \def\definedfont[#1]{\font\temp#1\relax\temp} \fi %D \macros %D {DroppedCaps, DroppedString, DroppedIndent, DroppedLines} %D %D \startbuffer %D \DroppedCaps %D {\color[green]} {cmbx12} %D {2.2\baselineskip} {2pt} {\baselineskip} {2} %D Let's start %D \stopbuffer %D %D \getbuffer with dropped caps, those blown up first %D characters of a paragraph. It's hard to implement a general %D mechanism that suits all situations, but dropped caps are so %D seldomly used that we can permit ourselves a rather user %D unfriendly implementation. %D %D \typebuffer %D %D As we will see, there are 7 different settings involved. The %D first argument takes a command that is used to do whatever %D fancy things we want to do, but normally this one will be %D empty. The second argument takes the font. Because we're %D dealing with something very typographic, there is no real %D reason to adopt complicated font switching schemes, a mere %D name will do. Font encodings can bring no harm, because the %D alphanumeric characters are nearly always located at their %D natural position in the encoding vector. %D %D \startbuffer %D \DroppedCaps %D {\color[red]} {cmbx12} %D {\baselineskip} {0pt} {0pt} {1} %D This simple %D \stopbuffer %D %D \getbuffer case shows us what happens when we apply minimal %D values. Here we used: %D %D \typebuffer %D %D \startbuffer %D \DroppedCaps %D {\color[red]} {cmbx12} %D {2\baselineskip} {0pt} {\baselineskip} {2} %D Is this ugly %D \stopbuffer %D %D \getbuffer example the third argument tells %D this macro that we want a dropped capital scaled to the %D baseline distance. The two zero point arguments are the %D horizontal and vertical offsets and the last arguments %D determines the hanging indentation. In this paragraph we %D set the height to two times the baselinedistance and use %D two hanging lines: %D %D \typebuffer %D %D Here, the first character is moved down one baseline. Here %D we also see why the horizontal offset is important. The %D first example (showing the~L) sets this to a few points and %D also used a slightly larger height. %D %D Of course common users (typist) are not supposed to see this %D kind of fuzzy definitions, but fortunately \TEX\ permits us %D to hide them in macros. Using a macro also enables us to %D garantee consistency throughout the document: %D %D \startbuffer %D \def\MyDroppedCaps% %D {\DroppedCaps %D {\color[green]} {cmbx12} %D {5\baselineskip} {3pt} {3\baselineskip} {4}} %D %D \MyDroppedCaps The implementation %D \stopbuffer %D %D \typebuffer %D %D \getbuffer of the general macro is rather simple and only %D depends on the arguments given and the dimensions of the %D strut box. We explicitly load the font, which is no problem %D because \TEX\ does not load a font twice. We could have %D combined some arguments, like the height, vertical offset %D and the number of lines, but the current implementation %D proved to be the most flexible. One should be aware of the %D fact that the offsets depend on the design of the glyphs %D used. \let\DroppedIndent\!!zeropoint \def\DroppedLines{0} \def\DroppedString{ABCDEFGHIJKLMNOPQRSTUVWXYZ} \let\globaldropcaps\global % will be an option, but on by default \def\localdropcaps{\let\globaldropcaps\relax} \chardef\DroppedStatus = 0 % 0=done 1=starting 2=doing 3=error \chardef\DropMode = 0 % 1 == marginhang \ifx\keeplinestogether\undefined \let\keeplinestogether\gobbleoneargument \fi \def\DroppedCaps#1#2#3#4#5#6#7% does not yet handle accented chars {\defconvertedargument\asciia{#7}% \defconvertedcommand \asciib{\DroppedString}% \ExpandBothAfter\doifinstringelse\asciia\asciib {\noindentation \dontleavehmode \checkindentation % redo this one %\ifhmode\hskip-\parindent\fi % sensitive for context mechanism \keeplinestogether{#6}% \setbox0\hbox{\definedfont[#2 at #3]#1{#7}\hskip#4}% \ifdim\dp0>\strutdp % one of those Q's , will be option \setbox2\hbox{\raise\dp0\hbox{\lower\strutdp\copy0}}% \ht2\ht0 \dp0\strutdp \setbox0\box2 \fi \setbox0\hbox {\ifnum\DropMode=\plusone \hskip-\wd0\wd0\zeropoint \fi \lower#5\box0}% \ht0\strutht \dp0\strutdp \ifnum\DropMode=\plusone \globaldropcaps\let\DroppedIndent\!!zeropoint \globaldropcaps\edef\DroppedLines{\number\maxdimen}% \globaldropcaps\chardef\DroppedStatus\plusthree \else \globaldropcaps\edef\DroppedIndent{\the\wd0}% \globaldropcaps\edef\DroppedLines {\number#6}% \globaldropcaps\chardef\DroppedStatus\plustwo \globaldropcaps\hangindent\DroppedIndent \globaldropcaps\hangafter-\DroppedLines % \noindent \noindentation \checkindentation % redo this one \hskip-\DroppedIndent \fi \vbox{\forgetall\box0}% \nobreak \let\next\ignorespaces} % Could be a one character word ! {\globaldropcaps\let\DroppedIndent\!!zeropoint \globaldropcaps\edef\DroppedLines{\number\maxdimen}% \globaldropcaps\chardef\DroppedStatus\plusthree \def\next{#7}}% \let\globaldropcaps\global \next} %D Before we go to the next topic, we summarize this command: %D %D \starttyping %D \DroppedCaps %D {command} {font} %D {height} {hoffset} {voffset} {lines} %D \stoptyping %D %D Sometimes you need to make sure that the global settings are %D kept local, as in: %D % %D \startbuffer % %D \defineparagraphs[SomePar][n=2,rule=on] % %D \setupparagraphs [SomePar][1][width=.5\textwidth] % %D \setupparagraphs [SomePar][2][width=.5\textwidth] %D \startbuffer %D \defineparagraphs[SomePar][n=2,rule=on] %D \setupparagraphs [SomePar][1][width=.5\textwidth] %D \setupparagraphs [SomePar][2][width=.5\textwidth] %D %D \startSomePar %D \localdropcaps\NiceDroppedCaps{}{cmr12}{0pt}{2}Here we need %D to explicitly keep the hanging indentation local, like it or %D not. %D \SomePar %D \localdropcaps\NiceDroppedCaps{}{cmr12}{0pt}{2}Here we need %D to explicitly keep the hanging indentation local, like it or %D not. %D \stopSomePar %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {AutoDroppedCaps, CheckDroppedCaps} %D %D {\em To be documented.} % example usage % % \def\bpar{\ifvmode\CheckDroppedCaps\fi} % \def\epar{\ifhmode\par\fi\CheckDroppedCaps} \newcount\lastprevgraf \newcount\droppedlines \def\CheckDroppedCaps {\global\lastprevgraf\prevgraf} \def\AutoDroppedCaps % will be proper core stuff since it {\globaldropcaps\chardef\DroppedStatus\plusone \global\lastprevgraf\zerocount \global\droppedlines\zerocount \EveryPar{\doAutoDroppedCaps}} \let\AutoDroppedNext\relax \ifx\AutoDroppedCapsCommand\undefined \def\AutoDroppedCapsCommand{\NiceDroppedCaps{}{SerifBold}{.125em}{3}} \fi \def\doAutoDroppedCaps {\ifcase\DroppedStatus % done \let\next\relax \or % starting % \ifnum\lastprevgraf>0 % tricky, probably a wrong par % \globaldropcaps\chardef\DroppedStatus=3 % and inhibits dropped % \let\next\relax % caps after titles and more than once % \else % so let's nill this rubishly code fragment \let\next\AutoDroppedCapsCommand % \fi % and hope for the best \or % doing \global\advance\droppedlines \lastprevgraf \ifnum\droppedlines=\zerocount \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \else\ifnum\droppedlines>\zerocount \ifnum\droppedlines<\DroppedLines\relax \globaldropcaps\hangindent\DroppedIndent \globaldropcaps\hangafter-\DroppedLines \globaldropcaps\advance\hangafter \droppedlines \hskip-\parindent % brrr \let\next\AutoDroppedNext \else \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \fi \else \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \fi\fi \or % error \globaldropcaps\chardef\DroppedStatus\zerocount \let\next\relax \fi \next} %D \macros %D {LineDroppedCaps, NiceDroppedCaps} %D %D To save definitions, we also provide: %D %D \starttyping %D \LineDroppedCaps {command} {font} {hoffset} {lines} %D \NiceDroppedCaps {command} {font} {hoffset} {lines} %D \stoptyping %D %D The first command scales the font to the exact height, while %D the second command scales the font to a nice 2.5 times the %D line height, a value that gives a pleasant grayness. \def\DoLineDroppedCaps#1#2#3#4#5% compensation command font offset lines {\scratchcounter#5% \advance\scratchcounter \minusone \scratchdimen\scratchcounter\baselineskip \advance\scratchdimen #1% \NormalizeFontHeight\DummyFont{W}\scratchdimen{#3}% \DroppedCaps{#2}{#3}\TheNormalizedFontSize{#4} {\scratchcounter\baselineskip}{#5}} \def\LineDroppedCaps% command font offset lines {\DoLineDroppedCaps{\strutht}} \def\NiceDroppedCaps% command font offset lines {\DoLineDroppedCaps{.5\baselineskip}} %D \macros %D {TreatFirstLine} %D %D \startbuffer %D \TreatFirstLine {\sc} {} {} {} %D Instead of limiting its action to one token, the next macro %D treats the whole first line. This paragraph was typeset by %D saying: %D \stopbuffer %D %D \getbuffer %D %D \typebuffer %D %D \startbuffer %D \TreatFirstLine {\startcolor[red]\bf} {\stopcolor} {} {} %D The combined color and font effect is also possible, %D although one must be careful in using macros that accumulate %D grouping, but the commands used here are pretty save in that %D respect. %D \stopbuffer %D %D \getbuffer %D %D \typebuffer %D %D Before we explain the third and fourth argument, we show the %D implementation. Those who know a bit about the way \TEX\ %D treats tokens, will probably see in one glance that this %D alternative works all right for most text||only situations %D in which there is enough text available for the first line, %D but that more complicated things will blow. One has to live %D with that. A workaround is rather trivial but obscures the %D principles used. \def\TreatFirstLine#1#2#3#4% before, after, first, next {\leavevmode \bgroup \forgetall \bgroup #1% \setbox0\emptybox \setbox2\emptybox \def\grabfirstline##1 % {\setbox2\hbox {\ifvoid0 {#3{\ignorespaces##1}}% \else \unhcopy0\ {#4{##1}}% \fi}% \ifdim\wd2=\zeropoint \setbox0\emptybox \setbox2\emptybox \@EA\grabfirstline \else\ifdim\wd2>\hsize \hbox to \hsize{\strut\unhbox0}#2\egroup \break##1\ \egroup \else \setbox0\box2 \@EAEAEA\grabfirstline \fi\fi}% \grabfirstline} %D \startbuffer %D \gdef\FunnyCommand %D {\getrandomfloat\FunnyR{0}{1}% %D \getrandomfloat\FunnyG{0}{1}% %D \getrandomfloat\FunnyB{0}{1}% %D \definecolor[FunnyColor][r=\FunnyR,g=\FunnyG,b=\FunnyB]% %D \color[FunnyColor]} %D %D %\TreatFirstLine {\bf} {} {\FunnyCommand} {\FunnyCommand} %D The third and fourth argument can be used to gain special %D effects on the individual words. Of course one needs ... %D \stopbuffer %D %D \getbuffer %D to know a bit more about the macro package used to get real %D nice effects, but this example probably demonstrates the %D principles well. %D %D \typebuffer %D %D Like in dropped caps case, one can hide such treatments in a %D macro, like: %D %D \starttyping %D \def\MyTreatFirstLine% %D {\TreatFirstLine{\bf}{}{\FunnyCommand}{\FunnyCommand}} %D \stoptyping %D \macros %D {reshapebox} %D %D \startbuffer %D \beginofshapebox %D When using \CONTEXT, one can also apply this funny command %D to whole lines by using the reshape mechanism. Describing %D this interesting mechanism falls outside the scope of this %D module, so we only show the trick. This is an example of %D low level \CONTEXT\ functionality: it's all there, and it's %D stable, but not entirely meant for novice users. %D \endofshapebox %D %D \reshapebox{\FunnyCommand{\box\shapebox}} \flushshapebox %D \stopbuffer %D %D \getbuffer %D %D \typebuffer %D %D This mechanism permits hyphenation and therefore gives %D better results than the previously discussed macro %D \type{\TreatFirstLine}. %D \macros %D {TreatFirstCharacter} %D %D \startbuffer %D \TreatFirstCharacter{\bf\color[green]} Just to be %D \stopbuffer %D %D \getbuffer complete we also offer a very simple one %D character alternative, that is not that hard to understand: \def\TreatFirstCharacter#1#2% command, character {{#1{#2}}} %D A previous paragraph started with: %D %D \typebuffer %D \macros %D {StackCharacters} %D %D The next hack deals with vertical stacking. \def\StackCharacters#1#2#3#4% sequence vsize vskip command {\vbox #2 {\forgetall \baselineskip\zeropoint \def\StackCharacter##1{#4{##1}\cr\noalign{#3}}% \halign {\hss##\hss&##\cr \handletokens#1\with\StackCharacter\cr}}} %D \startbuffer %D \StackCharacters{CONTEXT}{}{\vskip.2ex}{\FunnyCommand} %D \stopbuffer %D %D Such a stack looks like: %D %D \startlinecorrection %D \hbox to \hsize %D {$\hss\bfd %D \vcenter{\StackCharacters{TEX} {}{\vskip.2ex}{\FunnyCommand}}% %D \hss %D \vcenter{\StackCharacters{CON} {}{\vskip.2ex}{\FunnyCommand}} %D \hss %D \vcenter{\StackCharacters{TEXT} {}{\vskip.2ex}{\FunnyCommand}} %D \hss %D \vcenter{\StackCharacters{CONTEXT}{}{\vskip.2ex}{\FunnyCommand}} %D \hss$} %D \stoplinecorrection %D %D and is typeset by saying: %D %D \typebuffer %D %D An alternative would have been %D %D \starttyping %D \StackCharacters {CONTEXT} {to 5cm} {\vfill} {\FunnyCommand} %D \stoptyping %D \macros %D {processtokens} %D %D At a lower level horizontal and vertical manipulations are %D already supported by: %D %D \starttyping %D \processtokens {begin} {between} {end} {space} {text} %D \stoptyping %D %D \startbuffer[a] %D \processtokens %D {\hbox to .5\hsize\bgroup} {\hfill} %D {\egroup} {\space} {LET'S HAVE} %D \stopbuffer %D %D \startbuffer[b] %D \processtokens %D {\vbox\bgroup\raggedcenter\hsize1em} %D {\vskip.25ex} {\egroup} {\strut} {FUN} %D \stopbuffer %D %D This macro is able to typeset: %D %D \leavevmode\hbox to \hsize %D {$\hfil\hfil %D \vcenter{\bf\getbuffer[a]}% %D \hfil %D \vcenter{\bfd\getbuffer[b]}% %D \hfil\hfil$} %D %D which was specified as: %D %D \typebuffer[a] %D \typebuffer[b] %D \macros %D {NormalizeFontHeight, NormalizeFontWidth, %D TheNormalizedFontSize} %D %D Next we introduce some font manipulation macros. When we %D want to typeset some text spread in a well defined area, it %D can be considered bad practice to manipulate character and %D word spacing. In such situations the next few macros can be %D of help: %D %D \starttyping %D \NormalizeFontHeight \name {sample text} {height} {font} %D \NormalizeFontWidth \name {sample text} {width} {font} %D \stoptyping %D %D These are implemented using an auxilliary macro: \def\NormalizeFontHeight{\NormalizeFontSize\ht} \def\NormalizeFontWidth {\NormalizeFontSize\wd} % \def\NormalizeFontSize#1#2#3#4#5% % {\bgroup % \dimen0=#4% #4 can be \ht0 or so % \setbox0\hbox{\definedfont[#5 at 10pt]#3}% % \ifdim\wd0>\zeropoint % \dimen2=#10 % #1 is \wd or \ht % \dimen4=10000pt % \divide\dimen4 \dimen2 % \divide\dimen0 \plusthousand % \dimen0=\number\dimen4\dimen0 % \xdef\TheNormalizedFontSize{\the\dimen0}% % \else % \dimen0\bodyfontsize % \fi % \definedfont[#5 at \the\dimen0]% % \expandafter % \egroup % \expandafter\font\expandafter#2\fontname\font\relax} % % the familiar struggle with accuracy forces us to use: \def\NormalizeFontSize#1#2#3#4#5% {\bgroup \dimen0=#4% #4 can be \ht0 or so \setbox0\hbox{\definedfont[#5 at 5pt]#3}% 10pt \ifdim\wd0>\zeropoint \dimen2=#10 % #1 is \wd or \ht \dimen4=\maxdimen % 10000pt \divide\dimen4 \dimen2 \divide\dimen0 1638 % 1000 \dimen0=\number\dimen4\dimen0 \divide \dimen0 \plustwo % ... \xdef\TheNormalizedFontSize{\the\dimen0}% \else \dimen0\bodyfontsize \fi % mkii % \definedfont[#5 at \the\dimen0]% % \expandafter % \egroup % \expandafter\font\expandafter#2\fontname\font\relax} % mkiv safe (file: prefix etc) \expanded{\egroup\def\noexpand#2{\definedfont[#5 at \the\dimen0]}}} %D Afterwards, we have access to the calculated size by: \let\TheNormalizedFontSize\!!zeropoint %D Extra: \def\WidthSpanningText#1#2#3% text width font {\hbox{\NormalizeFontWidth\temp{#1}{#2}{#3}\temp\the\everydefinedfont#1}} %D Consider for instance: %D %D \startbuffer %D \NormalizeFontHeight \tmp {X} {2\baselineskip} {cmr10} %D %D {\tmp To Be Or Not To Be} %D \stopbuffer %D %D \typebuffer %D %D This shows up as (we also show the baselines): %D %D {\showbaselines\getbuffer} %D %D The horizontal counterpart is: %D %D \startbuffer %D \NormalizeFontWidth \tmp {This Line Fits} {\hsize} {cmr10} %D %D \hbox{\tmp This Line Fits} %D \stopbuffer %D %D \typebuffer %D %D The calculated font scale is avaliable in the macro %D \type{\NormalizedFontSize}. %D %D \startlinecorrection %D \ruledhbox{\getbuffer} %D \stoplinecorrection %D %D One can of course combine these macros with the ones %D described earlier, like in: %D %D \starttyping %D \NormalizeFontHeight {text} \DroppedFont {2\baselineskip} {cmbx12} %D %D \def\NicelyDroppedCaps %D {\DroppedCaps %D {\color[green]} %D {\DroppedFont} %D {2pt} %D {\baselineskip} %D {2}} %D \stoptyping %D %D It's up to the reader to test this one. \unexpanded\def\FirstNCharacters#1#2% \FirstNCharacters{3}{fr{\"o}beln} {\bgroup \scratchcounter\zerocount \def\docommand##1% {\ifnum\scratchcounter=#1\else ##1\relax % catches ##1 = \"e and alike \advance\scratchcounter\plusone \fi} \handletokens#2\with\docommand \egroup} %D \macros %D {FittingText} %D %D First used in Pascal (demo-bbv): %D %D \startbuffer %D \ruledvbox{\FittingText{3cm}{1cm}{Serif}{24pt}{1pt}{1} %D {\veryraggedright %D \hangindent1em\hangafter1\relax %D \begstrut \dorecurse{8}{Bram Marta }\unskip \endstrut}} %D %D \ruledvbox{\FittingText{3cm}{1cm}{Serif}{24pt}{1pt}{1} %D {\raggedleft\begstrut Bram\\Marta \unskip\endstrut}} %D \stopbuffer %D %D \typebuffer %D %D \startlinecorrection %D \getbuffer %D \stoplinecorrection % #1 width #2 height #3 font #4 size #5 step #6 interlinie #7 text \long\def\FittingText#1#2#3#4#5#6#7% {\bgroup \forgetall \dontcomplain \setuptolerance[\v!verytolerant]% == \tolerance4500 \hsize#1% \def\\{\softbreak}% \!!heighta#4% \!!heightb#2% \doloop {\ifdim\!!heighta>\onepoint \expanded{\definefont[\s!dummy][#3 at \the\!!heighta][\c!interlinespace=#6]}% \getvalue\s!dummy \setbox\scratchbox\vbox{#7\endgraf}% \ifdim\ht\scratchbox>\!!heightb \advance\!!heighta-#5% \else \beginshapebox \unvcopy\scratchbox \endshapebox \global\dimen1\hsize \reshapebox {\setbox\shapebox\hbox{\unhbox\shapebox}% \ifdim\wd\shapebox>\dimen1 \global\dimen1\wd\shapebox \fi}% \ifdim\dimen1>\hsize \advance\!!heighta-#5% \else \exitloop \fi \fi \else \exitloop \fi}% %\writestatus{\strippedcsname\FittingText}{height: \the\!!heighta}% \unvbox\scratchbox \egroup} %D New: % \font width gap font spec text \def\NormalizeFontWidthSpread#1#2#3#4#5#6% {\global\setfalse\NFSpread \scratchdimen#3% \scratchdimen-.5\scratchdimen \advance\scratchdimen#2\relax \NormalizeFontWidth #1% {\def\+{\global\settrue\NFSpread\gobbleuntil\relax}% \def\\{\gobbleuntil\relax}% newline \setupspacing #6\relax}% {\scratchdimen}% {#4}% \ifconditional\NFSpread % de gap valt in de binding \else \definefont[\strippedcsname#1][#4 #5]% \fi} \def\SpreadGapText#1#2% {{\def\+{\kern#1}#2}} \def\GapText#1#2#3#4#5% width distance font spec title {\bgroup \NormalizeFontWidthSpread\DummyFont{#1}{#2}{#3}{#4}{#5}% \DummyFont\setupspacing\SpreadGapText{#2}{#5}\endgraf \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-spa.mkii0000644000175000017500000000503111754241457024257 0ustar norbertnorbert%D \module %D [ file=lang-spa, %D version=2002.04.17, %D title=\CONTEXT\ Language Macros, %D subtitle=Spacing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Spacing} %D This module was created in the process of enhancing %D support for French (with the help of Daniel Flipo). \unprotect \definehspace [\s!fr] [quotation] [\flexiblespaceamount{.8}{.3}{.8}] \definehspace [\s!fr] [sentence] [\fixedspaceamount{1}] %definehspace [\s!fr] [quote] [\flexiblespaceamount{.8}{.3}{.8}] %definehspace [\s!fr] [speech] [\flexiblespaceamount{.8}{.3}{.8}] \definehspace [\s!fr] [interquotation] [\zeropoint] \definehspace [\s!fr] [intersentence] [\zeropoint] \definehspace [\string :] [\zeropoint] \definehspace [\string ;] [\zeropoint] \definehspace [\string !] [\zeropoint] \definehspace [\string ?] [\zeropoint] \definehspace [\s!fr] [\string :] [\spaceamount] \definehspace [\s!fr] [\string ;] [.16667em] \definehspace [\s!fr] [\string !] [.16667em] \definehspace [\s!fr] [\string ?] [.16667em] %D Alternative discretionary handlers: \definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{:}:} \definetextmodediscretionary ; {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{;};} \definetextmodediscretionary ? {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{?}?} \definetextmodediscretionary ! {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentlanguage{!}!} %D \startbuffer %D \mainlanguage[en] \quotation{test \quotation{test} test}\par %D \mainlanguage[nl] \quotation{test \quotation{test} test}\par %D \mainlanguage[fr] \quotation{test \quotation{test} test}\par %D %D \mainlanguage[en] \quotation{\quotation{test} test}\par %D \mainlanguage[nl] \quotation{\quotation{test} test}\par %D \mainlanguage[fr] \quotation{\quotation{test} test}\par %D %D \mainlanguage[en] |<|test |<|test|>| test|>| \par %D \mainlanguage[nl] |<|test |<|test|>| test|>| \par %D \mainlanguage[fr] |<|test |<|test|>| test|>| \par %D %D \mainlanguage[en] |<||<|test|>| test|>| \par %D \mainlanguage[nl] |<||<|test|>| test|>| \par %D \mainlanguage[fr] |<||<|test|>| test|>| \par %D \stopbuffer %D %D \typebuffer {\getbuffer} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-box.lua0000644000175000017500000000630212130411274024145 0ustar norbertnorbertif not modules then modules = { } end modules ['supp-box'] = { version = 1.001, comment = "companion to supp-box.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this is preliminary code local report_hyphenation = logs.reporter("languages","hyphenation") local tex, node = tex, node local context, commands, nodes = context, commands, nodes local nodecodes = nodes.nodecodes local disc_code = nodecodes.disc local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue local glyph_code = nodecodes.glyph local new_penalty = nodes.pool.penalty local free_node = node.free local copynodelist = node.copy_list local copynode = node.copy local texbox = tex.box local function hyphenatedlist(list) while list do local id, next, prev = list.id, list.next, list.prev if id == disc_code then local hyphen = list.pre if hyphen then local penalty = new_penalty(-500) hyphen.next, penalty.prev = penalty, hyphen prev.next, next.prev = hyphen, penalty penalty.next, hyphen.prev = next, prev list.pre = nil free_node(list) end elseif id == vlist_code or id == hlist_code then hyphenatedlist(list.list) end list = next end end commands.hyphenatedlist = hyphenatedlist function commands.showhyphenatedinlist(list) report_hyphenation("show: %s",nodes.listtoutf(list,false,true)) end local function checkedlist(list) if type(list) == "number" then return texbox[list].list else return list end end local function applytochars(list,what,nested) local doaction = context[what or "ruledhbox"] local noaction = context local current = checkedlist(list) while current do local id = current.id if nested and (id == hlist_code or id == vlist_code) then context.beginhbox() applytochars(current.list,what,nested) context.endhbox() elseif id ~= glyph_code then noaction(copynode(current)) else doaction(copynode(current)) end current = current.next end end local function applytowords(list,what,nested) local doaction = context[what or "ruledhbox"] local noaction = context local current = checkedlist(list) local start while current do local id = current.id if id == glue_code then if start then doaction(copynodelist(start,current)) start = nil end noaction(copynode(current)) elseif nested and (id == hlist_code or id == vlist_code) then context.beginhbox() applytowords(current.list,what,nested) context.egroup() elseif not start then start = current end current = current.next end if start then doaction(copynodelist(start)) end end commands.applytochars = applytochars commands.applytowords = applytowords context-2013.05.28.20130704/texmf-dist/tex/context/base/phys-dim.lua0000644000175000017500000010315212130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['phys-dim'] = { version = 1.001, comment = "companion to phys-dim.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is pretty old code that I found back, but let's give it a try -- in practice. It started out as m-units.lua but as we want to keep that -- module around we moved the code to the dimensions module. -- -- todo: maybe also an sciunit command that converts to si units (1 inch -> 0.0254 m) -- etc .. typical something to do when listening to a news whow or b-movie -- -- todo: collect used units for logging (and list of units, but then we need -- associations too). -- The lists have been checked and completed by Robin Kirkham. -- dubious/wrong -- Atom = [[u]], -- should be amu (atomic mass unit) -- Bell = [[B]], -- should be bel -- Sterant = [[sr]], -- should be steradian -- Equivalent = [[eql]], -- qualifier? -- At = [[at]], -- qualifier? -- Force = [[f]], -- qualifier? -- eVolt = [[eV]], -- -- AC or DC voltages should be qualified in the text -- VoltAC = [[V\unitsbackspace\unitslower{ac}]], -- VoltDC = [[V\unitsbackspace\unitslower{dc}]], -- AC = [[V\unitsbackspace\unitslower{ac}]], -- DC = [[V\unitsbackspace\unitslower{dc}]], -- -- probably not harmful but there are better alternatives -- -- e.g., revolution per second (rev/s) -- RPS = [[RPS]], -- RPM = [[RPM]], -- RevPerSec = [[RPS]], -- RevPerMin = [[RPM]], local V, P, S, R, C, Cc, Cs, matchlpeg = lpeg.V, lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.match local format, lower = string.format, string.lower local appendlpeg = lpeg.append local mergetable, mergedtable, keys, loweredkeys = table.merge, table.merged, table.keys, table.loweredkeys local setmetatablenewindex = table.setmetatablenewindex local utfchar = utf.char physics = physics or { } physics.units = physics.units or { } local variables = interfaces.variables local v_reverse = variables.reverse local allocate = utilities.storage.allocate local trace_units = false local report_units = logs.reporter("units") trackers.register("physics.units", function(v) trace_units = v end) -- digits parser (todo : use patterns) local math_one = Cs((P("$") /"") * (1-P("$"))^1 * (P("$")/"")) / context.m local math_two = Cs((P("\\m {")/"") * (1-P("}"))^1 * (P("}")/"")) / context.m -- watch the space after \m local digit = R("09") local sign = S("+-") local power = S("^e") local digitspace = S("~@_") local comma = P(",") local period = P(".") local semicolon = P(";") local colon = P(":") local signspace = P("/") local positive = P("++") -- was p local negative = P("--") -- was n local highspace = P("//") -- was s local padding = P("=") local plus = P("+") local minus = P("-") local space = P(" ") local lparent = P("(") local rparent = P(")") local lbrace = P("{") local rbrace = P("}") local digits = digit^1 local powerdigits = plus * C(digits) / context.digitspowerplus + minus * C(digits) / context.digitspowerminus + C(digits) / context.digitspower local ddigitspace = digitspace / "" / context.digitsspace local ddigit = digits / context.digitsdigit local dsemicomma = semicolon / "" / context.digitsseparatorspace local dsemiperiod = colon / "" / context.digitsseparatorspace local dfinalcomma = comma / "" / context.digitsfinalcomma local dfinalperiod = period / "" / context.digitsfinalperiod local dintercomma = comma / "" / context.digitsintermediatecomma local dinterperiod = period / "" / context.digitsintermediateperiod local dskipcomma = comma / "" / context.digitsseparatorspace local dskipperiod = period / "" / context.digitsseparatorspace local dsignspace = signspace / "" / context.digitssignspace local dpositive = positive / "" / context.digitspositive local dnegative = negative / "" / context.digitsnegative local dhighspace = highspace / "" / context.digitshighspace local dsomesign = plus / "" / context.digitsplus + minus / "" / context.digitsminus local dpower = power / "" * ( powerdigits + lbrace * powerdigits * rbrace ) local dpadding = padding / "" / context.digitszeropadding -- todo local dleader = (dpositive + dnegative + dhighspace + dsomesign + dsignspace)^0 local dtrailer = dpower^0 local dfinal = P(-1) + #P(1 - comma - period - semicolon - colon) local dnumber = (ddigitspace + ddigit)^1 -- ___,000,000 ___,___,000 ___,___,__0 000,000,000 000.00 000,000,000.00 000,000,000.== -- : ; for the moment not used, maybe for invisible fraction . , when no leading number -- local c_p = (ddigitspace^1 * dskipcomma)^0 -- ___, -- * (ddigitspace^0 * ddigit * dintercomma)^0 -- _00, 000, -- * ddigitspace^0 * ddigit^0 -- _00 000 -- * ( -- dfinalperiod * ddigit -- .00 -- + dskipperiod * dpadding^1 -- .== -- + dsemiperiod * ddigit -- :00 -- + dsemiperiod * dpadding^1 -- :== -- )^0 -- + ddigit -- 00 -- -- local p_c = (ddigitspace^1 * dskipperiod)^0 -- ___. -- * (ddigitspace^0 * ddigit * dinterperiod)^0 -- _00. 000. -- * ddigitspace^0 * ddigit^0 -- _00 000 -- * ( -- dfinalcomma * ddigit -- ,00 -- + dskipcomma * dpadding^1 -- ,== -- + dsemicomma * ddigit -- :00 -- + dsemicomma * dpadding^1 -- :== -- )^0 -- + ddigit -- 00 -- -- fix by WS/SB (needs further testing) local c_p = (ddigitspace^1 * dskipcomma)^0 -- ___, * (ddigitspace^0 * ddigit * dintercomma)^0 -- _00, 000, * ddigitspace^0 * ddigit^0 -- _00 000 * ( dfinalperiod * ddigit * (dintercomma * ddigit)^0 -- .00 + dskipperiod * dpadding^1 -- .== + dsemiperiod * ddigit * (dintercomma * ddigit)^0 -- :00 + dsemiperiod * dpadding^1 -- :== )^0 + ddigit -- 00 local p_c = (ddigitspace^1 * dskipperiod)^0 -- ___. * (ddigitspace^0 * ddigit * dinterperiod)^0 -- _00. 000. * ddigitspace^0 * ddigit^0 -- _00 000 * ( dfinalcomma * ddigit * (dinterperiod * ddigit)^0 -- 00 + dskipcomma * dpadding^1 -- ,== + dsemicomma * ddigit * (dinterperiod * ddigit)^0 -- :00 + dsemicomma * dpadding^1 -- :== )^0 + ddigit -- 00 local p_c_dparser = math_one + math_two + dleader * p_c * dtrailer * dfinal local c_p_dparser = math_one + math_two + dleader * c_p * dtrailer * dfinal function commands.digits(str,p_c) if p_c == v_reverse then matchlpeg(p_c_dparser,str) else matchlpeg(c_p_dparser,str) end end -- tables: local long_prefixes = { -- Le Système international d'unités (SI) 8e édition (Table 5) Yocto = "yocto", -- 10^{-24} Zepto = "zepto", -- 10^{-21} Atto = "atto", -- 10^{-18} Femto = "femto", -- 10^{-15} Pico = "pico", -- 10^{-12} Nano = "nano", -- 10^{-9} Micro = "micro", -- 10^{-6} Milli = "milli", -- 10^{-3} Centi = "centi", -- 10^{-2} Deci = "deci", -- 10^{-1} Deca = "deca", -- 10^{1} Hecto = "hecto", -- 10^{2} Kilo = "kilo", -- 10^{3} Mega = "mega", -- 10^{6} Giga = "giga", -- 10^{9} Tera = "tera", -- 10^{12} Peta = "peta", -- 10^{15} Exa = "exa", -- 10^{18} Zetta = "zetta", -- 10^{21} Yotta = "yotta", -- 10^{24} -- IEC 60027-2: 2005, third edition, Part 2 Kibi = "kibi", -- 2^{10} (not ki) Mebi = "mebi", -- 2^{20} Gibi = "gibi", -- 2^{30} Tebi = "tebi", -- 2^{40} Pebi = "pebi", -- 2^{50} Exbi = "exbi", -- 2^{60} -- not standard Zebi = "zebi", -- binary Yobi = "yobi", -- binary Micro = "micro", Root = "root", } local long_units = { -- Le Système international d'unités (SI) 8e édition (except synonyms) -- SI base units (Table 1) Meter = "meter", Gram = "gram", Second = "second", Ampere = "ampere", Kelvin = "kelvin", Mole = "mole", Candela = "candela", -- synonyms Mol = "mole", Metre = "meter", -- SI derived units with special names (Table 3) Radian = "radian", Steradian = "steradian", Hertz = "hertz", Newton = "newton", Pascal = "pascal", Joule = "joule", Watt = "watt", Coulomb = "coulomb", Volt = "volt", Farad = "farad", Ohm = "ohm", Siemens = "siemens", Weber = "weber", Tesla = "tesla", Henry = "henry", Celsius = "celsius", Lumen = "lumen", Lux = "lux", Bequerel = "bequerel", Gray = "gray", Sievert = "sievert", Katal = "katal", -- non SI units accepted for use with SI (Table 6) Minute = "minute", Hour = "hour", Day = "day", -- (degree, minute, second of arc are treated specially later) Gon = "gon", Grad = "grad", Hectare = "hectare", Liter = "liter", Tonne = "tonne", -- synonyms ["Metric Ton"] = "tonne", Litre = "liter", -- non-SI units whose values must be obtained experimentally (Table 7) ["Electron Volt"] = "electronvolt", Dalton = "dalton", ["Atomic Mass Unit"] = "atomicmassunit", ["Astronomical Unit"] = "astronomicalunit", -- special cases (catch doubles, okay, a bit over the top) ["Degrees Celsius"] = "celsius", ["Degrees Fahrenheit"] = "fahrenheit", ["Degree Celsius"] = "celsius", ["Degree Fahrenheit"] = "fahrenheit", -- too late as we already have connected symbols catched: -- -- ["° Celsius"] = "celsius", -- ["° Fahrenheit"] = "fahrenheit", -- ["°Celsius"] = "celsius", -- ["°Fahrenheit"] = "fahrenheit", -- the "natural units" and "atomic units" are omitted for now -- synonyms eV = "electronvolt", AMU = "atomicmassunit", -- other non-SI units (Table 8) Bar = "bar", Hg = "mercury", -- ["Millimetre Of Mercury"] = [[mmHg]], Angstrom = "angstrom", -- strictly Ångström ["Nautical Mile"] = "nauticalmile", Barn = "barn", Knot = "knot", Neper = "neper", Bel = "bel", -- in practice only decibel used -- other non-SI units from CGS system (Table 9) Erg = "erg", Dyne = "dyne", Poise = "poise", Stokes = "stokes", Stilb = "stilb", Phot = "phot", Gal = "gal", Maxwell = "maxwell", Gauss = "gauss", Oersted = "oersted", -- end of SI -- data: for use with the binary prefixes (except Erlang) Bit = "bit", Byte = "byte" , Baud = "baud", Erlang = "erlang", -- common units, not part of SI Atmosphere = "atmosphere", Revolution = "revolution", -- synonyms Atm = "atmosphere", Rev = "revolution", -- imperial units (very incomplete) Fahrenheit = "fahrenheit", Foot = "foot", Inch = "inch", Calorie = "calorie", -- synonyms Cal = "calorie", } local long_operators = { Times = "times", Solidus = "solidus", Per = "per", OutOf = "outof", } local long_suffixes = { Linear = "linear", Square = "square", Cubic = "cubic", Inverse = "inverse", ILinear = "ilinear", ISquare = "isquare", ICubic = "icubic", } local short_prefixes = { y = "yocto", z = "zetto", a = "atto", f = "femto", p = "pico", n = "nano", u = "micro", m = "milli", c = "centi", d = "deci", da = "deca", h = "hecto", k = "kilo", M = "mega", G = "giga", T = "tera", P = "peta", E = "exa", Z = "zetta", Y = "yotta", } local short_units = { -- I'm not sure about casing m = "meter", Hz = "hertz", hz = "hertz", B = "bel", b = "bel", lx = "lux", -- da = "dalton", h = "hour", s = "second", g = "gram", n = "newton", v = "volt", t = "tonne", l = "liter", -- w = "watt", W = "watt", -- a = "ampere", A = "ampere", min = "minute", [utfchar(0x2103)] = "celsius", [utfchar(0x2109)] = "fahrenheit", } local short_operators = { ["."] = "times", ["*"] = "times", ["/"] = "solidus", [":"] = "outof", } local short_suffixes = { -- maybe just raw digit match ["1"] = "linear", ["2"] = "square", ["3"] = "cubic", ["+1"] = "linear", ["+2"] = "square", ["+3"] = "cubic", ["-1"] = "inverse", ["-1"] = "ilinear", ["-2"] = "isquare", ["-3"] = "icubic", ["^1"] = "linear", ["^2"] = "square", ["^3"] = "cubic", ["^+1"] = "linear", ["^+2"] = "square", ["^+3"] = "cubic", ["^-1"] = "inverse", ["^-1"] = "ilinear", ["^-2"] = "isquare", ["^-3"] = "icubic", } local symbol_units = { Degrees = "degree", Degree = "degree", -- Deg = "degree", ["°"] = "degree", ArcMinute = "arcminute", ["′"] = "arcminute", -- 0x2032 ArcSecond = "arcsecond", ["″"] = "arcsecond", -- 0x2033 Percent = "percent", ["%"] = "percent", Promille = "permille", Permille = "permille", } local packaged_units = { Micron = "micron", mmHg = "millimetermercury", } -- rendering: local unitsPUS = context.unitsPUS local unitsPU = context.unitsPU local unitsPS = context.unitsPS local unitsP = context.unitsP local unitsUS = context.unitsUS local unitsU = context.unitsU local unitsS = context.unitsS local unitsO = context.unitsO local unitsN = context.unitsN local unitsC = context.unitsC local unitsQ = context.unitsQ local unitsNstart = context.unitsNstart local unitsNstop = context.unitsNstop local unitsNspace = context.unitsNspace local labels = languages.data.labels labels.prefixes = allocate { yocto = { labels = { en = [[y]] } }, -- 10^{-24} zepto = { labels = { en = [[z]] } }, -- 10^{-21} atto = { labels = { en = [[a]] } }, -- 10^{-18} femto = { labels = { en = [[f]] } }, -- 10^{-15} pico = { labels = { en = [[p]] } }, -- 10^{-12} nano = { labels = { en = [[n]] } }, -- 10^{-9} micro = { labels = { en = [[\mu]] } }, -- 10^{-6} milli = { labels = { en = [[m]] } }, -- 10^{-3} centi = { labels = { en = [[c]] } }, -- 10^{-2} deci = { labels = { en = [[d]] } }, -- 10^{-1} deca = { labels = { en = [[da]] } }, -- 10^{1} hecto = { labels = { en = [[h]] } }, -- 10^{2} kilo = { labels = { en = [[k]] } }, -- 10^{3} mega = { labels = { en = [[M]] } }, -- 10^{6} giga = { labels = { en = [[G]] } }, -- 10^{9} tera = { labels = { en = [[T]] } }, -- 10^{12} peta = { labels = { en = [[P]] } }, -- 10^{15} exa = { labels = { en = [[E]] } }, -- 10^{18} zetta = { labels = { en = [[Z]] } }, -- 10^{21} yotta = { labels = { en = [[Y]] } }, -- 10^{24} kibi = { labels = { en = [[Ki]] } }, -- 2^{10} (not ki) mebi = { labels = { en = [[Mi]] } }, -- 2^{20} gibi = { labels = { en = [[Gi]] } }, -- 2^{30} tebi = { labels = { en = [[Ti]] } }, -- 2^{40} pebi = { labels = { en = [[Pi]] } }, -- 2^{50} exbi = { labels = { en = [[Ei]] } }, -- 2^{60} zebi = { labels = { en = [[Zi]] } }, -- binary yobi = { labels = { en = [[Yi]] } }, -- binary micro = { labels = { en = [[µ]] } }, -- 0x00B5 \textmu root = { labels = { en = [[√]] } }, -- 0x221A } labels.units = allocate { meter = { labels = { en = [[m]] } }, gram = { labels = { en = [[g]] } }, -- strictly kg is the base unit second = { labels = { en = [[s]] } }, ampere = { labels = { en = [[A]] } }, kelvin = { labels = { en = [[K]] } }, mole = { labels = { en = [[mol]] } }, candela = { labels = { en = [[cd]] } }, mol = { labels = { en = [[mol]] } }, radian = { labels = { en = [[rad]] } }, steradian = { labels = { en = [[sr]] } }, hertz = { labels = { en = [[Hz]] } }, newton = { labels = { en = [[N]] } }, pascal = { labels = { en = [[Pa]] } }, joule = { labels = { en = [[J]] } }, watt = { labels = { en = [[W]] } }, coulomb = { labels = { en = [[C]] } }, volt = { labels = { en = [[V]] } }, farad = { labels = { en = [[F]] } }, ohm = { labels = { en = [[Ω]] } }, -- 0x2126 \textohm siemens = { labels = { en = [[S]] } }, weber = { labels = { en = [[Wb]] } }, mercury = { labels = { en = [[Hg]] } }, millimetermercury = { labels = { en = [[mmHg]] } }, -- connected tesla = { labels = { en = [[T]] } }, henry = { labels = { en = [[H]] } }, celsius = { labels = { en = [[\checkedtextcelsius]] } }, -- 0x2103 lumen = { labels = { en = [[lm]] } }, lux = { labels = { en = [[lx]] } }, bequerel = { labels = { en = [[Bq]] } }, gray = { labels = { en = [[Gr]] } }, sievert = { labels = { en = [[Sv]] } }, katal = { labels = { en = [[kat]] } }, minute = { labels = { en = [[min]] } }, hour = { labels = { en = [[h]] } }, day = { labels = { en = [[d]] } }, gon = { labels = { en = [[gon]] } }, grad = { labels = { en = [[grad]] } }, hectare = { labels = { en = [[ha]] } }, liter = { labels = { en = [[l]] } }, -- symbol l or L tonne = { labels = { en = [[t]] } }, electronvolt = { labels = { en = [[eV]] } }, dalton = { labels = { en = [[Da]] } }, atomicmassunit = { labels = { en = [[u]] } }, astronomicalunit = { labels = { en = [[ua]] } }, bar = { labels = { en = [[bar]] } }, angstrom = { labels = { en = [[Å]] } }, -- strictly Ångström nauticalmile = { labels = { en = [[M]] } }, barn = { labels = { en = [[b]] } }, knot = { labels = { en = [[kn]] } }, neper = { labels = { en = [[Np]] } }, bel = { labels = { en = [[B]] } }, -- in practice only decibel used erg = { labels = { en = [[erg]] } }, dyne = { labels = { en = [[dyn]] } }, poise = { labels = { en = [[P]] } }, stokes = { labels = { en = [[St]] } }, stilb = { labels = { en = [[sb]] } }, phot = { labels = { en = [[phot]] } }, gal = { labels = { en = [[gal]] } }, maxwell = { labels = { en = [[Mx]] } }, gauss = { labels = { en = [[G]] } }, oersted = { labels = { en = [[Oe]] } }, -- strictly Œrsted bit = { labels = { en = [[bit]] } }, byte = { labels = { en = [[B]] } }, baud = { labels = { en = [[Bd]] } }, erlang = { labels = { en = [[E]] } }, atmosphere = { labels = { en = [[atm]] } }, revolution = { labels = { en = [[rev]] } }, fahrenheit = { labels = { en = [[\checkedtextfahrenheit]] } }, -- 0x2109 foot = { labels = { en = [[ft]] } }, inch = { labels = { en = [[inch]] } }, calorie = { labels = { en = [[cal]] } }, -- degree = { labels = { en = [[°]]} }, arcminute = { labels = { en = [[\checkedtextprime]] } }, -- ′ 0x2032 arcsecond = { labels = { en = [[\checkedtextdoubleprime]] } }, -- ″ 0x2033 percent = { labels = { en = [[\percent]] } }, permille = { labels = { en = [[\promille]] } }, -- micron = { labels = { en = [[\textmu m]] } }, } labels.operators = allocate { times = { labels = { en = [[\unitsTIMES]] } }, solidus = { labels = { en = [[\unitsSOLIDUS]] } }, per = { labels = { en = [[\unitsSOLIDUS]] } }, outof = { labels = { en = [[\unitsOUTOF]] } }, } labels.suffixes = allocate { linear = { labels = { en = [[1]] } }, square = { labels = { en = [[2]] } }, cubic = { labels = { en = [[3]] } }, inverse = { labels = { en = [[-1]] } }, ilinear = { labels = { en = [[-1]] } }, isquare = { labels = { en = [[-2]] } }, icubic = { labels = { en = [[-3]] } }, } local function dimpus(p,u,s) if trace_units then report_units("prefix %a, unit %a, suffix %a",p,u,s) end -- if p ~= "" then if u ~= "" then if s ~= "" then unitsPUS(p,u,s) else unitsPU(p,u) end elseif s ~= "" then unitsPS(p,s) else unitsP(p) end else if u ~= "" then if s ~= "" then unitsUS(u,s) -- elseif c then -- unitsC(u) else unitsU(u) end elseif s ~= "" then unitsS(s) else unitsP(p) end end end local function dimspu(s,p,u) return dimpus(p,u,s) end local function dimop(o) if trace_units then report_units("operator %a",o) end if o then unitsO(o) end end local function dimsym(s) if trace_units then report_units("symbol %a",s) end s = symbol_units[s] or s if s then unitsC(s) end end local function dimpre(p) if trace_units then report_units("prefix [%a",p) end p = packaged_units[p] or p if p then unitsU(p) end end -- patterns: -- -- space inside Cs else funny captures and args to function -- -- square centi meter per square kilo seconds -- todo 0x -> rm local function update_parsers() -- todo: don't remap utf sequences local all_long_prefixes = { } local all_long_units = { } local all_long_operators = { } local all_long_suffixes = { } local all_symbol_units = { } local all_packaged_units = { } for k, v in next, long_prefixes do all_long_prefixes [k] = v all_long_prefixes [lower(k)] = v end for k, v in next, long_units do all_long_units [k] = v all_long_units [lower(k)] = v end for k, v in next, long_operators do all_long_operators[k] = v all_long_operators[lower(k)] = v end for k, v in next, long_suffixes do all_long_suffixes [k] = v all_long_suffixes [lower(k)] = v end for k, v in next, symbol_units do all_symbol_units [k] = v all_symbol_units [lower(k)] = v end for k, v in next, packaged_units do all_packaged_units[k] = v all_packaged_units[lower(k)] = v end local somespace = P(" ")^0/"" local p_long_prefix = appendlpeg(all_long_prefixes,nil,true) local p_long_unit = appendlpeg(all_long_units,nil,true) local p_long_operator = appendlpeg(all_long_operators,nil,true) local p_long_suffix = appendlpeg(all_long_suffixes,nil,true) local p_symbol = appendlpeg(all_symbol_units,nil,true) local p_packaged = appendlpeg(all_packaged_units,nil,true) local p_short_prefix = appendlpeg(short_prefixes) local p_short_unit = appendlpeg(short_units) local p_short_operator = appendlpeg(short_operators) local p_short_suffix = appendlpeg(short_suffixes) -- we can can cleanup some space issues here (todo) local unitparser = P { "unit", -- longprefix = Cs(V("somespace") * p_long_prefix), shortprefix = Cs(V("somespace") * p_short_prefix), longsuffix = Cs(V("somespace") * p_long_suffix), shortsuffix = Cs(V("somespace") * p_short_suffix), shortunit = Cs(V("somespace") * p_short_unit), longunit = Cs(V("somespace") * p_long_unit), longoperator = Cs(V("somespace") * p_long_operator), shortoperator = Cs(V("somespace") * p_short_operator), packaged = Cs(V("somespace") * p_packaged), -- nothing = Cc(""), somespace = somespace, nospace = (1-somespace)^1, -- was 0 -- ignore = P(-1), -- qualifier = Cs(V("somespace") * (lparent/"") * (1-rparent)^1 * (rparent/"")), -- somesymbol = V("somespace") * (p_symbol/dimsym) * V("somespace"), somepackaged = V("somespace") * (V("packaged") / dimpre) * V("somespace"), -- someunknown = V("somespace") -- * (V("nospace")/unitsU) -- * V("somespace"), -- combination = V("longprefix") * V("longunit") -- centi meter + V("nothing") * V("longunit") + V("shortprefix") * V("shortunit") -- c m + V("nothing") * V("shortunit") + V("longprefix") * V("shortunit") -- centi m + V("shortprefix") * V("longunit"), -- c meter dimension = V("somespace") * ( V("packaged") / dimpre + (V("longsuffix") * V("combination")) / dimspu + (V("combination") * (V("shortsuffix") + V("nothing"))) / dimpus ) * (V("qualifier") / unitsQ)^-1 * V("somespace"), operator = V("somespace") * ((V("longoperator") + V("shortoperator")) / dimop) * V("somespace"), snippet = V("dimension") + V("somesymbol"), unit = ( V("snippet") * (V("operator") * V("snippet"))^0 + V("somepackaged") )^1, } -- local number = lpeg.patterns.number local number = Cs( P("$") * (1-P("$"))^1 * P("$") + P([[\m{]]) * (1-P("}"))^1 * P("}") + (1-R("az","AZ")-P(" "))^1 -- todo: catch { } -- not ok ) / unitsN local start = Cc(nil) / unitsNstart local stop = Cc(nil) / unitsNstop local space = Cc(nil) / unitsNspace -- todo: avoid \unitsNstart\unitsNstop (weird that it can happen .. now catched at tex end) local p_c_combinedparser = P { "start", number = start * dleader * (p_c_dparser + number) * stop, rule = V("number")^-1 * unitparser, space = space, start = V("rule") * (V("space") * V("rule"))^0 + V("number") } local c_p_combinedparser = P { "start", number = start * dleader * (c_p_dparser + number) * stop, rule = V("number")^-1 * unitparser, space = space, start = V("rule") * (V("space") * V("rule"))^0 + V("number") } return p_c_combinedparser, c_p_combinedparser end local p_c_parser = nil local c_p_parser = nil local dirty = true function commands.unit(str,p_c) if dirty then if trace_units then report_units("initializing parser") end p_c_parser, c_p_parser = update_parsers() dirty = false end local ok if p_c == v_reverse then ok = matchlpeg(p_c_parser,str) else ok = matchlpeg(c_p_parser,str) end if not ok then report_units("unable to parse: %s",str) context(str) end end local function trigger(t,k,v) rawset(t,k,v) dirty = true end local t_units = { prefixes = setmetatablenewindex(long_prefixes,trigger), units = setmetatablenewindex(long_units,trigger), operators = setmetatablenewindex(long_operators,trigger), suffixes = setmetatablenewindex(long_suffixes,trigger), symbols = setmetatablenewindex(symbol_units,trigger), packaged = setmetatablenewindex(packaged_units,trigger), } local t_shortcuts = { prefixes = setmetatablenewindex(short_prefixes,trigger), units = setmetatablenewindex(short_units,trigger), operators = setmetatablenewindex(short_operators,trigger), suffixes = setmetatablenewindex(short_suffixes,trigger), } physics.units.tables = allocate { units = t_units, shortcuts = t_shortcuts, } local mapping = { prefix = "prefixes", unit = "units", operator = "operators", suffixe = "suffixes", symbol = "symbols", packaged = "packaged", } function commands.registerunit(category,list) if not list or list == "" then list = category category = "unit" end local t = t_units[mapping[category]] if t then for k, v in next, utilities.parsers.settings_to_hash(list or "") do t[k] = v end end -- inspect(tables) end context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-bck.mkvi0000644000175000017500000004321512130411274024227 0ustar norbertnorbert%D \module %D [ file=anch-bck, % moved from anch-pgr (1999.08.01) %D version=2011.12.19, %D title=\CONTEXT\ Anchoring Macros, %D subtitle=Backgrounds, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Anchoring Macros / Backgrounds} %D This module is quite okay but at some point I might add methods %D that use attributes although not too much is to be expected, %D apart from better anchoring. In fact better anchoring can be %D done independent of that. \unprotect % we can flush 5 in one call (saved 4 lua calls) .. brrr wself .. will change \def\MPposset#1{\ctxcommand{MPposset("#1")}} % will go % This might be overloaded later on: % \defineoverlay[\v!text-2][\positionoverlay{\v!text-2}] % \defineoverlay[\v!text-1][\positionoverlay{\v!text-1}] % \defineoverlay[\v!text+1][\positionoverlay{\v!text+1}] % \defineoverlay[\v!text+2][\positionoverlay{\v!text+2}] % Paragraph positions: \newcount\c_anch_backgrounds_text_n \def\v_anch_backgrounds_text_current {tbg:0} \def\v_anch_backgrounds_anchor_current_b{b:\v_anch_backgrounds_text_current} \def\v_anch_backgrounds_anchor_current_e{e:\v_anch_backgrounds_text_current} \def\anch_backgrounds_text_initialize_next {\global\advance\c_anch_backgrounds_text_n\plusone \edef\v_anch_backgrounds_text_current{tbg:\number\c_anch_backgrounds_text_n}} % The first position can be used in the middle of a paragraph in which case we're % too late with initializing par positions. Therefore we check if positions are % used at all. % % tricky: we need to catch newly set! otherwise an old run can have positions \unexpanded\def\anch_backgrounds_text_initialize {\ctxcommand{doifelsepositionsused()}\enableparpositions\donothing \global\let\anch_backgrounds_text_initialize\relax} \appendtoks \anch_backgrounds_text_initialize \to \everystarttext %D Some MP \newcount\MPparcounter \def\MPself {\MPvar{self}} \def\MPbself {b:\MPvar{self}} \def\MPeself {e:\MPvar{self}} \def\MPparanchor{p:\number\MPparcounter} % \carryoverpar is needed for left/right floats % \definetextbackground[more][state=start,backgroundcolor=red] % location=paragraph % \definetextbackground[test][state=start,backgroundcolor=green] % % \page \placefigure[left]{}{} % % \starttextbackground[test] % \readfile{ward}{}{} % \starttextbackground[more] % \readfile{ward}{}{} % \stoptextbackground % \readfile{ward}{}{} % \stoptextbackground % % \page \placefigure[right]{}{} % % \starttextbackground[test] % \readfile{ward}{}{} % \starttextbackground[more] % \readfile{ward}{}{} % \stoptextbackground % \readfile{ward}{}{} % \stoptextbackground \newcount\c_anch_backgrounds_text_level \installcorenamespace{textbackground} \installcorenamespace{textbackgroundlevel} \installcommandhandler \??textbackground {textbackground} \??textbackground \appendtoks \setuevalue{\currenttextbackground}{\groupedcommand{\starttextbackground[\currenttextbackground]}{\stoptextbackground}}% \setuevalue{\e!start\currenttextbackground}{\starttextbackground[\currenttextbackground]}% \setuevalue{\e!stop \currenttextbackground}{\stoptextbackground}% % \doif{\textbackgroundparameter\c!state}\v!start\checkpositionoverlays \to \everydefinetextbackground % \appendtoks % \doif{\textbackgroundparameter\c!state}\v!start\checkpositionoverlays % \to \everysetuptextbackground \unexpanded\def\starttextbackground {\begingroup \advance\c_anch_backgrounds_text_level\plusone \dodoubleempty\anch_backgrounds_text_start} \def\anch_backgrounds_text_start[#tag][#settings]% {%\checkpositionoverlays \def\currenttextbackground{#tag}% \anch_backgrounds_text_initialize_next \ifsecondargument \setupcurrenttextbackground[#settings]% \fi \doifelse{\textbackgroundparameter\c!state}\v!start \anch_backgrounds_text_preset_yes \anch_backgrounds_text_preset_nop \anch_backgrounds_text_start_indeed} % todo \backgroundvariable\c!variant \let\anch_backgrounds_text_start_indeed\relax \let\anch_backgrounds_text_stop_indeed \relax \setvalue{\??textbackgroundlevel\v!text}% {\let\anch_backgrounds_text_start_indeed\anch_backgrounds_text_start_txt \let\anch_backgrounds_text_stop_indeed \anch_backgrounds_text_stop_txt} \setvalue{\??textbackgroundlevel\v!paragraph}% {\ifnum\c_anch_backgrounds_text_level>\plusone \let\anch_backgrounds_text_start_indeed\anch_backgrounds_text_start_txt \let\anch_backgrounds_text_stop_indeed \anch_backgrounds_text_stop_txt \else \let\anch_backgrounds_text_start_indeed\anch_backgrounds_text_start_par \let\anch_backgrounds_text_stop_indeed \anch_backgrounds_text_stop_par \fi} \setvalue{\??textbackgroundlevel\v!none}% {\anch_backgrounds_text_preset_nop} \def\anch_backgrounds_text_preset_nop {\let\anch_backgrounds_text_start_indeed\relax \let\anch_backgrounds_text_stop_indeed \relax} \def\anch_backgrounds_text_preset_yes {\anch_backgrounds_text_preset_nop \csname\??textbackgroundlevel\textbackgroundparameter\c!location\endcsname \edef\m_anch_backgrounds_text_frame {\textbackgroundparameter\c!frame}% \edef\m_anch_backgrounds_text_corner {\textbackgroundparameter\c!corner}% \edef\m_anch_backgrounds_text_background{\textbackgroundparameter\c!background}% \ifx\m_anch_backgrounds_text_frame\v!on \ifx\m_anch_backgrounds_text_corner\v!round \let\m_anch_backgrounds_text_frame\!!plustwo \else \let\m_anch_backgrounds_text_frame\!!plusone \fi \else \let\m_anch_backgrounds_text_frame\!!zerocount \fi \ifx\m_anch_backgrounds_text_background\v!color \let\m_anch_backgrounds_text_background\!!plusone \else \let\m_anch_backgrounds_text_background\!!zerocount \fi \startpositionoverlay{\textbackgroundoverlay{\textbackgroundparameter\c!level}}% \anch_backgrounds_text_meta_graphic % gets expanded directly \stoppositionoverlay} \def\anch_backgrounds_text_meta_graphic {\normalexpanded {\setMPpositiongraphicrange % needs to be optimized {\v_anch_backgrounds_anchor_current_b}% {\v_anch_backgrounds_anchor_current_e}% {\textbackgroundparameter\c!method}% {self=\v_anch_backgrounds_text_current, mp=\textbackgroundparameter\c!mp, gridtype=\textbackgroundparameter\c!alternative, filltype=\m_anch_backgrounds_text_background, linetype=\m_anch_backgrounds_text_frame, dashtype=\textbackgroundparameter\c!dash, gridcolor=\textbackgroundparameter\c!framecolor, linecolor=\textbackgroundparameter\c!framecolor, lineoffset=\textbackgroundparameter\c!frameoffset, fillcolor=\textbackgroundparameter\c!backgroundcolor, filloffset=\textbackgroundparameter\c!backgroundoffset, gridwidth=\textbackgroundparameter\c!rulethickness, gridshift=\textbackgroundparameter\c!voffset, linewidth=\textbackgroundparameter\c!rulethickness, lineradius=\textbackgroundparameter\c!radius}}} \unexpanded\def\stoptextbackground {\anch_backgrounds_text_stop_indeed \carryoverpar\endgroup} % why doesn't this work ? \unexpanded\def\starttextbackgroundmanual {\begingroup \usetextbackgroundstyleandcolor\c!style\c!color \bpos\v_anch_backgrounds_text_current} \unexpanded\def\stoptextbackgroundmanual {\epos\v_anch_backgrounds_text_current \carryoverpar\endgroup} \def\anch_backgrounds_text_start_txt {\ifvmode \dontleavehmode \fi \begingroup \usetextbackgroundstyleandcolor\c!style\c!color \bpos\v_anch_backgrounds_text_current} \def\anch_backgrounds_text_stop_txt {\epos\v_anch_backgrounds_text_current \carryoverpar\endgroup} \newskip\textbackgroundskip \def\anch_backgrounds_text_start_par {\endgraf % new \textbackgroundparameter\c!before \begingroup \begingroup \resetallattributes % \attribute\linenumberattribute \attributeunsetvalue \noindent \ifgridsnapping \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!topoffset}% \ifdim\textbackgroundskip>\zeropoint \struttedbox{\hbox{\raise\textbackgroundskip\hbox{\bpos\v_anch_backgrounds_text_current}}}% \else \bpos\v_anch_backgrounds_text_current \fi \else \bpos\v_anch_backgrounds_text_current \fi \endgraf % we need a vertical nobreak - 29/06/2004 \endgroup \nobreak \vskip-\lineheight \nobreak \ifgridsnapping \else \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!topoffset}% \ifdim\textbackgroundskip>\zeropoint \kern\textbackgroundskip\nobreak \fi \fi \dosetleftskipadaption{\textbackgroundparameter\c!leftoffset}% \advance\leftskip\leftskipadaption \dosetleftskipadaption{\textbackgroundparameter\c!rightoffset}% \advance\rightskip\leftskipadaption % new \dosetraggedcommand{\textbackgroundparameter\c!align}% \raggedcommand % \usetextbackgroundstyleandcolor\c!style\c!color \nowhitespace \nobreak % new per 23/04/2006 (else potential break when whitespace) \seteffectivehsize \doinhibitblank % \blank[\v!disable]% new \par} \def\anch_backgrounds_text_stop_par {\par \removelastskip % new \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!bottomoffset}% \ifdim\lastskip>\zeropoint \advance\textbackgroundskip-\lastskip \fi \ifgridsnapping \else \ifdim\textbackgroundskip>\zeropoint \kern\textbackgroundskip\nobreak \fi \fi \nobreak \vskip-\dimexpr\lineheight+\parskip\relax % problem: we loose the hangindent \nobreak \endgroup \begingroup \forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM \resetallattributes % \attribute\linenumberattribute \attributeunsetvalue \nobreak \noindent \strut \hfill \kern\zeropoint \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!bottomoffset}% \ifgridsnapping % experimental, pascal (todo: topoffset in same way) \ifdim\textbackgroundskip>\zeropoint \struttedbox\plusone{\hbox{\lower\textbackgroundskip\hbox{\epos\v_anch_backgrounds_text_current}}}% \else \epos\v_anch_backgrounds_text_current \fi \else \epos\v_anch_backgrounds_text_current \fi \endgraf \carryoverpar\endgroup \endgraf % new \textbackgroundparameter\c!after} \unexpanded\def\checkpositionoverlays % overloads \relax in anch-pgr {\ifproductionrun \enabletextarearegistration \enablehiddenbackground \global\let\checkpositionoverlays\relax \fi} \setuptextbackground [\c!mp=mpos:region:draw, \c!method=mpos:region, % mpos:regionshape \c!state=\v!start, \c!location=\v!text, \c!leftoffset=\!!zeropoint, % 1em, \c!rightoffset=\textbackgroundparameter\c!leftoffset, \c!topoffset=\!!zeropoint, % \v!medium, \c!bottomoffset=\textbackgroundparameter\c!topoffset, \c!level=-1, \c!alternative=0, \c!align=, \c!dash=0, % to be internationalized \c!background=\v!color, \c!backgroundcolor=lightgray, \c!backgroundoffset=\!!zeropoint, \c!corner=\v!rectangular, \c!radius=.5\bodyfontsize, \c!voffset=\!!zeropoint, \c!frame=\v!on, \c!framecolor=blue, \c!frameoffset=\!!zeropoint, \c!rulethickness=\linewidth] %D The \METAPOST\ connection: % gridtype = 1 => baseline % gridtype = 2 => betweenline \setupMPvariables [mpos:region] [mp=mpos:region:unset, gridtype=0, linetype=1, filltype=1, dashtype=0, % 1 = dashed, 2 = dashed with background gridcolor=red, linecolor=blue, fillcolor=lightgray, filloffset=\!!zeropoint, linewidth=\linewidth, gridwidth=\linewidth, gridshift=\!!zeropoint, lineradius=.5\bodyfontsize, lineoffset=\!!zeropoint, dashtype=1] \startuseMPgraphic{mpos:region:setup} if unknown context_abck : input mp-abck.mpiv ; fi ; boxgridtype := \MPvar{gridtype} ; boxlinetype := \MPvar{linetype} ; boxfilltype := \MPvar{filltype} ; boxdashtype := \MPvar{dashtype} ; boxfilloffset := \MPvar{filloffset} ; boxlinewidth := \MPvar{linewidth} ; boxgridwidth := \MPvar{gridwidth} ; boxgridshift := \MPvar{gridshift} ; boxlineradius := \MPvar{lineradius} ; boxlineoffset := \MPvar{lineoffset} ; % def boxgridoptions = withcolor \MPvar{gridcolor} enddef ; def boxlineoptions = withcolor \MPvar{linecolor} enddef ; def boxfilloptions = withcolor \MPvar{fillcolor} enddef ; \stopuseMPgraphic \startuseMPgraphic{mpos:region:extra} % user stuff \stopuseMPgraphic \startuseMPgraphic{mpos:region:anchor} setbounds currentpicture to multibox ; \stopuseMPgraphic % \startMPpositionmethod{mpos:region} % \startMPpositiongraphic{mpos:region}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius,lineoffset} % \includeMPgraphic{mpos:region:setup} ; % \includeMPgraphic{mpos:region:extra} ; % \MPgetmultipars{\MPvar{self}}{\MPanchorid} ; % \includeMPgraphic{\MPvar{mp}} ; % \includeMPgraphic{mpos:region:anchor} ; % \stopMPpositiongraphic % \MPpositiongraphic{mpos:region}{}% % \stopMPpositionmethod \startMPpositiongraphic{mpos:region}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius,lineoffset} \includeMPgraphic{mpos:region:setup} ; \includeMPgraphic{mpos:region:extra} ; \MPgetmultipars{\MPvar{self}}{\MPanchorid} ; \includeMPgraphic{\MPvar{mp}} ; \includeMPgraphic{mpos:region:anchor} ; \stopMPpositiongraphic \startMPpositiongraphic{mpos:regionshape}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius,lineoffset} \includeMPgraphic{mpos:region:setup} ; \includeMPgraphic{mpos:region:extra} ; \MPgetmultishapes{\MPvar{self}}{\MPanchorid} ; \includeMPgraphic{\MPvar{mp}} ; \includeMPgraphic{mpos:region:anchor} ; \stopMPpositiongraphic \startMPpositionmethod{mpos:region} \MPpositiongraphic{mpos:region}{}% \stopMPpositionmethod \startuseMPgraphic{mpos:region:draw} draw_multi_pars \stopuseMPgraphic \startuseMPgraphic{mpos:region:show} show_multi_pars \stopuseMPgraphic \startuseMPgraphic{mpos:region:kind} show_multi_kind \stopuseMPgraphic \startuseMPgraphic{mpos:region:sideline} draw_multi_side \stopuseMPgraphic \startuseMPgraphic{mpos:region:sideline:dashed} draw_multi_side_path dashed evenly ; \stopuseMPgraphic %D As an example we define a grid background: \definetextbackground [\v!grid] [\c!state=\v!stop, \c!location=\v!paragraph, \c!frame=\v!off, \c!framecolor=red, \c!background=, \c!alternative=1] \ifx\basegrid\undefined \else \letvalue\v!grid=\basegrid \fi %D Some examples (that might become modules anch-imp-whatever): \setupMPvariables [mpos:encircle] [fillcolor=lightgray, filloffset=\!!zeropoint, linecolor=blue, lineoffset=5pt, linewidth=1pt] \startMPpositiongraphic{mpos:encircle}{linecolor,fillcolor,linewidth,lineoffset} if unknown context_apos : input mp-apos.mpiv ; fi ; \MPgetposboxes{\MPvar{self}}{\MPanchorid} if nofposboxes = 1 : posboxes[1] := posboxes[1] enlarged \MPvar{lineoffset} cornered \MPvar{lineoffset} ; fill posboxes[1] withcolor \MPvar{fillcolor} ; draw posboxes[1] withpen pencircle scaled \MPvar{linewidth} withcolor \MPvar{linecolor} ; fi ; \stopMPpositiongraphic \setupMPvariables [mpos:connect] [linecolor=red, lineoffset=.25ex, linewidth=1pt] \startMPpositiongraphic{mpos:connect}{linecolor,lineoffset,linewidth} if unknown context_apos : input mp-apos.mpiv ; fi ; boxlinewidth := \MPvar{linewidth} ; boxlineoffset := \MPvar{lineoffset} ; def boxlineoptions = withcolor \MPvar{linecolor} enddef ; \MPgetposboxes{\MPvar{from},\MPvar{to}}{\MPanchorid} connect_positions ; \stopMPpositiongraphic \protect \endinput \definetextbackground[underline] [location=text,alternative=1,background=,frame=off] \definetextbackground[overstrike] [location=text,alternative=2,background=,frame=off] \definetextbackground[exlines] [location=text,alternative=3,background=,frame=off] \definetextbackground[strikethrough][location=text,alternative=4,background=,frame=off] \definestartstop [underline] [before={\starttextbackground[underline]}, after=\stoptextbackground] \definestartstop [overstrike] [before={\starttextbackground[overstrike]}, after=\stoptextbackground] \definestartstop [exlines] [before={\starttextbackground[exlines]}, after=\stoptextbackground] \definestartstop [strikethrough] [before={\starttextbackground[strikethrough]}, after=\stoptextbackground] \definetextbackground [sideline] [mp=mpos:region:sideline, location=paragraph, framecolor=red, frameoffset=5mm] \definestartstop [sideline] [before={\starttextbackground[sideline]}, after=\stoptextbackground] \starttext \startunderline \input tufte \stopunderline \blank \startoverstrike \input tufte \stopoverstrike \blank \startexlines \input tufte \stopexlines \blank \startstrikethrough \input tufte \stopstrikethrough \blank \startsideline \input tufte \stopsideline \blank \page \startpositionoverlay{text-1} \setMPpositiongraphic{connect-1-b}{mpos:connect}{from=connect-1-b,to=connect-1-e} \setMPpositiongraphic{connect-1-e}{mpos:connect}{from=connect-1-b,to=connect-1-e} \stoppositionoverlay \startpositionoverlay{text-1} \setMPpositiongraphic{encircle-1}{mpos:encircle}{self=encircle-1} \stoppositionoverlay test \hpos{connect-1-b}{START} \dorecurse{10}{\input ward} \hpos{encircle-1}{\strut HERE} \dorecurse{10}{\input ward} \hpos{connect-1-e}{STOP} test \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-nod.lua0000644000175000017500000000727612132111075024104 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-nod'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local copy_node = node.copy local new_node = node.new local nodepool = nodes.pool local register = nodepool.register local whatsitcodes = nodes.whatsitcodes local nodeinjections = backends.nodeinjections local pdfliteral = register(new_node("whatsit", whatsitcodes.pdfliteral)) pdfliteral.mode = 1 local pdfsave = register(new_node("whatsit", whatsitcodes.pdfsave)) local pdfrestore = register(new_node("whatsit", whatsitcodes.pdfrestore)) local pdfsetmatrix = register(new_node("whatsit", whatsitcodes.pdfsetmatrix)) local pdfdest = register(new_node("whatsit", whatsitcodes.pdfdest)) pdfdest.named_id = 1 -- xyz_zoom untouched local pdfannot = register(new_node("whatsit", whatsitcodes.pdfannot)) local variables = interfaces.variables local views = { -- beware, we do support the pdf keys but this is *not* official xyz = 0, [variables.standard] = 0, fit = 1, [variables.fit] = 1, fith = 2, [variables.width] = 2, fitv = 3, [variables.height] = 3, fitb = 4, fitbh = 5, [variables.minwidth] = 5, fitbv = 6, [variables.minheight] = 6, fitr = 7, } function nodepool.pdfliteral(str) local t = copy_node(pdfliteral) t.data = str return t end function nodepool.pdfdirect(str) local t = copy_node(pdfliteral) t.data = str t.mode = 1 return t end function nodepool.pdfsave() return copy_node(pdfsave) end function nodepool.pdfrestore() return copy_node(pdfrestore) end function nodepool.pdfsetmatrix(rx,sx,sy,ry,tx,ty) local t = copy_node(pdfsetmatrix) t.data = format("%s %s %s %s",rx or 0,sx or 0,sy or 0,ry or 0) -- todo: tx ty return t end nodeinjections.save = nodepool.pdfsave nodeinjections.restore = nodepool.pdfrestore nodeinjections.transform = nodepool.pdfsetmatrix function nodepool.pdfannotation(w,h,d,data,n) local t = copy_node(pdfannot) if w and w ~= 0 then t.width = w end if h and h ~= 0 then t.height = h end if d and d ~= 0 then t.depth = d end if n then t.objnum = n end if data and data ~= "" then t.data = data end return t end -- (!) The next code in pdfdest.w is wrong: -- -- case pdf_dest_xyz: -- if (matrixused()) { -- set_rect_dimens(pdf, p, parent_box, cur, alt_rule, pdf_dest_margin) ; -- } else { -- pdf_ann_left(p) = pos.h ; -- pdf_ann_top (p) = pos.v ; -- } -- break ; -- -- so we need to force a matrix. function nodepool.pdfdestination(w,h,d,name,view,n) local t = copy_node(pdfdest) local hasdimensions = false if w and w ~= 0 then t.width = w hasdimensions = true end if h and h ~= 0 then t.height = h hasdimensions = true end if d and d ~= 0 then t.depth = d hasdimensions = true end if n then t.objnum = n end view = views[view] or view or 1 -- fit is default t.dest_id = name t.dest_type = view if hasdimensions and view == 0 then -- xyz -- see (!) s -> m -> t -> r local s = copy_node(pdfsave) local m = copy_node(pdfsetmatrix) local r = copy_node(pdfrestore) m.data = "1 0 0 1" s.next = m m.next = t t.next = r m.prev = s t.prev = m r.prev = t return s -- a list else return t end end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-cdr-01.tex0000644000175000017500000000604311754241457023656 0ustar norbertnorbert%D \module %D [ file=s-cdr-01, %D version=2001.2.07, % maybe earlier %D title=\CONTEXT\ Style File, %D subtitle=CDROM Cover, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmodule[cdr-01] \setupmodule[cdr-01][option=] \def\PDFMPformoffset{20cm} \definepapersize [CDcover] [width=12.5cm, height=12.4cm] \definelayout [CDcover] [topspace=5mm, backspace=5mm, header=0pt, footer=0pt, width=middle, height=middle] \setuparranging [2SIDE] \setuppapersize [CDcover] [A4,landscape] \setuplayout [CDcover] \setuplayout [location=middle] \setupcolors [state=start] \setupbackgrounds [leftpage] [background=leftcover] \setupbackgrounds [rightpage] [background=rightcover] \setuppagenumbering [alternative=doublesided] \defineoverlay[leftcover] [\useMPgraphic{leftcover}] \defineoverlay[rightcover][\useMPgraphic{rightcover}] \definecolor [cd-color] [s=0] \definemeasure[cd-linewidth][.4pt] \doif {\moduleparameter{cdr-01}{option}} {light} { \definecolor [cd-color] [s=.85] \definemeasure[cd-linewidth][.2pt] } \startuseMPgraphic{leftcover} StartPage ; pickup pencircle scaled \measure{cd-linewidth} ; draw bottomboundary Page & rightboundary Page & topboundary Page withcolor \MPcolor{cd-color} ; draw bottomboundary (Page enlarged 3mm) & rightboundary (Page enlarged 3mm) & topboundary (Page enlarged 3mm) dashed evenly withcolor \MPcolor{cd-color} ; StopPage ; \stopuseMPgraphic \startuseMPgraphic{rightcover} StartPage ; pickup pencircle scaled \measure{cd-linewidth} ; draw topboundary Page & leftboundary Page & bottomboundary Page withcolor \MPcolor{cd-color} ; draw topboundary (Page enlarged 3mm) & leftboundary (Page enlarged 3mm) & bottomboundary (Page enlarged 3mm) dashed evenly withcolor \MPcolor{cd-color} ; draw bottomboundary Page -- lrcorner Page shifted (-5mm,-1cm) -- llcorner Page shifted ( 5mm,-1cm) -- cycle withcolor \MPcolor{cd-color} ; draw topboundary Page -- ulcorner Page shifted ( 5mm, 1cm) -- urcorner Page shifted (-5mm, 1cm) -- cycle withcolor \MPcolor{cd-color} ; StopPage ; setbounds currentpicture to Page ; \stopuseMPgraphic \setupmakeup [standard] [doublesided=no,page=] \setuplayout [topspace=5mm, backspace=5mm, header=0pt, footer=0pt, width=middle, height=middle] \defineframedtext [maintext] [background={foreground,color}, backgroundcolor=a-bit-white, frame=off, before=, after=, align=right, strut=no, height=fit, width=\textheight] \stopmodule \doifnotmode{demo}{\endinput} \starttext \startstandardmakeup page 1 \stopstandardmakeup \startstandardmakeup page 2 \stopstandardmakeup \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-krn.mkiv0000644000175000017500000000723112130411274024342 0ustar norbertnorbert%D \module %D [ file=typo-krn, %D version=2009.03.27, % code moved from core-spa.mkiv %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Spacing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Kerning} \unprotect \registerctxluafile{typo-krn}{1.001} \definesystemattribute[kern][public] % more % % {\setcharacterkerning[extrakerning]\input davis\relax} \installcorenamespace{characterkerning} \installcommandhandler \??characterkerning {characterkerning} \??characterkerning \unexpanded\def\setcharacterkerning[#1]% {\edef\currentcharacterkerning{#1}% \ifx\currentcharacterkerning\s!reset \resetcharacterkerning \else \typo_kerning_set \fi} % \def\typo_kerning_set % {\ctxcommand{setcharacterkerning(\characterkerningparameter\c!factor)}} \def\typo_kerning_set {\usecharacterkerningstyleandcolor\c!style\c!color % goodie, maybe also strut \ctxcommand{setcharacterkerning("\characterkerningparameter\c!factor")}} \unexpanded\def\resetcharacterkerning % fast one {\attribute\kernattribute\attributeunsetvalue} \appendtoks \resetcharacterkerning \to \everyresettypesetting \definecharacterkerning [extrakerning] [\c!factor=.125] % used in manuals %D Added after discussion on list (posted by WS, adapted abit by HH) %D \unknown\ this needs to be interfaced (\type {\v!kerncharacters}). %D %D \starttyping %D \setuphead[section][style=\sca,textstyle={\kerncharacters[.5]}] \section{Section} %D \stoptyping %D %D We could combine this with the previous definition command but %D then we always would get a command defined which is not beforehand %D a good idea. \definecharacterkerning [\v!kerncharacters] [\c!factor=.125] % Here we need to keep the groupedcommand solution as it is % used as modifier. \unexpanded\def\kerncharacters {\doifnextoptionalelse\typo_kerning_apply_yes\typo_kerning_apply_nop} \def\typo_kerning_apply_yes[#1]% {\groupedcommand{\typo_kerning_apply_yes_indeed{#1}}\donothing} \def\typo_kerning_apply_nop {\groupedcommand\typo_kerning_apply_nop_indeed\donothing} \def\typo_kerning_apply_yes_indeed#1% {\let\currentcharacterkerning\v!kerncharacters \setupcurrentcharacterkerning[\c!factor=#1]% \typo_kerning_set} \def\typo_kerning_apply_nop_indeed {\let\currentcharacterkerning\v!kerncharacters \typo_kerning_set} %D \macros %D {stretched} %D %D Stretching characters in a word is a sort of typographical %D murder. Nevertheless we support this manipulation for use in %D for instance titles. %D %D \starttyping %D \hbox to 5cm{\stretched{to the limit}} %D \stretched{to the limit} %D \stretched[width=10cm]{to the limit} %D \stoptyping %D %D \typebuffer %D %D or %D %D \startexample %D \getbuffer %D \stopexample %D %D \showsetup{stretched} %D %D This command replaces the old \MKII\ variant. \definecharacterkerning [\v!stretched] [\c!factor=\v!max, \c!width=\availablehsize] \unexpanded\def\setupstretched {\setupcharacterkerning[\v!stretched]} \unexpanded\def\stretched {\dosingleempty\typo_kerning_stretched} \unexpanded\def\typo_kerning_stretched[#1]#2% {\begingroup \let\currentcharacterkerning\v!stretched \iffirstargument \setupcurrentcharacterkerning[#1]% \fi \edef\p_width{\characterkerningparameter\c!width}% \ifx\p_width\empty \else \hbox to \p_width \fi \bgroup \usecharacterkerningstyleandcolor\c!style\c!color \typo_kerning_set #2% \egroup \endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/back-ini.mkiv0000644000175000017500000001137112130411274024234 0ustar norbertnorbert%D \module %D [ file=back-ini, %D version=2009.04.15, %D title=\CONTEXT\ Backend Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Most will go away here as it is replaced by \LUA\ calls to %D backend functions. \writestatus{loading}{ConTeXt Backend Macros / Initialization} \registerctxluafile{back-ini}{1.001} %D We currently have a curious mix between tex and lua backend %D handling but eventually most will move to lua. \unprotect \ifdefined\everybackendshipout \else \newtoks\everybackendshipout \fi \ifdefined\everylastbackendshipout \else \newtoks\everylastbackendshipout \fi %D Right from the start \CONTEXT\ had a backend system based on %D runtime pluggable code. As most backend issues involved specials %D and since postprocessors had not that much in common, we ended up %D with a system where we could switch backend as well as output code %D for multiple backends at the same time. %D %D Because \LUATEX\ has the backend built in, and since some backend %D issues have been moved to the frontend I decided to provide new %D backend code for \MKIV, starting with what was actually used. %D %D At this moment \DVI\ is no longer used for advanced document %D output and we therefore dropped support for this format. Future %D versions might support more backends again, but this has a low %D priority. %D %D The big question is: what is to be considered a backend issue and %D what not. For the moment we treat image inclusion, object reuse, %D position tracking and color as frontend issues, if only because we %D deal with them via \LUA\ code and as such we don't depend too much %D on macro calls that need to inject code for the backend. %D %D Not everything here makes sense and the content of this file will %D definitely change. \newcount\backendtransformlevel \let \dostartrotation \gobbleoneargument \let \dostoprotation \donothing \let \dostartscaling \gobbletwoarguments \let \dostopscaling \donothing \let \dostartmirroring \donothing \let \dostopmirroring \donothing \let \dotransformnextbox\gobblesixarguments % and pass last box %D \macros %D {back_ovalbox} %D %D When we look at the implementation, this is a complicated %D one. There are seven arguments. %D %D \starttyping %D \back_ovalbox {w} {h} {d} {linewidth} {radius} {stroke} {fill} {variant} %D \stoptyping %D %D This command has to return a \type{\vbox} which can be used %D to lay over another one (with text). The radius is in %D degrees, the stroke and fill are~\type{1} (true) of~\type{0} %D (false). \let\back_ovalbox \gobbleeightarguments %D \macros %D {dostartclipping,dostopclipping} %D %D Clipping is implemented in such a way that an arbitrary code %D can be fed. %D %D \starttyping %D \dostartclipping {pathname} {width} {height} %D \dostopclipping %D \stoptyping \let \dostartclipping \gobblethreearguments \let \dostopclipping \donothing %D \macros %D {dostartobject, %D dostopobject, %D doresetobjects, %D doinsertobject} %D %D Reuse of object can reduce the output filesize %D considerably. Reusable objects are implemented with: %D %D \starttyping %D \dostartobject{class}{name}{width}{height}{depth} %D some typeset material %D \dostopobject %D \stoptyping %D %D \starttyping %D \doinsertobject{class}{name} %D \stoptyping %D %D The savings can be huge in interactive texts. The next macro needs %D to be called after a graphic is inserted (in order to clean up %D global references). %D %D \starttyping %D \doresetobjects %D \stoptyping \let \dostartobject \gobblefourarguments \let \dostopobject \donothing \let \doinsertobject \gobbletwoarguments \let \doresetobjects \donothing %D From now on, mapfile loading is also a special; we assume the %D more or less standard dvips syntax. \let \doresetmapfilelist \donothing \let \doloadmapfile \gobbletwoarguments % + - = | filename \let \doloadmapline \gobbletwoarguments % + - = | fileline %D \macros %D {jobsuffix} %D %D By default, \TEX\ produces \DVI\ files which can be %D converted to other filetypes. Sometimes it is handy to %D know what the target file will be. In other driver %D modules we wil set \type {\jobsuffix} to \type {pdf}. %D Backend configuration: \installcorenamespace{backend} \installsetuponlycommandhandler \??backend {backend} \let\jobsuffix\empty \unexpanded\def\back_job_set_suffix#1% % checking could happen in mode {\ifx\jobsuffix\empty\else\resetsystemmode\jobsuffix\fi \edef\jobsuffix{#1}% \ifx\jobsuffix\empty\else\setsystemmode \jobsuffix\fi} \back_job_set_suffix{pdf} % default \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-grk.mkii0000644000175000017500000001515211754241457024267 0ustar norbertnorbert%D \module %D [ file=enco-grk, %D version=2003.03.01, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Greek, %D author=Apostolos Syropoulos, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startmapping[iso-8859-7] % Uppercase Greek letters \definecasemap 193 193 225 % greekAlpha \definecasemap 194 194 226 % greekBeta \definecasemap 195 195 227 % greekGamma \definecasemap 196 196 228 % greekDelta \definecasemap 197 197 229 % greekEpsilon \definecasemap 198 198 230 % greekZeta \definecasemap 199 199 213 % greekEta \definecasemap 200 200 232 % greekTheta \definecasemap 201 201 233 % greekIota \definecasemap 202 202 234 % greekKappa \definecasemap 203 203 235 % greekLambda \definecasemap 204 204 236 % greekMu \definecasemap 205 205 237 % greekNu \definecasemap 206 206 238 % greekXi \definecasemap 207 207 239 % greekOmicron \definecasemap 208 208 240 % greekPi \definecasemap 209 209 241 % greekRho \definecasemap 211 211 243 % greekSigma \definecasemap 212 212 244 % greekTau \definecasemap 213 213 245 % greekUpsilon \definecasemap 214 214 246 % greekPhi \definecasemap 215 215 247 % greekChi \definecasemap 216 216 248 % greekPsi \definecasemap 217 217 249 % greekOmega % Lowercase Greek letters \definecasemap 225 193 225 % greekalpha \definecasemap 226 194 226 % greekbeta \definecasemap 227 195 227 % greekgamma \definecasemap 228 196 228 % greekdelta \definecasemap 229 197 229 % greekepsilon \definecasemap 230 198 230 % greekzeta \definecasemap 213 199 213 % greeketa \definecasemap 232 200 232 % greektheta \definecasemap 233 201 233 % greekiota \definecasemap 234 202 234 % greekkappa \definecasemap 235 203 235 % greeklambda \definecasemap 236 204 236 % greekmu \definecasemap 237 205 237 % greeknu \definecasemap 238 206 238 % greekxi \definecasemap 239 207 239 % greekomicron \definecasemap 240 208 240 % greekpi \definecasemap 241 209 241 % greekrho \definecasemap 242 211 242 % greekfinalsigma \definecasemap 243 211 243 % greekSigma \definecasemap 244 212 244 % greekTau \definecasemap 245 213 245 % greekUpsilon \definecasemap 246 214 246 % greekPhi \definecasemap 247 215 247 % greekChi \definecasemap 248 216 248 % greekPsi \definecasemap 249 217 249 % greekOmega % Accented Uppercase Greek letters \definecasemap 182 193 220 % greekAlphatonos \definecasemap 184 197 221 % greekEpsilontonos \definecasemap 185 199 222 % greekEtatonos \definecasemap 186 201 223 % greekIotatonos \definecasemap 188 207 252 % greekOmicrontonos \definecasemap 190 213 253 % greekUpsilontonos \definecasemap 191 217 254 % greekOmegatonos \definecasemap 218 218 250 % greekIotadialytika \definecasemap 219 219 251 % greekUpsilondialytika % Accented Lowercase Greek letters \definecasemap 220 193 220 % greekalphatonos \definecasemap 221 197 221 % greekepsilontonos \definecasemap 222 199 222 % greeketatonos \definecasemap 223 201 223 % greekiotatonos \definecasemap 252 207 252 % greekomicrontonos \definecasemap 253 213 253 % greekupsilontonos \definecasemap 254 217 254 % greekomegatonos \definecasemap 250 218 250 % greekiotadialytika \definecasemap 251 219 251 % greekupsilondialytika \definecasemap 192 218 192 % greekiotadialytikatonos \definecasemap 224 219 224 % greekupsilondialytikatonos \stopmapping \startencoding[iso-8859-7] % Uppercase Greek letters \definecharacter greekAlpha 193 \definecharacter greekBeta 194 \definecharacter greekGamma 195 \definecharacter greekDelta 196 \definecharacter greekEpsilon 197 \definecharacter greekZeta 198 \definecharacter greekEta 199 \definecharacter greekTheta 200 \definecharacter greekIota 201 \definecharacter greekKappa 202 \definecharacter greekLambda 203 \definecharacter greekMu 204 \definecharacter greekNu 205 \definecharacter greekXi 206 \definecharacter greekOmicron 207 \definecharacter greekPi 208 \definecharacter greekRho 209 \definecharacter greekSigma 211 \definecharacter greekTau 212 \definecharacter greekUpsilon 213 \definecharacter greekPhi 214 \definecharacter greekChi 215 \definecharacter greekPsi 216 \definecharacter greekOmega 217 % Lowercase Greek letters \definecharacter greekalpha 225 \definecharacter greekbeta 226 \definecharacter greekgamma 227 \definecharacter greekdelta 228 \definecharacter greekepsilon 229 \definecharacter greekzeta 230 \definecharacter greeketa 231 \definecharacter greektheta 232 \definecharacter greekiota 233 \definecharacter greekkappa 234 \definecharacter greeklambda 235 \definecharacter greekmu 236 \definecharacter greeknu 237 \definecharacter greekxi 238 \definecharacter greekomicron 239 \definecharacter greekpi 240 \definecharacter greekrho 241 \definecharacter greekfinalsigma 242 \definecharacter greeksigma 243 \definecharacter greektau 244 \definecharacter greekupsilon 245 \definecharacter greekphi 246 \definecharacter greekchi 247 \definecharacter greekpsi 248 \definecharacter greekomega 249 % Accented Uppercase Greek letters \definecharacter greekAlphatonos 182 \definecharacter greekEpsilontonos 184 \definecharacter greekEtatonos 185 \definecharacter greekIotatonos 186 \definecharacter greekOmicrontonos 188 \definecharacter greekUpsilontonos 190 \definecharacter greekOmegatonos 191 \definecharacter greekIotadialytika 218 \definecharacter greekUpsilondialytika 219 % Accented Lowercase Greek letters \definecharacter greekalphatonos 220 \definecharacter greekepsilontonos 221 \definecharacter greeketatonos 222 \definecharacter greekiotatonos 223 \definecharacter greekomicrontonos 252 \definecharacter greekupsilontonos 253 \definecharacter greekomegatonos 254 \definecharacter greekiotadialytika 250 \definecharacter greekupsilondialytika 251 \definecharacter greekiotadialytikatonos 192 \definecharacter greekupsilondialytikatonos 224 % Miscellaneous Greek symbols \definecharacter greekleftquot 171 \definecharacter greekrightquot 187 \definecharacter greektonos 180 \definecharacter greekdialytikatonos 181 \definecharacter greekapostrophos 162 \stopencoding context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-aux.mkiv0000644000175000017500000067467612161703335024411 0ustar norbertnorbert%D \module %D [ file=syst-aux, % merge of syst-gen cum suis %D version=1996.03.20, %D title=\CONTEXT\ System Macros, %D subtitle=General, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 There are some references to \LUA\ variants here but these concern %D (often old) experiments, moved from local test modules to here, %D cleaned up, but not really used. After all it's not that urgent %D and replacing helpers is a delicate process. Don't depend on it. \registerctxluafile{syst-aux}{1.001} %D This is a stripped down combination of: %D %D \startitemize %D \item \type {syst-gen.tex} %D \item \type {syst-ext.tex} %D \item \type {syst-new.tex} %D \stopitemize %D %D We keep them around (for \MKII) so you can find comments, %D experiences, intermediate versions and cleaner variants %D there (and also non-\ETEX\ variants). %D %D Contrary to the older files, we now assume that this one %D is used in \CONTEXT\ and therefore we might also assume that %D some basic functionality is available. %D %D The original files contain previous implementations and notes about %D performance. This file will be stripped down in due time. %D Some of the macros here were only used in the bibliography module. They %D have been be moved to a separate syst module since the bib module is no %D longer using them. Some more will go away. \unprotect %D \macros %D {unexpanded} %D %D Because we use this module only in \MKIV, we have removed the %D old protection code. %D %D \starttyping %D \unexpanded\def\somecommand{... ... ...} %D \stoptyping %D %D This overloads the \ETEX\ primitive but as we already had an \MKII\ %D solution we keep the same name for a similar mechanism. \let\unexpanded\normalprotected % %D \macros % %D {expunded} % %D % %D \unexpanded\edef\TestA{zzz} % %D \edef\TestB{zzz} % %D % %D \doifelse {\TestA} {\TestB} {WRONG} {OKAY} \par % %D \doifelse {\TestA} {\expunded\TestB} {WRONG} {OKAY} \par % %D \doifelse {\expunded\TestA} {\TestB} {OKAY} {WRONG} \par % %D \doifelse {\expunded\TestA} {\expunded\TestB} {OKAY} {WRONG} \par % %def\expunded#1{\normalexpanded\expandafter{#1}} % \def\expunded#1{\expandafter\empty#1} % used within an edef anyway %D As we don't have namespace definers yet, we use a special one: \newcount\c_syst_helpers_n_of_namespaces \c_syst_helpers_n_of_namespaces\pluseight % 1-8 reserved for catcodes \def\v_interfaces_prefix_template_system{\number \c_syst_helpers_n_of_namespaces>>} %def\v_interfaces_prefix_template_system{\characters\c_syst_helpers_n_of_namespaces>>} % no \characters yet \unexpanded\def\installsystemnamespace#1% maybe move this to syst-ini {\ifcsname ??#1\endcsname \writestatus\m!system{duplicate system namespace '#1'}\wait \else \global\advance\c_syst_helpers_n_of_namespaces\plusone \expandafter\edef\csname ??#1\endcsname{\v_interfaces_prefix_template_system}% \fi} %D \macros %D {normalspace} %D %D There is already \type{\space} but just to be sure we also %D provide: \def\normalspace{ } %D \macros %D {!!count, !!toks, !!dimen, !!box, %D !!width, !!height, !!depth, !!string, !!done} %D %D We define some more \COUNTERS\ and \DIMENSIONS. We also %D define some shortcuts to the local scatchregisters~0, 2, 4, %D 6 and~8. \newcount\!!counta \newtoks\!!toksa \newdimen\!!dimena \newbox\!!boxa \newcount\!!countb \newtoks\!!toksb \newdimen\!!dimenb \newbox\!!boxb \newcount\!!countc \newtoks\!!toksc \newdimen\!!dimenc \newbox\!!boxc \newcount\!!countd \newtoks\!!toksd \newdimen\!!dimend \newbox\!!boxd \newcount\!!counte \newtoks\!!tokse \newdimen\!!dimene \newbox\!!boxe \newcount\!!countf \newtoks\!!toksf \newdimen\!!dimenf \newbox\!!boxf \newdimen\!!dimeng \newdimen\!!dimenh \newdimen\!!dimeni \newdimen\!!dimenj \newdimen\!!dimenk \let\!!stringa\empty \let\!!stringb\empty \let\!!stringc\empty \let\!!stringd\empty \let\!!stringe\empty \let\!!stringf\empty \newdimen\!!widtha \newdimen\!!heighta \newdimen\!!deptha \newdimen\!!widthb \newdimen\!!heightb \newdimen\!!depthb \newdimen\!!widthc \newdimen\!!heightc \newdimen\!!depthc \newdimen\!!widthd \newdimen\!!heightd \newdimen\!!depthd \newif\if!!donea \newif\if!!doneb \newif\if!!donec \newif\if!!doned \newif\if!!donee \newif\if!!donef \def\!!zerocount {0} % alongside \zerocount \def\!!minusone {-1} % alongside \minusone \def\!!plusone {1} % alongside \plusone \def\!!plustwo {2} % alongside \plustwo \def\!!plusthree {3} % alongside \plusthree \setnewconstant \uprotationangle 0 \setnewconstant\rightrotationangle 90 \setnewconstant \downrotationangle 180 \setnewconstant \leftrotationangle 270 \ifdefined\data \else \let\data \relax \fi % dep checker %D \macros %D {s!,c!,e!,p!,v!,@@,??} %D %D To save memory, we use constants (sometimes called %D variables). Redefining these constants can have disastrous %D results. \def\v!prefix! {v!} \def\c!prefix! {c!} \def\s!prefix! {s!} \def\s!next {next} \def\s!default {default} \def\s!dummy {dummy} \def\s!unknown {unknown} \def\s!do {do} \def\s!dodo {dodo} \def\s!complex {complex} \def\s!start {start} \def\s!simple {simple} \def\s!stop {stop} \def\s!empty {empty} %D These are not needed any more now that we have wide screens (and %D bytes come cheap). \let\@EA \singleexpandafter \let\@EAEAEA \doubleexpandafter \let\@EAEAEAEAEAEA\tripleexpandafter \let\@NX \noexpand \def\@EAEA {\expandafter\expandafter} % can often be avoided %D Sometimes we pass macros as arguments to commands that don't expand them %D before interpretation. Such commands can be enclosed with \type {\expanded}, %D like: %D %D \starttyping %D \expanded{\setupsomething[\alfa]} %D \stoptyping %D %D Such situations occur for instance when \type{\alfa} is a commalist or when data %D stored in macros is fed to index of list commands. If needed, one should use %D \type{\noexpand} inside the argument. Later on we will meet some more clever %D alternatives to this command. Beware, only the simple one has \type {\noexpand} %D before its argument. \let\m_syst_helpers_expanded\empty \unexpanded\def\expanded#1% {\xdef\m_syst_helpers_expanded{\noexpand#1}\m_syst_helpers_expanded} \unexpanded\def\startexpanded#1\stopexpanded {\xdef\m_syst_helpers_expanded{#1}\m_syst_helpers_expanded} \let\stopexpanded\relax %D Recent \TEX\ engines have a primitive \type {\expanded} and we will use that when %D possible. After all, we can make not expandable macros now. % We cannot use the next variant as first we need to adapt \type {##}'s % in callers: % % \def\expanded#1% % {\normalexpanded{\noexpand#1}} % % \def\startexpanded#1\stopexpanded % {\normalexpanded{#1}} %D \macros %D {gobbleoneargument,gobble...arguments} %D %D The next set of macros just do nothing, except that they get rid of a number of %D arguments. \def\gobbleoneargument #1{} \def\gobbletwoarguments #1#2{} \def\gobblethreearguments#1#2#3{} \def\gobblefourarguments #1#2#3#4{} \def\gobblefivearguments #1#2#3#4#5{} \def\gobblesixarguments #1#2#3#4#5#6{} \def\gobblesevenarguments#1#2#3#4#5#6#7{} \def\gobbleeightarguments#1#2#3#4#5#6#7#8{} \def\gobbleninearguments #1#2#3#4#5#6#7#8#9{} \def\gobbletenarguments #1{\gobbleninearguments} \def\gobbleoneoptional [#1]{} \def\gobbletwooptionals [#1][#2]{} \def\gobblethreeoptionals[#1][#2][#3]{} \def\gobblefouroptionals [#1][#2][#3][#4]{} \def\gobblefiveoptionals [#1][#2][#3][#4][#5]{} %D Reserved macros for tests: \let\donothing\empty \let\m_syst_string_one \empty \let\m_syst_string_two \empty \let\m_syst_string_three\empty \let\m_syst_string_four \empty \let\m_syst_action_yes \empty \let\m_syst_action_nop \empty %D \macros %D {doifnextcharelse} %D %D When we started using \TEX\ in the late eighties, our %D first experiences with programming concerned a simple shell %D around \LATEX. The commands probably use most at \PRAGMA, %D are the itemizing ones. One of those few shell commands took %D care of an optional argument, that enabled us to specify %D what kind of item symbol we wanted. Without understanding %D anything we were able to locate a \LATEX\ macro that could %D be used to inspect the next character. %D %D It's this macro that the ancester of the next one presented %D here. It executes one of two actions, dependant of the next %D character. Disturbing spaces and line endings, which are %D normally interpreted as spaces too, are skipped. %D %D \starttyping %D \doifnextcharelse {karakter} {then ...} {else ...} %D \stoptyping %D %D This macro differs from the original in the use of \type %D {\localnext} because we don't want clashes with \type %D {\next}. \unexpanded\def\doifnextcharelse#1#2#3% #1 should not be {} ! {\let\charactertoken=#1% = needed here \def\m_syst_action_yes{#2}% \def\m_syst_action_nop{#3}% \futurelet\nexttoken\syst_helpers_inspect_next_character} \def\syst_helpers_inspect_next_character {\ifx\nexttoken\blankspace \expandafter\syst_helpers_reinspect_next_character \else \expandafter\syst_helpers_inspect_next_character_indeed \fi} \def\syst_helpers_inspect_next_character_indeed {\ifx\nexttoken\charactertoken \expandafter\m_syst_action_yes \else \expandafter\m_syst_action_nop \fi} %D Because we will mostly use this macro for testing if the next %D character is \type {[}, we also make a slightly faster variant %D as it is not uncommon to have tens of thousands of calls to this %D test in a run. Of course it also is more convenient to read a %D trace then. % We could make variants without the \if_next_blank_space_token but % the overhead is only .1 sec on 3.5 for 10^6 tests and often that % branch is not entered anyway. The fast variants with less checking % do make a difference however: % \testfeature{1000000}{\doifnextoptionalelse \gobbleoneargument\gobbleoneargument[} % 2.902s % \testfeature{1000000}{\doifnextoptionalcselse \gobbleoneargument\gobbleoneargument[} % 2.590s % \testfeature{1000000}{\doiffastoptionalcheckelse \gobbleoneargument\gobbleoneargument[} % 2.387s % \testfeature{1000000}{\doiffastoptionalcheckcselse\gobbleoneargument\gobbleoneargument[} % 2.168s \newif\if_next_blank_space_token \let\syst_helpers_next_optional_character_token=[ \unexpanded\def\doifnextoptionalelse#1#2% {\def\m_syst_action_yes{#1}% \def\m_syst_action_nop{#2}% \let\if_next_blank_space_token\iffalse \futurelet\nexttoken\syst_helpers_inspect_next_optional_character} \unexpanded\def\doifnextoptionalcselse#1#2% \cs \cs (upto 10% faster) {\let\m_syst_action_yes#1% \let\m_syst_action_nop#2% \let\if_next_blank_space_token\iffalse \futurelet\nexttoken\syst_helpers_inspect_next_optional_character} \def\syst_helpers_inspect_next_optional_character {\ifx\nexttoken\blankspace \expandafter\syst_helpers_reinspect_next_optional_character \else \expandafter\syst_helpers_inspect_next_optional_character_indeed \fi} \def\syst_helpers_inspect_next_optional_character_indeed {\ifx\nexttoken\syst_helpers_next_optional_character_token \expandafter\m_syst_action_yes \else \expandafter\m_syst_action_nop \fi} \let\syst_helpers_next_bgroup_character_token\bgroup \unexpanded\def\doifnextbgroupelse#1#2% {\def\m_syst_action_yes{#1}% \def\m_syst_action_nop{#2}% \let\if_next_blank_space_token\iffalse \futurelet\nexttoken\syst_helpers_inspect_next_bgroup_character} \def\syst_helpers_inspect_next_bgroup_character {\ifx\nexttoken\blankspace \expandafter\syst_helpers_reinspect_next_bgroup_character \else \expandafter\syst_helpers_inspect_next_bgroup_character_indeed \fi} \def\syst_helpers_inspect_next_bgroup_character_indeed {\ifx\nexttoken\syst_helpers_next_bgroup_character_token \expandafter\m_syst_action_yes \else \expandafter\m_syst_action_nop \fi} \let\syst_helpers_next_parenthesis_character_token( \unexpanded\def\doifnextparenthesiselse#1#2% {\def\m_syst_action_yes{#1}% \def\m_syst_action_nop{#2}% \let\if_next_blank_space_token\iffalse \futurelet\nexttoken\syst_helpers_inspect_next_parenthesis_character} \def\syst_helpers_inspect_next_parenthesis_character {\ifx\nexttoken\blankspace \expandafter\syst_helpers_reinspect_next_parenthesis_character \else \expandafter\syst_helpers_inspect_next_parenthesis_character_indeed \fi} \def\syst_helpers_inspect_next_parenthesis_character_indeed {\ifx\nexttoken\syst_helpers_next_parenthesis_character_token \expandafter\m_syst_action_yes \else \expandafter\m_syst_action_nop \fi} %D The next one is handy in predictable situations: \unexpanded\def\doiffastoptionalcheckelse#1#2% {\def\m_syst_action_yes{#1}% \def\m_syst_action_nop{#2}% \futurelet\nexttoken\syst_helpers_do_if_fast_optional_check_else} \unexpanded\def\doiffastoptionalcheckcselse#1#2% \cs \cs {\let\m_syst_action_yes#1% \let\m_syst_action_nop#2% \futurelet\nexttoken\syst_helpers_do_if_fast_optional_check_else} \def\syst_helpers_do_if_fast_optional_check_else {\ifx\nexttoken\syst_helpers_next_optional_character_token \expandafter\m_syst_action_yes \else \expandafter\m_syst_action_nop \fi} %D This macro uses some auxiliary macros. Although we were able to program quite %D complicated things, I only understood these after rereading the \TEX book. The %D trick is in using a command with a one character name. Such commands differ from %D the longer ones in the fact that trailing spaces are {\em not} skipped. This %D enables us to indirectly define a long named macro that gobbles a space. In the %D first line we define \type {\blankspace}. Next we make \type {\:} equivalent to %D \type {\reinspect...}. This one||character command is expanded before the next %D \type {\def} comes into action. This way the space after \type {\:} becomes a %D delimiter of the longer named \type {\reinspectnextcharacter}. % try: \expandafter\def\firstofoneargument{\syst_helpers_reinspect_next_character} {...} \let\next\: \def\:{\let\blankspace= } \: \def\:{\syst_helpers_reinspect_next_character} \expandafter\def\: {\let\if_next_blank_space_token\iftrue\futurelet\nexttoken\syst_helpers_inspect_next_character} \def\:{\syst_helpers_reinspect_next_optional_character} \expandafter\def\: {\let\if_next_blank_space_token\iftrue\futurelet\nexttoken\syst_helpers_inspect_next_optional_character} \def\:{\syst_helpers_reinspect_next_bgroup_character} \expandafter\def\: {\let\if_next_blank_space_token\iftrue\futurelet\nexttoken\syst_helpers_inspect_next_bgroup_character} \def\:{\syst_helpers_reinspect_next_parenthesis_character} \expandafter\def\: {\let\if_next_blank_space_token\iftrue\futurelet\nexttoken\syst_helpers_inspect_next_parenthesis_character} \let\:\next %D \macros %D {setvalue,setgvalue,setevalue,setxvalue, %D letvalue,letgvalue,getvalue,resetvalue, %D undefinevalue,ignorevalue} %D %D \TEX's primitive \type {\csname} can be used to construct all kind of commands %D that cannot be defined with \type {\def} and \type {\let}. Every macro programmer %D sooner or later wants macros like these. %D %D \starttyping %D \setvalue {name}{...} = \def\name{...} %D \setgvalue {name}{...} = \gdef\name{...} %D \setevalue {name}{...} = \edef\name{...} %D \setxvalue {name}{...} = \xdef\name{...} %D \letvalue {name}=\... = \let\name=\... %D \letgvalue {name}=\... = \global\let\name=\... %D \getvalue {name} = \name %D \resetvalue {name} = \def\name{} %D \stoptyping %D %D As we will see, \CONTEXT\ uses these commands many times, which is mainly due to %D its object oriented and parameter driven character. \def\setvalue #1{\expandafter \def\csname#1\endcsname} \def\setgvalue #1{\expandafter\gdef\csname#1\endcsname} \def\setevalue #1{\expandafter\edef\csname#1\endcsname} \def\setxvalue #1{\expandafter\xdef\csname#1\endcsname} \def\getvalue #1{\csname#1\endcsname} \def\letvalue #1{\expandafter\let\csname#1\endcsname} \def\letgvalue #1{\global\expandafter\let\csname#1\endcsname} \def\resetvalue #1{\expandafter\let\csname#1\endcsname\empty} \def\undefinevalue#1{\expandafter\let\csname#1\endcsname\undefined} \def\ignorevalue#1#2{\expandafter\let\csname#1\endcsname\empty} \def\setuvalue #1{\normalprotected\expandafter \def\csname#1\endcsname} \def\setuevalue #1{\normalprotected\expandafter\edef\csname#1\endcsname} \def\setugvalue #1{\normalprotected\expandafter\gdef\csname#1\endcsname} \def\setuxvalue #1{\normalprotected\expandafter\xdef\csname#1\endcsname} \unexpanded\def\getuvalue#1{\csname#1\endcsname} %D \macros %D {globallet,glet} %D %D In \CONTEXT\ of May 2000 using \type {\globallet} instead of the two %D tokens will save us some $300\times4=1200$ bytes of format file on a 32~bit %D system. Not that it matters much today. This shortcut is already defined: \unexpanded\def\glet{\global\let} \let\globallet\glet %D \macros %D {doifundefined,doifdefined, %D doifundefinedelse,doifdefinedelse, %D doifalldefinedelse} %D %D The standard way of testing if a macro is defined is comparing its meaning with %D another undefined one, usually \type{\undefined}. To garantee correct working of %D the next set of macros, \type{\undefined} may never be defined! %D %D \starttyping %D \doifundefined {string} {...} %D \doifdefined {string} {...} %D \doifundefinedelse {string} {then ...} {else ...} %D \doifdefinedelse {string} {then ...} {else ...} %D \doifalldefinedelse {commalist} {then ...} {else ...} %D \stoptyping %D %D Every macroname that \TEX\ builds gets an entry in the hash table, which is of %D limited size. It is expected that \ETEX\ will offer a less memory||consuming %D alternative. %D Although it will probably never be a big problem, it is good to be aware of the %D difference between testing on a macro name to be build by using \type{\csname} and %D \type{\endcsname} and testing the \type{\name} directly. %D %D \starttyping %D \expandafter\ifx\csname NameA\endcsname\relax ... \else ... \fi %D %D \ifundefined\NameB ... \else ... \fi %D \stoptyping \suppressifcsnameerror\plusone \def\doifundefinedelse#1% {\ifcsname#1\endcsname \expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments \fi} \def\doifdefinedelse#1% {\ifcsname#1\endcsname \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments \fi} \def\doifundefined#1% {\ifcsname#1\endcsname \expandafter\gobbleoneargument\else\expandafter\firstofoneargument \fi} \def\doifdefined#1% {\ifcsname#1\endcsname \expandafter\firstofoneargument\else\expandafter\gobbleoneargument \fi} %D \macros %D {letbeundefined} %D %D Testing for being undefined comes down to testing on \type {\relax} when we use %D \type {\csname}, but when using \type {\ifx}, we test on being \type %D {\undefined}! In \ETEX\ we have \type {\ifcsname} and that way of testing on %D existance is not the same as the one described here. Therefore we introduce: \def\letbeundefined#1% potential stack buildup when used \global {\expandafter\let\csname#1\endcsname\undefined} \def\localundefine#1% conditional {\ifcsname#1\endcsname\expandafter\let\csname#1\endcsname\undefined\fi} \def\globalundefine#1% conditional {\ifcsname#1\endcsname\expandafter\global\let\csname#1\endcsname\undefined\fi} %D Beware, being \type {\undefined} in \ETEX\ means that the macro {\em is} defined! %D %D When we were developing the scientific units module, we encountered different %D behavior in text and math mode, which was due to this grouping subtilities. We %D therefore decided to use \type{\begingroup} instead of \type{\bgroup}. \unexpanded\def\doifalldefinedelse#1% {\begingroup \donetrue % we could use a reserved one and avoid the group \processcommalist[#1]\syst_helpers_do_if_all_defined_else \ifdone \endgroup\expandafter\firstoftwoarguments \else \endgroup\expandafter\secondoftwoarguments \fi} \def\syst_helpers_do_if_all_defined_else#1% {\ifcsname#1\endcsname\else \donefalse \expandafter\quitcommalist % added \fi} %D \macros %D {doif,doifelse,doifnot} %D %D Programming in \TEX\ differs from programming in procedural languages like %D \MODULA. This means that one --- well, let me speek for myself --- tries to do %D the things in the well known way. Therefore the next set of \type{\ifthenelse} %D commands were between the first ones we needed. A few years later, the opposite %D became true: when programming in \MODULA, I sometimes miss handy things like %D grouping, runtime redefinition, expansion etc. While \MODULA\ taught me to %D structure, \TEX\ taught me to think recursive. %D %D \starttyping %D \doif {string1} {string2} {...} %D \doifnot {string1} {string2} {...} %D \doifelse {string1} {string2} {then ...}{else ...} %D \stoptyping \unexpanded\def\doif#1#2% {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{#2}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnot#1#2% {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{#2}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \unexpanded\def\doifelse#1#2% {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{#2}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifempty,doifemptyelse,doifnotempty} %D %D We complete our set of conditionals with: %D %D \starttyping %D \doifempty {string} {...} %D \doifnotempty {string} {...} %D \doifemptyelse {string} {then ...} {else ...} %D \stoptyping %D %D This time, the string is not expanded. \unexpanded\def\doifemptyelse#1% {\def\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifempty#1% {\def\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnotempty#1% {\def\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D \macros %D {doifinset,doifnotinset,doifinsetelse} %D %D We can check if a string is present in a comma separated set of strings. %D Depending on the result, some action is taken. %D %D \starttyping %D \doifinset {string} {string,...} {...} %D \doifnotinset {string} {string,...} {...} %D \doifinsetelse {string} {string,...} {then ...} {else ...} %D \stoptyping % !0nop=\doifinsetelse{ccc}{,}{yes}{nop} % !0nop=\doifinsetelse{ccc}{,,}{yes}{nop} % !0nop=\doifinsetelse{ccc}{,,,}{yes}{nop} % !1nop=\doifinsetelse{}{}{yes}{nop} % !2yes=\doifinsetelse{aaa}{bbb,ccc,ddd,aaa,eee}{yes}{nop} % !3nop=\doifinsetelse{aaa}{bbb}{yes}{nop} % !4yes=\doifinsetelse{aaa}{aaa}{yes}{nop} % !5nop=\doifinsetelse{aaaa}{bbb,ccc,ddd,aaa,eee}{yes}{nop} % !6nop=\doifinsetelse{}{}{yes}{nop} % !7nop=\doifinsetelse{}{aaa}{yes}{nop} % !8nop=\doifinsetelse{aaa}{}{yes}{nop} % !1=\doifinset{}{}{yes} % !2yes=\doifinset{aaa}{bbb,ccc,ddd,aaa,eee}{yes} % !3=\doifinset{aaa}{bbb}{yes} % !4yes=\doifinset{aaa}{aaa}{yes} % !5=\doifinset{}{}{yes} % !6=\doifinset{aaa}{}{yes} % !1yes=\doifnotinset{}{}{yes} % !2=\doifnotinset{aaa}{bbb,ccc,ddd,aaa,eee}{yes} % !3yes=\doifnotinset{aaa}{bbb}{yes} % !4=\doifnotinset{aaa}{aaa}{yes} % !5yes=\doifnotinset{}{}{yes} % !6yes=\doifnotinset{aaa}{}{yes} \def\v_syst_helpers_right_optional_bracket{]} \def\syst_helpers_do_quit_if_item_in_set_else#1],\relax{\firstoftwoarguments} \def\syst_helpers_do_quit_if_item_in_set #1],\relax{\firstofoneargument} \def\syst_helpers_do_quit_if_item_not_in_set #1],\relax{\gobbleoneargument} \def\syst_helpers_re_do_if_in_set_else{\expandafter\syst_helpers_do_check_if_item_in_set_else\m_syst_string_two,],\relax} \def\syst_helpers_re_do_if_in_set {\expandafter\syst_helpers_do_check_if_item_in_set \m_syst_string_two,],\relax} \def\syst_helpers_re_do_if_not_in_set {\expandafter\syst_helpers_do_check_if_item_not_in_set \m_syst_string_two,],\relax} \unexpanded\def\doifinsetelse#1% make this two step too {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\thirdofthreearguments \else \expandafter\syst_helpers_do_if_in_set_else \fi} \def\syst_helpers_do_if_in_set_else#1% {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\empty \expandafter\secondoftwoarguments \else \expandafter\syst_helpers_re_do_if_in_set_else \fi} \unexpanded\def\doifinset#1% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\gobbletwoarguments \else \expandafter\syst_helpers_do_if_in_set \fi} \def\syst_helpers_do_if_in_set#1% {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\empty \expandafter\gobbleoneargument \else \expandafter\syst_helpers_re_do_if_in_set \fi} \unexpanded\def\doifnotinset#1% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\secondoftwoarguments \else \expandafter\syst_helpers_do_if_not_in_set \fi} \def\syst_helpers_do_if_not_in_set#1% {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\empty \expandafter\firstofoneargument \else \expandafter\syst_helpers_re_do_if_not_in_set % ...]{true} \fi} \def\syst_helpers_do_check_if_item_in_set_else#1,#2% #2 eats up preceding space {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\empty \expandafter\syst_helpers_do_check_if_item_in_set_else \else \expandafter\syst_helpers_do_do_check_if_item_in_set_else \fi#2} \def\syst_helpers_do_do_check_if_item_in_set_else {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket \expandafter\thirdofthreearguments \else \expandafter\syst_helpers_do_do_do_check_if_item_in_set_else \fi} \def\syst_helpers_do_do_do_check_if_item_in_set_else {\ifx\m_syst_string_one\m_syst_string_two \expandafter\syst_helpers_do_quit_if_item_in_set_else \else \expandafter\syst_helpers_do_check_if_item_in_set_else \fi} \def\syst_helpers_do_check_if_item_in_set#1,#2% #2 eats up preceding space {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\empty \expandafter\syst_helpers_do_check_if_item_in_set \else \expandafter\syst_helpers_do_do_check_if_item_in_set \fi#2} \def\syst_helpers_do_do_check_if_item_in_set {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket \expandafter\gobbletwoarguments \else \expandafter\syst_helpers_do_do_do_check_if_item_in_set \fi} \def\syst_helpers_do_do_do_check_if_item_in_set {\ifx\m_syst_string_one\m_syst_string_two \expandafter\syst_helpers_do_quit_if_item_in_set \else \expandafter\syst_helpers_do_check_if_item_in_set \fi} \def\syst_helpers_do_check_if_item_not_in_set#1,#2% #2 eats up preceding space {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\empty \expandafter\syst_helpers_do_check_if_item_not_in_set \else \expandafter\syst_helpers_do_do_check_if_item_not_in_set \fi#2} \def\syst_helpers_do_do_check_if_item_not_in_set {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket \expandafter\secondoftwoarguments \else \expandafter\syst_helpers_do_do_do_check_if_item_not_in_set \fi} \def\syst_helpers_do_do_do_check_if_item_not_in_set {\ifx\m_syst_string_one\m_syst_string_two \expandafter\syst_helpers_do_quit_if_item_not_in_set \else \expandafter\syst_helpers_do_check_if_item_not_in_set \fi} %D \macros %D {doifcommon,doifnotcommon,doifcommonelse} %D %D Probably the most time consuming tests are those that test for overlap in sets %D of strings. %D %D \starttyping %D \doifcommon {string,...} {string,...} {...} %D \doifnotcommon {string,...} {string,...} {...} %D \doifcommonelse {string,...} {string,...} {then ...} {else ...} %D \stoptyping % !1yes=\doifcommonelse{aaa,bbb,ccc}{aaa,bbb,ccc}{yes}{nop} % !2nop=\doifcommonelse{aaa,bbb,ccc}{ddd,eee,fff}{yes}{nop} % !3nop=\doifcommonelse{aaa}{ddd,eee,fff}{yes}{nop} % !4yes=\doifcommonelse{aaa}{aaa}{yes}{nop} % !5nop=\doifcommonelse{bbb}{aaa}{yes}{nop} % !6nop=\doifcommonelse{}{aaa,bbb,ccc}{yes}{nop} % !7nop=\doifcommonelse{aaa,bbb,ccc}{}{yes}{nop} % !8nop=\doifcommonelse{}{}{yes}{nop} % !9nop=\doifcommonelse{,,}{,,}{yes}{nop} % !9yes=\doifcommonelse{,a,}{,a,}{yes}{nop} % !9yes=\doifcommonelse{,,a,}{,a,}{yes}{nop} % !9yes=\doifcommonelse{,a,}{,,a,}{yes}{nop} % !9yes=\doifcommonelse{,a,}{,,,a,}{yes}{nop} % !9yes=\doifcommonelse{,,a,}{,,,a,}{yes}{nop} \let\m_syst_common_a\empty \let\m_syst_common_b\empty \let\m_syst_common_c\empty \def\syst_helpers_do_quit_if_common_else#1],\relax#2],\relax{\firstoftwoarguments} \def\syst_helpers_do_check_if_common_else_one#1,#2% {\edef\m_syst_common_c{#1}% \ifx\m_syst_common_c\v_syst_helpers_right_optional_bracket \expandafter\thirdofthreearguments \else \expandafter\syst_helpers_do_common_check \fi#2} \def\syst_helpers_do_check_if_common_else_two#1,#2% we can do an empty #1 check too {\edef\commalistelement{#1}% \ifx\commalistelement\v_syst_helpers_right_optional_bracket \expandafter\syst_helpers_re_do_check_if_common_else_one \else \expandafter\syst_helpers_do_do_check_if_common_else_two \fi#2} \def\syst_helpers_do_do_check_if_common_else_two {\ifx\commalistelement\empty \expandafter\syst_helpers_do_check_if_common_else_two \else \expandafter\syst_helpers_do_do_do_check_if_common_else_two \fi} \def\syst_helpers_do_do_do_check_if_common_else_two {\ifx\m_syst_common_c\commalistelement \expandafter\syst_helpers_do_quit_if_common_else \else \expandafter\syst_helpers_do_check_if_common_else_two \fi} \def\syst_helpers_re_do_check_if_common_else_one#1{\syst_helpers_do_check_if_common_else_one} \def\syst_helpers_do_common_check {\expandafter\syst_helpers_do_check_if_common_else_two\m_syst_common_b,],\relax}% \def\syst_helpers_do_do_do_if_common_else {\expandafter\syst_helpers_do_check_if_common_else_one\m_syst_common_a,],\relax} \def\syst_helpers_do_do_if_common_else#1#2#3#4% {\edef\m_syst_common_a{#3}% \edef\m_syst_common_b{#4}% \ifx\m_syst_common_a\empty \expandafter\secondoftwoarguments \else\ifx\m_syst_common_b\empty \expandafter\expandafter\expandafter\secondoftwoarguments \else \expandafter\expandafter\expandafter\syst_helpers_do_do_do_if_common_else \fi\fi #1#2} \unexpanded\def\doifcommonelse{\syst_helpers_do_do_if_common_else\firstoftwoarguments\secondoftwoarguments} \unexpanded\def\doifcommon {\syst_helpers_do_do_if_common_else\firstofoneargument \gobbleoneargument } \unexpanded\def\doifnotcommon {\syst_helpers_do_do_if_common_else\gobbleoneargument \firstofoneargument } %D \macros %D {processcommalist,processcommacommand,quitcommalist, %D processcommalistwithparameters} %D %D We've already seen some macros that take care of comma separated lists. Such %D list can be processed with %D %D \starttyping %D \processcommalist[string,string,...]\commando %D \stoptyping %D %D The user supplied command \type{\commando} receives one argument: the string. %D This command permits nesting and spaces after commas are skipped. Empty sets %D are no problem. %D %D \startbuffer %D \def\dosomething#1{(#1)} %D %D 1: \processcommalist [\hbox{$a,b,c,d,e,f$}] \dosomething \par %D 2: \processcommalist [{a,b,c,d,e,f}] \dosomething \par %D 3: \processcommalist [{a,b,c},d,e,f] \dosomething \par %D 4: \processcommalist [a,b,{c,d,e},f] \dosomething \par %D 5: \processcommalist [a{b,c},d,e,f] \dosomething \par %D 6: \processcommalist [{a,b}c,d,e,f] \dosomething \par %D 7: \processcommalist [] \dosomething \par %D 8: \processcommalist [{[}] \dosomething \par %D \stopbuffer %D %D \typebuffer %D %D Before we show the result, we present the macro's: \newcount\commalevel \installsystemnamespace{nextcommalevel} \def\syst_helpers_do_do_do_process_comma_item {\csname\??nextcommalevel\the\commalevel\endcsname} \def\syst_helpers_do_do_process_comma_item {\ifx\nexttoken\blankspace \expandafter\syst_helpers_re_do_process_comma_item \else \expandafter\syst_helpers_do_do_process_comma_item_indeed \fi} \def\syst_helpers_do_do_process_comma_item_indeed {\ifx\nexttoken]% \expandafter\gobbleoneargument \else \expandafter\syst_helpers_do_do_do_process_comma_item \fi} \def\syst_helpers_do_process_comma_item {\futurelet\nexttoken\syst_helpers_do_do_process_comma_item} %D Empty arguments are not processed. Empty items (\type {,,}) however are %D treated. We have to check for the special case \type {[{a,b,c}]}. \unexpanded\def\processcommalist[% {\futurelet\nexttoken\syst_helpers_do_check_comma_item} \def\syst_helpers_do_check_comma_item {\ifx\nexttoken]% \expandafter\gobblethreearguments \else \expandafter\syst_helpers_do_process_comma_list \fi \relax} % this one preserved the next {} \def\syst_helpers_do_process_comma_list#1]#2% {\global\advance\commalevel \plusone \expandafter\def\csname\??nextcommalevel\the\commalevel\endcsname##1,% {#2{##1}\syst_helpers_do_process_comma_item}% \expandafter\syst_helpers_do_do_process_comma_item\gobbleoneargument#1,]\relax \global\advance\commalevel \minusone } %D One way of quitting a commalist halfway is: \unexpanded\def\quitcommalist {\begingroup\let\syst_helpers_do_process_comma_item\syst_helpers_do_quit_comma_list} \def\syst_helpers_do_quit_comma_list#1]% {\endgroup} \unexpanded\def\quitprevcommalist {\begingroup\let\syst_helpers_do_process_comma_item\syst_helpers_do_quit_prev_comma_list} \def\syst_helpers_do_quit_prev_comma_list#1]% {\let\syst_helpers_do_process_comma_item\syst_helpers_do_quit_comma_list} %D The hack we used for checking the next character \type {\doifnextcharelse} %D is also used here. \let\next\: \def\:{\syst_helpers_re_do_process_comma_item} % \:not saved ? \expandafter\def\: {\futurelet\nexttoken\syst_helpers_do_do_process_comma_item} \let\:\next %D The previous examples lead to: %D %D \getbuffer %D When a list is saved in a macro, we can use a construction like: %D %D \starttyping %D \expandafter\processcommalist\expandafter[\list]\command %D \stoptyping %D %D Such solutions suit most situations, but we wanted a bit more. %D %D \starttyping %D \processcommacommand[string,\stringset,string]\commando %D \stoptyping %D %D where \type{\stringset} is a predefined set, like: %D %D \starttyping %D \def\first{aap,noot,mies} %D \def\second{laatste} %D %D \processcommacommand[\first]\message %D \processcommacommand[\first,second,third]\message %D \processcommacommand[\first,between,\second]\message %D \stoptyping %D %D Commands that are part of the list are expanded, so the use of %D this macro has its limits. \unexpanded\def\processcommacommand[#1]% {\normalexpanded{\processcommalist[#1]}} %D The argument to \type{\command} is not delimited. Because we often %D use \type{[]} as delimiters, we also have: %D %D \starttyping %D \processcommalistwithparameters[string,string,...]\command %D \stoptyping %D %D where \type{\command} looks like: %D %D \starttyping %D \def\command[#1]{... #1 ...} %D \stoptyping \unexpanded\def\processcommalistwithparameters[#1]#2% {\def\syst_helpers_do_process_comma_list_with_parameters##1{#2[##1]}% \processcommalist[#1]\syst_helpers_do_process_comma_list_with_parameters} %D \macros %D {startprocesscommalist,startprocesscommacommand} %D %D Two more: \let\syst_helpers_comma_list_step\relax \unexpanded\def\startprocesscommalist[#1]#2\stopprocesscommalist {\def\syst_helpers_comma_list_step##1{\def\currentcommalistitem{##1}#2}% \processcommalist[#1]\syst_helpers_comma_list_step} \unexpanded\def\startprocesscommacommand[#1]#2\stopprocesscommacommand {\def\syst_helpers_comma_list_step##1{\def\currentcommalistitem{##1}#2}% \normalexpanded{\processcommalist[#1]}\syst_helpers_comma_list_step} \let\stopprocesscommalist \relax \let\stopprocesscommacommand\relax %D \macros %D {processaction, %D processfirstactioninset, %D processallactionsinset} %D %D \CONTEXT\ makes extensive use of a sort of case or switch %D command. Depending of the presence of one or more provided %D items, some actions is taken. These macros can be nested %D without problems. %D %D \starttyping %D \processaction [x] [a=>\a,b=>\b,c=>\c] %D \processfirstactioninset [x,y,z] [a=>\a,b=>\b,c=>\c] %D \processallactionsinset [x,y,z] [a=>\a,b=>\b,c=>\c] %D \stoptyping %D %D We can supply both a \type{default} action and an action %D to be undertaken when an \type{unknown} value is met: %D %D \starttyping %D \processallactionsinset %D [x,y,z] %D [ a=>\a, %D b=>\b, %D c=>\c, %D default=>\default, %D unknown=>\unknown{... \commalistelement ...}] %D \stoptyping %D %D When \type{#1} is empty, this macro scans list \type{#2} for %D the keyword \type{default} and executed the related action %D if present. When \type{#1} is non empty and not in the list, %D the action related to \type{unknown} is executed. Both %D keywords must be at the end of list \type{#2}. Afterwards, %D the actually found keyword is available in %D \type{\commalistelement}. An advanced example of the use of %D this macro can be found in \PPCHTEX, where we completely %D rely on \TEX\ for interpreting user supplied keywords like %D \type{SB}, \type{SB1..6}, \type{SB125} etc. \newcount\processlevel % obsolete: \def\expandactions{\let\expandedaction\edef} \expandactions (see mkii) \unexpanded\def\syst_helpers_do_compare_process_action_a[#1=>#2][#3]% {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_two\s!default \let\commalistelement\empty #2% \fi} % met \quitcommalist tot meer dan 25\% sneller \unexpanded\def\syst_helpers_do_compare_process_action_b[#1=>#2][#3]% {\edef\m_syst_string_two{#1}% \ifx\m_syst_string_one\m_syst_string_two \def\commalistelement{#3}% #2% \expandafter\quitcommalist \else\ifx\m_syst_string_two\s!unknown \def\commalistelement{#3}% beware of loops #2% \fi\fi} \unexpanded\def\processaction[#1]#2[% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \let\syst_helpers_do_compare_process_action\syst_helpers_do_compare_process_action_a \else \let\syst_helpers_do_compare_process_action\syst_helpers_do_compare_process_action_b \fi \edef\syst_helpers_do_process_action##1{\syst_helpers_do_compare_process_action[##1][#1]}% expands #1 \processnextcommalist\relax\relax\syst_helpers_do_process_action[} \unexpanded\def\syst_helpers_do_compare_process_action_c[#1=>#2][#3]% {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{#3}% \ifx\m_syst_string_one\m_syst_string_two \def\commalistelement{#3}% #2% \expandafter\quitprevcommalist \else \edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\s!unknown \def\commalistelement{#3}% #2% \fi \fi} \unexpanded\def\processfirstactioninset[#1]% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\processaction \else \expandafter\syst_helpers_process_first_action_in_set_indeed \fi [#1]} \unexpanded\def\syst_helpers_process_first_action_in_set_indeed[#1]#2[#3]% {\def\syst_helpers_do_process_action##1% {\def\syst_helpers_do_do_process_action####1{\syst_helpers_do_compare_process_action_c[####1][##1]}% \processcommalist[#3]\syst_helpers_do_do_process_action}% \normalexpanded{\processcommalist[#1]}\syst_helpers_do_process_action} \unexpanded\def\syst_helpers_do_compare_process_action_d[#1=>#2][#3]% {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{#3}% \ifx\m_syst_string_one\m_syst_string_two \def\commalistelement{#3}% #2% \expandafter\quitcommalist \else \edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\s!unknown \def\commalistelement{#3}% #2% \fi \fi} \installsystemnamespace{nextactionlevel} \unexpanded\def\syst_helpers_do_process_all_actions_in_set {\csname\??nextactionlevel\the\processlevel\endcsname} \unexpanded\def\processallactionsinset[#1]% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\processaction \else \expandafter\syst_helpers_process_all_actions_in_set_indeed \fi [#1]} \unexpanded\def\syst_helpers_process_all_actions_in_set_indeed[#1]#2[#3]% {\advance\processlevel \plusone \expandafter\def\csname\??nextactionlevel\the\processlevel\endcsname##1% {\def\syst_helpers_do_do_process_action####1{\syst_helpers_do_compare_process_action_d[####1][##1]}% \processcommalist[#3]\syst_helpers_do_do_process_action}% \normalexpanded{\processcommalist[#1]}\syst_helpers_do_process_all_actions_in_set \advance\processlevel\minusone} %D These macros use: \unexpanded\def\processnextcommalist#1#2#3[#4#5]% {#1% \let\nexttoken#4% \global\advance\commalevel \plusone \expandafter\def\csname\??nextcommalevel\the\commalevel\endcsname##1,% {#3{##1}\syst_helpers_do_process_comma_item}% \syst_helpers_do_do_process_comma_item#4#5,]\relax \global\advance\commalevel\minusone #2} %D \macros %D {getfirstcharacter, firstcharacter, remainingcharacters, doiffirstcharacter} %D %D Sometimes the action to be undertaken depends on the %D next character. This macro get this character and puts it in %D \type{\firstcharacter}. %D %D \starttyping %D \getfirstcharacter {string} %D \stoptyping %D %D A two step expansion is used to prevent problems with %D complicated arguments, for instance arguments that %D consist of two or more expandable tokens. \def\getfirstcharacter #1{\ctxcommand{getfirstcharacter(\!!bs#1\!!es)}} \def\doiffirstcharelse#1#2{\ctxcommand{doiffirstcharelse(\!!bs#1\!!es,\!!bs#2\!!es)}} % chr str %D \macros %D {doifinstringelse, doifincsnameelse} %D %D We can check for the presence of a substring in a given %D sequence of characters. %D %D \starttyping %D \doifinsetelse {substring} {string} {then ...} {else ...} %D \stoptyping \let\m_syst_sub_string\empty \unexpanded\def\doifinstringelse#1% {\edef\m_syst_sub_string{#1}% expand #1 here \ifx\m_syst_sub_string\empty \expandafter\thirdofthreearguments \else \expandafter\syst_helpers_do_if_in_string_else_indeed \fi} \unexpanded\def\syst_helpers_do_if_in_string_else_indeed#1% {\syst_helpers_do_if_in_string_else\m_syst_sub_string{#1}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifinstring#1%% {\edef\m_syst_sub_string{#1}% expand #1 here \ifx\m_syst_sub_string\empty \expandafter\gobbletwoarguments \else \expandafter\syst_helpers_do_if_in_string_indeed \fi} \unexpanded\def\syst_helpers_do_if_in_string_indeed#1% {\syst_helpers_do_if_in_string_else\m_syst_sub_string{#1}% \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnotinstring#1%% {\edef\m_syst_sub_string{#1}% expand #1 here \ifx\m_syst_sub_string\empty \expandafter\gobbletwoarguments \else \expandafter\syst_helpers_do_if_not_in_string_indeed \fi} \unexpanded\def\syst_helpers_do_if_not_in_string_indeed#1% {\syst_helpers_do_if_in_string_else\m_syst_sub_string{#1}% \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} % replaces prev \unexpanded\def\syst_helpers_do_if_in_string_else#1#2% ##2 can be {abc} {\expandafter\def\expandafter\syst_helpers_do_do_if_in_string_else \expandafter##\expandafter1#1##2##3\_e_o_s_{\unless\if##2@}% expand #1 here \expandafter\syst_helpers_do_do_if_in_string_else\normalexpanded{#2#1}@@\_e_o_s_} % expand #2 here %D The next alternative proved to be upto twice as fast on %D tasks like checking reserved words in pretty verbatim %D typesetting! This is mainly due to the fact that passing %D (expanded) strings is much slower that passing a macro. %D %D \starttyping %D \doifincsnameelse {substring} {\string} {then ...} {else ...} %D \stoptyping %D %D Where \type{\doifinstringelse} does as much expansion as %D possible, the latter alternative does minimal (one level) %D expansion. \unexpanded\def\syst_helpers_do_if_in_csname_else#1#2% {\def\syst_helpers_do_do_if_in_csname_else##1#1##2##3\_e_o_s_ {\unless\if##2@}% \expandafter\syst_helpers_do_do_if_in_csname_else#2#1@@\_e_o_s_} \unexpanded\def\doifincsnameelse#1#2% {\normalexpanded{\syst_helpers_do_if_in_csname_else{#1}}{#2}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifnumberelse,doifnumber,doifnotnumber} %D %D The next macro executes a command depending of the outcome of a test on %D numerals. This is probably one of the fastest test possible, exept from %D a less robust 10||step \type {\if}||ladder or some tricky \type {\lcode} %D checking. %D %D \starttyping %D \doifnumberelse {string} {then ...} {else ...} %D \stoptyping %D %D The macro accepts \type {123}, \type {abc}, \type {{}}, \type {\getal} and %D \type {\the\count...}. This macro is a rather dirty one. \def\doifnumberelse#1% does not accept counters (fully expandable) {\ifcase0\ifcase1#1\or\or\or\or\or\or\or\or\or\else1\fi\space \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\doifnumber#1% {\ifcase0\ifcase1#1\or\or\or\or\or\or\or\or\or\else1\fi\space \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \def\doifnotnumber#1% {\ifcase0\ifcase1#1\or\or\or\or\or\or\or\or\or\else1\fi\space \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D \macros %D {setpercentdimen} %D %D \starttyping %D \scratchdimen=100pt \setpercentdimen\scratchdimen{10\letterpercent} %D \scratchdimen=100pt \setpercentdimen\scratchdimen{5pt} %D \scratchdimen \percentdimen \hsize {10\letterpercent} %D \stoptyping \def\percentdimen#1#2% dimen percentage (with %) {\dimexpr\ctxcommand{percentageof("#2",\number#1)}\relax} \unexpanded\def\setpercentdimen#1#2% dimen percentage (with %) {#1=\ctxcommand{percentageof("#2",\number#1)}\relax} %D \macros %D {makerawcommalist, %D rawdoinsetelse, %D rawprocesscommalist, %D rawprocessaction} %D %D Some of the commands mentioned earlier are effective but %D slow. When one is desperately in need of faster alternatives %D and when the conditions are predictable safe, the \type{\raw} %D alternatives come into focus. A major drawback is that %D they do not take \type{\c!constants} into account, simply %D because no expansion is done. This is no problem with %D \type{\rawprocesscommalist}, because this macro does not %D compare anything. Expandable macros are permitted as search %D string. %D %D \starttyping %D \makerawcommalist[string,string,...]\stringlist %D \rawdoifinsetelse{string}{string,...}{...}{...} %D \rawprocesscommalist[string,string,...]\commando %D \rawprocessaction[x][a=>\a,b=>\b,c=>\c] %D \stoptyping %D %D Spaces embedded in the list, for instance after commas, %D spoil the search process. The gain in speed depends on the %D length of the argument (the longer the argument, the less %D we gain). \unexpanded\def\makerawcommalist[#1]#2% use \processnext ... here {\def\syst_helpers_do_make_raw_comma_list##1% we don't expand ##1 {\ifx#2\empty \def#2{##1}% \else \expandafter\def\expandafter#2\expandafter{#2,##1}% \fi}% \let#2\empty \processcommalist[#1]\syst_helpers_do_make_raw_comma_list} \def\syst_helpers_raw_process_comma_item#1,#2% #2 eats up preceding space {\if]#1\else \csname\??nextcommalevel\the\commalevel\endcsname{#1}% \expandafter\syst_helpers_raw_process_comma_item \fi#2} \unexpanded\def\rawprocesscommalist[#1]#2% accepteert ook [\cs] {\global\advance\commalevel \plusone \expandafter\let\csname\??nextcommalevel\the\commalevel\endcsname#2% \expandafter\syst_helpers_raw_process_comma_item#1,],% \relax \global\advance\commalevel \minusone } \unexpanded\def\rawprocesscommacommand[#1]% not really needed {\normalexpanded{\rawprocesscommalist[#1]}} % \def\rawdoifinsetelse#1#2{\doifinstringelse{,#1,}{,#2,}} % \def\rawdoifinset #1#2{\doifinstring {,#1,}{,#2,}} \def\m_syst_two_commas{,,} \unexpanded\def\rawdoifinsetelse#1% {\edef\m_syst_sub_string{,#1,}% expand #1 here \ifx\m_syst_sub_string\m_syst_two_commas \expandafter\thirdofthreearguments \else \expandafter\syst_helpers_raw_do_if_in_set_else \fi} \unexpanded\def\syst_helpers_raw_do_if_in_set_else#1% {\syst_helpers_do_if_in_string_else\m_syst_sub_string{,#1,}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\rawdoifinset#1% {\edef\m_syst_sub_string{,#1,}% expand #1 here \ifx\m_syst_sub_string\m_syst_two_commas \expandafter\gobbletwoarguments \else \expandafter\syst_helpers_raw_do_if_in_set \fi} \unexpanded\def\syst_helpers_raw_do_if_in_set#1%% {\syst_helpers_do_if_in_string_else\m_syst_sub_string{,#1,}% \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} %D Some more raw material: \def\syst_helpers_do_raw_process_action[#1][#2]% {\def\syst_helpers_do_do_raw_process_action##1,#1=>##2,##3\_e_o_s_ {\if##3@\else \def\m_syst_helpers_process_action{##2}% \fi}% \syst_helpers_do_do_raw_process_action,#2,#1=>,@\_e_o_s_} \unexpanded\def\rawprocessaction[#1]#2[#3]% {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{undefined}% better \!!undefined \let\m_syst_helpers_process_action\m_syst_string_two \ifx\m_syst_string_one\empty \expandafter\syst_helpers_do_raw_process_action\expandafter[\s!default][#3]% \else \expandafter\syst_helpers_do_raw_process_action\expandafter[\m_syst_string_one][#3]% \ifx\m_syst_helpers_process_action\m_syst_string_two \expandafter\syst_helpers_do_raw_process_action\expandafter[\s!unknown][#3]% \fi \fi \ifx\m_syst_helpers_process_action\m_syst_string_two \else \m_syst_helpers_process_action \fi} %D When we process the list \type{a,b,c,d,e}, the raw routine takes over 30\% less %D time, when we feed $20+$ character strings we gain about 20\%. Alternatives which %D use \type{\futurelet} perform worse. Part of the speedup is due to the %D \type{\let} and \type{\expandafter} in the test. %D \macros %D {dosetvalue,dosetevalue,dosetgvalue,docopyvalue,doresetvalue, %D dogetvalue} %D %D When we are going to do assignments, we have to take multi||linguality into account. %D For the moment we keep things simple and single||lingual. %D %D \starttyping %D \dosetvalue {label} {variable} {value} %D \dosetevalue {label} {variable} {value} %D \dosetgvalue {label} {variable} {value} %D \docopyvalue {to label} {from label} {variable} %D \doresetvalue {label} {variable} %D \stoptyping %D %D These macros are in fact auxiliary ones and are not meant for use outside the %D assignment macros. \def\dosetvalue#1#2% #3 {\expandafter\def\csname#1#2\endcsname} % {#3}} \def\dosetevalue#1#2% #3 {\expandafter\edef\csname#1#2\endcsname} % {#3}} \def\dosetgvalue#1#2% #3 {\expandafter\gdef\csname#1#2\endcsname} % {#3}} \def\doresetvalue#1#2% {\expandafter\let\csname#1#2\endcsname\empty} \def\doignorevalue#1#2#3% {\expandafter\let\csname#1#2\endcsname\empty} \def\docopyvalue#1#2#3% {\expandafter\def\csname#1#3\endcsname{\csname#2#3\endcsname}} %D \macros %D {doassign,undoassign,doassignempty} %D %D Assignments are the backbone of \CONTEXT. Abhorred by the concept of style file %D hacking, we took a considerable effort in building a parameterized system. %D Unfortunately there is a price to pay in terms of speed. Compared to other %D packages and taking the functionality of \CONTEXT\ into account, the total size %D of the format file is still very acceptable. Now how are these assignments done. %D %D Assignments can be realized with: %D %D \starttyping %D \doassign[label][variable=value] %D \undoassign[label][variable=value] %D \stoptyping %D %D and: %D %D \starttyping %D \doassignempty[label][variable=value] %D \stoptyping %D %D Assignments like \type{\doassign} are compatible with: %D %D \starttyping %D \def\labelvariable{value} %D \stoptyping %D %D We do check for the presence of an \type{=} and loudly complain of it's missed. We %D will redefine this macro later on, when a more advanced message mechanism is %D implemented. \newif\iferrorisfatal \unexpanded\def\waitonfatalerror {\iferrorisfatal\wait\fi} \unexpanded\def\showassignerror#1#2% {\writestatus{setup}{missing or ungrouped '=' after '#1' in line #2}% \waitonfatalerror} \unexpanded\def\doassignempty[#1][#2=#3]% {\ifcsname#1#2\endcsname\else\dosetvalue{#1}{#2}{#3}\fi} %D \macros %D {getparameters,geteparameters,getgparameters, %D forgetparameters} %D %D Using the assignment commands directly is not our ideal of user friendly interfacing, %D so we take some further steps. %D %D \starttyping %D \getparameters [label] [...=...,...=...] %D \forgetparameters [label] [...=...,...=...] %D \stoptyping %D %D Again, the label identifies the category a variable belongs to. The second argument %D can be a comma separated list of assignments. %D %D \starttyping %D \getparameters %D [demo] %D [alfa=1, %D beta=2] %D \stoptyping %D %D is equivalent to %D %D \starttyping %D \def\demoalfa{1} %D \def\demobeta{2} %D \stoptyping %D %D %D In the pre||multi||lingual stadium \CONTEXT\ took the next approach. With %D %D \starttyping %D \def\??demo {@@demo} %D \def\!!alfa {alfa} %D \def\!!beta {beta} %D \stoptyping %D %D calling %D %D \starttyping %D \getparameters %D [\??demo] %D [\!!alfa=1, %D \!!beta=2] %D \stoptyping %D %D lead to: %D %D \starttyping %D \def\@@demoalfa{1} %D \def\@@demobeta{2} %D \stoptyping %D %D Because we want to be able to distinguish the \type{!!} pre||tagged user supplied %D variables from internal counterparts, we will introduce a slightly different tag %D in the multi||lingual modules. There we will use \type{c!} or \type{v!}, %D depending on the context. %D %D By calling \type{doassign} directly, we save ourselves some argument passing %D and gain some speed. Whatever optimizations we do, this command will always be %D one of the bigger bottlenecks. The alternative \type{\geteparameters} --- it's %D funny to see that this alternative saw the light so lately --- can be used to do %D expanded assigments. \let\currentvalue\empty \unexpanded\def\getparameters {\dogetparameters\dosetvalue} \unexpanded\def\geteparameters {\dogetparameters\dosetevalue} \unexpanded\def\getgparameters {\dogetparameters\dosetgvalue} \unexpanded\def\getxparameters {\dogetparameters\dosetxvalue} \unexpanded\def\forgetparameters{\dogetparameters\doignorevalue} \let\getexpandedparameters\geteparameters \unexpanded\def\dogetparameters#1[#2]#3[#4% {\if\noexpand#4]% \expandafter\gobbleoneargument \else \let\setsomevalue#1% \def\syst_helpers_get_parameters_assign{\syst_helpers_get_parameters_assign_indeed#2}% \expandafter\syst_helpers_get_parameters \fi#4} \def\syst_helpers_get_parameters#1]% {\xprocesscommaitem#1,],\_e_o_p_} \def\syst_helpers_process_comma_item#1,#2% #2 takes space before , {\if,#1,% dirty trick for testing #1=empty \expandafter\syst_helpers_process_comma_item \else\if]#1% \doubleexpandafter\gobbleoneargument \else \syst_helpers_get_parameters_assign\_e_o_p_#1==\empty\_e_o_p_ \doubleexpandafter\syst_helpers_process_comma_item \fi\fi#2} \def\syst_helpers_assign_error#1#2#3% {\showassignerror{#2}{\the\inputlineno\space(#1)}} \def\syst_helpers_get_parameters_assign_normal#1\_e_o_p_#2=#3=#4#5\_e_o_p_ {\ifx\empty#2\empty \expandafter\syst_helpers_assign_error \else\ifx#4\empty \doubleexpandafter\syst_helpers_assign_error \else \doubleexpandafter\setsomevalue \fi\fi {#1}{#2}{#3}} \def\syst_helpers_get_parameters_assign_error#1\_e_o_p_#2=#3=#4#5\_e_o_p_ {\ifx\empty#2\empty \expandafter\syst_helpers_assign_error \else\ifx#4\empty \doubleexpandafter\syst_helpers_assign_error \else \ifcsname#1#2\endcsname \expandafter\let\expandafter\currentvalue\csname#1#2\endcsname \else \let\currentvalue\empty \fi \doubleexpandafter\setsomevalue \fi\fi {#1}{#2}{#3}} \let\syst_helpers_get_parameters_assign_indeed\syst_helpers_get_parameters_assign_normal \unexpanded\def\doassign [#1][#2]{\let\setsomevalue\dosetvalue \syst_helpers_get_parameters_assign_indeed#1\_e_o_p_#2==\empty\_e_o_p_} \unexpanded\def\doeassign [#1][#2]{\let\setsomevalue\dosetevalue \syst_helpers_get_parameters_assign_indeed#1\_e_o_p_#2==\empty\_e_o_p_} \unexpanded\def\undoassign[#1][#2]{\let\setsomevalue\doresetvalue\syst_helpers_get_parameters_assign_indeed#1\_e_o_p_#2==\empty\_e_o_p_} %D \macros %D {processassignmentlist,processassignmentcommand, %D startprocessassignmentlist,startprocessassignmentcommand} %D %D For Wolfgang: %D %D \starttyping %D \def\showpair#1#2{key:#1, value:#2\par} %D \processassignmentlist[a=1,b=2]\showpair %D \stoptyping %D %D We can optimize this one if needed but it's not a core macro so hardly %D worth the trouble and tokens. \unexpanded\def\processassignmentlist[#1]#2% #2 == \command{key}{value] {\def\syst_helpers_process_assignment_entry##1{#2}% {##2}{##3} % namespace is ignored \dogetparameters\syst_helpers_process_assignment_entry[][#1]} \unexpanded\def\processassignmentcommand[#1]% {\normalexpanded{\processassignmentlist[#1]}} \unexpanded\def\startprocessassignmentlist[#1]#2\stopprocessassignmentlist {\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}% \processassignmentlist[#1]\currentassignmentlistcommand} \unexpanded\def\startprocessassignmentcommand[#1]#2\stopprocessassignmentcommand {\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}% \normalexpanded{\processassignmentlist[#1]}\currentassignmentlistcommand} %D \macros{currentvalue} %D %D Just in case a \type{\getparameter} argument itself ends up inside a \type %D {\write} or other expandable location, our new macro needs a default value. %D %D \starttyping %D \getparameters[xxx][aaa=bbb]\par %D \getparameters[xxx][=bbb]\par %D \getparameters[xxx][aaa=]\par %D \getparameters[xxx][=]\par %D \getparameters[xxx][aaa]\par %D \stoptyping %D \macros %D {expandparameters} %D %D Example usage: %D %D \startbuffer %D \getparameters[taco][name=taco] %D \convertcommand\taconame\to\ascii \ascii %D \expandparameters \getparameters[taco][name=\currentvalue\space hoekwater] %D \convertcommand\taconame\to\ascii \ascii %D \getparameters[taco][name=\currentvalue\space hoekwater] %D \convertcommand\taconame\to\ascii \ascii %D \stopbuffer %D %D \typebuffer %D \startlines %D \getbuffer %D \stoplines %D %D Here we hook in the code (beware, this is the optimized get **): \def\syst_helpers_get_parameters_normal#1]% {\syst_helpers_process_comma_item#1,],\_e_o_p_} \def\syst_helpers_get_parameters_expanded#1]% {\let\dosetnvalue\setsomevalue \let\setsomevalue\dosetevalue \let\syst_helpers_get_parameters_assign_indeed\syst_helpers_get_parameters_assign_error \let\setsomevalue\dosetevalue \syst_helpers_process_comma_item#1,],\_e_o_p_ \let\syst_helpers_get_parameters_assign_indeed\syst_helpers_get_parameters_assign_normal \let\setsomevalue\dosetnvalue \let\syst_helpers_get_parameters\syst_helpers_get_parameters_normal \let\currentvalue\empty} \let\syst_helpers_get_parameters\syst_helpers_get_parameters_normal % ** \unexpanded\def\expandparameters {\let\syst_helpers_get_parameters\syst_helpers_get_parameters_expanded} %D \macros %D {getemptyparameters} %D %D Sometimes we explicitly want variables to default to an %D empty string, so we welcome: %D %D \starttyping %D \getemptyparameters [label] [...=...,...=...] %D \stoptyping \unexpanded\def\getemptyparameters[#1]#2[#3]% {\def\syst_helpers_get_empty_parameters##1{\doassignempty[#1][##1]}% \processcommalist[#3]\syst_helpers_get_empty_parameters} %D \macros %D {copyparameters} %D %D Some \CONTEXT\ commands take their default setups from %D others. All commands that are able to provide backgounds %D or rules around some content, for instance default to the %D standard command for ruled boxes. Is situations like this %D we can use: %D %D \starttyping %D \copyparameters [to-label] [from-label] [name1,name2,...] %D \stoptyping %D %D For instance %D %D \starttyping %D \copyparameters %D [internal][external] %D [alfa,beta] %D \stoptyping %D %D Leads to: %D %D \starttyping %D \def\internalalfa {\externalalfa} %D \def\internalbeta {\externalbeta} %D \stoptyping %D %D By using \type{\docopyvalue} we've prepared this command %D for use in a multi||lingual environment. \unexpanded\def\copyparameters[#1]#2[#3]#4[#5]% {\doifnot{#1}{#3} {\def\syst_helpers_copy_parameter{\docopyvalue{#1}{#3}}% ##1 \processcommalist[#5]\syst_helpers_copy_parameter}} %D \macros %D {ifparameters,checkparameters} %D %D A slightly different one is \type{\checkparameters}, which %D also checks on the presence of a~\type{=}. %D %D The boolean \type{\ifparameters} can be used afterwards. %D Combining both in one \type{\if}||macro would lead to %D problems with nested \type{\if}'s. %D %D \starttyping %D \checkparameters[argument] %D \stoptyping \newif\ifparameters \def\syst_helpers_check_parameters#1=#2#3\_e_o_s_ {\if#2@\parametersfalse\else\parameterstrue\fi} \unexpanded\def\checkparameters[#1]% {\syst_helpers_check_parameters#1=@@\_e_o_s_} %D \macros %D {getfromcommalist,getfromcommacommand, %D commalistelement, %D getcommalistsize,getcommacommandsize} %D %D It's possible to get an element from a commalist or a command representing %D a commalist. %D %D \starttyping %D \getfromcommalist [string] [n] %D \getfromcommacommand [string,\strings,string,...] [n] %D \stoptyping %D %D The difference betwee the two of them is the same as the difference between %D \type {\processcomma...}. The found string is stored in \type %D {\commalistelement}. %D %D We can calculate the size of a comma separated list by using: %D %D \starttyping %D \getcommalistsize [string,string,...] %D \getcommacommandsize [string,\strings,string,...] %D \stoptyping %D %D Afterwards, the length is available in the macro \type {\commalistsize} %D (not a \COUNTER). \newcount\commalistcounter \def\commalistsize{0} \def\syst_helpers_get_comma_list_size#1% {\advance\commalistcounter\plusone} \unexpanded\def\getcommalistsize#1]% don't loose [{#1}] {\commalistcounter\zerocount \processcommalist#1]\syst_helpers_get_comma_list_size % was [{#1}] \edef\commalistsize{\the\commalistcounter}} % \def\getcommacommandsize[#1]% % {\edef\commacommand{#1}% % \scratchtoks\expandafter{\expandafter[\commacommand]}% % \expandafter\getcommalistsize\the\scratchtoks } \unexpanded\def\getcommacommandsize[#1]% {\normalexpanded{\getcommalistsize[#1]}} \def\syst_helpers_get_from_comma_list#1% {\advance\commalistcounter \minusone \ifcase\commalistcounter \def\commalistelement{#1}% \expandafter\quitcommalist \fi} \unexpanded\def\getfromcommalist[#1]#2[#3]% {\let\commalistelement\empty \commalistcounter#3\relax \processcommalist[#1]\syst_helpers_get_from_comma_list} \unexpanded\def\getfromcommacommand[#1]% {\normalexpanded{\getfromcommalist[#1]}} %D Watertight (and efficient) solutions are hard to find, due %D to the handling of braces during parameters passing and %D scanning. Nevertheless: %D %D \startbuffer %D \def\dosomething#1{(#1=\commalistsize) } %D %D \getcommalistsize [\hbox{$a,b,c,d,e,f$}] \dosomething 1 %D \getcommalistsize [{a,b,c,d,e,f}] \dosomething 1 %D \getcommalistsize [{a,b,c},d,e,f] \dosomething 4 %D \getcommalistsize [a,b,{c,d,e},f] \dosomething 4 %D \getcommalistsize [a{b,c},d,e,f] \dosomething 4 %D \getcommalistsize [{a,b}c,d,e,f] \dosomething 4 %D \getcommalistsize [] \dosomething 0 %D \getcommalistsize [{[}] \dosomething 1 %D \stopbuffer %D %D \typebuffer %D %D reports: %D %D \getbuffer %D \macros %D {dogetcommalistelement,dogetcommacommandelement} %D %D For low level (fast) purposes, we can also use the next %D alternative, which can handle 8~elements at most. %D %D \starttyping %D \dogetcommalistelement1\from a,b,c\to\commalistelement %D \stoptyping \def\syst_helpers_get_comma_list_element#1\from#2,#3,#4,#5,#6,#7,#8\to#9% {\edef#9{\ifcase#1\relax\or#2\or#3\or#4\or#5\or#6\or#7\or#8\fi}} \def\dogetcommacommandelement#1\from#2\to% {\expandafter\syst_helpers_get_comma_list_element\expandafter#1\expandafter\from#2,,,,,,\to} %D \macros %D {dosingleargument,dodoubleargument,dotripleargument, %D doquadrupleargument,doquintupleargument,dosixtupleargument, %D doseventupleargument} %D %D When working with delimited arguments, spaces and %D lineendings can interfere. The next set of macros uses %D \TEX' internal scanner for grabbing everything between %D arguments. Forgive me the funny names. %D %D \starttyping %D \dosingleargument\commando = \commando[#1] %D \dodoubleargument\commando = \commando[#1][#2] %D \dotripleargument\commando = \commando[#1][#2][#3] %D \doquadrupleargument\commando = \commando[#1][#2][#3][#4] %D \doquintupleargument\commando = \commando[#1][#2][#3][#4][#5] %D \dosixtupleargument\commando = \commando[#1][#2][#3][#4][#5][#6] %D \doseventupleargument\command = \commando[#1][#2][#3][#4][#5][#6][#7] %D \stoptyping %D %D These macros are used in the following way: %D %D \starttyping %D \def\dosetupsomething[#1][#2]% %D {... #1 ... #2 ...} %D %D \unexpanded\def\setupsomething %D {\dodoubleargument\dosetupsomething} %D \stoptyping %D %D The implementation can be surprisingly simple and needs no %D further explanation, like: %D %D \starttyping %D \def\dosingleargument#1[#2]% %D {#1[#2]} %D \def\dotripleargument#1[#2]#3[#4]#5[#6]% %D {#1[#2][#4][#6]} %D \def\doquintupleargument#1% %D {\def\dodoquintupleargument[##1]##2[##3]##4[##5]##6[##7]##8[##9]% %D {#1[##1][##3][##5][##7][##9]}% %D \dodoquintupleargument} %D \stoptyping %D %D Because \TEX\ accepts 9~arguments at most, we have to use %D two||step solution when getting five or more arguments. %D %D When developing more and more of the real \CONTEXT, we %D started using some alternatives that provided empty %D arguments (in fact optional ones) whenever the user failed %D to supply them. Because this more complicated macros enable %D us to do some checking, we reimplemented the non||empty %D ones. % no longer a mesage: % % \unexpanded\def\dosingleargument {\let\expectedarguments\plusone \dosingleempty } % \unexpanded\def\dodoubleargument {\let\expectedarguments\plustwo \dodoubleempty } % \unexpanded\def\dotripleargument {\let\expectedarguments\plusthree \dotripleempty } % \unexpanded\def\doquadrupleargument {\let\expectedarguments\plusfour \doquadrupleempty } % \unexpanded\def\doquintupleargument {\let\expectedarguments\plusfive \doquintupleempty } % \unexpanded\def\dosixtupleargument {\let\expectedarguments\plussix \dosixtupleempty } % \unexpanded\def\doseventupleargument{\let\expectedarguments\plusseven \doseventupleempty} %D \macros %D {iffirstagument,ifsecondargument,ifthirdargument, %D iffourthargument,iffifthargument,ifsixthargument, %D ifseventhargument} %D %D We use some signals for telling the calling macros if all %D wanted arguments are indeed supplied by the user. \newif\iffirstargument \newif\ifsecondargument \newif\ifthirdargument \newif\iffourthargument \newif\iffifthargument \newif\ifsixthargument \newif\ifseventhargument %D \macros %D {dosingleempty,dodoubleempty,dotripleempty, %D doquadrupleempty,doquintupleempty,dosixtupeempty, %D doseventupleempty} %D %D The empty argument supplying macros mentioned before, look like: %D %D \starttyping %D \dosingleempty \command %D \dodoubleempty \command %D \dotripleempty \command %D \doquadrupleempty \command %D \doquintupleempty \command %D \dosixtuple_empty \command %D \doseventupleempty\command %D \stoptyping %D %D So \type{\dodoubleempty} leads to: %D %D \starttyping %D \command[#1][#2] %D \command[#1][] %D \command[][] %D \stoptyping %D %D Depending of the generousity of the user. Afterwards one can %D use the \type{\if...argument} boolean. For novice: watch %D the stepwise doubling of \type{#}'s \setnewconstant\noexpectedarguments\zerocount \setnewconstant\expectedarguments \zerocount \unexpanded\def\showargumenterror#1#2% {\writestatus{system}{\number#1 argument(s) expected in line #2}} \unexpanded\def\syst_helpers_argument_error {\ifnum\expectedarguments>\noexpectedarguments \showargumenterror{\number\expectedarguments}{\number\inputlineno}% \fi \syst_helpers_argument_reset} \unexpanded\def\syst_helpers_argument_reset {\let\expectedarguments\noexpectedarguments} % \def\test[#1]{(#1)} % % \dosingleempty\test[] xxx\par % \dosingleempty\test xxx\par % % \def\test[#1][#2]{(#1,#2)} % % \dodoubleempty\test[][] xxx\par % \dodoubleempty\test[] xxx\par % \dodoubleempty\test xxx\par % % \def\test[#1][#2][#3]{(#1,#2,#3)} % % \dotripleempty\test[][][] xxx\par % \dotripleempty\test[][] xxx\par % \dotripleempty\test[] xxx\par % \dotripleempty\test xxx\par %D Single: \unexpanded\def\dosingleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\firstargumenttrue#1}% {\syst_helpers_single_empty_one_nop#1}} \def\syst_helpers_single_empty_one_nop#1% {\firstargumentfalse #1[]} %D Double \unexpanded\def\dodoubleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\syst_helpers_double_empty_one_yes#1}% {\syst_helpers_double_empty_one_nop#1}} \def\syst_helpers_double_empty_one_yes#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\secondargumenttrue#1[{#2}]}% {\syst_helpers_double_empty_two_nop#1{#2}}} \def\syst_helpers_double_empty_one_nop#1% {\firstargumentfalse \secondargumentfalse #1[][]} \def\syst_helpers_double_empty_two_nop {\secondargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_double_empty_one_spaced \else \expandafter\syst_helpers_double_empty_one_normal \fi} \def\syst_helpers_double_empty_one_spaced#1#2{#1[{#2}][] } \def\syst_helpers_double_empty_one_normal#1#2{#1[{#2}][]} % Three \unexpanded\def\dotripleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\syst_helpers_triple_empty_one_yes#1}% {\syst_helpers_triple_empty_one_nop#1}} \def\syst_helpers_triple_empty_one_yes#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\syst_helpers_triple_empty_two_yes#1{#2}}% {\syst_helpers_triple_empty_two_nop#1{#2}}} \def\syst_helpers_triple_empty_two_yes#1#2[#3]% {\secondargumenttrue \doifnextoptionalelse {\thirdargumenttrue#1[{#2}][{#3}]}% {\syst_helpers_triple_empty_three_nop#1{#2}{#3}}} \def\syst_helpers_triple_empty_one_nop#1% {\firstargumentfalse \secondargumentfalse \thirdargumentfalse #1[][][]} \def\syst_helpers_triple_empty_two_nop {\secondargumentfalse \thirdargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_triple_empty_two_spaced \else \expandafter\syst_helpers_triple_empty_two_normal \fi} \def\syst_helpers_triple_empty_three_nop {\thirdargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_triple_empty_three_spaced \else \expandafter\syst_helpers_triple_empty_three_normal \fi} \def\syst_helpers_triple_empty_two_spaced #1#2{#1[{#2}][][] } \def\syst_helpers_triple_empty_two_normal #1#2{#1[{#2}][][]} \def\syst_helpers_triple_empty_three_spaced#1#2#3{#1[{#2}][{#3}][] } \def\syst_helpers_triple_empty_three_normal#1#2#3{#1[{#2}][{#3}][]} %D Four: \unexpanded\def\doquadrupleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\syst_helpers_quadruple_empty_one_yes#1}% {\syst_helpers_quadruple_empty_one_nop#1}} \def\syst_helpers_quadruple_empty_one_yes#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\syst_helpers_quadruple_empty_two_yes#1{#2}}% {\syst_helpers_quadruple_empty_two_nop#1{#2}}} \def\syst_helpers_quadruple_empty_two_yes#1#2[#3]% {\secondargumenttrue \doifnextoptionalelse {\syst_helpers_quadruple_empty_three_yes#1{#2}{#3}}% {\syst_helpers_quadruple_empty_three_nop#1{#2}{#3}}} \def\syst_helpers_quadruple_empty_three_yes#1#2#3[#4]% {\thirdargumenttrue \doifnextoptionalelse {\fourthargumenttrue#1[{#2}][{#3}][{#4}]}% {\syst_helpers_quadruple_empty_four_nop#1{#2}{#3}{#4}}} \def\syst_helpers_quadruple_empty_one_nop#1% {\firstargumentfalse \secondargumentfalse \thirdargumentfalse \fourthargumentfalse #1[][][][]} \def\syst_helpers_quadruple_empty_two_nop {\secondargumentfalse \thirdargumentfalse \fourthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quadruple_empty_two_spaced \else \expandafter\syst_helpers_quadruple_empty_two_normal \fi} \def\syst_helpers_quadruple_empty_three_nop {\thirdargumentfalse \fourthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quadruple_empty_three_spaced \else \expandafter\syst_helpers_quadruple_empty_three_normal \fi} \def\syst_helpers_quadruple_empty_four_nop {\fourthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quadruple_empty_four_spaced \else \expandafter\syst_helpers_quadruple_empty_four_normal \fi} \def\syst_helpers_quadruple_empty_two_spaced #1#2{#1[{#2}][][][] } \def\syst_helpers_quadruple_empty_two_normal #1#2{#1[{#2}][][][]} \def\syst_helpers_quadruple_empty_three_spaced #1#2#3{#1[{#2}][{#3}][][] } \def\syst_helpers_quadruple_empty_three_normal #1#2#3{#1[{#2}][{#3}][][]} \def\syst_helpers_quadruple_empty_four_spaced #1#2#3#4{#1[{#2}][{#3}][{#4}][] } \def\syst_helpers_quadruple_empty_four_normal #1#2#3#4{#1[{#2}][{#3}][{#4}][]} %D Five: \unexpanded\def\doquintupleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\syst_helpers_quintuple_empty_one_yes#1}% {\syst_helpers_quintuple_empty_one_nop#1}} \def\syst_helpers_quintuple_empty_one_yes#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\syst_helpers_quintuple_empty_two_yes#1{#2}}% {\syst_helpers_quintuple_empty_two_nop#1{#2}}} \def\syst_helpers_quintuple_empty_two_yes#1#2[#3]% {\secondargumenttrue \doifnextoptionalelse {\syst_helpers_quintuple_empty_three_yes#1{#2}{#3}}% {\syst_helpers_quintuple_empty_three_nop#1{#2}{#3}}} \def\syst_helpers_quintuple_empty_three_yes#1#2#3[#4]% {\thirdargumenttrue \doifnextoptionalelse {\syst_helpers_quintuple_empty_four_yes#1{#2}{#3}{#4}}% {\syst_helpers_quintuple_empty_four_nop#1{#2}{#3}{#4}}} \def\syst_helpers_quintuple_empty_four_yes#1#2#3#4[#5]% {\fourthargumenttrue \doifnextoptionalelse {\fifthargumenttrue#1[{#2}][{#3}][{#4}][{#5}]}% {\syst_helpers_quintuple_empty_five_nop#1{#2}{#3}{#4}{#5}}} \def\syst_helpers_quintuple_empty_one_nop#1% {\firstargumentfalse \secondargumentfalse \thirdargumentfalse \fourthargumentfalse \fifthargumentfalse #1[][][][][]} \def\syst_helpers_quintuple_empty_two_nop {\secondargumentfalse \thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quintuple_empty_two_spaced \else \expandafter\syst_helpers_quintuple_empty_two_normal \fi} \def\syst_helpers_quintuple_empty_three_nop {\thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quintuple_empty_three_spaced \else \expandafter\syst_helpers_quintuple_empty_three_normal \fi} \def\syst_helpers_quintuple_empty_four_nop {\fourthargumentfalse \fifthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quintuple_empty_four_spaced \else \expandafter\syst_helpers_quintuple_empty_four_normal \fi} \def\syst_helpers_quintuple_empty_five_nop {\fifthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_quintuple_empty_five_spaced \else \expandafter\syst_helpers_quintuple_empty_five_normal \fi} \def\syst_helpers_quintuple_empty_two_spaced #1#2{#1[{#2}][][][][] } \def\syst_helpers_quintuple_empty_two_normal #1#2{#1[{#2}][][][][]} \def\syst_helpers_quintuple_empty_three_spaced #1#2#3{#1[{#2}][{#3}][][][] } \def\syst_helpers_quintuple_empty_three_normal #1#2#3{#1[{#2}][{#3}][][][]} \def\syst_helpers_quintuple_empty_four_spaced #1#2#3#4{#1[{#2}][{#3}][{#4}][][] } \def\syst_helpers_quintuple_empty_four_normal #1#2#3#4{#1[{#2}][{#3}][{#4}][][]} \def\syst_helpers_quintuple_empty_five_spaced #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][] } \def\syst_helpers_quintuple_empty_five_normal #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][]} %D Six \unexpanded\def\dosixtupleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\syst_helpers_sixtuple_empty_one_yes#1} {\syst_helpers_sixtuple_empty_one_nop#1}} \def\syst_helpers_sixtuple_empty_one_yes#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\syst_helpers_sixtuple_empty_two_yes#1{#2}}% {\syst_helpers_sixtuple_empty_two_nop#1{#2}}} \def\syst_helpers_sixtuple_empty_two_yes#1#2[#3]% {\secondargumenttrue \doifnextoptionalelse {\syst_helpers_sixtuple_empty_three_yes#1{#2}{#3}}% {\syst_helpers_sixtuple_empty_three_nop#1{#2}{#3}}} \def\syst_helpers_sixtuple_empty_three_yes#1#2#3[#4]% {\thirdargumenttrue \doifnextoptionalelse {\syst_helpers_sixtuple_empty_four_yes#1{#2}{#3}{#4}}% {\syst_helpers_sixtuple_empty_four_nop#1{#2}{#3}{#4}}} \def\syst_helpers_sixtuple_empty_four_yes#1#2#3#4[#5]% {\fourthargumenttrue \doifnextoptionalelse {\syst_helpers_sixtuple_empty_five_yes#1{#2}{#3}{#4}{#5}}% {\syst_helpers_sixtuple_empty_five_nop#1{#2}{#3}{#4}{#5}}} \def\syst_helpers_sixtuple_empty_five_yes#1#2#3#4#5[#6]% {\fifthargumenttrue \doifnextoptionalelse {\sixthargumenttrue#1[{#2}][{#3}][{#4}][{#5}][{#6}]}% {\syst_helpers_sixtuple_empty_six_nop#1{#2}{#3}{#4}{#5}{#6}}} \def\syst_helpers_sixtuple_empty_one_nop#1% {\firstargumentfalse \secondargumentfalse \thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \sixthargumentfalse #1[][][][][][]} \def\syst_helpers_sixtuple_empty_two_nop {\secondargumentfalse \thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_sixtuple_empty_two_spaced \else \expandafter\syst_helpers_sixtuple_empty_two_normal \fi} \def\syst_helpers_sixtuple_empty_three_nop {\thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_sixtuple_empty_three_spaced \else \expandafter\syst_helpers_sixtuple_empty_three_normal \fi} \def\syst_helpers_sixtuple_empty_four_nop {\fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_sixtuple_empty_four_spaced \else \expandafter\syst_helpers_sixtuple_empty_four_normal \fi} \def\syst_helpers_sixtuple_empty_five_nop {\fifthargumentfalse \sixthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_sixtuple_empty_five_spaced \else \expandafter\syst_helpers_sixtuple_empty_five_normal \fi} \def\syst_helpers_sixtuple_empty_six_nop {\sixthargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_sixtuple_empty_six_spaced \else \expandafter\syst_helpers_sixtuple_empty_six_normal \fi} \def\syst_helpers_sixtuple_empty_two_spaced #1#2{#1[{#2}][][][][][] } \def\syst_helpers_sixtuple_empty_two_normal #1#2{#1[{#2}][][][][][]} \def\syst_helpers_sixtuple_empty_three_spaced #1#2#3{#1[{#2}][{#3}][][][][] } \def\syst_helpers_sixtuple_empty_three_normal #1#2#3{#1[{#2}][{#3}][][][][]} \def\syst_helpers_sixtuple_empty_four_spaced #1#2#3#4{#1[{#2}][{#3}][{#4}][][][] } \def\syst_helpers_sixtuple_empty_four_normal #1#2#3#4{#1[{#2}][{#3}][{#4}][][][]} \def\syst_helpers_sixtuple_empty_five_spaced #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][] } \def\syst_helpers_sixtuple_empty_five_normal #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][]} \def\syst_helpers_sixtuple_empty_six_spaced #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][] } \def\syst_helpers_sixtuple_empty_six_normal #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][]} %D Seven: \unexpanded\def\doseventupleempty#1% {\syst_helpers_argument_reset \doifnextoptionalelse {\syst_helpers_seventuple_empty_one_yes#1}% {\syst_helpers_seventuple_empty_one_nop#1}} \def\syst_helpers_seventuple_empty_one_yes#1[#2]% {\firstargumenttrue \doifnextoptionalelse {\syst_helpers_seventuple_empty_two_yes#1{#2}}% {\syst_helpers_seventuple_empty_two_nop#1{#2}}} \def\syst_helpers_seventuple_empty_two_yes#1#2[#3]% {\secondargumenttrue \doifnextoptionalelse {\syst_helpers_seventuple_empty_three_yes#1{#2}{#3}}% {\syst_helpers_seventuple_empty_three_nop#1{#2}{#3}}} \def\syst_helpers_seventuple_empty_three_yes#1#2#3[#4]% {\thirdargumenttrue \doifnextoptionalelse {\syst_helpers_seventuple_empty_four_yes#1{#2}{#3}{#4}}% {\syst_helpers_seventuple_empty_four_nop#1{#2}{#3}{#4}}} \def\syst_helpers_seventuple_empty_four_yes#1#2#3#4[#5]% {\fourthargumenttrue \doifnextoptionalelse {\syst_helpers_seventuple_empty_five_yes#1{#2}{#3}{#4}{#5}}% {\syst_helpers_seventuple_empty_five_nop#1{#2}{#3}{#4}{#5}}} \def\syst_helpers_seventuple_empty_five_yes#1#2#3#4#5[#6]% {\fifthargumenttrue \doifnextoptionalelse {\syst_helpers_seventuple_empty_six_yes#1{#2}{#3}{#4}{#5}{#6}}% {\syst_helpers_seventuple_empty_six_nop#1{#2}{#3}{#4}{#5}{#6}}} \def\syst_helpers_seventuple_empty_six_yes#1#2#3#4#5#6[#7]% {\sixthargumenttrue \doifnextoptionalelse {\seventhargumenttrue#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}]}% {\syst_helpers_seventuple_empty_seven_nop#1{#2}{#3}{#4}{#5}{#6}{#7}}} \def\syst_helpers_seventuple_empty_one_nop#1% {\firstargumentfalse \secondargumentfalse \thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \seventhargumentfalse #1[][][][][][][]} \def\syst_helpers_seventuple_empty_two_nop {\secondargumentfalse \thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \seventhargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_seventuple_empty_two_spaced \else \expandafter\syst_helpers_seventuple_empty_two_normal \fi} \def\syst_helpers_seventuple_empty_three_nop {\thirdargumentfalse \fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \seventhargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_seventuple_empty_three_spaced \else \expandafter\syst_helpers_seventuple_empty_three_normal \fi} \def\syst_helpers_seventuple_empty_four_nop {\fourthargumentfalse \fifthargumentfalse \sixthargumentfalse \seventhargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_seventuple_empty_four_spaced \else \expandafter\syst_helpers_seventuple_empty_four_normal \fi} \def\syst_helpers_seventuple_empty_five_nop {\fifthargumentfalse \sixthargumentfalse \seventhargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_seventuple_empty_five_spaced \else \expandafter\syst_helpers_seventuple_empty_five_normal \fi} \def\syst_helpers_seventuple_empty_six_nop {\sixthargumentfalse \seventhargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_seventuple_empty_six_spaced \else \expandafter\syst_helpers_seventuple_empty_six_normal \fi} \def\syst_helpers_seventuple_empty_seven_nop {\seventhargumentfalse \if_next_blank_space_token \expandafter\syst_helpers_seventuple_empty_seven_spaced \else \expandafter\syst_helpers_seventuple_empty_seven_normal \fi} \def\syst_helpers_seventuple_empty_two_spaced #1#2{#1[{#2}][][][][][][] } \def\syst_helpers_seventuple_empty_two_normal #1#2{#1[{#2}][][][][][][]} \def\syst_helpers_seventuple_empty_three_spaced #1#2#3{#1[{#2}][{#3}][][][][][] } \def\syst_helpers_seventuple_empty_three_normal #1#2#3{#1[{#2}][{#3}][][][][][]} \def\syst_helpers_seventuple_empty_four_spaced #1#2#3#4{#1[{#2}][{#3}][{#4}][][][][] } \def\syst_helpers_seventuple_empty_four_normal #1#2#3#4{#1[{#2}][{#3}][{#4}][][][][]} \def\syst_helpers_seventuple_empty_five_spaced #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][][] } \def\syst_helpers_seventuple_empty_five_normal #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][][]} \def\syst_helpers_seventuple_empty_six_spaced #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][][] } \def\syst_helpers_seventuple_empty_six_normal #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][][]} \def\syst_helpers_seventuple_empty_seven_spaced#1#2#3#4#5#6#7{#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}][] } \def\syst_helpers_seventuple_empty_seven_normal#1#2#3#4#5#6#7{#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}][]} \let\dosingleargument \dosingleempty \let\dodoubleargument \dodoubleempty \let\dotripleargument \dotripleempty \let\doquadrupleargument \doquadrupleempty \let\doquintupleargument \doquintupleempty \let\dosixtupleargument \dosixtupleempty \let\doseventupleargument\doseventupleempty %D \macros %D {strippedcsname} %D %D The next macro can be very useful when using \type{\csname} %D like in: %D %D \starttyping %D \csname if\strippedcsname\something\endcsname %D \stoptyping %D %D This expands to \type{\ifsomething}. \def\strippedcsname {\expandafter\gobbleoneargument\string} %D \macros %D {complexorsimple,complexorsimpleempty} %D %D Setups can be optional. A command expecting a setup is %D prefixed by \type{\complex}, a command without one gets the %D prefix \type{\simple}. Commands like this can be defined by: %D %D \starttyping %D \complexorsimple\command %D \stoptyping %D %D When \type{\command} is followed by a \type{[setup]}, then %D %D \starttyping %D \complexcommand [setup] %D \stoptyping %D %D executes, else we get %D %D \starttyping %D \simplecommand %D \stoptyping %D %D An alternative for \type{\complexorsimple} is: %D %D \starttyping %D \complexorsimpleempty {command} %D \stoptyping %D %D Depending on the presence of \type{[setup]}, this one %D leads to one of: %D %D \starttyping %D \complexcommando [setup] %D \complexcommando [] %D \stoptyping %D %D Many \CONTEXT\ commands started as complex or simple ones, %D but changed into more versatile (more object oriented) ones %D using the \type{\get..argument} commands. \unexpanded\def\complexorsimple#1% {% \relax % prevents lookahead, brrr \doifnextoptionalelse {\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname} {\firstargumentfalse\csname\s!simple \strippedcsname#1\endcsname}} \unexpanded\def\complexorsimpleempty#1% {% \relax % prevents lookahead, brrr \doifnextoptionalelse {\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname} {\firstargumentfalse\csname\s!complex\strippedcsname#1\endcsname[]}} %D \macros %D {definecomplexorsimple,definecomplexorsimpleempty} %D %D The previous commands are used that often that we found it %D worthwile to offer two more alternatives. Watch the build %D in protection. \unexpanded\def\syst_helpers_complex_or_simple#1#2% {\doifnextoptionalelse{\firstargumenttrue#1}{\firstargumentfalse#2}} \unexpanded\def\syst_helpers_complex_or_simple_empty#1% {\doifnextoptionalelse{\firstargumenttrue#1}{\firstargumentfalse#1[]}} \unexpanded\def\definecomplexorsimple#1% {\unexpanded\edef#1{\syst_helpers_complex_or_simple \expandafter\noexpand\csname\s!complex\strippedcsname#1\endcsname \expandafter\noexpand\csname\s!simple \strippedcsname#1\endcsname}} \unexpanded\def\definecomplexorsimpleempty#1% {\unexpanded\edef#1{\syst_helpers_complex_or_simple_empty \expandafter\noexpand\csname\s!complex\strippedcsname#1\endcsname}} %D These commands are called as: %D %D \starttyping %D \definecomplexorsimple\command %D \stoptyping %D %D Of course, we must have available %D %D \starttyping %D \def\complexcommand[#1]{...} %D \def\simplecommand {...} %D \stoptyping %D %D Using this construction saves a few string now and then. %D \macros %D {dosinglegroupempty,dodoublegroupempty,dotriplegroupempty, %D doquadruplegroupempty, doquintuplegroupempty} %D %D We've already seen some commands that take care of %D optional arguments between \type{[]}. The next two commands %D handle the ones with \type{{}}. They are called as: %D %D \starttyping %D \dosinglegroupempty \ineedONEargument %D \dodoublegroupempty \ineedTWOarguments %D \dotriplegroupempty \ineedTHREEarguments %D \doquadruplegroupempty \ineedFOURarguments %D \doquintuplegroupempty \ineedFIVEarguments %D \stoptyping %D We can add additional definitions later when we have defined %D \type {\appendtoks}. \newconditional\c_syst_helpers_permit_spaces_between_groups \unexpanded\def \permitspacesbetweengroups{\settrue \c_syst_helpers_permit_spaces_between_groups} \unexpanded\def\dontpermitspacesbetweengroups{\setfalse\c_syst_helpers_permit_spaces_between_groups} \dontpermitspacesbetweengroups %D We can avoid the nasty if handling in \type {syst-gen} by splitting %D the lot in pieces so that we have no nested \type {\nextarguments} %D potentially being an \type {conditional} token. Okay, these macros %D are not called that often but it saves crap when tracing. \unexpanded\def\syst_helpers_get_grouped_argument#1#2% {\let\syst_helpers_get_grouped_argument_yes#1% \let\syst_helpers_get_grouped_argument_nop#2% \futurelet\nextargument\syst_helpers_get_grouped_argument_indeed} \def\syst_helpers_get_grouped_argument_indeed {\ifx\nextargument\bgroup \expandafter\syst_helpers_get_grouped_argument_a \else \expandafter\syst_helpers_get_grouped_argument_b \fi} \def\syst_helpers_get_grouped_argument_a {\syst_helpers_argument_reset \syst_helpers_get_grouped_argument_yes\syst_helpers_get_grouped_argument_nested} \def\syst_helpers_get_grouped_argument_b {\ifconditional\c_syst_helpers_permit_spaces_between_groups \expandafter\syst_helpers_get_grouped_argument_f \else \expandafter\syst_helpers_get_grouped_argument_d \fi} \def\syst_helpers_get_grouped_argument_d {\syst_helpers_argument_error \syst_helpers_get_grouped_argument_nop\syst_helpers_get_grouped_argument_nested{}} \begingroup \def\\ {\syst_helpers_get_grouped_argument\syst_helpers_get_grouped_argument_yes\syst_helpers_get_grouped_argument_nop} \global\let\syst_helpers_get_grouped_argument_e\\ \endgroup \def\syst_helpers_get_grouped_argument_f {\ifx\nextargument\blankspace \expandafter\syst_helpers_get_grouped_argument_e % g \else \expandafter\syst_helpers_get_grouped_argument_d % h \fi} \def\dosinglegroupempty#1% {\def\syst_helpers_get_grouped_argument_nested {\dontpermitspacesbetweengroups #1}% \syst_helpers_get_grouped_argument\firstargumenttrue\firstargumentfalse} \def\dodoublegroupempty#1% {\def\syst_helpers_get_grouped_argument_nested##1% {\def\syst_helpers_get_grouped_argument_nested {\dontpermitspacesbetweengroups #1{##1}}% \syst_helpers_get_grouped_argument\secondargumenttrue\secondargumentfalse}% \syst_helpers_get_grouped_argument\firstargumenttrue\firstargumentfalse} \def\dotriplegroupempty#1% {\def\syst_helpers_get_grouped_argument_nested##1% {\def\syst_helpers_get_grouped_argument_nested####1% {\def\syst_helpers_get_grouped_argument_nested {\dontpermitspacesbetweengroups #1{##1}{####1}}% \syst_helpers_get_grouped_argument\thirdargumenttrue\thirdargumentfalse}% \syst_helpers_get_grouped_argument\secondargumenttrue\secondargumentfalse}% \syst_helpers_get_grouped_argument\firstargumenttrue\firstargumentfalse} \def\doquadruplegroupempty#1% {\def\syst_helpers_get_grouped_argument_nested##1% {\def\syst_helpers_get_grouped_argument_nested####1% {\def\syst_helpers_get_grouped_argument_nested########1% {\def\syst_helpers_get_grouped_argument_nested {\dontpermitspacesbetweengroups #1{##1}{####1}{########1}}% \syst_helpers_get_grouped_argument\fourthargumenttrue\fourthargumentfalse}% \syst_helpers_get_grouped_argument\thirdargumenttrue\thirdargumentfalse}% \syst_helpers_get_grouped_argument\secondargumenttrue\secondargumentfalse}% \syst_helpers_get_grouped_argument\firstargumenttrue\firstargumentfalse} \def\doquintuplegroupempty#1% {\def\syst_helpers_get_grouped_argument_nested##1% {\def\syst_helpers_get_grouped_argument_nested####1% {\def\syst_helpers_get_grouped_argument_nested########1% {\def\syst_helpers_get_grouped_argument_nested################1% {\def\syst_helpers_get_grouped_argument_nested {\dontpermitspacesbetweengroups #1{##1}{####1}{########1}{################1}}% \syst_helpers_get_grouped_argument\fifthargumenttrue\fifthargumentfalse}% \syst_helpers_get_grouped_argument\fourthargumenttrue\fourthargumentfalse}% \syst_helpers_get_grouped_argument\thirdargumenttrue\thirdargumentfalse}% \syst_helpers_get_grouped_argument\secondargumenttrue\secondargumentfalse}% \syst_helpers_get_grouped_argument\firstargumenttrue\firstargumentfalse} %D These macros can explictly take care of spaces, which means %D that the next definition and calls are valid: %D %D \starttyping %D \def\test#1#2#3{[#1#2#3]} %D %D \dotriplegroupempty\test {a}{b}{c} %D \dotriplegroupempty\test {a}{b} %D \dotriplegroupempty\test {a} %D \dotriplegroupempty\test %D \dotriplegroupempty\test {a} {b} {c} %D \dotriplegroupempty\test {a} {b} %D \dotriplegroupempty\test %D {a} %D {b} %D \stoptyping %D %D And alike. %D \macros %D {firstofoneargument, firstoftwoarguments, firstofthreearguments %D secondoftwoarguments, secondofthreearguments, %D thirdofthreearguments} %D %D The next six macros (dedicated to Taco) can conveniently %D used to select arguments. Their names explain their %D functionality. \def\firstofoneargument #1{#1} \def\firstoftwoarguments #1#2{#1} \def\secondoftwoarguments #1#2{#2} \def\firstofthreearguments #1#2#3{#1} \def\secondofthreearguments #1#2#3{#2} \def\thirdofthreearguments #1#2#3{#3} \def\firstoffourarguments #1#2#3#4{#1} \def\secondoffourarguments #1#2#3#4{#2} \def\thirdoffourarguments #1#2#3#4{#3} \def\fourthoffourarguments #1#2#3#4{#4} \def\firstoffivearguments #1#2#3#4#5{#1} \def\secondoffivearguments #1#2#3#4#5{#2} \def\thirdoffivearguments #1#2#3#4#5{#3} \def\fourthoffivearguments #1#2#3#4#5{#4} \def\fifthoffivearguments #1#2#3#4#5{#5} \def\firstofsixarguments #1#2#3#4#5#6{#1} \def\secondofsixarguments#1#2#3#4#5#6{#2} \def\thirdofsixarguments #1#2#3#4#5#6{#3} \def\fourthofsixarguments#1#2#3#4#5#6{#4} \def\fifthofsixarguments #1#2#3#4#5#6{#5} \def\sixthofsixarguments #1#2#3#4#5#6{#6} \unexpanded\def\firstofoneunexpanded#1{#1} %D \macros %D {globalletempty,letempty, %D letvalueempty,letgvalueempty, %D letvaluerelax,letgvaluerelax} %D %D Trivial: \def\letempty #1{\let#1\empty} \def\globalletempty#1{\global\let#1\empty} \def\letvalueempty #1{\expandafter\let\csname#1\endcsname\empty} \def\letgvalueempty#1{\global\expandafter\let\csname#1\endcsname\empty} \def\letvaluerelax #1{\expandafter\let\csname#1\endcsname\relax} \def\letgvalurelax #1{\global\expandafter\let\csname#1\endcsname\relax} %D \macros %D {wait} %D %D The next macro hardly needs explanation. Because no %D nesting is to be expected, we can reuse \type{\wait} within %D \type{\wait} itself. \unexpanded\def\wait {\begingroup \read16 to \wait \endgroup} %D \macros %D {writestring,writeline,writebanner, %D writestatus,statuswidth,normalwritestatus} %D %D Maybe one didn't notice, but we've already introduced a %D macro for showing messages. In the multi||lingual modules, %D we will also introduce a mechanism for message passing. For %D the moment we stick to the core macros: %D %D \starttyping %D \writestring {string} %D \writeline %D \writestatus {category} {message} %D \stoptyping %D %D Messages are formatted. One can provide the maximum with %D of the identification string with the macro \type %D {\statuswidth}. \setnewconstant\statuswidth 15 \setnewconstant\statuswrite 16 \ifdefined\writestring \else \newtoks\everywritestring \def\writedirect {\immediate\write\statuswrite} \def\writeline {\writedirect{}} \unexpanded\def\writestring#1{\begingroup\the\everywritestring\writedirect{#1}\endgroup} \fi \unexpanded\def\normalwritestatus#1#2% {\writestring{\expandafter\syst_helpers_split_status_yes\expandafter\statuswidth#1% \space\space\space\space\space\space\space \space\space\space\space\space\space\space \space\space\space\space\space\space\end \space:\space#2}} \def\syst_helpers_split_status_yes#1#2% {\ifcase#1 \expandafter\syst_helpers_split_status_nop\fi#2% \expandafter\syst_helpers_split_status_yes\expandafter{\the\numexpr#1+\minusone\relax}} \def\syst_helpers_split_status_nop#1\end {} %D \macros %D {immediatemessage} %D %D A fully expandable message: \def\immediatemessage#1{\ctxlua{logs.status("message","#1")}} %D \macros %D {debuggerinfo} %D %D For debugging purposes we can enhance macros with the %D next alternative. Here \type{debuggerinfo} stands for both %D a macro accepting two arguments and a boolean (in fact a %D few macro's too). \newif\ifdebuggerinfo \unexpanded\def\debuggerinfo#1#2% {\ifdebuggerinfo \writestatus{debugger}{#1:: #2}% \fi} \ifdefined\writestatus \else \let\writestatus\normalwritestatus \fi \ifdefined\writebanner \else \unexpanded\def\writebanner{\writestring} \fi % % % % % % % % % % % % % % % % % % % % % % % % %D \macros %D {rawgetparameters} %D %D A raw and dirty alternative for \type {\getparameters}; no %D checking is done! \unexpanded\def\rawsetparameter#1=#2,% {\if]#1\else \expandafter\def\csname\rawparameterprefix#1\endcsname{#2}% \expandafter\rawsetparameter \fi} \unexpanded\def\rawgetparameters[#1][#2% some 5-10% faster {\ifx#2]% test is needed, else bomb on [#1][] \expandafter\gobbleoneargument \else \def\rawparameterprefix{#1}% \expandafter\dorawgetparameters \fi#2} \def\dorawgetparameters#1]% {\expandafter\rawsetparameter#1,]=,} %D \macros %D {doglobal, %D redoglobal,dodoglobal,resetglobal} %D %D The two macros \type {\redoglobal} and \type{\dodoglobal} are %D used in this and some other modules to enforce a user %D specified \type {\doglobal} action. The last and often only %D global assignment in a macro is done with %D \type {\dodoglobal}, but all preceding ones with %D \type {\redoglobal}. When using only alternatives, one can %D reset this mechanism with \type {\resetglobal}. \unexpanded\def\resetglobal {\let\redoglobal\relax \let\dodoglobal\relax} \resetglobal \unexpanded\def\doglobal {\ifx\redoglobal\relax \let\redoglobal\global \let\dodoglobal\syst_helpers_dodo_global \fi} \def\syst_helpers_dodo_global {\resetglobal\global} \def\saveglobal {\let\syst_helpers_dodo_global\dodoglobal \let\syst_helpers_redo_global\redoglobal} \def\restoreglobal {\let\redoglobal\syst_helpers_redo_global \let\dodoglobal\syst_helpers_dodo_global} %D A very useful application of this macro is \type {\newif}, %D \TEX's fake boolean type. Not being a primitive, %D \type {\global} hopelessly fails here. But a slight %D adaption of Knuth's original macro permits: %D %D \starttyping %D \doglobal\newif\iftest %D \stoptyping %D %D Of course one can still say: %D %D \starttyping %D \global\testtrue %D \global\testfalse %D \stoptyping %D %D Apart from the prefixes, a few more \type{\expandafters} %D are needed: \unexpanded\def\newif#1% {\scratchcounter\escapechar \escapechar\minusone \expandafter\expandafter\expandafter \redoglobal\expandafter\expandafter\expandafter \edef\@if#1{true}{\let\noexpand#1\noexpand\iftrue}% \expandafter\expandafter\expandafter \redoglobal\expandafter\expandafter\expandafter \edef\@if#1{false}{\let\noexpand#1\noexpand\iffalse}% \dodoglobal\@if#1{false}% \escapechar\scratchcounter} %D Also new: \unexpanded\def\define#1% {\ifdefined#1% \message{[\noexpand#1is already defined]}% \unexpanded\expandafter\def\expandafter\gobbleddefinition \else \unexpanded\expandafter\def \fi#1} \unexpanded\def\redefine#1% {\ifdefined#1% \message{[\noexpand#1is redefined]}% \fi \unexpanded\def#1} \unexpanded\def\definemacro#1% {\ifdefined#1% \message{[\noexpand#1is already defined]}% \unexpanded\expandafter\def\expandafter\gobbleddefinition \else \unexpanded\expandafter\def \fi#1} % \define\hans{hans} % \redefine\hans{hans} % \define\hans#1[]#2#3{hans} %D The next variant fits nicely in the setups syntax: %D %D \starttyping %D \starttexdefinition bagger [#1] #2 %D oeps %D #1 %D oeps %D \stoptexdefinition %D %D \bagger [a] {b} %D \stoptyping % \starttexdefinition test % oeps % \stoptexdefinition % % [\test] \def\s!unexpanded{unexpanded} \bgroup \obeylines \global\let\stoptexdefinition\relax \unexpanded\gdef\starttexdefinition% {\bgroup% \obeylines% \syst_helpers_start_tex_definition} \gdef\syst_helpers_start_tex_definition #1 {\catcode\endoflineasciicode\ignorecatcode% \doifinstringelse\letterhash{\detokenize{#1}}\syst_helpers_start_tex_definition_yes\syst_helpers_start_tex_definition_nop#1 } \gdef\syst_helpers_start_tex_definition_yes#1 #2 {\edef\texdefinitionname{#1}% \ifx\texdefinitionname\s!unexpanded% \expandafter\syst_helpers_start_tex_definition_yes_unexpanded% \else% \expandafter\syst_helpers_start_tex_definition_yes_normal% \fi% {#1}#2 } \gdef\syst_helpers_start_tex_definition_yes_unexpanded#1#2 #3 #4\stoptexdefinition% {\egroup% #1=unexpanded \unexpanded\expandafter\def\csname#2\endcsname#3{#4}} \gdef\syst_helpers_start_tex_definition_yes_normal#1#2 #3\stoptexdefinition% {\egroup% \expandafter\def\csname#1\endcsname#2{#3}} \gdef\syst_helpers_start_tex_definition_nop#1 {\syst_helpers_start_tex_definition_nop_indeed{#1}{}} \gdef\syst_helpers_start_tex_definition_nop_indeed#1#2#3\stoptexdefinition% {\egroup% \expandafter\def\csname#1\endcsname{#3}} \egroup \unexpanded\def\texdefinition#1{\csname\ifcsname#1\endcsname#1\else donothing\fi\endcsname} % This is a first variant, more might be added: \unexpanded\def\starttexcode{\unprotect} \unexpanded\def\stoptexcode {\protect} %D \macros %D {newcounter, %D increment,decrement} %D %D Unfortunately the number of \COUNTERS\ in \TEX\ is limited, %D but fortunately we can store numbers in a macro. We can %D increment such pseudo \COUNTERS\ with \type{\increment}. %D %D \starttyping %D \increment(\counter,20) %D \increment(\counter,-4) %D \increment(\counter) %D \increment\counter %D \stoptyping %D %D After this sequence of commands, the value of %D \type{\counter} is 20, 16, 17 and~18. Of course there is %D also the complementary command \type{\decrement}. %D %D Global assignments are possible too, using \type{\doglobal}: %D %D \starttyping %D \doglobal\increment\counter %D \stoptyping %D %D When \type{\counter} is undefined, it's value is initialized %D at~0. It is nevertheless better to define a \COUNTER\ %D explicitly. One reason could be that the \COUNTER\ can be %D part of a test with \type{\ifnum} and this conditional does %D not accept undefined macro's. The \COUNTER\ in our example %D can for instance be defined with: %D %D \starttyping %D \newcounter\counter %D \stoptyping %D %D The command \type{\newcounter} must not be confused with %D \type{\newcount}! Of course this mechanism is much slower %D than using \TEX's \COUNTERS\ directly. In practice %D \COUNTERS\ (and therefore our pseudo counters too) are %D seldom the bottleneck in the processing of a text. Apart %D from some other incompatilities we want to mention a pitfal %D when using \type{\ifnum}. %D %D \starttyping %D \ifnum\normalcounter=\pseudocounter \doif \else \doelse \fi %D \ifnum\pseudocounter=\normalcounter \doif \else \doelse \fi %D \stoptyping %D %D In the first test, \TEX\ continues it's search for the %D second number after reading \type{\pseudocounter}, while %D in the second test, it stops reading after having %D encountered a real one. Tests like the first one therefore %D can give unexpected results, for instance execution %D of \type{\doif} even if both numbers are unequal. \def\zerocountervalue{0} \unexpanded\def\newcounter#1% {\dodoglobal\let#1\zerocountervalue} %D Nowadays we don't mind a few more tokens if we can gain a %D bit of speed. \def\syst_helpers_do_increment#1{\dodoglobal\edef#1{\the\numexpr\ifdefined#1\ifx#1\relax\else#1\fi\fi+\plusone \relax}} \def\syst_helpers_do_decrement#1{\dodoglobal\edef#1{\the\numexpr\ifdefined#1\ifx#1\relax\else#1\fi\fi+\minusone\relax}} \def\syst_helpers_do_do_do_increment#1,#2){\dodoglobal\edef#1{\the\numexpr\ifdefined#1\ifx#1\relax\else#1\fi\fi+#2\relax}} \def\syst_helpers_do_do_do_decrement#1,#2){\dodoglobal\edef#1{\the\numexpr\ifdefined#1\ifx#1\relax\else#1\fi\fi-#2\relax}} \def\syst_helpers_do_do_increment(#1{\doifnextcharelse,{\syst_helpers_do_do_do_increment#1}{\syst_helpers_do_do_do_increment#1,\plusone}} \def\syst_helpers_do_do_decrement(#1{\doifnextcharelse,{\syst_helpers_do_do_do_decrement#1}{\syst_helpers_do_do_do_decrement#1,\plusone}} \unexpanded\def\fastincrement#1{\dodoglobal\edef#1{\the\numexpr#1+\plusone \relax}} \unexpanded\def\fastdecrement#1{\dodoglobal\edef#1{\the\numexpr#1+\minusone\relax}} \unexpanded\def\increment{\doifnextcharelse(\syst_helpers_do_do_increment\syst_helpers_do_increment} \unexpanded\def\decrement{\doifnextcharelse(\syst_helpers_do_do_decrement\syst_helpers_do_decrement} \unexpanded\def\incrementvalue#1{\expandafter\increment\csname#1\endcsname} \unexpanded\def\decrementvalue#1{\expandafter\decrement\csname#1\endcsname} %D \macros %D {newsignal} %D %D When writing advanced macros, we cannot do without %D signaling. A signal is a small (invisible) kern or penalty %D that signals the next macro that something just happened. %D This macro can take any action depending on the previous %D signal. Signals must be unique and the next macro takes care %D of that. %D %D \starttyping %D \newsignal\somesignal %D \stoptyping %D %D Signals old dimensions and can be used in skips, kerns and %D tests like \type{\ifdim}. \newdimen\maximumsignal % step is about 0.00025pt \unexpanded\def\newsignal#1% {\ifdefined#1\else \advance\maximumsignal 2\scaledpoint % to be save in rounding \edef#1{\the\maximumsignal}% \fi} %D \macros %D {strippedcsname} %D %D The next macro can be very useful when using \type{\csname} %D like in: %D %D \starttyping %D \csname if\strippedcsname\something\endcsname %D \stoptyping \def\checkedstrippedcsname#1% this permits \strippedcsname{\xxx} and \strippedcsname{xxx} {\expandafter\syst_helpers_checked_stripped_csname\string#1} \def\syst_helpers_checked_stripped_csname#1% {\if\noexpand#1\letterbackslash\else#1\fi} %D \macros %D {savenormalmeaning} %D %D We will use this one in: \unexpanded\def\savenormalmeaning#1% {\ifcsname normal\strippedcsname#1\endcsname \else \expandafter\let\csname normal\strippedcsname#1\endcsname#1% \fi} %D \macros %D {dorecurse,recurselevel,recursedepth, %D dostepwiserecurse} %D %D \TEX\ does not offer us powerfull for||loop mechanisms. On %D the other hand its recursion engine is quite unique. We %D therefore identify the for||looping macros by this method. %D The most simple alternative is the one that only needs a %D number. %D %D \starttyping %D \dorecurse {n} {whatever we want} %D \stoptyping %D %D This macro can be nested without problems and therefore be %D used in situations where \PLAIN\ \TEX's \type{\loop} macro %D ungracefully fails. The current value of the counter is %D available in \type{\recurselevel}, before as well as after %D the \typ{whatever we wat} stuff. %D %D \starttyping %D \dorecurse % inner loop %D {10} %D {\recurselevel: % outer value %D \dorecurse % inner loop %D {\recurselevel} % outer value %D {\recurselevel} % inner value %D \dorecurse % inner loop %D {\recurselevel} % outer value %D {\recurselevel} % inner value %D \endgraf} %D \stoptyping %D %D In this example the first, second and fourth %D \type{\recurselevel} concern the outer loop, while the third %D and fifth one concern the inner loop. The depth of the %D nesting is available for inspection in \type{\recursedepth}. %D %D Both \type{\recurselevel} and \type{\recursedepth} are %D macros. The real \COUNTERS\ are hidden from the user because %D we don't want any interference. \newcount\outerrecurse \newcount\innerrecurse \def\recursedepth{\the\outerrecurse} \def\recurselevel{0} \let\syst_helpers_stepwise_next\relax \installsystemnamespace{recurseindex} \installsystemnamespace{recurseaction} \unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 {\global\advance\outerrecurse \plusone \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname{#4}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \ifnum#3>\zerocount\relax \ifnum#2<#1\relax \let\syst_helpers_stepwise_next\syst_helpers_stepwise_exit \else \let\syst_helpers_stepwise_next\syst_helpers_stepwise_recurse \fi \else \ifnum#3<\zerocount\relax \ifnum#1<#2\relax \let\syst_helpers_stepwise_next\syst_helpers_stepwise_exit \else \let\syst_helpers_stepwise_next\syst_helpers_stepwise_reverse \fi \else \let\syst_helpers_stepwise_next\syst_helpers_stepwise_exit \fi \fi\normalexpanded{\syst_helpers_stepwise_next{\number#1}{\number#2}{\number#3}}} \unexpanded\def\syst_helpers_stepwise_recurse#1#2#3% from to step {\ifnum#1>#2\relax \expandafter\syst_helpers_stepwise_recurse_nop \else \def\recurselevel{#1}% \doubleexpandafter\syst_helpers_stepwise_recurse_yes\expandafter \fi\expandafter{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} \unexpanded\def\syst_helpers_recurse_content {\csname\??recurseaction\recursedepth\endcsname} \unexpanded\def\syst_helpers_stepwise_recurse_yes {\syst_helpers_recurse_content \syst_helpers_stepwise_recurse} \unexpanded\def\syst_helpers_stepwise_reverse#1#2#3% from to step {\ifnum#1<#2\relax \expandafter\syst_helpers_stepwise_recurse_nop \else \def\recurselevel{#1}% \innerrecurse#1\relax \advance\innerrecurse#3\relax \doubleexpandafter\syst_helpers_stepwise_reverse_yes\expandafter \fi\expandafter{\the\innerrecurse}{#2}{#3}} \unexpanded\def\syst_helpers_stepwise_reverse_yes {\syst_helpers_recurse_content \syst_helpers_stepwise_reverse} \unexpanded\def\syst_helpers_stepwise_exit {\syst_helpers_stepwise_recurse_nop\relax} \unexpanded\def\syst_helpers_stepwise_recurse_nop#1#2#3#4% {\expandafter\let\expandafter\recurselevel\csname\??recurseindex\recursedepth\endcsname \global\advance\outerrecurse\minusone} % \unexpanded\def\nonostepwiserecurse#1#2#3% % {\expandafter\let\expandafter\recurselevel\csname\??recurseindex\recursedepth\endcsname % \global\advance\outerrecurse\minusone} \unexpanded\def\dorecurse#1% {\dostepwiserecurse\plusone{#1}\plusone} \def\doexpandedrecurse#1#2% user macro (also was \doxprecurse) {\ifnum#1>\zerocount #2\expandafter\doexpandedrecurse\expandafter{\the\numexpr#1-\plusone\relax}{#2}% \fi} %D As we can see here, the simple command \type{\dorecurse} is %D a special case of the more general: %D %D \starttyping %D \dostepwiserecurse {from} {to} {step} {action} %D \stoptyping %D %D This commands accepts positive and negative steps. Illegal %D values are handles as good as possible and the macro accepts %D numbers and \COUNTERS. %D %D \starttyping %D \dostepwiserecurse {1} {10} {2} {...} %D \dostepwiserecurse {10} {1} {-2} {...} %D \stoptyping %D %D Because the simple case is used often, we implement it %D more efficiently: \unexpanded\def\dorecurse#1% {\ifcase#1\relax \expandafter\gobbletwoarguments \or \expandafter\syst_helpers_recurse_y \else \expandafter\syst_helpers_recurse_x \fi{#1}} \unexpanded\def\syst_helpers_recurse_x#1#2% {\global\advance\outerrecurse \plusone \expandafter\gdef\csname\??recurseaction\recursedepth\endcsname{#2}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \expandafter\syst_helpers_recurse_indeed\expandafter1\expandafter{\number#1}} \unexpanded\def\syst_helpers_recurse_y#1#2% {\global\advance\outerrecurse \plusone \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \let\recurselevel\!!plusone #2% \expandafter\let\expandafter\recurselevel\csname\??recurseindex\recursedepth\endcsname \global\advance\outerrecurse \minusone} \unexpanded\def\syst_helpers_recurse_indeed#1#2% from to {\ifnum#1>#2\relax \expandafter\syst_helpers_recurse_indeed_nop \else \def\recurselevel{#1}% \doubleexpandafter\syst_helpers_recurse_indeed_yes \fi\expandafter{\the\numexpr\recurselevel+\plusone\relax}{#2}} \unexpanded\def\syst_helpers_recurse_indeed#1#2% from to {\ifnum#1>#2\relax \expandafter\syst_helpers_recurse_indeed_nop \else \def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse\plusone \doubleexpandafter\syst_helpers_recurse_indeed_yes \fi\expandafter{\the\innerrecurse}{#2}} \unexpanded\def\syst_helpers_recurse_indeed_yes {\syst_helpers_recurse_content \syst_helpers_recurse_indeed} \unexpanded\def\syst_helpers_recurse_indeed_nop#1#2#3% {\expandafter\let\expandafter\recurselevel\csname\??recurseindex\recursedepth\endcsname \global\advance\outerrecurse \minusone } %D \macros %D {dowith} %D %D Here's a loop over whatever is in a list: %D %D \starttyping %D \dowith{a,b,c}{[#1]} %D \stoptyping \unexpanded\def\dowith#1#2% {\def\syst_helpers_with##1{#2}% \normalexpanded{\processcommalist[#1]}\syst_helpers_with} %D \macros %D {doloop,exitloop} %D %D Sometimes loops are not determined by counters, but by %D (a combinations of) conditions. We therefore implement a %D straightforward loop, which can only be left when we %D explictly exit it. Nesting is supported. First we present %D a more extensive alternative. %D %D \starttyping %D \doloop %D {Some kind of typesetting punishment \par %D \ifnum\pageno>100 \exitloop \fi} %D \stoptyping %D %D When needed, one can call for \type{\looplevel} and %D \type{\loopdepth}. \let\endofloop\donothing % maybe \syst_helpers_loop_end \unexpanded\def\doloop#1% {\global\advance\outerrecurse \plusone \expandafter\gdef\csname\??recurseaction\recursedepth\endcsname{#1}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \let\endofloop\syst_helpers_loop \syst_helpers_loop1} % no \plusone else \recurselevel wrong \unexpanded\def\syst_helpers_loop#1% {\def\recurselevel{#1}% \expandafter\syst_helpers_loop_yes\expandafter{\the\numexpr\recurselevel+\plusone\relax}} \unexpanded\def\syst_helpers_loop_yes {\syst_helpers_recurse_content \endofloop} \unexpanded\def\syst_helpers_loop_nop#1% {\let\endofloop\syst_helpers_loop % new, permits nested \doloop's \expandafter\let\expandafter\recurselevel\csname\??recurseindex\recursedepth\endcsname \global\advance\outerrecurse\minusone} \unexpanded\def\exitloop % \exitloop quits at end {\let\endofloop\syst_helpers_loop_nop} \unexpanded\def\exitloopnow#1\endofloop % \exitloopnow quits directly {\syst_helpers_loop_nop} %D The loop is executed at least once, so beware of situations %D like: %D %D \starttyping %D \doloop {\exitloop some commands} %D \stoptyping %D %D It's just a matter of putting the text into the \type{\if} %D statement that should be there anyway, like in: %D %D \starttyping %D \doloop {\ifwhatever \exitloop \else some commands\fi} %D \stoptyping %D %D You can also quit a loop immediately, by using \type %D {\exitloopnow} instead. Beware, this is more sensitive %D for conditional errors. %D Krzysztof Leszczynski suggested to provide access to the level by %D means of a \type {#1}. I decided to pass the more frequently used %D level as \type {#1} and the less favoured depth as \type {#2}. The %D intended usage is: %D %D \starttyping %D \dorecurse{3}{\definesymbol[test-#1][xx-#1]} %D %D \def\test{\dorecurse{3}{\definesymbol[test-##1][xx-##1]}} \test %D %D \symbol[test-1]\quad\symbol[test-2]\quad\symbol[test-3] %D \stoptyping %D %D Since the hashed arguments are expanded, we don't need tricky %D expansion here. %D %D \starttyping %D \dorecurse{3}{\expanded{\definesymbol[test-\recurselevel][xx-\recurselevel]}} %D \stoptyping \def\syst_helpers_recurse_content {\csname\??recurseaction\recursedepth\expandafter\expandafter\expandafter\endcsname \expandafter\expandafter\expandafter{\expandafter\recurselevel\expandafter}\expandafter{\recursedepth}} \unexpanded\def\syst_helpers_recurse_x#1#2% {\global\advance\outerrecurse \plusone \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#2}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \expandafter\syst_helpers_recurse_indeed\expandafter1\expandafter{\number#1}} \unexpanded\def\syst_helpers_recurse_y#1#2% {\global\advance\outerrecurse \plusone \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \let\recurselevel\!!plusone \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#2}% \syst_helpers_recurse_content \expandafter\let\expandafter\recurselevel\csname\??recurseindex\recursedepth\endcsname \global\advance\outerrecurse \minusone} \unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 {\global\advance\outerrecurse \plusone \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#4}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \ifnum#3>\zerocount\relax \ifnum#2<#1\relax \let\syst_helpers_stepwise_next\syst_helpers_stepwise_exit \else \let\syst_helpers_stepwise_next\syst_helpers_stepwise_recurse \fi \else \ifnum#3<\zerocount\relax \ifnum#1<#2\relax \let\syst_helpers_stepwise_next\syst_helpers_stepwise_exit \else \let\syst_helpers_stepwise_next\syst_helpers_stepwise_reverse \fi \else \let\syst_helpers_stepwise_next\syst_helpers_stepwise_exit \fi \fi\normalexpanded{\syst_helpers_stepwise_next{\number#1}{\number#2}{\number#3}}} \unexpanded\def\doloop#1% {\global\advance\outerrecurse \plusone \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#1}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \let\endofloop\syst_helpers_loop \syst_helpers_loop1} % no \plusone else \recurselevel wrong % faster % \unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 % {\global\advance\outerrecurse \plusone % \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#4}% % \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel % \csname @swr% % \ifnum#3>\zerocount % \ifnum#2<#1\else d\fi % \else\ifnum#3<\zerocount % \ifnum#1<#2\else r\fi % \fi\fi % \expandafter\endcsname\normalexpanded{{\number#1}{\number#2}{\number#3}}} % \let\@swr \syst_helpers_stepwise_exit % \let\@swrd\syst_helpers_stepwise_recurse % \let\@swrr\syst_helpers_stepwise_reverse \installsystemnamespace{recursestepwise} \unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 {\global\advance\outerrecurse \plusone \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#4}% \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel \csname\??recursestepwise \ifnum#3>\zerocount \ifnum#2<#1\else d\fi \else\ifnum#3<\zerocount \ifnum#1<#2\else r\fi \fi\fi \expandafter\endcsname\normalexpanded{{\number#1}{\number#2}{\number#3}}} % \expandafter\endcsname\expandafter{\number#1\expandafter}\expandafter{\number#2\expandafter}\expandafter{\number#3}} \letvalue{\??recursestepwise }\syst_helpers_stepwise_exit \letvalue{\??recursestepwise d}\syst_helpers_stepwise_recurse \letvalue{\??recursestepwise r}\syst_helpers_stepwise_reverse % quite okay too, but untested % % \def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 % {\global\advance\outerrecurse \plusone % \global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#4}% % \global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel % \normalexpanded % {\ifnum#3>\zerocount % \ifnum#2<#1 % \syst_helpers_stepwise_exit % \else % \syst_helpers_stepwise_recurse % \fi % \else % \ifnum#3<\zerocount % \ifnum#1<#2 % \syst_helpers_stepwise_exit % \else % \syst_helpers_stepwise_reverse % \fi % \else % \syst_helpers_stepwise_exit % \fi % \fi{\number#1}{\number#2}{\number#3}}} %D For special purposes: \newcount\fastloopindex \newcount\fastloopfinal \let\m_syst_helpers_fast_loop_cs\relax \unexpanded\def\dofastloopcs#1#2% {\let\m_syst_helpers_fast_loop_cs#2% \fastloopindex\plusone \fastloopfinal#1\relax \syst_helpers_fast_loop_cs} \unexpanded\def\syst_helpers_fast_loop_cs {\ifnum\fastloopindex>\fastloopfinal \let\m_syst_helpers_fast_loop_cs\relax \else \m_syst_helpers_fast_loop_cs \advance\fastloopindex\plusone \expandafter\syst_helpers_fast_loop_cs \fi} % Helper: \unexpanded\def\resetrecurselevel{\let\recurselevel\!!zerocount} \let\recurselevel\!!zerocount % \appendtoks \resetrecurselevel \to \everydump %D \macros %D {doloopoverlist} %D %D \starttyping %D \doloopoverlist {red,green,blue} { %D \setuppalet[\recursestring] %D \doloopoverlist {light,normal,dark} { %D \blackrule[color=\recursestring,width=20cm,height=2cm,depth=0cm]\par %D } %D } %D \stoptyping %D %D or: %D %D \starttyping %D \doloopoverlist {red,green,blue} { %D \setuppalet[#1] %D \doloopoverlist {light,normal,dark} { %D \blackrule[color=##1,width=20cm,height=2cm,depth=0cm]\par %D } %D } %D \stoptyping \unexpanded\def\doloopoverlist#1#2% {\global\advance\outerrecurse\plusone \expandafter\gdef\csname\??recurseaction\recursedepth\endcsname##1{\edef\recursestring{##1}#2}% \expandafter\glet\csname\??recurseindex\recursedepth\endcsname\recursestring \normalexpanded{\processcommalist[#1]{\expandafter\noexpand\csname\??recurseaction\recursedepth\endcsname}}% \expandafter\let\expandafter\recursestring\csname\??recurseindex\recursedepth\endcsname \global\advance\outerrecurse\minusone} %D \macros %D {newevery,everyline,EveryLine,EveryPar} %D %D Lets skip to something quite different. It's common use %D to use \type {\everypar} for special purposes. In \CONTEXT\ %D we use this primitive for locating sidefloats. This means %D that when user assignments to \type {\everypar} can interfere %D with those of the package. We therefore introduce %D \type {\EveryPar}. %D %D The same goes for \type {\EveryLine}. Because \TEX\ offers %D no \type {\everyline} primitive, we have to call for %D \type {\everyline} when we are working on a line by line %D basis. Just by calling \type {\EveryPar{}} and %D \type {\EveryLine{}} we restore the old situation. % \dorecurse{2}{ % \expanded{\everypar{before \recurselevel\space}} % \EveryPar{x } [before \recurselevel\space x] \par % \EveryPar{y } [before \recurselevel\space y] \par % \EveryPar{} [before \recurselevel] \par % \EveryPar{x } \EveryPar{y } \EveryPar{} [before \recurselevel] \par % \EveryPar{y } \everypar{before } [before] \par % } \installsystemnamespace{extraevery} \unexpanded\def\newevery#1#2% {\ifx#1\everypar\else\newtoks#1\fi% we test for redefinition elsewhere \ifx#2\relax\else\ifdefined#2\else \expandafter\newtoks\csname\??extraevery\strippedcsname#1\endcsname \def#2{\syst_helpers_every#1}% \fi\fi} \unexpanded\def\syst_helpers_every#1% {\expandafter\removetoks\expandafter\the\csname\??extraevery\strippedcsname#1\endcsname\from#1% \expandafter\appendtoks\expandafter\the\csname\??extraevery\strippedcsname#1\endcsname\to #1% \csname\??extraevery\strippedcsname#1\endcsname} %D This one permits definitions like: \newevery \everypar \EveryPar % we get a warning which is ok \newevery \everyline \EveryLine %D and how about: % \newtoks \neverypar % \newtoks \neveryendpar % % \normalprotected\def\syst_helpers_forgotten_endpar % {\the\neveryendpar\normalpar} % % \unexpanded\def\forgeteverypar % {\everypar{\the\neverypar}% % \let\endpar\syst_helpers_forgotten_endpar} % % \unexpanded\def\finishpar % {\ifvmode\else\par\fi} \newtoks \neverypar \unexpanded\def\forgeteverypar {\everypar{\the\neverypar}} %D Which we're going to use indeed! When the second argument %D equals \type {\relax}, the first token list is created %D unless it is already defined. %D Technically spoken we could have used the method we are %D going to present in the visual debugger. First we save %D the primitive \type{\everypar}: %D %D \starttyping %D \let\normaleverypar=\everypar %D \stoptyping %D %D Next we allocate a \TOKENLIST\ named \type{\everypar}, %D which means that \type{\everypar} is no longer a primitive %D but something like \type{\toks44}. %D %D \starttyping %D \newtoks\everypar %D \stoptyping %D %D Because \TEX\ now executes \type{\normaleverypar} instead %D of \type{\everypar}, we are ready to assign some tokens to %D this internally known and used \TOKENLIST. %D %D \starttyping %D \normaleverypar={all the things the system wants to do \the\everypar} %D \stoptyping %D %D Where the user can provide his own tokens to be expanded %D every time he expects them to expand. %D %D \starttyping %D \everypar={something the user wants to do} %D \stoptyping %D %D We don't use this method because it undoubtly leads to %D confusing situations, especially when other packages are %D used, but it's this kind of tricks that make \TEX\ so %D powerful. %D \macros %D {convertargument,convertcommand,convertvalue} %D %D Some persistent experimenting led us to the next macro. This %D macro converts a parameter or an expanded macro to it's %D textual meaning. %D %D \starttyping %D \convertargument ... \to \command %D \stoptyping %D %D For example, %D %D \starttyping %D \convertargument{one \two \three{four}}\to\ascii %D \stoptyping %D %D The resulting macro \type{\ascii} can be written to a file %D or the terminal without problems. In \CONTEXT\ we use this %D macro for generating registers and tables of contents. %D %D The second conversion alternative accepts a command: %D %D \starttyping %D \convertcommand\command\to\ascii %D \stoptyping %D %D Both commands accept the prefix \type{\doglobal} for global %D assignments. \unexpanded\def\convertvalue#1\to {\expandafter\convertcommand\csname#1\endcsname\to} \unexpanded\def\defconvertedvalue#1#2% less sensitive for \to {\expandafter\defconvertedcommand\expandafter#1\csname#2\endcsname} %D \macros %D {doifassignmentelse} %D %D A lot of \CONTEXT\ commands take optional arguments, for %D instance: %D %D \starttyping %D \dothisorthat[alfa,beta] %D \dothisorthat[first=foo,second=bar] %D \dothisorthat[alfa,beta][first=foo,second=bar] %D \stoptyping %D %D Although a combined solution is possible, we prefer a %D seperation. The next command takes care of propper %D handling of such multi||faced commands. %D %D \starttyping %D \doifassignmentelse {...} {then ...} {else ...} %D \stoptyping \def\syst_helpers_check_if_assignment_else#1=#2#3\_e_o_p_{\if#2@}% \unexpanded\def\doifassignmentelse#1% expandable {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=@@\_e_o_p_ \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \newif\ifassignment \unexpanded\def\docheckassignment#1% {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=@@\_e_o_p_ \assignmentfalse \else \assignmenttrue \fi} %D In \ETEX\ we can use \type {\detokenize} and gain some %D speed, but in general far less that 1\% for \type %D {\convertargument} and nil for \type {\convertcommand}. %D This macro is more robust than the pure \TEX\ one, %D something I found out when primitives like \type %D {\jobname} were fed (or something undefined). \unexpanded\def\convertargument#1\to#2{\dodoglobal\edef#2{\detokenize{#1}}} \unexpanded\def\convertcommand #1\to#2{\dodoglobal\edef#2{\expandafter\detokenize\expandafter{#1}}} % hm, only second is also ok \unexpanded\def\defconvertedargument #1#2{\edef#1{\detokenize{#2}}} \unexpanded\def\defconvertedcommand #1#2{\edef#1{\detokenize\expandafter{#2}}} \unexpanded\def\edefconvertedargument#1#2{\edef#1{#2}% \edef#1{\detokenize\expandafter{#1}}} \unexpanded\def\gdefconvertedargument#1#2{\xdef#1{\detokenize{#2}}} \unexpanded\def\gdefconvertedcommand #1#2{\xdef#1{\detokenize\expandafter{#2}}} \unexpanded\def\xdefconvertedargument#1#2{\xdef#1{#2}% \xdef#1{\detokenize\expandafter{#1}}} %D When you try to convert a primitive command, you'll find %D out that the \ETEX\ method fails on for instance \type %D {\jobname} in the sense that it returns the filename %D instead of just \type {\jobname}. So far this does not %D give real problems. %D This is typically a macro that one comes to after reading %D the \TEX book carefully. Even then, the definite solution %D was found after rereading the \TEX book. The first %D implementation was: %D %D \starttyping %D \def\doconvertargument#1->#2\\\\{#2} %D \stoptyping %D %D The \type{-}, the delimiter \type{\\\\} and the the second %D argument are completely redundant. %D \macros %D {showvalue} %D %D Ahandy macro, for testing purposes only: \unexpanded\def\showvalue#1% {\ifcsname#1\endcsname \expandafter\show\csname#1\endcsname \else \show\undefined \fi} %D \macros %D {doifmeaningelse} %D %D We can use both commands in testing, but alas, not all %D meanings expand to something \type {->}. This is no problem %D in the \ETEX\ implementation, but since we want %D compatibility, we need: %D %D \starttyping %D \doifmeaningelse {\next} {\something} {true} {false} %D \stoptyping %D %D Watch the one level expansion of the second argument. \unexpanded\def\doifmeaningelse#1#2% {\edef\m_syst_string_one{\meaning#1}% \def \m_syst_string_two{#2}% \edef\m_syst_string_two{\meaning\m_syst_string_two}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifsamestringselse,doifsamestring,doifnotsamestring} %D %D The next comparison macro converts the arguments into %D expanded strings. This command can be used to compare for %D instance \type {\jobname} with a name stored in a macro. %D %D \starttyping %D \doifelse {\jobname}{oeps}{YES}{NO} %D \doifsamestringelse{\jobname}{oeps}{YES}{NO} %D \stoptyping \def\syst_helpers_if_samestring_else#1#2#3#4% {\edef\m_syst_string_one{\detokenize\expandafter{\normalexpanded{#3}}}% \edef\m_syst_string_two{\detokenize\expandafter{\normalexpanded{#4}}}% \ifx\m_syst_string_one\m_syst_string_two\expandafter#1\else\expandafter#2\fi} \unexpanded\def\doifsamestringelse{\syst_helpers_if_samestring_else\firstoftwoarguments\secondoftwoarguments} \unexpanded\def\doifsamestring {\syst_helpers_if_samestring_else\firstofoneargument \gobbleoneargument } \unexpanded\def\doifnotsamestring {\syst_helpers_if_samestring_else\gobbleoneargument \firstofoneargument } %D \macros %D {ConvertToConstant,ConvertConstantAfter} %D %D When comparing arguments with a constant, we can get into %D trouble when this argument consists of tricky expandable %D commands. One solution for this is converting the %D argument to a string of unexpandable characters. To make %D comparison possible, we have to convert the constant too %D %D \starttyping %D \ConvertToConstant\doifelse {...} {...} {then ...} {else ...} %D \stoptyping %D %D This construction is only needed when the first argument %D can give troubles. Misuse can slow down processing. %D %D \starttyping %D \ConvertToConstant\doifelse{\c!alfa} {\c!alfa}{...}{...} %D \ConvertToConstant\doifelse{alfa} {\c!alfa}{...}{...} %D \ConvertToConstant\doifelse{alfa} {alfa} {...}{...} %D \ConvertToConstant\doifelse{alfa \alfa test}{\c!alfa}{...}{...} %D \stoptyping %D %D In examples~2 and~3 both arguments equal, in~1 and~4 %D they differ. \unexpanded\def\ConvertToConstant#1#2#3% {\edef\m_syst_string_one{\expandafter\detokenize\expandafter{#2}}% \edef\m_syst_string_two{\expandafter\detokenize\expandafter{#3}}% #1{\m_syst_string_one}{\m_syst_string_two}} %D When the argument \type{#1} consists of commands, we had %D better use %D %D \starttyping %D \ConvertConstantAfter\processaction[#1][...] %D \ConvertConstantAfter\doifelse{#1}{\v!something}{}{} %D \stoptyping %D %D This commands accepts things like: %D %D \starttyping %D \v!constant %D constant %D \hbox to \hsize{\rubish} %D \stoptyping %D %D As we will see in the core modules, this macro permits %D constructions like: %D %D \starttyping %D \setupfootertexts[...][...] %D \setupfootertexts[margin][...][...] %D \setupfootertexts[\v!margin][...][...] %D \stoptyping %D %D where \type{...} can be anything legally \TEX. \unexpanded\def\CheckConstantAfter#1#2% {\expandafter\convertargument\v!prefix!\to\ascii \convertargument#1\to#2\relax \doifinstringelse\ascii{#2} {\expandafter\convertargument#1\to#2} {}} \unexpanded\def\ConvertConstantAfter#1#2#3% {\CheckConstantAfter{#2}\asciia \CheckConstantAfter{#3}\asciib #1{\asciia}{\asciib}} %D \macros %D {assignifempty} %D %D We can assign a default value to an empty macro using: %D %D \starttyping %D \assignifempty \macros {default value} %D \stoptyping %D %D We don't explicitly test if the macro is defined. \unexpanded\def\assignifempty#1#2% can be sped up {\doifsomething{#1}{\def#1{#2}}} % {\doifnot{#1}{}{\def#1{#2}}} %D \macros %D {gobbleuntil,grabuntil,gobbleuntilrelax, %D processbetween,processuntil} %D %D In \TEX\ gobbling usually stand for skipping arguments, so %D here are our gobbling macros. %D %D In \CONTEXT\ we use a lot of \type{\start}||\type{\stop} %D like constructions. Sometimes, the \type{\stop} is used as a %D hard coded delimiter like in: %D %D \starttyping %D \unexpanded\def\startcommand#1\stopcommand% %D {... #1 ...} %D \stoptyping %D %D In many cases the \type{\start}||\type{\stop} pair is %D defined at format generation time or during a job. This %D means that we cannot hardcode the \type{\stop} criterium. %D Only after completely understanding \type{\csname} and %D \type{\expandafter} I was able to to implement a solution, %D starting with: %D %D \starttyping %D \grabuntil{stop}\command %D \stoptyping %D %D This commands executes, after having encountered %D \type {\stop} the command \type {\command}. This command %D receives as argument the text preceding the \type {\stop}. %D This means that: %D %D \starttyping %D \unexpanded\def\starthello% %D {\grabuntil{stophello}\message} %D %D \starthello Hello world!\stophello %D \stoptyping %D %D results in: \type{\message{Hello world!}}. \let\syst_helpers_grab_indeed\relax \unexpanded\def\syst_helpers_grab#1#2% {\def\syst_helpers_grab_indeed##1#1{#2{##1}}\syst_helpers_grab_indeed} \unexpanded\def\grabuntil#1% {\expandafter\syst_helpers_grab\expandafter{\csname#1\endcsname}} %D The next command build on this mechanism: %D %D \starttyping %D \processbetween{string}\command %D \stoptyping %D %D Here: %D %D \starttyping %D \processbetween{hello}\message %D \starthello Hello again!\stophello %D \stoptyping %D %D leads to: \type{\message{Hello again!}}. The command %D %D \starttyping %D \gobbleuntil{sequence} %D \stoptyping %D %D is related to these commands. This one simply throws away %D everything preceding \type{\command}. \let\syst_helpers_gobble_indeed\relax \unexpanded\def\processbetween#1#2% {\setvalue{\s!start#1}{\grabuntil{\s!stop#1}{#2}}} \unexpanded\def\gobbleuntil#1% {\def\syst_helpers_gobble_indeed##1#1{}\syst_helpers_gobble_indeed} \unexpanded\def\gobbleuntilrelax#1\relax {} %D The next one simply expands the pickup up tokens. %D %D \starttyping %D \processuntil{sequence} %D \stoptyping \let\syst_helpers_until_indeed\relax \unexpanded\def\processuntil#1% {\def\syst_helpers_until_indeed##1#1{##1}\syst_helpers_until_indeed} %D \macros %D {groupedcommand} %D %D Commands often manipulate argument as in: %D %D \starttyping %D \def\doezomaarwat#1{....#1....} %D \stoptyping %D %D A disadvantage of this approach is that the tokens that %D form \type{#1} are fixed the the moment the argument is read %D in. Normally this is no problem, but for instance verbatim %D environments adapt the \CATCODES\ of characters and therefore %D are not always happy with already fixed tokens. %D %D Another problem arises when the argument is grouped not by %D \type{{}} but by \type{\bgroup} and \type{\egroup}. Such an %D argument fails, because the \type{\bgroup} is een as the %D argument (which is quite normal). %D %D The next macro offers a solution for both unwanted %D situations: %D %D \starttyping %D \groupedcommand {before} {after} %D \stoptyping %D %D Which can be used like: %D %D \starttyping %D \def\cite% %D {\groupedcommand{\rightquote\rightquote}{\leftquote\leftquote}} %D \stoptyping %D %D This command is equivalent to, but more 'robust' than: %D %D \starttyping %D \def\cite#1% %D {\rightquote\rightquote#1\leftquote\leftquote} %D \stoptyping %D %D \starttyping %D \def\rightword% %D {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}} %D %D .......... \rightword{the right way} %D \stoptyping %D %D Here \TEX\ typesets \type{\bf the right way} unbreakable %D at the end of the line. The solution mentioned before does %D not work here. We also handle %D %D \starttyping %D to be \bold{bold} or not, that's the question %D \stoptyping %D %D and %D %D \starttyping %D to be {\bold bold} or not, that's the question %D \stoptyping %D %D This alternative checks for a \type {\bgroup} token first. The internal %D alternative does not accept the box handling mentioned before, but further %D nesting works all right. The extra \type {\bgroup}||\type {\egroup} is needed to %D keep \type {\m_syst_helpers_handle_group_after} both into sight and local. \let\m_syst_helpers_handle_group_after \relax \let\m_syst_helpers_handle_group_before\relax % keep: % % \unexpanded\def\syst_helpers_handle_group_normal#1#2% % {\bgroup % \def\m_syst_helpers_handle_group_before{\bgroup#1\bgroup\aftergroup\m_syst_helpers_handle_group_after}% can't we remove the second \bgroup % \def\m_syst_helpers_handle_group_after {#2\egroup\egroup}% and one \egroup here? % \afterassignment\m_syst_helpers_handle_group_before % \let\next=} \unexpanded\def\syst_helpers_handle_group_normal#1#2% {\bgroup \def\m_syst_helpers_handle_group_before{#1}% \def\m_syst_helpers_handle_group_after {#2}% \afterassignment\m_syst_helpers_handle_group_normal_before \let\next=} \def\m_syst_helpers_handle_group_normal_before {\bgroup \m_syst_helpers_handle_group_before \bgroup \aftergroup\m_syst_helpers_handle_group_normal_after} \def\m_syst_helpers_handle_group_normal_after {\m_syst_helpers_handle_group_after \egroup \egroup} % keep: % % \unexpanded\def\syst_helpers_handle_group_simple#1#2% no inner group (so no kerning interference) % {\bgroup % %def\m_syst_helpers_handle_group_before{\bgroup#1\aftergroup\m_syst_helpers_handle_group_after}% interferes % \def\m_syst_helpers_handle_group_before{\bgroup\aftergroup\m_syst_helpers_handle_group_after#1}% % \def\m_syst_helpers_handle_group_after {#2\egroup}% % \afterassignment\m_syst_helpers_handle_group_before % \let\next=} \unexpanded\def\syst_helpers_handle_group_simple#1#2% no inner group (so no kerning interference) {\bgroup \def\m_syst_helpers_handle_group_before{#1}% \def\m_syst_helpers_handle_group_after {#2}% \afterassignment\m_syst_helpers_handle_group_simple_before \let\next=} \def\m_syst_helpers_handle_group_simple_before {\bgroup \aftergroup\m_syst_helpers_handle_group_simple_after \m_syst_helpers_handle_group_before} \def\m_syst_helpers_handle_group_simple_after {\m_syst_helpers_handle_group_after \egroup}% \unexpanded\def\syst_helpers_handle_group_nop {\ifnum\currentgrouptype=\semisimplegroupcode \expandafter\syst_helpers_handle_group_nop_a \else \expandafter\syst_helpers_handle_group_nop_b \fi} \def\syst_helpers_handle_group_nop_a#1#2% {\def\m_syst_helpers_handle_group_after{#2\endgroup}% \begingroup \aftergroup\m_syst_helpers_handle_group_after #1} \def\syst_helpers_handle_group_nop_b#1#2% {\def\m_syst_helpers_handle_group_after{#2\egroup}% \bgroup \aftergroup\m_syst_helpers_handle_group_after #1} %D I considered it a nuisance that %D %D \starttyping %D \color[green] %D {as grass} %D \stoptyping %D %D was not interpreted as one would expect. This is due to the %D fact that \type{\futurelet} obeys blank spaces, and a %D line||ending token is treated as a blank space. So the final %D implementation became: \unexpanded\def\groupedcommand#1#2% {\doifnextbgroupelse{\syst_helpers_handle_group_normal{#1}{#2}}{\syst_helpers_handle_group_nop{#1}{#2}}} \unexpanded\def\simplegroupedcommand#1#2% {\doifnextbgroupelse{\syst_helpers_handle_group_simple{#1}{#2}}{\syst_helpers_handle_group_nop{#1}{#2}}} %D Users should be aware of the fact that grouping can %D interfere with ones paragraph settings that are executed %D after the paragraph is closed. One should therefore %D explictly close the paragraph with \type{\par}, else the %D settings will be forgotten and not applied. So it's: %D %D \starttyping %D \def\BoldRaggedCenter% %D {\groupedcommand{\raggedcenter\bf}{\par}} %D \stoptyping %D \macros %D {checkdefined} %D %D The bigger the system, the greater the change that %D user defined commands collide with those that are part of %D the system. The next macro gives a warning when a command is %D already defined. We considered blocking the definition, but %D this is not always what we want. %D %D \starttyping %D \checkdefined {category} {class} {command} %D \stoptyping %D %D The user is warned with the suggestion to use %D \type{CAPITALS}. This suggestion is feasible, because %D \CONTEXT only defines lowcased macros. \unexpanded\def\showdefinederror#1#2% {\writestatus\m!system{#1 #2 replaces a macro, use CAPITALS!}} \unexpanded\def\checkdefined#1#2#3% {\doifdefined{#3}{\showdefinederror{#2}{#3}}} %D \macros %D {GotoPar,GetPar} %D %D Typesetting a paragraph in a special way can be done by %D first grabbing the contents of the paragraph and processing %D this contents grouped. The next macro for instance typesets %D a paragraph in boldface. %D %D \starttyping %D \def\remark#1\par% %D {\bgroup\bf#1\egroup} %D \stoptyping %D %D This macro has to be called like %D %D \starttyping %D \remark some text ... ending with \par %D \stoptyping %D %D Instead of \type{\par} we can of course use an empty line. %D When we started typesetting with \TEX, we already had %D produced lots of text in plain \ASCII. In producing such %D simple formatted texts, we adopted an open layout, and when %D switching to \TEX, we continued this open habit. Although %D \TEX\ permits a cramped and badly formatted source, it adds %D to confusion and sometimes introduces errors. So we prefer: %D %D \starttyping %D \remark %D %D some text ... ending with an empty line %D \stoptyping %D %D We are going to implement a mechanism that allows such open %D specifications. The definition of the macro handling %D \type{\remark} becomes: %D %D \starttyping %D \def\remark% %D {\BeforePar{\bgroup\bf}% %D \AfterPar{\egroup}% %D \GetPar} %D \stoptyping %D %D A macro like \type{\GetPar} can be defined in several %D ways. The recent version, the fourth one in a row, %D originally was far more complicated, but some functionality %D has been moved to other macros. %D %D We start with the more simple but in some cases more %D appropriate alternative is \type{\GotoPar}. This one leaves %D \type{\par} unchanged and is therefore more robust. On the %D other hand, \type{\AfterPar} is not supported. \newtoks\BeforePar \newtoks\AfterPar \def\redowithpar\par {\doifnextcharelse\par\redowithpar\dodowithpar}% \def\dowithpar#1#2% {\def\dodowithpar##1\par{#1##1#2}% \redowithpar\par} \def\redogotopar\par {\doifnextcharelse\par\redogotopar\dodogotopar}% \def\dogotopar#1% {\def\dodogotopar{#1}% \redogotopar\par} \def\dogotoparcs#1% {\let\dodogotopar#1% \redogotopar\par} \unexpanded\def\GetPar {\expanded {\dowithpar {\the\BeforePar \BeforePar\emptytoks} {\the\AfterPar \BeforePar\emptytoks \AfterPar\emptytoks}}} \unexpanded\def\GotoPar {\expanded {\dogotopar {\the\BeforePar \BeforePar\emptytoks}}} %D \macros %D {dowithpargument,dowithwargument} %D %D The next macros are a variation on \type{\GetPar}. When %D macros expect an argument, it interprets a grouped sequence %D of characters a one token. While this adds to robustness and %D less ambiguous situations, we sometimes want to be a bit %D more flexible, or at least want to be a bit more tolerant %D to user input. %D %D We start with a commands that acts on paragraphs. This %D command is called as: %D %D \starttyping %D \dowithpargument\command %D \dowithpargument{\command ... } %D \stoptyping %D %D In \CONTEXT\ we use this one to read in the titles of %D chapters, sections etc. The commands responsible for these %D activities accept several alternative ways of argument %D passing. In these examples, the \type{\par} can be omitted %D when an empty line is present. %D %D \starttyping %D \command{...} %D \command ... \par %D \command %D {...} %D \command %D ... \par %D \stoptyping \let\syst_helpers_next_par\relax \let\syst_helpers_next_arg\relax \unexpanded\def\dowithpargument#1% {\def\syst_helpers_next_par##1 \par{#1{##1}}% \def\syst_helpers_next_arg##1{#1{##1}}% \doifnextbgroupelse\syst_helpers_next_arg{\doifnextcharelse\par{#1{}}\syst_helpers_next_par}} %D The \type{p} in the previous command stands for paragraph. %D When we want to act upon words we can use the \type{w} %D alternative. %D %D \starttyping %D \dowithwargument\command %D \dowithwargument{... \command ...} %D \stoptyping %D %D The main difference bwteen two alternatives is in the %D handling of \type{\par}'s. This time the space token acts %D as a delimiter. %D %D \starttyping %D \command{...} %D \command ... %D \command %D {...} %D \command %D ... %D \stoptyping \let\syst_helpers_next_war\relax \let\syst_helpers_next_arg\relax \unexpanded\def\dowithwargument#1% {\def\syst_helpers_next_war##1 {#1{##1}}% \def\syst_helpers_next_arg##1{#1{##1}}% \doifnextbgroupelse\syst_helpers_next_arg\syst_helpers_next_war} %D \macros %D {dorepeat,dorepeatwithcommand} %D %D When doing repetitive tasks, we stromgly advice to use %D \type{\dorecurse}. The next alternative however, suits %D better some of the \CONTEXT\ interface commands. %D %D \starttyping %D \dorepeat[n*\command] %D \stoptyping %D %D The value of the used \COUNTER\ can be called within %D \type{\command} by \type{\repeater}. %D %D A slightly different alternative is: %D %D \starttyping %D \dorepeatwithcommand[n*{...}]\command %D \stoptyping %D %D When we call for something like: %D %D \starttyping %D \dorepeatwithcommand[3*{Hello}]\message %D \stoptyping %D %D we get ourselves three \type{\message{Hello}} messages in %D a row. In both commands, the \type{n*} is optional. When this %D specification is missing, the command executes once. \unexpanded\def\dorepeatwithcommand[#1]% {\syst_helpers_repeat_with_command#1*\empty*\relax} \def\syst_helpers_repeat_with_command#1*#2#3*#4\relax#5% {\ifx#2\empty\syst_helpers_repeat_with_command_again[#1]#5\else\syst_helpers_repeat_with_command_indeed{#1}{#2}{#3}#5\fi} \def\syst_helpers_repeat_with_command_indeed#1#2#3#4% {\ifx#2\empty % redundant but gives cleaner extensions #4{#1}% \else\ifnum#1<\zerocount %\normalexpanded{\dorecurse{\number-\number#1}}{#4{-#2#3}}% \dorecurse{-#1}{#4{-#2#3}}% \else\ifx#2+% \dorecurse{#1}{#4{#3}}% \else \dorecurse{#1}{#4{#2#3}}% \fi\fi\fi} \def\syst_helpers_repeat_with_command_again[#1]#2% {#2{#1}} %D The extension hook permits something like: %D %D \starttyping %D \bgroup %D %D \catcode`\*=\superscriptcatcode %D %D \gdef\syst_helpers_repeat_with_command_again[#1]% %D {\redodorepeatwithcommand#1*\empty*\relax} %D %D \gdef\redodorepeatwithcommand#1*#2#3*#4\relax#5% %D {\syst_helpers_repeat_with_command_indeed{#1}{#2}{#3}#5} %D %D \egroup %D \stoptyping %D %D although one may wonder if changing the catcode of \type {*} is wise. %D \macros %D {doifstringinstringelse} %D %D The next macro is meant for situations where both strings %D are macros. This save some unneeded expansion. %D %D \starttyping %D \def\doifstringinstringelse#1#2% %D {\syst_helpers_do_if_in_string_else#1#2% %D \expandafter\firstoftwoarguments %D \else %D \expandafter\secondoftwoarguments %D \fi} %D \stoptyping %D %D A bit faster is: \def\syst_helpers_if_instring_else_indeed#1% {\if#1@% \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \def\doifstringinstringelse#1#2% {\expandafter\def\expandafter\syst_helpers_if_instring_else\expandafter##\expandafter1#1##2##3\_e_o_s_ {\syst_helpers_if_instring_else_indeed##2}% \expandafter\expandafter\expandafter\syst_helpers_if_instring_else\expandafter#2#1@@\_e_o_s_} %D \macros %D {appendtoks,prependtoks,appendtoksonce,prependtoksonce, %D doifintokselse,flushtoks,dotoks} %D %D We use \TOKENLISTS\ sparsely within \CONTEXT, because the %D comma separated lists are more suitable for the user %D interface. Nevertheless we have: %D %D \starttyping %D (\doglobal) \appendtoks ... \to\tokenlist %D (\doglobal) \prependtoks ... \to\tokenlist %D (\doglobal) \flushtoks\tokenlist %D \dotoks\tokenlist %D \stoptyping %D %D These macros are clones of the ones implemented in page~378 of %D Knuth's \TeX book. \newtoks\t_syst_helpers_scratch \let \m_syst_helpers_scratch\empty % no longer \def but \let to target toks \unexpanded\def\appendtoks {\syst_helpers_append_toks \relax} \unexpanded\def\prependtoks {\syst_helpers_prepend_toks \relax} \unexpanded\def\appendtoksonce {\syst_helpers_append_toks_once \relax} \unexpanded\def\prependtoksonce{\syst_helpers_prepend_toks_once\relax} \def\syst_helpers_append_toks_indeed {\dodoglobal\m_syst_helpers_scratch\doubleexpandafter{\expandafter\the\expandafter\m_syst_helpers_scratch\the\t_syst_helpers_scratch}} \def\syst_helpers_prepend_toks_indeed {\dodoglobal\m_syst_helpers_scratch\doubleexpandafter{\expandafter\the\expandafter\t_syst_helpers_scratch\the\m_syst_helpers_scratch}} \def\syst_helpers_append_toks#1\to#2% {\let\m_syst_helpers_scratch#2% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}\syst_helpers_append_toks_indeed} \def\syst_helpers_prepend_toks#1\to#2% {\let\m_syst_helpers_scratch#2% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}\syst_helpers_prepend_toks_indeed} \def\syst_helpers_append_toks_once#1\to#2% {\let\m_syst_helpers_scratch#2% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}% \doifintokselse\t_syst_helpers_scratch\m_syst_helpers_scratch\donothing\syst_helpers_append_toks_indeed} \def\syst_helpers_prepend_toks_once#1\to#2% {\let\m_syst_helpers_scratch#2% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}% \doifintokselse\t_syst_helpers_scratch\m_syst_helpers_scratch\donothing\syst_helpers_prepend_toks_indeed} %D The test macro: \unexpanded\def\doifintokselse#1#2% #1 en #2 zijn toks {\edef\asciia{\detokenize\expandafter{\the#1}}% \edef\asciib{\detokenize\expandafter{\the#2}}% \doifstringinstringelse\asciia\asciib} %D A nice one too: % {\scratchtoks{abc} \removetoks b\from\scratchtoks [\the\scratchtoks]} % {\scratchtoks{abc} \removetoks x\from\scratchtoks [\the\scratchtoks]} % {\scratchtoks{} \removetoks x\from\scratchtoks [\the\scratchtoks]} % {\scratchtoks{xaa} \removetoks x\from\scratchtoks [\the\scratchtoks]} % {\scratchtoks{a\relax b} \removetoks \relax\from\scratchtoks [\showthe\scratchtoks]} \unexpanded\def\removetoks#1\from#2% {\def\syst_helpers_remove_toks##1#1##2\empty\empty\empty##3\_e_o_t_ {\def\m_syst_string_one{##3}% \ifx\m_syst_string_one\empty#2{##1}\else#2{##1##2}\fi}% \expandafter\syst_helpers_remove_toks\the#2\empty\empty\empty#1\empty\empty\empty\_e_o_t_} %D Also: \unexpanded\def\appendetoks #1\to{\normalexpanded{\appendtoks #1}\to} \unexpanded\def\prependetoks#1\to{\normalexpanded{\prependtoks#1}\to} %D Hm. \unexpanded\def\flushtoks#1% nb: can reassing to #1 again, hence the indirectness {\t_syst_helpers_scratch#1\relax \dodoglobal#1\emptytoks \the\t_syst_helpers_scratch\relax} % better: \def\flushtoks#1{\normalexpanded{\noexpand\dodoglobal#1\emptytoks\the#\relax}} \let\dotoks\the %D \macros %D {beforesplitstring,aftersplitstring} %D %D These both commands split a string at a given point in two %D parts, so \type{x.y} becomes \type{x} or \type{y}. %D %D \starttyping %D \beforesplitstring test.tex\at.\to\filename %D \aftersplitstring test.tex\at.\to\extension %D \stoptyping %D %D The first routine looks (and is indeed) a bit simpler than %D the second one. The alternative looking more or less like %D the first one did not always give the results we needed. %D Both implementations show some insight in the manipulation %D of arguments. \let\syst_helpers_split_string\relax \unexpanded\def\beforesplitstring#1\at#2\to#3% {\def\syst_helpers_split_string##1#2##2#2##3\\% {\def#3{##1}}% \expandafter\syst_helpers_split_string#1#2#2\\} \unexpanded\def\aftersplitstring#1\at#2\to#3% {\def\syst_helpers_split_string##1#2##2@@@##3\\% {\def#3{##2}}% \expandafter\syst_helpers_split_string#1@@@#2@@@\\} %D \macros %D {splitstring,greedysplitstring} %D %D A bonus macro. \unexpanded\def\splitstring#1\at#2\to#3\and#4% {\def\syst_helpers_split_string##1#2##2\empty\empty\empty##3\\% {\def#3{##1}% \def\syst_helpers_split_string{##3}% \ifx\syst_helpers_split_string\empty \let#4\empty \else \def#4{##2}% \fi}% \expandafter\syst_helpers_split_string#1\empty\empty\empty#2\empty\empty\empty\\} \unexpanded\def\greedysplitstring#1\at#2\to#3\and#4% {\edef\asciib{#1}% \let\asciic\asciib \let#3\empty \let#4\empty \doloop {\expandafter\splitstring\asciib\at#2\to\asciia\and\asciib \ifx\asciib\empty \exitloop \else % not \edef#3{\ifx#3\empty\else#3#2\fi\asciia} else % /root/path fails because then #3==empty \edef#3{\ifcase\recurselevel\or\else#3#2\fi\asciia}% \let#4\asciib \fi}% \ifx#3\empty\let#3\asciic\fi} %D \macros %D {beforetestandsplitstring, %D aftertestandsplitstring, %D testandsplitstring} \unexpanded\def\beforetestandsplitstring#1\at#2\to#3% {\def\syst_helpers_split_string##1#2##2#2##3##4\\% {\ifx##3\empty\let#3\empty\else\def#3{##1}\fi}% \expandafter\syst_helpers_split_string#1#2#2\empty\\} \unexpanded\def\aftertestandsplitstring#1\at#2\to#3% {\def\syst_helpers_split_string ##1#2##2@@@##3##4\\% {\ifx##3\empty\let#3\empty\else\def#3{##2}\fi}% \expandafter\syst_helpers_split_string #1@@@#2@@@\empty\\} \def\testandsplitstring#1\at#2\to#3\and#4% {\def\syst_helpers_split_string##1#2##2#2##3##4\\% {\ifx##3\empty\let#3\empty\let#4\empty\else\def#3{##1}\def#4{##2}\fi}% \expandafter\syst_helpers_split_string#1#2#2\empty\\} %D \macros %D {removesubstring} %D %D A first application of the two routines defined above is: %D %D \starttyping %D \removesubstring-\from first-last\to\nothyphenated %D \stoptyping %D %D Which in terms of \TEX\ looks like: \unexpanded\def\removesubstring#1\from#2\to#3% {\splitstring#2\to\m_syst_string_one\and\m_syst_string_two \dodoglobal#3{\m_syst_string_one\m_syst_string_two}} %D \macros %D {appendtocommalist,prependtocommalist, %D addtocommalist,removefromcommalist} %D %D When working with comma separated lists, one sooner or %D later want the tools to append or remove items from such a %D list. When we add an item, we first check if it's already %D there. This means that every item in the list is unique. %D %D \starttyping %D \addtocommalist {alfa} \name %D \addtocommalist {beta} \name %D \addtocommalist {gamma} \name %D \removefromcommalist {beta} \name %D \stoptyping %D %D These commands can be prefixed with \type{\doglobal}. The %D implementation of the second command is more complecated, %D because we have to take leading spaces into account. Keep in %D mind that users may provide lists with spaces after the %D commas. When one item is left, we also have to get rid of %D trailing spaces. %D %D \starttyping %D \def\words{alfa, beta, gamma, delta} %D \def\words{alfa,beta,gamma,delta} %D \stoptyping %D %D Removing an item takes more time than adding one. %D %D A fast appending alternative, without any testing, is %D also provided: %D %D \starttyping %D \appendtocommalist {something} \name %D \prependtocommalist {something} \name %D \stoptyping %D %D This can be implemented as follows: %D %D \starttyping %D \def\appendtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% %D \else % no test on empty %D \dodoglobal\edef#2{#2,#1}% %D \fi} %D %D \def\prependtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% %D \else % no test on empty %D \dodoglobal\edef#2{#1,#2}% %D \fi} %D \stoptyping %D %D The faster alternatives are: \unexpanded\def\appendtocommalist#1#2% {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}} \unexpanded\def\prependtocommalist#1#2% {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}} \unexpanded\def\addtocommalist#1#2% {item} \cs {\rawdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}}} \unexpanded\def\pretocommalist#1#2% {item} \cs {\rawdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}}} \unexpanded\def\robustdoifinsetelse#1#2% {\edef\m_syst_string_one{\detokenize\expandafter{\normalexpanded{#1}}}% \edef\m_syst_string_two{\detokenize\expandafter{\normalexpanded{#2}}}% \rawdoifinsetelse\m_syst_string_one\m_syst_string_two} \unexpanded\def\robustaddtocommalist#1#2% {item} \cs {\robustdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}}} \unexpanded\def\robustpretocommalist#1#2% {item} \cs {\robustdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}}} \unexpanded\def\xsplitstring#1#2% \cs {str} {\def\syst_helpers_split_string##1,#2,##2,#2,##3\\% {\edef\m_syst_string_one{\bcleanedupcommalist##1\empty\empty\relax}% \edef\m_syst_string_two{\acleanedupcommalist##2,,\relax}}% \expandafter\syst_helpers_split_string\expandafter,#1,,#2,,#2,\\} \def\bcleanedupcommalist#1#2#3\relax{\if#1,\else#1\fi\if#2,\else#2\fi#3} \def\bcleanedupcommalist#1#2\relax{\if#1,\else#1\fi#2} \def\acleanedupcommalist#1,,#2\relax{#1} \unexpanded\def\removefromcommalist#1#2% to be sped up {\rawdoifinsetelse{#1}#2% {\normalexpanded{\xsplitstring\noexpand#2{#1}}% \dodoglobal\edef#2% {\ifx\m_syst_string_one\empty \m_syst_string_two \else \m_syst_string_one\ifx\m_syst_string_two\empty\else,\m_syst_string_two\fi \fi}} \resetglobal} % \unexpanded\def\addtocommalist#1#2% upto 3 times slower % {\dodoglobal\edef#2{\ctxcommand{addtocommalist(\!!bs#1\!!es,\!!bs#2\!!es)}}} % % \unexpanded\def\removefromcommalist#1#2% faster and more robust % {\dodoglobal\edef#2{\ctxcommand{addtocommalist(\!!bs#1\!!es,\!!bs#2\!!es)}}} %D \macros %D {substituteincommalist} %D %D Slow but seldom used, so for the moment we stick to this %D implementation. %D %D \starttyping %D \substituteincommalist{old}{new}{list} %D \stoptyping \def\syst_helpers_substitute_in_comma_list_step#1% {\edef\m_syst_string_three{#1}% \ifx\m_syst_string_one\m_syst_string_three \ifx\m_syst_string_two\empty \else \edef\m_syst_string_four{\ifx\m_syst_string_four\empty\else\m_syst_string_four,\fi\m_syst_string_two}% \fi \else \edef\m_syst_string_four{\ifx\m_syst_string_four\empty\else\m_syst_string_four,\fi#1}% \fi} \unexpanded\def\substituteincommalist#1#2#3% old, new, list (slooow) {\edef\m_syst_string_one{#1}% \edef\m_syst_string_two{#2}% \let\m_syst_string_four\empty \normalexpanded{\rawprocesscommacommand[#3]}\syst_helpers_substitute_in_comma_list_step \let#3\m_syst_string_four} %D \macros %D {replaceincommalist} %D %D The next macro can be used to replace an indexed element in a commalist: %D %D \starttyping %D \replaceincommalist\MyList{2} %D \stoptyping %D %D Element~2 will be replaced by the current meaning of the macro \type %D {\newcommalistelement}. The old meaning is saved in \type {\commalistelement}. %D The replacement honors grouped items, like in: %D %D \starttyping %D \def\MyList{a,b,c,d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,b,c,d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,{b,c},d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,b,c,{d,e,f}} \replaceincommalist\MyList{3} %D \stoptyping %D %D This macro was used in the bibtex code (and is probably no longer needed). \newcount\c_syst_helpers_comma_list_index \let \m_syst_helpers_comma_list_target\empty \let\newcommalistelement\empty \def\syst_helpers_replace_in_comma_list_step#1% {\ifnum\commalistcounter=\c_syst_helpers_comma_list_index\relax \ifx\newcommalistelement\empty\else \ifx\m_syst_helpers_comma_list_target\empty \let\m_syst_helpers_comma_list_target\newcommalistelement \else \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter \m_syst_helpers_comma_list_target\expandafter\expandafter\expandafter {\expandafter\m_syst_helpers_comma_list_target\expandafter,\newcommalistelement}% \fi \fi \def\commalistelement{#1}% \else \ifx\m_syst_helpers_comma_list_target\empty \ifx\nexttoken\bgroup % is known -) \def\m_syst_helpers_comma_list_target{{#1}}% \else \def\m_syst_helpers_comma_list_target{#1}% \fi \else \ifx\nexttoken\bgroup % is known -) \expandafter\def\expandafter\m_syst_helpers_comma_list_target\expandafter{\m_syst_helpers_comma_list_target,{#1}}% \else \expandafter\def\expandafter\m_syst_helpers_comma_list_target\expandafter{\m_syst_helpers_comma_list_target,#1}% \fi \fi \fi \advance\commalistcounter\plusone} \unexpanded\def\replaceincommalist#1#2% #1 = commalistelement #2 = position starts at 1 {\c_syst_helpers_comma_list_index#2\relax \let\m_syst_helpers_comma_list_target\empty \let\commalistelement\empty \commalistcounter\plusone \expandafter\processcommalist\expandafter[#1]\syst_helpers_replace_in_comma_list_step \dodoglobal\let#1\m_syst_helpers_comma_list_target} %D \macros %D {globalprocesscommalist} %D %D The commalist processing commands are characterized by the %D fact that the way they handle expansion as well as the fact %D that they can be nested. This makes them kind of useless for %D handling comma lists in alignments. In these situations the %D next macro can be of use. \let\m_syst_helpers_comma_list_command_global\empty \def\syst_helpers_comma_list_command_global_step#1,% {\if]#1\else \m_syst_helpers_comma_list_command_global{#1}% \expandafter\syst_helpers_comma_list_command_global_step \fi} \unexpanded\def\globalprocesscommalist[#1]#2% {\global\let\m_syst_helpers_comma_list_command_global#2% \expandafter\syst_helpers_comma_list_command_global_step#1,],} %D \macros %D {withoutpt,PtToCm, %D numberofpoints,dimensiontocount} %D %D We can convert point into centimeters with: %D %D \starttyping %D \PtToCm{dimension} %D \stoptyping {\catcode`\.=\othercatcode \catcode`\p=\othercatcode \catcode`\t=\othercatcode \gdef\WITHOUTPT#1pt{#1}} \def\withoutpt#1% {\expandafter\WITHOUTPT#1} %D The capitals are needed because \type{p} and \type{t} have %D \CATCODE~12, while macronames only permit tokens with the %D \CATCODE~11. As a result we cannot use the \type{.group} %D primitives. Those who want to know more about this kind of %D manipulations, we advice to study the \TEX book in detail. %D Because this macro does not do any assignment, we can use it %D in the following way too. \def\PtToCm#1% {\withoutpt\the\dimexpr0.0351459804\dimexpr#1\relax\relax cm} %D We also support: %D %D \starttyping %D \numberofpoints {dimension} %D \dimensiontocount {dimension} {\count} %D \stoptyping %D %D Both macros return a rounded number. % \dimensiontocount{10.49pt}\scratchcounter \the\scratchcounter / \numberofpoints{10.49pt} % \dimensiontocount{10.51pt}\scratchcounter \the\scratchcounter / \numberofpoints{10.51pt} \def\dimensiontocount#1#2{#2\numexpr\dimexpr#1\relax/\maxcard\relax} \def\numberofpoints #1{\the\numexpr\dimexpr#1\relax/\maxcard\relax} %D \macros %D {swapdimens,swapcounts,swapmacros, %D globalswapdimens,globalswapcounts,globalswapmacros} %D %D Simple but effective are the next two macros. There name %D exactly states their purpose. \newdimen\d_syst_helpers_swapped \newcount\c_syst_helpers_swapped \let \m_syst_helpers_swapped\relax \unexpanded\def\swapdimens#1#2{\d_syst_helpers_swapped #1\relax#1#2\relax#2\d_syst_helpers_swapped} \unexpanded\def\swapcounts#1#2{\c_syst_helpers_swapped #1\relax#1#2\relax#2\c_syst_helpers_swapped} \unexpanded\def\swapmacros#1#2{\let\m_syst_helpers_swapped#1\let #1#2\let #2\m_syst_helpers_swapped} \unexpanded\def\globalswapdimens#1#2{\d_syst_helpers_swapped #1\global #1#2\global #2\d_syst_helpers_swapped} \unexpanded\def\globalswapcounts#1#2{\c_syst_helpers_swapped #1\global #1#2\global #2\c_syst_helpers_swapped} \unexpanded\def\globalswapmacros#1#2{\let\m_syst_helpers_swapped#1\global\let#1#2\global\let#2\m_syst_helpers_swapped} %D \macros %D {pushmacro,popmacro} %D %D Premature and a bit of beta, we offer: %D %D \starttyping %D \pushmacro\macro %D \popmacro\macro %D \stoptyping %D %D Beware: global! \installsystemnamespace{localpushedmacro} \installsystemnamespace{globalpushedmacro} \let\m_syst_helpers_push_macro\empty \unexpanded\def\globalpushmacro#1% {\xdef\m_syst_helpers_push_macro{\string#1}% \ifcsname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \else \expandafter\newcount\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \fi \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \plusone \global\expandafter\let\csname\the\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname#1} \unexpanded\def\globalpopmacro#1% {\xdef\m_syst_helpers_push_macro{\string#1}% \global\expandafter\let\expandafter#1\csname\the\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \minusone} \unexpanded\def\localpushmacro#1% this one can be used to push a value over an \egroup {\xdef\m_syst_helpers_push_macro{\string#1}% \ifcsname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \else \expandafter\newcount\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \fi \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \plusone \global\expandafter\let\csname\the\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname#1} \unexpanded\def\localpopmacro#1% {\xdef\m_syst_helpers_push_macro{\string#1}% \expandafter\let\expandafter#1\csname\the\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \minusone } \let\pushmacro\localpushmacro \let\popmacro \localpopmacro %D \macros %D {setlocalhsize} %D %D Sometimes we need to work with the \type{\hsize} that is %D corrected for indentation and left and right skips. The %D corrected value is available in \type{\localhsize}, which %D needs to be calculated with \type{\setlocalhsize} first. %D %D \starttyping %D \setlocalhsize \hbox to \localhsize{...} %D \setlocalhsize[-1em] \hbox to \localhsize{...} %D \setlocalhsize[.5ex] \hbox to \localhsize{...} %D \stoptyping %D %D These examples show us that an optional can be used. The %D value provided is added to \type{\localhsize}. \newdimen\localhsize \unexpanded\def\setlocalhsize % don't change ! {\doifnextoptionalelse \syst_helpers_set_local_hsize_yes \syst_helpers_set_local_hsize_nop} \def\syst_helpers_set_local_hsize_nop {\localhsize\availablehsize} \def\syst_helpers_set_local_hsize_yes[#1]% {\syst_helpers_set_local_hsize_nop \advance\localhsize#1\relax} \def\availablehsize {\dimexpr \hsize-\leftskip-\rightskip \ifnum\hangafter<\zerocount \ifdim\hangindent>\zeropoint-\else+\fi\hangindent \fi \relax} %D \macros %D {doifvalue,doifnotvalue,doifelsevalue, %D doifnothing,doifsomething,doifelsenothing, %D doifvaluenothing,doifvaluesomething,doifelsevaluenothing} %D %D These long named \type{\if} commands can be used to access %D macros (or variables) that are normally accessed by using %D \type{\getvalue}. Using these alternatives safes us three %D tokens per call. Anyone familiar with the not||values %D ones, can derive their meaning from the definitions. \unexpanded\def\doifvalue#1#2% {\edef\m_syst_string_one{\csname#1\endcsname}% \edef\m_syst_string_two{#2}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifnotvalue#1#2% {\edef\m_syst_string_one{\csname#1\endcsname}% \edef\m_syst_string_two{#2}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \unexpanded\def\doifelsevalue#1#2% {\edef\m_syst_string_one{\csname#1\endcsname}% \edef\m_syst_string_two{#2}% \ifx\m_syst_string_one\m_syst_string_two \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifnothing#1% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifsomething#1% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \unexpanded\def\doifelsenothing#1% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\doifsomethingelse#1% {\edef\m_syst_string_one{#1}% \ifx\m_syst_string_one\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \unexpanded\def\doifvaluenothing#1% {\edef\m_syst_string_one{\csname#1\endcsname}% \ifx\m_syst_string_one\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\doifvaluesomething#1% {\edef\m_syst_string_one{\csname#1\endcsname}% \ifx\m_syst_string_one\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \unexpanded\def\doifelsevaluenothing#1% {\edef\m_syst_string_one{\csname#1\endcsname}% \ifx\m_syst_string_one\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D \macros %D {doifemptyelsevalue, doifemptyvalue, doifnotemptyvalue} %D %D Also handy: \def\doifemptyelsevalue#1% {\expandafter\ifx\csname#1\endcsname\empty \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \def\doifemptyvalue#1% {\expandafter\ifx\csname#1\endcsname\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \def\doifnotemptyvalue#1% {\expandafter\ifx\csname#1\endcsname\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D \macros %D {doifallcommonelse} %D %D A complete match of two sets can be tested with %D \type {\doifallcommonelse}, where the first two %D arguments are sets. \def\syst_helpers_do_if_all_common_else#1#2#3#4% slow {\def\syst_helpers_do_common_check_all##1% {\doifnotinset{##1}{#4}\donefalse \ifdone\else\expandafter\quitcommalist\fi}% \donetrue \processcommalist[#3]\syst_helpers_do_common_check_all \ifdone\expandafter#1\else\expandafter#2\fi} \unexpanded\def\doifallcommonelse{\syst_helpers_do_if_all_common_else\firstoftwoarguments\secondoftwoarguments} \unexpanded\def\doifallcommon {\syst_helpers_do_if_all_common_else\firstofonearguments\gobbleoneargument } \unexpanded\def\doifnotallcommon {\syst_helpers_do_if_all_common_else\gobbleoneargument \firstofonearguments } %D \macros %D {DOIF,DOIFELSE,DOIFNOT} %D %D \TEX\ is case sensitive. When comparing arguments, this %D feature sometimes is less desirable, for instance when we %D compare filenames. The next three alternatives upcase their %D arguments before comparing them. %D %D \starttyping %D \DOIF {string1} {string2} {...} %D \DOIFNOT {string1} {string2} {...} %D \DOIFELSE {string1} {string2} {then ...}{else ...} %D \stoptyping %D %D We have to use a two||step implementation, because the %D expansion has to take place outside \type{\uppercase}. %D %D These might up as \LUA based helpers (i.e. considere these %D obsolete: \unexpanded\def\syst_helpers_do_IF#1#2% {\uppercase{\syst_helpers_do_if_in_string_else{$#1$}{$#2$}}% \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \unexpanded\def\syst_helpers_do_IF_NOT#1#2% {\uppercase{\syst_helpers_do_if_in_string_else{$#1$}{$#2$}}% \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \unexpanded\def\syst_helpers_do_IF_ELSE#1#2% {\uppercase{\syst_helpers_do_if_in_string_else{$#1$}{$#2$}}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\syst_helpers_do_IF_INSTRING_ELSE#1#2% {\uppercase{\syst_helpers_do_if_in_string_else{$#1$}{$#2$}}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \unexpanded\def\DOIF #1#2{\normalexpanded{\syst_helpers_do_IF {#1}{#2}}}% will become obsolete \unexpanded\def\DOIFNOT #1#2{\normalexpanded{\syst_helpers_do_IF_NOT {#1}{#2}}}% will become obsolete \unexpanded\def\DOIFELSE #1#2{\normalexpanded{\syst_helpers_do_IF_ELSE {#1}{#2}}}% will become obsolete \unexpanded\def\DOIFINSTRINGELSE #1#2{\normalexpanded{\syst_helpers_do_IF_INSTRING_ELSE{#1}{#2}}}% will become obsolete %D \macros %D {dosingleargumentwithset, %D dodoubleargumentwithset,dodoubleemptywithset, %D dotripleargumentwithset,dotripleemptywithset} %D %D These maybe too mysterious macros enable us to handle more %D than one setup at once. %D %D \starttyping %D \dosingleargumentwithset \command[#1] %D \dodoubleargumentwithset \command[#1][#2] %D \dotripleargumentwithset \command[#1][#2][#3] %D \dodoubleemptywithset \command[#1][#2] %D \dotripleemptywithset \command[#1][#2][#3] %D \stoptyping %D %D The first macro calls \type{\command[##1]} for each string %D in the set~\type{#1}. The second one calls for %D \type{\commando[##1][#2]} and the third, well one may guess. %D These commands support constructions like: %D %D \starttyping %D \def\dodefinesomething[#1][#2]% %D {\getparameters[\??xx#1][#2]} %D %D \unexpanded\def\definesomething% %D {\dodoubleargumentwithset\dodefinesomething} %D \stoptyping %D %D Which accepts calls like: %D %D \starttyping %D \definesomething[alfa,beta,...][variable=...,...] %D \stoptyping \let\m_syst_helpers_with_set_command\empty \let\syst_helpers_with_set_step \relax \def\syst_helpers_with_set_double[#1][#2]% {\doifsomething{#1} {\def\syst_helpers_with_set_step##1{\m_syst_helpers_with_set_command[##1][#2]}% \processcommalist[#1]\syst_helpers_with_set_step}} \def\syst_helpers_with_set_triple[#1][#2][#3]% {\doifsomething{#1} {\def\syst_helpers_with_set_step##1{\m_syst_helpers_with_set_command[##1][#2][#3]}% \processcommalist[#1]\syst_helpers_with_set_step}} \def\dodoubleemptywithset #1{\let\m_syst_helpers_with_set_command#1\dodoubleempty \syst_helpers_with_set_double} % \command \def\dodoubleargumentwithset#1{\let\m_syst_helpers_with_set_command#1\dodoubleargument\syst_helpers_with_set_double} % \command \def\dotripleemptywithset #1{\let\m_syst_helpers_with_set_command#1\dotripleempty \syst_helpers_with_set_triple} % \command \def\dotripleargumentwithset#1{\let\m_syst_helpers_with_set_command#1\dotripleargument\syst_helpers_with_set_triple} % \command %D \macros %D {stripcharacters,stripspaces} %D %D The next command was needed first when we implemented %D the \CONTEXT\ interactivity macros. When we use labeled %D destinations, we often cannot use all the characters we %D want. We therefore strip some of the troublemakers, like %D spaces, from the labels before we write them to the %D \DVI||file, which passes them to for instance a PostScript %D file. %D %D \starttyping %D \stripspaces\from\one\to\two %D \stoptyping %D %D Both the old string \type{\one} and the new one \type{\two} %D are expanded. This command is a special case of: %D %D \starttyping %D \stripcharacter\char\from\one\to\two %D \stoptyping %D %D As we can see below, spaces following a control sequence are %D to enclosed in \type{{}}. \let\m_syst_helpers_strip_character\empty \unexpanded\def\stripcharacter#1\from#2\to#3% {\def\syst_helpers_strip_character##1#1##2\end {\edef\m_syst_helpers_strip_character{\m_syst_helpers_strip_character##1}% \doifnotempty{##2}{\syst_helpers_strip_character##2\end}}% \let\m_syst_helpers_strip_character\empty \edef\m_syst_string_one{#2}% \expandafter\syst_helpers_strip_character\m_syst_string_one#1\end \dodoglobal\let#3\m_syst_helpers_strip_character} \unexpanded\def\stripspaces\from#1\to#2% will become \unspacestring#1\from#2 {\stripcharacter{ }\from#1\to#2} %D \macros %D {unspacestring} %D %D The next macro does the same but is more compatible with other macros, %D like \type {\convert...}. \unexpanded\def\unspacestring#1\to#2% {\stripcharacter{ }\from#1\to#2} %D \macros %D {executeifdefined} %D %D \CONTEXT\ uses one auxiliary file for all data concerning %D tables of contents, references, two||pass optimizations, %D sorted lists etc. This file is loaded as many times as %D needed. During such a pass we skip the commands thate are of %D no use at that moment. Because we don't want to come into %D trouble with undefined auxiliary commands, we call the %D macros in a way similar to \type{\getvalue}. The next macro %D take care of such executions and when not defined, gobbles %D the unwanted arguments. %D %D \starttyping %D \executeifdefined{name}\gobbleoneargument %D \stoptyping %D %D We can of course gobble more arguments using the %D appropriate gobbling command. \def\executeifdefined#1% #2 / never change this one again {\ifcsname#1\endcsname \csname#1\expandafter\expandafter\expandafter\endcsname\expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} %D This one also has the advantage that it is fully %D expandable and that it can be used after an assignment. %D \macros %D {doifsomespaceelse} %D %D The next command checks a string on the presence of a space %D and executed a command accordingly. %D %D \starttyping %D \doifsomespaceelse {tekst} {then ...} {else ...} %D \stoptyping %D %D We use this command in \CONTEXT\ for determing if an %D argument must be broken into words when made interactive. %D Watch the use of \type{\noexpand}. %D Is this one still needed? \def\syst_helpers_if_some_space_else#1 #2#3\_e_o_s_{\if\noexpand#2@} \def\doifsomespaceelse#1% % #2#3% {\syst_helpers_if_some_space_else#1 @ @\_e_o_s_ % #3\else#2\fi} \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} %D \macros %D {processseparatedlist} %D %D Maybe a bit late, but here is a more general version of the %D \type{\processcommalist} command. This time we don't handle %D nesting but accept arbitrary seperators. %D %D \starttyping %D \processseparatedlist[list][separator]\command %D \stoptyping %D %D One can think of things like: %D %D \starttyping %D \processseparatedlist[alfa+beta+gamma][+]\message %D \stoptyping %D %D We want to handle all situations, like: %D %D \startbuffer %D \processseparatedlist[{aap noot}] [ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \processseparatedlist[{aap} {noot}][ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \processseparatedlist[aap {noot}] [ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \processseparatedlist[aap noot] [ ]{\def\xxx} \convertcommand\xxx\to\ascii {\tttf\ascii} %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Therefore we smuggle a \type {\relax} in front of the %D argument, which we remove afterwards. \let\syst_helpers_process_separated_list_step\relax \def\syst_helpers_process_separated_list#1]#2[#3]#4% {\def\syst_helpers_process_separated_list_step##1##2#3% {\def\m_syst_string_one{##2}% suggested by VZ \if]##1% \let\syst_helpers_process_separated_list_step\relax \else\ifx\blankspace\m_syst_string_one #4{##1}% \else\if]##2% \let\syst_helpers_process_separated_list_step\relax \else #4{##1##2}% \fi\fi\fi \syst_helpers_process_separated_list_step}% \expandafter\syst_helpers_process_separated_list_step\gobbleoneargument#1#3]#3} \unexpanded\def\processseparatedlist[% {\syst_helpers_process_separated_list\relax} %D \macros %D {processlist} %D %D An even more general list processing macro is the following one: %D %D \starttyping %D \processlist{beginsym}{endsym}{separator}\docommand list %D \stoptyping %D %D This one supports arbitrary open and close symbols as well as user %D defined separators. %D %D \starttyping %D \processlist(){=>}\docommand(a=>b=>c=>d) %D \stoptyping \let\syst_helpers_process_any_list \relax \let\syst_helpers_process_any_list_indeed\relax \let\syst_helpers_process_any_list_step \relax \unexpanded\def\processlist#1#2#3#4% no blank skipping ! {\def\syst_helpers_process_any_list_indeed##1#2% {\def\syst_helpers_process_any_list_step####1####2#3% {\ifx#2####1% \let\syst_helpers_process_any_list_step\relax \else\ifx#2####2% \let\syst_helpers_process_any_list_step\relax \else #4{####1####2}% \fi\fi \syst_helpers_process_any_list_step}% \expandafter\syst_helpers_process_any_list_step\gobbleoneargument##1#3#2#3}% \def\syst_helpers_process_any_list#1% {\syst_helpers_process_any_list_indeed\relax}% \syst_helpers_process_any_list} %D \macros %D {processassignlist} %D %D Is possible to combine an assignment list with one %D containing keywords. Assignments are treated accordingly, %D keywords are treated by \type{\command}. %D %D \starttyping %D \processassignlist[...=...,...=...,...]\commando %D \stoptyping %D %D This command can be integrated in \type{\getparameters}, but %D we decided best not to do so. \unexpanded\def\processassignlist#1[#2]#3% {\def\syst_helpers_process_assign_list_assign[##1=##2=##3]% {\doifnot{##3}\relax{#3{##1}}}% \def\syst_helpers_process_assign_list_step##1% {\syst_helpers_process_assign_list_assign[##1==\relax]}% \processcommalist[#2]\syst_helpers_process_assign_list_step} %D \macros %D {untextargument %D untexcommand} %D %D When manipulating data(bases) and for instance generating %D index entries, the next three macros can be of help: %D %D \starttyping %D \untextargument{...}\to\name %D \untexcommand {...}\to\name %D \stoptyping %D %D They remove braces and backslashes and give us something to %D sort. \let\m_syst_helpers_untexed\empty \unexpanded\def\untexsomething {\begingroup \catcode\leftbraceasciicode \ignorecatcode \catcode\rightbraceasciicode\ignorecatcode \escapechar\minusone \syst_helpers_untex_something} \def\syst_helpers_untex_something#1#2\to#3% {\doglobal#1#2\to\m_syst_helpers_untexed \endgroup \let#3\m_syst_helpers_untexed} \unexpanded\def\untexargument{\untexsomething\convertargument} \unexpanded\def\untexcommand {\untexsomething\convertcommand} %D \macros %D {ScaledPointsToBigPoints,ScaledPointsToWholeBigPoints} %D %D One characteristic of \POSTSCRIPT\ and \PDF\ is that both %D used big points (\TEX's bp). The next macros convert points %D and scaled points into big points. %D %D \starttyping %D \ScaledPointsToBigPoints {number} \target %D \ScaledPointsToWholeBigPoints {number} \target %D \stoptyping %D %D The magic factor $72/72.27$ can be found in most \TEX\ %D related books. % \PointsToBigPoints{10.53940pt}\test \test % \PointsToBigPoints{10.53941pt}\test \test % \PointsToBigPoints{10.53942pt}\test \test % \PointsToWholeBigPoints{10.53940pt}\test \test % \PointsToWholeBigPoints{10.53941pt}\test \test % \PointsToWholeBigPoints{10.53942pt}\test \test \unexpanded\def\PointsToBigPoints#1#2% {\edef#2{\withoutpt\the\dimexpr.996264\dimexpr#1\relax\relax}} \unexpanded\def\PointsToWholeBigPoints#1#2% {\edef#2{\the\numexpr\dimexpr.996264\dimexpr#1\relax\relax/\maxcard\relax}} \unexpanded\def\ScaledPointsToBigPoints #1{\PointsToBigPoints {\number#1\scaledpoint}} \unexpanded\def\ScaledPointsToWholeBigPoints#1{\PointsToWholeBigPoints{\number#1\scaledpoint}} %D \macros %D {PointsToReal} %D %D Points can be stripped from their suffix by using %D \type{\withoutpt}. The next macro enveloppes this macro. %D %D \starttyping %D \PointsToReal {dimension} \target %D \stoptyping \unexpanded\def\PointsToReal#1#2% {\edef#2{\withoutpt\the\dimexpr#1}} %D \macros %D {dontleavehmode} %D %D Sometimes when we enter a paragraph with some command, the %D first token gets the whole first line. We can prevent this %D by saying: %D %D \starttyping %D \dontleavehmode %D \stoptyping %D %D This command is used in for instance the language module %D \type{lang-ini}. The first version was: %D %D \starttyping %D \def\dontleavehmode{\ifhmode\else\ifmmode\else$ $\fi\fi} %D \stoptyping %D %D Next, Taco came with a better alternative (using mathsurround): %D %D \starttyping %D \def\dontleavehmode %D {\ifhmode\else \ifmmode\else %D {\mathsurround\zeropoint\everymath\emptytoks$ $}% %D \fi \fi} %D \stoptyping %D %D And finaly we got the following alternative, one that avoids %D interfering grouping at the cost of a box. %D %D \starttyping %D \newbox\b_syst_helpers_dlh %D %D \unexpanded\def\dontleavehmode %D {\ifhmode\else \ifmmode\else %D \setbox\b_syst_helpers_dlh\hbox{\mathsurround\zeropoint\everymath\emptytoks$ $}\unhbox\b_syst_helpers_dlh %D \fi \fi} %D \stoptyping %D %D But, as we run a recent version of \TEX, we can use the new primitive: \ifdefined\normalquitvmode \let\dontleavehmode\normalquitvmode \fi %D \macros %D {uppercasestring,lowercasestring} %D %D The names tell what they do: %D %D \starttyping %D \uppercasestring somestring\to\somestring %D \lowercasestring somestring\to\somestring %D \stoptyping %D %D The first argument may be a \type{\macro}. \unexpanded\def\uppercasestring#1\to#2% {\uppercase\expandafter{\expandafter\dodoglobal\expandafter\edef\expandafter#2\expandafter{\normalexpanded{#1}}}} \unexpanded\def\lowercasestring#1\to#2% {\lowercase\expandafter{\expandafter\dodoglobal\expandafter\edef\expandafter#2\expandafter{\normalexpanded{#1}}}} %D These macros are sort of obsolete as we never use uppercase this %D way. %D \macros %D {handletokens} %D %D With the next macro we enter a critical area of macro %D expansion. What we want is a macro that looks like: %D %D \starttyping %D \handletokens some tokens\with \somemacro %D \stoptyping %D %D A bonus example: %D %D \starttyping %D \hbox{\handletokens tekst en meer tekst\with\ruledhbox} %D %D \def\weetikveel#1{\if#1\blankspace\space\else\ruledhbox{#1}\fi} %D %D \hbox{\handletokens tekst en meer tekst\with\weetikveel} %D \stoptyping %D \macros %D {counttoken,counttokens} %D %D For the few occasions that we want to know the number of %D specific tokens in a string, we can use: %D %D \starttyping %D \counttoken token\in string\to \somecount %D \counttokens string\to \somecount %D \stoptyping %D %D This macro, that for instance is used in \type{cont-tab}, %D takes a real counter. The macro can be preceded by \type %D {\doglobal}. \def\syst_helpers_count_token#1% obeys {} {\def\m_syst_string_three{#1}% \ifx\m_syst_string_two\m_syst_string_three \else \ifx\m_syst_string_one\m_syst_string_three \advance\scratchcounter\plusone \fi \expandafter\syst_helpers_count_token \fi} \unexpanded\def\counttoken#1\in#2\to#3% {\scratchcounter\zerocount \def\m_syst_string_one{#1}% \def\m_syst_string_two{\end}% \syst_helpers_count_token#2\end \dodoglobal#3\scratchcounter} \unexpanded\def\counttokens#1\to#2% {\scratchcounter\zerocount \def\syst_helpers_count_token##1{\advance\scratchcounter\plusone}% \handletokens#1\with\syst_helpers_count_token \dodoglobal#2\scratchcounter} %D \macros %D {splitofftokens} %D %D Running this one not always gives the expected results. %D Consider for instance the macro for which I originally %D wrote this token handler. \unexpanded\def\splitofftokens#1\from#2\to#3% slow but hardly used {\ifnum#1>\zerocount \scratchcounter#1\relax \def\syst_helpers_split_off_tokens##1% {\ifnum\scratchcounter>\zerocount \advance\scratchcounter \minusone \edef#3{#3##1}% \fi}% % \let#3\empty % #3 can be #2, so: \expandafter\let\expandafter#3\expandafter\empty \expandafter\handletokens#2\with\syst_helpers_split_off_tokens \else \edef#3{#2}% \fi} %D This macro can be called like: %D %D \startbuffer[example] %D \splitofftokens10\from01234567 890123456789\to\test [\test] %D \stopbuffer %D %D However, the characters that we expect to find in %D \type{\test} just don't show up there. The reason for this %D is not that logical but follows from \TEX's sometimes %D mysterious way of expanding. Look at this: %D %D \startbuffer[next] %D \def\next{a} \edef\test{\next} [\test] %D \let\next=b \edef\test{\test\next} [\test] %D \let\next=c \edef\test{\next} [\test] %D \let\next=d \edef\test{\test\next} [\test] %D \let\next=e \expandafter\edef\expandafter\test\expandafter{\test\next} [\test] %D \stopbuffer %D %D \typebuffer[next] %D %D Careful reading shows that inside an \type{\edef} macro's %D that are \type{\let} are not expanded! %D %D \unprotect\getbuffer[next]\protect %D %D That's why we finally end up with a macro that looks %D ahead by using an assignment, this time by using \type %D {\futurelet}, and grabbing an argument as well. That %D way we can handle the sentinal, a blank space and grouped %D tokens. \unexpanded\def\syst_helpers_handle_tokens % \nexthandledtoken is part of interface {\futurelet\nexthandledtoken\syst_helpers_handle_tokens_indeed} \def\handletokens#1\with#2% {\gdef\syst_helpers_handle_tokens_command{#2}% permits more complex #2's \syst_helpers_handle_tokens#1\end} \def\syst_helpers_handle_tokens_indeed {\ifx\nexthandledtoken\blankspace \expandafter\syst_helpers_handle_tokens_indeed_one \else\ifx\nexthandledtoken\end \expandafter\expandafter\expandafter\gobbletwoarguments % also gobble the \end \else \expandafter\expandafter\expandafter\syst_helpers_handle_tokens_indeed_two \fi\fi *} \def\syst_helpers_handle_tokens_indeed_one * % {\syst_helpers_handle_tokens_command{ }\syst_helpers_handle_tokens} \def\syst_helpers_handle_tokens_indeed_two *#1% {\syst_helpers_handle_tokens_command{#1}\syst_helpers_handle_tokens} %D This macro is tested on: %D %D \def\xxx#1{[#1]} %D %D \startlines %D \handletokens abc\with\xxx %D \handletokens a b c\with\xxx %D \handletokens a b c\with\xxx %D \handletokens a{bc}d\with\xxx %D \handletokens a\space bc \with\xxx %D \stoplines %D %D And our previous example shows up as: %D %D \getbuffer[example] %D \macros %D {iftrialtypesetting, ifvisible} %D %D The next boolean is at first sight a strange one. Sometimes %D one does a trial typesetting run, for instance to determine %D dimensions. Some mechanisms, like object inclusion, can fail %D on such trials. Temporary setting the next boolean to true, %D helps a lot. The second boolena can be used to inhibit %D processing completely. \newif\ifvisible \visibletrue \newtoks\everysettrialtypesetting \newtoks\everyresettrialtypesetting \unexpanded\def\settrialtypesetting {\the\everysettrialtypesetting } % obeys grouping so \unexpanded\def\resettrialtypesetting{\the\everyresettrialtypesetting} % this one is seldom needed \let\iftrialtypesetting\iffalse % so we have no \trialtypesettingtrue|false in mkiv ! \appendtoks \let\iftrialtypesetting\iftrue \to \everysettrialtypesetting \appendtoks \let\iftrialtypesetting\iffalse \to \everyresettrialtypesetting %D \macros %D {twodigitrounding} %D %D When using \type {\special}s or \type {\pdfliteral}s, it %D sometimes makes sense to limit the precission. The next %D macro rounds a real number to two digits. It takes one %D argument and only works in \ETEX. % \def\dointegerrounding #1.#2\relax {#1} % \def\doonedigitrounding #1.#2#3\relax {\ifx#2*#1\else#1.#2\fi} % \def\dotwodigitrounding #1.#2#3#4\relax {\ifx#2*#1\else#1.#2#3\fi} % \def\dothreedigitrounding#1.#2#3#4#5\relax{\ifx#2*#1\else#1.#2#3#4\fi} % % \def\integerrounding#1% % {\expandafter\expandafter\expandafter\dointegerrounding \expandafter\WITHOUTPT\the\dimexpr#1\points+.5\points \relax .\relax} % \def\onedigitrounding#1% % {\expandafter\expandafter\expandafter\doonedigitrounding \expandafter\WITHOUTPT\the\dimexpr#1\points+.05\points \relax 00.*0\relax} % \def\twodigitrounding#1% % {\expandafter\expandafter\expandafter\dotwodigitrounding \expandafter\WITHOUTPT\the\dimexpr#1\points+.005\points \relax 000.*00\relax} % \def\threedigitrounding#1% % {\expandafter\expandafter\expandafter\dothreedigitrounding\expandafter\WITHOUTPT\the\dimexpr#1\points+.0005\points\relax0000.*00\relax} \def\integerrounding #1{\cldcontext{"\letterpercent 0.0f",#1}} \def\onedigitrounding #1{\cldcontext{"\letterpercent 0.1f",#1}} \def\twodigitrounding #1{\cldcontext{"\letterpercent 0.2f",#1}} \def\threedigitrounding#1{\cldcontext{"\letterpercent 0.3f",#1}} %D \macros %D {processcontent} %D %D This is the first occasion where \TEX\ and \ETEX\ are no %D longer compatible, although in many cases things go ok. %D Beware of verbatim, i.e. catcode changes. %D %D \starttyping %D \unexpanded\def\starthans% %D {\processcontent{stophans}\test{\message{\test}\wait}} %D \stoptyping %D %D This macro is first used in the tabulation macros. \unexpanded\def\processcontent#1% {\begingroup\expandafter\syst_helpers_process_content\csname#1\endcsname} \unexpanded\def\syst_helpers_process_content#1#2#3% {\unexpanded\def\syst_helpers_process_content##1#1% {\endgroup\def#2{##1}#3}% \syst_helpers_process_content} %D \macros %D {dogobblesingleempty, dogobbledoubleempty} %D %D These two macros savely grab and dispose two arguments. \def\dogobblesingleempty{\dosingleempty\syst_helpers_gobble_single_empty} \def\dogobbledoubleempty{\dodoubleempty\syst_helpers_gobble_double_empty} \def\syst_helpers_gobble_single_empty [#1]{} \def\syst_helpers_gobble_double_empty[#1][#2]{} \let\gobblesingleempty\dogobblesingleempty % also used \let\gobbledoubleempty\dogobbledoubleempty % also used %D \macros %D {@True, @False, @Not, @And} %D %D Some predicate logic functions, used in for instance the %D math module. % These have rather ugly names ... will change: \def\@True {00} \def\@False {01} \def\@Not #1{0\ifcase#11 \or\expandafter 1\else \expandafter 0\fi} \def\@And #1#2{0\ifcase#1#2 \expandafter 0\else \expandafter 1\fi} %D \macros %D {setdimensionwithunit, freezedimensionwithunit} %D %D The next assignments are all valid: %D %D \starttyping %D \setdimensionwithunit\scratchdimen{10} {cm} %D \setdimensionwithunit\scratchdimen{10cm}{cm} %D \setdimensionwithunit\scratchdimen{10cm}{} %D \freezedimensionwithunit\SomeWidth{\textwidth} %D \freezedimensionwithunit\SomeDepth{\dp\strutbox} %D \stoptyping %D %D As an alternative for the next macro we can use a global %D assignment inside a box. The \type{\empty}'s permits %D gobbling while preventing spurious \type{\relax}'s. \unexpanded\def\setdimensionwithunit#1#2#3% number unit dimension / nice trick {\afterassignment\gobblefourarguments#1=#2#3pt\relax\empty\empty\empty\empty} \unexpanded\def\freezedimensionwithunit#1#2% {\setdimensionwithunit\scratchdimen#1{#2}\edef#1{\the\scratchdimen}} %D \macros %D {doifsometokselse, doifsometoks} %D %D Not that fast I guess, but here's a way to test for token %D registers being empty. \unexpanded\def\doifsometokselse#1% {\edef\m_syst_string_one{\the#1}% one level expansion so quite ok \ifx\m_syst_string_one\empty \expandafter\secondoftwoarguments \else \expandafter\firstoftwoarguments \fi} \unexpanded\def\doifsometoks#1% {\edef\m_syst_string_one{\the#1}% one level expansion so quite ok \ifx\m_syst_string_one\empty \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \unexpanded\def\doifemptytoks#1% {\edef\m_syst_string_one{\the#1}% one level expansion so quite ok \ifx\m_syst_string_one\empty \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} %D \macros %D {startstrictinspectnextcharacter} %D %D This one if for Taco's bibliography module: \let\syst_helpers_normal_inspect_next_character\syst_helpers_inspect_next_character \def\syst_helpers_strict_inspect_next_character% no user macro ! {\ifx\nexttoken\charactertoken \expandafter\m_syst_action_yes \else \expandafter\m_syst_action_nop \fi} % better: push/pop \unexpanded\def\startstrictinspectnextcharacter {\let\syst_helpers_inspect_next_character\syst_helpers_strict_inspect_next_character} \unexpanded\def\stopstrictinspectnextcharacter {\let\syst_helpers_inspect_next_character\syst_helpers_normal_inspect_next_character} \def\strictdoifnextoptionalelse#1#2% {\startstrictinspectnextcharacter \doifnextcharelse[{\stopstrictinspectnextcharacter#1}{\stopstrictinspectnextcharacter#2}} %D \macros %D {gobblespacetokens} %D %D This macro needs a speed-up! %\def\gobblespacetokens % {\doifnextcharelse\empty\donothing\donothing} % no {}\do\do ! \def\gobblespacetokens {\afterassignment\nexttoken\let\nexttoken=} %D \macros %D {verbatimargument} %D %D As the name says, this macro converts its argument to a %D (rather safe) string. \let\verbatimstring\detokenize %D These are needed in ordinal number conversions: \def\lastdigit#1% {\expandafter\thelastdigit\number#1\relax} \def\thelastdigit#1#2% {\ifx#2\relax#1\else\expandafter\thelastdigit\expandafter#2\fi} \def\lasttwodigits#1% {\expandafter\thelasttwodigits\expandafter0\number#1\relax} \def\thelasttwodigits#1#2#3% 0 dig ... \relax {\ifx#3\relax#1#2\else\expandafter\thelasttwodigits\expandafter#2\expandafter#3\fi} %D \macros %D {serializecommalist} %D %D Concatenate commalists: \let\syst_helpers_serialize_comma_list_step\relax \def\syst_helpers_serialize_comma_list_step#1% {\edef\serializedcommalist{\serializedcommalist#1}} \unexpanded\def\serializecommalist[#1]% {\let\serializedcommalist\empty \processcommacommand[#1]\syst_helpers_serialize_comma_list_step} %D \macros %D {purenumber} %D %D Sometimes we need control over when \TEX\ stops reading a %D number, especially in full expandable macros where using %D \type {\relax} would lead to disasters. %D %D \starttyping %D \ifodd\purenumber{...}\space ... \else ... \fi %D \stoptyping %D %D Here we use a space as number delimiter in combination %D with a space- and relax-less \type {\purenumber}. This %D macro works ok with \type {\the}, \type {\number} as well %D as \ETEX's \type {\numexpr}. \def\purenumber#1{\expandafter\firstofoneargument\expandafter{\number#1}} %D \macros %D {filterfromvalue} %D %D \starttyping %D \setvalue{xx}{{A}{B}{C}} %D %D \filterfromvalue{xx}{3}{3} %D \filterfromvalue{xx}{3}{2} %D \filterfromvalue{xx}{3}{1} %D \stoptyping %D %D An alternative is to store 'max' in the list, say: %D %D \starttyping %D \setvalue{xx}{3{A}{B}{C}} %D %D \filterfromvalues{3}{xx}{3} %D \filterfromvalues{3}{xx}{2} %D \filterfromvalues{3}{xx}{1} %D \stoptyping %D %D I'll implement this when I'm in \quotation {writing dirty %D macros mood}. \def\dofilterfromstr#1#2% max n % no need to be fast {\expandafter \expandafter \expandafter \strippedcsname \ifcase#1\or \ifcase#2\or \firstofoneargument \else \gobbleoneargument \fi \or \ifcase#2\or \firstoftwoarguments \or \secondoftwoarguments \else \gobbletwoarguments \fi \or \ifcase#2\or \firstofthreearguments \or \secondofthreearguments \or \thirdofthreearguments \else \gobblethreearguments \fi \or \ifcase#2\or \firstoffourarguments \or \secondoffourarguments \or \thirdoffourarguments \or \fourthoffourarguments \else \gobblefourarguments \fi \or \ifcase#2\or \firstoffivearguments \or \secondoffivearguments \or \thirdoffivearguments \or \fourthoffivearguments \or \fifthoffivearguments \else \gobblefivearguments \fi \fi} \def\filterfromvalue#1#2#3% value max n {\expandafter\doubleexpandafter\csname % we use the fact that an \expandafter\ifx\csname#1\endcsname\relax % undefined cs has become \relax \strippedcsname\gobbleoneargument % which we then gobble here \else \dofilterfromstr{#2}{#3}% \fi \endcsname\csname#1\endcsname} \def\filterfromnext#1#2% max n {..}{..}{..}{..} {\csname\dofilterfromstr{#1}{#2}\endcsname} %D \macros %D {definemeasure} %D %D \starttyping %D \definemeasure[mywidth][\dimexpr(\textwidth-1cm)] %D %D ... \measure{mywidth} ... %D \stoptyping \installsystemnamespace{measure} \unexpanded\def\definemeasure {\dodoubleargument\syst_helpers_define_measure} \def\syst_helpers_define_measure[#1][#2]% {\expandafter\def\csname\??measure#1\endcsname{#2}} \unexpanded\def\freezemeasure {\dodoubleargument\syst_helpers_freeze_measure} \def\syst_helpers_freeze_measure[#1][#2]% {\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} \unexpanded\def\setmeasure #1#2{\expandafter\def \csname\??measure#1\endcsname{#2}} % quick way \unexpanded\def\setgmeasure#1#2{\expandafter\gdef\csname\??measure#1\endcsname{#2}} % quick way \unexpanded\def\setemeasure#1#2{\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way \unexpanded\def\setxmeasure#1#2{\expandafter\xdef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way \def\measure {\the\measured} \def\measured#1% {\dimexpr\ifcsname\??measure#1\endcsname\csname\??measure#1\endcsname\else\zeropoint\fi\relax} % #2 could be omitted, but we want to support spaces % % \setmeasure {x} {1cm} % \setmeasure {xx} {1cm} % \setmeasure {xxx}{1cm} %D \macros %D {dividedsize} %D %D This one can be used inside a measure (used in m4all): %D %D \starttyping %D \definemeasure[columnwidth][\dividedsize\textwidth{1em}{3}] %D \stoptyping \def\dividedsize#1#2#3% size gap n {\dimexpr \ifnum\dimexpr#1\relax>\plusone (\dimexpr#1\relax-\numexpr#3-\plusone\relax\dimexpr#2\relax)/#3\else#1% \fi \relax} %D \macros %D {doifdimensionelse} %D %D This is a dirty one: we simply append a unit and discard it when needed. \def\doifdimensionelse#1% {\afterassignment\syst_helpers_if_dimension_else\scratchdimen#1pt\relax} \def\syst_helpers_if_dimension_else#1% {\ifx#1\relax \expandafter\secondoftwoarguments \else % #1=p ... t\relax \expandafter\thirdoffourarguments \fi} %D Ok, here's another one, slower but seldom used. This one scans the text. %D %D \starttabulate[|Tc|Tc|] %D \NC pt \NC \doifdimenstringelse {pt}{yes}{no} \NC \NR %D \NC 12pt \NC \doifdimenstringelse {-12pt}{yes}{no} \NC \NR %D \NC 1pt \NC \doifdimenstringelse {1pt}{yes}{no} \NC \NR %D \NC 12pt \NC \doifdimenstringelse {12pt}{yes}{no} \NC \NR %D \NC 12.0pt \NC \doifdimenstringelse {12.0pt}{yes}{no} \NC \NR %D \NC -.12pt \NC \doifdimenstringelse {-.12pt}{yes}{no} \NC \NR %D \NC .12pt \NC \doifdimenstringelse {.12pt}{yes}{no} \NC \NR %D \NC -12pt \NC \doifdimenstringelse {-12pt}{yes}{no} \NC \NR %D \NC -12.0pt \NC \doifdimenstringelse{-12.0pt}{yes}{no} \NC \NR %D \NC big \NC \doifdimenstringelse {big}{yes}{no} \NC \NR %D \NC 10 \NC \doifdimenstringelse {10}{yes}{no} \NC \NR %D \NC 1 \NC \doifdimenstringelse {1}{yes}{no} \NC \NR %D \stoptabulate \installsystemnamespace{dimenchecka} \installsystemnamespace{dimencheckb} \installsystemnamespace{dimencheckc} \def\doifdimenstringelse#1{\normalexpanded{\noexpand\dodimenteststageone#1}\empty\empty]} \def\dodimenteststageone #1#2{\csname \??dimenchecka\ifcsname \??dimenchecka#2\endcsname#2\else x\fi\endcsname#2} \def\dodimenteststagetwo #1#2{\csname \??dimencheckb\ifcsname \??dimencheckb#2\endcsname#2\else x\fi\endcsname#2} \def\dodimenteststagethree #1]{\csname \??dimencheckc\ifcsname \??dimencheckc#1\endcsname#1\else x\fi\endcsname} \expandafter\let\csname \??dimenchecka x\endcsname\dodimenteststagethree \expandafter\let\csname \??dimencheckb x\endcsname\dodimenteststagethree \expandafter\let\csname \??dimencheckc x\endcsname\secondoftwoarguments \expandafter\let\csname \??dimenchecka.\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimenchecka,\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimenchecka1\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka2\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka3\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka4\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka5\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka6\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka7\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka8\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka9\endcsname\dodimenteststageone \expandafter\let\csname \??dimenchecka0\endcsname\dodimenteststageone \expandafter\let\csname \??dimencheckb1\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb2\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb3\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb4\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb5\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb6\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb7\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb8\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb9\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckb0\endcsname\dodimenteststagetwo \expandafter\let\csname \??dimencheckc pt\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc pc\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc in\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc bp\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc cm\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc mm\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc dd\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc cc\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc sp\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc ex\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc em\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc nd\endcsname\firstoftwoarguments \expandafter\let\csname \??dimencheckc nc\endcsname\firstoftwoarguments %D \macros %D {comparedimension,comparedimensioneps} %D %D This is a dirty one: we simply append a unit and discard it when needed. \newdimen \roundingeps \roundingeps=10sp \newconstant\compresult \def\comparedimension#1#2% {\compresult \ifdim#1<#2% \zerocount \else\ifdim#1<#2% \plusone \else \plustwo \fi\fi} \def\comparedimensioneps#1#2% todo: use eps feature {\compresult \ifdim\dimexpr#1-#2\relax<\roudingeps \zerocount \else\ifdim\dimexpr#2-#1\relax<\roudingeps \zerocount \else\ifdim#1<#2% \plusone \else \plustwo \fi\fi\fi} % % % % % % % % % % % % % % % % % % % % % % % pretty ugly but fast % \copycsname xxx\endcsname\csname ..\endcsname \unexpanded\def\copycsname{\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname} % \letcscsname \crap \csname ..\endcsname % \letcsnamecs \csname ..\endcsname\crap % \letcsnamecsname\csname ..\endcsname\csname ..\endcsname \unexpanded\def\letcscsname {\expandafter\let\expandafter} \unexpanded\def\letcsnamecs {\expandafter\let} \unexpanded\def\letcsnamecsname{\expandafter\expandafter\expandafter\let\expandafter\expandafter} % another one, add an item to a commalist \unexpanded\def\addvalue#1#2% cs item {\ifcsname#1\endcsname\else\expandafter\let\csname#1\endcsname\empty\fi \normalexpanded{\noexpand\addtocommalist{#2}\expandafter\noexpand\csname#1\endcsname}} \def\unspaced#1% {\syst_helpers_unspaced#1\end} \def\syst_helpers_unspaced#1% {\ifx#1\end \expandafter\gobbleoneargument \else \ifx#1\blankspace\else#1\fi \fi \syst_helpers_unspaced} \unexpanded\def\unspaceargument#1\to#2% {\scratchcounter\catcode\spaceasciicode \catcode\spaceasciicode\ignorecatcode \scantextokens{\edef#2{#1}}% \catcode\spaceasciicode\scratchcounter} \unexpanded\def\unspaceafter#1#2% {\unspaceargument#2\to\ascii \expandafter#1\expandafter{\ascii}} % sometimes handy: \unexpanded\def\doifhasspaceelse#1% {\edef\m_syst_string_one{#1}% \normalexpanded{\syst_helpers_if_has_space_else#1\space}\empty\relax} \unexpanded\def\syst_helpers_if_has_space_else#1 #2#3\relax % \space\empty\relax {\ifx\m_syst_string_one\space \expandafter\firstoftwoarguments \else\ifx#2\empty \doubleexpandafter\secondoftwoarguments \else \doubleexpandafter\firstoftwoarguments \fi\fi} % this will replace loadfile once and alike !!! todo \installsystemnamespace{flag} \unexpanded\def\setflag #1{\expandafter\dodoglobal\expandafter\let\csname\??flag#1\endcsname\zerocount} \unexpanded\def\resetflag#1{\expandafter\dodoglobal\expandafter\let\csname\??flag#1\endcsname\plusone} \def\flag#1{\csname\??flag#1\endcsname} \def\doifelseflagged#1% {\expandafter\ifx\csname\??flag#1\endcsname\relax \expandafter\secondoftwoarguments \else\ifcase\csname\??flag#1\endcsname \doubleexpandafter\firstoftwoarguments \else \doubleexpandafter\secondoftwoarguments \fi\fi} \def\doifnotflagged#1% {\expandafter\ifx\csname\??flag#1\endcsname\relax \expandafter\firstofoneargument \else\ifcase\csname\??flag#1\endcsname \doubleexpandafter\gobbleoneargument \else \doubleexpandafter\firstofoneargument \fi\fi} \unexpanded\def\inheritparameter[#1]#2[#3]#4[#5]% tag tokey fromkey {\expandafter\def\csname#1#3\expandafter\endcsname\expandafter{\csname#1#5\endcsname}} \def\syst_helpers_if_non_zero_positive_else#1#2\end % #3#4% {\ifx#1\relax \ifcase\scratchcounter \endgroup \doubleexpandafter\secondoftwoarguments \else \endgroup \doubleexpandafter\firstoftwoarguments \fi \else \endgroup \expandafter\secondoftwoarguments \fi} \def\doifnonzeropositiveelse#1% {\begingroup\afterassignment\syst_helpers_if_non_zero_positive_else\scratchcounter=0#1\relax\empty\end} % here ? \unexpanded\def\dosetrawvalue #1#2#3{\expandafter \def\csname#1#2\endcsname{#3}} \unexpanded\def\dosetrawevalue#1#2#3{\expandafter\edef\csname#1#2\endcsname{#3}} \unexpanded\def\dosetrawgvalue#1#2#3{\expandafter\gdef\csname#1#2\endcsname{#3}} \unexpanded\def\dosetrawxvalue#1#2#3{\expandafter\xdef\csname#1#2\endcsname{#3}} \unexpanded\def\getrawparameters {\dogetparameters\dosetrawvalue } \unexpanded\def\getraweparameters {\dogetparameters\dosetrawevalue} \unexpanded\def\getrawgparameters {\dogetparameters\dosetrawgvalue} \unexpanded\def\getrawxparameters {\dogetparameters\dosetrawxvalue} \unexpanded\def\globalgetrawparameters{\dogetparameters\dosetrawgvalue} % obsolete %D Sort of obsolete: \newcount\c_syst_helpers_mod \unexpanded\def\dosetmodulo#1#2#3% {\c_syst_helpers_mod#1\divide\c_syst_helpers_mod#2\multiply\c_syst_helpers_mod#2% #3#1\advance#3-\c_syst_helpers_mod} \unexpanded\def\dosetdivision#1#2#3% {#3#1\divide#3 #2\relax} \unexpanded\def\DoMod#1by#2to#3{\dosetmodulo {#1}{#2}{#3}} \unexpanded\def\DoDiv#1by#2to#3{\dosetdivision{#1}{#2}{#3}} \def\syst_helpers_unprotected#1\par {#1\protect} \unexpanded\def\unprotected {\unprotect \syst_helpers_unprotected} % awaiting the definitive implementation % \ifdefined\resettimer \else % \let\resettimer \relax % \newcount\elapsedtime % \fi % \def\elapsedseconds{\expandafter\withoutpt\the\dimexpr\elapsedtime sp\relax} \def\resettimer {\ctxcommand{resettimer()}} \def\elapsedtime {\ctxcommand{elapsedtime()}} \let\elapsedseconds \elapsedtime \newcount\c_syst_helpers_test_feature_n \unexpanded\def\testfeature#1#2% {\def\syst_helpers_test_feature_step {\advance\c_syst_helpers_test_feature_n\plusone \ifnum\c_syst_helpers_test_feature_n>#1\else#2\expandafter\syst_helpers_test_feature_step\fi}% \retestfeature} \unexpanded\def\retestfeature % timer support is new per 10/5/2005 {\bgroup \ifcase\interactionmode\let\wait\relax\fi \writestatus\m!system{starting feature test}\wait \resettimer \c_syst_helpers_test_feature_n\zerocount \syst_helpers_test_feature_step \writestatus\m!system{feature test done (\elapsedseconds s)}% \wait \egroup} \unexpanded\def\showtimer#1% {\writestatus{runtime}{\elapsedseconds\space s / #1}} \unexpanded\def\testfeatureonce#1#2% {\begingroup \let\wait\relax \testfeature{#1}{#2}% \endgroup} %D \macros %D {freezedimenmacro} %D %D This macro is use as: %D %D \starttyping %D \freezedimenmacro\leftmargindistance %D \stoptyping \unexpanded\def\freezedimenmacro#1% {\edef#1{\the\dimexpr#1}} %D The next macro negates a macro (dimension or number, or actually, whatever. %D It's a typical example of \type {\if} usage: %D %D \starttyping %D \if-\whatever \else-\whatever\fi => else => -whatever %D \if--\whatever\else-\whatever\fi => then => whatever %D \stoptyping \def\negated#1{\if-#1\else-#1\fi} % does only work in macros or text \def\gobbleassigndimen#1\\{} \def\assigndimen#1#2% {\afterassignment\gobbleassigndimen#1=#2\zeropoint\\} \unexpanded\def\appended#1#2#3{\expandafter#1\expandafter#2\expandafter{#2#3}} \unexpanded\def\appendvalue #1{\expandafter\appended\expandafter \def\csname#1\endcsname} \unexpanded\def\appendgvalue#1{\expandafter\appended\expandafter\gdef\csname#1\endcsname} \unexpanded\def\prepended#1#2#3% {\t_syst_helpers_scratch{#3}% \expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter#2\expandafter\expandafter\expandafter {\expandafter\the\expandafter\t_syst_helpers_scratch#2}} \unexpanded\def\prependvalue #1{\expandafter\prepended\expandafter \def\csname#1\endcsname} \unexpanded\def\prependgvalue#1{\expandafter\prepended\expandafter\gdef\csname#1\endcsname} %D \macros %D {dowithrange} %D %D This one is for Mojca Miklavec, who made me aware of the fact that %D \type {page-imp.tex} was not the best place to hide it. \unexpanded\def\dowithrange#1#2% #2 takes number {\splitstring#1\at:\to\fromrange\and\torange \ifx\torange\empty\let\torange\fromrange\fi \dostepwiserecurse\fromrange\torange1{#2{\recurselevel}}} %D \macros %D {ignoreimplicitspaces} %D %D \startbuffer %D \def\whatever[#1]{\expanded{\definedfont[#1 at 12pt]}\ignorespaces} %D {a\whatever[Serif]b a\whatever[Serif] b a\whatever[Serif]\space b} %D \def\whatever[#1]{\expanded{\definedfont[#1 at 12pt]}\ignoreimplicitspaces} %D {a\whatever[Serif]b a\whatever[Serif] b a\whatever[Serif]\space b} %D \stopbuffer %D %D \typebuffer \getbuffer \unexpanded\def\ignoreimplicitspaces {\doifnextcharelse\relax\relax\relax} %D \macros %D {processwords} %D %D Not that sophisticated but sometimes users (like in metafun). \def\syst_helpers_process_word#1 #2\_e_o_w_ {\doifsomething{#1}{\processword{#1} \syst_helpers_process_word#2 \_e_o_w_}} \def\processwords#1% {\syst_helpers_process_word#1 \_e_o_w_}% no \unskip \let\processword\relax %D \macros %D {startnointerference} %D %D \starttyping %D \startnointerference %D all kind of code %D \stopnointerference %D \stoptyping \newbox\b_syst_helpers_no_interference \unexpanded\def\startnointerference % not even grouped ! {\setbox\b_syst_helpers_no_interference\vbox \bgroup} \unexpanded\def\stopnointerference {\egroup \setbox\b_syst_helpers_no_interference\emptybox} %D A variant for \type {\executeifdefined}: \def\expandcheckedcsname#1#2% #2 is often a \xxxparameter so let's expand it once {\normalexpanded{\noexpand\syst_helpers_expand_checked_csname{#1}{#2}}} \def\syst_helpers_expand_checked_csname#1#2#3% {\csname#1\ifcsname#1#2\endcsname#2\else#3\fi\endcsname} %D Signal. Some fonts have a char0 rendering so we need to make sure that it %D is not set in the font! \unexpanded\def\signalcharacter{\char\zerocount} % \zwj %D A few secial variants of commands defined here. Some more will be moved here (e.g. %D from table modules. \def\dodirectdoubleempty#1#2% used in math (lookahead issues) {\ifx#2[% \expandafter\syst_helpers_direct_double_empty_one_yes \else \expandafter\syst_helpers_direct_double_empty_one_nop \fi#1#2} \def\syst_helpers_direct_double_empty_one_yes#1[#2]#3% {\ifx#3[\else\expandafter\syst_helpers_direct_double_empty_two_nop\fi#1[#2]#3} \def\syst_helpers_direct_double_empty_one_nop#1{#1[][]} \def\syst_helpers_direct_double_empty_two_nop#1[#2]{#1[#2][]} %D Used in math definitions (in an type {\edef}): %D \startbuffer %D [\docheckedpair{}] %D [\docheckedpair{a}] %D [\docheckedpair{a,b}] %D [\docheckedpair{a,b,c}] %D \stopbuffer %D %D \typebuffer \startlines \getbuffer \stoplines \def\docheckedpair#1% {\syst_helpers_checked_pair#1,,\_o_e_p_} \def\syst_helpers_checked_pair#1,#2,#3\_o_e_p_ {#1,#2} %D Here are some nasty helpers. They can be used to fill often expanded token %D lists efficiently (see tabulate for an example). \def\constantnumber#1% {\ifcase#1\zerocount \or \plusone \or \plustwo \or \plusthree \or \plusfour \or \plusfive \or \plussix \or \plusseven \or \pluseight \or \plusnine \or \plusten \else \number#1\relax\fi} \def\constantnumberargument#1% {\ifcase#1\zerocount \or \plusone \or \plustwo \or \plusthree \or \plusfour \or \plusfive \or \plussix \or \plusseven \or \pluseight \or \plusnine \or \plusten \else {\number#1}\fi} \def\constantdimen#1% {\ifdim#1=\zeropoint \zeropoint \else \the#1\relax \fi} \def\constantdimenargument#1% {\ifdim#1=\zeropoint \zeropoint \else {\the#1}% \fi} \def\constantemptyargument#1% {\ifx#1\empty \noexpand\empty \else {#1}% \fi} % %D Maybe some day (moved from cont-new): % %D % %D \starttyping % %D \the\dimexpr(\dimchoice {7pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) % %D \the\dimexpr(\dimchoice{11pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) % %D \the\dimexpr(\dimchoice{14pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) % %D \stoptyping % % \def\syst_helpers_choice_finish#1\empty{} % % \def\syst_helpers_choice_dim#1#2#3% % {\ifdim#1#2% % #3\expandafter\syst_helpers_choice_finish % \else % \expandafter\syst_helpers_choice_dim % \fi{#1}} % % \def\syst_helpers_choice_num#1#2#3% % {\ifnum#1#2% % #3\expandafter\syst_helpers_choice_finish % \else % \expandafter\syst_helpers_choice_num % \fi{#1}} % % \def\dimchoice#1#2{\syst_helpers_choice_dim{#1}#2{=#1}{#1}\empty} % \def\numchoice#1#2{\syst_helpers_choice_num{#1}#2{=#1}{#1}\empty} %D \macros %D {getsubstring} %D \startbuffer %D %D \getsubstring{4}{}{Who Wants This} %D \getsubstring{4}{9}{Who Wants This} %D \getsubstring{9}{-2}{Who Wants This} %D \getsubstring{1}{5}{Who Wants This} %D \stopbuffer %D %D \typebuffer %D %D \startlines %D \getbuffer %D \stoplines % expandable: %def\getsubstring#1#2#3{\cldcontext{utf.sub([[#3]],tonumber("#1"),tonumber("#2"))}} \def\getsubstring#1#2#3{\ctxcommand{getsubstring(\!!bs#3\!!es,"#1","#2")}} \protect \endinput % \edef\choicetokenyes{+} % \edef\choicetokennop{-} % % \unexpanded\def\startchoice#1% % {\pushmacro\currentchoicevalue % \edef\currentchoicevalue{#1}% % \checkchoicetoken} % % \unexpanded\def\checkchoicetoken#1% % {\edef\choicetoken{#1}% % \ifx\choicetoken\choicetokenyes % \singleexpandafter\checkchoiceyes % \else\ifx\choicetoken\choicetokennop % \doubleexpandafter\checkchoicenop % \else % \doubleexpandafter\choicequit % \fi\fi} % % \def\checkchoiceyes#1% % {\edef\choicevalue{#1}% % \ifx\currentchoicevalue\choicevalue % \expandafter\choiceindeed % \else % \expandafter\choiceignore % \fi} % % \def\checkchoicenop % {\choiceindeed} % % \def\choiceabort#1\stopchoice % {\popmacro\currentchoicevalue} % % \def\choicequit % {\popmacro\currentchoicevalue} % % \def\choiceindeed#1#2\stopchoice % {\popmacro\currentchoicevalue % #1} % % \def\choiceignore#1% % {\checkchoicetoken} % % \let\stopchoice\relax % % \def\xxx{3} % \def\xxx{x} % % \startchoice {\xxx} % + {1} { % first % } + {2} { % second % } + {3} { % third % } - { % nothing % } % \stopchoice % \def\appendtovaluelist#1#2% % {\ifcsname#1\endcsname % \expandafter\ifx\csname#1\endcsname\empty % \expandafter\def\csname#1\endcsname{#2}% % \else % \expandafter\def\csname#1\expandafter\expandafter\expandafter\endcsname % \expandafter\expandafter\expandafter{\csname#1\endcsname,#2}% % \fi % \else % \expandafter\def\csname#1\endcsname{#2}% % \fi} % % or % % \def\appendtovaluelist#1% % {\ifcsname#1\endcsname % \expandafter\ifx\csname#1\endcsname\empty % \expandafter\noappendtovaluelist\csname#1\expandafter\expandafter\expandafter\endcsname % \else % \expandafter\doappendtovaluelist\csname#1\expandafter\expandafter\expandafter\endcsname % \fi % \else % \expandafter\noappendtovaluelist\csname#1\expandafter\endcsname % \fi} % % \def\doappendtovaluelist#1#2{\expandafter\def\expandafter#1\expandafter{#1,#2}} % \def\noappendtovaluelist#1#2{\def#1{#2}} % % \appendtovaluelist{mylist}{aap} % \appendtovaluelist{mylist}{noot} % \appendtovaluelist{mylist}{mies} % % \showvalue{mylist} context-2013.05.28.20130704/texmf-dist/tex/context/base/verb-mp.mkii0000644000175000017500000002566011754241457024137 0ustar norbertnorbert%D \module %D [ file=verb-mp, %D version=1997.12.22, %D title=\CONTEXT\ Verbatim Macros, %D subtitle=Pretty \METAPOST\ Verbatim, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Verbatim Macros / Pretty METAPOST Verbatim} % bug: in mp-char.mp the char should not be highlighted % can be simplified %D This module was first used when I documented our new %D company logo. This interpreter is modeled after the \PERL\ %D one. %D %D \startMP %D beginfig(1); %D z1 = (0,0); %D z2 = (100,0); %D z3 = (0,100); %D draw z1--z2--z3--cycle; %D endfig; %D \stopMP %D %D Of course we cannot (yet) provide a nice layout, so some %D formatting is still needed. \unprotect %D \macros %D {prettyMPvariables} %D %D Identifiers and system variables are typeset in a different %D style. One can turn of this mechanism for the variables by %D setting th enext boolean. %D \doglobal\newif\ifprettyMPvariables \global\prettyMPvariablestrue %D We support \METAFONT\ as well as \METAPOST. \gdef\MPsetcontrols {\saveprettycontrols \everyprettyend {\endMPtypesix}% \def\obeyedspace% {\endMPtypesix \oldobeyedspace}% \def\flushrestofverbatimline% {\endMPtypesix}% \let\obeytabs=\ignoretabs} \gdef\setupprettyMPtype {\def\prettyidentifier{MP}% \global\inMPtexmodefalse \MPsetvariables \MPsetcontrols \MPsethandlers \MPsetspecials} \doglobal\newif\ifinMPtexmode \gdef\MPsetvariables {\global\inMPtexmodefalse \global\let\MPsequence=\empty} \gdef\MPsetspecials {\setpretty`\;=11 \setpretty`\$=12 \setpretty`\@=12 \setpretty`\#=12 \setpretty`\%=20 \setpretty`\[=31 \setpretty`\]=31 \setpretty`\(=32 \setpretty`\)=32 \setpretty`\:=33 \setpretty`\==34 \setpretty`\<=34 \setpretty`\>=34 \setpretty`\-=41 \setpretty`\+=41 \setpretty`\/=41 \setpretty`\*=41 \setpretty`\|=41 \setpretty`\`=41 \setpretty`\!=41 \setpretty`\?=41 \setpretty`\^=41 \setpretty`\&=42 \setpretty`\\=50 \setpretty`\1=61 \setpretty`\2=61 \setpretty`\3=61 \setpretty`\4=61 \setpretty`\5=61 \setpretty`\6=61 \setpretty`\7=61 \setpretty`\8=61 \setpretty`\9=61 \setpretty`\0=61 \setpretty`\A=62 \setpretty`\B=62 \setpretty`\C=62 \setpretty`\D=62 \setpretty`\E=62 \setpretty`\F=62 \setpretty`\G=62 \setpretty`\H=62 \setpretty`\I=62 \setpretty`\J=62 \setpretty`\K=62 \setpretty`\L=62 \setpretty`\M=62 \setpretty`\N=62 \setpretty`\O=62 \setpretty`\P=62 \setpretty`\Q=62 \setpretty`\R=62 \setpretty`\S=62 \setpretty`\T=62 \setpretty`\U=62 \setpretty`\V=62 \setpretty`\W=62 \setpretty`\X=62 \setpretty`\Y=62 \setpretty`\Z=62 \setpretty`\a=62 \setpretty`\b=62 \setpretty`\c=62 \setpretty`\d=62 \setpretty`\e=62 \setpretty`\f=62 \setpretty`\g=62 \setpretty`\h=62 \setpretty`\i=62 \setpretty`\j=62 \setpretty`\k=62 \setpretty`\l=62 \setpretty`\m=62 \setpretty`\n=62 \setpretty`\o=62 \setpretty`\p=62 \setpretty`\q=62 \setpretty`\r=62 \setpretty`\s=62 \setpretty`\t=62 \setpretty`\u=62 \setpretty`\v=62 \setpretty`\w=62 \setpretty`\x=62 \setpretty`\y=62 \setpretty`\z=62 \setpretty`\_=62 \setpretty`\,=70 \setpretty`\.=70 \setpretty`\'=81 \setpretty`\"=82 \setpretty`\{=90 \setpretty`\}=90 } \gdef\MPsethandlers {\installprettyhandler 11 \MPtypeone \installprettyhandler 12 \MPtypeone \installprettyhandler 20 \MPtypetwo \installprettyhandler 31 \MPtypethreeA \installprettyhandler 32 \MPtypethreeA \installprettyhandler 33 \MPtypethreeB \installprettyhandler 34 \MPtypethreeB \installprettyhandler 41 \MPtypefour \installprettyhandler 42 \MPtypefour \installprettyhandler 50 \MPtypefive \installprettyhandler 61 \MPtypesixone \installprettyhandler 62 \MPtypesixtwo \installprettyhandler 70 \MPtypeseven \installprettyhandler 81 \MPtypeeightone \installprettyhandler 82 \MPtypeeighttwo \installprettyhandler 90 \MPtypenine } \gdef\MPtypeone#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty% \fi} \gdef\doMPtypetwo#1% {\ifnaturaltextext \let\next\naturaltextext \else \disableprettytrue\disableprettyafterwards \def\next{\beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty}% \fi \next} \gdef\MPtypetwo {\endMPtypesix \ifnewpretty\expandafter\handlenewpretty\fi\doMPtypetwo} \gdef\MPtypethreeA#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi} \gdef\MPtypethreeB#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty \fi} \gdef\MPtypefour#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi} \gdef\MPtypefive#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty \fi} \gdef\endMPtypesix {\ifx\MPsequence\empty\else \doifprettyidentifierelse{\MPsequence}{\MPidentifiers} {\doifprettyidentifierelse{\MPsequence}{\MPbtex} {\beginofpretty[\!!prettytwo]% {\prettyidentifierfont\MPsequence}% \endofpretty \global\inMPtexmodetrue} {\ifinMPtexmode \doifprettyidentifierelse{\MPsequence}{\MPetex} {\global\inMPtexmodefalse}{}% \fi \beginofpretty[\!!prettytwo]% {\prettyidentifierfont\MPsequence}% \endofpretty}} {\ifprettyMPvariables \doifprettyidentifierelse{\MPsequence}{\MPvariables} {\beginofpretty[\!!prettytwo]% {\prettyvariablefont\MPsequence}% \endofpretty} {\MPsequence}% \else \MPsequence \fi}% \global\let\MPsequence=\empty \fi} \gdef\MPtypesixone {\endMPtypesix \getpretty} \gdef\MPtypesixtwo#1% {\xdef\MPsequence{\MPsequence\getpretty{#1}}} \gdef\MPtypeseven#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty \fi} \gdef\MPtypeeightone#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi} \gdef\MPtypeeighttwo#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty \fi} \gdef\MPtypenine#1% {\endMPtypesix \ifinMPtexmode \getpretty{#1}% \else \getpretty{#1}% \fi} %D \METAPOST\ \TEX||ies: \useprettyidentifiers \MPbtex \MPsetspecials btex verbatimtex \useprettyidentifiers \MPetex \MPsetspecials etex \useprettyidentifiers \MPidentifiers \MPsetspecials btex etex verbatimtex %D \METAPOST\ internal variables \& predefined variables: \useprettyidentifiers \MPidentifiers \MPsetspecials charcode day linecap linejoin miterlimit month pausing prologues showstopping time tracingcapsules tracingchoices mpprocset tracingcommands tracingequations tracinglostchars tracingmacros tracingonline tracingoutput tracingrestores tracingspecs tracingstats tracingtitles truecorners warningcheck year \useprettyidentifiers \MPvariables \MPsetspecials ahangle ahlength bboxmargin defaultpen defaultscale labeloffset background currentpen currentpicture cuttings defaultfont extra_beginfig extra_endfig %D \METAPOST\ predefined constants: \useprettyidentifiers \MPidentifiers \MPsetspecials false nullpicture pencircle true \useprettyidentifiers \MPvariables \MPsetspecials beveled black blue bp butt cc cm dd ditto down epsilon evenly fullcircle green halfcircle identity in infinity left mitered mm origin pensquare pt quartercircle red right rounded squared unitsquare up white withdots %D \METAPOST\ operators: \useprettyidentifiers \MPidentifiers \MPsetspecials and angle arclength arctime ASCII bluepart boolean bot char color cosd cycle decimal directiontime floor fontsize greenpart hex infont intersectiontimes known length llcorner lrcorner makepath makepen mexp mlog normaldeviate not numeric oct odd or path pair pen penoffset picture point postcontrol precontrol redpart reverse rotated scaled shifted sind slanted sqrt str string subpath substring transform transformed ulcorner uniformdeviate unknown urcorner xpart xscaled xxpart xypart ypart yscaled yxpart yypart zscaled \useprettyidentifiers \MPvariables \MPsetspecials abs bbox ceiling center cutafter cutbefore dir directionpoint div dotprod intersectionpoint inverse mod lft round rt unitvector whatever %D \METAPOST\ commands: \useprettyidentifiers \MPidentifiers \MPsetspecials addto clip input interim let newinternal save setbounds shipout show showdependencies showtoken showvariable special \useprettyidentifiers \MPvariables \MPsetspecials cutdraw draw drawarrow drawdblarrow fill filldraw loggingall pickup tracingall tracingnone undraw unfill unfilldraw drawdot %D \METAPOST\ macro||like functions: \useprettyidentifiers \MPvariables \MPsetspecials buildcycle dashpattern decr dotlabel dotlabels drawoptions incr label labels max min thelabel z %D More \METAPOST: \useprettyidentifiers \MPidentifiers \MPsetspecials begingroup endgroup of curl tension and controls reflectedabout rotatedaround interpath on off beginfig endfig def vardef enddef epxr suffix text primary secondary tertiary primarydef secondarydef tertiarydef top bottom ulft urt llft lrt randomseed also contour doublepath withcolor withpen dashed if else elseif fi for endfor forsuffixes forever downto upto step until end %D \METAFONT\ stuff: \useprettyidentifiers \MPidentifiers \MPsetspecials charlist extensible fontdimen headerbyte kern ligtable boundarychar chardp charext charht charic charwd designsize fontmaking charexists \useprettyidentifiers \MPvariables \MPsetspecials beginchar blacker capsule_end change_width define_blacker_pixels define_corrected_pixels define_good_x_pixels define_good_y_pixels define_horizontal_corrected_pixels define_pixels define_whole_blacker_pixels define_whole_pixels define_whole_vertical_blacker_pixels define_whole_vertical_pixels endchar extra_beginchar extra_endchar extra_setup font_coding_scheme font_extra_space %D \METAFONT\ no||op stuff: \useprettyidentifiers \MPidentifiers \MPsetspecials cullit currenttransform gfcorners grayfont hround imagerules lowres_fix nodisplays notransforms openit displaying currentwindow screen_rows screen_cols pixels_per_inch cull display openwindow numspecial totalweight autorounding fillin proofing tracingpens xoffset chardx granularity smoothing turningcheck yoffset chardy hppp tracingedges vppp %D \METAPOST\ goodies: \useprettyidentifiers \MPidentifiers \MPsetspecials extra_beginfig extra_endfig mpxbreak \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-deb.lua0000644000175000017500000001763412130411274024063 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-deb'] = { version = 1.001, comment = "companion to trac-deb.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lpeg, status = lpeg, status local lpegmatch = lpeg.match local format, concat, match = string.format, table.concat, string.match local tonumber, tostring = tonumber, tostring local texdimen, textoks, texcount = tex.dimen, tex.toks, tex.count -- maybe tracers -> tracers.tex (and tracers.lua for current debugger) local report_system = logs.reporter("system","tex") tracers = tracers or { } local tracers = tracers tracers.lists = { } local lists = tracers.lists tracers.strings = { } local strings = tracers.strings strings.undefined = "undefined" lists.scratch = { 0, 2, 4, 6, 8 } lists.internals = { 'p:hsize', 'p:parindent', 'p:leftskip','p:rightskip', 'p:vsize', 'p:parskip', 'p:baselineskip', 'p:lineskip', 'p:topskip' } lists.context = { 'd:lineheight', 'c:realpageno', 'c:userpageno', 'c:pageno', 'c:subpageno' } local types = { ['d'] = tracers.dimen, ['c'] = tracers.count, ['t'] = tracers.toks, ['p'] = tracers.primitive } local splitboth = lpeg.splitat(":") local splittype = lpeg.firstofsplit(":") local splitname = lpeg.secondofsplit(":") function tracers.type(csname) return lpegmatch(splittype,csname) end function tracers.name(csname) return lpegmatch(splitname,csname) or csname end function tracers.cs(csname) local tag, name = lpegmatch(splitboth,csname) if name and types[tag] then return types[tag](name) else return tracers.primitive(csname) end end function tracers.dimen(name) local d = texdimen[name] return d and number.topoints(d) or strings.undefined end function tracers.count(name) return texcount[name] or strings.undefined end function tracers.toks(name,limit) local t = textoks[name] return t and string.limit(t,tonumber(limit) or 40) or strings.undefined end function tracers.primitive(name) return tex[name] or strings.undefined end function tracers.knownlist(name) local l = lists[name] return l and #l > 0 end function tracers.showlines(filename,linenumber,offset,errorstr) local data = io.loaddata(filename) if not data or data == "" then local hash = url.hashed(filename) if not hash.noscheme then local ok, d, n = resolvers.loaders.byscheme(hash.scheme,filename) if ok and n > 0 then data = d end end end local lines = data and string.splitlines(data) if lines and #lines > 0 then -- This does not work completely as we cannot access the last Lua error using -- table.print(status.list()). This is on the agenda. Eventually we will -- have a sequence of checks here (tex, lua, mp) at this end. -- -- Actually, in 0.75+ the lua error message is even weirder as you can -- get: -- -- LuaTeX error [string "\directlua "]:3: unexpected symbol near '1' ... -- -- \endgroup \directlua { -- -- So there is some work to be done in the LuaTeX engine. -- local what, where = match(errorstr,[[LuaTeX error
:(%d+)]]) or match(errorstr,[[LuaTeX error %[string "\\(.-lua) "%]:(%d+)]]) -- buglet if where then -- lua error: linenumber points to last line local start = "\\startluacode" local stop = "\\stopluacode" local where = tonumber(where) if lines[linenumber] == start then local n = linenumber for i=n,1,-1 do if lines[i] == start then local n = i + where if n <= linenumber then linenumber = n end end end end end offset = tonumber(offset) or 10 linenumber = tonumber(linenumber) or 10 local start = math.max(linenumber - offset,1) local stop = math.min(linenumber + offset,#lines) if stop > #lines then return "" else local result, fmt = { }, "%" .. #tostring(stop) .. "d %s %s" for n=start,stop do result[#result+1] = format(fmt,n,n == linenumber and ">>" or " ",lines[n]) end return concat(result,"\n") end else return "" end end function tracers.printerror(offset) local inputstack = resolvers.inputstack local filename = inputstack[#inputstack] or status.filename local linenumber = tonumber(status.linenumber) or 0 if not filename then report_system("error not related to input file: %s ...",status.lasterrorstring) elseif type(filename) == "number" then report_system("error on line %s of filehandle %s: %s ...",linenumber,filename,status.lasterrorstring) else -- currently we still get the error message printed to the log/console so we -- add a bit of spacing around our variant texio.write_nl("\n") local errorstr = status.lasterrorstring or "?" -- inspect(status.list()) report_system("error on line %s in file %s: %s ...\n",linenumber,filename,errorstr) -- lua error? texio.write_nl(tracers.showlines(filename,linenumber,offset,errorstr),"\n") end end directives.register("system.errorcontext", function(v) if v then callback.register('show_error_hook', function() tracers.printerror(v) end) else callback.register('show_error_hook', nil) end end) -- this might move lmx = lmx or { } lmx.htmfile = function(name) return environment.jobname .. "-status.html" end lmx.lmxfile = function(name) return resolvers.findfile(name,'tex') end function lmx.showdebuginfo(lmxname) local variables = { ['title'] = 'ConTeXt Debug Information', ['color-background-one'] = lmx.get('color-background-green'), ['color-background-two'] = lmx.get('color-background-blue'), } if lmxname == false then return variables else lmx.show(lmxname or 'context-debug.lmx',variables) end end function lmx.showerror(lmxname) local filename, linenumber, errorcontext = status.filename, tonumber(status.linenumber) or 0, "" if not filename then filename, errorcontext = 'unknown', 'error in filename' elseif type(filename) == "number" then filename, errorcontext = format("",filename), 'unknown error' else errorcontext = tracers.showlines(filename,linenumber,offset) end local variables = { ['title'] = 'ConTeXt Error Information', ['errormessage'] = status.lasterrorstring, ['linenumber'] = linenumber, ['color-background-one'] = lmx.get('color-background-yellow'), ['color-background-two'] = lmx.get('color-background-purple'), ['filename'] = filename, ['errorcontext'] = errorcontext, } if lmxname == false then return variables else lmx.show(lmxname or 'context-error.lmx',variables) end end function lmx.overloaderror() callback.register('show_error_hook', function() lmx.showerror() end) -- prevents arguments being passed end directives.register("system.showerror", lmx.overloaderror) local debugger = utilities.debugger local function trace_calls(n) debugger.enable() luatex.registerstopactions(function() debugger.disable() debugger.savestats(tex.jobname .. "-luacalls.log",tonumber(n)) end) trace_calls = function() end end directives.register("system.tracecalls", function(n) trace_calls(n) end) -- indirect is needed for nilling context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-chr.mkiv0000644000175000017500000001001012134352503024247 0ustar norbertnorbert%D \module %D [ file=spac-chr, %D version=2011.05.24, % code moved from core-spa.mkiv %D title=\CONTEXT\ Spacing Macros, %D subtitle=Characters, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Characters} \unprotect \registerctxluafile{spac-chr}{1.001} \definesystemattribute[characters][public] %D The nobreakspace is special as it needs to keep track of the space being %D flexible. Another option is to use space (glue) nodes and tag them as characters %D instead. No big deal but takes a moment of coding. So, as a prelude we %D tag the nobreakspace only. Interesting is that it also fits better in the %D tagging mechanism. %D %D But we need to do some checking as from then on we no longer can compare %D them in a string. So this needs thinking. Not that we can compare the %D nobreakspace now anyway. % \unexpanded\def\specialspacecharacter#1{\begingroup\attribute\charactersattribute#1\ \endgroup} % % \unexpanded\edef\nobreakspace {\specialspacecharacter{"00A0}} % 1 = left % \unexpanded\edef\ideographicspace {\specialspacecharacter{"2000}} % \unexpanded\edef\ideographichalffillspace{\specialspacecharacter{"2001}} % \unexpanded\edef\twoperemspace {\specialspacecharacter{"2002}} % \unexpanded\edef\threeperemspace {\specialspacecharacter{"2004}} % \unexpanded\edef\fourperemspace {\specialspacecharacter{"2005}} % \unexpanded\edef\sixperemspace {\specialspacecharacter{"2006}} % \unexpanded\edef\figurespace {\specialspacecharacter{"2007}} % \unexpanded\edef\punctuationspace {\specialspacecharacter{"2008}} % \unexpanded\edef\breakablethinspace {\specialspacecharacter{"2009}} % \unexpanded\edef\hairspace {\specialspacecharacter{"200A}} % \unexpanded\edef\zerowidthspace {\specialspacecharacter{"200B}} % \unexpanded\edef\zwnj {\specialspacecharacter{"200C}} % \unexpanded\edef\zwj {\specialspacecharacter{"200D}} % \unexpanded\edef\narrownobreakspace {\specialspacecharacter{"202F}} % This does not work as spaceskip is only inserted in the case of raggedleft % and we need to be able to figure out all of them. Which makes me wonder ... % can't we just always set spaceskip to some value? % Making them active is also not an option unless we do that in every % catcode vector. % \nobreakspace {\begingroup\setalignstateattribute\normalUchar"00A0\endgroup} % 1 = left \edef\nobreakspace {\normalUchar"00A0} % space \edef\ideographicspace {\normalUchar"2000} % quad/2 \edef\ideographichalffillspace{\normalUchar"2001} % quad \edef\twoperemspace {\normalUchar"2002} % quad/2 % % "2003 % quad == \quad == \hskip\emwidth \edef\threeperemspace {\normalUchar"2004} % quad/3 \edef\fourperemspace {\normalUchar"2005} % quad/4 \edef\sixperemspace {\normalUchar"2006} % quad/6 \edef\figurespace {\normalUchar"2007} % width of zero \edef\punctuationspace {\normalUchar"2008} % width of period \edef\breakablethinspace {\normalUchar"2009} % quad/8 \edef\hairspace {\normalUchar"200A} % quad/8 \edef\zerowidthspace {\normalUchar"200B} % 0 \edef\zwnj {\normalUchar"200C} % 0 \edef\zwj {\normalUchar"200D} % 0 \edef\narrownobreakspace {\normalUchar"202F} % quad/8 % % "205F % space/8 (math) % \zerowidthnobreakspace {\normalUchar"FEFF} \udef\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} % Shortcuts: % unexpanded as otherwise we need to intercept / cleanup a lot \unexpanded\def~{\nobreakspace} % Goodies: \unexpanded\def\fiveperemspace{\hskip\dimexpr\emwidth/5\relax} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-pre.mkii0000644000175000017500000001654111754241457024332 0ustar norbertnorbert%D \module %D [ file=type-pre, %D version=2001.04.12, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Compatibility scripts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is obsolete. We now have latin modern and proper %D typescripts. Forget about this file. %D This file defines some typescripts that simulate the pre-typescript way %D of defining fonts. This file will not be extended. \starttypescriptcollection[previous] %D The Computer Modern Roman is derived from the Monotype~8a %D Times Roman. In this module, that is loaded by default, we %D define all relevant alternatives. \starttypescript [cmr] \usetypescript[modern][default] \setupbodyfont[modern] \stoptypescript %D This script remaps the default Computer Modern Font Files %D onto the EC ones, so that hyphenations work well. (The proper %D latin modern ec variants have replaed the ae ones.) \starttypescript [aer] \usetypescript[modern][ec] \setupbodyfont[modern] %\enableregime[ec] \stoptypescript %D This script defines the Computer Modern Roman with a pseudo kind %D of iso latin 2 encoding. \starttypescript [csr] \usetypescript[modern][ec] \setupbodyfont[modern] \enableregime[il2] \stoptypescript %D This script defines the Computer Modern Roman with a %D polish encoding. \starttypescript [plr] \usetypescript[modern][qx] \setupbodyfont[modern] \enableregime[pl0] \stoptypescript %D Vietnamese. \starttypescript [vnr] \usetypescript[modern][t5] \setupbodyfont[modern] \stoptypescript %D Cyrillic alternatives are available under the symbolic %D name \type {cyr}. \starttypescript [cyr] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,cyr] \usemathcollection[default] \stoptypescript \starttypescript [lh-ec] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,ec] \usemathcollection[default] \stoptypescript \starttypescript [lh-t2a] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,t2a] \usemathcollection[default] \stoptypescript \starttypescript [lh-t2b] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,t2b] \usemathcollection[default] \stoptypescript \starttypescript [lh-t2c] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,t2c] \usemathcollection [default] \stoptypescript \starttypescript [lh-x2] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,x2] \usemathcollection [default] \stoptypescript \starttypescript [lh-lcy] \usetypescript [serif,sans,mono,math] [computer-modern,latin-modern] [default,name,size,lcy] \usemathcollection [default] \stoptypescript %D Here we implement the symbol fonts as provided by the %D American Mathematical Society. The names of these symbols %D can be found in The Joy of \TeX\ by M.~Spivak. % \starttypescript [ams] % \usetypescript [math] [ams] [all] % \usemathcollection[default] % \stoptypescript %D The Concrete Modern Roman is just an alternative Computer %D Modern Roman. % \starttypescript [con] % \usetypescript [serif] [concrete] [all] % \usemathcollection[default] % \stoptypescript %D The Euler Fonts are designed by Herman Zapf and can be %D used with the Concrete Fonts defined elsewhere. % \starttypescript [eul] % \usetypescript [math] [euler] [all] % \usemathcollection[eul] % \stoptypescript %D The Lucida Bright fonts are both good looking and and %D complete. These fonts have prebuilt accented characters, %D which means that we use another encoding vector: \YandY\ %D texnansi. These fonts are a good illustration that a 12 %D point bodyfont is indeed never that size. The Lucida Bright %D fonts come in one design size. % \starttypescript [lbr] % \usetypescript [serif,sans,mono,math,calligraphy,handwriting] [lucida] [name,special,\defaultencoding] % \usetypescript [serif,sans,mono,math,calligraphy,handwriting] [default] [size] % \usemathcollection[lbr] % \usetypescript [all] [lucida] [\defaultencoding] % \stoptypescript \starttypescript [lbr] \usetypescript[lucida][\defaultencoding] \stoptypescript %D Times \starttypescript [tim] \usetypescript [times] [\defaultencoding] \setupbodyfont [times] \stoptypescript %D The Antikwa Torunska font family is a rather nice %D and subtle one. Although primary meant for the polish %D language, it can be used for other languages as well. \starttypescript [ant] \usetypescript [antykwa-torunska] [\defaultencoding] \setupbodyfont [antykwa,rm] \stoptypescript %D This script defines the Standard Adobe Courier fonts. % \starttypescript [pcr] % \usetypescript [mono] [courier] [name,\defaultencoding] % \usetypescript [mono] [default] [size] % \usetypescript [all] [courier] [\defaultencoding] % \stoptypescript \starttypescript [pcr] \usetypescript [postscript] [\defaultencoding] \setupbodyfont [postscript,tt] \stoptypescript %D This script defines the Standard Adobe Helvetica fonts. % \starttypescript [phv] % \usetypescript [sans] [helvetica] [name,\defaultencoding] % \usetypescript [sans] [default] [size] % \usetypescript [all] [helvetica] [\defaultencoding] % \stoptypescript \starttypescript [phv] \usetypescript [postscript] [\defaultencoding] \setupbodyfont [postscript,ss] \stoptypescript %D This script defines the Standard Adobe Times fonts. % \starttypescript [ptm] % \usetypescript [serif] [times] [name,\defaultencoding] % \usetypescript [serif] [default] [size] % \usetypescript [all] [times] [\defaultencoding] % \stoptypescript \starttypescript [ptm] \usetypescript [postscript] [\defaultencoding] \setupbodyfont [postscript,rm] \stoptypescript %D This script loads the Adobe Times Roman, Helvetica and %D Courier. % \starttypescript [pos] % \usetypescript [serif] [times] [name,\defaultencoding] % \usetypescript [sans] [helvetica] [name,\defaultencoding] % \usetypescript [mono] [courier] [name,\defaultencoding] % \usetypescript [serif,sans,mono] [default] [size] % \usetypescript [all] [times,helvetica,courier] [\defaultencoding] % \stoptypescript \starttypescript [pos] \usetypescript [postscript] [\defaultencoding] \setupbodyfont [postscript] \stoptypescript %D This script defines the Palatino font. \starttypescript [ppl] \usetypescript [palatino] [\defaultencoding] \setupbodyfont [palatino] \stoptypescript %D The following scripts fake the old \type {font-ber} and %D alike files. \starttypescript[fil] % fake to prevent loading font-fil.tex and signal 'done' \stoptypescript %D But for old time sake we provide: \starttypescript[ber] \usetypescript [berry] [ec,t5] % could be [all] \stoptypescript \stoptypescriptcollection %D Special scripts: \unprotect \starttypescriptcollection[special scripts] \starttypescript[chi] \readfile{\f!fontprefix chi}\donothing\donothing \stoptypescript \starttypescript[jap] \readfile{\f!fontprefix jap}\donothing\donothing \stoptypescript \starttypescript[arb] \readfile{\f!fontprefix arb}\donothing\donothing \stoptypescript \starttypescript[heb] \readfile{\f!fontprefix heb}\donothing\donothing \stoptypescript \stoptypescriptcollection \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-tim.lua0000644000175000017500000001027112130411274024110 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-tim'] = { version = 1.001, comment = "companion to m-timing.tex", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, gsub = string.format, string.gsub local concat, sort = table.concat, table.sort local next, tonumber = next, tonumber moduledata = moduledata or { } local progress = moduledata.progress or { } moduledata.progress = progress local report_timing = logs.reporter("timing") if not nodes then nodes = { } end -- when loaded in mtxrun progress.parameters = nodes and nodes.snapshots.getparameters progress.defaultfilename = ((tex and tex.jobname) or "whatever") .. "-luatex-progress" -- storage function progress.store() nodes.snapshots.takesample() end function progress.save(name) local filename = (name or progress.defaultfilename) .. ".lut" report_timing("saving data in %a",filename) table.save(filename,nodes.snapshots.getsamples()) nodes.snapshots.resetsamples() end -- conversion local processed = { } local parameters = progress.parameters() local function convert(name) name = name ~= "" and name or progress.defaultfilename if not processed[name] then local names, top, bot, pages, paths, keys = { }, { }, { }, 0, { }, { } local data = table.load(name .. ".lut") if data then pages = #data if pages > 1 then local factor = 100 for k=1,#data do for k, v in next, data[k].node_memory do keys[k] = true end end for k=1,#data do local m = data[k].node_memory for k, v in next, keys do if not m[k] then m[k] = 0 end end end local function path(tag,subtag) local b, t, s = nil, nil, { } for k=1,#data do local v = data[k][tag] v = v and (subtag and v[subtag]) or v if v then v = tonumber(v) if b then if v > t then t = v end if v < b then b = v end else t = v b = v end s[k] = v else s[k] = 0 end end local tagname = subtag or tag top[tagname] = gsub(format("%.3f",t),"%.000$","") bot[tagname] = gsub(format("%.3f",b),"%.000$","") local delta = t-b if delta == 0 then delta = 1 else delta = factor/delta end for k=1,#s do s[k] = format("(%s,%s)",k,(s[k]-b)*delta) end paths[tagname] = concat(s,"--") end for i=1,#parameters do path(parameters[i]) end for tag, _ in next, keys do path("node_memory",tag) names[#names+1] = tag end pages = pages - 1 end end sort(names) processed[name] = { names = names, top = top, bot = bot, pages = pages, paths = paths, } end return processed[name] end progress.convert = convert function progress.bot(name,tag) return convert(name).bot[tag] or 0 end function progress.top(name,tag) return convert(name).top[tag] or 0 end function progress.pages(name,tag) return convert(name).pages or 0 end function progress.path(name,tag) return convert(name).paths[tag] or "origin" end function progress.nodes(name) return convert(name).names or { } end context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ini.mkii0000644000175000017500000006044511754241457024265 0ustar norbertnorbert%D \module %D [ file=lang-ini, %D version=1996.01.25, %D title=\CONTEXT\ Language Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 needs a further cleanup (real split between ii/iv). %D This module implements the (for the moment still simple) %D multi||language support of \CONTEXT, which should not be %D confused with the multi||lingual interface. This support %D will be extended when needed. \writestatus{loading}{ConTeXt Language Macros / Initialization} \unprotect \ifx\nonfrenchspacing\undefined \let\nonfrenchspacing\relax \fi \ifx\frenchspacing \undefined \let\frenchspacing \relax \fi %D When loading hyphenation patterns, \TEX\ assign a number to %D each loaded table, starting with~0. Switching to a specific %D table is done by assigning the relevant number to the %D predefined \COUNTER\ \type{\language}. %D We keep track of the last loaded patterns by means of a %D pseudo \COUNTER. This just one of those situations in which %D we don't want to spent a real one. Language zero has no %D patterns, first of all because I like to start numbering %D at one. It may come in handy for special purposes as well. \normallanguage\zerocount \def\loadedlanguage{1} %D \macros %D {currentlanguage, setupcurrentlanguage} %D %D Instead of numbers,we are going to use symbolic names for %D the languages. The current langage is saved in the macro %D \type {\currentlanguage}. The setup macro is mainly used %D for cosmetic purposes. %D %D \starttyping %D \dorecurse{3} %D {\language[nl] %D \startmode[*en] english \stopmode %D \startmode[*nl] dutch \stopmode %D \language[en] %D \startmode[*en] english \stopmode %D \startmode[*nl] dutch \stopmode} %D \stoptyping \let\currentlanguage \empty \let\currentmainlanguage\empty \def\setupcurrentlanguage[#1]{\setcurrentlanguage\currentmainlanguage{#1}} \def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) {\doifsomething{#1} {\ifx\currentmainlanguage\empty\else\resetsystemmode{\systemmodeprefix\currentmainlanguage}\fi \edef\currentmainlanguage{#1}% \setsystemmode{\systemmodeprefix\currentmainlanguage}}% \doifsomething{#2} {\ifx\currentlanguage\empty\else\resetsystemmode\currentlanguage\fi \edef\currentlanguage{#2}% \setsystemmode\currentlanguage}} %D The internal macros will be defined later. %D \macros %D {installlanguage} %D %D Hyphenation patterns can only be loaded when the format file %D is prepared. The next macro takes care of this loading. A %D language is specified with %D %D \showsetup{installlanguage} %D %D When \type {state} equals \type {start}, both patterns %D and additional hyphenation specifications are loaded. These %D files are seached for on the system path and are to be %D named: %D %D \starttyping %D \f!languageprefix-identifier.\f!patternsextension %D \f!languageprefix-identifier.\f!hyhensextension %D \stoptyping %D %D The \type{spacing} variable specifies how the spaces after %D punctuation has to be handled. English is by tradition more %D tolerant to inter||sentence spacing than other languages. %D %D This macro also defines \type {\identifier} as a shortcut %D switch to the language. Furthermore the command defined as %D being language specific, are executed. With %D \type {default} we can default to another language %D (patterns) at format generation time. This default language %D is overruled when the appropriate patterns are loaded (some %D implementations support run time addition of patterns to a %D preloaded format). \def\dodoinstalllanguage#1#2% #2 added {\doifundefined{#1}{\setvalue{#1}{\complexlanguage[#2]}}% \expanded{\noexpand\uppercase{\noexpand\edef\noexpand\ascii{#1}}}% \doifundefined\ascii{\setvalue\ascii{\complexlanguage[#2]}}} %D \macros %D {preloadlanguages} %D %D We first try to load the files defined as file synonym %D for \type {lang-*.pat} and \type {lang-*.hyp}. After that we %D fall back on those files. The macro \type {\preloadpatterns} %D reports which patterns are loaded and what hyphenmin %D values are set. \let\installedlanguages\empty \def\doiflanguageelse#1{\doifdefinedelse{\??la#1\c!state}} \def\doloadlanguagefiles#1% {\doifelsevalue{\??la#1\c!state}\v!start {\edef\languagesuffix{\specificlanguageparameter{#1}\s!patterns}% \ifx\languagesuffix\empty \edef\languagesuffix{\defaultlanguage{#1}}% \else\ifx\languagesuffix\relax \edef\languagesuffix{\defaultlanguage{#1}}% \fi\fi \ifx\languagesuffix\empty \edef\languagesuffix{#1}% \fi \doifundefinedelse{\??la\??la:\currentencoding:\currentmapping:\languagesuffix} {\doloadpatterns{#1}\languagesuffix} {\bgroup \edef\loadedlanguage{\getvalue{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}}% %\showmessage\m!linguals1{\languagesuffix,#1,\loadedlanguage,*,*}% %\showmessage\m!linguals3{\languagesuffix,#1,\loadedlanguage,*,*}% \egroup}} {\showmessage\m!linguals5{#1}}} \def\doinstalllanguage[#1][#2]% {\doifassignmentelse{#2} {\doiflanguageelse{#1} {\getparameters[\??la#1][#2]} {\setvalue{\l!prefix!#1}{#1}% \addtocommalist{#1}\installedlanguages \dodoinstalllanguage{#1}{#1}% \getparameters[\??la#1][\c!state=\v!start,#2]}% \doloadlanguagefiles{#1}} {\setvalue{\l!prefix!#1}{#2}% \getparameters[\??la#1][\s!default=#2]% \dodoinstalllanguage{#1}{#2}}} \def\reallanguagetag#1% {\ifcsname\l!prefix!#1\endcsname\csname\l!prefix!#1\endcsname\else#1\fi} \let\preloadedpatterns\empty \let\preloadedpmessage\empty \def\doshowpatterns#1#2#3#4% language number encoding mapping {#1->#3:#4->#2->\specificlanguageparameter{#1}\s!lefthyphenmin:\specificlanguageparameter{#1}\s!righthyphenmin\space} \def\preloadlanguages {\doifsomething\preloadedpmessage{\showmessage\m!linguals{10}\preloadedpmessage}} \def\preloadallpatterns {\gdef\preloadallpatterns##1{\installlanguage[##1][\c!state=\v!start]}% \processcommacommand[\installedlanguages]\preloadallpatterns \global\let\preloadallpatterns\relax} % ^^ \language[#1] gave unwanted side effect of loading language specifics \def\installlanguage {\dodoubleargument\doinstalllanguage} %D When the second argument is a language identifier, a %D synonym is created. This feature is present because we %D used dutch mnemonics in the dutch version, but nowadays %D conform a standard. \let \patternencoding \s!default \let \patternmapping \s!default \def\doifpatternselse#1% {\expanded{\doifinsetelse{#1}{\preloadedpatterns}}} \def\doloadpatterns#1#2% {\edef\askedlanguageencoding{\specificlanguageparameter{#1}\s!encoding}% \edef\askedlanguagemapping {\specificlanguageparameter{#1}\s!mapping}% \expanded{\getcommacommandsize[\askedlanguageencoding]}% % slightly faster: \let\unicodechar\utfunihashglyph \ifnum\commalistsize>0 %\message{[nofpatterns #2: \commalistsize/\askedlanguageencoding]}% \dorecurse\commalistsize {\expanded{\getfromcommacommand[\askedlanguageencoding][\recurselevel]}% \let\patternencoding\commalistelement \expanded{\getfromcommacommand[\askedlanguagemapping][\recurselevel]}% \let\patternmapping \commalistelement %\message{[patterns: #1/#2/\patternencoding/\patternmapping]}% \dodoloadpatterns{#1}{#2}\patternencoding\patternmapping}% \else %\message{[patterns: #1/#2]}% \dodoloadpatterns{#1}{#2}{}{}% \fi} \ifnum\texengine=\xetexengine \def\doloadpatterns#1#2% {%\letvalue{\??la#2\s!encoding}\empty %\letvalue{\??la#2\s!mapping }\empty \dodoloadpatterns{#1}{#2}{}{}} \fi \def\setuphyppatencoding {\pathypsettings \enableregime[utf]} \def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr {\normallanguage\loadedlanguage % when not really needed \bgroup \let\synchronizepatterns\relax % needed? \let\enabledmapping \empty % needed? \doifelsenothing{#3}{\enableencoding[\s!default]}{\enableencoding[#3]}% \doifelsenothing{#4}{\enablemapping [\s!default]}{\enablemapping [#4]}% \setuphyppatencoding \ifundefined{\??la\??la:\currentencoding:\currentmapping:#2}% \let\doshowpatterns\relax \edef\alreadyloadedlanguage {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}\empty}% \edef\alreadyloadedlanguage {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\f!languageprefix#2.\f!patternsextension}\alreadyloadedlanguage}% \ifx\alreadyloadedlanguage\empty \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\loadedlanguage \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back \startpatternloading{\truefilename{\f!languageprefix#2.\f!patternsextension}}{#3}{#4}% \readsysfile{\truefilename{\f!languageprefix#2.\f!patternsextension}} {\setxvalue{\??la#1\s!patterns}{#2}% \setxvalue{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}{\number\loadedlanguage}% \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{\number\normallanguage}{\currentencoding}{\currentmapping}}% \doglobal\addtocommalist{#2}\preloadedpatterns \showmessage\m!linguals1{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}} {\showmessage\m!linguals2{#2,#1,\loadedlanguage,\currentencoding,\currentmapping,\f!languageprefix#2.\f!patternsextension,\truefilename{\f!languageprefix#2.\f!patternsextension}}}% \stoppatternloading \startpatternloading{\truefilename{\f!languageprefix#2.\f!hyphensextension}}{#3}{#4}% \readsysfile{\truefilename{\f!languageprefix#2.\f!hyphensextension}} {\showmessage\m!linguals3{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}} {\showmessage\m!linguals4{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}% \stoppatternloading \doglobal\increment\loadedlanguage % \stopencoding \else % optimization, introduced 2004.08.24, while sorting out changes in tl \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\alreadyloadedlanguage \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back \setxvalue{\??la#1\s!patterns}{#2}% \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{[\number\alreadyloadedlanguage]}{\currentencoding}{\currentmapping}}% \doglobal\addtocommalist{#2}\preloadedpatterns \showmessage\m!linguals1{#2,#1,[\alreadyloadedlanguage],\currentencoding,\currentmapping}% \fi \fi \egroup} \fetchruntimecommand \showpatterns {\f!languageprefix\s!run} %D Since we can only load patterns in ini\TeX, we nil the %D loading before dumping (which saves a bit of memory, but %D strangely enough not in the format). \appendtoks \gdef\doloadpatterns{\doglobal\increment\loadedlanguage\gobbletwoarguments}% \globallet\dodoloadpatterns\gobblefourarguments \to \everydump %D \macros %D {setuplanguage} %D %D Quick and dirty, but useful: %D %D \showsetup{setuplanguage} %D %D Beware, this command can only be used when a language is installed. \unprotected \def\setuplanguage {\dodoubleempty\dosetuplanguage} \def\dosetuplanguage[#1][#2]% handy patch for testing {\ifsecondargument \getparameters[\??la#1][#2]% \doif{#1}\currentlanguage\docomplexlanguage \else \getparameters[\??la\currentlanguage][#1]% \docomplexlanguage \fi} \setuplanguage [\s!default] [\s!lefthyphenmin=2, \s!righthyphenmin=2, \s!patterns=, \c!spacing=\v!packed, \s!encoding=, \s!mapping=, \c!lefthyphen=, \c!righthyphen=-, \c!hyphen=-, \c!midsentence=---, \c!leftsentence=---, \c!rightsentence=---, \c!leftsubsentence=---, \c!rightsubsentence=---, \c!leftquote=\upperleftsinglesixquote, \c!rightquote=\upperrightsingleninequote, \c!leftquotation=\upperleftdoublesixquote, \c!rightquotation=\upperrightdoubleninequote, \c!leftspeech=\languageparameter\c!leftquotation, \c!middlespeech=, \c!rightspeech=\languageparameter\c!rightquotation, \c!limittext=\unknown, \c!date={\v!year,\ ,\v!month,\ ,\v!day}, \c!text=Ag] % rather new, split and per language \setuplanguage [\s!default] [\c!compoundhyphen=\compoundhyphen, \c!leftcompoundhyphen=\compoundhyphen, \c!rightcompoundhyphen=] %D The values \type {leftsentence} and \type %D {rightsentence} can be (and are) used to implement %D automatic subsentence boundary glyphs, like in {\fr %D |<|french guillemots|>|} or {\de |<|german guillemots|>|} or %D {\nl |<|dutch dashes|>|} like situations. Furthermore \type %D {leftquotation} and \type {leftquote} come into view %D \quotation {when we quote} or \quote {quote} something. %D \macros %D {currentdatespecification} %D %D Just to make things easy we can ask for the current date %D specification by saying: \def\currentdatespecification{\languageparameter\c!date} %D This command is not meant for users. %D Carefull reading of these macros shows that it's legal to %D say %D %D \starttyping %D \installlanguage [du] [de] %D \stoptyping %D \macros %D {language,mainlanguage} %D %D Switching to another language (actually another hyphenation %D pattern) is done with: %D %D \starttyping %D \language[identifier] %D \stoptyping %D %D or with \type{\identifier}. Just to be compatible with %D \PLAIN\ \TEX, we still support the original meaning, so %D %D \starttyping %D \language=1 %D \stoptyping %D %D is a valid operation, where the relation between number %D and language depends on the order in installing languages. %D %D \showsetup{language} %D \showsetup{mainlanguage} %D %D Both commands take a predefined language identifier as %D argument. We can use \type{\mainlanguage[identifier]} for %D setting the (indeed) main language. This is the language %D used for translating labels like {\em figure} and {\em %D table}. The main language defaults to the current language. %D %D We take care of local as well as standardized language %D switching (fr and fa, de and du, but nl and nl). \ifx\synchronizepatterns \undefined \let\synchronizepatterns\relax \fi \ifx\synchronizepatternswithfont\undefined \def\synchronizepatternswithfont{\synchronizepatterns} \fi \def\setnormallanguage#1#2% current default {% called quite often, so we use \csname % \def\synchronizepatterns{\setnormallanguage % {\csname\??la\currentlanguage\s!patterns\endcsname}}% called often % of even better pre-expand in an ugly way: \ifnum\normallanguage<\zerocount % we've blocked hyphenation (e.g. verbatim) \else \edef\synchronizepatterns{\noexpand\dosetnormallanguage{\languageparameter\s!patterns}}% \donefalse \synchronizepatterns \ifdone\else \def\synchronizepatterns{\dosetnormallanguage\currentlanguage}% \synchronizepatterns \ifdone\else \ifx\currentdefaultlanguage\empty\else \edef\synchronizepatterns{\noexpand\dosetnormallanguage{\specificlanguageparameter\currentdefaultlanguage\s!patterns}}% \synchronizepatterns \ifdone\else \dosetnormallanguage\currentdefaultlanguage \synchronizepatterns \fi \fi \fi \fi \fi} \normallanguage\zerocount \def\dosetnormallanguage#1% #1 == \cs (no longer) {\ifnum\normallanguage<\zerocount % we've blocked hyphenation (e.g. verbatim) \else \dodosetnormallanguage{:\currentencoding:\currentmapping:}{#1}{% \dodosetnormallanguage{:\currentencoding:\s!default :}{#1}{% \dodosetnormallanguage{:\s!default :\currentmapping:}{#1}{% \dodosetnormallanguage{:\s!default :\s!default :}{#1}\empty}}}% \fi} \def\dodosetnormallanguage#1#2% {\ifcsname\??la\??la#1#2\endcsname \edef\thenormallanguage{\csname\??la\??la#1#2\endcsname}% can be \chardef \ifx\thenormallanguage\empty \@EAEAEA\firstofoneargument \else \donetrue \@EA\xdef\csname\??la\currentlanguage\s!patterns\endcsname{#2}% \normallanguage\thenormallanguage\relax % \relax is needed for lookahead problems \@EAEAEA\gobbleoneargument \fi \else \@EA\firstofoneargument \fi} \newevery \everylanguage \relax \def\disablelanguagespecifics {\ignorecompoundcharacter} \def\sethyphenationvariables {\lefthyphenmin 0\languageparameter\s!lefthyphenmin \relax \righthyphenmin0\languageparameter\s!righthyphenmin\relax \lefthyphenmin \numexpr\lefthyphenmin +\hyphenminoffset\relax \righthyphenmin\numexpr\righthyphenmin+\hyphenminoffset\relax} \def\docomplexlanguage% assumes that \currentlanguage is set {\edef\currentdefaultlanguage{\defaultlanguage\currentlanguage}% \setnormallanguage\currentlanguage\currentdefaultlanguage \the\everylanguage \enablelanguagespecifics[\currentlanguage]% \sethyphenationvariables \relax % will be definable and move to core-spa ! \doifelse{\languageparameter\c!spacing}\v!broad\nonfrenchspacing\frenchspacing} \ifx\enablelanguagespecifics\undefined \def\enablelanguagespecifics[#1]{} \fi % The following may be a solution for the fact that one cannot % change catcodes of characters like : and ; inside an environment. \appendtoks \enablelanguagespecifics[\currentlanguage]% \to \everystarttext \def\complexlanguage[#1]% {\edef\askedlanguage{#1}% \ifx\askedlanguage\empty \else \ifcsname\l!prefix!\askedlanguage\endcsname \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}% \ifx\currentlanguage\askedlanguage \else \setcurrentlanguage\currentmainlanguage\askedlanguage \docomplexlanguage \fi \else \showmessage\m!linguals6{#1}% \fi \fi} \let\simplelanguage\normallanguage \definecomplexorsimple\language \def\mainlanguage[#1]% {\edef\askedlanguage{#1}% \ifx\askedlanguage\empty \else \ifcsname\l!prefix!\askedlanguage\endcsname \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}% \ifx\currentlanguage\askedlanguage \ifx\currentmainlanguage\askedlanguage \else \setcurrentlanguage\askedlanguage\askedlanguage \docomplexlanguage \fi \else \setcurrentlanguage\askedlanguage\askedlanguage \docomplexlanguage \fi \fi \fi} %D \macros %D {defaultlanguage,languageparameter,specificlanguageparameter} \def\defaultlanguage#1% {\ifcsname\??la#1\s!default\endcsname \expandafter\defaultlanguage\csname\??la#1\s!default\endcsname \else #1% \fi} \def\languageparameter#1% {\ifcsname\??la\currentlanguage#1\endcsname \csname\??la\currentlanguage#1\endcsname \else\ifcsname\??la\currentlanguage\s!default\endcsname \expandafter\specificlanguageparameter\csname\??la\currentlanguage\s!default\endcsname{#1}% \else\ifcsname\??la\s!default#1\endcsname \csname\??la\s!default#1\endcsname \fi\fi\fi} \def\specificlanguageparameter#1#2% {\ifcsname\??la#1#2\endcsname \csname\??la#1#2\endcsname \else\ifcsname\??la#1\s!default\endcsname \expandafter\specificlanguageparameter\csname\??la#1\s!default\endcsname{#2}% \else\ifcsname\??la\s!default#2\endcsname \csname\??la\s!default#2\endcsname \fi\fi\fi} %D New (see nomarking and nolist): \def\splitsequence#1#2% {\doifelse{#1}\v!no{#2}{\doifelse{#1}\v!yes{\languageparameter\c!limittext}{#1}}} \def\splitsymbol#1% {\splitsequence{#1}{\languageparameter\c!limittext}} %D Just like with subsentence boundary symbols, quotes %D placement depends on the current language, therefore we show %D the defaults here. %D %D \def\ShowLanguageValues [#1] [#2] #3 #4 %D {\blank %D \startlinecorrection %D \vbox\bgroup %D \language[#1]% %D \setbox0=\hbox to \hsize{\hss\bf#2 subsentence symbol and quotes\hss} %D \dp0=0pt %D \box0 %D \vskip.5em %D \hrule %D \vskip.5em %D \let\normalbar=| %D \hbox to \hsize %D {\hfil\quotation{#3 #4}\hfil\quote{#2}\hfil %D \let|=\normalbar\strut|<||<|#3|>|#4|>|\hfil} %D \vskip.5em %D \hrule %D \egroup %D \stoplinecorrection %D \blank} %D %D \ShowLanguageValues [af] [afrikaans] afrikaanse ... %D \ShowLanguageValues [ca] [catalan] catalan ... %D \ShowLanguageValues [cs] [czech] tjechisch tex %D \ShowLanguageValues [cs] [slovak] slowaakse ... %D \ShowLanguageValues [da] [danish] deense ... %D \ShowLanguageValues [de] [german] duitse degelijkheid %D \ShowLanguageValues [en] [english] engelse humor %D \ShowLanguageValues [fi] [finnish] finse ... %D \ShowLanguageValues [fr] [french] franse slag %D \ShowLanguageValues [it] [italian] italiaanse ... %D \ShowLanguageValues [la] [latin] latijnse missen %D \ShowLanguageValues [nl] [dutch] nederlandse zuinigheid %D \ShowLanguageValues [nb] [bokmal] noorse zalm %D \ShowLanguageValues [nn] [nnynorsk] noorse zalm %D \ShowLanguageValues [pl] [polish] poolse vlag %D \ShowLanguageValues [pt] [portuguese] portugese ... %D \ShowLanguageValues [es] [spanish] spaans benauwd %D \ShowLanguageValues [sv] [swedish] zweedse ... %D \ShowLanguageValues [tr] [turkish] turks fruit %D We support a lot of languages. These are specified and %D loaded in separate files, according to their roots. Here %D we only take care of (postponed) setting of the current %D language. %D %D \unprotect %D \placetable{The germanic languages (\type{lang-ger})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!nl \NC dutch \NC germanic \NC\FR %D \NC \s!en \NC english \NC germanic \NC\MR %D \NC \s!de \NC german \NC germanic \NC\MR %D \NC \s!da \NC danish \NC germanic \NC\MR %D \NC \s!sv \NC swedish \NC germanic \NC\MR %D \NC \s!af \NC afrikaans \NC germanic \NC\MR %D \NC \s!nb \NC bokmal \NC germanic \NC\LR %D \NC \s!nn \NC nynorsk \NC germanic \NC\LR %D \HL %D \stoptable %D \protect %D %D \unprotect %D \placetable{The italic languages (\type{lang-ita})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!fr \NC french \NC italic \NC\FR %D \NC \s!ca \NC catalan \NC italic \NC\MR %D \NC \s!es \NC spanish \NC italic \NC\MR %D \NC \s!it \NC italian \NC italic \NC\MR %D \NC \s!la \NC latin \NC italic \NC\MR %D \NC \s!pt \NC portuguese \NC italic \NC\LR %D \HL %D \stoptable %D \protect %D %D \unprotect %D \placetable{The slavic languages (\type{lang-sla})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!pl \NC polish \NC slavic \NC\FR %D \NC \s!cs \NC czech \NC slavic \NC\MR %D \NC \s!sk \NC slavik \NC slavic \NC\LR %D \HL %D \stoptable %D \protect %D \unprotect %D %D \placetable{The altaic languages (\type{lang-alt})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!tr \NC turkish \NC altaic \NC\SR %D \HL %D \stoptable %D %D \placetable{The uralic languages (\type{lang-ura})} %D \starttable[||||] %D \HL %D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR %D \HL %D \NC \s!fi \NC finnish \NC uralic \NC\SR %D \HL %D \stoptable %D \protect % \bgroup \normallanguage255 \patterns{} \egroup % \def\nopatterns{\normallanguage255 } \def\nopatterns{\normallanguage\minusone} %D \XETEX\ is \UNICODE: \ifnum\texengine=\xetexengine \def\synchronizepatternswithfont{} \def\doloadpatterns #1#2{\dodoloadpatterns{#1}{#2}\s!default\s!default} \def\dosetnormallanguage #1{\dodosetnormallanguage{:\s!default:\s!default:}{#1}\empty} \def\setuphyppatencoding {\pathypsettings} \fi %D We default to the language belonging to the interface. This %D is one of the few places outside the interface modules where %D \type{\startinterface} is used. %D We default to english: \setupcurrentlanguage[\s!en] \def\initializemainlanguage {\mainlanguage[\currentlanguage]% \showmessage\m!linguals9\currentlanguage} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lev.lua0000644000175000017500000000273712130411274024137 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-lev'] = { version = 1.001, comment = "companion to strc-lev.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local insert, remove = table.insert, table.remove local sections = structures.sections local default = interfaces.variables.default sections.levels = sections.levels or { } local level, levels, categories = 0, sections.levels, { } storage.register("structures/sections/levels", levels, "structures.sections.levels") local f_two_colon = string.formatters["%s:%s"] function commands.definesectionlevels(category,list) levels[category] = utilities.parsers.settings_to_array(list) end function commands.startsectionlevel(category) category = category ~= "" and category or default level = level + 1 local lc = levels[category] if not lc or level > #lc then context.nostarthead { f_two_colon(category,level) } else context.dostarthead { lc[level] } end insert(categories,category) end function commands.stopsectionlevel() local category = remove(categories) if category then local lc = levels[category] if not lc or level > #lc then context.nostophead { f_two_colon(category,level) } else context.dostophead { lc[level] } end level = level - 1 else -- error end end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-var.mkiv0000644000175000017500000000105311754241457024274 0ustar norbertnorbert%D \module %D [ file=page-var, %D version=2011.12.05, % moved from other page-* files %D title=\CONTEXT\ Page Macros, %D subtitle=Variables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Variables} \unprotect % just for temporary moved variables \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-ini.mkii0000644000175000017500000005430511754241457024323 0ustar norbertnorbert%D \module %D [ file=type-ini, %D version=2001.03.05, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typescript Macros / Initialization} %D The default fontclass is empty. We could demand always using fontclasses, %D and then make the calling macros simplier (always assume fontclass) but %D apart from downward compatibility issues, it would make global, class %D spanning definitions a pain. Some day we will introduce a default class. % torture test : proper typefaces (and namespace) % % \starttext % \usetypescript[modern][default] default: \setupbodyfont[modern] \eacute \eogonek \zcaron \acircumflexgrave % \usetypescript[modern][texnansi] texnansi: \setupbodyfont[modern] \eacute \eogonek \zcaron \acircumflexgrave % \usetypescript[modern][ec] ec: \setupbodyfont[modern] \eacute \eogonek \zcaron \acircumflexgrave % \usetypescript[modern][qx] qx: \setupbodyfont[modern] \eacute \eogonek \zcaron \acircumflexgrave % \usetypescript[modern][t5] t5: \setupbodyfont[modern] \eacute \eogonek \zcaron \acircumflexgrave % \stoptext % % torture test : no typeface, just definitions % % \starttext % {\setupbodyfont[reset] \setupbodyfont[cmr] cmr: \eacute \eogonek \zcaron \acircumflexgrave \endgraf} % {\setupbodyfont[reset] \setupbodyfont[plr] plr: \eacute \eogonek \zcaron \acircumflexgrave \endgraf} % {\setupbodyfont[reset] \setupbodyfont[csr] csr: \eacute \eogonek \zcaron \acircumflexgrave \endgraf} % {\setupbodyfont[reset] \setupbodyfont[vnr] vnr: \eacute \eogonek \zcaron \acircumflexgrave \endgraf} % {\setupbodyfont[reset] \setupbodyfont[aer] aer: \eacute \eogonek \zcaron \acircumflexgrave \endgraf} % \stoptext % \usetypescript [modern] [texnansi] % % normal : 1450 ms % exa quit : 1300 ms (150 ms) % preload : 825 ms (635 ms) (40-50%) % % \usetypescript [modern] [texnansi] % \usetypescript [palatino][texnansi] % \usetypescript [times] [texnansi] % % normal : 3200 ms % exa quit : 2700 ms ( 500 ms) % preload : 1300 ms (1900 ms) (60-70%) % \usetypescript [modern][\defaultencoding] % \usetypescript [map] [latin-modern-os] [\defaultencoding] % \setupbodyfont[modern] % test 1234 test \unprotect \def\starttypescriptcollection {\dosingleempty\dostarttypescriptcollection} \def\dostarttypescriptcollection[#1]% {} \def\stoptypescriptcollection {} \let\typescriptfiles\empty \unexpanded\def\usetypescriptfile[#1]% {\doifelse{#1}\v!reset {\let\typescriptfiles\empty} {\splitfiletype{#1}% \addtocommalist\splitoffname\typescriptfiles}} % SO FAR \let\currenttypescripts\empty \newif\iftypescriptfound \let\@@typescriptone \empty \let\typescriptone \empty \let\@@typescripttwo \empty \let\typescripttwo \empty \let\@@typescriptthree\empty \let\typescriptthree\empty % method 2 is for Hans van der Meer \newtoks\documenttypescripts \chardef\typescriptmethod\plusone % 1: empty==all==true 2: empty==false \chardef\typescriptstate \plustwo % 1: process 2: store \unexpanded\def\usetypescript {\chardef\typescriptmethod\plusone\dotripleempty\dousetypescript} \unexpanded\def\usetypescriptexact{\chardef\typescriptmethod\plustwo\dotripleempty\dousetypescript} \def\dousetypescript[#1][#2][#3]% {\expanded{\dodousetypescript[#1][#2][#3]}} \def\dodousetypescript[#1][#2][#3]% also loads type-loc, a user file {\pushmacro\@@typescriptone \edef\@@typescriptone {\truetypescript{#1}}% \pushmacro\@@typescripttwo \edef\@@typescripttwo {\truetypescript{#2}}% \pushmacro\@@typescriptthree\edef\@@typescriptthree{\truetypescript{#3}}% \pushmacro\typescriptone \pushmacro\typescripttwo \pushmacro\typescriptthree \pushmacro\typescriptmethod \pushmacro\typescriptstate \chardef\typescriptstate\plusone % process \pushmacro\stoptypescript \typescriptfoundfalse \iftracetypescripts\writestatus\m!fonts{request: [\@@typescriptone] [\@@typescripttwo] [\@@typescriptthree]}\fi \processcommacommand[\typescriptfiles]\dododousetypescript \the\documenttypescripts \firsttypescriptpassfalse % testen \popmacro\stoptypescript \popmacro\typescriptstate \popmacro\typescriptmethod \popmacro\typescriptthree \popmacro\typescripttwo \popmacro\typescriptone \popmacro\@@typescriptthree \popmacro\@@typescripttwo \popmacro\@@typescriptone} % simple version: % % \def\dododousetypescript#1% % {\startreadingfile % \pushmacro\currenttypefile % \def\currenttypefile{#1}% % \def\currenttypefile{#1}% % \readfile\currenttypefile\donothing\donothing % \popmacro\currenttypefile % \stopreadingfile} % % tricky version: \newconditional\preloadingtypescripts \def\preloadtypescripts{\ifproductionrun\settrue\preloadingtypescripts\fi} \def\dododousetypescript#1% {\setfalse\quittingtypescript \pushmacro\currenttypefile \def\currenttypefile{#1}% \ifconditional\preloadingtypescripts % load files once, and use saved data \def\loadedtypescripts{\csname\??ts:\c!file:#1\endcsname}% \@EAEAEA\ifx\loadedtypescripts\relax \@EAEAEA\newtoks\loadedtypescripts \bgroup \long\def\starttypescript##1\stoptypescript {\global\loadedtypescripts\@EA{\the\loadedtypescripts\starttypescript##1\stoptypescript}}% \long\def\starttypescriptcollection##1\stoptypescriptcollection {\global\loadedtypescripts\@EA{\the\loadedtypescripts\starttypescriptcollection##1\stoptypescriptcollection}}% \startreadingfile \pushendofline \unprotect \readfile{\currenttypefile.\mksuffix}\donothing{\readfile\currenttypefile\donothing\donothing}% \protect \popendofline \stopreadingfile \egroup \fi %\message{[\space\currenttypefile}% \the\loadedtypescripts %\message{\ifconditional\quittingtypescript quit\space\fi]}% \else % process files each time \startreadingfile \pushendofline \unprotect \readfile{\currenttypefile.\mksuffix}\donothing{\readfile\currenttypefile\donothing\donothing}% \protect \popendofline \stopreadingfile \fi \popmacro\currenttypefile \ifconditional\quittingtypescript \quitcommalist \setfalse\quittingtypescript \fi} % % not faster, unless maybe toks % % \newcount\nofloadedtypescripts % % \def\startloadedtypescript % {\dotripleempty\dostartloadedtypescript} % % \let\stoploadedtypescript\relax % % \long\def\dostartloadedtypescript[#1][#2][#3]#4\stoptypescript % {\global\advance\nofloadedtypescripts\plusone % \long\setgvalue{\??ts=>\the\nofloadedtypescripts}{#4}% % \edef\temp% % {\iffirstargument [#1]\fi % \ifsecondargument[#2]\fi % \ifthirdargument [#3]\fi % \noexpand\csname\??ts=>\the\nofloadedtypescripts\noexpand\endcsname}% % \global\loadedtypescripts\@EA\@EA\@EA{\@EA\the\@EA\loadedtypescripts\@EA\starttypescript\temp\stoptypescript}} % % \def\startloadedtypescriptcollection % {\dosingleempty\dostartloadedtypescriptcollection} % % \def\dostartloadedtypescriptcollection[#1]{} % \def\stoploadedtypescriptcollection {} % % \def\dododousetypescript#1% % {\setfalse\quittingtypescript % \pushmacro\currenttypefile % \def\currenttypefile{#1}% % \ifconditional\preloadingtypescripts % % load files once, and use saved data % \def\loadedtypescripts{\csname\??ts:\c!file:#1\endcsname}% % \@EAEAEA\ifx\loadedtypescripts\relax % \@EAEAEA\newtoks\loadedtypescripts % \bgroup % % % \let\starttypescript \startloadedtypescript % \let\stoptypescript \stoploadedtypescript % \let\starttypescriptcollection\startloadedtypescriptcollection % \let\stoptypescriptcollection \stoploadedtypescriptcollection % % % \startreadingfile % \pushendofline % \unprotect % \readfile\currenttypefile\donothing\donothing % \protect % \popendofline % \stopreadingfile % \egroup % \fi % %\message{[\space\currenttypefile}% % \the\loadedtypescripts % %\message{\ifconditional\quittingtypescript quit\space\fi]}% % \else % % process files each time % \startreadingfile % \pushendofline % \unprotect % \readfile\currenttypefile\donothing\donothing % \protect % \popendofline % \stopreadingfile % \fi % \popmacro\currenttypefile % \ifconditional\quittingtypescript % \quitcommalist % \setfalse\quittingtypescript % \fi} \def\usetypescriptonce {\dotripleempty\dousetypescriptonce} \def\dousetypescriptonce[#1][#2][#3]% {\doifelseflagged{ts:#1:#2:#3}% {\writestatus\m!fonts{once (#1) (#2) (#3)}} {\setflag{ts:#1:#2:#3}% \expanded{\dodousetypescript[#1][#2][#3]}}} % \definetypescriptsynonym[lbr][cmr] \def\definetypescriptsynonym {\dodoubleempty\dodefinetypescriptsynonym} \def\dodefinetypescriptsynonym[#1][#2]% {\ifsecondargument\setevalue{\??tm#1}{#2}\fi} \def\truetypescript#1% {\ifcsname\??tm#1\endcsname \@EA\truetypescript\csname\??tm#1\endcsname\else#1% \fi} % script [serif] [default] [size] % script [serif] [computer-modern] [size] % script [serif] [computer-modern] [ec] % script [serif] [computer-modern] [name] % script [serif] [computer-modern] [special] % todo, make firsttypescriptpass conditional \newif\iffirsttypescriptpass \firsttypescriptpasstrue \prependtoks\firsttypescriptpasstrue\to\everyjob \def\typescript@@all{all} \newif\iftracetypescripts \def\starttypescript {\ifcase\typescriptstate % 0 = skip \@EA\gobbleuntil\@EA\stoptypescript \or % 1 = process \expandafter\dostarttypescript \or % 2 = store \expandafter\nostarttypescript \else % ? = skip \@EA\gobbleuntil\@EA\stoptypescript \fi} \long\def\nostarttypescript#1\stoptypescript {\appendtoks\starttypescript#1\stoptypescript\to\documenttypescripts} \def\dostarttypescript {\let\typescriptone \@@typescriptone \let\typescripttwo \@@typescripttwo \let\typescriptthree\@@typescriptthree \let\typescriptmatch\empty \doifnextoptionalelse\dostarttypescriptone\dostarttypescriptall} \long\def\dostarttypescriptall {\iffirsttypescriptpass \expandafter\doprocesstypescript \else % skip this since it may do unwanted resets, like % setting symbolic font names to unknown, especially % in run time user type scripts \expandafter\noprocesstypescript \fi} \long\def\dostarttypescriptyes {\ifdone \typescriptfoundtrue \iftracetypescripts\writestatus\m!fonts{match:\ifx\currenttypefile\relax\space *\fi \typescriptmatch}\fi \expandafter\doprocesstypescript \else \expandafter\noprocesstypescript \fi} \long\def\dostarttypescriptone {\dochecktypescript\@@typescriptone\typescriptone\redostarttypescriptone} \long\def\dostarttypescripttwo {\dochecktypescript\@@typescripttwo\typescripttwo\redostarttypescripttwo} \long\def\dostarttypescriptthree {\dochecktypescript\@@typescriptthree\typescriptthree\redostarttypescriptthree} \long\def\redostarttypescriptone {\doifnextoptionalelse\dostarttypescripttwo\dostarttypescriptyes} \long\def\redostarttypescripttwo {\doifnextoptionalelse\dostarttypescriptthree\dostarttypescriptyes} \long\def\redostarttypescriptthree {\dostarttypescriptyes} \def\doprocesstypescript {\pushmacro\fontclass} \def\stoptypescript {\popmacro\fontclass} \long\def\noprocesstypescript#1\stoptypescript {} \let\typescriptmatch\empty \def\dochecktypescript#1#2#3[#4]% script use value next {\donefalse \def\@@typescriptcheck{#4}% \ifx\@@typescriptcheck\empty % no longer needed / met \ifcase\typescriptmethod\or\donetrue\else\donefalse\fi \else\ifx#1\typescript@@all \donetrue \else\ifx\@@typescriptcheck\typescript@@all \donetrue \else\expanded{\doifcommonelse{\@@typescriptcheck}{#1}}\donetrue\donefalse\ifdone \let#2\commalistelement \fi\fi\fi\fi \ifdone \edef\typescriptmatch{\typescriptmatch\space[#4]}% \expandafter#3% \else \expandafter\noprocesstypescript \fi} %D Yet another speed up: when issued inside typescript, the call %D %D \starttyping %D \quittypescriptscanning %D \stoptyping %D %D quits further loading. For an example, see type-exa: \newconditional\quittingtypescript \setfalse\quittingtypescript \def\quittypescriptscanning{\settrue\quittingtypescript} % status % % 1 loaded % 2 reported % 3 preloaded % flags ipv \c!state, more flag values \def\dopreloadmapfile#1% {\splitfiletype{#1}% \writestatus\m!fonts{assuming map file: \splitoffname}% \setxvalue{\splitoffname \c!state}{3}% \doglobal\removefromcommalist\splitoffname\allfontmapsfiles} \def\preloadmapfile[#1]{\expanded{\processcommalist[#1]}\dopreloadmapfile} \def\loadmapfile [#1]{\expanded{\processcommalist[#1]}\loadthemapfile} \def\unloadmapfile [#1]{\expanded{\processcommalist[#1]}\unloadthemapfile} % too soon, no driver known, \ifproductionrun \loadallfontmapfiles \fi % temp hack, will become just \addto \ifx\pdftexversion\undefined \def\loadthemapfile#1% {\splitfiletype{#1}% \doglobal\addtocommalist\splitoffname\allfontmapsfiles} \else\ifnum\pdftexversion<120 % no overloading \def\loadthemapfile#1% {\splitfiletype{#1}% \doglobal\pretocommalist\splitoffname\allfontmapsfiles} \else \def\loadthemapfile#1% {\splitfiletype{#1}% \doglobal\addtocommalist\splitoffname\allfontmapsfiles} \fi \fi \def\unloadthemapfile#1% {\splitfiletype{#1}% \doglobal\removefromcommalist\splitoffname\allfontmapsfiles} \let\usedmapfile\gobbletwoarguments \let\usedmapline\gobbletwoarguments \def\doregisterloadedmapfile#1% {\immediatewriteutilitycommand{\usedmapfile{=}{#1}}} \def\doloadfontmapfile#1% {\ifundefined{#1\c!state}% \writestatus\m!fonts{using map file: #1}% \doregisterloadedmapfile{#1}% \doloadmapfile{=}{#1.\f!fontmapextension}% +/add =/replace -/remove \setxvalue{#1\c!state}{1}% \fi} \def\doreportfontmapfile#1% {\ifundefined{#1\c!state}% \writestatus\m!fonts{needs map file: #1}% \setxvalue{#1\c!state}{2}% \fi} \def\loadallfontmapfiles {%\message{[\allfontmapsfiles]}% \ifconditional\resettingmapfile \writestatus\m!fonts{resetting map file list}% \doresetmapfilelist \global\setfalse\resettingmapfile \fi \ifx\allfontmapsfiles\empty \else \ifautoloadmapfiles \processcommacommand[\allfontmapsfiles]\doloadfontmapfile \else \processcommacommand[\allfontmapsfiles]\doreportfontmapfile \fi \forgetmapfiles \fi} \def\loadmapline {\dodoubleempty\dodoloadmapline} \def\dodoloadmapline[#1][#2]% {\loadallfontmapfiles % ! ! ! \ifsecondargument \immediatewriteutilitycommand{\usedmapline{#1}{#2}}% \doloadmapline{#1}{#2}% special \else \loadmapline[=][#1]% %\immediatewriteutilitycommand{\usedmapline{=}{#2}}% %\doloadmapline{=}{#1}% special \fi} % since this is driver dependent, and since we may set map files % before an output format is defined, we need to postpone it; we % cannot use starttext as hook because an output switch can be part % of a style; an alternative is to no longer permit driver switching % after the first \starttext, but that will break compatibility % because \startcomponent ... \environment ... is pretty legal. % the map directives need to end up in the right place in the stream % hm, the timing of when pdftex needs the map file info keeps changing; % it's really time to move to map line support % \appendtoks \loadallfontmapfiles \to \everyPDFximage % \appendtoks \loadallfontmapfiles \to \everystarttext % \appendtoks \loadallfontmapfiles \to \everybeforepagebody \everybeforeshipout \expandafter {\expandafter\appendtoks \expandafter\loadallfontmapfiles \expandafter\to \expandafter\pageboundsettings \the\everybeforeshipout} \newif\ifautoloadmapfiles \let\allfontmapsfiles\empty \def\forgetmapfiles {\globallet\allfontmapsfiles\empty} \newconditional\resettingmapfile \def\resetmapfiles {\global\settrue\resettingmapfile} \def\disablemapfiles {\resetmapfiles \forgetmapfiles} %D A handy shortcut: % \definetypescriptprefix[serif][Serif] % \definetypescriptprefix[sans] [Sans] % \definetypescriptprefix[mono] [Mono] % %\starttypescript [serif,sans,mono] [handling,hanging,hz] [pure,normal,hz,quality] % \setupfontsynonym [\typescriptprefix\typescriptone] [handling=\typescriptthree] % \stoptypescript \def\definetypescriptprefix {\dodoubleargument\dodefinetypescriptprefix} \def\dodefinetypescriptprefix[#1][#2]% {\setgvalue{\??ts::#1}{#2}} % made global % without testing: % % \def\typescriptprefix#1% % {\csname\??ts::#1\endcsname} % % with testing: \def\typescriptprefix#1% {\executeifdefined{\??ts::#1}{#1}} % defining typefaces: % % \definetypeface [#1:joke] [#2:rm] % \definetypeface [#1:joke] [#2:rm] [#3:...] % \definetypeface [#1:joke] [#2:rm] [#3:serif] [#4:lucida] [#5:size] [#6:...] \def\definetypeface {\dosixtupleargument\dodefinetypeface} \def\tsvar#1#2% \executeifdefined{\??ts#1}{#2} {\@EA\ifx\csname\??ts#1\endcsname\empty #2% \else \csname\??ts#1\endcsname \fi} % #1=main #2=rm #3=serif #4=fontname #5=size #6=settings \def\typefaceencoding{\defaultencoding} % we can use \rawgetparameters or \rawgeteparameters \def\dodefinetypeface[#1][#2][#3][#4][#5][#6]% {\dododefinetypeface[#1][#2]% \iffifthargument % sixth is optional % we need to expand since in #6 there can be a \typescripttwo % \expanded{\getparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!features=,\s!fallbacks=,\s!text=,#6]}% \geteparameters \expanded{\getparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!features=,\s!text=,#6]}% \geteparameters \pushmacro\relativefontsize \pushmacro\typefaceencoding \pushmacro\fontclass \let\relativefontsize\@@tsrscale \let\typefaceencoding\@@tsencoding \setcurrentfontclass{#1}% % \letvalue{\fontclass\s!features }\@@tsfeatures % new per 16/6/2007 % \letvalue{\fontclass\s!fallbacks}\@@tsfallbacks % new per 12/10/2008 \saverelativefontsize{#2}\relativefontsize % fall back \savemathtextstyle\@@tstext % math text style (new per 28/4/2006) \iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4] / \typefaceencoding}\fi \usetypescript[#3,\t!map][#4][\t!name,\t!default,\typefaceencoding,\t!special]% map is needed for backward cmp \usetypescript[#3][#5][\t!size]% \popmacro\fontclass \popmacro\typefaceencoding \popmacro\relativefontsize \else\iffourthargument \definetypeface[#1][#2][#3][#4][\s!default]% \else\ifthirdargument \getparameters[\??tf#1#2][#3]% \fi\fi\fi} \def\dododefinetypeface[#1][#2]% saveguard against redefinition {\doifsomething{#1} {\ifcsname\??tf#1\s!default\endcsname \else \registerfontclass{#1}% \setgvalue{\??tf#1\s!default}{#2}% \fi \ifcsname#1\endcsname \else \unexpanded\setgvalue{#1}{\switchtotypeface[#1][#2]}% \fi}} \def\setuptypeface% [class] [settings] {\doquadrupleempty\doswitchtotypeface[\setupbodyfont][\fontclass]} \unexpanded\def\switchtotypeface% [class] [settings] {\doquadrupleempty\doswitchtotypeface[\switchtobodyfont][\globalfontclass]} \def\doswitchtotypeface[#1][#2][#3][#4]% {%\doifinsetelse{\s!default,\v!reset}{#3} % {\setcurrentfontclass\empty} % {\setcurrentfontclass{#3}}% \setcurrentfontclass{#3}% \let\globalfontclass#2% \iffourthargument #1[#4]% \else\ifx\fontclass\empty #1[\c!rm]% \else \doifdefinedelse{\??tf\fontclass\s!default} {#1[\getvalue{\??tf\fontclass\s!default}]} {#1[\c!rm]}% \fi \fi \ifmmode\mr\else\tf\fi} % needed ? \def\usetypefile[#1]% recurses on path ! ? {\readfile{\f!typeprefix#1}\donothing\donothing} %D For Taco: %D %D \starttyping %D \inherittypeface[palatino][rm][postscript] %D \inherittypeface[palatino][rm][\fontclass] %D \inherittypeface[palatino][rm] % == \fontclass %D \inherittypeface[palatino] % == [rm,ss,tt,mm] %D \stoptyping \def\inherittypeface {\dotripleempty\doinherittypeface} \def\doinherittypeface[#1][#2][#3]% {\doifelsenothing{#2} {\doinherittypeface[#1][\c!rm,\c!ss,\c!tt,\c!mm][\fontclass]} {\doifnot{#1}{#3} {\def\docommand##1{\setevalue{#1-##1}{#3}}% \processcommalist[#2]\docommand}}} %D This hook sinto the font mechanism with: \def\checkfontclass#1% {\edef\fontclass{\executeifdefined{\fontclass-#1}{\fontclass}}} %D For backward compatibility we reimplement the font file %D loading macro. \ifx\normaldoreadfontdefinitionfile\undefined \let\normaldoreadfontdefinitionfile\doreadfontdefinitionfile \fi % old and obsolete % % \def\doreadfontdefinitionfile#1#2% #1 = set/switch state % {\ifundefined{\??tf#2\c!default}% % \pushmacro\fontclass % \setcurrentfontclass\empty % \pushmacro\@@typescriptone \edef\@@typescriptone {\truetypescript{#2}}% % \pushmacro\@@typescripttwo \let\@@typescripttwo \empty % \pushmacro\@@typescriptthree\let\@@typescriptthree\empty % \typescriptfoundfalse % \dododousetypescript{\f!typeprefix pre}% % \popmacro\@@typescriptthree % \popmacro\@@typescripttwo % \popmacro\@@typescriptone % \iftypescriptfound \else % \normaldoreadfontdefinitionfile{#1}{#2}% % \fi % \setcurrentfontclass\empty % \popmacro\fontclass % \else\ifcase#1\relax % \switchtotypeface[#2]% % \else % \setuptypeface[#2]% % \fi\fi} % % new and obeying fontclasses (but still obsolete) \def\doreadfontdefinitionfile#1#2% #1 = set/switch state {\ifcsname\??tf#2\c!default\endcsname \ifcase#1\relax \switchtotypeface[#2]% \else \setuptypeface[#2]% \fi \else \pushmacro\starttypescript \scratchtoks\emptytoks % locate downward compatibility definitions, one argument ! \long\def\starttypescript[##1]##2\stoptypescript {\doif{##1}{#2}{\scratchtoks{##2}}} \startreadingfile \readfile{\f!typeprefix pre}\donothing\donothing \stopreadingfile \popmacro\starttypescript \the\scratchtoks \fi} \fetchruntimecommand \typetypescript {\f!typeprefix\s!run} % \usetypescript [berry] [ec] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-for.mkiv0000644000175000017500000000173212130411274024274 0ustar norbertnorbert%D \module %D [ file=strc-mat, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Math Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Math Formulas} %D This module only provides the code for defining formulas and %D fetching parameters. The action takes place later. \unprotect %D \macros %D {setupformulas,setupsubformulas} \installcorenamespace{formula} \installcorenamespace{subformula} \installcommandhandler \??formula {formula} \??formula \installcommandhandler \??subformula {subformula} \??subformula % maybe just setuphandler (no childs used yet) \let\setupformulas \setupformula \let\setupsubformulas\setupsubformula \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1250.mkii0000644000175000017500000002720311754241457024420 0ustar norbertnorbert%D \module %D [ file=regi-cp1250, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=cp1250 (East European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for cp1250 input encoding (regime) for Central European languages, %D see also iso-8859-2. %D %D Usage: %D \type{\enableregime[cp1250]} or \type{\enablereregime[windows-1250]} \startregime[cp1250] \defineactivetoken 128 {\texteuro} % 20AC EURO SIGN \defineactivetoken 129 {\unknownchar} % \defineactivetoken 130 {\quotesinglebase} % 201A SINGLE LOW-9 QUOTATION MARK \defineactivetoken 131 {\unknownchar} % \defineactivetoken 132 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 133 {\textellipsis} % 2026 HORIZONTAL ELLIPSIS \defineactivetoken 134 {\textdag} % 2020 DAGGER \defineactivetoken 135 {\textddag} % 2021 DOUBLE DAGGER \defineactivetoken 136 {\unknownchar} % \defineactivetoken 137 {\perthousand} % 2030 PER MILLE SIGN \defineactivetoken 138 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 139 {\guilsingleleft} % 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \defineactivetoken 140 {\Sacute} % 015A LATIN CAPITAL LETTER S WITH ACUTE \defineactivetoken 141 {\Tcaron} % 0164 LATIN CAPITAL LETTER T WITH CARON \defineactivetoken 142 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 143 {\Zacute} % 0179 LATIN CAPITAL LETTER Z WITH ACUTE \defineactivetoken 144 {\unknownchar} % \defineactivetoken 145 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 146 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 147 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 148 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 149 {\textbullet} % 2022 BULLET \defineactivetoken 150 {\endash} % 2013 EN DASH \defineactivetoken 151 {\emdash} % 2014 EM DASH \defineactivetoken 152 {\unknownchar} % \defineactivetoken 153 {\trademark} % 2122 TRADE MARK SIGN \defineactivetoken 154 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 155 {\guilsingleright} % 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \defineactivetoken 156 {\sacute} % 015B LATIN SMALL LETTER S WITH ACUTE \defineactivetoken 157 {\tcaron} % 0165 LATIN SMALL LETTER T WITH CARON \defineactivetoken 158 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 159 {\zacute} % 017A LATIN SMALL LETTER Z WITH ACUTE \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\textcaron} % 02C7 CARON \defineactivetoken 162 {\textbreve} % 02D8 BREVE \defineactivetoken 163 {\Lstroke} % 0141 LATIN CAPITAL LETTER L WITH STROKE \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\Scedilla} % 015E LATIN CAPITAL LETTER S WITH CEDILLA \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\Zdotaccent} % 017B LATIN CAPITAL LETTER Z WITH DOT ABOVE \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\textogonek} % 02DB OGONEK \defineactivetoken 179 {\lstroke} % 0142 LATIN SMALL LETTER L WITH STROKE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 186 {\scedilla} % 015F LATIN SMALL LETTER S WITH CEDILLA \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\Lcaron} % 013D LATIN CAPITAL LETTER L WITH CARON \defineactivetoken 189 {\texthungarumlaut} % 02DD DOUBLE ACUTE ACCENT \defineactivetoken 190 {\lcaron} % 013E LATIN SMALL LETTER L WITH CARON \defineactivetoken 191 {\zdotaccent} % 017C LATIN SMALL LETTER Z WITH DOT ABOVE \defineactivetoken 192 {\Racute} % 0154 LATIN CAPITAL LETTER R WITH ACUTE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Abreve} % 0102 LATIN CAPITAL LETTER A WITH BREVE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Lacute} % 0139 LATIN CAPITAL LETTER L WITH ACUTE \defineactivetoken 198 {\Cacute} % 0106 LATIN CAPITAL LETTER C WITH ACUTE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Ecaron} % 011A LATIN CAPITAL LETTER E WITH CARON \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Dcaron} % 010E LATIN CAPITAL LETTER D WITH CARON \defineactivetoken 208 {\Dstroke} % 0110 LATIN CAPITAL LETTER D WITH STROKE \defineactivetoken 209 {\Nacute} % 0143 LATIN CAPITAL LETTER N WITH ACUTE \defineactivetoken 210 {\Ncaron} % 0147 LATIN CAPITAL LETTER N WITH CARON \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Ohungarumlaut} % 0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Rcaron} % 0158 LATIN CAPITAL LETTER R WITH CARON \defineactivetoken 217 {\Uring} % 016E LATIN CAPITAL LETTER U WITH RING ABOVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Uhungarumlaut} % 0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Yacute} % 00DD LATIN CAPITAL LETTER Y WITH ACUTE \defineactivetoken 222 {\Tcedilla} % 0162 LATIN CAPITAL LETTER T WITH CEDILLA \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\racute} % 0155 LATIN SMALL LETTER R WITH ACUTE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\abreve} % 0103 LATIN SMALL LETTER A WITH BREVE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\lacute} % 013A LATIN SMALL LETTER L WITH ACUTE \defineactivetoken 230 {\cacute} % 0107 LATIN SMALL LETTER C WITH ACUTE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\ecaron} % 011B LATIN SMALL LETTER E WITH CARON \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\dcaron} % 010F LATIN SMALL LETTER D WITH CARON \defineactivetoken 240 {\dstroke} % 0111 LATIN SMALL LETTER D WITH STROKE \defineactivetoken 241 {\nacute} % 0144 LATIN SMALL LETTER N WITH ACUTE \defineactivetoken 242 {\ncaron} % 0148 LATIN SMALL LETTER N WITH CARON \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\ohungarumlaut} % 0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\rcaron} % 0159 LATIN SMALL LETTER R WITH CARON \defineactivetoken 249 {\uring} % 016F LATIN SMALL LETTER U WITH RING ABOVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\uhungarumlaut} % 0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\yacute} % 00FD LATIN SMALL LETTER Y WITH ACUTE \defineactivetoken 254 {\tcedilla} % 0163 LATIN SMALL LETTER T WITH CEDILLA \defineactivetoken 255 {\textdotaccent} % 02D9 DOT ABOVE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/core-job.mkii0000644000175000017500000003104111754241457024255 0ustar norbertnorbert%D \module %D [ file=core-job, % copied from main-001, %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, %D subtitle=Job Handling, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is still to be split and documented. \writestatus{loading}{ConTeXt Core Macros / Job Handling} \unprotect \let \currentproject \empty \let \currentproduct \empty \let \currentenvironment \empty \let \currentcomponent \empty \let \loadedfiles \empty \let \processedfiles \empty \let \nomorefiles \relax \let \allinputpaths \empty \let \locatedfilepath \empty \newcount\textlevel \newcount\fileprocesslevel \setvalue{\c!file::0}{\jobname} \def\processedfile % is used in styles, don't change ! {\getvalue{\c!file::\number\fileprocesslevel}} \def\dostarttextfile#1% {\global\advance\fileprocesslevel\plusone \setxvalue{\c!file::\number\fileprocesslevel}{#1}% \@EA\doglobal\@EA\addtocommalist\@EA{#1}\processedfiles} \def\dostoptextfile {\global\advance\fileprocesslevel\minusone} \def\processlocalfile#1#2% {#1{#2}\donothing{\readfile{#2}\donothing\donothing}} \def\processfile#1% {\ifx\allinputpaths\empty \def\next{\processlocalfile\readlocfile}% \else \let\filepath\empty \def\docommand##1% {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse \ifdone\expandafter\quitcommalist\fi}% \doifparentfileelse{#1} % new {\processcommacommand [\allinputpaths]\docommand} {\processcommacommand[.,\allinputpaths]\docommand}% \ifx\filepath\empty \def\next{\processlocalfile\readlocfile}% fall back ../../.. \else \def\next{\processlocalfile{\readsetfile\filepath}}% file found \fi \fi \next{#1}} \def\doifinputfileelse#1% rarely used {\ifx\allinputpaths\empty \@EA\secondoftwoarguments \else \let\filepath\empty \def\docommand##1% {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse \ifdone\expandafter\quitcommalist\fi}% \processcommacommand[.,\allinputpaths]\docommand \ifx\filepath\empty \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi \fi} \let\locatedfilepath\empty \def\locatefilepath#1% {\let\locatedfilepath\empty \ifx\allinputpaths\empty \else \def\docommand##1% {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\locatedfilepath{##1}}\donefalse \ifdone\expandafter\quitcommalist\fi}% \doifparentfileelse{#1} % new {\processcommacommand [\allinputpaths]\docommand} {\processcommacommand[.,\allinputpaths]\docommand}% \fi} \def\usepath[#1]% {\def\docommand##1% {\doifelse{##1}\v!reset {\let\allinputpaths\empty} {\sanitizefilename#1\to\ascii \defconvertedcommand\ascii\ascii \addtocommalist\ascii\allinputpaths}}% \processcommalist[#1]\docommand} \def\usesubpath[#1]% test for a real long time, permits ../{name} i.e. braces {\ifx\allinputpaths\empty \sanitizefilename#1\to\allinputpaths \else \def\docommand##1% {\def\dodocommand####1% {\sanitizefilename####1\to\ascii \defconvertedcommand\ascii\ascii \addtocommalist{##1/\ascii}\allinputpaths}% \processcommalist[#1]\dodocommand}% \processcommacommand[\allinputpaths]\docommand \fi} \def\registerfileinfo[#1#2]#3% geen \showmessage ? {\writestatus\m!systems{#1#2 file #3 at line \the\inputlineno}% \immediatewriteutility{f #1 {#3}}} \ifx\preloadfonts \undefined \let\preloadfonts \relax \fi \ifx\preloadspecials\undefined \let\preloadspecials\relax \fi \ifx\disableXML\undefined \let\disableXML\relax \fi \def\doloadsystemfile#1% mkii with fallback to tex {\readsysfile{#1.\mksuffix} {\showmessage\m!systems2{#1.\mksuffix}} {\readsysfile{#1.tex}{\showmessage\m!systems2{#1.tex}}\donothing}} \def\loadsystemfiles {\reportprotectionstate \doloadsystemfile\f!newfilename \doloadsystemfile\f!locfilename \doloadsystemfile\f!expfilename \readsysfile{\f!sysfilename.\mksuffix} {\showmessage\m!systems2{\f!sysfilename.\mksuffix}} {\readsysfile{\f!sysfilename.tex} {\showmessage\m!systems2{\f!sysfilename.tex}} {\readsysfile{\f!sysfilename.rme} {\showmessage\m!systems2{\f!sysfilename.rme}% \doglobal\appendtoks % brrr better \setcatcodetable\ctxcatcodes \bgroup \disableXML \readsysfile{\f!errfilename.\mksuffix}\donothing\donothing \egroup \to\everygoodbye}% \donothing}}} %D Loading of \type {cont-usr.tex} (edited by the user) %D and \type {cont-fmt.tex} (generated by texexec). This is %S obsolete now that we have enough memory for patterns. % \def\loaduserspecifications % {% this used to be the file where users can tune their system, especially patterns % \readsysfile\f!usrfilename{\showmessage\m!systems2\f!usrfilename}\donothing % % this one took care of user preferences (fonts, messages) but lm made this obsolete % \readjobfile\f!fmtfilename{\showmessage\m!systems2\f!fmtfilename}\donothing % % from now on we preload all patterns (only in mkii) % \preloadallpatterns} \let\loaduserspecifications\relax %D We don't want multiple jobfiles to interfere. \def\loadoptionfile {\readjobfile{\jobname.\f!optionextension} {\showmessage\m!systems2{\jobname.\f!optionextension}}% {\writestatus\m!systems {no \jobname.\f!optionextension}}} % Most natural ... % % \def\doateverystarttext % {\the\everystarttext % \global\let\doateverystarttext\relax} % % ... most practical, since we can load env's in a % something.run file (nested \starttext's; see for % instance x-res-08, where we definitely want to % open the file!). \def\doateverystarttext {\the\everystarttext \global\everystarttext\emptytoks} \def\starttext {\doateverystarttext \ifcase\textlevel \registerfileinfo[begin]\jobname \expandafter\startcopyingblocks \fi \global\advance\textlevel\plusone} \def\stoptext {\global\advance\textlevel\minusone \ifnum\textlevel>\zerocount \else \page[\v!last]\page % new, moved from everybye to here; flushes headers, colors etc etc etc \the\everystoptext %\the\everybye % %\the\everygoodbye % == \end (new) %\expandafter\normalend % \expandafter\finalend \fi} \def\forcequitjob#1% {\writestatus\m!systems{forcing quit: #1}% \batchmode \dorecurse\textlevel\stoptext \normalend} \let\autostoptext\relax \def\autostarttext {\ifcase\textlevel \starttext \writestatus\m!systems{auto \string\starttext..\string\stoptext}% \let\autostoptext\stoptext \fi} \def\finalend {\ifnum\textlevel>\zerocount \else \the\everybye \the\everygoodbye \doifsometokselse\everynotabene{\writeline\the\everynotabene\writeline}\donothing \global\everybye \emptytoks % rather unneeded \global\everygoodbye\emptytoks % but for sure \expandafter\normalend \fi} \let\end\finalend \def\emergencyend {\writestatus\m!systems{invalid \@EA\string\csname\e!start\v!text\endcsname...\@EA\string\csname\e!stop\v!text\endcsname\space structure}% \stoptext} \def\currentfile{\inputfilename} \def\doexecutefileonce#1% {\beforesplitstring#1\at.\to\currentfile \fullexpandtwoargsafter\doifnotinset\currentfile\loadedfiles {\fullexpandoneargafter\addtocommalist\currentfile\loadedfiles \doexecutefile{#1}}} \def\doexecutefile#1% {\registerfileinfo[begin]{#1}% \dostarttextfile{#1}% \processfile{#1}% \dostoptextfile \registerfileinfo[end]{#1}} \def\donotexecutefile#1% {} \def\verwerkfile#1 % {\doexecutefile{#1}} \def\useenvironment[#1]% maybe commalist {\environment #1 \relax} \def\environment #1 % at outermost level only (load only once) {\pushmacro\startenvironment \pushmacro\stopenvironment \def\startenvironment ##1 {}% \let\stopenvironment\relax \startreadingfile \doexecutefileonce{#1} \stopreadingfile \popmacro\stopenvironment \popmacro\startenvironment} \def\component #1 % at outermost level only {\dostarttextfile{#1}% \processfile{#1}% \dostoptextfile} \newcount\filelevel \let\currentcomponent \v!text \let\currentcomponentpath\f!currentpath \def\donextlevel#1#2#3#4#5#6#7\\% {\pushmacro\currentcomponent \pushmacro\currentcomponentpath \let\currentcomponent#1% \setsystemmode\currentcomponent \splitfilename{#1}% \ifx\splitoffpath\empty \let\currentcomponentpath\f!currentpath \else \let\currentcomponentpath\splitoffpath \fi \beforesplitstring#7\at.\to#2\relax % can become path + base \ifcase\filelevel\relax \starttext \def\project ##1 {#3{##1}}% \def\environment ##1 {#4{##1}}% \def\product ##1 {#5{##1}}% \def\component ##1 {#6{##1}}% \fi \advance\filelevel\plusone \fullexpandoneargafter\addtocommalist{#1}\loadedfiles} \def\doprevlevel {\popmacro\currentcomponentpath \popmacro\currentcomponent \setsystemmode\currentcomponent \ifnum\filelevel=\plusone \expandafter\stoptext \else \advance\filelevel\minusone \expandafter\endinput \fi} \def\startproject #1 % {\donextlevel\v!project\currentproject \donotexecutefile\doexecutefileonce \doexecutefileonce\doexecutefile#1\\} \def\startproduct #1 % {\doateverystarttext \donextlevel\v!product\currentproduct \doexecutefileonce\doexecutefileonce \donotexecutefile\doexecutefile#1\\} \def\startcomponent #1 % {\doateverystarttext \donextlevel\v!component\currentcomponent \doexecutefileonce\doexecutefileonce \donotexecutefile\doexecutefile#1\\} \def\startenvironment #1 % {\donextlevel\v!environment\currentenvironment \donotexecutefile\doexecutefileonce \donotexecutefile\donotexecutefile#1\\} % \startproject test % 1: \startmode[*project] project \stopmode \endgraf % 2: \startmode[*product] product \stopmode \endgraf % \stopproject \def\stopproject {\doprevlevel} \def\stopproduct {\doprevlevel} \def\stopcomponent {\doprevlevel} \def\stopenvironment{\doprevlevel} % more or less replaced by modes \setvalue{\e!start\v!localenvironment}[#1]% {\let\loadedlocalenvironments\empty \def\docommand##1% {\beforesplitstring##1\at.\to\someevironment \fullexpandoneargafter\addtocommalist\someevironment\loadedlocalenvironments}% \processcommalist[#1]\docommand \fullexpandtwoargsafter\doifcommonelse % no longer next needed {\currentproject,\currentproduct,% \currentcomponent,\currentenvironment} {\loadedlocalenvironments} {\letvalue{\e!stop\v!localenvironment}\relax} {\grabuntil{\e!stop\v!localenvironment}\gobbleoneargument}} % TH: fixed, was \relax \setvalue{\v!localenvironment}#1 {\doexecutefileonce{#1}} % NOT TOEVOEGEN: \the\everytrace \neverypar=\emptytoks % \appendtoks \flushnotes \to \everypar % \appendtoks \synchronizesidefloats \to \everypar % \appendtoks \checkindentation \to \everypar % \appendtoks \showparagraphnumber \to \everypar % \appendtoks \flushmargincontents \to \everypar % \appendtoks \flushcommentanchors \to \everypar % \appendtoks \synchronizenotes \to \everypar % \appendtoks \flushnotes \to \everydisplay % \appendtoks \adjustsidefloatdisplaylines \to \everydisplay % soon, when pdftex 1.22 is out in the field: \chardef\systemcommandmode\zerocount % 0=unknown 1=disabled 2=enabled \def\checksystemcommandmode {\ifx\pdfshellescape\undefined \else \chardef\systemcommandmode \ifcase\pdfshellescape \plusone \else \plustwo \fi \fi \global\let\checksystemcommandmode\relax} \def\reportsystemcommandmode {\ifcase\systemcommandmode \or \writestatus\m!systems{system commands are disabled}% \or \writestatus\m!systems{system commands are enabled}% \fi} % \ifx\etexversion\undefined \else \ifnum\etexversion<202 % \prependtoks % \writestatus\m!systems{eTeX version \number\etexversion\space -> too old (bugs)}% % \writeline % \to \everyjob % \fi \fi % \ifx\pdftexversion\undefined \else \ifnum\number\pdftexversion<120 % \prependtoks % \writestatus\m!systems{pdfTeX version \number\pdftexversion\space -> please update}% % \writeline % \to \everyjob % \fi \fi % Default-instellingen (verborgen) \resetutilities \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-mat.lua0000644000175000017500000000237211754241457024144 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-mat'] = { version = 1.001, comment = "companion to strc-mat.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local structures = structures local lists = structures.lists local sections = structures.sections local floats = structures.floats local helpers = structures.helpers local formulas = structures.formulas lists.enhancers = lists.enhancers or { } -- maybe we want to do clever things with formulas, the store might go away local formuladata = { } function formulas.store(data) formuladata[#formuladata+1] = data context(#formuladata) end function formulas.current() return formuladata[#formuladata] end function helpers.formulanumber(data,spec) if data then local formulanumber = data.formulanumber if formulanumber then sections.number(data,spec,"formulanumber","formulanumber",'number') end end end function formulas.simplify(entry) return helpers.simplify(table.copy(entry or formuladata[#formuladata])) end function lists.formulanumber(name,n,spec) helpers.formulanumber(lists.result[n]) end context-2013.05.28.20130704/texmf-dist/tex/context/base/node-rul.lua0000644000175000017500000003125612161703335024131 0ustar norbertnorbertif not modules then modules = { } end modules ['node-rul'] = { version = 1.001, comment = "companion to node-rul.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this will go to an auxiliary module -- beware: rules now have a dir field -- -- todo: make robust for layers ... order matters local attributes, nodes, node = attributes, nodes, node local nodecodes = nodes.nodecodes local tasks = nodes.tasks local glyph_code = nodecodes.glyph local disc_code = nodecodes.disc local rule_code = nodecodes.rule function nodes.striprange(first,last) -- todo: dir if first and last then -- just to be sure if first == last then return first, last end while first and first ~= last do local id = first.id if id == glyph_code or id == disc_code then -- or id == rule_code break else first = first.next end end if not first then return nil, nil elseif first == last then return first, last end while last and last ~= first do local id = last.id if id == glyph_code or id == disc_code then -- or id == rule_code break else local prev = last.prev -- luatex < 0.70 has italic correction kern not prev'd if prev then last = last.prev else break end end end if not last then return nil, nil end end return first, last end -- todo: order and maybe other dimensions local floor = math.floor local trace_ruled = false trackers.register("nodes.rules", function(v) trace_ruled = v end) local report_ruled = logs.reporter("nodes","rules") local n_tostring = nodes.idstostring local n_tosequence = nodes.tosequence local a_ruled = attributes.private('ruled') local a_color = attributes.private('color') local a_transparency = attributes.private('transparency') local a_colorspace = attributes.private('colormodel') local insert_node_before = node.insert_before local insert_node_after = node.insert_after local striprange = nodes.striprange local list_dimensions = node.dimensions local hpack_nodes = node.hpack local fontdata = fonts.hashes.identifiers local variables = interfaces.variables local dimenfactor = fonts.helpers.dimenfactor local splitdimen = number.splitdimen local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local whatcodes = nodes.whatcodes local kerncodes = nodes.kerncodes local glyph_code = nodecodes.glyph local disc_code = nodecodes.disc local glue_code = nodecodes.glue local penalty_code = nodecodes.penalty local kern_code = nodecodes.kern local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local rule_code = nodecodes.rule local whatsit_code = nodecodes.whatsit local userskip_code = skipcodes.userskip local spaceskip_code = skipcodes.spaceskip local xspaceskip_code = skipcodes.xspaceskip local dir_code = whatcodes.dir local kerning_code = kerncodes.kern local nodepool = nodes.pool local new_rule = nodepool.rule local new_kern = nodepool.kern local new_glue = nodepool.glue -- we can use this one elsewhere too -- -- todo: functions: word, sentence -- -- glyph rule unset whatsit glue margin_kern kern math disc local checkdir = true -- we assume {glyphruns} and no funny extra kerning, ok, maybe we need -- a dummy character as start and end; anyway we only collect glyphs -- -- this one needs to take layers into account (i.e. we need a list of -- critical attributes) -- omkeren class en level -> scheelt functie call in analyze -- todo: switching inside math local function processwords(attribute,data,flush,head,parent) -- we have hlistdir and local dir local n = head if n then local f, l, a, d, i, class local continue, done, strip, level = false, false, true, -1 while n do local id = n.id if id == glyph_code or id == rule_code then local aa = n[attribute] if aa then if aa == a then if not f then -- ? f = n end l = n else -- possible extensions: when in same class then keep spanning local newlevel, newclass = floor(aa/1000), aa%1000 --~ strip = not continue or level == 1 -- 0 if f then if class == newclass then -- and newlevel > level then head, done = flush(head,f,l,d,level,parent,false), true else head, done = flush(head,f,l,d,level,parent,strip), true end end f, l, a = n, n, aa level, class = newlevel, newclass d = data[class] continue = d.continue == variables.yes end else if f then head, done = flush(head,f,l,d,level,parent,strip), true end f, l, a = nil, nil, nil end elseif f and (id == disc_code or (id == kern_code and n.subtype == kerning_code)) then l = n elseif id == hlist_code or id == vlist_code then if f then head, done = flush(head,f,l,d,level,parent,strip), true f, l, a = nil, nil, nil end local list = n.list if list then n.list = processwords(attribute,data,flush,list,n) end elseif checkdir and id == whatsit_code and n.subtype == dir_code then -- only changes in dir, we assume proper boundaries if f and a then l = n end elseif f then if continue then if id == penalty_code then l = n elseif id == kern_code then l = n elseif id == glue_code then -- catch \underbar{a} \underbar{a} (subtype test is needed) local subtype = n.subtype if continue and n[attribute] and (subtype == userskip_code or subtype == spaceskip_code or subskip == xspaceskip_code) then l = n else head, done = flush(head,f,l,d,level,parent,strip), true f, l, a = nil, nil, nil end end else head, done = flush(head,f,l,d,level,parent,strip), true f, l, a = nil, nil, nil end end n = n.next end if f then head, done = flush(head,f,l,d,level,parent,strip), true end return head, true -- todo: done else return head, false end end nodes.processwords = processwords -- nodes.rules = nodes.rules or { } nodes.rules.data = nodes.rules.data or { } storage.register("nodes/rules/data", nodes.rules.data, "nodes.rules.data") local data = nodes.rules.data function nodes.rules.define(settings) data[#data+1] = settings context(#data) end local a_viewerlayer = attributes.private("viewerlayer") local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but acceptable for this purpose if f.id ~= glyph_code then -- saveguard ... we need to deal with rules and so (math) return head end local r, m if strip then if trace_ruled then local before = n_tosequence(f,l,true) f, l = striprange(f,l) local after = n_tosequence(f,l,true) report_ruled("range stripper, before %a, after %a",before,after) else f, l = striprange(f,l) end end if not f then return head end local w = list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,f,l.next) local method, offset, continue, dy, order, max = d.method, d.offset, d.continue, d.dy, d.order, d.max local rulethickness, unit = d.rulethickness, d.unit local ma, ca, ta = d.ma, d.ca, d.ta local colorspace = ma > 0 and ma or f[a_colorspace] or 1 local color = ca > 0 and ca or f[a_color] local transparency = ta > 0 and ta or f[a_transparency] local foreground = order == variables.foreground local e = dimenfactor(unit,fontdata[f.font]) -- what if no glyph node local rt = tonumber(rulethickness) if rt then rulethickness = e * rulethickness / 2 else local n, u = splitdimen(rulethickness) if n and u then -- we need to intercept ex and em and % and ... rulethickness = n * dimenfactor(u,fontdata[f.font]) / 2 else rulethickness = 1/5 end end if level > max then level = max end if method == 0 then -- center offset = 2*offset m = (offset+(level-1)*dy)*e/2 + rulethickness/2 else m = 0 end for i=1,level do local ht = (offset+(i-1)*dy)*e + rulethickness - m local dp = -(offset+(i-1)*dy)*e + rulethickness + m local r = new_rule(w,ht,dp) local v = f[a_viewerlayer] -- quick hack if v then r[a_viewerlayer] = v end -- if color then r[a_colorspace] = colorspace r[a_color] = color end if transparency then r[a_transparency] = transparency end local k = new_kern(-w) if foreground then insert_node_after(head,l,k) insert_node_after(head,k,r) l = r else head = insert_node_before(head,f,r) insert_node_after(head,r,k) end if trace_ruled then report_ruled("level %a, width %p, height %p, depth %p, nodes %a, text %a", level,w,ht,dp,n_tostring(f,l),n_tosequence(f,l,true)) end end return head end local process = nodes.processwords nodes.rules.handler = function(head) return process(a_ruled,data,flush_ruled,head) end function nodes.rules.enable() tasks.enableaction("shipouts","nodes.rules.handler") end -- elsewhere: -- -- tasks.appendaction ("shipouts", "normalizers", "nodes.rules.handler") -- tasks.disableaction("shipouts", "nodes.rules.handler") -- only kick in when used local trace_shifted = false trackers.register("nodes.shifting", function(v) trace_shifted = v end) local report_shifted = logs.reporter("nodes","shifting") local a_shifted = attributes.private('shifted') nodes.shifts = nodes.shifts or { } nodes.shifts.data = nodes.shifts.data or { } storage.register("nodes/shifts/data", nodes.shifts.data, "nodes.shifts.data") local data = nodes.shifts.data function nodes.shifts.define(settings) data[#data+1] = settings context(#data) end local function flush_shifted(head,first,last,data,level,parent,strip) -- not that fast but acceptable for this purpose if true then first, last = striprange(first,last) end local prev, next = first.prev, last.next first.prev, last.next = nil, nil local width, height, depth = list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,first,next) local list = hpack_nodes(first,width,"exactly") if first == head then head = list end if prev then prev.next, list.prev = list, prev end if next then next.prev, list.next = list, next end local raise = data.dy * dimenfactor(data.unit,fontdata[first.font]) list.shift, list.height, list.depth = raise, height, depth if trace_shifted then report_shifted("width %p, nodes %a, text %a",width,n_tostring(first,last),n_tosequence(first,last,true)) end return head end local process = nodes.processwords nodes.shifts.handler = function(head) return process(a_shifted,data,flush_shifted,head) end function nodes.shifts.enable() tasks.enableaction("shipouts","nodes.shifts.handler") end context-2013.05.28.20130704/texmf-dist/tex/context/base/symb-ini.mkiv0000644000175000017500000002023011754241457024317 0ustar norbertnorbert%D \module %D [ file=symb-ini, %D version=1998.07.20, %D title=\CONTEXT\ Symbol Libraries, %D subtitle=Basic Symbols Commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The macros described here used to be part of the \type %D {core-con} module. I decided to move them here when %D symbolsets saw the light. Let their light shine. \writestatus{loading}{ConTeXt Symbol Libraries / Initialization} \registerctxluafile{symb-ini}{1.001} \unprotect %D \macros %D {definesymbol, symbol} %D %D Converting numbers or levels into a character, romannumeral, %D symbol or something else, is supported by many \CONTEXT\ %D commands. Therefore we need a mechanism for linking such %D numbers to their counterparts. %D %D First we take care of symbols. These are for instance used %D in enumerations and itemizations. We have: %D %D \showsetup{definesymbol} %D \showsetup{symbol} %D %D Symbols are simply linked to a tag. Such tags can be numbers %D or strings. %D %D \starttyping %D \definesymbol [1] [$\bullet$] %D \definesymbol [level 5] [$\star$] %D \stoptyping \installcorenamespace{symbol} \installcorenamespace{symbolset} \let\currentsymbol \empty \let\currentsymbolset\empty \newtoks\t_symb_setups \let\m_symb_current_set\empty \newconditional\c_symb_found \newtoks\everysymbol %D We don't use the commandhandler as symbols have their own %D subsystem for resolving values. \unexpanded\def\definesymbol {\dotripleempty\symb_define} \def\symb_define[#1][#2][#3]% class name meaning {\ifthirdargument \setvalue{\??symbol#1:#2}{#3}% \doifsomething{#1}{\addvalue{\??symbolset#1}{#2}}% \else \setvalue{\??symbol\m_symb_current_set:#1}{#2}% \addvalue{\??symbolset\m_symb_current_set}{#1}% \fi} \letvalue{\??symbolset}\empty \unexpanded\def\doifinsymbolsetelse#1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi} \unexpanded\def\doifinsymbolset #1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi} \unexpanded\def\doifsymbolsetelse #1{\ifcsname\??symbolset#1\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi} \def\symbolset#1{\csname\??symbolset\ifcsname\??symbolset#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, %D since now we simplified things a bit, because the low %D level macros have been sped up every now and then. % We support both: % % Test test \symbol[whatever]\ test \symbol[whatever]. % Test test \symbol{whatever} test \symbol{whatever}. \unexpanded\def\symbol % This one always gobbles spaces, {\dodoubleempty\symb_place} % so never change it again! \def\symb_place % so we also handle \symbol{name} {\iffirstargument % which is nicer with following spaces \expandafter\symb_place_normal \else \expandafter\symb_place_special \fi} \def\symb_place_normal {\ifsecondargument \expandafter\symb_place_normal_a \else \expandafter\symb_place_normal_b \fi} \def\symb_place_normal_a[#1][#2]% {\edef\currentsymbol{#2}% \ifcsname\??symbol#1:#2\endcsname \symb_place_indeed{#1:#2}% \else \symb_place_normal_c \fi} \def\symb_place_normal_b[#1][#2]% {\edef\currentsymbol{#1}% \ifcsname\??symbol\currentsymbolset:#1\endcsname \symb_place_indeed{\currentsymbolset:#1}% \else \symb_place_normal_c \fi} \def\symb_place_normal_c {\setfalse\c_symb_found \the\t_symb_setups \ifconditional\c_symb_found \else \symb_place_retry\currentsymbol % hm, isn't this redundant? \fi} \def\symb_place_special[#1][#2]#3% {\firstargumenttrue \secondargumentfalse \symb_place_normal[#3][]} \def\symb_place_indeed#1% \relax's prevent lookahead problems {\settrue\c_symb_found \begingroup \the\everysymbol \csname\??symbol#1\endcsname\relax \endgroup} \letvalue{\??symbol}\firstofoneargument \def\directsymbol#1#2% no \relax, there can be an argument, see lists {\csname\??symbol\ifcsname\??symbol#1:#2\endcsname#1:#2\fi\endcsname} \unexpanded\def\symb_fetch {\ifconditional\c_symb_found \expandafter\gobbleoneargument \else \expandafter\symb_fetch_indeed \fi} \def\symb_fetch_indeed#1% {\ifcsname\??symbol#1:\currentsymbol\endcsname \symb_place_indeed{#1:\currentsymbol}% \fi} \def\symb_place_retry#1% {\ifcsname\??symbol:#1\endcsname \symb_place_indeed{:#1}% \else #1% \fi} %D \macros %D {definefiguresymbol} %D %D To simplify defining figure symbols, we offer: %D %D \showsetup{definefiguresymbol} %D %D By default, such symbols scale along the current bodyfont %D size or running font size (which is better). \def\defaultsymbolfactor{10} \def\defaultsymbolheight{1.25ex} \unexpanded\def\figuresymbol {\dodoubleempty\symb_figure} \ifdefined\externalfigure \else \def\externalfigure[#1][#2]{#1} \fi \ifdefined\resetexternalfigures \else \let\resetexternalfigures\relax \fi \def\symb_figure[#1][% #2]% {\externalfigure[#1][\c!reset=\v!yes,\c!symbol=\v!yes,\c!height=\defaultsymbolheight,}% #2]} \appendtoks \resetexternalfigures \to \everysymbol \unexpanded\def\definefiguresymbol {\dotripleempty\symb_figure_define} \def\symb_figure_define[#1][#2][#3]% {\ifsecondargument \definesymbol[#1][{\symb_figure[#2][#3]}]% \fi} %D \macros %D {doifsymboldefinedelse} %D %D A handy private one: \def\symb_fetch_first {\ifconditional\c_symb_found \expandafter\gobbleoneargument \else \expandafter\symb_fetch_first_indeed \fi} \def\symb_fetch_first_indeed#1% {\doifinsymbolset{#1}\currentsymbol{\settrue\c_symb_found}} \def\symb_fetch_second#1% {\doifinsymbolset\empty\currentsymbol{\settrue\c_symb_found}} \def\doifsymboldefinedelse#1% {\begingroup \edef\currentsymbol{#1}% \let\symb_fetch\symb_fetch_first \setfalse\c_symb_found \the\t_symb_setups \ifconditional\c_symb_found \endgroup\expandafter\firstoftwoarguments \else \symb_fetch_second\currentsymbol \ifconditional\c_symb_found \endgroup\doubleexpandafter\firstoftwoarguments \else \endgroup\doubleexpandafter\secondoftwoarguments \fi \fi} %D \macros %D {setupsymbolset,startsymbolset} %D %D From these macro definitions one can deduce that symbols can %D be grouped in symbol sets: %D %D \starttyping %D \startsymbolset [navigation 1] %D \definefiguresymbol [Next] [mp-symb.1] %D \definefiguresymbol [Prev] [mp-symb.2] %D \stopsymbolset %D \stoptyping %D %D Such a symbol can be typeset with: %D %D \starttyping %D \setupsymbolset[navigation 1]\symbol[Next] %D \stoptyping %D %D or simply: %D %D \starttyping %D \symbol[navigation 1][Next] %D \stoptyping %D %D Formally: %D %D \showsetup{setupsymbolset} %D \showsetup{startsymbolset} \installcorenamespace{symbolsets} \unexpanded\def\startsymbolset[#1]% {\pushmacro\m_symb_current_set \def\m_symb_current_set{#1}} \unexpanded\def\stopsymbolset {\popmacro\m_symb_current_set} \unexpanded\def\setupsymbolset[#1]% {\edef\currentsymbolset{#1}% \ifcsname\??symbolsets\currentsymbolset\endcsname \else \symb_setup_symbol_set \fi} \def\symb_setup_symbol_set {\normalexpanded{\t_symb_setups{\symb_fetch{\currentsymbolset}\the\t_symb_setups}}% \letvalue{\??symbolsets\currentsymbolset}\empty} % speedup \unexpanded\def\resetsymbolset {\t_symb_setups\emptytoks} \unexpanded\def\forcesymbolset[#1]% {\t_symb_setups{\symb_fetch{#1}}} %D \macros %D {showsymbolset} %D %D \showsetup{showsymbolset} \fetchruntimecommand \showsymbolset {\f!symbolprefix\s!run} %D \macros %D {usesymbols} %D %D \showsetup{usesymbols} \unexpanded\def\usesymbols[#1]{\ctxcommand{usesymbols("#1")}} %D As longs as symbols are linked to levels or numbers, we can %D also use the conversion mechanism, but in for instance the %D itemization macros, we prefer symbols because they can more %D easier be (partially) redefined. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-mov.lua0000644000175000017500000000457211754241457024142 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-mov'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local lpdf = lpdf local nodeinjections = backends.pdf.nodeinjections local pdfannotation_node = nodes.pool.pdfannotation local pdfconstant = lpdf.constant local pdfdictionary = lpdf.dictionary local pdfarray = lpdf.array local write_node = node.write function nodeinjections.insertmovie(specification) -- managed in figure inclusion: width, height, factor, repeat, controls, preview, label, foundname local width = specification.width local height = specification.height local factor = specification.factor or number.dimenfactors.bp local moviedict = pdfdictionary { F = specification.foundname, Aspect = pdfarray { factor * width, factor * height }, Poster = (specification.preview and true) or false, } local controldict = pdfdictionary { ShowControls = (specification.controls and true) or false, Mode = (specification["repeat"] and pdfconstant("Repeat")) or nil, } local action = pdfdictionary { Subtype = pdfconstant("Movie"), Border = pdfarray { 0, 0, 0 }, T = format("movie %s",specification.label), Movie = moviedict, A = controldict, } write_node(pdfannotation_node(width,height,0,action())) -- test: context(...) end function nodeinjections.insertsound(specification) -- rmanaged in interaction: repeat, label, foundname local soundclip = interactions.soundclips.soundclip(specification.label) if soundclip then local controldict = pdfdictionary { Mode = (specification["repeat"] and pdfconstant("Repeat")) or nil } local sounddict = pdfdictionary { F = soundclip.filename } local action = pdfdictionary { Subtype = pdfconstant("Movie"), Border = pdfarray { 0, 0, 0 }, T = format("sound %s",specification.label), Movie = sounddict, A = controldict, } write_node(pdfannotation_node(0,0,0,action())) -- test: context(...) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1257.mkii0000644000175000017500000002654011754241457024432 0ustar norbertnorbert%D \module %D [ file=regi-cp1257, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=cp1257 (Windows Baltic), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for cp1257 input encoding (regime) for Baltic languages, %D see also iso-8859-4 and iso-8859-13. %D %D Usage: %D \type{\enableregime[cp1257]} or \type{\enablereregime[windows-1257]} \startregime[cp1257] \defineactivetoken 128 {\texteuro} % 20AC EURO SIGN \defineactivetoken 129 {\unknownchar} % \defineactivetoken 130 {\quotesinglebase} % 201A SINGLE LOW-9 QUOTATION MARK \defineactivetoken 131 {\unknownchar} % \defineactivetoken 132 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 133 {\textellipsis} % 2026 HORIZONTAL ELLIPSIS \defineactivetoken 134 {\textdag} % 2020 DAGGER \defineactivetoken 135 {\textddag} % 2021 DOUBLE DAGGER \defineactivetoken 136 {\unknownchar} % \defineactivetoken 137 {\perthousand} % 2030 PER MILLE SIGN \defineactivetoken 138 {\unknownchar} % \defineactivetoken 139 {\guilsingleleft} % 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK \defineactivetoken 140 {\unknownchar} % \defineactivetoken 141 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 142 {\textcaron} % 02C7 CARON \defineactivetoken 143 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 144 {\unknownchar} % \defineactivetoken 145 {\quoteleft} % 2018 LEFT SINGLE QUOTATION MARK \defineactivetoken 146 {\quoteright} % 2019 RIGHT SINGLE QUOTATION MARK \defineactivetoken 147 {\quotedblleft} % 201C LEFT DOUBLE QUOTATION MARK \defineactivetoken 148 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 149 {\textbullet} % 2022 BULLET \defineactivetoken 150 {\endash} % 2013 EN DASH \defineactivetoken 151 {\emdash} % 2014 EM DASH \defineactivetoken 152 {\unknownchar} % \defineactivetoken 153 {\trademark} % 2122 TRADE MARK SIGN \defineactivetoken 154 {\unknownchar} % \defineactivetoken 155 {\guilsingleright} % 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK \defineactivetoken 156 {\unknownchar} % \defineactivetoken 157 {\textmacron} % 00AF MACRON \defineactivetoken 158 {\textogonek} % 02DB OGONEK \defineactivetoken 159 {\unknownchar} % \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\unknownchar} % \defineactivetoken 162 {\textcent} % 00A2 CENT SIGN \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 165 {\unknownchar} % \defineactivetoken 166 {\textbrokenbar} % 00A6 BROKEN BAR \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\Ostroke} % 00D8 LATIN CAPITAL LETTER O WITH STROKE \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\Rcommaaccent} % 0156 LATIN CAPITAL LETTER R WITH CEDILLA \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\textlognot} % 00AC NOT SIGN \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\registered} % 00AE REGISTERED SIGN \defineactivetoken 175 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\ostroke} % 00F8 LATIN SMALL LETTER O WITH STROKE \defineactivetoken 185 {\onesuperior} % 00B9 SUPERSCRIPT ONE \defineactivetoken 186 {\rcommaaccent} % 0157 LATIN SMALL LETTER R WITH CEDILLA \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\onequarter} % 00BC VULGAR FRACTION ONE QUARTER \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 190 {\threequarter} % 00BE VULGAR FRACTION THREE QUARTERS \defineactivetoken 191 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 192 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 193 {\Iogonek} % 012E LATIN CAPITAL LETTER I WITH OGONEK \defineactivetoken 194 {\Amacron} % 0100 LATIN CAPITAL LETTER A WITH MACRON \defineactivetoken 195 {\Cacute} % 0106 LATIN CAPITAL LETTER C WITH ACUTE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Aring} % 00C5 LATIN CAPITAL LETTER A WITH RING ABOVE \defineactivetoken 198 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 199 {\Emacron} % 0112 LATIN CAPITAL LETTER E WITH MACRON \defineactivetoken 200 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Zacute} % 0179 LATIN CAPITAL LETTER Z WITH ACUTE \defineactivetoken 203 {\Edotaccent} % 0116 LATIN CAPITAL LETTER E WITH DOT ABOVE \defineactivetoken 204 {\Gcommaaccent} % 0122 LATIN CAPITAL LETTER G WITH CEDILLA \defineactivetoken 205 {\Kcommaaccent} % 0136 LATIN CAPITAL LETTER K WITH CEDILLA \defineactivetoken 206 {\Imacron} % 012A LATIN CAPITAL LETTER I WITH MACRON \defineactivetoken 207 {\Lcommaaccent} % 013B LATIN CAPITAL LETTER L WITH CEDILLA \defineactivetoken 208 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 209 {\Nacute} % 0143 LATIN CAPITAL LETTER N WITH ACUTE \defineactivetoken 210 {\Ncommaaccent} % 0145 LATIN CAPITAL LETTER N WITH CEDILLA \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Omacron} % 014C LATIN CAPITAL LETTER O WITH MACRON \defineactivetoken 213 {\Otilde} % 00D5 LATIN CAPITAL LETTER O WITH TILDE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Uogonek} % 0172 LATIN CAPITAL LETTER U WITH OGONEK \defineactivetoken 217 {\Lstroke} % 0141 LATIN CAPITAL LETTER L WITH STROKE \defineactivetoken 218 {\Sacute} % 015A LATIN CAPITAL LETTER S WITH ACUTE \defineactivetoken 219 {\Umacron} % 016A LATIN CAPITAL LETTER U WITH MACRON \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Zdotaccent} % 017B LATIN CAPITAL LETTER Z WITH DOT ABOVE \defineactivetoken 222 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 225 {\iogonek} % 012F LATIN SMALL LETTER I WITH OGONEK \defineactivetoken 226 {\amacron} % 0101 LATIN SMALL LETTER A WITH MACRON \defineactivetoken 227 {\cacute} % 0107 LATIN SMALL LETTER C WITH ACUTE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\aring} % 00E5 LATIN SMALL LETTER A WITH RING ABOVE \defineactivetoken 230 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 231 {\emacron} % 0113 LATIN SMALL LETTER E WITH MACRON \defineactivetoken 232 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\zacute} % 017A LATIN SMALL LETTER Z WITH ACUTE \defineactivetoken 235 {\edotaccent} % 0117 LATIN SMALL LETTER E WITH DOT ABOVE \defineactivetoken 236 {\gcommaaccent} % 0123 LATIN SMALL LETTER G WITH CEDILLA \defineactivetoken 237 {\kcommaaccent} % 0137 LATIN SMALL LETTER K WITH CEDILLA \defineactivetoken 238 {\imacron} % 012B LATIN SMALL LETTER I WITH MACRON \defineactivetoken 239 {\lcommaaccent} % 013C LATIN SMALL LETTER L WITH CEDILLA \defineactivetoken 240 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 241 {\nacute} % 0144 LATIN SMALL LETTER N WITH ACUTE \defineactivetoken 242 {\ncommaaccent} % 0146 LATIN SMALL LETTER N WITH CEDILLA \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\omacron} % 014D LATIN SMALL LETTER O WITH MACRON \defineactivetoken 245 {\otilde} % 00F5 LATIN SMALL LETTER O WITH TILDE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\uogonek} % 0173 LATIN SMALL LETTER U WITH OGONEK \defineactivetoken 249 {\lstroke} % 0142 LATIN SMALL LETTER L WITH STROKE \defineactivetoken 250 {\sacute} % 015B LATIN SMALL LETTER S WITH ACUTE \defineactivetoken 251 {\umacron} % 016B LATIN SMALL LETTER U WITH MACRON \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\zdotaccent} % 017C LATIN SMALL LETTER Z WITH DOT ABOVE \defineactivetoken 254 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 255 {\textdotaccent} % 02D9 DOT ABOVE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/m-markdown.mkiv0000644000175000017500000000357511754241457024661 0ustar norbertnorbert%D \module %D [ file=x-markdown, %D version=2011.07.19, %D title=\CONTEXT\ Modules, %D subtitle=Processing MarkDown, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Modules / MarkDown Renderer} %D This module deals with markdown which is a document encoding that %D some \CONTEXT\ like much. It reminds me of the kind of minimal coding %D we used before we ran into \TEX\ and were using a somewhat simple %D rendering (pagination, etc) of documents. As I'm no user myself, it %D is up to others to provide documentation and examples. \registerctxluafile{m-markdown}{1.001} \unprotect % basic interface \definebuffer[markdown] \unexpanded\def\stopmarkdown {\ctxlua{moduledata.markdown.typesetbuffer("\thedefinedbuffer{markdown}")}} \unexpanded\def\processmarkdownfile#1% maybe [] or both {\ctxlua{moduledata.markdown.typesetfile("#1")}} \unexpanded\def\markdown#1% maybe [] or both {\ctxlua{moduledata.markdown.typesetstring(\!!bs#1\!!es)}} % commands \defineitemgroup [markdownitemize] \definetyping [markdowntyping] \definetype [markdowntype] \definetype [markdowninlinehtml] \definetyping [markdowndisplayhtml] \definedelimitedtext [markdownblockquote] [quotation] \definehighlight [markdownemphasis] [style=\em] \definehighlight [markdownstrong] [style=\bf] \definestructurelevels [markdown] [\v!chapter, \v!section, \v!subsection, \v!subsubsection, \v!subsubsubsection, \v!subsubsubsubsection] \unexpanded\def\markdownrule {\hairline\par} \protect \continueifinputfile{m-markdown.mkiv} \starttext \startmarkdown % some examples needed \stopmarkdown \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/pack-lyr.mkii0000644000175000017500000006107111754241457024305 0ustar norbertnorbert%D \module %D [ file=pack-lyr, %D version=2000.10.20, %D title=\CONTEXT\ Packaging Macros, %D subtitle=Layers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Packaging Macros / Layers} %D This module is now etex dependent. % todo : first / last / next / +... => page key % test on left/right box when no doublesided option given % use \ifcsname instead of doifvalue \unprotect % When being backgrounds layers get the background offset % displacement. Should be an option, on by default % (compatibility). % positie=forceer == ja maar dan ook in status=herhaal %D The layering mechanism implemented here is independent of %D the output routine, but future extensions may depend on a %D more close cooperation. %D First we overload a macro from \type {core-rul}. From now on %D we accept a (optional) argument: the specific layer it %D will go in. This means that we can move an overlay from one %D background to the other using the dimensions of the parent. %D ! ! ! ! to be documented ! ! ! ! \ifx\undefined\defineoverlay \message{loaded to early} \wait \fi \def\defineoverlay {\dotripleempty\dodefineoverlay} \def\dodefineoverlay[#1][#2][#3]% overlay [layer] content {\ifthirdargument \writestatus{BEWARE}{This (overlay definition) has changed!}% temp \def\docommand##1{\setvalue{\??ov##1}{\setlayer[#2]{\executedefinedoverlay{##1}{#3}}}} \else \def\docommand##1{\setvalue{\??ov##1}{\executedefinedoverlay{##1}{#2}}}% \fi \processcommalist[#1]\docommand} %D When tracing is turned on, a couple of boxes will %D show up as well as the reference point. \newif\iftracelayers % \tracelayerstrue %D This handy constant saved some string memory. \def\@@layerbox{@@layerbox} %D \macros %D {definelayer} %D %D Each layer gets its own (global) box. This also means that %D the data that goes into a layer, is typeset immediately. %D Each layer automatically gets an associated overlay, %D which can be used in any background assignment. % todo : links/rechts \def\definelayer {\dodoubleargument\dodefinelayer} \def\dodefinelayer[#1][#2]% \zeropoint ipv \!!zeropoint {\setuplayer [#1] [\c!doublesided=,\c!preset=, \c!state=\v!start,\c!direction=\v!normal,\c!option=, \c!x=\zeropoint,\c!y=\zeropoint,\c!position=\v!no, \c!line=0,\c!column=0, \c!width=\nextboxwd,\c!height=\nextboxht, \c!offset=\zeropoint,\c!rotation=, % geen 0 ! \c!hoffset=\zeropoint,\c!voffset=\zeropoint, \c!dx=\zeropoint,\c!dy=\zeropoint, \c!location=rb,\c!position=\v!no,\c!page=, \c!method=\v!overlay, \c!sx=1,\c!sy=1,\c!corner=,#2]% \doifvalue{\??ll#1\c!doublesided}\v!yes {\dopresetlayerbox{\v!left #1}% \dopresetlayerbox{\v!right#1}}% \dopresetlayerbox{#1}% \defineoverlay[#1][\composedlayer{#1}]} \def\dopresetlayerbox#1% {\ifundefined{\@@layerbox#1}% \expandafter\newbox\csname\@@layerbox#1\endcsname \else \resetlayer[#1]% \fi} %D \macros %D {setuplayer} %D %D After a layer is defined, you can change its %D characteristics. \def\setuplayer {\dodoubleargument\dosetuplayer} \def\dosetuplayer[#1][#2]% {\def\docommand##1{\getparameters[\??ll##1][#2]}% \processcommalist[#1]\docommand} %D \macros %D {setlayer} %D %D Data is moved into a layer with the following macro. When %D \type {position} is set, relative positioning is used, with %D the current point as reference point. Otherwise the topleft %D corner is used as reference point. %D %D \starttyping %D \setlayer [identifier] [optional parameters] {data} %D \stoptyping \newcount\currentlayerdata \let\currentlayerwidth \!!zeropoint \let\currentlayerheight\!!zeropoint \def\setcurrentlayerdimensions {\dodoubleempty\dosetcurrentlayerdimensions} \def\dosetcurrentlayerdimensions[#1][#2]% name left|right {\edef\currentlayerwidth {\thelayerwidth {#2#1}}% \edef\currentlayerheight{\thelayerheight{#2#1}}} \def\thelayerwidth #1{\the\wd\executeifdefined{\@@layerbox#1}\emptybox} \def\thelayerheight#1{\the\ht\executeifdefined{\@@layerbox#1}\emptybox} \def\setlayer {\dotripleempty\dosetlayer} \def\dosetlayer[#1][#2][#3]% #4 == box do \fi is ok {\doifelsevalue{\??ll#1\c!state}\v!stop {\dowithnextbox\donothing\hbox} {\ifthirdargument \dodosetlayer[#1][#2][#3]% \else \doifassignmentelse{#2} {\dodosetlayer[#1][][#2]}% {\dodosetlayer[#1][#2][]}% \fi}} \def\dodosetlayer[#1][#2][#3]% #2 = links/rechts {\bgroup \recalculatebackgrounds \recalculatelogos \global\advance\currentlayerdata\plusone \forgetall \dontcomplain \doifvalue{\??ll#1\c!option}\v!test\tracelayerstrue \iftracelayers\traceboxplacementtrue\fi \dowithnextbox % sneller als aparte macro {\ifcsname\@@layerbox#1\endcsname % nb: odd/even discard, left/right not \edef\@@layerloc{#2}% \ifx\@@layerloc\v!even \ifodd\realpageno % discard nextbox \else \dododosetlayer[#1][\v!left][#3]% \fi \else\ifx\@@layerloc\v!odd \ifodd\realpageno \dododosetlayer[#1][\v!right][#3]% %\else % discard nextbox \fi \else \dododosetlayer[#1][#2][#3]% \fi\fi \else \writestatus{layer}{unknown layer #1}% \fi \egroup}% \hbox} \newbox\layerbox \newdimen\@@layerxsiz \newdimen\@@layerysiz \newdimen\@@layerxoff \newdimen\@@layeryoff \newdimen\@@layerxpos \newdimen\@@layerypos \let\lastlayerxpos\!!zeropoint \let\lastlayerypos\!!zeropoint \let\lastlayerwd \!!zeropoint \let\lastlayerht \!!zeropoint \let\lastlayerdp \!!zeropoint % todo left/right \def\setlastlayerpos#1% {\edef\layerpage{\MPp{lyr:\the\currentlayerdata}}% \xdef\lastlayerxpos{\the\dimexpr-\MPx{lyr:#1:\layerpage}+\MPx{lyr:\the\currentlayerdata}\relax}% \xdef\lastlayerypos{\the\dimexpr \MPy{lyr:#1:\layerpage}-\MPy{lyr:\the\currentlayerdata}\relax}} \def\definelayerpreset {\dodoubleargument\dodefinelayerpreset} % \def\dodefinelayerpreset[#1][#2]% % {\setvalue{\??ll\??ll#1}{\dopresetlayer{#2}}} % % more fun: \definelayerpreset[whatever][lefttop] \def\dodefinelayerpreset[#1][#2]% {\doifassignmentelse{#2} {\setvalue{\??ll\??ll#1}{\dopresetlayer{#2}}} {\setvalue{\??ll\??ll#1}{\getvalue{\??ll\??ll#2}}}} \def\dopresetlayer#1#2#3% #1=list #2=tag #3=list {\getparameters[\??ll#2][#1,#3]} \letempty\currentlayer \def\layerparameter#1{\csname\??ll\currentlayer#1\endcsname} \newdimen\layerwidth \newdimen\layerheight \chardef\@@lacome=1 % LAyerCOnstructionMEthod / temp, will be default \def\dododosetlayer[#1][#2][#3]% will be sped up {% we use the global width, never change this \def\currentlayer{#1}% \@@layerxsiz\layerparameter\c!width \@@layerysiz\layerparameter\c!height \layerwidth \@@layerxsiz \layerheight\@@layerysiz % preroll \getparameters[\??ll\currentlayer][#3]% % presets and real roll % maybe todo: % \doif{\layerparameter\c!method}\v!fit % {\@@layerxsiz\thelayerwidth \currentlayer % \@@layerysiz\thelayerheight\currentlayer % \layerwidth \@@layerxsiz % \layerheight\@@layerysiz % }% % etc \executeifdefined{\??ll\??ll\layerparameter\c!preset}\gobbletwoarguments\currentlayer{#3}% % that was real slow \doif{\layerparameter\c!position}\v!overlay % slow, use \dosetvalue instead {\getparameters[\??ll\currentlayer][\c!width=\zeropoint,\c!height=\zeropoint,\c!position=\v!yes]}% \doifsomething{\layerparameter\c!rotation} {\setbox\nextbox\hbox {\rotate % to be checked with new rotation [\c!location=\v!high,\c!rotation=\layerparameter\c!rotation] {\flushnextbox}}}% % no, not local % \@@layerxsiz\layerparameter\c!width % \@@layerysiz\layerparameter\c!height % never change that \@@layerxpos\layerparameter\c!x \@@layerypos\layerparameter\c!y \doifelse{\layerparameter\c!hoffset}\v!max {\@@layerxoff\@@layerxsiz}{\@@layerxoff\layerparameter\c!hoffset}% \doifelse{\layerparameter\c!voffset}\v!max {\@@layeryoff\@@layerysiz}{\@@layeryoff\layerparameter\c!voffset}% % dx/dy are internal context ones and can be used in preset \advance\@@layerxoff\dimexpr\layerparameter\c!offset+\layerparameter\c!dx\relax \advance\@@layeryoff\dimexpr\layerparameter\c!offset+\layerparameter\c!dy\relax \@@layerxpos\layerparameter\c!sx\@@layerxpos \@@layerypos\layerparameter\c!sy\@@layerypos \@@layerxoff\layerparameter\c!sx\@@layerxoff \@@layeryoff\layerparameter\c!sy\@@layeryoff \doifelse{\layerparameter\c!position}\v!yes % combine ^ {\setlastlayerpos{#2\currentlayer}% todo l/r %%%%%%%%%%%% \@@layerxpos\lastlayerxpos \@@layerypos\lastlayerypos \letgvalue{\??ll\currentlayer\layerpage\c!position}\v!yes \letgvalue{\??ll\currentlayer\c!state}\v!start % needed ? \setbox\layerbox\vbox to \@@layerysiz {\hbox to \@@layerxsiz{\xypos{lyr:\the\currentlayerdata}\hss}\vss}} {\setbox\layerbox\emptybox \globallet\lastlayerxpos\!!zeropoint \globallet\lastlayerypos\!!zeropoint \ExpandBothAfter\doifinset\v!bottom{\layerparameter\c!corner} {\ifnum\layerparameter\c!line=\zerocount\else % can be < 0 \setevalue{\??ll\currentlayer\c!line}% {\the\numexpr-\layerparameter\c!line+\layoutlines+\plusone\relax}% \fi \ifdim\@@layerysiz>\zeropoint \advance\@@layerypos-\@@layerysiz \@@layerypos-\@@layerypos \@@layeryoff-\@@layeryoff \fi}% \ExpandBothAfter\doifinset\v!right{\layerparameter\c!corner} {\ifnum\layerparameter\c!column=\zerocount\else % can be < 0 \setevalue{\??ll\currentlayer\c!column}% {\the\numexpr-\layerparameter\c!column+\layoutcolumns+\plusone\relax}% \fi \ifdim\@@layerxsiz>\zeropoint \advance\@@layerxpos-\@@layerxsiz \@@layerxpos-\@@layerxpos \@@layerxoff-\@@layerxoff \fi}% \ExpandBothAfter\doif\v!middle{\layerparameter\c!corner} {\ifdim\@@layerxsiz>\zeropoint \advance\@@layerxpos.5\@@layerxsiz \fi \ifdim\@@layerysiz>\zeropoint \advance\@@layerypos.5\@@layerysiz \fi}% \edef\layerpage{\layerparameter\c!page}}% \doifsomething\layerpage {\edef\layerpage{:\layerpage}% \doifundefined{\@@layerbox#2\currentlayer\layerpage} {\global\expandafter\newbox\csname\@@layerbox#2\currentlayer\layerpage\endcsname}}% \dontcomplain % more comfortable \mathchardef\layerpagebox\csname\@@layerbox#2\currentlayer\layerpage\endcsname \ifvoid\layerpagebox \gsetboxllx\layerpagebox\zeropoint \gsetboxlly\layerpagebox\zeropoint \fi \global\setbox\layerpagebox\vbox %to \layerparameter\c!height % new, otherwise no negative y possible {\offinterlineskip %postpone, to after nextboxwd correction % \hsize\layerparameter\c!width % new, keep box small %\ifvoid\csname\@@layerbox\currentlayer\layerpage\endcsname\else % why not #2#1 \ifvoid\layerpagebox \let\lastlayerwidth \zeropoint \let\lastlayerheight\zeropoint \else \edef\lastlayerwidth {\the\wd\layerpagebox}% \edef\lastlayerheight{\the\ht\layerpagebox}% \ht\layerpagebox\zeropoint \dp\layerpagebox\zeropoint \wd\layerpagebox\zeropoint \doifnot{\layerparameter\c!direction}\v!reverse{\box\layerpagebox}% \fi % don't move \xdef\lastlayerwd{\the\nextboxwd}% \xdef\lastlayerht{\the\nextboxht}% % not entirely ok when grid ! \xdef\lastlayerdp{\the\nextboxdp}% % not entirely ok when grid ! % this code \doifelse{\layerparameter\c!location}\v!grid\donetrue\donefalse \ifdone \nextboxht\strutheight \nextboxdp\strutdepth \else \setbox\nextbox\hbox{\alignedbox[\layerparameter\c!location]\vbox{\flushnextbox}}% \fi \ifnum\layerparameter\c!line=\zerocount\else % no \ifcase, can be negative \advance\@@layerypos\dimexpr\layerparameter\c!line\lineheight+\topskip-\lineheight-\nextboxht\relax \fi \ifnum\layerparameter\c!column=\zerocount\else % no \ifcase, can be negative \advance\@@layerxpos\layoutcolumnoffset{\layerparameter\c!column}% \fi \ifdone \setbox\nextbox\hbox{\alignedbox[rb]\vbox{\flushnextbox}}% \fi % ll registration \scratchdimen\@@layerxpos \advance\scratchdimen\@@layerxoff \ifdim\scratchdimen<\getboxllx\layerpagebox \gsetboxllx\layerpagebox\scratchdimen \fi \ifcase\@@lacome\or % this test will become obsolete \advance\scratchdimen\nextboxwd \nextboxwd\ifdim\scratchdimen>\lastlayerwidth \scratchdimen \else \lastlayerwidth \fi \fi \scratchdimen\@@layerypos \advance\scratchdimen\@@layeryoff \ifdim\scratchdimen<\getboxlly\layerpagebox \gsetboxlly\layerpagebox\scratchdimen \fi % ll compensation \ifcase\@@lacome\or % this test will become obsolete \advance\scratchdimen\dimexpr\nextboxht+\nextboxdp\relax \nextboxht\ifdim\scratchdimen>\lastlayerheight \scratchdimen \else \lastlayerheight \fi \nextboxdp\zeropoint \fi % placement \hsize\layerparameter\c!width % new, keep box small \vbox to \layerparameter\c!height \bgroup \smashbox\nextbox \vskip\dimexpr\@@layerypos+\@@layeryoff\relax \hskip\dimexpr\@@layerxpos+\@@layerxoff\relax \flushnextbox \ifvoid\layerpagebox % already flushed \else % the reverse case % check ! \vskip-\dimexpr\@@layerypos+\@@layeryoff\relax \box\layerpagebox \fi \egroup}% % when position is true, the layerbox holds the compensation and needs % to be placed; never change this ! \ifvoid\layerbox\else\box\layerbox\fi} %D Given the task to be accomplished, the previous macro is %D not even that complicated. It mainly comes down to skipping %D to the right place and placing a box on top of or below the %D existing content. In the case of position tracking, another %D reference point is chosen. %D \macros %D {doifelselayerdata} %D \def\doifelselayerdata#1% {\ifundefined{\@@layerbox#1}% \@EA\secondoftwoarguments \else\ifvoid\csname\@@layerbox#1\endcsname \@EAEAEA\secondoftwoarguments \else \@EAEAEA\firstoftwoarguments \fi\fi} %D \macros %D {flushlayer} %D %D When we flush a layer, we flush both the main one and the %D page dependent one (when defined). This feature is more %D efficient in \ETEX\ since there testing for an undefined %D macro does not takes hash space. % todo: setups before flush, handy hook \unexpanded\def\flushlayer[#1]% {\doifelsevalue{\??ll#1\c!state}\v!next {\global\letvalue{\??ll#1\c!state}\v!start} % dangerous, stack-built-up {\doifelsevalue{\??ll#1\c!state}\v!continue {\global\letvalue{\??ll#1\c!state}\v!repeat} % dangerous, stack-built-up {\doifelsevalue{\??ll#1\c!doublesided}\v!yes {\doifundefinedelse{\@@layerbox#1}% {\dodoflushlayerA[#1]} {\doifbothsidesoverruled {\dodoflushlayerB\v!left [#1]}% left {\dodoflushlayerB\v!right[#1]}% right {\dodoflushlayerB\v!left [#1]}}}% left {\dodoflushlayerA[#1]}}}} \def\dodoflushlayerA[#1]% {\doifnotvalue{\??ll#1\c!state}\v!stop {\startoverlay {\dodoflushlayer1{#1}{#1}} {\dodoflushlayer0{#1}{#1:\realfolio}} \stopoverlay}} \def\dodoflushlayerB#1[#2]% {\doifnotvalue{\??ll#2\c!state}\v!stop {\startoverlay {\dodoflushlayer1{#2}{#2}} {\dodoflushlayer0{#2}{#2:\realfolio}} {\dodoflushlayer1{#2}{#1#2}} {\dodoflushlayer0{#2}{#1#2:\realfolio}} \stopoverlay}} \def\dodoflushlayer#1#2#3% {\ifundefined{\@@layerbox#3}% \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi \else \bgroup \forgetall \offinterlineskip % needed because we need to handle method \executeifdefined{\??ll\??ll\getvalue{\??ll#2\c!preset}}\gobbletwoarguments{#2}{}% % \doifvalue{\??ll#2\c!option}\v!test\tracelayerstrue \iftracelayers\traceboxplacementtrue\fi \!!doneafalse \!!donebfalse \doifvalue{\??ll#2\c!method}\v!overlay\!!doneatrue \doifvalue{\??ll#2\c!method}\v!fit\!!donebtrue \!!donectrue \ifcase#1\else \doifnotvalue{\??ll#2\c!position}\v!yes {\doifvalue{\??ll#2\c!repeat}\v!yes\!!donecfalse \doifvalue{\??ll#2\c!state}\v!repeat\!!donecfalse}% \fi \mathchardef\layerbox\csname\@@layerbox#3\endcsname % we need to copy in order to retain the negative offsets for a next % stage of additions, i.e. llx/lly accumulate in repeat mode and the % compensation may differ each flush depending on added content \setbox\nextbox \if!!doneb % \vbox % {\scratchdimen\getboxlly\layerbox % \vskip-\scratchdimen % \scratchdimen\getboxllx\layerbox % \hskip-\scratchdimen % \advance\scratchdimen-\wd\layerbox % \hsize-\scratchdimen % \if!!donec\box\else\copy\fi\layerbox}% \vbox {\vskip-\getboxlly\layerbox \hskip-\getboxllx\layerbox \hsize-\dimexpr\getboxllx\layerbox-\wd\layerbox\relax \if!!donec\box\else\copy\fi\layerbox}% \else \if!!donec\box\else\copy\fi\layerbox % sorry for the delay due to copying \fi % todo: method=offset => overlayoffset right/down (handy for backgrounds with offset) \iftracelayers \ruledvbox \else \vbox \fi \if!!donea to \overlayheight \fi {\hbox \if!!donea to \overlaywidth \fi {% klopt dit? #3 en niet #2 ? \doifvalue{\??ll#3\realfolio\c!position}\v!yes{\xypos{lyr:#3:\realfolio}}% \doifoverlayelse{#3} {\box\nextbox} {\startlayoutcomponent{l:#3}{layer #3}\box\nextbox\stoplayoutcomponent}% \hss}% \vss}% \if!!donec \gsetboxllx\layerbox\zeropoint \gsetboxlly\layerbox\zeropoint \fi \egroup \fi} % \definelayer[test][method=fit] \setupcolors[state=start] \tracelayerstrue % % \framed[framecolor=red,offset=overlay]{\setlayer[test]{aa}\setlayer[test][x=10pt]{g}\flushlayer[test]} % \framed[framecolor=red,offset=overlay]{\setlayer[test]{aa}\setlayer[test][x=-10pt]{bb}\flushlayer[test]} % \framed[framecolor=red,offset=overlay]{\setlayer[test][x=-20pt]{cccccc}\flushlayer[test]} % \framed[framecolor=red,offset=overlay]{\setlayer[test]{dd}\setlayer[test][x=-20pt,y=-3pt]{eeeeee}\flushlayer[test]} %D \macros %D {composedlayer,placelayer,tightlayer} %D %D This is a handy shortcut, which saves a couple of braces %D when we use it as parameter. This name also suits better %D to other layering commands. \def\composedlayer#1{\flushlayer[#1]} \let\placelayer\flushlayer \def\tightlayer[#1]% {\hbox {\def\currentlayer{#1}% todo: left/right \setbox\nextbox\emptybox % hoogte/breedte are \wd\nextbox/\ht\nextbox \hsize\layerparameter\c!width % \overlaywidth = \hsize \vsize\layerparameter\c!height % \overlaywheight = \vsize \composedlayer{#1}}} %D \macros %D {resetlayer} %D %D This macro hardly needs an explanation (and is seldom %D needed as well). \def\doresetlayer#1% {\ifundefined{\@@layerbox#1}\else \global\setbox\csname\@@layerbox#1\endcsname\emptybox \fi} \def\resetlayer[#1]% {\doresetlayer{#1}% \doifvalue{\??ll#1\c!doublesided}\v!yes % kind of redundant test {\doresetlayer{\v!left #1}% \doresetlayer{\v!right#1}}% \doresetlayer{#1:\realfolio}} %D \macros %D {setMPlayer} %D %D The following layer macro uses the positions that are %D registered by \METAPOST. %D %D \starttyping %D \definelayer[test] %D %D \setMPlayer [test] [somepos-1] {Whatever we want here!} %D \setMPlayer [test] [somepos-2] {Whatever we need there!} %D \setMPlayer [test] [somepos-3] {\externalfigure[cow.mps][width=2cm]} %D %D \startuseMPgraphic{oeps} %D draw fullcircle scaled 10cm withcolor red ; %D register ("somepos-1",2cm,3cm,center currentpicture) ; %D register ("somepos-2",8cm,5cm,(-1cm,-2cm)) ; %D register ("somepos-3",0cm,0cm,(-2cm,2cm)) ; %D \stopuseMPgraphic %D %D \getMPlayer[test]{\useMPgraphic{oeps}} %D \stoptyping %D %D The last line is equivalent to %D %D \starttyping %D \framed %D [background={foreground,test},offset=overlay] %D {\useMPgraphic{oeps}} %D \stoptyping \def\setMPlayer {\dotripleempty\dosetMPlayer} \def\MPlayerwidth {\hsize} \def\MPlayerheight{\vsize} \def\dosetMPlayer[#1][#2][#3]% {\checkpositions % new, else only support after \starttext \edef\MPlayerwidth {\MPw{#2}}% \edef\MPlayerheight{\MPh{#2}}% \setlayer[#1][\c!x=\MPx{#2},\c!y=\MPy{#2},\c!position=\v!no,#3]} \def\getMPlayer {\dodoubleempty\dogetMPlayer} \def\dogetMPlayer[#1][#2]% {\framed [\c!background={\v!foreground,#1}, \c!frame=\v!off, \c!offset=\v!overlay,#2]} % Some day this (old) mechanism will be combined/integrated % in overlays \newskip\xposition \newskip\yposition \newskip\xdimension \newskip\ydimension \newskip\xoffset \newskip\yoffset % already defined \newbox\positionbox \def\startpositioning {\bgroup \xposition \zeropoint \yposition \zeropoint \xdimension\zeropoint \ydimension\zeropoint \xoffset \zeropoint \yoffset \zeropoint \hfuzz \paperwidth \vfuzz \paperheight \setbox\positionbox\hbox\bgroup} \def\stoppositioning {\doifnot\@@psoffset\v!yes {\global\xoffset\zeropoint \global\yoffset\zeropoint}% \global\advance\xdimension \xoffset \global\advance\ydimension \yoffset \egroup \vbox to \ydimension {\vskip\yoffset \hbox to \xdimension {\hskip\xoffset \box\positionbox \hfill} \vfill}% \egroup} \def\resetpositioning {\getparameters[\??ps] [\c!state=\v!start,% \c!unit=\s!cm,% \c!factor=1,% \c!scale=1,% \c!xfactor=\@@psfactor,% \c!yfactor=\@@psfactor,% \c!xscale=\@@psscale,% \c!yscale=\@@psscale,% \c!xstep=\v!absolute,% \c!ystep=\v!absolute,% \c!xoffset=\!!zeropoint,% \c!yoffset=\!!zeropoint]} \def\setuppositioning {\resetpositioning \dodoubleargument\getparameters[\??ps]} \def\calculateposition#1#2#3#4#5#6#7#8#9% {\setdimensionwithunit\scratchskip{#1}\@@psunit \scratchskip#8\scratchskip \scratchskip#9\scratchskip \advance\scratchskip #4\relax \doif{#2}\v!relative {\advance\scratchskip #3% \let#4\!!zeropoint}% #3\scratchskip\relax \doifnot\@@psstate\v!overlay {\scratchskip#5\relax \advance\scratchskip #3\relax \ifdim#3<-#7\relax \global#7-#3\relax \fi \ifdim\scratchskip>#6\relax \global#6\scratchskip\relax \fi}} \def\position {\dosingleempty\doposition} \def\doposition[#1]#2(#3,#4)% {\dowithnextbox {\bgroup \getparameters[\??ps][#1]% \dontcomplain \calculateposition{#3}\@@psxstep\xposition \@@psxoffset{\nextboxwd}\xdimension\xoffset \@@psxscale\@@psxfactor \scratchdimen\nextboxht \advance\scratchdimen \nextboxdp \calculateposition{#4}\@@psystep\yposition \@@psyoffset\scratchdimen\ydimension\yoffset \@@psyscale\@@psyfactor \vbox to \zeropoint % kan beter. {\vskip\yposition \hbox to \zeropoint {\hskip\xposition \flushnextbox \hss} \vss}% \xdef\dopoppositioning {\xposition\the\xposition \yposition\the\yposition \noexpand\def\noexpand\@@psxoffset{\@@psxoffset}% \noexpand\def\noexpand\@@psyoffset{\@@psyoffset}}% \egroup \dopoppositioning \ignorespaces} \hbox} \resetpositioning \setuppositioning [\c!unit=\s!cm, \c!factor=1, \c!scale=1, \c!xstep=\v!absolute, \c!ystep=\v!absolute, \c!offset=\v!yes, \c!xoffset=\!!zeropoint, \c!yoffset=\!!zeropoint] %D Watch out, a redefinition: \ifx\settextpagecontent\undefined \writestatus\m!systems{error in page-lyr.tex} \wait \fi \let\normalsettextpagecontent\settextpagecontent \definelayer [OTRTEXT] \setuplayer [OTRTEXT] [\c!width=\innermakeupwidth, \c!height=\textheight] % will be overloaded in page-spr \def\settextpagecontent#1#2#3% #2 and #3 will disappear {\doifelselayerdata{OTRTEXT} {\setbox#1\hbox to \makeupwidth {\startoverlay {\tightlayer[OTRTEXT]} % first, otherwise problems with toc {\normalsettextpagecontent{#1}{#2}{#3}\box#1} \stopoverlay}% \dp#1\zeropoint}% {\normalsettextpagecontent{#1}{#2}{#3}}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-pln.mkii0000644000175000017500000000456511244221744024270 0ustar norbertnorbert%D The following bunch of macros come from plain \TEX\ by %D Don Knuth and deal with basic alignment. We just include %D them here so that they can be used if needed. Normally, %D \CONTEXT\ users will fall back on one of the three table %D environments. %D %D The hidden names are somewhat adapted and we use other %D local variables. \writestatus{loading}{ConTeXt Table Macros / Plain Tabular} \unprotect \newif \if@@plnusetab \newif \if@@plncr \newbox \@@plntabs \newbox \@@plntabsyet \newbox \@@plntabsdone \newdimen \@@plntabdimen \def\cleartabs % visible {\global\setbox\@@plntabsyet\null \setbox\@@plntabs\null} \def\settabs % visible {\setbox\@@plntabs\null \futurelet\next\@@plnsettabs} \def\tabalign % visible {\@@plnusetabtrue\@@plnmaketabbox} \let\+\tabalign % no outer here (can be overloaded) \def\@@plnsettabs {\ifx\next\+% \def\nxt{\afterassignment\@@plnsettab\let\nxt}% \else \let\nxt\@@plnsetcols \fi \let\next\relax \nxt} \def\@@plnsettab {\let\nxt\relax \@@plnusetabfalse\@@plnmaketabbox} \def\@@plnsetcols#1\columns {\scratchcounter#1% \@@plntabdimen\hsize \loop \ifnum\scratchcounter>\zerocount \@nother \repeat} \def\@nother {\scratchdimen\@@plntabdimen \divide\scratchdimen\scratchcounter \setbox\@@plntabs\hbox{\hbox to\scratchdimen{}\unhbox\@@plntabs}% \advance\@@plntabdimen-\scratchdimen \advance\scratchcounter\minusone} \def\@@plnmaketabbox {\begingroup \global\setbox\@@plntabsyet\copy\@@plntabs \global\setbox\@@plntabsdone\null \def\cr {\@@plncrtrue\crcr\egroup\egroup \if@@plnusetab\unvbox\zerocount\lastbox\fi\endgroup \setbox\@@plntabs\hbox{\unhbox\@@plntabsyet\unhbox\@@plntabsdone}}% \setbox\zerocount\vbox\bgroup\@@plncrfalse \ialign\bgroup&\@@plnbegintabbox##\@@plnendtabbox\crcr} \def\@@plnbegintabbox {\setbox\zerocount\hbox\bgroup} \def\@@plnendtabbox {\if@@plncr \egroup % now \box\zerocount holds the column \else \hss\egroup \global\setbox\@@plntabsyet\hbox {\unhbox\@@plntabsyet\global\setbox\plusone\lastbox}% now \box\plusone holds its size \ifvoid\plusone \global\setbox\plusone\hbox to\wd\zerocount{}% \else \setbox\zerocount\hbox to\wd\plusone{\unhbox\zerocount}% \fi \global\setbox\@@plntabsdone\hbox{\box\plusone\unhbox\@@plntabsdone}% \fi \box\zerocount} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-nl.mkiv0000644000175000017500000000102011754241457024136 0ustar norbertnorbert%D \module %D [ file=cont-nl, %D version=1997.08.19, %D title=\CONTEXT, %D subtitle=\CONTEXT\ Dutch Format Generation, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \catcode`\{=1 \catcode`\}=2 \def\defaultinterface {dutch} \def\defaultlanguagetag{nl} \input context.mkiv \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-com.mkii0000644000175000017500000000156411754241457024264 0ustar norbertnorbert%D \module %D [ file=enco-com, %D version=2000.20.12, % split from base file %D title=\CONTEXT\ Encoding Macros, %D subtitle=Composed Characters Commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Here we map some \quote {short} names onto the more %D verbose glyph names. \def\AA{\Aring} \def\aa{\aring} \def\AE{\AEligature} \def\ae{\aeligature} \def\CC{\Ccedilla} \def\cc{\ccedilla} \def \L{\Lstroke} \def \l{\lstroke} \def \O{\Ostroke} \def \o{\ostroke} \def\OE{\OEligature} \def\oe{\oeligature} \def\SZ{\Ssharp} \def\sz{\ssharp} \def\SS{\ssharp} \def\IJ{\IJligature} \def\ij{\ijligature} \def \i{\dotlessi} \def \j{\dotlessj} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-pictex.tex0000644000175000017500000002102211754241457024150 0ustar norbertnorbert%D \module %D [ file=m-pictex, %D version=1997.01.15, %D title=\CONTEXT\ Extra Modules, %D subtitle=\PICTEX\ Loading Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is one big hack. This hack is not needed when %D using \ETEX, so there we simply load \PICTEX\ and quit. %D Not every package defines \type{\fiverm}, \PICTEX's pixel, %D so let's take care of that omision here. The actual loading %D of \PICTEX\ depends on the package. For \LATEX\ users we %D take care of loading the auxiliary ones too. \def\loadpictex {\ifx\grid\undefined \else \let\normalgrid\grid \fi \ifx\axis\undefined \else \let\normalaxis\axis \fi \ifx\undefined\fiverm \font\fiverm=cmr5 \fi \ifx\beginpicture\undefined \ifx\newenvironment\undefined \loadmarkfile{thrd-pic}% \else \input prepictex.tex \relax \input pictex.tex \relax \input postpictex.tex \relax \fi \fi \ifx\normalgrid\undefined \else \let\pictexgrid\grid \let\grid\normalgrid \fi \ifx\normalaxis\undefined \else \let\pictexaxis\axis \let\axis\normalaxis \fi} \ifx\eTeXversion\undefined \else \loadpictex \expandafter \endinput \fi %D When not in \ETEX\ and not in \CONTEXT, we load a few %D auxiliary macros. \ifx \undefined \writestatus \input supp-mis.tex \relax \fi \unprotect %D \TEX\ provides 256 \DIMENSIONS\ and 256 \SKIPS. In \CONTEXT\ %D this is no problem, but in packages that have many %D authors, one can be quite sure that a lot of \DIMENSIONS\ are %D allocated. Packages that use \PICTEX\ can therefore run out %D of \DIMENSIONS\ quite fast. This module was written as a %D reaction to persistent problems with loading \PPCHTEX\ in %D \LATEX\ and \PICTEX\ deserves a solution. I therefore %D dedicate this module to Tobias Burnus and Dirk Kuypers, who %D use \PPCHTEX\ in a \LATEX\ environment and suggested a lot %D of extensions to the repertoire of \PPCHTEX\ commands. %D %D This module presents a solution that is quite effective: all %D \DIMENSIONS\ are drawn from the pool of \DIMENSIONS\ and %D \SKIPS, depending on the availability. This is possible %D because \DIMENSIONS\ are \SKIPS\ without a glue component. %D Therefore we can use \SKIPS\ as \DIMENSIONS. However, some %D incompatibility can result from assignments that look like: %D %D \starttyping %D \somedimen=\someskip %D \stoptyping %D %D In such cases the \DIMENSION\ equals the fixed part of the %D \SKIP\ or in other words: this assignment strips off the %D glue. Because \PICTEX\ uses no glue components, I thought %D I could interchange both register types without problems, %D but alas, this didn't hold for all \DIMENSIONS. %D In \PLAIN\ \TEX\ the allocation macros are defined with (as) %D \type{\outer}. This means that they cannot appear inside %D macros, not even in an indirect way. We therefore have to %D redefine both \type{\newdimen} and \type{\newskip} to %D non||\type{\outer} alternatives. In most macro packages this %D redefinition already took place. We save the original %D meanings, so we can restores them afterwards. % \def\temporarynewdimen {\alloc@1\dimen\dimendef\insc@unt} % \def\temporarynewskip {\alloc@2\skip \skipdef \insc@unt} \let\normalnewdimen \newdimen \let\normalnewskip \newskip \let\temporarynewdimen\newdimen \let\temporarynewskip \newskip %D Here comes the trick. Depending on how many \DIMENSIONS\ and %D \SKIPS\ are allocated, the \type{\newdimen} assigns a %D \DIMENSIONS\ or \SKIP. \PLAIN\ \TEX\ allocates 15 \DIMENSIONS\ %D and 17 \SKIPS. After loading \PICTEX, 71 \DIMENSIONS\ and %D and 71 \SKIPS\ are allocated. Indeed, \PICTEX\ needs 110 %D \DIMENSIONS ! %D %D \starttyping %D \def\newdimen %D {\ifnum\count11>\count12 %D \let\next\temporarynewskip %D \else %D \let\next\temporarynewdimen %D \fi %D \next} %D \stoptyping %D %D When I was testing a new version of \PPCHTEX\ in \PLAIN\ %D \TEX\ I had to find out that this exchange of registers %D sometimes leads to unwanted results. It took me some hours %D to find out that the source of errors originated in %D constructions like: %D %D \starttyping %D \ifdim\DimenOne<\DimenTwo whatever you want \else or not \fi %D \stoptyping %D %D When \type{\DimenOne} is a \SKIP\ and \type{\DimenTwo} is a %D \DIMENSION, \TEX\ scans for some optional glue component, %D like in: %D %D \starttyping %D \skip0=\dimen0 plus 10pt minus 5pt %D \stoptyping %D %D The most robust solution to this problem is: %D %D \starttyping %D \ifdim\DimenOne<\DimenTwo\relax right \else wrong \fi %D \stoptyping %D %D Some close reading of the \PICTEX\ source however learned me %D that this problem could be solved best by just honoring the %D allocation of \DIMENSIONS\ when the name of the macro %D explictly stated the character sequence \type{dimen}. A next %D implementation therefore automatically declared all %D \DIMENSIONS\ with this sequence in their names with %D \type{\dimen}. Again I was too optimistic, so now we do it %D this way (the comments are from \PICTEX, which like \TABLE, %D is an example of a well documented package): \temporarynewdimen\!dimenA %.AW.X.DVEUL..OYQRST \temporarynewdimen\!dimenB %....X.DVEU...O.QRS. \temporarynewdimen\!dimenC %..W.X.DVEU......RS. \temporarynewdimen\!dimenD %..W.X.DVEU....Y.RS. \temporarynewdimen\!dimenE %..W........G..YQ.S. \temporarynewdimen\!dimenF %...........G..YQ.S. \temporarynewdimen\!dimenG %...........G..YQ.S. \temporarynewdimen\!dimenH %...........G..Y..S. \temporarynewdimen\!dimenI %...BX.........Y.... \temporarynewdimen\!dxpos %..W......U..P....S. \temporarynewdimen\!dypos %..WB.....U..P...... \temporarynewdimen\!xloc %..WB.....U.......S. \temporarynewdimen\!xpos %..........L.P..Q.ST \temporarynewdimen\!yloc %..WB.....U.......S. \temporarynewdimen\!ypos %..........L.P..Q.ST \temporarynewdimen\!zpt %.AWBX.DVEULGP.YQ.ST %D Tobias tested this module in all kind of \LATEX\ dialects %D so we were able to find out that we also needed to declare: \temporarynewdimen\linethickness %D After all, the new definition of \type{\newdimen} became: \def\newdimen#1% {\ifx#1\undefined \ifnum\count11>\count12\relax \temporarynewskip#1\relax \else \temporarynewdimen#1\relax \fi %\edef\ascii{\meaning#1}% %\immediate\write20{\string#1 becomes \ascii}% \else %\edef\ascii{\meaning#1}% %\immediate\write20{\string#1 already is \ascii}% \fi} % \def\newdimen#1% % {\bgroup % \escapechar=-1 % \def\next##1##2% % {\def\next####1##1####2####3\next% % {\egroup % \if####2@ % \temporarynewdimen#1\relax % \ifnum\count11>\count12 % \temporarynewskip#1\relax % \else % \temporarynewdimen#1\relax % \fi\fi}% % \expandafter\next\string##2##1@@\next}% % \expandafter\next\expandafter{\string\dimen}#1} % % This macro is as unreadable, inefficient and as compact as % can be, but uses no extra hash entries, which sometimes are % scarce too. A more readable alternative, that also takes % explicit \SKIPS\ into account, is included in the source. % % \def\doifregisterpreferenceelse#1#2#3#4% % {\def\dodoifregisterpreferenceelse##1#1##2##3\war{\if##2@}% % \expandafter\dodoifregisterpreferenceelse\string#2#1@@\war % #4% % \else % #3% % \fi} % % \def\newdimen#1% % {\bgroup % \escapechar=-1 % \expandafter\doifregisterpreferenceelse\expandafter{\string\dimen}#1 % {\egroup % \temporarynewdimen#1} % {\expandafter\doifregisterpreferenceelse\expandafter{\string\skip}#1 % {\egroup % \temporarynewskip#1} % {\egroup % \ifnum\count11>\count12 % \temporarynewskip#1\relax % \else % \temporarynewdimen#1\relax % \fi}}} %D Curious readers can still find the previous solution in %D the source. The next macro is used instead of %D \type{\input}. This macro also reports some statistics. \def\dimeninput#1 % {\message{[before: d=\the\count11,s=\the\count12]}% \input #1 \relax \message{[after: d=\the\count11,s=\the\count12]}}% %D Now we can load \PICTEX: \loadpictex %D Finally we restore the old definitions of \type{\newdimen} %D and \type{\newskip}: \let\newdimen=\normalnewdimen \let\newskip =\normalnewskip %D and just hope for the best. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-directives.mkiv0000644000175000017500000000005111571377075025165 0ustar norbertnorbert\starttext \showdirectives \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-hgz.mkiv0000644000175000017500000000006511754241457025126 0ustar norbertnorbert\input type-ghz.mkiv \endinput % can be file synonym context-2013.05.28.20130704/texmf-dist/tex/context/base/font-otd.lua0000644000175000017500000002444412130411274024131 0ustar norbertnorbertif not modules then modules = { } end modules ['font-otd'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local type = type local match = string.match local sequenced = table.sequenced local trace_dynamics = false trackers.register("otf.dynamics", function(v) trace_dynamics = v end) local trace_applied = false trackers.register("otf.applied", function(v) trace_applied = v end) local report_otf = logs.reporter("fonts","otf loading") local report_process = logs.reporter("fonts","otf process") local allocate = utilities.storage.allocate local fonts = fonts local otf = fonts.handlers.otf local hashes = fonts.hashes local definers = fonts.definers local constructors = fonts.constructors local specifiers = fonts.specifiers local fontidentifiers = hashes.identifiers local fontresources = hashes.resources local fontproperties = hashes.properties local fontdynamics = hashes.dynamics local contextsetups = specifiers.contextsetups local contextnumbers = specifiers.contextnumbers local contextmerged = specifiers.contextmerged local setmetatableindex = table.setmetatableindex local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local a_to_script = { } local a_to_language = { } -- we can have a scripts hash in fonts.hashes function otf.setdynamics(font,attribute) -- local features = contextsetups[contextnumbers[attribute]] -- can be moved to caller local features = contextsetups[attribute] if features then local dynamics = fontdynamics[font] dynamic = contextmerged[attribute] or 0 local script, language if dynamic == 2 then -- merge language = features.language or fontproperties[font].language or "dflt" script = features.script or fontproperties[font].script or "dflt" else -- if dynamic == 1 then -- replace language = features.language or "dflt" script = features.script or "dflt" end if script == "auto" then -- checkedscript and resources are defined later so we cannot shortcut them -- todo: make installer script = definers.checkedscript(fontidentifiers[font],fontresources[font],features) end local ds = dynamics[script] -- can be metatable magic (less testing) if not ds then ds = { } dynamics[script] = ds end local dsl = ds[language] if not dsl then dsl = { } ds[language] = dsl end local dsla = dsl[attribute] if not dsla then local tfmdata = fontidentifiers[font] a_to_script [attribute] = script a_to_language[attribute] = language -- we need to save some values .. quite messy local properties = tfmdata.properties local shared = tfmdata.shared local s_script = properties.script local s_language = properties.language local s_mode = properties.mode local s_features = shared.features properties.mode = "node" properties.language = language properties.script = script properties.dynamics = true -- handy for tracing shared.features = { } -- end of save local set = constructors.checkedfeatures("otf",features) set.mode = "node" -- really needed dsla = otf.setfeatures(tfmdata,set) if trace_dynamics then report_otf("setting dynamics %s: attribute %a, script %a, language %a, set %a",contextnumbers[attribute],attribute,script,language,set) end -- we need to restore some values properties.script = s_script properties.language = s_language properties.mode = s_mode shared.features = s_features -- end of restore dynamics[script][language][attribute] = dsla -- cache elseif trace_dynamics then -- report_otf("using dynamics %s: attribute %a, script %a, language %a",contextnumbers[attribute],attribute,script,language) end return dsla end end function otf.scriptandlanguage(tfmdata,attr) local properties = tfmdata.properties if attr and attr > 0 then return a_to_script[attr] or properties.script or "dflt", a_to_language[attr] or properties.language or "dflt" else return properties.script or "dflt", properties.language or "dflt" end end -- we reimplement the dataset resolver local autofeatures = fonts.analyzers.features -- was: constants local resolved = { } -- we only resolve a font,script,language,attribute pair once local wildcard = "*" local default = "dflt" -- what about analyze in local and not in font local function initialize(sequence,script,language,s_enabled,a_enabled,font,attr,dynamic) local features = sequence.features if features then for kind, scripts in next, features do local e_e local a_e = a_enabled and a_enabled[kind] -- the value (location) if a_e ~= nil then e_e = a_e else e_e = s_enabled and s_enabled[kind] -- the value (font) end if e_e then local languages = scripts[script] or scripts[wildcard] if languages then -- local valid, what = false local valid = false -- not languages[language] or languages[default] or languages[wildcard] because we want tracing -- only first attribute match check, so we assume simple fina's -- default can become a font feature itself if languages[language] then valid = e_e -- was true -- what = language -- elseif languages[default] then -- valid = true -- what = default elseif languages[wildcard] then valid = e_e -- was true -- what = wildcard end if valid then local attribute = autofeatures[kind] or false -- if a_e and dynamic < 0 then -- valid = false -- end -- if trace_applied then -- local typ, action = match(sequence.type,"(.*)_(.*)") -- brrr -- report_process( -- "%s font: %03i, dynamic: %03i, kind: %s, script: %-4s, language: %-4s (%-4s), type: %s, action: %s, name: %s", -- (valid and "+") or "-",font,attr or 0,kind,script,language,what,typ,action,sequence.name) -- end if trace_applied then report_process( "font %s, dynamic %a (%a), feature %a, script %a, language %a, lookup %a, value %a", font,attr or 0,dynamic,kind,script,language,sequence.name,valid) end return { valid, attribute, sequence.chain or 0, kind, sequence } end end end end return false -- { valid, attribute, chain, "generic", sequence } -- false anyway, could be flag instead of table else return false -- { false, false, chain, false, sequence } -- indirect lookup, part of chain (todo: make this a separate table) end end -- there is some fuzzy language/script state stuff in properties (temporary) function otf.dataset(tfmdata,font,attr) -- attr only when explicit (as in special parbuilder) local script, language, s_enabled, a_enabled, dynamic if attr and attr ~= 0 then dynamic = contextmerged[attr] or 0 -- local features = contextsetups[contextnumbers[attr]] -- could be a direct list local features = contextsetups[attr] a_enabled = features -- location based if dynamic == 1 then -- or dynamic == -1 then -- replace language = features.language or "dflt" script = features.script or "dflt" elseif dynamic == 2 then -- or dynamic == -2 then -- merge local properties = tfmdata.properties s_enabled = tfmdata.shared.features -- font based language = features.language or properties.language or "dflt" script = features.script or properties.script or "dflt" else -- error local properties = tfmdata.properties language = properties.language or "dflt" script = properties.script or "dflt" end else local properties = tfmdata.properties language = properties.language or "dflt" script = properties.script or "dflt" s_enabled = tfmdata.shared.features -- can be made local to the resolver dynamic = 0 end local res = resolved[font] if not res then res = { } resolved[font] = res end local rs = res[script] if not rs then rs = { } res[script] = rs end local rl = rs[language] if not rl then rl = { } rs[language] = rl end local ra = rl[attr] if ra == nil then -- attr can be false ra = { -- indexed but we can also add specific data by key in: } rl[attr] = ra local sequences = tfmdata.resources.sequences -- setmetatableindex(ra, function(t,k) -- if type(k) == "number" then -- local v = initialize(sequences[k],script,language,s_enabled,a_enabled,font,attr,dynamic) -- t[k] = v or false -- return v -- end -- end) for s=1,#sequences do local v = initialize(sequences[s],script,language,s_enabled,a_enabled,font,attr,dynamic) if v then ra[#ra+1] = v end end end return ra end context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lst.mkii0000644000175000017500000011146111754241457024335 0ustar norbertnorbert%D \module %D [ file=strc-lst, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Lists, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Lists} \unprotect % \getlistlevel[hoofdstuk]\test{0} \test % can be made faster if needed \def\getlistlevel[#1]#2#3% [list] \variable \default {\doifdefinedelse{\??ko#1\c!section} {\edef#2{\getvalue{\??ko#1\c!section}}% \doifdefinedelse{\??se#2\c!level} {\edef#2{\getvalue{\??se#2\c!level}}} {\edef#2{#3}}} {\edef#2{#3}}} % Auto cross document links work by either using logical or % page references, depending on the general settings. The % locations are stored in global references where the auto tag % number uses the text container. We use reference mapping % (define reference) to keep track of the current ref. % \@@sectie == current level \def\dowritetolist#1% {\doifelsevalue{\??li#1\c!state}\v!start \dodowritetolist\gobblefourarguments{#1}} \long\def\dodowritetolist#1#2#3#4% {\begingroup \expanded{\everylistentry\emptytoks\the\everylistentry}% \emptytoks, else loop \def\currentlist{#1}% evt naar dowritetolist \defconvertexpanded\asciilistentry{\getvalue{\??li\currentlist\c!expansion}}{#3}% \makesectionformat \doifelse\@@nmstate\v!start {\def\dopagenummer{\noexpand\pagenumber}} {\let\dopagenummer\!!zerocount}% % niet waterdicht, wat te doen met figuren en zo % first hack: scheelt rommel, second hack: alleen koppen \doifelsevalue{\??rf\currentlist\c!state}\v!start {\doif{\@@sectionlevel\@@sectie}{0}\autocrossdocumentfalse} {\autocrossdocumentfalse}% % weak and inefficient \ifautocrossdocument \bgroup \thisisnextinternal\currentlist %\thisisdestination{\currentlist::\sectionformat}% \expanded{\setsectieenkoppeling{\currentlist}}% \edef\currentlevel{\@@sectionlevel\@@sectie}% \processcommacommand[\crossdocumentreferences]\dododowritetolist \egroup \else \thisisnextinternal\currentlist \fi \expanded {\writeutilitycommand % todo: also an immediate option {\noexpand\listentry {\currentlist}% {\nextinternalreference}% {#2}% {\asciilistentry}% {\sectionformat\sectionseparator\sectionseparator\dopagenummer}% {\noexpand\realfolio}}}% \endgroup} \def\dododowritetolist#1% {\def\docommand##1% {\doifvalue{\??rf##1\c!state}\v!start {\setsectieenkoppeling{##1}% \def\level{\@@sectionlevel\@@sectie}% \ifnum\level>\currentlevel \expanded{\definereference[#1::##1][\v!none]}% \else\ifnum\level=\currentlevel \expanded{\definereference[#1::##1][#1::{##1::\sectionformat}]}% \fi\fi}}% \processcommacommand[\crossdocumentelements]\docommand} % so far \def\dowritebetweenlist#1#2% {\doifvalue{\??li#1\c!state}\v!start {\begingroup \defconvertedargument\ascii{#2}% \makesectionformat \doifelse{\@@nmstate}\v!start {\def\dopagenummer{\noexpand\pagenumber}} {\let\dopagenummer\!!zerocount}% \expanded {\writeutilitycommand {\noexpand\listbetween {#1}% {\ascii}% {\sectionformat\sectionseparator\sectionseparator\dopagenummer}% {\noexpand\realfolio}}}% \endgroup}} % experimental (no nodes in mvl), needed for naw \def\immediatetolist[#1]#2#3#4% {\begingroup \defconvertexpanded\asciilistentry{\getvalue{\??li#1\c!expansion}}{#3}% \makesectionformat \immediatewriteutilitycommand {\listentry {#1}{}{#2}{\asciilistentry}% {\sectionformat\sectionseparator\sectionseparator\number#4}% {\realfolio}}% \endgroup} \def\immediatebetweenlist[#1]#2% {\begingroup \defconvertedargument\asciilistentry{#2}% \makesectionformat \immediatewriteutilitycommand {\listbetween {#1}{\asciilistentry}% {\sectionformat\sectionseparator\sectionseparator0}% {\realfolio}}% \endgroup} \def\setlistentries {\def\listentry ##1{\executeifdefined{##1\c!list }\gobblefivearguments }% \def\listbetween##1{\executeifdefined{##1\c!inbetween}\gobblethreearguments}} \def\resetlistentries {\let\listentry \gobblesixarguments \let\listbetween\gobblefourarguments} \resetlistentries \addutilityreset{listentries} % old values: % % a: \def\listfill {\hskip 1.75em} % b: \def\listfill {\hskip.5em\hfill} % c: \def\listfill {\hskip.5em\listdots\hskip.5em} % todo: interface them % \setvalue{\??li\c!alternative a}% nr - tit - pag % {\def\listfill {\hskip.25em\relax}% % \def\listskip {0pt}% % \def\listwidth {2em}% % \def\liststretch{10em}} % \setvalue{\??li\c!alternative b}% nr - tit - fill - pag % {\def\listfill {\hfill}% % \def\listskip {5em}% % \def\listwidth {2em}% % \def\liststretch{10em}} % \setvalue{\??li\c!alternative c}% nr - tit - dots - pag % {\def\listfill {\hskip.5em\listdots\hskip.5em\relax}% % \def\listskip {5em}% % \def\listwidth {0pt}% % \def\liststretch{10em}} \def\listalternativeparameter#1% {\csname\??li\??li\listparameter\c!alternative#1\endcsname} \def\setuplistalternative[#1]% {\dodoubleargument\getparameters[\??li\??li#1]} % \listfill cum suis will be replaced by the direct call \def\listfill {\listalternativeparameter\c!command } \def\listskip {\listalternativeparameter\c!distance} \def\listwidth {\listalternativeparameter\c!width } \def\liststretch{\listalternativeparameter\c!stretch } % a : nr - tit - pag % b : nr - tit - fill - pag % c : nr - tit - dots - pag \setuplistalternative[a][\c!distance=0pt,\c!width=2em,\c!stretch=10em,\c!command=\hskip.25em\relax] \setuplistalternative[b][\c!distance=5em,\c!width=2em,\c!stretch=10em,\c!command=\hfill] \setuplistalternative[c][\c!distance=5em,\c!width=0pt,\c!stretch=10em,\c!command=\hskip.5em\listdots\hskip.5em\relax] \def\listdots{\leaders\hbox to .5em{\hss.\hss}\hfill} % \starttext % \placelist[section][alternative=c] % \setuplistalternative[c][distance=1em,stretch=0em] % \placelist[section][alternative=c] % \section{test} % \section{\readfile{tufte}{}{}} % \stoptext \setvalue{\??li\c!alternative}{\getvalue{\??li\c!alternative b}} \getvalue{\??li\c!alternative} \def\setlistparameter#1#2#3{\@EA\def\csname\??li#1#2\endcsname{#3}} % often \def\listparameter #1{\csname\??li\currentlist#1\endcsname} \def\dosetuplist[#1][#2]% slow -) {\def\docommand##1% {\getparameters[\??li##1][#2]% \preparepageprefix{\??li##1}}% \processcommalist[#1]\docommand} \def\setuplist {\dodoubleargument\dosetuplist} \def\dodosetlist#1% {\def\nolist{\splitsequence{\getvalue{\??li#1\c!limittext}}}% \setvalue{#1\c!inbetween}{\dobetweenlist{#1}}% \setvalue{#1\c!list }{\dolistelement{#1}}} % \def\dodoresetlist#1% % {\let\nolist\empty % \setvalue{#1\c!inbetween}{\gobblefourarguments{#1}}% % \setvalue{#1\c!list }{\gobblesixarguments {#1}}} \def\dodoresetlist#1% {\let\nolist\empty \letvalue{#1\c!inbetween}\gobblethreearguments \letvalue{#1\c!list }\gobblefivearguments} \let\nolist\empty \def\dodefinelist[#1][#2][#3]% {\presetlocalframed[\??li#1]% \getparameters [\??li#1] [\c!height=\v!broad, \c!depth=\v!broad, \c!offset=0.25em, \c!maxwidth=, \c!align=, \c!state=\v!start, \c!coupling=\v!off, \c!criterium=\v!local, \c!width=3em, \c!alternative=\c!b, \c!style=\v!normal, \c!textstyle=\listparameter\c!style, \c!numberstyle=\listparameter\c!style, \c!pagestyle=\listparameter\c!style, \c!color=, \c!textcolor=\listparameter\c!color, \c!numbercolor=\listparameter\c!color, \c!pagecolor=\listparameter\c!color, \c!numbercommand=\listnumbercommand, \c!textcommand=\listtextcommand, \c!pagecommand=\listpagecommand, \c!pagenumber=\v!yes, \c!headnumber=\v!yes, \c!pageboundaries=, \c!margin=\!!zeropoint, \c!aligntitle=, \c!before=, \c!after=, \c!inbetween=, \c!symbol=, \c!interaction=\v!sectionnumber, \v!part\v!number=\v!yes, % nodig ? % v %\c!prefix=\v!no, % we need to initialize it \c!label=\v!no, \c!distance=\!!zeropoint, \c!separator=\@@koseparator, \c!limittext=\@@kolimittext, \c!stopper=, \c!expansion=]% \doifassignmentelse{#2} {\getparameters[\??li#1][#2]} {\ConvertToConstant\doifnot{#2}{} % not \doifsomething ivm Convert... {\copyparameters % interactie ? [\??li#1][\??li#2] [\c!state,\c!width,\c!alternative,\c!style,\c!color, \c!textstyle,\c!textcolor,\c!textcommand, \c!pagestyle,\c!pagecommand,\c!pagecolor, \c!numberstyle,\c!numbercolor,\c!numbercommand, \c!headnumber, \c!pagenumber,\c!pageboundaries,\c!margin,\c!symbol,\c!limittext, \c!aligntitle,\c!before,\c!after,\c!inbetween,\v!part\c!number,\c!label]% \getparameters[\??li#1][#3]}}% \addutilityreset{#1}% \setvalue{\s!set #1}{\dodosetlist {#1}}% \setvalue{\s!reset#1}{\dodoresetlist{#1}}} \def\definelist {\dotripleempty\dodefinelist} \def\iflijstgeplaatst{\ifutilitydone} % obsolete, is now a mode \def\placelist {\dodoubleempty\doplacelist} \def\placerawlist {\dodoubleempty\doplacerawlist} \def\dobeginoflist {\begingroup \startpacked[\v!blank]} \def\doendoflist {\stoppacked \endgroup} \def\doplacelist[#1][#2]% {\dobeginoflist \doplacerawlist[#1][#2]% \doendoflist} \def\doplacerawlist[#1][#2]% {\begingroup \dogetcommalistelement1\from#1\to\firstlistelement \dosetuplist[#1][#2]% \doifvalue{\??li\firstlistelement\c!coupling}\v!on {\startlistreferences{#1}}% \dosettoclevel\??li\firstlistelement \honorlocalfilterlevel \doutilities{listentries,#1}\jobname{#1}\relax\par \stoplistreferences \dosetlistmode \endgroup} % the simple approach: % % \def\dosettoclevel#1#2% % {\dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty} % % but we want to to support selection by number: % % \starttypen % \placelist[section][criterium=chapter,number=1] \blank % \placelist[section][criterium=chapter,number=2] \blank % \placelist[section][criterium=chapter,number=3] \blank % % \chapter{first} \section{AA} \section{BB} % \chapter{second} \section{CC} \section{DD} % \chapter{third} \section{EE} \section{FF} % \stoptypen \def\dosettoclevel#1#2% todo: check if criterium is headid, else error {\ifundefined{#1#2\c!number}% \dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty \else % \doifnot{#2}\v!local ... \doifelsevaluenothing{#1#2\c!number}% {\dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty} {\setsectieenkoppeling{\getvalue{#1#2\c!criterium}}% \dosetfilterlevel {\previoussection\@@sectie}% {\getvalue{#1#2\c!number}}}% \fi} \def\dosetlistmode {\ifutilitydone \setsystemmode \v!list \else \resetsystemmode\v!list \fi} \def\dodocompletelist[#1][#2][#3]% enkelvoud, meervoud, instellingen {\expanded{\systemsuppliedtitle[#2]{\noexpand\headtext{#2}}}% expansion needed for v! vs french ! \doplacelist[#1][#3]} \def\docompletelist[#1][#2]% {\dodocompletelist[#1][#1][#2]} \def\completelist {\dodoubleempty\docompletelist} \def\listelements {} % list of page breaks \def\listnumbercommand #1{#1} % no strut due to interactive version \def\listtextcommand #1{\begstrut#1\endstrut} \def\listpagecommand #1{\strut#1} \def\doassigndimen#1#2#3% {\doifinsetelse{#2}{\v!fit,\v!broad}{#1=#3}{#1=#2}\relax} % \let\dohandlelistnumber\firstofoneargument % % can be anything, so no \expanded{\separatednumber{#1}} ! \def\dohandlelistnumber#1{\separatednumber{#1}} \def\listsymbol[#1]#2% {\begingroup \def\currentlist{#1}% \def\currentlistnumber{#2}% \currentlistsymbol \endgroup} % Beware, the list symbol macro gets an argument passed, i.e. when this % argument is not picked up, the symbol becomes a kind of prefix. % for historical reasons we're stuck to symbols, so in order to generalize, % we have to hook it into the symbol handler; we need a beter clean up later % % < 2005 % % \def\dosetlistsymbol % #1 % {\executeifdefined{listsymbol@\listparameter\c!symbol}\listsymbol@default} % {#1} % % >= 2005 % % at this symbol level, we have access to the raw 'number' in % \currentlistnumber \definesymbol[\v!list][\v!none ][\listsymbol@none ] \definesymbol[\v!list][\v!one ][\listsymbol@one ] \definesymbol[\v!list][\v!two ][\listsymbol@two ] \definesymbol[\v!list][\v!three ][\listsymbol@three ] \definesymbol[\v!list][\s!default][\listsymbol@default] \definesymbol[\v!list][\s!unknown][\listsymbol@unknown] \def\currentlistsymbol {\doifinsymbolsetelse\v!list{\listparameter\c!symbol} {\directsymbol\v!list{\listparameter\c!symbol}} {\directsymbol\v!list\s!default}} \def\listsymbol@none {\doassigndimen\scratchdimen{\listparameter\c!width}{1.5em}% \hbox to \scratchdimen{}} \def\listsymbol@one {\strut$\bullet$} \def\listsymbol@two {\vrule\!!width1em\!!height1ex\!!depth\zeropoint} \def\listsymbol@three {\begingroup \doassigndimen{\dimen0}{\listparameter\c!width }{1.5em}% \doassigndimen{\dimen2}{\listparameter\c!height}{1ex}% \doassigndimen{\dimen4}{\listparameter\c!depth }\zeropoint \vrule\!!width\dimen0\!!height\dimen2\!!depth\dimen4% \endgroup} \def\listsymbol@default {\doifelse{\listparameter\c!prefix}\v!no % ook nog eerste {\edef\splitlistsymbol{\@EA\removefirstprefix\@EA{\currentlistnumber}}}% one level expansion {\doifelse{\listparameter\c!prefix}\v!none {\edef\splitlistsymbol{\@EA\removeallprefixes\@EA{\currentlistnumber}}}% {\let\splitlistsymbol\currentlistnumber}}% geen \edef ivm 8 bit enz \doif{\listparameter\c!label}\v!yes{\leftlabeltext\currentlist}% \strut \def\numberseparator{\listparameter\c!separator}% overloaded, todo \@EA\dohandlelistnumber\@EA{\splitlistsymbol}% \listparameter\c!stopper \doif{\listparameter\c!label}\v!yes{\rightlabeltext\currentlist}} \def\listsymbol@unknown {\listparameter\c!symbol} % so far for list symbols \def\@@dodolistelement{dodolistelement} \def\dosomelistelement#1#2#3{#1 #2 \translatednumber[#3]} \setvalue{\@@dodolistelement a}{\let\dosomelistelement\dodofixdlistelementABC} \setvalue{\@@dodolistelement b}{\let\dosomelistelement\dodofixdlistelementABC} \setvalue{\@@dodolistelement c}{\let\dosomelistelement\dodofixdlistelementABC} \setvalue{\@@dodolistelement d}{\let\dosomelistelement\dodofixdlistelementD} \setvalue{\@@dodolistelement e}{\let\dosomelistelement\dodofixdlistelementE} \setvalue{\@@dodolistelement f}{\let\dosomelistelement\dodofixdlistelementF} \setvalue{\@@dodolistelement g}{\let\dosomelistelement\dodofixdlistelementG} \setvalue{\@@dodolistelement\v!none }{\def\dosomelistelement{\dodofreevlistelement}} \setvalue{\@@dodolistelement\v!vertical }{\def\dosomelistelement{\dodofreevlistelement}} \setvalue{\@@dodolistelement\v!horizontal}{\def\dosomelistelement{\dodofreehlistelement}} \setvalue{\@@dodolistelement\v!command }{\let\dosomelistelement\dodocommandlistelement} % \setuplist % [section] % [alternative=MyListItem, % after=\blank, % before=\blank] % % \definelistplacement[MyListItem][none]#1#2#3% % {(#1) (#2) (#3)} \def\definelistplacement {\dodoubleempty\dodefinelistplacement} \def\dodefinelistplacement[#1][#2]% {\setvalue{\@@dodolistelement#1}% {\doifelsenothing{#2} {\getvalue{\@@dodolistelement\v!command}}% {\executeifdefined{\@@dodolistelement#2} {\getvalue{\@@dodolistelement\v!command}}}% \setvalue{\??li\currentlist\c!command}{\getvalue{\@@dodolistelement::#1}}}% \setvalue{\@@dodolistelement::#1}} % don't mess arround with endgraf/grouping else we loose leftskip % \strippedcsname\dodolistelement \def\newlineinlist{\space} \let\currentlist\s!unknown \def\dolistelement#1#2#3#4#5#6% pas op: wordt ook elders gedefinieerd {\doiftoclevelelse[#5]{\dodolistelement{#1}{#2}{#3}{#4}{#5}{#6}}{}} \def\dodolistelement#1#2#3#4#5#6% {\def\currentlist{#1}% \def\currentlistnumber{#3}% \getvalue{\@@dodolistelement\listparameter\c!alternative}% %\showcomposition \let\@@iawidth\!!zeropoint % moet boolean worden \bgroup \edef\listelements {\listparameter\c!pageboundaries}% \ExpandBothAfter\doifinset{#3}\listelements {\showmessage\m!systems{14}{#3}% \page}% \egroup \dontcomplain \setfullsectionnumber{\??li\currentlist}% \dosomelistelement{#1}{#2}{#3}{#4}{#5}{#6}% \global\utilitydonetrue} \def\donestedlistattributes#1#2% {\doifvaluesomething{\??li\currentlist#2} % color {\resetinteractionparameter\c!color \resetinteractionparameter\c!contrastcolor}% \dolistattributes{#1}{#2}} \def\dostartlistattributes{\dostartattributes{\??li\currentlist}} \def\dostoplistattributes {\dostopattributes} \def\dolistattributes {\doattributes{\??li\currentlist}} \def\dodocommandlistelement#1#2#3#4#5#6% {\doifdefinedelse{\??li#1\c!command} {\listparameter\c!command {#3}{#4}{\pageprefix\??li\currentlist[#5]\translatednumber[#5]}} {[\currentlist: #3 - #4 - \pageprefix\??li\currentlist[#5]\translatednumber[#5]]}} \def\dodofreelistelement#1#2#3#4#5#6#7#8% {\def\makelistelement##1##2% {\noindent % new and needed \hbox {\doifelse{\listparameter\c!interaction}{##1} % \??li ipv \??ia {\setbox0\hbox{\showcontrastlocation{\??li\currentlist}{#6}{##2}}% \linklisttoelement{#2}{#5}{#6}{\box0}}%{\copy0}}% {##2}}}% \listparameter\c!before% can be \hskip \doifdefinedelse{\??li#1\c!command} {\makelistelement{\listparameter\c!interaction}% this forces all {\listparameter\c!command {#3}% geen conversies etc {#4}% geen conversies etc {\pageprefix\??li\currentlist[#5]% \translatednumber[#5]}}} {#7% \vbox {\forgetall \makelistelement\v!all {% \doif{\listparameter\c!headnumber}\v!yes {\makelistelement\v!sectionnumber {\donestedlistattributes\c!numberstyle\c!numbercolor {\listparameter\c!numbercommand{\currentlistsymbol}}}% }% \makelistelement\v!text {\donestedlistattributes\c!textstyle\c!textcolor {\let\\=\newlineinlist \dontconvertfont \listparameter\c!textcommand{#4}}}% \doif{\listparameter\c!pagenumber}\v!yes {\doifsomething{#5} {\makelistelement\v!pagenumber {\donestedlistattributes\c!pagestyle\c!pagecolor {\listparameter\c!pagecommand {\pageprefix\??li\currentlist[#5]% \translatednumber[#5]}}}}}}}% #8}% \listparameter\c!after} \def\dodofreehlistelement#1#2#3#4#5#6% {\dodofreelistelement{#1}{#2}{#3}{#4}{#5}{#6} {\noindent}{}} \def\dodofreevlistelement#1#2#3#4#5#6% % \nointerlineskip needed, {\dodofreelistelement{#1}{#2}{#3}{#4}{#5}{#6} % otherwise wrong spacing {\ifvmode\nointerlineskip\fi} % at multi-line lists {\ifvmode\nointerlineskip\fi\endgraf\allowbreak}} % test is saveguard % to be documented: align, hang % now also in abc \def\limitatedlistentry#1% {\doifelsenothing{\listparameter\c!maxwidth} {\listparameter\c!textcommand{#1}} {\listparameter\c!textcommand {\limitatetext {#1}% {\listparameter\c!maxwidth}% {\splitsymbol{\listparameter\c!limittext}}}}} \def\dodofixdlistelementABC#1#2#3#4#5#6% weeden {\endgraf \leftskip\listparameter\c!margin% na de \endgraf ! \listparameter\c!before \!!widthc\listparameter\c!distance \doifelse{\listparameter\c!width}\v!fit {\!!widtha\zeropoint} {\doifelsenothing{#3} {\doifelse{\listparameter\c!aligntitle}\v!yes {\!!widtha\zeropoint \!!widthc\zeropoint} {\!!widtha\listparameter\c!width}} {\!!widtha\listparameter\c!width}}% \getvalue{\??li\c!alternative\listparameter\c!alternative}% \endgraf \def\makelistelement##1##2% {\doifelse{\listparameter\c!interaction}{##1} {\setbox0\hbox{\showcontrastlocation\??ia{#6}{##2}}% \linklisttoelement{#2}{#5}{#6}{\box0}}%{\copy0}}% {\hbox{##2}}}% \doif{\listparameter\c!interaction}\v!text % not supported ! ! ! ! ! ! text == all {\setlistparameter\currentlist\c!interaction\v!all}% % \dontleavehmode % new, else no margin, but wrong, better (else \indent as well): \noindent \makelistelement\v!all {\setlocalhsize \hsize\localhsize \hbox to \hsize {\forgetall \dostartlistattributes\c!style\c!color\empty \!!widthb\hsize \doifelse{\listparameter\c!headnumber}\v!yes {\setbox2\hbox \ifdim\!!widtha>\zeropoint to \!!widtha \fi {\makelistelement\v!sectionnumber {\donestedlistattributes\c!numberstyle\c!numbercolor {\listparameter\c!numbercommand{\currentlistsymbol}}% \hfill}}} {\!!widtha\zeropoint \!!widthc\zeropoint \setbox2\hbox{}}% \setbox4\hbox {\doif{\listparameter\c!pagenumber}\v!yes {\doifsomething{#5} % \listwidth is new ; temp hack {\hbox \ifdim\listwidth>\zeropoint to \listwidth\fi {\hfill \makelistelement\v!pagenumber {\donestedlistattributes\c!pagestyle\c!pagecolor {\listparameter\c!pagecommand {\pageprefix\??li\currentlist[#5]% \translatednumber[#5]}}}}}}}% \vbox {\hsize\!!widthb \setupalign[\listparameter\c!align]% \ifdim\!!widtha<\hsize \hangindent\wd2 \dimen2=\!!widthc % \listparameter\c!distance \advance\hangindent \dimen2 \hangafter\plusone \doif{\listparameter\c!hang}\v!no{\hangafter\zerocount}% \ifdim\wd4=\zeropoint % \ifvoid4 % we kunnen gewoon afbreken aan het eind \else \ifdim\listskip>\zeropoint\relax \rightskip\listskip\!!plus\liststretch\relax \parfillskip-\rightskip \fi \fi \else \dimen2\zeropoint \fi \parindent\zeropoint\relax \leavevmode \box2\relax \hskip\dimen2 \bgroup \donestedlistattributes\c!textstyle\c!textcolor {\let\\=\newlineinlist \dontconvertfont %\listparameter\c!textcommand{#4}}% \limitatedlistentry{#4}}% %\carryoverpar % new otherwise wrong linespacing \egroup \ifdim\wd4=\zeropoint\relax % \ifvoid4 % \ifdim\!!widtha<\hsize \hfill\strut \fi % spoils align \else \nobreak\listfill \box4\relax \relax \fi}% \hss \dostoplistattributes}}% new \endgraf % new, else problems with nointerlinespace and prevdepth \nointerlineskip % anders verkeerde spatiering bij multi-line \endgraf \allowbreak \listparameter\c!after} % % example from the context list % % \setuphead [part] [page=right,placehead=yes] % \setuplist [chapter] [alternative=d,before=\blank,after=\blank] % \setuplist [part] [before=\blank,after=\blank] % % \starttext % \startnarrower[2*right] \placecontent \stopnarrower % \blank[4*big] % \startsetups chapter % \blank \startnarrower[3*middle] \placecontent[criterium=local] \stopnarrower % \stopsetups % \placelist[part][criterium=text,after=\setups{chapter}] % % \part{First part} \chapter{Chapter one} \chapter{Chapter two} % \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five} % \part{Second part} \chapter{Chapter one} \chapter{Chapter two} % \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five} % \part{Third part} \chapter{Chapter one} \chapter{Chapter two} % \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five} % \stoptext % overrulen interactie kan sneller, bv door hulpconstanten % te gebruiken en die te letten \def\dodofixdlistelementD#1#2#3#4#5#6% {%\leftskip=\listparameter\c!margin \ifvmode \advance\leftskip\listparameter\c!margin% AANGEPAST \fi \bgroup \ifvmode \noindent\leavevmode % leavevmode ? ? ? \fi \doif{\listparameter\c!interaction}\v!text % not supported {\setlistparameter\currentlist\c!interaction\v!sectionnumber}% \doif{\listparameter\c!interaction}\v!all % not supported {\setlistparameter\currentlist\c!interaction\v!sectionnumber}% \def\makelistelement##1##2% {\doifelse{\listparameter\c!interaction}{##1} {\setbox0\hbox{\showcontrastlocation\??ia{#6}{##2}}% \linklisttoelement{#2}{#5}{#6}{\box0}}%{\copy0}}% {\hbox{##2}}}% \setbox4\hbox {\doif{\listparameter\c!pagenumber}\v!yes {\doifsomething{#5} {\makelistelement\v!pagenumber {\donestedlistattributes\c!pagestyle\c!pagecolor {\listparameter\c!pagecommand {\pageprefix\??li\currentlist[#5]% \translatednumber[#5]}}}}}}% \doif{\listparameter\c!headnumber}\v!yes{% \donetrue \doifnothing{#3}{\doifnothing{\listparameter\c!symbol}\donefalse}% % == \doifnothing{#3\listparameter\c!symbol}\donefalse \ifdone \hbox {\listparameter\c!left \makelistelement\v!sectionnumber {\donestedlistattributes\c!numberstyle\c!numbercolor {\listparameter\c!numbercommand{\currentlistsymbol}}}% \listparameter\c!right \hskip.5em}% \nobreak \fi }% \tolerance3500 % niet zomaar veranderen \donestedlistattributes\c!textstyle\c!textcolor {\let\\=\newlineinlist \dontconvertfont %\listparameter\c!textcommand{#4}}% \limitatedlistentry{#4}}% \ifvoid4\else \nobreak \hskip.75em\relax \nobreak \box4 \fi \dimen0=\listparameter\c!distance\relax \ifdim\dimen0<1em\relax \hskip1em\!!plus1em\!!minus.25em\relax \else \hskip\dimen0\!!plus.5\dimen0\!!minus.25\dimen0\relax \fi \egroup} \def\dodofixdlistelementE#1% {\dodofixdlistelementEFG {\setupinteraction[\c!strut=\v!no]} {\localframed[\??li\currentlist][\c!depth=\!!zeropoint,\c!color=]} {}} \def\dodofixdlistelementF#1% {\dodofixdlistelementEFG {} {\dosetraggedhbox{\listparameter\c!align}\raggedbox} {}} \def\dodofixdlistelementG#1% {\dodofixdlistelementEFG {} \midaligned {}} \def\dodofixdlistelementEFG#1#2#3#4#5#6#7#8% {\noindent \bgroup \def\makelistelement##1##2% isolated by Wolfgang Schuster {\doifelse{\listparameter\c!interaction}{##1} {#2{##2}} {\setbox0\hbox{#2{\showcontrastlocation\??ia{#8}{##2}}}% \linklisttoelement{#4}{#7}{#8}{\box0}}}% \makelistelement\v!no {\let\\=\newlineinlist #1% in case E nils the strut (still needed?) \dostartlistattributes\c!style\c!color\empty \ignorespaces\dontconvertfont\setstrut \begstrut \limitatedlistentry{#6}% \endstrut \dostoplistattributes}% \egroup \par \listparameter\c!inbetween} % better: % % \def\linklisttoelement#1#2#3#4% % list location format page data % {\ifautocrossdocument % \gotodestination{}{}{\currentlist::\@@filterblocknumberpart[#2]}{#3}{#4}% % \else % \gotonextinternal\currentlist{#1}{#3}{#4}% % \fi} % % but for the moment: \def\linklisttoelement#1#2#3#4% % list location format page data {\gotonextinternal\currentlist{#1}{#3}{#4}} \def\writetolist[#1]#2#3% {\doifsomething{#1} {\defconvertedargument\firstlistelement{#2}% \@EA\dowritetolist\@EA{#1}{\firstlistelement}{#3}{\v!head}}} \def\dobetweenlist#1#2#3#4% pas op: wordt ook elders gedefinieerd {\doiftoclevelelse[#3]{#2}{}} \def\writebetweenlist[#1]#2% {\@EA\dowritebetweenlist\@EA{#1}{#2}} % #2 weg en \expanded % NOG ENGELS MAKEN \def\listlength{\utilitylistlength} \def\listwidth {\utilitylistwidth} \def\listheight{\utilitylistheight} \def\utilitylistlength {0} \def\utilitylistwidth {0pt} \def\utilitylistheight {0pt} \def\dolistelementX#1#2#3#4#5#6% {\doiftoclevelelse[#5] {\doglobal\increment\utilitylistlength \hbox {\dolistattributes\c!textstyle\c!textcolor {\let\\=\newlineinlist \dontconvertfont \listparameter\c!textcommand{#4}}}% \global\utilitydonetrue} {}} \def\dodeterminelistcharacteristics[#1][#2]% {\begingroup \doglobal\newcounter\utilitylistlength \let\dolistelement\dolistelementX \dosetuplist[#1][#2]% \dogetcommalistelement1\from#1\to\commalistelement \dosettoclevel\??li\commalistelement \setbox0\vbox{\doutilities{listentries,#1}\jobname{#1}\relax\par}% \xdef\utilitylistheight{\the\ht0}% \xdef\utilitylistwidth {\the\wd0}% \endgroup \dosetlistmode} \def\determinelistcharacteristics {\dodoubleempty\dodeterminelistcharacteristics} % \definerreferencelist % [externalfigure] % [command=\showbigfigure, % before=\page, % after=\page] % % \definereferencelist % [externaltable] % [command=\showbigtable, % before=\page, % after=\page] % % \def\showbigfigure#1% % {\externalfigure[#1][frame=on,factor=max]} % % \def\showbigtable#1% % {\switchtobodyfont[12pt]\getbuffer[#1]} % % \writetoreferencelist[externalfigure]{koe} {\externalfigure[koe] [width=3cm,frame=on]} % \writetoreferencelist[externalfigure]{paard}{\externalfigure[paard][width=3cm,frame=on]} % % \startbuffer[kanweg] % \starttable[|||] % \HL % \VL test \VL test \VL\SR % \HL % \VL test \VL test \VL\FR % \VL test \VL test \VL\MR % \VL test \VL test \VL\LR % \HL % \stoptable % \stopbuffer % % \writetoreferencelist[externaltable]{kanweg}{\switchtbodyfont[5pt]\getbuffer[kanweg]} % % \placereferencelist[externalfigure,externaltable] % algemeen \def\referencebutton#1[#2]% {\hbox\bgroup % the \hbox is needed to bypass \let\referenceprefix\empty % \dontleavehmode in \gotobox \setupinteraction[\c!color=,\c!contrastcolor=,\c!strut=]% \setupreferencing[\c!prefix=]% \gotobox{\hbox{\ignorespaces#1}}[#2]% \egroup} \newcounter\referencecounter \def\doreferencelistelement#1#2#3#4#5% {\doiftoclevelelse[#4] {\getvalue{\??rl#1\c!before}% \referencebutton {\getvalue{\??rl#1\c!command}{#3}\pagereference[\r!to#2]}% [\r!from#2]% \global\utilitydonetrue \getvalue{\??rl#1\c!after}} {}} \def\doplacereferencelist[#1][#2]% {\begingroup \setupreferencelist[#1][#2,\c!state=\v!stop]% \dogetcommalistelement1\from#1\to\commalistelement \dosettoclevel\??rl\commalistelement \doutilities{listentries,#1}\jobname{#1}\relax\par \endgroup} \def\placereferencelist {\dodoubleempty\doplacereferencelist} \def\dowritetoreferencelist#1#2#3% {\doifvalue{\??rl#1\c!state}\v!start {\begingroup \makesectionformat \doifelse{\@@nmstate}\v!start {\def\dopagenummer{\noexpand\pagenumber}} {\let\dopagenummer\!!zerocount}% \expanded {\writeutilitycommand% {\noexpand\referencelistentry% {#1}% tag {#2}% number {#3}% data {\sectionformat\sectionseparator\sectionseparator\dopagenummer}% {\noexpand\realfolio}}}% \endgroup}} \def\writetoreferencelist[#1]#2% #1=class #2=data #3=visualization {\dowithnextbox {\doifelsevalue{\??rl#1\c!state}\v!start {\doglobal\increment\referencecounter % must be resolved due to #2 \referencebutton {\flushnextbox \pagereference[\r!from\referencecounter]% \dowritetoreferencelist{#1}{\referencecounter}{#2}}% [\r!to\referencecounter]} {\flushnextbox}} \hbox} % \vbox ? \def\referencelistentry#1% {\executeifdefined{#1\c!list}\gobblefourarguments} \def\dodosetreferencelist#1% {\setvalue{#1\c!list}{\doreferencelistelement{#1}}} \def\dodoresetreferencelist#1% {\setvalue{#1\c!list}{\gobblefourarguments}} \def\dodefinereferencelist[#1][#2]% {\setupreferencelist[#1] [\c!command=, \c!state=\v!start, \c!criterium=\v!all, \c!before=, \c!after=, #2]% \resetcounter{#1}% \addutilityreset{#1}% \setvalue{\s!set #1}{\dodosetreferencelist {#1}}% \setvalue{\s!reset#1}{\dodoresetreferencelist{#1}}} \def\definereferencelist {\dodoubleempty\dodefinereferencelist} \def\dosetupreferencelist[#1][#2]% {\getparameters[\??rl#1][#2]} \def\setupreferencelist {\dodoubleempty\dosetupreferencelist} \def\dosetupcombinedlist[#1][#2]% {\getparameters[\??ih#1][#2]% \expanded{\setuplist[\getvalue{\??ih#1\c!list}]}[#2]} \def\setupcombinedlist {\dodoubleargument\dosetupcombinedlist} \def\doplacecombinedlist[#1][#2]% {\begingroup \getparameters[\??ih#1][#2]% \dosettoclevel\??ih{#1}% \edef\combinedlist{\getvalue{\??ih#1\c!list}}% \doifelsevalue{\??ih#1\c!level}\v!current % {\!!counta=0\@@kolevel} % hm: \@@kolevel {\fullexpandoneargafter\doifnumberelse{\getvalue{\??ih#1\c!level}}% in verband {\!!counta\getvalue{\??ih#1\c!level}% met de vorige implementatie \advance\!!counta \plusone % accepteren we ook nummers (0==deel) \getfromcommacommand[\combinedlist][\!!counta]% \edef\maximumlist{\commalistelement}}% {\edef\maximumlist{\getvalue{\??ih#1\c!level}}}% \doifdefinedelse{\??ko\maximumlist\c!section} {\!!counta\getvalue{\??se\getvalue{\??ko\maximumlist\c!section}\c!level}}% {\!!counta\zerocount}} \let\!!stringa\combinedlist \let\combinedlist\empty \def\docommand##1% {\doifdefinedelse{\??ko##1\c!section} {\ifnum\getvalue{\??se\getvalue{\??ko##1\c!section}\c!level}>\!!counta\else \addtocommalist{##1}\combinedlist \fi}% {\addtocommalist{##1}\combinedlist}}% \processcommacommand[\!!stringa]\docommand \doifvalue{\??ih#1\c!coupling}\v!on {\startlistreferences{#1}}% \ExpandFirstAfter\dodoplacecombinedlist[\combinedlist][#2]% \stoplistreferences \endgroup \dosetlistmode} \def\dodoplacecombinedlist[#1][#2]% {\dobeginoflist \dosetuplist[#1][#2]% \doutilities{listentries,#1}\jobname{#1}\relax\par \doendoflist} \def\docompletecombinedlist[#1][#2]% {\expanded{\systemsuppliedtitle[#1]{\noexpand\headtext{#1}}}% expansion due to v! vs french ! \doplacecombinedlist[#1][#2]} \def\dodefinecombinedlist[#1][#2][#3]% {\makerawcommalist[#2]\combinedlist % for fast processing \letvalue{\??ih#1\c!list}\combinedlist \getcommalistsize[#2]% \getfromcommalist[#2][\commalistsize]% \doeassign[\??ih#1][\c!level=\commalistelement]% \getparameters [\??ih#1] [\c!criterium=\v!local,#3]% \setvalue{\e!setup#1\e!endsetup}% {\dodoubleempty\dosetupcombinedlist[#1]}% \setvalue{\e!place#1}% {\dodoubleempty\doplacecombinedlist[#1]}% \setvalue{\e!complete#1}% {\dodoubleempty\docompletecombinedlist[#1]}} \def\definecombinedlist {\dotripleempty\dodefinecombinedlist} \def\placecombinedlist {\dodoubleempty\doplacecombinedlist} % new and yet undocumented (used in cocoa qa) % % \setupremaininglistlength % [left=\hss nog~,right=~ingangen] % % \resetremaininglistlength % [section][settings] % % \placelist % [section] % [before=\showremaininglistlength] % % \dorecurse{100}{\section{hans}} \definesystemvariable {ll} % ListLength \def\setupremaininglistlength[#1]% {\getparameters[\??ll][#1]% \globallet\listlengthcounter\!!zerocount} \setupremaininglistlength [\c!left=\hss,\c!right=,\c!number=\v!yes, \c!before=\blank,\c!after=\page, \c!style=\v!smallnormal,\c!color=] \def\resetremaininglistlength {\dodoubleempty\doresetremaininglistlength} \def\doresetremaininglistlength[#1][#2]% {\determinelistcharacteristics[#1][#2]% \determinelistcharacteristics[#1][#2]% \xdef\listlengthcounter{\number\utilitylistlength}} \def\showremaininglistlength {\bgroup \ifnum\listlengthcounter>\plusone \setbox\scratchbox\vbox {\@@llbefore\par\horizontalstrut\par\horizontalstrut\par\@@llafter}% \scratchdimen\pagetotal \advance\scratchdimen \ht\scratchbox \advance\scratchdimen \dp\scratchbox \ifdim\scratchdimen>\pagegoal \@@llbefore \nobreak\hbox to \hsize {\doifnot\@@llnumber\v!yes{\let\listlengthcounter\empty}% \doattributes\??ll\c!style\c!color{\@@llleft\listlengthcounter\@@llright}} \@@llafter \fi \fi \doglobal\decrement\listlengthcounter\relax \egroup} \setupreferencelist [\c!style=\v!normal] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-sql.mkiv0000644000175000017500000000072212161703335023614 0ustar norbertnorbert%D \module %D [ file=m-sql, %D version=2012.07.12, %D title=\CONTEXT\ Extra Modules, %D subtitle=SQL, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{util-tpl}{} \registerctxluafile{util-sql}{} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-siz.mkiv0000644000175000017500000001117211754241457024361 0ustar norbertnorbert%D \module %D [ file=type-siz, %D version=2001.04.12, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Sizing scripts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % beware: no \s! before keys as these are interpreted \starttypescriptcollection[\s!size] \starttypescript [\s!serif] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!rm] [\s!default] \stoptypescript \starttypescript [\s!sans] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!ss] [\s!default] \stoptypescript \starttypescript [\s!mono] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!tt] [\s!default] \stoptypescript \starttypescript [\s!math] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!mm] [\s!default] \stoptypescript \starttypescript [\s!handwriting] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!hw] [\s!default] \stoptypescript \starttypescript [\s!calligraphy] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!cg] [\s!default] \stoptypescript \starttypescript [\s!casual] [\s!default] [\s!size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [\s!rm] [\s!default] \stoptypescript \starttypescript [\s!all] [\s!dtp] [\s!size] \definebodyfontenvironment [4pt] [\s!text=4pt,\s!script=4pt,\s!scriptscript=4pt, \s!x=4pt,\s!xx=4pt,\v!big=6pt,\v!small=4pt] \definebodyfontenvironment [5pt] [\s!text=5pt,\s!script=5pt,\s!scriptscript=5pt, \s!x=5pt,\s!xx=5pt,\v!big=7pt,\v!small=5pt] \definebodyfontenvironment [6pt] [\s!text=6pt,\s!script=5pt,\s!scriptscript=5pt, \s!x=5pt,\s!xx=5pt,\v!big=8pt,\v!small=5pt] \definebodyfontenvironment [7pt] [\s!text=7pt,\s!script=6pt,\s!scriptscript=5pt, \s!x=6pt,\s!xx=5pt,\v!big=9pt,\v!small=5pt] \definebodyfontenvironment [8pt] [\s!text=8pt,\s!script=6pt,\s!scriptscript=5pt, \s!x=6pt,\s!xx=5pt,\v!big=10pt,\v!small=6pt] \definebodyfontenvironment [9pt] [\s!text=9pt,\s!script=7pt,\s!scriptscript=5pt, \s!x=7pt,\s!xx=5pt,\v!big=11pt,\v!small=7pt] \definebodyfontenvironment [10pt] [\s!text=10pt,\s!script=7pt,\s!scriptscript=5pt, \s!x=8pt,\s!xx=6pt,\v!big=12pt,\v!small=8pt] \definebodyfontenvironment [11pt] [\s!text=11pt,\s!script=8pt,\s!scriptscript=6pt, \s!x=9pt,\s!xx=7pt,\v!big=13pt,\v!small=9pt] \definebodyfontenvironment [12pt] [\s!text=12pt,\s!script=9pt,\s!scriptscript=7pt, \s!x=10pt,\s!xx=8pt,\v!big=14pt,\v!small=10pt] \definebodyfontenvironment [13pt] [\s!text=13pt,\s!script=10pt,\s!scriptscript=8pt, \s!x=11pt,\s!xx=9pt,\v!big=16pt,\v!small=11pt] \definebodyfontenvironment [14pt] [\s!text=14pt,\s!script=10pt,\s!scriptscript=7pt, \s!x=12pt,\s!xx=10pt,\v!big=16pt,\v!small=12pt] \definebodyfontenvironment [16pt] [\s!text=16pt,\s!script=12pt,\s!scriptscript=9pt, \s!x=13pt,\s!xx=11pt,\v!big=18pt,\v!small=14pt] % suboptimal math sizes \definebodyfontenvironment [18pt] [\s!text=18pt,\s!script=16pt,\s!scriptscript=14pt, \s!x=16pt,\s!xx=14pt,\v!big=22pt,\v!small=16pt] \definebodyfontenvironment [22pt] [\s!text=22pt,\s!script=22pt,\s!scriptscript=18pt, \s!x=18pt,\s!xx=16pt,\v!big=28pt,\v!small=18pt] \definebodyfontenvironment [28pt] [\s!text=28pt,\s!script=22pt,\s!scriptscript=18pt, \s!x=22pt,\s!xx=18pt,\v!big=28pt,\v!small=22pt] \stoptypescript \starttypescript [\s!serif] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!rm] [\s!default] \stoptypescript \starttypescript [\s!sans] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!ss] [\s!default] \stoptypescript \starttypescript [\s!mono] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!tt] [\s!default] \stoptypescript \starttypescript [\s!math] [\s!dtp] [\s!size] \definebodyfont [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt] [\s!mm] [\s!default] \stoptypescript \stoptypescriptcollection \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-fun.lua0000644000175000017500000000266312130411274024112 0ustar norbertnorbertif not modules then modules = { } end modules ['meta-fun'] = { version = 1.001, comment = "companion to meta-fun.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- very experimental, actually a joke ... see metafun manual for usage local format, load, type = string.format, load, type local metapost = metapost metapost.metafun = metapost.metafun or { } local metafun = metapost.metafun function metafun.topath(t,connector) context("(") if #t > 0 then for i=1,#t do if i > 1 then context(connector or "..") end local ti = t[i] if type(ti) == "string" then context(ti) else context("(%s,%s)",ti.x or ti[1] or 0,ti.y or ti[2] or 0) end end else context("origin") end context(")") end function metafun.interpolate(f,b,e,s,c) local done = false context("(") for i=b,e,(e-b)/s do local d = load(format("return function(x) return %s end",f)) if d then d = d() if done then context(c or "...") else done = true end context("(%s,%s)",i,d(i)) end end if not done then context("origin") end context(")") end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-vf.lua0000644000175000017500000001474312130411274023757 0ustar norbertnorbertif not modules then modules = { } end modules ['font-vf'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

This is very experimental code! Not yet adapted to recent changes. This will change.

--ldx]]-- -- present in the backend but unspecified: -- -- vf.rule vf.special vf.right vf.push vf.down vf.char vf.node vf.fontid vf.pop vf.image vf.nop local next = next local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local fastcopy = table.fastcopy local fonts = fonts local constructors = fonts.constructors local vf = constructors.newhandler("vf") -- general code function vf.find(name) name = file.removesuffix(file.basename(name)) if constructors.resolvevirtualtoo then local format = fonts.loggers.format(name) if format == 'tfm' or format == 'ofm' then if trace_defining then report_defining("locating vf for %a",name) end return findbinfile(name,"ovf") else if trace_defining then report_defining("vf for %a is already taken care of",name) end return nil -- "" end else if trace_defining then report_defining("locating vf for %a",name) end return findbinfile(name,"ovf") end end --[[ldx--

We overload the reader.

--ldx]]-- callbacks.register('find_vf_file', vf.find, "locating virtual fonts, insofar needed") -- not that relevant any more -- specific code (will move to other module) local definers = fonts.definers local methods = definers.methods local variants = allocate() local combinations = { } local combiner = { } local whatever = allocate() local helpers = allocate() local predefined = allocate { dummy = { "comment" }, push = { "push" }, pop = { "pop" }, } methods.variants = variants -- todo .. wrong namespace vf.combinations = combinations vf.combiner = combiner vf.whatever = whatever vf.helpers = helpers vf.predefined = predefined setmetatableindex(whatever, function(t,k) local v = { } t[k] = v return v end) local function checkparameters(g,f) if f and g and not g.parameters and #g.fonts > 0 then local p = { } for k,v in next, f.parameters do p[k] = v end g.parameters = p setmetatable(p, getmetatable(f.parameters)) end end function methods.install(tag, rules) vf.combinations[tag] = rules variants[tag] = function(specification) return vf.combine(specification,tag) end end local function combine_load(g,name) return constructors.readanddefine(name or g.specification.name,g.specification.size) end local function combine_assign(g, name, from, to, start, force) local f, id = combine_load(g,name) if f and id then -- optimize for whole range, then just g = f if not from then from, to = 0, 0xFF00 end if not to then to = from end if not start then start = from end local fc, gc = f.characters, g.characters local fd, gd = f.descriptions, g.descriptions local hn = #g.fonts+1 g.fonts[hn] = { id = id } -- no need to be sparse for i=from,to do if fc[i] and (force or not gc[i]) then gc[i] = fastcopy(fc[i],true) -- can be optimized gc[i].commands = { { 'slot', hn, start } } gd[i] = fd[i] end start = start + 1 end checkparameters(g,f) end end local function combine_process(g,list) if list then for _,v in next, list do (combiner.commands[v[1]] or nop)(g,v) end end end local function combine_names(g,name,force) local f, id = constructors.readanddefine(name,g.specification.size) if f and id then local fc, gc = f.characters, g.characters local fd, gd = f.descriptions, g.descriptions g.fonts[#g.fonts+1] = { id = id } -- no need to be sparse local hn = #g.fonts for k, v in next, fc do if force or not gc[k] then gc[k] = fastcopy(v,true) gc[k].commands = { { 'slot', hn, k } } gd[i] = fd[i] end end checkparameters(g,f) end end local combine_feature = function(g,v) local key, value = v[2], v[3] if key then if value == nil then value = true end local specification = g.specification if specification then local normalfeatures = specification.features.normal if normalfeatures then normalfeatures[key] = value -- otf? end end end end --~ combiner.load = combine_load --~ combiner.assign = combine_assign --~ combiner.process = combine_process --~ combiner.names = combine_names --~ combiner.feature = combine_feature combiner.commands = allocate { ["initialize"] = function(g,v) combine_assign (g,g.properties.name) end, ["include-method"] = function(g,v) combine_process (g,combinations[v[2]]) end, -- name -- ["copy-parameters"] = function(g,v) combine_parameters(g,v[2]) end, -- name ["copy-range"] = function(g,v) combine_assign (g,v[2],v[3],v[4],v[5],true) end, -- name, from-start, from-end, to-start ["copy-char"] = function(g,v) combine_assign (g,v[2],v[3],v[3],v[4],true) end, -- name, from, to ["fallback-range"] = function(g,v) combine_assign (g,v[2],v[3],v[4],v[5],false) end, -- name, from-start, from-end, to-start ["fallback-char"] = function(g,v) combine_assign (g,v[2],v[3],v[3],v[4],false) end, -- name, from, to ["copy-names"] = function(g,v) combine_names (g,v[2],true) end, ["fallback-names"] = function(g,v) combine_names (g,v[2],false) end, ["feature"] = combine_feature, } function vf.combine(specification,tag) local g = { name = specification.name, properties = { virtualized = true, }, fonts = { }, characters = { }, descriptions = { }, specification = fastcopy(specification), } combine_process(g,combinations[tag]) return g end context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-bas.lua0000644000175000017500000001072212161703335024052 0ustar norbertnorbertif not modules then modules = { } end modules ['cldf-bas'] = { version = 1.001, comment = "companion to cldf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- -- speedtest needed: -- -- local flush, writer = context.getlogger() -- -- trackers.register("context.trace",function(v) -- flush, writer = context.getlogger() -- end) -- -- function context.bgroup() -- flush(ctxcatcodes,"{") -- end -- -- function context.egroup() -- flush(ctxcatcodes,"}") -- end -- maybe use context.generics local type = type local format = string.format local utfchar = utf.char local concat = table.concat local context = context local generics = context.generics local variables = interfaces.variables local nodepool = nodes.pool local new_rule = nodepool.rule local new_glyph = nodepool.glyph local current_font = font.current local texcount = tex.count function context.char(k) -- used as escape too, so don't change to utf if type(k) == "table" then local n = #k if n == 1 then context([[\char%s\relax]],k[1]) elseif n > 0 then context([[\char%s\relax]],concat(k,[[\relax\char]])) end elseif k then context([[\char%s\relax]],k) end end function context.utfchar(k) context(utfchar(k)) end -- plain variants function context.chardef(cs,u) context([[\chardef\%s=%s\relax]],k) end function context.par() context([[\par]]) -- no need to add {} there end function context.bgroup() context("{") end function context.egroup() context("}") end function context.space() context("\\space") -- no " " as that gets intercepted end function context.hrule(w,h,d,dir) if type(w) == "table" then context(new_rule(w.width,w.height,w.depth,w.dir)) else context(new_rule(w,h,d,dir)) end end function context.glyph(id,k) if id then if not k then id, k = current_font(), id end context(new_glyph(id,k)) end end context.vrule = context.hrule --~ local hbox, bgroup, egroup = context.hbox, context.bgroup, context.egroup --~ function context.hbox(a,...) --~ if type(a) == "table" then --~ local s = { } --~ if a.width then --~ s[#s+1] = "to " .. a.width -- todo: check for number --~ elseif a.spread then --~ s[#s+1] = "spread " .. a.spread -- todo: check for number --~ end --~ -- todo: dir, attr etc --~ hbox(false,table.concat(s," ")) --~ bgroup() --~ context(string.format(...)) --~ egroup() --~ else --~ hbox(a,...) --~ end --~ end -- not yet used ... but will get variant at the tex end as well function context.sethboxregister(n) context([[\setbox %s\hbox]],n) end function context.setvboxregister(n) context([[\setbox %s\vbox]],n) end function context.starthboxregister(n) if type(n) == "number" then context([[\setbox%s\hbox{]],n) else context([[\setbox\%s\hbox{]],n) end end function context.startvboxregister(n) if type(n) == "number" then context([[\setbox%s\vbox{]],n) else context([[\setbox\%s\vbox{]],n) end end context.stophboxregister = context.egroup context.stopvboxregister = context.egroup function context.flushboxregister(n) if type(n) == "number" then context([[\box%s ]],n) else context([[\box\%s]],n) end end function context.beginvbox() context([[\vbox{]]) -- we can do \bvbox ... \evbox (less tokens) end function context.beginhbox() context([[\hbox{]]) -- todo: use fast one end context.endvbox = context.egroup context.endhbox = context.egroup local function allocate(name,what,cmd) local a = format("c_syst_last_allocated_%s",what) local n = texcount[a] + 1 if n <= texcount.c_syst_max_allocated_register then texcount[a] = n end context("\\global\\expandafter\\%sdef\\csname %s\\endcsname %s\\relax",cmd or what,name,n) return n end function context.newdimen (name) return allocate(name,"dimen") end function context.newskip (name) return allocate(name,"skip") end function context.newcount (name) return allocate(name,"count") end function context.newmuskip(name) return allocate(name,"muskip") end function context.newtoks (name) return allocate(name,"toks") end function context.newbox (name) return allocate(name,"box","mathchar") end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-set-31.mkiv0000644000175000017500000001006711571377075024056 0ustar norbertnorbert% show missing translations \startluacode function interfaces.show_missing(whatinterfaces) whatinterfaces = whatinterfaces or interfaces.interfaces local list = dofile(resolvers.find_file("mult-def.lua")) local NC, NR, HL = context.NC, context.NR, context.HL for k,v in table.sortedhash(list) do context.title(k) context.starttabulate { string.rep("|",#whatinterfaces+1) } for i=1,#whatinterfaces do NC() context(whatinterfaces[i]) end NC() NR() HL() for kk, vv in next, v do if not string.find(kk,"subsub") then local okay = true for i=1,#whatinterfaces do local int = whatinterfaces[i] local str = vv[int] if not str or (int ~= "en" and str == vv.en) then okay = false break end end if not okay then for i=1,#whatinterfaces do local int = whatinterfaces[i] local str = vv[int] context.NC() if not str then -- nothing elseif int == "en" then context.color( { "darkgreen" }, str ) elseif str == vv.en then context.color( { "darkred" }, str ) elseif int == "pe" then context("\\righttoleft " .. str) else context(str) end end NC() NR() end end end context.stoptabulate() end end function interfaces.show_missing_messages(whatinterfaces) whatinterfaces = whatinterfaces or interfaces.interfaces local list = dofile(resolvers.find_file("mult-mes.lua")) local NC, NR, HL = context.NC, context.NR, context.HL for k,v in table.sortedhash(list) do context.title("message: " .. k) context.starttabulate { "|l|" .. string.rep("pl|",#whatinterfaces) } NC() for i=1,#whatinterfaces do NC() context(whatinterfaces[i]) end NC() NR() HL() local sorted = table.sortedkeys(v) for i=1,#sorted do local kk = sorted[i] local vv = v[kk] if kk ~= "files" then local okay = true for i=1,#whatinterfaces do local int = whatinterfaces[i] local str = vv[int] if not str or (int ~= "en" and str == vv.en) then okay = false break end end if not okay then context.NC() context(kk) for i=1,#whatinterfaces do local int = whatinterfaces[i] local str = vv[int] NC() if not str then -- nothing elseif int == "en" then context.color( { "darkgreen" }, str ) elseif str == vv.en then context.color( { "darkred" }, str ) elseif int == "pe" then context("\\righttoleft " .. str) else context(str) end end NC() NR() end end end context.stoptabulate() end end \stopluacode \starttext \setupbodyfont[dejavu,7pt,tt] \setuppapersize[A4,landscape][A4,landscape] \setuplayout[backspace=.5cm,width=middle,topspace=.5cm,height=middle,header=1cm,footer=0cm] \startluacode interfaces.show_missing() -- { "en","nl" } interfaces.show_missing_messages() -- { "en","nl" } \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-brk.mkiv0000644000175000017500000000601312130411274024323 0ustar norbertnorbert%D \module %D [ file=typo-brk, %D version=2009.03.27, % code moved from core-spa.mkiv %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Breakpoints, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Typesetting Macros / Breakpoints} \unprotect % hm, we cannot prebuild lists, font dependent % % -- type nleft nright language left right middle % % -- we might eventually stick to only method 5 \registerctxluafile{typo-brk}{1.001} \definesystemattribute[breakpoint][public,global] \exhyphenchar\minusone % we use a different order then base tex, so we really need this \unexpanded\def\definebreakpoints {\dosingleargument\typo_breakpoints_define} \def\typo_breakpoints_define[#1]% {\ctxcommand{definebreakpoints("#1")}} \def\definebreakpoint {\dotripleempty\typo_breakpoints_define_character} \def\typo_breakpoints_define_character[#1][#2][#3]% name char settings {\begingroup \getdummyparameters[\c!type=1,\c!nleft=3,\c!nright=3,\s!language=,\c!left=,\c!right=,\c!middle=,#3]% \ctxcommand{definebreakpoint("#1", "#2", "\reallanguagetag{\directdummyparameter\s!language}", { % maybe deal with #3 at the lua end type = \directdummyparameter\c!type, nleft = "\directdummyparameter\c!nleft", nright = "\directdummyparameter\c!nright", right = "\directdummyparameter\c!right", left = "\directdummyparameter\c!left", middle = "\directdummyparameter\c!middle" } )}% \endgroup} \unexpanded\def\setbreakpoints[#1]% {\ctxcommand{setbreakpoints("#1")}} \unexpanded\def\resetbreakpoints {\attribute\breakpointattribute\attributeunsetvalue} \definebreakpoints[compound] \definebreakpoint [compound] [+] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right= \definebreakpoint [compound] [-] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right= \definebreakpoint [compound] [/] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right= \definebreakpoint [compound] [(] [\c!nleft=3,\c!nright=3,\c!type=2] % type=5,middle=(,left=(-,right= \definebreakpoint [compound] [)] [\c!nleft=3,\c!nright=3,\c!type=3] % type=5,middle=),left=,right=-) \let\installbreakpoint\definebreakpoint % for a while % \start \hsize 1.5cm \setbreakpoints[compound] % \definebreakpoint [compound] [-] [nleft=3,nright=3,type=5,left=,right={-},middle={-}] % \definebreakpoint [compound] [(] [nleft=3,nright=3,type=5,left=,right={(-},middle={(}] % \definebreakpoint [compound] [)] [nleft=3,nright=3,type=5,left={-)},right=,middle={)}] % composed-word\par composed(word)\par % \stop % \mainlanguage[czech] % \definebreakpoint [compound] [\number`-] [language=cs,nleft=3,nright=3,type=4] % \setbreakpoints[compound] % \start \hsize 1mm test-test \par \stop %D Maybe some day default: % % \setbreakpoints[compound] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-stc.mkvi0000644000175000017500000007717612130411274024316 0ustar norbertnorbert%D \module %D [ file=math-stc, %D version=2012.12.29, %D title=\CONTEXT\ Math Macros, %D subtitle=Stackers, %D comment=This replaces math-arr and friends, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Math Macros / Stackers} \unprotect %D At some point the \MKII\ arrow mechanism has been converted to \MKIV, but we kept %D most of the logic. We now have a more generic variant dealing with extensibles. %D There are a few demands than we need to meet: %D %D \startitemize %D \startitem The width of the extensible need to adapt itself automatically. \stopitem %D \startitem We need to be able to control horizontal and vertical offsets. \stopitem %D \startitem We best have a math as well as a text variant (which is handy for chemistry). \stopitem %D \startitem For historic reasons we need to deal with optional arguments in a special (reverse) way. \stopitem %D \startitem We need alternatives for extensibles on top, in the middle and at the bottom. \stopitem %D \stopitemize %D %D After I had experimented a bit with virtual characters for two headed arrows I %D discussed the issue with the Gyre folks and we came to the conclusion that it %D made sense to have real extensibles instead of constructing them out of snippets. %D After all, \OPENTYPE\ math provides for it. So, in December 2013 beta versions of %D Latin Modern and Gyre fonts came available that had these! Because we still want %D to support the traditional Latin Modern Virtual math font those were extended %D with a couple of virtual extensibles as well. %D %D {\em For the moment we still have some mess here: we can deal with known dimensions, but %D fillers (like \type {\rightarrowfil} don't work with \OPENTYPE\ extensibles yet %D because there is no way to let them stretch like leaders. At some point \LUATEX\ %D might provide a auto||fit||to||encapsulated||box and if not I will cook up a \LUA\ %D based variant.} %D %D We could mess with something like \type {$mid\limits^{top}_{bottom}$} but we like %D a bit more control. At some point we need to add some hacks to get exports %D working well. %D %D In the end we have a more flexible mechanism which also handles text variants. % possible improvements: % % - we could skip the left/right offsets when offset=normal, this saves some access time % at the lua end and some checking: use \mathhorizontalcode or \mathextensiblecode % but in practice arrows etc are not used that often \installcorenamespace {mathextensiblefallbacks} \def\math_stackers_fallback {\hbox to \scratchwidth{\csname\??mathextensiblefallbacks\ifcsname\??mathextensiblefallbacks\number\scratchunicode\endcsname\number\scratchunicode\fi\endcsname}} %{\csname\??mathextensiblefallbacks\ifcsname\??mathextensiblefallbacks\number\scratchunicode\endcsname\number\scratchunicode\fi\endcsname } \def\math_stackers_regular {\mathstylehbox{\Umathaccent\fam\zerocount\scratchunicode{\hskip\scratchwidth}}} \def\math_stackers_stretch % we don't have that one yet {\mathstylehbox{\Umathaccent\fam\zerocount\scratchunicode{\hskip\hsize}}} \setvalue{\??mathextensiblefallbacks}{\hbox{\vrule\!!width\scratchwidth\!!height.1\exheight\!!depth\zeropoint}} \def\math_stackers_with_fallback#codepoint% {\begingroup \scratchunicode#codepoint\relax \ifcase\mathextensiblecode\fam\scratchunicode\relax \math_stackers_fallback \else \math_stackers_stretch \fi \endgroup} %D We don't really need this because we can assume that fonts have the right %D extensibles. If needed I will make a general virtual extender for \OPENTYPE\ %D fonts. %D %D Because we have quite some control over positioning, we have somewhat extensive %D tracing built in. \let\math_stackers_top \relax \let\math_stackers_middle\relax \let\math_stackers_bottom\relax \let\math_stackers_skip \hskip \installtextracker {math.stackers.texts} {\let\math_stackers_top \filledhboxb \let\math_stackers_middle\filledhboxr \let\math_stackers_bottom\filledhboxg \let\math_stackers_skip \math_stackers_skip_indeed} {\let\math_stackers_top \relax \let\math_stackers_middle\relax \let\math_stackers_bottom\relax \let\math_stackers_skip \hskip} \def\math_stackers_skip_indeed#amount% {\filledhboxk{\unsetteststrut\strut\hskip#amount}} % \dontshowstruts %D We define a full featured command handler. \installcorenamespace {mathstackers} \installcommandhandler \??mathstackers {mathstackers} \??mathstackers \setupmathstackers [%c!alternative=\v!text, % text | mathematics \c!left=, \c!right=, \c!voffset=.25\exheight, \c!hoffset=.5\emwidth, \c!minheight=\exheight, \c!mindepth=\zeropoint, \c!minwidth=\emwidth, \c!order=\v!normal, \c!strut=, %\c!color=, % todo: when I need it \c!topcommand=, \c!middlecommand=, \c!bottomcommand=, \c!offset=\v!normal, % normal | min | max \c!location=\v!top] % none | normal | small | medium | big %D We assume that the middle characters (that can be an extensible) to sit on %D top of the baseline by default. \installcorenamespace {mathstackerslocation} \letvalue{\??mathstackerslocation\v!top }\plusone % on top of baseline \letvalue{\??mathstackerslocation\v!high }\plustwo % 25 % down \letvalue{\??mathstackerslocation\v!middle }\plusthree % centered \letvalue{\??mathstackerslocation\v!low }\plusfour % 75 % down \letvalue{\??mathstackerslocation\v!bottom }\plusfive % below baseline \letvalue{\??mathstackerslocation }\zerocount %D First we implement the helper that deals with an extensible in the middle and %D top and|/|or bottom texts: \let\m_math_stackers_text_top \empty \let\m_math_stackers_text_bottom\empty \let\m_math_stackers_text_middle\empty \def\math_stackers_flushtext#command#text% {\ifdim\scratchleftoffset >\zeropoint\math_stackers_skip\scratchleftoffset \fi \ifx\p_strut\v!no \else \strut \fi \mathstackersparameter#command#text% \ifdim\scratchrightoffset>\zeropoint\math_stackers_skip\scratchrightoffset\fi} \def\math_stackers_toptext {\math_stackers_flushtext\c!topcommand \m_math_stackers_text_top } \def\math_stackers_bottomtext{\math_stackers_flushtext\c!bottomcommand\m_math_stackers_text_bottom} \def\math_stackers_middletext{\math_stackers_flushtext\c!middlecommand\m_math_stackers_text_middle} \def\math_stackers_content {\ifcase\scratchcounter \math_stackers_fallback \or % left \math_stackers_regular \or % right \math_stackers_regular \or % horizontal \math_stackers_regular \else \math_stackers_fallback \fi} \def\math_stackers_check_unicode#codepoint% {\scratchunicode#codepoint\relax \scratchhoffset\mathstackersparameter\c!hoffset\relax \scratchvoffset\mathstackersparameter\c!voffset\relax \scratchcounter\mathhorizontalcode\fam\scratchunicode\relax % also sets \leftscratchoffset and \rightscratchoffset \ifx\p_offset\v!max % heads/tails + hoffset \else\ifx\p_offset\v!min % heads/tails - hoffset \advance\scratchleftoffset-\scratchhoffset \advance\scratchrightoffset-\scratchhoffset \else % \v!normal % hoffset \scratchleftoffset\zeropoint \scratchrightoffset\zeropoint \fi\fi \ifdim\scratchleftoffset<\zeropoint \scratchleftoffset\zeropoint \fi \ifdim\scratchrightoffset<\zeropoint \scratchrightoffset\zeropoint \fi} \def\math_stackers_normalize_three {\scratchheight\ht\scratchboxthree \scratchdepth \dp\scratchboxthree \scratchtopoffset \scratchheight \scratchbottomoffset\scratchdepth \scratchdimen\mathstackersparameter\c!minheight\relax \ifdim\scratchheight<\scratchdimen \scratchheight\scratchdimen \ht\scratchboxthree\scratchheight \fi \scratchdimen\mathstackersparameter\c!mindepth\relax \ifdim\scratchdepth<\scratchdimen \scratchdepth\scratchdimen \dp\scratchboxthree\scratchdepth \fi \advance\scratchtopoffset -\scratchheight \advance\scratchbottomoffset-\scratchdepth \ifdim\scratchtopoffset<\zeropoint \scratchtopoffset\zeropoint \fi \ifdim\scratchbottomoffset<\zeropoint \scratchbottomoffset\zeropoint \fi} \unexpanded\def\math_stackers_triplet#method#category#codepoint#toptext#bottomtext% {\begingroup \edef\currentmathstackers{#category}% \mathstackersparameter\c!left\relax \ifmmode\mathrel\else\dontleavehmode\fi {\edef\p_offset {\mathstackersparameter\c!offset}% \edef\p_location{\mathstackersparameter\c!location}% \edef\p_order {\mathstackersparameter\c!order}% \edef\p_strut {\mathstackersparameter\c!strut}% \ifx\p_order\v!reverse \edef\m_math_stackers_text_top {#bottomtext}% \edef\m_math_stackers_text_bottom{#toptext}% \else \edef\m_math_stackers_text_top {#toptext}% \edef\m_math_stackers_text_bottom{#bottomtext}% \fi \scratchleftoffset \zeropoint \scratchrightoffset\zeropoint \ifcase#method\relax \math_stackers_check_unicode{#codepoint}% \else \edef\m_math_stackers_text_middle{#codepoint}% \fi \ifx\m_math_stackers_text_top\empty \setbox\scratchboxone\emptyhbox \else \setmathsmalltextbox\scratchboxone\hbox{\math_stackers_toptext}% \fi \ifx\m_math_stackers_text_bottom\empty \setbox\scratchboxtwo\emptyhbox \else \setmathsmalltextbox\scratchboxtwo\hbox{\math_stackers_bottomtext}% \fi % \ifcase#method\relax \scratchwidth\wd \ifdim\wd\scratchboxone>\wd\scratchboxtwo \scratchboxone \else \scratchboxtwo \fi \relax \else \ifx\m_math_stackers_text_middle\empty \setbox\scratchboxthree\emptyhbox \else \setmathtextbox\scratchboxthree\hbox{\math_stackers_middletext}% \fi \scratchwidth\wd \ifdim\wd\scratchboxone>\wd\scratchboxtwo \scratchboxone \else\ifdim\wd\scratchboxtwo>\wd\scratchboxthree \scratchboxtwo \else \scratchboxthree \fi\fi \relax \fi % \scratchdimen\mathstackersparameter\c!minwidth\relax \ifdim\scratchwidth<\scratchdimen \scratchwidth\scratchdimen \fi \advance\scratchwidth2\scratchhoffset % \ifcase#method\relax \setbox\scratchboxthree\math_stackers_content \fi % \ifdim\wd\scratchboxone<\scratchwidth \setbox\scratchboxone\hbox to \scratchwidth{\hss\box\scratchboxone\hss}% \fi \ifdim\wd\scratchboxtwo<\scratchwidth \setbox\scratchboxtwo\hbox to \scratchwidth{\hss\box\scratchboxtwo\hss}% \fi \ifdim\wd\scratchboxthree<\scratchwidth \setbox\scratchboxthree\hbox to \scratchwidth{\hss\box\scratchboxthree\hss}% \fi % \ifcsname\??mathstackerslocation\p_location\endcsname \ifcase\csname\??mathstackerslocation\p_location\endcsname\relax \scratchdistance\zeropoint \or % top \scratchdistance\zeropoint \or % high \scratchdistance.25\htdp\scratchboxthree \or % centered \scratchdistance.5\htdp\scratchboxthree \or % low \scratchdistance.75\htdp\scratchboxthree \or % bottom \scratchdistance\htdp\scratchboxthree \else \scratchdistance\zeropoint \fi \else \scratchdistance\p_location\htdp\scratchboxthree \fi % \ifzeropt\scratchdistance\else \setbox\scratchboxthree\hbox{\lower\scratchdistance\box\scratchboxthree}% \fi % \math_stackers_normalize_three % \math_stackers_middle\bgroup \box\scratchboxthree \egroup % \ifdim\htdp\scratchboxone>\zeropoint \scratchoffset\dimexpr\scratchvoffset \kern-\scratchwidth \math_stackers_top\bgroup \raise\dimexpr\dp\scratchboxone+\scratchheight+\scratchoffset+\scratchtopoffset\relax \box\scratchboxone \egroup \fi % \ifdim\htdp\scratchboxtwo>\zeropoint \scratchoffset\dimexpr\scratchvoffset \kern-\scratchwidth \math_stackers_bottom\bgroup \lower\dimexpr\ht\scratchboxtwo+\scratchdepth+\scratchoffset+\scratchbottomoffset\relax \box\scratchboxtwo \egroup \fi}% \mathstackersparameter\c!right\relax \endgroup} \unexpanded\def\definemathextensible {\dotripleempty\math_stackers_define_normal} \def\math_stackers_define_normal[#1][#2][#3]% category name unicode {\ifthirdargument \setuevalue{#2}{\math_stackers_auto_normal{#1}{\number#3}}% \else \setuevalue{#1}{\math_stackers_auto_normal\noexpand\currentmathstackers{\number#2}}% \fi} \unexpanded\def\math_stackers_auto_normal#category#codepoint% {\begingroup \edef\currentmathstackers{#category}% \scratchcounter#codepoint\relax \dosingleempty\math_stackers_auto_normal_first} \unexpanded\def\math_stackers_auto_normal_first[#category]% [#2]% #2 gobble spaces {\iffirstargument\edef\currentmathstackers{#category}\fi \permitspacesbetweengroups \dodoublegroupempty\math_stackers_auto_normal_second} \def\math_stackers_auto_normal_second#toptext#bottomtext% {\math_stackers_triplet\zerocount\currentmathstackers\scratchcounter{#toptext}{#bottomtext}% \endgroup} %D A few direct accessors: \unexpanded\def\mathextensible{\begingroup\dosingleempty\math_stackers_handle_math} \unexpanded\def\textextensible{\begingroup\dosingleempty\math_stackers_handle_text} \unexpanded\def\math_stackers_handle_math[#category]% {\math_stackers_handle_extensible{\iffirstargument#category\else\v!mathematics\fi}} % will be defined later on \unexpanded\def\math_stackers_handle_text[#category]% {\math_stackers_handle_extensible{\iffirstargument#category\else\v!text \fi}} % will be defined later on \def\math_stackers_handle_extensible#category#codepoint#toptext#bottomtext% {\math_stackers_triplet\zerocount{#category}{#codepoint}{#toptext}{#bottomtext}% \endgroup} %D The next one deals with under and over extensibles (arrows mostly): \unexpanded\def\math_stackers_double#where#category#codepoint#text% {\begingroup \edef\currentmathstackers{#category}% \mathstackersparameter\c!left\relax \ifmmode\mathrel\else\dontleavehmode\fi {\edef\currentmathstackers{#category}% \edef\m_math_stackers_text_middle {#text}% % \edef\p_offset {\mathstackersparameter\c!offset}% \edef\p_location{\mathstackersparameter\c!location}% \edef\p_strut {\mathstackersparameter\c!strut}% % \scratchleftoffset \zeropoint \scratchrightoffset\zeropoint % \math_stackers_check_unicode{#codepoint}% % \ifx\currentmathtext\empty \setbox\scratchboxthree\emptyhbox \else \setmathtextbox\scratchboxthree\hbox{\math_stackers_middletext}% \fi \scratchwidth\wd\scratchboxthree % \scratchdimen\mathstackersparameter\c!minwidth\relax \ifdim\scratchwidth<\scratchdimen \scratchwidth\scratchdimen \fi \advance\scratchwidth2\scratchhoffset % \setbox\scratchboxtwo \math_stackers_content \setbox\scratchboxthree\hbox to \scratchwidth{\hss\box\scratchboxthree\hss}% % \math_stackers_normalize_three % \math_stackers_middle\bgroup \box\scratchboxthree \egroup % \ifdim\htdp\scratchboxtwo>\zeropoint \kern-\scratchwidth \ifcase#where\relax \math_stackers_top\bgroup \raise\dimexpr\scratchheight+\scratchtopoffset\relax \box\scratchboxtwo \egroup \else \math_stackers_bottom\bgroup \lower\dimexpr\scratchdepth+\ht\scratchboxtwo+\scratchbottomoffset\relax \box\scratchboxtwo \egroup \fi \fi}% \mathstackersparameter\c!right\relax \endgroup} \unexpanded\def\definemathoverextensible {\dotripleempty\math_extensiblies_define_over } \unexpanded\def\definemathunderextensible{\dotripleempty\math_extensiblies_define_under} \def\math_extensiblies_define_over[#1][#2][#3]% {\ifthirdargument \setuevalue{#2}{\math_stackers_double\zerocount{#1}{\number#3}}% \else \setuevalue{#1}{\math_stackers_double\zerocount\noexpand\currentmathstackers{\number#2}}% \fi} \def\math_extensiblies_define_under[#1][#2][#3]% {\ifthirdargument \setuevalue{#2}{\math_stackers_double\plusone{#1}{\number#3}}% \else \setuevalue{#1}{\math_stackers_double\plusone\noexpand\currentmathstackers{\number#2}}% \fi} \unexpanded\def\mathover {\begingroup\dosingleempty\math_stackers_handle_over } \unexpanded\def\mathunder{\begingroup\dosingleempty\math_stackers_handle_under} \def\math_stackers_handle_over[#category]% {\math_stackers_handle_double\zerocount{\iffirstargument#category\else\v!top \fi}} % will be defined later on \def\math_stackers_handle_under[#category]#codepoint#bottomtext% {\math_stackers_handle_double\plusone {\iffirstargument#category\else\v!bottom\fi}} % will be defined later on \def\math_stackers_handle_double#location#category#codepoint#text% {\math_stackers_double#location{#category}{#codepoint}{#text}% \endgroup} %D Here is a bonus macro that takes three texts. It can be used to get consistent %D mixed usage. \unexpanded\def\mathtriplet {\begingroup \dosingleempty\math_stackers_handle_triplet} \def\math_stackers_handle_triplet[#category]#middletext#toptext#bottomtext% {\math_stackers_triplet\plusone{\iffirstargument#category\else\currentmathstackers\fi}{#middletext}{#toptext}{#bottomtext}% \endgroup} \unexpanded\def\definemathtriplet {\dotripleempty\math_stackers_define_triplet} \def\math_stackers_define_triplet[#1][#2][#3]% category name default {\ifthirdargument \setuevalue{#2}{\math_stackers_auto_triplet_yes{#1}{#3}}% \else\ifsecondargument \setuevalue{#2}{\math_stackers_auto_triplet_nop{#1}}% \else \setuevalue{#1}{\math_stackers_auto_triplet_nop\noexpand\currentmathstackers}% \fi\fi} \unexpanded\def\math_stackers_auto_triplet_yes#category#middletext% {\begingroup \edef\currentmathstackers {#category}% \def \m_math_stackers_text_middle{#middletext}% \dosingleempty\math_stackers_auto_triplet_yes_first} \unexpanded\def\math_stackers_auto_triplet_yes_first[#category]% [#2]% #2 gobble spaces {\iffirstargument\edef\currentmathstackers{#category}\fi \permitspacesbetweengroups \dodoublegroupempty\math_stackers_auto_triplet_yes_second} \def\math_stackers_auto_triplet_yes_second#toptext#bottomtext% {\math_stackers_triplet\plusone\currentmathstackers\m_math_stackers_text_middle{#toptext}{#bottomtext}% \endgroup} \unexpanded\def\math_stackers_auto_triplet_nop#category% {\begingroup \edef\currentmathstackers{#category}% \dosingleempty\math_stackers_auto_triplet_nop_first} \unexpanded\def\math_stackers_auto_triplet_nop_first[#category]% [#2]% #2 gobble spaces {\iffirstargument\edef\currentmathstackers{#category}\fi \permitspacesbetweengroups \dotriplegroupempty\math_stackers_auto_triplet_nop_second} \def\math_stackers_auto_triplet_nop_second#middletext#toptext#bottomtext% {\math_stackers_triplet\plusone\currentmathstackers{#middletext}{#toptext}{#bottomtext}% \endgroup} %D Definitions: \definemathstackers [\v!mathematics] [\c!topcommand=\mathematics, \c!middlecommand=\mathematics, \c!bottomcommand=\mathematics] \definemathstackers [\s!math] [\v!mathematics] \definemathstackers [\v!text] [\v!mathematics] [\c!topcommand=, \c!middlecommand=\mathematics, \c!bottomcommand=] \definemathstackers [\v!reverse] [\v!mathematics] [\c!order=\v!reverse] \definemathstackers [\v!top] [\v!mathematics] [\c!location=\v!top, \c!strut=\v!no, \c!middlecommand=\mathematics, \c!hoffset=\zeropoint] \definemathstackers [\v!bottom] [\v!mathematics] [\c!location=\v!top, \c!strut=\v!no, \c!middlecommand=\mathematics, \c!hoffset=\zeropoint] % These are compatibity definitions, math only. \definemathstackers [\v!none] [\v!mathematics] [\c!hoffset=\zeropoint] \definemathstackers [\v!normal] [\v!mathematics] [\c!hoffset=0.5\emwidth] % the default \definemathstackers [\v!small] [\v!mathematics] [\c!hoffset=1\emwidth] \definemathstackers [\v!medium] [\v!mathematics] [\c!hoffset=1.5\emwidth] \definemathstackers [\v!big] [\v!mathematics] [\c!hoffset=2\emwidth] \definemathextensible [\v!reverse] [xrel] ["002D] \definemathextensible [\v!reverse] [xequal] ["003D] \definemathextensible [\v!reverse] [xleftarrow] ["2190] \definemathextensible [\v!reverse] [xrightarrow] ["2192] \definemathextensible [\v!reverse] [xtwoheadleftarrow] ["219E] \definemathextensible [\v!reverse] [xtwoheadrightarrow] ["21A0] \definemathextensible [\v!reverse] [xmapsto] ["21A6] \definemathextensible [\v!reverse] [xhookleftarrow] ["21A9] \definemathextensible [\v!reverse] [xhookrightarrow] ["21AA] \definemathextensible [\v!reverse] [xleftharpoondown] ["21BD] \definemathextensible [\v!reverse] [xleftharpoonup] ["21BC] \definemathextensible [\v!reverse] [xrightharpoondown] ["21C1] \definemathextensible [\v!reverse] [xrightharpoonup] ["21C0] \definemathextensible [\v!reverse] [xrightoverleftarrow] ["21C4] \definemathextensible [\v!reverse] [xleftrightharpoons] ["21CB] \definemathextensible [\v!reverse] [xrightleftharpoons] ["21CC] \definemathextensible [\v!reverse] [xtriplerel] ["2261] \definemathextensible [\v!reverse] [xleftrightarrow] ["27F7] \definemathextensible [\v!reverse] [xLeftarrow] ["27F8] \definemathextensible [\v!reverse] [xRightarrow] ["27F9] \definemathextensible [\v!reverse] [xLeftrightarrow] ["27FA] \definemathextensible [\v!mathematics] [mrel] ["002D] \definemathextensible [\v!mathematics] [mequal] ["003D] \definemathextensible [\v!mathematics] [mleftarrow] ["2190] \definemathextensible [\v!mathematics] [mrightarrow] ["2192] \definemathextensible [\v!mathematics] [mtwoheadleftarrow] ["219E] \definemathextensible [\v!mathematics] [mtwoheadrightarrow] ["21A0] \definemathextensible [\v!mathematics] [mmapsto] ["21A6] \definemathextensible [\v!mathematics] [mhookleftarrow] ["21A9] \definemathextensible [\v!mathematics] [mhookrightarrow] ["21AA] \definemathextensible [\v!mathematics] [mleftharpoondown] ["21BD] \definemathextensible [\v!mathematics] [mleftharpoonup] ["21BC] \definemathextensible [\v!mathematics] [mrightharpoondown] ["21C1] \definemathextensible [\v!mathematics] [mrightharpoonup] ["21C0] \definemathextensible [\v!mathematics] [mrightoverleftarrow] ["21C4] \definemathextensible [\v!mathematics] [mleftrightharpoons] ["21CB] \definemathextensible [\v!mathematics] [mrightleftharpoons] ["21CC] \definemathextensible [\v!mathematics] [mtriplerel] ["2261] \definemathextensible [\v!mathematics] [mleftrightarrow] ["27F7] \definemathextensible [\v!mathematics] [mLeftarrow] ["27F8] \definemathextensible [\v!mathematics] [mRightarrow] ["27F9] \definemathextensible [\v!mathematics] [mLeftrightarrow] ["27FA] \definemathextensible [\v!text] [trel] ["002D] \definemathextensible [\v!text] [tequal] ["003D] \definemathextensible [\v!text] [tleftarrow] ["2190] \definemathextensible [\v!text] [trightarrow] ["2192] \definemathextensible [\v!text] [ttwoheadleftarrow] ["219E] \definemathextensible [\v!text] [ttwoheadrightarrow] ["21A0] \definemathextensible [\v!text] [tmapsto] ["21A6] \definemathextensible [\v!text] [thookleftarrow] ["21A9] \definemathextensible [\v!text] [thookrightarrow] ["21AA] \definemathextensible [\v!text] [tleftharpoondown] ["21BD] \definemathextensible [\v!text] [tleftharpoonup] ["21BC] \definemathextensible [\v!text] [trightharpoondown] ["21C1] \definemathextensible [\v!text] [trightharpoonup] ["21C0] \definemathextensible [\v!text] [trightoverleftarrow] ["21C4] \definemathextensible [\v!text] [tleftrightharpoons] ["21CB] \definemathextensible [\v!text] [trightleftharpoons] ["21CC] \definemathextensible [\v!text] [ttriplerel] ["2261] \definemathextensible [\v!text] [tleftrightarrow] ["27F7] \definemathextensible [\v!text] [tLeftarrow] ["27F8] \definemathextensible [\v!text] [tRightarrow] ["27F9] \definemathextensible [\v!text] [tLeftrightarrow] ["27FA] \definemathoverextensible [\v!top] [overleftarrow] ["2190] \definemathoverextensible [\v!top] [overrightarrow] ["2192] \definemathoverextensible [\v!top] [overleftharpoondown] ["21BD] \definemathoverextensible [\v!top] [overleftharpoonup] ["21BC] \definemathoverextensible [\v!top] [overrightharpoondown] ["21C1] \definemathoverextensible [\v!top] [overrightharpoonup] ["21C0] \definemathoverextensible [\v!top] [overleftrightarrow] ["27F7] \definemathoverextensible [\v!top] [overtwoheadleftarrow] ["27F8] \definemathoverextensible [\v!top] [overtwoheadrightarrow] ["27F9] \definemathunderextensible [\v!bottom] [underleftarrow] ["2190] \definemathunderextensible [\v!bottom] [underrightarrow] ["2192] \definemathunderextensible [\v!bottom] [underleftharpoondown] ["21BD] \definemathunderextensible [\v!bottom] [underleftharpoonup] ["21BC] \definemathunderextensible [\v!bottom] [underrightharpoondown] ["21C1] \definemathunderextensible [\v!bottom] [underrightharpoonup] ["21C0] \definemathunderextensible [\v!bottom] [underleftrightarrow] ["27F7] \definemathunderextensible [\v!bottom] [undertwoheadleftarrow] ["27F8] \definemathunderextensible [\v!bottom] [undertwoheadrightarrow] ["27F9] %D Some bonus ones (for the moment here): \definemathstackers [\v!chemistry] [\c!offset=\v!max, \c!left=\enspace, \c!right=\enspace, \c!hoffset=.5\emwidth] \definemathextensible [\v!chemistry] [cleftarrow] ["2190] \definemathextensible [\v!chemistry] [crightarrow] ["2192] \definemathextensible [\v!chemistry] [crightoverleftarrow] ["21C4] % for the moment: \def\math_stackers_hacked_fill#1#2#3% {\mathematics {\begingroup \mathsurround\zeropoint \thickmuskip \zeromuskip \medmuskip \zeromuskip \thinmuskip \zeromuskip #1% \mkern-7\onemuskip \cleaders\mathstylehbox{\mkern-2\onemuskip#2\mkern-2\onemuskip}\hfill \mkern-7\onemuskip #3% \endgroup}} % These will be defined in char-def as well: \unexpanded\def\rightarrowfill {\math_stackers_hacked_fill \relbar \relbar \rightarrow} \unexpanded\def\leftarrowfill {\math_stackers_hacked_fill \leftarrow \relbar \relbar } \unexpanded\def\rightoverleftarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillleftend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillrightend} \unexpanded\def\equalfill {\math_stackers_hacked_fill \Relbar \Relbar \Relbar} \unexpanded\def\Rightarrowfill {\math_stackers_hacked_fill \Relbar \Relbar \Rightarrow} \unexpanded\def\Leftarrowfill {\math_stackers_hacked_fill \Leftarrow \Relbar \Relbar} \unexpanded\def\Leftrightarrowfill {\math_stackers_hacked_fill \Leftarrow \Relbar \Rightarrow} \unexpanded\def\leftrightarrowfill {\math_stackers_hacked_fill \leftarrow \relbar \rightarrow} \unexpanded\def\mapstofill {\math_stackers_hacked_fill{\mapstochar\relbar} \relbar \rightarrow} \unexpanded\def\twoheadrightarrowfill {\math_stackers_hacked_fill \relbar \relbar \twoheadrightarrow} \unexpanded\def\twoheadleftarrowfill {\math_stackers_hacked_fill \twoheadleftarrow \relbar \relbar} \unexpanded\def\rightharpoondownfill {\math_stackers_hacked_fill \relbar \relbar \rightharpoondown} \unexpanded\def\rightharpoonupfill {\math_stackers_hacked_fill \relbar \relbar \rightharpoonup} \unexpanded\def\leftharpoondownfill {\math_stackers_hacked_fill \leftharpoondown \relbar \relbar} \unexpanded\def\leftharpoonupfill {\math_stackers_hacked_fill \leftharpoonup \relbar \relbar} \unexpanded\def\hookleftfill {\math_stackers_hacked_fill \leftarrow \relbar {\relbar\joinrel\rhook}} \unexpanded\def\hookrightfill {\math_stackers_hacked_fill{\lhook\joinrel\relbar} \relbar \rightarrow} \unexpanded\def\relfill {\math_stackers_hacked_fill \relbar \relbar \relbar} \unexpanded\def\triplerelfill {\math_stackers_hacked_fill \equiv \equiv \equiv} \unexpanded\def\singlebond {{\xrel}} % or \def\singlebond{{\xrel[2]}} \unexpanded\def\doublebond {{\xequal}} \unexpanded\def\triplebond {{\xtriplerel}} \unexpanded\def\defineextensiblefiller {\dodoubleargument\math_stackers_define_filler} \def\math_stackers_define_filler[#1][#2]% {\setuevalue{#1}{\leaders\number#2\hfill}} %D For the moment: \def\math_stackers_define_filler[#1][#2]% {\expandafter\let\csname\??mathextensiblefallbacks\number#2\expandafter\endcsname\csname#1\endcsname \expandafter\let\csname #1\expandafter\endcsname\csname#1\endcsname} \defineextensiblefiller [relfill] ["002D] \defineextensiblefiller [equalfill] ["003D] \defineextensiblefiller [leftarrowfill] ["2190] \defineextensiblefiller [rightarrowfill] ["2192] \defineextensiblefiller [twoheadleftarrowfill] ["219E] \defineextensiblefiller [twoheadrightarrowfill] ["21A0] \defineextensiblefiller [mapstofill] ["21A6] \defineextensiblefiller [hookleftarrowfill] ["21A9] \defineextensiblefiller [hookrightarrowfill] ["21AA] \defineextensiblefiller [leftharpoondownfill] ["21BD] \defineextensiblefiller [leftharpoonupfill] ["21BC] \defineextensiblefiller [rightharpoondownfill] ["21C1] \defineextensiblefiller [rightharpoonupfill] ["21C0] \defineextensiblefiller [rightoverleftarrowfill] ["21C4] \defineextensiblefiller [leftrightharpoonsfill] ["21CB] \defineextensiblefiller [rightleftharpoonsfill] ["21CC] \defineextensiblefiller [triplerelfill] ["2261] \defineextensiblefiller [leftrightarrowfill] ["27F7] \defineextensiblefiller [Leftarrowfill] ["27F8] \defineextensiblefiller [Rightarrowfill] ["27F9] \defineextensiblefiller [Leftrightarrowfill] ["27FA] %D Extra: \unexpanded\edef\singlebond{\mathematics{\mathsurround\zeropoint\char\number"002D}} \unexpanded\edef\doublebond{\mathematics{\mathsurround\zeropoint\char\number"003D}} \unexpanded\edef\triplebond{\mathematics{\mathsurround\zeropoint\char\number"2261}} % \mathchardef\singlebond"002D % \mathchardef\doublebond"003D % \mathchardef\triplebond"2261 \protect \endinput % \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}} % \limits\normalsuperscript{\box0}\normalsubscript{\box2}}% % $\Uoverdelimiter \defaultmathfamily "2194 {xxxx}$ % $\Udelimiterover \defaultmathfamily "2194 {xxxx}$ % $\Uunderdelimiter\defaultmathfamily "2194 {xxxx}$ % $\Udelimiterunder\defaultmathfamily "2194 {xxxx}$ % $\Udelimiterover \defaultmathfamily "219A {\Udelimiterunder \defaultmathfamily "219B {xxxx}}$ % $a \mathrel{\mathop{\filledhboxr{mid}}}\limits^{\filledhboxg{\strut top}}_{\filledhboxb{\strut bottom}} b$ context-2013.05.28.20130704/texmf-dist/tex/context/base/font-tra.mkiv0000644000175000017500000001767512130411274024326 0ustar norbertnorbert%D \module %D [ file=font-tra, %D version=2009.01.02, % or so %D title=\CONTEXT\ Font Macros, %D subtitle=Tracing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \writestatus{loading}{ConTeXt Font Macros / Tracing} %D \macros %D {showbodyfont} %D %D One can call for a rather simple overview of a bodyfont and the %D relations between its alternative fonts. %D %D \showsetup{showbodyfont} %D %D The current bodyfont (here we omitted the argument) looks like: %D %D \showbodyfont %D %D The implementation is rather straightforward in using %D \type{\halign}. \fetchruntimecommand \showbodyfont {\f!fontprefix\s!run} %D \macros %D {showfontstrip, testminimalbaseline, showminimalbaseline} %D %D The next command can come in handy when combining %D different fonts into a collection (typeface) and %D determining optimal baseline distances. %D %D \showfontstrip \blank \showminimalbaseline \fetchruntimecommand \showfontstrip {\f!fontprefix\s!run} \fetchruntimecommand \testminimalbaseline {\f!fontprefix\s!run} \fetchruntimecommand \showminimalbaseline {\f!fontprefix\s!run} %D \macros %D {showkerning} %D %D A goody is: %D %D \showkerning{Can you guess what kerning is?} \fetchruntimecommand \showkerning {\f!fontprefix\s!run} %D \macros %D {showbodyfontenvironment,showfont,showfontstyle,showligatures} %D %D The current bodyfontenvironment is: %D %D \showbodyfontenvironment %D %D This overview is generated using: %D %D \showsetup{showbodyfontenvironment} \fetchruntimecommand \showbodyfontenvironment {\f!fontprefix\s!run} %D %D The following command generates a fontmap: %D %D \startbuffer %D \showfont[SansBold at 12pt] %D \stopbuffer %D %D \typebuffer %D \getbuffer \fetchruntimecommand \showfont {\f!fontprefix\s!run} \fetchruntimecommand \showfontstyle {\f!fontprefix\s!run} \fetchruntimecommand \showligature {\f!fontprefix\s!run} \fetchruntimecommand \showligatures {\f!fontprefix\s!run} \fetchruntimecommand \showcharratio {\f!fontprefix\s!run} \fetchruntimecommand \showfontparameters {\f!fontprefix\s!run} \unexpanded\def\showchardata #1{\ctxcommand{showchardata("#1")}} \unexpanded\def\showfontdata {\ctxcommand{showfontparameters()}} %D \macros %D {doiffontpresentelse} %D %D \starttyping %D \doiffontpresentelse{texnansi-lmr10}{YES}{NO} %D \doiffontpresentelse{adam-lindsay-modern-serif}{YES}{NO} %D \stoptyping \unexpanded\def\doiffontpresentelse#1{\ctxcommand{doifelse(fonts.names.exists("#1"))}} % experimental, maybe this becomes a module \newbox\otfcollector \unexpanded\def\startotfcollecting{\ctxlua{nodes.tracers.steppers.start()}} \unexpanded\def\stopotfcollecting {\ctxlua{nodes.tracers.steppers.stop()}} \unexpanded\def\resetotfcollecting{\ctxlua{nodes.tracers.steppers.reset()}} % Rather experimental: % % \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{الضَّرَّ} \page % \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{لِلّٰهِ} \page \unexpanded\def\showotfstepglyphs#1% {\ctxlua{nodes.tracers.steppers.glyphs(\number\otfcollector,#1)}% \unhbox\otfcollector} \unexpanded\def\otfstepcharcommand#1#2#3% font char class {\removeunwantedspaces \hskip.5\emwidth \s!plus .125\emwidth\relax \doif{#3}{mark}{\underbar}{U+\hexnumber{#2}}:\ruledhbox{\ctxlua{nodes.tracers.fontchar(#1,#2)}}% \hskip.5\emwidth \s!plus .125\emwidth\relax} \unexpanded\def\otfstepfontcommand#1#2#3% id font size {\begingroup \tttf #1: #2 @ \the\dimexpr#3\scaledpoint\relax \endgroup} \unexpanded\def\otfstepmessagecommand#1#2% {\begingroup \tttf\language\minusone \veryraggedright \forgetparindent \forgeteverypar \hangindent\emwidth \hangafter\plusone \dontleavehmode\detokenize{#1}\removeunwantedspaces \doifsomething{#2}{,\space\detokenize{#2}}\endgraf \endgroup \blank} \unexpanded\def\showotfstepfont {\ctxlua{nodes.tracers.steppers.font("otfstepfontcommand")}} \unexpanded\def\showotfstepchars#1% {\ctxlua{nodes.tracers.steppers.codes(#1,"otfstepcharcommand")}} \unexpanded\def\showotfstepmessages#1% {\ctxlua{nodes.tracers.steppers.messages(#1,"otfstepmessagecommand",true)}} \unexpanded\def\showotfstepfeatures {\ctxlua{nodes.tracers.steppers.features()}} \unexpanded\def\otfnoffeaturesteps {\ctxlua{nodes.tracers.steppers.nofsteps()}} % \unexpanded\def\showotfsteps % {\begingroup % \veryraggedright % \forgetparindent % \forgeteverypar % \dontleavehmode\bgroup\tttf \language\minusone features: \showotfstepfeatures\egroup % \blank % \dontleavehmode\bgroup\tttf result:\egroup % \blank % \startlinecorrection % \ruledhbox\bgroup\box\otfcompositionbox\egroup % \stoplinecorrection % \dorecurse\otfnoffeaturesteps % {\blank % \showotfstepmessages\recurselevel % \blank % \startlinecorrection % \dontleavehmode\bgroup\resetallattributes\pardir TLT\textdir TLT\relax\tttf\recurselevel: \showotfstepchars\recurselevel\egroup % \stoplinecorrection % \blank % \startlinecorrection % \ruledhbox % can be mode % \bgroup\resetallattributes\showotfstepglyphs\recurselevel\egroup % reset is new, we don't want additional processing % \stoplinecorrection % \blank}% % \endgroup} \unexpanded\def\showotfsteps {\begingroup \veryraggedright \forgetparindent \forgeteverypar \tt \hbox to \hsize \bgroup \hbox to 6\emwidth{\bf font\hss}% \vtop \bgroup \hsize\dimexpr\hsize-6\emwidth\relax \language\minusone \bf \showotfstepfont \egroup \egroup \blank \hbox to \hsize \bgroup \hbox to 6\emwidth{\bf features\hss}% \vtop \bgroup \hsize\dimexpr\hsize-6\emwidth\relax \language\minusone \showotfstepfeatures \egroup \egroup \blank \scratchcounter\otfnoffeaturesteps\relax \dorecurse\scratchcounter {\blank \begingroup \advance\leftskip6\emwidth \showotfstepmessages\recurselevel \par \endgroup \blank \dontleavehmode \hbox to \hsize \bgroup \hbox to 6\emwidth \bgroup \bf \ifnum\recurselevel=\scratchcounter result\else step \recurselevel\fi \hss \egroup \vtop \bgroup \hsize\dimexpr\hsize-6\emwidth\relax \resetallattributes \pardir TLT\textdir TLT\relax \dontleavehmode \ifnum\recurselevel=\scratchcounter \ruledhbox{\box\otfcompositionbox}% \else \ruledhbox{\showotfstepglyphs\recurselevel}% \fi \quad \showotfstepchars\recurselevel \hfill \par \egroup \egroup \blank}% \endgroup} \unexpanded\def\startotfsample {\enabletrackers[*otf.sample]% beware, kind of global \startotfcollecting \begingroup \veryraggedright \forgetparindent \forgeteverypar} \unexpanded\def\stopotfsample {\endgroup \stopotfcollecting \disabletrackers[*otf.sample]% beware, kind of global: otf.sample \showotfsteps \resetotfcollecting} \newbox\otfcompositionbox % this should go in spac-ali: \installcorenamespace{otfcompositiondir} \letvalue{\??otfcompositiondir -1}\righttoleft \letvalue{\??otfcompositiondir r2l}\righttoleft \letvalue{\??otfcompositiondir l2r}\lefttoright \letvalue{\??otfcompositiondir +1}\lefttoright \letvalue{\??otfcompositiondir 1}\lefttoright \unexpanded\def\showotfcomposition#1#2#3% {font*features at size}, rl=-1, text {\begingroup \forgetparindent \forgeteverypar % \setupcolors[\c!state=\v!start]% \setupalign[\v!verytolerant,\v!flushleft]% \startotfsample \global\setbox\otfcompositionbox\hbox{\definedfont[#1]\relax\getvalue{\??otfcompositiondir#2}\relax#3}% \stopotfsample \endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-syn.lua0000644000175000017500000016612112161703335024161 0ustar norbertnorbertif not modules then modules = { } end modules ['font-syn'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: subs in lookups requests local next, tonumber, type, tostring = next, tonumber, type, tostring local sub, gsub, lower, match, find, lower, upper = string.sub, string.gsub, string.lower, string.match, string.find, string.lower, string.upper local find, gmatch = string.find, string.gmatch local concat, sort, format = table.concat, table.sort, string.format local serialize = table.serialize local lpegmatch = lpeg.match local unpack = unpack or table.unpack local formatters = string.formatters local allocate = utilities.storage.allocate local sparse = utilities.storage.sparse local removesuffix = file.removesuffix local splitbase = file.splitbase local splitname = file.splitname local basename = file.basename local nameonly = file.nameonly local pathpart = file.pathpart local filejoin = file.join local is_qualified_path = file.is_qualified_path local exists = io.exists local findfile = resolvers.findfile local cleanpath = resolvers.cleanpath local resolveresolved = resolvers.resolve local trace_names = false trackers.register("fonts.names", function(v) trace_names = v end) local trace_warnings = false trackers.register("fonts.warnings", function(v) trace_warnings = v end) local trace_specifications = false trackers.register("fonts.specifications", function(v) trace_specifications = v end) local report_names = logs.reporter("fonts","names") --[[ldx--

This module implements a name to filename resolver. Names are resolved using a table that has keys filtered from the font related files.

--ldx]]-- fonts = fonts or { } -- also used elsewhere local names = font.names or allocate { } fonts.names = names local filters = names.filters or { } names.filters = filters names.data = names.data or allocate { } names.version = 1.110 names.basename = "names" names.saved = false names.loaded = false names.be_clever = true names.enabled = true names.cache = containers.define("fonts","data",names.version,true) local autoreload = true directives.register("fonts.autoreload", function(v) autoreload = toboolean(v) end) --[[ldx--

A few helpers.

--ldx]]-- local P, C, Cc, Cs = lpeg.P, lpeg.C, lpeg.Cc, lpeg.Cs -- what to do with 'thin' local weights = Cs ( -- not extra P("demibold") + P("semibold") + P("mediumbold") + P("ultrabold") + P("extrabold") + P("ultralight") + P("bold") + P("demi") + P("semi") + P("light") + P("medium") + P("heavy") + P("ultra") + P("black") + P("bol") -- / "bold" + P("regular") / "normal" ) local normalized_weights = sparse { regular = "normal", } local styles = Cs ( P("reverseoblique") / "reverseitalic" + P("regular") / "normal" + P("italic") + P("oblique") / "italic" + P("slanted") + P("roman") / "normal" + P("ital") / "italic" + P("ita") / "italic" ) local normalized_styles = sparse { reverseoblique = "reverseitalic", regular = "normal", oblique = "italic", } local widths = Cs( P("condensed") + P("thin") + P("expanded") + P("cond") / "condensed" + P("normal") + P("book") / "normal" ) local normalized_widths = sparse() local variants = Cs( -- fax casual P("smallcaps") + P("oldstyle") + P("caps") / "smallcaps" ) local normalized_variants = sparse() names.knownweights = { "black", "bold", "demi", "demibold", "extrabold", "heavy", "light", "medium", "mediumbold", "normal", "regular", "semi", "semibold", "ultra", "ultrabold", "ultralight", } names.knownstyles = { "italic", "normal", "oblique", "regular", "reverseitalic", "reverseoblique", "roman", "slanted", } names.knownwidths = { "book", "condensed", "expanded", "normal", "thin", } names.knownvariants = { "normal", "oldstyle", "smallcaps", } local any = P(1) local analyzed_table local analyzer = Cs ( ( weights / function(s) analyzed_table[1] = s return "" end + styles / function(s) analyzed_table[2] = s return "" end + widths / function(s) analyzed_table[3] = s return "" end + variants / function(s) analyzed_table[4] = s return "" end + any )^0 ) local splitter = lpeg.splitat("-") function names.splitspec(askedname) local name, weight, style, width, variant = lpegmatch(splitter,askedname) weight = weight and lpegmatch(weights, weight) or weight style = style and lpegmatch(styles, style) or style width = width and lpegmatch(widths, width) or width variant = variant and lpegmatch(variants,variant) or variant if trace_names then report_names("requested name %a split in name %a, weight %a, style %a, width %a and variant %a", askedname,name,weight,style,width,variant) end if not weight or not weight or not width or not variant then weight, style, width, variant = weight or "normal", style or "normal", width or "normal", variant or "normal" if trace_names then report_names("request %a normalized to '%s-%s-%s-%s-%s'", askedname,name,weight,style,width,variant) end end return name or askedname, weight, style, width, variant end local function analyzespec(somename) if somename then analyzed_table = { } local name = lpegmatch(analyzer,somename) return name, analyzed_table[1], analyzed_table[2], analyzed_table[3], analyzed_table[4] end end --[[ldx--

It would make sense to implement the filters in the related modules, but to keep the overview, we define them here.

--ldx]]-- filters.otf = fontloader.info filters.ttf = fontloader.info filters.ttc = fontloader.info filters.dfont = fontloader.info function fontloader.fullinfo(...) -- check with taco what we get / could get local ff = fontloader.open(...) if ff then local d = ff and fontloader.to_table(ff) d.glyphs, d.subfonts, d.gpos, d.gsub, d.lookups = nil, nil, nil, nil, nil fontloader.close(ff) return d else return nil, "error in loading font" end end filters.otf = fontloader.fullinfo function filters.afm(name) -- we could parse the afm file as well, and then report an error but -- it's not worth the trouble local pfbname = findfile(removesuffix(name)..".pfb","pfb") or "" if pfbname == "" then pfbname = findfile(nameonly(name)..".pfb","pfb") or "" end if pfbname ~= "" then local f = io.open(name) if f then local hash = { } for line in f:lines() do local key, value = match(line,"^(.+)%s+(.+)%s*$") if key and #key > 0 then hash[lower(key)] = value end if find(line,"StartCharMetrics") then break end end f:close() return hash end end return nil, "no matching pfb file" end function filters.pfb(name) return fontloader.info(name) end --[[ldx--

The scanner loops over the filters using the information stored in the file databases. Watch how we check not only for the names, but also for combination with the weight of a font.

--ldx]]-- filters.list = { "otf", "ttf", "ttc", "dfont", "afm", -- "ttc", "otf", "ttf", "dfont", "afm", } names.fontconfigfile = "fonts.conf" -- a bit weird format, bonus feature names.osfontdirvariable = "OSFONTDIR" -- the official way, in minimals etc filters.paths = { } filters.names = { } function names.getpaths(trace) local hash, result, r = { }, { }, 0 local function collect(t,where) for i=1,#t do local v = cleanpath(t[i]) v = gsub(v,"/+$","") -- not needed any more local key = lower(v) report_names("%a specifies path %a",where,v) if not hash[key] then r = r + 1 result[r] = v hash[key] = true end end end local path = names.osfontdirvariable or "" if path ~= "" then collect(resolvers.expandedpathlist(path),path) end if xml then local confname = resolvers.expansion("FONTCONFIG_FILE") or "" if confname == "" then confname = names.fontconfigfile or "" end if confname ~= "" then -- first look in the tex tree local name = findfile(confname,"fontconfig files") or "" if name == "" then -- after all, fontconfig is a unix thing name = filejoin("/etc",confname) if not lfs.isfile(name) then name = "" -- force quit end end if name ~= "" and lfs.isfile(name) then if trace_names then report_names("%s fontconfig file %a","loading",name) end local xmldata = xml.load(name) -- begin of untested mess xml.include(xmldata,"include","",true,function(incname) if not is_qualified_path(incname) then local path = pathpart(name) -- main name if path ~= "" then incname = filejoin(path,incname) end end if lfs.isfile(incname) then if trace_names then report_names("%s fontconfig file %a","merging included",incname) end return io.loaddata(incname) elseif trace_names then report_names("%s fontconfig file: %a","ignoring included",incname) end end) -- end of untested mess local fontdirs = xml.collect_texts(xmldata,"dir",true) if trace_names then report_names("%s dirs found in fontconfig",#fontdirs) end collect(fontdirs,"fontconfig file") end end end function names.getpaths() return result end return result end local function cleanname(name) return (gsub(lower(name),"[^%a%d]","")) end local function cleanfilename(fullname,defaultsuffix) local path, name, suffix = splitname(fullname) name = gsub(lower(name),"[^%a%d]","") if suffix and suffix ~= "" then return name .. ".".. suffix elseif defaultsuffix and defaultsuffix ~= "" then return name .. ".".. defaultsuffix else return name end end names.cleanname = cleanname names.cleanfilename = cleanfilename local function check_names(result) local names = result.names if names then for i=1,#names do local name = names[i] if name.lang == "English (US)" then return name.names end end end end local function walk_tree(pathlist,suffix,identify) if pathlist then for i=1,#pathlist do local path = pathlist[i] path = cleanpath(path .. "/") path = gsub(path,"/+","/") local pattern = path .. "**." .. suffix -- ** forces recurse report_names("globbing path %a",pattern) local t = dir.glob(pattern) sort(t,sorter) for j=1,#t do local completename = t[j] identify(completename,basename(completename),suffix,completename) end end end end local function check_name(data,result,filename,modification,suffix,subfont) -- shortcuts local specifications = data.specifications -- prepare local names = check_names(result) -- fetch local familyname = names and names.preffamilyname or result.familyname local fullname = names and names.fullname or result.fullname local fontname = result.fontname local subfamily = names and names.subfamily local modifiers = names and names.prefmodifiers local weight = names and names.weight or result.weight local italicangle = tonumber(result.italicangle) local subfont = subfont or nil local rawname = fullname or fontname or familyname -- normalize familyname = familyname and cleanname(familyname) fullname = fullname and cleanname(fullname) fontname = fontname and cleanname(fontname) subfamily = subfamily and cleanname(subfamily) modifiers = modifiers and cleanname(modifiers) weight = weight and cleanname(weight) italicangle = italicangle == 0 and nil -- analyze local a_name, a_weight, a_style, a_width, a_variant = analyzespec(fullname or fontname or familyname) -- check local width = a_width local variant = a_variant local style = modifiers and gsub(modifiers,"[^%a]","") if not style and italicangle then style = "italic" end if not variant or variant == "" then variant = "normal" end if not weight or weight == "" then weight = a_weight end if not style or style == "" then style = a_style end if not familyname then familyname = a_name end fontname = fontname or fullname or familyname or basename(filename) fullname = fullname or fontname familyname = familyname or fontname specifications[#specifications + 1] = { filename = filename, -- unresolved format = lower(suffix), subfont = subfont, rawname = rawname, familyname = familyname, fullname = fullname, fontname = fontname, subfamily = subfamily, modifiers = modifiers, weight = weight, style = style, width = width, variant = variant, minsize = result.design_range_bottom or 0, maxsize = result.design_range_top or 0, designsize = result.design_size or 0, modification = modification or 0, } end local function cleanupkeywords() local data = names.data local specifications = names.data.specifications if specifications then local weights = { } local styles = { } local widths = { } local variants = { } for i=1,#specifications do local s = specifications[i] -- fix (sofar styles are taken from the name, and widths from the specification) local _, b_weight, b_style, b_width, b_variant = analyzespec(s.weight) local _, c_weight, c_style, c_width, c_variant = analyzespec(s.style) local _, d_weight, d_style, d_width, d_variant = analyzespec(s.width) local _, e_weight, e_style, e_width, e_variant = analyzespec(s.variant) local _, f_weight, f_style, f_width, f_variant = analyzespec(s.fullname or "") local weight = b_weight or c_weight or d_weight or e_weight or f_weight or "normal" local style = b_style or c_style or d_style or e_style or f_style or "normal" local width = b_width or c_width or d_width or e_width or f_width or "normal" local variant = b_variant or c_variant or d_variant or e_variant or f_variant or "normal" if not weight or weight == "" then weight = "normal" end if not style or style == "" then style = "normal" end if not width or width == "" then width = "normal" end if not variant or variant == "" then variant = "normal" end weights [weight ] = (weights [weight ] or 0) + 1 styles [style ] = (styles [style ] or 0) + 1 widths [width ] = (widths [width ] or 0) + 1 variants[variant] = (variants[variant] or 0) + 1 if weight ~= s.weight then s.fontweight = s.weight end s.weight, s.style, s.width, s.variant = weight, style, width, variant end local stats = data.statistics stats.used_weights, stats.used_styles, stats.used_widths, stats.used_variants = weights, styles, widths, variants end end local function collectstatistics() local data = names.data local specifications = data.specifications if specifications then local weights = { } local styles = { } local widths = { } local variants = { } for i=1,#specifications do local s = specifications[i] local weight = s.weight local style = s.style local width = s.width local variant = s.variant if weight then weights [weight ] = (weights [weight ] or 0) + 1 end if style then styles [style ] = (styles [style ] or 0) + 1 end if width then widths [width ] = (widths [width ] or 0) + 1 end if variant then variants[variant] = (variants[variant] or 0) + 1 end end local stats = data.statistics stats.weights = weights stats.styles = styles stats.widths = widths stats.variants = variants stats.fonts = #specifications end end local function collecthashes() local data = names.data local mappings = data.mappings local fallbacks = data.fallbacks local specifications = data.specifications local nofmappings = 0 local noffallbacks = 0 if specifications then -- maybe multiple passes for index=1,#specifications do local s = specifications[index] local format, fullname, fontname, familyname, weight, subfamily = s.format, s.fullname, s.fontname, s.familyname, s.weight, s.subfamily local mf, ff = mappings[format], fallbacks[format] if fullname and not mf[fullname] then mf[fullname], nofmappings = index, nofmappings + 1 end if fontname and not mf[fontname] then mf[fontname], nofmappings = index, nofmappings + 1 end if familyname and weight and weight ~= sub(familyname,#familyname-#weight+1,#familyname) then local madename = familyname .. weight if not mf[madename] and not ff[madename] then ff[madename], noffallbacks = index, noffallbacks + 1 end end if familyname and subfamily and subfamily ~= sub(familyname,#familyname-#subfamily+1,#familyname) then local extraname = familyname .. subfamily if not mf[extraname] and not ff[extraname] then ff[extraname], noffallbacks = index, noffallbacks + 1 end end if familyname and not mf[familyname] and not ff[familyname] then ff[familyname], noffallbacks = index, noffallbacks + 1 end end end return nofmappings, noffallbacks end local function collectfamilies() local data = names.data local specifications = data.specifications local families = data.families for index=1,#specifications do local familyname = specifications[index].familyname local family = families[familyname] if not family then families[familyname] = { index } else family[#family+1] = index end end end local function checkduplicate(where) -- fails on "Romantik" but that's a border case anyway local data = names.data local mapping = data[where] local specifications = data.specifications local loaded = { } if specifications and mapping then for _, m in next, mapping do for k, v in next, m do local s = specifications[v] local hash = formatters["%s-%s-%s-%s-%s"](s.familyname,s.weight or "*",s.style or "*",s.width or "*",s.variant or "*") local h = loaded[hash] if h then local ok = true local fn = s.filename for i=1,#h do local hn = s.filename if h[i] == fn then ok = false break end end if ok then h[#h+1] = fn end else loaded[hash] = { s.filename } end end end end local n = 0 for k, v in table.sortedhash(loaded) do local nv = #v if nv > 1 then if trace_warnings then report_names("lookup %a clashes with %a",k,v) end n = n + nv end end report_names("%a double lookups in %a",n,where) end local function checkduplicates() checkduplicate("mappings") checkduplicate("fallbacks") end local sorter = function(a,b) return a > b -- to be checked end local function sorthashes() local data = names.data local list = filters.list local mappings = data.mappings local fallbacks = data.fallbacks local sorted_mappings = { } local sorted_fallbacks = { } data.sorted_mappings = sorted_mappings data.sorted_fallbacks = sorted_fallbacks for i=1,#list do local l = list[i] sorted_mappings [l] = table.keys(mappings[l]) sorted_fallbacks[l] = table.keys(fallbacks[l]) sort(sorted_mappings [l],sorter) sort(sorted_fallbacks[l],sorter) end data.sorted_families = table.keys(data.families) sort(data.sorted_families,sorter) end local function unpackreferences() local data = names.data local specifications = data.specifications if specifications then for k, v in next, data.families do for i=1,#v do v[i] = specifications[v[i]] end end local mappings = data.mappings if mappings then for _, m in next, mappings do for k, v in next, m do m[k] = specifications[v] end end end local fallbacks = data.fallbacks if fallbacks then for _, f in next, fallbacks do for k, v in next, f do f[k] = specifications[v] end end end end end local function analyzefiles(olddata) if not trace_warnings then report_names("warnings are disabled (tracker 'fonts.warnings')") end local data = names.data local done = { } local totalnofread = 0 local totalnofskipped = 0 local totalnofduplicates = 0 local nofread = 0 local nofskipped = 0 local nofduplicates = 0 local skip_paths = filters.paths local skip_names = filters.names local specifications = data.specifications local oldindices = olddata and olddata.indices or { } local oldspecifications = olddata and olddata.specifications or { } local oldrejected = olddata and olddata.rejected or { } local treatmentdata = fonts.treatments.data local function identify(completename,name,suffix,storedname) local pathpart, basepart = splitbase(completename) nofread = nofread + 1 local treatment = treatmentdata[completename] or treatmentdata[basepart] if treatment and treatment.ignored then if trace_names then report_names("%s font %a is ignored, reason %a",suffix,completename,treatment.comment or "unknown") end nofskipped = nofskipped + 1 elseif done[name] then -- already done (avoid otf afm clash) if trace_names then report_names("%s font %a already done",suffix,completename) end nofduplicates = nofduplicates + 1 nofskipped = nofskipped + 1 elseif not exists(completename) then -- weird error if trace_names then report_names("%s font %a does not really exist",suffix,completename) end nofskipped = nofskipped + 1 elseif not is_qualified_path(completename) and findfile(completename,suffix) == "" then -- not locatable by backend anyway if trace_names then report_names("%s font %a cannot be found by backend",suffix,completename) end nofskipped = nofskipped + 1 else if #skip_paths > 0 then for i=1,#skip_paths do if find(pathpart,skip_paths[i]) then if trace_names then report_names("rejecting path of %s font %a",suffix,completename) end nofskipped = nofskipped + 1 return end end end if #skip_names > 0 then for i=1,#skip_paths do if find(basepart,skip_names[i]) then done[name] = true if trace_names then report_names("rejecting name of %s font %a",suffix,completename) end nofskipped = nofskipped + 1 return end end end if trace_names then report_names("identifying %s font %a",suffix,completename) end local result = nil local modification = lfs.attributes(completename,"modification") if olddata and modification and modification > 0 then local oldindex = oldindices[storedname] -- index into specifications if oldindex then local oldspecification = oldspecifications[oldindex] if oldspecification and oldspecification.filename == storedname then -- double check for out of sync local oldmodification = oldspecification.modification if oldmodification == modification then result = oldspecification specifications[#specifications + 1] = result else end else end elseif oldrejected[storedname] == modification then result = false end end if result == nil then local result, message = filters[lower(suffix)](completename) if result then if result[1] then for r=1,#result do local ok = check_name(data,result[r],storedname,modification,suffix,r-1) -- subfonts start at zero -- if not ok then -- nofskipped = nofskipped + 1 -- end end else local ok = check_name(data,result,storedname,modification,suffix) -- if not ok then -- nofskipped = nofskipped + 1 -- end end if trace_warnings and message and message ~= "" then report_names("warning when identifying %s font %a, %s",suffix,completename,message) end elseif trace_warnings then nofskipped = nofskipped + 1 report_names("error when identifying %s font %a, %s",suffix,completename,message or "unknown") end end done[name] = true end logs.flush() -- a bit overkill for each font, maybe not needed here end local function traverse(what, method) local list = filters.list for n=1,#list do local suffix = list[n] local t = os.gettimeofday() -- use elapser nofread, nofskipped, nofduplicates = 0, 0, 0 suffix = lower(suffix) report_names("identifying %s font files with suffix %a",what,suffix) method(suffix) suffix = upper(suffix) report_names("identifying %s font files with suffix %a",what,suffix) method(suffix) totalnofread, totalnofskipped, totalnofduplicates = totalnofread + nofread, totalnofskipped + nofskipped, totalnofduplicates + nofduplicates local elapsed = os.gettimeofday() - t report_names("%s %s files identified, %s skipped, %s duplicates, %s hash entries added, runtime %0.3f seconds",nofread,what,nofskipped,nofduplicates,nofread-nofskipped,elapsed) end logs.flush() end -- problem .. this will not take care of duplicates local function withtree(suffix) resolvers.dowithfilesintree(".*%." .. suffix .. "$", function(method,root,path,name) if method == "file" or method == "tree" then local completename = root .."/" .. path .. "/" .. name completename = resolveresolved(completename) -- no shortcut identify(completename,name,suffix,name) return true end end, function(blobtype,blobpath,pattern) blobpath = resolveresolved(blobpath) -- no shortcut report_names("scanning path %a for %s files",blobpath,suffix) end, function(blobtype,blobpath,pattern,total,checked,done) blobpath = resolveresolved(blobpath) -- no shortcut report_names("%s entries found, %s %s files checked, %s okay",total,checked,suffix,done) end) end local function withlsr(suffix) -- all trees -- we do this only for a stupid names run, not used for context itself, -- using the vars is too clumsy so we just stick to a full scan instead local pathlist = resolvers.splitpath(resolvers.showpath("ls-R") or "") walk_tree(pathlist,suffix,identify) end local function withsystem(suffix) -- OSFONTDIR cum suis walk_tree(names.getpaths(trace),suffix,identify) end traverse("tree",withtree) -- TEXTREE only if texconfig.kpse_init then traverse("lsr", withlsr) else traverse("system", withsystem) end data.statistics.readfiles = totalnofread data.statistics.skippedfiles = totalnofskipped data.statistics.duplicatefiles = totalnofduplicates end local function addfilenames() local data = names.data local specifications = data.specifications local indices = { } local files = { } for i=1,#specifications do local fullname = specifications[i].filename files[cleanfilename(fullname)] = fullname indices[fullname] = i end data.files = files data.indices = indices end local function rejectclashes() -- just to be sure, so no explicit afm will be found then local specifications = names.data.specifications local used = { } local okay = { } local rejected = { } -- only keep modification local o = 0 for i=1,#specifications do local s = specifications[i] local f = s.fontname if f then local fnd = used[f] local fnm = s.filename if fnd then if trace_warnings then report_names("fontname %a clashes, %a rejected in favor of %a",f,fnm,fnd) end rejected[f] = s.modification else used[f] = fnm o = o + 1 okay[o] = s end else o = o + 1 okay[o] = s end end local d = #specifications - #okay if d > 0 then report_names("%s files rejected due to clashes",d) end names.data.specifications = okay names.data.rejected = rejected end local function resetdata() local mappings = { } local fallbacks = { } for _, k in next, filters.list do mappings [k] = { } fallbacks[k] = { } end names.data = { version = names.version, mappings = mappings, fallbacks = fallbacks, specifications = { }, families = { }, statistics = { }, names = { }, indices = { }, rejected = { }, datastate = resolvers.datastate(), } end function names.identify(force) local starttime = os.gettimeofday() -- use elapser resetdata() analyzefiles(not force and names.readdata(names.basename)) rejectclashes() collectfamilies() collectstatistics() cleanupkeywords() collecthashes() checkduplicates() addfilenames() -- sorthashes() -- will be resorted when saved report_names("total scan time %0.3f seconds",os.gettimeofday()-starttime) end function names.is_permitted(name) return containers.is_usable(names.cache, name) end function names.writedata(name,data) containers.write(names.cache,name,data) end function names.readdata(name) return containers.read(names.cache,name) end function names.load(reload,force) if not names.loaded then if reload then if names.is_permitted(names.basename) then names.identify(force) names.writedata(names.basename,names.data) else report_names("unable to access database cache") end names.saved = true end local data = names.readdata(names.basename) names.data = data if not names.saved then if not data or not next(data) or not data.specifications or not next(data.specifications) then names.load(true) end names.saved = true end if not data then report_names("accessing the data table failed") else unpackreferences() sorthashes() end names.loaded = true end end local function list_them(mapping,sorted,pattern,t,all) if mapping[pattern] then t[pattern] = mapping[pattern] else for k=1,#sorted do local v = sorted[k] if not t[v] and find(v,pattern) then t[v] = mapping[v] if not all then return end end end end end function names.list(pattern,reload,all) -- here? names.load() -- todo reload if names.loaded then local t = { } local data = names.data if data then local list = filters.list local mappings = data.mappings local sorted_mappings = data.sorted_mappings local fallbacks = data.fallbacks local sorted_fallbacks = data.sorted_fallbacks for i=1,#list do local format = list[i] list_them(mappings[format],sorted_mappings[format],pattern,t,all) if next(t) and not all then return t end list_them(fallbacks[format],sorted_fallbacks[format],pattern,t,all) if next(t) and not all then return t end end end return t end end local reloaded = false local function is_reloaded() if not reloaded then local data = names.data if autoreload then local c_status = serialize(resolvers.datastate()) local f_status = serialize(data.datastate) if c_status == f_status then if trace_names then report_names("font database has matching configuration and file hashes") end return else report_names("font database has mismatching configuration and file hashes") end else report_names("font database is regenerated (controlled by directive 'fonts.autoreload')") end names.loaded = false reloaded = true logs.flush() names.load(true) end end --[[ldx--

The resolver also checks if the cached names are loaded. Being clever here is for testing purposes only (it deals with names prefixed by an encoding name).

--ldx]]-- local function fuzzy(mapping,sorted,name,sub) local condensed = gsub(name,"[^%a%d]","") for k=1,#sorted do local v = sorted[k] if find(v,condensed) then return mapping[v], v end end end -- we could cache a lookup .. maybe some day ... (only when auto loaded!) local function foundname(name,sub) -- sub is not used currently local data = names.data local mappings = data.mappings local sorted_mappings = data.sorted_mappings local fallbacks = data.fallbacks local sorted_fallbacks = data.sorted_fallbacks local list = filters.list -- dilemma: we lookup in the order otf ttf ttc ... afm but now an otf fallback -- can come after an afm match ... well, one should provide nice names anyway -- and having two lists is not an option for i=1,#list do local l = list[i] local found = mappings[l][name] if found then if trace_names then report_names("resolved via direct name match: %a",name) end return found end end for i=1,#list do local l = list[i] local found, fname = fuzzy(mappings[l],sorted_mappings[l],name,sub) if found then if trace_names then report_names("resolved via fuzzy name match: %a onto %a",name,fname) end return found end end for i=1,#list do local l = list[i] local found = fallbacks[l][name] if found then if trace_names then report_names("resolved via direct fallback match: %a",name) end return found end end for i=1,#list do local l = list[i] local found, fname = fuzzy(sorted_mappings[l],sorted_fallbacks[l],name,sub) if found then if trace_names then report_names("resolved via fuzzy fallback match: %a onto %a",name,fname) end return found end end if trace_names then report_names("font with name %a cannot be found",name) end end function names.resolvedspecification(askedname,sub) if askedname and askedname ~= "" and names.enabled then askedname = cleanname(askedname) names.load() local found = foundname(askedname,sub) if not found and is_reloaded() then found = foundname(askedname,sub) end return found end end function names.resolve(askedname,sub) local found = names.resolvedspecification(askedname,sub) if found then return found.filename, found.subfont and found.rawname end end -- function names.getfilename(askedname,suffix) -- last resort, strip funny chars -- names.load() -- local files = names.data.files -- askedname = files and files[cleanfilename(askedname,suffix)] or "" -- if askedname == "" then -- return "" -- else -- never entered -- return resolvers.findbinfile(askedname,suffix) or "" -- end -- end function names.getfilename(askedname,suffix) -- last resort, strip funny chars names.load() local files = names.data.files local cleanname = cleanfilename(askedname,suffix) local found = files and files[cleanname] or "" if found == "" and is_reloaded() then files = names.data.files found = files and files[cleanname] or "" end if found and found ~= "" then return resolvers.findbinfile(found,suffix) or "" -- we still need to locate it end end -- specified search local function s_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,family) if family then for i=1,#family do local f = family[i] if f and weight == f.weight and style == f.style and width == f.width and variant == f.variant then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and weight == f.weight and style == f.style and width == f.width and variant == f.variant and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect_weight_style_width(found,done,all,weight,style,width,family) if family then for i=1,#family do local f = family[i] if f and weight == f.weight and style == f.style and width == f.width then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_weight_style_width(found,done,all,weight,style,width,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and weight == f.weight and style == f.style and width == f.width and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect_weight_style(found,done,all,weight,style,family) if family then for i=1,#family do local f = family[i] if f and weight == f.weight and style == f.style then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_weight_style(found,done,all,weight,style,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and weight == f.weight and style == f.style and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect_style_width(found,done,all,style,width,family) if family then for i=1,#family do local f = family[i] if f and style == f.style and width == f.width then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_style_width(found,done,all,style,width,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and style == f.style and width == f.width and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect_weight(found,done,all,weight,family) if family then for i=1,#family do local f = family[i] if f and weight == f.weight then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_weight(found,done,all,weight,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and weight == f.weight and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect_style(found,done,all,style,family) if family then for i=1,#family do local f = family[i] if f and style == f.style then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_style(found,done,all,style,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and style == f.style and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect_width(found,done,all,width,family) if family then for i=1,#family do local f = family[i] if f and width == f.width then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect_width(found,done,all,width,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and width == f.width and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function s_collect(found,done,all,family) if family then for i=1,#family do local f = family[i] if f then found[#found+1], done[f] = f, true if not all then return end end end end end local function m_collect(found,done,all,families,sorted,strictname) for i=1,#sorted do local k = sorted[i] local family = families[k] for i=1,#family do local f = family[i] if not done[f] and find(f.fontname,strictname) then found[#found+1], done[f] = f, true if not all then return end end end end end local function collect(stage,found,done,name,weight,style,width,variant,all) local data = names.data local families = data.families local sorted = data.sorted_families local strictname = "^".. name -- to be checked local family = families[name] if trace_names then report_names("resolving name %a, weight %a, style %a, width %a, variant %a",name,weight,style,width,variant) end if weight and weight ~= "" then if style and style ~= "" then if width and width ~= "" then if variant and variant ~= "" then if trace_names then report_names("resolving stage %s, name %a, weight %a, style %a, width %a, variant %a",stage,name,weight,style,width,variant) end s_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,family) m_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,families,sorted,strictname) else if trace_names then report_names("resolving stage %s, name %a, weight %a, style %a, width %a",stage,name,weight,style,width) end s_collect_weight_style_width(found,done,all,weight,style,width,family) m_collect_weight_style_width(found,done,all,weight,style,width,families,sorted,strictname) end else if trace_names then report_names("resolving stage %s, name %a, weight %a, style %a",stage,name,weight,style) end s_collect_weight_style(found,done,all,weight,style,family) m_collect_weight_style(found,done,all,weight,style,families,sorted,strictname) end else if trace_names then report_names("resolving stage %s, name %a, weight %a",stage,name,weight) end s_collect_weight(found,done,all,weight,family) m_collect_weight(found,done,all,weight,families,sorted,strictname) end elseif style and style ~= "" then if width and width ~= "" then if trace_names then report_names("resolving stage %s, name %a, style %a, width %a",stage,name,style,width) end s_collect_style_width(found,done,all,style,width,family) m_collect_style_width(found,done,all,style,width,families,sorted,strictname) else if trace_names then report_names("resolving stage %s, name %a, style %a",stage,name,style) end s_collect_style(found,done,all,style,family) m_collect_style(found,done,all,style,families,sorted,strictname) end elseif width and width ~= "" then if trace_names then report_names("resolving stage %s, name %a, width %a",stage,name,width) end s_collect_width(found,done,all,width,family) m_collect_width(found,done,all,width,families,sorted,strictname) else if trace_names then report_names("resolving stage %s, name %a",stage,name) end s_collect(found,done,all,family) m_collect(found,done,all,families,sorted,strictname) end end local function heuristic(name,weight,style,width,variant,all) -- todo: fallbacks local found, done = { }, { } --~ print(name,weight,style,width,variant) weight, style, width, variant = weight or "normal", style or "normal", width or "normal", variant or "normal" name = cleanname(name) collect(1,found,done,name,weight,style,width,variant,all) -- still needed ? if #found == 0 and variant ~= "normal" then -- not weight variant = "normal" collect(4,found,done,name,weight,style,width,variant,all) end if #found == 0 and width ~= "normal" then width = "normal" collect(2,found,done,name,weight,style,width,variant,all) end if #found == 0 and weight ~= "normal" then -- not style weight = "normal" collect(3,found,done,name,weight,style,width,variant,all) end if #found == 0 and style ~= "normal" then -- not weight style = "normal" collect(4,found,done,name,weight,style,width,variant,all) end -- local nf = #found if trace_names then if nf then local t = { } for i=1,nf do t[i] = formatters["%a"](found[i].fontname) end report_names("name %a resolved to %s instances: % t",name,nf,t) else report_names("name %a unresolved",name) end end if all then return nf > 0 and found else return found[1] end end function names.specification(askedname,weight,style,width,variant,reload,all) if askedname and askedname ~= "" and names.enabled then askedname = cleanname(askedname) -- or cleanname names.load(reload) local found = heuristic(askedname,weight,style,width,variant,all) if not found and is_reloaded() then found = heuristic(askedname,weight,style,width,variant,all) if not filename then found = foundname(askedname) -- old method end end return found end end function names.collect(askedname,weight,style,width,variant,reload,all) if askedname and askedname ~= "" and names.enabled then askedname = cleanname(askedname) -- or cleanname names.load(reload) local list = heuristic(askedname,weight,style,width,variant,true) if not list or #list == 0 and is_reloaded() then list = heuristic(askedname,weight,style,width,variant,true) end return list end end function names.collectspec(askedname,reload,all) local name, weight, style, width, variant = names.splitspec(askedname) return names.collect(name,weight,style,width,variant,reload,all) end function names.resolvespec(askedname,sub) -- redefined later local found = names.specification(names.splitspec(askedname)) if found then return found.filename, found.subfont and found.rawname end end function names.collectfiles(askedname,reload) -- no all if askedname and askedname ~= "" and names.enabled then askedname = cleanname(askedname) -- or cleanname names.load(reload) local list = { } local specifications = names.data.specifications for i=1,#specifications do local s = specifications[i] if find(cleanname(basename(s.filename)),askedname) then list[#list+1] = s end end return list end end -- todo: -- -- blacklisted = { -- ["cmr10.ttf"] = "completely messed up", -- } function names.exists(name) local found = false local list = filters.list for k=1,#list do local v = list[k] found = (findfile(name,v) or "") ~= "" if found then return found end end return (findfile(name,"tfm") or "") ~= "" or (names.resolve(name) or "") ~= "" end local lastlookups, lastpattern = { }, "" function names.lookup(pattern,name,reload) -- todo: find if lastpattern ~= pattern then names.load(reload) local specifications = names.data.specifications local families = names.data.families local lookups = specifications if name then lookups = families[name] elseif not find(pattern,"=") then lookups = families[pattern] end if trace_names then report_names("starting with %s lookups for %a",#lookups,pattern) end if lookups then for key, value in gmatch(pattern,"([^=,]+)=([^=,]+)") do local t, n = { }, 0 if find(value,"*") then value = string.topattern(value) for i=1,#lookups do local s = lookups[i] if find(s[key],value) then n = n + 1 t[n] = lookups[i] end end else for i=1,#lookups do local s = lookups[i] if s[key] == value then n = n + 1 t[n] = lookups[i] end end end if trace_names then report_names("%s matches for key %a with value %a",#t,key,value) end lookups = t end end lastpattern = pattern lastlookups = lookups or { } end return #lastlookups end function names.getlookupkey(key,n) local l = lastlookups[n or 1] return (l and l[key]) or "" end function names.noflookups() return #lastlookups end function names.getlookups(pattern,name,reload) if pattern then names.lookup(pattern,name,reload) end return lastlookups end -- The following is new ... watch the overload! local specifications = allocate() names.specifications = specifications -- files = { -- name = "antykwapoltawskiego", -- list = { -- ["AntPoltLtCond-Regular.otf"] = { -- -- name = "antykwapoltawskiego", -- style = "regular", -- weight = "light", -- width = "condensed", -- }, -- }, -- } function names.register(files) if files then local list, commonname = files.list, files.name if list then local n, m = 0, 0 for filename, filespec in next, list do local name = lower(filespec.name or commonname) if name and name ~= "" then local style = normalized_styles [lower(filespec.style or "normal")] local width = normalized_widths [lower(filespec.width or "normal")] local weight = normalized_weights [lower(filespec.weight or "normal")] local variant = normalized_variants[lower(filespec.variant or "normal")] local weights = specifications[name ] if not weights then weights = { } specifications[name ] = weights end local styles = weights [weight] if not styles then styles = { } weights [weight] = styles end local widths = styles [style ] if not widths then widths = { } styles [style ] = widths end local variants = widths [width ] if not variants then variants = { } widths [width ] = variants end variants[variant] = filename n = n + 1 else m = m + 1 end end if trace_specifications then report_names("%s filenames registered, %s filenames rejected",n,m) end end end end function names.registered(name,weight,style,width,variant) local ok = specifications[name] ok = ok and (ok[(weight and weight ~= "" and weight ) or "normal"] or ok.normal) ok = ok and (ok[(style and style ~= "" and style ) or "normal"] or ok.normal) ok = ok and (ok[(width and width ~= "" and width ) or "normal"] or ok.normal) ok = ok and (ok[(variant and variant ~= "" and variant) or "normal"] or ok.normal) -- -- todo: same fallbacks as with database -- if ok then return { filename = ok, subname = "", -- rawname = nil, } end end function names.resolvespec(askedname,sub) -- overloads previous definition local name, weight, style, width, variant = names.splitspec(askedname) if trace_specifications then report_names("resolving specification: %a to name=%s, weight=%s, style=%s, width=%s, variant=%s",askedname,name,weight,style,width,variant) end local found = names.registered(name,weight,style,width,variant) if found and found.filename then if trace_specifications then report_names("resolved by registered names: %a to %s",askedname,found.filename) end return found.filename, found.subname, found.rawname else found = names.specification(name,weight,style,width,variant) if found and found.filename then if trace_specifications then report_names("resolved by font database: %a to %s",askedname,found.filename) end return found.filename, found.subfont and found.rawname end end if trace_specifications then report_names("unresolved: %s",askedname) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/core-var.mkii0000644000175000017500000001420511754241457024276 0ustar norbertnorbert%D \module %D [ file=core-var, %D version=1998.02.21, %D title=\CONTEXT\ Core Macros, %D subtitle=Variables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Core Macros / Variables} \unprotect %D We introduce a couple of variables that are used all over %D \CONTEXT. Alternatively we could define them in each module %D but as they are part of the bigger picture we prefer to do %D it here. %D \macros %D {every...} %D %D A few every's. Some are only used in \MKII\ or \MKIV. %D Output routine: \newtoks \everybeforeoutput \newtoks \everyafteroutput %D Shipout: \newtoks \everyshipout \newtoks \everybeforeshipout \newtoks \everyaftershipout \newtoks \everyfirstshipout \newtoks \everylastshipout %D End of run: \newtoks \everybye \newtoks \everygoodbye \newtoks \everynotabene %D Document \newtoks \everysetupdocument \newtoks \everyendoftextbody \newtoks \everystarttext \newtoks \everystoptext %D Purity: \newtoks \everyforgetall \newtoks \everycleanupfeatures \def\cleanupfeatures{\the\everycleanupfeatures} \def\forgetall {\the\everyforgetall} %D Page building: \newtoks \everybeforepagebody \newtoks \everyafterpagebody \let \everypagebody \everybeforepagebody % backward compatible %D Multipass: \newtoks \everybeforeutilityread \newtoks \everyafterutilityread %D Floats: \newtoks \everyinsidefloat %D Sectioning: \newtoks \everyheadstart %D Par building (experimental, used in xml

..

) \newtoks \everybeginofpar \newtoks \everyendofpar %newtoks \everyparflush \def\bpar{\the\everybeginofpar\ignorespaces} % may interfere with \everypar \def\epar{\ifhmode\removeunwantedspaces\the\everyendofpar\fi} % test prevents problems with \bpar\epar %D Lists: \newtoks \everylistentry \newtoks \everysavesortkeys %D Marks: \newtoks \everymarking %D Fonts: \newtoks \everyfont \newtoks \everyglobalbodyfont \newtoks \everydefinedfont \newevery \everybodyfont \EveryBodyFont \newevery \everyfontswitch \EveryFontSwitch %D Math: \newtoks \everybeforedisplayformula \newtoks \everymathematics \prependtoks \the\everymathematics \to \everymath \prependtoks \the\everymathematics \to \everydisplay %D Tables \newtoks \everytable %D State mess: \newtoks \everypushsomestate \newtoks \everypopsomestate \def\pushsomestates{\the\everypushsomestate} \def\popsomestates {\the\everypopsomestate } %D More generic (used to be pushcolor etc) \newtoks\everypushproperties \newtoks\everypopproperties \newtoks\everypopsplitproperties \newtoks\everystarttextproperties \newtoks\everystoptextproperties \def\pushproperties {\the\everypushproperties} \def\popproperties {\the\everypopproperties} \def\popsplitproperties {\the\everypopsplitproperties} \def\starttextproperties{\the\everystarttextproperties} \def\stoptextproperties {\the\everystoptextproperties} %D This is pretty important (esp since we now ignore shipouts). %D Actually we should nil all writes, marks, specials. \appendtoks \globallet\popproperties \relax \to \everylastshipout \appendtoks \globallet\popsplitproperties\relax \to \everylastshipout %D \macros %D {defineinputmode,setinputmode} %D %D New. Some work needs to be done. % not in mkiv \def\defineinputmode[#1]{\@EA\newtoks\csname every#1inputmode\endcsname} \def\setinputmode [#1]{\the\executeifdefined{every#1inputmode}\emptytoks} \defineinputmode [TEX] \defineinputmode [XML] \setinputmode [TEX] %D \macros %D {trialtypesetting} %D %D We disable trial typesetting in the output routine, %D just to be sure. \newif\iftrialtypesetting \prependtoks \trialtypesettingfalse \to \everybeforepagebody %D \macros %D {ifinpagebody,ifinsidecolumns,ifdoublesided,ifsinglesided} \newif \ifinpagebody \newif \ifinsidecolumns \newif \ifdoublesided \doublesidedfalse \newif \ifsinglesided \singlesidedtrue \newif \ifinsidefloat \newif \ifdoingblocks \newif \ifgridsnapping %D \macros %D {ifprocessingXML} %D %D We need this one even if no \XML\ is supported. \newif\ifprocessingXML % old way %D \macros %D {ifproductionrun} %D %D This boolean can be used to bypass certain %D initializations. \ifx\protectionlevel\undefined \newcount\protectionlevel \fi \newif\ifproductionrun \appendtoks \productionruntrue \to \everydump \appendtoks \ifcase\protectionlevel\else\reportunprotection\fi \to \everydump %D \macros %D {everyboxedcontent, ifboxedcontent, %D startboxedcontent, stopboxedcontent} %D %D This one is relatively new and will be used as a more %D robust test for inner situations. \newif \ifboxedcontent \newtoks\everyboxedcontent \appendtoks \boxedcontenttrue \to \everyboxedcontent \def\startboxedcontent{\bgroup\the\everyboxedcontent} \let\stopboxedcontent \egroup %D \macros %D {fastmode,silentmode} %D %D These commands are obsolete. \let\fastmode \relax \let\silentmode\relax %D \macros %D {defineselector,setupselector} %D %D \starttyping %D \defineselector[caption][max=2,n=2] %D %D \start %D \setupselector[caption][n=1] %D \placelist[figure][criterium=all] %D \stop %D %D \starttext %D \placefigure %D {\select{caption}{zapf}{\input zapf \relax}} %D {} %D \stoptext %D \stoptyping \def\defineselector{\dodoubleargument\dodefineselector} \def\setupselector {\dodoubleargument\dosetupselector} \def\dodefineselector[#1][#2]{\getparameters[\??sx#1][\c!max=2,\c!n=1,#2]} \def\dosetupselector [#1][#2]{\getparameters[\??sx#1][#2]} \unexpanded\def\select#1% {\filterfromnext {\executeifdefined{\??sx#1\c!max}1} {\executeifdefined{\??sx#1\c!n }1}} %D We store some original meanings, maybe in \type %D {math-ini}. \let\normalat \at \let\normalin \in \let\normalfrom \from %let\normalover \over \let\normalabout\about %D Add-ons: \let\startlayoutcomponent\gobbletwoarguments \let\stoplayoutcomponent \relax %D Concepts: \chardef\conceptmode\zerocount \def\doifconcepttracing {\ifnum\conceptmode>\plustwo \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-gds.mkvi0000644000175000017500000000722012130411274024276 0ustar norbertnorbert%D \module %D [ file=font-gds, %D version=2009.10.14, %D title=\CONTEXT\ Font Support, %D subtitle=Colorschemes, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Support / Colorschemes} %registerctxluafile{font-gds}{1.001} \unprotect % this will become colorgroups and move to font-col or so \definecolor[colorscheme:1:1][s=.75] \definecolor[colorscheme:1:2][r=.75] \definecolor[colorscheme:1:3][g=.75] \definecolor[colorscheme:1:4][b=.75] \definecolor[colorscheme:1:5][c=.75] \definecolor[colorscheme:1:6][m=.75] \definecolor[colorscheme:1:7][y=.75] \definecolor[colorscheme:2:7][s=.75] \definecolor[colorscheme:2:6][r=.75] \definecolor[colorscheme:2:5][g=.75] \definecolor[colorscheme:2:4][b=.75] \definecolor[colorscheme:2:3][c=.75] \definecolor[colorscheme:2:2][m=.75] \definecolor[colorscheme:2:1][y=.75] \definesystemattribute[colorscheme][public] \unexpanded\def\loadfontgoodies[#filename]% {\ctxcommand{loadfontgoodies("#filename")}} \unexpanded\def\setfontcolorscheme % will move to the lua end {\ctxcommand{enablefontcolorschemes()}% \unexpanded\xdef\setfontcolorscheme[##1]{\attribute\colorschemeattribute##1\relax}% \setfontcolorscheme} \unexpanded\def\resetfontcolorscheme {\attribute\colorschemeattribute\attributeunsetvalue} \protect \endinput % \definefontfeature[husayni-colored][goodies=husayni,colorscheme=default,featureset=default] % % \definedfont[husayni*husayni-colored at 36pt] % % \starttext \pardir TRT \textdir TRT % % \setfontcolorscheme[1] % % اَلْحَمْ‍دُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ % مَجْدِهٖ، بِلِسَانِ ٱلثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛ % اَلَّذِيْ خَلَقَ ٱلْمَوْتَ وَٱلْحَيٰوةَ، وَٱلْخَيْرَ وَٱلشَّرَّ، % وَٱلنَّفْعَ وَٱلضَّرَّ، وَٱلسُّكُوْنَ وَٱلْحَرَكَةَ، وَٱلْأَرْوَاحَ % وَٱلْأَجْسَامَ، وَٱلذِّكْرَ وَٱلنِّسْيَانَ. % % \setfontcolorscheme[2] % % اَلْحَمْ‍دُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ % مَجْدِهٖ، بِلِسَانِ ٱلثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛ % اَلَّذِيْ خَلَقَ ٱلْمَوْتَ وَٱلْحَيٰوةَ، وَٱلْخَيْرَ وَٱلشَّرَّ، % وَٱلنَّفْعَ وَٱلضَّرَّ، وَٱلسُّكُوْنَ وَٱلْحَرَكَةَ، وَٱلْأَرْوَاحَ % وَٱلْأَجْسَامَ، وَٱلذِّكْرَ وَٱلنِّسْيَانَ. % % \resetfontcolorscheme % % اَلْحَمْ‍دُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ % مَجْدِهٖ، بِلِسَانِ ٱلثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛ % اَلَّذِيْ خَلَقَ ٱلْمَوْتَ وَٱلْحَيٰوةَ، وَٱلْخَيْرَ وَٱلشَّرَّ، % وَٱلنَّفْعَ وَٱلضَّرَّ، وَٱلسُّكُوْنَ وَٱلْحَرَكَةَ، وَٱلْأَرْوَاحَ % وَٱلْأَجْسَامَ، وَٱلذِّكْرَ وَٱلنِّسْيَانَ. % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-emp.mkii0000644000175000017500000003224611754241457024333 0ustar norbertnorbert%D \module %D [ file=supp-emp, %D version=2000.08.09, %D title=\CONTEXT\ Support Macros, %D subtitle=\EMTEX\ specials to \PDF\ conversion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. %M \input supp-emp %D When \THANH, the author of \PDFTEX, and I were exchanging %D some emails on \PDFTEX\ functionality, positional %D information popped up as potential extension. Actually, it %D did not take that much time to cook up the basic %D functionality and the author had implemented it before I %D could even start to think about real advanced applications. %D %D I'm sure that \TEX\ programmers can spend many days on how %D and what kind of information is needed if you want to have %D access to positions, but since high level macros will %D probably be used anyway, even things like multiple reference %D points have proved to be rather unimportant at the system %D level. %D %D Therefore, \PDFTEX\ provides just these three primitives: %D %D \starttabulate[|l|l|] %D \NC \type {\pdfsavepos} \NC marks the current position \NC \NR %D \NC \type {\pdflastxpos} \NC the last marked horizontal position \NC \NR %D \NC \type {\pdflastypos} \NC the last marked vertical position \NC \NR %D \stoptabulate %D %D Based on these three primitives, very advanced systems can %D be build, and for some time now, \CONTEXT\ has such a %D system in its core. However, not everyone uses \CONTEXT, so %D we will demonstrate position tracking in generic applications. %D %D Because \PDFTEX\ produces its output directly, many of those %D nice tricks provided by back||ends by means of \type %D {\special} fail when producing \PDF\ code directly. Take for %D instance \EMTEX\ specials. When someone sent me a mail %D asking if \PDFTEX\ did support those specials, the original %D answer was \quotation {no}, but in the last few years I have learned %D that you must never underestimate \TEX's capabilities. %D %D I must admit that I never use those specials myself, but %D from the way they were used in the macros I was sent, I %D learned that they depend on the back||end's capability to %D access the current position. For those who know \TEX\ this %D may be bad news, since pure \TEX\ does not provide any %D positional information. So in order to use those specials, %D you must be sure that they are supported by every driver you %D use. However, the good news is that \PDFTEX\ does support %D position tracking, so here is our generic example. %D %D The two \EMTEX\ specials we need to implement are packaged %D into the macros \type {\EMmoveto} and \type {\EMlineto}, %D like: %D %D \starttyping %D \def\EMmoveto{\special{em:moveto}} %D \def\EMlineto{\special{em:lineto}} %D \stoptyping %D %D They are used in macro packages to draw lines, and the %D results are often boxes with content like the following: %D %D \startbuffer %D \vbox to 2cm %D {\offinterlineskip \EMmoveto %D \hskip 7cm \EMlineto %D \vskip 2cm \EMlineto %D \vskip-2cm \EMlineto} %D \stopbuffer %D %D \typebuffer %D %D This box will contain a triangle, and when typeset, it should %D look like: %D %D \startlinecorrection[blank] %D \getbuffer %D \stoplinecorrection \def\EMlinewd{.4} \ifx\dosetpositionpt\undefined % non context part %D These two macros can be implemented as follows. When moving %D to a position, we only have to register the new coordinates. %D Once they are known, we use them to draw a line and %D afterwards we save these end coordinates as starting point %D for the next line segment. So, at each point specified by %D \type {\EMlineto} we need to know the coordinates. \def\EMmoveto {\EMgetposition\EMlastmovex\EMlastmovey} %D The primitives \type {\pdflastxpos} and \type %D {\pdflastypos} return a number, representing the $x$ and %D $y$ coordinate in scaled points, \TEX's smallest unit of %D length. We need to convert this number into base points as %D used by \POSTSCRIPT\ and \PDF. When done, we insert some %D literal \PDF\ code into the text using \type {\pdfliteral}. %D Here, the \type {m} means \quote {moveto}, the \type {l} %D means \quote {lineto} and the \type {S} operator \quote %D {strokes} (draws) the line. The macro \type {\EMlinewd} %D holds the linewidth in basepoints. \def\EMlineto {\bgroup \EMgetposition\EMlastlinex\EMlastliney \count0=\EMlastmovex \advance\count0 -\EMlastlinex \count2=\EMlastmovey \advance\count2 -\EMlastliney \divide\count0 65536 \divide\count2 65536 \PDFcode{\EMlinewd\space w 0 0 m \the\count0 \space\the\count2 \space l S}% \global\let\EMlastmovex\EMlastlinex \global\let\EMlastmovey\EMlastliney \egroup} %D We need a fresh start, so we first set the current position %D to zero. \def\resetEMspecials {\gdef\EMlastmovex{0}\gdef\EMlastmovey{0}} %D Next comes the macro that keeps track of the position. The %D current position is marked with \type {\pdfsavepos} and its %D coordinates are written to a file whenever the page is %D shipped out, since \type {\write} postpones its action %D until that moment. The file has entries like: %D %D \starttyping %D \EMsetpos 1 4661756 46651918 %D \EMsetpos 2 5000359 46990521 %D \EMsetpos 3 4661756 46313315 %D \EMsetpos 4 5338962 46990521 %D \EMsetpos 5 4661756 45974712 %D \stoptyping %D %D These lines are written with the command: %D %D \starttyping %D \write\EMfile %D {\EMsetpos\number\EMcounter %D \space\number\pdflastxpos\space\number\pdflastypos}% %D \stoptyping %D %D In reality the argument to \type {\write} looks slightly %D more complicated, because we have to make sure that the %D number of the current position is frozen and \type %D {\EMsetpos} is not expanded. We do so by explicitly %D expanding the number beforehand and preventing expansion of %D \type {\EMsetpos}. \def\EMgetposition#1#2% {\bgroup \pdfsavepos \global\advance\EMcounter 1 \expandafter\write\expandafter\EMfile\expandafter {\expandafter\noexpand\expandafter\EMsetpos\number\EMcounter \space\number\pdflastxpos\space\number\pdflastypos}% \EMsetcounters \xdef#1{\the\count0}% \xdef#2{\the\count2}% \egroup} %D The counter mentioned a few lines ago needs to be %D declared before it can be used. \newcount\EMcounter %D We also need a dedicated file slot. \newwrite\EMfile %D Before we open the file for writing, we read in the data %D written in the previous pass, but only if the file is %D present. \def\EMfilename{\jobname.emp} \def\startEMspecials% {\resetEMspecials \openin\scratchread=\EMfilename \relax \ifeof\scratchread\else \input \EMfilename \relax \fi \closein\scratchread \immediate\openout\EMfile=\EMfilename\relax} \def\stopEMspecials {\closeout\EMfile} %D Just to be sure, we test if \type {\scratchread} is defined, %D and if not, we allocate a slot. \ifx\undefined\scratchread \newread\scratchread \fi %D This leaves us two commands. The \type {\EMsetpos} command %D that ends up in the file stores each position in a macro. %D When this macro is expanded, it assigns the coordinates to %D two scratch counters. \def\EMsetpos#1 #2 #3 % number x y {\expandafter\xdef\csname EM:#1\endcsname{\count0=#2 \count2=#3}} %D This position is recalled with its companion macro. First we %D set the counters to zero. When the position is unknown, %D nothing happens since the \type {\csname...} will expand to %D \type {\relax}. \def\EMsetcounters {\count0=0 \count2=0 \csname EM:\the\EMcounter\endcsname} %D These macros are rather independent of the macro package you %D use. For instance, in \CONTEXT\ the following works well: %D %D \startbuffer[pos-en] %D \setuppositioning[unit=ex] %D \startpositioning %D \dostepwiserecurse{-10}{10}{1} %D {\position(0,\recurselevel){\EMmoveto} %D \position(\recurselevel,0){\EMlineto}} %D \stoppositioning %D \stopbuffer %D %D \startbuffer[pos-nl] %D \setuppositioning[uniteenheid=ex] %D \startpositioning %D \dostepwiserecurse{-10}{10}{1} %D {\position(0,\recurselevel){\EMmoveto} %D \position(\recurselevel,0){\EMlineto}} %D \stoppositioning %D \stopbuffer %D %D \typebuffer[pos-en] %D %D Here, we hook the \EMTEX\ macros into an existing text %D positioning mechanism, which positions the commands %D using \TEX's skips and kerns. %D %D \startlinecorrection[blank] %D \getbuffer[pos-nl] %D \stoplinecorrection %D %D Of course one should start and end the file with: %D %D \starttyping %D \startEMspecials %D \stopEMspecials %D \stoptyping %D %D and, if needed, reset the begin position at each page using: %D %D \starttyping %D \resetEMspecials %D \stoptyping \fi % end of non context part \ifx\dosetpositionpt\undefined \else % context part % \edef\EMlinewd{\withoutpt\the\linewidth} %D A few pages ago, we mentioned that \CONTEXT\ has built||in %D position tracking. This means that when we want to implement %D this kind of trickery in this macro package, we can fall %D back on existing functionality. In the following alternative %D we will also use a few skips. This keeps the source readable %D and \CONTEXT\ has plenty of unused registers to accomodate %D this strategy. \newcount\EMcounter \def\EMvariable{EM:\the\EMcounter} \newskip \EMlastmovex \newskip \EMlastmovey \newskip \EMlastlinex \newskip \EMlastliney \def\resetEMspecials {\global\EMlastmovex=0pt \global\EMlastmovey=\EMlastmovex} \resetEMspecials \appendtoks\resetEMspecials\to\everyshipout %D Watch how we reset the specials after a page is flushed. We %D don't have to bother about files here, because saving and %D recalling is already implemented. Although not needed, we %D define the start||stop macros, so that \CONTEXT\ users who %D key them in are not confronted with error messages. \let\startEMspecials\relax \let\stopEMspecials\relax \def\EMgetposition#1#2% {\global\advance\EMcounter 1 \setposition\EMvariable \global#1=\POSx\EMvariable \global#2=\POSy\EMvariable} \def\EMmoveto {\EMgetposition\EMlastmovex\EMlastmovey} \def\EMlineto {\EMgetposition\EMlastlinex\EMlastliney \global\advance\EMlastmovex -\EMlastlinex \global\advance\EMlastmovey -\EMlastliney \ScaledPointsToBigPoints{\number\EMlastmovex}\EMx \ScaledPointsToBigPoints{\number\EMlastmovey}\EMy \PDFcode{\EMlinewd\space w 0 0 m \EMx \space \EMy \space l S}% \global\EMlastmovex\EMlastlinex \global\EMlastmovey\EMlastliney} %D The command \type {\setposition} registers a position by %D name (here \type {\EMvariable}), while \type {\POSx} and %D \type {\POSy} give you access to the coordinates. %D %D These three commands are containes in a suite of low level %D commands that can be used to register and get access to %D positional information. The current mechanism is not yet %D complete, but already provides enough hooks for advanced %D embedded graphics. Its functionality is a natural extension %D to the \METAPOST\ support already present in \CONTEXT. %D Therefore, more advanced examples can be found in the %D \METAFUN\ manual, since they fall beyond the scope of this %D module. \fi % end of context part %D As a bonus, I will now provide a few macros that will make %D this mechanism transparant to \DVI\ as well as \PDF\ %D output. We will use \type {\pdfiteral} as trigger. \ifx\PDFcode\undefined \ifx\pdfliteral\undefined \def\PDFcode#1{\special{PDF: #1}} \else \let\PDFcode\pdfliteral \fi \fi \ifx\PDFcode\undefined \def\EMpdfordvi#1#2{#2} \else\ifx\pdfoutput\undefined \def\EMpdfordvi#1#2{#2} \else \def\EMpdfordvi#1#2{\ifcase\pdfoutput#2\else#1\fi} \fi\fi %D We save some of the macros we defined previously: \let\pdfEMmoveto\EMmoveto \let\pdfstartEMspecials\startEMspecials \let\pdfEMlineto\EMlineto \let\pdfstopEMspecials \stopEMspecials %D We now redefine them to support \DVI\ and \PDF. \def\EMmoveto{\EMpdfordvi\pdfEMmoveto{\special{em:moveto}}} \def\EMlineto{\EMpdfordvi\pdfEMlineto{\special{em:lineto}}} \def\startEMspecials{\EMpdfordvi\pdfstartEMspecials\relax} \def\stopEMspecials {\EMpdfordvi\pdfstopEMspecials \relax} %D If there is any real demand for this in \CONTEXT, I will %D hook these macros in the special drivers, so that their %D support becomes more natural. %D You may want to change the default linewidth. The following %D macro does the job. Beware of the fact that \type %D {\special}'s may interfere with the typesetting process. %D %D \starttyping %D \setEMlinewidth{1pt} %D \stoptyping \def\setEMlinewidth#1% this could be done more efficient for {\bgroup % context alone, but it's a hack anyway \dimen0=#1\relax \count0=\dimen0 \divide\count0 65536 \pdfordvi\relax{\special{em:linewidth \the\dimen0}}% \xdef\EMlinewd{\the\count0}% \egroup} %D You may wonder to what extent positional tracking is %D \PDFTEX\ specific. In \CONTEXT, we also support position %D tracking in \DVI\ by using specials and analyzing the \DVI\ %D file afterwards using \DVIPOS. Since many of the advanced %D \TEX\ features depend on some kind of back||end, we don't %D consider it to be a disadvantage. Of course, the \PDFTEX\ %D way is not only cleaner, but also faster. It was more out %D of curiosity than out of need that we provided the \DVI\ %D methods as well. Also, it is always good to have more roads %D to reach the same goal. \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-ini.mkii0000644000175000017500000005773611754241457024313 0ustar norbertnorbert%D \module %D [ file=unic-ini, %D version=2002.12.03, %D title=\CONTEXT\ \UNICODE\ Support, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Unicode Support / Initialization} %D Sorry, we only support his in \ETEX. \unprotect % ÀÁÂÃÄÅàáâãäå % ÆÇæç % ÈÉÊËèéêë % ÌÍÎÏÞìíîïþ % Ðð % Ññ % ÒÓÔÕÖòóôõö % Øø % ÙÚÛÜùúûü % Ýýÿ % ß %D This module deals with unicode, and in particular with %D \UTF-8 conversion. The prelude to this module was \type %D {xtag-utf}, which is now replaced by a one||liner. The %D macros below deal with conversions. Thanks to Taco for %D providing the following conversion rules. %D %D \starttabulate[|c|c|c|c|c|] %D \NC $b_1$ \NC $b_2$ \NC $b_3$ \NC $b_4$ \NC unicode \NC \NR %D \NC192---223\NC128---191\NC \NC \NC 0x80---0x7FF \NC \NR %D \NC224---239\NC128---191\NC128---191\NC \NC 0x800---0xFFFF \NC \NR %D \NC240---247\NC128---191\NC128---191\NC128---191\NC0x10000---0x1FFFF\NC \NR %D \stoptabulate %D %D In \UTF-8 the characters in the range 128---191 are illegal %D as first characters. The characters 254 and 255 are %D completely illegal and should not appear at all (they are %D related to UTF-16). %D %D The unicode number for an \UTF-8 sequence can be calculated %D as follows: %D %D \starttabulate[|mc|m|mc|m|mc|m|mc|m|] %D \NC b_1 \NC \NC \NC \NC \NC \NC \NC if b_1<=127\NC \NR %D \NC 64(b_1-192)\NC+\NC (b_2-128)\NC \NC \NC \NC \NC if 192<=b1<=223\NC \NR %D \NC 4096(b_1-224)\NC+\NC 64(b_2-128)\NC+\NC (b_3-128)\NC \NC \NC if 224<=b1<=239\NC \NR %D \NC262144(b_1-240)\NC+\NC4096(b_2-128)\NC+\NC64(b_3-128)\NC+\NC(b_4-128)\NC if 240<=b1<=247\NC \NR %D \stoptabulate %D %D A lot of information about unicode can be found on the %D web (search for Markus Kuhn and unicode and you'll %D probably end up at the right place). %D In \ETEX\ vocabulary such a conversion looks as follows. %D We need the \type {`} in order to turn a character into a %D number. %D %D \starttyping %D \def\utftwounicode#1#2% %D {\number\numexpr (64*(\numexpr (#1-192))+% %D (\numexpr(`#2-128)))} %D %D \def\utfthreeunicode#1#2#3% %D {\number\numexpr (4096*(\numexpr (#1-224))+ %D 64*(\numexpr(`#2-128))+% %D (\numexpr(`#3-128)))} %D %D \def\utffourunicode#1#2#3#4% %D {\number\numexpr(262144*(\numexpr (#1-240))+ %D 4096*(\numexpr(`#1-128))+ %D 64*(\numexpr(`#2-128))+% %D (\numexpr(`#3-128)))} %D \stoptyping %D %D When we map the unicode number on one of the 256 char wide %D unicode tables, we need to do a bit of div and mod. Watch %D out: an \ETEX\ \type {/} is not the same as \TEX's \type %D {\divide}. The former rounds, while the later truncates, so %D we need to trucate ourselves. In case you wonder why we %D use \type {\numexpr}: this is not only more convenient, but %D also makes it possible to avoid scratch counters, so that we %D get fast and fully expandable conversions. %D %D \starttyping %D \def\utfdiv#1{\number\numexpr((#1-128)/256)} %D \def\utfmod#1{\number\numexpr((#1)-(256*(\utfdiv{#1})))} %D \stoptyping %D %D So far for the readable alternatives. When using \type %D {\numexpr} you should be aware of rather unexpected look %D ahead effects. The next implementation uses registers, %D which saves tokens and is faster. In this case we gain %D some 10\% time. \chardef \utf@a= 64 \mathchardef \utf@b= 4096 \newcount\utf@c\utf@c=262144 \chardef \utf@d= 192 \chardef \utf@e= 224 \chardef \utf@f= 240 \chardef \utf@g= 128 \mathchardef \utf@h= 256 \chardef \utf@i= 127 \mathchardef \utf@j= 2048 %D The definitions now become: %D %D \starttyping %D \def\utftwounicode#1#2% %D {\number\numexpr(\utf@a*(\numexpr (#1-\utf@d))+% %D (\numexpr(`#2-\utf@g)))} %D %D \def\utfthreeunicode#1#2#3% %D {\number\numexpr(\utf@b*(\numexpr (#1-\utf@e))+ %D \utf@a*(\numexpr(`#2-\utf@g))+% %D (\numexpr(`#3-\utf@g)))} %D %D \def\utffourunicode#1#2#3#4% %D {\number\numexpr(\utf@c*(\numexpr (#1-\utf@f))+ %D \utf@b*(\numexpr(`#2-\utf@g))+ %D \utf@a*(\numexpr(`#3-\utf@g))+% %D (\numexpr(`#4-\utf@g)))} %D \stoptyping %D %D And: %D %D \starttyping %D \def\utfdiv#1{\number\numexpr((#1-\utf@g)/\utf@h)} %D \def\utfmod#1{\number\numexpr((#1)-(\utf@h*(\utfdiv{#1})))} %D \stoptyping %D %D Depending on the usage, you can rely on parenthesis only: %D %D \starttyping %D \def\utftwounicode#1#2% %D {\numexpr(\utf@a*(#1-\utf@d)+% %D `#2-\utf@g)} %D %D \def\utfthreeunicode#1#2#3% %D {\numexpr(\utf@b*(#1-\utf@e)+% %D \utf@a*(`#2-\utf@g)+% %D `#3-\utf@g)} %D %D \def\utffourunicode#1#2#3#4% %D {\numexpr(\utf@c*(#1-\utf@f)+% %D \utf@b*(`#2-\utf@g)+% %D \utf@a*(`#3-\utf@g)+% %D `#4-\utf@g)} %D \stoptyping % beware, unless surrounded by \numexpr .. \relax, a division % results in a float until the final result is calculated \def\utfdiv#1{\the\numexpr (#1-\utf@g)/\utf@h \relax} \def\utfmod#1{\the\numexpr#1-\utf@h*((#1-\utf@g)/\utf@h)\relax} %D The next one also handles the zero case well: (not really utf specific btw) \def\utfdiv#1{\the\numexpr\ifcase\numexpr#1\relax0\else (#1-\utf@g)/\utf@h \fi\relax} \def\utfmod#1{\the\numexpr\ifcase\numexpr#1\relax0\else#1-\utf@h*((#1-\utf@g)/\utf@h)\fi\relax} % or % % \def\utfdiv#1{\ifcase\numexpr#1\relax0\else\the\numexpr(#1-\utf@g)/\utf@h\relax\fi} % \def\utfmod#1{\ifcase\numexpr#1\relax0\else\the\numexpr#1-\utf@h*((#1-\utf@g)/\utf@h)\relax\fi} %D When tracing we also need: \def\utfvid#1{\the\numexpr(#1-\medcard)/\maxcard\relax} %D Using the three conversion macros, we can now implement %D a few handlers. They all call the general \type %D {\unicodechar} conversion macro. %D %D \starttyping %D \def\utftwouniglph#1#2% %D {\unicodechar{\utftwounicode {#1}{#2}}} %D %D \def\utfthreeuniglph#1#2#3% %D {\unicodechar{\utfthreeunicode{#1}{#2}{#3}}} %D %D \def\utffouruniglph#1#2#3#4% %D {\unicodechar{\utffourunicode {#1}{#2}{#3}{#4}}} %D \stoptyping %D %D Because the unicode number is used a few times per %D conversion, we can expand it once (\type {\the} and \type %D {\number} make sure of this). This saves us another 10\%. %D %D \starttyping %D \def\utftwouniglph#1#2% %D {\@EA\unicodechar\@EA{\the\utftwounicode{#1}{#2}}} %D %D \def\utfthreeuniglph#1#2#3% %D {\@EA\unicodechar\@EA{\the\utfthreeunicode{#1}{#2}{#3}}} %D %D \def\utffouruniglph#1#2#3#4% %D {\@EA\unicodechar\@EA{\the\utffourunicode{#1}{#2}{#3}{#4}}} %D \stoptyping %D %D We can rewrite these macros to faster alternatives: the %D less arguments we pass, the faster the conversion will be, %D but at the price of readability. So we have: %D %D \starttyping %D \def\utftwouniglph#1#2% %D {\@EA\unicodechar\@EA{\the\numexpr(\utf@a*(#1-\utf@d)+% %D `#2-\utf@g)}} %D %D \def\utfthreeuniglph#1#2#3% %D {\@EA\unicodechar\@EA{\the\numexpr(\utf@b*(#1-\utf@e)+% %D \utf@a*(`#2-\utf@g)+`#3-\utf@g)}} %D %D \def\utffouruniglph#1#2#3#4% %D {\@EA\unicodechar\@EA{\the\numexpr(\utf@c*(#1-\utf@f)+% %D \utf@b*(`#2-\utf@g)+\utf@a*(`#3-\utf@g)+`#4-\utf@g)}} %D \stoptyping %D %D Less parsing, and therefore faster: % beware, this may change: #1 rawchar (=> `#1 and such, saves tokens) \def\utftwouniglph#1#2% {\@EA\unicodechar\@EA{\the\numexpr\utf@a*(#1-\utf@d)+`#2-\utf@g\relax}} \def\utfthreeuniglph#1#2#3% {\@EA\unicodechar\@EA{\the\numexpr\utf@b*(#1-\utf@e)+\utf@a*(`#2-\utf@g)+`#3-\utf@g\relax}} \def\utffouruniglph#1#2#3#4% {\@EA\unicodechar\@EA{\the\numexpr\utf@c*(#1-\utf@f)+\utf@b*(`#2-\utf@g)+\utf@a*(`#3-\utf@g)+`#4-\utf@g\relax}} % \def\keeputfcharacters % {\def\utftwouniglph ##1##2{\rawcharacter{##1}\string##2}% % \def\utfthreeuniglph ##1##2##3{\rawcharacter{##1}\string##2\string##3}% % \def\utffouruniglph ##1##2##3##4{\rawcharacter{##1}\string##2\string##3\string##4}} \def\keeputfcharacters {\let\utftwouniglph \rawcharacter \let\utfthreeuniglph\rawcharacter \let\utffouruniglph \rawcharacter} \appendtoks \keeputfcharacters \to \everywritestring % \bgroup % \keeputfcharacters % \expanded{\index{\XMLflush{whatever}}} % \egroup %D Now we come to the unicode handler itself. We will use a few %D constants, which saves us (at least at the time of writing %D and testing these macros) another 10\%. \def\@@univector {univ} \def\@@unicommand {unic} \def\@@unknownchar{unknownchar} %D Now comes the nice part: turning codes into glyphs. The %D actual conversion does not take place here, but is done by %D macros in \type{unic-nnn} files. There we map a range onto %D named glyphs, so that they fit well into the rest of %D \CONTEXT. %D \macros %D {utfunicodetracer} %D %D By default, the converter produces a character representation, %D but for tracing purposes, you can set a trace option. \newconstant\utfunicodetracer %D \def\TraceUnic#1% %D {\utfunicodetracer#1\relax\enableregime[utf]Ű} %D %D \starttabulate[|c|c|c|c|c|c|] %D \NC option \NC number\NC mapping\NC glyph\NC string\NC example \NC \NR %D \NC 0 \NC \NC \NC \star\NC \NC \TraceUnic0\NC \NR %D \NC 1 \NC \star \NC \NC \NC \NC \TraceUnic1\NC \NR %D \NC 2 \NC \NC \star \NC \NC \NC \TraceUnic2\NC \NR %D \NC 3 \NC \star \NC \star \NC \NC \NC \TraceUnic3\NC \NR %D \NC 4 \NC \star \NC \NC \star\NC \NC \TraceUnic4\NC \NR %D \NC 5 \NC \NC \star \NC \star\NC \NC \TraceUnic5\NC \NR %D \NC 6 \NC \star \NC \star \NC \star\NC \NC \TraceUnic6\NC \NR %D \NC 7 \NC \NC \NC \NC \star \NC \TraceUnic7\NC \NR %D \NC 8 \NC \star \NC \NC \NC \NC \TraceUnic8\NC \NR %D \NC otherwise\NC \NC \NC \star\NC \NC \TraceUnic9\NC \NR %D \stoptabulate %D \macros %D {unicodechar} %D %D Next we implement the character handler: \def\unicodechar {\ifcase\utfunicodetracer \expandafter\utfunihash \or \expandafter\utfunichar \or \expandafter\utfunisplit \or \expandafter\utfuniboth \or \expandafter\utfunihashchar \or \expandafter\utfunihashsplit \or \expandafter\utfunihashboth \or \expandafter\utfuniglyphname \or \expandafter\utfunientity \else \expandafter\utfunihash \fi} %D \startbuffer %D \enableregime[utf] \dostepwiserecurse{0}{8}{1} %D {\recurselevel: %D \utfunicodetracer\recurselevel aap‒noot coördinatie – één %D \crlf} %D \stopbuffer %D %D \typebuffer \start \getbuffer \stop %D \macros %D {unicodehexnumber} %D %D A few auxiliary macros, producing the range||char pair: \def\unicodepair#1% {\utfdiv{#1}:\utfmod{#1}} \def\unicodenumber#1{\number#1} \def\unicodehexnumber#1% {\ifnum#1>\maxcard \expanded{\uchexnumbers{\utfvid{#1}}}% \expanded{\uchexnumbers{\utfdiv{\utfdiv{#1}}}}% \else 00% \expanded{\uchexnumbers{\utfdiv{#1}}}% \fi \expanded{\uchexnumbers{\utfmod{#1}}}} %D The following macros visualize the unicode character. The %D \type {\relax} in front of the \type {-} prevents lookahead %D problems; somehow \type {\numexpr} cannot look beyond this %D sign, and expects a number. \ifx\tttf\undefined \let\tttf\relax \fi \def\utfunichar #1{{\tttf U\low{\tx\unicodenumber{#1}}}} \def\utfunisplit #1{{\tttf U\low{\tx\unicodepair{#1}}}} \def\utfuniboth #1{{\tttf U\low{\tx\unicodenumber{#1}->\unicodepair{#1}}}} \def\utfunientity #1{{\tttf\&\#x\unicodehexnumber{#1};}} %D The character itself is accessed and typeset by: %D %D \starttyping %D \def\utfunihash#1% %D {\executeifdefined{\@@univector\utfdiv{#1}}% %D \gobbleoneargument{\utfmod{#1}}} %D \stoptyping %D %D Again, we can provide a faster alternative, because inside %D the conditional executer, the argument is expanded twice, %D and therefore the calculation done once more than needed. %D So, we make sure that the argument is expansion on %D forehand. Just to remind you: \type {#1} is the \UNICODE\ %D number. %D %D \starttyping %D \def\utfunihash#1% %D {\@EA\executeifdefined\@EA{\@EA\@@univector\number\utfdiv{#1}}% %D {\unknownchar\gobbleoneargument}{\utfmod{#1}}} %D \stoptyping %D %D In order to save calculation time, I decided to change %D this definition into: %D \starttyping %D \def\utfunihash#1% %D {\@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}} %D %D \def\doutfunihash#1#2% %D {\ifcsname\@@univector\number#1\endcsname %D \csname\csname\@@univector#1\endcsname{\utfmod{#2}}\endcsname %D \else %D \unknownchar %D \fi} %D \stoptyping %D %D Or leaner and meaner: %D %D \starttyping %D \def\doutfunihash#1#2% %D {\csname %D \ifcsname\@@univector\number#1\endcsname %D \csname\@@univector#1\endcsname{\utfmod{#2}}% %D \else %D \@@unknownchar %D \fi %D \endcsname} %D \stoptyping %D %D And finaly it became: \def\doutfunihash#1#2% {\ifcsname\@@univector\number#1\endcsname \csname\@@univector#1\endcsname{\utfmod{#2}}% \else \@@unknownchar \fi} \def\utfunihashglyph#1% {\csname\@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}\endcsname} \def\utfunihashcommand {\@EAEAEA\string\utfunihashglyph} %D For practical purposes, we handle the normal \ASCII\ %D characters here: \def\utfunihashglyph#1% {\csname \ifnum#1<\utf@i \strippedcsname\unicodeasciicharacter\endcsname{#1}% \else \@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}\endcsname \fi} %D Well, we also want a plug-in mechanism, so we en dup with %D a messy: \def\utfunihashglyph#1% {\@EA\doutfunihashglyph\@EA{\number\numexpr\utfdiv{#1}\@EA\relax\@EA}\@EA{\number\utfmod{#1}}{#1}} % \def\doutfunihashglyph#1#2#3% div mod raw % {\csname % \ifnum#3<\utf@i % \strippedcsname\unicodeasciicharacter\endcsname{#2}% % \else\ifcsname\@@unicommand#1\endcsname % \@@unicommand#1\endcsname{#2}% % \else\ifcsname\@@univector#1\endcsname % \csname\@@univector#1\endcsname{#2}\endcsname % watch the nested csname; it's a speed up % \else % \strippedcsname\unicodeunknowncharacter\endcsname{#2}% % \fi\fi\fi} % % \def\unicodeunknowncharacter#1% % {\unknownchar} % % The next one permits lookahead \def\doutfunihashglyph#1#2#3% div mod raw {\csname utf!\ifnum#3<\utf@i 1\else \ifcsname\@@unicommand#1\endcsname2\else \ifcsname\@@univector #1\endcsname3\else 4\fi\fi\fi !\endcsname{#1}{#2}} \setvalue{utf!1!}#1{\unicodeasciicharacter} % {#2} \setvalue{utf!2!}#1{\csname\@@unicommand#1\endcsname} % {#2} \setvalue{utf!3!}#1#2{\csname\csname\@@univector#1\endcsname{#2}\endcsname} % watch the nested csname; it's a speed up \setvalue{utf!4!}#1#2{\unicodeunknowncharacter} \def\unicodeunknowncharacter {\unknownchar} %D With: \let\unicodeasciicharacter\rawcharacter %D Commands are defined with: \def\defineunicodecommand #1 #2% #2{range number}{char number} {\setvalue{\@@unicommand#1}##1{#2{#1}{##1}}} %D For instance: %D %D \starttyping %D \defineutfcommand 81 {\uchar} %D \stoptyping %D Now we can also say: \let\utfunihash\utfunihashglyph %D We also need: \def\utfuniglyphname#1% {{\tttf \ifnum#1<\utf@i \unicodeasciicharacter{#1}% \else \expandafter\string\csname\doutfunihash{\number\utfdiv{#1}}{#1}\endcsname \fi}} %D The combined presentation is implemented by: \def\utfunihashchar #1% {\utfunihash{#1}\low{\infofont\unicodenumber{#1}}} \def\utfunihashsplit#1% {\utfunihash{#1}\low{\infofont\unicodepair{#1}}} \def\utfunihashboth #1% {\utfunihash{#1}\low{\infofont\unicodenumber{#1}->\unicodepair{#1}}} %D Unknown characters get a placeholder. \unexpanded\def\unknownchar % {} prevents problems with arguments {{\hbox{\vrule\!!width.5em\!!height1ex\!!depth\zeropoint}}} %D So far for the conversion macros. The optimizations we %D did, brought down the runtime some 50\%, which, given that %D the majority of characters will be normal \ASCII\ %D characters, the penalty of conversion is not that large. %D \macros %D {useunicodevector} %D %D Since we end up with many encodings, it starts making %D sense to postpone loading, so let's start doing this %D with \UNICODE. \def\doifunicodevector#1% {\doifdefined{\@@univector#1}} \def\useunicodevector[#1]% {\processcommalist[#1]\douseunicodevector} \def\douseunicodevector#1% {\ifundefined{\@@univector#1}% % \readsysfile{\f!unicprefix\threedigits{#1}} \readsysfile{\f!unicprefix\doifnumberelse{#1}{\threedigits{#1}}{#1}.mkii} {\writestatus{unicode}{loading vector #1}} {\writestatus{unicode}{unknown vector #1}}% \fi} %D \macros %D {startunicodevector} %D %D A vector roughly looks as follows. By putting the text %D inside the name constructor, we prevent problems with %D partial expansion in macros and special cases. %D %D \starttyping %D \startunicodevector 0 %D \ifcase\numexpr(#1-159)\or %D \@@unknownchar\or % NO-BREAK SPACE %D exclamdown\or %D textcent\or %D ....\else %D \@@unknowncharacter %D \fi %D \stopunicodevector %D \stoptyping %D %D In vector \type {unix-000} you will find another %D optimizations. By using as less tokens as possible, we limit %D the time skipping branches in the test, and save upto 20\% %D runtime. \def\startunicodevector #1 #2\stopunicodevector {\setgvalue{\@@univector#1}##1{#2}} %D We define (as a practical example) the utf signal FEFF: \ifx\zwnbsp\undefined \let\zwnbsp\relax % zerowidthnonbreakablespace \fi \startunicodevector 254 \expandafter\strippedcsname\ifnum#1<255 \unknownchar\else\zwnbsp\fi \stopunicodevector %D Here we provide another auxiliary macro: %D %D \startbuffer %D \unicodeinfoline{196}{Ä}{LATIN CAPITAL LETTER A WITH DIAERESIS} %D \unicodeinfoline{197}{Å}{LATIN CAPITAL LETTER A WITH RING ABOVE} %D \unicodeinfoline{198}{Æ}{LATIN CAPITAL LETTER AE} %D \unicodeinfoline{199}{Ç}{LATIN CAPITAL LETTER C WITH CEDILLA} %D \unicodeinfoline{200}{È}{LATIN CAPITAL LETTER E WITH GRAVE} %D \unicodeinfoline{201}{É}{LATIN CAPITAL LETTER E WITH ACUTE} %D \stopbuffer %D %D \typebuffer %D %D \start \enableregime[utf]\getbuffer \stop \def\unicodeinfoline#1#2#3% {\ifnum#1>\utf@g % 128 \noindent \hbox {\hbox to 4em{\tttf\unicodehexnumber{#1}\hss}\quad \hbox to 1em{#2\hss}\quad \hbox to 9em{\tttf\unicodenumber{#1}->\unicodepair{#1}\hss}\quad \hbox to 9em{\tttf\let\utfunihash\utfunihashcommand#2\hss}\quad % tricky \lowercase {\tttf#3}}\par \fi} %D The next code permits utf code in hyperlinks: \def\cleanunicodechar#1{.#1.} \appendtoks \let\unicodechar\cleanunicodechar \to \everycleanupfeatures %D We will now hook this mechanism in the existing font %D handler. More documentation will follow. Probably, some %D features in \type {font-uni.tex} will be generalized %D and moved here. \def\unidiv{0} \def\unimod{0} \chardef\utfunihashmode=0 % 0=hash glyph / 1=font glyph \def\utfunifontglyph#1% {\xdef\unidiv{\number\utfdiv{#1}}% \xdef\unimod{\number\utfmod{#1}}% \ifnum#1<\utf@i \char\unimod % \unicodeascii\unimod \else\ifcsname\@@univector\unidiv\endcsname \csname\doutfunihash{\unidiv}{#1}\endcsname \else % so, these can be different fonts ! \unicodeglyph\unidiv\unimod % no \uchar (yet) \fi\fi} \chardef\utfunicommandmode=0 % 1 = hex \def\unicodecommandchar#1#2% {\string\char \ifcase\utfunicommandmode #1:#2\else\lchexnumbers#1:\lchexnumbers#2% \fi} \def\utfunifontcommand#1% {\xdef\unidiv{\number\utfdiv{#1}}% \xdef\unimod{\number\utfmod{#1}}% \ifnum#1<\utf@i \unicodecommandchar\unidiv\unimod \else\ifcsname\@@univector\unidiv\endcsname \@EA\string\csname\doutfunihash{\unidiv}{#1}\endcsname \else \unicodecommandchar\unidiv\unimod \fi\fi} \def\utfunihash {\ifcase\utfunihashmode \@EA\utfunihashglyph \else \@EA\utfunifontglyph \fi} \def\utfunihushcommand {\@EAEAEA\string\utfunihashglyph} \def\utfunihashcommand {\ifcase\utfunihashmode \@EA\utfunihushcommand \else \@EA\utfunifontcommand \fi} %D We can convert from a number to some UTF code with the folowing %D conversion macro. % The first, na\"ive version: % % \def\numbertoutf#1% % {\ifnum#1<128 % \rawcharacter{#1}% % \else\ifnum#1<2048 % \rawcharacter{\the\numexpr192+#1/64\relax}% % \rawcharacter{\the\numexpr128+#1-(#1/64)*64\relax}% % \else % 3 bytes % \rawcharacter{\the\numexpr224+#1/4096\relax}% % \rawcharacter{\the\numexpr128+(#1-(#1/4096)*4096)/128\relax}% % \rawcharacter{\the\numexpr128+(#1-(#1/4096)*4096)+(#1-(#1/4096)*4096)/128\relax}% % \fi\fi} % We have to compensate for etex's rounding (thanks to Taco and % Nanning) for pointing/sorting this out: \chardef \utf@a= 64 \mathchardef \utf@b= 4096 \newcount\utf@c\utf@c=262144 \chardef \utf@d= 192 \chardef \utf@e= 224 \chardef \utf@f= 240 \chardef \utf@g= 128 \mathchardef \utf@h= 256 \chardef \utf@i= 127 \mathchardef \utf@j= 2048 \chardef \utf@k= 32 % div: \numexp#1/#2\relax % mod: \numexp#1-(#1/#2)*#2\relax % \def\numbertoutf#1% % {\ifnum#1<\utf@g % \rawcharacter{#1}% % \else\ifnum#1<2048 % \rawcharacter{\numexpr192+(#1/64)\relax}% 192 + (ud div 64) % \rawcharacter{\numexpr128+(#1-(#1/64)*64)\relax}% 128 + (ud mod 64) % \else\ifnum#1<2097152 % \rawcharacter{\numexpr224+(#1-(#1/4096)\relax}% 224 + (ud div 4096) % \rawcharacter{\numexpr128+(#1-((#1/64)-((#1/64)/64)*64)\relax}% 128 + ((ud div 64) mod 64) % \rawcharacter{\numexpr128+(#1-(#1-(#1/64)*64)\relax}% 128 + (ud mod 64) % \else % % todo % \fi\fi} \def\numbertoutf#1% okay? {\ifnum#1<\utf@g \rawcharacter{#1}% \else\ifnum#1<\utf@j \rawcharacter{\the\numexpr\utf@d+(#1-\utf@k)/\utf@a\relax}% \rawcharacter{\the\numexpr\utf@g+(#1-((#1-\utf@k)/\utf@a)*\utf@a)\relax}% \else \rawcharacter{\the\numexpr\utf@e+(#1-\utf@j)/\utf@b\relax}% \rawcharacter{\the\numexpr\utf@g+(#1-(((#1-\utf@j)/\utf@b)*\utf@b)-\utf@k)/\utf@a\relax}% \rawcharacter{\the\numexpr\utf@g+(#1-(((#1-\utf@j)/\utf@b)*\utf@b)-((#1-(((#1-\utf@j)/\utf@b)*\utf@b)-\utf@k)/\utf@a)*\utf@a)\relax}% \fi\fi} \def\numbertohexstring#1{0x\uchexnumbers{\utfdiv{#1}}\uchexnumbers{\utfmod{#1}}} \ifnum\texengine=\xetexengine \let\numbertoutf\numbertohexstring \fi \def\uchartoutf#1#2% {\expandafter\numbertoutf\expandafter{\the\numexpr#1*\utf@h+#2\relax}} %D Here is a mapping trick. By mapping the tex specific characters to %D private ones, we can prevent problems with utility files. \defineunicodecommand{240} {\doprivateunicodechar} \def\doprivateunicodechar#1#2{\char#2\relax} \def\registerprivateunicodechar#1 {\letvalue{puc::\number#1}\relax} \registerprivateunicodechar `\% \registerprivateunicodechar `\$ \registerprivateunicodechar `\{ \registerprivateunicodechar `\} \registerprivateunicodechar `\~ \registerprivateunicodechar `\_ \registerprivateunicodechar `\^ \registerprivateunicodechar `\# \def\numbertoutp#1{\numbertoutf{\the\numexpr#1\ifcsname puc::\number#1\endcsname+"F000\fi\relax}} %D In the \XML\ expander we will do: %D %D \starttyping %D \def\getXMLhexcharacter##1{\numbertoutp{"##1}}% %D \def\getXMLdeccharacter##1{\numbertoutp {##1}}% %D \stoptyping %D Goodies: \fetchruntimecommand \showunicodevector {\f!unicprefix\s!run} \fetchruntimecommand \showunicodetable {\f!unicprefix\s!run} %D Well, let's at least preload a few familiar ones. Here we %D also load the \UTF\ regime. \useunicodevector[0,1,2,3,4,5,30,31,32,33,34,35,37,39,251] \useunicodevector[cjk] \useregime[utf] % 31, text mem usage first \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-set.lua0000644000175000017500000003011512130411274024111 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-set'] = { -- might become util-set.lua version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- maybe this should be util-set.lua local type, next, tostring = type, next, tostring local concat = table.concat local format, find, lower, gsub, topattern = string.format, string.find, string.lower, string.gsub, string.topattern local is_boolean = string.is_boolean local settings_to_hash = utilities.parsers.settings_to_hash local allocate = utilities.storage.allocate utilities = utilities or { } local utilities = utilities local setters = utilities.setters or { } utilities.setters = setters local data = { } -- We can initialize from the cnf file. This is sort of tricky as -- later defined setters also need to be initialized then. If set -- this way, we need to ensure that they are not reset later on. local trace_initialize = false -- only for testing during development function setters.initialize(filename,name,values) -- filename only for diagnostics local setter = data[name] if setter then frozen = true -- don't permitoverload -- trace_initialize = true local data = setter.data if data then for key, newvalue in next, values do local newvalue = is_boolean(newvalue,newvalue) local functions = data[key] if functions then local oldvalue = functions.value if functions.frozen then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"frozen",oldvalue) end elseif #functions > 0 and not oldvalue then -- elseif #functions > 0 and oldvalue == nil then if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"set",newvalue) end for i=1,#functions do functions[i](newvalue) end functions.value = newvalue functions.frozen = functions.frozen or frozen else if trace_initialize then setter.report("%s: %a is %s as %a",filename,key,"kept",oldvalue) end end else -- we do a simple preregistration i.e. not in the -- list as it might be an obsolete entry functions = { default = newvalue, frozen = frozen } data[key] = functions if trace_initialize then setter.report("%s: %a is %s to %a",filename,key,"defaulted",newvalue) end end end return true end end end -- user interface code local function set(t,what,newvalue) local data = t.data if not data.frozen then local done = t.done if type(what) == "string" then what = settings_to_hash(what) -- inefficient but ok end if type(what) ~= "table" then return end if not done then -- catch ... why not set? done = { } t.done = done end for w, value in next, what do if value == "" then value = newvalue elseif not value then value = false -- catch nil else value = is_boolean(value,value) end w = topattern(w,true,true) for name, functions in next, data do if done[name] then -- prevent recursion due to wildcards elseif find(name,w) then done[name] = true for i=1,#functions do functions[i](value) end functions.value = value end end end end end local function reset(t) local data = t.data if not data.frozen then for name, functions in next, data do for i=1,#functions do functions[i](false) end functions.value = false end end end local function enable(t,what) set(t,what,true) end local function disable(t,what) local data = t.data if not what or what == "" then t.done = { } reset(t) else set(t,what,false) end end function setters.register(t,what,...) local data = t.data what = lower(what) local functions = data[what] if not functions then functions = { } data[what] = functions if trace_initialize then t.report("defining %a",what) end end local default = functions.default -- can be set from cnf file for i=1,select("#",...) do local fnc = select(i,...) local typ = type(fnc) if typ == "string" then if trace_initialize then t.report("coupling %a to %a",what,fnc) end local s = fnc -- else wrong reference fnc = function(value) set(t,s,value) end elseif typ ~= "function" then fnc = nil end if fnc then functions[#functions+1] = fnc -- default: set at command line or in cnf file -- value : set in tex run (needed when loading runtime) local value = functions.value or default if value ~= nil then fnc(value) functions.value = value end end end return false -- so we can use it in an assignment end function setters.enable(t,what) local e = t.enable t.enable, t.done = enable, { } enable(t,what) t.enable, t.done = e, { } end function setters.disable(t,what) local e = t.disable t.disable, t.done = disable, { } disable(t,what) t.disable, t.done = e, { } end function setters.reset(t) t.done = { } reset(t) end function setters.list(t) -- pattern local list = table.sortedkeys(t.data) local user, system = { }, { } for l=1,#list do local what = list[l] if find(what,"^%*") then system[#system+1] = what else user[#user+1] = what end end return user, system end function setters.show(t) local category = t.name local list = setters.list(t) t.report() for k=1,#list do local name = list[k] local functions = t.data[name] if functions then local value, default, modules = functions.value, functions.default, #functions value = value == nil and "unset" or tostring(value) default = default == nil and "unset" or tostring(default) t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) end end t.report() end -- we could have used a bit of oo and the trackers:enable syntax but -- there is already a lot of code around using the singular tracker -- we could make this into a module but we also want the rest avaliable local enable, disable, register, list, show = setters.enable, setters.disable, setters.register, setters.list, setters.show function setters.report(setter,...) print(format("%-15s : %s\n",setter.name,format(...))) end local function default(setter,name) local d = setter.data[name] return d and d.default end local function value(setter,name) local d = setter.data[name] return d and (d.value or d.default) end function setters.new(name) -- we could use foo:bar syntax (but not used that often) local setter -- we need to access it in setter itself setter = { data = allocate(), -- indexed, but also default and value fields name = name, report = function(...) setters.report (setter,...) end, enable = function(...) enable (setter,...) end, disable = function(...) disable (setter,...) end, register = function(...) register(setter,...) end, list = function(...) list (setter,...) end, show = function(...) show (setter,...) end, default = function(...) return default (setter,...) end, value = function(...) return value (setter,...) end, } data[name] = setter return setter end trackers = setters.new("trackers") directives = setters.new("directives") experiments = setters.new("experiments") local t_enable, t_disable = trackers .enable, trackers .disable local d_enable, d_disable = directives .enable, directives .disable local e_enable, e_disable = experiments.enable, experiments.disable -- nice trick: we overload two of the directives related functions with variants that -- do tracing (itself using a tracker) .. proof of concept local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end) local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end) function directives.enable(...) if trace_directives then directives.report("enabling: % t",{...}) end d_enable(...) end function directives.disable(...) if trace_directives then directives.report("disabling: % t",{...}) end d_disable(...) end function experiments.enable(...) if trace_experiments then experiments.report("enabling: % t",{...}) end e_enable(...) end function experiments.disable(...) if trace_experiments then experiments.report("disabling: % t",{...}) end e_disable(...) end -- a useful example directives.register("system.nostatistics", function(v) if statistics then statistics.enable = not v else -- forget about it end end) directives.register("system.nolibraries", function(v) if libraries then libraries = nil -- we discard this tracing for security else -- no libraries defined end end) -- experiment if environment then -- The engineflags are known earlier than environment.arguments but maybe we -- need to handle them both as the later are parsed differently. The c: prefix -- is used by mtx-context to isolate the flags from those that concern luatex. local engineflags = environment.engineflags if engineflags then local list = engineflags["c:trackers"] or engineflags["trackers"] if type(list) == "string" then setters.initialize("commandline flags","trackers",settings_to_hash(list)) -- t_enable(list) end local list = engineflags["c:directives"] or engineflags["directives"] if type(list) == "string" then setters.initialize("commandline flags","directives", settings_to_hash(list)) -- d_enable(list) end end end -- here if texconfig then -- this happens too late in ini mode but that is no problem local function set(k,v) v = tonumber(v) if v then texconfig[k] = v end end directives.register("luatex.expanddepth", function(v) set("expand_depth",v) end) directives.register("luatex.hashextra", function(v) set("hash_extra",v) end) directives.register("luatex.nestsize", function(v) set("nest_size",v) end) directives.register("luatex.maxinopen", function(v) set("max_in_open",v) end) directives.register("luatex.maxprintline", function(v) set("max_print_line",v) end) directives.register("luatex.maxstrings", function(v) set("max_strings",v) end) directives.register("luatex.paramsize", function(v) set("param_size",v) end) directives.register("luatex.savesize", function(v) set("save_size",v) end) directives.register("luatex.stacksize", function(v) set("stack_size",v) end) end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-art-01.mkiv0000644000175000017500000000214412161703335024027 0ustar norbertnorbert\unprotect \startmodule[art-01] \definemeasure [article:margin] [\paperheight/15] \definemeasure [overview:margin] [\paperheight/30] \definelayout [article] [\c!topspace=\measure{article:margin}, \c!bottomspace=\measure{article:margin}, \c!backspace=\measure{article:margin}, \c!header=\measure{overview:margin}, \c!footer=0pt, \c!width=\v!middle, \c!height=\v!middle] \definelayout [overview] [\c!topspace=\measure{overview:margin}, \c!bottomspace=\measure{overview:margin}, \c!backspace=\measure{overview:margin}, \c!header=\measure{overview:margin}, \c!footer=0pt, \c!width=\v!middle, \c!height=\v!middle] \setuplayout [article] \setupbodyfont [dejavu,10pt] % 12pt is just to large and we use this for all kind of demos \setupwhitespace [\v!big] \setuphead [\v!chapter] [\c!style=\bfc, \c!headerstate=\v!high, \c!interaction=\v!all] \setuphead [\v!section] [\c!style=\bfb] \setuphead [\v!subsection] [\c!style=\bfa] \setuphead [\v!subsubsection] [\c!style=\bf, \c!after=] \setuplist [\c!interaction=\v!all] \protect \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/core-dat.lua0000644000175000017500000001645312130411274024076 0ustar norbertnorbertif not modules then modules = { } end modules ['core-dat'] = { version = 1.001, comment = "companion to core-dat.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

This module provides a (multipass) container for arbitrary data. It replaces the twopass data mechanism.

--ldx]]-- local tonumber, tostring, type = tonumber, tostring, type local context, commands = context, commands local trace_datasets = false trackers.register("job.datasets" , function(v) trace_datasets = v end) local trace_pagestates = false trackers.register("job.pagestates", function(v) trace_pagestates = v end) local report_dataset = logs.reporter("dataset") local report_pagestate = logs.reporter("pagestate") local allocate = utilities.storage.allocate local settings_to_hash = utilities.parsers.settings_to_hash local texcount = tex.count local formatters = string.formatters local v_yes = interfaces.variables.yes local new_latelua = nodes.pool.latelua local collected = allocate() local tobesaved = allocate() local datasets = { collected = collected, tobesaved = tobesaved, } job.datasets = datasets local function initializer() collected = datasets.collected tobesaved = datasets.tobesaved end job.register('job.datasets.collected', tobesaved, initializer, nil) local sets = { } table.setmetatableindex(tobesaved, function(t,k) local v = { } t[k] = v return v end) table.setmetatableindex(sets, function(t,k) local v = { index = 0, order = 0, } t[k] = v return v end) local function setdata(settings) local name = settings.name local tag = settings.tag local data = settings.data local list = tobesaved[name] if settings.convert and type(data) == "string" then data = settings_to_hash(data) end if type(data) ~= "table" then data = { data = settings.data } end if not tag then tag = #list + 1 else tag = tonumber(tag) or tag -- autonumber saves keys end list[tag] = data if settings.delay == v_yes then local set = sets[name] local index = set.index + 1 set.index = index data.index = index data.order = index data.realpage = texcount.realpageno if trace_datasets then report_dataset("action %a, name %a, tag %a, index %a","assign delayed",name,tag,index) end elseif trace_datasets then report_dataset("action %a, name %a, tag %a","assign immediate",name,tag) end return name, tag, data end datasets.setdata = setdata function datasets.extend(name,tag) local set = sets[name] local order = set.order + 1 local realpage = texcount.realpageno set.order = order local t = tobesaved[name][tag] t.realpage = realpage t.order = order if trace_datasets then report_dataset("action %a, name %a, tag %a, page %a, index %a","flush by order",name,tag,t.index or 0,order,realpage) end end function datasets.getdata(name,tag,key,default) local t = collected[name] if t == nil then if trace_datasets then report_dataset("error: unknown dataset, name %a",name) end elseif type(t) ~= "table" then return t else t = t[tag] or t[tonumber(tag)] if not t then if trace_datasets then report_dataset("error: unknown dataset, name %a, tag %a",name,tag) end elseif key then return t[key] or default else return t end end return default end function commands.setdataset(settings) settings.convert = true local name, tag = setdata(settings) if settings.delay ~= v_yes then -- elseif type(tag) == "number" then context(new_latelua(formatters["job.datasets.extend(%q,%i)"](name,tag))) else context(new_latelua(formatters["job.datasets.extend(%q,%q)"](name,tag))) end end function commands.datasetvariable(name,tag,key) local t = collected[name] if t == nil then if trace_datasets then report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name) -- no tag end elseif type(t) ~= "table" then context(tostring(t)) else t = t and (t[tag] or t[tonumber(tag)]) if not t then if trace_datasets then report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name,tag) end elseif type(t) == "table" then local s = t[key] if type(s) ~= "table" then context(tostring(s)) elseif trace_datasets then report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name,tag) end end end end --[[ldx--

We also provide an efficient variant for page states.

--ldx]]-- local collected = allocate() local tobesaved = allocate() local pagestates = { collected = collected, tobesaved = tobesaved, } job.pagestates = pagestates local function initializer() collected = pagestates.collected tobesaved = pagestates.tobesaved end job.register('job.pagestates.collected', tobesaved, initializer, nil) table.setmetatableindex(tobesaved, function(t,k) local v = { } t[k] = v return v end) local function setstate(settings) local name = settings.name local tag = settings.tag local list = tobesaved[name] if not tag then tag = #list + 1 else tag = tonumber(tag) or tag -- autonumber saves keys end local realpage = texcount.realpageno local data = realpage list[tag] = data if trace_pagestates then report_pagestate("action %a, name %a, tag %a, preset %a","set",name,tag,realpage) end return name, tag, data end pagestates.setstate = setstate function pagestates.extend(name,tag) local realpage = texcount.realpageno if trace_pagestates then report_pagestate("action %a, name %a, tag %a, preset %a","synchronize",name,tag,realpage) end tobesaved[name][tag] = realpage end function pagestates.realpage(name,tag,default) local t = collected[name] if t then t = t[tag] or t[tonumber(tag)] if t then return tonumber(t or default) elseif trace_pagestates then report_pagestate("error: unknown dataset, name %a, tag %a",name,tag) end elseif trace_pagestates then report_pagestate("error: unknown dataset, name %a, tag %a",name) -- nil end return default end function commands.setpagestate(settings) local name, tag, data = setstate(settings) if type(tag) == "number" then context(new_latelua(formatters["job.pagestates.extend(%q,%i)"](name,tag))) else context(new_latelua(formatters["job.pagestates.extend(%q,%q)"](name,tag))) end end function commands.pagestaterealpage(name,tag) local t = collected[name] t = t and (t[tag] or t[tonumber(tag)]) if t then context(t) end end function commands.setpagestaterealpageno(name,tag) local t = collected[name] t = t and (t[tag] or t[tonumber(tag)]) if t then texcount.realpagestateno = t else texcount.realpagestateno = texcount.realpageno end end context-2013.05.28.20130704/texmf-dist/tex/context/base/sort-ini.lua0000644000175000017500000005272112130411274024142 0ustar norbertnorbertif not modules then modules = { } end modules ['sort-ini'] = { version = 1.001, comment = "companion to sort-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- It took a while to get there, but with Fleetwood Mac's "Don't Stop" -- playing in the background we sort of got it done. --[[

The code here evolved from the rather old mkii approach. There we concatinate the key and (raw) entry into a new string. Numbers and special characters get some treatment so that they sort ok. In addition some normalization (lowercasing, accent stripping) takes place and again data is appended ror prepended. Eventually these strings are sorted using a regular string sorter. The relative order of character is dealt with by weighting them. It took a while to figure this all out but eventually it worked ok for most languages, given that the right datatables were provided.

Here we do follow a similar approach but this time we don't append the manipulated keys and entries but create tables for each of them with entries being tables themselves having different properties. In these tables characters are represented by numbers and sorting takes place using these numbers. Strings are simplified using lowercasing as well as shape codes. Numbers are filtered and after getting an offset they end up at the right end of the spectrum (more clever parser will be added some day). There are definitely more solutions to the problem and it is a nice puzzle to solve.

In the future more methods can be added, as there is practically no limit to what goes into the tables. For that we will provide hooks.

Todo: decomposition with specific order of accents, this is relatively easy to do.

Todo: investigate what standards and conventions there are and see how they map onto this mechanism. I've learned that users can come up with any demand so nothing here is frozen.

In the future index entries will become more clever, i.e. they will have language etc properties that then can be used.

]]-- local gsub, rep, sub, sort, concat = string.gsub, string.rep, string.sub, table.sort, table.concat local utfbyte, utfchar, utfcharacters, utfvalues = utf.byte, utf.char, utf.characters, utf.values local next, type, tonumber, rawget, rawset = next, type, tonumber, rawget, rawset local allocate = utilities.storage.allocate local setmetatableindex = table.setmetatableindex local trace_tests = false trackers.register("sorters.tests", function(v) trace_tests = v end) local trace_methods = false trackers.register("sorters.methods", function(v) trace_methods = v end) local report_sorters = logs.reporter("languages","sorters") local comparers = { } local splitters = { } local definitions = allocate() local tracers = allocate() local ignoredoffset = 0x10000 -- frozen local replacementoffset = 0x10000 -- frozen local digitsoffset = 0x20000 -- frozen local digitsmaximum = 0xFFFFF -- frozen local lccodes = characters.lccodes local lcchars = characters.lcchars local shchars = characters.shchars local fscodes = characters.fscodes local fschars = characters.fschars local decomposed = characters.decomposed local variables = interfaces.variables local v_numbers = variables.numbers local v_default = variables.default local v_before = variables.before local v_after = variables.after local v_first = variables.first local v_last = variables.last local validmethods = table.tohash { -- "ch", -- raw character "mm", -- minus mapping "zm", -- zero mapping "pm", -- plus mapping "mc", -- lower case - 1 "zc", -- lower case "pc", -- lower case + 1 "uc", -- unicode } local predefinedmethods = { [v_default] = "zc,pc,zm,pm,uc", [v_before] = "mm,mc,uc", [v_after] = "pm,mc,uc", [v_first] = "pc,mm,uc", [v_last] = "mc,mm,uc", } sorters = { comparers = comparers, splitters = splitters, definitions = definitions, tracers = tracers, constants = { ignoredoffset = ignoredoffset, replacementoffset = replacementoffset, digitsoffset = digitsoffset, digitsmaximum = digitsmaximum, defaultlanguage = v_default, defaultmethod = v_default, defaultdigits = v_numbers, } } local sorters = sorters local constants = sorters.constants local data, language, method, digits local replacements, m_mappings, z_mappings, p_mappings, entries, orders, lower, upper, method, sequence local thefirstofsplit local mte = { -- todo: assign to t __index = function(t,k) if k and k ~= "" and utfbyte(k) < digitsoffset then -- k check really needed (see s-lan-02) local el if k then local l = lower[k] or lcchars[k] el = rawget(t,l) end if not el then local l = shchars[k] if l and l ~= k then if #l > 1 then l = sub(l,1,1) -- todo end el = rawget(t,l) if not el then l = lower[k] or lcchars[l] if l then el = rawget(t,l) end end end el = el or k end -- rawset(t,k,el) return el else -- rawset(t,k,k) end end } local noorder = false local function preparetables(data) local orders, lower, m_mappings, z_mappings, p_mappings = data.orders, data.lower, { }, { }, { } for i=1,#orders do local oi = orders[i] local n = { 2 * i } m_mappings[oi], z_mappings[oi], p_mappings[oi] = n, n, n end local mtm = { __index = function(t,k) local n, nn if k then if trace_tests then report_sorters("simplifing character %C",k) end local l = lower[k] or lcchars[k] if l then if trace_tests then report_sorters(" 1 lower: %C",l) end local ml = rawget(t,l) if ml then n = { } nn = 0 for i=1,#ml do nn = nn + 1 n[nn] = ml[i] + (t.__delta or 0) end if trace_tests then report_sorters(" 2 order: % t",n) end end end if not n then local s = shchars[k] -- maybe all components? if s and s ~= k then if trace_tests then report_sorters(" 3 shape: %C",s) end n = { } nn = 0 for l in utfcharacters(s) do local ml = rawget(t,l) if ml then if trace_tests then report_sorters(" 4 keep: %C",l) end if ml then for i=1,#ml do nn = nn + 1 n[nn] = ml[i] end end else l = lower[l] or lcchars[l] if l then if trace_tests then report_sorters(" 5 lower: %C",l) end local ml = rawget(t,l) if ml then for i=1,#ml do nn = nn + 1 n[nn] = ml[i] + (t.__delta or 0) end end end end end else -- -- we probably never enter this branch -- -- fschars returns a single char -- -- s = fschars[k] -- if s and s ~= k then -- if trace_tests then -- report_sorters(" 6 split: %s",s) -- end -- local ml = rawget(t,s) -- if ml then -- n = { } -- nn = 0 -- for i=1,#ml do -- nn = nn + 1 -- n[nn] = ml[i] -- end -- end -- end local b = utfbyte(k) n = decomposed[b] or { b } if trace_tests then report_sorters(" 6 split: %s",utf.tostring(b)) -- todo end end if n then if trace_tests then report_sorters(" 7 order: % t",n) end else n = noorder if trace_tests then report_sorters(" 8 order: 0") end end end else n = noorder if trace_tests then report_sorters(" 9 order: 0") end end rawset(t,k,n) return n end } data.m_mappings = m_mappings data.z_mappings = z_mappings data.p_mappings = p_mappings m_mappings.__delta = -1 z_mappings.__delta = 0 p_mappings.__delta = 1 setmetatable(data.entries,mte) setmetatable(data.m_mappings,mtm) setmetatable(data.z_mappings,mtm) setmetatable(data.p_mappings,mtm) thefirstofsplit = data.firstofsplit end local function update() -- prepare parent chains, needed when new languages are added for language, data in next, definitions do local parent = data.parent or "default" if language ~= "default" then setmetatableindex(data,definitions[parent] or definitions.default) end data.language = language data.parent = parent data.m_mappings = { } -- free temp data data.z_mappings = { } -- free temp data data.p_mappings = { } -- free temp data end end local function setlanguage(l,m,d,u) language = (l ~= "" and l) or constants.defaultlanguage data = definitions[language or constants.defaultlanguage] or definitions[constants.defaultlanguage] method = (m ~= "" and m) or data.method or constants.defaultmethod digits = (d ~= "" and d) or data.digits or constants.defaultdigits if trace_tests then report_sorters("setting language %a, method %a, digits %a",language,method,digits) end replacements = data.replacements entries = data.entries orders = data.orders lower = data.lower upper = data.upper preparetables(data) m_mappings = data.m_mappings z_mappings = data.z_mappings p_mappings = data.p_mappings -- method = predefinedmethods[variables[method]] or method data.method = method -- data.digits = digits -- local seq = utilities.parsers.settings_to_array(method or "") -- check the list sequence = { } local nofsequence = 0 for i=1,#seq do local s = seq[i] if validmethods[s] then nofsequence = nofsequence + 1 sequence[nofsequence] = s else report_sorters("invalid sorter method %a in %a",s,method) end end data.sequence = sequence if trace_tests then report_sorters("using sort sequence: % t",sequence) end -- return data end function sorters.update() update() setlanguage(language,method,numberorder) -- resync current language and method end function sorters.setlanguage(language,method,numberorder) update() setlanguage(language,method,numberorder) -- new language and method end -- tricky: { 0, 0, 0 } vs { 0, 0, 0, 0 } => longer wins and mm, pm, zm can have them local function basicsort(sort_a,sort_b) if sort_a and sort_b then local na = #sort_a local nb = #sort_b if na > nb then na = nb end for i=1,na do local ai, bi = sort_a[i], sort_b[i] if ai > bi then return 1 elseif ai < bi then return -1 end end end return 0 end function comparers.basic(a,b) -- trace ea and eb local ea, eb = a.split, b.split local na, nb = #ea, #eb if na == 0 and nb == 0 then -- simple variant (single word) local result = 0 for j=1,#sequence do local m = sequence[j] result = basicsort(ea[m],eb[m]) if result ~= 0 then return result end end if result == 0 then local la, lb = #ea.uc, #eb.uc if la > lb then return 1 elseif lb > la then return -1 else return 0 end else return result end else -- complex variant, used in register (multiple words) local result = 0 for i=1,nb < na and nb or na do local eai, ebi = ea[i], eb[i] for j=1,#sequence do local m = sequence[j] result = basicsort(eai[m],ebi[m]) if result ~= 0 then return result end end if result == 0 then local la, lb = #eai.uc, #ebi.uc if la > lb then return 1 elseif lb > la then return -1 end else return result end end if result ~= 0 then return result elseif na > nb then return 1 elseif nb > na then return -1 else return 0 end end end local function numify(s) s = digitsoffset + tonumber(s) -- alternatively we can create range if s > digitsmaximum then s = digitsmaximum end return utfchar(s) end function sorters.strip(str) -- todo: only letters and such if str and str ~= "" then -- todo: make a decent lpeg str = gsub(str,"\\[\"\'~^`]*","") -- \"e -- hm, too greedy str = gsub(str,"\\%S*","") -- the rest str = gsub(str,"%s","\001") -- can be option str = gsub(str,"[%s%[%](){}%$\"\']*","") if digits == v_numbers then str = gsub(str,"(%d+)",numify) -- sort numbers properly end return str else return "" end end local function firstofsplit(entry) -- numbers are left padded by spaces local split = entry.split if #split > 0 then split = split[1].ch else split = split.ch end local first = split and split[1] or "" if thefirstofsplit then return thefirstofsplit(first,data,entry) -- normally the first one is needed else return first, entries[first] or "\000" -- tag end end sorters.firstofsplit = firstofsplit -- for the moment we use an inefficient bunch of tables but once -- we know what combinations make sense we can optimize this function splitters.utf(str) -- we could append m and u but this is cleaner, s is for tracing if #replacements > 0 then -- todo make an lpeg for this for k=1,#replacements do local v = replacements[k] str = gsub(str,v[1],v[2]) end end local m_case, z_case, p_case, m_mapping, z_mapping, p_mapping, char, byte, n = { }, { }, { }, { }, { }, { }, { }, { }, 0 local nm, nz, np = 0, 0, 0 for sc in utfcharacters(str) do local b = utfbyte(sc) if b >= digitsoffset then if n == 0 then -- we need to force number to the top z_case[1] = 0 m_case[1] = 0 p_case[1] = 0 char[1] = sc byte[1] = 0 m_mapping[1] = 0 z_mapping[1] = 0 p_mapping[1] = 0 n = 2 else n = n + 1 end z_case[n] = b m_case[n] = b p_case[n] = b char[n] = sc byte[n] = b nm = nm + 1 nz = nz + 1 np = np + 1 m_mapping[nm] = b z_mapping[nz] = b p_mapping[np] = b else n = n + 1 local l = lower[sc] l = l and utfbyte(l) or lccodes[b] if type(l) == "table" then l = l[1] -- there are currently no tables in lccodes but it can be some, day end z_case[n] = l if l ~= b then m_case[n] = l - 1 p_case[n] = l + 1 else m_case[n] = l p_case[n] = l end char[n], byte[n] = sc, b local fs = fscodes[b] or b local msc = m_mappings[sc] if msc ~= noorder then if not msc then msc = m_mappings[fs] end for i=1,#msc do nm = nm + 1 m_mapping[nm] = msc[i] end end local zsc = z_mappings[sc] if zsc ~= noorder then if not zsc then zsc = z_mappings[fs] end for i=1,#zsc do nz = nz + 1 z_mapping[nz] = zsc[i] end end local psc = p_mappings[sc] if psc ~= noorder then if not psc then psc = p_mappings[fs] end for i=1,#psc do np = np + 1 p_mapping[np] = psc[i] end end end end -- -- only those needed that are part of a sequence -- -- local b = byte[1] -- if b then -- -- we set them to the first split code (korean) -- local fs = fscodes[b] or b -- if #m_mapping == 0 then -- m_mapping = { m_mappings[fs][1] } -- end -- if #z_mapping == 0 then -- z_mapping = { z_mappings[fs][1] } -- end -- if #p_mapping == 0 then -- p_mapping = { p_mappings[fs][1] } -- end -- end local t = { ch = char, uc = byte, mc = m_case, zc = z_case, pc = p_case, mm = m_mapping, zm = z_mapping, pm = p_mapping, } return t end local function packch(entry) local split = entry.split if #split > 0 then -- useless test local t = { } for i=1,#split do local tt, li = { }, split[i].ch for j=1,#li do local lij = li[j] tt[j] = utfbyte(lij) > ignoredoffset and "[]" or lij end t[i] = concat(tt) end return concat(t," + ") else local t, li = { }, split.ch for j=1,#li do local lij = li[j] t[j] = utfbyte(lij) > ignoredoffset and "[]" or lij end return concat(t) end end local function packuc(entry) local split = entry.split if #split > 0 then -- useless test local t = { } for i=1,#split do t[i] = concat(split[i].uc, " ") end return concat(t," + ") else return concat(split.uc," ") end end function sorters.sort(entries,cmp) if trace_tests or trace_methods then local nofentries = #entries report_sorters("entries: %s, language: %s, method: %s, digits: %s",nofentries,language,method,tostring(digits)) for i=1,nofentries do report_sorters("entry %s",table.serialize(entries[i].split,i,true,true,true)) end end if trace_tests then sort(entries,function(a,b) local r = cmp(a,b) local e = (not r and "?") or (r<0 and "<") or (r>0 and ">") or "=" report_sorters("%s %s %s | %s %s %s",packch(a),e,packch(b),packuc(a),e,packuc(b)) return r == -1 end) local s for i=1,#entries do local entry = entries[i] local letter, first = firstofsplit(entry) if first == s then first = " " else s = first report_sorters(">> %C (%C)",first,letter) end report_sorters(" %s | %s",packch(entry),packuc(entry)) end else sort(entries,function(a,b) return cmp(a,b) == -1 end) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-steps.mkii0000644000175000017500000006406011754241457024154 0ustar norbertnorbert%D \module %D [ file=m-steps, %D version=2001.05.28, %D title=\CONTEXT\ Modules, %D subtitle=Step Charts \& Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 When I need this module, I will reimplement it by using the new %D sometxt macro. Anyhow, it reflects the state of 2001. \unprotect % temp hack : % \ifx\v!kleinkorps\undefined \let\v!kleinkorps\setsmallbodyfont \fi % end of hack \definecolor [STEPlinecolor] [s=.5] \definecolor [STEPframecolor] [s=.7] \definecolor [STEPbackgroundcolor] [s=.9] \def\@@STPF{@@STPF} % frames \def\@@STPC{@@STPC} % charts \def\@@STPT{@@STPT} % tables \def\@@STEC{@@STEC} % cells \def\@@STET{@@STET} % tables \def\@@STEL{@@STEL} % lines \def\setupSTEPcharts{\dodoubleargument\getparameters[\@@STPC]} \def\setupSTEPtables{\dodoubleargument\getparameters[\@@STPT]} \def\setupSTEPcells {\dodoubleargument\getparameters[\@@STEC]} \def\setupSTEPtexts {\dodoubleargument\getparameters[\@@STET]} \def\setupSTEPlines {\dodoubleargument\getparameters[\@@STEL]} \setupSTEPcharts [\c!before=\blank, \c!after=\blank, %\c!distance=.25em, % nvt \c!hoffset=1em, \c!voffset=1ex, \c!method=1, \c!height=2ex, \c!offset=.15\bodyfontsize] \setupSTEPtables [\c!before=\blank, \c!after=\blank, \c!distance=.25em, %\c!hoffset=1em, % nvt \c!voffset=1ex, \c!method=1, \c!width=4em, \c!offset=.15\bodyfontsize] \setupSTEPcells [\c!alternative=24, \c!background=\v!color, \c!backgroundcolor=STEPbackgroundcolor, \c!rulethickness=.1\bodyfontsize, \c!framecolor=STEPframecolor, \c!offset=.25\bodyfontsize, \c!style=, \c!color=] \setupSTEPtexts [\c!alternative=24, \c!background=\v!color, \c!backgroundcolor=STEPbackgroundcolor, \c!rulethickness=.1\bodyfontsize, \c!framecolor=STEPframecolor, \c!offset=.25\bodyfontsize, \c!style=\v!smallbodyfont, \c!color=] \setupSTEPlines [\c!alternative=1, \c!rulethickness=.15\bodyfontsize, \c!color=STEPlinecolor] \def\initializeSTEP {\initializeSTET \initializeSTEC \initializeSTEL} \def\initializeSTPC {\freezedimenmacro\@@STPCoffset \startMPdrawing line_v_offset := \@@STPCoffset ; line_method := \@@STPCmethod ; % only charts \stopMPdrawing} \def\initializeSTPT {\freezedimenmacro\@@STPToffset \startMPdrawing line_h_offset := \@@STPToffset ; line_method := \@@STPTmethod ; % only charts \stopMPdrawing} \def\initializeSTET {\freezedimenmacro\@@STETrulethickness \freezedimenmacro\@@STEToffset} \def\initializeSTEC {\freezedimenmacro\@@STECrulethickness \freezedimenmacro\@@STECoffset} \def\initializeSTEL {\freezedimenmacro\@@STELrulethickness} %D ... \presetlocalframed[\@@STPF] \def\@@stepcell#1% {\doattributes\@@STEC\c!style\c!color {\localframed [\@@STPF][\c!offset=\@@STECoffset,\c!frame=\v!off] {\ignorespaces#1\unskip}}} \def\@@stepfake#1% {\doattributes\@@STEC\c!style\c!color {\ignorespaces#1\unskip}} \def\@@steptext#1% {\doattributes\@@STET\c!style\c!color {\localframed [\@@STPF][\c!offset=\@@STEToffset,\c!frame=\v!off] {\ignorespaces#1\unskip}}} %D The first attempt was purely \METAPOST\ based and spawned %D the typesetting to the \METAFUN\ handler. This method %D collects the cells, and directly passes them on to %D \METAPOST. This method is the cleanest, but has the %D disadvantage that one cannot embed hyperlinks or document %D dependent definitions in the cells. The implementation %D roughly looks as follows: %D %D \starttyping %D \def\startSTEPchart% %D {\bgroup %D \startMPdrawing %D input mp-step.mpii ; begin_step_chart ; %D \stopMPdrawing %D \initializeSTEP %D \let\cells\stepchartcells \def\cell{\cells{}}% %D \let\texts\stepcharttexts \def\text{\texts{}}} %D %D \def\stepchartcells#1#2% %D {\setMPtext{tdummy}{\strut\ignorespaces#1\unskip}% beter etex/btex %D \setMPtext{bdummy}{\strut\ignorespaces#2\unskip}% beter etex/btex %D \startMPdrawing %D set_step_chart_cells(\MPstring{tdummy},\MPstring{bdummy}) ; %D \stopMPdrawing} %D %D \def\stepcharttexts#1#2% %D {\setMPtext{tdummy}{\strut\ignorespaces#1\unskip}% beter etex/btex %D \setMPtext{bdummy}{\strut\ignorespaces#2\unskip}% beter etex/btex %D \startMPdrawing %D set_step_chart_texts(\MPstring{tdummy},\MPstring{bdummy}) ; %D \stopMPdrawing} %D %D \def\stopSTEPchart %D {\startMPdrawing %D end_step_chart ; %D \stopMPdrawing %D \MPdrawingdonetrue %D \getMPdrawing %D \resetMPdrawing %D \egroup} %D \stoptyping %D %D This method has the advantage that it does the job in %D (virtually) one pass, while the next methods need multiple %D passes: one to build the table, another to synchronize the %D positions, and a third one beause the dimensions may have %D changed. The last pass is a result from the fact that %D positions are related to the page. %D %D The second attempt was based on tabulations and used the %D build in position tracking mechanism, which uses two %D position nodes per cell. %D %D This method collects the content in token list registers %D and build a table from them. In the collecting pass, the %D graphics are build stepwise. We need to collect because the %D order of definitions is not the same as the order of %D typesetting. We show this alternative too because it %D demonstrates how to apply backgrounds to table cells. %D %D \starttyping %D \newtoks\stepsonetop \newtoks\stepstwotop %D \newtoks\stepsonebot \newtoks\stepstwobot %D \stoptyping %D %D During the collecting phase, we temporarily have to %D increment the name space counter. %D %D \starttyping %D \def\startSTEPchart% %D {\bgroup %D \resetMPdrawing %D \advance\noftabpositions\plusone % begin of preroll %D \startMPdrawing %D input mp-step.mpii ; %D begin_step_chart ; %D \stopMPdrawing %D \initializeSTEP %D \newcounter\cellcounter %D \stepsonetop\emptytoks \chardef\somesteponetop=1 %D \stepsonebot\emptytoks \chardef\somesteponebot=1 %D \stepstwotop\emptytoks \chardef\somesteptwotop=1 %D \stepstwobot\emptytoks \chardef\somesteptwobot=1 %D \let\cells\stepchartcells \def\cell{\cells{}}% %D \let\texts\stepcharttexts \def\text{\texts{}}} %D \stoptyping %D %D Now we collect the steps and texts, and in the process the %D graphic is built. Then we continue with building the table. %D %D Watch how we anchor the graphic to the main table box. This %D is needed since the graphic may be larger than the table %D itself. Actually, these small point took me the most time to %D digest, even with the right tools (anchors) already in %D place. %D %D \starttyping %D \def\stopSTEPchart %D {\splittabulatefalse %D \insidefloattrue %D \startMPdrawing %D nofcells := \cellcounter ; %D end_step_chart ; %D anchor_box(\MPpos{\tbPOSprefix origin}) ; %D \stopMPdrawing %D \MPdrawingdonetrue %D \advance\noftabpositions\minusone % end of preroll %D \setbox0=\vbox %D {\getMPdrawing} %D \resetMPdrawing %D \increment(\cellcounter,\cellcounter)\decrement\cellcounter %D \setbox2=\vbox %D {\definetabulate[chart][|*{\cellcounter}{ck0|}] % k0 nills space %D \startchart %D \ifcase\somesteptwotop \the\stepstwotop \NC \NR \noalign{\kern2ex} \fi %D \ifcase\somesteponetop \the\stepsonetop \NC \NR \noalign{\kern2ex} \fi %D \ifcase\somesteponebot \the\stepsonebot \NC \NR \noalign{\kern2ex} \fi %D \ifcase\somesteptwobot \the\stepstwobot \NC \NR \noalign{\kern2ex} \fi %D \noalign{\kern-2ex}% %D \stopchart} %D \hbox %D {\scratchdimen\wd0 %D \advance\scratchdimen \MPllx bp %D \raise\MPlly bp\box0 %D \hskip-\scratchdimen %D \hpos{\tbPOSprefix origin}{\box2}} %D \egroup} %D \stoptyping %D %D The steps and texts fill the (at most 4) lines that make up %D the table. We also feed the (automatically registerd) cell %D dimensions to the graphic backend. %D %D \starttyping %D \newcounter\cellcounter %D \newcounter\textcounter %D %D \def\stepchartcells#1#2% %D {\doloop %D {\ifnum\cellcounter>\textcounter %D \stepcharttexts{}{}% %D \else %D \exitloop %D \fi}% %D \increment\cellcounter %D \doifelsenothing{#1} %D {\startMPdrawing %D cells[t][\cellcounter] := origin ; %D \stopMPdrawing %D \appendtoks\NC\NC\to\stepsonetop} %D {\chardef\somesteponetop=0 %D \edef\stepidentifier{\cellcounter-t-c}% %D \startMPdrawing %D initialize_area(\MPpos{b:\tbPOSprefix\stepidentifier}, %D \MPpos{e:\tbPOSprefix\stepidentifier}) ; %D cells[t][\cellcounter] := pxy ; %D \stopMPdrawing %D \@EA\appendtoks\@EA\stepidentifierposition\@EA{\stepidentifier}#1\NC\to\stepsonetop}% %D \doifelsenothing{#2} %D {\startMPdrawing %D cells[b][\cellcounter] := origin ; %D \stopMPdrawing %D \appendtoks\NC\NC\to\stepsonebot} %D {\chardef\somesteponebot=0 %D \edef\stepidentifier{\cellcounter-b-c}% %D \startMPdrawing %D initialize_area(\MPpos{b:\tbPOSprefix\stepidentifier}, %D \MPpos{e:\tbPOSprefix\stepidentifier}) ; %D cells[b][\cellcounter] := pxy ; %D \stopMPdrawing %D \@EA\appendtoks\@EA\stepidentifierposition\@EA{\stepidentifier}#2\NC\to\stepsonebot}} %D %D \def\stepcharttexts#1#2% \cellcounter = nofcells %D {\increment\textcounter %D \doifelsenothing{#1} %D {\startMPdrawing %D texts[t][\cellcounter][\textcounter] := origin ; %D \stopMPdrawing %D \appendtoks\NC\NC\to\stepstwotop} %D {\chardef\somesteptwotop=0 %D \edef\stepidentifier{\cellcounter-\textcounter-t-t}% %D \startMPdrawing %D initialize_area(\MPpos{b:\tbPOSprefix\stepidentifier}, %D \MPpos{e:\tbPOSprefix\stepidentifier}) ; %D texts[t][\cellcounter][\textcounter] := pxy ; %D \stopMPdrawing %D \@EA\appendtoks\@EA\NC\@EA\textcellposition\@EA{\stepidentifier}#1\to\stepstwotop}% %D \doifelsenothing{#2} %D {\startMPdrawing %D texts[b][\cellcounter][\textcounter] := origin ; %D \stopMPdrawing %D \appendtoks\NC\NC\to\stepstwobot} %D {\chardef\somesteptwobot=0 %D \edef\stepidentifier{\cellcounter-\textcounter-b-t}% %D \startMPdrawing %D initialize_area(\MPpos{b:\tbPOSprefix\stepidentifier}, %D \MPpos{e:\tbPOSprefix\stepidentifier}) ; %D texts[b][\cellcounter][\textcounter] := pxy ; %D \stopMPdrawing %D \@EA\appendtoks\@EA\NC\@EA\textcellposition\@EA{\stepidentifier}#2\to\stepstwobot}} %D \stoptyping %D %D Here are the hooks that take care of calculating the cell %D dimensions. %D %D \starttyping %D \def\textcellposition#1{\GSC[#1:text]} %D \def\stepidentifierposition#1{\GSC[#1:step]} %D \stoptyping %D %D We abandoned this method after some testing and went for %D a third one. It was this third method that evolved into the %D current mechanism. %D %D Since this method was not that efficient, a third one was %D implemented, which used one position per cell. So, %D %D \blank {\bf Here starts the real implementation!} \blank %D %D Because we want to build one graphic only we need to store %D the graphic directives. We also need to collect the cells, %D which are not defined in the order they show up. This %D solution uses multiple passes over the definitions. First %D the cells and texts are processed and the associated %D graphics are defined in the \METAPOST\ file. Next the %D lines are flushed. We need to do that in a second pass, %D because in order to determine the nature of the line, %D \METAPOST\ needs to know if the start and end cells exist. %D This need comes from the fact that we store the shapes %D and lines kind of directly with their associated colors and %D types, so that we can change the settings in between. So, %D changing for instance the line color, can take place %D locally. \newbox\stepboxone \newbox\stepboxtwo \newbox\textboxone \newbox\textboxtwo %D We need to define a dedicated name space counter. \newcounter\currentstepchart \def\stepchartprefix{@sc@-\currentstepchart-} %D Next we define the initialization part of the macros. \newcounter\cellcounter \newcounter\textcounter \def\startSTEPchart {\dosingleempty\dostartSTEPchart} \long\def\dostartSTEPchart[#1]#2\stopSTEPchart {\ifinsidefloat \else \whitespace \@@STPCbefore \startbaselinecorrection \setlocalhsize \noindent \fi \vbox\bgroup \setupSTEPcharts[#1]% \forgetall \pushMPdrawing \resetMPdrawing \doglobal\increment\currentstepchart \startMPdrawing input mp-step.mpii ; begin_step_chart ; \stopMPdrawing \initializeSTEP \initializeSTPC \global\chardef\somestepboxone\plusone \global\chardef\sometextboxone\plusone \global\chardef\somestepboxtwo\somestepboxone \global\chardef\sometextboxtwo\sometextboxone \def\startlines{\bgroup\setupSTEPlines}% \def\stoplines {\egroup}% \def\cells{\dosingleempty\dostepchartcells} \def\texts{\dosingleempty\dostepcharttexts} \def\cell {\dosingleempty\docell}% \def\text {\dosingleempty\dotext}% \def\docell[##1]{\dostepchartcells[##1]{}}% \def\dotext[##1]{\dostepcharttexts[##1]{}} \doglobal\newcounter\cellcounter \doglobal\newcounter\textcounter \let\dostepchartcells\doSTEPchartcellsA \let\dostepcharttexts\doSTEPcharttextsA {#2} % pass one: cells and texts {} keeps setting local \startMPdrawing nofcells := \cellcounter ; analyze_step_chart ; \stopMPdrawing \doglobal\newcounter\cellcounter \doglobal\newcounter\textcounter \let\dostepchartcells\doSTEPchartcellsB \let\dostepcharttexts\doSTEPcharttextsB {#2} % pass two: lines \startMPdrawing end_step_chart ; % if box_found(\MPpos{\stepchartprefix origin}) : % initialize_box(\MPpos{\stepchartprefix origin}) ; % draw pxy ; % fi ; anchor_box(\MPpos{\stepchartprefix origin}) ; \stopMPdrawing \MPdrawingdonetrue \doifelse\@@STPCmethod{0} {\setbox0\null} {\setbox0\vbox{\MPstaticgraphictrue\getMPdrawing}}% \resetMPdrawing \setbox2\vbox {\offinterlineskip \scratchdimen\@@STPCheight \advance\scratchdimen\@@STPCoffset \advance\scratchdimen\@@STPCoffset \ifcase\sometextboxone \box\textboxone \vskip\scratchdimen \fi \ifcase\somestepboxone \box\stepboxone \vskip\@@STPCvoffset \fi \ifcase\somestepboxtwo \box\stepboxtwo \vskip\scratchdimen \fi \ifcase\sometextboxtwo \box\textboxtwo \vskip\@@STPCvoffset \fi \global\setbox\stepboxone\emptybox \global\setbox\stepboxtwo\emptybox % needed indeed \global\setbox\textboxone\emptybox \global\setbox\textboxtwo\emptybox % needed indeed %\kern-\scratchdimen % no, instead: \vskip-\lastskip} \hbox {\scratchdimen\wd0 \advance\scratchdimen \MPllx bp \raise\MPlly bp\box0 \hskip-\scratchdimen \hpos{\stepchartprefix origin}{\box2}}% \popMPdrawing \egroup \ifinsidefloat \else \stopbaselinecorrection \@@STPCafter \fi} %D The next macro looks more complicated than it is. We collect %D the cells in boxes. Before adding a new step cell, we padd %D the text rows. After adding the step cells, we flush text %D cells that are defined but not yet processed. \def\doSTEPchartcellsA[#1]#2#3% {% synchronize texts \doSTEPchartcellsAB[#1]{#2}{#3}% % package steps \setbox0\hbox{\doifsomething{#2}{\@@stepcell{#2}}}% \setbox2\hbox{\doifsomething{#3}{\@@stepcell{#3}}}% \ifdim\wd0>\zeropoint \!!doneafalse \else \!!doneatrue \fi \ifdim\wd2>\zeropoint \!!donebfalse \else \!!donebtrue \fi \ifdim\wd0>\wd2 \setbox2\hbox to \wd0{\hss\box2\hss}% \else \setbox0\hbox to \wd2{\hss\box0\hss}% \fi \if!!donea \startMPdrawing cells[t][\cellcounter] := nullpicture ; \stopMPdrawing \else \global\chardef\somestepboxone\zerocount \edef\stepidentifier{\stepchartprefix\cellcounter-t-c}% \setbox0\hbox{\hpos{\stepidentifier}{\box0}}% \bgroup \iffirstargument\setupSTEPcells[#1]\fi\initializeSTEC \startMPdrawing initialize_box(\MPpos{\stepidentifier}) ; cells[t][\cellcounter] := \MPcellsgraphic ; \stopMPdrawing \egroup \fi \if!!doneb \startMPdrawing cells[b][\cellcounter] := nullpicture ; \stopMPdrawing \else \global\chardef\somestepboxtwo\zerocount \edef\stepidentifier{\stepchartprefix\cellcounter-b-c}% \setbox2\hbox{\hpos{\stepidentifier}{\box2}}% \bgroup \iffirstargument\setupSTEPcells[#1]\fi\initializeSTEC \startMPdrawing initialize_box(\MPpos{\stepidentifier}) ; cells[b][\cellcounter] := \MPcellsgraphic ; \stopMPdrawing \egroup \fi \global\setbox\stepboxone\hbox {\ifdim\wd\stepboxone>\zeropoint \box\stepboxone\hskip\@@STPChoffset\else \fi\box0}% \global\setbox\stepboxtwo\hbox {\ifdim\wd\stepboxtwo>\zeropoint \box\stepboxtwo\hskip\@@STPChoffset\else \fi\box2}% % flush saved texts \doSTEPchartcellsBA} \def\doSTEPchartcellsB[#1]#2#3% {\doSTEPchartcellsAB[#1]{#2}{#3}% \doSTEPchartcellsBA} \def\doSTEPchartcellsAB[#1]#2#3% {\doloop {\ifnum\cellcounter>\textcounter \texts{}{}\else\exitloop \fi}% \doglobal\increment\cellcounter} \def\doSTEPchartcellsBA {\scratchtoks\stepchartbuffer \stepchartbuffer\emptytoks \the\scratchtoks} \def\MPcellsgraphic {image ( drawshape ( \@@STECalternative, pxy enlarged (-.5*\@@STECoffset), \@@STECrulethickness, \MPcolor{\@@STECframecolor}, \MPcolor{\@@STECbackgroundcolor} ) )} %D Although each step can have only one associated text, the %D place where the text is defined determines the starting %D point of the connecting arrow. Although several methods are %D possible, we've chosen a funny collector that flushes one %D step text at a time. \newtoks\stepchartbuffer \def\doSTEPcharttextsA[#1]% #2 #3 {\dodoSTEPcharttextsA{\cellcounter}{#1}} \def\dodoSTEPcharttextsA#1#2#3#4% #1=number #2=setup {\dodoSTEPcharttextsAB{#1}{#2}{#3}{#4}\dodoSTEPcharttextsA \ifnum\textcounter>\cellcounter\relax \doglobal\decrement\textcounter\relax \else \setbox0\hbox{\doifsomething{#3}{\@@steptext{#3}}}% \setbox2\hbox{\doifsomething{#4}{\@@steptext{#4}}}% \ifdim\wd0>\zeropoint \!!doneafalse \else \!!doneatrue \fi \ifdim\wd2>\zeropoint \!!donebfalse \else \!!donebtrue \fi \if!!donea \setbox0\hbox to \@@STPChoffset{\hss}% \startMPdrawing texts[t][#1][\textcounter] := nullpicture ; \stopMPdrawing \else \global\chardef\sometextboxone\zerocount \edef\stepidentifier{\stepchartprefix#1-\textcounter-t-t}% \setbox0\hbox to \@@STPChoffset {\hss\hpos{\stepidentifier}{\box0}\hss}% \bgroup \setupSTEPtexts[#2]\initializeSTET \startMPdrawing initialize_box(\MPpos{\stepidentifier}) ; texts[t][#1][\textcounter] := \MPtextsgraphic ; \stopMPdrawing \egroup \fi \if!!doneb \setbox2\hbox to \@@STPChoffset{\hss}% \startMPdrawing texts[b][#1][\textcounter] := nullpicture ; \stopMPdrawing \else \global\chardef\sometextboxtwo\zerocount \edef\stepidentifier{\stepchartprefix#1-\textcounter-b-t}% \setbox2\hbox to \@@STPChoffset {\hss\hpos{\stepidentifier}{\box2}\hss}% \bgroup \setupSTEPtexts[#2]\initializeSTET \startMPdrawing initialize_box(\MPpos{\stepidentifier}) ; texts[b][#1][\textcounter] := \MPtextsgraphic ; \stopMPdrawing \egroup \fi \global\setbox\textboxone\hbox {\hbox to \wd\stepboxone{\box\textboxone\hss}\box0} \global\setbox\textboxtwo\hbox {\hbox to \wd\stepboxtwo{\box\textboxtwo\hss}\box2} \fi} \def\doSTEPcharttextsB[#1]% #2 #3 {\dodoSTEPcharttextsB{\cellcounter}{#1}} \def\dodoSTEPcharttextsB#1#2#3#4% #1=number #2=setup {\dodoSTEPcharttextsAB{#1}{#2}{#3}{#4}\dodoSTEPcharttextsB \ifnum\textcounter>\cellcounter\relax \doglobal\decrement\textcounter\relax \else \bgroup \initializeSTEL \startMPdrawing lines[t][#1][\textcounter] := \MPcharttoplinesgraphic{#1}\textcounter ; lines[b][#1][\textcounter] := \MPchartbotlinesgraphic{#1}\textcounter ; \stopMPdrawing \egroup \fi} \def\dodoSTEPcharttextsAB#1#2#3#4#5% #1=number #2=setup {\doglobal\increment\textcounter\relax \ifnum\textcounter>\cellcounter\relax \@EA\appendtoks\@EA#5\@EA{#1}{#2}{#3}{#4}\to\stepchartbuffer \fi} \def\MPtextsgraphic {image(drawshape( \@@STETalternative, pxy enlarged (-.5*\@@STEToffset), \@@STETrulethickness, \MPcolor{\@@STETframecolor}, \MPcolor{\@@STETbackgroundcolor} ) )} \def\MPcharttoplinesgraphic#1#2% {image(drawline( \@@STELalternative, get_step_chart_top_line(#1,#2), \@@STELrulethickness, \MPcolor{\@@STELcolor} ) )} \def\MPchartbotlinesgraphic#1#2% {image(drawline( \@@STELalternative, get_step_chart_bot_line(#1,#2), \@@STELrulethickness, \MPcolor{\@@STELcolor} ) )} %D Step tables are the vertical counterpart of stepcharts. \newcounter\currentsteptable \def\steptableprefix{@st@-\currentsteptable-} \def\startSTEPtable {\dosingleempty\dostartSTEPtable} \def\dostartSTEPtable[#1]#2\stopSTEPtable {\dostartSTEPaligntable[0][#1]#2\stopSTEPaligntable} \def\startSTEPaligntable {\dodoubleempty\dostartSTEPaligntable[1]} \def\dostartSTEPaligntable[#1][#2]#3\stopSTEPaligntable % flag settings data {\ifinsidefloat \else \whitespace \@@STPTbefore \startbaselinecorrection \setlocalhsize \noindent \fi \vbox\bgroup \setupSTEPtables[#2]% \forgetall \pushMPdrawing \doglobal\increment\currentsteptable \startMPdrawing input mp-step.mpii ; begin_step_table ; \stopMPdrawing \initializeSTEP \initializeSTPT \def\startlines{\bgroup\setupSTEPlines}% \def\stoplines {\egroup}% \def\prep##1{\ignorespaces##1\unskip\enspace\ignorespaces}% \def\cell {\dosingleempty\docell}% \def\cells {\dosingleempty\docells}% \def\text {\dosingleempty\dotext}% % first graphic pass, also trial pass \global\dimen1\zeropoint \global\dimen3\zeropoint \global\dimen5\zeropoint \def\docell[##1]% {\docells[##1]{}{}}% \def\docells[##1]##2##3##4% {\doglobal\increment\cellcounter \bgroup \iffirstargument\setupSTEPcells[##1]\fi \initializeSTEC \startMPdrawing if box_found(\MPpos{\steptableprefix\cellcounter-c}) : initialize_box(\MPpos{\steptableprefix\cellcounter-c}) ; cells[\cellcounter] := \MPcellsgraphic ; fi ; \stopMPdrawing \egroup \def\do####1####2% {\setbox\scratchbox\hbox{\@@stepfake{####2}}% \ifdim\wd\scratchbox>\dimen####1\global\dimen####1=\wd\scratchbox\fi}% \ifcase#1\else\do1{##2}\do3{##3}\fi\do5{##4}}% \def\dotext[##1]##2% {\bgroup \iffirstargument\setupSTEPtexts[##1]\fi \initializeSTET \startMPdrawing if box_found(\MPpos{\steptableprefix\cellcounter-t}) : initialize_box(\MPpos{\steptableprefix\cellcounter-t}) ; texts[\cellcounter] := \MPtextsgraphic ; fi ; \stopMPdrawing \egroup} \doglobal\newcounter\cellcounter#3 % second graphic pass pass, drawing lines \def\docells[##1]##2##3##4% {\doglobal\increment\cellcounter} \def\dotext[##1]##2% {\bgroup \initializeSTEL \startMPdrawing lines[\cellcounter] := \MPtablelinesgraphic ; \stopMPdrawing \egroup} \doglobal\newcounter\cellcounter#3 % finishing graphic touch \startMPdrawing nofcells := \cellcounter ; end_step_table ; anchor_box(\MPpos{\steptableprefix origin}) ; \stopMPdrawing \MPdrawingdonetrue \doifelse\@@STPTmethod{0} {\setbox0\null} {\setbox0\vbox{\MPstaticgraphictrue\getMPdrawing}}% \resetMPdrawing % typesetting pass \dimen6=\@@STPTdistance \dimen6=2\dimen6 % cell width \dimen8=\dimen1 \advance\dimen8\dimen3 \advance\dimen8\dimen5 % offset width \ifcase#1\else \advance\dimen8 \dimen6 \fi % arrow width \advance\dimen8 \@@STPTwidth \advance\dimen8 \@@STPToffset \advance\dimen8 \@@STPToffset \def\docells[##1]##2##3##4% {\doglobal\increment\cellcounter \def\do####1####2####3####4% % strut really needed there ! {\hbox to \dimen####1{####2\@@stepfake{####3}\strut####4}}% \setbox8\hbox {\ifcase#1\else \do1\hss{##2}\relax \hskip\@@STPTdistance \do3\hss{##3}\hss \hskip\@@STPTdistance \fi \do5\relax{##4}\hss}% \hpos{\steptableprefix\cellcounter-c}{\@@stepcell{\box8}} \endgraf \nointerlineskip \kern\@@STPTvoffset} \def\dotext[##1]##2% {\bgroup \hskip\dimen8 \advance\hsize-\dimen8 \advance\hsize-\dimen6 % twice the offset \setbox0\hbox{\@@steptext{##2}}% % to do % \ifdim\wd0>\hsize % \setbox0=\vbox{\@@steptext{##2}}% % \fi % align \hpos{\steptableprefix\cellcounter-t}{\box0}% \endgraf \egroup \nointerlineskip \kern\@@STPTvoffset} \setbox2\vbox {\doglobal\newcounter\cellcounter #3\kern-\@@STPTvoffset} \hbox {\scratchdimen\wd0 \advance\scratchdimen \MPllx bp \raise\MPlly bp\box0 \hskip-\scratchdimen \hpos{\steptableprefix origin}{\box2}} \popMPdrawing \egroup \ifinsidefloat \else \stopbaselinecorrection \@@STPTafter \fi} \def\MPtablelinesgraphic {image ( drawline ( \@@STELalternative, get_step_table_line(\cellcounter), \@@STELrulethickness, \MPcolor{\@@STELcolor} ) )} \protect \continueifinputfile{m-steps.tex} % A simple paragraph-flow test: \starttext \startbuffer \startSTEPchart \cells {A} {B} \cells {one} {five} \texts{$+2$}{$-2$} \cells {two} {four} \texts{$+3$}{$-3$} \cells {three} {three} \texts{$+4$}{$-4$} \cells {four} {two} \texts{$+5$}{$-5$} \cells {five} {one} \stopSTEPchart \stopbuffer \getbuffer \startnarrower \getbuffer \stopnarrower \placefigure[left]{}{\getbuffer} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-ren.mkiv0000644000175000017500000006104412130411274024316 0ustar norbertnorbert%D \module %D [ file=strc-ren, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Section Rendering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Section Rendering} \unprotect \newbox\b_strc_rendering_head \newdimen\d_strc_rendering_local_leftoffset \newdimen\d_strc_rendering_local_rightoffset % Martin Kolarik's problem: % % \setuphead[section][command=\doTitle] % \def\doTitle#1#2{\ruledvbox{\forgetall \hsize=4cm \ruledhbox{\ruledvtop{#1}\ruledvtop{#2}}}} % \section{test test test test test test test test test test test test test test test test test} \newtoks\everyheadstart \unexpanded\def\strc_rendering_initialize_style_and_color {\ifconditional\headisdisplay \expandafter\strc_rendering_initialize_style_and_color_display \else \expandafter\strc_rendering_initialize_style_and_color_inline \fi} \unexpanded\def\strc_rendering_initialize_style_and_color_display#1#2% {\dontconvertfont \edef\p_strc_rendering_interlinespace{\headparameter\c!interlinespace}% \ifx\p_strc_rendering_interlinespace\empty % here the interline space is only set when style sets no space \setfalse\fontattributeisset % use the currentfontparameter state instead \setfalse\interlinespaceisset \useheadstyleandcolor\c!style\c!color\relax \ifconditional\fontattributeisset \ifconditional\interlinespaceisset \else \setupinterlinespace \fi \fi \setfalse\fontattributeisset \useheadstyleandcolor#1#2\relax \ifconditional\fontattributeisset \ifconditional\interlinespaceisset \else \setupinterlinespace \fi \fi \else % here the set interline space overloads any other set space in the style \setfalse\fontattributeisset \useheadstyleandcolor\c!style\c!color\relax \ifconditional\fontattributeisset \dosetupcheckedinterlinespace\p_strc_rendering_interlinespace \fi \setfalse\fontattributeisset \useheadstyleandcolor#1#2\relax \ifconditional\fontattributeisset \dosetupcheckedinterlinespace\p_strc_rendering_interlinespace \fi \fi} \unexpanded\def\strc_rendering_initialize_style_and_color_inline#1#2% {\dontconvertfont \setfalse\fontattributeisset \useheadstyleandcolor\c!style\c!color\relax \ifconditional\fontattributeisset \updateraggedskips % \setupspacing \fi \setfalse\fontattributeisset \useheadstyleandcolor#1#2\relax \ifconditional\fontattributeisset \updateraggedskips % \setupspacing \fi} \let\currentstructurereferenceattribute\attributeunsetvalue \def\headreferenceattributes {\iflocation % \ctxlua{structures.lists.taglocation(\nextinternalreference)}% maybe ... tags entry as used attr \destinationattribute \currentstructureattribute attr \referenceattribute \currentstructurereferenceattribute % attr \internalattribute \nextinternalreference \fi} \def\setinlineheadreferenceattributes {\ifconditional\headisdisplay \else \iflocation \attribute\destinationattribute\currentstructureattribute \attribute\referenceattribute \currentstructurereferenceattribute % \attribute\internalattribute \nextinternalreference \fi \fi} \def\docheckheadreference {\edef\currentheadinteraction{\headparameter\c!interaction}% \ifx\currentheadinteraction\v!list % setuphead[
][interaction=list,...] \strc_references_get_simple_page_reference{bck:\nextinternalreference}% \let\currentstructurereferenceattribute\currentreferenceattribute \else\ifx\currentheadinteraction\v!reference % setuphead[
][interaction=reference,...] start
[backreference=abc,...] \edef\currentheadbackreference{\structurevariable\c!backreference}% weird, was references.backreference \ifx\currentheadbackreference\empty \else \strc_references_get_simple_page_reference\currentheadbackreference \let\currentstructurereferenceattribute\currentreferenceattribute \fi \else % maybe auto: backreference when given, else list \fi\fi} % a bit messy ... empty in place instead of self .. might change (or use special % whatsig (invisible user one) \unexpanded\def\strc_rendering_place_head_text {\strc_rendering_start_placement \setheadmarking \doresettructureheadnumbercontent \ifconditional\c_strc_sectioning_empty \setbox\b_strc_rendering_head\hbox \headreferenceattributes to \zeropoint{\strut}% \else \docheckheadreference \setbox\b_strc_rendering_head\hbox \headreferenceattributes {\spac_grids_set_local_snapping{\headparameter\c!internalgrid}% \doresettructureheadnumbercontent \useheadstyleparameter\c!style \setinlineheadreferenceattributes \strc_rendering_inject_text}% \fi \strc_rendering_stop_placement} \unexpanded\def\strc_rendering_place_head_number_and_text {\strc_rendering_start_placement \setheadmarking \doiftextelse\getheadnumber \dosettructureheadnumbercontent \doresettructureheadnumbercontent \ifconditional\c_strc_sectioning_empty \setbox\b_strc_rendering_head\hbox \headreferenceattributes to \zeropoint{\strut}% \else % = needed \docheckheadreference \setbox\b_strc_rendering_head\hbox \headreferenceattributes {\spac_grids_set_local_snapping{\headparameter\c!internalgrid}% \useheadstyleparameter\c!style \setinlineheadreferenceattributes \strc_rendering_inject_number_and_text}% \fi \strc_rendering_stop_placement} \unexpanded\def\strc_rendering_place_head_empty {\hbox \headreferenceattributes {\getheadsyncs}} %D \starttyping %D \def\StretchedBox#1% %D {\framed %D [frame=off,offset=.5em,align=middle,width=broad] %D {\sc\def\stretchedspaceamount{.3em}\stretchednormalcase{#1}}} %D %D \definehead[MySubject][subject] %D \setuphead [MySubject][deeptextcommand=\StretchedBox] %D %D \MySubject{feeling stretched feeling stretched feeling stretched feeling stretched} %D \stoptyping % helpers % \defineinmargin [ChapterInMargin] [outer] [normal] [distance=0.3em] % % \defineheadplacement[MyTest][horizontal]#1#2% % {\startlocalheadsetup % %\ChapterInMargin{\headhbox{\strut#2}}% proper destination, ref okay % \ChapterInMargin{\strut#2}% zero destination, ref okay % \stoplocalheadsetup} % % \setuphead % [chapter] % [alternative=MyTest] \unexpanded\def\headhbox{\hbox\headreferenceattributes} \unexpanded\def\headvbox{\vbox\headreferenceattributes} \unexpanded\def\startlocalheadsetup{\bgroup\strc_rendering_initialize_spacing} \unexpanded\def\stoplocalheadsetup {\egroup} \unexpanded\def\strc_rendering_initialize_spacing {\forgetall % local ! \edef\p_align{\headparameter\c!align}% \ifx\p_align\empty \else \setupalign[\p_align]% \fi \edef\p_tolerance{\headparameter\c!tolerance}% \ifx\p_tolerance\empty \else \setuptolerance[\p_tolerance]% \fi \edef\p_strut{\headparameter\c!strut}% \ifx\p_strut\v!no \setnostrut \fi \let\\\strc_rendering_shortcut_backslash} \unexpanded\def\strc_rendering_shortcut_backslash {\crlf \strut \ignorespaces} \def\strc_rendering_start_placement {\bgroup \setsystemmode\currenthead % \strc_rendering_initialize_alternatives \strc_rendering_initialize_dimensions % \strc_rendering_initialize_line_state \reseteverypar % needed indeed \noindent % ipv \whitespace elders, na \forgetall ! \bgroup \edef\p_aligntitle{\headparameter\c!aligntitle}% \ifx\p_aligntitle\v!yes \strc_rendering_initialize_hsize_local \else\ifx\p_aligntitle\v!float \strc_rendering_initialize_hsize_local \else \strc_rendering_initialize_hsize_global \fi\fi \setfalse\inhibitmargindata % brrrr is set in forgetall \dontcomplain \postponenotes \strc_rendering_initialize_interaction % delayed \let\localheadsetup \strc_rendering_initialize_spacing % historic name \let\headsetupspacing\strc_rendering_initialize_spacing} \def\strc_rendering_initialize_hsize_local {\global\d_strc_rendering_local_leftoffset \leftskip \global\d_strc_rendering_local_rightoffset\rightskip % \forgetall % \leftskip \d_strc_rendering_local_leftoffset % no stretch % \rightskip\d_strc_rendering_local_rightoffset % no stretch % \setlocalhsize % \hsize\localhsize % \forgetbothskips} \scratchwidth\availablehsize \forgetall \hsize\scratchwidth} \def\strc_rendering_initialize_hsize_global {\global\d_strc_rendering_local_leftoffset \zeropoint \global\d_strc_rendering_local_rightoffset\zeropoint \forgetall} \def\strc_rendering_initialize_interaction {\resetinteractionparameter\c!style \resetinteractionparameter\c!color \resetinteractionparameter\c!contrastcolor} % \setuphead[chapter] [style=\bfd,after=,hang=line] % fit broad 2 % \setuphead[section] [style=\bfc,after=,hang=line] % \setuphead[subsection] [style=\bfb,after=,hang=line] % \setuphead[subsubsection] [style=\bfa,after=,hang=line] % \setuphead[subsubsubsection][style=\bf ,after=,hang=line] % % \chapter {Test} \input tufte \page % \section {Test} \input tufte \page % \subsection {Test} \input tufte \page % \subsubsection {Test} \input tufte \page % \subsubsubsection{Test} \input tufte \page % % \chapter {Test\\Test} \input tufte \page % \section {Test\\Test} \input tufte \page % \subsection {Test\\Test} \input tufte \page % \subsubsection {Test\\Test} \input tufte \page % \subsubsubsection{Test\\Test} \input tufte \page \newdimen\d_strc_rendering_hang_height \newcount\n_strc_rendering_hang_lines \newdimen\d_strc_rendering_local_height \newdimen\d_strc_rendering_local_depth \newdimen\d_strc_rendering_local_lineheight \def\strc_rendering_initialize_line_state {\global\d_strc_rendering_local_height\strutht \global\d_strc_rendering_local_depth\strutdp \global\d_strc_rendering_local_lineheight\lineheight} \def\strc_rendering_check_hang {\begingroup \openlineheight\d_strc_rendering_local_lineheight \d_strc_rendering_hang_height\htdp\b_strc_rendering_head \getnoflines\d_strc_rendering_hang_height \normalexpanded{\endgroup\n_strc_rendering_hang_lines\the\numexpr\noflines-\plusone\relax}% brrr \setbox\b_strc_rendering_head\hbox{\lower\n_strc_rendering_hang_lines\d_strc_rendering_hang_height\box\b_strc_rendering_head}% \d_strc_rendering_hang_height\dimexpr\htdp\b_strc_rendering_head-\d_strc_rendering_local_height+\strutdp\relax \ht\b_strc_rendering_head\strutht \dp\b_strc_rendering_head\strutdp \d_strc_rendering_local_depth\strutdp} \installcorenamespace{headplacementcheckhang} \setvalue{\??headplacementcheckhang\v!line }{\strc_rendering_check_hang \n_strc_rendering_hang_lines\zerocount} \setvalue{\??headplacementcheckhang\v!broad }{\strc_rendering_check_hang \getnoflines\d_strc_rendering_hang_height} \setvalue{\??headplacementcheckhang\v!fit }{\strc_rendering_check_hang \getrawnoflines\d_strc_rendering_hang_height} \setvalue{\??headplacementcheckhang\v!none }{\n_strc_rendering_hang_lines\zerocount} \setvalue{\??headplacementcheckhang }{\n_strc_rendering_hang_lines\zerocount} \setvalue{\??headplacementcheckhang\s!unknown}{\strc_rendering_check_hang \n_strc_rendering_hang_lines\numexpr\headparameter\c!hang-\plusone\relax} \def\strc_rendering_initialize_line_hang {\ifconditional\headisdisplay \expandnamespaceparameter\??headplacementcheckhang\headparameter\c!hang\s!unknown \relax \else \n_strc_rendering_hang_lines \zerocount \d_strc_rendering_hang_height\zeropoint \fi} \def\strc_rendering_stop_placement {\n_strc_rendering_hang_lines\zerocount \ifconditional\headisdisplay \strc_rendering_initialize_line_hang % kind of special, we want to snap heads also according to local specs local \ifgridsnapping \hbox\bgroup % extra hbox will trigger global snapper on top of local \edef\p_grid{\headparameter\c!grid}% \ifconditional\headisdisplay \ifx\p_grid\empty\else \useheadstyleandcolor\c!style\c!color \setupinterlinespace \useheadstyleandcolor\c!textstyle\c!textcolor \setupinterlinespace \fi \fi \snaptogrid[\p_grid]\hbox {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax\box\b_strc_rendering_head}% \egroup \else \hbox {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax\box\b_strc_rendering_head}% \fi \flushnotes % new, not really needed \endgraf \ifvmode \ifnum\n_strc_rendering_hang_lines>\zerocount \dorecurse\n_strc_rendering_hang_lines{\nointerlineskip\dosomebreak\nobreak\strut\endgraf}% to be checked \fi \nointerlineskip \dosomebreak\nobreak \fi \getheadsyncs \else \strut \flushnotes % new, here since we're in par mode \unhbox\b_strc_rendering_head \getheadsyncs \hskip\headnumberdistance\s!plus\headnumberdistance\s!minus.25\dimexpr\headnumberdistance\relax \strc_sectioning_inject_continuous_signal \fi \ifconditional\headisdisplay \ifvmode \ifgridsnapping % important, font related depth, see comment \prevdepth\strutdp \else \prevdepth\d_strc_rendering_local_depth \fi \fi \fi \egroup \egroup \ifconditional\headisdisplay \useindentnextparameter\headparameter \else \nonoindentation % recently added, was a bug \fi} % nice testcase % % \setupheads[aligntitle=yes] % % \startnarrower % \subject{\dorecurse{100}{x }} % \section{\dorecurse{100}{x }} % \input tufte \par % \setupheads[alternative=inmargin] % \subject{\dorecurse{100}{x }} % \section{\dorecurse{100}{x }} % \input tufte \par % \stopnarrower % \dodefineheadplacement[sectiona][vertical]{#1->#2} % \dodefineheadplacement[sectionb][vertical]#1#2{#1->#2} % % \setuphead[section][alternative=sectiona] % \setuphead[subsection][alternative=sectionb] % \startsetups[\??headrenderings:\v!vertical:\v!sectiona] % ... there will be a more public namespace % \stopsetups \installcorenamespace{headplacementalternative} \installcorenamespace{headrenderings} \installcorenamespace{headalternative} \installcommandhandler \??headalternative {headalternative} \??headalternative % or just \??head \setupheadalternative [%\c!width=\headparameter\c!width, %\c!distance=\headparameter\c!distance, \c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\currentheadalternative] \let\currentheadalternative \v!normal \let\currentheadrenderingsetup \empty \let\currentheadrenderingalternative\v!vertical \unexpanded\def\defineheadplacement % old mechanism {\dodoubleargument\strc_rendering_define_placement} \def\strc_rendering_define_placement[#1][#2]% {\doifnextbgroupelse {\strc_rendering_define_placement_yes[#1][#2]}% {\strc_rendering_define_placement_nop[#1][#2]}} \def\strc_rendering_define_placement_yes[#1][#2]% {\defineheadalternative[#1][\c!alternative=#2,\c!renderingsetup=\??headrenderings:\v!command]% \setuvalue{\??headplacementalternative#1}##1##2} \def\strc_rendering_define_placement_nop[#1][#2]% {\defineheadalternative[#1][\c!alternative=#2,\c!renderingsetup=\??headrenderings:\v!command]% \setuvalue{\??headplacementalternative#1}} % these can be used in setups: % % \headnumbercontent % \headtextcontent % % \headwidth % \headtextwidth % \headnumberdistance % \headnumberwidth % \headsetupspacing % % \headshownumber % \headisdisplay \let\headnumbercontent\empty \let\headtextcontent \empty \newdimen\headwidth \newdimen\headtextwidth \newdimen\headnumberdistance \newdimen\headnumberwidth % \newconditional\headshownumber % defined already % \newconditional\headisdisplay % defined already \unexpanded\def\strc_rendering_initialize_alternatives {\edef\currentheadalternative{\headparameter\c!alternative}% \ifcsname\currentheadalternativehash\s!parent\endcsname \else \let\currentheadalternative\v!normal % cf. mkii \fi \edef\currentheadrenderingsetup{\headalternativeparameter\c!renderingsetup}% \edef\currentheadrenderingalternative{\headalternativeparameter\c!alternative}% \ifx\currentheadrenderingalternative\empty \let\currentheadrenderingalternative\v!vertical \fi \ifx\currentheadrenderingalternative\v!horizontal \global\setfalse\headisdisplay % global \else \global\settrue\headisdisplay % global \fi} \unexpanded\def\strc_rendering_initialize_dimensions {\headwidth \headparameter\c!width \relax % \zeropoint == unset \headnumberwidth \headparameter\c!numberwidth\relax % \zeropoint == unset \headnumberdistance\headparameter\c!distance \relax \headtextwidth \headparameter\c!textwidth \relax} % \zeropoint == unset \unexpanded\def\headtextcontent {\begingroup \strc_rendering_initialize_style_and_color\c!textstyle\c!textcolor \headparameter\c!commandbefore\relax \ifcsname\currentheadhash\c!deeptextcommand\endcsname \expandafter\let\expandafter\deepstructuretitlecommand\csname\currentheadhash\c!deeptextcommand\endcsname \fi \ifconditional\headisdisplay % struts can be nilled with \setnostrut \headparameter\c!textcommand{\setstrut\begstrut\getheadtitle\endstrut}% \global\d_strc_rendering_local_height\strutht \global\d_strc_rendering_local_depth\strutdp \global\d_strc_rendering_local_lineheight\lineheight \headparameter\c!commandafter\relax \endgraf \else \headparameter\c!textcommand{\getheadtitle}% \headparameter\c!commandafter\relax \fi \endgroup} \unexpanded\def\headnumbercontent {\begingroup \strc_rendering_initialize_style_and_color\c!numberstyle\c!numbercolor \ifcsname\currentheadhash\c!deepnumbercommand\endcsname \expandafter\let\expandafter\deepstructurenumbercommand\csname\currentheadhash\c!deepnumbercommand\endcsname \fi \ifconditional\headisdisplay % can be nilled with \setnostrut \headparameter\c!numbercommand{\setstrut\begstrut\getheadnumber\endstrut}% \else \headparameter\c!numbercommand{\getheadnumber}% \fi \endgroup} \unexpanded\def\strc_rendering_inject_number_and_text {\edef\p_command{\headparameter\c!command}% assumes \unexpanded definition \ifx\p_command\empty \directsetup\currentheadrenderingsetup \else \p_command\headnumbercontent\headtextcontent \fi} \unexpanded\def\strc_rendering_inject_text {\edef\p_command{\headparameter\c!command}% assumes \unexpanded definition \ifx\p_command\empty \directsetup\currentheadrenderingsetup \else \p_command\empty\headtextcontent \fi} \startsetups[\??headrenderings:\v!command] \csname\??headplacementalternative\currentheadalternative\endcsname \headnumbercontent \headtextcontent \stopsetups % obsolete % % \def\normalplacehead % hooks into \c!command % {\csname\??headplacementalternative\ifcsname\??headplacementalternative\currentheadalternative\endcsname\currentheadalternative\else\v!normal\fi\endcsname} \defineheadalternative [\v!paragraph] [\c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\v!paragraph] \startsetups[\??headrenderings:\v!paragraph] \vbox { \headsetupspacing \begstrut \ifconditional\headshownumber % \ifheadnumbercontent \headnumbercontent \hskip\headnumberdistance \fi \headtextcontent } \stopsetups % \setuphead % [chapter] % [numberwidth=2cm,hang=line,after={\blank[3*line]}] % % \chapter{Oeps oeps oeps} \input tufte \section{Oeps} % \chapter{Oeps oeps oeps} \section{Oeps} \input tufte \defineheadalternative [\v!normal] [\c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\v!normal] \startsetups[\??headrenderings:\v!normal] \vbox { \headsetupspacing \ifconditional\headshownumber \ifdim\headwidth=\zeropoint \else \ifdim\headnumberwidth=\zeropoint \ifdim\headtextwidth=\zeropoint \else \headnumberwidth\dimexpr\headwidth-\headtextwidth\relax \fi \else \ifdim\headtextwidth=\zeropoint \headtextwidth\dimexpr\headwidth-\headnumberwidth\relax \fi \fi \hsize\headwidth \fi \ifdim\headnumberwidth=\zeropoint\else \headnumberdistance\zeropoint \fi \setbox\scratchbox\hbox \ifdim\headnumberwidth=\zeropoint\else to \headnumberwidth\fi{\headnumbercontent} \scratchdimen\dimexpr\wd\scratchbox+\headnumberdistance\relax \ifdim\headtextwidth=\zeropoint\else \hsize\dimexpr\scratchdimen+\headtextwidth\relax \fi \hangindent\scratchdimen \hangafter \plusone \noindent \box\scratchbox \hskip\headnumberdistance \else \ifdim\headtextwidth=\zeropoint \ifdim\headwidth=\zeropoint \else \hsize\headwidth \fi \else \hsize\headtextwidth \fi \noindent \fi \headtextcontent } \stopsetups \defineheadalternative [\v!inmargin] [\c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\v!inmargin] \startsetups[\??headrenderings:\v!inmargin] \vbox { \headsetupspacing \begstrut % use one \strut here! \dontleavehmode % in case there is no strut, else side effects with llap \ifconditional\headshownumber \llap { \hbox { \hfill \headnumbercontent \hskip\dimexpr\d_strc_rendering_local_leftoffset+\doifoddpageelse\leftmargindistance\rightmargindistance\relax } } \fi \headtextcontent } \stopsetups \defineheadalternative [\v!margin] [\v!inmargin] % \startsetups[\??headrenderings:\v!vertical:\v!margin] % \directsetup{\??headrenderings:\v!vertical:\v!inmargin} % \stopsetups \defineheadalternative [\v!middle] [\c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\v!middle] \startsetups[\??headrenderings:\v!middle] \vbox { \headsetupspacing \veryraggedcenter \let\\\endgraf \let\crlf\endgraf \ifconditional\headshownumber \strut \headnumbercontent \par \fi \begstrut \headtextcontent \endstrut } \stopsetups \defineheadalternative [\v!text] [\c!alternative=\v!horizontal, \c!renderingsetup=\??headrenderings:\v!text] \startsetups[\??headrenderings:\v!text] \begingroup \headsetupspacing % no stretch in distance \ifconditional\headshownumber \headnumbercontent \kern\headnumberdistance \fi \begstrut \headtextcontent \endstrut \endgroup \stopsetups % onder/boven lijnt het nummer op de onderste/bovenste regel uit van een meerregelige kop \defineheadalternative [\v!bottom] [\c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\v!bottom] \startsetups[\??headrenderings:\v!bottom] \ifconditional\headshownumber \setbox0\hbox { \headnumbercontent } \setbox2\vbox { \headsetupspacing \advance\hsize-\wd0\relax \headtextcontent } \hbox { \box0 \hskip\headnumberdistance \box2 } \else \vbox { \headsetupspacing \noindent \headtextcontent } \fi \stopsetups \defineheadalternative [\v!top] [\c!alternative=\v!vertical, \c!renderingsetup=\??headrenderings:\v!top] \startsetups[\??headrenderings:\v!top] \ifconditional\headshownumber \setbox0\hbox { \headnumbercontent } \setbox2\vtop { \headsetupspacing \advance\hsize-\wd0\relax \headtextcontent } \hbox { \box0 \hskip\headnumberdistance \box2 } \else \vtop{ \headsetupspacing \noindent \headtextcontent } \fi \stopsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-de.mkii0000644000175000017500000023742612130411274024124 0ustar norbertnorbert% this file is auto-generated, don't edit this file % % definitions for interface variables for language de % \setinterfacevariable{Addition}{Zusatz} \setinterfacevariable{Balloon}{Ballon} \setinterfacevariable{Cap}{Kap} \setinterfacevariable{Capital}{Versalien} \setinterfacevariable{Character}{Buchstabe} \setinterfacevariable{Characters}{Buchstaben} \setinterfacevariable{CloseDocument}{SchliesseDokument} \setinterfacevariable{ExitViewer}{BeendeViewer} \setinterfacevariable{FirstPage}{ErsteSeite} \setinterfacevariable{FitHeight}{HoehePassend} \setinterfacevariable{FitWidth}{BreitePassend} \setinterfacevariable{GotoPage}{GotoPage} \setinterfacevariable{Greek}{Griechisch} \setinterfacevariable{Help}{Hilfe} \setinterfacevariable{HideField}{VerbergeFeld} \setinterfacevariable{HideLayer}{HideLayer} \setinterfacevariable{Key}{Schluessel} \setinterfacevariable{LastPage}{LetzteSeite} \setinterfacevariable{LoadForm}{LadeFormular} \setinterfacevariable{MONTH}{MONAT} \setinterfacevariable{New}{Neu} \setinterfacevariable{NextJump}{NaechsterSprung} \setinterfacevariable{NextPage}{FolgendeSeite} \setinterfacevariable{Numbers}{Ziffern} \setinterfacevariable{OpenNamedDocument}{OpenNamedDocument} \setinterfacevariable{Paragraph}{Absatz} \setinterfacevariable{PauseMovie}{PauseFilm} \setinterfacevariable{PauseRendering}{PauseRendering} \setinterfacevariable{PauseSound}{PauseSound} \setinterfacevariable{PreviousJump}{VorigerSprung} \setinterfacevariable{PreviousPage}{VorigeSeite} \setinterfacevariable{PrintDocument}{DruckeDokument} \setinterfacevariable{Query}{Query} \setinterfacevariable{QueryAgain}{QueryAgain} \setinterfacevariable{ResetForm}{ZuruecksetzenFormular} \setinterfacevariable{ResumeMovie}{FortsetzenFilm} \setinterfacevariable{ResumeRendering}{ResumeRendering} \setinterfacevariable{ResumeSound}{ResumeSound} \setinterfacevariable{Romannumerals}{Roemischezahlen} \setinterfacevariable{SaveDocument}{SpeichereDokument} \setinterfacevariable{SaveForm}{SpeicheFormular} \setinterfacevariable{SaveNamedDocument}{SaveNamedDocument} \setinterfacevariable{SearchAgain}{WeiterSuchen} \setinterfacevariable{SearchDocument}{DokumentDurchsuchen} \setinterfacevariable{ShowBookmarks}{ShowBookmarks} \setinterfacevariable{ShowField}{ZeigeFeld} \setinterfacevariable{ShowThumbs}{ShowThumbs} \setinterfacevariable{StartMovie}{StartFilm} \setinterfacevariable{StartRendering}{StartRendering} \setinterfacevariable{StartSound}{StartSound} \setinterfacevariable{StopMovie}{StopFilm} \setinterfacevariable{StopRendering}{StopRendering} \setinterfacevariable{StopSound}{StopSound} \setinterfacevariable{SubmitForm}{VersendeFormular} \setinterfacevariable{ToggleLayer}{ToggleLayer} \setinterfacevariable{ToggleViewer}{WechseleViewer} \setinterfacevariable{URL}{URL} \setinterfacevariable{VideLayer}{VideLayer} \setinterfacevariable{ViewerHelp}{ViewerHilfe} \setinterfacevariable{WEEKDAY}{WOCHENTAG} \setinterfacevariable{WORD}{WORT} \setinterfacevariable{WORDS}{WOERTER} \setinterfacevariable{Word}{Wort} \setinterfacevariable{Words}{Woerter} \setinterfacevariable{abbreviation}{abkuerzung} \setinterfacevariable{abbreviations}{abkuerzungen} \setinterfacevariable{absolute}{absolut} \setinterfacevariable{action}{aktion} \setinterfacevariable{after}{nach} \setinterfacevariable{all}{alles} \setinterfacevariable{always}{immer} \setinterfacevariable{and}{und} \setinterfacevariable{answerarea}{answerarea} \setinterfacevariable{appendices}{anhaenge} \setinterfacevariable{appendix}{anhang} \setinterfacevariable{april}{april} \setinterfacevariable{atmargin}{amrand} \setinterfacevariable{atpage}{aufseite} \setinterfacevariable{attachment}{attachment} \setinterfacevariable{august}{august} \setinterfacevariable{author}{autor} \setinterfacevariable{auto}{auto} \setinterfacevariable{autointro}{autointro} \setinterfacevariable{back}{zurueck} \setinterfacevariable{background}{hintergrund} \setinterfacevariable{backmatter}{epiloge} \setinterfacevariable{backpart}{epilog} \setinterfacevariable{backspace}{rumpfspatium} \setinterfacevariable{backward}{rueckwaerts} \setinterfacevariable{bbl}{bbl} \setinterfacevariable{before}{vor} \setinterfacevariable{begin}{begin} \setinterfacevariable{bib}{bib} \setinterfacevariable{big}{gross} \setinterfacevariable{bigbodyfont}{bigbodyfont} \setinterfacevariable{bigger}{bigger} \setinterfacevariable{bigpreference}{grosszuegig} \setinterfacevariable{blank}{blanko} \setinterfacevariable{blockquote}{blockquote} \setinterfacevariable{bodymatter}{haupttexte} \setinterfacevariable{bodypart}{haupttext} \setinterfacevariable{bold}{fett} \setinterfacevariable{bolditalic}{fettitalic} \setinterfacevariable{boldslanted}{fettgeneigt} \setinterfacevariable{bookmark}{bookmark} \setinterfacevariable{both}{beide} \setinterfacevariable{bottom}{unten} \setinterfacevariable{brief}{brief} \setinterfacevariable{broad}{breit} \setinterfacevariable{buffer}{puffer} \setinterfacevariable{by}{pro} \setinterfacevariable{calligraphic}{kalligraphie} \setinterfacevariable{cap}{kap} \setinterfacevariable{capital}{versalien} \setinterfacevariable{center}{center} \setinterfacevariable{chapter}{kapitel} \setinterfacevariable{character}{buchstabe} \setinterfacevariable{characters}{buchstaben} \setinterfacevariable{chemistry}{chemistry} \setinterfacevariable{cite}{cite} \setinterfacevariable{color}{farbe} \setinterfacevariable{column}{column} \setinterfacevariable{columns}{spalten} \setinterfacevariable{command}{befehl} \setinterfacevariable{commands}{befehle} \setinterfacevariable{comment}{kommentar} \setinterfacevariable{component}{komponente} \setinterfacevariable{concept}{konzept} \setinterfacevariable{content}{inhalt} \setinterfacevariable{contents}{inhalte} \setinterfacevariable{continue}{fortsetzten} \setinterfacevariable{continued}{continued} \setinterfacevariable{controls}{controls} \setinterfacevariable{conversion}{konversion} \setinterfacevariable{current}{aktuell} \setinterfacevariable{cutspace}{cutspace} \setinterfacevariable{date}{datum} \setinterfacevariable{day}{tag} \setinterfacevariable{december}{dezember} \setinterfacevariable{default}{default} \setinterfacevariable{depth}{tiefe} \setinterfacevariable{description}{beschreibung} \setinterfacevariable{disable}{sperren} \setinterfacevariable{display}{bildschirm} \setinterfacevariable{dot}{punkt} \setinterfacevariable{doublesided}{doppelseitig} \setinterfacevariable{down}{down} \setinterfacevariable{each}{jede} \setinterfacevariable{edge}{kante} \setinterfacevariable{embed}{embed} \setinterfacevariable{empty}{leer} \setinterfacevariable{end}{end} \setinterfacevariable{endnote}{endnote} \setinterfacevariable{enumeration}{nummerierung} \setinterfacevariable{environment}{umgebung} \setinterfacevariable{even}{gerade} \setinterfacevariable{export}{export} \setinterfacevariable{external}{extern} \setinterfacevariable{fact}{gegeben} \setinterfacevariable{february}{februar} \setinterfacevariable{figure}{abbildung} \setinterfacevariable{figures}{abbildungen} \setinterfacevariable{file}{datei} \setinterfacevariable{final}{endfassung} \setinterfacevariable{first}{erste} \setinterfacevariable{firstcolumn}{firstcolumn} \setinterfacevariable{firstpage}{ersteseite} \setinterfacevariable{firstsubpage}{ersteunterseite} \setinterfacevariable{fit}{passend} \setinterfacevariable{five}{fuenf} \setinterfacevariable{fix}{stellewiederher} \setinterfacevariable{fixed}{fest} \setinterfacevariable{flexible}{flexibel} \setinterfacevariable{float}{gleitobjekt} \setinterfacevariable{flushinner}{flushinner} \setinterfacevariable{flushleft}{flushleft} \setinterfacevariable{flushouter}{flushouter} \setinterfacevariable{flushright}{flushright} \setinterfacevariable{footer}{fusszeile} \setinterfacevariable{footnote}{fussnote} \setinterfacevariable{force}{zwinge} \setinterfacevariable{foreground}{vordergrund} \setinterfacevariable{formeel}{formeel} \setinterfacevariable{formula}{formel} \setinterfacevariable{formulae}{formeln} \setinterfacevariable{forward}{vorwaerts} \setinterfacevariable{four}{vier} \setinterfacevariable{frame}{rahmen} \setinterfacevariable{framedtext}{umrahmtertext} \setinterfacevariable{friday}{freitag} \setinterfacevariable{frontmatter}{einleitungen} \setinterfacevariable{frontpart}{einleitung} \setinterfacevariable{global}{global} \setinterfacevariable{graphic}{grafik} \setinterfacevariable{graphics}{grafiken} \setinterfacevariable{gray}{grau} \setinterfacevariable{greek}{griechisch} \setinterfacevariable{grid}{gritter} \setinterfacevariable{halfline}{halbezeile} \setinterfacevariable{handwritten}{handschrift} \setinterfacevariable{hang}{haengend} \setinterfacevariable{hanging}{haengend} \setinterfacevariable{head}{kopf} \setinterfacevariable{header}{kopfzeile} \setinterfacevariable{height}{hoehe} \setinterfacevariable{helptext}{hilfetext} \setinterfacevariable{hencefore}{vorher} \setinterfacevariable{here}{hier} \setinterfacevariable{hereafter}{nachher} \setinterfacevariable{hidden}{versteckt} \setinterfacevariable{hiding}{verbergen} \setinterfacevariable{high}{hoch} \setinterfacevariable{horizontal}{horizontal} \setinterfacevariable{hyphenated}{hyphenate} \setinterfacevariable{hz}{hz} \setinterfacevariable{inbetween}{zwischen} \setinterfacevariable{index}{index} \setinterfacevariable{indices}{indizies} \setinterfacevariable{informeel}{informeel} \setinterfacevariable{inherit}{inherit} \setinterfacevariable{inleft}{imlinken} \setinterfacevariable{inmargin}{imrand} \setinterfacevariable{inner}{innen} \setinterfacevariable{inneredge}{inneredge} \setinterfacevariable{innermargin}{innermargin} \setinterfacevariable{inright}{imrechten} \setinterfacevariable{interaction}{interaktion} \setinterfacevariable{interactionmenu}{interaktionsmenue} \setinterfacevariable{intermezzi}{intermezzi} \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{imtext} \setinterfacevariable{intro}{intro} \setinterfacevariable{italic}{italic} \setinterfacevariable{italicbold}{italicfett} \setinterfacevariable{item}{pos} \setinterfacevariable{itemize}{aufzaehlung} \setinterfacevariable{its}{its} \setinterfacevariable{january}{januar} \setinterfacevariable{joinedup}{keinabstand} \setinterfacevariable{july}{juli} \setinterfacevariable{june}{juni} \setinterfacevariable{keep}{behalte} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{label} \setinterfacevariable{landscape}{querformat} \setinterfacevariable{last}{letzte} \setinterfacevariable{lastcolumn}{lastcolumn} \setinterfacevariable{lastpage}{letzteseite} \setinterfacevariable{lastpagenumber}{lastpagenumber} \setinterfacevariable{lastsubpage}{letzteunterseite} \setinterfacevariable{layer}{layer} \setinterfacevariable{left}{links} \setinterfacevariable{leftedge}{linkekante} \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{linkerrand} \setinterfacevariable{leftpage}{linkerseite} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legende} \setinterfacevariable{less}{less} \setinterfacevariable{lesshyphenation}{lesshyphenation} \setinterfacevariable{line}{zeile} \setinterfacevariable{linenote}{linenote} \setinterfacevariable{lines}{zeilen} \setinterfacevariable{list}{liste} \setinterfacevariable{local}{lokal} \setinterfacevariable{localenvironment}{lokaleumgebung} \setinterfacevariable{logo}{logo} \setinterfacevariable{logos}{logos} \setinterfacevariable{lohi}{hoti} \setinterfacevariable{loose}{lose} \setinterfacevariable{low}{tief} \setinterfacevariable{ls}{ls} \setinterfacevariable{makeup}{umbruch} \setinterfacevariable{mar}{mar} \setinterfacevariable{march}{maerz} \setinterfacevariable{margin}{marginalie} \setinterfacevariable{marginedge}{marginalkante} \setinterfacevariable{margintitle}{marginaltitel} \setinterfacevariable{marking}{beschriftung} \setinterfacevariable{mathalignment}{mathalignment} \setinterfacevariable{mathcases}{mathcases} \setinterfacevariable{mathematics}{mathematik} \setinterfacevariable{mathmatrix}{mathmatrix} \setinterfacevariable{max}{max} \setinterfacevariable{maxdepth}{maxdepth} \setinterfacevariable{maxheight}{maxheight} \setinterfacevariable{maxwidth}{maxwidth} \setinterfacevariable{may}{mai} \setinterfacevariable{mediaeval}{mittelalterlich} \setinterfacevariable{medium}{mittel} \setinterfacevariable{middle}{mittig} \setinterfacevariable{min}{min} \setinterfacevariable{mindepth}{mindepth} \setinterfacevariable{minheight}{minhoehe} \setinterfacevariable{minwidth}{minbreite} \setinterfacevariable{mirrored}{gespiegelt} \setinterfacevariable{monday}{montag} \setinterfacevariable{mono}{mono} \setinterfacevariable{month}{monat} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} \setinterfacevariable{name}{name} \setinterfacevariable{narrow}{schmall} \setinterfacevariable{negative}{negativ} \setinterfacevariable{never}{nie} \setinterfacevariable{new}{neu} \setinterfacevariable{next}{folgende} \setinterfacevariable{nextevenpage}{naechstegeradeseite} \setinterfacevariable{nextoddpage}{naechsteungeradeseite} \setinterfacevariable{nextpage}{folgendeseite} \setinterfacevariable{nextsubpage}{folgendeunterseite} \setinterfacevariable{no}{nein} \setinterfacevariable{nocheck}{nocheck} \setinterfacevariable{nofit}{nofit} \setinterfacevariable{nogrid}{nogrid} \setinterfacevariable{nohz}{nohz} \setinterfacevariable{nomarking}{keinebeschriftung} \setinterfacevariable{none}{kein} \setinterfacevariable{nonumber}{nonumber} \setinterfacevariable{normal}{normal} \setinterfacevariable{nospacing}{nospacing} \setinterfacevariable{not}{nicht} \setinterfacevariable{note}{note} \setinterfacevariable{nothanging}{nothanging} \setinterfacevariable{nothyphenated}{nothyphenated} \setinterfacevariable{november}{november} \setinterfacevariable{nowhere}{nirgens} \setinterfacevariable{nowhite}{keinweiss} \setinterfacevariable{number}{nummer} \setinterfacevariable{numbers}{ziffern} \setinterfacevariable{october}{oktober} \setinterfacevariable{odd}{ungerade} \setinterfacevariable{off}{aus} \setinterfacevariable{offset}{offset} \setinterfacevariable{old}{old} \setinterfacevariable{on}{an} \setinterfacevariable{one}{eins} \setinterfacevariable{opposite}{gegenueber} \setinterfacevariable{outer}{aussen} \setinterfacevariable{outeredge}{outeredge} \setinterfacevariable{outermargin}{outermargin} \setinterfacevariable{overbar}{ueberstrichen} \setinterfacevariable{overbars}{ueberstreichen} \setinterfacevariable{overlay}{overlay} \setinterfacevariable{overprint}{overprint} \setinterfacevariable{overstrike}{durchgestrichen} \setinterfacevariable{overstrikes}{durchstreichen} \setinterfacevariable{packed}{gepackt} \setinterfacevariable{page}{seite} \setinterfacevariable{pagecomment}{pagecomment} \setinterfacevariable{pagenumber}{seitennummer} \setinterfacevariable{paper}{papier} \setinterfacevariable{paragraph}{absatz} \setinterfacevariable{part}{teil} \setinterfacevariable{positive}{positiv} \setinterfacevariable{postponing}{verschieben} \setinterfacevariable{postscript}{postscript} \setinterfacevariable{preference}{einstellung} \setinterfacevariable{preview}{vorschau} \setinterfacevariable{previous}{vorig} \setinterfacevariable{previousevenpage}{vorigegeradeseite} \setinterfacevariable{previousoddpage}{vorigeungeradeseite} \setinterfacevariable{previouspage}{vorigeseite} \setinterfacevariable{previoussubpage}{vorigeunterseite} \setinterfacevariable{print}{print} \setinterfacevariable{printable}{druckbar} \setinterfacevariable{process}{process} \setinterfacevariable{product}{produkt} \setinterfacevariable{program}{programm} \setinterfacevariable{project}{projekt} \setinterfacevariable{protected}{geschuetzt} \setinterfacevariable{quadruple}{viertel} \setinterfacevariable{quarterline}{quarterline} \setinterfacevariable{quotation}{zitat} \setinterfacevariable{quote}{zitieren} \setinterfacevariable{ran}{ran} \setinterfacevariable{random}{zufaellig} \setinterfacevariable{readonly}{nurlesbar} \setinterfacevariable{rectangular}{rechteckig} \setinterfacevariable{reference}{referenz} \setinterfacevariable{referral}{merkmal} \setinterfacevariable{register}{register} \setinterfacevariable{regular}{regular} \setinterfacevariable{rekening}{rekening} \setinterfacevariable{relative}{relativ} \setinterfacevariable{repeat}{wiederholen} \setinterfacevariable{required}{obligatorisch} \setinterfacevariable{reset}{zuruecksetzten} \setinterfacevariable{reverse}{reverse} \setinterfacevariable{right}{rechts} \setinterfacevariable{rightedge}{rechterkante} \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{rechterrand} \setinterfacevariable{rightpage}{rechterseite} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{antiqua} \setinterfacevariable{romannumerals}{roemischezahlen} \setinterfacevariable{rotate}{drehe} \setinterfacevariable{rotated}{gedreht} \setinterfacevariable{round}{rund} \setinterfacevariable{row}{row} \setinterfacevariable{rule}{linie} \setinterfacevariable{samepage}{selbeseite} \setinterfacevariable{sans}{sans} \setinterfacevariable{sansbold}{sansfett} \setinterfacevariable{sansserif}{grotesk} \setinterfacevariable{saturday}{samstag} \setinterfacevariable{screen}{raster} \setinterfacevariable{section}{absatz} \setinterfacevariable{sectionblockenvironment}{sectionblockenvironment} \setinterfacevariable{sectionnumber}{abschnittsnummer} \setinterfacevariable{see}{sieh} \setinterfacevariable{september}{september} \setinterfacevariable{serif}{serif} \setinterfacevariable{serried}{kleinerabstand} \setinterfacevariable{setups}{impostazioni} \setinterfacevariable{sheet}{sheet} \setinterfacevariable{short}{kurz} \setinterfacevariable{singlesided}{einzelseitig} \setinterfacevariable{slanted}{geneigt} \setinterfacevariable{slantedbold}{geneigtfett} \setinterfacevariable{small}{klein} \setinterfacevariable{smallbodyfont}{smallbodyfont} \setinterfacevariable{smallbold}{kleinfett} \setinterfacevariable{smallbolditalic}{kleinfettitalic} \setinterfacevariable{smallboldslanted}{kleinfettgeneigt} \setinterfacevariable{smallcaps}{smallcaps} \setinterfacevariable{smaller}{smaller} \setinterfacevariable{smallitalic}{kleinitalic} \setinterfacevariable{smallitalicbold}{kleinitalicfett} \setinterfacevariable{smallnormal}{kleinnormal} \setinterfacevariable{smallslanted}{kleingeneigt} \setinterfacevariable{smallslantedbold}{kleingeneigtfett} \setinterfacevariable{smalltype}{kleintippen} \setinterfacevariable{somewhere}{irgendwo} \setinterfacevariable{sorted}{sortiert} \setinterfacevariable{space}{spatium} \setinterfacevariable{spacing}{spatiumausgleich} \setinterfacevariable{speech}{speech} \setinterfacevariable{split}{split} \setinterfacevariable{spot}{spot} \setinterfacevariable{standard}{standard} \setinterfacevariable{start}{start} \setinterfacevariable{starter}{starter} \setinterfacevariable{sticker}{sticker} \setinterfacevariable{stop}{stop} \setinterfacevariable{stopper}{trenner} \setinterfacevariable{stretch}{strecken} \setinterfacevariable{strict}{streng} \setinterfacevariable{strong}{strong} \setinterfacevariable{strut}{strut} \setinterfacevariable{sub}{unter} \setinterfacevariable{subbackward}{unterrueckwaerts} \setinterfacevariable{subformula}{subformel} \setinterfacevariable{subforward}{untervorwaerts} \setinterfacevariable{subject}{thema} \setinterfacevariable{subpage}{unterseite} \setinterfacevariable{subs}{subs} \setinterfacevariable{subsection}{unterabsatz} \setinterfacevariable{subsubject}{unterthema} \setinterfacevariable{subsubsection}{unterunterabsatz} \setinterfacevariable{subsubsubject}{unterunterthema} \setinterfacevariable{subsubsubsection}{unterunterunterabsatz} \setinterfacevariable{subsubsubsubject}{unterunterunterthema} \setinterfacevariable{subsubsubsubsection}{unterunterunterunterabsatz} \setinterfacevariable{subsubsubsubsubject}{unterunterunterunterthema} \setinterfacevariable{subsubsubsubsubsection}{unterunterunterunterunterabsatz} \setinterfacevariable{subsubsubsubsubsubject}{unterunterunterunterunterthema} \setinterfacevariable{subsubsubsubsubsubsection}{unterunterunterunterunterunterabsatz} \setinterfacevariable{subsubsubsubsubsubsubject}{unterunterunterunterunterunterthema} \setinterfacevariable{subsubsubsubsubsubsubsection}{unterunterunterunterunterunterunterabsatz} \setinterfacevariable{subsubsubsubsubsubsubsubject}{unterunterunterunterunterunterunterthema} \setinterfacevariable{subsubsubsubsubsubsubsubsection}{unterunterunterunterunterunterunterunterabsatz} \setinterfacevariable{subsubsubsubsubsubsubsubsubject}{unterunterunterunterunterunterunterunterthema} \setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{unterunterunterunterunterunterunterunterunterabsatz} \setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{unterunterunterunterunterunterunterunterunterthema} \setinterfacevariable{sunday}{sonntag} \setinterfacevariable{support}{support} \setinterfacevariable{sym}{sym} \setinterfacevariable{symbol}{symbol} \setinterfacevariable{synchronize}{synchronize} \setinterfacevariable{system}{systeme} \setinterfacevariable{table}{tabelle} \setinterfacevariable{tablehead}{tabellenueberschrift} \setinterfacevariable{tables}{tabellen} \setinterfacevariable{tabletail}{tabellenende} \setinterfacevariable{tabulate}{tabulator} \setinterfacevariable{tabulatehead}{tabulatehead} \setinterfacevariable{tabulatetail}{tabulatetail} \setinterfacevariable{tall}{lang} \setinterfacevariable{teletype}{fernschreiber} \setinterfacevariable{temporary}{temporaer} \setinterfacevariable{test}{test} \setinterfacevariable{text}{text} \setinterfacevariable{three}{drei} \setinterfacevariable{thursday}{donnerstag} \setinterfacevariable{tight}{tight} \setinterfacevariable{title}{titel} \setinterfacevariable{toggle}{toggle} \setinterfacevariable{tolerant}{tolerant} \setinterfacevariable{top}{oben} \setinterfacevariable{tuesday}{dienstag} \setinterfacevariable{two}{zwei} \setinterfacevariable{txt}{txt} \setinterfacevariable{type}{tippen} \setinterfacevariable{typing}{tippen} \setinterfacevariable{unavailable}{nichtverfuegbar} \setinterfacevariable{underbar}{unterstrichen} \setinterfacevariable{underbars}{unterstreichen} \setinterfacevariable{understrike}{understrike} \setinterfacevariable{understrikes}{understrikes} \setinterfacevariable{unit}{einheit} \setinterfacevariable{units}{einheiten} \setinterfacevariable{unknown}{unbekannt} \setinterfacevariable{unpacked}{ungepackt} \setinterfacevariable{up}{up} \setinterfacevariable{url}{url} \setinterfacevariable{used}{verwende} \setinterfacevariable{value}{wert} \setinterfacevariable{vertical}{vertikal} \setinterfacevariable{very}{sehr} \setinterfacevariable{verystrict}{sehrstreng} \setinterfacevariable{verytolerant}{sehrtolerant} \setinterfacevariable{weak}{weak} \setinterfacevariable{wednesday}{mittwoch} \setinterfacevariable{week}{woche} \setinterfacevariable{weekday}{wochentag} \setinterfacevariable{white}{weiss} \setinterfacevariable{wide}{breit} \setinterfacevariable{width}{breite} \setinterfacevariable{word}{wort} \setinterfacevariable{xml}{xml} \setinterfacevariable{year}{jahr} \setinterfacevariable{yes}{ja} % definitions for interface constants for language de % \setinterfaceconstant{action}{aktion} \setinterfaceconstant{address}{adresse} \setinterfaceconstant{after}{nach} \setinterfaceconstant{afterhead}{nachkopf} \setinterfaceconstant{afterkey}{nachtaste} \setinterfaceconstant{aftersection}{aftersection} \setinterfaceconstant{align}{ausrichtung} \setinterfaceconstant{aligncharacter}{aligncharacter} \setinterfaceconstant{alignmentcharacter}{alignmentcharacter} \setinterfaceconstant{alignsymbol}{alignsymbol} \setinterfaceconstant{aligntitle}{titelausrichten} \setinterfaceconstant{alternative}{alternative} \setinterfaceconstant{anchor}{anchor} \setinterfaceconstant{andtext}{andtext} \setinterfaceconstant{apa}{apa} \setinterfaceconstant{arrow}{pfeil} \setinterfaceconstant{artauthor}{artauthor} \setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay} \setinterfaceconstant{artauthoretallimit}{artauthoretallimit} \setinterfaceconstant{artauthoretaltext}{artauthoretaltext} \setinterfaceconstant{at}{bei} \setinterfaceconstant{author}{autor} \setinterfaceconstant{authoretaldisplay}{authoretaldisplay} \setinterfaceconstant{authoretallimit}{authoretallimit} \setinterfaceconstant{authoretaltext}{authoretaltext} \setinterfaceconstant{auto}{auto} \setinterfaceconstant{autocase}{autocase} \setinterfaceconstant{autofile}{autofile} \setinterfaceconstant{autofocus}{autofocus} \setinterfaceconstant{autohang}{autohang} \setinterfaceconstant{autostrut}{autostrut} \setinterfaceconstant{autowidth}{autobreite} \setinterfaceconstant{availableheight}{availableheight} \setinterfaceconstant{availablewidth}{availablewidth} \setinterfaceconstant{axis}{achsen} \setinterfaceconstant{background}{hintergrund} \setinterfaceconstant{backgroundcolor}{hintergrundfarbe} \setinterfaceconstant{backgroundcorner}{hintergrundwinkel} \setinterfaceconstant{backgrounddepth}{hintergrundtiefe} \setinterfaceconstant{backgroundoffset}{hintergrundoffset} \setinterfaceconstant{backgroundradius}{hintergrundradius} \setinterfaceconstant{backgroundscreen}{hintergrundraster} \setinterfaceconstant{backreference}{backreference} \setinterfaceconstant{backspace}{rumpfspatium} \setinterfaceconstant{balance}{ausgleichen} \setinterfaceconstant{before}{vor} \setinterfaceconstant{beforehead}{vorkopf} \setinterfaceconstant{beforesection}{beforesection} \setinterfaceconstant{bet}{bet} \setinterfaceconstant{bidi}{bidi} \setinterfaceconstant{big}{gross} \setinterfaceconstant{blank}{blanko} \setinterfaceconstant{blockway}{blockauf} \setinterfaceconstant{bodyfont}{fliesstext} \setinterfaceconstant{boffset}{boffset} \setinterfaceconstant{bookmark}{bookmark} \setinterfaceconstant{bottom}{unten} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{abstandunten} \setinterfaceconstant{bottomframe}{untenrahmen} \setinterfaceconstant{bottomoffset}{untenoffset} \setinterfaceconstant{bottomspace}{bottomspace} \setinterfaceconstant{bottomstate}{untenstatus} \setinterfaceconstant{buffer}{buffer} \setinterfaceconstant{cache}{cache} \setinterfaceconstant{calculate}{berechnen} \setinterfaceconstant{category}{category} \setinterfaceconstant{ccommand}{cbefehl} \setinterfaceconstant{click}{klick} \setinterfaceconstant{clickin}{klickin} \setinterfaceconstant{clickout}{klickaus} \setinterfaceconstant{clipoffset}{clipoffset} \setinterfaceconstant{closeaction}{schliessenaktion} \setinterfaceconstant{closecommand}{closecommand} \setinterfaceconstant{closepage}{closepage} \setinterfaceconstant{closepageaction}{closepageaction} \setinterfaceconstant{closesymbol}{closesymbol} \setinterfaceconstant{color}{farbe} \setinterfaceconstant{column}{spalte} \setinterfaceconstant{columndistance}{spaltenabstand} \setinterfaceconstant{columns}{spalten} \setinterfaceconstant{command}{befehl} \setinterfaceconstant{commandafter}{zumbefehl} \setinterfaceconstant{commandbefore}{vorbefehl} \setinterfaceconstant{commands}{befehle} \setinterfaceconstant{commentoffset}{commentoffset} \setinterfaceconstant{compact}{compact} \setinterfaceconstant{component}{component} \setinterfaceconstant{compoundhyphen}{compoundhyphen} \setinterfaceconstant{compress}{compress} \setinterfaceconstant{connector}{connector} \setinterfaceconstant{continue}{fortsetzen} \setinterfaceconstant{contrastcolor}{kontrastfarbe} \setinterfaceconstant{controls}{controls} \setinterfaceconstant{conversion}{konversion} \setinterfaceconstant{convertfile}{konvertieredatei} \setinterfaceconstant{corner}{winkel} \setinterfaceconstant{coupling}{verknuepfung} \setinterfaceconstant{couplingway}{verkopplungsart} \setinterfaceconstant{criterium}{kriterium} \setinterfaceconstant{css}{css} \setinterfaceconstant{current}{aktuell} \setinterfaceconstant{cutspace}{cutspace} \setinterfaceconstant{dash}{strich} \setinterfaceconstant{dat}{dat} \setinterfaceconstant{database}{database} \setinterfaceconstant{date}{datum} \setinterfaceconstant{deepnumbercommand}{deepnumbercommand} \setinterfaceconstant{deeptextcommand}{deeptextcommand} \setinterfaceconstant{default}{default} \setinterfaceconstant{delay}{wartezeit} \setinterfaceconstant{depth}{tiefe} \setinterfaceconstant{depthcorrection}{tiefekorrektur} \setinterfaceconstant{direction}{richtung} \setinterfaceconstant{directory}{verzeichnis} \setinterfaceconstant{display}{bildschirm} \setinterfaceconstant{distance}{abstand} \setinterfaceconstant{dot}{punkt} \setinterfaceconstant{doublesided}{doppelseitig} \setinterfaceconstant{dummy}{dummy} \setinterfaceconstant{dx}{dx} \setinterfaceconstant{dy}{dy} \setinterfaceconstant{edge}{kante} \setinterfaceconstant{edgedistance}{kantenabstand} \setinterfaceconstant{editor}{editor} \setinterfaceconstant{editoretaldisplay}{editoretaldisplay} \setinterfaceconstant{editoretallimit}{editoretallimit} \setinterfaceconstant{editoretaltext}{editoretaltext} \setinterfaceconstant{empty}{leer} \setinterfaceconstant{entities}{entities} \setinterfaceconstant{entries}{entries} \setinterfaceconstant{equalheight}{equalheight} \setinterfaceconstant{equalwidth}{equalwidth} \setinterfaceconstant{escape}{escape} \setinterfaceconstant{evenmargin}{geraderand} \setinterfaceconstant{exitoffset}{labeloffset} \setinterfaceconstant{expansion}{expansion} \setinterfaceconstant{export}{export} \setinterfaceconstant{extras}{extras} \setinterfaceconstant{factor}{faktor} \setinterfaceconstant{fallback}{fallback} \setinterfaceconstant{family}{familie} \setinterfaceconstant{fieldbackgroundcolor}{feldhintergrundfarbe} \setinterfaceconstant{fieldframecolor}{feldrahmenfarbe} \setinterfaceconstant{fieldlayer}{fieldlayer} \setinterfaceconstant{fieldoffset}{feldoffset} \setinterfaceconstant{file}{datei} \setinterfaceconstant{filtercommand}{filtercommand} \setinterfaceconstant{finalnamesep}{finalnamesep} \setinterfaceconstant{firstnamesep}{firstnamesep} \setinterfaceconstant{firstpage}{ersteseite} \setinterfaceconstant{focus}{focus} \setinterfaceconstant{focusin}{focusin} \setinterfaceconstant{focusout}{focusout} \setinterfaceconstant{footer}{fusszeile} \setinterfaceconstant{footerdistance}{fusszeilenabstand} \setinterfaceconstant{footerstate}{fusszeilenstatus} \setinterfaceconstant{force}{zwinge} \setinterfaceconstant{foregroundcolor}{foregroundcolor} \setinterfaceconstant{foregroundstyle}{foregroundstyle} \setinterfaceconstant{format}{formatieren} \setinterfaceconstant{frame}{rahmen} \setinterfaceconstant{framecolor}{rahmenfarbe} \setinterfaceconstant{framecorner}{rahmenwinkel} \setinterfaceconstant{framedepth}{rahmentiefe} \setinterfaceconstant{frameoffset}{rahmenoffset} \setinterfaceconstant{frameradius}{rahmenradius} \setinterfaceconstant{frames}{umrahmen} \setinterfaceconstant{from}{von} \setinterfaceconstant{get}{hole} \setinterfaceconstant{global}{global} \setinterfaceconstant{grid}{gritter} \setinterfaceconstant{hang}{haengend} \setinterfaceconstant{hcompact}{hcompact} \setinterfaceconstant{headalign}{headalign} \setinterfaceconstant{headcolor}{kopffarbe} \setinterfaceconstant{headcommand}{headcommand} \setinterfaceconstant{headconversion}{headconversion} \setinterfaceconstant{header}{kopfzeile} \setinterfaceconstant{headerdistance}{kopfzeilenabstand} \setinterfaceconstant{headerstate}{kopfzeilenstatus} \setinterfaceconstant{headlabel}{headlabel} \setinterfaceconstant{headnumber}{kopfnummer} \setinterfaceconstant{headstyle}{kopfstil} \setinterfaceconstant{height}{hoehe} \setinterfaceconstant{hfactor}{hfaktor} \setinterfaceconstant{hfil}{hfil} \setinterfaceconstant{hidenumber}{hidenumber} \setinterfaceconstant{hoffset}{hoffset} \setinterfaceconstant{horoffset}{rumpfabstand} \setinterfaceconstant{hyphen}{hyphen} \setinterfaceconstant{icommand}{ibefehl} \setinterfaceconstant{in}{in} \setinterfaceconstant{inbetween}{zwischen} \setinterfaceconstant{increment}{erhoehen} \setinterfaceconstant{incrementnumber}{nummererhoehen} \setinterfaceconstant{indenting}{einziehen} \setinterfaceconstant{indentnext}{ziehefolgendeein} \setinterfaceconstant{indicator}{indikator} \setinterfaceconstant{inner}{innen} \setinterfaceconstant{innermargin}{innermargin} \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interaktion} \setinterfaceconstant{interlinespace}{zeilenabstande} \setinterfaceconstant{internalgrid}{internalgrid} \setinterfaceconstant{itemalign}{itemalign} \setinterfaceconstant{items}{posten} \setinterfaceconstant{juniorsep}{juniorsep} \setinterfaceconstant{ken}{ken} \setinterfaceconstant{keyexpansion}{keyexpansion} \setinterfaceconstant{keys}{keys} \setinterfaceconstant{keyword}{keyword} \setinterfaceconstant{label}{label} \setinterfaceconstant{labeloffset}{labeloffset} \setinterfaceconstant{lastnamesep}{lastnamesep} \setinterfaceconstant{lastpage}{letzteseite} \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{links} \setinterfaceconstant{leftcolor}{linkerfarbe} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{linkekante} \setinterfaceconstant{leftedgedistance}{linkerkantenabstand} \setinterfaceconstant{leftframe}{linkerrahmen} \setinterfaceconstant{lefthyphen}{lefthyphen} \setinterfaceconstant{leftmargin}{linkerrand} \setinterfaceconstant{leftmargindistance}{linkerrandabstand} \setinterfaceconstant{leftoffset}{linkeroffset} \setinterfaceconstant{leftquotation}{linkerzitat} \setinterfaceconstant{leftquote}{linkerzitieren} \setinterfaceconstant{leftsentence}{linkersatz} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{linkerstil} \setinterfaceconstant{leftsubsentence}{linkersubsatz} \setinterfaceconstant{lefttext}{linkertext} \setinterfaceconstant{leftwidth}{linkerbreite} \setinterfaceconstant{less}{less} \setinterfaceconstant{level}{niveau} \setinterfaceconstant{levels}{niveaus} \setinterfaceconstant{limittext}{limittext} \setinterfaceconstant{line}{zeile} \setinterfaceconstant{linecorrection}{zeilekorrektur} \setinterfaceconstant{lines}{zeilen} \setinterfaceconstant{list}{liste} \setinterfaceconstant{listtext}{listtext} \setinterfaceconstant{local}{lokal} \setinterfaceconstant{location}{platz} \setinterfaceconstant{loffset}{loffset} \setinterfaceconstant{logo}{logo} \setinterfaceconstant{logos}{logos} \setinterfaceconstant{marcolor}{beschrfarbe} \setinterfaceconstant{margin}{marginalie} \setinterfaceconstant{margindistance}{marginalabstand} \setinterfaceconstant{marginedge}{marginalkante} \setinterfaceconstant{marginedgetext}{marginalkantetext} \setinterfaceconstant{margintext}{marginaltext} \setinterfaceconstant{marking}{beschriftung} \setinterfaceconstant{marstyle}{beschrstil} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} \setinterfaceconstant{maxheight}{maxhoehe} \setinterfaceconstant{maxwidth}{maxbreite} \setinterfaceconstant{maybeyear}{maybeyear} \setinterfaceconstant{menu}{menue} \setinterfaceconstant{method}{methode} \setinterfaceconstant{middle}{mittig} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middletext}{mittigertext} \setinterfaceconstant{midsentence}{midsentence} \setinterfaceconstant{min}{min} \setinterfaceconstant{mindepth}{mindepth} \setinterfaceconstant{minheight}{minhoehe} \setinterfaceconstant{minwidth}{minbreite} \setinterfaceconstant{monthconversion}{monthconversion} \setinterfaceconstant{more}{more} \setinterfaceconstant{n}{n} \setinterfaceconstant{name}{name} \setinterfaceconstant{namesep}{namesep} \setinterfaceconstant{nbottom}{nunten} \setinterfaceconstant{nc}{nc} \setinterfaceconstant{next}{folgende} \setinterfaceconstant{nl}{nl} \setinterfaceconstant{nleft}{nlinks} \setinterfaceconstant{nlines}{zzeile} \setinterfaceconstant{norm}{norm} \setinterfaceconstant{nr}{nr} \setinterfaceconstant{nright}{nrechts} \setinterfaceconstant{ntop}{noben} \setinterfaceconstant{number}{nummer} \setinterfaceconstant{numbercolor}{nummernfarbe} \setinterfaceconstant{numbercommand}{nummerbefehl} \setinterfaceconstant{numberconversion}{numberconversion} \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{nummerierung} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} \setinterfaceconstant{numberseparator}{nummernseperator} \setinterfaceconstant{numberseparatorset}{numberseparatorset} \setinterfaceconstant{numberset}{numberset} \setinterfaceconstant{numberstarter}{numberstarter} \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstyle}{nummernstil} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} \setinterfaceconstant{object}{objekt} \setinterfaceconstant{obstruction}{gesperrt} \setinterfaceconstant{oddmargin}{ungeraderand} \setinterfaceconstant{offset}{offset} \setinterfaceconstant{openaction}{oeffenaktion} \setinterfaceconstant{openpage}{openpage} \setinterfaceconstant{openpageaction}{openpageaction} \setinterfaceconstant{option}{option} \setinterfaceconstant{order}{order} \setinterfaceconstant{orientation}{orientation} \setinterfaceconstant{otherstext}{otherstext} \setinterfaceconstant{outermargin}{outermargin} \setinterfaceconstant{overprint}{overprint} \setinterfaceconstant{ownnumber}{eigenenummer} \setinterfaceconstant{page}{seite} \setinterfaceconstant{pageboundaries}{seitenbegrenzung} \setinterfaceconstant{pagecolor}{seitenfarbe} \setinterfaceconstant{pagecolormodel}{pagecolormodel} \setinterfaceconstant{pagecommand}{seitenbefehl} \setinterfaceconstant{pageconversion}{pageconversion} \setinterfaceconstant{pageconversionset}{pageconversionset} \setinterfaceconstant{pagenumber}{seitennummer} \setinterfaceconstant{pageprefix}{pageprefix} \setinterfaceconstant{pageprefixconnector}{pageprefixconnector} \setinterfaceconstant{pageprefixconversion}{pageprefixconversion} \setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset} \setinterfaceconstant{pageprefixsegments}{pageprefixsegments} \setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset} \setinterfaceconstant{pageprefixset}{pageprefixset} \setinterfaceconstant{pageprefixstarter}{pageprefixstarter} \setinterfaceconstant{pageprefixstopper}{pageprefixstopper} \setinterfaceconstant{pagesegments}{pagesegments} \setinterfaceconstant{pageseparatorset}{pageseparatorset} \setinterfaceconstant{pageset}{pageset} \setinterfaceconstant{pagestarter}{pagestarter} \setinterfaceconstant{pagestate}{pagestate} \setinterfaceconstant{pagestopper}{pagestopper} \setinterfaceconstant{pagestyle}{seitenstil} \setinterfaceconstant{palet}{palette} \setinterfaceconstant{paper}{papier} \setinterfaceconstant{paragraph}{absatz} \setinterfaceconstant{place}{platziere} \setinterfaceconstant{placehead}{setzekopf} \setinterfaceconstant{placestopper}{setzetrenner} \setinterfaceconstant{position}{position} \setinterfaceconstant{prefix}{prefix} \setinterfaceconstant{prefixconnector}{prefixconnector} \setinterfaceconstant{prefixconversion}{prefixconversion} \setinterfaceconstant{prefixconversionset}{prefixconversionset} \setinterfaceconstant{prefixsegments}{prefixsegments} \setinterfaceconstant{prefixseparatorset}{prefixseparatorset} \setinterfaceconstant{prefixset}{prefixset} \setinterfaceconstant{prefixstarter}{prefixstarter} \setinterfaceconstant{prefixstopper}{prefixstopper} \setinterfaceconstant{preset}{voreinstellung} \setinterfaceconstant{preview}{vorschau} \setinterfaceconstant{previous}{vorige} \setinterfaceconstant{previousnumber}{vorigenummer} \setinterfaceconstant{printable}{druckbar} \setinterfaceconstant{process}{process} \setinterfaceconstant{profile}{profile} \setinterfaceconstant{pubsep}{pubsep} \setinterfaceconstant{radius}{radius} \setinterfaceconstant{random}{zufaellig} \setinterfaceconstant{range}{range} \setinterfaceconstant{reduction}{reduktion} \setinterfaceconstant{ref}{ref} \setinterfaceconstant{refcommand}{refcommand} \setinterfaceconstant{reference}{referenz} \setinterfaceconstant{referenceprefix}{referenceprefix} \setinterfaceconstant{referencing}{referieren} \setinterfaceconstant{region}{region} \setinterfaceconstant{regionin}{regionin} \setinterfaceconstant{regionout}{regionaus} \setinterfaceconstant{repeat}{wiederholen} \setinterfaceconstant{reset}{reset} \setinterfaceconstant{resetnumber}{resetnumber} \setinterfaceconstant{resolution}{aufloesung} \setinterfaceconstant{right}{rechts} \setinterfaceconstant{rightcolor}{rechterfarbe} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{rechtekante} \setinterfaceconstant{rightedgedistance}{rechterkantenabstand} \setinterfaceconstant{rightframe}{rechterrahmen} \setinterfaceconstant{righthyphen}{righthyphen} \setinterfaceconstant{rightmargin}{rechterrand} \setinterfaceconstant{rightmargindistance}{rechterrandabstand} \setinterfaceconstant{rightoffset}{rechterabstand} \setinterfaceconstant{rightquotation}{rechterzitat} \setinterfaceconstant{rightquote}{rechterzitieren} \setinterfaceconstant{rightsentence}{rechtersatz} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{rechterstil} \setinterfaceconstant{rightsubsentence}{rechtersubsatz} \setinterfaceconstant{righttext}{rechtertext} \setinterfaceconstant{rightwidth}{rechterbreite} \setinterfaceconstant{roffset}{roffset} \setinterfaceconstant{rotation}{rotation} \setinterfaceconstant{rule}{linie} \setinterfaceconstant{rulecolor}{linienfarbe} \setinterfaceconstant{rulecommand}{rulecommand} \setinterfaceconstant{rulethickness}{liniendicke} \setinterfaceconstant{samepage}{selbeseite} \setinterfaceconstant{sample}{muster} \setinterfaceconstant{samplesize}{samplesize} \setinterfaceconstant{saveinlist}{saveinlist} \setinterfaceconstant{scale}{format} \setinterfaceconstant{scope}{bereich} \setinterfaceconstant{screen}{raster} \setinterfaceconstant{section}{abschnitt} \setinterfaceconstant{sectionconversion}{sectionconversion} \setinterfaceconstant{sectionconversionset}{sectionconversionset} \setinterfaceconstant{sectionnumber}{abschnittsnummer} \setinterfaceconstant{sectionresetset}{sectionresetset} \setinterfaceconstant{sectionsegments}{sectionsegments} \setinterfaceconstant{sectionseparatorset}{sectionseparatorset} \setinterfaceconstant{sectionset}{sectionset} \setinterfaceconstant{sectionstarter}{sectionstarter} \setinterfaceconstant{sectionstopper}{sectionstopper} \setinterfaceconstant{separator}{seperator} \setinterfaceconstant{set}{set} \setinterfaceconstant{setups}{setups} \setinterfaceconstant{shrink}{shrink} \setinterfaceconstant{side}{objektabstand} \setinterfaceconstant{sidealign}{sidealign} \setinterfaceconstant{sidemethod}{sidemethod} \setinterfaceconstant{sidespaceafter}{nebennachspatium} \setinterfaceconstant{sidespacebefore}{nebenvorspatium} \setinterfaceconstant{sign}{zeichen} \setinterfaceconstant{size}{groesse} \setinterfaceconstant{small}{klein} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} \setinterfaceconstant{source}{quelle} \setinterfaceconstant{space}{spatium} \setinterfaceconstant{spaceafter}{nachspatium} \setinterfaceconstant{spacebefore}{vorspatium} \setinterfaceconstant{spaceinbetween}{spaceinbetween} \setinterfaceconstant{spacing}{spatiumausgleich} \setinterfaceconstant{split}{split} \setinterfaceconstant{splitcolor}{splitcolor} \setinterfaceconstant{splitmethod}{splitmethod} \setinterfaceconstant{splitoffset}{splitoffset} \setinterfaceconstant{spot}{spot} \setinterfaceconstant{stack}{stack} \setinterfaceconstant{start}{start} \setinterfaceconstant{starter}{starter} \setinterfaceconstant{state}{status} \setinterfaceconstant{step}{schritt} \setinterfaceconstant{stop}{stop} \setinterfaceconstant{stopper}{abschnitttrenner} \setinterfaceconstant{stretch}{strecken} \setinterfaceconstant{strip}{strip} \setinterfaceconstant{strut}{strut} \setinterfaceconstant{style}{stil} \setinterfaceconstant{sub}{unter} \setinterfaceconstant{subtitle}{untertitel} \setinterfaceconstant{suffix}{suffix} \setinterfaceconstant{suffixseparator}{suffixseparator} \setinterfaceconstant{suffixstopper}{suffixstopper} \setinterfaceconstant{surnamesep}{surnamesep} \setinterfaceconstant{sx}{sx} \setinterfaceconstant{sy}{sy} \setinterfaceconstant{symalign}{symausrichtung} \setinterfaceconstant{symbol}{symbol} \setinterfaceconstant{symbolset}{symbolset} \setinterfaceconstant{symcolor}{symfarbe} \setinterfaceconstant{symstyle}{symstil} \setinterfaceconstant{synonym}{synonym} \setinterfaceconstant{synonymcolor}{synonymfarbe} \setinterfaceconstant{synonymcommand}{synonymbefehl} \setinterfaceconstant{synonymstyle}{synonymstil} \setinterfaceconstant{tab}{tab} \setinterfaceconstant{text}{text} \setinterfaceconstant{textcolor}{textfarbe} \setinterfaceconstant{textcommand}{textbefehl} \setinterfaceconstant{textdistance}{textdistance} \setinterfaceconstant{textheight}{texthoehe} \setinterfaceconstant{textlayer}{textlayer} \setinterfaceconstant{textmargin}{textmargin} \setinterfaceconstant{textmethod}{textmethod} \setinterfaceconstant{textseparator}{textseparator} \setinterfaceconstant{textsize}{textgroesse} \setinterfaceconstant{textstate}{textstatus} \setinterfaceconstant{textstyle}{textstil} \setinterfaceconstant{textwidth}{textbreite} \setinterfaceconstant{threshold}{threshold} \setinterfaceconstant{title}{titel} \setinterfaceconstant{titlecolor}{titelfarbe} \setinterfaceconstant{titlecommand}{titlecommand} \setinterfaceconstant{titledistance}{titelabstand} \setinterfaceconstant{titleleft}{titleleft} \setinterfaceconstant{titleright}{titleright} \setinterfaceconstant{titlestyle}{titelstil} \setinterfaceconstant{to}{zu} \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{toleranz} \setinterfaceconstant{top}{oben} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{obenabstand} \setinterfaceconstant{topframe}{obenrahmen} \setinterfaceconstant{topoffset}{obenoffset} \setinterfaceconstant{topspace}{kopfspatium} \setinterfaceconstant{topstate}{statusoben} \setinterfaceconstant{totalnumber}{totalnumber} \setinterfaceconstant{type}{typ} \setinterfaceconstant{unit}{einheit} \setinterfaceconstant{unknownreference}{unbekantereferenz} \setinterfaceconstant{urlalternative}{urlalternative} \setinterfaceconstant{urlspace}{urlspatium} \setinterfaceconstant{validate}{validieren} \setinterfaceconstant{values}{values} \setinterfaceconstant{vcommand}{vbefehl} \setinterfaceconstant{vcompact}{vcompact} \setinterfaceconstant{vector}{vector} \setinterfaceconstant{veroffset}{kopfoffset} \setinterfaceconstant{vfil}{vfil} \setinterfaceconstant{voffset}{voffset} \setinterfaceconstant{vonsep}{vonsep} \setinterfaceconstant{way}{art} \setinterfaceconstant{wfactor}{bfaktor} \setinterfaceconstant{white}{weiss} \setinterfaceconstant{width}{breite} \setinterfaceconstant{xfactor}{xfaktor} \setinterfaceconstant{xhtml}{xhtml} \setinterfaceconstant{xmax}{xmax} \setinterfaceconstant{xoffset}{xoffset} \setinterfaceconstant{xscale}{xformat} \setinterfaceconstant{xstep}{xschritt} \setinterfaceconstant{yfactor}{yfaktor} \setinterfaceconstant{ymax}{ymax} \setinterfaceconstant{yoffset}{yoffset} \setinterfaceconstant{yscale}{yformat} \setinterfaceconstant{ystep}{yschritt} % definitions for interface elements for language de % \setinterfaceelement{answerlines}{answerlines} \setinterfaceelement{answerspace}{answerspace} \setinterfaceelement{begin}{anfang} \setinterfaceelement{complete}{vollende} \setinterfaceelement{coupled}{verknuepft} \setinterfaceelement{currentlocal}{aktuelllokal} \setinterfaceelement{end}{ende} \setinterfaceelement{endsetup}{ein} \setinterfaceelement{get}{get} \setinterfaceelement{increment}{erhoehen} \setinterfaceelement{list}{auflisten} \setinterfaceelement{listof}{auflistenvon} \setinterfaceelement{load}{laden} \setinterfaceelement{local}{lokal} \setinterfaceelement{makeup}{umbruch} \setinterfaceelement{next}{folgende} \setinterfaceelement{place}{platziere} \setinterfaceelement{previous}{vorige} \setinterfaceelement{previouslocal}{voriglokal} \setinterfaceelement{reserve}{reservieren} \setinterfaceelement{see}{sieh} \setinterfaceelement{setup}{stelle} \setinterfaceelement{start}{start} \setinterfaceelement{stop}{stop} \setinterfaceelement{text}{text} \setinterfaceelement{type}{type} % definitions for interface commands for language de % \setinterfacecommand{CAPPED}{KAP} \setinterfacecommand{Character}{Buchstabe} \setinterfacecommand{Characters}{Buchstaben} \setinterfacecommand{MONTH}{MONAT} \setinterfacecommand{Numbers}{Ziffern} \setinterfacecommand{Romannumerals}{Roemischezahlen} \setinterfacecommand{SmallCapped}{Kap} \setinterfacecommand{SmallCaps}{Kaps} \setinterfacecommand{WEEKDAY}{WOCHENTAG} \setinterfacecommand{WORD}{WORT} \setinterfacecommand{WORDS}{WOERTER} \setinterfacecommand{Word}{Wort} \setinterfacecommand{Words}{Woerter} \setinterfacecommand{about}{ueber} \setinterfacecommand{adaptlayout}{passelayoutan} \setinterfacecommand{arg}{arg} \setinterfacecommand{at}{bei} \setinterfacecommand{atleftmargin}{atleftmargin} \setinterfacecommand{atpage}{aufseite} \setinterfacecommand{atrightmargin}{atrightmargin} \setinterfacecommand{background}{hintergrund} \setinterfacecommand{backspace}{rumpfweite} \setinterfacecommand{blackrule}{rechteck} \setinterfacecommand{blackrules}{rechtecke} \setinterfacecommand{blank}{blanko} \setinterfacecommand{bookmark}{bookmark} \setinterfacecommand{bottomdistance}{abstandunten} \setinterfacecommand{bottomheight}{hoeheunten} \setinterfacecommand{bottomspace}{bottomspace} \setinterfacecommand{but}{but} \setinterfacecommand{button}{knopf} \setinterfacecommand{bypassblocks}{bypassblocks} \setinterfacecommand{character}{buchstabe} \setinterfacecommand{characters}{buchstaben} \setinterfacecommand{chem}{chem} \setinterfacecommand{clip}{ausschnitt} \setinterfacecommand{clonefield}{klonierefeld} \setinterfacecommand{color}{farbe} \setinterfacecommand{colorbar}{farbbalken} \setinterfacecommand{colorvalue}{farbewert} \setinterfacecommand{column}{spalte} \setinterfacecommand{comparecolorgroup}{vergleichefarbengruppe} \setinterfacecommand{comparepalet}{vergleichepalette} \setinterfacecommand{completepagenumber}{completepagenumber} \setinterfacecommand{completeregister}{completeregister} \setinterfacecommand{component}{komponente} \setinterfacecommand{convertnumber}{konvertierezahl} \setinterfacecommand{copyfield}{kopierefeld} \setinterfacecommand{correctwhitespace}{korrigierezwischenraum} \setinterfacecommand{coupledocument}{verknuepfedokument} \setinterfacecommand{couplemarking}{verknuepfebeschriftung} \setinterfacecommand{couplepage}{doppelseite} \setinterfacecommand{couplepaper}{doppelseitigespapier} \setinterfacecommand{coupleregister}{verknuepfregister} \setinterfacecommand{crlf}{crlf} \setinterfacecommand{currentdate}{heutigesdatum} \setinterfacecommand{currentheadnumber}{heutigeskopfnummer} \setinterfacecommand{cutspace}{cutspace} \setinterfacecommand{date}{datum} \setinterfacecommand{decouplemarking}{entknuepfebeschriftung} \setinterfacecommand{decrementnumber}{decrementnumber} \setinterfacecommand{define}{definieren} \setinterfacecommand{defineaccent}{definiereakzent} \setinterfacecommand{defineblank}{definiereblanko} \setinterfacecommand{defineblock}{definiereblock} \setinterfacecommand{definebodyfont}{definierefliesstext} \setinterfacecommand{definebodyfontenvironment}{definierefliesstextumgebung} \setinterfacecommand{definebuffer}{definierepuffer} \setinterfacecommand{definecharacter}{definierezeichen} \setinterfacecommand{definecolor}{definierefarbe} \setinterfacecommand{definecolorgroup}{definierefarbengruppe} \setinterfacecommand{definecolumnbreak}{definecolumnbreak} \setinterfacecommand{definecolumnset}{definecolumnset} \setinterfacecommand{definecombination}{definecombination} \setinterfacecommand{definecombinedlist}{definierezusammengestellteliste} \setinterfacecommand{definecommand}{definierebefehl} \setinterfacecommand{defineconversion}{definierekonversion} \setinterfacecommand{definedescription}{definierebeschreibung} \setinterfacecommand{defineenumeration}{definierenummerierung} \setinterfacecommand{definefield}{definierefeld} \setinterfacecommand{definefieldstack}{definierefeldstapel} \setinterfacecommand{definefiguresymbol}{definiereabbsymbol} \setinterfacecommand{definefloat}{definieregleitobjekt} \setinterfacecommand{definefont}{definiereschrift} \setinterfacecommand{definefontstyle}{definiereschriftstil} \setinterfacecommand{definefontsynonym}{defineschriftsynonym} \setinterfacecommand{defineframed}{definiereumrahmt} \setinterfacecommand{defineframedtext}{definiereumrahmtertext} \setinterfacecommand{definehbox}{definierehbox} \setinterfacecommand{definehead}{definiereueberschrift} \setinterfacecommand{defineindentedtext}{defineindentedtext} \setinterfacecommand{defineinmargin}{defineinmargin} \setinterfacecommand{defineinteractionmenu}{definiereinteraktionsmenue} \setinterfacecommand{defineitemgroup}{defineitemgroup} \setinterfacecommand{definelabel}{definierelabel} \setinterfacecommand{definelayer}{definelayer} \setinterfacecommand{definelayout}{definelayout} \setinterfacecommand{definelist}{definiereliste} \setinterfacecommand{definelogo}{definierelogo} \setinterfacecommand{definemainfield}{definierehauptfeld} \setinterfacecommand{definemakeup}{definiereumbruch} \setinterfacecommand{definemarking}{definierebeschriftung} \setinterfacecommand{definemathalignment}{definemathalignment} \setinterfacecommand{defineoutput}{defineoutput} \setinterfacecommand{defineoverlay}{definiereoverlay} \setinterfacecommand{definepagebreak}{definepagebreak} \setinterfacecommand{definepalet}{definierepalette} \setinterfacecommand{definepapersize}{definierepapierformat} \setinterfacecommand{defineparagraphs}{definiereabsaetze} \setinterfacecommand{defineplacement}{defineplacement} \setinterfacecommand{defineprofile}{definiereprofil} \setinterfacecommand{defineprogram}{definiereprogramme} \setinterfacecommand{definerawfont}{definerawfont} \setinterfacecommand{definereference}{definierereferenz} \setinterfacecommand{definereferenceformat}{definierereferenzformat} \setinterfacecommand{definereferencelist}{definierereferenzliste} \setinterfacecommand{defineregister}{definiereregister} \setinterfacecommand{definerule}{definerule} \setinterfacecommand{definesection}{definiereabschnitt} \setinterfacecommand{definesectionblock}{definiereabschnittsblock} \setinterfacecommand{definesorting}{definieresortieren} \setinterfacecommand{definestartstop}{definierestartstop} \setinterfacecommand{definestyle}{definierestil} \setinterfacecommand{definesubfield}{definieresubfeld} \setinterfacecommand{definesymbol}{definieresymbol} \setinterfacecommand{definesynonyms}{definieresynonyme} \setinterfacecommand{definetabletemplate}{definieretabellenvorlage} \setinterfacecommand{definetabulate}{definieretabulator} \setinterfacecommand{definetext}{definieretext} \setinterfacecommand{definetextposition}{definetextposition} \setinterfacecommand{definetextvariable}{definetextvariable} \setinterfacecommand{definetype}{definetype} \setinterfacecommand{definetyping}{definieretippen} \setinterfacecommand{defineversion}{definiereversion} \setinterfacecommand{determineheadnumber}{bestimmekopfnummer} \setinterfacecommand{determinelistcharacteristics}{bestimmelistencharakeristika} \setinterfacecommand{determineregistercharacteristics}{bestimmeregistercharakteristika} \setinterfacecommand{dimension}{dimension} \setinterfacecommand{disableinteractionmenu}{inaktiviereinteraktionsmenue} \setinterfacecommand{domicile}{wohnort} \setinterfacecommand{donttest}{keintest} \setinterfacecommand{edgedistance}{randabstand} \setinterfacecommand{edgewidth}{randbreite} \setinterfacecommand{emptylines}{emptylines} \setinterfacecommand{environment}{umgebung} \setinterfacecommand{externalfigure}{externeabbildung} \setinterfacecommand{fact}{geg} \setinterfacecommand{field}{feld} \setinterfacecommand{fieldstack}{feldstapel} \setinterfacecommand{fillinfield}{ausfuellfeld} \setinterfacecommand{fillinline}{gefuelltezeile} \setinterfacecommand{fillinrules}{gefuelltesrechteck} \setinterfacecommand{fillintext}{ausfuelltext} \setinterfacecommand{fitfield}{passendfeld} \setinterfacecommand{fixedspace}{festesspatium} \setinterfacecommand{fixedspaces}{festesspatium} \setinterfacecommand{followprofile}{folgeprofil} \setinterfacecommand{followprofileversion}{folgeprofilversion} \setinterfacecommand{followversion}{folgeversion} \setinterfacecommand{footerdistance}{fusszeileabstand} \setinterfacecommand{footerheight}{fusszeilenhoehe} \setinterfacecommand{footnote}{fussnote} \setinterfacecommand{footnotetext}{footnotetext} \setinterfacecommand{forceblocks}{forceblocks} \setinterfacecommand{formulanumber}{formelnummer} \setinterfacecommand{fraction}{bruch} \setinterfacecommand{framed}{umrahmt} \setinterfacecommand{from}{von} \setinterfacecommand{getbuffer}{holepuffer} \setinterfacecommand{getmarking}{holebeschriftung} \setinterfacecommand{getnumber}{getnumber} \setinterfacecommand{godown}{nachunten} \setinterfacecommand{goto}{zu} \setinterfacecommand{gotobox}{zurbox} \setinterfacecommand{gotopage}{zurseite} \setinterfacecommand{graycolor}{graufarbe} \setinterfacecommand{greyvalue}{grauwert} \setinterfacecommand{grid}{gitter} \setinterfacecommand{hairline}{haarlinie} \setinterfacecommand{head}{kopf} \setinterfacecommand{headerdistance}{kopfzeilenabstand} \setinterfacecommand{headerheight}{kopfzeilenhoehe} \setinterfacecommand{headlevel}{kopfniveau} \setinterfacecommand{headnumber}{kopfnummer} \setinterfacecommand{headsym}{headsym} \setinterfacecommand{headtext}{ueberschrifttext} \setinterfacecommand{hideblocks}{verbergebloecke} \setinterfacecommand{high}{hoch} \setinterfacecommand{hl}{hl} \setinterfacecommand{immediatebetweenlist}{immediatebetweenlist} \setinterfacecommand{immediatetolist}{immediatetolist} \setinterfacecommand{in}{in} \setinterfacecommand{incrementnumber}{nummererhoehen} \setinterfacecommand{indenting}{einziehen} \setinterfacecommand{inframed}{imumriss} \setinterfacecommand{infull}{volleswort} \setinterfacecommand{ininner}{ininner} \setinterfacecommand{inleft}{imlinken} \setinterfacecommand{inleftedge}{imlinkenrand} \setinterfacecommand{inleftmargin}{inlinkermarginale} \setinterfacecommand{inline}{inzeile} \setinterfacecommand{inmargin}{inmarginalie} \setinterfacecommand{inmframed}{immaumrise} \setinterfacecommand{inneredgedistance}{inneredgedistance} \setinterfacecommand{inneredgewidth}{inneredgewidth} \setinterfacecommand{innermargindistance}{innermargindistance} \setinterfacecommand{innermarginwidth}{innermarginwidth} \setinterfacecommand{inothermargin}{inanderermarginale} \setinterfacecommand{inouter}{inouter} \setinterfacecommand{inright}{imrechten} \setinterfacecommand{inrightedge}{imrechtenrand} \setinterfacecommand{inrightmargin}{inrechtermarginale} \setinterfacecommand{installlanguage}{installieresprache} \setinterfacecommand{interactionbar}{interaktionsbalken} \setinterfacecommand{interactionbuttons}{interaktionsknopfe} \setinterfacecommand{interactionmenu}{interaktionsmenue} \setinterfacecommand{item}{pos} \setinterfacecommand{items}{posten} \setinterfacecommand{its}{its} \setinterfacecommand{keepblocks}{behaltebloecke} \setinterfacecommand{label}{label} \setinterfacecommand{labels}{labels} \setinterfacecommand{labeltext}{labeltext} \setinterfacecommand{language}{sprache} \setinterfacecommand{leftaligned}{linksbuendig} \setinterfacecommand{leftedgedistance}{abstandlinkerrand} \setinterfacecommand{leftedgewidth}{breitelinkerrand} \setinterfacecommand{leftmargindistance}{linkemarginalafstand} \setinterfacecommand{leftmarginwidth}{linkemarginalbreite} \setinterfacecommand{leg}{leg} \setinterfacecommand{linewidth}{liniendicke} \setinterfacecommand{listheight}{listenhoehe} \setinterfacecommand{listlength}{listenlaenge} \setinterfacecommand{listsymbol}{listsymbol} \setinterfacecommand{listwidth}{listenbreite} \setinterfacecommand{logfields}{registrierefelder} \setinterfacecommand{lohi}{tiho} \setinterfacecommand{low}{tief} \setinterfacecommand{macroname}{name} \setinterfacecommand{mainlanguage}{hauptsprache} \setinterfacecommand{makeupheight}{satzhoehe} \setinterfacecommand{makeupwidth}{satzbreite} \setinterfacecommand{mar}{mar} \setinterfacecommand{margindistance}{marginalafstand} \setinterfacecommand{marginrule}{marginallinie} \setinterfacecommand{margintext}{marginaltext} \setinterfacecommand{margintitle}{marginaltitel} \setinterfacecommand{marginwidth}{marginalbreite} \setinterfacecommand{marginword}{marginalwort} \setinterfacecommand{marking}{beschriftung} \setinterfacecommand{markversion}{beschrifteversion} \setinterfacecommand{mathematics}{mathematik} \setinterfacecommand{menubutton}{menueknopf} \setinterfacecommand{mframed}{maumrise} \setinterfacecommand{midaligned}{zentriert} \setinterfacecommand{mirror}{spiegeln} \setinterfacecommand{month}{monat} \setinterfacecommand{moveformula}{moveformula} \setinterfacecommand{moveongrid}{amgitterneuausrichten} \setinterfacecommand{movesidefloat}{movesidefloat} \setinterfacecommand{navigating}{navigating} \setinterfacecommand{nodimension}{keindimension} \setinterfacecommand{noheaderandfooterlines}{keinekopfundfusszeilen} \setinterfacecommand{noindenting}{nichteinziehen} \setinterfacecommand{nolist}{keineliste} \setinterfacecommand{nomarking}{keinebeschriftung} \setinterfacecommand{nomoreblocks}{keinebloeckemehr} \setinterfacecommand{nomorefiles}{keinedateienmehr} \setinterfacecommand{nop}{nop} \setinterfacecommand{nospace}{keinspatium} \setinterfacecommand{note}{notiz} \setinterfacecommand{notopandbottomlines}{keinzeilenobenundunten} \setinterfacecommand{notsmallcapped}{nokap} \setinterfacecommand{nowhitespace}{keinzwischenraum} \setinterfacecommand{numberofsubpages}{numberofsubpages} \setinterfacecommand{numbers}{ziffern} \setinterfacecommand{outeredgedistance}{outeredgedistance} \setinterfacecommand{outeredgewidth}{outeredgewidth} \setinterfacecommand{outermargindistance}{outermargindistance} \setinterfacecommand{outermarginwidth}{outermarginwidth} \setinterfacecommand{packed}{kleinerdurchschuss} \setinterfacecommand{page}{seite} \setinterfacecommand{pagedepth}{pagedepth} \setinterfacecommand{pagenumber}{seitenummer} \setinterfacecommand{pageoffset}{pageoffset} \setinterfacecommand{pagereference}{seitenreferenz} \setinterfacecommand{paperheight}{papierhoehe} \setinterfacecommand{paperwidth}{papierbreite} \setinterfacecommand{periods}{punkt} \setinterfacecommand{plaatsruwelijst}{placerawlist} \setinterfacecommand{placebookmarks}{platzierebookmarks} \setinterfacecommand{placecombinedlist}{platzierezusammengestellteliste} \setinterfacecommand{placefloat}{placefloat} \setinterfacecommand{placefootnotes}{platzierefussnoten} \setinterfacecommand{placeformula}{platziereformel} \setinterfacecommand{placeheadnumber}{placeheadnumber} \setinterfacecommand{placeheadtext}{placeheadtext} \setinterfacecommand{placelegend}{platzierelegende} \setinterfacecommand{placelist}{platziereliste} \setinterfacecommand{placelocalfootnotes}{platzierelokalefussnoten} \setinterfacecommand{placelogos}{platzierelogo} \setinterfacecommand{placeongrid}{amgitterausrichten} \setinterfacecommand{placeontopofeachother}{platziereuntereinander} \setinterfacecommand{placepagenumber}{placepagenumber} \setinterfacecommand{placereferencelist}{placereferencelist} \setinterfacecommand{placeregister}{platziereregister} \setinterfacecommand{placerule}{placerule} \setinterfacecommand{placesidebyside}{platzierenebeneinander} \setinterfacecommand{placesubformula}{platziereunterformel} \setinterfacecommand{placetextvariable}{placetextvariable} \setinterfacecommand{position}{position} \setinterfacecommand{positiontext}{positiontext} \setinterfacecommand{printpaperheight}{printpapierhoehe} \setinterfacecommand{printpaperwidth}{printpapierbreite} \setinterfacecommand{processblocks}{bearbeitebloecke} \setinterfacecommand{processpage}{bearbeiteseite} \setinterfacecommand{product}{produkt} \setinterfacecommand{program}{programm} \setinterfacecommand{project}{projekt} \setinterfacecommand{publication}{publikation} \setinterfacecommand{quotation}{zitat} \setinterfacecommand{quote}{zitieren} \setinterfacecommand{ran}{ran} \setinterfacecommand{redo}{wiederholen} \setinterfacecommand{ref}{ref} \setinterfacecommand{reference}{referenz} \setinterfacecommand{referral}{verweis} \setinterfacecommand{referraldate}{verweisdatum} \setinterfacecommand{referring}{referieren} \setinterfacecommand{remark}{bemerkung} \setinterfacecommand{reset}{ruecksetzten} \setinterfacecommand{resetmarking}{ruecksetztenbeschriftung} \setinterfacecommand{resetnumber}{resetnumber} \setinterfacecommand{resettext}{resettextcontent} \setinterfacecommand{rightaligned}{rechtsbuendig} \setinterfacecommand{rightedgedistance}{abstandrechterrand} \setinterfacecommand{rightedgewidth}{breiterechterrand} \setinterfacecommand{rightmargindistance}{rechtemarginalafstand} \setinterfacecommand{rightmarginwidth}{rechtemarginalbreite} \setinterfacecommand{romannumerals}{roemischezahlen} \setinterfacecommand{rotate}{drehen} \setinterfacecommand{scale}{format} \setinterfacecommand{screen}{bildschirm} \setinterfacecommand{selectblocks}{waehlebloeckeaus} \setinterfacecommand{selectpaper}{waehlepapieraus} \setinterfacecommand{selectversion}{waehleversionaus} \setinterfacecommand{setnumber}{setnumber} \setinterfacecommand{settextcontent}{settext} \setinterfacecommand{settextvariable}{settextvariable} \setinterfacecommand{setupalign}{stelleausrichtungein} \setinterfacecommand{setupanswerarea}{setupanswerarea} \setinterfacecommand{setuparranging}{stelleanordnenein} \setinterfacecommand{setupbackground}{stellehintergrundein} \setinterfacecommand{setupbackgrounds}{stellehintergruendeein} \setinterfacecommand{setupblackrules}{stellerechteckein} \setinterfacecommand{setupblank}{stelleblankoein} \setinterfacecommand{setupblock}{stelleblockein} \setinterfacecommand{setupbodyfont}{stellefliesstextein} \setinterfacecommand{setupbodyfontenvironment}{stellefliesstextumgebungein} \setinterfacecommand{setupbottom}{stelleuntenein} \setinterfacecommand{setupbottomtexts}{stelletextuntenein} \setinterfacecommand{setupbuffer}{stellepufferein} \setinterfacecommand{setupbuttons}{stelleknopfein} \setinterfacecommand{setupcapitals}{stelleversalienein} \setinterfacecommand{setupcaption}{stellebildunterschriftein} \setinterfacecommand{setupcaptions}{stellebilderunterschriftein} \setinterfacecommand{setupclipping}{stelleausschnittein} \setinterfacecommand{setupcolor}{stellefarbeein} \setinterfacecommand{setupcolors}{stellefarbenein} \setinterfacecommand{setupcolumns}{stellespaltenein} \setinterfacecommand{setupcolumnset}{setupcolumnset} \setinterfacecommand{setupcolumnsetlines}{setupcolumnsetlines} \setinterfacecommand{setupcolumnsetstart}{setupcolumnsetstart} \setinterfacecommand{setupcombinations}{stellekombinationein} \setinterfacecommand{setupcombinedlist}{stellezusammengestelltelisteein} \setinterfacecommand{setupcomment}{stellekommentarein} \setinterfacecommand{setupdescriptions}{definierebeschreibungen} \setinterfacecommand{setupenumerations}{stellebeschreibungein} \setinterfacecommand{setupexternalfigures}{stelleexterneabbildungenein} \setinterfacecommand{setupfield}{stellefeldein} \setinterfacecommand{setupfields}{stellefelderin} \setinterfacecommand{setupfillinlines}{stellegefuelltezeileein} \setinterfacecommand{setupfillinrules}{stellegefuelltesrechteckein} \setinterfacecommand{setupfloat}{stellegleitobjektein} \setinterfacecommand{setupfloats}{stellegleitobjekteein} \setinterfacecommand{setupfloatsplitting}{stelleplatziegeteiltegleitobjekt} \setinterfacecommand{setupfooter}{stellefusszeileein} \setinterfacecommand{setupfootertexts}{stellefusszeilentextein} \setinterfacecommand{setupfootnotedefinition}{stellefussnotendefinitionein} \setinterfacecommand{setupfootnotes}{stellefussnotenein} \setinterfacecommand{setupforms}{setupforms} \setinterfacecommand{setupformulas}{stelleformelnein} \setinterfacecommand{setupframed}{stelleumrahmtein} \setinterfacecommand{setupframedtexts}{stelleumrahmtetexteein} \setinterfacecommand{setuphead}{stelleueberschriftein} \setinterfacecommand{setupheader}{stellekopfzeileein} \setinterfacecommand{setupheadertexts}{stellekopfzeilentextein} \setinterfacecommand{setupheadnumber}{stellekopfzahlein} \setinterfacecommand{setupheads}{stelleueberschriftenein} \setinterfacecommand{setupheadtext}{stelleueberschrifttextein} \setinterfacecommand{setuphyphenmark}{stellebindestrichein} \setinterfacecommand{setupindentedtext}{setupindentedtext} \setinterfacecommand{setupindenting}{stelleeinziehenein} \setinterfacecommand{setupinmargin}{stelleinmarginalieein} \setinterfacecommand{setupinteraction}{stelleinteraktionein} \setinterfacecommand{setupinteractionbar}{stelleinteraktionsbalkenein} \setinterfacecommand{setupinteractionmenu}{stelleinteraktionsmenueein} \setinterfacecommand{setupinteractionscreen}{stelleinteraktionsbildschirmein} \setinterfacecommand{setupinterlinespace}{stellezeilenabstandein} \setinterfacecommand{setupitemgroup}{setupitemgroup} \setinterfacecommand{setupitemgroups}{stelleaufzaehlungenein} \setinterfacecommand{setupitems}{stellepostenein} \setinterfacecommand{setuplabeltext}{stellelabeltextein} \setinterfacecommand{setuplanguage}{stellespracheein} \setinterfacecommand{setuplayout}{stellelayoutein} \setinterfacecommand{setuplegend}{stellelegendeein} \setinterfacecommand{setuplinenumbering}{stellezeilennumerierungein} \setinterfacecommand{setuplines}{stellezeilenein} \setinterfacecommand{setuplinewidth}{stellelinienbreiteein} \setinterfacecommand{setuplist}{stellelisteein} \setinterfacecommand{setupmakeup}{stelleumbruchein} \setinterfacecommand{setupmarginblocks}{stellemarginalblockein} \setinterfacecommand{setupmarginrules}{stellemarginallinieein} \setinterfacecommand{setupmarking}{stellebeschriftungein} \setinterfacecommand{setupmathalignment}{setupmathalignment} \setinterfacecommand{setupnarrower}{stelleengerein} \setinterfacecommand{setupnumber}{setupnumber} \setinterfacecommand{setupnumbering}{stellenummerierungein} \setinterfacecommand{setupoppositeplacing}{stellegegenueberplatzierenein} \setinterfacecommand{setupoutput}{stelleausgabeein} \setinterfacecommand{setuppagecomment}{stelleseitenkommentarein} \setinterfacecommand{setuppagenumber}{stelleseitennummerein} \setinterfacecommand{setuppagenumbering}{stelleseitennummeriernungein} \setinterfacecommand{setuppagetransitions}{stelleseitenuebergangein} \setinterfacecommand{setuppalet}{stellepaletteein} \setinterfacecommand{setuppaper}{setuppaper} \setinterfacecommand{setuppapersize}{stellepapierformatein} \setinterfacecommand{setupparagraphnumbering}{stelleabsatznummerierungein} \setinterfacecommand{setupparagraphs}{stelleabsaetzeein} \setinterfacecommand{setupplacement}{setupplacement} \setinterfacecommand{setuppositioning}{stellepositionierenein} \setinterfacecommand{setupprofiles}{stelleprofilein} \setinterfacecommand{setupprograms}{stelleprogrammein} \setinterfacecommand{setuppublications}{stellepublikationein} \setinterfacecommand{setupquote}{stellezitierenein} \setinterfacecommand{setupreferencelist}{stellereferenzlisteein} \setinterfacecommand{setupreferencing}{stellereferenzierenein} \setinterfacecommand{setupregister}{stelleregisterein} \setinterfacecommand{setuprotate}{stelledrehenein} \setinterfacecommand{setuprule}{setuprule} \setinterfacecommand{setups}{einstellungen} \setinterfacecommand{setupscreens}{stellerasterein} \setinterfacecommand{setupsection}{stelleabschnittein} \setinterfacecommand{setupsectionblock}{stelleabschnittsblockein} \setinterfacecommand{setupsorting}{stellesortierenein} \setinterfacecommand{setupspacing}{stellespatiumein} \setinterfacecommand{setupstartstop}{setupstartstop} \setinterfacecommand{setupstrut}{setupstrut} \setinterfacecommand{setupsubpagenumber}{stelleunterseitennummerein} \setinterfacecommand{setupsymbolset}{stellesymbolsetein} \setinterfacecommand{setupsynchronization}{stellesynchronisationein} \setinterfacecommand{setupsynchronizationbar}{stellesynchronisationsbalkenein} \setinterfacecommand{setupsynonyms}{stellesynonymein} \setinterfacecommand{setupsystem}{stellesystemein} \setinterfacecommand{setuptab}{stelletabein} \setinterfacecommand{setuptables}{stelletabellenein} \setinterfacecommand{setuptabulate}{stelletabulatorein} \setinterfacecommand{setuptext}{stelletextein} \setinterfacecommand{setuptextposition}{setuptextposition} \setinterfacecommand{setuptextrules}{stelletextumrissein} \setinterfacecommand{setuptexttexts}{stelletexttexteein} \setinterfacecommand{setuptextvariable}{setuptextvariable} \setinterfacecommand{setupthinrules}{stelleduennerumrissein} \setinterfacecommand{setuptolerance}{stelletoleranzein} \setinterfacecommand{setuptop}{stellenobenein} \setinterfacecommand{setuptoptexts}{stelletextobenein} \setinterfacecommand{setuptype}{stelletipein} \setinterfacecommand{setuptyping}{stelletippenein} \setinterfacecommand{setupunderbar}{stelleunterstreichenein} \setinterfacecommand{setupurl}{stelleurlein} \setinterfacecommand{setupversions}{stelleversionein} \setinterfacecommand{setupwhitespace}{stellezwischenraumein} \setinterfacecommand{showbodyfont}{zeigefliesstext} \setinterfacecommand{showbodyfontenvironment}{zeigefliesstextumgebung} \setinterfacecommand{showcolor}{zeigefarbe} \setinterfacecommand{showcolorgroup}{zeigefarbengruppe} \setinterfacecommand{showexternalfigures}{zeigeexterneabbildungen} \setinterfacecommand{showfields}{zeigefelder} \setinterfacecommand{showframe}{zeigerahmen} \setinterfacecommand{showgrid}{zeigegitter} \setinterfacecommand{showlayout}{zeigelayout} \setinterfacecommand{showmakeup}{zeigeumbruch} \setinterfacecommand{showpalet}{zeigepalette} \setinterfacecommand{showprint}{zeigedruck} \setinterfacecommand{showsetups}{zeigeeinstellungen} \setinterfacecommand{showstruts}{zeigestruts} \setinterfacecommand{showsymbolset}{showsymbolset} \setinterfacecommand{smallcapped}{kap} \setinterfacecommand{someline}{einezeile} \setinterfacecommand{somewhere}{irgendwo} \setinterfacecommand{space}{spatium} \setinterfacecommand{splitfloat}{teilegleitobjekt} \setinterfacecommand{startalignment}{startausrichtung} \setinterfacecommand{startbackground}{starthintergrund} \setinterfacecommand{startcoding}{startkodierung} \setinterfacecommand{startcolor}{startfarbe} \setinterfacecommand{startcolumnmakeup}{startcolumnmakeup} \setinterfacecommand{startcolumns}{startspalten} \setinterfacecommand{startcolumnset}{startcolumnset} \setinterfacecommand{startcombination}{startkombination} \setinterfacecommand{startcomponent}{startkomponente} \setinterfacecommand{startdocument}{startdokument} \setinterfacecommand{startenvironment}{startumgebung} \setinterfacecommand{startfigure}{startabbildung} \setinterfacecommand{startglobal}{startglobal} \setinterfacecommand{startline}{startzeile} \setinterfacecommand{startlinecorrection}{startzeilenkorrektur} \setinterfacecommand{startlinenumbering}{startzeilennumerierung} \setinterfacecommand{startlines}{startzeilen} \setinterfacecommand{startlocal}{startlokal} \setinterfacecommand{startlocalfootnotes}{startlokalefussnoten} \setinterfacecommand{startmakeup}{startumbruch} \setinterfacecommand{startmarginblock}{startmarginalblock} \setinterfacecommand{startmarginrule}{startmarginallinie} \setinterfacecommand{startnarrower}{startenger} \setinterfacecommand{startopposite}{startgegenueber} \setinterfacecommand{startoverlay}{startoverlay} \setinterfacecommand{startoverzicht}{startueberblick} \setinterfacecommand{startpacked}{startkleinerdurchschuss} \setinterfacecommand{startpositioning}{startpositionieren} \setinterfacecommand{startproduct}{startprodukt} \setinterfacecommand{startprofile}{startprofil} \setinterfacecommand{startproject}{startprojekt} \setinterfacecommand{startquotation}{startzitat} \setinterfacecommand{startraster}{startraster} \setinterfacecommand{startsymbolset}{startsymbolset} \setinterfacecommand{startsynchronization}{startsynchronisation} \setinterfacecommand{starttable}{starttabelle} \setinterfacecommand{starttables}{starttabellen} \setinterfacecommand{starttext}{starttext} \setinterfacecommand{starttextrule}{starttextlinie} \setinterfacecommand{startunpacked}{startgrosserdurchschuss} \setinterfacecommand{startversion}{startversion} \setinterfacecommand{stopalignment}{stopausrichtung} \setinterfacecommand{stopbackground}{stophintergrund} \setinterfacecommand{stopcoding}{stopkodierung} \setinterfacecommand{stopcolor}{stopfarbe} \setinterfacecommand{stopcolumnmakeup}{stopcolumnmakeup} \setinterfacecommand{stopcolumns}{stopspalten} \setinterfacecommand{stopcolumnset}{stopcolumnset} \setinterfacecommand{stopcombination}{stopkombination} \setinterfacecommand{stopcomponent}{stopkomponente} \setinterfacecommand{stopdocument}{stopdokument} \setinterfacecommand{stopenvironment}{stopumgebung} \setinterfacecommand{stopglobal}{stopglobal} \setinterfacecommand{stopline}{stopzeile} \setinterfacecommand{stoplinecorrection}{stopzeilenkorrektur} \setinterfacecommand{stoplinenumbering}{stopzeilennumerierung} \setinterfacecommand{stoplines}{stopzeilen} \setinterfacecommand{stoplocal}{stoplokal} \setinterfacecommand{stoplocalfootnotes}{stoplokalefussnoten} \setinterfacecommand{stopmakeup}{stopumbruch} \setinterfacecommand{stopmarginblock}{stopmarginalblock} \setinterfacecommand{stopmarginrule}{stopmarginallinie} \setinterfacecommand{stopnarrower}{stopenger} \setinterfacecommand{stopopposite}{stopgegenueber} \setinterfacecommand{stopoverlay}{stopoverlay} \setinterfacecommand{stopoverzicht}{stopueberblick} \setinterfacecommand{stoppacked}{stopkleinerdurchschuss} \setinterfacecommand{stoppositioning}{stoppositionieren} \setinterfacecommand{stopproduct}{stopprodukt} \setinterfacecommand{stopprofile}{stopprofil} \setinterfacecommand{stopproject}{stopprojekt} \setinterfacecommand{stopquotation}{stopzitat} \setinterfacecommand{stopraster}{stopraster} \setinterfacecommand{stopsynchronization}{stopsynchronisation} \setinterfacecommand{stoptable}{stoptabelle} \setinterfacecommand{stoptables}{stoptabellen} \setinterfacecommand{stoptext}{stoptext} \setinterfacecommand{stoptextrule}{stoptextlinie} \setinterfacecommand{stopunpacked}{stopgrosserdurchschuss} \setinterfacecommand{stopversion}{stopversion} \setinterfacecommand{stretched}{gestreckt} \setinterfacecommand{subformulanumber}{unterformelnummer} \setinterfacecommand{subpagenumber}{subpagenumber} \setinterfacecommand{switchtobodyfont}{wechselezumfliesstext} \setinterfacecommand{switchtorawfont}{switchtorawfont} \setinterfacecommand{sym}{sym} \setinterfacecommand{symbol}{symbol} \setinterfacecommand{symoffset}{symoffset} \setinterfacecommand{synchronizationbar}{synchronisationsbalken} \setinterfacecommand{synchronize}{synchronisieren} \setinterfacecommand{tab}{tab} \setinterfacecommand{testcolumn}{testcolumn} \setinterfacecommand{testpage}{testpage} \setinterfacecommand{tex}{tex} \setinterfacecommand{textheight}{texthoehe} \setinterfacecommand{textreference}{textreferenz} \setinterfacecommand{textrule}{textlinie} \setinterfacecommand{textvariable}{textvariable} \setinterfacecommand{textwidth}{textbreite} \setinterfacecommand{thinrule}{duennelinie} \setinterfacecommand{thinrules}{duennerumriss} \setinterfacecommand{tooltip}{tooltip} \setinterfacecommand{topdistance}{abstandoben} \setinterfacecommand{topheight}{hoeheoben} \setinterfacecommand{topspace}{kopfweite} \setinterfacecommand{totalnumberofpages}{gesamtseitenanzahl} \setinterfacecommand{translate}{uebersetzten} \setinterfacecommand{txt}{txt} \setinterfacecommand{typ}{tip} \setinterfacecommand{type}{tippen} \setinterfacecommand{typebuffer}{tippepuffer} \setinterfacecommand{typefile}{tippedatei} \setinterfacecommand{unitmeaning}{bedeutung} \setinterfacecommand{unknown}{unbekant} \setinterfacecommand{useJSscripts}{verwendeJSscript} \setinterfacecommand{useURL}{verwendeURL} \setinterfacecommand{useXMLfilter}{useXMLfilter} \setinterfacecommand{useblocks}{verwendebloecke} \setinterfacecommand{usecommands}{verwendebefehl} \setinterfacecommand{useencoding}{benutzekodierung} \setinterfacecommand{useexternaldocument}{verwendeexteresdokument} \setinterfacecommand{useexternalfigure}{verwendeexterneabbildung} \setinterfacecommand{useexternalfile}{verwendeexternedatei} \setinterfacecommand{useexternalfiles}{verwendeexternedateien} \setinterfacecommand{useexternalsoundtrack}{verwendeexternestonstueck} \setinterfacecommand{usemodule}{verwendemodul} \setinterfacecommand{usemodules}{verwendemodule} \setinterfacecommand{usepath}{benutzeverzeichnis} \setinterfacecommand{usereferences}{verwendereferenzen} \setinterfacecommand{usespecials}{benutzespezielles} \setinterfacecommand{usesymbols}{verwendesymbole} \setinterfacecommand{usetypescript}{usetypescript} \setinterfacecommand{usetypescriptfile}{usetypescriptfile} \setinterfacecommand{useurl}{verwendeurl} \setinterfacecommand{version}{version} \setinterfacecommand{vl}{vl} \setinterfacecommand{weekday}{wochentag} \setinterfacecommand{whitespace}{zwischenraum} \setinterfacecommand{wordright}{wortrechts} \setinterfacecommand{writebetweenlist}{schreibezwischenliste} \setinterfacecommand{writetolist}{schreibezurliste} \setinterfacecommand{writetoreferencelist}{schreibezurreferenzliste} \setinterfacecommand{writetoregister}{schreibezumregister} % \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/luat-soc.lua0000644000175000017500000000055412130411274024122 0ustar norbertnorbert-- This is just a loader. The package handler knows about the TEX tree. -- require "luatex/lua/socket.lua" -- require "luatex/lua/ltn12.lua" -- require "luatex/lua/mime.lua" -- require "luatex/lua/socket/http.lua" -- require "luatex/lua/socket/url.lua" -- require "luatex/lua/socket/tp.lua" -- require "luatex/lua/socket/ftp.lua" -- "luatex/lua/socket/smtp.lua" context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-pln.mkiv0000644000175000017500000000671512130411274024276 0ustar norbertnorbert%D The following bunch of macros come from plain \TEX\ by %D Don Knuth and deal with basic alignment. We just include %D them here so that they can be used if needed. Normally, %D \CONTEXT\ users will fall back on one of the three table %D environments. %D %D The hidden names are somewhat adapted and we use other %D local variables. \writestatus{loading}{ConTeXt Table Macros / Plain Tabular} %D This code might become a module. \unprotect \newconditional \c_tabl_plain_cr \newconditional \c_tabl_plain_use_tab \newbox \b_tabl_plain_tabs \newbox \b_tabl_plain_tabs_yet \newbox \b_tabl_plain_tabs_done \newdimen \d_tabl_plain_tab \let\m_tabl_plain_next\relax \def\cleartabs % visible {\global\setbox\b_tabl_plain_tabs_yet\emptyhbox \setbox\b_tabl_plain_tabs\emptyhbox} \def\settabs % visible {\setbox\b_tabl_plain_tabs\emptyhbox \futurelet\m_tabl_plain_next\tabl_plain_set_tabs} \def\tabalign % visible {\settrue\c_tabl_plain_use_tab \tabl_plain_make_tab_box} \ifdefined\+ \else \let\+\tabalign % no outer here (can be overloaded) \fi \def\tabl_plain_set_tabs {\ifx\m_tabl_plain_next\+% \let\tabl_plain_nxt\tabl_plain_align \else\ifx\m_tabl_plain_next\tabalign % added hh \let\tabl_plain_nxt\tabl_plain_align \else \let\tabl_plain_nxt\tabl_plain_set_cols \fi\fi \let\m_tabl_plain_next\relax \tabl_plain_nxt} \def\tabl_plain_align {\afterassignment\tabl_plain_set_tab \let\tabl_plain_nxt} \def\tabl_plain_set_tab {\let\tabl_plain_nxt\relax \setfalse\c_tabl_plain_use_tab \tabl_plain_make_tab_box} \def\tabl_plain_set_cols#1\columns {\scratchcounter#1\relax \d_tabl_plain_tab\hsize \loop \ifnum\scratchcounter>\zerocount \tabl_plain_other \repeat} \def\tabl_plain_other {\scratchdimen\d_tabl_plain_tab \divide\scratchdimen\scratchcounter \setbox\b_tabl_plain_tabs\hbox {\hbox to\scratchdimen{}% \unhbox\b_tabl_plain_tabs}% \advance\d_tabl_plain_tab-\scratchdimen \advance\scratchcounter\minusone} \def\tabl_plain_make_tab_box {\begingroup \let\+\tabalign % added hh \global\setbox\b_tabl_plain_tabs_yet\copy\b_tabl_plain_tabs \global\setbox\b_tabl_plain_tabs_done\emptyhbox \let\cr\tabl_plain_cr \setbox\scratchbox\vbox\bgroup \setfalse\c_tabl_plain_cr \ialign\bgroup \aligntab \tabl_plain_begin_tab_box \alignmark\alignmark \tabl_plain_end_tab_box \crcr} \def\tabl_plain_cr {\settrue\c_tabl_plain_cr \crcr \egroup \egroup \ifconditional\c_tabl_plain_use_tab \unvbox\scratchbox \lastbox % okay? \fi \endgroup \setbox\b_tabl_plain_tabs\hbox {\unhbox\b_tabl_plain_tabs_yet \unhbox\b_tabl_plain_tabs_done}} \def\tabl_plain_begin_tab_box {\setbox\scratchbox\hbox\bgroup} \def\tabl_plain_end_tab_box {\ifconditional\c_tabl_plain_cr \egroup % now \box\scratchbox holds the column \else \hss \egroup \global\setbox\b_tabl_plain_tabs_yet\hbox {\unhbox\b_tabl_plain_tabs_yet \global\setbox\globalscratchbox\lastbox}% now \box\globalscratchbox holds its size \ifvoid\globalscratchbox \global\setbox\globalscratchbox\hbox to \wd\scratchbox {}% \else \setbox\scratchbox\hbox to \wd\globalscratchbox {\unhbox\scratchbox}% \fi \global\setbox\b_tabl_plain_tabs_done\hbox {\box\globalscratchbox \unhbox\b_tabl_plain_tabs_done}% \fi \box\scratchbox} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/math-arr.mkiv0000644000175000017500000004511612130411274024276 0ustar norbertnorbert%D \module %D [ file=math-arr, %D version=2007.07.19, %D title=\CONTEXT\ Math Macros, %D subtitle=Arrows, %D author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We keep this file around as reference of his things were done in the %D past. You can still load this module but it has been replaced by more %D modern code. \writestatus{loading}{ConTeXt Math Macros / Arrows} \unprotect %D These will be generalized! Is it still needed in \MKIV? Also, we need to %D to it using regular opentype math! % Plain code: % % \def\rightarrowfill % {$% % \mathsurround\zeropoint % \smash-% % \mkern-7mu% % \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill % \mkern-7mu% % \mathord\rightarrow % $} % % \def\leftarrowfill % brrr no longer in luatex % {$% % \mathsurround\zeropoint % \mathord\leftarrow % \mkern-7mu% % \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill % \mkern-7mu % \smash-% % $} %D Extensible arrows are arrows that change their length according to the width of %D the text to be placed above and below the arrow. %D %D Since we need to define a lot of arrows, we first define some helper macros. The %D basic idea is to measure the width of the box to be placed above and below the %D arrow, and make the \quote {body} of the arrow as long as the bigger of the two %D widths. \installcorenamespace{matharrowsettings} \def\m_math_arrows_factor{1} \def\m_math_arrows_extra {0} \setvalue{\??matharrowsettings\v!none }{\def\m_math_arrows_factor{0}} \setvalue{\??matharrowsettings\v!small }{\def\m_math_arrows_extra{10}} \setvalue{\??matharrowsettings\v!medium }{\def\m_math_arrows_extra{15}} \setvalue{\??matharrowsettings\v!big }{\def\m_math_arrows_extra{20}} \setvalue{\??matharrowsettings\v!normal }{} \setvalue{\??matharrowsettings }{} \setvalue{\??matharrowsettings\s!unknown}{\doifnumberelse\p_math_spacing{\let\m_math_arrows_extra\p_math_spacing}\donothing} \def\math_arrows_construct#1#2#3#4#5% hm, looks like we do a double mathrel (a bit cleaned up .. needs checking) {\begingroup \def\m_math_arrows_factor{1}% \def\m_math_arrows_extra {0}% \edef\p_math_spacing{#1}% \csname\??matharrowsettings \ifcsname\??matharrowsettings\p_math_spacing\endcsname\p_math_spacing\else\s!unknown\fi \endcsname \mathsurround\zeropoint \muskip0=\muexpr\m_math_arrows_factor\muexpr\thirdoffourarguments #2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\firstoffourarguments #2\onemuskip\relax \muskip2=\muexpr\m_math_arrows_factor\muexpr\fourthoffourarguments#2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\secondoffourarguments#2\onemuskip\relax \setbox0\hbox{$\scriptstyle \mkern\muskip0\relax #5\relax \mkern\muskip2\relax $}% \setbox2\hbox{$\scriptstyle \mkern\muskip0\relax #4\relax \mkern\muskip2\relax $}% \setbox4\hbox{#3\displaystyle}% \dimen0\wd0\relax \ifdim\wd2>\dimen0 \dimen0\wd2\relax \fi \ifdim\wd4>\dimen0 \dimen0\wd4\relax \fi \ifdim\wd4=\dimen0\else \setbox4\hbox to \dimen0{#3\displaystyle}% \fi \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits\normalsuperscript{\box0}\normalsubscript{\box2}}% \endgroup} \let\math_arrows_construct_single\math_arrows_construct %D There are some arrows which are created by stacking two arrows. The next %D macro helps in defining such \quotation{double arrows}. % weird, we get a shift with the double ... but will become core luatex anyway % % \startchemicalformula % \chemical{S} % \chemical{+} % \chemical{O_2} % \chemical{EQUILIBRIUM}{boven}{onder} % \chemical{SO_2} % \stopchemicalformula \def\math_arrows_construct_double#1#2#3#4#5#6#7% opt l r sp rs top bot {\mathrel {\scratchdimen.32\exheight\relax % was .22, todo: make configurable \setbox0\hbox{$\math_arrows_construct{#1}{#2}{#4}{\phantom{#6}}{#7}$}% \setbox2\hbox{$\math_arrows_construct{#1}{#3}{#5}{#6}{\phantom{#7}}$}% \raise\scratchdimen\box0 \kern-\wd2 \lower\scratchdimen\box2}} %D \macros{definematharrow} %D %D Macro for defining new arrows. We can define two types of arrows|<|single arrows %D and double arrows. Single arrows are defined as %D %D \starttyping %D \definematharrow [xrightarrow] [0359] [\rightarrowfill] %D \stoptyping %D %D The first argument is the name of the arrow (\tex {xrightarrow} in this case.) The %D second argument consists of a set of 4 numbers and specify the spacing correction %D in math units~\type {mu}. These numbers define: %D %D \startlines %D 1st number: arrow||tip correction %D 2nd number: arrow||tip correction %D 3rd number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra}) %D 4th number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra}) %D \stoplines %D %D The third argument is the name of the extensible fill. The third argument is optional %D when the arrow is redefined later (this is useful for font specific tweaking of the %D skips.) For example, %D %D \startbuffer %D \math{\xrightarrow{above}} %D \definematharrow[xrightarrow][0000] %D \math{\xrightarrow{above}} %D \definematharrow[xrightarrow][55{50}{50}] %D \math{\xrightarrow{above}} %D \stopbuffer %D \typebuffer gives {\getbuffer} %D %D The double arrows are defined as follows %D %D \starttyping %D \definematharrow [xrightleftharpoons] [3095,0359] %D [\rightharpoonupfill,\leftharpoondownfill] %D \stoptyping %D %D The second and the third set of arguments consist of comma separated values. The %D first element of the second argument (\type {3095}) corresponds to the spacing %D correction of top arrow fill (\tex{rightarrowupfill}). Similarly, \type {0359} %D corresponds to bottom arrow fill \tex {leftharpoondownfill}). Stacking them on %D top of each other we get $\xrightleftharpoons [big] {above} {below}$. The %D following math arrows are defined %D %D \placetable[none]{}{\starttable[|l|m|] %D \NC \tex{xrightarrow} \NC \xrightarrow [big] \NC \NR %D \NC \tex{xleftarrow} \NC \xleftarrow [big] \NC \NR %D \NC \tex{xequal} \NC \xequal [big] \NC \NR %D \NC \tex{xRightarrow} \NC \xRightarrow [big] \NC \NR %D \NC \tex{xLeftarrow} \NC \xLeftarrow [big] \NC \NR %D \NC \tex{xLeftrightarrow} \NC \xLeftrightarrow [big] \NC \NR %D \NC \tex{xleftrightarrow} \NC \xleftrightarrow [big] \NC \NR %D \NC \tex{xmapsto} \NC \xmapsto [big] \NC \NR %D \NC \tex{xtwoheadrightarrow} \NC \xtwoheadrightarrow [big] \NC \NR %D \NC \tex{xtwoheadleftarrow} \NC \xtwoheadleftarrow [big] \NC \NR %D \NC \tex{xrightharpoondown} \NC \xrightharpoondown [big] \NC \NR %D \NC \tex{xrightharpoonup} \NC \xrightharpoonup [big] \NC \NR %D \NC \tex{xleftharpoondown} \NC \xleftharpoondown [big] \NC \NR %D \NC \tex{xleftharpoonup} \NC \xleftharpoonup [big] \NC \NR %D \NC \tex{xhookleftarrow} \NC \xhookleftarrow [big] \NC \NR %D \NC \tex{xhookrightarrow} \NC \xhookrightarrow [big] \NC \NR %D \NC \tex{xleftrightharpoons} \NC \xleftrightharpoons [big] \NC \NR %D \NC \tex{xrightleftharpoons} \NC \xrightleftharpoons [big] \NC \NR %D \stoptable} %D If needed this can be optimized (i.e. we can preexpand using \type %D {\docheckedpair}). \unexpanded\def\definematharrow {\doquadrupleargument\math_arrows_define} \def\math_arrows_define[#1][#2][#3][#4]% name type[none|both] template command {\iffourthargument \executeifdefined{math_arrows_define_#2}\gobblethreearguments{#1}{#3}{#4}% \else\ifthirdargument \math_arrows_define_both{#1}{#2}{#3}% \else\ifsecondargument \math_arrows_define_both_again{#1}{#2}{#3}% \fi\fi\fi} \def\math_arrows_define_both_again#1#2#3% real dirty, this overload! {\ifcsname#1\endcsname \pushmacro\math_arrows_do \def\math_arrows_do[##1][##2]{\setuvalue{#1}{\math_arrows_do[#2][##2]}}% \getvalue{#1}% \popmacro\math_arrows_do \fi} \def\math_arrows_define_both#1#2#3% {\setuvalue{#1}{\math_arrows_do[#2][#3]}} \unexpanded\def\math_arrows_do {\doquadrupleempty\math_arrows_handle} \def\math_arrows_handle[#1][#2][#3][#4]% #3 == optional arg .. \empty can be just 'empty' [#4] gobbles spaces {\def\math_arrows_handle_indeed{\math_arrows_handle_finalize[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} \dodoublegroupempty\math_arrows_handle_indeed} \def\math_arrows_handle_finalize[#1,#2,#3][#4,#5,#6][#7]#8#9% [#7] is the optional arg {\edef\!!stringa{#2}% \ifx\!!stringa\empty \ifsecondargument \mathrel{\math_arrows_construct_single{#7}{#1}{#4}{#8}{#9}}% \else \mathrel{\math_arrows_construct_single{#7}{#1}{#4}{}{#8}}% \fi \else \ifsecondargument \mathrel{\math_arrows_construct_double{#7}{#1}{#2}{#4}{#5}{#8}{#9}}% \else \mathrel{\math_arrows_construct_double{#7}{#1}{#2}{#4}{#5}{}{#8}}% \fi \fi} % Adapted from amsmath. %D \macros{mtharrowfill,defaultmtharrowfill} %D %D To extend the arrows we need to define a \quotation {math arrow fill}. This %D command takes 8 arguments: the first four correspond the second argument of %D \tex {definematharrow} explained above. The other three specify the tail, %D body and head of the arrow. The last argument specifies the math-mode in which %D the arrow is drawn. \tex {defaultmtharrowfill} has values tweaked to match %D Latin Modern fonts. For fonts that are significantly different (e.g. cows) a %D different set of values need to be determined. \def\mtharrowfill#1#2#3#4#5#6#7#8% {$\mathsurround\zeropoint \thickmuskip\zeromuskip\medmuskip\thickmuskip\thinmuskip\thickmuskip \relax#8#5% \mkern-#1\onemuskip \cleaders\hbox{$#8\mkern-#2\onemuskip#6\mkern-#3\onemuskip$}\hfill \mkern-#4\onemuskip#7$} \def\defaultmtharrowfill{\mtharrowfill 7227} %D We now define some arrow fills that will be used for defining the arrows. Plain %D \TEX\ already defines \tex {leftarrowfill} and \tex {rightarrowfill}. The \tex %D {defaultmtharrowfill} command defines an arrowfill that takes an argument (so %D that it can also be used with over and under arrows). However the Plain \TEX\ %D definitions of \tex {leftarrowfill} and \tex {rightarrowfill} do not take this %D extra argument. To be backward compatible with Plain \TEX, we define two %D arrowfills: \tex {specrightarrowfill} which takes an extra argument, and \tex %D {rightarrowfill} which does not. \unexpanded\def\specrightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow} \unexpanded\def\specleftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar} \unexpanded\def\rightarrowfill {\specrightarrowfill \textstyle} \unexpanded\def\leftarrowfill {\specleftarrowfill \textstyle} \unexpanded\def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar} \unexpanded\def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow} \unexpanded\def\Leftarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Relbar} \unexpanded\def\Leftrightarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Rightarrow} \unexpanded\def\leftrightarrowfill {\defaultmtharrowfill \leftarrow \relbar \rightarrow} \unexpanded\def\mapstofill {\defaultmtharrowfill{\mapstochar\relbar} \relbar \rightarrow} \unexpanded\def\twoheadrightarrowfill{\defaultmtharrowfill \relbar \relbar \twoheadrightarrow} \unexpanded\def\twoheadleftarrowfill {\defaultmtharrowfill \twoheadleftarrow \relbar \relbar} \unexpanded\def\rightharpoondownfill {\defaultmtharrowfill \relbar \relbar \rightharpoondown} \unexpanded\def\rightharpoonupfill {\defaultmtharrowfill \relbar \relbar \rightharpoonup} \unexpanded\def\leftharpoondownfill {\defaultmtharrowfill \leftharpoondown \relbar \relbar} \unexpanded\def\leftharpoonupfill {\defaultmtharrowfill \leftharpoonup \relbar \relbar} \unexpanded\def\hookleftfill {\defaultmtharrowfill \leftarrow \relbar{\relbar\joinrel\rhook}} \unexpanded\def\hookrightfill {\defaultmtharrowfill{\lhook\joinrel\relbar}\relbar \rightarrow} \unexpanded\def\relfill {\defaultmtharrowfill \relbar \relbar \relbar} \unexpanded\def\triplerelbar {\mathrel\equiv} \unexpanded\def\triplerelfill{\defaultmtharrowfill\triplerelbar\triplerelbar\triplerelbar} \unexpanded\def\singlebond{{\xrel}} % or \def\singlebond{{\xrel[2]}} \unexpanded\def\doublebond{{\xequal}} \unexpanded\def\triplebond{{\xtriplerel}} %D A bit or arrow juggling: %D %D \startbuffer %D \hbox to \hsize{\rightoverleftarrowfill} %D \stopbuffer %D %D \typebuffer \blank \getbuffer \blank \unexpanded\def\rightoverleftarrowfill {\specrightoverleftarrowfill} \unexpanded\def\specrightoverleftarrowfill {\defaultmtharrowfill \ctxdoublearrowfillleftend \ctxdoublearrowfillmiddlepart \ctxdoublearrowfillrightend \textstyle} %D Now we define most commonly used arrows. These include arrows defined in \filename %D {amsmath.sty}, \filename {extarrows.sty}, \filename {extpfel.sty} and \filename %D {mathtools.sty} packages for \LATEX\ (plus a few more). \definematharrow [xrightarrow] [0359] [\specrightarrowfill] \definematharrow [xleftarrow] [3095] [\specleftarrowfill] \definematharrow [xequal] [0099] [\equalfill] \definematharrow [xRightarrow] [0359] [\Rightarrowfill] \definematharrow [xLeftarrow] [3095] [\Leftarrowfill] \definematharrow [xLeftrightarrow] [0099] [\Leftrightarrowfill] \definematharrow [xleftrightarrow] [0099] [\leftrightarrowfill] \definematharrow [xmapsto] [3599] [\mapstofill] \definematharrow [xtwoheadrightarrow] [5009] [\twoheadrightarrowfill] \definematharrow [xtwoheadleftarrow] [0590] [\twoheadleftarrowfill] \definematharrow [xrightharpoondown] [0359] [\rightharpoondownfill] \definematharrow [xrightharpoonup] [0359] [\rightharpoonupfill] \definematharrow [xleftharpoondown] [3095] [\leftharpoondownfill] \definematharrow [xleftharpoonup] [3095] [\leftharpoonupfill] \definematharrow [xhookleftarrow] [3095] [\hookleftfill] \definematharrow [xhookrightarrow] [0395] [\hookrightfill] \definematharrow [xrel] [0099] [\relfill] \definematharrow [xtriplerel] [0099] [\triplerelfill] \definematharrow [xrightoverleftarrow] [0359,3095] [\specrightarrowfill,\specleftarrowfill] \definematharrow [xleftrightharpoons] [3399,3399] [\leftharpoonupfill,\rightharpoondownfill] \definematharrow [xrightleftharpoons] [3399,3399] [\rightharpoonupfill,\leftharpoondownfill] %D These arrows can be used as follows: %D %D \startbuffer %D \startformula \xrightarrow{stuff on top}\stopformula %D \startformula \xrightarrow{}{stuff on top}\stopformula %D \startformula \xrightarrow{stuff below}{}\stopformula %D \startformula \xrightarrow{stuff below}{stuff on top}\stopformula %D %D \startformula \xleftarrow [none]{stuff below}{stuff on top}\stopformula %D \startformula \xleftarrow [small]{stuff below}{stuff on top}\stopformula %D \startformula \xleftarrow [medium]{stuff below}{stuff on top}\stopformula %D \startformula \xleftarrow [big]{stuff below}{stuff on top}\stopformula %D \stopbuffer %D %D \typebuffer which gives \getbuffer %D \macros{definemathoverarrow,defineunderarrow} %D %D These macros for define math-overarrows are adapted from \filename {amsmath.sty} \unexpanded\def\definemathoverarrow {\dotripleargument\math_arrows_define_over} \def\math_arrows_define_over[#1][#2][#3]% {\ifthirdargument \setuvalue{#1}{\math_arrows_over_handle[#2][#3]}% \else \setuvalue{#1}{\math_arrows_over_handle[\zeropoint][#2]}% \fi} \def\math_arrows_over_handle[#1][#2]% {\mathpalette{\math_arrows_over_handle_indeed{#1}{#2}}} %D Note: \filename {math-pln.tex} has \type {\kern-\onepoint} and \filename %D {amsmath.sty} does not. We keep the kern amount configurable. This is useful %D for harpoons. \def\math_arrows_over_handle_indeed#1#2#3#4% {\vbox{\ialign{##\crcr #2#3\crcr \noalign{\kern#1\nointerlineskip}% $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr}}} %D Now the under arrows \unexpanded\def\definemathunderarrow {\dotripleargument\math_arrows_define_under} %D For underarrows the default kern is 0.3ex \def\math_arrows_define_under[#1][#2][#3]% {\ifthirdargument \setuvalue{#1}{\math_arrows_under_handle[#2][#3]}% \else \setuvalue{#1}{\math_arrows_under_handle[0.3ex][#2]}% \fi} \def\math_arrows_under_handle[#1][#2]% {\mathpalette{\math_arrows_under_handle_indeed{#1}{#2}}} \def\math_arrows_under_handle_indeed#1#2#3#4% {\vtop{\ialign{##\crcr $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr \noalign{\nointerlineskip\kern#1}% #2#3\crcr}}} %D Now we define the arrows \definemathoverarrow [overleftarrow] [\specleftarrowfill] \definemathoverarrow [overrightarrow] [\specrightarrowfill] \definemathoverarrow [overleftrightarrow] [\leftrightarrowfill] \definemathoverarrow [overtwoheadrightarrow] [\twoheadrightarrowfill] \definemathoverarrow [overtwoheadleftarrow] [\twoheadleftarrowfill] \definemathoverarrow [overrightharpoondown] [1pt] [\rightharpoondownfill] \definemathoverarrow [overrightharpoonup] [\rightharpoonupfill] \definemathoverarrow [overleftharpoondown] [1pt] [\leftharpoondownfill] \definemathoverarrow [overleftharpoonup] [\leftharpoonupfill] \definemathunderarrow [underleftarrow] [\specleftarrowfill] \definemathunderarrow [underrightarrow] [\specrightarrowfill] \definemathunderarrow [underleftrightarrow] [\leftrightarrowfill] \definemathunderarrow [undertwoheadrightarrow][\twoheadrightarrowfill] \definemathunderarrow [undertwoheadleftarrow] [\twoheadleftarrowfill] \definemathunderarrow [underrightharpoondown] [\rightharpoondownfill] \definemathunderarrow [underrightharpoonup] [\rightharpoonupfill] \definemathunderarrow [underleftharpoondown] [\leftharpoondownfill] \definemathunderarrow [underleftharpoonup] [\leftharpoonupfill] %D These can be used as follows: %D %D \startbuffer %D $\overleftarrow{A}$ $\overleftarrow{ABC}$ %D $a_{\overleftarrow{A}}$ $b_{\overleftarrow{ABC}}$ %D \stopbuffer %D \typebuffer which gives \getbuffer %D TODO: Possibly have a single arrow command define all the arrows. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-60.mkiv0000644000175000017500000001166612130411274024037 0ustar norbertnorbert%D \module %D [ file=s-pre-60, %D version=2004.03.15, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 60, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % use lua instead of global mess \unprotect \startmode[paper,print] \let\StartSteps\relax \let\StopSteps \relax \let\FlushStep \relax \let\ResetStep \relax \let\StartBusy \relax \let\StopBusy \relax \endinput \stopmode \newcount\c_module_pre_steps_current \newcount\c_module_pre_steps_maximum \newcount\c_module_pre_steps_nesting_step \newcount\c_module_pre_steps_nesting_steps \newcount\c_module_pre_steps_nesting_busy \def\StepCounter {\the\c_module_pre_steps_current} \def\StepMaximum {\the\c_module_pre_steps_maximum} \def\StepLayer {step:\the\c_module_pre_steps_current} \def\NextStepLayer {step:\the\numexpr\c_module_pre_steps_current+\plusone\relax} \def\FirstStepLayer{step:1} \useJSscripts[stp] \startsetups[set-stepper] \ifnum\getvariable{stepper}{nofsteps}>\c_module_pre_steps_maximum \dostepwiserecurse {\numexpr\c_module_pre_steps_maximum+\plusone\relax} {\getvariable{stepper}{nofsteps}} {1} { \doifnotmode{nosteps,nostep} { \expanded{\defineviewerlayer[step:\recurselevel][state=stop,scope=global]} } } \global\c_module_pre_steps_maximum\getvariable{stepper}{nofsteps}\relax \fi \stopsetups \setvariables [stepper] [set=\setups{set-stepper}, nofsteps=50] \defineviewerlayer[step:busy][state=start] \definereference [SetupStepper] [JS(SetupStepper{step,\StepMaximum})] \definereference [ResetStepper] [JS(ResetStepper)] \definereference [CheckStepper] [JS(CheckStepper{\StepCounter})] \definereference [InvokeStepper] [JS(InvokeStepper)] % todo: roll back blank \unexpanded\def\ResetStep {\iftrialtypesetting\else \global\c_module_pre_steps_current\zerocount \fi} \unexpanded\def\NextStep {\iftrialtypesetting\else \global\advance\c_module_pre_steps_current\plusone \fi} \unexpanded\def\PrevStep {\iftrialtypesetting\else \global\advance\c_module_pre_steps_current\minusone \fi} \unexpanded\def\FlushStep {\iftrialtypesetting\else \StopStep \NextStep \StartStep \fi} \unexpanded\def\StartStep {\iftrialtypesetting\else \global\advance\c_module_pre_steps_nesting_step\plusone \ifcase\c_module_pre_steps_nesting_step\or \startviewerlayer[\StepLayer]% \fi \fi \ignorespaces} \unexpanded\def\StopStep {\removeunwantedspaces \iftrialtypesetting\else \ifcase\c_module_pre_steps_nesting_step\or \stopviewerlayer \fi \global\advance\c_module_pre_steps_nesting_step\minusone \fi} \unexpanded\def\StartSteps {\iftrialtypesetting\else \global\advance\c_module_pre_steps_nesting_steps\plusone \ifcase\c_module_pre_steps_nesting_steps\or \ResetStep \NextStep \StartStep \fi \fi} \unexpanded\def\StopSteps {\iftrialtypesetting\else \ifcase\c_module_pre_steps_nesting_steps\or \StopStep \PrevStep \fi \global\advance\c_module_pre_steps_nesting_steps\minusone \fi} \unexpanded\def\StartBusy {\iftrialtypesetting\else \global\advance\c_module_pre_steps_nesting_busy\plusone \ifcase\c_module_pre_steps_nesting_busy\or \startviewerlayer[step:busy] \fi \fi \ignorespaces} \unexpanded\def\StopBusy {\removeunwantedspaces \iftrialtypesetting\else \ifcase\c_module_pre_steps_nesting_busy\or \stopviewerlayer \fi \global\advance\c_module_pre_steps_nesting_busy\minusone \fi} %D Handy: \unexpanded\def\StartLocalSteps {\ResetStep} \unexpanded\def\StopLocalSteps {} \unexpanded\def\StartLocalStep {\NextStep \StartStep} \unexpanded\def\StopLocalStep {\StopStep} \appendtoks \ResetStep \to \everyaftershipout \setupinteraction [%openaction=SetupStepper, closeaction=ResetStepper, openpageaction=CheckStepper, closepageaction=ResetStepper] \defineoverlay[invoke][\overlaybutton{InvokeStepper}] \setupbackgrounds [text] [background=invoke] % bonus \useMPlibrary[nav] \definepalet [navplus] [attach=interactioncolor, comment=interactioncolor] \setupcomment [symbol={comment-normal,comment-down}, textlayer=\StepLayer, option=buffer, height=\textheight, width=\textwidth, margin=0pt] \setupattachments [symbol={attach-normal,attach-down}, textlayer=\StepLayer] %D used as (given some definitions): %D %D \starttyping %D \StartLocalSteps %D \startcombination[both] %D {\StartLocalStep\placestreamlayer[left]\StopLocalStep} {} %D {\StartLocalStep\placestreamlayer[right]\StopLocalStep} {} %D \stopcombination %D \StopLocalSteps %D \stoptyping \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-par.mkiv0000644000175000017500000000424312130411274024253 0ustar norbertnorbert%D \module %D [ file=page-par, % copied from page-lin %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Line Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Paragraph Numbering} \unprotect \installcorenamespace {paragraphnumbering} \installcorenamespace {paragraphnumberingvariants} \installsimplecommandhandler \??paragraphnumbering {paragraphnumbering} \??paragraphnumbering \definecounter[\v!paragraph] \let\showparagraphnumber\relax \appendtoks \page_par_check_state \to \everysetupparagraphnumbering \unexpanded\def\page_par_check_state {\rawprocesscommacommand[\paragraphnumberingparameter\c!state]\page_par_check_state_step} \def\page_par_check_state_step#1% {\ifcsname\??paragraphnumberingvariants#1\endcsname \csname\??paragraphnumberingvariants#1\endcsname \fi} \setvalue{\??paragraphnumberingvariants\v!start}% {\let\showparagraphnumber\page_par_show_number_normal} \setvalue{\??paragraphnumberingvariants\v!stop}% {\let\showparagraphnumber\relax} \setvalue{\??paragraphnumberingvariants\v!line}% {\let\showparagraphnumber\page_par_show_number_lines} \setvalue{\??paragraphnumberingvariants\v!reset}% {\strc_counters_reset\v!paragraph \let\showparagraphnumber\page_par_show_number_normal} \unexpanded\def\page_par_show_number_normal {\strc_counters_increment\v!paragraph \inleftmargin % todo: \c!location, only a few make sense {\hfill % no complaints \tf % \tf normalizes em \useparagraphnumberingstyleandcolor\c!style\c!color \convertedcounter[\v!paragraph]% \kern\paragraphnumberingparameter\c!distance}} \unexpanded\def\page_par_show_number_lines {\ifnumberinglines \page_par_show_number_normal \fi} \setupparagraphnumbering [\c!state=\v!stop, %\c!location, %\c!style=, %\c!color=, \c!distance=\ifcase\c_page_lines_location2\emwidth\else\zeropoint\fi] % will change \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-computer-modern-unicode.mkiv0000644000175000017500000000734411754241457031111 0ustar norbertnorbert%D \module %D [ file=type-computer-modern-unicode, %D version=2007.07.30, % moved from type-otf %D title=\CONTEXT\ Typescript Macros, %D subtitle=Computer Modern Unicode, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[computer-modern-unicode] \definefontfeature[default-slanted-concrete][default][slant=.2] \definefontfeature[none-slanted-concrete] [none] [slant=.2] \starttypescript [\s!serif] [computer-modern-unicode] \definefontsynonym [\s!Serif] [\s!file:cmunrm] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:cmunti] [\s!features=\s!default] \definefontsynonym [\s!SerifSlanted] [\s!file:cmunsl] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:cmunbx] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunbi] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted][\s!SerifBoldItalic] \stoptypescript \starttypescript [\s!serif] [computer-modern-unicode-concrete] \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default] \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete] \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted][\s!file:cmunobx] [\s!features=default-slanted-concrete] \stoptypescript \starttypescript [\s!sans] [computer-modern-unicode,computer-modern-unicode-concrete] \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default] \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete] \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default] \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete] \stoptypescript \starttypescript [\s!mono] [computer-modern-unicode,computer-modern-unicode-concrete] \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none] \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete] \stoptypescript \starttypescript[computer-modern-unicode,computer-modern-unicode-concrete] \definetypeface[\typescriptone][\s!rm][\s!serif][\typescriptone] [\s!default] \definetypeface[\typescriptone][\s!ss][\s!sans] [computer-modern-unicode][\s!default] \definetypeface[\typescriptone][\s!tt][\s!mono] [computer-modern-unicode][\s!default] \definetypeface[\typescriptone][\s!mm][\s!math] [modern] [\s!default] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-el.mkii0000644000175000017500000002334511754241457024107 0ustar norbertnorbert%D \module %D [ file=enco-el, %D version=2005.08.24, %D title=\CONTEXT\ Encoding Macros, %D subtitle=EuroLetter, %D author={Several Users}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 EuroLetter encoding vector, also known as Dense Encoding is %D the result of discussion among users, most noticably Adam Lindsay, %D Mojka Miklavec, Patrick Gundlach, Taco Hoekwater and \unknown. %D It was a follow up of a thread started long ago where we %D discussed an encoding without the weird, never used symbols, but %D with as many characters as possible in order to support the utf-8 %D input regime. \startencoding[el] \definecasemaps 1 to 15 lc +16 uc 0 \definecasemaps 17 to 31 lc 0 uc -16 \definecasemaps 128 to 159 lc +32 uc 0 \definecasemaps 160 to 191 lc 0 uc -32 \definecasemaps 192 to 223 lc +32 uc 0 \definecasemaps 224 to 255 lc 0 uc -32 \definecasemap 92 92 124 \definecasemap 92 124 92 \definecharacter dotlessi 160 \definecharacter endash 32 \definecharacter emdash 16 \definecharacter aeligature 230 \definecharacter AEligature 198 \definecharacter oeligature 247 \definecharacter OEligature 215 \definecharacter ssharp 38 \definecharacter thorn 254 \definecharacter Thorn 222 \definecharacter eth 240 \definecharacter Eth 208 \definecharacter exclamdown 42 \definecharacter questiondown 43 \definecharacter quotedbl 35 \definecharacter quotedblbase 36 \definecharacter quotedblleft 34 \definecharacter quotedblright 35 \definecharacter quotesingle 39 \definecharacter quotesinglebase 0 \definecharacter quoteleft 96 \definecharacter quoteright 39 \definecharacter guilsingleleft 60 \definecharacter guilsingleright 62 \definecharacter leftguillemot 123 \definecharacter rightguillemot 125 \definecharacter Acircumflex 194 \definecharacter acircumflex 226 %definecharacter Ccircumflex {\buildtextaccent\textcircumflex C} %definecharacter ccircumflex {\buildtextaccent\textcircumflex c} \definecharacter Ecircumflex 202 \definecharacter ecircumflex 234 %definecharacter Gcircumflex {\buildtextaccent\textcircumflex G} %definecharacter gcircumflex {\buildtextaccent\textcircumflex g} %definecharacter Hcircumflex {\buildtextaccent\textcircumflex H} %definecharacter hcircumflex {\buildtextaccent\textcircumflex h} \definecharacter Icircumflex 206 \definecharacter icircumflex 238 %definecharacter Jcircumflex {\buildtextaccent\textcircumflex \dotlessJ} %definecharacter jcircumflex {\buildtextaccent\textcircumflex \dotlessj} \definecharacter Ocircumflex 212 \definecharacter ocircumflex 244 %definecharacter Scircumflex {\buildtextaccent\textcircumflex S} %definecharacter scircumflex {\buildtextaccent\textcircumflex s} \definecharacter Ucircumflex 219 \definecharacter ucircumflex 251 \definecharacter Wcircumflex 154 \definecharacter wcircumflex 186 \definecharacter Ycircumflex 156 \definecharacter ycircumflex 188 \definecharacter Agrave 192 \definecharacter agrave 224 \definecharacter Egrave 200 \definecharacter egrave 232 \definecharacter Igrave 204 \definecharacter igrave 236 \definecharacter Ograve 210 \definecharacter ograve 242 \definecharacter Ugrave 217 \definecharacter ugrave 249 \definecharacter Ygrave 155 \definecharacter ygrave 187 \definecharacter Atilde 195 \definecharacter atilde 227 %definecharacter Itilde {\buildtextaccent\texttilde \dotlessI} %definecharacter itilde {\buildtextaccent\texttilde \dotlessi} \definecharacter Ntilde 209 \definecharacter ntilde 241 \definecharacter Otilde 213 \definecharacter otilde 245 %definecharacter Utilde {\buildtextaccent\texttilde U} %definecharacter utilde {\buildtextaccent\texttilde u} %definecharacter Ytilde {\buildtextaccent\texttilde Y} %definecharacter ytilde {\buildtextaccent\texttilde y} \definecharacter Adiaeresis 196 \definecharacter adiaeresis 228 \definecharacter Ediaeresis 203 \definecharacter ediaeresis 235 \definecharacter Idiaeresis 207 \definecharacter idiaeresis 239 \definecharacter Odiaeresis 214 \definecharacter odiaeresis 246 \definecharacter Udiaeresis 220 \definecharacter udiaeresis 252 \definecharacter Ydiaeresis 223 \definecharacter ydiaeresis 255 \definecharacter Aacute 193 \definecharacter aacute 225 \definecharacter Cacute 4 \definecharacter cacute 20 \definecharacter Eacute 201 \definecharacter eacute 233 \definecharacter Iacute 205 \definecharacter iacute 237 \definecharacter Lacute 132 \definecharacter lacute 164 \definecharacter Nacute 136 \definecharacter nacute 168 \definecharacter Oacute 211 \definecharacter oacute 243 \definecharacter Racute 141 \definecharacter racute 173 \definecharacter Sacute 144 \definecharacter sacute 176 \definecharacter Uacute 218 \definecharacter uacute 250 \definecharacter Yacute 221 \definecharacter yacute 253 \definecharacter Zacute 157 \definecharacter zacute 189 \definecharacter Dstroke 8 \definecharacter dstroke 24 \definecharacter Hstroke 92 \definecharacter hstroke 124 %definecharacter Tstroke {T} %definecharacter tstroke {t} \definecharacter Cdotaccent 6 \definecharacter cdotaccent 22 \definecharacter Edotaccent 10 \definecharacter edotaccent 26 \definecharacter Gdotaccent 15 \definecharacter gdotaccent 31 \definecharacter Idotaccent 128 %definecharacter idotaccent {\buildtextaccent\textdotaccent \dotlessi} \definecharacter Zdotaccent 159 \definecharacter zdotaccent 191 \definecharacter Amacron 2 \definecharacter amacron 18 \definecharacter Emacron 11 \definecharacter emacron 27 \definecharacter Imacron 129 \definecharacter imacron 161 \definecharacter Omacron 140 \definecharacter omacron 172 \definecharacter Umacron 152 \definecharacter umacron 184 \definecharacter Ccedilla 199 \definecharacter ccedilla 231 \definecharacter Scedilla 146 \definecharacter scedilla 178 \definecharacter Gcommaaccent 14 \definecharacter gcommaaccent 30 \definecharacter Kcommaaccent 131 \definecharacter kcommaaccent 163 \definecharacter Lcommaaccent 135 \definecharacter lcommaaccent 167 \definecharacter Ncommaaccent 138 \definecharacter ncommaaccent 170 \definecharacter Rcommaaccent 143 \definecharacter rcommaaccent 175 %definecharacter Tcedilla 149 % there is no tcedilla in encoding %definecharacter tcedilla 181 \definecharacter Scommaaccent 147 \definecharacter scommaaccent 179 \definecharacter Tcommaaccent 149 \definecharacter tcommaaccent 181 \definecharacter Ohungarumlaut 139 \definecharacter ohungarumlaut 171 \definecharacter Uhungarumlaut 150 \definecharacter uhungarumlaut 182 \definecharacter Aogonek 3 \definecharacter aogonek 19 \definecharacter Eogonek 12 \definecharacter eogonek 28 \definecharacter Iogonek 130 \definecharacter iogonek 162 \definecharacter Uogonek 153 \definecharacter uogonek 185 \definecharacter Aring 197 \definecharacter aring 229 \definecharacter Uring 151 \definecharacter uring 183 \definecharacter Abreve 1 \definecharacter abreve 17 %definecharacter Ebreve {\buildtextaccent\textbreve E} %definecharacter ebreve {\buildtextaccent\textbreve e} \definecharacter Gbreve 13 \definecharacter gbreve 29 %definecharacter Ibreve {\buildtextaccent\textbreve \dotlessI} %definecharacter ibreve {\buildtextaccent\textbreve \dotlessi} %definecharacter Obreve {\buildtextaccent\textbreve O} %definecharacter obreve {\buildtextaccent\textbreve o} %definecharacter Ubreve {\buildtextaccent\textbreve U} %definecharacter ubreve {\buildtextaccent\textbreve u} \definecharacter Ccaron 5 \definecharacter ccaron 21 \definecharacter Dcaron 7 \definecharacter dcaron 23 \definecharacter Ecaron 9 \definecharacter ecaron 25 \definecharacter Lcaron 133 \definecharacter lcaron 165 \definecharacter Ncaron 137 \definecharacter ncaron 169 \definecharacter Rcaron 142 \definecharacter rcaron 174 \definecharacter Scaron 145 \definecharacter scaron 177 \definecharacter Tcaron 148 \definecharacter tcaron 180 %definecharacter Ycaron {\buildtextaccent\textcaron Y} %definecharacter ycaron {\buildtextaccent\textcaron y} \definecharacter Zcaron 158 \definecharacter zcaron 190 \definecharacter Lstroke 134 \definecharacter lstroke 166 \definecharacter Ostroke 216 \definecharacter ostroke 248 \stopencoding context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-brk.lua0000644000175000017500000002472412130411274024147 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-brk'] = { version = 1.001, comment = "companion to typo-brk.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this code dates from the beginning and is kind of experimental; it -- will be optimized and improved soon local next, type, tonumber = next, type, tonumber local utfbyte, utfchar = utf.byte, utf.char local format = string.format local trace_breakpoints = false trackers.register("typesetters.breakpoints", function(v) trace_breakpoints = v end) local report_breakpoints = logs.reporter("typesetting","breakpoints") local nodes, node = nodes, node local settings_to_array = utilities.parsers.settings_to_array local copy_node = node.copy local copy_nodelist = node.copy_list local free_node = node.free local insert_node_before = node.insert_before local insert_node_after = node.insert_after local remove_node = nodes.remove -- ! nodes local tonodes = nodes.tonodes local texattribute = tex.attribute local unsetvalue = attributes.unsetvalue local nodepool = nodes.pool local tasks = nodes.tasks local v_reset = interfaces.variables.reset local new_penalty = nodepool.penalty local new_glue = nodepool.glue local new_disc = nodepool.disc local nodecodes = nodes.nodecodes local kerncodes = nodes.kerncodes local glyph_code = nodecodes.glyph local kern_code = nodecodes.kern local kerning_code = kerncodes.kerning local typesetters = typesetters typesetters.breakpoints = typesetters.breakpoints or {} local breakpoints = typesetters.breakpoints breakpoints.mapping = breakpoints.mapping or { } breakpoints.numbers = breakpoints.numbers or { } breakpoints.methods = breakpoints.methods or { } local methods = breakpoints.methods local a_breakpoints = attributes.private("breakpoint") breakpoints.attribute = a_breakpoints storage.register("typesetters/breakpoints/mapping", breakpoints.mapping, "typesetters.breakpoints.mapping") local mapping = breakpoints.mapping local numbers = breakpoints.mapping for i=1,#mapping do local m = mapping[i] numbers[m.name] = m end local function insert_break(head,start,before,after) insert_node_before(head,start,new_penalty(before)) insert_node_before(head,start,new_glue(0)) insert_node_after(head,start,new_glue(0)) insert_node_after(head,start,new_penalty(after)) end methods[1] = function(head,start) if start.prev and start.next then insert_break(head,start,10000,0) end return head, start end methods[2] = function(head,start) -- ( => (- if start.prev and start.next then local tmp head, start, tmp = remove_node(head,start) head, start = insert_node_before(head,start,new_disc()) start.attr = copy_nodelist(tmp.attr) -- todo: critical only start.replace = tmp local tmp, hyphen = copy_node(tmp), copy_node(tmp) hyphen.char = languages.prehyphenchar(tmp.lang) tmp.next, hyphen.prev = hyphen, tmp start.post = tmp insert_break(head,start,10000,10000) end return head, start end methods[3] = function(head,start) -- ) => -) if start.prev and start.next then local tmp head, start, tmp = remove_node(head,start) head, start = insert_node_before(head,start,new_disc()) start.attr = copy_nodelist(tmp.attr) -- todo: critical only start.replace = tmp local tmp, hyphen = copy_node(tmp), copy_node(tmp) hyphen.char = languages.prehyphenchar(tmp.lang) tmp.prev, hyphen.next = hyphen, tmp start.pre = hyphen insert_break(head,start,10000,10000) end return head, start end methods[4] = function(head,start) -- - => - - - if start.prev and start.next then local tmp head, start, tmp = remove_node(head,start) head, start = insert_node_before(head,start,new_disc()) start.attr = copy_nodelist(tmp.attr) -- todo: critical only start.pre, start.post, start.replace = copy_node(tmp), copy_node(tmp), tmp insert_break(head,start,10000,10000) end return head, start end methods[5] = function(head,start,settings) -- x => p q r if start.prev and start.next then local tmp head, start, tmp = remove_node(head,start) head, start = insert_node_before(head,start,new_disc()) local attr = tmp.attr local font = tmp.font start.attr = copy_nodelist(attr) -- todo: critical only local left, right, middle = settings.left, settings.right, settings.middle if left then start.pre = tonodes(tostring(left),font,attr) -- was right end if right then start.post = tonodes(tostring(right),font,attr) -- was left end if middle then start.replace = tonodes(tostring(middle),font,attr) end free_node(tmp) insert_break(head,start,10000,10000) end return head, start end local function process(namespace,attribute,head) local done, numbers = false, languages.numbers local start, n = head, 0 while start do local id = start.id if id == glyph_code then local attr = start[a_breakpoints] if attr and attr > 0 then start[a_breakpoints] = unsetvalue -- maybe test for subtype > 256 (faster) -- look ahead and back n chars local data = mapping[attr] if data then local map = data.characters local cmap = map[start.char] if cmap then local lang = start.lang -- we do a sanity check for language local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""]) if smap then if n >= smap.nleft then local m = smap.nright local next = start.next while next do -- gamble on same attribute (not that important actually) local id = next.id if id == glyph_code then -- gamble on same attribute (not that important actually) if map[next.char] then break elseif m == 1 then local method = methods[smap.type] if method then head, start = method(head,start,smap) done = true end break else m = m - 1 next = next.next end elseif id == kern_code and next.subtype == kerning_code then next = next.next -- ignore intercharacter kerning, will go way else -- we can do clever and set n and jump ahead but ... not now break end end end n = 0 else n = n + 1 end else n = n + 1 end else n = 0 end else -- n = n + 1 -- if we want single char handling (|-|) then we will use grouping and then we need this end elseif id == kern_code and start.subtype == kerning_code then -- ignore intercharacter kerning, will go way else n = 0 end start = start.next end return head, done end local enabled = false function breakpoints.define(name) local data = numbers[name] if data then -- error else local number = #mapping + 1 local data = { name = name, number = number, characters = { }, } mapping[number] = data numbers[name] = data end end function breakpoints.setreplacement(name,char,language,settings) char = utfbyte(char) local data = numbers[name] if data then local characters = data.characters local cmap = characters[char] if not cmap then cmap = { } characters[char] = cmap end local left, right, middle = settings.left, settings.right, settings.middle cmap[language or ""] = { type = tonumber(settings.type) or 1, nleft = tonumber(settings.nleft) or 1, nright = tonumber(settings.nright) or 1, left = left ~= "" and left or nil, right = right ~= "" and right or nil, middle = middle ~= "" and middle or nil, } -- was { type or 1, before or 1, after or 1 } end end function breakpoints.set(n) if n == v_reset then n = unsetvalue else n = mapping[n] if not n then n = unsetvalue else if not enabled then if trace_breakpoints then report_breakpoints("enabling breakpoints handler") end tasks.enableaction("processors","typesetters.breakpoints.handler") end n = n.number end end texattribute[a_breakpoints] = n end breakpoints.handler = nodes.installattributehandler { name = "breakpoint", namespace = breakpoints, processor = process, } -- function breakpoints.enable() -- tasks.enableaction("processors","typesetters.breakpoints.handler") -- end -- interface commands.definebreakpoints = breakpoints.define commands.definebreakpoint = breakpoints.setreplacement commands.setbreakpoints = breakpoints.set context-2013.05.28.20130704/texmf-dist/tex/context/base/x-openmath.xsl0000644000175000017500000000173610527461760024520 0ustar norbertnorbert /x-openmath.xsl context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-blk.lua0000644000175000017500000001036712130411274024117 0ustar norbertnorbertif not modules then modules = { } end modules ['strc-blk'] = { version = 1.001, comment = "companion to strc-blk.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- this one runs on top of buffers and structure local type = type local find, format, validstring = string.find, string.format, string.valid local settings_to_set, settings_to_array = utilities.parsers.settings_to_set, utilities.parsers.settings_to_array local allocate = utilities.storage.allocate local structures, context = structures, context structures.blocks = structures.blocks or { } local blocks = structures.blocks local sections = structures.sections local lists = structures.lists local collected = allocate() local tobesaved = allocate() local states = allocate() blocks.collected = collected blocks.tobesaved = tobesaved blocks.states = states local function initializer() collected = blocks.collected tobesaved = blocks.tobesaved end job.register('structures.blocks.collected', tobesaved, initializer) local listitem = utilities.parsers.listitem function blocks.print(name,data,hide) if hide then context.dostarthiddenblock(name) else context.dostartnormalblock(name) end context.viafile(data,format("block.%s",validstring(name,"noname"))) if hide then context.dostophiddenblock() else context.dostopnormalblock() end end function blocks.define(name) states[name] = { all = "hide" } end function blocks.setstate(state,name,tag) local all = tag == "" local tags = not all and settings_to_array(tag) for n in listitem(name) do local sn = states[n] if not sn then -- error elseif all then sn.all = state else for _, tag in next, tags do sn[tag] = state end end end end function blocks.select(state,name,tag,criterium) criterium = criterium or "text" if find(tag,"=") then tag = "" end local names = settings_to_set(name) local all = tag == "" local tags = not all and settings_to_set(tag) local hide = state == "process" local n = sections.numberatdepth(criterium) local result = lists.filtercollected("all", criterium, n, collected, { }) for i=1,#result do local ri = result[i] local metadata = ri.metadata if names[metadata.name] then if all then blocks.print(name,ri.data,hide) else local mtags = metadata.tags for tag, sta in next, tags do if mtags[tag] then blocks.print(name,ri.data,hide) break end end end end end end function blocks.save(name,tag,buffer) -- wrong, not yet adapted local data = buffers.getcontent(buffer) local tags = settings_to_set(tag) local plus, minus = false, false if tags['+'] then plus = true tags['+'] = nil end if tags['-'] then minus = true tags['-'] = nil end tobesaved[#tobesaved+1] = { metadata = { name = name, tags = tags, plus = plus, minus = minus, }, references = { section = sections.currentid(), }, data = data or "error", } local allstate = states[name].all if not next(tags) then if allstate ~= "hide" then blocks.print(name,data) elseif plus then blocks.print(name,data,true) end else local sn = states[name] for tag, _ in next, tags do if sn[tag] == nil then if allstate ~= "hide" then blocks.print(name,data) break end elseif sn[tag] ~= "hide" then blocks.print(name,data) break end end end buffers.erase(buffer) end -- interface commands.definestructureblock = blocks.define commands.savestructureblock = blocks.save commands.selectstructureblock = blocks.select commands.setstructureblockstate = blocks.setstate context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-mar.mkiv0000644000175000017500000004135612130411274024335 0ustar norbertnorbert% macros=mkvi %D \module %D [ file=typo-mar, %D version=2010.02.15, % was experimental code %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Margindata, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % todo: tags \writestatus{loading}{ConTeXt Typesetting Macros / Margindata} \unprotect %D This module has been on the agenda for a while. Actually, it is %D one of the things that I really need myself, for instance when %D rendering rather unpredictable (educational) tests encoded in %D XML. This module permits anchoring for instance item numbers and %D also overload them when they have subnumbers. In the future it %D might replace the current maginal note mechanism (that then %D will be just an instance). %D %D In spite of what might be expected, the more advanced \LUA\ based %D variant is upto twice as fast on simple entries. Also, we no longer %D need an extra pass to get inner and outer alignments in sync with %D the pagebuilder. \registerctxluafile{typo-mar}{1.001} %definesystemattribute[margindata] % only at the lua end %D In \MKII\ we have three categories and their historically meaning %D is as follows: %D %D marginlines: These are flushed relative to the start of a line and %D need to be invoked there. %D %D marginwords: These can be issued in the text flow and will migrate %D sidewards; in spite of the name, it can be a paragraph of text as %D well, but normally it's words. %D %D margintexts: These can be set beforehand and are flushed at the %D next paragraph of text (of header). %D %D In \MKIV\ we have further integrated the mechanism and we now have: %D %D margindata: This can be anything that needs to go into the margin. %D It can be anchored in the text or given beforehand in which case %D it gets flushed at the first occasion. %D %D margintext: This runs on top of margindata and the only difference %D is that it uses the framed mechanism for packaging. %D %D Stacking is done differently as is inner and outer alignment (in %D most cases more efficient). The functionality is mostly the same %D as in \MKII, but there are a few additions, like names entries, %D where later ones overload preceding not yet flushed ones. Data can %D get catagorized and is then treated as a group (e.g. when stacking %D is needed). %D %D The amount of \TEX\ code is less than in \MKII\ because we do all %D trickery in at the \LUA\ end. At the end of this file we define %D several commands, like \type {\inleftmargin} and \type {\inleft}. %D You can configure them individually or as a group. There is an %D inheritance model in place. %D %D The following notes will be stacked: %D %D \starttyping %D \ininner[line=2]{IM A} %D \ininner[stack=yes]{IM B} %D \ininner[stack=yes]{IM C} %D \stoptyping %D %D The distance between them is determined by \type {dy}: %D %D \starttyping %D \ininner[stack=yes,dy=2ex][frame=on] {IM A} %D \ininner[stack=yes,dy=2ex][frame=on] {IM B} %D \stoptyping %D %D There are several methods of vertical alignment. %D %D \starttyping %D \inmargin [method=first] [frame=on] {first\\second} \input ward \par %D \inmargin [method=first] [frame=on,offset=3pt] {first\\second} \input ward \par %D \inmargin [method=first,voffset=-3pt][frame=on,offset=3pt,rulethickness=3pt] {first\\second} \input ward \par %D \inmargin [method=first,voffset=-6pt][frame=on,offset=3pt,rulethickness=3pt] {first\\second} \input ward \par %D \stoptyping %D %D You sometimes need to combine \type {voffset} with \type {offset}. The first %D argument concerns the data, the second the framed. Not sharing the setup is %D on purpose: location, offset, alignment and other parameters might clash. \installcorenamespace{margindata} \installcorenamespace{marginframed} \installcommandhandler \??margindata {margindata} \??margindata \installframedcommandhandler \??marginframed {marginframed} \??marginframed \setupmargindata [\c!location=\v!left, % \c!align=, % \c!method=, \c!style=\v!bold, \c!color=, % maybe \maintextcolor % \c!name=, % \c!category=, \c!threshold=.25ex, \c!margin=\v!normal, \c!scope=\v!global, \c!width=, % \c!stack=, \c!line=0, \c!anchor=\v!text, \c!bottomspace=\strutdepth, % slack used for keeptogether \c!dy=\zeropoint, \c!distance=\zeropoint, \c!hoffset=\zeropoint, \c!voffset=\zeropoint] \setupmarginframed % so, align should be set with the data command [\c!strut=\v!yes, \c!offset=\v!overlay, \c!fr!analyze=\v!yes, \c!frame=\v!off, \c!width=\margindataparameter\c!width, \c!align=\margindataparameter\c!align] \appendtoks \setuevalue\currentmargindata{\margindata[\currentmargindata]}% \to \everydefinemargindata \newconditional\inhibitmargindata % This one is used at the Lua end! \newtoks \everymargindatacontent % Later on we will set this one. \appendtoks \settrue\inhibitmargindata \to \everyforgetall \appendtoks \forgetall \tf \resetallattributes % \deactivatecolor % needed, but maybe we should switch to maintextcolor: \onlyinheritmaintextcolor \to \everymargindatacontent % trialtypesetting: no need for margin stuff while trialing as % is has no dimensions \definesystemconstant{margintext} \newcount\nofmargintexts \definepagestate[\s!margintext] \unexpanded\def\typo_margins_data_synchronize {\doforcedtrackpagestate\s!margintext\nofmargintexts % includes increment \docheckpagestate\s!margintext\nofmargintexts %\doifrightpagestateelse\s!margintext\nofmargintexts\relax\relax \realpageno\realpagestateno \swapmargins} \unexpanded\def\margindata {\iftrialtypesetting \expandafter\typo_margins_data_nop \else \expandafter\typo_margins_data_yes \fi} \def\typo_margins_data_nop[#name]% {\dodoubleempty\typo_margins_data_nop_indeed} \def\typo_margins_data_yes[#name]% {\setfalse\inhibitmargindata % flushing afterwards \begingroup %\settrue\inhibitmargindata % no flushing in here \def\currentmargindata{#name}% \let\currentmarginframed\currentmargindata \dodoubleempty\typo_margins_data_yes_indeed} \unexpanded\def\typo_margins_data_nop_indeed[#dataparameters][#textparameters]#content% {} \unexpanded\def\typo_margins_data_yes_indeed[#dataparameters][#textparameters]#content% {\iffirstargument \setupcurrentmargindata[#dataparameters]% \fi \doifelsenothing{#content}\donefalse\donetrue \ifdone \edef\currentmarginreference{\margindataparameter\c!reference}% \ifx\currentmarginreference\empty \else \strc_references_set_page_only_destination_box_attribute\currentmarginreference\currentmarginreference \fi \edef\currentmargindatastrut{\margindataparameter\c!strut}% \dostarttagged\t!margintext\currentmargindata \ifcsname\currentmarginframedhash\s!parent\endcsname \setbox\nextbox\hbox \currentmarginreference \bgroup \the\everymargindatacontent \usemargindatastyleandcolor\c!style\c!color \setupcurrentmarginframed[\c!location=\v!normal,#textparameters]% \typo_margins_data_synchronize \inheritedmarginframedframed\bgroup \ifx\currentmargindatastrut\empty \else \synchronizestrut\currentmargindatastrut \fi \begstrut \strc_references_flush_destination_nodes \margindataparameter\c!command{#content}% \endstrut \egroup \egroup \edef\currentmarginfirstheight{\number\dimexpr\framedfirstheight}% \else \edef\currentmargindatawidth{\margindataparameter\c!width}% \ifx\currentmargindatawidth\empty \setbox\nextbox\hbox \currentmarginreference \bgroup \typo_margins_data_synchronize \the\everymargindatacontent \usemargindatastyleandcolor\c!style\c!color \ifx\currentmargindatastrut\empty \else \synchronizestrut\currentmargindatastrut \fi \begstrut \strc_references_flush_destination_nodes \margindataparameter\c!command{#content}% \endstrut \egroup \let\currentmarginfirstheight\empty \else \setbox\nextbox\hbox \currentmarginreference \bgroup \typo_margins_data_synchronize \dosetraggedcommand{\margindataparameter\c!align}% \vtop \bgroup \the\everymargindatacontent \usemargindatastyleandcolor\c!style\c!color \hsize\currentmargindatawidth \raggedcommand \ifx\currentmargindatastrut\empty \else \synchronizestrut\currentmargindatastrut \fi \begstrut \strc_references_flush_destination_nodes \margindataparameter\c!command{#content}% \endstrut \egroup \egroup \edef\currentmarginfirstheight{true}% \fi \fi \dostoptagged \fi \ifdone \anch_positions_initialize % we use positions at the lua end \ctxlua{typesetters.margins.save{ location = "\margindataparameter\c!location", method = "\margindataparameter\c!method", category = "\margindataparameter\c!category", name = "\margindataparameter\c!name", margin = "\margindataparameter\c!margin", % local normal margin edge distance = \number\dimexpr\margindataparameter\c!distance, hoffset = \number\dimexpr\margindataparameter\c!hoffset, voffset = \number\dimexpr\margindataparameter\c!voffset, dy = \number\dimexpr\margindataparameter\c!dy, bottomspace = \number\dimexpr\margindataparameter\c!bottomspace, \ifx\currentmarginfirstheight\empty \else baseline = \currentmarginfirstheight, \fi threshold = \number\dimexpr\margindataparameter\c!threshold, % overlap related, will change \ifhmode inline = true, \fi anchor = "\margindataparameter\c!anchor", % % we're not in forgetall % % \ifzeropt\leftskip \else % leftskip = \number\leftskip, % \fi % \ifzeropt\leftskip \else % rightskip = \number\rightskip, % \fi scope = "\margindataparameter\c!scope", align = "\margindataparameter\c!align", line = \number\margindataparameter\c!line, stack = "\margindataparameter\c!stack", number = \number\nextbox, }}% \else \ctxlua{typesetters.margins.save{ location = "\margindataparameter\c!location", method = "\margindataparameter\c!method", category = "\margindataparameter\c!category", name = "\margindataparameter\c!name", scope = "\margindataparameter\c!scope", number = \number\nextbox, }}% \fi \endgroup} %D Downward compatible hack: \unexpanded\def\spaceorpar {\endgraf\ifhmode\space\fi} \appendtoks \let\\\spaceorpar \to \everymargindatacontent %D Another one: % \installcorenamespace{oppositemargin} % % \letvalue{\??oppositemargin\v!left }\v!right % \letvalue{\??oppositemargin\v!right }\v!left % \letvalue{\??oppositemargin\v!inner }\v!outer % \letvalue{\??oppositemargin\v!outer }\v!inner % \letvalue{\??oppositemargin\v!normal}\v!normal % % \def\oppositemargin#1% % {\csname\??oppositemargin\ifcsname\??oppositemargin#1\endcsname#1\else\v!normal\fi\endcsname} %D Definitions: % common to lines and text \setupmargindata [\v!left ] [\c!method=\v!first,\c!location=\v!left ,\c!margin=\v!margin,\c!align=\v!flushright,\s!parent=\??margindata] % we could autoparent when no define yet \setupmargindata [\v!right] [\c!method=\v!first,\c!location=\v!right,\c!margin=\v!margin,\c!align=\v!flushleft, \s!parent=\??margindata] \setupmargindata [\v!outer] [\c!method=\v!first,\c!location=\v!outer,\c!margin=\v!margin,\c!align=\v!inner, \s!parent=\??margindata] \setupmargindata [\v!inner] [\c!method=\v!first,\c!location=\v!inner,\c!margin=\v!margin,\c!align=\v!outer, \s!parent=\??margindata] % lines \definemargindata [inleftmargin] [\v!left ] [\c!margin=\v!margin,\c!width=\leftmarginwidth ,\c!style=,\c!color=] \definemargindata [inrightmargin] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!style=,\c!color=] \definemargindata [inoutermargin] [\v!outer] [\c!margin=\v!margin,\c!width=\outermarginwidth,\c!style=,\c!color=] \definemargindata [ininnermargin] [\v!inner] [\c!margin=\v!margin,\c!width=\innermarginwidth,\c!style=,\c!color=] \definemargindata [inleftedge] [\v!left ] [\c!margin=\v!edge ,\c!width=\leftedgewidth ,\c!style=,\c!color=,\c!category=\v!edge] \definemargindata [inrightedge] [\v!right] [\c!margin=\v!edge ,\c!width=\rightedgewidth ,\c!style=,\c!color=,\c!category=\v!edge] \definemargindata [inouteredge] [\v!outer] [\c!margin=\v!edge ,\c!width=\outeredgewidth ,\c!style=,\c!color=,\c!category=\v!edge] \definemargindata [ininneredge] [\v!inner] [\c!margin=\v!edge ,\c!width=\inneredgewidth ,\c!style=,\c!color=,\c!category=\v!edge] \definemargindata [atleftmargin] [\v!left ] [\c!margin=\v!normal,\c!width=\leftmarginwidth ,\c!style=,\c!color=] \definemargindata [atrightmargin] [\v!right] [\c!margin=\v!normal,\c!width=\rightmarginwidth,\c!style=,\c!color=] % text \definemargindata [inleft] [\v!left ] [\c!margin=\v!margin,\c!width=\leftmarginwidth ,\c!align=\v!flushright] \definemargindata [inright] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!align=\v!flushleft] \definemargindata [inouter] [\v!outer] [\c!margin=\v!margin,\c!width=\outermarginwidth,\c!align=\v!inner] \definemargindata [ininner] [\v!inner] [\c!margin=\v!margin,\c!width=\innermarginwidth,\c!align=\v!outer] % no longer auto auto-other \definemargindata [inmargin] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright] \definemargindata [inother] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!align=\v!flushleft] \definemargindata [margintext] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright,\c!stack=\v!yes] \setupmarginframed [\v!left ] [\c!method=\v!first,\c!align=\v!flushright,\s!parent=\??marginframed] % we could autoparent when no define yet \setupmarginframed [\v!right] [\c!method=\v!first,\c!align=\v!flushleft, \s!parent=\??marginframed] \setupmarginframed [\v!outer] [\c!method=\v!first,\c!align=\v!inner, \s!parent=\??marginframed] \setupmarginframed [\v!inner] [\c!method=\v!first,\c!align=\v!outer, \s!parent=\??marginframed] \definemarginframed [inleft] [\v!left ] \definemarginframed [inright] [\v!right] \definemarginframed [inouter] [\v!outer] \definemarginframed [ininner] [\v!inner] \definemarginframed [inmargin] [\v!inleft] \definemarginframed [inother] [\v!inright] \let\marginword \margintext \let\margintitle \margintext \let\inothermargin\inother % for old times sake %definemargindata [inouterextra] [\v!outer] [\c!margin=\v!edge,\c!location=\v!outer,\c!width=\outeredgewidth,\c!align=\v!outer,\c!category=\v!edge] %definemargindata [ininnerextra] [\v!inner] [\c!margin=\v!edge,\c!location=\v!inner,\c!width=\inneredgewidth,\c!align=\v!inner,\c!category=\v!edge] % %definemarginframed [inouterextra] [\v!outer] %definemarginframed [ininnerextra] [\v!inner] %D As we have more control we are not backward compatible although in %D practice it won't hurt that much. So, from now on use: %D %D \starttyping %D \definemargindata %D \setupmargindata %D \definemarginframed %D \setupmarginframed %D \stoptyping % The following sort of works okay but is to be avoided: \let\definemarginline\definemargindata \unexpanded\def\defineinmargin {\doquadrupleempty\typo_inmargin_define} \def\typo_inmargin_define[#name][#location][#align][#settings]% not completely compatible {\definemargindata[#name][\c!location=#location,\c!align=#align,#settings]% \definemarginframed[#name][#location][\c!align=#align,#settings]} \let\setupinmargin\setupmargindata % only partial (no framed) % begin of experimental code (will move) % % \dosetanchor{x}test \dostarthanchoring{x}\llap{crap}\dostophanchoring{x}test test test % test \dostarthanchoring{text}\llap{crap}\dostophanchoring{text}test test test % \def\dosetanchor #1{\dontleavehmode\latelua{anchors.set("#1")}} % \def\doresetanchor #1{\dontleavehmode\latelua{anchors.reset("#1")}} % \def\doresetanchornow #1{\directlua{anchors.reset("#1")}} % \def\dostartanchoring #1{\dontleavehmode\latelua{anchors.startmove("#1")}} % \def\dostopanchoring #1{\dontleavehmode\latelua{anchors.stopmove("#1")}} % \def\dostarthanchoring#1{\dontleavehmode\latelua{anchors.startmove("#1","h")}} % \def\dostartvanchoring#1{\dontleavehmode\latelua{anchors.startmove("#1","v")}} % \let\dostophanchoring \dostopanchoring % \let\dostopvanchoring \dostopanchoring \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-itm.mkiv0000644000175000017500000002055612130411274024346 0ustar norbertnorbert%D \module %D [ file=typo-itm, % comes from core-mis %D version=2012.06.28, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Item Lists, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Macros / Item Lists} \unprotect %D This is a real old mechanism that we once used for questionaries. As it is documented %D we keep it around. A more modern implementation would probably use another approach %D but I don't want to spend too much time on it now. There are a couple of changes: %D %D \startitemize %D \startitem textwidth sets the combined width \stopitem %D \startitem width sets the symbolwidth \stopitem %D \startitem alternative is used instead of location \stopitem %D \stopitemize %D %D \startbuffer %D \items[alternative=left]{a,b,c} %D \items[alternative=left,align=middle,textalign=flushright,distance=1em]{a,b,c} %D \items[alternative=right]{a,b,c} %D \items[alternative=inmargin]{a,b,c} %D \items[alternative=top]{a,b,c} %D \items[alternative=bottom]{a,b,c} %D \items[alternative=bottom,align=flushleft,textstyle=bold,color=red,textcolor=green]{a,b,c} %D \stopbuffer %D %D \typebuffer %D %D This renders as: %D %D \getbuffer \installcorenamespace{items} \installcorenamespace{itemsalternatives} \installcorenamespace{itemshorizontal} \installcorenamespace{itemsvertical} \installcommandhandler \??items {items} \??items \setupitems [\c!alternative=\v!left, \c!symbol=5, \c!textwidth=\availablehsize, \c!align=\v!middle, \c!textalign=\v!flushleft, \c!distance=\zeropoint, %\c!n=, \c!before=\blank, \c!inbetween={\blank[\v!medium]}, \c!after=\blank] \unexpanded\def\items {\dosingleempty\typo_items_process} \newcount\c_typo_items_n \newcount\c_typo_items_m \newdimen\d_typo_items_text_width \newdimen\d_typo_items_symbol_width \newdimen\d_typo_items_distance \newbox \b_typo_items_symbols \newbox \b_typo_items_texts \def\typo_items_process[#1]#2% {\bgroup \setupitems[#1]% \edef\p_typo_items_alternative{\itemsparameter\c!alternative}% \ifcsname\??itemsalternatives\p_typo_items_alternative\endcsname \else \let\p_typo_items_alternative\v!left \fi \let\currentitems\p_typo_items_alternative \setupcurrentitems[#1]% % \edef\p_typo_items_textwidth{\itemsparameter\c!textwidth}% \ifx\p_typo_items_textwidth\empty \d_typo_items_text_width\availablehsize \else \d_typo_items_text_width\p_typo_items_textwidth\relax \fi % \edef\p_typo_items_width{\itemsparameter\c!width}% \ifx\p_typo_items_width\empty \d_typo_items_symbol_width1.5\emwidth \else \d_typo_items_symbol_width\p_typo_items_width\relax \fi % \edef\p_typo_items_distance{\itemsparameter\c!distance}% \ifx\p_typo_items_distance\empty \d_typo_items_distance\zeropoint \else \d_typo_items_distance\p_typo_items_distance\relax \fi % \edef\p_typo_items_symbol{\itemsparameter\c!symbol}% \ifx\p_typo_items_symbol\empty \let\m_typo_items_symbol\firstofoneargument \else\ifx\p_typo_items_symbol\v!none \let\p_typo_items_symbol\empty \let\m_typo_items_symbol\firstofoneargument \else \doifconversiondefinedelse\p_typo_items_symbol {\def\m_typo_items_symbol{\convertnumber\p_typo_items_symbol}} {\doifsymboldefinedelse\p_typo_items_symbol {\def\m_typo_items_symbol{\symbol[\p_typo_items_symbol]\gobbleoneargument}} {\let\m_typo_items_symbol\firstofoneargument}}% \fi\fi % \edef\p_typo_items_align{\itemsparameter\c!align}% \edef\p_typo_items_textalign{\itemsparameter\c!textalign}% % \edef\p_typo_items_n{\itemsparameter\c!n}% \ifx\p_typo_items_n\empty \getcommalistsize[#2]% \c_typo_items_n\commalistsize\relax \else \c_typo_items_n\p_typo_items_n\relax \fi % \parindent\zeropoint \dontcomplain % \itemsparameter\c!before \csname\??itemsalternatives\p_typo_items_alternative\endcsname{#2}% \itemsparameter\c!after \egroup} % rendering \setvalue{\??itemshorizontal\v!margin}#1% {\ifnum\c_typo_items_m=\plusone\hss\else\hfill\fi \strut#1% \ifnum\c_typo_items_m=\c_typo_items_n\hss\else\hfill\fi} \setvalue{\??itemshorizontal\s!unknown}% {\simplealignedbox\scratchwidth\m_typo_items_align} \def\typo_items_item_horizontal {\advance\c_typo_items_m\plusone \csname\??itemshorizontal \ifcsname\??itemshorizontal\p_typo_items_align\endcsname \p_typo_items_align \else \s!unknown \fi \endcsname} \setvalue{\??itemsvertical\s!unknown}% {\simplealignedbox\scratchwidth\m_typo_items_align} \def\typo_items_item_vertical {\advance\c_typo_items_m\plusone \csname\??itemsvertical \ifcsname\??itemsvertical\p_typo_items_align\endcsname \p_typo_items_align \else \s!unknown \fi \endcsname} \def\typo_items_make_horizontal#1% {\divide\scratchwidth\c_typo_items_n \hbox{#1}} \def\typo_items_make_vertical#1% {\vbox{#1}} \def\typo_items_construct_items_boxes#1% {\setbox\b_typo_items_texts\hbox {\c_typo_items_m\zerocount \let\m_typo_items_align\p_typo_items_textalign \scratchwidth\d_typo_items_text_width \useitemsstyleandcolor\c!textstyle\c!textcolor \typo_items_make{\processcommalist[#1]\typo_items_item}}% \ifx\p_typo_items_symbol\empty \setbox\b_typo_items_symbols\emptyhbox \else \setbox\b_typo_items_symbols\hbox {\c_typo_items_m\zerocount \let\m_typo_items_align\p_typo_items_align \scratchwidth\d_typo_items_symbol_width \useitemsstyleandcolor\c!style\c!color \typo_items_make{\dorecurse\c_typo_items_n{\typo_items_item{\strut\m_typo_items_symbol\recurselevel}}}}% \fi} % alternatives: \defineitems[\v!top][\c!width=\d_typo_items_text_width,\c!textalign=\itemsparameter\c!align] \setvalue{\??itemsalternatives\v!top}#1% {\let\typo_items_make\typo_items_make_horizontal \let\typo_items_item\typo_items_item_horizontal \typo_items_construct_items_boxes{#1}% \noindent\vbox\bgroup \forgetall \ifvoid\b_typo_items_symbols \else \box\b_typo_items_symbols \itemsparameter\c!inbetween \nointerlineskip \fi \box\b_typo_items_texts\ \egroup} \defineitems[\v!bottom][\c!width=\d_typo_items_text_width,\c!textalign=\itemsparameter\c!align] \setvalue{\??itemsalternatives\v!bottom}#1% {\let\typo_items_make\typo_items_make_horizontal \let\typo_items_item\typo_items_item_horizontal \typo_items_construct_items_boxes{#1}% \noindent\vbox\bgroup \forgetall \box\b_typo_items_texts \ifvoid\b_typo_items_symbols \else \itemsparameter\c!inbetween \nointerlineskip \box\b_typo_items_symbols \fi \egroup} \defineitems[\v!inmargin][\c!width=1.5\emwidth,\c!align=\v!flushright,\c!distance=\leftmargindistance] \setvalue{\??itemsalternatives\v!inmargin}#1% {\let\typo_items_make\typo_items_make_vertical \let\typo_items_item\typo_items_item_vertical \typo_items_construct_items_boxes{#1}% \noindent\hbox\bgroup \ifvoid\b_typo_items_symbols \else \llap{\box\b_typo_items_symbols\hskip\d_typo_items_distance}% \fi \box\b_typo_items_texts \egroup} \defineitems[\v!left][\c!width=1.5\emwidth,\c!align=\v!flushleft] \setvalue{\??itemsalternatives\v!left}#1% {\let\typo_items_make\typo_items_make_vertical \let\typo_items_item\typo_items_item_vertical \advance\d_typo_items_text_width-\dimexpr\d_typo_items_symbol_width+\d_typo_items_distance\relax \typo_items_construct_items_boxes{#1}% \noindent\hbox\bgroup \ifvoid\b_typo_items_symbols \else \box\b_typo_items_symbols \kern\d_typo_items_distance \fi \box\b_typo_items_texts \egroup} \defineitems[\v!right][\c!width=1.5\emwidth,\c!align=\v!flushright] \setvalue{\??itemsalternatives\v!right}#1% {\let\typo_items_make\typo_items_make_vertical \let\typo_items_item\typo_items_item_vertical \advance\d_typo_items_text_width-\dimexpr\d_typo_items_symbol_width+\d_typo_items_distance\relax \typo_items_construct_items_boxes{#1}% \noindent\hbox\bgroup \box\b_typo_items_texts \ifvoid\b_typo_items_symbols \else \kern\d_typo_items_distance \box\b_typo_items_symbols \fi \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-run.mkiv0000644000175000017500000002016212130411274024313 0ustar norbertnorbert%D \module %D [ file=colo-run, %D version=1997.04.01, %D title=\CONTEXT\ Color Macros, %D subtitle=Runtime loaded commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \registerctxluafile{colo-run}{1.000} \unprotect %D Colors % These are nicer in \LUA\ code than in \TEX\ code but not more % efficient. \unexpanded\gdef\showcolorbar[#1]% {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}} \unexpanded\gdef\showcolor {\dosingleempty\colo_basics_show} \unexpanded\gdef\showcolorset {\dosingleempty\colo_basics_show_set} \unexpanded\gdef\showcolorcomponents{\dosingleempty\colo_basics_show_components} \gdef\colo_basics_show_set [#1]{\ctxcommand{showcolorset("#1")}} \gdef\colo_basics_show_components[#1]{\ctxcommand{showcolorcomponents("#1")}} \gdef\colo_basics_show[#1]% % we do this at the tex end as loading happens {\usecolors [#1]% % delayed and we can only ask for the set if \showcolorset[#1]} % loading has happened % The rest might also be done in \LUA\ although there is not much % beauty to gain here (too much typesetting specific). Also, these % macros are pretty old and hardly used so best keep them as they % are. %D Palets \unexpanded\gdef\showpalet {\dodoubleargument\colo_show_palet} \gdef\colo_show_palet[#1][#2]% {\ifcsname\??colorpalet#1\endcsname \doifinsetelse\v!vertical{#2} \colo_palets_show_vertical \colo_palets_show_horizontal [#1][#2]% \fi} \gdef\colo_palets_show_vertical[#1][#2]% {\vbox {\forgetall \setlocalhsize \hsize\localhsize \offinterlineskip \setuppalet[#1] \tabskip\zeropoint \def\colo_palets_show_palet##1% {\doifinsetelse\v!number{#2}{##1\hskip.5em}{}& \color[##1]{\vrule\s!width3em\s!height\strutht\s!depth\strutdp}% \graycolor[##1]{\vrule\s!width3em\s!height\strutht\s!depth\strutdp}& \doifinset\v!value{#2}{\hskip.5em\colorvalue{##1}}\crcr} \halign {\hss##&\hss##\hss&##\cr &\doifinset\v!name{#2}{\strut#1}&\cr% \colo_palets_process[#1]\colo_palets_show_palet\crcr}}} \gdef\colo_palets_show_horizontal[#1][#2]% todo: bTABLE etc {\vbox {\forgetall \setlocalhsize \hsize\localhsize \offinterlineskip \setuppalet[#1] \tabskip\zeropoint \!!widtha\zeropoint \doifinset\v!number{#2} {\def\colo_palets_show_palet##1% {\setbox0\hbox{##1}% \ifdim\!!widtha<\wd0\!!widtha\wd0\fi}% \colo_palets_process[#1]\colo_palets_show_palet}% \advance\!!widtha 1em \ifdim\!!widtha<5em \!!widtha5em \fi \halign {##&&\hbox to \!!widtha{\hss##\hss}\cr \doifinset\v!number{#2} {\def\colo_palets_show_palet##1{&\strut##1}% \colo_palets_process[#1]\colo_palets_show_palet}\cr \doifinset\v!name{#2}{#1\hskip.5em}% \def\colo_palets_show_palet##1% {&\strut\color[##1]{\vrule\s!width\!!widtha\s!height\strutht\s!depth\zeropoint}}% \colo_palets_process[#1]\colo_palets_show_palet\crcr \noalign{\vskip-\strutdepth}% \def\colo_palets_show_palet##1% {&\graycolor[##1]{\vrule\s!width\!!widtha\s!height\zeropoint\s!depth\strutdp}}% \colo_palets_process[#1]\colo_palets_show_palet\crcr \doifinset\v!value{#2} {\def\colo_palets_show_palet##1% {&\vbox {\hsize\!!widtha \vskip.25ex \everypar{\strut} \veryraggedcenter \let\colorformatseparator\endgraf \colorvalue{##1}}}% \colo_palets_process[#1]\colo_palets_show_palet}% \crcr}}} \gdef\colo_palets_process[#1]% {\expanded{\globalprocesscommalist[\getvalue{\??colorpalet#1}]}} \unexpanded\gdef\comparepalet {\dosingleargument\colo_palets_compare} \gdef\colo_palets_compare[#1]% {\ifcsname\??colorpalet#1\endcsname \hbox {\colo_palets_compare_indeed\color[#1]% \quad \colo_palets_compare_indeed\graycolor[#1]}% \fi} \gdef\colo_palets_compare_indeed#1[#2]% {\vbox {\forgetall \setlocalhsize \hsize\localhsize \offinterlineskip \setuppalet[#2] \getcommacommandsize[\getvalue{\??colorpalet#2}] \!!widtha2em\relax \hsize\commalistsize\!!widtha \def\colo_palets_compare##1% {\hbox {\setbox0\hbox {#1[##1]{\vrule\s!width\hsize\s!height3ex}}% \wd0\zeropoint \box0 \hbox to \hsize {\def\colo_palets_compare####1% {\hbox to \!!widtha {\hss#1[####1]{\vrule\s!width.5\!!widtha\s!height2.25ex\s!depth-.75ex}\hss}}% \processcommacommand[\getvalue{\??colorpalet#2}]\colo_palets_compare}} \endgraf} \processcommacommand[\getvalue{\??colorpalet#2}]\colo_palets_compare}} %D Groups \unexpanded\gdef\showcolorgroup {\dodoubleargument\colo_groups_show} \gdef\colo_groups_show[#1][#2]% {\doifcolor{#1:1} {\doifinsetelse\v!vertical{#2} \colo_groups_show_vertical \colo_groups_show_horizontal [#1][#2]}} \gdef\colo_groups_show_horizontal[#1][#2]% {\vbox {\forgetall \setlocalhsize \hsize\localhsize \offinterlineskip \setuppalet \tabskip\zeropoint \def\colorformatseparator{\strut\cr} \def\colo_groups_show_group##1% {\doifcolor{#1:##1}{\vbox {\halign {\hss####\hss\cr \doifinset\v!number{#2}{\strut##1}\cr \color[#1:##1]{\vrule\s!width4em\s!height\strutht\s!depth\zeropoint}\cr \graycolor[#1:##1]{\vrule\s!width4em\s!height\zeropoint\s!depth\strutdp}\cr \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}}}% \hbox {\doifinset\v!name{#2} {\strut \doifinsetelse\v!value{#2} {\raise3\lineheight\hbox{#1\hskip.5em}} {#1}% \hskip.5em}% \colo_groups_show_group1\colo_groups_show_group2\colo_groups_show_group3\colo_groups_show_group4% \colo_groups_show_group5\colo_groups_show_group6\colo_groups_show_group7\colo_groups_show_group8}}} \gdef\colo_groups_show_vertical[#1][#2]% {\vbox {\forgetall \setlocalhsize \hsize\localhsize \offinterlineskip \setuppalet \tabskip\zeropoint \def\colo_groups_show_group##1% {\doifcolor{#1:##1} {\doifinset\v!number{#2}{##1\hskip.5em}& \color[#1:##1]{\vrule\s!width2.5em\s!height\strutht\s!depth\strutdp}% \graycolor[#1:##1]{\vrule\s!width2.5em\s!height\strutht\s!depth\strutdp}& \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}% \halign {\hss##&\hss##\hss&##\hss\cr &\doifinset\v!name{#2}{\strut#1}&\crcr \colo_groups_show_group1\colo_groups_show_group2\colo_groups_show_group3\colo_groups_show_group4% \colo_groups_show_group5\colo_groups_show_group6\colo_groups_show_group7\colo_groups_show_group8}}} \unexpanded\gdef\comparecolorgroup {\dosingleargument\colo_groups_compare} \gdef\colo_groups_compare[#1]% {\doifcolor{#1:1} {\hbox {\colo_groups_compare_indeed\color[#1]% \quad \colo_groups_compare_indeed\graycolor[#1]}}} \gdef\colo_groups_compare_indeed#1[#2]% {\vbox {\forgetall \setlocalhsize \hsize\localhsize \!!counta\zerocount \dorecurse{15}{\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}} \!!widtha2em\relax \hsize\!!counta\!!widtha \dorecurse\!!counta{\colo_groups_compare_step{#1}{#2}\recurselevel}}} \def\colo_groups_compare_step#1#2#3% {\hbox to \hsize {\setbox0\hbox {#1[#2:#3]{\vrule\s!width\hsize\s!height3ex}}% \wd0\zeropoint \box0 \hbox to \hsize {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\vrule\s!width.5\!!widtha\s!height2.25ex\s!depth-.75ex}\hss}}} \endgraf} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-informal.mkiv0000644000175000017500000000366511754241457026156 0ustar norbertnorbert%D \module %D [ file=type-buy, %D version=2003.07.08, % 2001.04.12, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Informal by M. Vulis, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[informal] \starttypescript [casual] [informal] \definefontsynonym [Serif] [Informal-Regular] \definefontsynonym [SerifBold] [Informal-Bold] \definefontsynonym [SerifSlanted] [Informal-Oblique] \definefontsynonym [SerifItalic] [Informal-Oblique] \definefontsynonym [SerifBoldSlanted] [Informal-BoldOblique] \definefontsynonym [SerifBoldItalic] [Informal-BoldOblique] \definefontsynonym [SerifCaps] [Informal-Regular] \stoptypescript \starttypescript [math] [informal] [name] \definefontsynonym [MathRoman] [Informal-Regular] \definefontsynonym [MathExtension] [Informal-MathExtendedSymbols] \definefontsynonym [MathItalic] [Informal-MathItalics] \definefontsynonym [MathSymbol] [Informal-MathSymbols] \stoptypescript \starttypescript [casual] [informal] \definefontsynonym [Informal-Regular] [file:ifrg] \definefontsynonym [Informal-Bold] [file:ifb] \definefontsynonym [Informal-Oblique] [file:ifo] \definefontsynonym [Informal-BoldOblique] [file:ifbo] \stoptypescript \starttypescript [math] [informal] [name] \loadfontgoodies[informal-math] \definefontsynonym[MathRoman][informalmath@informal-math] \stoptypescript \starttypescript [informal] \definetypeface[informal][rm][casual][informal][default] \definetypeface[informal][tt][mono] [modern] [default][rscale=0.95] \definetypeface[informal][mm][math] [informal][default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-pag.mkiv0000644000175000017500000004236112130411274024302 0ustar norbertnorbert%D \module %D [ file=strc-pag, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Pagenumbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Pagenumbering} \registerctxluafile{strc-pag}{1.001} \unprotect % Allocation: \countdef\realpageno \zerocount \realpageno \plusone \countdef\userpageno \plusone \userpageno \plusone \countdef\subpageno \plustwo \subpageno \zerocount % ! \countdef\arrangeno \plusthree \arrangeno \zerocount % ! \countdef\pagenoshift\plusfour \pagenoshift\zerocount % ! \let\pageno\userpageno \def\realfolio{\the\realpageno} \def\userfolio{\the\userpageno} \def\subfolio {\the\subpageno } \newtoks\everyinitializepagecounters \unexpanded\def\initializepagecounters {\the\everyinitializepagecounters} \appendtoks \initializepagecounters \to \everyjob % Page numbers are kind of independent of each other and therefore they % all get their own counter. After all, it's easier to combine them in % a pseudo counterset than to deal with a complex set itself. % \defineprefixset [mine][section-1,section-2] % \defineseparatorset[mine][:] % % \setupuserpagenumber % [way=bypart, % prefix=yes, % prefixset=mine, % prefixseparatorset=mine] % \defineconversionset[frontpart:pagenumber][][romannumerals] % \defineconversionset[bodypart:pagenumber] [][numbers] % % \setupuserpagenumber[way=byblock] % \setupuserpagenumber[way=bychapter] % \setupuserpagenumber[numberconversionset=pagenumber] % % \starttext % \startfrontmatter % \completecontent[criterium=all] % \chapter{tufte} \section{one} \input tufte \page \section{two} \input tufte \page % \chapter{tufte} \section{one} \input tufte \page \section{two} \input tufte \page % \stopfrontmatter % \startbodymatter % \chapter{knuth} \section{one} \input knuth \page \section{two} \input knuth \page \section{three} \input knuth \page % \chapter{knuth} \section{one} \input knuth \page \section{two} \input knuth \page \section{three} \input knuth \page % \stopbodymatter % \stoptext \definecounter[\s!realpage][\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=realpageno,\c!method=\v!page] \definecounter[\s!userpage][\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=userpageno,\c!method=\v!page] \definecounter[\s!subpage] [\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=subpageno, \c!method=\v!page] \newtoks\everysetuprealpagenumber % todo: set state: none, start, stop, reset \newtoks\everysetupuserpagenumber % todo: set state: none, start, stop, reset \newtoks\everysetupsubpagenumber % todo: set state: none, start, stop, reset \unexpanded\def\setuprealpagenumber{\dosingleargument\strc_pagenumbers_setup_realpage} \unexpanded\def\setupuserpagenumber{\dosingleargument\strc_pagenumbers_setup_userpage} \unexpanded\def\setupsubpagenumber {\dosingleargument\strc_pagenumbers_setup_subpage } \let\m_strc_pagenumbers_state_old\zerocount \let\m_strc_pagenumbers_state_new\zerocount \def\strc_pagenumbers_save_state#1{\edef\m_strc_pagenumbers_state_old{\namedcounterparameter#1\c!state}} \def\strc_pagenumbers_setup_realpage[#1]{\strc_pagenumbers_save_state\s!realpage\setupcounter[\s!realpage][#1]\the\everysetuprealpagenumber} \def\strc_pagenumbers_setup_userpage[#1]{\strc_pagenumbers_save_state\s!userpage\setupcounter[\s!userpage][#1]\the\everysetupuserpagenumber} \def\strc_pagenumbers_setup_subpage [#1]{\strc_pagenumbers_save_state\s!subpage \setupcounter[\s!subpage ][#1]\the\everysetupsubpagenumber } \unexpanded\def\resetrealpagenumber {} % not permitted \unexpanded\def\resetuserpagenumber {\strc_counters_reset\s!userpage} \unexpanded\def\resetsubpagenumber {\strc_counters_reset\s!subpage} \appendtoks \strc_counters_set\s!realpage\realpageno \strc_counters_set\s!userpage\userpageno \strc_counters_set\s!subpage \subpageno \to \everyinitializepagecounters \let\setuppagenumber\setupuserpagenumber \let\resetpagenumber\resetuserpagenumber \def\strc_pagenumbers_page_state_save % \normalexpanded? {\ctxlua{structures.pages.save({ prefix = "\namedcounterparameter\s!userpage\c!prefix", separatorset = "\namedcounterparameter\s!userpage\c!prefixseparatorset", conversion = "\namedcounterparameter\s!userpage\c!prefixconversion", conversionset = "\namedcounterparameter\s!userpage\c!prefixconversionset", set = "\namedcounterparameter\s!userpage\c!prefixset", segments = "\namedcounterparameter\s!userpage\c!prefixsegments", connector = \!!bs\namedcounterparameter\s!userpage\c!prefixconnector\!!es, },{ conversion = "\namedcounterparameter\s!userpage\c!numberconversion", conversionset = "\namedcounterparameter\s!userpage\c!numberconversionset", starter = \!!bs\namedcounterparameter\s!userpage\c!numberstarter\!!es, stopper = \!!bs\namedcounterparameter\s!userpage\c!numberstopper\!!es, } )}} \prependtoks \strc_pagenumbers_page_state_save \to \everyshipout \installcorenamespace{pagestatestack} % no level yet \unexpanded\def\strc_pagenumbers_page_state_push{\setxvalue{\??pagestatestack\c!state}{\namedcounterparameter\s!userpage\c!state}} \unexpanded\def\strc_pagenumbers_page_state_pop {\normalexpanded{\setuppagenumber[\c!state=\getvalue{\??pagestatestack\c!state}]}} \setuppagenumber [\c!way=\v!by\v!text, \c!prefix=\v!no, \c!prefixset=\v!part, \c!prefixconnector=\endash, \c!state=\v!start] \setupsubpagenumber [\c!way=\v!by\v!part, \c!state=\v!stop] % Counters \def\firstrealpagenumber{\convertedcounter[\s!realpage][\c!type=\v!first]} \def\firstuserpagenumber{\convertedcounter[\s!userpage][\c!type=\v!first]} \def\firstsubpagenumber {\convertedcounter[\s!subpage ][\c!type=\v!first]} \def\lastrealpagenumber {\convertedcounter[\s!realpage][\c!type=\v!last]} \def\lastuserpagenumber {\convertedcounter[\s!userpage][\c!type=\v!last]} \def\lastsubpagenumber {\convertedcounter[\s!subpage ][\c!type=\v!last]} \def\prevrealpagenumber {\convertedcounter[\s!realpage][\c!type=\v!previous]} \def\prevuserpagenumber {\convertedcounter[\s!userpage][\c!type=\v!previous]} \def\prevsubpagenumber {\convertedcounter[\s!subpage ][\c!type=\v!previous]} \def\nextrealpagenumber {\convertedcounter[\s!realpage][\c!type=\v!next]} \def\nextuserpagenumber {\convertedcounter[\s!userpage][\c!type=\v!next]} \def\nextsubpagenumber {\convertedcounter[\s!subpage ][\c!type=\v!next]} \def\firstrealpage{\strc_counters_first\s!realpage} \def\firstuserpage{\strc_counters_first\s!userpage} \def\firstsubpage {\strc_counters_first\s!subpage } \def\prevrealpage {\strc_counters_prev \s!realpage} \def\prevuserpage {\strc_counters_prev \s!userpage} \def\prevsubpage {\strc_counters_prev \s!subpage } \def\nextrealpage {\strc_counters_next \s!realpage} \def\nextuserpage {\strc_counters_next \s!userpage} \def\nextsubpage {\strc_counters_next \s!subpage } \def\lastrealpage {\strc_counters_last \s!realpage} \def\lastuserpage {\strc_counters_last \s!userpage} \def\lastsubpage {\strc_counters_last \s!subpage } \let\firstpage\firstrealpage \let\prevpage \prevrealpage \let\nextpage \nextrealpage \let\lastpage \lastrealpage % Compatibility counters: \def\nofrealpages {\lastrealpage} \def\totalnumberofpages{\lastrealpage} \def\nofuserpages {\lastuserpage} \def\lastpagenumber {\lastuserpage} \def\nofsubpages {\lastsubpage } % Renderers: \def\pagenumber {\strc_counters_raw\s!userpage} \def\prefixedpagenumber {\directconvertedcounter\s!userpage\empty} % \userpagenumber \def\realpagenumber {\directconvertedcounter\s!realpage\empty} \def\userpagenumber {\directconvertedcounter\s!userpage\empty} \def\subpagenumber {\directconvertedcounter\s!subpage \empty} \def\firstrealpagenumber{\directconvertedcounter\s!realpage\v!first} \def\firstuserpagenumber{\directconvertedcounter\s!userpage\v!first} \def\firstsubpagenumber {\directconvertedcounter\s!subpage \v!first} \def\lastrealpagenumber {\directconvertedcounter\s!realpage\v!last} \def\lastuserpagenumber {\directconvertedcounter\s!userpage\v!last} \def\lastsubpagenumber {\directconvertedcounter\s!subpage \v!last} \def\prevrealpagenumber {\directconvertedcounter\s!realpage\v!previous} \def\prevuserpagenumber {\directconvertedcounter\s!userpage\v!previous} \def\prevsubpagenumber {\directconvertedcounter\s!subpage \v!previous} \def\nextrealpagenumber {\directconvertedcounter\s!realpage\v!next} \def\nextuserpagenumber {\directconvertedcounter\s!userpage\v!next} \def\nextsubpagenumber {\directconvertedcounter\s!subpage \v!next} \unexpanded\def\strc_pagenumbers_decrement_counters % only at the end {\strc_counters_decrement\s!realpage \strc_counters_decrement\s!userpage \strc_counters_decrement\s!subpage} \unexpanded\def\strc_pagenumbers_increment_counters {\incrementpagenumber \incrementsubpagenumber} \appendtoks \strc_pagenumbers_decrement_counters \to \everygoodbye % Equivalents (compatibility): % % todo: maybe leave lastpage etc lua calls \def\realpage{\the\realpageno} \def\userpage{\the\userpageno} \def\subpage {\the\subpageno} % Hooks: \def\currentpage{\the\realpageno}% rather useless \appendtoks \ifnum\realpageno>\lastpage \globallet\lastpage\lastrealpage \fi \to \everyinitializepagecounters % States: \newif\ifdoublesided \newconditional\layoutisdoublesided \newif\ifsinglesided \newconditional\layoutissinglesided % Realpage and subpage numbers: \unexpanded\def\setnextrealpageno{\global\realpageno\strc_counters_incremented\s!realpage\relax} \unexpanded\def\setnextsubpageno {\global\subpageno \strc_counters_incremented\s!subpage \relax} % Page numbers: (can move to lua) ... inconsistent names \installcorenamespace{pagenumberinc} \installcorenamespace{pagenumberdec} \unexpanded\def\strc_pagenumbers_decrement_userpage{\global\userpageno\strc_counters_decremented\s!userpage\relax} \unexpanded\def\strc_pagenumbers_increment_userpage{\global\userpageno\strc_counters_incremented\s!userpage\relax} \unexpanded\def\decrementsubpagenumber{\global\subpageno \strc_counters_decremented\s!subpage \relax} \unexpanded\def\incrementsubpagenumber{\global\subpageno \strc_counters_incremented\s!subpage \relax} \unexpanded\def\strc_pagenumbers_synchronize_userpage{\global\c_strc_pagenumbers_state_userpage\plustwo} % start and visible \unexpanded\def\decrementpagenumber{\csname\??pagenumberdec\namedcounterparameter\s!userpage\c!state\endcsname} \unexpanded\def\incrementpagenumber{\csname\??pagenumberinc\namedcounterparameter\s!userpage\c!state\endcsname} \letvalue{\??pagenumberdec\v!start}\strc_pagenumbers_decrement_userpage \letvalue{\??pagenumberdec\v!none }\strc_pagenumbers_decrement_userpage \letvalue{\??pagenumberdec\v!empty}\strc_pagenumbers_decrement_userpage \letvalue{\??pagenumberinc\v!start}\strc_pagenumbers_increment_userpage \letvalue{\??pagenumberinc\v!none }\strc_pagenumbers_increment_userpage \setvalue{\??pagenumberinc\v!empty}{\strc_pagenumbers_increment_userpage\strc_pagenumbers_synchronize_userpage} \letvalue{\??pagenumberinc\v!keep }\strc_pagenumbers_synchronize_userpage % Setup general page numbering \installcorenamespace{pagenumbering} \installdirectcommandhandler \??pagenumbering {pagenumbering} \appendtoks \singlesidedfalse \setfalse\layoutisdoublesided \doublesidedfalse \setfalse\layoutissinglesided \processallactionsinset[\directpagenumberingparameter\c!alternative] [ \v!singlesided=>\singlesidedtrue\settrue\layoutissinglesided, \v!doublesided=>\doublesidedtrue\settrue\layoutisdoublesided]% \ifdefined\trackingmarginnotestrue \ifdoublesided \trackingmarginnotestrue \else \trackingmarginnotesfalse \fi \fi \page_backgrounds_recalculate \strc_pagenumbers_set_location \to \everysetuppagenumbering \ifdefined \page_backgrounds_recalculate \else \let\page_backgrounds_recalculate\relax \fi \ifdefined \strc_pagenumbers_set_location \else \let\strc_pagenumbers_set_location\relax \fi \unexpanded\def\strc_pagenumbers_flush_final_page {\edef\p_strc_pagenumbers_page{\directpagenumberingparameter\c!page}% \ifx\p_strc_pagenumbers_page\empty \else \ifx\p_strc_pagenumbers_page\v!no \else \page[\p_strc_pagenumbers_page] \fi \fi} % The numbered location handler is there because we need to be downward % compatible. So, in fact there can be multiple handlers active at the % same time, but only the current one does something. % Rendering: \unexpanded\def\strc_pagenumbers_place_location {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo \ifnum\c_strc_pagenumbers_state=\plusone \doif{\directpagenumberingparameter\c!strut}\v!yes\strut \begingroup \usepagenumberingstyleandcolor\c!style\c!color \directpagenumberingparameter\c!command {\directpagenumberingparameter\c!left \labeltexts\v!pagenumber\prefixedpagenumber \directpagenumberingparameter\c!right}% \endgroup \fi \fi} \unexpanded\def\completepagenumber {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo \ifnum\c_strc_pagenumbers_state=\plusone \directpagenumberingparameter\c!left \labeltexts\v!pagenumber\prefixedpagenumber \directpagenumberingparameter\c!right \fi \fi} \unexpanded\def\placepagenumber {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo \ifnum\c_strc_pagenumbers_state=\plusone \labeltexts\v!pagenumber\pagenumber \fi \fi} \unexpanded\def\referencepagenumber[#1]% {\doifelsenothing{#1}{?}{}} % The numbered location handler is there because we need to be downward % compatible. So, in fact there can be multiple handlers active at the % same time, but only the current one does something. \setnewconstant\c_strc_pagenumbers_state_realpage\plustwo % counter state : 0=stop, 1=start, 2=start and visible \setnewconstant\c_strc_pagenumbers_state_userpage\plustwo % counter state : 0=stop, 1=start, 2=start and visible \setnewconstant\c_strc_pagenumbers_state_subpage \plustwo % counter state : 0=stop, 1=start, 2=start and visible \setnewconstant\c_strc_pagenumbers_state \plusone % general number: 0=invisible, 1=visible \unexpanded\def\strc_pagenumbers_check_state_change#1#2% {\edef\m_strc_pagenumbers_state_new{\namedcounterparameter#1\c!state}% \ifx\m_strc_pagenumbers_state_new\m_strc_pagenumbers_state_old \else \doifelse\m_strc_pagenumbers_state_new\v!start {#2\plustwo}% {#2\zerocount}% \fi} \appendtoks % todo: set state: none, start, stop, reset \strc_pagenumbers_check_state_change\s!realpage\c_strc_pagenumbers_state_realpage \to \everysetuprealpagenumber \appendtoks % todo: set state: none, start, stop, reset \strc_pagenumbers_check_state_change\s!userpage\c_strc_pagenumbers_state_userpage \to \everysetupuserpagenumber \appendtoks % todo: set state: none, start, stop, reset \strc_pagenumbers_check_state_change\s!subpage\c_strc_pagenumbers_state_subpage \to \everysetupsubpagenumber \appendtoks % todo: set state: none, start, stop, reset \doifelse{\directpagenumberingparameter\c!state}\v!start {\c_strc_pagenumbers_state\plusone }% {\c_strc_pagenumbers_state\zerocount}% \to \everysetuppagenumbering % Done % \c!way=\v!by\v!part % \c!text= % \v!chapter\v!number=\v!no % \v!part\v!number=\v!yes % \c!numberseparator=-- % \c!conversion=\v!numbers \setuppagenumbering [\c!alternative=\v!singlesided, \c!location={\v!header,\v!middle}, \c!width=, % in geval van \v!marginedge \c!left=, \c!right=, \c!page=\v!last, \c!textseparator=\tfskip, \c!state=\v!start, \c!command=, \c!strut=\v!yes, \c!style=, % empty, otherwise conflict \c!color=] % just for downward compatbility \appendtoks \edef\askeduserpagenumber{\namedcounterparameter\s!userpage\c!number}% \ifx\askeduserpagenumber\empty \else \normalexpanded{\setuppagenumber[\c!start=\askeduserpagenumber,\c!number=]}% \userpageno\strc_counters_raw\s!userpage \fi \to \everysetupuserpagenumber % todo: set state: none, start, stop, reset \appendtoks \edef\askedsubpagenumber{\namedcounterparameter\s!subpage\c!number}% \ifx\askedsubpagenumber\empty \else \normalexpanded{\setupsubpagenumber[\c!start=\askedsubpagenumber,\c!number=]}% \subpageno\strc_counters_raw\s!subpage\relax \fi \to \everysetupsubpagenumber % todo: set state: none, start, stop, reset % \setuplayout[width=300pt,backspace=4cm] % \setuppagenumbering [alternative=doublesided] % \setupuserpagenumber[start=2] % \starttext \dorecurse{20}{\input knuth \par} \stoptext \unexpanded\def\strc_pagenumbers_check_change_shift {\userpageno\strc_counters_raw\s!userpage\relax \ifnum\realpageno=\plusone \ifodd\userpageno \else \global\pagenoshift\plusone \fi \fi} \appendtoks % todo: set state: none, start, stop, reset % this makes starting at an even page possible \strc_pagenumbers_check_change_shift \to \everysetupuserpagenumber \appendtoks % todo: set state: none, start, stop, reset % this makes starting at an even page possible \strc_pagenumbers_check_change_shift \to \everysetuppagenumbering \initializepagecounters \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/back-exp.lua0000644000175000017500000024377312130411274024101 0ustar norbertnorbertif not modules then modules = { } end modules ['back-exp'] = { version = 1.001, comment = "companion to back-exp.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- language -> only mainlanguage, local languages should happen through start/stoplanguage -- tocs/registers -> maybe add a stripper (i.e. just don't flush entries in final tree) -- footnotes -> css 3 -- bodyfont -> in styles.css -- delimited -> left/right string (needs marking) -- Because we need to look ahead we now always build a tree (this was optional in -- the beginning). The extra overhead in the frontend is neglectable. -- -- We can optimize the code ... currently the overhead is some 10% for xml + html so -- there is no hurry. -- todo: move critital formatters out of functions -- todo: delay loading (apart from basic tag stuff) local next, type = next, type local format, match, concat, rep, sub, gsub, gmatch, find = string.format, string.match, table.concat, string.rep, string.sub, string.gsub, string.gmatch, string.find local validstring = string.valid local lpegmatch = lpeg.match local utfchar, utfbyte, utfvalues = utf.char, utf.byte, utf.values local insert, remove = table.insert, table.remove local fromunicode16 = fonts.mappings.fromunicode16 local sortedhash = table.sortedhash local formatters = string.formatters local trace_export = false trackers.register ("export.trace", function(v) trace_export = v end) local trace_spacing = false trackers.register ("export.trace.spacing", function(v) trace_spacing = v end) local less_state = false directives.register("export.lessstate", function(v) less_state = v end) local show_comment = true directives.register("export.comment", function(v) show_comment = v end) -- maybe we will also support these: -- -- local css_hyphens = false directives.register("export.css.hyphens", function(v) css_hyphens = v end) -- local css_textalign = false directives.register("export.css.textalign", function(v) css_textalign = v end) -- local css_bodyfontsize = false directives.register("export.css.bodyfontsize", function(v) css_bodyfontsize = v end) -- local css_textwidth = false directives.register("export.css.textwidth", function(v) css_textwidth = v end) local report_export = logs.reporter("backend","export") local nodes = nodes local attributes = attributes local variables = interfaces.variables local settings_to_array = utilities.parsers.settings_to_array local setmetatableindex = table.setmetatableindex local tasks = nodes.tasks local fontchar = fonts.hashes.characters local fontquads = fonts.hashes.quads local languagenames = languages.numbers local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local whatsitcodes = nodes.whatsitcodes local listcodes = nodes.listcodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue local kern_code = nodecodes.kern local disc_code = nodecodes.disc local insert_code = nodecodes.insert local whatsit_code = nodecodes.whatsit local refximage_code = whatsitcodes.pdfrefximage local localpar_code = whatsitcodes.localpar local userskip_code = skipcodes.userskip local rightskip_code = skipcodes.rightskip local parfillskip_code = skipcodes.parfillskip local spaceskip_code = skipcodes.spaceskip local xspaceskip_code = skipcodes.xspaceskip local line_code = listcodes.line local a_characters = attributes.private('characters') local a_exportstatus = attributes.private('exportstatus') local a_tagged = attributes.private('tagged') local a_taggedpar = attributes.private("taggedpar") local a_image = attributes.private('image') local a_reference = attributes.private('reference') local a_textblock = attributes.private("textblock") local traverse_id = node.traverse_id local traverse_nodes = node.traverse local slide_nodelist = node.slide local texattribute = tex.attribute local texdimen = tex.dimen local texcount = tex.count local locate_node = nodes.locate local references = structures.references local structurestags = structures.tags local taglist = structurestags.taglist local properties = structurestags.properties local userdata = structurestags.userdata -- might be combines with taglist local tagdata = structurestags.data local tagmetadata = structurestags.metadata local detailedtag = structurestags.detailedtag local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming -- todo: more locals (and optimize) local exportversion = "0.30" local nofcurrentcontent = 0 -- so we don't free (less garbage collection) local currentcontent = { } local currentnesting = nil local currentattribute = nil local last = nil local currentparagraph = nil local noftextblocks = 0 local attributehash = { } -- to be considered: set the values at the tex end local hyphencode = 0xAD local hyphen = utfchar(0xAD) -- todo: also emdash etc local colonsplitter = lpeg.splitat(":") local dashsplitter = lpeg.splitat("-") local threshold = 65536 local indexing = false local keephyphens = false local finetuning = { } local treestack = { } local nesting = { } local currentdepth = 0 local tree = { data = { }, fulltag == "root" } -- root local treeroot = tree local treehash = { } local extras = { } local checks = { } local finalizers = { } local nofbreaks = 0 local used = { } local exporting = false local restart = false local specialspaces = { [0x20] = " " } -- for conversion local somespace = { [0x20] = true, [" "] = true } -- for testing local entities = { ["&"] = "&", [">"] = ">", ["<"] = "<" } local attribentities = { ["&"] = "&", [">"] = ">", ["<"] = "<", ['"'] = "quot;" } local entityremapper = utf.remapper(entities) local alignmapping = { flushright = "right", middle = "center", flushleft = "left", } local numbertoallign = { [0] = "justify", ["0"] = "justify", [variables.normal ] = "justify", [1] = "right", ["1"] = "right", [variables.flushright] = "right", [2] = "center", ["2"] = "center", [variables.middle ] = "center", [3] = "left", ["3"] = "left", [variables.flushleft ] = "left", } local defaultnature = "mixed" -- "inline" setmetatableindex(used, function(t,k) if k then local v = { } t[k] = v return v end end) setmetatableindex(specialspaces, function(t,k) local v = utfchar(k) t[k] = v entities[v] = formatters["&#x%X;"](k) somespace[k] = true somespace[v] = true return v end) local namespaced = { -- filled on } local namespaces = { msubsup = "m", msub = "m", msup = "m", mn = "m", mi = "m", ms = "m", mo = "m", mtext = "m", mrow = "m", mfrac = "m", mroot = "m", msqrt = "m", munderover = "m", munder = "m", mover = "m", merror = "m", math = "m", mrow = "m", mtable = "m", mtr = "m", mtd = "m", mfenced = "m", maction = "m", mspace = "m", } setmetatableindex(namespaced, function(t,k) if k then local namespace = namespaces[k] local v = namespace and namespace .. ":" .. k or k t[k] = v return v end end) local function attribute(key,value) if value and value ~= "" then return formatters[' %s="%s"'](key,gsub(value,".",attribentities)) else return "" end end -- local P, C, Cc = lpeg.P, lpeg.C, lpeg.Cc -- -- local dash, colon = P("-"), P(":") -- -- local precolon, predash, rest = P((1-colon)^1), P((1-dash )^1), P(1)^1 -- -- local tagsplitter = C(precolon) * colon * C(predash) * dash * C(rest) + -- C(predash) * dash * Cc(nil) * C(rest) local listdata = { } local function hashlistdata() local c = structures.lists.collected for i=1,#c do local ci = c[i] local tag = ci.references.tag if tag then local m = ci.metadata listdata[m.kind .. ":" .. m.name .. "-" .. tag] = ci end end end local spaces = utilities.strings.newrepeater(" ",-1) function structurestags.setattributehash(fulltag,key,value) -- public hash if type(fulltag) == "number" then fulltag = taglist[fulltag] if fulltag then fulltag = fulltag[#fulltag] end end if fulltag then local ah = attributehash[fulltag] -- could be metatable magic if not ah then ah = { } attributehash[fulltag] = ah end ah[key] = value end end -- experiment: styles and images -- -- officially we should convert to bp but we round anyway local usedstyles = { } -- /* padding : ; */ -- /* text-justify : inter-word ; */ local documenttemplate = [[ document { font-size : %s !important ; max-width : %s !important ; text-align : %s !important ; hyphens : %s !important ; } ]] local styletemplate = [[ %s[detail='%s'] { font-style : %s ; font-variant : %s ; font-weight : %s ; font-family : %s ; color : %s ; }]] local function allusedstyles(xmlfile) local result = { format("/* styles for file %s */",xmlfile) } -- local bodyfont = finetuning.bodyfont local width = finetuning.width local hyphen = finetuning.hyphen local align = finetuning.align -- if not bodyfont or bodyfont == "" then bodyfont = "12pt" elseif type(bodyfont) == "number" then bodyfont = number.todimen(bodyfont,"pt","%ipt") or "12pt" end if not width or width == "" then width = "50em" elseif type(width) == "number" then width = number.todimen(width,"pt","%ipt") or "50em" end if hyphen == variables.yes then hyphen = "manual" else hyphen = "inherited" end if align then align = numbertoallign[align] end if not align then align = hyphens and "justify" or "inherited" end -- result[#result+1] = format(documenttemplate,bodyfont,width,align,hyphen) -- local colorspecification = xml.css.colorspecification local fontspecification = xml.css.fontspecification for element, details in sortedhash(usedstyles) do for detail, data in sortedhash(details) do local s = fontspecification(data.style) local c = colorspecification(data.color) result[#result+1] = formatters[styletemplate](element,detail, s.style or "inherit", s.variant or "inherit", s.weight or "inherit", s.family or "inherit", c or "inherit") end end return concat(result,"\n\n") end local usedimages = { } local imagetemplate = [[ %s[id="%s"] { display : block ; background-image : url(%s) ; background-size : 100%% auto ; background-repeat : no-repeat ; width : %s ; height : %s ; }]] local function allusedimages(xmlfile) local result = { format("/* images for file %s */",xmlfile) } for element, details in sortedhash(usedimages) do for detail, data in sortedhash(details) do local name = data.name if file.suffix(name) == "pdf" then -- temp hack .. we will have a remapper name = file.replacesuffix(name,"svg") end result[#result+1] = formatters[imagetemplate](element,detail,name,data.width,data.height) end end return concat(result,"\n\n") end local function uniqueusedimages() local unique = { } for element, details in next, usedimages do for detail, data in next, details do local name = data.name if file.suffix(name) == "pdf" then unique[file.replacesuffix(name,"svg")] = name else unique[name] = name end end end return unique end -- properties.vspace = { export = "break", nature = "display" } ----------------- = { export = "pagebreak", nature = "display" } local function makebreaklist(list) nofbreaks = nofbreaks + 1 local t = { } if list then for i=1,#list do t[i] = list[i] end end t[#t+1] = "break-" .. nofbreaks -- maybe no number return t end local breakattributes = { type = "collapse" } local function makebreaknode(attributes) -- maybe no fulltag nofbreaks = nofbreaks + 1 return { tg = "break", fulltag = "break-" .. nofbreaks, n = nofbreaks, element = "break", nature = "display", attributes = attributes or nil, -- data = { }, -- not needed -- attribute = 0, -- not needed -- parnumber = 0, } end local fields = { "title", "subtitle", "author", "keywords" } local function checkdocument(root) local data = root.data if data then for i=1,#data do local di = data[i] if di.content then -- ok elseif di.tg == "ignore" then di.element = "" checkdocument(di) else -- can't happen end end end end function extras.document(result,element,detail,n,fulltag,di) result[#result+1] = format(" language=%q",languagenames[tex.count.mainlanguagenumber]) if not less_state then result[#result+1] = format(" file=%q",tex.jobname) result[#result+1] = format(" date=%q",os.date()) result[#result+1] = format(" context=%q",environment.version) result[#result+1] = format(" version=%q",exportversion) result[#result+1] = format(" xmlns:m=%q","http://www.w3.org/1998/Math/MathML") local identity = interactions.general.getidentity() for i=1,#fields do local key = fields[i] local value = identity[key] if value and value ~= "" then result[#result+1] = formatters[" %s=%q"](key,value) end end end checkdocument(di) end local itemgroups = { } function structurestags.setitemgroup(current,packed,symbol) itemgroups[detailedtag("itemgroup",current)] = { packed = packed, symbol = symbol, } end function extras.itemgroup(result,element,detail,n,fulltag,di) local hash = itemgroups[fulltag] if hash then local v = hash.packed if v then result[#result+1] = " packed='yes'" end local v = hash.symbol if v then result[#result+1] = attribute("symbol",v) end end end local synonyms = { } function structurestags.setsynonym(current,tag) synonyms[detailedtag("synonym",current)] = tag end function extras.synonym(result,element,detail,n,fulltag,di) local tag = synonyms[fulltag] if tag then result[#result+1] = formatters[" tag='%s'"](tag) end end local sortings = { } function structurestags.setsorting(current,tag) sortings[detailedtag("sorting",current)] = tag end function extras.sorting(result,element,detail,n,fulltag,di) local tag = sortings[fulltag] if tag then result[#result+1] = formatters[" tag='%s'"](tag) end end usedstyles.highlight = { } function structurestags.sethighlight(current,style,color) -- we assume global styles usedstyles.highlight[current] = { style = style, -- xml.css.fontspecification(style), color = color, -- xml.css.colorspec(color), } end local descriptions = { } local symbols = { } local linked = { } function structurestags.setdescription(tag,n) local nd = structures.notes.get(tag,n) -- todo: use listdata instead if nd then local references = nd.references descriptions[references and references.internal] = detailedtag("description",tag) end end function structurestags.setdescriptionsymbol(tag,n) local nd = structures.notes.get(tag,n) -- todo: use listdata instead if nd then local references = nd.references symbols[references and references.internal] = detailedtag("descriptionsymbol",tag) end end function finalizers.descriptions(tree) local n = 0 for id, tag in next, descriptions do local sym = symbols[id] if sym then n = n + 1 linked[tag] = n linked[sym] = n end end end function extras.description(result,element,detail,n,fulltag,di) local id = linked[fulltag] if id then result[#result+1] = formatters[" insert='%s'"](id) -- maybe just fulltag end end function extras.descriptionsymbol(result,element,detail,n,fulltag,di) local id = linked[fulltag] if id then result[#result+1] = formatters[" insert='%s'"](id) end end usedimages.image = { } function structurestags.setfigure(name,page,width,height) usedimages.image[detailedtag("image")] = { name = name, page = page, width = number.todimen(width,"cm","%0.3fcm"), height = number.todimen(height,"cm","%0.3fcm"), } end function extras.image(result,element,detail,n,fulltag,di) local data = usedimages.image[fulltag] if data then result[#result+1] = attribute("name",data.name) if tonumber(data.page) > 1 then result[#result+1] = formatters[" page='%s'"](data.page) end result[#result+1] = formatters[" id='%s' width='%s' height='%s'"](fulltag,data.width,data.height) end end local combinations = { } function structurestags.setcombination(nx,ny) combinations[detailedtag("combination")] = { nx = nx, ny = ny, } end function extras.combination(result,element,detail,n,fulltag,di) local data = combinations[fulltag] if data then result[#result+1] = formatters[" nx='%s' ny='%s'"](data.nx,data.ny) end end -- quite some code deals with exporting references -- local evaluators = { } local specials = { } evaluators.inner = function(result,var) local inner = var.inner if inner then result[#result+1] = attribute("location",inner) end end evaluators.outer = function(result,var) local file, url = references.checkedfileorurl(var.outer,var.outer) if url then result[#result+1] = attribute("url",url) elseif file then result[#result+1] = attribute("file",file) end end evaluators["outer with inner"] = function(result,var) local file = references.checkedfile(var.f) if file then result[#result+1] = attribute("file",file) end local inner = var.inner if inner then result[#result+1] = attribute("location",inner) end end evaluators.special = function(result,var) local handler = specials[var.special] if handler then handler(result,var) end end evaluators["special outer with operation"] = evaluators.special evaluators["special operation"] = evaluators.special evaluators["special operation with arguments"] = evaluators.special function specials.url(result,var) local url = references.checkedurl(var.operation) if url then result[#result+1] = attribute("url",url) end end function specials.file(result,var) local file = references.checkedfile(var.operation) if file then result[#result+1] = attribute("file",file) end end function specials.fileorurl(result,var) local file, url = references.checkedfileorurl(var.operation,var.operation) if url then result[#result+1] = attribute("url",url) elseif file then result[#result+1] = attribute("file",file) end end function specials.internal(result,var) local internal = references.checkedurl(var.operation) if internal then result[#result+1] = formatters[" location='aut:%s'"](internal) end end local referencehash = { } local function adddestination(result,references) -- todo: specials -> exporters and then concat if references then local reference = references.reference if reference and reference ~= "" then local prefix = references.prefix if prefix and prefix ~= "" then result[#result+1] = formatters[" prefix='%s'"](prefix) end result[#result+1] = formatters[" destination='%s'"](reference) for i=1,#references do local r = references[i] local e = evaluators[r.kind] if e then e(result,r) end end end end end local function addreference(result,references) if references then local reference = references.reference if reference and reference ~= "" then local prefix = references.prefix if prefix and prefix ~= "" then result[#result+1] = formatters[" prefix='%s'"](prefix) end result[#result+1] = formatters[" reference='%s'"](reference) end local internal = references.internal if internal and internal ~= "" then result[#result+1] = formatters[" location='aut:%s'"](internal) end end end function extras.link(result,element,detail,n,fulltag,di) -- for instance in lists a link has nested elements and no own text local reference = referencehash[fulltag] if reference then adddestination(result,structures.references.get(reference)) return true else local data = di.data if data then for i=1,#data do local di = data[i] if di then local fulltag = di.fulltag if fulltag and extras.link(result,element,detail,n,fulltag,di) then return true end end end end end end -- no settings, as these are obscure ones local automathrows = true directives.register("backend.export.math.autorows", function(v) automathrows = v end) local automathapply = true directives.register("backend.export.math.autoapply", function(v) automathapply = v end) local automathnumber = true directives.register("backend.export.math.autonumber", function(v) automathnumber = v end) local automathstrip = true directives.register("backend.export.math.autostrip", function(v) automathstrip = v end) local functions = mathematics.categories.functions local function collapse(di,i,data,ndata,detail,element) local collapsing = di.data if data then di.element = element di.detail = nil i = i + 1 while i <= ndata do local dn = data[i] if dn.detail == detail then collapsing[#collapsing+1] = dn.data[1] dn.skip = "ignore" i = i + 1 else break end end end return i end local function collapse_mn(di,i,data,ndata) local collapsing = di.data if data then i = i + 1 while i <= ndata do local dn = data[i] local tg = dn.tg if tg == "mn" then collapsing[#collapsing+1] = dn.data[1] dn.skip = "ignore" i = i + 1 elseif tg == "mo" then local d = dn.data[1] if d == "." then collapsing[#collapsing+1] = d dn.skip = "ignore" i = i + 1 else break end else break end end end return i end -- maybe delay __i__ till we need it local apply_function = { { element = "mo", -- comment = "apply function", -- data = { utfchar(0x2061) }, data = { "⁡" }, nature = "mixed", } } local functioncontent = { } setmetatableindex(functioncontent,function(t,k) local v = { { content = k } } t[k] = v return v end) local function checkmath(root) -- we can provide utf.toentities as an option local data = root.data if data then local ndata = #data local roottg = root.tg if roottg == "msubsup" then local nucleus, superscript, subscript for i=1,ndata do local di = data[i] if not di then -- weird elseif di.content then -- text elseif not nucleus then nucleus = i elseif not superscript then superscript = i elseif not subscript then subscript = i else -- error end end if superscript and subscript then local sup, sub = data[superscript], data[subscript] data[superscript], data[subscript] = sub, sup -- sub.__o__, sup.__o__ = subscript, superscript sub.__i__, sup.__i__ = superscript, subscript end elseif roottg == "mfenced" then local new, n = { }, 0 local attributes = { } root.attributes = attributes for i=1,ndata do local di = data[i] if not di then -- weird elseif di.content then n = n + 1 new[n] = di else local tg = di.tg if tg == "mleft" then attributes.left = tostring(di.data[1].data[1].content) elseif tg == "mmiddle" then attributes.middle = tostring(di.data[1].data[1].content) elseif tg == "mright" then attributes.right = tostring(di.data[1].data[1].content) else n = n + 1 di.__i__ = n new[n] = di end end end root.data = new ndata = n end if ndata == 0 then return elseif ndata == 1 then local d = data[1] if not d then return elseif d.content then return elseif #root.data == 1 then local tg = d.tg if automathrows and roottg == "mrow" then -- maybe just always ! check spec first if tg == "mrow" or tg == "mfenced" or tg == "mfrac" or tg == "mroot" or tg == "msqrt"then root.skip = "comment" elseif tg == "mo" then root.skip = "comment" end elseif roottg == "mo" then if tg == "mo" then root.skip = "comment" end end end end local i = 1 while i <= ndata do -- -- -- TOO MUCH NESTED CHECKING -- -- -- local di = data[i] if di and not di.content then local tg = di.tg local detail = di.detail if tg == "math" then -- di.element = "mrow" -- when properties di.skip = "comment" checkmath(di) i = i + 1 elseif tg == "mover" or tg == "munder" or tg == "munderover" then if detail == "accent" then di.attributes = { accent = "true" } di.detail = nil end checkmath(di) i = i + 1 elseif tg == "mroot" then if #di.data == 1 then -- else firefox complains di.element = "msqrt" end checkmath(di) i = i + 1 elseif tg == "break" then di.skip = "comment" i = i + 1 elseif tg == "mrow" and detail then di.detail = nil checkmath(di) di = { element = "maction", nature = "display", attributes = { actiontype = detail }, data = { di }, n = 0, } data[i] = di i = i + 1 elseif detail then -- no checkmath(di) here local category = tonumber(detail) or 0 if category == 1 then -- mo i = collapse(di,i,data,ndata,detail,"mo") elseif category == 2 then -- mi i = collapse(di,i,data,ndata,detail,"mi") elseif category == 3 then -- mn i = collapse(di,i,data,ndata,detail,"mn") elseif category == 4 then -- ms i = collapse(di,i,data,ndata,detail,"ms") elseif category >= 1000 then local apply = category >= 2000 if apply then category = category - 1000 end if tg == "mi" then -- function if roottg == "mrow" then root.skip = "comment" root.element = "function" end i = collapse(di,i,data,ndata,detail,"mi") local tag = functions[category] if tag then di.data = functioncontent[tag] end if apply then di.after = apply_function elseif automathapply then -- make function local following if i <= ndata then -- normally not the case following = data[i] else local parent = di.__p__ -- == root if parent.tg == "mrow" then parent = parent.__p__ end local index = parent.__i__ following = parent.data[index+1] end if following then local tg = following.tg if tg == "mrow" or tg == "mfenced" then -- we need to figure out the right condition di.after = apply_function end end end else -- some problem checkmath(di) i = i + 1 end else checkmath(di) i = i + 1 end elseif automathnumber and tg == "mn" then checkmath(di) i = collapse_mn(di,i,data,ndata) else checkmath(di) i = i + 1 end else -- can be string or boolean if parenttg ~= "mtext" and di == " " then data[i] = false end i = i + 1 end end end end function stripmath(di) if not di then -- elseif di.content then return di else local tg = di.tg if tg == "mtext" or tg == "ms" then return di else local data = di.data local ndata = #data local n = 0 for i=1,ndata do local di = data[i] if di and not di.content then di = stripmath(di) end if di then local content = di.content if not content then n = n + 1 di.__i__ = n data[n] = di elseif content == " " or content == "" then -- skip else n = n + 1 data[n] = di end end end for i=ndata,n+1,-1 do data[i] = nil end if #data > 0 then return di end end end end function checks.math(di) local hash = attributehash[di.fulltag] local mode = (hash and hash.mode) == "display" and "block" or "inline" di.attributes = { display = mode } -- can be option if needed: if mode == "inline" then di.nature = "mixed" -- else spacing problem (maybe inline) else di.nature = "display" end if automathstrip then stripmath(di) end checkmath(di) end local a, z, A, Z = 0x61, 0x7A, 0x41, 0x5A function extras.mi(result,element,detail,n,fulltag,di) -- check with content local str = di.data[1].content if str and sub(str,1,1) ~= "&" then -- hack but good enough (maybe gsub op eerste) for v in utfvalues(str) do if (v >= a and v <= z) or (v >= A and v <= Z) then local a = di.attributes if a then a.mathvariant = "normal" else di.attributes = { mathvariant = "normal" } end end end end end function extras.section(result,element,detail,n,fulltag,di) local data = listdata[fulltag] if data then addreference(result,data.references) return true else local data = di.data if data then for i=1,#data do local di = data[i] if di then local ft = di.fulltag if ft and extras.section(result,element,detail,n,ft,di) then return true end end end end end end function extras.float(result,element,detail,n,fulltag,di) local data = listdata[fulltag] if data then addreference(result,data.references) return true else local data = di.data if data then for i=1,#data do local di = data[i] if di and extras.section(result,element,detail,n,di.fulltag,di) then return true end end end end end local tabledata = { } function structurestags.settablecell(rows,columns,align) if align > 0 or rows > 1 or columns > 1 then tabledata[detailedtag("tablecell")] = { rows = rows, columns = columns, align = align, } end end function extras.tablecell(result,element,detail,n,fulltag,di) local hash = tabledata[fulltag] if hash then local v = hash.columns if v and v > 1 then result[#result+1] = formatters[" columns='%s'"](v) end local v = hash.rows if v and v > 1 then result[#result+1] = formatters[" rows='%s'"](v) end local v = hash.align if not v or v == 0 then -- normal elseif v == 1 then -- use numbertoalign here result[#result+1] = " align='flushright'" elseif v == 2 then result[#result+1] = " align='middle'" elseif v == 3 then result[#result+1] = " align='flushleft'" end end end local tabulatedata = { } function structurestags.settabulatecell(align) if align > 0 then tabulatedata[detailedtag("tabulatecell")] = { align = align, } end end function extras.tabulate(result,element,detail,n,fulltag,di) local data = di.data for i=1,#data do local di = data[i] if di.tg == "tabulaterow" then local did = di.data local content = false for i=1,#did do local d = did[i].data if d and #d > 0 and d[1].content then content = true break end end if not content then di.element = "" -- or simply remove end end end end function extras.tabulatecell(result,element,detail,n,fulltag,di) local hash = tabulatedata[fulltag] if hash then local v = hash.align if not v or v == 0 then -- normal elseif v == 1 then result[#result+1] = " align='flushleft'" elseif v == 2 then result[#result+1] = " align='flushright'" elseif v == 3 then result[#result+1] = " align='middle'" end end end -- flusher local linedone = false -- can go ... we strip newlines anyway local inlinedepth = 0 -- todo: #result -> nofresult local function emptytag(result,element,nature,depth,di) -- currently only break but at some point local a = di.attributes -- we might add detail etc if a then -- happens seldom if linedone then result[#result+1] = formatters["%w<%s"](depth,namespaced[element]) else result[#result+1] = formatters["\n%w<%s"](depth,namespaced[element]) end for k, v in next, a do result[#result+1] = formatters[" %s=%q"](k,v) end result[#result+1] = "/>\n" else if linedone then result[#result+1] = formatters["%w<%s/>\n"](depth,namespaced[element]) else result[#result+1] = formatters["\n%w<%s/>\n"](depth,namespaced[element]) end end linedone = false end local function begintag(result,element,nature,depth,di,skip) -- if needed we can use a local result with xresult local detail = di.detail local n = di.n local fulltag = di.fulltag local comment = di.comment if nature == "inline" then linedone = false inlinedepth = inlinedepth + 1 if show_comment and comment then result[#result+1] = formatters[""](comment) end elseif nature == "mixed" then if inlinedepth > 0 then if show_comment and comment then result[#result+1] = formatters[""](comment) end elseif linedone then result[#result+1] = spaces[depth] if show_comment and comment then result[#result+1] = formatters[""](comment) end else result[#result+1] = formatters["\n%w"](depth) linedone = false if show_comment and comment then result[#result+1] = formatters["\n%w"](comment,depth) end end inlinedepth = inlinedepth + 1 else if inlinedepth > 0 then if show_comment and comment then result[#result+1] = formatters[""](comment) end elseif linedone then result[#result+1] = spaces[depth] if show_comment and comment then result[#result+1] = formatters[""](comment) end else result[#result+1] = formatters["\n%w"](depth) -- can introduced extra line in mixed+mixed (filtered later on) linedone = false if show_comment and comment then result[#result+1] = formatters["\n%w"](comment,depth) end end end if skip == "comment" then if show_comment then result[#result+1] = formatters[""](namespaced[element]) end elseif skip then -- ignore else result[#result+1] = formatters["<%s"](namespaced[element]) if detail then result[#result+1] = formatters[" detail=%q"](detail) end if indexing and n then result[#result+1] = formatters[" n=%q"](n) end local extra = extras[element] if extra then extra(result,element,detail,n,fulltag,di) end local u = userdata[fulltag] if u then for k, v in next, u do result[#result+1] = formatters[" %s=%q"](k,v) end end local a = di.attributes if a then for k, v in next, a do result[#result+1] = formatters[" %s=%q"](k,v) end end result[#result+1] = ">" end if inlinedepth > 0 then elseif nature == "display" then result[#result+1] = "\n" linedone = true end used[element][detail or ""] = nature -- for template css local metadata = tagmetadata[fulltag] if metadata then if not linedone then result[#result+1] = "\n" linedone = true end result[#result+1] = formatters["%w\n"](depth) for k, v in table.sortedpairs(metadata) do v = entityremapper(v) result[#result+1] = formatters["%w%s\n"](depth+1,k,v) end result[#result+1] = formatters["%w\n"](depth) end end local function endtag(result,element,nature,depth,skip) if nature == "display" then if inlinedepth == 0 then if not linedone then result[#result+1] = "\n" end if skip == "comment" then if show_comment then result[#result+1] = formatters["%w\n"](depth,namespaced[element]) end elseif skip then -- ignore else result[#result+1] = formatters["%w\n"](depth,namespaced[element]) end linedone = true else if skip == "comment" then if show_comment then result[#result+1] = formatters[""](namespaced[element]) end elseif skip then -- ignore else result[#result+1] = formatters[""](namespaced[element]) end end else inlinedepth = inlinedepth - 1 if skip == "comment" then if show_comment then result[#result+1] = formatters[""](namespaced[element]) end elseif skip then -- ignore else result[#result+1] = formatters[""](namespaced[element]) end linedone = false end end local function flushtree(result,data,nature,depth) depth = depth + 1 local nofdata = #data for i=1,nofdata do local di = data[i] if not di then -- hm, di can be string -- whatever elseif di.content then -- already has breaks local content = entityremapper(di.content) if i == nofdata and sub(content,-1) == "\n" then -- move check -- can be an end of line in par but can also be the last line if trace_spacing then result[#result+1] = formatters["%s"](di.parnumber or 0,sub(content,1,-2)) else result[#result+1] = sub(content,1,-2) end result[#result+1] = " " else if trace_spacing then result[#result+1] = formatters["%s"](di.parnumber or 0,content) else result[#result+1] = content end end linedone = false elseif not di.collapsed then -- ignore collapsed data (is appended, reconstructed par) local element = di.element if not element then -- skip elseif element == "break" then -- or element == "pagebreak" emptytag(result,element,nature,depth,di) elseif element == "" or di.skip == "ignore" then -- skip else if di.before then flushtree(result,di.before,nature,depth) end local natu = di.nature local skip = di.skip if di.breaknode then emptytag(result,"break","display",depth,di) end begintag(result,element,natu,depth,di,skip) flushtree(result,di.data,natu,depth) -- if sub(result[#result],-1) == " " and natu ~= "inline" then -- result[#result] = sub(result[#result],1,-2) -- end endtag(result,element,natu,depth,skip) if di.after then flushtree(result,di.after,nature,depth) end end end end end local function breaktree(tree,parent,parentelement) -- also removes double breaks local data = tree.data if data then local nofdata = #data local prevelement local prevnature local prevparnumber local newdata = { } local nofnewdata = 0 for i=1,nofdata do local di = data[i] if not di then -- skip elseif di.content then local parnumber = di.parnumber if prevnature == "inline" and prevparnumber and prevparnumber ~= parnumber then nofnewdata = nofnewdata + 1 if trace_spacing then newdata[nofnewdata] = makebreaknode { type = "a", p = prevparnumber, n = parnumber } else newdata[nofnewdata] = makebreaknode() end end prevelement = nil prevnature = "inline" prevparnumber = parnumber nofnewdata = nofnewdata + 1 newdata[nofnewdata] = di elseif not di.collapsed then local element = di.element if element == "break" then -- or element == "pagebreak" if prevelement == "break" then di.element = "" end prevelement = element prevnature = "display" elseif element == "" or di.skip == "ignore" then -- skip else local nature = di.nature local parnumber = di.parnumber if prevnature == "inline" and nature == "inline" and prevparnumber and prevparnumber ~= parnumber then nofnewdata = nofnewdata + 1 if trace_spacing then newdata[nofnewdata] = makebreaknode { type = "b", p = prevparnumber, n = parnumber } else newdata[nofnewdata] = makebreaknode() end end prevnature = nature prevparnumber = parnumber prevelement = element breaktree(di,tree,element) end nofnewdata = nofnewdata + 1 newdata[nofnewdata] = di else local nature = di.nature local parnumber = di.parnumber if prevnature == "inline" and nature == "inline" and prevparnumber and prevparnumber ~= parnumber then nofnewdata = nofnewdata + 1 if trace_spacing then newdata[nofnewdata] = makebreaknode { type = "c", p = prevparnumber, n = parnumber } else newdata[nofnewdata] = makebreaknode() end end prevnature = nature prevparnumber = parnumber nofnewdata = nofnewdata + 1 newdata[nofnewdata] = di end end tree.data = newdata end end -- also tabulaterow reconstruction .. maybe better as a checker -- i.e cell attribute local function collapsetree() for tag, trees in next, treehash do local d = trees[1].data if d then local nd = #d if nd > 0 then for i=2,#trees do local currenttree = trees[i] local currentdata = currenttree.data local currentpar = currenttree.parnumber local previouspar = trees[i-1].parnumber currenttree.collapsed = true -- is the next ok? if previouspar == 0 or not (di and di.content) then previouspar = nil -- no need anyway so no further testing needed end for j=1,#currentdata do local cd = currentdata[j] if not cd or cd == "" then -- skip elseif cd.content then if not currentpar then -- add space ? elseif not previouspar then -- add space ? elseif currentpar ~= previouspar then nd = nd + 1 if trace_spacing then d[nd] = makebreaknode { type = "d", p = previouspar, n = currentpar } else d[nd] = makebreaknode() end end previouspar = currentpar nd = nd + 1 d[nd] = cd else nd = nd + 1 d[nd] = cd end currentdata[j] = false end end end end end end local function finalizetree(tree) for _, finalizer in next, finalizers do finalizer(tree) end end local function indextree(tree) local data = tree.data if data then local n, new = 0, { } for i=1,#data do local d = data[i] if not d then -- skip elseif d.content then n = n + 1 new[n] = d elseif not d.collapsed then n = n + 1 d.__i__ = n d.__p__ = tree indextree(d) new[n] = d end end tree.data = new end end local function checktree(tree) local data = tree.data if data then for i=1,#data do local d = data[i] if type(d) == "table" then local check = checks[d.tg] if check then check(d) end checktree(d) end end end end -- collector code local function push(fulltag,depth) local tag, n = lpegmatch(dashsplitter,fulltag) local tg, detail = lpegmatch(colonsplitter,tag) local element, nature if detail then local pd = properties[tag] local pt = properties[tg] element = pd and pd.export or pt and pt.export or tg nature = pd and pd.nature or pt and pt.nature or defaultnature else local p = properties[tg] element = p and p.export or tg nature = p and p.nature or "inline" end local treedata = tree.data local t = { tg = tg, fulltag = fulltag, detail = detail, n = tonumber(n), -- more efficient element = element, nature = nature, data = { }, attribute = currentattribute, parnumber = currentparagraph, } treedata[#treedata+1] = t currentdepth = currentdepth + 1 nesting[currentdepth] = fulltag treestack[currentdepth] = tree if trace_export then if detail and detail ~= "" then report_export("%w<%s trigger=%a paragraph=%a index=%a detail=%a>",currentdepth-1,fulltag,currentattribute or 0,currentparagraph or 0,#treedata,detail) else report_export("%w<%s trigger=%a paragraph=%a index=%a>",currentdepth-1,fulltag,currentattribute or 0,currentparagraph or 0,#treedata) end end tree = t if tg == "break" then -- no need for this else local h = treehash[fulltag] if h then h[#h+1] = t else treehash[fulltag] = { t } end end end local function pop() local top = nesting[currentdepth] tree = treestack[currentdepth] currentdepth = currentdepth - 1 if trace_export then if top then report_export("%w",currentdepth,top) else report_export("",top) end end end local function continueexport() if nofcurrentcontent > 0 then if trace_export then report_export("%w",currentdepth) end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " -- pagebreak end end local function pushentry(current) if current then if restart then continueexport() restart = false end local newdepth = #current local olddepth = currentdepth if trace_export then report_export("%w",currentdepth,olddepth,newdepth,current[newdepth]) end if olddepth <= 0 then for i=1,newdepth do push(current[i],i) end else local difference if olddepth < newdepth then for i=1,olddepth do if current[i] ~= nesting[i] then difference = i break end end else for i=1,newdepth do if current[i] ~= nesting[i] then difference = i break end end end if difference then for i=olddepth,difference,-1 do pop() end for i=difference,newdepth do push(current[i],i) end elseif newdepth > olddepth then for i=olddepth+1,newdepth do push(current[i],i) end elseif newdepth < olddepth then for i=olddepth,newdepth,-1 do pop() end elseif trace_export then report_export("%w",currentdepth,newdepth,nesting[newdepth] or "?") end end return olddepth, newdepth end end local function pushcontent(currentparagraph,newparagraph) if nofcurrentcontent > 0 then if currentparagraph then if currentcontent[nofcurrentcontent] == "\n" then if trace_export then report_export("%w",currentdepth) end nofcurrentcontent = nofcurrentcontent - 1 end end local content = concat(currentcontent,"",1,nofcurrentcontent) if content == "" then -- omit; when currentparagraph we could push, remove spaces, pop elseif somespace[content] and currentparagraph then -- omit; when currentparagraph we could push, remove spaces, pop else local olddepth, newdepth local list = taglist[currentattribute] if list then olddepth, newdepth = pushentry(list) end local td = tree.data local nd = #td td[nd+1] = { parnumber = currentparagraph, content = content } if trace_export then report_export("%w",currentdepth,#content) report_export("%w%s",currentdepth,(gsub(content,"\n","\\n"))) report_export("%w",currentdepth) end if olddepth then for i=newdepth-1,olddepth,-1 do pop() end end end nofcurrentcontent = 0 end if currentparagraph then pushentry(makebreaklist(currentnesting)) if trace_export then report_export("%w",currentdepth,currentparagraph,newparagraph) end end end local function finishexport() if trace_export then report_export("%w",currentdepth) end if nofcurrentcontent > 0 then if somespace[currentcontent[nofcurrentcontent]] then if trace_export then report_export("%w",currentdepth) end nofcurrentcontent = nofcurrentcontent - 1 end pushcontent() end for i=currentdepth,1,-1 do pop() end currentcontent = { } -- we're nice and do a cleanup if trace_export then report_export("%w",currentdepth) end end -- whatsit_code localpar_code local function collectresults(head,list) -- is last used (we also have currentattribute) local p for n in traverse_nodes(head) do local id = n.id -- 14: image, 8: literal (mp) if id == glyph_code then local at = n[a_tagged] if not at then -- we need to tag the pagebody stuff as being valid skippable -- -- report_export("skipping character: %C (no attribute)",n.char) else -- we could add tonunicodes for ligatures (todo) local components = n.components if components then -- we loose data collectresults(components,nil) else local c = n.char if last ~= at then local tl = taglist[at] pushcontent() currentnesting = tl currentparagraph = n[a_taggedpar] currentattribute = at last = at pushentry(currentnesting) if trace_export then report_export("%w",currentdepth,c,at) end -- We need to intercept this here; maybe I will also move this -- to a regular setter at the tex end. local r = n[a_reference] if r then referencehash[tl[#tl]] = r -- fulltag end -- elseif last then local ap = n[a_taggedpar] if ap ~= currentparagraph then pushcontent(currentparagraph,ap) pushentry(currentnesting) currentattribute = last currentparagraph = ap end if trace_export then report_export("%w",currentdepth,c,last) end else if trace_export then report_export("%w",currentdepth,c,at) end end local s = n[a_exportstatus] if s then c = s end if c == 0 then if trace_export then report_export("%w",currentdepth) end elseif c == 0x20 then local a = n[a_characters] nofcurrentcontent = nofcurrentcontent + 1 if a then if trace_export then report_export("%w",currentdepth,a) end currentcontent[nofcurrentcontent] = specialspaces[a] -- special space else currentcontent[nofcurrentcontent] = " " end else local fc = fontchar[n.font] if fc then fc = fc and fc[c] if fc then local u = fc.tounicode if u and u ~= "" then nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = utfchar(fromunicode16(u)) else nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = utfchar(c) end else -- weird, happens in hz (we really need to get rid of the pseudo fonts) nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = utfchar(c) end else nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = utfchar(c) end end end end elseif id == disc_code then -- probably too late if keephyphens then local pre = n.pre if pre and not pre.next and pre.id == glyph_code and pre.char == hyphencode then nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = hyphen end end collectresults(n.replace,nil) elseif id == glue_code then -- we need to distinguish between hskips and vskips local ca = n[a_characters] if ca == 0 then -- skip this one ... already converted special character (node-acc) elseif ca then local a = n[a_tagged] if a then local c = specialspaces[ca] if last ~= a then local tl = taglist[a] if trace_export then report_export("%w",currentdepth,ca,a) end pushcontent() currentnesting = tl currentparagraph = n[a_taggedpar] currentattribute = a last = a pushentry(currentnesting) -- no reference check (see above) elseif last then local ap = n[a_taggedpar] if ap ~= currentparagraph then pushcontent(currentparagraph,ap) pushentry(currentnesting) currentattribute = last currentparagraph = ap end if trace_export then report_export("%w",currentdepth,ca,last) end end -- if somespace[currentcontent[nofcurrentcontent]] then -- if trace_export then -- report_export("%w",currentdepth) -- end -- nofcurrentcontent = nofcurrentcontent - 1 -- end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = c end else local subtype = n.subtype if subtype == userskip_code then if n.spec.width > threshold then if last and not somespace[currentcontent[nofcurrentcontent]] then local a = n[a_tagged] if a == last then if trace_export then report_export("%w",currentdepth) end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " elseif a then -- e.g LOGOLOGO if trace_export then report_export("%w",currentdepth,last,a) end pushcontent() if trace_export then report_export("%w",currentdepth) end last = a nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " currentnesting = taglist[last] pushentry(currentnesting) currentattribute = last end end end elseif subtype == spaceskip_code or subtype == xspaceskip_code then if not somespace[currentcontent[nofcurrentcontent]] then local a = n[a_tagged] if a == last then if trace_export then report_export("%w",currentdepth) end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " else if trace_export then report_export("%w",currentdepth) end last = a pushcontent() nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " currentnesting = taglist[last] pushentry(currentnesting) currentattribute = last end end elseif subtype == rightskip_code then -- a line if nofcurrentcontent > 0 then local r = currentcontent[nofcurrentcontent] if r == hyphen then if not keephyphens then nofcurrentcontent = nofcurrentcontent - 1 end elseif not somespace[r] then local a = n[a_tagged] if a == last then if trace_export then report_export("%w",currentdepth) end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " else if trace_export then report_export("%w",currentdepth) end last = a pushcontent() nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " currentnesting = taglist[last] pushentry(currentnesting) currentattribute = last end end end elseif subtype == parfillskip_code then -- deal with paragaph endings (crossings) elsewhere and we quit here -- as we don't want the rightskip space addition return end end elseif id == hlist_code or id == vlist_code then local ai = n[a_image] if ai then local at = n[a_tagged] if nofcurrentcontent > 0 then pushcontent() pushentry(currentnesting) -- ?? end pushentry(taglist[at]) -- has an index, todo: flag empty element if trace_export then report_export("%w",currentdepth,kern) end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " end elseif a then -- e.g LOGOLOGO if trace_export then report_export("%w",currentdepth,limit,last,a) end last = a pushcontent() if trace_export then report_export("%w",currentdepth,kern) end nofcurrentcontent = nofcurrentcontent + 1 currentcontent[nofcurrentcontent] = " " currentnesting = taglist[last] pushentry(currentnesting) currentattribute = last end end end end end p = n end end function nodes.handlers.export(head) -- hooks into the page builder starttiming(treehash) if trace_export then report_export("%w",currentdepth) end -- continueexport() restart = true collectresults(head) if trace_export then report_export("%w",currentdepth) end stoptiming(treehash) return head, true end function builders.paragraphs.tag(head) noftextblocks = noftextblocks + 1 for n in traverse_id(hlist_code,head) do local subtype = n.subtype if subtype == line_code then n[a_textblock] = noftextblocks elseif subtype == glue_code or subtype == kern_code then n[a_textblock] = 0 end end return false end -- encoding='utf-8' local xmlpreamble = [[ ]] local function wholepreamble() return format(xmlpreamble,tex.jobname,os.date(),environment.version,exportversion) end local csspreamble = [[ ]] local function allusedstylesheets(xmlfile,cssfiles,files) local result = { } for i=1,#cssfiles do local cssfile = cssfiles[i] if type(cssfile) ~= "string" or cssfile == variables.yes or cssfile == "" or cssfile == xmlfile then cssfile = file.replacesuffix(xmlfile,"css") else cssfile = file.addsuffix(cssfile,"css") end files[#files+1] = cssfile report_export("adding css reference '%s'",cssfile) result[#result+1] = format(csspreamble,cssfile) end return concat(result) end local e_template = [[ %s { display: %s ; }]] local d_template = [[ %s[detail=%s] { display: %s ; }]] local displaymapping = { inline = "inline", display = "block", mixed = "inline", } local function allusedelements(xmlfile) local result = { format("/* template for file %s */",xmlfile) } for element, details in sortedhash(used) do result[#result+1] = format("/* category: %s */",element) for detail, nature in sortedhash(details) do local d = displaymapping[nature or "display"] or "block" if detail == "" then result[#result+1] = formatters[e_template](element,d) else result[#result+1] = formatters[d_template](element,detail,d) end end end return concat(result,"\n\n") end local function allcontent(tree) local result = { } flushtree(result,tree.data,"display",0) -- we need to collect images result = concat(result) result = gsub(result,"\n *\n","\n") result = gsub(result,"\n +([^< ])","\n%1") return result end -- local xhtmlpreamble = [[ -- -- ]] local function cleanxhtmltree(xmltree) if xmltree then local xmlwrap = xml.wrap for e in xml.collected(xmltree,"/document") do e.at["xmlns:xhtml"] = "http://www.w3.org/1999/xhtml" break end -- todo: inject xhtmlpreamble (xmlns should have be enough) local wrapper = { tg = "a", ns = "xhtml", at = { href = "unknown" } } for e in xml.collected(xmltree,"link") do local at = e.at local href if at.location then href = "#" .. gsub(at.location,":","_") elseif at.url then href = at.url elseif at.file then href = at.file end if href then wrapper.at.href = href xmlwrap(e,wrapper) end end local wrapper = { tg = "a", ns = "xhtml", at = { name = "unknown" } } for e in xml.collected(xmltree,"!link[@location]") do local location = e.at.location if location then wrapper.at.name = gsub(location,":","_") xmlwrap(e,wrapper) end end return xmltree else return xml.convert("\ninvalid xhtml tree") end end local cssfile, xhtmlfile = nil, nil directives.register("backend.export.css", function(v) cssfile = v end) directives.register("backend.export.xhtml",function(v) xhtmlfile = v end) local function stopexport(v) starttiming(treehash) -- finishexport() -- collapsetree(tree) indextree(tree) checktree(tree) breaktree(tree) finalizetree(tree) -- hashlistdata() -- if type(v) ~= "string" or v == variables.yes or v == "" then v = tex.jobname end local basename = file.basename(v) local xmlfile = file.addsuffix(basename,"export") -- local imagefilename = file.addsuffix(file.removesuffix(xmlfile) .. "-images","css") local stylefilename = file.addsuffix(file.removesuffix(xmlfile) .. "-styles","css") local templatefilename = file.replacesuffix(xmlfile,"template") local specificationfilename = file.replacesuffix(xmlfile,"specification") -- if xhtml and not cssfile then cssfile = true end local cssfiles = { } if cssfile then if cssfile == true then cssfiles = { "export-example.css" } else cssfiles = settings_to_array(cssfile or "") end insert(cssfiles,1,imagefilename) insert(cssfiles,1,stylefilename) end cssfiles = table.unique(cssfiles) -- local result = allcontent(tree) -- also does some housekeeping and data collecting -- local files = { } local results = concat { wholepreamble(), allusedstylesheets(xmlfile,cssfiles,files), -- ads to files result, } -- files = table.unique(files) -- report_export("saving xml data in %a",xmlfile) io.savedata(xmlfile,results) -- report_export("saving css image definitions in %a",imagefilename) io.savedata(imagefilename,allusedimages(xmlfile)) -- report_export("saving css style definitions in %a",stylefilename) io.savedata(stylefilename,allusedstyles(xmlfile)) -- report_export("saving css template in %a",templatefilename) io.savedata(templatefilename,allusedelements(xmlfile)) -- if xhtmlfile then if type(v) ~= "string" or xhtmlfile == true or xhtmlfile == variables.yes or xhtmlfile == "" or xhtmlfile == xmlfile then xhtmlfile = file.replacesuffix(xmlfile,"xhtml") else xhtmlfile = file.addsuffix(xhtmlfile,"xhtml") end files[#files+1] = xhtmlfile report_export("saving xhtml variant in %a",xhtmlfile) local xmltree = cleanxhtmltree(xml.convert(results)) xml.save(xmltree,xhtmlfile) -- looking at identity is somewhat redundant as we also inherit from interaction -- at the tex end local identity = interactions.general.getidentity() local specification = { name = file.removesuffix(v), identifier = os.uuid(), images = uniqueusedimages(), root = xhtmlfile, files = files, language = languagenames[tex.count.mainlanguagenumber], title = validstring(finetuning.title) or validstring(identity.title), subtitle = validstring(finetuning.subtitle) or validstring(identity.subtitle), author = validstring(finetuning.author) or validstring(identity.author), firstpage = validstring(finetuning.firstpage), lastpage = validstring(finetuning.lastpage), } report_export("saving specification in %a (mtxrun --script epub --make %s)",specificationfilename,specificationfilename) io.savedata(specificationfilename,table.serialize(specification,true)) end stoptiming(treehash) end local appendaction = nodes.tasks.appendaction local enableaction = nodes.tasks.enableaction function commands.setupexport(t) table.merge(finetuning,t) keephyphens = finetuning.hyphen == variables.yes end local function startexport(v) if v and not exporting then report_export("enabling export to xml") -- not yet known in task-ini appendaction("shipouts","normalizers", "nodes.handlers.export") -- enableaction("shipouts","nodes.handlers.export") enableaction("shipouts","nodes.handlers.accessibility") enableaction("math", "noads.handlers.tags") --~ appendaction("finalizers","lists","builders.paragraphs.tag") --~ enableaction("finalizers","builders.paragraphs.tag") luatex.registerstopactions(function() stopexport(v) end) exporting = true end end directives.register("backend.export",startexport) -- maybe .name statistics.register("xml exporting time", function() if exporting then return format("%s seconds, version %s", statistics.elapsedtime(treehash),exportversion) end end) -- These are called at the tex end: commands.settagitemgroup = structurestags.setitemgroup commands.settagsynonym = structurestags.setsynonym commands.settagsorting = structurestags.setsorting commands.settagdescription = structurestags.setdescription commands.settagdescriptionsymbol = structurestags.setdescriptionsymbol commands.settaghighlight = structurestags.sethighlight commands.settagfigure = structurestags.setfigure commands.settagcombination = structurestags.setcombination commands.settagtablecell = structurestags.settablecell commands.settagtabulatecell = structurestags.settabulatecell context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-tex.lua0000644000175000017500000001150711571377075024720 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-imp-tex'] = { version = 1.001, comment = "companion to v-tex.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local P, S, V, patterns = lpeg.P, lpeg.S, lpeg.V, lpeg.patterns local context = context local verbatim = context.verbatim local makepattern = visualizers.makepattern local makenested = visualizers.makenested local getvisualizer = visualizers.getvisualizer local TexSnippet = context.TexSnippet local startTexSnippet = context.startTexSnippet local stopTexSnippet = context.stopTexSnippet local TexSnippetName = verbatim.TexSnippetName local TexSnippetGroup = verbatim.TexSnippetGroup local TexSnippetBoundary = verbatim.TexSnippetBoundary local TexSnippetSpecial = verbatim.TexSnippetSpecial local TexSnippetComment = verbatim.TexSnippetComment local handler = visualizers.newhandler { startinline = function() TexSnippet(false,"{") end, stopinline = function() context("}") end, startdisplay = function() startTexSnippet() end, stopdisplay = function() stopTexSnippet() end , name = function(s) TexSnippetName(s) end, group = function(s) TexSnippetGroup(s) end, boundary = function(s) TexSnippetBoundary(s) end, special = function(s) TexSnippetSpecial(s) end, comment = function(s) TexSnippetComment(s) end, } -- todo: unicode letters in control sequences (slow as we need to test the nature) local comment = S("%") local name = P("\\") * (patterns.letter + S("@!?"))^1 local escape = P("\\") * (patterns.anything - patterns.newline)^-1 -- else we get \n local group = S("${}") local boundary = S('[]()<>#="') local special = S("/^_-&+'`|") local p_comment = makepattern(handler,"comment",comment) * (V("space") + V("content"))^0 local p_name = makepattern(handler,"name",name) local p_escape = makepattern(handler,"name",escape) local p_group = makepattern(handler,"group",group) local p_boundary = makepattern(handler,"boundary",boundary) local p_special = makepattern(handler,"special",special) local p_somespace = V("newline") * V("emptyline")^0 * V("beginline") + V("space") --~ local pattern = visualizers.pattern local grammar = visualizers.newgrammar("default", { "visualizer", comment = p_comment, name = p_name, escape = p_escape, group = p_group, boundary = p_boundary, special = p_special, somespace = p_somespace, pattern = V("comment") + V("name") + V("escape") + V("group") + V("boundary") + V("special") + V("newline") * V("emptyline")^0 * V("beginline") + V("space") + V("default"), visualizer = V("pattern")^1 } ) local parser = P(grammar) visualizers.register("tex", { parser = parser, handler = handler, grammar = grammar } ) local function makecommand(handler,how,start,left,right) local c, l, r, f = P(start), P(left), P(right), how local n = ( P { l * ((1 - (l + r)) + V(1))^0 * r } + P(1-r) )^0 if type(how) == "string" then f = function(s) getvisualizer(how,"direct")(s) end end return makepattern(handler,"name",c) * V("somespace")^0 * makepattern(handler,"group",l) * (n/f) * makepattern(handler,"group",r) end local grammar = visualizers.newgrammar("default", { "visualizer", comment = p_comment, name = p_name, escape = p_escape, group = p_group, boundary = p_boundary, special = p_special, somespace = p_somespace, mpcode = makenested(handler,"mp","\\startMPcode","\\stopMPcode") + makenested(handler,"mp","\\startMPgraphic","\\stopMPgraphic") + makenested(handler,"mp","\\startuseMPgraphic","\\stopuseMPgraphic") + makenested(handler,"mp","\\startreusableMPgraphic","\\stopreusableMPgraphic") + makenested(handler,"mp","\\startuniqueMPgraphic","\\stopuniqueMPgraphic") + makenested(handler,"mp","\\startMPpage","\\stopMPpage"), luacode = makenested (handler,"lua","\\startluacode","\\stopluacode") + makecommand(handler,"lua","\\ctxlua","{","}"), pattern = V("comment") + V("mpcode") + V("luacode") + V("name") + V("escape") + V("group") + V("boundary") + V("special") + V("newline") * V("emptyline")^0 * V("beginline") + V("space") + V("default"), visualizer = V("pattern")^1 } ) local parser = P(grammar) visualizers.register("context", { parser = parser, handler = handler, grammar = grammar } ) context-2013.05.28.20130704/texmf-dist/tex/context/base/scrp-cjk.lua0000644000175000017500000010542412161703335024117 0ustar norbertnorbertif not modules then modules = { } end modules ['scrp-cjk'] = { version = 1.001, comment = "companion to scrp-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- We can speed this up by preallocating nodes and copying them but the -- gain is not that large. -- The input line endings: there is no way to distinguish between -- inline spaces and endofline turned into spaces (would not make -- sense either because otherwise a wanted space at the end of a -- line would have to be a hard coded ones. local utfchar = utf.char local insert_node_after = node.insert_after local insert_node_before = node.insert_before local remove_node = nodes.remove local nodepool = nodes.pool local new_glue = nodepool.glue local new_kern = nodepool.kern local new_penalty = nodepool.penalty local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue local userskip_code = skipcodes.userskip local a_scriptstatus = attributes.private('scriptstatus') local a_scriptinjection = attributes.private('scriptinjection') local categorytonumber = scripts.categorytonumber local numbertocategory = scripts.numbertocategory local hash = scripts.hash local numbertodataset = scripts.numbertodataset local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local quaddata = fonthashes.quads local spacedata = fonthashes.spaces local trace_details = false trackers.register("scripts.details", function(v) trace_details = v end) local report_details = logs.reporter("scripts","detail") -- raggedleft is controlled by leftskip and we might end up with a situation where -- the intercharacter spacing interferes with this; the solution is to patch the -- nodelist but better is to use veryraggedleft local inter_char_shrink = 0 local inter_char_stretch = 0 local inter_char_half_shrink = 0 local inter_char_half_stretch = 0 local inter_char_quarter_shrink = 0 local inter_char_quarter_stretch = 0 local full_char_width = 0 local half_char_width = 0 local quarter_char_width = 0 local inter_char_hangul_penalty = 0 local function set_parameters(font,data) -- beware: parameters can be nil in e.g. punk variants local quad = quaddata[font] full_char_width = quad half_char_width = quad/2 quarter_char_width = quad/4 inter_char_shrink = data.inter_char_shrink_factor * quad inter_char_stretch = data.inter_char_stretch_factor * quad inter_char_half_shrink = data.inter_char_half_shrink_factor * quad inter_char_half_stretch = data.inter_char_half_stretch_factor * quad inter_char_quarter_shrink = data.inter_char_quarter_shrink_factor * quad inter_char_quarter_stretch = data.inter_char_quarter_stretch_factor * quad inter_char_hangul_penalty = data.inter_char_hangul_penalty end -- a test version did compensate for crappy halfwidth but we can best do that -- at font definition time and/or just assume a correct font local function trace_detail(current,what) local prev = current.prev local c_id = current.id local p_id = prev and prev.id if c_id == glyph_code then local c_ch = current.char if p_id == glyph_code then local p_ch = p_id and prev.char report_details("[%C %a] [%s] [%C %a]",p_ch,hash[p_ch],what,c_ch,hash[c_ch]) else report_details("[%s] [%C %a]",what,c_ch,hash[c_ch]) end else if p_id == glyph_code then local p_ch = p_id and prev.char report_details("[%C %a] [%s]",p_ch,hash[p_ch],what) else report_details("[%s]",what) end end end local function trace_detail_between(p,n,what) local p_ch = p.char local n_ch = n.char report_details("[%C %a] [%s] [%C %a]",p_ch,hash[p_ch],what,n_ch,hash[n_ch]) end local function nobreak(head,current) if trace_details then trace_detail(current,"break") end insert_node_before(head,current,new_penalty(10000)) end local function stretch_break(head,current) if trace_details then trace_detail(current,"stretch break") end insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function shrink_break(head,current) if trace_details then trace_detail(current,"shrink break") end insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_stretch(head,current) if trace_details then trace_detail(current,"no break stretch") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function korean_break(head,current) if trace_details then trace_detail(current,"korean break") end insert_node_before(head,current,new_penalty(inter_char_hangul_penalty)) end local function nobreak_shrink(head,current) if trace_details then trace_detail(current,"nobreak shrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_autoshrink(head,current) if trace_details then trace_detail(current,"nobreak autoshrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_stretch_nobreak_shrink(head,current) if trace_details then trace_detail(current,"nobreak stretch nobreak shrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_stretch_nobreak_autoshrink(head,current) if trace_details then trace_detail(current,"nobreak stretch nobreak autoshrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_shrink_nobreak_stretch(head,current) if trace_details then trace_detail(current,"nobreak shrink nobreak stretch") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function nobreak_autoshrink_nobreak_stretch(head,current) if trace_details then trace_detail(current,"nobreak autoshrink nobreak stretch") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function nobreak_shrink_break_stretch(head,current) if trace_details then trace_detail(current,"nobreak shrink break stretch") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function nobreak_autoshrink_break_stretch(head,current) if trace_details then trace_detail(current,"nobreak autoshrink break stretch") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function nobreak_shrink_break_stretch_nobreak_shrink(head,current) if trace_details then trace_detail(current,"nobreak shrink break stretch nobreak shrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function japanese_between_full_close_open(head,current) -- todo: check width if trace_details then trace_detail(current,"japanese between full close open") end insert_node_before(head,current,new_kern(-half_char_width)) insert_node_before(head,current,new_glue(half_char_width,0,inter_char_half_shrink)) insert_node_before(head,current,new_kern(-half_char_width)) end local function japanese_between_full_close_full_close(head,current) -- todo: check width if trace_details then trace_detail(current,"japanese between full close full close") end insert_node_before(head,current,new_kern(-half_char_width)) -- insert_node_before(head,current,new_glue(half_char_width,0,inter_char_half_shrink)) end local function japanese_before_full_width_punct(head,current) -- todo: check width if trace_details then trace_detail(current,"japanese before full width punct") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(quarter_char_width,0,inter_char_quarter_shrink)) insert_node_before(head,current,new_kern(-quarter_char_width)) end local function japanese_after_full_width_punct(head,current) -- todo: check width if trace_details then trace_detail(current,"japanese after full width punct") end insert_node_before(head,current,new_kern(-quarter_char_width)) insert_node_before(head,current,new_glue(quarter_char_width,0,inter_char_quarter_shrink)) end local function nobreak_autoshrink_break_stretch_nobreak_autoshrink(head,current) if trace_details then trace_detail(current,"nobreak autoshrink break stretch nobreak autoshrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_autoshrink_break_stretch_nobreak_shrink(head,current) if trace_details then trace_detail(current,"nobreak autoshrink break stretch nobreak shrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_shrink_break_stretch_nobreak_autoshrink(head,current) if trace_details then trace_detail(current,"nobreak shrink break stretch nobreak autoshrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) end local function nobreak_stretch_break_shrink(head,current) if trace_details then trace_detail(current,"nobreak stretch break shrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end local function nobreak_stretch_break_autoshrink(head,current) if trace_details then trace_detail(current,"nobreak stretch break autoshrink") end insert_node_before(head,current,new_penalty(10000)) insert_node_before(head,current,new_glue(0,inter_char_stretch,0)) insert_node_before(head,current,new_glue(0,0,inter_char_half_shrink)) end -- Korean: hangul local korean_0 = { } local korean_1 = { jamo_initial = korean_break, korean = korean_break, chinese = korean_break, hiragana = korean_break, katakana = korean_break, half_width_open = stretch_break, half_width_close = nobreak, full_width_open = stretch_break, full_width_close = nobreak, full_width_punct = nobreak, -- hyphen = nil, non_starter = korean_break, other = korean_break, } local korean_2 = { jamo_initial = stretch_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = stretch_break, half_width_close = nobreak, full_width_open = stretch_break, full_width_close = nobreak, full_width_punct = nobreak, -- hyphen = nil, non_starter = stretch_break, other = stretch_break, } local korean_3 = { jamo_initial = stretch_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = stretch_break, half_width_close = nobreak, full_width_open = stretch_break, full_width_close = nobreak, full_width_punct = nobreak, -- hyphen = nil, non_starter = nobreak, other = nobreak, } local korean_4 = { jamo_initial = nobreak, korean = nobreak, chinese = nobreak, hiragana = nobreak, katakana = nobreak, half_width_open = nobreak, half_width_close = nobreak, full_width_open = nobreak, full_width_close = nobreak, full_width_punct = nobreak, hyphen = nobreak, non_starter = nobreak, other = nobreak, } local korean_5 = { jamo_initial = stretch_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = stretch_break, half_width_close = nobreak_stretch, full_width_open = stretch_break, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, hyphen = nobreak_stretch, non_starter = nobreak_stretch, other = stretch_break, } local injectors = { -- [previous] [current] jamo_final = korean_1, korean = korean_1, chinese = korean_1, hiragana = korean_1, katakana = korean_1, hyphen = korean_2, start = korean_0, other = korean_2, non_starter = korean_3, full_width_open = korean_4, half_width_open = korean_4, full_width_close = korean_5, full_width_punct = korean_5, half_width_close = korean_5, } local function process(head,first,last) if first ~= last then local lastfont, previous, last = nil, "start", nil while true do local upcoming, id = first.next, first.id if id == glyph_code then local a = first[a_scriptstatus] local current = numbertocategory[a] local action = injectors[previous] if action then action = action[current] if action then local font = first.font if font ~= lastfont then lastfont = font set_parameters(font,numbertodataset[first[a_scriptinjection]]) end action(head,first) end end previous = current else -- glue local p, n = first.prev, upcoming if p and n then local pid, nid = p.id, n.id if pid == glyph_code and nid == glyph_code then local pa, na = p[a_scriptstatus], n[a_scriptstatus] local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na] if not pcjk or not ncjk or pcjk == "korean" or ncjk == "korean" or pcjk == "other" or ncjk == "other" or pcjk == "jamo_final" or ncjk == "jamo_initial" then previous = "start" else -- if head ~= first then remove_node(head,first,true) previous = pcjk -- else -- previous = pcjk end else previous = "start" end else previous = "start" end end if upcoming == last then -- was stop break else first = upcoming end end end end scripts.installmethod { name = "hangul", injector = process, datasets = { -- todo: metatables default = { inter_char_shrink_factor = 0.50, -- of quad inter_char_stretch_factor = 0.50, -- of quad inter_char_half_shrink_factor = 0.50, -- of quad inter_char_half_stretch_factor = 0.50, -- of quad inter_char_quarter_shrink_factor = 0.50, -- of quad inter_char_quarter_stretch_factor = 0.50, -- of quad inter_char_hangul_penalty = 50, }, }, } -- Chinese: hanzi local chinese_0 = { } local chinese_1 = { jamo_initial = korean_break, korean = korean_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, -- hyphen = nil, non_starter = nobreak_stretch, other = stretch_break, } local chinese_2 = { jamo_initial = korean_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, hyphen = nobreak_stretch, non_starter = nobreak_stretch, other = stretch_break, } local chinese_3 = { jamo_initial = korean_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, -- hyphen = nil, non_starter = nobreak_stretch, other = stretch_break, } local chinese_4 = { -- jamo_initial = nil, -- korean = nil, -- chinese = nil, -- hiragana = nil, -- katakana = nil, half_width_open = nobreak_autoshrink, half_width_close = nil, full_width_open = nobreak_shrink, full_width_close = nobreak, full_width_punct = nobreak, -- hyphen = nil, non_starter = nobreak, -- other = nil, } local chinese_5 = { jamo_initial = stretch_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, -- hyphen = nil, non_starter = nobreak_stretch, other = stretch_break, } local chinese_6 = { jamo_initial = nobreak_stretch, korean = nobreak_stretch, chinese = nobreak_stretch, hiragana = nobreak_stretch, katakana = nobreak_stretch, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, hyphen = nobreak_stretch, non_starter = nobreak_stretch, other = nobreak_stretch, } local chinese_7 = { jami_initial = nobreak_shrink_break_stretch, korean = nobreak_shrink_break_stretch, chinese = stretch_break, -- nobreak_shrink_break_stretch, hiragana = stretch_break, -- nobreak_shrink_break_stretch, katakana = stretch_break, -- nobreak_shrink_break_stretch, half_width_open = nobreak_shrink_break_stretch_nobreak_autoshrink, half_width_close = nobreak_shrink_nobreak_stretch, full_width_open = nobreak_shrink_break_stretch_nobreak_shrink, full_width_close = nobreak_shrink_nobreak_stretch, full_width_punct = nobreak_shrink_nobreak_stretch, hyphen = nobreak_shrink_break_stretch, non_starter = nobreak_shrink_break_stretch, other = nobreak_shrink_break_stretch, } local chinese_8 = { jami_initial = nobreak_shrink_break_stretch, korean = nobreak_autoshrink_break_stretch, chinese = stretch_break, -- nobreak_autoshrink_break_stretch, hiragana = stretch_break, -- nobreak_autoshrink_break_stretch, katakana = stretch_break, -- nobreak_autoshrink_break_stretch, half_width_open = nobreak_autoshrink_break_stretch_nobreak_autoshrink, half_width_close = nobreak_autoshrink_nobreak_stretch, full_width_open = nobreak_autoshrink_break_stretch_nobreak_shrink, full_width_close = nobreak_autoshrink_nobreak_stretch, full_width_punct = nobreak_autoshrink_nobreak_stretch, hyphen = nobreak_autoshrink_break_stretch, non_starter = nobreak_autoshrink_break_stretch, other = nobreak_autoshrink_break_stretch, } local injectors = { -- [previous] [current] jamo_final = chinese_1, korean = chinese_1, chinese = chinese_2, hiragana = chinese_2, katakana = chinese_2, hyphen = chinese_3, start = chinese_4, other = chinese_5, non_starter = chinese_5, full_width_open = chinese_6, half_width_open = chinese_6, full_width_close = chinese_7, full_width_punct = chinese_7, half_width_close = chinese_8, } local function process(head,first,last) if first ~= last then local lastfont, previous, last = nil, "start", nil while true do local upcoming, id = first.next, first.id if id == glyph_code then local a = first[a_scriptstatus] local current = numbertocategory[a] local action = injectors[previous] if action then action = action[current] if action then local font = first.font if font ~= lastfont then lastfont = font set_parameters(font,numbertodataset[first[a_scriptinjection]]) end action(head,first) end end previous = current else -- glue local p, n = first.prev, upcoming if p and n then local pid, nid = p.id, n.id if pid == glyph_code and nid == glyph_code then local pa, na = p[a_scriptstatus], n[a_scriptstatus] local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na] if not pcjk or not ncjk or pcjk == "korean" or ncjk == "korean" or pcjk == "other" or ncjk == "other" or pcjk == "jamo_final" or ncjk == "jamo_initial" or pcjk == "half_width_close" or ncjk == "half_width_open" then -- extra compared to korean previous = "start" else -- if head ~= first then remove_node(head,first,true) previous = pcjk -- else -- previous = pcjk end else previous = "start" end else previous = "start" end end if upcoming == last then -- was stop break else first = upcoming end end end end scripts.installmethod { name = "hanzi", injector = process, datasets = { default = { inter_char_shrink_factor = 0.50, -- of quad inter_char_stretch_factor = 0.50, -- of quad inter_char_half_shrink_factor = 0.50, -- of quad inter_char_half_stretch_factor = 0.50, -- of quad inter_char_quarter_shrink_factor = 0.50, -- of quad inter_char_quarter_stretch_factor = 0.50, -- of quad inter_char_hangul_penalty = 50, }, }, } -- Japanese: idiographic, hiragana, katakana, romanji / jis local japanese_0 = { } local japanese_1 = { jamo_initial = korean_break, korean = korean_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, -- hyphen = nil, non_starter = nobreak_stretch, other = stretch_break, } local japanese_2 = { jamo_initial = korean_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = japanese_before_full_width_punct, -- nobreak_stretch, hyphen = nobreak_stretch, non_starter = nobreak_stretch, other = stretch_break, } local japanese_3 = { jamo_initial = korean_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, -- hyphen = nil, non_starter = nobreak_stretch, other = stretch_break, } local japanese_4 = { -- jamo_initial = nil, -- korean = nil, -- chinese = nil, -- hiragana = nil, -- katakana = nil, half_width_open = nobreak_autoshrink, half_width_close = nil, full_width_open = nobreak_shrink, full_width_close = nobreak, full_width_punct = nobreak, -- hyphen = nil, non_starter = nobreak, -- other = nil, } local japanese_5 = { jamo_initial = stretch_break, korean = stretch_break, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, -- hyphen = nil, non_starter = nobreak_stretch, other = stretch_break, } local japanese_6 = { jamo_initial = nobreak_stretch, korean = nobreak_stretch, chinese = nobreak_stretch, hiragana = nobreak_stretch, katakana = nobreak_stretch, half_width_open = nobreak_stretch_break_autoshrink, half_width_close = nobreak_stretch, full_width_open = nobreak_stretch_break_shrink, full_width_close = nobreak_stretch, full_width_punct = nobreak_stretch, hyphen = nobreak_stretch, non_starter = nobreak_stretch, other = nobreak_stretch, } local japanese_7 = { jami_initial = nobreak_shrink_break_stretch, korean = nobreak_shrink_break_stretch, chinese = japanese_after_full_width_punct, -- stretch_break hiragana = japanese_after_full_width_punct, -- stretch_break katakana = japanese_after_full_width_punct, -- stretch_break half_width_open = nobreak_shrink_break_stretch_nobreak_autoshrink, half_width_close = nobreak_shrink_nobreak_stretch, full_width_open = japanese_between_full_close_open, -- !! full_width_close = japanese_between_full_close_full_close, -- nobreak_shrink_nobreak_stretch, full_width_punct = nobreak_shrink_nobreak_stretch, hyphen = nobreak_shrink_break_stretch, non_starter = nobreak_shrink_break_stretch, other = nobreak_shrink_break_stretch, } local japanese_8 = { jami_initial = nobreak_shrink_break_stretch, korean = nobreak_autoshrink_break_stretch, chinese = stretch_break, hiragana = stretch_break, katakana = stretch_break, half_width_open = nobreak_autoshrink_break_stretch_nobreak_autoshrink, half_width_close = nobreak_autoshrink_nobreak_stretch, full_width_open = nobreak_autoshrink_break_stretch_nobreak_shrink, full_width_close = nobreak_autoshrink_nobreak_stretch, full_width_punct = nobreak_autoshrink_nobreak_stretch, hyphen = nobreak_autoshrink_break_stretch, non_starter = nobreak_autoshrink_break_stretch, other = nobreak_autoshrink_break_stretch, } local injectors = { -- [previous] [current] jamo_final = japanese_1, korean = japanese_1, chinese = japanese_2, hiragana = japanese_2, katakana = japanese_2, hyphen = japanese_3, start = japanese_4, other = japanese_5, non_starter = japanese_5, full_width_open = japanese_6, half_width_open = japanese_6, full_width_close = japanese_7, full_width_punct = japanese_7, half_width_close = japanese_8, } local function process(head,first,last) if first ~= last then local lastfont, previous, last = nil, "start", nil while true do local upcoming, id = first.next, first.id if id == glyph_code then local a = first[a_scriptstatus] local current = numbertocategory[a] local action = injectors[previous] if action then action = action[current] if action then local font = first.font if font ~= lastfont then lastfont = font set_parameters(font,numbertodataset[first[a_scriptinjection]]) end action(head,first) end end previous = current -- elseif id == math_code then -- upcoming = end_of_math(current).next -- previous = "start" else -- glue local p, n = first.prev, upcoming -- we should remember prev if p and n then local pid, nid = p.id, n.id if pid == glyph_code and nid == glyph_code then local pa, na = p[a_scriptstatus], n[a_scriptstatus] local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na] if not pcjk or not ncjk or pcjk == "korean" or ncjk == "korean" or pcjk == "other" or ncjk == "other" or pcjk == "jamo_final" or ncjk == "jamo_initial" or pcjk == "half_width_close" or ncjk == "half_width_open" then -- extra compared to korean previous = "start" else -- if head ~= first then if id == glue_code and first.subtype == userskip_code then -- also scriptstatus check? -- for the moment no distinction possible between space and userskip local w = first.spec.width local s = spacedata[p.font] if w == s then -- could be option if trace_details then trace_detail_between(p,n,"space removed") end remove_node(head,first,true) end end previous = pcjk -- else -- previous = pcjk end else previous = "start" end else previous = "start" end end if upcoming == last then -- was stop break else first = upcoming end end end end scripts.installmethod { name = "nihongo", -- what name to use? injector = process, datasets = { default = { inter_char_shrink_factor = 0.50, -- of quad inter_char_stretch_factor = 0.50, -- of quad inter_char_half_shrink_factor = 0.50, -- of quad inter_char_half_stretch_factor = 0.50, -- of quad inter_char_quarter_shrink_factor = 0.25, -- of quad inter_char_quarter_stretch_factor = 0.25, -- of quad inter_char_hangul_penalty = 50, }, }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mak.mkvi0000644000175000017500000001401312130411274024235 0ustar norbertnorbert%D \module %D [ file=page-mak, % copied from main-001, %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Simple MakeUp, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / MakeUp} \unprotect %D \macros %D {definemakeup, setupmakeup, startmakeup} %D %D A makeup is a separate page, like a title page or colofon. %D There is one standard makeup page, but you can define more %D if needed. %D %D \starttyping %D \startstandardmakeup %D My Fancy Title %D \stopstandardmakeup %D \stoptyping %D %D The associated commands are: %D %D \showsetup{definemakeup} %D \showsetup{setupmakeup} %D \showsetup{startmakeup} %D New is that we have a layout with the same name so one can set %D up a special layout tthat then gets used. \installcorenamespace{makeup} \installcorenamespace{makeupdoublesided} \installcommandhandler \??makeup {makeup} \??makeup \appendtoks \setuevalue{\e!start\currentmakeup\e!makeup}{\startmakeup[\currentmakeup]}% \setuevalue{\e!stop \currentmakeup\e!makeup}{\stopmakeup}% \doiflayoutdefinedelse\currentmakeup\donothing{\definelayout[\currentmakeup]}% new \to \everydefinemakeup %D The \type{\start}||\type{\stop} macros are used for both %D the direct and indirect way. The parameterless call will %D build a simple box. \unexpanded\def\startmakeup {\dodoubleempty\page_makeup_start} \let\stopmakeup\relax \def\page_makeup_start {\iffirstargument \expandafter\page_makeup_start_yes \else \expandafter\page_makeup_start_nop \fi} %D The simple case: just a box with text dimensions. \unexpanded\def\page_makeup_start_nop[#name][#settings]% dummies {\page \setupheader[\c!state=\v!empty]% \setupfooter[\c!state=\v!empty]% \bgroup \forgetall % else indented flush \dontcomplain \vbox to \textheight \bgroup \setsystemmode\v!makeup \hsize\textwidth \let\stopmakeup\page_makeup_stop_nop} \unexpanded\def\page_makeup_stop_nop {\egroup \egroup \page} %D The normal variant. \newbox \b_page_makeup \newtoks\t_page_makeup_every_setup \def\page_makeup_start_yes[#name]% [#settings]% {\doifelsecommandhandler\??makeup{#name}\page_makeup_start_indeed\page_makeup_start_nop[#name]}% \def\page_makeup_start_indeed[#name][#settings]% {\doifelsenothing{\namedmakeupparameter{#name}\c!page} {\page}% new, so best not have dangling mess here like references (we could capture then and flush embedded) {\page[\namedmakeupparameter{#name}\c!page]}% \startlayout[#name]% includes \page \bgroup \edef\currentmakeup{#name}% \setupcurrentmakeup[#settings]% \setsystemmode\v!makeup \the\t_page_makeup_every_setup \makeupparameter\c!commands % hm, what is this one doing here ? \forgetall % else indented flush \dontcomplain \global\setbox\b_page_makeup\vbox to \makeupparameter\c!height \bgroup \usemakeupstyleandcolor\c!style\c!color \hsize\makeupparameter\c!width \usealignparameter\makeupparameter \usesetupsparameter\makeupparameter % lua(..),xml(...,..),tex(..) \makeupparameter\c!top \let\stopmakeup\page_makeup_stop_yes} \unexpanded\def\page_makeup_stop_yes {\endgraf \makeupparameter\c!bottom \egroup \strc_pagenumbers_page_state_push % new \makeupparameter\c!before\relax \begingroup \ifdim\ht\b_page_makeup>\vsize \ht\b_page_makeup\vsize % is already set to \textheight (maybe set dp to 0) \fi \setuppagenumber[\c!state=\makeupparameter\c!pagestate]% \doif{\makeupparameter\c!location}\v!top{\topskip\zeropoint}% \edef\p_reference{\makeupparameter\c!reference}% \dontleavehmode \usereferenceparameter\makeupparameter \box\b_page_makeup % could be whole box being destination \the\t_page_makeup_every_setup \page \endgroup \makeupparameter\c!after\relax \ifdoublesided \ifodd\realpageno \else \getvalue{\??makeupdoublesided\makeupparameter\c!doublesided}% \fi \fi \strc_pagenumbers_page_state_pop % new \egroup \stoplayout} % includes \page \setvalue{\??makeupdoublesided\v!yes}% {\emptyhbox \page} \setvalue{\??makeupdoublesided\v!empty}% {\the\t_page_makeup_every_setup % == \page[\v!dummy] \page[\v!blank]% \emptyhbox \page} %D The text surrounding the main body text can be influenced %D by setting their associated status variables. The %D connection between them is made by the following macro \appendtoks % this might need a revision \setupfooter[\c!state=\makeupparameter\c!footerstate]% \setupheader[\c!state=\makeupparameter\c!headerstate]% \setuptext [\c!state=\makeupparameter\c!textstate]% \setupbottom[\c!state=\makeupparameter\c!bottomstate]% \setuptop [\c!state=\makeupparameter\c!topstate]% \to \t_page_makeup_every_setup %D The standard page template is defined as follows: \setupmakeup [\c!width=\innermakeupwidth, % example in manual / was \makeupwidth \c!height=\textheight, % example in manual %\c!commands=, %\c!setups=, %\c!color=, %\c!align=, %\c!before=, %\c!after=, %\c!location=, \c!page=\v!right, \c!doublesided=\v!empty, \c!top=\vss, \c!bottom=\vss, \c!bottomstate=\v!normal, \c!topstate=\v!normal, \c!textstate=\v!normal, \c!headerstate=\v!stop, \c!footerstate=\v!stop, \c!pagestate=\v!stop] % in manual ! ! ! \definemakeup [\v!standard] [\c!width=\innermakeupwidth, \c!height=\textheight, \c!page=\v!right, \c!doublesided=\v!empty] \definemakeup [\v!text] [\c!topstate=\v!start, \c!headerstate=\v!start, \c!textstate=\v!start, \c!footerstate=\v!start, \c!bottomstate=\v!start, \c!doublesided=\v!no, \c!page=\v!yes, \c!top=\pseudostrut\ignorespaces, \c!bottom=\obeydepth\vss] \definemakeup [\v!page] [] \definemakeup [\v!middle] [\v!standard] % \definelayout[standard] % \definelayout[text] \protect context-2013.05.28.20130704/texmf-dist/tex/context/base/page-ins.lua0000644000175000017500000000537112130411274024100 0ustar norbertnorbertif not modules then modules = { } end modules ['page-ins'] = { version = 1.001, comment = "companion to page-mix.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", -- public = { -- functions = { -- "inserts.define", -- "inserts.getdata", -- }, -- commands = { -- "defineinsertion", -- "inserttionnumber", -- } -- } } -- Maybe we should only register in lua and forget about the tex end. structures = structures or { } structures.inserts = structures.inserts or { } local inserts = structures.inserts local report_inserts = logs.reporter("inserts") local allocate = utilities.storage.allocate inserts.stored = inserts.stored or allocate { } -- combining them in one is inefficient in the inserts.data = inserts.data or allocate { } -- bytecode storage pool local variables = interfaces.variables local v_page = variables.page local v_columns = variables.columns local v_firstcolumn = variables.firstcolumn local v_lastcolumn = variables.lastcolumn local v_text = variables.text storage.register("structures/inserts/stored", inserts.stored, "structures.inserts.stored") local data = inserts.data local stored = inserts.stored for name, specification in next, stored do data[specification.number] = specification data[name] = specification end function inserts.define(name,specification) specification.name= name local number = specification.number or 0 data[name] = specification data[number] = specification -- only needed at runtime as this get stored in a bytecode register stored[name] = specification if not specification.location then specification.location = v_page end return specification end function inserts.setup(name,settings) local specification = data[name] for k, v in next, settings do -- maybe trace change specification[k] = v end return specification end function inserts.setlocation(name,location) -- a practical fast one data[name].location = location end function inserts.getlocation(name,location) return data[name].location or v_page end function inserts.getdata(name) -- or number return data[name] end function inserts.getname(number) return data[name].name end function inserts.getnumber(name) return data[name].number end -- interface commands.defineinsertion = inserts.define commands.setupinsertion = inserts.setup commands.setinsertionlocation = inserts.setlocation commands.insertionnumber = function(name) context(data[name].number or 0) end context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-005.mkii0000644000175000017500000000245011754241457024017 0ustar norbertnorbert%D \module %D [ file=unic-005, %D version=2005.01.27, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 5, %D author=Adam Lindsay, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startunicodevector 5 \expandafter\strippedcsname \ifcase\numexpr#1-208\relax % Was 224 - changed to fix off-by-16 error \hebrewAlef \or % 05D0 \hebrewBet \or \hebrewGimel \or \hebrewDalet \or \hebrewHe \or \hebrewVav \or \hebrewZayin \or \hebrewHet \or \hebrewTet \or \hebrewYod \or \hebrewKaffinal \or \hebrewKaf \or \hebrewLamed \or \hebrewMemfinal \or \hebrewMem \or \hebrewNunfinal \or \hebrewNun \or \hebrewSamekh \or \hebrewAyin \or \hebrewPefinal \or \hebrewPe \or \hebrewTsadifinal \or \hebrewTsadi \or \hebrewQof \or \hebrewResh \or \hebrewShin \or \hebrewTav \else % 05EA \unknownchar \fi \stopunicodevector \protect \endinputcontext-2013.05.28.20130704/texmf-dist/tex/context/base/s-abr-03.tex0000644000175000017500000000076511754241457023661 0ustar norbertnorbert%D \module %D [ file=s-abr-03, %D version=1998.08.10, %D title=\CONTEXT\ Style File, %D subtitle=General Abbreviations 3, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[abr-01] \unprotect \setupsorting[logo][\c!style=\v!WORD] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-lin.mkiv0000644000175000017500000000746511754241457024315 0ustar norbertnorbert%D \module %D [ file=spac-lin, %D version=2012.01.08, % 2009.10.16 (core-ver) 1997.03.31 (core-spa) %D title=\CONTEXT\ Spacing Macros, %D subtitle=Vertical, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Spacing Macros / Lines} \unprotect %D When spacing is active we need to handle commands in %D a special way: %D %D \starttyping %D \setuplines[space=on] %D %D \startlines %D Let's talk about this{\ttsl\gobbleoneargument or}that. %D \stoplines %D %D \startlines %D Let's talk about this{\getvalue{ttsl}or}that. %D \stoplines %D \stoptyping %D %D One can indent in several ways: %D %D \starttyping %D \setupindenting[medium] \setuplines[indenting=odd] % no yes odd even %D %D \startlines %D first %D second %D third %D fourth %D \stoplines %D \stoptyping %D Contrary to \MKII\ we can now define classes of lines (generalized by %D Wolfgang). I will probably rewrite bits in \LUA. \installcorenamespace{lines} \installcommandhandler \??lines {lines} \??lines \setuplines [\c!option=, \c!command=, \c!before=\blank, \c!after=\blank, \c!inbetween=\blank, \c!indenting=\v!no, \c!space=\v!default] \appendtoks \setuevalue{\e!start\currentlines}{\spac_lines_start[\currentlines]}% \setuevalue{\e!stop \currentlines}{\spac_lines_stop}% \to \everydefinelines \unexpanded\def\spac_lines_start[#1]% {\bgroup \edef\currentlines{#1}% \obeylines \dosingleempty\spac_lines_start_indeed} \let\p_lines_option\empty \let\spac_lines_break \relax \let\spac_after_first_obeyed_line\relax \def\spac_lines_start_indeed[#1]% new: optional second argument (WS) {\iffirstargument \setupcurrentlines[#1]% \fi \edef\p_lines_option{\linesparameter\c!option}% \ifx\p_lines_option\v!packed \let\spac_lines_break\nobreak \else \let\spac_lines_break\relax \fi \linesparameter\c!before \pushmacro\checkindentation \whitespace \dostarttagged\t!lines\currentlines \begingroup \uselinesstyleandcolor\c!style\c!color \setupindenting[\linesparameter\c!indenting]% \setupalign[\linesparameter\c!align]% \typesettinglinestrue \setupwhitespace[\v!none]% %\obeylines % move upwards to keep spaces in the first line due to optional argument \ignorespaces \glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_a \let\obeyedline\spac_lines_obeyed_line \activatespacehandler{\linesparameter\c!space}% \dostarttagged\t!line\empty \GotoPar} % this will become a nice lowercased helper % we could have states instead and handle option in there \def\spac_lines_after_first_obeyed_line_a % tzt two pass, like itemize {\linesparameter\c!command \glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_b} \def\spac_lines_after_first_obeyed_line_b {\spac_lines_break \linesparameter\c!command} \def\spac_lines_obeyed_line {\dostoptagged \par \dostarttagged\t!line\empty \futurelet\next\spac_lines_between} \unexpanded\def\spac_lines_stop {\dostoptagged \endgroup \dostoptagged \popmacro\checkindentation \linesparameter\c!after \egroup} \def\spac_lines_between {\doifmeaningelse\next\obeyedline % brrr {\linesparameter\c!inbetween} {\spac_after_first_obeyed_line}} \definelines[\v!lines] \unexpanded\def\emptylines {\dosingleempty\spac_lines_empty} \def\spac_lines_empty[#1]% {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf} \ifdefined\startlines \else \expandafter\let\expandafter\startlines\csname\e!start\v!lines\endcsname \expandafter\let\expandafter\stoplines \csname\e!stop \v!lines\endcsname \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-sch.lua0000644000175000017500000001407212130411274024057 0ustar norbertnorbertif not modules then modules = { } end modules ['data-sch'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local load = load local gsub, concat, format = string.gsub, table.concat, string.format local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders local trace_schemes = false trackers.register("resolvers.schemes",function(v) trace_schemes = v end) local report_schemes = logs.reporter("resolvers","schemes") local http = require("socket.http") local ltn12 = require("ltn12") local resolvers = resolvers local schemes = resolvers.schemes or { } resolvers.schemes = schemes local cleaners = { } schemes.cleaners = cleaners local threshold = 24 * 60 * 60 directives.register("schemes.threshold", function(v) threshold = tonumber(v) or threshold end) function cleaners.none(specification) return specification.original end function cleaners.strip(specification) return (gsub(specification.original,"[^%a%d%.]+","-")) -- so we keep periods end function cleaners.md5(specification) return file.addsuffix(md5.hex(specification.original),file.suffix(specification.path)) end local cleaner = cleaners.strip directives.register("schemes.cleanmethod", function(v) cleaner = cleaners[v] or cleaners.strip end) function resolvers.schemes.cleanname(specification) local hash = cleaner(specification) if trace_schemes then report_schemes("hashing %a to %a",specification.original,hash) end return hash end local cached, loaded, reused, thresholds, handlers = { }, { }, { }, { }, { } local function runcurl(name,cachename) -- we use sockets instead or the curl library when possible local command = "curl --silent --create-dirs --output " .. cachename .. " " .. name os.spawn(command) end local function fetch(specification) local original = specification.original local scheme = specification.scheme local cleanname = schemes.cleanname(specification) local cachename = caches.setfirstwritablefile(cleanname,"schemes") if not cached[original] then statistics.starttiming(schemes) if not io.exists(cachename) or (os.difftime(os.time(),lfs.attributes(cachename).modification) > (thresholds[protocol] or threshold)) then cached[original] = cachename local handler = handlers[scheme] if handler then if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"built-in") end logs.flush() handler(specification,cachename) else if trace_schemes then report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl") end logs.flush() runcurl(original,cachename) end end if io.exists(cachename) then cached[original] = cachename if trace_schemes then report_schemes("using cached %a, protocol %a, cachename %a",original,scheme,cachename) end else cached[original] = "" if trace_schemes then report_schemes("using missing %a, protocol %a",original,scheme) end end loaded[scheme] = loaded[scheme] + 1 statistics.stoptiming(schemes) else if trace_schemes then report_schemes("reusing %a, protocol %a",original,scheme) end reused[scheme] = reused[scheme] + 1 end return cached[original] end local function finder(specification,filetype) return resolvers.methodhandler("finders",fetch(specification),filetype) end local opener = openers.file local loader = loaders.file local function install(scheme,handler,newthreshold) handlers [scheme] = handler loaded [scheme] = 0 reused [scheme] = 0 finders [scheme] = finder openers [scheme] = opener loaders [scheme] = loader thresholds[scheme] = newthreshold or threshold end schemes.install = install local function http_handler(specification,cachename) local tempname = cachename .. ".tmp" local f = io.open(tempname,"wb") local status, message = http.request { url = specification.original, sink = ltn12.sink.file(f) } if not status then os.remove(tempname) else os.remove(cachename) os.rename(tempname,cachename) end return cachename end install('http',http_handler) install('https') -- see pod install('ftp') statistics.register("scheme handling time", function() local l, r, nl, nr = { }, { }, 0, 0 for k, v in table.sortedhash(loaded) do if v > 0 then nl = nl + 1 l[nl] = k .. ":" .. v end end for k, v in table.sortedhash(reused) do if v > 0 then nr = nr + 1 r[nr] = k .. ":" .. v end end local n = nl + nr if n > 0 then l = nl > 0 and concat(l) or "none" r = nr > 0 and concat(r) or "none" return format("%s seconds, %s processed, threshold %s seconds, loaded: %s, reused: %s", statistics.elapsedtime(schemes), n, threshold, l, r) else return nil end end) -- We provide a few more helpers: ----- http = require("socket.http") local httprequest = http.request local toquery = url.toquery -- local function httprequest(url) -- return os.resultof(format("curl --silent %q", url)) -- end local function fetchstring(url,data) local q = data and toquery(data) if q then url = url .. "?" .. q end local reply = httprequest(url) return reply -- just one argument end schemes.fetchstring = fetchstring function schemes.fetchtable(url,data) local reply = fetchstring(url,data) if reply then local s = load("return " .. reply) if s then return s() end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-sel.mkvi0000644000175000017500000003356612130411274024266 0ustar norbertnorbert%D \module %D [ file=page-sel, % moved from page-imp %D version=1998.01.15, %D title=\CONTEXT\ Page Macros, %D subtitle=Page Selection, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code relates to old texexec features and one can wonder if it needs %D to be in the core. So, this could become runtime loaded code. Some of %D the alternatives need checking. \writestatus{loading}{ConTeXt Page Macros / Page Selection} \unprotect %D One can (mis)use this mechanism to (re)arrange pages of already produced %D files. %D %D \starttyping %D \insertpages[file.pdf][1,3][n=30,width=18cm] %D \stoptyping %D %D The pages are inserted in the text area, and even pages are repositioned %D according to the width. In this example empty pages are added after page %D 1 and 3. %D %D Selecting pages can be accomplished by: %D %D \starttyping %D \filterpages[file.pdf][1,3,5][n=30,width=18cm] %D \stoptyping %D %D One may pass \type {odd} or \type {even} instead of a comma separated list. A %D third alternative is: %D %D \starttyping %D \copypages[file.pdf][n=30,scale=950] %D \stoptyping %D %D This macros inserts the page, according to the settings provided. \installcorenamespace{withpages} \installsetuponlycommandhandler \??withpages {withpages} % \installdirectcommandhandler \??withpages {withpages} \newcount\c_page_selectors_n \unexpanded\def\insertpages {\dotripleempty\page_selectors_insert} \def\page_selectors_insert[#filename][#emptylist][#settings]% {\doifassignmentelse{#emptylist} {\page_selectors_insert_indeed[#filename][][#emptylist]} {\page_selectors_insert_indeed[#filename][#emptylist][#settings]}} \def\page_selectors_insert_indeed[#filename][#emptylist][#settings]% {\bgroup \dontcomplain \getfiguredimensions[#filename]% \setupcurrentwithpages[\c!width=\zeropoint,\c!n=\noffigurepages,#settings]% \global\c_page_selectors_n\directwithpagesparameter\c!n\relax \scratchwidth\directwithpagesparameter\c!width\relax \doifinset0{#emptylist} {\emptyhbox\page}% \dorecurse\c_page_selectors_n {\page_selectors_filter_a_page{#filename}\recurselevel \doifinset\recurselevel{#emptylist} {\emptyhbox\page}}% \egroup} \unexpanded\def\filterpages {\dotripleempty\page_selectors_filter} \def\page_selectors_filter[#filename][#selection][#settings]% % \noffigurepages not yet supported {\bgroup \dontcomplain \getfiguredimensions[#filename]% \setupcurrentwithpages[\c!width=\zeropoint,\c!n=\noffigurepages,#settings]% \global\c_page_selectors_n\directwithpagesparameter\c!n\relax \scratchwidth\directwithpagesparameter\c!width\relax \edef\p_selection{#selection}% \ifx\p_selection\v!even \dorecurse\c_page_selectors_n {\ifodd\recurselevel\else \page_selectors_filter_a_page{#filename}\recurselevel \fi}% \else\ifx\p_selection\v!odd \dorecurse\c_page_selectors_n {\ifodd\recurselevel\relax \page_selectors_filter_a_page{#filename}\recurselevel \fi}% \else \def\page_selectors_filter_step_indeed#page% {\ifnum#page>\c_page_selectors_n\else \page_selectors_filter_a_page{#filename}{#page}% \fi}% \def\page_selectors_filter_step#step% {\dowithrange{#step}\page_selectors_filter_step_indeed}% \processcommacommand[\p_selection]\page_selectors_filter_step \fi\fi \egroup} \def\page_selectors_filter_a_page#filename#page% {\hbox to \textwidth {\ifdim\scratchwidth>\zeropoint \rightorleftpageaction{\scratchwidth\zeropoint}{\hfill}% \fi \setbox\scratchbox\hbox {\hskip-\scratchwidth \externalfigure[#filename][\c!page=#page,\c!height=\textheight]\hss}% \wd\scratchbox\zeropoint \box\scratchbox} \page} \unexpanded\def\copypages {\dotripleempty\page_selectors_copy} \def\page_selectors_copy[#filename][#settings][#figuresettings]% {\bgroup \getfiguredimensions[#filename]% \setupcurrentwithpages[\c!marking=\v!off,\c!offset=\zeropoint,\c!n=\noffigurepages,#settings]% \global\c_page_selectors_n\directwithpagesparameter\c!n\relax \scratchoffset\directwithpagesparameter\c!offset\relax \dorecurse\c_page_selectors_n {\vbox to \textheight {\hsize\textwidth \centeredbox {\doifelse{\directwithpagesparameter\c!marking}\v!on\cuthbox\hbox % only place where cuthbox is used {\ifdim\scratchoffset>\zeropoint\relax \advance\vsize -2\scratchoffset \advance\hsize -2\scratchoffset \externalfigure[#filename][\c!page=\recurselevel,#figuresettings,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]% \else \externalfigure[#filename][\c!page=\recurselevel,#figuresettings,\c!offset=\v!overlay]% \fi}}} \page} \egroup} %D \macros %D {combinepages} %D %D Yet another way of postprocessing is handles by \type {\combinepages}. This macro %D builds a matrix of pages from a file, for example: %D %D \starttyping %D \setuppapersize %D [A4][A4] % or [A4,landscape][A4,landscape] %D %D \setuplayout %D [header=0pt,footer=1cm, %D backspace=1cm,topspace=1cm, %D width=middle,height=middle] %D %D \setupfootertexts %D [presentation---\currentdate\space---\space\pagenumber] %D %D \starttext %D \combinepages[slides][nx=2,ny=3,frame=on] %D \stoptext %D \stoptyping %D %D One can influence the way the pages are combined. (This will be explained some %D time.) \installcorenamespace{combinepagesalternative} \unexpanded\def\combinepages {\dodoubleempty\page_selectors_combine} \def\page_selectors_combine[#filename][#settings]% a=perpag b=free {\bgroup \dontcomplain \getfiguredimensions[#filename]% \setupcurrentwithpages [\c!alternative=\v!a, \c!n=\noffigurepages,\c!nx=\plustwo,\c!ny=\plustwo, \c!start=\plusone,\c!stop=\maxcard, \c!distance=\bodyfontsize, \c!bottom=\vfill,\c!top=\vss,\c!left=\hss,\c!right=\hss, \c!before=\page,\c!after=\page,\c!inbetween=\blank, \c!frame=,\c!background=,\c!backgroundcolor=, \c!name={#filename}, #settings]% \global\c_page_selectors_n\directwithpagesparameter\c!n\relax \directwithpagesparameter\c!before \scratchnx\directwithpagesparameter\c!nx \scratchny\directwithpagesparameter\c!ny \scratchdistance\directwithpagesparameter\c!distance\relax \scratchwidth\dimexpr(\textwidth-\scratchnx\scratchdistance+\scratchdistance)/\scratchnx\relax \scratchheight\dimexpr(\textheight-\scratchny\scratchdistance+\scratchdistance)/\scratchny\relax \expandnamespaceparameter\??combinepagesalternative\directwithpagesparameter\c!alternative\v!b \directwithpagesparameter\c!after \egroup} \setvalue{\??combinepagesalternative\v!a}% {\global\combinedpagescounter\directwithpagesparameter\c!start\relax \doloop {\vbox to \textheight {\dorecurse\scratchny {\hbox to \textwidth {\dorecurse\scratchnx {\vbox to \scratchheight {\hsize\scratchwidth \vsize\scratchheight \directwithpagesparameter\c!top \hbox to \hsize {\directwithpagesparameter\c!left \ifnum\combinedpagescounter>\directwithpagesparameter\c!stop\relax \global\c_page_selectors_n\zerocount \else\ifnum\combinedpagescounter>\c_page_selectors_n \else \externalfigure [\directwithpagesparameter\c!name] [\c!object=\v!no, \c!page=\number\combinedpagescounter, \c!factor=\v!max, \c!background=\directwithpagesparameter\c!background, \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor, \c!frame=\directwithpagesparameter\c!frame]% \fi\fi \directwithpagesparameter\c!right} \directwithpagesparameter\c!bottom}% \global\advance\combinedpagescounter\plusone \hfil}% \hfilneg} \vfil}% \vfilneg}% \page \ifnum\combinedpagescounter>\c_page_selectors_n \exitloop \fi}} \setvalue{\??combinepagesalternative\v!c}% {\global\combinedpagescounter\directwithpagesparameter\c!start\relax \doloop {\vbox to \textheight {\hbox to \textwidth {\dorecurse\scratchnx {\directwithpagesparameter\c!left \vbox to \textheight {\hsize\scratchwidth \dorecurse\scratchny {\directwithpagesparameter\c!top \hbox to \hsize {\vbox to \scratchheight {\hsize\scratchwidth \vsize\scratchheight \ifnum\combinedpagescounter>\directwithpagesparameter\c!stop\relax \global\c_page_selectors_n\zerocount \else\ifnum\combinedpagescounter>\c_page_selectors_n \else \externalfigure [\directwithpagesparameter\c!name] [\c!object=\v!no, \c!page=\number\combinedpagescounter, \c!factor=\v!max, \c!background=\directwithpagesparameter\c!background, \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor, \c!frame=\directwithpagesparameter\c!frame]% \fi\fi}} \global\advance\combinedpagescounter\plusone \directwithpagesparameter\c!bottom}}% \hfil}% \hfilneg}}% \page \ifnum\combinedpagescounter>\c_page_selectors_n \exitloop \fi}} \setvalue{\??combinepagesalternative\v!horizontal}{\getvalue{\??combinepagesalternative\v!a}} \setvalue{\??combinepagesalternative\v!vertical }{\getvalue{\??combinepagesalternative\v!c}} \setvalue{\??combinepagesalternative\v!b}% {\global\combinedpagescounter\directwithpagesparameter\c!start\relax \doloop {\startbaselinecorrection \hbox to \textwidth {\dorecurse\scratchnx {\global\advance\combinedpagescounter\plusone \ifnum\combinedpagescounter>\c_page_selectors_n \else \normalexpanded{\externalfigure [\directwithpagesparameter\c!name] [\c!page=\number\combinedpagescounter, \c!width=\the\scratchwidth, \c!background=\directwithpagesparameter\c!background, \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor, \c!frame=\directwithpagesparameter\c!frame]}% \hfill \fi}% \hfillneg}% \stopbaselinecorrection \ifnum\combinedpagescounter<\c_page_selectors_n\relax \directwithpagesparameter\c!inbetween \else \exitloop \fi}} % This macro cuts a page into n parts that can be pasted together. \unexpanded\def\slicepages {\dotripleempty\page_selectors_slice} \def\page_selectors_slice[#filename][#oddsettings][#evensettings]% {\ifthirdargument \page_selectors_slice_indeed[#filename][#oddsettings][#evensettings]% \else \page_selectors_slice_indeed[#filename][#oddsettings][#oddsettings]% \fi} \let\slicedpagenumber\!!zerocount \let\slicedpagestepx \!!zerocount \let\slicedpagestepy \!!zerocount \def\page_selectors_slice_indeed[#filename][#oddsettings][#evensettings]% {\bgroup \dontcomplain \global\let\slicedpagenumber\!!zerocount \getfiguredimensions[#filename]% \setupcurrentwithpages [\c!offset=\zeropoint,\c!hoffset=\zeropoint,\c!voffset=\zeropoint, \c!width=\figurewidth,\c!height=\figureheight,\c!n=\noffigurepages,#oddsettings]% \global\c_page_selectors_n\directwithpagesparameter\c!n\relax \ifnum\c_page_selectors_n>\zerocount \definepapersize [\s!dummy][\c!height=\directwithpagesparameter\c!height,\c!width=\directwithpagesparameter\c!width]% \setuppapersize [\s!dummy][\s!dummy]% \setuplayout [\c!backspace=\zeropoint,\c!topspace=\zeropoint, \c!height=\v!middle,\c!width=\v!middle, \c!textdistance=\zeropoint, \c!header=\zeropoint,\c!footer=\zeropoint]% \fi \dorecurse\noffigurepages {\global\let\slicedpagenumber\recurselevel \ifnum\c_page_selectors_n>\plusone \dorecurse\c_page_selectors_n {\let\slicedpagestepx\recurselevel \dorecurse\c_page_selectors_n {\let\slicedpagestepy\recurselevel \clip [\c!nx=\c_page_selectors_n,\c!ny=\c_page_selectors_n,\c!x=\slicedpagestepx,\c!y=\slicedpagestepy] {\scale [\c!scale=\number\c_page_selectors_n000] {\externalfigure[#filename][\c!page=\slicedpagenumber]}}% \page}}% \else \ifodd\slicedpagenumber\relax \setupcurrentwithpages[#oddsettings]% \else \setupcurrentwithpages[#evensettings]% \fi \hskip\directwithpagesparameter\c!offset\relax \clip [\c!hoffset=\directwithpagesparameter\c!hoffset,\c!voffset=\directwithpagesparameter\c!voffset, \c!height=\directwithpagesparameter\c!height,\c!width=\directwithpagesparameter\c!width] {\externalfigure[#filename][\c!page=\slicedpagenumber]}% \page \fi} \egroup} % \starttext \slicepages[slice1.pdf][n=3] \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/data-exp.lua0000644000175000017500000003447612132111075024106 0ustar norbertnorbertif not modules then modules = { } end modules ['data-exp'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } local format, find, gmatch, lower, char, sub = string.format, string.find, string.gmatch, string.lower, string.char, string.sub local concat, sort = table.concat, table.sort local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local Ct, Cs, Cc, P, C, S = lpeg.Ct, lpeg.Cs, lpeg.Cc, lpeg.P, lpeg.C, lpeg.S local type, next = type, next local ostype = os.type local collapsepath = file.collapsepath local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end) local trace_expansions = false trackers.register("resolvers.expansions", function(v) trace_expansions = v end) local report_expansions = logs.reporter("resolvers","expansions") local resolvers = resolvers -- As this bit of code is somewhat special it gets its own module. After -- all, when working on the main resolver code, I don't want to scroll -- past this every time. See data-obs.lua for the gsub variant. local function f_first(a,b) local t, n = { }, 0 for s in gmatch(b,"[^,]+") do n = n + 1 ; t[n] = a .. s end return concat(t,",") end local function f_second(a,b) local t, n = { }, 0 for s in gmatch(a,"[^,]+") do n = n + 1 ; t[n] = s .. b end return concat(t,",") end -- kpsewhich --expand-braces '{a,b}{c,d}' -- ac:bc:ad:bd -- old {a,b}{c,d} => ac ad bc bd -- -- local function f_both(a,b) -- local t, n = { }, 0 -- for sa in gmatch(a,"[^,]+") do -- for sb in gmatch(b,"[^,]+") do -- n = n + 1 ; t[n] = sa .. sb -- end -- end -- return concat(t,",") -- end -- -- new {a,b}{c,d} => ac bc ad bd local function f_both(a,b) local t, n = { }, 0 for sb in gmatch(b,"[^,]+") do -- and not sa for sa in gmatch(a,"[^,]+") do -- sb n = n + 1 ; t[n] = sa .. sb end end return concat(t,",") end local left = P("{") local right = P("}") local var = P((1 - S("{}" ))^0) local set = P((1 - S("{},"))^0) local other = P(1) local l_first = Cs( ( Cc("{") * (C(set) * left * C(var) * right / f_first) * Cc("}") + other )^0 ) local l_second = Cs( ( Cc("{") * (left * C(var) * right * C(set) / f_second) * Cc("}") + other )^0 ) local l_both = Cs( ( Cc("{") * (left * C(var) * right * left * C(var) * right / f_both) * Cc("}") + other )^0 ) local l_rest = Cs( ( left * var * (left/"") * var * (right/"") * var * right + other )^0 ) local stripper_1 = lpeg.stripper ("{}@") local replacer_1 = lpeg.replacer { { ",}", ",@}" }, { "{,", "{@," }, } local function splitpathexpr(str, newlist, validate) -- I couldn't resist lpegging it (nice exercise). if trace_expansions then report_expansions("expanding variable %a",str) end local t, ok, done = newlist or { }, false, false local n = #t str = lpegmatch(replacer_1,str) repeat local old = str repeat local old = str str = lpegmatch(l_first, str) until old == str repeat local old = str str = lpegmatch(l_second,str) until old == str repeat local old = str str = lpegmatch(l_both, str) until old == str repeat local old = str str = lpegmatch(l_rest, str) until old == str until old == str -- or not find(str,"{") str = lpegmatch(stripper_1,str) if validate then for s in gmatch(str,"[^,]+") do s = validate(s) if s then n = n + 1 t[n] = s end end else for s in gmatch(str,"[^,]+") do n = n + 1 t[n] = s end end if trace_expansions then for k=1,#t do report_expansions("% 4i: %s",k,t[k]) end end return t end -- We could make the previous one public. local function validate(s) s = collapsepath(s) -- already keeps the trailing / and // return s ~= "" and not find(s,"^!*unset/*$") and s end resolvers.validatedpath = validate -- keeps the trailing // function resolvers.expandedpathfromlist(pathlist) local newlist = { } for k=1,#pathlist do splitpathexpr(pathlist[k],newlist,validate) end return newlist end -- {a,b,c,d} -- a,b,c/{p,q,r},d -- a,b,c/{p,q,r}/d/{x,y,z}// -- a,b,c/{p,q/{x,y,z},r},d/{p,q,r} -- a,b,c/{p,q/{x,y,z},r},d/{p,q,r} -- a{b,c}{d,e}f -- {a,b,c,d} -- {a,b,c/{p,q,r},d} -- {a,b,c/{p,q,r}/d/{x,y,z}//} -- {a,b,c/{p,q/{x,y,z}},d/{p,q,r}} -- {a,b,c/{p,q/{x,y,z},w}v,d/{p,q,r}} -- {$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c} local cleanup = lpeg.replacer { { "!" , "" }, { "\\" , "/" }, } function resolvers.cleanpath(str) -- tricky, maybe only simple paths local doslashes = (P("\\")/"/" + 1)^0 local donegation = (P("!") /"" )^0 local homedir = lpegmatch(Cs(donegation * doslashes),environment.homedir or "") if homedir == "~" or homedir == "" or not lfs.isdir(homedir) then if trace_expansions then report_expansions("no home dir set, ignoring dependent paths") end function resolvers.cleanpath(str) if not str or find(str,"~") then return "" -- special case else return lpegmatch(cleanup,str) end end else local dohome = ((P("~")+P("$HOME"))/homedir)^0 local cleanup = Cs(donegation * dohome * doslashes) function resolvers.cleanpath(str) return str and lpegmatch(cleanup,str) or "" end end return resolvers.cleanpath(str) end -- print(resolvers.cleanpath("")) -- print(resolvers.cleanpath("!")) -- print(resolvers.cleanpath("~")) -- print(resolvers.cleanpath("~/test")) -- print(resolvers.cleanpath("!~/test")) -- print(resolvers.cleanpath("~/test~test")) -- This one strips quotes and funny tokens. local expandhome = P("~") / "$HOME" -- environment.homedir or "home:" local dodouble = P('"')/"" * (expandhome + (1 - P('"')))^0 * P('"')/"" local dosingle = P("'")/"" * (expandhome + (1 - P("'")))^0 * P("'")/"" local dostring = (expandhome + 1 )^0 local stripper = Cs( lpegpatterns.unspacer * (dosingle + dodouble + dostring) * lpegpatterns.unspacer ) function resolvers.checkedvariable(str) -- assumes str is a string return type(str) == "string" and lpegmatch(stripper,str) or str end -- The path splitter: -- A config (optionally) has the paths split in tables. Internally -- we join them and split them after the expansion has taken place. This -- is more convenient. local cache = { } ----- splitter = lpeg.tsplitat(S(ostype == "windows" and ";" or ":;")) -- maybe add , local splitter = lpeg.tsplitat(";") -- as we move towards urls, prefixes and use tables we no longer do : local backslashswapper = lpeg.replacer("\\","/") local function splitconfigurationpath(str) -- beware, this can be either a path or a { specification } if str then local found = cache[str] if not found then if str == "" then found = { } else local split = lpegmatch(splitter,lpegmatch(backslashswapper,str)) -- can be combined found = { } local noffound = 0 for i=1,#split do local s = split[i] if not find(s,"^{*unset}*") then noffound = noffound + 1 found[noffound] = s end end if trace_expansions then report_expansions("splitting path specification %a",str) for k=1,noffound do report_expansions("% 4i: %s",k,found[k]) end end cache[str] = found end end return found end end resolvers.splitconfigurationpath = splitconfigurationpath function resolvers.splitpath(str) if type(str) == 'table' then return str else return splitconfigurationpath(str) end end function resolvers.joinpath(str) if type(str) == 'table' then return file.joinpath(str) else return str end end -- The next function scans directories and returns a hash where the -- entries are either strings or tables. -- starting with . or .. etc or funny char --~ local l_forbidden = S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t") --~ local l_confusing = P(" ") --~ local l_character = lpegpatterns.utf8 --~ local l_dangerous = P(".") --~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * P(-1) --~ ----- l_normal = l_normal * Cc(true) + Cc(false) --~ local function test(str) --~ print(str,lpegmatch(l_normal,str)) --~ end --~ test("ヒラギノ明朝 Pro W3") --~ test("..ヒラギノ明朝 Pro W3") --~ test(":ヒラギノ明朝 Pro W3;") --~ test("ヒラギノ明朝 /Pro W3;") --~ test("ヒラギノ明朝 Pro W3") -- a lot of this caching can be stripped away when we have ssd's everywhere -- -- we could cache all the (sub)paths here if needed local attributes, directory = lfs.attributes, lfs.dir local weird = P(".")^1 + lpeg.anywhere(S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t")) local timer = { } local scanned = { } local nofscans = 0 local scancache = { } local function scan(files,spec,path,n,m,r) local full = (path == "" and spec) or (spec .. path .. '/') local dirs = { } local nofdirs = 0 for name in directory(full) do if not lpegmatch(weird,name) then local mode = attributes(full..name,'mode') if mode == 'file' then n = n + 1 local f = files[name] if f then if type(f) == 'string' then files[name] = { f, path } else f[#f+1] = path end else -- probably unique anyway files[name] = path local lower = lower(name) if name ~= lower then files["remap:"..lower] = name r = r + 1 end end elseif mode == 'directory' then m = m + 1 nofdirs = nofdirs + 1 if path ~= "" then dirs[nofdirs] = path..'/'..name else dirs[nofdirs] = name end end end end if nofdirs > 0 then sort(dirs) for i=1,nofdirs do files, n, m, r = scan(files,spec,dirs[i],n,m,r) end end scancache[sub(full,1,-2)] = files return files, n, m, r end local fullcache = { } function resolvers.scanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath = resolvers.resolve(path) -- no shortcut if usecache then local files = fullcache[realpath] if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files, n, m, r = scan({ },realpath .. '/',"",0,0,0) files.__path__ = path -- can be selfautoparent:texmf-whatever files.__files__ = n files.__directories__ = m files.__remappings__ = r if trace_locating then report_expansions("%s files found on %s directories with %s uppercase remappings",n,m,r) end if usecache then scanned[#scanned+1] = realpath fullcache[realpath] = files end nofscans = nofscans + 1 statistics.stoptiming(timer) return files end local function simplescan(files,spec,path) -- first match only, no map and such local full = (path == "" and spec) or (spec .. path .. '/') local dirs = { } local nofdirs = 0 for name in directory(full) do if not lpegmatch(weird,name) then local mode = attributes(full..name,'mode') if mode == 'file' then if not files[name] then -- only first match files[name] = path end elseif mode == 'directory' then nofdirs = nofdirs + 1 if path ~= "" then dirs[nofdirs] = path..'/'..name else dirs[nofdirs] = name end end end end if nofdirs > 0 then sort(dirs) for i=1,nofdirs do files = simplescan(files,spec,dirs[i]) end end return files end local simplecache = { } local nofsharedscans = 0 function resolvers.simplescanfiles(path,branch,usecache) statistics.starttiming(timer) local realpath = resolvers.resolve(path) -- no shortcut if usecache then local files = simplecache[realpath] if not files then files = scancache[realpath] if files then nofsharedscans = nofsharedscans + 1 end end if files then if trace_locating then report_expansions("using caches scan of path %a, branch %a",path,branch or path) end return files end end if trace_locating then report_expansions("scanning path %a, branch %a",path,branch or path) end local files = simplescan({ },realpath .. '/',"") if trace_locating then report_expansions("%s files found",table.count(files)) end if usecache then scanned[#scanned+1] = realpath simplecache[realpath] = files end nofscans = nofscans + 1 statistics.stoptiming(timer) return files end function resolvers.scandata() table.sort(scanned) return { n = nofscans, shared = nofsharedscans, time = statistics.elapsedtime(timer), paths = scanned, } end --~ print(table.serialize(resolvers.scanfiles("t:/sources"))) context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-wrd.lua0000644000175000017500000002250412130411274024105 0ustar norbertnorbertif not modules then modules = { } end modules ['lang-wrd'] = { version = 1.001, comment = "companion to lang-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local lower = string.lower local utfchar = utf.char local concat = table.concat local lpegmatch = lpeg.match local P, S, Cs = lpeg.P, lpeg.S, lpeg.Cs local report_words = logs.reporter("languages","words") local nodes, node, languages = nodes, node, languages languages.words = languages.words or { } local words = languages.words words.data = words.data or { } words.enables = false words.threshold = 4 local numbers = languages.numbers local registered = languages.registered local traverse_nodes = node.traverse local wordsdata = words.data local chardata = characters.data local tasks = nodes.tasks local unsetvalue = attributes.unsetvalue local nodecodes = nodes.nodecodes local kerncodes = nodes.kerncodes local glyph_code = nodecodes.glyph local disc_code = nodecodes.disc local kern_code = nodecodes.kern local kerning_code = kerncodes.kerning local lowerchar = characters.lower local a_color = attributes.private('color') local colist = attributes.list[a_color] local is_letter = characters.is_letter -- maybe is_character as variant local spacing = S(" \n\r\t") local markup = S("-=") local lbrace = P("{") local rbrace = P("}") local disc = (lbrace * (1-rbrace)^0 * rbrace)^1 -- or just 3 times, time this local word = Cs((markup/"" + disc/"" + (1-spacing))^1) local loaded = { } -- we share lists function words.load(tag,filename) local fullname = resolvers.findfile(filename,'other text file') or "" if fullname ~= "" then report_words("loading word file %a",fullname) statistics.starttiming(languages) local list = loaded[fullname] if not list then list = wordsdata[tag] or { } local parser = (spacing + word/function(s) list[s] = true end)^0 lpegmatch(parser,io.loaddata(fullname) or "") loaded[fullname] = list end wordsdata[tag] = list statistics.stoptiming(languages) else report_words("missing word file %a",filename) end end function words.found(id, str) local tag = languages.numbers[id] if tag then local data = wordsdata[tag] if data then if data[str] then return 1 elseif data[lower(str)] then return 2 end end end end -- The following code is an adaption of experimental code for hyphenating and -- spell checking. -- there is an n=1 problem somewhere in nested boxes local function mark_words(head,whenfound) -- can be optimized and shared local current, language, done = head, nil, nil, 0, false local str, s, nds, n = { }, 0, { }, 0 -- n could also be a table, saves calls local function action() if s > 0 then local word = concat(str,"",1,s) local mark = whenfound(language,word) if mark then done = true for i=1,n do mark(nds[i]) end end end n, s = 0, 0 end while current do local id = current.id if id == glyph_code then local a = current.lang if a then if a ~= language then if s > 0 then action() end language = a end elseif s > 0 then action() language = a end local components = current.components if components then n = n + 1 nds[n] = current for g in traverse_nodes(components) do s = s + 1 str[s] = utfchar(g.char) end else local code = current.char local data = chardata[code] if is_letter[data.category] then n = n + 1 nds[n] = current s = s + 1 str[s] = utfchar(code) elseif s > 0 then action() end end elseif id == disc_code then -- take the replace if n > 0 then n = n + 1 nds[n] = current end elseif id == kern_code and current.subtype == kerning_code and s > 0 then -- ok elseif s > 0 then action() end current = current.next end if s > 0 then action() end return head, done end local methods = { } words.methods = methods local enablers = { } words.enablers = enablers local wordmethod = 1 local enabled = false function words.check(head) if enabled then return methods[wordmethod](head) else return head, false end end function words.enable(settings) local method = settings.method wordmethod = method and tonumber(method) or wordmethod or 1 local e = enablers[wordmethod] if e then e(settings) end tasks.enableaction("processors","languages.words.check") enabled = true end function words.disable() enabled = false end -- colors local cache = { } -- can also be done with method 1 -- frozen colors once used table.setmetatableindex(cache, function(t,k) -- k == language, numbers[k] == tag local c if type(k) == "string" then c = colist[k] elseif k < 0 then c = colist["word:unset"] else c = colist["word:" .. (numbers[k] or "unset")] or colist["word:unknown"] end local v = c and function(n) n[a_color] = c end or false t[k] = v return v end) -- method 1 local function sweep(language,str) if #str < words.threshold then return false elseif words.found(language,str) then -- can become a local wordsfound return cache["word:yes"] -- maybe variables.yes else return cache["word:no"] end end methods[1] = function(head) for n in traverse_nodes(head) do n[a_color] = unsetvalue -- hm, not that selective (reset color) end return mark_words(head,sweep) end -- method 2 local dumpname = nil local dumpthem = false local listname = "document" local category = { } local categories = { } setmetatable(categories, { __index = function(t,k) local languages = { } setmetatable(languages, { __index = function(t,k) local r = registered[k] local v = { number = language, parent = r and r.parent or nil, patterns = r and r.patterns or nil, tag = r and r.tag or nil, list = { }, total = 0, unique = 0, } t[k] = v return v end } ) local v = { languages = languages, total = 0, } t[k] = v return v end } ) local collected = { total = 0, version = 1.000, categories = categories, } enablers[2] = function(settings) local name = settings.list listname = name and name ~= "" and name or "document" category = collected.categories[listname] end local function sweep(language,str) if #str >= words.threshold then str = lowerchar(str) local words = category.languages[numbers[language] or "unset"] local list = words.list local ls = list[str] if ls then list[str] = ls + 1 else list[str] = 1 words.unique = words.unique + 1 end collected.total = collected.total + 1 category.total = category.total + 1 words.total = words.total + 1 end end methods[2] = function(head) dumpthem = true return mark_words(head,sweep) end local function dumpusedwords() if dumpthem then collected.threshold = words.threshold dumpname = dumpname or file.addsuffix(tex.jobname,"words") report_words("saving list of used words in %a",dumpname) io.savedata(dumpname,table.serialize(collected,true)) -- table.tofile(dumpname,list,true) end end directives.register("languages.words.dump", function(v) dumpname = type(v) == "string" and v ~= "" and v end) luatex.registerstopactions(dumpusedwords) -- method 3 local function sweep(language,str) return cache[language] end methods[3] = function(head) for n in traverse_nodes(head) do n[a_color] = unsetvalue end return mark_words(head,sweep) end -- for the moment we hook it into the attribute handler --~ languagehacks = { } --~ function languagehacks.process(namespace,attribute,head) --~ return languages.check(head) --~ end --~ chars.plugins[chars.plugins+1] = { --~ name = "language", --~ namespace = languagehacks, --~ processor = languagehacks.process --~ } -- interface commands.enablespellchecking = words.enable commands.disablespellchecking = words.disable commands.loadspellchecklist = words.load context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-ctx.lua0000644000175000017500000001240312130411274024106 0ustar norbertnorbertif not modules then modules = { } end modules ['mlib-ctx'] = { version = 1.001, comment = "companion to mlib-ctx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } -- todo local format, concat = string.format, table.concat local settings_to_hash = utilities.parsers.settings_to_hash local report_metapost = logs.reporter("metapost") local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming local mplib = mplib metapost = metapost or {} local metapost = metapost local v_no = interfaces.variables.no metapost.defaultformat = "metafun" metapost.defaultinstance = "metafun" metapost.defaultmethod = "default" local function setmpsformat(specification) local instance = specification.instance local format = specification.format local method = specification.method if not instance or instance == "" then instance = metapost.defaultinstance specification.instance = instance end if not format or format == "" then format = metapost.defaultformat specification.format = format end if not method or method == "" then method = metapost.defaultmethod specification.method = method end specification.mpx = metapost.format(instance,format,method) end local extensiondata = metapost.extensiondata or storage.allocate { } metapost.extensiondata = extensiondata storage.register("metapost/extensiondata",extensiondata,"metapost.extensiondata") function metapost.setextensions(instances,data) if data and data ~= "" then extensiondata[#extensiondata+1] = { usedinall = not instances or instances == "", instances = settings_to_hash(instances or ""), extensions = data, } end end function metapost.getextensions(instance,state) if state and state == v_no then return "" else local t = { } for i=1,#extensiondata do local e = extensiondata[i] local status = e.instances[instance] if (status ~= true) and (e.usedinall or status) then t[#t+1] = e.extensions e.instances[instance] = true end end return concat(t," ") end end function commands.getmpextensions(instance,state) context(metapost.getextensions(instance,state)) end function metapost.graphic(specification) setmpsformat(specification) metapost.graphic_base_pass(specification) end function metapost.getclippath(specification) -- why not a special instance for this setmpsformat(specification) local mpx = specification.mpx local data = specification.data or "" if mpx and data ~= "" then starttiming(metapost) starttiming(metapost.exectime) local result = mpx:execute ( format ( "%s;%s;beginfig(1);%s;%s;endfig;", specification.extensions or "", specification.inclusions or "", specification.initializations or "", data ) ) stoptiming(metapost.exectime) if result.status > 0 then report_metapost("%s: %s", result.status, result.error or result.term or result.log) result = nil else result = metapost.filterclippath(result) end stoptiming(metapost) return result end end function metapost.filterclippath(result) if result then local figures = result.fig if figures and #figures > 0 then local figure = figures[1] local objects = figure:objects() if objects then local lastclippath for o=1,#objects do local object = objects[o] if object.type == "start_clip" then lastclippath = object.path end end return lastclippath end end end end function metapost.theclippath(...) local result = metapost.getclippath(...) if result then -- we could just print the table result = concat(metapost.flushnormalpath(result),"\n") context(result) end end statistics.register("metapost processing time", function() local n = metapost.n if n and n > 0 then local nofconverted = metapost.makempy.nofconverted local elapsedtime = statistics.elapsedtime local elapsed = statistics.elapsed local str = format("%s seconds, loading: %s, execution: %s, n: %s, average: %s", elapsedtime(metapost), elapsedtime(mplib), elapsedtime(metapost.exectime), n, elapsedtime((elapsed(metapost) + elapsed(mplib) + elapsed(metapost.exectime)) / n)) if nofconverted > 0 then return format("%s, external: %s (%s calls)", str, elapsedtime(metapost.makempy), nofconverted) else return str end else return nil end end) -- only used in graphictexts metapost.tex = metapost.tex or { } local environments = { } function metapost.tex.set(str) environments[#environments+1] = str end function metapost.tex.reset() environments = { } end function metapost.tex.get() return concat(environments,"\n") end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-12.tex0000644000175000017500000001263511754241457023702 0ustar norbertnorbert%D \module %D [ file=s-pre-12, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 12, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setuppapersize [S6][S6] \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] \setupbodyfont [14.4pt,lbr] \setupcolors [state=start] \setupinteraction [click=no, display=new, state=start] \setupinteractionscreen [option=max] \def\SomeShape% {\resetMPdrawing \startMPdrawing path p ; pair a, b ; ahlength := .375cm ; StartPage ; draw Page %unitsquare %xscaled PaperWidth yscaled PaperHeight withpen pencircle scaled .5cm withcolor \MPcolor{EdgeColor} ; \stopMPdrawing \dorecurse{\CurrentTopic} {\startMPdrawing initialize_box(\MPpos{topic-\realfolio-\recurselevel}) ; p := tensecircle (wxy,hxy,.25cm) shifted cxy ; fill p withcolor .9white ; pickup pencircle scaled .25cm ; \ifnum\recurselevel=\CurrentTopic draw p withcolor \MPcolor{ShowColor} ; a := bot point 7 of p ; \else draw p withcolor \MPcolor{DoneColor} ; \fi \stopMPdrawing} \dorecurse{\CurrentMaxItem} {\startMPdrawing initialize_box(\MPpos{item-\realfolio-\recurselevel}) ; linewidth := .25cm ; p := tensecircle (wxy,hxy,linewidth) shifted cxy ; fill p withcolor .9white ; pickup pencircle scaled linewidth ; b := rt point 3 of p ; \ifnum\recurselevel=\CurrentMaxItem draw p withcolor \MPcolor{ShowColor} ; \else draw p withcolor \MPcolor{DoneColor} ; \fi dxab := xpart a-xpart b ; dyab := ypart a-ypart b ; sign := if dyab>0 : - fi 1 ; drawarrow a -- a shifted (+2linewidth-dxab/2,0) {left} .. if abs(dyab)>4linewidth : a shifted (-dxab/2,+sign*2linewidth) -- b shifted (+dxab/2,-sign*2linewidth) .. fi {left} b shifted (-2linewidth+dxab/2,0) -- b withcolor \MPcolor{ArrowColor} ; \stopMPdrawing}% \startMPdrawing StopPage ; \stopMPdrawing \MPdrawingdonetrue \getMPdrawing} \definecolor[PageColor][r=.5,g=.4,b=.3] \definecolor[LineColor][r=.7,g=.6,b=.5] \definecolor[PageColor] [s=.60] \definecolor[ShowColor] [r=.40] \definecolor[EdgeColor] [g=.40] \definecolor[DoneColor] [r=.40,g=.40] \definecolor[ArrowColor] [b=.40] \definecolor[LineColor] [r=.60,g=.60] \definecolor[GotoColor] [ArrowColor] \setupinteraction[color=GotoColor,contrastcolor=GotoColor] \defineoverlay [shape] [\SomeShape] \defineoverlay [next] [\overlaybutton{forward}] \setupbackgrounds [page] [background={color,next,shape}, backgroundcolor=PageColor] \doglobal\newcounter\CurrentItem \doglobal\newcounter\CurrentTopic \doglobal\newcounter\CurrentMaxItem \def\StartIdea% {\doglobal\newcounter\CurrentItem} \def\StartTopic% {\doglobal\increment\CurrentTopic \dostartbuffer[topic-\CurrentTopic][StartTopic][StopTopic]} \def\StopIdea% {\dorecurse{\CurrentItem} {\let\CurrentMaxItem\recurselevel \doStopIdea}} \def\IdeaWidth {.6\makeupwidth} % .5 \def\TopicWidth{.2\makeupwidth} % .3 \def\doStopIdea% {\startstandardmakeup \dontcomplain \vbox to \makeupheight {\vskip.75cm \relax % \vfill \dorecurse{\CurrentMaxItem} {\edef\Item{item-\realfolio-\recurselevel} \hbox to \makeupwidth {\hskip.75cm \hpos {\Item} {\framed [width=\IdeaWidth,frame=off, align=middle,offset=.125cm] {\getbuffer[item-\recurselevel]}}} \vskip.875cm} \vfill} \vskip-\makeupheight \vbox to \makeupheight {\vskip.75cm \relax \dorecurse{\CurrentTopic} {\edef\Topic{topic-\realfolio-\recurselevel} \hbox to \makeupwidth {\hfill \hpos {\Topic} {\framed [width=\TopicWidth,frame=off, align=middle,offset=.25cm] {\getbuffer[topic-\recurselevel]}}% \hskip.75cm} \vskip.875cm} \vfill} \stopstandardmakeup} \def\StartItem% {\doglobal\increment\CurrentItem \dostartbuffer[item-\CurrentItem][StartItem][StopItem]} \lefthyphenmin =\maxdimen \righthyphenmin=\maxdimen \def\TitlePage#1% {\startstandardmakeup \setupalign[middle] \def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil#1\vfil\vfil \stopstandardmakeup} \endinput % \starttext % % \StartIdea % \StartTopic % What a topic % \StopTopic % \StartItem % \input reich \relax % \StopItem % \StartItem % \input reich \relax % \StopItem % \StartItem % \input reich \relax % \StopItem % \StopIdea % % \StartIdea % \StartTopic % One More Nice Idea % \StopTopic % \StartItem % \input reich \relax % \StopItem % \StartItem % \input reich \relax % \StopItem % \StopIdea % % \StartIdea % \StartTopic % The Last Idea % \StopTopic % \StartItem % \input tufte \relax % \StopItem % \StopIdea % % \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-tex.lua0000644000175000017500000000455112130411274024123 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-tex'] = { version = 1.001, comment = "companion to trac-deb.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- moved from trac-deb.lua local format = string.format local texhashtokens = tex.hashtokens local trackers = trackers local saved = { } function trackers.savehash() saved = texhashtokens() end function trackers.dumphashtofile(filename,delta) local list, hash, command_name = { }, texhashtokens(), token.command_name for name, token in next, hash do if not delta or not saved[name] then -- token: cmd, chr, csid -- combination cmd,chr determines name local category = command_name(token) local dk = list[category] if not dk then -- a bit funny names but this sorts better (easier to study) dk = { names = { }, found = 0, code = token[1] } list[category] = dk end dk.names[name] = { token[2], token[3] } dk.found = dk.found + 1 end end io.savedata(filename or tex.jobname .. "-hash.log",table.serialize(list,true)) end local delta = nil local function dump_hash(wanteddelta) if delta == nil then saved = saved or texhashtokens() -- no need for trackers.dump_hash luatex.registerstopactions(1,function() dump_hash(nil,wanteddelta) end) -- at front end delta = wanteddelta end directives.register("system.dumphash", function() dump_hash(false) end) directives.register("system.dumpdelta", function() dump_hash(true ) end) local report_dump = logs.reporter("resolvers","dump") local function saveusedfilesintrees(format) local data = { jobname = environment.jobname or "?", version = environment.version or "?", kind = environment.kind or "?", files = resolvers.instance.foundintrees } local filename = file.replacesuffix(environment.jobname or "context-job",'jlg') if format == "lua" then io.savedata(filename,table.serialize(data,true)) else io.savedata(filename,table.toxml(data,"job")) end end directives.register("system.dumpfiles", function(v) luatex.registerstopactions(function() saveusedfilesintrees(v) end) end) context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-15.tex0000644000175000017500000001216611754241457023704 0ustar norbertnorbert%D \module %D [ file=s-pre-15, %D version=1999.09.01, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 15, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is one of the styles I made for the presentation on %D the \NTS\ project at Euro\TeX\ 1998. You need balls to let %D \TEX\ typeset graphics, but this style demonstrates that it %D can be done. %D %D This presentation is meant for presentations that build up %D an idea stepwise. %D %D \starttyping %D \TitlePage{Do you know \TEX ?} %D %D \StartIdea %D \StartItem We use \TEX\ for typesetting \unknown \StopItem %D \StartItem mathematical text \unknown \StopItem %D \StartItem but also for text that has no math \unknown \StopItem %D \StartItem or presentations like this \unknown \StopItem %D \StartItem and whatever you can come up with! \StopItem %D \StopIdea %D \stoptyping %D The basic layout is rather simple and used as much of the %D screen as possible. \setuppapersize [S6][S6] \setuplayout [backspace=25pt, topspace=25pt, width=middle, height=middle, header=0pt, footer=0pt] \setupinteraction [state=start, display=new, color=LineColor, contrastcolor=LineColor, click=no] \setupinteractionscreen [option=max] \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] %D We use a lot of color. You can remap them if you want %D differend ones. The ideas circulate over the colors. \setupcolors [state=start] \definecolor[TextColor][s=.8] \definecolor[PageColor][s=.6] \definecolor[LineColor][s=.4] \definecolor[red] [r=.4] \definecolor[cyan] [g=.4,b=.4] \definecolor[green][g=.4] \definecolor[magenta][r=.4,b=.4] \definecolor[blue] [b=.4] \definecolor[yellow] [r=.4,g=.4] \definecolor[linecolor 1][red] \definecolor[linecolor 5][cyan] \definecolor[linecolor 2][green] \definecolor[linecolor 6][magenta] \definecolor[linecolor 3][blue] \definecolor[linecolor 4][yellow] %D We use variables to make sure that the graphics are reused %D but unique. \setupMPvariables[pageframe][pagecolor=PageColor,linecolor=LineColor] \setupMPvariables[textframe][textcolor=TextColor,linecolor=LineColor] \setupbackgrounds [page] [background={pageframe,nextpage}] \defineoverlay [pageframe] [\uniqueMPgraphic{pageframe}] \defineoverlay [textframe] [\uniqueMPgraphic{textframe}] \defineoverlay [nextpage] [\overlaybutton{forward}] \startuniqueMPgraphic{pageframe}{pagecolor,linecolor} path p ; p := fullsquare xyscaled (\overlaywidth,\overlayheight) ; pickup pencircle scaled 10pt ; fill p withcolor \MPvar{pagecolor} ; draw p withcolor \MPvar{linecolor} ; \stopuniqueMPgraphic \startuniqueMPgraphic{textframe}{textcolor,linecolor} path p ; p := fullcircle xyscaled (\overlaywidth,\overlayheight) ; pickup pencircle scaled 10pt ; fill p withcolor \MPvar{textcolor} ; draw p withcolor \MPvar{linecolor} ; \stopuniqueMPgraphic %D The rest of the file implements the nasty part: typesetting %D text embedded in a graphic. The text is collected in a box %D so that we can reuse it. \newbox\CollectedIdeas \newcounter\CurrentTopic \def\StartItem% {\setbox\CollectedIdeas=\hbox\bgroup \ifdim\wd\CollectedIdeas>0pt \unhbox\CollectedIdeas\hskip25pt \fi \setbox\scratchbox=\hbox\bgroup \framed [width=160pt,height=160pt,align=middle,frame=off, background=textframe,offset=15pt,top=\vfill,bottom=\vfill] \bgroup} \def\StopItem% {\egroup \egroup \setbox\scratchbox=\hbox{\lower.5\ht\scratchbox\box\scratchbox}% \ht\scratchbox=.5\ht\scratchbox \dp\scratchbox= \ht\scratchbox \box\scratchbox \egroup \startstandardmakeup \dontcomplain \leftskip 0pt plus 50pt \rightskip 0pt plus 50pt \parfillskip 0pt \baselineskip 100pt \unhcopy\CollectedIdeas \stopstandardmakeup} \def\StartIdea% {\ifnum\CurrentTopic=6 \doglobal\newcounter\CurrentTopic \fi \doglobal\increment\CurrentTopic \definecolor[LineColor][linecolor \CurrentTopic] \setbox\CollectedIdeas=\null} \def\StopIdea% {} \def\StartTitlePage% {\startstandardmakeup \setupalign[middle] \def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil} \def\StopTitlePage% {\vfil\vfil \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} \doifnotmode{demo}{\endinput} %D A simple test on functionality. \setupoutput[pdftex] \starttext \TitlePage{Do you know \TEX ?} \startbuffer \StartIdea \StartItem We use \TEX\ for typesetting \unknown \StopItem \StartItem mathematical text \unknown \StopItem \StartItem but also for text that has no math \unknown \StopItem \StartItem or presentations like this \unknown \StopItem \StartItem and whatever you can come up with! \StopItem \StopIdea \stopbuffer \dorecurse{6}{\getbuffer} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/page-mrk.mkiv0000644000175000017500000001500511754241457024277 0ustar norbertnorbert%D \module %D [ file=page-mrk, %D version=2011.05.23, % moved from page-lay %D title=\CONTEXT\ Page Macros, %D subtitle=Cutmarks and Colorbars, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Cutmarks and Colorbars} %D This module depends on \METAPOST. \unprotect % \def\pagecutmarksymbol {\the\realpageno} % \let\pagecutmarktoptext \empty % \let\pagecutmarkbottomtext \empty \def\pagecutmarklength {5mm} \def\pagecutmarkoffset {3mm} % slightly larger than before, and now a fixed size \def\pagecutmarkmargin{10cm} \newconditional\c_page_marks_add_more_color \newconditional\c_page_marks_add_more_marking \newconditional\c_page_marks_add_more_lines \newconditional\c_page_marks_add_page_lines \newconditional\c_page_marks_add_more_number \newcount\c_page_marks_nx \newcount\c_page_marks_ny \startuniqueMPgraphic{print:color}{w,h,l,o} if unknown context_crop : input mp-crop.mpiv ; fi ; page_marks_add_color(\MPvar w,\MPvar h,\MPvar l,\MPvar o) ; \stopuniqueMPgraphic \startuniqueMPgraphic{print:marking}{w,h,l,o} if unknown context_crop : input mp-crop.mpiv ; fi ; page_marks_add_marking(\MPvar w,\MPvar h,\MPvar l,\MPvar o) ; \stopuniqueMPgraphic \startuniqueMPgraphic{print:lines}{w,h,l,o,x,y} if unknown context_crop : input mp-crop.mpiv ; fi ; page_marks_add_lines(\MPvar w,\MPvar h,\MPvar l,\MPvar o,\MPvar x,\MPvar y) ; \stopuniqueMPgraphic \startuseMPgraphic{print:number}{w,h,l,o,n} if unknown context_crop : input mp-crop.mpiv ; fi ; page_marks_add_number(\MPvar w,\MPvar h,\MPvar l,\MPvar o,\MPvar n) ; \stopuseMPgraphic \def\page_marks_add_color {\setlayoutcomponentattribute{\v!print:\v!color}% \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup \uniqueMPgraphic {print:color}% {w=\the\scratchwidth,h=\the\scratchheight,% l=\pagecutmarklength,o=\pagecutmarkoffset}% \egroup \wd\scratchbox\scratchwidth\ht\scratchbox\scratchheight\dp\scratchbox\scratchdepth \hskip-\scratchwidth\box\scratchbox} \def\page_marks_add_marking {\setlayoutcomponentattribute{\v!print:\v!marking}% \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup \uniqueMPgraphic {print:marking}% {w=\the\scratchwidth,h=\the\scratchheight,% l=\pagecutmarklength,o=\pagecutmarkoffset}% \egroup \wd\scratchbox\scratchwidth\ht\scratchbox\scratchheight\dp\scratchbox\scratchdepth \hskip-\scratchwidth\box\scratchbox} \def\page_marks_add_lines {\setlayoutcomponentattribute{\v!print:\v!lines}% \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup \uniqueMPgraphic {print:lines}% {w=\the\scratchwidth,h=\the\scratchheight,% l=\pagecutmarklength,o=\pagecutmarkoffset,% x=\the\c_page_marks_nx,y=\the\c_page_marks_ny}% \egroup \wd\scratchbox\scratchwidth\ht\scratchbox\scratchheight\dp\scratchbox\scratchdepth \hskip-\scratchwidth\box\scratchbox} \def\page_marks_add_number {\setlayoutcomponentattribute{\v!print:\v!number}% \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup \useMPgraphic {print:number}% {w=\the\scratchwidth ,h=\the\scratchheight,% l=\pagecutmarklength,o=\pagecutmarkoffset,% n=\number\ifcase\arrangeno\realpageno\else\arrangeno\fi}% \egroup \wd\scratchbox\scratchwidth\ht\scratchbox\scratchheight\dp\scratchbox\scratchdepth \hskip-\scratchwidth\box\scratchbox} \def\page_marks_add_page_indeed#1% {\setbox#1\hbox\bgroup \let\objectoffset\pagecutmarkmargin %\infofont \scratchwidth \wd#1% \scratchheight\ht#1% \scratchdepth \dp#1% \box#1\relax \ifconditional\c_page_marks_add_page_lines \page_marks_add_lines \fi \egroup} \def\page_marks_add_more_indeed#1% {\setbox#1\hbox\bgroup \let\objectoffset\pagecutmarkmargin \infofont \scratchwidth \wd#1% these can move out \scratchheight\ht#1% \scratchdepth \dp#1% \box#1\relax \ifconditional\c_page_marks_add_more_color \page_marks_add_color \fi \ifconditional\c_page_marks_add_more_marking \page_marks_add_marking \fi \ifconditional\c_page_marks_add_more_lines \page_marks_add_lines \fi \ifconditional\c_page_marks_add_more_number \page_marks_add_number \fi \egroup} \let\page_marks_add_page\gobbleoneargument \let\page_marks_add_more\gobbleoneargument \installcorenamespace{layoutmarking} \def\installpagecutmark#1#2% {\setvalue{\??layoutmarking#1}{#2}} % \installpagecutmark\v!off % {} % \installpagecutmark\v!text % {\settrue\c_page_marks_add_more_lines % \settrue\c_page_marks_add_more_number % \let\pagecutmarksymbol\empty % \let\pagecutmarkbottomtext\extrapagecutmarkbottomtext} \installpagecutmark\v!on {\settrue\c_page_marks_add_page_lines \settrue\c_page_marks_add_more_lines \settrue\c_page_marks_add_more_number} \installpagecutmark\v!page % todo {\settrue\c_page_marks_add_more_lines \settrue\c_page_marks_add_more_number} \installpagecutmark\v!empty {\settrue\c_page_marks_add_page_lines \settrue\c_page_marks_add_more_lines} \installpagecutmark\v!color {\settrue\c_page_marks_add_page_lines \settrue\c_page_marks_add_more_lines \settrue\c_page_marks_add_more_color \settrue\c_page_marks_add_more_marking \settrue\c_page_marks_add_more_number} \appendtoks \setfalse\c_page_marks_add_more_color \setfalse\c_page_marks_add_more_marking \setfalse\c_page_marks_add_more_lines \setfalse\c_page_marks_add_more_number \csname\??layoutmarking\layoutparameter\c!marking\endcsname \ifconditional\c_page_marks_add_page_lines \let\page_marks_add_page\page_marks_add_page_indeed \else \let\page_marks_add_page\gobbleoneargument \fi \ifconditional\c_page_marks_add_more_lines \let\page_marks_add_more\page_marks_add_more_indeed \else\ifconditional\c_page_marks_add_more_color \let\page_marks_add_more\page_marks_add_more_indeed \else\ifconditional\c_page_marks_add_more_marking \let\page_marks_add_more\page_marks_add_more_indeed \else\ifconditional\c_page_marks_add_more_number \let\page_marks_add_more\page_marks_add_more_indeed \else \let\page_marks_add_more\gobbleoneargument \fi\fi\fi\fi \to \everysetuplayout \setuplayout [\c!marking=\v!off] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-wid.lua0000644000175000017500000001355612130411274024127 0ustar norbertnorbertif not modules then modules = { } end modules ['scrn-wid'] = { version = 1.001, comment = "companion to scrn-wid.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } interactions = interactions or { } local interactions = interactions local attachments = { } local comments = { } local soundclips = { } local renderings = { } local linkedlists = { } interactions.attachments = attachments interactions.soundclips = soundclips interactions.renderings = renderings interactions.linkedlists = linkedlists local jobpasses = job.passes local codeinjections = backends.codeinjections local nodeinjections = backends.nodeinjections local variables = interfaces.variables local v_auto = variables.auto local trace_attachments = false trackers.register("widgets.attachments", function(v) trace_attachments = v end) local report_attachments = logs.reporter("widgets","attachments") -- Symbols function commands.presetsymbollist(list) codeinjections.presetsymbollist(list) end -- Attachments -- -- registered : unique id -- tag : used at the tex end -- file : name that the file has on the filesystem -- name : name that the file will get in the output -- title : up to the backend -- subtitle : up to the backend -- author : up to the backend -- method : up to the backend (hidden == no rendering) local nofautoattachments, lastregistered = 0, nil local function checkregistered(specification) local registered = specification.registered if not registered or registered == "" or registered == v_auto then nofautoattachments = nofautoattachments + 1 lastregistered = "attachment-" .. nofautoattachments specification.registered = lastregistered return lastregistered else return registered end end local function checkbuffer(specification) local buffer = specification.buffer if buffer ~= "" then specification.data = buffers.getcontent(buffer) or "" end end function attachments.register(specification) -- beware of tag/registered mixup(tag is namespace) local registered = checkregistered(specification) checkbuffer(specification) attachments[registered] = specification if trace_attachments then report_attachments("registering %a",registered) end return specification end function attachments.insert(specification) local registered = checkregistered(specification) local r = attachments[registered] if r then if trace_attachments then report_attachments("including registered %a",registered) end for k, v in next, r do local s = specification[k] if s == "" then specification[k] = v end end elseif trace_attachments then report_attachments("including unregistered %a",registered) end checkbuffer(specification) return nodeinjections.attachfile(specification) end commands.registerattachment = attachments.register function commands.insertattachment(specification) tex.box["b_scrn_attachment_link"] = attachments.insert(specification) end -- Comment function comments.insert(specification) local buffer = specification.buffer if buffer ~= "" then specification.data = buffers.getcontent(buffer) or "" end return nodeinjections.comment(specification) end function commands.insertcomment(specification) tex.box["b_scrn_comment_link"] = comments.insert(specification) end -- Soundclips function soundclips.register(specification) local tag = specification.tag if tag and tag ~= "" then local filename = specification.file if not filename or filename == "" then filename = tag specification.file = filename end soundclips[tag] = specification return specification end end function soundclips.insert(tag) local sc = soundclips[tag] if not sc then -- todo: message return soundclips.register { tag = tag } else return sc end end commands.registersoundclip = soundclips.register commands.insertsoundclip = soundclips.insert -- Renderings function renderings.register(specification) if specification.label then renderings[specification.label] = specification return specification end end function renderings.rendering(label) local rn = renderings[label] if not rn then -- todo: message return renderings.register { label = label } else return rn end end local function var(label,key) local rn = renderings[label] return rn and rn[key] or "" end renderings.var = var function commands.renderingvar(label,key) context(var(label,key)) end commands.registerrendering = renderings.register -- Rendering: function commands.insertrenderingwindow(specification) codeinjections.insertrenderingwindow(specification) end -- Linkedlists (only a context interface) function commands.definelinkedlist(tag) -- no need end function commands.enhancelinkedlist(tag,n) local ll = jobpasses.gettobesaved(tag) if ll then ll[n] = texcount.realpageno end end function commands.addlinklistelement(tag) local tobesaved = jobpasses.gettobesaved(tag) local collected = jobpasses.getcollected(tag) or { } local currentlink = #tobesaved + 1 local noflinks = #collected tobesaved[currentlink] = 0 local f = collected[1] or 0 local l = collected[noflinks] or 0 local p = collected[currentlink-1] or f local n = collected[currentlink+1] or l context.setlinkedlistproperties(currentlink,noflinks,f,p,n,l) -- context.ctxlatelua(function() commands.enhancelinkedlist(tag,currentlink) end) end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-var.mkvi0000644000175000017500000000345311754241457024334 0ustar norbertnorbert%D \module %D [ file=font-var, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Common Variables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Common Variables} \unprotect % some more will move here %D \macros %D {fontstyle,fontalternative,fontsize,fontbody} %D %D Within a bodyfont, fonts can come in different sizes. For instance %D \type {\tf} is accompanied by \type {\tfa}, \type {\tfb} etc. The %D first two characters denote the alternative, while the third %D character in these sequences represents the size. The actual size %D is saved in a macro. The styles, being roman (\type {\rm}), sans %D serif (\type {\ss}) etc. are also available in macros in \type {rm}, %D \type {ss} etc. form. % fontclass % modern dejavu % fontbody % ... 10pt 11pt 12pt ... % fontstyle % rm ss tt mm hw cg ... % fontalternative % tf bf sl it bs bi sc ... % fontsize % a b c d ... % fontface % 0=normal 1=text 2=script 3=scriptscript 4=x 5=xx (math are temporary) \def\normalizedbodyfontsize{12pt} \def\defaultfontbody {\normalizedbodyfontsize} \let\defaultfontstyle \empty \let\defaultfontalternative \s!tf \let\defaultfontsize \empty \let\globalfontclass \empty \let\fontclass \empty \let\fontbody \defaultfontbody \let\fontstyle \defaultfontstyle \let\fontalternative \defaultfontalternative \let\fontsize \defaultfontsize \let\fontface \!!zerocount \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-17.mkiv0000644000175000017500000002473512132111075024040 0ustar norbertnorbert%D \module %D [ file=s-pre-17, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 17, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \setupbodyfont [dejavu,11pt,ss] \setupsystem [random=medium] \setupbackgrounds [state=repeat] \setupbackgrounds [page] [background={page,forward}] \setupbackgrounds [text][text] [background=blowdown] \setupinteraction [state=start, % click=off, color=TitleColor, contrastcolor=TitleColor] \setupinteractionscreen [option=max] \setuptolerance [verytolerant,stretch] \definecolor [BackColor] [s=.30] \definecolor [PageColor] [g=1] \definecolor [FrameColor] [r=1] \definecolor [TitleColor] [y=1] \definecolor [ArrowColor] [b=1] \defineoverlay [title] [\useMPgraphic{title}] \defineoverlay [page] [\useMPgraphic{page}] \defineoverlay [blowup] [{\hboxreference[whatever:\CurrentBlaBla]{\overlaybutton{whatever:\CurrentBlaBla}}}] \defineoverlay [blowdown] [{\hboxreference[page:\realfolio]{\overlaybutton{page:\realfolio}}}] \defineoverlay [forward] [\overlaybutton{forward}] \startMPinclusions input "mp-abck.mpiv" ; \stopMPinclusions \startMPpositiongraphic{mppos:connection} path pa, pb, pc ; pair ca, cb ; initialize_box(\MPpos{\MPvar{self}}) ; pa := pxy ; ca := cxy ; initialize_box(\MPpos{\MPvar{prev}}) ; pb := pxy ; cb := cxy ; pickup pencircle scaled .5pt ; pa := pa enlarged 10pt ; pb := pb enlarged 10pt ; for i=1 upto 10 : draw pa randomized 20pt withcolor \MPcolor{FrameColor} ; endfor ; if \MPp{\MPvar{prev}} > 0 : pair a, b, c, d ; for i=1 upto 25 : a := .5[ulcorner pa,urcorner pa] randomized (10pt,10pt) ; b := .5[llcorner pb,lrcorner pb] randomized (20pt,10pt) ; c := .5[a,b] rotatedaround(a,-25) randomized (5pt,5pt) ; d := .5[a,b] rotatedaround(a,+25) randomized (5pt,5pt) ; draw (a--b) withcolor \MPcolor{ArrowColor} ; draw (d--a--c) withcolor \MPcolor{ArrowColor} ; endfor ; fi ; anchor_box(\MPanchor{\MPvar{self}}) ; \stopMPpositiongraphic \startuseMPgraphic{title} pickup pencircle scaled .5pt ; for i=1 upto 10 : draw fullsquare xyscaled(OverlayWidth,OverlayHeight) enlarged 10pt randomized 20pt withcolor \MPcolor{TitleColor} ; endfor ; \stopuseMPgraphic \startuseMPgraphic{page} StartPage ; pickup pencircle scaled .5pt ; fill Page withcolor \MPcolor{BackColor} ; for i=1 upto 20 : draw Page enlarged -50pt randomized 50pt withcolor \MPcolor{PageColor} ; endfor ; StopPage ; \stopuseMPgraphic \newcounter\CurrentBlaBla \defineframedtext [ZoomText] [before=, after=, width=fit, align=flushleft, frame=off, foregroundcolor=white] \starttexdefinition StartText \begingroup \getrandomdimen\scratchdimen{250pt}{350pt} \edef\TextWidth{\the\scratchdimen} \setbox\scratchbox\hbox\bgroup \hsize\TextWidth \ZoomText\bgroup \stoptexdefinition \starttexdefinition StartTextSimple \begingroup \setbox\scratchbox\hbox\bgroup \framed [ frame=off, foregroundcolor=white ] \bgroup \stoptexdefinition \starttexdefinition StopTextSimple \StopText \stoptexdefinition \starttexdefinition StopText \egroup \egroup \doglobal\increment\CurrentBlaBla \let\PrevBlaBla\CurrentBlaBla \doglobal\decrement\PrevBlaBla \let\NextBlaBla\CurrentBlaBla \doglobal\increment\NextBlaBla \setMPpositiongraphic { connection:\CurrentBlaBla }{ mppos:connection }{ seed=\CurrentBlaBla, prev=connection:\PrevBlaBla, next=connection:\NextBlaBla } \hbox to 600pt \bgroup \setupinteraction[focus=fitr] \getrandomdimen\scratchdimen{50pt}{75pt} \hskip0pt plus \scratchdimen minus \scratchdimen \hpos { connection:\CurrentBlaBla }{ \framed [ frame=off, offset=overlay, backgroundoffset=50pt, background=blowup ] { \box\scratchbox } } \getrandomdimen\scratchdimen{50pt}{75pt} \hskip0pt plus \scratchdimen minus \scratchdimen \egroup \getrandomdimen\scratchdimen{75pt}{125pt} \vskip\scratchdimen \endgroup \stoptexdefinition \dontcomplain \disablemode[SpreadPage] \starttexdefinition StartPage #1 \doglobal\increment(\CurrentBlaBla,100)% \setvariables[StartPage][title={#1}] \setbox\scratchbox\hbox\bgroup \valign\bgroup \ignorespaces \alignmark\alignmark \vss \cr \stoptexdefinition \starttexdefinition StopPage \cr \egroup \egroup \setbox\scratchbox\vbox\bgroup \vskip100pt \doifmodeelse {SpreadPage} { \hbox spread 200pt } { \hbox to \wd\scratchbox } \bgroup \setupinteraction[focus=fitr] \hss \switchtobodyfont[big]% \bfd \doglobal\increment\CurrentBlaBla \setupinterlinespace \hpos { title:\realfolio }{ \framed [ frame=off, offset=overlay, backgroundoffset=50pt, background=blowup ] { \framed [ frame=off, align=middle, foregroundcolor=white, background=title ] { \getvariable{StartPage}{title} } } } \hss \egroup \vskip100pt \box\scratchbox \egroup \normalexpanded { \definepapersize [ MasterPage ] [ width=\the\dimexpr\wd\scratchbox+100pt\relax, height=\the\dimexpr\ht\scratchbox+\dp\scratchbox+100pt\relax ] } \setuppapersize [MasterPage] [MasterPage] \setuplayout [ topspace=25pt, backspace=25pt, width=middle, header=0pt, footer=0pt, height=middle ] \centerbox { \box\scratchbox } \page \stoptexdefinition \starttexdefinition StartTopic #1 \removeunwantedspaces \cr \doglobal\increment(\CurrentBlaBla,100)% \vbox\bgroup \vskip100pt \bgroup \definecolor[FrameColor][TitleColor] \switchtobodyfont[big] \bfd \setupinterlinespace \StartTextSimple \ignorespaces #1 \removeunwantedspaces \StopTextSimple \vskip25pt \egroup \stoptexdefinition \starttexdefinition StopTopic \vskip-\lastskip \vskip100pt \egroup \ignorespaces \stoptexdefinition \starttexdefinition TitlePage #1 \begingroup \def\\{\vskip1ex\bfc\def\\{\vskip1ex\bfb}} \enablemode[SpreadPage] \StartPage{#1} \StopPage \endgroup \stoptexdefinition \continueifinputfile{s-pre-17.mkiv} \starttext \nopdfcompression \TitlePage{About Text\\Today's Talk\\Hans Hagen} \StartPage{The First Page} \StartTopic{Some Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input knuth \StopText \StopTopic \StartTopic{Another Text} \StartText \input tufte \StopText \StartText \input zapf \StopText \StartText \input knuth \StopText \StopTopic \StartTopic{Some More Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StopTopic \StartTopic{Some Text Again} \StartText \input tufte \StopText \StartText \input zapf \StopText \StartText \input knuth \StopText \StartText \input tufte \StopText \StopTopic \StopPage \StartPage{The Second Page} \StartTopic{Some Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Another Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Some Nice Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input tufte \StopText \StopTopic \StartTopic{Some Funny Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StopTopic \StartTopic{Quite Some Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Even More Text} \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StopPage \StartPage{The Third Page} \StartTopic{Some Short Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Some Minimal Text} \StartText \input tufte \StopText \StartText \input zapf \StopText \StopTopic \StartTopic{Some More Text} \StartText \input tufte \StopText \StartText \input knuth \StopText \StartText \input zapf \StopText \StartText \input tufte \StopText \StartText \input tufte \StopText \StopTopic \StopPage \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-deb.mkiv0000644000175000017500000000277012130411274024243 0ustar norbertnorbert%D \module %D [ file=trac-deb, %D version=2005.11.06, %D title=\CONTEXT\ Tracing Macros, %D subtitle=Debugger, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Tracing Macros / Debugger} %registerctxluafile{trac-lmx}{1.001} \registerctxluafile{trac-deb}{1.001} \unexpanded\def\breakpoint{\showdebuginfo\wait} \unexpanded\def\showtrackers {\ctxlua{trackers.show()}} \unexpanded\def\enabletrackers [#1]{\ctxlua{trackers.enable("#1")}} \unexpanded\def\disabletrackers [#1]{\ctxlua{trackers.disable("#1")}} \unexpanded\def\resettrackers {\ctxlua{trackers.reset()}} \unexpanded\def\showdirectives {\ctxlua{directives.show()}} \unexpanded\def\enabledirectives [#1]{\ctxlua{directives.enable("#1")}} \unexpanded\def\disabledirectives [#1]{\ctxlua{directives.disable("#1")}} \unexpanded\def\showexperiments {\ctxlua{experiments.show()}} \unexpanded\def\enableexperiments [#1]{\ctxlua{experiments.enable("#1")}} \unexpanded\def\disableexperiments[#1]{\ctxlua{experiments.disable("#1")}} \unexpanded\def\showdebuginfo {\ctxlua{lmx.showdebuginfo()}} \unexpanded\def\overloaderror {\ctxlua{lmx.overloaderror()}} % \enabledirectives[system.showerror] \unexpanded\def\showlogcategories {\ctxlua{logs.show()}} context-2013.05.28.20130704/texmf-dist/tex/context/base/font-emp.mkvi0000644000175000017500000001550711764366753024340 0ustar norbertnorbert%D \module %D [ file=font-emp, %D version=20120106, % (moved from font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Emphasis, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Emphasis} \unprotect %D \macros %D {em,emphasistypeface,emphasisboldface} %D %D The next macro started as a copy of Donald Arseneau's %D \type{\em} (\TUGNEWS\ Vol.~3, no.~1, 1994). His %D implementation was a bit more sophisticated version of the %D standard \LATEX\ one. We further enhanced the macro, so now %D it also adapts itself to boldface mode. Because we favor %D {\sl slanted} type over {\it italic}, we made the emphasis %D adaptable, for instance: %D %D \starttyping %D \def\emphasistypeface {\it} %D \def\emphasisboldface {\bi} %D \stoptyping %D %D But we prefer: %D %D \starttyping %D \unexpanded\def\emphasistypeface{\sl} %D \unexpanded\def\emphasisboldface{\bs} %D \stoptyping %D %D or even better: \let\m_font_emphasized_typeface\empty \def\font_emphasis_checked_typeface#slanted#italic% {\edef\m_font_emphasized_typeface{\bodyfontvariable\s!em}% \ifx\m_font_emphasized_typeface\v!slanted #slanted% \else\ifx\m_font_emphasized_typeface\v!italic #italic% \else\ifx\m_font_emphasized_typeface\empty #slanted% \else \csname\m_font_emphasized_typeface\endcsname \fi\fi\fi} \unexpanded\def\emphasistypeface{\font_emphasis_checked_typeface\sl\it} \unexpanded\def\emphasisboldface{\font_emphasis_checked_typeface\bs\bi} \unexpanded\def\normalboldface % public {\relax\ifx\fontalternative\s!it\bi \else \ifx\fontalternative\s!sl\bs \else \bf\fi\fi} \unexpanded\def\normaltypeface % public {\relax \ifx\fontalternative\s!bi \it \else \ifx\fontalternative\s!bs \sl \else \tf \fi\fi} \unexpanded\def\swaptypeface % public {\relax \ifx\fontalternative\s!it \tf \else \ifx\fontalternative\s!sl \tf \else \ifx\fontalternative\s!bf \emphasisboldface \else \ifx\fontalternative\s!bs \bf \else \ifx\fontalternative\s!bi \bf \else \emphasistypeface \fi\fi\fi\fi\fi} \let\typeface\normaltypeface % public \let\boldface\normalboldface % public \let\swapface\swaptypeface % public %D To be set with the default body font environment: \type %D {em} being \type {slanted} or \type {italic}. % maybe a \csname...\fontalternative\endcsname \newconditional\c_font_emphasis_needed \unexpanded\def\em {\relax \ifdim\slantperpoint>\zeropoint \settrue\c_font_emphasis_needed \else \setfalse\c_font_emphasis_needed \fi \font_emphasis_set_emphasis_boldface % new \ifx\fontalternative\s!it \unexpanded\def\emphasistypeface{\it}\tf \else\ifx\fontalternative\s!sl \unexpanded\def\emphasistypeface{\sl}\tf \else\ifx\fontalternative\s!bf \emphasisboldface \else\ifx\fontalternative\s!bs \unexpanded\def\emphasisboldface{\bs}\bf \else\ifx\fontalternative\s!bi \unexpanded\def\emphasisboldface{\bi}\bf \else \emphasistypeface \fi\fi\fi\fi\fi \ifconditional\c_font_emphasis_needed\else \expandafter\aftergroup \fi \emphasiscorrection} %D The next feature was not present in previous versions. It %D takes care of \type {\em \bf ...} situations. \def\font_emphasis_set_emphasis_boldface {\let\font_emphasis_saved_emphasis_boldface\bf \let\font_emphasis_set_emphasis_boldface\relax \let\bf\font_emphasis_bold_bold} \unexpanded\def\font_emphasis_bold_bold {%\relax \let\bf\relax % new \ifx\fontalternative\s!it \bi \else\ifx\fontalternative\s!sl \bs \else \font_emphasis_saved_emphasis_boldface \fi\fi \let\bf\font_emphasis_saved_emphasis_boldface} %D Donald's (adapted) macros take the next character into %D account when placing italic correction. As a bonus we also %D look for something that looks like a dash, in which case we %D don't correct. \let\italiccorrection=\/ % tex primitive \def\emphasiscorrection % public, not in raw alignment groups, else omit problem {\ifhmode\ifnum\currentgrouptype=\aligngroupcode\else \expandafter\expandafter\expandafter\font_emphasis_look \fi\fi} \def\font_emphasis_look {\begingroup \futurelet\nexttoken\font_emphasis_test} \def\font_emphasis_test {\ifcat\noexpand\nexttoken,% still ok? \expandafter\font_emphasis_a \else \expandafter\font_emphasis_b \fi} \def\font_emphasis_a {\futurelet\nexttoken\font_emphasis_correction} \def\font_emphasis_correction {\setbox\scratchbox\hbox{\nexttoken}% tricky as next can be a macro \ifdim\ht\scratchbox=\zeropoint % probably a space \expandafter\font_emphasis_b \else\ifdim\ht\scratchbox<.3\exheight \expandafter\expandafter\expandafter\endgroup \else \expandafter\expandafter\expandafter\font_emphasis_b \fi\fi} \def\font_emphasis_b {\scratchskip\lastskip \ifdim\scratchskip=\zeropoint\relax % == \ifzeropt\scratchskip \italiccorrection\relax \else \unskip\italiccorrection\hskip\scratchskip \fi \endgroup} %D We end with some examples which show the behavior when %D some punctuation is met. We also show how the mechanism %D adapts itself to bold, italic and slanted typing. %D %D \startbuffer %D test {test}test \par %D test {\sl test}test \par %D test {\em test}test \par %D test {\em test}--test \par %D %D test {test}, test \par %D test {\em test}, test \par %D %D test {\em test {\em test {\em test} test} test} test \par %D test {\bf test {\em test {\em test} test} test} test \par %D test {\sl test {\em test {\em test} test} test} test \par %D test {\it test {\em test {\em test} test} test} test \par %D \stopbuffer %D %D \typebuffer %D %D We get: %D %D \startpacked %D \getbuffer %D \stoppacked %D \macros %D {emphbf,emphit,emphsl,emphtf} %D %D The next emphasis alternatives are for \THANH. They adapt %D their style as good as possible. These macros are obsolete %D in \MKIV. \unexpanded\def\emphbf{\groupedcommand{\bf\def\emphit{\bi}\def\emphsl{\bs}}{}} \unexpanded\def\emphit{\groupedcommand{\it\def\emphbf{\bi}\def\emphsl{\sl}}{}} \unexpanded\def\emphsl{\groupedcommand{\sl\def\emphbf{\bs}\def\emphit{\it}}{}} \unexpanded\def\emphtf{\groupedcommand{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}}{}} \unexpanded\def\emph {\groupedcommand{\em}{}} \unexpanded\def\emphasized{\bgroup\em\let\nexttoken} %D \startbuffer %D TEXT {\emphbf text \emphit text \emphtf text \emphsl text} TEXT %D TEXT \emphbf{text \emphit{text} \emphtf{text} \emphsl{text}} TEXT %D \stopbuffer %D %D \typebuffer %D \startlines %D \getbuffer %D \stoplines \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/spec-mis.mkii0000644000175000017500000002003611754241457024277 0ustar norbertnorbert%D \module %D [ file=spec-mis, %D version=1997.04.01, %D title=\CONTEXT\ Special Macros, %D subtitle=Miscellaneous Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Quite some modules in this group are dedicated to supporting %D \PDF\ directly by means of \PDFTEX or indirectly by using %D Acrobat Distiller. This module implements some common %D features. \writestatus{loading}{ConTeXt Special Macros / Miscellaneous Macros} \unprotect %D \macros %D {URLhash} %D %D A rather trivial macro: \expandafter\def\expandafter\URLhash\expandafter{\string#} %D \macros %D {ifusepagedestinations} %D %D In \PDF\ version 1.0 only page references were supported, %D while in \DVIWINDO\ 1.N only named references were accepted. %D Therefore \CONTEXT\ supports both methods of referencing. In %D \PDF\ version 1.1 named destinations arrived. Lack of %D continuous support of version 1.1 viewers for \MSDOS\ %D therefore sometimes forces us to prefer page references. As %D a bonus, they are faster too and have no limitations. How %D fortunate we were having both mechanisms available when the %D version 3.0 (\PDF\ version 1.2) viewers proved to be too %D bugged to support named destinations. \newif\ifusepagedestinations %D \macros %D {ifhighlighthyperlinks} %D %D The next switch can be used to make user hyperlinks are %D not highlighted when clicked on. \newif\ifhighlighthyperlinks %D \macros %D {ifgotonewwindow} %D %D To make the {\em goto previous jump} feature more %D convenient when using more than one file, it makes sense %D to force the viewer to open a new window for each file %D opened. \newif\ifgotonewwindow %D \macros %D {ifPDFstrokecolor} %D %D We can reduce the filesize a bit by setting the next switch %D to false. The amount of reduction depends on the use of %D color, but don't expect more than a few percent. Zip %D compression is already rather efficient in itself. \newif\ifPDFstrokecolor \PDFstrokecolortrue %D \macros %D {dofileinsertion,definefileinsertion,doiffileinsertionsupported} %D %D File insertion depend on the driver or \TEX\ variant used. %D All driver modules use the same scheme for file insertion, %D and therefore have the next macro in common (stupified %D per august 2006): \let\supportedfileinsertions\empty \let\supportedfilecheckers \empty \def\definefileinsertion#1#2#3% {\addtocommalist{#2}\supportedfileinsertions \setvalue{do#1insert#2}{#3}} \def\definefilechecker#1#2#3% {\addtocommalist{#2}\supportedfilecheckers \setvalue{do#1check#2}{#3}} \def\dofileinsertion#1#2{\executeifdefined{do#1insert#2}\donothing} \def\dofilechecker #1#2{\executeifdefined{do#1check#2} \donothing} \appendtoks \let\supportedfileinsertions\empty \to \everyresetspecials \appendtoks \let\supportedfilecheckers \empty \to \everyresetspecials % \def\doiffileinsertionsupportedelse#1% % {\expanded{\doifinstringelse{#1}{\c!tex,\c!tmp,\supportedfileinsertions}}} \def\doiffileinsertionsupportedelse#1% lowercasing happens at tex end {\expanded{\doifinstringelse{\truegraphictype{#1}}{\c!tex,\c!tmp,\supportedfileinsertions}}} %D This macro is called with 10 arguments, where the first %D one specifies the driver, like \type{yy} or \type{tr}. The %D second argument is a \type{{type,method}} pair and the %D third the filename. %D Just in case this one is undefined (which can happen if %D this module is used outside \CONTEXT): \ifx\setreferencefilename\undefined \def\setreferencefilename#1\to#2{\edef#2{#1}} \fi %D When submitting forms, we need to communicate the format. \chardef\submitoutputformat=0 % 0=unknown 1=HTML 2=FDF 3=XML \def\setsubmitoutputformat#1% {\doifinsetelse{#1}{FDF,fdf} {\chardef\submitoutputformat2} {\doifinsetelse{#1}{XML,xml} {\chardef\submitoutputformat3} {\chardef\submitoutputformat1}}% \relax} %D \macros %D {escapePSstring} %D %D \starttyping %D \escapePSstring(t\e\1st)))))\to\crap \crap %D \stoptyping % testcase: webschrift met lege regels en unbalanced () \bgroup \catcode`\*=\@@escape \catcode`\\=\@@letter *long*gdef*escapedPSstring#1% {*aftergroup*string *ifnum`#1=12 *aftergroup*n% *else*ifnum`#1=13 *aftergroup*n% *else*if#1(% *aftergroup*(% *else*if#1)% *aftergroup*)% *else*if#1\% *aftergroup*\% *else *aftergroup#1% *fi*fi*fi*fi*fi} *egroup \long\def\escapePSstring#1\to#2% {\defconvertedargument#2{#1}% \bgroup \ifx#2\empty \else \setverbosecscharacters \aftergroup\edef \aftergroup#2% \aftergroup{% \expandafter\handletokens#2\with\escapedPSstring \aftergroup}% \fi \egroup} % \long\def\preservePSpar#1\to#2% % {\bgroup % \def\par{\rawcharacter{12}}% % \expanded{\egroup\noexpand\def\noexpand#2{#1}}} \long\def\preservePSpar#1\to#2% {\bgroup \def\par{\rawcharacter{12}\rawcharacter{12}}% hm, should be one 13 but 12 ff is platform safe \expanded{\egroup\noexpand\def\noexpand#2{#1}}} %D \macros %D {ifPDFunicode} %D %D We can use this switch to signal that content streams has %D to be unicoded. \newif\ifPDFunicode %D \macros %D {makeMPintoPDFobject, handleMPfshow, setMPPDFobject, getMPPDFobject} %D %D \METAPOST\ support. \ifx\makeMPintoPDFobject\undefined \newcount\makeMPintoPDFobject \fi \appendtoks \makeMPintoPDFobject\zerocount \def\setMPPDFobject#1#2{\def\getMPPDFobject{\box#2}}% \to \everyresetspecials \appendtoks \let\handleMPfshow\dohandleMPfshow \to \everyresetspecials %D %D \macros %D {dosetposition, dosetpositionwdh, dosetpositionplus} %D %D Opposite to its \DVI\ counterpart, the \PDFTEX\ backend %D can provide positional information directly. Since %D \CONTEXT\ only uses relative positions, the origin is of %D less importance. Nowadays \XETEX\ also supports this %D feature. \ifx\pdfsavepos\undefined % only for ancient pdftex, less old xetex and current aleph \def\dosetposition #1{\special{pos:pxy "#1"}} \def\dosetpositionwhd #1#2#3#4{\special{pos:pxywhd "#1" #2 #3 #4}} \def\dosetpositionplus#1#2#3#4#5{\special{pos:pxyplus "#1" #2 #3 #4 #5}} \let\flushDVIpositionpapersize\relax \def\dosetpositionpapersize#1#2% {\xdef\flushDVIpositionpapersize {\special{pos:papersize \number#1 \number#2}% \noexpand\installprogram{dvipos -o \jobname.tuo \jobname.dvi }% \global\noexpand\let\noexpand\flushDVIpositionpapersize\relax}} % kind of obsolete since nowadays xetex supports \pdfsavepos as well \ifnum\texengine=\xetexengine \def\dosetpositionpapersize#1#2% {\xdef\flushDVIpositionpapersize {\special{pos:papersize \number#1 \number#2}% \noexpand\installprogram{dvipos -o \jobname.tuo \jobname.xdv }% \global\noexpand\let\noexpand\flushDVIpositionpapersize\relax}} \fi \prependtoksonce \flushDVIpositionpapersize \to \everyshipout \else \def\dosetposition#1% {\pdfsavepos \dolazysaveposition {#1}% {\noexpand\realfolio}% {\noexpand\the\dimexpr\pdflastxpos\scaledpoint\relax}% {\noexpand\the\dimexpr\pdflastypos\scaledpoint\relax}}% \def\dosetpositionwhd#1#2#3#4% {\pdfsavepos \dolazysavepositionwhd {#1}% {\noexpand\realfolio}% {\noexpand\the\dimexpr\pdflastxpos\scaledpoint\relax}% {\noexpand\the\dimexpr\pdflastypos\scaledpoint\relax}% {#2}{#3}{#4}} \def\dosetpositionplus#1#2#3#4#5% {\pdfsavepos \dolazysavepositionplus {#1}% {\noexpand\realfolio}% {\noexpand\the\dimexpr\pdflastxpos\scaledpoint\relax}% {\noexpand\the\dimexpr\pdflastypos\scaledpoint\relax}% {#2}{#3}{#4}{#5}} \let\dosetpositionpapersize\gobbletwoarguments \fi %D Handy to have this available asap: \ifdefined\everyPDFxform \newtoks\everyPDFxform \fi \ifdefined\everyPDFximage \newtoks\everyPDFximage \fi \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-liberation.mkiv0000644000175000017500000000502211754241457026464 0ustar norbertnorbert%D \module %D [ file=type-imp-liberation, %D version=2010.06.21, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Liberation fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[liberation] \starttypescript [\s!serif] [liberation] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:liberationserif-regular] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:liberationserif-bold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:liberationserif-italic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:liberationserif-bolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [liberation] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:liberationsans-regular] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:liberationsans-bold] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:liberationsans-italic] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:liberationsans-bolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [liberation] [\s!name] \setups[\s!font:\s!fallback:\s!mono] \definefontsynonym [\s!Mono] [\s!file:liberationmono-regular] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [\s!file:liberationmono-bold] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [\s!file:liberationmono-italic] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [\s!file:liberationmono-bolditalic] [\s!features=\s!none] \stoptypescript \starttypescript[liberation] \definetypeface [liberation] [\s!rm] [\s!serif] [liberation] [\s!default] \definetypeface [liberation] [\s!ss] [\s!sans] [liberation] [\s!default] [\s!rscale=0.870] \definetypeface [liberation] [\s!tt] [\s!mono] [liberation] [\s!default] [\s!rscale=0.870] \definetypeface [liberation] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.040] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/filt-ini.mkii0000644000175000017500000000621511754241457024275 0ustar norbertnorbert%D \module %D [ file=filt-ini, %D version=2000.09.19, %D title=\CONTEXT\ Filter Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Filter Macros / Initialization} % \ifx\OmegaVersion\undefined % \let\definefiltersynonym \gobbledoubleempty % \let\definefiltersequence \gobbledoubleempty % \unexpanded\def\usefiltersequence {\gobblesingleempty} % \let\usefilter \gobblesingleempty % \let\truefiltername \gobbleoneargument % \expandafter \endinput % \fi \unprotect %D The real work starts here. % We need the {\??ot::#1} check because otherwise aleph will crash. Taco's % torture test: % % \ocp\ArabicContext = contextual % % \dorecurse {5000} { % \message{[\recurselevel]} % \ocplist\Arabic=\addbeforeocplist 1 \ArabicContext \nullocplist % } %D \macros %D {definefiltersynonym} \def\definefiltersynonym {\dodoubleargument\dodefinefiltersynonym} \def\dodefinefiltersynonym[#1][#2]% {\setvalue{\??or#1}{#2}} %D \macros %D {truefiltername} \def\truefiltername#1% {\ifundefined{\??or#1}#1\else\truefiltername{\getvalue{\??or#1}}\fi} %D \macros %D {definefiltersequence} \def\definefiltersequence {\dodoubleargument\dodefinefiltersequence} % \def\dodefinefiltersequence[#1][#2]% % {\setvalue{\??ot#1}{#2}} \def\dodefinefiltersequence[#1][#2]% {\setxvalue{\??ot#1}{#2}% \letgvalue{\??ot::#1}\v!stop} %D \macros %D {usefiltersequence} %D \def\magicocpnumber{1} % one can do: % % \definefiltersequence % [farsi] % [utf8 to unicode16=>5, % persian fix, % arabic analysis=>3, % arabic glyphs] % % so, => is used to signal a priority \def\dodousefiltersequence#1% {\expandafter\ocp\csname\??or:#1\endcsname=\truefiltername{#1}\relax \splitstring#1\at=>\to\!!stringa\and\!!stringb \edef\!!stringb{\number\ifx\!!stringb\empty\magicocpnumber\else\!!stringb\fi}% \appendetoks \noexpand\addbeforeocplist \!!stringb\space \expandafter\noexpand\csname\??or:\!!stringa\endcsname \to \scratchtoks} \unexpanded\def\usefiltersequence[#1]% {\doifdefined{\??ot::#1}% {\doifvalue{\??ot::#1}\v!stop {\scratchtoks\emptytoks \expanded{\processcommalist[\getvalue{\??ot#1}]}\dodousefiltersequence \expanded{\global\ocplist\csname\??ot:#1\endcsname=\the\scratchtoks}\nullocplist \letgvalue{\??ot::#1}\v!start}% \expanded{\pushocplist\csname\??ot:#1\endcsname}\relax}} %D \macros %D {usefilter} \def\dousefilter#1% {\doifundefined{\c!file\f!filterprefix#1}% {\letvalue{\c!file\f!filterprefix#1}\empty \makeshortfilename[\truefilename{\f!filterprefix#1}]% \startreadingfile \readsysfile{\shortfilename.mkii} {\showmessage\m!filters1{#1}} {\showmessage\m!filters2{#1}}% \stopreadingfile}} \def\usefilter[#1]% {\processcommalist[#1]\dousefilter} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-set.mkvi0000644000175000017500000001344112130411274024316 0ustar norbertnorbert%D \module %D [ file=font-set, %D version=2011.01.13, % (copied fron font-ini) %D title=\CONTEXT\ Font Macros, %D subtitle=Initial Loading, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Initial Loading} \unprotect %D Defining fonts using \type{\definebodyfont} takes time, so we %D prefer to predefine at least the Computer Modern Roman %D fonts. However, loading all those fonts at definition time %D would take both time and space. But even worse, once fonts %D are loaded into memory, their encoding vector is fixed, %D which is a handicap when we want to distribute the compact %D \type{fmt} files. So what we want to do is defining fonts in %D a way that postpones the loading. We accomplish this by only %D loading the fonts when we switch to another bodyfont size. %D Among the other alternatives, such as loading the font at %D the moment of activation and redefining the activation %D macro afterwards, this proved to be the most efficient %D alternative. %D %D The next few macros take care of the one exeption on this %D scheme. When at format generation time we load the default %D font file, the one that defines the Computer Modern Fonts, %D we don't want the fonts metrics to end up in the format %D file, so we temporary prohibit loading. This means that at %D runtime we have to load the default bodyfont size just before %D we start typesetting. % \enablemode[lmmath] \def\font_preloads_reset_nullfont % this is needed because some macro packages (tikz) misuse \nullfont {\dorecurse\plusseven{\fontdimen\recurselevel\nullfont\zeropoint}% keep en eye on this as: \ctxcommand{resetnullfont()}% in luatex 0.70 this will also do the previous \globallet\font_preloads_reset_nullfont\relax} \def\font_preload_default_fonts {\font_preloads_reset \doifmodeelse{lmmath} {\setupbodyfont[modern-designsize-virtual,\fontstyle,\fontbody]}% this will stay {\setupbodyfont[modern-designsize,\fontstyle,\fontbody]}% % this might become 'modern' \showmessage\m!fonts6{fallback modern \fontstyle\normalspace\normalizedbodyfontsize}} \def\font_preload_default_fonts_mm {\writestatus\m!fonts{preloading latin modern fonts (math)}% \definetypeface[\fontclass][\s!mm][\s!math][modern][\s!default]% \showmessage\m!fonts6{fallback modern mm \normalizedbodyfontsize}} \def\font_preload_default_fonts_tt {\writestatus\m!fonts{preloading latin modern fonts (mono)}% \definetypeface[\fontclass][\s!tt][\s!mono][modern][\s!default]% \showmessage\m!fonts6{fallback modern tt \normalizedbodyfontsize}} \def\font_preloads_reset {\glet\font_preload_default_fonts \relax %\glet\font_preload_default_fonts_tt\relax %\glet\font_preload_default_fonts_mm\relax \glet\font_preloads_zero_stage \relax \glet\font_preloads_first_stage \relax \glet\font_preloads_second_stage \relax %\glet\font_preloads_third_stage \relax \glet\fourthstagepreloadfonts \relax \global\everyhbox\emptytoks \global\everyvbox\emptytoks \font_preloads_reset_nullfont} \appendtoks \font_preloads_reset \to \everystartnotext \def\font_preloads_reset_checked {\glet\font_preload_default_fonts_tt\relax \glet\font_preload_default_fonts_mm\relax \glet\font_preloads_third_stage \relax} \def\font_preloads_zero_stage_indeed {\definedfont[\s!file:lmmono10-regular sa 1]} \unexpanded\def\font_preloads_zero_stage {\writestatus\m!fonts{beware: no fonts are loaded yet, using 'lm mono' in box}% \glet\font_preloads_zero_stage\font_preloads_zero_stage_indeed \font_preloads_zero_stage} \unexpanded\def\font_preloads_first_stage % % *nofonts -> *preloadfonts {\doifmodeelse{*preloadfonts} {\font_preload_default_fonts \writestatus\m!fonts{preloading latin modern fonts (first stage)}} {\writestatus\m!fonts{latin modern fonts are not preloaded}}} \unexpanded\def\font_preloads_second_stage {\writestatus\m!fonts{preloading latin modern fonts (second stage)}% \font_preload_default_fonts} \unexpanded\def\font_preloads_third_stage % always {\ifx\fontclass\empty \writestatus\m!fonts{preloading latin modern fonts (third stage)}% \font_preload_default_fonts \font_preloads_reset \else \font_preloads_reset \pushmacro\fontstyle \ifcsname\??fontclass\fontclass\s!mm\s!features\endcsname \else \font_preload_default_fonts_mm \fi \ifcsname\??fontclass\fontclass\s!tt\s!features\endcsname \else \font_preload_default_fonts_tt \fi \popmacro\fontstyle \font_preloads_reset_checked % reset third, mm and tt \setupbodyfont[\fontstyle]% \fi} \unexpanded\def\font_preloads_fourth_stage {\begingroup %ifzeropt\fontcharwd\font\number`!\relax \setbox\scratchbox\hbox{checking fonts}% \ifzeropt\wd\scratchbox \writeline \writestatus\m!fonts{!! No bodyfont has been defined and no defaults have been}% \writestatus\m!fonts{!! loaded (maybe due to a missing \string\starttext).}% \writeline \fi \font_preloads_reset \endgroup} \appendtoks \everyhbox{\font_preloads_zero_stage}% \everyvbox{\font_preloads_zero_stage}% \to \everydump \unexpanded\def\font_preloads_at_every_job {\font_preloads_first_stage } \unexpanded\def\font_preloads_at_start_text{\font_preloads_second_stage} \unexpanded\def\font_preloads_at_stop_text {\font_preloads_fourth_stage} \unexpanded\def\font_preloads_at_definition{\font_preloads_third_stage \glet\font_preloads_at_definition\relax} % \unexpanded\def\checkpreloadedbodyfont % no \let here % {\font_preloads_at_start_text} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-cp1256.lua0000644000175000017500000000457411571377075024267 0ustar norbertnorbertif not modules then modules = { } end modules ['regi-cp1256'] = { version = 1.001, comment = "companion to regi-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } return { [0] = 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F, 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF, 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2 } context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-exp.lua0000644000175000017500000002214712130411274024120 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-exp'] = { version = 1.001, comment = "companion to trac-log.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local formatters = string.formatters local reporters = logs.reporters local xmlserialize = xml.serialize local xmlcollected = xml.collected local xmltext = xml.text local xmlfirst = xml.first local xmlfilter = xml.filter -- there is no need for a newhandlers { name = "help", parent = "string" } local function flagdata(flag) local name = flag.at.name or "" local value = flag.at.value or "" -- local short = xmlfirst(s,"/short") -- local short = xmlserialize(short,xs) local short = xmltext(xmlfirst(flag,"/short")) or "" return name, value, short end local function exampledata(example) local command = xmltext(xmlfirst(example,"/command")) or "" local comment = xmltext(xmlfirst(example,"/comment")) or "" return command, comment end local function categorytitle(category) return xmltext(xmlfirst(category,"/title")) or "" end local exporters = logs.exporters function exporters.man(specification,...) local root = xml.convert(specification.helpinfo or "") if not root then return end local xs = xml.gethandlers("string") xml.sethandlersfunction(xs,"short",function(e,handler) xmlserialize(e.dt,handler) end) xml.sethandlersfunction(xs,"ref", function(e,handler) handler.handle("--"..e.at.name) end) local wantedcategories = select("#",...) == 0 and true or table.tohash { ... } local nofcategories = xml.count(root,"/application/flags/category") local name = xmlfilter(root,"/application/metadata/entry[@name='name']/text()") local detail = xmlfilter(root,"/application/metadata/entry[@name='detail']/text()") or name local version = xmlfilter(root,"/application/metadata/entry[@name='version']/text()") or "0.00" local banner = specification.banner or detail or name -- local result = { } -- -- .TH "context" "1" "some date" "version" "ConTeXt" -- we use a fake date as I don't want to polute the git repos -- local runner = string.match(name,"^mtx%-(.*)") if runner then runner = formatters["mtxrun --script %s"](runner) else runner = name end -- result[#result+1] = formatters['.TH "%s" "1" "%s" "version %s" "%s"'](name,os.date("01-01-%Y"),version,detail) result[#result+1] = formatters[".SH NAME\n.B %s"](name) result[#result+1] = formatters[".SH SYNOPSIS\n.B %s [\n.I OPTIONS ...\n.B ] [\n.I FILENAMES\n.B ]"](runner) result[#result+1] = formatters[".SH DESCRIPTION\n.B %s"](detail) -- for category in xmlcollected(root,"/application/flags/category") do if nofcategories > 1 then result[#result+1] = formatters['.SH OPTIONS: %s'](string.upper(category.at.name or "all")) else result[#result+1] = ".SH OPTIONS" end for subcategory in xmlcollected(category,"/subcategory") do for flag in xmlcollected(subcategory,"/flag") do local name, value, short = flagdata(flag) if value == "" then result[#result+1] = formatters[".TP\n.B --%s\n%s"](name,short) else result[#result+1] = formatters[".TP\n.B --%s=%s\n%s"](name,value,short) end end end end local moreinfo = specification.moreinfo if moreinfo and moreinfo ~= "" then moreinfo = string.gsub(moreinfo,"[\n\r]([%a]+)%s*:%s*",'\n\n.B "%1:"\n') result[#result+1] = formatters[".SH AUTHOR\n%s"](moreinfo) end return table.concat(result,"\n") end local craptemplate = [[ %s %s ]] function exporters.xml(specification,...) local helpinfo = specification.helpinfo if type(helpinfo) == "string" then if string.find(helpinfo,"^<%?xml") then return helpinfo end elseif type(helpinfo) == "table" then helpinfo = table.concat(helpinfo,"\n\n") else helpinfo = "no help" end return formatters[craptemplate](specification.banner or "?",helpinfo) end -- the following template is optimized a bit for space -- local bodytemplate = [[ --

Command line options

-- -- -- -- -- -- -- 1 then -- ?> -- -- -- -- -- -- --
flagvaluedescription
--
--
--





-- ]] local bodytemplate = [[

Command line options

1 then ?>
flagvaluedescription
--





]] function exporters.html(specification,...) local root = xml.convert(specification.helpinfo or "") if not root then return end local xs = xml.gethandlers("string") xml.sethandlersfunction(xs,"short",function(e,handler) xmlserialize(e.dt,handler) end) xml.sethandlersfunction(xs,"ref", function(e,handler) handler.handle("--"..e.at.name) end) local wantedcategories = select("#",...) == 0 and true or table.tohash { ... } local nofcategories = xml.count(root,"/application/flags/category") local name = xmlfilter(root,"/application/metadata/entry[@name='name']/text()") local detail = xmlfilter(root,"/application/metadata/entry[@name='detail']/text()") or name local version = xmlfilter(root,"/application/metadata/entry[@name='version']/text()") or "0.00" local banner = specification.banner or detail or name -- dofile(resolvers.findfile("trac-lmx.lua","tex")) -- local htmltemplate = io.loaddata(resolvers.findfile("context-base.lmx","tex")) or "no template" -- local body = lmx.convertstring(bodytemplate, { nofcategories = nofcategories, wantedcategories = wantedcategories, root = root, -- moreinfo = specification.moreinfo, flagdata = flagdata, exampledata = exampledata, categorytitle = categorytitle, }) local html = lmx.convertstring(htmltemplate, { maintext = body, title = banner, bottomtext = "wiki: http://contextgarden.net | mail: ntg-context@ntg.nl | website: http://www.pragma-ade.nl", }) -- return html end context-2013.05.28.20130704/texmf-dist/tex/context/base/font-chk.lua0000644000175000017500000002664412161703335024122 0ustar norbertnorbertif not modules then modules = { } end modules ['font-chk'] = { version = 1.001, comment = "companion to font-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- possible optimization: delayed initialization of vectors -- move to the nodes namespace local format = string.format local bpfactor = number.dimenfactors.bp local report_fonts = logs.reporter("fonts","checking") local fonts = fonts fonts.checkers = fonts.checkers or { } local checkers = fonts.checkers local fonthashes = fonts.hashes local fontdata = fonthashes.identifiers local fontcharacters = fonthashes.characters local addprivate = fonts.helpers.addprivate local hasprivate = fonts.helpers.hasprivate local getprivatenode = fonts.helpers.getprivatenode local otffeatures = fonts.constructors.newfeatures("otf") local registerotffeature = otffeatures.register local is_character = characters.is_character local chardata = characters.data local tasks = nodes.tasks local enableaction = tasks.enableaction local disableaction = tasks.disableaction local glyph_code = nodes.nodecodes.glyph local traverse_id = node.traverse_id local remove_node = nodes.remove local insert_node_after = node.insert_after -- maybe in fonts namespace -- deletion can be option local action = false -- to tfmdata.properties ? local function onetimemessage(font,char,message) -- char == false returns table local tfmdata = fontdata[font] local shared = tfmdata.shared local messages = shared.messages if not messages then messages = { } shared.messages = messages end local category = messages[message] if not category then category = { } messages[message] = category end if char == false then return table.sortedkeys(category) elseif not category[char] then report_fonts("char %U in font %a with id %a: %s",char,tfmdata.properties.fullname,font,message) category[char] = true end end fonts.loggers.onetimemessage = onetimemessage local mapping = { -- this is just an experiment to illustrate some principles elsewhere lu = "placeholder uppercase red", ll = "placeholder lowercase red", lt = "placeholder uppercase red", lm = "placeholder lowercase red", lo = "placeholder lowercase red", mn = "placeholder mark green", mc = "placeholder mark green", me = "placeholder mark green", nd = "placeholder lowercase blue", nl = "placeholder lowercase blue", no = "placeholder lowercase blue", pc = "placeholder punctuation cyan", pd = "placeholder punctuation cyan", ps = "placeholder punctuation cyan", pe = "placeholder punctuation cyan", pi = "placeholder punctuation cyan", pf = "placeholder punctuation cyan", po = "placeholder punctuation cyan", sm = "placeholder lowercase magenta", sc = "placeholder lowercase yellow", sk = "placeholder lowercase yellow", so = "placeholder lowercase yellow", } table.setmetatableindex(mapping,function(t,k) v = "placeholder unknown gray" t[k] = v return v end) local fakes = { { name = "lowercase", code = ".025 -.175 m .425 -.175 l .425 .525 l .025 .525 l .025 -.175 l .025 0 l .425 0 l .025 -.175 m h S", width = .45, height = .55, depth = .20, }, { name = "uppercase", code = ".025 -.225 m .625 -.225 l .625 .675 l .025 .675 l .025 -.225 l .025 0 l .625 0 l .025 -.225 m h S", width = .65, height = .70, depth = .25, }, { name = "mark", code = ".025 .475 m .125 .475 l .125 .675 l .025 .675 l .025 .475 l h B", width = .15, height = .70, depth = -.50, }, { name = "punctuation", code = ".025 -.175 m .125 -.175 l .125 .525 l .025 .525 l .025 -.175 l h B", width = .15, height = .55, depth = .20, }, { name = "unknown", code = ".025 0 m .425 0 l .425 .175 l .025 .175 l .025 0 l h B", width = .45, height = .20, depth = 0, }, } local variants = { { tag = "gray", r = .6, g = .6, b = .6 }, { tag = "red", r = .6, g = 0, b = 0 }, { tag = "green", r = 0, g = .6, b = 0 }, { tag = "blue", r = 0, g = 0, b = .6 }, { tag = "cyan", r = 0, g = .6, b = .6 }, { tag = "magenta", r = .6, g = 0, b = .6 }, { tag = "yellow", r = .6, g = .6, b = 0 }, } local package = "q %0.6f 0 0 %0.6f 0 0 cm %s %s %s rg %s %s %s RG 10 M 1 j 1 J 0.05 w %s Q" local cache = { } -- saves some tables but not that impressive local function addmissingsymbols(tfmdata) -- we can have an alternative with rules local characters = tfmdata.characters local size = tfmdata.parameters.size local privates = tfmdata.properties.privates local scale = size * bpfactor for i=1,#variants do local v = variants[i] local tag, r, g, b = v.tag, v.r, v.g, v.b for i =1, #fakes do local fake = fakes[i] local name = fake.name local privatename = format("placeholder %s %s",name,tag) if not hasprivate(tfmdata,privatename) then local hash = format("%s_%s_%s_%s_%s_%s",name,tag,r,g,b,size) local char = cache[hash] if not char then char = { width = size*fake.width, height = size*fake.height, depth = size*fake.depth, -- bah .. low level pdf ... should be a rule or plugged in commands = { { "special", "pdf: " .. format(package,scale,scale,r,g,b,r,g,b,fake.code) } } } cache[hash] = char end addprivate(tfmdata, privatename, char) end end end end registerotffeature { name = "missing", description = "missing symbols", manipulators = { base = addmissingsymbols, node = addmissingsymbols, } } fonts.loggers.add_placeholders = function(id) addmissingsymbols(fontdata[id or true]) end fonts.loggers.category_to_placeholder = mapping function commands.getplaceholderchar(name) local id = font.current() addmissingsymbols(fontdata[id]) context(fonts.helpers.getprivatenode(fontdata[id],name)) end function checkers.missing(head) local lastfont, characters, found = nil, nil, nil for n in traverse_id(glyph_code,head) do -- faster than while loop so we delay removal local font = n.font local char = n.char if font ~= lastfont then characters = fontcharacters[font] end if not characters[char] and is_character[chardata[char].category] then if action == "remove" then onetimemessage(font,char,"missing (will be deleted)") elseif action == "replace" then onetimemessage(font,char,"missing (will be flagged)") else onetimemessage(font,char,"missing") end if not found then found = { n } else found[#found+1] = n end end end if not found then -- all well elseif action == "remove" then for i=1,#found do head = remove_node(head,found[i],true) end elseif action == "replace" then for i=1,#found do local n = found[i] local font = n.font local char = n.char local tfmdata = fontdata[font] local properties = tfmdata.properties local privates = properties.privates local category = chardata[char].category local fakechar = mapping[category] local p = privates and privates[fakechar] if not p then addmissingsymbols(tfmdata) p = properties.privates[fakechar] end if properties.lateprivates then -- .frozen -- bad, we don't have them at the tex end local fake = getprivatenode(tfmdata,fakechar) insert_node_after(head,n,fake) head = remove_node(head,n,true) else -- good, we have \definefontfeature[default][default][missing=yes] n.char = p end end else -- maye write a report to the log end return head, false end local relevant = { "missing (will be deleted)", "missing (will be flagged)", "missing" } function checkers.getmissing(id) if id then local list = checkers.getmissing(font.current()) if list then local _, list = next(checkers.getmissing(font.current())) return list else return { } end else local t = { } for id, d in next, fontdata do local shared = d.shared local messages = shared.messages if messages then local tf = t[d.properties.filename] or { } for i=1,#relevant do local tm = messages[relevant[i]] if tm then tf = table.merged(tf,tm) end end if next(tf) then t[d.properties.filename] = tf end end end for k, v in next, t do t[k] = table.sortedkeys(v) end return t end end local tracked = false trackers.register("fonts.missing", function(v) if v then enableaction("processors","fonts.checkers.missing") tracked = true else disableaction("processors","fonts.checkers.missing") end if v == "replace" then otffeatures.defaults.missing = true end action = v end) function commands.checkcharactersinfont() enableaction("processors","fonts.checkers.missing") tracked = true end function commands.removemissingcharacters() enableaction("processors","fonts.checkers.missing") action = "remove" tracked = true end function commands.replacemissingcharacters() enableaction("processors","fonts.checkers.missing") action = "replace" otffeatures.defaults.missing = true tracked = true end local report_characters = logs.reporter("fonts","characters") local report_character = logs.reporter("missing") local logsnewline = logs.newline local logspushtarget = logs.pushtarget local logspoptarget = logs.poptarget luatex.registerstopactions(function() if tracked then local collected = checkers.getmissing() if next(collected) then logspushtarget("logfile") for filename, list in table.sortedhash(collected) do logsnewline() report_characters("start missing characters: %s",filename) logsnewline() for i=1,#list do local u = list[i] report_character("%U %c %s",u,u,chardata[u].description) end logsnewline() report_characters("stop missing characters") logsnewline() end logspoptarget() end end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-67.tex0000644000175000017500000000760012130411274023671 0ustar norbertnorbert% todo: version of placement that also takes the sync node \usemodule[s][abr-02] \usemodule[s][pre-60] \definecolor[red:fullcolor] [r=1] \definecolor[red:lightcolor] [r=.5] \definecolor[red:darkcolor] [r=.375] \definecolor[green:fullcolor] [g=1] \definecolor[green:lightcolor] [g=.5] \definecolor[green:darkcolor] [g=.375] \definecolor[blue:fullcolor] [b=1] \definecolor[blue:lightcolor] [b=.5] \definecolor[blue:darkcolor] [b=.375] \definepalet[red-scheme] [fullcolor=red:fullcolor, lightcolor=red:lightcolor, darkcolor=red:darkcolor] \definepalet[green-scheme][fullcolor=green:fullcolor,lightcolor=green:lightcolor,darkcolor=green:darkcolor] \definepalet[blue-scheme] [fullcolor=blue:fullcolor, lightcolor=blue:lightcolor, darkcolor=blue:darkcolor] \setuppalet[red-scheme] \setupcolors [textcolor=darkcolor] \setupinteraction [color=darkcolor, contrastcolor=darkcolor] \startuseMPgraphic{bullet} path b, p ; p := fullsquare scaled .5LineHeight ; b := boundingbox p ; p := p rotatedaround(center p, 45) ; p := p shifted (0,-.125StrutDepth) ; fill p withcolor \MPcolor{lightcolor} ; setbounds currentpicture to b ; \stopuseMPgraphic \startuseMPgraphic{bar} path b, p ; p := fullsquare scaled .25LineHeight ; b := boundingbox p ; p := p rotatedaround(center p, 45) ; p := p shifted (0,+.25StrutDepth) ; fill p withcolor \MPcolor{lightcolor} ; setbounds currentpicture to b ; \stopuseMPgraphic \startuseMPgraphic{page} StartPage ; fill Page enlarged 5mm withcolor .1[white,\MPcolor{fullcolor}] ; interim linecap := butt ; numeric h ; h := bbheight(Page)/4 ; numeric w ; w := bbwidth(Page)/4 ; h := h randomized(h) ; w := w randomized(w) ; draw ulcorner Page shifted (0,-h) -- ulcorner Page -- ulcorner Page shifted (w,0) withpen pensquare scaled .5cm withcolor \MPcolor{lightcolor} ; numeric h ; h := bbheight(Page)/4 ; numeric w ; w := bbwidth(Page)/4 ; h := h randomized(h) ; w := w randomized(w) ; draw lrcorner Page shifted (0,h) -- lrcorner Page -- lrcorner Page shifted (-w,0) withpen pensquare scaled .5cm withcolor \MPcolor{lightcolor} ; setbounds currentpicture to Page ; StopPage ; \stopuseMPgraphic \defineoverlay[page][\useMPgraphic{page}] \definesymbol[1][\reuseMPgraphic{bullet}] \definesymbol[2][\reuseMPgraphic{bar}] \setupitemgroup[itemize][2][width=1em] \setupinteraction [state=start, click=no] \setuppapersize [S6][S6] \setuplayout [width=middle, height=middle, header=0pt, footer=0pt, backspace=1cm, % topspace=1cm] topspace=.5cm] \setupbackgrounds [page] [background=page] \setuphead [chapter] [command=\MyCommand, before=, after={\blank[disable]}, color=lightcolor, style=\bfc] \definelayer [title] [width=\paperwidth, height=\paperheight] \setupbackgrounds [page] [background={page,title}] \setupwhitespace [big] \unexpanded\def\MyCommand#1#2% {\setlayer[title][preset=rightbottom,x=.75cm,y=.5cm]{#2}} \def\titlepage#1#2% {\startstandardmakeup \definefont[LargeFont][Normal at 100pt] \setlayerframed [title] [preset=lefttop,x=1cm,y=.25cm] [align=flushleft,foregroundstyle=\LargeFont,offset=0pt,foregroundcolor=lightcolor,frame=off] {#1} \definefont[SmallFont][Normal at 50pt] \setlayerframed [title] [preset=rightbottom,x=1cm,y=.5cm] [align=flushright,foregroundstyle=\SmallFont,offset=0pt,foregroundcolor=lightcolor,frame=off] {#2} \stopstandardmakeup} \let\Title\title \let\TitlePage\titlepage \doifnotmode{demo}{\endinput} \starttext \chapter{Test} \startitemize \startitem test \stopitem \startitem test \stopitem \startitem test \stopitem \stopitemize \stoptext \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-16.mkii0000644000175000017500000002675211754241457024357 0ustar norbertnorbert%D \module %D [ file=regi-8859-16, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-16 (Romanian), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-16/Latin10 input encoding (regime) for Romanian. %D %D Usage: \type{\enableregime[8859-16]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-16] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\Aogonek} % 0104 LATIN CAPITAL LETTER A WITH OGONEK \defineactivetoken 162 {\aogonek} % 0105 LATIN SMALL LETTER A WITH OGONEK \defineactivetoken 163 {\Lstroke} % 0141 LATIN CAPITAL LETTER L WITH STROKE \defineactivetoken 164 {\texteuro} % 20AC EURO SIGN \defineactivetoken 165 {\quotedblbase} % 201E DOUBLE LOW-9 QUOTATION MARK \defineactivetoken 166 {\Scaron} % 0160 LATIN CAPITAL LETTER S WITH CARON \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\scaron} % 0161 LATIN SMALL LETTER S WITH CARON \defineactivetoken 169 {\copyright} % 00A9 COPYRIGHT SIGN \defineactivetoken 170 {\Scommaaccent} % 0218 LATIN CAPITAL LETTER S WITH COMMA BELOW \defineactivetoken 171 {\leftguillemot} % 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 172 {\Zacute} % 0179 LATIN CAPITAL LETTER Z WITH ACUTE \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\zacute} % 017A LATIN SMALL LETTER Z WITH ACUTE \defineactivetoken 175 {\Zdotaccent} % 017B LATIN CAPITAL LETTER Z WITH DOT ABOVE \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\textpm} % 00B1 PLUS-MINUS SIGN \defineactivetoken 178 {\Ccaron} % 010C LATIN CAPITAL LETTER C WITH CARON \defineactivetoken 179 {\lstroke} % 0142 LATIN SMALL LETTER L WITH STROKE \defineactivetoken 180 {\Zcaron} % 017D LATIN CAPITAL LETTER Z WITH CARON \defineactivetoken 181 {\quotedblright} % 201D RIGHT DOUBLE QUOTATION MARK \defineactivetoken 182 {\paragraphmark} % 00B6 PILCROW SIGN \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\zcaron} % 017E LATIN SMALL LETTER Z WITH CARON \defineactivetoken 185 {\ccaron} % 010D LATIN SMALL LETTER C WITH CARON \defineactivetoken 186 {\scommaaccent} % 0219 LATIN SMALL LETTER S WITH COMMA BELOW \defineactivetoken 187 {\rightguillemot} % 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \defineactivetoken 188 {\OEligature} % 0152 LATIN CAPITAL LIGATURE OE \defineactivetoken 189 {\oeligature} % 0153 LATIN SMALL LIGATURE OE \defineactivetoken 190 {\Ydiaeresis} % 0178 LATIN CAPITAL LETTER Y WITH DIAERESIS \defineactivetoken 191 {\zdotaccent} % 017C LATIN SMALL LETTER Z WITH DOT ABOVE \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 195 {\Abreve} % 0102 LATIN CAPITAL LETTER A WITH BREVE \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Cacute} % 0106 LATIN CAPITAL LETTER C WITH ACUTE \defineactivetoken 198 {\AEligature} % 00C6 LATIN CAPITAL LETTER AE \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 208 {\Dstroke} % 0110 LATIN CAPITAL LETTER D WITH STROKE \defineactivetoken 209 {\Nacute} % 0143 LATIN CAPITAL LETTER N WITH ACUTE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Ohungarumlaut} % 0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\Sacute} % 015A LATIN CAPITAL LETTER S WITH ACUTE \defineactivetoken 216 {\Uhungarumlaut} % 0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Eogonek} % 0118 LATIN CAPITAL LETTER E WITH OGONEK \defineactivetoken 222 {\Tcommaaccent} % 021A LATIN CAPITAL LETTER T WITH COMMA BELOW \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 227 {\abreve} % 0103 LATIN SMALL LETTER A WITH BREVE \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\cacute} % 0107 LATIN SMALL LETTER C WITH ACUTE \defineactivetoken 230 {\aeligature} % 00E6 LATIN SMALL LETTER AE \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 240 {\dstroke} % 0111 LATIN SMALL LETTER D WITH STROKE \defineactivetoken 241 {\nacute} % 0144 LATIN SMALL LETTER N WITH ACUTE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\ohungarumlaut} % 0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\sacute} % 015B LATIN SMALL LETTER S WITH ACUTE \defineactivetoken 248 {\uhungarumlaut} % 0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\eogonek} % 0119 LATIN SMALL LETTER E WITH OGONEK \defineactivetoken 254 {\tcommaaccent} % 021B LATIN SMALL LETTER T WITH COMMA BELOW \defineactivetoken 255 {\ydiaeresis} % 00FF LATIN SMALL LETTER Y WITH DIAERESIS \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-ptx.mkii0000644000175000017500000001657311754241457024356 0ustar norbertnorbert%D \module %D [ file=norm-ptx, %D version=2009.03.19, %D title=\CONTEXT\ Norm Macros, %D subtitle=\PDFTEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Eventually most of these will be disabled in \MKIV. \let \normalefcode = \efcode \let \normalexpanded = \expanded \let \normalifincsname = \ifincsname \let \normalifpdfabsdim = \ifpdfabsdim \let \normalifpdfabsnum = \ifpdfabsnum \let \normalifpdfprimitive = \ifpdfprimitive \let \normalleftmarginkern = \leftmarginkern \let \normalletterspacefont = \letterspacefont \let \normallpcode = \lpcode \let \normalpdfadjustspacing = \pdfadjustspacing \let \normalpdfannot = \pdfannot \let \normalpdfcatalog = \pdfcatalog \let \normalpdfcolorstack = \pdfcolorstack \let \normalpdfcolorstackinit = \pdfcolorstackinit \let \normalpdfcompresslevel = \pdfcompresslevel \let \normalpdfcopyfont = \pdfcopyfont \let \normalpdfcreationdate = \pdfcreationdate \let \normalpdfdecimaldigits = \pdfdecimaldigits \let \normalpdfdest = \pdfdest \let \normalpdfdestmargin = \pdfdestmargin \let \normalpdfdraftmode = \pdfdraftmode \let \normalpdfeachlinedepth = \pdfeachlinedepth \let \normalpdfeachlineheight = \pdfeachlineheight \let \normalpdfendlink = \pdfendlink \let \normalpdfendthread = \pdfendthread \let \normalpdffirstlineheight = \pdffirstlineheight \let \normalpdffontattr = \pdffontattr \let \normalpdffontexpand = \pdffontexpand \let \normalpdffontname = \pdffontname \let \normalpdffontobjnum = \pdffontobjnum \let \normalpdffontsize = \pdffontsize \let \normalpdfforcepagebox = \pdfforcepagebox % obsolete \let \normalpdfgamma = \pdfgamma \let \normalpdfgentounicode = \pdfgentounicode \let \normalpdfglyphtounicode = \pdfglyphtounicode \let \normalpdfhorigin = \pdfhorigin \let \normalpdfignoreddimen = \pdfignoreddimen \let \normalpdfimageapplygamma = \pdfimageapplygamma \let \normalpdfimagegamma = \pdfimagegamma \let \normalpdfimagehicolor = \pdfimagehicolor \let \normalpdfimageresolution = \pdfimageresolution \let \normalpdfincludechars = \pdfincludechars \let \normalpdfinclusioncopyfonts = \pdfinclusioncopyfonts \let \normalpdfinclusionerrorlevel = \pdfinclusionerrorlevel \let \normalpdfinfo = \pdfinfo \let \normalpdfinsertht = \pdfinsertht \let \normalpdflastannot = \pdflastannot \let \normalpdflastlinedepth = \pdflastlinedepth \let \normalpdflastlink = \pdflastlink \let \normalpdflastobj = \pdflastobj \let \normalpdflastxform = \pdflastxform \let \normalpdflastximage = \pdflastximage \let \normalpdflastximagecolordepth = \pdflastximagecolordepth \let \normalpdflastximagepages = \pdflastximagepages \let \normalpdflastxpos = \pdflastxpos \let \normalpdflastypos = \pdflastypos \let \normalpdflinkmargin = \pdflinkmargin \let \normalpdfliteral = \pdfliteral \let \normalpdfmapfile = \pdfmapfile \let \normalpdfmapline = \pdfmapline \let \normalpdfminorversion = \pdfminorversion \let \normalpdfmovechars = \pdfmovechars % obsolete \let \normalpdfnames = \pdfnames \let \normalpdfnoligatures = \pdfnoligatures \let \normalpdfnormaldeviate = \pdfnormaldeviate \let \normalpdfobj = \pdfobj \let \normalpdfobjcompresslevel = \pdfobjcompresslevel \let \normalpdfoptionalwaysusepdfpagebox = \pdfoptionalwaysusepdfpagebox % obsolete \let \normalpdfoptionpdfinclusionerrorlevel = \pdfoptionpdfinclusionerrorlevel % obsolete \let \normalpdfoptionpdfminorversion = \pdfoptionpdfminorversion \let \normalpdfoutline = \pdfoutline \let \normalpdfoutput = \pdfoutput \let \normalpdfpageattr = \pdfpageattr \let \normalpdfpagebox = \pdfpagebox \let \normalpdfpageheight = \pdfpageheight \let \normalpdfpageref = \pdfpageref \let \normalpdfpageresources = \pdfpageresources \let \normalpdfpagesattr = \pdfpagesattr \let \normalpdfpagewidth = \pdfpagewidth \let \normalpdfpkmode = \pdfpkmode \let \normalpdfpkresolution = \pdfpkresolution \let \normalpdfprimitive = \pdfprimitive \let \normalpdfprotrudechars = \pdfprotrudechars \let \normalpdfpxdimen = \pdfpxdimen \let \normalpdfrandomseed = \pdfrandomseed \let \normalpdfrefobj = \pdfrefobj \let \normalpdfrefxform = \pdfrefxform \let \normalpdfrefximage = \pdfrefximage \let \normalpdfreplacefont = \pdfreplacefont \let \normalpdfrestore = \pdfrestore \let \normalpdfretval = \pdfretval \let \normalpdfsave = \pdfsave \let \normalpdfsavepos = \pdfsavepos \let \normalpdfsetmatrix = \pdfsetmatrix \let \normalpdfsetrandomseed = \pdfsetrandomseed \let \normalpdfstartlink = \pdfstartlink \let \normalpdfstartthread = \pdfstartthread \let \normalpdftexbanner = \pdftexbanner \let \normalpdftexrevision = \pdftexrevision \let \normalpdftexversion = \pdftexversion \let \normalpdfthread = \pdfthread \let \normalpdfthreadmargin = \pdfthreadmargin \let \normalpdftracingfonts = \pdftracingfonts \let \normalpdftrailer = \pdftrailer \let \normalpdfuniformdeviate = \pdfuniformdeviate \let \normalpdfuniqueresname = \pdfuniqueresname \let \normalpdfvorigin = \pdfvorigin \let \normalpdfxform = \pdfxform \let \normalpdfxformname = \pdfxformname \let \normalpdfximage = \pdfximage \let \normalpdfximagebbox = \pdfximagebbox \let \normalquitvmode = \quitvmode \let \normalrightmarginkern = \rightmarginkern \let \normalrpcode = \rpcode \let \normaltagcode = \tagcode \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/back-exp.mkiv0000644000175000017500000001430412130411274024250 0ustar norbertnorbert%D \module %D [ file=back-exp, %D version=2010.08.22, %D title=\CONTEXT\ Backend Macros, %D subtitle=XML export, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Backend Macros / XML export} \registerctxluafile{back-exp.lua}{1.001} %D This is an experimental exporter and a logical follow up on tagging. The %D exporter assumes a properly tagged document. Some elements get a couple %D of attributes becaus eitherwise rendering information would get lost. In %D general we assume that when the \XML\ is converted to \HTML\ some stylesheet %D is applied anyway. \unprotect % we can replace this by a more generic attributeset mechanism where we bind % to any element (needed anyway, see userdata thingies) \definesystemattribute[taggedpar][public] \unexpanded\def\setelementexporttag {\dotripleargument\back_export_set_element_tag} \def\back_export_set_element_tag {\ifthirdargument \expandafter \back_export_set_element_tag_a \else\ifsecondargument \doubleexpandafter\back_export_set_element_tag_b \fi\fi} \def\back_export_set_element_tag_a[#1][#2][#3]{\taggedctxcommand{settagproperty("#1","#2","#3")}} \def\back_export_set_element_tag_b[#1][#2][#3]{\taggedctxcommand{settagproperty("#1","export","#2")}} % todo: no need for calls when trialtypesetting \def\taggedctxcommand {\iftrialtypesetting \expandafter\gobbleoneargument \else \expandafter\ctxcommand \fi} \newcount\tagparcounter \let\dotagsetparcounter\relax \appendtoks \dotagsetparcounter \to \everypar \appendtoks \dotagsetparcounter \to \neverypar \appendtoks \dotagsetparcounter \to \everytabulatepar % tricky, maybe this should be neverypar \appendtoks \unexpanded\def\dotagTABLEcell {\taggedctxcommand{settagtablecell(\number\tablecellrows,\number\tablecellcolumns,\number\raggedstatus)}}% \unexpanded\def\dotagTABLEsignal{\char\zerocount}% brrr, we need to tag empty cells (unless we start numbering) \to \everyenableelements \appendtoks \unexpanded\def\dotagtabulatecell {\taggedctxcommand{settagtabulatecell(\number\c_tabl_tabulate_align)}}% \unexpanded\def\dotagtabulatesignal{\dontleavehmode\char\zerocount\ignorespaces}% \to \everyenableelements \appendtoks \unexpanded\def\dotagsynonym{\taggedctxcommand{settagsynonym("\currentsynonym","\currentsynonymtag")}}% \to \everyenableelements \appendtoks % frozen and assumed global per highlight class \unexpanded\def\dotaghighlight{\taggedctxcommand{settaghighlight("\currenthighlight","\highlightparameter\c!style",\number\attribute\colorattribute)}}% \to \everyenableelements \appendtoks % we can have differently scaled images \unexpanded\def\dotagfigure{\taggedctxcommand{settagfigure("\figurefileoriginal","\figurefilepage",\number\dimexpr\figurewidth,\number\dimexpr\figureheight)}}% \to \everyenableelements \appendtoks \unexpanded\def\dotagcombination{\taggedctxcommand{settagcombination(\combinationparameter\c!nx,\combinationparameter\c!ny)}}% %\unexpanded\def\dotagcombination{\taggedctxcommand{settagcombination(\number\horcombination,\number\totcombination)}}% \to \everyenableelements \appendtoks \unexpanded\def\dotagsorting{\taggedctxcommand{settagsorting("\currentsorting","\currentsortingtag")}}% \to \everyenableelements \appendtoks \unexpanded\def\dotagsetparcounter{\global\advance\tagparcounter\plusone\attribute\taggedparattribute\tagparcounter}% \to \everyenableelements \appendtoks \unexpanded\def\dotagsetitemgroup{\taggedctxcommand{settagitemgroup("\currentitemgroup",\ifconditional\c_strc_itemgroups_pack true\else false\fi,"\currentitemgroupsymbol")}}% \to \everyenableelements \appendtoks \unexpanded\def\dotagsetdescription{\taggedctxcommand{settagdescription("\currentdescription",\currentdescriptionnumberentry)}}% \to \everyenableelements \appendtoks \unexpanded\def\dotagsetnotesymbol{\taggedctxcommand{settagdescriptionsymbol("\currentnote",\currentnotenumber)}}% \to \everyenableelements \appendtoks \unexpanded\def\doverbatimspace{\char32\relax}% will be done permanently \to \everyenableelements % The action: \setupbackend[export=yes] % or filename % maybe xhtml css settings will move to setupexport % maybe some day a definer \installcorenamespace{export} \installparameterhandler \??export {export} \installsetuphandler \??export {export} \setupexport [\c!align=\number\raggedstatus, \c!bodyfont=\bodyfontsize, \c!width=\textwidth, \c!title={\directinteractionparameter\c!title}, \c!subtitle={\directinteractionparameter\c!subtitle}, \c!author={\directinteractionparameter\c!author}, % \c!firstpage=, % imagename % \c!lastpage=, % imagename \c!hyphen=\v!no] \def\dosynchronizeexport {\let\currentexport\empty \ctxcommand{setupexport{ align = "\exportparameter\c!align", bodyfont = \number\dimexpr\exportparameter\c!bodyfont, width = \number\dimexpr\exportparameter\c!width, hyphen = "\exportparameter\c!hyphen", title = \!!bs\exportparameter\c!title\!!es, subtitle = \!!bs\exportparameter\c!subtitle\!!es, author = \!!bs\exportparameter\c!author\!!es, firstpage = "\exportparameter\c!firstpage", lastpage = "\exportparameter\c!lastpage", }}} \appendtoks \doifsomething{\backendparameter\c!export}\dosynchronizeexport \to \everystarttext \appendtoks \doifsomething{\backendparameter\c!export}\dosynchronizeexport % in case it is done inside \starttext \to \everysetupdocument \appendtoks \doifsomething{\backendparameter\c!xhtml} {\enabledirectives[backend.export.xhtml=\backendparameter\c!xhtml]}% \doifsomething{\backendparameter\c!css} {\enabledirectives[backend.export.css={\backendparameter\c!css}]}% \to \everysetupbackend \appendtoks \doifelsenothing{\backendparameter\c!export} {\resetsystemmode\v!export} {\setuptagging[\c!state=\v!start]% \enabledirectives[backend.export=\backendparameter\c!export]% \setsystemmode\v!export}% \to \everysetupbackend \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mlib-run.lua0000644000175000017500000005075312161703335024134 0ustar norbertnorbertif not modules then modules = { } end modules ['mlib-run'] = { version = 1.001, comment = "companion to mlib-ctx.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files", } --~ cmyk -> done, native --~ spot -> done, but needs reworking (simpler) --~ multitone -> --~ shade -> partly done, todo: cm --~ figure -> done --~ hyperlink -> low priority, easy -- new * run -- or -- new * execute^1 * finish -- a*[b,c] == b + a * (c-b) --[[ldx--

The directional helpers and pen analysis are more or less translated from the code. It really helps that Taco know that source so well. Taco and I spent quite some time on speeding up the and code. There is not much to gain, especially if one keeps in mind that when integrated in only a part of the time is spent in . Of course an integrated approach is way faster than an external and processing time nears zero.

--ldx]]-- local type, tostring, tonumber = type, tostring, tonumber local format, gsub, match, find = string.format, string.gsub, string.match, string.find local concat = table.concat local emptystring = string.is_empty local lpegmatch, P = lpeg.match, lpeg.P local trace_graphics = false trackers.register("metapost.graphics", function(v) trace_graphics = v end) local trace_tracingall = false trackers.register("metapost.tracingall", function(v) trace_tracingall = v end) local report_metapost = logs.reporter("metapost") local texerrormessage = logs.texerrormessage local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming local mplib = mplib metapost = metapost or { } local metapost = metapost local mplibone = tonumber(mplib.version()) <= 1.50 metapost.showlog = false metapost.lastlog = "" metapost.collapse = true -- currently mplib cannot deal with begingroup/endgroup mismatch in stepwise processing metapost.texerrors = false metapost.exectime = metapost.exectime or { } -- hack -- metapost.collapse = false directives.register("mplib.texerrors", function(v) metapost.texerrors = v end) trackers.register ("metapost.showlog", function(v) metapost.showlog = v end) function metapost.resetlastlog() metapost.lastlog = "" end ----- mpbasepath = lpeg.instringchecker(lpeg.append { "/metapost/context/", "/metapost/base/" }) local mpbasepath = lpeg.instringchecker(P("/metapost/") * (P("context") + P("base")) * P("/")) -- local function i_finder(askedname,mode,ftype) -- fake message for mpost.map and metafun.mpvi -- local foundname = file.is_qualified_path(askedname) and askedname or resolvers.findfile(askedname,ftype) -- if not mpbasepath(foundname) then -- -- we could use the via file but we don't have a complete io interface yet -- local data, found, forced = metapost.checktexts(io.loaddata(foundname) or "") -- if found then -- local tempname = luatex.registertempfile(foundname,true) -- io.savedata(tempname,data) -- foundname = tempname -- end -- end -- return foundname -- end -- mplib has no real io interface so we have a different mechanism than -- tex (as soon as we have more control, we will use the normal code) local finders = { } mplib.finders = finders -- for some reason mp sometimes calls this function twice which is inefficient -- but we cannot catch this local function preprocessed(name) if not mpbasepath(name) then -- we could use the via file but we don't have a complete io interface yet local data, found, forced = metapost.checktexts(io.loaddata(name) or "") if found then local temp = luatex.registertempfile(name,true) io.savedata(temp,data) return temp end end return name end mplib.preprocessed = preprocessed -- helper finders.file = function(specification,name,mode,ftype) return preprocessed(resolvers.findfile(name,ftype)) end local function i_finder(name,mode,ftype) -- fake message for mpost.map and metafun.mpvi local specification = url.hashed(name) local finder = finders[specification.scheme] or finders.file return finder(specification,name,mode,ftype) end local function o_finder(name,mode,ftype) -- report_metapost("output file %a, mode %a, ftype %a",name,mode,ftype) return name end local function finder(name, mode, ftype) if mode == "w" then return o_finder(name,mode,ftype) else return i_finder(name,mode,ftype) end end local i_limited = false local o_limited = false directives.register("system.inputmode", function(v) if not i_limited then local i_limiter = io.i_limiter(v) if i_limiter then i_finder = i_limiter.protect(i_finder) i_limited = true end end end) directives.register("system.outputmode", function(v) if not o_limited then local o_limiter = io.o_limiter(v) if o_limiter then o_finder = o_limiter.protect(o_finder) o_limited = true end end end) -- -- -- metapost.finder = finder function metapost.reporterror(result) if not result then report_metapost("error: no result object returned") elseif result.status > 0 then local t, e, l = result.term, result.error, result.log if t and t ~= "" then (metapost.texerrors and texerrormessage or report_metapost)("terminal: %s",t) end if e == "" or e == "no-error" then e = nil end if e then (metapost.texerrors and texerrormessage or report_metapost)("error: %s",e) end if not t and not e and l then metapost.lastlog = metapost.lastlog .. "\n" .. l report_metapost("log: %s",l) else report_metapost("error: unknown, no error, terminal or log messages") end else return false end return true end if mplibone then report_metapost("fatal error: mplib is too old") os.exit() -- local preamble = [[ -- boolean mplib ; mplib := true ; -- string mp_parent_version ; mp_parent_version := "%s" ; -- input "%s" ; dump ; -- ]] -- -- metapost.parameters = { -- hash_size = 100000, -- main_memory = 4000000, -- max_in_open = 50, -- param_size = 100000, -- } -- -- function metapost.make(name, target, version) -- starttiming(mplib) -- target = file.replacesuffix(target or name, "mem") -- redundant -- local mpx = mplib.new ( table.merged ( -- metapost.parameters, -- { -- ini_version = true, -- find_file = finder, -- job_name = file.removesuffix(target), -- } -- ) ) -- if mpx then -- starttiming(metapost.exectime) -- local result = mpx:execute(format(preamble,version or "unknown",name)) -- stoptiming(metapost.exectime) -- mpx:finish() -- end -- stoptiming(mplib) -- end -- -- function metapost.load(name) -- starttiming(mplib) -- local mpx = mplib.new ( table.merged ( -- metapost.parameters, -- { -- ini_version = false, -- mem_name = file.replacesuffix(name,"mem"), -- find_file = finder, -- -- job_name = "mplib", -- } -- ) ) -- local result -- if not mpx then -- result = { status = 99, error = "out of memory"} -- end -- stoptiming(mplib) -- return mpx, result -- end -- -- function metapost.checkformat(mpsinput) -- local mpsversion = environment.version or "unset version" -- local mpsinput = file.addsuffix(mpsinput or "metafun", "mp") -- local mpsformat = file.removesuffix(file.basename(texconfig.formatname or (tex and tex.formatname) or mpsinput)) -- local mpsbase = file.removesuffix(file.basename(mpsinput)) -- if mpsbase ~= mpsformat then -- mpsformat = mpsformat .. "-" .. mpsbase -- end -- mpsformat = file.addsuffix(mpsformat, "mem") -- local mpsformatfullname = caches.getfirstreadablefile(mpsformat,"formats","metapost") or "" -- if mpsformatfullname ~= "" then -- report_metapost("loading %a from %a", mpsinput, mpsformatfullname) -- local mpx, result = metapost.load(mpsformatfullname) -- if mpx then -- local result = mpx:execute("show mp_parent_version ;") -- if not result.log then -- metapost.reporterror(result) -- else -- local version = match(result.log,">> *(.-)[\n\r]") or "unknown" -- version = gsub(version,"[\'\"]","") -- if version ~= mpsversion then -- report_metapost("version mismatch: %s <> %s", version or "unknown", mpsversion) -- else -- return mpx -- end -- end -- else -- report_metapost("error in loading %a from %a", mpsinput, mpsformatfullname) -- metapost.reporterror(result) -- end -- end -- local mpsformatfullname = caches.setfirstwritablefile(mpsformat,"formats") -- report_metapost("making %a into %a", mpsinput, mpsformatfullname) -- metapost.make(mpsinput,mpsformatfullname,mpsversion) -- somehow return ... fails here -- if lfs.isfile(mpsformatfullname) then -- report_metapost("loading %a from %a", mpsinput, mpsformatfullname) -- return metapost.load(mpsformatfullname) -- else -- report_metapost("problems with %a from %a", mpsinput, mpsformatfullname) -- end -- end else local preamble = [[ boolean mplib ; mplib := true ; let dump = endinput ; input "%s" ; ]] local methods = { double = "double", scaled = "scaled", default = "scaled", decimal = false, -- for the moment } function metapost.load(name,method) starttiming(mplib) method = method and methods[method] or "scaled" local mpx = mplib.new { ini_version = true, find_file = finder, math_mode = method, } report_metapost("initializing number mode %a",method) local result if not mpx then result = { status = 99, error = "out of memory"} else result = mpx:execute(format(preamble, file.addsuffix(name,"mp"))) -- addsuffix is redundant end stoptiming(mplib) metapost.reporterror(result) return mpx, result end function metapost.checkformat(mpsinput,method) local mpsversion = environment.version or "unset version" local mpsinput = mpsinput or "metafun" local foundfile = "" if file.suffix(mpsinput) ~= "" then foundfile = finder(mpsinput) or "" end if foundfile == "" then foundfile = finder(file.replacesuffix(mpsinput,"mpvi")) or "" end if foundfile == "" then foundfile = finder(file.replacesuffix(mpsinput,"mpiv")) or "" end if foundfile == "" then foundfile = finder(file.replacesuffix(mpsinput,"mp")) or "" end if foundfile == "" then report_metapost("loading %a fails, format not found",mpsinput) else report_metapost("loading %a as %a using method %a",mpsinput,foundfile,method or "default") local mpx, result = metapost.load(foundfile,method) if mpx then return mpx else report_metapost("error in loading %a",mpsinput) metapost.reporterror(result) end end end end function metapost.unload(mpx) starttiming(mplib) if mpx then mpx:finish() end stoptiming(mplib) end local mpxformats = { } function metapost.format(instance,name,method) if not instance or instance == "" then instance = "metafun" -- brrr end name = name or instance local mpx = mpxformats[instance] if not mpx then report_metapost("initializing instance %a using format %a",instance,name) mpx = metapost.checkformat(name,method) mpxformats[instance] = mpx end return mpx end function metapost.instance(instance) return mpxformats[instance] end function metapost.reset(mpx) if not mpx then -- nothing elseif type(mpx) == "string" then if mpxformats[mpx] then mpxformats[mpx]:finish() mpxformats[mpx] = nil end else for name, instance in next, mpxformats do if instance == mpx then mpx:finish() mpxformats[name] = nil break end end end end local mp_inp, mp_log, mp_tag = { }, { }, 0 -- key/values function metapost.process(mpx, data, trialrun, flusher, multipass, isextrapass, askedfig) local converted, result = false, { } if type(mpx) == "string" then mpx = metapost.format(mpx) -- goody end if mpx and data then starttiming(metapost) if trace_graphics then if not mp_inp[mpx] then mp_tag = mp_tag + 1 local jobname = tex.jobname mp_inp[mpx] = io.open(format("%s-mplib-run-%03i.mp", jobname,mp_tag),"w") mp_log[mpx] = io.open(format("%s-mplib-run-%03i.log",jobname,mp_tag),"w") end local banner = format("%% begin graphic: n=%s, trialrun=%s, multipass=%s, isextrapass=%s\n\n", metapost.n, tostring(trialrun), tostring(multipass), tostring(isextrapass)) mp_inp[mpx]:write(banner) mp_log[mpx]:write(banner) end if type(data) == "table" then -- this hack is needed because the library currently barks on \n\n -- eventually we can text for "" in the next loop local n = 0 local nofsnippets = #data for i=1,nofsnippets do local d = data[i] if d ~= "" then n = n + 1 data[n] = d end end for i=nofsnippets,n+1,-1 do data[i] = nil end -- and this one because mp cannot handle snippets due to grouping issues if metapost.collapse then if #data > 1 then data = concat(data,"\n") else data = data[1] end end -- end of hacks end if type(data) == "table" then if trace_tracingall then mpx:execute("tracingall;") end -- table.insert(data,2,"") for i=1,#data do local d = data[i] -- d = string.gsub(d,"\r","") if d then if trace_graphics then mp_inp[mpx]:write(format("\n%% begin snippet %s\n",i)) mp_inp[mpx]:write(d) mp_inp[mpx]:write(format("\n%% end snippet %s\n",i)) end starttiming(metapost.exectime) result = mpx:execute(d) stoptiming(metapost.exectime) if trace_graphics and result then local str = result.log or result.error if str and str ~= "" then mp_log[mpx]:write(str) end end if not metapost.reporterror(result) then if metapost.showlog then local str = result.term ~= "" and result.term or "no terminal output" if not emptystring(str) then metapost.lastlog = metapost.lastlog .. "\n" .. str report_metapost("log: %s",str) end end if result.fig then converted = metapost.convert(result, trialrun, flusher, multipass, askedfig) end end else report_metapost("error: invalid graphic component %s",i) end end else if trace_tracingall then data = "tracingall;" .. data end if trace_graphics then mp_inp[mpx]:write(data) end starttiming(metapost.exectime) result = mpx:execute(data) stoptiming(metapost.exectime) if trace_graphics and result then local str = result.log or result.error if str and str ~= "" then mp_log[mpx]:write(str) end end -- todo: error message if not result then report_metapost("error: no result object returned") elseif result.status > 0 then report_metapost("error: %s",(result.term or "no-term") .. "\n" .. (result.error or "no-error")) else if metapost.showlog then metapost.lastlog = metapost.lastlog .. "\n" .. result.term report_metapost("info: %s",result.term or "no-term") end if result.fig then converted = metapost.convert(result, trialrun, flusher, multipass, askedfig) end end end if trace_graphics then local banner = "\n% end graphic\n\n" mp_inp[mpx]:write(banner) mp_log[mpx]:write(banner) end stoptiming(metapost) end return converted, result end function metapost.convert() report_metapost('warning: no converter set') end -- handy function metapost.directrun(formatname,filename,outputformat,astable,mpdata) local fullname = file.addsuffix(filename,"mp") local data = mpdata or io.loaddata(fullname) if outputformat ~= "svg" then outputformat = "mps" end if not data then report_metapost("unknown file %a",filename) else local mpx = metapost.checkformat(formatname) if not mpx then report_metapost("unknown format %a",formatname) else report_metapost("processing %a",(mpdata and (filename or "data")) or fullname) local result = mpx:execute(data) if not result then report_metapost("error: no result object returned") elseif result.status > 0 then report_metapost("error: %s",(result.term or "no-term") .. "\n" .. (result.error or "no-error")) else if metapost.showlog then metapost.lastlog = metapost.lastlog .. "\n" .. result.term report_metapost("info: %s",result.term or "no-term") end local figures = result.fig if figures then local sorted = table.sortedkeys(figures) if astable then local result = { } report_metapost("storing %s figures in table",#sorted) for k=1,#sorted do local v = sorted[k] if outputformat == "mps" then result[v] = figures[v]:postscript() else result[v] = figures[v]:svg() -- (3) for prologues end end return result else local basename = file.removesuffix(file.basename(filename)) for k=1,#sorted do local v = sorted[k] local output if outputformat == "mps" then output = figures[v]:postscript() else output = figures[v]:svg() -- (3) for prologues end local outname = format("%s-%s.%s",basename,v,outputformat) report_metapost("saving %s bytes in %a",#output,outname) io.savedata(outname,output) end return #sorted end end end end end end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-physml.mkii0000644000175000017500000000071711754241457024344 0ustar norbertnorbert%D \module %D [ file=m-physml, %D version=2001.09.04, %D title=\CONTEXT\ XML Modules, %D subtitle=Loading PHYSML Filters, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[units] \useXMLfilter[pml,pmu] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-5.mkii0000644000175000017500000002574511754241457024276 0ustar norbertnorbert%D \module %D [ file=regi-8859-5, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-5 (Cyrillic), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-5 input encoding (regime) for Cyrillic, %D see also regi-cyr and regi-cyp. %D %D Usage: \type{\enableregime[8859-5]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-5] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\cyrillicYO} % 0401 CYRILLIC CAPITAL LETTER IO \defineactivetoken 162 {\cyrillicDJE} % 0402 CYRILLIC CAPITAL LETTER DJE \defineactivetoken 163 {\cyrillicGJE} % 0403 CYRILLIC CAPITAL LETTER GJE \defineactivetoken 164 {\cyrillicIE} % 0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE \defineactivetoken 165 {\cyrillicDZE} % 0405 CYRILLIC CAPITAL LETTER DZE \defineactivetoken 166 {\cyrillicII} % 0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I \defineactivetoken 167 {\cyrillicYI} % 0407 CYRILLIC CAPITAL LETTER YI \defineactivetoken 168 {\cyrillicJE} % 0408 CYRILLIC CAPITAL LETTER JE \defineactivetoken 169 {\cyrillicLJE} % 0409 CYRILLIC CAPITAL LETTER LJE \defineactivetoken 170 {\cyrillicNJE} % 040A CYRILLIC CAPITAL LETTER NJE \defineactivetoken 171 {\cyrillicTSHE} % 040B CYRILLIC CAPITAL LETTER TSHE \defineactivetoken 172 {\cyrillicKJE} % 040C CYRILLIC CAPITAL LETTER KJE \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 174 {\cyrillicUSHRT} % 040E CYRILLIC CAPITAL LETTER SHORT U \defineactivetoken 175 {\cyrillicDZHE} % 040F CYRILLIC CAPITAL LETTER DZHE \defineactivetoken 176 {\cyrillicA} % 0410 CYRILLIC CAPITAL LETTER A \defineactivetoken 177 {\cyrillicB} % 0411 CYRILLIC CAPITAL LETTER BE \defineactivetoken 178 {\cyrillicV} % 0412 CYRILLIC CAPITAL LETTER VE \defineactivetoken 179 {\cyrillicG} % 0413 CYRILLIC CAPITAL LETTER GHE \defineactivetoken 180 {\cyrillicD} % 0414 CYRILLIC CAPITAL LETTER DE \defineactivetoken 181 {\cyrillicE} % 0415 CYRILLIC CAPITAL LETTER IE \defineactivetoken 182 {\cyrillicZH} % 0416 CYRILLIC CAPITAL LETTER ZHE \defineactivetoken 183 {\cyrillicZ} % 0417 CYRILLIC CAPITAL LETTER ZE \defineactivetoken 184 {\cyrillicI} % 0418 CYRILLIC CAPITAL LETTER I \defineactivetoken 185 {\cyrillicISHRT} % 0419 CYRILLIC CAPITAL LETTER SHORT I \defineactivetoken 186 {\cyrillicK} % 041A CYRILLIC CAPITAL LETTER KA \defineactivetoken 187 {\cyrillicL} % 041B CYRILLIC CAPITAL LETTER EL \defineactivetoken 188 {\cyrillicM} % 041C CYRILLIC CAPITAL LETTER EM \defineactivetoken 189 {\cyrillicN} % 041D CYRILLIC CAPITAL LETTER EN \defineactivetoken 190 {\cyrillicO} % 041E CYRILLIC CAPITAL LETTER O \defineactivetoken 191 {\cyrillicP} % 041F CYRILLIC CAPITAL LETTER PE \defineactivetoken 192 {\cyrillicR} % 0420 CYRILLIC CAPITAL LETTER ER \defineactivetoken 193 {\cyrillicS} % 0421 CYRILLIC CAPITAL LETTER ES \defineactivetoken 194 {\cyrillicT} % 0422 CYRILLIC CAPITAL LETTER TE \defineactivetoken 195 {\cyrillicU} % 0423 CYRILLIC CAPITAL LETTER U \defineactivetoken 196 {\cyrillicF} % 0424 CYRILLIC CAPITAL LETTER EF \defineactivetoken 197 {\cyrillicH} % 0425 CYRILLIC CAPITAL LETTER HA \defineactivetoken 198 {\cyrillicC} % 0426 CYRILLIC CAPITAL LETTER TSE \defineactivetoken 199 {\cyrillicCH} % 0427 CYRILLIC CAPITAL LETTER CHE \defineactivetoken 200 {\cyrillicSH} % 0428 CYRILLIC CAPITAL LETTER SHA \defineactivetoken 201 {\cyrillicSHCH} % 0429 CYRILLIC CAPITAL LETTER SHCHA \defineactivetoken 202 {\cyrillicHRDSN} % 042A CYRILLIC CAPITAL LETTER HARD SIGN \defineactivetoken 203 {\cyrillicERY} % 042B CYRILLIC CAPITAL LETTER YERU \defineactivetoken 204 {\cyrillicSFTSN} % 042C CYRILLIC CAPITAL LETTER SOFT SIGN \defineactivetoken 205 {\cyrillicEREV} % 042D CYRILLIC CAPITAL LETTER E \defineactivetoken 206 {\cyrillicYU} % 042E CYRILLIC CAPITAL LETTER YU \defineactivetoken 207 {\cyrillicYA} % 042F CYRILLIC CAPITAL LETTER YA \defineactivetoken 208 {\cyrillica} % 0430 CYRILLIC SMALL LETTER A \defineactivetoken 209 {\cyrillicb} % 0431 CYRILLIC SMALL LETTER BE \defineactivetoken 210 {\cyrillicv} % 0432 CYRILLIC SMALL LETTER VE \defineactivetoken 211 {\cyrillicg} % 0433 CYRILLIC SMALL LETTER GHE \defineactivetoken 212 {\cyrillicd} % 0434 CYRILLIC SMALL LETTER DE \defineactivetoken 213 {\cyrillice} % 0435 CYRILLIC SMALL LETTER IE \defineactivetoken 214 {\cyrilliczh} % 0436 CYRILLIC SMALL LETTER ZHE \defineactivetoken 215 {\cyrillicz} % 0437 CYRILLIC SMALL LETTER ZE \defineactivetoken 216 {\cyrillici} % 0438 CYRILLIC SMALL LETTER I \defineactivetoken 217 {\cyrillicishrt} % 0439 CYRILLIC SMALL LETTER SHORT I \defineactivetoken 218 {\cyrillick} % 043A CYRILLIC SMALL LETTER KA \defineactivetoken 219 {\cyrillicl} % 043B CYRILLIC SMALL LETTER EL \defineactivetoken 220 {\cyrillicm} % 043C CYRILLIC SMALL LETTER EM \defineactivetoken 221 {\cyrillicn} % 043D CYRILLIC SMALL LETTER EN \defineactivetoken 222 {\cyrillico} % 043E CYRILLIC SMALL LETTER O \defineactivetoken 223 {\cyrillicp} % 043F CYRILLIC SMALL LETTER PE \defineactivetoken 224 {\cyrillicr} % 0440 CYRILLIC SMALL LETTER ER \defineactivetoken 225 {\cyrillics} % 0441 CYRILLIC SMALL LETTER ES \defineactivetoken 226 {\cyrillict} % 0442 CYRILLIC SMALL LETTER TE \defineactivetoken 227 {\cyrillicu} % 0443 CYRILLIC SMALL LETTER U \defineactivetoken 228 {\cyrillicf} % 0444 CYRILLIC SMALL LETTER EF \defineactivetoken 229 {\cyrillich} % 0445 CYRILLIC SMALL LETTER HA \defineactivetoken 230 {\cyrillicc} % 0446 CYRILLIC SMALL LETTER TSE \defineactivetoken 231 {\cyrillicch} % 0447 CYRILLIC SMALL LETTER CHE \defineactivetoken 232 {\cyrillicsh} % 0448 CYRILLIC SMALL LETTER SHA \defineactivetoken 233 {\cyrillicshch} % 0449 CYRILLIC SMALL LETTER SHCHA \defineactivetoken 234 {\cyrillichrdsn} % 044A CYRILLIC SMALL LETTER HARD SIGN \defineactivetoken 235 {\cyrillicery} % 044B CYRILLIC SMALL LETTER YERU \defineactivetoken 236 {\cyrillicsftsn} % 044C CYRILLIC SMALL LETTER SOFT SIGN \defineactivetoken 237 {\cyrillicerev} % 044D CYRILLIC SMALL LETTER E \defineactivetoken 238 {\cyrillicyu} % 044E CYRILLIC SMALL LETTER YU \defineactivetoken 239 {\cyrillicya} % 044F CYRILLIC SMALL LETTER YA \defineactivetoken 240 {\textnumero} % 2116 NUMERO SIGN \defineactivetoken 241 {\cyrillicyo} % 0451 CYRILLIC SMALL LETTER IO \defineactivetoken 242 {\cyrillicdje} % 0452 CYRILLIC SMALL LETTER DJE \defineactivetoken 243 {\cyrillicgje} % 0453 CYRILLIC SMALL LETTER GJE \defineactivetoken 244 {\cyrillicie} % 0454 CYRILLIC SMALL LETTER UKRAINIAN IE \defineactivetoken 245 {\cyrillicdze} % 0455 CYRILLIC SMALL LETTER DZE \defineactivetoken 246 {\cyrillicii} % 0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I \defineactivetoken 247 {\cyrillicyi} % 0457 CYRILLIC SMALL LETTER YI \defineactivetoken 248 {\cyrillicje} % 0458 CYRILLIC SMALL LETTER JE \defineactivetoken 249 {\cyrilliclje} % 0459 CYRILLIC SMALL LETTER LJE \defineactivetoken 250 {\cyrillicnje} % 045A CYRILLIC SMALL LETTER NJE \defineactivetoken 251 {\cyrillictshe} % 045B CYRILLIC SMALL LETTER TSHE \defineactivetoken 252 {\cyrillickje} % 045C CYRILLIC SMALL LETTER KJE \defineactivetoken 253 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 254 {\cyrillicushrt} % 045E CYRILLIC SMALL LETTER SHORT U \defineactivetoken 255 {\cyrillicdzhe} % 045F CYRILLIC SMALL LETTER DZHE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-frd.mkiv0000644000175000017500000000575212130411274024257 0ustar norbertnorbert%D \module %D [ file=lang-frd, %D version=2004.01.15, %D title=\CONTEXT\ Language Macros, %D subtitle=Language Frequency Table Data, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \endinput %D This is experimental work! Old stuff, whenever I need it I might %D do it in \LUA. % http://www.onzetaal.nl/advies/letterfreq.html \startcharactertable[nl] \charfreq a 7.47 \charfreq b 1.58 \charfreq c 1.24 \charfreq d 5.93 \charfreq e 18.91 \charfreq f .81 \charfreq g 3.4 \charfreq h 2.38 \charfreq i 6.5 \charfreq j 1.46 \charfreq k 2.25 \charfreq l 3.57 \charfreq m 2.21 \charfreq n 10.03 \charfreq o 6.06 \charfreq p 1.57 \charfreq q .009 \charfreq r 6.41 \charfreq s 3.73 \charfreq t 6.79 \charfreq u 1.99 \charfreq v 2.85 \charfreq w 1.52 \charfreq x .04 \charfreq y .035 \charfreq z 1.39 \stopcharactertable % http://caislab.icu.ac.kr/course/2001/spring/ice605/down/010306.pdf % \startcharactertable[en] % \charfreq a 8.2 % \charfreq b 1.5 % \charfreq c 2.8 % \charfreq d 4.3 % \charfreq e 12.7 % \charfreq f 2.2 % \charfreq g 2 % \charfreq h 6.1 % \charfreq i 7 % \charfreq j .2 % \charfreq k .8 % \charfreq l 4 % \charfreq m 2.4 % \charfreq n 6.7 % \charfreq o 7.5 % \charfreq p 1.9 % \charfreq q .1 % \charfreq r 6 % \charfreq s 6.3 % \charfreq t 9.1 % \charfreq u 2.8 % \charfreq v 1 % \charfreq w 2.3 % \charfreq x .1 % \charfreq y 2 % \charfreq z .1 % \stopcharactertable % http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm \startcharactertable[en] \charfreq a 8.04 \charfreq b 1.54 \charfreq c 3.06 \charfreq d 3.99 \charfreq e 12.51 \charfreq f 2.3 \charfreq g 1.96 \charfreq h 5.49 \charfreq i 7.26 \charfreq j .16 \charfreq k .67 \charfreq l 4.14 \charfreq m 2.53 \charfreq n 7.09 \charfreq o 7.6 \charfreq p 2 \charfreq q .11 \charfreq r 6.12 \charfreq s 6.54 \charfreq t 9.25 \charfreq u 2.71 \charfreq v .99 \charfreq w 1.92 \charfreq x .19 \charfreq y 1.73 \charfreq z .09 \stopcharactertable % http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm \startcharactertable[de] \charfreq a 6.47 \charfreq b 1.93 \charfreq c 2.68 \charfreq d 4.83 \charfreq e 17.48 \charfreq f 1.65 \charfreq g 3.06 \charfreq h 4.23 \charfreq i 7.73 \charfreq j .27 \charfreq k 1.46 \charfreq l 3.49 \charfreq m 2.58 \charfreq n 9.84 \charfreq o 2.98 \charfreq p .96 \charfreq q .02 \charfreq r 7.54 \charfreq s 6.83 \charfreq t 6.13 \charfreq u 4.17 \charfreq v .94 \charfreq w 1.48 \charfreq x .04 \charfreq y .08 \charfreq z 1.14 \stopcharactertable \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-fsf.mkii0000644000175000017500000001227111754241457024316 0ustar norbertnorbert%D \module %D [ file=page-new, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, %D subtitle=Fontsite 500, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 I'm not sure how correct the fontsite cd is. These are probably %D mostly rip-offs. I no longer use these fonts. % run texfont from currentpath with the fonts on subpath fontsite/500 % texfont --en=texnansi --ve=fontsite --co=opus type-fsf.dat % texfont --en=texnansi --ve=fontsite --co=typewriter type-fsf.dat \starttypescriptcollection[font site 500] %D Please use the original Optima! \starttypescript [sans] [opus] [name] \definefontsynonym [Sans] [Opus] \definefontsynonym [SansCaps] [OpusSmCaps] \definefontsynonym [SansItalic] [Opus-Italic] \definefontsynonym [SansBold] [Opus-Bold] \definefontsynonym [SansBoldCaps] [OpusSmCaps-Bold] \definefontsynonym [SansBoldItalic] [Opus-BoldItalic] \definefontsynonym [SansSlanted] [Opus-Slanted] % faked \definefontsynonym [SansBoldSlanted] [Opus-BoldSlanted] % faked \stoptypescript \starttypescript [sans] [opus] [texnansi,ec,8r] \definefontsynonym [Opus] [\typescriptthree-opusrg] [encoding=\typescriptthree] \definefontsynonym [OpusSmCaps] [\typescriptthree-opusscrg] [encoding=\typescriptthree] \definefontsynonym [Opus-Italic] [\typescriptthree-opusi] [encoding=\typescriptthree] \definefontsynonym [Opus-Bold] [\typescriptthree-opusb] [encoding=\typescriptthree] \definefontsynonym [Opus-BoldItalic] [\typescriptthree-opusbi] [encoding=\typescriptthree] \definefontsynonym [OpusSmCaps-Bold] [\typescriptthree-opusscb] [encoding=\typescriptthree] \definefontsynonym [Opus-Slanted] [\typescriptthree-opusrg-slanted-167] [encoding=\typescriptthree] \definefontsynonym [Opus-BoldSlanted] [\typescriptthree-opusb-slanted-167] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-fontsite-opus.map] \stoptypescript \starttypescript [mono] [typewriter] [name] \definefontsynonym [Mono] [Typewriter] \definefontsynonym [MonoItalic] [Typewriter-Italic] \definefontsynonym [MonoBold] [Typewriter-Bold] \definefontsynonym [MonoBoldItalic] [Typewriter-BoldItalic] \definefontsynonym [MonoSlanted] [Typewriter-Slanted] % faked \definefontsynonym [MonoBoldSlanted] [Typewriter-BoldSlanted] % faked \stoptypescript \starttypescript [mono] [typewriter] [texnansi,ec,8r] \definefontsynonym [Typewriter] [\typescriptthree-typerg] [encoding=\typescriptthree] \definefontsynonym [Typewriter-Italic] [\typescriptthree-typei] [encoding=\typescriptthree] \definefontsynonym [Typewriter-Bold] [\typescriptthree-typeb] [encoding=\typescriptthree] \definefontsynonym [Typewriter-BoldItalic] [\typescriptthree-typebi] [encoding=\typescriptthree] \definefontsynonym [Typewriter-Slanted] [\typescriptthree-typerg-slanted-167] [encoding=\typescriptthree] \definefontsynonym [Typewriter-BoldSlanted] [\typescriptthree-typeb-slanted-167] [encoding=\typescriptthree] \definefontsynonym [TypewriterCond] [\typescriptthree-typecrg] \definefontsynonym [TypewriterCond-Bold] [\typescriptthree-typecb] \loadmapfile[\typescriptthree-fontsite-typewriter.map] \stoptypescript \starttypescript [serif] [garamond] [name] \definefontsynonym [Serif] [FSGaramond] \definefontsynonym [SerifCaps] [FSGaramondSmCaps] \definefontsynonym [SerifItalic] [FSGaramond-Italic] \definefontsynonym [SerifBold] [FSGaramond-Bold] \definefontsynonym [SerifBoldCaps] [FSGaramondSmCaps-Bold] \definefontsynonym [SerifSlanted] [FSGaramond-Slanted] \definefontsynonym [SerifBoldSlanted] [FSGaramond-BoldSlanted] \stoptypescript \starttypescript [serif] [garamond] [texnansi,ec,8r] \definefontsynonym [FSGaramond] [\typescriptthree-garamond] [encoding=\typescriptthree] \definefontsynonym [FSGaramondSmCaps] [\typescriptthree-garasc] [encoding=\typescriptthree] \definefontsynonym [FSGaramond-Italic] [\typescriptthree-garai] [encoding=\typescriptthree] \definefontsynonym [FSGaramond-Bold] [\typescriptthree-garab] [encoding=\typescriptthree] \definefontsynonym [FSGaramond-BoldItalic] [\typescriptthree-garabi] [encoding=\typescriptthree] \definefontsynonym [FSGaramondSmCaps-Bold] [\typescriptthree-garascb] [encoding=\typescriptthree] \definefontsynonym [FSGaramond-Slanted] [\typescriptthree-garamond-slanted-167] [encoding=\typescriptthree] \definefontsynonym [FSGaramond-BoldSlanted] [\typescriptthree-garab-slanted-167] [encoding=\typescriptthree] \loadmapfile[\typescriptthree-fontsite-garamond.map] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-run.mkii0000644000175000017500000001766311754241457024331 0ustar norbertnorbert%D \module %D [ file=colo-run, %D version=1997.04.01, %D title=\CONTEXT\ Color Macros, %D subtitle=Runtime loaded commands, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % temp hack (not do be documented) % \gdef\doformatcolorP#1:#2:#3:#4:#5:#6\od % was undefined in colo-ini % {#1\colorformatseparator % \dodoformatcolor{#2}\colorformatseparator % \dodoformatcolor{#3}\colorformatseparator % \dodoformatcolor{#4}\colorformatseparator} % \gdef\doformatgrayP#1:#2:#3:#4:#5:#6\od % {todo} % so far \gdef\showpalet {\dodoubleargument\doshowpalet} \gdef\doshowpalet[#1][#2]% {\doifdefined{\??pa#1} {\doifinsetelse\v!vertical{#2} {\showverticalpalet[#1][#2]} {\showhorizontalpalet[#1][#2]}}} \gdef\showverticalpalet[#1][#2]% {\localvbox {\offinterlineskip \setuppalet[#1] \def\rule {\vrule\!!width3em\!!height\strutht\!!depth\strutdp} \tabskip\zeropoint \def\doshowpalet##1% {\doifinsetelse\v!number{#2}{##1\hskip.5em}{}& \color[##1]{\rule}\graycolor[##1]{\rule}& \doifinset\v!value{#2}{\hskip.5em\colorvalue{##1}}\crcr} \halign {\hss##&\hss##\hss&##\cr &\doifinset{\v!name}{#2}{\strut#1}&\cr% \processpalet[#1]\doshowpalet\crcr}}} \gdef\showhorizontalpalet[#1][#2]% {\localvbox {\offinterlineskip \setuppalet[#1] \tabskip\zeropoint \!!widtha\zeropoint \doifinset\v!number{#2} {\def\doshowpalet##1% {\setbox0\hbox{##1}% \ifdim\!!widtha<\wd0\!!widtha\wd0\fi}% \processpalet[#1]\doshowpalet}% \advance\!!widtha 1em \ifdim\!!widtha<5em \!!widtha5em \fi \halign {##&&\hbox to \!!widtha{\hss##\hss}\cr \doifinset\v!number{#2} {\def\doshowpalet##1{&\strut##1}% \processpalet[#1]\doshowpalet}\cr \doifinset\v!name{#2}{#1\hskip.5em}% \def\doshowpalet##1% {&\strut\color[##1]{\vrule\!!width\!!widtha\!!height\strutht\!!depth\zeropoint}}% \processpalet[#1]\doshowpalet\crcr \noalign{\vskip-\strutdepth}% \def\doshowpalet##1% {&\graycolor[##1]{\vrule\!!width\!!widtha\!!height\zeropoint\!!depth\strutdp}}% \processpalet[#1]\doshowpalet\crcr \doifinset\v!value{#2} {\def\doshowpalet##1% {&\vbox {\hsize\!!widtha \vskip.25ex \everypar{\strut} \veryraggedcenter \let\colorformatseparator=\endgraf \colorvalue{##1}}}% \processpalet[#1]\doshowpalet}% \crcr}}} \gdef\processpalet[#1]% {\expanded{\globalprocesscommalist[\getvalue{\??pa#1}]}} \gdef\showcolorgroup {\dodoubleargument\doshowcolorgroup} \gdef\doshowcolorgroup[#1][#2]% {\doifcolor{#1:1} {\doifinsetelse\v!vertical{#2} {\showverticalcolorgroup[#1][#2]} {\showhorizontalcolorgroup[#1][#2]}}} \gdef\showhorizontalcolorgroup[#1][#2]% {\localvbox {\offinterlineskip \setuppalet \tabskip\zeropoint \def\rule {\vrule\!!width4em\!!height\strutht\!!depth\strutdp} \def\colorformatseparator{\strut\cr} \def\dodoshowgroup##1% {\halign {\hss####\hss\cr \doifinset\v!number{#2}{\strut##1}\cr \color[#1:##1]{\vrule\!!width4em\!!height\strutht\!!depth\zeropoint}\cr \graycolor[#1:##1]{\vrule\!!width4em\!!height\zeropoint\!!depth\strutdp}\cr \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}} \def\doshowgroup##1% {\doifcolor{#1:##1} {\vbox{\dodoshowgroup{##1}}}}% \hbox {\doifinset\v!name{#2} {\strut \doifinsetelse\v!value{#2} {\raise3\lineheight\hbox{#1\hskip.5em}} {#1}% \hskip.5em}% \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4% \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}} \gdef\showverticalcolorgroup[#1][#2]% {\localvbox {\offinterlineskip \setuppalet \tabskip\zeropoint \def\rule {\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}% \def\doshowgroup##1% {\doifcolor{#1:##1} {\doifinset\v!number{#2}{##1\hskip.5em}& \color[#1:##1]{\rule}\graycolor[#1:##1]{\rule}& \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}% \halign {\hss##&\hss##\hss&##\hss\cr &\doifinset\v!name{#2}{\strut#1}&\crcr \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4% \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}} \gdef\showcolor {\dosingleempty\doshowcolor} \gdef\doshowcolor[#1]% {\bgroup \iffirstargument \let\colorlist\empty % not really used, only for colo-run \let\colorstyle\empty \settrue\collectcolorsinlist \setupcolor[#1]% \fi \def\rule {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}% \def\docommand##1% {\NC\graycolor[##1]{\rule}\NC\color[##1]{\rule}\NC\grayvalue{##1}\NC\colorvalue{##1}\NC##1\NC\NR}% \starttabulate[|l|l|l|l|l|l|l|] \expanded{\globalprocesscommalist[\colorlist]}\docommand \stoptabulate \egroup} \gdef\comparepalet {\dosingleargument\docomparepalet} \gdef\docomparepalet[#1]% {\doifdefined{\??pa#1} {\hbox {\dodocomparepalet\color[#1]% \quad \dodocomparepalet\graycolor[#1]}}} \gdef\dodocomparepalet#1[#2]% {\localvbox {\offinterlineskip \setuppalet[#2] \getcommacommandsize[\getvalue{\??pa#2}] \!!widtha2em\relax \hsize\commalistsize\!!widtha \def\rule% {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex} \def\dododocomparepalet##1% {\hbox {\setbox0\hbox {#1[##1]{\vrule\!!width\hsize\!!height3ex}}% \wd0\zeropoint \box0 \hbox to \hsize {\def\dododocomparepalet####1% {\hbox to \!!widtha {\hss#1[####1]{\rule}\hss}}% \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}} \endgraf} \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}} \gdef\comparecolorgroup {\dosingleargument\docomparecolorgroup} \gdef\docomparecolorgroup[#1]% {\doifcolor{#1:1} {\hbox {\dodocomparecolorgroup\color[#1]% \quad \dodocomparecolorgroup\graycolor[#1]}}} \gdef\dodocomparecolorgroup#1[#2]% {\localvbox {\!!counta\zerocount \dorecurse{15} {\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}} \!!widtha2em\relax \hsize\!!counta\!!widtha \def\rule {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex} \def\dododocomparecolorgroup##1% {\hbox to \hsize {\setbox0\hbox {#1[#2:##1]{\vrule\!!width\hsize\!!height3ex}}% \wd0\zeropoint \box0 \hbox to \hsize {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\rule}\hss}}} \endgraf} \dorecurse\!!counta{\dododocomparecolorgroup\recurselevel}}} \gdef\dogetcolorcomponents#1% {\doifelsenothing{#1} {\appendtoks \TB \to \scratchtoks} {\appendtoks \NC\showcolorbar[#1]\NC#1\NC\transparencycomponents{#1}\NC\colorcomponents{#1}\NC \NR \to \scratchtoks}} \gdef\showcolorbar[#1]% {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}} \gdef\showcolorcomponents[#1]% {\begingroup \scratchtoks{\TB}% \processcommacommand[#1]\dogetcolorcomponents \starttabulate[|lT|lT|lT|lT|] \NC color \NC name \NC transparency \NC specification \NC\NR \the\scratchtoks \stoptabulate \endgroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/font-gds.lua0000644000175000017500000005636412161703335024134 0ustar norbertnorbertif not modules then modules = { } end modules ['font-gds'] = { version = 1.000, comment = "companion to font-gds.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- depends on ctx local type, next, tonumber = type, next, tonumber local gmatch, format, lower, find, splitup = string.gmatch, string.format, string.lower, string.find, string.splitup local texsp = tex.sp local fonts, nodes, attributes, node = fonts, nodes, attributes, node local trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end) local report_goodies = logs.reporter("fonts","goodies") local allocate = utilities.storage.allocate local otf = fonts.handlers.otf local afm = fonts.handlers.afm local tfm = fonts.handlers.tfm local registerotffeature = otf.features.register local registerafmfeature = afm.features.register local registertfmfeature = tfm.features.register local fontgoodies = fonts.goodies or { } fonts.goodies = fontgoodies local typefaces = fonts.typefaces or allocate() fonts.typefaces = typefaces local data = fontgoodies.data or allocate() fontgoodies.data = data local list = fontgoodies.list or { } fontgoodies.list = list -- no allocate as we want to see what is there local addotffeature = otf.enhancers.addfeature local findfile = resolvers.findfile function fontgoodies.report(what,trace,goodies) if trace_goodies or trace then local whatever = goodies[what] if whatever then report_goodies("goodie %a found in %a",what,goodies.name) end end end local function loadgoodies(filename) -- maybe a merge is better local goodies = data[filename] -- we assume no suffix is given if goodies ~= nil then -- found or tagged unfound elseif type(filename) == "string" then local fullname = findfile(file.addsuffix(filename,"lfg")) or "" -- prefered suffix if fullname == "" then fullname = findfile(file.addsuffix(filename,"lua")) or "" -- fallback suffix end if fullname == "" then report_goodies("goodie file '%s.lfg' is not found",filename) data[filename] = false -- signal for not found else goodies = dofile(fullname) or false if not goodies then report_goodies("goodie file %a is invalid",fullname) return nil elseif trace_goodies then report_goodies("goodie file %a is loaded",fullname) end goodies.name = goodies.name or "no name" for name, fnc in next, list do fnc(goodies) end goodies.initialized = true data[filename] = goodies end end return goodies end function fontgoodies.register(name,fnc) -- will be a proper sequencer list[name] = fnc end fontgoodies.load = loadgoodies -- register goodies file local function setgoodies(tfmdata,value) local goodies = tfmdata.goodies if not goodies then -- actually an error goodies = { } tfmdata.goodies = goodies end for filename in gmatch(value,"[^, ]+") do -- we need to check for duplicates local ok = loadgoodies(filename) if ok then if trace_goodies then report_goodies("assigning goodie %a",filename) end goodies[#goodies+1] = ok end end end -- this will be split into good-* files and this file might become good-ini.lua -- featuresets local function flattenedfeatures(t,tt) -- first set value dominates local tt = tt or { } for i=1,#t do local ti = t[i] if type(ti) == "table" then flattenedfeatures(ti,tt) elseif tt[ti] == nil then tt[ti] = true end end for k, v in next, t do if type(k) ~= "number" then -- not tonumber(k) if type(v) == "table" then flattenedfeatures(v,tt) elseif tt[k] == nil then tt[k] = v end end end return tt end -- fonts.features.flattened = flattenedfeatures local function prepare_features(goodies,name,set) if set then local ff = flattenedfeatures(set) local fullname = goodies.name .. "::" .. name local n, s = fonts.specifiers.presetcontext(fullname,"",ff) goodies.featuresets[name] = s -- set if trace_goodies then report_goodies("feature set %a gets number %a and name %a",name,n,fullname) end return n end end fontgoodies.prepare_features = prepare_features local function initialize(goodies,tfmdata) local featuresets = goodies.featuresets local goodiesname = goodies.name if featuresets then if trace_goodies then report_goodies("checking featuresets in %a",goodies.name) end for name, set in next, featuresets do prepare_features(goodies,name,set) end end end fontgoodies.register("featureset",initialize) local function setfeatureset(tfmdata,set,features) local goodies = tfmdata.goodies -- shared ? if goodies then local properties = tfmdata.properties local what for i=1,#goodies do -- last one wins local g = goodies[i] what = g.featuresets and g.featuresets[set] or what end if what then for feature, value in next, what do if features[feature] == nil then features[feature] = value end end properties.mode = what.mode or properties.mode end end end -- postprocessors (we could hash processor and share code) function fontgoodies.registerpostprocessor(tfmdata,f,prepend) local postprocessors = tfmdata.postprocessors if not postprocessors then tfmdata.postprocessors = { f } elseif prepend then table.insert(postprocessors,f,1) else table.insert(postprocessors,f) end end local function setpostprocessor(tfmdata,processor) local goodies = tfmdata.goodies if goodies and type(processor) == "string" then local found = { } local asked = utilities.parsers.settings_to_array(processor) for i=1,#goodies do local g = goodies[i] local p = g.postprocessors if p then for i=1,#asked do local a = asked[i] local f = p[a] if type(f) == "function" then found[a] = f end end end end local postprocessors = tfmdata.postprocessors or { } for i=1,#asked do local a = asked[i] local f = found[a] if f then postprocessors[#postprocessors+1] = f end end if #postprocessors > 0 then tfmdata.postprocessors = postprocessors end end end -- colorschemes local colorschemes = fontgoodies.colorschemes or allocate { } fontgoodies.colorschemes = colorschemes colorschemes.data = colorschemes.data or { } local function setcolorscheme(tfmdata,scheme) if type(scheme) == "string" then local goodies = tfmdata.goodies -- todo : check for already defined in shared if goodies then local what for i=1,#goodies do -- last one counts local g = goodies[i] what = g.colorschemes and g.colorschemes[scheme] or what end if type(what) == "table" then -- this is font bound but we can share them if needed -- just as we could hash the conversions (per font) local hash = tfmdata.resources.unicodes local reverse = { } local characters = tfmdata.characters for i=1,#what do local w = what[i] for j=1,#w do local name = w[j] if name == "*" then -- inefficient but only used for tracing anyway for _, unicode in next, hash do reverse[unicode] = i end elseif type(name) == "number" then reverse[name] = i elseif find(name,":") then local start, stop = splitup(name,":") start = tonumber(start) stop = tonumber(stop) if start and stop then -- limited usage: we only deal with non reassigned -- maybe some day I'll also support the ones with a -- tounicode in this range for unicode=start,stop do if characters[unicode] then reverse[unicode] = i end end end else local unicode = hash[name] if unicode then reverse[unicode] = i end end end end tfmdata.properties.colorscheme = reverse return end end end tfmdata.properties.colorscheme = false end local fontdata = fonts.hashes.identifiers local setnodecolor = nodes.tracers.colors.set local traverse_id = node.traverse_id local a_colorscheme = attributes.private('colorscheme') local glyph = node.id("glyph") function colorschemes.coloring(head) local lastfont, lastscheme local done = false for n in traverse_id(glyph,head) do local a = n[a_colorscheme] if a then local f = n.font if f ~= lastfont then lastscheme, lastfont = fontdata[f].properties.colorscheme, f end if lastscheme then local sc = lastscheme[n.char] if sc then done = true setnodecolor(n,"colorscheme:"..a..":"..sc) -- slow end end end end return head, done end function colorschemes.enable() nodes.tasks.appendaction("processors","fonts","fonts.goodies.colorschemes.coloring") function colorschemes.enable() end end local function setextrafeatures(tfmdata) local goodies = tfmdata.goodies if goodies then for i=1,#goodies do local g = goodies[i] local f = g.features if f then for feature, specification in next, f do addotffeature(tfmdata.shared.rawdata,feature,specification) registerotffeature { name = feature, description = format("extra: %s",feature) } end end end end end -- installation (collected to keep the overview) -- also for type 1 registerotffeature { name = "goodies", description = "goodies on top of built in features", initializers = { position = 1, base = setgoodies, node = setgoodies, } } registerotffeature { name = "extrafeatures", description = "extra features", default = true, initializers = { position = 2, base = setextrafeatures, node = setextrafeatures, } } registerotffeature { name = "featureset", description = "goodie feature set", initializers = { position = 3, base = setfeatureset, node = setfeatureset, } } registerotffeature { name = "colorscheme", description = "goodie color scheme", initializers = { base = setcolorscheme, node = setcolorscheme, } } registerotffeature { name = "postprocessor", description = "goodie postprocessor", initializers = { base = setpostprocessor, node = setpostprocessor, } } -- afm registerafmfeature { name = "goodies", description = "goodies on top of built in features", initializers = { position = 1, base = setgoodies, node = setgoodies, } } -- tfm registertfmfeature { name = "goodies", description = "goodies on top of built in features", initializers = { position = 1, base = setgoodies, node = setgoodies, } } -- experiment, we have to load the definitions immediately as they precede -- the definition so they need to be initialized in the typescript local function initialize(goodies) local mathgoodies = goodies.mathematics if mathgoodies then local virtuals = mathgoodies.virtuals local mapfiles = mathgoodies.mapfiles local maplines = mathgoodies.maplines if virtuals then for name, specification in next, virtuals do -- beware, they are all constructed mathematics.makefont(name,specification,goodies) end end if mapfiles then for i=1,#mapfiles do fonts.mappings.loadfile(mapfiles[i]) -- todo: backend function end end if maplines then for i=1,#maplines do fonts.mappings.loadline(maplines[i]) -- todo: backend function end end end end fontgoodies.register("mathematics", initialize) -- the following takes care of explicit file specifications -- -- files = { -- name = "antykwapoltawskiego", -- list = { -- ["AntPoltLtCond-Regular.otf"] = { -- -- name = "antykwapoltawskiego", -- style = "regular", -- weight = "light", -- width = "condensed", -- }, -- }, -- } -- math italics -- it would be nice to have a \noitalics\font option local function initialize(tfmdata) local goodies = tfmdata.goodies if goodies then local shared = tfmdata.shared for i=1,#goodies do local mathgoodies = goodies[i].mathematics local mathitalics = mathgoodies and mathgoodies.italics if mathitalics then local properties = tfmdata.properties mathitalics = mathitalics[file.nameonly(properties.name)] or mathitalics if mathitalics then if trace_goodies then report_goodies("loading mathitalics for font %a",properties.name) end local corrections = mathitalics.corrections local defaultfactor = mathitalics.defaultfactor local disableengine = mathitalics.disableengine properties.hasitalics = true properties.mathitalic_defaultfactor = defaultfactor -- we inherit outer one anyway (name will change) if properties.mathitalics == nil then properties.mathitalics = disableengine end if corrections then -- As we want to set italic_correction (the context one) we need a -- postprocessor instead of messing with the (unscaled) descriptions. fontgoodies.registerpostprocessor(tfmdata, function(tfmdata) -- this is another tfmdata (a copy) -- better make a helper so that we have less code being defined local properties = tfmdata.properties local parameters = tfmdata.parameters local characters = tfmdata.characters properties.hasitalics = true properties.mathitalic_defaultfactor = defaultfactor properties.mathitalic_defaultvalue = defaultfactor * parameters.quad if properties.mathitalics == nil then properties.mathitalics = disableengine end if trace_goodies then report_goodies("assigning mathitalics for font %a",properties.name) end local mathitalics = properties.mathitalics local quad = parameters.quad local hfactor = parameters.hfactor for k, v in next, corrections do local c = characters[k] if v > -1 and v < 1 then v = v * quad else v = v * hfactor end c.italic_correction = v -- for context if mathitalics then c.italic = v -- for tex else c.italic = nil end end end) end return -- maybe not as these can accumulate end end end end end registerotffeature { name = "mathitalics", description = "additional math italic corrections", -- default = true, initializers = { base = initialize, node = initialize, } } -- fontgoodies.register("mathitalics", initialize) -- files local function initialize(goodies) local files = goodies.files if files then fonts.names.register(files) end end fontgoodies.register("files", initialize) -- some day we will have a define command and then we can also do some -- proper tracing -- -- fonts.typefaces["antykwapoltawskiego-condensed"] = { -- shortcut = "rm", -- shape = "serif", -- fontname = "antykwapoltawskiego", -- normalweight = "light", -- boldweight = "medium", -- width = "condensed", -- size = "default", -- features = "default", -- } local function initialize(goodies) local typefaces = goodies.typefaces if typefaces then local ft = fonts.typefaces for k, v in next, typefaces do ft[k] = v end end end fontgoodies.register("typefaces", initialize) local compositions = { } function fontgoodies.getcompositions(tfmdata) return compositions[file.nameonly(tfmdata.properties.filename or "")] end local function initialize(goodies) local gc = goodies.compositions if gc then for k, v in next, gc do compositions[k] = v end end end fontgoodies.register("compositions", initialize) -- extra treatments (on top of defaults): \loadfontgoodies[mytreatments] local treatmentdata = fonts.treatments.data local function initialize(goodies) local treatments = goodies.treatments if treatments then for name, data in next, treatments do treatmentdata[name] = data -- always wins end end end fontgoodies.register("treatments", initialize) local filenames = fontgoodies.filenames or allocate() fontgoodies.filenames = filenames local filedata = filenames.data or allocate() filenames.data = filedata local function initialize(goodies) -- design sizes are registered global local fn = goodies.filenames if fn then for usedname, alternativenames in next, fn do filedata[usedname] = alternativenames end end end fontgoodies.register("filenames", initialize) function fontgoodies.filenames.resolve(name) local fd = filedata[name] if fd and findfile(name) == "" then for i=1,#fd do local fn = fd[i] if findfile(fn) ~= "" then return fn end end else -- no lookup, just use the regular mechanism end return name end local designsizes = fontgoodies.designsizes or allocate() fontgoodies.designsizes = designsizes local designdata = designsizes.data or allocate() designsizes.data = designdata local function initialize(goodies) -- design sizes are registered global local gd = goodies.designsizes if gd then for name, data in next, gd do local ranges = { } for size, file in next, data do if size ~= "default" then ranges[#ranges+1] = { texsp(size), file } -- also lower(file) end end table.sort(ranges,function(a,b) return a[1] < b[1] end) designdata[lower(name)] = { -- overloads, doesn't merge! default = data.default, ranges = ranges, } end end end fontgoodies.register("designsizes", initialize) function fontgoodies.designsizes.register(name,size,specification) local d = designdata[name] if not d then d = { ranges = { }, default = nil, -- so we have no default set } designdata[name] = d end if size == "default" then d.default = specification else if type(size) == "string" then size = texsp(size) end local ranges = d.ranges ranges[#ranges+1] = { size, specification } end end function fontgoodies.designsizes.filename(name,spec,size) -- returns nil of no match if spec and spec ~= "" then local data = designdata[lower(name)] if data then if spec == "default" then return data.default elseif spec == "auto" then local ranges = data.ranges if ranges then for i=1,#ranges do local r = ranges[i] if r[1] >= size then -- todo: rounding so maybe size - 100 return r[2] end end end return data.default or (ranges and ranges[#ranges][2]) end end end end -- The following file (husayni.lfg) is the experimental setup that we used -- for Idris font. For the moment we don't store this in the cache and quite -- probably these files sit in one of the paths: -- -- tex/context/fonts/goodies -- tex/fonts/goodies/context -- tex/fonts/data/foundry/collection -- -- see lfg files in distribution -- interface commands.loadfontgoodies = fontgoodies.load commands.enablefontcolorschemes = colorschemes.enable -- weird place ... depends on math local function finalize(tfmdata,feature,value) mathematics.overloaddimensions(tfmdata,tfmdata,value) end registerotffeature { name = "mathdimensions", description = "manipulate math dimensions", -- default = true, manipulators = { base = finalize, node = finalize, } } context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-ini.lua0000644000175000017500000000053211754241457024156 0ustar norbertnorbertif not modules then modules = { } end modules ['typo-ini'] = { version = 1.001, comment = "companion to typo-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- nothing yet typesetters = typesetters or { } context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-listing.tex0000644000175000017500000000650711754241457026376 0ustar norbertnorbert%D \module %D [ file=mtx-context-listing, %D version=2008.11.10, % about that time i started playing with this %D title=\CONTEXT\ Extra Trickry, %D subtitle=Listing Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 is a \TEXEXEC\ features that has been moved to \MKIV. % begin help % % usage: context --extra=listing [options] list-of-files % % --sort : sort filenames first % --topspace=dimension : distance above first line % --backspace=dimension : distance before left margin % --pretty : pretty print comform suffix (temporarily disabled) % --bodyfont=list : additional bodyfont settings % --paperformat=spec : paper*print or paperxprint % % end help \input mtx-context-common.tex \setupbodyfont [11pt,tt,\getdocumentargument{bodyfont}] \setuptyping [lines=yes] \setuplayout [header=0cm, footer=1.5cm, topspace=\getdocumentargumentdefault{topspace}{1.5cm}, backspace=\getdocumentargumentdefault{backspace}{1.5cm}, width=middle, height=middle] \setuppapersize [\getdocumentargument{paperformat_paper}] [\getdocumentargument{paperformat_print}] % \startluacode % -- syntax check % local topspace = dimen(document.arguments.topspace or 0) % local backspace = dimen(document.arguments.backspace or 0) % local zeropoint = dimen(0) % if topspace > zeropoint then % context.setuplayout { topspace = tostring(topspace) } % end % if backspace > zeropoint then % context.setuplayout { backspace = tostring(backspace) } % end % \stopluacode \starttext \startluacode local types = { mkiv = "tex", mkii = "tex", cld = "lua", lfg = "lua", } local pattern = document.arguments.pattern if pattern then document.files = dir.glob(pattern) end if #document.files > 0 then if document.arguments.sort then table.sort(document.files) end for _, filename in ipairs(document.files) do if not string.find(filename,"^mtx%-context%-") then local pretty = document.arguments.pretty if pretty == true then pretty = file.extname(filename) or "" elseif pretty == false then pretty = "" else -- forced end context.page() context.setupfootertexts( -- return true: we need to keep this entry { function() context.detokenize(pattern and filename or file.basename(filename)) return true end }, { function() context.pagenumber() return true end } ) if pretty then if type(pretty) ~= "string" or pretty == "" then context.setuptyping { option = "color" } else context.setuptyping { option = types[pretty] or pretty } end end context.typefile(filename) end end else context("no files given") end \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-itm.mkvi0000644000175000017500000016650612161703335024342 0ustar norbertnorbert%D \module %D [ file=strc-itm, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Itemgroups, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Itemgroups} \registerctxluafile{strc-itm}{1.001} %D Cleaning up this module happened around the time when Kate Bush came up %D with the nicest numbered list of words: 50 Words For Snow. It's therefore %D no surprise that I had that cd running several times when updating this %D code. One of the highlights of 2011. % todo: check breaks % todo: check grouping % todo: fixedconversion % \startitemize[n,packed] % \item test \item test \item test % \stopitemize % % \startitemize[n,packed,reverse] % \item test \item test \item test % \stopitemize % % \startitemize[n,packed,reverse] \item test \item test \stopitemize % \startitemize[continue] % \item test \startitemize[n,packed] \item test \item test \stopitemize % \item test % \item test % \stopitemize % \startitemize[continue] \item test \stopitemize % % \startitemize[n,packed] \item test \item test \stopitemize % \startitemize[continue] \item test \stopitemize % \startitemize[continue] \item test \stopitemize % % \setupwhitespace[big] % \starttext % test \startitemize[joinedup] \item test \item test \stopitemize test \par % test \startitemize[joinedup,nowhite] \item test \item test \stopitemize test \par % test \startitemize[joinedup,nowhite,before] \item test \item test \stopitemize test \par % test \startitemize[joinedup,nowhite,after] \item test \item test \stopitemize test \par % \stoptext % % test / example % % \startnarrower[left] \startcolumns[n=3] \startitemize % \item \input ward \item \input ward \item \input ward % \stopitemize \stopcolumns\stopnarrower \blank % % \startnarrower[left] \startitemize[columns,three] % \item \input ward \item \input ward \item \input ward % \stopitemize \stopnarrower \blank % % \setupitemize[leftmargin=1.5em] \startitemize[columns,three] % \item \input ward \item \input ward \item \input ward % \stopitemize \blank % % beware, we don't group (yet) as we want to keep the left/right skip % % \startitemize % \startitem \stopitem % some intermediate text that will properly indent % \startitem \stopitem % \stopitem % % so we need to keep that property % % \startitemize % \starthead {xx} test \stophead % \startitem test \stopitem % \startitem test \stopitem % \stopitemize % % Sometimes the user demands get pretty weird: % % \startitemize % \item test % \item test % \headsym{xx} test \par test % \stopitemize % % aligned items % % \startitemize[n,fit,broad][itemalign=flushright] % \dorecurse{100}{\item The first item.} % \stopitemize % % \setupitemgroup[itemize][each][fit] % \setupitemgroup[itemize][each][distance=.5em,factor=1,itemalign=flushright] % % \startitemize[n] % \dorecurse{100}{\item The first item.} % \stopitemize % % \defineitemgroup[gbitemize] % \setupitemgroup[gbitemize][each][headstyle=bold] % % \startgbitemize % \txt{italian} some italians like this kind of cross||breed between % an itemize and a description % \txt{sicilians} i wonder how many sicilian mathematicians do a thesis % on the math involved in predicting the next big bang of the vulcano % \stopgbitemize % % \startitemize[n,repeat] % \noitem \startitemize[a] \item Item 1.a. \item Item 1.b. \stopitemize % \noitem \startitemize[a] \item Item 2.a. \item Item 2.b. \stopitemize % \stopitemize % % \startbuffer % \item % \startitemize[n] % \item item 1.1 % \item item 1.2 % \startitemize[n] \item item 1.2.1 \item item 1.2.2 \stopitemize % \item item 1.3 % \stopitemize % \item % \startitemize[n] \item item 2.1 \item item 2.2 \stopitemize % \item item 3 % \startitemize[n] \item item 3.1 \item item 3.2 \stopitemize % \item % \startitemize[n] \item item 4.1 \item item 4.2 \stopitemize % \stopbuffer % % \startitemize[n,repeat,6*broad,packed] \getbuffer \stopitemize \blank[3*big] % \startitemize[n,repeat,packed] \getbuffer \stopitemize \blank[3*big] % \setupitemize[each][atmargin][width=3em] % \startitemize[n,repeat,packed] \getbuffer \stopitemize % % todo: assume startitem ... stopitem and do an autostopitem .. cleaner for % elements % % \startitemize[text][space=medium] % \item one \item two \item three % \stopitemize % % For Giuseppe "Oblomov" Bilotta, inspired on a suggestion by Taco % Hoekwater. % % \def\MyItemCommand#1{{\bf#1}\quad} % \setupitemgroup[itemize][command=\MyItemCommand] % % \startitemize % \item {test} is this okay? % \item {test} is this okay? % \item {test} is this okay? % \stopitemize \unprotect \newconditional\c_strc_itemgroups_sub \newconditional\c_strc_itemgroups_head \newconditional\c_strc_itemgroups_intro \newconditional\c_strc_itemgroups_randomize \newconditional\c_strc_itemgroups_auto_intro \newconditional\c_strc_itemgroups_pack \newconditional\c_strc_itemgroups_paragraph \newconditional\c_strc_itemgroups_text \newconditional\c_strc_itemgroups_text_saved \newconditional\c_strc_itemgroups_first \newconditional\c_strc_itemgroups_before \newconditional\c_strc_itemgroups_after \newconditional\c_strc_itemgroups_nowhite \newconditional\c_strc_itemgroups_joined \newconditional\c_strc_itemgroups_reverse \newconditional\c_strc_itemgroups_continue \newconditional\c_strc_itemgroups_fitting \newconditional\c_strc_itemgroups_indented_first \newconditional\c_strc_itemgroups_inline \newconditional\c_strc_itemgroups_columns \newconditional\c_strc_itemgroups_concat \newconditional\c_strc_itemgroups_txt \newconditional\c_strc_itemgroups_extra \newconditional\c_strc_itemgroups_repeat % 0 = before/after % 1 = between unless before % 2 = between \newconstant \c_strc_itemgroups_spacing_mode \c_strc_itemgroups_spacing_mode\plustwo \newconditional\c_strc_itemgroups_optimize \settrue\c_strc_itemgroups_optimize \newconditional\c_strc_itemgroups_auto_concat \settrue\c_strc_itemgroups_auto_concat \newsignal \d_strc_itemgroups_signal \newbox \b_strc_itemgroups \newdimen \d_strc_itemgroups_list_width \newdimen \d_strc_itemgroups_asked_width \newdimen \d_strc_itemgroups_max_width % multipass \newcount \c_strc_itemgroups_max_items % multipass \newcount \c_strc_itemgroups_n_of_lists \newcount \c_strc_itemgroups_n_of_items \newcount \c_strc_itemgroups_nesting \newcount \c_strc_itemgroups_column_depth \def \v_strc_itemgroups_counter {itemgroup:\currentparentitemgroup} \let \m_strc_itemgroups_repeat_start \empty \def \v_strc_itemgroups_unknown_symbol {?} \let \m_strc_itemgroups_indenting \empty \let \m_strc_itemgroups_destination \empty \let \currentitemlevel \!!zerocount % public \def \currentnofitems {\the\c_strc_itemgroups_max_items} \def \currentitemnumber {\strc_counters_raw_sub\v_strc_itemgroups_counter\currentitemlevel} % public \newtoks \itemgroupcommands % maybe public \def \currentitemgroupsymbol {n} % here we cannot use a _ in the name \let \currentitemgroupconversionset \empty % here we cannot use a _ in the name \let \currentitemgroupsegments \empty \def\strc_itemgroups_register_status {\iftrialtypesetting \else \ctxcommand{registeritemgroup("\currentitemgroup",\number\c_strc_itemgroups_n_of_items,"\itemgroupparameter\c!maxwidth")}% \fi} \def\strc_itemgroups_check_n_of_items % we could do this at the lua end and save a call (i.e. will be dimen and counter) {\c_strc_itemgroups_max_items\ctxcommand{nofitems("\currentitemgroup",\number\c_strc_itemgroups_n_of_lists)}\relax \d_strc_itemgroups_max_width\ctxcommand{maxitemwidth("\currentitemgroup",\number\c_strc_itemgroups_n_of_lists)}\scaledpoint \edef\currentnofitems{\the\c_strc_itemgroups_max_items}} % todo: \dodosetreference -> \strc_counters_register_component (to be checked) \def\strc_itemgroups_insert_reference % we will make a decent number helper {\iftrialtypesetting \else \ifx\currentitemreference \empty \else \strc_itemgroups_insert_reference_indeed \fi \fi} \def\strc_itemgroups_insert_extra_reference {\iftrialtypesetting \else \ifx\currentitemreference \empty \else \normalexpanded{\textreference[\currentitemreference]{\strc_itemgroups_extra_symbol}}% \fi \fi} \def\strc_itemgroups_insert_reference_indeed % maybe we need a 'frozen counter' numberdata blob / quick hack .. .mive this to strc-ref {%\setnextinternalreference % no need to collect nodes in \b_strc_destination_nodes here ... maybe at some point \strc_references_start_destination_nodes % this is somewhat over the top ... we should use the counter's reference \ctxcommand{setreferenceattribute("\s!full", "\referenceprefix","\currentitemreference", { metadata = { kind = "item",% ? catcodes = \the\catcodetable, xmlroot = \ifx\currentreferencecoding\s!xml "\xmldocument" \else nil \fi, % only useful when text }, references = { % internal = \nextinternalreference, % no: this spoils references block = "\currentsectionblock", section = structures.sections.currentid(), }, prefixdata = structures.helpers.simplify { prefix = "\namedcounterparameter\v_strc_itemgroups_counter\c!prefix", separatorset = "\namedcounterparameter\v_strc_itemgroups_counter\c!prefixseparatorset", conversion = \!!bs\namedcounterparameter\v_strc_itemgroups_counter\c!prefixconversion\!!es, conversionset = "\namedcounterparameter\v_strc_itemgroups_counter\c!prefixconversionset", set = "\namedcounterparameter\v_strc_itemgroups_counter\c!prefixset", segments = "\namedcounterparameter\v_strc_itemgroups_counter\c!prefixsegments", % segments = "\askedprefixsegments", connector = \!!bs\namedcounterparameter\v_strc_itemgroups_counter\c!prefixconnector\!!es, }, numberdata = structures.helpers.simplify { numbers = structures.counters.compact("\v_strc_itemgroups_counter",nil,true), separatorset = "\namedcounterparameter\v_strc_itemgroups_counter\c!numberseparatorset", % conversion = "\namedcounterparameter\v_strc_itemgroups_counter\c!numberconversion", % conversion = "\currentitemgroupconversionset", % conversionset = "\namedcounterparameter\v_strc_itemgroups_counter\c!numberconversionset", % todo: fixedconversion = "\currentitemgroupconversionset", % temp hack: conversionset = "fixed::\currentitemgroupconversionset", % % for the moment no stopper, we need to make references configurable first % stopper = \!!bs\namedcounterparameter\v_strc_itemgroups_counter\c!numberstopper\!!es, segments = "\namedcounterparameter\v_strc_itemgroups_counter\c!numbersegments", }, }) }% \strc_references_stop_destination_nodes \xdef\currentdestinationattribute{\number\lastdestinationattribute}% % will become an option: \ifnum\lastdestinationattribute>\zerocount \dontleavehmode\hbox attr \destinationattribute\lastdestinationattribute\bgroup \strc_references_flush_destination_nodes \egroup \fi} %D Defining and setup: \installcorenamespace{itemgroup} \installcorenamespace{itemgroupoption} \installcorenamespace{itemgroupsetting} \installcorenamespace{itemgroupkeyword} \installcorenamespace{itemgroupalign} \installcorenamespace{itemgrouplocal} \installcorenamespace{itemgroupglobal} \installcorenamespace{itemgroupdistance} \installcorenamespace{itemgroupstack} \installcorenamespace{itemgroupfirst} \installcorenamespace{itemgroupstart} \installcommandhandler \??itemgroup {itemgroup} \??itemgroup \let\setupitemgroups\setupitemgroup \appendtoks \setuevalue{\e!start\currentitemgroup}{\startitemgroup[\currentitemgroup]}% \setuevalue{\e!stop \currentitemgroup}{\stopitemgroup}% \setuevalue{\e!setup\currentitemgroup\e!endsetup}{\setupitemgroup[\currentitemgroup]}% obsolete \let\currentparentitemgroup\currentitemgroup \definecounter[\v_strc_itemgroups_counter]% % beware ... we cannot use _ as the conversion set is not expanded % \defineconversionset[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]% \to \everydefineitemgroup %D Global states \def\strc_itemgroups_store_continue_state#options#settings% {\setxvalue{\??itemgroupoption \currentitemgroup}{\strc_itemgroups_process_options{#options}}% \setgvalue{\??itemgroupsetting\currentitemgroup}{\setupcurrentitemgroup [#settings]}} \def\strc_itemgroups_fetch_continue_state {\getvalue{\??itemgroupoption \currentitemgroup}% \getvalue{\??itemgroupsetting\currentitemgroup}} \def\strc_itemgroups_reset_continue_state {\letgvalue{\??itemgroupoption \currentitemgroup}\relax \letgvalue{\??itemgroupsetting\currentitemgroup}\relax} % These will become keywords. We will also add a feature to keep the while set % together. \definevspacing[\v!item @0] [penalty:0] % allow \definevspacing[\v!item @10000] [penalty:10000] % no \definevspacing[\v!item @-5] [penalty:-5] \definevspacing[\v!item @5] [penalty:5] \definevspacing[\v!item @500] [penalty:500] % discourage .. too low, 5000 is better \def\strc_itemgroups_insert_break_when_needed#break% {\ifconditional\c_strc_itemgroups_optimize \ifconditional\c_strc_itemgroups_text \else #break\relax \fi \fi} \def\strc_itemgroups_insert_breakallow {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_breakallow_indeed} \def\strc_itemgroups_insert_breakno {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_breakno_indeed } \def\strc_itemgroups_insert_break {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_break_indeed } \def\strc_itemgroups_insert_nobreak {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_nobreak_indeed } \def\strc_itemgroups_insert_breakallow_indeed{\vspacing[\v!item @0]} \def\strc_itemgroups_insert_breakno_indeed {\vspacing[\v!item @10000]} \def\strc_itemgroups_insert_break_indeed {\flushnotes \vspacing[\v!item @-5]} \def\strc_itemgroups_insert_nobreak_indeed {\flushnotes \ifinsidecolumns % todo \vspacing[\v!item @5]% \else \vspacing[\v!item @500]% \fi} \unexpanded\def\strc_itemgroups_process_options#options% {\processcommacommand[#options]\strc_itemgroups_process_option} % expansion of options is handy for xml \def\strc_itemgroups_process_option#option% {\edef\itemgroupconstantvalue{#option}% \ifx\itemgroupconstantvalue\empty\else \splitstring\itemgroupconstantvalue\at*\to\itemgroupfirst\and\itemgroupsecond \ifx\itemgroupsecond\empty \let\itemgroupsecond\itemgroupfirst \let\itemgroupfirst\!!plusone \fi \ifcsname\??itemgroupkeyword\itemgroupsecond\endcsname \csname\??itemgroupkeyword\itemgroupsecond\endcsname \else \strc_itemgroups_set_symbol\itemgroupconstantvalue \fi \fi} \def\strc_itemgroups_process_set_option_pack {\ifcase\c_strc_itemgroups_nesting \else \settrue\c_strc_itemgroups_pack \fi} \setvalue{\??itemgroupkeyword\!!zerocount}{} % ignore 0 \setvalue{\??itemgroupkeyword\v!packed }{\strc_itemgroups_process_set_option_pack} \setvalue{\??itemgroupkeyword\v!intro }{\settrue\c_strc_itemgroups_intro} % here? not set to false \setvalue{\??itemgroupkeyword\v!autointro}{\settrue\c_strc_itemgroups_auto_intro} \setvalue{\??itemgroupkeyword\v!broad }{\ifx\itemgroupfirst\empty \let\itemgroupfirst\!!plusone \fi \letitemgroupparameter\c!factor\itemgroupfirst} \setvalue{\??itemgroupkeyword\v!text }{\settrue\c_strc_itemgroups_text \settrue\c_strc_itemgroups_inline \settrue\c_strc_itemgroups_joined \strc_itemgroups_process_set_option_pack} \setvalue{\??itemgroupkeyword\v!columns }{\strc_itemgroups_process_set_option_pack} \setvalue{\??itemgroupkeyword\v!before }{\settrue\c_strc_itemgroups_before} \setvalue{\??itemgroupkeyword\v!after }{\settrue\c_strc_itemgroups_after} \setvalue{\??itemgroupkeyword\v!nowhite }{\settrue\c_strc_itemgroups_nowhite} \setvalue{\??itemgroupkeyword\v!margin }{\setitemgroupparameter\c!width{-2em}} % signal \setvalue{\??itemgroupkeyword\v!inmargin }{\setitemgroupparameter\c!width{-2em}} % signal \setvalue{\??itemgroupkeyword\v!atmargin }{\ifnum\c_strc_itemgroups_nesting>\plusone \setitemgroupparameter\c!width{0em}% \fi} % signal \setvalue{\??itemgroupkeyword\v!intext }{\settrue\c_strc_itemgroups_inline} \setvalue{\??itemgroupkeyword\v!loose }{\setfalse\c_strc_itemgroups_optimize} \setvalue{\??itemgroupkeyword\v!fit }{\settrue\c_strc_itemgroups_fitting} \setvalue{\??itemgroupkeyword\v!nofit }{\setfalse\c_strc_itemgroups_fitting} \setvalue{\??itemgroupkeyword\v!paragraph}{\settrue\c_strc_itemgroups_paragraph \strc_itemgroups_process_set_option_pack} \setvalue{\??itemgroupkeyword\v!joinedup }{\settrue\c_strc_itemgroups_joined \strc_itemgroups_process_set_option_pack} \setvalue{\??itemgroupkeyword\v!serried }{\edef\itemgroupfirst{-\ifx\itemgroupfirst\empty1\else\itemgroupfirst\fi}% \letitemgroupparameter\c!factor\itemgroupfirst} \setvalue{\??itemgroupkeyword\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {} \setvalue{\??itemgroupkeyword\v!unpacked }{\setfalse\c_strc_itemgroups_pack} \setvalue{\??itemgroupkeyword\v!repeat }{\settrue\c_strc_itemgroups_repeat} \setvalue{\??itemgroupkeyword\v!norepeat }{\setfalse\c_strc_itemgroups_repeat} \setvalue{\??itemgroupkeyword\v!reverse }{\settrue\c_strc_itemgroups_reverse} \setvalue{\??itemgroupkeyword\v!columns }{\settrue\c_strc_itemgroups_columns} \setvalue{\??itemgroupkeyword\v!one }{\letitemgroupparameter\c!n\plusone} \setvalue{\??itemgroupkeyword\v!two }{\letitemgroupparameter\c!n\plustwo} \setvalue{\??itemgroupkeyword\v!three }{\letitemgroupparameter\c!n\plusthree} \setvalue{\??itemgroupkeyword\v!four }{\letitemgroupparameter\c!n\plusfour} \setvalue{\??itemgroupkeyword\v!five }{\letitemgroupparameter\c!n\plusfive} \setvalue{\??itemgroupkeyword\v!standard }{\setupcurrentitemgroup [\c!width=1.5em,\c!factor=0,\c!distance=.5em,\c!inner=,\c!factor=0,% \c!beforehead=,\c!afterhead=\blank,% \c!before=\blank,\c!inbetween=\blank,\c!after=\blank]} \def\strc_itemgroups_initialize_local {\setfalse\c_strc_itemgroups_inline \setfalse\c_strc_itemgroups_concat \setfalse\c_strc_itemgroups_txt % \setfalse\c_strc_itemgroups_reverse \setfalse\c_strc_itemgroups_intro \setfalse\c_strc_itemgroups_auto_intro \setfalse\c_strc_itemgroups_before \setfalse\c_strc_itemgroups_after \setfalse\c_strc_itemgroups_nowhite \setfalse\c_strc_itemgroups_randomize \setfalse\c_strc_itemgroups_intro \setfalse\c_strc_itemgroups_continue % this will be a constant \setfalse\c_strc_itemgroups_head \setfalse\c_strc_itemgroups_sub \setfalse\c_strc_itemgroups_symbol \setfalse\c_strc_itemgroups_columns % to be checked \let\m_strc_itemgroups_destination\empty \let\strc_itemgroups_used_symbol\empty % ** start value \let\strc_itemgroups_margin_symbol\empty \let\strc_itemgroups_extra_symbol\empty % \global\letitemgroupparameter\c!maxwidth\!!zerocount } \setvalue{\??itemgroupfirst\v!intro }{\settrue\c_strc_itemgroups_intro } \setvalue{\??itemgroupfirst\v!random }{\settrue\c_strc_itemgroups_randomize} \setvalue{\??itemgroupfirst\v!continue}{\settrue\c_strc_itemgroups_continue } \def\strc_itemgroups_preset_stage_one#options% {\processcommacommand[#options]\strc_itemgroups_preset_stage_one_indeed} \def\strc_itemgroups_preset_stage_one_indeed#option% {\ifcsname\??itemgroupfirst#option\endcsname \csname\??itemgroupfirst#option\endcsname \fi} \ifdefined\dotagsetitemgroup \else \let\dotagsetitemgroup\relax \fi \def\strc_itemgroups_tag_start_group {\dostarttagged\t!itemgroup\currentitemgroup \dotagsetitemgroup} \def\strc_itemgroups_tag_stop_group {\dostoptagged} \def\strc_itemgroups_before_command {\ifconditional\c_strc_itemgroups_nowhite \ifconditional\c_strc_itemgroups_before \ifcase\c_strc_itemgroups_nesting\or\itemgroupparameter\c!before\fi \else \nowhitespace \fi \else\ifconditional\c_strc_itemgroups_joined % \empty \else \itemgroupparameter\c!before \fi\fi} \def\strc_itemgroups_after_command {\ifconditional\c_strc_itemgroups_nowhite \ifconditional\c_strc_itemgroups_after \ifcase\c_strc_itemgroups_nesting\or\itemgroupparameter\c!after\fi \else \nowhitespace \fi \else\ifconditional\c_strc_itemgroups_joined % \empty \else \itemgroupparameter\c!after \fi\fi} \def\strc_itemgroups_between_command {\ifconditional\c_strc_itemgroups_nowhite \nowhitespace \else\ifconditional\c_strc_itemgroups_joined % \empty \else \itemgroupparameter\c!inbetween \fi\fi} \def\strc_itemgroups_before_head_command {\ifconditional\c_strc_itemgroups_nowhite \nowhitespace \else\ifconditional\c_strc_itemgroups_joined % \empty \else \itemgroupparameter\c!beforehead \fi\fi} \def\strc_itemgroups_after_head_command {\ifconditional\c_strc_itemgroups_nowhite \nowhitespace \else\ifconditional\c_strc_itemgroups_joined % \empty \else \itemgroupparameter\c!afterhead \fi\fi} % compatible setup command: \let\strc_itemgroups_normal_setup\setupitemgroup \unexpanded\def\setupitemgroup {\doquadrupleempty\strc_itemgroups_setup} \def\strc_itemgroups_setup[#category][#levels][#options][#settings]% category level|each options|settings settings|options {\edef\strc_itemgroups_setup_what{#levels}% \iffourthargument \ifx\strc_itemgroups_setup_what\v!each \strc_itemgroups_setup_each{#category}{#options}% \strc_itemgroups_setup_each{#category}{#settings}% \else \strc_itemgroups_setup_list{#levels}{#category}{#options}% \strc_itemgroups_setup_list{#levels}{#category}{#settings}% \fi \else\ifthirdargument \ifx\strc_itemgroups_setup_what\v!each \strc_itemgroups_setup_each{#category}{#options}% \else \strc_itemgroups_setup_list{#levels}{#category}{#options}% \fi \else\ifsecondargument \strc_itemgroups_setup_each{#category}{#levels}% \else \strc_itemgroups_normal_setup[#category]% == settings \fi\fi\fi} % can be made a bit faster \def\strc_itemgroups_setup_each#category#whatever% {\doifassignmentelse{#whatever} {\strc_itemgroups_normal_setup[#category][#whatever]} {\strc_itemgroups_normal_setup[#category][\c!option={#whatever}]}} \def\strc_itemgroups_setup_list_level_a#category#whatever#level% {\strc_itemgroups_normal_setup[#category:#level][#whatever]} \def\strc_itemgroups_setup_list_level_b#category#whatever#level% {\strc_itemgroups_normal_setup[#category:#level][\c!option={#whatever}]} \def\strc_itemgroups_setup_list#subcategories#category#whatever% {\doifassignmentelse{#whatever} {\processcommalist[#subcategories]{\strc_itemgroups_setup_list_level_a{#category}{#whatever}}} {\processcommalist[#subcategories]{\strc_itemgroups_setup_list_level_b{#category}{#whatever}}}} \def\strc_itemgroups_increment_item_counter {\ifconditional\c_strc_itemgroups_sub \else \ifconditional\c_strc_itemgroups_symbol \else % \ifx\strc_itemgroups_extra_symbol\empty \strc_counters_increment_sub\v_strc_itemgroups_counter\currentitemlevel \fi \fi} \unexpanded\def\strc_itemgroups_insert_item_counter {\ifconditional\c_strc_itemgroups_repeat \ifcase\c_strc_itemgroups_nesting % skip \or \strc_itemgroups_insert_item_counter_indeed % this could become an option \else \strc_itemgroups_insert_item_counter_indeed \fi \else \strc_itemgroups_insert_item_counter_indeed \fi} \def\strc_itemgroups_insert_item_counter_indeed % quite slow ... every time this setup .. but it {\begingroup % can be optimized ... best move some to strc-num \setupcounter [\v_strc_itemgroups_counter]% [\c!prefix=\itemgroupparameter\c!prefix, \c!prefixstopper=\itemgroupparameter\c!prefixstopper, \c!prefixseparatorset=\itemgroupparameter\c!prefixseparatorset, \c!prefixconversion=\itemgroupparameter\c!prefixconversion, \c!prefixconversionset=\itemgroupparameter\c!prefixseparatorset, \c!prefixset=\itemgroupparameter\c!prefixset, \c!prefixsegments=\itemgroupparameter\c!prefixsegments, \c!prefixconnector=\itemgroupparameter\c!prefixconnector, \c!criterium=\itemgroupparameter\c!criterium, \c!numberorder=\ifconditional\c_strc_itemgroups_reverse\v!reverse\else\v!normal\fi, \c!numberstopper=\expdoif{\itemgroupparameter\c!placestopper}\v!yes{\itemgroupparameter\c!stopper}, \c!numberconversionset=\v_strc_itemgroups_counter, \c!numbersegments=\currentitemgroupsegments]% % there will be a fixedconversion key %\normalexpanded{\defineconversionset[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}% \normalexpanded{\strc_sets_define_conversion_set[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}% % \convertedcounter[\v_strc_itemgroups_counter]% [\number\currentitemlevel]% \strc_itemgroups_insert_reference \endgroup} \def\strc_itemgroups_set_symbol#symbol% {\edef\strc_itemgroups_tmp_symbol{#symbol}% \ifx\strc_itemgroups_tmp_symbol\empty \else \doifsymboldefinedelse\strc_itemgroups_tmp_symbol \strc_itemgroups_set_symbol_symbol {\doifconversiondefinedelse\strc_itemgroups_tmp_symbol \strc_itemgroups_set_symbol_conversion \donothing}% \fi} \def\strc_itemgroups_set_symbol_symbol {\let\currentitemgroupsymbol\strc_itemgroups_tmp_symbol \strc_itemgroups_store_global_symbol\currentitemgroupsymbol \strc_itemgroups_store_local_symbol\v_strc_itemgroups_unknown_symbol \let\strc_itemgroups_used_symbol\strc_itemgroups_set_symbol_symbol_item \let\strc_itemgroups_asked_symbol\empty} \def\strc_itemgroups_set_symbol_conversion {\let\currentitemgroupsymbol\strc_itemgroups_tmp_symbol \strc_itemgroups_store_global_symbol\currentitemgroupsymbol \strc_itemgroups_store_local_symbol\strc_itemgroups_insert_item_counter \let\strc_itemgroups_used_symbol\strc_itemgroups_set_symbol_conversion_item \let\strc_itemgroups_asked_symbol\empty} \def\strc_itemgroups_set_symbol_symbol_item {\symbol[\currentitemgroupsymbol]} \def\strc_itemgroups_set_symbol_conversion_item {\ifconditional\c_strc_itemgroups_text % maybe block stopper here, but one can as well clone an itemgroup then \itemgroupparameter\c!lefttext \strc_itemgroups_fetch_local_symbol \itemgroupparameter\c!righttext \else \itemgroupparameter\c!left \strc_itemgroups_fetch_local_symbol \itemgroupparameter\c!right \fi} \def\strc_itemgroups_calculate_list_width#level% {\let\savedcurrentitemgroup\currentitemgroup \edef\currentitemgroup{\currentparentitemgroup:\number#level}% \ifdim\d_strc_itemgroups_max_width>\zeropoint \d_strc_itemgroups_list_width\d_strc_itemgroups_max_width \else\ifnum\itemgroupparameter\c!factor>\zerocount \d_strc_itemgroups_list_width\itemgroupparameter\c!step\relax \ifdim\d_strc_itemgroups_list_width=\zeropoint \d_strc_itemgroups_list_width=.5em\fi \multiply\d_strc_itemgroups_list_width \itemgroupparameter\c!factor \advance\d_strc_itemgroups_list_width\itemgroupparameter\c!width\relax \else \d_strc_itemgroups_list_width\itemgroupparameter\c!width\relax \fi\fi \advance\d_strc_itemgroups_list_width\itemgroupparameter\c!distance\relax \let\currentitemgroup\savedcurrentitemgroup} \unexpanded\def\startitemgroup {\dotripleempty\strc_itemgroups_start} \def\strc_itemgroups_start[#category][#options][#settings]% {\begingroup % (1) \def\currentitemgroup{#category}% no nested mixing of itemgroups \let\currentparentitemgroup\currentitemgroup \global\advance\c_strc_itemgroups_nesting\plusone \def\currentitemlevel{\number\c_strc_itemgroups_nesting}% \normalexpanded{\chaintocurrentitemgroup{\currentparentitemgroup:\currentitemlevel}}% \edef\currentitemgroup{\currentparentitemgroup:\currentitemlevel}% % \ifthirdargument \strc_itemgroups_start_indeed[#options][#settings]% \else\ifsecondargument \doifassignmentelse{#options} {\strc_itemgroups_start_indeed[][#options]} {\strc_itemgroups_start_indeed[#options][]}% \else \strc_itemgroups_start_indeed[][]% \fi\fi} \def\strc_itemgroups_start_indeed[#options][#settings]% {\edef\itemgroupoptions{\itemgroupparameter\c!option}% \edef\itemgroupextraoptions{#options}% \ifx\itemgroupoptions\empty \let\itemgroupoptions\itemgroupextraoptions \else\ifx\itemgroupextraoptions\empty % ok \else \edef\itemgroupoptions{\itemgroupoptions,\itemgroupextraoptions}% \fi\fi \begingroup % (2) \the\itemgroupcommands \let\c_strc_itemgroups_text_saved\c_strc_itemgroups_text \strc_itemgroups_initialize_local \strc_itemgroups_preset_stage_one\itemgroupoptions % % \ifhmode % \ifconditional\c_strc_itemgroups_auto_concat % \ifdim\lastskip=\d_strc_itemgroups_signal % \settrue\c_strc_itemgroups_concat % \fi % \fi % \ifconditional\c_strc_itemgroups_text_saved \else % \ifconditional\c_strc_itemgroups_text \else % \par % \fi % \fi % \fi % \iftrialtypesetting \strc_counters_save\v_strc_itemgroups_counter \fi \global\advance\c_strc_itemgroups_n_of_lists\plusone \c_strc_itemgroups_n_of_items\zerocount \strc_itemgroups_check_n_of_items \ifx\itemgroupoptions\empty \strc_itemgroups_setup_symbol_default \strc_itemgroups_reset_continue_state \setupcurrentitemgroup[#settings]% \else \strc_itemgroups_process_options\itemgroupoptions \setupcurrentitemgroup[#settings]% \ifconditional\c_strc_itemgroups_continue \strc_itemgroups_setup_symbol_continue \strc_itemgroups_fetch_continue_state \else \strc_itemgroups_setup_symbol_asked \strc_itemgroups_store_continue_state\itemgroupoptions{#settings}% \fi \fi % \ifhmode \ifconditional\c_strc_itemgroups_auto_concat \ifdim\lastskip=\d_strc_itemgroups_signal \settrue\c_strc_itemgroups_concat \fi \fi \ifconditional\c_strc_itemgroups_text_saved \else \ifconditional\c_strc_itemgroups_text \else \par \fi \fi \fi % \ifnum\c_strc_itemgroups_nesting=\plusone % NIEUW \doadaptleftskip {\itemgroupparameter\c!margin}% \doadaptleftskip {\itemgroupparameter\c!leftmargin}% \doadaptrightskip{\itemgroupparameter\c!rightmargin}% \fi \usealignparameter\itemgroupparameter \edef\m_strc_itemgroups_indenting{\itemgroupparameter\c!indenting}% \ifnum\c_strc_itemgroups_nesting>\zerocount \settrue\c_strc_itemgroups_first \ifconditional\c_strc_itemgroups_continue \else \strc_counters_restart_sub\v_strc_itemgroups_counter\currentitemlevel{\numexpr\itemgroupparameter\c!start-\plusone\relax}% \fi \fi \ifx\strc_itemgroups_used_symbol\empty \strc_itemgroups_set_symbol\strc_itemgroups_asked_symbol % ** default value \ifx\strc_itemgroups_used_symbol\empty \let\currentitemgroupsymbol\currentitemlevel % ** fall back \fi \fi \ifconditional\c_strc_itemgroups_auto_intro\ifnum\prevgraf<\plusthree \settrue\c_strc_itemgroups_intro \fi\fi \ifconditional\c_strc_itemgroups_paragraph \ifnum\c_strc_itemgroups_nesting>\plusone \letitemgroupparameter\c!inbetween\empty \fi \fi \ifconditional\c_strc_itemgroups_pack \letitemgroupparameter\c!inbetween\empty \fi \ifconditional\c_strc_itemgroups_columns \ifinsidecolumns\else\ifcase\c_strc_itemgroups_column_depth \global\c_strc_itemgroups_column_depth\c_strc_itemgroups_nesting % global ? \strc_itemgroups_before_command \strc_itemgroups_tag_start_group \strc_itemgroups_start_columns \fi\fi \fi \ifconditional\c_strc_itemgroups_fitting \ifdim\d_strc_itemgroups_max_width>\zeropoint \letitemgroupparameter\c!width\d_strc_itemgroups_max_width \fi \fi \strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting \ifdim\d_strc_itemgroups_list_width>\zeropoint\relax \ifconditional\c_strc_itemgroups_inline\else \advance\leftskip\d_strc_itemgroups_list_width\relax \fi \fi \ifx\m_strc_itemgroups_repeat_start\empty \let\currentitemgroupconversionset \currentitemgroupsymbol \edef\currentitemgroupsegments {\currentitemlevel}% \else \edef\currentitemgroupconversionset{\currentitemgroupconversionset,\currentitemgroupsymbol}% \edef\currentitemgroupsegments {\m_strc_itemgroups_repeat_start:\currentitemlevel}% \fi \d_strc_itemgroups_asked_width\itemgroupparameter\c!width\relax \startcollectitems} \let\startcollectitems\relax \let\stopcollectitems \relax \letvalue{\??itemgroupalign\v!flushleft }\relax \letvalue{\??itemgroupalign\v!right }\relax \letvalue{\??itemgroupalign\v!flushright}\hfill \letvalue{\??itemgroupalign\v!left }\hfill \letvalue{\??itemgroupalign\v!middle }\hfil \letvalue{\??itemgroupalign\v!center }\hfil \def\strc_itemgroups_left_sym_filler {\csname\??itemgroupalign\itemgroupparameter\c!symalign\endcsname} % symbols + states \def\strc_itemgroups_store_global_symbol#symbol% {\letgvalue{\??itemgroupglobal\currentitemlevel}#symbol} \def\strc_itemgroups_store_local_symbol#symbol% {\letgvalue{\??itemgrouplocal\currentitemlevel}#symbol} \def\strc_itemgroups_fetch_global_symbol {\getvalue{\??itemgroupglobal\currentitemlevel}} \def\strc_itemgroups_fetch_local_symbol {\getvalue{\??itemgrouplocal\currentitemlevel}} \def\strc_itemgroups_setup_symbol_default {\edef\strc_itemgroups_asked_symbol{\itemgroupparameter\c!symbol}% \strc_itemgroups_store_global_symbol\empty} \def\strc_itemgroups_setup_symbol_continue {\ifcsname\??itemgroupglobal\currentitemlevel\endcsname \let\strc_itemgroups_asked_symbol\strc_itemgroups_fetch_global_symbol \else \let\strc_itemgroups_asked_symbol\currentitemlevel \fi} \def\strc_itemgroups_setup_symbol_asked {\edef\strc_itemgroups_asked_symbol{\itemgroupparameter\c!symbol}} \ifdefined\strc_itemgroups_start_columns % already defined in page-mix \else % will be redefined in page-mix \ifdefined\startcolumns \else \unexpanded\def\startcolumns[#settings]{} \unexpanded\def\stopcolumns {} \fi \def\strc_itemgroups_start_columns {\startcolumns [\c!n=\itemgroupparameter\c!n, \c!height=, \c!rule=\v!off, \c!balance=\v!yes, \c!align=\v!no]} \def\strc_itemgroups_stop_columns {\stopcolumns} \fi \unexpanded\def\stopitemgroup {\stopcollectitems \ifconditional\c_strc_itemgroups_text \removeunwantedspaces \space \ignorespaces \else \par \fi \strc_itemgroups_register_status \ifconditional\c_strc_itemgroups_first \else \dostoptagged \dostoptagged % \endgroup % (3) \fi \ifnum\c_strc_itemgroups_column_depth=\c_strc_itemgroups_nesting\relax \strc_itemgroups_stop_columns \global\c_strc_itemgroups_column_depth\zerocount % global ? \strc_itemgroups_tag_stop_group \strc_itemgroups_after_command \dontrechecknextindentation \else\ifnum\c_strc_itemgroups_nesting=\plusone \strc_itemgroups_insert_breakallow \strc_itemgroups_tag_stop_group \strc_itemgroups_after_command \useindentnextparameter\itemgroupparameter \else % nieuw, not yet nobreak handling \strc_itemgroups_tag_stop_group \ifcase\c_strc_itemgroups_spacing_mode \strc_itemgroups_after_command \or \strc_itemgroups_after_command \fi \dontrechecknextindentation \fi\fi % new test, needed in sidefloats (surfaced in volker's proceedings) \iftrialtypesetting \strc_counters_restore\v_strc_itemgroups_counter \global\advance\c_strc_itemgroups_n_of_lists\minusone \fi \global\advance\c_strc_itemgroups_nesting\minusone \xdef\currentitemlevel{\number\c_strc_itemgroups_nesting}% %\ifconditional\c_strc_itemgroups_text \endgroup % (2) \endgroup % (1) %\else % \endgroup % (2) % \endgroup % (1) % \par % hm, already done, and dangerous as \c_strc_itemgroups_text is already forgotten %\fi \dorechecknextindentation} % The items. \unexpanded\def\startitemgroupitem {\dosingleempty\strc_itemgroups_start_item} \def\strc_itemgroups_start_item_first {\setfalse\c_strc_itemgroups_first % \begingroup % (3) \ifcase\c_strc_itemgroups_nesting % 0 \or \strc_itemgroups_start_item_first_one % 1 \else \strc_itemgroups_start_item_first_two % 2+ \fi} \def\strc_itemgroups_start_item_first_one {\ifcase\c_strc_itemgroups_column_depth \ifconditional\c_strc_itemgroups_intro\strc_itemgroups_insert_breakno\fi \strc_itemgroups_before_command \strc_itemgroups_tag_start_group \ifconditional\c_strc_itemgroups_intro\strc_itemgroups_insert_breakno\fi \fi} \def\strc_itemgroups_start_item_first_two {\ifconditional\c_strc_itemgroups_paragraph\else \edef\previtemlevel{\the\numexpr\c_strc_itemgroups_nesting-\plusone}% \ifcase\c_strc_itemgroups_spacing_mode \strc_itemgroups_before_command \or \doifelsenothing\strc_itemgroups_before_command % should possibly expand to empty {\nameditemgroupparameter{\currentparentitemgroup:\previtemlevel}\c!inbetween}% \strc_itemgroups_before_command \else \nameditemgroupparameter{\currentparentitemgroup:\previtemlevel}\c!inbetween \fi \strc_itemgroups_tag_start_group \fi} \def\strc_itemgroups_start_item_next {\dostoptagged % ok? what do we stop here? \dostoptagged % ok? what do we stop here? \ifconditional\c_strc_itemgroups_text \ifhmode % WS: make the distance between items customizable, think about better default values -> see itemize-1.tex \strc_itemgroups_set_text_item_distance% HH: moved out and made configurable (sort of) \removeunwantedspaces \hskip\m_strc_itemgroups_text_distance\relax \fi \else \strc_itemgroups_between_command \fi} \unexpanded\def\strc_itemgroups_start_item[#1]% we can reuse more {\def\currentitemreference{#1}% \ifconditional\c_strc_itemgroups_text % begin of item \else \par \fi \ifconditional\c_strc_itemgroups_concat \strc_itemgroups_insert_breakno \fi \strc_itemgroups_increment_item_counter \ifconditional\c_strc_itemgroups_first \strc_itemgroups_start_item_first \else \strc_itemgroups_start_item_next \fi \ifconditional\c_strc_itemgroups_concat % \vskip-\dimexpr\lastskip+\lineheight\relax \vskip-\lastskip % we cannot use a \dimexpr here because \vskip-\lineheight % then we loose the stretch and shrink \nobreak \setfalse\c_strc_itemgroups_concat \fi \dostarttagged\t!item\empty \dostarttagged\t!itemtag\empty \strc_itemgroups_insert_item \dostoptagged \ifconditional\c_strc_itemgroups_pack \setupwhitespace[\v!none]% \fi \itemgroupparameter\c!inner % will become obsolete (better use setups) \strc_itemgroups_margin_symbol \let\strc_itemgroups_margin_symbol\relax \dostarttagged\t!itemcontent\empty \strut \nobreak % else problems with intext items \hskip\d_strc_itemgroups_signal % concat \itemgroupparameter\c!command} \unexpanded\def\stopitemgroupitem {\ifconditional\c_strc_itemgroups_text % nothing \else \endgraf \fi} \unexpanded\def\startitemgrouphead {\dosingleempty\strc_itemgroups_start_head} \unexpanded\def\strc_itemgroups_start_head[#reference]% {\ifconditional\c_strc_itemgroups_first \else \strc_itemgroups_insert_breakallow \fi \ifconditional\c_strc_itemgroups_pack \else \strc_itemgroups_before_head_command \fi \ifconditional\c_strc_itemgroups_first \ifconditional\c_strc_itemgroups_intro \else \ifcase\c_strc_itemgroups_nesting \strc_itemgroups_insert_breakallow \fi \fi \fi \strc_itemgroups_start_item[#reference]% \groupedcommand\strc_itemgroups_start_head_indeed\strc_itemgroups_stop_head_indeed} \unexpanded\def\stopitemgrouphead {\stopitemgroupitem} \unexpanded\def\strc_itemgroups_start_head_indeed {\settrue\c_strc_itemgroups_head \useitemgroupstyleandcolor\c!headstyle\c!headcolor\ignorespaces} \unexpanded\def\strc_itemgroups_stop_head_indeed {\removeunwantedspaces \ifconditional\c_strc_itemgroups_text \space \ignorespaces \else \par \fi \strc_itemgroups_insert_breakno \ifconditional\c_strc_itemgroups_pack\else\strc_itemgroups_after_head_command\fi \strc_itemgroups_insert_breakno \noindentation} % Simple commands. \unexpanded\def\strc_itemgroups_start_do_item {\startitemgroupitem} \unexpanded\def\strc_itemgroups_start_no_item % ? {\startitemgroupitem} \unexpanded\def\strc_itemgroups_start_button[#destination]% {\edef\m_strc_itemgroups_destination{#destination}% \startitemgroupitem} \unexpanded\def\strc_itemgroups_start_symbol#text% {\def\strc_itemgroups_extra_symbol{#text}% \settrue\c_strc_itemgroups_symbol \startitemgroupitem} \unexpanded\def\strc_itemgroups_start_dummy {\strc_itemgroups_start_symbol\strut\strut} % two ? \unexpanded\def\strc_itemgroups_start_subitem {\settrue\c_strc_itemgroups_sub \startitemgroupitem} \unexpanded\def\strc_itemgroups_start_edge#text% {\strc_itemgroups_start_symbol {\strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting \hbox to \d_strc_itemgroups_list_width {#text\hskip\itemgroupparameter\c!distance}}} \unexpanded\def\strc_itemgroups_start_margin#text% {\def\strc_itemgroups_margin_symbol % brrr {\llap {\begingroup \useitemgroupstyleandcolor\c!marstyle\c!marcolor #text% keep em/ex local \endgroup \hskip\dimexpr\leftskip+\leftmargindistance\relax}}% \startitemgroupitem} \unexpanded\def\strc_itemgroups_start_text#text% {\def\strc_itemgroups_extra_symbol{#text}% \settrue\c_strc_itemgroups_symbol \settrue\c_strc_itemgroups_txt \startitemgroupitem} % \unexpanded\def\strc_itemgroups_start_head % {\settrue\c_strc_itemgroups_head % \startitemgrouphead} \unexpanded\def\strc_itemgroups_start_items {\dosingleempty\strc_itemgroups_start_items_indeed} \unexpanded\def\strc_itemgroups_start_items_indeed[#whatever]% something got lost {\strc_itemgroups_start_edge {\dorecurse{0\itemgroupparameter\c!items}{\strc_itemgroups_used_symbol\hss}% \unskip}} \unexpanded\def\startspecialitemgroupitem[#name]% {\csname\??itemgroupstart\ifcsname\??itemgroupstart#name\endcsname#name\else\v!item\fi\endcsname} \unexpanded\def\stopspecialitemgroupitem {\stopitemgroupitem} \letvalue{\??itemgroupstart\v!item}\strc_itemgroups_start_do_item \letvalue{\??itemgroupstart\v!sub }\strc_itemgroups_start_subitem \letvalue{\??itemgroupstart\v!sym }\strc_itemgroups_start_symbol \letvalue{\??itemgroupstart\v!ran }\strc_itemgroups_start_edge \letvalue{\??itemgroupstart\v!its }\strc_itemgroups_start_items \letvalue{\??itemgroupstart\v!mar }\strc_itemgroups_start_margin \def\optimizelistitemsbreak {\ifcase\c_strc_itemgroups_column_depth \ifconditional\c_strc_itemgroups_optimize \ifcase \c_strc_itemgroups_max_items \else \ifnum\c_strc_itemgroups_max_items=\plusthree \ifnum\c_strc_itemgroups_n_of_items>\plusone \strc_itemgroups_insert_nobreak \fi \else\ifnum\c_strc_itemgroups_max_items>\plusthree \ifnum\c_strc_itemgroups_n_of_items=\plustwo \ifconditional\c_strc_itemgroups_intro \strc_itemgroups_insert_breakno \else \strc_itemgroups_insert_nobreak \fi \else\ifnum\c_strc_itemgroups_max_items=\c_strc_itemgroups_n_of_items\relax \strc_itemgroups_insert_nobreak \else\ifnum\c_strc_itemgroups_n_of_items>\plustwo \strc_itemgroups_insert_break \else \ifconditional\c_strc_itemgroups_intro\else\strc_itemgroups_insert_break\fi \fi\fi\fi \fi\fi \fi \fi\fi} \def\strc_itemgroups_handle_text_item {\scratchdimen\wd\b_strc_itemgroups \advance \scratchdimen \itemgroupparameter\c!distance\relax \ifdim\scratchdimen>\d_strc_itemgroups_list_width \advance\scratchdimen -\d_strc_itemgroups_list_width \else \scratchdimen\zeropoint \fi \llap{\hbox to \d_strc_itemgroups_list_width{\ifconditional\c_strc_itemgroups_sub\llap{+\enspace}\fi\box\b_strc_itemgroups\hss}}% was: \hfill \hskip\scratchdimen} \def\strc_itemgroups_handle_lapped_item_positive {\llap {\hbox to \d_strc_itemgroups_list_width {\ifconditional\c_strc_itemgroups_sub \llap{+\enspace}% \fi \strc_itemgroups_left_sym_filler \box\b_strc_itemgroups % can already have a forced widt, only factor handled here \hfil \hskip\itemgroupparameter\c!distance}}} \def\strc_itemgroups_handle_lapped_item_negative {\llap {\ifconditional\c_strc_itemgroups_sub \llap{+\enspace}% \fi \box\b_strc_itemgroups \hskip\leftmargindistance}} \def\strc_itemgroups_handle_groups_text_item {\hbox {\ifconditional\c_strc_itemgroups_sub +\enspace \fi \box\b_strc_itemgroups \hskip\interwordspace}% \nobreak} \def\strc_itemgroups_handle_groups_inline_item {\hbox to \d_strc_itemgroups_list_width {\ifconditional\c_strc_itemgroups_sub \llap{+\enspace}% \fi \box\b_strc_itemgroups \hss}} % was: \hfill \unexpanded\def\strc_itemgroups_start_head_sym#text% {\def\strc_itemgroups_extra_symbol{#text}% \settrue\c_strc_itemgroups_symbol \settrue\c_strc_itemgroups_head \strc_itemgroups_start_head} \def\strc_itemgroups_make_symbol_box {\setbox\b_strc_itemgroups\hbox {\ifconditional\c_strc_itemgroups_head \ifconditional\c_strc_itemgroups_symbol \strc_itemgroups_insert_extra_reference \useitemgroupstyleandcolor\c!symstyle\c!symcolor \strc_itemgroups_extra_symbol \else \useitemgroupstyleandcolor\c!headstyle\c!headcolor \strc_itemgroups_used_symbol \fi \else \ifconditional\c_strc_itemgroups_symbol \strc_itemgroups_insert_extra_reference \useitemgroupstyleandcolor\c!symstyle\c!symcolor \strc_itemgroups_extra_symbol \else \useitemgroupstyleandcolor\c!style\c!color \strc_itemgroups_used_symbol \fi \fi}% \let\strc_itemgroups_extra_symbol\empty \setfalse\c_strc_itemgroups_symbol} \def\strc_itemgroups_make_fitting_box {\ifdim\wd\b_strc_itemgroups>\itemgroupparameter\c!maxwidth\scaledpoint\relax % brr, sp \normalexpanded{\global\setitemgroupparameter{\c!maxwidth}{\number\wd\b_strc_itemgroups}}% \fi \ifdim\d_strc_itemgroups_max_width>\zeropoint \setbox\b_strc_itemgroups\simplealignedbox {\dimexpr\d_strc_itemgroups_max_width+\itemgroupparameter\c!distance\relax} {\itemgroupparameter\c!itemalign} {\box\b_strc_itemgroups\hskip\itemgroupparameter\c!distance}% \fi} \def\strc_itemgroups_make_aligned_box {\doifsomething{\itemgroupparameter\c!itemalign} {\setbox\b_strc_itemgroups\simplealignedbox {\dimexpr\d_strc_itemgroups_asked_width+\itemgroupparameter\c!distance\relax} {\itemgroupparameter\c!itemalign} {\box\b_strc_itemgroups\hskip\itemgroupparameter\c!distance}}} \def\strc_itemgroups_make_destination_box {\iftrialtypesetting \else \ifx\m_strc_itemgroups_destination\empty \else \setbox\b_strc_itemgroups\hbox{\directgotobox{\box\b_strc_itemgroups}[\m_strc_itemgroups_destination]}% \fi\fi} \def\strc_itemgroups_check_indenting {\setfalse\c_strc_itemgroups_indented_first \ifx\m_strc_itemgroups_indenting\empty \else \normalexpanded{\setupindenting[\v!reset,\v!yes,\m_strc_itemgroups_indenting]}% \ifconditional\c_spac_indentation_indent_first % better is to have a mode \doifnot{\itemgroupparameter\c!alignsymbol}\v!yes {\settrue\c_strc_itemgroups_indented_first}% \fi \fi} \def\strc_itemgroups_check_for_repeated {\ifconditional\c_strc_itemgroups_repeat \ifx\m_strc_itemgroups_repeat_start\empty \edef\m_strc_itemgroups_repeat_start{\currentitemlevel}% \fi \else \let\m_strc_itemgroups_repeat_start\empty \fi} \def\strc_itemgroups_insert_item {\ifconditional\c_strc_itemgroups_text % again? % begin of item \else \par % done twice? \fi \advance\c_strc_itemgroups_n_of_items\plusone \optimizelistitemsbreak \strc_itemgroups_check_indenting \dontleavehmode \ifconditional\c_strc_itemgroups_indented_first \hskip-\parindent \fi \strc_itemgroups_make_symbol_box \strc_itemgroups_make_destination_box \ifconditional\c_strc_itemgroups_fitting \strc_itemgroups_make_fitting_box \else\ifdim\d_strc_itemgroups_asked_width>\zeropoint \strc_itemgroups_make_aligned_box \fi\fi \let\m_strc_itemgroups_destination\empty \ht\b_strc_itemgroups\strutheight % just in case a symbols is not yet available in \dp\b_strc_itemgroups\strutdepth % the current run (more a mkii mp side artifact) \strc_itemgroups_check_for_repeated \ifdim\d_strc_itemgroups_asked_width<\zeropoint\relax \strc_itemgroups_handle_lapped_item_negative \else \ifdim\d_strc_itemgroups_asked_width=\zeropoint\relax \strc_itemgroups_calculate_list_width\plusone \else \strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting \fi \ifconditional\c_strc_itemgroups_text \strc_itemgroups_handle_groups_text_item \else\ifconditional\c_strc_itemgroups_inline \strc_itemgroups_handle_groups_inline_item \else\ifconditional\c_strc_itemgroups_txt \strc_itemgroups_handle_text_item \else \strc_itemgroups_handle_lapped_item_positive \fi\fi\fi \fi \setfalse\c_strc_itemgroups_head \setfalse\c_strc_itemgroups_sub \ifconditional\c_strc_itemgroups_indented_first \hskip\parindent \fi \ignorespaces} \def\strc_itemgroups_start_item_nop {\let\currentitemreference\empty \strc_itemgroups_increment_item_counter \advance\c_strc_itemgroups_n_of_items\plusone \setbox\b_strc_itemgroups\hbox {\useitemgroupstyleandcolor\c!style\c!color \strc_itemgroups_used_symbol}% \strc_itemgroups_check_for_repeated \ignorespaces} \setvalue{\??itemgroupdistance\v!none}% {\let\m_strc_itemgroups_text_distance\zeropoint} \setvalue{\??itemgroupdistance\v!space}% {\def\m_strc_itemgroups_text_distance{\interwordspace\!!plus\interwordstretch\!!minus\interwordshrink}} \setvalue\??itemgroupdistance % catches empty value {\let\m_strc_itemgroups_text_distance\zeropoint} \unexpanded\def\strc_itemgroups_set_text_item_distance {\edef\m_strc_itemgroups_text_distance{\itemgroupparameter\c!textdistance}% \ifx\m_strc_itemgroups_text_distance\empty % \else\ifcsname\??itemgroupdistance\m_strc_itemgroups_text_distance\endcsname \csname\??itemgroupdistance\m_strc_itemgroups_text_distance\endcsname \else \strc_itemgroups_set_text_item_distance_indeed \fi\fi} \def\strc_itemgroups_set_text_item_distance_indeed {\assignvalue \m_strc_itemgroups_text_distance \m_strc_itemgroups_text_distance {.5\interwordspace\!!plus.5\emwidth}% {\interwordspace \!!plus \emwidth}% {\emwidth \!!plus \interwordstretch\!!minus\interwordshrink}} \unexpanded\def\strc_itemgroups_default_command {\EveryPar{\ignorespaces}% needed ? \ignorespaces} %D Special case: \unexpanded\def\strc_itemgroups_head#text\par {\startitemgrouphead{#text}} %D The local commands: \appendtoks \let\item \strc_itemgroups_start_do_item \let\noitem \strc_itemgroups_start_no_item \let\itm \strc_itemgroups_start_do_item \let\but \strc_itemgroups_start_button \let\nop \strc_itemgroups_start_dummy \let\txt \strc_itemgroups_start_text \let\head \strc_itemgroups_head \let\headsym \strc_itemgroups_start_head_sym \let\startitem \startitemgroupitem \let\stopitem \stopitemgroupitem \let\starthead \startitemgrouphead \let\stophead \stopitemgroupitemhead \let\startspecialitem\startspecialitemgroupitem \let\stopspecialitem \stopspecialitemgroupitem \to \itemgroupcommands \ifx\currentinterface \v!english \else \appendtoks \expandafter\let\csname\v!item \endcsname\strc_itemgroups_start_do_item \expandafter\let\csname\v!sub \endcsname\strc_itemgroups_start_subitem \expandafter\let\csname\v!sym \endcsname\strc_itemgroups_start_symbol \expandafter\let\csname\v!ran \endcsname\strc_itemgroups_start_edge \expandafter\let\csname\v!head \endcsname\strc_itemgroups_head \expandafter\let\csname\v!its \endcsname\strc_itemgroups_start_items \expandafter\let\csname\v!mar \endcsname\strc_itemgroups_start_margin \expandafter\let\csname\v!txt \endcsname\strc_itemgroups_start_text \expandafter\let\csname\e!start\v!item\endcsname\startitemgroupitem \expandafter\let\csname\e!stop \v!item\endcsname\stopitemgroupitem \expandafter\let\csname\e!start\v!head\endcsname\startitemgrouphead \expandafter\let\csname\e!stop \v!head\endcsname\stopitemgrouphead \to \itemgroupcommands \fi %D A nice example of a plugin: %D %D \startbuffer %D \startitemize[a,random,packed] %D \startitem first \stopitem \startitem second \stopitem %D \startitem third \stopitem \startitem fourth \stopitem %D \stopitemize %D %D \startitemize[a,random,packed] %D \startitem first \stopitem \startitem second \stopitem %D \startitem third \stopitem \startitem fourth \stopitem %D \stopitemize %D %D \startitemize[a,packed] %D \startitem first \stopitem \startitem second \stopitem %D \startitem third \stopitem \startitem fourth \stopitem %D \stopitemize %D \stopbuffer %D %D \typebuffer \getbuffer % better collectitems als conditional and a real plugin mechanism (some day) \newcount\c_strc_itemgroups_collected_stored \newcount\c_strc_itemgroups_collected_done \newcount\c_strc_itemgroups_collected_current \@EA\def\@EA\strc_itemgroups_collected_store\@EA#\@EA1\csname\e!stop\v!item\endcsname % use grabuntil {\advance\c_strc_itemgroups_collected_stored\plusone \setvalue{\??itemgroupstack\number\c_strc_itemgroups_collected_stored}{\startitemgroupitem#1\stopitemgroupitem}} \def\strc_itemgroups_collected_flush {\ifconditional\c_strc_itemgroups_randomize \getrandomcount\c_strc_itemgroups_collected_current\plusone\c_strc_itemgroups_collected_stored \else \advance\c_strc_itemgroups_collected_current\plusone \fi \ifcsname\??itemgroupstack\number\c_strc_itemgroups_collected_current\endcsname \getvalue{\??itemgroupstack\number\c_strc_itemgroups_collected_current}% \letbeundefined{\??itemgroupstack\number\c_strc_itemgroups_collected_current}% \advance\c_strc_itemgroups_collected_done\plusone \fi \ifnum\c_strc_itemgroups_collected_done<\c_strc_itemgroups_collected_stored \expandafter\strc_itemgroups_collected_flush \fi} \unexpanded\def\stopcollectitems {\ifconditional\c_strc_itemgroups_randomize \c_strc_itemgroups_collected_done \zerocount \c_strc_itemgroups_collected_current\zerocount \ifnum\c_strc_itemgroups_collected_stored>\zerocount \doubleexpandafter\strc_itemgroups_collected_flush \fi \fi} \unexpanded\def\startcollectitems {\ifconditional\c_strc_itemgroups_randomize \c_strc_itemgroups_collected_stored\zerocount \letvalue{\e!start\v!item}\strc_itemgroups_collected_store \fi} %D Left-overs: \unexpanded\def\item {\strc_itemgroups_item_alone} \def\strc_itemgroups_item_alone[#category]#text\par {\doifsomethingelse{#category}{\startitemgroup[#category]}{\startitemgroup[\v!itemize]}% \startitem#text\stopitem \stopitemgroup} \unexpanded\def\head {\strc_itemgroups_head_alone} \def\strc_itemgroups_head_alone[#category]#head\par#body\par {\doifsomethingelse{#category}{\startitemgroup[#category]}{\startitemgroup[\v!itemize]}% \starthead{#head}#body\stophead \stopitemgroup} \setuvalue{\e!start\v!item}% {\startitemgroup[\v!itemize]% \startitemgroupitem \setuvalue{\e!stop\v!item}{\stopitemgroupitem\stopitemgroup}} % \def\sym#text% % {\noindent % \begingroup % \setbox\scratchbox\hbox{\settrialtypesetting#text}% % \setbox\scratchbox\hbox\ifdim\wd\scratchbox<1em to 1.5\else spread 1\fi em{#text\hfil}% % \normalexpanded{\box\scratchbox\endgroup\hangindent\the\wd\scratchbox}% % \ignorespaces} %D End of plugin. \setupitemgroup [\c!margin=\zeropoint, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, \c!indentnext=\v!yes, \c!width=1.5em, \c!factor=0, %\c!distance=.5em, % is now: \c!step=.5em, % deals with broad \c!distance=\zeropoint, %\c!align=\v!normal, % definitely not \v!normal ! %\c!symalign=, %\c!color=, %\c!indenting=, % untouched if empty %\c!style=, \c!marstyle=\v!type, %\c!symstyle=, %\c!headstyle=, %\c!marcolor=, %\c!symcolor=, %\c!headcolor=, %\c!beforehead=, \c!symcolor=\itemgroupparameter\c!color, % new per 2012.01.17 \c!symstyle=\itemgroupparameter\c!style, % new per 2012.01.17 \c!afterhead=\blank, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, %\c!stopper=., \c!placestopper=\v!yes, \c!stopper=., %\c!inner=, \c!n=2, \c!items=4, \c!levels=10, \c!lefttext=(, \c!righttext=), \c!start=1, \c!criterium=\v!all, % permits 0 and negative numbers %\c!option=, \c!textdistance=\v!space, % none big medium small \c!command=\strc_itemgroups_default_command, \c!indenting=\v!next, %\c!alignsymbol=v!no, \c!symbol=\currentitemlevel, \c!prefix=\v!no, %\c!prefixstopper=., %\c!prefixseparatorset=, %\c!prefixconversion=, %\c!prefixconversionset=, %\c!prefixset=, %\c!prefixsegments=1:100, \c!prefixconnector=., \c!numberseparatorset=, \c!numberconversionset=, \c!numberstopper=., \c!numbersegments=1] \defineitemgroup [\v!itemize] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-chi.mkii0000644000175000017500000004411211754241457024242 0ustar norbertnorbert%D \module %D [ file=lang-chi, %D version=2002.06.25, % 1998.10.10, %D title=\CONTEXT\ Language Macros, %D subtitle=Chinese, %D author={Hans Hagen \& Wang Lei}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Chinese} %D This module is coded using the \UNICODE\ support built in %D \CONTEXT. Therefore, \type {\uchar} is used instead of latin %D characters. \unprotect \definesystemconstant {chinese} \definesystemconstant {cn} \installlanguage [\s!cn] [\c!leftsentence=\cnencoding\cnleftsentence, \c!rightsentence=\cnencoding\cnrightsentence, \c!leftsubsentence=\cnencoding\cnleftsubsentence, \c!rightsubsentence=\cnencoding\cnrightsubsentence, \c!leftquote=\cnencoding\cnupperleftsinglequote, \c!rightquote=\cnencoding\cnupperrightsinglequote, \c!leftquotation=\cnencoding\cnupperleftdoublequote, \c!rightquotation=\cnencoding\cnupperrightdoublequote, \c!date={\v!year,\cnyear,\ ,\v!month,\v!day,\cnday}] \setupheadtext [\s!cn] [\v!content={\cnencoding\cnencodedcontents}] \setupheadtext [\s!cn] [\v!tables={\cnencoding\cnencodedtables}] \setupheadtext [\s!cn] [\v!figures={\cnencoding\cnencodedfigures}] \setupheadtext [\s!cn] [\v!graphics={\cnencoding\cnencodedgraphics}]% RG & XJF \setupheadtext [\s!cn] [\v!intermezzi={\cnencoding\cnencodedintermezzo}]% RG & XJF \setupheadtext [\s!cn] [\v!index={\cnencoding\cnencodedindex}] \setupheadtext [\s!cn] [\v!abbreviations={\cnencoding\cnencodedabbreviations}] \setupheadtext [\s!cn] [\v!logos={\cnencoding\cnencodedlogos}] \setupheadtext [\s!cn] [\v!units={\cnencoding\cnencodedunits}] \setuplabeltext [\s!cn] [\v!table={\cnencoding\cnencodedtable}] \setuplabeltext [\s!cn] [\v!figure={\cnencoding\cnencodedfigure}] \setuplabeltext [\s!cn] [\v!intermezzo={\cnencoding\cnencodedintermezzo}]% RG & XJF \setuplabeltext [\s!cn] [\v!graphic={\cnencoding\cnencodedillustration}]% RG & XJF \setuplabeltext [\s!cn] [\v!appendix={\cnencoding\cnencodedappendix}]% RG \setuplabeltext [\s!cn] [\v!part={\cnencoding\cnencodedintro,\cnencoding\cnencodedpart}] \setuplabeltext [\s!cn] [\v!chapter={\cnencoding\cnencodedintro,\cnencoding\cnencodedchapter}] \setuplabeltext [\s!cn] [\v!section={\cnencoding\cnencodedintro,\cnencoding\cnencodedsection}] \setuplabeltext [\s!cn] [\v!line={\cnencoding\cnencodedline}]% RG & XJF \setuplabeltext [\s!cn] [\v!lines={\cnencoding\cnencodedline}]% RG & XJF \setuplabeltext [\s!cn] [\v!subsection=] \setuplabeltext [\s!cn] [\v!subsubsection=] \setuplabeltext [\s!cn] [\v!subsubsubsection=] %D From this definition one can deduce that language, input %D encoding, font encoding, and glyph meaning form a pretty %D complex four dimensional space. \startlanguagespecifics[\s!cn] \setuplabeltext [\s!cn] [\v!january=\cnencoding\cnencodedjanuary ] \setuplabeltext [\s!cn] [\v!february=\cnencoding\cnencodedfebrary ] \setuplabeltext [\s!cn] [\v!march=\cnencoding\cnencodedmarch ] \setuplabeltext [\s!cn] [\v!april=\cnencoding\cnencodedapril ] \setuplabeltext [\s!cn] [\v!may=\cnencoding\cnencodedmay ] \setuplabeltext [\s!cn] [\v!june=\cnencoding\cnencodedjune ] \setuplabeltext [\s!cn] [\v!july=\cnencoding\cnencodedjuly ] \setuplabeltext [\s!cn] [\v!august=\cnencoding\cnencodedaugust ] \setuplabeltext [\s!cn] [\v!september=\cnencoding\cnencodedseptember] \setuplabeltext [\s!cn] [\v!october=\cnencoding\cnencodedoctober ] \setuplabeltext [\s!cn] [\v!november=\cnencoding\cnencodednovember ] \setuplabeltext [\s!cn] [\v!december=\cnencoding\cnencodeddecember ] \setuplabeltext [\s!cn] [\v!sunday=\cnencoding\cnencodedsunday ] \setuplabeltext [\s!cn] [\v!monday=\cnencoding\cnencodedmonday ] \setuplabeltext [\s!cn] [\v!tuesday=\cnencoding\cnencodedtuesday ] \setuplabeltext [\s!cn] [\v!wednesday=\cnencoding\cnencodedwednesday] \setuplabeltext [\s!cn] [\v!thursday=\cnencoding\cnencodedthursday ] \setuplabeltext [\s!cn] [\v!friday=\cnencoding\cnencodedfriday ] \setuplabeltext [\s!cn] [\v!saturday=\cnencoding\cnencodedsaturday ] \stoplanguagespecifics %D One can specify a split labeltext, as demonstrated in %D the definition of the \type {part} label. Unfortunately %D the glyphs of both part depend on the encoding. Therefore, %D we have an encoding section here. \unexpanded\def\cnencoding{\enableencoding[\chineseencoding]} % ugly and temporary \startencoding[cjk-uni] \definecommand cnleftsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand cnrightsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand cnleftsubsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand cnrightsubsentence {\uchar{32}{20}\uchar{32}{20}} \definecommand cnupperleftsinglequote {\uchar{32}{24}} \definecommand cnupperrightsinglequote {\uchar{32}{25}} \definecommand cnupperleftdoublequote {\uchar{32}{28}} \definecommand cnupperrightdoublequote {\uchar{32}{29}} \definecommand cnupperleftsinglequote-v {\uchar{48}{12}} \definecommand cnupperrightsinglequote-v {\uchar{48}{13}} \definecommand cnupperleftdoublequote-v {\uchar{48}{14}} \definecommand cnupperrightdoublequote-v {\uchar{48}{15}} \definecommand cnencodedcontents {\uchar{118}{238}\uchar{95}{85}} \definecommand cnencodedtables {\uchar{136}{104}\uchar{104}{60}} \definecommand cnencodedfigures {\uchar{86}{254}\uchar{95}{98}} \definecommand cnencodedindex {\uchar{125}{34}\uchar{95}{21}} \definecommand cnencodedabbreviations {\uchar{127}{41}\uchar{117}{101}\uchar{139}{237}} \definecommand cnencodedlogos {\uchar{95}{189}\uchar{141}{44}} \definecommand cnencodedunits {\uchar{139}{161}\uchar{145}{207}\uchar{83}{85}\uchar{79}{77}} \definecommand cnencodedtable {\uchar{136}{104}} \definecommand cnencodedfigure {\uchar{86}{254}} \definecommand cnencodedintro {\uchar{123}{44}} \definecommand cnencodedpart {\uchar{144}{232}\uchar{82}{6}} \definecommand cnencodedchapter {\uchar{122}{224}} \definecommand cnencodedsection {\uchar{130}{130}} \definecommand cnencodedjanuary {\uchar{78}{0}\uchar{103}{8}} \definecommand cnencodedfebrary {\uchar{78}{140}\uchar{103}{8}} \definecommand cnencodedmarch {\uchar{78}{9}\uchar{103}{8}} \definecommand cnencodedapril {\uchar{86}{219}\uchar{103}{8}} \definecommand cnencodedmay {\uchar{78}{148}\uchar{103}{8}} \definecommand cnencodedjune {\uchar{81}{109}\uchar{103}{8}} \definecommand cnencodedjuly {\uchar{78}{3}\uchar{103}{8}} \definecommand cnencodedaugust {\uchar{81}{107}\uchar{103}{8}} \definecommand cnencodedseptember {\uchar{78}{93}\uchar{103}{8}} \definecommand cnencodedoctober {\uchar{83}{65}\uchar{103}{8}} \definecommand cnencodednovember {\uchar{83}{65}\uchar{78}{0}\uchar{103}{8}} \definecommand cnencodeddecember {\uchar{83}{65}\uchar{78}{140}\uchar{103}{8}} \definecommand cnencodedsunday {\uchar{102}{31}\uchar{103}{31}\uchar{101}{229}} \definecommand cnencodedmonday {\uchar{102}{31}\uchar{103}{31}\uchar{78}{0}} \definecommand cnencodedtuesday {\uchar{102}{31}\uchar{103}{31}\uchar{78}{140}} \definecommand cnencodedwednesday {\uchar{102}{31}\uchar{103}{31}\uchar{78}{9}} \definecommand cnencodedthursday {\uchar{102}{31}\uchar{103}{31}\uchar{86}{219}} \definecommand cnencodedfriday {\uchar{102}{31}\uchar{103}{31}\uchar{78}{148}} \definecommand cnencodedsaturday {\uchar{102}{31}\uchar{103}{31}\uchar{81}{109}} % RG & XJF \definecommand cnencodedgraphics {\uchar{86}{254}} \definecommand cnencodedintermezzo {\uchar{210}{99}\uchar{242}{102}} \definecommand cnencodedillustration {\uchar{99}{210}\uchar{86}{254}} \definecommand cnencodedappendix {\uchar{150}{68}\uchar{95}{85}} \definecommand cnencodedline {\uchar{136}{76}} % Tobias Burnus & XJF \definecommand cnyear {\uchar{94}{116}} \definecommand cnmonth {\uchar{103}{8}} \definecommand cnday {\uchar{101}{229}} \stopencoding \startencoding[gbk] \definecommand cnleftsentence {\uchar{161}{170}\uchar{161}{170}} \definecommand cnrightsentence {\uchar{161}{170}\uchar{161}{170}} \definecommand cnleftsubsentence {\uchar{161}{170}\uchar{161}{170}} \definecommand cnrightsubsentence {\uchar{161}{170}\uchar{161}{170}} \definecommand cnupperleftsinglequote {\uchar{161}{174}} \definecommand cnupperrightsinglequote {\uchar{161}{175}} \definecommand cnupperleftdoublequote {\uchar{161}{176}} \definecommand cnupperrightdoublequote {\uchar{161}{177}} \definecommand cnupperleftsinglequote-v {\uchar{161}{184}} \definecommand cnupperrightsinglequote-v {\uchar{161}{185}} \definecommand cnupperleftdoublequote-v {\uchar{161}{186}} \definecommand cnupperrightdoublequote-v {\uchar{161}{187}} \definecommand cnencodedcontents {\uchar{196}{191}\uchar{194}{188}} \definecommand cnencodedtables {\uchar{177}{237}\uchar{184}{241}} \definecommand cnencodedfigures {\uchar{205}{188}\uchar{208}{206}} \definecommand cnencodedindex {\uchar{203}{247}\uchar{210}{253}} \definecommand cnencodedabbreviations {\uchar{203}{245}\uchar{194}{212}\uchar{211}{239}} \definecommand cnencodedlogos {\uchar{187}{213}\uchar{177}{225}} \definecommand cnencodedunits {\uchar{188}{198}\uchar{193}{191}\uchar{181}{165}\uchar{206}{187}} \definecommand cnencodedtable {\uchar{177}{237}} \definecommand cnencodedfigure {\uchar{205}{188}} \definecommand cnencodedintro {\uchar{181}{218}} \definecommand cnencodedpart {\uchar{178}{191}\uchar{183}{214}} \definecommand cnencodedchapter {\uchar{213}{194}} \definecommand cnencodedsection {\uchar{189}{218}} \definecommand cnencodedjanuary {\uchar{210}{187}\uchar{212}{194}} \definecommand cnencodedfebrary {\uchar{182}{254}\uchar{212}{194}} \definecommand cnencodedmarch {\uchar{200}{253}\uchar{212}{194}} \definecommand cnencodedapril {\uchar{203}{196}\uchar{212}{194}} \definecommand cnencodedmay {\uchar{206}{229}\uchar{212}{194}} \definecommand cnencodedjune {\uchar{193}{249}\uchar{212}{194}} \definecommand cnencodedjuly {\uchar{198}{223}\uchar{212}{194}} \definecommand cnencodedaugust {\uchar{176}{203}\uchar{212}{194}} \definecommand cnencodedseptember {\uchar{190}{197}\uchar{212}{194}} \definecommand cnencodedoctober {\uchar{202}{174}\uchar{212}{194}} \definecommand cnencodednovember {\uchar{202}{174}\uchar{210}{187}\uchar{212}{194}} \definecommand cnencodeddecember {\uchar{202}{174}\uchar{182}{254}\uchar{212}{194}} \definecommand cnencodedsunday {\uchar{208}{199}\uchar{198}{218}\uchar{200}{213}} \definecommand cnencodedmonday {\uchar{208}{199}\uchar{198}{218}\uchar{210}{187}} \definecommand cnencodedtuesday {\uchar{208}{199}\uchar{198}{218}\uchar{182}{254}} \definecommand cnencodedwednesday {\uchar{208}{199}\uchar{198}{218}\uchar{200}{253}} \definecommand cnencodedthursday {\uchar{208}{199}\uchar{198}{218}\uchar{203}{196}} \definecommand cnencodedfriday {\uchar{208}{199}\uchar{198}{218}\uchar{206}{229}} \definecommand cnencodedsaturday {\uchar{208}{199}\uchar{198}{218}\uchar{193}{249}} % RG & XJF \definecommand cnencodedgraphics {\uchar{205}{188}} \definecommand cnencodedintermezzo {\uchar{178}{229}\uchar{199}{250}} \definecommand cnencodedillustration {\uchar{178}{229}\uchar{205}{188}} \definecommand cnencodedappendix {\uchar{184}{189}\uchar{194}{188}} \definecommand cnencodedline {\uchar{208}{208}} % Tobias Burnus & XJF \definecommand cnyear {\uchar{196}{234}} \definecommand cnmonth {\uchar{212}{194}} \definecommand cnday {\uchar{200}{213}} \stopencoding \startencoding[big5] \definecommand cnleftsentence {\uchar{162}{119}\uchar{162}{119}} \definecommand cnrightsentence {\uchar{162}{119}\uchar{162}{119}} \definecommand cnleftsubsentence {\uchar{162}{119}\uchar{162}{119}} \definecommand cnrightsubsentence {\uchar{162}{119}\uchar{162}{119}} \definecommand cnupperleftsinglequote {\uchar{161}{165}} \definecommand cnupperrightsinglequote {\uchar{161}{166}} \definecommand cnupperleftdoublequote {\uchar{161}{167}} \definecommand cnupperrightdoublequote {\uchar{161}{168}} \definecommand cnupperleftsinglequote-v {\uchar{161}{117}} \definecommand cnupperrightsinglequote-v {\uchar{161}{118}} \definecommand cnupperleftdoublequote-v {\uchar{161}{121}} \definecommand cnupperrightdoublequote-v {\uchar{161}{122}} \definecommand cnencodecontents {\uchar{165}{216}\uchar{191}{253}} \definecommand cnencodetables {\uchar{170}{237}\uchar{174}{230}} \definecommand cnencodefigures {\uchar{185}{207}\uchar{167}{206}} \definecommand cnencodeindex {\uchar{175}{193}\uchar{174}{222}} \definecommand cnencodeabbreviations {\uchar{191}{89}\uchar{178}{164}\uchar{187}{121}} \definecommand cnencodelogos {\uchar{192}{178}\uchar{188}{208}} \definecommand cnencodeunits {\uchar{173}{112}\uchar{182}{113}\uchar{179}{230}\uchar{166}{236}} \definecommand cnencodetable {\uchar{170}{237}} \definecommand cnencodefigure {\uchar{185}{207}} \definecommand cnencodedintro {\uchar{178}{196}} \definecommand cnencodedpart {\uchar{179}{161}\uchar{164}{192}} \definecommand cnencodedchapter {\uchar{179}{185}} \definecommand cnencodedsection {\uchar{184} {96}} \definecommand cnencodedjanuary {\uchar{164} {64}\uchar{164}{235}} \definecommand cnencodedfebrary {\uchar{164} {71}\uchar{164}{235}} \definecommand cnencodedmarch {\uchar{164} {84}\uchar{164}{235}} \definecommand cnencodedapril {\uchar{165}{124}\uchar{164}{235}} \definecommand cnencodedmay {\uchar{164}{173}\uchar{164}{235}} \definecommand cnencodedjune {\uchar{164}{187}\uchar{164}{235}} \definecommand cnencodedjuly {\uchar{164} {67}\uchar{164}{235}} \definecommand cnencodedaugust {\uchar{164} {75}\uchar{164}{235}} \definecommand cnencodedseptember {\uchar{164} {69}\uchar{164}{235}} \definecommand cnencodedoctober {\uchar{164} {81}\uchar{164}{235}} \definecommand cnencodednovember {\uchar{164} {81}\uchar{164} {64}\uchar{164}{235}} \definecommand cnencodeddecember {\uchar{164} {81}\uchar{164} {71}\uchar{164}{235}} \definecommand cnencodedsunday {\uchar{172} {80}\uchar{180}{193}\uchar{164}{233}} \definecommand cnencodedmonday {\uchar{172} {80}\uchar{180}{193}\uchar{164} {64}} \definecommand cnencodedtuesday {\uchar{172} {80}\uchar{180}{193}\uchar{164} {71}} \definecommand cnencodedwednesday {\uchar{172} {80}\uchar{180}{193}\uchar{164} {84}} \definecommand cnencodedthursday {\uchar{172} {80}\uchar{180}{193}\uchar{165}{124}} \definecommand cnencodedfriday {\uchar{172} {80}\uchar{180}{193}\uchar{164}{173}} \definecommand cnencodedsaturday {\uchar{172} {80}\uchar{180}{193}\uchar{164}{187}} % Tobias Burnus &\XJF \definecommand cnyear {\uchar{166}{126}} \definecommand cnmonth {\uchar{164}{235}} \definecommand cnday {\uchar{164}{233}} % Traditional Chinese characters (only where they differ to the % simplified ones) for lang-chi.tex and font-chi.tex. % \startencoding[cjk-uni] % \defineudigit 10000 132 44 % \defineudigit 100000000 81 4 % \definecommand cnencodedsection {\uchar{123}{192}} % \definecommand cnencodedfigure {\uchar{87}{22}} % \definecommand cnencodedunits {\uchar{138}{8}\uchar{145}{207}\uchar{85}{174}\uchar{79}{77}} % \definecommand cnencodedlogos {\uchar{95}{189}\uchar{140}{182}} % \definecommand cnencodedabbreviations {\uchar{126}{46}\uchar{117}{101}\uchar{138}{158}} % \definecommand cnencodedfigures {\uchar{87}{22}\uchar{95}{98}} % \definecommand cnencodedcontents {\uchar{118}{238}\uchar{147}{4}} % \stopencoding % \startencoding[gbk] % \defineudigit 10000 200 102 % \defineudigit 100000000 131 124 % \definecommand cnencodedsection {\uchar{185}{157}} % \definecommand cnencodedfigure {\uchar{136}{68}} % \definecommand cnencodedunits {\uchar{211}{139}\uchar{193}{191}\uchar{134}{206}\uchar{206}{187}} % \definecommand cnencodedlogos {\uchar{187}{213}\uchar{217}{72} % \definecommand cnencodedabbreviations {\uchar{191}{115}\uchar{194}{212}\uchar{213}{90}} % \definecommand cnencodedfigures {\uchar{136}{68}\uchar{208}{206}} % \definecommand cnencodedcontents {\uchar{196}{191}\uchar{228}{155}} % \stopencoding % \startencoding[big5] % \defineudigit 10000 184 85 % \defineudigit 100000000 187 245 % \definecommand cnencodedsection {\uchar{184}{96}} % \definecommand cnencodedfigure {\uchar{185}{207}} % \definecommand cnencodedunits {\uchar{173}{112}\uchar{182}{113}\uchar{179}{230}\uchar{166}{236}} % \definecommand cnencodedlogos {\uchar{192}{178}\uchar{182}{83}} % \definecommand cnencodedabbreviations {\uchar{193}{89}\uchar{178}{164}\uchar{187}{121}} % \definecommand cnencodedfigures {\uchar{185}{207}\uchar{167}{206}} % \definecommand cnencodedcontents {\uchar{165}{216}\uchar{191}{253}} % \stopencoding \stopencoding \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/m-pdfsnc.mkii0000644000175000017500000001344311754241457024272 0ustar norbertnorbert%D \module %D [ file=m-pdfsnc, %D version=2003.12.23, %D title=\CONTEXT\ Modules, %D subtitle=Editor Synchronization, %D author={Hans Hagen \& Ton Otten}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % \enablemode[demo] % This file is a variation of the file pdfsync4context.tex that ships % with the pdfsync package (used by iTeXMac and TeXShop) by Piero % D'Ancona and Jrme Laurens. I made the macros a bit more efficient % and added some basic tracing options as well as a few more options. % I made this one while playing a bit with the Mac and TeX). Maybe I'll % add a bit of support to the kernel in in order to get rid of redundant % markers. Also, this had better be rewritten in a bit less \pdf % dependent way so that it can also be supported by dvipdfmx. I could % write a generic file as well, but since there is already support for % other packages I'll not do that (now). % compatible commands: % % \pdfsyncstart \pdfsyncstop \pdfsync % % extra commands: % % \enablepdfsync \disablepdfsync \pdfsynctext \pdfsyncnode \pdfsynctracemode \ifx\pdfoutput\undefined \donefalse \else\ifcase\pdfoutput \donefalse \else\ifx\pdfsavepos\undefined \donefalse \else \donetrue \fi\fi\fi \chardef \pdfsyncstate \zerocount \chardef \pdfsynctracemode \zerocount \ifdone \writestatus{pdfsync}{loading and enabling synchronization support} \else \writestatus{pdfsync}{synchronization is only available with pdftex} \let \pdfsyncstart \relax % brr, not per se symmetrically used, so \let \pdfsyncstop \relax % enable and disable are better names \let \pdfsync \relax \let \pdfsynctext \gobbleoneargument \let \pdfsyncnode \gobbleoneargument \let \enablepdfsync \pdfsyncstart \let \disablepdfsync \pdfsyncstop \expandafter\endinput \fi \unprotect % not really needed \newcount \pdfsynccounter \newwrite \pdfsyncwrite \def\pdfsyncstart{\chardef\pdfsyncstate\plusone} \let\enablepdfsync \pdfsyncstart \def\pdfsyncstop {\chardef\pdfsyncstate\zerocount} \let\disablepdfsync\pdfsyncstop \def\dostartpdfsync {\immediate\openout\pdfsyncwrite\jobname.pdfsync \immediate\write\pdfsyncwrite{\jobname}% \immediate\write\pdfsyncwrite{version 0}} \def\dostoppdfsync {\immediate\closeout\pdfsyncwrite} \def\doregisterpdfsyncpage {\immediate\write\pdfsyncwrite{s\space\realfolio}} \def\dopdfsyncopenfile {\immediate\write\pdfsyncwrite{(\space\readfilename}} \def\dopdfsyncclosefile {\immediate\write\pdfsyncwrite{)}} \def\doregisterpdfsyncnode#1% {\ifcase\pdfsyncstate\else \pdfsavepos \immediate\write\pdfsyncwrite{l\space\the\pdfsynccounter\space\the\inputlineno}% \expanded{\write\pdfsyncwrite{p\ifnum#1=\plusone*\fi\space\the\pdfsynccounter\space\noexpand\the\pdflastxpos\space\noexpand\the\pdflastypos}}% \global\advance\pdfsynccounter\plusone \fi} \let\pdfsynctracer\gobbleoneargument \def\pdfsync {\doregisterpdfsyncnode\plusone \pdfsynctracer*} \def\pdfsyncnode{\doregisterpdfsyncnode\zerocount\pdfsynctracer} \def\pdfsynctext{\doregisterpdfsyncnode\plusone \pdfsynctracer} \appendtoks \dostartpdfsync \to \everystarttext %appendtoks \dostoppdfsync \to \everystoptext \appendtoks \doregisterpdfsyncpage \to \everyshipout \appendtoks \dopdfsyncopenfile \to \everybeforereadfile \appendtoks \dopdfsyncclosefile \to \everyafterreadfile \appendtoks \enablepdfsync \to \everystarttext \appendtoks \disablepdfsync \to \everypagebody % beware, adding nodes this way will interfere with the typesetting \appendtoks \pdfsyncnode p\to \everypar \appendtoks \pdfsyncnode m\to \everymath \appendtoks \pdfsyncnode h\to \everyhbox % just for fun \def\pdfsynctracer#1% {\ifcase\pdfsynctracemode\else \ifcase\pdfsyncstate\else \begingroup \forgetall \disablepdfsync \ifcase\pdfsynctracemode\or % could be done more efficient, box around ifcase \setbox\scratchbox\hbox to \zeropoint{\hss\infofont#1\hss}% 1 \else \setbox\scratchbox\hbox to \zeropoint{\hss\traceboxplacementtrue\boxcursor\hss}% 2/3/4 \fi \smashbox\scratchbox\box\scratchbox \ifcase\pdfsynctracemode\or\or\or \setbox\scratchbox\hbox to \zeropoint{\hss\raise1.25ex\hbox{\infofont#1}\hss}% 3 \smashbox\scratchbox\box\scratchbox \or \setbox\scratchbox\hbox to \zeropoint{\hss\lower1.25ex\hbox{\infofont#1}\hss}% 4 \smashbox\scratchbox\box\scratchbox \fi \endgroup \fi \fi} % \def\pdfsynctracer#1% more efficient but unreadable % {\ifcase\pdfsynctracemode\else % \ifcase\pdfsyncstate\else % \begingroup % \forgetall % \disablepdfsync % \setbox\scratchbox\hbox to \zeropoint % {\hss % \ifcase\pdfsynctracemode\or % \infofont#1% 1 % \else % \traceboxplacementtrue\boxcursor% 2/3/4 % \fi % \hss}% % \smashbox\scratchbox\box\scratchbox % \setbox\scratchbox\hbox to \zeropoint % {\hss % \ifcase\pdfsynctracemode\or\or\or % \raise1.25ex\hbox{\infofont#1}% 3 % \or % \lower1.25ex\hbox{\infofont#1}% 4 % \fi % \hss}% % \smashbox\scratchbox\box\scratchbox % \endgroup % \fi % \fi} \protect \doifnotmode{demo}{\endinput} \chardef\pdfsynctracemode=3 \starttext \chapter{Test} \processfile{tufte} \startitemize \item first \item second \stopitemize \processfile{tufte} \startlines some local \pdfsync sync and \pdfsynctext{here}a marked point some local \pdfsync sync and \pdfsyncnode{here}a marked point \stoplines \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/context-version.pdf0000644000175000017500000001001712161703335025533 0ustar norbertnorbert%PDF-1.6 % 17 0 obj <> stream x^}WA7 +x,  SűZUiPҌj]+-4"F֚,7JT.ot7KS/}Ǐ.~I~oBׅ?K&b;ZVd|:0}Tߐk (ĩi!sKeaI4j wi+]2w#ϨMHIRX;Kܱ4=xӱy Cz RVzktU>b 䝃w" y!D䝉S1';s%1w2w2npdLw2q+?F_V*hL ^ܝV?p/UG 4厺YQA/ԝPM&@_ы!DG 0YVxrYiAks@n "u9N}p\Y*y"\S0޽s-lu1'A#m$挫# Z$?9F:!ރ@戀[|Y2g{wxF{1DǘwZ'{9LK!(u^HH#]xKk5[1dw%{;}Ah< F iOq*S+l[/-|/K/ A{ܛFl=ܹ`t:Fo1,ø}:atu?@LQ!:L)\} tQmm {tۥ2;Gsd4)C0c>6 4t &b~B?HK^bא9uɂS {荷b׋8|?J;~P^:n'P&~ G)˝7ĞjgzBĉ`bf $N> stream application/pdfs-versions-version2013.05.28 00:34www.pragma-ade.com2013.05.28 00:34s-version.2013-05-28T00:34:04-22:00This is LuaTeX, Version beta-0.77.0-2013052516 (TeX Live 2013/dev) (TeX Live 2013/dev) kpathsea version 6.1.1dev2013-05-28T00:34:04-22:00ConTeXt - 2013.05.28 00:342013-05-28T00:34:04-22:002013-05-28T00:34:04-22:00LuaTeX-0.77.0Falseuuid:0a57e1a3-4118-9fc2-131d-049d06919137uuid:8417a5eb-4b87-9615-06c7-e6bb35bddc7f endstream endobj 19 0 obj <> stream x^RMo@+"ջ/@CHm%N X56 i}ڸX7oFEĤBR#4kҊ?& /?t*G+Wfo,[45彭Sm֦\Z3ZB'q>yUqLkbI&Uv *slhr`\-]o%5J99Z91;4&/m(-h GejI>,Ƥ Man5M$N nH.h6C D@1k4\L4+C=b<ɵ&OxrceԊmy낆w.ǡG &m ,+nld6FuY@WXp4wbe:|2xSx'Y۞uYuc ]/Length 64 /Filter/FlateDecode>> stream x^ qE<`X<@AEb ;hС[49:{a endstream endobj startxref 3813 %%EOF context-2013.05.28.20130704/texmf-dist/tex/context/base/l-lpeg.lua0000644000175000017500000006321412130411274023555 0ustar norbertnorbertif not modules then modules = { } end modules ['l-lpeg'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- a new lpeg fails on a #(1-P(":")) test and really needs a + P(-1) -- move utf -> l-unicode -- move string -> l-string or keep it here lpeg = require("lpeg") -- tracing (only used when we encounter a problem in integration of lpeg in luatex) -- some code will move to unicode and string -- local lpmatch = lpeg.match -- local lpprint = lpeg.print -- local lpp = lpeg.P -- local lpr = lpeg.R -- local lps = lpeg.S -- local lpc = lpeg.C -- local lpb = lpeg.B -- local lpv = lpeg.V -- local lpcf = lpeg.Cf -- local lpcb = lpeg.Cb -- local lpcg = lpeg.Cg -- local lpct = lpeg.Ct -- local lpcs = lpeg.Cs -- local lpcc = lpeg.Cc -- local lpcmt = lpeg.Cmt -- local lpcarg = lpeg.Carg -- function lpeg.match(l,...) print("LPEG MATCH") lpprint(l) return lpmatch(l,...) end -- function lpeg.P (l) local p = lpp (l) print("LPEG P =") lpprint(l) return p end -- function lpeg.R (l) local p = lpr (l) print("LPEG R =") lpprint(l) return p end -- function lpeg.S (l) local p = lps (l) print("LPEG S =") lpprint(l) return p end -- function lpeg.C (l) local p = lpc (l) print("LPEG C =") lpprint(l) return p end -- function lpeg.B (l) local p = lpb (l) print("LPEG B =") lpprint(l) return p end -- function lpeg.V (l) local p = lpv (l) print("LPEG V =") lpprint(l) return p end -- function lpeg.Cf (l) local p = lpcf (l) print("LPEG Cf =") lpprint(l) return p end -- function lpeg.Cb (l) local p = lpcb (l) print("LPEG Cb =") lpprint(l) return p end -- function lpeg.Cg (l) local p = lpcg (l) print("LPEG Cg =") lpprint(l) return p end -- function lpeg.Ct (l) local p = lpct (l) print("LPEG Ct =") lpprint(l) return p end -- function lpeg.Cs (l) local p = lpcs (l) print("LPEG Cs =") lpprint(l) return p end -- function lpeg.Cc (l) local p = lpcc (l) print("LPEG Cc =") lpprint(l) return p end -- function lpeg.Cmt (l) local p = lpcmt (l) print("LPEG Cmt =") lpprint(l) return p end -- function lpeg.Carg (l) local p = lpcarg(l) print("LPEG Carg =") lpprint(l) return p end local type, next, tostring = type, next, tostring local byte, char, gmatch, format = string.byte, string.char, string.gmatch, string.format ----- mod, div = math.mod, math.div local floor = math.floor local P, R, S, V, Ct, C, Cs, Cc, Cp, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Cp, lpeg.Cmt local lpegtype, lpegmatch, lpegprint = lpeg.type, lpeg.match, lpeg.print -- let's start with an inspector: setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end) -- Beware, we predefine a bunch of patterns here and one reason for doing so -- is that we get consistent behaviour in some of the visualizers. lpeg.patterns = lpeg.patterns or { } -- so that we can share local patterns = lpeg.patterns local anything = P(1) local endofstring = P(-1) local alwaysmatched = P(true) patterns.anything = anything patterns.endofstring = endofstring patterns.beginofstring = alwaysmatched patterns.alwaysmatched = alwaysmatched local digit, sign = R('09'), S('+-') local cr, lf, crlf = P("\r"), P("\n"), P("\r\n") local newline = crlf + S("\r\n") -- cr + lf local escaped = P("\\") * anything local squote = P("'") local dquote = P('"') local space = P(" ") local utfbom_32_be = P('\000\000\254\255') local utfbom_32_le = P('\255\254\000\000') local utfbom_16_be = P('\255\254') local utfbom_16_le = P('\254\255') local utfbom_8 = P('\239\187\191') local utfbom = utfbom_32_be + utfbom_32_le + utfbom_16_be + utfbom_16_le + utfbom_8 local utftype = utfbom_32_be * Cc("utf-32-be") + utfbom_32_le * Cc("utf-32-le") + utfbom_16_be * Cc("utf-16-be") + utfbom_16_le * Cc("utf-16-le") + utfbom_8 * Cc("utf-8") + alwaysmatched * Cc("utf-8") -- assume utf8 local utfoffset = utfbom_32_be * Cc(4) + utfbom_32_le * Cc(4) + utfbom_16_be * Cc(2) + utfbom_16_le * Cc(2) + utfbom_8 * Cc(3) + Cc(0) local utf8next = R("\128\191") patterns.utf8one = R("\000\127") patterns.utf8two = R("\194\223") * utf8next patterns.utf8three = R("\224\239") * utf8next * utf8next patterns.utf8four = R("\240\244") * utf8next * utf8next * utf8next patterns.utfbom = utfbom patterns.utftype = utftype patterns.utfoffset = utfoffset local utf8char = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four local validutf8char = utf8char^0 * endofstring * Cc(true) + Cc(false) local utf8character = P(1) * R("\128\191")^0 -- unchecked but fast patterns.utf8 = utf8char patterns.utf8char = utf8char patterns.utf8character = utf8character -- this one can be used in most cases so we might use that one patterns.validutf8 = validutf8char patterns.validutf8char = validutf8char local eol = S("\n\r") local spacer = S(" \t\f\v") -- + char(0xc2, 0xa0) if we want utf (cf mail roberto) local whitespace = eol + spacer local nonspacer = 1 - spacer local nonwhitespace = 1 - whitespace patterns.eol = eol patterns.spacer = spacer patterns.whitespace = whitespace patterns.nonspacer = nonspacer patterns.nonwhitespace = nonwhitespace local stripper = spacer^0 * C((spacer^0 * nonspacer^1)^0) -- from example by roberto ----- collapser = Cs(spacer^0/"" * ((spacer^1 * P(-1) / "") + (spacer^1/" ") + P(1))^0) local collapser = Cs(spacer^0/"" * nonspacer^0 * ((spacer^0/" " * nonspacer^1)^0)) patterns.stripper = stripper patterns.collapser = collapser patterns.digit = digit patterns.sign = sign patterns.cardinal = sign^0 * digit^1 patterns.integer = sign^0 * digit^1 patterns.unsigned = digit^0 * P('.') * digit^1 patterns.float = sign^0 * patterns.unsigned patterns.cunsigned = digit^0 * P(',') * digit^1 patterns.cfloat = sign^0 * patterns.cunsigned patterns.number = patterns.float + patterns.integer patterns.cnumber = patterns.cfloat + patterns.integer patterns.oct = P("0") * R("07")^1 patterns.octal = patterns.oct patterns.HEX = P("0x") * R("09","AF")^1 patterns.hex = P("0x") * R("09","af")^1 patterns.hexadecimal = P("0x") * R("09","AF","af")^1 patterns.lowercase = R("az") patterns.uppercase = R("AZ") patterns.letter = patterns.lowercase + patterns.uppercase patterns.space = space patterns.tab = P("\t") patterns.spaceortab = patterns.space + patterns.tab patterns.newline = newline patterns.emptyline = newline^1 patterns.equal = P("=") patterns.comma = P(",") patterns.commaspacer = P(",") * spacer^0 patterns.period = P(".") patterns.colon = P(":") patterns.semicolon = P(";") patterns.underscore = P("_") patterns.escaped = escaped patterns.squote = squote patterns.dquote = dquote patterns.nosquote = (escaped + (1-squote))^0 patterns.nodquote = (escaped + (1-dquote))^0 patterns.unsingle = (squote/"") * patterns.nosquote * (squote/"") -- will change to C in the middle patterns.undouble = (dquote/"") * patterns.nodquote * (dquote/"") -- will change to C in the middle patterns.unquoted = patterns.undouble + patterns.unsingle -- more often undouble patterns.unspacer = ((patterns.spacer^1)/"")^0 patterns.singlequoted = squote * patterns.nosquote * squote patterns.doublequoted = dquote * patterns.nodquote * dquote patterns.quoted = patterns.doublequoted + patterns.singlequoted patterns.propername = R("AZ","az","__") * R("09","AZ","az", "__")^0 * P(-1) patterns.somecontent = (anything - newline - space)^1 -- (utf8char - newline - space)^1 patterns.beginline = #(1-newline) patterns.longtostring = Cs(whitespace^0/"" * nonwhitespace^0 * ((whitespace^0/" " * (patterns.quoted + nonwhitespace)^1)^0)) local function anywhere(pattern) --slightly adapted from website return P { P(pattern) + 1 * V(1) } end lpeg.anywhere = anywhere function lpeg.instringchecker(p) p = anywhere(p) return function(str) return lpegmatch(p,str) and true or false end end function lpeg.splitter(pattern, action) return (((1-P(pattern))^1)/action+1)^0 end function lpeg.tsplitter(pattern, action) return Ct((((1-P(pattern))^1)/action+1)^0) end -- probleem: separator can be lpeg and that does not hash too well, but -- it's quite okay as the key is then not garbage collected local splitters_s, splitters_m, splitters_t = { }, { }, { } local function splitat(separator,single) local splitter = (single and splitters_s[separator]) or splitters_m[separator] if not splitter then separator = P(separator) local other = C((1 - separator)^0) if single then local any = anything splitter = other * (separator * C(any^0) + "") -- ? splitters_s[separator] = splitter else splitter = other * (separator * other)^0 splitters_m[separator] = splitter end end return splitter end local function tsplitat(separator) local splitter = splitters_t[separator] if not splitter then splitter = Ct(splitat(separator)) splitters_t[separator] = splitter end return splitter end lpeg.splitat = splitat lpeg.tsplitat = tsplitat function string.splitup(str,separator) if not separator then separator = "," end return lpegmatch(splitters_m[separator] or splitat(separator),str) end -- local p = splitat("->",false) print(lpegmatch(p,"oeps->what->more")) -- oeps what more -- local p = splitat("->",true) print(lpegmatch(p,"oeps->what->more")) -- oeps what->more -- local p = splitat("->",false) print(lpegmatch(p,"oeps")) -- oeps -- local p = splitat("->",true) print(lpegmatch(p,"oeps")) -- oeps local cache = { } function lpeg.split(separator,str) local c = cache[separator] if not c then c = tsplitat(separator) cache[separator] = c end return lpegmatch(c,str) end function string.split(str,separator) if separator then local c = cache[separator] if not c then c = tsplitat(separator) cache[separator] = c end return lpegmatch(c,str) else return { str } end end local spacing = patterns.spacer^0 * newline -- sort of strip local empty = spacing * Cc("") local nonempty = Cs((1-spacing)^1) * spacing^-1 local content = (empty + nonempty)^1 patterns.textline = content local linesplitter = tsplitat(newline) patterns.linesplitter = linesplitter function string.splitlines(str) return lpegmatch(linesplitter,str) end -- lpeg.splitters = cache -- no longer public local cache = { } function lpeg.checkedsplit(separator,str) local c = cache[separator] if not c then separator = P(separator) local other = C((1 - separator)^1) c = Ct(separator^0 * other * (separator^1 * other)^0) cache[separator] = c end return lpegmatch(c,str) end function string.checkedsplit(str,separator) local c = cache[separator] if not c then separator = P(separator) local other = C((1 - separator)^1) c = Ct(separator^0 * other * (separator^1 * other)^0) cache[separator] = c end return lpegmatch(c,str) end -- from roberto's site: local function f2(s) local c1, c2 = byte(s,1,2) return c1 * 64 + c2 - 12416 end local function f3(s) local c1, c2, c3 = byte(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end local function f4(s) local c1, c2, c3, c4 = byte(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end local utf8byte = patterns.utf8one/byte + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4 patterns.utf8byte = utf8byte --~ local str = " a b c d " --~ local s = lpeg.stripper(lpeg.R("az")) print("["..lpegmatch(s,str).."]") --~ local s = lpeg.keeper(lpeg.R("az")) print("["..lpegmatch(s,str).."]") --~ local s = lpeg.stripper("ab") print("["..lpegmatch(s,str).."]") --~ local s = lpeg.keeper("ab") print("["..lpegmatch(s,str).."]") local cache = { } function lpeg.stripper(str) if type(str) == "string" then local s = cache[str] if not s then s = Cs(((S(str)^1)/"" + 1)^0) cache[str] = s end return s else return Cs(((str^1)/"" + 1)^0) end end local cache = { } function lpeg.keeper(str) if type(str) == "string" then local s = cache[str] if not s then s = Cs((((1-S(str))^1)/"" + 1)^0) cache[str] = s end return s else return Cs((((1-str)^1)/"" + 1)^0) end end function lpeg.frontstripper(str) -- or pattern (yet undocumented) return (P(str) + P(true)) * Cs(anything^0) end function lpeg.endstripper(str) -- or pattern (yet undocumented) return Cs((1 - P(str) * endofstring)^0) end -- Just for fun I looked at the used bytecode and -- p = (p and p + pp) or pp gets one more (testset). -- todo: cache when string function lpeg.replacer(one,two,makefunction,isutf) -- in principle we should sort the keys local pattern local u = isutf and utf8char or 1 if type(one) == "table" then local no = #one local p = P(false) if no == 0 then for k, v in next, one do p = p + P(k) / v end pattern = Cs((p + u)^0) elseif no == 1 then local o = one[1] one, two = P(o[1]), o[2] -- pattern = Cs(((1-one)^1 + one/two)^0) pattern = Cs((one/two + u)^0) else for i=1,no do local o = one[i] p = p + P(o[1]) / o[2] end pattern = Cs((p + u)^0) end else pattern = Cs((P(one)/(two or "") + u)^0) end if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end function lpeg.finder(lst,makefunction) local pattern if type(lst) == "table" then pattern = P(false) if #lst == 0 then for k, v in next, lst do pattern = pattern + P(k) -- ignore key, so we can use a replacer table end else for i=1,#lst do pattern = pattern + P(lst[i]) end end else pattern = P(lst) end pattern = (1-pattern)^0 * pattern if makefunction then return function(str) return lpegmatch(pattern,str) end else return pattern end end -- print(lpeg.match(lpeg.replacer("e","a"),"test test")) -- print(lpeg.match(lpeg.replacer{{"e","a"}},"test test")) -- print(lpeg.match(lpeg.replacer({ e = "a", t = "x" }),"test test")) local splitters_f, splitters_s = { }, { } function lpeg.firstofsplit(separator) -- always return value local splitter = splitters_f[separator] if not splitter then separator = P(separator) splitter = C((1 - separator)^0) splitters_f[separator] = splitter end return splitter end function lpeg.secondofsplit(separator) -- nil if not split local splitter = splitters_s[separator] if not splitter then separator = P(separator) splitter = (1 - separator)^0 * separator * C(anything^0) splitters_s[separator] = splitter end return splitter end function lpeg.balancer(left,right) left, right = P(left), P(right) return P { left * ((1 - left - right) + V(1))^0 * right } end -- print(1,lpegmatch(lpeg.firstofsplit(":"),"bc:de")) -- print(2,lpegmatch(lpeg.firstofsplit(":"),":de")) -- empty -- print(3,lpegmatch(lpeg.firstofsplit(":"),"bc")) -- print(4,lpegmatch(lpeg.secondofsplit(":"),"bc:de")) -- print(5,lpegmatch(lpeg.secondofsplit(":"),"bc:")) -- empty -- print(6,lpegmatch(lpeg.secondofsplit(":",""),"bc")) -- print(7,lpegmatch(lpeg.secondofsplit(":"),"bc")) -- print(9,lpegmatch(lpeg.secondofsplit(":","123"),"bc")) -- -- slower: -- -- function lpeg.counter(pattern) -- local n, pattern = 0, (lpeg.P(pattern)/function() n = n + 1 end + lpeg.anything)^0 -- return function(str) n = 0 ; lpegmatch(pattern,str) ; return n end -- end local nany = utf8char/"" function lpeg.counter(pattern) pattern = Cs((P(pattern)/" " + nany)^0) return function(str) return #lpegmatch(pattern,str) end end -- utf extensies utf = utf or (unicode and unicode.utf8) or { } local utfcharacters = utf and utf.characters or string.utfcharacters local utfgmatch = utf and utf.gmatch local utfchar = utf and utf.char lpeg.UP = lpeg.P if utfcharacters then function lpeg.US(str) local p = P(false) for uc in utfcharacters(str) do p = p + P(uc) end return p end elseif utfgmatch then function lpeg.US(str) local p = P(false) for uc in utfgmatch(str,".") do p = p + P(uc) end return p end else function lpeg.US(str) local p = P(false) local f = function(uc) p = p + P(uc) end lpegmatch((utf8char/f)^0,str) return p end end local range = utf8byte * utf8byte + Cc(false) -- utf8byte is already a capture function lpeg.UR(str,more) local first, last if type(str) == "number" then first = str last = more or first else first, last = lpegmatch(range,str) if not last then return P(str) end end if first == last then return P(str) elseif utfchar and (last - first < 8) then -- a somewhat arbitrary criterium local p = P(false) for i=first,last do p = p + P(utfchar(i)) end return p -- nil when invalid range else local f = function(b) return b >= first and b <= last end -- tricky, these nested captures return utf8byte / f -- nil when invalid range end end -- print(lpeg.match(lpeg.Cs((C(lpeg.UR("αω"))/{ ["χ"] = "OEPS" })^0),"αωχαω")) -- lpeg.print(lpeg.R("ab","cd","gh")) -- lpeg.print(lpeg.P("a","b","c")) -- lpeg.print(lpeg.S("a","b","c")) -- print(lpeg.count("äáàa",lpeg.P("á") + lpeg.P("à"))) -- print(lpeg.count("äáàa",lpeg.UP("áà"))) -- print(lpeg.count("äáàa",lpeg.US("àá"))) -- print(lpeg.count("äáàa",lpeg.UR("aá"))) -- print(lpeg.count("äáàa",lpeg.UR("àá"))) -- print(lpeg.count("äáàa",lpeg.UR(0x0000,0xFFFF))) function lpeg.is_lpeg(p) return p and lpegtype(p) == "pattern" end function lpeg.oneof(list,...) -- lpeg.oneof("elseif","else","if","then") -- assume proper order if type(list) ~= "table" then list = { list, ... } end -- table.sort(list) -- longest match first local p = P(list[1]) for l=2,#list do p = p + P(list[l]) end return p end -- For the moment here, but it might move to utilities. Beware, we need to -- have the longest keyword first, so 'aaa' comes beforte 'aa' which is why we -- loop back from the end cq. prepend. local sort = table.sort local function copyindexed(old) local new = { } for i=1,#old do new[i] = old end return new end local function sortedkeys(tab) local keys, s = { }, 0 for key,_ in next, tab do s = s + 1 keys[s] = key end sort(keys) return keys end function lpeg.append(list,pp,delayed,checked) local p = pp if #list > 0 then local keys = copyindexed(list) sort(keys) for i=#keys,1,-1 do local k = keys[i] if p then p = P(k) + p else p = P(k) end end elseif delayed then -- hm, it looks like the lpeg parser resolves anyway local keys = sortedkeys(list) if p then for i=1,#keys,1 do local k = keys[i] local v = list[k] p = P(k)/list + p end else for i=1,#keys do local k = keys[i] local v = list[k] if p then p = P(k) + p else p = P(k) end end if p then p = p / list end end elseif checked then -- problem: substitution gives a capture local keys = sortedkeys(list) for i=1,#keys do local k = keys[i] local v = list[k] if p then if k == v then p = P(k) + p else p = P(k)/v + p end else if k == v then p = P(k) else p = P(k)/v end end end else local keys = sortedkeys(list) for i=1,#keys do local k = keys[i] local v = list[k] if p then p = P(k)/v + p else p = P(k)/v end end end return p end -- inspect(lpeg.append({ a = "1", aa = "1", aaa = "1" } ,nil,true)) -- inspect(lpeg.append({ ["degree celsius"] = "1", celsius = "1", degree = "1" } ,nil,true)) -- function lpeg.exact_match(words,case_insensitive) -- local pattern = concat(words) -- if case_insensitive then -- local pattern = S(upper(characters)) + S(lower(characters)) -- local list = { } -- for i=1,#words do -- list[lower(words[i])] = true -- end -- return Cmt(pattern^1, function(_,i,s) -- return list[lower(s)] and i -- end) -- else -- local pattern = S(concat(words)) -- local list = { } -- for i=1,#words do -- list[words[i]] = true -- end -- return Cmt(pattern^1, function(_,i,s) -- return list[s] and i -- end) -- end -- end -- experiment: local function make(t) local p local keys = sortedkeys(t) for i=1,#keys do local k = keys[i] local v = t[k] if not p then if next(v) then p = P(k) * make(v) else p = P(k) end else if next(v) then p = p + P(k) * make(v) else p = p + P(k) end end end return p end function lpeg.utfchartabletopattern(list) -- goes to util-lpg local tree = { } for i=1,#list do local t = tree for c in gmatch(list[i],".") do if not t[c] then t[c] = { } end t = t[c] end end return make(tree) end -- inspect ( lpeg.utfchartabletopattern { -- utfchar(0x00A0), -- nbsp -- utfchar(0x2000), -- enquad -- utfchar(0x2001), -- emquad -- utfchar(0x2002), -- enspace -- utfchar(0x2003), -- emspace -- utfchar(0x2004), -- threeperemspace -- utfchar(0x2005), -- fourperemspace -- utfchar(0x2006), -- sixperemspace -- utfchar(0x2007), -- figurespace -- utfchar(0x2008), -- punctuationspace -- utfchar(0x2009), -- breakablethinspace -- utfchar(0x200A), -- hairspace -- utfchar(0x200B), -- zerowidthspace -- utfchar(0x202F), -- narrownobreakspace -- utfchar(0x205F), -- math thinspace -- } ) -- a few handy ones: -- -- faster than find(str,"[\n\r]") when match and # > 7 and always faster when # > 3 patterns.containseol = lpeg.finder(eol) -- (1-eol)^0 * eol -- The next pattern^n variant is based on an approach suggested -- by Roberto: constructing a big repetition in chunks. -- -- Being sparse is not needed, and only complicate matters and -- the number of redundant entries is not that large. local function nextstep(n,step,result) local m = n % step -- mod(n,step) local d = floor(n/step) -- div(n,step) if d > 0 then local v = V(tostring(step)) local s = result.start for i=1,d do if s then s = v * s else s = v end end result.start = s end if step > 1 and result.start then local v = V(tostring(step/2)) result[tostring(step)] = v * v end if step > 0 then return nextstep(m,step/2,result) else return result end end function lpeg.times(pattern,n) return P(nextstep(n,2^16,{ "start", ["1"] = pattern })) end -- local p = lpeg.Cs((1 - lpeg.times(lpeg.P("AB"),25))^1) -- local s = "12" .. string.rep("AB",20) .. "34" .. string.rep("AB",30) .. "56" -- inspect(p) -- print(lpeg.match(p,s)) -- moved here (before util-str) local digit = R("09") local period = P(".") local zero = P("0") local trailingzeros = zero^0 * -digit -- suggested by Roberto R local case_1 = period * trailingzeros / "" local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "") local number = digit^1 * (case_1 + case_2) local stripper = Cs((number + 1)^0) lpeg.patterns.stripzeros = stripper -- local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100" -- collectgarbage("collect") -- str = string.rep(sample,10000) -- local ts = os.clock() -- lpegmatch(stripper,str) -- print(#str, os.clock()-ts, lpegmatch(stripper,sample)) context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-log.lua0000644000175000017500000005263212161703335024115 0ustar norbertnorbertif not modules then modules = { } end modules ['trac-log'] = { version = 1.001, comment = "companion to trac-log.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- if tex and (tex.jobname or tex.formatname) then -- -- -- quick hack, awaiting speedup in engine (8 -> 6.4 sec for --make with console2) -- -- still needed for luajittex -- -- local texio_write_nl = texio.write_nl -- local texio_write = texio.write -- local io_write = io.write -- local write_nl = function(target,...) -- if not io_write then -- io_write = io.write -- end -- if target == "term and log" then -- texio_write_nl("log",...) -- texio_write_nl("term","") -- io_write(...) -- elseif target == "log" then -- texio_write_nl("log",...) -- elseif target == "term" then -- texio_write_nl("term","") -- io_write(...) -- else -- texio_write_nl("log",target,...) -- texio_write_nl("term","") -- io_write(target,...) -- end -- end -- local write = function(target,...) -- if not io_write then -- io_write = io.write -- end -- if target == "term and log" then -- texio_write("log",...) -- io_write(...) -- elseif target == "log" then -- texio_write("log",...) -- elseif target == "term" then -- io_write(...) -- else -- texio_write("log",target,...) -- io_write(target,...) -- end -- end -- texio.write = write -- texio.write_nl = write_nl -- -- else -- -- -- texlua or just lua -- -- end -- todo: less categories, more subcategories (e.g. nodes) -- todo: split into basics and ctx specific local write_nl, write = texio and texio.write_nl or print, texio and texio.write or io.write local format, gmatch, find = string.format, string.gmatch, string.find local concat, insert, remove = table.concat, table.insert, table.remove local topattern = string.topattern local texcount = tex and tex.count local next, type, select = next, type, select local utfchar = utf.char local setmetatableindex = table.setmetatableindex local formatters = string.formatters --[[ldx--

This is a prelude to a more extensive logging module. We no longer provide based logging as parsing is relatively easy anyway.

--ldx]]-- logs = logs or { } local logs = logs local moreinfo = [[ More information about ConTeXt and the tools that come with it can be found at: ]] .. "\n" .. [[ maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net wiki : http://contextgarden.net ]] -- -- we extend the formatters: -- -- function utilities.strings.unichr(s) return "U+" .. format("%05X",s) .. " (" .. utfchar(s) .. ")" end -- function utilities.strings.chruni(s) return utfchar(s) .. " (U+" .. format("%05X",s) .. ")" end -- -- utilities.strings.formatters.add ( -- string.formatters, "uni", -- [[unichr(%s)]], -- [[local unichr = utilities.strings.unichr]] -- ) -- -- utilities.strings.formatters.add ( -- string.formatters, "chr", -- [[chruni(%s)]], -- [[local chruni = utilities.strings.chruni]] -- ) utilities.strings.formatters.add ( formatters, "unichr", [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] ) utilities.strings.formatters.add ( formatters, "chruni", [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] ) -- print(formatters["Missing character %!chruni! in font."](234)) -- print(formatters["Missing character %!unichr! in font."](234)) -- basic loggers local function ignore() end setmetatableindex(logs, function(t,k) t[k] = ignore ; return ignore end) local report, subreport, status, settarget, setformats, settranslations local direct, subdirect, writer, pushtarget, poptarget if tex and (tex.jobname or tex.formatname) then -- local format = string.formatter local valueiskey = { __index = function(t,k) t[k] = k return k end } -- will be helper local target = "term and log" logs.flush = io.flush local formats = { } setmetatable(formats, valueiskey) local translations = { } setmetatable(translations,valueiskey) writer = function(...) write_nl(target,...) end newline = function() write_nl(target,"\n") end local f_one = formatters["%-15s > %s\n"] local f_two = formatters["%-15s >\n"] -- we can use formatters but best check for % then because for simple messages -- we con't want this overhead for single messages (not that there are that -- many; we could have a special weak table) report = function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local f_one = formatters["%-15s > %s"] local f_two = formatters["%-15s >"] direct = function(a,b,c,...) if c then return f_one(translations[a],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],formats[b]) elseif a then return f_two(translations[a]) else return "" end end local f_one = formatters["%-15s > %s > %s\n"] local f_two = formatters["%-15s > %s >\n"] subreport = function(a,s,b,c,...) if c then write_nl(target,f_one(translations[a],translations[s],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],translations[s],formats[b])) elseif a then write_nl(target,f_two(translations[a],translations[s])) else write_nl(target,"\n") end end local f_one = formatters["%-15s > %s > %s"] local f_two = formatters["%-15s > %s >"] subdirect = function(a,s,b,c,...) if c then return f_one(translations[a],translations[s],formatters[formats[b]](c,...)) elseif b then return f_one(translations[a],translations[s],formats[b]) elseif a then return f_two(translations[a],translations[s]) else return "" end end local f_one = formatters["%-15s : %s\n"] local f_two = formatters["%-15s :\n"] status = function(a,b,c,...) if c then write_nl(target,f_one(translations[a],formatters[formats[b]](c,...))) elseif b then write_nl(target,f_one(translations[a],formats[b])) elseif a then write_nl(target,f_two(translations[a])) else write_nl(target,"\n") end end local targets = { logfile = "log", log = "log", file = "log", console = "term", terminal = "term", both = "term and log", } settarget = function(whereto) target = targets[whereto or "both"] or targets.both if target == "term" or target == "term and log" then logs.flush = io.flush else logs.flush = ignore end end local stack = { } pushtarget = function(newtarget) insert(stack,target) settarget(newtarget) end poptarget = function() if #stack > 0 then settarget(remove(stack)) end end setformats = function(f) formats = f end settranslations = function(t) translations = t end else logs.flush = ignore writer = write_nl newline = function() write_nl("\n") end local f_one = formatters["%-15s | %s"] local f_two = formatters["%-15s |"] report = function(a,b,c,...) if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) elseif a then write_nl(f_two(a)) else write_nl("") end end local f_one = formatters["%-15s | %s | %s"] local f_two = formatters["%-15s | %s |"] subreport = function(a,sub,b,c,...) if c then write_nl(f_one(a,sub,formatters[b](c,...))) elseif b then write_nl(f_one(a,sub,b)) elseif a then write_nl(f_two(a,sub)) else write_nl("") end end local f_one = formatters["%-15s : %s\n"] local f_two = formatters["%-15s :\n"] status = function(a,b,c,...) -- not to be used in lua anyway if c then write_nl(f_one(a,formatters[b](c,...))) elseif b then write_nl(f_one(a,b)) -- b can have %'s elseif a then write_nl(f_two(a)) else write_nl("\n") end end direct = ignore subdirect = ignore settarget = ignore pushtarget = ignore poptarget = ignore setformats = ignore settranslations = ignore end logs.report = report logs.subreport = subreport logs.status = status logs.settarget = settarget logs.pushtarget = pushtarget logs.poptarget = poptarget logs.setformats = setformats logs.settranslations = settranslations logs.direct = direct logs.subdirect = subdirect logs.writer = writer logs.newline = newline -- installer -- todo: renew (un) locks when a new one is added and wildcard local data, states = { }, nil function logs.reporter(category,subcategory) local logger = data[category] if not logger then local state = false if states == true then state = true elseif type(states) == "table" then for c, _ in next, states do if find(category,c) then state = true break end end end logger = { reporters = { }, state = state, } data[category] = logger end local reporter = logger.reporters[subcategory or "default"] if not reporter then if subcategory then reporter = function(...) if not logger.state then subreport(category,subcategory,...) end end logger.reporters[subcategory] = reporter else local tag = category reporter = function(...) if not logger.state then report(category,...) end end logger.reporters.default = reporter end end return reporter end logs.new = logs.reporter -- for old times sake -- context specicific: this ends up in the macro stream local ctxreport = logs.writer function logs.setmessenger(m) ctxreport = m end function logs.messenger(category,subcategory) -- we need to avoid catcode mess (todo: fast context) if subcategory then return function(...) ctxreport(subdirect(category,subcategory,...)) end else return function(...) ctxreport(direct(category,...)) end end end -- so far local function setblocked(category,value) if category == true then -- lock all category, value = "*", true elseif category == false then -- unlock all category, value = "*", false elseif value == nil then -- lock selective value = true end if category == "*" then states = value for k, v in next, data do v.state = value end else states = utilities.parsers.settings_to_hash(category) for c, _ in next, states do if data[c] then v.state = value else c = topattern(c,true,true) for k, v in next, data do if find(k,c) then v.state = value end end end end end end function logs.disable(category,value) setblocked(category,value == nil and true or value) end function logs.enable(category) setblocked(category,false) end function logs.categories() return table.sortedkeys(data) end function logs.show() local n, c, s, max = 0, 0, 0, 0 for category, v in table.sortedpairs(data) do n = n + 1 local state = v.state local reporters = v.reporters local nc = #category if nc > c then c = nc end for subcategory, _ in next, reporters do local ns = #subcategory if ns > c then s = ns end local m = nc + ns if m > max then max = m end end local subcategories = concat(table.sortedkeys(reporters),", ") if state == true then state = "disabled" elseif state == false then state = "enabled" else state = "unknown" end -- no new here report("logging","category %a, subcategories %a, state %a",category,subcategories,state) end report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) end local delayed_reporters = { } setmetatableindex(delayed_reporters,function(t,k) local v = logs.reporter(k.name) t[k] = v return v end) function utilities.setters.report(setter,...) delayed_reporters[setter](...) end directives.register("logs.blocked", function(v) setblocked(v,true) end) directives.register("logs.target", function(v) settarget(v) end) -- tex specific loggers (might move elsewhere) local report_pages = logs.reporter("pages") -- not needed but saves checking when we grep for it local real, user, sub function logs.start_page_number() real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno -- real, user, sub = 0, 0, 0 end local timing = false local starttime = nil local lasttime = nil trackers.register("pages.timing", function(v) -- only for myself (diagnostics) starttime = os.clock() timing = true end) function logs.stop_page_number() -- the first page can includes the initialization so we omit this in average if timing then local elapsed, average local stoptime = os.clock() if not lasttime or real < 2 then elapsed = stoptime average = stoptime starttime = stoptime else elapsed = stoptime - lasttime average = (stoptime - starttime) / (real - 1) end lasttime = stoptime if real <= 0 then report_pages("flushing page, time %0.04f / %0.04f",elapsed,average) elseif user <= 0 then report_pages("flushing realpage %s, time %0.04f / %0.04f",real,elapsed,average) elseif sub <= 0 then report_pages("flushing realpage %s, userpage %s, time %0.04f / %0.04f",real,user,elapsed,average) else report_pages("flushing realpage %s, userpage %s, subpage %s, time %0.04f / %0.04f",real,user,sub,elapsed,average) end else if real <= 0 then report_pages("flushing page") elseif user <= 0 then report_pages("flushing realpage %s",real) elseif sub <= 0 then report_pages("flushing realpage %s, userpage %s",real,user) else report_pages("flushing realpage %s, userpage %s, subpage %s",real,user,sub) end end logs.flush() end -- we don't have show_open and show_close callbacks yet local report_files = logs.reporter("files") local nesting = 0 local verbose = false local hasscheme = url.hasscheme function logs.show_open(name) -- if hasscheme(name) ~= "virtual" then -- if verbose then -- nesting = nesting + 1 -- report_files("level %s, opening %s",nesting,name) -- else -- write(formatters["(%s"](name)) -- tex adds a space -- end -- end end function logs.show_close(name) -- if hasscheme(name) ~= "virtual" then -- if verbose then -- report_files("level %s, closing %s",nesting,name) -- nesting = nesting - 1 -- else -- write(")") -- tex adds a space -- end -- end end function logs.show_load(name) -- if hasscheme(name) ~= "virtual" then -- if verbose then -- report_files("level %s, loading %s",nesting+1,name) -- else -- write(formatters["(%s)"](name)) -- end -- end end -- there may be scripts out there using this: local simple = logs.reporter("comment") logs.simple = simple logs.simpleline = simple -- obsolete function logs.setprogram () end -- obsolete function logs.extendbanner() end -- obsolete function logs.reportlines () end -- obsolete function logs.reportbanner() end -- obsolete function logs.reportline () end -- obsolete function logs.simplelines () end -- obsolete function logs.help () end -- obsolete -- applications -- local function reportlines(t,str) -- if str then -- for line in gmatch(str,"([^\n\r]*)[\n\r]") do -- t.report(line) -- end -- end -- end local Carg, C, lpegmatch = lpeg.Carg, lpeg.C, lpeg.match local p_newline = lpeg.patterns.newline local linewise = ( Carg(1) * C((1-p_newline)^1) / function(t,s) t.report(s) end + Carg(1) * p_newline^2 / function(t) t.report() end + p_newline )^1 local function reportlines(t,str) if str then lpegmatch(linewise,str,1,t) end end local function reportbanner(t) local banner = t.banner if banner then t.report(banner) t.report() end end local function reportversion(t) local banner = t.banner if banner then t.report(banner) end end local function reporthelp(t,...) local helpinfo = t.helpinfo if type(helpinfo) == "string" then reportlines(t,helpinfo) elseif type(helpinfo) == "table" then for i=1,select("#",...) do reportlines(t,t.helpinfo[select(i,...)]) if i < n then t.report() end end end end local function reportinfo(t) t.report() reportlines(t,t.moreinfo) end local function reportexport(t,method) report(t.helpinfo) end local reporters = { lines = reportlines, -- not to be overloaded banner = reportbanner, version = reportversion, help = reporthelp, info = reportinfo, export = reportexport, } local exporters = { -- empty } logs.reporters = reporters logs.exporters = exporters function logs.application(t) t.name = t.name or "unknown" t.banner = t.banner t.moreinfo = moreinfo t.report = logs.reporter(t.name) t.help = function(...) reporters.banner(t) reporters.help(t,...) reporters.info(t) end t.export = function(...) reporters.export(t,...) end t.identify = function() reporters.banner(t) end t.version = function() reporters.version(t) end return t end -- somewhat special .. will be redone (already a better solution in place in lmx) -- logging to a file -- local syslogname = "oeps.xxx" -- -- for i=1,10 do -- logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123") -- end function logs.system(whereto,process,jobname,category,...) local message = formatters["%s %s => %s => %s => %s\r"](os.date("%d/%m/%y %H:%m:%S"),process,jobname,category,format(...)) for i=1,10 do local f = io.open(whereto,"a") -- we can consider keeping the file open if f then f:write(message) f:close() break else sleep(0.1) end end end local report_system = logs.reporter("system","logs") function logs.obsolete(old,new) local o = loadstring("return " .. new)() if type(o) == "function" then return function(...) report_system("function %a is obsolete, use %a",old,new) loadstring(old .. "=" .. new .. " return ".. old)()(...) end elseif type(o) == "table" then local t, m = { }, { } m.__index = function(t,k) report_system("table %a is obsolete, use %a",old,new) m.__index, m.__newindex = o, o return o[k] end m.__newindex = function(t,k,v) report_system("table %a is obsolete, use %a",old,new) m.__index, m.__newindex = o, o o[k] = v end if libraries then libraries.obsolete[old] = t -- true end setmetatable(t,m) return t end end if utilities then utilities.report = report_system end if tex and tex.error then function logs.texerrormessage(...) -- for the moment we put this function here tex.error(format(...), { }) end else function logs.texerrormessage(...) print(format(...)) end end -- this is somewhat slower but prevents out-of-order messages when print is mixed -- with texio.write io.stdout:setvbuf('no') io.stderr:setvbuf('no') -- windows: > nul 2>&1 -- unix : > null 2>&1 if package.helpers.report then package.helpers.report = logs.reporter("package loader") -- when used outside mtxrun end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-19.tex0000644000175000017500000002272411754241457023711 0ustar norbertnorbert%D \module %D [ file=s-pre-19, %D version=2000.07.31, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 19, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 style is made in the process or writing the \METAFUN\ %D manual. It exploits a few tricks, like graphics calculated %D using positional information. It also uses the (at that %D moment) new menu list placement alternative. If you forget %D about the definition of the button shapes, which is %D complicated in any system, this style is not even that hard %D to follow. Watch how the left side of the buttons follow %D the right side of the text graphic. %D %D While playing bit with this style, the random alternative %D made me think of those organic building with non equal %D windows (we have a few in The Netherlands), so I decided to %D label this style as \type {pre-organic}. %D %D At the end of this file, there is a small test file, so %D when you process this file with \TEXEXEC\ and the options %D \type {--mode=demo} and \type {--pdf}, you will get a demo %D document. %D We use one of the standard screen \quote {paper} sizes, and %D map it onto the same size, so that we get a nicely cropped %D page. \setuppapersize [S6][S6] %D Like in the \METAFUN\ manual, we use the Palatino as main %D bodyfont. This font is quite readable on even low %D resolution screens, although I admit that this style is %D developed using an $1400\times1050$ pixel LCD screen, so I %D may be biased. %\startmode[asintended] \setupbodyfont[ppl] \stopmode %D The layout specification sets up a text area and a right %D edge area where the menus will go. Watch the rather large %D edge distance. By setting the header and footer dimensions %D to zero, we automatically get rid of page body ornaments, %D like the pagenumber. \setuplayout [topspace=48pt, backspace=48pt, cutspace=12pt, width=400pt, margin=0cm, rightedge=88pt, rightedgedistance=48pt, header=0cm, footer=0cm, height=middle] %D We use a moderate, about a line height, interparagraph %D white space. \setupwhitespace [big] %D Of course we use colors, since on computer displays they %D come for free. \setupcolors [state=start] \definecolor [red] [r=.75] \definecolor [yellow] [r=.75,g=.75] \definecolor [gray] [s=.50] \definecolor [white] [s=.85] \definecolor [PageColor] [yellow] \definecolor [TextColor] [white] \definecolor [OrnamentColor] [red] \definecolor [InteractionColor] [red] \definecolor [ContrastColor] [gray] %D This is an interactive document, so we enable interaction. %D In this style, we disable the viewer's \quote {highlight a %D hyperlink when it's clicked on} feature. We will use a %D menu, so we enable menus. Later we will see the contract %D color |<|hyperlinks gets that color when we are already on %D the location|>| in action. \setupinteraction [state=start, click=off, color=InteractionColor, contrastcolor=ContrastColor, menu=on] %D The menu itself is set up as follows. Because we will %D calculate menubuttons based on their position on the page, %D we have to keep track of the positions. Therefore, we set %D the \type {position} variable to \type {yes}. \setupinteractionmenu [right] [frame=off, position=yes, align=middle, topoffset=-.75cm, bottomoffset=-.75cm, color=gray, contrastcolor=gray, style=bold, before=, after=] %D The menu content is rather sober: a list of topics (later %D we will define the command that generates topic entries), %D and a close button. \startinteractionmenu[right] \placelist[Topic][alternative=right] \vfill \but [CloseDocument] close \\ \stopinteractionmenu %D We have now arived at the more interesting part of the style %D definition: the graphic that goes in the page background. %D Because this graphic will change, we define a usable %D \METAPOST\ graphic. Page backgrounds are recalculated each %D page, opposite to the other backgrounds that are calculated %D when a new background is defined, or when repetitive %D calculation is turned on. \setupbackgrounds [page] [background=page] \defineoverlay [page] [\useMPgraphic{page}] \setupMPvariables [page] [alternative=3] \startuseMPgraphic{page} \includeMPgraphic{rightsuperbutton} StartPage ; path p, q ; pickup pencircle scaled 3pt ; p := Field[Text][Text] enlarged 36pt superellipsed .90 ; fill Page withcolor \MPcolor{PageColor} ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor \MPcolor{OrnamentColor} ; p := Field[Text][Text] enlarged 48pt superellipsed .90 ; def right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) = if (pp>0) and (rr>0) : q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ; fill q withcolor \MPcolor{TextColor} ; draw q withcolor if rr=2 : \MPcolor{ContrastColor} else : \MPcolor{InteractionColor} fi ; fi ; enddef ; \MPmenubuttons{right} StopPage ; \stopuseMPgraphic \startuseMPgraphic{page} \includeMPgraphic{rightsuperbutton} StartPage ; numeric alternative, seed, superness, squeezeness, randomness ; path p, q ; transform t ; alternative := \MPvar{alternative} ; seed := uniformdeviate 100 ; if alternative > 10 : superness := .85 + ((\realfolio-1)/\lastpage) * .15 ; squeezeness := 12pt - ((\realfolio-1)/\lastpage) * 10pt ; else : superness := .90 ; squeezeness := 12pt ; fi ; randomness := squeezeness ; alternative := alternative mod 10 ; t := identity if alternative=3: shifted (9pt,-9pt) fi ; % first we draw the shape that surrounds the text randomseed := seed ; p := Field[Text][Text] enlarged if alternative = 1 : 36pt superellipsed superness elseif alternative = 2 : 36pt squeezed squeezeness elseif alternative = 3 : 36pt randomized randomness else : 36pt fi ; pickup pencircle scaled 3pt ; fill Page withcolor \MPcolor{PageColor} ; fill p withcolor \MPcolor{TextColor} ; draw p withcolor \MPcolor{OrnamentColor} ; % we set p to the wider shape from which we will chip off pieces randomseed := seed ; p := ( Field[Text][Text] enlarged if alternative = 1 : 48pt superellipsed superness elseif alternative = 2 : 48pt squeezed squeezeness elseif alternative = 3 : 36pt randomized randomness else : 48pt fi ) transformed t ; % calls to *_menu_button are generated automatically ... vardef right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) = save q ; path q ; if (pp>0) and (rr>0) : q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ; % \MPw{menu:right:\realfolio} fill q withcolor \MPcolor{TextColor} ; draw q withcolor if rr=2 : \MPcolor{ContrastColor} else : \MPcolor{InteractionColor} fi ; fi ; enddef ; % ... and inserted when the graphic data is flushed here ... \MPmenubuttons{right} StopPage ; \stopuseMPgraphic \startuseMPgraphic{rightsuperbutton} vardef rightsuperbutton (expr pat, xpos, ypos, wid, hei) = save p, ptop, pbot, t, b, edge, shift, width, height ; path p, ptop, pbot ; pair t, b ; numeric edge, shift, width, height ; edge := xpos + wid ; shift := ypos + hei ; p := rightpath pat ; ptop := ((-infinity,shift)--(edge,shift)) ; pbot := ((-infinity,shift-hei)--(edge,shift-hei)) ; t := p intersection_point ptop ; b := p intersection_point pbot ; p := subpath(0,xpart (p intersectiontimes ptop)) of p ; p := subpath(xpart (p intersectiontimes pbot),length(p)) of p ; (p -- t -- point 1 of ptop & point 1 of ptop -- point 1 of pbot & point 1 of pbot -- b -- cycle) enddef ; \stopuseMPgraphic %D Topics are identified with \type {\Topic}, which is an %D instance of chapter headings. The number is made invisible. %D Since it still is a numbered section header, \CONTEXT\ will %D write the header to the table of contents. \definehead [Topic] [chapter] \setuphead [Topic] [number=no] %D We will use a bold font in the table of contents. We also %D force a complete list. \setuplist [Topic] [criterium=all, style=bold, before=, after=] %D The \type {\TitlePage} macro looks horrible, because we %D want to keep the interface simple: a list of small %D sentences, separated by \type {\\}. \def\StartTitlePage {\startstandardmakeup \switchtobodyfont[big] \def\\{\vfill\bfb\let\\=\par} \bfd\setupinterlinespace\gray \vskip.5cm} \def\StopTitlePage {\\\vskip.5cm % the \\ is really needed \stopstandardmakeup} \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} %D A couple of goodies: \def\Subject {\Topic} \def\Topics #1{} \def\Subjects {} %D For those who want to test: \doifnotmode{demo}{\endinput} \starttext \setupMPvariables[page][alternative=3] \TitlePage {A Few Nice Quotes\\ A Simple Style Demo\\ Hans Hagen, August 2000} \Topic {Douglas R. Hofstadter} \input douglas \page \Topic {Donald E. Knuth} \input knuth \page \Topic {Edward R. Tufte} \input tufte \page \Topic {Hermann Zapf} \input zapf \page %Topic {David F. Stork} \input stork \page \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-vectors.mkiv0000644000175000017500000000362612161703335025645 0ustar norbertnorbert%D \module %D [ file=s-fonts-vectors, % was s-fnt-51, %D version=2012.11.27, %D title=\CONTEXT\ Style File, %D subtitle=Protrusion and Expansion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 code is used in the \MKIV\ fonts manual. \startmodule[s-fonts-vectors] \registerctxluafile{s-fonts-vectors}{} \installmodulecommandluasingle \showprotrusionclass {moduledata.fonts.protrusions.showclass} \installmodulecommandluasingle \showprotrusionvector {moduledata.fonts.protrusions.showvector} \installmodulecommandluasingle \showexpansionclass {moduledata.fonts.expansions.showclass} \installmodulecommandluasingle \showexpansionvector {moduledata.fonts.expansions.showvector} \stopmodule \continueifinputfile{s-fonts-vectors.mkiv} \usemodule[art-01] \starttext \startsubject[title=protrusion] \startsubsubject[title=class] \showprotrusionclass \stopsubsubject \startsubsubject[title=vector pure] \showprotrusionvector[name=pure] \stopsubsubject \startsubsubject[title=vector punctuation] \showprotrusionvector[name=punctuation] \stopsubsubject \startsubsubject[title=vector alpha] \showprotrusionvector[name=alpha] \stopsubsubject \startsubsubject[title=vector quality] \showprotrusionvector[name=quality] \stopsubsubject \stopsubject \page \startsubject[title=expansion] \startsubsubject[title=class] \showprotrusionclass \stopsubsubject \startsubsubject[title=vector quality] \showprotrusionvector[name=quality] \stopsubsubject \stopsubject \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/m-spreadsheet.lua0000644000175000017500000002117512130411274025136 0ustar norbertnorbertif not modules then modules = { } end modules ['m-spreadsheet'] = { version = 1.001, comment = "companion to m-spreadsheet.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local byte, format, gsub, find = string.byte, string.format, string.gsub, string.find local R, P, S, C, V, Cs, Cc, Ct, Cg, Cf, Carg = lpeg.R, lpeg.P, lpeg.S, lpeg.C, lpeg.V, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Cg, lpeg.Cf, lpeg.Carg local lpegmatch, patterns = lpeg.match, lpeg.patterns local setmetatable, loadstring, next, tostring, tonumber,rawget = setmetatable, loadstring, next, tostring, tonumber, rawget local formatters = string.formatters local context = context local splitthousands = utilities.parsers.splitthousands local variables = interfaces.variables local v_yes = variables.yes moduledata = moduledata or { } local spreadsheets = { } moduledata.spreadsheets = spreadsheets local data = { -- nothing yet } local settings = { period = ".", comma = ",", } spreadsheets.data = data spreadsheets.settings = settings local defaultname = "default" local stack = { } local current = defaultname local d_mt ; d_mt = { __index = function(t,k) local v = { } setmetatable(v,d_mt) t[k] = v return v end, } local s_mt ; s_mt = { __index = function(t,k) local v = settings[k] t[k] = v return v end, } function spreadsheets.setup(t) for k, v in next, t do settings[k] = v end end local function emptydata(name,settings) local data = { } local specifications = { } local settings = settings or { } setmetatable(data,d_mt) setmetatable(specifications,d_mt) setmetatable(settings,s_mt) return { name = name, data = data, maxcol = 0, maxrow = 0, settings = settings, temp = { }, -- for local usage specifications = specifications, } end function spreadsheets.reset(name) if not name or name == "" then name = defaultname end data[name] = emptydata(name,data[name] and data[name].settings) end function spreadsheets.start(name,s) if not name or name == "" then name = defaultname end if not s then s = { } end table.insert(stack,current) current = name if data[current] then setmetatable(s,s_mt) data[current].settings = s else data[current] = emptydata(name,s) end end function spreadsheets.stop() current = table.remove(stack) end spreadsheets.reset() local offset = byte("A") - 1 local function assign(s,n) return formatters["moduledata.spreadsheets.data['%s'].data[%s]"](n,byte(s)-offset) end function datacell(a,b,...) local n = 0 if b then local t = { a, b, ... } for i=1,#t do n = n * (i-1) * 26 + byte(t[i]) - offset end else n = byte(a) - offset end return formatters["dat[%s]"](n) end local function checktemplate(s) if find(s,"%%") then -- normal template return s elseif find(s,"@") then -- tex specific template return gsub(s,"@","%%") else -- tex specific quick template return "%" .. s end end local quoted = Cs(patterns.unquoted) local spaces = patterns.whitespace^0 local cell = C(R("AZ"))^1 / datacell * (Cc("[") * (R("09")^1) * Cc("]") + #P(1)) -- A nasty aspect of lpeg: Cf ( spaces * Cc("") * { "start" ... this will create a table that will -- be reused, so we accumulate! local pattern = Cf ( spaces * Ct("") * { "start", start = V("value") + V("set") + V("format") + V("string") + V("code"), value = Cg(P([[=]]) * spaces * Cc("kind") * Cc("value")) * V("code"), set = Cg(P([[!]]) * spaces * Cc("kind") * Cc("set")) * V("code"), format = Cg(P([[@]]) * spaces * Cc("kind") * Cc("format")) * spaces * Cg(Cc("template") * Cs(quoted/checktemplate)) * V("code"), string = Cg(#S([["']]) * Cc("kind") * Cc("string")) * Cg(Cc("content") * quoted), code = spaces * Cg(Cc("code") * Cs((cell + P(1))^0)), }, rawset) local functions = { } spreadsheets.functions = functions function functions._s_(row,col,c,f,t) local r = 0 if f and t then -- f..t -- ok elseif f then -- 1..f f, t = 1, f else f, t = 1, row - 1 end for i=f,t do local ci = c[i] if type(ci) == "number" then r = r + c[i] end end return r end functions.fmt = string.tformat local f_code = formatters [ [[ local _m_ = moduledata.spreadsheets local dat = _m_.data['%s'].data local tmp = _m_.temp local fnc = _m_.functions local row = %s local col = %s function fnc.sum(...) return fnc._s_(row,col,...) end local sum = fnc.sum local fmt = fnc.fmt return %s ]] ] -- to be considered: a weak cache local function propername(name) if name ~= "" then return name elseif current ~= "" then return current else return defaultname end end -- if name == "" then name = current if name == "" then name = defaultname end end local function execute(name,r,c,str) if str ~= "" then local d = data[name] if c > d.maxcol then d.maxcol = c end if r > d.maxrow then d.maxrow = r end local specification = lpegmatch(pattern,str,1,name) d.specifications[c][r] = specification local kind = specification.kind if kind == "string" then return specification.content or "" else local code = specification.code if code and code ~= "" then code = f_code(name,r,c,code or "") local result = loadstring(code) -- utilities.lua.strippedloadstring(code,true) -- when tracing result = result and result() if type(result) == "function" then result = result() end if type(result) == "number" then d.data[c][r] = result end if not result then -- nothing elseif kind == "set" then -- no return elseif kind == "format" then return formatters[specification.template](result) else return result end end end end end function spreadsheets.set(name,r,c,str) name = propername(name) execute(name,r,c,str) end function spreadsheets.get(name,r,c,str) name = propername(name) local dname = data[name] if not dname then -- nothing elseif not str or str == "" then context(dname.data[c][r] or 0) else local result = execute(name,r,c,str) if result then -- if type(result) == "number" then -- dname.data[c][r] = result -- result = tostring(result) -- end local settings = dname.settings local split = settings.split local period = settings.period local comma = settings.comma if split == v_yes then result = splitthousands(result) end if period == "" then period = nil end if comma == "" then comma = nil end result = gsub(result,".",{ ["."] = period, [","] = comma }) context(result) end end end function spreadsheets.doifelsecell(name,r,c) name = propername(name) local d = data[name] local d = d and d.data local r = d and rawget(d,r) local c = r and rawget(r,c) commands.doifelse(c) end local function simplify(name) name = propername(name) local data = data[name] if data then data = data.data local temp = { } for k, v in next, data do local t = { } temp[k] = t for kk, vv in next, v do if type(vv) == "function" then t[kk] = "" else t[kk] = vv end end end return temp end end local function serialize(name) local s = simplify(name) if s then return table.serialize(s,name) else return formatters[""](name) end end spreadsheets.simplify = simplify spreadsheets.serialize = serialize function spreadsheets.inspect(name) inspect(serialize(name)) end function spreadsheets.tocontext(name) context.tocontext(simplify(name)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-otr.mkvi0000644000175000017500000002302012130411274024267 0ustar norbertnorbert%D \module %D [ file=page-otr, %D version=2012.01.25, %D title=\CONTEXT\ Page Macros, %D subtitle=Output Routines, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Output Routines} %D This module will get some of the code from other modules. At the %D same time we provide a bit more control. % When issuing two \par\penalty-\plustenthousand's, only the first % triggers the otr. Is this an obscure feature or an optimization? \unprotect \def\m!otr{otr} % todo \installcorenamespace{outputroutine} \installswitchcommandhandler \??outputroutine {outputroutine} \??outputroutine \newtoks\t_page_otr_commands \newtoks\t_page_otr_tracers \unexpanded\def\defineoutputroutinecommand[#name]% doing multiple on one go saves syncing {\processcommalist[#name]\page_otr_commands_define} \unexpanded\def\page_otr_commands_define#name% {\ifcsname#name\endcsname \else \expandafter\let\csname#name\endcsname\relax \normalexpanded{\t_page_otr_commands{\the\t_page_otr_commands\noexpand\page_otr_commands_process{#name}}}% \fi} \let\page_otr_commands_process\gobbleoneargument \appendtoks \let\page_otr_commands_process\page_otr_specifics_preset \the\t_page_otr_commands \let\page_otr_commands_process\gobbleoneargument \to \everyswitchoutputroutine \unexpanded\def\page_otr_specifics_preset#1% {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#1}}% no inheritance of commands \ifx\page_otr_specifics_command\empty \writestatus{\currentoutputroutine}{- \expandafter\strippedcsname\csname#1\endcsname}% \expandafter\let\csname#1\endcsname\relax \else \writestatus{\currentoutputroutine}{+ \expandafter\strippedcsname\csname#1\endcsname}% \expandafter\let\csname#1\expandafter\endcsname\page_otr_specifics_command \fi} \unexpanded\def\page_otr_specifics_preset_normal#1% {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#1}}% no inheritance of commands \ifx\page_otr_specifics_command\empty \expandafter\let\csname#1\endcsname\relax \else \expandafter\let\csname#1\expandafter\endcsname\page_otr_specifics_command \fi} \unexpanded\def\page_otr_specifics_preset_traced#1% {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#1}}% no inheritance of commands \ifx\page_otr_specifics_command\empty \writestatus{\currentoutputroutine}{preset: - \expandafter\strippedcsname\csname#1\endcsname}% \expandafter\let\csname#1\endcsname\relax \else \writestatus{\currentoutputroutine}{preset: + \expandafter\strippedcsname\csname#1\endcsname}% \expandafter\let\csname#1\expandafter\endcsname\page_otr_specifics_command \fi} \let\page_otr_specifics_preset\page_otr_specifics_preset_normal \unexpanded\def\traceoutputroutines {\the\t_page_otr_tracers} \appendtoks \let\page_otr_specifics_preset\page_otr_specifics_preset_traced \to \t_page_otr_tracers %D We have a couple of output routines and the default one is %D the single column routine. Then there is a multicolumn variant %D that can be used mixed, and a columnset variant that is more %D exclusive. \installcorenamespace{otrtriggers} \newconstant\c_page_otr_eject_penalty \c_page_otr_eject_penalty -\plustenthousand \newconstant\c_page_otr_super_penalty \c_page_otr_super_penalty -\plustwentythousand \newcount \c_page_otf_trigger_penalty \c_page_otf_trigger_penalty -100010 \newif \ifinotr % we keep this (name) for old times sake \unexpanded\def\page_otr_message_b{\page_otr_message_s+} \unexpanded\def\page_otr_message_e{\page_otr_message_s-} \unexpanded\def\page_otr_message_s#1#2% {\writestatus \currentoutputroutine {#1\space \space #2\space \space p:\the\outputpenalty,\space r:\the\realpageno ,\space c:\number\mofcolumns,\space v:\the\vsize ,\space g:\the\pagegoal ,\space t:\the\pagetotal ,\space \ifdim\pagetotal>\pagegoal d:\the\dimexpr\pagetotal-\pagegoal\relax \fi}} \unexpanded\def\page_otr_trigger#1% {\begingroup \par \penalty#1% \endgroup} \unexpanded\def\installoutputroutine#1#2% \invoke \action {\global\advance\c_page_otf_trigger_penalty\minusone \edef#1{\page_otr_trigger{\number\c_page_otf_trigger_penalty}}% \setvalue{\??otrtriggers\number\c_page_otf_trigger_penalty}{#2}} \unexpanded\def\page_otr_triggered_output_routine_traced {\ifcsname\??otrtriggers\the\outputpenalty\endcsname \page_otr_message_b{special}% \csname\??otrtriggers\the\outputpenalty\endcsname \page_otr_message_e{special}% \else \page_otr_message_b{normal}% \page_otr_command_routine \page_otr_message_e{normal}% \fi} \unexpanded\def\page_otr_triggered_output_routine_normal {\ifcsname\??otrtriggers\the\outputpenalty\endcsname \csname\??otrtriggers\the\outputpenalty\endcsname \else \page_otr_command_routine \fi} \let\page_otr_triggered_output_routine\page_otr_triggered_output_routine_normal \appendtoks \let\page_otr_triggered_output_routine\page_otr_triggered_output_routine_traced \to \t_page_otr_tracers %D The real routine handler: \ifdefined\everybeforeoutput \else \newtoks\everybeforeoutput \fi \ifdefined\everyafteroutput \else \newtoks\everyafteroutput \fi \def\page_otf_set_engine_output_routine#1% {\global\output {\inotrtrue \the\everybeforeoutput #1\relax \the\everyafteroutput}} \page_otf_set_engine_output_routine\page_otr_triggered_output_routine \installoutputroutine\synchronizeoutput {\ifvoid\normalpagebox\else \unvbox\normalpagebox \pagediscards \fi} \installoutputroutine\discardpage {\setbox\scratchbox\box\normalpagebox} % todo: \resetpagebreak -> everyejectpage \def\page_otr_trigger_output_routine {\par \ifvmode \penalty\c_page_otr_eject_penalty \fi \resetpagebreak} \def\page_otr_fill_and_eject_page {\par \ifvmode \vfill \penalty\c_page_otr_eject_penalty \fi \resetpagebreak} \def\page_otr_eject_page {\par \ifvmode \ifdim\pagetotal>\pagegoal \else \normalvfil \fi \penalty\c_page_otr_eject_penalty \fi \resetpagebreak} \def\page_otr_eject_page_and_flush_inserts % can be an installed one {\par \ifvmode \ifdim\pagetotal>\pagegoal \else \normalvfil \fi \penalty\c_page_otr_super_penalty \fi \resetpagebreak} \def\page_otr_check_for_pending_inserts {\ifnum\outputpenalty>\c_page_otr_super_penalty \else \ifnum\insertpenalties>\zerocount % something is being held over so we force a new page \page_otr_force_another_page \fi \fi} \def\page_otr_force_another_page {% we should actually remove the dummy line in the otr \hbox to \hsize{}% \kern-\topskip \nobreak \vfill \penalty\c_page_otr_super_penalty \resetpagebreak} %D For those who've read the plain \TEX\ book, we provide the next %D macro: \unexpanded\def\bye {\writestatus\m!system{Sorry, you're not done yet, so no goodbye!}} %D We define a few constants because that (1) provides some checking %D and (2) is handier when aligning definitions (checks nicer). \definesystemconstant{page_otr_command_routine} \definesystemconstant{page_otr_command_package_contents} \definesystemconstant{page_otr_command_set_vsize} \definesystemconstant{page_otr_command_set_hsize} \definesystemconstant{page_otr_command_synchronize_hsize} \definesystemconstant{page_otr_command_next_page} \definesystemconstant{page_otr_command_next_page_and_inserts} \definesystemconstant{page_otr_command_set_top_insertions} \definesystemconstant{page_otr_command_set_bottom_insertions} \definesystemconstant{page_otr_command_flush_top_insertions} \definesystemconstant{page_otr_command_flush_bottom_insertions} \definesystemconstant{page_otr_command_check_if_float_fits} \definesystemconstant{page_otr_command_set_float_hsize} \definesystemconstant{page_otr_command_flush_float_box} \definesystemconstant{page_otr_command_side_float_output} \definesystemconstant{page_otr_command_synchronize_side_floats} \definesystemconstant{page_otr_command_flush_floats} \definesystemconstant{page_otr_command_flush_side_floats} \definesystemconstant{page_otr_command_flush_saved_floats} \definesystemconstant{page_otr_command_flush_margin_blocks} \definesystemconstant{singlecolumn} \definesystemconstant{multicolumn} % will move \definesystemconstant{columnset} % will move \defineoutputroutinecommand [\s!page_otr_command_routine, \s!page_otr_command_package_contents, \s!page_otr_command_set_vsize, \s!page_otr_command_set_hsize, \s!page_otr_command_synchronize_hsize, % for columns of different width \s!page_otr_command_next_page, \s!page_otr_command_next_page_and_inserts, \s!page_otr_command_set_top_insertions, \s!page_otr_command_set_bottom_insertions, \s!page_otr_command_flush_top_insertions, \s!page_otr_command_flush_bottom_insertions, \s!page_otr_command_check_if_float_fits, \s!page_otr_command_set_float_hsize, \s!page_otr_command_flush_float_box, \s!page_otr_command_side_float_output, % name will change as will hooks \s!page_otr_command_synchronize_side_floats, \s!page_otr_command_flush_floats, \s!page_otr_command_flush_side_floats, \s!page_otr_command_flush_saved_floats, \s!page_otr_command_flush_margin_blocks] \appendtoks \setupoutputroutine[\s!singlecolumn]% \to \everydump \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/type-fbk.mkiv0000644000175000017500000000532211754241457024316 0ustar norbertnorbert%D \module %D [ file=type-sfbk, %D version=2005.02.04, % moved from ini/def/set %D title=\CONTEXT\ Typescript Macros, %D subtitle=Fallbacks, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \definetypescriptprefix [\s!serif] [\s!Serif] \definetypescriptprefix [\s!sans] [\s!Sans] \definetypescriptprefix [\s!mono] [\s!Mono] \definefontsynonym [\s!DefaultFont] [\s!file:lmmonoproplt10-regular] \startsetups [\s!font:\s!fallback:\s!serif] \definefontsynonym[\s!Serif] [\s!DefaultFont] \definefontsynonym[\s!SerifBold] [\s!Serif] \definefontsynonym[\s!SerifItalic] [\s!Serif] \definefontsynonym[\s!SerifSlanted] [\s!SerifItalic] \definefontsynonym[\s!SerifBoldItalic] [\s!Serif] \definefontsynonym[\s!SerifBoldSlanted][\s!SerifBoldItalic] \definefontsynonym[\s!SerifCaps] [\s!Serif] [\s!features=\s!smallcaps] \stopsetups \startsetups [\s!font:\s!fallback:\s!sans] \definefontsynonym[\s!Sans] [\s!DefaultFont] \definefontsynonym[\s!SansBold] [\s!Sans] \definefontsynonym[\s!SansItalic] [\s!Sans] \definefontsynonym[\s!SansSlanted] [\s!SansItalic] \definefontsynonym[\s!SansBoldItalic] [\s!Sans] \definefontsynonym[\s!SansBoldSlanted][\s!SansBoldItalic] \definefontsynonym[\s!SansCaps] [\s!Sans] [\s!features=\s!smallcaps] \stopsetups \startsetups [\s!font:\s!fallback:\s!mono] \definefontsynonym[\s!Mono] [\s!DefaultFont] \definefontsynonym[\s!MonoBold] [\s!Mono] \definefontsynonym[\s!MonoItalic] [\s!Mono] \definefontsynonym[\s!MonoSlanted] [\s!MonoItalic] \definefontsynonym[\s!MonoBoldItalic] [\s!Mono] \definefontsynonym[\s!MonoBoldSlanted][\s!MonoBoldItalic] \definefontsynonym[\s!MonoCaps] [\s!Mono] [\s!features=\s!smallcaps] \stopsetups \starttypescript [\s!serif,\s!sans,\s!mono] [\s!fallback] \setups[\s!font:\s!fallback:\typescriptone] \stoptypescript \startsetups [\s!font:allbold:\s!serif] \definefontsynonym[\s!Serif] [\s!SerifBold] \definefontsynonym[\s!SerifItalic] [\s!SerifBoldItalic] \definefontsynonym[\s!SerifSlanted][\s!SerifBoldSlanted] %definefontsynonym[\s!SerifCaps] [\s!SerifBold] \stopsetups \startsetups [\s!font:allbold:\s!sans] \definefontsynonym[\s!Sans] [\s!SansBold] \definefontsynonym[\s!SansItalic] [\s!SansBoldItalic] \definefontsynonym[\s!SansSlanted][\s!SansBoldSlanted] %definefontsynonym[\s!SansCaps] [\s!SansBold] \stopsetups \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/colo-rgb.mkii0000644000175000017500000003311411754241457024264 0ustar norbertnorbert%D \module %D [ file=colo-rgb, %D version=1995.01.01, %D title=\CONTEXT\ Color Macros, %D subtitle=RGB, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Just to give users a start we define some colors. While %D switching fonts is as international as can be, thanks to the %D mnemonics, naming colors is very interface dependant. To %D support international setups, we define both english and %D interface dependant colors. We use the color inheritance %D mechanisms to implement the interface dependant ones. %D First we define some simple primary \cap{RGB} and \cap{CMYK} %D colors. All colors are defined in \cap{RGB} color space. \definecolor [red] [r=1, g=0, b=0] \definecolor [green] [r=0, g=1, b=0] \definecolor [blue] [r=0, g=0, b=1] \definecolor [cyan] [r=0, g=1, b=1] \definecolor [magenta] [r=1, g=0, b=1] \definecolor [yellow] [r=1, g=1, b=0] \definecolor [white] [s=1] % [r=1, g=1, b=1] \definecolor [black] [s=0] \definecolor [gray] [s=.9] \definecolor [darkred] [r=.8, g=0, b=0] \definecolor [middlered] [r=.9, g=0, b=0] \definecolor [lightred] [r=1, g=0, b=0] \definecolor [darkgreen] [r=0, g=.6, b=0] \definecolor [middlegreen] [r=0, g=.8, b=0] \definecolor [lightgreen] [r=0, g=1, b=0] \definecolor [darkblue] [r=0, g=0, b=.8] \definecolor [middleblue] [r=0, g=0, b=.9] \definecolor [lightblue] [r=0, g=0, b=1] \definecolor [darkcyan] [r=.6, g=.8, b=.8] \definecolor [middlecyan] [r=0, g=.8, b=.8] \definecolor [darkmagenta] [r=.8, g=.6, b=.8] \definecolor [middlemagenta] [r=1, g=0, b=.6] \definecolor [darkyellow] [r=.8, g=.8, b=.6] \definecolor [middleyellow] [r=1, g=1, b=.2] \definecolor [darkgray] [s=.5] \definecolor [middlegray] [s=.7] \definecolor [lightgray] [s=.9] %D These colors are mapped to interface dependant colornames. \startinterface dutch \definecolor [rood] [red] \definecolor [groen] [green] \definecolor [blauw] [blue] \definecolor [cyaan] [cyan] \definecolor [magenta] [magenta] \definecolor [geel] [yellow] \definecolor [wit] [white] \definecolor [grijs] [gray] \definecolor [zwart] [black] \definecolor [donkerrood] [darkred] \definecolor [middelrood] [middlered] \definecolor [lichtrood] [lightred] \definecolor [donkergroen] [darkgreen] \definecolor [middelgroen] [middlegreen] \definecolor [lichtgroen] [lightgreen] \definecolor [donkerblauw] [darkblue] \definecolor [middelblauw] [middleblue] \definecolor [lichtblauw] [lightblue] \definecolor [donkercyaan] [darkcyan] \definecolor [middelcyaan] [middlecyan] \definecolor [donkermagenta] [darkmagenta] \definecolor [middelmagenta] [middlemagenta] \definecolor [donkergeel] [darkyellow] \definecolor [middelgeel] [middleyellow] \definecolor [donkergrijs] [darkgray] \definecolor [middengrijs] [middlegray] \definecolor [lichtgrijs] [lightgray] \stopinterface \startinterface german \definecolor [rot] [red] \definecolor [gruen] [green] \definecolor [blau] [blue] \definecolor [cyan] [cyan] \definecolor [magenta] [magenta] \definecolor [gelb] [yellow] \definecolor [weiss] [white] \definecolor [grau] [gray] \definecolor [schwarz] [black] \definecolor [dunkelrot] [darkred] \definecolor [mittelrot] [middlered] \definecolor [hellrot] [lightred] \definecolor [dunkelgruen] [darkgreen] \definecolor [mittelgruen] [middlegreen] \definecolor [hellgruen] [lightgreen] \definecolor [dunkelblau] [darkblue] \definecolor [mittelblau] [middleblue] \definecolor [hellblau] [lightblue] \definecolor [dunkelcyan] [darkcyan] \definecolor [mittelcyan] [middlecyan] \definecolor [dunkelmagenta] [darkmagenta] \definecolor [mittelmagenta] [middlemagenta] \definecolor [dunkelgelb] [darkyellow] \definecolor [mittelgelb] [middleyellow] \definecolor [dunkelgrau] [darkgray] \definecolor [mittelgrau] [middlegray] \definecolor [hellgrau] [lightgray] \stopinterface \startinterface czech \definecolor [cervena] [red] \definecolor [zelena] [green] \definecolor [modra] [blue] \definecolor [azurova] [cyan] \definecolor [fialova] [magenta] \definecolor [zluta] [yellow] \definecolor [bila] [white] \definecolor [cerna] [black] \definecolor [tmavecervena] [darkred] \definecolor [strednecervena] [middlered] \definecolor [svetlecervena] [lightred] \definecolor [tmavezelena] [darkgreen] \definecolor [strednezelena] [middlegreen] \definecolor [svetlezelena] [lightgreen] \definecolor [tmavemodra] [darkblue] \definecolor [strednemodra] [middleblue] \definecolor [svetlemodra] [lightblue] \definecolor [tmaveazurova] [darkcyan] \definecolor [stredneazurova] [middlecyan] \definecolor [tmavefialova] [darkmagenta] \definecolor [strednefialova] [middlemagenta] \definecolor [tmavezluta] [darkyellow] \definecolor [strednezluta] [middleyellow] \definecolor [tmaveseda] [darkgray] \definecolor [stredneseda] [middlegray] \definecolor [svetleseda] [lightgray] \stopinterface \startinterface italian \definecolor [rosso] [red] \definecolor [verde] [green] \definecolor [blu] [blue] \definecolor [azzurro] [cyan] \definecolor [turchino] [cyan] \definecolor [ciano] [cyan] \definecolor [cremisi] [magenta] \definecolor [giallo] [yellow] \definecolor [bianco] [white] \definecolor [grigio] [gray] \definecolor [nero] [black] \definecolor [rossoscuro] [darkred] \definecolor [rossomedio] [middlered] \definecolor [rossochiaro] [lightred] \definecolor [verdescuro] [darkgreen] \definecolor [verdemedio] [middlegreen] \definecolor [verdechiaro] [lightgreen] \definecolor [bluscuro] [darkblue] \definecolor [blumedio] [middleblue] \definecolor [bluchiaro] [lightblue] \definecolor [azzurroscuro] [darkcyan] \definecolor [azzurrochiaro] [middlecyan] \definecolor [cremisiscuro] [darkmagenta] \definecolor [cremisichiaro] [middlemagenta] \definecolor [gialloscuro] [darkyellow] \definecolor [giallomedio] [middleyellow] \definecolor [grigioscuro] [darkgray] \definecolor [grigiomedio] [middlegray] \definecolor [grigiochiaro] [lightgray] \stopinterface \startinterface romanian \definecolor [rosu] [red] \definecolor [verde] [green] \definecolor [albastru] [blue] \definecolor [cian] [cyan] \definecolor [magenta] [magenta] \definecolor [galben] [yellow] \definecolor [alb] [white] \definecolor [gri] [gray] \definecolor [negru] [black] \definecolor [rosuinchis] [darkred] \definecolor [rosumediu] [middlered] \definecolor [rosudeschis] [lightred] \definecolor [verdeinchis] [darkgreen] \definecolor [verdemediu] [middlegreen] \definecolor [verdedeschis] [lightgreen] \definecolor [albastruinchis] [darkblue] \definecolor [albastrumediu] [middleblue] \definecolor [albastrudeschis] [lightblue] \definecolor [cianinchis] [darkcyan] \definecolor [cianmediu] [middlecyan] \definecolor [magentainchis] [darkmagenta] \definecolor [magentamediu] [middlemagenta] \definecolor [galbeninchis] [darkyellow] \definecolor [galbenmediu] [middleyellow] \definecolor [griinchis] [darkgray] \definecolor [grimediu] [middlegray] \definecolor [grideschis] [lightgray] \stopinterface %D Like colors, we first define the english colorgroups. These %D colorgroups are tuned for distinctive gray scale printing. % todo : more efficient and real gray \definecolorgroup [gray] [0.95:0.95:0.95, 0.90:0.90:0.90, 0.80:0.80:0.80, 0.70:0.70:0.70, 0.60:0.60:0.60, 0.50:0.50:0.50, 0.40:0.40:0.40, 0.30:0.30:0.30, 0.20:0.20:0.20, 0.10:0.10:0.10, 0.00:0.00:0.00] \definecolorgroup [red] [1.00:0.90:0.90, 1.00:0.80:0.80, 1.00:0.70:0.70, 1.00:0.55:0.55, 1.00:0.40:0.40, 1.00:0.25:0.25, 1.00:0.15:0.15, 0.90:0.00:0.00] \definecolorgroup [green] [0.90:1.00:0.90, 0.70:1.00:0.70, 0.50:1.00:0.50, 0.30:1.00:0.30, 0.15:0.90:0.15, 0.00:0.80:0.00, 0.00:0.65:0.00, 0.00:0.50:0.00] \definecolorgroup [blue] [0.90:0.95:1.00, 0.80:0.90:1.00, 0.55:0.85:1.00, 0.30:0.80:1.00, 0.15:0.75:1.00, 0.00:0.70:1.00, 0.00:0.55:1.00, 0.00:0.40:1.00] \definecolorgroup [cyan] [0.80:1.00:1.00, 0.60:1.00:1.00, 0.30:1.00:1.00, 0.00:0.95:0.95, 0.00:0.85:0.85, 0.00:0.75:0.75, 0.00:0.60:0.60, 0.00:0.50:0.50] \definecolorgroup [magenta] [1.00:0.90:1.00, 1.00:0.80:1.00, 1.00:0.65:1.00, 1.00:0.50:1.00, 1.00:0.35:1.00, 1.00:0.15:1.00, 0.90:0.05:0.90, 0.80:0.00:0.80] \definecolorgroup [yellow] [1.00:1.00:0.70, 1.00:1.00:0.00, 1.00:0.85:0.05, 1.00:0.70:0.00, 1.00:0.55:0.00, 0.95:0.40:0.00, 0.80:0.30:0.00, 0.60:0.30:0.00] \definecolorgroup [red*] [1.00:0.95:0.95, 1.00:0.90:0.90, 1.00:0.80:0.80, 1.00:0.70:0.70, 1.00:0.60:0.60, 1.00:0.50:0.50, 1.00:0.40:0.40, 1.00:0.30:0.30] \definecolorgroup [green*] [0.95:1.00:0.95, 0.90:1.00:0.90, 0.80:1.00:0.80, 0.70:1.00:0.70, 0.60:1.00:0.60, 0.50:1.00:0.50, 0.40:1.00:0.40, 0.30:1.00:0.30] \definecolorgroup [blue*] [0.95:0.95:1.00, 0.90:0.90:1.00, 0.80:0.80:1.00, 0.70:0.70:1.00, 0.60:0.60:1.00, 0.50:0.50:1.00, 0.40:0.40:1.00, 0.30:0.30:1.00] \definecolorgroup [yellow*] [1.00:1.00:0.10, 1.00:1.00:0.00, 0.90:0.90:0.00, 0.80:0.80:0.00, 0.70:0.70:0.00, 0.60:0.60:0.00, 0.50:0.50:0.00, 0.40:0.40:0.00] %D For the sake of implementing interface dependant color %D groups we support colorgroup duplication. \startinterface dutch \definecolorgroup [grijs] [gray] \definecolorgroup [rood] [red] \definecolorgroup [groen] [green] \definecolorgroup [blauw] [blue] \definecolorgroup [cyaan] [cyan] \definecolorgroup [magenta] [magenta] \definecolorgroup [geel] [yellow] \definecolorgroup [rood*] [red*] \definecolorgroup [groen*] [green*] \definecolorgroup [blauw*] [blue*] \definecolorgroup [geel*] [yellow*] \stopinterface \startinterface german \definecolorgroup [grau] [gray] \definecolorgroup [rot] [red] \definecolorgroup [gruen] [green] \definecolorgroup [blau] [blue] \definecolorgroup [cyan] [cyan] \definecolorgroup [magenta] [magenta] \definecolorgroup [gelb] [yellow] \definecolorgroup [rot*] [red*] \definecolorgroup [gruen*] [green*] \definecolorgroup [blau*] [blue*] \definecolorgroup [gelb*] [yellow*] \stopinterface \startinterface czech \definecolorgroup [seda] [gray] \definecolorgroup [cervena] [red] \definecolorgroup [zelena] [green] \definecolorgroup [modra] [blue] \definecolorgroup [azurova] [cyan] \definecolorgroup [fialova] [magenta] \definecolorgroup [zluta] [yellow] \definecolorgroup [cervena*] [red*] \definecolorgroup [zelena*] [green*] \definecolorgroup [modra*] [blue*] \definecolorgroup [zluta*] [yellow*] \stopinterface \startinterface italian \definecolorgroup [grigio] [gray] \definecolorgroup [rosso] [red] \definecolorgroup [verde] [green] \definecolorgroup [blu] [blue] \definecolorgroup [ciano] [cyan] \definecolorgroup [azzurro] [cyan] \definecolorgroup [turchino][cyan] \definecolorgroup [magenta] [magenta] \definecolorgroup [cremisi] [magenta] \definecolorgroup [giallo] [yellow] \definecolorgroup [rosso*] [red*] \definecolorgroup [verde*] [green*] \definecolorgroup [blu*] [blue*] \definecolorgroup [giallo*] [yellow*] \stopinterface %D The next set of color palets is quite language independant. %D These palets are meant as examples. \definepalet [alfa] [ top=red:7, bottom=green:6, up=blue:5, down=cyan:4, strange=magenta:3, charm=yellow:2] \definepalet [beta] [ top=red:7, bottom=green:5, up=blue:3, down=cyan:6, strange=magenta:2, charm=yellow:1] \definepalet [gamma] [ top=red:2, bottom=green:5, up=blue:3, down=cyan:6, strange=magenta:7, charm=yellow:4] \definepalet [delta] [ top=yellow*:5, bottom=yellow*:3, up=yellow*:2, down=magenta:6, strange=blue:4, charm=blue:1] \definepalet [epsilon] [ top=cyan:7, bottom=cyan:5, up=blue:3, down=yellow:6, strange=yellow:4, charm=yellow:2] \definepalet [zeta] [ top=red:6, bottom=green:5, up=blue:7, down=cyan:4, strange=magenta:3, charm=yellow:2] %D The next four colors are used for typesetting verbatim \TEX\ %D in color. \definecolor [texcolorone] [middlered] \definecolor [texcolortwo] [middlegreen] \definecolor [texcolorthree] [middleblue] \definecolor [texcolorfour] [darkyellow] %D Bonus (needed for FO test): \definecolor [orange] [r=1,g=.5] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-prm.lua0000644000175000017500000004753712130411274024164 0ustar norbertnorbert-- the tex table has overlap return { ["aleph"]={ "AlephVersion", "Alephminorversion", "Alephrevision", "Alephversion", "Omegaminorversion", "Omegarevision", "Omegaversion", "boxdir", "pagebottomoffset", "pagerightoffset", }, ["etex"]={ "botmarks", "clubpenalties", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "detokenize", "dimexpr", "displaywidowpenalties", "eTeXVersion", "eTeXminorversion", "eTeXrevision", "eTeXversion", "everyeof", "firstmarks", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "ifcsname", "ifdefined", "iffontchar", "interactionmode", "interlinepenalties", "lastlinefit", "lastnodetype", "marks", "muexpr", "mutoglue", "numexpr", "pagediscards", "parshapedimen", "parshapeindent", "parshapelength", "predisplaydirection", "protected", "readline", "savinghyphcodes", "savingvdiscards", "scantokens", "showgroups", "showifs", "showtokens", "splitbotmarks", "splitdiscards", "splitfirstmarks", "topmarks", "tracingassigns", "tracinggroups", "tracingifs", "tracingnesting", "tracingscantokens", "unexpanded", "unless", "widowpenalties", }, ["luatex"]={ "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Umathaccent", --"Umathaccents", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", --"Umathbotaccent", "Umathchar", "Umathchardef", "Umathcharnum", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervgap", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathspaceafterscript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvgap", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervgap", "Uoverdelimiter", "Uradical", "Uroot", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "alignmark", "aligntab", "attribute", "attributedef", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "fontid", "formatname", "gleaders", "ifabsdim", "ifabsnum", "ifprimitive", "initcatcodetable", "latelua", "luaescapestring", "luastartup", "luatexdatestamp", "luatexrevision", "luatexversion", "mathstyle", "nokerns", "noligs", "outputbox", "pageleftoffset", "pagetopoffset", "postexhyphenchar", "posthyphenchar", "preexhyphenchar", "prehyphenchar", "primitive", "savecatcodetable", "scantextokens", "suppressfontnotfounderror", "suppressifcsnameerror", "suppresslongerror", "suppressoutererror", "synctex", }, ["omega"]={ "OmegaVersion", "bodydir", "chardp", "charht", "charit", "charwd", "leftghost", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "mathdir", "odelcode", "odelimiter", "omathaccent", "omathchar", "omathchardef", "omathcode", "oradical", "pagedir", "pageheight", "pagewidth", "pardir", "rightghost", "textdir", }, ["pdftex"]={ "efcode", "expanded", "ifincsname", "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "leftmarginkern", "letterspacefont", "lpcode", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagecolordepth", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfoptionpdfminorversion", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformname", "pdfxformresources", "pdfximage", "pdfximagebbox", "quitvmode", "rightmarginkern", "rpcode", "tagcode", }, ["tex"]={ "-", "/", "AlephVersion", "Alephminorversion", "Alephrevision", "Alephversion", "OmegaVersion", "Omegaminorversion", "Omegarevision", "Omegaversion", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Umathaccent", --"Umathaccents", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", --"Umathbotaccent", "Umathchar", "Umathchardef", "Umathcharnum", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervgap", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathspaceafterscript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvgap", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervgap", "Uoverdelimiter", "Uradical", "Uroot", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "alignmark", "aligntab", "atop", "atopwithdelims", "attribute", "attributedef", "badness", "baselineskip", "batchmode", "begingroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "bodydir", "botmark", "botmarks", "box", "boxdir", "boxmaxdepth", "brokenpenalty", "catcode", "catcodetable", "char", "chardef", "chardp", "charht", "charit", "charwd", "cleaders", "clearmarks", "closein", "closeout", "clubpenalties", "clubpenalty", "copy", "count", "countdef", "cr", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "crcr", "csname", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "detokenize", "dimen", "dimendef", "dimexpr", "directlua", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalties", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "eTeXVersion", "eTeXminorversion", "eTeXrevision", "eTeXversion", "edef", "efcode", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyeof", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "expanded", "fam", "fi", "finalhyphendemerits", "firstmark", "firstmarks", "floatingpenalty", "font", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "fontdimen", "fontid", "fontname", "formatname", "futurelet", "gdef", "gleaders", "global", "globaldefs", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "hoffset", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifabsdim", "ifabsnum", "ifcase", "ifcat", "ifcsname", "ifdefined", "ifdim", "ifeof", "iffalse", "iffontchar", "ifhbox", "ifhmode", "ifincsname", "ifinner", "ifmmode", "ifnum", "ifodd", "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "ifprimitive", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "immediate", "indent", "initcatcodetable", "input", "inputlineno", "insert", "insertpenalties", "interactionmode", "interlinepenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastlinefit", "lastnodetype", "lastpenalty", "lastskip", "latelua", "lccode", "leaders", "left", "leftghost", "lefthyphenmin", "leftmarginkern", "leftskip", "leqno", "let", "letterspacefont", "limits", "linepenalty", "lineskip", "lineskiplimit", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "long", "looseness", "lower", "lowercase", "lpcode", "luaescapestring", "luastartup", "luatexdatestamp", "luatexrevision", "luatexversion", "mag", "mark", "marks", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathdir", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathstyle", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "muexpr", "multiply", "muskip", "muskipdef", "mutoglue", "newlinechar", "noalign", "noboundary", "noexpand", "noindent", "nokerns", "noligs", "nolimits", "nolocaldirs", "nolocalwhatsits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "numexpr", "odelcode", "odelimiter", "omathaccent", "omathchar", "omathchardef", "omathcode", "omit", "openin", "openout", "or", "oradical", "outer", "output", "outputbox", "outputpenalty", "over", "overfullrule", "overline", "overwithdelims", "pagebottomoffset", "pagedepth", "pagedir", "pagediscards", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageheight", "pageleftoffset", "pagerightoffset", "pageshrink", "pagestretch", "pagetopoffset", "pagetotal", "pagewidth", "par", "pardir", "parfillskip", "parindent", "parshape", "parshapedimen", "parshapeindent", "parshapelength", "parskip", "patterns", "pausing", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagecolordepth", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfoptionpdfminorversion", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformname", "pdfxformresources", "pdfximage", "pdfximagebbox", "penalty", "postdisplaypenalty", "postexhyphenchar", "posthyphenchar", "predisplaydirection", "predisplaypenalty", "predisplaysize", "preexhyphenchar", "prehyphenchar", "pretolerance", "prevdepth", "prevgraf", "primitive", "protected", "quitvmode", "radical", "raise", "read", "readline", "relax", "relpenalty", "right", "rightghost", "righthyphenmin", "rightmarginkern", "rightskip", "romannumeral", "rpcode", "savecatcodetable", "savinghyphcodes", "savingvdiscards", "scantextokens", "scantokens", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showgroups", "showifs", "showlists", "showthe", "showtokens", "skewchar", "skip", "skipdef", --"skipexpr", "spacefactor", "spaceskip", "span", "special", "splitbotmark", "splitbotmarks", "splitdiscards", "splitfirstmark", "splitfirstmarks", "splitmaxdepth", "splittopskip", "string", "suppressfontnotfounderror", "suppressifcsnameerror", "suppresslongerror", "suppressoutererror", "synctex", "tabskip", "tagcode", "textdir", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "toks", "toksdef", "tolerance", "topmark", "topmarks", "topskip", "tracingassigns", "tracingcommands", "tracinggroups", "tracingifs", "tracinglostchars", "tracingmacros", "tracingnesting", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingscantokens", "tracingstats", "uccode", "uchyph", "underline", "unexpanded", "unhbox", "unhcopy", "unkern", "unless", "unpenalty", "unskip", "unvbox", "unvcopy", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "voffset", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalties", "widowpenalty", "write", "xdef", "xleaders", "xspaceskip", "year", }, ["xetex"]={ "XeTeXversion", }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/trac-tex.mkiv0000644000175000017500000000252711754241457024330 0ustar norbertnorbert%D \module %D [ file=trac-tex, %D version=2009.07.20, %D title=\CONTEXT\ Tracking Macros, %D subtitle=\TEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Tracking Macros / TeX} \registerctxluafile{trac-tex}{1.001} %D All tracing flags at the \TEX\ end will be redone this way so %D that we have a similar mechanism for \TEX\ and \LUA. Also, the %D currently used if's might become conditionals. \unprotect % \def\enabletextracerwhatever {...} % \def\disabletextracerwhatever{...} \let\alltextracers\empty % so that we can report available tracers \unexpanded\def\installtextracer#1% {\addtocommalist{#1}\alltextracers} \unexpanded\def\enabletextracers [#1]{\processcommalist[#1]\syst_textracers_enable } \unexpanded\def\disabletextracers[#1]{\processcommalist[#1]\syst_textracers_disable} \def\syst_textracers_enable #1{\csname enabletracer#1\endcsname} \def\syst_textracers_disable#1{\csname disabletracer#1\endcsname} % The next one is for Taco, although we can use directives as well: \unexpanded\def\nomkivstatistics{\enabledirectives[system.nostatistics]} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-ini.mkvi0000644000175000017500000001460712161703335024314 0ustar norbertnorbert%D \module %D [ file=scrn-ini, %D version=2011.02.27, %D title=\CONTEXT\ Interaction Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Interaction Macros / Initialization} \unprotect \registerctxluafile{scrn-ini}{1.001} %D There is no interaction at all unless enabled by saying: %D %D \starttyping %D \setupinteraction[state=start] %D \stoptyping %D %D The other settings are: %D %D \showsetup{setupinteraction} \installcorenamespace{interaction} \installswitchcommandhandler \??interaction {interaction} \??interaction \appendtoks \ifx\previousinteraction\empty \checkinteractionstate \else\ifx\currentinteraction\previousinteraction \checkinteractionstate \fi\fi \to \everysetupinteraction \unexpanded\def\checkinteractionstate {\doifelse{\interactionparameter\c!state}\v!start {\locationtrue \setsystemmode \v!interaction}% {\locationfalse \resetsystemmode\v!interaction}} \def\doifelselocation % expandable {\iflocation \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \setupinteraction [\c!state=\v!stop] \appendtoks \setupinteraction % todo: remember info at the lua end (already possible) \to \everyjob % it makes no sense to create an environment as we will seldom have structured % interactionso a general start-stop will do % % \appendtoks % \setuevalue \currentinteraction {\scrn_interaction_direct{\currentinteraction}}% % \setuevalue{\e!start\currentinteraction}{\scrn_interaction_start {\currentinteraction}}% % \setuevalue{\e!stop \currentinteraction}{\scrn_interaction_stop }% % \to \everydefineinteraction % % \unexpanded\def\scrn_interaction_direct#1% % {\edef\currentinteraction{#1}} % % \unexpanded\def\scrn_interaction_start#1% % {\pushmacro\currentinteraction % \edef\currentinteraction{#1}} % % \unexpanded\def\scrn_interaction_stop % {\popmacro\currentinteraction} % % \unexpanded\def\setinteraction[#1]% % {\def\currentinteraction{#1}} % % \defineinteraction[\v!interaction] \unexpanded\def\startinteraction[#1]% {\pushmacro\currentinteraction \edef\currentinteraction{#1}} \unexpanded\def\stopinteraction {\popmacro\currentinteraction} \unexpanded\def\setinteraction[#1]% {\def\currentinteraction{#1}} \defineinteraction % keep it simple [\v!hidden] \setupinteraction [\v!hidden] [\c!state=\v!start, \c!color=, \c!contrastcolor=, \c!style=, \c!click=\v!off] %D As long as there a natural feeling of what can be considered %D hyper active or not, we have to tell users where they can %D possibly click. We've already seen a few macros that deal %D with this visualization, something we definitely do not let %D up to the viewer. One way of telling is using a distinctive %D typeface, another way is using color. %D %D There are two colors involved: one for normal hyperlinks, %D and one for those that point to the currentpage, the %D contrast color. \definecolor [interactioncolor] [r=0, g=.6, b=0] \definecolor [interactioncontrastcolor] [r=.8, g=0, b=0] %D The next few macros are responsible for highlighting hyper %D links. The first one, \type{\showlocation}, is used in those %D situations where the typeface is handled by the calling %D macro. %D When we're dealing with pure page references, contrast %D colors are used when we are already at the page mentioned. \unexpanded\def\setlocationcolorspecified#1% not grouped ! {\ifnum#1=\plusone \edef\askedcontrastcolor{\interactionparameter\c!contrastcolor}% \ifx\askedcontrastcolor\empty \useinteractioncolorparameter\c!color \else \useinteractioncolorparameter\c!contrastcolor \fi \else % we could just set and if > 0 set again \useinteractioncolorparameter\c!color \fi} \unexpanded\def\setlocationattributesspecified#1% not grouped ! {\ifnum#1=\plusone \edef\askedcontrastcolor{\interactionparameter\c!contrastcolor}% \ifx\askedcontrastcolor\empty \useinteractionstyleandcolor\c!style\c!color \else \useinteractionstyleandcolor\c!style\c!contrastcolor \fi \else % we could just set and if > 0 set again \useinteractionstyleandcolor\c!style\c!color \fi} \unexpanded\def\setlocationcolorspecspecified#1#2% \resolver {\ifnum#1=\plusone \edef\askedcontrastcolor{#2\c!contrastcolor}% \ifx\askedcontrastcolor\empty \colo_helpers_activate{#2\c!color}% \else \colo_helpers_activate\askedcontrastcolor \fi \else \colo_helpers_activate{#2\c!color}% \fi} \unexpanded\def\setlocationcolor {\setlocationcolorspecified \referencepagestate} \unexpanded\def\setlocationattributes{\setlocationattributesspecified\referencepagestate} \unexpanded\def\setlocationcolorspec {\setlocationcolorspecspecified \referencepagestate} \unexpanded\def\setlocationfont % not grouped ! {\useinteractionstyleparameter\c!style} \setupinteraction [\c!style=\v!bold, \c!color=interactioncolor, \c!contrastcolor=interactioncontrastcolor] %D Identity \def\scrn_identity_synchronize {\ctxcommand{setupidentity{ title = \!!bs\interactionparameter\c!title\!!es, subtitle = \!!bs\interactionparameter\c!subtitle\!!es, author = \!!bs\interactionparameter\c!author\!!es, creator = \!!bs ConTeXt - \contextversion\!!es, date = \!!bs\interactionparameter\c!date\!!es, keywords = \!!bs\interactionparameter\c!keyword\!!es, }}} \appendtoks \scrn_identity_synchronize \to \everysetupinteraction % this comes before starttext \appendtoks % not interfaced i.e. english \doifvariable{document}{metadata:author} {\setupinteraction [\c!author=\documentvariable{metadata:author}]}% \doifvariable{document}{metadata:title} {\setupinteraction [\c!title=\documentvariable{metadata:title}]}% \doifvariable{document}{metadata:subject} {\setupinteraction[\c!subject=\documentvariable{metadata:subject}]}% \doifvariable{document}{metadata:keywords}{\setupinteraction[\c!keyword=\documentvariable{metadata:keywords}]}% \to \everysetupdocument \setupinteraction [\c!title=, \c!subtitle=, \c!author=, \c!keyword=, \c!date=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-imp-mis.mkiv0000644000175000017500000000471611754241457025102 0ustar norbertnorbert%D \module %D [ file=meta-mis, %D version=2006.06.06, %D title=\METAPOST\ Graphics, %D subtitle=Misc Test Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 % p/s 1/false 1/true 2/false 2/true % % MKII 8.5 8.0 8.8 8.5 % MKIV 16.1 7.2 16.3 7.4 \startuseMPgraphic{mptopdf-test} prologues := 2; mpprocset := 1 ; fill fullcircle scaled 3cm withcolor red ; fill fullcircle scaled 2cm withcolor green ; fill fullcircle scaled 1cm withcolor blue ; currentpicture := currentpicture shifted (-4cm,0) ; fill fullcircle scaled 3cm withcolor cmyk(0,0,1,0) ; fill fullcircle scaled 2cm withcolor cmyk(0,1,0,0) ; fill fullcircle scaled 1cm withcolor cmyk(1,0,0,0) ; currentpicture := currentpicture shifted (-4cm,0) ; draw fullcircle scaled 3cm dashed evenly ; draw fullcircle scaled 2cm dashed withdots ; draw origin withpen pencircle scaled 3mm; currentpicture := currentpicture shifted (-4cm,0) ; fill fullcircle scaled 2cm shifted (-.5cm,+.5cm) withcolor transparent(1,.5,red); fill fullcircle scaled 2cm shifted (-.5cm,-.5cm) withcolor transparent(1,.5,red); fill fullcircle scaled 2cm shifted (+.5cm,+.5cm) withcolor transparent(1,.5,green); fill fullcircle scaled 2cm shifted (+.5cm,-.5cm) withcolor transparent(1,.5,cmyk(1,0,1,.5)); currentpicture := currentpicture shifted (12cm,-4cm) ; draw "o e p s" infont defaultfont scaled 2 shifted (-1cm,0) ; currentpicture := currentpicture shifted (-4cm,0) ; % bug: shift draw fullcircle scaled 3cm withpen pencircle yscaled 3mm xscaled 2mm rotated 30 ; draw fullcircle scaled 2cm withpen pencircle yscaled 3mm xscaled 2mm rotated 20 withcolor red ; filldraw fullcircle scaled 1cm withpen pencircle yscaled 3mm xscaled 2mm rotated 10 withcolor green ; currentpicture := currentpicture shifted (-4cm,0) ; % shade cannot handle shift circular_shade(fullcircle scaled 3cm,0,.2red,.9green) ; circular_shade(fullcircle scaled 3cm shifted(+4cm,0),0,cmyk(1,0,0,0),cmyk(0,1,0,0)) ; filldraw boundingbox currentpicture enlarged (-bbheight(currentpicture)/2+2.5mm) withpen pencircle scaled 1pt withcolor .5white ; \stopuseMPgraphic \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/cldf-ini.lua0000644000175000017500000007561412130411274024071 0ustar norbertnorbertif not modules then modules = { } end modules ['cldf-ini'] = { version = 1.001, comment = "companion to cldf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This started as an experiment: generating context code at the lua end. After all -- it is surprisingly simple to implement due to metatables. I was wondering if -- there was a more natural way to deal with commands at the lua end. Of course it's -- a bit slower but often more readable when mixed with lua code. It can also be handy -- when generating documents from databases or when constructing large tables or so. -- -- maybe optional checking against interface -- currently no coroutine trickery -- we could always use prtcatcodes (context.a_b_c) but then we loose protection -- tflush needs checking ... sort of weird that it's not a table -- __flushlines is an experiment and rather ugly so it will go away -- -- tex.print == line with endlinechar appended -- todo: context("%bold{total: }%s",total) -- todo: context.documentvariable("title") local tex = tex context = context or { } local context = context local format, gsub, validstring = string.format, string.gsub, string.valid local next, type, tostring, tonumber, setmetatable, unpack, select = next, type, tostring, tonumber, setmetatable, unpack, select local insert, remove, concat = table.insert, table.remove, table.concat local lpegmatch, lpegC, lpegS, lpegP, lpegCc, patterns = lpeg.match, lpeg.C, lpeg.S, lpeg.P, lpeg.Cc, lpeg.patterns local formatters = string.formatters -- using formatteds is slower in this case local texsprint = tex.sprint local textprint = tex.tprint local texprint = tex.print local texwrite = tex.write local texcount = tex.count local isnode = node.is_node -- after 0.65 just node.type local writenode = node.write local copynodelist = node.copy_list local catcodenumbers = catcodes.numbers local ctxcatcodes = catcodenumbers.ctxcatcodes local prtcatcodes = catcodenumbers.prtcatcodes local texcatcodes = catcodenumbers.texcatcodes local txtcatcodes = catcodenumbers.txtcatcodes local vrbcatcodes = catcodenumbers.vrbcatcodes local xmlcatcodes = catcodenumbers.xmlcatcodes local flush = texsprint local flushdirect = texprint local flushraw = texwrite local report_context = logs.reporter("cld","tex") local report_cld = logs.reporter("cld","stack") local processlines = true -- experiments.register("context.processlines", function(v) processlines = v end) -- for tracing it's easier to have two stacks local _stack_f_, _n_f_ = { }, 0 local _stack_n_, _n_n_ = { }, 0 local function _store_f_(ti) _n_f_ = _n_f_ + 1 _stack_f_[_n_f_] = ti return _n_f_ end local function _store_n_(ti) _n_n_ = _n_n_ + 1 _stack_n_[_n_n_] = ti return _n_n_ end local function _flush_f_(n) local sn = _stack_f_[n] if not sn then report_cld("data with id %a cannot be found on stack",n) else local tn = type(sn) if tn == "function" then if not sn() and texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! _stack_f_[n] = nil else -- keep, beware, that way the stack can grow end else if texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! writenode(sn) _stack_f_[n] = nil else writenode(copynodelist(sn)) -- keep, beware, that way the stack can grow end end end end local function _flush_n_(n) local sn = _stack_n_[n] if not sn then report_cld("data with id %a cannot be found on stack",n) elseif texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! writenode(sn) _stack_n_[n] = nil else writenode(copynodelist(sn)) -- keep, beware, that way the stack can grow end end function context.restart() _stack_f_, _n_f_ = { }, 0 _stack_n_, _n_n_ = { }, 0 end context._stack_f_ = _stack_f_ context._store_f_ = _store_f_ context._flush_f_ = _flush_f_ _cldf_ = _flush_f_ context._stack_n_ = _stack_n_ context._store_n_ = _store_n_ context._flush_n_ = _flush_n_ _cldn_ = _flush_n_ -- Should we keep the catcodes with the function? local catcodestack = { } local currentcatcodes = ctxcatcodes local contentcatcodes = ctxcatcodes local catcodes = { ctx = ctxcatcodes, ctxcatcodes = ctxcatcodes, context = ctxcatcodes, prt = prtcatcodes, prtcatcodes = prtcatcodes, protect = prtcatcodes, tex = texcatcodes, texcatcodes = texcatcodes, plain = texcatcodes, txt = txtcatcodes, txtcatcodes = txtcatcodes, text = txtcatcodes, vrb = vrbcatcodes, vrbcatcodes = vrbcatcodes, verbatim = vrbcatcodes, xml = xmlcatcodes, xmlcatcodes = xmlcatcodes, } local function pushcatcodes(c) insert(catcodestack,currentcatcodes) currentcatcodes = (c and catcodes[c] or tonumber(c)) or currentcatcodes contentcatcodes = currentcatcodes end local function popcatcodes() currentcatcodes = remove(catcodestack) or currentcatcodes contentcatcodes = currentcatcodes end context.pushcatcodes = pushcatcodes context.popcatcodes = popcatcodes -- -- -- local newline = patterns.newline local space = patterns.spacer local spacing = newline * space^0 local content = lpegC((1-spacing)^1) -- texsprint local emptyline = space^0 * newline^2 -- texprint("") local endofline = space^0 * newline * space^0 -- texsprint(" ") local simpleline = endofline * lpegP(-1) -- local verbose = lpegC((1-space-newline)^1) local beginstripper = (lpegS(" \t")^1 * newline^1) / "" local endstripper = beginstripper * lpegP(-1) local justaspace = space * lpegCc("") local justanewline = newline * lpegCc("") local function n_content(s) flush(contentcatcodes,s) end local function n_verbose(s) flush(vrbcatcodes,s) end local function n_endofline() flush(currentcatcodes," \r") end local function n_emptyline() flushdirect(currentcatcodes,"\r") end local function n_simpleline() flush(currentcatcodes," \r") end local n_exception = "" -- better a table specification function context.newtexthandler(specification) -- can also be used for verbose specification = specification or { } -- local s_catcodes = specification.catcodes -- local f_before = specification.before local f_after = specification.after -- local f_endofline = specification.endofline or n_endofline local f_emptyline = specification.emptyline or n_emptyline local f_simpleline = specification.simpleline or n_simpleline local f_content = specification.content or n_content local f_space = specification.space -- local p_exception = specification.exception -- if s_catcodes then f_content = function(s) flush(s_catcodes,s) end end -- local pattern if f_space then if p_exception then local content = lpegC((1-spacing-p_exception)^1) pattern = ( justaspace / f_space + justanewline / f_endofline + p_exception + content / f_content )^0 else local content = lpegC((1-space-endofline)^1) pattern = ( justaspace / f_space + justanewline / f_endofline + content / f_content )^0 end else if p_exception then local content = lpegC((1-spacing-p_exception)^1) pattern = simpleline / f_simpleline + ( emptyline / f_emptyline + endofline / f_endofline + p_exception + content / f_content )^0 else local content = lpegC((1-spacing)^1) pattern = simpleline / f_simpleline + ( emptyline / f_emptyline + endofline / f_endofline + content / f_content )^0 end end -- if f_before then pattern = (P(true) / f_before) * pattern end -- if f_after then pattern = pattern * (P(true) / f_after) end -- return function(str) return lpegmatch(pattern,str) end, pattern end function context.newverbosehandler(specification) -- a special variant for e.g. cdata in lxml-tex specification = specification or { } -- local f_line = specification.line or function() flushdirect("\r") end local f_space = specification.space or function() flush(" ") end local f_content = specification.content or n_verbose local f_before = specification.before local f_after = specification.after -- local pattern = justanewline / f_line -- so we get call{} + verbose / f_content + justaspace / f_space -- so we get call{} -- if specification.strip then pattern = beginstripper^0 * (endstripper + pattern)^0 else pattern = pattern^0 end -- if f_before then pattern = (lpegP(true) / f_before) * pattern end -- if f_after then pattern = pattern * (lpegP(true) / f_after) end -- return function(str) return lpegmatch(pattern,str) end, pattern end local flushlines = context.newtexthandler { content = n_content, endofline = n_endofline, emptyline = n_emptyline, simpleline = n_simpleline, } context.__flushlines = flushlines -- maybe context.helpers.flushtexlines context.__flush = flush context.__flushdirect = flushdirect -- The next variant is only used in rare cases (buffer to mp): local printlines_ctx = ( (newline) / function() texprint("") end + (1-newline)^1 / function(s) texprint(ctxcatcodes,s) end * newline^-1 )^0 local printlines_raw = ( (newline) / function() texprint("") end + (1-newline)^1 / function(s) texprint(s) end * newline^-1 )^0 function context.printlines(str,raw) -- todo: see if via file is useable if raw then lpegmatch(printlines_raw,str) else lpegmatch(printlines_ctx,str) end end -- This is the most reliable way to deal with nested buffers and other -- catcode sensitive data. local methodhandler = resolvers.methodhandler function context.viafile(data,tag) if data and data ~= "" then local filename = resolvers.savers.byscheme("virtual",validstring(tag,"viafile"),data) -- context.startregime { "utf" } context.input(filename) -- context.stopregime() end end -- -- -- "{" .. ti .. "}" is somewhat slower in a cld-mkiv run than "{",ti,"}" local containseol = patterns.containseol local function writer(parent,command,first,...) -- already optimized before call local t = { first, ... } flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes local direct = false for i=1,#t do local ti = t[i] local typ = type(ti) if direct then if typ == "string" or typ == "number" then flush(currentcatcodes,ti) else -- node.write report_context("error: invalid use of direct in %a, only strings and numbers can be flushed directly, not %a",command,typ) end direct = false elseif ti == nil then -- nothing elseif ti == "" then flush(currentcatcodes,"{}") elseif typ == "string" then -- is processelines seen ? if processlines and lpegmatch(containseol,ti) then flush(currentcatcodes,"{") local flushlines = parent.__flushlines or flushlines flushlines(ti) flush(currentcatcodes,"}") elseif currentcatcodes == contentcatcodes then flush(currentcatcodes,"{",ti,"}") else flush(currentcatcodes,"{") flush(contentcatcodes,ti) flush(currentcatcodes,"}") end elseif typ == "number" then -- numbers never have funny catcodes flush(currentcatcodes,"{",ti,"}") elseif typ == "table" then local tn = #ti if tn == 0 then local done = false for k, v in next, ti do if done then if v == "" then flush(currentcatcodes,",",k,'=') else flush(currentcatcodes,",",k,"={",v,"}") end else if v == "" then flush(currentcatcodes,"[",k,"=") else flush(currentcatcodes,"[",k,"={",v,"}") end done = true end end if done then flush(currentcatcodes,"]") else flush(currentcatcodes,"[]") end elseif tn == 1 then -- some 20% faster than the next loop local tj = ti[1] if type(tj) == "function" then flush(currentcatcodes,"[\\cldf{",_store_f_(tj),"}]") else flush(currentcatcodes,"[",tj,"]") end else -- is concat really faster than flushes here? probably needed anyway (print artifacts) for j=1,tn do local tj = ti[j] if type(tj) == "function" then ti[j] = "\\cldf{" .. _store_f_(tj) .. "}" end end flush(currentcatcodes,"[",concat(ti,","),"]") end elseif typ == "function" then flush(currentcatcodes,"{\\cldf{",_store_f_(ti),"}}") -- todo: ctx|prt|texcatcodes elseif typ == "boolean" then if ti then flushdirect(currentcatcodes,"\r") else direct = true end elseif typ == "thread" then report_context("coroutines not supported as we cannot yield across boundaries") elseif isnode(ti) then -- slow flush(currentcatcodes,"{\\cldn{",_store_n_(ti),"}}") else report_context("error: %a gets a weird argument %a",command,ti) end end end local generics = { } context.generics = generics local function indexer(parent,k) if type(k) == "string" then local c = "\\" .. tostring(generics[k] or k) local f = function(first,...) if first == nil then flush(currentcatcodes,c) else return writer(parent,c,first,...) end end parent[k] = f return f else return context -- catch end end -- Potential optimization: after the first call we know if there will be an -- argument. Of course there is the side effect that for instance abuse like -- context.NC(str) fails as well as optional arguments. So, we don't do this -- in practice. We just keep the next trick commented. The gain on some -- 100000 calls is not that large: 0.100 => 0.95 which is neglectable. -- -- local function constructor(parent,k,c,first,...) -- if first == nil then -- local f = function() -- flush(currentcatcodes,c) -- end -- parent[k] = f -- return f() -- else -- local f = function(...) -- return writer(parent,c,...) -- end -- parent[k] = f -- return f(first,...) -- end -- end -- -- local function indexer(parent,k) -- local c = "\\" .. tostring(generics[k] or k) -- local f = function(...) -- return constructor(parent,k,c,...) -- end -- parent[k] = f -- return f -- end -- only for internal usage: function context.constructcsonly(k) -- not much faster than the next but more mem efficient local c = "\\" .. tostring(generics[k] or k) rawset(context, k, function() flush(prtcatcodes,c) end) end function context.constructcs(k) local c = "\\" .. tostring(generics[k] or k) rawset(context, k, function(first,...) if first == nil then flush(prtcatcodes,c) else return writer(context,c,first,...) end end) end local function caller(parent,f,a,...) if not parent then -- so we don't need to test in the calling (slower but often no issue) elseif f ~= nil then local typ = type(f) if typ == "string" then if a then flush(contentcatcodes,formatters[f](a,...)) -- was currentcatcodes elseif processlines and lpegmatch(containseol,f) then local flushlines = parent.__flushlines or flushlines flushlines(f) else flush(contentcatcodes,f) end elseif typ == "number" then if a then flush(currentcatcodes,f,a,...) else flush(currentcatcodes,f) end elseif typ == "function" then -- ignored: a ... flush(currentcatcodes,"{\\cldf{",_store_f_(f),"}}") -- todo: ctx|prt|texcatcodes elseif typ == "boolean" then if f then if a ~= nil then local flushlines = parent.__flushlines or flushlines flushlines(a) else flushdirect(currentcatcodes,"\n") -- no \r, else issues with \startlines ... use context.par() otherwise end else if a ~= nil then -- no command, same as context(a,...) writer(parent,"",a,...) else -- ignored end end elseif typ == "thread" then report_context("coroutines not supported as we cannot yield across boundaries") elseif isnode(f) then -- slow -- writenode(f) flush(currentcatcodes,"\\cldn{",_store_n_(f),"}") else report_context("error: %a gets a weird argument %a","context",f) end end end local defaultcaller = caller setmetatable(context, { __index = indexer, __call = caller } ) -- now we tweak unprotect and protect function context.unprotect() -- at the lua end insert(catcodestack,currentcatcodes) currentcatcodes = prtcatcodes contentcatcodes = currentcatcodes -- at the tex end flush("\\unprotect") end function context.protect() -- at the tex end flush("\\protect") -- at the lua end currentcatcodes = remove(catcodestack) or currentcatcodes contentcatcodes = currentcatcodes end function context.sprint(...) -- takes catcodes as first argument flush(...) end function context.fprint(catcodes,fmt,first,...) if type(catcodes) == "number" then if first then flush(catcodes,formatters[fmt](first,...)) else flush(catcodes,fmt) end else if fmt then flush(formatters[catcodes](fmt,first,...)) else flush(catcodes) end end end function tex.fprint(fmt,first,...) -- goodie if first then flush(currentcatcodes,formatters[fmt](first,...)) else flush(currentcatcodes,fmt) end end -- logging local trace_stack = { } local normalflush = flush local normalflushdirect = flushdirect local normalflushraw = flushraw local normalwriter = writer local currenttrace = nil local nofwriters = 0 local nofflushes = 0 local visualizer = lpeg.replacer { { "\n","<>" }, { "\r","<>" }, } statistics.register("traced context", function() if nofwriters > 0 or nofflushes > 0 then return format("writers: %s, flushes: %s, maxstack: %s",nofwriters,nofflushes,_n_f_) end end) local tracedwriter = function(parent,...) -- also catcodes ? nofwriters = nofwriters + 1 local savedflush = flush local savedflushdirect = flushdirect -- unlikely to be used here local t, n = { "w : - : " }, 1 local traced = function(normal,catcodes,...) -- todo: check for catcodes local s = concat({...}) s = lpegmatch(visualizer,s) n = n + 1 t[n] = s normal(catcodes,...) end flush = function(...) traced(normalflush, ...) end flushdirect = function(...) traced(normalflushdirect,...) end normalwriter(parent,...) flush = savedflush flushdirect = savedflushdirect currenttrace(concat(t)) end -- we could reuse collapsed local traced = function(normal,one,two,...) nofflushes = nofflushes + 1 if two then -- only catcodes if 'one' is number normal(one,two,...) local catcodes = type(one) == "number" and one local arguments = catcodes and { two, ... } or { one, two, ... } local collapsed, c = { formatters["f : %s : "](catcodes or '-') }, 1 for i=1,#arguments do local argument = arguments[i] local argtype = type(argument) c = c + 1 if argtype == "string" then collapsed[c] = lpegmatch(visualizer,argument) elseif argtype == "number" then collapsed[c] = argument else collapsed[c] = formatters["<<%S>>"](argument) end end currenttrace(concat(collapsed)) else -- no catcodes normal(one) local argtype = type(one) if argtype == "string" then currenttrace(formatters["f : - : %s"](lpegmatch(visualizer,one))) elseif argtype == "number" then currenttrace(formatters["f : - : %s"](one)) else currenttrace(formatters["f : - : <<%S>>"](one)) end end end local tracedflush = function(...) traced(normalflush, ...) end local tracedflushdirect = function(...) traced(normalflushdirect,...) end local function pushlogger(trace) trace = trace or report_context insert(trace_stack,currenttrace) currenttrace = trace -- flush = tracedflush flushdirect = tracedflushdirect writer = tracedwriter -- context.__flush = flush context.__flushdirect = flushdirect -- return flush, writer, flushdirect end local function poplogger() currenttrace = remove(trace_stack) if not currenttrace then flush = normalflush flushdirect = normalflushdirect writer = normalwriter -- context.__flush = flush context.__flushdirect = flushdirect end return flush, writer, flushdirect end local function settracing(v) if v then return pushlogger(report_context) else return poplogger() end end -- todo: share flushers so that we can define in other files trackers.register("context.trace",settracing) context.pushlogger = pushlogger context.poplogger = poplogger context.settracing = settracing -- -- untested, no time now: -- -- local tracestack, tracestacktop = { }, false -- -- function context.pushtracing(v) -- insert(tracestack,tracestacktop) -- if type(v) == "function" then -- pushlogger(v) -- v = true -- else -- pushlogger() -- end -- tracestacktop = v -- settracing(v) -- end -- -- function context.poptracing() -- poplogger() -- tracestacktop = remove(tracestack) or false -- settracing(tracestacktop) -- end function context.getlogger() return flush, writer, flush_direct end local trace_cld = false trackers.register("context.files", function(v) trace_cld = v end) function context.runfile(filename) local foundname = resolvers.findtexfile(file.addsuffix(filename,"cld")) or "" if foundname ~= "" then local ok = dofile(foundname) if type(ok) == "function" then if trace_cld then report_context("begin of file %a (function call)",foundname) end ok() if trace_cld then report_context("end of file %a (function call)",foundname) end elseif ok then report_context("file %a is processed and returns true",foundname) else report_context("file %a is processed and returns nothing",foundname) end else report_context("unknown file %a",filename) end end -- some functions function context.direct(first,...) if first ~= nil then return writer(context,"",first,...) end end -- context.delayed (todo: lines) local delayed = { } context.delayed = delayed -- maybe also store them local function indexer(parent,k) local f = function(...) local a = { ... } return function() return context[k](unpack(a)) end end parent[k] = f return f end local function caller(parent,...) -- todo: nodes local a = { ... } return function() return context(unpack(a)) end end -- local function indexer(parent,k) -- local f = function(a,...) -- if not a then -- return function() -- return context[k]() -- end -- elseif select("#",...) == 0 then -- return function() -- return context[k](a) -- end -- elseif a then -- local t = { ... } -- return function() -- return context[k](a,unpack(t)) -- end -- end -- end -- parent[k] = f -- return f -- end -- -- local function caller(parent,a,...) -- todo: nodes -- if not a then -- return function() -- return context() -- end -- elseif select("#",...) == 0 then -- return function() -- return context(a) -- end -- elseif a then -- local t = { ... } -- return function() -- return context(a,unpack(t)) -- end -- end -- end setmetatable(delayed, { __index = indexer, __call = caller } ) -- context.nested (todo: lines) local nested = { } context.nested = nested local function indexer(parent,k) local f = function(...) local t, savedflush, n = { }, flush, 0 flush = function(c,f,s,...) -- catcodes are ignored n = n + 1 t[n] = s and concat{f,s,...} or f -- optimized for #args == 1 end context[k](...) flush = savedflush return concat(t) end parent[k] = f return f end local function caller(parent,...) local t, savedflush, n = { }, flush, 0 flush = function(c,f,s,...) -- catcodes are ignored n = n + 1 t[n] = s and concat{f,s,...} or f -- optimized for #args == 1 end context(...) flush = savedflush return concat(t) end setmetatable(nested, { __index = indexer, __call = caller } ) -- verbatim local verbatim = { } context.verbatim = verbatim local function indexer(parent,k) local command = context[k] local f = function(...) local savedcatcodes = contentcatcodes contentcatcodes = vrbcatcodes command(...) contentcatcodes = savedcatcodes end parent[k] = f return f end local function caller(parent,...) local savedcatcodes = contentcatcodes contentcatcodes = vrbcatcodes defaultcaller(parent,...) contentcatcodes = savedcatcodes end setmetatable(verbatim, { __index = indexer, __call = caller } ) -- formatted local formatted = { } context.formatted = formatted -- local function indexer(parent,k) -- local command = context[k] -- local f = function(fmt,...) -- command(formatters[fmt](...)) -- end -- parent[k] = f -- return f -- end local function indexer(parent,k) if type(k) == "string" then local c = "\\" .. tostring(generics[k] or k) local f = function(first,second,...) if first == nil then flush(currentcatcodes,c) elseif second then return writer(parent,c,formatters[first](second,...)) else return writer(parent,c,first) end end parent[k] = f return f else return context -- catch end end -- local function caller(parent,...) -- context.fprint(...) -- end local function caller(parent,catcodes,fmt,first,...) if type(catcodes) == "number" then if first then flush(catcodes,formatters[fmt](first,...)) else flush(catcodes,fmt) end else if fmt then flush(formatters[catcodes](fmt,first,...)) else flush(catcodes) end end end setmetatable(formatted, { __index = indexer, __call = caller } ) -- metafun (this will move to another file) local metafun = { } context.metafun = metafun local mpdrawing = "\\MPdrawing" local function caller(parent,f,a,...) if not parent then -- skip elseif f then local typ = type(f) if typ == "string" then if a then flush(currentcatcodes,mpdrawing,"{",formatters[f](a,...),"}") else flush(currentcatcodes,mpdrawing,"{",f,"}") end elseif typ == "number" then if a then flush(currentcatcodes,mpdrawing,"{",f,a,...,"}") else flush(currentcatcodes,mpdrawing,"{",f,"}") end elseif typ == "function" then -- ignored: a ... flush(currentcatcodes,mpdrawing,"{\\cldf{",store_(f),"}}") elseif typ == "boolean" then -- ignored: a ... if f then flush(currentcatcodes,mpdrawing,"{^^M}") else report_context("warning: %a gets argument 'false' which is currently unsupported","metafun") end else report_context("error: %a gets a weird argument %a","metafun",tostring(f)) end end end setmetatable(metafun, { __call = caller } ) function metafun.start() context.resetMPdrawing() end function metafun.stop() context.MPdrawingdonetrue() context.getMPdrawing() end function metafun.color(name) return formatters[ [[\MPcolor{%s}]] ](name) end -- metafun.delayed local delayed = { } metafun.delayed = delayed local function indexer(parent,k) local f = function(...) local a = { ... } return function() return metafun[k](unpack(a)) end end parent[k] = f return f end local function caller(parent,...) local a = { ... } return function() return metafun(unpack(a)) end end setmetatable(delayed, { __index = indexer, __call = caller } ) -- helpers: function context.concat(...) context(concat(...)) end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-kurier.mkiv0000644000175000017500000000462111754241457025641 0ustar norbertnorbert%D \module %D [ file=type-imp-kurier, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Kurier by JMN, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % There are no open type fonts yet so this should be in type-one.mkiv % instead but we keep it here till ready. \starttypescriptcollection[kurier] \starttypescript [\s!sans] [kurier-light,kurier,kurier-medium] \definefontsynonym[Kurier-Light] [kurierl] \definefontsynonym[Kurier-Regular] [kurierr] \definefontsynonym[Kurier-Medium] [kurierm] \definefontsynonym[Kurier-Bold] [kurierb] \definefontsynonym[Kurier-Heavy] [kurierh] \definefontsynonym[Kurier-LightItalic] [kurierli] \definefontsynonym[Kurier-Italic] [kurierri] \definefontsynonym[Kurier-MediumItalic] [kuriermi] \definefontsynonym[Kurier-BoldItalic] [kurierbi] \definefontsynonym[Kurier-HeavyItalic] [kurierhi] \stoptypescript \starttypescript [\s!sans] [kurier-light] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Kurier-Light-Regular] \definefontsynonym [\s!SansItalic] [Kurier-Light-Italic] \definefontsynonym [\s!SansBold] [Kurier-Medium-Regular] \definefontsynonym [\s!SansBoldItalic] [Kurier-Medium-Italic] \stoptypescript \starttypescript [\s!sans] [kurier] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Kurier-Regular] \definefontsynonym [\s!SansItalic] [Kurier-Italic] \definefontsynonym [\s!SansBold] [Kurier-Bold] \definefontsynonym [\s!SansBoldItalic] [Kurier-BoldItalic] \stoptypescript \starttypescript [\s!sans] [kurier-medium] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [Kurier-Medium-Regular] \definefontsynonym [\s!SansItalic] [Kurier-Medium-Italic] \definefontsynonym [\s!SansBold] [Kurier-Heavy-Regular] \definefontsynonym [\s!SansBoldItalic] [Kurier-Heavy-Italic] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/spac-ali.lua0000644000175000017500000001105212130411274024057 0ustar norbertnorbertif not modules then modules = { } end modules ['spac-ali'] = { version = 1.001, comment = "companion to spac-ali.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local div = math.div local format = string.format local tasks = nodes.tasks local appendaction = tasks.appendaction local prependaction = tasks.prependaction local disableaction = tasks.disableaction local enableaction = tasks.enableaction local slide_nodes = node.slide local hpack_nodes = node.hpack -- nodes.fasthpack not really faster here local unsetvalue = attributes.unsetvalue local concat_nodes = nodes.concat local nodecodes = nodes.nodecodes local listcodes = nodes.listcodes local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local line_code = listcodes.line local nodepool = nodes.pool local new_stretch = nodepool.stretch local a_realign = attributes.private("realign") local texattribute = tex.attribute local texcount = tex.count local isleftpage = layouts.status.isleftpage typesetters = typesetters or { } local alignments = { } typesetters.alignments = alignments local report_realign = logs.reporter("typesetters","margindata") local trace_realign = trackers.register("typesetters.margindata", function(v) trace_margindata = v end) local nofrealigned = 0 -- leftskip rightskip parfillskip -- raggedleft 0 + 0 - -- raggedright 0 0 fil -- raggedcenter 0 + 0 + - local function handler(head,leftpage,realpageno) local current = head local done = false while current do local id = current.id if id == hlist_code then if current.subtype == line_code then local a = current[a_realign] if not a or a == 0 then -- skip else local align = a % 10 local pageno = div(a,10) if pageno == realpageno then -- already ok else local action = 0 if align == 1 then -- flushright action = leftpage and 1 or 2 elseif align == 2 then -- flushleft action = leftpage and 2 or 1 end if action == 1 then current.list = hpack_nodes(concat_nodes{current.list,new_stretch(3)},current.width,"exactly") if trace_realign then report_realign("flushing left, align %a, page %a, realpage %a",align,pageno,realpageno) end elseif action == 2 then current.list = hpack_nodes(concat_nodes{new_stretch(3),current.list},current.width,"exactly") if trace_realign then report_realign("flushing right. align %a, page %a, realpage %a",align,pageno,realpageno) end elseif trace_realign then report_realign("invalid flushing, align %a, page %a, realpage %a",align,pageno,realpageno) end done = true nofrealigned = nofrealigned + 1 end current[a_realign] = unsetvalue end end handler(current.list,leftpage,realpageno) elseif id == vlist_code then handler(current.list,leftpage,realpageno) end current = current.next end return head, done end function alignments.handler(head) local leftpage = isleftpage(true,false) local realpageno = texcount.realpageno return handler(head,leftpage,realpageno) end local enabled = false function alignments.set(n) if not enabled then enableaction("shipouts","typesetters.alignments.handler") enabled = true if trace_realign then report_realign("enabled") end end texattribute[a_realign] = texcount.realpageno * 10 + n end commands.setrealign = alignments.set statistics.register("realigning", function() if nofrealigned > 0 then return format("%s processed",nofrealigned) else return nil end end) context-2013.05.28.20130704/texmf-dist/tex/context/base/font-ini.mkii0000644000175000017500000042455711754241457024322 0ustar norbertnorbert%D \module %D [ file=font-ini, %D version=1998.09.11, % (second) %D version=2001.02.20, % (third) %D title=\CONTEXT\ Font Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Font Macros / Initialization} \unprotect % \def\fontrange#1% % {\dofontrange{#1 =\bodyfontsize}} % % \def\dofontrange#1% % {\dodofontrange#1 \relax}% \fontstringA % % \def\dodofontrange#1 #2 % % {\ifdim\bodyfontsize#2% % #1\expandafter\gobbleuntilrelax % \else % \expandafter\dodofontrange % \fi} % % \definefont % [crap] % [\fontrange % {Regular <10pt % RegularBold <12pt % RegularSlanted <15pt % Regular} sa 1] % % may be better: % % \definefontrange % [crap] % [Regular <10pt % RegularBold <12pt % RegularSlanted <15pt] % [Regular sa 1] % % % \dostepwiserecurse{2}{15}{1} % {{\switchtobodyfont[\recurselevel pt]\crap test}\endgraf} % adapted, else wrong interlinespace \def\setfontparameters {\synchronizefontsfalse \the\everybodyfont \synchronizefontstrue} % handy \newcounter\pushedfont \def\savefont {\edef\savedfont{\the\font}% \pushmacro\savedfont \pushmacro\currentregime \pushmacro\charactermapping \pushmacro\characterencoding} \def\restorefont {\popmacro\characterencoding \popmacro\charactermapping \popmacro\currentregime \popmacro\savedfont \savedfont} \def\pushcurrentfont {\edef\popcurrentfont {\noexpand\def\noexpand\fontbody{\fontbody}% \noexpand\def\noexpand\fontstyle{\fontstyle}% \noexpand\dosetcurrentfontalternative{\fontalternative}% \noexpand\dosetcurrentfontsize{\fontsize}% \noexpand\synchronizefont}} % \definetypeface[one][rm][serif][computer-roman][default] % \definetypeface[two][rm][serif][computer-roman][default][rscale=.9] % % {\one \bf test \two test} % {\one \bf test \pushcurrentfont \two \popcurrentfont test} %D \macros %D {definedfont,startfont,doiffontcharelse} %D %D A couple of relatively new macros: \newevery \everydefinedfont \relax \def\dodefinedfont[#1]% {\iffirstargument\definefont[\string\thedefinedfont][#1]\fi \csname\string\thedefinedfont\endcsname % can be \relax \the\everydefinedfont} % hm, redundant \unexpanded\def\definedfont {\dosingleempty\dodefinedfont} \unexpanded\def\startfont {\bgroup\definedfont} \def\stopfont {\egroup} \def\doiffontcharelse#1#2% {\bgroup \definedfont[#1]% \iffontchar\font#2\relax \egroup\expandafter\firstoftwoarguments \else \egroup\expandafter\secondoftwoarguments \fi} %%% message 14 added % messages moved % messages moved % messages moved % messages moved % messages moved % messages moved % messages moved % messages moved %D This module is one of the oldest modules of \CONTEXT. The %D macros below evolved out of the \PLAIN\ \TEX\ macros and %D therefore use a similar naming scheme (\type{\rm}, %D \type{\bf}, etc). This module grew out of our needs. We %D started with the \PLAIN\ \TEX\ definitions, generalized the %D underlaying macros, and extended those to a level at which %D probably no one will ever recognize them. %D %D In 2001 we ran into a couple of projects where more than %D one combined set of fonts was involved in a document. To %D make definitions more readable, as well as to overcome the %D problem of ever growing file name lists, and also because %D we needed to scale fonts relative to each other, the low %D level implementation was partly rewritten. Global %D font assignments, relative scaling, font classes and alike %D were added then. At the same time some macros were made a %D bit more readable, and math support was extended to the %D larger sizes. %D %D One important characteristic of the font mechanism presented %D here is the postponing of font loading. This makes it %D possible to distribute \type{fmt} files without bothering %D about the specific breed of \type{tfm} files. %D %D Another feature implemented here is the massive switching %D from roman to {\ss sans serif}, {\tt teletype} or else. This %D means one doesn't have to take care of all kind of relations %D between fonts. %D %D \page[bigpreference] %D \macros %D {rm,ss,tt,hw,cg} %D %D Fonts are defined in separate files. When we define a font, %D we distinguish between several styles. In most cases we will %D use: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC roman regular serif \NC \type{\rm} \NC\FR %D \NC sansserif sans support \NC \type{\ss} \NC\MR %D \NC type teletype mono \NC \type{\tt} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D The number of styles is not limited to these three. When %D using Lucida Bright we can for instance also define: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC handwritten \NC \type{\hw} \NC\FR %D \NC calligraphic \NC \type{\cg} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Anyone who feels the need, can define additional ones, like %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC faxfont \NC \type{\ff} \NC\FR %D \NC blackboard \NC \type{\bb} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Or even %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC hebrew \NC \type{\hb} \NC\SR %D \HL %D \stoptable %D \stoplinecorrection %D %D Styles are grouped in font sets. At the moment there are %D three main sets defined: %D %D \startlinecorrection %D \starttable[|l|l||] %D \HL %D \NC Computer Modern Roman \NC Knuth \NC \type{cmr} \NC\FR %D \NC Lucida Bright \NC Bigelow \& Holmes \NC \type{lbr} \NC\MR %D \NC Standard Postscript Fonts \NC Adobe \NC \type{pos} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D There are also some Computer Modern Roman alternatives: %D %D \startlinecorrection %D \starttable[|l|l||] %D \HL %D \NC Computer Modern Roman \NC Knuth \& Sauter \NC \type{sau} \NC\FR %D \NC Euler fonts \NC Zapf \NC \type{eul} \NC\MR %D \NC Computer Modern Concrete \NC Knuth \& Zapf \NC \type{con} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D All these definitions are ordered in files with names like %D \type{font-cmr} and \type{font-pos}, where the last three %D characters specify the name as known to \CONTEXT. %D %D Within such a font set (\type{cmr}) and style (\type{\rm}) %D we can define a number of text font alternatives: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC typeface \NC \type{\tf} \NC\FR %D \NC boldface \NC \type{\bf} \NC\MR %D \NC slanted \NC \type{\sl} \NC\MR %D \NC italic \NC \type{\it} \NC\MR %D \NC boldslanted \NC \type{\bs} \NC\MR %D \NC bolditalic \NC \type{\bi} \NC\MR %D \NC smallcaps \NC \type{\sc} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D For old stylish Frans Goddijn we have: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC oldstyle \NC \type{\os} \NC\SR %D \HL %D \stoptable %D \stoplinecorrection %D %D The availability of these alternatives depends on the %D completeness of a font family and of course the definitions %D in the font files. %D %D But let's not forget math. In addition to the previous \TEX\ %D families (the mysterious \type{\fam}'s) we've got some more: %D %D \startlinecorrection %D \starttable[|l||] %D \HL %D \NC Math Roman \NC \type{\mr} \NC\FR %D \NC Math Italic \NC \type{\mi} \NC\MR %D \NC Math Symbol \NC \type{\sy} \NC\MR %D \NC Math Extra \NC \type{\ex} \NC\MR %D \NC Math A \NC \type{\ma} \NC\MR %D \NC Math B \NC \type{\mb} \NC\MR %D \NC Math C \NC \type{\mc} \NC\LR %D \HL %D \stoptable %D \stoplinecorrection %D %D Users can call for specific fonts in many ways. Switches to %D other typefaces, like the switch from normal to bold, are as %D intuitive as possible, which means that all dependant fonts %D also switch. One can imagine that this takes quite some %D processing time. %D %D Internally fonts are stored as combination of size, style %D and alternative, e.g. \type{12pt}+\type{\ss}+\type{\bf}. %D Users are not confronted with sizes, but use the style or %D style+alternative to activate them. %D %D During the definition of a bodyfont one can also declare the %D available larger alternatives: %D %D \starttyping %D \tf \tfa \tfb \tfc ... %D \bf \bfa \bfb \bfc ... %D \sl \sla \slb \slc ... %D \stoptyping %D %D The smaller ones are automatically supplied and derived from %D the the bodyfont environment. %D %D \starttyping %D \tfx \tfxx %D \bfx \bfxx %D \slx \slxx %D \stoptyping %D %D There are only two smaller alternatives per style. The %D larger alternatives on the other hand have no limitations. %D %D These larger alternatives are mostly used in chapter and %D section titles or on title pages. When one switches to a %D larger alternative, the bold an other ones automatically %D adapt themselves: %D %D \startbuffer %D \tfd Hi \bf there\sl, here \tfb I \bf am %D \stopbuffer %D %S \startnarrower %D \typebuffer %S \stopnarrower %D %D therefore becomes: %D %D \startvoorbeeld %D \getbuffer %D \stopvoorbeeld %D %D Maybe this mechanism isn't always as logic, but as said %D before, we tried to make it as intuitive as possible. %D %D So a specific kind of glyph can be characterized by: %D %D \startnarrower %D family (cmr) + bodyfont (12pt) + style (rm) + alternative (bf) + size (a) %D \stopnarrower %D %D The last component (the size) is optional. %D %D We introduced \type{\tf} as command to call for the current %D normally sized typeface. This commands results in roman, %D sans serif, teletype or whatever style is in charge. Such %D rather massive switches of style sometimes take more %D processing time than comfortable. Of course there is a %D workaround for this: we can call fonts directly by means of %D commands like: %D %D \starttyping %D \rmtf \sssl \tttf \rmbsa %D \stoptyping %D %D One should realize that this fast calls have limitations, %D they lack for instance automatic super- and subscript %D support. %D %D This leaves us two more commands: \type{\tx} and %D \type{\txx}. These activate a smaller and even more smaller %D font than the current one and adapt themselves to the %D current alternative, so when \type{\bf} is active, %D \type{\tx} gives a smaller boldface, which in turn can be %D called directly by \type{\bfx}. %D %D These two smaller alternatives are specified by the bodyfont %D environment and therefore not necessarily have similar sizes %D as \type{\scriptsize} and \type{\scriptscriptsize}. The main %D reason for this incompatibility (which can easily be undone) %D lays in the fact that we often want a bit bigger characters %D than in math mode. In \CONTEXT\ for instance the \type{\tx} %D and \type{\txx} commands are used for surrogate %D \cap{smallcaps} which support both nesting and alternatives, %D like in {\bf\cap{a \cap{small} world}}, which was typeset by %D %D \starttyping %D \bf\cap{a \cap{small} world} %D \stoptyping %D %D And compare $\rm \scriptstyle THIS$ with the slightly larger %D \cap{THIS}: \ruledhbox{$\rm \scriptstyle scriptstyle: THIS$} %D or \ruledhbox{\cap{x style: THIS}} makes a big difference. %D The \type{x..d} sizes should be used grouped. If you %D don't group them, i.e. call them in a row, \CONTEXT\ will %D not be able to sort out your intention (\type {x} inside %D \type {d} inside \type {x}. etc.). The following table %D demonstrates this: %D %D \def\FontState{\setstrut\ruledhbox{\strut Hello}} %D %D \starttabulate[|||||] %D \HL %D \NC \rlap{\quad\bf grouped} \NC \NC \type {\tx} \NC \type {\txx} \NC \NR %D \HL %D \NC \type{\tfx} \NC \tfx \FontState \NC \tfx \tx \FontState \NC \tfx \txx \FontState \NC \NR %D \NC \type{\tfxx} \NC \tfxx \FontState \NC \tfxx\tx \FontState \NC \tfxx\txx \FontState \NC \NR %D \NC \type{\tf} \NC \tf \FontState \NC \tf \tx \FontState \NC \tf \txx \FontState \NC \NR %D \NC \type{\tfa} \NC \tfa \FontState \NC \tfa \tx \FontState \NC \tfa \txx \FontState \NC \NR %D \NC \type{\tfb} \NC \tfb \FontState \NC \tfb \tx \FontState \NC \tfb \txx \FontState \NC \NR %D \NC \type{\tfc} \NC \tfc \FontState \NC \tfc \tx \FontState \NC \tfc \txx \FontState \NC \NR %D \NC \type{\tfd} \NC \tfd \FontState \NC \tfd \tx \FontState \NC \tfd \txx \FontState \NC \NR %D \NC \type{\tfx} \NC \tfx \FontState \NC \tfx \tx \FontState \NC \tfx \txx \FontState \NC \NR %D \NC \type{\tfxx} \NC \tfxx \FontState \NC \tfxx\tx \FontState \NC \tfxx\txx \FontState \NC \NR %D \HL %D \stoptabulate %D %D \blank %D %D \starttabulate[|||||] %D \HL %D \NC \rlap{\quad\bf stacked} \NC \NC \type {\tx} \NC \type {\txx} \NC \NR %D \HL %D \NC \type{\tfx} %D \NC \tfx \FontState %D \NC \tfx \tx \FontState %D \NC \tfx \txx \FontState %D \NC \NR %D \NC \type{\tfxx} %D \NC \tfx\tfxx \FontState %D \NC \tfx\tfxx \tx \FontState %D \NC \tfx\tfxx \txx \FontState %D \NC \NR %D \NC \type{\tf} %D \NC \tfx\tfxx\tf \FontState %D \NC \tfx\tfxx\tf \tx \FontState %D \NC \tfx\tfxx\tf \txx \FontState %D \NC \NR %D \NC \type{\tfa} %D \NC \tfx\tfxx\tf\tfa \FontState %D \NC \tfx\tfxx\tf\tfa \tx \FontState %D \NC \tfx\tfxx\tf\tfa \txx \FontState %D \NC \NR %D \NC \type{\tfb} %D \NC \tfx\tfxx\tf\tfa\tfb \FontState %D \NC \tfx\tfxx\tf\tfa\tfb \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb \txx \FontState %D \NC \NR %D \NC \type{\tfc} %D \NC \tfx\tfxx\tf\tfa\tfb\tfc \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc \txx \FontState %D \NC \NR %D \NC \type{\tfd} %D \NC \tfx\tfxx\tf\tfa\tfb\tfd \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfd \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfd \txx \FontState %D \NC \NR %D \NC \type{\tfx} %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx \txx \FontState %D \NC \NR %D \NC \type{\tfxx} %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \tx \FontState %D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \txx \FontState %D \NC \NR %D \HL %D \stoptabulate %D \macros %D {mf} %D %D Math fonts are a species in their own. They are tightly %D hooked into smaller and even smaller ones of similar breed %D to form a tight family. Let's first see how these are %D related: %D %D \startbuffer %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\rm 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\rm 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\tf 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\tf 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\bf 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\bf 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\sl 6x^2$ %D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\sl 6x^2$ %D \stopbuffer %D %D \typebuffer %D %D Gives both an expected and unexpected result: %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D We see here that the character shapes change accordingly to %D the current family, but that the symbols are always typeset %D in the font assigned to \type{\fam0}. %D %D \startbuffer %D $\tf\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$ %D $\bf\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$ %D $\sl\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$ %D $\bs\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$ %D $\it\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$ %D $\bi\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$ %D \stopbuffer %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D In this example we see a new command \type{\mf} surface %D which means as much as {\em math font}. This commands %D reactivates the last font alternative and therefore equals %D \type{\bf}, \type{\sl} etc. but by default it equals %D \type{\tf}: \unexpanded\def\mf {\dodosetmathfont\fontalternative \csname\fontalternative\endcsname} %D The previous example was typeset saying: %D %D \typebuffer %D %D Beware: the exact location of \type{\mf} is not that %D important, we could as well has said %D %D \startbuffer %D $\bf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = \mf 6x^2$ %D \stopbuffer %D %D \typebuffer %D %D This is due to the way \TEX\ handles fonts in math mode. %D %D Of course we'll have to redefine \type{\mf} every time we %D change the current \type{\fam}. %D \macros %D {mbox,enablembox,mathop} %D %D Now how can we put this to use? Will the next sequence %D give the desired result? %D %D \startbuffer %D $\bf x^2 + \hbox{\mf whatever} + \sin(2x)$ %D \stopbuffer %D %D \typebuffer %D %D It won't! %D %D \startvoorbeeld %D \let\mathop=\normalmathop \getbuffer %D \stopvoorbeeld %D %D The reason for this is that \type{\sin} is defined as: %D %D \starttyping %D \def\sin{\mathop{\rm sin}\nolimits} %D \stoptyping %D %D We can fix this by defining \unexpanded\def\mathop {\normalmathop \bgroup \let\rm\mf \let\next=} %D We can fix arbitrary horizontal boxes by redefining the %D \TEX\ primitive \type{\hbox}: %D %D \starttyping %D \def\hbox{\ifmmode\mbox\else\normalhbox\fi} %D \stoptyping %D %D with %D %D \starttyping %D \def\mbox#1#% %D {\normalhbox#1\bgroup\mf\let\next=} %D \stoptyping %D %D or more robust, that is, also accepting \type{\hbox\bgroup}: %D %D \starttyping %D \def\mbox% %D {\normalhbox\bgroup\mf %D \dowithnextbox{\flushnextbox\egroup}% %D \normalhbox} %D \stoptyping %D %D And now: %D %D \startbuffer %D $\bf x^2 + \hbox{whatever} + \sin(2x)$ %D \stopbuffer %D %D \typebuffer %D %D Indeed gives: %D %D \startvoorbeeld %D \enablembox\getbuffer %D \stopvoorbeeld %D %D But, do we want this kind of trickery to be activated? No, %D simply because we cannot be sure of incompatibilities, %D although for instance unboxing goes ok. Therefore we %D introduce: % best can go to math-ini and make \mf a hook then % better use \dowithnextboxcontent \def\normalmbox {\normalhbox\bgroup\mf \dowithnextbox{\flushnextbox\egroup}\normalhbox} % to test: % % \def\normalmbox % {\dowithnextboxcontent\mf\flushnextbox\normalhbox} \def\mbox % we cannot add \dontleavehmode ... else no \setbox0\mbox possible {\ifmmode\normalmbox\else\normalhbox\fi} \def\enablembox {\appendtoks \ifx\normalhbox\undefined\let\normalhbox\hbox\fi \let\hbox\mbox \to\everymathematics} %D So in fact one can enable this feature if needed. I would say: %D go along, but use grouping if needed! %D \macros %D {mrfam,mifam,syfam,exfam, %D bsfam,bifam,scfam,tffam, %D mafam,mbfam,msfam} %D %D After this short mathematical excursion, we enter the world %D of fonts and fontswitching. We start with something very %D \TEX: \type{\fam} specified font families. \TEX\ uses %D families for managing fonts in math mode. Such a family has %D three members: text, script and scriptscript: $x^{y^z}$. In %D \CONTEXT\ we take a bit different approach than \PLAIN\ %D \TEX\ does. \PLAIN\ \TEX\ needs at least four families for %D typesetting math. We use those but give them symbolic names. \chardef\mrfam = 0 % (Plain TeX) Math Roman \chardef\mifam = 1 % (Plain TeX) Math Italic \chardef\syfam = 2 % (Plain TeX) Math Symbol \chardef\exfam = 3 % (Plain TeX) Math Extra %D \PLAIN\ \TEX\ also defines families for {\it italic}, {\sl %D slanted} and {\bf bold} typefaces, so we don't have to %D define them here. \ifx\itfam\undefined \chardef\itfam = 4 % (Plain TeX) Italic \chardef\slfam = 5 % (Plain TeX) Slanted \chardef\bffam = 6 % (Plain TeX) Boldface \fi %D Family~7 in \PLAIN\ \TEX\ is not used in \CONTEXT, because %D we do massive switches from roman to sans serif, teletype or %D other faces. \ifx\ttfam\undefined \chardef\ttfam = 7 % (Plain TeX) can be reused! \fi %D We define ourselves some more families for {\bs bold %D slanted}, {\bi bold italic} and {\sc Small Caps}, so %D we can use them in math mode too. Instead of separate %D families for {\ss sans serif} and \type{teletype} we use the %D more general \type{\tffam}, which stands for typeface. \chardef\bsfam = 8 % (ConTeXt) BoldSlanted \chardef\bifam = 9 % (ConTeXt) BoldItalic \chardef\scfam = 10 % (ConTeXt) SmallCaps \chardef\tffam = 11 % (ConTeXt) TypeFace %D Because Taco needs a few more math families, we reuse %D family~7 for all those typefaces that have no related %D family, and therefore are grouped into one. \chardef\nnfam = 7 % (ReUsed) NoName %D Normally \type{\mrfam} equals \type{\tffam}, but a more %D distinctive alternatives are possible, for instance the %D Euler and Concrete Typefaces. %D %D After having defined all those in nature non||mathematical %D families, we define ourselves some real math ones. These are %D needed for the \AMS\ Symbol Fonts and Extended Lucida %D Bright. \chardef\mafam = 12 % (ConTeXt) Math A Fam (AmsTeX A) \chardef\mbfam = 13 % (ConTeXt) Math B Fam (AmsTeX B) \chardef\mcfam = 14 % (ConTeXt) Math C Fam (MathTime) \chardef\mdfam = 15 % (ConTeXt) Math D Fam (MathTime) %D Because there are 16~families and because \type{\ttfam} %D is reused, at the moment we have no so many families %D left. By default, we map any newly defined family on the %D last one (F). \def\newfam#1{\chardef#1=15 } %D This hack is also needed because in \ETEX\ we are going %D to reuse the \type {\newfam} allocation counter. %D To ease the support of font packages, we als define %D shortcuts to these familynames. This is necessary because %D the family names are in fact \type{\chardef}'s, which means %D that we're dealing with numbers (one can check this by %D applying \type{\showthe} and \type{\show}). In the %D specification of math symbols however we need hexadecimal %D numbers, so we have to convert the \type{\fam}'s value. \edef\hexmrfam {\hexnumber\mrfam} \edef\hexbsfam {\hexnumber\bsfam} \edef\hexmifam {\hexnumber\mifam} \edef\hexbifam {\hexnumber\bifam} \edef\hexsyfam {\hexnumber\syfam} \edef\hexscfam {\hexnumber\scfam} \edef\hexexfam {\hexnumber\exfam} \edef\hextffam {\hexnumber\tffam} \edef\hexitfam {\hexnumber\itfam} \edef\hexmafam {\hexnumber\mafam} \edef\hexslfam {\hexnumber\slfam} \edef\hexmbfam {\hexnumber\mbfam} \edef\hexbffam {\hexnumber\bffam} \edef\hexmcfam {\hexnumber\mcfam} \edef\hexnnfam {\hexnumber\nnfam} \edef\hexmdfam {\hexnumber\mdfam} %D \macros %D {uchar} %D %D This macro prepares \CONTEXT\ for \UNICODE\ support. By %D defining it here, we have at least an safeguard for utility %D file reading. \ifx\uchar\undefined \unexpanded\def\uchar#1#2{[#1,#2]} \fi %D We define some (very private) constants to improve speed, %D memory usage and consistency. \def\@size@ {@f@si@} % bodyfont size prefix (12pt etc) \def\@style@ {@f@st@} % full style prefix (roman etc) \def\@shortstyle@ {@f@sh@} % short style prefix (rm etc) \def\@letter@ {@f@le@} % first alternative typeface \def\@noletter@ {@f@no@} % second alternative typeface \def\@fontclass@ {@f@cl@} % fontclass %D The families can be grouped into math specific ones and %D more text related families, although text ones can be %D mapped onto the math ones to get for instance bold math. %D %D Both groups of families are handles by a couple of token %D list tagged as strategies. This implementation makes %D implementing extensions more comfortable. \newtoks \textstrategies \newtoks \mathstrategies \newtoks \symbstrategies \newif\ifsynchronizemathfonts \synchronizemathfontstrue \def\synchronizetext % stylish text in mmode {\ifsynchronizemathfonts\the\textstrategies\fi} % \if...\fam\minusone\fi} \def\synchronizemath % math stuff in mmode {\ifsynchronizemathfonts\the\mathstrategies\fi} % \if...\fam\minusone\fi} \def\synchronizesymb % stylish math stuff in mmode {\ifsynchronizemathfonts\the\symbstrategies\fi} % \if...\fam\minusone\fi} %D By not setting the family we can append a font switch to \type %D {\everymath}. On the other hand, one never knows in what family %D state the strategies brought us. %D %D \starttyping %D {\bfa $\the\fam$} {\bfa \everymath{} $\the\fam$} %D \stoptyping %D \macros %D {textonly} %D %D We can inhibit this slow||downer with: \def\textonly{\synchronizemathfontsfalse} % document this \appendtoks \dosettextfamily\c!tf \dosettextfamily\c!bf \dosettextfamily\c!sl \dosettextfamily\c!it \dosettextfamily\c!bs \dosettextfamily\c!bi \dosettextfamily\c!sc \to \textstrategies \def\dosettextfamily#1% better pass fontbody to dodoset {\let\savedfontbody\fontbody \let\fontfamily#1% \let\fontbody\scriptscriptface\dodosettextfamily\scriptscriptfont \let\fontbody\scriptface \dodosettextfamily \scriptfont \let\fontbody\textface \dodosettextfamily \textfont \let\fontbody\savedfontbody} % \def\s!nullfont{nullfont} \def\dodosettextfamily {\ifx\fontclass\empty \@EA\dodosettextfamilyA \else \@EA\dodosettextfamilyB \fi} \def\dodosettextfamilyA#1% {\ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse \csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else \ifcsname \fontbody\c!mm\fontfamily\endcsname \autofontsizetrue \csname \fontbody\c!mm\fontfamily\endcsname \else \ifcsname \fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse \csname \fontbody\c!rm\fontfamily\fontsize\endcsname \else \ifcsname \fontbody\c!rm\fontfamily\endcsname \autofontsizetrue \csname \fontbody\c!rm\fontfamily\endcsname \else \nullfont \autofontsizetrue \fi\fi\fi\fi #1\csname\fontfamily\s!fam\endcsname\font} \def\dodosettextfamilyB#1% {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \else \ifcsname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse \csname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \else \ifcsname\fontclass\fontbody\c!rm\fontfamily\endcsname \autofontsizetrue \csname\fontclass\fontbody\c!rm\fontfamily\endcsname \else \dodosettextfamilyA#1% \fi\fi\fi\fi #1\csname\fontfamily\s!fam\endcsname\font} \def\mrfallback{\c!rm\c!tf} \appendtoks \dosetmathfamily\mrfam\textface\scriptface\scriptscriptface\c!mr\mrfallback \dosetmathfamily\mifam\textface\scriptface\scriptscriptface\c!mi\empty \dosetmathfamily\syfam\textface\scriptface\scriptscriptface\c!sy\empty \dosetmathfamily\exfam\textface\textface \textface \c!ex\empty \dosetmathfamily\mafam\textface\scriptface\scriptscriptface\c!ma\empty \dosetmathfamily\mbfam\textface\scriptface\scriptscriptface\c!mb\empty \dosetmathfamily\mcfam\textface\scriptface\scriptscriptface\c!mc\empty % \dosetmathfamily\mdfam\textface\scriptface\scriptscriptface\c!md\empty \dosetmathfamily\nnfam\textface\scriptface\scriptscriptface\c!nn\empty \to \mathstrategies \appendtoks \dosetskewchar\mifam\defaultskewcharmi % implemented later on \dosetskewchar\syfam\defaultskewcharsy % implemented later on \to \mathstrategies \def\dosetmathfamily#1#2#3#4#5#6% {\let\savedfontbody\fontbody % op hoger plan \let\fontfamily#5% \let\backfamily#6% \let\fontbody #4\dodosetmathfamily\scriptscriptfont#1% \let\fontbody #3\dodosetmathfamily \scriptfont#1% \let\fontbody #2\dodosetmathfamily \textfont#1% \let\fontbody\savedfontbody} \def\dodosetmathfamily {\ifx\fontclass\empty \@EA\dodosetmathfamilyA \else \@EA\dodosetmathfamilyB \fi} \def\dodosetmathfamilyA#1#2% {\ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse \csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else \ifcsname \fontbody\c!mm\fontfamily \endcsname \autofontsizetrue \csname \fontbody\c!mm\fontfamily \endcsname \else \ifcsname \fontbody \backfamily\fontsize\endcsname \autofontsizefalse \csname \fontbody \backfamily\fontsize\endcsname \else \ifcsname \fontbody \backfamily \endcsname \autofontsizetrue \csname \fontbody \backfamily \endcsname \else \nullfont \autofontsizetrue \fi\fi\fi\fi #1#2\font} \def\dodosetmathfamilyB#1#2% {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else \ifcsname\fontclass\fontbody\c!mm\fontfamily \endcsname \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily \endcsname \else \ifcsname\fontclass\fontbody \backfamily\fontsize\endcsname \autofontsizefalse \csname\fontclass\fontbody \backfamily\fontsize\endcsname \else \ifcsname\fontclass\fontbody \backfamily \endcsname \autofontsizetrue \csname\fontclass\fontbody \backfamily \endcsname \else \dodosetmathfamilyA#1#2% \fi\fi\fi\fi #1#2\font} \appendtoks \dosetsymbfamily\mrfam\textface\scriptface\scriptscriptface\c!mr \dosetsymbfamily\mifam\textface\scriptface\scriptscriptface\c!mi \dosetsymbfamily\syfam\textface\scriptface\scriptscriptface\c!sy \dosetsymbfamily\exfam\textface\textface \textface \c!ex \dosetsymbfamily\mafam\textface\scriptface\scriptscriptface\c!ma \dosetsymbfamily\mbfam\textface\scriptface\scriptscriptface\c!mb \dosetsymbfamily\mcfam\textface\scriptface\scriptscriptface\c!mc % \dosetsymbfamily\mdfam\textface\scriptface\scriptscriptface\c!md % also ? \to \symbstrategies \def\dosetsymbfamily#1#2#3#4#5% {\let\savedfontbody\fontbody \let\fontfamily#5% \let\fontbody #4\dodosetsymbfamily\scriptscriptfont#1% \let\fontbody #3\dodosetsymbfamily \scriptfont#1% \let\fontbody #2\dodosetsymbfamily \textfont#1% \let\fontbody\savedfontbody} \def\dodosetsymbfamily#1#2% {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname \csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname #1#2\font \else\ifcsname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname \csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname #1#2\font \fi\fi} %D All used styles, like rm, ss and tt, are saved in a comma %D separated list. Appart from practical limitations one can %D define as many styles as needed. \def\fontrelativesizelist{\s!text,\s!script,\s!scriptscript,\c!x,\c!xx,\c!big,\c!small} %D \macros %D {magfactor,magfactorhalf} %D %D There are several ways to specify a font. Three of them are %D pure \TeX\ ones, the fourth one is new: %D %D \starttyping %D \font\name=cmr12 %D \font\name=cmr12 at 10pt %D \font\name=cmr12 scaled \magstep2 %D \font\name=cmr12 sa 1.440 %D \stoptyping %D %D The non||\TEX\ alternative \type{sa} stands for {\em scaled %D at}. This means as much as: scale the bodyfontsize with this %D factor. The value 1.440 in this example is derived %D from the \type{\magstep}'s as mentioned in %D \in{table}[tab:magstep]. We therefore introduce %D \type{\magfactor} as an alternative for \type{\magstep}. %D %D \placetable[here][tab:magstep] %D {Factors to be used with \type{sa.}} %D \starttable[|c|c|c|] %D \HL %D \NC \bf magstep \NC \bf equivalent \NC \bf factor \NC\SR %D \HL %D \NC 1 \NC \type{\magfactor1} \NC 1.200 \NC\FR %D \NC 2 \NC \type{\magfactor2} \NC 1.440 \NC\MR %D \NC 3 \NC \type{\magfactor3} \NC 1.728 \NC\MR %D \NC 4 \NC \type{\magfactor4} \NC 2.074 \NC\MR %D \NC 5 \NC \type{\magfactor5} \NC 2.488 \NC\LR %D \HL %D \stoptable \def\magstep#1% \relax removed, otherwise space after it sticks, else added {\ifcase#1 1000\or1200\or1440\or1728\or2074\or2488\or1000\fi} \def\magstephalf {1095} \def\magfactor#1% {\ifcase#1 1.000\or1.200\or1.440\or1.728\or2.074\or2.488\or1\fi} \def\magfactorhalf {1.095} %D These macros enable the use of definitions like \type{sa %D \magfactor3} which saves us both (mis|)|calculations and %D potential mistypings. %D %D Because \type {sa} (scaled at) and \type {mo} (mapped on) %D are not low level \TEX\ supported alternatives, we have to %D test for it ourselves. In doing so, we need an auxiliary %D \DIMENSION. We cannot use \type{\scratchdimen} because font %D loading can happen at any moment due to postponed loading. %D We could instead have used dirty grouping tricks, but this %D one works too. \let\defaultrelativefontsize \plusone \let\localrelativefontsize \plusone \def\localabsolutefontsize {\fontbody} \let\relativefontsize \defaultrelativefontsize \def\saverelativefontsize#1#2% #1=rm|ss|.. #2=waarde {\setxvalue{\fontclass#1\s!rscale}{#2}} \def\checkrelativefontsize#1% {\edef\relativefontsize {\ifcsname\fontclass#1\s!rscale\endcsname \csname\fontclass#1\s!rscale\endcsname \else \defaultrelativefontsize \fi}} %D We also save: \def\savemathtextstyle#1% #1=rm|ss|.. {\doifsomething{#1}{\setxvalue{\fontclass\c!mm\s!text}{#1}}} \def\currentmathtextstyle % we default to empty ! {\executeifdefined{\fontclass\c!mm\s!text}\empty} %D Scaling macros: \newdimen\scaledfont \let\somefontspec\empty \def\@fs@{@fs@} % \def\parsefontspec#1% % {\xdef\somefontspec{#1\space\relax}% % \@EA\doparsefontspec\somefontspec]% =>#1 \relax] % \donoparsefontspec} % % but, better: \let\somefontname\empty \def\parsefontspec#1% {\xdef\somefontspec{#1\space}% \@EA\doparsefontspec\somefontspec\relax]% =>#1 \relax] \donoparsefontspec} \def\doparsefontspec#1 #2% {\def\somefontname{#1}% \ifx\somefontname\empty % space before fontname \@EA\doparsefontspec \else\ifx#2\relax \@EAEAEA\setnaturalfontspec \else \@EAEAEA\setforcedfontspec \fi\fi #2} \def\setnaturalfontspec#1]% {\@fs@scaled\plusthousand\relax} \def\setforcedfontspec#1 #2\relax]% {\csname\@fs@#1\endcsname#2\relax} \def\@fs@scaled {\afterassignment\do@fs@scaled\scratchcounter} \def\do@fs@scaled#1\relax {\scaledfont\number\scratchcounter\points \scaledfont\localrelativefontsize\scaledfont \ifautofontsize\scaledfont\currentfontbodyscale\scaledfont\fi \scratchcounter\scaledfont % \scaledfont is now pretty large \advance\scratchcounter \medcard \divide\scratchcounter \maxcard \xdef\somefontspec{ scaled \the\scratchcounter}} \def\@fs@at {\afterassignment\do@fs@at\scaledfont} \def\do@fs@at#1\relax {\scaledfont\localrelativefontsize\scaledfont \ifautofontsize\scaledfont\currentfontbodyscale\scaledfont\fi \xdef\somefontspec{ at \the\scaledfont}} \def\@fs@sa {\scaledfont\localabsolutefontsize \setsamofontspec} \def\@fs@mo {\scaledfont\setmappedfontsize\localabsolutefontsize \setsamofontspec} \def\setsamofontspec#1\relax {\checkfontscale#1\end\scaledfont \scaledfont\localrelativefontsize\scaledfont \ifautofontsize\scaledfont\currentfontbodyscale\scaledfont\fi \xdef\somefontspec{ at \the\scaledfont}} \def\getfontparameters {\expandafter\dogetfontparameter\@@fontdata,]=,} \def\getglobalfontparameters {\expandafter\dogetglobalfontparameter\@@fontdata,]=,} \def\dogetfontparameter#1=#2,% {\if]#1\else \expandafter\def\csname\??ff\@@fontfile#1\endcsname{#2}% \expandafter\dogetfontparameter \fi} \def\dogetglobalfontparameter#1=#2,% {\if]#1\else \expandafter\gdef\csname\??ff\@@fontfile#1\endcsname{#2}% \expandafter\dogetglobalfontparameter \fi} \let\@@fontencoding\empty \let\@@fontmapping \empty \let\@@fonthandling\empty \let\@@fontfeatures\empty \let\@@skewchar \empty \let\@@hyphenchar \empty % todo, will go to encoding %D This brings down maps processing from 466 to 309 seconds %D ($-33$\%) and mfonts from 42 to 34 seconds ($-15$\%). \newif\ifskipfontcharacteristics \skipfontcharacteristicstrue %D When fontclasses are used, we define the font global, %D since namespaces are used. Otherwise we parse the specs %D each time. % wrong: this way we cannot set encoding etc % % \def\donoparsefontspec#1% % {\edef\fontfile{\truefontname\somefontname}% % \ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi % \edef\lastfontname{\fontfile\somefontspec}% % \ifx\fontclass\empty\else\global\fi % \expandafter\font\csname#1\endcsname\lastfontname\relax % \relax} \let\fontfile\s!unknown % \definefontsynonym % [blabla] % [name:Latin Modern Something] % \definefontsynonym % [blabla] % [file:texnansi-lmr10] % [encoding=texnansi] % \definedfont[blabla] test \currentencoding/\fontfile \par % \definefontsynonym % [blabla] % [texnansi-lmtt10] % [encoding=texnansi] % \definedfont[blabla] test \currentencoding/\fontfile \par % \definefontsynonym % [blabla] % [ec-lmtt10] % [encoding=ec] % \definedfont[blabla] test \currentencoding/\fontfile \par \def\checkfontfilename {\expandafter\docheckfontfilename\fontfile:\empty:\empty\relax} \def\docheckfontfilename#1:#2:#3#4\relax {\edef\!!stringa{#1}% \edef\!!stringb{#2}% \ifx\!!stringb\empty \edef\checkedfontfile{\!!stringa}% \else\ifx\!!stringa\v!file \edef\checkedfontfile{"\!!stringb"}% \else\ifx\!!stringa\v!name \edef\checkedfontfile{"\!!stringb"}% \else \edef\checkedfontfile{\!!stringb}% \fi\fi\fi} \let\doshowcheckedfontfeatures\relax \def\showcheckedfontfeatures {\def\doshowcheckedfontfeatures{\writestatus\m!fonts{checked: \checkedfontfile}}} \def\checkedfontfile{\fontfile} % default \newtoks\everydefinefont \def\donoparsefontspec % #1 == \cs {\edef\fontfile{\truefontname\somefontname}% \ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi % can for instance happen with MathGamma \updatefontparameters \checkfontfilename \edef\lastfontname{\checkedfontfile\somefontspec}% \ifx\fontclass\empty \expandafter\definefontlocal \else \expandafter\definefontglobal \fi} % #1 == \cs \def\definefontlocal#1% {\expandafter\edef\csname#1\endcsname % ! ! ! ! not needed in luatex ! ! ! ! {\noexpand\csname#1:\endcsname \noexpand\reactivatefont{\somefontname}{\fontfile}}% \expandafter\font\csname#1:\endcsname\lastfontname\relax \expandafter\let\expandafter\lastrawfontcall\csname#1:\endcsname \the\everydefinefont} \def\definefontglobal#1% stores \somefontname=Mono and \fontfile=cmtt10 {\expandafter\xdef\csname#1\endcsname % ! ! ! ! not needed in luatex ! ! ! ! {\noexpand\csname#1:\endcsname \noexpand\reactivatefont{\somefontname}{\fontfile}}% \global\expandafter\font\csname#1:\endcsname\lastfontname\relax \expandafter\let\expandafter\lastrawfontcall\csname#1:\endcsname \the\everydefinefont} \def\reactivatefont#1#2% {\def\somefontname{#1}% \def\fontfile {#2}% \updatefontparameters} % can be handy for tracing purposes % % \def\reportfontdefinition % {\bgroup % \expanded{\infofont % [\lastfontidentifier % ->\newfontidentifier % ->\fontname\csname\newfontidentifier\endcsname]}% % \endgraf % \egroup} %D An additional the second \type {\font} definition can %D prevent fuzzy font refs %D %D \starttyping %D \expandafter\font\csname\dummyfontname\endcsname\lastfontname %D \stoptyping %D %D but somehow they changed \TEX\ so that it does not matter %D any more. \def \defaultfontfile{\truefontname{Normal}} % was cmtt10, but that one is gone \edef\nullfontname {\fontname\nullfont} \edef\dummyfontname {font\strippedcsname\\} %D \macros %D {everyfont,everyfontswitch} %D %D For special purposes, we provide a hook. % \newevery \everyfont \relax % \newevery \everyfontswitch \relax % safer but sometimes introducing newlines in the log % % \batchmode % \font\lastloadedfont\fontfile\somefontspec\relax % \errorstopmode % \edef\lastfontname{\fontname\lastloadedfont}% % \ifx\lastfontname\nullfontname % \showmessage\m!fonts{10}{\fontfile}% % \expandafter\font\csname#1\endcsname=\defaultfontfile\somefontspec\relax % \else % \expandafter\let\csname#1\endcsname\lastloadedfont % \fi %D We also accept \type{sa a}||\type{sa d} as specification. \def\checkfontscale#1#2\end#3% {#3\ifcsname\??ft\s!default\noexpand#1\endcsname \csname\??ft\s!default\noexpand#1\endcsname\else#1#2% \fi#3} %D The duplicate font definition, using the ever the same dummy %D font name, results in less fuzzy error messages. In the log %D file, for instance when overfull boxes are reported, the %D simple keyword `font' replaces the \TEX\ ordinated name. The %D latter can be too misleading, due to the fact that \TEX\ has %D a rather optimized font memory management. Thanks to Taco %D for helping me sort this out. %D \macros %D {definefontsynonym, doifelsefontsynonym, %D expandfontsynonym, truefontname, truefontdata} %D %D While looking for fonts, fontsynonyms are used for accessing %D the files! %D %D \starttyping %D \definefontsynonym[Serif][Lucida-Bright] %D \definefontsynonym[Lucida-Bright][lbr][encoding=texnansi] %D \stoptyping %D %D The definitions can be accessed by: %D %D \startlines %D name: \type {\truefontname{Lucida-Bright}} %D data: \type {\truefontdata{\truefontname{Lucida-Bright}}} %D \stoplines % \def\definefontsynonym % {\dotripleempty\dodefinefontsynonym} % % \def\dodefinefontsynonym[#1][#2][#3]% % {\@EA\edef\csname\??ff\fontclass#1\endcsname{#2}% % \ifthirdargument % \edef\@@fontdata{#3}% % \ifx\@@fontdata\empty \else % \edef\@@fontfile{#2}% % \ifx\fontclass\empty % \getfontparameters % \else % \getglobalfontparameters % \fi % \fi % \fi} % % slightly faster, noticable when loading many typefaces, % % \testfeatureonce{5000}{\definefontsynonym[somefont][somename]} \end \def\classfont#1#2{#1#2} % \definefont[whatever][\classfont{xx}{yy} at 10pt] \def\definefontsynonym[#1]#2[#3]% {\edef\@@fontfile{#3}% \@EA\let\csname\??ff\fontclass#1\endcsname\@@fontfile \doifnextoptionalelse\dodefinefontsynonym\donothing} \def\dodefinefontsynonym[#1]% {\edef\@@fontdata{#1}% \ifx\@@fontdata\empty \else \ifx\fontclass\empty \getfontparameters \else \getglobalfontparameters \fi \fi} \let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater \def\setupfontsynonym {\dodoubleempty\dosetupfontsynonym} \def\dosetupfontsynonym[#1][#2]% {\edef\@@fontdata{#2}% \ifx\@@fontdata\empty \else \edef\@@fontfile{#1}% \ifx\fontclass\empty \getfontparameters \else \getglobalfontparameters \fi \fi} \def\truefontdata#1#2% {\ifcsname\??ff#1#2\endcsname % raw(Regular) raw(key) \csname\??ff#1#2\endcsname \else\ifcsname\??ff\fontclass#1\endcsname % exp(palatino Regular) raw(key) \expandafter\truefontdata\csname\??ff\fontclass#1\endcsname#2% \else\ifcsname\??ff#1\endcsname % exp(Regular) raw(key) \expandafter\truefontdata\csname\??ff#1\endcsname#2% \else\ifcsname\??ff#2\endcsname % raw(key) \csname\??ff#2\endcsname \fi\fi\fi\fi} \def\truefontname#1% {\ifcsname\??ff\fontclass#1\endcsname \@EA\truefontname\csname\??ff\fontclass#1\endcsname \else\ifcsname\??ff#1\endcsname \@EA\truefontname\csname\??ff#1\endcsname \else #1% \fi\fi} \def\expandfontsynonym#1#2% #2 := onelevelexpansion(#1) {\ifcsname\??ff\fontclass#2\endcsname \expandafter\def\expandafter#1\expandafter{\csname\??ff\fontclass#2\endcsname}% \fi} \def\doifelsefontsynonym#1% {\ifcsname\??ff\fontclass#1\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \definetypeface[palatino][rm][serif][palatino,allbold][default] % % \startfontclass[palatino] % \definefontsynonym [Serif] [SerifBold] % \definefontsynonym [SerifItalic] [SerifBoldItalic] % \definefontsynonym [SerifSlanted] [SerifBoldSlanted] % \definefontsynonym [SerifCaps] [SerifBold] % \stopfontclass % % \setupbodyfont[palatino] \def\startfontclass {\dosingleempty\dostartfontclass} \def\dostartfontclass[#1]% {\pushmacro\fontclass \doifelse{#1}{\v!each} {\let\fontclass\empty} {\doifsomething{#1}{\def\fontclass{#1}}}} \def\stopfontclass {\popmacro\fontclass} %D \macros %D {tracedfontname} %D %D A goody: \def\tracedfontencoding#1% {\ifcsname\??ff#1\s!encoding\endcsname \space[\csname\??ff#1\s!encoding\endcsname]% \fi} \def\tracedfontname#1% {\ifcsname\??ff\fontclass#1\endcsname #1\tracedfontencoding{\fontclass#1}\space->\space \@EA\tracedfontname\csname\??ff\fontclass#1\endcsname \else\ifcsname\??ff#1\endcsname #1\tracedfontencoding{#1}\space->\space \@EA\tracedfontname\csname\??ff#1\endcsname \else #1% \fi\fi} %D \macros %D {getfontfileparameters} %D %D For special purposes, one can use the next macro to %D access font file characteristics, for instance: %D %D \starttyping %D \getfontfileparameters{Regular} %D \stoptyping %D %D can result in: %D %D \starttyping %D \def\currentfontfileencoding{texnansi} %D \stoptyping \def\getfontfileparameters#1% can be simpler for mkii (no features) {\edef\@@truefontname{\truefontname{#1}}% \edef\currentfontfileencoding{\truefontdata\@@truefontname\s!encoding}% \edef\currentfontfilemapping {\truefontdata\@@truefontname\s!mapping }% \edef\currentfontfilehandling{\truefontdata\@@truefontname\s!handling}} %D \macros %D {definefont} %D %D Before we implement the main definition macro, we first show %D one for local use: %D %D \starttyping %D \definefont[Some][LucidaBright at 100pt] \Some some %D \definefont[More][LucidaBright scaled 3000] \More more %D \definefont[Nice][LucidaBright mp 2] \Nice nice %D \definefont[Text][LucidaBright sa 5.4] \Text last %D \stoptyping %D %D The implementation looks as follows: \def\definefont {\dotripleempty\dodefinefont} \def\dodefinefont[#1][#2][#3]% [name][spec][1.6 | line=10pt | setup_id] {\doifinstringelse{ }{#2} {\ifthirdargument \unexpanded\setvalue{#1}{\redodefinefont{#1}{#2}{#3}}% \else \unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}% \fi} {\definefont[#1][#2 sa *][#3]}} \def\redodefinefont#1#2#3% {\dododefinefont{#1}{#2}% \doifsetupselse{#3} {\setups[#3]} % don't forget to document this ! {\setuplocalinterlinespace[#3]% \setupspacing}} % needed ? \def\definefrozenfont {\dotripleempty\dodefinefrozenfont} \def\dodefinefrozenfont[#1][#2][#3]% {\dodefinefont[#1][#2][#3]% \expandafter\let\csname\lastfontidentifier\expandafter\endcsname\csname\rawfontidentifier\endcsname} % \def\defineclassfont % {\doquadrupleempty\dodefineclassfont} % % \def\dodefineclassfont[#1][#2][#3][#4]% #2 = class % {\iffourthargument % \definefont[#1][#2#3][#4]% % %\else\ifthirdargument % % \definefont[#1][#2#3]% % \else % \definefont[#1][#2]% % \fi} %D The \type {*} makes the switch local, so that we can redefine a %D logical name and/or change the size in between. \newif\ifautofontsize \autofontsizetrue \let\lastfontidentifier\empty \def\rawfontidentifier{**\lastfontidentifier\fontsize**} \def\newfontidentifier{*\fontclass\lastfontidentifier\fontsize*} % best we can add the style as well because otherwise we get math encoding mixups % % \setupbodyfont [8pt] [\currentencoding/\ccaron\scaron\zcaron] % \blank % \switchtobodyfont[7pt] [\currentencoding/\ccaron\scaron\zcaron] \def\newfontidentifier{*\fontclass\lastfontidentifier\fontstyle\fontsize*} \def\dododefinefont#1#2% {\edef\lastfontidentifier{#1}% \let\localrelativefontsize\defaultrelativefontsize \let\localabsolutefontsize\fontbody \parsefontspec{#2}\rawfontidentifier \let\localrelativefontsize\defaultrelativefontsize % not needed \csname\rawfontidentifier\endcsname \autofontsizefalse \setfontcharacteristics \the\everyfontswitch} \def\xxdododefinefont#1#2#3#4% \autofontsizetrue is set by calling routine {\edef\lastfontidentifier{#3}% \ifcsname\newfontidentifier\endcsname\else \def\localrelativefontsize{#1}% \def\localabsolutefontsize{#2}% \parsefontspec{#4}\newfontidentifier \let\localrelativefontsize\defaultrelativefontsize % not needed \fi \csname\newfontidentifier\endcsname \autofontsizefalse %\edef\lastfontidentifier{#3}% \ifskipfontcharacteristics \else \setfontcharacteristics \the\everyfontswitch \fi} %D I considered checking for mistakenly use of \PLAIN's %D \type{\magstep}'s but although it would take only a few %D lines of code, this would not add to consistent use. I %D therefore removed this check. %D \macros %D {mapfontsize} %D %D For special purposes, like in math, you may want to use %D slightly different sizes than the ones given. This happens %D for instance with the Math Times fonts. Mapped font sizes %D can be specified by using the \type {mo} key instead of %D \type {sa} in font definitions. %D %D \startbuffer %D \mapfontsize[10pt][11pt] %D \mapfontsize[11pt][12pt] %D \mapfontsize[12pt][13pt] %D %D \definefont[test][Serif]\test TEST \par %D \definefont[test][Serif sa 5]\test TEST \par %D \definefont[test][Serif mo 5]\test TEST \par %D \definefont[test][Serif sa d]\test TEST \par %D \definefont[test][Serif at 60pt]\test TEST \par %D \definefont[test][Serif scaled 6000]\test TEST \par %D \stopbuffer %D %D \typebuffer %D %D \startpacked %D \getbuffer %D \stoppacked \def\mapfontsize {\dodoubleargument\domapfontsize} \def\domapfontsize[#1][#2]% {\scratchdimen#1\relax % \relax is really needed here \setvalue{\??ft*\the\scratchdimen}{#2}} \def\setmappedfontsize#1% {\ifcsname\??ft*#1\endcsname \csname\??ft*#1\endcsname \else #1% \fi} %D \macros %D {getfontname} %D %D The names of the fonts can be called with the rather simple %D macro \type{\getfontname}. When for instance we pass %D \type{12ptrmtf} as argument, we get \getfontname{12ptrmtf}. \def\getfontname#1% {\csname\??ft#1\endcsname} %D To be documented. \let\fontsizelist\empty \let\fontstylelist\empty \def\definefontsize[#1]% sneller met toks {\addtocommalist{#1}\fontsizelist \def\docommand##1% {\def\dodocommand####1% {\def\dododocommand########1% %{\checkbodyfont{}{########1}{####1}{##1}}% {\checkbodyfont{########1}{####1}{##1}}% \processcommacommand[\fontstylelist]\dododocommand}% \processcommacommand[\fontalternativelist]\dodocommand}% \processcommacommand[\fontsizelist]\docommand} \def\fontalternativetextlist{\c!tf,\c!bf,\c!it,\c!sl,\c!bs,\c!bi,\c!sc} \def\fontalternativemathlist{\c!mr,\c!mi,\c!sy,\c!ex,\c!ma,\c!mb} \let\fontalternativelist\fontalternativetextlist % upward compatible %D \macros %D {currentfontscale,currentfontbodyscale} %D %D Sometimes we need to have access to the font scale %D including the \type{a}||\type{d} sizes. The next macro %D returns the current scaling factor. Take a look at %D \type {cont-log.tex} for an example of its use. \def\currentfontscale {\csname\??ft\s!default \ifcsname\??ft\s!default\xfontsize\endcsname \xfontsize \else \ifcsname\??ft\s!default\s!text \endcsname \s!text \fi\fi \endcsname} \def\currentfontbodyscale {\csname\??ft\s!default \ifcsname\??ft\s!default\fontsize\endcsname \fontsize \else \ifcsname\??ft\s!default\s!text \endcsname \s!text \fi\fi \endcsname} \setvalue{\??ft\s!default}{1} %D Both alternatives use \type {\xfontsize}, a macro that %D expands to the current size in terms of \type {a} \unknown %D \type {d}, nothing, or \type {x} \unknown \type {xx}. \def\xfontsize{\ifcase\currentxfontsize\fontsize\or\c!x\else\c!xx\fi} %D A typical use of this command is in commands that switch %D to another font bypassing the font mechanism: %D %D \starttyping %D \font\myfont=\truefontname{MyFont} at \currentfontscale\bodyfontsize %D \stoptyping %D Now we enter the area of font switching. The switching %D mechanism has to take care of several situations, like: %D %D \startitemize[packed] %D \item changing the overal document fonts (including margins, %D headers and footers) %D \item changing local fonts (only the running text) %D \item smaller and even more smaller alternatives (super- %D and subscripts) %D \stopitemize %D %D \TEX\ offers a powerfull family mechanism for super- and %D subscripts in math mode. In text mode however, we don't use %D families for the smaller alternatives, and therefore have %D to take care of it otherwise. %D \macros %D {definebodyfontenvironment,setupbodyfontenvironment} %D %D The relationship between the several sizes of a font, is %D defined by: %D %D \showsetup{definebodyfontenvironment} %D %D Later on we will see how these parameters are used, so for %D the moment we stick with an example: %D %D \starttyping %D \definebodyfontenvironment %D [12pt] %D [ text=12pt, %D script=9pt, %D scriptscript=7pt, %D x=10pt, %D xx=8pt, %D big=12pt, %D small=10pt] %D \stoptyping %D %D The first argument specifies the bodyfont size to which the %D settings apply. All second parameters are specified in %D dimensions and tell us more about related sizes. %D %D Afterwards, one can change values with %D %D \showsetup{setupbodyfontenvironment} %D %D Due to the fact that \type{\c!text} and \type{\s!text} can %D have a similar meaning, and therefore can lead to an %D unwanted loop, we temporary redefine \type{\c!text}. For %D the moment this in only place that some trickery is needed %D to fool the multilingual interface. %D %D When instead of a size the keyword \type{unknown} is %D passed, fractions (relations) are used instead of fixed %D sizes. \let\bodyfontenvironmentlist\empty \newcount\@@fontdefhack \def\@@beginfontdef {\ifcase\@@fontdefhack \let\k!savedtext \k!text \let\k!text \s!text \let\k!k!savedtext \k!k!text \let\k!k!text \!!plusone \let\k!saveddefault \k!default \let\k!default \s!default \let\k!k!saveddefault\k!k!default \let\k!k!default \!!plusone \fi \advance\@@fontdefhack \plusone } \def\@@endfontdef {\advance\@@fontdefhack \minusone \ifcase\@@fontdefhack \let\k!k!default\k!k!saveddefault \let\k!default \k!saveddefault \let\k!k!text \k!k!savedtext \let\k!text \k!savedtext \fi} \def\definebodyfontenvironment {\dotripleempty\dodefinebodyfontenvironment} \def\dodefinebodyfontenvironment[#1][#2][#3]% class size settings {\ifthirdargument \@@beginfontdef \doifelse{#2}\s!default {\getparameters[\??ft\s!default][#3]} {\normalizebodyfontsize#2\to\tempbodyfontsize \addtocommalist\tempbodyfontsize\bodyfontenvironmentlist \@EA\dododefinebodyfontenvironment\@EA[\tempbodyfontsize][#1][#3]}% \@@endfontdef \else \definebodyfontenvironment[\fontclass][#1][#2]% change */* \fi} \def\dododefinebodyfontenvironment[#1][#2][#3]% size class settings {\@@beginfontdef \doifundefined{\??ft#2#1\c!em} % \s!text goes wrong in testing because {\def\docommand##1% % the 12pt alternative will called when {\scratchdimen#1\relax % typesetting the test (or so) \scratchdimen\csname\??ft\s!default##1\endcsname\scratchdimen \normalizebodyfontsize\scratchdimen\to\tempbodyfontsize \setevalue{\??ft#2#1##1}{\tempbodyfontsize}}% \processcommacommand[\fontrelativesizelist]\docommand \copyparameters [\??ft#2#1][\??ft\s!default] [\c!interlinespace,\c!em]}% \getparameters[\??ft#2#1][#3]% \@@endfontdef % new code, see remark \ifloadingfonts \else % only runtime \doifundefined{\@size@#1} % only once {\letvalue{\@size@#1}\empty % prevent loop \defineunknownfont{#1}}% % safeguard \fi % so far \setvalue{\@size@#1}{\docompletefontswitch[#1]}} %D {\bf Remark:} We need to cover the following cases, %D otherwise users can get confused: %D %D \starttyping %D \setupbodyfont[23pt] %D %D \definebodyfontenvironment[23pt] %D \setupbodyfont[23pt] %D %D \definebodyfontenvironment[23pt] %D \definebodyfont[23pt][rm,ss,tt][default] %D \setupbodyfont[23pt] %D \stoptyping %D Beware: while some font defs can be global, the bodyfont %D environment checks local. This means that multiple local %D checks resulting in definitions are not that efficient. %D So, apart from an occasional switch, one should define an %D environment at the outer level. \def\checkbodyfontenvironment[#1]% {\definebodyfontenvironment[\fontclass][#1][]} % original % % \def\setupbodyfontenvironment % {\dotripleempty\dosetupbodyfontenvironment} % % \def\dosetupbodyfontenvironment[#1][#2][#3]% class size settings % {\@@beginfontdef % \ifthirdargument % \getparameters[\??ft#1#2][#3]% % \else % \getparameters[\??ft#1][#2]% % \fi % \@@endfontdef} % % this one already catches both define/setup \def\setupbodyfontenvironment{\definebodyfontenvironment} % officially, but not needed (yet): % % \def\dosetupbodyfontenvironment[#1][#2][#3]% class size settings % {\ifthirdargument % \localbodyfontsize#2\relax % \normalizebodyfontsize\localbodyfontsize\to\normalizedbodyfontsize % \doifundefinedelse{\??ft#1\normalizedbodyfontsize\c!em} % {\definebodyfontenvironment[#1][#2][#3]}% % {\getparameters[\??ft#1\normalizedbodyfontsize][#3]}% % \else % \localbodyfontsize#1\relax % \normalizebodyfontsize\localbodyfontsize\to\normalizedbodyfontsize % \doifundefinedelse{\??ft\normalizedbodyfontsize\c!em} % {\definebodyfontenvironment[#1][#2]}% % {\getparameters[\??ft\normalizedbodyfontsize][#2]}% % \fi} %D Just a couple of interface macros: \def\bodyfontvariable#1% {\??ft\ifcsname\??ft\fontclass#1\endcsname\fontclass\fi#1} \def\bodyfontcsname {\csname\bodyfontvariable} \def\bodyfontinterlinespecs {\bodyfontvariable{\normalizedbodyfontsize\c!interlinespace}} \def\bodyfontinterlinespace {\csname\bodyfontinterlinespecs\endcsname} %D We default all parameters to the main bodyfont size (begin %D \type{#1}), so the next setup is valid too: %D %D \starttyping %D \definebodyfontenvironment[24pt] %D \stoptyping %D %D All parameters can be redefined when needed, so one does %D not have to stick to the default ones. %D \macros %D {definebodyfont} %D %D The next step in defining a bodyfont involves the actual font %D files, which can be recognized by their extension %D \type{tfm}. Installing those file is often beyond the %D scope of the user and up to the system administrator. %D %D \showsetup{definebodyfont} %D %D This commands takes three arguments: a (series of) bodyfont %D size(s), the style group to which the definitions belong, %D and an alternative, as specified by the \TEX\ (math) families, %D extended with~a, b~\unknown. %D %D We show two examples, that show all the alternative %D scaling options. The \type{\tfa} alternatives can be %D extended with \type{\bfa}, \type{\slb}, etc. or even %D \type{e} and higher alternatives. %D %D \starttyping %D \definebodyfont [12pt] [rm] %D [tf=cmr12, %D bf=cmbx12, %D it=cmti12, %D sl=cmsl12, %D bi=cmbxti10 at 12pt, %D bs=cmbxsl10 at 12pt, %D tfa=cmr12 scaled \magstep1, %D tfb=cmr12 scaled \magstep2, %D tfc=cmr12 scaled \magstep3, %D tfd=cmr12 scaled \magstep4, %D sc=cmcsc10 at 12pt] %D %D \definebodyfont [12pt,11pt,10pt,9pt,8pt] [rm] %D [tf=lbr sa 1, %D bf=lbd sa 1, %D it=lbi sa 1, %D sl=lbsl sa 1, %D bi=lbdi sa 1, %D bs=lbdi sa 1, %D tfa=lbr sa 1.200, %D tfb=lbr sa 1.440, %D tfc=lbr sa 1.728, %D tfd=lbr sa 2.074, %D sc=lbr sa 0.833] %D \stoptyping %D %D The second example shows that we can define more sizes at %D once. The main difference between these examples is that the %D Computer Modern Roman come in many design sizes. This means %D that there we cannot define them in bulk using \type{sa}. %D Instead of \type{rm} (roman) one can define \type{ss} (sans %D serif), \type{tt} (teletype), \type{hw} (hand written), %D \type{cg} (calygraphic) and whatever styles. %D %D The first argument may be a comma separated list. This, %D combined with specifications using \type{sa} can save a lot %D of typing. Although all arguments should be specified, we %D treat the second argument as optional. %D %D Defining a bodyfont involves two actions: defining the %D specific style related alternatives, like \type{\rma}, %D \type{\bfa} and \type{\rmsla}, and storing the definitions %D of their bodyfont size related fonts. The first step is %D bodyfont independant but executed every time. This permits %D user definitions like \type{\tfw} or \type{\bfq} for real %D large alternatives. \def\definebodyfont {\doquadrupleempty\redefinebodyfont} \def\redefinebodyfont[#1][#2][#3][#4]% {\iffourthargument \processcommacommand[#1]{\reredefinebodyfont[#2][#3][#4]}% \else \dodefinebodyfont[#1][#2][#3]% \fi} \def\reredefinebodyfont[#1][#2][#3]#4% {\pushmacro\fontclass \doifelse{#4}\s!default {\let\fontclass\empty} {\def\fontclass{#4}}% \definebodyfont[#1][#2][#3]% \popmacro\fontclass} \def\dodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier {\ifthirdargument \doifnumberelse{#1} {\doifassignmentelse{#3} {% [12pt] [style] [settings] \doifundefined{#2}{\expanded{\definefontstyle[#2][#2]}}% new \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}} {% [12pt] [style] [identifier] \dodefinedefaultbodyfont[#1][#2][#3]}} % body style identifier {% [identifier] [style] [settings] % see *** \setvalue{\s!default#1#2}##1##2{\expanded{\xdodefinebodyfont[##1][##2][#3]}}}% \else\ifsecondargument \definebodyfont[#1][\c!rm][#2]% \else \doifundefined{\@size@#1} % Maybe there are default dependancies {\defineunknownfont{#1}}% defined which we can use ([unknown]) \doifundefined{\@size@#1} % and if not, then we have at least to {\definebodyfont[#1][\c!rm][]}% make sure some basics are set up. \fi\fi} \def\xdodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier {%\writestatus{[#1]}{[#2][#3]}% \checkrelativefontsize{#2}% rather new, inherit from other defs \ifundefined{#2}\expanded{\definefontstyle[#2][#2]}\fi % new \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}% \let\relativefontsize\defaultrelativefontsize} \def\dododefinebodyfont#1#2#3% style defs body {\checkbodyfontenvironment[#3]% just to be sure. \processcommalist[#2]{\dodododefinebodyfont{#1}{#3}}} \def\dodododefinebodyfont#1#2#3% style body def {\dododododefinebodyfont{#1}{#2}[#3]} \newif \ifresolvefontfile % protected by fontclass anyway \def\resolvefontname#1 {\truefontname{#1} } \def\iflocalclassfonts{\ifx\fontclass\empty} \def\dododododefinebodyfont#1#2[#3#4#5=#6]% style body def {\ifundefined{#1#3#4#5}% %\checkbodyfont{#2}{#1}{#3#4}{#5}% not \definefontsize[#5] \checkbodyfont{#1}{#3#4}{#5}% not \definefontsize[#5] \fi \iflocalclassfonts \letbeundefined{*\fontclass#2#1#3#4#5*}% \scratchtoks{#6}% \expanded{\unexpanded\noexpand\setvalue{#2#1#3#4#5}% {\noexpand\xxdododefinefont{\relativefontsize}{#2}% {#2#1#3#4#5}{\the\scratchtoks}}}% \else %\expanded{\writestatus{defining}{[\fontclass][#2#1#3#4#5] \resolvefontname#6 }}% \global\letbeundefined{*\fontclass#2#1#3#4#5*}% \ifresolvefontfile \unexpanded\setxvalue{\fontclass#2#1#3#4#5}% {\noexpand\xxdododefinefont{\relativefontsize}{#2}% {#2#1#3#4#5}{\resolvefontname#6 }}% \else \scratchtoks{#6}% \expanded{\unexpanded\noexpand\setgvalue{\fontclass#2#1#3#4#5}% {\noexpand\xxdododefinefont{\relativefontsize}{#2}% {#2#1#3#4#5}{\the\scratchtoks}}}% \fi \fi} % \def\checkbodyfont#1#2#3#4% body style alt size / gdef % #4 can be empty % {\def\c!!mm{#2}% % \ifx\c!!mm\c!mm % prevents \max and alike (re)defs % \unexpanded\setgvalue {#2}{\setcurrentfontstyle {#2}}% \rm % \unexpanded\setgvalue {#3}{\setcurrentfontalternative {#3}}% \sl % \else % \unexpanded\setgvalue {#2#4}{\setcurrentfontstylesize {#2}{#4}}% \rma % \unexpanded\setgvalue {#3#4}{\setcurrentfontalternativesize {#3}{#4}}% \sla % \unexpanded\setgvalue {#2#3#4}{\setcurrentfontstylealternativesize{#2}{#3}{#4}}% \rmsla % \unexpanded\setgvalue {#2}{\setcurrentfontstyle {#2}}% \rm % \unexpanded\setgvalue {#3}{\setcurrentfontalternative {#3}}% \sl % \unexpanded\setgvalue {#2\c!x}{\setcurrentfontxstylealternative {#2}}% \rmx % \unexpanded\setgvalue{#2\c!xx}{\setcurrentfontxxstylealternative {#2}}% \rmxx % \unexpanded\setgvalue {#3\c!x}{\setcurrentfontxalternative {#3}}% \slx % \unexpanded\setgvalue{#3\c!xx}{\setcurrentfontxxalternative {#3}}% \slxx % \unexpanded\setgvalue {#2#3}{\setcurrentfontstylealternative {#2}{#3}}% \rmsl % \fi} % % leaner \def\checkbodyfont#1% tests for ttsl mmbf {\def\c!!mm{#1}% \ifx\c!!mm\c!mm % prevents \max and alike (re)defs \expandafter\checkmathbodyfont \else \expandafter\checktextbodyfont \fi{#1}} % no \c!!mm, not expanded later on \def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty {%\message{!m #1 #2 #3!}% % #1 #2 #3 = signal \unexpanded\setgvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}% \mmsla \unexpanded\setgvalue {#1}{\setcurrentfontstyle {#1}}% \mm \unexpanded\setgvalue {#2}{\setcurrentfontalternative {#2}}}% \sl \def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty {%\message{!t #1 #2 #3!}% \unexpanded\setgvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}% \rma \unexpanded\setgvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}% \sla \unexpanded\setgvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}% \rmsla \unexpanded\setgvalue {#1}{\setcurrentfontstyle {#1}}% \rm \unexpanded\setgvalue {#2}{\setcurrentfontalternative {#2}}% \sl \unexpanded\setgvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}% \rmx \unexpanded\setgvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}% \rmxx \unexpanded\setgvalue {#2\c!x}{\setcurrentfontxalternative {#2}}% \slx \unexpanded\setgvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}% \slxx \unexpanded\setgvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}}% \rmsl \def\dodefinedefaultbodyfont[#1][#2][#3]% sizes styles identifier {\def\dododefinedefaultbodyfont##1% {\def\dodododefinedefaultbodyfont####1% {\def\dododododefinedefaultbodyfont########1% {\doifdefined{\s!default########1####1} {% [12pt] [style] [identifier] \getvalue{\s!default########1####1}{##1}{####1}}}% \processcommalist[#3]\dododododefinedefaultbodyfont}% \processcommalist[#2]\dodododefinedefaultbodyfont}% \processcommalist[#1]\dododefinedefaultbodyfont} %D Unknown families are added to the family list! For the %D moment we also set the direct calls here. Some day a better %D solution will be implemented. The good news is that unknown %D fonts are defined automatically. \newif\ifdefiningunknownfont % \def\defineunknownfont#1% % {\let\c!savedtext\c!text % \let\c!text\s!text % \donefalse % \def\docommand##1% % {\doifdefined{\??ft\s!default##1} % {\donetrue % \scratchdimen#1\relax % \scratchdimen\csname\??ft\s!default##1\endcsname\scratchdimen % \normalizebodyfontsize\scratchdimen\to\!!stringa % \letvalue{\??ft#1##1}\!!stringa}}% % \processcommacommand[\fontrelativesizelist]\docommand % \let\c!text\c!savedtext % \ifdone % \donefalse % \def\defineunknownbodyfont##1% see *** % %{\doifdefined{\s!default##1} % % {\donetrue\getvalue{\s!default##1}{#1}}}% % {\doifdefined{\s!default\s!default##1} % {\donetrue\getvalue{\s!default\s!default##1}{#1}{##1}}}% % \processcommacommand % [\fontstylelist] % \defineunknownbodyfont % \ifdone % \setvalue{\@size@#1}{\docompletefontswitch[#1]}% % \ifdefiningunknownfont \else % \definingunknownfonttrue % \def\defineunknownsubfont##1% % {\doifundefined{\@size@\getvalue{\??ft#1##1}} % {\defineunknownfont{\getvalue{\??ft#1##1}}}}% % \processcommacommand[\fontrelativesizelist]\defineunknownsubfont % \definingunknownfontfalse % \fi % \fi % \ifdone % \showmessage\m!fonts{14}{#1}% % \fi % \fi} \def\dodefineunknownfont#1#2% {\doifdefined{\??ft\s!default#2} {\donetrue \scratchdimen#1\relax \scratchdimen\csname\??ft\s!default#2\endcsname\scratchdimen \normalizebodyfontsize\scratchdimen\to\!!stringa \letvalue{\??ft#1#2}\!!stringa}} % \def\dodefineunknownbodyfont#1#2% see *** % {\doifdefined{\s!default\s!default#2} % {\donetrue % \getvalue{\s!default\s!default#2}{#1}{#2}}} % % but ... it needs to be as follows: % % \def\dodefineunknownbodyfont#1#2% see *** % {\doifdefined{\s!default\fontclass#2}% was \s!default\s!default (related to change */*) % {\donetrue % \getvalue{\s!default\fontclass#2}{#1}{#2}}} % % eh ... this does not work so we revert back to: \def\dodefineunknownbodyfont#1#2% see *** {\doifdefined{\s!default\s!default#2}% somehow related to */* {\donetrue \getvalue{\s!default\s!default#2}{#1}{#2}}} \def\dodefineunknownsubfont#1#2% {\doifundefined{\@size@\getvalue{\??ft#1#2}} {\donetrue \defineunknownfont{\getvalue{\??ft#1#2}}}} \def\defineunknownfont#1% {\let\c!savedtext\c!text \let\c!text\s!text \donefalse \processcommacommand[\fontrelativesizelist]{\dodefineunknownfont{#1}}% \let\c!text\c!savedtext \ifdone \donefalse \processcommacommand [\fontstylelist] {\dodefineunknownbodyfont{#1}}% \ifdone \donefalse \setvalue{\@size@#1}{\docompletefontswitch[#1]}% \ifdefiningunknownfont \else \definingunknownfonttrue \processcommacommand[\fontrelativesizelist]{\dodefineunknownsubfont{#1}}% \definingunknownfontfalse \fi \fi \ifdone \showmessage\m!fonts{14}{#1}% \fi \fi} % \def\defineunknownfontstyles#1% % {\def\defineunknownbodyfont##1% see *** % {\executeifdefined{\s!default\s!default##1}\gobbletwoarguments{#1}{##1}}% % \rawprocesscommacommand[\fontstylelist]\defineunknownbodyfont} %D These macros show that quite some definitions take place. %D Fonts are not loaded yet! This means that at format %D generation time, no font files are preloaded. %D A previous implementation used: %D %D \starttyping %D \type {\setvalue{name}{\donottest...}} %D \stoptyping %D %D instead of the more memory hungry: %D %D \starttyping %D \unexpanded\setvalue{name}{...} %D \stoptyping %D %D The first alternative saves about 500 hash entries (about %D 2.5\% of the total number of entries used. The second %D alternative is currently used, because that one can more %D easily be made \ETEX\ aware. %D \macros %D {everybodyfont,Everybodyfont,everyglobalbodyfont} %D %D Every change in bodyfont size has conseqences for the baseline %D distance and skips between paragraphs. These are initialized %D in other modules. Here we only provide the hooks that %D garantees their handling. % \ifx\everybodyfont\undefined % permits reloading % \newevery \everybodyfont \EveryBodyFont % \fi %D At the system level one can initialize thing like: %D %D \starttyping %D \appendtoks \setupspacing \to \everybodyfont %D \stoptyping %D %D While users can add their own non standard commands like: %D %D \starttyping %D \EveryBodyFont{\message{changing to bodyfont \the\bodyfontsize}} %D \stoptyping %D %D Personnaly I never felt the need for such extensions, but %D at least its possible. %D \macros %D {globalbodyfontsize,localbodyfontsize} %D %D Next we'll do the tough job of font switching. Here we %D have to distinguish between the global (overal) bodyfont %D size and the local (sometimes in the textflow) size. We %D store these dimensions in two \DIMENSION\ registers. \ifdefined\globalbodyfontsize\else \newdimen\globalbodyfontsize \fi \globalbodyfontsize=12pt \ifdefined\localbodyfontsize \else \newdimen\localbodyfontsize \fi \localbodyfontsize =\globalbodyfontsize %D \macros %D {bodyfontsize} %D %D These two registers are not to be misused in calculations. %D For this purpose we keep a copy: \newdimen\bodyfontsize \bodyfontsize=\globalbodyfontsize %D \macros %D {outputresolution} %D %D Sometimes (to be honest: not in this module) we need to %D take the system resolution into account. Therefore we also %D define a macro: \def\outputresolution {600} %D \macros %D {bodyfontfactor,bodyfontpoints} %D %D For multiplication purposes we keep an auxiliary counter %D and macro (here the expansion is not explicitly needed): \newcount\bodyfontpoints \dimensiontocount\bodyfontsize\bodyfontpoints \edef\bodyfontfactor{\withoutpt\the\bodyfontsize} %D When we assign for instance 12pt to a \DIMENSION\ register %D the \type{\the}'d value comes out as 12.0pt, which is %D often not the way users specify the bodyfont size. Therefore %D we also store the normalized value. \chardef\fontdigits=2 % was 1 % \def\normalizebodyfontsize#1\to#2% % {\scratchdimen#1\relax % \ifcase\fontdigits\advance\scratchdimen.5\points\fi % \@EA\@EA\@EA\donormalizedbodyfontsize\@EA\WITHOUTPT\the\scratchdimen00\to#2} % % \def\donormalizedbodyfontsize#1.#2#3#4\to#5% \points ? % {\edef#5% % {#1% % \ifcase\fontdigits\or % \ifcase#2 \else.#2\fi % and not: \ifcase#2\else ... % \else % \ifcase#2#3 \else.#2\ifcase#3 \else#3\fi\fi % not: \ifcase#2#3\else ... % \fi % \s!pt}} \def\normalizebodyfontsize#1\to#2% {\scratchdimen\dimexpr#1+\ifcase\fontdigits.5\or.05\or.005\fi\points\relax \@EA\@EA\@EA\donormalizedbodyfontsize\@EA\WITHOUTPT\the\scratchdimen000\to#2} \def\donormalizedbodyfontsize#1.#2#3#4#5\to#6% \points ? {\edef#6% not \ifcase#2\else due to \relax adding {#1% \ifcase\fontdigits \or \ifcase#2 \else .#2\fi % 1 \or \ifcase#2#3 \else .#2\ifcase#3 \else #3\fi\fi % 2 \else \ifcase#2#3#4 \else .#2\ifcase#4 \ifcase#3 \else#3\fi \else#3#4\fi\fi % 3 \fi \s!pt}} %D To be internationalized: \def\korpsgrootte {\bodyfontsize} \def\korpspunten {\bodyfontpoints} %D some day. %D \macros %D {fontstyle,fontalternative,fontsize} %D %D Within a bodyfont, fonts can come in different sizes. For %D instance \type{\tf} is accompanied by \type{\tfa}, %D \type{\tfb} etc. The first two characters denote the %D alternative, while the third character in these sequences %D represents the size. The actual size is saved in a macro %D %D The style, being roman (\type{\rm}), sans serif (\type{\ss}) %D etc. is also available in a macro in \type{rm}, \type{ss} %D etc. form: \let\defaultfontalternative = \c!tf \let\defaultfontstyle = \empty \let\defaultfontsize = \empty \let\fontalternative = \defaultfontalternative \let\fontstyle = \defaultfontstyle \let\fontsize = \defaultfontsize %D {\em The following approach is obsolete.} %D %D All things related to fonts are grouped into files with %D names like \type{font-cmr}. These files are loaded by: \def\resetfontdefinitionfile[#1]% {\letbeundefined{\c!file\f!fontprefix#1}} \newif\ifloadfontfileonce \def\doreadfontdefinitionfile#1#2% #1 = set/switch state {\doifundefined{\c!file\f!fontprefix#2}% {\ifloadfontfileonce \letvalue{\c!file\f!fontprefix#2}\empty \fi \makeshortfilename[\truefilename{\f!fontprefix#2}]% \startreadingfile \readsysfile{\shortfilename.mkii} {\showmessage\m!fonts2{#2}} {\showmessage\m!fonts3{#2}}% \stopreadingfile}} %D When \type {\loadfontfileoncetrue}, such files are %D only loaded once! This permits redundant loading, but at %D the same time forced grouping when we want continuously mix %D all kind of font, which of course is a kind of %D typographically sin. The \type{"} is made inactive if %D needed to prevent problems with loading files that use this %D character in numbers. \def\doswitchpoints[#1]% {\expanded{\dodoswitchpoints{#1}}} \def\dodoswitchpoints#1% {\doifundefined{\@size@#1} {\defineunknownfont{#1}}% %\defineunknownfontstyles{#1}% \doifdefinedelse{\@size@#1} {\getvalue{\@size@#1}% \localbodyfontsize#1\relax \normalizebodyfontsize\localbodyfontsize\to\normalizedbodyfontsize \checkbodyfontenvironment[\normalizedbodyfontsize]} {\showmessage\m!fonts4{#1}}} \unprotected \def\doswitchstyle[#1]% {\doifdefinedelse{\@style@#1} {\getvalue{\@style@#1}% \edef\fontstyle{#1}% \ifmmode\mr\fi % in order to be compatible with \rm in math mode }% \the\everybodyfont} % cleaner, in setting size as well as style {\showmessage\m!fonts5{#1}}} %D \TEX\ loads font metric files like \type{cmr10.tfm} and %D \type{tir.tfm} only once. In \PLAIN\ \TEX\ some font files %D are {\em preloaded}. This means that the font files are %D loaded, but not accessible yet by name. This is accomplished %D by saying: %D %D \starttyping %D \font\preloaded=cmr10 at 11pt %D \stoptyping %D %D and using the name \type{\preloaded} again and again, so %D fonts are indeed loaded, but unnamed, and therefore %D unaccessible. In \CONTEXT\ we don't preload fonts, not even %D the \PLAIN\ \TEX\ ones, although users can access them. Now %D why is this done? %D Defining fonts using \type{\definebodyfont} takes time, so we %D prefer to predefine at least the Computer Modern Roman %D fonts. However, loading all those fonts at definition time %D would take both time and space. But even worse, once fonts %D are loaded into memory, their encoding vector is fixed, %D which is a handicap when we want to distribute the compact %D \type{fmt} files. So what we want to do is defining fonts in %D a way that postpones the loading. We accomplish this by only %D loading the fonts when we switch to another bodyfont size. %D Among the other alternatives, such as loading the font at %D the moment of activation and redefining the activation %D macro afterwards, this proved to be the most efficient %D alternative. %D %D The next few macros take care of the one exeption on this %D scheme. When at format generation time we load the default %D font file, the one that defines the Computer Modern Fonts, %D we don't want the fonts metrics to end up in the format %D file, so we temporary prohibit loading. This means that at %D runtime we have to load the default bodyfont size just before %D we start typesetting. %D %D Therefore we have to signal the font switching macros that %D we are preloading fonts. As long as the next boolean is, %D true, no loading is done. \newif\ifloadingfonts \loadingfontstrue %D \macros %D {preloadfonts} %D %D Preloading is only called for once, during the startup %D sequence of a session. After the loading job is done, the %D macro relaxes itself and reset the signal. \def\preloadfonts % never called, needs a clean up {\showmessage\m!fonts6{\normalizedbodyfontsize\normalspace\fontstyle}% \global\loadingfontsfalse \doswitchpoints[\normalizedbodyfontsize]% \doswitchstyle[\fontstyle]% \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace \global\let\preloadfonts\relax} % \prependtoks \preloadfonts \to \everydump % saves .1 s on a DELL P60 - 2GHZ %D Here comes the main font switching macros. These macros %D handle changes in size as well as returning to the global %D bodyfont size. \def\dosetfont#1#2% #1 = set/switch state {\doifelse{#2}\v!global {\restoreglobalbodyfont} {\processcommacommand[#2]{\dodosetfont{#1}}% ##1 get also passed \ifloadingfonts\else \doswitchpoints[\normalizedbodyfontsize]% \doswitchstyle[\fontstyle]% \fi}% \chardef\currentxfontsize\zerocount} \def\dodosetfont#1#2% #1 = set/switch state | check fo rempty, else space {\doifsomething{#2}{\dododosetfont{#1}{#2}{\showmessage\m!fonts4{#2}}}} \def\dododosetfont#1#2#3% #1 = set/switch state {\doifnumberelse{#2} {\dodododosetfont{#1}{#2}{#3}} {\doifdefinedelse{\??ft\normalizedbodyfontsize\interfaced{#2}} {\edef\fontstep{\bodyfontcsname\normalizedbodyfontsize\interfaced{#2}\endcsname}% \expanded{\dodododosetfont{#1}{\fontstep}}{#3}} {\doifelse{#2}\v!reset {\let\fontstyle\empty % new 31/7/2006 \let\fontsize \empty} {\doifdefinedelse{\@style@#2} {\edef\fontstyle{#2}} {\doreadfontdefinitionfile{#1}{#2}}}}}} \def\dodododosetfont#1#2#3% #1 = set/switch state {\scratchdimen#2\relax \normalizebodyfontsize\scratchdimen\to\normalizedsetfont \doifundefined{\@size@\normalizedsetfont} {\defineunknownfont{#2}}% \doifdefinedelse{\@size@\normalizedsetfont} {\localbodyfontsize\normalizedsetfont \let\normalizedbodyfontsize\normalizedsetfont} {#3\dosetsubstitutefont{#1}{#2}}} %D In the previous macros we use \type{\currentxfontsize} to %D hold the current x||size of the font. This enables us to %D support for instance \type{\sl} inside a \type{\tx} switch. \chardef\currentxfontsize=0 %D When users specify for instance a 13 point bodyfont while no %D such bodyfont is defined, the system automatically tries to %D find a best fit, that is the nearest smaller defined %D bodyfontzize. A smaller one is definitely better than a larger %D one, simply because otherwise a lot of overfull box messages %D are more probable to occur. By taking a value slightly %D smaller than half a point, we can use the next method. \def\dosetsubstitutefont#1#2% #1 = set/switch state {\scratchdimen#2\relax \advance\scratchdimen .499\points \dimensiontocount\scratchdimen\scratchcounter \advance\scratchcounter \minusone \ifnum\scratchcounter>\plusthree \dododosetfont{#1}{\the\scratchcounter\s!pt}{}% \fi} % The following bunch of macros deals with the (run time) % expansion of names onto the definitions made by \type % {\definebodyfont}. % \let\fontbody \empty % ... 10pt 11pt 12pt ... % \let\fontstyle \empty % rm ss tt mm hw cg ... % \let\fontalternative\empty % tf bf sl it bs bi sc ... % \let\fontsize \empty % xy-abcd ... \def\defaultfontbody{\normalizedbodyfontsize} \let\fontbody\defaultfontbody \let\fontclass\empty \let\globalfontclass\fontclass % \def\setcurrentfontclass#1% % {\edef\fontclass{#1}} \def\registerfontclass#1% {\letgvalue{\@fontclass@#1}\v!yes} % global ? \def\setcurrentfontclass#1% {\ifcsname\@fontclass@#1\endcsname \edef\fontclass{#1}% \fi} \let\defaultfontstyle \c!rm \let\defaultfontalternative \c!tf \let\defaultfontsize \empty %D \macros %D {bigmath,nobigmath} %D %D We can inhibit this slow||downer with: % these can best be combined % 0=never 1=everymath 2=always \chardef\synchronizebigmathflag=1 \appendtoks \ifcase\synchronizebigmathflag % never \or \synchronizebigmath \or % always \fi \to \everymathematics \def\nobigmath{\chardef\synchronizebigmathflag 0 } \def\bigmath {\chardef\synchronizebigmathflag 2 \synchronizebigmath} \let\bigmathfontsize\empty \def\synchronizebigmath {\ifx\bigmathfontsize\fontsize % already in sync \else \let\bigmathfontsize\fontsize \synchronizemath \synchronizetext \fi} \def\checkbigmathsynchronization {\ifcase\synchronizebigmathflag % never \or \ifmmode \synchronizebigmath \fi \or \synchronizebigmath \fi} %D So far for synchronisation. \def\dosetcurrentfontsize#1% {\edef\fontsize{#1}% \checkbigmathsynchronization} \def\dosetcurrentfontalternative#1% {\edef\fontalternative{#1}% \ifmmode % maybe no test, or actually, an option \fam\csname\fontalternative\s!fam\endcsname \fi} \def\setcurrentfont#1#2#3#4% {%\message{[1 #1 #2 #3 #4]}% \edef\fontbody{#1}% \edef\fontstyle{#2}% \dosetcurrentfontalternative{#3}% \dosetcurrentfontsize{#4}% \synchronizefont} \def\setcurrentfontbody#1% {%\message{[2 #1]}% \edef\fontbody{#1}% \synchronizefont} % \def\setcurrentfontstyle#1% % {%\message{[3 #1]}% % \edef\fontstyle{#1}% % \ifmmode\mr\fi % otherwise \rm not downward compatible % \synchronizefont} % % For Taco: optional fall backs: \ifx\checkfontclass\undefined \let\checkfontclass\gobbleoneargument \fi % implemented in type-ini \def\setcurrentfontstyle#1% {%\message{[3 #1]}% \checkfontclass{#1}% \edef\fontstyle{#1}% \ifmmode\mr\fi % otherwise \rm not downward compatible \synchronizefont} \def\setcurrentfontbodyalternative#1#2% {%\message{[4 #1 #2]}% \edef\fontbody{#1}% \dosetcurrentfontalternative{#2}% \synchronizefont} \def\setcurrentfontalternative#1% {%\message{[5 #1]}% \dosetcurrentfontalternative{#1}% \synchronizefont} \def\setcurrentfontsize#1% {%\message{[6 #1]}% \dosetcurrentfontsize{#1}% \synchronizefont} \def\setcurrentfontstylealternative#1#2% \rmsl {%\message{[7 #1 #2]}% \edef\fontstyle{#1}% \dosetcurrentfontalternative{#2}% \synchronizefont} \def\setcurrentfontstylesize#1#2% \rmsla {%\message{[8 #1 #2]}% \edef\fontstyle{#1}% \dosetcurrentfontsize{#2}% \synchronizefont} \def\setcurrentfontalternativesize#1#2% \sla {%\message{[9 #1 #2]}% \dosetcurrentfontalternative{#1}% \dosetcurrentfontsize{#2}% \synchronizefont} \def\setcurrentfontstylealternativesize#1#2#3% \rmsla {%\message{[10 #1 #2 #3]}% \edef\fontstyle{#1}% \dosetcurrentfontalternative{#2}% \dosetcurrentfontsize{#3}% \synchronizefont} %D In principle one can assign alternative fallback routines. %D Some day we will. \newtoks\fontstrategies \newif\iftryingfont \let\fontstrategy\relax \def\synchronizefont {\tryingfonttrue \ifx\fontclass\empty\else \global\let\fontstrategy\dofontclassstrategy \the\fontstrategies \relax % \relax still needed ? \fi \iftryingfont \global\let\fontstrategy\dofontstrategy \the\fontstrategies \relax % \relax still needed ? \fi \ifskipfontcharacteristics \setfontcharacteristics \the\everyfontswitch \fi} \def\dofontstrategy#1#2#3#4#5% {\ifcsname#2#3#4#5\endcsname #1\csname#2#3#4#5\endcsname \tryingfontfalse \fi} \def\dofontclassstrategy#1#2#3#4#5% {\ifcsname\fontclass#2#3#4#5\endcsname #1\csname\fontclass#2#3#4#5\endcsname \tryingfontfalse \fi} \appendtoks \iftryingfont \fontstrategy \autofontsizefalse % --- --- --- --- % pt tt bf a \fontbody \fontstyle \fontalternative \fontsize \fi \to \fontstrategies \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % --- --- --- def % pt tt bf \fontbody \fontstyle \fontalternative \defaultfontsize \fi \to \fontstrategies \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % --- --- def --- % pt tt tf a \fontbody \fontstyle \defaultfontalternative \fontsize \fi \to \fontstrategies \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % --- --- def def % pt tt tf \fontbody \fontstyle \defaultfontalternative \defaultfontsize \fi \to \fontstrategies \appendtoks \iftryingfont \fontstrategy \autofontsizefalse % --- def def def % pt rm tf \fontbody \defaultfontstyle \defaultfontalternative \defaultfontsize \fi \to \fontstrategies \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % def def def def % rm tf \defaultfontbody \defaultfontstyle \defaultfontalternative \defaultfontsize \fi \to \fontstrategies %D Let's synchronize: \newif\ifsynchronizefonts \synchronizefontstrue \prependtoks \ifsynchronizefonts \synchronizemath \synchronizetext \synchronizefont % problem: syncs last font \fi \to \everybodyfont %D Setting the normal sized as well as the x and xx smaller %D sizes is accomplished by the next set of macros. When in %D math mode, the commands \type{\tx} and \type{\txx} are %D just a switch to the script and double script styles, but %D in text mode the values defined by the bodyfontenvironment are %D used. Here we also set \type{\currentxfontsize}. \def\dosetcurrentfontxxxalternative#1#2#3#4% {\chardef\currentxfontsize#2\relax \ifmmode #4% \else\ifcsname\bodyfontvariable{\normalizedbodyfontsize#3}\endcsname \setcurrentfontbodyalternative{\bodyfontcsname\normalizedbodyfontsize#3\endcsname}{#1}% \fi\fi} \def\setcurrentfontxalternative#1% {\dosetcurrentfontxxxalternative{#1}1\c!x\scriptstyle \let\tx\txx} \def\setcurrentfontxxalternative#1% {\dosetcurrentfontxxxalternative{#1}2\c!xx\scriptscriptstyle \let\tx\empty \let\txx\empty} \def\checknestedxfontsize % option {\ifcase\currentxfontsize\else\ifx\fontsize\empty\else \chardef\currentxfontsize\zeropoint \let\fontsize\empty \let\tx\normaltx \let\txx\normaltxx \fi\fi} \def\setcurrentfontxalternative#1% {\checknestedxfontsize \dosetcurrentfontxxxalternative{#1}1\c!x\scriptstyle \let\tx\txx} \def\setcurrentfontxxalternative#1% {\checknestedxfontsize \dosetcurrentfontxxxalternative{#1}2\c!xx\scriptscriptstyle \let\tx\empty \let\txx\empty} % This alterative is not really needed, but for old time's sake % we keep it there. We can speed it up when needed. % \def\setcurrentfontxstylealternative #1{\csname#1\endcsname\tfx} % \def\setcurrentfontxxstylealternative#1{\csname#1\endcsname\tfxx} \def\setcurrentfontxstylealternative #1{\csname#1\endcsname\tx} \def\setcurrentfontxxstylealternative#1{\csname#1\endcsname\txx} %D These macros also show us that when we call for \type{\tx}, %D this macro is redefined to be \type{\txx}. Therefore calls %D like: %D %D \startbuffer %D {small \tx is \tx beautiful} %D {small \tx is \txx beautiful} %D {small \txx is \tx beautiful} %D {small \txx is \txx beautiful} %D \stopbuffer %D %D \typebuffer %D %D result in: %D %D \startvoorbeeld %D \startlines %D \getbuffer %D \stoplines %D \stopvoorbeeld %D %D Setting the main size involves the style list and therefore %D takes a bit more time. Keep in mind that the fontsize is %D represented by a character or empty. \unexpanded\def\tx {\setcurrentfontxalternative \fontalternative} \unexpanded\def\txx{\setcurrentfontxxalternative\fontalternative} \let\normaltx \tx \let\normaltxx\txx %D \macros %D {definefontstyle} %D %D When setting of switching the overall style we can use the %D short identifier like rm and ss, but when defined we can %D also use more verbose names like roman or sansserif. Such %D names are defined by: %D %D \starttyping %D \definefontstyle [serif,rm] [rm] %D \definefontstyle [sansserif,ss] [ss] %D \stoptyping \def\dodefinefontstyle[#1][#2]% {\rawdoifinsetelse{#2}{\fontstylelist} {}%\debuggerinfo\m!fonts{unknown style #2}} {\addtocommalist{#2}\fontstylelist \showmessage\m!fonts8{#2\space (#1)}}% % check kan hier \def\docommand##1% {\setvalue{\@shortstyle@##1}{#2}% \setvalue{\@style@##1}{\csname#2\endcsname}}% \processcommalist[#1]\docommand} \def\definefontstyle {\dodoubleargument\dodefinefontstyle} \def\setfontstyle#1#2% #1:name (roman, romaan) #2:style (rm) {\edef\fontstyle{#1}% \setcurrentfontstyle\normalizedbodyfontsize} \chardef\defaultskewcharmi=127 % '177 \chardef\defaultskewcharsy= 48 % '60 % \def\dosetskewchar#1% % {\skewchar\font\ifx\@@fontskewchar\empty#1\else\@@fontskewchar\fi} \def\dosetskewchar#1#2% {\ifx\@@fontskewchar\empty \skewchar\textfont #1#2% \skewchar\scriptfont #1#2% \skewchar\scriptscriptfont#1#2% \else \skewchar\textfont #1\@@fontskewchar \skewchar\scriptfont #1\@@fontskewchar \skewchar\scriptscriptfont#1\@@fontskewchar \fi} %D The previous macros show that it's is not always %D neccessary to define the whole bunch of fonts, take for %D instance the sequence: %D %D \starttyping %D \setupbodyfont %D [ams] %D %D \definebodyfont [24pt] [mm] %D [ma=msam10 at 24pt, %D mb=msbm10 at 24pt] %D %D \switchtobodyfont %D [24pt] %D %D This is a 24pt $\blacktriangleleft$ %D \stoptyping %D %D Here we didn't define the 24 point bodyfont environment, so %D it's defined automatically. Of course one can always use the %D \TEX\ primitive \type{\font} to switch to whatever font %D needed. %D When asking for a complete font switch, for instance from 10 %D to 12~points, the next macro does the job. First we %D normalize the size, next we define the current range of %D text, script and scriptscript sizes, then we set the text %D fonts and the math families and finally we activate the %D default typeface and also set the font specific parameters %D assigned to \type{\everybodyfont} \def\dosetbodyfontface#1#2% {\edef#1{\bodyfontcsname\normalizedbodyfontsize#2\endcsname}} \def\docompletefontswitch[#1]% {\bodyfontsize#1\relax \dimensiontocount\bodyfontsize\bodyfontpoints \edef\bodyfontfactor{\withoutpt\the\bodyfontsize}% \normalizebodyfontsize\bodyfontsize\to\normalizedbodyfontsize \dosetbodyfontface \textface \s!text \dosetbodyfontface \scriptface \s!script \dosetbodyfontface \scriptscriptface \s!scriptscript} \docompletefontswitch[12pt] % init %D \macros %D {setupbodyfont,switchtobodyfont} %D %D The next two macros are user ones. With \type{\setupbodyfont} %D one can set the document bodyfont size, font family, style %D and/or options defined in files, for example: %D %D \starttyping %D \setupbodyfont[cmr,ams,12pt,roman] %D \stoptyping %D %D This command affects the document as a whole: text, headers %D and footers. The second macro however affects only the text: %D %D \starttyping %D \switchtobodyfont[10pt] %D \stoptyping %D %D So we've got: %D %D \showsetup{setupbodyfont} %D \showsetup{switchtobodyfont} %D %D Both macros look alike. The second one also has to take %D all kind of keywords into account. \ifx\saveinterlinespace \undefined \let\saveinterlinespace \relax \fi \ifx\restoreinterlinespace\undefined \let\restoreinterlinespace\relax \fi \chardef\bodyfontsetstate=0 \definecomplexorsimple\setupbodyfont \def\simplesetupbodyfont {\restoreglobalbodyfont \saveinterlinespace} \def\complexsetupbodyfont[#1]% {\doifsomething{#1} {\dosetfont1{#1}% \globalbodyfontsize\localbodyfontsize \normalizebodyfontsize\globalbodyfontsize\to\normalizedglobalbodyfontsize \let\globalfontstyle\fontstyle \ifloadingfonts\else \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace \fi}} \unexpanded\def\switchtobodyfont[#1]% {\doifsomething{#1} {\doifdefinedelse{\??ft\normalizedbodyfontsize\interfaced{#1}} {\setbodyfontstep{#1}} % so we have a fast [small] switch {\dosetfont0{#1}}% \the\everybodyfont}} % indeed needed in case nothing is executed %D The following alternative is meant for math||to||text %D switching and will be optimized. \def\fastswitchtobodyfont#1% {\ifcsname\??ft\normalizedbodyfontsize#1\endcsname \edef\futurebodyfontsize {\csname\??ft\normalizedbodyfontsize#1\endcsname}% \ifcsname\@size@\futurebodyfontsize\endcsname \csname\@size@\futurebodyfontsize\endcsname \localbodyfontsize\futurebodyfontsize\relax \fi \fi \csname\@style@\fontstyle\endcsname \the\everybodyfont} %D Because the last macro can appear in arguments or be assigned %D to parameters, we protect this one for unwanted expansion. \def\dodosetmathfont#1% {\setcurrentfontalternative{#1}% % \doifdefinedelse{#1\s!fam} % adapted % {\edef\mffam{\getvalue{#1\s!fam}}} % {\edef\mffam{\getvalue{\c!nn\s!fam}}}% \textfont \mrfam\textfont \mffam \scriptfont \mrfam\scriptfont \mffam \scriptscriptfont\mrfam\scriptscriptfont\mffam} \def\domffam#1% {\csname\ifcsname#1\s!fam\endcsname#1\else\c!nn\fi\s!fam\endcsname} \def\mffam {\domffam\fontalternative} \def\dosetmathfont {\def\rm{\fam\mrfam}\dodosetmathfont} \def\enableencodinginmath {\appendtoks \everyhbox{\mr\everyhbox\emptytoks}% \everyvbox{\mr\everyvbox\emptytoks}% \to \everymathematics} % was \everymath % \enableencodinginmath % too untested to enable by default %D \starttyping %D $\cases{& \ccaron}$ $x=\hbox{\ccaron $x=\hbox{\ccaron}$}$ %D \stoptyping %D The font specific features are bound to the filename. \def\updatefontparameters {\edef\@@fontencoding{\truefontdata\fontfile \s!encoding}% \edef\@@fontmapping {\truefontdata\fontfile \s!mapping }% \edef\@@fonthandling{\truefontdata\somefontname\s!handling}% \edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}} \def\setfontcharacteristics {\updatefontparameters % redundant, will go away, faster too \fastenableencoding {\ifx\@@fontencoding\empty \s!default \else \@@fontencoding \fi}% \fastenablemapping {\ifx\@@fontmapping\empty \ifx\@@fontencoding\empty \s!default \else \@@fontencoding \fi \else \@@fontmapping \fi}% \fastenablehandling {\ifx\@@fonthandling\empty \s!default \else \@@fonthandling \fi}% {\lastfontidentifier}% \the\everyfont \synchronizepatternswithfont} \ifx\synchronizepatternswithfont\undefined \def\synchronizepatternswithfont{\synchronizepatterns} \fi %D Experimental: (should move to font-xtx) \ifdefined \definefontfeature \else \def\definefontfeature {\dotripleargument\dodefinefontfeature} \def\dodefinefontfeature[#1][#2][#3]{} \fi %D The next auxilliary macro is an alternative to \type %D {\fontname}. % \def\purefontname#1{\expandafter\splitoffpurefontname\fontname#1 \\} % % extra level is needed: \def\purefontname#1{\@EA\splitoffpurefontname\@EA{\@EA{\@EA\unstringed\fontname#1}} \\} \def\splitoffpurefontname#1 #2\\{#1} %D \macros %D {switchstyleonly} %D %D For switching a style but keeping the alternative, there %D is: %D %D \starttyping %D {\bf text \switchstyleonly\ss text} %D {\bf text \switchstyleonly[ss]text} %D {\sl text \switchstyleonly[sansserif]text} %D \stoptyping \definecomplexorsimple\switchstyleonly \def\simpleswitchstyleonly#1% stupid version {\complexswitchstyleonly[\strippedcsname#1]} \def\complexswitchstyleonly[#1]% todo : check {\setcurrentfontstyle{\getvalue{\@shortstyle@#1}}% \the\everybodyfont} % needed ? %D \macros %D {os,frak, goth, cal} %D %D Old style numerals can be typeset with \type{\os} and look %D like {\os 1234567890} instead of the more common looking %D 1234567890. %D %D On behalf of {\frac Tobias Burnus}, we define some more of %D these. Later we will link these names to real file names. % older % % \definefont [os] [OldStyle sa *] % \definefont [frak] [Fraktur sa *] % \definefont [goth] [Gothic sa *] % \definefont [cal] [Calligraphic sa *] % \definefont [bbd] [Blackboard sa *] % % newer \unexpanded\def\os {\mathortext{\fam\purefamily {oldstyle}}{\symbolicfont {OldStyle}}} \unexpanded\def\frak{\mathortext{\fam\purefamily {fraktur}}{\symbolicfont {Fraktur}}} \unexpanded\def\goth{\mathortext{\fam\purefamily {gothic}}{\symbolicfont {Gothic}}} \unexpanded\def\cal {\mathortext{\fam\purefamily{calligraphic}}{\symbolicfont{Calligraphic}}} \unexpanded\def\bbd {\mathortext{\fam\purefamily {blackboard}}{\symbolicfont {Blackboard}}} \definefontsynonym [OldStyle] [Serif] \definefontsynonym [Fraktur] [Serif] \definefontsynonym [Gothic] [Serif] \definefontsynonym [Calligraphic] [Serif] \definefontsynonym [Blackboard] [Serif] %D \macros %D {fraktur, gothic, calligraphic, blackboard} %D %D These macros assume that we use text fonts, and not math %D families. \ifx\mathtext\undefined \let\mathtext\hbox \fi \unexpanded\def\fraktur #1{\mathortext\domathtext\donothing{\frak#1}} \unexpanded\def\gothic #1{\mathortext\domathtext\donothing{\goth#1}} \unexpanded\def\calligraphic#1{\mathortext\domathtext\donothing{\cal #1}} \unexpanded\def\blackboard #1{\mathortext\domathtext\donothing{\bbd#1}} %D Torture test: %D %D \starttyping %D \usetypescript[modern] [texnansi] %D \usetypescript[lucida] [texnansi] %D \usetypescript[palatino][texnansi] %D \usetypescript[times] [texnansi] %D \usetypescript[fourier] [ec] %D %D \startbuffer %D \section{\blackboard{T\high{\blackboard{T}}} \blackboard{E}\high{\blackboard{E}} \blackboard{X}\high{\blackboard{X}}} %D %D {\fontclass: 123 \os123 \cal TEX $\os 123$} %D %D $\blackboard{T}^{\blackboard{T}} \blackboard{E}^{\blackboard{E}} \blackboard{X}^{\blackboard{X}}$ %D \blackboard{T}\high{\blackboard{T}} \blackboard{E}\high{\blackboard{E}} \blackboard{X}\high{\blackboard{X}} %D \stopbuffer %D %D {\setupbodyfont[lucida] \getbuffer} %D {\setupbodyfont[modern] \getbuffer} %D {\setupbodyfont[palatino] \getbuffer} %D {\setupbodyfont[times] \getbuffer} %D {\setupbodyfont[fourier] \getbuffer} %D \stoptyping %D \macros %D {definebodyfontswitch} %D %D \PLAIN\ \TEX\ defines some macro's like \type{\tenpoint} %D to switch to a specific bodyfontsize. Just for the sake of %D compatibility we can define them like: %D %D \starttyping %D \definebodyfontswitch [twelvepoint] [12pt] %D \stoptyping %D %D We don't support language specific synonyms here, mainly %D because \PLAIN\ \TEX\ is english anyway. \def\dodefinebodyfontswitch[#1][#2]% {\def\docommand##1{\setvalue{##1}{\switchtobodyfont[#2]}}% \processcommalist[#1]\docommand} \def\definebodyfontswitch {\dodoubleargument\dodefinebodyfontswitch} %D \macros %D {setsmallbodyfont,setmainbodyfont,setbigbodyfont} %D %D When we're typesetting at for instance 10pt, we can call for %D the \type{small} as well as the \type{big} alternative, %D related to this main size, using \type{\switchtobodyfont[small]}. %D The three alternatives can be activated by the next three %D system calls and are defined by the bodyfontenvironment. \let\fontstep\empty % we can use \fontstep for tracing purposes \def\setbodyfontstep#1% {\edef\fontstep{\bodyfontcsname\normalizedbodyfontsize\interfaced{#1}\endcsname}% \doswitchpoints[\fontstep]% \doswitchstyle[\fontstyle]} \unexpanded\def\setsmallbodyfont{\setbodyfontstep\v!small\the\everybodyfont} \unexpanded\def\setbigbodyfont {\setbodyfontstep\v!big \the\everybodyfont} \unexpanded\def\setmainbodyfont {\doswitchpoints[\normalizedbodyfontsize]% \doswitchstyle[\fontstyle]% \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace} %D \macros %D {restoreglobalbodyfont} %D %D Users can set whatever font available while typesetting text. %D Pagenumbers, footers, headers etc. however must be typeset %D in the main bodyfont and style of the document. Returning to %D the global state can be done with the next macro: \let\mainfontclass\empty \def\fullrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \chardef\currentxfontsize\zerocount \let\fontclass\globalfontclass \doswitchpoints[\normalizedglobalbodyfontsize]% \doswitchstyle[\globalfontstyle]% \redoconvertfont % just in case a pagebreak occurs \tf \the\everybodyfont \the\everyglobalbodyfont \saveinterlinespace} \def\partialrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \chardef\currentxfontsize\zerocount \redoconvertfont \tf \saveinterlinespace} \def\restoreglobalbodyfont % ook style etc {\ifx\fontclass\globalfontclass \ifx\fontstyle\globalfontstyle \ifx\normalizedbodyfontsize\normalizedglobalbodyfontsize \partialrestoreglobalbodyfont \else \fullrestoreglobalbodyfont \fi \else \fullrestoreglobalbodyfont \fi \else \fullrestoreglobalbodyfont \fi} % in case of troubles: \let\restorebodyfont\fullrestoreglobalbodyfont %D This macro has to be called when entering the pagebody %D handling routine as well as the footnote insert routine. %D Users can access this feature |<|for instance when one wants %D to typeset tables and alike in the main bodyfont and style %D while the running text is temporary set to a smaller one|>| %D by saying \type{\switchtobodyfont[global]}. %D \macros %D {rasterfont} %D %D There are (at the moment) two situations in which we want to %D have fast access to a particular font. When we are using %D \TEX\ to typeset rasters, we use small {\rasterfont.}'s %D (a rather small period indeed), the same as \PICTEX\ uses %D for drawing purposes. \definefont [rasterfont] [Serif at 5pt] %D \macros %D {infofont} %D %D The second situation occurs when we enable the info mode, %D and put all kind of status information in the margin. We %D don't want huge switches to the main bodyfont and style, so %D here too we use a direct method. % old mechanism % % \def\infofont{\getvalue{\!!sixpoint\c!tt\c!tf}\the\everybodyfont} \let\infofont\relax % satisfy dep checker \definefont [infofont] [Mono at 6pt] % todo \the\everybodyfont %D \macros %D {definealternativestyle} %D %D In the main modules we are going to implement lots of %D parameterized commands and one of these parameters will %D concern the font to use. To suit consistent use of fonts we %D here implement a mechanism for defining the keywords that %D present a particular style or alternative. %D %D \starttyping %D \definealternativestyle [keywords] [\style] [\nostyle] %D \stoptyping %D %D The first command is used in the normal textflow, while the %D second command takes care of headings and alike. Consider %D the next two definitions: %D %D \starttyping %D \definealternativestyle [bold] [\bf] [] %D \definealternativestyle [cap] [\cap] [\cap] %D \stoptyping %D %D A change \type{\bf} in a heading which is to be set in %D \type{\tfd} does not look that well, so therefore we leave %D the second argument of \type{\definealternativestyle} empty. %D When we capatalize characters using the pseudo small cap %D command \type{\cap}, we want this to take effect in both %D text and headings, which is accomplished by assigning both %D arguments. \def\dodefinealternativestyle[#1][#2][#3]% {\def\docommand##1% {\doifundefined{##1}{\setvalue{##1}{\groupedcommand{#2}{}}}% \setvalue{\@letter@ ##1}{#2}% \setvalue{\@noletter@##1}{#3}}% \processcommalist[#1]\docommand} \def\definealternativestyle {\dotripleempty\dodefinealternativestyle} \def\definestyle{\definealternativestyle} %D Maybe too geneneric, but probably ok is the following. (Maybe one %D day we will use a dedicated grouped command for styles.) \appendtoks \let\groupedcommand\thirdofthreearguments \to \simplifiedcommands %D This command also defines the keyword as command. This means %D that the example definition of \type{bold} we gave before, %D results in a command \type{\bold} which can be used as: %D %D \startbuffer %D He's a \bold{bold} man with a {\bold head}. %D \stopbuffer %D %D \typebuffer %D %D or %D %D \startvoorbeeld %D \definealternativestyle[bold][\bf][]\getbuffer %D \stopvoorbeeld %D %D Such definitions are of course unwanted for \type{\cap} %D because this would result in an endless recursive call. %D Therefore we check on the existance of both the command and %D the substitution. The latter is needed because for instance %D \type{\type} is an entirely diferent command. That command %D handles verbatim, while the style command would just switch %D to teletype font. This is just an example of a tricky %D naming coincidence. %D \macros %D {doconvertfont,noconvertfont, %D dontconvertfont,redoconvertfont} %D %D After having defined such keywords, we can call for them by %D using %D %D \starttyping %D \doconvertfont{keyword}{text} %D \stoptyping %D %D We deliberately pass an argument. This enables us to %D assign converters that handle one agrument, like %D \type{\cap}. %D %D By default the first specification is used to set the style, %D exept when we say \type{\dontconvertfont}, after which the %D second specification is used. We can also directly call for %D \type{\noconvertfont}. In nested calls, we can restore the %D conversion by saying \type{\redoconvertfont}. \def\@@dodoconvertfont#1{\csname\@letter@ #1\endcsname} \def\@@donoconvertfont#1{\csname\@noletter@#1\endcsname} \unexpanded\def\dodoconvertfont#1% #2% we need the protection {\doifdefinedelse{\@letter@#1} % in testing {\doifelsenothing{#1}\gobbleoneargument\@@dodoconvertfont} {\doifdefinedelse{#1}\getvalue \firstofoneargument}% {#1}} % {#2}} \let\doconvertfont\dodoconvertfont \def\noconvertfont#1% #2% {\doifdefinedelse{\@noletter@#1} {\doifelsenothing{#1}\gobbleoneargument\@@donoconvertfont}\gobbleoneargument {#1}} % {#2}} %D Extras: \unexpanded\def\dontconvertfont {\let\doconvertfont\noconvertfont} \unexpanded\def\redoconvertfont {\let\doconvertfont\dodoconvertfont} %D These commands are not grouped! Grouping is most probably %D done by the calling macro's and would lead to unnecessary %D overhead. %D \macros %D {em,emphasistypeface,emphasisboldface} %D %D The next macro started as a copy of Donald Arseneau's %D \type{\em} (\TUGNEWS\ Vol.~3, no.~1, 1994). His %D implementation was a bit more sophisticated version of the %D standard \LATEX\ one. We furter enhanced the macro, so now %D it also adapts itself to boldface mode. Because we favor %D {\sl slanted} type over {\it italic}, we made the emphasis %D adaptable, for instance: %D %D \starttyping %D \def\emphasistypeface {\it} %D \def\emphasisboldface {\bi} %D \stoptyping %D %D But we prefer: \def\emphasistypeface {\sl} \def\emphasisboldface {\bs} %D or even better: % \def\doemphasistypeface#1#2% % {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!slanted#1% % {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!italic #2% % {\doifelsevalue{\??ft \normalizedbodyfontsize\c!em}\v!slanted#1% % {\doifvalue {\??ft \normalizedbodyfontsize\c!em}\v!italic #2}}}} \def\doemphasistypeface#1#2% {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!slanted {#1}% {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!italic {#2}% {\doifelsevaluenothing{\??ft\fontclass\normalizedbodyfontsize\c!em} {\doifelsevalue{\??ft\normalizedbodyfontsize\c!em}\v!slanted {#1}% {\doifelsevalue{\??ft\normalizedbodyfontsize\c!em}\v!italic {#2}% {\getvalue{\??ft\normalizedbodyfontsize\c!em}}}} {\getvalue{\??ft\fontclass\normalizedbodyfontsize\c!em}}}}} \def\emphasistypeface{\doemphasistypeface\sl\it} \def\emphasisboldface{\doemphasistypeface\bs\bi} %D To be set with the default body font environment: \type %D {em} being \type {slanted} or \type {italic}. \newconditional\emneeded \newtoks\everyemphasized \unexpanded\def\em {\relax \ifdim\slantperpoint>\zeropoint \settrue\emneeded \else \setfalse\emneeded \fi \setemphasisboldface % new \ifx\fontalternative\c!it % \ifnum\fam=\itfam \def\emphasistypeface{\it}\tf \else\ifx\fontalternative\c!sl % \ifnum\fam=\slfam \def\emphasistypeface{\sl}\tf \else\ifx\fontalternative\c!bf % \ifnum\fam=\bffam \emphasisboldface \else\ifx\fontalternative\c!bs % \ifnum\fam=\bsfam \def\emphasisboldface{\bs}\bf \else\ifx\fontalternative\c!bi % \ifnum\fam=\bifam \def\emphasisboldface{\bi}\bf \else \emphasistypeface \fi\fi\fi\fi\fi \the\everyemphasized \ifconditional\emneeded\relax \else \expandafter\aftergroup \fi \emphasiscorrection} % compare ... % % \appendtoks \red \to \everyemphasized % \setupbodyfontenvironment [default] [em={\italic\color[red]}] %D The next feature was not present in previous versions. It %D takes care of \type {\em \bf ...} sitiations. \def\setemphasisboldface {\let\normalbf\bf \let\setemphasisboldface\relax \unexpanded\def\bf {%\relax \let\bf\relax % new \ifx\fontalternative\c!it % \ifnum\fam=\itfam \bi \else\ifx\fontalternative\c!sl % \ifnum\fam=\slfam \bs \else \normalbf \fi\fi \let\bf\normalbf}} %D Donald's (adapted) macros take the next character into %D account when placing italic correction. As a bonus we also %D look for something that looks like a dash, in which case we %D don't correct. \let\italiccorrection=\/ \def\emphasiscorrection {\ifhmode \expandafter\emphasislook \fi} \def\emphasislook {\begingroup \beginrobusttest \futurelet\next\emphasistest} \def\emphasistest {\normalifcat\noexpand\next,% \endrobusttest\expandafter\doemphasiscorrection \normalelse \endrobusttest\expandafter\dododoemphasiscorrection \normalfi} \def\doemphasiscorrection {\futurelet\next\dodoemphasiscorrection} \def\dodoemphasiscorrection {\setbox\scratchbox\hbox{\next}% \ifdim\ht\scratchbox=\zeropoint % probably a space \expandafter\dododoemphasiscorrection \else\ifdim\ht\scratchbox<.3ex \expandafter\expandafter\expandafter\endgroup \else \expandafter\expandafter\expandafter\dododoemphasiscorrection \fi\fi} \def\dododoemphasiscorrection {\scratchskip\lastskip \ifdim\scratchskip=\zeropoint\relax % == \ifzeropt\scratchskip \italiccorrection\relax \else \unskip\italiccorrection\hskip\scratchskip \fi \endgroup} %D We end with some examples which show the behavior when %D some punctuation is met. We also show how the mechanism %D adapts itself to bold, italic and slanted typing. %D %D \startbuffer %D test {test}test \par %D test {\sl test}test \par %D test {\em test}test \par %D test {\em test}--test \par %D %D test {test}, test \par %D test {\em test}, test \par %D %D test {\em test {\em test {\em test} test} test} test \par %D test {\bf test {\em test {\em test} test} test} test \par %D test {\sl test {\em test {\em test} test} test} test \par %D test {\it test {\em test {\em test} test} test} test \par %D \stopbuffer %D %D \typebuffer %D %D We get: %D %D \startvoorbeeld %D \startpacked %D \getbuffer %D \stoppacked %D \stopvoorbeeld %D \macros %D {emphbf,emphit,emphsl,emphtf} %D %D The next emphasis alternatives are for \THANH. They adapt %D their style as good as possible. \def\emphbf{\groupedcommand{\bf\def\emphit{\bi}\def\emphsl{\bs}}{}} \def\emphit{\groupedcommand{\it\def\emphbf{\bi}\def\emphsl{\sl}}{}} \def\emphsl{\groupedcommand{\sl\def\emphbf{\bs}\def\emphit{\it}}{}} \def\emphtf{\groupedcommand{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}}{}} %D \startbuffer %D TEXT {\emphbf text \emphit text \emphtf text \emphsl text} TEXT %D TEXT \emphbf{text \emphit{text} \emphtf{text} \emphsl{text}} TEXT %D \stopbuffer %D %D \typebuffer %D \startlines %D \getbuffer %D \stoplines %D \macros %D {setfont} %D %D Every now and then we want to define a font directly, for %D instance when we typeset title pages. The next macro saves %D some typing: \def\setfont% geen \dosetfont mogelijk {\def\next{\nextfont\setupinterlinespace}% \afterassignment\next\font\nextfont=} %D One can call this macro as: %D %D \starttyping %D \setfont cmr10 at 60pt %D \stoptyping %D %D After which the font is active and the baselines and %D struts are set. %D \macros %D {showbodyfont} %D %D One can call for a rather simple overview of a bodyfont and the %D relations between its alternative fonts. %D %D \showsetup{showbodyfont} %D %D The current bodyfont (here we omitted the argument) looks like: %D %D \showbodyfont %D %D The implementation is rather straightforward in using %D \type{\halign}. \fetchruntimecommand \showbodyfont {\f!fontprefix\s!run} %D \macros %D {showfontstrip, testminimalbaseline, showminimalbaseline} %D %D The next command can come in handy when combining %D different fonts into a collection (typeface) and %D determining optimal baseline distances. %D %D \showfontstrip \blank \showminimalbaseline \fetchruntimecommand \showfontstrip {\f!fontprefix\s!run} \fetchruntimecommand \testminimalbaseline {\f!fontprefix\s!run} \fetchruntimecommand \showminimalbaseline {\f!fontprefix\s!run} %D \macros %D {showkerning} %D %D A goody is: %D %D \showkerning{Can you guess what kerning is?} \fetchruntimecommand \showkerning {\f!fontprefix\s!run} %D \macros %D {showbodyfontenvironment} %D %D The current bodyfontenvironment is: %D %D \showbodyfontenvironment %D %D This overview is generated using: %D %D \showsetup{showbodyfontenvironment} \fetchruntimecommand \showbodyfontenvironment {\f!fontprefix\s!run} %D \macros %D {showfont,showfontstyle,showligatures} %D %D The following command generates a fontmap: %D %D \startbuffer %D \showfont[SansBold at 12pt] %D \stopbuffer %D %D \typebuffer %D %D Below the table the name, encoding, mapping and handling are %D shown. Special characters like the \type {\skewchar} and %D \type {\hyphenchar} als marked. %D %D \getbuffer % to be internationalized \fetchruntimecommand \showfont {\f!fontprefix\s!run} \fetchruntimecommand \showfontstyle {\f!fontprefix\s!run} \fetchruntimecommand \showligature {\f!fontprefix\s!run} \fetchruntimecommand \showligatures {\f!fontprefix\s!run} \fetchruntimecommand \showcharratio {\f!fontprefix\s!run} %D \macros %D {getglyph, symbolicfont} %D %D Individual glyphs can be accessed by using %D %D \starttyping %D \getglyph{fontname}{character} %D \stoptyping %D %D This macro is used in for instance the symbol modules and %D as one can see, it does obey the small and even smaller %D sizes. The \type {\symbolicfont} macro can be used to %D switch to a font named \type {fontname} (see \type %D {cont-log} and \type {symb-eur} for examples of symbolic %D definitions. \def\fontstringA {\ifx\fontstyle\c!rm \s!Serif \else \ifx\fontstyle\c!ss \s!Sans \else \ifx\fontstyle\c!tt \s!Mono \else \s!Serif \fi\fi\fi} \def\fontstringB {\ifx\fontstyle\c!rm \s!Regular \else \ifx\fontstyle\c!ss \s!Support \else \ifx\fontstyle\c!tt \s!Type \else \s!Serif \fi\fi\fi} \def\fontstringC {\ifx\fontalternative\c!bf \s!Bold \else \ifx\fontalternative\c!sl \s!Slanted \else \ifx\fontalternative\c!it \s!Italic \else \ifx\fontalternative\c!bs \s!BoldSlanted \else \ifx\fontalternative\c!bi \s!BoldItalic \fi\fi\fi\fi\fi} \def\fontstringD % default fontstyle {\expandafter\ifx\csname\??tf\fontclass\s!default\endcsname\c!rm \s!Serif \else \expandafter\ifx\csname\??tf\fontclass\s!default\endcsname\c!ss \s!Sans \else \expandafter\ifx\csname\??tf\fontclass\s!default\endcsname\c!tt \s!Mono \else \s!Serif \fi\fi\fi} % potential generalization: % \letvalue{\??ff:t:\c!rm}\s!Serif % \letvalue{\??ff:t:\c!ss}\s!Sans % \letvalue{\??ff:t:\c!tt}\s!Mono % % \letvalue{\??ff:s:\c!bf}\s!Bold % \letvalue{\??ff:s:\c!sl}\s!Slanted % \letvalue{\??ff:s:\c!it}\s!Italic % \letvalue{\??ff:s:\c!bs}\s!BoldSlanted % \letvalue{\??ff:s:\c!bi}\s!BoldItalic % % \letvalue{\??ff:a:\c!rm}\s!Regular % \letvalue{\??ff:a:\c!ss}\s!Support % \letvalue{\??ff:a:\c!tt}\s!Type % % \def\fontstringA{\executeifdefined{\??ff:t:\fontstyle}\s!Serif} % \def\fontstringB{\executeifdefined{\??ff:a:\fontstyle}\s!Serif} % \def\fontstringC{\executeifdefined{\??ff:s:\fontstyle}\empty} % \def\fontstringD{\executeifdefined{\??ff:t:\csname\??tf\fontclass\s!default\endcsname}\s!Serif} \def\glyphfontfile#1% {#1% \ifcsname\??ff#1\fontstringA\fontstringC\endcsname \fontstringA\fontstringC \else\ifcsname\??ff#1\fontstringB\fontstringC\endcsname \fontstringB\fontstringC \else\ifcsname\??ff#1\fontstringA\endcsname \fontstringA \else\ifcsname\??ff#1\fontstringB\endcsname \fontstringB \else\ifcsname\??ff#1\fontstringC\endcsname \fontstringC \fi\fi\fi\fi\fi} %D The next macro can be used to make decisions based on the shape: \def\doifitalicelse#1#2% {\ifx\fontalternative\c!sl#1\else \ifx\fontalternative\c!it#1\else \ifx\fontalternative\c!bs#1\else \ifx\fontalternative\c!bi#1\else#2\fi\fi\fi\fi} %D For an example of usage of the following command, %D see \type {cont-log.tex}. %D %D \starttyping %D \def\symbolicfont#1% %D {\definedfont[\glyphfontfile{#1} sa *]} %D \stoptyping %D %D Since we know what scaling it to be applied, we can %D implement a much faster alternative: \let\thedefinedfont\relax % \def\symbolicscaledfont#1#2% % {\scaledfont\fontbody % \scaledfont#1\scaledfont % \font\thedefinedfont\truefontname{\glyphfontfile{#2}} at % \currentfontbodyscale\scaledfont % \thedefinedfont} % % \unexpanded\def\symbolicfont % {\symbolicscaledfont\plusone} % % even more control (needed for mthsqrt etc) \def\symbolicsizedfont#1#2#3% {\scaledfont#1% \scaledfont#2\scaledfont \font\thedefinedfont\truefontname{\glyphfontfile{#3}} at \currentfontbodyscale\scaledfont \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 {{\scaledfont\fontbody \font\thedefinedfont=#1 at \currentfontbodyscale\scaledfont \thedefinedfont\doifnumberelse{#2}\char\donothing#2}} %D The last implementation of \type {\getglyph} permits %D definitions like: %D %D \starttyping %D \definefontsynonym [EuroSans] [eurose] %D \definefontsynonym [EuroSansBold] [euroseb] %D \definefontsynonym [EuroSansItalic] [eurosei] %D \definefontsynonym [EuroSansSlanted] [eurosei] %D \definefontsynonym [EuroSansBoldItalic] [eurosebi] %D \definefontsynonym [EuroSansBoldSlanted] [eurosebi] %D %D \definesymbol [euro] [\getglyph{Euro}{\char160}] %D %D \def\euro{\symbol[euro]} %D \stoptyping %D %D These definitions guarantee that the next calls work okay: %D %D \starttyping %D \ss \tf\euro \bf\euro \sla\euro \itd\euro \bs\euro \bic\euro %D \stoptyping %D %D The shape as well as the size is adapted to the current %D environment. %D Fonts can only be used when loaded. In \CONTEXT\ we %D postpone the loading of fonts, even when we load \PLAIN. %D This means that we have to redefine one of the \PLAIN\ %D macros. Let's tell that to the user first: \writestatus{loading}{Postponed Plain TeX Font Definitions} %D \macros %D {bordermatrix} %D %D In \PLAIN\ \TEX\ the width of a parenthesis is stored in %D the \DIMENSION\ \type{\mathparentwd}. This value is derived from %D the width of \type{\tenrm B}, so let's take care of it now: \let\normalbordermatrix=\bordermatrix \def\bordermatrix% {\bgroup \setbox0\hbox{\getvalue{\textface\c!mm\c!ex}B}% \global\mathparentwd\wd0\relax \egroup \normalbordermatrix} %D Because we want to be as \PLAIN\ compatible as possible, we %D make most of \PLAIN's font mechanisme available to the %D \CONTEXT\ user. \def\setplainfonts#1#2% {\setvalue {ten#1}{\getvalue{\!!tenpoint #2}}% \setvalue{seven#1}{\getvalue{\!!sevenpoint#2}}% \setvalue {five#1}{\getvalue{\!!fivepoint #2}}} \setplainfonts {\c!rm} {\c!rm\c!tf} \setplainfonts {\c!bf} {\c!rm\c!bf} \setplainfonts {\c!sl} {\c!rm\c!sl} \setplainfonts {\c!it} {\c!rm\c!it} \setplainfonts {\c!tt} {\c!rm\c!tt} \setplainfonts {\c!sy} {\c!mm\c!sy} \setplainfonts {\c!ex} {\c!mm\c!ex} \setplainfonts {\c!i} {\c!mm\c!mi} \let\setplainfonts=\undefined %D \macros %D {ss, SS, sz} %D %D We are going to redefine \type{\ss} but for those wo still %D want to have access to the german \SS, we save it's value in %D \type{\SS}. Ok, I should have used \type{\sf} instead of %D \type{\ss} in the first place. \ifx\undefined\SS \let\SS=\ss \fi \ifx\undefined\sz \let\sz=\ss \fi %D \macros %D {xi} %D %D We are going to redefine \type{\xi}, but fortunately this %D is a math mode character, so we can just say: \let\normalxi=\xi %D \macros %D {smashaccent} %D %D When we let \TEX\ put an accent on top of a character, such %D composed characters can get more height that height of a %D standard \type{\strut}. The next macro takes care of such %D unwanted compositions. %D %D We need to reach over the number that specifies the accent, %D and in doing so we use \type{\scratchcounter} as a placeholder %D because it accepts 8 bit numbers in octal, decimal or %D hexadecimal format. Next we set the height of the accented %D character to the natural height of the character. \unexpanded\def\smashaccent#1% {\dontleavehmode \bgroup \setbox\scratchbox\hbox{#1}% \ifdim\ht\scratchbox>\strutheight\relax\ht\scratchbox\strutheight\fi \ifdim\dp\scratchbox>\strutdepth \relax\dp\scratchbox\strutdepth \fi \box\scratchbox \egroup} %D For instance we can say: %D %D \starttyping %D \smashaccent{\"Uberhaupt} %D \stoptyping %D %D But normally one will use it as a prefix in definitions. %D The difference is in the height: %D %D \leavevmode\ruledhbox %D {\ruledhbox{\smashaccent{\"U}berhaupt}\quad %D oder\quad %D \ruledhbox{\"Uberhaupt}} %D \macros %D {moveaccent} %D %D Exact positioning of accents can be realized by saying: %D %D \starttyping %D \moveaccent{-.1ex}{\"u}berhaupt %D \stoptyping %D %D Again, this one will mostly used as a prefix in definitions. %D Here the difference is in the position: %D %D \leavevmode\ruledhbox %D {\ruledhbox{\moveaccent{-.1ex}{\"}Uberhaupt}\quad %D oder\quad %D \ruledhbox{\"Uberhaupt}} \unexpanded\def\moveaccent#1#2% {\smashaccent {\dimen0\exheight \dimen2\dimen0 \advance\dimen2 -#1% \exheight\dimen2 #2\relax \exheight\dimen0}} %D Personally I think that using \TEX\ is complicated by the %D way fonts are handled. Apart from the many encodings, we %D also deal with different naming schemes. Confronted with %D this problem, I decided to change the definitions into: %D %D \starttyping %D \definebodyfont [12pt] [rm] [tf=Times-Roman at 12pt] %D \stoptyping %D %D combined with for instance: %D %D \starttyping %D \definefontsynonym [Times-Roman] [tir] %D \stoptyping %D Now we're up to some definitions. \definebodyfontenvironment [\s!default] [ \s!text=1.0, \s!script=0.7, \s!scriptscript=0.5, \c!a=1.200, \c!b=1.440, \c!c=1.728, \c!d=2.074, *=\currentfontscale, % wildcard \c!x=0.8, \c!xx=0.6, \c!big=1.2, \c!small=0.8, \c!interlinespace=, \c!em=\v!slanted] \definebodyfontenvironment [20.7pt] [ \s!text=20.7pt, \s!script=\!!fourteenpointfour, \s!scriptscript=\!!twelvepoint, \c!x=17.3pt, \c!xx=\!!fourteenpointfour, \c!big=20.7pt, % !!!! \c!small=17.3pt] \definebodyfontenvironment [17.3pt] [ \s!text=17.3pt, \s!script=\!!twelvepoint, \s!scriptscript=\!!tenpoint, \c!x=\!!fourteenpointfour, \c!xx=\!!twelvepoint, \c!big=20.7pt, \c!small=\!!fourteenpointfour] \definebodyfontenvironment [\!!fourteenpointfour] [ \s!text=\!!fourteenpointfour, \s!script=\!!elevenpoint, \s!scriptscript=\!!ninepoint, \c!x=\!!twelvepoint, \c!xx=\!!tenpoint, \c!big=17.3pt, \c!small=\!!twelvepoint] \definebodyfontenvironment [\!!twelvepoint] [ \s!text=\!!twelvepoint, \s!script=\!!ninepoint, \s!scriptscript=\!!sevenpoint, \c!x=\!!tenpoint, \c!xx=\!!eightpoint, \c!big=\!!fourteenpointfour, \c!small=\!!tenpoint] \definebodyfontenvironment [\!!elevenpoint] [ \s!text=\!!elevenpoint, \s!script=\!!eightpoint, \s!scriptscript=\!!sixpoint, \c!x=\!!ninepoint, \c!xx=\!!sevenpoint, \c!big=\!!twelvepoint, \c!small=\!!ninepoint] \definebodyfontenvironment [\!!tenpoint] [ \s!text=\!!tenpoint, \s!script=\!!sevenpoint, \s!scriptscript=\!!fivepoint, \c!x=\!!eightpoint, \c!xx=\!!sixpoint, \c!big=\!!twelvepoint, \c!small=\!!eightpoint] \definebodyfontenvironment [\!!ninepoint] [ \s!text=\!!ninepoint, \s!script=\!!sevenpoint, \s!scriptscript=\!!fivepoint, \c!x=\!!sevenpoint, \c!xx=\!!fivepoint, \c!big=\!!elevenpoint, \c!small=\!!sevenpoint] \definebodyfontenvironment [\!!eightpoint] [ \s!text=\!!eightpoint, \s!script=\!!sixpoint, \s!scriptscript=\!!fivepoint, \c!x=\!!sixpoint, \c!xx=\!!fivepoint, \c!big=\!!tenpoint, \c!small=\!!sixpoint] \definebodyfontenvironment [\!!sevenpoint] [ \s!text=\!!sevenpoint, \s!script=\!!sixpoint, \s!scriptscript=\!!fivepoint, \c!x=\!!sixpoint, \c!xx=\!!fivepoint, \c!big=\!!ninepoint, \c!small=\!!fivepoint] \definebodyfontenvironment [\!!sixpoint] [ \s!text=\!!sixpoint, \s!script=\!!fivepoint, \s!scriptscript=\!!fivepoint, \c!x=\!!fivepoint, \c!xx=\!!fivepoint, \c!big=\!!eightpoint, \c!small=\!!fivepoint] \definebodyfontenvironment [\!!fivepoint] [ \s!text=\!!fivepoint, \s!script=\!!fivepoint, \s!scriptscript=\!!fivepoint, \c!x=\!!fivepoint, \c!xx=\!!fivepoint, \c!big=\!!sevenpoint, \c!small=\!!fivepoint] \definebodyfontenvironment [\!!fourpoint] [ \s!text=\!!fourpoint, \s!script=\!!fourpoint, \s!scriptscript=\!!fourpoint, \c!x=\!!fourpoint, \c!xx=\!!fourpoint, \c!big=\!!sixpoint, \c!small=\!!fourpoint] \definebodyfontswitch [fourteenpointfour] [\!!fourteenpointfour] \definebodyfontswitch [twelvepoint] [\!!twelvepoint] \definebodyfontswitch [elevenpoint] [\!!elevenpoint] \definebodyfontswitch [tenpoint] [\!!tenpoint] \definebodyfontswitch [ninepoint] [\!!ninepoint] \definebodyfontswitch [eightpoint] [\!!eightpoint] \definebodyfontswitch [sevenpoint] [\!!sevenpoint] \definebodyfontswitch [sixpoint] [\!!sixpoint] \definebodyfontswitch [fivepoint] [\!!fivepoint] \definebodyfontswitch [fourpoint] [\!!fourpoint] \definebodyfontswitch [xii] [\!!twelvepoint] \definebodyfontswitch [xi] [\!!elevenpoint] \definebodyfontswitch [x] [\!!tenpoint] \definebodyfontswitch [ix] [\!!ninepoint] \definebodyfontswitch [viii] [\!!eightpoint] \definebodyfontswitch [vii] [\!!sevenpoint] \definebodyfontswitch [vi] [\!!sixpoint] %D So far. \definefontstyle [\c!mm] [\c!mm] \definefontstyle [\c!rm,\v!roman,\v!serif,\v!regular] [\c!rm] \definefontstyle [\c!ss,\v!sansserif,\v!sans,\v!support] [\c!ss] \definefontstyle [\c!tt,\v!teletype,\v!type,\v!mono] [\c!tt] \definefontstyle [\c!hw,\v!handwritten] [\c!hw] \definefontstyle [\c!cg,\v!calligraphic] [\c!cg] \definefontsize[\c!a] \definefontsize[\c!b] \definefontsize[\c!c] \definefontsize[\c!d] \definealternativestyle [\v!mediaeval] [\os] [] \definealternativestyle [\v!normal] [\tf] [] \definealternativestyle [\v!bold] [\bf] [] \definealternativestyle [\v!type] [\tt] [] \definealternativestyle [\v!mono] [\tt] [] \definealternativestyle [\v!slanted] [\sl] [] \definealternativestyle [\v!italic] [\it] [] \definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] [] \definealternativestyle [\v!bolditalic,\v!italicbold] [\bi] [] \definealternativestyle [\v!small,\v!smallnormal] [\tfx] [] \definealternativestyle [\v!smallbold] [\bfx] [] \definealternativestyle [\v!smalltype] [\ttx] [] \definealternativestyle [\v!smallslanted] [\slx] [] \definealternativestyle [\v!smallboldslanted,\v!smallslantedbold] [\bsx] [] \definealternativestyle [\v!smallbolditalic,\v!smallitalicbold] [\bix] [] \definealternativestyle [\v!sans,\v!sansserif] [\ss] [] \definealternativestyle [\v!sansbold] [\ss\bf] [] %D Slow but handy: \definealternativestyle [\v!smallbodyfont] [\setsmallbodyfont] [] \definealternativestyle [\v!bigbodyfont] [\setbigbodyfont] [] %D We treat {\sc Small Caps} and \cap {Pseudo Caps} a bit %D different. We also provide an \WORD {uppercase} style. \definealternativestyle [\v!cap,\v!capital] [\smallcapped] [\smallcapped] \definealternativestyle [\v!smallcaps] [\sc] [\sc] \definealternativestyle [\v!WORD] [\WORD] [\WORD] %D \macros %D {...math} %D %D New or old? % tzt proper \define... % % watch out: \synchronizesymb resets the family so we need a second % \mf (or maybe \mr): messy and to be sorted out \def\tfmath{\tf\mf\synchronizesymb\mf} \def\bfmath{\bf\mf\synchronizesymb\mf} \def\slmath{\sl\mf\synchronizesymb\mf} \def\itmath{\it\mf\synchronizesymb\mf} \def\bsmath{\bs\mf\synchronizesymb\mf} \def\bimath{\bi\mf\synchronizesymb\mf} \def\scmath{\sc\mf\synchronizesymb\mf} \def\nnmath{\nn\mf\synchronizesymb\mf} \def\textmath {\synchronizesymb} %D \macros %D {fontstylesuffix} %D %D The next macro is used to map non latin fontnames on %D fonts. See \type {font-uni} for an example of its use. %\def\fontstylesuffix% % {\ifnum\fam=\tffam \s!Regular \else % \ifnum\fam=\bffam \s!Bold \else % \ifnum\fam=\slfam \s!Slanted \else % \ifnum\fam=\itfam \s!Italic \else % \ifnum\fam=\bsfam \s!BoldSlanted \else % \ifnum\fam=\bifam \s!BoldItalic \else % \s!Regular \fi\fi\fi\fi\fi\fi}% \def\fontstylesuffix% why the \s!Regular ? see \getglyph {\ifx\fontalternative\c!tf \s!Regular \else \ifx\fontalternative\c!bf \s!Bold \else \ifx\fontalternative\c!sl \s!Slanted \else \ifx\fontalternative\c!it \s!Italic \else \ifx\fontalternative\c!bs \s!BoldSlanted \else \ifx\fontalternative\c!bi \s!BoldItalic \else \ifx\fontalternative\c!sc \s!Caps \else \s!Regular \fi\fi\fi\fi\fi\fi\fi}% %D We still have to take care of \type{\xi}, so: \def\xi{\ifmmode\normalxi\else\elevenpoint\fi} %D \macros %D {definefontvariant,fontvariant,variant} %D %D A slightly adapted version of Adam Lindsays variant patches: %D %D \starttyping %D \usetypescriptfile[type-psc] \loadmapfile[texnansi-public-fpl] %D \usetypescript[palatino][texnansi] \setupbodyfont[palatino] %D %D \definefontvariant [Serif][osf] [OsF] %D %D \startlines %D {\sc abcdefgHIJKlmnop} %D 123{\Var[osf]456}789 %D {\Var[osf] 123{\Var[reset]456}789} %D {\it 123{\Var[osf]456}789 %D {\Var[osf]123{\Var[reset]456}789}} %D {\tfb\bf 123{\Var[osf]456}789 %D {\Var[osf] 123{\Var[reset]456}789}} %D {\sc 123{\Var[osf]456}789 %D {\Var[osf] 123{\Var[reset]456}789}} %D \stoplines %D \stoptyping \def\definefontvariant {\dotripleargument\dodefinefontvariant} \def\dodefinefontvariant[#1][#2][#3]% {\setvalue{\??fv#1#2}{#3}} \def\fontvariant#1#2{\executeifdefined{\??fv#1#2}\empty} \def\dosetscaledfont {\checkrelativefontsize\fontstyle \scaledfont\currentfontscale\bodyfontsize \scaledfont\relativefontsize\scaledfont} \unexpanded\def\variant[#1]% slow {\dosetscaledfont \expanded{\definedfont [\truefontname{\fontstringA\fontstylesuffix\fontvariant\fontstringA{#1}} at \scaledfont]}% \ignoreimplicitspaces} \ifx\Var\undefined \let\Var\variant \fi %D By default we load the Computer Modern Roman fonts (but %D not yet at this moment) and activate the 12pt roman %D bodyfont. Sans serif and teletype are also available and %D can be called for by \type{\ss} and \type{\tt}. % \setupbodyfont [unk, rm] %D Also needed is: \definefont[tinyfont][Mono at 1ex] %D \macros %D {doiffontpresentelse} %D %D Some unused left||overs: %D %D \starttyping %D \def\doiffontpresentelse#1#2#3% %D {\bgroup %D \batchmode\font\dummy=\truefontname{#1}\errorstopmode %D \edef\lastfontname{\fontname\dummy}% %D \ifx\lastfontname\nullfontname\egroup#3\else\egroup#2\fi} %D %D \def\abortiffontnotfound#1% %D {\doiffontpresentelse{#1}{}{\showmessage\m!fonts{10}{\truefontname{#1}}\endinput}} %D \stoptyping %D %D We now provide (slow, but sometimes handy): %D %D \starttyping %D \doiffontpresentelse{texnansi-lmr10}{YES}{NO} %D \doiffontpresentelse{adam-lindsay-modern-serif}{YES}{NO} %D \stoptyping \def\doiffontpresentelse#1% {\bgroup \scratchcounter\interactionmode \batchmode \font\dummy=\truefontname{#1}\relax \interactionmode\scratchcounter \edef\lastfontname{\fontname\dummy}% \ifx\lastfontname\nullfontname \egroup\expandafter\secondoftwoarguments \else \egroup\expandafter\firstoftwoarguments \fi} %D New commands (not yet interfaced): \def\style[#1]% for inline usage, like \color {\groupedcommand{\ifcsname#1\endcsname\csname#1\endcsname\else\definedfont[#1]\fi}{}} \def\startstyle[#1]% {\begingroup \ifcsname#1\endcsname\csname#1\endcsname\else\definedfont[#1]\fi} \def\stopstyle {\endgroup} %D Still experimental (might even go away). % \definestylecollection[mine] % \definestyleinstance[mine][default][sorry] % \definestyleinstance[mine][tt][bs][ttbs:\rm\sl] % \definestyleinstance[mine][tt][bf][ttbf:\rm\sl] % \definestyleinstance[mine][bf][\sl] % \definestyleinstance[mine][sl][\tt] % {\bf test \mine test \sl test \mine test \bs oeps \mine oeps {\tt test \mine \bf test}} \definesystemvariable{sx} \def\definestylecollection {\dosingleargument\dodefinestylecollection} \def\dodefinestylecollection[#1]% {\iffirstargument \unexpanded\setvalue{#1}{\styleinstance[#1]}% \def\docommand##1% {\def\dodocommand####1{\letbeundefined{\??sx##1:####1:\commalistelement}}% \processcommacommand[\fontalternativelist,\s!default]\dodocommand}% \processcommacommand[\fontstylelist,\s!default]\docommand \fi} \def\definestyleinstance {\doquadrupleargument\dodefinestyleinstance} \def\dodefinestyleinstance[#1][#2][#3][#4]% [name] [rm|ss|tt|..] [sl|bf|...] [whatever] {\iffirstargument \doifundefined{#1}{\definestylecollection[#1]}% \fi \iffourthargument \setvalue{\??sx#1:#2:#3}{#4}% \else\ifthirdargument \setvalue{\??sx#1::#2}{#3}% \else\ifsecondargument \letvalue{\??sx#1::#2}\empty \fi\fi\fi} \unexpanded\def\styleinstance[#1]% will be faster {%\begingroup\expanded{\infofont[#1:\fontstyle:\fontalternative]}\endgroup \executeifdefined{\??sx#1:\fontstyle:\fontalternative}% {\executeifdefined{\??sx#1:\fontstyle:\s!default}% {\executeifdefined{\??sx#1::\fontalternative} {\getvalue {\??sx#1::\s!default}}}}} % \unexpanded\def\styleinstance[#1]% % {\csname\??sx#1% % \ifcsname:\fontstyle:\fontalternative\endcsname % :\fontstyle:\fontalternative % \else\ifcsname:\fontstyle:\s!default\endcsname % :\fontstyle:\s!default % \else\ifcsname::\fontalternative\endcsname % ::\fontalternative % \else\ifcsname::\s!default\endcsname % ::\s!default % \else % % nothing, \relax % \fi\fi\fi\fi % \endcsname} %D \Compatibility with \MKIV: \def\somefontsize{\scaledfont} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-lst.mkvi0000644000175000017500000013331612130411274024336 0ustar norbertnorbert%D \module %D [ file=strc-lst, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Lists, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Lists} \registerctxluafile{strc-lst}{1.001} % clean up in progress ... % % also (long term) todo: % % autocrossdocument % auto refs to lists (chain) % % TODO: strut=yes|no % % \lists -> strc_lists \unprotect %D Lists are mostly used for tables of contents but are in fact a rather generic %D feature of \CONTEXT. We seperate between storage and rendering and the current %D implementation is a reworked version of all that was added in steps. As lists %D are used frequently compatibility is an important aspect. A couple of rendering %D alternatives are provided here but more are possible. \installcorenamespace{list} \installframedcommandhandler \??list {list} \??list \let\setuplists\setuplist % yes or no \setuplist [\c!height=\v!broad, \c!depth=\v!broad, \c!offset=.25\emwidth, \c!state=\v!start, \c!coupling=\v!off, \c!criterium=\v!local, \c!number=\zerocount, \c!width=3\emwidth, %\c!maxwidth=, \c!distance=\zeropoint, \c!margin=\zeropoint, \c!alternative=\c!b, \c!style=\v!normal, %\c!color=, \c!textstyle=\listparameter\c!style, % \currentliststyleparameter (but then we need to set it in every ...) \c!numberstyle=\listparameter\c!style, % \currentliststyleparameter \c!pagestyle=\listparameter\c!style, % \currentliststyleparameter \c!textcolor=\listparameter\c!color, % \currentlistcolorparameter (but then we need to set it in every ...) \c!numbercolor=\listparameter\c!color, % \currentlistcolorparameter \c!pagecolor=\listparameter\c!color, % \currentlistcolorparameter \c!numbercommand=\firstofoneargument, \c!textcommand=\firstofoneargument, \c!pagecommand=\firstofoneargument, \c!pagenumber=\v!yes, % better: 'first' \c!headnumber=\v!yes, % better: 'second' % \c!sectionnumber=\listparameter\c!headnumber, % use this instead \c!interaction=\v!all, % was \v!sectionnumber, % or make this headnumber (or accept both) \c!label=\v!no, %\c!extras=, %\c!aligntitle=, %\c!before=, %\c!after=, %\c!inbetween=, %\c!symbol=, %\c!expansion=, \c!limittext=\languageparameter\c!limittext] % not used currently %D Helpers: \unexpanded\def\usenestedliststyleandcolor#style#color% will change {\useliststyleandcolor#style#color% \ifx\currentcolorparameter\empty \else \resetinteractionparameter\c!color \resetinteractionparameter\c!contrastcolor \fi} \unexpanded\def\doifelselist#tag% can also move to \installcommandhandler {\ifcsname\namedlisthash{#tag}\s!parent\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D Regular list entries are bound to a specific location in order to %D get the right pagenumber etc.\ associated. When pushing something %D inbetween (in mkiv) it ends up directtly in the list. This is the %D default because otherwise users will wonder why spacing might get %D messed up (due to an unseen but present node). It is possible to %D force a location by explicitly setting \type {location} to \type %D {here}. %D %D Another way to force a certain order is to set the \type {order} %D variable when placing a list. The \type {command} option only %D pushes commands into the right order, and \type {all} orders all %D entries (which might be too much). In this case no specific %D location is needed with the inbetween method. Maybe additional %D mechanisms show up some day. See \type {inbetween-001.tex} for an %D example. % command : location=none % userdata : location=none % simple : location=here \unexpanded\def\structurelistinject {\dotripleempty\strc_lists_inject} \def\strc_lists_inject[#tag]% {\begingroup \edef\currentlist{#tag}% \doifelse{\listparameter\c!state}\v!start\strc_lists_inject_yes\strc_lists_inject_nop} \def\strc_lists_inject_nop[#dummya][#dummyb]% {\endgroup} \def\strc_lists_inject_yes[#settings][#userdata]% {\setupcurrentlist[\c!type=userdata,\c!location=\v!none,#settings]% grouped \edef\p_location{\listparameter\c!location}% \setnextinternalreference \edef\currentlistnumber{\ctxcommand{addtolist{ references = { internal = \nextinternalreference, block = "\currentsectionblock", % handy for lists, like bibl section = structures.sections.currentid(), % location = "\p_location", }, metadata = { kind = "\listparameter\c!type", name = "\currentlist", level = structures.sections.currentlevel(), catcodes = \the\catcodetable, }, userdata = \!!bs\detokenize{#userdata}\!!es % will be converted to table at the lua end }}}% \ifx\p_location\v!here % this branch injects nodes ! \expanded{\ctxlatecommand{enhancelist(\currentlistnumber)}}% \ctxlua{structures.references.setinternalreference(nil,nil,\nextinternalreference)}% will change \xdef\currentstructurelistattribute{\number\lastdestinationattribute}% \dontleavehmode\hbox attr \destinationattribute \lastdestinationattribute{}% todo \else % and this one doesn't \ctxcommand{enhancelist(\currentlistnumber)}% \fi \endgroup} \unexpanded\def\writebetweenlist{\dodoubleempty \strc_lists_write_between} \unexpanded\def\writedatatolist {\dotripleargument\strc_lists_write_data_to} \unexpanded\def\writetolist {\dodoubleempty \strc_lists_write_to} \def\strc_lists_write_between[#tag]% {\begingroup \edef\currentlist{#tag}% \doifelse{\namedlistparameter{#tag}\c!state}\v!start \strc_lists_write_between_yes \strc_lists_write_between_nop} \def\strc_lists_write_between_yes[#settings]#command% {\strc_lists_inject_yes[#settings,\c!type=\s!command][command={#command}]} \def\strc_lists_write_between_nop[#settings]#command% {\endgroup} \def\strc_lists_write_data_to[#tag]% {\begingroup \edef\currentlist{#tag}% \doifelse{\namedlistparameter{#tag}\c!state}\v!start \strc_lists_write_data_to_yes \strc_lists_write_data_to_nop} \def\strc_lists_write_data_to_yes[#settings][#userdata]% {\ifthirdargument % no need to have an extra step ... used seldom \strc_lists_inject_yes[#settings,\c!type=\s!userdata][#userdata]% \else \strc_lists_inject_yes[\c!type=\s!userdata][#settings]% \fi} \def\strc_lists_write_data_to_nop[#settings][#userdata]% {\endgroup} \def\strc_lists_write_to[#tag]% {\begingroup \edef\currentlist{#tag}% \doifelse{\namedlistparameter{#tag}\c!state}\v!start \strc_lists_write_to_yes \strc_lists_write_to_nop} \def\strc_lists_write_to_yes[#settings]#first#second% no \s!first because we don't expand user settings {\strc_lists_inject_yes[\c!location=\v!here,#settings,\c!type=\s!simple][first={#first},second={#second}]} \def\strc_lists_write_to_nop[#settings]#first#second% {\endgroup} % \strc_lists_inject_nop[][] %D When placing a list either one or a set can be giving. This makes %D it possible to flush for instance an nested (or merged) table of %D contents. Keep in mind that placing a list is what we do most (think %D of tables of contents, figures, etc.\ but other usag eis also possible %D in which case low level commands have to be used. \newtoks\everystructurelist \unexpanded\def\placelist {\dodoubleempty\strc_lists_place} \unexpanded\def\placerawlist {\dodoubleempty\strc_lists_place_raw} \def\strc_lists_place[#taglist][#settings]% {\begingroup \startpacked[\v!blank]% \edef\m_list {#taglist}% \edef\m_first{\firststructureelementinlist{#taglist}}% \ifx\m_list\m_first % use settings of first \else % use settings of root \let\m_first\empty \fi \strc_lists_place_indeed\m_first\m_list{#settings}% \stoppacked \endgroup} \def\strc_lists_place_raw[#tag][#settings]% just one list {\strc_lists_place_indeed\empty{#tag}{#settings}} \def\strc_lists_place_indeed#tag#list#settings% {\begingroup \edef\currentlist{#tag}% \setupcurrentlist[#settings]% \the\everystructurelist % \doif{\listparameter\c!coupling}\v!on{\startlistreferences{#tag}}% \strc_lists_place_current % maybe inline {#list}% {\listparameter\c!criterium}% {\listparameter\c!number}% {\listparameter\c!extras}% {\listparameter\c!order}% % \stoplistreferences \par % todo: only when vertical list mode \endgroup \strc_lists_set_mode} \def\strc_lists_set_mode {\ifcase\structurelistsize\relax \resetsystemmode\v!list \else \setsystemmode \v!list \fi} %D Complete lists are just lists but with a title. They were %D originally introduced to minimize the number for commands in %D a document source but nowadays that is less an issue in the %D sense that the extra few lines are neglectable to the rest. \unexpanded\def\systemsuppliedchapter {\getvalue{\v!chapter}} % obsolete \unexpanded\def\systemsuppliedtitle {\getvalue{\v!title}} % obsolete \unexpanded\def\completelist {\dodoubleempty\strc_lists_complete} \def\strc_lists_complete[#tag][#settings]% {\strc_lists_complete_indeed[#tag][#tag][#settings]} \def\strc_lists_complete_indeed[#singular][#plural][#settings]% {\normalexpanded{\startnamedsection[\v!title][\c!title=\headtext{#plural},\c!reference=#singular]}% \strc_lists_place[#singular][#settings]% \stopnamedsection} %D Combined list provide a nice level of abstraction. %D %D \starttyping %D \definecombinedlist[whatever][a,b,c][settings] %D \stoptyping \unexpanded\def\definecombinedlist {\dotripleempty\strc_lists_combined_define} \def\strc_lists_combined_define[#tag][#list][#settings]% {\definelist[#tag][\c!criterium=\v!local,\c!number=0,\c!alternative=,\c!list={#list},#settings]% inherits from root \setvalue{\e!setup #tag\e!endsetup}{\dodoubleempty\strc_lists_combined_setup [#tag]}% \setvalue{\e!place #tag}{\dodoubleempty\strc_lists_combined_place [#tag]}% \setvalue{\e!complete #tag}{\dodoubleempty\strc_lists_combined_complete[#tag]}} \unexpanded\def\setupcombinedlist {\dodoubleargument\strc_lists_combined_setup} \def\strc_lists_combined_setup[#tag][#settings]% {\ifsecondargument \setuplist[#tag][#settings]% we don't want to mess up the parent \fi} \unexpanded\def\placecombinedlist {\dodoubleempty\strc_lists_combined_place} \def\strc_lists_combined_place[#tag][#settings]% i.e. no list set in settings {\begingroup % \edef\currentlist{#tag}% \setupcurrentlist[#settings]% \edef\m_strc_list_alternative{\listparameter\c!alternative}% we only inherit alternative % \strc_lists_place_indeed{#tag}{\listparameter\c!list}{#settings}% \endgroup} \def\strc_lists_combined_complete[#tag][#settings]% {\normalexpanded{\startnamedsection[\v!title][\c!title={\headtext{#tag}},\c!reference=#tag]}% \strc_lists_combined_place[#tag][#settings]% \stopnamedsection} %D Given that some variables are set, we can ask for some properties of %D an entry. \def\currentstructurelistnumber{0} % injection \def\currentlistmethod {entry} % typesetting \def\currentlistindex {0} % typesetting \def\structurelistlocation {\ctxcommand{listlocation(\currentlistindex)}} \def\structurelistrealpagenumber {\ctxcommand{listrealpage("\currentlist",\currentlistindex)}} \unexpanded\def\structurelistpagenumber {\dostarttagged\t!listpage\empty \ctxcommand{listprefixedpage( "\currentlist", \currentlistindex, { separatorset = "\listparameter\c!pageprefixseparatorset", conversionset = "\listparameter\c!pageprefixconversionset", set = "\listparameter\c!pageprefixset", segments = "\listparameter\c!pageprefixsegments", connector = \!!bs\listparameter\c!pageprefixconnector\!!es, }, { prefix = "\listparameter\c!pageprefix", conversionset = "\listparameter\c!pageconversionset", starter = \!!bs\listparameter\c!pagestarter\!!es, stopper = \!!bs\listparameter\c!pagestopper\!!es, } )}% \dostoptagged} \unexpanded\def\structurelistuservariable#name% {\dostarttagged\t!listdata{#name}% \ctxcommand{listuserdata("\currentlist",\currentlistindex,"#name")}% \dostoptagged} \def\rawstructurelistuservariable#name% {\ctxcommand{listuserdata("\currentlist",\currentlistindex,"#name")}} \unexpanded\def\structurelistfirst {\structurelistuservariable\s!first } % s! \unexpanded\def\structurelistsecond{\structurelistuservariable\s!second} % s! \def\rawstructurelistfirst {\rawstructurelistuservariable\s!first } % s! % was \unexpanded \def\rawstructurelistsecond{\rawstructurelistuservariable\s!second} % s! % was \unexpanded \unexpanded\def\doifstructurelisthaspageelse {\ctxcommand{doiflisthaspageelse("\currentlist",\currentlistindex)}} \unexpanded\def\doifstructurelisthasnumberelse {\ctxcommand{doiflisthasnumberelse("\currentlist",\currentlistindex)}} \unexpanded\def\structurelistgenerictitle {\dostarttagged\t!listcontent\empty \ctxcommand{listtitle("\currentlist",\currentlistindex)}% \dostoptagged} \unexpanded\def\structurelistgenericnumber % tricky, we need to delay tagging as we have nested lua calls {\dostarttagged\t!listtag\empty \ctxcommand{listprefixednumber("\currentlist",\currentlistindex, { prefix = "\listparameter\c!prefix", separatorset = "\listparameter\c!prefixseparatorset", conversionset = "\listparameter\c!prefixconversionset", starter = \!!bs\listparameter\c!prefixstarter\!!es, stopper = \!!bs\listparameter\c!prefixstopper\!!es, set = "\listparameter\c!prefixset", segments = "\listparameter\c!prefixsegments", connector = \!!bs\listparameter\c!prefixconnector\!!es, }, { separatorset = "\listparameter\c!numberseparatorset", conversionset = "\listparameter\c!numberconversionset", starter = \!!bs\listparameter\c!numberstarter\!!es, stopper = \!!bs\listparameter\c!numberstopper\!!es, segments = "\listparameter\c!numbersegments", } )}% \dostoptagged} % TODO: pass extra tag name (contents, figures, bibliography ...) \unexpanded\def\strc_lists_place_current#list#criterium#number#extras#order% beware, not a user command {\dostarttagged\t!list\empty \ctxcommand{processlist{ names = "#list", criterium = "#criterium", number = "#number", extras = "#extras", order = "#order" }}% \dostoptagged} \unexpanded\def\strc_lists_analyze#list#criterium#number% {\ctxcommand{analyzelist{ names = "#list", criterium = "#criterium", number = "#number" }}} \def\firststructureelementinlist#list% {\ctxcommand{firstinset("#list")}} \def\structurelistsize {\ctxcommand{listsize()}} %D Depending on what kind of list we have (e.g.\ a section related one) %D processors can be defined. % push pop test: % % \starttext % \placelist[chapter] [after={\placelist[section][criterium=local]}] % \chapter{One} \section{Alpha} \section{Beta} % \chapter{Two} \section{First} \section{Second} % \stoptext \installcorenamespace{structurelistprocessor} % the topmost list handler \installcorenamespace{listextra} % control of that handler \installcommandhandler \??listextra {listextra} \??listextra \definelistextra % example [\v!page] [\c!before={\showmessage\m!system{14}{\currentlist/\currentlistindex}\page}] \unexpanded\def\installstructurelistprocessor#tag#meaning% {\expandafter\normaldef\csname\??structurelistprocessor#tag\endcsname{#meaning}} \def\usestructurelistprocessor#tag% {\csname\??structurelistprocessor#tag\endcsname} \unexpanded\def\strclistsentryprocess#tag#method#index#extra% This one is called at the lua end! {\ctxcommand{pushlist(#index)}% \edef\currentlist {#tag}% \edef\currentlistmethod{#method}% \edef\currentlistindex {#index}% \edef\currentlistextra {#extra}% \listextraparameter\c!before \dostarttagged\t!listitem\currentlist \csname\??structurelistprocessor \ifcsname\??structurelistprocessor\currentlist:\currentlistmethod\endcsname\currentlist:\currentlistmethod\else \ifcsname\??structurelistprocessor\currentlistmethod \endcsname\currentlistmethod \else \ifcsname\??structurelistprocessor\currentlist \endcsname\currentlist \else \s!default \fi\fi\fi \endcsname \dostoptagged \listextraparameter\c!after \ctxcommand{poplist()}} % lists that have a number/title are kind of generic and can share code \installstructurelistprocessor\s!default {no list method} \installstructurelistprocessor\s!simple {\let\currentlistentrynumber \structurelistfirst \let\currentlistentrytitle \structurelistsecond \let\currentlistentrypagenumber\structurelistpagenumber \strc_lists_apply_renderingsetup} \installstructurelistprocessor\s!command {\ctxcommand{listuserdata("\currentlist",\currentlistindex,"\s!command")}} \installstructurelistprocessor{section} {\let\currentlistentrynumber \structurelistgenericnumber \let\currentlistentrytitle \structurelistgenerictitle \let\currentlistentrypagenumber\structurelistpagenumber \strc_lists_apply_renderingsetup} \installstructurelistprocessor{number+title} {\let\currentlistentrynumber \structurelistgenericnumber \let\currentlistentrytitle \structurelistgenerictitle \let\currentlistentrypagenumber\structurelistpagenumber \strc_lists_apply_renderingsetup} % example of usage elsewhere: % % \installstructcurelistprocessor{pubs:userdata} % {\ctxcommand{listuserdata("\currentlist",\currentlistindex,"bibref")}} %D List symbols are used in interactive documents where no numbers %D are used but nevertheless structure is present. Beware, the list %D symbol macro gets an argument passed, i.e. when this argument is %D not picked up, the symbol becomes a kind of prefix. It's not really %D a user command (and might even get protected). \unexpanded\def\listsymbol[#tag]#number% {\begingroup \edef\currentlist{#tag}% \def\currentlistentrynumber{#number}% no edef else tag problems \currentlistsymbol \endgroup} % For historical reasons we're stuck to symbols, so in order to generalize, % we have to hook it into the symbol handle. One way to deal with this is % to use a different key and as it makes sense to use setups instead of % def's we use a new key 'renderingsetup' which is the name of a setup. \def\strc_lists_assign_dimen#dimension#key#default% {\edef\m_strc_list_dimen{\listparameter#key}% \doifinsetelse\m_strc_list_dimen{\v!fit,\v!broad}{#dimension#default}{#dimension\m_strc_list_dimen}\relax} \definesymbol[\v!list][\v!none ][\strc_lists_symbol_none] \definesymbol[\v!list][\v!one ][\strc_lists_symbol_one] \definesymbol[\v!list][\v!two ][\strc_lists_symbol_two] \definesymbol[\v!list][\v!three ][\strc_lists_symbol_three] \definesymbol[\v!list][\s!default][\strc_lists_symbol_default] \definesymbol[\v!list][\s!unknown][\strc_lists_symbol_unknown] \unexpanded\def\currentlistsymbol {\edef\p_symbol{\listparameter\c!symbol}% \doifinsymbolsetelse\v!list\p_symbol {\directsymbol\v!list\p_symbol} {\directsymbol\v!list\s!default}} \unexpanded\def\strc_lists_symbol_none {\strc_lists_assign_dimen\scratchwidth\c!width{1.5\emwidth}% \hbox to \scratchwidth{}} \unexpanded\def\strc_lists_symbol_one {\strut\symbol[bullet]} \unexpanded\def\strc_lists_symbol_two {\vrule\!!width\emwidth\!!height\exheight\!!depth\zeropoint} \unexpanded\def\strc_lists_symbol_three {\begingroup \strc_lists_assign_dimen\scratchwidth \c!width {1.5\emwidth}% \strc_lists_assign_dimen\scratchheight\c!height\exheight \strc_lists_assign_dimen\scratchdepth \c!depth \zeropoint \vrule\!!width\scratchwidth\!!height\scratchheight\!!depth\scratchdepth \endgroup} \unexpanded\def\strc_lists_symbol_unknown {\listparameter\c!symbol} \installcorenamespace{listsymbollabels} \unexpanded\def\strc_lists_symbol_default {\dontleavehmode \strut \begingroup \edef\currentlistlabel{\listparameter\c!label}% can be used in label \csname\??listsymbollabels \ifcsname\??listsymbollabels\currentlistlabel\endcsname\currentlistlabel\else\s!unknown\fi \endcsname \endgroup} \setvalue{\??listsymbollabels\s!unknown}% use whatever is set {\leftlabeltext\currentlistlabel \listparameter\c!starter \currentlistentrynumber \listparameter\c!stopper \rightlabeltext\currentlistlabel} \setvalue{\??listsymbollabels}% default (empty) {\listparameter\c!starter \currentlistentrynumber \listparameter\c!stopper} \setvalue{\??listsymbollabels\v!no}% also default {\listparameter\c!starter \currentlistentrynumber \listparameter\c!stopper} \setvalue{\??listsymbollabels\v!none}% real minimal (as suggested by WS) {\currentlistentrynumber} \setvalue{\??listsymbollabels\v!yes}% auto (use value stored in tuc file) {\edef\currentlistlabel{\ctxcommand{listlabel(\currentlistindex,"\currentlistlabel")}}% \leftlabeltext\currentlistlabel \listparameter\c!starter \currentlistentrynumber \listparameter\c!stopper \rightlabeltext\currentlistlabel} % a : nr - tit - pag % b : nr - tit - fill - pag % c : nr - tit - dots - pag % d : inline % e : interaction % f : interaction % g : interaction \installcorenamespace{listalternative} % specific ways of rendering a list \installcorenamespace{listrenderings} % a namespace for setups (rather local) \installcommandhandler \??listalternative {listalternative} \??listalternative % Commands are bound to specific list instances as often these are % quite special and don't apply to multiple. So, being strict saves % us resets. \setuplistalternative [\c!command=\strictlistparameter\c!command] \definelistalternative [a] [\c!distance=0pt, \c!width=2em, \c!stretch=10em, \c!filler=\hskip.25em\relax, \c!renderingsetup=\??listrenderings:abc] \definelistalternative [b] [\c!distance=5em, \c!width=2em, \c!stretch=10em, \c!filler=\hfill, \c!renderingsetup=\??listrenderings:abc] \definelistalternative [c] [\c!distance=5em, \c!width=0pt, \c!stretch=10em, \c!filler=\hskip.5em\gleaders\hbox to .5em{\hss.\hss}\hfill\hskip.5em\relax, \c!renderingsetup=\??listrenderings:abc] \definelistalternative [d] [\c!renderingsetup=\??listrenderings:d] \definelistalternative [e] [\c!renderingsetup=\??listrenderings:e] \definelistalternative [f] [\c!renderingsetup=\??listrenderings:f] \definelistalternative [g] [\c!renderingsetup=\??listrenderings:g] \definelistalternative [\v!command] [\c!renderingsetup=\??listrenderings:command] \definelistalternative [\v!none] [\c!renderingsetup=\??listrenderings:none] \definelistalternative [\v!vertical] [\c!before=\ifvmode\nointerlineskip\fi, \c!after=\ifvmode\nointerlineskip\fi\endgraf\allowbreak, \c!renderingsetup=\??listrenderings:generic] \definelistalternative [\v!horizontal] [\c!before=\noindent, \c!after=, \c!renderingsetup=\??listrenderings:generic] % \setuplist % [section] % [alternative=MyListItem, % after=\blank, % before=\blank] % % \definelistplacement[MyListItem][command]#1#2#3{(#1) (#2) (#3)} % \definelistplacement[MyListItem][command]{\whatever} % % this is a compatibility command, best use the regular % defined with command= either set in the alternative or % in the list \installcorenamespace{listelementcommand} % the old plugin model \unexpanded\def\definelistplacement {\dodoubleempty\strc_lists_define_placement} \def\strc_lists_define_placement[#tag][#method]% {\edef\p_method{#method}% \ifx\p_method\empty \let\p_method\v!command \fi \normalexpanded{\definelistalternative[#tag][\p_method]}[\c!command=\strc_lists_placement_command]% \doifnextbgroupelse {\strc_lists_define_placement_yes{#tag}} {\strc_lists_define_placement_nop{#tag}}} % indirect definition: : {\bla} \def\strc_lists_define_placement_yes#tag% {\unexpanded\expandafter\normaldef\csname\??listelementcommand#tag\endcsname##1##2##3} % direct definition: {\bla} \def\strc_lists_define_placement_nop#tag% {\unexpanded\expandafter\normaldef\csname\??listelementcommand#tag\endcsname} \def\strc_lists_placement_command {\csname\??listelementcommand\currentlistalternative\endcsname} %D The rendering macros. \newbox \b_strc_lists_number \newbox \b_strc_lists_text \newbox \b_strc_lists_page \newtoks \t_lists_every_renderingsetup \newtoks \t_lists_every_renderingtext \newtoks \t_lists_every_renderingsynchronize \newtoks \t_lists_every_renderingcleanup \newconditional\c_lists_has_number \newconditional\c_lists_has_page \newconditional\c_lists_show_number \newconditional\c_lists_show_page \let\currentlistentrylocation \empty % watch the 'entry' in the name \let\currentlistentrynumber \empty % watch the 'entry' in the name \let\currentlistentrytitle \empty % watch the 'entry' in the name \let\currentlistentrypagenumber\empty % watch the 'entry' in the name \appendtoks \dontcomplain \letinteractionparameter\c!width\zeropoint % a weird one \to \t_lists_every_renderingsetup \appendtoks % better is to use a special list entry but we keep this for compatibility \let\\=\space % so expanding this token register has to come *after* the font switch \dontconvertfont \to \t_lists_every_renderingtext \appendtoks % because we want to avoid redundant lua calls we expand the % location beforehand \ifx\currentlistentrylocation\empty \edef\currentlistentrylocation{\structurelistlocation}% needs attention \fi % because these tests happen often and because we're dealing with % rather complex composed data we have special conditionals; keep % in mind that testing for empty fails do to tagging being applied \edef\p_pagenumber{\listparameter\c!pagenumber}% \ifx\p_pagenumber\v!always \settrue\c_lists_has_page \settrue\c_lists_show_page \else \doifstructurelisthaspageelse\settrue\setfalse\c_lists_has_page \ifx\p_pagenumber\v!yes \settrue\c_lists_show_page \else \setfalse\c_lists_show_page \fi \fi % always forces number placement (in bib we use a forced number) \edef\p_headnumber{\listparameter\c!headnumber}% \ifx\p_headnumber\v!always \settrue\c_lists_has_number \settrue\c_lists_show_number \else \doifstructurelisthasnumberelse\settrue\setfalse\c_lists_has_number \ifx\p_headnumber\v!yes \settrue\c_lists_show_number \else \setfalse\c_lists_show_number \fi \fi \strc_lists_interaction_check \to \t_lists_every_renderingsetup \appendtoks \strc_references_flush_destination_nodes \to \t_lists_every_renderingsynchronize \appendtoks % as we don't want any interference we clear some variables % afterwards \let\currentlistentrylocation \empty \let\currentlistentrynumber \empty \let\currentlistentrytitle \empty \let\currentlistentrypagenumber\empty \setfalse\c_lists_has_page \setfalse\c_lists_has_number \setfalse\c_lists_show_page \setfalse\c_lists_show_number \to \t_lists_every_renderingcleanup \let\m_strc_list_alternative\empty % combined \unexpanded\def\strc_lists_apply_renderingsetup {\the\t_lists_every_renderingsetup \ifx\m_strc_list_alternative\empty \edef\currentlistalternative{\listparameter\c!alternative}% \else \let\currentlistalternative\m_strc_list_alternative \fi \directsetup{\listalternativeparameter\c!renderingsetup}\relax \the\t_lists_every_renderingcleanup} % todo: provide packager via attributes \installcorenamespace{listalternativemethods} % the general wrapper of a rendering \startsetups[\??listrenderings:none] % nothing, nb we use the [] syntax here because we end with a \cs \stopsetups \startsetups[\??listrenderings:command] \edef\p_command{\listalternativeparameter\c!command}% \ifx\p_command\empty [\currentlist: \currentlistentrynumber\space -- \currentlistentrytitle\space -- \currentlistentrypagenumber]% \else \p_command \currentlistentrynumber {\the\t_lists_every_renderingsynchronize\currentlistentrytitle}% \currentlistentrypagenumber \fi \stopsetups % \startsetups[\??listrenderings:\v!vertical] % \directsetup{\??listrenderings:generic} % \stopsetups % \startsetups[\??listrenderings:\v!horizontal] % \directsetup{\??listrenderings:generic} % \stopsetups \startsetups[\??listrenderings:generic] \listparameter\c!before % can be \hskip \edef\p_command{\listalternativeparameter\c!command} \ifx\p_command\empty \listalternativeparameter\c!before \vbox { \forgetall \hbox \strc_lists_get_reference_attribute\v!all { \ifconditional\c_lists_show_number % \ifconditional\c_lists_has_page \hbox \strc_lists_get_reference_attribute\v!number { \strc_lists_set_style_color\c!numberstyle\c!numbercolor\v!number \listparameter\c!numbercommand\currentlistsymbol } % \fi \fi \hbox \strc_lists_get_reference_attribute\v!text { \strc_lists_set_style_color\c!textstyle\c!textcolor\v!text \the\t_lists_every_renderingtext \the\t_lists_every_renderingsynchronize \listparameter\c!textcommand\currentlistentrytitle } \ifconditional\c_lists_show_page \ifconditional\c_lists_has_page \hbox \strc_lists_get_reference_attribute\v!pagenumber { \strc_lists_set_style_color\c!pagestyle\c!pagecolor\v!pagenumber \listparameter\c!pagecommand\currentlistentrypagenumber } \fi \fi } } \listalternativeparameter\c!after \else \hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute { \p_command\currentlistentrynumber\currentlistentrytitle\currentlistentrypagenumber } \fi \listparameter\c!after \stopsetups % to be documented: align, hang \startsetups[\??listrenderings:abc] \endgraf % are we grouped? \leftskip\listparameter\c!margin % after \endgraf ! \listparameter\c!before \endgraf \edef\p_width{\listparameter\c!width} \scratchdistance\listparameter\c!distance\relax \ifx\p_width\v!fit \scratchwidth\zeropoint \else\ifconditional\c_lists_has_number \scratchwidth\p_width \else \edef\p_aligntitle{\listparameter\c!aligntitle} \ifx\p_aligntitle\v!yes \scratchwidth\zeropoint \scratchdistance\zeropoint \else \scratchwidth\p_width \fi \fi\fi \noindent \hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute { \setlocalhsize \hsize\localhsize \hbox to \hsize { \forgetall \strc_lists_set_style_color\c!style\c!color\v!all \scratchhsize\hsize \ifconditional\c_lists_has_number \ifconditional\c_lists_show_number \setbox\b_strc_lists_number\hbox \strc_lists_get_reference_attribute\v!number \ifdim\scratchwidth>\zeropoint to \scratchwidth \fi { \strc_lists_set_style_color\c!numberstyle\c!numbercolor\v!number \listparameter\c!numbercommand\currentlistsymbol \hfill } \else \setbox\b_strc_lists_number\emptyhbox \fi \else \scratchwidth\zeropoint \scratchdistance\zeropoint \setbox\b_strc_lists_number\emptyhbox \fi \ifconditional\c_lists_has_page \ifconditional\c_lists_show_page \setbox\b_strc_lists_page\hbox { \scratchdimen\listalternativeparameter\c!width \hbox \strc_lists_get_reference_attribute\v!pagenumber \ifdim\scratchdimen>\zeropoint to \scratchdimen\fi { \hfill \strc_lists_set_style_color\c!pagestyle\c!pagecolor\v!pagenumber \strut \listparameter\c!pagecommand\currentlistentrypagenumber } } \else \setbox\b_strc_lists_page\emptyhbox \fi \else \setbox\b_strc_lists_page\emptyhbox \fi \vbox { \hsize\scratchhsize \usealignparameter\listparameter \ifdim\scratchwidth<\hsize \edef\p_hang{\listparameter\c!hang} \hangindent\dimexpr\wd\b_strc_lists_number+\scratchdistance\relax \hangafter\ifx\p_hang\v!no\zerocount\else\plusone\fi \scratchdimen\listalternativeparameter\c!distance\relax \ifdim\wd\b_strc_lists_page=\zeropoint \else\ifdim\scratchdimen>\zeropoint\relax \rightskip\scratchdimen\!!plus\listalternativeparameter\c!stretch\relax \parfillskip-\rightskip \fi \fi \else \scratchdistance\zeropoint \fi \parindent\zeropoint \dontleavehmode % % topaligned % % \scratchdimen\wd\b_strc_lists_number % \setbox\b_strc_lists_number\hbox to \hsize{\box\b_strc_lists_number\hss\box\b_strc_lists_page}% % \wd\b_strc_lists_number\scratchdimen % \box\b_strc_lists_number \hskip\scratchdistance\relax \begingroup \strc_lists_set_reference_attribute\v!text \strc_lists_set_style_color\c!textstyle\c!textcolor\v!text \the\t_lists_every_renderingtext \the\t_lists_every_renderingsynchronize \setstrut % needs checking, new here \begstrut \strc_lists_limitated_text\currentlistentrytitle \endstrut \endgroup \ifdim\wd\b_strc_lists_page=\zeropoint\else \nobreak \listalternativeparameter\c!filler \box\b_strc_lists_page \fi } \hss } }% new \endgraf % new, else problems with nointerlinespace and prevdepth \nointerlineskip % anders verkeerde spatiering bij multi-line \endgraf \allowbreak \listparameter\c!after \stopsetups % % example from the context list % % \setuphead [part] [page=right,placehead=yes] % \setuplist [chapter] [alternative=d,before=\blank,after=\blank] % \setuplist [part] [before=\blank,after=\blank] % % \starttext % \startnarrower[2*right] \placecontent \stopnarrower % \blank[4*big] % \startsetups chapter % \blank \startnarrower[3*middle] \placecontent[criterium=local] \stopnarrower % \stopsetups % \placelist[part][criterium=text,after=\setups{chapter}] % % \part{First part} \chapter{Chapter one} \chapter{Chapter two} % \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five} % \part{Second part} \chapter{Chapter one} \chapter{Chapter two} % \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five} % \part{Third part} \chapter{Chapter one} \chapter{Chapter two} % \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five} % \stoptext \startsetups[\??listrenderings:d] \ifvmode \advance\leftskip\listparameter\c!margin \fi \begingroup \ifvmode \noindent \fi \begingroup \strc_lists_set_reference_attribute\v!all \strc_lists_set_style_color\c!style\c!color\v!all \strc_lists_get_destination_attribute \begingroup \ifconditional\c_lists_show_number \donetrue \ifconditional\c_lists_has_number \else \edef\p_symbol{\listparameter\c!symbol} \ifx\p_symbol\empty \donefalse \fi \fi \ifdone \begingroup \strc_lists_set_reference_attribute\v!number \strc_lists_set_style_color\c!numberstyle\c!numbercolor\v!number \listparameter\c!left \listparameter\c!numbercommand\currentlistsymbol \listparameter\c!right \endgroup \kern.5em \nobreak \fi \fi \endgroup \begingroup \strc_lists_set_reference_attribute\v!text \strc_lists_set_style_color\c!textstyle\c!textcolor\v!text \the\t_lists_every_renderingtext \the\t_lists_every_renderingsynchronize \setstrut % needs checking, new here \begstrut \strc_lists_limitated_text\currentlistentrytitle \endstrut \endgroup \begingroup \ifconditional\c_lists_has_page \ifconditional\c_lists_show_page \nobreak \hskip.75em\relax \nobreak \strc_lists_set_reference_attribute\v!pagenumber \strc_lists_set_style_color\c!pagestyle\c!pagecolor\v!pagenumber \strut \listparameter\c!pagecommand\currentlistentrypagenumber \fi \fi \endgroup \scratchdistance\listparameter\c!distance\relax \ifdim\scratchdistance<\emwidth \hskip\emwidth\!!plus\emwidth\!!minus.25\emwidth\relax \else \hskip\scratchdistance\!!plus.5\scratchdistance\!!minus.25\scratchdistance\relax \fi \endgroup \endgroup \stopsetups \startsetups[\??listrenderings:e] \noindent \hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute { \letlistparameter\c!depth\zeropoint \letlistparameter\c!color\empty \inheritedlistframed { \letinteractionparameter\c!strut\v!no % still needed? \strc_lists_set_style_color\c!style\c!color\v!all \the\t_lists_every_renderingtext \the\t_lists_every_renderingsynchronize \setstrut \begstrut \strc_lists_limitated_text\currentlistentrytitle \endstrut } } \par \listparameter\c!inbetween \stopsetups \startsetups[\??listrenderings:f] \noindent \hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute { \dosetraggedhbox{\listparameter\c!align}% \raggedbox { \strc_lists_set_style_color\c!style\c!color\v!all \the\t_lists_every_renderingtext \the\t_lists_every_renderingsynchronize \setstrut \begstrut \strc_lists_limitated_text\currentlistentrytitle \endstrut } } \par \listparameter\c!inbetween \stopsetups \startsetups[\??listrenderings:g] \noindent \hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute { \midaligned { \strc_lists_set_style_color\c!style\c!color\v!all \the\t_lists_every_renderingtext \the\t_lists_every_renderingsynchronize \setstrut \begstrut \strc_lists_limitated_text\currentlistentrytitle \endstrut } } \par \listparameter\c!inbetween \stopsetups %D This is a new one, similar to vertical and horizontal but better suited when %D no command is set (WS): \definelistalternative [\v!interactive] [\c!renderingsetup=\??listrenderings:interactive] \startsetups[\??listrenderings:interactive] \edef\p_command{\listalternativeparameter\c!command}% \ifx\p_command\empty [\currentlist: \currentlistentrynumber\space -- \currentlistentrytitle\space -- \currentlistentrypagenumber]% \else \listparameter\c!before \hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute { \p_command\currentlistentrynumber\currentlistentrytitle\currentlistentrypagenumber } \listparameter\c!after \fi \stopsetups %D List elements are packaged in such a way that we can click on them %D in an interactive document. Here are a few helpers. \newconstant\a_strc_lists_reference \newconstant\a_strc_lists_destination \installcorenamespace{listinteractions} \letvalue{\??listinteractions\v!number }\v!number \letvalue{\??listinteractions\v!sectionnumber}\v!number \letvalue{\??listinteractions\v!text }\v!text \letvalue{\??listinteractions\v!title }\v!text \letvalue{\??listinteractions\v!page }\v!pagenumber \letvalue{\??listinteractions\v!pagenumber }\v!pagenumber \letvalue{\??listinteractions\v!all }\v!all \letvalue{\??listinteractions\v!yes }\v!all \def\listboxproperties {\strc_lists_get_reference_attribute} \def\listrenderingsetup {\the\t_lists_every_renderingtext} \def\listrenderingsynchronize{\the\t_lists_every_renderingsynchronize} \unexpanded\def\strc_lists_interaction_check {\iflocation \strc_lists_interaction_check_yes \else \strc_lists_interaction_check_nop \fi} \def\strc_lists_interaction_check_yes {\edef\p_interaction_forward{\listparameter\c!interaction}% \ifcsname\??listinteractions\p_interaction_forward\endcsname \expandafter\let\expandafter\p_interaction_forward\csname\??listinteractions\p_interaction_forward\endcsname \strc_references_get_simple_page_reference{internal(\currentlistentrylocation)}% \a_strc_lists_reference\currentreferenceattribute \else \a_strc_lists_reference\attributeunsetvalue \fi \ifnum\a_strc_lists_reference=\attributeunsetvalue \let\strc_lists_get_reference_attribute\gobbleoneargument \let\strc_lists_set_reference_attribute\gobbleoneargument \let\strc_lists_set_style_color \strc_lists_set_style_color_normal \else \let\strc_lists_get_reference_attribute\strc_lists_get_reference_attribute_indeed \let\strc_lists_set_reference_attribute\strc_lists_set_reference_attribute_indeed \let\strc_lists_set_style_color \strc_lists_set_style_color_special \fi \edef\p_interaction_backward{\namedheadparameter\currentlist\c!interaction}% \namedheadparameter ! \ifx\p_interaction_backward\v!list \strc_references_set_simple_page_reference{bck:\currentlistentrylocation}% \a_strc_lists_destination\currentdestinationattribute \else \a_strc_lists_destination\attributeunsetvalue \fi \ifnum\a_strc_lists_destination=\attributeunsetvalue \let\strc_lists_get_destination_attribute\empty \let\strc_lists_set_destination_attribute\empty \else \let\strc_lists_get_destination_attribute\strc_lists_get_destination_attribute_indeed \let\strc_lists_set_destination_attribute\strc_lists_set_destination_attribute_indeed \fi} \def\strc_lists_interaction_check_nop {\let\strc_lists_get_reference_attribute \gobbleoneargument \let\strc_lists_set_reference_attribute \gobbleoneargument \let\strc_lists_get_destination_attribute\empty \let\strc_lists_set_destination_attribute\empty \let\strc_lists_set_style_color \strc_lists_set_style_color_normal} \strc_lists_interaction_check_nop \def\strc_lists_get_reference_attribute_indeed#element% {\ifx#element\p_interaction_forward attr \referenceattribute\a_strc_lists_reference \fi} \def\strc_lists_set_reference_attribute_indeed#element% {\ifx#element\p_interaction_forward \attribute\referenceattribute\a_strc_lists_reference \fi} \def\strc_lists_get_destination_attribute_indeed {attr \destinationattribute\number\a_strc_lists_destination} \def\strc_lists_set_destination_attribute_indeed {\attribute\destinationattribute\a_strc_lists_destination} \unexpanded\def\strc_lists_set_style_color_normal#style#color#element% {\useliststyleandcolor#style#color} \unexpanded\def\strc_lists_set_style_color_special#style#color#element% {\useliststyleandcolor#style#color% \ifx\currentcolorparameter\empty \ifx#element\p_interaction_forward \setlocationcolor \fi % \else % \resetinteractionparameter\c!color % \resetinteractionparameter\c!contrastcolor \fi} %D A helper: \def\strc_lists_limitated_text#text% {\edef\p_maxwidth{\listparameter\c!maxwidth}% \ifx\p_maxwidth\empty \listparameter\c!textcommand{#text}% \else \listparameter\c!textcommand{\limitatetext{#text}\p_maxwidth{\splitsymbol{\listparameter\c!limittext}}}% \fi} % public helpers \unexpanded\def\startcurrentlistentrywrapper {\hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute\bgroup} \let\stopcurrentlistentrywrapper\egroup \let\currentlistentryreferenceattribute \strc_lists_get_reference_attribute \let\currentlistentrydestinationattribute\strc_lists_get_destination_attribute \let\currentlistentrylimitedtext \strc_lists_limitated_text % todo: \def\utilitylistlength{\listlength} % old name ... uses in styles \let\listlength\!!zerocount % better use listmode \unexpanded\def\determinelistcharacteristics {\dodoubleempty\strc_lists_determine_characteristics} \def\strc_lists_determine_characteristics[#list][#settings]% {\begingroup \edef\currentlist{\firststructureelementinlist{#list}}% \ifx\currentlist\empty \endgroup \let\listlength\!!zerocount \else \setupcurrentlist[#settings]% \strc_lists_analyze{#list}{\listparameter\c!criterium}{\listparameter\c!number}% \normalexpanded{\endgroup\noexpand\edef\noexpand\listlength{\structurelistsize}}% \fi \strc_lists_set_mode} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-enu.mkvi0000644000175000017500000003271312134352503024325 0ustar norbertnorbert%D \module %D [ file=strc-enu, % moved from strc-des %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Enumerations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Enumerations} \unprotect % command -> headcommand %D Enumerations are just super descriptions. Therefore we implement %D them as an extension. After all, the keys don't clash. In order %D to be able to differentiate between specific settings we use %D some flags. Unfortunately we have some historic differences %D in default values. Therefore we push an extra step in the %D parent chain (we might do the same for regular descriptions). %D In order to be more flexible with theorems Aditya Mahajan added %D support for titles and endsymbols. At the same time we added more %D flexible support for inheriting numbers. %D %D \startbuffer %D \defineenumeration[one] %D \defineenumeration[two] [one] % clone one %D \defineenumeration[three] [counter=one,style=slanted] % only use counter of one %D \defineenumeration[four] [three] % clone three %D \defineenumeration[five] [three] [counter=five] % clone three and use own counter %D \defineenumeration[six] [three] [counter=four] % clone tree and use counter four (undefined) %D %D \startone test test 6 \stopone %D \starttwo test test 7 \stoptwo %D \startthree test test 8 \stopthree %D \startfour test test 9 \stopfour %D \startfive test test 2 \stopfive %D \startsix test test 10 \stopsix %D \stopbuffer %D %D \typebuffer \start \getbuffer \stop %D %D \starttyping %D \setupenumerations[one] [prefix=yes,prefixsegments=section] %D \setupenumerations[two] [prefix=yes,prefixsegments=section] %D \setupenumerations[three][prefix=yes,prefixsegments=section] %D \setupenumerations[four] [prefix=yes,prefixsegments=chapter:section] %D \setupenumerations[five] [prefix=yes,prefixsegments=chapter:section] %D \setupenumerations[six] [prefix=yes,prefixsegments=chapter:section] %D \stoptyping % list and titles are experimental % % \definedescription[test] [location=left,hang=4,headalign={right},distance=1em,list=test] % \defineenumeration[lemma][title=yes,right=:,textdistance=1em, location=top, titlestyle=\bs,list=lemma] % \defineenumeration[ammel][title=yes,right=:,textdistance=.5em,location=left,titlestyle=\it,width=9em] % % \placelist[enumeration:lemma] % \placelist[description:test][width=0pt] % % \starttest {something something something} \input zapf \stoptest % \startlemma {with a title of a certain length} \input tufte \stoplemma % \startammel {with a title} \input zapf \stopammel % % \defineenumeration[lemma][...] % \defineenumeration[titledlemma][lemma][title=yes,right=:,text=lemma,list=lemma] \installcorenamespace{enumeration} \installcommandhandler \??enumeration {enumeration} \??enumeration \installcounterassociation{enumeration} \let\setupenumerations\setupenumeration \setupenumerations % check with old [\c!alternative=\v!top, \c!headstyle=\v!bold, \c!titlestyle=\v!bold, %\c!style=, %\c!color=, %\c!headcolor=, %\c!titlecolor=, \c!width=8\emwidth, \c!distance=\zeropoint, \c!distance=\emwidth, \c!titledistance=.5\emwidth, %\c!hang=, %\c!sample=, %\c!align=, %\c!headalign=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!titleleft=(, \c!titleright=), %\c!closesymbol=, \c!closecommand=\wordright, \c!display=\v!yes, %\c!command=, \c!titlecommand=, \c!expansion=\v!no, %\c!xmlsetup=, %\s!catcodes=, % \c!way=\v!by\v!text, \c!prefix=\v!no, \c!prefixconnector=., %\c!starter=, %\c!stopper=, \c!text=\currentenumeration, \c!number=\v!yes, % else description \c!start=0, \c!state=\v!start, \c!levels=4] % to be considered: % % \let\??construction\??enumeration % % with push/pop (also at definition time) \unexpanded\def\strc_define_commands_enumeration#tag#level#parent% {\doifelsenothing{#parent} {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!enumeration,\c!level=#level]}% \setevalue{\??enumeration#tag:\s!parent}{\??enumeration}}% {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!enumeration,\c!level=#level]}% \setevalue{\??enumeration#tag:\s!parent}{\??enumeration#parent}}% \setuevalue{\e!next #tag}{\strc_enumerations_next {#tag}{\number#level}}% obsolete \setuevalue{\c!reset#tag}{\strc_enumerations_reset {#tag}{\number#level}}% obsolete %setuevalue{\c!set #tag}{\strc_enumerations_set {#tag}{\number#level}}% obsolete \setuevalue {#tag}{\strc_enumerations_command{#tag}}% we could pass level here as well (faster) \setuevalue{\e!start#tag}{\strc_enumerations_start {#tag}}% we could pass level here as well (faster) \setuevalue{\e!stop #tag}{\strc_enumerations_stop }} \appendtoks \ifx\currentenumerationparent\empty % clone => parent | subclone => clone | subsubclone => subclone \let\currentenumerationsub\empty \strc_define_commands_enumeration {\currentenumerationsub\currentenumeration}% \plusone \empty \edef\p_levels{\enumerationparameter\c!levels}% \dostepwiserecurse\plustwo\p_levels\plusone {\strc_define_commands_enumeration {\v!sub\currentenumerationsub\currentenumeration}% \recurselevel {\currentenumerationsub\currentenumeration}% \edef\currentenumerationsub{\v!sub\currentenumerationsub}}% \else % clone => parent | subclone => subparent | subsubclone => subsubparent \let\currentenumerationsub\empty \edef\p_levels{\enumerationparameter\c!levels}% \dorecurse\p_levels {\strc_define_commands_enumeration {\currentenumerationsub\currentenumeration}% \recurselevel {\currentenumerationsub\currentenumerationparent}% \edef\currentenumerationsub{\v!sub\currentenumerationsub}}% \fi \edef\p_counter{\enumerationparameter\s!counter}% can inherit from parent \ifx\p_counter\empty % \let\p_counter\currentenumeration \fi \doifcounterelse\p_counter\donothing{\strc_enumerations_define_counter\p_counter}% \letenumerationparameter\s!counter\p_counter %\strc_enumerations_setup_counter\currentenumeration \to \everydefineenumeration \let\p_strc_constructions_title \empty \let\p_strc_constructions_number\empty \unexpanded\setvalue{\??constructioninitializer\v!enumeration}% {\let\currentenumeration \currentconstruction \let\constructionparameter \enumerationparameter \let\detokenizedconstructionparameter\detokenizedenumerationparameter \let\letconstructionparameter \letenumerationparameter \let\useconstructionstyleandcolor \useenumerationstyleandcolor \let\setupcurrentconstruction \setupcurrentenumeration \edef\p_strc_constructions_number{\constructionparameter\c!number}% \ifx\p_strc_constructions_number\v!yes \settrue\c_strc_constructions_number_state \iftrialtypesetting \strc_counters_save\currentconstructionnumber \fi \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel \else \setfalse\c_strc_constructions_number_state \fi \edef\p_strc_constructions_title{\constructionparameter\c!title}% \ifx\p_strc_constructions_title\v!yes \settrue\c_strc_constructions_title_state \else \setfalse\c_strc_constructions_title_state \fi} \unexpanded\setvalue{\??constructionfinalizer\v!enumeration}% {\ifconditional\c_strc_constructions_number_state \iftrialtypesetting \strc_counters_restore\currentconstructionnumber \fi \fi} %D Interfaces: \let\strc_enumerations_command\strc_descriptions_command \let\strc_enumerations_start \strc_descriptions_start \let\strc_enumerations_stop \strc_descriptions_stop \unexpanded\def\strc_enumerations_next {\strc_constructions_next_indeed \namedenumerationparameter} % #1#2 \unexpanded\def\strc_enumerations_reset{\strc_constructions_reset_indeed\namedenumerationparameter} % #1#2 %unexpanded\def\strc_enumerations_set {\strc_constructions_set_indeed \namedenumerationparameter} % #1#2 %D Counters (maybe we can share this code): (not ok yet, messy with notes) % Maybe we should move counters to the construction level as more derived mechanisms % use it \unknown\ so don't depend on names here! \def\strc_enumerations_define_counter#tag% todo: move inline {\definecounter[#tag]% \registerenumerationcounter{#tag}} \appendtoks \synchronizeenumerationcounters \to \everysetupenumeration \appendtoks \synchronizeenumerationcounters \to \everydefineenumeration %D Initializer: %D The handlers. \newtoks\everyenumeration \appendtoks \disablepseudocaps % sorry, uppercase causes troubles \to \everyenumeration \expandafter\let\csname\??constructionmainhandler \v!enumeration\expandafter\endcsname\csname\??constructionmainhandler \v!description\endcsname \expandafter\let\csname\??constructioncommandhandler\v!enumeration\expandafter\endcsname\csname\??constructioncommandhandler\v!description\endcsname \expandafter\let\csname\??constructionstarthandler \v!enumeration\expandafter\endcsname\csname\??constructionstarthandler \v!description\endcsname \expandafter\let\csname\??constructionstophandler \v!enumeration\expandafter\endcsname\csname\??constructionstophandler \v!description\endcsname \unexpanded\setvalue{\??constructiontexthandler\v!enumeration}% {\begingroup \useconstructionstyleandcolor\c!headstyle\c!headcolor \strc_enumerations_text \endgroup} \unexpanded\def\strc_enumerations_text {\the\everyenumeration % will become obsolete \ifconditional\c_strc_constructions_number_state \ifx\currentconstructionreference\!!plustoken \strc_enumerations_full_number_symbol \else\ifx\currentconstructionreference\!!minustoken \strc_enumerations_full_number_nop \else \strc_enumerations_full_number_coupling \fi\fi \else \strc_enumerations_full_number_nop \fi} \unexpanded\def\strc_enumerations_inject_text_with_space {\edef\p_text{\constructionparameter\c!text}% \ifx\p_text\empty \else \p_text \removeunwantedspaces \nobreakspace \fi} \unexpanded\def\strc_enumerations_inject_extra_text {\ifconditional\c_strc_constructions_title_state \ctxcommand{doiflisthastitleelse("\currentconstructionmain",\currentconstructionlistentry)} \donothing \strc_enumerations_inject_extra_text_indeed \fi} \unexpanded\def\strc_enumerations_inject_text {\constructionparameter\c!numbercommand {\constructionparameter\c!text}} % head ( number title ) \unexpanded\def\strc_enumerations_inject_extra_text_indeed {\begingroup \hskip\constructionparameter\c!titledistance % we listen to the headstyle \useconstructionstyleandcolor\c!titlestyle\c!titlecolor \constructionparameter\c!titlecommand {\constructionparameter\c!titleleft \ctxcommand{savedlisttitle("\currentconstructionmain",\currentconstructionlistentry)}% \constructionparameter\c!titleright}% \endgroup} \unexpanded\def\strc_enumerations_inject_symbol % todo check {\constructionparameter\c!left \constructionparameter\c!symbol \constructionparameter\c!right} \unexpanded\def\strc_enumerations_inject_number {\constructionparameter\c!left \constructionparameter\c!starter \ctxcommand{savedlistprefixednumber("\currentconstructionmain",\currentconstructionlistentry)}% \constructionparameter\c!stopper \constructionparameter\c!right} \unexpanded\def\strc_enumerations_inject_text_and_number {\constructionparameter\c!numbercommand {\strc_enumerations_inject_text_with_space \strc_enumerations_inject_number}} \unexpanded\def\strc_enumerations_inject_text_and_symbol {\constructionparameter\c!numbercommand {\strc_enumerations_inject_text_with_space \strc_enumerations_inject_symbol}} \unexpanded\def\strc_enumerations_full_number_yes {\constructionparameter\c!headcommand {\begstrut \strc_enumerations_inject_text_and_number \strc_enumerations_inject_extra_text \endstrut}} \unexpanded\def\strc_enumerations_full_number_nop {\constructionparameter\c!headcommand {\begstrut \strc_enumerations_inject_text \strc_enumerations_inject_extra_text \endstrut}} \unexpanded\def\strc_enumerations_full_number_symbol {\constructionparameter\c!headcommand {\begstrut \strc_enumerations_inject_text_and_symbol \strc_enumerations_inject_extra_text \endstrut}} % to be used in for instance: % % coupling=questions .... coupling=answers % % we will provide some more control, like skipping etc or reference relates % to do / to be checked \unexpanded\def\strc_enumerations_full_number_coupling {\iflocation \strc_enumerations_full_number_yes \else \iftrialtypesetting \else % \doenumerationregistercoupling \fi \strc_enumerations_full_number_yes \edef\p_coupling{\constructionparameter\c!coupling}% \ifx\p_coupling\empty \else \symbolreference[order(construction:\p_coupling:\nextinternalorderreference)]% \fi \fi} \unexpanded\def\strc_enumerations_skip_number_coupling[#tag]% e.g. for questions with no answer {\ctxlua{structures.references.setnextorder("construction","#tag")}} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/xtag-mxc.mkii0000644000175000017500000000057211571377075024315 0ustar norbertnorbert\defineMMLsynonym LeftCeiling lceil \defineMMLsynonym LeftFloor lfloor \defineMMLsynonym llcorner dlcorn \defineMMLsynonym lmoustache lmoust \defineMMLsynonym lrcorner drcorn \defineMMLsynonym RightCeiling rceil \defineMMLsynonym RightFloor rfloor \defineMMLsynonym rmoustache rmoust \defineMMLsynonym ulcorner ulcorn \defineMMLsynonym urcorner urcorn context-2013.05.28.20130704/texmf-dist/tex/context/base/supp-tpi.mkii0000644000175000017500000002672411756777531024363 0ustar norbertnorbert%D \module %D [ file=supp-tpi, %D version=1997.07.05, %D title=\CONTEXT\ Support Macros, %D subtitle=\TPIC\ Conversion, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 modules implements the conversion of graphic \TPIC\ %D specials using \METAPOST. %D %D We reimplement the \TPIC\ specials using the special %D mimmicking mechanism implemented in the support module %D \type{supp-spe} as well as the \METAPOST\ run||time support %D implemented in \type{supp-mps}. \ifnum\texengine=\luatexengine \endinput \fi \ifx\undefined\writestatus \input supp-mis.mkii \relax \fi \ifx\undefined\mimmickspecials \input supp-spe.mkii \relax \fi \ifx\undefined\MPgraphicbox \input supp-mps.mkii \relax \fi \ifx\undefined\dogetEPSboundingbox \input supp-eps.mkii \relax \fi \writestatus{loading}{ConTeXt Support Macros / TPIC Conversion} %D Beware: we haven't activated both mechanism yet. This is %D to be done in the calling module. \unprotect %D When we want to mimmick \TPIC\ specials in \PDFTEX, we need %D to map its graphic primitives into \PDF\ ones. The main %D problem in doing so is that \PDF\ does not support b-splines %D directly and also does not offer us something to draw arcs. %D Of course all this scan be implemented in \TEX, and the %D first implementation of this module did so, but the results %D were not that satisfying. Not having used these specials %D before, I had for instance to find out that the \TPIC\ %D specials were not that unambiguesly defined. %D %D Then, while discussing something else, Sebastian Ratz told %D me that the Web2c implementation that \PDFTEX\ is base upon, %D offers some rather discutable, but nevertheless handy %D feature: %D %D \starttyping %D \write18{execute program with arguments} %D \stoptyping %D %D Knowing this, I immediatelly decided to throw away the old %D conversion macros and use the marvelous \METAPOST, \TEX\ %D related, drawing program to do the conversion in as high a %D quality as possible. %D %D implementation we're going to present here, not only uses %D for drawing purposes, but also uses the more efficient %D \METAPOST\ features to store the path. %D %D \in{Table}[tab:TPIC specials] lists the \TPIC\ specials as %D mentioned in the \LATEX\ Graphics Companion and the %D relevant part of the \DVIPS\ source. This list shows us %D that we have to store the path before we can use it, simply %D because we don't know in advance what actions to apply on %D it. %D %D \placetable[here][tab:TPIC specials]{The \TPIC\ special syntax.} %D \starttable[|||l|] %D \HL %D \NC \bf tag \NC \bf arguments \NC \bf meaning \NC\SR %D \HL %D \NC pn \NC $w$ \NC set linewidth \NC\FR %D \NC pa \NC $x$ $y$ \NC add point to path \NC\MR %D \NC fp \NC \NC draw/fill path \NC\MR %D \NC ip \NC \NC fill path \NC\MR %D \NC da \NC $l$ \NC draw dashed path \NC\MR %D \NC dt \NC $l$ \NC draw doted path \NC\MR %D \NC sp \NC $d$ \NC draw spline \NC\MR %D \NC ar \NC $x$ $y$ $r_x$ $r_y$ $b$ $e$ \NC draw (partial) arc \NC\MR %D \NC ia \NC $x$ $y$ $r_x$ $r_y$ $b$ $e$ \NC fill (partial) arc \NC\MR %D \NC sh \NC $s$ \NC fill next path \NC\LR %D \HL %D \stoptable %D The first problem we have to take care of is the fact that %D there is no decent begin or end of the drawing process %D defined. We can however be quite sure that writers of %D packages using these specials will put them into a box, %D simply because else this is the most common used way to %D treat something \TEX\ as as a whole, like: %D %D \starttyping %D \hbox{\special{}\special{}...} %D \stoptyping %D %D We just start a picture as soon as the first special is %D encountered, so this becomes: %D %D \starttyping %D \hbox{\openpicture\newspecial{}\newspecial{}... %D \stoptyping %D The first step in opening the picture is to start a group. %D Now we can savely use the egroup that closes the box to also %D end the picture. % BETER: check for context and include mp-tool.mp \def\startTPICspecials {\bgroup \let\startTPICspecials\relax \aftergroup\stopTPICspecials \resetMPdrawing \startMPdrawing input mp-tool.mpii ; pair p[]; \stopMPdrawing} %D As soon as we begin a picture, we inhibit nesting by %D relaxing the start macro. The first \METAPOST\ action we %D take is declaring an array of pairs named $p$. %D Ending the picture is invoked by closing the current group. %D Because the \TPIC\ picture comes out mirrored, we have to %D reflect the current \METAPOST\ picture, stored in the system %D variable {\it currentpicture}, around the $x$-axis. \def\stopTPICspecials {\startMPdrawing currentpicture:=currentpicture reflectedabout ((0,0),(4095,0)); \stopMPdrawing \MPdrawingdonetrue \setbox\MPgraphicbox\hbox {\getMPdrawing}% \setbox\MPgraphicbox\hbox to \zeropoint {\kern-\wd\MPgraphicbox \vbox to \zeropoint{\box\MPgraphicbox\vss}\hss}% \ht\MPgraphicbox\zeropoint \wd\MPgraphicbox\zeropoint \dp\MPgraphicbox\zeropoint \box\MPgraphicbox \egroup} %D Here the macro \type{\stopwritingMPgraphic} has to take care %D of executing and including the \METAPOST\ code. %D We need to keep track of the number of elements that form %D the path. This is needed because we don't know in advance %D how the points are to be connected. \newcount\TPICcounter %D When a path is draw, we can connect the points using a %D smooth curve of drawing straight lines. A closed path can be %D drawn or filled. \newif\ifTPICdraw \newif\ifTPICfill \newif\ifTPICcurve %D The \TPIC\ specials permit specifying the line and fill %D color as well as the linetype, which can be solid, dashed or %D dotted. We'll save those specifications as a \METAPOST\ %D string, using: \let\TPIClinetype =\empty \let\TPICgrayscale=\empty %D The magic reduction factor $.07227$ is needed to map the %D \TPIC\ $1/1000$ of an inch to \POSTSCRIPT\ points. We cannot %D delegate this task to \METAPOST\ because this program does %D not accept values greater than 4095. %D I won't discuss all the specifics used in implementing %D the specials. The \METAPOST\ part is rather trivial. Many %D specials have much in common, so the amout of code is not %D that large. \redefinespecial pa \using#1 #2\endspecial {\startTPICspecials \bgroup \global\advance\TPICcounter 1 \dimen0=#1pt \dimen0=.07227\dimen0 \dimen2=#2pt \dimen2=.07227\dimen2 \startMPdrawing p[\the\TPICcounter]:=(\the\dimen0,\the\dimen2); \stopMPdrawing \egroup} \redefinespecial pn \using#1\endspecial {\startTPICspecials \bgroup \dimen0=#1pt \dimen0=.07227\dimen0 \startMPdrawing pickup pencircle scaled \the\dimen0; \stopMPdrawing \egroup} \redefinespecial sh \using#1\endspecial {\startTPICspecials \bgroup \edef\g{#1}% \edef\g{\ifx\g\empty.5\else#1\fi}% \xdef\TPICgrayscale{withcolor (\g,\g,\g)}% \egroup} \redefinespecial wh \using#1\endspecial {\mimmickspecial sh \using0\endspecial} \redefinespecial bk \using#1\endspecial {\mimmickspecial sh \using1\endspecial} \redefinespecial da \using#1\endspecial {\startTPICspecials \bgroup \edef\l{#1}% \ifx\l\empty \gdef\TPIClinetype{dashed evenly}% \else \dimen0=#1in \ifdim\dimen0<\!!zeropoint \dimen0=-\dimen0\fi \edef\f{\the\dimen0 \space}% \dimen0=.5\dimen0 \edef\h{\the\dimen0 \space}% \xdef\TPIClinetype{dashed dashpattern (on \h off \f on \h)}% \fi \egroup \TPICcurvefalse\TPICdrawtrue \drawTPICpath\using#1\endspecial} \redefinespecial dt \using#1\endspecial {\startTPICspecials \bgroup \edef\l{#1}% \xdef\TPIClinetype{dashed withdots \ifx\l\empty\else scaled #1in\fi}% \egroup \TPICcurvefalse\TPICdrawtrue \drawTPICpath\using#1\endspecial} \redefinespecial fp \using#1\endspecial {\startTPICspecials \TPICcurvefalse\TPICdrawtrue \ifdim0#1pt=\!!zeropoint \drawTPICpath\using#1\endspecial \else\ifdim0#1pt<\!!zeropoint \mimmickspecial dt\using#1\endspecial \else \mimmickspecial da\using#1\endspecial \fi\fi} \redefinespecial sp {\startTPICspecials\TPICdrawtrue\TPICcurvetrue\drawTPICpath} \redefinespecial ip {\startTPICspecials\TPICfilltrue\drawTPICpath} \redefinespecial ar {\startTPICspecials\TPICdrawtrue\drawTPICarc} \redefinespecial ia {\startTPICspecials\TPICfilltrue\drawTPICarc} %D These substitutes use two auxiliary macros that take care of %D actually drawing the shape or arc. Here we use the stored %D linetype (solid, dashed, dotted) and color (grayscale). \def\drawTPICpath\using#1\endspecial {\bgroup \ifTPICdraw \def\TPICgrayscale{}% \fi \startMPdrawing \ifTPICfill fill\fi\ifTPICdraw draw\fi\space for i:=1 upto \the\TPICcounter-1: p[i]\ifTPICcurve..\else--\fi endfor p[\the\TPICcounter] \ifTPICfill\ifTPICcurve..\else--\fi cycle \fi \TPIClinetype\space\TPICgrayscale; \stopMPdrawing \resetTPICvariables \egroup} %D I have to admit that at the moment I wrote this macro, I %D could not write this piece of \METAPOST. Fortunately %D Thortsen Ohl promptly answered the question I posted to the %D \METAFONT\ discussion list. \def\drawTPICarc\using#1 #2 #3 #4 #5 #6\endspecial {\bgroup \ifTPICdraw \def\TPICgrayscale{}% \fi \dimen 0=#1pt\dimen 0=.07227\dimen 0 \dimen 2=#2pt\dimen 2=.07227\dimen 2 \dimen10=#3pt\dimen10=.14454\dimen10 \dimen12=#4pt\dimen12=.14454\dimen12 \dimen20=#5pt \dimen22=#6pt \startMPdrawing \ifTPICfill fill\fi\ifTPICdraw draw\fi \space \ifTPICfill\else subpath 4/3.14159*(\the\dimen20,\the\dimen22) of \fi fullcircle xscaled \the\dimen10 \space yscaled \the\dimen12 \space shifted (\the\dimen0,\the\dimen2) \TPIClinetype \space \TPICgrayscale; \stopMPdrawing \resetTPICvariables \egroup} %D Resetting the variables need to be done globally because we %D cannot be sure if any further grouping is used by the %D envelopping macros. \def\resetTPICvariables {\global\TPICcounter\zerocount \global\TPICfillfalse \global\TPICdrawfalse \global\let\TPIClinetype\empty \global\let\TPICgrayscale\empty} %D I have to admit that by using the \METAPOST\ B‚zier cubics %D routines these implementation does produce better curves %D then most \DVI\ drivers do using the \TPIC\ prescribed %D b-splines. Take for instance the sequence: %D %D \starttyping %D \special{pa 2000 1000} %D \special{pa 1000 2000} %D \special{pa 0000 1000} %D \special{pa 1000 0000} %D \special{pa 2000 1000} %D \special{sp} %D \stoptyping %D %D One would expect that this code produced a closed circle, %D but the curve that comes out using b-splines is far from %D round. We can however savely asume that the arc producing %D specials will be used for drawing circle fragments, while %D the path specials will be used for arbitraty curves. And for %D b-splines to produce nice curves, one will often use many %D points to get the desired results. Therefore, using the %D \METAPOST\ B‚zier curves will certainly produce similar and %D even better graphics, except in those rare cases where one %D uses delinberately the not that accurate features of %D b-splines. Hereby the user is warned. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-ana.mkii0000644000175000017500000000143411754241457024236 0ustar norbertnorbert%D \module %D [ file=lang-ana, %D version=1997.09.03, %D title=\CONTEXT\ Language Macros, %D subtitle=Anatolian Languages, %D author=Hans Hagen / Tobias Burnus, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Language Macros / Anatolian Languages} %D The framework of this module is set up by Hans Hagen while %D many of the first translations were done by Tobias. Later %D on, corrections were made by users. If you have suggestions, %D or feel that your name missing here, don't hesitate to send %D us an email. \unprotect \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-run.mkii0000644000175000017500000001116111754241457024316 0ustar norbertnorbert%D \module %D [ file=unic-run, %D version=2005.06.22, %D title=\CONTEXT\ \UNICODE\ Support, %D subtitle=Goodies, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \macros %D {showunicodevector} %D %D Original version by Nikolai Weibull. Adapted a bit (no local count %D definitions, stepwiserecurse instead of -1 calculations, a bit less %D code and such). BTW, this is kind of tricky and somehow we don't %D have align interference. \gdef\doshowunicodevectorrow#1#2% {\NC \ttx\uchexnumber{#2}% \VL \dostepwiserecurse{0}{15}{1}{\unicodechar{\numexpr#1*256+#2+\recurselevel*16\relax}\VL}% \AR} \gdef\showunicodevector[#1]% {\starttable[|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|] \NC\NC\dostepwiserecurse{0}{15}{1}{\ttx\uchexnumber\recurselevel\NC}\AR \DC\DL[16]\DR \dostepwiserecurse{0}{15}{1} {\expanded{\doshowunicodevectorrow{#1}{\recurselevel}}% \DC\DL[16]\DR} \NC \use{17}{\hfill \ttx unicode table hex:\uchexnumbers{#1} dec:\threedigits{#1}\kern-.25em}\NC \AR \stoptable} %D \starttyping %D \utfunicodetracer=0 %D \utfunicodetracer=7 %D %D \showunicodevector[000] %D \showunicodevector[001] %D \showunicodevector[002] %D \showunicodevector[003] %D \showunicodevector[004] %D \showunicodevector[005] %D \showunicodevector[030] %D \showunicodevector[031] %D \showunicodevector[032] %D \showunicodevector[033] %D \showunicodevector[034] %D \stoptyping %D \macros %D {showunicodetable} %D %D A more verbose variant: \gdef\doshowunicodetablerow#1#2% {\bTR \bTD\uchexnumber{#2}\eTD \dostepwiserecurse{0}{15}{1} {\bTD \edef\entrypoint{\the\numexpr#1*256+#2+##1*16\relax}% \utfunicodetracer\zerocount{\dontleavehmode \strut\unicodechar\entrypoint\endgraf}% \tt \utfunicodetracer\plusseven{\dontleavehmode\txx\strut\unicodechar\entrypoint\endgraf}% \utfunicodetracer\plusthree{\dontleavehmode\txx\strut\unicodechar\entrypoint\endgraf}% \utfunicodetracer\pluseight{\dontleavehmode\txx\strut\unicodechar\entrypoint\endgraf}% \eTD}% \bTD\uchexnumber{#2}\eTD \eTR} \gdef\showunicodetable[#1]% {\vbox\bgroup \setupcolors[\c!state=\v!start]% \setupTABLE[\c!background=\v!screen,\c!backgroundscreen=.90,\c!frame=\v!off,\c!frameoffset=0pt,\c!width=8em,\c!height=6em]% \setupTABLE[c] [\v!each] [\c!align={middle,lohi}]% \setupTABLE[c] [\v!first][\c!background=\v!screen,\c!backgroundscreen=.85,\c!style=\tt\tfa]% \setupTABLE[c] [\v!last] [\c!background=\v!screen,\c!backgroundscreen=.85,\c!style=\tt\tfa]% \setupTABLE[r] [\v!first][\c!background=\v!screen,\c!backgroundscreen=.85,\c!style=\tt\tfa]% \setupTABLE[r] [\v!last] [\c!background=\v!screen,\c!backgroundscreen=.85,\c!style=\tt\tfa]% \setupTABLE[r] [\v!odd] [\c!background=\v!screen,\c!backgroundscreen=.80]% \setupTABLE[c] [\v!odd] [\c!background=\v!screen,\c!backgroundscreen=.80]% \setupTABLE[\v!odd][\v!odd] [\c!background=\v!screen,\c!backgroundscreen=.90]% \bTABLE \bTR \bTD dec: \numbers{#1}\endgraf hex: \uchexnumbers{#1}\eTD \dostepwiserecurse{0}{15}{1}{\bTD\uchexnumber{##1}\eTD}% \bTD dec: \numbers{#1}\endgraf hex: \uchexnumbers{#1}\eTD \eTR \dostepwiserecurse{0}{15}{1}{\doshowunicodetablerow{#1}{##1}}% \bTR \bTD dec: \numbers{#1}\endgraf hex: \uchexnumbers{#1}\eTD \dostepwiserecurse{0}{15}{1}{\bTD\uchexnumber{##1}\eTD}% \bTD dec: \numbers{#1}\endgraf hex: \uchexnumbers{#1}\eTD \eTR \eTABLE \egroup} \protect \endinput % alternative % % \gdef\doshowunicodevectorrowa#1#2#3#4% % {\NC % \ttx\uchexnumber{#2}% % \VL % \dostepwiserecurse{#3}{#4}{1}{\unicodechar{\numexpr#1*256+#2+\recurselevel*16\relax}\VL}% % \AR} % % \gdef\doshowunicodevectorrowb#1#2#3#4% % {\NC % \relax % \VL % \dostepwiserecurse{#3}{#4}{1}{\unicodechar{\numexpr#1*256+#2+\recurselevel*16\relax}\VL}% % \AR} % % \gdef\showunicodevector#1% % {\starttable[|c|c|c|c|c|c|c|c|c|] % \NC\NC\dostepwiserecurse{0}{7}{1}{\ttx\uchexnumber\recurselevel/\uchexnumber{\the\numexpr2*\recurselevel\relax}\NC}\AR\DC\DL[8]\DR % \dostepwiserecurse{0}{15}{1} % {\expanded{\doshowunicodevectorrowa{#1}{\recurselevel}{0} {7}}\DC\DL[8]\DR% % \expanded{\doshowunicodevectorrowb{#1}{\recurselevel}{8}{15}}\DC\DL[8]\DR}% % \NC \use{9}{\hfill \ttx unicode table hex:\uchexnumbers{#1} dec:\threedigits{#1}\kern-.25em}\NC \AR % \stoptable} context-2013.05.28.20130704/texmf-dist/tex/context/base/x-udhr.mkiv0000644000175000017500000000343512130411274023770 0ustar norbertnorbert%D \module %D [ file=x-udhr, %D version=2011.06.11, %D title=\CONTEXT\ Modules, %D subtitle=Unicode Language Test Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The XML files can be fetched from: \from[http://unicode.org/udhr/]. \startmodule[udhr] \startxmlsetups udhr:basics \xmlsetsetup {#1} {*} {udhr:*} \stopxmlsetups \xmlregistersetup{udhr:basics} \startxmlsetups udhr:udhr \mainlanguage[\xmlatt{#1}{language}] \starttitle[title=\xmltext{#1}{/title}] \xmlfirst{#1}{/preamble} \xmlall{#1}{/article} \stoptitle \stopxmlsetups \startxmlsetups udhr:preamble \startsubject[title=\xmltext{#1}{/title}] \xmlall{#1}{/*)} \stopsubject \stopxmlsetups \startxmlsetups udhr:article \startsubject[title=\xmltext{#1}{/title}] \xmlall{#1}{/*)} \stopsubject \stopxmlsetups \startxmlsetups udhr:orderedlist \startitemize[n] \xmlflush{#1} \stopitemize \stopxmlsetups \startxmlsetups udhr:listitem \startitem \xmlflush{#1} \stopitem \stopxmlsetups \startxmlsetups udhr:para \xmlflush{#1} \par \stopxmlsetups \setupbodyfont [dejavu,10pt] \setuplayout [width-=middle, height=middle, footer=0cm, header=1.5cm] \setupwhitespace [big] \setuphead [chapter] [header=high, style=\bfb, align=middle] \setuphead [section] [style=\bfa, align=middle] \setuptolerance [verytolerant] \continueifinputfile{x-udhr.mkiv} % todo: when argument given then process it \starttext \xmlprocessfile{main}{udhr_nld.xml}{} \stoptext \stopmodule context-2013.05.28.20130704/texmf-dist/tex/context/base/unic-002.mkii0000644000175000017500000000543611754241457024023 0ustar norbertnorbert%D \module %D [ file=unic-002, %D version=2006.08.02, %D title=\CONTEXT\ \UNICODE\ Macros, %D subtitle=Vector 2, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 \startunicodevector 2 \expandafter\strippedcsname \ifcase\numexpr#1\relax \Adoublegrave \or \adoublegrave \or \Ainvertedbreve \or \ainvertedbreve \or \Edoublegrave \or \edoublegrave \or \Einvertedbreve \or \einvertedbreve \or \Idoublegrave \or \idoublegrave \or \Iinvertedbreve \or \iinvertedbreve \or \Odoublegrave \or \odoublegrave \or \Oinvertedbreve \or \oinvertedbreve \or \Rdoublegrave \or \rdoublegrave \or \Rinvertedbreve \or \rinvertedbreve \or \Udoublegrave \or \udoublegrave \or \Uinvertedbreve \or \uinvertedbreve \or \Scommaaccent \or \scommaaccent \or \Tcommaaccent \or \tcommaaccent \or \unknownchar \or % Yogh \unknownchar \or % yogh \Hcaron \or \hcaron \or \unknownchar \or % n with long right leg \dcurl \or \unknownchar \or % Ou \unknownchar \or % ou \Zhook \or \zhook \or \Adotaccent \or \adotaccent \or \Ecedilla \or \ecedilla \or \Odiaeresismacron \or \odiaeresismacron \or \Otildemacron \or \otildemacron \or \Odotaccent \or \odotaccent \or \Odotaccentmacron \or \odotaccentmacron \or \Ymacron \or \ymacron \or \lcurl \or \ncurl \or \tcurl \or \dotlessj \or \unknownchar \or % db digraph \unknownchar \or % qp digraph \Astroke \or \Cstroke \or \cstroke \or \Lbar \else \ifcase\numexpr#1-83\relax \bhook \or \unknownchar \or % open o \ccurl \or \dtail \or \dhook \or \unknownchar \or % reversed e \schwa \or \schwahook \else \ifcase\numexpr#1-198\relax \textcircumflex \or \textcaron \else \ifcase\numexpr#1-216\relax \textbreve \or \textdotaccent \or \textring \or \textogonek \or \texttilde \or \texthungarumlaut \else \unknownchar \fi\fi\fi\fi \stopunicodevector \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lxml-lpt.lua0000644000175000017500000013747412130411274024160 0ustar norbertnorbertif not modules then modules = { } end modules ['lxml-lpt'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- e.ni is only valid after a filter run -- todo: B/C/[get first match] local concat, remove, insert = table.concat, table.remove, table.insert local type, next, tonumber, tostring, setmetatable, load, select = type, next, tonumber, tostring, setmetatable, load, select local format, upper, lower, gmatch, gsub, find, rep = string.format, string.upper, string.lower, string.gmatch, string.gsub, string.find, string.rep local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local setmetatableindex = table.setmetatableindex local formatters = string.formatters -- no need (yet) as paths are cached anyway -- beware, this is not xpath ... e.g. position is different (currently) and -- we have reverse-sibling as reversed preceding sibling --[[ldx--

This module can be used stand alone but also inside in which case it hooks into the tracker code. Therefore we provide a few functions that set the tracers. Here we overload a previously defined function.

If I can get in the mood I will make a variant that is XSLT compliant but I wonder if it makes sense.

--ldx]]-- --[[ldx--

Expecially the lpath code is experimental, we will support some of xpath, but only things that make sense for us; as compensation it is possible to hook in your own functions. Apart from preprocessing content for we also need this module for process management, like handling and files.

a/b/c /*/c a/b/c/first() a/b/c/last() a/b/c/index(n) a/b/c/index(-n) a/b/c/text() a/b/c/text(1) a/b/c/text(-1) a/b/c/text(n) --ldx]]-- local trace_lpath = false if trackers then trackers.register("xml.path", function(v) trace_lpath = v end) end local trace_lparse = false if trackers then trackers.register("xml.parse", function(v) trace_lparse = v end) end local trace_lprofile = false if trackers then trackers.register("xml.profile", function(v) trace_lpath = v trace_lparse = v trace_lprofile = v end) end local report_lpath = logs.reporter("xml","lpath") --[[ldx--

We've now arrived at an interesting part: accessing the tree using a subset of and since we're not compatible we call it . We will explain more about its usage in other documents.

--ldx]]-- local xml = xml local lpathcalls = 0 function xml.lpathcalls () return lpathcalls end local lpathcached = 0 function xml.lpathcached() return lpathcached end xml.functions = xml.functions or { } -- internal local functions = xml.functions xml.expressions = xml.expressions or { } -- in expressions local expressions = xml.expressions xml.finalizers = xml.finalizers or { } -- fast do-with ... (with return value other than collection) local finalizers = xml.finalizers xml.specialhandler = xml.specialhandler or { } local specialhandler = xml.specialhandler lpegpatterns.xml = lpegpatterns.xml or { } local xmlpatterns = lpegpatterns.xml finalizers.xml = finalizers.xml or { } finalizers.tex = finalizers.tex or { } local function fallback (t, name) local fn = finalizers[name] if fn then t[name] = fn else report_lpath("unknown sub finalizer %a",name) fn = function() end end return fn end setmetatableindex(finalizers.xml, fallback) setmetatableindex(finalizers.tex, fallback) xml.defaultprotocol = "xml" -- as xsl does not follow xpath completely here we will also -- be more liberal especially with regards to the use of | and -- the rootpath: -- -- test : all 'test' under current -- /test : 'test' relative to current -- a|b|c : set of names -- (a|b|c) : idem -- ! : not -- -- after all, we're not doing transformations but filtering. in -- addition we provide filter functions (last bit) -- -- todo: optimizer -- -- .. : parent -- * : all kids -- / : anchor here -- // : /**/ -- ** : all in between -- -- so far we had (more practical as we don't transform) -- -- {/test} : kids 'test' under current node -- {test} : any kid with tag 'test' -- {//test} : same as above -- evaluator (needs to be redone, for the moment copied) -- todo: apply_axis(list,notable) and collection vs single local apply_axis = { } apply_axis['root'] = function(list) local collected = { } for l=1,#list do local ll = list[l] local rt = ll while ll do ll = ll.__p__ if ll then rt = ll end end collected[l] = rt end return collected end apply_axis['self'] = function(list) --~ local collected = { } --~ for l=1,#list do --~ collected[l] = list[l] --~ end --~ return collected return list end apply_axis['child'] = function(list) local collected, c = { }, 0 for l=1,#list do local ll = list[l] local dt = ll.dt if dt then -- weird that this is needed local en = 0 for k=1,#dt do local dk = dt[k] if dk.tg then c = c + 1 collected[c] = dk dk.ni = k -- refresh en = en + 1 dk.ei = en end end ll.en = en end end return collected end local function collect(list,collected,c) local dt = list.dt if dt then local en = 0 for k=1,#dt do local dk = dt[k] if dk.tg then c = c + 1 collected[c] = dk dk.ni = k -- refresh en = en + 1 dk.ei = en c = collect(dk,collected,c) end end list.en = en end return c end apply_axis['descendant'] = function(list) local collected, c = { }, 0 for l=1,#list do c = collect(list[l],collected,c) end return collected end local function collect(list,collected,c) local dt = list.dt if dt then local en = 0 for k=1,#dt do local dk = dt[k] if dk.tg then c = c + 1 collected[c] = dk dk.ni = k -- refresh en = en + 1 dk.ei = en c = collect(dk,collected,c) end end list.en = en end return c end apply_axis['descendant-or-self'] = function(list) local collected, c = { }, 0 for l=1,#list do local ll = list[l] if ll.special ~= true then -- catch double root c = c + 1 collected[c] = ll end c = collect(ll,collected,c) end return collected end apply_axis['ancestor'] = function(list) local collected, c = { }, 0 for l=1,#list do local ll = list[l] while ll do ll = ll.__p__ if ll then c = c + 1 collected[c] = ll end end end return collected end apply_axis['ancestor-or-self'] = function(list) local collected, c = { }, 0 for l=1,#list do local ll = list[l] c = c + 1 collected[c] = ll while ll do ll = ll.__p__ if ll then c = c + 1 collected[c] = ll end end end return collected end apply_axis['parent'] = function(list) local collected, c = { }, 0 for l=1,#list do local pl = list[l].__p__ if pl then c = c + 1 collected[c] = pl end end return collected end apply_axis['attribute'] = function(list) return { } end apply_axis['namespace'] = function(list) return { } end apply_axis['following'] = function(list) -- incomplete --~ local collected, c = { }, 0 --~ for l=1,#list do --~ local ll = list[l] --~ local p = ll.__p__ --~ local d = p.dt --~ for i=ll.ni+1,#d do --~ local di = d[i] --~ if type(di) == "table" then --~ c = c + 1 --~ collected[c] = di --~ break --~ end --~ end --~ end --~ return collected return { } end apply_axis['preceding'] = function(list) -- incomplete --~ local collected, c = { }, 0 --~ for l=1,#list do --~ local ll = list[l] --~ local p = ll.__p__ --~ local d = p.dt --~ for i=ll.ni-1,1,-1 do --~ local di = d[i] --~ if type(di) == "table" then --~ c = c + 1 --~ collected[c] = di --~ break --~ end --~ end --~ end --~ return collected return { } end apply_axis['following-sibling'] = function(list) local collected, c = { }, 0 for l=1,#list do local ll = list[l] local p = ll.__p__ local d = p.dt for i=ll.ni+1,#d do local di = d[i] if type(di) == "table" then c = c + 1 collected[c] = di end end end return collected end apply_axis['preceding-sibling'] = function(list) local collected, c = { }, 0 for l=1,#list do local ll = list[l] local p = ll.__p__ local d = p.dt for i=1,ll.ni-1 do local di = d[i] if type(di) == "table" then c = c + 1 collected[c] = di end end end return collected end apply_axis['reverse-sibling'] = function(list) -- reverse preceding local collected, c = { }, 0 for l=1,#list do local ll = list[l] local p = ll.__p__ local d = p.dt for i=ll.ni-1,1,-1 do local di = d[i] if type(di) == "table" then c = c + 1 collected[c] = di end end end return collected end apply_axis['auto-descendant-or-self'] = apply_axis['descendant-or-self'] apply_axis['auto-descendant'] = apply_axis['descendant'] apply_axis['auto-child'] = apply_axis['child'] apply_axis['auto-self'] = apply_axis['self'] apply_axis['initial-child'] = apply_axis['child'] local function apply_nodes(list,directive,nodes) -- todo: nodes[1] etc ... negated node name in set ... when needed -- ... currently ignored local maxn = #nodes if maxn == 3 then --optimized loop local nns, ntg = nodes[2], nodes[3] if not nns and not ntg then -- wildcard if directive then return list else return { } end else local collected, c, m, p = { }, 0, 0, nil if not nns then -- only check tag for l=1,#list do local ll = list[l] local ltg = ll.tg if ltg then if directive then if ntg == ltg then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end elseif ntg ~= ltg then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end end end elseif not ntg then -- only check namespace for l=1,#list do local ll = list[l] local lns = ll.rn or ll.ns if lns then if directive then if lns == nns then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end elseif lns ~= nns then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end end end else -- check both for l=1,#list do local ll = list[l] local ltg = ll.tg if ltg then local lns = ll.rn or ll.ns local ok = ltg == ntg and lns == nns if directive then if ok then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end elseif not ok then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end end end end return collected end else local collected, c, m, p = { }, 0, 0, nil for l=1,#list do local ll = list[l] local ltg = ll.tg if ltg then local lns = ll.rn or ll.ns local ok = false for n=1,maxn,3 do local nns, ntg = nodes[n+1], nodes[n+2] ok = (not ntg or ltg == ntg) and (not nns or lns == nns) if ok then break end end if directive then if ok then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end elseif not ok then local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end c = c + 1 collected[c], ll.mi = ll, m end end end return collected end end local quit_expression = false local function apply_expression(list,expression,order) local collected, c = { }, 0 quit_expression = false for l=1,#list do local ll = list[l] if expression(list,ll,l,order) then -- nasty, order alleen valid als n=1 c = c + 1 collected[c] = ll end if quit_expression then break end end return collected end local P, V, C, Cs, Cc, Ct, R, S, Cg, Cb = lpeg.P, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.R, lpeg.S, lpeg.Cg, lpeg.Cb local spaces = S(" \n\r\t\f")^0 local lp_space = S(" \n\r\t\f") local lp_any = P(1) local lp_noequal = P("!=") / "~=" + P("<=") + P(">=") + P("==") local lp_doequal = P("=") / "==" local lp_or = P("|") / " or " local lp_and = P("&") / " and " local lp_builtin = P ( P("text") / "(ll.dt[1] or '')" + -- fragile P("content") / "ll.dt" + -- P("name") / "(ll.ns~='' and ll.ns..':'..ll.tg)" + P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" + P("tag") / "ll.tg" + P("position") / "l" + -- is element in finalizer P("firstindex") / "1" + P("lastindex") / "(#ll.__p__.dt or 1)" + P("firstelement") / "1" + P("lastelement") / "(ll.__p__.en or 1)" + P("first") / "1" + P("last") / "#list" + P("rootposition") / "order" + P("order") / "order" + P("element") / "(ll.ei or 1)" + P("index") / "(ll.ni or 1)" + P("match") / "(ll.mi or 1)" + -- P("namespace") / "ll.ns" + P("ns") / "ll.ns" ) * ((spaces * P("(") * spaces * P(")"))/"") -- for the moment we keep namespaces with attributes local lp_attribute = (P("@") + P("attribute::")) / "" * Cc("(ll.at and ll.at['") * ((R("az","AZ") + S("-_:"))^1) * Cc("'])") -- lp_fastpos_p = (P("+")^0 * R("09")^1 * P(-1)) / function(s) return "l==" .. s end -- lp_fastpos_n = (P("-") * R("09")^1 * P(-1)) / function(s) return "(" .. s .. "<0 and (#list+".. s .. "==l))" end lp_fastpos_p = P("+")^0 * R("09")^1 * P(-1) / "l==%0" lp_fastpos_n = P("-") * R("09")^1 * P(-1) / "(%0<0 and (#list+%0==l))" local lp_fastpos = lp_fastpos_n + lp_fastpos_p local lp_reserved = C("and") + C("or") + C("not") + C("div") + C("mod") + C("true") + C("false") -- local lp_lua_function = C(R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(") / function(t) -- todo: better . handling -- return t .. "(" -- end -- local lp_lua_function = (R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(") / "%0(" local lp_lua_function = Cs((R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(")) / "%0" local lp_function = C(R("az","AZ","__")^1) * P("(") / function(t) -- todo: better . handling if expressions[t] then return "expr." .. t .. "(" else return "expr.error(" end end local lparent = P("(") local rparent = P(")") local noparent = 1 - (lparent+rparent) local nested = P{lparent * (noparent + V(1))^0 * rparent} local value = P(lparent * C((noparent + nested)^0) * rparent) -- P{"("*C(((1-S("()"))+V(1))^0)*")"} local lp_child = Cc("expr.child(ll,'") * R("az","AZ","--","__")^1 * Cc("')") local lp_number = S("+-") * R("09")^1 local lp_string = Cc("'") * R("az","AZ","--","__")^1 * Cc("'") local lp_content = (P("'") * (1-P("'"))^0 * P("'") + P('"') * (1-P('"'))^0 * P('"')) local cleaner local lp_special = (C(P("name")+P("text")+P("tag")+P("count")+P("child"))) * value / function(t,s) if expressions[t] then s = s and s ~= "" and lpegmatch(cleaner,s) if s and s ~= "" then return "expr." .. t .. "(ll," .. s ..")" else return "expr." .. t .. "(ll)" end else return "expr.error(" .. t .. ")" end end local content = lp_builtin + lp_attribute + lp_special + lp_noequal + lp_doequal + lp_or + lp_and + lp_reserved + lp_lua_function + lp_function + lp_content + -- too fragile lp_child + lp_any local converter = Cs ( lp_fastpos + (P { lparent * (V(1))^0 * rparent + content } )^0 ) cleaner = Cs ( ( -- lp_fastpos + lp_reserved + lp_number + lp_string + 1 )^1 ) local template_e = [[ local expr = xml.expressions return function(list,ll,l,order) return %s end ]] local template_f_y = [[ local finalizer = xml.finalizers['%s']['%s'] return function(collection) return finalizer(collection,%s) end ]] local template_f_n = [[ return xml.finalizers['%s']['%s'] ]] -- local register_self = { kind = "axis", axis = "self" } -- , apply = apply_axis["self"] } local register_parent = { kind = "axis", axis = "parent" } -- , apply = apply_axis["parent"] } local register_descendant = { kind = "axis", axis = "descendant" } -- , apply = apply_axis["descendant"] } local register_child = { kind = "axis", axis = "child" } -- , apply = apply_axis["child"] } local register_descendant_or_self = { kind = "axis", axis = "descendant-or-self" } -- , apply = apply_axis["descendant-or-self"] } local register_root = { kind = "axis", axis = "root" } -- , apply = apply_axis["root"] } local register_ancestor = { kind = "axis", axis = "ancestor" } -- , apply = apply_axis["ancestor"] } local register_ancestor_or_self = { kind = "axis", axis = "ancestor-or-self" } -- , apply = apply_axis["ancestor-or-self"] } local register_attribute = { kind = "axis", axis = "attribute" } -- , apply = apply_axis["attribute"] } local register_namespace = { kind = "axis", axis = "namespace" } -- , apply = apply_axis["namespace"] } local register_following = { kind = "axis", axis = "following" } -- , apply = apply_axis["following"] } local register_following_sibling = { kind = "axis", axis = "following-sibling" } -- , apply = apply_axis["following-sibling"] } local register_preceding = { kind = "axis", axis = "preceding" } -- , apply = apply_axis["preceding"] } local register_preceding_sibling = { kind = "axis", axis = "preceding-sibling" } -- , apply = apply_axis["preceding-sibling"] } local register_reverse_sibling = { kind = "axis", axis = "reverse-sibling" } -- , apply = apply_axis["reverse-sibling"] } local register_auto_descendant_or_self = { kind = "axis", axis = "auto-descendant-or-self" } -- , apply = apply_axis["auto-descendant-or-self"] } local register_auto_descendant = { kind = "axis", axis = "auto-descendant" } -- , apply = apply_axis["auto-descendant"] } local register_auto_self = { kind = "axis", axis = "auto-self" } -- , apply = apply_axis["auto-self"] } local register_auto_child = { kind = "axis", axis = "auto-child" } -- , apply = apply_axis["auto-child"] } local register_initial_child = { kind = "axis", axis = "initial-child" } -- , apply = apply_axis["initial-child"] } local register_all_nodes = { kind = "nodes", nodetest = true, nodes = { true, false, false } } local skip = { } local function errorrunner_e(str,cnv) if not skip[str] then report_lpath("error in expression: %s => %s",str,cnv) skip[str] = cnv or str end return false end local function errorrunner_f(str,arg) report_lpath("error in finalizer: %s(%s)",str,arg or "") return false end local function register_nodes(nodetest,nodes) return { kind = "nodes", nodetest = nodetest, nodes = nodes } end local function register_expression(expression) local converted = lpegmatch(converter,expression) local runner = load(format(template_e,converted)) runner = (runner and runner()) or function() errorrunner_e(expression,converted) end return { kind = "expression", expression = expression, converted = converted, evaluator = runner } end local function register_finalizer(protocol,name,arguments) local runner if arguments and arguments ~= "" then runner = load(format(template_f_y,protocol or xml.defaultprotocol,name,arguments)) else runner = load(format(template_f_n,protocol or xml.defaultprotocol,name)) end runner = (runner and runner()) or function() errorrunner_f(name,arguments) end return { kind = "finalizer", name = name, arguments = arguments, finalizer = runner } end local expression = P { "ex", ex = "[" * C((V("sq") + V("dq") + (1 - S("[]")) + V("ex"))^0) * "]", sq = "'" * (1 - S("'"))^0 * "'", dq = '"' * (1 - S('"'))^0 * '"', } local arguments = P { "ar", ar = "(" * Cs((V("sq") + V("dq") + V("nq") + P(1-P(")")))^0) * ")", nq = ((1 - S("),'\""))^1) / function(s) return format("%q",s) end, sq = P("'") * (1 - P("'"))^0 * P("'"), dq = P('"') * (1 - P('"'))^0 * P('"'), } -- todo: better arg parser local function register_error(str) return { kind = "error", error = format("unparsed: %s",str) } end -- there is a difference in * and /*/ and so we need to catch a few special cases local special_1 = P("*") * Cc(register_auto_descendant) * Cc(register_all_nodes) -- last one not needed local special_2 = P("/") * Cc(register_auto_self) local special_3 = P("") * Cc(register_auto_self) local no_nextcolon = P(-1) + #(1-P(":")) -- newer lpeg needs the P(-1) local no_nextlparent = P(-1) + #(1-P("(")) -- newer lpeg needs the P(-1) local pathparser = Ct { "patterns", -- can be made a bit faster by moving some patterns outside patterns = spaces * V("protocol") * spaces * ( ( V("special") * spaces * P(-1) ) + ( V("initial") * spaces * V("step") * spaces * (P("/") * spaces * V("step") * spaces)^0 ) ), protocol = Cg(V("letters"),"protocol") * P("://") + Cg(Cc(nil),"protocol"), -- the / is needed for // as descendant or self is somewhat special -- step = (V("shortcuts") + V("axis") * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0, step = ((V("shortcuts") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0, axis = V("descendant") + V("child") + V("parent") + V("self") + V("root") + V("ancestor") + V("descendant_or_self") + V("following_sibling") + V("following") + V("reverse_sibling") + V("preceding_sibling") + V("preceding") + V("ancestor_or_self") + #(1-P(-1)) * Cc(register_auto_child), special = special_1 + special_2 + special_3, initial = (P("/") * spaces * Cc(register_initial_child))^-1, error = (P(1)^1) / register_error, shortcuts_a = V("s_descendant_or_self") + V("s_descendant") + V("s_child") + V("s_parent") + V("s_self") + V("s_root") + V("s_ancestor"), shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0, s_descendant_or_self = (P("***/") + P("/")) * Cc(register_descendant_or_self), --- *** is a bonus s_descendant = P("**") * Cc(register_descendant), s_child = P("*") * no_nextcolon * Cc(register_child ), s_parent = P("..") * Cc(register_parent ), s_self = P("." ) * Cc(register_self ), s_root = P("^^") * Cc(register_root ), s_ancestor = P("^") * Cc(register_ancestor ), descendant = P("descendant::") * Cc(register_descendant ), child = P("child::") * Cc(register_child ), parent = P("parent::") * Cc(register_parent ), self = P("self::") * Cc(register_self ), root = P('root::') * Cc(register_root ), ancestor = P('ancestor::') * Cc(register_ancestor ), descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self ), ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self ), -- attribute = P('attribute::') * Cc(register_attribute ), -- namespace = P('namespace::') * Cc(register_namespace ), following = P('following::') * Cc(register_following ), following_sibling = P('following-sibling::') * Cc(register_following_sibling ), preceding = P('preceding::') * Cc(register_preceding ), preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ), reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ), nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes, expressions = expression / register_expression, letters = R("az")^1, name = (1-S("/[]()|:*!"))^1, -- make inline negate = P("!") * Cc(false), nodefunction = V("negate") + P("not") * Cc(false) + Cc(true), nodetest = V("negate") + Cc(true), nodename = (V("negate") + Cc(true)) * spaces * ((V("wildnodename") * P(":") * V("wildnodename")) + (Cc(false) * V("wildnodename"))), wildnodename = (C(V("name")) + P("*") * Cc(false)) * no_nextlparent, nodeset = spaces * Ct(V("nodename") * (spaces * P("|") * spaces * V("nodename"))^0) * spaces, finalizer = (Cb("protocol") * P("/")^-1 * C(V("name")) * arguments * P(-1)) / register_finalizer, } xmlpatterns.pathparser = pathparser local cache = { } local function nodesettostring(set,nodetest) local t = { } for i=1,#set,3 do local directive, ns, tg = set[i], set[i+1], set[i+2] if not ns or ns == "" then ns = "*" end if not tg or tg == "" then tg = "*" end tg = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg) t[i] = (directive and tg) or format("not(%s)",tg) end if nodetest == false then return format("not(%s)",concat(t,"|")) else return concat(t,"|") end end local function tagstostring(list) if #list == 0 then return "no elements" else local t = { } for i=1, #list do local li = list[i] local ns, tg = li.ns, li.tg if not ns or ns == "" then ns = "*" end if not tg or tg == "" then tg = "*" end t[i] = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg) end return concat(t," ") end end xml.nodesettostring = nodesettostring local lpath -- we have a harmless kind of circular reference local lshowoptions = { functions = false } local function lshow(parsed) if type(parsed) == "string" then parsed = lpath(parsed) end report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern, table.serialize(parsed,false,lshowoptions)) end xml.lshow = lshow local function add_comment(p,str) local pc = p.comment if not pc then p.comment = { str } else pc[#pc+1] = str end end lpath = function (pattern) -- the gain of caching is rather minimal lpathcalls = lpathcalls + 1 if type(pattern) == "table" then return pattern else local parsed = cache[pattern] if parsed then lpathcached = lpathcached + 1 else parsed = lpegmatch(pathparser,pattern) if parsed then parsed.pattern = pattern local np = #parsed if np == 0 then parsed = { pattern = pattern, register_self, state = "parsing error" } report_lpath("parsing error in pattern: %s",pattern) lshow(parsed) else -- we could have done this with a more complex parser but this -- is cleaner local pi = parsed[1] if pi.axis == "auto-child" then if false then add_comment(parsed, "auto-child replaced by auto-descendant-or-self") parsed[1] = register_auto_descendant_or_self else add_comment(parsed, "auto-child replaced by auto-descendant") parsed[1] = register_auto_descendant end elseif pi.axis == "initial-child" and np > 1 and parsed[2].axis then add_comment(parsed, "initial-child removed") -- we could also make it a auto-self remove(parsed,1) end local np = #parsed -- can have changed if np > 1 then local pnp = parsed[np] if pnp.kind == "nodes" and pnp.nodetest == true then local nodes = pnp.nodes if nodes[1] == true and nodes[2] == false and nodes[3] == false then add_comment(parsed, "redundant final wildcard filter removed") remove(parsed,np) end end end end else parsed = { pattern = pattern } end cache[pattern] = parsed if trace_lparse and not trace_lprofile then lshow(parsed) end end return parsed end end xml.lpath = lpath -- we can move all calls inline and then merge the trace back -- technically we can combine axis and the next nodes which is -- what we did before but this a bit cleaner (but slower too) -- but interesting is that it's not that much faster when we -- go inline -- -- beware: we need to return a collection even when we filter -- else the (simple) cache gets messed up -- caching found lookups saves not that much (max .1 sec on a 8 sec run) -- and it also messes up finalizers -- watch out: when there is a finalizer, it's always called as there -- can be cases that a finalizer returns (or does) something in case -- there is no match; an example of this is count() local profiled = { } xml.profiled = profiled local function profiled_apply(list,parsed,nofparsed,order) local p = profiled[parsed.pattern] if p then p.tested = p.tested + 1 else p = { tested = 1, matched = 0, finalized = 0 } profiled[parsed.pattern] = p end local collected = list for i=1,nofparsed do local pi = parsed[i] local kind = pi.kind if kind == "axis" then collected = apply_axis[pi.axis](collected) elseif kind == "nodes" then collected = apply_nodes(collected,pi.nodetest,pi.nodes) elseif kind == "expression" then collected = apply_expression(collected,pi.evaluator,order) elseif kind == "finalizer" then collected = pi.finalizer(collected) -- no check on # here p.matched = p.matched + 1 p.finalized = p.finalized + 1 return collected end if not collected or #collected == 0 then local pn = i < nofparsed and parsed[nofparsed] if pn and pn.kind == "finalizer" then collected = pn.finalizer(collected) p.finalized = p.finalized + 1 return collected end return nil end end if collected then p.matched = p.matched + 1 end return collected end local function traced_apply(list,parsed,nofparsed,order) if trace_lparse then lshow(parsed) end report_lpath("collecting: %s",parsed.pattern) report_lpath("root tags : %s",tagstostring(list)) report_lpath("order : %s",order or "unset") local collected = list for i=1,nofparsed do local pi = parsed[i] local kind = pi.kind if kind == "axis" then collected = apply_axis[pi.axis](collected) report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis) elseif kind == "nodes" then collected = apply_nodes(collected,pi.nodetest,pi.nodes) report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest)) elseif kind == "expression" then collected = apply_expression(collected,pi.evaluator,order) report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted) elseif kind == "finalizer" then collected = pi.finalizer(collected) report_lpath("% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "") return collected end if not collected or #collected == 0 then local pn = i < nofparsed and parsed[nofparsed] if pn and pn.kind == "finalizer" then collected = pn.finalizer(collected) report_lpath("% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "") return collected end return nil end end return collected end local function normal_apply(list,parsed,nofparsed,order) local collected = list for i=1,nofparsed do local pi = parsed[i] local kind = pi.kind if kind == "axis" then local axis = pi.axis if axis ~= "self" then collected = apply_axis[axis](collected) end elseif kind == "nodes" then collected = apply_nodes(collected,pi.nodetest,pi.nodes) elseif kind == "expression" then collected = apply_expression(collected,pi.evaluator,order) elseif kind == "finalizer" then return pi.finalizer(collected) end if not collected or #collected == 0 then local pf = i < nofparsed and parsed[nofparsed].finalizer if pf then return pf(collected) -- can be anything end return nil end end return collected end --~ local function applylpath(list,pattern) --~ -- we avoid an extra call --~ local parsed = cache[pattern] --~ if parsed then --~ lpathcalls = lpathcalls + 1 --~ lpathcached = lpathcached + 1 --~ elseif type(pattern) == "table" then --~ lpathcalls = lpathcalls + 1 --~ parsed = pattern --~ else --~ parsed = lpath(pattern) or pattern --~ end --~ if not parsed then --~ return --~ end --~ local nofparsed = #parsed --~ if nofparsed == 0 then --~ return -- something is wrong --~ end --~ local one = list[1] -- we could have a third argument: isroot and list or list[1] or whatever we like ... todo --~ if not one then --~ return -- something is wrong --~ elseif not trace_lpath then --~ return normal_apply(list,parsed,nofparsed,one.mi) --~ elseif trace_lprofile then --~ return profiled_apply(list,parsed,nofparsed,one.mi) --~ else --~ return traced_apply(list,parsed,nofparsed,one.mi) --~ end --~ end local function applylpath(list,pattern) if not list then return end local parsed = cache[pattern] if parsed then lpathcalls = lpathcalls + 1 lpathcached = lpathcached + 1 elseif type(pattern) == "table" then lpathcalls = lpathcalls + 1 parsed = pattern else parsed = lpath(pattern) or pattern end if not parsed then return end local nofparsed = #parsed if nofparsed == 0 then return -- something is wrong end if not trace_lpath then return normal_apply ({ list },parsed,nofparsed,list.mi) elseif trace_lprofile then return profiled_apply({ list },parsed,nofparsed,list.mi) else return traced_apply ({ list },parsed,nofparsed,list.mi) end end xml.applylpath = applylpath -- takes a table as first argment, which is what xml.filter will do --[[ldx--

This is the main filter function. It returns whatever is asked for.

--ldx]]-- function xml.filter(root,pattern) -- no longer funny attribute handling here return applylpath(root,pattern) end -- internal (parsed) expressions.child = function(e,pattern) return applylpath(e,pattern) -- todo: cache end expressions.count = function(e,pattern) -- what if pattern == empty or nil local collected = applylpath(e,pattern) -- todo: cache return pattern and (collected and #collected) or 0 end -- external -- expressions.oneof = function(s,...) -- local t = {...} -- for i=1,#t do -- if s == t[i] then -- return true -- end -- end -- return false -- end expressions.oneof = function(s,...) for i=1,select("#",...) do if s == select(i,...) then return true end end return false end expressions.error = function(str) xml.errorhandler(format("unknown function in lpath expression: %s",tostring(str or "?"))) return false end expressions.undefined = function(s) return s == nil end expressions.quit = function(s) if s or s == nil then quit_expression = true end return true end expressions.print = function(...) print(...) return true end expressions.contains = find expressions.find = find expressions.upper = upper expressions.lower = lower expressions.number = tonumber expressions.boolean = toboolean function expressions.contains(str,pattern) local t = type(str) if t == "string" then if find(str,pattern) then return true end elseif t == "table" then for i=1,#str do local d = str[i] if type(d) == "string" and find(d,pattern) then return true end end end return false end -- user interface local function traverse(root,pattern,handle) -- report_lpath("use 'xml.selection' instead for pattern: %s",pattern) local collected = applylpath(root,pattern) if collected then for c=1,#collected do local e = collected[c] local r = e.__p__ handle(r,r.dt,e.ni) end end end local function selection(root,pattern,handle) local collected = applylpath(root,pattern) if collected then if handle then for c=1,#collected do handle(collected[c]) end else return collected end end end xml.traverse = traverse -- old method, r, d, k xml.selection = selection -- new method, simple handle --~ function xml.cachedpatterns() --~ return cache --~ end -- generic function finalizer (independant namespace) local function dofunction(collected,fnc,...) if collected then local f = functions[fnc] if f then for c=1,#collected do f(collected[c],...) end else report_lpath("unknown function %a",fnc) end end end finalizers.xml["function"] = dofunction finalizers.tex["function"] = dofunction -- functions expressions.text = function(e,n) local rdt = e.__p__.dt return rdt and rdt[n] or "" end expressions.name = function(e,n) -- ns + tg local found = false n = tonumber(n) or 0 if n == 0 then found = type(e) == "table" and e elseif n < 0 then local d, k = e.__p__.dt, e.ni for i=k-1,1,-1 do local di = d[i] if type(di) == "table" then if n == -1 then found = di break else n = n + 1 end end end else local d, k = e.__p__.dt, e.ni for i=k+1,#d,1 do local di = d[i] if type(di) == "table" then if n == 1 then found = di break else n = n - 1 end end end end if found then local ns, tg = found.rn or found.ns or "", found.tg if ns ~= "" then return ns .. ":" .. tg else return tg end else return "" end end expressions.tag = function(e,n) -- only tg if not e then return "" else local found = false n = tonumber(n) or 0 if n == 0 then found = (type(e) == "table") and e -- seems to fail elseif n < 0 then local d, k = e.__p__.dt, e.ni for i=k-1,1,-1 do local di = d[i] if type(di) == "table" then if n == -1 then found = di break else n = n + 1 end end end else local d, k = e.__p__.dt, e.ni for i=k+1,#d,1 do local di = d[i] if type(di) == "table" then if n == 1 then found = di break else n = n - 1 end end end end return (found and found.tg) or "" end end --[[ldx--

Often using an iterators looks nicer in the code than passing handler functions. The book describes how to use coroutines for that purpose (). This permits code like:

for r, d, k in xml.elements(xml.load('text.xml'),"title") do print(d[k]) -- old method end for e in xml.collected(xml.load('text.xml'),"title") do print(e) -- new one end --ldx]]-- -- local wrap, yield = coroutine.wrap, coroutine.yield -- local dummy = function() end -- -- function xml.elements(root,pattern,reverse) -- r, d, k -- local collected = applylpath(root,pattern) -- if collected then -- if reverse then -- return wrap(function() for c=#collected,1,-1 do -- local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni) -- end end) -- else -- return wrap(function() for c=1,#collected do -- local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni) -- end end) -- end -- end -- return wrap(dummy) -- end -- -- function xml.collected(root,pattern,reverse) -- e -- local collected = applylpath(root,pattern) -- if collected then -- if reverse then -- return wrap(function() for c=#collected,1,-1 do yield(collected[c]) end end) -- else -- return wrap(function() for c=1,#collected do yield(collected[c]) end end) -- end -- end -- return wrap(dummy) -- end -- faster: local dummy = function() end function xml.elements(root,pattern,reverse) -- r, d, k local collected = applylpath(root,pattern) if not collected then return dummy elseif reverse then local c = #collected + 1 return function() if c > 1 then c = c - 1 local e = collected[c] local r = e.__p__ return r, r.dt, e.ni end end else local n, c = #collected, 0 return function() if c < n then c = c + 1 local e = collected[c] local r = e.__p__ return r, r.dt, e.ni end end end end function xml.collected(root,pattern,reverse) -- e local collected = applylpath(root,pattern) if not collected then return dummy elseif reverse then local c = #collected + 1 return function() if c > 1 then c = c - 1 return collected[c] end end else local n, c = #collected, 0 return function() if c < n then c = c + 1 return collected[c] end end end end -- handy function xml.inspect(collection,pattern) pattern = pattern or "." for e in xml.collected(collection,pattern or ".") do report_lpath("pattern: %s\n\n%s\n",pattern,xml.tostring(e)) end end -- texy (see xfdf): local function split(e) local dt = e.dt if dt then for i=1,#dt do local dti = dt[i] if type(dti) == "string" then dti = gsub(dti,"^[\n\r]*(.-)[\n\r]*","%1") dti = gsub(dti,"[\n\r]+","\n\n") dt[i] = dti else split(dti) end end end return e end function xml.finalizers.paragraphs(c) for i=1,#c do split(c[i]) end return c end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-system.lua0000644000175000017500000000422012161703335025306 0ustar norbertnorbertif not modules then modules = { } end modules ['s-fonts-system'] = { version = 1.001, comment = "companion to s-fonts-system.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- ["zapfinoforteltpro"]={ -- ["designsize"]=0, -- ["familyname"]="zapfinoforteltpro", -- ["filename"]="zapfinoforteltpro.otf", -- ["fontname"]="zapfinoforteltpro", -- ["fontweight"]="regular", -- ["format"]="otf", -- ["fullname"]="zapfinoforteltpro", -- ["maxsize"]=0, -- ["minsize"]=0, -- ["modification"]=1105543074, -- ["modifiers"]="regular", -- ["rawname"]="ZapfinoForteLTPro", -- ["style"]="normal", -- ["subfamily"]="regular", -- ["variant"]="normal", -- ["weight"]="normal", -- ["width"]="normal", -- } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.system = moduledata.fonts.system or { } local lower = string.lower local context = context local NC, NR, HL = context.NC, context.NR, context.HL local bold = context.bold function moduledata.fonts.system.showinstalled(specification) specification = interfaces.checkedspecification(specification) local pattern = lower(specification.pattern or "") local list = fonts.names.list(pattern,false,true) if list then local files = { } for k, v in next, list do files[file.basename(string.lower(v.filename))] = v end context.starttabulate { "|Tl|Tl|Tl|Tl|Tl|Tl|" } HL() NC() bold("filename") NC() bold("fontname") NC() bold("subfamily") NC() bold("variant") NC() bold("weight") NC() bold("width") NC() NR() HL() for filename, data in table.sortedpairs(files) do NC() context(filename) NC() context(data.fontname) NC() context(data.subfamily) NC() context(data.variant) NC() context(data.weight) NC() context(data.width) NC() NR() end context.stoptabulate() end end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-ghz.mkiv0000644000175000017500000003546511754241457025142 0ustar norbertnorbert%D \module %D [ file=type-hgz, % variant of ghz %D version=2005.06.07, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Hermann Zapf's Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 At some point I will switch to opentype Optima fonts (don't have them). % \usetypescriptfile[type-ghz] % % \definetypeface[optima] [ss][sans] [optima-nova] [default] % \definetypeface[palatino][rm][serif][palatino-nova][default] % \definetypeface[aldus] [rm][serif][aldus-nova] [default] % % \starttext % \setupbodyfont[optima] \input zapf \blank % \setupbodyfont[palatino] \input zapf \blank % \setupbodyfont[aldus] \input zapf \blank % \stoptext \starttypescriptcollection[zapf collection] % zapfino \starttypescript [serif,handwriting] [zapfino] \definefontsynonym[zapfino] [file:zapfinoextraltpro] \definefontsynonym[zapfinoextra] [file:zapfinoextraltpro] \definefontsynonym[zapfinoforte] [file:zapfinoextraltpro] \stoptypescript % optima nova \starttypescript [sans] [optima-nova,optima-nova-light,optima-nova-medium,optima-nova-os] \definefontsynonym[OptimaNova-Light] [file:lt55476] \definefontsynonym[OptimaNova-LightSC] [file:lt55477] \definefontsynonym[OptimaNova-LightOsF] [file:lt55478] \definefontsynonym[OptimaNova-LightItalic] [file:lt55479] \definefontsynonym[OptimaNova-LightItalicSC] [file:lt55480] \definefontsynonym[OptimaNova-LightItalicOsF] [file:lt55481] \definefontsynonym[OptimaNova-LightCond] [file:lt55482] \definefontsynonym[OptimaNova-Regular] [file:lt55483] \definefontsynonym[OptimaNova-RegularSC] [file:lt55484] \definefontsynonym[OptimaNova-RegularOsF] [file:lt55485] \definefontsynonym[OptimaNova-Italic] [file:lt55486] \definefontsynonym[OptimaNova-ItalicSC] [file:lt55487] \definefontsynonym[OptimaNova-ItalicOsF] [file:lt55488] \definefontsynonym[OptimaNova-Condensed] [file:lt55489] \definefontsynonym[OptimaNova-Medium] [file:lt55490] \definefontsynonym[OptimaNova-MediumSC] [file:lt55491] \definefontsynonym[OptimaNova-MediumOsF] [file:lt55492] \definefontsynonym[OptimaNova-MediumItalic] [file:lt55493] \definefontsynonym[OptimaNova-MediumItalicSC] [file:lt55494] \definefontsynonym[OptimaNova-MediumItalicOsF][file:lt55495] \definefontsynonym[OptimaNova-MediumCond] [file:lt55496] \definefontsynonym[OptimaNova-TitlingInitials][file:lt55497] \definefontsynonym[OptimaNova-Demi] [file:lt55498] \definefontsynonym[OptimaNova-DemiSC] [file:lt55499] \definefontsynonym[OptimaNova-DemiOsF] [file:lt55500] \definefontsynonym[OptimaNova-DemiItalic] [file:lt55501] \definefontsynonym[OptimaNova-DemiItalicSC] [file:lt55502] \definefontsynonym[OptimaNova-DemiItalicOsF] [file:lt55503] \definefontsynonym[OptimaNova-DemiCond] [file:lt55504] \definefontsynonym[OptimaNova-Bold] [file:lt55505] \definefontsynonym[OptimaNova-BoldSC] [file:lt55506] \definefontsynonym[OptimaNova-BoldOsF] [file:lt55507] \definefontsynonym[OptimaNova-BoldItalic] [file:lt55508] \definefontsynonym[OptimaNova-BoldItalicSC] [file:lt55509] \definefontsynonym[OptimaNova-BoldItalicOsF] [file:lt55510] \definefontsynonym[OptimaNova-BoldCond] [file:lt55511] \definefontsynonym[OptimaNova-Heavy] [file:lt55512] \definefontsynonym[OptimaNova-HeavyItalic] [file:lt55513] \definefontsynonym[OptimaNova-Black] [file:lt55514] \definefontsynonym[OptimaNova-BlackItalic] [file:lt55515] \stoptypescript \starttypescript [sans] [optima-nova] [name] \definefontsynonym [Sans] [OptimaNova-Regular] \definefontsynonym [SansItalic] [OptimaNova-Italic] \definefontsynonym [SansBold] [OptimaNova-Bold] \definefontsynonym [SansBoldItalic] [OptimaNova-BoldItalic] \definefontsynonym [SansSlanted] [OptimaNova-Italic] \definefontsynonym [SansBoldSlanted] [OptimaNova-BoldItalic] \definefontsynonym [SansCaps] [OptimaNova-RegularSC] \definefontsynonym [SansOsF] [OptimaNova-RegularOsF] \definefontsynonym [SansItalicOsF] [OptimaNova-ItalicOsF] \definefontsynonym [SansBoldOsF] [OptimaNova-BoldOsF] \definefontsynonym [SansBoldItalicOsF] [OptimaNova-BoldItalicOsF] \definefontsynonym [SansSlantedOsF] [OptimaNova-ItalicOsF] \definefontsynonym [SansBoldSlantedOsF] [OptimaNova-BoldItalicOsF] \definefontsynonym [SansCapsOsF] [OptimaNova-RegularSC] \definefontsynonym [SansCaps] [OptimaNova-RegularSC] \definefontsynonym [SansItalicCaps] [OptimaNova-ItalicSC ] \definefontsynonym [SansBoldCaps] [OptimaNova-BoldSC] \definefontsynonym [SansBoldItalicCaps] [OptimaNova-BoldItalicSC] \definefontsynonym [SansSlantedCaps] [OptimaNova-ItalicSC] \definefontsynonym [SansBoldSlantedCaps] [OptimaNova-BoldItalicSC] \definefontsynonym [SansCapsCaps] [OptimaNova-RegularSC] \stoptypescript \starttypescript [sans] [optima-nova-os] [name] \definefontsynonym [Sans] [OptimaNova-RegularOsF] \definefontsynonym [SansItalic] [OptimaNova-ItalicOsF] \definefontsynonym [SansBold] [OptimaNova-BoldOsF] \definefontsynonym [SansBoldItalic] [OptimaNova-BoldItalicOsF] \definefontsynonym [SansSlanted] [OptimaNova-ItalicOsF] \definefontsynonym [SansBoldSlanted] [OptimaNova-BoldItalicOsF] \definefontsynonym [SansCaps] [OptimaNova-RegularSC] \stoptypescript \starttypescript [sans] [optima-nova-light] [name] % may change \definefontsynonym [Sans] [OptimaNova-Light] \definefontsynonym [SansItalic] [OptimaNova-LightItalic] \definefontsynonym [SansBold] [OptimaNova-Medium] \definefontsynonym [SansBoldItalic] [OptimaNova-MediumItalic] \definefontsynonym [SansSlanted] [OptimaNova-LightItalic] \definefontsynonym [SansBoldSlanted] [OptimaNova-MediumItalic] \definefontsynonym [SansCaps] [OptimaNova-LightSC] \stoptypescript \starttypescript [sans] [optima-nova-medium] [name] % may change \definefontsynonym [Sans] [OptimaNova-Medium] \definefontsynonym [SansItalic] [OptimaNova-MediumItalic] \definefontsynonym [SansBold] [OptimaNova-Heavy] \definefontsynonym [SansBoldItalic] [OptimaNova-HeavyItalic] \definefontsynonym [SansSlanted] [OptimaNova-MediumItalic] \definefontsynonym [SansBoldSlanted] [OptimaNova-HeavyItalic] \definefontsynonym [SansCaps] [OptimaNova-MediumSC] \stoptypescript \starttypescript[optima-nova,optima] \definetypeface[\typescriptone][ss][sans][optima-nova] [default][features=default] \definetypeface[\typescriptone][rm][sans][optima-nova] [default][features=default] \definetypeface[\typescriptone][tt][mono][modern] [default][rscale=1.1] \definetypeface[\typescriptone][mm][math][modern] [default][rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript[optima-nova-os] \definetypeface[optima-os][ss][sans][optima-nova-os] [default][features=default] \definetypeface[optima-os][rm][sans][optima-nova-os] [default][features=default] \definetypeface[optima-os][tt][mono][modern] [default][rscale=1.1] \definetypeface[optima-os][mm][math][modern] [default][rscale=1.1] \quittypescriptscanning \stoptypescript % palatino nova \starttypescript [serif] [palatino-nova,palatino-nova-light,palatino-nova-medium] \definefontsynonym[PalatinoNova-Light] [file:palatinonova-light] \definefontsynonym[PalatinoNova-LightItalic] [file:palatinonova-lightitalic] \definefontsynonym[PalatinoNova-Regular] [file:palatinonova-regular] \definefontsynonym[PalatinoNova-Italic] [file:palatinonova-italic] \definefontsynonym[PalatinoNova-Medium] [file:palatinonova-medium] \definefontsynonym[PalatinoNova-MediumItalic][file:palatinonova-mediumitalic] \definefontsynonym[PalatinoNova-Bold] [file:palatinonova-bold] \definefontsynonym[PalatinoNova-BoldItalic] [file:palatinonova-bolditalic] \definefontsynonym[PalatinoNova-Imperial] [file:palatinonova-imperial] \definefontsynonym[PalatinoNova-Titling] [file:palatinonova-titling] \stoptypescript \starttypescript [serif] [palatino-nova] [name] \definefontsynonym [Serif] [PalatinoNova-Regular] \definefontsynonym [SerifItalic] [PalatinoNova-Italic] \definefontsynonym [SerifBold] [PalatinoNova-Bold] \definefontsynonym [SerifBoldItalic] [PalatinoNova-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \stoptypescript \starttypescript [serif] [palatino-nova-light] [name]% may change \definefontsynonym [Serif] [PalatinoNova-Light] \definefontsynonym [SerifItalic] [PalatinoNova-LightItalic] \definefontsynonym [SerifBold] [PalatinoNova-Regular] \definefontsynonym [SerifBoldItalic] [PalatinoNova-Italic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \stoptypescript \starttypescript [serif] [palatino-nova-medium] [name]% may change \definefontsynonym [Serif] [PalatinoNova-Medium] \definefontsynonym [SerifItalic] [PalatinoNova-MediumItalic] \definefontsynonym [SerifBold] [PalatinoNova-Bold] \definefontsynonym [SerifBoldItalic] [PalatinoNova-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \stoptypescript % palatino sans \starttypescript [sans] [palatino-sans,palatino-informal] % palatino sans com ultra light arrows / Palatino Sans Com Ultra Light Arrows / palatinosanscom-ultltarrows] \definefontsynonym[PalatinoSans-UltraLight] [file:palatinosanscom-ultlight] \definefontsynonym[PalatinoSans-UltraLightItalic] [file:palatinosanscom-ultlightita] \definefontsynonym[PalatinoSans-Light] [file:palatinosanscom-light] \definefontsynonym[PalatinoSans-LightItalic] [file:palatinosanscom-lightita] \definefontsynonym[PalatinoSans-Regular] [file:palatinosanscom-regular] \definefontsynonym[PalatinoSans-Italic] [file:palatinosanscom-italic] \definefontsynonym[PalatinoSans-Medium] [file:palatinosanscom-medium] \definefontsynonym[PalatinoSans-MediumItalic] [file:palatinosanscom-mediumita] \definefontsynonym[PalatinoSans-Bold] [file:palatinosanscom-bold] \definefontsynonym[PalatinoSans-BoldItalic] [file:palatinosanscom-boldita] \definefontsynonym[PalatinoInformal-UltraLight] [file:palatinosansinflcom-ultlt] \definefontsynonym[PalatinoInformal-UltraLightItalic] [file:palatinosansinflcom-ultltit] \definefontsynonym[PalatinoInformal-Light] [file:palatinosansinflcom-light] \definefontsynonym[PalatinoInformal-LightItalic] [file:palatinosansinflcom-lightit] \definefontsynonym[PalatinoInformal-Regular] [file:palatinosansinflcom-regular] \definefontsynonym[PalatinoInformal-Italic] [file:palatinosansinflcom-italic] \definefontsynonym[PalatinoInformal-Medium] [file:palatinosansinflcom-med] \definefontsynonym[PalatinoInformal-MediumItalic] [file:palatinosansinflcom-medit] \definefontsynonym[PalatinoInformal-Bold] [file:palatinosansinflcom-bold] \definefontsynonym[PalatinoInformal-BoldItalic] [file:palatinosansinflcom-boldit] \stoptypescript \starttypescript [sans] [palatino-sans] [name] \definefontsynonym [Sans] [PalatinoSans-Medium] \definefontsynonym [SansItalic] [PalatinoSans-MediumItalic] \definefontsynonym [SansBold] [PalatinoSans-Bold] \definefontsynonym [SansBoldItalic] [PalatinoSans-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \stoptypescript \starttypescript [sans] [palatino-informal] [name] \definefontsynonym [Sans] [PalatinoInformal-Medium] \definefontsynonym [SansItalic] [PalatinoInformal-MediumItalic] \definefontsynonym [SansBold] [PalatinoInformal-Bold] \definefontsynonym [SansBoldItalic] [PalatinoInformal-BoldItalic] \definefontsynonym [SansSlanted] [SansItalic] \definefontsynonym [SansBoldSlanted] [SansBoldItalic] \stoptypescript \starttypescript[palatino,palatino-nova] \definetypeface[palatino][rm][serif][palatino-nova][default][features=default] \definetypeface[palatino][ss][sans] [palatino-sans][default][features=default] \definetypeface[palatino][tt][mono] [modern] [default][rscale=1.1] \definetypeface[palatino][mm][math] [palatino] [default]% [rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript[palatino-sans] \definetypeface[palatino][ss][sans] [palatino-sans][default][features=default] \definetypeface[palatino][rm][serif][palatino-nova][default][features=default] \definetypeface[palatino][tt][mono] [modern] [default][rscale=1.1] \definetypeface[palatino][mm][math] [palatino] [default] % [rscale=1.1] \quittypescriptscanning \stoptypescript \starttypescript[palatino-informal] \definetypeface[palatino-informal][ss][sans] [palatino-informal][default][features=default] \definetypeface[palatino-informal][rm][serif][palatino-nova] [default][features=default] \definetypeface[palatino-informal][tt][mono] [latin-modern] [default][features=none,rscale=1.1] \definetypeface[palatino-informal][mm][math] [palatino] [default][features=default]% ,rscale=1.1] \quittypescriptscanning \stoptypescript % melior \starttypescript [serif] [melior] [name] \definefontsynonym [MeliorLT-Roman] [MeliorLT] \definefontsynonym [Serif] [MeliorLT-Roman] \definefontsynonym [SerifItalic] [MeliorLT-Italic] \definefontsynonym [SerifBold] [MeliorLT-Bold] \definefontsynonym [SerifBoldItalic] [MeliorLT-BoldItalic] \definefontsynonym [SerifSlanted] [SerifItalic] \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic] \definefontsynonym [SerifCaps] [Serif] \stoptypescript \starttypescript [serif] [melior] \definefontsynonym [MeliorLT] [file:lte50062] \definefontsynonym [MeliorLT-Italic] [file:lte50063] \definefontsynonym [MeliorLT-Bold] [file:lte50064] \definefontsynonym [MeliorLT-BoldItalic] [file:lte50065] \stoptypescript \stoptypescriptcollection \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lang-lab.lua0000644000175000017500000001162712130411274024053 0ustar norbertnorbertif not modules then modules = { } end modules ['lang-lab'] = { version = 1.001, comment = "companion to lang-lab.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format, find = string.format, string.find local next, rawget, type = next, rawget, type local lpegmatch = lpeg.match local formatters = string.formatters local prtcatcodes = catcodes.numbers.prtcatcodes -- todo: use different method local trace_labels = false trackers.register("languages.labels", function(v) trace_labels = v end) local report_labels = logs.reporter("languages","labels") languages.labels = languages.labels or { } local labels = languages.labels local variables = interfaces.variables local settings_to_array = utilities.parsers.settings_to_array local splitter = lpeg.splitat(":") local function split(tag) return lpegmatch(splitter,tag) end labels.split = split local contextsprint = context.sprint local function definelanguagelabels(data,class,tag,rawtag) for language, text in next, data.labels do if text == "" then -- skip elseif type(text) == "table" then contextsprint(prtcatcodes,"\\setlabeltextpair{",class,"}{",language,"}{",tag,"}{",text[1],"}{",text[2],"}") if trace_labels then report_labels("language %a, defining label %a as %a and %a",language,rawtag,text[1],text[2]) end else contextsprint(prtcatcodes,"\\setlabeltextpair{",class,"}{",language,"}{",tag,"}{",text,"}{}") if trace_labels then report_labels("language %a, defining label %a as %a",language,rawtag,text) end end end end function labels.define(class,name,prefixed) local list = languages.data.labels[name] if list then report_labels("defining label set %a",name) for tag, data in next, list do if data.hidden then -- skip elseif prefixed then local first, second = lpegmatch(splitter,tag) if second then if rawget(variables,first) then if rawget(variables,second) then definelanguagelabels(data,class,formatters["\\v!%s:\\v!%s"](first,second),tag) else definelanguagelabels(data,class,formatters["\\v!%s:%s"](first,second),tag) end elseif rawget(variables,second) then definelanguagelabels(data,class,formatters["%s:\\v!%s"](first,second),tag) else definelanguagelabels(data,class,formatters["%s:%s"](first,second),tag) end elseif rawget(variables,rawtag) then definelanguagelabels(data,class,formatters["\\v!%s"](tag),tag) else definelanguagelabels(data,class,tag,tag) end else definelanguagelabels(data,class,tag,tag) end end else report_labels("unknown label set %a",name) end end -- function labels.check() -- for category, list in next, languages.data.labels do -- for tag, specification in next, list do -- for language, text in next, specification.labels do -- if type(text) == "string" and find(text,",") then -- report_labels("warning: label with comma found, category %a, language %a, tag %a, text %a", -- category, language, tag, text) -- end -- end -- end -- end -- end -- -- labels.check() -- interface commands.definelabels = labels.define -- function commands.setstrippedtextprefix(str) -- context(string.strip(str)) -- end -- list : { "a", "b", "c" } -- separator : ", " -- last : " and " -- text : "a,b,c" -- separators : "{, },{ and }" function commands.concatcommalist(settings) -- it's too easy to forget that this one is there local list = settings.list or settings_to_array(settings.text or "") local size = #list local command = settings.command and context[settings.command] or context if size > 1 then local separator, last = " ", " " if settings.separators then local set = settings_to_array(settings.separators) separator = set[1] or settings.separator or separator last = set[2] or settings.last or last else separator = settings.separator or separator last = settings.last or last end command(list[1]) for i=2,size-1 do context(separator) command(list[i]) end context(last) end if size > 0 then command(list[size]) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/page-inj.lua0000644000175000017500000000711712130411274024067 0ustar norbertnorbertif not modules then modules = { } end modules ["page-inj"] = { version = 1.000, comment = "Page injections", author = "Wolfgang Schuster & Hans Hagen", copyright = "Wolfgang Schuster & Hans Hagen", license = "see context related readme files", } -- Adapted a bit by HH: numbered states, tracking, delayed, order, etc. local injections = pagebuilders.injections or { } pagebuilders.injections = injections local report = logs.reporter("pagebuilder","injections") local trace = false trackers.register("pagebuilder.injections",function(v) trace = v end) local variables = interfaces.variables local v_yes = variables.yes local v_previous = variables.previous local v_next = variables.next local order = 0 local cache = { } function injections.save(specification) -- maybe not public, just commands.* order = order + 1 cache[#cache+1] = { order = order, name = specification.name, state = tonumber(specification.state) or specification.state, parameters = specification.userdata, } tex.setcount("global","c_page_boxes_flush_n",#cache) end function injections.flushbefore() -- maybe not public, just commands.* if #cache > 0 then local delayed = { } context.unprotect() for i=1,#cache do local c = cache[i] local oldstate = c.state if oldstate == v_previous then if trace then report("entry %a, order %a, flushing due to state %a",i,c.order,oldstate) end context.page_injections_flush_saved(c.name,c.parameters) elseif type(oldstate) == "number" and oldstate < 0 then local newstate = oldstate + 1 if newstate >= 0 then newstate = v_previous end if trace then report("entry %a, order %a, changing state from %a to %a",i,c.order,oldstate,newstate) end c.state = newstate delayed[#delayed+1] = c else delayed[#delayed+1] = c end end context.unprotect() cache = delayed tex.setcount("global","c_page_boxes_flush_n",#cache) end end function injections.flushafter() -- maybe not public, just commands.* if #cache > 0 then local delayed = { } context.unprotect() for i=1,#cache do local c = cache[i] local oldstate = c.state if oldstate == v_next then if trace then report("entry %a, order %a, flushing due to state %a",i,c.order,oldstate) end context.page_injections_flush_saved(c.name,c.parameters) elseif type(oldstate) == "number" and oldstate> 0 then local newstate = oldstate- 1 if newstate <= 0 then newstate = v_next end if trace then report("entry %a, order %a, changing state from %a to %a",i,c.order,oldstate,newstate) end c.state = newstate delayed[#delayed+1] = c end end context.protect() cache = delayed tex.setcount("global","c_page_boxes_flush_n",#cache) end end commands.page_injections_save = injections.save commands.page_injections_flush_after = injections.flushafter commands.page_injections_flush_before = injections.flushbefore context-2013.05.28.20130704/texmf-dist/tex/context/base/anch-pgr.lua0000644000175000017500000004755012130411274024101 0ustar norbertnorbertif not modules then modules = { } end modules ['anch-pgr'] = { version = 1.001, comment = "companion to anch-pgr.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- todo: we need to clean up lists (of previous pages) local commands, context = commands, context local format = string.format local abs = math.abs local concat, sort = table.concat, table.sort local splitter = lpeg.splitat(":") local lpegmatch = lpeg.match local jobpositions = job.positions local formatters = string.formatters local report_graphics = logs.reporter("graphics") local f_b_tag = formatters["b:%s"] local f_e_tag = formatters["e:%s"] local f_p_tag = formatters["p:%s"] local f_tag_two = formatters["%s:%s"] local f_point = formatters["%p"] local f_pair = formatters["(%p,%p)"] local f_path = formatters["%--t--cycle"] local function regionarea(r) local rx, ry = r.x, r.y local rw = rx + r.w local rh = ry + r.h local rd = ry - r.d return { f_pair(rx, rh - ry), f_pair(rw, rh - ry), f_pair(rw, rd - ry), f_pair(rx, rd - ry), } end -- we can use a 'local t, n' and reuse the table local eps = 2 local function add(t,x,y,last,direction) local n = #t if n == 0 then t[n+1] = { x, y } else local tn = t[n] local lx = tn[1] local ly = tn[2] if x == lx and y == ly then -- quick skip elseif n == 1 then -- if abs(lx-x) <= eps or abs(ly-y) <= eps then if abs(lx-x) > eps or abs(ly-y) > eps then t[n+1] = { x, y } end else local tm = t[n-1] local px = tm[1] local py = tm[2] if (direction == "down" and y > ly) or (direction == "up" and y < ly) then -- move back from too much hang else if abs(lx-px) <= eps and abs(lx-x) <= eps then if abs(ly-y) > eps then tn[2] = y end elseif abs(ly-py) <= eps and abs(ly-y) <= eps then if abs(lx-x) > eps then tn[1] = x end elseif not last then t[n+1] = { x, y } end end end end end -- local function add(t,x,y,last) -- t[#t+1] = { x, y } -- end local function finish(t) local n = #t if n > 1 then local first = t[1] local last = t[n] if abs(first[1]-last[1]) <= eps and abs(first[2]-last[2]) <= eps then t[n] = nil end end end local function clip(t,ytop,ybot) local first, last = 1, #t for i=first,last do local y = t[i][2] if ytop < y then first = i end if ybot > y then last = i break end end local lp = { } lp[#lp+1] = { t[first][1], ytop } for i=first+1,last-1 do lp[#lp+1] = { t[i][1], t[i][2] } end lp[#lp+1] = { t[last][1], ybot } return lp end -- todo: mark regions and free paragraphs in collected local function shapes(r,rx,ry,rw,rh,rd,lytop,lybot,rytop,rybot,obeyhang) -- we assume that we only hang per page and not cross pages -- which makes sense as hanging is only uses in special cases -- -- we can remove data as soon as a page is done so we could -- remember per page and discard areas after each shipout local leftshape, rightshape leftshape = { { rx, rh } } -- spikes get removed so we can start at the edge rightshape = { { rw, rh } } -- even if we hang next local paragraphs = r.paragraphs local extending = false if paragraphs then for i=1,#paragraphs do local p = paragraphs[i] local ha = p.ha if obeyhang and ha and ha ~= 0 then local py = p.y local ph = p.h local pd = p.d local hi = p.hi local hang = ha * (ph + pd) local py_ph = py + ph -- ha < 0 hi < 0 : right top -- ha < 0 hi > 0 : left top if ha < 0 then if hi < 0 then -- right add(rightshape,rw, py_ph,"up") add(rightshape,rw + hi,py_ph,"up") add(rightshape,rw + hi,py_ph + hang,"up") add(rightshape,rw, py_ph + hang,"up") else -- left add(leftshape,rx,py_ph,"down") add(leftshape,rx + hi,py_ph,"down") add(leftshape,rx + hi,py_ph + hang,"down") add(leftshape,rx,py_ph + hang,"down") end else -- maybe some day end extending = true -- false else -- we need to clip to the next par local ps = p.ps if ps then local py = p.y local ph = p.h local pd = p.d local step = ph + pd local size = #ps * step local py_ph = py + ph add(leftshape,rx,py_ph,"up") add(rightshape,rw,py_ph,"down") for i=1,#ps do local p = ps[i] local l = p[1] local w = p[2] add(leftshape,rx + l, py_ph,"up") add(rightshape,rx + l + w, py_ph,"down") py_ph = py_ph - step add(leftshape,rx + l, py_ph,"up") add(rightshape,rx + l + w, py_ph,"down") end extending = true elseif extending then local py = p.y local ph = p.h local pd = p.d local py_ph = py + ph local py_pd = py - pd add(leftshape,leftshape[#leftshape][1],py_ph,"up") add(rightshape,rightshape[#rightshape][1],py_ph,"down") add(leftshape,rx,py_ph,"up") -- shouldn't this be py_pd add(rightshape,rw,py_ph,"down") -- shouldn't this be py_pd extending = false end end end end -- we can have a simple variant when no paragraphs if extending then -- not ok leftshape[#leftshape][2] = rd rightshape[#rightshape][2] = rw else add(leftshape,rx,rd,"up") add(rightshape,rw,rd,"down") end return clip(leftshape,lytop,lybot), clip(rightshape,rytop,rybot) end -- local function shapes(r,rx,ry,rw,rh,rd,lytop,lybot,rytop,rybot,obeyhang) -- local leftshape = { { rx, rh }, { rx, rd } } -- local rightshape = { { rw, rh }, { rw, rd } } -- return clip(leftshape,lytop,lybot), clip(rightshape,rytop,rybot) -- end local function singlepart(b,e,r,left,right,obeyhang) local bx, by = b.x, b.y local ex, ey = e.x, e.y local rx, ry = r.x, r.y local rw = rx + r.w local rh = ry + r.h local rd = ry - r.d if left then rx = rx + left rw = rw - right end local bh = by + b.h local bd = by - b.d local eh = ey + e.h local ed = ey - e.d if ex == rx then -- We probably have a strut at the next line so we force a width -- although of course it is better to move up. But as we have whitespace -- (at least visually) injected then it's best to stress the issue. ex = rw end local area if by == ey then area = { f_pair(bx,bh-ry), f_pair(ex,eh-ry), f_pair(ex,ed-ry), f_pair(bx,bd-ry), } else area = { } local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,bd,ed,bh,eh,obeyhang) add(area,bx,bh-ry) for i=1,#rightshapes do local ri = rightshapes[i] add(area,ri[1],ri[2]-ry) end add(area,ex,eh-ry) add(area,ex,ed-ry) for i=#leftshapes,1,-1 do local li = leftshapes[i] add(area,li[1],li[2]-ry) end add(area,bx,bd-ry) add(area,bx,bh-ry,true) -- finish last straight line (but no add as we cycle) finish(area) for i=1,#area do local a = area[i] area[i] = f_pair(a[1],a[2]) end end return { location = "single", region = r, area = area, } end local function firstpart(b,r,left,right,obeyhang) local bx, by = b.x, b.y local rx, ry = r.x, r.y local rw = rx + r.w local rh = ry + r.h local rd = ry - r.d if left then rx = rx + left rw = rw - right end local bh = by + b.h local bd = by - b.d local area = { } local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,bd,rd,bh,rd,obeyhang) add(area,bx,bh-ry) for i=1,#rightshapes do local ri = rightshapes[i] add(area,ri[1],ri[2]-ry) end for i=#leftshapes,1,-1 do local li = leftshapes[i] add(area,li[1],li[2]-ry) end add(area,bx,bd-ry) add(area,bx,bh-ry,true) -- finish last straight line (but no add as we cycle) finish(area) for i=1,#area do local a = area[i] area[i] = f_pair(a[1],a[2]) end return { location = "first", region = r, area = area, } end local function middlepart(r,left,right,obeyhang) local rx, ry = r.x, r.y local rw = rx + r.w local rh = ry + r.h local rd = ry - r.d if left then rx = rx + left rw = rw - right end local area = { } local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,rh,rd,rh,rd,obeyhang) for i=#leftshapes,1,-1 do local li = leftshapes[i] add(area,li[1],li[2]-ry) end for i=1,#rightshapes do local ri = rightshapes[i] add(area,ri[1],ri[2]-ry) end finish(area) for i=1,#area do local a = area[i] area[i] = f_pair(a[1],a[2]) end return { location = "middle", region = r, area = area, } end local function lastpart(e,r,left,right,obeyhang) local ex, ey = e.x, e.y local rx, ry = r.x, r.y local rw = rx + r.w local rh = ry + r.h local rd = ry - r.d if left then rx = rx + left rw = rw - right end local eh = ey + e.h local ed = ey - e.d local area = { } -- two cases: till end and halfway e line local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,rh,ed,rh,eh,obeyhang) for i=1,#rightshapes do local ri = rightshapes[i] add(area,ri[1],ri[2]-ry) end add(area,ex,eh-ry) add(area,ex,ed-ry) for i=#leftshapes,1,-1 do local li = leftshapes[i] add(area,li[1],li[2]-ry) end finish(area) for i=1,#area do local a = area[i] area[i] = f_pair(a[1],a[2]) end return { location = "last", region = r, area = area, } end graphics = graphics or { } local backgrounds = { } graphics.backgrounds = backgrounds local function calculatemultipar(tag,obeyhang) local collected = jobpositions.collected local b = collected[f_b_tag(tag)] local e = collected[f_e_tag(tag)] if not b or not e then report_graphics("invalid tag %a",tag) return { } end local br = b.r local er = e.r if not br or not er then report_graphics("invalid region for %a",tag) return { } end local btag, bindex = lpegmatch(splitter,br) local etag, eindex = lpegmatch(splitter,er) if not bindex or not eindex or btag ~= etag then report_graphics("invalid indices for %a",tag) return { } end local bindex = tonumber(bindex) local eindex = tonumber(eindex) -- Here we compensate for columns (in tables): a table can have a set of column -- entries and these are shared. We compensate left/right based on the columns -- x and w but need to take the region into acount where the specification was -- flushed and not the begin pos's region, because otherwise we get the wrong -- compensation for assymetrical doublesided layouts. local left = 0 local right = 0 local rc = b.c if rc then rc = collected[rc] if rc then local tb = collected[rc.r] if tb then left = -(tb.x - rc.x) right = (tb.w - rc.w - left) -- tb.x - rc.x end end end -- Obeying intermediate changes of left/rightskip makes no sense as it will -- look bad, so we only look at the begin situation. -- local bn = b.n if bn then local bp = collected[f_p_tag(bn)] if bp then left = left + bp.ls right = right + bp.rs end end -- if bindex == eindex then return { list = { [b.p] = { singlepart(b,e,collected[br],left,right,obeyhang) } }, bpos = b, epos = e, } else local list = { [b.p] = { firstpart(b,collected[br],left,right,obeyhang) }, } for i=bindex+1,eindex-1 do br = f_tag_two(btag,i) local r = collected[br] if not r then report_graphics("invalid middle for %a",br) else local p = r.p local pp = list[p] if pp then pp[#pp+1] = middlepart(r,left,right,obeyhang) else list[p] = { middlepart(r,left,right,obeyhang) } end end end local p = e.p local pp = list[p] if pp then pp[#pp+1] = lastpart(e,collected[er],left,right,obeyhang) else list[p] = { lastpart(e,collected[er],left,right,obeyhang) } end return { list = list, bpos = b, epos = e, } end end -- local pending = { } -- needs gc -- -- local function register(data,n,anchor) -- local pa = pending[anchor] -- if not pa then -- pa = { } -- pending[anchor] = pa -- end -- for page, pagedata in next, data do -- local pap = pa[page] -- if pap then -- pap[#pap+1] = n -- else -- pa[page] = { n } -- end -- end -- end -- -- function backgrounds.registered(anchor,page) -- local pa = pending[anchor] -- if pa then -- concat(pa,",") -- else -- return "" -- end -- end local pbg = { } -- will move to pending function backgrounds.calculatemultipar(n) if not pbg[n] then pbg[n] = calculatemultipar("pbg",n) or { } end end local multilocs = { single = 1, -- maybe 0 first = 1, middle = 2, last = 3, } -- if unknown context_abck : input mp-abck.mpiv ; fi ; local f_template_a = [[ path multiregs[], multipars[], multibox ; string multikind[] ; numeric multilocs[], nofmultipars ; nofmultipars := %s ; multibox := unitsquare xyscaled (%p,%p) ; numeric par_strut_height, par_strut_depth, par_line_height ; par_strut_height := %p ; par_strut_depth := %p ; par_line_height := %p ; ]] local f_template_b = [[ multilocs[%s] := %s ; multikind[%s] := "%s" ; multipars[%s] := (%--t--cycle) shifted - (%p,%p) ; ]] local f_template_c = [[ multiregs[%s] := (%--t--cycle) shifted - %s ; ]] local f_template_d = [[ setbounds currentpicture to multibox ; ]] f_template_a = formatters[f_template_a] f_template_b = formatters[f_template_b] f_template_c = formatters[f_template_c] f_template_d = formatters[f_template_d] function backgrounds.fetchmultipar(n,anchor,page,obeyhang) local data = pbg[n] if not data then data = calculatemultipar(n,obeyhang) pbg[n] = data -- can be replaced by register -- register(data.list,n,anchor) end if data then local list = data.list if list then local pagedata = list[page] if pagedata then local nofmultipars = #pagedata -- report_graphics("fetching %a at page %s using anchor %a containing %s multipars",n,page,anchor,nofmultipars) local a = jobpositions.collected[anchor] if not a then report_graphics("missing anchor %a",anchor) else local trace = false local x, y, w, h, d = a.x, a.y, a.w, a.h, a.d local bpos = data.bpos local bh, bd = bpos.h, bpos.d local result = { f_template_a(nofmultipars,w,h+d,bh,bd,bh+bd) } for i=1,nofmultipars do local region = pagedata[i] result[#result+1] = f_template_b( i, multilocs[region.location], i, region.location, i, region.area, x, y-region.region.y) if trace then result[#result+1] = f_template_c(i, regionarea(region.region), offset) end end data[page] = nil result[#result+1] = f_template_d() result = concat(result,"\n") return result end end end end return f_template_a(0,"origin",0,0,0) end backgrounds.point = f_point backgrounds.pair = f_pair backgrounds.path = f_path function commands.fetchmultipar(n,anchor,page) context(backgrounds.fetchmultipar(n,anchor,page)) end function commands.fetchmultishape(n,anchor,page) context(backgrounds.fetchmultipar(n,anchor,page,true)) end local f_template_a = [[ path posboxes[], posregions[] ; numeric pospages[] ; numeric nofposboxes ; nofposboxes := %s ; %t ; ]] local f_template_b = [[ pospages[%s] := %s ; posboxes[%s] := (%p,%p)--(%p,%p)--(%p,%p)--(%p,%p)--cycle ; posregions[%s] := (%p,%p)--(%p,%p)--(%p,%p)--(%p,%p)--cycle ; ]] f_template_a = formatters[f_template_a] f_template_b = formatters[f_template_b] function commands.fetchposboxes(tags,anchor,page) -- no caching (yet) / todo: anchor, page local collected = jobpositions.collected if type(tags) == "string" then tags = utilities.parsers.settings_to_array(tags) end local list, nofboxes = { }, 0 for i=1,#tags do local tag= tags[i] local c = collected[tag] if c then local r = c.r if r then r = collected[r] if r then local rx, ry, rw, rh, rd = r.x, r.y, r.w, r.h, r.d local cx = c.x - rx local cy = c.y - ry local cw = cx + c.w local ch = cy + c.h local cd = cy - c.d nofboxes = nofboxes + 1 list[nofboxes] = f_template_b( nofboxes,c.p, nofboxes,cx,ch,cw,ch,cw,cd,cx,cd, nofboxes,0,rh,rw,rh,rw,rd,0,rd ) end end else print("\n missing",tag) end end context(f_template_a(nofboxes,list)) end local doifelse = commands.doifelse function commands.doifelsemultipar(n,page,obeyhang) local data = pbg[n] if not data then data = calculatemultipar(n,obeyhang) pbg[n] = data end if page then doifelse(data and data[page] and true) else doifelse(data and next(data) and true) end end function commands.doifelserangeonpage(first,last,page) local collected = jobpositions.collected local f = collected[first] if not f then doifelse(false) return end local l = collected[last] if not l then doifelse(false) return end doifelse(page >= f.p and page <= l.p) end context-2013.05.28.20130704/texmf-dist/tex/context/base/m-markdown.lua0000644000175000017500000006470511754241457024476 0ustar norbertnorbertif not modules then modules = { } end modules ['m-markdown'] = { version = 1.002, comment = "companion to m-markdown.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "see below", license = "see context related readme files" } --[[ Copyright (C) 2009 John MacFarlane / Khaled Hosny / Hans Hagen The main parser is derived from the lunamark parser written by John MacFarlane. You can download lunamark from: http://github.com/jgm/lunamark.git Khaled Hosny provided the context writer for lunamark and that was used as starting point for the mapping. The original code can be fetched from the above location. While playing with the original code I got the feeling that lpeg could perform better. The slowdown was due to the fact that the parser's lpeg was reconstructed each time a nested parse was needed. After changing that code a bit I could bring down parsing of some test code from 2 seconds to less than 0.1 second so I decided to stick to this parser instead of writing my own. After all, the peg code looks pretty impressive and visiting Johns pandoc pages is worth the effort: http://johnmacfarlane.net/pandoc/ The code here is mostly meant for processing snippets embedded in a context documents and is no replacement for pandoc at all. Therefore an alternative is to use pandoc in combination with Aditya's filter module. As I changed (and optimized) the original code, it will be clear that all errors are mine. Eventually I might also adapt the parser code a bit more. When I ran into of closure stack limitations I decided to flatten the code. The following implementation seems to be a couple of hundred times faster than what I started with which is not that bad. This is a second rewrite. The mentioned speed gain largely depended on the kind of content: blocks, references and items can be rather demanding. Also, There were some limitations with respect to the captures. So, table storage has been removed in favor of strings, and nesting has been simplified. The first example at the end of this file now takes .33 seconds for 567KB code (resulting in over 1MB) so we're getting there. There will be a third rewrite eventually. ]]-- -- todo: we have better quote and tag scanners in ctx -- todo: provide an xhtml mapping -- todo: add a couple of extensions -- todo: check patches to the real peg local type, next, tonumber = type, next, tonumber local lower, upper, gsub, rep, gmatch, format, length = string.lower, string.upper, string.gsub, string.rep, string.gmatch, string.format, string.len local concat = table.concat local P, R, S, V, C, Ct, Cg, Cb, Cmt, Cc, Cf, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Ct, lpeg.Cg, lpeg.Cb, lpeg.Cmt, lpeg.Cc, lpeg.Cf, lpeg.Cs local lpegmatch = lpeg.match local utfbyte, utfchar = utf.byte, utf.char moduledata = moduledata or { } moduledata.markdown = moduledata.markdown or { } local markdown = moduledata.markdown local nofruns, nofbytes, nofhtmlblobs = 0, 0, 0 --------------------------------------------------------------------------------------------- local nestedparser local syntax nestedparser = function(str) return lpegmatch(syntax,str) end --------------------------------------------------------------------------------------------- local asterisk = P("*") local dash = P("-") local plus = P("+") local underscore = P("_") local period = P(".") local hash = P("#") local ampersand = P("&") local backtick = P("`") local less = P("<") local more = P(">") local space = P(" ") local squote = P("'") local dquote = P('"') local lparent = P("(") local rparent = P(")") local lbracket = P("[") local rbracket = P("]") local slash = P("/") local equal = P("=") local colon = P(":") local semicolon = P(";") local exclamation = P("!") local digit = R("09") local hexdigit = R("09","af","AF") local alphanumeric = R("AZ","az","09") local doubleasterisks = P("**") local doubleunderscores = P("__") local fourspaces = P(" ") local any = P(1) local always = P("") local tab = P("\t") local spacechar = S("\t ") local spacing = S(" \n\r\t") local newline = P("\r")^-1 * P("\n") local spaceornewline = spacechar + newline local nonspacechar = any - spaceornewline local optionalspace = spacechar^0 local spaces = spacechar^1 local eof = - any local nonindentspace = space^-3 local blankline = optionalspace * C(newline) local blanklines = blankline^0 local skipblanklines = (optionalspace * newline)^0 local linechar = P(1 - newline) local indent = fourspaces + (nonindentspace * tab) / "" local indentedline = indent /"" * C(linechar^1 * (newline + eof)) local optionallyindentedline = indent^-1 /"" * C(linechar^1 * (newline + eof)) local spnl = optionalspace * (newline * optionalspace)^-1 local specialchar = S("*_`*&[] -- [3]:http://example.com/ (Optional Title Here) -- [2]: http://example.com/ 'Optional Title Here' -- [a]: http://example.com/ "Optional *oeps* Title Here" -- ]] -- -- local linktest = [[ -- [This link] (http://example.net/) -- [an example] (http://example.com/ "Title") -- [an example][1] -- [an example] [2] -- ]] -- -- lpeg.match((define_reference_parser+1)^0,reftest) -- -- inspect(references) -- -- lpeg.match((direct_link_parser/print + indirect_link_parser/print + 1)^0,linktest) --------------------------------------------------------------------------------------------- local blocktags = table.tohash { "address", "blockquote" , "center", "dir", "div", "p", "pre", "li", "ol", "ul", "dl", "dd", "form", "fieldset", "isindex", "menu", "noframes", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "ht", "script", "noscript", "table", "tbody", "tfoot", "thead", "th", "td", "tr", } ----- htmlattributevalue = squote * C((any - (blankline + squote))^0) * squote ----- + dquote * C((any - (blankline + dquote))^0) * dquote ----- + (any - S("\t >"))^1 -- any - tab - space - more ----- htmlattribute = (alphanumeric + S("_-"))^1 * spnl * (equal * spnl * htmlattributevalue)^-1 * spnl ----- htmlcomment = P(""))^0 * P("-->") ----- htmltag = less * spnl * slash^-1 * alphanumeric^1 * spnl * htmlattribute^0 * slash^-1 * spnl * more ----- ----- blocktag = Cmt(C(alphanumeric^1), function(s,i,a) return blocktags[lower(a)] and i, a end) ----- ----- openblocktag = less * Cg(blocktag, "opentag") * spnl * htmlattribute^0 * more ----- closeblocktag = less * slash * Cmt(C(alphanumeric^1) * Cb("opentag"), function(s,i,a,b) return lower(a) == lower(b) and i end) * spnl * more ----- selfclosingblocktag = less * blocktag * spnl * htmlattribute^0 * slash * more ----- ----- displayhtml = Cs { "HtmlBlock", ----- InBlockTags = openblocktag * (V("HtmlBlock") + (any - closeblocktag))^0 * closeblocktag, ----- HtmlBlock = C(V("InBlockTags") + selfclosingblocktag + htmlcomment), ----- } ----- ----- inlinehtml = Cs(htmlcomment + htmltag) -- There is no reason to support crappy html, so we expect proper attributes. local htmlattributevalue = squote * C((any - (blankline + squote))^0) * squote + dquote * C((any - (blankline + dquote))^0) * dquote local htmlattribute = (alphanumeric + S("_-"))^1 * spnl * equal * spnl * htmlattributevalue * spnl local htmlcomment = P(""))^0 * P("-->") local htmlinstruction = P("" ))^0 * P("?>" ) -- We don't care too much about matching elements and there is no reason why display elements could not -- have inline elements so the above should be patched then. Well, markdown mixed with html is not meant -- for anything else than webpages anyway. local blocktag = Cmt(C(alphanumeric^1), function(s,i,a) return blocktags[lower(a)] and i, a end) local openelement = less * alphanumeric^1 * spnl * htmlattribute^0 * more local closeelement = less * slash * alphanumeric^1 * spnl * more local emptyelement = less * alphanumeric^1 * spnl * htmlattribute^0 * slash * more local displaytext = (any - less)^1 local inlinetext = displaytext / nestedparser local displayhtml = #(less * blocktag * spnl * htmlattribute^0 * more) * Cs { "HtmlBlock", InBlockTags = openelement * (V("HtmlBlock") + displaytext)^0 * closeelement, HtmlBlock = (V("InBlockTags") + emptyelement + htmlcomment + htmlinstruction), } local inlinehtml = Cs { "HtmlBlock", InBlockTags = openelement * (V("HtmlBlock") + inlinetext)^0 * closeelement, HtmlBlock = (V("InBlockTags") + emptyelement + htmlcomment + htmlinstruction), } --------------------------------------------------------------------------------------------- local hexentity = ampersand * hash * S("Xx") * C(hexdigit ^1) * semicolon local decentity = ampersand * hash * C(digit ^1) * semicolon local tagentity = ampersand * C(alphanumeric^1) * semicolon --------------------------------------------------------------------------------------------- -- --[[ local escaped = { ["{" ] = "", ["}" ] = "", ["$" ] = "", ["&" ] = "", ["#" ] = "", ["~" ] = "", ["|" ] = "", ["%%"] = "", ["\\"] = "", } for k, v in next, escaped do escaped[k] = "\\char" .. utfbyte(k) .. "{}" end local function c_string(s) -- has to be done more often return (gsub(s,".",escaped)) end local c_linebreak = "\\crlf\n" -- is this ok? local c_space = " " local function c_paragraph(c) return c .. "\n\n" -- { "\\startparagraph ", c, " \\stopparagraph\n" } end local function listitem(c) return format("\n\\startitem\n%s\n\\stopitem\n",nestedparser(c)) end local function c_tightbulletlist(c) return format("\n\\startmarkdownitemize[packed]\n%s\\stopmarkdownitemize\n",c) end local function c_loosebulletlist(c) return format("\n\\startmarkdownitemize\n\\stopmarkdownitemize\n",c) end local function c_tightorderedlist(c) return format("\n\\startmarkdownitemize[n,packed]\n%s\\stopmarkdownitemize\n",c) end local function c_looseorderedlist(c) return format("\n\\startmarkdownitemize[n]\n%s\\stopmarkdownitemize\n",c) end local function c_inline_html(content) nofhtmlblobs = nofhtmlblobs + 1 return format("\\markdowninlinehtml{%s}",content) end local function c_display_html(content) nofhtmlblobs = nofhtmlblobs + 1 return format("\\startmarkdowndisplayhtml\n%s\n\\stopmarkdowndisplayhtml",content) end local function c_emphasis(c) return format("\\markdownemphasis{%s}",c) end local function c_strong(c) return format("\\markdownstrong{%s}",c) end local function c_blockquote(c) return format("\\startmarkdownblockquote\n%s\\stopmarkdownblockquote\n",nestedparser(c)) end local function c_verbatim(c) return format("\\startmarkdowntyping\n%s\\stopmarkdowntyping\n",c) end local function c_code(c) return format("\\markdowntype{%s}",c) end local levels = { "", "", "", "", "", "" } local function c_start_document() levels = { "", "", "", "", "", "" } return "" end local function c_stop_document() return concat(levels,"\n") or "" end local function c_heading(level,c) if level > #levels then level = #levels end local finish = concat(levels,"\n",level) or "" for i=level+1,#levels do levels[i] = "" end levels[level] = "\\stopstructurelevel" return format("%s\\startstructurelevel[markdown][title={%s}]\n",finish,c) end local function c_hrule() return "\\markdownrule\n" end local function c_link(lab,src,tit) return format("\\goto{%s}[url(%s)]",nestedparser(lab),src) end local function c_image(lab,src,tit) return format("\\externalfigure[%s]",src) end local function c_email_link(address) return format("\\goto{%s}[url(mailto:%s)]",c_string(address),address) end local function c_url_link(url) return format("\\goto{%s}[url(%s)]",c_string(url),url) end local function f_heading(c,n) return c_heading(n,c) end local function c_hex_entity(s) return utfchar(tonumber(s,16)) end local function c_dec_entity(s) return utfchar(tonumber(s)) end local function c_tag_entity(s) return s -- we can use the default resolver end --]] --------------------------------------------------------------------------------------------- --[[ local escaped = { ["<"] = "<", [">"] = ">", ["&"] = "&", ['"'] = """, } local function c_string(s) -- has to be done more often return (gsub(s,".",escaped)) end local c_linebreak = "
" local c_space = " " local function c_paragraph(c) return format("

%s

\n", c) end local function listitem(c) return format("
  • %s
  • ",nestedparser(c)) end local function c_tightbulletlist(c) return format("
      \n%s\n
    \n",c) end local function c_loosebulletlist(c) return format("
      \n%s\n
    \n",c) end local function c_tightorderedlist(c) return format("
      \n%s\n
    \n",c) end local function c_looseorderedlist(c) return format("
      \n%s\n
    \n",c) end local function c_inline_html(content) nofhtmlblobs = nofhtmlblobs + 1 return content end local function c_display_html(content) nofhtmlblobs = nofhtmlblobs + 1 return format("\n%s\n",content) end local function c_emphasis(c) return format("%s",c) end local function c_strong(c) return format("%s",c) end local function c_blockquote(c) return format("
    \n%s\n
    ",nestedparser(c)) end local function c_verbatim(c) return format("
    %s
    ",c) end local function c_code(c) return format("%s",c) end local c_start_document = "" local c_stop_document = "" local function c_heading(level,c) return format("%s\n",level,c,level) end local function c_hrule() return "
    \n" end local function c_link(lab,src,tit) local titattr = #tit > 0 and format(" title=%q",tit) or "" return format("%s",src,titattr,nestedparser(lab)) end local function c_image(lab,src,tit) return format("%s",src,tit,nestedparser(lab)) end local function c_email_link(address) return format("%s","mailto:",address,c_escape(address)) end local function c_url_link(url) return format("%s",url,c_string(url)) end local function f_heading(c,n) return c_heading(n,c) end local function c_hex_entity(s) return utfchar(tonumber(s,16)) end local function c_dec_entity(s) return utfchar(tonumber(s)) end local function c_tag_entity(s) return format("&%s;",s) end --]] --------------------------------------------------------------------------------------------- local Str = normalchar^1 / c_string local Space = spacechar^1 / c_space local Symbol = specialchar / c_string local Code = inticks / c_code local HeadingStart = C(hash * hash^-5) / length local HeadingStop = optionalspace * hash^0 * optionalspace * newline * blanklines local HeadingLevel = equal^3 * Cc(1) + dash ^3 * Cc(2) local NormalEndline = optionalspace * newline * -( blankline + more + HeadingStart + ( line * (P("===")^3 + P("---")^3) * newline ) ) / c_space local LineBreak = P(" ") * NormalEndline / c_linebreak local TerminalEndline = optionalspace * newline * eof / "" local Endline = LineBreak + TerminalEndline + NormalEndline local AutoLinkUrl = less * C(alphanumeric^1 * P("://") * (any - (newline + more))^1) * more / c_url_link local AutoLinkEmail = less * C((alphanumeric + S("-_+"))^1 * P("@") * (any - (newline + more))^1) * more / c_email_link local DirectLink = direct_link_parser / c_link local IndirectLink = indirect_link_parser / c_link local ImageLink = exclamation * (direct_link_parser + indirect_link_parser) / c_image -- we can combine this with image ... smaller lpeg local UlOrStarLine = asterisk^4 + underscore^4 + (spaces * S("*_")^1 * #spaces) / c_string local EscapedChar = P("\\") * C(P(1 - newline)) / c_string local InlineHtml = inlinehtml / c_inline_html local DisplayHtml = displayhtml / c_display_html local HtmlEntity = hexentity / c_hex_entity + decentity / c_dec_entity + tagentity / c_tag_entity local NestedList = Cs(optionallyindentedline - (bullet + enumerator))^1 / nestedparser local ListBlockLine = -blankline * -(indent^-1 * (bullet + enumerator)) * optionallyindentedline local Verbatim = Cs(blanklines * (indentedline - blankline)^1) / c_verbatim * (blankline^1 + eof) -- not really needed, probably capture trailing? we can do that beforehand local Blockquote = Cs(( ((nonindentspace * more * space^-1)/"" * linechar^0 * newline)^1 * ((linechar - blankline)^1 * newline)^0 * blankline^0 )^1) / c_blockquote local HorizontalRule = (lineof_asterisks + lineof_dashes + lineof_underscores) / c_hrule local Reference = define_reference_parser / "" -- could be a mini grammar local ListBlock = line * ListBlockLine^0 local ListContinuationBlock = blanklines * indent * ListBlock local ListItem = Cs(ListBlock * (NestedList + ListContinuationBlock^0)) / listitem ---- LeadingLines = blankline^0 / "" ---- TrailingLines = blankline^1 * #(any) / "\n" syntax = Cs { "Document", Document = V("Display")^0, Display = blankline -- ^1/"\n" + Blockquote + Verbatim + Reference + HorizontalRule + HeadingStart * optionalspace * Cs((V("Inline") - HeadingStop)^1) * HeadingStop / c_heading + Cs((V("Inline") - Endline)^1) * newline * HeadingLevel * newline * blanklines / f_heading + Cs((bullet /"" * ListItem)^1) * blanklines * -bullet / c_tightbulletlist + Cs((bullet /"" * ListItem * C(blanklines))^1) / c_loosebulletlist + Cs((enumerator /"" * ListItem)^1) * blanklines * -enumerator / c_tightorderedlist + Cs((enumerator /"" * ListItem * C(blanklines))^1) / c_looseorderedlist + DisplayHtml + nonindentspace * Cs(V("Inline")^1)* newline * blankline^1 / c_paragraph + V("Inline")^1, Inline = Str + Space + Endline + UlOrStarLine -- still needed ? + doubleasterisks * -spaceornewline * Cs((V("Inline") - doubleasterisks )^1) * doubleasterisks / c_strong + doubleunderscores * -spaceornewline * Cs((V("Inline") - doubleunderscores)^1) * doubleunderscores / c_strong + asterisk * -spaceornewline * Cs((V("Inline") - asterisk )^1) * asterisk / c_emphasis + underscore * -spaceornewline * Cs((V("Inline") - underscore )^1) * underscore / c_emphasis + ImageLink + DirectLink + IndirectLink + AutoLinkUrl + AutoLinkEmail + Code + InlineHtml + HtmlEntity + EscapedChar + Symbol, } --------------------------------------------------------------------------------------------- local function convert(str) nofruns = nofruns + 1 nofbytes = nofbytes + #str statistics.starttiming(markdown) referenceparser(str) local result = c_start_document() .. nestedparser(str) .. c_stop_document() statistics.stoptiming(markdown) return result end markdown.convert = convert function markdown.typesetstring(data) if data and data ~= "" then local result = convert(data) context.viafile(result) end end function markdown.typesetbuffer(name) markdown.typesetstring(buffers.getcontent(name)) end function markdown.typesetfile(name) local fullname = resolvers.findctxfile(name) if fullname and fullname ~= "" then markdown.typesetstring(io.loaddata(fullname)) end end statistics.register("markdown",function() if nofruns > 0 then return format("%s bytes converted, %s runs, %s html blobs, %s seconds used", nofbytes, nofruns, nofhtmlblobs, statistics.elapsedtime(markdown)) end end) --------------------------------------------------------------------------------------------- --~ context.starttext() --~ moduledata.markdown.convert(str) --~ context.stoptext() if not tex.jobname then local one = [[ Test *123* ========== BOLD *BOLD* BOLD
    PRE PRE PRE
    * Test ** Test * Test1 * Test2 * Test Test ==== > test > test **123** *123* > test `code` test Test ==== > test > test > test test oeps more code code oeps [an example][a] [an example] [2] [a]: http://example.com/ "Optional *oeps* Title Here" [2]: http://example.com/ 'Optional Title Here' [3]: http://example.com/ (Optional Title Here) [an example][a] [an example] [2] [an [tricky] example](http://example.com/ "Title") [This **xx** link](http://example.net/) ]] -- This snippet takes some 4 seconds in the original parser (the one that is -- a bit clearer from the perspective of grammars but somewhat messy with -- respect to the captures. In the above parser it takes .1 second. Also, -- in the later case only memory is the limit. local two = [[ Test ==== * Test ** Test * Test ** Test * Test Test ==== > test > test > test test Test ==== > test > test > test test ]] local function test(str) local n = 1 -- 000 local t = os.clock() local one = convert(str) -- print("runtime",1,#str,#one,os.clock()-t) str = string.rep(str,n) local t = os.clock() local two = convert(str) print(two) -- print("runtime",n,#str,#two,os.clock()-t) -- print(format("==============\n%s\n==============",one)) end -- test(one) -- test(two) -- test(io.read("*all")) end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-07.tex0000644000175000017500000001270211754241457023701 0ustar norbertnorbert%D \module %D [ file=s-pre-07, %D version=1999.08.20, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 7, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 style was made for the \NTS\ presentation at %D \EUROTEX\ 1999. It's a wink to programming in a webbed way. %D This is just one way of implementing such a style. Today %D we have more \METAPOST\ interfacing available, and %D thereby moore tools and alternative ways to reach such a %D goal. I must admit that the main macro looks fuzzy. On %D the other hand, the presentation can look quite structured. %D %D \starttyping %D \Topics{...} %D %D \StartIdeas %D \Topic{...} %D \StartIdea ... \StopIdea %D \StartIdea ... \StopIdea %D \StopIdeas %D \stoptyping \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] \usemodule [abr-02] \setuppapersize [S6][S6] \setuplayout [topspace=0cm, backspace=0cm, header=0pt, footer=0pt, width=middle, height=middle] \setupinteractionscreen [option=max] %D In order to prevent loops due to random placement, we %D keep the random seed reasonable constant. \setupsystem [random=big] \setupcolors [state=start] \definecolor[gray] [s=.4] \definecolor[lightgray][s=.9] \definecolor[red] [r=.4] \definecolor[cyan] [g=.4,b=.4] \definecolor[green][g=.4] \definecolor[magenta][r=.4,b=.4] \definecolor[blue] [b=.4] \definecolor[yellow] [r=.4,g=.4] \definecolor[PageColor][gray] \definecolor[TextColor][lightgray] \definecolor[LineColor][yellow] \definecolor[linecolor 1][red] \definecolor[linecolor 5][cyan] \definecolor[linecolor 2][green] \definecolor[linecolor 6][magenta] \definecolor[linecolor 3][blue] \definecolor[linecolor 4][yellow] \setupinteraction [state=start, display=new, color=LineColor, contrastcolor=LineColor] \startuseMPgraphic{shape} path p ; color c, w ; numeric width, height ; c := \MPcolor{LineColor} ; w := \MPcolor{TextColor} ; width := \overlaywidth ; height := \overlayheight ; pickup pencircle scaled .5cm ; p := unitcircle xscaled \MPw{\Idea} yscaled \MPh{\Idea} shifted \MPxy{\Idea} ; for z = (0,.5height), (width,.5height), (.5width,0), (.5width,height), (0,0), (width,height), (0,height), (width,0) : draw center p -- z withcolor c ; endfor ; fill p withcolor w ; draw p withcolor c ; p := unitcircle xscaled \MPw{\Page} yscaled \MPh{\Page} shifted \MPxy{\Page} ; pickup pencircle scaled .25cm ; fill p withcolor w ; draw p withcolor c ; draw unitsquare xscaled width yscaled height withcolor c ; \stopuseMPgraphic \defineoverlay [shape] [\useMPgraphic{shape}] \defineoverlay [nextpage] [\overlaybutton{nextpage}] \defineoverlay [previouspage] [\overlaybutton{previouspage}] \defineoverlay [content] [\overlaybutton{content}] \defineoverlay [forward] [\overlaybutton{forward}] \setupbackgrounds [page] [background={color,previouspage,shape}, backgroundcolor=PageColor] \def\StartIdea% {\xdef\Idea{idea:\realfolio} \xdef\Page{page:\realfolio} \startstandardmakeup \dontcomplain \vbox to \makeupheight \bgroup \getrandomdimen\scratchdimen{75pt}{600pt}\vskip 0pt plus \scratchdimen \hbox to \makeupwidth \bgroup \getrandomdimen\scratchdimen{75pt}{600pt}\hskip 0pt plus \scratchdimen \hpos{idea:\realfolio} \bgroup \framed [width=.6\hsize,height=fit,offset=2cm,align=middle, frame=off,strut=no,background=forward] \bgroup \setupwhitespace[big]} \def\StopIdea% {\egroup \egroup \getrandomdimen\scratchdimen{75pt}{600pt}\hskip 0pt plus \scratchdimen \egroup \getrandomdimen\scratchdimen{75pt}{600pt}\vskip 0pt plus \scratchdimen \egroup \ifx\CurrentTopic\empty \else \vskip-\makeupheight \vbox to \makeupheight {\vfill \ifx\CurrentListTopic\empty\else \writetolist[Topic]{}{\CurrentListTopic} \fi \hbox to \makeupwidth {\hfill \hpos{page:\realfolio} {\framed [offset=.5cm,frame=off,background=content] {\bf\ignorespaces\CurrentTopic\unskip}}% \hskip.5cm} \vskip.5cm} \fi \stopstandardmakeup \let\CurrentListTopic\empty} \definelist [Topic] \setuplist [Topic] [alternative=f, expansion=command] \let\CurrentTopic\empty \let\CurrentListTopic\empty \long\def\StartTopic#1\StopTopic {\long\def\CurrentTopic{#1} \let\CurrentListTopic\CurrentTopic} \def\Topic#1% {\StartTopic#1\StopTopic} \def\Topics#1% {\StartIdeas \def\CurrentTopic{#1} \StartIdea \pagereference[content] \placelist[Topic][criterium=all] \StopIdea \StopIdeas} \newcounter\CurrentIdeas \def\StartIdeas% {\ifnum\CurrentIdeas=6 \doglobal\newcounter\CurrentIdeas \fi \doglobal\increment\CurrentIdeas \definecolor[LineColor][linecolor \CurrentIdeas]} \def\StopIdeas% {} \doifnotmode{demo}{\endinput} %D The (rather silly) demo section. \starttext \Topics{This is about \unknown} \StartIdeas \Topic{Some topic} \StartIdea An idea \unknown \StopIdea \StartIdea \unknown\ and another \StopIdea \StopIdeas \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/mtx-context-sql.tex0000644000175000017500000000305012161703335025501 0ustar norbertnorbert%D \module %D [ file=mtx-context-sql-tables, %D version=2012.10.19, %D title=\CONTEXT\ Extra Trickry, %D subtitle=SQL Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % begin help % % usage: context --extra=sql --tables [options] % % --host : hostname (default: localhost) % --username : username (default: root) % --password : password % --database : database of which we want tables % % example: context --extra=sql --tables --host=localhost --username=root --password=*** --database=test % % end help \usemodule [art-01,sql-tables] \setupbodyfont [10pt] \setupheader [state=high] \setuptabulate [before={\blank[big,samepage]}] \starttext \startluacode require("s-sql-tables") local arguments = environment.arguments local presets = arguments.presets local preloaded = presets and table.load(presets) or { } local presets = { host = preloaded.host or arguments.host or "localhost", username = preloaded.username or arguments.username or "root", password = preloaded.password or arguments.password or "", database = preloaded.database or arguments.database or "", } if arguments.tables then moduledata.sql.tables.showdefined(presets) end \stopluacode \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/regi-8859-3.mkii0000644000175000017500000002540311754241457024263 0ustar norbertnorbert%D \module %D [ file=regi-8859-3, %D version=2005.12.26, %D title=\CONTEXT\ Encoding Macros, %D subtitle=iso-8859-3 (South European), %D author=script-generated, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Support for iso-8859-3/Latin3 input encoding (regime) for South %D European languages, esp. for Esperanto and Maltese. %D %D Usage: \type{\enableregime[8859-3]} (see \type {regi-syn} for %D alternatives calls). \startregime[8859-3] \defineactivetoken 128 {\unknownchar} % 0080 \defineactivetoken 129 {\unknownchar} % 0081 \defineactivetoken 130 {\unknownchar} % 0082 \defineactivetoken 131 {\unknownchar} % 0083 \defineactivetoken 132 {\unknownchar} % 0084 \defineactivetoken 133 {\unknownchar} % 0085 \defineactivetoken 134 {\unknownchar} % 0086 \defineactivetoken 135 {\unknownchar} % 0087 \defineactivetoken 136 {\unknownchar} % 0088 \defineactivetoken 137 {\unknownchar} % 0089 \defineactivetoken 138 {\unknownchar} % 008A \defineactivetoken 139 {\unknownchar} % 008B \defineactivetoken 140 {\unknownchar} % 008C \defineactivetoken 141 {\unknownchar} % 008D \defineactivetoken 142 {\unknownchar} % 008E \defineactivetoken 143 {\unknownchar} % 008F \defineactivetoken 144 {\unknownchar} % 0090 \defineactivetoken 145 {\unknownchar} % 0091 \defineactivetoken 146 {\unknownchar} % 0092 \defineactivetoken 147 {\unknownchar} % 0093 \defineactivetoken 148 {\unknownchar} % 0094 \defineactivetoken 149 {\unknownchar} % 0095 \defineactivetoken 150 {\unknownchar} % 0096 \defineactivetoken 151 {\unknownchar} % 0097 \defineactivetoken 152 {\unknownchar} % 0098 \defineactivetoken 153 {\unknownchar} % 0099 \defineactivetoken 154 {\unknownchar} % 009A \defineactivetoken 155 {\unknownchar} % 009B \defineactivetoken 156 {\unknownchar} % 009C \defineactivetoken 157 {\unknownchar} % 009D \defineactivetoken 158 {\unknownchar} % 009E \defineactivetoken 159 {\unknownchar} % 009F \defineactivetoken 160 {\nonbreakablespace} % 00A0 NO-BREAK SPACE \defineactivetoken 161 {\Hstroke} % 0126 LATIN CAPITAL LETTER H WITH STROKE \defineactivetoken 162 {\textbreve} % 02D8 BREVE \defineactivetoken 163 {\textsterling} % 00A3 POUND SIGN \defineactivetoken 164 {\textcurrency} % 00A4 CURRENCY SIGN \defineactivetoken 166 {\Hcircumflex} % 0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX \defineactivetoken 167 {\sectionmark} % 00A7 SECTION SIGN \defineactivetoken 168 {\textdiaeresis} % 00A8 DIAERESIS \defineactivetoken 169 {\Idotaccent} % 0130 LATIN CAPITAL LETTER I WITH DOT ABOVE \defineactivetoken 170 {\Scedilla} % 015E LATIN CAPITAL LETTER S WITH CEDILLA \defineactivetoken 171 {\Gbreve} % 011E LATIN CAPITAL LETTER G WITH BREVE \defineactivetoken 172 {\Jcircumflex} % 0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX \defineactivetoken 173 {\softhyphen} % 00AD SOFT HYPHEN \defineactivetoken 175 {\Zdotaccent} % 017B LATIN CAPITAL LETTER Z WITH DOT ABOVE \defineactivetoken 176 {\textdegree} % 00B0 DEGREE SIGN \defineactivetoken 177 {\hstroke} % 0127 LATIN SMALL LETTER H WITH STROKE \defineactivetoken 178 {\twosuperior} % 00B2 SUPERSCRIPT TWO \defineactivetoken 179 {\threesuperior} % 00B3 SUPERSCRIPT THREE \defineactivetoken 180 {\textacute} % 00B4 ACUTE ACCENT \defineactivetoken 181 {\textmu} % 00B5 MICRO SIGN \defineactivetoken 182 {\hcircumflex} % 0125 LATIN SMALL LETTER H WITH CIRCUMFLEX \defineactivetoken 183 {\periodcentered} % 00B7 MIDDLE DOT \defineactivetoken 184 {\textcedilla} % 00B8 CEDILLA \defineactivetoken 185 {\dotlessi} % 0131 LATIN SMALL LETTER DOTLESS I \defineactivetoken 186 {\scedilla} % 015F LATIN SMALL LETTER S WITH CEDILLA \defineactivetoken 187 {\gbreve} % 011F LATIN SMALL LETTER G WITH BREVE \defineactivetoken 188 {\jcircumflex} % 0135 LATIN SMALL LETTER J WITH CIRCUMFLEX \defineactivetoken 189 {\onehalf} % 00BD VULGAR FRACTION ONE HALF \defineactivetoken 191 {\zdotaccent} % 017C LATIN SMALL LETTER Z WITH DOT ABOVE \defineactivetoken 192 {\Agrave} % 00C0 LATIN CAPITAL LETTER A WITH GRAVE \defineactivetoken 193 {\Aacute} % 00C1 LATIN CAPITAL LETTER A WITH ACUTE \defineactivetoken 194 {\Acircumflex} % 00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX \defineactivetoken 196 {\Adiaeresis} % 00C4 LATIN CAPITAL LETTER A WITH DIAERESIS \defineactivetoken 197 {\Cdotaccent} % 010A LATIN CAPITAL LETTER C WITH DOT ABOVE \defineactivetoken 198 {\Ccircumflex} % 0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX \defineactivetoken 199 {\Ccedilla} % 00C7 LATIN CAPITAL LETTER C WITH CEDILLA \defineactivetoken 200 {\Egrave} % 00C8 LATIN CAPITAL LETTER E WITH GRAVE \defineactivetoken 201 {\Eacute} % 00C9 LATIN CAPITAL LETTER E WITH ACUTE \defineactivetoken 202 {\Ecircumflex} % 00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX \defineactivetoken 203 {\Ediaeresis} % 00CB LATIN CAPITAL LETTER E WITH DIAERESIS \defineactivetoken 204 {\Igrave} % 00CC LATIN CAPITAL LETTER I WITH GRAVE \defineactivetoken 205 {\Iacute} % 00CD LATIN CAPITAL LETTER I WITH ACUTE \defineactivetoken 206 {\Icircumflex} % 00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX \defineactivetoken 207 {\Idiaeresis} % 00CF LATIN CAPITAL LETTER I WITH DIAERESIS \defineactivetoken 209 {\Ntilde} % 00D1 LATIN CAPITAL LETTER N WITH TILDE \defineactivetoken 210 {\Ograve} % 00D2 LATIN CAPITAL LETTER O WITH GRAVE \defineactivetoken 211 {\Oacute} % 00D3 LATIN CAPITAL LETTER O WITH ACUTE \defineactivetoken 212 {\Ocircumflex} % 00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX \defineactivetoken 213 {\Gdotaccent} % 0120 LATIN CAPITAL LETTER G WITH DOT ABOVE \defineactivetoken 214 {\Odiaeresis} % 00D6 LATIN CAPITAL LETTER O WITH DIAERESIS \defineactivetoken 215 {\textmultiply} % 00D7 MULTIPLICATION SIGN \defineactivetoken 216 {\Gcircumflex} % 011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX \defineactivetoken 217 {\Ugrave} % 00D9 LATIN CAPITAL LETTER U WITH GRAVE \defineactivetoken 218 {\Uacute} % 00DA LATIN CAPITAL LETTER U WITH ACUTE \defineactivetoken 219 {\Ucircumflex} % 00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX \defineactivetoken 220 {\Udiaeresis} % 00DC LATIN CAPITAL LETTER U WITH DIAERESIS \defineactivetoken 221 {\Ubreve} % 016C LATIN CAPITAL LETTER U WITH BREVE \defineactivetoken 222 {\Scircumflex} % 015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX \defineactivetoken 223 {\ssharp} % 00DF LATIN SMALL LETTER SHARP S \defineactivetoken 224 {\agrave} % 00E0 LATIN SMALL LETTER A WITH GRAVE \defineactivetoken 225 {\aacute} % 00E1 LATIN SMALL LETTER A WITH ACUTE \defineactivetoken 226 {\acircumflex} % 00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX \defineactivetoken 228 {\adiaeresis} % 00E4 LATIN SMALL LETTER A WITH DIAERESIS \defineactivetoken 229 {\cdotaccent} % 010B LATIN SMALL LETTER C WITH DOT ABOVE \defineactivetoken 230 {\ccircumflex} % 0109 LATIN SMALL LETTER C WITH CIRCUMFLEX \defineactivetoken 231 {\ccedilla} % 00E7 LATIN SMALL LETTER C WITH CEDILLA \defineactivetoken 232 {\egrave} % 00E8 LATIN SMALL LETTER E WITH GRAVE \defineactivetoken 233 {\eacute} % 00E9 LATIN SMALL LETTER E WITH ACUTE \defineactivetoken 234 {\ecircumflex} % 00EA LATIN SMALL LETTER E WITH CIRCUMFLEX \defineactivetoken 235 {\ediaeresis} % 00EB LATIN SMALL LETTER E WITH DIAERESIS \defineactivetoken 236 {\igrave} % 00EC LATIN SMALL LETTER I WITH GRAVE \defineactivetoken 237 {\iacute} % 00ED LATIN SMALL LETTER I WITH ACUTE \defineactivetoken 238 {\icircumflex} % 00EE LATIN SMALL LETTER I WITH CIRCUMFLEX \defineactivetoken 239 {\idiaeresis} % 00EF LATIN SMALL LETTER I WITH DIAERESIS \defineactivetoken 241 {\ntilde} % 00F1 LATIN SMALL LETTER N WITH TILDE \defineactivetoken 242 {\ograve} % 00F2 LATIN SMALL LETTER O WITH GRAVE \defineactivetoken 243 {\oacute} % 00F3 LATIN SMALL LETTER O WITH ACUTE \defineactivetoken 244 {\ocircumflex} % 00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX \defineactivetoken 245 {\gdotaccent} % 0121 LATIN SMALL LETTER G WITH DOT ABOVE \defineactivetoken 246 {\odiaeresis} % 00F6 LATIN SMALL LETTER O WITH DIAERESIS \defineactivetoken 247 {\textdiv} % 00F7 DIVISION SIGN \defineactivetoken 248 {\gcircumflex} % 011D LATIN SMALL LETTER G WITH CIRCUMFLEX \defineactivetoken 249 {\ugrave} % 00F9 LATIN SMALL LETTER U WITH GRAVE \defineactivetoken 250 {\uacute} % 00FA LATIN SMALL LETTER U WITH ACUTE \defineactivetoken 251 {\ucircumflex} % 00FB LATIN SMALL LETTER U WITH CIRCUMFLEX \defineactivetoken 252 {\udiaeresis} % 00FC LATIN SMALL LETTER U WITH DIAERESIS \defineactivetoken 253 {\ubreve} % 016D LATIN SMALL LETTER U WITH BREVE \defineactivetoken 254 {\scircumflex} % 015D LATIN SMALL LETTER S WITH CIRCUMFLEX \defineactivetoken 255 {\textdotaccent} % 02D9 DOT ABOVE \stopregime context-2013.05.28.20130704/texmf-dist/tex/context/base/font-age.lua0000644000175000017500000027660212161703335024112 0ustar norbertnorbertif not modules then modules = { } end modules ['font-age'] = { version = 1.001, comment = "companion to luatex-fonts.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "derived from http://www.adobe.com/devnet/opentype/archives/glyphlist.txt", original = "Adobe Glyph List, version 2.0, September 20, 2002", dataonly = true, } if context then logs.report("fatal error","this module is not for context") os.exit() end return { -- generated: inspect(fonts.encodings.agl.unicodes) ["A"]=65, ["AE"]=198, ["AEacute"]=508, ["AEmacron"]=482, ["Aacute"]=193, ["Abreve"]=258, ["Abreveacute"]=7854, ["Abrevecyrillic"]=1232, ["Abrevedotbelow"]=7862, ["Abrevegrave"]=7856, ["Abrevehookabove"]=7858, ["Abrevetilde"]=7860, ["Acaron"]=461, ["Acircle"]=9398, ["Acircumflex"]=194, ["Acircumflexacute"]=7844, ["Acircumflexdotbelow"]=7852, ["Acircumflexgrave"]=7846, ["Acircumflexhookabove"]=7848, ["Acircumflextilde"]=7850, ["Acyrillic"]=1040, ["Adblgrave"]=512, ["Adieresis"]=196, ["Adieresiscyrillic"]=1234, ["Adieresismacron"]=478, ["Adotbelow"]=7840, ["Adotmacron"]=480, ["Agrave"]=192, ["Ahookabove"]=7842, ["Aiecyrillic"]=1236, ["Ainvertedbreve"]=514, ["Alpha"]=913, ["Alphatonos"]=902, ["Amacron"]=256, ["Amonospace"]=65313, ["Aogonek"]=260, ["Aring"]=197, ["Aringacute"]=506, ["Aringbelow"]=7680, ["Atilde"]=195, ["Aybarmenian"]=1329, ["B"]=66, ["Bcircle"]=9399, ["Bdotaccent"]=7682, ["Bdotbelow"]=7684, ["Becyrillic"]=1041, ["Benarmenian"]=1330, ["Beta"]=914, ["Bhook"]=385, ["Blinebelow"]=7686, ["Bmonospace"]=65314, ["Btopbar"]=386, ["C"]=67, ["Caarmenian"]=1342, ["Cacute"]=262, ["Ccaron"]=268, ["Ccedilla"]=199, ["Ccedillaacute"]=7688, ["Ccircle"]=9400, ["Ccircumflex"]=264, ["Cdot"]=266, ["Cdotaccent"]=266, ["Chaarmenian"]=1353, ["Cheabkhasiancyrillic"]=1212, ["Checyrillic"]=1063, ["Chedescenderabkhasiancyrillic"]=1214, ["Chedescendercyrillic"]=1206, ["Chedieresiscyrillic"]=1268, ["Cheharmenian"]=1347, ["Chekhakassiancyrillic"]=1227, ["Cheverticalstrokecyrillic"]=1208, ["Chi"]=935, ["Chook"]=391, ["Cmonospace"]=65315, ["Coarmenian"]=1361, ["D"]=68, ["DZ"]=497, ["DZcaron"]=452, ["Daarmenian"]=1332, ["Dafrican"]=393, ["Dcaron"]=270, ["Dcedilla"]=7696, ["Dcircle"]=9401, ["Dcircumflexbelow"]=7698, ["Dcroat"]=272, ["Ddotaccent"]=7690, ["Ddotbelow"]=7692, ["Decyrillic"]=1044, ["Deicoptic"]=1006, ["Delta"]=8710, ["Deltagreek"]=916, ["Dhook"]=394, ["Digammagreek"]=988, ["Djecyrillic"]=1026, ["Dlinebelow"]=7694, ["Dmonospace"]=65316, ["Dslash"]=272, ["Dtopbar"]=395, ["Dz"]=498, ["Dzcaron"]=453, ["Dzeabkhasiancyrillic"]=1248, ["Dzecyrillic"]=1029, ["Dzhecyrillic"]=1039, ["E"]=69, ["Eacute"]=201, ["Ebreve"]=276, ["Ecaron"]=282, ["Ecedillabreve"]=7708, ["Echarmenian"]=1333, ["Ecircle"]=9402, ["Ecircumflex"]=202, ["Ecircumflexacute"]=7870, ["Ecircumflexbelow"]=7704, ["Ecircumflexdotbelow"]=7878, ["Ecircumflexgrave"]=7872, ["Ecircumflexhookabove"]=7874, ["Ecircumflextilde"]=7876, ["Ecyrillic"]=1028, ["Edblgrave"]=516, ["Edieresis"]=203, ["Edot"]=278, ["Edotaccent"]=278, ["Edotbelow"]=7864, ["Efcyrillic"]=1060, ["Egrave"]=200, ["Eharmenian"]=1335, ["Ehookabove"]=7866, ["Eightroman"]=8551, ["Einvertedbreve"]=518, ["Eiotifiedcyrillic"]=1124, ["Elcyrillic"]=1051, ["Elevenroman"]=8554, ["Emacron"]=274, ["Emacronacute"]=7702, ["Emacrongrave"]=7700, ["Emcyrillic"]=1052, ["Emonospace"]=65317, ["Encyrillic"]=1053, ["Endescendercyrillic"]=1186, ["Eng"]=330, ["Enghecyrillic"]=1188, ["Enhookcyrillic"]=1223, ["Eogonek"]=280, ["Eopen"]=400, ["Epsilon"]=917, ["Epsilontonos"]=904, ["Ercyrillic"]=1056, ["Ereversed"]=398, ["Ereversedcyrillic"]=1069, ["Escyrillic"]=1057, ["Esdescendercyrillic"]=1194, ["Esh"]=425, ["Eta"]=919, ["Etarmenian"]=1336, ["Etatonos"]=905, ["Eth"]=208, ["Etilde"]=7868, ["Etildebelow"]=7706, ["Euro"]=8364, ["Ezh"]=439, ["Ezhcaron"]=494, ["Ezhreversed"]=440, ["F"]=70, ["Fcircle"]=9403, ["Fdotaccent"]=7710, ["Feharmenian"]=1366, ["Feicoptic"]=996, ["Fhook"]=401, ["Fitacyrillic"]=1138, ["Fiveroman"]=8548, ["Fmonospace"]=65318, ["Fourroman"]=8547, ["G"]=71, ["GBsquare"]=13191, ["Gacute"]=500, ["Gamma"]=915, ["Gammaafrican"]=404, ["Gangiacoptic"]=1002, ["Gbreve"]=286, ["Gcaron"]=486, ["Gcedilla"]=290, ["Gcircle"]=9404, ["Gcircumflex"]=284, ["Gcommaaccent"]=290, ["Gdot"]=288, ["Gdotaccent"]=288, ["Gecyrillic"]=1043, ["Ghadarmenian"]=1346, ["Ghemiddlehookcyrillic"]=1172, ["Ghestrokecyrillic"]=1170, ["Gheupturncyrillic"]=1168, ["Ghook"]=403, ["Gimarmenian"]=1331, ["Gjecyrillic"]=1027, ["Gmacron"]=7712, ["Gmonospace"]=65319, ["Gsmallhook"]=667, ["Gstroke"]=484, ["H"]=72, ["H18533"]=9679, ["H18543"]=9642, ["H18551"]=9643, ["H22073"]=9633, ["HPsquare"]=13259, ["Haabkhasiancyrillic"]=1192, ["Hadescendercyrillic"]=1202, ["Hardsigncyrillic"]=1066, ["Hbar"]=294, ["Hbrevebelow"]=7722, ["Hcedilla"]=7720, ["Hcircle"]=9405, ["Hcircumflex"]=292, ["Hdieresis"]=7718, ["Hdotaccent"]=7714, ["Hdotbelow"]=7716, ["Hmonospace"]=65320, ["Hoarmenian"]=1344, ["Horicoptic"]=1000, ["Hzsquare"]=13200, ["I"]=73, ["IAcyrillic"]=1071, ["IJ"]=306, ["IUcyrillic"]=1070, ["Iacute"]=205, ["Ibreve"]=300, ["Icaron"]=463, ["Icircle"]=9406, ["Icircumflex"]=206, ["Icyrillic"]=1030, ["Idblgrave"]=520, ["Idieresis"]=207, ["Idieresisacute"]=7726, ["Idieresiscyrillic"]=1252, ["Idot"]=304, ["Idotaccent"]=304, ["Idotbelow"]=7882, ["Iebrevecyrillic"]=1238, ["Iecyrillic"]=1045, ["Ifraktur"]=8465, ["Igrave"]=204, ["Ihookabove"]=7880, ["Iicyrillic"]=1048, ["Iinvertedbreve"]=522, ["Iishortcyrillic"]=1049, ["Imacron"]=298, ["Imacroncyrillic"]=1250, ["Imonospace"]=65321, ["Iniarmenian"]=1339, ["Iocyrillic"]=1025, ["Iogonek"]=302, ["Iota"]=921, ["Iotaafrican"]=406, ["Iotadieresis"]=938, ["Iotatonos"]=906, ["Istroke"]=407, ["Itilde"]=296, ["Itildebelow"]=7724, ["Izhitsacyrillic"]=1140, ["Izhitsadblgravecyrillic"]=1142, ["J"]=74, ["Jaarmenian"]=1345, ["Jcircle"]=9407, ["Jcircumflex"]=308, ["Jecyrillic"]=1032, ["Jheharmenian"]=1355, ["Jmonospace"]=65322, ["K"]=75, ["KBsquare"]=13189, ["KKsquare"]=13261, ["Kabashkircyrillic"]=1184, ["Kacute"]=7728, ["Kacyrillic"]=1050, ["Kadescendercyrillic"]=1178, ["Kahookcyrillic"]=1219, ["Kappa"]=922, ["Kastrokecyrillic"]=1182, ["Kaverticalstrokecyrillic"]=1180, ["Kcaron"]=488, ["Kcedilla"]=310, ["Kcircle"]=9408, ["Kcommaaccent"]=310, ["Kdotbelow"]=7730, ["Keharmenian"]=1364, ["Kenarmenian"]=1343, ["Khacyrillic"]=1061, ["Kheicoptic"]=998, ["Khook"]=408, ["Kjecyrillic"]=1036, ["Klinebelow"]=7732, ["Kmonospace"]=65323, ["Koppacyrillic"]=1152, ["Koppagreek"]=990, ["Ksicyrillic"]=1134, ["L"]=76, ["LJ"]=455, ["Lacute"]=313, ["Lambda"]=923, ["Lcaron"]=317, ["Lcedilla"]=315, ["Lcircle"]=9409, ["Lcircumflexbelow"]=7740, ["Lcommaaccent"]=315, ["Ldot"]=319, ["Ldotaccent"]=319, ["Ldotbelow"]=7734, ["Ldotbelowmacron"]=7736, ["Liwnarmenian"]=1340, ["Lj"]=456, ["Ljecyrillic"]=1033, ["Llinebelow"]=7738, ["Lmonospace"]=65324, ["Lslash"]=321, ["M"]=77, ["MBsquare"]=13190, ["Macute"]=7742, ["Mcircle"]=9410, ["Mdotaccent"]=7744, ["Mdotbelow"]=7746, ["Menarmenian"]=1348, ["Mmonospace"]=65325, ["Mturned"]=412, ["Mu"]=924, ["N"]=78, ["NJ"]=458, ["Nacute"]=323, ["Ncaron"]=327, ["Ncedilla"]=325, ["Ncircle"]=9411, ["Ncircumflexbelow"]=7754, ["Ncommaaccent"]=325, ["Ndotaccent"]=7748, ["Ndotbelow"]=7750, ["Nhookleft"]=413, ["Nineroman"]=8552, ["Nj"]=459, ["Njecyrillic"]=1034, ["Nlinebelow"]=7752, ["Nmonospace"]=65326, ["Nowarmenian"]=1350, ["Ntilde"]=209, ["Nu"]=925, ["O"]=79, ["OE"]=338, ["Oacute"]=211, ["Obarredcyrillic"]=1256, ["Obarreddieresiscyrillic"]=1258, ["Obreve"]=334, ["Ocaron"]=465, ["Ocenteredtilde"]=415, ["Ocircle"]=9412, ["Ocircumflex"]=212, ["Ocircumflexacute"]=7888, ["Ocircumflexdotbelow"]=7896, ["Ocircumflexgrave"]=7890, ["Ocircumflexhookabove"]=7892, ["Ocircumflextilde"]=7894, ["Ocyrillic"]=1054, ["Odblacute"]=336, ["Odblgrave"]=524, ["Odieresis"]=214, ["Odieresiscyrillic"]=1254, ["Odotbelow"]=7884, ["Ograve"]=210, ["Oharmenian"]=1365, ["Ohm"]=8486, ["Ohookabove"]=7886, ["Ohorn"]=416, ["Ohornacute"]=7898, ["Ohorndotbelow"]=7906, ["Ohorngrave"]=7900, ["Ohornhookabove"]=7902, ["Ohorntilde"]=7904, ["Ohungarumlaut"]=336, ["Oi"]=418, ["Oinvertedbreve"]=526, ["Omacron"]=332, ["Omacronacute"]=7762, ["Omacrongrave"]=7760, ["Omega"]=8486, ["Omegacyrillic"]=1120, ["Omegagreek"]=937, ["Omegaroundcyrillic"]=1146, ["Omegatitlocyrillic"]=1148, ["Omegatonos"]=911, ["Omicron"]=927, ["Omicrontonos"]=908, ["Omonospace"]=65327, ["Oneroman"]=8544, ["Oogonek"]=490, ["Oogonekmacron"]=492, ["Oopen"]=390, ["Oslash"]=216, ["Oslashacute"]=510, ["Ostrokeacute"]=510, ["Otcyrillic"]=1150, ["Otilde"]=213, ["Otildeacute"]=7756, ["Otildedieresis"]=7758, ["P"]=80, ["Pacute"]=7764, ["Pcircle"]=9413, ["Pdotaccent"]=7766, ["Pecyrillic"]=1055, ["Peharmenian"]=1354, ["Pemiddlehookcyrillic"]=1190, ["Phi"]=934, ["Phook"]=420, ["Pi"]=928, ["Piwrarmenian"]=1363, ["Pmonospace"]=65328, ["Psi"]=936, ["Psicyrillic"]=1136, ["Q"]=81, ["Qcircle"]=9414, ["Qmonospace"]=65329, ["R"]=82, ["Raarmenian"]=1356, ["Racute"]=340, ["Rcaron"]=344, ["Rcedilla"]=342, ["Rcircle"]=9415, ["Rcommaaccent"]=342, ["Rdblgrave"]=528, ["Rdotaccent"]=7768, ["Rdotbelow"]=7770, ["Rdotbelowmacron"]=7772, ["Reharmenian"]=1360, ["Rfraktur"]=8476, ["Rho"]=929, ["Rinvertedbreve"]=530, ["Rlinebelow"]=7774, ["Rmonospace"]=65330, ["Rsmallinverted"]=641, ["Rsmallinvertedsuperior"]=694, ["S"]=83, ["SF010000"]=9484, ["SF020000"]=9492, ["SF030000"]=9488, ["SF040000"]=9496, ["SF050000"]=9532, ["SF060000"]=9516, ["SF070000"]=9524, ["SF080000"]=9500, ["SF090000"]=9508, ["SF10000"]=9484, ["SF100000"]=9472, ["SF110000"]=9474, ["SF190000"]=9569, ["SF20000"]=9492, ["SF200000"]=9570, ["SF210000"]=9558, ["SF220000"]=9557, ["SF230000"]=9571, ["SF240000"]=9553, ["SF250000"]=9559, ["SF260000"]=9565, ["SF270000"]=9564, ["SF280000"]=9563, ["SF30000"]=9488, ["SF360000"]=9566, ["SF370000"]=9567, ["SF380000"]=9562, ["SF390000"]=9556, ["SF40000"]=9496, ["SF400000"]=9577, ["SF410000"]=9574, ["SF420000"]=9568, ["SF430000"]=9552, ["SF440000"]=9580, ["SF450000"]=9575, ["SF460000"]=9576, ["SF470000"]=9572, ["SF480000"]=9573, ["SF490000"]=9561, ["SF50000"]=9532, ["SF500000"]=9560, ["SF510000"]=9554, ["SF520000"]=9555, ["SF530000"]=9579, ["SF540000"]=9578, ["SF60000"]=9516, ["SF70000"]=9524, ["SF80000"]=9500, ["SF90000"]=9508, ["Sacute"]=346, ["Sacutedotaccent"]=7780, ["Sampigreek"]=992, ["Scaron"]=352, ["Scarondotaccent"]=7782, ["Scedilla"]=350, ["Schwa"]=399, ["Schwacyrillic"]=1240, ["Schwadieresiscyrillic"]=1242, ["Scircle"]=9416, ["Scircumflex"]=348, ["Scommaaccent"]=536, ["Sdotaccent"]=7776, ["Sdotbelow"]=7778, ["Sdotbelowdotaccent"]=7784, ["Seharmenian"]=1357, ["Sevenroman"]=8550, ["Shaarmenian"]=1351, ["Shacyrillic"]=1064, ["Shchacyrillic"]=1065, ["Sheicoptic"]=994, ["Shhacyrillic"]=1210, ["Shimacoptic"]=1004, ["Sigma"]=931, ["Sixroman"]=8549, ["Smonospace"]=65331, ["Softsigncyrillic"]=1068, ["Stigmagreek"]=986, ["T"]=84, ["Tau"]=932, ["Tbar"]=358, ["Tcaron"]=356, ["Tcedilla"]=354, ["Tcircle"]=9417, ["Tcircumflexbelow"]=7792, ["Tcommaaccent"]=354, ["Tdotaccent"]=7786, ["Tdotbelow"]=7788, ["Tecyrillic"]=1058, ["Tedescendercyrillic"]=1196, ["Tenroman"]=8553, ["Tetsecyrillic"]=1204, ["Theta"]=920, ["Thook"]=428, ["Thorn"]=222, ["Threeroman"]=8546, ["Tiwnarmenian"]=1359, ["Tlinebelow"]=7790, ["Tmonospace"]=65332, ["Toarmenian"]=1337, ["Tonefive"]=444, ["Tonesix"]=388, ["Tonetwo"]=423, ["Tretroflexhook"]=430, ["Tsecyrillic"]=1062, ["Tshecyrillic"]=1035, ["Twelveroman"]=8555, ["Tworoman"]=8545, ["U"]=85, ["Uacute"]=218, ["Ubreve"]=364, ["Ucaron"]=467, ["Ucircle"]=9418, ["Ucircumflex"]=219, ["Ucircumflexbelow"]=7798, ["Ucyrillic"]=1059, ["Udblacute"]=368, ["Udblgrave"]=532, ["Udieresis"]=220, ["Udieresisacute"]=471, ["Udieresisbelow"]=7794, ["Udieresiscaron"]=473, ["Udieresiscyrillic"]=1264, ["Udieresisgrave"]=475, ["Udieresismacron"]=469, ["Udotbelow"]=7908, ["Ugrave"]=217, ["Uhookabove"]=7910, ["Uhorn"]=431, ["Uhornacute"]=7912, ["Uhorndotbelow"]=7920, ["Uhorngrave"]=7914, ["Uhornhookabove"]=7916, ["Uhorntilde"]=7918, ["Uhungarumlaut"]=368, ["Uhungarumlautcyrillic"]=1266, ["Uinvertedbreve"]=534, ["Ukcyrillic"]=1144, ["Umacron"]=362, ["Umacroncyrillic"]=1262, ["Umacrondieresis"]=7802, ["Umonospace"]=65333, ["Uogonek"]=370, ["Upsilon"]=933, ["Upsilon1"]=978, ["Upsilonacutehooksymbolgreek"]=979, ["Upsilonafrican"]=433, ["Upsilondieresis"]=939, ["Upsilondieresishooksymbolgreek"]=980, ["Upsilonhooksymbol"]=978, ["Upsilontonos"]=910, ["Uring"]=366, ["Ushortcyrillic"]=1038, ["Ustraightcyrillic"]=1198, ["Ustraightstrokecyrillic"]=1200, ["Utilde"]=360, ["Utildeacute"]=7800, ["Utildebelow"]=7796, ["V"]=86, ["Vcircle"]=9419, ["Vdotbelow"]=7806, ["Vecyrillic"]=1042, ["Vewarmenian"]=1358, ["Vhook"]=434, ["Vmonospace"]=65334, ["Voarmenian"]=1352, ["Vtilde"]=7804, ["W"]=87, ["Wacute"]=7810, ["Wcircle"]=9420, ["Wcircumflex"]=372, ["Wdieresis"]=7812, ["Wdotaccent"]=7814, ["Wdotbelow"]=7816, ["Wgrave"]=7808, ["Wmonospace"]=65335, ["X"]=88, ["Xcircle"]=9421, ["Xdieresis"]=7820, ["Xdotaccent"]=7818, ["Xeharmenian"]=1341, ["Xi"]=926, ["Xmonospace"]=65336, ["Y"]=89, ["Yacute"]=221, ["Yatcyrillic"]=1122, ["Ycircle"]=9422, ["Ycircumflex"]=374, ["Ydieresis"]=376, ["Ydotaccent"]=7822, ["Ydotbelow"]=7924, ["Yericyrillic"]=1067, ["Yerudieresiscyrillic"]=1272, ["Ygrave"]=7922, ["Yhook"]=435, ["Yhookabove"]=7926, ["Yiarmenian"]=1349, ["Yicyrillic"]=1031, ["Yiwnarmenian"]=1362, ["Ymonospace"]=65337, ["Ytilde"]=7928, ["Yusbigcyrillic"]=1130, ["Yusbigiotifiedcyrillic"]=1132, ["Yuslittlecyrillic"]=1126, ["Yuslittleiotifiedcyrillic"]=1128, ["Z"]=90, ["Zaarmenian"]=1334, ["Zacute"]=377, ["Zcaron"]=381, ["Zcircle"]=9423, ["Zcircumflex"]=7824, ["Zdot"]=379, ["Zdotaccent"]=379, ["Zdotbelow"]=7826, ["Zecyrillic"]=1047, ["Zedescendercyrillic"]=1176, ["Zedieresiscyrillic"]=1246, ["Zeta"]=918, ["Zhearmenian"]=1338, ["Zhebrevecyrillic"]=1217, ["Zhecyrillic"]=1046, ["Zhedescendercyrillic"]=1174, ["Zhedieresiscyrillic"]=1244, ["Zlinebelow"]=7828, ["Zmonospace"]=65338, ["Zstroke"]=437, ["a"]=97, ["aabengali"]=2438, ["aacute"]=225, ["aadeva"]=2310, ["aagujarati"]=2694, ["aagurmukhi"]=2566, ["aamatragurmukhi"]=2622, ["aarusquare"]=13059, ["aavowelsignbengali"]=2494, ["aavowelsigndeva"]=2366, ["aavowelsigngujarati"]=2750, ["abbreviationmarkarmenian"]=1375, ["abbreviationsigndeva"]=2416, ["abengali"]=2437, ["abopomofo"]=12570, ["abreve"]=259, ["abreveacute"]=7855, ["abrevecyrillic"]=1233, ["abrevedotbelow"]=7863, ["abrevegrave"]=7857, ["abrevehookabove"]=7859, ["abrevetilde"]=7861, ["acaron"]=462, ["acircle"]=9424, ["acircumflex"]=226, ["acircumflexacute"]=7845, ["acircumflexdotbelow"]=7853, ["acircumflexgrave"]=7847, ["acircumflexhookabove"]=7849, ["acircumflextilde"]=7851, ["acute"]=180, ["acutebelowcmb"]=791, ["acutecmb"]=769, ["acutecomb"]=769, ["acutedeva"]=2388, ["acutelowmod"]=719, ["acutetonecmb"]=833, ["acyrillic"]=1072, ["adblgrave"]=513, ["addakgurmukhi"]=2673, ["adeva"]=2309, ["adieresis"]=228, ["adieresiscyrillic"]=1235, ["adieresismacron"]=479, ["adotbelow"]=7841, ["adotmacron"]=481, ["ae"]=230, ["aeacute"]=509, ["aekorean"]=12624, ["aemacron"]=483, ["afii00208"]=8213, ["afii08941"]=8356, ["afii10017"]=1040, ["afii10018"]=1041, ["afii10019"]=1042, ["afii10020"]=1043, ["afii10021"]=1044, ["afii10022"]=1045, ["afii10023"]=1025, ["afii10024"]=1046, ["afii10025"]=1047, ["afii10026"]=1048, ["afii10027"]=1049, ["afii10028"]=1050, ["afii10029"]=1051, ["afii10030"]=1052, ["afii10031"]=1053, ["afii10032"]=1054, ["afii10033"]=1055, ["afii10034"]=1056, ["afii10035"]=1057, ["afii10036"]=1058, ["afii10037"]=1059, ["afii10038"]=1060, ["afii10039"]=1061, ["afii10040"]=1062, ["afii10041"]=1063, ["afii10042"]=1064, ["afii10043"]=1065, ["afii10044"]=1066, ["afii10045"]=1067, ["afii10046"]=1068, ["afii10047"]=1069, ["afii10048"]=1070, ["afii10049"]=1071, ["afii10050"]=1168, ["afii10051"]=1026, ["afii10052"]=1027, ["afii10053"]=1028, ["afii10054"]=1029, ["afii10055"]=1030, ["afii10056"]=1031, ["afii10057"]=1032, ["afii10058"]=1033, ["afii10059"]=1034, ["afii10060"]=1035, ["afii10061"]=1036, ["afii10062"]=1038, ["afii10065"]=1072, ["afii10066"]=1073, ["afii10067"]=1074, ["afii10068"]=1075, ["afii10069"]=1076, ["afii10070"]=1077, ["afii10071"]=1105, ["afii10072"]=1078, ["afii10073"]=1079, ["afii10074"]=1080, ["afii10075"]=1081, ["afii10076"]=1082, ["afii10077"]=1083, ["afii10078"]=1084, ["afii10079"]=1085, ["afii10080"]=1086, ["afii10081"]=1087, ["afii10082"]=1088, ["afii10083"]=1089, ["afii10084"]=1090, ["afii10085"]=1091, ["afii10086"]=1092, ["afii10087"]=1093, ["afii10088"]=1094, ["afii10089"]=1095, ["afii10090"]=1096, ["afii10091"]=1097, ["afii10092"]=1098, ["afii10093"]=1099, ["afii10094"]=1100, ["afii10095"]=1101, ["afii10096"]=1102, ["afii10097"]=1103, ["afii10098"]=1169, ["afii10099"]=1106, ["afii10100"]=1107, ["afii10101"]=1108, ["afii10102"]=1109, ["afii10103"]=1110, ["afii10104"]=1111, ["afii10105"]=1112, ["afii10106"]=1113, ["afii10107"]=1114, ["afii10108"]=1115, ["afii10109"]=1116, ["afii10110"]=1118, ["afii10145"]=1039, ["afii10146"]=1122, ["afii10147"]=1138, ["afii10148"]=1140, ["afii10193"]=1119, ["afii10194"]=1123, ["afii10195"]=1139, ["afii10196"]=1141, ["afii10846"]=1241, ["afii208"]=8213, ["afii299"]=8206, ["afii300"]=8207, ["afii301"]=8205, ["afii57381"]=1642, ["afii57388"]=1548, ["afii57392"]=1632, ["afii57393"]=1633, ["afii57394"]=1634, ["afii57395"]=1635, ["afii57396"]=1636, ["afii57397"]=1637, ["afii57398"]=1638, ["afii57399"]=1639, ["afii57400"]=1640, ["afii57401"]=1641, ["afii57403"]=1563, ["afii57407"]=1567, ["afii57409"]=1569, ["afii57410"]=1570, ["afii57411"]=1571, ["afii57412"]=1572, ["afii57413"]=1573, ["afii57414"]=1574, ["afii57415"]=1575, ["afii57416"]=1576, ["afii57417"]=1577, ["afii57418"]=1578, ["afii57419"]=1579, ["afii57420"]=1580, ["afii57421"]=1581, ["afii57422"]=1582, ["afii57423"]=1583, ["afii57424"]=1584, ["afii57425"]=1585, ["afii57426"]=1586, ["afii57427"]=1587, ["afii57428"]=1588, ["afii57429"]=1589, ["afii57430"]=1590, ["afii57431"]=1591, ["afii57432"]=1592, ["afii57433"]=1593, ["afii57434"]=1594, ["afii57440"]=1600, ["afii57441"]=1601, ["afii57442"]=1602, ["afii57443"]=1603, ["afii57444"]=1604, ["afii57445"]=1605, ["afii57446"]=1606, ["afii57448"]=1608, ["afii57449"]=1609, ["afii57450"]=1610, ["afii57451"]=1611, ["afii57452"]=1612, ["afii57453"]=1613, ["afii57454"]=1614, ["afii57455"]=1615, ["afii57456"]=1616, ["afii57457"]=1617, ["afii57458"]=1618, ["afii57470"]=1607, ["afii57505"]=1700, ["afii57506"]=1662, ["afii57507"]=1670, ["afii57508"]=1688, ["afii57509"]=1711, ["afii57511"]=1657, ["afii57512"]=1672, ["afii57513"]=1681, ["afii57514"]=1722, ["afii57519"]=1746, ["afii57534"]=1749, ["afii57636"]=8362, ["afii57645"]=1470, ["afii57658"]=1475, ["afii57664"]=1488, ["afii57665"]=1489, ["afii57666"]=1490, ["afii57667"]=1491, ["afii57668"]=1492, ["afii57669"]=1493, ["afii57670"]=1494, ["afii57671"]=1495, ["afii57672"]=1496, ["afii57673"]=1497, ["afii57674"]=1498, ["afii57675"]=1499, ["afii57676"]=1500, ["afii57677"]=1501, ["afii57678"]=1502, ["afii57679"]=1503, ["afii57680"]=1504, ["afii57681"]=1505, ["afii57682"]=1506, ["afii57683"]=1507, ["afii57684"]=1508, ["afii57685"]=1509, ["afii57686"]=1510, ["afii57687"]=1511, ["afii57688"]=1512, ["afii57689"]=1513, ["afii57690"]=1514, ["afii57694"]=64298, ["afii57695"]=64299, ["afii57700"]=64331, ["afii57705"]=64287, ["afii57716"]=1520, ["afii57717"]=1521, ["afii57718"]=1522, ["afii57723"]=64309, ["afii57793"]=1460, ["afii57794"]=1461, ["afii57795"]=1462, ["afii57796"]=1467, ["afii57797"]=1464, ["afii57798"]=1463, ["afii57799"]=1456, ["afii57800"]=1458, ["afii57801"]=1457, ["afii57802"]=1459, ["afii57803"]=1474, ["afii57804"]=1473, ["afii57806"]=1465, ["afii57807"]=1468, ["afii57839"]=1469, ["afii57841"]=1471, ["afii57842"]=1472, ["afii57929"]=700, ["afii61248"]=8453, ["afii61289"]=8467, ["afii61352"]=8470, ["afii61573"]=8236, ["afii61574"]=8237, ["afii61575"]=8238, ["afii61664"]=8204, ["afii63167"]=1645, ["afii64937"]=701, ["agrave"]=224, ["agujarati"]=2693, ["agurmukhi"]=2565, ["ahiragana"]=12354, ["ahookabove"]=7843, ["aibengali"]=2448, ["aibopomofo"]=12574, ["aideva"]=2320, ["aiecyrillic"]=1237, ["aigujarati"]=2704, ["aigurmukhi"]=2576, ["aimatragurmukhi"]=2632, ["ainarabic"]=1593, ["ainfinalarabic"]=65226, ["aininitialarabic"]=65227, ["ainmedialarabic"]=65228, ["ainvertedbreve"]=515, ["aivowelsignbengali"]=2504, ["aivowelsigndeva"]=2376, ["aivowelsigngujarati"]=2760, ["akatakana"]=12450, ["akatakanahalfwidth"]=65393, ["akorean"]=12623, ["alef"]=1488, ["alefarabic"]=1575, ["alefdageshhebrew"]=64304, ["aleffinalarabic"]=65166, ["alefhamzaabovearabic"]=1571, ["alefhamzaabovefinalarabic"]=65156, ["alefhamzabelowarabic"]=1573, ["alefhamzabelowfinalarabic"]=65160, ["alefhebrew"]=1488, ["aleflamedhebrew"]=64335, ["alefmaddaabovearabic"]=1570, ["alefmaddaabovefinalarabic"]=65154, ["alefmaksuraarabic"]=1609, ["alefmaksurafinalarabic"]=65264, ["alefmaksurainitialarabic"]=65267, ["alefmaksuramedialarabic"]=65268, ["alefpatahhebrew"]=64302, ["alefqamatshebrew"]=64303, ["aleph"]=8501, ["allequal"]=8780, ["alpha"]=945, ["alphatonos"]=940, ["amacron"]=257, ["amonospace"]=65345, ["ampersand"]=38, ["ampersandmonospace"]=65286, ["amsquare"]=13250, ["anbopomofo"]=12578, ["angbopomofo"]=12580, ["angkhankhuthai"]=3674, ["angle"]=8736, ["anglebracketleft"]=12296, ["anglebracketleftvertical"]=65087, ["anglebracketright"]=12297, ["anglebracketrightvertical"]=65088, ["angleleft"]=9001, ["angleright"]=9002, ["angstrom"]=8491, ["anoteleia"]=903, ["anudattadeva"]=2386, ["anusvarabengali"]=2434, ["anusvaradeva"]=2306, ["anusvaragujarati"]=2690, ["aogonek"]=261, ["apaatosquare"]=13056, ["aparen"]=9372, ["apostrophearmenian"]=1370, ["apostrophemod"]=700, ["apple"]=63743, ["approaches"]=8784, ["approxequal"]=8776, ["approxequalorimage"]=8786, ["approximatelyequal"]=8773, ["araeaekorean"]=12686, ["araeakorean"]=12685, ["arc"]=8978, ["arighthalfring"]=7834, ["aring"]=229, ["aringacute"]=507, ["aringbelow"]=7681, ["arrowboth"]=8596, ["arrowdashdown"]=8675, ["arrowdashleft"]=8672, ["arrowdashright"]=8674, ["arrowdashup"]=8673, ["arrowdblboth"]=8660, ["arrowdbldown"]=8659, ["arrowdblleft"]=8656, ["arrowdblright"]=8658, ["arrowdblup"]=8657, ["arrowdown"]=8595, ["arrowdownleft"]=8601, ["arrowdownright"]=8600, ["arrowdownwhite"]=8681, ["arrowheaddownmod"]=709, ["arrowheadleftmod"]=706, ["arrowheadrightmod"]=707, ["arrowheadupmod"]=708, ["arrowleft"]=8592, ["arrowleftdbl"]=8656, ["arrowleftdblstroke"]=8653, ["arrowleftoverright"]=8646, ["arrowleftwhite"]=8678, ["arrowright"]=8594, ["arrowrightdblstroke"]=8655, ["arrowrightheavy"]=10142, ["arrowrightoverleft"]=8644, ["arrowrightwhite"]=8680, ["arrowtableft"]=8676, ["arrowtabright"]=8677, ["arrowup"]=8593, ["arrowupdn"]=8597, ["arrowupdnbse"]=8616, ["arrowupdownbase"]=8616, ["arrowupleft"]=8598, ["arrowupleftofdown"]=8645, ["arrowupright"]=8599, ["arrowupwhite"]=8679, ["asciicircum"]=94, ["asciicircummonospace"]=65342, ["asciitilde"]=126, ["asciitildemonospace"]=65374, ["ascript"]=593, ["ascriptturned"]=594, ["asmallhiragana"]=12353, ["asmallkatakana"]=12449, ["asmallkatakanahalfwidth"]=65383, ["asterisk"]=42, ["asteriskaltonearabic"]=1645, ["asteriskarabic"]=1645, ["asteriskmath"]=8727, ["asteriskmonospace"]=65290, ["asterisksmall"]=65121, ["asterism"]=8258, ["asymptoticallyequal"]=8771, ["at"]=64, ["atilde"]=227, ["atmonospace"]=65312, ["atsmall"]=65131, ["aturned"]=592, ["aubengali"]=2452, ["aubopomofo"]=12576, ["audeva"]=2324, ["augujarati"]=2708, ["augurmukhi"]=2580, ["aulengthmarkbengali"]=2519, ["aumatragurmukhi"]=2636, ["auvowelsignbengali"]=2508, ["auvowelsigndeva"]=2380, ["auvowelsigngujarati"]=2764, ["avagrahadeva"]=2365, ["aybarmenian"]=1377, ["ayin"]=1506, ["ayinaltonehebrew"]=64288, ["ayinhebrew"]=1506, ["b"]=98, ["babengali"]=2476, ["backslash"]=92, ["backslashmonospace"]=65340, ["badeva"]=2348, ["bagujarati"]=2732, ["bagurmukhi"]=2604, ["bahiragana"]=12400, ["bahtthai"]=3647, ["bakatakana"]=12496, ["bar"]=124, ["barmonospace"]=65372, ["bbopomofo"]=12549, ["bcircle"]=9425, ["bdotaccent"]=7683, ["bdotbelow"]=7685, ["beamedsixteenthnotes"]=9836, ["because"]=8757, ["becyrillic"]=1073, ["beharabic"]=1576, ["behfinalarabic"]=65168, ["behinitialarabic"]=65169, ["behiragana"]=12409, ["behmedialarabic"]=65170, ["behmeeminitialarabic"]=64671, ["behmeemisolatedarabic"]=64520, ["behnoonfinalarabic"]=64621, ["bekatakana"]=12505, ["benarmenian"]=1378, ["bet"]=1489, ["beta"]=946, ["betasymbolgreek"]=976, ["betdagesh"]=64305, ["betdageshhebrew"]=64305, ["bethebrew"]=1489, ["betrafehebrew"]=64332, ["bhabengali"]=2477, ["bhadeva"]=2349, ["bhagujarati"]=2733, ["bhagurmukhi"]=2605, ["bhook"]=595, ["bihiragana"]=12403, ["bikatakana"]=12499, ["bilabialclick"]=664, ["bindigurmukhi"]=2562, ["birusquare"]=13105, ["blackcircle"]=9679, ["blackdiamond"]=9670, ["blackdownpointingtriangle"]=9660, ["blackleftpointingpointer"]=9668, ["blackleftpointingtriangle"]=9664, ["blacklenticularbracketleft"]=12304, ["blacklenticularbracketleftvertical"]=65083, ["blacklenticularbracketright"]=12305, ["blacklenticularbracketrightvertical"]=65084, ["blacklowerlefttriangle"]=9699, ["blacklowerrighttriangle"]=9698, ["blackrectangle"]=9644, ["blackrightpointingpointer"]=9658, ["blackrightpointingtriangle"]=9654, ["blacksmallsquare"]=9642, ["blacksmilingface"]=9787, ["blacksquare"]=9632, ["blackstar"]=9733, ["blackupperlefttriangle"]=9700, ["blackupperrighttriangle"]=9701, ["blackuppointingsmalltriangle"]=9652, ["blackuppointingtriangle"]=9650, ["blank"]=9251, ["blinebelow"]=7687, ["block"]=9608, ["bmonospace"]=65346, ["bobaimaithai"]=3610, ["bohiragana"]=12412, ["bokatakana"]=12508, ["bparen"]=9373, ["bqsquare"]=13251, ["braceleft"]=123, ["braceleftmonospace"]=65371, ["braceleftsmall"]=65115, ["braceleftvertical"]=65079, ["braceright"]=125, ["bracerightmonospace"]=65373, ["bracerightsmall"]=65116, ["bracerightvertical"]=65080, ["bracketleft"]=91, ["bracketleftmonospace"]=65339, ["bracketright"]=93, ["bracketrightmonospace"]=65341, ["breve"]=728, ["brevebelowcmb"]=814, ["brevecmb"]=774, ["breveinvertedbelowcmb"]=815, ["breveinvertedcmb"]=785, ["breveinverteddoublecmb"]=865, ["bridgebelowcmb"]=810, ["bridgeinvertedbelowcmb"]=826, ["brokenbar"]=166, ["bstroke"]=384, ["btopbar"]=387, ["buhiragana"]=12406, ["bukatakana"]=12502, ["bullet"]=8226, ["bulletinverse"]=9688, ["bulletoperator"]=8729, ["bullseye"]=9678, ["c"]=99, ["caarmenian"]=1390, ["cabengali"]=2458, ["cacute"]=263, ["cadeva"]=2330, ["cagujarati"]=2714, ["cagurmukhi"]=2586, ["calsquare"]=13192, ["candrabindubengali"]=2433, ["candrabinducmb"]=784, ["candrabindudeva"]=2305, ["candrabindugujarati"]=2689, ["capslock"]=8682, ["careof"]=8453, ["caron"]=711, ["caronbelowcmb"]=812, ["caroncmb"]=780, ["carriagereturn"]=8629, ["cbopomofo"]=12568, ["ccaron"]=269, ["ccedilla"]=231, ["ccedillaacute"]=7689, ["ccircle"]=9426, ["ccircumflex"]=265, ["ccurl"]=597, ["cdot"]=267, ["cdotaccent"]=267, ["cdsquare"]=13253, ["cedilla"]=184, ["cedillacmb"]=807, ["cent"]=162, ["centigrade"]=8451, ["centmonospace"]=65504, ["chaarmenian"]=1401, ["chabengali"]=2459, ["chadeva"]=2331, ["chagujarati"]=2715, ["chagurmukhi"]=2587, ["chbopomofo"]=12564, ["cheabkhasiancyrillic"]=1213, ["checkmark"]=10003, ["checyrillic"]=1095, ["chedescenderabkhasiancyrillic"]=1215, ["chedescendercyrillic"]=1207, ["chedieresiscyrillic"]=1269, ["cheharmenian"]=1395, ["chekhakassiancyrillic"]=1228, ["cheverticalstrokecyrillic"]=1209, ["chi"]=967, ["chieuchacirclekorean"]=12919, ["chieuchaparenkorean"]=12823, ["chieuchcirclekorean"]=12905, ["chieuchkorean"]=12618, ["chieuchparenkorean"]=12809, ["chochangthai"]=3594, ["chochanthai"]=3592, ["chochingthai"]=3593, ["chochoethai"]=3596, ["chook"]=392, ["cieucacirclekorean"]=12918, ["cieucaparenkorean"]=12822, ["cieuccirclekorean"]=12904, ["cieuckorean"]=12616, ["cieucparenkorean"]=12808, ["cieucuparenkorean"]=12828, ["circle"]=9675, ["circlemultiply"]=8855, ["circleot"]=8857, ["circleplus"]=8853, ["circlepostalmark"]=12342, ["circlewithlefthalfblack"]=9680, ["circlewithrighthalfblack"]=9681, ["circumflex"]=710, ["circumflexbelowcmb"]=813, ["circumflexcmb"]=770, ["clear"]=8999, ["clickalveolar"]=450, ["clickdental"]=448, ["clicklateral"]=449, ["clickretroflex"]=451, ["club"]=9827, ["clubsuitblack"]=9827, ["clubsuitwhite"]=9831, ["cmcubedsquare"]=13220, ["cmonospace"]=65347, ["cmsquaredsquare"]=13216, ["coarmenian"]=1409, ["colon"]=58, ["colonmonetary"]=8353, ["colonmonospace"]=65306, ["colonsign"]=8353, ["colonsmall"]=65109, ["colontriangularhalfmod"]=721, ["colontriangularmod"]=720, ["comma"]=44, ["commaabovecmb"]=787, ["commaaboverightcmb"]=789, ["commaarabic"]=1548, ["commaarmenian"]=1373, ["commamonospace"]=65292, ["commareversedabovecmb"]=788, ["commareversedmod"]=701, ["commasmall"]=65104, ["commaturnedabovecmb"]=786, ["commaturnedmod"]=699, ["compass"]=9788, ["congruent"]=8773, ["contourintegral"]=8750, ["control"]=8963, ["controlACK"]=6, ["controlBEL"]=7, ["controlBS"]=8, ["controlCAN"]=24, ["controlCR"]=13, ["controlDC1"]=17, ["controlDC2"]=18, ["controlDC3"]=19, ["controlDC4"]=20, ["controlDEL"]=127, ["controlDLE"]=16, ["controlEM"]=25, ["controlENQ"]=5, ["controlEOT"]=4, ["controlESC"]=27, ["controlETB"]=23, ["controlETX"]=3, ["controlFF"]=12, ["controlFS"]=28, ["controlGS"]=29, ["controlHT"]=9, ["controlLF"]=10, ["controlNAK"]=21, ["controlRS"]=30, ["controlSI"]=15, ["controlSO"]=14, ["controlSOT"]=2, ["controlSTX"]=1, ["controlSUB"]=26, ["controlSYN"]=22, ["controlUS"]=31, ["controlVT"]=11, ["copyright"]=169, ["cornerbracketleft"]=12300, ["cornerbracketlefthalfwidth"]=65378, ["cornerbracketleftvertical"]=65089, ["cornerbracketright"]=12301, ["cornerbracketrighthalfwidth"]=65379, ["cornerbracketrightvertical"]=65090, ["corporationsquare"]=13183, ["cosquare"]=13255, ["coverkgsquare"]=13254, ["cparen"]=9374, ["cruzeiro"]=8354, ["cstretched"]=663, ["curlyand"]=8911, ["curlyor"]=8910, ["currency"]=164, ["d"]=100, ["daarmenian"]=1380, ["dabengali"]=2470, ["dadarabic"]=1590, ["dadeva"]=2342, ["dadfinalarabic"]=65214, ["dadinitialarabic"]=65215, ["dadmedialarabic"]=65216, ["dagesh"]=1468, ["dageshhebrew"]=1468, ["dagger"]=8224, ["daggerdbl"]=8225, ["dagujarati"]=2726, ["dagurmukhi"]=2598, ["dahiragana"]=12384, ["dakatakana"]=12480, ["dalarabic"]=1583, ["dalet"]=1491, ["daletdagesh"]=64307, ["daletdageshhebrew"]=64307, ["dalethatafpatah"]=1491, ["dalethatafpatahhebrew"]=1491, ["dalethatafsegol"]=1491, ["dalethatafsegolhebrew"]=1491, ["dalethebrew"]=1491, ["dalethiriq"]=1491, ["dalethiriqhebrew"]=1491, ["daletholam"]=1491, ["daletholamhebrew"]=1491, ["daletpatah"]=1491, ["daletpatahhebrew"]=1491, ["daletqamats"]=1491, ["daletqamatshebrew"]=1491, ["daletqubuts"]=1491, ["daletqubutshebrew"]=1491, ["daletsegol"]=1491, ["daletsegolhebrew"]=1491, ["daletsheva"]=1491, ["daletshevahebrew"]=1491, ["dalettsere"]=1491, ["dalettserehebrew"]=1491, ["dalfinalarabic"]=65194, ["dammaarabic"]=1615, ["dammalowarabic"]=1615, ["dammatanaltonearabic"]=1612, ["dammatanarabic"]=1612, ["danda"]=2404, ["dargahebrew"]=1447, ["dargalefthebrew"]=1447, ["dasiapneumatacyrilliccmb"]=1157, ["dblanglebracketleft"]=12298, ["dblanglebracketleftvertical"]=65085, ["dblanglebracketright"]=12299, ["dblanglebracketrightvertical"]=65086, ["dblarchinvertedbelowcmb"]=811, ["dblarrowleft"]=8660, ["dblarrowright"]=8658, ["dbldanda"]=2405, ["dblgravecmb"]=783, ["dblintegral"]=8748, ["dbllowline"]=8215, ["dbllowlinecmb"]=819, ["dbloverlinecmb"]=831, ["dblprimemod"]=698, ["dblverticalbar"]=8214, ["dblverticallineabovecmb"]=782, ["dbopomofo"]=12553, ["dbsquare"]=13256, ["dcaron"]=271, ["dcedilla"]=7697, ["dcircle"]=9427, ["dcircumflexbelow"]=7699, ["dcroat"]=273, ["ddabengali"]=2465, ["ddadeva"]=2337, ["ddagujarati"]=2721, ["ddagurmukhi"]=2593, ["ddalarabic"]=1672, ["ddalfinalarabic"]=64393, ["dddhadeva"]=2396, ["ddhabengali"]=2466, ["ddhadeva"]=2338, ["ddhagujarati"]=2722, ["ddhagurmukhi"]=2594, ["ddotaccent"]=7691, ["ddotbelow"]=7693, ["decimalseparatorarabic"]=1643, ["decimalseparatorpersian"]=1643, ["decyrillic"]=1076, ["degree"]=176, ["dehihebrew"]=1453, ["dehiragana"]=12391, ["deicoptic"]=1007, ["dekatakana"]=12487, ["deleteleft"]=9003, ["deleteright"]=8998, ["delta"]=948, ["deltaturned"]=397, ["denominatorminusonenumeratorbengali"]=2552, ["dezh"]=676, ["dhabengali"]=2471, ["dhadeva"]=2343, ["dhagujarati"]=2727, ["dhagurmukhi"]=2599, ["dhook"]=599, ["dialytikatonos"]=901, ["dialytikatonoscmb"]=836, ["diamond"]=9830, ["diamondsuitwhite"]=9826, ["dieresis"]=168, ["dieresisbelowcmb"]=804, ["dieresiscmb"]=776, ["dieresistonos"]=901, ["dihiragana"]=12386, ["dikatakana"]=12482, ["dittomark"]=12291, ["divide"]=247, ["divides"]=8739, ["divisionslash"]=8725, ["djecyrillic"]=1106, ["dkshade"]=9619, ["dlinebelow"]=7695, ["dlsquare"]=13207, ["dmacron"]=273, ["dmonospace"]=65348, ["dnblock"]=9604, ["dochadathai"]=3598, ["dodekthai"]=3604, ["dohiragana"]=12393, ["dokatakana"]=12489, ["dollar"]=36, ["dollarmonospace"]=65284, ["dollarsmall"]=65129, ["dong"]=8363, ["dorusquare"]=13094, ["dotaccent"]=729, ["dotaccentcmb"]=775, ["dotbelowcmb"]=803, ["dotbelowcomb"]=803, ["dotkatakana"]=12539, ["dotlessi"]=305, ["dotlessjstrokehook"]=644, ["dotmath"]=8901, ["dottedcircle"]=9676, ["doubleyodpatah"]=64287, ["doubleyodpatahhebrew"]=64287, ["downtackbelowcmb"]=798, ["downtackmod"]=725, ["dparen"]=9375, ["dtail"]=598, ["dtopbar"]=396, ["duhiragana"]=12389, ["dukatakana"]=12485, ["dz"]=499, ["dzaltone"]=675, ["dzcaron"]=454, ["dzcurl"]=677, ["dzeabkhasiancyrillic"]=1249, ["dzecyrillic"]=1109, ["dzhecyrillic"]=1119, ["e"]=101, ["eacute"]=233, ["earth"]=9793, ["ebengali"]=2447, ["ebopomofo"]=12572, ["ebreve"]=277, ["ecandradeva"]=2317, ["ecandragujarati"]=2701, ["ecandravowelsigndeva"]=2373, ["ecandravowelsigngujarati"]=2757, ["ecaron"]=283, ["ecedillabreve"]=7709, ["echarmenian"]=1381, ["echyiwnarmenian"]=1415, ["ecircle"]=9428, ["ecircumflex"]=234, ["ecircumflexacute"]=7871, ["ecircumflexbelow"]=7705, ["ecircumflexdotbelow"]=7879, ["ecircumflexgrave"]=7873, ["ecircumflexhookabove"]=7875, ["ecircumflextilde"]=7877, ["ecyrillic"]=1108, ["edblgrave"]=517, ["edeva"]=2319, ["edieresis"]=235, ["edot"]=279, ["edotaccent"]=279, ["edotbelow"]=7865, ["eegurmukhi"]=2575, ["eematragurmukhi"]=2631, ["efcyrillic"]=1092, ["egrave"]=232, ["egujarati"]=2703, ["eharmenian"]=1383, ["ehbopomofo"]=12573, ["ehiragana"]=12360, ["ehookabove"]=7867, ["eibopomofo"]=12575, ["eight"]=56, ["eightarabic"]=1640, ["eightbengali"]=2542, ["eightcircle"]=9319, ["eightcircleinversesansserif"]=10129, ["eightdeva"]=2414, ["eighteencircle"]=9329, ["eighteenparen"]=9349, ["eighteenperiod"]=9369, ["eightgujarati"]=2798, ["eightgurmukhi"]=2670, ["eighthackarabic"]=1640, ["eighthangzhou"]=12328, ["eighthnotebeamed"]=9835, ["eightideographicparen"]=12839, ["eightinferior"]=8328, ["eightmonospace"]=65304, ["eightparen"]=9339, ["eightperiod"]=9359, ["eightpersian"]=1784, ["eightroman"]=8567, ["eightsuperior"]=8312, ["eightthai"]=3672, ["einvertedbreve"]=519, ["eiotifiedcyrillic"]=1125, ["ekatakana"]=12456, ["ekatakanahalfwidth"]=65396, ["ekonkargurmukhi"]=2676, ["ekorean"]=12628, ["elcyrillic"]=1083, ["element"]=8712, ["elevencircle"]=9322, ["elevenparen"]=9342, ["elevenperiod"]=9362, ["elevenroman"]=8570, ["ellipsis"]=8230, ["ellipsisvertical"]=8942, ["emacron"]=275, ["emacronacute"]=7703, ["emacrongrave"]=7701, ["emcyrillic"]=1084, ["emdash"]=8212, ["emdashvertical"]=65073, ["emonospace"]=65349, ["emphasismarkarmenian"]=1371, ["emptyset"]=8709, ["enbopomofo"]=12579, ["encyrillic"]=1085, ["endash"]=8211, ["endashvertical"]=65074, ["endescendercyrillic"]=1187, ["eng"]=331, ["engbopomofo"]=12581, ["enghecyrillic"]=1189, ["enhookcyrillic"]=1224, ["enspace"]=8194, ["eogonek"]=281, ["eokorean"]=12627, ["eopen"]=603, ["eopenclosed"]=666, ["eopenreversed"]=604, ["eopenreversedclosed"]=606, ["eopenreversedhook"]=605, ["eparen"]=9376, ["epsilon"]=949, ["epsilontonos"]=941, ["equal"]=61, ["equalmonospace"]=65309, ["equalsmall"]=65126, ["equalsuperior"]=8316, ["equivalence"]=8801, ["erbopomofo"]=12582, ["ercyrillic"]=1088, ["ereversed"]=600, ["ereversedcyrillic"]=1101, ["escyrillic"]=1089, ["esdescendercyrillic"]=1195, ["esh"]=643, ["eshcurl"]=646, ["eshortdeva"]=2318, ["eshortvowelsigndeva"]=2374, ["eshreversedloop"]=426, ["eshsquatreversed"]=645, ["esmallhiragana"]=12359, ["esmallkatakana"]=12455, ["esmallkatakanahalfwidth"]=65386, ["estimated"]=8494, ["eta"]=951, ["etarmenian"]=1384, ["etatonos"]=942, ["eth"]=240, ["etilde"]=7869, ["etildebelow"]=7707, ["etnahtafoukhhebrew"]=1425, ["etnahtafoukhlefthebrew"]=1425, ["etnahtahebrew"]=1425, ["etnahtalefthebrew"]=1425, ["eturned"]=477, ["eukorean"]=12641, ["euro"]=8364, ["evowelsignbengali"]=2503, ["evowelsigndeva"]=2375, ["evowelsigngujarati"]=2759, ["exclam"]=33, ["exclamarmenian"]=1372, ["exclamdbl"]=8252, ["exclamdown"]=161, ["exclammonospace"]=65281, ["existential"]=8707, ["ezh"]=658, ["ezhcaron"]=495, ["ezhcurl"]=659, ["ezhreversed"]=441, ["ezhtail"]=442, ["f"]=102, ["fadeva"]=2398, ["fagurmukhi"]=2654, ["fahrenheit"]=8457, ["fathaarabic"]=1614, ["fathalowarabic"]=1614, ["fathatanarabic"]=1611, ["fbopomofo"]=12552, ["fcircle"]=9429, ["fdotaccent"]=7711, ["feharabic"]=1601, ["feharmenian"]=1414, ["fehfinalarabic"]=65234, ["fehinitialarabic"]=65235, ["fehmedialarabic"]=65236, ["feicoptic"]=997, ["female"]=9792, ["ff"]=64256, ["ffi"]=64259, ["ffl"]=64260, ["fi"]=64257, ["fifteencircle"]=9326, ["fifteenparen"]=9346, ["fifteenperiod"]=9366, ["figuredash"]=8210, ["filledbox"]=9632, ["filledrect"]=9644, ["finalkaf"]=1498, ["finalkafdagesh"]=64314, ["finalkafdageshhebrew"]=64314, ["finalkafhebrew"]=1498, ["finalkafqamats"]=1498, ["finalkafqamatshebrew"]=1498, ["finalkafsheva"]=1498, ["finalkafshevahebrew"]=1498, ["finalmem"]=1501, ["finalmemhebrew"]=1501, ["finalnun"]=1503, ["finalnunhebrew"]=1503, ["finalpe"]=1507, ["finalpehebrew"]=1507, ["finaltsadi"]=1509, ["finaltsadihebrew"]=1509, ["firsttonechinese"]=713, ["fisheye"]=9673, ["fitacyrillic"]=1139, ["five"]=53, ["fivearabic"]=1637, ["fivebengali"]=2539, ["fivecircle"]=9316, ["fivecircleinversesansserif"]=10126, ["fivedeva"]=2411, ["fiveeighths"]=8541, ["fivegujarati"]=2795, ["fivegurmukhi"]=2667, ["fivehackarabic"]=1637, ["fivehangzhou"]=12325, ["fiveideographicparen"]=12836, ["fiveinferior"]=8325, ["fivemonospace"]=65301, ["fiveparen"]=9336, ["fiveperiod"]=9356, ["fivepersian"]=1781, ["fiveroman"]=8564, ["fivesuperior"]=8309, ["fivethai"]=3669, ["fl"]=64258, ["florin"]=402, ["fmonospace"]=65350, ["fmsquare"]=13209, ["fofanthai"]=3615, ["fofathai"]=3613, ["fongmanthai"]=3663, ["forall"]=8704, ["four"]=52, ["fourarabic"]=1636, ["fourbengali"]=2538, ["fourcircle"]=9315, ["fourcircleinversesansserif"]=10125, ["fourdeva"]=2410, ["fourgujarati"]=2794, ["fourgurmukhi"]=2666, ["fourhackarabic"]=1636, ["fourhangzhou"]=12324, ["fourideographicparen"]=12835, ["fourinferior"]=8324, ["fourmonospace"]=65300, ["fournumeratorbengali"]=2551, ["fourparen"]=9335, ["fourperiod"]=9355, ["fourpersian"]=1780, ["fourroman"]=8563, ["foursuperior"]=8308, ["fourteencircle"]=9325, ["fourteenparen"]=9345, ["fourteenperiod"]=9365, ["fourthai"]=3668, ["fourthtonechinese"]=715, ["fparen"]=9377, ["fraction"]=8260, ["franc"]=8355, ["g"]=103, ["gabengali"]=2455, ["gacute"]=501, ["gadeva"]=2327, ["gafarabic"]=1711, ["gaffinalarabic"]=64403, ["gafinitialarabic"]=64404, ["gafmedialarabic"]=64405, ["gagujarati"]=2711, ["gagurmukhi"]=2583, ["gahiragana"]=12364, ["gakatakana"]=12460, ["gamma"]=947, ["gammalatinsmall"]=611, ["gammasuperior"]=736, ["gangiacoptic"]=1003, ["gbopomofo"]=12557, ["gbreve"]=287, ["gcaron"]=487, ["gcedilla"]=291, ["gcircle"]=9430, ["gcircumflex"]=285, ["gcommaaccent"]=291, ["gdot"]=289, ["gdotaccent"]=289, ["gecyrillic"]=1075, ["gehiragana"]=12370, ["gekatakana"]=12466, ["geometricallyequal"]=8785, ["gereshaccenthebrew"]=1436, ["gereshhebrew"]=1523, ["gereshmuqdamhebrew"]=1437, ["germandbls"]=223, ["gershayimaccenthebrew"]=1438, ["gershayimhebrew"]=1524, ["getamark"]=12307, ["ghabengali"]=2456, ["ghadarmenian"]=1394, ["ghadeva"]=2328, ["ghagujarati"]=2712, ["ghagurmukhi"]=2584, ["ghainarabic"]=1594, ["ghainfinalarabic"]=65230, ["ghaininitialarabic"]=65231, ["ghainmedialarabic"]=65232, ["ghemiddlehookcyrillic"]=1173, ["ghestrokecyrillic"]=1171, ["gheupturncyrillic"]=1169, ["ghhadeva"]=2394, ["ghhagurmukhi"]=2650, ["ghook"]=608, ["ghzsquare"]=13203, ["gihiragana"]=12366, ["gikatakana"]=12462, ["gimarmenian"]=1379, ["gimel"]=1490, ["gimeldagesh"]=64306, ["gimeldageshhebrew"]=64306, ["gimelhebrew"]=1490, ["gjecyrillic"]=1107, ["glottalinvertedstroke"]=446, ["glottalstop"]=660, ["glottalstopinverted"]=662, ["glottalstopmod"]=704, ["glottalstopreversed"]=661, ["glottalstopreversedmod"]=705, ["glottalstopreversedsuperior"]=740, ["glottalstopstroke"]=673, ["glottalstopstrokereversed"]=674, ["gmacron"]=7713, ["gmonospace"]=65351, ["gohiragana"]=12372, ["gokatakana"]=12468, ["gparen"]=9378, ["gpasquare"]=13228, ["gradient"]=8711, ["grave"]=96, ["gravebelowcmb"]=790, ["gravecmb"]=768, ["gravecomb"]=768, ["gravedeva"]=2387, ["gravelowmod"]=718, ["gravemonospace"]=65344, ["gravetonecmb"]=832, ["greater"]=62, ["greaterequal"]=8805, ["greaterequalorless"]=8923, ["greatermonospace"]=65310, ["greaterorequivalent"]=8819, ["greaterorless"]=8823, ["greateroverequal"]=8807, ["greatersmall"]=65125, ["gscript"]=609, ["gstroke"]=485, ["guhiragana"]=12368, ["guillemotleft"]=171, ["guillemotright"]=187, ["guilsinglleft"]=8249, ["guilsinglright"]=8250, ["gukatakana"]=12464, ["guramusquare"]=13080, ["gysquare"]=13257, ["h"]=104, ["haabkhasiancyrillic"]=1193, ["haaltonearabic"]=1729, ["habengali"]=2489, ["hadescendercyrillic"]=1203, ["hadeva"]=2361, ["hagujarati"]=2745, ["hagurmukhi"]=2617, ["haharabic"]=1581, ["hahfinalarabic"]=65186, ["hahinitialarabic"]=65187, ["hahiragana"]=12399, ["hahmedialarabic"]=65188, ["haitusquare"]=13098, ["hakatakana"]=12495, ["hakatakanahalfwidth"]=65418, ["halantgurmukhi"]=2637, ["hamzaarabic"]=1569, ["hamzadammaarabic"]=1569, ["hamzadammatanarabic"]=1569, ["hamzafathaarabic"]=1569, ["hamzafathatanarabic"]=1569, ["hamzalowarabic"]=1569, ["hamzalowkasraarabic"]=1569, ["hamzalowkasratanarabic"]=1569, ["hamzasukunarabic"]=1569, ["hangulfiller"]=12644, ["hardsigncyrillic"]=1098, ["harpoonleftbarbup"]=8636, ["harpoonrightbarbup"]=8640, ["hasquare"]=13258, ["hatafpatah"]=1458, ["hatafpatah16"]=1458, ["hatafpatah23"]=1458, ["hatafpatah2f"]=1458, ["hatafpatahhebrew"]=1458, ["hatafpatahnarrowhebrew"]=1458, ["hatafpatahquarterhebrew"]=1458, ["hatafpatahwidehebrew"]=1458, ["hatafqamats"]=1459, ["hatafqamats1b"]=1459, ["hatafqamats28"]=1459, ["hatafqamats34"]=1459, ["hatafqamatshebrew"]=1459, ["hatafqamatsnarrowhebrew"]=1459, ["hatafqamatsquarterhebrew"]=1459, ["hatafqamatswidehebrew"]=1459, ["hatafsegol"]=1457, ["hatafsegol17"]=1457, ["hatafsegol24"]=1457, ["hatafsegol30"]=1457, ["hatafsegolhebrew"]=1457, ["hatafsegolnarrowhebrew"]=1457, ["hatafsegolquarterhebrew"]=1457, ["hatafsegolwidehebrew"]=1457, ["hbar"]=295, ["hbopomofo"]=12559, ["hbrevebelow"]=7723, ["hcedilla"]=7721, ["hcircle"]=9431, ["hcircumflex"]=293, ["hdieresis"]=7719, ["hdotaccent"]=7715, ["hdotbelow"]=7717, ["he"]=1492, ["heart"]=9829, ["heartsuitblack"]=9829, ["heartsuitwhite"]=9825, ["hedagesh"]=64308, ["hedageshhebrew"]=64308, ["hehaltonearabic"]=1729, ["heharabic"]=1607, ["hehebrew"]=1492, ["hehfinalaltonearabic"]=64423, ["hehfinalalttwoarabic"]=65258, ["hehfinalarabic"]=65258, ["hehhamzaabovefinalarabic"]=64421, ["hehhamzaaboveisolatedarabic"]=64420, ["hehinitialaltonearabic"]=64424, ["hehinitialarabic"]=65259, ["hehiragana"]=12408, ["hehmedialaltonearabic"]=64425, ["hehmedialarabic"]=65260, ["heiseierasquare"]=13179, ["hekatakana"]=12504, ["hekatakanahalfwidth"]=65421, ["hekutaarusquare"]=13110, ["henghook"]=615, ["herutusquare"]=13113, ["het"]=1495, ["hethebrew"]=1495, ["hhook"]=614, ["hhooksuperior"]=689, ["hieuhacirclekorean"]=12923, ["hieuhaparenkorean"]=12827, ["hieuhcirclekorean"]=12909, ["hieuhkorean"]=12622, ["hieuhparenkorean"]=12813, ["hihiragana"]=12402, ["hikatakana"]=12498, ["hikatakanahalfwidth"]=65419, ["hiriq"]=1460, ["hiriq14"]=1460, ["hiriq21"]=1460, ["hiriq2d"]=1460, ["hiriqhebrew"]=1460, ["hiriqnarrowhebrew"]=1460, ["hiriqquarterhebrew"]=1460, ["hiriqwidehebrew"]=1460, ["hlinebelow"]=7830, ["hmonospace"]=65352, ["hoarmenian"]=1392, ["hohipthai"]=3627, ["hohiragana"]=12411, ["hokatakana"]=12507, ["hokatakanahalfwidth"]=65422, ["holam"]=1465, ["holam19"]=1465, ["holam26"]=1465, ["holam32"]=1465, ["holamhebrew"]=1465, ["holamnarrowhebrew"]=1465, ["holamquarterhebrew"]=1465, ["holamwidehebrew"]=1465, ["honokhukthai"]=3630, ["hookabovecomb"]=777, ["hookcmb"]=777, ["hookpalatalizedbelowcmb"]=801, ["hookretroflexbelowcmb"]=802, ["hoonsquare"]=13122, ["horicoptic"]=1001, ["horizontalbar"]=8213, ["horncmb"]=795, ["hotsprings"]=9832, ["house"]=8962, ["hparen"]=9379, ["hsuperior"]=688, ["hturned"]=613, ["huhiragana"]=12405, ["huiitosquare"]=13107, ["hukatakana"]=12501, ["hukatakanahalfwidth"]=65420, ["hungarumlaut"]=733, ["hungarumlautcmb"]=779, ["hv"]=405, ["hyphen"]=45, ["hyphenmonospace"]=65293, ["hyphensmall"]=65123, ["hyphentwo"]=8208, ["i"]=105, ["iacute"]=237, ["iacyrillic"]=1103, ["ibengali"]=2439, ["ibopomofo"]=12583, ["ibreve"]=301, ["icaron"]=464, ["icircle"]=9432, ["icircumflex"]=238, ["icyrillic"]=1110, ["idblgrave"]=521, ["ideographearthcircle"]=12943, ["ideographfirecircle"]=12939, ["ideographicallianceparen"]=12863, ["ideographiccallparen"]=12858, ["ideographiccentrecircle"]=12965, ["ideographicclose"]=12294, ["ideographiccomma"]=12289, ["ideographiccommaleft"]=65380, ["ideographiccongratulationparen"]=12855, ["ideographiccorrectcircle"]=12963, ["ideographicearthparen"]=12847, ["ideographicenterpriseparen"]=12861, ["ideographicexcellentcircle"]=12957, ["ideographicfestivalparen"]=12864, ["ideographicfinancialcircle"]=12950, ["ideographicfinancialparen"]=12854, ["ideographicfireparen"]=12843, ["ideographichaveparen"]=12850, ["ideographichighcircle"]=12964, ["ideographiciterationmark"]=12293, ["ideographiclaborcircle"]=12952, ["ideographiclaborparen"]=12856, ["ideographicleftcircle"]=12967, ["ideographiclowcircle"]=12966, ["ideographicmedicinecircle"]=12969, ["ideographicmetalparen"]=12846, ["ideographicmoonparen"]=12842, ["ideographicnameparen"]=12852, ["ideographicperiod"]=12290, ["ideographicprintcircle"]=12958, ["ideographicreachparen"]=12867, ["ideographicrepresentparen"]=12857, ["ideographicresourceparen"]=12862, ["ideographicrightcircle"]=12968, ["ideographicsecretcircle"]=12953, ["ideographicselfparen"]=12866, ["ideographicsocietyparen"]=12851, ["ideographicspace"]=12288, ["ideographicspecialparen"]=12853, ["ideographicstockparen"]=12849, ["ideographicstudyparen"]=12859, ["ideographicsunparen"]=12848, ["ideographicsuperviseparen"]=12860, ["ideographicwaterparen"]=12844, ["ideographicwoodparen"]=12845, ["ideographiczero"]=12295, ["ideographmetalcircle"]=12942, ["ideographmooncircle"]=12938, ["ideographnamecircle"]=12948, ["ideographsuncircle"]=12944, ["ideographwatercircle"]=12940, ["ideographwoodcircle"]=12941, ["ideva"]=2311, ["idieresis"]=239, ["idieresisacute"]=7727, ["idieresiscyrillic"]=1253, ["idotbelow"]=7883, ["iebrevecyrillic"]=1239, ["iecyrillic"]=1077, ["ieungacirclekorean"]=12917, ["ieungaparenkorean"]=12821, ["ieungcirclekorean"]=12903, ["ieungkorean"]=12615, ["ieungparenkorean"]=12807, ["igrave"]=236, ["igujarati"]=2695, ["igurmukhi"]=2567, ["ihiragana"]=12356, ["ihookabove"]=7881, ["iibengali"]=2440, ["iicyrillic"]=1080, ["iideva"]=2312, ["iigujarati"]=2696, ["iigurmukhi"]=2568, ["iimatragurmukhi"]=2624, ["iinvertedbreve"]=523, ["iishortcyrillic"]=1081, ["iivowelsignbengali"]=2496, ["iivowelsigndeva"]=2368, ["iivowelsigngujarati"]=2752, ["ij"]=307, ["ikatakana"]=12452, ["ikatakanahalfwidth"]=65394, ["ikorean"]=12643, ["ilde"]=732, ["iluyhebrew"]=1452, ["imacron"]=299, ["imacroncyrillic"]=1251, ["imageorapproximatelyequal"]=8787, ["imatragurmukhi"]=2623, ["imonospace"]=65353, ["increment"]=8710, ["infinity"]=8734, ["iniarmenian"]=1387, ["integral"]=8747, ["integralbottom"]=8993, ["integralbt"]=8993, ["integraltop"]=8992, ["integraltp"]=8992, ["intersection"]=8745, ["intisquare"]=13061, ["invbullet"]=9688, ["invcircle"]=9689, ["invsmileface"]=9787, ["iocyrillic"]=1105, ["iogonek"]=303, ["iota"]=953, ["iotadieresis"]=970, ["iotadieresistonos"]=912, ["iotalatin"]=617, ["iotatonos"]=943, ["iparen"]=9380, ["irigurmukhi"]=2674, ["ismallhiragana"]=12355, ["ismallkatakana"]=12451, ["ismallkatakanahalfwidth"]=65384, ["issharbengali"]=2554, ["istroke"]=616, ["iterationhiragana"]=12445, ["iterationkatakana"]=12541, ["itilde"]=297, ["itildebelow"]=7725, ["iubopomofo"]=12585, ["iucyrillic"]=1102, ["ivowelsignbengali"]=2495, ["ivowelsigndeva"]=2367, ["ivowelsigngujarati"]=2751, ["izhitsacyrillic"]=1141, ["izhitsadblgravecyrillic"]=1143, ["j"]=106, ["jaarmenian"]=1393, ["jabengali"]=2460, ["jadeva"]=2332, ["jagujarati"]=2716, ["jagurmukhi"]=2588, ["jbopomofo"]=12560, ["jcaron"]=496, ["jcircle"]=9433, ["jcircumflex"]=309, ["jcrossedtail"]=669, ["jdotlessstroke"]=607, ["jecyrillic"]=1112, ["jeemarabic"]=1580, ["jeemfinalarabic"]=65182, ["jeeminitialarabic"]=65183, ["jeemmedialarabic"]=65184, ["jeharabic"]=1688, ["jehfinalarabic"]=64395, ["jhabengali"]=2461, ["jhadeva"]=2333, ["jhagujarati"]=2717, ["jhagurmukhi"]=2589, ["jheharmenian"]=1403, ["jis"]=12292, ["jmonospace"]=65354, ["jparen"]=9381, ["jsuperior"]=690, ["k"]=107, ["kabashkircyrillic"]=1185, ["kabengali"]=2453, ["kacute"]=7729, ["kacyrillic"]=1082, ["kadescendercyrillic"]=1179, ["kadeva"]=2325, ["kaf"]=1499, ["kafarabic"]=1603, ["kafdagesh"]=64315, ["kafdageshhebrew"]=64315, ["kaffinalarabic"]=65242, ["kafhebrew"]=1499, ["kafinitialarabic"]=65243, ["kafmedialarabic"]=65244, ["kafrafehebrew"]=64333, ["kagujarati"]=2709, ["kagurmukhi"]=2581, ["kahiragana"]=12363, ["kahookcyrillic"]=1220, ["kakatakana"]=12459, ["kakatakanahalfwidth"]=65398, ["kappa"]=954, ["kappasymbolgreek"]=1008, ["kapyeounmieumkorean"]=12657, ["kapyeounphieuphkorean"]=12676, ["kapyeounpieupkorean"]=12664, ["kapyeounssangpieupkorean"]=12665, ["karoriisquare"]=13069, ["kashidaautoarabic"]=1600, ["kashidaautonosidebearingarabic"]=1600, ["kasmallkatakana"]=12533, ["kasquare"]=13188, ["kasraarabic"]=1616, ["kasratanarabic"]=1613, ["kastrokecyrillic"]=1183, ["katahiraprolongmarkhalfwidth"]=65392, ["kaverticalstrokecyrillic"]=1181, ["kbopomofo"]=12558, ["kcalsquare"]=13193, ["kcaron"]=489, ["kcedilla"]=311, ["kcircle"]=9434, ["kcommaaccent"]=311, ["kdotbelow"]=7731, ["keharmenian"]=1412, ["kehiragana"]=12369, ["kekatakana"]=12465, ["kekatakanahalfwidth"]=65401, ["kenarmenian"]=1391, ["kesmallkatakana"]=12534, ["kgreenlandic"]=312, ["khabengali"]=2454, ["khacyrillic"]=1093, ["khadeva"]=2326, ["khagujarati"]=2710, ["khagurmukhi"]=2582, ["khaharabic"]=1582, ["khahfinalarabic"]=65190, ["khahinitialarabic"]=65191, ["khahmedialarabic"]=65192, ["kheicoptic"]=999, ["khhadeva"]=2393, ["khhagurmukhi"]=2649, ["khieukhacirclekorean"]=12920, ["khieukhaparenkorean"]=12824, ["khieukhcirclekorean"]=12906, ["khieukhkorean"]=12619, ["khieukhparenkorean"]=12810, ["khokhaithai"]=3586, ["khokhonthai"]=3589, ["khokhuatthai"]=3587, ["khokhwaithai"]=3588, ["khomutthai"]=3675, ["khook"]=409, ["khorakhangthai"]=3590, ["khzsquare"]=13201, ["kihiragana"]=12365, ["kikatakana"]=12461, ["kikatakanahalfwidth"]=65399, ["kiroguramusquare"]=13077, ["kiromeetorusquare"]=13078, ["kirosquare"]=13076, ["kiyeokacirclekorean"]=12910, ["kiyeokaparenkorean"]=12814, ["kiyeokcirclekorean"]=12896, ["kiyeokkorean"]=12593, ["kiyeokparenkorean"]=12800, ["kiyeoksioskorean"]=12595, ["kjecyrillic"]=1116, ["klinebelow"]=7733, ["klsquare"]=13208, ["kmcubedsquare"]=13222, ["kmonospace"]=65355, ["kmsquaredsquare"]=13218, ["kohiragana"]=12371, ["kohmsquare"]=13248, ["kokaithai"]=3585, ["kokatakana"]=12467, ["kokatakanahalfwidth"]=65402, ["kooposquare"]=13086, ["koppacyrillic"]=1153, ["koreanstandardsymbol"]=12927, ["koroniscmb"]=835, ["kparen"]=9382, ["kpasquare"]=13226, ["ksicyrillic"]=1135, ["ktsquare"]=13263, ["kturned"]=670, ["kuhiragana"]=12367, ["kukatakana"]=12463, ["kukatakanahalfwidth"]=65400, ["kvsquare"]=13240, ["kwsquare"]=13246, ["l"]=108, ["labengali"]=2482, ["lacute"]=314, ["ladeva"]=2354, ["lagujarati"]=2738, ["lagurmukhi"]=2610, ["lakkhangyaothai"]=3653, ["lamaleffinalarabic"]=65276, ["lamalefhamzaabovefinalarabic"]=65272, ["lamalefhamzaaboveisolatedarabic"]=65271, ["lamalefhamzabelowfinalarabic"]=65274, ["lamalefhamzabelowisolatedarabic"]=65273, ["lamalefisolatedarabic"]=65275, ["lamalefmaddaabovefinalarabic"]=65270, ["lamalefmaddaaboveisolatedarabic"]=65269, ["lamarabic"]=1604, ["lambda"]=955, ["lambdastroke"]=411, ["lamed"]=1500, ["lameddagesh"]=64316, ["lameddageshhebrew"]=64316, ["lamedhebrew"]=1500, ["lamedholam"]=1500, ["lamedholamdagesh"]=1500, ["lamedholamdageshhebrew"]=1500, ["lamedholamhebrew"]=1500, ["lamfinalarabic"]=65246, ["lamhahinitialarabic"]=64714, ["laminitialarabic"]=65247, ["lamjeeminitialarabic"]=64713, ["lamkhahinitialarabic"]=64715, ["lamlamhehisolatedarabic"]=65010, ["lammedialarabic"]=65248, ["lammeemhahinitialarabic"]=64904, ["lammeeminitialarabic"]=64716, ["lammeemjeeminitialarabic"]=65247, ["lammeemkhahinitialarabic"]=65247, ["largecircle"]=9711, ["lbar"]=410, ["lbelt"]=620, ["lbopomofo"]=12556, ["lcaron"]=318, ["lcedilla"]=316, ["lcircle"]=9435, ["lcircumflexbelow"]=7741, ["lcommaaccent"]=316, ["ldot"]=320, ["ldotaccent"]=320, ["ldotbelow"]=7735, ["ldotbelowmacron"]=7737, ["leftangleabovecmb"]=794, ["lefttackbelowcmb"]=792, ["less"]=60, ["lessequal"]=8804, ["lessequalorgreater"]=8922, ["lessmonospace"]=65308, ["lessorequivalent"]=8818, ["lessorgreater"]=8822, ["lessoverequal"]=8806, ["lesssmall"]=65124, ["lezh"]=622, ["lfblock"]=9612, ["lhookretroflex"]=621, ["lira"]=8356, ["liwnarmenian"]=1388, ["lj"]=457, ["ljecyrillic"]=1113, ["lladeva"]=2355, ["llagujarati"]=2739, ["llinebelow"]=7739, ["llladeva"]=2356, ["llvocalicbengali"]=2529, ["llvocalicdeva"]=2401, ["llvocalicvowelsignbengali"]=2531, ["llvocalicvowelsigndeva"]=2403, ["lmiddletilde"]=619, ["lmonospace"]=65356, ["lmsquare"]=13264, ["lochulathai"]=3628, ["logicaland"]=8743, ["logicalnot"]=172, ["logicalnotreversed"]=8976, ["logicalor"]=8744, ["lolingthai"]=3621, ["longs"]=383, ["lowlinecenterline"]=65102, ["lowlinecmb"]=818, ["lowlinedashed"]=65101, ["lozenge"]=9674, ["lparen"]=9383, ["lslash"]=322, ["lsquare"]=8467, ["ltshade"]=9617, ["luthai"]=3622, ["lvocalicbengali"]=2444, ["lvocalicdeva"]=2316, ["lvocalicvowelsignbengali"]=2530, ["lvocalicvowelsigndeva"]=2402, ["lxsquare"]=13267, ["m"]=109, ["mabengali"]=2478, ["macron"]=175, ["macronbelowcmb"]=817, ["macroncmb"]=772, ["macronlowmod"]=717, ["macronmonospace"]=65507, ["macute"]=7743, ["madeva"]=2350, ["magujarati"]=2734, ["magurmukhi"]=2606, ["mahapakhhebrew"]=1444, ["mahapakhlefthebrew"]=1444, ["mahiragana"]=12414, ["maichattawathai"]=3659, ["maiekthai"]=3656, ["maihanakatthai"]=3633, ["maitaikhuthai"]=3655, ["maithothai"]=3657, ["maitrithai"]=3658, ["maiyamokthai"]=3654, ["makatakana"]=12510, ["makatakanahalfwidth"]=65423, ["male"]=9794, ["mansyonsquare"]=13127, ["maqafhebrew"]=1470, ["mars"]=9794, ["masoracirclehebrew"]=1455, ["masquare"]=13187, ["mbopomofo"]=12551, ["mbsquare"]=13268, ["mcircle"]=9436, ["mcubedsquare"]=13221, ["mdotaccent"]=7745, ["mdotbelow"]=7747, ["meemarabic"]=1605, ["meemfinalarabic"]=65250, ["meeminitialarabic"]=65251, ["meemmedialarabic"]=65252, ["meemmeeminitialarabic"]=64721, ["meemmeemisolatedarabic"]=64584, ["meetorusquare"]=13133, ["mehiragana"]=12417, ["meizierasquare"]=13182, ["mekatakana"]=12513, ["mekatakanahalfwidth"]=65426, ["mem"]=1502, ["memdagesh"]=64318, ["memdageshhebrew"]=64318, ["memhebrew"]=1502, ["menarmenian"]=1396, ["merkhahebrew"]=1445, ["merkhakefulahebrew"]=1446, ["merkhakefulalefthebrew"]=1446, ["merkhalefthebrew"]=1445, ["mhook"]=625, ["mhzsquare"]=13202, ["middledotkatakanahalfwidth"]=65381, ["middot"]=183, ["mieumacirclekorean"]=12914, ["mieumaparenkorean"]=12818, ["mieumcirclekorean"]=12900, ["mieumkorean"]=12609, ["mieumpansioskorean"]=12656, ["mieumparenkorean"]=12804, ["mieumpieupkorean"]=12654, ["mieumsioskorean"]=12655, ["mihiragana"]=12415, ["mikatakana"]=12511, ["mikatakanahalfwidth"]=65424, ["minus"]=8722, ["minusbelowcmb"]=800, ["minuscircle"]=8854, ["minusmod"]=727, ["minusplus"]=8723, ["minute"]=8242, ["miribaarusquare"]=13130, ["mirisquare"]=13129, ["mlonglegturned"]=624, ["mlsquare"]=13206, ["mmcubedsquare"]=13219, ["mmonospace"]=65357, ["mmsquaredsquare"]=13215, ["mohiragana"]=12418, ["mohmsquare"]=13249, ["mokatakana"]=12514, ["mokatakanahalfwidth"]=65427, ["molsquare"]=13270, ["momathai"]=3617, ["moverssquare"]=13223, ["moverssquaredsquare"]=13224, ["mparen"]=9384, ["mpasquare"]=13227, ["mssquare"]=13235, ["mturned"]=623, ["mu"]=181, ["mu1"]=181, ["muasquare"]=13186, ["muchgreater"]=8811, ["muchless"]=8810, ["mufsquare"]=13196, ["mugreek"]=956, ["mugsquare"]=13197, ["muhiragana"]=12416, ["mukatakana"]=12512, ["mukatakanahalfwidth"]=65425, ["mulsquare"]=13205, ["multiply"]=215, ["mumsquare"]=13211, ["munahhebrew"]=1443, ["munahlefthebrew"]=1443, ["musicalnote"]=9834, ["musicalnotedbl"]=9835, ["musicflatsign"]=9837, ["musicsharpsign"]=9839, ["mussquare"]=13234, ["muvsquare"]=13238, ["muwsquare"]=13244, ["mvmegasquare"]=13241, ["mvsquare"]=13239, ["mwmegasquare"]=13247, ["mwsquare"]=13245, ["n"]=110, ["nabengali"]=2472, ["nabla"]=8711, ["nacute"]=324, ["nadeva"]=2344, ["nagujarati"]=2728, ["nagurmukhi"]=2600, ["nahiragana"]=12394, ["nakatakana"]=12490, ["nakatakanahalfwidth"]=65413, ["napostrophe"]=329, ["nasquare"]=13185, ["nbopomofo"]=12555, ["nbspace"]=160, ["ncaron"]=328, ["ncedilla"]=326, ["ncircle"]=9437, ["ncircumflexbelow"]=7755, ["ncommaaccent"]=326, ["ndotaccent"]=7749, ["ndotbelow"]=7751, ["nehiragana"]=12397, ["nekatakana"]=12493, ["nekatakanahalfwidth"]=65416, ["newsheqelsign"]=8362, ["nfsquare"]=13195, ["ngabengali"]=2457, ["ngadeva"]=2329, ["ngagujarati"]=2713, ["ngagurmukhi"]=2585, ["ngonguthai"]=3591, ["nhiragana"]=12435, ["nhookleft"]=626, ["nhookretroflex"]=627, ["nieunacirclekorean"]=12911, ["nieunaparenkorean"]=12815, ["nieuncieuckorean"]=12597, ["nieuncirclekorean"]=12897, ["nieunhieuhkorean"]=12598, ["nieunkorean"]=12596, ["nieunpansioskorean"]=12648, ["nieunparenkorean"]=12801, ["nieunsioskorean"]=12647, ["nieuntikeutkorean"]=12646, ["nihiragana"]=12395, ["nikatakana"]=12491, ["nikatakanahalfwidth"]=65414, ["nikhahitthai"]=3661, ["nine"]=57, ["ninearabic"]=1641, ["ninebengali"]=2543, ["ninecircle"]=9320, ["ninecircleinversesansserif"]=10130, ["ninedeva"]=2415, ["ninegujarati"]=2799, ["ninegurmukhi"]=2671, ["ninehackarabic"]=1641, ["ninehangzhou"]=12329, ["nineideographicparen"]=12840, ["nineinferior"]=8329, ["ninemonospace"]=65305, ["nineparen"]=9340, ["nineperiod"]=9360, ["ninepersian"]=1785, ["nineroman"]=8568, ["ninesuperior"]=8313, ["nineteencircle"]=9330, ["nineteenparen"]=9350, ["nineteenperiod"]=9370, ["ninethai"]=3673, ["nj"]=460, ["njecyrillic"]=1114, ["nkatakana"]=12531, ["nkatakanahalfwidth"]=65437, ["nlegrightlong"]=414, ["nlinebelow"]=7753, ["nmonospace"]=65358, ["nmsquare"]=13210, ["nnabengali"]=2467, ["nnadeva"]=2339, ["nnagujarati"]=2723, ["nnagurmukhi"]=2595, ["nnnadeva"]=2345, ["nohiragana"]=12398, ["nokatakana"]=12494, ["nokatakanahalfwidth"]=65417, ["nonbreakingspace"]=160, ["nonenthai"]=3603, ["nonuthai"]=3609, ["noonarabic"]=1606, ["noonfinalarabic"]=65254, ["noonghunnaarabic"]=1722, ["noonghunnafinalarabic"]=64415, ["noonhehinitialarabic"]=65255, ["nooninitialarabic"]=65255, ["noonjeeminitialarabic"]=64722, ["noonjeemisolatedarabic"]=64587, ["noonmedialarabic"]=65256, ["noonmeeminitialarabic"]=64725, ["noonmeemisolatedarabic"]=64590, ["noonnoonfinalarabic"]=64653, ["notcontains"]=8716, ["notelement"]=8713, ["notelementof"]=8713, ["notequal"]=8800, ["notgreater"]=8815, ["notgreaternorequal"]=8817, ["notgreaternorless"]=8825, ["notidentical"]=8802, ["notless"]=8814, ["notlessnorequal"]=8816, ["notparallel"]=8742, ["notprecedes"]=8832, ["notsubset"]=8836, ["notsucceeds"]=8833, ["notsuperset"]=8837, ["nowarmenian"]=1398, ["nparen"]=9385, ["nssquare"]=13233, ["nsuperior"]=8319, ["ntilde"]=241, ["nu"]=957, ["nuhiragana"]=12396, ["nukatakana"]=12492, ["nukatakanahalfwidth"]=65415, ["nuktabengali"]=2492, ["nuktadeva"]=2364, ["nuktagujarati"]=2748, ["nuktagurmukhi"]=2620, ["numbersign"]=35, ["numbersignmonospace"]=65283, ["numbersignsmall"]=65119, ["numeralsigngreek"]=884, ["numeralsignlowergreek"]=885, ["numero"]=8470, ["nun"]=1504, ["nundagesh"]=64320, ["nundageshhebrew"]=64320, ["nunhebrew"]=1504, ["nvsquare"]=13237, ["nwsquare"]=13243, ["nyabengali"]=2462, ["nyadeva"]=2334, ["nyagujarati"]=2718, ["nyagurmukhi"]=2590, ["o"]=111, ["oacute"]=243, ["oangthai"]=3629, ["obarred"]=629, ["obarredcyrillic"]=1257, ["obarreddieresiscyrillic"]=1259, ["obengali"]=2451, ["obopomofo"]=12571, ["obreve"]=335, ["ocandradeva"]=2321, ["ocandragujarati"]=2705, ["ocandravowelsigndeva"]=2377, ["ocandravowelsigngujarati"]=2761, ["ocaron"]=466, ["ocircle"]=9438, ["ocircumflex"]=244, ["ocircumflexacute"]=7889, ["ocircumflexdotbelow"]=7897, ["ocircumflexgrave"]=7891, ["ocircumflexhookabove"]=7893, ["ocircumflextilde"]=7895, ["ocyrillic"]=1086, ["odblacute"]=337, ["odblgrave"]=525, ["odeva"]=2323, ["odieresis"]=246, ["odieresiscyrillic"]=1255, ["odotbelow"]=7885, ["oe"]=339, ["oekorean"]=12634, ["ogonek"]=731, ["ogonekcmb"]=808, ["ograve"]=242, ["ogujarati"]=2707, ["oharmenian"]=1413, ["ohiragana"]=12362, ["ohookabove"]=7887, ["ohorn"]=417, ["ohornacute"]=7899, ["ohorndotbelow"]=7907, ["ohorngrave"]=7901, ["ohornhookabove"]=7903, ["ohorntilde"]=7905, ["ohungarumlaut"]=337, ["oi"]=419, ["oinvertedbreve"]=527, ["okatakana"]=12458, ["okatakanahalfwidth"]=65397, ["okorean"]=12631, ["olehebrew"]=1451, ["omacron"]=333, ["omacronacute"]=7763, ["omacrongrave"]=7761, ["omdeva"]=2384, ["omega"]=969, ["omega1"]=982, ["omegacyrillic"]=1121, ["omegalatinclosed"]=631, ["omegaroundcyrillic"]=1147, ["omegatitlocyrillic"]=1149, ["omegatonos"]=974, ["omgujarati"]=2768, ["omicron"]=959, ["omicrontonos"]=972, ["omonospace"]=65359, ["one"]=49, ["onearabic"]=1633, ["onebengali"]=2535, ["onecircle"]=9312, ["onecircleinversesansserif"]=10122, ["onedeva"]=2407, ["onedotenleader"]=8228, ["oneeighth"]=8539, ["onegujarati"]=2791, ["onegurmukhi"]=2663, ["onehackarabic"]=1633, ["onehalf"]=189, ["onehangzhou"]=12321, ["oneideographicparen"]=12832, ["oneinferior"]=8321, ["onemonospace"]=65297, ["onenumeratorbengali"]=2548, ["oneparen"]=9332, ["oneperiod"]=9352, ["onepersian"]=1777, ["onequarter"]=188, ["oneroman"]=8560, ["onesuperior"]=185, ["onethai"]=3665, ["onethird"]=8531, ["oogonek"]=491, ["oogonekmacron"]=493, ["oogurmukhi"]=2579, ["oomatragurmukhi"]=2635, ["oopen"]=596, ["oparen"]=9386, ["openbullet"]=9702, ["option"]=8997, ["ordfeminine"]=170, ["ordmasculine"]=186, ["orthogonal"]=8735, ["oshortdeva"]=2322, ["oshortvowelsigndeva"]=2378, ["oslash"]=248, ["oslashacute"]=511, ["osmallhiragana"]=12361, ["osmallkatakana"]=12457, ["osmallkatakanahalfwidth"]=65387, ["ostrokeacute"]=511, ["otcyrillic"]=1151, ["otilde"]=245, ["otildeacute"]=7757, ["otildedieresis"]=7759, ["oubopomofo"]=12577, ["overline"]=8254, ["overlinecenterline"]=65098, ["overlinecmb"]=773, ["overlinedashed"]=65097, ["overlinedblwavy"]=65100, ["overlinewavy"]=65099, ["overscore"]=175, ["ovowelsignbengali"]=2507, ["ovowelsigndeva"]=2379, ["ovowelsigngujarati"]=2763, ["p"]=112, ["paampssquare"]=13184, ["paasentosquare"]=13099, ["pabengali"]=2474, ["pacute"]=7765, ["padeva"]=2346, ["pagedown"]=8671, ["pageup"]=8670, ["pagujarati"]=2730, ["pagurmukhi"]=2602, ["pahiragana"]=12401, ["paiyannoithai"]=3631, ["pakatakana"]=12497, ["palatalizationcyrilliccmb"]=1156, ["palochkacyrillic"]=1216, ["pansioskorean"]=12671, ["paragraph"]=182, ["parallel"]=8741, ["parenleft"]=40, ["parenleftaltonearabic"]=64830, ["parenleftinferior"]=8333, ["parenleftmonospace"]=65288, ["parenleftsmall"]=65113, ["parenleftsuperior"]=8317, ["parenleftvertical"]=65077, ["parenright"]=41, ["parenrightaltonearabic"]=64831, ["parenrightinferior"]=8334, ["parenrightmonospace"]=65289, ["parenrightsmall"]=65114, ["parenrightsuperior"]=8318, ["parenrightvertical"]=65078, ["partialdiff"]=8706, ["paseqhebrew"]=1472, ["pashtahebrew"]=1433, ["pasquare"]=13225, ["patah"]=1463, ["patah11"]=1463, ["patah1d"]=1463, ["patah2a"]=1463, ["patahhebrew"]=1463, ["patahnarrowhebrew"]=1463, ["patahquarterhebrew"]=1463, ["patahwidehebrew"]=1463, ["pazerhebrew"]=1441, ["pbopomofo"]=12550, ["pcircle"]=9439, ["pdotaccent"]=7767, ["pe"]=1508, ["pecyrillic"]=1087, ["pedagesh"]=64324, ["pedageshhebrew"]=64324, ["peezisquare"]=13115, ["pefinaldageshhebrew"]=64323, ["peharabic"]=1662, ["peharmenian"]=1402, ["pehebrew"]=1508, ["pehfinalarabic"]=64343, ["pehinitialarabic"]=64344, ["pehiragana"]=12410, ["pehmedialarabic"]=64345, ["pekatakana"]=12506, ["pemiddlehookcyrillic"]=1191, ["perafehebrew"]=64334, ["percent"]=37, ["percentarabic"]=1642, ["percentmonospace"]=65285, ["percentsmall"]=65130, ["period"]=46, ["periodarmenian"]=1417, ["periodcentered"]=183, ["periodhalfwidth"]=65377, ["periodmonospace"]=65294, ["periodsmall"]=65106, ["perispomenigreekcmb"]=834, ["perpendicular"]=8869, ["perthousand"]=8240, ["peseta"]=8359, ["pfsquare"]=13194, ["phabengali"]=2475, ["phadeva"]=2347, ["phagujarati"]=2731, ["phagurmukhi"]=2603, ["phi"]=966, ["phi1"]=981, ["phieuphacirclekorean"]=12922, ["phieuphaparenkorean"]=12826, ["phieuphcirclekorean"]=12908, ["phieuphkorean"]=12621, ["phieuphparenkorean"]=12812, ["philatin"]=632, ["phinthuthai"]=3642, ["phisymbolgreek"]=981, ["phook"]=421, ["phophanthai"]=3614, ["phophungthai"]=3612, ["phosamphaothai"]=3616, ["pi"]=960, ["pieupacirclekorean"]=12915, ["pieupaparenkorean"]=12819, ["pieupcieuckorean"]=12662, ["pieupcirclekorean"]=12901, ["pieupkiyeokkorean"]=12658, ["pieupkorean"]=12610, ["pieupparenkorean"]=12805, ["pieupsioskiyeokkorean"]=12660, ["pieupsioskorean"]=12612, ["pieupsiostikeutkorean"]=12661, ["pieupthieuthkorean"]=12663, ["pieuptikeutkorean"]=12659, ["pihiragana"]=12404, ["pikatakana"]=12500, ["pisymbolgreek"]=982, ["piwrarmenian"]=1411, ["plus"]=43, ["plusbelowcmb"]=799, ["pluscircle"]=8853, ["plusminus"]=177, ["plusmod"]=726, ["plusmonospace"]=65291, ["plussmall"]=65122, ["plussuperior"]=8314, ["pmonospace"]=65360, ["pmsquare"]=13272, ["pohiragana"]=12413, ["pointingindexdownwhite"]=9759, ["pointingindexleftwhite"]=9756, ["pointingindexrightwhite"]=9758, ["pointingindexupwhite"]=9757, ["pokatakana"]=12509, ["poplathai"]=3611, ["postalmark"]=12306, ["postalmarkface"]=12320, ["pparen"]=9387, ["precedes"]=8826, ["prescription"]=8478, ["primemod"]=697, ["primereversed"]=8245, ["product"]=8719, ["projective"]=8965, ["prolongedkana"]=12540, ["propellor"]=8984, ["propersubset"]=8834, ["propersuperset"]=8835, ["proportion"]=8759, ["proportional"]=8733, ["psi"]=968, ["psicyrillic"]=1137, ["psilipneumatacyrilliccmb"]=1158, ["pssquare"]=13232, ["puhiragana"]=12407, ["pukatakana"]=12503, ["pvsquare"]=13236, ["pwsquare"]=13242, ["q"]=113, ["qadeva"]=2392, ["qadmahebrew"]=1448, ["qafarabic"]=1602, ["qaffinalarabic"]=65238, ["qafinitialarabic"]=65239, ["qafmedialarabic"]=65240, ["qamats"]=1464, ["qamats10"]=1464, ["qamats1a"]=1464, ["qamats1c"]=1464, ["qamats27"]=1464, ["qamats29"]=1464, ["qamats33"]=1464, ["qamatsde"]=1464, ["qamatshebrew"]=1464, ["qamatsnarrowhebrew"]=1464, ["qamatsqatanhebrew"]=1464, ["qamatsqatannarrowhebrew"]=1464, ["qamatsqatanquarterhebrew"]=1464, ["qamatsqatanwidehebrew"]=1464, ["qamatsquarterhebrew"]=1464, ["qamatswidehebrew"]=1464, ["qarneyparahebrew"]=1439, ["qbopomofo"]=12561, ["qcircle"]=9440, ["qhook"]=672, ["qmonospace"]=65361, ["qof"]=1511, ["qofdagesh"]=64327, ["qofdageshhebrew"]=64327, ["qofhatafpatah"]=1511, ["qofhatafpatahhebrew"]=1511, ["qofhatafsegol"]=1511, ["qofhatafsegolhebrew"]=1511, ["qofhebrew"]=1511, ["qofhiriq"]=1511, ["qofhiriqhebrew"]=1511, ["qofholam"]=1511, ["qofholamhebrew"]=1511, ["qofpatah"]=1511, ["qofpatahhebrew"]=1511, ["qofqamats"]=1511, ["qofqamatshebrew"]=1511, ["qofqubuts"]=1511, ["qofqubutshebrew"]=1511, ["qofsegol"]=1511, ["qofsegolhebrew"]=1511, ["qofsheva"]=1511, ["qofshevahebrew"]=1511, ["qoftsere"]=1511, ["qoftserehebrew"]=1511, ["qparen"]=9388, ["quarternote"]=9833, ["qubuts"]=1467, ["qubuts18"]=1467, ["qubuts25"]=1467, ["qubuts31"]=1467, ["qubutshebrew"]=1467, ["qubutsnarrowhebrew"]=1467, ["qubutsquarterhebrew"]=1467, ["qubutswidehebrew"]=1467, ["question"]=63, ["questionarabic"]=1567, ["questionarmenian"]=1374, ["questiondown"]=191, ["questiongreek"]=894, ["questionmonospace"]=65311, ["quotedbl"]=34, ["quotedblbase"]=8222, ["quotedblleft"]=8220, ["quotedblmonospace"]=65282, ["quotedblprime"]=12318, ["quotedblprimereversed"]=12317, ["quotedblright"]=8221, ["quoteleft"]=8216, ["quoteleftreversed"]=8219, ["quotereversed"]=8219, ["quoteright"]=8217, ["quoterightn"]=329, ["quotesinglbase"]=8218, ["quotesingle"]=39, ["quotesinglemonospace"]=65287, ["r"]=114, ["raarmenian"]=1404, ["rabengali"]=2480, ["racute"]=341, ["radeva"]=2352, ["radical"]=8730, ["radoverssquare"]=13230, ["radoverssquaredsquare"]=13231, ["radsquare"]=13229, ["rafe"]=1471, ["rafehebrew"]=1471, ["ragujarati"]=2736, ["ragurmukhi"]=2608, ["rahiragana"]=12425, ["rakatakana"]=12521, ["rakatakanahalfwidth"]=65431, ["ralowerdiagonalbengali"]=2545, ["ramiddlediagonalbengali"]=2544, ["ramshorn"]=612, ["ratio"]=8758, ["rbopomofo"]=12566, ["rcaron"]=345, ["rcedilla"]=343, ["rcircle"]=9441, ["rcommaaccent"]=343, ["rdblgrave"]=529, ["rdotaccent"]=7769, ["rdotbelow"]=7771, ["rdotbelowmacron"]=7773, ["referencemark"]=8251, ["reflexsubset"]=8838, ["reflexsuperset"]=8839, ["registered"]=174, ["reharabic"]=1585, ["reharmenian"]=1408, ["rehfinalarabic"]=65198, ["rehiragana"]=12428, ["rehyehaleflamarabic"]=1585, ["rekatakana"]=12524, ["rekatakanahalfwidth"]=65434, ["resh"]=1512, ["reshdageshhebrew"]=64328, ["reshhatafpatah"]=1512, ["reshhatafpatahhebrew"]=1512, ["reshhatafsegol"]=1512, ["reshhatafsegolhebrew"]=1512, ["reshhebrew"]=1512, ["reshhiriq"]=1512, ["reshhiriqhebrew"]=1512, ["reshholam"]=1512, ["reshholamhebrew"]=1512, ["reshpatah"]=1512, ["reshpatahhebrew"]=1512, ["reshqamats"]=1512, ["reshqamatshebrew"]=1512, ["reshqubuts"]=1512, ["reshqubutshebrew"]=1512, ["reshsegol"]=1512, ["reshsegolhebrew"]=1512, ["reshsheva"]=1512, ["reshshevahebrew"]=1512, ["reshtsere"]=1512, ["reshtserehebrew"]=1512, ["reversedtilde"]=8765, ["reviahebrew"]=1431, ["reviamugrashhebrew"]=1431, ["revlogicalnot"]=8976, ["rfishhook"]=638, ["rfishhookreversed"]=639, ["rhabengali"]=2525, ["rhadeva"]=2397, ["rho"]=961, ["rhook"]=637, ["rhookturned"]=635, ["rhookturnedsuperior"]=693, ["rhosymbolgreek"]=1009, ["rhotichookmod"]=734, ["rieulacirclekorean"]=12913, ["rieulaparenkorean"]=12817, ["rieulcirclekorean"]=12899, ["rieulhieuhkorean"]=12608, ["rieulkiyeokkorean"]=12602, ["rieulkiyeoksioskorean"]=12649, ["rieulkorean"]=12601, ["rieulmieumkorean"]=12603, ["rieulpansioskorean"]=12652, ["rieulparenkorean"]=12803, ["rieulphieuphkorean"]=12607, ["rieulpieupkorean"]=12604, ["rieulpieupsioskorean"]=12651, ["rieulsioskorean"]=12605, ["rieulthieuthkorean"]=12606, ["rieultikeutkorean"]=12650, ["rieulyeorinhieuhkorean"]=12653, ["rightangle"]=8735, ["righttackbelowcmb"]=793, ["righttriangle"]=8895, ["rihiragana"]=12426, ["rikatakana"]=12522, ["rikatakanahalfwidth"]=65432, ["ring"]=730, ["ringbelowcmb"]=805, ["ringcmb"]=778, ["ringhalfleft"]=703, ["ringhalfleftarmenian"]=1369, ["ringhalfleftbelowcmb"]=796, ["ringhalfleftcentered"]=723, ["ringhalfright"]=702, ["ringhalfrightbelowcmb"]=825, ["ringhalfrightcentered"]=722, ["rinvertedbreve"]=531, ["rittorusquare"]=13137, ["rlinebelow"]=7775, ["rlongleg"]=636, ["rlonglegturned"]=634, ["rmonospace"]=65362, ["rohiragana"]=12429, ["rokatakana"]=12525, ["rokatakanahalfwidth"]=65435, ["roruathai"]=3619, ["rparen"]=9389, ["rrabengali"]=2524, ["rradeva"]=2353, ["rragurmukhi"]=2652, ["rreharabic"]=1681, ["rrehfinalarabic"]=64397, ["rrvocalicbengali"]=2528, ["rrvocalicdeva"]=2400, ["rrvocalicgujarati"]=2784, ["rrvocalicvowelsignbengali"]=2500, ["rrvocalicvowelsigndeva"]=2372, ["rrvocalicvowelsigngujarati"]=2756, ["rtblock"]=9616, ["rturned"]=633, ["rturnedsuperior"]=692, ["ruhiragana"]=12427, ["rukatakana"]=12523, ["rukatakanahalfwidth"]=65433, ["rupeemarkbengali"]=2546, ["rupeesignbengali"]=2547, ["ruthai"]=3620, ["rvocalicbengali"]=2443, ["rvocalicdeva"]=2315, ["rvocalicgujarati"]=2699, ["rvocalicvowelsignbengali"]=2499, ["rvocalicvowelsigndeva"]=2371, ["rvocalicvowelsigngujarati"]=2755, ["s"]=115, ["sabengali"]=2488, ["sacute"]=347, ["sacutedotaccent"]=7781, ["sadarabic"]=1589, ["sadeva"]=2360, ["sadfinalarabic"]=65210, ["sadinitialarabic"]=65211, ["sadmedialarabic"]=65212, ["sagujarati"]=2744, ["sagurmukhi"]=2616, ["sahiragana"]=12373, ["sakatakana"]=12469, ["sakatakanahalfwidth"]=65403, ["sallallahoualayhewasallamarabic"]=65018, ["samekh"]=1505, ["samekhdagesh"]=64321, ["samekhdageshhebrew"]=64321, ["samekhhebrew"]=1505, ["saraaathai"]=3634, ["saraaethai"]=3649, ["saraaimaimalaithai"]=3652, ["saraaimaimuanthai"]=3651, ["saraamthai"]=3635, ["saraathai"]=3632, ["saraethai"]=3648, ["saraiithai"]=3637, ["saraithai"]=3636, ["saraothai"]=3650, ["saraueethai"]=3639, ["sarauethai"]=3638, ["sarauthai"]=3640, ["sarauuthai"]=3641, ["sbopomofo"]=12569, ["scaron"]=353, ["scarondotaccent"]=7783, ["scedilla"]=351, ["schwa"]=601, ["schwacyrillic"]=1241, ["schwadieresiscyrillic"]=1243, ["schwahook"]=602, ["scircle"]=9442, ["scircumflex"]=349, ["scommaaccent"]=537, ["sdotaccent"]=7777, ["sdotbelow"]=7779, ["sdotbelowdotaccent"]=7785, ["seagullbelowcmb"]=828, ["second"]=8243, ["secondtonechinese"]=714, ["section"]=167, ["seenarabic"]=1587, ["seenfinalarabic"]=65202, ["seeninitialarabic"]=65203, ["seenmedialarabic"]=65204, ["segol"]=1462, ["segol13"]=1462, ["segol1f"]=1462, ["segol2c"]=1462, ["segolhebrew"]=1462, ["segolnarrowhebrew"]=1462, ["segolquarterhebrew"]=1462, ["segoltahebrew"]=1426, ["segolwidehebrew"]=1462, ["seharmenian"]=1405, ["sehiragana"]=12379, ["sekatakana"]=12475, ["sekatakanahalfwidth"]=65406, ["semicolon"]=59, ["semicolonarabic"]=1563, ["semicolonmonospace"]=65307, ["semicolonsmall"]=65108, ["semivoicedmarkkana"]=12444, ["semivoicedmarkkanahalfwidth"]=65439, ["sentisquare"]=13090, ["sentosquare"]=13091, ["seven"]=55, ["sevenarabic"]=1639, ["sevenbengali"]=2541, ["sevencircle"]=9318, ["sevencircleinversesansserif"]=10128, ["sevendeva"]=2413, ["seveneighths"]=8542, ["sevengujarati"]=2797, ["sevengurmukhi"]=2669, ["sevenhackarabic"]=1639, ["sevenhangzhou"]=12327, ["sevenideographicparen"]=12838, ["seveninferior"]=8327, ["sevenmonospace"]=65303, ["sevenparen"]=9338, ["sevenperiod"]=9358, ["sevenpersian"]=1783, ["sevenroman"]=8566, ["sevensuperior"]=8311, ["seventeencircle"]=9328, ["seventeenparen"]=9348, ["seventeenperiod"]=9368, ["seventhai"]=3671, ["sfthyphen"]=173, ["shaarmenian"]=1399, ["shabengali"]=2486, ["shacyrillic"]=1096, ["shaddaarabic"]=1617, ["shaddadammaarabic"]=64609, ["shaddadammatanarabic"]=64606, ["shaddafathaarabic"]=64608, ["shaddafathatanarabic"]=1617, ["shaddakasraarabic"]=64610, ["shaddakasratanarabic"]=64607, ["shade"]=9618, ["shadedark"]=9619, ["shadelight"]=9617, ["shademedium"]=9618, ["shadeva"]=2358, ["shagujarati"]=2742, ["shagurmukhi"]=2614, ["shalshelethebrew"]=1427, ["shbopomofo"]=12565, ["shchacyrillic"]=1097, ["sheenarabic"]=1588, ["sheenfinalarabic"]=65206, ["sheeninitialarabic"]=65207, ["sheenmedialarabic"]=65208, ["sheicoptic"]=995, ["sheqel"]=8362, ["sheqelhebrew"]=8362, ["sheva"]=1456, ["sheva115"]=1456, ["sheva15"]=1456, ["sheva22"]=1456, ["sheva2e"]=1456, ["shevahebrew"]=1456, ["shevanarrowhebrew"]=1456, ["shevaquarterhebrew"]=1456, ["shevawidehebrew"]=1456, ["shhacyrillic"]=1211, ["shimacoptic"]=1005, ["shin"]=1513, ["shindagesh"]=64329, ["shindageshhebrew"]=64329, ["shindageshshindot"]=64300, ["shindageshshindothebrew"]=64300, ["shindageshsindot"]=64301, ["shindageshsindothebrew"]=64301, ["shindothebrew"]=1473, ["shinhebrew"]=1513, ["shinshindot"]=64298, ["shinshindothebrew"]=64298, ["shinsindot"]=64299, ["shinsindothebrew"]=64299, ["shook"]=642, ["sigma"]=963, ["sigma1"]=962, ["sigmafinal"]=962, ["sigmalunatesymbolgreek"]=1010, ["sihiragana"]=12375, ["sikatakana"]=12471, ["sikatakanahalfwidth"]=65404, ["siluqhebrew"]=1469, ["siluqlefthebrew"]=1469, ["similar"]=8764, ["sindothebrew"]=1474, ["siosacirclekorean"]=12916, ["siosaparenkorean"]=12820, ["sioscieuckorean"]=12670, ["sioscirclekorean"]=12902, ["sioskiyeokkorean"]=12666, ["sioskorean"]=12613, ["siosnieunkorean"]=12667, ["siosparenkorean"]=12806, ["siospieupkorean"]=12669, ["siostikeutkorean"]=12668, ["six"]=54, ["sixarabic"]=1638, ["sixbengali"]=2540, ["sixcircle"]=9317, ["sixcircleinversesansserif"]=10127, ["sixdeva"]=2412, ["sixgujarati"]=2796, ["sixgurmukhi"]=2668, ["sixhackarabic"]=1638, ["sixhangzhou"]=12326, ["sixideographicparen"]=12837, ["sixinferior"]=8326, ["sixmonospace"]=65302, ["sixparen"]=9337, ["sixperiod"]=9357, ["sixpersian"]=1782, ["sixroman"]=8565, ["sixsuperior"]=8310, ["sixteencircle"]=9327, ["sixteencurrencydenominatorbengali"]=2553, ["sixteenparen"]=9347, ["sixteenperiod"]=9367, ["sixthai"]=3670, ["slash"]=47, ["slashmonospace"]=65295, ["slong"]=383, ["slongdotaccent"]=7835, ["smileface"]=9786, ["smonospace"]=65363, ["sofpasuqhebrew"]=1475, ["softhyphen"]=173, ["softsigncyrillic"]=1100, ["sohiragana"]=12381, ["sokatakana"]=12477, ["sokatakanahalfwidth"]=65407, ["soliduslongoverlaycmb"]=824, ["solidusshortoverlaycmb"]=823, ["sorusithai"]=3625, ["sosalathai"]=3624, ["sosothai"]=3595, ["sosuathai"]=3626, ["space"]=32, ["spacehackarabic"]=32, ["spade"]=9824, ["spadesuitblack"]=9824, ["spadesuitwhite"]=9828, ["sparen"]=9390, ["squarebelowcmb"]=827, ["squarecc"]=13252, ["squarecm"]=13213, ["squarediagonalcrosshatchfill"]=9641, ["squarehorizontalfill"]=9636, ["squarekg"]=13199, ["squarekm"]=13214, ["squarekmcapital"]=13262, ["squareln"]=13265, ["squarelog"]=13266, ["squaremg"]=13198, ["squaremil"]=13269, ["squaremm"]=13212, ["squaremsquared"]=13217, ["squareorthogonalcrosshatchfill"]=9638, ["squareupperlefttolowerrightfill"]=9639, ["squareupperrighttolowerleftfill"]=9640, ["squareverticalfill"]=9637, ["squarewhitewithsmallblack"]=9635, ["srsquare"]=13275, ["ssabengali"]=2487, ["ssadeva"]=2359, ["ssagujarati"]=2743, ["ssangcieuckorean"]=12617, ["ssanghieuhkorean"]=12677, ["ssangieungkorean"]=12672, ["ssangkiyeokkorean"]=12594, ["ssangnieunkorean"]=12645, ["ssangpieupkorean"]=12611, ["ssangsioskorean"]=12614, ["ssangtikeutkorean"]=12600, ["sterling"]=163, ["sterlingmonospace"]=65505, ["strokelongoverlaycmb"]=822, ["strokeshortoverlaycmb"]=821, ["subset"]=8834, ["subsetnotequal"]=8842, ["subsetorequal"]=8838, ["succeeds"]=8827, ["suchthat"]=8715, ["suhiragana"]=12377, ["sukatakana"]=12473, ["sukatakanahalfwidth"]=65405, ["sukunarabic"]=1618, ["summation"]=8721, ["sun"]=9788, ["superset"]=8835, ["supersetnotequal"]=8843, ["supersetorequal"]=8839, ["svsquare"]=13276, ["syouwaerasquare"]=13180, ["t"]=116, ["tabengali"]=2468, ["tackdown"]=8868, ["tackleft"]=8867, ["tadeva"]=2340, ["tagujarati"]=2724, ["tagurmukhi"]=2596, ["taharabic"]=1591, ["tahfinalarabic"]=65218, ["tahinitialarabic"]=65219, ["tahiragana"]=12383, ["tahmedialarabic"]=65220, ["taisyouerasquare"]=13181, ["takatakana"]=12479, ["takatakanahalfwidth"]=65408, ["tatweelarabic"]=1600, ["tau"]=964, ["tav"]=1514, ["tavdages"]=64330, ["tavdagesh"]=64330, ["tavdageshhebrew"]=64330, ["tavhebrew"]=1514, ["tbar"]=359, ["tbopomofo"]=12554, ["tcaron"]=357, ["tccurl"]=680, ["tcedilla"]=355, ["tcheharabic"]=1670, ["tchehfinalarabic"]=64379, ["tchehinitialarabic"]=64380, ["tchehmedialarabic"]=64381, ["tchehmeeminitialarabic"]=64380, ["tcircle"]=9443, ["tcircumflexbelow"]=7793, ["tcommaaccent"]=355, ["tdieresis"]=7831, ["tdotaccent"]=7787, ["tdotbelow"]=7789, ["tecyrillic"]=1090, ["tedescendercyrillic"]=1197, ["teharabic"]=1578, ["tehfinalarabic"]=65174, ["tehhahinitialarabic"]=64674, ["tehhahisolatedarabic"]=64524, ["tehinitialarabic"]=65175, ["tehiragana"]=12390, ["tehjeeminitialarabic"]=64673, ["tehjeemisolatedarabic"]=64523, ["tehmarbutaarabic"]=1577, ["tehmarbutafinalarabic"]=65172, ["tehmedialarabic"]=65176, ["tehmeeminitialarabic"]=64676, ["tehmeemisolatedarabic"]=64526, ["tehnoonfinalarabic"]=64627, ["tekatakana"]=12486, ["tekatakanahalfwidth"]=65411, ["telephone"]=8481, ["telephoneblack"]=9742, ["telishagedolahebrew"]=1440, ["telishaqetanahebrew"]=1449, ["tencircle"]=9321, ["tenideographicparen"]=12841, ["tenparen"]=9341, ["tenperiod"]=9361, ["tenroman"]=8569, ["tesh"]=679, ["tet"]=1496, ["tetdagesh"]=64312, ["tetdageshhebrew"]=64312, ["tethebrew"]=1496, ["tetsecyrillic"]=1205, ["tevirhebrew"]=1435, ["tevirlefthebrew"]=1435, ["thabengali"]=2469, ["thadeva"]=2341, ["thagujarati"]=2725, ["thagurmukhi"]=2597, ["thalarabic"]=1584, ["thalfinalarabic"]=65196, ["thanthakhatthai"]=3660, ["theharabic"]=1579, ["thehfinalarabic"]=65178, ["thehinitialarabic"]=65179, ["thehmedialarabic"]=65180, ["thereexists"]=8707, ["therefore"]=8756, ["theta"]=952, ["theta1"]=977, ["thetasymbolgreek"]=977, ["thieuthacirclekorean"]=12921, ["thieuthaparenkorean"]=12825, ["thieuthcirclekorean"]=12907, ["thieuthkorean"]=12620, ["thieuthparenkorean"]=12811, ["thirteencircle"]=9324, ["thirteenparen"]=9344, ["thirteenperiod"]=9364, ["thonangmonthothai"]=3601, ["thook"]=429, ["thophuthaothai"]=3602, ["thorn"]=254, ["thothahanthai"]=3607, ["thothanthai"]=3600, ["thothongthai"]=3608, ["thothungthai"]=3606, ["thousandcyrillic"]=1154, ["thousandsseparatorarabic"]=1644, ["thousandsseparatorpersian"]=1644, ["three"]=51, ["threearabic"]=1635, ["threebengali"]=2537, ["threecircle"]=9314, ["threecircleinversesansserif"]=10124, ["threedeva"]=2409, ["threeeighths"]=8540, ["threegujarati"]=2793, ["threegurmukhi"]=2665, ["threehackarabic"]=1635, ["threehangzhou"]=12323, ["threeideographicparen"]=12834, ["threeinferior"]=8323, ["threemonospace"]=65299, ["threenumeratorbengali"]=2550, ["threeparen"]=9334, ["threeperiod"]=9354, ["threepersian"]=1779, ["threequarters"]=190, ["threeroman"]=8562, ["threesuperior"]=179, ["threethai"]=3667, ["thzsquare"]=13204, ["tihiragana"]=12385, ["tikatakana"]=12481, ["tikatakanahalfwidth"]=65409, ["tikeutacirclekorean"]=12912, ["tikeutaparenkorean"]=12816, ["tikeutcirclekorean"]=12898, ["tikeutkorean"]=12599, ["tikeutparenkorean"]=12802, ["tilde"]=732, ["tildebelowcmb"]=816, ["tildecmb"]=771, ["tildecomb"]=771, ["tildedoublecmb"]=864, ["tildeoperator"]=8764, ["tildeoverlaycmb"]=820, ["tildeverticalcmb"]=830, ["timescircle"]=8855, ["tipehahebrew"]=1430, ["tipehalefthebrew"]=1430, ["tippigurmukhi"]=2672, ["titlocyrilliccmb"]=1155, ["tiwnarmenian"]=1407, ["tlinebelow"]=7791, ["tmonospace"]=65364, ["toarmenian"]=1385, ["tohiragana"]=12392, ["tokatakana"]=12488, ["tokatakanahalfwidth"]=65412, ["tonebarextrahighmod"]=741, ["tonebarextralowmod"]=745, ["tonebarhighmod"]=742, ["tonebarlowmod"]=744, ["tonebarmidmod"]=743, ["tonefive"]=445, ["tonesix"]=389, ["tonetwo"]=424, ["tonos"]=900, ["tonsquare"]=13095, ["topatakthai"]=3599, ["tortoiseshellbracketleft"]=12308, ["tortoiseshellbracketleftsmall"]=65117, ["tortoiseshellbracketleftvertical"]=65081, ["tortoiseshellbracketright"]=12309, ["tortoiseshellbracketrightsmall"]=65118, ["tortoiseshellbracketrightvertical"]=65082, ["totaothai"]=3605, ["tpalatalhook"]=427, ["tparen"]=9391, ["trademark"]=8482, ["tretroflexhook"]=648, ["triagdn"]=9660, ["triaglf"]=9668, ["triagrt"]=9658, ["triagup"]=9650, ["ts"]=678, ["tsadi"]=1510, ["tsadidagesh"]=64326, ["tsadidageshhebrew"]=64326, ["tsadihebrew"]=1510, ["tsecyrillic"]=1094, ["tsere"]=1461, ["tsere12"]=1461, ["tsere1e"]=1461, ["tsere2b"]=1461, ["tserehebrew"]=1461, ["tserenarrowhebrew"]=1461, ["tserequarterhebrew"]=1461, ["tserewidehebrew"]=1461, ["tshecyrillic"]=1115, ["ttabengali"]=2463, ["ttadeva"]=2335, ["ttagujarati"]=2719, ["ttagurmukhi"]=2591, ["tteharabic"]=1657, ["ttehfinalarabic"]=64359, ["ttehinitialarabic"]=64360, ["ttehmedialarabic"]=64361, ["tthabengali"]=2464, ["tthadeva"]=2336, ["tthagujarati"]=2720, ["tthagurmukhi"]=2592, ["tturned"]=647, ["tuhiragana"]=12388, ["tukatakana"]=12484, ["tukatakanahalfwidth"]=65410, ["tusmallhiragana"]=12387, ["tusmallkatakana"]=12483, ["tusmallkatakanahalfwidth"]=65391, ["twelvecircle"]=9323, ["twelveparen"]=9343, ["twelveperiod"]=9363, ["twelveroman"]=8571, ["twentycircle"]=9331, ["twentyparen"]=9351, ["twentyperiod"]=9371, ["two"]=50, ["twoarabic"]=1634, ["twobengali"]=2536, ["twocircle"]=9313, ["twocircleinversesansserif"]=10123, ["twodeva"]=2408, ["twodotenleader"]=8229, ["twodotleader"]=8229, ["twodotleadervertical"]=65072, ["twogujarati"]=2792, ["twogurmukhi"]=2664, ["twohackarabic"]=1634, ["twohangzhou"]=12322, ["twoideographicparen"]=12833, ["twoinferior"]=8322, ["twomonospace"]=65298, ["twonumeratorbengali"]=2549, ["twoparen"]=9333, ["twoperiod"]=9353, ["twopersian"]=1778, ["tworoman"]=8561, ["twostroke"]=443, ["twosuperior"]=178, ["twothai"]=3666, ["twothirds"]=8532, ["u"]=117, ["uacute"]=250, ["ubar"]=649, ["ubengali"]=2441, ["ubopomofo"]=12584, ["ubreve"]=365, ["ucaron"]=468, ["ucircle"]=9444, ["ucircumflex"]=251, ["ucircumflexbelow"]=7799, ["ucyrillic"]=1091, ["udattadeva"]=2385, ["udblacute"]=369, ["udblgrave"]=533, ["udeva"]=2313, ["udieresis"]=252, ["udieresisacute"]=472, ["udieresisbelow"]=7795, ["udieresiscaron"]=474, ["udieresiscyrillic"]=1265, ["udieresisgrave"]=476, ["udieresismacron"]=470, ["udotbelow"]=7909, ["ugrave"]=249, ["ugujarati"]=2697, ["ugurmukhi"]=2569, ["uhiragana"]=12358, ["uhookabove"]=7911, ["uhorn"]=432, ["uhornacute"]=7913, ["uhorndotbelow"]=7921, ["uhorngrave"]=7915, ["uhornhookabove"]=7917, ["uhorntilde"]=7919, ["uhungarumlaut"]=369, ["uhungarumlautcyrillic"]=1267, ["uinvertedbreve"]=535, ["ukatakana"]=12454, ["ukatakanahalfwidth"]=65395, ["ukcyrillic"]=1145, ["ukorean"]=12636, ["umacron"]=363, ["umacroncyrillic"]=1263, ["umacrondieresis"]=7803, ["umatragurmukhi"]=2625, ["umonospace"]=65365, ["underscore"]=95, ["underscoredbl"]=8215, ["underscoremonospace"]=65343, ["underscorevertical"]=65075, ["underscorewavy"]=65103, ["union"]=8746, ["universal"]=8704, ["uogonek"]=371, ["uparen"]=9392, ["upblock"]=9600, ["upperdothebrew"]=1476, ["upsilon"]=965, ["upsilondieresis"]=971, ["upsilondieresistonos"]=944, ["upsilonlatin"]=650, ["upsilontonos"]=973, ["uptackbelowcmb"]=797, ["uptackmod"]=724, ["uragurmukhi"]=2675, ["uring"]=367, ["ushortcyrillic"]=1118, ["usmallhiragana"]=12357, ["usmallkatakana"]=12453, ["usmallkatakanahalfwidth"]=65385, ["ustraightcyrillic"]=1199, ["ustraightstrokecyrillic"]=1201, ["utilde"]=361, ["utildeacute"]=7801, ["utildebelow"]=7797, ["uubengali"]=2442, ["uudeva"]=2314, ["uugujarati"]=2698, ["uugurmukhi"]=2570, ["uumatragurmukhi"]=2626, ["uuvowelsignbengali"]=2498, ["uuvowelsigndeva"]=2370, ["uuvowelsigngujarati"]=2754, ["uvowelsignbengali"]=2497, ["uvowelsigndeva"]=2369, ["uvowelsigngujarati"]=2753, ["v"]=118, ["vadeva"]=2357, ["vagujarati"]=2741, ["vagurmukhi"]=2613, ["vakatakana"]=12535, ["vav"]=1493, ["vavdagesh"]=64309, ["vavdagesh65"]=64309, ["vavdageshhebrew"]=64309, ["vavhebrew"]=1493, ["vavholam"]=64331, ["vavholamhebrew"]=64331, ["vavvavhebrew"]=1520, ["vavyodhebrew"]=1521, ["vcircle"]=9445, ["vdotbelow"]=7807, ["vecyrillic"]=1074, ["veharabic"]=1700, ["vehfinalarabic"]=64363, ["vehinitialarabic"]=64364, ["vehmedialarabic"]=64365, ["vekatakana"]=12537, ["venus"]=9792, ["verticalbar"]=124, ["verticallineabovecmb"]=781, ["verticallinebelowcmb"]=809, ["verticallinelowmod"]=716, ["verticallinemod"]=712, ["vewarmenian"]=1406, ["vhook"]=651, ["vikatakana"]=12536, ["viramabengali"]=2509, ["viramadeva"]=2381, ["viramagujarati"]=2765, ["visargabengali"]=2435, ["visargadeva"]=2307, ["visargagujarati"]=2691, ["vmonospace"]=65366, ["voarmenian"]=1400, ["voicediterationhiragana"]=12446, ["voicediterationkatakana"]=12542, ["voicedmarkkana"]=12443, ["voicedmarkkanahalfwidth"]=65438, ["vokatakana"]=12538, ["vparen"]=9393, ["vtilde"]=7805, ["vturned"]=652, ["vuhiragana"]=12436, ["vukatakana"]=12532, ["w"]=119, ["wacute"]=7811, ["waekorean"]=12633, ["wahiragana"]=12431, ["wakatakana"]=12527, ["wakatakanahalfwidth"]=65436, ["wakorean"]=12632, ["wasmallhiragana"]=12430, ["wasmallkatakana"]=12526, ["wattosquare"]=13143, ["wavedash"]=12316, ["wavyunderscorevertical"]=65076, ["wawarabic"]=1608, ["wawfinalarabic"]=65262, ["wawhamzaabovearabic"]=1572, ["wawhamzaabovefinalarabic"]=65158, ["wbsquare"]=13277, ["wcircle"]=9446, ["wcircumflex"]=373, ["wdieresis"]=7813, ["wdotaccent"]=7815, ["wdotbelow"]=7817, ["wehiragana"]=12433, ["weierstrass"]=8472, ["wekatakana"]=12529, ["wekorean"]=12638, ["weokorean"]=12637, ["wgrave"]=7809, ["whitebullet"]=9702, ["whitecircle"]=9675, ["whitecircleinverse"]=9689, ["whitecornerbracketleft"]=12302, ["whitecornerbracketleftvertical"]=65091, ["whitecornerbracketright"]=12303, ["whitecornerbracketrightvertical"]=65092, ["whitediamond"]=9671, ["whitediamondcontainingblacksmalldiamond"]=9672, ["whitedownpointingsmalltriangle"]=9663, ["whitedownpointingtriangle"]=9661, ["whiteleftpointingsmalltriangle"]=9667, ["whiteleftpointingtriangle"]=9665, ["whitelenticularbracketleft"]=12310, ["whitelenticularbracketright"]=12311, ["whiterightpointingsmalltriangle"]=9657, ["whiterightpointingtriangle"]=9655, ["whitesmallsquare"]=9643, ["whitesmilingface"]=9786, ["whitesquare"]=9633, ["whitestar"]=9734, ["whitetelephone"]=9743, ["whitetortoiseshellbracketleft"]=12312, ["whitetortoiseshellbracketright"]=12313, ["whiteuppointingsmalltriangle"]=9653, ["whiteuppointingtriangle"]=9651, ["wihiragana"]=12432, ["wikatakana"]=12528, ["wikorean"]=12639, ["wmonospace"]=65367, ["wohiragana"]=12434, ["wokatakana"]=12530, ["wokatakanahalfwidth"]=65382, ["won"]=8361, ["wonmonospace"]=65510, ["wowaenthai"]=3623, ["wparen"]=9394, ["wring"]=7832, ["wsuperior"]=695, ["wturned"]=653, ["wynn"]=447, ["x"]=120, ["xabovecmb"]=829, ["xbopomofo"]=12562, ["xcircle"]=9447, ["xdieresis"]=7821, ["xdotaccent"]=7819, ["xeharmenian"]=1389, ["xi"]=958, ["xmonospace"]=65368, ["xparen"]=9395, ["xsuperior"]=739, ["y"]=121, ["yaadosquare"]=13134, ["yabengali"]=2479, ["yacute"]=253, ["yadeva"]=2351, ["yaekorean"]=12626, ["yagujarati"]=2735, ["yagurmukhi"]=2607, ["yahiragana"]=12420, ["yakatakana"]=12516, ["yakatakanahalfwidth"]=65428, ["yakorean"]=12625, ["yamakkanthai"]=3662, ["yasmallhiragana"]=12419, ["yasmallkatakana"]=12515, ["yasmallkatakanahalfwidth"]=65388, ["yatcyrillic"]=1123, ["ycircle"]=9448, ["ycircumflex"]=375, ["ydieresis"]=255, ["ydotaccent"]=7823, ["ydotbelow"]=7925, ["yeharabic"]=1610, ["yehbarreearabic"]=1746, ["yehbarreefinalarabic"]=64431, ["yehfinalarabic"]=65266, ["yehhamzaabovearabic"]=1574, ["yehhamzaabovefinalarabic"]=65162, ["yehhamzaaboveinitialarabic"]=65163, ["yehhamzaabovemedialarabic"]=65164, ["yehinitialarabic"]=65267, ["yehmedialarabic"]=65268, ["yehmeeminitialarabic"]=64733, ["yehmeemisolatedarabic"]=64600, ["yehnoonfinalarabic"]=64660, ["yehthreedotsbelowarabic"]=1745, ["yekorean"]=12630, ["yen"]=165, ["yenmonospace"]=65509, ["yeokorean"]=12629, ["yeorinhieuhkorean"]=12678, ["yerahbenyomohebrew"]=1450, ["yerahbenyomolefthebrew"]=1450, ["yericyrillic"]=1099, ["yerudieresiscyrillic"]=1273, ["yesieungkorean"]=12673, ["yesieungpansioskorean"]=12675, ["yesieungsioskorean"]=12674, ["yetivhebrew"]=1434, ["ygrave"]=7923, ["yhook"]=436, ["yhookabove"]=7927, ["yiarmenian"]=1397, ["yicyrillic"]=1111, ["yikorean"]=12642, ["yinyang"]=9775, ["yiwnarmenian"]=1410, ["ymonospace"]=65369, ["yod"]=1497, ["yoddagesh"]=64313, ["yoddageshhebrew"]=64313, ["yodhebrew"]=1497, ["yodyodhebrew"]=1522, ["yodyodpatahhebrew"]=64287, ["yohiragana"]=12424, ["yoikorean"]=12681, ["yokatakana"]=12520, ["yokatakanahalfwidth"]=65430, ["yokorean"]=12635, ["yosmallhiragana"]=12423, ["yosmallkatakana"]=12519, ["yosmallkatakanahalfwidth"]=65390, ["yotgreek"]=1011, ["yoyaekorean"]=12680, ["yoyakorean"]=12679, ["yoyakthai"]=3618, ["yoyingthai"]=3597, ["yparen"]=9396, ["ypogegrammeni"]=890, ["ypogegrammenigreekcmb"]=837, ["yr"]=422, ["yring"]=7833, ["ysuperior"]=696, ["ytilde"]=7929, ["yturned"]=654, ["yuhiragana"]=12422, ["yuikorean"]=12684, ["yukatakana"]=12518, ["yukatakanahalfwidth"]=65429, ["yukorean"]=12640, ["yusbigcyrillic"]=1131, ["yusbigiotifiedcyrillic"]=1133, ["yuslittlecyrillic"]=1127, ["yuslittleiotifiedcyrillic"]=1129, ["yusmallhiragana"]=12421, ["yusmallkatakana"]=12517, ["yusmallkatakanahalfwidth"]=65389, ["yuyekorean"]=12683, ["yuyeokorean"]=12682, ["yyabengali"]=2527, ["yyadeva"]=2399, ["z"]=122, ["zaarmenian"]=1382, ["zacute"]=378, ["zadeva"]=2395, ["zagurmukhi"]=2651, ["zaharabic"]=1592, ["zahfinalarabic"]=65222, ["zahinitialarabic"]=65223, ["zahiragana"]=12374, ["zahmedialarabic"]=65224, ["zainarabic"]=1586, ["zainfinalarabic"]=65200, ["zakatakana"]=12470, ["zaqefgadolhebrew"]=1429, ["zaqefqatanhebrew"]=1428, ["zarqahebrew"]=1432, ["zayin"]=1494, ["zayindagesh"]=64310, ["zayindageshhebrew"]=64310, ["zayinhebrew"]=1494, ["zbopomofo"]=12567, ["zcaron"]=382, ["zcircle"]=9449, ["zcircumflex"]=7825, ["zcurl"]=657, ["zdot"]=380, ["zdotaccent"]=380, ["zdotbelow"]=7827, ["zecyrillic"]=1079, ["zedescendercyrillic"]=1177, ["zedieresiscyrillic"]=1247, ["zehiragana"]=12380, ["zekatakana"]=12476, ["zero"]=48, ["zeroarabic"]=1632, ["zerobengali"]=2534, ["zerodeva"]=2406, ["zerogujarati"]=2790, ["zerogurmukhi"]=2662, ["zerohackarabic"]=1632, ["zeroinferior"]=8320, ["zeromonospace"]=65296, ["zeropersian"]=1776, ["zerosuperior"]=8304, ["zerothai"]=3664, ["zerowidthjoiner"]=65279, ["zerowidthnonjoiner"]=8204, ["zerowidthspace"]=8203, ["zeta"]=950, ["zhbopomofo"]=12563, ["zhearmenian"]=1386, ["zhebrevecyrillic"]=1218, ["zhecyrillic"]=1078, ["zhedescendercyrillic"]=1175, ["zhedieresiscyrillic"]=1245, ["zihiragana"]=12376, ["zikatakana"]=12472, ["zinorhebrew"]=1454, ["zlinebelow"]=7829, ["zmonospace"]=65370, ["zohiragana"]=12382, ["zokatakana"]=12478, ["zparen"]=9397, ["zretroflexhook"]=656, ["zstroke"]=438, ["zuhiragana"]=12378, ["zukatakana"]=12474, } context-2013.05.28.20130704/texmf-dist/tex/context/base/syst-ini.mkiv0000644000175000017500000011443012161703335024344 0ustar norbertnorbert%D \module %D [ file=syst-ini, %D version=2008.11.04, % 2001.11.16, % 1999.03.17, % an oldie: 1995.10.10 %D title=\CONTEXT\ System Macros, %D subtitle=Bootstrapping \TEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 We used to load plain \TEX\ in a special way, but redefining a couple of %D primitives so that for instance font loading was ignored. For those interested, %D this loader is found in \type {syst-tex.tex}. Some of the comment's are Don %D Knuths and more of it can be found in the plain \TEX\ format. %D %D Characters can have special states, that can be triggered by setting their %D category coded. Some are preset, others are to be set as soon as possible, %D otherwise we cannot define any useful macros. %catcode`\^^@ = 9 % ascii null is ignored %catcode`\\ = 0 % backslash is TeX escape character \catcode`\{ = 1 % left brace is begin-group character \catcode`\} = 2 % right brace is end-group character \catcode`\$ = 3 % dollar sign is math shift \catcode`\& = 4 % ampersand is alignment tab \catcode`\# = 6 % hash mark is macro parameter character \catcode`\^ = 7 % circumflex and uparrow are for superscripts \catcode`\_ = 8 % underline and downarrow are for subscripts \catcode`\^^I = 10 % ascii tab is a blank space %catcode`\^^M = 5 % ascii return is end-line %catcode`\% = 14 % percent sign is comment character %catcode`\ = 10 % ascii space is blank space %catcode`\^^? = 15 % ascii delete is invalid \catcode`\~ = 13 % tilde is active \catcode`\^^L = 13 % ascii form-feed %catcode`\A = 11 %....... %catcode`\Z = 11 %catcode`\a = 11 %....... %catcode`\z = 11 \def ^^L{\par} \def\^^M{\ } % control = control \def\^^I{\ } % same for %D In \CONTEXT, we simply ignore end||of||file tokens: \catcode`\^^Z=9 %D It makes sense to know what engine we're running so let's try to deduce it. \chardef\unknownengine = 0 \chardef\pdftexengine = 1 \chardef\xetexengine = 2 \chardef\luatexengine = 3 \ifx\directlua\undefined \ifx\XeTeXversion\undefined \ifx\pdftexversion\undefined \let\texengine\unknownengine \else \let\texengine\pdftexengine \fi \else \let\texengine\xetexengine \fi \else \let\texengine\luatexengine \fi \ifnum\texengine=\luatexengine % for historic reasons we keep some mkii code around \else \immediate\write16{>>>} \immediate\write16{>>> only luatex is supported} \immediate\write16{>>>} \let\dump\relax \expandafter\end \fi %D Initialization of primitives. \directlua 0 { % this info is stored in the format lua.name[0] = "main ctx instance" local extraprimitives = tex.extraprimitives local enableprimitives = tex.enableprimitives local core = extraprimitives("core") local btex = extraprimitives("tex") local etex = extraprimitives("etex") local pdftex = extraprimitives("pdftex") local luatex = extraprimitives("luatex") local omega = { "textdir", "pagedir", "mathdir", "pardir", "bodydir", "leftghost", "rightghost", "localleftbox", "localrightbox", "localinterlinepenalty", "localbrokenpenalty", } local aleph = { "boxdir", "pagebottomoffset", "pagerightoffset", } for _, subset in next, { etex, pdftex, luatex, omega, aleph } do enableprimitives("",subset) end for _, subset in next, { core, btex, etex, pdftex, luatex, omega, aleph } do enableprimitives("normal",subset) end } %D Handy. \suppresslongerror = 1 \suppressoutererror = 1 %D \ETEX\ has a not so handy way of telling you the version number, i.e. the revision %D number has a period in it: \def\gobbleoneargument#1{} % will be defined later on anyway \mathchardef\etexversion = \numexpr\eTeXversion*100+\expandafter\gobbleoneargument\eTeXrevision\relax %D First we define a simplified version of the \CONTEXT\ protection mechanism. %D Later we will implement a better variant. \def\unprotect {\edef\protect {\catcode`@=\the\catcode`@\relax \catcode`?=\the\catcode`?\relax \catcode`!=\the\catcode`!\relax \catcode`_=\the\catcode`_\relax \let\protect\relax}% \catcode`@=11 \catcode`?=11 \catcode`!=11 \catcode`_=11 } \let\protect\relax \unprotect %D Some pretty important definitions: \let\bgroup={ \let\egroup=} %D \macros %D {normalbgroup,normalgroup} %D %D No comment. %D Allocation of registers is done slightly different than in plain \TEX. First of %D all we use different reserved counters. We also don't implement a family handler %D because users are not supposed to implement their own math. We reserve the lowest %D 31 registers for scratch purposes. Keep in mind that in the core engine some %D registers are reserved: counters 0 upto 9, and counter 255. %D %D As with plain \TEX\ we recommend that macro designers always use \type {\global} %D assignments with respect to registers numbered 1, 3, 5 \unknown\ 31, and always %D non||\type {\global} assignments with respect to registers 0, 2, 4, \unknown\ 30. %D This will prevent \quote {save stack buildup} that might otherwise occur. %D %D We reserve some registers for special (management) purposes: % 0 - 20 : scratch % 21 - 127 : internal % 128 - 254 : inserts % 255 : page % 256 - : user \countdef \c_syst_min_allocated_register = 52 \c_syst_min_allocated_register = 256 % can change \countdef \c_syst_max_allocated_register = 53 \c_syst_max_allocated_register = 32767 \countdef \c_syst_min_allocated_iochannel = 54 \c_syst_min_allocated_iochannel = -1 \countdef \c_syst_max_allocated_iochannel = 55 \c_syst_max_allocated_iochannel = 16 \countdef \c_syst_min_allocated_language = 56 \c_syst_min_allocated_language = 0 \countdef \c_syst_max_allocated_language = 57 \c_syst_max_allocated_language = 255 \countdef \c_syst_max_allocated_insert = 58 \c_syst_max_allocated_insert = 254 \countdef \c_syst_min_allocated_insert = 59 \c_syst_min_allocated_insert = 128 \countdef \c_syst_min_allocated_family = 60 \c_syst_min_allocated_family = 128 \countdef \c_syst_max_allocated_family = 61 \c_syst_max_allocated_family = 255 \countdef \c_syst_min_allocated_attribute = 62 \c_syst_min_allocated_attribute = 1024 % 127-1023 : private \countdef \c_syst_last_allocated_count = 32 \c_syst_last_allocated_count = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_dimen = 33 \c_syst_last_allocated_dimen = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_skip = 34 \c_syst_last_allocated_skip = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_muskip = 35 \c_syst_last_allocated_muskip = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_box = 36 \c_syst_last_allocated_box = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_toks = 37 \c_syst_last_allocated_toks = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_read = 38 \c_syst_last_allocated_read = \c_syst_min_allocated_iochannel \countdef \c_syst_last_allocated_write = 39 \c_syst_last_allocated_write = \c_syst_min_allocated_iochannel \countdef \c_syst_last_allocated_marks = 40 \c_syst_last_allocated_marks = \c_syst_min_allocated_register \countdef \c_syst_last_allocated_language = 41 \c_syst_last_allocated_language = \c_syst_min_allocated_language % not used in context \countdef \c_syst_last_allocated_insertion = 42 \c_syst_last_allocated_insertion = \c_syst_min_allocated_insert \countdef \c_syst_last_allocated_family = 43 \c_syst_last_allocated_family = \c_syst_min_allocated_family % not used in context \countdef \c_syst_last_allocated_attribute = 44 \c_syst_last_allocated_attribute = \c_syst_min_allocated_attribute \countdef \c_syst_min_counter_value = 125 \c_syst_min_counter_value = -"7FFFFFFF % beware, we use index 125 at the lua end \countdef \c_syst_max_counter_value = 126 \c_syst_max_counter_value = "7FFFFFFF % beware, we use index 126 at the lua end \countdef \zerocount = 120 \zerocount = 0 \countdef \plusone = 121 \plusone = 1 \countdef \minusone = 122 \minusone = -1 \countdef \normalpagebox = 127 \normalpagebox = 255 % hardcoded in pdftex/xetex % A few traditional allocations (these might go): \countdef \count@ = 255 % hm, used in \newif .. todo: replace it there \dimendef \dimen@ = 0 \dimendef \dimen@i = 1 % global only \dimendef \dimen@ii = 2 %D So, effectively we start allocating from 256 and upwards. The inserts sit in the %D range 128 upto 254. Page numbers use the counters 0 upto 9 and the pagebox is %D 255. Users can use the scratch registers upto 31 without problem but all others %D are reserved. \let\wlog\gobbleoneargument % Let's get rid of this one. %D The allocators share a common helper macro. \normalprotected\def\newcount {\syst_basics_allocate\c_syst_last_allocated_count \count \countdef \c_syst_max_allocated_register} \normalprotected\def\newdimen {\syst_basics_allocate\c_syst_last_allocated_dimen \dimen \dimendef \c_syst_max_allocated_register} \normalprotected\def\newskip {\syst_basics_allocate\c_syst_last_allocated_skip \skip \skipdef \c_syst_max_allocated_register} \normalprotected\def\newmuskip {\syst_basics_allocate\c_syst_last_allocated_muskip \muskip \muskipdef \c_syst_max_allocated_register} \normalprotected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \mathchardef\c_syst_max_allocated_register} \normalprotected\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_register} \normalprotected\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \chardef \c_syst_max_allocated_iochannel} \normalprotected\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \chardef \c_syst_max_allocated_iochannel} \normalprotected\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \mathchardef\c_syst_max_allocated_register} \normalprotected\def\newinsert {\syst_basics_allocate\c_syst_last_allocated_insertion\insert \chardef \c_syst_max_allocated_insert} %D We don't need these in \CONTEXT: \normalprotected\def\newlanguage{\syst_basics_allocate\c_syst_last_allocated_language \language\chardef \c_syst_max_allocated_language} \normalprotected\def\newfamily {\syst_basics_allocate\c_syst_last_allocated_family \fam \chardef \c_syst_max_allocated_family} \let\newfam\newfamily % Watch out, for the moment we disable the check for already being defined % later we will revert this but first all chardefs must be replaced. \normalprotected\def\newconstant #1{\ifdefined#1\let#1\undefined\fi\newcount#1} \normalprotected\def\setnewconstant#1{\ifdefined#1\let#1\undefined\fi\newcount#1#1} % just a number \normalprotected\def\setconstant {} % dummy, no checking, so it warns % maybe setconstant with check % %D The next definitions are really needed (in \CONTEXT): %newlinechar=10 \def\outputnewlinechar{\rawcharacter{10}} \newlinechar=10 \edef\outputnewlinechar{^^J} %D One reason to start high with allocation is that it permits us to allocate %D consecutive ranges more easily, for instance if for \MPLIB\ we want to allocate a %D continuous range of boxes. It also permits us to do a proper upward allocation %D for inserts. The current code evolved from code that dealt with older engines but %D as all engines now provide many registers we removed all traces. \ifdefined\writestatus \else \normalprotected\def\writestatus#1#2{\immediate\write16{#1: #2}} \fi \def\syst_basics_allocate_yes#1#2#3#4#5% last class method max name {\ifnum#1<#4\relax \global\advance#1\plusone \global#3#5=#1\relax \else \writestatus{warning}{no room for \string#2\space \string#5\space (max: \number#4)}% \fi} \def\syst_basics_allocate_nop#1#2#3#4#5% last class method max name {\writestatus{warning}{\string#2 \string#5 is already defined (\string\relax\space it first)}} \def\syst_basics_allocate#1#2#3#4#5% last class method max name {\ifx#5\undefined \expandafter\syst_basics_allocate_yes \else\ifx#5\relax \expandafter\expandafter\expandafter\syst_basics_allocate_yes \else \expandafter\expandafter\expandafter\syst_basics_allocate_nop \fi\fi #1#2#3#4#5} %D Since the number of chars exceed 256 now, we can use \type {\chardef} instead of %D the more limited \type {\mathchardef}. \normalprotected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register} \normalprotected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register} %D Attributes are something very \LUATEX. In \CONTEXT\ you are not supposed to use %D the attributes directly but always allocate then first. For instance attribute~0 %D is reserved for special purposes (this might change). Attributes in the range %D 128-1023 are private and should not be touched. \let\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone \normalprotected\def\newattribute{\syst_basics_allocate\c_syst_min_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register} %D Not used by \CONTEXT\ but for instance \PICTEX\ needs it. It's a trick to force %D strings instead of tokens that take more memory. It's a trick to trick to force %D strings. This macro is never used in \CONTEXT. \normalprotected\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} %D \macros %D {scratchcounter, %D scratchdimen,scratchskip,scratchmuskip, %D scratchbox, %D scratchtoks} %D %D We now define a few scratch registers, so that successive loads at least have %D some available. \newcount \scratchcounter \newcount \globalscratchcounter \newdimen \scratchdimen \newdimen \globalscratchdimen \newskip \scratchskip \newskip \globalscratchskip \newmuskip\scratchmuskip \newmuskip\globalscratchmuskip \newtoks \scratchtoks \newtoks \globalscratchtoks \newbox \scratchbox \newbox \globalscratchbox \newcount\scratchcounterone \newcount\scratchcountertwo \newcount\scratchcounterthree \newdimen \scratchdimenone \newdimen \scratchdimentwo \newdimen \scratchdimenthree \newdimen \scratchskipone \newdimen \scratchskiptwo \newdimen \scratchskipthree \newbox \scratchmuskipone \newbox \scratchmuskiptwo \newbox \scratchmuskipthree \newtoks \scratchtoksone \newtoks \scratchtokstwo \newtoks \scratchtoksthree \newbox \scratchboxone \newbox \scratchboxtwo \newbox \scratchboxthree %D \macros %D {scratchwidth, scratchheight, scratchdepth, scratchoffset, scratchdistance} %D %D A few more scratch dimensions: \newdimen\scratchwidth \newdimen\scratchheight \newdimen\scratchdepth \newdimen\scratchoffset \newdimen\scratchleftoffset \newdimen\scratchrightoffset \newdimen\scratchtopoffset \newdimen\scratchbottomoffset \newdimen\scratchdistance \newdimen\scratchhsize \newdimen\scratchvsize \newdimen\scratchxoffset \newdimen\scratchyoffset \newdimen\scratchhoffset \newdimen\scratchvoffset \newdimen\scratchxposition \newdimen\scratchyposition \newcount\scratchnx \newcount\scratchny \newcount\scratchmx \newcount\scratchmy \newcount\scratchunicode \newdimen\scratchleftskip \newdimen\scratchrightskip \newdimen\scratchtopskip \newdimen\scratchbottomskip %D More allocations: \newskip \zeroskip \zeroskip = 0pt plus 0pt minus 0pt \newdimen \zeropoint \zeropoint = 0pt \newdimen \onepoint \onepoint = 1pt \newdimen \halfapoint \halfapoint = 0.5pt \newdimen \maxdimen \maxdimen = 16383.99999pt \newdimen \onebasepoint \onebasepoint = 1bp \newdimen \scaledpoint \scaledpoint = 1sp \newdimen \thousandpoint \thousandpoint = 1000pt \newmuskip\zeromuskip \zeromuskip = 0mu \newmuskip\onemuskip \onemuskip = 1mu \let\points \onepoint \let\halfpoint\halfapoint \newtoks \emptytoks %D And even more: (todo: countdefs 60+) %newcount \minusone \minusone = -1 \newcount \minustwo \minustwo = -2 %chardef \zerocount = 0 %chardef \plusone = 1 \chardef \plustwo = 2 \chardef \plusthree = 3 \chardef \plusfour = 4 \chardef \plusfive = 5 \chardef \plussix = 6 \chardef \plusseven = 7 \chardef \pluseight = 8 \chardef \plusnine = 9 \chardef \plusten = 10 \chardef \plussixteen = 16 \chardef \plushundred = 100 \chardef \pluscxxvii = 127 \chardef \pluscxxviii = 128 \chardef \pluscclv = 255 \chardef \pluscclvi = 256 \chardef \plusthousand = 1000 \chardef \plustenthousand = 10000 \chardef \plustwentythousand = 20000 \chardef \medcard = 32768 \chardef \maxcard = 65536 % pdftex has less mathchars %D \macros %D {doubleexpandafter,tripleexpandafter,expanded,startexpanded} %D %D A few handy shortcuts \let\singleexpandafter \expandafter \def\doubleexpandafter{\expandafter\expandafter\expandafter} \def\tripleexpandafter{\expandafter\doubleexpandafter\expandafter} %D We prefer the more readable variant than in plain \TEX. User should only %D use \type {\emptybox}: \newbox\voidbox % public \let\normalhbox\hbox \let\normalvbox\vbox \def\unvoidbox{\unhbox\voidbox} \def\emptybox {\box \voidbox} % used in initializations so no attributes \def\emptyvbox{\normalvbox{}} % no copy as we need to set attributes \def\emptyhbox{\normalhbox{}} % no copy as we need to set attributes \let\leavevmode\unvoidbox % we prefer to use \dontleavehmode %D \macros %D {dontcomplain} %D %D We need this one soon: \normalprotected\def\dontcomplain {\hbadness\plustenthousand \vbadness\plustenthousand \hfuzz \maxdimen \vfuzz \maxdimen} %D Some expected plain variants follow. We don't reuse registers because we %D don't want clashes. \newdimen\p@ \p@ \onepoint \newcount\m@ne \m@ne \minusone \newdimen\z@ \z@ \zeropoint \let \@ne \plusone \let \tw@ \plustwo \let \thr@@ \plusthree \let \sixt@@n \plussixteen \let \@cclv \pluscclv \let \@cclvi \pluscclvi \newbox \voidb@x \newtoks \toks@ %D We define \type {\newif} a la plain \TEX, but will redefine it later. As %D Knuth says: %D %D \startnarrower %D And here's a different sort of allocation: for example, %D %D \starttyping %D \newif\iffoo %D \stoptyping %D %D creates \type {\footrue}, \type {\foofalse} to go with \type {\iffoo}. %D \stopnarrower \normalprotected\def\newif#1% {\count@\escapechar \escapechar\minusone \expandafter\expandafter\expandafter\def\@if #1{true}{\let#1\iftrue }% \expandafter\expandafter\expandafter\def\@if#1{false}{\let#1\iffalse}% \@if#1{false}% the condition starts out false \escapechar\count@} \def\@if#1#2% {\csname\expandafter\if@\string#1#2\endcsname} \bgroup % `if' is required \uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}} \egroup %D Let's test this one: \newif\ifdone %D Potential primitive in \LUATEX: \ifdefined\htdp \else \def\htdp#1{\dimexpr\ht#1+\dp#1\relax} \fi %D A few shortcuts: \normalprotected\def\glet {\global \let } \normalprotected\def\udef {\normalprotected\def } \normalprotected\def\ugdef{\normalprotected\gdef} \normalprotected\def\uedef{\normalprotected\edef} \normalprotected\def\uxdef{\normalprotected\xdef} %D The catcode constants will be redefined in later catcode related modules %D but they can be used in the same way. \chardef\escapecatcode = 0 \chardef\begingroupcatcode = 1 \chardef\endgroupcatcode = 2 \chardef\mathshiftcatcode = 3 \chardef\alignmentcatcode = 4 \chardef\endoflinecatcode = 5 \chardef\parametercatcode = 6 \chardef\superscriptcatcode = 7 \chardef\subscriptcatcode = 8 \chardef\ignorecatcode = 9 \chardef\spacecatcode = 10 \chardef\lettercatcode = 11 \chardef\othercatcode = 12 \chardef\activecatcode = 13 \chardef\commentcatcode = 14 \chardef\invalidcatcode = 15 %D For a while we keep the following, as systems like tikz need it. Best %D not use that one \CONTEXT. \let\active\activecatcode %D Constants to be used with \type {\currentgrouptype}. \chardef\bottomlevelgroupcode = 0 \chardef\simplegroupcode = 1 \chardef\hboxgroupcode = 2 \chardef\adjustedhboxgroupcode = 3 \chardef\vboxgroupcode = 4 \chardef\vtopgroupcode = 5 \chardef\aligngroupcode = 6 \chardef\noaligngroupcode = 7 \chardef\outputgroupcode = 8 \chardef\mathgroupcode = 9 \chardef\discretionarygroupcode = 10 \chardef\insertgroupcode = 11 \chardef\vcentergroupcode = 12 \chardef\mathchoicegroupcode = 13 \chardef\semisimplegroupcode = 14 \chardef\mathshiftgroupcode = 15 \chardef\mathleftgroupcode = 16 \chardef\vadjustgroupcode = \insertgroupcode %D Constants to be used with \type {\interactionmode}. \chardef\batchmodecode = 0 \chardef\nonstopmodecode = 1 \chardef\scrollmodecode = 2 \chardef\errorstopmodecode = 3 %D Constants to be used with \type {\lastnodetype}. The \type {\lastnodetype} %D primitive is \ETEX\ compliant. The valid range is still -1 .. 15 and glyph nodes %D have number 0 (used to be char node) and ligature nodes are mapped to 7. That way %D macro packages can use the same symbolic names as in traditional \ETEX. Keep in %D mind that the internal node numbers are different and that there are more node %D types that 15. \chardef\charnodecode = 0 \chardef\hlistnodecode = 1 \chardef\vlistnodecode = 2 \chardef\rulenodecode = 3 \chardef\insertnodecode = 4 \chardef\marknodecode = 5 \chardef\adjustnodecode = 6 \chardef\ligaturenodecode = 7 \chardef\discretionarynodecode = 8 \chardef\whatsitnodecode = 9 \chardef\mathnodecode = 10 \chardef\gluenodecode = 11 \chardef\kernnodecode = 12 \chardef\penaltynodecode = 13 \chardef\unsetnodecode = 14 \chardef\mathsnodecode = 15 %D Constants to be used with \type {\currentiftype}. I wonder if we will ever %D use these in \CONTEXT. \chardef\charifcode = 1 \chardef\catifcode = 2 \chardef\numifcode = 3 \chardef\dimifcode = 4 \chardef\oddifcode = 5 \chardef\vmodeifcode = 6 \chardef\hmodeifcode = 7 \chardef\mmodeifcode = 8 \chardef\innerifcode = 9 \chardef\voidifcode = 10 \chardef\hboxifcode = 11 \chardef\vboxifcode = 12 \chardef\xifcode = 13 \chardef\eofifcode = 14 \chardef\trueifcode = 15 \chardef\falseifcode = 16 \chardef\caseifcode = 17 \chardef\definedifcode = 18 \chardef\csnameifcode = 19 \chardef\fontcharifcode = 20 %D Of course we want even bigger log files, so we copied this from the \ETEX\ %D source files. %D %D When watching such logs, beware of nasty side effects of \type {\scantokens}, %D as in: %D %D \starttyping %D \bgroup %D \lccode`a=12\lowercase{\xdef\whatever{a}}\egroup %D \def\whatever{test \whatever test} %D \scantokens\expandafter{\whatever} %D \egroup %D \stoptyping %D %D In \LUATEX\ we have ways around this. \normalprotected\def\tracingall {\tracingonline \plusone \tracingcommands \plusthree \tracingstats \plustwo \tracingpages \plusone \tracingoutput \plusone \tracinglostchars \plustwo \tracingmacros \plustwo \tracingparagraphs\plusone \tracingrestores \plusone \showboxbreadth \maxdimen \showboxdepth \maxdimen \tracinggroups \plusone \tracingifs \plusone \tracingscantokens\plusone \tracingnesting \plusone \tracingassigns \plustwo \errorstopmode} \normalprotected\def\loggingall {\tracingall \tracingonline \zerocount} \normalprotected\def\tracingnone {\tracingassigns \zerocount \tracingnesting \zerocount \tracingscantokens\zerocount \tracingifs \zerocount \tracinggroups \zerocount \showboxdepth \plusthree \showboxbreadth \plusfive \tracingrestores \zerocount \tracingparagraphs\zerocount \tracingmacros \zerocount \tracinglostchars \plusone \tracingoutput \zerocount \tracingpages \zerocount \tracingstats \zerocount \tracingcommands \zerocount \tracingonline \zerocount} %D Just for tracing purposes we set: \tracingstats\plusone %D Here we also save \type {\input}, more will be saved later. \ifdefined\normalinput \else \let\normalinput\input \fi %D We don't like outer commands, and we always want access to the original %D \type {\input} primitive. \let\normalouter\outer \def\outer{} % no longer \relax %D To circumvent dependencies, we can postpone certain initializations to %D dumping time, by appending them to the \type {\everydump} token register. \ifdefined\normaldump \else \let\normaldump\dump \fi \newtoks\everydump \def\dump{\the\everydump\normaldump} %D The same applies for the startup actions. \ifdefined\normaleveryjob \else \let\normaleveryjob\everyjob \fi \let\everyjob\relax \newtoks\everyjob \normaleveryjob{\the\everyjob} %D \macros %D {newconditional, %D settrue, setfalse, %D ifconditional,then} %D %D \TEX's lacks boolean variables, although the \PLAIN\ format implements \type %D {\newif}. The main disadvantage of this scheme is that it takes three hash table %D entries. A more memory saving alternative is presented here. A conditional is %D defined by: %D %D \starttyping %D \newconditional\doublesided %D \setfalse %D \stoptyping %D Setting a conditional is done by \type{\settrue} and %D \type{\setfalse}: %D %D \starttyping %D \settrue\doublesided %D \setfalse %D \stoptyping %D while testing is accomplished by: %D %D \starttyping %D \ifconditional\doublesided ... \else ... \fi %D \setfalse %D \stoptyping %D We cannot use the simple scheme: %D %D \starttyping %D \def\settrue #1{\let#1=\iftrue} %D \def\setfalse#1{\let#1=\iffalse} %D \stoptyping %D %D Such an implementation gives problems with nested conditionals. The next %D implementation is about as fast and just as straightforward: \let\conditionalfalse\plusone % maybe we will have a dedicated count/chardef \let\conditionaltrue \zerocount % maybe we will have a dedicated count/chardef \normalprotected\def\settrue #1{\let#1\conditionaltrue } \normalprotected\def\setfalse#1{\let#1\conditionalfalse} \let\newconditional\setfalse \let\ifconditional \ifcase \let\then\relax % so that we can say: \ifnum1>2\then -) %D \macros %D {newmacro,setnewmacro,newfraction} %D %D Let's be complete and also introduce some definers. These are not mandate %D but handy for grepping. \normalprotected\def\newmacro #1{\let#1\empty} \normalprotected\def\setnewmacro#1{\let#1} \def\!!plusone{1} \normalprotected\def\newfraction#1{\let#1\!!plusone} %D It would be handy to have a primitive \unless\ifcase because then we could %D use nicer values. Anyhow, this conditional code used to be in the \type %D {syst-aux} module but is now promoted to here. %D \macros %D {ifzeropt} %D %D The next macro is both cosmetic and byte saving. It is pretty \type %D {\if}||safe too. It can be used in cases like: %D %D \starttyping %D \ifzeropt \somedimen ... \else ... \fi %D \stoptyping \let\ifzeropt\ifcase % these token list helpers might move to syst-aux.mkiv % % we assume a \cs. not toks0 or so % % \normalprotected\def\appendtotoks #1#{\def\temp{#1}\afterassignment\doappendtotoks \scratchtoks=} % \normalprotected\def\prependtotoks#1#{\def\temp{#1}\afterassignment\doprependtotoks\scratchtoks=} \newtoks\t_syst_toks_temp \let\m_syst_toks_temp\t_syst_toks_temp \normalprotected\def\appendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_l \t_syst_toks_temp=} \normalprotected\def\prependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_l\t_syst_toks_temp=} % \def\syst_toks_append {\m_syst_toks_temp\expandafter\expandafter\expandafter{\expandafter\the\expandafter\m_syst_toks_temp\the\t_syst_toks_temp}}} % \def\syst_toks_prepend{\m_syst_toks_temp\expandafter\expandafter\expandafter{\expandafter\the\expandafter\t_syst_toks_temp\the\m_syst_toks_temp}}} \normalprotected\def\globalappendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_g \t_syst_toks_temp=} \normalprotected\def\globalprependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_g\t_syst_toks_temp=} \def\syst_toks_append_l {\normalexpanded{\m_syst_toks_temp{\the\m_syst_toks_temp\the\t_syst_toks_temp}}} \def\syst_toks_prepend_l{\normalexpanded{\m_syst_toks_temp{\the\t_syst_toks_temp\the\m_syst_toks_temp}}} \def\syst_toks_append_g {\global\syst_toks_append_l } \def\syst_toks_prepend_g{\global\syst_toks_prepend_l} \normalprotected\def\addtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_l\let\next} \normalprotected\def\globaladdtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_g\let\next} \def\syst_toks_add_l{\m_syst_toks_temp\expandafter\bgroup\the\m_syst_toks_temp} \def\syst_toks_add_g{\global\syst_toks_add_l} \normalprotected\def\addtotokscs #1#2{#1{\the#1#2}} % saves a few bytes \normalprotected\def\globaladdtotokscs#1#2{\global#1{\the#1#2}} % saves a few bytes %D \macros %D {begcsname} %D %D Handy for \ETEX-only usage (avoids making \type {\relax}'s: \def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi} %D Now come a few macros that might be needed in successive loading. We redefine the %D \type {\par} primitive pretty soon so that we get the equivalents right. % too tricky: \par is use more often than a par starts so we have too much change % that we get assymetrical behaviour % % \newtoks\everyendpar % % \normalprotected\def\endpar{\the\everyendpar\normalpar} % \normalprotected\def\par {\endpar} % % \normalprotected\def\reseteverypar % {\everypar \emptytoks % \everyendpar\emptytoks} \normalprotected\def\reseteverypar {\everypar\emptytoks} \let\endgraf\par \let\endline\cr \def\space{ } \def\empty{} \def\null {\hbox{}} %D The following two might be overloaded later on but some modules need then %D earlier. These functionality is reflected in the name and will not change. \bgroup \catcode`\^^M=\activecatcode% \gdef\obeylines{\catcode`\^^M\activecatcode \let^^M\par}% \global\let^^M\par% \egroup \bgroup \gdef\obeyspaces{\catcode`\ \activecatcode}% \obeyspaces\global\let =\space% \egroup %D A constant: \let\endoflinetoken=^^M %D Also needed might be a simple loop structure and we borrow plain \TEX's one %D as it is often expected to be present and it is about the fastest you can %D get. Beware: this macro does not support nested loops. We use a namespace %D prefix \type {@@pln}. \def\loop#1\repeat{\def\@@plnbody{#1}\@@plniterate} % might go %D The following makes \type {\loop} \unknown\ \type {\if} \unknown\ \type %D {\repeat} skippable (clever trick): \let\repeat\fi % so both \loop and \repeat are reserved words! %D The original (no \type {@@pln} there): %D %D \starttyping %D \def\@@plniterate{\@@plnbody\let\next\@@plniterate\else\let\next\relax\fi\next} %D \stoptyping %D %D A more efficient alternative: %D %D \starttyping %D \def\@@plniterate{\@@plnbody\expandafter\@@plniterate\else\expandafter\relax\fi} %D \stoptyping %D %D An even more efficient one: \def\@@plniterate{\@@plnbody\expandafter\@@plniterate\else\fi} %D We don't define a real output routine yet but at least get rid of pages: \output{\shipout\box\normalpagebox} %D Although we don't add pagenumbers yet we alias the default register used %D for counting pages: \countdef\pageno\zerocount \pageno\plusone % first page is number 1 %D Beside the raw counter \type {\pageno} the \type {\folio} macro provides %D the value. \def\folio{\the\pageno} % kind of expected and therefore reserved %D The following registers are kind of standard and (for the moment) we define %D them here. This might change. \newskip \bigskipamount \bigskipamount = 12pt plus 4pt minus 4pt \newskip \medskipamount \medskipamount = 6pt plus 2pt minus 2pt \newskip \smallskipamount \smallskipamount = 3pt plus 1pt minus 1pt \baselineskip = 12pt \lineskip = 1pt \lineskiplimit = 0pt %D Again a few kind-of-extensions the core. These come from plain \TEX\ but %D are probably not used in \CONTEXT. \newskip \hideskip \hideskip = -1000pt plus 1fill \newskip \centering \centering = 0pt plus 1000pt minus 1000pt \def\hidewidth % for alignment entries that can stick out {\hskip\hideskip} \def\ialign % initialized \halign {\everycr\emptytoks \tabskip\zeroskip \halign} \newcount \mscount \def\spanomit{\span\omit} % bypass error message \def\multispan#1% {\omit \mscount#1\relax \loop \ifnum\mscount>\plusone \spanomit \advance\mscount\minusone \repeat} %D The next section deals with selective definitions in later modules. One can of %D course use the \type {\texengine} number that we defined earlier instead. \bgroup \obeylines \gdef\pickupSOMETEX#1% {\expandafter\gdef\csname begin#1\endcsname{\bgroup\obeylines\dopickupSOMETEX{#1}}} \gdef\dopickupSOMETEX#1#2 % {\egroup\immediate\write16{special code for #1 -> [line \the\inputlineno] \detokenize{#2}}} {\egroup} \egroup \let\endTEX \relax \def\beginTEX #1\endTEX {} \let\endETEX \relax \def\beginETEX #1\endETEX {} \let\endXETEX \relax \def\beginXETEX #1\endXETEX {} \let\endLUATEX\relax \def\beginLUATEX#1\endLUATEX{} \let\endOLDTEX\relax \def\beginOLDTEX#1\endOLDTEX{} \let\endNEWTEX\relax \def\beginNEWTEX#1\endNEWTEX{} \pickupSOMETEX{ETEX} \ifnum\texengine=\xetexengine \pickupSOMETEX{XETEX} \fi \ifnum\texengine=\luatexengine \pickupSOMETEX{LUATEX} \fi \ifnum\texengine<\xetexengine \pickupSOMETEX{OLDTEX} \else \pickupSOMETEX{NEWTEX} \fi %D \macros %D {bindprimitive} %D %D We can remap primitives (which is needed because of changes in for instance %D \PDFTEX). \def\bindprimitive#1 #2 % new old {\ifcsname#1\endcsname \else \ifcsname#2\endcsname \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname \fi \fi} %D Because \XETEX\ also implements some \PDFTEX\ functionality, we take care of this %D here instead of a dedicated module. Later modules need to handle the undefined %D cases. %D These messy checks will disappear. % new after 1.10, watch the change in prefix % \bindprimitive quitvmode ptexquitvmode % \bindprimitive noligatures ptexnoligatures % \bindprimitive setrandomseed ptexsetrandomseed % \bindprimitive uniformdeviate ptexuniformdeviate % \bindprimitive quitvmode pdfquitvmode % \bindprimitive noligatures pdfnoligatures % \bindprimitive setrandomseed pdfsetrandomseed % \bindprimitive uniformdeviate pdfuniformdeviate % \bindprimitive resettimer pdfresettimer % \bindprimitive elapsedtime pdfelapsedtime % new per 1.40 % \bindprimitive ifprimitive ifpdfprimitive % \bindprimitive primitive pdfprimitive % \bindprimitive ifabsdim ifpdfabsdim % \bindprimitive ifabsnum ifpdfabsnum %D We need to make sure that we start up in \DVI\ mode, so, after testing for running %D \PDFTEX, we default to \DVI. \pdfoutput \zerocount \pdfminorversion \plusfive \pdfgentounicode \plusone \pdfinclusioncopyfonts\plusone \normalprotected\def\nopdfcompression {\pdfobjcompresslevel\zerocount \pdfcompresslevel\zerocount} \normalprotected\def\maximumpdfcompression{\pdfobjcompresslevel\plusnine \pdfcompresslevel\plusnine } \normalprotected\def\normalpdfcompression {\pdfobjcompresslevel\plusthree \pdfcompresslevel\plusthree} \normalpdfcompression \let\normalsetrandomseed \setrandomseed \let\normaluniformdeviate\uniformdeviate %D Basic status stuff. \newif\ifproductionrun %D For those who expect this \unknown \ifx\fmtname \undefined \def\fmtname {ConTeXt Initial TeX} \fi \ifx\fmtversion\undefined \def\fmtversion{3.1415926} \fi %D A few bonus macros: \def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} \def\dividenumber#1#2{\the\numexpr(#2-(#1/2))/#1\relax} % \ifnum\texengine=\xetexengine % \edef\xetexversion {\numexpr\XeTeXversion*100+(\expandafter\gobbleoneargument\XeTeXrevision-5)/10\relax} % \edef\xetexrevision {\the\numexpr(\expandafter\gobbleoneargument\XeTeXrevision-50)/100\relax} % \fi % % \ifcase\texengine % \def \texenginename {impossible} % \edef\texengineversion{0} % \or % \def \texenginename {pdfTeX} % \edef\texengineversion{\dividenumber{100}\pdftexversion.\modulonumber{100}\pdftexversion.\pdftexrevision} % \or % \def \texenginename {XeTeX} % \edef\texengineversion{\dividenumber{100}\xetexversion .\modulonumber{100}\xetexversion .\xetexrevision} % \or % \def \texenginename {LuaTeX} % \edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision} % \else % \def \texenginename {impossible} % \edef\texengineversion{0} % \fi \def \texenginename {LuaTeX} \edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision} %D We have no reason not to enable this: \savingvdiscards\plusone %D We only can set this one via directives (system.synctex). \let\synctex\undefined \newcount\synctex %D We get rid of the funny \TEX\ offset defaults of one inch by setting them to zero. \voffset\zeropoint \let\voffset\relax \newdimen\voffset % prevent messing up \hoffset\zeropoint \let\hoffset\relax \newdimen\hoffset % prevent messing up %D While cleaning this code up a bit I was listening to Heather Nova's \CD\ Redbird. %D The first song on that \CD\ ends with a few lines suitable for ending this %D initialization module: %D %D \startlines %D And there's so much I can do for you %D Given time I know that I can prove %D Now my world is opened up to you %D Come inside %D %D Welcome to my life %D Welcome to my world %D Come inside %D \stoplines %D %D So let's see what \TEX\ can do now that we've opened up the basic machinery. \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/mult-mps.lua0000644000175000017500000001372312130411274024153 0ustar norbertnorbertreturn { tex = { "btex", "etex", "verbatimtex", }, shortcuts = { "..", "...", "--", "---", "&", }, primitives = { -- to be checked "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "interpath", "on", "off", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "downto", "upto", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "readstring", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", -- "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "greypart", "rgbcolor", "cmykcolor", "greycolor", "graycolor", "colormodel", "graypart", "dashpart", "penpart", -- "colorpart", "stroked", "filled", "textual", "clipped", "bounded", "expandafter", }, commands = { "beginfig", "endfig", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "ditto", "EOF", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "origin", "pensquare", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", -- "magstep", "makelabel", -- "laboff", "rotatedabout", "flex", "superellipse", "erase", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", -- "clear_pen_memory", "range", "numtok", "thru", "z", "laboff", "bye", -- "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "graypart", "graycolor", -- "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", }, internals = { -- we need to remove duplicates above -- "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", -- "pen_lft", "pen_rt", "pen_top", "pen_bot", -- "pen_count_", }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-enc.lua0000644000175000017500000001125111571377075024101 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-enc'] = { version = 1.001, comment = "companion to lpdf-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- delayed loading local pdfconstant = lpdf.constant return lpdf.dictionary { Type = pdfconstant("Encoding"), Differences = lpdf.array { 24, pdfconstant("breve"), pdfconstant("caron"), pdfconstant("circumflex"), pdfconstant("dotaccent"), pdfconstant("hungarumlaut"), pdfconstant("ogonek"), pdfconstant("ring"), pdfconstant("tilde"), 39, pdfconstant("quotesingle"), 96, pdfconstant("grave"), 128, pdfconstant("bullet"), pdfconstant("dagger"), pdfconstant("daggerdbl"), pdfconstant("ellipsis"), pdfconstant("emdash"), pdfconstant("endash"), pdfconstant("florin"), pdfconstant("fraction"), pdfconstant("guilsinglleft"), pdfconstant("guilsinglright"), pdfconstant("minus"), pdfconstant("perthousand"), pdfconstant("quotedblbase"), pdfconstant("quotedblleft"), pdfconstant("quotedblright"), pdfconstant("quoteleft"), pdfconstant("quoteright"), pdfconstant("quotesinglbase"), pdfconstant("trademark"), pdfconstant("fi"), pdfconstant("fl"), pdfconstant("Lslash"), pdfconstant("OE"), pdfconstant("Scaron"), pdfconstant("Ydieresis"), pdfconstant("Zcaron"), pdfconstant("dotlessi"), pdfconstant("lslash"), pdfconstant("oe"), pdfconstant("scaron"), pdfconstant("zcaron"), 160, pdfconstant("Euro"), 164, pdfconstant("currency"), 166, pdfconstant("brokenbar"), 168, pdfconstant("dieresis"), pdfconstant("copyright"), pdfconstant("ordfeminine"), 172, pdfconstant("logicalnot"), pdfconstant(".notdef"), pdfconstant("registered"), pdfconstant("macron"), pdfconstant("degree"), pdfconstant("plusminus"), pdfconstant("twosuperior"), pdfconstant("threesuperior"), pdfconstant("acute"), pdfconstant("mu"), 183, pdfconstant("periodcentered"), pdfconstant("cedilla"), pdfconstant("onesuperior"), pdfconstant("ordmasculine"), 188, pdfconstant("onequarter"), pdfconstant("onehalf"), pdfconstant("threequarters"), 192, pdfconstant("Agrave"), pdfconstant("Aacute"), pdfconstant("Acircumflex"), pdfconstant("Atilde"), pdfconstant("Adieresis"), pdfconstant("Aring"), pdfconstant("AE"), pdfconstant("Ccedilla"), pdfconstant("Egrave"), pdfconstant("Eacute"), pdfconstant("Ecircumflex"), pdfconstant("Edieresis"), pdfconstant("Igrave"), pdfconstant("Iacute"), pdfconstant("Icircumflex"), pdfconstant("Idieresis"), pdfconstant("Eth"), pdfconstant("Ntilde"), pdfconstant("Ograve"), pdfconstant("Oacute"), pdfconstant("Ocircumflex"), pdfconstant("Otilde"), pdfconstant("Odieresis"), pdfconstant("multiply"), pdfconstant("Oslash"), pdfconstant("Ugrave"), pdfconstant("Uacute"), pdfconstant("Ucircumflex"), pdfconstant("Udieresis"), pdfconstant("Yacute"), pdfconstant("Thorn"), pdfconstant("germandbls"), pdfconstant("agrave"), pdfconstant("aacute"), pdfconstant("acircumflex"), pdfconstant("atilde"), pdfconstant("adieresis"), pdfconstant("aring"), pdfconstant("ae"), pdfconstant("ccedilla"), pdfconstant("egrave"), pdfconstant("eacute"), pdfconstant("ecircumflex"), pdfconstant("edieresis"), pdfconstant("igrave"), pdfconstant("iacute"), pdfconstant("icircumflex"), pdfconstant("idieresis"), pdfconstant("eth"), pdfconstant("ntilde"), pdfconstant("ograve"), pdfconstant("oacute"), pdfconstant("ocircumflex"), pdfconstant("otilde"), pdfconstant("odieresis"), pdfconstant("divide"), pdfconstant("oslash"), pdfconstant("ugrave"), pdfconstant("uacute"), pdfconstant("ucircumflex"), pdfconstant("udieresis"), pdfconstant("yacute"), pdfconstant("thorn"), pdfconstant("ydieresis"), }, } context-2013.05.28.20130704/texmf-dist/tex/context/base/enco-fsl.mkii0000644000175000017500000000136311754241457024267 0ustar norbertnorbert%D \module %D [ file=enco-fsl, %D version=2005.08.17, %D title=\CONTEXT\ Encoding Macros, %D subtitle=Slovenian Specialities, %D author={Hans Hagen, Mojka Miklavec}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Usage: %D %D \starttyping %D \useencoding[fsl] %D %D \starttext %D \dstroke \language[sl] \dstroke %D \stoptext %D \stoptyping \unprotect \startlanguagespecifics[\s!sl] \startencoding[\s!default] \definecharacter dstroke {d\zcaron} % hm, expects a space delimiter \stopencoding \stoplanguagespecifics \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/java-imp-fil.mkiv0000644000175000017500000000241211754241457025046 0ustar norbertnorbert%D \module %D [ file=java-fil, %D version=1998.06.01, %D title=\CONTEXT\ JavaScript Macros, %D subtitle=Filing and Printing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \startJSpreamble Auxiliary used now function DocumentFileName() { var Paths = this.path.split("/") ; Paths = Paths[Paths.length-1].split(".") ; return(Paths[0]) } function Print_Page_Range(From,To) { if ((Number(From)>0) && (Number(To) >= Number(From))) { var myFrom = Number(From)-1 ; var myTo = Number(To)-1 ; this.print(false,myFrom,myTo,true) ; } } function Print_This_Page() { this.print(false,this.pageNum,this.pageNum,true) ; } \stopJSpreamble \definereference [PrintSubPaginas] [JS(Print_Page_Range{\firstsubpage,\lastsubpage})] \definereference [PrintSubPages] [JS(Print_Page_Range{\firstsubpage,\lastsubpage})] \definereference [PrintDezePagina] [JS(Print_This_Page)] \definereference [PrintThisPage] [JS(Print_This_Page)] \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/catc-xml.mkii0000644000175000017500000001177611754241457024302 0ustar norbertnorbert%D \module %D [ file=catc-xml, %D version=2006.09.18, %D title=\CONTEXT\ Catcode Macros, %D subtitle=\XML\ Catcode Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Catcode Regimes / XML} \ifdefined \xmlcatcodesn \else \newcatcodetable \xmlcatcodesn \fi % normal \ifdefined \xmlcatcodese \else \newcatcodetable \xmlcatcodese \fi % entitle \ifdefined \xmlcatcodesr \else \newcatcodetable \xmlcatcodesr \fi % reduce \startcatcodetable \xmlcatcodesn \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\ampersandasciicode \activecatcode \catcode`\< \activecatcode \catcode`\> \othercatcode \catcode`\" \othercatcode % probably not needed any more \catcode`\/ \othercatcode % probably not needed any more \catcode`\' \othercatcode % probably not needed any more \catcode\tildeasciicode \othercatcode % probably not needed any more \catcode\hashasciicode \othercatcode % probably not needed any more \catcode\backslashasciicode \othercatcode % probably not needed any more \stopcatcodetable \startcatcodetable \xmlcatcodese \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\ampersandasciicode \activecatcode \catcode`\< \activecatcode \catcode`\> \activecatcode \catcode\hashasciicode \activecatcode \catcode\dollarasciicode \activecatcode \catcode\commentasciicode \activecatcode \catcode\backslashasciicode \activecatcode \catcode\circumflexasciicode\activecatcode \catcode\underscoreasciicode\activecatcode \catcode\leftbraceasciicode \activecatcode \catcode\rightbraceasciicode\activecatcode \catcode\barasciicode \activecatcode \catcode\tildeasciicode \activecatcode \stopcatcodetable \startcatcodetable \xmlcatcodesr \catcode\tabasciicode \spacecatcode \catcode\endoflineasciicode \endoflinecatcode \catcode\formfeedasciicode \endoflinecatcode \catcode\spaceasciicode \spacecatcode \catcode\endoffileasciicode \ignorecatcode \catcode\ampersandasciicode \activecatcode \catcode`\< \activecatcode \catcode`\> \activecatcode \catcode\hashasciicode \activecatcode \catcode\dollarasciicode \activecatcode \catcode\commentasciicode \activecatcode \catcode\backslashasciicode \activecatcode \catcode\circumflexasciicode\activecatcode \catcode\underscoreasciicode\activecatcode \catcode\leftbraceasciicode \activecatcode \catcode\rightbraceasciicode\activecatcode \catcode\barasciicode \activecatcode \catcode\tildeasciicode \activecatcode \stopcatcodetable %D Next we hook in some active character definitions. \letcatcodecommand \xmlcatcodesn \ampersandasciicode \relax \letcatcodecommand \xmlcatcodesn `\< \relax \letcatcodecommand \xmlcatcodese \ampersandasciicode \relax \letcatcodecommand \xmlcatcodese `\< \relax \letcatcodecommand \xmlcatcodesr \ampersandasciicode \relax \letcatcodecommand \xmlcatcodesr `\< \relax \letcatcodecommand \xmlcatcodese \hashasciicode \relax \letcatcodecommand \xmlcatcodese \dollarasciicode \relax \letcatcodecommand \xmlcatcodese \commentasciicode \relax \letcatcodecommand \xmlcatcodese \backslashasciicode \relax \letcatcodecommand \xmlcatcodese \circumflexasciicode \relax \letcatcodecommand \xmlcatcodese \underscoreasciicode \relax \letcatcodecommand \xmlcatcodese \leftbraceasciicode \relax \letcatcodecommand \xmlcatcodese \rightbraceasciicode \relax \letcatcodecommand \xmlcatcodese \barasciicode \relax \letcatcodecommand \xmlcatcodese \tildeasciicode \relax \letcatcodecommand \xmlcatcodesr \hashasciicode \relax \letcatcodecommand \xmlcatcodesr \dollarasciicode \relax \letcatcodecommand \xmlcatcodesr \commentasciicode \relax \letcatcodecommand \xmlcatcodesr \backslashasciicode \relax \letcatcodecommand \xmlcatcodesr \circumflexasciicode \relax \letcatcodecommand \xmlcatcodesr \underscoreasciicode \relax \letcatcodecommand \xmlcatcodesr \leftbraceasciicode \relax \letcatcodecommand \xmlcatcodesr \rightbraceasciicode \relax \letcatcodecommand \xmlcatcodesr \barasciicode \relax \letcatcodecommand \xmlcatcodesr \tildeasciicode \relax \let\xmlcatcodes \xmlcatcodesn % beware, in mkiv we use \notcatcodes \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-ini.lua0000644000175000017500000001326012130411274024113 0ustar norbertnorbertif not modules then modules = { } end modules ['luat-ini'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- rather experimental down here ... adapted to lua 5.2 ... but still -- experimental local debug = require("debug") local string, table, lpeg, math, io, system = string, table, lpeg, math, io, system local rawset, rawget, next, setmetatable = rawset, rawget, next, setmetatable --[[ldx--

    We cannot load anything yet. However what we will do us reserve a few tables. These can be used for runtime user data or third party modules and will not be cluttered by macro package code.

    --ldx]]-- userdata = userdata or { } -- for users (e.g. functions etc) thirddata = thirddata or { } -- only for third party modules moduledata = moduledata or { } -- only for development team documentdata = documentdata or { } -- for users (e.g. raw data) parametersets = parametersets or { } -- experimental for team table.setmetatableindex(moduledata,table.autokey) table.setmetatableindex(thirddata, table.autokey) --[[ldx--

    Please create a namespace within these tables before using them!

    userdata ['my.name'] = { } thirddata['tricks' ] = { } --ldx]]-- --[[ldx--

    We could cook up a readonly model for global tables but it makes more sense to invite users to use one of the predefined namespaces. One can redefine the protector. After all, it's just a lightweight suggestive system, not a watertight one.

    --ldx]]-- local global = _G global.global = global local dummy = function() end --[[ldx--

    Another approach is to freeze tables by using a metatable, this will be implemented stepwise.

    --ldx]]-- -- moduledata : no need for protection (only for developers) -- isolatedata : full protection -- userdata : protected -- thirddata : protected --[[ldx--

    We could have a metatable that automaticaly creates a top level namespace.

    --ldx]]-- local luanames = lua.name -- luatex itself lua.numbers = lua.numbers or { } local numbers = lua.numbers lua.messages = lua.messages or { } local messages = lua.messages storage.register("lua/numbers", numbers, "lua.numbers" ) storage.register("lua/messages", messages, "lua.messages") local setfenv = setfenv or debug.setfenv -- < 5.2 if setfenv then local protected = { -- global table global = global, -- user tables -- moduledata = moduledata, userdata = userdata, thirddata = thirddata, documentdata = documentdata, -- reserved protect = dummy, unprotect = dummy, -- luatex tex = tex, -- lua string = string, table = table, lpeg = lpeg, math = math, io = io, file = file, bit32 = bit32, -- context = context, } local protect_full = function(name) local t = { } for k, v in next, protected do t[k] = v end return t end local protect_part = function(name) -- adds local t = rawget(global,name) if not t then t = { } for k, v in next, protected do t[k] = v end rawset(global,name,t) end return t end protect = function(name) if name == "isolateddata" then setfenv(2,protect_full(name)) else setfenv(2,protect_part(name or "shareddata")) end end function lua.registername(name,message) local lnn = lua.numbers[name] if not lnn then lnn = #messages + 1 messages[lnn] = message numbers[name] = lnn end luanames[lnn] = message context(lnn) -- initialize once if name ~= "isolateddata" then protect_full(name or "shareddata") end end elseif libraries then -- assume >= 5.2 local shared protect = function(name) if not shared then -- e.g. context is not yet known local public = { global = global, -- moduledata = moduledata, userdata = userdata, thirddata = thirddata, documentdata = documentdata, protect = dummy, unprotect = dummy, context = context, } -- for k, v in next, libraries.builtin do public[k] = v end for k, v in next, libraries.functions do public[k] = v end for k, v in next, libraries.obsolete do public[k] = nil end -- shared = { __index = public } protect = function(name) local t = global[name] or { } setmetatable(t,shared) -- set each time return t end end return protect(name) end function lua.registername(name,message) local lnn = lua.numbers[name] if not lnn then lnn = #messages + 1 messages[lnn] = message numbers[name] = lnn end luanames[lnn] = message context(lnn) end else protect = dummy function lua.registername(name,message) local lnn = lua.numbers[name] if not lnn then lnn = #messages + 1 messages[lnn] = message numbers[name] = lnn end luanames[lnn] = message context(lnn) end end context-2013.05.28.20130704/texmf-dist/tex/context/base/meta-fig.mkii0000644000175000017500000000427611754241457024260 0ustar norbertnorbert%D \module %D [ file=meta-fig, %D version=2000.09.07, %D title=\METAPOST\ Graphics, %D subtitle=Stand Alone Graphics, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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}{MetaPost Graphics / Stand Alone Graphics} \unprotect %D This module implements a method for defining %D stand||alone||graphics, that is, each graphic gets is own %D page. Because graphics are wrapped in a \type {\framed}, %D you can add overlays to the graphic directly, and since the %D whole \CONTEXT\ machinery is available, you can also add %D page backgrounds. %D %D \starttyping %D \setupMPpage %D [offset=1pt, %D background=color, %D backgroundcolor=green] %D %D \startMPpage %D fill fullcircle scaled 10cm withcolor red ; %D \stopMPpage %D %D \startMPpage %D fill fullsquare rotated 45 scaled 8cm withcolor blue ; %D \stopMPpage %D \stoptyping %D %D Although this is hardly of any use, you can mix these %D definitions with the text flow, since all settings are %D kept local. The page is clipped to the image size. \presetlocalframed[\??mg] \def\setupMPpage {\dodoubleargument\getparameters[\??mg]} \def\startMPpage {\dodoubleempty\dostartMPpage} \long\def\dostartMPpage[#1][#2]% second arg gobbles space {\dostartfittingpage[\??mg][#1]% \obeyMPlines \dodostartMPpage} \long\def\dodostartMPpage#1\stopMPpage {\startuseMPgraphic{@@}#1\stopuseMPgraphic \useMPgraphic{@@}% \dostopfittingpage} \let\stopMPpage \relax % so that we can use it in \expanded \setupMPpage [\c!scale=1000, \c!strut=\v!no, \c!align=, \c!offset=\v!overlay, \c!width=\v!fit, \c!height=\v!fit, \c!frame=\v!off] %D \macros %D {MPfigure} %D %D A bit out of place, here but nevertheless: \def\MPfigure#1#2% test for dup figure {\bgroup \getfiguredimensionsonly[#1]% [\c!object=\v!no] already set \startMPcode externalfigure "#1" xscaled \figurewidth\space yscaled \figureheight\space #2 ; \stopMPcode \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-30.mkiv0000644000175000017500000001157211754241457024047 0ustar norbertnorbert%D \module %D [ file=s-pre-30, %D version=2006.04.25, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 30, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \usemodule[streams] \setuppapersize [S6] [S6] \setupbodyfont [12pt,tt] \definemeasure[bleed][6pt] \definecolor[maincolor-3][r=.5,g=.2,b=.2] \definecolor[maincolor-1][r=.2,g=.5,b=.2] \definecolor[maincolor-2][r=.2,g=.2,b=.5] \definecolor[pagecolor] [s=.5] \definecolor[resultcolor][s=1,t=.85,a=1] \definecolor[maincolor] [maincolor-3] \definecolorgroup [maingroup] [.5:.2:.2, .2:.5:.2, .2:.2:.5] \definecolorgroup [resultgroup] [1:.85:.85, .85:1:.85, .85:.85:1] \def\CurrentColor{1} \definecolor[maincolor] [maingroup:\CurrentColor] \definecolor[resultcolor][resultgroup:\CurrentColor] \def\NextColor{\ifnum\CurrentColor=3 \def\CurrentColor{1}\else\doglobal\increment\CurrentColor\fi} \setuplayout [backspace=\measure{bleed}, topspace=30pt, bottomdistance=\measure{bleed}, bottom=\dimexpr30pt-\measure{bleed}\relax, header=0pt, footer=0pt, topdistance=\measure{bleed}, top=\dimexpr30pt-\measure{bleed}\relax, width=middle, height=middle] \setuptop [before=\vfill, after=\vfill, strut=yes] \setupbackgrounds [text] [backgroundoffset=\measure{bleed}, background=color, backgroundcolor=maincolor] \setupbackgrounds [page] [background=color, backgroundcolor=pagecolor] \setupcolors [state=start, textcolor=white] \setuphead [chapter] [style=\ttd] \setuphead [section] [style=\ttd] \defineviewerlayer [result] [state=stop] \definelayer [result] \setuplayer [result] [width=\textwidth, height=\textheight] \setupbackgrounds [text] [background={color,toggle,foreground,result}] \setupinteraction [state=start, click=no, menu=on, color=white, contrastcolor=white, closepageaction=HideLayer{result}, openpageaction=HideLayer{result}] % We add a dummy color switch so that each page has at least one % transparency; else acrobat will render the pages differently % bug in 6 and 7). \startinteractionmenu[bottom] % \color[resultcolor]{ }% \hfill \got [content] content \\ \got [previouspage] previous \\ \got [nextpage] next \\ \got [ToggleLayer{result}] result \\ \got [CloseDocument] close \\ \stopinteractionmenu \setuphead [section] [placehead=no, incrementnumber=list] \setuplist [section] [alternative=f] \defineoverlay [toggle] [\overlaybutton{ToggleLayer{result}}] \definestreamlayer [resultstream] \startsetups streamlayer:resultstream:flush \setlayer [result] [preset=middlebottom, hoffset=\measure{bleed}, % voffset=-\measure{bleed}] voffset=\measure{bleed}] {\startviewerlayer[result]% % \framed % [offset=overlay, % frame=off, % background=color, % backgroundoffset=1\dimexpr\measure{bleed}\relax, % backgroundcolor=maincolor] {\framed [offset=overlay, frame=off, foregroundcolor=maincolor, background=color, backgroundoffset=1\dimexpr\measure{bleed}\relax, backgroundcolor=resultcolor] {\tightlayer[\currentstreamlayer]}} \stopviewerlayer} \stopsetups \startsetups show-definition \subject{definition} \typebuffer \getbuffer \page \stopsetups \startsetups show-result \startstreamlayer[resultstream] \subject{result} \getbuffer \stopstreamlayer \placestreamlayer[resultstream] \page \stopsetups \startsetups show-usage \subject{usage} \typebuffer \startstreamlayer[resultstream] \subject{result} \getbuffer \stopstreamlayer \placestreamlayer[resultstream] \page \stopsetups \startsetups show-usage-lines \subject{usage} \typebuffer \startstreamlayer[resultstream] \subject{result} \startlines \getbuffer \stoplines \stopstreamlayer \placestreamlayer[resultstream] \page \stopsetups \startsetups show-contents \startcolumns[n=3] \placelist[section][criterium=text] \stopcolumns \pagereference[content] \page \NextColor \stopsetups \def\TitlePage#1% {\title{#1} \setups{show-contents}} \def\StartSample#1% {\starttext \page \section{#1} \setuptoptexts[][\processedfile\enspace:\enspace\lowercase{#1}]} \def\StopSample {\page \setuptoptexts[][] \stoptext \NextColor} \endinput \usemodule[pre-30] % \TitlePage{Howling to the moon} \StartSample{Basics} \startbuffer \lua{a = 1.5 ; b = 1.8 ; c = a*b ; context(c) ;} \startlua a = 1 b = 2 c = a*b context(c) \stoplua \stopbuffer \setups{show-usage} \StopSample context-2013.05.28.20130704/texmf-dist/tex/context/base/m-dratex.mkii0000644000175000017500000000114211754241457024275 0ustar norbertnorbert%D \module %D [ file=m-dratex, %D version=2005.11.25, %D title=\CONTEXT\ Extra Modules, %D subtitle=\DRATEX\ Loading Macros, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details \readfile{DraTex.sty}{}{\readfile{dratex.sty}{}{\endinput}} \letvalue{:NewCount}\newcount \letvalue{:NewDimen}\newdimen \readfile{AlDraTex.sty}{}{\readfile{aldratex.sty}{}{\endinput}} \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-ct.lua0000644000175000017500000001024311754241457023261 0ustar norbertnorbertif not modules then modules = { } end modules ['x-ct'] = { version = 1.001, comment = "companion to x-ct.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- needs testing local xmlsprint, xmlcprint, xmlfilter, xmlcollected = xml.sprint, xml.cprint, xml.filter, xml.collected local format, concat, rep, find = string.format, table.concat, string.rep, string.find moduledata.ct = moduledata.ct or { } local halignments = { left = 'l', flushleft = 'l', right = 'r', flushright = 'r', center = 'c', middle = 'c', centre = 'c', justify = '', } local templates = { } function moduledata.ct.registertabulatetemplate(name,str) templates[name] = str end local function roottemplate(root) local rt = root.at.template if rt then local template = templates[rt] if template then return template else if not find(rt,"|") then rt = gsub(rt,",","|") end if not find(rt,"^|") then rt = "|" .. rt end if not find(rt,"|$") then rt = rt .. "|" end return rt end end end local function specifiedtemplate(root,templatespec) local template = { } for e in xmlcollected(root,templatespec) do local at = e.at local tm = halignments[at.align] or "" if toboolean(at.paragraph) then tm = tm .. "p" end template[#template+1] = tm end if #template > 0 then return "|" .. concat(template,"|") .. "|" else return nil end end local function autotemplate(root,rowspec,cellspec) local max = 0 for e in xmlcollected(root,rowspec) do local n = xml.count(e,cellspec) if n > max then max = n end end if max == 2 then return "|l|p|" elseif max > 0 then return "|" .. rep("p|",max) else return nil end end local defaulttemplate = "|l|p|" function moduledata.ct.tabulate(root,namespace) if not root then return else root = lxml.id(root) end local prefix = (namespace or "context") .. ":" local templatespec = "/" .. prefix .. "template" .. "/" .. prefix .. "column" local bodyrowspec = "/" .. prefix .. "body" .. "/" .. prefix .. "row" local cellspec = "/" .. prefix .. "cell" local template = roottemplate (root) or specifiedtemplate (root,templatespec) or autotemplate (root,bodyrowspec,cellspec) or defaulttemplate -- todo: head and foot local NC, NR = context.NC, context.NR lxml.directives.before(root,'cdx') context.bgroup() lxml.directives.setup(root,'cdx') context.starttabulate { template } for e in xmlcollected(root,bodyrowspec) do NC() for e in xmlcollected(e,cellspec) do xmlcprint(e) NC() end NR() end context.stoptabulate() context.egroup() lxml.directives.after(root,'cdx') end function moduledata.ct.combination(root,namespace) if not root then return else root = lxml.id(root) end local prefix = (namespace or "context") .. ":" local pairspec = "/" .. prefix .. "pair" local contentspec = "/" .. prefix .. "content" .. "/text()" local captionspec = "/" .. prefix .. "caption" .. "/text()" local nx, ny = root.at.nx, root.at.ny if not (nx or ny) then nx = xml.count(root,pairspec) or 2 end local template = format("%s*%s", nx or 1, ny or 1) lxml.directives.before(root,'cdx') context.bgroup() lxml.directives.setup(root,'cdx') context.startcombination { template } for e in xmlcollected(root,pairspec) do -- context.combination( -- function() xmlfilter(e,contentspec) end, -- function() xmlfilter(e,captionspec) end -- ) context("{") xmlfilter(e,contentspec) context("}{") xmlfilter(e,captionspec) context("}") end context.stopcombination() context.egroup() lxml.directives.after(root,'cdx') end context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-cambria.mkiv0000644000175000017500000000664211754241457025743 0ustar norbertnorbert%D \module %D [ file=type-imp-cambria, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Microsoft Cambria, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[cambria] % microsoft: cambria.ttc cambriab.ttf cambriai.ttf cambriaz.ttf % ascender : cambmath.ttf cambria.ttf cambriab.ttf cambriai.ttf cambriaz.ttf \starttypescript [\s!math,\s!serif] [cambria,cambria-x,cambria-y] % whatever matches \definefontsynonym [CambriaMath] [\s!name:cambriamath] \definefontsynonym [CambriaSerif] [\s!name:cambria] \stoptypescript \starttypescript [\s!math,\s!serif] [cambria-m] % microsoft cabria \definefontsynonym [CambriaMath] [\s!file:cambria.ttc(Cambria Math)] \definefontsynonym [CambriaSerif] [\s!file:cambria.ttc(Cambria)] \stoptypescript \starttypescript [\s!math,\s!serif] [cambria-a] % ascender cambria \definefontsynonym [CambriaMath] [\s!file:cambmath.ttf] \definefontsynonym [CambriaSerif] [\s!file:cambria.ttf] \stoptypescript % We load a goodies file that will apply a patch to the font. As a demonstration % we apply the patch when caching as as when scaling which is why we also specify % the goodies file with the name. \starttypescript [\s!math] [cambria,cambria-m,cambria-a] [\s!name] \loadfontgoodies[cambria-math] \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features=\s!math\mathsizesuffix,\s!goodies=cambria-math] \stoptypescript \starttypescript [\s!math] [cambria-x] [\s!name] \loadfontgoodies[cambria-math] \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features=\s!math,\s!goodies=cambria-math] \stoptypescript \starttypescript [\s!math] [cambria-y] [\s!name] \loadfontgoodies[cambria-math] \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features=\s!math-nostack\mathsizesuffix,\s!goodies=cambria-math] \stoptypescript \starttypescript [\s!serif] [cambria,cambria-m,cambria-a] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [CambriaSerif] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!name:cambriabold] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!name:cambriaitalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!name:cambriabolditalic] [\s!features=\s!default] \stoptypescript \starttypescript [cambria,cambria-m,cambria-a] % any \definetypeface [cambria] [\s!rm] [\s!serif] [\typescriptone] [\s!default] \definetypeface [cambria] [\s!tt] [\s!mono] [modern] [\s!default] \definetypeface [cambria] [\s!mm] [\s!math] [\typescriptone] [\s!default] \stoptypescript \starttypescript [cambria-x,cambria-y] % test x \definetypeface [\typescriptone] [\s!rm] [\s!serif] [cambria] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] \definetypeface [\typescriptone] [\s!mm] [\s!math] [\typescriptone] [\s!default] \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/x-xml-02.mkii0000644000175000017500000000336011754241457024044 0ustar norbertnorbert%D \module %D [ file=x-xml-02, %D version=2001.10.10, %D title=\CONTEXT\ XML Style File, %D subtitle=Pretty Printing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % texexec --use=xml-pretty yourfile.x** [--mode=letter] \doifnothing {\inputfilename} {\end} \doiffileelse {\inputfilename} {} {\end} \startmode[letter] \setuppapersize[letter][letter] \stopmode \setuplayout [backspace=1.5cm, topspace=1.5cm, bottomspace=1cm, width=middle, height=middle, header=1.5cm, footer=1.5cm] \setupcolors [state=local] \setuppagenumbering [location=] \setuplayout [style=type] \setupbodyfont [10pt,tt] \setuptolerance [verytolerant] \setupalign [broad,right] \lowercasestring\inputfilename \to \lcinputfilename \defconvertedcommand\lcinputfilename\lcinputfilename % make _ safe \setupheadertexts [\lcinputfilename] \setupfootertexts [\currentdate\space\string| \currenttime\space \string| \pagenumber] % let's have a look at the type of content: \setupXMLfile [level=2] \startmode[*suffix-xml] % ok \stopmode \startmode[*suffix-rng] \showXMLlin[value] \stopmode \startmode[*suffix-rlg] \showXMLlin [rl:type,rl:state,rl:name,rl:suffix,rl:label,rl:file,rl:original, rl:width,rl:height,rl:base,rl:page] \stopmode \startmode[*suffix-exa] \showXMLlin [exa:resolve,exa:include] \stopmode \def\XMLbannerprocessor#1{\string<\string ?xml #1\string ?\string>\endgraf} \defineXMLprocessor [xml] {\XMLbannerprocessor} \starttext \showXMLfile{\inputfilename} \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/data-gen.lua0000644000175000017500000000050111376503616024060 0ustar norbertnorbertif not modules then modules = { } end modules ['data-gen'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- move generators here context-2013.05.28.20130704/texmf-dist/tex/context/base/s-languages-system.lua0000644000175000017500000000235212161703335026127 0ustar norbertnorbertif not modules then modules = { } end modules ['s-languages-system'] = { version = 1.001, comment = "companion to s-languages-system.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.languages = moduledata.languages or { } moduledata.languages.system = moduledata.languages.system or { } local NC, NR, HL = context.NC, context.NR, context.HL function moduledata.languages.system.showinstalled() local numbers = languages.numbers local registered = languages.registered context.starttabulate { "|r|l|l|l|l|" } NC() context("id") NC() context("tag") NC() context("synonyms") NC() context("parent") NC() context("loaded") NC() NR() HL() for i=1,#numbers do local tag = numbers[i] local data = registered[tag] NC() context(data.number) NC() context(tag) NC() context("% t",table.sortedkeys(data.synonyms)) NC() context(data.parent) NC() context("%+t",table.sortedkeys(data.used)) NC() NR() end context.stoptabulate() end context-2013.05.28.20130704/texmf-dist/tex/context/base/bibl-bib.lua0000644000175000017500000006140712130411274024041 0ustar norbertnorbertif not modules then modules = { } end modules ['bibl-bib'] = { version = 1.001, comment = "this module is the basis for the lxml-* ones", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

    This is a prelude to integrated bibliography support. This file just loads bibtex files and converts them to xml so that the we access the content in a convenient way. Actually handling the data takes place elsewhere.

    --ldx]]-- local lower, format, gsub, concat = string.lower, string.format, string.gsub, table.concat local next = next local utfchar = utf.char local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns local textoutf = characters and characters.tex.toutf local variables = interfaces and interfaces.variables local settings_to_hash = utilities.parsers.settings_to_hash local finalizers = xml.finalizers.tex local xmlfilter, xmltext, getid = xml.filter, xml.text, lxml.getid local formatters = string.formatters local P, R, S, C, Cc, Cs, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct local trace_bibxml = false trackers.register("publications.bibxml", function(v) trace_bibtex = v end) local report_xml = logs.reporter("publications","xml") bibtex = bibtex or { } local bibtex = bibtex bibtex.statistics = bibtex.statistics or { } local bibtexstats = bibtex.statistics bibtexstats.nofbytes = 0 bibtexstats.nofdefinitions = 0 bibtexstats.nofshortcuts = 0 local defaultshortcuts = { jan = "1", feb = "2", mar = "3", apr = "4", may = "5", jun = "6", jul = "7", aug = "8", sep = "9", oct = "10", nov = "11", dec = "12", } local shortcuts = { } local data = { } local entries -- Currently we expand shortcuts and for large ones (like the acknowledgements -- in tugboat.bib this is not that efficient. However, eventually strings get -- hashed again. local function do_shortcut(tag,key,value) bibtexstats.nofshortcuts = bibtexstats.nofshortcuts + 1 if lower(tag) == "@string" then shortcuts[key] = value end end local function do_definition(tag,key,tab) -- maybe check entries here (saves memory) if not entries or entries[key] then bibtexstats.nofdefinitions = bibtexstats.nofdefinitions + 1 local t = { } for i=1,#tab,2 do t[tab[i]] = tab[i+1] end local p = data[tag] if not p then data[tag] = { [key] = t } else p[key] = t end end end local function resolve(s) return shortcuts[s] or defaultshortcuts[s] or s -- can be number end local percent = P("%") local start = P("@") local comma = P(",") local hash = P("#") local escape = P("\\") local single = P("'") local double = P('"') local left = P('{') local right = P('}') local both = left + right local lineending = S("\n\r") local space = S(" \t\n\r\f") local spacing = space^0 local equal = P("=") local collapsed = (space^1)/ " " local function add(a,b) if b then return a..b else return a end end local keyword = C((R("az","AZ","09") + S("@_:-"))^1) -- C((1-space)^1) local s_quoted = ((escape*single) + collapsed + (1-single))^0 local d_quoted = ((escape*double) + collapsed + (1-double))^0 local balanced = lpegpatterns.balanced local s_value = (single/"") * s_quoted * (single/"") local d_value = (double/"") * d_quoted * (double/"") local b_value = (left /"") * balanced * (right /"") local r_value = keyword/resolve local somevalue = s_value + d_value + b_value + r_value local value = Cs((somevalue * ((spacing * hash * spacing)/"" * somevalue)^0)) local assignment = spacing * keyword * spacing * equal * spacing * value * spacing local shortcut = keyword * spacing * left * spacing * (assignment * comma^0)^0 * spacing * right local definition = keyword * spacing * left * spacing * keyword * comma * Ct((assignment * comma^0)^0) * spacing * right local comment = keyword * spacing * left * (1-right)^0 * spacing * right local forget = percent^1 * (1-lineending)^0 -- todo \% local grammar = (space + forget + shortcut/do_shortcut + definition/do_definition + comment + 1)^0 function bibtex.convert(session,content) statistics.starttiming(bibtex) data, shortcuts, entries = session.data, session.shortcuts, session.entries bibtexstats.nofbytes = bibtexstats.nofbytes + #content session.nofbytes = session.nofbytes + #content lpegmatch(grammar,content or "") statistics.stoptiming(bibtex) end function bibtex.load(session,filename) local filename = resolvers.findfile(filename,"bib") if filename ~= "" then local data = io.loaddata(filename) or "" if data == "" then report_xml("empty file %a, no conversion to xml",filename) elseif trace_bibxml then report_xml("converting file %a to xml",filename) end bibtex.convert(session,data) end end function bibtex.new() return { data = { }, shortcuts = { }, xml = xml.convert("\n"), nofbytes = 0, entries = nil, loaded = false, } end local p_escaped = lpegpatterns.xml.escaped local ihatethis = { f = "\\f", n = "\\n", r = "\\r", s = "\\s", t = "\\t", v = "\\v", z = "\\z", } local command = P("\\")/"" * Cc("\\bibtexcommand{") * (R("az","AZ")^1) * Cc("}") local any = P(1) local done = P(-1) local one_l = P("{") / "" local one_r = P("}") / "" local two_l = P("{{") / "" local two_r = P("}}") / "" local filter = Cs( two_l * (command + any - two_r - done)^0 * two_r * done + one_l * (command + any - one_r - done)^0 * one_r * done + (command + any )^0 ) function bibtex.toxml(session,options) if session.loaded then return else session.loaded = true end -- we can always speed this up if needed -- format slows down things a bit but who cares statistics.starttiming(bibtex) local result, r = { }, 0 local options = settings_to_hash(options) local convert = options.convert -- todo: interface local strip = options.strip -- todo: interface local entries = session.entries r = r + 1 ; result[r] = "" r = r + 1 ; result[r] = "" for id, categories in next, session.data do id = lower(gsub(id,"^@","")) for name, entry in next, categories do if not entries or entries[name] then r = r + 1 ; result[r] = formatters[""](lower(name),id) for key, value in next, entry do value = gsub(value,"\\(.)",ihatethis) -- this really needs checking value = lpegmatch(p_escaped,value) if value ~= "" then if convert then value = textoutf(value,true) end if strip then -- as there is no proper namespace in bibtex we need this -- kind of hackery ... bibtex databases are quite unportable value = lpegmatch(filter,value) or value end r = r + 1 ; result[r] = formatters[" %s"](key,value) end end r = r + 1 ; result[r] = "" end end end r = r + 1 ; result[r] = "" result = concat(result,"\n") -- alternatively we could use lxml.convert session.xml = xml.convert(result, { resolve_entities = true, resolve_predefined_entities = true, -- in case we have escaped entities -- unify_predefined_entities = true, -- & -> & utfize_entities = true, } ) session.data = nil session.shortcuts = nil statistics.stoptiming(bibtex) end statistics.register("bibtex load time", function() local nofbytes = bibtexstats.nofbytes if nofbytes > 0 then return format("%s seconds (%s bytes, %s definitions, %s shortcuts)", statistics.elapsedtime(bibtex),nofbytes,bibtexstats.nofdefinitions,bibtexstats.nofshortcuts) else return nil end end) --~ str = [[ --~ @COMMENT { CRAP } --~ @STRING{ hans = "h a n s" } --~ @STRING{ taco = "t a c o" } --~ @SOMETHING{ key1, abc = "t a c o" , def = "h a n s" } --~ @SOMETHING{ key2, abc = hans # taco } --~ @SOMETHING{ key3, abc = "hans" # taco } --~ @SOMETHING{ key4, abc = hans # "taco" } --~ @SOMETHING{ key5, abc = hans # taco # "hans" # "taco"} --~ @SOMETHING{ key6, abc = {oeps {oeps} oeps} } --~ ]] --~ local session = bibtex.new() --~ bibtex.convert(session,str) --~ bibtex.toxml(session) --~ print(session.nofbytes,statistics.elapsedtime(bibtex)) --~ local session = bibtex.new() --~ bibtex.load(session,"IEEEabrv.bib") --~ bibtex.load(session,"IEEEfull.bib") --~ bibtex.load(session,"IEEEexample.bib") --~ bibtex.toxml(session) --~ print(session.nofbytes,statistics.elapsedtime(bibtex)) --~ local session = bibtex.new() --~ bibtex.load(session,"gut.bib") --~ bibtex.load(session,"komoedie.bib") --~ bibtex.load(session,"texbook1.bib") --~ bibtex.load(session,"texbook2.bib") --~ bibtex.load(session,"texbook3.bib") --~ bibtex.load(session,"texgraph.bib") --~ bibtex.load(session,"texjourn.bib") --~ bibtex.load(session,"texnique.bib") --~ bibtex.load(session,"tugboat.bib") --~ bibtex.toxml(session) --~ print(session.nofbytes,statistics.elapsedtime(bibtex)) --~ print(table.serialize(session.data)) --~ print(table.serialize(session.shortcuts)) --~ print(xml.serialize(session.xml)) if not characters then dofile(resolvers.findfile("char-def.lua")) end local chardata = characters.data local concat = table.concat local lpeg = lpeg local P, Ct, lpegmatch, lpegpatterns = lpeg.P, lpeg.Ct, lpeg.match, lpeg.patterns local space, comma = P(" "), P(",") local andsplitter = lpeg.tsplitat(space^1 * "and" * space^1) local commasplitter = lpeg.tsplitat(space^0 * comma * space^0) local spacesplitter = lpeg.tsplitat(space^1) local firstcharacter = lpegpatterns.utf8byte local function is_upper(str) local first = lpegmatch(firstcharacter,str) local okay = chardata[first] return okay and okay.category == "lu" end local function splitauthors(str) local authors = lpegmatch(andsplitter,str) for i=1,#authors do local firstnames, vons, surnames, initials, juniors, words local author = authors[i] local split = lpegmatch(commasplitter,author) local n = #split if n == 1 then --~ First von Last words = lpegmatch(spacesplitter,author) firstnames, vons, surnames = { }, { }, { } local i, n = 1, #words while i <= n do local w = words[i] if is_upper(w) then firstnames[#firstnames+1], i = w, i + 1 else break end end while i <= n do local w = words[i] if is_upper(w) then break else vons[#vons+1], i = w, i + 1 end end while i <= n do surnames[#surnames+1], i = words[i], i + 1 end elseif n == 2 then --~ von Last, First words = lpegmatch(spacesplitter,split[2]) surnames = lpegmatch(spacesplitter,split[1]) firstnames, vons = { }, { } local i, n = 1, #words while i <= n do local w = words[i] if is_upper(w) then firstnames[#firstnames+1], i = w, i + 1 else break end end while i <= n do vons[#vons+1], i = words[i], i + 1 end else --~ von Last, Jr ,First firstnames = lpegmatch(spacesplitter,split[1]) juniors = lpegmatch(spacesplitter,split[2]) surnames = lpegmatch(spacesplitter,split[3]) if n > 3 then -- error end end if #surnames == 0 then surnames[1] = firstnames[#firstnames] firstnames[#firstnames] = nil end if firstnames then initials = { } for i=1,#firstnames do initials[i] = utfchar(lpegmatch(firstcharacter,firstnames[i])) end end authors[i] = { original = author, firstnames = firstnames, vons = vons, surnames = surnames, initials = initials, juniors = juniors, } end authors.original = str return authors end local function the_initials(initials,symbol) local t, symbol = { }, symbol or "." for i=1,#initials do t[i] = initials[i] .. symbol end return t end -- authors bibtex.authors = bibtex.authors or { } local authors = bibtex.authors local defaultsettings = { firstnamesep = " ", vonsep = " ", surnamesep = " ", juniorsep = " ", surnamejuniorsep = ", ", juniorjuniorsep = ", ", surnamefirstnamesep = ", ", surnameinitialsep = ", ", namesep = ", ", lastnamesep = " and ", finalnamesep = " and ", } function authors.normal(author,settings) local firstnames, vons, surnames, juniors = author.firstnames, author.vons, author.surnames, author.juniors local result, settings = { }, settings or defaultsettings if firstnames and #firstnames > 0 then result[#result+1] = concat(firstnames," ") result[#result+1] = settings.firstnamesep or defaultsettings.firstnamesep end if vons and #vons > 0 then result[#result+1] = concat(vons," ") result[#result+1] = settings.vonsep or defaultsettings.vonsep end if surnames then result[#result+1] = concat(surnames," ") end if juniors and #juniors > 0 then result[#result+1] = concat(juniors," ") result[#result+1] = settings.surnamesep or defaultsettings.surnamesep end return concat(result) end function authors.normalshort(author,settings) local firstnames, vons, surnames, juniors = author.firstnames, author.vons, author.surnames, author.juniors local result, settings = { }, settings or defaultsettings if firstnames and #firstnames > 0 then result[#result+1] = concat(firstnames," ") result[#result+1] = settings.firstnamesep or defaultsettings.firstnamesep end if vons and #vons > 0 then result[#result+1] = concat(vons," ") result[#result+1] = settings.vonsep or defaultsettings.vonsep end if surnames then result[#result+1] = concat(surnames," ") end if juniors and #juniors > 0 then result[#result+1] = concat(juniors," ") result[#result+1] = settings.surnamejuniorsep or defaultsettings.surnamejuniorsep end return concat(result) end function authors.inverted(author,settings) local firstnames, vons, surnames, juniors = author.firstnames, author.vons, author.surnames, author.juniors local result, settings = { }, settings or defaultsettings if vons and #vons > 0 then result[#result+1] = concat(vons," ") result[#result+1] = settings.vonsep or defaultsettings.vonsep end if surnames then result[#result+1] = concat(surnames," ") end if juniors and #juniors > 0 then result[#result+1] = settings.juniorjuniorsep or defaultsettings.juniorjuniorsep result[#result+1] = concat(juniors," ") end if firstnames and #firstnames > 0 then result[#result+1] = settings.surnamefirstnamesep or defaultsettings.surnamefirstnamesep result[#result+1] = concat(firstnames," ") end return concat(result) end function authors.invertedshort(author,settings) local vons, surnames, initials, juniors = author.vons, author.surnames, author.initials, author.juniors local result, settings = { }, settings or defaultsettings if vons and #vons > 0 then result[#result+1] = concat(vons," ") result[#result+1] = settings.vonsep or defaultsettings.vonsep end if surnames then result[#result+1] = concat(surnames," ") end if juniors and #juniors > 0 then result[#result+1] = settings.juniorjuniorsep or defaultsettings.juniorjuniorsep result[#result+1] = concat(juniors," ") end if initials and #initials > 0 then result[#result+1] = settings.surnameinitialsep or defaultsettings.surnameinitialsep result[#result+1] = concat(the_initials(initials)," ") end return concat(result) end local lastconcatsize = 1 local function bibtexconcat(t,settings) local namesep = settings.namesep or defaultsettings.namesep or ", " local lastnamesep = settings.lastnamesep or defaultsettings.lastnamesep or namesep local finalnamesep = settings.finalnamesep or defaultsettings.finalnamesep or lastnamesep local lastconcatsize = #t if lastconcatsize > 2 then local s = { } for i=1,lastconcatsize-2 do s[i] = t[i] .. namesep end s[lastconcatsize-1], s[lastconcatsize] = t[lastconcatsize-1] .. finalnamesep, t[lastconcatsize] return concat(s) elseif lastconcatsize > 1 then return concat(t,lastnamesep) elseif lastconcatsize > 0 then return t[1] else return "" end end function authors.concat(author,combiner,what,settings) if type(combiner) == "string" then combiner = authors[combiner or "normal"] or authors.normal end local split = splitauthors(author) local setting = settings[what] local etallimit, etaldisplay, etaltext = 1000, 1000, "" if setting then etallimit = settings.etallimit or 1000 etaldisplay = settings.etaldisplay or etallimit etalltext = settings.etaltext or "" end local max = #split if max > etallimit and etaldisplay < max then max = etaldisplay end for i=1,max do split[i] = combiner(split[i],settings) end local result = bibtexconcat(split,settings) if max < #split then return result else return result .. etaltext end end function authors.short(author,year) local result = { } if author then local authors = splitauthors(author) for a=1,#authors do local aa = authors[a] local initials = aa.initials for i=1,#initials do result[#result+1] = initials[i] end local surnames = aa.surnames for s=1,#surnames do result[#result+1] = utfchar(lpegmatch(firstcharacter,surnames[s])) end end end if year then result[#result+1] = year end return concat(result) end -- We can consider creating a hashtable key -> entry but I wonder if -- pays off. local function collectauthoryears(id,list) list = settings_to_hash(list) id = getid(id) local found = { } for e in xml.collected(id,"/bibtex/entry") do if list[e.at.tag] then local year = xmlfilter(e,"xml:///field[@name='year']/text()") local author = xmlfilter(e,"xml:///field[@name='author']/text()") if author and year then local a = found[author] if not a then a = { } found[author] = a end local y = a[year] if not y then y = { } a[year] = y end y[#y+1] = e end end end -- found = { author = { year_1 = { e1, e2, e3 } } } local done = { } for author, years in next, found do local yrs = { } for year, entries in next, years do if subyears then -- -- add letters to all entries of an author and if so shouldn't -- -- we tag all years of an author as soon as we do this? -- if #entries > 1 then -- for i=1,#years do -- local entry = years[i] -- -- years[i] = year .. string.char(i + string.byte("0") - 1) -- end -- end else yrs[#yrs+1] = year end end done[author] = yrs end return done end local method, settings = "normal", { } function authors.setsettings(s) settings = s or settings end if commands then local sessions = { } function commands.definebibtexsession(name) sessions[name] = bibtex.new() end function commands.preparebibtexsession(name,xmlname,options) bibtex.toxml(sessions[name],options) lxml.register(xmlname,sessions[name].xml) end function commands.registerbibtexfile(name,filename) bibtex.load(sessions[name],filename) end function commands.registerbibtexentry(name,entry) local session = sessions[name] local entries = session.entries if not entries then session.entries = { [entry] = true } -- here we can keep more info else entries[entry] = true end end -- commands.bibtexconcat = bibtexconcat -- finalizers can be rather dumb as we have just text and no embedded xml function finalizers.bibtexconcat(collected,method,what) if collected then local author = collected[1].dt[1] or "" if author ~= "" then context(authors.concat(author,method,what,settings)) end end end function finalizers.bibtexshort(collected) if collected then local c = collected[1] local year = xmlfilter(c,"xml://field[@name='year']/text()") local author = xmlfilter(c,"xml://field[@name='author']/text()") context(authors.short(author,year)) end end -- experiment: --~ -- alternative approach: keep data at the tex end --~ local function xbibtexconcat(t,sep,finalsep,lastsep) --~ local n = #t --~ if n > 0 then --~ context(t[1]) --~ if n > 1 then --~ if n > 2 then --~ for i=2,n-1 do --~ context.bibtexpublicationsparameter("sep") --~ context(t[i]) --~ end --~ context.bibtexpublicationsparameter("finalsep") --~ else --~ context.bibtexpublicationsparameter("lastsep") --~ end --~ context(t[n]) --~ end --~ end --~ end -- todo : sort -- todo: choose between bibtex or commands namespace function bibtex.authorref(id,list) local result = collectauthoryears(id,list,method,what) for author, years in next, result do context(authors.concat(author,method,what,settings)) end end function bibtex.authoryearref(id,list) local result = collectauthoryears(id,list,method,what) for author, years in next, result do context("%s (%s)",authors.concat(author,method,what,settings),concat(years,", ")) end end function bibtex.authoryearsref(id,list) local result = collectauthoryears(id,list,method,what) for author, years in next, result do context("(%s, %s)",authors.concat(author,method,what,settings),concat(years,", ")) end end function bibtex.singularorplural(singular,plural) if lastconcatsize and lastconcatsize > 1 then context(plural) else context(singular) end end end --~ local function test(sample) --~ local authors = splitauthors(sample) --~ print(table.serialize(authors)) --~ for i=1,#authors do --~ local author = authors[i] --~ print(normalauthor (author,settings)) --~ print(normalshortauthor (author,settings)) --~ print(invertedauthor (author,settings)) --~ print(invertedshortauthor(author,settings)) --~ end --~ print(concatauthors(sample,settings,normalauthor)) --~ print(concatauthors(sample,settings,normalshortauthor)) --~ print(concatauthors(sample,settings,invertedauthor)) --~ print(concatauthors(sample,settings,invertedshortauthor)) --~ end --~ local sample_a = "Hagen, Hans and Hoekwater, Taco Whoever T. Ex. and Henkel Hut, Hartmut Harald von der" --~ local sample_b = "Hans Hagen and Taco Whoever T. Ex. Hoekwater and Hartmut Harald von der Henkel Hut" --~ test(sample_a) --~ test(sample_b) context-2013.05.28.20130704/texmf-dist/tex/context/base/luat-ini.mkiv0000644000175000017500000002155512130411274024306 0ustar norbertnorbert%D \module %D [ file=luat-ini, %D version=2005.08.11, %D title=\CONTEXT\ Lua Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Lua Macros / Initialization} \unprotect %D Loading lua code can be done using \type {startup.lua}. The following %D method uses the \TEX\ input file locator of kpse. At least we need to %D use that way of loading when we haven't yet define our own code, which %D we keep outside the format. We will keep code outside \TEX\ files as %D much as possible. \ifdefined\setnaturalcatcodes \else \let\setnaturalcatcodes\relax \fi \ifdefined\obeylualines \else \let\obeylualines \relax \fi \ifdefined\obeyluatokens \else \let\obeyluatokens \relax \fi %D A few more goodies: \let\stoplua \relax % tex catcodes \let\stopluacode\relax % lua catcodes % It might makes sense to have a \type {\directelua} so that we can avoid % the \type {\normalexpanded} around \type {\directlua}. Something to discuss % in the team. \unexpanded\def\startlua % \stoplua {\begingroup \obeylualines \luat_start_lua_indeed} \def\luat_start_lua_indeed#1\stoplua {\normalexpanded{\endgroup\noexpand\directlua{#1}}} % \zerocount is default \unexpanded\def\startluacode % \stopluacode {\begingroup \obeylualines \obeyluatokens \luat_start_lua_code_indeed} \def\luat_start_lua_code_indeed#1\stopluacode {\normalexpanded{\endgroup\noexpand\directlua{#1}}} % \zerocount is default %D Some delayed definitions: \ifdefined\obeylines \else \let\obeylines \relax \fi \ifdefined\obeyedline \else \let\obeyedline \relax \fi \ifdefined\obeyspaces \else \let\obeyspaces \relax \fi \ifdefined\obeyedspace \else \let\obeyedspace \relax \fi \let\obeylualines\relax \newtoks\everyluacode \edef\lua_letter_backslash{\string\\} \edef\lua_letter_bar {\string\|} \edef\lua_letter_dash {\string\-} \edef\lua_letter_lparent {\string\(} \edef\lua_letter_rparent {\string\)} \edef\lua_letter_lbrace {\string\{} \edef\lua_letter_rbrace {\string\}} \edef\lua_letter_squote {\string\'} \edef\lua_letter_dquote {\string\"} \edef\lua_letter_n {\string\n} \edef\lua_letter_r {\string\r} \edef\lua_letter_f {\string\f} \edef\lua_letter_t {\string\t} \edef\lua_letter_a {\string\a} \edef\lua_letter_b {\string\b} \edef\lua_letter_v {\string\v} \edef\lua_letter_s {\string\s} \edef\lua_letter_one {\string\1} \edef\lua_letter_two {\string\2} \edef\lua_letter_three {\string\3} \edef\lua_letter_four {\string\4} \edef\lua_letter_five {\string\5} \edef\lua_letter_six {\string\6} \edef\lua_letter_seven {\string\7} \edef\lua_letter_eight {\string\8} \edef\lua_letter_nine {\string\9} \edef\lua_letter_zero {\string\0} \appendtoks \let\\\lua_letter_backslash \let\|\lua_letter_bar \let\-\lua_letter_dash \let\(\lua_letter_lparent \let\)\lua_letter_rparent \let\{\lua_letter_lbrace \let\}\lua_letter_rbrace \let\'\lua_letter_squote \let\"\lua_letter_dquote \let\n\lua_letter_n \let\r\lua_letter_r \let\f\lua_letter_f \let\t\lua_letter_t \let\a\lua_letter_a \let\b\lua_letter_b \let\v\lua_letter_v \let\s\lua_letter_s \let\1\lua_letter_one \let\2\lua_letter_two \let\3\lua_letter_three \let\4\lua_letter_four \let\5\lua_letter_five \let\6\lua_letter_six \let\7\lua_letter_seven \let\8\lua_letter_eight \let\9\lua_letter_nine \let\0\lua_letter_zero \to \everyluacode \unexpanded\def\obeyluatokens {\setcatcodetable\luacatcodes \the\everyluacode} \edef\luamajorversion{\ctxwrite{_MINORVERSION}} \edef\luaminorversion{\ctxwrite{_MAJORVERSION}} %D \macros %D {definenamedlua} %D %D We provide an interface for defining instances: \def\s!lua{lua} \def\v!code{code} \def\!!name{name} \def\s!data{data} %D Beware: because \type {\expanded} is een convert command, the error %D message will show \type{} as part of the message. \installcorenamespace{luacode} \unexpanded\def\luat_start_named_lua_code#1% {\begingroup \obeylualines \obeyluatokens \csname\??luacode#1\endcsname} \unexpanded\def\definenamedlua[#1]#2[#3]% no optional arg handling here yet / we could use numbers instead (more efficient) {\ifcsname\??luacode#1\endcsname \else \scratchcounter\ctxlua{lua.registername("#1","#3")}% \normalexpanded{\xdef\csname\??luacode#1\endcsname##1\csname\e!stop#1\v!code\endcsname}% %{\endgroup\noexpand\directlua\the\scratchcounter{local _ENV=protect("#1\s!data")##1}}% {\noexpand\normalexpanded{\endgroup\noexpand\directlua\the\scratchcounter{local _ENV=protect("#1\s!data")##1}}}% \expandafter\edef\csname\e!start#1\v!code\endcsname {\luat_start_named_lua_code{#1}}% \expandafter\edef\csname #1\v!code\endcsname##1{\noexpand\directlua\the\scratchcounter{local _ENV=protect("#1\s!data")##1}}% \fi} %D We predefine a few. % \definenamedlua[module][module instance] % not needed \definenamedlua[user] [private user instance] \definenamedlua[third] [third party module instance] \definenamedlua[isolated][isolated instance] %D In practice this works out as follows: %D %D \startbuffer %D \startluacode %D context("LUA") %D \stopluacode %D %D \startusercode %D global.context("USER 1") %D context.par() %D context("USER 2") %D context.par() %D if characters then %D context("ACCESS directly") %D elseif global.characters then %D context("ACCESS via global") %D else %D context("NO ACCESS at all") %D end %D context.par() %D if bogus then %D context("ACCESS directly") %D elseif global.bogus then %D context("ACCESS via global") %D else %D context("NO ACCESS at all") %D end %D context.par() %D \stopusercode %D \stopbuffer %D %D \typebuffer %D We need a way to pass strings safely to \LUA\ without the %D need for tricky escaping. Compare: %D %D \starttyping %D \ctxlua {something("anything tricky can go here")} %D \ctxlua {something([\luastringsep[anything tricky can go here]\luastringsep])} %D \stoptyping \def\luastringsep{===} % this permits \typefile{self} otherwise nested b/e sep problems \edef\!!bs{[\luastringsep[} \edef\!!es{]\luastringsep]} %D We have a the following available as primitive so there is no need %D for it: %D %D \starttyping %D \long\edef\luaescapestring#1{\!!bs#1\!!es} %D \stoptyping \def\setdocumentfilename #1#2{\ctxlua{document.setfilename(#1,"#2")}} \def\setdocumentargument #1#2{\ctxlua{document.setargument("#1","#2")}} \def\setdocumentargumentdefault#1#2{\ctxlua{document.setdefaultargument("#1","#2")}} \def\getdocumentfilename #1{\ctxlua{document.getfilename("#1")}} \def\getdocumentargument #1{\ctxlua{document.getargument("#1")}} \def\getdocumentargumentdefault#1#2{\ctxlua{document.getargument("#1","#2")}} \def\doifdocumentargumentelse #1{\doifsomethingelse{\getdocumentargument{#1}}} \def\doifdocumentargument #1{\doifsomething {\getdocumentargument{#1}}} \def\doifnotdocumentargument #1{\doifnothing {\getdocumentargument{#1}}} \def\doifdocumentfilenameelse #1{\doifsomethingelse{\getdocumentfilename{#1}}} \def\doifdocumentfilename #1{\doifsomething {\getdocumentfilename{#1}}} \def\doifnotdocumentfilename #1{\doifnothing {\getdocumentfilename{#1}}} \let\doifelsedocumentargument\doifdocumentargumentelse %D A handy helper: \def\luaexpanded#1{\luaescapestring\expandafter{\normalexpanded{#1}}} %D Experimental: \unexpanded\def\startluaparameterset[#1]% {\begingroup \obeylualines \obeyluatokens \luat_start_lua_parameter_set{#1}} \def\luat_start_lua_parameter_set#1#2\stopluaparameterset {\ctxlua{parametersets["#1"]={#2}}% \endgroup} \let\stopluaparameterset\relax \def\luaparameterset#1#2{\ctxlua{parametersets["#1"]={#2} context("#1")}} % todo: \mergeparameterset % usage: % % \startluaparameterset [u3d:myset:display:1] % toolbar=false, % tree=true % \stopluaparameterset % % option=u3d:myset:display:1 % % or: % % option=\luaparameterset{u3d:myset:display:1}{toolbar=false,tree=true} %D A Handy helper: \def\luaconditional#1{\ifcase#1tru\else fals\fi e} %D Goodie: %D %D \starttyping %D \ctxluacode{context("%0.5f",1/3)} %D \stoptyping \unexpanded\def\ctxluacode {\begingroup \obeylualines \obeyluatokens \catcode\leftbraceasciicode \plusone \catcode\rightbraceasciicode\plustwo \afterassignment\luat_lua_code \scratchtoks=} % Hm, are we sure that the \* commands work out okay here? We could probably % use \setcatcodetable\luacatcodes instead of \obeyluatokens now. \def\luat_lua_code {\normalexpanded{\endgroup\noexpand\directlua\expandafter{\the\scratchtoks}}} % \zerocount is default \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-chemml.mkiv0000644000175000017500000001637412130411274024301 0ustar norbertnorbert%D \module %D [ file=x-cml, %D version=2007.09.03, % reimplementation %D title=\CONTEXT\ XML Modules, %D subtitle=MkIV ChemML renderer, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % This needs an update! \writestatus{loading}{ConTeXt XML Macros / Chemistry} \registerctxluafile{x-chemml}{} \def\ctxmodulechemml#1{\ctxlua{moduledata.chemml.#1}} %D The following code assumes a load||flush approach to \XML. \unprotect \startxmlsetups xml:cml:process \xmlstrip {#1} {cml:chem|cml:ichem|cml:dchem|cml:reaction|cml:molecule|cml:ion|cml:structure} \xmlgrab {#1} {cml:*} {cml:*} \xmlgrab {#1} {cml:gives|cml:equilibrium|cml:mesomeric} {cml:arrow} \xmlgrab {#1} {cml:plus|cml:minus|cml:equal} {cml:operator} \xmlgrab {#1} {cml:bond|cml:singlebond|cml:doublebound|cml:triplebond} {cml:bond} \xmlgrab {#1} {pi::chemml} {cml:pi} \stopxmlsetups \xmlregistersetup{xml:cml:process} \xmlregisterns{cml}{chemml} \unexpanded\def\setupCMLappearance[#1]{\dodoubleargument\getparameters[@@CML#1]} % old stuff \setupCMLappearance [ion] [\c!alternative=\v!a] \def\doifelseCMLvariable#1#2#3% id key value {\doifelse{\xmlatt{#1}{#2}}{#3} \firstoftwoarguments {\doifelse{\getvalue{@@CML\xmltag{#1}#2}}{#3} \firstoftwoarguments \secondoftwoarguments}} \startxmlsetups cml:pi \ctxmodulechemml{pi(#1)} \stopxmlsetups \startxmlsetups cml:chem \automathematics{\xmlflush{#1}} \stopxmlsetups \startxmlsetups cml:ichem \inlinemathematics{\xmlflush{#1}} \stopxmlsetups \startxmlsetups cml:dchem \displaymathematics{\xmlflush{#1}} \stopxmlsetups \startxmlsetups cml:reaction \xmlflush{#1} \stopxmlsetups \unexpanded\def\doCMLtext#1#2#3% main top bot {\setbox0\hbox{\doifsomething{#2}{\txx\setstrut\strut\ignorespaces#2\unskip}}% \setbox2\hbox{\ignorespaces\strut#1\unskip}% \setbox4\hbox{\doifsomething{#3}{\txx\setstrut\strut\ignorespaces#3\unskip}}% \scratchdimen=\wd2\advance\scratchdimen-.5em \ifdim\wd0>\scratchdimen \setbox0\hbox spread .5em{\hss\box0\hss}% \fi \ifdim\wd4>\scratchdimen \setbox4\hbox spread .5em{\hss\box4\hss}% \fi \setbox6=\vbox {\offinterlineskip\halign{\hss##\hss\cr\copy0\cr\copy2\cr\copy4\cr}}% \hbox{\lower\ht4\hbox{\lower\dp2\box6}}} \def\doCMLamount#1% {\scratchcounter0\xmlatt{#1}{n}\relax \ifnum\scratchcounter>0 \number\scratchcounter \fi} \startxmlsetups cml:molecule \doCMLtext {\doCMLamount{#1} \xmlall{#1}{cml:atom|cml:bond|cml:singlebond|cml:doublebond|cml:triplebond}} {\xmlindex{#1}{cml:caption}{2}} {\xmlindex{#1}{cml:caption}{1}} \stopxmlsetups \startxmlsetups cml:atom \doCMLtext { \lohi { $\tfxx\xmlatt{#1}{protons}$ } { $\tfxx\xmlatt{#1}{weight}$ } \xmlflush{#1} \lohi { $\tfxx\xmlatt{#1}{n}$ } { $\tfxx\xmlatt{#1}{charge}$% } } {\xmlindex{#1}{cml:caption}{2}} {\xmlindex{#1}{cml:caption}{1}} \stopxmlsetups \startxmlsetups cml:ion \doifelseCMLvariable{#1}{alternative}{b} { \left[ \doCMLtext {\doCMLamount{#1} \xmlall{#1}{cml:atom}} {\xmlindex{#1}{cml:caption}{2}} {\xmlindex{#1}{cml:caption}{1}} \right] } { \doCMLtext {\doCMLamount{#1} \xmlall{#1}{cml:atom}} {\xmlindex{#1}{cml:caption}{2}} {\xmlindex{#1}{cml:caption}{1}} } \high {\xmlatt{#1}{charge}} \stopxmlsetups \def\doCMLgives {\xrightarrow} \def\doCMLequilibrium{\xleftrightarrow} \def\doCMLmesomeric {\xrightoverleftarrow} \def\doCMLplus {+} \def\doCMLminus {-} \def\doCMLequal {=} \startxmlsetups cml:arrow \quad \executeifdefined{doCML\xmlname{#1}}\doCMLgives{\tf\xmlindex{#1}{cml:caption}{2}}{\tf\xmlindex{#1}{cml:caption}{1}} \quad \stopxmlsetups \startxmlsetups cml:operator \quad \mathop{\executeifdefined{doCML\xmlname{#1}}\doCMLplus} \quad \stopxmlsetups \startxmlsetups cml:bond \executeifdefined{doCML\xmlname{#1}} { \ifcase0\xmlatt{#1}{n}\relax \doCMLsinglebond \or \doCMLdoublebond \or \doCMLtriplebond \fi } \stopxmlsetups \def\doCMLbond {\hrule\s!width\hsize\s!height.1ex\relax} \def\dodoCMLbond#1#2#3% {\begingroup \setbox\scratchbox\hbox{$M$}% \vbox to \ht\scratchbox {\hsize\wd\scratchbox \vskip.1\wd\scratchbox #1\vfill#2\vfill#3% \vskip.1\wd\scratchbox}% \endgroup} \def\doCMLsinglebond{\dodoCMLbond\relax \doCMLbond\relax } \def\doCMLdoublebond{\dodoCMLbond\doCMLbond\relax \doCMLbond} \def\doCMLtriplebond{\dodoCMLbond\doCMLbond\doCMLbond\doCMLbond} \startxmlsetups cml:structure \startchemical \xmlall{#1}{cml:component} \stopchemical \stopxmlsetups % It makes not much sense to adapt ppchtex to accept different input. Maybe some day. \startxmlsetups cml:component \expanded { \chemical [\ctxmodulechemml{do_graphic("#1")}] [\ctxmodulechemml{no_graphic("#1")}] } \stopxmlsetups \unexpanded\def\doCMLannotation#1% #2#3% loc caption text {\xmlval{cml:a:l}{#1}{\chemicalright}}% {#2}{#3}} \xmlmapvalue {cml:a:l} {t} {\chemicaltop} \xmlmapvalue {cml:a:l} {b} {\chemicalbottom} \xmlmapvalue {cml:a:l} {l} {\chemicalleft} \xmlmapvalue {cml:a:l} {r} {\chemicalright} \xmlmapvalue {cml:a:l} {lc} {\chemicalleftcentered} % \xmlmapvalue {cml:a:l} {cl} {\chemicalleftcentered} \xmlmapvalue {cml:a:l} {rc} {\chemicalrightcentered} % \xmlmapvalue {cml:a:l} {cr} {\chemicalrightcentered} \xmlmapvalue {cml:a:l} {tl} {\chemicaltopleft} % \xmlmapvalue {cml:a:l} {lt} {\chemicaltopleft} \xmlmapvalue {cml:a:l} {bl} {\chemicalbottomleft} % \xmlmapvalue {cml:a:l} {lb} {\chemicalbottomleft} \xmlmapvalue {cml:a:l} {tr} {\chemicaltopright} % \xmlmapvalue {cml:a:l} {rt} {\chemicaltopright} \xmlmapvalue {cml:a:l} {br} {\chemicalbottomright} % \xmlmapvalue {cml:a:l} {rb} {\chemicalbottomright} \xmlmapvalue {cml:a:l} {lt} {\chemicallefttop} % \xmlmapvalue {cml:a:l} {tl} {\chemicallefttop} \xmlmapvalue {cml:a:l} {lb} {\chemicalleftbottom} % \xmlmapvalue {cml:a:l} {bl} {\chemicalleftbottom} \xmlmapvalue {cml:a:l} {rt} {\chemicalrighttop} % \xmlmapvalue {cml:a:l} {tr} {\chemicalrighttop} \xmlmapvalue {cml:a:l} {rb} {\chemicalrightbottom} % \xmlmapvalue {cml:a:l} {br} {\chemicalrightbottom} \xmlmapvalue {cml:a:l} {x} {\chemicaltighttext} \xmlmapvalue {cml:a:l} {sl} {\chemicalsmashedleft} % \xmlmapvalue {cml:a:l} {ls} {\chemicalsmashedleft} \xmlmapvalue {cml:a:l} {sm} {\chemicalsmashedmiddle} % \xmlmapvalue {cml:a:l} {ms} {\chemicalsmashedmiddle} \xmlmapvalue {cml:a:l} {sr} {\chemicalsmashedright} % \xmlmapvalue {cml:a:l} {rs} {\chemicalsmashedright} \startxmlsetups cml:forever \left[\xmlflush{#1}\right] \stopxmlsetups % \starttext % \xmlprocess{main}{cmltest.xml}{xml:process} % \stoptext \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/node-tra.lua0000644000175000017500000003526612130411274024114 0ustar norbertnorbertif not modules then modules = { } end modules ['node-tra'] = { version = 1.001, comment = "companion to node-ini.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } --[[ldx--

    This is rather experimental. We need more control and some of this might become a runtime module instead. This module will be cleaned up!

    --ldx]]-- local utfchar = utf.char local format, match, gmatch, concat, rep = string.format, string.match, string.gmatch, table.concat, string.rep local lpegmatch = lpeg.match local clock = os.gettimeofday or os.clock -- should go in environment local report_nodes = logs.reporter("nodes","tracing") nodes = nodes or { } local nodes, node, context = nodes, node, context local tracers = nodes.tracers or { } nodes.tracers = tracers local tasks = nodes.tasks or { } nodes.tasks = tasks local handlers = nodes.handlers or {} nodes.handlers = handlers local injections = nodes.injections or { } nodes.injections = injections local traverse_nodes = node.traverse local traverse_by_id = node.traverse_id local count_nodes = nodes.count local nodecodes = nodes.nodecodes local whatcodes = nodes.whatcodes local skipcodes = nodes.skipcodes local fillcodes = nodes.fillcodes local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local disc_code = nodecodes.disc local glue_code = nodecodes.glue local kern_code = nodecodes.kern local rule_code = nodecodes.rule local whatsit_code = nodecodes.whatsit local spec_code = nodecodes.glue_spec local localpar_code = whatcodes.localpar local dir_code = whatcodes.dir local nodepool = nodes.pool local dimenfactors = number.dimenfactors local formatters = string.formatters -- this will be reorganized: function nodes.showlist(head, message) if message then report_nodes(message) end for n in traverse_nodes(head) do report_nodes(tostring(n)) end end function nodes.handlers.checkglyphs(head,message) local t = { } for g in traverse_by_id(glyph_code,head) do t[#t+1] = formatters["%U:%s"](g.char,g.subtype) end if #t > 0 then if message and message ~= "" then report_nodes("%s, %s glyphs: % t",message,#t,t) else report_nodes("%s glyphs: % t",#t,t) end end return false end function nodes.handlers.checkforleaks(sparse) local l = { } local q = node.usedlist() for p in traverse(q) do local s = table.serialize(nodes.astable(p,sparse),nodecodes[p.id]) l[s] = (l[s] or 0) + 1 end node.flush_list(q) for k, v in next, l do write_nl(formatters["%s * %s"](v,k)) end end local f_sequence = formatters["U+%04X:%s"] local function tosequence(start,stop,compact) if start then local t = { } while start do local id = start.id if id == glyph_code then local c = start.char if compact then if start.components then t[#t+1] = tosequence(start.components,nil,compact) else t[#t+1] = utfchar(c) end else t[#t+1] = f_sequence(c,utfchar(c)) end elseif id == whatsit_code and start.subtype == localpar_code or start.subtype == dir_code then t[#t+1] = "[" .. start.dir .. "]" elseif id == rule_code then if compact then t[#t+1] = "|" else t[#t+1] = nodecodes[id] end else if compact then t[#t+1] = "[]" else t[#t+1] = nodecodes[id] end end if start == stop then break else start = start.next end end if compact then return concat(t) else return concat(t," ") end else return "[empty]" end end nodes.tosequence = tosequence function nodes.report(t,done) report_nodes("output %a, %changed %a, %s nodes",status.output_active,done,count_nodes(t)) end function nodes.packlist(head) local t = { } for n in traverse(head) do t[#t+1] = tostring(n) end return t end function nodes.idstostring(head,tail) local t, last_id, last_n = { }, nil, 0 for n in traverse_nodes(head,tail) do -- hm, does not stop at tail local id = n.id if not last_id then last_id, last_n = id, 1 elseif last_id == id then last_n = last_n + 1 else if last_n > 1 then t[#t+1] = formatters["[%s*%s]"](last_n,nodecodes[last_id] or "?") else t[#t+1] = formatters["[%s]"](nodecodes[last_id] or "?") end last_id, last_n = id, 1 end if n == tail then break end end if not last_id then t[#t+1] = "no nodes" elseif last_n > 1 then t[#t+1] = formatters["[%s*%s]"](last_n,nodecodes[last_id] or "?") else t[#t+1] = formatters["[%s]"](nodecodes[last_id] or "?") end return concat(t," ") end -- function nodes.xidstostring(head,tail) -- only for special tracing of backlinks -- local n = head -- while n.next do -- n = n.next -- end -- local t, last_id, last_n = { }, nil, 0 -- while n do -- local id = n.id -- if not last_id then -- last_id, last_n = id, 1 -- elseif last_id == id then -- last_n = last_n + 1 -- else -- if last_n > 1 then -- t[#t+1] = formatters["[%s*%s]"](last_n,nodecodes[last_id] or "?") -- else -- t[#t+1] = formatters["[%s]"](nodecodes[last_id] or "?") -- end -- last_id, last_n = id, 1 -- end -- if n == head then -- break -- end -- n = n.prev -- end -- if not last_id then -- t[#t+1] = "no nodes" -- elseif last_n > 1 then -- t[#t+1] = formatters["[%s*%s]"](last_n,nodecodes[last_id] or "?") -- else -- t[#t+1] = formatters["[%s]"](nodecodes[last_id] or "?") -- end -- return table.concat(table.reversed(t)," ") -- end local function showsimplelist(h,depth,n) while h do write_nl(rep(" ",n) .. tostring(h)) if not depth or n < depth then local id = h.id if id == hlist_code or id == vlist_code then showsimplelist(h.list,depth,n+1) end end h = h.next end end --~ \startluacode --~ callback.register('buildpage_filter',function() nodes.show_simple_list(tex.lists.contrib_head) end) --~ \stopluacode --~ \vbox{b\footnote{n}a} --~ \startluacode --~ callback.register('buildpage_filter',nil) --~ \stopluacode nodes.showsimplelist = function(h,depth) showsimplelist(h,depth,0) end local function listtoutf(h,joiner,textonly,last) local joiner = (joiner == true and utfchar(0x200C)) or joiner -- zwnj local w = { } while h do local id = h.id if id == glyph_code then -- always true w[#w+1] = utfchar(h.char) if joiner then w[#w+1] = joiner end elseif id == disc_code then local pre, rep, pos = h.pre, h.replace, h.post w[#w+1] = formatters["[%s|%s|%s]"] ( pre and listtoutf(pre,joiner,textonly) or "", rep and listtoutf(rep,joiner,textonly) or "", mid and listtoutf(mid,joiner,textonly) or "" ) elseif textonly then if id == glue_code and h.spec and h.spec.width > 0 then w[#w+1] = " " end else w[#w+1] = "[-]" end if h == last then break else h = h.next end end return concat(w) end nodes.listtoutf = listtoutf local what = { [0] = "unknown", "line", "box", "indent", "row", "cell" } local function showboxes(n,symbol,depth) depth, symbol = depth or 0, symbol or "." for n in traverse_nodes(n) do local id = n.id if id == hlist_code or id == vlist_code then local s = n.subtype report_nodes(rep(symbol,depth) .. what[s] or s) showboxes(n.list,symbol,depth+1) end end end nodes.showboxes = showboxes local ptfactor = dimenfactors.pt local bpfactor = dimenfactors.bp local stripper = lpeg.patterns.stripzeros -- start redefinition -- -- -- if fmt then -- -- return formatters[fmt](n*dimenfactors[unit],unit) -- -- else -- -- return match(formatters["%.20f"](n*dimenfactors[unit]),"(.-0?)0*$") .. unit -- -- end -- -- redefined: local dimenfactors = number.dimenfactors local function numbertodimen(d,unit,fmt,strip) if not d then local str = formatters[fmt](0,unit) return strip and lpegmatch(stripper,str) or str end local t = type(d) if t == 'string' then return d end if unit == true then unit = "pt" fmt = "%0.5f%s" else unit = unit or 'pt' if not fmt then fmt = "%s%s" elseif fmt == true then fmt = "%0.5f%s" end end if t == "number" then local str = formatters[fmt](d*dimenfactors[unit],unit) return strip and lpegmatch(stripper,str) or str end local id = node.id if id == kern_code then local str = formatters[fmt](d.width*dimenfactors[unit],unit) return strip and lpegmatch(stripper,str) or str end if id == glue_code then d = d.spec end if not d or not d.id == spec_code then local str = formatters[fmt](0,unit) return strip and lpegmatch(stripper,str) or str end local width = d.width local plus = d.stretch_order local minus = d.shrink_order local stretch = d.stretch local shrink = d.shrink if plus ~= 0 then plus = " plus " .. stretch/65536 .. fillcodes[plus] elseif stretch ~= 0 then plus = formatters[fmt](stretch*dimenfactors[unit],unit) plus = " plus " .. (strip and lpegmatch(stripper,plus) or plus) else plus = "" end if minus ~= 0 then minus = " minus " .. shrink/65536 .. fillcodes[minus] elseif shrink ~= 0 then minus = formatters[fmt](shrink*dimenfactors[unit],unit) minus = " minus " .. (strip and lpegmatch(stripper,minus) or minus) else minus = "" end local str = formatters[fmt](d.width*dimenfactors[unit],unit) return (strip and lpegmatch(stripper,str) or str) .. plus .. minus end number.todimen = numbertodimen function number.topoints (n,fmt) return numbertodimen(n,"pt",fmt) end function number.toinches (n,fmt) return numbertodimen(n,"in",fmt) end function number.tocentimeters (n,fmt) return numbertodimen(n,"cm",fmt) end function number.tomillimeters (n,fmt) return numbertodimen(n,"mm",fmt) end function number.toscaledpoints(n,fmt) return numbertodimen(n,"sp",fmt) end function number.toscaledpoints(n) return n .. "sp" end function number.tobasepoints (n,fmt) return numbertodimen(n,"bp",fmt) end function number.topicas (n,fmt) return numbertodimen(n "pc",fmt) end function number.todidots (n,fmt) return numbertodimen(n,"dd",fmt) end function number.tociceros (n,fmt) return numbertodimen(n,"cc",fmt) end function number.tonewdidots (n,fmt) return numbertodimen(n,"nd",fmt) end function number.tonewciceros (n,fmt) return numbertodimen(n,"nc",fmt) end -- stop redefinition local points = function(n) if not n or n == 0 then return "0pt" elseif type(n) == "number" then return lpegmatch(stripper,format("%.5fpt",n*ptfactor)) -- faster than formatter else return numbertodimen(n,"pt",true,true) -- also deals with nodes end end local basepoints = function(n) if not n or n == 0 then return "0bp" elseif type(n) == "number" then return lpegmatch(stripper,format("%.5fbp",n*bpfactor)) -- faster than formatter else return numbertodimen(n,"bp",true,true) -- also deals with nodes end end local pts = function(n) if not n or n == 0 then return "0pt" elseif type(n) == "number" then return format("%.5fpt",n*ptfactor) -- faster than formatter else return numbertodimen(n,"pt",true) -- also deals with nodes end end local nopts = function(n) if not n or n == 0 then return "0" else return format("%.5f",n*ptfactor) -- faster than formatter end end number.points = points number.basepoints = basepoints number.pts = pts number.nopts = nopts local colors = { } tracers.colors = colors local unsetvalue = attributes.unsetvalue local a_color = attributes.private('color') local a_colormodel = attributes.private('colormodel') local m_color = attributes.list[a_color] or { } function colors.set(n,c,s) local mc = m_color[c] if not mc then n[a_color] = unsetvalue else if not n[a_colormodel] then n[a_colormodel] = s or 1 end n[a_color] = mc end return n end function colors.setlist(n,c,s) local f = n while n do local mc = m_color[c] if not mc then n[a_color] = unsetvalue else if not n[a_colormodel] then n[a_colormodel] = s or 1 end n[a_color] = mc end n = n.next end return f end function colors.reset(n) n[a_color] = unsetvalue return n end -- maybe local transparencies = { } tracers.transparencies = transparencies local a_transparency = attributes.private('transparency') local m_transparency = attributes.list[a_transparency] or { } function transparencies.set(n,t) local mt = m_transparency[t] if not mt then n[a_transparency] = unsetvalue else n[a_transparency] = mt end return n end function transparencies.setlist(n,c,s) local f = n while n do local mt = m_transparency[c] if not mt then n[a_transparency] = unsetvalue else n[a_transparency] = mt end n = n.next end return f end function transparencies.reset(n) n[a_transparency] = unsetvalue return n end -- for the moment here nodes.visualizers = { } function nodes.visualizers.handler(head) return head, false end context-2013.05.28.20130704/texmf-dist/tex/context/base/typo-bld.mkiv0000644000175000017500000000350712130411274024313 0ustar norbertnorbert%D \module %D [ file=typo-bld, % was node-par, %D version=2008.09.30, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Paragraph Building, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Node Macros / Paragraph Building} %D This is very experimental, undocumented, subjected to changes, etc. just as %D the underlying interfaces. But at least it's cleaned as part of the status-mkiv %D cleanup. % \startparbuilder[default] % \input tufte \par % \startparbuilder[oneline] % \input tufte \par % \stopparbuilder % \input tufte \par % \stopparbuilder % % \startparbuilder[oneline] % \dorecurse{100}{\input ward \par} % \stopparbuilder \unprotect \registerctxluafile{typo-bld}{1.001} \definesystemattribute[parbuilder][public] \installcorenamespace {parbuilder} \unexpanded\def\defineparbuilder[#1]% {\ctxcommand{defineparbuilder("#1")}} \unexpanded\def\startparbuilder[#1]% {\ifhmode\par\fi \ctxcommand{startparbuilder("#1")}} \unexpanded\def\stopparbuilder {\ifhmode\par\fi \ctxcommand{stopparbuilder()}} \unexpanded\def\setmainparbuilder[#1]% {\ctxcommand{setparbuilder("#1")}} % no high level interface, after all implementing a linebreaker is not something that % the average user will do \defineparbuilder[default] % just for testing \defineparbuilder[oneline] % just for testing \defineparbuilder[basic] % just for testing \def\enableparbuilders {\ctxcommand{enableparbuilder()}} % hooks in otr so we need to pickup \def\disableparbuilders{\ctxcommand{disableparbuilder()}} % hooks in otr so we need to pickup \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-blk.mkii0000644000175000017500000003605611754241457024311 0ustar norbertnorbert%D \module %D [ file=strc-blk, % split off core-buf.tex %D version=2000.01.05, %D title=\CONTEXT\ Structure Macros, %D subtitle=Blockmoves, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % investigate etex's \readline and \scantokens \writestatus{loading}{ConTeXt Structure Macros / Blockmoves} \unprotect \def\blockversion {1996.03.10} \def\@@blockerrormessage {\showmessage\m!textblocks1\empty \global\let\@@blockerrormessage\relax} \def\thisisblockversion#1% {\doifnot\blockversion{#1}{\@@blockerrormessage\endinput}} \def\stopcopyingblocks {\ifcopyingblocks \immediate\closeout\outblocks \copyblockfile \global\copyingblocksfalse \fi} \def\dodosetblockcounters[#1]#2% {\expanded{\setvalue{\??se\s!old#2}{\@@filterheadpart[#1]}}% \doifnot{#2}\lastsection {\expanded{\dodosetblockcounters[\@@filtertailpart[#1]]}% {\getvalue{\??se#2\c!after}}}} % ???? \def\dosetblockcounters[#1]% {\ifblockpermitted \expanded{\dodosetblockcounters[\@@filtersecondpart[#1]]}\firstsection \expanded{\setsectiontype[\@@filterfirstpart[#1]]}% \def\@@sectionvalue##1{\getvalue{\??se\s!old##1}}% \let\@@sectionconversion\secondoftwoarguments \fi} \let\blockstatus\empty \def\setblockcounters {\ifx\blockstatus\empty \else \@EA\dosetblockcounters\@EA[\blockstatus]% \fi} \def\getblockstatus#1% {\dosetfilterlevel{\@@bscriterium}\empty \expanded{\doifblklevelelse[#1\sectionseparator\sectionseparator0]} {\global\blockpermittedtrue} {\global\blockpermittedfalse}% \def\blockstatus{#1}} \def\setupblockparameters {\dodoubleargument\dosetupblockparameters} \def\dosetupblockparameters[#1][#2]% {\getparameters[\??tb#1][#2]} \def\blockparameter#1#2% {\@EA\csname\ifcsname\??tb#1#2\endcsname\??tb#1#2\else\s!empty\fi\endcsname} \ifx\outblocks\undefined \newwrite\outblocks \fi \ifx\inpblocks\undefined \newread \inpblocks \fi \ifx\tmpblocks\undefined \newwrite\tmpblocks \fi \ifx\blockbox \undefined \newbox \blockbox \fi \newif\ifcopyingblocks \newif\ifblockpermitted \newif\iftmpblockstarted \newif\ifoldinbijlagen \newif\ifdoingblocks \newcount\blocklevel \def\setblocklevel#1% sign {\global\advance\blocklevel #11 \ifcase\blocklevel\doingblocksfalse\else\doingblockstrue\fi} \def\opentmpblock {\immediate\openout\tmpblocks\TEXbufferfile{\f!utilityfilename\the\blocklevel}} \def\closetmpblock {\immediate\write\tmpblocks{}% een lege regel is handig voor \par commando's \immediate\closeout\tmpblocks} \def\writetmpblock#1% {\iftmpblockstarted \immediate\write\tmpblocks{#1}% \else \doifsomething{#1} {\tmpblockstartedtrue \immediate\write\tmpblocks{\string#1}}% \fi} \def\startcopyingblocks {\global\copyingblocksfalse} \def\checkcopyingblocks {\ifcopyingblocks \else \immediate\openout\outblocks\f!utilityfilename.\f!blockextension% \immediate\write\outblocks{\string\thisisblockversion{\blockversion}}% \immediate\write\outblocks{\string\thisissectionseparator{\sectionseparator}}% \global\copyingblockstrue \fi} \def\stopcopyingblocks {\ifcopyingblocks \immediate\closeout\outblocks \copyblockfile \global\copyingblocksfalse \fi} \def\nomoreblocks {\stopcopyingblocks} \def\copyblockfile {\ifcopyingblocks \begingroup \showmessage\m!textblocks2{\jobname.\f!blockextension}% \openlocin\inpblocks{\f!utilityfilename.\f!blockextension}% \immediate\openout\outblocks\jobname.\f!blockextension \setupcopyblock \catcode`\^^M=\@@ignore\relax \def\copynextline {\read\inpblocks to \!!stringa \immediate\write\outblocks{\!!stringa}% \ifeof\inpblocks\else\expandafter\copynextline\fi}% \copynextline \immediate\closein\inpblocks \immediate\closeout\outblocks \immediate\openout\tmpblocks\f!utilityfilename.\f!blockextension \immediate\closeout\tmpblocks \endgroup \fi} \def\loadallblocks#1% {\beginrestorecatcodes \catcode`\^^M=\@@endofline\relax \readjobfile{#1.\f!blockextension} {\showmessage\m!textblocks3{#1.\f!blockextension}} {\showmessage\m!textblocks4\empty}% \endrestorecatcodes} \def\setupcopyblock {\setcatcodetable\vrbcatcodes \obeylines} \def\writeoutblocks {\immediate\write\outblocks} \long\def\processnextblocklineAB#1% #2#3% {\defconvertedargument\next{#1 }% \doifinstringelse\endofblockA\next \firstoftwoarguments {\doifinstringelse\endofblockB\next \firstoftwoarguments\secondoftwoarguments}} \bgroup \obeylines \long\gdef\copyblocklineAB#1 {\processnextblocklineAB{#1}\closeblock{\writeoutblocks{#1}\writetmpblock{#1}\copyblocklineAB}} \long\gdef\skipblocklineAB#1 {\processnextblocklineAB{#1}\closeblock\skipblocklineAB} \egroup \long\def\processnextblockline#1% #2#3% {\defconvertedargument\next{#1 }% \ifx\next\emptybufferline \expandafter\secondoftwoarguments% #3% \else \emptybufferlinefalse \doifinstringelse\endofblock\next {\expandafter\firstoftwoarguments }% #2} {\expandafter\secondoftwoarguments}% #3}% \fi} \bgroup \obeylines \long\gdef\copyblockline#1 {\processnextblockline{#1}\closeblock{\writeoutblocks{#1}\writetmpblock{#1}\copyblockline}} \long\gdef\skipblockline#1 {\processnextblockline{#1}\closeblock\skipblockline} \egroup \def\skipblock#1% {\checkcopyingblocks \defconvertedcommand\endofblock{\string\thiswasblock{#1}}% command expands once ! \let\openblock\begingroup \let\closeblock\endgroup \openblock \setupcopyblock \skipblockline} \let\doafterblock \gobbletwoarguments \let\dobeforeblock\gobbletwoarguments \def\thisisblock#1% {\executeifdefined{\s!thisisblock#1}{\skipblock{#1}}} \def\thiswasblock#1% {\getvalue{\s!thiswasblock#1}} \def\saveblock#1#2% {\checkcopyingblocks \obeylines \@EA\defconvertedcommand\@EA\endofblockA\@EA{\@EA\string\csname\e!end#1\endcsname}% \defconvertedcommand\endofblockB{\string\endblock[#1]}% % MULTI LINGUAL MAKEN \def\openblock {\dobeforeblock{#1}{#2}% \opentmpblock \begingroup \makesectionformat \immediate\write\outblocks{}% \immediate\write\outblocks{\string\thisisblock{#1}{\sectionformat}[#2]}}% \def\closeblock {\immediate\write\outblocks{}% handig voor \par commando's \immediate\write\outblocks{\string\thiswasblock{#1}}% \endgroup \closetmpblock \doafterblock{#1}{#2}% \egroup}% \openblock \setupcopyblock \copyblocklineAB} \def\copyblock {\let\opentmpblock\empty \let\closetmpblock\empty \let\writetmpblock\gobbleoneargument \saveblock} \def\loadoneblock {\edef\blockfilename{\TEXbufferfile{\f!utilityfilename\the\blocklevel}}% \setblocklevel+% \readjobfile\blockfilename\donothing\donothing \setblocklevel-}% \def\dodefineblock[#1]% {\bypassblock[#1]% \keepblocks[#1]% \setupblock [#1] [\c!before=\blank, \c!after=\blank, \c!inner=, \c!style=, \c!file=\jobname]} % \def\defineblock % {\dosingleargumentwithset\dodefineblock} \def\defineblock {\dosingleargument\dodefineblock} \def\dosetupblock[#1][#2]% {\getparameters[\??tb#1][#2]} \def\setupblock {\dodoubleargumentwithset\dosetupblock} \def\bypassblock[#1]% {\setvalue{\s!thisisblock#1}##1[##2]{\skipblock{#1}}} \def\dohideblock[#1][#2][#3]% {\doifassignmentelse{#3} {\dodohideblock[#1][#2][][#3]} {\dodohideblock[#1][#2][#3][]}} \def\dodohideblock[#1][#2][#3][#4]% {\doifelsenothing{#2} {\global\blockpermittedfalse \edef\blocktitle{#1}} {\doifelsenothing{#3} {\global\blockpermittedtrue \edef\blocktitle{#1}} {\doifcommonelse{#2}{#3} {\global\blockpermittedfalse \edef\blocktitle{#1:#2}} {\global\blockpermittedtrue \edef\blocktitle{#1:#3}}}}% \ifblockpermitted \showwarning\m!textblocks5\blocktitle \def\next {\def\dobeforeblock####1####2% {\begingroup}% \def\doafterblock####1####2% {\endgroup \doexecuteloadedblock{#1}{#4}}% \saveblock{#1}{#3#4}}% \else \doifinsetelse{+}{#3} {\showwarning\m!textblocks6\blocktitle \def\next {\def\dobeforeblock####1####2% {\begingroup \visiblefalse}% \def\doafterblock####1####2% {{\setbox0\vbox {\catcode`\^^M=\@@endofline\relax \loadoneblock \par}}% \endgroup}% \saveblock{#1}{#3#4}}}% {\showwarning\m!textblocks7\blocktitle \def\next {\def\dobeforeblock####1####2% {\begingroup \globaldefs\minusone}% \def\doafterblock####1####2% {\endgroup}% \copyblock{#1}{#3#4}}}% \fi \next} \def\dohideblocks[#1][#2]% {\def\docommand##1% {\setvalue{\e!begin##1}% {\bgroup\obeylines\dotripleempty\dohideblock[##1][#2]}}% \processcommalist[#1]\docommand} \def\hideblocks {\dodoubleempty\dohideblocks} \def\doexecuteloadedblock#1#2% {\blockpermittedtrue % ? \bgroup % before \c!before (think of: \c!before=\startitemize) \dosetupblockparameters[#1][#2]% voor 'voor'? \getvalue{\??tb#1\c!before}% \dostartattributes{\??tb#1}\c!style\c!color\empty \visibletrue \catcode`\^^M=\@@endofline\relax \getvalue{\??tb#1\c!inner}% \ignorespaces \loadoneblock % \par moved \dostopattributes \getvalue{\??tb#1\c!after}% \par \egroup} \def\dokeepblock[#1][#2][#3]% {\doifassignmentelse{#3} {\dodokeepblock[#1][#2][][#3]} {\dodokeepblock[#1][#2][#3][]}} \def\dodokeepblock[#1][#2][#3][#4]% {\doifelsenothing{#2} {\global\blockpermittedtrue \edef\blocktitle{#1}} {\doifcommonelse{#2}{#3} {\global\blockpermittedtrue \edef\blocktitle{#1:#2}} {\doifinsetelse\v!all{#2} {\doifelsenothing{#3} {\global\blockpermittedtrue \edef\blocktitle{#1}} {\global\blockpermittedfalse \edef\blocktitle{#1:#3}}} {\global\blockpermittedfalse \doifelsenothing{#3} {\edef\blocktitle{#1}} {\edef\blocktitle{#1:#3}}}}}% \ifblockpermitted \showwarning\m!textblocks8\blocktitle \def\dobeforeblock##1##2% {\begingroup}% \def\doafterblock##1##2% {\endgroup \doexecuteloadedblock{#1}{#4}}% \else \showwarning\m!textblocks9\blocktitle \fi \saveblock{#1}{#3#4}} \def\dokeepblocks[#1][#2]% {\def\docommand##1% {\setvalue{\e!begin##1}% {\bgroup\obeylines\dotripleempty\dokeepblock[##1][#2]}}% \processcommalist[#1]\docommand} \def\keepblocks {\dodoubleempty\dokeepblocks} \newconditional\processblockstatus \newconditional\dummyblockstatus \newconditional\blockassignmentstatus \def\dodouseblock#1#2#3#4% {\getblockstatus{#2}% \ifblockpermitted \setfalse\dummyblockstatus \doifassignmentelse{#3} {\settrue \blockassignmentstatus} {\setfalse\blockassignmentstatus}% \doifelsenothing{#4} {\edef\blocktitle{#1}} {\ifconditional\blockassignmentstatus \edef\blocktitle{#1}% \else \doifnotcommon{#3}{#4} {\ifconditional\processblockstatus \settrue\dummyblockstatus \else \global\blockpermittedfalse \fi}% \edef\blocktitle{#1:#3}% \fi}% \else \edef\blocktitle{#1}% \fi \ifblockpermitted \setblocklevel+% \ifconditional\blockassignmentstatus \else \doifinset{-}{#3}{\settrue\dummyblockstatus}% \fi \ifconditional\dummyblockstatus \showwarning\m!textblocks{10}\blocktitle \setvalue{\s!thiswasblock#1}% {\removeunwantedspaces \par \egroup \setblocklevel-}% \def\next {\setbox0\vbox\bgroup \ifconditional\blockassignmentstatus \dosetupblockparameters[#1][#3]% \fi}% \else \showwarning\m!textblocks{11}\blocktitle \setvalue{\s!thiswasblock#1}% {\removeunwantedspaces % \par moved \dostopattributes \getvalue{\??tb#1\c!after}% \par \egroup \setblocklevel-}% \def\next {\bgroup \ifconditional\blockassignmentstatus \dosetupblockparameters[#1][#3]% \fi \getvalue{\??tb#1\c!before}% \dostartattributes{\??tb#1}\c!style\c!color\empty \visibletrue \getvalue{\??tb#1\c!inner}% \ignorespaces}% \fi \else \def\next {\showwarning\m!textblocks{12}\blocktitle \skipblock{#1}}% \fi \next} \def\douseblock[#1][#2]% {\setvalue{\s!thisisblock#1}##1[##2]{\dodouseblock{#1}{##1}{##2}{#2}}} \def\dodouseblocks[#1][#2]% {\def\docommand##1% {\douseblock[##1][#2]}% \processcommalist[#1]\docommand \dogetcommalistelement1\from#1\to\commalistelement \doifdefined{\??tb\commalistelement\c!file} {\loadallblocks{\getvalue{\??tb\commalistelement\c!file}}}% \endgroup} \def\douseblocks {\begingroup \doassign[\??bs][\c!criterium=\v!all]% \dodoubleempty\dodouseblocks} \def\useblocks {\setfalse\processblockstatus\douseblocks} \def\processblocks {\settrue \processblockstatus\douseblocks} \def\doselectblocks[#1][#2][#3]% {\begingroup \doifelsenothing{#3} {\getparameters[\??bs][\c!criterium=\v!all,#2]% \dodouseblocks[#1][]} {\getparameters[\??bs][\c!criterium=\v!all,#3]% \dodouseblocks[#1][#2]}}% \def\selectblocks {\dotripleempty\doselectblocks} \def\beginblock[#1]% % we also check \endblock[..] {\getvalue{\e!begin#1}} \def\forceblocks[#1]% {\def\docommand##1% {\setvalue{\e!begin##1}% {\setblocklevel+\bgroup \dodoubleempty\doforceblock[##1]}% \setvalue{\e!end##1}% {\dostopattributes \getvalue{\??tb##1\c!after}% \egroup\setblocklevel-}}% \processcommalist[#1]\docommand} \def\doforceblock[#1][#2]% {\doifassignmentelse{#2} {\settrue \blockassignmentstatus} {\setfalse\blockassignmentstatus}% \ifconditional\blockassignmentstatus \dosetupblockparameters[#1][#2]% \fi \getvalue{\??tb#1\c!before}% \dostartattributes{\??tb#1}\c!style\c!color\empty \getvalue{\??tb#1\c!inner}% \ignorespaces} \def\bypassblocks[#1]% {\def\docommand##1% {\setvalue{\e!begin##1}% {\setblocklevel+\bgroup \obeylines % here, since we look ahead \dodoubleempty\dobypassblock[##1]}%}% \setvalue{\e!end##1}% {}}% \processcommalist[#1]\docommand} \def\dobypassblock[#1][#2]% {\def\closeblock {\egroup\setblocklevel-}% \checkcopyingblocks \obeylines \@EA\defconvertedcommand\@EA\endofblockA\@EA{\@EA\string\csname\e!end#1\endcsname}% \defconvertedcommand\endofblockB{\string\endblock[#1]} % MULTI LINGUAL MAKEN \setupcopyblock \skipblocklineAB} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrn-ref.lua0000644000175000017500000000374012130411274024112 0ustar norbertnorbertif not modules then modules = { } end modules ['scrn-ref'] = { version = 1.001, comment = "companion to scrn-int.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } interactions = interactions or { } interactions.references = interactions.references or { } local references = interactions.references local codeinjections = backends.codeinjections local expandcurrent = structures.references.expandcurrent local identify = structures.references.identify local function check(what) if what and what ~= "" then local set, bug = identify("",what) return not bug and #set > 0 and set end end local function setopendocumentaction(open) local opendocument = check(open) if opendocument then codeinjections.registerdocumentopenaction(opendocument) expandcurrent() end end local function setclosedocumentaction(close) local closedocument = check(close) if closedocument then codeinjections.registerdocumentcloseaction(closedocument) expandcurrent() end end local function setopenpageaction(open) local openpage = check(open) if openpage then codeinjections.registerpageopenaction(openpage) expandcurrent() end end local function setclosepageaction(close) local closepage = check(close) if closepage then codeinjections.registerpagecloseaction(closepage) expandcurrent() end end references.setopendocument = setopendocumentaction references.setclosedocument = setclosedocumentaction references.setopenpage = setopenpageaction references.setclosepage = setclosepageaction commands.setopendocumentaction = setopendocumentaction commands.setclosedocumentaction = setclosedocumentaction commands.setopenpageaction = setopenpageaction commands.setclosepageaction = setclosepageaction context-2013.05.28.20130704/texmf-dist/tex/context/base/type-imp-mscore.mkiv0000644000175000017500000000650011754241457025626 0ustar norbertnorbert%D \module %D [ file=type-imp-mscore, %D version=2007.07.30, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Microsoft Core Fonts, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \starttypescriptcollection[mscore] % .ttf not really needed but we want to force the originals \starttypescript [\s!serif] [mscoretimes] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym [\s!Serif] [\s!file:times.ttf] [\s!features=\s!default] \definefontsynonym [\s!SerifBold] [\s!file:timesbd.ttf] [\s!features=\s!default] \definefontsynonym [\s!SerifItalic] [\s!file:timesi.ttf] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldItalic] [\s!file:timesbi.ttf] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [mscorearial] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:arial.ttf] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:arialbd.ttf] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:ariali.ttf] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:arialbi.ttf] [\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [mscorecourier] [\s!name] \setups[\s!font:\s!fallback:\s!mono] \definefontsynonym [\s!Mono] [\s!file:cour.ttf] [\s!features=\s!none] \definefontsynonym [\s!MonoBold] [\s!file:courbd.ttf] [\s!features=\s!none] \definefontsynonym [\s!MonoItalic] [\s!file:couri.ttf] [\s!features=\s!none] \definefontsynonym [\s!MonoBoldItalic] [\s!file:courbi.ttf] [\s!features=\s!none] \stoptypescript \starttypescript [\s!sans] [mscoreverdana] [\s!name] \setups[\s!font:\s!fallback:\s!sans] \definefontsynonym [\s!Sans] [\s!file:verdana.ttf] [\s!features=\s!default] \definefontsynonym [\s!SansBold] [\s!file:verdanab.ttf] [\s!features=\s!default] \definefontsynonym [\s!SansItalic] [\s!file:verdanai.ttf] [\s!features=\s!default] \definefontsynonym [\s!SansBoldItalic] [\s!file:verdanaz.ttf] [\s!features=\s!default] \stoptypescript \starttypescript[mscore] \definetypeface [mscore] [\s!rm] [\s!serif] [mscoretimes] [\s!default] \definetypeface [mscore] [\s!ss] [\s!sans] [mscorearial] [\s!default] [\s!rscale=0.860] \definetypeface [mscore] [\s!tt] [\s!mono] [mscorecourier] [\s!default] [\s!rscale=1.065] \definetypeface [mscore] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.020] \stoptypescript % \starttypescript[mscoress] % \definetypeface [mscoress] [\s!ss] [\s!sans] [mscorearial] [\s!default] % \definetypeface [mscoress] [\s!rm] [\s!serif] [mscoretimes] [\s!default] [rscale=1.160] % \definetypeface [mscoress] [\s!tt] [\s!mono] [mscorecourier] [\s!default] [rscale=1.240] % \definetypeface [mscoress] [\s!mm] [\s!math] [times] [\s!default] [rscale=1.185] % \stoptypescript \stoptypescriptcollection context-2013.05.28.20130704/texmf-dist/tex/context/base/l-pdfview.lua0000644000175000017500000000765412161703335024306 0ustar norbertnorbertif not modules then modules = { } end modules ['l-pdfview'] = { version = 1.001, comment = "companion to mtx-context.lua", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- Todo: figure out pdfopen/pdfclose on linux. Calling e.g. okular directly -- doesn't work in linux when issued from scite as it blocks the editor (no -- & possible or so). Unfortunately pdfopen keeps changing with not keeping -- downward compatibility (command line arguments and so). -- no 2>&1 any more, needs checking on windows local format, concat = string.format, table.concat pdfview = pdfview or { } local opencalls, closecalls, allcalls, runner -- this might become template based if os.type == "windows" then opencalls = { ['default'] = "pdfopen --rxi --file", ['acrobat'] = "pdfopen --rxi --file", ['fullacrobat'] = "pdfopen --axi --file", ['okular'] = 'start "test" "c:/data/system/kde/bin/okular.exe" --unique', -- todo! ['sumatra'] = 'start "test" "c:/data/system/sumatrapdf/sumatrapdf.exe" -reuse-instance', ['okular'] = 'start "test" "okular.exe" --unique', ['sumatra'] = 'start "test" "sumatrapdf.exe" -reuse-instance -bg-color 0xCCCCCC', } closecalls= { ['default'] = "pdfclose --file", ['acrobat'] = "pdfclose --file", ['okular'] = false, ['sumatra'] = false, } allcalls = { ['default'] = "pdfclose --all", ['acrobat'] = "pdfclose --all", ['okular'] = false, ['sumatra'] = false, } pdfview.method = "acrobat" -- no longer usefull due to green pop up line and clasing reader/full pdfview.method = "sumatra" runner = function(cmd) os.execute(cmd) -- .. " > /null" end else opencalls = { ['default'] = "pdfopen", -- we could pass the default here ['okular'] = 'okular --unique' } closecalls= { ['default'] = "pdfclose --file", ['okular'] = false, } allcalls = { ['default'] = "pdfclose --all", ['okular'] = false, } pdfview.method = "okular" runner = function(cmd) os.execute(cmd .. " 1>/dev/null 2>/dev/null &") end end directives.register("pdfview.method", function(v) pdfview.method = (opencalls[v] and v) or 'default' end) function pdfview.setmethod(method) if method and opencalls[method] then pdfview.method = method end end function pdfview.methods() return concat(table.sortedkeys(opencalls), " ") end function pdfview.status() return format("pdfview methods: %s, current method: %s (directives_pdfview_method)",pdfview.methods(),tostring(pdfview.method)) end -- local openedfiles = { } local function fullname(name) return file.addsuffix(name,"pdf") end function pdfview.open(...) local opencall = opencalls[pdfview.method] if opencall then local t = { ... } for i=1,#t do local name = fullname(t[i]) if io.exists(name) then runner(format('%s "%s"', opencall, name)) -- openedfiles[name] = true end end end end function pdfview.close(...) local closecall = closecalls[pdfview.method] if closecall then local t = { ... } for i=1,#t do local name = fullname(t[i]) -- if openedfiles[name] then runner(format('%s "%s"', closecall, name)) -- openedfiles[name] = nil -- else -- pdfview.closeall() -- break -- end end end end function pdfview.closeall() local allcall = allcalls[pdfview.method] if allcall then runner(format('%s', allcall)) end -- openedfiles = { } end --~ pdfview.open("t:/document/show-exa.pdf") --~ os.sleep(3) --~ pdfview.close("t:/document/show-exa.pdf") return pdfview context-2013.05.28.20130704/texmf-dist/tex/context/base/s-mod-00.mkii0000644000175000017500000003214111754241457024013 0ustar norbertnorbert%D \module %D [ file=s-mod-00, %D version=very-old, %D title=\CONTEXT\ Style File, %D subtitle=Documentation Base Environment, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 looks like crap, is not documented, will %D change, and used to be called modu-*.tex. % todo: % % file inclusions -> hyperlinks \mainlanguage[en] % better not here \usemodule[units] \enableactivediscretionaries \newprettytrue \unprotect % beter: % % group -> title % title -> category % subtitle -> subtitle % herzien ivm fonts % nog eens \interface \\ \\ verder doorvoeren \def\resetmoduledocumentation {\getrawparameters [Module] [ file=\jobname, type=, version={\currentdate[\v!year,{.},\v!month,{.},\v!day]}, system=\CONTEXT, title=Unknown Title, subtitle=, author=Unknown Author, date=\currentdate, copyright=Unknown Copyright, suggestions=]} \resetmoduledocumentation \def\dostartmoduledocumentation[#1]% {\newcounter\ParagraphNumber \resetmoduledocumentation \getrawparameters[Module][type=tex,#1]} \def\startmoduledocumentation {\starttext \dosingleempty\dostartmoduledocumentation} \def\stopmoduledocumentation {\page \placeregister [\v!index] [\c!balance=\v!yes, \c!indicator=\v!no, \c!criterium=\v!text] \stoptext} % \def\complexmodule[#1]% % {\startglobal % i.v.m. \bgroup in \startdocumentation % \getrawparameters[Module][#1] % \stopglobal % i.v.m. \bgroup in \startdocumentation % \moduletitle} % % \def\simplemodule#1% % {\type{#1}} % % \definecomplexorsimple\module % \startmode[atpragma] % % \def\TitlePage#1% can be done more efficient % {\startMPrun % mpgraph := #1 ; % input mp-cont ; % \stopMPrun % \externalfigure % [\bufferprefix mprun.#1] % [\c!height=\vsize, % \c!width=\hsize]} % % \defineoverlay[titlepage][\TitlePage{512}] % % \stopmode \startuseMPgraphic{titlepage} width := PaperWidth ; height := PaperHeight ; color local_red, local_white, local_blue ; local_white := white ; local_blue := local_white randomized (.6,.8) ; local_red := local_white randomized (.3,.4) ; u := width/400 ; def a_module (expr dx, dy) = picture p ; p := image ( ddy := 0 ; sx := 60u ; for i=1 upto (4 randomized 2) : sy := 7u randomized 3u ; fill unitsquare xyscaled(sx,sy) shifted (0,ddy) withcolor local_red ; ddy := ddy + sy + 4u ; endfor ) ; p := p shifted (dx,dy) shifted - center p ; fill boundingbox p enlarged 8u withcolor local_white ; fill boundingbox p enlarged 4u withcolor local_blue ; draw p ; enddef ; set_grid(width, height, width/15, height/15) ; forever: if new_on_grid(uniformdeviate width,uniformdeviate height): a_module(dx,dy) ; fi ; exitif grid_full ; endfor ; clip currentpicture to unitsquare xyscaled(width,height) ; \stopuseMPgraphic \defineoverlay [titlepage] [\useMPgraphic{titlepage}] \doifmode{atpragma}{\readfile{s-mod-04.tex}{}{}} \defineframed [TitleFrame] [\c!background=\v!color, \c!backgroundcolor=white, \c!align=\v!right, \c!offset=12pt, \c!strut=\v!no, \c!frame=\v!off, \c!bottom=] \definelayout [titlepage] [\c!backspace=0pt, \c!topspace=0pt, \c!header=0pt, \c!footer=0pt, \c!height=\v!middle, \c!width=\v!middle] \def\moduletitle {\setuplayout[titlepage] \ifx\ModuleNumber\undefined \else \ifnum\ModuleNumber<10 \edef\ModuleNumber{00\ModuleNumber} \else\ifnum\ModuleNumber<100 \edef\ModuleNumber{0\ModuleNumber} \fi\fi \setupbackgrounds [\v!page] [\c!background=titlepage] \fi \startmakeup[\v!standard][\c!headerstate=\v!none,\c!footerstate=\v!none] \switchtobodyfont[14.4pt,ss] \bgroup \def\CONTEXT {Con\kern-.15em\TeX t} \def\TEXUTIL {\TeX Util} \def\PPCHTEX {PPCH\TeX} \def\METAPOST{MetaPost} \hfill {\definedfont[SansBold at 96pt]\setstrut \TitleFrame{\Modulesystem}} \vfill \definetabulate[temp][|l|l|]% \switchtobodyfont[17.3pt,ss] \hfill {\bf\setstrut \TitleFrame {\insidefloattrue\setuptabulate[\c!before=,\c!after=]% \starttemp \doifsomething{\Moduletitle} {\NC title \EQ \Moduletitle \NC\NR}% \doifsomething{\Modulesubtitle} {\NC subtitle \EQ \Modulesubtitle \NC\NR}% \doifsomething{\Moduleauthor} {\NC author \EQ \Moduleauthor \NC\NR}% \NC date \EQ \currentdate \NC\NR %\doifsomething{\Modulesuggestions} % todo: generates space % {\NC suggestions \NC \Modulesuggestions \NC\NR}% \stoptemp}} \egroup \stopmakeup \ifx\ModuleNumber\undefined \else \setupbackgrounds [\v!page] [\c!background=] \fi \setuplayout} \let\stopdocumentation=\relax \def\startdocumentation {\bgroup \doglobal\newcounter\NOfMarginLines \def\stopdocumentation{\par\egroup}} \newif\ifcompressdefinitions \def\startcompressdefinitions {\global\compressdefinitionstrue} \def\stopcompressdefinitions {\global\compressdefinitionsfalse} \gdef\CompressDefinitions% {\ifcompressdefinitions \switchtobodyfont[\v!small]% \fi} \startnotmode[nocode] \definetyping [definition] \setuptyping [definition] [\c!before={\page[\v!preference]}\blank\PresetParagraphNumber\CompressDefinitions, \c!after=\ResetParagraphNumber\blank, \c!option=\Moduletype] \stopnotmode \startmode[nocode] % \definieerbuffer[definition] % ignore \long\def\startdefinition#1\stopdefinition{} \stopmode \definetyping [PL] [\c!option=PL, \c!margin=\v!standard] \definetyping [JV] [\c!option=JV, \c!margin=\v!standard] \definetyping [MP] [\c!option=MP, \c!margin=\v!standard] \definetyping [TEX] [\c!option=TEX,\c!margin=\v!standard] \setuptyping [\v!typing] [\c!margin=\v!standard] \setuptyping [\v!file] [\c!margin=\v!standard] \setuptyping [definition] [\c!margin=0pt] \newcounter\NOfMarginLines \newcounter\ParagraphNumber \def\ResetParagraphNumber {\egroup} \def\PresetParagraphNumber {\bgroup \xdef\NOfTextLines% {\the\prevgraf}% \doglobal\decrement\NOfMarginLines \doglobal\increment\ParagraphNumber \message{.}% \gdef\ShowParagraphNumber% {\llap{\slx\ParagraphNumber\hskip\leftmargindistance}}% \gdef\ShowParagraphNumberA% {\ifnum\NOfMarginLines>\NOfTextLines\relax \doglobal\increment\NOfTextLines \else \ShowParagraphNumber \global\let\ShowParagraphNumberA=\relax \global\let\ShowParagraphNumberB=\ShowParagraphNumber \doglobal\newcounter\NOfMarginLines \fi}% \gdef\ShowParagraphNumberB% {}% \EveryLine {\ShowParagraphNumberA}% \EveryPar {\vadjust{\nobreak}% \ShowParagraphNumberB}} \EveryPar % skip one {\EveryPar {\doglobal\newcounter\NOfMarginLines}} \def\dodomargeaanduidingen[#1]#2% {\def\docommand##1% {\indent\hbox {\ifx#2\relax \index{##1}% \else \index{#2{##1}}% \fi #2{\doboundtext{##1}{\leftmarginwidth}{..}}}% \doglobal\increment\NOfMarginLines \endgraf}% \processcommalist[#1]\docommand} \def\margeaanduidingen#1[#2]% {\def\domargeaanduidingen##1##2% {\margintitle[#2]% {\switchtobodyfont[\v!small]% \doglobal\newcounter\NOfMarginLines \dodomargeaanduidingen[##1]#1% \scratchcounter=\NOfMarginLines \multiply\scratchcounter by 10 \divide\scratchcounter by 12 \advance\scratchcounter by 1 \xdef\NOfMarginLines{\the\scratchcounter}% \processcommalist[##2]\index}}% \dodoublegroupempty\domargeaanduidingen} \def\complexmacros{\margeaanduidingen\tex } \def\complexextras{\margeaanduidingen\relax} \def\complexelements {\margeaanduidingen\someelement} \def\someelement#1{\type{<#1>}} \definecomplexorsimpleempty\macros \definecomplexorsimpleempty\extras \definecomplexorsimpleempty\elements \def\showelements{\dodoubleempty\doshowelements} \def\doshowelements[#1][#2] {\bgroup \processXMLbuffer \typebuffer \setupcolors[\c!state=\v!stop] \showXSDcomponent[#1][#2] \egroup} % \macros{a,b} % \macros{a,b}{b} % \macros[a]{a,b}{b} % weg ermee \defineparagraphs [interface] [\c!n=2] \setupparagraphs [interface] [1] [\c!width=4cm] \def\startexample{\par\startnarrower} \let\startvoorbeeld\startexample \def\stopexample {\stopnarrower} \let\stopvoorbeeld \stopexample \gdef\VisualizeLastSpace{\ifdim\lastskip>0pt\unskip\tttf\char32\fi} \gdef\ShowHeadText #1{\tttf#1\VL\mainlanguage[\currentlanguage]\headtext {#1}\VisualizeLastSpace} \gdef\ShowLabelText#1{\tttf#1\VL\mainlanguage[\currentlanguage]\labeltext{#1}\VisualizeLastSpace} \startbuffer[lang-a] \starttable[|l|l|] \HL \VL \bf head key \VL \bf current value \VL\SR \HL \VL \ShowHeadText \v!abbreviations \VL\FR \VL \ShowHeadText \v!units \VL\MR \VL \ShowHeadText \v!figures \VL\MR \VL \ShowHeadText \v!graphics \VL\MR \VL \ShowHeadText \v!index \VL\MR \VL \ShowHeadText \v!content \VL\MR \VL \ShowHeadText \v!intermezzi \VL\MR \VL \ShowHeadText \v!logos \VL\MR \VL \ShowHeadText \v!tables \VL\LR \HL \stoptable \stopbuffer \startbuffer[lang-b] \starttable[|l|l|] \HL \VL \bf label key \VL \bf current value \VL\SR \HL \VL \ShowLabelText \v!table \VL\FR \VL \ShowLabelText \v!figure \VL\MR \VL \ShowLabelText \v!intermezzo \VL\MR \VL \ShowLabelText \v!graphic \VL\MR \VL \ShowLabelText \v!chapter \VL\MR \VL \ShowLabelText \v!section \VL\MR \VL \ShowLabelText \v!subsection \VL\MR \VL \ShowLabelText \v!subsubsection \VL\MR \VL \ShowLabelText \v!appendix \VL\MR \VL \ShowLabelText \v!part \VL\MR \VL \ShowLabelText \v!line \VL\MR \VL \ShowLabelText \v!lines \VL\LR \HL \stoptable \stopbuffer \startbuffer[lang-c] \starttable[|l|l|] \HL \VL \bf label key \VL \bf current value \VL\SR \HL \VL \ShowLabelText \v!january \VL\FR \VL \ShowLabelText \v!february \VL\MR \VL \ShowLabelText \v!march \VL\MR \VL \ShowLabelText \v!april \VL\MR \VL \ShowLabelText \v!may \VL\MR \VL \ShowLabelText \v!june \VL\MR \VL \ShowLabelText \v!july \VL\MR \VL \ShowLabelText \v!august \VL\MR \VL \ShowLabelText \v!september \VL\MR \VL \ShowLabelText \v!october \VL\MR \VL \ShowLabelText \v!november \VL\MR \VL \ShowLabelText \v!december \VL\LR \HL \stoptable \stopbuffer \startbuffer[lang-d] \starttable[|l|l|] \HL \VL \bf label key \VL \bf current value \VL\SR \HL \VL \ShowLabelText \v!sunday \VL\FR \VL \ShowLabelText \v!monday \VL\MR \VL \ShowLabelText \v!tuesday \VL\MR \VL \ShowLabelText \v!wednesday \VL\MR \VL \ShowLabelText \v!thursday \VL\MR \VL \ShowLabelText \v!friday \VL\MR \VL \ShowLabelText \v!saturday \VL\LR \HL \stoptable \stopbuffer \gdef\ShowTextsValues[#1][#2]% {\vbox\bgroup \language[#1]% \setbox\scratchbox\hbox to \hsize{\hss\bfb#2 language defaults\hss} \dp\scratchbox\zeropoint \box\scratchbox \vskip1em \hrule \vskip2em \halign {\hss##\hss&##\hskip1em&\hss##\hss\cr $\vcenter{\getbuffer[lang-a]}$&&$\vcenter{\getbuffer[lang-b]}$\cr \noalign{\vskip1em} $\vcenter{\getbuffer[lang-c]}$&&$\vcenter{\getbuffer[lang-d]}$\cr}% \egroup} \gdef\ShowLanguageValues[#1][#2]#3#4% {\hbox to \hsize {\hss \vbox \bgroup \language[#1]% \let\normalbar=| \starttable[||||] \HL \VL \THREE{\bf subsentence symbol and quotes} \VL\SR \HL \VL \quotation{#3 #4} \VL \quote{#2} \VL \let|=\normalbar |<||<|#3|>|#4|>| \VL\FR \VL \quotation{#3 #4} \VL \quote{#2} \VL |<||<|#3|>|#4|>| \VL\LR \HL \stoptable \egroup \hss}} \gdef\doShowAllLanguageValues[#1][#2]#3#4% {\vbox {\ShowTextsValues[#1][#2] \vskip2em \ShowLanguageValues[#1][#2]{#3}{#4}} \protect \page} \gdef\ShowAllLanguageValues {\page \unprotect \dodoubleargument\doShowAllLanguageValues} \protect %D Command references: % \input setupa % \input setupb \usemodule[int-load] \loadsetups \unprotect % \def\showsetup % {\doglobal\newcounter\CurrentArgument % \setup} \def\showsetup#1% {{\def\y##1{\writestatus{setups}{warning: remove y! from #1}}% \setup{#1}}} \setupframedtexts [setuptext] [\c!background=\v!screen, \c!frame=\v!off] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/lpdf-epd.lua0000644000175000017500000002375012130411274024071 0ustar norbertnorbertif not modules then modules = { } end modules ['lpdf-epd'] = { version = 1.001, comment = "companion to lpdf-epa.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is an experimental layer around the epdf library. The reason for -- this layer is that I want to be independent of the library (which -- implements a selection of what a file provides) and also because I -- want an interface closer to Lua's table model while the API stays -- close to the original xpdf library. Of course, after prototyping a -- solution, we can optimize it using the low level epdf accessors. -- It will be handy when we have a __length and __next that can trigger -- the resolve till then we will provide .n as #. -- As there can be references to the parent we cannot expand a tree. I -- played with some expansion variants but it does to pay off. -- Maybe we need a close(). -- We cannot access all destinations in one run. local setmetatable, rawset, rawget, tostring, tonumber = setmetatable, rawset, rawget, tostring, tonumber local lower, match, char, find, sub = string.lower, string.match, string.char, string.find, string.sub local concat = table.concat local toutf = string.toutf local report_epdf = logs.reporter("epdf") -- a bit of protection local limited = false directives.register("system.inputmode", function(v) if not limited then local i_limiter = io.i_limiter(v) if i_limiter then epdf.open = i_limiter.protect(epdf.open) limited = true end end end) -- function epdf.type(o) local t = lower(match(tostring(o),"[^ :]+")) return t or "?" end lpdf = lpdf or { } local lpdf = lpdf lpdf.epdf = { } local checked_access local function prepare(document,d,t,n,k) for i=1,n do local v = d:getVal(i) local r = d:getValNF(i) if r:getTypeName() == "ref" then r = r:getRef().num local c = document.cache[r] if c then -- else c = checked_access[v:getTypeName()](v,document,r) if c then document.cache[r] = c document.xrefs[c] = r end end t[d:getKey(i)] = c else t[d:getKey(i)] = checked_access[v:getTypeName()](v,document) end end getmetatable(t).__index = nil return t[k] end local function some_dictionary(d,document,r) local n = d and d:getLength() or 0 if n > 0 then local t = { } setmetatable(t, { __index = function(t,k) return prepare(document,d,t,n,k) end } ) return t end end local done = { } local function prepare(document,a,t,n,k) for i=1,n do local v = a:get(i) local r = a:getNF(i) if v:getTypeName() == "null" then -- TH: weird, but appears possible elseif r:getTypeName() == "ref" then r = r:getRef().num local c = document.cache[r] if c then -- else c = checked_access[v:getTypeName()](v,document,r) document.cache[r] = c document.xrefs[c] = r end t[i] = c else t[i] = checked_access[v:getTypeName()](v,document) end end getmetatable(t).__index = nil return t[k] end local function some_array(a,document,r) local n = a and a:getLength() or 0 if n > 0 then local t = { n = n } setmetatable(t, { __index = function(t,k) return prepare(document,a,t,n,k) end } ) return t end end local function streamaccess(s,_,what) if not what or what == "all" or what == "*all" then local t, n = { }, 0 s:streamReset() while true do local c = s:streamGetChar() if c < 0 then break else n = n + 1 t[n] = char(c) end end return concat(t) end end local function some_stream(d,document,r) if d then d:streamReset() local s = some_dictionary(d:streamGetDict(),document,r) getmetatable(s).__call = function(...) return streamaccess(d,...) end return s end end -- we need epdf.getBool checked_access = { dictionary = function(d,document,r) return some_dictionary(d:getDict(),document,r) end, array = function(a,document,r) return some_array(a:getArray(),document,r) end, stream = function(v,document,r) return some_stream(v,document,r) end, real = function(v) return v:getReal() end, integer = function(v) return v:getNum() end, string = function(v) return toutf(v:getString()) end, boolean = function(v) return v:getBool() end, name = function(v) return v:getName() end, ref = function(v) return v:getRef() end, null = function() return nil end, } -- checked_access.real = epdf.real -- checked_access.integer = epdf.integer -- checked_access.string = epdf.string -- checked_access.boolean = epdf.boolean -- checked_access.name = epdf.name -- checked_access.ref = epdf.ref local function getnames(document,n,target) -- direct if n then local Names = n.Names if Names then if not target then target = { } end for i=1,Names.n,2 do target[Names[i]] = Names[i+1] end else local Kids = n.Kids if Kids then for i=1,Kids.n do target = getnames(document,Kids[i],target) end end end return target end end local function getkids(document,n,target) -- direct if n then local Kids = n.Kids if Kids then for i=1,Kids.n do target = getkids(document,Kids[i],target) end elseif target then target[#target+1] = n else target = { n } end return target end end -- /OCProperties << -- /OCGs [ 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 25 0 R 27 0 R ] -- /D << -- /Order [ 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 25 0 R 27 0 R ] -- /ON [ 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 25 0 R 27 0 R ] -- /OFF [ ] -- >> -- >> local function getlayers(document) local properties = document.Catalog.OCProperties if properties then local layers = properties.OCGs if layers then local t = { } local n = layers.n for i=1,n do local layer = layers[i] --~ print(document.xrefs[layer]) t[i] = layer.Name end t.n = n return t end end end local function getpages(document) local data = document.data local xrefs = document.xrefs local cache = document.cache local cata = data:getCatalog() local xref = data:getXRef() local pages = { } local nofpages = cata:getNumPages() for pagenumber=1,nofpages do local pagereference = cata:getPageRef(pagenumber).num local pagedata = some_dictionary(xref:fetch(pagereference,0):getDict(),document,pagereference) if pagedata then pagedata.number = pagenumber pages[pagenumber] = pagedata xrefs[pagedata] = pagereference cache[pagereference] = pagedata else report_epdf("missing pagedata at slot %i",i) end end pages.n = nofpages return pages end -- loader local function delayed(document,tag,f) local t = { } setmetatable(t, { __index = function(t,k) local result = f() if result then document[tag] = result return result[k] end end } ) return t end local loaded = { } function lpdf.epdf.load(filename) local document = loaded[filename] if not document then statistics.starttiming(lpdf.epdf) local data = epdf.open(filename) -- maybe resolvers.find_file if data then document = { filename = filename, cache = { }, xrefs = { }, data = data, } local Catalog = some_dictionary(data:getXRef():getCatalog():getDict(),document) local Info = some_dictionary(data:getXRef():getDocInfo():getDict(),document) document.Catalog = Catalog document.Info = Info -- document.catalog = Catalog -- a few handy helper tables document.pages = delayed(document,"pages", function() return getpages(document) end) document.destinations = delayed(document,"destinations", function() return getnames(document,Catalog.Names and Catalog.Names.Dests) end) document.javascripts = delayed(document,"javascripts", function() return getnames(document,Catalog.Names and Catalog.Names.JS) end) document.widgets = delayed(document,"widgets", function() return getnames(document,Catalog.Names and Catalog.Names.AcroForm) end) document.embeddedfiles = delayed(document,"embeddedfiles",function() return getnames(document,Catalog.Names and Catalog.Names.EmbeddedFiles) end) document.layers = delayed(document,"layers", function() return getlayers(document) end) else document = false end loaded[filename] = document statistics.stoptiming(lpdf.epdf) -- print(statistics.elapsedtime(lpdf.epdf)) end return document end -- for k, v in next, expand(t) do function lpdf.epdf.expand(t) if type(t) == "table" then local dummy = t.dummy end return t end -- helpers -- function lpdf.epdf.getdestinationpage(document,name) -- local destination = document.data:findDest(name) -- return destination and destination.number -- end context-2013.05.28.20130704/texmf-dist/tex/context/base/s-fonts-features.lua0000644000175000017500000001326712161703335025613 0ustar norbertnorbertif not modules then modules = { } end modules ['s-fonts-features'] = { version = 1.001, comment = "companion to s-fonts-features.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } moduledata.fonts = moduledata.fonts or { } moduledata.fonts.features = moduledata.fonts.features or { } -- for the moment only otf local sortedhash = table.sortedhash local NC, NR, bold = context.NC, context.NR, context.bold function moduledata.fonts.features.showused(specification) specification = interfaces.checkedspecification(specification) -- local list = utilities.parsers.settings_to_set(specification.list or "all") context.starttabulate { "|T|T|T|T|T|" } context.HL() NC() bold("feature") NC() NC() bold("description") NC() bold("value") NC() bold("internal") NC() NR() context.HL() local usedfeatures = fonts.handlers.otf.statistics.usedfeatures local features = fonts.handlers.otf.tables.features local descriptions = fonts.handlers.otf.features.descriptions for feature, keys in sortedhash(usedfeatures) do -- if list.all or (list.otf and rawget(features,feature)) or (list.extra and rawget(descriptions,feature)) then local done = false for k, v in sortedhash(keys) do if done then NC() NC() NC() elseif rawget(descriptions,feature) then NC() context(feature) NC() context("+") -- extra NC() context(descriptions[feature]) done = true elseif rawget(features,feature) then NC() context(feature) NC() -- otf NC() context(features[feature]) done = true else NC() context(feature) NC() context("-") -- unknown NC() done = true end NC() context(k) NC() context(tostring(v)) NC() NR() end -- end end context.HL() context.stoptabulate() end local function collectkerns(tfmdata,feature) local combinations = { } local resources = tfmdata.resources local characters = tfmdata.characters local sequences = resources.sequences local lookuphash = resources.lookuphash local feature = feature or "kern" if sequences then for i=1,#sequences do local sequence = sequences[i] if sequence.features and sequence.features[feature] then local lookuplist = sequence.subtables if lookuplist then for l=1,#lookuplist do local lookupname = lookuplist[l] local lookupdata = lookuphash[lookupname] for unicode, data in next, lookupdata do local kerns = combinations[unicode] if not kerns then kerns = { } combinations[unicode] = kerns end for otherunicode, kern in next, data do if not kerns[otherunicode] and kern ~= 0 then kerns[otherunicode] = kern end end end end end end end end return combinations end local showkernpair = context.showkernpair function moduledata.fonts.features.showbasekerns(specification) -- assumes that the font is loaded in base mode specification = interfaces.checkedspecification(specification) local id, cs = fonts.definers.internal(specification,"") local tfmdata = fonts.hashes.identifiers[id] local done = false for unicode, character in sortedhash(tfmdata.characters) do local kerns = character.kerns if kerns then context.par() for othercode, kern in sortedhash(kerns) do showkernpair(unicode,kern,othercode) end context.par() done = true end end if not done then context("no kern pairs found") context.par() end end function moduledata.fonts.features.showallkerns(specification) specification = interfaces.checkedspecification(specification) local id, cs = fonts.definers.internal(specification,"") local tfmdata = fonts.hashes.identifiers[id] local allkerns = collectkerns(tfmdata) local characters = tfmdata.characters if next(allkerns) then for first, pairs in sortedhash(allkerns) do context.par() for second, kern in sortedhash(pairs) do -- local kerns = characters[first].kerns -- if not kerns and pairs[second] then -- -- weird -- end showkernpair(first,kern,second,0) end context.par() end else context("no kern pairs found") context.par() end end context-2013.05.28.20130704/texmf-dist/tex/context/base/x-steps.mkii0000644000175000017500000000554311754241457024170 0ustar norbertnorbert%D \module %D [ file=m-steps, %D version=2001.05.28, %D title=\CONTEXT\ Modules, %D subtitle=Step Charts \& Tables, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 The \XML\ interface: \usemodule[m][steps] \unprotect \defineXMLdirective [stepchart] [charts] \setupSTEPcharts \defineXMLdirective [stepchart] [cells] \setupSTEPcells \defineXMLdirective [stepchart] [texts] \setupSTEPtexts \defineXMLdirective [stepchart] [lines] \setupSTEPlines \defineXMLdirective [steptable] [tables] \setupSTEPtables \defineXMLdirective [steptable] [cells] \setupSTEPcells \defineXMLdirective [steptable] [texts] \setupSTEPtexts \defineXMLdirective [steptable] [lines] \setupSTEPlines \defineXMLpickup[stepchart][@@STPC] {\bgroup \defineXMLpush[top]% \defineXMLpush[bot]% \defineXMLenvironment[lines][@@STEL] {\expanded{\startlines[\theXMLarguments{@@STEL}]}} {\stoplines}% \defineXMLenvironment[cells][@@STEC] {\XMLerase{top}\XMLerase{bot}} {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{top}}{\XMLpop{bot}}}}% \defineXMLenvironment[texts][@@STET] {\XMLerase{top}\XMLerase{bot}} {\expanded{\texts[\theXMLarguments{@@STET}]{\XMLpop{top}}{\XMLpop{bot}}}}% \defineXMLenvironmentpush[cell][@@STEC] {\XMLerase{cell}} {\expanded{\cell [\theXMLarguments{@@STEC}]{\XMLpop{cell}}}}% \defineXMLenvironmentpush [text] [@@STET] {\XMLerase{text}} {\expanded{\text [\theXMLarguments{@@STET}]{\XMLpop{text}}}}% \expanded{\startSTEPchart[\theXMLarguments{@@STPC}]}} {\stopSTEPchart \egroup} \defineXMLpickup[steptable][@@STPT] {\bgroup \defineXMLenvironment[lines][@@STEL] {\expanded{\startlines[\theXMLarguments{@@STEL}]}} {\stoplines}% \defineXMLargument[cell][@@STEC] {\expanded{\cell[\theXMLarguments{@@STEC}]}}% \defineXMLargument[text][@@STET] {\expanded{\text[\theXMLarguments{@@STET}]}}% \defineXMLargument[prep] {\prep}% \expanded{\startSTEPtable[\theXMLarguments{@@STPT}]}} {\stopSTEPtable \egroup} \defineXMLpickup[stepaligntable][@@STPT] {\bgroup \defineXMLenvironment[lines][@@STEL] {\expanded{\setupSTEPlines[\theXMLarguments{@@STEL}]}} {}% \defineXMLpush[c1]\defineXMLpush[c2]\defineXMLpush[c3]% \defineXMLenvironment[cells][@@STEC] {\XMLerase{c1}\XMLerase{c1}\XMLerase{c3}} {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{c1}}{\XMLpop{c2}}{\XMLpop{c3}}}}% \defineXMLargument[text][@@STET] {\expanded{\text[\theXMLarguments{@@STET}]}}% \defineXMLargument[prep] {\prep}% \expanded{\startSTEPaligntable[\theXMLarguments{@@STPT}]}} {\stopSTEPaligntable \egroup} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/scrp-ini.mkiv0000644000175000017500000000526212161703335024313 0ustar norbertnorbert%D \module %D [ file=scrp-ini, %D version=2009.02.06, %D title=\CONTEXT\ Script Macros, %D subtitle=Initialization, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % here we collect code from other places (was organized differently) \registerctxluafile{scrp-ini}{1.001} \registerctxluafile{scrp-cjk}{1.001} \registerctxluafile{scrp-eth}{1.001} \definesystemattribute[scriptinjection][public] \definesystemattribute[scriptsplitting][public] \definesystemattribute[scriptstatus] [public] %D Since scripts need specific \LUA\ code we use hard coded attribute %D values, but we might have more tricks at some time, so we use a %D proper define macro too. \unprotect \installcorenamespace{script} \installcommandhandler \??script {script} \??script \let\setupscripts\setupscript % be nice % presets are global and are currently defined in lua \appendtoks \setuevalue\currentscript{\setscript[\currentscript]}% \to \everydefinescript \unexpanded\def\scripts_basics_set {\ctxlua{scripts.set("\currentscript","\scriptparameter\c!method","\scriptparameter\c!preset")}} \unexpanded\def\setscript[#1]% {\edef\currentscript{#1}% \scripts_basics_set} \unexpanded\def\resetscript {\ctxlua{scripts.reset()}} \unexpanded\def\startscript[#1]% {\begingroup \edef\currentscript{#1}% \scripts_basics_set} \unexpanded\def\stopscript {\endgroup} % % todo: % % \unexpanded\def\setscriptsplitterlist % {\dodoubleargument\scripts_basics_set_splitter_list} % % \def\scripts_basics_set_splitter_list[#1][#2]% % {\ctxcommand{setscriptsplitterlist("#1","#2")} % \setscript[hangul] \hangul \startscript[hangul] \definescript [hangul] [\c!method=hangul] \definescript [hanzi] [\c!method=hanzi] \definescript [nihongo] [\c!method=nihongo] \definescript [ethiopic] [\c!method=ethiopic] \definescript [thai] [\c!method=thai] \definescript [latin] [\c!method=] % resets the attribute (also currentscript) \definescript [test] [\c!method=test] % a new trick (at some point we will predefine more scripts and consider a link with the above) \appendtoks \ifx\currentscript\empty \doifelse{\scriptparameter\s!features}\v!auto\enableautofontscript\disableautofontscript \fi \to \everysetupscript \unexpanded\def\enableautofontscript {\ctxcommand{enableautofontscript ()}} \unexpanded\def\disableautofontscript{\ctxcommand{disableautofontscript()}} \definefontfeature[latn][script=latn] \definefontfeature[grek][script=grek] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/x-fig-00.xsd0000644000175000017500000000462310526734267023661 0ustar norbertnorbert

    This schema described the figure database. This base can be used to collect graphics that later can be used in applications like ConTeXt.

    author: Tobias Burnus & Hans Hagen, copyright: PRAGMA-ADE / Hasselt NL

    context-2013.05.28.20130704/texmf-dist/tex/context/base/cont-yes.mkiv0000644000175000017500000000503512134352503024323 0ustar norbertnorbert%D \module %D [ file=cont-yes, %D version=2012.06.01, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=Startup Stub, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % At some point I will reconsider the \starttext .. \stoptext % wraping as we can assume proper styling. It's a left-over from % mkii that we need to get rid of. \startluacode -- When a style is loaded there is a good change that we never enter -- this code. local report = logs.reporter("system") environment.initializefilenames() -- todo: check if we really need to pre-prep the filename local arguments = environment.arguments local suffix = environment.suffix local filename = environment.filename -- hm, not inputfilename ! if suffix == "xml" or arguments.forcexml then -- Maybe we should move the preamble parsing here as it -- can be part of (any) loaded (sub) file. The \starttext -- wrapping might go away. report("processing as xml: %s",filename) context.starttext() context.xmlprocess("main",filename,"") context.stoptext() elseif suffix == "cld" or arguments.forcecld then report("processing as cld: %s",filename) context.runfile(filename) elseif suffix == "lua" or arguments.forcelua then -- The wrapping might go away. Why is is it there in the -- first place. report("processing as lua: %s",filename) context.starttext() context.ctxlua(string.format('dofile("%s")',filename)) context.stoptext() elseif suffix == "mp" or arguments.forcemp then report("processing as metapost: %s",filename) context.starttext() context.processMPfigurefile(filename) context.stoptext() -- elseif suffix == "prep" then -- -- -- Why do we wrap here. Because it can be xml? Let's get rid -- -- of prepping in general. -- -- context.starttext() -- context.input(filename) -- context.stoptext() else -- \writestatus{system}{processing as tex} -- We have a regular tex file so no \starttext yet as we can -- load fonts. -- context.enabletrackers { "resolvers.*" } context.input(filename) -- context.disabletrackers { "resolvers.*" } end context.finishjob() \stopluacode \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/s-pre-10.tex0000644000175000017500000001523711754241457023701 0ustar norbertnorbert%D \module %D [ file=s-pre-10, %D version=unknown, %D title=\CONTEXT\ Style File, %D subtitle=Presentation Environment 10, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 style is derived from the ninth style, which was %D used first at \EUROTEX\ 99 and later at \TUG\ 2000. This %D alternative build up a page. \startmode [demo] \disablemode[demo] \usemodule[pre-09] \enablemode[demo] \stopmode \startnotmode [demo] \usemodule[pre-09] \stopnotmode %D We use blue colors instead of yellow ones. Since we have %D used symbolic names, we can easily overload the existing %D scheme. \definecolor[LineColor][r=.40,g=.40,b=1.00] %D Here we don't use fixed dimensions, but fit the sample %D windows and derive the text windows's width from this one. \setupframedtexts [SampleText] [width=fit,height=fit, background={background,nextpage}] %D The topic goes to the top right corner of the screen which %D means that it is positioned left down to the reference %D point. Watch how we make data on this layer (here only %D the topic but it can be more) persistent. \setuplayer [topic] [y=0pt,x=\makeupwidth,location=lb,state=repeat, hoffset=-\FrameSkip,voffset=\FrameSkip] %D Clicking on the page brings us back. \setupbackgrounds [page] [background={previouspage,color,topic}] %D All layers end up on the text area. This could have been %D the page area too since these have the same dimensions. \setupbackgrounds [text] [background={common,sample,text}] %D Because we build up the text window step by step, we will %D separate the entries by white space. \startsetups [always] \setupwhitespace[big] \setupblank[big] \stopsetups %D The \type {\Topic} commands can be simplified to: \def\Topic#1% {\resetlayer[topic] \setlayer[topic]{\bfb\setstrut\color[TextColor]{#1}}} %D We also provide a way to erase the topic. \def\NoTopic {\resetlayer[topic]} %D We have to redefine the structuring commands to support %D the resetting of buffer counters. \newcounter\TextN \def\StartSample {\doglobal\newcounter\TextN \dostartbuffer[sample][StartSample][StopSample]} \def\StartText {\doglobal\newcounter\TextN \dostartbuffer[text][StartText][StopText]} \def\StartSubText {\doglobal\increment\TextN \dostartbuffer[text-\TextN][StartSubText][StopSubText]} \def\StopText {\startstandardmakeup \DoSampleText{text}{common}{nextpage} \stopstandardmakeup} \def\StopSubText {\startstandardmakeup \DoSampleText{text}{common}{nextpage} \stopstandardmakeup} %D The \type {\DoSampleText} command is adapted to support %D addition of subtexts (each subtext goes into its own %D buffer). \def\DoSampleText#1#2#3% {\setupframedtexts[SampleText][background={background,#3}] \bgroup \setups[#1]% \setups[always]% \setbox\nextbox=\hbox {\startSampleText[none] \getbuffer[#1]\par \doif{#1}{text} {\dorecurse{\TextN}{\getbuffer[text-\recurselevel]\par}} \stopSampleText} \xdef\SampleTextWidth{\the\wd\nextbox} \setlayer[#2]{\box\nextbox}% \egroup} %D Since we are no longer swapping windows, we end up with a %D much simplier \type {\Stopidea} macro. We don't reset %D samples at the inner level. \def\StartIdea% {\bgroup \let\StopSample \relax \let\StopText \relax \let\StopSubText\relax \def\StartSample{\dostartbuffer[sample][StartSample][StopSample]}} \def\StopIdea% {\startstandardmakeup \DoSampleText{sample}{sample}{nextpage} \SetTextWidth \DoSampleText{text} {text} {nextpage} \stopstandardmakeup \egroup} %D Here we determine the width of the text window. It is %D derived from the width of the sample and stays the same %D within a sequence. \def\SetTextWidth {\ifnum\TextN<1 % yes or no, may change \scratchdimen=\makeupwidth \advance\scratchdimen by -\SampleTextWidth \advance\scratchdimen by \FrameSkip \xdef\SampleWidth{\the\scratchdimen}% \fi \setupframedtexts [SampleText] [width=\SampleWidth]} %D We use the (already implemented) second alternative of %D the titlepage graphic. Please don't change this. \defineoverlay[joke] [\useMPgraphic{joke}{n=1}] % not to be changed ! \doifnotmode{demo}{\endinput} %D The demo section. The original presentation uses proper %D graphics and has better spacing. \def\SomeSymbol#1#2{\definedfont[ContextNavigation at #1]\char#2} \setupcombinations[distance=\FrameOffset,inbetween=\vskip\FrameOffset] \starttext \TitlePage{Some Famous Symbols} \Topic{Symbols} \StartSample \startcombination[2*2] {\SomeSymbol{5cm}{1}} {} {\SomeSymbol{5cm}{3}} {} {\SomeSymbol{5cm}{2}} {} {\SomeSymbol{5cm}{4}} {} \stopcombination \StopSample \Topic{Previous} \StartIdea \StartSample \SomeSymbol{7cm}{1} \StopSample \StartText This symbol can be used to indicate a hyperlink to a previous page. \StopText \StopIdea \StartIdea \StartSubText As one can expect there is also a symbol for going to the next page. \StopSubText \StopIdea \Topic{Previous} \StartIdea \StartSample \SomeSymbol{9cm}{2} \StopSample \StartText This symbol is actually just a mirrored version of the first symbol we showed. \StopText \StopIdea \NoTopic \StartText Is this nice or not? \StopText \Topic{First and Last} \StartSample \SomeSymbol{11cm}{3} \StopSample \StartSample \SomeSymbol{11cm}{4} \StopSample \StartIdea \StartSample \SomeSymbol{5cm}{3} \StopSample \StartText A few screens back, we saw this symbol. \StopText \StopIdea \StartIdea \StartSubText This symbol represents the beginning of something. \StopSubText \StopIdea \StartIdea \StartSample \SomeSymbol{5cm}{4} \StopSample \StartSubText Just like this one represents an end. \StopSubText \StopIdea \StartIdea \StartSubText They look just like the symbols found on audio and video players. \StopSubText \StopIdea \Topic{Summary} \StartIdea \StartSample \SomeSymbol{6cm}{1} \StopSample \StartText So we have a symbol for previous \unknown \StopText \StopIdea \StartIdea \StartSample \SomeSymbol{6cm}{2} \StopSample \StartSubText \unknown\ and one for next \unknown \StopSubText \StopIdea \StartIdea \StartSample \SomeSymbol{6cm}{3} \StopSample \StartSubText \unknown\ and yet another for first \unknown \StopSubText \StopIdea \StartIdea \StartSample \SomeSymbol{6cm}{4} \StopSample \StartSubText \unknown\ and of course for last. \StopSubText \StopIdea \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-parsed-xml.lua0000644000175000017500000000666011571377075026200 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-imp-parsed-xml'] = { version = 1.001, comment = "companion to buff-imp-parsed-xml.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local format = string.format local context = context local verbatim = context.verbatim local write = visualizers.write local writespace = visualizers.writespace local writeargument = visualizers.writeargument local ParsedXmlSnippetKey = context.ParsedXmlSnippetKey local ParsedXmlSnippetValue = context.ParsedXmlSnippetValue local ParsedXmlSnippetElement = verbatim.ParsedXmlSnippetElement local ParsedXmlSnippetInstruction = verbatim.ParsedXmlSnippetInstruction local ParsedXmlSnippetComment = verbatim.ParsedXmlSnippetComment local ParsedXmlSnippetCdata = verbatim.ParsedXmlSnippetCdata local ParsedXmlSnippetDoctype = verbatim.ParsedXmlSnippetDoctype local startParsedXmlSnippet = context.startParsedXmlSnippet local stopParsedXmlSnippet = context.stopParsedXmlSnippet local parsedxmlhandler = xml.newhandlers { -- todo: treat spaces and tabs name = "parsedxml", handle = function(...) print("error:",...) -- we need a handler as fallback, even if not used end, functions = { ["@el@"] = function(e,handler) local at = e.at if at and next(at) then ParsedXmlSnippetElement(format("<%s",e.tg)) for k, v in next, at do writespace() ParsedXmlSnippetKey() writeargument(k) verbatim("=") ParsedXmlSnippetValue() writeargument(format("%q",k)) end ParsedXmlSnippetElement(">") else ParsedXmlSnippetElement(format("<%s>",e.tg)) end handler.serialize(e.dt,handler) ParsedXmlSnippetElement(format("",e.tg)) end, ["@pi@"] = function(e,handler) ParsedXmlSnippetInstruction("") end , ["@cm@"] = function(e,handler) ParsedXmlSnippetComment("") end, ["@cd@"] = function(e,handler) ParsedXmlSnippetCdata("") end, ["@dt@"] = function(e,handler) ParsedXmlSnippetDoctype("") end, ["@tx@"] = function(s,handler) write(s) end, } } local function parsedxml(root,pattern) if root then if pattern then root = xml.filter(root,pattern) end if root then context.startParsedXmlSnippet() xml.serialize(root,parsedxmlhandler) context.stopParsedXmlSnippet() end end end local function parser(str,settings) parsedxml(xml.convert(str),settings and settings.pattern) end visualizers.parsedxml = parsedxml -- for use at the lua end (maybe namespace needed) visualizers.register("parsed-xml", { parser = parser } ) context-2013.05.28.20130704/texmf-dist/tex/context/base/m-streams.tex0000644000175000017500000002721511754241457024344 0ustar norbertnorbert%D \module %D [ file=m-streams, %D version=2006.03.21, %D title=\CONTEXT\ Modules, %D subtitle=Streams, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 First we implement a simple left||right synchronization %D mechanism, which we may perfect and extend over time. \unprotect \defineoutputstream [\v!left] \defineoutputstream [\v!right] \definemarknote[\v!left] \definemarknote[\v!right] \startsetups stream:\v!left:bottom \flushmarknotes[\v!left] \stopsetups \startsetups stream:\v!right:bottom \flushmarknotes[\v!right] \stopsetups \startsetups stream:\v!left:reset \erasemarknotes[\v!left] \stopsetups \startsetups stream:\v!right:reset \erasemarknotes[\v!right] \stopsetups \def\LeftNote {\setmarknote [\v!left]} % {#1} \def\RightNote {\setmarknote [\v!right]} % {#1} \def\SwitchToLeft {\enableoutputstream [\v!left]} \def\SwitchToRight {\enableoutputstream [\v!right]} \def\SwitchToNormal {\enableoutputstream [\s!default]} \def\SynchronizeLeftAndRight{\synchronizeoutputstreams[\v!left,\v!right]} \def\FlushLeftAndRight {\flushoutputstreampages [\v!left,\v!right]} \protect % \topskip \strutheight % \splittopskip\strutheight %D Example of usage: %D %D \starttyping %D \nopenalties \setupinterlinespace[top=height] \setupcolors[state=start] %D %D \showgrid \showstruts %D %D \starttext %D %D \title{Whatever} \page %D %D \dorecurse {5} { %D \let\RecurseLevel\recurselevel %D \SwitchToLeft \dorecurse{10}{\dontleavehmode{\tf\RecurseLevel:l \begstrut \input tufte \endstrut \endgraf}} %D \SwitchToRight \dorecurse{10}{\dontleavehmode{\sl\RecurseLevel:r \begstrut \input knuth \endstrut \endgraf}} %D \SwitchToNormal \SynchronizeLeftAndRight %D \SwitchToLeft \dorecurse{10}{\dontleavehmode{\bf\RecurseLevel:l \begstrut \input zapf \endstrut \endgraf}} %D \SwitchToRight \dorecurse{10}{\dontleavehmode{\bs\RecurseLevel:r \begstrut \input davis \endstrut \endgraf}} %D \SwitchToNormal \SynchronizeLeftAndRight %D } %D %D \FlushLeftAndRight %D %D \stoptext %D \stoptyping %D %D Another example: %D %D \starttyping %D \nopenalties \setupinterlinespace[top=height] \setupcolors[state=start] %D %D \showgrid \showstruts %D %D \starttext %D %D \SwitchToNormal \FlushLeftAndRight \page %D %D \def\StartCouple{\page\SwitchToNormal} %D \def\StopCouple {\SwitchToNormal \SynchronizeLeftAndRight \FlushLeftAndRight} %D %D \def\Original {\SwitchToNormal\SynchronizeLeftAndRight\SwitchToLeft} %D \def\Translation{\SwitchToRight} %D %D \StartCouple %D \dorecurse{10} { %D \Original o: \begstrut \inright{\blackrule}\input tufte \endstrut \LeftNote {tufte} \endgraf %D \Translation t: \begstrut \inleft {\blackrule}\input zapf \endstrut \RightNote{zapf} \endgraf %D \Original o: \begstrut \inright{\blackrule}\input knuth \endstrut \LeftNote {knuth} \endgraf %D \Translation t: \begstrut \inleft {\blackrule}\input davis \endstrut \RightNote{davis} \endgraf %D \Original o: \begstrut \inright{\blackrule}\input douglas \endstrut \LeftNote {douglas} \endgraf %D \Translation t: \begstrut \inleft {\blackrule}\input bryson \endstrut \RightNote{bryson} \endgraf %D } %D \StopCouple %D \stoptext %D \stoptyping %D Next we implement stream layers. \unprotect \def\overloadtextwidth#1% {\makeupwidth#1\relax \textwidth\makeupwidth \hsize\makeupwidth} \startsetups streamlayer:default:settings % set hsize etc, like \overloadtextwidth{12cm} \stopsetups \startsetups streamlayer:default:extras % flush goodies, like local floats \stopsetups \startsetups streamlayer:default:place \setlayer [\currentstreamlayer] [\c!preset=\v!left\v!top] {\outputstreambox[\currentstreamlayer]}% \stopsetups \startsetups streamlayer:default:copy \setlayer [\currentstreamlayer] [\c!preset=\v!left\v!top] {\outputstreamcopy[\currentstreamlayer]}% \stopsetups \startsetups streamlayer:default:reset \outputstreambox[\currentstreamlayer] \stopsetups \startsetups streamlayer:default:flush \tightlayer[\currentstreamlayer] \stopsetups \def\definestreamlayer {\dodoubleempty\dodefinestreamlayer} \def\dodefinestreamlayer[#1][#2]% {\defineoutputstream[#1]% \defineoutputstream[main]% \definelayer[#1][\c!method=\v!fit,\c!width=\textwidth,#2]} \def\dostreamsetups#1% {\doifsetupselse{streamlayer:\currentstreamlayer:#1} {\directsetup{streamlayer:\currentstreamlayer:#1}} {\directsetup{streamlayer:\s!default:#1}}} \def\startstreamlayer[#1]% {\bgroup % \def\startstreamlayer[##1]{\bgroup\let\stopstreamlayer\egroup}% \edef\currentstreamlayer{#1}% \enableoutputstream[main]% \synchronizeoutput \enableoutputstream[\currentstreamlayer]% \bgroup \dostreamsetups{settings}} \def\stopstreamlayer {\endgraf \egroup \disableoutputstream % \enableoutputstream[\s!default]% \outputstreambox[main]% % \dostreamsetups{place}% % \dostreamsetups{extras}% % \dostreamsetups{flush}% \egroup} \def\preparestreamlayer{\dosingleempty\dopreparestreamlayer} \def\flushstreamlayer {\dosingleempty\doflushstreamlayer } \def\placestreamlayer {\dosingleempty\doplacestreamlayer } \def\dopreparestreamlayer[#1]% {\bgroup \edef\currentstreamlayer{\iffirstargument#1\else\currentstreamlayer\fi}% \dostreamsetups{place}% \dostreamsetups{extras}% % \dostreamsetups{flush}% \egroup} \def\doflushstreamlayer[#1]% {\bgroup \edef\currentstreamlayer{\iffirstargument#1\else\currentstreamlayer\fi}% \dostreamsetups{flush}% \egroup} \def\doplacestreamlayer[#1]% {\preparestreamlayer[#1]% \flushstreamlayer[#1]} \protect %D Usage: %D \starttyping %D \setupinterlinespace[top=height] %D %D \setupcolors[state=start] %D %D \definestreamlayer[block] %D %D \definemeasure[localtextwidth] [\dimexpr.7\textwidth\relax] %D \definemeasure[localfloatwidth][\dimexpr.3\textwidth-2\bodyfontsize\relax] %D %D \startsetups streamlayer:block:settings %D \hsize=\measure{localtextwidth} %D \setupfloat[figure][maxwidth=\measure{localfloatwidth}] %D \stopsetups %D %D \startsetups streamlayer:block:extras %D \setuplocalfloats %D [before=\blank, %D after=\blank, %D inbetween=\blank] %D \setbox\scratchbox\vbox{\hsize\measure{localfloatwidth}\getlocalfloats} %D \ifdim\ht\scratchbox>\thelayerheight\currentstreamlayer\relax %D % more float than text %D \setlayerframed %D [\currentstreamlayer] %D [preset=righttop] %D [frame=off, %D offset=overlay] %D {\box\scratchbox} %D \else %D % more text than float %D \setuplocalfloats %D [before=\vfill, %D after=\removedepth\vfill, %D inbetween=\removedepth\vfill] %D \setlayerframed %D [\currentstreamlayer] %D [preset=righttop] %D [frame=off, %D offset=overlay] %D {\vbox to \thelayerheight\currentstreamlayer {\hsize\measure{localfloatwidth}\getlocalfloats}} %D \fi %D \resetlocalfloats %D \stopsetups %D %D \startsetups streamlayer:block:place %D \setlayerframed %D [\currentstreamlayer] %D [preset=lefttop] %D [frame=off, %D offset=overlay] %D {\outputstreambox[\currentstreamlayer]}% %D \stopsetups %D %D \startsetups streamlayer:block:flush %D \framed %D [offset=overlay, %D frame=off, %D background=color, %D backgroundcolor=red] %D {\tightlayer[\currentstreamlayer]} %D \stopsetups %D %D \setupbodyfont[small] %D %D \starttext %D %D \dorecurse {10} { %D \startstreamlayer[block] %D \title{Sample \recurselevel} %D \input tufte \endgraf %D \placefigure[local]{}{} %D \placefigure[local]{}{} %D \ifodd\recurselevel\relax \placefigure[local]{}{} \fi %D \startitemize[columns] %D \item xxx %D \item xxx %D \item xxx %D \item xxx %D \item xxx %D \stopitemize %D \stopstreamlayer %D \placestreamlayer[block] %D } %D %D \dorecurse {10} { %D \startstreamlayer[block] %D \title{Sample \recurselevel} %D \startcolumns %D \input tufte %D \stopcolumns %D \stopstreamlayer %D \placestreamlayer[block] %D } %D %D \stoptext %D \stoptyping \def\starttextstreamlayer {\startstreamlayer} \def\stoptextstreamlayer {\endgraf % maybe depth if no proper depth and no skip \removelastskip \stopstreamlayer} \def\placetextstreamlayer{\placestreamlayer} %D \starttyping %D \definestreamlayer[whatever][width=12cm] %D %D \startstreamlayer[whatever] %D \startitemize[columns,two][after=] %D \item one %D \item two %D \item three %D \item four %D \stopitemize %D \stopstreamlayer %D %D \framed[strut=no,align=normal]{\placestreamlayer[whatever]\obeydepth} %D %D \starttextstreamlayer[whatever] %D \startitemize[columns,two] %D \item one %D \item two %D \item three %D \item four %D \stopitemize %D \stoptextstreamlayer %D %D \framed[strut=no]{\placetextstreamlayer[whatever]} %D \stoptyping \endinput \setupinterlinespace[top=height] \setupcolors[state=start] \definestreamlayer[block] \definemeasure[localtextwidth] [\dimexpr.7\textwidth\relax] \definemeasure[localfloatwidth][\dimexpr.3\textwidth-2\bodyfontsize\relax] \startsetups streamlayer:block:settings \hsize=\measure{localtextwidth} \setupfloat[figure][maxwidth=\measure{localfloatwidth}] \stopsetups \startsetups streamlayer:block:extras \setuplocalfloats [before=\whitespace\blank, after=\whitespace\blank, inbetween=\whitespace\blank] \setbox\scratchbox\vbox{\hsize\measure{localfloatwidth}\getlocalfloats} \ifdim\ht\scratchbox>\thelayerheight\currentstreamlayer\relax % more float than text \setlayerframed [\currentstreamlayer] [preset=righttop] [frame=off, offset=overlay] {\box\scratchbox} \else % more text than float \setuplocalfloats [before=\vfill, after=\removedepth\vfill, inbetween=\removedepth\vfill] \setlayerframed [\currentstreamlayer] [preset=righttop] [frame=off, offset=overlay] {\vbox to \thelayerheight\currentstreamlayer {\hsize\measure{localfloatwidth}\getlocalfloats}} \fi \resetlocalfloats \stopsetups \startsetups streamlayer:block:place \setlayerframed [\currentstreamlayer] [preset=lefttop] [frame=off, offset=overlay] {\outputstreambox[\currentstreamlayer]}% \stopsetups \startsetups streamlayer:block:flush \framed [offset=overlay, frame=off, background=color, backgroundcolor=red] {\tightlayer[\currentstreamlayer]} \stopsetups \setupbodyfont[small] \starttext % \definestreamlayer[block] % % \startstreamlayer[block] % \title{Sample \recurselevel} % \startcolumns % \dorecurse{4}{\input tufte \par} % \stopcolumns % \stopstreamlayer % \placestreamlayer[block] \dorecurse {10} { \startstreamlayer[block] \title{Sample \recurselevel} \input tufte \endgraf \placefigure[local]{}{} \placefigure[local]{}{} \ifodd\recurselevel\relax \placefigure[local]{}{} \fi \startitemize[columns] \item xxx \item xxx \item xxx \item xxx \item xxx \stopitemize \stopstreamlayer \placestreamlayer[block] } \dorecurse {10} { \startstreamlayer[block] \title{Sample \recurselevel} \startcolumns \input tufte \stopcolumns \stopstreamlayer \placestreamlayer[block] } \stoptext context-2013.05.28.20130704/texmf-dist/tex/context/base/thrd-pic.mkii0000644000175000017500000037444011571377075024307 0ustar norbertnorbert% 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 context-2013.05.28.20130704/texmf-dist/tex/context/base/data-lua.lua0000644000175000017500000001021512134352503024061 0ustar norbertnorbertif not modules then modules = { } end modules ['data-lua'] = { version = 1.001, comment = "companion to luat-lib.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } -- This is now a plug in into l-lua (as we also use the extra paths elsewhere). local resolvers, package = resolvers, package local gsub = string.gsub local concat = table.concat local addsuffix = file.addsuffix local P, S, Cs, lpegmatch = lpeg.P, lpeg.S, lpeg.Cs, lpeg.match local luasuffixes = { 'tex', 'lua' } local libsuffixes = { 'lib' } local luaformats = { 'TEXINPUTS', 'LUAINPUTS' } local libformats = { 'CLUAINPUTS' } local helpers = package.helpers or { } local methods = helpers.methods or { } trackers.register("resolvers.libraries", function(v) helpers.trace = v end) trackers.register("resolvers.locating", function(v) helpers.trace = v end) helpers.report = logs.reporter("resolvers","libraries") helpers.sequence = { "already loaded", "preload table", "lua variable format", "lib variable format", "lua extra list", "lib extra list", "path specification", "cpath specification", "all in one fallback", "not loaded", } local pattern = Cs(P("!")^0 / "" * (P("/") * P(-1) / "/" + P("/")^1 / "/" + 1)^0) function helpers.cleanpath(path) -- hm, don't we have a helper for this? return resolvers.resolve(lpegmatch(pattern,path)) end local loadedaslib = helpers.loadedaslib local getextraluapaths = package.extraluapaths local getextralibpaths = package.extralibpaths local registerpath = helpers.registerpath local lualibfile = helpers.lualibfile local luaformatpaths local libformatpaths local function getluaformatpaths() if not luaformatpaths then luaformatpaths = { } for i=1,#luaformats do registerpath("lua format","lua",luaformatpaths,resolvers.expandedpathlistfromvariable(luaformats[i])) end end return luaformatpaths end local function getlibformatpaths() if not libformatpaths then libformatpaths = { } for i=1,#libformats do registerpath("lib format","lib",libformatpaths,resolvers.expandedpathlistfromvariable(libformats[i])) end end return libformatpaths end local function loadedbyformat(name,rawname,suffixes,islib,what) local trace = helpers.trace local report = helpers.report for i=1,#suffixes do -- so we use findfile and not a lookup loop local format = suffixes[i] local resolved = resolvers.findfile(name,format) or "" if trace then report("%s format, identifying %a using format %a",what,name,format) end if resolved ~= "" then if trace then report("%s format, %a found on %a",what,name,resolved) end if islib then return loadedaslib(resolved,rawname) else return loadfile(resolved) end end end end helpers.loadedbyformat = loadedbyformat -- print(lualibfile("bar")) -- print(lualibfile("foo.bar")) -- print(lualibfile("crap/foo...bar")) -- print(lualibfile("crap//foo.bar")) -- print(lualibfile("crap/../foo.bar")) -- print(lualibfile("crap/.././foo.bar")) -- alternatively we could split in path and base and temporary set the libpath to path -- we could build a list of relevant paths but for tracing it's better to have the -- whole lot (ok, we could skip the duplicates) methods["lua variable format"] = function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lua",#getluaformatpaths()) -- call triggers building end return loadedbyformat(addsuffix(lualibfile(name),"lua"),name,luasuffixes,false,"lua") end methods["lib variable format"] = function(name) if helpers.trace then helpers.report("%s format, checking %s paths","lib",#getlibformatpaths()) -- call triggers building end return loadedbyformat(addsuffix(lualibfile(name),os.libsuffix),name,libsuffixes,true,"lib") end -- package.extraclibpath(environment.ownpath) resolvers.loadlualib = require -- hm context-2013.05.28.20130704/texmf-dist/tex/context/base/strc-mat.mkii0000644000175000017500000023772712130411274024313 0ustar norbertnorbert%D \module %D [ file=strc-mat, %D version=2006.03.27, % 1998.12.07 %D title=\CONTEXT\ Structure Macros, %D subtitle=Math Fundamentals, %D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % engels maken \writestatus{loading}{ConTeXt Structure Macros / Math Fundamentals} \unprotect % \startlines % $\mathopnolimits{\rm d}x$ % $\mathopnolimits{\kern\zeropoint \rm d}x$ % $\puremathcomm{nolop}{\rm d}x$ % $\puremathcomm{nolop}{\kern\zeropoint\rm d}x$ % \blank % $\puremathcomm{nolop}{\mr d}x$ % $\puremathcomm{nolop}{\kern\zeropoint\mr d}x$ % $\mathop{\kern\zeropoint\mr d}x$ % $\mathopnolimits{\kern\zeropoint d}x$ % \stoplines % \definemessageconstant{math} % % messages moved % \def\invalidmathcommand#1{\showmessage\m!math1{#1}} % \appendtoks % \def\eqno {\invalidmathcommand{\string\eqno }}% % \def\leqno{\invalidmathcommand{\string\leqno}}% % \to \everydisplay % \appendtoks % \let\eqno\normaleqno % \let\leqno\normaleqno % \to \everymath % \placeformula\startformula % H(K|M,C) = H(K|C) - H(M|C)\eqno{\hbox{(\in{}[eq:keyapp])}} % \stopformula \unexpanded\def\mathortext {\ifmmode \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} % \defineactivecharacter _ {\mathortext{_}{\_}} text_text $a^2$ % force text mode, will be overloaded later \ifx\text\undefined \let\text\hbox \fi \newdimen\lastlinewidth % does not work at all % % \def\setlastlinewidth % {\resetlastlinewidth % \ifmmode\else\ifhmode\else\ifoptimizedisplayspacing % \bgroup % \forgetdisplayskips % $$\global\lastlinewidth\predisplaysize$$ % \vskip-\baselineskip % \egroup % \fi\fi\fi} % test \par \dorecurse{10}{test } \moveformula \startformula test \stopformula test \endgraf % test \par \dorecurse{10}{test } \startformula test \stopformula test \endgraf % \dorecurse{30}{\bpar \dorecurse\recurselevel{test } \epar \startformula formula \stopformula} \def\setlastlinewidth {\resetlastlinewidth \ifoptimizedisplayspacing\ifmmode\else\ifhmode \bgroup \forgetdisplayskips \displaywidowpenalty\widowpenalty % brrr, else widowpenalty does not work \everymath \emptytoks \everydisplay\emptytoks $$\strut\global\lastlinewidth\predisplaysize$$ \vskip-\lineheight \vskip\zeropoint \egroup \fi\fi\fi} \def\resetlastlinewidth {\global\lastlinewidth\zeropoint\relax} % not here: \appendtoks \setlastlinewidth \to \everyendofpar %D moved from main-001 %\def\EveryMathPar{\EveryPar} % %\newevery \everymath \EveryMath \abovedisplayskip = \zeropoint \abovedisplayshortskip = \zeropoint % evt. 0pt minus 3pt \belowdisplayskip = \zeropoint \belowdisplayshortskip = \zeropoint % evt. 0pt minus 3pt \predisplaypenalty = \zerocount \postdisplaypenalty = \zerocount % -5000 gaat mis, zie penalty bij \paragraaf % we don't use the skip's \def\displayskipsize#1#2% obsolete {\ifdim\ctxparskip>\zeropoint #1\ctxparskip\!!plus#2\ctxparskip\!!minus#2\ctxparskip\relax \else #1\lineheight\!!plus#2\lineheight\!!minus#2\lineheight\relax \fi} \def\displayskipfactor {1.0} % obsolete \def\displayshortskipfactor {0.8} % obsolete \def\displayskipgluefactor {0.3} % obsolete \def\displayshortskipgluefactor {0.2} % obsolete \def\abovedisplayskipsize% obsolete {\displayskipsize\displayskipfactor\displayskipgluefactor} \def\belowdisplayskipsize% obsolete {\displayskipsize\displayskipfactor\displayskipgluefactor} \def\abovedisplayshortskipsize% obsolete {\displayskipsize\displayshortskipfactor\displayshortskipgluefactor} \def\belowdisplayshortskipsize% obsolete {\displayskipsize\displayshortskipfactor\displayshortskipgluefactor} \def\forgetdisplayskips % to do {\abovedisplayskip \zeropoint \belowdisplayskip \zeropoint \abovedisplayshortskip\zeropoint \belowdisplayshortskip\zeropoint} \definenumber % \definelabel [\v!formula] [\c!text=\v!formula, \c!way=\@@fmway, \c!blockway=\@@fmblockway, \c!location=\v!intext, \c!conversion=\@@fmconversion] \def\setupformulas {\dodoubleargument\getparameters[\??fm]} \newconditional\handleformulanumber \newconditional\incrementformulanumber \def\formuladistance{\formulaparameter\c!distance} \def\doformulareference#1#2% {\doifsomething{#1}{\doifnotinset{#1}{+,-}{\rawreference\s!for{#1}{#2}}}} \def\dododoformulanumber#1#2#3#4% (#1,#2)=outer(ref,sub) (#3,#4)=inner(ref,sub) {\hbox\bgroup \ifconditional\handleformulanumber \ifconditional\incrementformulanumber \incrementnumber[\v!formula]% \fi \makesectionnumber[\v!formula]% \setbox0\hbox{\ignorespaces#2\unskip}% \ifdim\wd0>\zeropoint \edef\hetsubnummer{\@@fnseparator#2}%AM: was \edef\hetsubnummer{#2}% \else \let\hetsubnummer\empty \fi \doformulareference{#1}{\composedsectionnumber\hetsubnummer}% \setbox0\hbox{\ignorespaces#4\unskip}% \ifdim\wd0>\zeropoint \edef\hetsubnummer{\@@fnseparator#4}%AM: was \edef\hetsubnummer{#4}% \fi \doformulareference{#3}{\composedsectionnumber\hetsubnummer}% \doflushformulalistentry{\composedsectionnumber\hetsubnummer}% \rm % nodig ? \doif{\formulaparameter\c!location}\v!right{\hskip\formuladistance}% \@@fmnumbercommand {\dostartattributes\??fm\c!numberstyle\c!numbercolor \strut \@@fmleft \preparefullnumber\??fm\composedsectionnumber\preparednumber \labeltexts\v!formula {\ignorespaces\preparednumber\ignorespaces\hetsubnummer\unskip}% \@@fmright \dostopattributes}% \doif{\formulaparameter\c!location}\v!left{\hskip\formuladistance}% \fi \egroup} \def\dodoformulanumber[#1][#2][#3]% {\doquadruplegroupempty\dododoformulanumber{#1}{#2}{#3}} \def\doformulanumber {\dotripleempty\dodoformulanumber} \setvalue{\e!start\v!formula}{\dostartformula{}} \setvalue{\e!stop \v!formula}{\dostopformula} \def\definieerformule {\dodoubleempty\dodefinieerformule} \def\dodefinieerformule[#1][#2]% {\doifsomething{#1} {\copyparameters [\??fm#1][\??fm] [\c!spacebefore,\c!spaceafter,\c!grid, \c!leftmargin,\c!rightmargin,\c!margin, \c!indentnext,\c!alternative, \c!strut,\c!align,\c!distance]% \setupformulas[#1][#2]% \setvalue{\e!start#1\v!formula}{\dostartformula{#1}}% \setvalue{\e!stop #1\v!formula}{\dostopformula}}} \newtoks \everysetupformulas \relax % we need a hook for extensions in modules \def\setupformulas {\dodoubleempty\dosetupformulas} \def\dosetupformulas[#1][#2]% {\ifsecondargument \getparameters[\??fm#1][#2]% \else \getparameters[\??fm][#1]% \fi \the\everysetupformulas} \def\formulaparameter#1% {\csname\??fm\currentformula#1\endcsname} \setupformulas [\c!way=\@@nrway, \c!blockway=, \c!sectionnumber=\@@nrsectionnumber, \c!conversion=\v!numbers, \c!location=\v!right, \c!left=(, \c!right=), \c!spacebefore=, \c!spaceafter=\@@fmspacebefore, \c!leftmargin=\!!zeropoint, \c!rightmargin=\!!zeropoint, \c!margin=, \c!indentnext=\v!no, \c!alternative=\s!default, \c!align=, \c!strut=\v!no, \c!separator=\@@koseparator, \c!distance=1em] \def\currentformula {} \def\predisplaysizethreshhold{2em} % was 3em \def\leftdisplayskip {\leftskip} \def\rightdisplayskip {\rightskip} \def\leftdisplaymargin {\formulaparameter\c!leftmargin} \def\rightdisplaymargin {\formulaparameter\c!rightmargin} \def\displaygridsnapping{\formulaparameter\c!grid} \def\beforedisplayspace {\doifnot{\formulaparameter\c!spacebefore}\v!none{\blank[\formulaparameter\c!spacebefore]}} \def\afterdisplayspace {\doifnot{\formulaparameter\c!spaceafter }\v!none{\blank[\formulaparameter\c!spaceafter ]}} \def\setpredisplaysize#1% {\predisplaysize#1\relax \ifdim\predisplaysize<\maxdimen \ifdim\predisplaysize>\zeropoint \advance\predisplaysize \predisplaysizethreshhold \fi \advance\predisplaysize \displayindent % needed ? \ifdim\predisplaysize>\hsize \predisplaysize\hsize \fi \else \predisplaysize\zeropoint \fi} \def\setdisplaydimensions {\displayindent\leftdisplayskip \advance\displayindent\leftdisplaymargin \displaywidth\hsize % \setlocalhsize % \displaywidth\localhsize \ifdim\hangindent>\zeropoint \advance\displayindent\hangindent \else \advance\displaywidth\hangindent \fi \advance\displaywidth-\displayindent \advance\displaywidth-\rightdisplayskip \advance\displaywidth-\rightdisplaymargin \hsize\displaywidth} % new, else overfull in itemize \newif\ifoptimizedisplayspacing \def\dostartformula#1% {\dodoubleempty\dodostartformula[#1]} \newskip\formulaparskip \newskip\formulastrutht \newskip\formulastrutdp % hm, invoke otr in hmode in order to move skips to mvl, could be an option %D \startbuffer %D \startformula[9pt] x = 1 \stopformula %D \startformula[7pt] x = 1 \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer \def\dodostartformula[#1][#2]% setting leftskip adaption is slow ! {% todo: test first % % \ifdim\lastskip>\zeropoint % \resetlastlinewidth % else problems with in between stuff without \epar % \fi \bgroup % HERE \the\everybeforedisplayformula \formulaparskip\parskip \formulastrutdp\strutdepth \formulastrutht\strutheight \switchtoformulabodyfont[#2]% \parskip\formulaparskip \def\currentformula{#1}% % may look better in itemizations \doif{\formulaparameter\c!option}\v!middle {\def\leftdisplayskip{\zeropoint}% \def\rightdisplayskip{\zeropoint}}% % this was an experiment \doifsomething{\formulaparameter\c!margin}% so we test first {\dosetleftskipadaption{\formulaparameter\c!margin}% \edef\leftdisplaymargin{\the\leftskipadaption}}% overloaded \long\def\dostartformula##1{\bgroup\let\dostopformula\egroup}% \freezedimenmacro\leftdisplayskip \freezedimenmacro\rightdisplayskip \freezedimenmacro\leftdisplaymargin \freezedimenmacro\rightdisplaymargin \freezedimenmacro\predisplaysizethreshhold \forgetdisplayskips \ifoptimizedisplayspacing \ifdim\lastlinewidth>\zeropoint \abovedisplayshortskip-\strutht\relax \fi \else \resetlastlinewidth \fi \getvalue{\e!start\formulaparameter\c!alternative\v!formula}} \def\switchtoformulabodyfont{\switchtobodyfont} \setvalue{\v!formula}{\dosingleempty\doformula} \def\doformula[#1]#2% {\begingroup \switchtoformulabodyfont[#1]% % not : \def\doformula[##1]##2{\mathematics{##2}}% \mathematics{#2}% \endgroup} \let\doplaceformulanumber\empty \def\dostopformula {\doplaceformulanumber \getvalue{\e!stop\formulaparameter\c!alternative\v!formula}% \resetlastlinewidth \nonoindentation \dochecknextindentation{\??fm\currentformula}% \egroup \hangafter\minusone % added for side floats \hangindent\zeropoint % added for side floats \setfalse\handleformulanumber \dorechecknextindentation} % here ? \newif\ifinformula \def\startdisplaymath {\ifgridsnapping \beforedisplayspace \snapmathtogrid\vbox \bgroup \informulatrue %\forgetall % breaks side floats \else \bgroup \parskip\formulaparskip % ! ! \informulatrue %\forgetall % otherwise backgrounds fail \ifdim\lastskip<\zeropoint\else \par \ifvmode \ifdim\parskip>\zeropoint\relax \whitespace \vskip-\parskip % kind of forces and cancels again \fi \fi \fi \doif\displaygridcorrection{-\v!top}{\kern-\strutht}% new, currently only option/default \beforedisplayspace \par \ifvmode \ifindentfirstparagraph % tricky, probably needs more testing \prevdepth-\maxdimen % texbook pagina 79-80 % otherwise problems at the top of a page, don't remove: \verticalstrut \vskip-\struttotal \vskip-\baselineskip \fi \fi \fi $$\setdisplaydimensions \setpredisplaysize\lastlinewidth \startinnermath} \def\stopdisplaymath {\stopinnermath $$% \ifgridsnapping \egroup \afterdisplayspace \else \par\ifvmode\ifdim\parskip>\zeropoint\whitespace\vskip-\parskip\fi\fi \afterdisplayspace \egroup \fi \globallet\displaylinecorrection\empty \gdef\displaygridcorrection{\displaygridsnapping}} \newif\ifclipdisplaymath \clipdisplaymathtrue \def\displaymathclipfactor{1.1} \def\snapmathtogrid % to do \dp {\dowithnextbox {\bgroup \donefalse \ifclipdisplaymath \ifdim\nextboxht<\displaymathclipfactor\lineheight \donetrue \fi \fi \ifdone \nextboxht\lineheight \else \getnoflines\nextboxht \setbox\nextbox\vbox to \noflines\lineheight {\vfill\flushnextbox\vfill}% \setbox\nextbox\hbox{\lower\strutdepth\flushnextbox}% \fi \snaptogrid[\displaygridcorrection]\hbox{\flushnextbox}% \egroup}} \def\displaygridcorrection{\displaygridsnapping} \let\displaygridcorrection\empty \def\moveformula {\dosingleempty\domoveformula} \def\domoveformula[#1]% brr gaat mogelijk fout {\iffirstargument \xdef\displaygridcorrection{#1}% \else \gdef\displaygridcorrection{-\v!top}% handy with short preline \fi \globallet\displaylinecorrection\displaygridcorrection} \let\startinnermath\empty \let\stopinnermath \empty \def\defineformulaalternative {\dotripleargument\dodefineformulaalternative} \def\dodefineformulaalternative[#1][#2][#3]% {\setvalue{\e!start#1\v!formula}{#2}% \setvalue{\e!stop #1\v!formula}{#3}} \defineformulaalternative[\s!default][\startdisplaymath][\stopdisplaymath] % sp = single line paragraph sd = single line display % mp = multi line paragraph md = multy line display \defineformulaalternative[single][\startdisplaymath][\stopdisplaymath] \defineformulaalternative[multi] [\startdisplaymath][\stopdisplaymath] \definieerformule [sp] [\c!spacebefore=\v!none,\c!spaceafter=\v!none, \c!indentnext=\v!no, \c!alternative=single] \definieerformule [sd] [\c!spacebefore=\v!none,\c!spaceafter=\v!none, \c!indentnext=\v!yes, \c!alternative=single] \definieerformule [mp] [\c!indentnext=\v!no, \c!alternative=multi] \definieerformule [md] [\c!indentnext=\v!yes, \c!alternative=multi] % \defineformulaalternative[multi][\begindmath][\enddmath] % % \fakewords{20}{40}\epar % \placeformula {a} $$ \fakespacingformula $$ % \fakewords{20}{40}\epar % \placeformula {b} \startformule \fakespacingformula \stopformule % \placeformula {b} \startformule \fakespacingformula \stopformule % \fakewords{20}{40}\epar % \placeformula {c} \startmdformule \fakespacingformula \stopmdformule % \placeformula {c} \startmdformule \fakespacingformula \stopmdformule % \fakewords{20}{40}\epar % \placeformula {d} \startmpformule \fakespacingformula \stopmpformule % \placeformula {d} \startmpformule \fakespacingformula \stopmpformule % \fakewords{20}{40}\epar % \placeformula {e} \startsdformule \fakespacingformula \stopsdformule % \placeformula {e} \startsdformule \fakespacingformula \stopsdformule % \fakewords{20}{40}\epar % \placeformula {f} \startspformule \fakespacingformula \stopspformule % \placeformula {f} \startspformule \fakespacingformula \stopspformule % \fakewords{20}{40} \def\placeformula {\settrue\incrementformulanumber \dodoubleempty\doplaceformula} \def\placesubformula {\setfalse\incrementformulanumber \dodoubleempty\doplaceformula} %D \macros %D {setupsubformulas, startsubformulas} %D %D New code (by Aditya Mahajan / cleaned up by HH, please check): % \setupsubformulas[conversion=romannumerals] % % \placeformula % \startsubformulas[Maxwell] % \startformulas % \startformula \startalign % \NC \nabla\cdot\bf E \NC = \frac{\rho}{\varepsilon_0} \NR[Maxwell 1] % \NC \nabla\times\bf E \NC = - \frac{\partial\bf B}{\partial t} \NR[Maxwell II] % \stopalign \stopformula % \startformula \startalign % \NC \nabla\cdot \bf B \NC = 0 \NR[Maxwell III] % \NC \nabla\times\bf B \NC = \mu_0{\bf j}+\varepsilon_0\mu_0\frac{\partial\bf E}{\partial t} \NR[Maxwell IV] % \stopalign \stopformula % \stopformulas % \stopsubformulas % % Maxwell : \in [Maxwell] and II : \in [Maxwell II] \def\setupsubformulas {\dodoubleargument\getparameters[\??fn]} \definenumber[\v!formula*] \def\subformulaconversion % #1 {\getnumber[\v!formula*]\@@fnseparator\convertnumber\@@fnconversion} % #1 \defineconversion[\v!subformula][\subformulaconversion] \def\startsubformulas {\dosingleempty\dostartsubformulas} \def\dostartsubformulas[#1]% {\incrementnumber[\v!formula]% \makesectionnumber[\v!formula]% \doflushformulalistentry{\composedsectionnumber}% \doformulareference{#1}\composedsectionnumber \expanded{\setupnumber [\v!formula*] [\c!start={\rawnumber[\v!formula]}, \c!way=\@@fmway, \c!conversion=\@@fmconversion]}% \bgroup \savenumber[\v!formula]% \setupformulas [\c!conversion=\v!subformula, \c!way=\v!by\v!text]% \resetnumber [\v!formula]} \def\stopsubformulas {\restorenumber[\v!formula]% \egroup \resetlastlinewidth \nonoindentation \dochecknextindentation\??fn \dorechecknextindentation} % here ? %D Named subformulas \def\startnamedsubformulas {\dosingleempty\dostartnamedsubformulas} \def\dostartnamedsubformulas[#1]#2% {\setformulalistentry{#2}% \startsubformulas[#1]} \def\stopnamedsubformulas {\stopsubformulas} \setupsubformulas [\c!conversion=\v!character, %\c!separator=\@@fmseparator, \c!separator=,% AM: for compatibility with \placesubformula \c!indentnext=\@@fmindentnext] %D Experimental goodie: %D %D \startbuffer %D \placelist[formula][criterium=text] \blank[2*big] %D \placenamedformula[one]{first} \startformula a = 1 \stopformula \endgraf %D \placeformula \startformula a = 2 \stopformula \endgraf %D \placenamedformula {second} \startformula a = 3 \stopformula \endgraf %D \stopbuffer %D %D \typebuffer \getbuffer \definelist[\v!formula] \global\let\doflushformulalistentry\gobbleoneargument \def\setformulalistentry#1% {\gdef\doflushformulalistentry##1% {\expanded{\writetolist[\v!formula]{##1}}{#1}% \global\let\doflushformulalistentry\gobbleoneargument}} \def\placenamedformula {\dosingleempty\doplacenamedformula} \def\doplacenamedformula[#1]#2% {\iffirstargument \def\next{\placeformula[#1]}% \else \let\next\placeformula \fi \setformulalistentry{#2}% \next} %D The implementation of placement is a bit ugly: \def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces {\def\redoplaceformula {\bgroup \ifx\next\bgroup \egroup \@EA\moreplaceformula % [ref]{} \else \let\nextnext$% no def \ifx\next\nextnext \egroup \@EAEAEA\dispplaceformula % [ref]$$ \else \egroup \@EAEAEA\dodoplaceformula % [ref]\start \fi \fi[#1]{}}% \futurelet\next\redoplaceformula} \long\def\moreplaceformula[#1]#2#3#4% #2 dummy #4 gobbles spaces {\def\redoplaceformula {\bgroup \let\nextnext$% no def \ifx\next\nextnext \egroup \@EA\dispplaceformula % [ref]$$ \else \egroup \@EA\dodoplaceformula % [ref]\start \fi [#1]{#3}}% \futurelet\next\redoplaceformula#4} \let\startplaceformula\placeformula \let\stopplaceformula \relax \def\startformulas#1\stopformulas % new / to be internationalized {\bgroup \forgetdisplayskips \startdisplaymath \setlocalhsize \long\def\startformula##1\stopformula {\advance\scratchcounter\plusone}% \scratchcounter\zerocount #1% preroll \ifcase\scratchcounter\else \divide \hsize \scratchcounter \fi \hbox to \localhsize \bgroup \hss \def\normalstartformula{\vskip-\strutdepth$$}% i hate this \def\normalstopformula {$$}% \def\startformula {$\vcenter\bgroup\normalstartformula}% \def\stopformula {\normalstopformula\egroup$\hss}% #1% \egroup \stopdisplaymath \egroup \hangafter\minusone % added for side floats \hangindent\zeropoint} % added for side floats \def\dispplaceformula[#1]#2$$#3$$% {\dodoplaceformula[#1]{#2}\dostartformula{}#3\dostopformula} \let\donestedformulanumber\gobbletwoarguments \def\dodoplaceformula[#1]#2% messy, needs a clean up {\doifelse{#1}{-} {\setfalse\handleformulanumber} {\doifelse{#2}{-} {\setfalse\handleformulanumber} {\settrue\handleformulanumber}}% \ifconditional\handleformulanumber \def\formulanumber {%\global\let\subformulanumber\doformulanumber % no, bug \doformulanumber[#1][#2]}% \def\donestedformulanumber##1##2% {\doifsomething{##1} {\doifelse{##1}{+}{\doformulanumber[#1]}{\doformulanumber[##1]}[##2][]{}}}% \def\subformulanumber {\setfalse\incrementformulanumber \formulanumber}% \gdef\doplaceformulanumber {\global\let\doplaceformulanumber\empty \doifelse\@@fmlocation\v!left {\normalleqno{\doformulanumber[#1][#2][]{}}} {\normalreqno{\doformulanumber[#1][#2][]{}}}}% \else \def\formulanumber{\doformulanumber[#1][#2]}% \let\donestedformulanumber\gobbletwoarguments \let\subformulanumber\doformulanumber % was \global \global\let\doplaceformulanumber\empty \fi} %D We need a hook into the plain math alignment macros %D %D \starttyping %D \displaylines %D \eqalignno %D \eqalignno %D \stoptyping %D %D Otherwise we get a missing \type {$$} error reported. \def\resetdisplaymatheq {\let\normalleqno\relax \let\leqno\relax \let\normalreqno\relax \let\eqno \relax \let\doplaceformulanumber\empty} %D The next code is derived from plain \TEX. \newcount\interdisplaylinepenalty \interdisplaylinepenalty=100 \newif\ifdt@p \def\displ@y {\global\dt@ptrue \openup\displayopenupvalue % was \openup\jot \everycr {\noalign {\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-\thousandpoint \vskip-\lineskiplimit \vskip\normallineskiplimit \fi \else \penalty\interdisplaylinepenalty \fi}}} \let\normaldispl@y\displ@y \def\displ@y{\resetdisplaymatheq\normaldispl@y} \def\m@th{\mathsurround\zeropoint} % obsolete %D Here we implement a basic math alignment mechanism. Numbers %D are also handled. The macros \type {\startinnermath} and %D \type {\stopinnermath} can be overloaded in specialized %D modules. \def\startinnermath {\getvalue{\e!start\??fm\formulaparameter\c!align}} \def\stopinnermath {\getvalue{\e!stop \??fm\formulaparameter\c!align}} \def\mathinnerstrut {\doif{\formulaparameter\c!strut}\v!yes\strut} \long\def\defineinnermathhandler#1#2#3% {\setvalue{\e!start\??fm#1}{#2}% \setvalue{\e!stop \??fm#1}{#3}} \newif\iftracemath \def\mathhbox {\iftracemath\ruledhbox\else\hbox\fi} \chardef\mathraggedstatus=0 % normal left center right \chardef\mathnumberstatus=0 % nothing normal shift_right \let\mathnumbercorrection\!!zeropoint \def\startmathbox#1% {\hsize\displaywidth \global\chardef\mathnumberstatus\plusone \chardef\mathraggedstatus#1\relax \let\mathnumbercorrection\!!zeropoint \global\let\@eqno \empty \def\eqno {\gdef\@eqno }% \global\let\@leqno\empty \def\leqno{\gdef\@leqno}% % added \let\normalreqno\eqno \let\normalleqno\leqno % added \doplaceformulanumber \setbox\scratchbox\mathhbox to \displaywidth\bgroup \mathinnerstrut $% \displaystyle \ifcase\mathraggedstatus\or\hfill\or\hfill\fi} \def\llappedmathno {\ifcase\mathraggedstatus\or \@eqno \or \llap{\@eqno}% \or \llap{\@eqno}% \fi} \def\rlappedmathno {\ifcase\mathraggedstatus\or \rlap{\@leqno}% \or \rlap{\@leqno}% \or \@leqno \fi} \def\stopmathbox {$% \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi \egroup \setbox0\hbox{\unhcopy\scratchbox}% \scratchdimen\wd0 \ifdim\scratchdimen>\displaywidth \donetrue \else \donefalse \fi \hbox to \displaywidth\bgroup \ifcase\mathnumberstatus \box\scratchbox \or \ifx\@leqno\empty \ifx\@eqno\empty \box\scratchbox \else \ifdone \vbox{\box\scratchbox\hbox to \displaywidth{\hss\llappedmathno}}% \else \hss\box\scratchbox\llappedmathno % hss makes room for number \fi \fi \else \ifdone \vbox{\hbox to \displaywidth{\rlappedmathno\hss}\box\scratchbox}% \else \rlappedmathno\box\scratchbox\hss % hss makes room for number \fi \fi \or \hskip\mathnumbercorrection \box\scratchbox \hss \else \box\scratchbox \fi \egroup} \defineinnermathhandler\v!left {\startmathbox\plusone }{\stopmathbox} \defineinnermathhandler\v!middle {\startmathbox\plustwo }{\stopmathbox} \defineinnermathhandler\v!right {\startmathbox\plusthree}{\stopmathbox} \defineinnermathhandler\v!flushleft {\startmathbox\plusthree}{\stopmathbox} \defineinnermathhandler\v!center {\startmathbox\plustwo }{\stopmathbox} \defineinnermathhandler\v!flushright{\startmathbox\plusone }{\stopmathbox} %D [The examples below are in english and don't process in the %D documentation style, which will be english some day.] %D %D Normally a formula is centered, but in case you want to %D align it left or right, you can set up formulas to behave %D that way. Normally a formula will adapt is left indentation %D to the environment: %D %D \startbuffer %D \fakewords{20}{40}\epar %D \startitemize %D \item \fakewords{20}{40}\epar %D \placeformula \startformula \fakeformula \stopformula %D \item \fakewords{20}{40}\epar %D \stopitemize %D \fakewords{20}{40}\epar %D \stopbuffer %D %D % \getbuffer %D %D In the next examples we explicitly align formulas to the %D left (\type {\raggedleft}), center and right (\type %D {\raggedright}): %D %D \startbuffer %D \setupformulas[align=left] %D \startformula\fakeformula\stopformula %D \setupformulas[align=middle] %D \startformula\fakeformula\stopformula %D \setupformulas[align=right] %D \startformula\fakeformula\stopformula %D \stopbuffer %D %D \typebuffer %D %D Or in print: %D %D % {\getbuffer} %D %D With formula numbers these formulas look as follows: %D %D \startbuffer %D \setupformulas[align=left] %D \placeformula \startformula\fakeformula\stopformula %D \setupformulas[align=middle] %D \placeformula \startformula\fakeformula\stopformula %D \setupformulas[align=right] %D \placeformula \startformula\fakeformula\stopformula %D \stopbuffer %D %D % {\getbuffer} %D %D This was keyed in as: %D %D \typebuffer %D %D When tracing is turned on (\type {\tracemathtrue}) you can %D visualize the bounding box of the formula, %D %D % {\tracemathtrue\getbuffer} %D %D As you can see, the dimensions are the natural ones, but if %D needed you can force a normalized line: %D %D \startbuffer %D \setupformulas[strut=yes] %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer %D %D This time we get a more spacy result. %D %D % {\tracemathtrue\getbuffer} %D %D We will now show a couple of more settings and combinations %D of settings. In centered formulas, the number takes no space %D %D \startbuffer %D \setupformulas[align=middle] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D %D You can influence the placement of the whole box with the %D parameters \type {leftmargin} and \type {rightmargin}. %D %D \startbuffer %D \setupformulas[align=right,leftmargin=3em] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D %D \setupformulas[align=left,rightmargin=1em] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D %D You can also inherit the margin from the environment. %D %D \startbuffer %D \setupformulas[align=right,margin=standard] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D %D The distance between the formula and the number is only %D applied when the formula is left or right aligned. %D %D \startbuffer %D \setupformulas[align=left,distance=2em] %D \startformula \fakeformula \stopformula %D \placeformula \startformula \fakeformula \stopformula %D \stopbuffer %D %D \typebuffer % {\tracemathtrue\getbuffer} %D \macros %D {big..} %D %D Because they are related to the bodyfontsize, we redefine %D some \PLAIN\ macros. \def\@@dobig#1#2% {{\hbox{$\left#2\vbox\!!to#1\bodyfontsize{}\right.\nulldelimiterspace\zeropoint\relax\mathsurround\zeropoint$}}} \def\big {\@@dobig{0.85}} \def\Big {\@@dobig{1.15}} \def\bigg{\@@dobig{1.45}} \def\Bigg{\@@dobig{1.75}} %D \macros %D {bordermatrix} %D %D We already redefined \type {\bordermatrix} in \type %D {font-ini}. %D \macros %D {setuptextformulas} %D %D This command sets up in||line math. Most features deals %D with grid snapping and are experimental. \newevery \everysetuptextformulas \relax \def\setuptextformulas {\dosingleempty\dosetuptextformulas} \def\dosetuptextformulas[#1]% {\getparameters[\??mt][#1]% \the\everysetuptextformulas} %D \macros %D {super, sub} %D %D \TEX\ uses \type{^} and \type{_} for entering super- and %D subscript mode. We want however a bit more control than %D normally provided, and therefore provide \type {\super} %D and \type{sub}. \global\let\normalsuper=^ \global\let\normalsuber=_ \newcount\supersubmode \newevery\everysupersub \EverySuperSub \appendtoks \advance\supersubmode \plusone \to \everysupersub \appendtoks \gridsupsubstyle \to \everysupersub \appendtoks \doifelse\@@mtsize\v!small {\let\gridsupsubstyle \scriptscriptstyle \let\gridsupsubbodyfont \setsmallbodyfont}% {\let\gridsupsubstyle \scriptstyle \let\gridsupsubbodyfont \relax}% \to \everysetuptextformulas \setuptextformulas [\c!size=\v!normal] \def\dogridsupsub#1#2% {\begingroup \setbox\nextbox\iftracegridsnapping\ruledhbox\else\hbox\fi {\gridsupsubbodyfont $\strut^{\the\everysupersub#1}_{\the\everysupersub#2}$}% \nextboxht\strutheight \nextboxdp\strutdepth \flushnextbox \endgroup} \def\gridsupsub {\ifconditional\crazymathsnapping \ifgridsnapping \@EAEAEA\dogridsupsub \else \@EAEAEA\normalsupsub \fi \else \@EA\normalsupsub \fi} \def\normalsupsub#1#2% {^{\the\everysupersub#1}_{\the\everysupersub#2}} \appendtoks \let\gridsupsubstyle \relax \let\gridsupsubbodyfont\relax \let\gridsupsub \normalsupsub \to \everydisplay \def\super#1{^{\the\everysupersub#1}} \def\suber#1{_{\the\everysupersub#1}} \def\supsub#1#2{\super{#1}\suber{#2}} \def\subsup#1#2{\suber{#1}\super{#2}} %\def\super#1{\gridsupsub{#1}{}} % %\def\suber#1{\gridsupsub{}{#1}} % % %\def\supsub#1#2{\gridsupsub{#1}{#2}} %\def\subsup#1#2{\gridsupsub{#2}{#1}} \def\gridsuper#1{\gridsupsub{#1}{}} \def\gridsuber#1{\gridsupsub{}{#1}} % \let\sup\super % math char % \let\sub\suber % test set: % % \startbuffer % \sform{x\frac{1}{2}} % \sform{x\sup{\frac{1}{2}} + x\sup{2} + 2} % \sform{x\supsub{\frac{1}{2}}{\frac{1}{2}} + x\sup{2} + 2} % \stopbuffer % % \typebuffer % % \startlines % \getbuffer % \stoplines % % \startbuffer % $x\frac{1}{2}$ % $x\sup{\frac{1}{2}} + x^2 + 2$ % $x\supsub{\frac{1}{2}}{\frac{1}{2}} + x^2 + 2$ % \stopbuffer % % \typebuffer % % \start % \enablesupersub % \enableautomath % \startlines % \getbuffer % \stoplines % \stop %D \macros %D {enablesupersub,enablesimplesupersub} %D %D We can let \type {^} and \type {_} act like \type {\super} %D and \type {\sub} by saying \type {\enablesupersub}. \bgroup \catcode`\^=\@@active \catcode`\_=\@@active \gdef\enablesupersub {\catcode`\^=\@@active \def^{\ifmmode\expandafter\super\else\expandafter\normalsuper\fi}% \catcode`\_=\@@active \def_{\ifmmode\expandafter\suber\else\expandafter\normalsuber\fi}} \egroup %D \macros %D {enableautomath} %D %D The next one can be dangerous, but handy in controlled %D situations. \bgroup \catcode`\$=\active \gdef\enableautomath {\catcode`\$=\active \def$##1${\snappedinlineformula{##1}}} % \gdef\enableautomath % {\catcode`\$=\active % \def${\doifnextcharelse$\doautodmath\doautoimath}% % \def\doautoimath##1${\snappedinlineformula{##1}}% % \def\doautodmath$##1$${\startformula##1\stopformula}} \egroup %D \macros %D {...} %D %D New and experimental: snapping big inline math! \newconditional\halfcrazymathlines % \settrue\halfcrazymathlines \newconditional\crazymathsnapping % \settrue\crazymathsnapping \appendtoks \doifelse\@@mtgrid\v!yes \settrue\setfalse\crazymathsnapping \doifelse\@@mtstep\v!halfline\settrue\setfalse\halfcrazymathlines \to \everysetuptextformulas \setuptextformulas [\c!grid=\v!yes, \c!step=\v!line] \newcount\crazymathhack \let\lastcrazymathline \!!zeropoint \let\lastcrazymathpage \!!zerocount \let\lastcrazymathprelines \!!zerocount \let\lastcrazymathpostlines\!!zerocount \def\crazymathtag{amh:\the\crazymathhack} \def\crazytexttag{\v!text:\lastcrazymathpage} \def\crazymathindent{\hskip\MPx\crazymathtag\hskip-\MPx\crazytexttag} \def\flushcrazymathbox {\nextboxht\strutheight \nextboxdp\strutdepth \hbox{\iftracegridsnapping\ruledhbox\fi{\flushnextbox}}} % possible pdftex bug: % % \dorecurse{100}{gest \vadjust {\strut} \par} \page % \dorecurse{100}{gest \vadjust pre {\strut} \par} \page % % duplicate depth compensation with pre \def\snappedinlineformula {\dosingleempty\dosnappedinlineformula} %D \starttabulate[|Tl|l|] %D \NC - \NC half lines \NC \NR %D \NC + \NC full lines \NC \NR %D \NC = \NC force \NC \NR %D \NC < \NC force, minus pre \NC \NR %D \NC > \NC force, minus post \NC \NR %D \stoptabulate \newif\if!!donee \newif\if!!donef \def\inlinemathmargin{1pt} \settrue\autocrazymathsnapping % FROM NOW ON, CHANGES AS OPTIONS % TODO: SKYLINE (PREV LINE POS SCAN) \def\dosnappedinlineformula[#1]#2% {\ifvmode\dontleavehmode\fi % tricky \strut % prevents funny space at line break \begingroup % interesting: \bgroup can make \vadjust disappear \ifconditional\crazymathsnapping \ifgridsnapping \ifx\pdftexversion\undefined \donefalse \else \checktextbackgrounds % we need pos tracking, to be made less redundant \donetrue \fi \else \donefalse \fi \else \donefalse \fi \!!doneafalse % forced or not auto \!!donebfalse % too heigh \!!donecfalse % too low \!!donedfalse % less before \!!doneefalse % less after \ifdone \setbox\nextbox\hbox{$#2$}% \iftracegridsnapping \setbox\nextbox\ruledhbox {\incolortrue\localcolortrue \backgroundline[gray]{\showstruts\strut\flushnextbox}}% \fi \def\docommand##1% {\doif{##1}-{\settrue \halfcrazymathlines}% \doif{##1}+{\setfalse\halfcrazymathlines}% \doif{##1}={\!!doneatrue}% \doif{##1}<{\!!donedtrue}% \doif{##1}>{\!!doneetrue}}% \processcommalist[#1]\docommand \if!!doneb \if!!donec \else \setfalse\halfcrazymathlines \fi \else \if!!donec \setfalse\halfcrazymathlines \fi \fi \donefalse \if!!donea \donetrue \scratchdimen \nextboxht \advance\scratchdimen .5\lineheight \nextboxht\scratchdimen \scratchdimen \nextboxdp \advance\scratchdimen .5\lineheight \nextboxdp\scratchdimen \else\ifdim\nextboxht>\strutht \donetrue \else\ifdim\nextboxdp>\strutdp \donetrue \fi\fi\fi \ifconditional\autocrazymathsnapping \else \if!!donea \else % don't compensate, just snap to strut \donefalse % signal for next else, snap line to strut \!!doneatrue \fi \fi \fi \ifdone % analyze height \scratchdimen\inlinemathmargin \advance\scratchdimen \strutht \ifdim\nextboxht<\scratchdimen \else \!!donebtrue \fi % analyze depth \scratchdimen\inlinemathmargin \advance\scratchdimen \strutdp \ifdim\nextboxdp<\scratchdimen \else \!!donectrue \fi % analyzed or forced \ifdone \global\advance\crazymathhack\plusone \donefalse \ifnum\MPp\crazymathtag=\lastcrazymathpage\relax \ifdim\MPy\crazymathtag=\lastcrazymathline\relax \donetrue \fi \fi \ifnum\MPp\crazymathtag=\zerocount \donefalse \fi \ifdim\MPy\crazymathtag=\zeropoint \donefalse \fi \ifdone % same page and same line \else \global\let\lastcrazymathprelines \!!zerocount \global\let\lastcrazymathpostlines\!!zerocount \xdef\lastcrazymathpage{\MPp\crazymathtag}% \xdef\lastcrazymathline{\MPy\crazymathtag}% \fi \if!!doneb % \getrawnoflines\nextboxht \scratchdimen\nextboxht \advance\scratchdimen-\strutht \getnoflines\scratchdimen \if!!doned \advance\noflines\minusone \fi \scratchcounter\noflines \advance\noflines-\lastcrazymathprelines\relax \ifnum\noflines>\zerocount \xdef\lastcrazymathprelines{\the\scratchcounter}% \scratchdimen\noflines\lineheight \ifconditional\halfcrazymathlines \advance\scratchdimen-.5\lineheight \fi \advance\scratchdimen-\strutdepth \setbox\scratchbox\null \wd\scratchbox2\bodyfontsize \ht\scratchbox\scratchdimen \dp\scratchbox\strutdepth %%% top correction code (see below) \normalvadjust pre {%\allowbreak % sometimes breaks spacing \forgetall \crazymathindent \iftracegridsnapping \setbox\scratchbox\hbox {\incolortrue\localcolortrue\green \ruledhbox{\box\scratchbox}}% \fi \box\scratchbox \endgraf \nobreak}% \else\ifnum\scratchcounter>\zerocount \normalvadjust pre {\nobreak}% \fi\fi \fi \if!!donec % \getrawnoflines\nextboxdp \scratchdimen\nextboxdp \advance\scratchdimen-\strutdp \getnoflines\scratchdimen \if!!donee \advance\noflines\minusone \fi \scratchcounter\noflines \advance\noflines-\lastcrazymathpostlines\relax \ifnum\noflines>\zerocount \donetrue \else\ifnum\lastcrazymathpostlines=\zerocount \donetrue \else \donefalse \fi\fi \else \donefalse \fi \ifdone \xdef\lastcrazymathpostlines{\the\scratchcounter}% \ifnum\lastcrazymathpostlines=\zerocount \global\let\lastcrazymathpostlines\!!plusone \fi \hbox{\setposition\crazymathtag\flushcrazymathbox}% \scratchdimen\noflines\lineheight \advance\scratchdimen-\lineheight \advance\scratchdimen+\strutheight \ifdim\scratchdimen>\zeropoint \else \scratchdimen=\strutheight % todo : test for half lines \fi \ifconditional\halfcrazymathlines \advance\scratchdimen-.5\lineheight \fi \setbox\scratchbox\null \wd\scratchbox2\bodyfontsize \ht\scratchbox\scratchdimen \dp\scratchbox\strutdepth \normalvadjust {\forgetall \crazymathindent \iftracegridsnapping \setbox\scratchbox\hbox {\incolortrue\localcolortrue\color[blue]{\ruledhbox{\box\scratchbox}}}% \fi \box\scratchbox \endgraf % precaution: else we stick below the text bottom \ifconditional\halfcrazymathlines \allowbreak \else \vskip-\lineheight \vskip \lineheight \fi}% \else \hbox{\setposition\crazymathtag\flushcrazymathbox}% \fi \else \flushcrazymathbox \fi \else\if!!donea \flushcrazymathbox \else \mathematics{#2}% \fi\fi \endgroup} %%% top correction code %%% %%% correct for fuzzy top of page situations % % \scratchdimen\lastcrazymathprelines\lineheight % \advance\scratchdimen\MPy\crazymathtag % \advance\scratchdimen\lineheight % \advance\scratchdimen\topskip % \advance\scratchdimen-\strutheight % \dimen0=\MPy\crazytexttag % \advance\dimen0 \MPh\crazytexttag % \advance\scratchdimen-\dimen0\relax % % do we need correction at all % \ifdim\scratchdimen>\strutdepth\relax % \donefalse % \else\ifdim\scratchdimen<\zeropoint % \donefalse % \else % \donetrue % \fi\fi % % analysis done % \donefalse % \ifdone % \edef\crazymathcorrection{\the\scratchdimen}% % \advance\scratchdimen-\dp\scratchbox % \dp\scratchbox-\scratchdimen % \else % \let\crazymathcorrection\zeropoint % \fi % %%% %%% keep the previous code %%% \let\tform\mathematics \let\gform\snappedinlineformula % test set: % % \startbuffer % Crazy math \gform {1+x} or \gform {\dorecurse {100} {1+} 1 = % 101} and even gore crazy \gform {2^{2^2}_{1_1}} % again\dorecurse {20} { and again} \gform {\sqrt {\frac % {x^{5^5}} {\frac {1} {2}}}} even gore\dorecurse {50} { and % gore} \tform {\dorecurse {12} {\gform {\sqrt {\frac % {x^{5^5}} {3}}}+\gform {\sqrt {\frac {x^{5^5}} {\frac {1} % {2}}}}+}x=10}\dorecurse{20} { super crazy math}: \tform % {\dorecurse {30} {\gform {\sqrt {\frac {x^{5^5}} {3}}}+ % \gform {\sqrt {\frac {x^{5^5}} {\frac {1} {2}}}}+ }x = 10}, % and we're\dorecurse {20} { done}! % \stopbuffer % % \setupcolors[state=start] \setuppapersize[S6][S6] % % \showgrid \tracegridsnappingtrue \showstruts % % \starttext % \setuplayout[grid=yes,lines=15]\getbuffer \page % \setuplayout[grid=yes,lines=16]\getbuffer \page % \setuplayout[grid=yes,lines=17]\getbuffer \page % \setuplayout[grid=yes,lines=18]\getbuffer \page % \setuplayout[grid=yes,lines=19]\getbuffer \page % \stoptext % % test % % \startregels % \gform[<]{35 \cdot p^{\frac{3}{4}} = 70} % \gform{12{,}4 \cdot d^3 = 200} % \gform{a \cdot x^b}. % \gform{12x^6 \cdot \negative 3x^4} % \gform{\frac{12x^6}{\negative 3x^4}} % \gform{(4x^2)^3} % \gform{4x \sqrt{x} \cdot 3x^2} % \gform{\frac{2x^4}{4x \sqrt{x}}} % \gform{y = a \cdot x^b}. % \gform{y_1 = \frac{15x^2}{x}} % \gform{y_2 = x \cdot \sqrt{x}} % \gform{y_3 = \frac{6x^3}{x^2}} % \gform[<]{y_4 = \left(2x^2\right)^{\frac{1}{2}}} % \gform{y_1 = \frac{4x^5}{x^2}} % \gform{y_2 = 4 \cdot \sqrt{x}} % \gform{y_3 = 4x^3} % \gform{y_4 = \frac{100x}{\sqrt{x}}} % \gform[<]{y_5 = 4 \cdot x^{\frac{1}{2}}} % \gform{y_6 = \frac{1}{2} x \cdot 4x^2} % \gform{y_7 = 2 \cdot x^3} % \gform{y_8 = 100 \cdot x^{\frac{1}{2}}} % \gform{4x^8 \cdot 8x^3} % \gform{\frac{4x^8}{8x^3}} % \gform{\left(\negative3x^4\right)^3} % \gform{x^3 \sqrt{x} \cdot 3x^2} % \gform{\frac{6x^3}{x^2 \sqrt{x}}} % \gform{\frac{6}{2x^4}} % \gform{\frac{1}{3x^6}} % \gform{\frac{12x^8}{4x^{10}}} % \gform{\frac{4}{\sqrt{x}}} % \gform{\frac{1}{2x \sqrt{x}}} % \gform{\frac{2{,}25}{p} = 0{,}35} % \gform{4{,}50 + \frac{300}{k} = 4{,}70} % \gform{\frac{1200}{k+12} - 42 = 6} % \stopregels %D \macros %D {restoremathstyle} %D %D We can pick up the current math style by calling \type %D {\restoremathstyle}. \def\restoremathstyle {\ifmmode \ifcase\supersubmode \textstyle \or \scriptstyle \else \scriptscriptstyle \fi \fi} %D \macros %D {mathstyle} %D %D If one want to be sure that something is typeset in the %D appropriate style, \type {\mathstyle} can be used: %D %D \starttyping %D \mathstyle{something} %D \stoptyping \def\mathstyle#1% {\mathchoice {\displaystyle #1}% {\textstyle #1}% {\scriptstyle #1}% {\scriptscriptstyle#1}} %D Something similar can be used in the (re|)|definition %D of \type {\text}. This version is a variation on the one %D in the math module (see \type{m-math} and|/|or \type %D {m-newmat}). \unexpanded\def\mathtext {\mathortext\domathtext\hbox} \def\domathtext#1% {\mathchoice {\dodomathtext\displaystyle \textface {#1}}% {\dodomathtext\textstyle \textface {#1}}% {\dodomathtext\scriptstyle \scriptface {#1}}% {\dodomathtext\scriptscriptstyle\scriptscriptface{#1}}} \def\dodomathtext#1#2#3% no \everymath ! %{\hbox{\everymath{#1}\switchtobodyfont [#2]#3}} % 15 sec {\hbox{\everymath{#1}\setcurrentfontbody{#2}#3}} % 3 sec (no math) %D Because we may overload \type {\text} in other (structuring) %D macros, we say: \appendtoks \let\text\mathtext \to \everymathematics %D \macros %D {\definemathalignment, setupmathalignment, startmathalignment} %D %D Modules may provide additional alignment features. The following %D mechanisms are provided by the core. % n>1 #### needed, strange # interaction in recurse \def\presetdisplaymath{\displ@y} % some day i will relocate the plain stuff \def\buildeqalign {\scratchtoks\emptytoks \dorecurse{\mathalignmentparameter\c!m} {\ifnum\recurselevel>\plusone \appendtoks \tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint \to\scratchtoks \fi \expanded{\scratchtoks{\the\scratchtoks\the\!!toksa}}% \dorecurse{\numexpr\mathalignmentparameter\c!n-\plusone\relax} {\expanded{\scratchtoks{\the\scratchtoks\the\!!toksb}}}}% \expanded{\scratchtoks{\the\scratchtoks\the\!!toksc}}} \def\forgetalign {\tabskip\zeropoint\everycr\emptytoks} \let\firstineqalign\empty \let\nextineqalign \empty \let\leftofeqalign \empty \let\rightofeqalign\empty \def\mathineqalign#1{$\forgetalign\displaystyle{{}#1{}}$} \def\textineqalign#1{$\forgetalign#1$} \def\eqalign#1% why no halign here, probably because of displaywidth {\null\,\vcenter {\openup.25\bodyfontsize% was: \openup\jot \mathsurround\zeropoint \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##{}}$\hfil\crcr#1\crcr}% }\,} % preamble is scanned for tabskips so we need the span to prevent an error message \chardef\eqalignmode\plusone \def\preparereqalignno {\!!toksa{\strut\firstineqalign\hfil\leftofeqalign\span\mathineqalign{##}\rightofeqalign\tabskip\zeropoint}% \!!toksb{&\nextineqalign\leftofeqalign\span\mathineqalign{##}\rightofeqalign\tabskip\zeropoint}% \ifnum\mathraggedstatus=\plusone \!!toksc{\hfil&\span\textineqalign{##}\tabskip\zeropoint}% \else\ifnum\mathraggedstatus=\plusthree \!!toksc{\hfil\tabskip\zeropoint\!!plus 1\!!fill&\span\textineqalign{##}\tabskip\zeropoint}% \else \!!toksc{\hfil\tabskip\centering&\llap{\span\textineqalign{##}}\tabskip\zeropoint}% \fi\fi \global\chardef\mathnumberstatus\zerocount \buildeqalign \presetdisplaymath \tabskip\centering} \def\prepareleqalignno {\!!toksa{\strut\firstineqalign\hfil\leftofeqalign\span\mathineqalign{##}\rightofeqalign\tabskip\zeropoint}% \!!toksb{&\nextineqalign\leftofeqalign\span\mathineqalign{##}\rightofeqalign\tabskip\zeropoint}% % problem: number is handled after rest and so ends up in the margin \ifnum\mathraggedstatus=\plusone \!!toksc{\hfil&\kern-\displaywidth\rlap{\span\textineqalign{##}}\tabskip\displaywidth}% \else\ifnum\mathraggedstatus=\plusthree \!!toksc{\hfil\tabskip\zeropoint\!!plus 1\!!fill&\kern-\displaywidth\span\mrlap{\span\textineqalign{##}}\tabskip\displaywidth}% \else \!!toksc{\hfil\tabskip\centering&\kern-\displaywidth\rlap{\span\textineqalign{##}}\tabskip\displaywidth}% \fi\fi \global\chardef\mathnumberstatus\zerocount \buildeqalign \presetdisplaymath \tabskip\centering} \def\dobotheqalignno#1#2% {\ifmmode \displ@y % \let\doplaceformulanumber\relax % strange hack \vcenter\bgroup \let\finishalignno\egroup \else \let\finishalignno\relax \fi #1% \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA {\the\scratchtoks\crcr#2\crcr}% \finishalignno} \def\dobothaligneqalignno#1% {\ifmmode \displ@y \global\chardef\mathnumberstatus\plusone \ifcase\mathraggedstatus \def\finishalignno{\crcr\egroup}% \else % we're in a mathbox \vcenter\bgroup \def\finishalignno{\crcr\egroup\egroup}% \fi \fi #1% \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup\the\scratchtoks\crcr} \def\mrlap#1% {\setbox\scratchbox\hbox{#1}% \ifdim\wd\scratchbox>\mathnumbercorrection \xdef\mathnumbercorrection{\the\wd\scratchbox}% \fi \box\scratchbox \global\chardef\mathnumberstatus\plustwo} % \def\dobothaligneqalignno#1% % {\ifmmode % \displ@y % \global\chardef\mathnumberstatus\plusone % we're in a mathbox % \vcenter\bgroup % \def\finishalignno{\crcr\egroup\egroup}% % \else % \def\finishalignno{\crcr\egroup}% % \fi % #1% % \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup\the\scratchtoks\crcr} \def\reqalignno {\dobotheqalignno \preparereqalignno} \def\leqalignno {\dobotheqalignno \prepareleqalignno} \def\alignreqalignno{\dobothaligneqalignno\preparereqalignno} \def\alignleqalignno{\dobothaligneqalignno\prepareleqalignno} \def\finishalignno {\crcr\egroup} \let \equalignno \reqalignno \let\aligneqalignno\alignreqalignno %D Here we implement the user interface part. \def\setupmathalignment {\dodoubleempty\dosetupmathalignment} \def\dosetupmathalignment[#1][#2]% {\ifsecondargument \getparameters[\??eq#1][#2]% \else \getparameters[\??eq][#1]% \fi} \let\currentmathalignment\empty \def\mathalignmentparameter#1% {\executeifdefined{\??eq\currentmathalignment#1}{\executeifdefined{\??eq#1}\empty}} \setupmathalignment [\c!n=2, \c!m=1, \c!distance=1em] \def\numberedeqalign {\doifelse\@@fmlocation\v!left\alignleqalignno\alignreqalignno} \def\doxxdoubleempty#1#2% {\ifx#2[\expandafter\dodoxxdoubleempty\else\expandafter\noxxdoubleempty\fi#1#2} \def\dodoxxdoubleempty#1[#2]#3% {\ifx#3[\else\expandafter\nonoxxdoubleempty\fi#1[#2]#3} \def\noxxdoubleempty #1{#1[][]} \def\nonoxxdoubleempty#1[#2]{#1[#2][]} \newcount\eqaligncolumn \def\firstineqalign{\global\eqaligncolumn\plusone} \def\nextineqalign {\global\advance\eqaligncolumn\plusone} \def\leftofeqalign {\getvalue{\??eq:\v!left :\number\eqaligncolumn}} \def\rightofeqalign{\getvalue{\??eq:\v!right:\number\eqaligncolumn}} \def\doseteqaligncolumn#1% {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\empty \letvalue{\??eq:\v!right:\number\eqaligncolumn}\empty \doif{#1}\v!left {\letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfill}% \doif{#1}\v!right {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfill}% \doif{#1}\v!middle{\letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfill \letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfill}} \def\dodoalignNC {\gdef\doalignNC##1{&##1}} \def\doalignNR[#1][#2]% {\donestedformulanumber{#1}{#2}\crcr} %D \starttyping %D \placeformula[eqn0]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn0] %D \placeformula[eqn1]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn1] %D \placeformula \startformula \startalign[n=1] a\NR[eqn2] \stopalign \stopformula See \in[eqn2] %D \placeformula[eqn3]\startformula \startalign[n=1] a\NR[+] \stopalign \stopformula See \in[eqn3] %D \stoptyping % todo: pop in cell \def\dostartmathalignment[#1][#2]% {% \begingroup not permitted ($$...assignments...\halign... ) \pushmacro\doalignNC \edef\currentmathalignment{#1}% \doifassignmentelse{#2}{\setupmathalignment[#1][#2]}\donothing \def\NC{\doalignNC}% \global\let\doalignNC\dodoalignNC \def\EQ{&=}% \def\NR{&\global\let\doalignNC\dodoalignNC\doxxdoubleempty\doalignNR}% % amstex compatibility mode: (ugly, will disappear) \def\notag{\def\\{&\crcr}}% \doifelse{#2}{*}{\def\\{&\crcr}}{\def\\{&\doalignNR[+][]\crcr}}% % end of compatibility mode \eqaligncolumn\zerocount \processcommacommand [\mathalignmentparameter\c!align] {\advance\eqaligncolumn\plusone\doseteqaligncolumn}% takes argument % the real action \global\eqaligncolumn\plusone \numberedeqalign} \def\dostopmathalignment {\finishalignno \popmacro\doalignNC} \def\definemathalignment {\dodoubleempty\dodefinemathalignment} \def\dodefinemathalignment[#1]% [#2]% {\setvalue{\e!start#1}{\dodoubleempty\dostartmathalignment[#1]}% \setvalue{\e!stop #1}{\dostopmathalignment}% \setupmathalignment[#1]}% [#2] %D For the moment we only provide english commands. \definemathalignment[align] % default case (this is what amstex users expect) \definemathalignment[\v!mathalignment] % prefered case (this is cleaner, less clashing) %D \startbuffer %D \placeformula \startformula \eqalignno { %D a &= b & \formulanumber \cr %D c &= d \cr %D &= e \cr %D &= f & \formulanumber %D } \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \EQ b \NR[+] %D \NC c \EQ d \NR %D \NC \EQ f \NR[for:demo-a-1] %D \NC \EQ g \NR[for:demo-a-2][a] %D \NC \EQ h \NR[for:demo-a-3][b] %D \NC \EQ i \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \EQ b \NR[+] %D \NC c \EQ d \NR %D \NC \EQ f \NR %D \NC \EQ g \NR %D \NC \EQ h \NR %D \NC \EQ i \NR[+] %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D a &= b \\ %D c &= d \notag \\ %D &= e \notag \\ %D &= f \\ %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \NC \eq b \NR[+] %D \NC c \NC \neq d \NR %D \NC \NC \neq f \NR[for:demo-b-1] %D \NC \NC \geq g \NR[for:demo-b-2][a] %D \NC \NC \leq h \NR[for:demo-b-3][b] %D \NC \NC \neq i \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[*] %D a &= b \\ %D c &= d \\ %D &= e \\ %D &= f \\ %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign %D x &= y \\ %D a &= b \\ %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[m=3] %D x &= y & x &= y & z &= t \\ %D a &= b & p &= q & w &= s \\ %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[m=3,distance=0pt] %D x &= y &= x &= y &= z &= t \\ %D a &= b &= p &= q &= w &= s \\ %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=5,distance=0pt] %D x &= yy &= xx &= yy &= zz \\ %D a &= b &= p &= q &= w \\ %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=3,align={left,middle,right}] %D \NC l \NC = \NC r \NR %D \NC left \NC = \NC right \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=3,align={right,middle,left}] %D \NC l \NC = \NC r \NR %D \NC left \NC = \NC right \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startalign[n=3,align={middle,middle,middle}] %D \NC l \NC = \NC r \NR %D \NC left \NC = \NC right \NR %D \stopalign \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula %D \startformula %D \startalign[n=3,align={middle,middle,middle}] %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula %D \startformulas %D \setupmathalignment[n=3,align={middle,middle,middle}]% %D \startformula %D \startalign %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula %D \startformula %D \startalign %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula %D \stopformulas %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula %D \startformulas %D \dorecurse{5}{\startformula %D \startalign[n=3,align={middle,middle,middle}] %D \NC a \NC = \NC b \NR[+] %D \NC 2a \NC = \NC 2b \NR %D \stopalign %D \stopformula} %D \stopformulas %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {definemathcases, setupmathcases, startmathcases} %D %D Another wish \unknown \def\setupmathcases {\dodoubleempty\dosetupmathcases} \def\dosetupmathcases[#1][#2]% {\ifsecondargument \getparameters[\??ce#1][#2]% \else \getparameters[\??ce][#1]% \fi} \let\currentmathcases\empty \def\mathcasesparameter#1% {\executeifdefined{\??ce\currentmathcases#1}{\executeifdefined{\??ce#1}\empty}} \setupmathcases [\c!distance=1em, \c!numberdistance=2.5em, \c!left={\left\{\,}, \c!right={\right.}] \def\dodocasesNC {\gdef\docasesNC{\endmath&}} \let\docasesNR\doalignNR \def\dostartmathcases[#1][#2]% {\begingroup \edef\currentmathcases{#1}% \doifassignmentelse{#2}{\setupmathcases[#1][#2]}\donothing \mathcasesparameter\c!left \vcenter\bgroup \pushmacro\docasesNC \let\endmath\relax \def\NC{\docasesNC}% \def\MC{\docasesNC\ifmmode\else$\def\endmath{$}\fi}% \global\let\docasesNC\dodocasesNC \def\NR{\unskip\endmath&\global\let\docasesNC\dodocasesNC\doxxdoubleempty\docasesNR}% \normalbaselines \mathsurround\zeropoint \everycr\emptytoks \tabskip\zeropoint \global\eqaligncolumn\plusone \halign\bgroup $\mathcasesparameter\c!style##$\hfil &\hskip\mathcasesparameter\c!distance\relax \popmacro\docasesNC##\hfil &\hskip\mathcasesparameter\c!numberdistance\relax \let\formuladistance\!!zeropoint \span\textineqalign{##}% \crcr} % todo: number \def\dostopmathcases {\crcr \egroup \popmacro\docasesNC \egroup \mathcasesparameter\c!right \endgroup} \def\definemathcases {\dodoubleempty\dodefinemathcases} \def\dodefinemathcases[#1]% [#2]% {\setvalue{\e!start#1}{\dodoubleempty\dostartmathcases[#1]}% \setvalue{\e!stop #1}{\dostopmathcases}% \setupmathcases[#1]}% [#2] \definemathcases[cases] \definemathcases[\v!mathcases] %D \startbuffer %D \placeformula \startformula \startcases %D \NC 2 \NC $ y > 0 $ \NR %D \NC 7 \NC $ x = 7 $ \NR[+] %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula x \startcases %D \NC 2 \NC $ y > 0 $ \NR[+] %D \NC 7 \NC $ x = 7 $ \NR %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula \startcases %D \NC 2 \NC $ y > 0 $ \NR %D \NC 7 \NC $ x = 7 $ \NR %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \placeformula \startformula x \startcases %D \NC 2 \NC $ y > 0 $ \NR %D \NC 7 \NC $ x = 7 $ \NR %D \NC 4 \NC otherwise \NR %D \stopcases \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {definemathmatrix, setupmathmatrix, startmathmatrix} %D %D Yet another one \unknown \def\setupmathmatrix {\dodoubleempty\dosetupmathmatrix} \def\dosetupmathmatrix[#1][#2]% {\ifsecondargument \getparameters[\??mx#1][#2]% \else \getparameters[\??mx][#1]% \fi} \let\currentmathmatrix\empty \def\mathmatrixparameter#1% {\executeifdefined{\??mx\currentmathmatrix#1}{\executeifdefined{\??mx#1}\empty}} \setupmathmatrix [\c!distance=1em, \c!left=, \c!right=, \c!align=\v!middle] \def\dosetmatrixcolumn#1% hh: todo: \definematrixalign {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfil \letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfil \doif{#1}\v!left {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\relax \letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfil}% \doif{#1}\v!right {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfil \letvalue{\??eq:\v!right:\number\eqaligncolumn}\relax }% \doif{#1}\v!middle{\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfil \letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfil}} \def\buildmathmatrix % beware: etex only {\scratchtoks\emptytoks \expanded{\scratchtoks{\the\scratchtoks\the\!!toksa}}% \dorecurse{\numexpr\scratchcounter-\plusone\relax} {\expanded{\scratchtoks{\the\scratchtoks\the\!!toksb}}}% \expanded{\scratchtoks{\the\scratchtoks\the\!!toksc }}} \def\preparemathmatrix {\!!toksa{\strut \firstineqalign\leftofeqalign \span \textineqalign{\mathmatrixparameter\c!style ##}\rightofeqalign}% \!!toksb{&\hskip\mathmatrixparameter\c!distance \nextineqalign\leftofeqalign \span \textineqalign{\mathmatrixparameter\c!style ##}\rightofeqalign}% \!!toksc{&&\hskip\mathmatrixparameter\c!distance \leftofeqalign \span \textineqalign{\mathmatrixparameter\c!style ##}\rightofeqalign}% \buildmathmatrix \halign \@EA \bgroup\the\scratchtoks \crcr} \def\definemathmatrix {\dodoubleempty\dodefinemathmatrix} \def\dodefinemathmatrix[#1]% [#2]% {\setvalue{\e!start#1}{\dodoubleempty\dostartmathmatrix[#1]}% \setvalue{\e!stop #1}{\dostopmathmatrix}% \setupmathmatrix[#1]}% [#2] \definemathmatrix[matrix] \definemathmatrix[\v!mathmatrix] \def\dodomatrixNC {\gdef\domatrixNC{\endmath&}} \def\installmathmatrixhandler#1#2% {\setvalue{\??mx:#1}{#2}} % First alternative: % % \def\processlowhighmathmatrix#1% % {\def\mathmatrixleft % {\setbox\nextbox} % \def\mathmatrixright % {#1.5\dimexpr\nextboxdp-\nextboxht\relax % \hbox{$\mathmatrixparameter\c!left % \vcenter{\unvbox\nextbox}% % \mathmatrixparameter\c!right$}}% % \let\mathmatrixbox\vbox} % % \installmathmatrixhandler\v!high {\processlowhighmathmatrix\raise} % \installmathmatrixhandler\v!low {\processlowhighmathmatrix\lower} % % \installmathmatrixhandler\v!top {\processlowhighmathmatrix\raise} % \installmathmatrixhandler\v!bottom{\processlowhighmathmatrix\lower} % % \installmathmatrixhandler\v!lohi % {\def\mathmatrixleft {\mathmatrixparameter\c!left}% % \def\mathmatrixright{\mathmatrixparameter\c!right}% % \let\mathmatrixbox\vcenter} % % An alternative % % \let\mathmatrixleft \empty % \let\mathmatrixright\empty % % \def\processlowhighmathmatrix#1% % {\dowithnextbox % {#1.5\dimexpr\nextboxdp-\nextboxht\relax % \hbox{$\mathmatrixparameter\c!left % \vcenter{\unvbox\nextbox}% % \mathmatrixparameter\c!right$}}% % \vbox} % % \def\processlohimathmatrix % {\dowithnextbox % {\mathmatrixparameter\c!left % \vcenter{\unvbox\nextbox}% % \mathmatrixparameter\c!right}% % \vbox} % % \installmathmatrixhandler\v!high {\def\mathmatrixbox{\processlowhighmathmatrix\raise}} % \installmathmatrixhandler\v!low {\def\mathmatrixbox{\processlowhighmathmatrix\lower}} % \installmathmatrixhandler\v!top {\def\mathmatrixbox{\processlowhighmathmatrix\raise}} % \installmathmatrixhandler\v!bottom{\def\mathmatrixbox{\processlowhighmathmatrix\lower}} % \installmathmatrixhandler\v!lohi {\let\mathmatrixbox \processlohimathmatrix} % % Final version \let\mathmatrixleft \empty % experimental hook \let\mathmatrixright\empty % experimental hook \def\processlowhighmathmatrix#1#2% {\dowithnextbox {\scratchdimen\dimexpr(\nextboxdp-\nextboxht)/2 \ifcase#2\or+\mathaxisheight\textfont2\fi\relax \ifcase#1\relax\or\lower\scratchdimen\or\or\raise\scratchdimen\fi \hbox{$\mathmatrixparameter\c!left \vcenter{\unvbox\nextbox}% \mathmatrixparameter\c!right$}}% \vbox} \installmathmatrixhandler\v!top {\def\mathmatrixbox{\processlowhighmathmatrix\plusthree\plusone }} \installmathmatrixhandler\v!high {\def\mathmatrixbox{\processlowhighmathmatrix\plusthree\zerocount}} \installmathmatrixhandler\v!lohi {\def\mathmatrixbox{\processlowhighmathmatrix\plustwo \zerocount}} \installmathmatrixhandler\v!low {\def\mathmatrixbox{\processlowhighmathmatrix\plusone \zerocount}} \installmathmatrixhandler\v!bottom{\def\mathmatrixbox{\processlowhighmathmatrix\plusone \plusone }} \def\dostartmathmatrix[#1][#2]% {\begingroup \edef\currentmathmatrix{#1}% \doifassignmentelse{#2}{\setupmathmatrix[#1][#2]}\donothing \null \executeifdefined{\??mx:\mathmatrixparameter\c!location}{\getvalue{\??mx:\v!lohi}}% \mathmatrixleft \mathmatrixbox\bgroup \pushmacro\domatrixNC \let\endmath\relax \def\NC{\domatrixNC}% \def\MC{\domatrixNC\ifmmode\else$\def\endmath{$}\fi}% \global\let\domatrixNC\dodomatrixNC \def\NR{\endmath\global\let\domatrixNC\dodomatrixNC\crcr}% \normalbaselines \mathsurround\zeropoint \everycr\emptytoks \tabskip\zeropoint \eqaligncolumn\zerocount % could be \scratchcounter \processcommacommand[\mathmatrixparameter\c!align]{\advance\eqaligncolumn\plusone\dosetmatrixcolumn}% \scratchcounter=\ifnum\eqaligncolumn>\zerocount \eqaligncolumn \else \plusone \fi \global\eqaligncolumn\plusone \preparemathmatrix } % uses scratchcounter \def\dostopmathmatrix {\crcr \mathstrut\crcr \noalign{\kern-\baselineskip}% \egroup \popmacro\domatrixNC \egroup \mathmatrixright \endgroup} %D \startbuffer %D \placeformula \startformula[-] \startmatrix %D \NC 1 \NC x \NC a \NR %D \NC 2 \NC y \NC b \NR %D \NC 3 \NC z \NC c \NR %D \stopmatrix \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \definemathmatrix[bmatrix][left={\left[\,},right={\,\right]}] %D %D \startbuffer %D \placeformula \startformula[-] \startbmatrix %D \NC 1 \NC x \NC a \NR %D \NC 2 \NC y \NC b \NR %D \NC 3 \NC z \NC c \NR %D \stopbmatrix \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Taco added some code (dedicated to Aditya Mahajan) that gives more %D control over aligments: %D \startbuffer %D \startformula %D \startmatrix %D \NC a + x \NC = \NC a + d \NR %D \NC y \NC = \NC d \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \startbuffer %D \startformula %D \startmatrix [distance=3pt,align={right,left}] %D \NC a + x \NC = a + d \NR %D \NC y \NC = d \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \startbuffer %D \startformula %D \startmatrix [left=\left(,right=\right)] %D \NC a + x \NR %D \NC y \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D A bit more complex code: %D %D \startbuffer %D \startformula %D \text{Let }{\cal R} = \bigcup_{P_{X_1},P_{X_2}} %D \left\{ (R_1, R_2) : %D \startmatrix[distance=1em,align={left,left,right}] %D \NC R_1 \NC < I(X_1 ; Y \mid X_2) \NC R_1 \NR %D \NC \hfill Q_2 \NC < I(X_2 ; Y \mid X_1) \NC R_2 \NR %D \NC R_1 + R_2 \NC < I(X_1 ; Y) \NC R_1 + R_2 \NR %D \stopmatrix %D \right\} %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {startmatrices} %D %D Just a handy keystroke safer: \def\startmatrices {\begingroup \setupmathmatrix} \def\stopmatrices {\endgroup} %D \startbuffer %D \startformula %D \startmatrix[left={\left(},right={\right)}] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[left={\left(},right={\right)},location=low] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[left={\left(},right={\right)},location=high] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D %D \startbuffer %D \startformula %D \startmatrices[left={\left(},right={\right)}] %D \startmatrix %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[location=bottom] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D = %D \startmatrix[location=top] %D \NC A \NC B \NR \NC C \NC D \NR %D \stopmatrix %D \stopmatrices %D \stopformula %D \stopbuffer %D %D \typebuffer \getbuffer %D \macros %D {startintertext} %D %D Preliminary feature: %D %D {\em example code} \def\startintertext#1\stopintertext {\noalign{\dointertext{#1}}} \def\intertext#1% {\noalign{\dointertext{#1}}} \unexpanded\def\dointertext#1% {\penalty\postdisplaypenalty \afterdisplayspace \vbox{\forgetall\noindent#1\par}% \penalty\predisplaypenalty \beforedisplayspace} % %D \macros % %D {substack} % %D % %D Preliminary code: % %D % %D \starttyping % %D \startformula % %D \sum_{% % %D \startsubstack % %D i = 1 \NR % %D i \neq n \NR % %D i \neq m % %D \stopsubstack % %D }a_i % %D \stopformula % %D \stoptyping % \def\startsubstack % {\begingroup % \null % \vcenter\bgroup % \pushmacro\domatrixNC % \let\stopmathmode\relax % \def\NC{\domatrixNC}% % \def\MC{\domatrixNC\startmathmode}% % \global\let\domatrixNC\dodomatrixNC % \def\NR % {\stopmathmode % \global\let\domatrixNC\dodomatrixNC % \crcr\noalign{\nointerlineskip}}% % \mathsurround\zeropoint % \everycr\emptytoks % \halign\bgroup\hfil$\scriptstyle\mathstrut##$\hfil\crcr} % \def\stopsubstack % {\crcr % \egroup % \popmacro\domatrixNC % \egroup % \endgroup} %D \macros %D {substack} %D %D Preliminary code: %D %D \startbuffer %D \startformula %D \sum_{% %D \startsubstack %D i = 1 \NR %D i \neq n \NR %D i \neq m %D \stopsubstack %D }a_i %D \stopformula %D \stopbuffer %D %D \getbuffer which was typed as \typebuffer %D %D Notice that these macros give the correct spacing for %D subscripts. Compare for example %D %D \startbuffer %D \startformula %D \sum_{\startsubstack a \NR b \NR \stopsubstack} %D \text{ and } %D \sum_{\scriptstyle a \atop \scriptstyle} %D \stopformula %D \typebuffer which gives \getbuffer \def\startsubstack {\begingroup \vcenter\bgroup \baselineskip\mathstacktotal \lineskip\mathstackvgap \lineskiplimit\lineskip \let\stopmathmode\relax \def\NC{\domatrixNC}% \def\MC{\domatrixNC\startmathmode}% \global\let\domatrixNC\dodomatrixNC \def\NR {\stopmathmode \global\let\domatrixNC\dodomatrixNC \crcr}% \mathsurround\zeropoint \everycr\emptytoks \halign\bgroup\hfil$\scriptstyle##$\hfil\crcr} \def\stopsubstack {\crcr \egroup \egroup \endgroup} %D \macros %D {frac, xfrac, xxfrac} %D %D This is another one Tobias asked for. It replaces the %D primitive \type {\over}. We also take the opportunity to %D handle math style restoring, which makes sure units and %D chemicals come out ok. %D %D \starttyping %D \def\frac#1#2% %D {\relax %D \ifmmode %D {{\mathstyle{#1}}\over{\mathstyle{#2}}}% %D \else %D $\frac{#1}{#2}$% %D \fi} %D \stoptyping %D %D Better is: %D %D \starttyping %D \def\frac#1#2% %D {\relax\mathematics{{{\mathstyle{#1}}\over{\mathstyle{#2}}}}} %D \stoptyping %D %D The \type {\frac} macro kind of replaces the awkward \type %D {\over} primitive. Say that we have the following formulas: %D %D \startbuffer[sample] %D test $\frac {1}{2}$ test $$1 + \frac {1}{2} = 1.5$$ %D test $\xfrac {1}{2}$ test $$1 + \xfrac {1}{2} = 1.5$$ %D test $\xxfrac{1}{2}$ test $$1 + \xxfrac{1}{2} = 1.5$$ %D \stopbuffer %D %D \typebuffer[sample] %D %D With the most straightforward definitions, we get: %D %D \startbuffer[code] %D \def\dofrac#1#2#3{\relax\mathematics{{{#1{#2}}\over{#1{#3}}}}} %D %D \def\frac {\dofrac\mathstyle} %D \def\xfrac {\dofrac\scriptstyle} %D \def\xxfrac{\dofrac\scriptscriptstyle} %D \stopbuffer %D %D \typebuffer[code] \getbuffer[code,sample] %D %D Since this does not work well, we can try: %D %D \startbuffer[code] %D \def\xfrac #1#2{\hbox{$\dofrac\scriptstyle {#1}{#2}$}} %D \def\xxfrac#1#2{\hbox{$\dofrac\scriptscriptstyle{#1}{#2}$}} %D \stopbuffer %D %D \typebuffer[code] \getbuffer[code,sample] %D %D This for sure looks better than: %D %D \startbuffer[code] %D \def\xfrac #1#2{{\scriptstyle \dofrac\relax{#1}{#2}}} %D \def\xxfrac#1#2{{\scriptscriptstyle\dofrac\relax{#1}{#2}}} %D \stopbuffer %D %D \typebuffer[code] \getbuffer[code,sample] %D %D So we stick to the next definitions (watch the local %D overloading of \type {\xfrac}). \def\dofrac#1#2#3{\relax\mathematics{{{#1{#2}}\over{#1{#3}}}}} % \unexpanded\def\frac % {\dofrac\mathstyle} % % \chardef\mathfracmode=0 $\frac{1}{2}$ % \chardef\mathfracmode=1 $\frac{1}{2}$ % \chardef\mathfracmode=2 $\frac{1}{2}$ % \chardef\mathfracmode=3 $\frac{1}{2}$ % \chardef\mathfracmode=4 $\frac{1}{2}$ % \chardef\mathfracmode=5 $\frac{1}{2}$ \chardef\mathfracmode=0 % 0=mathstyle, 1=displaystyle, 2=textstyle, 3=scriptstyle, 4=scriptscriptstyle \unexpanded\def\frac {\ifcase\mathfracmode \expandafter\dofrac\expandafter\mathstyle \or \expandafter\dofrac\expandafter\displaystyle \or \expandafter\dofrac\expandafter\textstyle \or \expandafter\dofrac\expandafter\scriptstyle \or \expandafter\dofrac\expandafter\scriptscriptstyle \else \expandafter\dofrac\expandafter\mathstyle \fi} \unexpanded\def\xfrac#1#2% {\begingroup \let\xfrac\xxfrac \dofrac\scriptstyle{#1}{#2}% \endgroup} \unexpanded\def\xxfrac#1#2% {\begingroup \dofrac\scriptscriptstyle{#1}{#2}% \endgroup} %D The \type {xx} variant looks still ugly, so maybe it's %D best to say: \unexpanded\def\xxfrac#1#2% {\begingroup \dofrac\scriptscriptstyle{#1}{\raise.25ex\hbox{$\scriptscriptstyle#2$}}% \endgroup} %D Something low level for scientific calculator notation: \unexpanded\def\scinot#1#2% {#1\times10^{#2}} %D The next macro, \type {\ch}, is \PPCHTEX\ aware. In %D formulas one can therefore best use \type {\ch} instead of %D \type {\chemical}, especially in fractions. \ifx\mathstyle\undefined \let\mathstyle\relax \fi \unexpanded\def\ch#1% {\ifx\@@chemicalletter\undefined \mathstyle{\rm#1}% \else \dosetsubscripts \mathstyle{\@@chemicalletter{#1}}% \doresetsubscripts \fi} %D \macros %D {/} %D %D Just to be sure, we restore the behavior of some typical %D math characters. \bgroup \catcode`\/=\@@other \global \let\normalforwardslash/ \catcode`\/=\@@active \doglobal\appendtoks\let/\normalforwardslash\to\everymathematics \egroup %D These macros were first needed by Frits Spijker (also %D known as Gajes) for typesetting the minus sign that is %D keyed into scientific calculators. % This is the first alternative, which works okay for the % minus, but less for the plus. % % \def\dodoraisedmathord#1#2#3% % {\mathord{{#2\raise.#1ex\hbox{#2#3}}}} % % \def\doraisedmathord#1% % {\mathchoice % {\dodoraisedmathord5\tf #1}% % {\dodoraisedmathord5\tf #1}% % {\dodoraisedmathord4\tfx #1}% % {\dodoraisedmathord3\tfxx#1}} % % \def\negative{\doraisedmathord-} % \def\positive{\doraisedmathord+} % % So, now we use the monospaced signs, that we also % define as symbol, so that they can be overloaded. \def\dodoraisedmathord#1#2#3% {\mathord{{#2\raise.#1ex\hbox{#2\symbol[#3]}}}} \def\doraisedmathord#1% {\mathchoice {\dodoraisedmathord5\tf {#1}}% {\dodoraisedmathord5\tf {#1}}% {\dodoraisedmathord4\tx {#1}}% {\dodoraisedmathord3\txx{#1}}} \def\dodonumbermathord#1#2% {\setbox\scratchbox\hbox{0}% \mathord{\hbox to \wd\scratchbox{\hss#1\symbol[#2]\hss}}} \def\donumbermathord#1% {\mathchoice {\dodonumbermathord\tf {#1}}% {\dodonumbermathord\tf {#1}}% {\dodonumbermathord\tx {#1}}% {\dodonumbermathord\txx{#1}}} \definesymbol[positive] [\getglyph{Mono}{+}] \definesymbol[negative] [\getglyph{Mono}{-}] \definesymbol[zeroamount][\getglyph{Mono}{-}] \def\negative {\doraisedmathord{negative}} \def\positive {\doraisedmathord{positive}} \def\zeroamount{\donumbermathord{zeroamount}} %D The following macros are used in the MathML interpreter, so %D there is a good change of them never being documented for %D other usage. \let\normalordelimiter\secondoftwoarguments \let\normalorfiller \firstoftwoarguments \def\enabledelimiter {\let\normalordelimiter\secondoftwoarguments} \def\disabledelimiter{\let\normalordelimiter\firstoftwoarguments} \def\enablefiller {\let\normalorfiller\secondoftwoarguments} \def\disablefiller {\let\normalorfiller\firstoftwoarguments} \def\mathopnolimits#1{\mathop{\mr#1}\nolimits} % was \rm, which follows text fonts (used in mml parser) \def\mathopdolimits#1{\mathop{\mr#1}} % was \rm, which follows text fonts (used in mml parser) %D \macros{overset, underset} %D %D The macros \type{\overset} and \type{\underset} are provided by %D \AMS\ packages in \LATEX. These macro allows you to place a symbol %D above or below another symbol, irrespective of whether the other %D symbol is a relation or something else, and without influencing the %D spacing. For most cases there is a better way to do such things %D (declaring a math command with limop option, or using accents), but %D occasionally these macros can be useful, for example: %D %D \startbuffer %D \startformula %D \overset{*}{X} \underset{*}{X} %D \stopformula %D \stopbuffer %D \typebuffer \getbuffer %D %D Use these macros sparingly. Remember, \TEX\ was designed for %D mathematics, so there is usually a proper method for typesetting %D common math notation. %D These macros are a clearer version of \type{\binrel@} and %D \type{\binrel@@} macros in \AMSTEX\ packages. \def\preparebinrel#1% {\begingroup \setbox\scratchbox\hbox {\thinmuskip 0mu \medmuskip -1mu \thickmuskip -1mu \setbox\scratchbox\hbox{$#1\mathsurround\zeropoint$}% \kern-\wd\scratchbox ${}#1{}\mathsurround\zeropoint$}% \expanded {\endgroup \let\noexpand\currentbinrel \ifdim\wd\scratchbox<\zeropoint \mathbin \else\ifdim\wd\scratchbox>\zeropoint \mathrel \else \relax \fi\fi}} \unexpanded\def\overset#1#2% {\preparebinrel{#2}% \currentbinrel{\mathop{\kern\zeropoint#2}\limits^{#1}}} \unexpanded\def\underset#1#2% {\preparebinrel{#2}% \currentbinrel{\mathop{\kern\zeropoint#2}\limits_{#1}}} %D \macros %D {boldsymbol} %D %D The math definition is inspired by amsmath. %D %D \startbuffer %D \definetypeface [boldmath] [mm] [boldmath] [latin-modern] [modern] [encoding=texnansi] %D %D $a \times b$ $a \boldsymbol{\times} b$ %D \stopbuffer %D %D \typebuffer \start \getbuffer \stop \def\mathboldsymbol#1% {\preparebinrel{#1}% \currentbinrel{\mathchoice {\hbox{\switchtoformulabodyfont [boldmath]$\mathsurround\zeropoint#1$}} {\hbox{\switchtoformulabodyfont [boldmath]$\mathsurround\zeropoint#1$}} {\hbox{\switchtoformulabodyfont [boldmath,script]$\mathsurround\zeropoint#1$}} {\hbox{\switchtoformulabodyfont[boldmath,scriptscript]$\mathsurround\zeropoint#1$}}}} \def\boldsymbol {\mathortext\mathboldsymbol\bold} %D Some encoding hackery (for Mojca. who else): %D %D \starttyping %D \startmathcollection[eul:texnansi] %D \definemathsymbol [breve] [accent] [tf] ["15] %D \stopmathcollection %D \startmathcollection[eul:ec] %D \definemathsymbol [breve] [accent] [tf] ["08] %D \stopmathcollection %D %D $\breve e$ %D \stoptyping \let\outerencoding\empty \def\checkoutermathencoding {\ifx\outerencoding\empty \ifx\outerencoding\s!default\else \edef\outerencoding{\currentencoding}% \fi \fi} \prependtoks \checkoutermathencoding \to \everymathematics %D More. (A temp hack, else no proper default fall back (like \type %D {\textmultiply}); todo: sync encoding. \def\dealwithmathtextencoding {\expanded{\everyhbox{\the\everyhbox\noexpand\fastenableencoding{\currentencoding}}}% \expanded{\everyvbox{\the\everyvbox\noexpand\fastenableencoding{\currentencoding}}}% \def\dealwithmathtextencoding{\let\characterencoding\nocharacterencoding}% \dealwithmathtextencoding} \appendtoks \dealwithmathtextencoding \to \everymathematics %D How negative such a symbol looks is demonstrated in: %D $\negative 10^{\negative 10^{\negative 10}}$. \setupformulas [\c!way=\@@nrway, \c!blockway=, \c!sectionnumber=\@@nrsectionnumber, \c!location=\v!right, \c!left=(, \c!right=), \c!numberstyle=, \c!numbercolor=, \c!numbercommand=, \c!spacebefore=\v!big, \c!spaceafter=\@@fmspacebefore, \c!grid=] \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/tabl-mis.mkiv0000644000175000017500000002113012130411274024261 0ustar norbertnorbert%D \module %D [ file=tabl-mis, %D version=2012.06.28, %D title=\CONTEXT\ Table Macros, %D subtitle=Miscellaneous, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Table Macros / Miscellaneous} \unprotect %D \macros %D {somekindoftab,kindoftabposition} %D %D This macro can be used to create tabs: %D %D \starttyping %D \setupheadertexts[{\somekindoftab[alternative=horizontal]{\framed{\kindoftabposition}}}] %D \setuptexttexts [{\somekindoftab[alternative=vertical] {\framed{\kindoftabposition}}}] %D %D \starttext %D \showframe \dorecurse{10}{test\page} %D \stoptext %D \stoptyping %D %D (This rather old but updated code used to be in \type {core-mis.mkiv}.) \let\kindoftabposition\!!zerocount \unexpanded\def\somekindoftab {\dosingleempty\typo_kindoftab} \def\typo_kindoftab[#1]% {\bgroup \getdummyparameters [\c!alternative=\v!vertical, \c!width=\textwidth,\c!height=\textheight, \c!n=\lastpage,\c!m=\realpageno, #1]% \doifelse{\directdummyparameter\c!alternative}\v!vertical {\typo_kindoftab_indeed\vbox\vskip\c!height} {\typo_kindoftab_indeed\hbox\hskip\c!width }} \def\typo_kindoftab_indeed#1#2#3#4% {#1 to \directdummyparameter#3 \bgroup \forgetall \scratchnx\directdummyparameter\c!n\relax \scratchmx\directdummyparameter\c!m\relax \edef\kindoftabposition{\the\scratchmx}% \ifnum\scratchmx>\plusone #2\zeropoint \s!plus \the\numexpr\scratchmx-\plusone \relax\s!fill\relax \fi #4% can use \kindoftabposition \ifnum\scratchmx<\scratchnx\relax #2\zeropoint \s!plus \the\numexpr\scratchnx-\scratchmx\relax\s!fill\relax \fi \egroup \egroup} %D The following paragraphs mechanism is probably one of the oldest of %D \CONTEXT\ and mostly served as a table mechanism capable of dealing %D with paragraphs. Nowadays one can also use tabulate or natural tables. %D %D \startbuffer %D \defineparagraphs[sample][n=2,rule=on] %D %D \startsample %D first \nextsample %D second \nextsample %D third %D \stopsample %D %D \startsample %D \input tufte \nextsample %D \input ward \nextsample %D \input davis \nextsample %D \input zapf %D \stopsample %D %D \startparagraphs[sample] %D first \nextsample %D second \nextsample %D third %D \stopparagraphs %D %D \startparagraphs[sample] %D \startparagraphscell %D first %D \stopparagraphscell %D \startparagraphscell %D second %D \stopparagraphscell %D \startparagraphscell %D third %D \stopparagraphscell %D \stopparagraphs %D \stopbuffer %D %D \typebuffer \getbuffer \installcorenamespace{paragraphs} \installcommandhandler \??paragraphs {paragraphs} \??paragraphs \setupparagraphs [\c!n=3, \c!before=\blank, \c!after=\blank, \c!distance=\emwidth, \c!height=\v!fit, \c!width=\availablehsize, \c!rule=\v!off, \c!command=, \c!align=, \c!tolerance=\v!tolerant, % obsolete \c!rulethickness=\linewidth, \c!rulecolor=, \c!style=, \c!color=, \c!top=\vss, \c!bottom=\vfill] \let\typo_paragraphs_setup_saved\setupparagraphs \unexpanded\def\setupparagraphs {\dotripleempty\typo_paragraphs_setup} \def\typo_paragraphs_setup[#1][#2][#3]% we are downward compatible with [each] and [1,3] {\ifthirdargument \doifelse{#2}\v!each {\typo_paragraphs_setup_saved[#1][#3]} {\def\typo_paragraphs_setup_step##1{\typo_paragraphs_setup_saved[#1:##1][#3]}% \processcommalist[#2]\typo_paragraphs_setup_step}% \else\ifsecondargument \typo_paragraphs_setup_saved[#1][#2]% \else\iffirstargument \typo_paragraphs_setup_saved[#1]% \fi\fi\fi} \appendtoks \letvalue{\e!next \currentparagraphs}\nextparagraphs \letvalue\currentparagraphs\nextparagraphs \setuevalue{\e!start\currentparagraphs}{\startparagraphs[\currentparagraphs]}% \letvalue{\e!stop \currentparagraphs}\stopparagraphs %setuevalue{\e!setup\currentparagraph\e!endsetup}{\typo_paragraphs_setup_saved[\currentparagraphs]}% \dorecurse{\paragraphsparameter\c!n} {\normalexpanded{\typo_paragraphs_setup_saved[\currentparagraphs:\recurselevel][\c!width=,\s!parent=\??paragraphs\currentparagraphs]}}% \typo_paragraphs_setup_saved[\currentparagraphs:1][\c!distance=\zeropoint]% \to \everydefineparagraphs \newcount\c_typo_paragraphs_n \newcount\c_typo_paragraphs_max \newdimen\d_typo_paragraphs_width \newdimen\d_typo_paragraphs_auto \unexpanded\def\startparagraphs[#1]% quite slow {\bgroup % (1) \edef\currentparagraphs{#1}% \paragraphsparameter\c!before \edef\p_width{\paragraphsparameter\c!width}% \ifx\p_width\empty \d_typo_paragraphs_width\availablehsize \else \d_typo_paragraphs_width\p_width\relax \fi \c_typo_paragraphs_max\paragraphsparameter\c!n\relax \d_typo_paragraphs_auto\d_typo_paragraphs_width\relax \scratchcounter\zerocount \dorecurse\c_typo_paragraphs_max {\edef\p_width{\namedparagraphsparameter{\currentparagraphs:\recurselevel}\c!width}% \ifx\p_width\empty \advance\scratchcounter\plusone \else \advance\d_typo_paragraphs_auto-\p_width\relax \fi \ifnum\recurselevel>\plusone \advance\d_typo_paragraphs_auto-\namedparagraphsparameter{\currentparagraphs:\recurselevel}\c!distance\relax \fi}% \ifnum\scratchcounter>\zerocount \divide\d_typo_paragraphs_auto\scratchcounter \else \d_typo_paragraphs_auto\zeropoint \fi \parindent\zeropoint \c_typo_paragraphs_n\zerocount \let\\=\typo_paragraphs_next % downward compatible \dontleavehmode\hbox \bgroup % (2) \forgetall \let\typo_paragraphs_start_cell\typo_paragraphs_start_cell_indeed \let\typo_paragraphs_stop_cell \typo_paragraphs_stop_cell_indeed \typo_paragraphs_start_cell_indeed} \unexpanded\def\stopparagraphs {\stopparagraphscell \egroup % (2) \paragraphsparameter\c!after \egroup} % (1) \unexpanded\def\nextparagraphs {\stopparagraphscell \startparagraphscell} \unexpanded\def\startparagraphscell {\typo_paragraphs_start_cell} \def\typo_paragraphs_start_cell_indeed {\removeunwantedspaces \advance\c_typo_paragraphs_n\plusone \ifnum\c_typo_paragraphs_n>\c_typo_paragraphs_max \expandafter\typo_paragraphs_start_cell_nop \else \expandafter\typo_paragraphs_start_cell_yes \fi} \def\typo_paragraphs_start_cell_nop {\begingroup % message: too many cells in paragraphs \let\typo_paragraphs_start_cell\relax \let\typo_paragraphs_stop_cell\typo_paragraphs_stop_cell_indeed \setbox\scratchbox\vbox\bgroup} \def\typo_paragraphs_start_cell_yes {\begingroup \let\typo_paragraphs_start_cell\relax \let\typo_paragraphs_stop_cell\typo_paragraphs_stop_cell_indeed \edef\currentparagraphs{\currentparagraphs:\the\c_typo_paragraphs_n}% \ifnum\c_typo_paragraphs_n>\plusone \typo_paragraphs_separator \fi \edef\p_height{\paragraphsparameter\c!height}% \edef\p_width {\paragraphsparameter\c!width }% \useparagraphsstyleandcolor\c!style\c!color \setbox\scratchbox\vtop \ifx\p_height\empty \else\ifx\p_height\v!fit \else to \p_height \fi\fi \bgroup % (2) \blank[\v!disable]% \paragraphsparameter\c!top \hsize\ifx\p_width\empty \d_typo_paragraphs_auto \else \p_width \fi \relax \usealignparameter\paragraphsparameter \paragraphsparameter\c!inner \everypar{\begstrut\everypar\emptytoks}% \ignorespaces \paragraphsparameter\c!command} \unexpanded\def\stopparagraphscell {\typo_paragraphs_stop_cell \let\typo_paragraphs_stop_cell\relax} \def\typo_paragraphs_stop_cell_indeed {\ifnum\c_typo_paragraphs_n>\c_typo_paragraphs_max \expandafter\typo_paragraphs_stop_cell_nop \else \expandafter\typo_paragraphs_stop_cell_yes \fi} \def\typo_paragraphs_stop_cell_nop {\egroup \endgroup} \def\typo_paragraphs_stop_cell_yes {\ifvmode \removelastskip \else \removeunwantedspaces \endstrut \endgraf \fi \paragraphsparameter\c!bottom \egroup % (2) \dontleavehmode\hbox{\raise\strutheight\box\scratchbox}% \endgroup} \def\typo_paragraphs_separator {\scratchdistance\paragraphsparameter\c!distance \doif{\paragraphsparameter\c!rule}\v!on {\scratchwidth\paragraphsparameter\c!rulethickness \scratchdistance\dimexpr(\scratchdistance-\scratchwidth)/2\relax \hskip\scratchdistance \color[\paragraphsparameter\c!rulecolor]{\vrule\s!width\scratchwidth}}% \hskip\scratchdistance} \protect \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/buff-imp-default.lua0000644000175000017500000000304211571377075025537 0ustar norbertnorbertif not modules then modules = { } end modules ['buff-imp-default'] = { version = 1.001, comment = "companion to buff-imp-default.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", copyright = "PRAGMA ADE / ConTeXt Development Team", license = "see context related readme files" } local patterns, P, V = lpeg.patterns, lpeg.P, lpeg.V local makepattern = visualizers.makepattern local handler = visualizers.newhandler() local grammar = { "visualizer", -- basic signal = makepattern(handler,"signal", visualizers.signalpattern), emptyline = makepattern(handler,"emptyline",patterns.emptyline), beginline = makepattern(handler,"beginline",patterns.beginline), newline = makepattern(handler,"newline", patterns.newline), space = makepattern(handler,"space", patterns.space), default = makepattern(handler,"default", patterns.utf8char), content = makepattern(handler,"default", patterns.somecontent), -- not too efficient -- handy -- line = V("newline") * V("emptyline")^0 * V("beginline"), line = V("newline") * V("emptyline")^0 * V("beginline") + V("emptyline") + V("newline"), whitespace = (V("space") + V("line"))^1, optionalwhitespace = (V("space") + V("line"))^0, -- used pattern = V("line") + V("space") + V("signal") + V("content"), visualizer = V("pattern")^1 } local parser = P(grammar) visualizers.register("default", { parser = parser, handler = handler, grammar = grammar }) context-2013.05.28.20130704/texmf-dist/tex/context/base/norm-xtx.mkii0000644000175000017500000000073111754241457024353 0ustar norbertnorbert%D \module %D [ file=norm-xtx, %D version=2009.03.19, %D title=\CONTEXT\ Norm Macros, %D subtitle=\XETEX, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % xetex primitives % nothing yet (also defined pdftex primitives) \endinput context-2013.05.28.20130704/texmf-dist/tex/context/base/page-bck.mkii0000644000175000017500000004441111754241457024233 0ustar norbertnorbert%D \module %D [ file=page-bck, % copied from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Page Macros, %D subtitle=Backgrounds, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Page Macros / Backgrounds} % \chardef\kindofpagetextareas=1 will isolate graphics from backgrounds \unprotect % messages moved % messages moved % messages moved % messages moved % messages moved % messages moved % messages moved % messages moved %D \macros %D {recalculatebackgrounds} %D %D We use a couple of switches so that we can minimize the %D amount of background calculations. The main switch is set %D by the recalculate directive. %D %D \starttyping %D \recalculatebackgrounds %D \stoptyping %D %D Other modules may not directly set the switches %D themselves. \newif\ifnewbackground \newif\ifsomebackground %D For special purposes, users can question the \type %D {*background} mode. This mode is only available when %D typesetting the pagebody. %D %D \starttyping %D \startmode[*background] ... %D \stoptyping \appendtoks \ifsomebackground \ifnewbackground \setsystemmode\v!background \fi \fi \to \everybeforepagebody %D \macros %D {addmainbackground, addtextbackground, %D addpagebackground, addprintbackground} %D %D Apart from the previously mentioned directive, the %D interface between this module and the other modules %D is made up by four macros that add background to parts of %D the layout. %D %D \starttyping %D \addmainbackground %D \addtextbackground %D \addpagebackground %D \addprintbackground %D \stoptyping %D To minimize calculations, we keep track of the state of the %D background of each area. A previous implementation did %D check each call to the background calculation macro, but %D using an intermediate usage flag instead of testing each %D time saves about 3\% on a run with a couple of backgrounds. %D (On the 824 pages maps bibliography runtime went down from %D 309 to 299 seconds.) \def\checkbackground#1% {\edef\!!stringe{\??ma#1}% \doifelsevaluenothing{\!!stringe\c!background } {\doifelsevaluenothing{\!!stringe\c!foregroundcolor} {\doifelsevalue{\!!stringe\c!frame }\v!on\!!doneatrue {\doifelsevalue{\!!stringe\c!leftframe }\v!on\!!doneatrue {\doifelsevalue{\!!stringe\c!rightframe}\v!on\!!doneatrue {\doifelsevalue{\!!stringe\c!topframe }\v!on\!!doneatrue {\doifelsevalue{\!!stringe\c!bottomframe }\v!on\!!doneatrue \!!doneafalse}}}}} \!!doneatrue} \!!doneatrue \if!!donea \setusage \!!stringe \else \resetusage\!!stringe \fi} \def\ifsomebackgroundfound#1% {\ifusage{\??ma#1}} % \def\doifsomebackgroundelse#1#2#3% % {\ifusage{\??ma#1}#2\else#3\fi} \def\doifsomebackgroundelse#1% {\ifusage{\??ma#1}% \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} %D The background mechanism falls back on the \type {\framed} %D macro. This means that all normal frame and overlay %D features can be used. \def\addsomebackground#1#2#3#4% area box width height / zero test added {\ifsomebackgroundfound#1\ifdim#3>\zeropoint\ifdim#4>\zeropoint \doifvaluesomething{\??ma#1\c!setups}{\setups[\getvalue{\??ma#1\c!setups}]}% should not produce funny spaces ! \setbox#2\vbox\fastlocalframed [\??ma#1] [\c!component=#1,\c!strut=\v!no,\c!offset=\v!overlay,\c!setups=,% \c!width=#3,\c!height=#4] {\dp#2\zeropoint\box#2}% \fi\fi\fi} %D There are quite some backgrounds. At the bottom layer, %D there is the {\em paper} background. This one is only %D used for special purposes, like annotations to documents. \def\addprintbackground#1% {\addsomebackground \v!paper#1\printpaperwidth\printpaperheight} %D The page backgrounds can be put behind the {\em left %D page}, the {\em right page} or {\em each page}. As with %D the paper background, these are calculated on each page. \def\addpagebackground#1% {\doifbothsidesoverruled {\addsomebackground\v!rightpage#1\paperwidth\paperheight} {\addsomebackground\v!rightpage#1\paperwidth\paperheight} {\addsomebackground\v!leftpage #1\paperwidth\paperheight}% \addsomebackground\v!page #1\paperwidth\paperheight} %D Then there are the 25 areas that make up the layout: {\em %D top, header, text, footer, bottom} times {\em left edge, %D left margin, text, right margin, right edge}. These are %D only recalculated when they change or when the \type %D {status} is set to \type {repeat}. \newbox\leftbackground \newbox\rightbackground \def\addmainbackground#1% todo: dimension spec {\ifsomebackground \ifnewbackground \setbackgroundboxes \fi \setbox#1\vbox {\offinterlineskip \doifmarginswapelse {\copy\leftbackground}{\copy\rightbackground}% \box#1}% \fi} %D Finaly there is an aditional {\em text} background, again %D useful for special purposes only. This one is calculated %D each time. The hidden backgrounds are not meant for users! \newconditional\hiddenbackgroundenabled \def\addtextbackground#1% {\ifconditional\hiddenbackgroundenabled \addsomebackground\v!hidden#1\makeupwidth\textheight % mine ! \fi \addsomebackground\v!text#1\makeupwidth\textheight} %D The next couple of macros implement the area backgrounds. %D As said, these are cached in dedicated boxes. The offsets %D and depth of the page are used for alignment purposes. \newdimen\pageoffset % bleed \newdimen\pagedepth \let\pagebackgroundhoffset\!!zeropoint \let\pagebackgroundvoffset\!!zeropoint \let\pagebackgrounddepth \!!zeropoint % \def\setbackgroundboxes % {\showmessage\m!layouts8\empty % \setbackgroundbox\leftbackground\relax % \ifdoublesided % \setbackgroundbox\rightbackground\doswapmargins % \fi % \doifnot\@@mastatus\v!herhaal{\global\newbackgroundfalse}} %D We need a bit more clever mechanism in order to handle %D layers well. This means that we cannot calculate both %D background at the same time since something may have %D changed halfway a page. \chardef\newrightbackground\zerocount \chardef\newleftbackground \zerocount \def\recalculatebackgrounds {\global\newbackgroundtrue} \def\setbackgroundboxes {\ifnewbackground \global\chardef\newrightbackground\plusone \global\chardef\newleftbackground\plusone \global\setbox\leftbackground\emptybox \global\setbox\rightbackground\emptybox \fi \doifbothsides {\ifcase\newleftbackground \else % \showmessage\m!layouts8\empty \setbackgroundbox\leftbackground\relax \global\chardef\newleftbackground\zerocount \global\chardef\newrightbackground\zerocount \fi} {\ifcase\newleftbackground \else % \showmessage\m!layouts8\empty \setbackgroundbox\leftbackground\relax \global\chardef\newleftbackground\zerocount \fi} {\ifcase\newrightbackground \else % \showmessage\m!layouts8\empty \setbackgroundbox\rightbackground\doswapmargins \global\chardef\newrightbackground\zerocount \fi}% \ifx\@@mastate\v!repeat\else\global\newbackgroundfalse\fi} \def\addmainbackground#1% todo: dimension spec {\ifsomebackground \setbackgroundboxes \setbox#1\vbox {\offinterlineskip \doifmarginswapelse {\copy\leftbackground} {\copy\rightbackground} \box#1}% \fi} \def\setbackgroundoffsets {\ifsomebackground \ifnewbackground \global\let\pagebackgroundhoffset\!!zeropoint \global\let\pagebackgroundvoffset\!!zeropoint \global\let\pagebackgrounddepth \!!zeropoint \doifsomebackgroundelse{\v!text\v!text}\donetrue\donefalse \ifdone\else\doifsomebackgroundelse\v!text\donetrue\donothing\fi \ifdone \bgroup \scratchdimen\getvalue{\??ma\v!page\c!offset}% \doifsomebackgroundelse{\v!top\v!text}\donothing {\doifsomebackgroundelse{\v!bottom\v!text}\donothing {\xdef\pagebackgroundhoffset{\the\scratchdimen}}}% \doifsomebackgroundelse{\v!text\v!rightedge}\donothing {\doifsomebackgroundelse{\v!text\v!leftedge}\donothing {\xdef\pagebackgroundvoffset{\the\scratchdimen}% \scratchdimen\getvalue{\??ma\v!page\c!depth}% \xdef\pagebackgrounddepth{\the\scratchdimen}}}% \egroup \fi \fi \fi} \appendtoks \setbackgroundoffsets \to \everybeforepagebody \newconditional\swapbackgroundmargins \settrue\swapbackgroundmargins \def\setbackgroundbox#1#2% {\global\setbox#1\vbox {\dontcomplain \swapmargins \ifconditional\swapbackgroundmargins \doifmarginswapelse \donothing {\swapmacros\v!rightmargin\v!leftmargin \swapmacros\v!rightedge \v!leftedge}% \fi \calculatereducedvsizes \offinterlineskip #2\relax \vskip\dimexpr-\topheight-\topdistance\relax \dodopagebodybackground\v!top\topheight \vskip\topdistance \dodopagebodybackground\v!header\headerheight \vskip\headerdistance \dodopagebodybackground\v!text\textheight \vskip\footerdistance \dodopagebodybackground\v!footer\footerheight \vskip\bottomdistance \dodopagebodybackground\v!bottom\bottomheight \vfilll}% \smashbox#1} \def\dodopagebodybackground#1#2% {\ifdim#2>\zeropoint % added, faster \setbox\scratchbox\vbox to #2 \bgroup\hbox\bgroup % \swapmargins \goleftonpage \dododopagebodybackground\leftedgewidth #2#1\v!leftedge \hskip\leftedgedistance \dododopagebodybackground\leftmarginwidth #2#1\v!leftmargin \hskip\leftmargindistance \dododopagebodybackground\makeupwidth #2#1\v!text \hskip\rightmargindistance \dododopagebodybackground\rightmarginwidth#2#1\v!rightmargin \hskip\rightedgedistance \dododopagebodybackground\rightedgewidth #2#1\v!rightedge \egroup\egroup \wd\scratchbox\zeropoint \box\scratchbox\relax \fi} \def\dododopagebodybackground#1#2#3#4% width height pos pos {\ifsomebackgroundfound{#3#4}% \ifdim#2>\zeropoint\relax \ifdim#1>\zeropoint\relax \doifvaluesomething{\??ma#3#4\c!setups}{\setups[\getvalue{\??ma#3#4\c!setups}]}% should not produce funny spaces ! \fastlocalframed [\??ma#3#4] [\c!component=#3-#4,\c!offset=\v!overlay,\c!setups=] {\vbox to #2{\vss\hbox to#1{\hss\getvalue{\??ma#3#4\c!command}\hss}\vss}}% \else \hskip#1% \fi \else \hskip#1% \fi \else \hskip#1% \fi} %D The background mechanism is quite demanding in terms or %D resources. We used to delay these definitions till runtime %D usage, but since today's \TEX's are large, we now do the %D work on forehand. %D %D \starttyping %D \setupbackgrounds [settings] %D \setupbackgrounds [paper,page,text,..] [settings] %D \setupbackgrounds [top,...] [leftedge,...] [settings] %D \stoptyping %D %D \showsetup{setupbackgrounds} %D %D Because the number of arguments runs from one to three, %D we need to check for it. \def\setupbackgrounds {\dotripleempty\dosetupbackgrounds} \def\dosetupbackgrounds[#1][#2][#3]% {\ifthirdargument \global\somebackgroundtrue \def\docommand##1% {\doifinsetelse{##1}{\v!paper,\v!page,\v!leftpage,\v!rightpage} {\getparameters[\??ma##1][#3]\checkbackground{##1}} {\def\dodocommand####1{\getparameters[\??ma##1####1][#3]\checkbackground{##1####1}}% \processcommalist[#2]\dodocommand}}% \processcommalist[#1]\docommand \else\ifsecondargument \global\somebackgroundtrue \doifcommonelse{#1}{\v!text,\v!hidden,\v!paper,\v!page,\v!leftpage,\v!rightpage} {\def\docommand##1{\getparameters[\??ma##1][#2]\checkbackground{##1}}% \processcommalist[#1]\docommand}% {\setupbackgrounds [#1]% [\v!leftedge,\v!leftmargin,\v!text,\v!rightmargin,\v!rightedge]% [#2]}% \else\iffirstargument \getparameters[\??ma][#1]% \fi\fi\fi \doifelsevalue{\??ma\v!page\c!offset}\v!overlay {\global\pageoffset\zeropoint} {\global\pageoffset\getvalue{\??ma\v!page\c!offset}}% \global\pagedepth\getvalue{\??ma\v!page\c!depth}% \xdef\pagebackgroundoffset{\the\pageoffset}% \xdef\pagebackgrounddepth {\the\pagedepth }% \doifelse\@@mastate\v!stop {\global\newbackgroundfalse} {\global\newbackgroundtrue }} \let\pagebackgroundoffset\!!zeropoint \let\pagebackgrounddepth \!!zeropoint %D Each areas (currently there are $1+3+25+1=30$ of them) %D has its own low level framed object associated. \presetlocalframed [\??ma\v!paper] \presetlocalframed [\??ma\v!page] \presetlocalframed [\??ma\v!leftpage] \presetlocalframed [\??ma\v!rightpage] \copyparameters [\??ma\v!paper\c!frame][\??ma\v!page] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!paper\c!background][\??ma\v!page] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!page\c!frame][\??ma\v!page] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!page\c!background][\??ma\v!page] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!leftpage\c!frame][\??ma\v!leftpage] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!leftpage\c!background][\??ma\v!leftpage] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!rightpage\c!frame][\??ma\v!rightpage] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] \copyparameters [\??ma\v!rightpage\c!background][\??ma\v!rightpage] [\c!offset,\c!depth,\c!radius,\c!corner,\c!color,\c!screen] %D We save some keying by defining the areas using %D intermediate commands. The inheritance macro makes sure %D that copies are efficient. \def\dodocommand#1#2% {\copylocalframed [\??ma#1#2][\??ma\v!page]% \getparameters [\??ma#1#2] [\c!background=,\c!frame=,\c!color=,\c!screen=\@@rsscreen, \c!bottomframe=,\c!topframe=,\c!leftframe=,\c!rightframe=]% \inheritparameter[\??ma][#1#2\c!color][\v!page\c!color]% \inheritparameter[\??ma][#1#2\c!screen][\v!page\c!screen]% \inheritparameter[\??ma][#1#2\c!framecolor][\v!page\c!framecolor]% \inheritparameter[\??ma][#1#2\c!backgroundcolor][\v!page\c!backgroundcolor]% \inheritparameter[\??ma][#1#2\c!backgroundscreen][\v!page\c!backgroundscreen]} %D The stand alone text area inherits from the page too. \dodocommand\v!text \empty \dodocommand\v!hidden\empty %D We now define all 25 main areas in a row. \def\docommand#1% {\dodocommand#1\v!leftedge \dodocommand#1\v!leftmargin \dodocommand#1\v!text \dodocommand#1\v!rightmargin \dodocommand#1\v!rightedge} \docommand\v!top \docommand\v!header \docommand\v!text \docommand\v!footer \docommand\v!bottom %D We need some cleanup now. \let\dodocommand\relax \let\docommand\relax %D We now set up the individual areas to use reasonable %D defaults. \setupbackgrounds [\c!state=\c!start] \setupbackgrounds [\v!paper,\v!page,\v!leftpage,\v!rightpage] [\c!frame=\v!off, \c!radius=.5\bodyfontsize, \c!corner=\v!rectangular, \c!background=, \c!screen=\@@rsscreen, \c!color=, %\c!frameoffset=\getvalue{\??ma\v!page\c!offset}, %\c!backgroundoffset=\getvalue{\??ma\v!page\c!offset}, \c!offset=\!!zeropoint, % later set to \v!overlay, watch out ! \c!depth=\!!zeropoint] \def\docommand#1% {\inheritparameter[\??ma][#1\c!frameoffset][\v!page\c!offset]% \inheritparameter[\??ma][#1\c!backgroundoffset][\v!page\c!offset]} \docommand\v!paper \docommand\v!page \docommand\v!leftpage \docommand\v!rightpage %D Again we clean up temporary macros. \let\docommand\relax %D The hidden layer can be populated by extending the %D following comma separated list. This only happens in core %D modules. % todo page-2 .. page+2 achter pagina -> bleed % spread-2 .. spread+2 achter spread -> spread (repeat 2 times) \def\enablehiddenbackground {\global\settrue\hiddenbackgroundenabled \global\somebackgroundtrue \recalculatebackgrounds} \def\disablehiddenbackground {\global\setfalse\hiddenbackgroundenabled} \def\hiddenbackground {\v!text-2,\v!text-1,\v!foreground,\v!text+1,\v!text+2} \setupbackgrounds [\v!hidden] [\c!background=\hiddenbackground] % The next series is used in local (for instance floating) % backgrounds. \presetlocalframed [\??ma\v!local] \def\localbackground {\v!local-2,\v!local-1,\v!foreground,\v!local+1,\v!local+2} \defineoverlay[\v!local-2][\positionoverlay{\v!local-2}] \defineoverlay[\v!local-1][\positionoverlay{\v!local-1}] \defineoverlay[\v!local+1][\positionoverlay{\v!local+1}] \defineoverlay[\v!local+2][\positionoverlay{\v!local+2}] \def\addlocalbackgroundtobox {\ifconditional\hiddenbackgroundenabled \expandafter\doaddlocalbackground \else \resetglobal \expandafter\gobbleoneargument \fi} \def\doaddlocalbackground#1% {\dodoglobal\setbox#1\hbox {\fastlocalframed % \localframed [\??ma\v!local] [\c!component=local,\c!frame=\v!off,\c!offset=\v!overlay,\c!setups=,% \c!location=\v!keep,% when we use \localframed instead of \fastlocalframed \c!background=\localbackground]% {\registerMPlocaltextarea{\box#1}}}% \resetglobal % redundant \doglobal\increment\localpositionnumber\relax} % afterwards ! % Test how previous macro behaves with depth: % % \startcolumnset % \input tufte % \placefigure{none}{\framed[lines=5]{xxx}} % \input tufte % \placefigure{none}{\starttabulate\NC test\nc test\NC\NR\stoptabulate} % \input tufte % \stopcolumnset %D Because we haven't really set up backgrounds yet, we set %D the main efficiency switch to false. \somebackgroundfalse \protect \endinput %D Removed \quote {features}: %D %D \starttyping %D \startinteraction %D \doifmarginswapelse %D {\copy\leftbackground} %D {\copy\rightbackground}% %D \stopinteraction %D \stoptyping %D %D \starttyping %D \edef\setpagebackgrounddepth% %D {\dp#2=\the\dp#2}% %D \setbox#2=\vbox\localframed[\??ma#1]{...} %D \setpagebackgrounddepth %D \stoptyping context-2013.05.28.20130704/texmf-dist/tex/context/base/thrd-tab.mkii0000644000175000017500000016170611571377075024301 0ustar norbertnorbert% 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 % \|{